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AACB0VsAT8AAQ90AAAAAgdJbAAPAAEPowABG2wQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+CE7AAEQvwABEOwAAg5xgA8AA/v8BgMAARD3AANIeTsAARErAAERPAABOYAPAAP5+ARbAAERVgMAARFHAANIeTsAA/wpJwABEXxzAAERoFMAARGPAANNRDwCB2AEAASeDnQDAAP6QPgI9FcAARIvAANNRDxzAAESXFMAARJLAANNRDwCAvgEAARbAAESwJ4OeYcAA/oIAwAD+lEFGwABEv8AARNXAAETIAAAAg59gA8AA/v8AFsAARM8ug5mB0z4DTsAAROPAAEToAACBvWADwAD+/wEcwABE7hTAAETqwADT1hAAbAEAARTAAET2wADTUQ8AAMAA/ypNwABFCQI1AAAAAABbAR7AAEUJwAC4fgQABBzAAEUmHsAARRPAAO9ZAQABFMAARSDAANPzEQAAg6AAAAAAwADwlYUAwADSyYYAwADS0hQAwADS+woAACtJwABFBRQAwADTEgsAPgI9FcAARTzAANM0DhTAAEVKwADT8xEAQsAARVoBPz9NwABFowI1AAAAAABbAR7AAEWjwAC4fgQABBzAAEWpLoM/AgACFMAARbrAANM0DgCBwABFx8AA0i8AgX6FAMAA0smGAMAA0tIUAMAA0vsKAAArTsAARZLAAEWZAACBdl0DaQFdA8AA/TsBYAPAAPyXARQAwADTEgsAQUfAAEXXgcAARd/AANIvAgHAAEYBasAARgFgA12B5AA+Aj0cwABGHhbAAEYPLoM9gXqAvwIAAoDAAEYfwADSHhzAAEY1FsAARiYugz2BeksBAAEUwABGNsAA0zQOAADAAP2BAMAA/YJCwABGTAEBwABGaGrAAEZoYANdgfAAPgI9HMAARokWwABGeC6DPoF7gL8CAAKAwABGisAA0h4cwABGohbAAEaRLoM+gXtLAQABFMAARqPAANM0DgAAwAD9gQDAAP2CQsAARrkBPYvAAEbKwADSoBTAAEbRwADVARAAQgAAPR4AwAC4gQIAAoIAwADSYoMAwADSoABKwABG2wADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACCAMAA0mKB3QIAAhQAwADWLQ4AFADAANY2DwAAwAC5kT2MAMAA0sAeAMAAuIIBAAEU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BAEBwABDEQAAAIStYAOCiwADwABDMAAAAIC9YAPAAP5+AWoAYAPAAP2hecAAQ0cAAACEql0DwAD9OwFgA4LnAWoAYAPAAP2hecAAQ2UAAACEaF0DwAD9OwFgA4TZAWoAYAPAAP2heWADgsIBPwEKAMAAQ4CC2wUABZM1AAAAAQBdA8AA/TsBYAOE2QGDwABDj8ABMiUjHMAAQ5uEAMABMldIAQABKwAAMcAAQ6pgA4TZAIQAwAEyVwFdA8AA/TsBYAOE2RbAAEPKgMAAQ7rAATHfhGOCaoHAAEPVwAEx7jUAAAABAF0DwAD9OwFgA4LnAYLAAEPbwAEyByMcwABD54QAwAEyvEgBAAErAAAxwABD9mADgucAhADAATK8AV0DwAD9OwFgA4LnAAWC2g3AAEP+wABD/sAARQMAhLAAA8AARBbAAEUDAAAAAwEBwABEHwAAAIStYAOCiwACwABESAAAAISqXQPAAP07AWADgucBagBgA8AA/aF5wABEZgAAAIRoXQPAAP07AWADhNkBagBgA8AA/aF5YAOCwgE/AQoAwABEgYLbBQAFasAARI1gA8AA/JcVNQAAAAEAXQPAAP07AWADhNkBgsAARJnAATNWIxzAAESlgwDAATOTSAEAASsAADHAAES0YAOE2QCDAMABM5MBXQPAAP07AWADhNkWwABE1IDAAETEwAEzKYRjgmorNQAAAAEAXQPAAP07AWADgucBgcAAROXAATM4IxzAAETxgwDAATPwSAEAASsAADHAAEUAYAOC5wCDAMABM/ABXQPAAP07AWADgucABYLbDcAARQjAAEUIwABF0ACEsQADwABFJcAARdAAAAAFBQXAAEUrAAAEhINgA8AA/JcAwABFNwAABIRoXQPAAP07AWADhNkAwABFTwAABISpYAOCewDAAEVuAAAEgL1gA8AA/n4AwABFeQAABISqXQPAAP07AWADgucAAGADgsIBPgI9HsAARYyCNAIAAhbAAEWXLoRogsUuAD0ewABFr4I0AgACFsAARbouhKqCyC4ABggBgsSAAMABNF0IAYLFgQDAATRtCAGCxoIAwAE0gggBgseDAMABNJAIAYLIhADAATSgCQHAAEUIgmcAAAAACQaCzA3AAEXVwABF4cAARfsBAISyAAAAAQPAAEXywABF+wAAAAAAAABgA4KLAUrAAEX1ASbAAEX1ARbAAEX1LoRXglhgA4KLBoLNDcAARf/AAEYLwABGPgEAhLMAAAABA8AARhnAAEY+AAAAAAAAAGADgosBSsAARhwBFsAARjUWwABGHC6EqYLGhG2CggaCzg3AAEaWwABGn8AARsIBAIS0AAAAAQPAAEaowABGwgAAAAAAAABgA8AA+tEBSsAARqsBIRzAAEa+HMAARrEWwABGqy6Eg4LEg3wBAAFqwABGs2ADwAD8lxUAwAD8r0gBAAGTAMAA/bsGgs8NwABGxsAARs/AAEbkAQCEtQAAAAEDwABG2MAARuQAAAAAAAAAYAPAAPrRAUrAAEbbASEWwABG3C6EtILOBoLQDcAARujAAEbxwABHGAEAhLYAAAABA8AARvzAAEcYAAAAAAAAAGADwAD60QFKwABG/wEhHMAARxQcwABHBRbAAEb/LoSDgsSDfAEAAWrAAEcHYAPAAPyXIQDAAPyvSAEAAZMAwAD9uwaC0g3AAEcdwABHIsAAR3sAAIRpAAAAAQPAAEcvwABHewAAAAEBAcAARzsAAACEt2ADhNkAAFwBPgE9HMAAR1kWwABHTS6EaILFVgEAATXAAEddAAABAGADhNkBgMAAR13AATbzNQAAAAEAWwEXwABHaYHAAEdnwAE3G4RXLoJYgQDAATcbAMAA/UwGgtMNwABHgMAAR4DAAEe3AACEUgAAAAEDwABHhsAAR7cAAAABAQHAAEeTAAAAgPJdA5ksAVsAAFsBSsAAR5kBHMAAR5uAwABHmcABN36EuAEAAS4AmYQGgtQNwABHvMAAR7zAAEgXAACEUwAAAAEDwABHycAASBcAAAABAQHAAEfSAAAAgPJdA5ohAVsAAFwBPgI9HsAAR9uCNQIAAhbAAEflLoRogsWAwABH8sABN9UAPR7AAEf6gjUCAAIWwABIBC6EqoLIgMAASBHAATfVAAaC1Q3AAEgcwABIHMAASJMAAIRZAAAAAQPAAEgtwABIkwAAAAEBAcAASDoAAACA8mADml0AAFsBPgI9HsAASEOCOQMAAxbAAEhRLoRogsWAwABIXsABOE8uAD0ewABIbII5AwADFsAASHouhKqCyIDAAEiHwAE4Ty4AAAABNSsAATVyAAE1uAABNiIAATZiAAE2zAABN1cAATeuAAE4KAABOKIAAAAJAoLcDcAASPfAAEj9wABK3wOEuQAAAWABglIAAAIEgt4NwABJNcAASUAJhGgAXQPAAP07AWADhNkABILfDcAASVHAAElYCYS6AGADwAD+fgABBYLmDcAASV3AAEldwABJsAAAAAPAAElowABJsAAAAAICAsAASW4AAASEaF0DwAD9OwFgA4TZAMAASYAAAASEumADwAD+fgAAYAOC3AE+AT0ewABJj4I0AgACFsAASZouhGiC3i4AAwgBgt6AAMABOUIIAYLfgQDAATlXCQHAAEldgmcAAAAABAaC4Q3AAEm1wABJusAAShMAAIRpAAAAAQPAAEnHwABKEwAAAAEBAcAASdMAAACEt2ADhNkAAFwBPgE9HMAASfEWwABJ5S6EaILeVgEAATXAAEn1AAABAGADhNkBgMAASfXAATnPNQAAAAEAWwEXwABKAYHAAEn/wAE594RXLoJYgQDAATn3AMAA/UwGguINwABKGMAAShjAAEpJAACEUgAAAAEDwABKHsAASkkAAAABAQHAAEorAAAAgPJdA5ksAVsAAFsBSsAASjEBHMAASjOAwABKMcABOlqEuwEAAS4AmYYGguMNwABKTsAASk7AAEqKAACEUwAAAAEDwABKW8AASooAAAABAQHAAEpkAAAAgPJdA5ohAVsAAFwBPgE9HsAASm2CNQIAAhbAAEp3LoRogt6AwABKhMABOrEABoLkDcAASo/AAEqPwABK3QAAhFkAAAABA8AASqDAAErdAAAAAQEBwABKrQAAAIDyYAOaXQAAWwE+AT0ewABKtoI5AwADFsAASsQuhGiC3oDAAErRwAE7DC4AAAABOagAATozAAE6igABOuUAATs/AAAABAKC5w3AAEsZwABLH8AATN0DhLwAAAFgAYJSAAACBILpDcAAS0TAAEtKGIS9AGADwAD60QAEguoNwABLYsAAS2cJhL4AXQPAAP07AWADwAD+fgADBYLzDcAAS5vAAEubwABLvgAAAAPAAEulwABLvgAAAAICAsAAS6sAAASEvWADwAD60QDAAEu4AAAEhL5dA8AA/TsBYAPAAP5+AABgA4LnAT8DCAGC6YAAwAE7zQgBguqBAMABO90JAcAAS5uCZwAAAAAFgvQNwABLwsAAS8LAAEvtAIS/AAPAAEvRwABL7QAAAAEBAcAAS9cAAASEvl0DwAD9OwFgA8AA/n4AAGADgucBPwMIAYLqgADAATw/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A4QSgmuEFUgBAAFqwADaImADhFKB0QDAAP3xwADZzMAA2ioAPRfAANoxLoUtHsAA2kOCPQEAAYDAANpWwAGiCgCD8waECg3AANpmwADaZsAA2qsAAIRSAAAAAQPAANpswADaqwAAAAEBAcAA2nsAAACA8l0DmRgBWwAAWwFKwADagQEcwADag4DAANqBwAGixoUwAQABLgCZHgaECw3AANqwwADasMAA2xYAAIT8AAAAAQPAANq/wADbFgAAAAEBAcAA2tcAAACA8l0DmhgBWwAAWwFKwADa4wEcwADa5YDAANrjwAGjHYUxAQABLgCaHgaEDA3AANsbwADbG8AA260AAIRTAAAAAQPAANsowADbrQAAAAEBAcAA2zEAAACA8l0DmiEBWwAAXAE+BD0ewADbOoI1AgACFsAA20QuhGiDgIDAANtRwAGjdAA9NQAAAAEAYAODfQEWwADbWS6CSYQCIxzAANthgQDAAaOqSAEAASsAACscwADbYYEAwAGjqoT8AQABgMAA23HAAaN0AIOVAVs9HsAA23mCNQIAAhbAANuDLoUsg/KAwADbksABo3QAPTUAAAABAGADiLQBFsAA25ougL2DgSMcwADboIEAwAGkEUgBAAErAAArHMAA26CBAMABpBGEUgEAAYDAANunwAGjdACIwQFbBoQNDcAA27LAANuywADcKQAAhFkAAAABA8AA28PAANwpAAAAAQEBwADb0AAAAIDyYAOaXQAAWwE+Aj0ewADb2YI5AwADFsAA2+cuhGiDgIDAANv0wAGkfi4APR7AANwCgjcCAAIWwADcFC6FLIPygMAA3CPAAaR+AAaEAw3AANwuwADcO8AA3FsBAIUPAAAAAQPAANxGwADcWwAAAAAAAABgA4jpAUrAANxJAWrAANxPYAOJGISqBoQEDcAA3F/AANxswADcjAEAhRAAAAABA8AA3HfAANyMAAAAAAAAAGADiOkBSsAA3HoBasAA3IBgA4kYhKoGhA8NwADckcAA3JrAAN0PAACEYYIuAAAAAQPAANy1wADdDwAAAAEBAcAA3LoAAACDYmADwAD8lwAAYAOKmQE+AUrAANzIAR7AANzPgjwDAAMWwADc5y6EX4JkFsAA3PsuhGaDgoDAAN0EwAGldQAAAAGeCwABnnUAAZ7fAAGfkAABoEEAAaB3AAGgrQABoOMAAaEl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Aog7gADAA1miSAEAASsAABbAAohIFsACiD4ugO2JdYPGglaAAMADWaIBYAPAAPyXBol/DcACiJ/AAoiswAKI1QEAhX8AAAABA8ACiLLAAojVAAAAAAAAAGADiOkBSsACiLUBNQAAAAEAYAOI6QEWwAKItS6Go4l2IxzAAojDgADAA1o0SAEAASsAABbAAojQFsACiMYugO2JdYV/iYeAAMADWjQBYAOI6QaJfA3AAon6wAKKDcACm98AAYalAAAAAQPAAoobwAKb3wAAAAMDA8ACiioAAACA7WADiYIAwAKKRAAAAIajYAOI6QDAAopfAAAAhqJgA4jbAABgA4jbAT4HTsACjV4AAACGpmADiNsAScACjiIcwAKOOoLAAo4mwANavEgBAAFqwAKOSWADiNuFbwDAAP3xPgE9i8ACjlvAA1rTasACjnhgA4jbhW8+A07AAo+awAKPoAAAhX9gA4jpATUAAAABAGADiOkBFsACj6yAwAKPosADWqCFf4mHIxzAAo+yhADAA1s0SAEAASsAAGrAAo+7YAOJAISbhADAA1s0AWADiOlOwAKP3MACj+0AAIanYAOI2wEjJcACj/+EwAKP+cADWyJgA4j0asACkBxgA4jbhY0WwAKQLITAApAmwANbIoZ9iO8BYAOI2z2LwAKQP8ADWtMjHMACkGGFwAKQUMADW3pIAQABasACkHBgA4jbhW8AwAD98WrAApCRYAOI24WNhcACkKXAA1t6AWADiNtJwAKQwRzAApDTgcACkMXAA1quSAEAASsAiO0+AUrAApDkAYPAApDrwANa0z9JwAKSUBzAApJjg8ACklTAA1rTSAEAAWrAApJyYAOI24WcAMAA/fE+AUrAApKCAWrAApKVYAOI24WcP0nAApULHMAClSkWwAKVHYHAApUPwANaroZ9iO9IAQABasAClThgA4jbhX4AwAD98T4BSsAClU0BasAClWBgA4jbhX4/ScACmJwcwAKYr4PAApigwANa00gBAAFqwAKYvmADiNuFjQDAAP3xPgFKwAKYzwFqwAKY4mADiNuFjT9KwAKbuwEWwAKb0IHAApvCwANaroZ9iO8AAANX4wADWDoAA1imAANY4gADWWwAA1oAAANaeQADXQUAAAAHAomCDcACnYXAAp2LwAKm9wOGqAAAAWABglIAAAYEiYQNwAKdssACnbsY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AAAAAQWJuw3AArBhwAKwYcACsH4AAAADwAKwcsACsH4AAAABAQHAArB4AAAEgJZfAwAAAABdA4myAV8DAAABPwIIAYm0gADAA2uKCQHAArBhibEAAAAAAwaJtg3AArCDwAKwisACsKAAACMAAAABA8ACsJLAArCgAAAAAAAAAGADwAD+fgFKwAKwmAEkwAKwoAEWwAKwmi6Alom0Bom5DcACsKXAArCtwAKwxwEAg8YAAAABA8ACsLbAArDHAAAAAAAAAGADwAD8lwFKwAKwuQEWwAKwvxbAArC5LoCWibSDxsAA/fcGibcNwAKwzMACsNrAArEpAwBIAAAAAQPAArDcwAKxKQAAAAEBAcACsOQAAACD22ADwAD95AAAYAPAAPrRAUrAArD0ASIlwAKw+oDAArD0wANscF0DibIBXwMAAAAcwAKxIRbAArEbFMACsRXAA2xwAAFdA4myAV8DAACAlom0SAEAARbAArEkLoCWibQAwAD98QAAA2u8AANsAAADbEoAA2zcAAAAAwKJvA3AArEuwAKxNMACsl4DhrIAAAFdAYmyAWADwAD9oQAAAAEFicMNwAKxZcACsWXAArGBAAAAA8ACsXHAArGBAAAAAAAAAGADibwBPwEJAMACsXaJuwEAASsABAaJvg3AArGGwAKxhsACsaAAAIRTAAAAAQPAArGTwAKxoAAAAAEBAcACsZwAAACA8l0DmiEBWwAAXAE+AAaJvw3AArGkwAKxpMACsdoAAIRSAAAAAQPAArGqwAKx2gAAAAEBAcACsbsAAACA8l0DmawBWwAAWwFKwAKxwQEcwAKxw4DAArHBwANtsYazAQABLgCZrwaJwA3AArHewAKx3sACsh4AAIT8AAAAAQPAArHtwAKyHgAAAAEBAcACsfYAAACA8l0DmiEBWwAAWwFKwAKx/AEcwAKx/oDAArH8wANuCIa0AQABLgCaQAaJwQ3AArIjwAKyLMACslwAAIavAAAAAQPAArIzwAKyXAAAAAEBAcACskQAAACFfWADm58AAGADiOkBSsACsk4BFsACslSAwAKyTsADbl+FgJurAAADbU4AA22KAANt4QADbjgAA26LAAAABAKJxA3AArJhwAKyZ8ACs5wDhrUAAAFdAYmyAWADwAD60QAAAAEFicsNwAKymMACspjAArK/AAAAA8ACsqTAArK/AAAA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t4EAAACA8l0DmawBWwAAWwFKwAK3hwEcwAK3iYDAAreHwAN17obAAQABLgCZswaJ4w3AAremwAK3psACt+gAAIT8AAAAAQPAAre1wAK36AAAAAEBAcACt74AAACA8l0DmiEBWwAAWwFKwAK3xAEcwAK3xoDAArfEwAN2RYbBAQABLgCaRAaJ5A3AArftwAK39sACuCgAAIavAAAAAQPAArf9wAK4KAAAAAEBAcACuA4AAACFfWADm58AAGADiOkBSsACuBgBFsACuB6AwAK4GMADdpyF0JuwAAADdYsAA3XHAAN2HgADdnUAA3bIAAAABAKJ5w3AArgtwAK4M8ACuy4DhsIAAAFgAYmmAAACBInpDcACuGTAArhoCYC9AGADwAD+fgAEieoNwAK4fMACuIwJhsMAYAOCewABBYn1DcACuJHAAriRwAK4wQAAAAPAArifwAK4wQAAAAICAsACuKUAAASAvWADwAD+fgDAAriwAAAEhsNgA4J7AABgA4nnAT8DCAGJ6YAAwAN3TQgBieqBAMADd10JAcACuJGJsQAAAAAHBonsDcACuMbAArjGwAK44AAAhFMAAAABA8ACuNPAArjgAAAAAQEBwAK43AAAAIDyXQOaIQFbAABcAT4ABontDcACuOXAArjlwAK5HQAAhFIAAAABA8ACuOvAArkdAAAAAQEBwAK4/AAAAIDyXQOZrAFbAABbAUrAArkCARzAArkEgMACuQLAA3f3hsQBAAEuAJm0BonuDcACuSHAArkhwAK5YwAAhPwAAAABA8ACuTDAArljAAAAAQEBwAK5OQAAAIDyXQOaIQFbAABbAUrAArk/ARzAArlBgMACuT/AA3hOhsUBAAEuAJpFBonvDcACuWjAArlvwAK58gAAIwAAAAEDwAK5d8ACufIAAAAAAAAAYAPAAP5+AT4BSsACuYABIyEcwAK5mBbAArmHLobDiepIAQABKwDAAP3xJMACueQEJ4bGFsACuckWwAK5vxbAArmuLobDieqEbYKChHyCjSeGcBbAArnWLoC9iekkwAK57gInhsYWwAK56S6AvYnpAWADwAD+fgaJ8w3AArn3wAK5/8ACui4BAIPGAAAAAQPAAroIwAK6LgAAAAAAAABgA8AA/JcBSsACugsBHsACuhGK7gIAAhbAAroXLoC9iekWwAK6HS6Gw4nqAAaJ8A3A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wALCGIDAAsIWwAOD5obOAQABLgCZtgaKHA3AAsIzwALCM8ACwnMAAIT8AAAAAQPAAsJCwALCcwAAAAEBAcACwksAAACA8l0DmiEBWwAAWwFKwALCUQEcwALCU4DAAsJRwAOEPYbPAQABLgCaRwaKHQ3AAsJ4wALCf8ACwrsAACMAAAABA8ACwofAAsK7AAAAAAAAAGADwAD+fgFKwALCjQEkwALCuwYWwALClS6FlsAA/fgnYxbAAsKjLoXTihUnhssWwALCsi6D1YoWJ4MmBoohDcACwtfAAsLfwALDYAEAg8YAAAABA8ACwujAAsNgAAAAAAAAAGADwAD8lwE+AUrAAsLuATUAAAABAGADwAD8lwEWwALC9S6GyIIuihgjHMACwwWAAMADhQdIAQABKwDAAP27F8ACwvUuhsiCLh7AAsMPiusCAAIWwALDMxbAAsMmLoXTihWDxsAA/fcewALDQ4rvAQABFsACw1Mug9WKFgAAihiAAMADhQcBYAPAAPyXBooeDcACw2XAAsNzwALEJAMASAAAAAEDwALDdcACxCQAAAABAQHAAsN9AAAAg9tgA8AA/eQAAGADwAD60QFKwALDjQEiHsACw43AAPZ4AgACLoDAAsOdwAOFqQABIiIlwALDtIDAAsOuwAOFqWADihMAHMACw+QWwALD1xTAAsPRwAOFqQABYAOKE4XTihVIAQABFsACw+cuhdOKFQCI7QAewALEAYJGAgACFsACxBIUwALEDMADhakAAWADihOD1YoWFsACxBsug9WKFgAGih8NwALEKcACxDLAAsR9AACGrwAAAAEDwALEOcACxH0AAAABAQHAAsRKAAAAhX1gA5ufAABgA4jpAUrAAsRaARzAAsRggMACxFrAA4Z4hdUBAAEWwALEcC6F04oVAJu4AAADgx8AA4O/AAOEFgADhG0AA4TPAAOFgwADhlEAA4ayAAAABwKKJA3AAsSCwALEiMACyCwDhtAAAAFgAYmmAAADBIomDcACxLjAAsTECYXTAGADiOkABIonDcACxN3AAsTkCYPVAF0DwAD9OwFgA4mmAASKKQ3AAsZ5wALGiBiGyIIuAGADwAD8lwErAQWKNA3AAsTpwALE6cACxRUAAAADwALE9MACxRUAAAACAgLAAsT6AAAEhdNgA4jpAMACxQ0AAASD1V0DwAD9OwFgA4mmAABgA4okAT8DCAGKJoAAwAOHYggBiieBAMADh3AJAcACxOmJsQAAAAAHBoorDcACxRrAAsUawALFqwAAhFMAAAABA8ACxSfAAsWrAAAAAQEBwALFMAAAAIDyXQOaIQFbAABcAT4CPRzAAsVGFsACxTkuhdOKJoRSAQABgMACxU3AA4fVAIjrRsACxVXAAsV+wALFaQAAAYYVYAOJpgAWwALFdS6D1YonPgE9HMACxY+BwALFhsADiBSE/AEAAYDAAsWfwAOH1QCJqgaKLA3AAsWwwALFsMACxeUAAIRSAAAAAQPAAsW2wALF5QAAAAEBAcACxccAAACA8l0DmawBWwAAWwFKwALFzQEcwALFz4DAAsXNwAOIdYbRAQABLgCZtwaKLQ3AAsXpwALF6cACxigAAIT8AAAAAQPAAsX4wALGKAAAAAEBAcACxgEAAACA8l0DmiEBWwAAWwFKwALGBwEcwALGCYDAAsYHwAOIzIbSAQABLgCaSAaKLg3AAsYtwALGNMACxnAAACMAAAABA8ACxjzAAsZwAAAAAAAAAGADwAD+fgFKwALGQgEkwALGcAYWwALGSi6FlsAA/fgnYxbAAsZYLoXTiiYnhssWwALGZy6D1YonJ4MmBooyDcACxozAAsaUwALHFQEAg8YAAAABA8ACxp3AAscVAAAAAAAAAGADwAD8lwE+AUrAAsajATUAAAABAGADwAD8lwEWwALGqi6GyIIuiikjHMACxrqAAMADiZZIAQABKwDAAP27F8ACxqouhsiCLh7AAsbEiusCAAIWwALG6BbAAsbbLoXTiiaDxsAA/fcewALG+IrvAQABFsACxwgug9WKJwAAiimAAMADiZYBYAPAAPyXBoovDcACxxrAAscowALH2AMASAAAAAEDwALHKsACx9gAAAABAQHAAscyAAAAg9tgA8AA/eQAAGADwAD60QFKwALHQgEiHsACx0LAAPZ4AgACLoDAAsdSwAOKOAABIiIlwALHaYDAAsdjwAOKOGADiiQAHMACx5gWwALHixTAAseFwAOKOAABYAOKJIXTiiZIAQABFsACx5suhdOKJgCI7QAewALHtYJGAgACFsACx8YUwALHwMADijgAAWADiiSD1YonFsACx88ug9WKJwAGijANwALH3cACx+bAAsgqAACGrwAAAAEDwALH7cACyCoAAAABAQHAAsf+AAAAhX1gA5ufAABgA4jpAUrAAsgIARzAAsgOgMACyAjAA4sHhdkBAAEWwALIHS6F04omAJu5AAADh64AA4hOAAOIpQADiPwAA4leAAOKEgADiuAAA4tBAAAABwKKNQ3AAsgvwALINcACz1oDhtMAAAFgAYmmAAAEBIo3DcACyGvAAsh5CYXiAGADgnsABIo4DcACyJLAAsifCYUsAF0DwAD9OwFgA4jpAASKOQ3AAsjCwALIzQmF4wBdA8AA/W0CYAOCe2ADiaYABIo7DcACzQDAAs0PGIbIgi4AYAPAAPyXASsBBYpHDcACyNLAAsjSwALJHQAAAAPAAsjiwALJHQAAAAMDA8ACyOgAAASF4mADgnsAwALI/QAABIUsXQPAAP07AWADiOkAwALJEQAABIXjXQPAAP1tAmADgntgA4mmAABgA4o1AT8ECAGKN4AAwAOMEQgBijiBAMADjB8IAYo5ggDAA4w0CQHAAsjSibEAAAAACAaKPQ3AAskiwALJLMACyU8BAITvAAAAAQPAAsk2wALJTwAAAAAAAABgA4MbAUrAAsk5ARbAAslIFsACyTkuheKKN4RvgoMGikANwALJVMACyVTAAsqQAACEUwAAAAEDwALJYcACypAAAAABAQHAAslqAAAAgPJdA5ohAVsAAFwBPgQ9HMACyYoWwALJghbAAslzLoXiijeEb4KDhPwBAAGAwALJmsADjO0Ag1g9HsACyaKCNQIAAhbAAsmsLoUsijiAwALJu8ADjO0ARsACycPAAsn3wALJ2AAAAYRjYAOCewAWwALJ8RbAAsnlLoXjijmDaMAA/Y8+AT0cwALKERbAAsoJgcACyf/AA41UhHOChYT8AQABgMACyiHAA4ztAIPIRsACyi/AAspjwALKQwAAAYYVYAOJpgAWwALKWxbAAspPLoXjijkpwAD9kD4BPRzAAsp0gcACymvAA42rhPwBAAGAwALKhMADjO0AiaoGikENwALKlcACypXAAsrPAACEUgAAAAEDwALKm8ACys8AAAABAQHAAsqsAAAAgPJdA5msAVsAAFsBSsACyrIBHMACyrSAwALKssADjhaG1AEAAS4AmbgGikINwALK08ACytPAAssXAACE/AAAAAEDwALK4sACyxcAAAABAQHAAsrrAAAAgPJdA5ohAVsAAFsBSsACyvEBHMACyvOA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LogJi8hqwABDRmADnReHsYvNQgAAP0nAAENXHMAAQ2gWwABDYRTAAENbwARIewwAgbzAAP8FSAEAASeITADAAP6NPgM9HMAAQ38ugcUCAAIcwABDuGrAAEORYAORo4e8gl8DAAMUwABD1MAESHsMABzAAEPblIHGAAAAAMAA/LpqwABD32ADwAD8lxUAkatqwABD/WADkfCBowCL9j2JwABEC8AERpMXwABEEi6ICYvIasAARCdgA50Xh7GLzUIAAD9NwABEUQI1AAAAAABbAR7AAERRwAC4fgQABBzAAERXLohai8gBAAEWwABEbBbAAERlLoJVi9uDHsAA/R8Ai/yDAMAERq+EAMAERrgUAMAERuEIAAArPYnAAEQ+wARGkxfAAERFLogJi8gUAMAERvgJAIvNQgAAPR4AwAC4gQIAAoAAwARGb4EAwARGkwBKwABEdgADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACAAMAERm+B3QIAAhQAwARKOgwAFADABEpDDQAAwAC5kT2KAMAERqYeAMAAuIIBAAEUAMAERuEIAAA9iwDABEavHgDAALh8AQABFADABEbhCAAAPYwAwARGuB4AwAC4fQEAARQAwARG4QgAAD0cwABAoIAAwARGb2oBAAEUAMAERuEIAAAASgABFgCAAMAERm+B3sAAuY0GjAkUwABEusAARMvAAEiNAACIVAAAAAEDwABE4cAASI0AAgABAQHAAETmAAAAgb1gA8AA/v8AAF0DwAC5aAFgA50XAT4PTgAAAAGByl0DwAC4rgFgA50XAR/AAETywAC4uwABYAOdFwAATgAAAACBy10DwAC5ZAFgA50XAE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBOAAAAAIhOWwBPwABEywAAAACB0lsAA8AAROHAAEiNBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4GTsAARQIAAACIW10DwAD9OwFgA8AA/JcASz4CTcAARWoCNQAAAAAAWwEewABFasAAuH4EAAQcwABFjhzAAEV7FsAARXAuglOL7ofdAQABgMAARYjABEsNAIumh94AAAAAi66EAMAES22FAMAES3YUAMAES6gKAAArPRXAAEVfwARL4Q4UAMAES78LAAABwABFo2ADi7IBwABFwQAAAYNTYAOLsgAAPgE9HMAARcwuiCUCAAIcwABGAmrAAEXtXQORrwFhAwJgA8AA/v9gA8AA/n5gA5GYh+GILwIAAoDAAEYQwARLDRbAAEYYFMAARhbABEx2DwAii7UAkbNqwABGK2ADkfCBowCMAEnAAEY9IRzAAEZKFMAARkHABEvhDgBIAQABKwDAAP1lPgI9F8AARlsuiAqLyIDAAEZqwARLDYvOSz4DTsAARpXAAEaZAACAq10DwAD9bQJgA8AA/n5gA8AA/v8BHsAARpudIwIAAhTAAEawwARL4Q4AgMAARrrABEsNAD2KwABGycAES1EfwABG1J1AAQABFMAARuDABE0lDwAAQgAAAALAAEbuYAPAAPxqAcAARwgAAAGDU2ADwAD8agAAPgE9HMAARxUugcUCAAIcwABHfxzAAEdVasAARyldA5GvAWEDAWADwAD+fmADkZiICogvAQABFsAAR2UUwABHY8AETZQPACLAAPxsAJGzgl8DAAOAwABHjMAESw0WwABHlBTAAEeSwARNlA8Ag2LAAPxuasAAR5xgA8AA/JcVAJGfasAAR7xgA5HwgaMAi/bAAEfMWwHAAEfTAAABg1NbAAA+AT0cwABH4C6IJQIAAhzAAEgYasAASANdA5GvAWEDAmADwAD+/2ADwAD+fmADkZiH4YgvAgACgMAASCbABEsNJMAASDABFMAASC7ABE46DwAAkbNqwABIPGADkfCBowCMAD89F8AASFYuiAqLyCuLzj2KwABIb8AES1FqwABIf2ADnReHsUIAAD0eAMAAuIECAAKBAMAESy2CAMAES1EASsAASI0AAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAgQDABEstgd0CAAIUAMAETvEOABQAwARO+g8AAMAAuZE9iwDABEtkHgDAALiCAQABFADABEuoCgAAPYwAwARLbR4AwAC4fAEAARQAwARLqAoAAD2NAMAES3YeAMAAuH0BAAEUAMAES6gKAAA9HMAAROGBAMAESy1qAQABFADABEuoCgAAAEoAARYAgQDABEstgd7AALmNBov8FMAATCPAAEw0wABQSgAAiFqLyAAAAAEDwABMQcAAUEoAAgABAQHAAExGAAAAiF5gA8AA/v8AAF0DwAC5aAFgA50XAT4OTgAA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5V0Dka8BYQMCYAPAAP5+YAPAAP5+YAORmJQdBIzGGMAAmXrAAJomBonAAF0DkY0BYQMCYAPAAP5+YAPAAP5+YAORmAFqwACZn10DkY0BYQMCYAPAAP5+YAPAAP5+YAORmJRHBIzHGMAAnH3AAJ1WBonCAF0Dka8BYQMBYAPAAP5+YAORmAFqwACcql0Dka8BYQMBYAPAAP5+YAORmJR4BIzIGMAAnbzAAJ6OBonEAF0DkY0BYQMBYAPAAP5+YAORmAFqwACd5V0DkY0BYQMBYAPAAP5+YAORmJSlBIzJGMAAoF7AAKErBonHAF0Dka8BYQMBYAPAAP5+YAORmAFqwACgh10Dka8BYQMBYAPAAP5+YAORmJTRBIzKGMAAoZHAAKIWBonJAF0DkY0BYQMBYAPAAP5+YAORmAFqwAChtl0DkY0BYQMBYAPAAP5+YAORmJTxBIzLGMAAo9rAAKSkBonLAF0Dka8BYQMBYAPAAP5+YAORmAFqwACkAl0Dka8BYQMBYAPAAP5+YAORmJUcBIzMGMAApQrAAKXIBonNAF0DkY0BYQMBYAPAAP5+YAORmAFqwAClLl0DkY0BYQMBYAPAAP5+YAORmJVJBIzNGMAAp43AAKhlBonQAF0Dka8BYQMBYAPAAP5+YAORmAFqwACnvF0Dka8BYQMBYAPAAP5+YAORmJVyBIzOGMAAqMvAAKnNBonRAF0DkY0BYQMBYAPAAP5+YAORmAFqwACo9l0DkY0BYQMBYAPAAP5+YAORmJWSBIzPGMAAq5zAAKxmBonTAF0Dka8BYQMBYAPAAP5+YAORmAFqwACrxF0Dka8BYQMBYAPAAP5+YAORmJW+BIzQGMAArMzAAK2KBonVAF0DkY0BYQMBYAPAAP5+YAORmAFqwACs8F0DkY0BYQMBYAPAAP5+YAORmJXeBIzRGMAAr0/AALAnBonXAF0Dka8BYQMBYAPAAP5+YAORmAFqwACvfl0Dka8BYQMBYAPAAP5+YAORmJYHBIzSGMAAsI3AALGPBonYAF0DkY0BYQMBYAPAAP5+YAORmAFqwACwuF0DkY0BYQMBYAPAAP5+YAORmJYnBIzTGMAAs2LAALQ/BonaAF0Dka8BYQMBYAPAAP5+YAORmAFqwACzkF0Dka8BYQMBYAPAAP5+YAORmJZTBIzUGMAAtKXAALWEBoncAF0DkY0B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mKksBI1lGMABq8PAAaydBos6AF0Dka8BYQMBYAPAAP5+YAORmAFqwAGr8l0Dka8BYQMBYAPAAP5+YAORmKlYBI1mGMABrQPAAa3ABos8AF0DkY0BYQMBYAPAAP5+YAORmAFqwAGtLl0DkY0BYQMBYAPAAP5+YAORmKl4BI1nGMABr6vAAbC6Bos+AF0Dka8BYQMBYAPAAP5+YAORmAFqwAGv310Dka8BYQMBYAPAAP5+YAORmKmjBI1oGMABsSTAAbIEBotAAF0DkY0BYQMBYAPAAP5+YAORmAFqwAGxWF0DkY0BYQMBYAPAAP5+YAORmKnDBI1pGMABtA/AAbUJBotCAF0Dka8BYQMBYAPAAP5+YAORmAFqwAG0PF0Dka8BYQMBYAPAAP5+YAORmKnuBI1qGMABtW/AAbYABotEAF0DkY0BYQMBYAPAAP5+YAORmAFqwAG1mF0DkY0BYQMBYAPAAP5+YAORmKoOBI1rGMABt/7AAbj2BotGAF0Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAFqwAG4I10Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmKo5BI1sGMABuXXAAbo6BotIAF0DkY0BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAFqwAG5ll0DkY0BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmKpyBI1tGMABvKDAAb2kBotLAF0Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAFqwAG8y10Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmKqnBI1uGMABviPAAb70BotMAF0DkY0BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAFqwAG+Sl0DkY0BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmKrTBI1vGMABwWbAAcJeBotOAF0Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAFqwAHBi10Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmKsKBI1wGMABwt3AAcORBotQAF0DkY0BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAFqwAHC/l0DkY0BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmKs2BI1xGMABxffAAcb7BotSAF0Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAFqwAHGIl0Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmKtqBI1yGMABx3rAAciABotTAF0DkY0BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAFqwAHHoV0DkY0BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmKujBI1zGMABytnAAcvQBotWAF0Dka8BYQMBYAPAAP5+YAORmAFqwAHLBV0Dka8BYQMBYAPAAP5+YAORmKvbBI10GMABzDbAAc0KBotYAF0DkY0BYQMBYAPAAP5+YAORmAFqwAHMXl0DkY0BYQMBYAPAAP5+YAORmKwIBI11GMABzvDAAc/QBotbAF0Dka8BYQMBYAPAAP5+YAORmAFqwAHPI10Dka8BYQMBYAPAAP5+YAORmKw0BI12GMAB0DbAAdD+BotdAF0DkY0BYQMBYAPAAP5+YAORmAFqwAHQZV0DkY0BYQMBYAPAAP5+YAORmKxUBI13GMAB0tXAAdPMBotfAF0Dka8BYQMBYAPAAP5+YAORmAFqwAHTAV0Dka8BYQMBYAPAAP5+YAORmKx/BI14GMAB1DLAAdUqBothAF0DkY0BYQMBYAPAAP5+YAORmAFqwAHUWl0DkY0BYQMBYAPAAP5+YAORmKysBI15GMAB1xDAAdfwBotkAF0Dka8BYQMBYAPAAP5+YAORmAFqwAHXQ10Dka8BYQMBYAPAAP5+YAORmKzYBI16GMAB2FbAAdkeBotmAF0DkY0BYQMBYAPAAP5+YAORmAFqwAHYhV0DkY0BYQMBYAPAAP5+YAORmKz4BI17GMAB2vXAAdwqBotoAF0Dka8BYQMBYAOfAGADkZgBasAB2xxdA5GvAWEDAWADnwBgA5GYrSYEjXwYwAHckMAB3SQGi2sAXQORjQFhAwFgA58AYAORmAFqwAHcs10DkY0BYQMBYAOfAGADkZitSASNfRjAAd8awAHgHQaLbQBdA5GvAWEDAWADwAD+fmADkZgBasAB30ddA5GvAWEDAWADwAD+fmADkZitcQSNfhjAAeCDwAHhZAaLbwBdA5GNAWEDAWADwAD+fmADkZgBasAB4LBdA5GNAWEDAWADwAD+fmADkZitngSNfxjAAeNnwAHkRwaLcgBdA5GvAWEDAWADwAD+fmADkZgBasAB451dA5GvAWEDAWADwAD+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u04EjfUYwAKGMMACh1gGjH8AXQORrwFhAwFgA8AA/n5gA5GYAWrAAoZUXQORrwFhAwFgA8AA/n5gA5GYu3kEjfYYwAKHvsACiEAGjIEAXQORjQFhAwFgA8AA/n5gA5GYAWrAAofiXQORjQFhAwFgA8AA/n5gA5GYu5kEjfcYwAKKfsACi7UGjIMAXQORrwFhAwFgA8AA/n5gA5GYAWrAAoqjXQORrwFhAwFgA8AA/n5gA5GYu8QEjfgYwAKMG8ACjKAGjIUAXQORjQFhAwFgA8AA/n5gA5GYAWrAAoxAXQORjQFhAwFgA8AA/n5gA5GYu+QEjfkYwAKO2MACj+UGjIcAXQORrwFhAwFgA8AA/n5gA5GYAWrAAo71XQORrwFhAwFgA8AA/n5gA5GYvA8EjfoYwAKQS8ACkLgGjIkAXQORjQFhAwFgA8AA/n5gA5GYAWrAApBoXQORjQFhAwFgA8AA/n5gA5GYvC8EjfsYwAKSwcACk4wGjIsAXQORrwFhAwFgA8AA/n5gA5GYAWrAApLmXQORrwFhAwFgA8AA/n5gA5GYvFoEjfwYwAKT8sAClGsGjI0AXQORjQFhAwFgA8AA/n5gA5GYAWrAApQTXQORjQFhAwFgA8AA/n5gA5GYvHoEjf0YwAKWNcAClywGjI8AXQORrwFhAwFgA4jpYAORmAFqwAKWVF0Dka8BYQMBYAOI6WADkZi8pQSN/hjAApeVwAKYCwaMkQBdA5GNAWEDAWADiOlgA5GYAWrAApe0XQORjQFhAwFgA4jpYAORmLzDBI3/GMACmpzAApvBBoyTAF0Dka8BYQMDYAOI6WADiOlgA4jpYAORmAFqwAKavF0Dka8BYQMDYAOI6WADiOlgA4jpYAORmLzsBI4AGMACnFDAApzwBoyVAF0DkY0BYQMDYAOI6WADiOlgA4jpYAORmAFqwAKcbF0DkY0BYQMDYAOI6WADiOlgA4jpYAORmL0SBI4BGMACoHPAAqF/BoyXAF0Dka8BYQMCYAPAAP5+YAOI6WADkZgBasACoJJdA5GvAWEDAmADwAD+fmADiOlgA5GYvUMEjgIYwAKh9cACongGjJkAXQORjQFhAwJgA8AA/n5gA4jpYAORmAFqwAKiFF0DkY0BYQMCYAPAAP5+YAOI6WADkZi9ZwSOAxjAAqU+wAKmMwaMmwBdA5GvAWEDAWADwAD+fmADkZgBasACpWxdA5GvAWEDAWADwAD+fmADkZi9lgSOBBjAAqaZwAKnLQaMnQBdA5GNAWEDAWADwAD+fmADkZgBasACpsNdA5GNAWEDAWADwAD+fmADkZi9tgSOBRjAAqjywAKpTgaMnwBdA5GNAWADwAD9oQFqwAKpImADkaO95wSOBhjAAqmcwAKq7AaMowBgA5GjAWrAAqnRYAORo73nBI4HGMACqznAAquPBoykAF0DkY0BYAPAAP2hAWrAAqtmYAORo74SBI4IGMACq93AAqzLBoyoAGADkaMBasACrA9gA5GjvhIEjgkYwAKtGMACrUgGjKkAXQORjQFgA8AA/aEBasACrTBgA5Gjvj0EjgoYwAKtlsACro8GjK0AYAORowFqwAKtt2ADkaO+PQSOCxjAAq7cwAKvAAaMrgBdA5GNAWADwAD9oQFqwAKu7mADkaO+aASODBjAAq9OwAKwEAaMsgBgA5GjAWrAAq9pYAORo75oBI4NGMACsJTAArHXBoyzAF0Dka8BYQMBYAPAAP5+YAORmAFqwAKwvV0Dka8BYQMBYAPAAP5+YAORmL6QBI4OGMACsj3AArMKBoy2AF0DkY0BYQMBYAPAAP5+YAORmAFqwAKyZl0DkY0BYQMBYAPAAP5+YAORmL6+BI4PGMACtVzAArbeBoy5AF0Dka8BYQMBYAPAAP5+YAORmAFqwAK1kl0Dka8BYQMBYAPAAP5+YAORmL7tBI4QGMACt0jAArhSBoy8AF0DkY0BYQMBYAPAAP5+YAORmAFqwAK3fl0DkY0BYQMBYAPAAP5+YAORmL8bBI4RGMACuuXAArwxBoy/AF0Dka8BYQMBYAPAAP5+YAORmAFqwAK7El0Dka8BYQMBYAPAAP5+YAORmL9HBI4SGMACvJfAAr1wBozBAF0DkY0BYQMBYAPAAP5+YAORmAFqwAK8xF0DkY0BYQMBYAPAAP5+YAORmL9oBI4TGMACv7XAAsDcBozDAF0Dka8BYQMBYAPAAP5+YAORmAFqwAK/8V0Dka8BYQMBYAPAAP5+YAORmL+UBI4UGMACwUbAAsKCBozFAF0DkY0BYQMBYAPAAP5+YAORmAFqwALBfl0DkY0BYQMBYAPAAP5+YAORmL/BBI4VGMACxKLAAsWpBozIAF0Dka8BYQMBYAPAAP5+YAORmAFqwALE410Dka8BYQMBYAPAAP5+YAORmL/tBI4WGMACxhPAAscOBozKAF0DkY0BYQMBYAPAAP5+YAORmAFqwALGUF0DkY0BYQMBYAPAAP5+YAORmMAAQA0EjhcYwALJO8ACyqUGjMwAXQORrwFhAwJgA4jpYAOI6WADkZgBasACyW1dA5GvAWEDAmADiOlgA4jpYAORmMAAQD0EjhgYwALLI8ACzDAGjM8AXQORjQFhAwJgA4jpYAOI6WADkZgBasACy1VdA5GNAWEDAmADiOlgA4jpYAORmMAAQHUEjhkYwALPNMACz3wGjNIAXQORjQFgA8AA/aEBasACz1pgA5GjwABAqQSOGhjAAs/KwALQbwaM1QBgA5GjAWrAAs/1YAORo8AAQKkEjhsYwALQvMAC0PYGjNYAXQORjQFgA8AA/aEBasAC0NlgA5GjwABA0QSOHBjAAtFEwALR7QaM2QBgA5GjAWrAAtFqYAORo8AAQNEEjh0YwALSjcAC05wGjNoAXQORrwFhAwJgA4jpYAOI6WADkZgBasAC0rZdA5GvAWEDAmADiOlgA4jpYAORmMAAQPkEjh4YwALUGsAC1PwGjNwAXQORjQFhAwJgA4jpYAOI6WADkZgBasAC1ENdA5GNAWEDAmADiOlgA4jpYAORmMAAQS4Ejh8YwALXrMAC1/IGjN8AXQORjQFgA8AA/aEBasAC19FgA5GjwABBdASOIBjAAthAwALZRQaM5ABgA5GjAWrAAthqYAORo8AAQXQEjiEYwALZksAC2dAGjOUAXQORjQFgA8AA/aEBasAC2bFgA5GjwABBsQSOIhjAAtoewALa9QaM6QBgA5GjAWrAAtpGYAORo8AAQbEEjiMYwALbQsAC24YGjOoAXQORjQFgA8AA/aEBasAC22ZgA5GjwABB7gSOJBjAAtvUwALdIAaM7wBgA5GjAWrAAtv9YAORo8AAQe4EjiUYwALdbcAC3aUGjPAAXQORjQFgA8AA/aEBasAC3YlgA5GjwABCKwSOJhjAAt3zwALetQaM9ABgA5GjAWrAAt4YYAORo8AAQisEjicYwALfAsAC30gGjPUAXQORjQFgA8AA/aEBasAC3ydgA5GjwABCZQSOKBjAAt+WwALgkwaM+QBgA5GjAWrAAt/AYAORo8AAQmUEjikYwALhBMAC4qcGjPoAXQORrwFhAwFgA4jpYAORmAFqwALhSF0Dka8BYQMBYAOI6WADkZjAAEKTBI4qGMAC4xTAAuREBoz9AF0DkY0BYQMBYAOI6WADkZgBasAC41RdA5GNAWEDAWADiOlgA5GYwABCxwSOKxjAAubwwALnWAaNAABdA5GNAWADwAD9oQFqwALnJmADkaPAAEL6BI4sGMAC56bAAukIBo0EAGADkaMBasAC5+VgA5GjwABC+gSOLRjAAulywALqLgaNBQBdA5GvAWEDAWADwAD+fmADkZgBasAC6ZVdA5GvAWEDAWADwAD+fmADkZjAAEMoBI4uGMAC6pTAAuttBo0HAF0DkY0BYQMBYAPAAP5+YAORmAFqwALqs10DkY0BYQMBYAPAAP5+YAORmMAAQ1sEji8YwALs/cAC7S0GjQoAXQORjQFgA8AA/aEBasAC7RVgA5GjwABDnwSOMBjAAu17wALuWwaNDwBgA5GjAWrAAu2cYAORo8AAQ58EjjEYwALuqMAC7voGjRAAXQORjQFgA8AA/aEBasAC7tNgA5GjwABD0ASOMhjAAu9IwALwAQaNEwBgA5GjAWrAAu94YAORo8AAQ9AEjjMYwALwTsAC8J4GjRQAXQORjQFgA8AA/aEBasAC8HhgA5GjwABECQSONBjAAvDswALx+QaNGABgA5GjAWrAAvEbYAORo8AARAkEjjUYwALyRsAC8p4GjRkAXQORjQFgA8AA/aEBasAC8nRgA5GjwABENASONhjAAvLswALzswaNHABgA5GjAWrAAvMjYAORo8AARDQEjjcYwAL0AMAC9DoGjR0AXQORjQFgA8AA/aEBasAC9B1gA5GjwABEawSOOBjAAvSIwAL1eAaNIQBgA5GjAWrAAvSuYAORo8AARGsEjjkYwAL14sAC9qMGjSIAXQORrwFhAwFgA8AA/n5gA5GYAWrAAvYDXQORrwFhAwFgA8AA/n5gA5GYwABElgSOOhjAAvcJwAL3qgaNJABdA5GNAWEDAWADwAD+fmADkZgBasAC9yZdA5GNAWEDAWADwAD+fmADkZjAAETJBI47GMAC+WbAAvprBo0nAF0Dka8BYQMBYAPAAP5+YAORmAFqwAL5mF0Dka8BYQMBYAPAAP5+YAORmMAARPsEjjwYwAL60cAC+7IGjSkAXQORjQFhAwFgA8AA/n5gA5GYAWrAAvr/XQORjQFhAwFgA8AA/n5gA5GYwABFLgSOPRjAAv2wwAL+uQaNLABdA5GvAWEDAWADwAD+fmADkZgBasAC/eddA5GvAWEDAWADwAD+fmADkZjAAEVgBI4+GMAC/yPAAwAABo0uAF0DkY0BYQMBYAPAAP5+YAORmAFqwAL/Vl0DkY0BYQMBYAPAAP5+YAORmMAARYQEjj8YwAMB98ADAscGjTAAXQORrwFhAwFgA4jpYAORmAFqwAMCIF0Dka8BYQMBYAOI6WADkZjAAEWzBI5AGMADAzDAAwO4Bo0yAF0DkY0BYQMBYAOI6WADkZgBasADA1VdA5GNAWEDAWADiOlgA5GYwABF1QSOQRjAAwWjwAMF8QaNNABdA5GNAWADwAD9oQFqwAMFzGADkaPAAEYRBI5CGMADBj/AAwdKBo04AGADkaMBasADBm1gA5GjwABGEQSOQxjAAweXwAMH7QaNOQBdA5GNAWADwAD9oQFqwAMHxGADkaPAAEY8BI5EGMADCDvAAwjwBo08AGADkaMBasADCG1gA5GjwABGPASORRjAAwk9wAMJeQaNPQBdA5GNAWADwAD9oQFqwAMJW2ADkaPAAEZqBI5GGMADCcfAAwrDBo1BAGADkaMBasADCe5gA5GjwABGagSORxjAAwsQwAMLQgaNQgBdA5GNAWADwAD9oQFqwAMLKWADkaPAAEadBI5IGMADC5DAAwx4Bo1GAGADkaMBasADC7JgA5GjwABGnQSOSRjAAwzFwAMM+waNRwBdA5GNAWADwAD9oQFqwAMM4GADkaPAAEbQBI5KGMADDUnAAw45Bo1LAGADkaMBasADDW1gA5GjwABG0ASOSxjAAw6GwAMOuAaNTABdA5GNAWADwAD9oQFqwAMOn2ADkaPAAEb9BI5MGMADDwbAAw+XBo1PAGADkaMBasADDyhgA5GjwABG/QSOTRjAAxAQwAMRLwaNUABdA5GvAWEDAmADwAD+fmADwAD8l2ADkZgBasADEDddA5GvAWEDAmADwAD+fmADwAD8l2ADkZjAAEcoBI5OGMADEaDAAxJkBo1TAF0DkY0BYQMCYAPAAP5+YAPAAPyXYAORmAFqwAMRw10DkY0BYQMCYAPAAP5+YAPAAPyXYAORmMAAR2QEjk8YwAMUy8ADFf0GjVYAXQORrwFhAwFgA8AA/n5gA5GYAWrAAxTwXQORrwFhAwFgA8AA/n5gA5GYwABHnwSOUBjAAxZjwAMXJQaNWQBdA5GNAWEDAWADwAD+fmADkZgBasADFohdA5GNAWEDAWADwAD+fmADkZjAAEfVBI5RGMADGWnAAxrnBo1cAF0Dka8BYQMBYAOI6WADkZgBasADGZFdA5GvAWEDAWADiOlgA5GYwABICgSOUhjAAxtQwAMcIwaNXwBdA5GNAWEDAWADiOlgA5GYAWrAAxt4XQORjQFhAwFgA4jpYAORmMAASD4EjlMYwAMfDcADICUGjWIAXQORrwFhAwJgA8AA/n5gA8AA/n5gA5GYAWrAAx86XQORrwFhAwJgA8AA/n5gA8AA/n5gA5GYwABIbgSOVBjAAyCdwAMhbgaNZABdA5GNAWEDAmADwAD+fmADwAD+fmADkZgBasADIMpdA5GNAWEDAmADwAD+fmADwAD+fmADkZjAAEiYBI5VGMADI9XAAyQBBo1mAF0DkY0BYAPAAP2hAWrAAyPrYAORo8AASNAEjlYYwAMkT8ADJS4GjWoAYAORowFqwAMkbmADkaPAAEjQBI5XGMADJbHAAya0Bo1rAF0Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAFqwAMl110Dka8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmMAASPsEjlgYwAMnM8ADJ+oGjW0AXQORjQFhAwNgA8AA/n5gA8AA/v9gA8AA/v9gA5GYAWrAAydVXQORjQFhAwNgA8AA/n5gA8AA/v9gA8AA/v9gA5GYwABJKwSOWRjAAyqCwAMrpwaNbwBdA5GvAWEDAmADiOlgA4jpYAORmAFqwAMqtV0Dka8BYQMCYAOI6WADiOlgA5GYwABJZgSOWhjAAywlwAMtLwaNcQBdA5GNAWEDAmADiOlgA4jpYAORmAFqwAMsWF0DkY0BYQMCYAOI6WADiOlgA5GYwABJmwSOWxjAAzBzwAMyKgaNdABdA5GvAWEDBGADiOlgA4jpYAPAAP5+YAPAAP5+YAORmAFqwAMwmV0Dka8BYQMEYAOI6WADiOlgA8AA/n5gA8AA/n5gA5GYwABJ0gSOXBjAAzLZwAMz8gaNdwBdA5GNAWEDBGADiOlgA4jpYAPAAP5+YAPAAP5+YAORmAFqwAMy+10DkY0BYQMEYAOI6WADiOlgA8AA/n5gA8AA/n5gA5GYwABKFgSOXRjAAzivwAM6kQaNegBdA5GvAWEDBGADiOlgA4jpYAPAAP5+YAPAAP5+YAORmAFqwAM44V0Dka8BYQMEYAOI6WADiOlgA8AA/n5gA8AA/n5gA5GYwABKVgSOXhjAAztAwAM8hQaNfABdA5GNAWEDBGADiOlgA4jpYAPAAP5+YAPAAP5+YAORmAFqwAM7bl0DkY0BYQMEYAOI6WADiOlgA8AA/n5gA8AA/n5gA5GYwABKiwSOXxjAA0GZwANDrQaNfgBdA5GvAWEDBmADiOlgA4jpYAPAAP5+YAPAAP5+YAPAAP5+YAPAAP5+YAORmAFqwANByl0Dka8BYQMGYAOI6WADiOlgA8AA/n5gA8AA/n5gA8AA/n5gA8AA/n5gA5GYwABKywSOYBjAA0R3wANF1AaNgABdA5GNAWEDBmADiOlgA4jpYAPAAP5+YAPAAP5+YAPAAP5+YAPAAP5+YAORmAFqwANEpF0DkY0BYQMGYAOI6WADiOlgA8AA/n5gA8AA/n5gA8AA/n5gA8AA/n5gA5GYwABLDASOYRjAA0wUwANOmwaNggBdA5GvAWEDBmADiOlgA4jpYAPAAP5+YAPAAP5+YAPAAP5+YAPAAP5+YAORmAFqwANMTV0Dka8BYQMGYAOI6WADiOlgA8AA/n5gA8AA/n5gA8AA/n5gA8AA/n5gA5GYwABLWwSOYhjAA09lwANQ2gaNhQBdA5GNAWEDBmADiOlgA4jpYAPAAP5+YAPAAP5+YAPAAP5+YAPAAP5+YAORmAFqwANPml0DkY0BYQMGYAOI6WADiOlgA8AA/n5gA8AA/n5gA8AA/n5gA8AA/n5gA5GYwABLnASOYxjAA1cUwANY8QaNhwBdA5GvAWEDBGADiOlgA4jpYAPAAP5+YAPAAP5+YAORmAFqwANXQl0Dka8BYQMEYAOI6WADiOlgA8AA/n5gA8AA/n5gA5GYwABL6ASOZBjAA1mgwANa0QaNiQBdA5GNAWEDBGADiOlgA4jpYAPAAP5+YAPAAP5+YAORmAFqwANZyl0DkY0BYQMEYAOI6WADiOlgA8AA/n5gA8AA/n5gA5GYwABMHQSOZRjAA1/NwANh7gaNiwBdA5GvAWEDBWADiOlgA4jpYAPAAP5+YAOI6WADwAD+fmADkZgBasADX/xdA5GvAWEDBWADiOlgA4jpYAPAAP5+YAOI6WADwAD+fmADkZjAAExdBI5mGMADYqnAA2P5Bo2NAF0DkY0BYQMFYAOI6WADiOlgA8AA/n5gA4jpYAPAAP5+YAORmAFqwANi2F0DkY0BYQMFYAOI6WADiOlgA8AA/n5gA4jpYAPAAP5+YAORmMAATJYEjmcYwANpbsADa3QGjY8AXQORrwFhAwVgA4jpYAOI6WADwAD+fmADiOlgA8AA/n5gA5GYAWrAA2mlXQORrwFhAwVgA4jpYAOI6WADwAD+fmADiOlgA8AA/n5gA5GYwABM2gSOaBjAA2wzwANtlwaNkQBdA5GNAWEDBWADiOlgA4jpYAPAAP5+YAOI6WADwAD+fmADkZgBasADbGZdA5GNAWEDBWADiOlgA4jpYAPAAP5+YAOI6WADwAD+fmADkZjAAE0TBI5pGMADcpvAA3LnBo2TAF0DkY0BYAPAAP2hAWrAA3LDYAORo8AATVcEjmoYwANzNcADdAIGjZYAYAORowFqwANzYmADkaPAAE1XBI5rGMADdGnAA3U5Bo2XAF0Dka8BYQMBYAPAAP7/YAORmAFqwAN0kF0Dka8BYQMBYAPAAP7/YAORmMAATX8EjmwYwAN1nMADdj4GjZkAXQORjQFhAwFgA8AA/v9gA5GYAWrAA3W/XQORjQFhAwFgA8AA/v9gA5GYwABNowSObRjAA3ewwAN37gaNmwBdA5GNAWADwAD9oQFqwAN3z2ADkaPAAE3hBI5uGMADeDzAA3kaBo2fAGADkaMBasADeGRgA5GjwABN4QSObxjAA3lnwAN5tQaNoABdA5GNAWADwAD9oQFqwAN5kGADkaPAAE4MBI5wGMADegPAA3q2Bo2jAGADkaMBasADejFgA5GjwABODASOcRjAA3sDwAN7UQaNpABdA5GNAWADwAD9oQFqwAN7LGADkaPAAE40BI5yGMADe5/AA3xYBo2nAGADkaMBasADe81gA5GjwABONASOcxjAA3zwwAN/ywaNqABdA5GvAWEDAmADwAD+fmADwAD+/2ADkZgBasADfSNdA5GvAWEDAmADwAD+fmADwAD+/2ADkZjAAE5cBI50GMADgEHAA4EqBo2qAF0DkY0BYQMCYAPAAP5+YAPAAP7/YAORmAFqwAOAdF0DkY0BYQMCYAPAAP5+YAPAAP7/YAORmMAAToYEjnUYwAOFGsADhuoGjawAXQORrwFhAwFgA8AA/n5gA5GYAWrAA4VXXQORrwFhAwFgA8AA/n5gA5GYwABOuwSOdhjAA4dWwAOIRwaNrgBdA5GNAWEDAWADwAD+fmADkZgBasADh49dA5GNAWEDAWADwAD+fmADkZjAAE7fBI53GMADi0XAA45wBo2wAF0Dka8BYQMEYAPAAP5+YAPAAP5+YAPAAP5+YAPAAP7/YAORmAFqwAOLdl0Dka8BYQMEYAPAAP5+YAPAAP5+YAPAAP5+YAPAAP7/YAORmMAATw4EjngYwAOPHMADkDkGjbIAXQORjQFhAwRgA8AA/n5gA8AA/n5gA8AA/n5gA8AA/v9gA5GYAWrAA49JXQORjQFhAwRgA8AA/n5gA8AA/n5gA8AA/n5gA8AA/v9gA5GYwABPRASOeRjAA5VGwAOXYgaNtABdA5GvAWEDA2ADwAD+fmADwAD+fmADwAD+fmADkZgBasADlX1dA5GvAWEDA2ADwAD+fmADwAD+fmADwAD+fmADkZjAAE+FBI56GMADl+7AA5j5Bo22AF0DkY0BYQMDYAPAAP5+YAPAAP5+YAPAAP5+YAORmAFqwAOYJV0DkY0BYQMDYAPAAP5+YAPAAP5+YAPAAP5+YAORmMAAT7UEjnsYwAOcVsADnKAGjbgAXQORjQFgA8AA/aEBasADnH1gA5GjwABP9gSOfBjAA5zuwAOeAwaNvABgA5GjAWrAA50aYAORo8AAT/YEjn0YwAOeccADn1cGjb0AXQORrwFhAwFgA8AA/n5gA5GYAWrAA56fXQORrwFhAwFgA8AA/n5gA5GYwABQIwSOfhjAA5+9wAOglAaNvwBdA5GNAWEDAWADwAD+fmADkZgBasADn+ddA5GNAWEDAWADwAD+fmADkZjAAFBWBI5/GMADoovAA6OaBo3CAF0Dka8BYQMBYAPAAP5+YAORmAFqwAOiuV0Dka8BYQMBYAPAAP5+YAORmMAAUIgEjoAYwAOkAMADpOYGjcQAXQORjQFhAwFgA8AA/n5gA5GYAWrAA6QuXQORjQFhAwFgA8AA/n5gA5GYwABQuwSOgRjAA6c8wAOo7gaNxwBdA5GvAWEDA2ADwAD+fmADiOlgA4jpYAORmAFqwAOna10Dka8BYQMDYAPAAP5+YAOI6WADiOlgA5GYwABQ8ASOghjAA6l5wAOquAaNygBdA5GNAWEDA2ADwAD+fmADiOlgA4jpYAORmAFqwAOpqF0DkY0BYQMDYAPAAP5+YAOI6WADiOlgA5GYwABRLgSOgxjAA65rwAOuwwaNzQBdA5GNAWADwAD9oQFqwAOumWADkaPAAFFoBI6EGMADrxHAA6/kBo3QAGADkaMBasADr0hgA5GjwABRaASOhRjAA7BLwAOxCwaH/QBdA5GvAWEDAWADwAD+/2ADkZgBasADsHFdA5GvAWEDAWADwAD+/2ADkZiHHASOhhjAA7FuwAOx5waN0QBdA5GNAWEDAWADwAD+/2ADkZgBasADsZBdA5GNAWEDAWADwAD+/2ADkZjAAFGNBI6HGMADs3zAA7UbBo3TAF0Dka8BYQMBYAPAAP5+YAORmAFqwAOzp10Dka8BYQMBYAPAAP5+YAORmMAAUb0EjogYwAO1g8ADtl8GjdYAXQORjQFhAwFgA8AA/n5gA5GYAWrAA7WuXQORjQFhAwFgA8AA/n5gA5GYwABR8wSOiRjAA7jqwAO53AaN2QBdA5GvAWEDAWADwAD+fmADkZgBasADuRBdA5GvAWEDAWADwAD+fmADkZjAAFIlBI6KGMADukLAA7rwBo3bAF0DkY0BYQMBYAPAAP5+YAORmAFqwAO6aF0DkY0BYQMBYAPAAP5+YAORmMAAUkkEjosYwAO8wcADvRUGjd0AXQORjQFgA8AA/aEBasADvO1gA5GjwABSeASOjBjAA71jwAO+PwaN4ABgA5GjAWrAA72UYAORo8AAUngEjo0YwAO+jMADvuQGjeEAXQORjQFgA8AA/aEBasADvrpgA5GjwABSoASOjhjAA78ywAPACwaN5ABgA5GjAWrAA79pYAORo8AAUqAEjo8YwAPAg8ADwX4GjeUAXQORrwFhAwJgA8AA/n5gA8AA/v9gA5GYAWrAA8C6XQORrwFhAwJgA8AA/n5gA8AA/v9gA5GYwABSyASOkBjAA8HywAPC4QaN5wBdA5GNAWEDAmADwAD+fmADwAD+/2ADkZgBasADwiVdA5GNAWEDAmADwAD+fmADwAD+/2ADkZjAAFLyBI6RGMADxRHAA8YSBo3pAF0Dka8BYQMBYAPAAP5+YAORmAFqwAPFRF0Dka8BYQMBYAPAAP5+YAORmMAAUycEjpIYwAPGesADx1UGjesAXQORjQFhAwFgA8AA/n5gA5GYAWrAA8apXQORjQFhAwFgA8AA/n5gA5GYwABTSwSOkxjAA8kvwAPKIgaN7QBdA5GvAWEDAmADwAD+fmADwAD+fmADkZgBasADyV1dA5GvAWEDAmADwAD+fmADwAD+fmADkZjAAFN6BI6UGMADypvAA8tsBo3vAF0DkY0BYQMCYAPAAP5+YAPAAP5+YAORmAFqwAPKxV0DkY0BYQMCYAPAAP5+YAPAAP5+YAORmMAAU6QEjpUYwAPNgcADzeUGjfEAXQORjQFgA8AA/aEBasADzbVgA5GjwABT2QSOlhjAA84zwAPPEQaN9ABgA5GjAWrAA85wYAORo8AAU9kEjpcYwAPPXsADz84GjfUAXQORjQFgA8AA/aEBasADz5hgA5GjwABUAQSOmBjAA9AcwAPRKQaN+ABgA5GjAWrAA9BfYAORo8AAVAEEjpkYwAPRdsAD0cIGjfkAXQORjQFgA8AA/aEBasAD0Z5gA5GjiJIEjpoYwAPSEMAD0zcGiLwAYAORowFqwAPSPWADkaOIkgSOmxjAA9OlwAPUlgaN+gBdA5GvAWEDAWADwAD+fmADkZgBasAD091dA5GvAWEDAWADwAD+fmADkZjAAFQpBI6cGMAD1QDAA9XoBo38AF0DkY0BYQMBYAPAAP5+YAORmAFqwAPVNF0DkY0BYQMBYAPAAP5+YAORmMAAVE0Ejp0YwAPX0MAD2JoGjf4AXQORrwFhAwFgA8AA/n5gA5GYAWrAA9f8XQORrwFhAwFgA8AA/n5gA5GYwABUfASOnhjAA9kAwAPZvAaOAABdA5GNAWEDAWADwAD+fmADkZgBasAD2ShdA5GNAWEDAWADwAD+fmADkZjAAFSgBI6fGMAD24nAA9xxBo4CAF0Dka8BYQMCYAPAAP5+YAPAAP5+YAORmAFqwAPbt10Dka8BYQMCYAPAAP5+YAPAAP5+YAORmMAAVM8EjqAYwAPc6cAD3bkGjgQAXQORjQFhAwJgA8AA/n5gA8AA/n5gA5GYAWrAA90TXQORjQFhAwJgA8AA/n5gA8AA/n5gA5GYwABU+QSOoRjAA9/rwAPgRQaOBgBdA5GNAWADwAD9oQFqwAPgGmADkaPAAFUuBI6iGMAD4JPAA+FhBo4JAGADkaMBasAD4MtgA5GjwABVLgSOoxjAA+HPwAPizAaOCgBdA5GvAWEDAWADwAD+fmADkZgBasAD4gtdA5GvAWEDAWADwAD+fmADkZjAAFVWBI6kGMAD4zbAA+QqBo4MAF0DkY0BYQMBYAPAAP5+YAORmAFqwAPjbl0DkY0BYQMBYAPAAP5+YAORmMAAVXoEjqUYwAPmAcAD5ncGjg4AXQORjQFgA8AA/aEBasAD5j5gA5GjhvgEjqYYwAPmxcAD59oGh/kAYAORowFqwAPnC2ADkaOG+ASOpxjAA+hXwAPpPgaODwBdA5GvAWEDAmADwAD+fmADwAD+fmADkZgBasAD6IhdA5GvAWEDAmADwAD+fmADwAD+fmADkZjAAFWpBI6oGMAD6bfAA+qRBo4RAF0DkY0BYQMCYAPAAP5+YAPAAP5+YAORmAFqwAPp5F0DkY0BYQMCYAPAAP5+YAPAAP5+YAORmMAAVdMEjqkYwAPsy8AD7gYGjhMAXQORrwFhAwJgA4jpYAPAAP5+YAORmAFqwAPtC10Dka8BYQMCYAOI6WADwAD+fmADkZjAAFYIBI6qGMAD7oDAA++QBo4VAF0DkY0BYQMCYAOI6WADwAD+fmADkZgBasAD7rxdA5GNAWEDAmADiOlgA8AA/n5gA5GYwABWMASOqxjAA/KJwAPzegaOFwBdA5GvAWEDAmADwAD+fmADwAD+fmADkZgBasAD8rddA5GvAWEDAmADwAD+fmADwAD+fmADkZjAAFZjBI6sGMAD8/bAA/TKBo4ZAF0DkY0BYQMCYAPAAP5+YAPAAP5+YAORmAFqwAP0IF0DkY0BYQMCYAPAAP5+YAPAAP5+YAORmMAAVo0Ejq0YwAP27MAD99IGjhsAXQORrwFhAwJgA8AA/n5gA8AA/n5gA5GYAWrAA/cZXQORrwFhAwJgA8AA/n5gA8AA/n5gA5GYwABWwgSOrhjAA/hOwAP5HwaOHQBdA5GNAWEDAmADwAD+fmADwAD+fmADkZgBasAD+HddA5GNAWEDAmADwAD+fmADwAD+fmADkZjAAFbsBI6vGMAD+ybAA/v8Bo4fAF0Dka8BYQMBYAPAAP5+YAORmAFqwAP7V10Dka8BYQMBYAPAAP5+YAORmMAAVyEEjrAYwAP8ZMAD/TEGjiEAXQORjQFhAwFgA8AA/n5gA5GYAWrAA/yRXQORjQFhAwFgA8AA/n5gA5GYwABXRQSOsRjAA/7XwAP/sAaH/gBdA5GvAWEDAWADwAD+fmADkZgBasAD/wZdA5GvAWEDAWADwAD+fmADkZiILQSOshjABAAWwAQA2waOIwBdA5GNAWEDAWADwAD+fmADkZgBasAEAEFdA5GNAWEDAWADwAD+fmADkZjAAFdxBI6zGMAEAqzABAOKBo4lAF0Dka8BYQMBYAPAAP7/YAORmAFqwAQC4F0Dka8BYQMBYAPAAP7/YAORmMAAV54EjrQYwAQD7cAEBL0GjicAXQORjQFhAwFgA8AA/v9gA5GYAWrABAQdXQORjQFhAwFgA8AA/v9gA5GYwABXwgSOtRjABAZawAQHTwaOKQBdA5GvAWEDAWADwAD+fmADkZgBasAEBo9dA5GvAWEDAWADwAD+fmADkZjAAFfxBI62GMAEB7vABAicBo4rAF0DkY0BYQMBYAPAAP5+YAORmAFqwAQH7F0DkY0BYQMBYAPAAP5+YAORmMAAWBUEjrcYwAQKSMAECnoGji0AXQORjQFgA8AA/aEBasAECmFgA5GjwABYUwSOuBjABArIwAQLjwaOMQBgA5GjAWrABArqYAORo8AAWFMEjrkYwAQMRMAEDcsGjjIAXQORrwFhAwNgA8AA/n5gA4jpYAOI6WADkZgBasAEDHNdA5GvAWEDA2ADwAD+fmADiOlgA4jpYAORmMAAWIEEjroYwAQOVsAEDxoGjjUAXQORjQFhAwNgA8AA/n5gA4jpYAOI6WADkZgBasAEDoVdA5GNAWEDA2ADwAD+fmADiOlgA4jpYAORmMAAWLAEjrsYwAQS8cAEFHUGjjcAXQORrwFhAwJgA4jpYAOI6WADkZgBasAEExNdA5GvAWEDAmADiOlgA4jpYAORmMAAWOcEjrwYwAQU88AEFbwGjjkAXQORjQFhAwJgA4jpYAOI6WADkZgBasAEFRVdA5GNAWEDAmADiOlgA4jpYAORmMAAWR8Ejr0YwAQYz8AEGPsGjjwAXQORjQFgA8AA/aEBasAEGOVgA5GjwABZVgSOvhjABBlJwAQaOQaOQABgA5GjAWrABBloYAORo8AAWVYEjr8YwAQao8AEG2QGjkEAXQORrwFhAwFgA8AA/n5gA5GYAWrABBrKXQORrwFhAwFgA8AA/n5gA5GYwABZgQSOwBjABBvKwAQcSQaOQwBdA5GNAWEDAWADwAD+fmADkZgBasAEG+1dA5GNAWEDAWADwAD+fmADkZjAAFmlBI7BGMAEHjHABB+zBo5FAF0Dka8BYQMCYAOI6WADiOlgA5GYAWrABB5ZXQORrwFhAwJgA4jpYAOI6WADkZjAAFnXBI7CGMAEIDHABCEUBo5IAF0DkY0BYQMCYAOI6WADiOlgA5GYAWrABCBZXQORjQFhAwJgA4jpYAOI6WADkZjAAFoPBI7DGMAEJHbABCXoBo5LAF0Dka8BYQMCYAOI6WADiOlgA5GYAWrABCSdXQORrwFhAwJgA4jpYAOI6WADkZjAAFpGBI7EGMAEJmbABCdFBo5OAF0DkY0BYQMCYAOI6WADiOlgA5GYAWrABCaNXQORjQFhAwJgA4jpYAOI6WADkZjAAFp+BI7FGMAEKpfABCwFBo5RAF0Dka8BYQMCYAOI6WADiOlgA5GYAWrABCq9XQORrwFhAwJgA4jpYAOI6WADkZjAAFq1BI7GGMAELIPABC1eBo5UAF0DkY0BYQMCYAOI6WADiOlgA5GYAWrABCypXQORjQFhAwJgA4jpYAOI6WADkZjAAFrtBI7HGMAEMKzABDIaBo5XAF0Dka8BYQMCYAOI6WADiOlgA5GYAWrABDDSXQORrwFhAwJgA4jpYAOI6WADkZjAAFskBI7IGMAEMpjABDNzBo5aAF0DkY0BYQMCYAOI6WADiOlgA5GYAWrABDK+XQORjQFhAwJgA4jpYAOI6WADkZjAAFtcBI7JGMAENsHABDg+Bo5dAF0Dka8BYQMCYAOI6WADiOlgA5GYAWrABDbqXQORrwFhAwJgA4jpYAOI6WADkZjAAFuTBI7KGMAEOLzABDmdBo5gAF0DkY0BYQMCYAOI6WADiOlgA5GYAWrABDjlXQORjQFhAwJgA4jpYAOI6WADkZjAAFvLBI7LGMAEPP/ABD6BBo5jAF0Dka8BYQMCYAOI6WADiOlgA5GYAWrABD0iXQORrwFhAwJgA4jpYAOI6WADkZjAAFwCBI7MGMAEPv/ABD/OBo5mAF0DkY0BYQMCYAOI6WADiOlgA5GYAWrABD8iXQORjQFhAwJgA4jpYAOI6WADkZjAAFw6BI7NGMAEQzDABESoBo5pAF0Dka8BYQMCYAOI6WADiOlgA5GYAWrABENYXQORrwFhAwJgA4jpYAOI6WADkZjAAFxxBI7OGMAERSbABEYCBo5sAF0DkY0BYQMCYAOI6WADiOlgA5GYAWrABEVOXQORjQFhAwJgA4jpYAOI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A5GNAWEDA2ADiOlgA4jpYAOI6WADkZgBasAExkVdA5GNAWEDA2ADiOlgA4jpYAOI6WADkZjAAGjIBI8vGMAEywbABMxyBo9MAF0Dka8BYQMDYAPAAP5+YAPAAP5+YAOI6WADkZgBasAEyzRdA5GvAWEDA2ADwAD+fmADwAD+fmADiOlgA5GYwABpAASPMBjABMz6wATOBwaPTgBdA5GNAWEDA2ADwAD+fmADwAD+fmADiOlgA5GYAWrABM0oXQORjQFhAwNgA8AA/n5gA8AA/n5gA4jpYAORmMAAaT0EjzEYwATR0sAE0wsGj1EAXQORrwFhAwJgA8AA/n5gA8AA/n5gA5GYAWrABNH1XQORrwFhAwJgA8AA/n5gA8AA/n5gA5GYwABpfASPMhjABNOHwATULQaPVABdA5GNAWEDAmADwAD+fmADwAD+fmADkZgBasAE06pdA5GNAWEDAmADwAD+fmADwAD+fmADkZjAAGmsBI8zGMAE1mLABNa2Bo9WAF0DkY0BYAPAAP2hAWrABNaOYAORo8AAafIEjzQYwATXBMAE1/gGj1oAYAORowFqwATXNWADkaPAAGnyBI81GMAE2EXABNhxBo9bAF0DkY0BYAPAAP2hAWrABNhbYAORo8AAaiMEjzYYwATYv8AE2csGj18AYAORowFqwATY3mADkaPAAGojBI83GMAE2hjABNpKBo9gAF0DkY0BYAPAAP2hAWrABNoxYAORo8AAamIEjzgYwATamMAE29IGj2UAYAORowFqwATaumADkaPAAGpiBI85GMAE3B/ABNxjBo9mAF0DkY0BYAPAAP2hAWrABNxDYAORo8AAapYEjzoYwATcscAE3aYGj2oAYAORowFqwATc2mADkaPAAGqWBI87GMAE3fPABN4jBo9rAF0DkY0BYAPAAP2hAWrABN4LYAORo8AAaskEjzwYwATeccAE31wGj28AYAORowFqwATekmADkaPAAGrJBI89GMAE36nABN/PBo9wAF0DkY0BYAPAAP2hAWrABN+8YAORo8AAavwEjz4YwATgHcAE4P0Gj3QAYAORowFqwATgOWADkaPAAGr8BI8/GMAE4UrABOGGBo91AF0DkY0BYAPAAP2hAWrABOFoYAORo8AAazgEj0AYwATh1MAE4p4Gj3kAYAORowFqwATh+2ADkaPAAGs4BI9BGMAE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AHTABI+FGMAFUUbABVJxBpARAF0Dka8BYQMCYAPAAP5+YAPAAP5+YAORmAFqwAVRdF0Dka8BYQMCYAPAAP5+YAPAAP5+YAORmMAAdP4Ej4YYwAVS6cAFVAYGkBMAXQORjQFhAwJgA8AA/n5gA8AA/n5gA5GYAWrABVMXXQORjQFhAwJgA8AA/n5gA8AA/n5gA5GYwAB1NwSPhxjABVcUwAVZagaQFgBdA5GvAWEDBWADwAD+fmADwAD+fmADiOlgA4jpYAPAAP5+YAORmAFqwAVXQl0Dka8BYQMFYAPAAP5+YAPAAP5+YAOI6WADiOlgA8AA/n5gA5GYwAB1cgSPiBjABVoiwAVbWgaQGQBdA5GNAWEDBWADwAD+fmADwAD+fmADiOlgA4jpYAPAAP5+YAORmAFqwAVaUF0DkY0BYQMFYAPAAP5+YAPAAP5+YAOI6WADiOlgA8AA/n5gA5GYwAB1rQSPiRjABWDwwAVisgaQGwBdA5GvAWEDBGADwAD+fmADiOlgA4jpYAPAAP5+YAORmAFqwAVhH10Dka8BYQMEYAPAAP5+YAOI6WADiOlgA8AA/n5gA5GYwAB19ASPihjABWNhwAVkkwaQHgBdA5GNAWEDBGADwAD+fmADiOlgA4jpYAPAAP5+YAORmAFqwAVjjF0DkY0BYQMEYAPAAP5+YAOI6WADiOlgA8AA/n5gA5GYwAB2KQSPixjABWk0wAVqXAaQIABdA5GvAWEDAmADwAD+fmADwAD+fmADkZgBasAFaWJdA5GvAWEDAmADwAD+fmADwAD+fmADkZjAAHZnBI+MGMAFatTABWv/BpAiAF0DkY0BYQMCYAPAAP5+YAPAAP5+YAORmAFqwAVrAl0DkY0BYQMCYAPAAP5+YAPAAP5+YAORmMAAdqAEj40YwAVupsAFb5AGkCUAXQORrwFhAwJgA8AA/n5gA8AA/v9gA5GYAWrABW7KXQORrwFhAwJgA8AA/n5gA8AA/v9gA5GYwAB22ASPjhjABXAAwAVwgAaQJwBdA5GNAWEDAmADwAD+fmADwAD+/2ADkZgBasAFcCBdA5GNAWEDAmADwAD+fmADwAD+/2ADkZjAAHcCBI+PGMAFcorABXNlBof/AF0Dka8BYQMBYAPAAP5+YAORmAFqwAVysV0Dka8BYQMBYAPAAP5+YAORmIgKBI+QGMAFc83A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wAY3/SeUK4bABEf+wAY4KCeBS2QBAAEWwARIIoLABEgawAY3bJJmn98AwAD+k4jHJ45rWzLABEiXYAPAAP5+WwIngpSAwARIoMAGN0cnkmOBwARIsMAGN1UGkTAYwARMhcAETI3ABE8VAAGUMIxkAAAAAQPABEy2wARPFQAAAAICAsAETMUAAACSXWADiOkAwARM1QAAAJJeYAOI6QAAYAORmAE+Bk7ABEztwARM9QAAkl9gA5+8AR/ABEz7n+EAAAAATsAETRnABE0jAACSYF0DwAD9OwFgA8AA/eQBHMAETS2CwARNJcAGOTuSYQEAAYDABE03wAY5FgCfwk7ABE1OwARNWQAAkmJdA8AA/TsBYAPAAP3kARzABE1jgsAETVvABjk7kmEBAAGBwARNbcAGOSQAn8JOwARNf8AETYQAAIKUYAPAAP5+ARzABE2Qg8AETYbABjlYWAAAAADAAP0NTsAETaHABE2nAACSY2ADwAD+fgEcwARNtITABE2pwAY5klgAAAAAwAD9DUrABE2+AR/ABE3JkaIEAAFqwARN0V0DkY0BYQMCYAOI6WADiOlgA5GYwABdBgMiHMAETmMkwAROYwUnlDGFwAROMcAGOcwnlCuGwAROV8AGOfcngUtkAQABFsAETnuCwAROc8AGOTuSZp/fAMAA/pOIxyeOX1sywARO8mADwAD+flsCJ4KUgMAETvvABjkWJ5JjgcAETwvABjkkBpExGMAEVJjABFSgwARVrQABlDKMZAAAAAEDwARUw8AEVa0AAAABAQHABFTLAAAAgL1gA8AA/n4AAGADkZgBPgNJwARU1RbABFTegMAEVNnABjrlgVXAAP6EPTDABFTnJ5JUPz2IwARVA8AGOuUewARVCoJJAQABgMAEVSfABjrlAErABFUwAR/ABFU7kaIDAAFqwARVQ10DkY0BYQMBYAPAAP5+YAORmMAAXdICIiTABFWPAyeS9IDABFWFwAY65SeBS1sywARVnGADwAD+flsBJ4C9gMAEVaXABjrlBpEyGMAEXcHABF3JwAResgABlDOMZAAAAAEDwARd5sAEXrIAAAABAQHABF3tAAAAkoVgA58AAABgA5GYAT4CTsAEXf/ABF4GAACCYmADwAD+fgEWwAReDoDABF4IwAY7w4JinxpKwAReGAEfwAReI5GiAwABasAEXitdA5GN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HMAArPYul98BAAEWwACtB4DAAK0CwAhOwoRYglkAlWg9HMAArRgul9gBAAEWwACtM4DAAK0uwAhOwoUthYQAlWMGlYsuwACtTMAArV3AAK4MAACFrAFqwACtTWADwAD95AIAAAEDwACta8AArgwAAAABAQHAAK12AAAAg/NgA4WSAABcAT4EPRzAAK2CLocAAQABasAArZBgA8AA/JfAAGqTAJUuPRzAAK2gLpffAQABFsAArbGAwACtrMAIT2iEWIJZAJVoPRzAAK3CLpfYAQABFsAArd2AwACt2MAIT2iFLYWUAJVjPRzAAK3zLocKAQABFsAArgKAwACt/cAIT2iAloWVAJVGBpWMLsAArhHAAK4iwACvOAAAhbYBasAArhJgA8AA/eQCAAABA8AArjfAAK84AAAAAQEBwACuSQAAAIPzYAOFwwAAXAE+Bj0cwACuVS6HAAEAAWrAAK5jYAPAAPyXwABqIACVLj0cwACuei6X3wEAARbAAK6LgMAArobACFAvhFiCWQCVaD0cwACunC6HCgEAARbAAK6rgMAArqbACFAvhY+FxQCVRj0cwACuui6HCAEAARbAAK7JgMAArsTACFAvgL2FxgCVaj0cwACu1C6XqwEAARbAAK7sgMAArufACFAvW4XHAJVIPRzAAK78LpeQAQABFsAArxuAwACvFsAIUC+FkIXIAJViBpWNLsAArz3AAK9OwACwVQAAhbgBasAArz5gA8AA/eQCAAABA8AAr2jAALBVAAAAAQEBwACvfwAAAIPzYAOF1gAAXAE+BT0cwACviy6HAAEAAWrAAK+ZYAPAAPyXtOUAlS49HMAAr7Uul98BAAEWwACvxoDAAK/BwAhRN4RYglkAlWg9HMAAr9cuhwgBAAEWwACv5oDAAK/hwAhRN4C9hdgAlWo9HMAAr/Eul6sBAAEWwACwCYDAALAEwAhRN1uF2QCVSD0cwACwGS6XkAEAARbAALA4gMAAsDPACFE3hZCF2gCVYgaVji7AALBawACwa8AAsWwAAIWgAWrAALBbYAPAAP3kAgAAAQPAALCGwACxbAAAAAEBAcAAsJ4AAACD82ADhUwAAFwBPgU9HMAAsKouhwABAAFqwACwuGADwAD8l8AAhW4AlS49HMAAsNUul98BAAEWwACw5oDAALDhwAhSHIRYglkAlWg9HMAAsPcuhwoB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AACGNAFqwADVMGADwAD95AIAAAEDwADVU8AA1d8AAAABAQHAANVjAAAAg/NgA4fUAABcAT4DPRzAANVvLocAAQABasAA1X1gA8AA/JejtgCVLj0cwADVki6X3wEAARbAANWjgMAA1Z7ACHXDhFiCWQCVaD0cwADVtC6HBAEAARzAANXNFsAA1cAul1mU/ZUESwEAARbAANXTgMAA1c7ACHXDgkmH1gCWIwCVMAaVvi7AANXkwADV9cAA1qAAAIY2AWrAANXlYAPAAP3kAgAAAQPAANYIwADWoAAAAAEBAcAA1hgAAACD82ADh94AAFwBPgQ9HMAA1iQuhwABAAFqwADWMmADwAD8l6PhAJUuPRzAANZHLpffAQABFsAA1liAwADWU8AIdn+EWIJZAJVoPRzAANZpLocKAQABFsAA1niAwADWc8AIdn+FyofgAJVGPRzAANaILocKAQABFsAA1peAwADWksAIdn+CbYfhAJVGBpW/LsAA1qXAANa2wADXWAAAhjgBasAA1qZgA8AA/eQCAAABA8AA1sbAANdYAAAAAQEBwADW0wAAAIPzYAOH6QAAXAE+BD0cwADW3y6HAAEAAWrAANbtYAPAAPyXpjMAlS49HMAA1v8ul98BAAEWwADXEIDAANcLwAh3RIRYglkAlWg9HMAA1yEuhwoBAAEWwADXMIDAANcrwAh3RIJth+sAlUY9HMAA1zsuhwoBAAEWwADXSoDAANdFwAh3RIXKh+wAlUYGlcAuwADXXcAA127AANjhAACGPAFqwADXXmADwAD95AIAAAEDwADXf8AA2OEAAAABAQHAANeNAAAAg/NgA4f0AABcAT4JPSMcwADXqhbAANeZLpdYlP2VA0gBAAErAMAA/fEXwADXmS6XWJT9H8AA17KWGwAAAACVAysBYAOWDz0cwADX2hbAANfJLpdYlP2VA5fKAAAAAJYWPRzAANfrLocAAQABasAA1/lgA8AA/JeoLwCVLj0cwADYDC6X3wEAARbAANgdgMAA2BjACHgJhFiCWQCVaD0cwADYLi6X7AEAARbAANhQgMAA2EvACHgJhjqH9gCVzT0cwADYYC6XrQEAARbAANh3gMAA2HLACHgJhcqH9wCVUj0cwADYhy6XlwEAARbAANiagMAA2JXACHgJhjuH+ACVPT0cwADYqC6HCgEAARbAANi3gMAA2LLACHgJgm2H+QCVRj0cwADY0xbAANjCLpdYlP2VA5fLAAAAAJYXBpXBLsAA2ObAANj3wADajAAAhkABasAA2OdgA8AA/eQCAAABA8AA2QrAANqMAAAAAQEBwADZGgAAAIPzYAOIAQAAXAE+CT0jHMAA2TcWwADZJi6XWJT9lQNIAQABKwDAAP3xF8AA2SYul1iU/R/AANk/lhsAAAAAlQMrAWADlg89HMAA2WcWwADZVi6XWJT9lQOXygAAAACWFj0cwADZeC6HAAEAASMWwADZh4DAANmCwAh5foY/iAdqwADZlWADwAD8l746asAA2a9gA8AA/JetRQFgA8AA/JcAlS49HMAA2cQul98BAAEWwADZ1YDAANnQwAh5foRYglkAlWg9HMAA2eYul98BAAEWwADZ94DAANnywAh5foY+iAMAlWg9HMAA2ggul/IBAAEWwADaJoDAANohwAh5foJwiAQAlcw9HMAA2jUuhwoBAAEWwADaRIDAANo/wAh5foPRiAUAlUY9HMAA2lMuhwoBAAEWwADaYoDAANpdwAh5foJtiAYAlUY9HMAA2n4WwADabS6XWJT9lQOXywAAAACWFwaVwi7AANqRwADaosAA3AcAAIZDAWrAANqSYAPAAP3kAgAAAQPAANq2wADcBwAAAAEBAcAA2scAAACD82ADiA8AAFwBPgdJwADa0xzAANrqFsAA2tcul1qU/ZUFSAEAASsAwAD98T4BPRfAANr7LpdalP0fwADbFJYvAAAAAJUFPz0cwADbRhbAANszLpdalP2VBZfJAQABgMAA20zACHsaAJYrPRzAANtXLocAAQABasAA22VgA8AA/JeoWgCVLj0cwADbey6X3wEAARbAANuMgMAA24fACHsahFiCWQCVaD0cwADbnS6HCgEAARbAANusgMAA26fACHsagm+IEQCVRj0cwADbvS6XowEAARbAANvagMAA29XACHsahkKIEgCVQz0cwADb+RbAANvmLpdalP2VBQYBAAGAwADb/sAIexoAliwGlcMuwADcDMAA3B3AAN1zAACGSAFqwADcDWADwAD95AIAAAEDwADcLMAA3XMAAAABAQHAANw4AAAAg/NgA4gaAABcAT4FTsAA3HTAANx7AABhYAPAAPyXARbAANyOFsAA3IKAwADcfcAIfF+Fz4gcYcAA/Ws9HMAA3Jou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AAf1ggAH90YAB/h8AAf44AAH+24AB/zEAAf93wAIAfkACALcAAgHrgAIDcgACA/XAAgQpwAIEcIACBLjAAgUTwAIFQEACBW5AAgWewAIFwIACBeVAAgYaQAIH/AACCGuAAgiSwAII7sACCRBAAglagAIJiQACChgAAgosgAIKdoACCsJAAgwUgAIM34ACDcfAAg5HgAIPCYACDyzAAg9ggAIPnEACD9gAAhAEAAIQMAACEOgAAhEdAAIRtoACElCAAhKKgAISzMACEv6AAhM4gAITakACE6PAAhPNQAIT/wACFEEAAhR6QAIUtAACFO/AAhUrAAIVaoACFYyAAhWtwAIV2gACFg7AAhZIwAIWccACFqOAAhbVQAIXD0ACF39AAhexAAIX6wACGAxAAhgmAAIYrUACGM6AAhjmQAIZCQACGSIAAhlDQAIZZIACGX0AAhmeQAIZx0ACGgJAAho+QAIagYACGqOAAhrEQAIa7UACGzHAAht5AAIbogACG8NAAhvkAAIcB8ACHCkAAhxlQAIcoYACHLoAAhzzQAIdMkACHWQAAh2TAAIdxEACHfWAAh5SwAIeucACHwsAAh90wAIfo8ACH91AAiAGQAIgKcACIIMAAiDZQAIhAkACITOAAiFSAAIh1QACIe7AAiIZAAIiSkACImNAAiJ8QAIilUACIq3AAiMFAAIjWMACJB+AAiRWQAIkkAACJMNAAiUJwAIlIMACJTfAAiVOwAIlZcACJXzAAiWTwAIlqsACJcHAAiXYwAIl78ACJgbAAiYdwAImNMACJkvAAiZiwAImecACJpDAAianwAImvsACJtXAAibswAInA8ACJxrAAicxwAInSMACJ1/AAid2wAInjcACJ6TAAie7wAIn0sACJ+nAAigAwAIoF8ACKC7AAihFwAIoXMACKHPAAiiKwAIoocACKLjAAijPwAIo5sACKP3AAikUwAIpK8ACKULAAilZwAIpcMACKYfAAAA5wKWDy7AARPQwAET1sABFggDmD0AAAFgAcAA/eQAAAMElhEuwAEUCMABFA0YJwBdA8AA/W0CYAOIfmADwAD8lwErBJYSLsABFBvAARQhGJg+AF0DwAD9OwFgA8AA/JcBKwSWEy7AARQpwAEUOBiYPwBgA8AA/JcBkwEFlhsAAAAABAAAAwAAAAAAAAAAAGADlg8BPwEJAQDA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SsABIZwBgcABIaPACLtVBpZNLsABIbLAASG/wAEh4QMASwAAAAEDwAEhwcABIeEAAAABAQHAASHJAAAAg/FgA8AA/n4AAGADwAD8lwFKwAEh1AEcwAEh2RbAASHULieWSksBAAGAwAEh2sAIvCUAwAD9gQAACLsTAAi7/wAIvGMAAAACApZQLsABIebAASHswAEjJAOYTgAAAWABwAD95AAAAQSWUi7AASJAwAEiWwknAF0DwAD9bQJgA8AA/v9gA8AA/JcBHsABIkzAAP10AAJgA8AA/v9gA8AA/JcAAAEFllYuwAEiYMABImDAASKAAAAAA8ABImrAASKAAAAAAAAAAGADllABPgE9HMABInMul4UBAAErAJZUAQkBwAEiYMAA/foAAAAAAQaWVC7AASKFwAEiicABIyIAAJeFAAAAAQPAASKMwAEjIgAAAAEBAcABIpEAAACArGADwAD+/wAAYAPAAPyXAT4DTsABIqDAASKnAACBdmADwAD8lwEcwAEirhbAASKpLieWUksBAAGAwAEir8AIvUEAwAD9gUnAASK5HMABIsSBwAEivcAIvVxIAQABKwDAAP27PgI9icABItXACL1cFsABIuQWwAEi3i4nllJhwAD9kT0cwAEi9xbAASLyLieWUoC/AgACgMABIvjACL1BgcABIv/ACL1cAMAA/YI/SsABIxEBgcABIxjACL1cAAAIvRoACL4GAAAAAQKWVy7AASNawAEjYMABLgUDmE8AAAFgAcAA/eQAAAkEllkuwAEjgsABI48GmFAAYAPAAPyXAWrAASOJYAPAAPyXwACb8ASWWi7AASOkwAEjuAaYUQBgA8AA/JcBasABI7VgA8AA/JfAAJv2BJZbLsABI83AASPaBphSAGADwAD8lwFqwAEj1WADwAD8l8AAm/wEll0uwAEj9MABI/kJl2iU/QBdA8AA/kwBXQPAAP07AWADwAD8lwAEll4uwAEkB8ABJCQYmFOU/QBgA8AA47oBHsABJBXAAOO+AQABasABJB9gA8AA/JfAAJvwAASWYS7AASQswAEkNhhhAGADwAD8lwGTBJZiLsABJD7AASRPGJhUAGADwAD8lwGTBJZfLsABJGDAASSCGJhVlP0AYAPAAOQMAR7AASR0wADkEAEAAZQABJZgLsABJJDAASSiGJhWlP0AYAPAAOO6ASsBBZZu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AKnawAldDoRYhsAAqezACV32glk9F8AAqgODwACp/sAJXQ6E2YfAAKoTwAleGIN/PRfAAKotg8AAqijACV0OhIMUwACqNcAJXjoIAIPxPRfAAKpHg8AAqkLACV0OgL0UwACqTsAJXlwJAIOBPRfAAKpfg8AAqlrACV0OhGaFwACqacAJXdSDgj0XwACqfYPAAKp4wAldDoRoFMAAqovACV58CgCDgD0XwACqo4PAAKqewAldDoUtFMAAqrXACV9+CwCD8z0cwACq3xbAAKrRg8AAqszACV0OhSyD8oClAQABFMAAqubACV+eDAAAwAD9TT0XwACrAYPAAKr8wAldDoTFFMAAqxLACV/tDgCD9D0XwACrLYPAAKsowAldDoUuFMAAq0bACWAjDwCD9j0XwACraYPAAKtkwAldDoTHFMAAq4DACWBtEQCD9T0XwACrl4PAAKuSwAldDoTIFMAAq6nACWCUEgCD9z9KwACrugGDwACrwcAJXQ4GlwMvwACrzsAAq9rAALB9AACZCgAAAAEDwACr6cAAsH0AAAAAAAAAYAOEYQE+A07AAKv2wACr+gAAg+xgA8AA/JcBHMAAq/wuhxEAAAAAlsVOwACsEcAArB0AAISTYAPAAPrRARzAAKwqHMAArB8uhxEAAAAAlsVIAQABlADAAP27R8AArDSAwACsPMAJYtUHAcAArFJqwACsUmADwAD8l4UHAD4BSsAArG4BH8AArHmEbgAAAAABwACsnmrAAKyeYAPAAPyXg10APgNOwACsvMAArMYAAIRjYAOCewEcwACsyC6Y5wAAAACW8k7AAKzrwACs8QAAgJZgA4TZARzAAKzzLpiZAAAAAJcMSsAArQ0BNcAArRgAAAEAYAOEbwEfwACtGIR9AgACgsAArTXACWNyg8AArUDACWOSADUAAAABAFsBF8AArVOEwACtUcAJY7iEk4HAAK1hwAli94RjhADACWO4AcAArX1qwACtfWADwAD8l4QRAD4ETsAArZvAAK2iAACDYmADwAD8lwEcwACtpC6Y9gAAAACXKU7AAK2+wACtyAAAhGNgA4J7ARzAAK3KLpjnAAAAAJbyTsAAre3AAK33AABbYAOFowEcwACt+S6ZEwAAAACXIkrAAK4SATXAAK4dAAABAGADhH4BH8AArh2EjAIAAoPAAK46wAlkQ4TAAK5FwAlk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AAAAlyIBhCIpNQAAAAEAWwEXwADTMIPAANMuwAmAooRYgsAA0z3ACYB6glmDAMAJgKIBwADTVGrAANNUYAPAAPyXwABnhwA+Ak7AANN3wADTfgAAg2JgA8AA/JcBHMAA04AumPYAAAAAlylKwADTlgE1wADToQAAAQBgA4X7AR/AANOhhg4DAAIcwADT0C6Y5wAAAACW8hzAANPnLpkTAAAAAJciAYQiKjUAAAABAFsBF8AA1CCDwADUHsAJgUKEWILAANQtwAmBGoJZgwDACYFCAcAA1ERqwADURGADwAD8l4NKAD4CTsAA1GzAANRzAACDYmADwAD8lwEcwADUdS6Y9gAAAACXKUrAANSLATXAANSWAAABAGADhfsBH8AA1JaGDgMAAhzAANTFLpjnAAAAAJbyHMAA1NwumRMAAAAAlyIBhCIpNQAAAAEAWwEXwADVFIPAANUSwAmB4IRYgsAA1SHACYG4glmDAMAJgeABwADVOGrAANU4YAPAAPyXwABlOwA+AUrAANVFAR/AANVQhiUBAAEcwADVVC6YmQAAAACXDAABwADVdmrAANV2YAPAAPyXhA4APgFKwADVkQEfwADVnIYyAwADHMAA1a4umJkAAAAAlwwcwADVzC6ZIQEAARzAANXkLocRAAAAAJbFAJcJHMAA1fEumJkAAAAAlwwAAcAA1hNqwADWE2ADwAD8l8AAZN0APgFKwADWMgEfwADWPYZABAAEHMAA1lMumJkAAAAAlwwcwADWZS6YmQAAAACXDBzAANaDLpiZAAAAAJcMHMAA1pUumSQAAAAAlx4AAcAA1rtqwADWu2ADwAD8l7DwAD4CTsAA1tzAANbjAACDYmADwAD8lwEcwADW5S6Y9gAAAACXKUrAANb7ATXAANcGAAABAGADhkEBH8AA1waGSwEAARzAANcaLpj3AAAAAJcKADUAAAABAFsBF8AA1zyDwADXOsAJg3KEWILAANdJwAmDSoJZgwDACYNyAcAA12BqwADXYGADwAD8l8AAmywAPgNOwADXf8AA14YAAINiYAPAAPyXARzAANeILpj2AAAAAJcpTsAA16LAANevAACF02ADiOkBHMAA17EuhxkAAAAAlx9KwADXyQE1wADX1AAAAQBgA4ZMAR/AANfUhlcCAAEcwADX5i6Y9wAAAACXCgGF04PAANgWwAmD+zUAAAABAFsBF8AA2DCEwADYLsAJhCGEWILAANg9wAmD2YJZhADACYQhAcAA2FRqwADYVGADwAD8l8AAmy8APgNOwADYcsAA2HkAAINiYAPAAPyXARzAANh7Lpj2AAAAAJcpTsAA2JXAANiiAACF02ADiOkBHMAA2KQuhxkAAAAAlx9KwADYvAE1wADYxwAAAQBgA4ZYAR/AANjHhmMCAAEcwADY2C6Y9wAAAACXCgGF04PAANkIwAmEtTUAAAABAFsBF8AA2SKEwADZIMAJhNuEWILAANkvwAmEk4JZhADACYTbAcAA2UZqwADZRmADwAD8l8AAmzIAPgROwADZZMAA2WsAAINiYAPAAPyXARzAANltLpj2AAAAAJcpTsAA2YfAANmPAACF3GADiOkBHMAA2ZEuhxkAAAAAlx9OwADZrcAA2bcAAIXdYAOI6QEcwADZuS6HGQAAAACXH0rAANnRATXAANncAAABAGADhmQBH8AA2dyGcAMAARzAANntLpj3AAAAAJcKAoXcg8AA2hjACYVvhd2EwADaLMAJhY81AAAAAQBbARfAANpDhcAA2kHACYW1hFiCwADaUMAJhU2CWYUAwAmFtQHAANpnasAA2mdgA8AA/JfAAJs1AD4LTsAA2oXAANqMAACDYmADwAD8lwEcwADaji6Y9gAAAACXKU7AANquwADavQAAheJgA4J7ARzAANq/LpicAAAAAJbxTsAA2uzAANr6AACFLF0DwAD9OwFgA4jpARzAANr8LpkQAAAAAJcbTsAA2xzAANssAACYnWADwAD8lwEcwADbLi6HEwAAAACWxk7AANtdwADbaQAAheNdA8AA/W0CYAOCe2ADhNkBMsAA24JgA4J7YAOE2QBFwADbjgHAANuXwADbmQAAYmADwAD8lwGTARzAANugh8AA257ACYbtYwEAAYXAANuiwAmGmwDAAP3FAY/AANuzwAmG7RzAANu0h8AA27PACYbtZAEAAZQAwAD9vT4DTsAA29TAANvdAAGF52ADgnsBHMAA3AocwADb7S6HFgAAAACW7ZieAAAAAJrqTsAA3DXAANw7AAGAlmADhNkBHMAA3D0umJkAAAAAlww9HMAA3GSGwADcWcAJhr2AvwIAAhTAANxlwAmHRggAFMAA3HHACYdzCQAAwAD9gk7AANyOwADcmgAAmSVgA8AA/JcBHMAA3JwuhxMAAAAAlsZOwADcxsAA3M4AAIXkXQPAAP07AWADh70BHsAA3NTAAPaSAQFgA4e9AYfAANzqwAmHwgBFwADdAAHAAN0JwADdCwAAYmADwAD8lwGTARzAAN0SFMAA3RDACYgcCQBjAQABh8AA3RTACYfCAMAA/cUBFcAA3SHACYgcCRzAAN0iFMAA3SHACYgcCQBkAQABlADAAP29PgE9HMAA3TkUwADdMsAJh+QIAIC/AgACFMAA3TrACYgcCQAmwADdOQEcwADdPy6ZFQAAAACXEmADh70AwAD9S07AAN1zwADdgwAAheVdA8AA/TsBYAOE2QEcwADdhS6Y9wAAAACXCkrAAN2jATXAAN2uAAABAGADhnEBH8AA3a6GgQUABYPAAN2/wAmGVITAAN3PwAmGdIbAAN3ewAmGvRTAAN33wAmH5AgAFMAA3gDACYi4CQAANQAAAAEAWwEXwADeHRTAAN4bwAmI5QoAhFiCwADeKsAJhjKCWRQAwAmI5QoAAcAA3kFqwADeQWADwAD8l8AAYfYAPgJOwADeW8AA3mIAAINiYAPAAPyXARzAAN5kLpj2AAAAAJcpSsAA3noBNcAA3oUAAAEAYAOGggEfwADehYaNAgACHMAA3pIumJkAAAAAlwwcwADepC6HGQAAAACXHwA1AAAAAQBbARfAAN7Ag8AA3r7ACYmbhFiCwADezcAJiXOCWYMAwAmJmwHAAN7kasAA3uRgA8AA/JfAAF/pAD4DTsAA3v7AAN8FAACDYmADwAD8lwEcwADfBy6Y9gAAAACXKU7AAN8hwADfJwAAhINgA8AA/JcBHMAA3ykuhxEAAAAAlsVKwADfPQE1wADfSAAAAQBgA4aOAR/AAN9Ihp8CAAIcwADfVS6YmQAAAACXDBzAAN9nLocZAAAAAJcfADUAAAABAFsBF8AA34OEwADfgcAJilqEWILAAN+QwAmKEIJZNQAAAAEAWwEXwADfo4TAAN+hwAmKWoSDg8AA36vACYoyhpCEAMAJiloBwADfwWrAAN/BYAPAAPyXwABevgA+AUrAAN/YAR/AAN/jhrABAAEcwADf8S6HFwAAAACW4QABwADgGGrAAOAYYAPAAPyXwACb7AA+Ak7AAOA7wADgRwAAl/lgA8AA/JcBHMAA4FGAwADgScAJc1WDfAEAAWrAAOBXYAPAAPyXhQcAwAD8r0rAAOB3AR/AAOCChrkBAAEcwADgmYLAAOCNwAmLKIGNAQABasAA4J9gA8AA/JdTAMAA/b4AAcAA4MpqwADgymADwAD8l6GCAD4BSsAA4OYBH8AA4PGGuQEAARzAAOD8LocTAAAAAJbGAAHAAOEYasAA4RhgA8AA/JfAAGmpAD4BSsAA4TQBH8AA4T+GuQEAARzAAOFKHMAA4UsuhxMAAAAAlsaBxgAAAADAAPy6AAHAAOFnasAA4WdgA8AA/JfAAI48AD4BSsAA4X4BH8AA4YmGuQEAAR7AAOGYwAD8xgEAARzAAOGeLocXAAAAAJbhAAABwADhxmrAAOHGYAPAAPyXwABeAQA+AUrAAOHdAR/AAOHohsIBAAEcwADh9i6YiwAAAACWyAABwADiFGrAAOIUYAPAAPyXtD0APgFKwADiKQEfwADiNIbLAQABKQABwADiVmrAAOJWYAPAAPyXwABGzQA+AUrAAOJsAR/AAOJ3hssBAAEqAAHAAOKaasAA4ppgA8AA/JfAAEaaAD4BSsAA4q8BH8AA4rqG1AAAAAABwADi2GrAAOLYYAPAAPyXwABGZwA+AUrAAOLvAR/AAOL6ht8BAAEcwADjCC6HFwAAAACW4QABwADjL2rAAOMvYAPAAPyXwABDzQA+AUrAAONEAR/AAONPhuoBAAEcwADjWy6HGQAAAACXHwABwADje2rAAON7YAPAAPyXstsAPgFKwADjkwEfwADjnobzAAAAAAHAAOO/asAA479gA8AA/JfAAF9PAD4CTsAA49TAAOPbAACDYmADwAD8lwEcwADj3S6Y9gAAAACXKUrAAOPzATXAAOP+AAABAGADhvQBH8AA4/6G/AAAAAA1AAAAAQBbARfAAOQJg8AA5AfACY3RhFiCwADkFsAJjamCWYMAwAmN0QHAAOQtasAA5C1gA8AA/Je2SgA+Ak7AAORAwADkRwAAg2JgA8AA/JcBHMAA5EkumPYAAAAAlylKwADkXwE1wADkagAAAQBgA4b9AR/AAORqhwcBAAEcwADkcC6YmQAAAACXDAA1AAAAAQBbARfAAOSDg8AA5IHACY5QhFiCwADkkMAJjiiCWYMAwAmOUAHAAOSnasAA5KdgA8AA/Je5BwA+A07AAOTAwADkxwAAg2JgA8AA/JcBHMAA5MkumPYAAAAAlylOwADk48AA5PAAAIXTYAOI6QEcwADk8i6HGQAAAACXH0rAAOUKATXAAOUVAAABAGADhwgBH8AA5RWHFAMAARzAAOUhLpj3AAAAAJcKAoXTg8AA5VHACY7XhCIqNQAAAAEAWwEXwADle4TAAOV5wAmO/YRYgsAA5YjACY61glmEAMAJjv0BwADln2rAAOWfYAPAAPyXltMAPgNOwADlvcAA5cQAAINiYAPAAPyXARzAAOXGLpj2AAAAAJcpTsAA5eDAAOXtAACF02ADiOkBHMAA5e8uhxkAAAAAlx9KwADmBwE1wADmEgAAAQBgA4cIAR/AAOYShxQDAAEcwADmHi6Y9wAAAACXCgKF04PAAOZOwAmPkoQiKTUAAAABAFsBF8AA5neEwADmdcAJj7iEWILAAOaEwAmPcIJZhADACY+4AcAA5ptqwADmm2ADwAD8l8AAmyYAPgNOwADms8AA5roAAINiYAPAAPyXARzAAOa8Lpj2AAAAAJcpTsAA5tbAAObjAACF02ADiOkBHMAA5uUuhxkAAAAAlx9KwADm/QE1wADnCAAAAQBgA4cVAR/AAOcIhyEDAAEcwADnEy6Y9wAAAACXCgKF04PAAOdDwAmQT4QiKjUAAAABAFsBF8AA522EwADna8AJkHWEWILAAOd6wAmQLYJZhADACZB1AcAA55FqwADnkWADwAD8l8AAmykAPgNOwADnrsAA57UAAINiYAPAAPyXARzAAOe3Lpj2AAAAAJcpTsAA59HAAOfeAACF02ADiOkBHMAA5+AuhxkAAAAAlx9KwADn+AE1wADoAwAAAQBgA4cVAR/AAOgDhyEDAAEcwADoDi6Y9wAAAACXCgKF04PAAOg+wAmRDIQiKTUAAAABAFsBF8AA6GeEwADoZcAJkTKEWILAAOh0wAmQ6oJZhADACZEyAcAA6ItqwADoi2ADwAD8l7jfAD4ETsAA6KPAAOiqAACDYmADwAD8lwEcwADorC6Y9gAAAACXKU7AAOjGwADozgAAhdxgA4jpARzAAOjQLocZAAAAAJcfTsAA6OzAAOj2AACF3WADiOkBHMAA6PguhxkAAAAAlx9KwADpEAE1wADpGwAAAQBgA4ciAR/AAOkbhy8EAAEcwADpJi6ZJgAAAACXDQOF3IPAAOlPwAmRx4XdhMAA6WPACZHnhCIqNQAAAAEAWwEXwADpioXAAOmIwAmSDYRYgsAA6ZfACZGlglmFAMAJkg0BwADprmrAAOmuYAPAAPyXlEQAPgROwADpy8AA6dIAAINiYAPAAPyXARzAAOnULpj2AAAAAJcpTsAA6e7AAOn2AACF3GADiOkBHMAA6fguhxkAAAAAlx9OwADqFMAA6h4AAIXdYAOI6QEcwADqIC6HGQAAAACXH0rAAOo4ATXAAOpDAAABAGADhyIBH8AA6kOHLwQAARzAAOpOLpkmAAAAAJcNA4Xcg8AA6nfACZKthd2EwADqi8AJks2EIik1AAAAAQBbARfAAOqxhcAA6q/ACZLzhFiCwADqvsAJkouCWYUAwAmS8wHAAOrVasAA6tVgA8AA/JeJeAA+AUrAAOruAR/AAOr5h0QBAAEcwADrCS6YmQAAAACXDAABwADrK2rAAOsrYAPAAPyXjjIAPgJOwADrS8AA61IAAINiYAPAAPyXARzAAOtULpj2AAAAAJcpSsAA62oBNcAA63UAAAEAYAOHSgEfwADrdYdUAQABHMAA64guhxoAAAAAlwUANQAAAAEAWwEXwADrnYPAAOubwAmTzYRYgsAA66rACZOlglmDAMAJk80BwADrwWrAAOvBYAPAAPyXk14APgZOwADr0sAA69sAAIJwYAOIfgEcwADr3S6ZJwAAAACXKE7AAOwEwADsEAAAmD9gA8AA/JcBFsAA7CAWwADsEi6YeZatYcAA/Ws9HMAA7DAumR4BAAGCwADsSMAJlDIAlwZOwADsX8AA7GQAAIJtYAOE2QEcwADsZi6YmQAAAACXDD0XwADsjhbAAOyALph5lq1hg8AA7JfACZRSwAD9aUrAAOysAR/AAOy3h2wCAAKCwADsu8AJlDKEwADsxcAJlJIAAcAA7NtqwADs22ADwAD8l8AAT/MAPgVOwADs+MAA7QQAAJg/YAPAAPyXARbAAO0UFsAA7QYumHmWrWHAAP1rTsAA7SjAAO0zAACGJV0DwAD9OwFgA4ePARzAAO01LpkoAAAAAJcPTsAA7VbAAO1cAACAlmADhNkBHMAA7V4umJkAAAAAlww9F8AA7YYWwADteC6YeZatYYLAAO2PwAmVCsAA/WlKwADtpAEfwADtr4d4AgACH8AA7cOHqQEAAYPAAO3JwAmVMgCEwADt1sAJlVkAAcAA7e1qwADt7WADwAD8l5OJAD4DTsAA7gjAAO4TAACCb2ADhNkBHMAA7hUumJkAAAAAlwxOwADuM8AA7kEAAIUsXQPAAP07AWADiOkBHMAA7kMumRAAAAAAlxtKwADuXwEfwADuaoYaAgACgsAA7njACZXag8AA7oTACZX6AAHAAO6jasAA7qNgA8AA/JfAAJsdAD4ETsAA7sPAAO7KAACDYmADwAD8lwEcwADuzC6Y9gAAAACXKU7AAO7rwADu8AAAgpRgA4jpARzAAO7yLocZAAAAAJcfTsAA7xPAAO8cAACGFWADiaYBHMAA7x4umJsAAAAAlt9KwADvPwE1wADvSgAAAQBgA4dVAR/AAO9Kh2ACAAKEwADvXcAJlp2DwADvZ8AJln0ANQAAAAEAWwEXwADvboXAAO9swAmWw4RYgsAA73vACZZbglmFAMAJlsMAAT4BPTDAAO+aHMAA76AugcQBAAEkwADvxgInmSmBwADvwsAJc3cAlsQGlw0vwADv1sAA7+XAAPDYAACZJgAAAAEDwADv9cAA8NgAAAAAAAAAXQPAAP07AWADhzABPgROwADwAsAA8AkAAGFgA8AA/JcBHMAA8AsuhxMAAAAAlsZOwADwKsAA8DEAAIF2XQPAAP07AWADhzABHsAA8D/AAP1AAwFgA4cwAoDAAPBVwAmXdysBhW4pRcAA8HgBwADwgcAA8IMAAGJgA8AA/JcBkwEcwADwioLAAPCIwAmX1GMBAAGAwADwjMAJl3cAwAD9xQGKwADwlsAJl9QcwADwlILAAPCWwAmX1GQBAAGUAMAA/b0+AT0cwADwp4HAAPChwAmXmIC/AgACgsAA8KjACZfUHMAA8K0umSoAAAAAlw4AwAD9S0rAAPDHAYHAAPDOwAmXmAaXDi/AAPDdwADw5sAA8TYAAJkqAAAAAQPAAPDywADxNgAAAAAAAABgA4cwAT4BSsAA8PsBH8AA8QaHOQIAAhzAAPEPLpiZAAAAAJcMHMAA8SEumJkAAAAAlwwABpcPL8AA8TvAAPFLwADyQgAAmSgAAAABA8AA8VzAAPJCAAAAAAAAAF0DwAD9OwFgA4ePAT4ETsAA8WnAAPFwAABhYAPAAPyXARzAAPFyLocTAAAAAJbGTsAA8ZLAAPGZAACBdl0DwAD9OwFgA4ePAR7AAPGnwAD9QAMBYAOHjwKAwADxvsAJmP4rAYVuKUXAAPHhAcAA8erAAPHsAABiYAPAAPyXAZMBHMAA8fOCwADx8cAJmVtjAQABgMAA8fXACZj+AMAA/cUBisAA8f/ACZlbHMAA8f2CwADx/8AJmVtkAQABlADAAP29PgE9HMAA8hCBwADyCsAJmR+AvwIAAoLAAPIRwAmZWxzAAPIWLpkVAAAAAJcSAMAA/UtKwADyMQGBwADyOMAJmR8GlxAvwADyR8AA8lHAAPLtAACZKwAAAAEDwADya8AA8u0AAAAAAAAAYAOHjwE+Ak7AAPJ4wADyfQAAg/NgA4ePARzAAPJ/LpkVAAAAAJcSScAA8pQlwADynYDAAPKYwAmaImADh7U+AUrAAPK4ASs+AUrAAPLYAYDAAPLfwAmaIgaXES/AAPLywADy/MAA81MAAJkaAAAAAQPAAPMPwADzUwAAAAAAAABgA4ePAT4BSsAA8xgBIxzAAPMfLpijAAAAAJbkHMAA8zkumRUAAAAAlxIrAWADh48GlxIvwADzWMAA82LAAQW6AACZFQAAAAEDwADzb8ABBboAAAAAAAAAYAOHjwE+Ak7AAPN8wADzgAAAg+xgA8AA/JcBHMAA84IuhxEAAAAAlsVHwADzkoDAAPOawAma+hUBwADzsGrAAPOwYAPAAPyXwACWBgA+AUrAAPPNAR/AAPPYh54BAAEcwADz7C6YmQAAAACXDAABwAD0DmrAAPQOYAPAAPyXn6IAPgFKwAD0HQEcwAD0JC6ZLAAAAACXFgHAAPRAasAA9EBgA8AA/Je+ZQA+AUrAAPRVARzAAPRcLpktAAAAAJcXAcAA9H5qwAD0fmADwAD8l6CWAD4BSsAA9JYBH8AA9KGHvAAAAAABwAD0wmrAAPTCYAPAAPyXhIwAPgFKwAD02wEfwAD05ofJBAABHMAA9PYumJkAAAAAlwwDhi4cwAD1Ki6Y9gAAAACXKYYvHMAA9VgumPYAAAAAlykiHMAA9XsumQcAAAAAlwsBwAD1o2rAAPWjYAPAAPyXwABfvAA+BU7AAPXBwAD1xwAAmS5gA4fKAR/AAPXNh9MBAAErAD0cwAD1+BbAAPXtLph6lq5WAQABgcAA9fzACZxTAMAA/Uw9F8AA9hKBwAD2DMAJnFOCbTXAAPYZAAABAGADh48BHMAA9hkumRUAAAAAlxI1AAAAAQBbARfAAPYqgsAA9ijACZykhFeBwAD2M8AJnFOCWIIAwAmcpIfMPRzAAPZNFsAA9kIumHqWroYmAAAAAMAA/VpKwAD2YwGBwAD2asAJnFMBwAD2gGrAAPaAYAPAAPyXo7YAPgNOwAD2nMAA9qMAAINiYAPAAPyXARzAAPalLpj2AAAAAJcpTsAA9r/AAPbFAAAnYAPAAPyXARzAAPbHLocTAAAAAJbGSsAA9tsBNcAA9uYAAAEAYAOH1AEfwAD25ofdAQABHMAA9v8WwAD29S6YepauSwEAARzAAPcPFsAA9wAumHuWr2QBAAGCwAD3EcAJnUsAwAD9vQDAAP1KADUAAAABAFsBF8AA9yWDwAD3I8AJnXKEWIHAAPcywAmdKYJZgwDACZ1yAcAA90lqwAD3SWADwAD8l6PhAD4CTsAA92XAAPdsAACDYmADwAD8lwEcwAD3bi6Y9gAAAACXKUrAAPeEATXAAPePAAABAGADh94BH8AA94+H6AIAAhzAAPeeLpiZAAAAAJcMHMAA97AumRUAAAAAlxIANQAAAAEAWwEXwAD3zYLAAPfLwAmeKoRYgcAA99rACZ4CglmCAMAJnioBwAD38WrAAPfxYAPAAPyXpjMAPgJOwAD4CsAA+BEAAINiYAPAAPyXARzAAPgTLpj2AAAAAJcpSsAA+CkBNcAA+DQAAAEAYAOH6QEfwAD4NIfzAgACHMAA+EAumRUAAAAAlxIcwAD4US6YmQAAAACXDAA1AAAAAQBbARfAAPhvgsAA+G3ACZ7FhFiBwAD4fMAJnp2CWYIAwAmexQHAAPiTasAA+JNgA8AA/JeoLwA+CE7AAPitwAD4wQAAmRJgA8AA/JcBFsAA+NEWwAD4wy6YeZatYcAA/WtOwAD45cAA+OwAAINiYAPAAPyXARzAAPjuLpj2AAAAAJcpTsAA+QjAAPkSAACGOl0DwAD9OwFgA4h+ARzAAPkULpj/AAAAAJclTsAA+UbAAPlQAACFymADhNkBHMAA+VIumQcAAAAAlwtOwAD5dsAA+X4AAIY7XQPAAP07AWADhNkBHMAA+YAumPcAAAAAlwpOwAD5osAA+acAAIJtYAOHjwEcwAD5qS6ZFQAAAACXEj0XwAD50BbAAPnCLph5lq1hgcAA+dnACZ84wAD9aUrAAPn2ATXAAPoBAAABAGADh/QBH8AA+gGIAAQABIPAAPoOwAmfgoTAAPoZwAmfqYXAAPokwAmfyYbAAPotwAmf8AA1AAAAAQBbARfAAPo/h8AA+j3ACaA0hFiCwAD6TMAJn2CCWYcAwAmgNALAAPpjasAA+mNgA8AA/JetRcAA+oJqwAD6gmADwAD8l746AD4JTsAA+qTAAPqsAACGP2ADwAD60QEcwAD6soDAAPquwAma+kgBAAFqwAD6uWADwAD8l746AMAA/btOwAD62sAA+u4AAJkSYAPAAPyXARbAAPr+FsAA+vAumHmWrWHAAP1rTsAA+xLAAPsZAACDYmADwAD8lwEcwAD7Gy6Y9gAAAACXKU7AAPs1wAD7QAAAhj5gA8AA/JcBHMAA+0IumPYAAAAAlylOwAD7XMAA+2UAAIJwYAOIfgEcwAD7Zy6ZFAAAAACXJ07AAPuVwAD7ngAAg9FgA4TZARzAAPugLpiZAAAAAJcMTsAA+77AAPvDAACCbWADh48BHMAA+8UumRUAAAAAlxI9F8AA++wWwAD73i6YeZatYYLAAPv1wAmg+MAA/WlKwAD8EgE1wAD8HQAAAQBgA4gBAR/AAPwdiA4EAAOFwAD8LMAJoWSGwAD8NsAJoYSHwAD8QMAJoaQBhj+BwAD8T8AJoMA1AAAAAQBbARfAAPxkFMAA/GLACaHoCACEWIPAAPxxwAmhIIJZNQAAAAEAWwEXwAD8hBTAAPyCwAmh6AgAhj6EwAD8kcAJoUKIAxQAwAmh6AgAAcAA/KxqwAD8rGADwAD8l6haAD4JTsAA/MnAAPzQAACDYmADwAD8lwEcwAD80i6Y9gAAAACXKU7AAPzswAD89wAAgm9gA4TZARzAAPz5LpiZAAAAAJcMTsAA/RfAAP0dAACA7mADwAD8lwEcwAD9Hy6HEwAAAACWxk7AAP1EwAD9SgAAhkJdA8AA/TsBYAOIGgEewAD9XMAA/UADAWADiBoCg8AA/XTACaLQKwGFbilFwAD9mgHAAP2jwAD9pQAAYmADwAD8lwGTARzAAP2shcAA/arACaMuYwEAAYPAAP2uwAmi0ADAAP3FAY3AAP23wAmjLhzAAP21hcAA/bfACaMuZAEAAZQAwAD9vT4BPRzAAP3LhMAA/cbACaLygL8CAAKFwAD9zMAJoy4fwAD91YgnAAAAAADAAP1LPRzAAP4LFsAA/fsumHyWsIClAQABhMAA/hLACaLyAMAA/U1FwAD+IgHAAP4rwAD+LQAAYmADwAD8lwGTARzAAP40hcAA/jLACaPcYwEAARbAAP48hMAA/jbACaLyYcAA/WsAwAD9xQGNwAD+RsAJo9wcwAD+RIXAAP5GwAmj3GQBAAGUAMAA/b0+AT0cwAD+VS6ZLwEAARzAAP5thMAA/mjACaLySwEAAYXAAP5uwAmj3ADAAP1KAJcTPTUAAAABAF0DwAD9OwFgA4gaARbAAP6FLph8lrAXwAD+lYXAAP6VwAmkb2EcwAD+nBbAAP6VhcAA/pXACaRvYcAA/WuBjQEAAYPAAP6fwAmi0ADAAP2+wAD9aUrAAP6uATXAAP65AAABAGADiA8BH8AA/rmIGQIAAoLAAP7JwAmisITAAP7VwAmi8gA1AAAAAQBbARfAAP7dhcAA/tvACaTPhFiBwAD+6sAJoo6CWYUAwAmkzwHAAP8BasAA/wFgA8AA/JeopgA+A07AAP8mwAD/LQAAg2JgA8AA/JcBHMAA/y8umPYAAAAAlylOwAD/ScAA/08AACdgA8AA/JcBHMAA/1EuhxMAAAAAlsZKwAD/ZQE1wAD/cAAAAQBgA4goAR/AAP9wiDEBAAEcwAD/lxbAAP+ILph8lrBLAQABgsAA/5jACaVaAMAA/UoANQAAAAEAWwEXwAD/rIPAAP+qwAmlgYRYgcAA/7nACaU4glmDAMAJpYEBwAD/0GrAAP/QYAPAAPyXqNcAPgJOwAD/6cAA//AAAINiYAPAAPyXARzAAP/yLpj2AAAAAJcpSsABAAgBNcABABMAAAEAYAOIMgEfwAEAE4g9AwADHMABACwumJkAAAAAlwwcwAEAPi6ZFQAAAACXEhzAAQBPLpkrAAAAAJcQADUAAAABAFsBF8ABAHmCwAEAd8AJpiGEWIHAAQCGwAml+YJZggDACaYhAcABAJ1qwAEAnWADwAD8l7AWAD4CTsABALrAAQDBAACDYmADwAD8lwEcwAEAwy6Y9gAAAACXKUrAAQDZATXAAQDkAAABAGADiD4BH8ABAOSIRwEAARzAAQD0LpkHAAAAAJcLADUAAAABAFsBF8ABAQ2CwAEBC8AJpsqEWIHAAQEawAmmooJZggDACabKAcABATFqwAEBMWADwAD8l7Z7AD4DTsABAU3AAQFSAACCbWADh48BHMABAVQumRUAAAAAlxJOwAEBccABAXcAAISDYAPAAPyXARzAAQF5LocRAAAAAJbFSsABAY0BH8ABAZiIUwMAAoHAAQGhwAmnLxzAAQGnLpkwAAAAAJcUAYSTHMABAc8cwAEBy4LAAQHFwAmnT4N8AQABlQDAAPyvSAEAAZUAwAD9uwHAAQHlasABAeVgA8AA/Je5LgA+AUrAAQH5AR/AAQIEiGoCAAIcwAECDy6ZFQAAAACXEhzAAQIgLpkVAAAAAJcSAAHAAQJBasABAkFgA8AA/Je5eAA+A07AAQJdwAECZAAAg2JgA8AA/JcBHMABAmYumPYAAAAAlylOwAECgMABAoYAAISDYAPAAPyXARzAAQKILocRAAAAAJbFSsABApwBNcABAqcAAAEAYAOIawEfwAECp4h9AwABHMABArYumJkAAAAAlwwChlwhHMABAwYcwAEC54LAAQLhwAmoPIN8AQABasABAvhgA8AA/JcVAMAA/K9IAQABkwDAAP27hl0hHMABA0QcwAEDKILAAQMiwAmoPIN8AQABasABAzlgA8AA/JchAMAA/K9IAQABkwDAAP27NQAAAAEAWwEXwAEDVoPAAQNUwAmoZIRYgcABA2PACagaglmDAMAJqGQBwAEDemrAAQN6YAPAAPyXudkAPgNOwAEDm8ABA6QAAIJwYAOIfgEcwAEDpi6ZJwAAAACXKD0cwAED1xbAAQPJLph5lq1WAQABgcABA9vACak1AMAA/UxKwAEEGAGBwAEEH8AJqTUBwAEEOGrAAQQ4YAPAAPyXvg8APgVOwAEEWcABBGAAAINiYAPAAPyXARzAAQRiLpj2AAAAAJcpTsABBHzAAQSFAACCcGADiH4BHMABBIcumScAAAAAlyg9HMABBLgWwAEEqi6YeZatVgEAAYLAAQS8wAmpvQDAAP1MTsABBP3AAQUGAACCbmADhK4BHMABBQguhxoAAAAAlwVKwAEFJAE1wAEFLwAAAQBgA4ipAR/AAQUviLMCAAKCwAEFQ8AJqb2DwAEFTcAJqf8ANQAAAAEAWwEXwAEFWITAAQVWwAmqJYRYgcABBWXACambglmEAMAJqiUAAT4BPTDAAQWEHMABBYougcQBAAEkwAEFrwInmTGAwAEFq8AJmvoAlsQGlxMvwAEFv8ABBcTAAQdvAACZLwAAAAEDwAEF1sABB28AAAABAQHAAQXiAAAAmENgA4gaAABcAT4GTsABBfbAAQX9AABhYAPAAPyXARzAAQX/LocTAAAAAJbGPRfAAQYkFsABBhiAwAEGD8AJqsmFz4gcYYHAAQYtwAmq3cAA/Wk9F8ABBlQWwAEGQoDAAQY5wAmqyYZFiB1hgcABBl3ACardwAD9aUXAAQZpAcABBnLAAQZ0AABiYAPAAPyXAZMBHMABBnuCwAEGecAJq09jAQABgcABBn3ACardAMAA/cUBisABBofACatPHMABBoWCwAEGh8AJq09kAQABlADAAP29PgI9HMABBqwWwAEGm4DAAQaSwAmqyYZFiB2AvwIAAoLAAQatwAmrTxzAAQayLpj2AAAAAJcpAMAA/Us9HMABBtoWwAEGz4DAAQbGwAmqyYXPiByAvwIAAoLAAQbbwAmrTzXAAQbgAAABAGADhNkBHMABBuAumJkAAAAAlww1AAAAAQBbARfAAQbyg8ABBvDACawHhFeAwAEG+8AJqsmCWIMAwAmsBwDAAP1LPRfAAQcYgMABBw/ACarJhkYcwAEHLxzAAQckLocRAAAAAJbFSAEAAZQAwAD9u4gfPRfAAQdCgMABBznACarJgm01wAEHSQAAAQBgA4ePARzAAQdJLpkVAAAAAJcSNQAAAAEAWwEXwAEHWoLAAQdYwAmskoRXgMABB2PACarJgliCAMAJrJKIHgaXFC/AAQd0wAEHgMABCF8AAJkwAAAAAQPAAQeNwAEIXwAAAAAAAABdA8AA/TsBYAOIVAE+BE7AAQeawAEHoQAAYWADwAD8lwEcwAEHoy6HEwAAAACWxk7AAQe/wAEHxgAAgXZdA8AA/TsBYAOIVAEewAEHzMAA/UADAWADiFQCgMABB9/ACa0PKwGFbilFwAEIAgHAAQgLwAEIDQAAYmADwAD8lwGTARzAAQgUgsABCBLACa1sYwEAAYDAAQgWwAmtDwDAAP3FAYrAAQggwAmtbBzAAQgegsABCCDACa1sZAEAAZQAwAD9vT4BPRzAAQgxgcABCCvACa0wgL8CAAKCwAEIMsAJrWwcwAEINy6ZMgAAAACXFQDAAP1LSsABCE4BgcABCFXACa0wBpcVL8ABCGTAAQhqwAEKHwAAmTIAAAABA8ABCHPAAQofAAAAAAAAAGADiFQBPghOwAEIgMABCJQAAJkSYAPAAPyXARbAAQikFsABCJYumHmWrWHAAP1rTsABCLTAAQi7AACDYmADwAD8lwEcwAEIvS6Y9gAAAACXKU7AAQjTwAEI2QAAhlNgA4jpARzAAQjbLocZAAAAAJcfTsABCPPAAQj9AACB7WADiH4BHMABCP8umTMAAAAAlyZOwAEJL8ABCToAAIZUYAOIfgEcwAEJPC6ZMwAAAACXJk7AAQlswAEJcQAAgm1gA4ePARzAAQlzLpkVAAAAAJcSPRfAAQmWFsABCYgumHmWrWGAwAEJn8AJrjPAAP1pSsABCbgBNcABCcMAAAEAYAOIVAEfwAEJw4hfBAACg8ABCcnACa6dhcABCdTACa7dAoZTgsABCeHACa59hlSEwAEJ9MAJrr01AAAAAQBbARfAAQoIhsABCgbACa8hhFiBwAEKFcAJrluCWYYAwAmvIQaXFi/AAQokwAEKKsABCs4AAJksAAAAAQPAAQozwAEKzgAAAAAAAABgA4efAT4ETsABCkDAAQpMAACYP2ADwAD8lwEWwAEKXBbAAQpOLph5lq1hwAD9a07AAQpswAEKcQAAgm1dA8AA/TsBYAOHjwEcwAEKcy6ZKAAAAACXDz0XwAEKmhbAAQqMLph5lq1hgMABCqPACa+6wAD9aUrAAQq0AR/AAQq/h6kBAAGBwAEKxcAJr+IABpcXL8ABCtPAAQrfwAELjwAAmS0AAAABA8ABCu7AAQuPAAAAAAAAAGADh6oBPgROwAEK+8ABCwcAAJg/YAPAAPyXARbAAQsXFsABCwkumHmWrWHAAP1rTsABCyfAAQssAACCbV0DwAD9OwFgA4ePARzAAQsuLpkoAAAAAJcPPRfAAQtVFsABC0cumHmWrWGAwAELXsAJsHDAAP1pSsABC28BH8ABC3qHtAEAAYHAAQuGwAmwmAAGlxgvwAELlMABC57AAQwlAACZAgAAAAEDwAELq8ABDCUAAAAAAAAAYAOJlwE+Ak7AAQvCwAELxwAAgpRgA4kkASbAAQvCARzAAQvJLocZAAAAAJcfYAOJJErAAQvdAR/AAQvoiaUCAAIWwAEMA4DAAQv+wAmxJoaKiSYWwAEME4DAAQwOwAmxJoUsiSgABpcZL8ABDCrAAQw0wAEMiwAAmQEAAAABA8ABDEfAAQyLAAAAAAAAAGADiZcBPgFKwAEMUAEjHMABDFcumKMAAAAAluQcwAEMcS6ZAgAAAACXGCsBYAOJlwaXGi/AAQyQwAEMoMABDZcAAJk0AAAAAQPAAQyxwAENlwAAAAAAAABdA8AA/TsBYAOJlwE+BE7AAQy+wAEMxQAAYWADwAD8lwEcwAEMxy6HEwAAAACWxk7AAQznwAEM7gAAgXZdA8AA/TsBYAOJlwEewAEM/MAA/UADAWADiZcCgMABDRPACbITKwGFbilFwAENNgHAAQ0/wAENQQAAYmADwAD8lwGTARzAAQ1IgsABDUbACbJwYwEAAYDAAQ1KwAmyEwDAAP3FAYrAAQ1UwAmycBzAAQ1SgsABDVTACbJwZAEAAZQAwAD9vT4BPRzAAQ1lgcABDV/ACbI0gL8CAAKCwAENZsAJsnAcwAENay6ZAgAAAACXGADAAP1LSsABDYYBgcABDY3ACbI0BpcbL8ABDZzAAQ2rwAEOngAAmRAAAAABA8ABDbvAAQ6eAAAAAAAAAF0DwAD9OwFgA4jpAT4ETsABDcjAAQ3PAABhYAPAAPyXARzAAQ3RLocTAAAAAJbGTsABDfDAAQ33AACBdl0DwAD9OwFgA4jpAR7AAQ4FwAD9QAMBYAOI6QKAwAEOG8AJsz4rAYVuKUXAAQ4+AcABDkfAAQ5JAABiYAPAAPyXAZMBHMABDlCCwAEOTsAJs5tjAQABgMABDlLACbM+AMAA/cUBisABDlzACbObHMABDlqCwAEOXMAJs5tkAQABlADAAP29PgE9HMABDm2BwAEOZ8AJs1+AvwIAAoLAAQ5uwAmzmxzAAQ5zLocZAAAAAJcfAMAA/UtKwAEOjQGBwAEOlMAJs18GlxwvwAEOo8ABDrPAAQ+qAACZNQAAAAEDwAEOxMABD6oAAAAAAAAAXQPAAP07AWADiWIBPgROwAEO0cABDtgAAGFgA8AA/JcBHMABDtouhxMAAAAAlsZOwAEO+sABDwEAAIF2XQPAAP07AWADiWIBHsABDw/AAP1AAwFgA4liAoDAAQ8mwAm0aSsBhW4pRcABD0kBwAEPUsABD1QAAGJgA8AA/JcBkwEcwAEPW4LAAQ9ZwAm0xmMBAAGAwAEPXcAJtGkAwAD9xQGKwAEPZ8AJtMYcwAEPZYLAAQ9nwAm0xmQBAAGUAMAA/b0+AT0cwAEPeIHAAQ9ywAm0ioC/AgACgsABD3nACbTGHMABD34umTYAAAAAlx0AwAD9S0rAAQ+ZAYHAAQ+gwAm0igaXHS/AAQ+vwAEPucABEKAAAJk2AAAAAQPAAQ/GwAEQoAAAAAAAAABgA4liAT4ETsABD9bAAQ/bAACAvWADwAD+fgEcwAEP3S6HFwAAAACW4U7AARABwAEQBgAAgpRgA4jpARzAARAILocZAAAAAJcfTsABECDAARAmAACEg2ADwAD8lwEcwAEQKC6HEQAAAACWxUrAARA4AR/AARBDiXADAAKAwAEQTcAJtY2BwAEQU8AJta8BhWwhHMABEJccwAEQdILAARBuwAm1z4N8AQABasABEIBgA8AA/JcVAMAA/K9IAQABkwDAAP27BpceL8ABEKXAARCuwAERAwAAmSQAAAABA8ABEMDAAREDAAAAAAAAAGADiOkBPgFKwAEQyQEjHMABENAumKMAAAAAluQcwAEQ6i6HGQAAAACXHysBYAOI6QaXHy/AAREIwAEREcABGtQAAIcZAAAAAQPAAREdwAEa1AAAAAAAAABgA4jpAT4CTsABESrAAREuAACD7GADwAD8lwEcwAERMC6HEQAAAACWxUfAARFAgMABEUjACbbRCwHAARFeasABEV5gA8AA/Je4BgA+Ak7AARF3wAERiAAAmTdgA8AA/JcBHMABEYouhxEAAAAAlsVKwAERngEfwAERqYlhAwADHMABEcEumOkAAAAAlvQcwAER5S6ZEAAAAACXGxzAARILasABEgVdA8AA/TsBYAOI24WoSwEAAYHAARIMwAm3FwDAAP1KAAHAARIvasABEi9gA8AA/JfAAI1LAD4BSsABEkMBasABElBgA4kYhKoBwAESbWrAARJtYAPAAPyXwACa8AA+AUrAARKCAWrAARKPYAOI9MAAnBQBwAESrWrAARKtYAPAAPyXwACa8wA+AUrAARLCAWrAARLPYAOJAISbAcABEu1qwAES7WADwAD8l4QlAD4BSsABEv8BasABEwxgA4kMwACcJQHAARMnasABEydgA8AA/JfAAJr2AD4CTsABE0LAARNTAACZN2ADwAD8lwEcwAETVS6HEQAAAACWxUrAARNpAR/AARN0iTUDAAMcwAETji6YnAAAAACW8RzAAROwLpkQAAAAAJcbHMABE9ZqwAET0F0DwAD9OwFgA4jbhahLAQABgcABE9fACbhIAMAA/UoAAcABE/pqwAET+mADwAD8l8AAmv8APgJOwAEUG8ABFCwAAJk3YAPAAPyXARzAARQuLocRAAAAAJbFSsABFEIBH8ABFE2JNQMAAxzAARRnLpicAAAAAJbxasABFIldA8AA/TsBYAOI6YW2HMABFK9qwAEUqV0DwAD9OwFgA4jbhahLAQABgcABFLDACbjXAMAA/UoAAcABFNNqwAEU02ADwAD8l8AAmvkAPgxOwAEU7cABFQYAAJkRYAPAAPyXARbAARUbFsABFQgumH2WsWHAAP1rTsABFS/AARVAAACZN2ADwAD8lwEcwAEVQi6HEQAAAACWxU7AARVawAEVaQAAhMVdA8AA/TsBYAOJggEcwAEVay6Y/gAAAACXIE7AARWXwAEVrgAAhS5gA8AA/JcBHMABFbAuhxMAAAAAlsZOwAEVyMABFdwAAJk4YAPAAPyXARzAARXeLocTAAAAAJbGTsABFfbAARYBAACFo10DwAD9OwFgA4jpARzAARYDLpkQAAAAAJcbTsABFiPAARYpAACFbV0DwAD9OwFgA4liARzAARYrLpk1AAAAAJccTsABFkzAARZYAACGjmADiOkBHMABFloumSQAAAAAlx5AHMABFqAcwAEWkRbAARaKhsABFn/ACbofYcAA/WtkAQABFsABFpmHwAEWk8AJukZhwAD9awDAAP29SAEAAYXAARajwAm5/QDAAP27wAEWf8ABFrYATsABFsXAARbQAACFSWADiOkBHMABFtIuhxkAAAAAlx89F8ABFv0WwAEW6i6YfZaxYYHAARcGwAm5asAA/WlKwAEXKAEfwAEXM4lPBwAChsABF0DACbofFMABF0zACbriCQAFhMWDwAEXdMAJubSFLoTAAReowAm524TIh8ABF93ACbpGho4mwAEX/QEUwAEX/cAJum0IAGADiVCGfRzAARg1asABGC9dA8AA/TsBYAOI24WoSwEAAYLAARg2wAm5kgDAAP1KAcABGFlqwAEYWWADwAD8l8AAmwIAPgROwAEYecABGIoAAJk3YAPAAPyXARzAARiMLocRAAAAAJbFTsABGKTAARivAACFo10DwAD9OwFgA4jpARzAARixLpkQAAAAAJcbTsABGNHAARjcAACFSWADiOkBHMABGN4uhxkAAAAAlx9KwAEY9gEfwAEZAYlPAwACgsABGQ7ACbvhg8ABGRrACbwIAYZ9HMABGVFqwAEZS10DwAD9OwFgA4jbhahLAQABgcABGVLACbu/AMAA/UoBwAEZdWrAARl1YAPAAPyXwACa/AA+BE7AARmUwAEZ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JsABM8gBHMABM88umJGWggIAAoHAATPiwAnVDIDAATPqwAnU7ACXNmADiOkGlzovwAEz/sABNBLAATTZAACY3wFqwAEz/2ADwAD95AIAAAEDwAE0HcABNNkAAAACAgLAATQoAAAAgllgA4qAAMABNDcAAACY6mADwAD8lwAAYAOCiwE+A07AATROwAE0WQABl8FgA8AA/JcBFsABNFsumH+Wgpa1TsABNHLAATR5AAGBdmADgosBHcABNIGY3wIAAoDAATSNwAnVj4HAATSYwAnVnQCW9krAATSoASbAATSoARzAATSvLpiRloICAAKDwAE0wsAJ1daCwAE0ysAJ1bYAlzZgA4KLBpc7L8ABNN7AATTywAE1gwAAmPEBasABNN9gA8AA/eQCAAABA8ABNP3AATWDAAAAAAAAAGADgvYBPgNOwAE1DMABNRcAAZfBYAPAAPyXARbAATUZLph/loKWtU7AATUwwAE1NwABgXZgA4L2AR3AATU/mPEAAAAAlvtKwAE1UgEmwAE1UgEcwAE1WS6YkZaCAgACgcABNWzACdaUgMABNXTACdZ0AJc2YAOC9gaXPC/AATWIwAE1msABNj0AAJjyAWrAATWJYAPAAP3kAgAAAQPAATWjwAE2PQAAAAEBAcABNagAAACY6mADwAD8lwAAYAODGwE+A07AATW/wAE1ygABl8FgA8AA/JcBFsABNcwumH+Wgpa1TsABNePAATXqAAGBdmADgxsBHcABNfKY8gEAAYDAATX8wAnXFwCW/ErAATYMASbAATYMARzAATYTLpiRloICAAKCwAE2JsAJ11CBwAE2LsAJ1zAAlzZgA4MbBpc9L8ABNkLAATZUwAE24QAAmPMBasABNkNgA8AA/eQCAAABA8ABNl3AATbhAAAAAAAAAGADg5wBPgNOwAE2bMABNncAAZfBYAPAAPyXARbAATZ5Lph/loKWtU7AATaQwAE2lwABgXZgA4OcAR3AATafmPMAAAAAlv9KwAE2sAEmwAE2sAEcwAE2ty6YkZaCAgACgcABNsrACdgFgMABNtLACdflAJc2YAODnAaXPi/AATbmwAE2/sABN5cAAJkDAWrAATbnYAPAAP3kAgAAAQPAATcNwAE3lwAAAAAAAABgA4PPAT4DTsABNxzAATcnAAGXwWADwAD8lwEWwAE3KS6Yf5aClrVOwAE3QMABN0cAAYF2YAODzwEdwAE3T5kDAAAAAJcASsABN2YBJsABN2YBHMABN20umJGWggIAAoHAATeAwAnYsYDAATeIwAnYkQCXNmADg88Glz8vwAE3nMABN7LAAThdAACY9AFqwAE3nWADwAD95AIAAAEDwAE3v8ABOF0AAAABAQHAATfEAAAAmOpgA8AA/JcAAGADhBIBPgNOwAE328ABN+YAAZfBYAPAAPyXARbAATfoLph/loKWtU7AATf/wAE4BgABgXZgA4QSAR3AATgOmPQBAAGAwAE4HMAJ2TQAlwFKwAE4LAEmwAE4LAEcwAE4My6YkZaCAgACgsABOEbACdltgcABOE7ACdlNAJc2YAOEEgaXQC/AAThiwAE4jMABOUkAAJkEAWrAAThjYAPAAP3kAgAAAQPAATitwAE5SQAAAAAAAABgA4PvAT4DTsABOLzAATjHAAGXwWADwAD8lwEWwAE4yS6Yf5aClrVOwAE44MABOOcAAYF2YAOD7wEdwAE475kEAAAAAJcCSsABORgBJsABORgBHMABOR8umJGWggIAAoHAATkywAnaIoDAATk6wAnaAgCXNmADg+8Gl0EvwAE5TsABOWbAATn/AACZCgFqwAE5T2ADwAD95AIAAAEDwAE5dcABOf8AAAAAAAAAYAOEYQE+A07AATmEwAE5jwABl8FgA8AA/JcBFsABOZEumH+Wgpa1TsABOajAATmvAAGBdmADhGEBHcABObeZCgAAAACXA0rAATnOASbAATnOARzAATnVLpiRloICAAKBwAE56MAJ2s6AwAE58MAJ2q4AlzZgA4RhBpdCL8ABOgTAATodwAE7NAAAhxoBasABOgVgA8AA/eQCAAABA8ABOi3AATs0AAAAAgAAAsABOjsAAACZF2ADwAD60QFqwAE6SWADwAD60QDAATpUAAAAmRhgA8AA/JcBasABOmRgA8AA/JeBnmADhK4BPgNOwAE6dcABOoAAAZfBYAPAAPyXARbAATqCLph/loKWtU7AATqZwAE6oAABgXZgA4SuAR3AATqohxoCAAACmReAwAE60MAJ21KZGIHAATruwAnbbpcFSsABOwMBJsABOwMBHMABOwoumJGWggIAAoPAATsdwAnbs4LAATslwAnbkwCXNmADhK4Gl0MvwAE7OcABO1DAATvnAACYmQFqwAE7OmADwAD9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wAD60XdcAT4IScAATLElwABMuoHAAEy1wAolw2ADwAD+fj4BPRzAAEzNLpmmAQABFMAATNfACiXDAQFgA8AA/n4Al+hJwABM6SXAAEzygcAATO3ACiXDYAOItD4BPRzAAE0DLocIAQABFMAATQ3ACiXDAQFgA4i0AJf0PgFAHMAATTOBwABNLsAKJcNIAQABKwDAAP3xwABNLsAATToAPRzAAE1HLpnXAQABFsAATWeAwABNXsAKJbSExYSzAJf8PRzAAE18LpnYAwADFsAATZiAwABNj8AKJbSEx4S1FsAATbeAwABNrsAKJbSEyIS2FsAATdmAwABN0MAKJbSFLoS0AJf9PRzAAE32LpnZAgACFsAAThiAwABOD8AKJbSFSYS3NQAAAAEAYAOXrwEWwABOJC6ZgJe6IxzAAE4vhADACicwSAEAASsAACscwABOL4QAwAonMJl8AgACLoDAAE5EwAoltACXsgFgA8AA/n4Al/tJwABOVCIhHMAATmWCwABOWMAKJddIAQABKwDAAP1lABbAAE59gsAATnDACiXXg7fAAP0ePgY9HMAATpEumaEAAAAAl/U9F8AATqQug+IcwABOohbAAE6kLoPil71kAQABlADAAP29l709HMAATrcumcMAAAAAl+o9HMAATtEumcEBAAEnguoAl+c9HMAATuguiGkCAWADhGECgsAATvLACiXXFsAATwAuhwqX6wCX/j0XwABPFC6D4hzAAE8SFsAATxQug+KXvYGNAQABlADAAP2+l70/ScAATyshHMAAT0QWwABPOIDAAE8vwAoltIVjhLFIAQABasAAT1NgA4TKhQ0AwAD98T4BPRzAAE9hLpm4AQABHMAAT20umdoBAAEWwABPjIDAAE+DwAoltIVjhLEAl/cAl+Y/ScAAT6UiIRzAAE/CFsAAT7KAwABPqcAKJbSFZISySAEAAWrAAE/RYAOEyoUNAMAA/fEAIRzAAE/6FsAAT+qAwABP4cAKJbSFZISySAEAARbAAFAGgMAAT/3ACiW0hWOEsQDAAP3xPgM9HMAAUBsumbgBAAEnmdsAl+Y9HMAAUD8umbgBAAEcwABQSy6Z2gEAARbAAFBqgMAAUGHACiW0hWSEsgCX9wCX5j0cwABQgy6ZuAEAASeZ3ACX5j9JwABQoCEcwABQshbAAFCtgMAAUKTACiW0gm2ExEgBAAErAMAA/fE+AT0cwABQwy6Z3QIAARbAAFDegMAAUNXACiW0gm2ExAGZ1oPAAFDzwAol9Zf4ScAAUQ6DwABREsAKJfU+AT0cwABRKS6ZoQEAASeW0ACX9T8Gl/cwwABRRMAAUUvAAFL0AACZ2gAAAAEDwABRYMAAUvQAAAABAQHAAFFtAAAAmd5gA4TKAABgA8AA/n4BPgFHwABRe4DAAFGDwAoqEwYBwABRpGrAAFGkYAOEyoUNAD4BSsAAUbIBJ5nfAcAAUdhqwABR2GADhMqFIgA+AUrAAFHqASeZ4AHAAFIRasAAUhFgA4TKhTEAPgFKwABSIAEnmeEBwABSR2rAAFJHYAOEyoVAAD4BSsAAUloBJ5niAcAAUoJqwABSgmADhMqFTwA+AUrAAFKYASeZ4wABPgFKwABSwgEkwABS6gMnmeSAwABS4sAKKhMngJcGl/gwwABS+cAAUv7AAFWsAACZ3QAAAAEDwABTD8AAVawAAAACAQHAAFMaAAAAgm1gA4ePAAHAAFMmAAAAmdZgA8AA+tEBasAAUzVgA8AA+tF3XAE+AUnAAFNCIiXAAFNLgMAAU0bACisMYAOHnwAWwABTZxbAAFNcFMAAU1fACisMAAFgA4efhiWHoYFVwAD9HT4EPRzAAFN4Lpm/AAAAAJfkPRzAAFONLpnAAQABJ5nlAJflPRfAAFOmLoJSGsAAU66Xw5fFScAAU7qBwABTvsAKKxs+AT0cwABT1y6ZoQAAAACX9T9JwABT9SXAAFP+gMAAU/nACisMYAOHnz4JPRzAAFQQLpm/AAAAAJfkPRzAAFQlLpmhAQABJ5nmAJf1PRfAAFQ7LoPiHMAAVDkWwABUOy6D4pe9ZAEAAZQAwAD9vZe9PRzAAFReFsAAVFMUwABUTsAKKwwAAWADh5+GJYehg/0BAAEWwABUZi6HCpfrAMAA/Qk9F8AAVHoug+IcwABUeBbAAFR6LoPil72BjQEAAZQAwAD9vpe9PRzAAFSNLpnDAAAAAJfqPRzAAFSnLpnAAQABJ4bXAJflPRfAAFS/LoJSGsAAVMeXw5fFScAAVNOBwABU18AKKxs+AT0cwABU8C6ZoQAAAACX9T9JwABVDiIlwABVF4DAAFUSwAorDGADiD4AIYHAAFUuwAorGz4CPRzAAFVFLpm4AQABJ5nnAJfmPRzAAFVeLpnoAQABFsAAVXMUwABVbsAKKwwAAWADiD6Cb4hAAJgHPgE9HMAAVZMumekBAAGAwABVncAKKwwAl/oGl/kwwABVscAAVbHAAF2KAACZ6gAAAAEDwABVwsAAXYoAAAADAQHAAFXQAAAAg/NgA4k2AALAAFX3AAAAmetdA8AA/TsBYAOIfgFqAGADwAD9oXnAAFYqAAAAmexdA8AA/TsBYAOIfgFqAGADwAD9oXlbAT4QScAAVj8cwABWSRbAAFZDLoJSl8VIAQABGsAAVkyXwwDAAP27PgE9HMAAVloumb8AAAAAl+Q/PRzAAFZzLpnXAQABFsAAVo+AwABWisAKLXOExYk4AJf8PRzAAFakLpnAAQABJ4PcAJflTsAAVsnAAFbUAACFo10DwAD9OwFgA4jpARbAAFbbgMAAVtbACi1zhMeJOk7AAFb7wABXDwAAme1gA8AA+tEBKknAAFccIRzAAFcygcAAVyDACi2CSAEAASsAwAD9ZT4BRsAAV0PAAFd5wABXXAAAAJnuYAOIfgCBwABXZsAKLYI+AT2MwABXg8AKLlcihMAAV6XACi5XARzAAFfWFsAAV88WwABXw4XAAFe8wAoulIRoiIFhwAD9a4CXAQABkwDAAP3HP0nAAFftIRzAAFf+gsAAV/HACi2gSAEAASsAwAD9ZT4BRsAAWA/AAFhAwABYKAAAAJnuYAOIfgCCwABYMsAKLaA+AT2MwABYSsAKLlcihMAAWGzACi5XARzAAFidFsAAWJYWwABYioXAAFiDwAovGIRoiIFhwAD9a4CXAQABkwDAAP3HP0nAAFi1IoTAAFi5wAouVwAhHMAAWOKBwABY0MAKLYJIAQABKwDAAP1lPgE9HMAAWPMuiGkCAWADiH4CHMAAWQ+BwABY/cAKLYKWcAEAARbAAFkZgMAAWRTACi1zhS6JOQDAAP0RFsAAWTwul/KYXwCX/j4BPRzAAFlqLohpAgFgA4jpAhzAAFl/g8AAWXTACi4slnABAAEWwABZiYDAAFmEwAotc4UuiTkAwAD9ERbAAFmiLpnMl+8Al/5JwABZuRzAAFnZFsAAWcKAwABZvcAKLXOFLok5YwEAARbAAFnmg8AAWdvACi4sYcAA/WsAwAD9xT4EScAAWfYcwABaFhbAAFn/gMAAWfrACi1zhS6JOYCXAQABkwDAAP3HPgE9HMAAWiUumcEAAAAAl+c/PRzAAFpBLpnAAQABJ5nGAJflScAAWlkihMAAWl3ACi5XACEcwABahoHAAFp0wAotgkgBAAErAMAA/WU+AT0cwABamS6IaQIBYAOIfgIcwABatYHAAFqjwAotgpZbAQABFsAAWr+AwABausAKLXOFLok5AMAA/RMWwABa5C6X8phfAJf+PgE9HMAAWxYuiGkCAWADiOkCHMAAWyuDwABbIMAKLiyWWwEAARbAAFs1gMAAWzDACi1zhS6JOQDAAP0TFsAAW04umcyX7wCX/j0cwABbaC6ZwAEAASeZxwCX5T9JwABbhBbAAFudFsAAW42AwABbiMAKLXOEyIk7g7fAAP0ePgRJwABbsRbAAFvPFsAAW7qAwABbtcAKLXOEx4k6g7fAAP0ePgE9HMAAW+UumcEAAAAAl+c/PRzAAFwBLpnAAQABJ5nmAJflScAAXBkihMAAXB3ACi5XACEcwABcQYLAAFw0wAotoEgBAAErAMAA/WU+AT0cwABcVC6IaQIBYAOIfgKCwABcXsAKLaAWwABcbC6X8phfAJf+PgE9HMAAXJ4uiGkCAWADiWICFsAAXK2AwABcqMAKLXOEyIk7FsAAXL4uhqCYcACX/j0cwABc3S6ZwAEAASeG1wCX5T89HMAAXPkumcABAAEngyYAl+U9HMAAXQ8umb8AAAAAl+Q9HMAAXSIugo4BAAEnme8Al+I9HMAAXTIumfABAAEWwABdSIDAAF1DwAotc4Z9iTwAmGo9HMAAXVoumb4AAAAAl+M9HMAAXWwumcwBAAEWwABde4DAAF12wAotc4VJiT4Al+8Gl/owwABdj8AAXZTAAF7HAACZ6QAAAAEDwABdncAAXscAAAABAQHAAF2oAAAAgm1gA4ePAABcAT4BScAAXbQlwABdvYDAAF24wAozK2ADh58+Bj0cwABdzy6ZoQEAASeG1gCX9T0XwABd5i6D4hzAAF3kFsAAXeYug+KXvWQBAAGUAMAA/b2XvT0cwABeCRbAAF3+FMAAXfnACjMrAAFgA4efhiWHoYP9AQABFsAAXhEuhwqX6wDAAP0JPRfAAF4lLoPiHMAAXiMWwABeJS6D4pe9gY0BAAGUAMAA/b6XvT0cwABeOC6ZwwAAAACX6j0cwABeUi6ZoQEAASeG1wCX9T4EPRzAAF5zLpmhAAAAAJf1PRfAAF6GLoPiHMAAXoQWwABehi6D4pe9ZAEAAZQAwAD9vZe9PRzAAF6ZLocKAQABgMAAXqPACjMrAJfrPRfAAF6yLoPiHMAAXrAWwABesi6D4pe9gY0BAAGUAMAA/b6XvQaX+zDAAF7MwABe0cAAX2UAAJnZAAAAAQPAAF7gwABfZQAAAAICAsAAXuoAAACClGADiOkAwABe9wAAAIS3YAPAAP5+AABcAT4DScAAXwkcwABfEoDAAF8NwAo0nkgBAAErAIjtSsAAXxsAPz0cwABfJy6ZuAEAASeZ7wCX5j0cwABfPS6ZywIAAoDAAF9QwAo0noHAAF9WwAo0rACX7gaX/DDAAF9qwABfb8AAYHEAAJnXAAAAAQPAAF+FwABgcQAAAAEBAcAAX5oAAACExV0DwAD9OwFgA4mCAABcAT4FScAAX7AWwABfw4DAAF+0wAo1PYFVwAD9HUrAAF/MAD89HMAAX9gumcABAAEnYwCX5T0cwABf7i6IaQIBYAOJggKAwABf+MAKNT0WwABgCC6HCpfrAJf+PRzAAGAYLpnAAQABJ4CXAJflPRfAAGAuLoJSGsAAYDaXw5fFBpf9MMAAYHbAAGB7wABjWAAAmdgAAAABA8AAYI3AAGNYAAAAAwMDwABgqAAAAIWjXQPAAP07AWADiH4AwABg1AAAAIVtXQPAAP07AWADiH4AwABg3wAAAIUuYAPAAPyXAABcAT4FPRzAAGD9LpnAAQABJ4PcAJflPRzAAGETLohpAgFgA4h+AhzAAGExgMAAYSbACjX5lnABAAGCwABhNsAKNiMAwAD9ERbAAGFPLpfymF8Al/5JwABhbhzAAGGJgsAAYXLACjYjYwEAARbAAGGWgMAAYYvACjX5YcAA/WsAwAD9xT4EScAAYaYcwABhwYLAAGGqwAo2I4CXAQABkwDAAP3HPgE9HMAAYdAumcEAAAAAl+c/PRzAAGHsLpnAAQABJ5nGAJflPRzAAGIELohpAgFgA4h+AhzAAGIkgMAAYhnACjX5llsBAAGCwABiKcAKNiMAwAD9ExbAAGJCLpfymF8Al/49HMAAYmMumcABAAEnmccAl+U/ScAAYn8WwABiiYHAAGKDwAo2DoO3wAD9Hj4EScAAYp0WwABirIDAAGKhwAo1+YO3wAD9Hj4BPRzAAGLCLpnBAAAAAJfnPz0cwABi3i6ZwAEAASeZ5gCX5T0cwABi9i6IaQIBYAOIfgKBwABjAMAKNg4WwABjBy6X8phfAJf+PRzAAGMoLpnAAQABJ4bXAJflPz0cwABjRC6ZwAEAASeDJgCX5QaX/jDAAGNdwABjYsAAZGoAAIhpAAAAAQPAAGNuwABkagAAAQAAgnpgA8AA/eQBWwMCAsAAY3sAAACHQ10DwAD8+QFfAwAAAMAAY4cAAACZ8WEDAV8DAABcAAHAAGOkAAAAgbFgA8AA/n4BasAAY69gA8AA/n6Ba1wBPgJOwABjwMAAY8YAAIMeYAPAAPrRASlGwABj0sAAY+rAAGPbAAAAg/NfAwAAAIDAAGPjwAo4Ij4CScAAY/KDwABj9sAKOGw+AT2LwABkB8AKOGwqPgE9HMAAZC0umcEBAAGCwABkOMAKOEoAl+c9HMAAZFqBwABkUsAKODcgAQABhMAAZFvACjiJAAAGl/8wwABkb8AAZHTAAGToAACZ0AAAAAEDwABklMAAZOgAAAABAQHAAGSfAAAAhGNgA4J7AABcAT4BPRzAAGSwLpmmAQABHMAAZLoumfIBAAGAwABk2cAKORwAmAAAl+gGmAAwwABk7cAAZPTAAGZDAACZ8gAAAAEDwABlEsAAZkMAAAABAQHAAGUdAAAAhGNgA4J7AABgA8AA/n4BPgRJwABlLhzAAGU8gMAAZTLACjl8SAEAASsAwAD98UrAAGVFASeZkj9JwABlXiEcwABlcRbAAGVsgMAAZWLACjl8g/OCfkgBAAErAMAA/fFKwABlegEcwABlgS6HTQEAARbAAGWdgMAAZZPACjl8hG+CgwCX0T9JwABlqyEcwABlxxbAAGW5gMAAZa/ACjl8hGSCfUgBAAErAMAA/fFKwABl1gEcwABl3S6Z8wEAARbAAGX+gMAAZfTACjl8hGSCfQCYAz89MMAAZhInmfQGmAEwwABmSMAAZk3AAGbDAACZuQAAAAEDwABmbsAAZsMAAAABAQHAAGZ5AAAAhGNgA4J7AABcAT4BPRzAAGaKLpmmAQABHMAAZpQumfUBAAGAwABmtMAKOocAmAIAl+gGmAIwwABmyMAAZs/AAGgiAACZ9QAAAAEDwABm7sAAaCIAAAABAQHAAGb5AAAAhGNgA4J7AABgA8AA/n4BPgRJwABnChzAAGcYgMAAZw7ACjrnSAEAASsAwAD98UrAAGchASeZlj9JwABnOyEcwABnThbAAGdJgMAAZz/ACjrng/OCfkgBAAErAMAA/fFKwABnVwEcwABnXi6HTAEAARbAAGd7gMAAZ3HACjrnhHGChACX1D9JwABniiEcwABnphbAAGeYgMAAZ47ACjrnhGSCfUgBAAErAMAA/fFKwABntQEcwABnvC6Z8wEAARbAAGfdgMAAZ9PACjrnhGSCfQCYAz89MMAAZ/EnmfQGmAMwwABoJ8AAaC7AAGv8AACZ8wAAAAEDwABoRMAAa/wAAAABAQHAAGhTAAAAgL1gA5rNAABgA8AA/n4BPgxJwABoXxbAAGhogMAAaGPACjvyl7aa2D0wwABocCeZ9j9JwABojRzAAGibFsAAaJaAwABokcAKO/KAvZrTgdgBAAEng4QAwAD+kD0wwABorCeZ9z9PwABox8AAaMcAAAGZ+GEDAWADms1bAAPAAGjUwABprwAAAAEBAcAAaOMAAACItWADms0AAFsBPgJJwABo8CEcwABpCDUAAAABAGADgnsBFsAAaPiCwABo9MAKPISEY5rUIxzAAGkDgwDACjyjSAEAASsAACsWwABpA4MAwAo8o4Pzgn4BYAOCaEgBAAErAMAA/fFKwABpGQEcwABpIC6ZjQEAARbAAGlCFsAAaTiCwABpNMAKPISEY5rUhG2CggCXzj9KwABpVAEcwABpahbAAGlbLpl/l7iZdgIAAhbAAGmagsAAaZbACjyEhGOa1ILAAGmlwAo8hACXq0/AAGm2wABptgAAAZn5YQMBYAOazVsAA8AAacHAAGoLAAAAAQEBwABp0AAAAJn6YAOazQAAWwFKwABp4AEcwABqARzAAGn6HMAAae2BwABp4MAKPGMgAQABFsAAafKDwABp7sAKPX+EV5rXAABkAQABJ4ZwAABkAQABFsAAageDwABqA8AKPX+AvZrTAABJwABqEhbAAGoiFsAAahuAwABqFsAKO/KEV5rXl7aa2ErAAGoqASbAAGoqARzAAGo+gcAAajHACjxjIAEAAYDAAGo/wAo78gAAYAPAAP5+P0nAAGpKFsAAamEWwABqWhbAAGpTgMAAak7ACjvyhFea14RXmteXtprYSsAAamkBJsAAamkBHMAAanuCwABqcMAKPV4gAQABgMAAanzACjvyAABgA8AA/n4/TsAAapbAAGqdAACZ+2ADms0BFsAAaqSAwABqn8AKO/KEV5rXQ8AAarAhHMAAasQWwABqv4PAAGq4wAo+kYC9mtOB2AEAASeDhADAAP6QPYvAAGrVwAo+kRbAAGrlg8AAat7ACj6RhFea107AAGr5wABrAAAAhFdgA8AA/n4BJwBJwABrChbAAGsjFsAAaxwWwABrFYPAAGsOwAo+kYRXmteEV5rXl7aa2D4BPYzAAGszwAo++ybAAGszARzAAGtJgcAAazzACjxjIAEAARbAAGtRg8AAa0rACj6RhFea1wAAYAPAAP5+PgE9jMAAa23ACj77JsAAa20BHMAAa4GCwABrdsAKPV4gAQABFsAAa4mDwABrgsAKPpGEV5rXAABgA8AA/n5JwABrnRzAAGurFsAAa6aAwABrocAKO/KAvZrTSAEAAScAAMAA/o1KwABrsgEkwABr1AOEwABru8AKPvsnhnAawABrxJfGP0rAAGvaASTAAGv4A4TAAGvjwAo++yeGcBbAAGvygMAAa+3ACjvygL2a0waYBDDAAGwBwABsBsAAbGYAAJnRAAAAAQPAAGwbwABsZgAAAAEBAcAAbCQAAACGm2ADgvYAAFwBPgE9HMAAbDcumaYBAAEcwABsQS6ZkwEAAYDAAGxVwApATQCX0gCX6AaYBTDAAGxrwABscMAAbX0AAJn8AAAAAQPAAGyGwABtfQAAAAEBAcAAbJsAAACCcGADiH4AAFwBPgROwABsscAAbLsAAZnFYAPAAPrRARzAAGy9LpmJAQABgMAAbM3ACkCtAJfKScAAbNyBwABs4MAKQME+AT0cwABs8y6ZigEAAYDAAG0CwApArQCXyz89HMAAbRcumaYBAAEcwABtIS6ZmAEAAYDAAG02wApArQCX1gCX6EnAAG1GgcAAbUrACkDBPgE9HMAAbV0umYsBAAGAwABtasAKQK0Al8w/BpgGMMAAbYLAAG2HwABt6wAAmf0AAAABA8AAbaLAAG3rAAAAAQEBwABtsQAAAIPzYAOJggAAXAE+AT0cwABtvS6ZpgEAARzAAG3HLpmbAQABgMAAbeHACkGKAJfYAJfoBpgHMMAAbfDAAG31wABwAAAAmegAAAABA8AAbgTAAHAAAAAAAgECwABuEAAAAIPzYAOE2QDAAG4bAAAAmf5gA8AA/JcBagBgA8AA/aF5AFwBPghOwABuO8AAbkUAAZnFYAPAAPrRARzAAG5HLpmJAQABgMAAblfACkHqAJfKScAAbmKCwABuZsAKQhc+AT0cwABueS6ZigEAAYDAAG6IwApB6gCXyz9JwABumRbAAG6dLoRNl8A9HMAAbqoumaYBAAEkwABuygMnmcYWwABuvYDAAG64wApB6oRYglknmccAl+g/TsAAbtbAAG7mAACZ/2ADwAD60QEqScAAbvMiIRzAAG8JgcAAbvfACkH4SAEAASsAwAD9uwAcwABvKBzAAG8ULpm9AQABgMAAbyLACkHqAJfhYwEAAYHAAG8qwApB+ADAAP3FPgI9i8AAb0XACkKoKT0cwABvYy6ZwAEAASeD3ACX5T89HMAAb38uhwoBAAGAwABvicAKQeoAl+tJwABvlIPAAG+YwApCqD4BPRzAAG+xLpnAAQABJ4MmAJflP0nAAG/NgsAAb9HACkIXPgE9HMAAb+QumYsBAAGAwABv8cAKQeoAl8w/BpgIMMAAcAXAAHAKwABxAwAAl+0AAAABA8AAcBnAAHEDAAAAAQEBwABwJQAAAIPzYAOE2QAAXAE+Aj0cwABwMS6ZwAEAASeDhACX5UnAAHBHJcAAcFCAwABwS8AKQ7VgA4X7PgI9HMAAcHIumbkBAAEWwABwmRTAAHCUwApDtQABYAOF+4Uthf0AmAE9HMAAcLEuhbABAAEWwABwxRTAAHDAwApDtQABYAOF+1uF/gCYYD4BPRzAAHDkLpnoAQABgMAAcPTACkO1AJgHBpgJMMAAcQjAAHENwAByOwAAl+EAAAABA8AAcSDAAHI7AAAAAgEBwABxMgAAAIdDXQPAAP07AWADhNkAAcAAcT8AAACaAGADwAD60QFqwABxTmADwAD60XdcAT4BRsAAcVvAAHF6wABxawAAAIPzYAOE2QCAwABxc8AKRIE+A0nAAHGCgcAAcYbACkSXPgE9HMAAcZ8umcMAAAAAl+o/PRzAAHHBLpftAQABgsAAcdHACkTAAJgIScAAcd6BwABx4sAKRJc+AT0cwABx+y6ZoQAAAACX9T4BPRzAAHIdLpm+AAAAAJfjBpgKMMAAckDAAHJAwAByXAAAhKcAAAABA8AAckzAAHJcAAAAAQEBwAByVQAAAIPzYAOCiwAAYAPAAP2hAT4ABpgLMMAAcmHAAHJhwAB34gAAhSMAAAABA8AAcmvAAHfiAAAAAQEBwABycgAAAIPzYAODnAAAYAPAAP2hAT4QPRzAAHJ+LpfhAQABFsAAcpeAwAByksAKRaeEaIOAAJgJPRzAAHKpLpnDAAAAAJfqPRzAAHLBLpnSAgACFsAActSAwAByz8AKRaeFH4OzJ5oBAJfzPRzAAHLpLpnSAgACFsAAcvyAwABy98AKRaeEHoOuJ4QoAJfzPRzAAHMVLpnSAgACFsAAcyiAwABzI8AKRaeEJYOrJ4QvAJfzPRzAAHNHLpnSAgACFsAAc1qAwABzVcAKRaeFIIOyJ5oCAJfzPRzAAHORLpnSAgACFsAAc6SAwABzn8AKRaeEIIOsJ4QqAJfzPRzAAHO7LpnSAgACFsAAc86AwABzycAKRaeEIoOtJ4QsAJfzScAAdEsWwAB0VIDAAHRPwApFp4Qeg64+Aj0cwAB0Zi6Z0gIAAhbAAHR5gMAAdHTACkWnhR2DsCeaAwCX8z0cwAB0ny6Z0gIAAhbAAHSygMAAdK3ACkWnhR6DsSeaBACX8z4CPRzAAHTlLpnSAgACIRbAAHT5gMAAdPTACkWnhR2DsCeaBQCX80nAAHUiFsAAdSuAwAB1JsAKRaeEIIOsPgE9HMAAdT4umdICAAIWwAB1UYDAAHVMwApFp4Ueg7EnmgQAl/M+AT0cwAB1iC6Z0gIAAiEWwAB1nIDAAHWXwApFp4Ueg7EnmgYAl/M9HMAAddEumaYBAAEnhJsAl+g9HMAAdekumb4AAAAAl+M9HMAAdfsumcsCAAIWwAB2E4DAAHYOwApFp4KUg541AAAAAQBgA5evARbAAHYZLpmAl7ojHMAAdiSBAMAKR/NIAQABKwAAKxzAAHYkgQDACkfzmX0CAAIugMAAdjjACkWnAJezAWADwAD+fgCX7j0cwAB2RC6HCAEAARzAAHZOLpmVAQABgMAAdlzACkWnAJfTAJf0ScAAdmghHMAAdn0WwAB2cYDAAHZswApFp4UTg6BIAQABKwDAAP3xPgI9HMAAdo4umbgBAAEngLwAl+Y9HMAAdqYumegBAAEWwAB2u4DAAHa2wApFp4UTg6AAmAc/ScAAdtMiIhzAAHbsFsAAdt2AwAB22MAKRaeFCoOFSAEAASsAwAD98QAhHMAAdyEWwAB3GRbAAHcIgMAAdwPACkWnhLKDhoRmgo5IAQABFsAAdymAwAB3JMAKRaeEZoOCAMAA/yYBIiEcwAB3UhbAAHdDgMAAdz7ACkWnhQqDhUgBAAErAMAA/fEAIRzAAHeFFsAAd30WwAB3boDAAHdpwApFp4UKg4WEZoMpSAEAARbAAHeNgMAAd4jACkWnhGaDggDAAP8mPgE9HMAAd58umaYBAAEkwAB3xQMnmgcWwAB3uYDAAHe0wApFp4Rmg4InmggAl+g/PRzAAHfSLpmhAQABJ5bQAJf1BpgMMMAAd+fAAHfnwAB7FgAAhUcAAAABA8AAd/XAAHsWAAAAAQEBwAB4AAAAAIPzYAOEEgAAYAPAAP2hAT4LPRzAAHgMLpfhAQABFsAAeCWAwAB4IMAKSfSEaIOAAJgJPRzAAHg3LpnDAAAAAJfqPRzAAHhPLpnSAgACFsAAeGKAwAB4XcAKSfSEJIQnJ4QuAJfzPRzAAHh/LpnSAgACFsAAeJKAwAB4jcAKSfSEHoQlJ4QoAJfzPRzAAHirLpnSAgACFsAAeL6AwAB4ucAKSfSEH4QmJ4QpAJfzPRzAAHjbLpnSAgACFsAAeO6AwAB46cAKSfSFOYQpJ5oJAJfzPRzAAHkYLpnSAgACFsAAeSuAwAB5JsAKSfSFOoQqJ5oKAJfzPRzAAHleLpnSAgACFsAAeXGAwAB5bMAKSfSFQYQtJ5oLAJfzPRzAAHmrLpmmAQABHsAAebWXaAEAARbAAHnQgMAAecvACkn0gmuEFQAAl+hJwAB53CIiHMAAefUWwAB55oDAAHnhwApJ9IUKg4VIAQABKwDAAP3xACEcwAB6KhbAAHoiFsAAehGAwAB6DMAKSfSEsoOGhGaCjkgBAAEWwAB6MoDAAHotwApJ9IRmg4IAwAD/JgEiIRzAAHpbFsAAekyAwAB6R8AKSfSFCoOFSAEAASsAwAD98QAhHMAAeo4WwAB6hhbAAHp3gMAAenLACkn0hQqDhYRmgylIAQABFsAAepaAwAB6kcAKSfSEZoOCAMAA/yY+AT0cwAB6qC6ZpgEAASTAAHrOAyeaBxbAAHrCgMAAer3ACkn0hGaDgieaCACX6D89HMAAetsumdUCAAEWwAB67oDAAHrpwApJ9IJuhBcBgL0cwAB6/i6ZlQEAAYDAAHsMwApJ9ACX05f2BpgNMMAAexvAAHsbwAB8iwAAhSkAAAABA8AAeyvAAHyLAAAAAQEBwAB7OAAAAIPzYAODzwAAYAPAAP2hAT4HPRzAAHtELpfhAQABFsAAe12AwAB7WMAKTJeEaIOAAJgJPRzAAHtvLpnDAAAAAJfqPRzAAHuHLpnSAgACFsAAe5qAwAB7lcAKTJeEJIPaJ4QuAJfzPRzAAHu3LpnSAgACFsAAe8qAwAB7xcAKTJeEIoPZJ4QsAJfzPRzAAHvhLpnSAgACFsAAe/SAwAB778AKTJeEk4PbJ5oMAJfzPRzAAHwTLpmmAQABJ5kIAJfoPRzAAHwxLpnVAwABFsAAfESAwAB8P8AKTJeCboPTAoC9FsAAfGGAwAB8XMAKTJeAvYOBhSYWwAB8eoDAAHx1wApMl4Umg9SX9gaYDjDAAHyQwAB8kMAAf3EAAIUwAAAAAQPAAHyywAB/cQAAAAEBAcAAfNEAAACD82ADg+8AAGADwAD9oQE+DD0cwAB83S6X4QEAARbAAHz2gMAAfPHACk3NhGiDgACYCT0cwAB9CC6ZwwAAAACX6j0cwAB9IC6Z0gIAAhbAAH0zgMAAfS7ACk3NhCSD/CeELgCX8z0cwAB9UC6Z0gIAAhbAAH1jgMAAfV7ACk3NhCKD+yeELACX8z0cwAB9ei6ZpgEAASeaDQCX6EnAAH2hIRzAAH2vFsAAfaqAwAB9pcAKTc2AvYOBSAEAASsAiMA+AT0cwAB9wC6HCAEAARbAAH3PgMAAfcrACk3NgL2DgQCX9D89HMAAfeAumdcBAAEWwAB9/IDAAH33wApNzYTFg/QAl/w9HMAAfhEumdgDAAMWwAB+KYDAAH4kwApNzYTHg/UWwAB+RIDAAH4/wApNzYTIg/cWwAB+YoDAAH5dwApNzYUug/YAl/09HMAAfn8umbgBAAEngLwAl+Y9HMAAfpUumbkBAAEWwAB+vIDAAH63wApNzYUtg/MAmAFJwAB+0hbAAH7pFsAAftuAwAB+1sAKTc2FLIPyg7fAAP0ePgM9HMAAfv0umcABAAEnYwCX5T0cwAB/FS6IaQIBYAOI6QIWwAB/JIDAAH8fwApNzYUsg/IWwAB/My6ZzJfvAJf+PRzAAH9FLpnAAQABJ4CXAJflPz0cwAB/YS6ZoQEAASeW0ACX9QaYDzDAAH92wAB/dsAAg8AAAIT7AAAAAQPAAH+AwACDwAAAAAEBAcAAf4cAAACD82ADgxsAAGADwAD9oQE+Ez0cwAB/ky6X4QEAARbAAH+sgMAAf6fAClABhGiDIACYCT0cwAB/vi6ZwwAAAACX6j0cwAB/1i6Z0gIAAhbAAH/pgMAAf+TAClABhB+DNyeEKQCX8z0cwACABi6ZpgEAASeaDgCX6D0cwACAHi6ZpgEAARzAAIAoLpmQAQABgMAAgDXAClABAJfPAJfoPRzAAIBBLpnXAQABFsAAgF2AwACAWMAKUAGExYMqAJf8ScAAgHIWwACAe4DAAIB2wApQAYT2gz8+BD0cwACAly6ZuAEAASeAvACX5j0cwACAry6FAwEAARbAAIDDgMAAgL7AClABhOGDKwCX8T0cwACA1S6ZuAEAASeaDwCX5j0cwACA8C6FAwEAARbAAIEEgMAAgP/AClABhOKDLACX8UnAAIEdIRzAAIEwFsAAgSaAwACBIcAKUAGE4YMrSAEAASsAiaI+Aj0cwACBQS6ZuAEAASeaEACX5j0cwACBXy6FAwEAARbAAIFzgMAAgW7AClABhOGDKwCX8T9JwACBiRbAAIGjFsAAgZKAwACBjcAKUAGE44Mtg7fAAP0ePgI9HMAAgbcumbgBAAEnmhEAl+Y9HMAAgdguiGkCAWADiZcCFsAAgeeAwACB4sAKUAGE44MtFsAAgfkuhQOX8QCX/j9OwACCGMAAgiYAAJoSYAPAAP5+ASeG1knAAIIyIRzAAIJUFsAAgkwWwACCO4DAAII2wApQAYSyg0WEZoKOSAEAARbAAIJcgMAAglfAClABhGaDKQDAAP8mPgE9icAAgm3AClIHHMAAgnuBwACCbcAKUgdkAQABJMAAgpgCJ5oTFsAAgo+AwACCisAKUAGEZoMpAMAA/pM/PRzAAIKkLpmhAQABgcAAgqzAClIHAJf1PRfAAILCLoPiHMAAgsAWwACCwi6D4pe9ZAEAAZQAwAD9vZe9PRzAAILfFsAAgtiAwACC08AKUAGEi4Mug/0BAAEWwACC5y6HCpfrAMAA/Qk9HMAAgwkWwACC/IDAAIL3wApQAYTkgy+D/QEAARbAAIMRLocKl+sAwAD9CT0cwACDMRbAAIMmgMAAgyHAClABhIqDMIP9AQABFsAAgzkuhwqX6wDAAP0JPRzAAINtFsAAg06AwACDScAKUAGE5YMxg/0BAAEWwACDdS6HCpfrAMAA/Qk9F8AAg4cug+IcwACDhRbAAIOHLoPil72BjQEAAZQAwAD9vpe9PRzAAIOYLpnDAAAAAJfqPRzAAIOwLpmhAQABJ4bXAJf1BpgQMMAAg8XAAIPFwACHoAAAhQYAAAABA8AAg9PAAIegAAAAAQEBwACD3gAAAIPzYAODYAAAYAPAAP2hAT4OPRzAAIPqLpnDAAAAAJfqPRzAAIQCLpmmAQABJ4KTAJfoPRzAAIQeLpmmAQABHMAAhCgumZEBAAGAwACEOcAKU/YAl9AAl+g9HMAAhEUumdcBAAEWwACEYYDAAIRcwApT9oTFg2QAl/w9HMAAhHYumbgBAAEnmhQAl+Y9HMAAhI0umcwBAAEWwACEnIDAAISXwApT9oUFg2UAl+9OwACErcAAhLsAAJoSYAPAAP5+ASeG1knAAITHIRzAAITpFsAAhOEWwACE0IDAAITLwApT9oSyg2iEZoKOSAEAARbAAITxgMAAhOzAClP2hGaDYwDAAP8mPgE9icAAhQLAClSqHMAAhRCBwACFAsAKVKpkAQABJMAAhS0CJ5oTFsAAhSSAwACFH8AKU/aEZoNjAMAA/pM/PRzAAIU5LpmhAQABgcAAhUHAClSqAJf1PRfAAIVXLoPiHMAAhVUWwACFVy6D4pe9ZAEAAZQAwAD9vZe9PRzAAIV1FsAAhW2AwACFaMAKU/aElINmg/0BAAE0wACFfQPAAIV9wACHXgAAAAEBAcAAhZgAAACaFWADg28AAGADwAD9oQE+CD0cwACFrC6ZwwAAAACX6j0cwACFxi6Z0gIAAhbAAIXfgsAAhdTAClWthCSDdyeELgCX8z0cwACF/i6Z0gIAAhbAAIYXgsAAhgzAClWthB6DdieEKACX80nAAIYyJcAAhlEWwACGSBbAAIZBgsAAhjbAClWtgmqDdIRxgoRgA4QSPgE9HMAAhmkumaYBAAEewACGc5doAQABFsAAhpSCwACGicAKVa2Ca4NyAACX6D4BPRzAAIazLpmmAQABJ4SbAJfoPRzAAIbVLocIAQABFsAAhuqCwACG38AKVa2AvYNxAJf0PRzAAIb3Lpm4AQABJ4C8AJfmPRzAAIcPLpm5AQABFsAAhzyCwACHMcAKVa2CaoN0AJgBPRzAAIdLLpmhAQABJ5bQAJf1AMAA/Qk9F8AAh2cug+IcwACHZRbAAIdnLoPil72BjQEAAZQAwAD9vpe9PRzAAId4LpnDAAAAAJfqPRzAAIeQLpmhAQABJ4bXAJf1BpgRMMAAh6XAAIelwACJcgAAhMoAAAABA8AAh7HAAIlyAAAAAQEBwACHugAAAIPzYAOC9gAAYAPAAP2hAT4IPRzAAIfGLpfhAQABFsAAh9+AwACH2sAKV1+EaIL5AJgJPRzAAIfxLpnDAAAAAJfqPRzAAIgJLpmmAQABJ4aRAJfoPRzAAIgjLpmmAQABFsAAiDKAwACILcAKV1+AvYL6AJfoPRzAAIg9LpnXAQABFsAAiFmAwACIVMAKV1+ExYL7AJf8PRzAAIhuLpm4AQABJ4C8AJfmScAAiIQlwACIkhbAAIiNgMAAiIjACldfgpSC/GADiTY+AT0cwACIqy6Z6gMAASbAAIjCARbAAIjCgMAAiL3ACldfgpSC/GADiTYCmesWwACI6oDAAIjlwApXX4THgv6Z7BbAAIkdgMAAiRjACldfhMiC/5f5PgE9HMAAiUIuhwoBAAEWwACJUYDAAIlMwApXX4KUgvwAl+s9HMAAiWIumaEBAAEnltAAl/UGmBIwwACJd8AAiXfAAIopAACFiAAAAAEDwACJjcAAiikAAAABAQHAAImgAAAAg/NgA4ThAABgA8AA/aEBPgI9HMAAiawumaYBAAEnmhYAl+hJwACJ0SEcwACJ4hbAAInagMAAidXACljeIoTjSAEAASsAwAD+jT4BPRzAAInzLpmmAQABJMAAih4DJ4OzHMAAigEumhcBAAEWwACKE4DAAIoOwApY3iKE4wCYHCeDswCX6D8GmBMwwACKLsAAii7AAIsQAACFtgAAAAEDwACKQ8AAixAAAAABAQHAAIpVAAAAg/NgA4XDAABgA8AA/aEBPgQ9HMAAimEumegCAAIWwACKdoDAAIpxwApZkoWPhcVqwACKi2ADwAD8l8AAcYoAmAc9HMAAipkumcABAAEngWoAl+U9HMAAiq8umhgCAAIWwACKyYDAAIrEwApZkoC9hcYWwACK1IDAAIrPwApZkoWQhcgAmD49HMAAivMuhwoBAAEWwACLAoDAAIr9wApZkluFxwCX6waYFDDAAIsVwACLFcAAjBQAAIWgAAAAAQPAAIswwACMFAAAAAEBAcAAi0gAAACD82ADhUwAAGADwAD9oQE+BT0cwACLVC6Z6AIAAhbAAItpgMAAi2TAClpmhY+FTmrAAIt+YAPAAPyXwABxigCYBz0cwACLjC6ZwAEAASeaGQCX5T0cwACLpC6ZuQEAARbAAIvLgMAAi8bAClpmhS2FTwCYAT0cwACL4S6ZwAEAASeG1wCX5T0cwACL9y6HCgEAARbAAIwGgMAAjAHAClpmW4VQAJfrBpgVMMAAjBnAAIwZwACM5QAAhbgAAAABA8AAjDPAAIzlAAAAAQEBwACMSgAAAIPzYAOF1gAAYAPAAP2hAT4EPRzAAIxWLpmmAQABJ5oaAJfoPRzAAIxuLpnAAQABJ4FqAJflPRzAAIyELpoYAgACFsAAjJ6AwACMmcAKWzqAvYXYFsAAjKmAwACMpMAKWzqFkIXaAJg+PRzAAIzILocKAQABFsAAjNeAwACM0sAKWzpbhdkAl+sGmBYwwACM6sAAjOrAAI2hAACFugAAAAEDwACM/8AAjaEAAAABAQHAAI0RAAAAg/NgA4XoAABgA8AA/aEBPgM9HMAAjR0umdICAAIWwACNMIDAAI0rwApb8IQihewnhCwAl/M9HMAAjUcumbkBAAEWwACNboDAAI1pwApb8IUtheoAmAE9HMAAjYQuhwoBAAEWwACNk4DAAI2OwApb8FuF6wCX6waYFzDAAI2mwACNpsAAjmwAAIW8AAAAAQPAAI3AwACObAAAAAEBAcAAjdcAAACD82ADhfsAAGADwAD9oQE+Az0cwACN4y6ZpgEAASMWwACN8oDAAI3twApclIQihf8nhCwnmhsBYAPAAP5+AJfoPRzAAI4SLpm5AQABFsAAjjmAwACONMAKXJSFLYX9AJgBPRzAAI5PLocKAQABFsAAjl6AwACOWcAKXJRbhf4Al+sGmBgwwACOccAAjnHAAI7UAACFwwAAAAEDwACOecAAjtQAAAABAQHAAI5+AAAAg/NgA4YbAABgA8AA/aEBPgI9HMAAjooumcABAAEnmhwAl+U9HMAAjqAumegCAAIWwACOtYDAAI6wwApdQ4XChh1qwACOyWADwAD8l8AAjRgAmAcGmBkwwACO2cAAjtnAAI/KAACFyAAAAAEDwACO78AAj8oAAAABAQHAAI8CAAAAg/NgA4YmAABgA8AA/aEBPgROwACPEsAAjx0AAJodYAPAAPyXARzAAI86asAAjypdA8AA/W0CYAPAAP5+YAPAAPyXwACc6UsBAAEWwACPQIDAAI87wApdxIXGhikAwAD9gT0cwACPTy6Z6AIAAhbAAI9kgMAAj1/ACl3EhcWGKIHAAI9qwApd3QCYBz0cwACPey6ZuAEAARbAAI+MgMAAj4fACl3EhcaGKQCX5j0cwACPmy6Z6AIAAhbAAI+wgMAAj6vACl3EhceGKhzAAI/CgcAAj7fACl3dZAEAAZQAwAD9vQCYBwaYGjDAAI/PwACPz8AAkPwAAIXNAAAAAQPAAI/pwACQ/AAAAAEBAcAAkAAAAACD82ADhjMAAGADwAD9oQE+CD0cwACQDC6Z6AIAAhbAAJAhgMAAkBzACl7XhcqGNWrAAJA3YAPAAPyXgVcAmAc9HMAAkEgumb8AAAAAl+Q9HMAAkFsugo4BAAEngPQAl+I9HMAAkGsumiABAAEWwACQgIDAAJB7wApe14XMhjgAmD89HMAAkJEumb4AAAAAl+M9HMAAkKMumegBAAEWwACQuIDAAJCzwApe14GvhjYAmAc9HMAAkMMumbgBAAEnguoAl+Y9HMAAkNkumegBAAEWwACQ7oDAAJDpwApe14XLhjcAmAcGmBswwACRAcAAkQjAAJMZAACaIQAAAAEDwACRG8AAkxkAAAABAQHAAJEgAAAAmGJgA8AA/JcAAGADwAD+fgE+AUfAAJEwgMAAkTjACl/pCQHAAJFPasAAkU9gA8AA/JeEEQA+AUrAAJFaASeEEgHAAJFzasAAkXNgA8AA/JeEFAA+AUrAAJF/ASeEEwHAAJGYasAAkZhgA8AA/JfAAJcIAD4BSsAAkaQBJ5oiAcAAkb1qwACRvWADwAD8l8AAljYAPgFKwACRyQEnmiMBwACR4mrAAJHiYAPAAPyXhBcAPgFKwACR7gEnhBQBwACSB2rAAJIHYAPAAPyXhA4APgFKwACSEwEnhBEBwACSLGrAAJIsYAPAAPyXsPAAPgFKwACSOAEnmiQBwACSUWrAAJJRYAPAAPyXhCUAPgFKwACSXQEnhBUAAT4BScAAkoIiHMAAko+AwACShsAKX+ljAQABNyAAwAD9xQEcwACSoIDAAJKXwApf6YCXAQABN34AwAD9xz4BSsAAkrMBHMAAksAnhAxkAQABHMAAks4kwACSzQGAwACSxMAKX+mScAIAApcnhA0AwAD+mQDAAP6TPgFKwACS+gErBpgcMMAAkx7AAJMlwACUxAAAmhcAAAABA8AAkzHAAJTEAAAAAQEBwACTOQAAAIPxYAPAAP5+AABgA8AA/n4BPgNOwACTVAAAAIKPYAPAAP7IAEXAAJNgAcAAk2nAAJNrAABiYAPAAPyXAZMBHMAAk3KCwACTcMAKYeBjAQABFsAAk3uAwACTdMAKYa9hwAD+ggDAAP3FAYrAAJOFwAph4BzAAJODgsAAk4XACmHgZAEAAZQAwAD9vT4CTsAAk5fAAJOhAACUZmADwAD+fgEcwACToy6aIQEAARzAAJO+gMAAk7fACmGvhBABAAGCwACTycAKYeAAwAD+jACYG0nAAJPUIRzAAJPig8AAk9jACmJDSAEAASsAwAD+jT4CPSMcwACT/IHAAJP1wAphykgBAAErAMAA/fGJwACT9cAKYcofwACUBMAA/ucBAAEcwACUGIDAAJQRwAphr4C+AgACk4LAAJQlwAph4ADAAP6UACsBYAPAAP7IPRzAAJQ5gcAAlDLACmHKgo4BAAGDwACUP8AKYkMAwAD+3D4BPTUAAAABAGADwAD+yAGBwACUYsAKYcojHMAAlGqEAMAKYyVIAQABKwAAKxzAAJRqhADACmMlgo4BAAEcwACUdoDAAJRwwAphr0sBAAGCwACUd8AKYeAAwAD+iwDAAP7cAVxKwACUjgEjHMAAlJyBwACUlcAKYcpIAQABKwDAAP3xgMAAlKbACmGvHMAAlLaBwACUr8AKYcojAAAAAMAA/uEBYAPAAP5+BpgdMMAAlMnAAJTJwACWUgAAhdEAAAABA8AAlOHAAJZSAAAAAQEBwACU9gAAAIPzYAOGQQAAYAPAAP2hAT4FScAAlQIcwACVDBbAAJUGLoJSl8VIAQABGsAAlQ+XwwDAAP27PgE9HMAAlR0umb4AAAAAl+M/PRzAAJU1LoKOAQABJ4OzAJfiRsAAlUXAAJVowACVTgAAAJolYAOE2QAWwACVW4DAAJVWwApj8oXPhkM+AUnAAJVwJcAAlXmBwACVdMAKZFtgA4aoPgE9HMAAlZUumcABAAEcwACVoS6aFwEAARbAAJWzFMAAla7ACmRbAQFgA4aogJaGqgCYHACX5T4DPRzAAJXTLpnAAQABJ5omAJflPRzAAJXvLpnoAQABgcAAlf/ACmRbAJgHPRzAAJYOLpnAAQABJ4bXAJflPRzAAJYyLoKOAQABJ4OzAJfiPRfAAJZCLoJSGsAAlkqXw5fFBpgeMMAAllfAAJZXwACXJwAAhdYAAAABA8AAlm3AAJcnAAAAAQEBwACWgAAAAIPzYAOGTAAAYAPAAP2hAT4CTsAAlpHAAJaXAACDHmADwAD60QEpRsAAlqPAAJbHwACWswAAAJolYAOE2QAWwACWwIDAAJa7wAplVIXUhk8+A0nAAJbPIYHAAJbUwAplbT0cwACW2y6ZuAEAASdkAJfmPz0cwACW8y6Z6AEAAYLAAJcDwApligCYBz2JwACXEMAKZW0qBpgfMMAAlyzAAJcswACX+QAAhdoAAAABA8AAl0HAAJf5AAAAAQEBwACXUwAAAIPzYAOGWAAAYAPAAP2hAT4CTsAAl2TAAJdqAACDHmADwAD60QEpRsAAl3bAAJeZwACXhgAAAJolYAOE2QAWwACXk4DAAJeOwApmF4XYhls+A0nAAJehIYHAAJemwApmMD0cwACXrS6ZuAEAASdkAJfmPz0cwACXxS6Z6AEAAYLAAJfVwApmTQCYBz2JwACX4sAKZjAqBpggMMAAl/7AAJf+wACYywAAheAAAAABA8AAmBPAAJjLAAAAAQEBwACYJQAAAIPzYAOGZAAAYAPAAP2hAT4CTsAAmDbAAJg8AACDHmADwAD60QEpRsAAmEjAAJhrwACYWAAAAJolYAOE2QAWwACYZYDAAJhgwApm2oXehmg+A0nAAJhzIYHAAJh4wApm8z0cwACYfy6ZuAEAASdkAJfmPz0cwACYly6Z6AEAAYLAAJinwApnEACYBz2JwACYtMAKZvMqBpghMMAAmNDAAJjQwACc/wAAheYAAAABA8AAmOXAAJz/AAAAAQEBwACY9wAAAIPzYAOGcQAAYAPAAP2hAT4IPRzAAJkDLpnQAQABFsAAmSmAwACZJMAKZ52F4oZzAJf/ScAAmT4WwACZVRbAAJlHgMAAmULACmedhSyGdIO3wAD9Hj4DPRzAAJlpLpnAAQABJ2MAl+U9HMAAmYEuiGkCAWADiOkCFsAAmZCAwACZi8AKZ52FLIZ0FsAAmZ8umcyX7wCX/j0cwACZsS6ZwAEAASeAlwCX5T89HMAAmc0umcABAAEnmeYAl+VOwACZ6MAAme4AAIMeYAPAAPrRASk9HMAAmgsWwACZ/4DAAJn6wApnnYXjhnWD/QEAATTAAJoTA8AAmhPAAJrwAAAAAgICwACaHgAAAIXnYAOCewDAAJozAAAAgJZgA4TZAABgA8AA/aEBPgVJwACaQiGBwACaR8AKaGA+AT0cwACaWC6ZwQAAAACX5z89HMAAmnQumaYBAAEkwACanQEWwACalxbAAJqSFsAAmoqCwACagcAKaKWEc4KFgL2DgYC9iLcAl+g9HMAAmqYumcABAAEnguoAl+U9HMAAmr4umegBAAGDwACazsAKaLMAmAc9icAAmtzACmhgKgDAAP2MRsAAmvfAAJslwACbDAAAAJonYAOHvQAWwACbHIDAAJsXwApnnYXkhnY+BknAAJstIYHAAJsywApoYD4BPRzAAJtDLpnBAAAAAJfnPz0cwACbXy6CjgEAASeaKACX4j0cwACbdy6Z6AEAARbAAJuPgsAAm4fACmlohcqHvwCYB0nAAJuhIRzAAJu1FsAAm62CwACbpcAKaWgih8BIAQABKwDAAP3xPgI9HMAAm8gumcEAAAAAl+c9HMAAm94umegBAAEWwACb9oLAAJvuwAppaCKHwACYBz89HMAAnA4ugo4BAAEngyYAl+I9icAAnCDACmhgKkbAAJw5wACcccAAnEkAAACaKWADhNkAFsAAnGCAwACcW8AKZ52F5YZ3PgNJwACceSGBwACcfsAKaGA+AT0cwACcjy6ZwQAAAACX5z89HMAAnKsumegBAAGCwACcu8AKalwAmAc9icAAnNLACmhgKj0cwACc6y6ZwAEAASeG1wCX5QaYIjDAAJ0EwACdBMAAnZgAAIXqAAAAAQPAAJ0VwACdmAAAAAEBAcAAnSMAAACD82ADhoIAAGADwAD9oQE+Az0cwACdLy6Z6AIAAhbAAJ1EgMAAnT/ACmr7hcKGhGrAAJ1YYAPAAPyXg10AmAc9HMAAnWkumbgBAAEnmioAl+Y9HMAAnYAumcwBAAEWwACdj4DAAJ2KwApq+4KUhoUAl+8GmCMwwACdncAAnZ3AAJ5WAACF7gAAAAEDwACdrsAAnlYAAAABAQHAAJ28AAAAg/NgA4aOAABgA8AA/aEBPgM9HMAAncgumegCAAIWwACd3YDAAJ3YwAprm4XChpFqwACd8WADwAD8l4NdAJgHPRzAAJ4CLpm4AQABIxbAAJ4TgMAAng7ACmubhe2GlSeaKyeZuwFgA8AA/n4Al+Y9HMAAnj4umcwBAAEWwACeTYDAAJ5IwAprm4KUhpIAl+8GmCQwwACeW8AAnlvAAJ63AACF/QAAAAEDwACebcAAnrcAAAABAQHAAJ58AAAAg/NgA4bVAABgA8AA/aEBPgI9HMAAnogumcABAAEnhsYAl+U9HMAAnp4umaYBAAEWwACerYDAAJ6owApsWICWhtcAl+gGmCUwwACevMAAnrzAAJ79AACF/wAAAAEDwACezMAAnv0AAAABAQHAAJ7ZAAAAg/NgA4bgAABgA8AA/aEBPgE9HMAAnuUumcwBAAEWwACe9IDAAJ7vwApsyoKUhuIAl+8GmCYwwACfAsAAnwLAAJ9GAACGAQAAAAEDwACfFcAAn0YAAAABAQHAAJ8lAAAAg/NgA4brAABgA8AA/aEBPgE9HMAAnzEumaYBAAEnmiwAl+gGmCcwwACfS8AAn0vAAJ+EAACGAwAAAAEDwACfV8AAn4QAAAABAQHAAJ9gAAAAg/NgA4b0AABgA8AA/aEBPgE9HMAAn2wumaYBAAEnmi0Al+gGmCgwwACficAAn4nAAJ/0AACGBQAAAAEDwACfk8AAn/QAAAABAQHAAJ+aAAAAg/NgA4b9AABgA8AA/aEBPgM9HMAAn6YumaYBAAEnmi4Al+g9HMAAn74umb4AAAAAl+M9HMAAn9AumegBAAEWwACf5YDAAJ/gwAptzIJvhv8AmAcGmCkwwACf+cAAn/nAAKFDAACGBwAAAAEDwACgCcAAoUMAAAABAQHAAKAWAAAAg/NgA4cIAABgA8AA/aEBPgVJwACgIhbAAKArgMAAoCbACm5NhCKHCj4CPRzAAKA8LpmmAQABJ4QsAJfoPRzAAKBWLpm+AAAAAJfjP0nAAKBuIRzAAKCEFsAAoHeAwACgcsAKbk2F04cLSAEAASsAiO0+Az0cwACglS6ZwAEAASdjAJflPRzAAKCtLpnMAQABFsAAoLyAwACgt8AKbk2F04cLAJfvPRzAAKDRLpnAAQABJ4CXAJflPz0cwACg7S6ZwAEAASeZxgCX5T0cwAChAy6IaQIBYAOE2QIWwAChEoDAAKENwApuTYXPhwwWwAChHy6HCpfrAJf+PRzAAKEvLpnAAQABJ5nHAJflBpgqMMAAoUjAAKFIwACikAAAhgkAAAABA8AAoVfAAKKQAAAAAQEBwAChYwAAAIPzYAOHFQAAYAPAAP2hAT4FScAAoW8WwACheIDAAKFzwApvhoQihxc+Aj0cwAChiS6ZpgEAASeELACX6D0cwAChoy6ZvgAAAACX4z9JwAChuyEcwACh0RbAAKHEgMAAob/ACm+GhdOHGEgBAAErAIjtPgM9HMAAoeIumcABAAEnYwCX5T0cwACh+i6ZzAEAARbAAKIJgMAAogTACm+GhdOHGACX7z0cwACiHi6ZwAEAASeAlwCX5T89HMAAojoumcABAAEnmeYAl+U9HMAAolAuiGkCAWADhNkCFsAAol+AwACiWsAKb4aFz4cZFsAAomwuhwqX6wCX/j0cwACifC6ZwAEAASeG1wCX5QaYKzDAAKKVwACilcAAo+wAAIYLAAAAAQPAAKKkwACj7AAAAAEBAcAAorAAAACD82ADhyIAAGADwAD9oQE+BUnAAKK8FsAAosWAwACiwMAKcL+EIockPgI9HMAAotYumaYBAAEnhCwAl+g9HMAAovAumb4AAAAAl+M/ScAAowghHMAAoxkWwACjEYDAAKMMwApwv4XchyVIAQABKwCI7T4DPRzAAKMqLpnAAQABJ2MAl+U9HMAAo0IuiGkCAWADiOkCMcAAo0xgA4jpAhbAAKNSgMAAo03ACnC/hdyHJRbAAKNggMAAo1vACnC/hd2HJhbAAKNsLpnMl+8Al/49HMAAo34umcABAAEngJcAl+U/PRzAAKOaLpnAAQABJ5nmAJflPRzAAKOwLohpAgFgA4cwAhbAAKO/gMAAo7rACnC/g9WHJxbAAKPILocKl+sAl/49HMAAo9gumcABAAEnhtcAl+UGmCwwwACj8cAAo/HAAKRnAACGDQAAAAEDwACj/sAApGcAAAABAQHAAKQIAAAAg/NgA4cwAABgA8AA/aEBPgM9HMAApBQumegBAAEWwACkKYDAAKQkwApyIoPWhzIAmAc9HMAApDMumcEBAAEnguoAl+c9HMAApEgumegBAAEWwACkXYDAAKRYwApyIoCWhzMAmAcGmC0wwACkbMAApGzAAKTWAACGEAAAAAEDwACkgMAApNYAAAABAQHAAKSRAAAAg/NgA4c6AABgA8AA/aEBPgI9HMAApJ0umaYBAAEnmi8Al+g9HMAApLUumegBAAEWwACkyoDAAKTFwApytYXChzwAmAcGmC4wwACk28AApNvAAKVIAACGEwAAAAEDwACk8sAApUgAAAABAQHAAKUGAAAAg/NgA4dKAABgA8AA/aEBPgE9HMAApRIumdUCAAEWwAClJYDAAKUgwApzJ4Juh0wBmdYql/YGmC8wwAClTcAApU3AAKWoAACF8QAAAAEDwAClX8AApagAAAABAQHAAKVuAAAAg/NgA4aoAABgA8AA/aEBPgE9HMAApXoumaYBAAEkwAClowMng7McwACliC6aFwEAARbAAKWagMAApZXACnOKgJaGqgCYHCeDswCX6AaYMDDAAKWtwAClrcAApfIAAIXzAAAAAQPAAKW8wACl8gAAAAEBAcAApcgAAACD82ADhrEAAGADwAD9oQE+AT0cwACl1C6ZpgEAASTAAKXtARbAAKXmgMAApeHACnQEgJaGswCX6AaYMTDAAKX3wACl98AApkIAAIX2AAAAAQPAAKYJwACmQgAAAAEBAcAAphgAAACD82ADhroAAGADwAD9oQE+AT0cwACmJC6ZpgEAASTAAKY9ARbAAKY2gMAApjHACnRqgJaGvACX6AaYMjDAAKZHwACmR8AApo4AAIX4AAAAAQPAAKZXwACmjgAAAAEBAcAApmQAAACD82ADhsMAAGADwAD9oQE+AT0cwACmcC6ZpgEAASTAAKaJARbAAKaCgMAApn3ACnTQgJaGxQCX6AaYMzDAAKaTwACmk8AAptEAAIX6AAAAAQPAAKajwACm0QAAAAEBAcAAprAAAACD82ADhswAAGADwAD9oQE+AT0cwACmvC6ZpgEAASeEQQCX6AaYNDDAAKbWwACm1sAAp2cAAIYZAAAAAQPAAKbewACnZwAAAAEBAcAApuMAAACD82ADh2EAAGADwAD9oQE+BD0cwACm7y6ZpgEAASeaMACX6D0cwACnBS6X8gEAARbAAKcjgMAApx7ACnWHgnCHYwCYXz0cwACnMi6ZuAEAASeaMQCX5j0cwACnSS6Z6AEAARbAAKdegMAAp1nACnWHgm2HZACYBwaYNTDAAKdswACnbMAAqCwAAIYbAAAAAQPAAKeAwACoLAAAAAEBAcAAp5EAAACD82ADh20AAGADwAD9oQE+BD0cwACnnS6ZuAEAASeaMgCX5j0cwACnty6aMwIAARbAAKfQFsAAp8uAwACnxsAKdiyCbYdvhiWHoQGGsCmYST0cwACn9S6ZwAEAASeaNACX5T0cwACoDS6Z6AEAARbAAKgigMAAqB3ACnYsgJaHcACYBwaYNjDAAKgxwACoMcAAqNwAAIXAAAAAAQPAAKhDwACo3AAAAAEBAcAAqFIAAACD82ADhg8AAGADwAD9oQE+BD0cwACoXi6Z6AEAARbAAKhzgMAAqG7ACnbdgm+GEQCYBz0cwACohC6ZwAEAASdjAJflPRzAAKiaLohpAgFgA4jpAhbAAKipgMAAqKTACnbdhSyGEhbAAKi4LpnMl+8Al/49HMAAqMgumcABAAEngJcAl+UGmDcwwACo4cAAqOHAAKmFAACGHgAAAAEDwACo8cAAqYUAAAABAQHAAKj+AAAAg/NgA4d5AABgA8AA/aEBPgU9HMAAqQoumaYBAAEnhhwAl+g9HMAAqSgumcABAAEng9wAl+U9HMAAqT4umaYBAAEWwACpVBbAAKlNgMAAqUjACnePhK+He4C9gscAl+g9HMAAqV8umcABAAEngyYAl+U9F8AAqXUuglIawACpfZfDl8UGmDgwwACpisAAqYrAAKpJAACGIQAAAAEDwACpo8AAqkkAAAABAQHAAKm5AAAAg/NgA4eEAABgA8AA/aEBPgU9HMAAqcUumaYBAAEnhh8Al+g9HMAAqewumcABAAEng9wAl+U9HMAAqgIumaYBAAEWwACqGBbAAKoRgMAAqgzACnhAhK+HhoC9gscAl+g9HMAAqiMumcABAAEngyYAl+U9F8AAqjkuglIawACqQZfDl8UGmDkwwACqTsAAqk7AAKr+AACEuwAAAAEDwACqXsAAqv4AAAABAQHAAKprAAAAg/NgA4LcAABgA8AA/aEBPgU9HMAAqncul+EBAAEWwACqkIDAAKqLwAp48YRogt4AmAk9HMAAqqIumcMAAAAAl+o9HMAAqroumaYBAAEnmiUAl+g9HMAAqtEumaYBAAEWwACq4IDAAKrbwAp48YS6gt8Al+g9HMAAqu4umaEBAAEnltAAl/UGmDowwACrA8AAqwPAAK0kAACEuAAAAAEDwACrGcAArSQAAAABAQHAAKssAAAAg/NgA4LCAABgA8AA/aEBPgg9HMAAqzgumcMAAAAAl+o9HMAAq1AumaYBAAEjFsAAq1+AwACrWsAKeaWEtYLPJ4SvJ4SwAWADwAD+fgCX6E7AAKuIAAAAiKNbAEnAAKuXIRzAAKu/NQAAAAEAYAOCewEWwACroIDAAKubwAp5pYSpgsYjHMAAq7qCAMAKehNIAQABKwAAKxbAAKu6ggDACnoTg/OCfgFgA4JoSAEAASsAwAD98T4BPYnAAKvQwAp5/CTAAKv9ARbAAKvyFsAAq+SAwACr38AKeaWEs4LNhHyCjT4BPYnAAKwSwAp5/CTAAKxVATUAAAABAGADms0BNQAAAAEAYAOCewEWwACsJoDAAKwhwAp5pYSpgsYjHMAArECCAMAKeqxIAQABKwAAKxbAAKxAggDACnqshGSCfQFgA5rNIxzAAKxPggDACnqhSAEAASsAACsWwACsT4IAwAp6oYC9mtMBYAPAAP5+PRzAAKxhLpmmAQABJMAArHkDJ4OzgcAArG7ACnn8J4OzAJfoScAArIAWwACsiYDAAKyEwAp5pYS2gtA+AT0cwACsnS6ZpgEAASeaNQCX6D9JwACsviEcwACszBbAAKzHgMAArMLACnmlgL2Cx0gBAAErAMAA/o0+Aj0cwACs3S6ZpgEAASeZuwCX6D0cwACs9C6ZpgEAARbAAK0DgMAArP7ACnmlgL2CxwCX6D89HMAArRQumaEBAAEnltAAl/UGmDswwACtKcAArSnAAK12AACYDAAAAAEDwACtOsAArXYAAAABAQHAAK1GAAAAg/NgA4TZAABgA8AA/aEBPgE9HMAArVIumaYBAAEkwACtcQEWwACtZIDAAK1fwAp8AIWWwAD9+ACX6AaYPDDAAK17wACte8AArmAAAIWLAAAAAQPAAK2LwACuYAAAAAEBAcAArZgAAACD82ADhOwAAGADwAD9oQE+Aj0cwACtpC6Z/AEAARbAAK3AgMAArbvACnxognCE7gCYBUnAAK3PIRzAAK3lFsAArdiAwACt08AKfGiFioTvSAEAASsAiO0+BD0cwACt9i6ZwAEAASeZ5gCX5T0cwACuDi6HCgEAARbAAK4dgMAArhjACnxohYqE7wCX6z0cwACuMi6ZwAEAASeG1wCX5T0XwACuSi6CUhrAAK5Sl8OXxT8GmD0wwACuZcAArmXAAK7uAACFjQAAAAEDwACudcAAru4AAAABAQHAAK6CAAAAg/NgA4T4AABgA8AA/aEBPgM9HMAAro4umfwBAAEWwACuqoDAAK6lwAp9R4JwhPoAmAU9HMAArrkumbgBAAEngLwAl+Y9HMAArs8umegBAAEWwACu5IDAAK7fwAp9R4CWhPsAmAcGmD4wwACu88AArvjAAK/TAACaGAAAAAEDwACvDMAAr9MAAAACAgLAAK8SAAAAgL1gA4i0AMAAryIAAACCSWADgnsAAFwBPgFJwACvMCEcwACvO4HAAK80wAp96EgBAAErAMAA/fE+Az0cwACvTC6ZwAEAASeZ5gCX5T0cwACvZC6ZuQEAAYHAAK+GwAp96ACYAT0cwACvlS6ZwAEAASeG1wCX5T4BPRzAAK+6LocIAQABgMAAr8TACn3aAJf0Bpg/MMAAr9jAAK/dwACwZQAAmiAAAAABA8AAr+zAALBlAAAAAQEBwACv9gAAAIKUYAOI6QAAXAE+AUnAALACIRzAALALgMAAsAbACn6YSAEAASsAiO0+Az0cwACwHC6ZwAEAASeZ5gCX5T0cwACwNC6ZzAEAAYDAALA+wAp+mACX7z0cwACwSy6ZwAEAASeG1wCX5T8GmEAwwACwasAAsGrAALEjAACFmAAAAAEDwACwesAAsSMAAAABAQHAALCHAAAAg/NgA4UEAABgA8AA/aEBPgM9HMAAsJMumegCAAIWwACwqIDAALCjwAp/LYWPhQZqwACwvWADwAD8l8AAcYoAmAc9HMAAsMsumcABAAEngWoAl+U9HMAAsOEumhgCAAIWwACw+4DAALD2wAp/LYC9hQcWwACxBoDAALEBwAp/LYWQhQgAmD4GmEEwwACxKMAAsSjAALIYAACFmgAAAAEDwACxOMAAshgAAAABAQHAALFFAAAAg/NgA4UWAABgA8AA/aEBPgU9HMAAsVEumegCAAIWwACxZoDAALFhwAp/4YWPhRhqwACxe2ADwAD8l8AAcYoAmAc9HMAAsYkumcABAAEngWoAl+U9HMAAsZ8umhgCAAIWwACxuYDAALG0wAp/4YC9hRkWwACxxIDAALG/wAp/4YWQhRsAmD49HMAAseMumbgBAAEngLwAl+Y9HMAAsfkumegBAAEWwACyDoDAALIJwAp/4YCWhRoAmAcGmEIwwACyHcAAsh3AALLAAACFpgAAAAEDwACyMsAAssAAAAABAQHAALJEAAAAg/NgA4VfAABgA8AA/aEBPgM9HMAAslAumaYBAAEnmhoAl+g9HMAAsmgumcABAAEngWoAl+U9HMAAsn4umhgCAAIWwACymIDAALKTwAqAyIC9hWEWwACyo4DAALKewAqAyIWQhWIAmD4GmEMwwACyxcAAssXAALOfAACFqAAAAAEDwACy2sAAs58AAAABAQHAALLsAAAAg/NgA4VwAABgA8AA/aEBPgU9HMAAsvgumaYBAAEnmhoAl+g9HMAAsxAumcABAAEngWoAl+U9HMAAsyYumhgCAAIWwACzQIDAALM7wAqBXoC9hXIWwACzS4DAALNGwAqBXoWQhXQAmD49HMAAs2oumbgBAAEngLwAl+Y9HMAAs4AumegBAAEWwACzlYDAALOQwAqBXoCWhXMAmAcGmEQwwACzpMAAs6TAALR6AACFnAAAAAEDwACzusAAtHoAAAABAQHAALPNAAAAg/NgA4UpAABgA8AA/aEBPgQ9HMAAs9kumegCAAIWwACz7oDAALPpwAqCJ4WPhStqwAC0A2ADwAD8l8AAcYoAmAc9HMAAtBEumcABAAEnmhkAl+U9HMAAtCkumbkBAAEWwAC0UIDAALRLwAqCJ4UthSwAmAE9HMAAtGYumcABAAEnhtcAl+UGmEUwwAC0f8AAtH/AALWMAACFngAAAAEDwAC0lcAAtYwAAAABAQHAALSoAAAAg/NgA4U6AABgA8AA/aEBPgY9HMAAtLQumegCAAIWwAC0yYDAALTEwAqC24WPhTxqwAC03mADwAD8l8AAcYoAmAc9HMAAtOwumcABAAEnmhkAl+U9HMAAtQQumbkBAAEWwAC1K4DAALUmwAqC24UthT0AmAE9HMAAtUEumcABAAEnhtcAl+U9HMAAtVcumbgBAAEngLwAl+Y9HMAAtW0umegBAAEWwAC1goDAALV9wAqC24CWhT4AmAcGmEYwwAC1kcAAtZHAALXxAACFqgAAAAEDwAC1n8AAtfEAAAABAQHAALWqAAAAg/NgA4WCAABgA8AA/aEBPgE9HMAAtbYumbkBAAEWwAC13YDAALXYwAqDwoUthYQAmAEGmEcwwAC19sAAtfbAALaNAACFrAAAAAEDwAC2BMAAto0AAAABAQHAALYPAAAAg/NgA4WSAABgA8AA/aEBPgM9HMAAthsumbkBAAEWwAC2QoDAALY9wAqEIoUthZQAmAE9HMAAtlgumbgBAAEngLwAl+Y9HMAAtm4umegBAAEWwAC2g4DAALZ+wAqEIoCWhZUAmAcGmEgwwAC2ksAAtpLAALcZAACGIwAAAAEDwAC2qsAAtxkAAAABAQHAALa/AAAAg/NgA4eVAABgA8AA/aEBPgM9HMAAtssumcMAAAAAl+o9HMAAtuMumegBAAEWwAC2+IDAALbzwAqEtYJvh5cAmAc9HMAAtwkumaEBAAEnltAAl/UGmEkwwAC3HsAAtyPAALiAAACaMwAAAAEDwAC3McAAuIAAAAACAQHAALdCAAAAhiVdA8AA/TsBYAOHjwABwAC3VAAAAIawYAPAAPrRAWrAALdjYAPAAPrRAFwBPgdJwAC3cRbAALeAgMAAt3XACoU2gVXAAP0dPgI9I4HAALeRwAqFTBzAALegLpnAAQABJ5nlAJflHMAAt7QumaEBAAEnmeUAl/UBXErAALfJAD89HMAAt9sumaEBAAEnmeYAl/U9F8AAt+8ug+IcwAC37RbAALfvLoPil71kAQABlADAAP29l709HMAAuAuAwAC4AMAKhTaD/QEAARbAALgTLocKl+sAwAD9CT0XwAC4JS6D4hzAALgjFsAAuCUug+KXvYGNAQABlADAAP2+l709HMAAuDYumcMAAAAAl+o9I4HAALhOwAqFTBzAALhdLpnAAQABJ4bXAJflHMAAuHAumaEBAAEnhtcAl/UBXAaYSjDAALiFwAC4hcAAuN0AAIYnAAAAAQPAALiPwAC43QAAAAEBAcAAuJYAAACD82ADh58AAGADwAD9oQE+Aj0cwAC4oi6ZwwAAAACX6j0cwAC4ui6aMwEAARbAALjOgMAAuMnACoaghiWHoQCYSQaYSzDAALjiwAC44sAAuWEAAIYqAAAAAQPAALjywAC5YQAAAAEBAcAAuP8AAACD82ADh6oAAGADwAD9oQE+Az0cwAC5Cy6ZwwAAAACX6j0cwAC5Iy6ZuAEAASeaNgCX5j0cwAC5Pi6aMwEAARbAALlSgMAAuU3ACocPhiWHrACYSQaYTDDAALlmwAC5ZsAAub0AAIYsAAAAAQPAALl5wAC5vQAAAAEBAcAAuYkAAACD82ADh7UAAGADwAD9oQE+Aj0cwAC5lS6ZwwAAAACX6j0cwAC5rS6ZoQEAASeW0ACX9QaYTTDAALnCwAC5wsAAu1MAAIYwAAAAAQPAALnWwAC7UwAAAAIBAcAAuecAAACD82ADh70AAcAAufMAAACGsGADwAD60QFqwAC6AmADwAD60QBgA8AA/aEBPgZJwAC6ECGBwAC6FcAKh/8+AT0cwAC6Ky6ZwwAAAACX6j89HMAAukkumaYBAAEnmjYAl+g9HMAAumIumcABAAEng9wAl+U9HMAAungumegBAAEWwAC6jYDAALqIwAqH8IXKh78AmAdJwAC6nSEcwAC6rhbAALqmgMAAuqHACofwIofASAEAASsAwAD98T4CPRzAALq/LpnBAAAAAJfnPRzAALrTLpnoAQABFsAAuuiAwAC648AKh/Aih8AAmAc/ScAAuvwhgcAAuwHACof/PgE9HMAAuxcumaEBAAEnmjcAl/U+AT0cwAC7OS6ZwAEAASeDJgCX5QaYTjDAALtYwAC7WMAAvAcAAIYyAAAAAQPAALttwAC8BwAAAAEBAcAAu38AAACD82ADh8oAAGADwAD9oQE+BD0cwAC7iy6ZwwAAAACX6j0cwAC7oy6ZpgEAASbAALu8ARzAALu8FsAAu60umX+XuJlwAQABgMAAu9HAColAAJeoYAPAAP5+AJfoPRzAALvdLpmhAQABJ4LqAJf1PRzAALvvLocKAQABFsAAu/6AwAC7+cAKiUCCbYfMAJfrBphPMMAAvAzAALwMwAC8vAAAhjQAAAABA8AAvB/AALy8AAAAAQEBwAC8LwAAAIPzYAOH1AAAYAPAAP2hAT4EPRzAALw7LpnDAAAAAJfqPRzAALxTLpmmAQABJ5o4AJfoPRzAALxrLpmmAQABJsAAvIQBHMAAvIQWwAC8dS6Zf5e4mXABAAEWwAC8noDAALyZwAqJ/IJJh9YAl6hgA8AA/n4Al+g9HMAAvKwumaEBAAEnltAAl/UGmFAwwAC8wcAAvMHAAL2LAACGNgAAAAEDwAC81MAAvYsAAAABAQHAALzkAAAAg/NgA4feAABgA8AA/aEBPgY9HMAAvPAumcMAAAAAl+o9HMAAvQgumbgBAAEnmjkAl+Y9HMAAvSIumcABAAEng9wAl+U9HMAAvTgumegBAAEWwAC9TYDAAL1IwAqKsoXKh+AAmAc9HMAAvV0umcABAAEngyYAl+U9HMAAvXMumekBAAEWwAC9goDAAL19wAqKsoJth+EAl/oGmFEwwAC9kMAAvZDAAL59AACGOAAAAAEDwAC9oMAAvn0AAAABAQHAAL2tAAAAg/NgA4fpAABgA8AA/aEBPgg9HMAAvbkumcMAAAAAl+o9HMAAvdEumaYBAAEnmjoAl+g9HMAAveYumekBAAEWwAC99YDAAL3wwAqLeIJth+sAl/o9HMAAvgAumcMAAAAAl+o9HMAAvhgumbgBAAEnmjkAl+Y9HMAAvjIumcABAAEng9wAl+U9HMAAvkgumegBAAEWwAC+XYDAAL5YwAqLeIXKh+wAmAc9HMAAvm0umaEBAAEngyYAl/UGmFIwwAC+gsAAvoLAAMABAACGPAAAAAEDwAC+k8AAwAEAAAABAQHAAL6hAAAAg/NgA4f0AABgA8AA/aEBPgo9HMAAvq0umcMAAAAAl+o9HMAAvsUumbgBAAEnmjsAl+Y9HMAAvt0umcABAAEng9wAl+U9HMAAvvMuiGkCAWADiH4CFsAAvwKAwAC+/cAKjF+GOof2FsAAvw0ul/KYXwCX/j0cwAC/LC6ZwQEAASeW0ACX50nAAL9BIRzAAL9UFsAAv0qAwAC/RcAKjF+Fyof3SAEAASsAwAD98T4BPRzAAL9lLpnoAQABFsAAv3qAwAC/dcAKjF+Fyof3AJgHPz0cwAC/kC6ZwQEAASeW0ACX5z0cwAC/pS6IaQIBYAOE2QIWwAC/tIDAAL+vwAqMX4Y7h/gWwAC/vS6Z6JgHAJf+PRzAAL/TLpnAAQABJ4MmAJflPRzAAL/pLpnpAQABFsAAv/iAwAC/88AKjF+CbYf5AJf6BphTMMAAwAbAAMAGwADBYAAAhkAAAAABA8AAwBnAAMFgAAAAAQEBwADAKQAAAIPzYAOIAQAAYAPAAP2hAT4JPRzAAMA1LpnDAAAAAJfqScAAwE0WwADAVoDAAMBRwAqN0YY/iAc+AT0cwADAZy6ZuAEAASeaLwCX5j89HMAAwIcumbgBAAEnmjsAl+Y9HMAAwJ8umcABAAEng9wAl+U9HMAAwLUul/ICAAEWwADA04DAAMDOwAqN0YJwiAQBmjwpmF89HMAAwPcumbgBAAEnmjEAl+Y9HMAAwQ4umegBAAEWwADBI4DAAMEewAqN0YPRiAUAmAc9HMAAwTIumcABAAEngyYAl+U9HMAAwUgumekBAAEWwADBV4DAAMFSwAqN0YJtiAYAl/oGmFQwwADBZcAAwWXAAMKIAACGQwAAAAEDwADBecAAwogAAAABAQHAAMGKAAAAg/NgA4gPAABgA8AA/aEBPgo9HMAAwZYumcMAAAAAl+o9HMAAwa4umaYBAAEnmj0Al+g9HMAAwccumcABAAEng9wAl+U9HMAAwd0umegBAAEWwADB8oDAAMHtwAqO+YJviBEAmAc9HMAAwgMumaEBAAEnmj4Al/U9F8AAwhkug+IcwADCFxbAAMIZLoPil71kAQABlADAAP29l709HMAAwjUWwADCL4DAAMIqwAqO+YZCiBKD/QEAARbAAMI9LocKl+sAwAD9CT0XwADCTy6D4hzAAMJNFsAAwk8ug+KXvYGNAQABlADAAP2+l709HMAAwmAumcMAAAAAl+o9HMAAwngumaEBAAEnhtcAl/UGmFUwwADCjcAAwo3AAMRzAACGSAAAAAEDwADCnMAAxHMAAAABAQHAAMKoAAAAg/NgA4gaAABgA8AA/aEBPglOwADCu8AAwsEAAJkuYAPAAP5+ASbAAMK7ARzAAMLSFsAAwsMumX+XuJlvAQABgMAAwuHACpA0AJenYAPAAP5+PRzAAMLsLpnDAAAAAJfqPRzAAMMELpmmAQABgcAAww7ACpBNAJfoPRzAAMMaLpmhAQABJ4LqAJf1RsAAwyzAAMNVwADDNQAAAIJvYAOE2QAWwADDSIDAAMNDwAqQNIXPiBw+BD0cwADDXS6ZwwAAAACX6j0cwADDdy6ZpgEAASeaPwCX6D0cwADDkC6Z6AEAAYLAAMOgwAqQzgCYBz0cwADDsy6ZoQEAASeC6gCX9UnAAMPLFsAAw9SAwADDz8AKkDSGRogfPgM9HMAAw+cumcMAAAAAl+o9HMAAxAEumaYBAAEnmkAAl+g9HMAAxB0umaEBAAEnguoAl/U/PRfAAMQ3LoPiHMAAxDUWwADENy6D4pe9ZAEAAZQAwAD9vZe9PRzAAMRILocKAQABFsAAxFeAwADEUsAKkDSCbYgeAJfrPRfAAMRkLoPiHMAAxGIWwADEZC6D4pe9gY0BAAGUAMAA/b6XvQaYVjDAAMR4wADEeMAAxTcAAIZKAAAAAQPAAMSUwADFNwAAAAEBAcAAxK0AAACD82ADiCgAAGADwAD9oQE+BD0cwADEuS6ZwwAAAACX6j0cwADE0S6ZpgEAASeaQQCX6D0cwADE7C6ZpgEAASbAAMUFARzAAMUFFsAAxPYumX+XuJlvAQABFsAAxRmAwADFFMAKkhmCSYgqAJenYAPAAP5+AJfoPRzAAMUnLpmhAQABJ5bQAJf1BphXMMAAxTzAAMU8wADGdwAAhkwAAAABA8AAxUzAAMZ3AAAAAQEBwADFWQAAAIPzYAOIMgAAYAPAAP2hAT4HPRzAAMVlLpnDAAAAAJfqPRzAAMV9LpmmAQABJ5pCAJfoPRzAAMWSLpnAAQABJ4PcAJflPRzAAMWoLpnoAQABFsAAxb2AwADFuMAKks+Fyog0AJgHPRzAAMXNLpnAAQABJ4MmAJflPRzAAMXjLpnpAQABFsAAxfKAwADF7cAKks+Br4g1AJf6ScAAxf0hHMAAxhAWwADGBoDAAMYBwAqSz4XLiDZIAQABKwDAAP3xPgM9HMAAxiEumcMAAAAAl+o9HMAAxjsumaYBAAEnmkMAl+g9HMAAxlQumekBAAEWwADGY4DAAMZewAqSz4XLiDYAl/o/BphYMMAAxnzAAMZ8wADHUwAAhk4AAAABA8AAxpDAAMdTAAAAAQEBwADGoQAAAIPzYAOIPgAAYAPAAP2hAT4EPRzAAMatLpnDAAAAAJfqPRzAAMbFLpmmAQABJ5pEAJfoScAAxt4hHMAAxvIWwADG54DAAMbiwAqUAYJviEBIAQABKwDAAP3xPgI9HMAAxwMumb4AAAAAl+M9HMAAxxcumegBAAEWwADHLIDAAMcnwAqUAYJviEAAmAc/PRzAAMdDLpmhAQABJ5bQAJf1BphZMMAAx1jAAMdYwADH5gAAhlEAAAABA8AAx2XAAMfmAAAAAQEBwADHbwAAAIPzYAOISAAAYAPAAP2hAT4EPRzAAMd7LpnDAAAAAJfqPRzAAMeTLpmmAQABJ5pFAJfoPRzAAMepLpnpAQABFsAAx7iAwADHs8AKlM2CbYhKAJf6PRzAAMfQFsAAx8iAwADHw8AKlM2GUIhLg/0BAAEWwADH2C6HCpfrAMAA/QkGmFowwADH68AAx+vAAMngAACGVQAAAAEDwADH9cAAyeAAAAABAQHAAMf8AAAAg/NgA4hUAABgA8AA/aEBPgg9HMAAyAgumcMAAAAAl+pJwADIICEcwADILxbAAMgpgMAAyCTACpV6hlOIVkgBAAErAIjtPgM9HMAAyEAumaYBAAEnmhQAl+g9HMAAyFcumcwBAAEWwADIZoDAAMhhwAqVeoZTiFYAl+89HMAAyHQumb4AAAAAl+M/PRzAAMiMLpmmAQABJ5pGAJfoPRzAAMikLpnAAQABJ4PcAJflScAAyLohHMAAyM0WwADIw4DAAMi+wAqVeoHtiFdIAQABKwDAAP3xPgE9HMAAyN4ul/IBAAEWwADI/IDAAMj3wAqVeoHtiFcAmF8+AT0cwADJGy6ZpgEAASeaRwCX6EnAAMlEIRzAAMlYFsAAyU2AwADJSMAKlXqGVIhYSAEAASsAwAD98T4CPRzAAMlpLpnBAAAAAJfnPRzAAMl9LpfyAQABFsAAyZuAwADJlsAKlXqGVIhYAJhfPz0cwADJsi6ZwAEAASeDJgCX5T0cwADJyC6Z6QEAARbAAMnXgMAAydLACpV6gm2IWQCX+gaYWzDAAMnlwADJ5cAAyqMAAIZYAAAAAQPAAMn0wADKowAAAAEBAcAAygAAAACD82ADiGAAAGADwAD9oQE+Bj0cwADKDC6ZwwAAAACX6j0cwADKJC6ZpgEAASeaRQCX6D0cwADKOi6Z6QEAARbAAMpJgMAAykTACpdBgm2IYgCX+j0cwADKVC6ZwwAAAACX6j0cwADKbC6ZpgEAASeaSACX6D0cwADKhi6Z6QEAARbAAMqVgMAAypDACpdBhleIYwCX+gaYXDDAAMqowADKqMAAy8UAAIZeAAAAAQPAAMq7wADLxQAAAAEBAcAAyssAAACD82ADiGsAAGADwAD9oQE+BD0cwADK1y6ZwwAAAACX6knAAMrvFsAAyviAwADK88AKmASGXIhyPgE9HMAAyw0umaYBAAEnmkkAl+hJwADLLRbAAMs2gMAAyzHACpgEhl2Icz4BPRzAAMtILpmmAQABJ5pKAJfoPgE9HMAAy3EumaYBAAEnmksAl+g9HMAAy48umegBAAEWwADLpIDAAMufwAqYBIJviG0AmAc9HMAAy7UumaEBAAEnltAAl/UGmF0wwADLysAAy8rAAMxkAACGZwAAAAEDwADL4sAAzGQAAAABAQHAAMv3AAAAg/NgA4h+AABgA8AA/aEBPgM9HMAAzAMumcMAAAAAl+o9HMAAzBsul/ICAAGAwADMNMAKmO8BmjwpmF89HMAAzFQumaEBAAEnltAAl/UGmF4wwADMacAAzGnAAM3NAACGaQAAAAEDwADMgcAAzc0AAAABAQHAAMyWAAAAg/NgA4ipAABgA8AA/aEBPgQ9HMAAzKIul+EBAAEWwADMxBbAAMy7gMAAzLbACplqgnCIq4RoiIEAmAk9HMAAzNYumcMAAAAAl+o9HMAAzO4umaYBAAEngm4Al+hJwADNCSEcwADNGxbAAM0SgMAAzQ3ACplqgm6IrEgBAAErAMAA/fE+AT0cwADNLC6Z1QIAARbAAM0/gMAAzTrACplqgm6IrAGAvRzAAM1PLpmXAQABFsAAzWSAwADNX8AKmWqCcIirAJfVl/Y+Aj0cwADNgy6ZpgEAARzAAM2NLpmXAQABFsAAzaKAwADNncAKmWqCcIirAJfVAJfoPRzAAM20LpmhAQABJ5pMAJf1BphfMMAAzdLAAM3XwADRbQAAl/IAAAABA8AAze/AANFtAAAAAgEBwADOBAAAAIPzYAOIfgABwADOFgAAAJo8YAPAAPrRAWrAAM4lYAPAAPrRAFwBPg1JwADOMxbAAM43LoRNl8A9HMAAzkQumaYBAAEkwADOZAMnmcYWwADOV4DAAM5SwAqao4RYglknmccAl+g/ScAAzmsWwADOby6ETpfBPRzAAM59Lpm6AQABgMAAzovACpqjAJftPz0cwADOli6X4QIAARbAAM6vgMAAzqrACpqjhGiIgQGaACqYCT0cwADO1y6Z0gIAAhbAAM7qgMAAzuXACpqjhR+IlSeaAQCX8z0cwADO/y6Z0gIAAhbAAM8SgMAAzw3ACpqjhWyIlieaTQCX8z0cwADPLy6Z0gIAAhbAAM9CgMAAzz3ACpqjhCWIkieELwCX8z0cwADPYS6Z0gIAAhbAAM90gMAAz2/ACpqjhSCIlCeaAgCX8z0cwADPqy6Z0gIAAhbAAM++gMAAz7nACpqjhCCIkCeEKgCX8z0cwADP1S6Z0gIAAhbAAM/ogMAAz+PACpqjhCKIkSeELACX80nAAM//IRzAANANFsAA0AiAwADQA8AKmqOClIiESAEAASsAiO0+AT0cwADQHi6ZywIAAhbAANA2gMAA0DHACpqjgpSIhDUAAAABAGADl68BFsAA0DwumYCXuiMcwADQR4IAwAqceUgBAAErAAArHMAA0EeCAMAKnHmZegIAAi6AwADQXsAKmqMAl7EBYAPAAP5+AJfuP0nAANBwIiIigcAA0HTACpqyACEWwADQi4DAANCGwAqao4QgiJAAIRbAANCcgMAA0JfACpqjhCKIkQAcwADQsRbAANCsgMAA0KfACpqjgpSIhEgBAAErAIjtPgE9HMAA0MIumaYBAAEnhCsAl+g/PRzAANDeLpmmAQABHMAA0OgumZcBAAGAwADQ+MAKmqMAl9UAl+hJwADRBCEcwADRGRbAANENgMAA0QjACpqjhROIhkgBAAErAMAA/fE+Aj0cwADRKi6ZuAEAASeAvACX5j0cwADRQi6Z6AEAARbAANFXgMAA0VLACpqjhROIhgCYBz8GmGAwwADRcsAA0XLAANK9AACFsAAAAAEDwADRgMAA0r0AAAABAQHAANGLAAAAg/NgA4WjAABgA8AA/aEBPgVJwADRlxbAANGmFsAA0aCAwADRm8AKneGFfYWlg7fAAP0ePgM9HMAA0boumcABAAEnYwCX5T0cwADR0i6IaQIBYAOI6QIWwADR4YDAANHcwAqd4YV9haUWwADR6C6ZzJfvAJf+PRzAANH6LpnAAQABJ4CXAJflPz0cwADSFi6ZwAEAASeD3ACX5U7AANIwwADSOAAAmk5dA8AA/PkBYAOCUgEcwADScDHAANJSXQPAAP07AWADglICFsAA0liAwADSU8AKneGFo4WmFsAA0mmAwADSZMAKneGFbYWnhJUBAWADglIBNMAA0ncDwADSd8AA0n8AAAABAQHAANJ4AAAAg4BdA8AA/TsBYAOCUgAAXQPAAP07AWADglIBSsAA0n4BgcAA0n7ACp7yAMAA/Qc9HMAA0oYuiGkCAWADglICgcAA0pDACp6DFsAA0pkuhwqX6wCX/j0cwADSqS6ZwAEAASeDJgCX5QaYYTDAANLCwADSwsAA00EAAIWyAAAAAQPAANLWwADTQQAAAAEBAcAA0ucAAACD82ADhbEAAGADwAD9oQE+Az0cwADS8y6ZpgEAARbAANMCgMAA0v3ACp+HgL2FswCX6D0cwADTDS6ZwQEAASeC6gCX5z0cwADTIi6Z6AEAARbAANM3gMAA0zLACp+HgJaFtACYBwaYYjDAANNGwADTRsAA06cAAJgUAAAAAQPAANNWwADTpwAAAAEBAcAA02EAAACD82ADh48AAGADwAD9oQE+Aj0cwADTbS6ZwwAAAACX6j0cwADThS6ZoQEAASTAANOiARbAANOVgMAA05DACqAahZbAAP34AJf1BphjMMAA06zAANOswADUBwAAhVUAAAABA8AA08PAANQHAAAAAQEBwADT1wAAAIPzYAOEaAAAYAPAAP2hAT4BPRzAANPjLpmmAQABJ5pPAJfoBphkMMAA1AzAANQMwADUsAAAhVgAAAABA8AA1CHAANSwAAAAAQEBwADUMwAAAIPzYAOEbwAAYAPAAP2hAT4DPRzAANQ/Lpm5AQABFsAA1GaAwADUYcAKoOKFV4RxAJgBPRzAANR7Lpm4AQABJ4C8AJfmPRzAANSRLpnoAQABFsAA1KaAwADUocAKoOKAloRyAJgHBphlMMAA1LXAANS1wADVWgAAhVoAAAABA8AA1MrAANVaAAAAAQEBwADU3AAAAIPzYAOEfgAAYAPAAP2hAT4DPRzAANToLpmmAQABJ5oaAJfoPRzAANUALpm5AQABFsAA1SeAwADVIsAKoXWFLYSAAJgBPRzAANU9LocKAQABFsAA1UyAwADVR8AKoXVbhIEAl+sGmGYwwADVX8AA1V/AANYPAACFXAAAAAEDwADVesAA1g8AAAABAQHAANWSAAAAg/NgA4SNAABgA8AA/aEBPgM9HMAA1Z4umaYBAAEnmiwAl+g9HMAA1bUumbkBAAEWwADV3IDAANXXwAqiB4UthI8AmAE9HMAA1fIuhwoBAAEWwADWAYDAANX8wAqiB1uEkACX6waYZzDAANYUwADWFMAA1nIAAIVeAAAAAQPAANYpwADWcgAAAAEBAcAA1jsAAACD82ADhJwAAGADwAD9oQE+AT0cwADWRy6X8gEAARbAANZlgMAA1mDACqKZgnCEngCYXwaYaDDAANZ3wADWd8AA1ugAAIVhAAAAAQPAANaNwADW6AAAAAEBAcAA1qAAAACD82ADhKUAAGADwAD9oQE+AT0cwADWrC6GMAIAARbAANbGgMAA1sHACqL5hWCEpwGGsCmYTQaYaTDAANbtwADW7cAA11QAAJgOAAAAAQPAANb/wADXVAAAAAEBAcAA1wwAAACD82ADhGEAAGADwAD9oQE+Aj0cwADXGC6ZwwAAAACX6j0cwADXMC6ZoQEAASTAANdPAieDWxbAANdCgMAA1z3ACqNchZbAAP34AJf1BphqMMAA11nAANdZwADZFgAAmfAAAAABA8AA12nAANkWAAAAAQEBwADXdgAAAIZ9YAOI2wAAWwE+AUFHwADXiYDAANeRwAqj1gMBwADXt2rAANe3YAOI24WcAD4DPRzAANfHLpnAAQABJ4ONAJflPRfAANfhLoJSGsAA1+mXw5fFQsAA2CUAAcAA2ENqwADYQ2ADiNuFbwA+Aj0cwADYVS6ZwAEAASeA9ACX5ULAANidAALAANi7asAA2LtgA4jbhY3AANjbasAA2NtgA4jbhX4APgFCwADZBwAGmGswwADZG8AA2RvAANlhAACGgQAAAAEDwADZK8AA2WEAAAABAQHAANk4AAAAg/NgA4j0AABgA8AA/aEBPgE9HMAA2UQumaYBAAEnmlAAl+gGmGwwwADZZsAA2WbAANmnAACGhAAAAAEDwADZdsAA2acAAAABAQHAANmDAAAAg/NgA4kAAABgA8AA/aEBPgE9HMAA2Y8umaYBAAEnmlEAl+gGmG0wwADZrMAA2azAANnkAACGhgAAAAEDwADZucAA2eQAAAABAQHAANnDAAAAg/NgA4kMAABgA8AA/aEBPgE9HMAA2c8umaYBAAEnmlIAl+gGmG4wwADZ6cAA2enAANtDAACGjAAAAAEDwADZ+8AA20MAAAABAQHAANoKAAAAg/NgA4kkAABgA8AA/aEBPgM9HMAA2hYumdABAAEWwADaPIDAANo3wAqlo4aKiSYAl/9JwADaTBbAANpjFsAA2lWAwADaUMAKpaOFLIkog7fAAP0ePgQ9HMAA2ncumcABAAEnYwCX5T0cwADajy6IaQIBYAOI6QIWwADanoDAANqZwAqlo4UsiSgWwADarS6ZzJfvAJf+PRzAANq/LpnAAQABJ4CXAJflPRfAANrXLoJSGsAA2t+Xw5fFPz0cwADbHS6Z8AEAARbAANszgMAA2y7ACqWjhn2JJwCYagaYbzDAANtIwADbSMAA244AAIaSAAAAAQPAANtZwADbjgAAAAEBAcAA22cAAACD82ADiTYAAGADwAD9oQE+AT0cwADbcy6Z6gEAAYDAANuFwAqmrQCX+QaYcDDAANuTwADbk8AA3EIAAIagAAAAAQPAANuhwADcQgAAAAEBAcAA26wAAACD82ADiWIAAGADwAD9oQE+BT0cwADbuC6Z0gIAAhbAANvLgMAA28bACqcEhWyJZyeaTQCX8z0cwADb6C6ZpgEAARbAANv3gMAA2/LACqcEgL2JZQCX6D0cwADcAi6ZwAEAASeC6gCX5T0cwADcGC6ZvgAAAACX4z0cwADcKi6ZzAEAARbAANw5gMAA3DTACqcEgpSJZgCX7waYcTDAANxHwADcR8AA3WgAAIakAAAAAQPAANxdwADdaAAAAAEBAcAA3HAAAACD82ADiXEAAGADwAD9oQE+Az0cwADcfC6Z/QEAARbAANydgMAA3JjACqfKgO2JdQCYBj0cwADcrS6Z8AEAARbAANzDgMAA3L7ACqfKhn2JdACYaknAANzVIRzAANzsFsAA3N6AwADc2cAKp8qGo4l2SAEAASsAiO0+BD0cwADc/S6ZvgAAAACX4z0cwADdES6ZpgEAASeaEACX6D0cwADdLS6ZvgAAAACX4z0cwADdQS6ZzAEAARbAAN1QgMAA3UvACqfKhqOJdgCX7z8GmHIwwADdbcAA3W3AAN7qAACGqgAAAAEDwADdf8AA3uoAAAABAQHAAN2OAAAAg/NgA4mCAABgA8AA/aEBPgY9HMAA3ZoumdICAAIWwADdrYDAAN2owAqoxIUgiYsnmgIAl/M9HMAA3eQul+ECAAEWwADd/YDAAN34wAqoxIRoiYUBmgAqmAk9HMAA3iUumaYBAAEcwADeLy6ZmgEAAYDAAN5EwAqoxACX1wCX6D0cwADeUC6ZuAEAASeaEACX5j0cwADebC6ZzAEAARbAAN57gMAA3nbACqjEhX+JhwCX70nAAN6HIRzAAN6cFsAA3pCAwADei8AKqMSGqYmISAEAASsAiO0+Aj0cwADerS6ZuAEAASeAvACX5j0cwADexS6ZzAEAARbAAN7UgMAA3s/ACqjEhqmJiACX7z8GmHMwwADe78AA3vTAAN9QAACXiAAAAAEDwADfCsAA31AAAAABAQHAAN8UAAAAg/NgA4mmAABcAT4BPRzAAN8gLpmmAQABJsAA3zkBHMAA3zkWwADfKi6Zf5e4mXEBAAGAwADfRsAKqf8Al6lgA8AA/n4Al+gGmHQwwADfVcAA31XAAN+1AACGFgAAAAEDwADfbMAA37UAAAABAQHAAN+AAAAAg/NgA4dVAABgA8AA/aEBPgE9HMAA34wul4gBAAEWwADfqIDAAN+jwAqqdIYVh1cAmHMGmHUwwADfusAA37rAAOBDAACYBAAAAAEDwADfycAA4EMAAAABAQHAAN/TAAAAg/NgA4mmAABgA8AA/aEBPgQ9HMAA398umcMAAAAAl+o9HMAA3/cul4gBAAGAwADgDsAKqtQAmHM9HMAA4BkumbgBAAEngLwAl+Y9HMAA4C8umaEBAAEkwADgPgGAwADgOcAKqtQAl/UGmHYwwADgSMAA4EjAAOFXAACGzgAAAAEDwADgWcAA4VcAAAABAQHAAOBnAAAAg/NgA4oTAABgA8AA/aEBPgg9HMAA4HMumcMAAAAAl+o9HMAA4Isul4gBAAGAwADgosAKq2oAmHM9HMAA4K0umbgBAAEngLwAl+Y9HMAA4MMumcABAAEnYwCX5T0cwADg2S6ZzAEAARbAAODogMAA4OPACqtqhdOKFQCX7z0cwADg+y6ZwAEAASeaUwCX5T0cwADhEi6IaQIBYAOJpgIWwADhIYDAAOEcwAqraoPVihYWwADhKi6XiJhzAJf+PRzAAOFHLpmhAQABJ5nHAJf1Bph3MMAA4VzAAOFcwADiaQAAhtEAAAABA8AA4WzAAOJpAAAAAQEBwADheQAAAIPzYAOKJAAAYAPAAP2hAT4IPRzAAOGFLpnDAAAAAJfqPRzAAOGdLpeIAQABgMAA4bTACqxnAJhzPRzAAOG/Lpm4AQABJ4C8AJfmPRzAAOHVLpnAAQABJ2MAl+U9HMAA4esumcwBAAEWwADh+oDAAOH1wAqsZ4XTiiYAl+89HMAA4g0umcABAAEnmlQAl+U9HMAA4iQuiGkCAWADiaYCFsAA4jOAwADiLsAKrGeD1YonFsAA4jwul4iYcwCX/j0cwADiWS6ZoQEAASeG1wCX9QaYeDDAAOJuwADibsAA4/gAAIbJAAAAAQPAAOJ+wADj+AAAAAEBAcAA4osAAACD82ADifYAAGADwAD9oQE+CD0cwADily6ZwwAAAACX6j0cwADiry6XiAEAAYDAAOLGwAqtZACYcz0cwADi0S6ZuAEAASeAvACX5j0cwADi5y6ZwAEAASdjAJflPRzAAOL9LohpAgFgA4jpAjHAAOMHYAOI6QIWwADjDYDAAOMIwAqtZIXcifgWwADjG4DAAOMWwAqtZIXdifkWwADjJy6ZzJfvAJf+PRzAAOM3LpnAAQABJ5pUAJflPRzAAONOLohpAgFgA4oIAhbAAONdgMAA41jACq1kg9WJ+jTAAONmA8AA42bAAOPhAAAAAQEBwADjZwAAAIPUWwAAYAPAAP2hAT4DPRzAAON2LpeIAQABJsAA45MBFsAA45OBwADjjcAKrlmD1gBgA4mmAJhzPRzAAOOfLpnAAQABJ4LqAJflPRzAAOO3LpeIAQABJsAA49QBFsAA49SBwADjzsAKrlmAlgBgA4mmAJhzAJf+PRzAAOPoLpmhAQABJ4MmAJf1Bph5MMAA4/3AAOP9wADmKgAAhtQAAAABA8AA5BLAAOYqAAAAAQEBwADkJAAAAIPzYAOKNQAAYAPAAP2hAT4IPRzAAOQwLpnDAAAAAJfqPRzAAORILpeIAQABgMAA5F/ACq8QAJhzPRzAAORqLpm4AQABJ4C8AJfmPRzAAOSALpnQAQABFsAA5KaAwADkocAKrxCF4oo3AJf/ScAA5LshFsAA5N4WwADkzxbAAOTFgMAA5MDACq8QhO+KPYTFgyqBVcAA/R0+Az0cwADk7y6ZwAEAASdjAJflPRzAAOUHLohpAgFgA4jpAhbAAOUWgMAA5RHACq8QhSyKOBbAAOUlLpnMl+8Al/49HMAA5TcumcABAAEngJcAl+U/PRzAAOVTLpnAAQABJ4bWAJflPRzAAOVqLohpAgFdA8AA/ZQCYAOCe2ADiaYCFsAA5YUWwADleYDAAOV0wAqvEIXjijmD1cAA/Y40wADljgPAAOWOwADmEwAAAAEBAcAA5Y8AAACD1FsAAGADwAD9oQE+Az0cwADlni6ZpgEAASTAAOXIARbAAOXCFsAA5b0WwADltRbAAOWxgcAA5avACrBhg9YAhHMAgL0AgL0AAJfoPRzAAOXRLpnAAQABJ4LqAJflPRzAAOXpLpeIAQABJsAA5gYBFsAA5gaBwADmAMAKsGGAlgBgA4mmAJhzAJf+PRzAAOYaLpmhAQABJ4bXAJf1Bph6MMAA5i/AAOYvwADnxQAAhtoAAAABA8AA5lDAAOfFAAAAAQEBwADmbgAAAIPzYAOKSAAAYAPAAP2hAT4LPRzAAOZ6LpnDAAAAAJfqPRzAAOaSLpeIAQABgMAA5qnACrEsAJhzPRzAAOa0Lpm4AQABJ4C8AJfmPRzAAObKLpmmAQABJ5pVAJfoPRzAAObyLpm+AAAAAJfjPRzAAOcELpm5AQABFsAA5zsWwADnK4DAAOcmwAqxLIbZikqG4IpZAJgBPRzAAOdULpm+AAAAAJfjPRzAAOdmLpnAAQABJ2MAl+U9HMAA53wuiGkCAWADiOkCFsAA54uAwADnhsAKsSyFfYpLFsAA55IumcyX7wCX/j0cwADnoi6ZwAEAASeAlwCX5T0cwADnuC6ZoQAAAACX9QaYezDAAOfKwADnysAA6HUAAIbAAAAAAQPAAOfdwADodQAAAAEBAcAA5+0AAACD82ADid8AAGADwAD9oQE+BD0cwADn+S6ZwwAAAACX6j0cwADoES6XiAEAAYDAAOgowAqyXwCYcz0cwADoMy6ZuAEAASeAvACX5j0cwADoSS6ZoQEAASTAAOhwAyeDsxzAAOhVLpoXAQABFsAA6GeAwADoYsAKsl+Alom0AJgcJ4OzAJf1Bph8MMAA6HrAAOh6wADpdAAAhuEAAAABA8AA6I7AAOl0AAAAAQEBwADonwAAAIPzYAOKVwAAYAPAAP2hAT4HPRzAAOirLpnDAAAAAJfqPRzAAOjDLpeIAQABgMAA6NrACrMSAJhzPRzAAOjlLpm4AQABJ4C8AJfmPRzAAOj7LpmmAQABJ5pWAJfoPRzAAOkVLpm+AAAAAJfjPRzAAOknLpm5AQABFsAA6U6AwADpScAKsxKG4IpZAJgBPRzAAOlnLpmhAAAAAJf1Bph9MMAA6XnAAOl5wADqYAAAhucAAAABA8AA6ZHAAOpgAAAAAQEBwADppgAAAIPzYAOKdQAAYAPAAP2hAT4HPRzAAOmyLpnDAAAAAJfqPRzAAOnKLpeIAQABgMAA6eHACrPbAJhzPRzAAOnsLpm4AQABJ4C8AJfmPRzAAOoCLpnAAQABJ5pXAJflPRzAAOobLpm+AAAAAJfjPRzAAOotLpnoAQABFsAA6kKAwADqPcAKs9uCb4p3AJgHPRzAAOpTLpmhAAAAAJf1Bph+MMAA6mXAAOplwADqpAAAmAIAAAABA8AA6nDAAOqkAAAAAQEBwADqdgAAAIPzYAOCSwAAYAPAAP2hAT4BPRzAAOqCLoKOAQABJMAA6p8DJ2MWwADqkYDAAOqMwAq0pIWWwAD9+CeAlwCX4gAACf0YAAn9wgAJ/foACf4oAAn+VgAJ/uUACf/JAAoAWAAKAOcACgGfAAoCOwAKAycACgRNAAoE3AAKBUUACgXUAAoHRQAKB5EACgphAAoLuAAKDOEACg8CAAoTEwAKFnQAChgYAAoYewAKGRAAChmFAAoZ5gAKGkwAChq+AAobLgAKG8MAChwlAAocfAAKHhsACh6OAAoftQAKIHMACiD2AAohZwAKIm8ACiNGAAojuwAKJN8ACiWNAAop7AAKKuUACi1MAAozBAAKNHcACjUWAAo10gAKN+8ACjj1AAo5VQAKOmAACjrAAAo7ywAKQCYACkCGAApBYwAKQcMACkOOAApEWgAKRUEACkWAAApJzQAKTHAACk2mAApP2gAKU88AClc4AApYtwAKWWsAClo/AApbEwAKW8kAClxtAApdHAAKXZ0ACl6wAApfwgAKYYgACmPLAAplLQAKZfAACmazAApndgAKatQACmt0AApsMQAKbKMACm0DAAptVAAKbaUACm4mAApvXwAKcJgACnH7AApyjgAKcwAACnNjAApz3QAKdEMACnSpAAp1DwAKdWAACnYFAAp2tgAKd2gACngZAAp4ygAKeX4ACnvZAAp8QQAKfSAACn2zAAp+cQAKfwYACn+6AAqAoQAKgTcACoIAAAqCtAAKg5sACoP7AAqEjgAKhQ8ACoZ5AAqG6AAKh2kACofJAAqJGQAKidUACoqLAAqLUQAKjDgACo2qAAqO0gAKkA0ACpHyAAqSqAAKk9oACpSmAAqVUwAKlxoACpfdAAqYyAAKmUMACpp8AAqdugAKn2AACp/zAAqgagAKoLsACqFOAAqh4AAKonIACqLSAAqjNQAKo68ACqSJAAqk2gAKpSsACqV8AAqmhgAKpt0ACqejAAqonQAKqdgACqpNAAqqrQAKq0MACqxAAAqtPQAKrukACrEFAAqyOAAKsusACrO0AAq0fQAKtOoAAAC2ApiBMMAA6qnAAOqvwAD5RAOaWAAAAV0BmMoBYAPAAPyXAAAUBJiDMMAA6vXAAOsQBZWjAGADmIEBH8AA6wSYwgAAAAAEmIQwwADrYsAA63AGmlkAYAPAAPyXAWrAAOtvYAPAAPyXFQSYhTDAAOuFwADrlAaaWgBgA8AA/JcBasAA65NgA8AA/JchBJiGMMAA66nAAOu/BppbAGADwAD8lwFqwADrvmADwAD8l1MEmIcwwADr1MAA6+IGmlwAYAPAAPyXAWrAAOvhYAPAAPyXgVcEmIgwwADr98AA7AYGml0AYAPAAPyXAWrAAOwFYAPAAPyXgj8EmIkwwADsG8AA7CcGml4AYAPAAPyXAWrAAOwmYAPAAPyXguEEmIowwADsPMAA7EoGml8AYAPAAPyXAWrAAOxJYAPAAPyXhQcEmIswwADsX8AA7G0GmmAAYAPAAPyXAWrAAOxsYAPAAPyXg10EmIwwwADsgsAA7JEGmmEAYAPAAPyXAWrAAOyQYAPAAPyXhBEEmI0wwADspsAA7LYGmmIAYAPAAPyXAWrAAOy0YAPAAPyXhBQEmI4wwADsy8AA7NUGmmMAYAPAAPyXAWrAAOzTYAPAAPyXwACXCASYjzDAAOzqwADs9waaZABgA8AA/JcBasAA7PVgA8AA/JfAAJY2BJiQMMAA7QzAAO0fBpplAGADwAD8lwFqwADtHWADwAD8l4QXBJiRMMAA7TTAAO0/BppmAGADwAD8lwFqwADtPWADwAD8l8AAjRgEmJIwwADtVMAA7WAGmmcAYAPAAPyXAWrAAO1eYAPAAPyXwACKqASYkzDAAO11wADthgaaaABgA8AA/JcBasAA7YRgA8AA/JfAAISuBJiUMMAA7ZvAAO2nBpppAGADwAD8lwFqwADtpWADwAD8l8AAcYoEmJUwwADtvMAA7ccGmmoAYAPAAPyXAWrAAO3FYAPAAPyXwAB+KgSYljDAAO3qwADv1QaaawBdA8AA/W0CYAPAAP5+YAPAAPyXAWrAAO39XQPAAP1tAmADwAD+fmADwAD8l8AAnOkBBZjCAAAAAAQAAAMAAAAAAAAAAABgA5iBAT8BCQEAmP4AAAAAKQaYmDDAAOsVwADrIMAA60wAAZpsAAAAAQPAAOsiwADrTAAAAAEBAcAA6y4AAACD82ADhNkAAGADwAD8lwFKwADrNwEmwADrNwEcwADrPIDAAOs3wAq7L4RSAQABGsAA60OYgwCE3WADwAD8lwaYmTDAAO/awADv5sAA8FUAAZptAAAAAQPAAPABwADwVQAAAAEBAcAA8AYAAACaHWADwAD8lwAAYAPAAPrRAT4BSsAA8BgBIiEcwADwKoDAAPAfwAq7m0gBAAFqwADwLWADwAD8l4LhAMAA/bsAIRzAAPBEgMAA8DnACrubSAEAAWrAAPBHYAPAAPyXhQcAwAD9uwaYmjDAAPBawADwXsAA8I4AAJgMAAAAAQPAAPBvwADwjgAAAAEBAcAA8HsAAACD82ADhNkAAGADwAD8lwFKwADwhAFqwADwhGADwAD8lxUGmJswwADwksAA8JbAAPDOAACFiAAAAAEDwADwrMAA8M4AAAABAQHAAPC/AAAAg/NgA4ThAABgA8AA/JcBSsAA8MgBasAA8MhgA8AA/JfAAH4qBpicMMAA8NLAAPDWwADxDAAAhbYAAAABA8AA8OvAAPEMAAAAAQEBwADw/QAAAIPzYAOFwwAAYAPAAPyXAUrAAPEGAWrAAPEGYAPAAPyXwAB+KgaYnTDAAPEQwADxFMAA8VQAAIW4AAAAAQPAAPEuwADxVAAAAAEBAcAA8UUAAACD82ADhdYAAGADwAD8lwFKwADxTgFqwADxTmADwAD8l8AAfioGmJ4wwADxWMAA8VzAAPGeAACFoAAAAAEDwADxd8AA8Z4AAAABAQHAAPGPAAAAg/NgA4VMAABgA8AA/JcBSsAA8ZgBasAA8ZhgA8AA/JfAAH4qBpifMMAA8aLAAPGmwADx3AAAhboAAAABA8AA8bvAAPHcAAAAAQEBwADxzQAAAIPzYAOF6AAAYAPAAPyXAUrAAPHWAWrAAPHWYAPAAPyXwAB+KgaYoDDAAPHgwADx5MAA8iQAAIW8AAAAAQPAAPH+wADyJAAAAAEBAcAA8hUAAACD82ADhfsAAGADwAD8lwFKwADyHgFqwADyHmADwAD8l8AAfioGmKEwwADyKMAA8izAAPJIAACFwwAAAAEDwADyNMAA8kgAAAABAQHAAPI5AAAAg/NgA4YbAABgA8AA/JcBSsAA8kIBasAA8kJgA8AA/JfAAI0YBpiiMMAA8kzAAPJQwADypwAAhcgAAAABA8AA8mbAAPKnAAAAAQEBwADyeQAAAIPzYAOGJgAAYAPAAPyXAUrAAPKIARzAAPKYasAA8ohdA8AA/W0CYAPAAP5+YAPAAPyXwACc6UsBAAEWwADynoDAAPKZwAq+u4XGhikAwAD9gQaYozDAAPKrwADyr8AA8vQAAIXNAAAAAQPAAPLJwADy9AAAAAEBAcAA8uAAAACD82ADhjMAAGADwAD8lwFKwADy6QFqwADy6WADwAD8lyEGmKQwwADy+MAA8vzAAPM5AACF0QAAAAEDwADzFMAA8zkAAAABAQHAAPMpAAAAg/NgA4ZBAABgA8AA/JcBSsAA8zIBasAA8zJgA8AA/JfAAHGKBpilMMAA8z3AAPNBwADzcwAAheoAAAABA8AA81LAAPNzAAAAAQEBwADzYAAAAIPzYAOGggAAYAPAAPyXAUrAAPNpAWrAAPNpYAPAAPyXhQcGmKYwwADzd8AA83vAAPOtAACF7gAAAAEDwADzjMAA860AAAABAQHAAPOaAAAAg/NgA4aOAABgA8AA/JcBSsAA86MBasAA86NgA8AA/JeFBwaYpzDAAPOxwADztcAA8+YAAIX9AAAAAQPAAPPHwADz5gAAAAEBAcAA89YAAACD82ADhtUAAGADwAD8lwFKwADz3wFqwADz32ADwAD8l8AAcYoGmKgwwADz6sAA8+7AAPQbAACF/wAAAAEDwADz/sAA9BsAAAABAQHAAPQLAAAAg/NgA4bgAABgA8AA/JcBSsAA9BQBasAA9BRgA8AA/JfAAHGKBpipMMAA9B/AAPQjwAD0VQAAhgEAAAABA8AA9DbAAPRVAAAAAQEBwAD0RgAAAIPzYAOG6wAAYAPAAPyXAUrAAPRPAWrAAPRPYAPAAPyXwAB+KgaYqjDAAPRZwAD0XcAA9IIAAIYDAAAAAQPAAPRpwAD0ggAAAAEBAcAA9HIAAACD82ADhvQAAGADwAD8lwFKwAD0ewFqwAD0e2ADwAD8l8AAcYoGmKswwAD0hsAA9IrAAPSuAACGBQAAAAEDwAD0lMAA9K4AAAABAQHAAPSbAAAAg/NgA4b9AABgA8AA/JcBSsAA9KQBasAA9KRgA8AA/JcVBpisMMAA9LLAAPS2wAD04wAAhgcAAAABA8AA9MbAAPTjAAAAAQEBwAD00wAAAIPzYAOHCAAAYAPAAPyXAUrAAPTcAWrAAPTcYAPAAPyXwABxigaYrTDAAPTnwAD068AA9RYAAIYJAAAAAQPAAPT6wAD1FgAAAAEBAcAA9QYAAACD82ADhxUAAGADwAD8lwFKwAD1DwFqwAD1D2ADwAD8l8AAcYoGmK4wwAD1GsAA9R7AAPVJAACGCwAAAAEDwAD1LcAA9UkAAAABAQHAAPU5AAAAg/NgA4ciAABgA8AA/JcBSsAA9UIBasAA9UJgA8AA/JfAAHGKBpivMMAA9U3AAPVRwAD1hQAAhhAAAAABA8AA9WXAAPWFAAAAAQEBwAD1dgAAAIPzYAOHOgAAYAPAAPyXAUrAAPV/AWrAAPV/YAPAAPyXwACNGAaYsDDAAPWJwAD1jcAA9csAAIYTAAAAAQPAAPWkwAD1ywAAAAEBAcAA9bgAAACD82ADh0oAAGADwAD8lwFKwAD1wQFqwAD1wWADwAD8lxUGmLEwwAD1z8AA9dPAAPYDAACF8QAAAAEDwAD15cAA9gMAAAABAQHAAPX0AAAAg/NgA4aoAABgA8AA/JcBSsAA9f0BasAA9f1gA8AA/JfAAH4qBpiyMMAA9gfAAPYLwAD2NQAAhfMAAAABA8AA9hrAAPY1AAAAAQEBwAD2JgAAAIPzYAOGsQAAYAPAAPyXAUrAAPYvAWrAAPYvYAPAAPyXwAB+KgaYszDAAPY5wAD2PcAA9m0AAIX2AAAAAQPAAPZPwAD2bQAAAAEBAcAA9l4AAACD82ADhroAAGADwAD8lwFKwAD2ZwFqwAD2Z2ADwAD8l8AAfioGmLQwwAD2ccAA9nXAAPahAACF+AAAAAEDwAD2hcAA9qEAAAABAQHAAPaSAAAAg/NgA4bDAABgA8AA/JcBSsAA9psBasAA9ptgA8AA/JfAAH4qBpi1MMAA9qXAAPapwAD21QAAhfoAAAABA8AA9rnAAPbVAAAAAQEBwAD2xgAAAIPzYAOGzAAAYAPAAPyXAUrAAPbPAWrAAPbPYAPAAPyXwAB+KgaYtjDAAPbZwAD23cAA9woAAIWLAAAAAQPAAPbtwAD3CgAAAAEBAcAA9voAAACD82ADhOwAAGADwAD8lwFKwAD3AwFqwAD3A2ADwAD8l8AAcYoGmLcwwAD3DsAA9xLAAPdCAACFjQAAAAEDwAD3IsAA90IAAAABAQHAAPcvAAAAg/NgA4T4AABgA8AA/JcBSsAA9zgBasAA9zhgA8AA/JcVBpi4MMAA90bAAPdKwAD3dwAAhZgAAAABA8AA91rAAPd3AAAAAQEBwAD3ZwAAAIPzYAOFBAAAYAPAAPyXAUrAAPdwAWrAAPdwYAPAAPyXwABxigaYuTDAAPd7wAD3f8AA968AAIWaAAAAAQPAAPePwAD3rwAAAAEBAcAA95wAAACD82ADhRYAAGADwAD8lwFKwAD3pQFqwAD3pWADwAD8lxUGmLowwAD3s8AA97fAAPfuAACFpgAAAAEDwAD3zMAA9+4AAAABAQHAAPfeAAAAg/NgA4VfAABgA8AA/JcBSsAA9+cBasAA9+dgA8AA/JfAAHGKBpi7MMAA9/LAAPf2wAD4MAAAhagAAAABA8AA+AvAAPgwAAAAAQEBwAD4HQAAAIPzYAOFcAAAYAPAAPyXAUrAAPgmAWrAAPgmYAPAAPyXFQaYvDDAAPg0wAD4OMAA+HEAAIWcAAAAAQPAAPhOwAD4cQAAAAEBAcAA+GEAAACD82ADhSkAAGADwAD8lwFKwAD4agFqwAD4amADwAD8l8AAcYoGmL0wwAD4dcAA+HnAAPi1AACFngAAAAEDwAD4j8AA+LUAAAABAQHAAPiiAAAAg/NgA4U6AABgA8AA/JcBSsAA+KsBasAA+KtgA8AA/JcVBpi+MMAA+LnAAPi9wAD45gAAhaoAAAABA8AA+MvAAPjmAAAAAQEBwAD41gAAAIPzYAOFggAAYAPAAPyXAUrAAPjfAWrAAPjfYAPAAPyXwABxigaYvzDAAPjqwAD47sAA+RoAAIWsAAAAAQPAAPj8wAD5GgAAAAEBAcAA+QcAAACD82ADhZIAAGADwAD8lwFKwAD5EAFqwAD5EGADwAD8lxUGmMAwwAD5HsAA+SLAAPlCAACGGQAAAAEDwAD5KsAA+UIAAAABAQHAAPkvAAAAg/NgA4dhAABgA8AA/JcBSsAA+TgBasAA+ThgA8AA/JcVAAAKuwgACrt0AAq8BwAKvFYACryoAAq8+gAKvUwACr2eAAq98AAKvkIACr6UAAq/EwAKv2IACr+0AArABAAKwFQACsCmAArA+AAKwUoACsGcAArB6wAKwj0ACsKPAArC4QAKwzMACsOCAArD1AAKxCYACsR4AArEygAKxRwACsVuAArFvQAKxg8ACsZeAArGsAAKxv8ACsdRAArHoAAKx/IACshBAArIkAAAACkCmMMwwAD6ycAA+s/AAPtXA5puAAABYAHAAP3kAAACBJjFMMAA+vPAAPr6CZpvAGADl7YABJjGMMAA+wjAAPsZCZn+AGADwAD8lwABBZjIMMAA+x7AAPsewAD7VQAAAAPAAPsvwAD7VQAAAAICAsAA+zUAAASab2ADl7YAwAD7QwAABJn+YAPAAPyXAABgA5jDAT8DCAGYxYAAwArJqwgBmMaBAMAKybkJAcAA+x7AAP36AAAAAAAAAArJ9AAAAAABBJdcMIdth5QEmnAAYAOXkwEfh4iXrgAAAAALBpdeMIeXh56IIQABmnEAAAABA4euiCEAAAABAQGHtwAAAIPzYAOCiwAAYAPAAP5+AT4BSofBASaHwQEjHIfNgIfIwArKNkgBAAErAMAA/fEnhEE1AAAAAQBgA8AA/n4BFofxgIfswArKNoC9gpkjHIf2gQDACsptSAEAASsAAByIDhqH+ZdcmW0BAAGAiBrACso2AJelgQDACsptAVsBW2ADwAD+fgaXXzCIJIgriKgAAZpyAAAAAQOIOYioAAAAAQEBiEAAAACD82ADgxsAAGADwAD+fgE+AUqISgEmiEoBIxyIVoCIUcAKytxIAQABKwDAAP3xJ4RBNQAAAAEAYAPAAP5+ARaIeoCIdcAKytyAvYMhIxyIf4EAwArLE0gBAAErAAAciJcaiIKXXJlrAQABgIihwArK3ACXo4EAwArLEwFbAVtgA8AA/n4Gl2AwiKuIsokoAAGacwAAAAEDiMmJKAAAAAEBAYjQAAAAg/NgA4MbAABgA8AA/n4BPgFKiNoBHIkQHIkJHojhl14BAAEWiPeAiPLACsuChLKDRQBkAQABJ4ZwAMAA/pNkAQABHokSl18BAAGAiSHACsuCAADAAP6TBpdhMIkriTKJlAABmnQAAAABA4lBiZQAAAABAQGJSQAAAIPzYAODfQAAYAPAAP5+AT4BSolTASaJUwE1AAAAAQBgA8AA/n4BNQAAAAEAYAOItAEWiV+AiVrACsv7gL2DgSMciWWBAMAKzCdIAQABKwAAKxaJZYEAwArMJ4C9iLcBYAPAAP5+IxyJaoEAwArMGkgBAAErAAAciYIaiW2XXJlqAQABgImNwArL+wCXooEAwArMGgFbYAPAAP5+BpdiMImXiZ6KxQABmnUAAAABA4m2isUAAAABAQGJvgAAAIPzYAODfQAAYAPAAP5+AT4BSYnIIRyJ4BaJ0YCJzMAKzLiFCoOFSAEAASsAwAD98T4BSonvARyKMhyKIx6J9pdgAQABFooTgIoOwArMuIUKg4UAZAEAASeGcADAAP6TZAEAAR6KPJdhAQABgIpMwArMuAAAwAD+kz4BSopiARyKoByKkR6KaZdeAQABFop/gIp6wArMuISyg4YAZAEAASeGcADAAP6TZAEAAR6KqpdhAQABgIq6wArMuAAAwAD+kwaXYzCKyIrPi0AAAZp2AAAAAQOK5YtAAAAAAQEBivQAAACD82ADiYIAAGADwAD+fgE+AUqK/gEmiv4BNQAAAAEAYAPAAP5+ARaLCoCLBcAKzZqAvYmGIxyLD4EAwArNuUgBAAErAAAciycaixKXXJluAQABgIs5wArNmgCXpoEAwArNuQFbYAPAAP5+BpdkMItDi0qMuwABmncAAAABA4tpjLsAAAABAQGLeAAAAIPzYAOJggAAYAPAAP5+AT4DSYuCJYuSFouLgIuGwArOJoRXglhgA4MbPgFKi6IBHIvdHIvOHoupl2ABAAEmi8YBFovGgIvBwArOJoRXglhgA4MbAGQBAAEnhnAAwAD+k2QBAAEei+eXYwEAAYCL/sAKziYAAMAA/pM/SYwLJYwbFowUgIwPwArOJoRXglhgA4N9PgFKjCwBHIxoHIxZHowzl2IBAAEmjFEBFoxRgIxMwArOJoRXglhgA4N9AGQBAAEnhnAAwAD+k2QBAAEejHKXYwEAAYCMicAKziYAAMAA/pM/SoyWAR6MnZdjAQABgIy0wArOJgAGl2UwjL6MxY09AAGaeAAAAAEDjOGNPQAAAAEBAYz2AAAAg/NgA4h+AABgA8AA/n4BPgFKjQABJo0AATUAAAABAGADwAD+fgEWjQyAjQfACs8/gL2IgiMcjRGBAMAKz15IAQABKwAAHI0pGo0Ul1yZaQEAAYCNNsAKzz8Al6GBAMAKz14BW2ADwAD+fgaXZjCNQI1HjfMAAZp5AAAAAQONWI3zAAAAAQEBjV4AAACD82ADgksAAGADwAD+fgE+A06NdY18AACCj2ADwAD+yAEfjYLAAP7nAAAAAD0cjc4fjZiYgAIAAYGNoMAKz+IBmX8ajbiXXIcKAQABgI3YwArPywCX60qN4QEkjfEBgY3qwArP4gaXZzCN9o39jroAAZp6AAAAAQOODo66AAAAAQEBjhkAAACD82ADioAAAGADwAD+fgE+A06OMI43AACCj2ADwAD+yAEfjj3AAP7nAAAAAD0cjowfjlOYgAIAAYGOW8AK0GkBmX8fjneXrgAAAACERQEAAYCOn8AK0FIAl99KjqgBJI64AYGOscAK0GkGl2gwwAD5R8AA+U7AAPrGAAGaewAAAAEDwAD5Y8AA+sYAAAABAQHAAPlyAAAAgmtgA4RSAABgA8AA/n4BPgJHwAD5fIDAAPmEwArQ5wUBwAD5o2rAAPmjYAOEUoTcAD4BSsAA+bEBJ5ZzAcAA+dlqwAD52WADhFKEvgA+AUrAAPnnASeafAHAAPoMasAA+gxgA4RShM0APgFKwAD6GgEnl1ABwAD6P2rAAPo/YAOEUoTrAD4BSsAA+k8BJ4XGAcAA+nlqwAD6eWADhFKB0QA+AUrAAPqIASeELT0wwAD6oCTAAPrEAieafYDAAPq/wArQ5wEwAArRsgAJ5qQACef9AAnoigAJ6d4ACeskAAnvJgAJ+ScACfo0AAq3ywAKyT0ACsn9AAAACgAKyhkACsq/AArLZQAKy94ACsybAArNfQAKzgkACs8iAArPrgAK0DUACtDAAArRsgAAAAsAAgSYyZp+MQAAA4D2AADAAPY6AAEAAYYMgRgAAMAAvlsAAIEzAACCLgAAAAAAEwKYyjGBR4FWj3gHmn8AAQAAlyVgA8AA/eQBWwFgAcAA/eQAAAABBZj+MYFvgXWBiAEAAAOBhoGIAAAAAAAAAF0DmMoBXwMAAAE/AQkBgXXAAP36AAAAADEGmMwxgY2Bj4G5AACYDAAAAAEDgaCBuQAAAAEBAYGsAAAAg/NgA4TZAABfAwAAAUqBtQErBpjNMYG9gb+CAAAAmAYAAAABA4HSggAAAAABAQGB4AAAAIPzYAOGoAAAXwMAAAFKgekBHIHpLpgMAQABgIH7wArS9ACYzAaYzjGCBYIHglAAAIWIAAAAAQOCHYJQAAAAAQEBgjAAAACD82ADhOEAAF8DAAABSoI5ARyCOS6YDAEAAYCCS8AK0zoAmMwGmM8xglSCVoKTAACFiwAAAAEDgmaCkwAAAAEBAYJzAAAAg/NgA4TsAABfAwAAAUqCfAEcgnwumAwBAAGAgo7ACtOAAJjMBpjQMYKXgpmC1gAAhY0AAAABA4KpgtYAAAABAQGCtgAAAIPzYAOE+AAAXwMAAAFKgr8BHIK/LpgMAQABgILRwArTxgCYzAaY0TGC2oLcgxkAAIWYAAAAAQOC7IMZAAAAAQEBgvkAAACD82ADhQQAAF8DAAABSoMCARyDAi6YDAEAAYCDFMAK1AwAmMwGmNIxgx2DH4NcAACFmgAAAAEDgy+DXAAAAAEBAYM8AAAAg/NgA4UWAABfAwAAAUqDRQEcg0UumAwBAAGAg1fACtRSAJjMBpjTMYNgg2KDqwAAhZwAAAABA4N4g6sAAAABAQGDiwAAAIPzYAOFKQAAXwMAAAFKg5QBHIOULpgMAQABgIOmwArUmACYzAaY1DGDr4Oxg/oAAIWeAAAAAQODx4P6AAAAAQEBg9oAAACD82ADhToAAF8DAAABSoPjARyD4y6YDAEAAYCD9cAK1N4AmMwGmNUxg/6EAIRHAACFpgAAAAEDhBWERwAAAAEBAYQnAAAAg/NgA4VfAABfAwAAAUqEMAEchDAumAwBAAGAhELACtUkAJjMBpjWMYRLhE2ElAAAhagAAAABA4RihJQAAAABAQGEdAAAAIPzYAOFcAAAXwMAAAFKhH0BHIR9LpgMAQABgISPwArVagCYzAaY1zGEmISahNMAAIWqAAAAAQOEqITTAAAAAQEBhLMAAACD82ADhYIAAF8DAAABSoS8ARyEvC6YDAEAAYCEzsAK1bAAmMwGmNgxhNeE2YUSAACFrAAAAAEDhOeFEgAAAAEBAYTyAAAAg/NgA4WSAABfAwAAAUqE+wEchPsumAwBAAGAhQ3ACtX2AJjMBpjZMYUWhRiFXwAAhbYAAAABA4UthV8AAAABAQGFPwAAAIPzYAOFwwAAXwMAAAFKhUgBHIVILpgMAQABgIVawArWPACYzAaY2jGFY4Vlhb4AAIWgAAAAAQOFgIW+AAAAAQEBhZgAAACD82ADhUwAAF8DAAABSoWnARyFpy6YDAEAAYCFucAK1oIAmMwGmNsxhcKFxIYbAACFuAAAAAEDhd6GGwAAAAEBAYX1AAAAg/NgA4XWAABfAwAAAUqGBAEchgQumAwBAAGAhhbACtbIAJjMBpjcMYYfhiGGaAAAhboAAAABA4Y2hmgAAAABAQGGSAAAAIPzYAOF6AAAXwMAAAFKhlEBHIZRLpgMAQABgIZjwArXDgCYzAaY3TGGbIZuhsUAAIW8AAAAAQOGiIbFAAAAAQEBhp8AAACD82ADhfsAAF8DAAABSoauARyGri6YDAEAAYCGwMAK11QAmMwGmN4xhsmGy4b4AACFwwAAAAEDhtOG+AAAAAEBAYbYAAAAg/NgA4YbAABfAwAAAUqG4QEchuEumAwBAAGAhvPACteaAJjMBpjfMYb8hv6HRwAAhcgAAAABA4cUh0cAAAABAQGHJwAAAIPzYAOGJgAAXwMAAAFKhzABHIcwLpgMAQABgIdCwArX4ACYzAaY4DGHS4dNh6QAAIXNAAAAAQOHZ4ekAAAAAQEBh34AAACD82ADhjMAAF8DAAABSoeNARyHjS6YDAEAAYCHn8AK2CYAmMwGmOExh6iHqof9AACF0QAAAAEDh8KH/QAAAAEBAYfXAAAAg/NgA4ZBAABfAwAAAUqH5gEch+YumAwBAAGAh/jACthsAJjMBpjiMYgBiAOITAAAhdYAAAABA4gZiEwAAAABAQGILAAAAIPzYAOGTAAAXwMAAAFKiDUBHIg1LpgMAQABgIhHwArYsgCYzAaY4zGIUIhSiJkAAIXaAAAAAQOIZ4iZAAAAAQEBiHkAAACD82ADhlgAAF8DAAABSoiCARyIgi6YDAEAAYCIlMAK2PgAmMwGmOQxiJ2In4jmAACF4AAAAAEDiLSI5gAAAAEBAYjGAAAAg/NgA4ZkAABfAwAAAUqIzwEciM8umAwBAAGAiOHACtk+AJjMBpjlMYjqiOyJMwAAheYAAAABA4kBiTMAAAABAQGJEwAAAIPzYAOGcQAAXwMAAAFKiRwBHIkcLpgMAQABgIkuwArZhACYzAaY5jGJN4k5iXgAAIXqAAAAAQOJSol4AAAAAQEBiVgAAACD82ADhoIAAF8DAAABSolhARyJYS6YDAEAAYCJc8AK2coAmMwGmOcxiXyJfom9AACF7gAAAAEDiY+JvQAAAAEBAYmdAAAAg/NgA4aOAABfAwAAAUqJpgEciaYumAwBAAGAibjACtoQAJjMBpjoMYnBicOKBAAAhf0AAAABA4nVigQAAAABAQGJ5AAAAIPzYAOG1QAAXwMAAAFKie0BHIntLpgMAQABgIn/wAraVgCYzAaY6TGKCIoKikcAAIX/AAAAAQOKGopHAAAAAQEBiicAAACD82ADhuAAAF8DAAABSoowARyKMC6YDAEAAYCKQsAK2pwAmMwGmOoxikuKTYqQAACGAQAAAAEDimCKkAAAAAEBAYpwAAAAg/NgA4brAABfAwAAAUqKeQEcinkumAwBAAGAiovACtriAJjMBpjrMYqUipaKywAAhgMAAAABA4qiissAAAABAQGKqwAAAIPzYAOG9AAAXwMAAAFKirQBHIq0LpgMAQABgIrGwArbKACYzAaY7DGKz4rRiwIAAIYFAAAAAQOK24sCAAAAAQEBiuIAAACD82ADhv0AAF8DAAABSorrARyK6y6YDAEAAYCK/cAK224AmMwGmO0xiwaLCItFAACGBwAAAAEDixiLRQAAAAEBAYslAAAAg/NgA4cIAABfAwAAAUqLLgEciy4umAwBAAGAi0DACtu0AJjMBpjuMYtJi0uLhgAAhgkAAAABA4tai4YAAAABAQGLZgAAAIPzYAOHFQAAXwMAAAFKi28BHItvLpgMAQABgIuBwArb+gCYzAaY7zGLiouMi8cAAIYLAAAAAQOLm4vHAAAAAQEBi6cAAACD82ADhyIAAF8DAAABSouwARyLsC6YDAEAAYCLwsAK3EAAmMwGmPAxi8uLzYwSAACGEAAAAAEDi+GMEgAAAAEBAYvyAAAAg/NgA4c6AABfAwAAAUqL+wEci/sumAwBAAGAjA3ACtyGAJjMBpjxMYwWjBiMYwAAhhMAAAABA4wvjGMAAAABAQGMQwAAAIPzYAOHSgAAXwMAAAFKjEwBHIxMLpgMAQABgIxewArczACYzAaY8jGMZ4xpjLQAAIYWAAAAAQOMgIy0AAAAAQEBjJQAAACD82ADh1UAAF8DAAABSoydARyMnS6YDAEAAYCMr8AK3RIAmMwGmPMxjLiMuoz9AACF8QAAAAEDjMyM/QAAAAEBAYzbAAAAg/NgA4aoAABfAwAAAUqM5AEcjOQumAYBAAGAjPjACt1YAJjNBpj0MY0BjQONQAAAhfMAAAABA40SjUAAAAABAQGNHgAAAIPzYAOGsQAAXwMAAAFKjScBHI0nLpgGAQABgI07wArdngCYzQaY9TGNRI1GjYkAAIX2AAAAAQONWI2JAAAAAQEBjWcAAACD82ADhroAAF8DAAABSo1wARyNcC6YBgEAAYCNhMAK3eQAmM0GmPYxjY2Nj43OAACF+AAAAAEDjZ+NzgAAAAEBAY2sAAAAg/NgA4bDAABfAwAAAUqNtQEcjbUumAYBAAGAjcnACt4qAJjNBpj3MY3SjdSOEwAAhfoAAAABA43kjhMAAAABAQGN8QAAAIPzYAOGzAAAXwMAAAFKjfoBHI36LpgGAQABgI4OwArecACYzQaY+DGOF44ZjkYAAIYZAAAAAQOOIY5GAAAAAQEBjiYAAACD82ADh2EAAF8DAAABSo4vARyOLy6YDAEAAYCOQcAK3rYAmMwGmPkxjkqOTI6RAACGGwAAAAEDjmCOkQAAAAEBAY5xAAAAg/NgA4dtAABfAwAAAUqOegEcjnoumAwBAAGAjozACt78AJjMBpj6MY6VjpeO2AAAhcAAAAABA46pjtgAAAABAQGOuAAAAIPzYAOGDwAAXwMAAAFKjsEBHI7BLpgMAQABgI7TwArfQgCYzAaY+zGO3I7ejxsAAIYeAAAAAQOO7o8bAAAAAQEBjvsAAACD82ADh3kAAF8DAAABSo8EARyPBC6YDAEAAYCPFsAK34gAmMwGmPwxjx+PIY92AACGIQAAAAEDjzqPdgAAAAEBAY9QAAAAg/NgA4eEAABfAwAAAUqPXwEcj18umAwBAAGAj3HACt/OAJjMAAAK0qMACtLXAArTHQAK02MACtOpAArT7wAK1DUACtR7AArUwQAK1QcACtVNAArVkwAK1dkACtYfAArWZQAK1qsACtbxAArXNwAK130ACtfDAArYCQAK2E8ACtiVAArY2wAK2SEACtlnAArZrQAK2fMACto5AArafwAK2sUACtsLAArbUQAK25cACtvdAArcIwAK3GkACtyvAArc9QAK3TsACt2BAArdxwAK3g0ACt5TAAremQAK3t8ACt8lAArfawAK37EACt/3AAAAMQKY/zGPe4+KlaIHmoAAAQAAlyVgA8AA/eQBWwFgAcAA/eQAAAABBZkXMY+ij6iPugEAAAOPuI+6AAAAAAAAAF0DmP8BXwMAAAE/AQkBj6jAAP36AAAAABUGmQExj7+PwY/pAACYFAAAAAEDj9GP6QAAAAEBAY/cAAAAg/NgA4ePAABfAwAAAUqP5QErBpkCMY/uj/CQQgAAhiMAAAABA5AIkEIAAAABAQGQHQAAAIPzYAOHlQAAXwMAAAFKkCwBHJAsLpgUAQABgJA9wArhbQCZAQaZAzGQRpBIkHgAAIYnAAAAAQOQUpB4AAAAAQEBkFkAAACD82ADh58AAF8DAAABSpBiARyQYi6YFAEAAYCQc8AK4bMAmQEGmQQxkHyQfpC6AACGKgAAAAEDkI6QugAAAAEBAZCbAAAAg/NgA4eqAABfAwAAAUqQpAEckKQumBQBAAGAkLXACuH5AJkBBpkFMZC+kMCRAgAAhiwAAAABA5DTkQIAAAABAQGQ4wAAAIPzYAOHtQAAXwMAAAFKkOwBHJDsLpgUAQABgJD9wAriPwCZAQaZBjGRBpEIkUwAAIYwAAAAAQORHJFMAAAAAQEBkS0AAACD82ADh70AAF8DAAABSpE2ARyRNi6YFAEAAYCRR8AK4oUAmQEGmQcxkVCRUpGYAACGMgAAAAEDkWeRmAAAAAEBAZF5AAAAg/NgA4fKAABfAwAAAUqRggEckYIumBQBAAGAkZPACuLLAJkBBpkIMZGckZ6R4AAAhjQAAAABA5GxkeAAAAABAQGRwQAAAIPzYAOH1AAAXwMAAAFKkcoBHJHKLpgUAQABgJHbwArjEQCZAQaZCTGR5JHmkigAAIY2AAAAAQOR+ZIoAAAAAQEBkgkAAACD82ADh94AAF8DAAABSpISARySEi6YFAEAAYCSI8AK41cAmQEGmQoxkiySLpJqAACGOAAAAAEDkj6SagAAAAEBAZJLAAAAg/NgA4fpAABfAwAAAUqSVAEcklQumBQBAAGAkmXACuOdAJkBBpkLMZJuknCSrgAAhjwAAAABA5KBkq4AAAABAQGSjwAAAIPzYAOH9AAAXwMAAAFKkpgBHJKYLpgUAQABgJKpwArj4wCZAQaZDDGSspK0kvYAAIZAAAAAAQOSx5L2AAAAAQEBktcAAACD82ADiAEAAF8DAAABSpLgARyS4C6YFAEAAYCS8cAK5CkAmQEGmQ0xkvqS/JNAAACGQwAAAAEDkxCTQAAAAAEBAZMhAAAAg/NgA4gPAABfAwAAAUqTKgEckyoumBQBAAGAkzvACuRvAJkBBpkOMZNEk0aToAAAhkoAAAABA5Nik6AAAAABAQGTewAAAIPzYAOIKAAAXwMAAAFKk4oBHJOKLpgUAQABgJObwArktQCZAQaZDzGTpJOmk+IAAIZMAAAAAQOTtpPiAAAAAQEBk8MAAACD82ADiDIAAF8DAAABSpPMARyTzC6YFAEAAYCT3cAK5PsAmQEGmRAxk+aT6JQsAACGTgAAAAEDk/yULAAAAAEBAZQNAAAAg/NgA4g+AABfAwAAAUqUFgEclBYumBQBAAGAlCfACuVBAJkBBpkRMZQwlDKUaAAAhlEAAAABA5Q/lGgAAAABAQGUSQAAAIPzYAOISAAAXwMAAAFKlFIBHJRSLpgUAQABgJRjwArlhwCZAQaZEjGUbJRulKgAAIZYAAAAAQOUfZSoAAAAAQEBlIkAAACD82ADiGAAAF8DAAABSpSSARyUki6YFAEAAYCUo8AK5c0AmQEGmRMxlKyUrpTwAACGXgAAAAEDlMGU8AAAAAEBAZTRAAAAg/NgA4hrAABfAwAAAUqU2gEclNoumBQBAAGAlOvACuYTAJkBBpkUMZT0lPaVSAAAhmcAAAABA5UOlUgAAAABAQGVIwAAAIPzYAOIfgAAXwMAAAFKlTIBHJUyLpgUAQABgJVDwArmWQCZAQaZFTGVTJVOlaAAAIZpAAAAAQOVZpWgAAAAAQEBlXsAAACD82ADiKkAAF8DAAABSpWKARyVii6YFAEAAYCVm8AK5p8AmQEAAArhHAAK4VAACuGWAArh3AAK4iIACuJoAArirgAK4vQACuM6AArjgAAK48YACuQMAArkUgAK5JgACuTeAArlJAAK5WoACuWwAArl9gAK5jwACuaCAArmyAAAABUCmRgxlaWVtJcoB5qBAAEAAJclYAPAAP3kAVsBYAHAAP3kAAAAAQWZIDGVyZXPld4BAAADldyV3gAAAAAAAABdA5kYAV8DAAABPwEJAZXPwAD9+gAAAAAFBpkaMZXjleWWBwAAmBAAAAABA5XylgcAAAABAQGV+gAAAIPzYAODfQAAXwMAAAFKlgMBKwaZGzGWDJYOlkcAAIUpAAAAAQOWHpZHAAAAAQEBlisAAACD82ADg88AAF8DAAABSpY0ARyWNC6YEAEAAYCWQsAK584AmRoGmRwxlkuWTZaCAACFRwAAAAEDlluWggAAAAEBAZZmAAAAg/NgA4QSAABfAwAAAUqWbwEclm8umBABAAGAln3ACugUAJkaBpkdMZaGloiWtQAAhSMAAAABA5aSlrUAAAABAQGWmQAAAIPzYAODnAAAXwMAAAFKlqIBHJaiLpgQAQABgJawwAroWgCZGgaZHjGWuZa7lyYAAIUwAAAAAQOW3ZcmAAAAAQEBlvwAAACD82ADg+8AAF8DAAABPgFKlwgBHJcPLpgQAQABgJcdwArooACZGgAACud9AArnsQAK5/cACug9AArogwAK6MsAAAAFApkhMZcrlzqZlgeaggABAACXJWADwAD95AFbAWABwAD95AAAAAEFmSsxl1SXWpduAQAAA5dsl24AAAAAAAAAXQOZIQFfAwAAAT8BCQGXWsAA/foAAAAABwaZIzGXc5d1l6EAAJgOAAAAAQOXh5ehAAAAAQEBl5QAAACD82ADhGEAAF8DAAABSpedASsGmSQxl6aXqJf6AACFVQAAAAEDl7+X+gAAAAEBAZfTAAAAg/NgA4RoAABfAwAAAUqX4gEcl+IumA4BAAGAl/XACumRAJkjBpklMZf+mACYSAAAhVgAAAABA5gVmEgAAAABAQGYJwAAAIPzYAOEbwAAXwMAAAFKmDABHJgwLpgOAQABgJhDwArp1wCZIwaZJjGYTJhOmJYAAIVaAAAAAQOYY5iWAAAAAQEBmHUAAACD82ADhH4AAF8DAAABSph+ARyYfi6YDgEAAYCYkcAK6h0AmSMGmScxmJqYnJj2AACFXAAAAAEDmLeY9gAAAAEBAZjPAAAAg/NgA4SNAABfAwAAAUqY3gEcmN4umA4BAAGAmPHACupjAJkjBpkoMZj6mPyZRAAAhV4AAAABA5kRmUQAAAABAQGZIwAAAIPzYAOEnAAAXwMAAAFKmSwBHJksLpgOAQABgJk/wArqqQCZIwaZKTGZSJlKmZQAAIVhAAAAAQOZYJmUAAAAAQEBmXMAAACD82ADhKUAAF8DAAABSpl8ARyZfC6YDgEAAYCZj8AK6u8AmSMAAArpQAAK6XQACum6AArqAAAK6kYACuqMAArq0gAK6xgAAAAHApksMZmZmZ+2CAOagwABAACXJWADwAD95AFbAWABwAD95AAEXQGYygFfAwAAXQGY/wFfAwAAXQGZGAFfAwAAXQGZIQFfAwAAAAEFmZExmjSaOppHAQAAA5pFmkcAAAAAAAAAXQOZLAFfAwAAAT8BCQGaOsAA/foAAAAAYgaZLjGaTJpOmnQAAIccAAAAAQOaXZp0AAAAAQEBmmcAAACD82ADglIAAF8DAAABSppwASsGmS8xmoqajJrHAACYDAAAAAEDmp2axwAAAAEBAZqpAAAAg/NgA4TZAABfAwAAAUqasgEcmrIuhxwBAAGAmsLACuwKAJkuBpkwMZrLms2bDgAAmAYAAAABA5rgmw4AAAABAQGa7gAAAIPzYAOGoAAAXwMAAAFKmvcBHJr3LpgMAQABgJsJwArsUACZLwaZMTGbEpsUm10AAIWIAAAAAQObKptdAAAAAQEBmz0AAACD82ADhOEAAF8DAAABSptGARybRi6YDAEAAYCbWMAK7JYAmS8GmTIxm2GbY5ugAACFiwAAAAEDm3OboAAAAAEBAZuAAAAAg/NgA4TsAABfAwAAAUqbiQEcm4kumAwBAAGAm5vACuzcAJkvBpkzMZukm6ab4wAAhY0AAAABA5u2m+MAAAABAQGbwwAAAIPzYAOE+AAAXwMAAAFKm8wBHJvMLpgMAQABgJvewArtIgCZLwaZNDGb55vpnCYAAIWYAAAAAQOb+ZwmAAAAAQEBnAYAAACD82ADhQQAAF8DAAABSpwPARycDy6YDAEAAYCcIcAK7WgAmS8GmTUxnCqcLJxpAACFmgAAAAEDnDycaQAAAAEBAZxJAAAAg/NgA4UWAABfAwAAAUqcUgEcnFIumAwBAAGAnGTACu2uAJkvBpk2MZxtnG+cuAAAhZwAAAABA5yFnLgAAAABAQGcmAAAAIPzYAOFKQAAXwMAAAFKnKEBHJyhLpgMAQABgJyzwArt9ACZLwaZNzGcvJy+nQcAAIWeAAAAAQOc1J0HAAAAAQEBnOcAAACD82ADhToAAF8DAAABSpzwARyc8C6YDAEAAYCdAsAK7joAmS8GmTgxnQudDZ1UAACFpgAAAAEDnSKdVAAAAAEBAZ00AAAAg/NgA4VfAABfAwAAAUqdPQEcnT0umAwBAAGAnU/ACu6AAJkvBpk5MZ1YnVqdoQAAhagAAAABA51vnaEAAAABAQGdgQAAAIPzYAOFcAAAXwMAAAFKnYoBHJ2KLpgMAQABgJ2cwAruxgCZLwaZOjGdpZ2nneAAAIWqAAAAAQOdtZ3gAAAAAQEBncAAAACD82ADhYIAAF8DAAABSp3JARydyS6YDAEAAYCd28AK7wwAmS8GmTsxneSd5p4fAACFrAAAAAEDnfSeHwAAAAEBAZ3/AAAAg/NgA4WSAABfAwAAAUqeCAEcnggumAwBAAGAnhrACu9SAJkvBpk8MZ4jniWebAAAhbYAAAABA546nmwAAAABAQGeTAAAAIPzYAOFwwAAXwMAAAFKnlUBHJ5VLpgMAQABgJ5nwArvmACZLwaZPTGecJ5ynssAAIWgAAAAAQOejZ7LAAAAAQEBnqUAAACD82ADhUwAAF8DAAABSp60ARyetC6YDAEAAYCexsAK794AmS8GmT4xns+e0Z8oAACFuAAAAAEDnuufKAAAAAEBAZ8CAAAAg/NgA4XWAABfAwAAAUqfEQEcnxEumAwBAAGAnyPACvAkAJkvBpk/MZ8sny6fdQAAhboAAAABA59Dn3UAAAABAQGfVQAAAIPzYAOF6AAAXwMAAAFKn14BHJ9eLpgMAQABgJ9wwArwagCZLwaZQDGfeZ97n9IAAIW8AAAAAQOflZ/SAAAAAQEBn6wAAACD82ADhfsAAF8DAAABSp+7ARyfuy6YDAEAAYCfzcAK8LAAmS8GmUExn9af2KAFAACFwwAAAAEDn+CgBQAAAAEBAZ/lAAAAg/NgA4YbAABfAwAAAUqf7gEcn+4umAwBAAGAoADACvD2AJkvBplCMaAJoAugVAAAhcgAAAABA6AhoFQAAAABAQGgNAAAAIPzYAOGJgAAXwMAAAFKoD0BHKA9LpgMAQABgKBPwArxPACZLwaZQzGgWKBaoLEAAIXNAAAAAQOgdKCxAAAAAQEBoIsAAACD82ADhjMAAF8DAAABSqCaARygmi6YDAEAAYCgrMAK8YIAmS8GmUQxoLWgt6EKAACF0QAAAAEDoM+hCgAAAAEBAaDkAAAAg/NgA4ZBAABfAwAAAUqg8wEcoPMumAwBAAGAoQXACvHIAJkvBplFMaEOoRChWQAAhdYAAAABA6EmoVkAAAABAQGhOQAAAIPzYAOGTAAAXwMAAAFKoUIBHKFCLpgMAQABgKFUwAryDgCZLwaZRjGhXaFfoaYAAIXaAAAAAQOhdKGmAAAAAQEBoYYAAACD82ADhlgAAF8DAAABSqGPARyhjy6YDAEAAYChocAK8lQAmS8GmUcxoaqhrKHzAACF4AAAAAEDocGh8wAAAAEBAaHTAAAAg/NgA4ZkAABfAwAAAUqh3AEcodwumAwBAAGAoe7ACvKaAJkvBplIMaH3ofmiQAAAheYAAAABA6IOokAAAAABAQGiIAAAAIPzYAOGcQAAXwMAAAFKoikBHKIpLpgMAQABgKI7wAry4ACZLwaZSTGiRKJGooUAAIXqAAAAAQOiV6KFAAAAAQEBomUAAACD82ADhoIAAF8DAAABSqJuARyibi6YDAEAAYCigMAK8yYAmS8GmUoxoomii6LKAACF7gAAAAEDopyiygAAAAEBAaKqAAAAg/NgA4aOAABfAwAAAUqiswEcorMumAwBAAGAosXACvNsAJkvBplLMaLOotCjEQAAhf0AAAABA6LioxEAAAABAQGi8QAAAIPzYAOG1QAAXwMAAAFKovoBHKL6LpgMAQABgKMMwArzsgCZLwaZTDGjFaMXo1QAAIX/AAAAAQOjJ6NUAAAAAQEBozQAAACD82ADhuAAAF8DAAABSqM9ARyjPS6YDAEAAYCjT8AK8/gAmS8GmU0xo1ijWqOdAACGAQAAAAEDo22jnQAAAAEBAaN9AAAAg/NgA4brAABfAwAAAUqjhgEco4YumAwBAAGAo5jACvQ+AJkvBplOMaOho6Oj2AAAhgMAAAABA6Ovo9gAAAABAQGjuAAAAIPzYAOG9AAAXwMAAAFKo8EBHKPBLpgMAQABgKPTwAr0hACZLwaZTzGj3KPepA8AAIYFAAAAAQOj6KQPAAAAAQEBo+8AAACD82ADhv0AAF8DAAABSqP4ARyj+C6YDAEAAYCkCsAK9MoAmS8GmVAxpBOkFaRSAACGBwAAAAEDpCWkUgAAAAEBAaQyAAAAg/NgA4cIAABfAwAAAUqkOwEcpDsumAwBAAGApE3ACvUQAJkvBplRMaRWpFikkwAAhgkAAAABA6RnpJMAAAABAQGkcwAAAIPzYAOHFQAAXwMAAAFKpHwBHKR8LpgMAQABgKSOwAr1VgCZLwaZUjGkl6SZpNQAAIYLAAAAAQOkqKTUAAAAAQEBpLQAAACD82ADhyIAAF8DAAABSqS9ARykvS6YDAEAAYCkz8AK9ZwAmS8GmVMxpNik2qUfAACGEAAAAAEDpO6lHwAAAAEBAaT/AAAAg/NgA4c6AABfAwAAAUqlCAEcpQgumAwBAAGApRrACvXiAJkvBplUMaUjpSWlcAAAhhMAAAABA6U8pXAAAAABAQGlUAAAAIPzYAOHSgAAXwMAAAFKpVkBHKVZLpgMAQABgKVrwAr2KACZLwaZVTGldKV2pcEAAIYWAAAAAQOljaXBAAAAAQEBpaEAAACD82ADh1UAAF8DAAABSqWqARylqi6YDAEAAYClvMAK9m4AmS8GmVYxpcWlx6YKAACF8QAAAAEDpdmmCgAAAAEBAaXoAAAAg/NgA4aoAABfAwAAAUql8QEcpfEumAYBAAGApgXACva0AJkwBplXMaYOphCmTQAAhfMAAAABA6Yfpk0AAAABAQGmKwAAAIPzYAOGsQAAXwMAAAFKpjQBHKY0LpgGAQABgKZIwAr2+gCZMAaZWDGmUaZTppYAAIX2AAAAAQOmZaaWAAAAAQEBpnQAAACD82ADhroAAF8DAAABSqZ9ARymfS6YBgEAAYCmkcAK90AAmTAGmVkxppqmnKbbAACF+AAAAAEDpqym2wAAAAEBAaa5AAAAg/NgA4bDAABfAwAAAUqmwgEcpsIumAYBAAGAptbACveGAJkwBplaMabfpuGnIAAAhfoAAAABA6bxpyAAAAABAQGm/gAAAIPzYAOGzAAAXwMAAAFKpwcBHKcHLpgGAQABgKcbwAr3zACZMAaZWzGnJKcmp1MAAIYZAAAAAQOnLqdTAAAAAQEBpzMAAACD82ADh2EAAF8DAAABSqc8ARynPC6YDAEAAYCnTsAK+BIAmS8GmVwxp1enWaeeAACGGwAAAAEDp22nngAAAAEBAad+AAAAg/NgA4dtAABfAwAAAUqnhwEcp4cumAwBAAGAp5nACvhYAJkvBpldMaeip6Sn5QAAhcAAAAABA6e2p+UAAAABAQGnxQAAAIPzYAOGDwAAXwMAAAFKp84BHKfOLpgMAQABgKfgwAr4ngCZLwaZXjGn6afrqCgAAIYeAAAAAQOn+6goAAAAAQEBqAgAAACD82ADh3kAAF8DAAABSqgRARyoES6YDAEAAYCoI8AK+OQAmS8GmV8xqCyoLqiDAACGIQAAAAEDqEeogwAAAAEBAahdAAAAg/NgA4eEAABfAwAAAUqobAEcqGwumAwBAAGAqH7ACvkqAJkvBplgMaiYqJqo0wAAmBQAAAABA6iqqNMAAAABAQGotQAAAIPzYAOHjwAAXwMAAAFKqL4BHKi+LoccAQABgKjOwAr5cACZLgaZYTGo16jZqSsAAIYjAAAAAQOo8akrAAAAAQEBqQYAAACD82ADh5UAAF8DAAABSqkVARypFS6YFAEAAYCpJsAK+bYAmWAGmWIxqS+pMalhAACGJwAAAAEDqTupYQAAAAEBAalCAAAAg/NgA4efAABfAwAAAUqpSwEcqUsumBQBAAGAqVzACvn8AJlgBpljMallqWepowAAhioAAAABA6l3qaMAAAABAQGphAAAAIPzYAOHqgAAXwMAAAFKqY0BHKmNLpgUAQABgKmewAr6QgCZYAaZZDGpp6mpqesAAIYsAAAAAQOpvKnrAAAAAQEBqcwAAACD82ADh7UAAF8DAAABSqnVARyp1S6YFAEAAYCp5sAK+ogAmWAGmWUxqe+p8ao1AACGMAAAAAEDqgWqNQAAAAEBAaoWAAAAg/NgA4e9AABfAwAAAUqqHwEcqh8umBQBAAGAqjDACvrOAJlgBplmMao5qjuqgQAAhjIAAAABA6pQqoEAAAABAQGqYgAAAIPzYAOHygAAXwMAAAFKqmsBHKprLpgUAQABgKp8wAr7FACZYAaZZzGqhaqHqskAAIY0AAAAAQOqmqrJAAAAAQEBqqoAAACD82ADh9QAAF8DAAABSqqzARyqsy6YFAEAAYCqxMAK+1oAmWAGmWgxqs2qz6sRAACGNgAAAAEDquKrEQAAAAEBAaryAAAAg/NgA4feAABfAwAAAUqq+wEcqvsumBQBAAGAqwzACvugAJlgBplpMasVqxerUwAAhjgAAAABA6snq1MAAAABAQGrNAAAAIPzYAOH6QAAXwMAAAFKqz0BHKs9LpgUAQABgKtOwAr75gCZYAaZajGrV6tZq5cAAIY8AAAAAQOraquXAAAAAQEBq3gAAACD82ADh/QAAF8DAAABSquBARyrgS6YFAEAAYCrksAK/CwAmWAGmWsxq5urnavfAACGQAAAAAEDq7Cr3wAAAAEBAavAAAAAg/NgA4gBAABfAwAAAUqryQEcq8kumBQBAAGAq9rACvxyAJlgBplsMavjq+WsKQAAhkMAAAABA6v5rCkAAAABAQGsCgAAAIPzYAOIDwAAXwMAAAFKrBMBHKwTLpgUAQABgKwkwAr8uACZYAaZbTGsLawvrIkAAIZKAAAAAQOsS6yJAAAAAQEBrGQAAACD82ADiCgAAF8DAAABSqxzARyscy6YFAEAAYCshMAK/P4AmWAGmW4xrI2sj6zLAACGTAAAAAEDrJ+sywAAAAEBAaysAAAAg/NgA4gyAABfAwAAAUqstQEcrLUumBQBAAGArMbACv1EAJlgBplvMazPrNGtFQAAhk4AAAABA6zlrRUAAAABAQGs9gAAAIPzYAOIPgAAXwMAAAFKrP8BHKz/LpgUAQABgK0QwAr9igCZYAaZcDGtGa0brVEAAIZRAAAAAQOtKK1RAAAAAQEBrTIAAACD82ADiEgAAF8DAAABSq07ARytOy6YFAEAAYCtTMAK/dAAmWAGmXExrVWtV62RAACGWAAAAAEDrWatkQAAAAEBAa1yAAAAg/NgA4hgAABfAwAAAUqtewEcrXsumBQBAAGArYzACv4WAJlgBplyMa2VrZet2QAAhl4AAAABA62qrdkAAAABAQGtugAAAIPzYAOIawAAXwMAAAFKrcMBHK3DLpgUAQABgK3UwAr+XACZYAaZczGt3a3frjEAAIZnAAAAAQOt964xAAAAAQEBrgwAAACD82ADiH4AAF8DAAABSq4bARyuGy6YFAEAAYCuLMAK/qIAmWAGmXQxrjWuN66JAACGaQAAAAEDrk+uiQAAAAEBAa5kAAAAg/NgA4ipAABfAwAAAUqucwEcrnMumBQBAAGAroTACv7oAJlgBpl1Ma6brp2u0AAAmBAAAAABA66qrtAAAAABAQGusgAAAIPzYAODfQAAXwMAAAFKrrsBHK67LoccAQABgK7LwAr/LgCZLgaZdjGu1K7Wrw8AAIUpAAAAAQOu5q8PAAAAAQEBrvMAAACD82ADg88AAF8DAAABSq78ARyu/C6YEAEAAYCvCsAK/3QAmXUGmXcxrxOvFa9KAACFRwAAAAEDryOvSgAAAAEBAa8uAAAAg/NgA4QSAABfAwAAAUqvNwEcrzcumBABAAGAr0XACv+6AJl1Bpl4Ma9Or1CvfQAAhSMAAAABA69ar30AAAABAQGvYQAAAIPzYAODnAAAXwMAAAFKr2oBHK9qLpgQAQABgK94wAsAAACZdQaZeTGvga+Dr+4AAIUwAAAAAQOvpa/uAAAAAQEBr8QAAACD82ADg+8AAF8DAAABPgFKr9ABHK/XLpgQAQABgK/lwAsARgCZdQaZejGwALACsDEAAIT7AAAAAQOwDLAxAAAAAQEBsBMAAACD82ADgxsAAF8DAAABSrAcARywHC6HHAEAAYCwLMALAI4AmS4GmXsxsDWwN7BuAACFBgAAAAEDsEWwbgAAAAEBAbBQAAAAg/NgA4NgAABfAwAAAUqwWQEcsFkuhxwBAAGAsGnACwDUAJkuBpl8MbCFsIewxAAAmA4AAAABA7CZsMQAAAABAQGwpgAAAIPzYAOEYQAAXwMAAAFKsK8BHLCvLoccAQABgLC/wAsBGgCZLgaZfTGwyLDKsRwAAIVVAAAAAQOw4bEcAAAAAQEBsPUAAACD82ADhGgAAF8DAAABSrEEARyxBC6YDgEAAYCxF8ALAWAAmXwGmX4xsSCxIrFqAACFWAAAAAEDsTexagAAAAEBAbFJAAAAg/NgA4RvAABfAwAAAUqxUgEcsVIumA4BAAGAsWXACwGmAJl8Bpl/MbFusXCxuAAAhVoAAAABA7GFsbgAAAABAQGxlwAAAIPzYAOEfgAAXwMAAAFKsaABHLGgLpgOAQABgLGzwAsB7ACZfAaZgDGxvLG+shgAAIVcAAAAAQOx2bIYAAAAAQEBsfEAAACD82ADhI0AAF8DAAABSrIAARyyAC6YDgEAAYCyE8ALAjIAmXwGmYExshyyHrJmAACFXgAAAAEDsjOyZgAAAAEBAbJFAAAAg/NgA4ScAABfAwAAAUqyTgEcsk4umA4BAAGAsmHACwJ4AJl8BpmCMbJqsmyytgAAhWEAAAABA7KCsrYAAAABAQGylQAAAIPzYAOEpQAAXwMAAAFKsp4BHLKeLpgOAQABgLKxwAsCvgCZfAaZgzGy0bLTswYAAISnAAAAAQOy37MGAAAAAQEBsugAAACD82ADgosAAF8DAAABSrLxARyy8S6HHAEAAYCzAcALAwQAmS4GmYQxswqzDLNTAACEuAAAAAEDsyKzUwAAAAEBAbM1AAAAg/NgA4LCAABfAwAAAUqzPgEcsz4uhxwBAAGAs07ACwNKAJkuBpmFMbNXs1mzkgAAhMMAAAABA7Nos5IAAAABAQGzdAAAAIPzYAOC5wAAXwMAAAFKs30BHLN9LoccAQABgLONwAsDkACZLgaZhjGzlrOYs9MAAIS7AAAAAQOzqLPTAAAAAQEBs7UAAACD82ADgtwAAF8DAAABSrO+ARyzvi6HHAEAAYCzzsALA9YAmS4GmYcxs9ez2bQMAACEygAAAAEDs+W0DAAAAAEBAbPuAAAAg/NgA4L2AABfAwAAAUqz9wEcs/cuhxwBAAGAtAfACwQcAJkuBpmIMbQQtBK0UQAAhqoAAAABA7QktFEAAAABAQG0MwAAAIPzYAOJggAAXwMAAAFKtDwBHLQ8LoccAQABgLRMwAsEYgCZLgaZiTG0VbRXtJQAAIVwAAAAAQO0aLSUAAAAAQEBtHYAAACD82ADhK4AAF8DAAABSrR/ARy0fy6HHAEAAYC0j8ALBKgAmS4GmYoxtJi0mrTRAACFsAAAAAEDtKi00QAAAAEBAbSzAAAAg/NgA4WjAABfAwAAAUq0vAEctLwuhxwBAAGAtMzACwTuAJkuBpmLMbTVtNe1GgAAhbIAAAABA7TrtRoAAAABAQG0/AAAAIPzYAOFsQAAXwMAAAFKtQUBHLUFLoccAQABgLUVwAsFNACZLgaZjDG1HrUgtVkAAIZIAAAAAQO1L7VZAAAAAQEBtTsAAACD82ADiBoAAF8DAAABSrVEARy1RC6HHAEAAYC1VMALBXoAmS4GmY0xtV21X7WOAACGVQAAAAEDtWm1jgAAAAEBAbVwAAAAg/NgA4hUAABfAwAAAUq1eQEctXkuhxwBAAGAtYnACwXAAJkuBpmOMbWStZS1yQAAhg0AAAABA7WhtckAAAABAQG1qwAAAIPzYAOHMAAAXwMAAAFKtbQBHLW0LoccAQABgLXEwAsGBgCZLgaZjzG1zbXPtgYAAIb1AAAAAQO13bYGAAAAAQEBtegAAACD82ADioAAAF8DAAABSrXxARy18S6HHAEAAYC2AcALBkwAmS4AAArruQAK6+0ACuwzAArseQAK7L8ACu0FAArtSwAK7ZEACu3XAAruHQAK7mMACu6pAAru7wAK7zUACu97AArvwQAK8AcACvBNAArwkwAK8NkACvEfAArxZQAK8asACvHxAAryNwAK8n0ACvLDAArzCQAK808ACvOVAArz2wAK9CEACvRnAAr0rQAK9PMACvU5AAr1fwAK9cUACvYLAAr2UQAK9pcACvbdAAr3IwAK92kACvevAAr39QAK+DsACviBAAr4xwAK+Q0ACvlTAAr5mQAK+d8ACvolAAr6awAK+rEACvr3AAr7PQAK+4MACvvJAAr8DwAK/FUACvybAAr84QAK/ScACv1tAAr9swAK/fkACv4/AAr+hQAK/ssACv8RAAr/VwAK/50ACv/jAAsAKQALAHEACwC3AAsA/QALAUMACwGJAAsBzwALAhUACwJbAAsCoQALAucACwMtAAsDcwALA7kACwP/AAsERQALBIsACwTRAAsFFwALBV0ACwWjAAsF6QALBi8ACwZ1AAAAYgKZkjG2C7YRuIEDmoQAAQAAlyVgA8AA/eQBWwFgAcAA/eQAAAABBZmeMbYoti62PwEAAAO2PbY/AAAAAAAAAF0DmZIBXwMAAAE/AQkBti7AAP36AAAAAAkGmZQxtkS2RrZsAACYCgAAAAEDtlW2bAAAAAEBAbZfAAAAg/NgA4jpAABfAwAAAUq2aAErBpmVMbZxtnO2rgAAhoEAAAABA7aDtq4AAAABAQG2kAAAAIPzYAOI9AAAXwMAAAFKtpkBHLaZLpgKAQABgLapwAsIrwCZlAaZljG2sra0tu8AAIaEAAAAAQO2xLbvAAAAAQEBttEAAACD82ADiQAAAF8DAAABSrbaARy22i6YCgEAAYC26sALCPUAmZQGmZcxtvO29bcqAACGhgAAAAEDtwK3KgAAAAEBAbcMAAAAg/NgA4kMAABfAwAAAUq3FQEctxUumAoBAAGAtyXACwk7AJmUBpmYMbcutzC3aQAAhogAAAABA7c/t2kAAAABAQG3SwAAAIPzYAOJGAAAXwMAAAFKt1QBHLdULpgKAQABgLdkwAsJgQCZlAaZmTG3bbdvt64AAIaMAAAAAQO3gbeuAAAAAQEBt5AAAACD82ADiSQAAF8DAAABSreZARy3mS6YCgEAAYC3qcALCccAmZQGmZoxt7K3tLfxAACGkgAAAAEDt8W38QAAAAEBAbfTAAAAg/NgA4k2AABfAwAAAUq33AEct9wumAoBAAGAt+zACwoNAJmUBpmbMbf1t/e4PgAAhqQAAAABA7gNuD4AAAABAQG4IAAAAIPzYAOJcQAAXwMAAAFKuCkBHLgpLpgKAQABgLg5wAsKUwCZlAaZnDG4QrhEuH8AAIacAAAAAQO4VLh/AAAAAQEBuGEAAACD82ADiVAAAF8DAAABSrhqARy4ai6YCgEAAYC4esALCpkAmZQAAAsIXgALCJIACwjYAAsJHgALCWQACwmqAAsJ8AALCjYACwp8AAsKwgAAAAkCmZ8xuIS4irtPA5qFAAIAAJclYAPAAP3kAVsAAIJ6YAPAAP3kAVsBYAHAAP3kAAAAAQWZqwAAAAAEAAADAAAAAAAAAAAAXQOZnwJfAwAAXwMBAAE/AQkBAMAA/foAAAAACQaZoTG4pbinuNQAAJgKAAAAAQO4trjUAAAAAgICuMAAAACD82ADiOkAuMgAACCFhl8DAQAAAF8DAAABSrjQASsGmaIxuNm427kiAACGgQAAAAEDuOu5IgAAAAICArj4AAAAg/NgA4j0ALkAAAAghYZfAwEAAABfAwAAAUq5CAEcuQgumAoCAAKAuRjACwuugbkewAsLugCZoQaZozG5JrkouW8AAIaEAAAAAQO5OLlvAAAAAgICuUUAAACD82ADiQAAuU0AACCFhl8DAQAAAF8DAAABSrlVARy5VS6YCgIAAoC5ZcALDAeBuWvACwwTAJmhBpmkMblzuXW5tgAAhoYAAAABA7mCubYAAAACAgK5jAAAAIPzYAOJDAC5lAAAIIWGXwMBAAAAXwMAAAFKuZwBHLmcLpgKAgACgLmswAsMYIG5ssALDGwAmaEGmaUxubq5vLoBAACGiAAAAAEDucu6AQAAAAICArnXAAAAg/NgA4kYALnfAAAghYZfAwEAAABfAwAAAUq55wEcuecumAoCAAKAuffACwy5gbn9wAsMxQCZoQaZpjG6BboHulIAAIaMAAAAAQO6GbpSAAAAAgICuigAAACD82ADiSQAujAAACCFhl8DAQAAAF8DAAABSro4ARy6OC6YCgIAAoC6SMALDRKBuk7ACw0eAJmhBpmnMbpWuli6oQAAhpIAAAABA7ppuqEAAAACAgK6dwAAAIPzYAOJNgC6fwAAIIWGXwMBAAAAXwMAAAFKuocBHLqHLpgKAgACgLqXwAsNa4G6ncALDXcAmaEGmagxuqW6p7sAAACGpAAAAAEDur27AAAAAAICArrQAAAAg/NgA4lxALrYAAAghYZfAwEAAABfAwAAAUq65gEcuuYumAoCAAKAuvbACw3Egbr8wAsN0ACZoQaZqTG7BLsGu00AAIacAAAAAQO7FrtNAAAAAgICuyMAAACD82ADiVAAuysAACCFhl8DAQAAAF8DAAABSrszARy7My6YCgIAAoC7Q8ALDh2Bu0nACw4pAJmhAAALC1EACwuRAAsL6gALDEMACwycAAsM9QALDU4ACw2nAAsOAAALDlkAAAAJApmsMbztvPPAAEFRA5qGAAEAAJclYAPAAP3kAVsBYAHAAP3kAAAAAQWZvjG9Cr0QvSEBAAADvR+9IQAAAAAAAABdA5msAV8DAAABPwEJAb0QwAD9+gAAAAAPBpmuMb0mvSi9TgAAmAQAAAABA703vU4AAAABAQG9QQAAAIPzYAOJpgAAXwMAAAFKvUoBKwaZrzG9U71VvZIAAIazAAAAAQO9Zr2SAAAAAQEBvXQAAACD82ADibwAAF8DAAABSr19ARy9fS6YBAEAAYC9jcALDzEAma4GmbAxvZa9mL3VAACGtgAAAAEDvam91QAAAAEBAb23AAAAg/NgA4nEAABfAwAAAUq9wAEcvcAumAQBAAGAvdDACw93AJmuBpmxMb3Zvdu+FgAAhrkAAAABA73rvhYAAAABAQG9+AAAAIPzYAOJzAAAXwMAAAFKvgEBHL4BLpgEAQABgL4RwAsPvQCZrgaZsjG+Gr4cvl0AAIa8AAAAAQO+L75dAAAAAQEBvj8AAACD82ADidQAAF8DAAABSr5IARy+SC6YBAEAAYC+WMALEAMAma4GmbMxvmG+Y76kAACGwAAAAAEDvna+pAAAAAEBAb6GAAAAg/NgA4nfAABfAwAAAUq+jwEcvo8umAQBAAGAvp/ACxBJAJmuBpm0Mb6ovqq+6wAAhsQAAAABA769vusAAAABAQG+zQAAAIPzYAOJ5wAAXwMAAAFKvtYBHL7WLpgEAQABgL7mwAsQjwCZrgaZtTG+777xvywAAIbJAAAAAQO/Ab8sAAAAAQEBvw4AAACD82ADifYAAF8DAAABSr8XARy/Fy6YBAEAAYC/J8ALENUAma4GmbYxvzC/Mr9vAACGzgAAAAEDv0O/bwAAAAEBAb9RAAAAg/NgA4oTAABfAwAAAUq/WgEcv1oumAQBAAGAv2rACxEbAJmuBpm3Mb9zv3W/sAAAhtEAAAABA7+Fv7AAAAABAQG/kgAAAIPzYAOKJAAAXwMAAAFKv5sBHL+bLpgEAQABgL+rwAsRYQCZrgaZuDG/tL+2v/sAAIbUAAAAAQO/y7/7AAAAAQEBv90AAACD82ADijUAAF8DAAABSr/mARy/5i6YBAEAAYC/9sALEacAma4Gmbkxv//AAEABwABAZAAAhtoAAAABA8AAQCLAAEBkAAAAAQEBwABAQAAAAIPzYAOKSAAAXwMAAAFKwABATwEcwABATy6YBAEAAYDAAEBfwAsR9QCZrgaZujHAAEBowABAasAAQK0AAIbhAAAAAQPAAEB+wABArQAAAAEBAcAAQI8AAACD82ADilcAAF8DAAABSsAAQJgBHMAAQJgumAQBAAGAwABAqMALEk0Ama4GmbsxwABAscAAQLPAAED+AACG5AAAAAEDwABAy8AAQP4AAAABAQHAAEDgAAAAg/NgA4pnAABfAwAAAUrAAEDpARzAAEDpLpgEAQABgMAAQPnACxKlAJmuBpm8McAAQQLAAEEEwABBTwAAhucAAAABA8AAQRzAAEFPAAAAAQEBwABBMQAAAIPzYAOKdQAAXwMAAAFKwABBOgEcwABBOi6YBAEAAYDAAEFKwAsS/QCZrgAACw7gAAsPFAALD1oACw+gAAsP5gALECwACxByAAsQuAALEP4ACxFEAAsRigALEdAACxImAAsSfgALEtYACxMuAAAADwKZvzHAAEFUwABBY8AARDsHmocAAQAAlyVgA8AA/eQBWwFgAcAA/eQAAAABBZnRAAAAAAQAAAMAAAAAAAAAAABdA5m/AV8DAAABPwEJAQDAAP36AAAAAA8GmcExwABBfMAAQX7AAEGcAAKYBAAAAAEDwABBjcAAQZwAAAABAQHAAEGXAAAAg/NgA4mmAABfAwAAAAaZwjHAAEGhwABBo8AAQccAAoazAAAAAQPAAEG0wABBxwAAAAEBAcAAQcIAAACD82ADibwAAF8DAAAABpnDMcAAQcvAAEHNwABB8QAChrYAAAABA8AAQd7AAEHxAAAAAQEBwABB7AAAAIPzYAOJxAAAXwMAAAAGmcQxwABB9cAAQffAAEIZAAKGuQAAAAEDwABCB8AAQhkAAAABAQHAAEIUAAAAg/NgA4nMAABfAwAAAAaZxTHAAEIdwABCH8AAQkcAAoa8AAAAAQPAAEIywABCRwAAAAEBAcAAQkIAAACD82ADidQAAF8DAAAABpnGMcAAQkvAAEJNwABCdQAChsAAAAABA8AAQmDAAEJ1AAAAAQEBwABCcAAAAIPzYAOJ3wAAXwMAAAAGmccxwABCecAAQnvAAEKjAAKGxAAAAAEDwABCjsAAQqMAAAABAQHAAEKeAAAAg/NgA4nnAABfAwAAAAaZyDHAAEKnwABCqcAAQssAAobJAAAAAQPAAEK5wABCywAAAAEBAcAAQsYAAACD82ADifYAAF8DAAAABpnJMcAAQs/AAELRwABC9QAChs4AAAABA8AAQuLAAEL1AAAAAQEBwABC8AAAAIPzYAOKEwAAXwMAAAAGmcoxwABC+cAAQvvAAEMdAAKG0QAAAAEDwABDC8AAQx0AAAABAQHAAEMYAAAAg/NgA4okAABfAwAAAAaZyzHAAEMhwABDI8AAQ08AAobUAAAAAQPAAEM4wABDTwAAAAEBAcAAQ0oAAACD82ADijUAAF8DAAAABpnMMcAAQ1PAAENVwABDmQAChtoAAAABA8AAQ3bAAEOZAAAAAQEBwABDlAAAAIPzYAOKSAAAXwMAAAAGmc0xwABDncAAQ5/AAEPJAAKG4QAAAAEDwABDs8AAQ8kAAAABAQHAAEPEAAAAg/NgA4pXAABfAwAAAAaZzjHAAEPNwABDz8AARAEAAobkAAAAAQPAAEPnwABEAQAAAAEBAcAAQ/wAAACD82ADimcAAF8DAAAABpnPMcAARAXAAEQHwABEOQAChucAAAABA8AARB/AAEQ5AAAAAQEBwABENAAAAIPzYAOKdQAAXwMAAAAAAAsTywALFAYACxRBAAsUfAALFLcACxTyAAsVLQALFWgACxWjAAsV3gALFhkACxZUAAsWjwALFsoACxcFAAsXQAAAAA8CmdIxwABEPsAARETAAErWA5qIAAEAAJclYAPAAP3kAVsBYAHAAP3kAAFdAZmsAV8DAAABBJnVMcAARJrAAESjCZqJmMkAXQOZvwFbAAEFmecxwABEqMAARKjAAETQAAAAA8AARMDAAETQAAAAAQEBwABExgAABJqJXQOZvwFbAABdA5nSAV8DAAABPwIIAZnVgADACxf1CQHAAESowAD9+gAAAAAPBpnXMcAARNXAAETjwABFRwAAhucBasAARNZgA8AA/eQCAAABA8AARPvAAEVHAAAAAQEBwABFEAAAAIPzYAOKdQAAXwMAAAFKwABFHwEmwABFHwEcwABFKRbAAEUfLpqJmMmZ1YbnAQABgMAARULACxheAJnPXwMAAAaZ2DHAAEVMwABFWsAARb4AAIbkAWrAAEVNYAPAAP3kAgAAAQPAAEVywABFvgAAAAEBAcAARYcAAACD82ADimcAAF8DAAABSsAARZYBJsAARZYBHMAARaAWwABFli6aiZjJmdWG5AEAAYDAAEW5wAsY1wCZzl8DAAAGmdkxwABFw8AARdHAAEYpAACG4QFqwABFxGADwAD95AIAAAEDwABF5cAARikAAAABAQHAAEX2AAAAg/NgA4pXAABfAwAAAUrAAEYFASbAAEYFARzAAEYPFsAARgUumomYyZnVhuEBAAGAwABGJMALGVAAmc1fAwAABpnaMcAARi7AAEY8wABGuwAAhtoBasAARi9gA8AA/eQCAAABA8AARl3AAEa7AAAAAQEBwABGewAAAIPzYAOKSAAAXwMAAAFKwABGigEmwABGigEcwABGlBbAAEaKLpqJmMmZ1YbaAQABgMAARrbACxnJAJnMXwMAAAaZ2zHAAEbAwABGzsAARykAAIbUAWrAAEbBYAPAAP3kAgAAAQPAAEbjwABHKQAAAAEBAcAARvUAAACD82ADijUAAF8DAAABSsAARwQBJsAARwQBHMAARw4WwABHBC6aiZjJmdWG1AEAAYDAAEckwAsaQgCZy18DAAAGmdwxwABHLsAARzzAAEeCAACG0QFqwABHL2ADwAD95AIAAAEDwABHTMAAR4IAAAABAQHAAEdZAAAAg/NgA4okAABfAwAAAUrAAEdiASbAAEdiARzAAEdsFsAAR2IumomYyZnVhtEBAAGAwABHfcALGrsAmcpfAwAABpndMcAAR4fAAEeVwABH3gAAhs4BasAAR4hgA8AA/eQCAAABA8AAR6bAAEfeAAAAAQEBwABHtAAAAIPzYAOKEwAAXwMAAAFKwABHvQEmwABHvQEcwABHxxbAAEe9LpqJmMmZ1YbOAQABgMAAR9nACxs0AJnJXwMAAAaZ3jHAAEfjwABH8cAASDcAAIbJAWrAAEfkYAPAAP3kAgAAAQPAAEgBwABINwAAAAEBAcAASA4AAACD82ADifYAAF8DAAABSsAASBcBJsAASBcBHMAASCEWwABIFy6aiZjJmdWGyQEAAYDAAEgywAsbrQCZyF8DAAAGmd8xwABIPMAASErAAEifAACGxAFqwABIPWADwAD95AIAAAEDwABIXcAASJ8AAAABAQHAAEhtAAAAg/NgA4nnAABfAwAAAUrAAEh8ASbAAEh8ARzAAEiGFsAASHwumomYyZnVhsQBAAGAwABImsALHCYAmcdfAwAABpngMcAASKTAAEiywABJBwAAhsABasAASKVgA8AA/eQCAAABA8AASMXAAEkHAAAAAQEBwABI1QAAAIPzYAOJ3wAAXwMAAAFKwABI5AEmwABI5AEcwABI7hbAAEjkLpqJmMmZ1YbAAQABgMAASQLACxyfAJnGXwMAAAaZ4THAAEkMwABJGsAASW8AAIa8AWrAAEkNYAPAAP3kAgAAAQPAAEktwABJbwAAAAEBAcAAST0AAACD82ADidQAAF8DAAABSsAASUwBJsAASUwBHMAASVYWwABJTC6aiZjJmdWGvAEAAYDAAElqwAsdGACZxV8DAAAGmeIxwABJdMAASYLAAEnIAACGuQFqwABJdWADwAD95AIAAAEDwABJksAAScgAAAABAQHAAEmfAAAAg/NgA4nMAABfAwAAAUrAAEmoASbAAEmoARzAAEmyFsAASagumomYyZnVhrkBAAGAwABJw8ALHZEAmcRfAwAABpnjMcAASc3AAEnbwABKJAAAhrYBasAASc5gA8AA/eQCAAABA8AASezAAEokAAAAAQEBwABJ+gAAAIPzYAOJxAAAXwMAAAFKwABKAwEmwABKAwEcwABKDRbAAEoDLpqJmMmZ1Ya2AQABgMAASh/ACx4KAJnDXwMAAAaZ5DHAAEopwABKN8AASoAAAIazAWrAAEoqYAPAAP3kAgAAAQPAAEpIwABKgAAAAAEBAcAASlYAAACD82ADibwAAF8DAAABSsAASl8BJsAASl8BHMAASmkWwABKXy6aiZjJmdWGswEAAYDAAEp7wAsegwCZwl8DAAAGmeUxwABKhcAASpPAAErUAACYBAFqwABKhmADwAD95AIAAAEDwABKosAAStQAAAABAQHAAEqsAAAAg/NgA4mmAABfAwAAAUrAAEq1ASbAAEq1ARzAAEq/FsAASrUumomYyZnVmAQBAAGAwABKz8ALHvwAmcFfAwAAAAALGCsACxikAAsZHQALGZYACxoPAAsaiAALGwEACxt6AAsb8wALHGwACxzlAAsdXgALHdcACx5QAAseyQALH0IAAAAPApnoMcAAS57AAEukwABSQwOaigABAACXJWADwAD95AFbAWABwAD95AABXQGZvwFfAwAAAgSZ6zHAAEv/wABMBxiai5jJAF0DmdIBWwErBJnsMcAATBzAAExAWJqMAF0DwAD9bQJgA4mmXwMAAAEewABMKMAAwZ4AAmADiaZfAwAAAAABBZn/McAATEXAAExFwABMnAAAAAPAAExfwABMnAAAAAAAAABdA5noAV8DAAABPgE9F8AATGgumouYyR/AAEx3mecBAV8DAAABLgCZ6wEJAcAATEXAAP36AAAAABAGme4xwABNvsAATcDAAE4TAACGFwAAAAEDwABNzcAAThMAAAABAQHAAE3XAAAAg/NgA4mmAABfAwAAAT4BSsAATeMBJsAATeMBNQAAAAEAXQPAAP1tAmADiaZfAwAAARbAAE3qLpqMmew1AAAAAQBgA4mmAYDAAE3wwAsgjjUAAAABAF8DAAABHMAATe+BwABN78ALILFLAQABgsAATe/ACyDRAMAA/YEjHMAATfaDAMALIOVIAQABKwDAAP3xNQAAAAEAWwEmwABN7wEcwABN/4DAAE36wAsgjoRSAQABFsAATgYumouYyZnrAImpXwMAADUAAAABAFwBHMAATe+BwABN78ALILGAvwIAAoLAAE3vwAsg0YQAwAshJgDAAP2ChADACyEmgwDACyDlAVtfAwAABpnvMcAAThjAAE4awABOQAAAmAQAAAABA8AATinAAE5AAAAAAQEBwABOMwAAAIPzYAOJpgAAXwMAAAFKwABOPAErBpnwMcAATkXAAE5HwABOhAAAhrMAAAABA8AATljAAE6EAAAAAQEBwABOZgAAAIPzYAOJvAAAXwMAAAFKwABObwEcwABOby6YBAEAAYDAAE5/wAsiAwCZ7waZ8THAAE6IwABOisAATscAAIa2AAAAAQPAAE6bwABOxwAAAAEBAcAATqkAAACD82ADicQAAF8DAAABSsAATrIBHMAATrIumAQBAAGAwABOwsALIlsAme8GmfIxwABOy8AATs3AAE8IAACGuQAAAAEDwABO3cAATwgAAAABAQHAAE7qAAAAg/NgA4nMAABfAwAAAUrAAE7zARzAAE7zLpgEAQABgMAATwPACyKzAJnvBpnzMcAATwzAAE8OwABPTwAAhrwAAAABA8AATyHAAE9PAAAAAQEBwABPMQAAAIPzYAOJ1AAAXwMAAAFKwABPOgEcwABPOi6Y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wABp9QAAAIPzYAODzwAAXwMAAAFKwABp/gEcwABp/i6YEgEAAYDAAGoVwAs/TACaTgaaUTHAAGoewABqIMAAamcAAIVIAAAAAQPAAGo3wABqZwAAAAEBAcAAakIAAACD82ADhBIAAF8DAAABSsAAaksBHMAAaksumBIBAAGAwABqYsALP6QAmk4GmlIxwABqa8AAam3AAGrxAACFMQAAAAEDwABqmMAAavEAAAABAQHAAGq+AAAAg/NgA4PvAABfAwAAAT4BSsAAasoBHMAAatEumBIBAAGAwABq6MALP/wAmk4GmlMxwABq9sAAavjAAGshAACGbgAAAAEDwABrAcAAayEAAAABAQHAAGsHAAAAg/NgA4i0AABfAwAAAUrAAGsQARzAAGsQLpgCAQABgMAAaxzAC0BWAJojBppUMcAAayXAAGsnwABrWgAAhQMAAAABA8AAazXAAGtaAAAAAQEBwABrQAAAAIPzYAOJlwAAXwMAAAFKwABrSQEcwABrSS6YAgEAAYDAAGtVwAtArgCaIwaaVTHAAGtewABrYMAAa5MAAIagAAAAAQPAAGtuwABrkwAAAAEBAcAAa3kAAACD82ADiWIAAF8DAAABSsAAa4IBHMAAa4IumAIBAAGAwABrjsALQQYAmiMAAAswGwALMF0ACzC1AAsxDQALMWUACzG9AAsyFQALMm0ACzLFAAszHQALM3UACzPNAAs0JQALNH0ACzTVAAs1LQALNYUACzXdAAs2NQALNo0ACzblAAs3PQALN5UACzftAAs4RQALOJ0ACzj1AAs5NwALOXkACzm7AAs6EwALOmsACzrDAAs7GwALO3MACzvLAAs8IwALPHsACzzTAAs9KwALPYMACz3bAAs+MwALPosACz7NAAs/JQALP30ACz/VAAtALwALQIcAC0DfAAtBNwAAADMCmlgxwABrmMAAa57AAGw0A5qQAAEAAJclYAPAAP3kAVsBXQGaIQFfAwAAAAAAAQWaXDHAAGvJwABrz8AAa+EBAAADwABr38AAa+EAAAAAAAAAXQOaWAFfAwAAAT8BCQHAAGvPmlcAAAAAAQaaWjHAAGvmwABr6MAAbDIAAJgCAAAAAQPAAGvzwABsMgAAAAEBAcAAa/kAAACD82ADgksAAF8DAAABPgI9HMAAbAqAwABsBcALQp6EUwEAAS4Agk5KwABs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wAubBoUuiTmGjibAAEiUAYfAAEiUwAudXmADiVAGm280wABIqcAASK7AAElgAACa1wAAAAEDwABIv8AASWAAAAABAQHAAEjRAAAAgklgA5taAABcAT4DTsAASOPAAEjoAACD82ADm1oBLkPAAEj0IRzAAEkAgcAASPvAC56QSAEAAYDAAEkDwAuefADAAP3xPgI9NQAAAAEAYAObWgGBwABJFcALnpAXwABJGoLAAEkawAuezJrUHMAASRMWwABJGoLAAEkawAuezJrUm15kAQABlADAAP29m149icAASSzAC56QFsAASTiBwABJM8ALnpCa0JtcPTUAAAABAGADm1oBgMAASUvAC558F8AASVKCwABJUsALnzCa1BzAAElJFsAASVKCwABJUsALnzCa1JteZAEAAZQAwAD9vZteBptwNMAASWXAAEluwABKyQAAmr8AAAABA8AASXvAAErJAAAAAQEBwABJigAAAIJwYAOJggAAYAOI6QE+A07AAEmewABJqgAAgIlgA5taAS5DwABJtiEcwABJyYHAAEm9wAuftEgBAAErAMAA/fE+A07AAEnewABJ6gAAhFxgA4jpARzAAEn4gcAASezAC5+0lygCAAKAwABJ/8ALn50WwABKCS6a05tdAJtgScAASiIhHMAASjKCwABKJsALn+dIAQABKwCI7T4CPRzAAEpFLprXAQABgcAASlfAC5+0AJtvSsAASm0BgsAASnTAC5/nPz2JwABKj8ALn7QWwABKqYHAAEqdwAuftJrQm1xKwABKugErBptxNMAASs7AAErXwABLPAAAhqQAAAABA8AASu3AAEs8AAAAAQEBwABLAAAAAIPzYAOJcQAAYAOI6QE+AUrAAEsMATUAAAABAGADiOkBHMAASxMumr8BAAEWwABLJoDAAEshwAugsYDtiXUAm3AjHMAASzGBAMALoM5IAQABKwAAgMAASzTAC6CxgQDAC6DOAWADiOkAAAuUEwALlFAAC5SDAAuUtwALlbsAC5aIAAuW1gALlxAAC5dKAAuXhAALl74AC5jCAAuZ7AALmqQAC5rfAAueVQALn3YAC6CKAAuhHwAAABICm3Q0wABLQcAAS0fAAE73A5rYAAABYAGbUgAAAgSbdjTAAEuCwABLixia2QBgA8AA/JcBkwSbdzTAAEuUwABLphia2gBgA8AA+tEBKgEFm3w0wABLq8AAS6vAAExUAAAAA8AAS7/AAExUAAAAAgECwABL3QAAAITxXQPAAP1tAmADiYJgA4jpAMAATAcAAACa0GADm3QBagBgA8AA/aF5AGADm3QBPgE9HMAATDwWwABMLy6E8ZtUgKUBAAGAwABMQ8ALoeAAwAD9iQEJAMAATBebWQEAAYHAAEwdwAuh+QACBpt5NMAATFnAAEx6wABM3AAAmtUBasAATFpgA8AA/eQCAAABA8AATI3AAEzcAAAAAAAAAGADm3QBPgFKwABMlgEfwABMoZt8AgACMsAATM9gA4mCYAOI6QAuAAabejTAAEzhwABM9sAATvUAAIakAWrAAEziYAPAAP3kAgAAAQPAAE0MwABO9QAAAAEBAcAATR8AAACD82ADiXEAAGADiOkBPgVOwABNNMAATUAAAIRcYAOI6QEcwABNQi6avwEAARbAAE1VgMAATVDAC6LggO2JdQCbcEnAAE1lHMAATXWBwABNacALovdIAQABKwCI7UrAAE1+AYDAAE2FwAui4D9JwABNjxbAAE2TLpram3dKwABNnwGBwABNpsALovc/PRfAAE25LprZHMAATbcWwABNuS6a2Zt2ZAEAAZQAwAD9vZt2ScAATcQcwABNzhbAAE3ILprZm3aAlwEAARbAAE3dFsAATdAuhPGbVGHAAP2RAMAA/cc+Az0XwABN7S6a2imbdz0XwABOCC6a2RzAAE4GFsAATggumtmbdoGNAQABlADAAP2+m3ZKwABOFQGBwABOHMALovc+BD2JwABOPMALovccwABOSi6awgEAAYHAAE5QwAui9wCbZT0cwABOpBbAAE6YLoTxm1SAvwIAAhbAAE6qgMAATqXAC6LggO2JdYHAAE63wAui9wDAAP2CPRfAAE7MLprZHMAATsoWwABOzC6a2Zt2gY0BAAGUAMAA/b6bdkrAAE7ZAYHAAE7gwAui9wAAC6JSAAuirQALpJYAAAACApt9NMAATvrAAE8AwABozQOa2wAAAWABwAD95AAABASbfzTAAFCKwABQtAmE8QBdA8AA/W0CYAOJgmADiOkBMsAAULJgA4mCYAOI6QAEm4A0wABRccAAUYQJmtwAXQPAAP4vAWADiYIABJuCNMAAVAXAAFRFCZrdmvcAXQPAAP4vAWADiYIBHsAAVDHAAMGmAAFgA4mCAAAE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AExSHMAATEAum4YBAAGAwABMSMAMB1YAnDibRgEAARzAAExfLpuGAQABgcAATGfADAdkAJw4AJyCBpw+N8AATHzAAEyNwABNMQAAmxoBasAATH1gA8AA/eQCAAABA8AATJjAAE0xAAAAAgICwABMnwAAAJsZYAODGwDAAEyuAAAAhPNgA4MbAABgA8AA+tEBPgJJwABMwB7AAEzEwAD2eAIAAoDAAEzOwAwIHIHAAEzXwAwIKgBKwABM5AEpP0rAAEz1ARzAAE0NHMAATPwum4YBAAGAwABNBMAMCBwAnDibGgEAARzAAE0ZLpuGAQABgcAATSHADAgqAJw4AJyDBpw/N8AATTbAAE1HwABNmwAAm0gBasAATTdgA8AA/eQCAAABA8AATVTAAE2bAAAAAQEBwABNWwAAAISYYAODGwAAYAPAAPrRAT4BSsAATWkBFsAATY0WwABNgBzAAE1wLpuGAQABgMAATXjADAjiAJw4m3icdYO3wAD9HgacQTfAAE2gwABNscAAUNcAAJuNm+UAAAABA8AATcrAAFDXAAAAAQEBwABN1gAAAIFUYAOcbgAAXQPAAP07AWADnG4BPgdJwABN4iEcwABOABbAAE3rgMAATebADAlUm46ceUgBAAErAMAA/WVKwABOCQEWwABOFYDAAE4QwAwJVJuOnHk/TsAATjPAAE44AACbj2ADnJIBNcAATj4AAAEAYAOckgEfwABOPpyXAAAAADUAAAABAFsBHMAATkqBwABOSMAMCcRWAQABgMAATk7ADAlUAKakgQDADAnETsAATl3AAE5jAACbkF0DwAD9OwFgA5xuATHAAE5xYAOcbgA9F8AATn6AwABOecAMCVSbjoLAAE6VwAwKCZx5TsAATqvAAE60AACbkWADnG4BK0PAAE7AFsAATsyBwABOx8AMCbKDt6aiQT4JTsAATuTAAE7tAACbkmADnG4BHMAATvSBwABO78AMCbKEXgAAAACmpUnAAE8EHsAATwjAAPZ4AgAChMAATxLADAp1g8AATxzADApIAELAAE8nAD89HMAATz2CwABPN8AMCglWAQABhMAAT0HADAp1AMAA/Uw9i8AAT1LADApIhMAAT13ADAp1TsAAT3HAAE97AACE72ADgxsBFsAAT4aEwABPfcAMCnWE75xxT8AAT5fAAE+cAAABm5NhAwFgA4mXXAADwABPpcAAT/MAAAABAQHAAE+wAAAAhOFgA4mXAABcAT4BPRzAAE/KgcAAT8XADAmyVgEAARzAAE/OLpuGAQABFsAAT+CHwABP1sAMC0WE74mcAJw4AKakScAAT/whHMAAUBQWwABQCoXAAFAAwAwK/IThgytIAQABKwCJoj0cwABQJobAAFAdwAwLJCABAAEWwABQMYXAAFAnwAwK/IThgysAAD9JwABQQyEcwABQXRbAAFBRhcAAUEfADAr8hOKDLEgBAAErAImiPRzAAFBvhsAAUGbADAskIAEAARbAAFB6hcAAUHDADAr8hOKDLAAAPz0cwABQqRbAAFCYhcAAUI7ADAr8hOODLYP9AQABhsAAULHADAskAMAA/QlKwABQxwGCwABQzsAMCgkGnE03wABQ3MAAUPbAAF/nAACbPAFqwABQ3WADwAD95AIAAAEDwABRDsAAX+cAAAACAgLAAFEkAAAAmt5gA4kkAMAAUTkAAACSY2ADiSQAAGADiSQBPgtOwABVwsAAVcgAAJuUYAOcbgEcwABVyi6bhgEAARbAAFXYgMAAVdLADAyVhO+JKgCcOE7AAFXzwABV+QAAm5VgA5xuARzAAFX7LpuGAQABFsAAVgmBwABWA8AMDKOE74kqAJw4TsAAVioAAACbll0DwAD9OwFgA5xuAE7AAFZJAAAAm5ddA8AA/TsBYAOcbgBJwABWVyIewABWW8AA9ngCAAKCwABWZcAMDLqDwABWbMAMDOwAARzAAFZ8gsAAVnbADAy6mxoBAAGDwABWiMAMDOwAnIM+AT2MwABWmMAMDR6NwABWo8AMDTQcwABWri6bjZvlAQABg8AAVsjADAzsAJxBScAAVtscwABW5YPAAFbfwAwM7JsaAQABgsAAVvHADAy6AJyDPgE9jMAAVwHADA0ejcAAVwzADA00HMAAVxcum42b5QEAAYLAAFcxwAwMugCcQT4CPYzAAFdMwAwNHhzAAFdXLpuNm+UBAAGCwABXccAMDLoAnEE9jcAAV3/ADA00HMAAV4oum42b5QEAAYPAAFekwAwM7ACcQU7AAFglwABYKAAAm5hgA8AA/JcBk07AAFg1wABYOAAAm5lgA8AA/JcBk07AAFhPwABYWQAAiGJgA4kkAStOwABYacAAWHYAAJuaYAPAAPyXARzAAFh4lIHGAAAAAMAA/LpOwABYhMAAWJ0AAJubYAPAAPyXAZNDwABYpilBPgdOwABYxsAAWMsAAIO1YAOcbgEcwABY1YTAAFjNwAwNHksBAAGGwABY1sAMDlcAwAD9Sk7AAFjswABY8gAAm5xgA5xuARzAAFj8hcAAWPTADA00SwEAAYfAAFj9wAwObADAAP1KScAAWQghHsAAWQ3AAPZ4AgACFMAAWRfADA7WCwAUwABZHcAMDwgMAAA+AknAAFkvHsAAWTyclQIAAhTAAFlOwAwO1gsAFMAAWVTADA8IDAAAPgE9jsAAWWrADA5XHMAAWWiGwABZasAMDldkAQABlADAAP29PgE9j8AAWYvADA5sHMAAWYmHwABZi8AMDmxkAQABlADAAP29QsAAWaEAPz2PwABZu8AMDmwcwABZuYfAAFm7wAwObGQBAAGUAMAA/b09jsAAWcfADA5XHMAAWcWGwABZx8AMDldkAQABlADAAP29ScAAWdEhHMAAWeAWwABZ2hTAAFnVwAwO1gsAmtmcc0gBAAEUwABZ48AMDpQJAADAAP27PgRJwABZ+xzAAFoYFMAAWf/ADA64CgBIAQABlADAAP27SsAAWh4BFMAAWiXADA6BCAA/PRXAAFo4wAwOlAkWwABaTBTAAFpHwAwO1gsAmtmccz0VwABaW8AMDrgKkz0VwABagcAMDoEIK0nAAFqgHMAAWr0UwABapMAMDrgKAICXAQABlADAAP3HPgFCwABazAA/ScAAXPAWwABdEhbAAF0DFsAAXPkUwABc9MAMDtYLAITvnHGExYMqgVXAAP0dPgM9FcAAXSXADA6BCBbAAF1AFsAAXTYUwABdMcAMDtYLAITvnHGFAYNJScAAXVEcwABdYhTAAF1VwAwOlAkASAEAAZMAwAD9u0rAAF1oARTAAF1vwAwOgQgAPz0VwABdhMAMDrgKHMAAXYIUwABdhMAMDrgKAGQBAAGUAMAA/b0+A07AAF25wABdxAAAm51gA4jpASMewABdxsAA9ngCAAKCwABd0MAMDLoUwABd18AMDtYLAACAwABd68AMDJUcwABeJR7AAF4MmxUBAAGAwABeHsAMDJUAhZMBAAEWwABecxbAAF5tHMAAXlwWwABeS4LAAF5FwAwMupuenHpLAQABFsAAXmIUwABeXcAMDtYLAITvnHEAwAD9gYMewAD9H4atiZ0AmxwBYAOI6U7AAF6RwABenAAAm59gA4jpASMewABensAA9ngCAAKDwABeqMAMDOwUwABer8AMDtYLAACBwABew8AMDKMcwABe/R7AAF7kmxUBAAGBwABe9sAMDKMAhZMBAAEWwABfSxbAAF9FHMAAXzQWwABfI4PAAF8dwAwM7JuenHpLAQABFsAAXzoUwABfNcAMDtYLAITvnHEAwAD9gYMewAD9H4atiZ0AmxwBYAOI6UnAAF9lHMAAX3QUwABfacAMEZMNAEgBAAEUwABfd8AMEj4OAACI7T4CPRXAAF+PwAwOgQgmwABfjwEUwABfm8AMEZMNAGADiSQ9FcAAX7PADA64ChzAAF+xFMAAX7PADA64CgBkAQABlADAAP29PwacTjfAAF/swABgAsAAYl0AAJs9AWrAAF/tYAPAAP3kAgAAAQPAAGAWwABiXQAAAAICAsAAYB0AAACEmGADgxsAwABgKwAAAITzYAODGwAAYAOJlwE+CEnAAGA9HsAAYEHAAPZ4AgACgMAAYEvADBOKgcAAYFPADBOYAErAAGBgARbAAGBugMAAYGfADBOKhQCDSD9OwABgjsAAYJMAAIFUYAOcbgEcwABglS6bhgEAAYDAAGCdwAwTigCcOEnAAGCqHMAAYLOCwABgrsAME+xIAQABKwDAAP3xPgE9MMAAYMQkwABg/wMWwABg1IDAAGDNwAwTioRmgyknm6AWwABg+YDAAGDywAwTioC9gyE/TsAAYRbAAGEgAACboWADnG4BHMAAYSIum4YBAAGBwABhKsAME5gAnDhJwABhOxzAAGFJg8AAYT/ADBRoSAEAASsAwAD98T4BPTDAAGFaJMAAYZ0DFsAAYW6BwABhY8AME5iEZoMpJ5ugFsAAYZeBwABhjMAME5iAvYMhP0nAAGGpIRzAAGGzgsAAYa7ADBPsmxoBAAGDwABhv8AMFGgAnINKwABhywErP0nAAGHcFsAAYfoWwABh64HAAGHgwAwTmITFgyqBVcAA/R1KwABiAwEWwABiFYHAAGIKwAwTmIT/g0c/SsAAYikBNQAAAAEAXQPAAP07AWADiZcBHMAAYkYWwABiNYLAAGIwwAwT7JuenHpLAQABgcAAYkfADBOYAMAA/YEjHMAAYlSEAMAMFVJIAQABKwAAKxbAAGJUhADADBVSgx7AAP0fAWADiZcGnE83wABiYsAAYnzAAGOVAACFggFqwABiY2ADwAD95AIAAAEDwABij8AAY5UAAAACAgLAAGKeAAAAgpRgA4kkAMAAYqoAAACE82ADgxsAAGADiSQBPgNOwABixsAAYtEAAJuiYAOJlwEcwABi0y6bPQIAAhbAAGLtgMAAYujADBXphO+JKoHAAGL4wAwV9wCcTknAAGMJHMAAYxiCwABjDcAMFg5IAQABKwCJokrAAGMhASs/SsAAYzIBJsAAYzIBHMAAY2cewABjRpsVAQABgMAAY1jADBXpAIWTAQABFsAAY4GCwABjdsAMFg6GrYmdAJscYAOJJAacUDfAAGOawABjrcAAZLUAAJs/AWrAAGObYAPAAP3kAgAAAQPAAGO+wABktQAAAAMCAsAAY8UAAACEmGADgxsAwABj0gAAAIC9YAOItAABwABj3gAAAJtAYAPAAPrRAWrAAGPmYAPAAPrRAGADg30BPgNOwABj/8AAZAQAAIFUYAOcbgEcwABkBi6bhgEAAYDAAGQOwAwW4QCcOE7AAGQowABkLQAAg2FdA8AA/TsBYAODfQEjgsAAZDfADBb+FsAAZEWDwABkQMAMFyKbo5x+FsAAZF+DwABkWsAMFyKbpJx9AV0DwAD9OwFgA4N9SsAAZH8BHsAAZJWcDAIAAoTAAGSmwAwXS4HAAGSswAwW7wAGnFE3wABkusAAZNPAAGWGAACbQQFqwABku2ADwAD95AIAAAEDwABk5cAAZYYAAAACAQHAAGTsAAAAhJhgA4MbAAHAAGT6AAAAm0JgA8AA+tEBasAAZQNgA8AA+tEAXQPAAP07AWADg30BPgJOwABlHMAAZSEAAIFUYAOcbgEcwABlIy6bhgEAAYDAAGUrwAwX8wCcOErAAGU4ASOBwABlP8AMGAIWwABlToLAAGVJwAwYLZujnH4WwABlaILAAGVjwAwYLZuknH0BXQPAAP07AWADg30GnFI3wABli8AAZZ7AAGZiAACbQwFqwABljGADwAD95AIAAAEDwABlsMAAZmIAAAADAgLAAGW3AAAAhJhgA4MbAMAAZcQAAACAvWADiLQAAcAAZdAAAACbQGADwAD60QFqwABl2GADwAD60QBgA4N9AT4CTsAAZfPAAGX4AACDYV0DwAD9OwFgA4N9ARzAAGX6LptEAgABgMAAZg7ADBjIAZtCgsAAZh/ADBjlnFNKwABmLAEewABmQpwMAgACg8AAZlPADBkJgcAAZlnADBjWAAacUzfAAGZnwABmgMAAZwsAAJtEAWrAAGZoYAPAAP3kAgAAAQPAAGaTwABnCwAAAAIBAcAAZpoAAACEmGADgxsAAcAAZqgAAACbQmADwAD60QFqwABmsWADwAD60QBdA8AA/TsBYAODfQE+AUrAAGa/ARzAAGbGLpulm+UDAAKAwABm3cAMGZkcwABm5S6bhgEAAYDAAGbtwAwZmQCcOAGbQoHAAGb/wAwZqJxIBpxUN8AAZxDAAGcpwABnzwAAm0UBasAAZxFgA8AA/eQCAAABA8AAZzvAAGfPAAAAAgEBwABnQgAAAISYYAODGwABwABnUAAAAJtCYAPAAPrRAWrAAGdZYAPAAPrRAF0DwAD9OwFgA4N9AT4CTsAAZ2vAAGdwAACBVGADnG4BHMAAZ3Ium4YBAAGAwABnesAMGkYAnDhKwABnhwEjgcAAZ47ADBpVFsAAZ52CwABnmMAMGoCbppx8FsAAZ7SCwABnr8AMGoCbp5x7AV0DwAD9OwFgA4N9BpxVN8AAZ9TAAGflwABqNwAAm0kBasAAZ9VgA8AA/eQCAAABA8AAZ/jAAGo3AAAAAwICwABn/wAAAISYYAODGwDAAGgNAAAAmfFhAwNgA4N9YAODfWADwAD60VsAAcAAaGEAAACbqGADwAD60QFqwABodmADwAD60QBcAT4CTsAAaI/AAGiUAACBVGADnG4BHMAAaJYum4YBAAGAwABonsAMGxsAnDhGwABoq8AAaNDAAGi0AAAAhOFgA4mXABbAAGjIgMAAaMHADBsbhPqDRD4FTsAAaNzAAGjnAACE82ADgxsBFsAAaPOEwABo6cAMG5iE74mcTsAAaQjAAGkVAACbqV0DwAD9OwFgA4N9ARzAAGkXLptEAQABhcAAaSvADBu7AJxTTsAAaULAAGlPAACbql0DwAD9OwFgA4N9ARzAAGlRLptEAgABhcAAaWXADBu7AZtCKZxTPR7AAGmHnEIDAAMWwABpnYPAAGmYwAwbZ5unnHuGwABptsAMG9+BwABpxMAMGykAPR7AAGnVnEIEAAMWwABp64PAAGnmwAwbZ5umnHyHwABp/MAMHA+BwABqCsAMGykBhUQpBpxCN8AAajzAAGpIwABtcgABm6ub5QAAAAEDwABqWMAAbXIAAAAEAwPAAGptAAAAm6xdA8AA/TsBYAODfQDAAGqOAAAAm61dA8AA/TsBYAODfQDAAGqjAAAAmfFhAwNgA4N9YAODfWADwAD60VsAAcAAavcAAACFRGADwAD60QFqwABrAWADwAD60QBcAT4DTsAAaxPAAGsVAABiYAPAAPyXAZNOwABrGsAAaxwAAJfSYAPAAPyXAZNDwABrJSIcwABrLoTAAGsswAwdNWMBAAEWwABrPYDAAGswwAwczWHAAP1rAMAA/cUAHMAAa0mFwABrR8AMHUljAQABFsAAa1mBwABrS8AMHOJhwAD9awDAAP3FPgROwABrcMAAa3kAAJuuYAODfQEcwABrh4DAAGt7wAwczUsBAAGEwABriMAMHTUAwAD9Sk7AAGuZwABrowAAm69gA4N9ARzAAGuygcAAa6XADBziSwEAAYXAAGuzwAwdSQDAAP1KTsAAa8HAAGvMAACGmWADwAD8lwEewABr3ZwKAgAChsAAa+zADB27h8AAa/bADB3tAEnAAGwIHMAAbBcUwABsDMAMHh8IAGMBAAGTAMAA/cU+AT2MwABsKMAMHTUcwABsJoTAAGwowAwdNWQBAAGUAMAA/b1JwABsOBzAAGxHFMAAbDzADB4fCACAlwEAAZMAwAD9xz4BPY3AAGxYwAwdSRzAAGxWhcAAbFjADB1JZAEAAZQAwAD9vT4CScAAbHIhHsAAbHfAAPZ4AgAChsAAbIHADB27h8AAbIvADB3tAD4BPRzAAGyrgsAAbKPADBz3IAMAA4bAAGyswAwdu4fAAGy2wAwd7YPAAGzBwAwdFAAAPz2NwABtX8AMHUkcwABtXYXAAG1fwAwdSWQBAAGUAMAA/b0GnFY3wABtd8AAbZPAAG73AACbOwFqwABteGADwAD95AIAAAEDwABtpsAAbvcAAAABAQHAAG2tAAAAhJhgA4MbAABdA8AA/TsBYAOJlwE+A07AAG3BwABtzAABm7BdA8AA/W0CYAODG10DwAD9OwFgA4mXARbAAG3eHMAAbc4um4YBAAGAwABt1sAMH4UAnDibnpx6ScAAbfUcwABuBIHAAG35wAwfo0gBAAErAMAA/fFKwABuDQFqwABuFF0DwAD9OwFgA4mXhI8/SsAAbr4BHMAAbuscwABu1xbAAG7QgcAAbsXADB+jKcAA/ZCAqwEBYAOJlwE0wABu2wPAAG7bwABu6QAAAAEBAcAAbtwAAACA8l0DwAD9OwFgA4mXAABgA4mXAUrAAG7iARbAAG7kgsAAbuLADCBcgx7AAP0fAMAA/QSArQAAAADAAP0PBpxXN8AAbvzAAG8XwAB3zgAAm0oBasAAbv1gA8AA/eQCAAABA8AAbyfAAHfOAAAAAwICwABvOgAAAJtLXQPAAPz5AWADgosAwABvZAAAAJtMXQPAAPz5AWADgosAAcAAb4sAAACbTWADioABagBgA8AA/aF5YAOb8QE+CEbAAG/mAMAAb/MAAACItWADgosAgMAAb/rADCDTQT4DScAAcBQhHMAAcCgWwABwGS6bgZwzgxwBAAGDwABwMcAMISIAwAD+O0LAAHA3AD9GwABwR8AAcGnAAHBSAAAAhJhgA4MbABbAAHBgg8AAcFzADCEihIiCoD4GTsAAcH7AAHCDAACBVGADnG4BHMAAcI0WwABwhS6bbZvlnC5LAQABhMAAcI7ADCF0AMAA/YFJwABwnyEcwABwtBbAAHCqhMAAcKPADCF0hOGDK0gBAAErAImiPgE9NQAAAAEAXQPAAP4vAWADnG4BNQAAAAEAYAOcbgEcwABw0RbAAHDJLpttm+WcLksBAAEWwABw4xbAAHDZhMAAcNLADCF0hOGDK4TviZwAwAD9gSMcwABw74YAwAwiBkgBAAErAAArFsAAcO+GAMAMIgabdZx0AV0DwAD+LwFgA5xuIxzAAHEAhgDADCH0SAEAASsAACscwABxAIYAwAwh9IReAQABhcAAcQfADCGXAMAA/j4BYAPAAPrRP0nAAHEgIRzAAHE3FsAAcSuEwABxJMAMIXSE4oMsSAEAASsAiaI+AT01AAAAAQBdA8AA/i8BYAOcbgE1AAAAAQBgA5xuARzAAHFUFsAAcUwum22b5ZwuSwEAARbAAHFoFsAAcVyEwABxVcAMIXSE4oMshO+JnADAAP2BIxzAAHF0hgDADCLpSAEAASsAACsWwABxdIYAwAwi6Zt4nHUBXQPAAP4vAWADnG4jHMAAcYKGAMAMItdIAQABKwAAKxzAAHGChgDADCLXhF4BAAGFwABxicAMIZcAwAD+PgFgA8AA+tE/RsAAcaLAAHHRwABxqwAAAIThYAOJlwAWwABxv4TAAHG4wAwhdITjgy0+AT01AAAAAQBdA8AA/i8BYAOcbgE1AAAAAQBgA5xuARzAAHHlFsAAcd0um22b5ZwuSwEAARbAAHHwhsAAcebADCOahO+JnADAAP2BIxzAAHH8hwDADCPQSAEAASsAACsWwABx/IcAwAwj0Jt5nHYBXQPAAP4vAWADnG4jHMAAchCHAMAMI75IAQABKwAAKxzAAHIQhwDADCO+hF4BAAGFwAByF8AMIZcAwAD+PgFgA8AA+tE9HMAAcjoWwAByMS6bbZvlnC6EXgEAAYTAAHJBwAwhdADAAP2KPRzAAHJvFsAAclIum4Kb5ZwvhF4BAAGEwABydsAMIXQAwAD9ij0cwABynBbAAHKNLpuBnDOEXgEAAYPAAHKjwAwhIgDAAP4+ScAAcxIhHMAAczQWwABzFi6bg5vlnDBIAQABKwDAAP3xPgE9F8AAc2MWwABzRS6bg5vlnDCbbimcIT9JwABzgiIWwABzoxbAAHOGLpuCm+WcL4O3wAD9kwAhHMAAc9eCwABzucAMIP5IAQABKwDAAP3xPgJOwABz9cAAc/oAAJuxXQPAAP4vAWADgosBHsAAdArAAMGoAQFgA4KLARbAAHQ6gsAAdBzADCD+huqKhABGwAB0TADAAHRXAAAAhJhgA4MbABbAAHR+FsAAdGEum4Kb5Zwvg2jAAP2PQT4DScAAdI4hHMAAdJiDwAB0k8AMJVCDHAEAARbAAHSohMAAdKHADCWRhLKDRQDAAP47QsAAdLsAP07AAHTdwAB05gAAm4VdA8AA/TsBYAOJlwEcwAB1BBbAAHToLpuCm+WcL0sBAAGEwAB1BcAMJZEAwAD9gUXAAHUWAcAAdR/AAHUhAABiYAPAAPyXAZMBHMAAdSiGwAB1JsAMJjJjAQABFsAAdTOFwAB1KsAMJfFhwAD9awDAAP3FAY7AAHU7wAwmMhzAAHU9hsAAdTvADCYyZAEAAZUAwAD9vT4BPRzAAHVPLpuAm+UDAAOEwAB1f8AMJZEcwAB1j4XAAHWHwAwl8UsBAAGGwAB1kMAMJjIAwAD9ShzAAHWchcAAdZTADCXxSwEAARzAAHWfhsAAdZ3ADCYyZAEAAZQAwAD9vQDAAP1KAJwtP07AAHXrwAB1/gAAm7JdA8AA/TsBYAODGwEewAB2BMAA+DUBAWADgxsBkwBOwAB2G8AAdi4AAJuzYAPAAPyXARbAAHYwLpuEm+WcMUbAAHZDAMAAdlAAAACItWADgosAgcAAdlfADCDoQT4DScAAdnUcwAB2iBbAAHZ5LpuBnDODHAEAAYXAAHaRwAwnTwDAAP47QsAAdpcAP0bAAHanwAB2ycAAdrIAAACEmGADgxsAFsAAdsCFwAB2vMAMJ0+EiIKgPgE9HMAAdtMum7Sb5QMAAobAAHbpwAwnoB7AAHb1wADBpgABYAODGwAAAZu1g8AAdxzADCb/nEU9HMAAd04WwAB3Py6bgZwzVgEAAYXAAHdSwAwnTwDAAP48PRzAAHdiLpu2m+UCAAKDwAB3kcAMJv+EwAB3pcAMJyoAnERKwAB3vwEuBpxYN8AAd9PAAHfuwAB9lgAAm04BasAAd9RgA8AA/eQCAAABA8AAeADAAH2WAAAAAgEBwAB4EQAAAISIXQPAAPz5AWADgxsAAcAAeCYAAACbT2ADwAD60QFqwAB4N2ADwAD60QBgA5vxAT4HScAAeEUWwAB4UYDAAHhJwAwod4FVwAD9HUrAAHhaAS4/TsAAeH3AAHiDAACW1V0DwAD9OwFgA5xuAR7AAHiJwAD4NQEBYAOcbgGTAEnAAHihgcAAeKXADCiNPgVOwAB4zsAAeN8AAJu3XQPAAP4vAWADnG4BHsAAeOXAAMGmAAFgA5xuAABOwAB5D8AAeRgAAJu4XQPAAP07AWADnG4BMcAAeSZgA5xuAEbAAHkwwAB5TsAAeTsAAACEmGADgxsAgMAAeUXADCh3PgJOwAB5Y8AAeWgAAIFUYAOcbgEcwAB5ai6bhgEAAYXAAHlywAwpYgCcOD0cwAB5jITAAHmDwAwpN1YBAAGGwAB5kMAMKXwAwAD9TEPAAHmmFsAAebaEwAB5rcAMKTeDt8AA/R4+Ak7AAHnXwAB53AAAgVRgA5xuARzAAHnnhMAAed7ADCk3hiYAAAAAwAD9WknAAHn9HMAAehKDwAB6AcAMKQ1WAQABhcAAehbADCnhAMAA/jw+Az0cwAB6MoTAAHopwAwpN4ClAQABFsAAej6FwAB6OcAMKeGbdZx0AMAA/U09HMAAemOEwAB6WsAMKTeApQEAARbAAHpvhcAAemrADCnhm3mcdgDAAP1NPRzAAHqXhMAAeo7ADCk3gKUBAAEWwAB6o4XAAHqewAwp4Zt4nHUAwAD9TT89HMAAetCCwAB6ysAMKNKApQEAAYPAAHrXwAwpDQDAAP1NPgFGwAB6/cAAexvAAHsIAAAAhJhgA4MbAIDAAHsSwAwodz4CTsAAezDAAHs1AACBVGADnG4BHMAAezcum4YBAAGDwAB7P8AMKuAAnDg9HMAAe1aCwAB7UMAMKNJWAQABhMAAe1rADCr6AMAA/Uw9HMAAe3qCwAB7dMAMKNKArgEAATTAAHt/A8AAe3/AAHvZAAAAAgICwAB7iwAAAIHXYAOcbgDAAHuZAAAAgk5gA5xuAABgA8AA/JcBPgFKwAB7pAEcwAB7vhbAAHutg8AAe6vADCtrm7mccoGNAQABFsAAe8KEwAB7wMAMK3mbuZxyAMAA/b4AwAD9TkbAAHvhwAB8AMAAe/EAAACBVGADnG4AgsAAe/nADCjSPgdOwAB8DsAAfBUAAISYYAODGwEWwAB8HIPAAHwXwAwr2ITvnHE9HMAAfC0um7qb5QIAAoTAAHxDwAwr8oPAAHxLwAwr2ACcRj0cwAB8WC6bu5vlAgAChMAAfHHADCvyg8AAfHnADCvYAJxHPRfAAHyLg8AAfIbADCvYm7wrnIA9F8AAfK+DwAB8qsAMK9ibvSucfz0cwAB81i6bpZvlAwAChMAAfO3ADCvyg8AAfPXADCvYAZtCKZxIPRzAAH0RLpulm+UDAAKEwAB9KMAMK/KDwAB9MMAMK9gBm0IqnEhAHMAAfVkum74AAAAAnFnAAH1ZwAB9fwBKwAB9hwEuBpxZN8AAfZvAAH2gwAB/OgAAm74AAAABA8AAfcTAAH86AAAAAAAAAGADwAD60QE+AkbAAH3NwAB97MAAfdgAAACA9WADgxsAFsAAfeYWwAB93S6bbZvlnC6DaMAA/Y8+AknAAH30IRzAAH4IFsAAffkum4GcM4McAQABFsAAfhOAwAB+EcAMLSiEsoNFAMAA/js+AT0wwAB+MB/AAH46wAD8NwEAASTAAH50BSebv4DAAH5ewAwtKCebwBbAAH5qgMAAfmjADC0ohGaDKSeDJgA/ScAAfoUiIRzAAH6VFsAAfouAwAB+icAMLSiE4YMrSAEAASsAiaIAHMAAfsAcwAB+qBbAAH6gLpttm+WcLksBAAEWwAB+tRbAAH6rgMAAfqnADC0ohOGDK4TviZwAwAD9gUgBAAErAMAA/fE+AT0wwAB+0x/AAH7dwAD8NwEAASTAAH8WBSebwYDAAH8AwAwtKCebwBbAAH8MgMAAfwrADC0ohGaDKSeDJgA/SsAAfysBKQacWjfAAH8/wAB/VcAAgZoAAJs+AWrAAH9AYAPAAP3kAgAAAQPAAH9mwACBmgAAAAICAsAAf3EAAACClGADiZcAwAB/fQAAAITzYAODGwAAYAOJlwE+BEAWwACAwhbAAICzgcAAgKjADC6zhMWDKoO3wAD9HsAAgKjAAIDMAEnAAIDTHMAAgOYWwACA3IDAAIDXwAwupYTviZxIAQABgcAAgOnADC6zAMAA/fE+AUrAAID9ARbAAIEPgcAAgQTADC6zhQCDSD9OwACBLsAAgTIAAICrXQPAAP1tAmADgxtdA8AA/TsBYAOJlwE1AAAAAQBgA5xuARzAAIE0LpuGAQABFsAAgUGAwACBPMAMLqWE74mcAJw4IxzAAIFNggDADC9eSAEAASsAACsWwACBTYIAwAwvXpuenHoBXQPAAP1tAmADgxtdA8AA/TsBYAOJl0rAAIFkASMcwACBb4LAAIFrwAwvOkgBAAErAMAA/fErNQAAAAEAXQPAAP07AWADiZcBHMAAgYOCwACBgMAMLzpLAQABgcAAgYTADC6zAMAA/YEjHMAAgZGDAMAML+NIAQABKwAAKxbAAIGRgwDADC/jgx7AAP0fAWADiZcBYAOJlwacQzfAAIGfwACBpMAAgwkAAJs4m+UAAAABA8AAga/AAIMJAAAAAQEBwACBvgAAAIbqXQPAAP07AWADgosAAFwBPgJGwACCDMAAgivAAIIVAAAAhEhgA4KLAIDAAIIgwAwwbD4CRsAAgjPAAIJawACCPAAAAITvYAODGwAWwACCUYHAAIJJwAwwj4SIgqA+AT0cwACCZC6btJvlAgACgsAAgnrADDCxHsAAgonAAMGmAAFgA4MbAAAAnEU9HMAAgrUWwACCpi6bgZwzVgEAAYHAAIK5wAwwjwDAAP48PRzAAILOLpu2m+UCAAIWwACC/RbAAIL0Lpttm+WcLoNowAD9j5MAnEQGnEQ3wACEScAAhE7AAIncAACbtpvlAAAAAQPAAIRzwACJ3AAAAAICAsAAhIsAAACEiF0DwAD8+QFgA4MbAMAAhJgAAACbwmADwAD8lwAAXAE+Ak7AAITEwACExgAAYmADwAD8lwGBwACEyMAMMYdGwACE7sAAhQzAAIT5AAAAhJhgA4MbAIDAAIUDwAwxcj4NTsAAhR/AAIUkAACBVGADnG4BHMAAhS4WwACFJi6bbZvlnC5LAQABg8AAhS/ADDHBAMAA/YFJwACFPiEcwACFUxbAAIVJg8AAhULADDHBhOGDK0gBAAErAImiPgE9HMAAhZsWwACFixzAAIVuFsAAhWYum22b5ZwuSwEAARbAAIWAFsAAhXaDwACFb8AMMcGE4YMrhO+JnADAAP2Bm3WcdFYBAAGEwACFn8AMMdsAwAD+PD9JwACFtCEcwACFyxbAAIW/g8AAhbjADDHBhOKDLEgBAAErAImiPgE9HMAAhhIWwACGBRzAAIXmFsAAhd4um22b5ZwuSwEAARbAAIX6FsAAhe6DwACF58AMMcGE4oMshO+JnADAAP2Bm3icdVYBAAGEwACGFsAMMdsAwAD+PD9GwACGK8AAhlrAAIY0AAAAhOFgA4mXABbAAIZIg8AAhkHADDHBhOODLT4BPRzAAIaVFsAAhoIcwACGbBbAAIZkLpttm+WcLksBAAEWwACGd4XAAIZtwAwzFITviZwAwAD9gZt5nHZWAQABhMAAhpnADDHbAMAA/jw9HMAAhq4um8Ob5QEAAYPAAIbFwAwxwQCcTEnAAIbVIRzAAIbqFsAAhuCDwACG2cAMMcGE4YMrSAEAASsAiaI+AT0cwACG/S6bxJvlAgAChMAAhw/ADDHbFsAAhxyDwACHFcAMMcGE4YMrAJxLP0nAAIc2IRzAAIdNFsAAh0GDwACHOsAMMcGE4oMsSAEAASsAiaI+Aj01AAAAAQBgA5vsARbAAIdgLps2nDIjHMAAh2+FAMAMNBpIAQABKwAAKxzAAIdvhQDADDQamzQCAAIug8AAh3vADDHBAJvuAVw9HMAAh4wum8Sb5QIAAoTAAIeewAwx2xbAAIerg8AAh6TADDHBhOKDLACcSz9GwACHx8AAh/zAAIfWAAAAhOFgA4mXABbAAIfqg8AAh+PADDHBhOODLT4BPRzAAIgGLpvEm+UCAAKEwACIGMAMMduFwACIHsAMNJcAnEs9HMAAiDkum6Wb5QMAAoPAAIhQwAwxwYTAAIhYwAwx2wGbQimcSD0cwACIdC6bpZvlAwACg8AAiIvADDHBhMAAiJPADDHbAZtCKpxIScAAiLEcwACIuoTAAIi1wAwx20gBAAErAMAA/fE+AT0wwACIzSTAAIkHBSebxRbAAIjpg8AAiOLADDHBgL2DISebxhbAAIj9g8AAiPbADDHBhGaDKSeBaj9JwACJFyEcwACJMRbAAIkghMAAiRvADDHbm7mcckgBAAGCwACJNMAMMZ0AwAD9uz4BPTDAAIlBJAAKJ5vHFsAAiWyEwACJZ8AMMdubuZxyJ5vIgsAAiYLADDGdJ5vJJ5vKFsAAiaGDwACJmsAMMcGAvYMhJ5vGFsAAibWDwACJrsAMMcGEZoMpJ4FqPz2KwACJz8AMMZ0cwACJ0ILAAInPwAwxnWQBAAGUAMAA/b0GnEU3wACK68AAiu/AAI/0AACbtJvlAAAAAQPAAIsEwACP9AAAAAMCAsAAiwsAAACE72ADgxsAwACLIQAAAJvLXQPAAP4vAWADgxsAAcAAi0IAAACbtV0DwAD9OwFgA4MbAWoAYAPAAP2heWADwAD8lwE+D07AAItawACLXwAAgVRgA5xuARzAAItpFsAAi2Eum22b5ZwuSwEAAYDAAItqwAw2WADAAP2BScAAi3ohHMAAi4ODwACLfsAMNqRIAQABKwDAAP3xPgFKwACLlAEWwACLoIPAAIubwAw2pJrZnHM/ScAAi7IhHMAAi8SBwACLt8AMNmZWAQABgMAAi8jADDZYAMAA/jw+AT0wwACL3CTAAIwSAiebzBbAAIwMgMAAjALADDZYgL2DIT89i8AAjB/ADDakH8AAjCqchgEAAYDAAIw1wAw2WABOwACMSsAAjFUAAJvNYAPAAPyXARzAAIxXlIHGAAAAAMAA/LpJwACMXyEcwACMdxbAAIxtgMAAjGPADDZYhOGDK0gBAAErAImiPgE9jMAAjIjADDd6HsAAjJXAANC3AgFgA8AA/JcChMAAjKTADDd6HMAAjLoum7Sb5QMAAhbAAIzkFsAAjNqAwACM0MAMNliE4YMrhO+JnIHAAIzvwAw2ZgGbtYLAAI0YwAw2fJxFAD9JwACNMSEcwACNSxbAAI0/gMAAjTXADDZYhOKDLEgBAAErAImiPgE9jMAAjVzADDd6HsAAjWnAANC3AgFgA8AA/JcChMAAjXjADDd6HMAAjY4um7Sb5QMAAhbAAI26FsAAja6AwACNpMAMNliE4oMshO+JnIHAAI3FwAw2ZgGbtYLAAI3uwAw2fJxFAD9GwACOB8AAjjnAAI4QAAAAhOFgA4mXABbAAI4ngMAAjh3ADDZYhOODLT4BPYzAAI5BwAw3eh7AAI5OwADQtwIBYAPAAPyXAoTAAI5dwAw3ehzAAI5zLpu0m+UDAAIWwACOk4XAAI6JwAw4wITviZyBwACOnsAMNmYBm7WCwACOx8AMNnycRQA9HMAAjuAum7qb5QIAAoDAAI72wAw2WIPAAI8BwAw2pACcRj0cwACPDC6bu5vlAgACgMAAjyXADDZYg8AAjzDADDakAJxHPRfAAI9Ag8AAjzvADDakm7k1AAAAAQBgA8AA/JcBFsAAj1Mum4Sb5ZwxNQAAAAEAYAPAAPyXARfAAI9TLpuEm+UcwACPYIUAwAw5lmQBAAGUAMAA/b2cMYUAwAw5lpxyPRzAAI9xFsAAj2kum22b5ZwugL8CAAKAwACPcsAMNliDwACPf8AMNqQAwAD9gj01AAAAAQBdA8AA/TsBYAODGwGCwACPicAMNnwjHMAAj5aFAMAMOhRIAQABKwAAKxzAAI+WhQDADDoUVgEAAYDAAI+awAw2WADAAP1MAVw9HMAAj7eBwACPqsAMNmaEXgEAAYDAAI++wAw2WADAAP4+SsAAj84BF8AAj9qDwACP1cAMNqSa2RzAAI/thMAAj+LADDd6ZAEAAZQAwAD9vZxzBpxGN8AAj/nAAI/+wACWjAAAm7qb5QAAAAEDwACQE8AAlowAAAACAgLAAJAaAAAAhO9gA4MbAMAAkDAAAACBVGADnG4AAFwBPgFJwACQPCEcwACQVhbAAJBKgMAAkEDADDrchOKDLEgBAAErAImiPgdOwACQcsAAkHwAAJvOYAOcbgEcwACQhhbAAJB+Lpttm+WcLksBAAEWwACQnRbAAJCRgMAAkIfADDrchOKDLITviZwAwAD9gU7AAJC9wACQ1QAAm6ddA8AA/TsBYAODfQExwACQ32ADg30ARsAAkOnAAJEnwACQ9QAAAJvPYAODfQAWwACRDoLAAJEEwAw7JZunnHs+AUnAAJExIiElwACRQYTAAJE1wAw7l2ADhBIBIiXAAJFrhMAAkV/ADDuXYAOEEgAhFsAAkZgUwACRjMAMO5cEAWADhBKFQYQtPgE9HMAAkdaDwACRvsAMO2xWAQABhMAAkdrADDuXAMAA/Uw/TsAAkg7AAJIeAACbpl0DwAD9OwFgA4N9ATHAAJIoYAODfQBGwACSMsAAkmjAAJI+AAAAm89gA4N9ABbAAJJXgsAAkk3ADDslm6acfD4BScAAknIiISXAAJKChcAAknbADDxQYAOEEgEiJcAAkqyFwACSoMAMPFBgA4QSACEWwACS2RTAAJLNwAw8UAUBYAOEEoVBhC0+AT0cwACTD4TAAJL/wAw8JVYBAAGFwACTE8AMPFAAwAD9TD89F8AAkz+BwACTOsAMOuqbp4PAAJNZwAw7bJx7PRfAAJN9gcAAk3jADDrqm6aEwACTj8AMPCWcfD4GTsAAk7fAAJO/AACElF0DwAD9OwFgA4N9ARfAAJPGgcAAk8HADDrqm6cxwACT6GADg30AnHtOwACT9sAAk/4AAJtCXQPAAP07AWADg30BF8AAlAWBwACUAMAMOuqbpjHAAJQfYAODfQCcfEbAAJQpAMAAlDgAAACEnWADhBIAFsAAlE+AwACURcAMOtyEioMwQT4CScAAlGUWwACUc4TAAJRpwAw9h4QehCVCwACUfQA/ScAAlI8cwACUohbAAJSdhMAAlJPADD2HgmuEFUgBAAFqwACUs2ADhFKEzQDAAP3xPgE9HMAAlM+DwACUx8AMPU1WAQABhMAAlNPADD2HAMAA/Uw+AT0cwACVAoLAAJT6wAw9GFYBAAGEwACVBsAMPYcAwAD9TEbAAJUqAMAAlTUAAACEm2ADg5wAFsAAlUiAwACVPsAMOtyEi4MuQT4DScAAlVoWwACVZITAAJVewAw+RIQeg65CwACVbgA/ScAAlYAWwACVioTAAJWEwAw+RIUdg7A+AT0cwACVsYLAAJWpwAw9GFYBAAGEwACVtcAMPkQAwAD9TD9JwACVzxbAAJXZhMAAldPADD5EhR6DsT4BPRzAAJYAg8AAlfjADD1NVgEAAYTAAJYEwAw+RADAAP1MPz0cwACWLILAAJYkwAw9GICuAQABasAAlkBhAwJgA4N9YAODfWADwAD8l8AAnSQAwAD9Tj0cwACWX4PAAJZXwAw9TYCuAQABasAAlnNhAwJgA4N9YAODfWADwAD8l8AAnSQAwAD9TgacRzfAAJaRwACWlsAAmWUAAJu7m+UAAAABA8AAlq7AAJllAAAAAgICwACWtQAAAITvYAODGwDAAJbLAAAAgVRgA5xuAABcAT4FTsAAluQAAACb0F0DwAD9OwFgA4N9AE7AAJcHAAAAm9FdA8AA/TsBYAODfQBJwACXHRzAAJc1FsAAlyuAwACXIcAMP4qE4YMrSAEAASsAiaI+AT2KwACXRsAMP6yLwACXWcAMP8JqwACXbF0DwAD9OwFgA4N9wACdJz4DTsAAl5zAAJemAACboWADnG4BHMAAl7AWwACXqC6bbZvlnC5LAQABFsAAl8UWwACXu4DAAJexwAw/ioThgyuE74mcAMAA/YE9isAAl9fADD+sFsAAl/SEwACX6sAMQCebpJx9PYvAAJgWwAw/whbAAJgzhMAAmCnADEAnm6Ocfj0XwACYVoHAAJhRwAw/mJukHsAAmHOcSQMAAhbAAJiRgcAAmIzADD+Ym6ece4LAAJiqwAw/rAGb0imcfT0XwACY6YHAAJjkwAw/mJujHsAAmP6cSQMAAhbAAJkcgcAAmRfADD+Ym6acfIPAAJktwAw/wgGb0imcfgacSDfAAJlqwACZd8AAnikAAJulm+UAAAABA8AAmY3AAJ4pAAAAAwICwACZlAAAAITvYAODGwDAAJmqAAAAgVRgA5xuAAHAAJm8AAAAm0JgA8AA+tEBagBgA8AA/aF5XQPAAP07AWADg30BPgxJwACZzBzAAJnVgcAAmdDADEFUSAEAASsAwAD98T4BPTDAAJnmJMAAmicDFsAAmfmAwACZ78AMQUaEZoMpJ5ugFsAAmiGAwACaF8AMQUaAvYMhP07AAJpAwACaSAAAhJRdA8AA/TsBYAODfQEjgsAAmlLADEFjFsAAmmGBwACaXMAMQVSbvJyAFsAAmnmBwACadMAMQVSbvZx/AV0DwAD9OwFgA4N9ScAAmpchHMAAmqODwACam8AMQd5IAQABKwDAAP1lSsAAmqwBg8AAmrPADEHeP07AAJrNwACa4QAAm9NdA8AA/TsBYAODfQExwACa62ADg30ATsAAmwDAAJsJAACbrl0DwAD9OwFgA4N9ASOCwACbE8AMQWMWwACbIoHAAJsdwAxBVJumnHwWwACbOYHAAJs0wAxBVJunnHsBXQPAAP07AWADg31PwACbVsAAm1sAAAGb1GEDAWADiZdcAAPAAJtmwACc0wAAAAEBAcAAm3EAAACClGADiZcAAFwBPgRJwACbfxzAAJuIh8AAm4PADEL6SAEAASsAiaJKwACbkQA/TsAAm6zAAJu2AACbr10DwAD9OwFgA4N9ARzAAJu4Lpulm+UDAAIWwACb34fAAJvawAxC+oTviZwcwACb8hbAAJvqLpttm+WcLksBAAEWwACb+IfAAJvzwAxC+oTviZwAwAD9gQGbQoLAAJwXwAxBY5xIPRXAAJwnwAxDMAgewACcM5xKAgAChcAAnFLADEKCFMAAnFzADEMwCAAAPYzAAJxuwAxCXx7AAJydnAkCAAKEwACcrsAMQl8UwACcw8AMQzAIAAA9HMAAnOWGwACc2sAMQtkgAQABFsAAnPCAwACc5sAMQUaE4YMrAAA9HMAAnQuGwACdAMAMQtkgAQABFsAAnRaAwACdDMAMQUaE4oMsAAA9HMAAnUMWwACdMoDAAJ0owAxBRoTjgy2D/QEAAYbAAJ1LwAxC2QDAAP0JPYvAAJ1dwAxB3h7AAJ1nnEkCAAKFwACdd8AMQoKEwACdgcAMQl8AScAAnZuCwACdn8AMQWM+AT0XwACdtYHAAJ2wwAxBVJu8g8AAncjADEHenIA+AT0XwACd6YHAAJ3kwAxBVJu9g8AAngTADEHenH9KwACeFwGDwACeHsAMQd4GnEk3wACe5cAAnvnAAKVHAAGb1ZvlAAAAAQPAAJ8IwAClRwAAAAMCAsAAnx0AAACbrl0DwAD9OwFgA4N9AMAAnzQAAACbr10DwAD9OwFgA4N9AAHAAJ9LAAAAm9JgA8AA+tEBasAAn2BgA8AA+tEAXQPAAP07AWADg30BPglOwACfe8AAn4IAAIF2XQPAAP07AWADg30BNcAAn4wAAAEAXQPAAP07AWADg30BMcAAn4xgA4N9ADUAAAABAFsBF8AAn5CDwACfjsAMRYVhHMAAn7EWwACfqoDAAJ+hwAxFFmHAAP1rZAEAARbAAJ+9gcAAn7PADEUrYcAA/WsAwAD9vcAA/WmDAMAMRYVOwACgFsAAoCEAAIdIYAPAAPyXAZNOwACgLsAAoDAAAGJgA8AA/JcBk07AAKA1wACgNwAAl9JgA8AA/JcBk0PAAKBAIhzAAKBJhcAAoEfADEYOYwEAARbAAKBUgMAAoEvADEUWYcAA/WsAwAD9xQAcwACgYIbAAKBewAxGImMBAAEWwACgbIHAAKBiwAxFK2HAAP1rAMAA/cVBPgZOwACgg8AAoJIAAJvWYAODfQEcwACgnIDAAKCUwAxFFksBAAGFwACgncAMRg4AwAD9Sk7AAKCuwACgvgAAm9dgA4N9ARzAAKDJgcAAoMDADEUrSwEAAYbAAKDKwAxGIgDAAP1KScAAoNQigsAAoNjADEVBABbAAKD+h8AAoO/ADEaVhB+DiD4CPY3AAKEWwAxGDhzAAKEUhcAAoRbADEYOZAEAAZQAwAD9vULAAKEhAD9JwAChOSKCwAChPcAMRUEAFsAAoWQUwAChVMAMRscIAIQfg4g+Aj2OwAChfMAMRiIcwACheobAAKF8wAxGImQBAAGUAMAA/b1CwAChhwA/TsAAoaPAAKGuAACGmWADwAD8lwEewAChyZwKAgACh8AAodjADEaVFMAAoejADEbHCAAAScAAogAcwACiDxTAAKIEwAxHlQkAYwEAAZMAwAD9xT4CPRzAAKIkg8AAoh7ADEVsgL8CAAI1AAAAAQBgA8AA/JcBhMAAoiXADEX5NQAAAAEAYAPAAPyXAYzAAKIlwAxF+RzAAKIvFADADEf9CgBkAQABlADAAP29FADADEf9CgCHwACiNcAMRpUAwAD9Sz2NwACiT8AMRg4cwACiTYXAAKJPwAxGDmQBAAGUAMAA/b1JwACiXxzAAKJuFMAAomPADEeVCQCAlwEAAZMAwAD9xz4CPRzAAKKDg8AAon3ADEVsgL8CAAI1AAAAAQBgA8AA/JcBhMAAooTADEX5NQAAAAEAYAPAAPyXAYzAAKKEwAxF+RzAAKKOFADADEiuCgBkAQABlADAAP29FADADEiuCgAUwACilMAMRscIAADAAP1LPY7AAKKvwAxGIhzAAKKthsAAoq/ADEYiZAEAAZQAwAD9vT4DPRzAAKLPg8AAosnADEVsgL8CAAI1AAAAAQBgA8AA/JcBhMAAotDADEX5NQAAAAEAYAPAAPyXAYzAAKLQwAxF+RzAAKLaFADADElBCgBkAQABlADAAP29FADADElBCgCHwACi4MAMRpUAwAD9Sz2NwACi+sAMRg4cwACi+IXAAKL6wAxGDmQBAAGUAMAA/b09jsAAowfADEYiHMAAowWGwACjB8AMRiJkAQABlADAAP29Q8AAo4EcwACjioXAAKOIwAxGDmMBAAEWwACjlYDAAKOMwAxFFmHAAP1rAMAA/cVBPgNOwACjrMAAo7sAAJvWYAODfQEcwACjxYDAAKO9wAxFFksBAAE1AAAAAQBgA8AA/JcBhcAAo8bADEYONQAAAAEAYAPAAPyXAY3AAKPGwAxGDhzAAKPHhwDADEo0ZAEAAZQAwAD9vYcAwAxKNADAAP1KScAAo9IigsAAo9bADEVBABbAAKP8h8AAo+3ADEoQhB+DiELAAKQIAD89HMAApB6DwACkGMAMRWyAvwIAAjUAAAABAGADwAD8lwGEwACkH8AMRfk1AAAAAQBgA8AA/JcBjMAApB/ADEX5HMAApCkUAMAMSr0IAGQBAAGUAMAA/b0UAMAMSr0IAIfAAKQvwAxKEADAAP1LQ8AApEkcwACkUobAAKRQwAxGImMBAAEWwACkXoHAAKRUwAxFK2HAAP1rAMAA/cVBPgNOwACkdcAApIUAAJvXYAODfQEcwACkkIHAAKSHwAxFK0sBAAE1AAAAAQBgA8AA/JcBhsAApJHADEYiNQAAAAEAYAPAAPyXAY7AAKSRwAxGIhzAAKSShwDADEtsZAEAAZQAwAD9vYcAwAxLbADAAP1KScAApJ0igsAApKHADEVBABbAAKTIh8AApLjADEtIhB+DiELAAKTUAD89HMAApOqDwACk5MAMRWyAvwIAAjUAAAABAGADwAD8lwGEwACk68AMRfk1AAAAAQBgA8AA/JcBjMAApOvADEX5HMAApPUUAMAMS/UIAGQBAAGUAMAA/b0UAMAMS/UIAIfAAKT7wAxLSADAAP1LPRfAAKUdg8AApRbADEVsYYTAAKUmwAxF+cAA/WlKwAClNgGDwAClPcAMRWwGnEo3wACmFsAApirAAKoFAAGb2JvlAAAAAQPAAKZIwACqBQAAAAICAsAApl0AAACbrl0DwAD9OwFgA4N9AMAApnQAAACbr10DwAD9OwFgA4N9AABdA8AA/TsBYAODfQE+CE7AAKaSwACmmQAAgXZdA8AA/TsBYAODfQE1wACmowAAAQBdA8AA/TsBYAODfQExwACmo2ADg30ANQAAAAEAWwEXwACmp4LAAKalwAxM9WEWwACmuoHAAKawwAxMt2HAAP1rwAD9aYIAwAxM9U7AAKbKwACm1QAAh0hgA8AA/JcBk07AAKbiwACm5AAAYmADwAD8lwGTTsAApunAAKbrAACX0mADwAD8lwGTQ8AApvQiHMAApv2EwACm+8AMTV1jAQABFsAApwiAwACm/8AMTKJhwAD9awDAAP3FABzAAKcUhcAApxLADE1xYwEAARbAAKcggcAApxbADEy3YcAA/WsAwAD9xT4ETsAApzfAAKdGAACb1mADg30BHMAAp1CAwACnSMAMTKJLAQABhMAAp1HADE1dAMAA/UpOwACnYsAAp3IAAJvXYAODfQEcwACnfYHAAKd0wAxMt0sBAAGFwACnfsAMTXEAwAD9Sk7AAKeMwACnlwAAhplgA8AA/JcBHsAAp7KcCgIAAobAAKfBwAxN44fAAKfRwAxOFQBJwACn6RzAAKf4FMAAp+3ADE5HCABjAQABkwDAAP3FPgE9jMAAqAnADE1dHMAAqAeEwACoCcAMTV1kAQABlADAAP29ScAAqBkcwACoKBTAAKgdwAxORwgAgJcBAAGTAMAA/cc+Aj0cwACoPYLAAKg3wAxM3IC/AgACNQAAAAEAYAPAAPyXAYPAAKg+wAxNSDUAAAABAGADwAD8lwGLwACoPsAMTUgcwACoSBQAwAxO8QkAZAEAAZQAwAD9vRQAwAxO8QkAh8AAqE7ADE4VAMAA/Us9jcAAqGnADE1xHMAAqGeFwACoacAMTXFkAQABlADAAP29PgE9jcAAqP3ADE1xHMAAqPuFwACo/cAMTXFkAQABlADAAP29Q8AAqX4cwACph4XAAKmFwAxNcWMBAAEWwACpk4HAAKmJwAxMt2HAAP1rAMAA/cU+AT0cwACpqYLAAKmjwAxM3IC/AgACNQAAAAEAYAPAAPyXAYPAAKmqwAxNSDUAAAABAGADwAD8lwGLwACpqsAMTUgcwACptIYAwAxP1WQBAAGUAMAA/b2GAMAMT9UcwACpw4HAAKm6wAxMt0sBAAE1AAAAAQBgA8AA/JcBhcAAqcTADE1xNQAAAAEAYAPAAPyXAY3AAKnEwAxNcRzAAKnFhgDADFAuZAEAAZQAwAD9vYYAwAxQLgDAAP1KAMAA/Us9F8AAqduCwACp1MAMTNxhg8AAqeTADE1IwAD9aUrAAKn0AYLAAKn7wAxM3AacSzfAAKoKwACqD8AArw8AAJvEm+UAAAABA8AAqiDAAK8PAAAAAgICwACqLAAAAJtyYAOcbgDAAKo/AAAAhOFgA4mXAABcAT4CTsAAqlvAAKplAACboWADnG4BHMAAqm8WwACqZy6bbZvlnC5LAQABFsAAqnqBwACqcMAMUOGE74mcAMAA/YFJwACqihbAAKqmFsAAqpiBwACqjsAMUOGFLImagVXAAP0dPgNJwACqtxzAAKrXFsAAqsWCwACqu8AMUPWbnpx6SAEAASsAwAD98UrAAKrgAD89NQAAAAEAYAOcbgGAwACrGcAMUNMjHMAAqzMWwACrIYPAAKshwAxRhZuenHpIAQABKwDAAP3xF8AAqyGDwACrIcAMUYWbnjLAAKtPYAODG10DwAD9OwFgA4mXAJx6KwFdA8AA/W0CYAODG10DwAD9OwFgA4mXPTUAAAABAF0DwAD9bQJgA4MbXQPAAP07AWADiZcBFsAAq2OCwACrWcAMUPWbnpx6IxzAAKt2gwDADFH7SAEAASsAACscwACrdoMAwAxR+4P9AQABNMAAq34DwACrfsAArCkAAAACAgLAAKuFAAAAg9ZgA4MbAMAAq5oAAACFfV0DwAD9OwFgA4mXAABgA8AA/aEBPgFGwACrq8AAq8nAAKu6AAAAgpRgA4mXAIXAAKvCwAxSbz4BPRzAAKvdgMAAq9XADFDTm9kDAAOEwACr9MAMUmGGwACr+cAMUpcWwACr/y6bf5vlnCwAnIQAwAD9jAFcPgVOwACsy8AArNYAAITzYAODGwEWwACs4oHAAKzYwAxQ4YTviZxOwACs98AArQQAAITxYAObDQEewACtE5sXAgACFsAArTODwACtKMAMUu+ExYMqFsAArU2BwACtQ8AMUOGFLImaAD01AAAAAQBgA5xuAYDAAK1jwAxQ0yMcwACtfRbAAK1rhcAArWvADFNVm56cekgBAAErAMAA/fEXwACta4XAAK1rwAxTVZueMsAArZlgA4MbXQPAAP07AWADiZcAnHorAV0DwAD9bQJgA4MbXQPAAP07AWADiZc9NQAAAAEAXQPAAP1tAmADgxtdA8AA/TsBYAOJlwEWwACtrYLAAK2jwAxQ9ZuenHojHMAArcCFAMAMU8tIAQABKwAAKxzAAK3AhQDADFPLg/0BAAE0wACtyAPAAK3IwACuowAAAAICAsAArc8AAACD1mADgxsAwACt5AAAAIV9XQPAAP07AWADiZcAAGADwAD9oQE+AUbAAK31wACuE8AArgQAAACClGADiZcAh8AArgzADFQ/PgE9HMAArieAwACuH8AMUNOb2QMAA4bAAK4+wAxUMRzAAK5ehMAArlHADFMThPIBAAEUwACucsAMVGcIAACbHRbAAK55Lpt/m+WcLACchADAAP2MAVw9HMAArrWAwACurcAMUNOb2QMAA4PAAK7XwAxS74HAAK7jwAxQ4RbAAK7uLpt/m+WcLACchAacTDfAAK+5wACvvsAAtDoAAJvDm+UAAAABA8AAr9TAALQ6AAAAAQEBwACv2wAAAISYYAODGwAAXAE+CE7AAK/0wACv+QAAgVRgA5xuARzAALADFsAAr/sum22b5ZwuSwEAAYDAALAEwAxVMgDAAP2BTsAAsBbAALArAACb2mADnGQBNcAAsDEAAAEAYAOcZAEfwACwMZxtAAAAADUAAAABAFsBHMAAsFCCwACwTsAMVY2bdAEAARbAALBigcAAsF3ADFVGm7mccgCcaYIAwAxVjU7AALB9wACwkQAAm9tgA5xkATXAALCXAAABAGADnGQBH8AAsJecbQAAAAA1AAAAAQBbARzAALC2g8AAsLTADFXum3QBAAEWwACwyIHAALDDwAxVRpu5nHIAnGmDAMAMVe5JwACw4CEcwACw9RbAALDrgMAAsOTADFUyhOGDK0gBAAErAImiPgNOwACxEcAAsR8AAJvcYAOcbgEcwACxKRbAALEhLpttm+WcLksBAAEWwACxOxbAALExgMAAsSrADFUyhOGDK4TviZwAwAD9gT0cwACxbYLAALFNwAxVe5t3AQABFsAAsYuEwACxfcAMVmSb3Zx3AJxqPRzAALG+g8AAsarADFXcm3cBAAEWwACx3ITAALHOwAxWZJvenHgAnGo/ScAAsf8hHMAAshYWwACyCoDAALIDwAxVMoTigyxIAQABKwCJoj4CTsAAsjLAALJCAACb32ADnG4BHMAAskwWwACyRC6bbZvlnC5LAQABFsAAsmAWwACyVIDAALJNwAxVMoTigyyE74mcAMAA/YE9HMAAspGDwACycsAMVdybdwEAARbAALKxhMAAsqHADFclm96ceACcaj9GwACy1MAAswnAALLjAAAAhOFgA4mXABbAALL3gMAAsvDADFUyhOODLT4CTsAAsxzAALMqAACb3GADnG4BHMAAszQWwACzLC6bbZvlnC5LAQABFsAAsz+EwACzNcAMV56E74mcAMAA/YE9HMAAs2WDwACzUcAMVdybdwEAARbAALODhcAAs3XADFfBm96ceACcaj0XwACzq4HAALOmwAxVRpvdHMAAs9mCwACzxMAMVXubegAAAACca5x3PRfAALP3gcAAs/LADFVGm94cwAC0I4PAALQPwAxV3Jt6AAAAAJxrnHgGnFs3wAC1OMAAtULAALbtAACb4AAAAAEDwAC1VcAAtu0AAAAAAAAAXQPAAP07AWADwAD8lwE+A07AALViwAC1aQAAgXZdA8AA/TsBYAPAAPyXATHAALVwYAPAAPyXAEbAALV4wAC1nMAAtYMAAACEmGADgxsAFsAAtZYWwAC1jS6bbZvlnC6DaMAA/Y8+BE7AALWowAC1rQAAgVRgA5xuARzAALW3FsAAta8um22b5ZwuSwEAAYHAALW4wAxY4QDAAP2BTsAAtcvAALXVAACb4WADwAD8lwEcwAC1+RbAALXyFsAAtdyCwAC118AMWQmb3px4YcAA/WuGlwEAAZUAwAD9wknAALYFHMAAthODwAC2CcAMWT6BbQEAARbAALYdgMAAthbADFiyYcAA/WsAwAD9yD4DTsAAtjPAALY9AACb4mADwAD8lwEWwAC2RoDAALY/wAxYsmHAAP1rPRfAALZdgMAAtlbADFiyYRzAALZwg8AAtmbADFk+ZAEAAZQAwAD9vcAA/Wk9HMAAtoSAwAC2fcAMWLKb4wMAA4TAALaOwAxZsBbAALaggMAAtpnADFiyYcAA/WuTAMAA/WI/PTUAAAABAF0DwAD9OwFgA8AA/JcBgMAAtrrADFiyNQAAAAEAYAPAAPyXAYPAALbBwAxZPhzAALbAhMAAtsDADFo7gL8CAAKFwAC2wMAMWlgcwAC2zBzAALbAhMAAtsDADFo7SwEAAYXAALbAwAxaWADAAP1KZAEAAZQAwAD9vQDAAP1LSsAAttwBgMAAtuPADFiyBpxcN8AAt+DAALfnwAC5owAAm+QAAAABA8AAt/rAALmjAAAAAAAAAGADwAD7SQE+BE7AALgHwAC4EQAAm+FgA8AA/JcBk07AALgewAC4JAAAm+VgA8AA/JcBk0bAALgtwAC4UcAAuDgAAACEmGADgxsAFsAAuEsWwAC4Qi6bbZvlnC6DaMAA/Y8+A07AALhdwAC4YgAAgVRgA5xuARzAALhsFsAAuGQum22b5ZwuSwEAAYLAALhtwAxbMADAAP2BPYjAALh8wAxa/hzAALiGgMAAuHzADFr+ZAEAARzAALjgHMAAuK0WwAC4phbAALiPg8AAuIrADFtYm92cd2HAAP1rZAEAARbAALjYFsAAuMKDwAC4vcAMW1ib3px4YcAA/WsAwAD9vYaXAQABlQDAAP3CAMAA/b09icAAuPbADFsTHMAAuPyBwAC49sAMWxNkAQABHMAAuS4ewAC4/5vrAQABFsAAuRaDwAC5EcAMW1ib3Zx3AGQBAAEewAC5OpvrAQABFsAAuVGDwAC5TMAMW1ib3px4AADAAP29AMAA/b1KwAC5dAEjHMAAuYGBwAC5e8AMWxNIAQABkwDAAP27KAAAAAAAAPA/HMAAuZiAwAC5jsAMWv5QAQABgcAAuZrADFsTAMAA/cEBYAPAAPtJBpxdN8AAufPAALn3wAC6pgAAm+YAAAABA8AAuhDAALqmAAAAAAAAAGADwAD8lwE+A07AALodwAC6IQAAm+dgA8AA/JcBk0bAALoqwAC6TsAAujUAAACEmGADgxsAFsAAukgWwAC6Py6bbZvlnC6DaMAA/Y8+AT2IwAC6VsAMXO0cwAC6WoDAALpWwAxc7WQBAAE1AAAAAQBgA8AA/JcBNQAAAAEAXQPAAP1tAmADgxtdA8AA/TsBYAOJlwEWwAC6bhzAALplFsAAul0um22b5ZwuSwEAAYHAALpmwAxdCgDAAP2Bm56ceiMcwAC6gYIAwAxdW0gBAAErAAArFsAAuoGCAMAMXVthwAD9kQFgA8AA/JcjHMAAuoiCAMAMXU5IAQABKwAAk4IAwAxdTgFgA8AA/JcAwAD9vUrAALqYAYDAALqfwAxc7QAADAC+AAwCkQAMA1IADAQ1AAwEsAAMBQ8ADAVoAAwF5AAMByMADAfpAAwIrwAMCSsADAxiAAwTVwAMFbYADBauAAwXwAAMGJUADBlmAAwaEwAMGugADBykAAwfUgAMIKAADChEAAws7gAMLnIADDBDAAwxSQAMNi8ADDqzAAw/YQAMQR0ADETtAAxMeQAMUKoADFUJAAxYeQAMWswADFy7AAxeAwAAACgCnGQ3wAC6q8AAurHAAMG3A5voAAABYAHAAP3kAAABBJxmN8AAutrAALrqCZvpAF0DwAD9OwFgA8AA/JcBMcAAuuhgA8AA/JcAAQWcbQAAAAAEAAADAAAAAAAAAAAAYAOcZAE/AQkBAMAA/foAAAAABAacaDfAALrvwAC69MAAvDgAAJvqAAAAAQPAALr/wAC8OAAAAAICAsAAuwQAAABqYAPAAPyXAMAAuw8AAACCkGADwAD8lwAAXAE+Aj0cwAC8BRbAALv+LpvpnGZWAQABHMAAvA+AwAC8CcAMX0SDvwEAAZQAwAD8swDAAP1MPRzAALwhFsAAvBoum+mcZlYBAAEcwAC8MBzAALwqgcAAvCbADF9Tg78BAAGUAMAA/LNkAQABlADAAP29AMAA/UwGnGk3wAC8PcAAvELAALx1AACbdAAAAAEDwAC8TsAAvHUAAAABAQHAALxTAAAAg4BgA8AA/JcAAFwBPgE9HMAAvFwum+oCAAKAwAC8aMAMYAIcwAC8bYDAALxrwAxgAmQBAAGUAMAA/b0AnGgGnGo3wAC8esAAvH/AAL0WAACbdwAAAAEDwAC8jsAAvRYAAAABAQHAALyaAAAAm+FgA8AA4+gAAFwBPgFFwAC8qwHAALy0wAC8tgAAYmADwAD8lwGTARzAALy9gcAAvLvADGCJYwEAARbAALzJgMAAvL/ADGBuYcAA/WsAwAD9xQGJwAC80cAMYIkcwAC804HAALzRwAxgiWQBAAGVAMAA/b0+AT0cwAC84S6b6gIAAhzAALz2gMAAvO3ADGBuSwEAAYHAALz3wAxgiQDAAP1KHMAAvQSAwAC8+8AMYG5LAQABHMAAvQeBwAC9BcAMYIlkAQABlADAAP29AMAA/UoAnGgGnGs3wAC9G8AAvSbAAMG1AACbegAAAAEDwAC9N8AAwbUAAAAAAAAAYAPAAOPoAT4HPRzAAL6jFsAAvpwum+mcZoCuAAAAAMAA/U5OwAC+s8AAvr8AAJvrYAPAAPyXAZNOwAC/AMAAvwsAAIdIYAPAAPyXAZNFwAC/FAHAAL8dwAC/HwAAYmADwAD8lwGTARzAAL8mgsAAvyTADGHEYwEAARbAAL8vFsAAvygum+mcZmHAAP1rAMAA/cUBisAAvznADGHEHMAAvzeCwAC/OcAMYcRkAQABlADAAP29PgJOwAC/SMAAv04AAJvsYAPAAPyXARzAAL9WFsAAv1Aum+mcZksBAAGCwAC/V8AMYcQAwAD9SknAAL9hHMAAv28cwAC/a4PAAL9lwAxiKIN8AQABlADAAPyvSAEAAZMAwAD9uz4CPYjAAL+YwAxhlRzAAL+WgMAAv5jADGGVZAEAAZQAwAD9vUnAAL+tHMAAv72AwAC/scAMYZVIAQABlADAAP27PgE9HMAAwBkWwADAEy6b6ZxmgL8CAAI1AAAAAQBgA8AA/JcBgcAAwBrADGGqNQAAAAEAYAPAAPyXAYnAAMAawAxhqhzAAMAkhADADGLiZAEAAZQAwAD9vYQAwAxi4hzAAMAwg8AAwCrADGIog8EBAAGUAMAA/LQAwAD9Sz8+Aj2IwADAbsAMYZUcwADAbIDAAMBuwAxhlYGNAQABlADAAP2+ScAAwIMcwADAk4DAAMCHwAxhlUgBAAGTAMAA/bs+AT0cwADAqxbAAMClLpvpnGaAvwIAAjUAAAABAGADwAD8lwGBwADArMAMYao1AAAAAQBgA8AA/JcBicAAwKzADGGqHMAAwLaEAMAMY6FkAQABlADAAP29hADADGOhHMAAwMKDwADAvMAMYiiDwQEAAZQAwAD8tADAAP1LP07AAMEtwADBNAAAgXZgA8AA4+gBHsAAwTrAAOPsAQABgcAAwUXADGGqAEXAAMFWAcAAwV/AAMFhAABiYAPAAPyXAZMBHMAAwWiDwADBZsAMZDZjAQABgcAAwWrADGGqAMAA/cUBi8AAwXjADGQ2HMAAwXaDwADBeMAMZDZkAQABlADAAP29PgE9HMAAwYmCwADBg8AMZAeAvwIAAoPAAMGKwAxkNhzAAMGVFsAAwY8um+mcZksBAAGDwADBlsAMZDYAwAD9SgDAAP1LSsAAwaQBgsAAwavADGQHAAAMXx0ADF/bAAxgRwAMYUkADGTgAAAABAKcbjfAAMVFwADFS8AAzqUDm+0AAAFgAcAA/eQAABEEnHA3wADFX8AAxWsYm4cAYAPAAPrRASoEnHE3wADFe8AAxYQJhO8AYAODGwAEnHI3wADFjMAAxaAYm7kAYAPAAPyXAZMEnHM3wADFqMAAxbEYmtkAYAPAAPyXAZMEnHQ3wADG6cAAxxoJm3UAXQPAAP4vAWADnG4BHsAAxv/AAMGmAAFgA5xuAAAEnHU3wADHNMAAx2IJm3gAXQPAAP4vAWADnG4BHsAAx0fAAMGmAAFgA5xuAAAEnHY3wADHfMAAx7AJm3kAXQPAAP4vAWADnG4BHsAAx5XAAMGmAAFgA5xuAAAEnHc3wADHwMAAx9YYm90AYAPAAOPoASsEnHg3wADH5cAAx/oYm94AYAPAAOPoASsEnHk3wADIEMAAyCQYm44AXQPAAP07AWADnG4BKwScejfAAMkYwADJKRibngBdA8AA/W0CYAODG10DwAD9OwFgA4mXASsEnHs3wADJzcAAyeQYm6cAXQPAAP07AWADg30BKwScfDfAAMp9wADKjBibpgBdA8AA/TsBYAODfQErBJx9N8AAyw7AAMsoGJukAF0DwAD9OwFgA4N9ASsEnH43wADLn8AAy7EYm6MAXQPAAP07AWADg30BKwScfzfAAMvDwADL2xibvQBdA8AA/TsBYAODfQErBJyAN8AAy+zAAMv8GJu8AF0DwAD9OwFgA4N9ASsBBZyGN8AAzAHAAMwBwADMGwAAAAPAAMwLwADMGwAAAAEBAcAAzBEAAASE72ADgxsAAGADnG4BPwIIAZxxgADADGdCCQHAAMwBwAD9+gAAAAADBpyCN8AAzCDAAMwlwADMowAAm0YAAAABA8AAzDHAAMyjAAAAAQEBwADMPQAAAIPbYAOcbgAAYAPAAPrRAT4BSsAAzEoBHsAAzFGb6gIAAhbAAMxwLpvdnHcWwADMjoDAAMyIwAxnmJu5nHIABpyDN8AAzKjAAMytwADNIAAAmxoAAAABA8AAzLjAAM0gAAAAAQEBwADMxAAAAIPbYAOcbgAAYAPAAPrRAT4BSsAAzNEBHsAAzNib6gIAAhbAAMzuLpvenHgWwADNC4DAAM0FwAxoBJu5nHIABpyEN8AAzSXAAM0qwADOowAAm9kAAAABA8AAzUDAAM6jAAAAAwMDwADNRwAAAJn6YAODGwDAAM1WAAAAgpRgA4mXAMAAzXwAAACbNV4DAAMDA2ADgxtgA4mXYAOJlwABVwOb5wBcAABcAT4CTsAAzanAAM2yAACDvl0DwAD9OwFgA4mXARzAAM3FFsAAzbQum56ceksBAAGAwADNxsAMaHAAwAD9gUnAAM3QHMAAzd2DwADN1MAMaLZIAQABKwDAAP1lPgE9HMAAzf8WwADN7i6bnpx6gL8CAAKAwADOAMAMaHAxwADOEmADiZcBgcAAzhPADGh+AMAA/YJJwADOJSEcwADOLoHAAM4pwAxofkgBAAEWwADOOoPAAM4xwAxotoMewAD9HwCJoj4CPRzAAM5Sg8AAzknADGi2VgEAAYHAAM5WwAxofgDAAP1MPRzAAM54gsAAzmPADGiMIAMAAxbAAM55LoTvnHEWwADOjYPAAM6EwAxotoMewAD9H4HAAM6UwAxofgAAPwAADGdxAAxn3QAMaEkADGnTAAAAAwKchzfAAM7JwADOz8AA0F8Dm+4AAAFdAcAAwYUBYAODGwAAAQScijfAAM8JwADPEQmb75vlAF0DwAD+LwFgA4MbAAEFnJE3wADPFcAAzxXAAM8sAAAAA8AAzx3AAM8sAAAAAQEBwADPIwAABJvvXQPAAP4vAWADgxsAAGADnIcBPwIIAZyKgADADGpNCQHAAM8VwADBigAAAAADBpyMN8AAzzHAAM82wADPeAAAgxwAAAABA8AAzz7AAM94AAAAAQEBwADPRgAAAISYYAPAAP3kAABgA8AA+tEBPgFKwADPVAEcwADPZBbAAM9bLpvvm+WcioMcAQABgMAAz23ADGqqAMAA/jsGnI03wADPfcAAz4bAANAbAACXLgAAAAEDwADPi8AA0BsAAAABAQHAAM+VAAAAg9tgA5yHAABgA5yHAT4DTsAAz63AAM+0AACBdl0DwAD+LwFgA4MbAR7AAM+6wADBqAEBYAODGwEWwADPyi6b75vlnIoAPRzAAM/ggcAAz9nADGssgKUBAAEWwADP7YDAAM/nwAxrFZvvm+WcigDAAP49SsAAz/wBH8AA0AeckQEAAYHAANAQwAxrLAAGnI83wADQIMAA0EDAANBdAQBcAWrAANAhYAPAAP3kAgAAAQPAANBJwADQXQAAAAAAAABdA8AA/TQBYAODGwFKwADQTAEWwADQVRbAANBMLpvvm+WcilzAAP5LAAAMaoMADGruAAxrqAAMbAMAAAADApySN8AA0VDAANFWwADSmQOb8AAAAV0BppwBYAOcbgAAAAEFnJcAAAAABAAAAwAAAAAAAAAAAGADnJIBPwEJAQCmrAAAAAACBpyUN8AA0XzAANGNwADRzwAAm/EBasAA0X1gA8AA/eQCAAABA8AA0ZjAANHPAAAAAgICwADRpAAAIIHXYAOcbgDAANGyAAAggk5gA5xuAABgA8AA+tEBSsAA0bgBHsAA0biclQIAAoDAANHKwAxsk4HAANHNwAxsoQAGnJU3wADR1MAA0eDAANKXAAGb8gAAAAEDwADR8cAA0pcAAAACAgLAANH9AAAAgddgA5xuAMAA0gsAAACCTmADnG4AAGADwAD60QE+A0nAANIUHMAA0iAWwADSGoDAANIYwAxtAZrZnHOAlwEAARbAANIkgcAA0iLADG0PmtmccwDAAP3HSsAA0isBKT9JwADSPBzAANJIFsAA0kKAwADSQMAMbQGa2ZxzYwEAARbAANJMgcAA0krADG0PmtmccwDAAP3FSsAA0lMBKj9KwADSZQEcwADSfxbAANJugMAA0mzADG0Bm7mccmMBAAEWwADSg4HAANKBwAxtD5u5nHIAwAD9xQAADGxgAAxs2gAMbd4AAAACAAIGm+o3wADBusAAwb/AAMSDAAGb85vlAAAAAQPAAMHUwADEgwAAAAICAsAAweAAAACb9GADwADj6ADAAMHyAAAAg4BgA8AA/JcAAGADwAD60QE+BU7AAMH9wADCAQAAg8NgA8AA/JcBk07AAMIGwADCCwAAg8JgA8AA/JcBHMAAwiEWwADCGoDAAMINwAxuGmHAAP1rgY0BAAGUAMAA/b5JwADCKCIiHMAAwjGDwADCLMAMblpIAQABHMAAwjSUgcYAAAAAwAD8ugDAAP27ARzAAMI8gcAAwjrADG4qYwEAARzAAMJKgMAAwj7ADG4aSwEAAZMAwAD9SgDAAP3FARzAAMJkHMAAwl2AwADCUcAMbhpLAQABg8AAwl7ADG5aAMAA/UqBawEAAYHAAMJnwAxuKgDAAP3GPgFKwADCcAEqP0PAAMOJHMAAw5SCwADDkMAMbkVjAQABg8AAw5bADG5aAMAA/cU+A07AAMOmwADDqgAAhyVgA8AA/JcBHMAAw7GDwADDrMAMblqBjQEAARzAAMPBHMAAw7qDwADDtcAMblqBjQEAAYLAAMO8wAxuRQDAAP2+g8EBAAGUAMAA/LQAwAD9vk7AAMPswADD8gAAhpZgA8AA/JcBHMAAxACAwADD9MAMbhpLAQABhMAAxAHADG9ZAMAA/UpJwADECxzAAMQVhcAAxA/ADG+2gWsBAAGBwADEGMAMbioAwAD9xj4BPYrAAMQjwAxuRYTAAMQpwAxvWT4BPYvAAMRBwAxuWhzAAMRMhMAAxEjADG9ZgY0BAAGUAMAA/b5KwADEXQEiHMAAxGiCwADEZMAMbkVIAQABg8AAxGvADG5aAMAA/bsAHMAAxH0cwADEeILAAMR0wAxuRYN8AQABlADAAPyvSAEAAZMAwAD9uwab6zfAAMSGwADEisAAxUIAAZv1m+UAAAABA8AAxJvAAMVCAAAAAQEBwADEpwAAAJv0YAPAAOPoAABgA8AA/JcBPgNOwADEvcAAxMIAAJizYAPAAPyXAZNFwADEyQHAAMTSwADE1AAAYmADwAD8lwGTARzAAMTbgsAAxNnADHD3YwEAARbAAMTqgMAAxN3ADHDCYcAA/WsAwAD9xQGKwADE8sAMcPccwADE9ILAAMTywAxw92QBAAGVAMAA/b0+AT2JwADFAMAMcN0cwADFBYHAAMUAwAxw3WQBAAEcwADFHBzAAMUUgMAAxQjADHDCSwEAARzAAMUXgsAAxRXADHD3ZAEAAZQAwAD9vQDAAP1KgY0BAAEcwADFKoDAAMUewAxwwksBAAGCwADFK8AMcPcAwAD9SgDAAP2+AMAA/b1KwADFNQGBwADFPMAMcN0BNwAMcecAC+H+AAvihAAL9AUAC/TNAAv1eQAL/qkADF6sAAxk+QAMaegADGwYAAxt7wAAAAoADG3xAAxwmQAMcecAAAACAAIEnJib9jgAAAKA9QAAgi4AAIEIAACmrQAAAAAAAQKcmTiBboF0q28Dh+QAAAFgAcAA/eQAADUEnJs4gamDRgWb9wBdA8AA/W0CYAPAAP5+XQPAAP07AWADwAD+fgEygbtgA8AA/n5dA8AA/TsBYAPAAP5+Ayeb+DGBzmADwAD+fhAnm/knm/onm/snm/wnm/0nm/4nm/8nnAAnnAEnnAInnAMnnAQnhNMnnAUnnAYnnAcnnAgxgvBgA8AA/n4BJ5wEJ5wJMYMbYAPAAP5+AicDJ5wKBJycOINeg2MJJwBgA6auAAScnjiDcIN8GJwLnJgAYAOCiwErBJyfOIOGg5IYnAycmABgA4MbASsEnKA4g5yDphicDZyYAGADgxsBKwScoTiDsIO6GJwOnJgAYAODGwErBJyiOIPEg80YnA+cmABgA4MbASsEnKM4g9eD4BicEJyYAGADgxsBKwScpDiD6oP2GJwRnJgAYAODGwErBJylOIQAhAwYnBKcmABgA4MbASsEnKY4hBaEIBicE5yYAGADgxsBKwScpziEKoQzGJwUnJgAYAODGwErBJyoOIQ9hEYYnBWcmABgA4MbASsEnKk4hFCEXhicFpyYAGADgxsBKwScqjiEaIR2GJwXnJgAYAODGwErBJyrOISAhIwYnBicmABgA4MbASsEnKw4hJaEoBicGZyYAGADgxsBKwScrTiEqoS4GJwanJgAYAODGwErBJyuOITChNIYnBucmABgA4MbASsEnK84hNyE8hicHJyYAGADgxsBKwScsDiFAoUmGJwdnJgAYAODzwErBJyxOIU2hVoYnB6cmABgA4PPASsEnLI4hWiFfBicH5yYAGADhBIBKwScsziFioWmGJwgnJgAYAOEEgErBJy0OIW0hccYnCGcmABgA4QSASsEnLU4hdeF/RicIpyYAGADg88BKwSctjiGC4YYGJwjnJgAYAOEEgErBJy3OIYmhjYYnCScmABgA4QSASsEnLg4hkGGVRicJZyYAGADgxsBKwScuTiGYoZvGJwmnJgAYAOCiwErBJy6OIZ5hoUYnCecmABgA4MbASsEnLs4ho+GnxicKJyYAGADgxsBKwScvDiGqYa1GJwpnJgAYAODGwErBJy9OIa/htgYnCqcmABgA4MbASsEnL44huKG8BicK5yYAGADgxsBKwScvziHAIcfGJwsnJgAYAODzwErBJzAOIcth0wYnC2cmABgA4QSASsEnME4h1qHcRicLpyYAGADhBIBKwScwjiHgYegGJwvnJgAYAODzwErBJzDOIewh9EYnDCcmABgA4PPASsEnMQ4h+GIDRicMZyYAGADg88BKwScxTiIG4g6GJwynJgAYAOEEgErBJzGOIhIiGkYnDOcmABgA4QSASsEnMc4iHeIlhicNJyYAGADhBIBKwScyDiIpIjEGJw1nJgAYAOEEgErBJzJOIjSiPMYnDacmABgA4QSASsEnMo4iQGJFhicN5yYAGADhBIBKwScyziJJIk4GJw4nJgAYAOEEgErBJzMOImTiaIYnDmcmABgA4KLASsEnM04ia2JuRicOpyYAGADgxsBKwSczjiJw4nOGJw7nJgAYAODnAErBJzPOInYieYYnDycmABgA4OcASsEnNA4ifaKCBicPZyYAGADg88BKwEFnRU4ig2KDYplAAAAA4oWimUAAAABAQGKIQAAAIJZYAOKgAAAYAOcmQE/AggAnJwfikCmxAEAAYCKW8AMdycACQGKDcAA/foAAAAAQgac0jiKaop4ixkBAJw+AAAAAQOKmYsZAAAAAAAAAGADhBIBPgFKip8BJoqfATUAAAABAGADhBIBFoqmLpw2nJicySMcisiAAMAMd4pIAQABKwDAAP3xF4qmLpw2nJgmiqYBHIraForULiecnJw/AgACJ5wJJ5xAAKa/YAOEEpzJgADADHeKAWADg31gA4QSBpzTOIseiyqLeAEAnEEAAAABA4s3i3gAAAAAAAAAYAOCiwE+AUqLPQE1AAAAAQBgA4KLARaLRC6cJpyYnLkjHItSgADA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+SdIAKa9YAOEEpy2gADADI0AAWADg31gA4QSBpz/OKGuobiiCwEAnHsAAAABA6HEogsAAAAAAAAAYAODGwE+AUqhygE1AAAAAQBgA4MbARah0S6cOpyYnM0jHKHegADADI2NSAEAASsAwAD98Reh0S6cOpyYHKHoFqHiLiecnJxLAgACJ5v4J5x8AKa7nM2AAMAMjY0BYAODGwadADiiEKIaonQBAJx9AAAAAQOiJaJ0AAAAAAAAAGADg5wBPgFKoisBJqIrATUAAAABAGADg5wBFqIyLpw7nJicziMcoj6AAMAMjhBIAQABKwDAAP3xF6IyLpw7nJgmojIBHKJIFqJCLiecnJxEAwADJ5v4J5x8J4C9AKa9YAODnJzOgADADI4QAWADg31gA4OcBp0BOKJ5ooOi5gEAnH4AAAABA6KRouYAAAAAAAAAYAODnAE+AUqilwEmopcBNQAAAAEAYAODnAEWop4unDycmJzPIxyirYAAwAyOokgBAAErAMAA/fEXop4unDycmCaingEcorcWorEuJ5ycnEQDAAMnm/gnnHwnegCmvWADg5ycz4AAwAyOogFgA4N9YAODnAadAjii66L7o2ABAJx/AAAAAQOjDaNgAAAAAAAAAGADg88BPgFKoxMBJqMTATUAAAABAGADg88BFqMaLpw9nJic0CMcoy2AAMAMjzNIAQABKwDAAP3xF6MaLpw9nJgmoxoBHKM3FqMxLiecnJxEAwADJ5v4J5x8J4C1AKa9YAODz5zQgADADI8zAWADg31gA4PPBp0DOKNlo2+jzgEAnIAAAAABA6N/o84AAAAAAAAAYAODGwE+AUqjhQE1AAAAAQBgA4MbARajjC6cKJyYnLsjHKOdgADADI/BSAEAASsAwAD98RejjC6cKJyYHKOnFqOhLiecnJxLAgACJ5v4J5yBAKa7nLuAAMAMj8EBYAODGwadBDij06PdpDABAJsTAAAAAQOj6aQwAAAAAAAAAGADgxsBPgFKo+8BNQAAAAEAYAODGwEWo/YunCmcmJy8IxykA4AAwAyQQEgBAAErAMAA/fEXo/YunCmcmBykDRakBy4nnJycSwIAAieb+CecCgCmu5y8gADADJBAAWADgxsGnQU4pDWkQKStAQCcggAAAAEDpFukrQAAAAAAAABgA4N9AT4BSqRhARykbhakaC4nnJycRAMA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jLWMtoy3jLiMuYy6jLuMvIy9jL6Mv4zAjMGMwozDjMSMxYzGjMeMyIzJjMqMy4zMjM2MzozPjNCM0YzSjNOM1IzVjNaM14zYjNmM2ozbjNyM3YzejN+M4IzhjOKM44zkjOWM5oznjOiM6YzqjOuM7IztjO6M74zwjPGM8ozzjPSM9Yz2jPeM+Iz5jPqM+4z8jP2M/oz/jQCNAY0CjQONBI0FjQaNB40IjQmNCo0LjQyNDY0OjQ+NEI0RjRKNE40UjRWNFo0XjRiNGY0ajRuNHI0djR6NH40gjSGNIo0jjSSNJY0mjSeNKI0pjSqNK40sjS2NLo0vjTCNMY0yjTONNI01jTaNN404jTmNOo07jTyNPY0+jT+NQI1BjUKNQ41EjUWNRo1HjUiNSY1KjUuNTI1NjU6NT41QjVGNUo1TjVSNVY1WjVeNWI1ZjVqNW41cjV2NXo1fjWCNYY1ijWONZI1ljWaNZ41ojWmNao1rjWyNbY1ujW+NcI1xjXKNc410jXWNdo13jXiNeY16jXuNfI19jX6Nf42AjYGNgo2DjYSNhY2GjYeNiI2JjYqNi42MjY2Njo2PjZCNkY2SjZONlI2VjZaNl42YjZmNmo2bjZyNnY2ejZ+NoI2hjaKNo42kjaWNpo2njaiNqY2qjauNrI2tja6Nr42wjbGNso2zjbSNtY22jbeNuI25jbqNu428jb2Nvo2/jcCNwY3CjcONxI3FjcaNx43IjcmNyo3LjcyNzY3Ojc+N0I3RjdKN043UjdWN1o3XjdiN2Y3ajduN3I3djd6N343gjeGN4o3jjeSN5Y3mjeeN6I3pjeqN643sje2N7o3vjfCN8Y3yjfON9I31jfaN9434jfmN+o37jfyN/Y3+jf+OAI4BjgKOA44EjgWOBo4HjgiOCY4KjguODI4Njg6OD44QjhGOEo4TjhSOFY4WjheOGI4ZjhqOG44cjh2OHo4fjiCOIY4ijiOOJI4ljiaOJ44ojimOKo4rjiyOLY4uji+OMI4xjjKOM440jjWONo43jjiOOY46jjuOPI49jj6OP45AjkGOQo5DjkSORY5GjkeOSI5JjkqOS45Mjk2OTo5PjlCOUY5SjlOOVI5VjlaOV45YjlmOWo5bjlyOXY5ejl+OYI5hjmKOY45kjmWOZo5njmiOaY5qjmuObI5tjm6Ob45wjnGOco5zjnSOdY52jneOeI55jnqOe458jn2Ofo5/joCOgY6CjoOOhI6FjoaOh46IjomOio6LjoyOjY6Ojo+OkI6RjpKOk46UjpWOlo6XjpiOmY6ajpuOnI6djp6On46gjqGOoo6jjqSOpY6mjqeOqI6pjqqOq46sjq2Oro6vjrCOsY6yjrOOtI61jraOt464jrmOuo67jryOvY6+jr+OwI7BjsKOw47EjsWOxo7HjsiOyY7KjsuOzI7Njs6Oz47QjtGO0o7TjtSO1Y7WjteO2I7ZjtqO247cjt2O3o7fjuCO4Y7ijuOO5I7ljuaO547ojumO6o7rjuyO7Y7uju+O8I7xjvKO8470jvWO9o73jviO+Y76jvuO/I79jv6O/48AjwGPAo8DjwSPBY8GjwePCI8JjwqPC48Mjw2PDo8PjxCPEY8SjxOPFI8VjxaPF48YjxmPGo8bjxyPHY8ejx+PII8hjyKPI48kjyWPJo8njyiPKY8qjyuPLI8tjy6PL48wjzGPMo8zjzSPNY82jzePOI85jzqPO488jz2PPo8/j0CPQY9Cj0OPRI9Fj0aPR49Ij0mPSo9Lj0yPTY9Oj0+PUI9Rj1KPU49Uj1WPVo9Xj1iPWY9aj1uPXI9dj16PX49gj2GPYo9jj2SPZY9mj2ePaI9pj2qPa49sj22Pbo9vj3CPcY9yj3OPdI91j3aPd494j3mPeo97j3yPfY9+j3+PgI+Bj4KPg4+Ej4WPho+Hj4iPiY+Kj4uPjI+Nj46Pj4+Qj5GPko+Tj5SPlY+Wj5ePmI+Zj5qPm4+cj52Pno+fj6CPoY+ij6OPpI+lj6aPp4+oj6mPqo+rj6yPrY+uj6+PsI+xj7KPs4+0j7WPto+3j7iPuY+6j7uPvI+9j76Pv4/Aj8GPwo/Dj8SPxY/Gj8ePyI/Jj8qPy4/Mj82Pzo/Pj9CP0Y/Sj9OP1I/Vj9aP14/Yj9mP2o/bj9yP3Y/ej9+P4I/hj+KP44/kj+WP5o/nj+iP6Y/qj+uP7I/tj+6P74/wj/GP8o/zj/SP9Y/2j/eP+I/5j/qP+4/8j/2P/o//kACQAZACkAOQBJAFkAaQB5AIkAmQCpALkAyQDZAOkA+QEJARkBKQE5AUkBWQFpAXkBiQGZAakBuQHJAdkB6QH5AgkCGQIpAjkCSQJZAmkCeQKJApkCqQK5AskC2QLpAvkDCQMZAykDOQNJA1kDaQN5A4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oqEEnldElDmUkwadYQBgA55DAWqUSGADnkPAAKLZBJ5YRJStlNoGnWIAYAOeQwFqlL1gA55DwACjEQSeWUSU9JVXBp1jAGADnkMBapUGYAOeQ8AAo0kEnlpElXGVygadZABgA55DAWqViGADnkPAAKOBBJ5bRJXkligGnWUAYAOeQwFqlfpgA55DwACjuQSeXESWQpZpBp1mAGADnkMBapZQYAOeQ8AAo/EEnl1EloOWwgadaABgA55DAWqWl2ADnkPAAKQpBJ5eRJbclwkGnWkAYAOeQwFqluxgA55DwACkYQSeX0SXI5dEBp1qAGADnkMBapcvYAOeQ8AApJkEnmBEl16XpAadawBgA55DAWqXdWADnkPAAKTRBJ5hRJe+l/AGnWwAYAOeQwFql8pgA55DwAClCQSeYkSYCpg+Bp1tAGADnkMBapgXYAOeQ8AApUEEnmNEmFiYdgadbgBgA55DAWqYY2ADnkPAAKV5BJ5kRJiQmN0GnW8AYAOeQwFqmKlgA55DwAClsQSeZUSY95lRBp1wAGADnkMBapkGYAOeQ8AApekEnmZEmWuZiQadcQBgA55DAWqZdmADnkPAAKYhBJ5nRJmjme0GnXIAYAOeQwFqmbtgA55DwACmWQSeaESaB5pOBp10AGADnkMBapoYYAOeQ8AAppEEnmlEmmiangaddQBgA55DAWqadWADnkPAAKbKBJ5qRJq4mxUGnXYAYAOeQwFqmshgA55DwACnAgSea0SbL5uGBp13AGADnkMBaptDYAOeQ8AApzoEnmxEm6Cb4AadeABgA55DAWqbtWADnkPAAKdyBJ5tRJv6nBsGnXoAYAOeQwFqnAZgA55DwACnqgSebkScNZxZBp17AGADnkMBapxCYAOeQ8AAp+IEnm9EnHOcoQadfABgA55DAWqcfmADnkPAAKgaBJ5wRJy7nOkGnX0AYAOeQwFqnMZgA55DwACoUgSecUSdA51KBp1+AGADnkMBap0aYAOeQ8AAqIoEnnJEnWSduAadfwBgA55DAWqdd2ADnkPAAKjCBJ5zRJ3SngkGnYAAYAOeQwFqneBgA55DwACo+gSedESeI558Bp2CAGADnkMBap46YAOeQ8AAqTIEnnVEnpaewwadgwBgA55DAWqepmADnkPAAKlqBJ52RJ7dnwcGnYQAYAOeQwFqnuxgA55DwACpogSed0SfIZ9TBp2FAGADnkMBap8tYAOeQ8AAqdoEnnhEn22foQadhgBgA55DAWqfemADnkPAAKoSBJ55RJ+7n/sGnYcAYAOeQwFqn9BgA55DwACqSgSeekSgFaBoBp2IAGADnkMBaqAqYAOeQ8AAqoIEnntEoIKgqQadiQBgA55DAWqgkGADnkPAAKq6BJ58RKDDoO0GnYoAYAOeQwFqoNJgA55DwACq8gSefUShB6E7Bp2LAGADnkMBaqEUYAOeQ8AAqyoEnn5EoVWheQadjABgA55DAWqhYmADnkPAAKtiBJ5/RKGToboGnY0AYAOeQwFqoaFgA55DwACrmgSegESh1KH4Bp2OAGADnkMBaqHhYAOeQ8AAq9IEnoFEohKiMwadjwBgA55DAWqiHmADnkPAAKwKBJ6CRKJNoqoGnZAAYAOeQwFqol1gA55DwACsQgSeg0SixKL3Bp2RAGADnkMBaqLQYAOeQ8AArHoEnoREoxGjNQadkgBgA55DAWqjHmADnkPAAKyyBJ6FRKNPo3YGnZMAYAOeQwFqo11gA55DwACs6gSehkSjkKO0Bp2UAGADnkMBaqOdYAOeQ8AArSIEnodEo86kBQadlQBgA55DAWqj3GADnkPAAK1aBJ6IRKQlpzMGKQBdA8AA/TsBYAOeQwFqpC5dA8AA/TsBYAOeQ8AArYwEnolEp7GnzwWdlgBdA8AA/W0CYAPAAP5+YAOeQwEep7yelAAAAAAEnopEqDyoRQmdlwFqqCZgA8AA/eQCYAPAAPrRAASei0SoYahpCZ2YAWqoS2ADwAD95AJgA8AA+tEAAQWelkSoo6ipqfABAAADqLCp8AAAAAcCAqi4AAAAgmJgA8AA/n4AqMcAAACAvWADwAD+fgAFqNkAAASdl2ADwAD60QFqqORgA8AA+tEAqPYAAACdmWADwAD60QFqqQJgA8AA+tEAqRQAAASdmGADwAD60QFqqR5gA8AA+tEAqTAAAACdmmADwAD60QFqqUNgA8AA+tEAqVQAAACaHWADwAD8lwFqqWBgA8AA/JcJYAOeQwE/AwgBnoqCAMANFXoIAZ6LhADADRWqCQCpeJ+4BgAEgKl+wA0VXYGphsANFWuGqYzADRXaaqmYYAPAAPyXwACbIAKdmYOpv8ANFZKdmoWp3sANFcIGBp6NRKn1qf6qKAEAnZsAAAABA6oQqigAAAAAAAAAYAPAAPrRAUqqEwEiFqoTLp2XnooBFqogLp2YnosGno5EquSq+6sXAQCdnAFqquVgA8AA+oSF/wAAAQOrC6sXAAAAAAAAAGADwAD60QFKqw4BFqsOLp2XnooGno9Eq2urdquSAQCAvQAAAAEDq3urkgAAAAAAAABgA8AA/n4BSqt+ARyrhRarfi6CYp+hkm8AAAAAwAD+pAaekESr8awKrBoBAJ2dAWqr8mADwAD6hIX/AAABA6wRrBoAAAAAAAAAYAPAAP5+AUqsFAEWrBQugmKfoQaekkSsH6wyrEQAACMBaqwgYAPAAP3kAgAAAQOsOqxEAAAAAAAAAGADwAD+fgFKrEABFqxALoC9no8GnpRErNKs7q3HAAGdnp4XAAAAAQOs/63HAAAAAAAAAF0DwAD9bQJgA8AA/n5gA55DAT4DTq0nrS4AAIF2XQPAAMGbAmADwAD+fmADnkMBHq08wADBnQACYAPAAP5+YAOeQwAARq1irYKtbwAAAJ2fYAOeQwBqrXpdA8AA/TsBYAOeQ8AArYw+AT0crZCArYrADResgL8CAAIWrZmBrZHADRfggmKfoYGto8ANF+AAwAD9gkqttgGArb3ADResAAANFkwADRaHAA0WwwANFwEADRc9AA0XdwANGDUAAAAGAp6XRK4Hrg2whQOdoAAAAWABnqMAAAEEnplErkyuUwmdnwFqrjNgA8AA/eQCYAOeQwABBZ6iRK7HrsevPwAAAAOu068/AAAAAwIDrtkAAASdn2ADnkMAruYAAACDYmADwAD8lwCu/AAAAJ1EYAOeNgFqAGADwAD9oXkAYAOelwE/AggBnpmAAMANGKEJAK8Xns8DAAOArx3ADRihga8mwA0YrYKvLsANGLsABQaem0SvRK9Wr6gAAJ0qAWqvRWADwAD95AIAAAEDr1qvqAAAAAAAAABgA58AAUqvZgEfr2qeogMAAxavdy6dn56ZFq+ALoNinqYmr4gBHK+ILp0rAQABFq+VLp0inr8AnsZgA542AAaenkSvra/Cr/cBAJ0nAWqvrmADwAD95AIAAAEDr8+v9wAAAAAAAABgA8AA+tEBSq/SASIWr9oWr9IunZ+emZ2YnosBFq/uFq/mLp2fnpmdl56KBp6fRK/8sBGwIgEAnaEBaq/9YAPAAP3kAgAAAQOwG7AiAAAAAAAAAGADwAD60QFKsB4BKQaeoESwJ7A8sFkBAJ2iAWqwKGADwAD95AIAAAEDsFKwWQAAAAAAAABgA8AA+tEBSrBVASkGnpxEsF6wcbCDAACAlgFqsF9gA8AA/eQCAAABA7B2sIMAAAAAAAAAYAPAAP3kAUqwfAEWsHwunZ+emQAADRkCAA0ZaAANGbsADRnvAA0aIwANGl4AAAAFAp6jRLEosS69gwOdowAAAWABwAD95AABYAGfAAUEnqVEsZOxlwmClAFqsXhgA8AA/eQCYAOfSAAEnqZEshGyGxiDYgFqsgJgA8AA/eQCYAPAAPyXAZMEnqdEsmuycxidMQFqslpgA8AA/eQCYAOfAAErBJ6oRLKKso4Yg7UBarJ5YAPAAP3kAmADnwABKwSeqkSy9LMFGJ2knhcAYAOeNgABBZ7PRLNjs2OzzwAAAAOzbrPPAAAAAwIDs3QAAASClGADn0gAs38AAASDYmADwAD8lwCzjQAABJ2kYAOeNgFqAGADwAD9oXkAYAOeowE+AT0cs6cunaWeFwEAARazuS6dpJ4XnqoAns0ECAGepYAAwA0bNQgBnqaBAMANG0EIAZ6qggDADRtPCQGzY8AA/foAAAAAHwaerESz1LPos/sBAJ2mAWqz1WADwAD95AIAAAEDs/Kz+wAAAAAAAABgA8AA/JcBSrP1ARaz9S5hnr0Gnq1EtAC0FLQoAQCHZQFqtAFgA8AA/eQCAAABA7QftCgAAAAAAAAAYAPAAPyXAUq0IgEWtCIug2KepgaerkS0LbRBtE8BAJ2nAWq0LmADwAD95AIAAAEDtEm0TwAAAAAAAABgA8AA/JcBSrRMARa0TC6CkJ6wBp6vRLRUtGq0gQEAnagBarRVYAPAAP3kAgAAAQO0erSBAAAAAAAAAGADnwABSrR9ASsGnsJEtIa0lrTJAgCdqAFqtIdgA8AA/eQCAAABA7SltMkAAAABAQG0rAAAAJ0xYAOfAAAAXAE+AAaesES0zrTitPgBAIKQAWq0z2ADwAD95AIAAAEDtOa0+AAAAAAAAABgA8AA/JcBSrTpARy08Ba06S6DYp6mZAEAARa08i5hnr0AwAD9vQaesUS0/bUTtSMBAJ1MAWq0/mADwAD95AIAAAEDtRy1IwAAAAAAAABgA58AAUq1HwErBp6yRLUotT21WwEAnakBarUpYAPAAP3kAgAAAQO1Q7VbAAAAAAAAAGADwAD60QFKtUYBHLVLFrVGLoKUnqVIAQABarVYYAOfSMAArqEAwAD98Qaes0S1YLV1tYoBAJ0nAWq1YWADwAD95AIAAAEDtYK1igAAAAAAAABgA8AA+tEBSrWFASoGnrREtY+1pLW2AQCdoQFqtZBgA8AA/eQCAAABA7WutbYAAAAAAAAAYAPAAPrRAUq1sQEqBp61RLW7tdC19QEAnaIBarW8YAPAAP3kAgAAAQO15rX1AAAAAAAAAGADwAD60QFKtekBFrXpLp0nnrMGnrZEtfq2D7YsAQCdmQFqtftgA8AA/eQCAAABA7YatiwAAAAAAAAAYAPAAPrRAUq2HQEWtiIWth0ugpSepZ2Zn50GnrdEtjG2RrZjAQCdqwFqtjJgA8AA/eQCAAABA7ZRtmMAAAAAAAAAYAPAAPrRAUq2VAEWtlkWtlQugpSepZ2rn54GnrhEtmi2fbaXAQCEkwFqtmlgA8AA/eQCAAABA7aJtpcAAAAAAAAAYAPAAPrRAUq2jAEctpMWtowuYZ69SAEAAZMAwAD9uwaeuUS2nLaxttwBAJ2aAWq2nWADwAD95AIAAAEDtsO23AAAAAAAAABgA8AA+tEBSrbGARa2yxa2xi6ClJ6lnZqfnwaeukS24bb2ty0BAIIsAWq24mADwAD95AIAAAEDtw63LQAAAAAAAABgA8AA+tEBSrcRARa3Fha3ES6ClJ6lgiyfoAaeu0S3MrdKt1kBAJ2fAWq3M2ADwAD95AIAAAEDt1K3WQAAAAAAAABgA55DAUq3VQErBp68RLdet3K3gwEAgmsBardfYAPAAP3kAgAAAQO3d7eDAAAAAAAAAGADwAD8lwFKt3oBFrd/Frd6LoKUnqWCa5+cBp69RLeIt5y3swEAYQFqt4lgA8AA/eQCAAABA7ejt7MAAAAAAAAAYAPAAPyXAUq3pgEWt60Wt6YugmKevmHAAP6CBp6+RLe4t8+35AEAgmIBare5YAPAAP3kAgAAAQO31rfkAAAAAAAAAGADwAD+fgFKt9kBFrfeFrfZLoKUnqWCYp+hBp6/RLfpuAa4LAEAnSIBarfqYAPAAP3kAgAAAQO4GLgsAAAAAAAAAGADnjYBSrgbARa4Gy6dpJ4XnqoGnsNEuDG4OrixAgCdIgAAAAEDuEu4sQAAAAEBAbhZAAAAnKlgA542AABcAT4CPRe4aC6dpJ4XgLh8wA0g356qPRy4iS6dpZ4XAQABFribLp2knheeqgCezQaewES4trjNuOwBAJ2sAWq4t2ADwAD95AIAAAEDuNm47AAAAAAAAABgA8AA/n4BSrjcARa44Ra43C6ClJ6lnayfpAaexUS48bkDuVEAAJ0qAWq48mADwAD95AIAAAEDuQe5UQAAAAAAAABgA58AAUq5EwEfuReezwMAAxa5Iy6ClJ6lFrkpLoNinqYmuTEBHLkxLp0rAQABFrk+Lp0inr8AnsZgA542AAaexkS5VrlounwAAJ0rAWq5V2ADwAD95AIAAAEDuXS6fAAAAAEBAbl7AAAAkoVgA58AAABgA58AAT4GSbmIHLmSgLmMwA0h6kgBAAErAMAA/fE+AUq5owErP065wLnFAACD72ADnwABHLnNgLnHwA0h6p0qAAAAAJ8nTrnfueQAAIPwYAOfAAGBuebADSIePYi58MANIeoWuf6AufjADSHqg7WfG0O6CCEcuhWAug/ADSHqSAEAASsAwAD98T4CPYq6JsANIj4cujKCui3ADSI+na0BAAEcukCAujrADSHqnSoAAAAAnycAnyo9iLpPwA0h6ha6XYC6V8ANIeqDtZ8bSrptAYG6dMANIh4GnsdEuoG6krswAACdrgFquoJgA8AA/eQCAAABA7qcuzAAAAABAQG6rQAAAIV9XQPAAP07AWADn0gAAGADwAD60QE+Aka6urrYuskAAACClGADn0gAgLrRwA0i9j4BSbrgHLruFrrpLoKUnqVIAQABgbrxwA0jGADAAP3xPgFKuwEBKT9KuyABKgaeyES7NbtHu8EAAJ2tAWq7NmADwAD95AIAAAEDu067wQAAAAEBAbtVAAAAkoVgA58AAABgA58AAT4EPRe7Yi6DtYC7acANI3+eqD0Xu3qAu3TADSN/nTEunyU9F7uVgLuPwA0jf52oLp8iSruxAYC7uMANI38GnslEu8a72LwrAACdMgFqu8dgA8AA/eQCAAABA7v1vCsAAAABAQG7/AAAAJKFYAOfAAAAYAOfAAE+Aj0XvAkug7WAvBDADSP1nqhKvBsBgLwiwA0j9QaeykS8MLxDvFcAACMBarwxYAPAAP3kAgAAAQO8S7xXAAAAAAAAAGADwAD+fgFKvFEBFrxRLoJinr4GnstEvFy8b7yAAACAlgFqvF1gA8AA/eQCAAABA7x0vIAAAAAAAAAAYAPAAP3kAUq8egEWvHougmKevgaezUS88bz2vYEAAJ2lnhcAAAABA70HvYEAAAABAQG9FQAAAJypYAOeNgAAXAE+AUO9JCEcvTOAvSvADSS4SAEAASsAwAD98T4CPRe9TIC9RMANJLiEVy6eOD2IvWHADSS4Jr1hARa9c4C9a8ANJLiDtZ6oYAOeNgAADRuxAA0b6wANHCYADRxhAA0ckwANHMsADR0ZAA0dSwANHZ0ADR3RAA0eBQANHkAADR6CAA0exAANHwsADR9NAA0fjwANH8EADSADAA0gRQANIIcADSDCAA0hGwANIV0ADSHDAA0izwANI1gADSPOAA0kJAANJF4ADSSZAA0lEQAAAB8CntBEvcK9yMAAQJIDghUAAAFgAZ6jAAABBJ7TRL4qvjAYlzieFwBgA8AA/n4BKwEFnttEvsO+w7+DAAAAA77Ov4MAAAAEAwS+2QAAAIKUYAOfSAC+5gAAAICWYAPAAP5+AL7xAAAAg2JgA8AA/JcAvw0AAACdRGADnjYBagBgA8AA/aF5AGADntABPgE9F79ZLpc4nhcev3KnvAEAAYG/ecANJeoAntMBCQC/KJ7PAwADgL8uwA0l3oK/NMANJfiDvzzADSYGAAQGntVEv4i/nb/OAQCdJwFqv4lgA8AA/eQCAAABA7+qv84AAAAAAAAAYAPAAPrRAUq/rQEev63AAPZ4AgACFr+3LoJrnrxqv71gA8AA/JfAAJsCAAae1kS/07/qv/oBAIJiAWq/1GADwAD95AIAAAEDv/G/+gAAAAAAAABgA8AA/n4BSr/0ARa/9C6XOJ4XntMGnthEv//AAEARwABAZwAAnSoBasAAQABgA8AA/eQCAAABA8AAQBXAAEBnAAAAAAAAAGADnwABSsAAQCEBH8AAQCWe2wQABBbAAEAxLoKUnqUWwABANy6XOJ4XntMWwABAPy6DYp6mJsAAQEcBHMAAQEcunSsBAAEWwABAVC6dIp6/AJ7GYAOeNgAGntlEwABAbMAAQH/AAECQAACAlgFqwABAbWADwAD95AIAAAEDwABAhMAAQJAAAAAAAAAAYAPAAP5+AUrAAECKARbAAECKLpc4nhee0wAADSZfAA0msgANJu8ADSd5AA0nxgAAAAQCntxEwABAucAAQL/AAEKVA52vAAABYAGeKwAAAAEFnuNEwABBUcAAQVHAAEHVAAAAA8AAQWTAAEHVAAAAAwIDwABBbwAAAIKUYAOfSADAAEF5AAAAg2JgA8AA/JcAwABBlQAAAJ1EYAOeNgFqAGADwAD9oXkAYAOe3AE/AQkAwABBsJ41AwADgMAAQbbADSgfgcAAQbzADSgtgsAAQcTADSg9AAMGnt5EwABB2sAAQezAAEJCAACdKgFqwABB22ADwAD95AIAAAEDwABB8MAAQkIAAAAAAAAAYAOfAAFKwABB/AEfwABCAJ7jAwADFsAAQhQugpSepRbAAEIaLoNinqYmwABCIgEcwABCIi6dKwEAARbAAEIvLp0inr8AnsZgA542AAae4ETAAEJHwABCXMAAQm8BAISTAWrAAEJIYAPAAP3kAgAAAQPAAEJowABCbwAAAAAAAABgA8AA+tEBSsAAQmsBKQae4UTAAEJ0wABCiMAAQpMBAGEBasAAQnVgA8AA/eQCAAABA8AAQo/AAEKTAAAAAAAAAGADwAD8lwFKwABCkgGTAAANKIQADSkEAA0pRgANKYcAAAADAp7kRMAAQr7AAELEwABEHgOdsAAAAWABnpcAAAABBZ7qRMAAQ2LAAENiwABDrQAAAAPAAEN3wABDrQAAAAICAsAAQ4AAAACdn2ADnkMAwABDjQAAAINiYAPAAPyXAABgA57kAT8BCQDAAEOXnqICAAKAwABDncANKdyBwABDpsANKeoAAgae5kTAAEOywABDxsAAQ9EBAGEBasAAQ7NgA8AA/eQCAAABA8AAQ83AAEPRAAAAAAAAAGADwAD8lwFKwABD0AGTBp7oRMAAQ9bAAEPowABEHAAAnSoBasAAQ9dgA8AA/eQCAAABA8AAQ+zAAEQcAAAAAAAAAGADnwABSsAAQ/IBH8AAQ/ae6gIAAhbAAEQMLp2fnpkWwABEFS6DYp6mAAAADSohAA0qYgANKsAAAAACAp7rRMAARF3AAERjwABGuAOdLgAAAWABntAAAAEEnu5EwABEmsAARKEJnS+eFwBgA8AA/JcAAQWe9UTAAEWGwABFhsAARfcAAAADwABFmsAARfcAAAAEAwTAAEWlAAAAgpRgA59IAMAARbIAAACAlmADwAD+fgDAAEW9AAAAg2JgA8AA/JcAwABFywAABJ0vYAPAAPyXAWoAYAPAAP2heQBgA57rAT8CCAGe7oMAwA0rWAkAwABF3Z7bAwADgMAARePADSsqgcAARenADSs4gsAARfDADStIAAMGnvBEwABF/MAARhHAAEYkAQCEkwFqwABF/WADwAD95AIAAAEDwABGHcAARiQAAAAAAAAAYAPAAPrRAUrAAEYgASkGnvFEwABGKcAARj3AAEZeAQBhAWrAAEYqYAPAAP3kAgAAAQPAAEZEwABGXgAAAAAAAABgA8AA/JcBSsAARkcBNQAAAAEAYAPAAPyXARbAAEZHLp0vnhee7iMcwABGT4AAwA0sLkgBAAErAAAYwABGWGGevYAAwA0sLgFgA8AA/JcGnvNEwABGY8AARnXAAEa2AACdKgFqwABGZGADwAD95AIAAAEDwABGecAARrYAAAAAAAAAYAOfAAFKwABGfwEfwABGg571BAAEFsAARpgugpSepRbAAEaeLpc4nhee0xbAAEamLoNinqYWwABGri6dL54Xnu4AAAANK6sADSvtAA0sbgANLOQAAAADAp72RMAARtnAAEbfwABIAAORhAAAAWABnqMAAAEEnvhEwABHXcAAR2wYnagBasAAR0xgA8AA/eQCYAOfAAErAQWe/0TAAEcGwABHBsAAR0YAAAADwABHFMAAR0YAAAACAgLAAEcfAAAAgpRgA59IAMAARykAAACDYmADwAD8lwAAYAOe9gE/AQkAwABHM57PAgACgMAARznADS1bgcAARz/ADS1pAAMGnvpEwABHccAAR4bAAEeZAQCEkwFqwABHcmADwAD95AIAAAEDwABHksAAR5kAAAAAAAAAYAPAAPrRAUrAAEeVASkGnvtEwABHnsAAR7LAAEe9AQBhAWrAAEefYAPAAP3kAgAAAQPAAEe5wABHvQAAAAAAAABgA8AA/JcBSsAAR7wBkwae/UTAAEfCwABH1MAAR/4AAJ0qAWrAAEfDYAPAAP3kAgAAAQPAAEfYwABH/gAAAAAAAABgA58AAUrAAEfeAR/AAEfinv8CAAIWwABH8S6ClJ6lFsAAR/cug2KepgAAAA0toAANLeIADS4jAA0ugQAAAAMCnwBEwABI4cAASPDAAGWzB4IWAAABYAHAAP3kAAFgAaewAQSfA0TAAEjwAASWdJ4XAFsBMQBbARoAnwUAJwafBUTAAEluwABJdsAASc0EQQAAAAABA8AASXvAAEnNAAAAAwIDwABJhgAAAIKUYAOfSADAAEmQAAAAg2JgA8AA/JcAwABJpgAAAJ2xYAOeNgFqAGADwAD9oXkAYAOfAAE9NQAAAACCcVsBGgCezxMAAAafBkTAAEoswABKNMAASzoEAZ2yAAAAAQPAAEo9wABLOgAAAAIBAsAASkIAAACDYmADwAD8lwDAAEpYAAAAnSJgA542AWoAYAPAAP2heQBgA58AAT4ETsAASnjAAEp8AACdsmADnwABH8AASoKezwMAA2rAAEqYYAOfSMAArqGAwABKncANL22BwABKpcANL30APRfAAEsEgsAASwDADS+dnTGCwABLD8ANL52fJT0XwABLHILAAEsYwA0vnYO1gsAASyPADS+dnyNKwABLLAGCwABLM8ANL50GnwhEwABLf8AAS4fAAEuQAQKdpgAAAAEDwABLkMAAS5AAAAAAAAAAYAPAAPyXAAafCUTAAEvuwABL9sAATAABAodlAAAAAQPAAEwAwABMAAAAAAAAAABgA8AA/JcABp8KRMAATFzAAExkwABMawECnacAAAABA8AATGvAAExrAAAAAAAAAGADwAD8lwAGnwtEwABM78AATPnAAE0IAQKdqAAAAAEDwABNCMAATQgAAAAAAAAAYAOfAAAGnyJEwABNd8AATXvAAE2aAgKdqAAAAAEDwABNisAATZoAAAABAQHAAE2RAAAAnTFgA58AAABcAAafDETAAE2fwABNs8AATbYBAoKQAWrAAE2gYAPAAP3kAgAAAQPAAE22wABNtgAAAAAAAABgA8AA/JcABp8NRMAATljAAE5iwABOcgEAnUwAAAABA8AATmvAAE5yAAAAAAAAAGADnwABSsAATm4BKwafDkTAAE6/wABOyMAATs0BAp2pAAAAAQPAAE7NwABOzQAAAAAAAABgA8AA+tEABp8PRMAAT1nAAE9iwABPbgECnScAAAABA8AAT27AAE9uAAAAAAAAAGADwAD60QAGnxBEwABP9sAAT//AAFAIAQKdoQAAAAEDwABQCMAAUAgAAAAAAAAAYAPAAPrRAAafEUTAAFBQwABQWcAAUG4BAp2iAAAAAQPAAFBuwABQbgAAAAAAAABgA8AA+tEABp8SRMAAUM3AAFDWwABQ4AECnZkAAAABA8AAUODAAFDgAAAAAAAAAGADwAD60QAGnxNEwABRKsAAUTPAAFE9AQKdqwAAAAED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WAANNYcADTW0AA014QANNhwADTZgAA02mwANNtYADTcQAA03PwANORQAAAAnAp8vRMAAZffAAGX9wAB1OQOdtAAAAWABwAD95AAAEwSfMUTAAGaTwABmugadtQBgA58vAWrAAGakYAOfL8AArskEnzJEwABnLsAAZ4IGnbYAYAOfLwFqwABnTmADny/AAK7aBJ8zRMAAZ/jAAGhSBp23AGADny8BasAAaBpgA58vwACu7ASfNETAAGjIwABpJQaduABgA58vAWrAAGjrYAOfL8AArv0EnzVEwABpmsAAafQGnbkAYAOfLwFqwABpvGADny/AAK8RBJ82RMAAamrAAGrHBp26AGADny8BasAAao1gA58vwACvIwSfN0TAAGs5wABrigaduwBgA58vAWrAAGtYYAOfL8AArzUEnzhEwABsAMAAbF0GnbwAYAOfLwFqwABsI2ADny/AAK9GBJ85RMAAbNHAAG0lBp29AGADny8BasAAbPFgA58vwACvVwSfOkTAAG2YwABt6QadvgBgA58vAWrAAG23YAOfL8AAr2kEnztEwABuX8AAbrwGnb8AYAOfLwFqwABugmADny/AAK97BJ88RMAAbzHAAG+LBp3AAGADny8BasAAb1NgA58vwACvjQSfPUTAAHAEwABwagadwQBgA58vAWrAAHAqYAOfL8AAr58Enz5EwABw38AAcTkGncIAYAOfLwFqwABxAWADny/AAK+zBJ8/RMAAcanAAHH0Bp3DAGADny8BasAAccZgA58vwACvxQSfQETAAHJkwABywQadxABgA58vAWrAAHKJYAOfL8AAr9kEn0FEwABzMcAAc4sGncUAYAOfLwFqwABzVWADny/AAK/rBJ9CRMAAc8vAAHPPCYC9AGADwAD+fgAEn0NEwAB0VMAAdF4Jmh0AYAPAAPyXAAEFn0dEwAB0z8AAdNXAAHUNAQAAA8AAdN/AAHUNAAAAAgECwAB05QAABIC9YAPAAP5+AMAAdPEAAASaHWADwAD8lwFqwAB0/mADwAD8lwkAYAOfLwE/AwgBn0KAAMANPGsIAZ9DgQDADTx7CQHAAHTVwAD9+gAAAAABBp9FRMAAdRLAAHUlwAB1NwAAIwFqwAB1E2ADwAD95AIAAAEDwAB1LcAAdTcAAAAAAAAAYAPAAP5+AUrAAHUzARbAAHUzLoC9n0IAAA08wgANPQwAAAABAp9IRMAAdb7AAHXEwADBWAOdGwAAAWABwAD95AAAWwSfSkTAAHY6wAB2egadqgBgA59IAWrAAHZMYAOfSMAArqEEn0tEwAB2lsAAdv8GncYAYAOfSAFqwAB2pWADn0jAALACBJ9MRMAAdxvAAHeYBp3HAGADn0gBasAAdy9gA59IwACwMQSfTUTAAHe0wAB4LQadyQBgA59IAWrAAHfHYAOfSMAAsGAEn05EwAB4ScAAeKYGncsAYAOfSAFqwAB4VWADn0jAALCPBJ9PRMAAeMLAAHlFBp3MAGADn0gBasAAeN1gA59IwACwuwSfUETAAHlhwAB5uAadzQBgA59IAWrAAHl6YAOfSMAAsOoEn1FEwAB51MAAelkGnTUAYAOfSAFqwAB58GADn0jAAJ2DBJ9SRMAAenXAAHreBp3OAGADn0gBasAAeoRgA59IwACxHASfU0TAAHr6wAB7jgadzwBgA59IAWrAAHsMYAOfSMAAsUgEn1REwAB7qsAAfD0GndAAYAOfSAFqwAB7xmADn0jAALF6BJ9VRMAAfJ7AAH1NBp3RAGADn0gBasAAfL1gA59IwACxsQSfVkTAAH1pwAB95wad0wBgA59IAWrAAH1+YAOfSMAAsecEn1dEwAB+A8AAfkEGndUAYAOfSAFqwAB+FGADn0jAALIZBJ9YRMAAfl3AAH6+Bp3WAGADn0gBasAAfmpgA59IwACySQSfWUTAAH7awAB/Rwad1wBgA59IAWrAAH7qYAOfSMAAsn8En1pEwAB/Y8AAf8IGndgAYAOfSAFqwAB/dmADn0jAALK2BJ9bRMAAf97AAIBfBp3aAGADn0gBasAAf+pgA59IwACy5gSfXETAAIB7wACA6gad2wBgA59IAWrAAICLYAOfSMAAsxoEn11EwACBS8AAgcQGndwAYAOfSAFqwACBXmADn0jAALNRBJ9eRMAAgeDAAIJMBp3eAGADn0gBasAAge9gA59IwACzhwSfX0TAAIJowACCrwad4ABgA59IAWrAAIJ8YAOfSMAAs7kEn2BEwACCy8AAgxIGneEAYAOfSAFqwACC32ADn0jAALPmBJ9hRMAAgy7AAIO2Bp3iAGADn0gBasAAgzxgA59IwAC0EQSfYkTAAIPSwACERAad4wBgA59IAWrAAIPjYAOfSMAAtEgEn2NEwACEYMAAhNIGneUAYAOfSAFqwACEfGADn0jAALR6BJ9kRMAAhO7AAIVHBp3mAGADn0gBasAAhQhgA59IwAC0rASfZUTAAIVjwACF2Aad5wBgA59IAWrAAIWAYAOfSMAAtNwEn2ZEwACF9MAAhlMGnegAYAOfSAFqwACF/2ADn0jAALUOBJ9nRMAAhm/AAIb1Bp3pAGADn0gBasAAhn1gA59IwAC1QQSfaETAAIfXwACILwad6gBgA59IAWrAAIfuYAOfSMAAtXgEn2lEwACIS8AAiJwGnWsAYAOfSAFqwACIYmADn0jAALWsBJ9qRMAAiLjAAIk2Bp3sAGADn0gBasAAiMNgA59IwAC12wSfa0TAAIlSwACJ2gad7QBgA59IAWrAAIlgYAOfSMAAtg0En2xEwACJ9sAAinkGne4AYAOfSAFqwACKBGADn0jAALZBBJ9tRMAAipXAAIsIBp3vAGADn0gBasAAiqZgA59IwAC2egSfbkTAAIskwACLsQad8QBgA59IAWrAAIs1YAOfSMAAtrAEn29EwACLzcAAjEoGnfIAYAOfSAFqwACL4WADn0jAALbpBJ9wRMAAjGbAAIyqBp30AGADn0gBasAAjHlgA59IwAC3GwSfcUTAAIzGwACNTAad9QBgA59IAWrAAIzUYAOfSMAAt1AEn3JEwACNaMAAjfIGnfYAYAOfSAFqwACNeWADn0jAALeJBJ9zRMAAjg7AAI6MBp1FAGADn0gBasAAjhlgA59IwACdsgSfdETAAI6owACPMAad9wBgA59IAWrAAI62YAOfSMAAt7wEn3VEwACPTMAAj88GnfgAYAOfSAFqwACPWmADn0jAALfwBJ92RMAAj+vAAJBeBp35AGADn0gBasAAj/xgA59IwAC4JQSfd0TAAJB6wACQ/wad+wBgA59IAWrAAJCIYAOfSMAAuFQEn3hEwACRG8AAkY0GnfwAYAOfSAFqwACRLGADn0jAALiLBJ95RMAAkanAAJIhBp3+AGADn0gBasAAkb1gA59IwAC4wQSfekTAAJI9wACSrAadRgBgA59IAWrAAJJYYAOfSMAAneMEn3tEwACSyMAAkyQGnUcAYAOfSAFqwACS4WADn0jAAJ4VBJ98RMAAk0DAAJO3Bp1IAGADn0gBasAAk1xgA59IwACeSgSffUTAAJPTwACUZAaeAABgA59IAWrAAJPjYAOfSMAAuPEEn35EwACUgMAAlPgGngEAYAOfSAFqwACUk2ADn0jAALkqBJ9/RMAAlRTAAJVkBp4DAGADn0gBasAAlSlgA59IwAC5XASfgETAAJWAwACV/gaeBABgA59IAWrAAJWWYAOfSMAAuZMEn4FEwACWGsAAlpwGngUAYAOfSAFqwACWJ2ADn0jAALnCBJ+CRMAAlrjAAJcnBp4GAGADn0gBasAAlshgA59IwAC5+QSfg0TAAJdDwACXtQaeCABgA59IAWrAAJdVYAOfSMAAui8En4REwACX0cAAmEMGngoAYAOfSAFqwACX4mADn0jAALpfBJ+FRMAAmF/AAJjkBp4LAGADn0gBasAAmHdgA59IwAC6jwSfhkTAAJkAwACZigaeDQBgA59IAWrAAJkaYAOfSMAAusUEn4dEwACZpsAAmjwGng4AYAOfSAFqwACZw2ADn0jAALr8BJ+IRMAAmljAAJqrBp4QAGADn0gBasAAmnBgA59IwAC7LgSfiUTAAJrHwACbUgaeEQBgA59IAWrAAJrVYAOfSMAAu1sEn4pEwACbbsAAm+AGnhIAYAOfSAFqwACbf2ADn0jAALuUBJ+LRMAAm/zAAJyEBp4UAGADn0gBasAAnAlgA59IwAC7wwSfjETAAJygwACdDwaeFQBgA59IAWrAAJywYAOfSMAAu/wEn41EwACdK8AAncoGnUsAYAOfSAFqwACdU2ADn0jAAJ64BJ+ORMAAnebAAJ6PBp4XAGADn0gBasAAng5gA59IwAC8MgSfj0TAAJ6rwACfLgaeGQBgA59IAWrAAJ65YAOfSMAAvGQEn5BEwACfSsAAn+gGnhoAYAOfSAFqwACfXmADn0jAALyaBJ+RRMAAoATAAKCJBp4bAGADn0gBasAAoBtgA59IwAC80wSfkkTAAKClwACg9QaeHQBgA59IAWrAAKC8YAOfSMAAvQUEn5NEwAChEcAAoWUGnh8AYAOfSAFqwAChKWADn0jAAL00BJ+URMAAoYHAAKH4Bp4gAGADn0gBasAAoZ5gA59IwAC9ZASflUTAAKIUwACiuQaeIQBgA59IAWrAAKI6YAOfSMAAvZoEn5ZEwACi1cAAo5EGnUoAYAOfSAFqwACjAWADn0jAAJ6DBJ+XRMAAo63AAKO8Bp1PAGADn0gBasAAo7pgA55DwACfIASfmETAAKPY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n/0+BD2JhgvADXjOJoYLATUAAAABAFsBFoYZgIYTwA14xYHuACMchh8UAMANfGkVAEgBAAErAACBhiLADXjOFADADXxpFQABW2ADwAD+Uj2Khi3ADXjcJoYtATUAAAABAFsBFoY5gIYzwA14xYCsACMchj0UAMANfLQVAEgBAAErAACChkDADXjcFADADXy0FQABW2ADwAD+/z2LhknADXjzJoZJATUAAAABAFsBFoZcgIZWwA14xYdlACMchmcUAMANfP8VAEgBAAErAACDhmrADXjzFADADXz/FQABW2ADwAD8lz2IhnrADXjFFoaIgIaCwA14xYHHAD89IxyGmYKGlcANeNxIAQABKwDAAP8mioaVwA143BqGnZ/3KwFgA8AA/v89G4avn/YpTobZht4AABJdA8AA/W0CYAPAAP5+WwEyhvFgA8AA/n5bAD0chvsUhvfADX2FFQCAvwIAAieClCeDcADAAP2CPRyHFRSHEcANfYUVAIC/AgACJ4NUJ55zAMAA/YJJhzUhHIc9goc5wA143EgBAAErAMAA/yY9HIdKFIdGwA19hRUAgL8CAAIngKwkh1oBgodWwA143ADAAP2CP0mHXiEch22Dh2LADXjzSAEAASsAwAD9uz0ch3oUh3bADX2FFQCAvwIAAieDYoOHh8ANePMAwAD9gj89HIeZFIeVwA19hRUAgL8CAAIngcceh6Wf+wEAAYCHssANeMUAAMAA/YI9HIfAFIe8wA19hRUAgL8CAAInge4kh9QBgYfOwA14zgDAAP2CToffh+QAAIJkYAPAAP5+AR6H5sAAxawBAAEUh/HADX2FFQAATogFiAwAAINUYAPAAQEhAR6IEsABAS0AAAAASz4ETogwiDoAAJ50YAPAAP7/AR6IQMAA/y0BAAFqiEZgA8AA/n7AAL9vAE6IcwAAAINWYAPAAQFGAEs+Ak2IlgI1AAAAAABbAR6IlsAAuH4EAAQciKMUiJzADX7MFwCedQEAARSIq8ANfuoYAADAAQE0hwDADXlYFADADXlhCAAUAMANeawQAAArPRWIjMANfxIZFADADXm/EQAAAYi9YAPAAPVkAAA+Az0ciQ8UiQjADX7MFwCCjAEAAAGedinAAQFAPY2JKcANeTweiTTAALlyAgFfAwAAAh+JU6AGBAAEgolZwA143IOJXsANePOAiWrADXjFgYlxwA14zgCBiXnADXjOAEIAAEmJiyEciZcUiY/ADX8SGQBIAQABKwDAAP3xPg5NiagCNQAAAAAAWwEeiajAALh+BAAEHImyFImuwA154xQAIAEAASeedwAAhwDADXlYFADADXlhCAAUAMANeawQAAArPRQAwA15vxEAPReJ4RSJ2cANfxIZAJ54KsABAUg9F4oNFIoFwA1/EhkAnnkqwAEBTE6KMIo1AACWiGADwAD+fgE1AAAAAQBgA8AA9IkBNQAAAAEAYAPAAQGAATUAAAABAGADwAEBRgEUijfADX8SGQAjHIpAFADADYCqGgBIAQABKwAAKxaKQBQAwA2AqhoAnnrAAQFTAWADwAEBgCMcilAUAMANgJ0aAEgBAAErAAArFopQFADADYCdGgCee8ABAYIBYAPAAPSJIxyKXxQAwA2AkBoASAEAASsAACsWil8UAMANgJAaAJaIwAD0lQFgA8AA/n5Oim+KdAAAlolgA8AA/JcBNQAAAAEAYAPAAQGAATUAAAABAGADwAEBRgEUinbADX8SGQAjHIp/FADADYFhGwBIAQABKwAAKxaKfxQAwA2BYRsAnnrAAQFTAWADwAEBgCMcio8UAMANgVQbAEgBAAErAAArFoqPFADADYFUGwCefMABAYMBYAPAAPyXTYqhAjUAAAAAAFsBHoqhwAC4fgQABByKqxSKp8ANeeMUACABAAEkir0EJ4GdFIqywA2AgBoAJ4LqFIq4wA2BRBsAAACHAMANeVgUAMANeWEIABQAwA15rBAAACs9FADADXm/EQBNisYCNQAAAAAAWwEeisbAALh+BAAEFIrMwA1/EhkAhwDADXlYFADADXlhCAAUAMANeawQAAArPTWKxgAAAQBgA8ABAUYBFADADXm/EQA1AAAAAQBbAReK5haK3hSK3MANgmwcAJ59wAEBUJ5+GosAwAEA5MABALs1AAAAAQBbARyLDxSLDcANgmwcAIKOAQABFIsVwA1+qBYAAMAA8XUUAMANgmwcAE2LIgI1AAAAAABbAR6LIsAAuH4EAAQcizAUiyjADX8SGQCCjAAAAADAAQFVhwDADXlYFADADXlhCAAUAMANeawQAAArPRQAwA15vxEATYs/AjUAAAAAAFsBHos/wAC4fgQABByLSRSLRcANeeMUACABAAEngWoAAIcAwA15WBQAwA15YQgA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LoUCoCMWn7wunrWgKgCqe06f8J/6AACevl0DwAD9OwFgA6ljARygDRagBi6VS6Afnr8BAAEWoBwunrWgKgCqgT0coD4WoDculUugH57AAgACFqBSLp61oCoWoGYunqWgIQCqej0coIEWoHoulUugH5VBAAAAAKqCPRygoBagmS6VS6AfnsEAAAAAqnY9HKDFLp7CAAAAAKA3PRyg5y6ewwEAARShBMANn5EYAACgOD0coR0WoRYulUugH57EAAAAAKp5PRehOi6CWRyhUC6WVQIAAR6hWcAA/UEBAWADgosBFqFzFqFsLpVLoB+G6qCDAAGG7oChicANnCagNqAgPRyhmi6exQAAAACgPz0cobsWobQulUugH57GAgACFKHPwA2fkRgAFqHaLp61oCoAqpA9HKH8FqH1LpVLoB+exwAAAACqhD0coh0WohYulUugH57IAQABFKI2wA2fkRgAAKqSPRyiTxaiSC6VS6AfnskBAAEUol/ADZ+RGAAAqog9HKJ4FqJxLpVLoB+eygAAAACqiT0copQWoo0ulUugH57LAQABFKKjwA2fkRgAAKqKPRyivBaitS6VS6AfnswBAAEUotHADZ+RGAAAqos9HKLqFqLjLpVLoB+ezQEAARSjBMANn5EYAACqjD0cox0WoxYulUugH57OAQABFKM3wA2fkRgAAKqNPRyjUBajSS6VS6Afns8BAAEUo1zADZ+RGAAAqo49HKN1FqNuLpVLoB+e0AAAAACqjz0co5YuntEBAAEWo7kWo7IulUugH57SoIcAoDU9HKPyFqPdFqPWLpVLoB+e0qCHgkYAAAAAwAD9VD0VpAHADZ1lDRakCC6CWaAgQgAAPR4AwAC4gQIAAhQAwA2dQwwAFADADZ1lDQAASqQYAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cABQAwA2dQwwAgd0CAAIUAMANoikYABQAwA2iMhkAAMAAuZE9FQDADZ14Dh4AwAC4ggEAARQAwA2dsRQAAD0VAMANnYEPHgDAALh8AQABFADADZ2xFAAAPRUAwA2dihAeAMAAuH0BAAEUAMANnbEUAAA9HJ12FADADZ1DDABqAQABFADADZ2xFAAAAEoAARYAFADADZ1DDACB3sAAuY00pBoDpBqkQwAAAAAAAABgA8AA/v8BSqQgATUAAAABAGADqlcBFqQg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AoQgFsAARB+FwABEGMANt9iEIIiQhCIWwABEOIXAAEQxwA232IQiiJFJwABESCEcwABEWBbAAERThcAAREzADbfYgpSIhEgBAAErAIjtPgE9F8AARHCGwABEa8ANt++ClB7AAER3mvsCAAIWwABEiYXAAESCwA232IKUiISDwABEj8ANt44AiIQ/SsAARK8BhsAARLbADbfvTsAAROHAAET2AACEx10DwAD9OwFgA4h+ATHAAEUNYAOIfgBOwABFL8AART8AAITIXQPAAP07AWADiH4BMcAARVZgA4h+AE7AAEVvwABFegAAhaNdA8AA/TsBYAOE2QExwABFiGADhNkATsAARabAAEWsAACFbV0DwAD9OwFgA4WxATHAAEW/YAOFsQBGwABFx8AARh3AAEXgAAAAme5gA4h+ABbAAEYHFsAARf6CwABF8sANt4CCboPThMeEtT4CPRzAAEY6hcAARiXADbi2VgEAARzAAEZIhMAARj7ADbe0IAEAARTAAEZJwA25SgkAAAAAwAD9TD0cwABGZIfAAEZZwA24/FYBAAEfwABGbIT3AQABFsAARo2FwABGeMANuLaB6sAA/SAAAMAA/UxGwABGn8AARujAAEa4AAAAme5gA4h+ABbAAEbXFsAARs6CwABGwsANt4CCboPThMiEtj4ETsAARwTAAEcKAACe72ADiH4BHMAARxaEwABHDMANt7QgAQABFMAARxfADbnsCQAAAD01wABHJgAAAQBdA8AA/TsBYAPAAP3kARbAAEcmLp6noCc1AAAAAQBbARzAAEc1FMAARzPADbpKCwBWAQABFMAARznADbnsCQAAwAD9TDUAAAABAFsBHMAAR0IUwABHQMANukoLAFYBAAEUwABHRsANuhgKAADAAP1MNQAAAAEAWwEcwABHThTAAEdMwA26SgsAVgEAAYPAAEdSwA23jgDAAP1MFADADbpKCwA9HMAAR3qGwABHasANuNlWAQABFMAAR37ADboYCgAAwAD9TD0cwABHkhTAAEeMwA25HwgAVgEAAR/AAEeahboCAAIWwABHvBTAAEe1wA257AkAgL2Igh/AAEfGhPcBAAEWwABH4obAAEfSwA242YHqwAD9IAAAAMAA/UxOwABIAsAASAsAAIJuYAOErgEfwABIEYTJBQABH8AASCKHvAAAAAAEhMeFwABIUsANuLaEyIbAAEiBwA242YUuFsAASMcWwABIvoLAAEiywA23gIJug9OFLoS0hUkcwABI8y6e8AEAAYDAAEkNwA23ZACgPk7AAEkpwABJNQAAhRNgA4R+AR/AAEk7hIsCAAKCwABJVcANt4AfwABJZoWvAgABh8AASXDADbj8AYVtFMAASYPADbkfCAAASsAASZABH8AASZuD7gUAARTAAEmnwA27cAkABIC9FsAAScuCwABJv8ANt4CAvYOBhSYxwABJ9GADhGEBFMAASfXADbvkCgCEkymEIiIWwABKO4LAAEovwA23gIQig9kAFsAASlMWwABKTIHAAEpGwA23coSLgy6BVcAA/R0GoDxKwABKZMAASmnAAE4kAACe1QAAAAEDwABKf8AATiQAAAAAAAAAXAE+A0XAAEqIAcAASpHAAEqTAABiYAPAAPyXAZMBHMAASpqAwABKmMANvNljAQABFsAASqoWwABKnC6ep6AnYcAA/WsAwAD9xQGIwABKssANvNkcwABKtIDAAEqywA282WQBAAGWAMAA/b0+A07AAEt9wABLhgAAnvFgA4h+ASbAAEt9ARzAAEuVFsAAS4gunqegJ0sBAAGAwABLlsANvNkAwAD9SmADiH5OwABLtMAAS7oAAJ7vYAOIfgEmwABLtAEcwABLyRbAAEu8Lp6noCdLAQABHMAAS8yAwABLysANvNlkAQABlADAAP29AMAA/UpgA4h+ScAAS9ghHMAAS/EWwABL5YHAAEvcwA29PYUTiIZIAQABKwDAAP3xPgJOwABNJMAATSsAAJ7yYAOnwwEfwABNPag6AQAAAZ7zJsAATWkBHMAATWkWwABNXC6ep6AnSwEAARzAAE1sgMAATWrADbzZZAEAAZUAwAD9vQDAAP1KXQPAAP1tAmADiYJgA4jpPRfAAE2BgsAATXvADb16hRM1wABNlgAAAQBgA4TZARzAAE2Wg8AATY/ADb3vnu8BAWADhNkBFsAATaWBwABNnMANvT2FE4iGAKfUNQAAAAEAWwEXwABNs4TAAE2xwA2+ZIRXgsAATbzADb16gliEAMANvmSIhj89HMAATeMWwABN1S6ep6AngkYAAAAAwAD9VD0cwABN9xbAAE3wLogTwABSIYhHAQABJ570AJ18BqA9SsAATinAAE41wABPLQAAnusAAAABA8AATkvAAE8tAAAA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wAD60QE+AUqspgEiHKzCFqytLqD5ondIAQABkwDAAP27ACWs0Rasyi6CaqJjYAPAAFYRBqKHVqzvrPitYQEAoQ4AAAABA60VrWEAAAAAAAAAYAPAAPrRAT4BSq0bASIWrSIuoO2iaAElrUgWrUEugmqiY2ADwABWEQaiiFatZq16rbABAIbdAAAAAQOtiq2wAAAAAAAAAGADm58BSq2NATUAAAABAGADsLgBFq2NLqDxom4jHK2bgADADxvRSAEAASsAACsWrZuAAMAPG9GhD7DCAWADwABUhgaiiVatta3Crh8BAKEQAAAAAQOt164fAAAAAAAAAGADiOkBSq3gASMWreAuglCicGqt82ADiQCEm2quCWADtUXAAMGIAWADiOkGootWriSuNa7MAAChEQFqriVgA8AA/eQCAAABA645rswAAAABAQGuQQAAAIPzYAPAAP3kAABcAT4DSa5NJa5WgK5RwA8ceWADiOk+AT0ermudagQABCeGfCehERyuiZSBxgAAAADAAPy6Fq6NLoCsom0APz0Xrp0uoPUqonM9Ha6+oREBAAGArsPADxx5AMAAWosGooxWrtGu3K77AAChEgAAAAEDrueu+wAAAAAAAABgA4TZAUqu7QEcru0uoRMBAAEcrvUuoRQAAAAAwABajgCijwaijVavAK8LrywAAKEVAAAAAQOvF68sAAAAAAAAAGADhNkBSq8dARyvHS6hFgEAARyvJi6hFAAAAADAAFqOAKKQBqKOVq8xrzyvlAAAoRcAAAABA69Qr5QAAAABAQGvWAAAAICWYAPAAP3kAABgA4TZAT4BSq9lASMcr3KAr2zADx2ESAEAASsAwAD98Sscr4MuoRIAAAAAoowBYAOE2Qaij1avma+wsZIAAKETAWqvmmADwAD95AIAAAEDr7exkgAAAAEBAa+/AAAAg/NgA8AA/eQAAGADhNkBPgFJr8slr9SAr8/ADx3sYAOydT4BSq/qARyv9hSv8cAPHewAAWADsnWhGAAAAACygUmwFCWwHYCwGMAPHexgA4TZPgFKsDQBFLA7wA8d7AABYAOE2UmwTCWwVYCwUMAPHexgA4R+PgFKsHIBHLB5LqEZAwADarCXYAORo8AAhbAWsLYUsLHADx3sAAFgA4R+hFiCWWqwwmADwAD8lxUAo2tJsNglsOGAsNzADx3sYAOpJz4B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F8AASGAuoP6GwABIcsAPL3qifQainlbAAEiVwABIpsAASasAAKFCAWrAAEiWYAPAAP3kAgAAAQPAAEi1wABJqwAAAAEBAcAASLoAAACA7mADwAD8lwAAXAE+Aj0cwABIxy6hNAEAASehQwCjgknAAEjnHMAASPGAwABI68APMI5IAQABkwDAAP27PgE9HMAASP8uoREBAAFqwABJDmADwABaSsAAwdcAoos+AT0cwABJLC6hEQEAATUAAAABAF0DwAD9OwFgA4TZARzAAElSasAASTddA8AAWtMBYAOE2cAAwe6hFAIAAhbAAElWLqEgwABagYDAAEldwA8wjgDAAFrVIxzAAElkgQDADzEBSAEAASsAAGrAAEl7YAPAAFpKwADB14EAwA8xAQFgA8AA/eQAoosGop9WwABJsMAAScHAAEseAAChRQFqwABJsWADwAD95AIAAAEDwABJ0sAASx4AAAAHBwfAAEngAAAAoUZgA58AAMAASfkAAAChR2ADnwAAwABKFQAAAKFIYAOfAADAAEosAAAAoUlgA58AAMAASkcAAACA7mADwAD8lwDAAEpaAAAAn5BgA58AAMAASnIAAACdQ2ADnwAAAFwBPgM9HMAASoIuoTQBAAEnoUoAo4JJwABKpCEWwABKvxbAAEq4FsAASrEWwABKqS6ESKJilUupfIJJqmmfhqiLPgE9HMAAStouoUsBAAGCwABK+cAPMcsAwABYTj89HMAASw8uoREBAAGEwABLFMAPMecAoosGoqBWwABLI8AASzTAAExcAAChTAFqwABLJGADwAD95AIAAAEDwABLPcAATFwAAAAHBwfAAEtEAAAAoUZgA58AAMAAS1cAAAChR2ADnwAAwABLbQAAAKFIYAOfAADAAEuEAAAAoUlgA58AAMAAS5kAAACA7mADwAD8lwDAAEumAAAAn5BgA58AAMAAS7gAAACdQ2ADnwAAAFwBPgM9HMAAS8guoTQBAAEnoU0Ao4JJwABL4iEWwABL/RbAAEv2FsAAS+8WwABL5y6ESKJilUupfIJJqmmfhqiLPgE9HMAATBguoUsBAAGCwABMN8APMtkAwABYTj89HMAATE0uoREBAAGEwABMUsAPMvUAoosGoqFWwABMYcAATHLAAFTDAAChTgFqwABMYmADwAD95AIAAAEDwABMfsAAVMMAAAAAAAAAXAE+CD0cwABMhy6hNAEAASehTgCjgk7AAEyrwABMsQAAgO5gA8AA/JcBJsAATKsBHMAATLMuoRQAAAAAwABajmADwAD8l07AAEzRwABM2AAAhItdA8AA/TsBYAPAAFWZATHAAEzoYAPAAFWZAEXAAEzwAcAATPnAAEz7AABiYAPAAPyXAZMBHMAATQKCwABNAMAPND9jAQABgMAATQTADzPjAMAA/cUBisAATQvADzQ/HMAATQyCwABNC8APND9kAQABlADAAP29QT4JTsAATSPAAE0vAACFE2ADhNkBJsAATSMBHMAATTEuoRQAAAAAwABajmADhNlOwABNScAATVQAAJ3KYAPAAFSrASbAAE1JARzAAE1WLqEUAAAAAMAAWo5gA8AAVKtOwABNasAATW8AAIC9YAPAAP5+ARbAAE18hMAATXHADzTFgL3AAFStTsAATZAAAACe3mADwABVTgBJwABNoyEcwABNuhbAAE2nLqDromRIAQABKwDAAP3xPgE9jsAATc3ADzUdHMAATfoWwABN5y6g66JknrkCAAGFwABODMAPNPUBmk0pr5M+AT2OwABOOsAPNR0cwABOUBbAAE5ILoRIomKeuQIAAYXAAE5iwA809QGaTSnAAFaDTsAATpQAAACEm2ADwABVmQBJwABOoSIWwABOsYbAAE6lwA81HYeOwABVXAAcwABOzRbAAE7IhsAATrzADzUdg7XAAFVQSAEAASsAwAD98T4BPY/AAE7gwA81rSbAAE7gAYbAAE7owA81HWADwABVmT4BQsAATwwAPRzAAE8rgcAATyTADzQTVgEAAYfAAE8vwA81rQDAAP1MScAATz0hHMAAT02DwABPQcAPNJlIAQABKwDAAP3xPgFJwABPYCEcwABPbxbAAE9qh8AAT2TADzWtg7XAAFVQSAEAASsAwAD98T4AScAAUEohHMAAUGcWwABQWxbAAFBUh8AAUE7ADzWtgknAAFWmhRODoEgBAAErAMAA/fE+AD4DPRfAAFFlh8AAUV/ADzWthRODwABRc8APNJnAAFWpPTUAAAABAGADsLgBFsAAUYouoPGibiMcwABRmBQAwA825ggASAEAASsAACscwABRmBQAwA825ggAoU8DAAMuFsAAUcmHwABRw8APNa2hUMAAVaeDwABR1MAPNJkAsMUBXD0cwABR+xbAAFH0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gm3AAFXmIxzAAKzegwDAD294SAEAASsAACsWwACs3oMAwA9veIRYglkBYAPAAPyXIxzAAKzpgwDAD29rSAEAASsAABbAAKz0gMAArOzAD264h2XAAFbYgwDAD29rAWADwAD8lz0cwACtHxbAAK0SgsAArQbAD28HhSaD1FYBAAEcwACtIy6hXgIAAhzAAK1GLqFfAQABHMAArXAuoRkDAANqwACtg2ADkaOhWoPAAK2ewA9vV2rAAK2mYAPAAPyXFQCjawCji4PAAK28wA9vVwCjcgDAAP1MP0nAAK3QFsAArdQuoPOicT4FTsAArtbAAK7iAACfAmADg88BHMAAruQuoaECAAEawACu9q/iAYeLKaLSTsAAryMAAACFE2ADhGEATsAAr0DAAK9KAABbYAOFowEcwACvUxbAAK9MLqDqomGhogEAASbAAK9oAWrAAK9oW3lgA58AALT1ScAAr3siHMAAr4uDwACvf8APcHtIAQABKwDAAP3xASEcwACwGhzAAK+gLqGjBAAEFsAAr8aDwACvusAPcHuCboPThcAAr9DAD3C0FsAAr/WAwACv7cAPbriHZcAAVthqwACwAV0DwAD9OwFgA4mChcIAoyhIAQABKwDAAP3xPgROwACwQsAAsE0AAITzYAPAAP5+ARbAALBmFsAAsFwWwACwTy6g7KJlhOHAAFTxoaTAAFc8TsAAsIXAALCMAABhYAPAAPyXARbAALCkFsAAsJ8WwACwmoLAALCOwA9vB4C9g4GAvYi3YcAA/oJJwACwtBzAALC/h8AAsLjAD3GhSAEAAZMAwAD9uz4BPY/AALDRwA9xoRbAALD9FsAAsPgmwACw7gAWwACw54LAALDbwA9vB4RXglhgA4MbgL2DIWHAAP6CPz2MwACxF8APcKUcwACxJS6hXgIAAhzAALFKLqFfAQABHMAAsWUuoRkDAAMcwACxyGrAALGJXQORrwFhAwFgA8AA/n5gA5GYwACG4ogvAQABhsAAsdbAD3FtAJGzFsAAsfuAwACx88APbriHZcAAVtiHwACyF8APcaEAo2sAo4sWwACyNYDAALItwA9uuIdlwABW2ACjcj4BPYzAALJZwA9wpRzAALJnLqFqBAAEKYPAALKQwA9we4XAALKdwA9wtBbAALKwgMAAsqjAD264h2XAAFbYAKN2PRzAALLkFsAAsteC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H2ADhNkBHMAA1LYuoRIAAAAAooxOwADU1MAA1N0AAIWPYAOE2QEmwADU1AEcwADU3y6hFAAAAADAAFqOYAOE2U7AANT1wADVBwAAodJgA4TZARzAANUYFsAA1REuoOqiYaHTAwADgsAA1TDAD4vFgMAA1TrAD4uSgcAA1UHAD4umALUgPTUAAAABAGADsSABFsAA1VAuoPKibyMcwADVXoQAwA+MNkgBAAErAAArHMAA1V6EAMAPjDah1AIAAoHAANV0wA+LpoPAANV+wA+L8QCxLwFcPRzAANWWLqERAQABg8AA1ZvAD4vxAKKLBqLIVsAA1c3AANXSwADXrQAAocoAAAABA8AA1drAANetAAAAAQEBwADV4QAAAJKFYAOfAAAAXAE+BE7AANX5wADV+wAAgk5gA4TZARzAANX9LqESAAAAAKKMTsAA1hvAANYdAACB12ADhNkBHMAA1h8uoRIAAAAAooxOwADWRsAA1k8AAIJwYAOIfgEfwADWVYioAQABgsAA1nLAD4z4AD0cwADWei6hEQEAATXAANaDAAABAGADrSsBH8AA1oOtNQIAAoPAANabwA+NGBzAANa0FsAA1q0uoOqiYaHVBQAFHsAA1t2ycQMAAx/AANbthPcBAAGDwADW+cAPjRgAHsAA1wTAAFo4AQABgMAA1xPAD4zEAC4AgMAA1y7AD4zEgcAA10HAD4zYKx/AANdmhPcBAAGDwADXcsAPjRgAALUYADUAAAABAFsBF8AA14aEwADXhMAPjUqEWB7AANeTwABaOAEAAYDAANeiwA+MxACCWYQAwA+NSgCiiwaiyVbAANfMwADX0cAA2UAAAKHLAAAAAQPAANfcwADZQAAAAAEBAcAA1+MAAACShWADnwAAAFwBPgJOwADX98AA1/wAAKHWYAPAAP3kARzAANf+LqEUAAAAAMAAWo5JwADYCSXAANgSgcAA2A3AD45TYAO0ZD4BPRzAANg2LqERAQABHMAA2EAUwADYO8APjlMBAWADtGSh1wMAAhzAANhNLqEUAAAAAMAAWo4WwADYWoDAANhUwA+OP4dlnwkBodgptGkAoos+Az0cwADYji6hFAAAAADAAFqOPYjAANibwA+OPxbAANipgMAA2KPAD44/g7WfGz0cwADYtS6hEQEAARzAANi6LqEZAwADHMAA2OhqwADYzV0Dka8BYQMBYAOfAGADkZiz1YgvAQABgMAA2PbAD44/AJGzHsAA2QjAAFo4AQABgMAA2RfAD44/AB7AANkfwABaPwEAAYDAANkuwA+OPwAAo2sAoosGospWwADZRcAA2UrAANr8AAChyAAAAAEDwADZYsAA2vwAAAABAQHAANlpAAAAkoVgA58AAABcAT4CTsAA2X3AANmCAACh1mADwAD95AEcwADZhC6hFAAAAADAAFqOScAA2Y8lwADZmIHAANmTwA+Pv2ADtGQ+Ak7AANnDwADZzAAAhY9gA8AA/eQBIx7AANnOwABaNAIAAieBaoDAANncwA+PqwAcwADZ5S6hFAAAAADAAFqOHMAA2e0uoRIAAAAAoowBYAPAAP3kPRzAANoCLqERAQABHMAA2gwUwADaB8APj78BAWADtGSh1wIAAoLAANoZwA+P/BbAANopgMAA2iPAD4+rh2WfCQC0aQCiiz4DPRzAANpKLqEUAAAAAMAAWo49iMAA2lfAD4+rFsAA2mWAwADaX8APj6uDtZ8bPRzAANpxLqERAQABHMAA2nYuoRkDAAMcwADapGrAANqJXQORrwFhAwFgA58AYAORmLPViC8BAAGAwADassAPj6sAkbMewADaxMAAWjgBAAGAwADa08APj6sAHsAA2tvAAFo/AQABgMAA2urAD4+rAACjawCiiwaiy1bAANsBwADbBsAA24AAAKHZAAAAAQPAANscwADbgAAAAAICAsAA2yoAAACCbmADhK4AwADbPgAAAFtgA4WjAABgA8AA+tEBPgFKwADbcQEpBqLMVsAA24XAANucwADlhwAAoY0BasAA24ZgA8AA/eQCAAABA8AA27LAAOWHAAAACgQEwADbxQAAAIWPYAOE2QDAANvWAAAAgL1gA8AA/n4AwADb5gAAAFtgA4WjAMAA2/UAAACHZWADwAD8lwAGwADcDwAAAIhiYAODfQFqAGADwAD9oXnAANwlAAAAh4tgA8AA+tEBasAA3C5gA8AA+tEAwADcQAAAAIVCYAPAAPrRAWrAANxKYAPAAPrRAMAA3FwAAACFRGADwAD60QFqwADcZmADwAD60QDAANx4AAAAhB5gA8AA+tEBasAA3IJgA8AA+tEAwADcngAAACJgA5G2AWoAYAPAAP2heWADhNkBPglOwADcssAA3LkAAGFgA8AA/JcBFsAA3MCB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nsABEqgAAKICYAPAAP3kARzAARKqLqEUAAAAAMAAWo5JwAEStSXAARLDgsABErnAD7XdYAPAAFrYPgE9HMABEt4uoREBAAEUwAES48APtd0CAWADwABa2ACii0nAARL6JcABEwOBwAES/sAPtblgA8AAWtg+AT0cwAETHi6hEQEAARTAARMjwA+1uQEBYAPAAFrYAKKLPgJOwAETSMABE1MAAJ3KYAPAAFSrASbAARNIAYHAARNVwA+1uWADwABUqz0cwAETYS6hEQEAARzAARNxg8ABE2bAD7Z5ogMBAAGCwAETf8APtd0AwABUtQCiiwai1lbAAROZwAETqsABFAUAAKIEAWrAAROaYAPAAP3kAgAAAQPAARO8wAEUBQAAAAEBAcABE8MAAACShWADnwAAAFwBPgI9HMABE9AuoTQBAAEnogQAo4I9HMABE/YuoREBAAGAwAET+8APtwQAoosGotdWwAEUCsABFBvAARRsAACiBQFqwAEUC2ADwAD95AIAAAEDwAEUK8ABFGwAAAABAQHAARQyAAAAkoVgA58AAABcAT4CPRzAARQ/LqE0AQABJ6IGAKOCPRzAARRdLqERAQABgMABFGLAD7d0AKKLBqLYVsABFHHAARSCwAEbUQAAogcBasABFHJgA8AA/eQCAAABA8ABFJLAARtRAAAAAgICwAEUlwAAAKIIYAPAAPyXAMABFLEAAACdQ2ADnwAAAFwBPgI9HMABFMEuoTQBAAEnogcAo4JJwAEU5RzAART8gMABFOnAD7fkSAEAAZMAwAD9uz4DTsABFRDAARUWAACShWADnwABJsABFRABHMABFRguoRQAAAAAwABajmADnwBOwAEVLMABFTIAAICWYAPAAP5+AR7AARU0sAoDAAMWwAEVSYLAARVDwA+4OYJinxqCwAEVUcAPuDkuAD0cwAEVZS6hEQEAARzAARVxFsABFWouoOqiYaIJAgACg8ABFYXAD7hlgsABFYzAD7g5ALUDAKKLPgtOwAEVrMABFbIAAIDuYAPAAPyXARzAARW2lGQBAAEcwAEVy4DAARW4wA+35IONAQABlQDAAP2/AMAA/b1OwAEV48ABFekAAISGXQPAAP07AWADwAD95AEcwAEWDWrAARXxXQPAAFrNAWADwAD95MAAwiGhFAIAAhbAARYRLqEgwABagYLAARYYwA+42gDAAFrPScABFiYcwAEWMIPAARYqwA+5FkgBAAErAMAA/WU+Aj0cwAEWQy6hEQEAAR/AARZMwABa3gEAARbAARZkgcABFlvAD7f0h2WfCQAAootKwAEWegA/TsABFpbAARacAACDHmADnwABJsABFpYBFsABFqSDwAEWnsAPuRaDHsAA/R9gA58ATsABFrfAARa8AACB6mADnwABJsABFrcBFsABFsSDwAEWvsAPuRaB6sAA/SBgA58ATsABFtbAARbcAACiCmADsA0BHsABFt6wBAEAARbAARbxhMABFuvAD7m/gmKfGgBOwAEXEcABFx0AAIXPXQPAAP07AWADhNkBMcABFytgA4TZAEnAARdgHMABF3gWwAEXcRbAARdqhMABF2TAD7m/gmKfGmHAAP6CgJcBAAGUAMAA/cc+Ak7AAReOwAEXlAAAgJZgA8AA/n4BHsABF6KwCAQABBbAARfAhMABF7rAD7m/gmKfGobAARfIwA+6H4TAARfPwA+5vy4AScABF+UWwAEX7xTAARfpwA+6pAgAg7fAAP6FPgE9HMABGBOHwAEYB8APuk5WAQABHMABGB4WwAEYFy6g6qJhogkCAAIUwAEYMsAPuqQIAITAARg5wA+5vwC1AwDAAP1MPz9FwAEYWgHAARhjwAEYZQAAYmADwAD8lwGUARzAARhsFMABGGrAD7tPCABjAQABHMABGHsWwAEYdIPAARhuwA+5FmHAAP1rgY0BAAGUAMAA/b4AwAD9xQEVwAEYgMAPu08IHMABGIEUwAEYgMAPu08IAGQBAAGUAMAA/b0+Ak7AARiWwAEYmwAAmiVgA8AA/eQBHMABGKKDwAEYncAPuRZLAQABFMABGKPAD7tPCAAAwAD9SknAARivJcABGLgUwAEYs8APu8cJAGADnwA+AUnAARjOIRzAARjlFsABGN4WwAEY1xTAARjSwA+7xwkBYAOfAIJinxphwAD+gkgBAAGTAMAA/bs+Ak7AARkAwAEZBgAAgJZgA8AA/n4BHsABGQiwCwQABBbAARkWFMABGRHAD7vHCQFgA58AgmKfGobAARkewA+6HxTAARklwA+7xwkBYAOfAC4APRzAARlKh8ABGT7AD7pOVgEAARzAARlVFsABGU4uoOqiYaIJAgACFMABGWnAD7xRCgAUwAEZcMAPu8cJAWADnwAAtQMAwAD9TD8+AT0cwAEZq4fAARmfwA+6TlYBAAEcwAEZry6hEwEAARTAARm3wA+7xwkAAKKPAMAA/UxJwAEaAhzAARoZFsABGhIWwAEaC4XAARoGwA+574JinxphwAD+goCXAQABlADAAP3HPgJOwAEaL8ABGjUAAICWYAPAAP5+AR7AARo3sAkFAAUWwAEaYIXAARpbwA+574JinxqGwAEaaMAPuh+FwAEab8APue8WwAEaeoXAARp1wA+574STnxQuAEnAARqWFsABGqAUwAEamsAPvVEIAIO3wAD+hT4BPRzAARrEh8ABGrjAD7pOVgEAARzAARrPFsABGsguoOqiYaIJAgACFMABGuPAD71RCACFwAEa6sAPue8AtQMAwAD9TD8/PRzAARsKLqERAQABHMABGxYWwAEbDy6g6qJhogsCAAKHwAEbMMAPuk6BwAEbPcAPt/QAtSUAoosGotlWwAEbVsABG2fAARv9AACiDAFqwAEbV2ADwAD95AIAAAEDwAEbecABG/0AAAACAgLAARuAAAAAog1gA58AAMABG5IAAACiDmADwAD60QAAXAE+Aj0cwAEboS6hNAEAASeiDwCjgknAARvBgcABG8XAD76BPgE9HMABG90WwAEb1i6g6qJhohABAAEmwAEb7QEcwAEb7S6hFAAAAADAAFqOYAOE2QC0+j8GotpWwAEcAsABHBPAARxLAACiEQFqwAEcA2ADwAD95AIAAAEDwAEcH8ABHEsAAAABAQHAARwmAAAAkoVgA58AAABcAT4BPRzAARwzLqE0AQABJ6ISAKOCBqLbVsABHFDAARxhwAEfRAAAohMBasABHFFgA8AA/eQCAAABA8ABHHrAAR9EAAAAAQEBwAEcfwAAAKIUYAPAAPyXAABcAT4FPRzAARyTLqE0AQABJ6IVAKOCTsABHMvAARzRAACEhl0DwAD9OwFgA4TZARzAARzTLqEbAQABgMABHOPAD792AKKRTsABHQcAAACFz10DwAD9OwFgA4TZAEXAAR1WAcABHV/AAR1hAABiYAPAAPyXAZMBHMABHWiDwAEdZsAPv+ljAQABFsABHXCBwAEdasAPv55hwAD9awDAAP3FAYvAAR14wA+/6RzAAR15g8ABHXjAD7/pZAEAAZQAwAD9vT4CTsABHZDAAR2VAACaJWADhNkBHMABHZyBwAEdl8APv55LAQABg8ABHZ3AD7/pAMAA/UpJwAEdpyXAAR2whMABHavAD8BMYAOGQT4CScABHdIcwAEd4oLAAR3WwA+/zkgBAAErAMAA/WU+AT2KwAEd98APv84cwAEeC4HAAR4FwA+/noFYAgACk4PAAR4WwA+/6QDAAP1eP0bAAR4swAEeXMABHjwAAACCb2ADhNkAFsABHk8UwAEeSsAPwEwEAWADhkGFz4ZDPgE9HMABHnSCwAEeaMAPv85WAQABhcABHnjAD8DrAMAA/Uw+AUnAAR6mIRzAAR62gsABHqrAD7/OSAEAASsAwAD9ZT4BPRzAAR7XgsABHsvAD7/OVgEAAYTAAR7bwA/ATADAAP1MPz0cwAEe/i6hEQEAARzAAR8KFsABHwMuoOqiYaILAgACNQAAAAEAXQPAAP07AWADhNkBgsABHyTAD7/OIxzAAR8wgwDAD8GZSAEAASsAAIHAAR8zwA+/noMAwA/BmQFdA8AA/TsBYAOE2SsAtSUAoosGotxWwAEfScABH1rAASHuAACiFgFqwAEfSmADwAD95AIAAAEDwAEfasABIe4AAAABAQHAAR9xAAAAkoVgA58AAABcAT4EPRzAAR9+LqE0AQABJ6IXAKOCTsABH6DAAR+mAACAlmADwAD8lwEewAEfrMAA/McBAAEWwAEfu4DAAR+1wA/CG4JinxoAScABH8gWwAEfzC6CUKJwPgJJwAEf4BzAAR/qgcABH+TAD8JBSAEAASsAwAD9uz4BPRzAAR/9LqERAQABHsABIAKdagQABCeiGCeiFhbAASBEgMABID7AD8Ibh2WfCRbAASBQLoCsom0AAKKLPgE9HMABIG4uoREBAAEcwAEgehbAASBzLqDqomGiGQIAAoHAASCLwA/CQYDAASCSwA/CGwC0/QCii0rAASCpAD9JwAEhRSIcwAEhT4HAASFJwA/CQUgBAAErAMAA/bsBHMABIWCBwAEhWsAPwkFjAQABkwDAAP3FPgE9HMABIW0uoREBAAEcwAEheRbAASFyLqDqomGiGgIAAhbAASGVgMABIY/AD8IbgmKfGoDAASGdwA/CGwC0/gCiiz4BPRzAASG5LqERAQABHMABIcUWwAEhvi6g6qJhohkCAAKBwAEh1sAPwkGAwAEh3cAPwhsAtP0AoosGot1WwAEh88ABIgTAASKJAACiGwFqwAEh9GADwAD95AIAAAEDwAEiG8ABIokAAAABAQHAASIiAAAAohxgA58AAABcAT4CPRzAASIzLqE0AQABJ6IdAKOCPRzAASJdLqFWAwADkyuAwAEie8APxAcAoqMGot5WwAEijsABIp/AASNFAACiHgFqwAEij2ADwAD95AIAAAEDwAEiu8ABI0UAAAACAgLAASLCAAAAoh9gA58AAMABItQAAACdQ2ADnwAAAFwBPgI9HMABIuQuoTQBAAEnoh0Ao4I9HMABIw4uoiADAAMpFsABIzKAwAEjJ8APxHmDtZ8bgcABIzjAD8SHAKLfBqLfVsABI0rAASNbwAElDwAAoiABasABI0tgA8AA/eQCAAABA8ABI23AASUPAAAAAwMDwAEjegAAAKIhYAPAAPrRAMABI48AAACfkGADnwAAwAEjoQAAAJ1DYAOfAAAAXAE+Az0cwAEjsS6hNAEAASeGTQCjgk7AASPfwAEj6gAAgm9gA4TZASOAwAEj7MAPxQocwAEj/C6hEgAAAACijCsBYAOE2UnAASQWIiEcwAEkJYPAASQawA/FTkgBAAErAMAA/fEAFsABJDAuoQ2ihj4BPRzAASRHLqERAQABHMABJEwuoiICAAJqwAEkc2ADkaOhhRbAASSggcABJJXAD8Uah2WfCQCjcACiiz4BPRzAASTBLqERAQABHMABJM0WwAEkxi6g6qJhoiMDAAOBwAEk48APxRqDwAEk78APxU6CwAEk+8APxSgAtSQAoosGouBWwAElFMABJSXAASXXAACiJAFqwAElFWADwAD95AIAAAEDwAElN8ABJdcAAAABAQHAASU+AAAAkoVgA58AAABcAT4ETsABJVbAASVgAACFymADhNkBHMABJWIuoRIAAAAAoow9HMABJXUuoiUBAAGBwAElj8APxm0Ao4U9HMABJZ8uoREBAAGBwAElpMAPxm0Aoos9HcABJbqiJAEAAYDAASXNwA/GWQCwUgai4VbAASXcwAEl7cABJlEAAKImAWrAASXdYAPAAP3kAgAAAQPAASX9wAEmUQAAAAEBAcABJgQAAACShWADnwAAAFwBPgI9NQAAAAEAYAOxIAEWwAEmES6g8qJvIxzAASYfgQDAD8cbSAEAASsAACscwAEmH4EAwA/HG6InAAAAALErAVw9HcABJjaiJgEAAYDAASZHwA/HBgCwUwai4lbAASZWwAEmZ8ABJ6UAAKIoAWrAASZXYAPAAP3kAgAAAQPAASZ1wAEnpQAAAAICAsABJnwAAACiKWADnwAAwAEmiwAAAKIqYAOfAAAAXAE+BU7AASamwAEmrwAAoitgA4ePARzAASaxLqEhAQABgcABJsfAD8ewAKKUTsABJuHAASbqAACiLGADh48BHMABJuwuoSIAAAAAopVOwAEnC8ABJxUAAIXKYAOE2QEmwAEnCwEcwAEnFy6hFAAAAADAAFqOYAOE2T01AAAAAQBgA7EgARbAASciLqDyom8jHMABJzCFAMAPyDpIAQABKwAAKxzAAScwhQDAD8g6oi0AAAAAsS4BXD0cwAEnRy6hEQEAARzAASdTFsABJ0wuoOqiYaIuBQAFgMABJ27AD8eihMABJ3fAD8gNg8ABJ4LAD8ftgcABJ4zAD8ewgsABJ5fAD8fEALUeAKKLBqLjVsABJ6rAASe7wAEolAAAoi8BasABJ6tgA8AA/eQCAAABA8ABJ9HAASiUAAAAAQEBwAEn2AAAAKIwYAOfAAAAXAE+Az0cwAEn8i6hNAEAASeiMQCjgkAcwAEoPxbAASgzgMABKCDAD8j9nayfH0gBAAEngLwAwAD+jcABKCDAAShFAD0cwAEoTC6iMgIAARzAAShhLqESAAAAAKKMAaIzgMABKH3AD8j9ouUGouRWwAEomcABKKrAASx9AACiNAFqwAEommADwAD95AIAAAEDwAEoxcABLH0AAAABAQHAASjMAAAAkoVgA58AAABcAT4GPRzAASjZLqE0AQABJ6I1AKOCTsABKQfAASkPAACEImADwAD60QEhHMABKT0cwAEpMBbAASkSLqEBon+DfAEAAWrAASkyYAPAAPyXIQDAAPyvSAEAAZMAwAD9u07AASlMwAEpVAAAhCBgA8AA+tEBIRzAASmCHMABKXUWwAEpVy6hAaJ/g3wBAAFqwAEpd2ADwAD8l4NwAMAA/K9IAQABkwDAAP27TsABKZcAAACFE2ADhNkAScABKaghHsABKa3AAFo0AgACJ5oxgMABKbzAD8mqAD4BScABKpeBwAEqm8APydA+AT2LwAEqrsAPymMcwAEqvC6hGQMAAxzAASsSasABKtxdA5GvAWEDAWADwAD+fmADkZigA4gvAQABFsABKyaAwAErIMAPyaqCYp8aAJGzFsABK0GAwAErO8APyaqHZZ8JFsABK1+AwAErWcAPyaphnxkAo2tJwAErdYLAASt5wA/KGT4BPYvAASuMwA/KYxzAASuaLqEZAwADHMABK/BqwAErul0Dka8BYQMBYAPAAP5+YAORmL9HiC8BAAEWwAEsBIDAASv+wA/JqoJinxoAkbMWwAEsH4DAASwZwA/JqodlnwkWwAEsPYDAASw3wA/JqmGfGQCjaz8/PRzAASxYLqIyAQABg8ABLG3AD8pjAKLlBqLlVsABLILAASyHwAEwvQAAojIAAAABA8ABLJvAATC9AAAAAgEBwAEspwAAAIUTYAOE2QABwAEsuwAAAKIzYAOfAAFqAGADwAD9oXlcAT4LTsABLNbAASzbAACD82ADwAD95AEcwAEs3S6hFAAAAADAAFqOScABLOglwAEs8YLAASzswA/MBGADwABa2D4CPRzAAS0MLqERAQABFMABLRHAD8wEAgFgA8AAWtgAootKwAEtHgA/TsABLTvAAS1GAACdymADwABUqwEmwAEtOwGCwAEtSMAPzARgA8AAVKtAIRzAAS13FsABLVkuoQGif0gBAAEcwAEtepSBxgAAAADAAPy6AMAA/bvAAS1ZwAEtfABOwAEtiMABLZAAAIQiYAPAAPrRASEcwAEtvhzAAS2xFsABLZMuoQGif4N8AQABasABLbNgA8AA/JchAMAA/K9IAQABkwDAAP27TsABLc3AAS3VAACEIGADwAD60QEhHMABLgMcwAEt9hbAAS3YLqEBon+DfAEAAWrAAS34YAPAAPyXg3AAwAD8r0gBAAGTAMAA/btOwAEuEsABLhkAAIUfYAPAAPrRASEcwAEuRhzAAS46FsABLhwuoQGif4N8AQABasABLjxgA8AA/JeEjADAAPyvSAEAAZMAwAD9u0AcwAEuX4TAAS5XwA/MxkgBAAEcwAEucxbAAS5jLqD+on1IAQABasABLoZgA6+XwADBtQDAAP3xAMAA/fHAAS5XwAEujwBOwAEuqsABLrMAAIJwYAOIfgE1wAEuuQAAAQBgA65qAR/AAS65rnoIAAIWwAEu6YPAAS7ewA/MaoC9wABUrRbAAS7vLqD5oncGojYWwAEvRB7AAS8gwABUqgEAAYPAAS84wA/MagCEk58UhROAwAEvZsAPy9mClBzAAS+BLqFSAQABFsABL48uoQCifgCjh4QghcABL7vAD80PhCKEwAEv1cAPzMaFH4bAAS/uwA/NWTUAAAABAFsBF8ABL/6HwAEv/MAPzfuEWBbAATAWg8ABMAvAD8xqh2XAAFSuglk1AAAAAQBbARfAATAph8ABMCfAD837hmAewAEwPMAAWjgBAAGBwAEwS8APy+gAiICHAMAPzfs9HMABMGUWwAEwXS6ESKJiojcDAAOHwAEwhsAPzekWwAEwkC6G3aKIFsABMKEugKyibQCp9T0cwAEwqy6hEQEAAYfAATCwwA/N6QCiiwai5lbAATDCwAEw08ABMRkAAKI4AWrAATDDYAPAAP3kAgAAAQPAATDowAExGQAAAAEBAcABMO8AAACShWADnwAAAFwBPgE9F8ABMPwuoPYponQGoudWwAExHsABMS/AATH+AACiOQFqwAExH2ADwAD95AIAAAEDwAExQsABMf4AAAACAgLAATFJAAAAojBgA58AAMABMWMAAACShWADnwAAAFwBPgQ9HMABMXAuoTQBAAEnhVYAo4I9F8ABMZQuoPYqonRAHMABMdoWwAExzoDAATG7wA/Pzp2snx9IAQABJ4C8AMAA/o3AATG7wAEx4AA9HMABMecuoREBAAEcwAEx7C6hEgAAAACijACiiwai6FbAATIDwAEyFMABM0gAAKI6AWrAATIEYAPAAP3kAgAAAQPAATIswAEzSAAAAAEBAcABMjMAAACShWADnwAAAFwBPgI9HMABMkAuoTQBAAEnojsAo4JJwAEyZhzAATJ6FsABMmouoP6ifUgBAAFqwAEyjWADr5fAAMG1AMAA/fE+AT0cwAEy5C6hEQEAARzAATLwFsABMukuoOqiYaFzAQABgMABMwLAD9CKALUCAKKLPgE9HMABMx4uoREBAAFqwAEzLWADwABaSsAAw2gAoosGoulWwAEzTcABM17AATTdAACiPQFqwAEzTmADwAD95AIAAAEDwAEzdsABNN0AAAABAQHAATN9AAAAoj5gA58AAABcAT4HPRzAATPCLqE0AQABJ6I/AKOCTsABM/LAATP3AACD82ADwAD95AEcwAEz+S6hFAAAAADAAFqOScABNAQlwAE0DYHAATQIwA/Rg2ADwABa2D4CPRzAATQoLqERAQABFMABNC3AD9GDAQFgA8AAWtgAootKwAE0OgA/TsABNGDAATRpAACCcGADiH4BJsABNGAB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wAGncgEcwAGnfy6hFAAAAADAAFqOYAPAAFd5TsABp6TAAaeyAACirV0DwAD9OwFgA8AAV10BJsABp6QBHMABp7QuoRQAAAAAwABajl0DwAD9OwFgA8AAV11JwAGnvyEWwAGn2hbAAafTFsABp8wWwAGnxC6ESKJilUupfIJJqmmfhqiLPgE9HMABp/UuoqcBAAGBwAGoD8AQKUEAwABYTT9OwAGoM8ABqDgAAIKUYAPAAFd5ARzAAahCgsABqDrAECmkorUCAAKDwAGoUcAQKdCEwAGoXcAQKgAAo909HMABqHEuoVkAAAAAsD09HMABqIcuoREBAAGFwAGojMAQKoYAoos9F8ABqJcuoPkcwAGoqxbAAaiXLqD5oneBjQEAAZQAwAD9vqJ3BqMWVsABqLbAAajHwAGpSQAAouQBasABqLdgA8AA/eQCAAABA8ABqPHAAalJAAAAAAAAAFwBPgI9HcABqQChEQEAARbAAakFLqD+on0AwABaiz0XwAGpGy6g/mrAAak9YAOvl8AAw1eifQajF1bAAalOwAGpX8ABqjEAAKLlAWrAAalPYAPAAP3kAgAAAQPAAamHwAGqMQAAAAAAAABcAT4EPRzAAamQLqE0AQABJ6LmAKOCTsABqdDAAannAACi52ADwAD95AEcwAGp6S6hFAAAAADAAFqOPRfAAan0LqD+JsABqfQBHMABqgYuoRQAAAAAwABajmADr5eifT0cwAGqES6hEQEAAYDAAaoWwBArwgCiiwajGFbAAao2wAGqR8ABq3EAAKLoAWrAAao3YAPAAP3kAgAAAQPAAapiwAGrcQAAAAICAsABqmkAAACV0mADnwAAwAGqdwAAAJKFYAOfAAAAXAE+BD0cwAGqhC6hNAEAASei6QCjgk7AAaq4wAGqxAAAhRNgA4TZARzAAarGLqESAAAAAKKMTsABquDAAarlAACAvWADwAD95AEcwAGq5y6hFAAAAADAAFqOScABqvIlwAGq+4PAAar2wBAsqWADwABa2D4BPRzAAasWLqERAQABFMABqxvAECypAwFgA8AAWtgAoos+AT0cwAGrNS6hEQEAAR/AAas+wABUzwIAAibAAatUAYPAAatUwBAsqWADwABUu4LAAatawBAsiQAAoosGoxlWwAGrdsABq4fAAavpAACi6gFqwAGrd2ADwAD95AIAAAED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wAImlMAQhKsewAImm8AAWjgBAAGAwAImqsAQhKsAJ5osAKKtAKKLPgE9HMACJtMuoREBAAEfwAIm3LRjBAAELoDAAicDwBCEqxbAAicKLqD1onMWwAInGS6g9qJ0AACiiz4BPRzAAidKLqERAQABH8ACJ1O0ggMAAy6AwAInfcAQhKtqwAInimADkaPAAIt0AACiiwajPFbAAieywAInw8ACKeoAAKNMAWrAAiezYAPAAP3kAgAAAQPAAifYwAIp6gAAAAICAsACJ98AAACShWADnwAAwAIn+AAAAIJXYAPAAFnNAABcAT4CPRzAAigHLqE0AQABJ6NNAKOCScACKCoiIhbAAig2gcACKC7AEIYhoenAAFn+ABbAAihSLqEOoocAHMACKIgWwAIoei6hBaKESAEAASsAwAD98T4DTsACKKDAAiinAACCamADg30BJsACKKABFsACKLUWwAIori6CaqJjgknAAFVVYAODfT01AAAAAQBgA4N9AYLAAijDwBCGixfAAijKg8ACKMrAEIa9hQkcwAIo2xbAAijKg8ACKMrAEIa9hQmDg4EGAQABasACKO5gA8AA/JcVAMAA/LCDgz0cwAIpAC6hEQEAAR/AAikJtGMFAAQugMACKS7AEIYTFsACKTUuoPWicxbAAilELqD2onQBh4spAKKLPgE9HMACKYYuoREBAAEfwAIpj7SCAwADLoDAAim5wBCGE2rAAinGYAORo8AAhd4AAKKLBqM9VsACKe/AAioAwAIq8QAAo04BasACKfBgA8AA/eQCAAABA8ACKhPAAirxAAAAAQEBwAIqGgAAAKHCYAOfAAAAXAE+BD0cwAIqJy6hNAEAASejTwCjgk7AAipTwAIqWQAAgJZgA4TZARzAAipbLqESAAAAAKKMTsACKnnAAiqEAACdymADwABUqwEmwAIqeQEcwAIqhi6hFAAAAADAAFqOYAPAAFSrPRzAAiqRLqERAQABNcACKpoAAAEAYAOFsQEfwAIqmoW6AgACFsACKrWCwAIqqsAQh/aAvcAAVK2BwAIqu8AQh9YANQAAAAEAWwEXwAIqyoPAAirIwBCIMoRYFsACKuKCwAIq18AQh/aHZcAAVK6CWYMAwBCIMgCiiwajPlbAAir2wAIrB8ACLnIAAKNQAWrAAir3YAPAAP3kAgAAAQPAAisWwAIucgAAAAIC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wALI8cAQ/7MWwALJIRbAAskcFsACyReBwALJC8AQ/5iAvYOBgL2It2HAAP6CAKNrAKOLg8ACyTXAEP+zAKNzPz0XwALJTC6g8yqicUrAAsl3ATXAAsmCAAABAGADrd8BH8ACyYKt5QIAAoHAAsmbwBD/mCbAAsmoAYLAAsmowBD/pmADrIMANQAAAAEAWwEXwALJu4TAAsm5wBEAq4RYg8ACycjAEP+zglk1AAAAAQBbARfAAsnbhMACydnAEQCrhJOAwALJ6cAQ/4iEY4QAwBEAqwajd1bAAsn9wALKFcACzFUAAKPiAWrAAsn+YAPAAP3kAgAAAQPAAsowwALMVQAAAAMCA8ACykQAAACZCGADg88AwALKWwAAAFtgA4WjAMACynEAAACHZWADwAD8lwFqwALKfmADwAD8l4GeAGADhGEBPgNJwALKiRzAAsqaFsACyo0uoOyiZaPjAgACFsACysEWwALKui6CaqJjgL3AAFboFsACytgWwALK04DAAsrHwBEBXoC9g4GAvYi3AMAAVQk+A07AAsrrwALK8gAAYWADwAD8lwEWwALLChbAAssFFsACywCAwALK9MARAV6AvYOBgL2It2HAAP6CScACyxgcwALLI4PAAsscwBEB70gBAAGTAMAA/bs9i8ACyynAEQHvFsACyzknmixhwAD+gj89HMACy0cunq4DAANqwALLWGADkaOgzoLAAstywBEBeYPAAst+wBEB7wCjfz89F8ACy8UuoPMqonFKwALL8AE1wALL+wAAAQBgA63EAR/AAsv7rcoCAAKAwALMGsARAV4mwALMJwGBwALMJ8ARAWxgA6yDADUAAAABAFsBF8ACzDqDwALMOMARApuEWILAAsxHwBEBeYJZgwDAEQKbBqN4VsACzFrAAsxrwALM2AAAo+QBasACzFtgA8AA/eQCAAABA8ACzHnAAszYAAAAAQEBwALMgAAAAJKFYAOfAAAAXAE+Aj0cwALMjS6hNAEAASeFUQCjgj0cwALMqS6hEQEAAR/AAsyyo6QCAAKAwALMu8ARAysWwALMyIDAAszCwBEDK4dlnwkAAKKLBqN5VsACzN3AAszuwALNXQAAo+UBasACzN5gA8AA/eQCAAABA8ACzP7AAs1dAAAAAQEBwALNBQAAAJKFYAOfAAAAXAE+Aj0cwALNEi6hNAEAASej5gCj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A8AAV3kAwAMDfwAAAITFXQPAAP07AWADwABXXQDAAwOhAAAAoW9gA4TKAMADA8AAAACCbWADh48AwAMD0AAAAITZYAPAAPyXAABgA4SuAT4FTsADA/LAAwP3AACClGADiTYBJsADA/IBHMADBDQWwAMELBzAAwQBLqK1AgACgcADBBDAETiOgsADBBzAETieAKPdhCbAAFd7otsBAAGAwAMEOsAROIAAwABXR2ADiTZOwAMEYsADBHcAAITHXQPAAP07AWADiH4BMcADBI5gA4h+AE7AAwSwwAMEwAAAhMhdA8AA/TsBYAOIfgExwAME12ADiH4AScADBN8hHMADBO4WwAME4y6au6PXSAEAASsAwAD9ZT4CRsADBP/AAwU0wAMFGwAAAIDtYAPAAFWyABbAAwUoLpq7o9c+AUnAAwU+FsADBUwUwAMFQsARObgJAKQFwABVwD4BPRzAAwVxFMADBWHAETlsCABWAQABFsADBX8UwAMFdcARObgJAIJJwABVxADAAP1MPgE9HMADBbiHwAMFo8AROUlWAQABFsADBcYUwAMFvMARObgJAIJJwABVxADAAP1MPRzAAwX3FMADBefAETlsCACArgEAATTAAwX8A8ADBfzAAwZdAAAAAgICwAMGEQAAAIHXYAOIfgDAAwYoAAAAgk5gA4h+AABgA8AA/JcBPgFKwAMGNQEcwAMGQxbAAwY+FMADBjzAETp7CQCAvYiCgk8BAAEWwAMGTxTAAwZNwBE6iQoAgL2IggDAAP6OAMAA/U4/SsADBmoBNcADBnUAAAEAYAOtFAEfwAMGda0WBwABhMADBorAETjDBoTFFsADBq2GwAMGqMAROOqExYk4hMeHwAMG28AROUmEyBTAAwcKwBE5bAgAhS4WwAMHQIbAAwc7wBE46oUuiTmFSRbAAwdxhsADB2zAETjqhUmJPoVjg8ADB5LAETi1NQAAAAEAWwEXwAMHqRTAAwenwBE66wkAhFgWwAMHti6HZaPYglk1AAAAAQBbARfAAwfJFMADB8fAETrrCQCE2YXAAwfZwBE40YSwFADAETrrCQAGo91WwAMH78ADB/7AAwj+AACitQAAAAEDwAMIDMADCP4AAAACAQLAAwgcAAAAhUlgA8AAV3kAwAMISQAAAITFXQPAAP07AWADwABXXQFqAGADwAD9oXkAYAPAAFd5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pWZgA8AATZwBHMAAQkEWwABCMS6k8qSUpWcCAAKBwABCVMAR9fSCwABCYsAR9isAtmdKwABCbwGDwABCdsAR9mYGpM9bwABCrcAAQrLAAETqAAClaAAAAAEDwABCvMAAROoAAAACAQHAAELGAAAApP5gA72hAAHAAELWAAAApUhhAwFgA72hXAFqAGADwAD9oXlcAT4BPRzAAEMFFsAAQvwulq+kppawAgFgA8AA/aECJ6VoNMAAQyIDwABDIsAAROUAAAAAAAAAYAPAAP2hAT4BPRzAAEM2gMAAQy3AEfbYg/0BAAE0wABDPgPAAEM+wABE3QAAAAEBAcAAQ0gAAAClaWADuKAAAGADwAD9oQE+AknAAENYIRzAAENngcAAQ1zAEfbnSAEAASsAwAD98T4BPRzAAEOGgcAAQ3zAEfbnIAEAAYDAAEOHwBH22AAAPz0cwABDrRbAAEOkLqUQpLqlagIAAhbAAEPSgsAAQ83AEfdqllK4ojTAAEPnA8AAQ+fAAETTAAAAAAAAAGADwAD9oQFKwABD7QEcwABD9hbAAEPtLpavpKaWsAIBYAPAAP2hAielRTTAAEQUA8AARBTAAETSAAAAAAAAAGADwAD9oQE+AT0cwABENIDAAEQrwBH22KVFAgABHMAARGAWwABEVy6Wr6SmlrACAWADwABNHgInpWs0wABEewPAAER7wABEiwAAAAAAAABgA8AATR4BSsAARIEBHMAARIaCwABEgcAR92qCnwAAAAC4pACkbAGlbBbAAES3gsAARLLAEfdqllK4or2wAKRsALYOAL2vAKRsBqTQW8AARO/AAET0wABICgAApUcAAAABA8AARQDAAEgKAAAABAMDwABFFAAAAKU7YAO7XgDAAEUxAAAApP5gA72hAMAARVAAAACCWmADvVEAAcAARWgAAAClSGEDAWADvaFcAWoAYAPAAP2heVwBPgE9HMAARZcWwABFji6Wr6SmlrACAWADwAD9oQInpUc0wABFtgPAAEW2wABIBQAAAAAAAABgA8AA/aEBPgc9HMAARcqBwABFwcAR+QmlbQMAAxbAAEXaLqT2pJyCwABF9MAR+RccwABGNhbAAEYdgMAARgrAEfj7huq7YoCrAQFgA8AA/v8BNMAARjoDwABGOsAARmkAAAABAQHAAEZJAAAAhEhgA70bAABgA8AA/v8BSsAARlUBFsAARl2EwABGVcAR+d6lbr0dAMAA/QQAva09HMAARnwWwABGcy6C0qSrpW8AAAAApSQ9HMAARpAupWgCAAGBwABGm8AR+QkBpUiDwABGscAR+Sakzz0XwABGzYHAAEbEwBH5CaVwKb2kPRzAAEbygcAARunAEfkJgowAAAAAva49HMAAR20WwABHXi6k9qScpXEBAAEWwABHg4HAAEd6wBH5CaVyvakAwABNf0AiFsAAR5wupQeksQEcwABHxIHAAEe7wBH5CaVzAQABgMAAR+rAEfj7AL2xwABHnMAAR/0AAKRsBqTRW8AASLPAAEizwABI9wAApUwAAAABA8AASL3AAEj3AAAAAQEBwABIxwAAAKT+YAO9oQAAWwE+AT0cwABI4IDAAEjXwBH7BaV0AAAAAL2yBqTSW8AASPzAAEkBwABJ0wAApUkAAAABA8AASRfAAEnTAAAAAQEBwABJIQAAAKT+YAO9oQAAXAE+AkAcwABJPhbAAEk4LqUGpLBIAQABasAASUFgA8AA/JcVAMAA/bvAAEk4wABJUAEkwABJbAInpXUWwABJZi6lBqSwPRzAAEl8FsAASXMugtKkq6V2AwADJ6V3FsAASboWwABJqIDAAEmfwBH7VqV4vaphwAD9HCeleQClJQak01vAAEnYwABJ3cAASmkAAKVVAAAAAQPAAEnwwABKaQAAAAEBAcAASfoAAACk/mADvaEAAFwBPgE9HMAAShMWwABKCi6C0qSrpXYDAAMnpXoWwABKURbAAEo/gMAASjbAEfwLpXi9qmHAAP0cJ6V7AKUlBqTUW8AASm7AAEpzwABK2AACltQAAAABA8AASoPAAErYAAAAAwMDwABKlgAAACJgA7YTAMAASr0AAACW1V0DwAD9OwFgA7YTAMAAStMAAACCa2ADk8YAAFwABqTVW8AASt3AAEriwABLYwAAltsAAAABA8AASvfAAEtjAAAAAwMDwABK/wAAACJgA8AA/n4AwABLCAAAAIHtWwDAAEsTAAAAhlRbAABcAT4BPRzAAEsuFsAASyUupRCkuqV8AwADgMAAS0DAEfzZgcAAS0nAEfzogsAAS1TAEfzzALYQBqTWW8AATGbAAExrwABNuAAApX0AAAABA8AATILAAE24AAAAAgICwABMlQAAACJgA7YTAMAATK0AAACCa2ADk8YA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hwSlYlyH0YfRBqYuAGADpT8BagBgA6U/wADImwSlY1yH9of2BqYvAGADpT8BagBgA6U/wADIrQSlZFyIFogWBqYwAGADpT8BagBgA6U/wADIwQSlZVyILoguBqYxAGADpT8BagBgA6U/wADI1QSlZlyISIhIBqYyAGADpT8BagBgA6U/wADI5wSlZ1yIb4hvBqYzAGADpT8BagBgA6U/wADI+wSlaFyIj4iPBqY0AGADpT8BagBgA6U/wADJDQSlaVyIrIisBqY1AGADpT8BagBgA6U/wADJIQSlalyI0IjQBqY2AGADpT8BagBgA6U/wADJMwSla1yI8YjxBqY3AGADpT8BagBgA6U/wADJRwSlbFyJGIkYBqY4AGADpT8BagBgA6U/wADJWwSlbVyJMokyBqY5AGADpT8BagBgA6U/wADJbwSlblyJWIlYBqY6AGADpT8BagBgA6U/wADJgwSlb1yJi4mLBqY7AGADpT8BagBgA6U/wADJlQSlcFyJr4mvBqY8AGADpT8BagBgA6U/wADJqQSlcVyJ0onSBqY9AGADpT8BagBgA6U/wADFyASlclyJ5onmBqY+AGADpT8BagBgA6U/wADF3ASlc1yKAooCBqY/AGADpT8BagBgA6U/wADJvQSldFyKHIocBqZAAGADpT8BagBgA6U/wADJzwSldVyKM4ozBqZBAGADpT8BagBgA6U/wADJ4wSldlyKaYppBqZCAGADpT8BagBgA6U/wADJ9QSld1yKloqWBqZDAGADpT8BagBgA6U/wADKBwSleFyKw4rDBqZEAGADpT8BagBgA6U/wADKGQSleVyK64rrBqZFAGADpT8BagBgA6U/wADKKwSlelyLDYsNBqZGAGADpT8BagBgA6U/wADKPQSle1yLL4svBqZHAGADpT8BagBgA6U/wADKTwSlfFyLUYtRBqZIAGADpT8BagBgA6U/wADKYQSlfVyLfot+BqZJAGADpT8BagBgA6U/wADKcwSlflyLqIuoBqZKAGADpT8BagBgA6U/wADKhwSlf1yL44vjBqZLAGADpT8BagBgA6U/wADKmwSlgFyL/Yv9BqZMAGADpT8BagBgA6U/wADKrQSlgVyMEowSBqZNAGADpT8BagBgA6U/wADGHQSlglyMOow6BqZOAGADpT8BagBgA6U/wADKvwSlg1yMWYxZBqZPAGADpT8BagBgA6U/wADK0wSlhFyMhIyEBqZQAGADpT8BagBgA6U/wADK5QSlhVyMnIycBqZRAGADpT8BagBgA6U/wADK9wSlhlyMs4yzBqZSAGADpT8BagBgA6U/wADLCQSlh1yM0ozSBqZTAGADpT8BagBgA6U/wADLHQSliFyM5IzkBqZUAGADpT8BagBgA6U/wADGiASliVyM/4z/BqZVAGADpT8BagBgA6U/wADLLwSlilyNC40LBpDAAGADpT8BagBgA6U/wADLQQSli1yNJI0kBqZWAGADpT8BagBgA6U/wADLUwSljFyNSI1IBozzAGADpT8BagBgA6U/wADLZQSljVyNX41fBqZXAGADpT8BagBgA6U/wADLdwSljlyNgI2ABqZYAGADpT8BagBgA6U/wADLiQSlj1yNoo2iBqZZAGADpT8BagBgA6U/wADLmwSlkFyNtY21Bo0JAGADpT8BagBgA6U/wADLrQSlkVyNyY3JBqZaAGADpT8BagBgA6U/wADLvwSlklyN8Y3xBo74AGADpT8BagBgA6U/wADL0QSlk1yOBY4FBoo6AGADpT8BagBgA6U/wADL4wSllFyOG44bBpDiAGADpT8BagBgA6U/wADL9QSllVyOL44vBqZbAGADpT8BagBgA6U/wADMBwSlllyOVY5VBqZcAGADpT8BagBgA6U/wADMGQSll1yOe457BpFYAGADpT8BagBgA6U/wADMKwSlmFyOlY6VBqZdAGADpT8BagBgA6U/wADMPwSlmVyOro6uBqZeAGADpT8BagBgA6U/wADMUQSlmlyOzY7NBqZfAGADpT8BagBgA6U/wADMYwSlm1yO7Y7tBqZgAGADpT8BagBgA6U/wADMdQSlnFyPVY9VBqZhAGADpT8BagBgA6U/wADMhwSlnVyPbo9uBqZiAGADpT8BagBgA6U/wADMmQSlnlyPlI+UBqZjAGADpT8BagBgA6U/wADMqwSln1yPs4+zBqZkAGADpT8BagBgA6U/wADMvwEFpaNchKqEqo/VAQAAA4Sqj9UAAAACAgKEqgAABCdgA8AA/JcAhKoAAAQoYAPAAP5+AABgA6U/AT8DCAClQYAAwBI1VAgApUOBAMASNWEJAADAAP36AAAAAAEGpaFchKqEqo/VAAAjAAAAAQOEqo/VAAAAAAAAAGADwAD+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shTAATCqwBRYqA4Agl8DAAMWwAEwvy6EZqmEg8ABMMjAFE4yFsABMNmAwAEw1MAUTgJhwAD+ggCRnwGicyoGqeFzwAExCsABMQ7AATI4AACe1gAAAAEDwAExKMABMjgAAAAAAAAAYAPAAPyXAT4DTsABMTXAATE7AACkqWADwAD8lwGTRsABMUTAATFgwAExTQAAAISvYAPAAFKFABbAATFXLpmnqYE+AUnAATFoFsABMXOBwAExbMAUWrWaNcAAUoo+A07AATGRwAExmQAAmlZgA4QSASbAATGRARbAATHDFsABMbAWwAExooHAATGbwBRatamEwABSiamMwABXGJpWwABSAWADhBJJwAEx1CEcwAEx4ILAATHYwBRa7UgBAAErAMAA/fE9HMABMfEWwAEx6S6ESKmQhJYBAAGCwAEx+8AUWu0Agqw/PYjAATINwBRamBzAATISgMABMg3AFFqYZAEAAZQAwAD9vT9KwAEyKAGAwAEyL8AUWpgGqeJzwAEyPcABMkHAATnLAACpjQAAAAEDwAEyUcABOcsAAAAAAAAAYAPAAPyXAT4FTsABMl7AATJkAACA7mADwAD8lwGTTsABMnrAATKBAACe8mADp8MBH8ABMoeoOgAAAABFwAEymwHAATKkwAEypgAAYmADwAD8lwGTARzAATKtgsABMqvAFFwNYwEAARbAATLBFsABMq8uqPKplGHAAP1rAMAA/cUBisABMsnAFFwNHMABMsuCwAEyycAUXA1kAQABlQDAAP29PglOwAEy48ABMu0AAKmOYAOEEgEcwAEzABbAATLvLqjyqZRLAQABgsABMwHAFFwNAMAA/UpOwAEzFcABMxwAAJ6OYAOEEgEcwAEzLxbAATMeLqjyqZRLAQABHMABMzKCwAEzMMAUXA1kAQABlADAAP29AMAA/UpOwAEzQ8ABM1MAAKmPYAPAAPyXARbAATN6FsABM2UWwAEzXITAATNVwBRcpIJuhBeEx4S1YcAA/WtJwAEziCEcwAEzuxbAATO0FsABM58WwAEzloPAATOMwBRccYJuhBeEx4S1YcAA/WtIAQABhcABM77AFFzmAMAA/bs+AUrAATPZASbAATPZAR7AATPgnWsEAAQkwAE0CgGFwAEz+sAUXOYkwAE0SwEWwAE0QxbAATQuFsABNCWDwAE0G8AUXHGCboQXhMeEtWHAAP1rFsABNGCEwAE0WcAUXKSEWIJZFsABNH+EwAE0eMAUXKSEZoOCAGADwAD8lz9FwAE0lwHAATSgwAE0ogAAl9JgA8AA/JcBkwEcwAE0qYbAATSnwBRd5GMBAAGFwAE0q8AUXOYAwAD9xQGOwAE0vsAUXeQcwAE0vIbAATS+wBRd5GQBAAGUAMAA/b0+A07AATTfwAE08gAAqZBgA4h+ARzAATUnFsABNRMWwAE1CoPAATUAwBRccYJuhBeEx4S1SwEAAYbAATUowBRd5ADAAP1KTsABNUjAATVYAACpkWADiH4BHMABNYoWwAE1dhbAATVthMABNWbAFFykgm6EF4THhLVLAQABhsABNYvAFF3kAMAA/UpJwAE1lyEcwAE1txbAATWrFMABNZvAFF6CCACFE4iGSAEAASsAwAD98T4CPRfAATXfh8ABNczAFF4+hRMcwAE2AoHAATX7wBRb657vAQFgA4TZARbAATYYFMABNgjAFF6CCACFE4iGAKfUiIY9F8ABNk8WwAE2Q4fAATYwwBRePoUTiIaEV4fAATZYwBRePoJYP07AATamwAE2tQAAqZJdA8AA/W0CYAPAAP5+YAOIfgEywAE23mADwAD+fmADiH4ARsABNujAATcxwAE3AQAAAKmTYAOIfgAWwAE3IBbAATcXhMABNxDAFFykgm6EF4TIhLY+AT0cwAE3SYbAATc7wBRfWIC/AgACFsABN1aHwAE3SsAUX4+AvYiCh8ABN17AFF+PAMAA/YJGwAE3eQDAATeSAAAAqZRgA4h+ABbAATfBFsABN7iDwAE3rsAUXHGCboQXhMiEtkE+BU7AATfwwAE3/AAAqZNgA4h+ARzAATgMhsABN/7AFF9YSwEAARbAATgch8ABOA3AFF/0gL2IggDAAP2BScABOCscwAE4OxTAATgvwBRgIQgASAEAASsAwAD98T4BSsABOFABJsABOFABHsABOFedagQABCeEQRbAATiHFsABOIKDwAE4eMAUXHGAvYOBgL2ItxbAATiUhMABOI3AFFykhFiCWRbAATinhMABOKDAFFykhGaDggBgA8AA/Jc/ScABOMMcwAE43xbAATjTFMABOMfAFGAhCACFE4iGSAEAASsAwAD98ULAATjoAD89F8ABOQmHwAE4+sAUX/SFExzAATkegcABORfAFFvrnu8BAWADhNkBFsABOTAUwAE5JMAUYCEIAIUTiIYAp9SIhj0XwAE5YRbAATlVh8ABOUbAFF/0hROIhoRXh8ABOWrAFF/0glg9iMABOYvAFFvWHMABOYmAwAE5i8AUW9ZkAQABlADAAP29PRzAATmuFsABOZwuqPKplIJGAAAAAMAA/VRKwAE5uwGAwAE5wsAUW9YGqeNzwAE50MABOdXAATogAACpbwAAAAEDwAE55MABOiAAAAABAQHAATn1AAAAlnNgA8AAVc4AAFwBPgE9HMABOhEWwAE6Ay6o8KmSVgEAAYDAAToVwBRh4wDAAP1MBqnkc8ABOiXAATopwAE6wQAAntgAAAABA8ABOjzAATrBAAAAAAAAAGADwAD8lwE+AkbAATpFwAE6c8ABOloAAACWc2ADwABVzgAWwAE6ZC6o8KmSPgE9HMABOoKAwAE6e8AUYlSplQEAARbAATqPLpVLqXwAwABV8krAATqiARbAATq3FsABOqkuqPCpkmHAAP1rBqnlc8ABPHbAATyQwAE/gwAAqWAAAAABA8ABPKHAAT+DAAAAAwICwAE8wwAAAJ7xXQPAAP07AWADwABXXQDAATznAAAAnt5gA6oXAAHAAT0AAAAAqZZgA8AA+tEBasABPR5gA8AA+tEAXQPAAP07AWADwABXXQE+BU7AAT0+wAE9RwAAqWFdA8AA/TsBYAPAAFc3ATHAAT1WYAPAAFc3AE7AAT14wAE9fQAAnSpdA8AA/TsBYAPAAFddATHAAT2UYAPAAFddAEbAAT2cwAE9y8ABPbUAAACCcGADwABXXQCAwAE9wcAUYtQ+A07AAT3XwAE94wAAqBNgA8AAV10BH8ABPenAAFd2BQADFsABPhGFwAE+CMAUY32AvcAAV1EuFsABPiaFwAE+HcAUY32HZcAAVtgChX81AAAAAQBgA8AAVzcBFsABPkyFwAE+Q8AUY32Ff8AAV18jHMABPlOGAMAUY+VIAQABKwAAKxzAAT5ThgDAFGPlnu8BAAGDwAE+WcAUYycAwABXRQFgA8AAVzepl4LAAT6LwBRi+j0cwAE+tYTAAT6wwBRjTlYBAAGGwAE+ucAUY5kAwAD9TD0cwAE+5BbAAT7NLqjxqZNWAQABhsABPujAFGOZAMAA/UxGwAE/AMABPybAAT8RAAAAqWJgA8AAVzcAg8ABPxzAFGMnPgE9HMABPzqBwAE/LsAUYuuo/AEAAR/AAT9GwABXhAMAA4XAAT9VwBRklRzAAT9elIHGAAAAAMAA/LorAACqLErAAT90AYTAAT97wBRjTgap5nPAAT+IwAE/jMABQLAAAJ7AAAAAAQPAAT+fwAFAsAAAAAICAsABP60AAACDxWADwABU7gDAAT/BAAAAnqVgA8AAVzcAAGADwAD8lwE+BE7AAT/YwAE/3gAAgO5gA8AA/JcBFsABP/cWwAE/4C6o8amTYcAA/WtGwAFAA8ABQD/AAUAcAAAAhCZgA8AAV10AFsABQCcuqPGpkz4BPRzAAUBPg8ABQEfAFGV/hy8DAAMugMABQFzAFGUkgcABQGTAFGU0AMAAV3A9HMABQJMWwAFAfC6o8amTgkYAAAAAwAD9VErAAUCgAYLAAUCnwBRlTwap53PAAUC1wAFAucABT7gAAJ69AAAAAQPAAUDMwAFPuAAAAAMDA8ABQNkAAACepWADwABXNwDAAUDyAAAAhQJgA8AAVzcAwAFBEQAAAJr/YAPAAFTuAABgA8AA/JcBPgZOwAFBKMABQS4AAIDuYAPAAPyXAZNPwAFBOMABQTwAAAGpmGEDAl0DwAD9OwFgA8AAV11gA8AA+tFgA8AA/JcAA8ABQVvAAUY/AAAAAgICwAFBfwAAAIY6XQPAAP07AWADwABXXQDAAUGPAAAAglBgA8AA+tEAAGADwAD8lwE+BUnAAUGjHMABQbGFwAFBp8AUZqBIAQABKwDAAP1lSsABQboBkz9OwAFB0MABQeQAAKmZYAPAAPrRASpJwAFB8yGGwAFB+MAUZrc+AkXAAUIOAcABQhfAAUIZAABiYAPAAPyXAZMBHMABQiAUwAFCHsAUZyIIAGMBAAEWwAFCLIXAAUIiwBRmoGHAAP1rAMAA/cUBFcABQjbAFGciCBzAAUI0FMABQjbAFGciCABkAQABlADAAP29PgROwAFCWcABQmIAAIJwYAPAAFddARzAAUJthcABQmTAFGagSwEAARTAAUJuwBRnIggAAMAA/UpOwAFCjsABQqMAAKmaXQPAAP07AWADwABXNwExwAFCsmADwABXNwA9HsABQsC1XgIAARbAAULiFMABQtnAFGeKCQCFf8AAV18BgXYUwAFC/8AUZ8AKAEnAAUMgHMABQ0AWwAFDORTAAUMkwBRnwAoAYcAA/WuAlwEAAZMAwAD9xz4CPY/AAUNTwBRm9yk9HMABQ3sunq4EAARqwAFDhmADkaPAAEJlFsABQ7IUwAFDqcAUZ4oJAIdlwABW2BbAAUPcFsABQ9cUwAFDzsAUZ4oJAIC9wABXUWHAAP6CFsABQ+0UwAFD5MAUZ4oJAIRmwABW2QCpyj9JwAFEFiGHwAFEG8AUZvc+Ak7AAUROwAFEXwAAo9VdA8AA/TsBYAPAAFc3AR7AAURvtVMEAASFwAFEf8AUZqCAwAFEisAUZheBwAFEl8AUZieCwAFEo8AUZjcARcABRLsBwAFExMABRMYAAGJgA8AA/JcBkwEcwAFEzRTAAUTLwBRpFgkAYwEAARbAAUTZhcABRM/AFGagYcAA/WsAwAD9xQEVwAFE48AUaRYJHMABROEUwAFE48AUaRYJAGQBAAGUAMAA/b0+AT0XwAFFARzAAUT9hcABRPTAFGagSwEAARTAAUT+wBRpFgkAAMAA/UqGqRzAAUUfFMABRQ/AFGjHCABLAQABFMABRSDAFGkWCQAAwAD9SsAAV2A/P0nAAUVJIobAAUVNwBRmtwGHwAFFW8AUZvc+AUXAAUWqAcABRbPAAUW1AABiYAPAAPyXAZMBHMABRbwUwAFFusAUafIIAGMBAAEWwAFFyIXAAUW+wBRmoGHAAP1rAMAA/cUBFcABRdLAFGnyCBzAAUXQFMABRdLAFGnyCABkAQABlADAAP29PgE9F8ABRe4cwAFF6oXAAUXhwBRmoEsBAAEUwAFF68AUafIIAADAAP1KhqmAwAFF/MAUZhfAAFdgP0rAAUYiARbAAUYzhcABRinAFGagYcAA/WtPwAFGRsABRksAAAGpm2EDAV0DwAD9OwFgA8AA/eRcAAPAAUZXwAFH0wAAAAEBAcABRmUAAACoOF0DwAD9OwFgA8AA/eQAAFwBPgFFwAFGdQHAAUZ+wAFGgAAAYmADwAD8lwGTARzAAUaHh8ABRoXAFGr7YwEAARbAAUaQhsABRonAFGrZYcAA/WsAwAD9xQGPwAFGmMAUavscwAFGmofAAUaYwBRq+2QBAAGWAMAA/b0+BE7AAUbBwAFGzQAAnt5gA8AAV00BJsABRsEBHMABRtWGwAFGz8AUatlLAQABh8ABRtbAFGr7AMAA/UpgA8AAV01OwAFG6sABRvIAACJgA5GYASbAAUbqARzAAUb6hsABRvTAFGrZSwEAARzAAUb9h8ABRvvAFGr7ZAEAAZQAwAD9vQDAAP1KYAORmE7AAUcgwAFHKAAAglddA8AA/TsBYAORtgEmwAFHIAEcwAFHMIbAAUcqwBRq2UsBAAEcwAFHM4fAAUcxwBRq+2QBAAGVAMAA/b0AwAD9Sl0DwAD9OwFgA5G2PRzAAUdCLp6uBQAEFMABR03AFGueCQAWwAFHYhTAAUdWwBRrXggAh2XAAFbYFsABR38WwAFHehTAAUduwBRrXggAgL3AAFdRYcAA/oIWwAFHnxTAAUeTwBRrXggAhGbAAFbZAYJXFMABR73AFGvoCgCpyk7AAUffwAFH6gAAglBgA8AA+tEBFsABR/oWwAFH8xbAAUfsLpVLqXyCSappglCgKUbAAUgKwAFIRcABSBMAAACe3mADwABVTgAWwAFIPRbAAUg1FsABSCIuqOWpfYSUqiApwAD9kD4BScABSE0lwAFIXYfAAUhRwBRs7GADwABU7j4CPgNOwAFIkcABSJgAAKg4XQPAAP07AWADwAD95AEjhsABSJrAFGy0asABSLVdA8AA/TsBYAPAAP3kwADf4h7AAUjWtVwCAAEUwAFI+8AUbOwHAWADwABU7gGpnCkBXQPAAP07AWADwAD95D0cwAFJTYXAAUlBwBRqryABAAEUwAFJTsAUbTkIAAAAPYvAAUmlwBRmUhzAAUmrg8ABSaXAFGZSZAEAARzAAUnNhMABSa7AFGZrIAIAAhbAAUnpFMABSd3AFGzsBwFgA8AAVO6ircAAVPAihsABSfjAFGy0ARbAAUoNFMABSgbAFG05CACDt8AA/R4AAADAAP29PRzAAUo4FMABSizAFGzsBwFgA8AAVO6D/QEAATTAAUpAA8ABSkDAAUwnAAAAAgICwAFKSAAAAIC9YAPAAP5+AMABSlYAAACCamADwABVTgAAYAPAAP2hAT4BScABSmolwAFKdRTAAUpuwBRucgkAYAPAAFX5PgNOwAFKpcABSqwAAKg4XQPAAP07AWADwAD95AEjhsABSq7AFGy0asABSstdA8AA/TsBYAPAAP3kwADf4h7AAUrutVsBAAEWwAFLHBTAAUsVwBRucgkBYAPAAFX5oq3AAFXUAAFdA8AA/TsBYAPAAP3kPRzAAUtEhcABSzjAFGqvIAEAARTAAUtFwBRuqgoAAAA9i8ABS6DAFGZSHMABS6aDwAFLoMAUZlJkAQABHMABS8iEwAFLqcAUZmsgAgACFsABS+EUwAFL2sAUbnIJAWADwABV+aKtwABV1CKGwAFL8MAUbLQBFsABTAUUwAFL/sAUbqoKAIO3wAD9HgAAAMAA/b0/AMAAVQ1JwAFMNyXAAUxHh8ABTDvAFGzsYAPAAFckPgNOwAFMc8ABTHoAAKg4XQPAAP07AWADwAD95AEjhsABTHzAFGy0asABTJVdA8AA/TsBYAPAAP3kwADf4h7AAUy0tVwCAAEUwAFM2cAUbOwHAWADwABXJAGpnCkBXQPAAP07AWADwAD95D0cwAFNJ4XAAU0bwBRqryABAAEUwAFNKMAUb80IAAAAPYvAAU17wBRmUhzAAU2Bg8ABTXvAFGZSZAEAARzAAU2jhMABTYTAFGZrIAIAAhbAAU29FMABTbHAFGzsBwFgA8AAVySircAAVycihsABTczAFGy0ARbAAU3hFMABTdrAFG/NCACDt8AA/R4AAADAAP29ScABTfslwAFOC4fAAU3/wBRs7GADwABVzj4DTsABTjbAAU49AACoOF0DwAD9OwFgA8AA/eQBI4bAAU4/wBRstGrAAU5YXQPAAP07AWADwAD95MAA3+IewAFOd7VbAQABFsABTqoUwAFOnsAUbOwHAWADwABVzqKtwABV1AABXQPAAP07AWADwAD95D0cwAFOzoXAAU7CwBRqryABAAEUwAFOz8AUcOIIAAAAPYvAAU8iwBRmUhzAAU8og8ABTyLAFGZSZAEAARzAAU9KhMABTyvAFGZrIAIAAhbAAU9kFMABT1jAFGzsBwFgA8AAVc6ircAAVdQihsABT3PAFGy0ARbAAU+IFMABT4HAFHDiCACDt8AA/R4AAADAAP29P0rAAU+oAYPAAU+vwBRmUgap6HPAAU+9wAFPzsABVcYAAKmdAWrAAU++YAPAAP3kAgAAAQPAAU/awAFVxgAAAAAAAABcAT4FScABT+MhFsABT+gunrPAAFVnSsABT/EAP07AAVAKwAFQHQAAqZ5gA8AAVvEBFsABUCYWwAFQHy6ejqmkqJfAAFZxQ8ABUDgcwAFQUoDAAVA/wBRyRV0AAAAAwAD9Nj4FTsABUG3AAVByAACAvWADwAD+fgEWwAFQh4DAAVB0wBRyRYC9wABW807AAVCbwAFQogAAgmpgA8AAVU4BFsABULeAwAFQpMAUckVewAD9OE7AAVDLwAFQ1AAAhURgA8AA+tEBFsABUN2CwAFQ1sAUcrSFRMAAVWlOwAFQ9cABUPsAAJ2BYAPAAFVOASODwAFQ/cAUctscwAFRFRbAAVEOFsABUQgunwbAAFZfm0Ko70sBAAGBwAFRFsAUcowAwAD9gRzAAVEpFsABUSQWwAFRHi6fBsAAVl+fB6juSwEAAYHAAVEqwBRyjADAAP2BAWADwABVTknAAVE3IRzAAVFBhMABUTvAFHMDSAEAASsAwAD98T4BPRzAAVHRgsABUcrAFHK0qZ8BAAGEwAFR3MAUcwMAwABVcz4BScABUwyDwAFTEMAUcts+AT0cwAFTMxbAAVMmLqKxwABWYah1AgACgcABUz3AFHKMgsABU0PAFHK0AKkjPgE9HMABU3QWwAFTZy6iscAAVmGElgIAAoHAAVN+wBRyjILAAVOEwBRytACpIk7AAVO2wAFTyAAAqaBgA8AAVvEBFsABU8ouqJfAAFZxQ8ABU9wcwAFT9YHAAVPjwBR0Ll0AAAAAwAD9Nj4DTsABVBDAAVQVAACAvWADwAD+fgEWwAFUKYHAAVQXwBR0LoC9wABW807AAVQ9wAFURAAAgmpgA8AAVU4BFsABVFiBwAFURsAUdC5ewAD9OEnAAVTlFsABVPCDwAFU6cAUdJSes8AAVWc+AEnAAVUjHMABVSyCwAFVJ8AUdGyB2AEAASeAtQDAAP6QPgE9HMABVU4WwAFVRy6ejqmkqaECAAKCwAFVZMAUdGyDwAFVasAUdJQAqeo+AT0cwAFVkRbAAVWKLp6OqaSpogIAAoLAAVWnwBR0bIPAAVWtwBR0lACp6wap6XPAAVXLwAFVz8ABVrAAAJ7ZAAAAAQPAAVXhwAFWsAAAAAAAAABgA8AA/JcBPgVJwAFV6iEWwAFV7y6es8AAVWdKwAFV+AGTP07AAVYKwAFWEAAAgO5gA8AA/JcBk07AAVYrwAFWNAAAXF0DwAD9NAFgA8AAVU4BFsABVjsuXMAAVnBDwAFWSRzAAVZZgcABVlDAFHWuXQAAAADAAP02PgE9iMABVm3AFHWZHMABVnOAwAFWbcAUdZlkAQABHMABVocWwAFWf4HAAVZ2wBR1rl7AAP04qMMAAAAAwABVdADAAP29SsABVqABgMABVqfAFHWZBqnqc8ABVrXAAVa6wAFXywAAqaEAAAABA8ABVs/AAVfLAAAAAgICwAFW1wAAAIC9YAPAAP5+AMABVuUAAACCamADwABVTgAAXAE+AUnAAVbzFsABVv6BwAFW98AUdnmFRMAAVWk+AkAcwAFXKxzAAVckFsABVx0WwAFXFy6fBsAAVl+bQqjvSwEAAYDAAVclwBR2aQDAAP2BSAEAASsAwAD98cABVxfAAVcyAD0cwAFXSBbAAVc7LqKxwABWYah1AgACgMABV1LAFHZpgcABV1jAFHZ5AKkjPgJAHMABV40cwAFXhhbAAVeBFsABV3sunwbAAFZfnweo7ksBAAGAwAFXh8AUdmkAwAD9gUgBAAErAMAA/fHAAVd7wAFXlAA9HMABV6oWwAFXnS6iscAAVmGElgIAAoDAAVe0wBR2aYHAAVe6wBR2eQCpIgap63PAAVfQwAFX1cABWqQAAKmiAAAAAQPAAVfqwAFapAAAAAICAsABV/IAAACAvWADwAD+fgDAAVgAAAAAgmpgA8AAVU4AAFwBPgNJwAFYDiIhHMABWB0WwAFYFhbAAVgSLoCsqaaBvMAA/wVIAQABJ4eAAMAA/o0BIRzAAVg0FsABWC8WwAFYKy6ArKmmTsAA/wqB2AEAASeAtQDAAP6QPgE9HMABWE0unq4EAAQcwAFYdWrAAVhYXQORrwFhAwJgA8AA/n5gA8AA/v9gA5GYwAB74ogvAgACgMABWIPAFHe0FsABWIkugKyppgCRsxbAAViggcABWJnAFHfEh2XAAFVUasABWKxgA8AA/JcVFsABWL2BwAFYtsAUd8SEZsAAVVMAqco/QCIiFsABWhiBwAFaEcAUd8SFRMAAVWkAHMABWjgcwAFaMRbAAVoqFsABWiQunwbAAFZfm0Ko70sBAAGAwAFaMsAUd7QAwAD9gUgBAAErAMAA/fEBIiEWwAFaVYHAAVpOwBR3xIVEwABVaQAcwAFacxzAAVpsFsABWmcWwAFaYS6fBsAAVl+fB6juSwEAAYDAAVptwBR3tADAAP2BSAEAASsAwAD98cABWhDAAVp7AD0cwAFagi6pMgIAAoDAAVqTwBR3tIHAAVqZwBR3xADAAFZ3Bqnsc8ABWqnAAVquwAFkTgAAqaMAAAABA8ABWsbAAWROAAAABgMDwAFa5gAAAKg4XQPAAP07AWADqGQAwAFa8gAAAIRmYAPAAP7/AMABWv8AAACDYmADwAD8lwADwAFbEwAAAKmkYAPAAPrRAWoAYAPAAP2hecABWyYAAACppWADiOkBagBgA8AA/aF5wAFbPQAAAIiWYAPAAP5+AWoAYAPAAP2heVwBPgFGwAFbUADAAVtnAAAAqaZgA6hkAIDAAVtwwBR5rkE+Bk7AAVuJwAFbkgAAH2ADiOkBFsABW5qGwAFblMAUejcfqGZOwAFbuMABW8YAAJ72YAOJggEWwAFbzobAAVvIwBR6N572qGdOwAFb7AAAACJgA5GYAE7AAVwAwAFcDgAAqadgA8AA+tEBNQAAAAEAYAPAAPrRAYPAAVwQwBR55CMcwAFcGRQAwBR6ugoASAEAASsAABzAAVwqFsABXBwuqPOplYMcAQABh8ABXDPAFHpSAMAA/jsUAMAUeroKAAFgA8AA+tFJwAFcRCIlwAFcUYfAAVxIwBR6UmADiTYAHMABXIMWwAFcfBbAAVxtFMABXGTAFHpSBwFgA4k2hMWJOGHAAP1rgJcBAAGTAMAA/cc+AknAAVySFMABXJbAFHqmCgA+AT0VwAFcscAUepgJHMABXQJqwAFcu10Dka8BYQMBYAOI6WADkZjAAEKTiC8BAAEUwAFdEMAUelIHAWADiTYAkbM+AT0VwAFdNsAUepgJasABXUBgA5GjwABC+j0VwAFdhsAUenQIK0nAAV2pIiXAAV22h8ABXa3AFHpSYAOJcQAhHMABXe8WwAFd4RTAAV3YwBR6UgcBYAOJcYajiXZIAQABKwCI7T4CPRzAAV4CLp6uBAAEHMABXkFqwAFeGl0Dka8BYQMDYAPAAP5+YAOI6WADiOlgA5GYwABYgYgvAwADFsABXm4UwAFeYMAUenQIAIC9iYYUwAFedMAUelIHAWADiXEWwAFehxTAAV5+wBR6UgcBYAOJcYajiXYAkbOCwAFeo8AUedNqwAFet2ADwAD8lxWBwAFezcAUecMAqcpCwAFe3wA+AUnAAV8AIhzAAV8YFsABXwqGwAFfBMAUejeoKqhoSAEAASsAiO0AIRzAAV8yhMABXyPAFHn9SAEAASsAiO0+AUnAAV9HFMABX0vAFHqmCgA+AT0VwAFfaMAUepgJHMABX7FqwAFfgl0Dka8BYQMFYAOI6WADiOlgA8AA/n5gA4jpYAPAAP5+YAORmMAATNqILwUABYfAAV/UwBR6UhbAAWAAFMABX/LAFHp0CACFf4mHFsABYCkUwAFgG8AUenQIAIC9iYaEwAFgQ8AUef2FwAFgZ8AUehQAkbM+AT0VwAFgk8AUepgJHMABYMRqwAFgnV0Dka8BYQMFYAOI6WADiOlgA8AA/n5gA4jpYAPAAP5+YAORmMAATF2ILwUABYfAAWDjwBR6UhbAAWELFMABYP3AFHp0CACFf4mHFsABYTAUwAFhIsAUenQIAIC9iYaEwAFhRsAUef2FwAFhZsAUehQAkbM+A07AAWGhwAFhrwAAqahgA8AA/n4BIxzAAWHFFsABYbeGwAFhscAUejeoKqhoSAEAASsAiO2FwAFh3cAUehQewAFh+KhGAQABFsABYhGGwAFiC8AUejeoKqhoAAFgA8AA/n5AIRzAAWJAFMABYjLAFH4hCwBIAQABKwDAAP6NwAFiMsABYkcAScABYlQUwAFiWMAUeqYKAD4BPRXAAWJ1wBR6mAkcwAFipWrAAWJ/XQORrwFhAwRgA4jpYAOI6WADwAD+fmADwAD+fmADkZjAAEvoiC8EAASHwAFixMAUelIWwAFi7BTAAWLewBR6dAgAhX+JhxbAAWMRFMABYwPAFHp0CACAvYmGFMABYyfAFH4hCwAAkbM+AT0VwAFjVsAUepgJHMABY35qwAFjYF0Dka8BYQMEYAOI6WADiOlgA8AA/n5gA8AA/n5gA5GYwABJ0ogvBAAEh8ABY4zAFHpSFsABY7QUwAFjpsAUenQIAIV/iYcWwAFjyRTAAWO7wBR6dAgAgL2JhhTAAWPPwBR+IQsAAJGzPRzAAWQELqmpBAAEFMABZBzAFHqYCQCBwAFkJcAUecOCwAFkLsAUedMUwAFkNsAUenQIAACp7Qap7XPAAWRTwAFkWMABZpsAAKmpAAAAAQPAAWRvwAFmmwAAAAQEBMABZHgAAAAiYAORmADAAWSFAAAAhGZgA8AA/v8AwAFkkgAAAIRYYAPAAPyXAMABZLIAAACe9mADiYIAAFwBPgNOwAFk3AAAAIJXXQPAAP07AWADkbYAScABZOkiIRzAAWT7g8ABZO3AFIA/SAEAASsAwAD98QAhHMABZR8WwAFlFIPAAWUGwBSAP4RYgllIAQABHMABZSKUgcYAAAAAwAD8ugDAAP27PgE9jMABZZzAFIBTMcABZbZgA5G2ARzAAWXlasABZcBgA5GjwABNV4JfAwADFsABZhYWwAFmDYPAAWX/wBSAP4RggmWBvYqbFsABZiqDwAFmHMAUgD+EWIJZasABZjZgA8AA/JcVAJGrPz0cwAFmUy6ergUABIDAAWZewBSAEoLAAWZnwBSAL2rAAWZzYAPAAPyXFYHAAWZ9wBSAHwGCV4TAAWaPwBSAU6nKBqnuc8ABZqDAAWalwAFnkwAAqaoAAAABA8ABZrfAAWeTAAAAAgICwAFmvgAAAISbYAODnADAAWbVAAAAht1gA5ufAABcAT4CScABZuwWwAFm/hbAAWb3FsABZvAulUupfIJJqmmCUKApSsABZwoAPz0cwAFnFi6iugUABBbAAWc3gMABZzHAFIGLgpSDnoHAAWc9wBSBmRbAAWdUgMABZ07AFIGLhGaDghbAAWdjgMABZ13AFIGLhFiCWQGoNCmp9Aap73PAAWeYwAFnncABcHUAAKmrAAAAAQPAAWe7wAFwdQAAAAcDA8ABZ9MAAACG3WADm58AwAFn6AAAAIRmYAPAAP7/AMABZ/UAAACEWGADwAD8lwAEwAFoHAAAAITFXQPAAP07AWADiYIBagBgA8AA/aF5wAFoTAAAAITHXQPAAP07AWADiH4BagBgA8AA/aF5wAFoggAAAITIXQPAAP07AWADiH4BagBgA8AA/aF5wAFoogAAAIVJYAOI6QFqAGADwAD9oXlcAT4FScABaLUWwAFoxxbAAWjAFsABaLkulUupfIJJqmmCUKApSsABaNMAP0nAAWjfIRzAAWjyg8ABaOPAFIJ7SAEAASsAwAD9ZT4BRsABaQPAAWkzwAFpFgAAAIDtYAOJggCDwAFpI8AUgns+AT0cwAFpPS6iugUABBbAAWlmh8ABaVzAFINBhX+Jh4DAAWltwBSCTIHAAWl+wBSCWhbAAWmRh8ABaYfAFINBhFiCWQGoNCmp9D9JwAFp1SEcwAFp7oTAAWnZwBSCmUgBAAErAMAA/WU+AUbAAWn/wAFqOMABahgAAACZ7mADiH4AhMABaiLAFIKZPgE9HMABakIuoroFAAQWwAFqaIfAAWphwBSDzIKUiISAwAFqbsAUgkyBwAFqf8AUgloWwAFqj4fAAWqIwBSDzIRYglkBqDQpqfQ/ScABatMhHMABaueFwAFq18AUgrdIAQABKwDAAP1lPgFGwAFq+MABayvAAWsRAAAAhW1gA4h+AIXAAWsawBSCtz4BPRzAAWs1LqK6BQAEFsABa1qHwAFrVMAUhFeClIiEgMABa2DAFIJMgcABa3HAFIJaFsABa4CHwAFresAUhFeEWIJZAag0Kan0P0nAAWvEIRzAAWvThsABa8jAFILVSAEAASsAiO0+Ak7AAWv8wAFsAwAAqDhdA8AA/TsBYAOoZAEewAFsBahEAwAChsABbCfAFILVgMABbDPAFIJMAag0KUnAAWxuIRzAAWx5h8ABbHLAFITYSAEAASsAwAD9ZT4CTsABbJDAAWyXAACDYmADwAD8lwGCwAFsmcAUgmpGwAFsrcABbNXAAWzEAAAAqaZgA6hkAIfAAWzNwBSE2D4FTsABbOrAAWzzAAAfYAOI6QEWwAFs+xTAAWz1wBSFVgkAH6hmTsABbR3AAW0rAACe9mADiYIBFsABbTMUwAFtLcAUhVYJAJ72qGdOwAFuPgAAACJgA5GYAEnAAW5RIiXAAW5eFMABblXAFIVwCgBgA4k2ABzAAW6QFsABbokWwAFuehTAAW5xwBSFcAoBYAOJNoTFiThhwAD9a4CXAQABkwDAAP3HPgI9FcABbqPAFIW6DGrAAW6tYAORo8AAQvo9FcABbu3AFIWUCys+AT0VwAFvIsAUhboMHMABb1ZqwAFvLF0Dka8BYQMEYAOI6WADiOlgA8AA/n5gA8AA/n5gA5GYwABKVogvBAAEFMABb3XAFIVwCgAWwAFvnRTAAW+PwBSFlAsAhX+JhxbAAW/CFMABb7TAFIWUCwCAvYmGHsABb9ioRgEAARbAAW/xFMABb+vAFIVWCQCoKqhoAACRsz0cwAFwGS6pqQQABBTAAXAxwBSFugwAgcABcDrAFIJaFMABcEPAFIUxCAAUwAFwS8AUhZQLAACp7T8/Bqnwc8ABcHrAAXB/wAFyOQAAqawAAAABA8ABcJjAAXI5AAAAAwMDwAFwrQAAAIJuYAOErgDAAXDHAAAAht1gA5ufAMABcNwAAACEZmADwAD+/wAAXAE+AknAAXDrFsABcP0WwAFw9hbAAXDvLpVLqXyCSappglCgKUrAAXEJAD89HMABcRUuqasHAAOBwAFxPcAUhz+CwAFxTsAUh00WwAFxYIDAAXFXwBSHMYRYglkEhMUWwAFxjYDAAXGEwBSHMYTFhLOExxbAAXHEgMABcbvAFIcxhMeEtYTIFsABcfyAwAFx88AUhzGEyIS2hUkWwAFyKoDAAXIhwBSHMYVJhLep7wap8XPAAXI+wAFyQ8ABc4MAAKKBAAAAAQPAAXJbwAFzgwAAAAQDA8ABcm8AAACD82ADhwgAwAFyhQAAAIbdYAObnwDAAXKaAAAAhGZgA8AA/v8AAcABcq8AAACppGADwAD60QFqwAFyumADwAD60QBcAT4CScABcsgWwAFy2hbAAXLTFsABcswulUupfIJJqmmCUKApSsABcuYAPz0cwAFy8i6iugYABBbAAXMSgMABcw3AFIg0hdOHC4HAAXMgwBSIQoLAAXMxwBSIUBbAAXM/gMABczrAFIg0hFiCWQKppIPAAXNdwBSIYag0Kan0Bqnyc8ABc4jAAXONwAF0ywAAooYAAAABA8ABc6TAAXTLAAAABAMDwAFztwAAAIPzYAOHFQDAAXPNAAAAht1gA5ufAMABc+IAAACEZmADwAD+/wABwAFz9wAAAKmkYAPAAPrRAWrAAXQCYAPAAPrRAFwBPgJJwAF0EBbAAXQiFsABdBsWwAF0FC6VS6l8gkmqaYJQoClKwAF0LgA/PRzAAXQ6LqK6BgAEFsABdFqAwAF0VcAUiSOF04cYgcABdGjAFIkxgsABdHnAFIk/FsABdIeAwAF0gsAUiSOEWIJZAqmkg8ABdKXAFIlQqDQpqfQGqfNzwAF00MABdNXAAXaMAACimAAAAAEDwAF07MABdowAAAAEAwPAAXT/AAAAg/NgA4ciAMABdRUAAACG3WADm58AwAF1KgAAAIRmYAPAAP7/AAHAAXU/AAAAqaRgA8AA+tEBasABdUpgA8AA+tEAXAE+A0nAAXVYFsABdWoWwAF1YxbAAXVcLpVLqXyCSappglCgKUrAAXV2AD89HMABdYIuoroGAAQWwAF1mYDAAXWUwBSKEoXchyWBwAF1osAUiiCCwAF1s8AUii4WwAF1wYDAAXW8wBSKEoRYglkCqaSDwAF138AUij+oNCmp9D0cwAF2By6iugYABBbAAXYegMABdhnAFIoShd2HJoHAAXYpwBSKIILAAXY6wBSKLhbAAXZIgMABdkPAFIoShFiCWQKppIPAAXZmwBSKP6g0Kan0Bqn0c8ABdpHAAXaWwAF4VAAAoroAAAABA8ABdqfAAXhUAAAABgQEwAF2uAAAAIKUYAOI6QDAAXbOAAAAht1gA5ufAMABduMAAACEZmADwAD+/wDAAXbwAAAAg2JgA8AA/JcAAsABdwQAAACppGADwAD60QFqAGADwAD9oXnAAXcTAAAAqDRgA8AA+tEBasABdydgA8AA+tF3XAE+A0nAAXc0FsABd0YWwAF3PxbAAXc4LpVLqXyCSappglCgKUrAAXdSAD9OwAF3dsABd30AAKg4XQPAAP07AWADqGQBHsABd3+oRAMAAoDAAXefwBSLVIHAAXelwBSLYgGoNIXAAXfRwBSLqknAAXfpIRzAAXf0hsABd+3AFIvzSAEAASsAwAD9ZT4BPRzAAXgFLqmjBAADhsABeB7AFIvzgsABeCbAFItwg8ABeC/AFIuAAamkhMABeEHAFIuRqew/Bqn1c8ABeFnAAXhewAF5wAAAojcAAAABA8ABeH7AAXnAAAAABAMDwAF4mgAAAIPzYAOIfgDAAXiwAAAAht1gA5ufAMABeMUAAACEZmADwAD+/wABwAF42gAAAKmkYAPAAPrRAWrAAXjlYAPAAPrRAFwBPgNJwAF48xbAAXkFFsABeP4WwAF49y6VS6l8gkmqaYJQoClKwAF5EQA/ScABeR0cwAF5KxbAAXkmgMABeSHAFIywgpSIhEgBAAErAIjtSsABeTQAPz0cwAF5QC6iugYABBbAAXlXgMABeVLAFIywgpSIhIHAAXldwBSMvoLAAXluwBSMzBbAAXl8gMABeXfAFIywhFiCWQKppIPAAXmawBSM3ag0Kan0Bqn2c8ABecXAAXnKwAF78wAAoyAAAAABA8ABeezAAXvzAAAABAMDwAF6CgAAAIPzYAOF+wDAAXogAAAAht1gA5ufAMABejUAAACEZmADwAD+/wABwAF6SgAAAKmkYAPAAPrRAWrAAXpVYAPAAPrRAFwBPgZJwAF6YxbAAXp1FsABem4WwAF6Zy6VS6l8gkmqaYJQoClKwAF6gQA/ScABeo0WwAF6phbAAXqgFsABepaAwAF6kcAUjcpbhf6FfYWlgVXAAP0dSsABeq8AP07AAXrHwAF60wAAmQhgA4PPARbAAXragMABetXAFI3KgkmGAk7AAXrswAF68gAAqa1gA4MbARbAAXsAhMABevTAFI5xhQqDhU7AAXsdwAF7LQAAhb1gA4jpAR/AAXsziTQCAAKFwAF7QcAUjpUWwAF7VxbAAXtNgMABe0jAFI3KW4X+hX2FpQA9HMABe2MuoroGAASGwAF7fsAUjrmBwAF7j8AUjdiCwAF7oMAUjeYWwAF7roDAAXupwBSNyoRYglkCqaSDwAF7zMAUjfeoNCqp9Aap93PAAXv4wAF7/cABfjIAAKMhAAAAAQPAAXwbwAF+MgAAAAQDA8ABfDQAAACD82ADhegAwAF8SgAAAIbdYAObnwDAAXxfAAAAhGZgA8AA/v8AAcABfHQAAACppGADwAD60QFqwAF8f2ADwAD60QBcAT4HScABfI0WwAF8nxbAAXyYFsABfJEulUupfIJJqmmCUKApSsABfKsAP0nAAXy3FsABfNAWwAF8yhbAAXzAgMABfLvAFI9pW4XrhX2FpYFVwAD9HUrAAXzZAD9OwAF878ABfPcAAIQtYAOEEgEWwAF8/oDAAXz5wBSPaYJJhe9AFsABfRmEwAF9EcAUkBCEI4Q1wAF9EcABfSIATsABfS/AAX01AACprWADgxsBFsABfT+EwAF9N8AUkBCFCoOFTsABfVzAAX1sAACFvWADiOkBH8ABfXKJNAIAAoXAAX2AwBSQUBbAAX2WFsABfYyAwAF9h8AUj2lbheuFfYWlAD0cwAF9oi6iugYABIbAAX29wBSQdIHAAX3OwBSPd4LAAX3fwBSPhRbAAX3tgMABfejAFI9phFiCWQKppIPAAX4LwBSPlqg0Kqn0Bqn4c8ABfjfAAX48wAGCKgAAoyIAAAABA8ABflnAAYIqAAAABAMDwAF+cgAAAIPzYAOF6ADAAX6IAAAAht1gA5ufAMABfp0AAACEZmADwAD+/wABwAF+sgAAAKmkYAPAAPrRAWrAAX69YAPAAPrRAFwBPghJwAF+yxbAAX7dFsABftYWwAF+zy6VS6l8gkmqaYJQoClKwAF+6QA/ScABfvUWwAF/DhbAAX8IFsABfv6AwAF++cAUkSRbheuFfYWlgVXAAP0dSsABfxcAP07AAX8pwAF/LwAAqa1gA4MbARbAAX89FsABfzaAwAF/McAUkSSCSYXvhQqDhU7AAX9lwAF/cAAAmrtdA8AA/TsBYAOJggEWwAF/hxbAAX9+FsABf3eAwAF/csAUkSSCSYXvgm6EF4TFhLNOwAF/qsABf7QAAFtdA8AA/TsBYAOI6QEWwAF/xRbAAX+7gMABf7bAFJEkW4XrhX2FpUnAAYAIIRzAAYAeFsABgBeFwAGADMAUkfhhwAD9a0gBAAEWwAGAK4bAAYAhwBSSNWHAAP1rAMAA/btKwAGAMwA/TsABgFfAAYBeAACoOF0DwAD9OwFgA6hkAR7AAYBgqEUDAAOFwAGAjcAUkfiGwAGAmcAUkjWBwAGApMAUkTIAScABgLohHMABgMWHwAGAvsAUkqhIAQABKwDAAP1lPgROwAGA3wAAAKmlYAOI6QBJwAGA9SEcwAGA/4TAAYD5wBSRy0gBAAErAMAA/fE+AT0VwAGBEsAUkwcIH8ABgSeJNAEAAYTAAYE1wBSRywA/TsABgVLAAYFdAACIlmADwAD+fgEWwAGBcBbAAYFrFsABgWSAwAGBX8AUkSSCSYXvgL2DgYC9iLc9HMABgXwuqaMGAAOHwAGBlcAUkqiCwAGBncAUkUAWwAGBq4DAAYGmwBSRJIRYglkDqaSDwAGBy8AUkVGppRTAAYHvwBSTBwgAiJYUwAGCFcAUk1YJAKnsPwap+XPAAYIvwAGCNMABi7AAAKmuAAAAAQPAAYJRwAGLsAAAAAoJCcABgmIAAACFkmADiOkAwAGChgAAAIbdYAObnwDAAYKsAAAAh3xgA5vxAMABgs4AAACg8WADsM0AwAGC5wAAAIC9YAOItADAAYL6AAAAhZFgA4N9AMABgxsAAABbYAOFowDAAYMwAAAAhGZgA8AA/v8AwAGDQwAAAINiYAPAAPyXAAHAAYNXAAAAqaRgA8AA+tEBasABg2JgA8AA+tEAXAE+EUnAAYNwFsABg4IWwAGDexbAAYN0LpVLqXyCSappglCgKUrAAYOOAD9JwAGDmhbAAYOuFsABg6iGwAGDnsAUlGGFfYWlgVXAAP0dSsABg7cAP07AAYPJAAAAqa1gA4MbAE7AAYPjAAAAqa9dA8AA/TsBYAOI6QBJwAGD/iXAAYQPgMABhALAFJQNYAOJJD4CPRXAAYQpwBSVAQoWwAGEPhTAAYQxwBSUDQABYAOJJITviSo9FcABhE/AFJUQCxbAAYR0FMABhGfAFJQNAAFgA4kkhSyJKD4BSsABhJYATsABhPvAAYUCAACWc2ADg30BNQAAAAEAYAODfQEcwAGFDoLAAYUEwBSUKZs/AgACFMABhSDAFJUBCgCEwAGFJ8AUlEUAm/4jHMABhS0UAMAUlZ8MAEgBAAErAACFwAGFMMAUlFMUAMAUlZ8MAAFgA4N9ScABhUUiHMABhVAUwAGFScAUlY0MAEgBAAErAMAA/fEBISXAAYViFMABhVvAFJWNDABgA4QSPgFKwAGFeQA/ScABhYshHMABhZUUwAGFj8AUlQEKAEgBAAEWwAGFnxTAAYWYwBSVjQwAhQqDhQDAAP3xPgNOwAGFwcABhcgAAIRXYAOJlwEcwAGF3oLAAYXUwBSUKZs9AgACFMABhfPAFJUBCgAWwAGGARTAAYX6wBSVjQwAhQqDhQCb+z0VwAGGGMAUlQEKFsABhicUwAGGIMAUlY0MAIUKg4U9FcABhj3AFJUQCxbAAYZcFMABhlXAFJZzDQCFLImaP07AAYaSwAGGogAAnuxdA8AA/W0CYAOJgmADiOkBMsABhr1gA4mCYAOI6QBFwAGGxQHAAYbOwAGG0AAAYmADwAD8lwGTARzAAYbXFMABhtXAFJcpDgBjAQABFsABhu8UwAGG2cAUlRALAGHAAP1rAMAA/cUBFcABhvnAFJcpDhzAAYb3FMABhvnAFJcpDgBkAQABlADAAP29PgE9HMABhxMUwAGHBMAUlvkNAIC/AgACHMABhygWwAGHGhTAAYcUwBSVAQoAhMWDKksBAAEUwAGHKcAUlykOAADAAP1KHMABh0QUwAGHL8AUlRALAEsBAAEUwAGHRcAUlykOAADAAP1KAMAA/YJOwAGHZ8ABh3gAAKmwXQPAAP07AWADiYIBFsABh4oWwAGHgRTAAYd6wBSVjQwAgm6Dj4TFhLNJwAGHzCEcwAGH6BbAAYfhFMABh9DAFJf/DgBhwAD9a0gBAAEWwAGH+xbAAYf1hsABh+vAFJRhhX2FpWHAAP1rAMAA/btKwAGIAwA/TsABiCPAAYhAAACpsV0DwAD9OwFgA4mCAR7AAYhOwAD9QAIBYAOJggIWwAGIehTAAYhpwBSX/w4AYcAA/WsrAEXAAYiNAcABiJbAAYiYAABiYAPAAPyXAZMBHMABiJ8UwAGIncAUmMYQAGMBAAEWwAGIvhTAAYihwBSYgQ8AYcAA/WsAwAD9xQEVwAGIyMAUmMYQHMABiMYUwAGIyMAUmMYQAGQBAAGUAMAA/b0+Aj0cwAGI7xTAAYjTwBSYgQ8AgL8CAAIUwAGI8MAUmMYQAB/AAYkDiZYBAAEWwAGJJRzAAYkhFMABiRHAFJf/DgBLAQABFMABiSLAFJjGEAAAwAD9SoC9iYYAAMAA/Us9HMABiUEUwAGJMsAUlvkNAIC/AgACHMABiVIUwAGJQsAUl/8OAEsBAAEUwAGJU8AUmMYQAADAAP1KH8ABiWeJgQEAARzAAYmVFMABiXnAFJiBDwBLAQABFMABiZbAFJjGEAAAwAD9SgAAwAD9gkXAAYmlAcABia7AAYmwAABiYAPAAPyXAZMBHMABibcUwAGJtcAUmgEQAGMBAAEWwAGJ1hTAAYm5wBSYgQ8AYcAA/WsAwAD9xQEVwAGJ4MAUmgEQHMABid4UwAGJ4MAUmgEQAGQBAAGUAMAA/b0+AT0XwAGKCxzAAYoHFMABievAFJiBDwBLAQABFMABigjAFJoBEAAAwAD9SoV/HsABih2a+wIAAhbAAYo8HMABijgUwAGKKMAUl/8OAEsBAAEUwAGKOcAUmgEQAADAAP1KhX+JhxTAAYpDwBSW+Q0AAImHTsABinfAAYp+AACoOF0DwAD9OwFgA6hkAR7AAYqAqEUDAAMUwAGKrcAUmIEPABbAAYrVhsABisvAFJRhhX2FpYHAAYrcwBSUGwBJwAGK8iEcwAGK/RTAAYr2wBSa3BAASAEAASsAwAD9ZT4BPRzAAYsOLqmjBgADFMABiyfAFJrcEACHwAGLL8AUlG4UwAGLOMAUlH4IAAOppBTAAYtUwBSUjwkAqaWAwAGLeMAUlA2IlhbAAYuhhMABi5zAFJRFgL2It6nsPwap+nPAAYu1wAGLusABjkMAAKmyAAAAAQPAAYvOwAGOQwAAAAEBAcABi98AAACG3WADm58AAFwBPgRJwAGL9hbAAYwIFsABjAEWwAGL+i6VS6l8gkmqaYJQoClKwAGMFAA/TsABjDLAAYw7AABcXQPAAP00AWADwABVTgEWwAGMQi5cwABWcEPAAYxQHMABjGCBwAGMV8AUnAVdAAAAAMAA/TY+Ak7AAYx8wAGMiAAAnt5gA8AAVU4BFsABjJOBwAGMisAUnAVewAD9OEnAAYyiJcABjLKCwAGMpsAUnEhgA8AAVZk+AT0cwAGMzS6pqgIAAhbAAYzsFMABjODAFJxIAgFgA8AAVZmCScAAVaaAwAGM9MAUm8kAqe5JwAGNEyXAAY0jgsABjRfAFJxIYAPAAFX5PgE9HMABjUIuqawDAAMWwAGNfBbAAY11FMABjWnAFJxIAgFgA8AAVfmCScAAVgeCboQXgMABjYbAFJvJFsABjaMUwAGNl8AUnEgCAWADwABV+YRmwABW2QCp8EnAAY26JcABjcqCwAGNvsAUnEhgA8AAVO4+AT0cwAGN8RTAAY3lwBScSAIBYAPAAFTuqbIBAAGAwAGOBsAUm8kAwABVFz89HMABjjgWwAGOKi6o86mVgkYAAAAAwAD+SAap+3PAAY5IwAGOTMABj6kAAJ7BAAAAAQPAAY5nwAGPqQAAAAAAAABgA8AA/JcBPgVJwAGOcCIhFsABjnUuglCphwEcwAGOnhbAAY6DLqj1qZlIAQABKwDAAP1lSsABjqcBkz9FwAGOtQHAAY6+wAGOwAAAYmADwAD8lwGTARzAAY7HgMABjsXAFJ37YwEAARbAAY7kFsABjskuqPWpmWHAAP1rAMAA/cUBiMABjuzAFJ37HMABju2AwAGO7MAUnftkAQABlADAAP29PgE9HMABjxccwAGPExbAAY75Lqj1qZlLAQABgMABjxTAFJ37AMAA/UqpswAAAADAAFXJTsABj0PAAY9JAACA7mADwAD8lwEWwAGPZhbAAY9LLqj1qZlhwAD9az0XwAGPci6o9SupmUrAAY+ZAYDAAY+gwBSekAap/HPAAY+uwAGPzcABkFkAAKkwAWrAAY+vYAPAAP3kAgAAAQPAAY/mwAGQWQAAAAAAAABdA8AA/TsBYAPAAFWZAT4DTsABkALAAZAJAACBdl0DwAD9OwFgA8AAVZkBFsABkAsuqPapmj0XwAGQJi6o9iupmkrAAZBIAYDAAZBPwBSfFwAAE6XZABOmOQATppoAE6bZABOnIgATp6UAE6m9ABOqggATqwcAE6zCABOtIwATr5kAE7HtABOzsAATtgsAE7pqABO8XAATvggAE8FuABPMKgATzhIAE9ONABPUTAAT1wMAE9ryABPlNAAT5dUAE+sEABPs9QAT7hsAE+8TABPvowAT8MYAE/MkABPzlwAT8+AAE/QoABP0nwAT9UIAE/XmABP2ogAT99QAE/kuABP7UgAT/MoAE/5CABQHkAAUCxkAFBJvABQkPwAUJiwAFClnABQtlwAUMWEAFDiIABQ6TgAUPCYAFD1iABQ/dwAUQEgAFEClABRGrAAUSHAAFE3PABRaZgAUW6QAFGG8ABRiGgAUYq0AFGT9ABRl8AAUcfMAFHVNABR2QgAUd40AFHmHABR/6wAUgWQAFIIlABSHCgAUiA0AFIj8ABSJ6wAUiy0AFIyJABSNowAUj0IAFJD9ABST5gAUm6IAFJ2RABSe0gAUn1YAAABcAqoBc8ABkLTAAZC5wAGR1guptAAAAWABwAD95AAADwSqA3PAAZC5wAGQuQknAGADwAD8lwAEqgVzwAGQucABkLkJKKl1AGADwAD+fgAEqgZzwAGQucABkLkGKQBdA8AA/TsBYAOqAQFqAF0DwAD9OwFgA6oBwADgMASqB3PAAZDUwAGQ1AaESABgA6oBAWoAYAOqAcAA3+0EqghzwAGQ38ABkN8GqbkAYAOqAQFqAGADqgHAAN/+BKoJc8ABkP/AAZD/Bqm6AGADqgEBagBgA6oBwADfPQSqCnPAAZETwAGREwapYwBgA6oBAWoAYAOqAcAA304EqgtzwAGRJ8ABkScGqbsAYAOqAQFqAGADqgHAAN95BKoMc8ABkULAAZFCBqm8AGADqgEBagBgA6oBwADfiwSqDXPAAZFbwAGRWwapvQBgA6oBAWoAYAOqAcAA32cEqg5zwAGRc8ABkXMGhpEAYAOqAQFqAGADqgHAAN+7BKoPc8ABkX7AAZF+Bqm+AGADqgEBagBgA6oBwADgDwSqEHPAAZGlwAGRpQapvwBgA6oBAWoAYAOqAcAA4CEEqhFzwAGRt8ABkbcGqcAAYAOqAQFqAGADqgHAAN+hBKoSc8ABkcjAAZHIBoVKAGADqgEBagBgA6oBwADfzQEFqhZzwAGQucABkLnAAZHWAQAAA8ABkLnAAZHWAAAAAgICwAGQuQAABCdgA8AA/JcAwAGQuQAABChgA8AA/n4AAGADqgEBPwMIAKoDgADAFKLfCACqBYEAwBSi7gkAAMAA/foAAAAAAQaqFHPAAZC5wAGQucABkdYAACMAAAABA8ABkLnAAZHWAAAAAAAAAGADwAD+fgFKAAEPAC6qBQAAFKMlABSjWwAAAAECqhdzwAGS5sABkuzAAbLqA6nBAAABYAHAAP3kAAALBKoac8ABkyHAAZMmGKnCqXUAYAOqAQAEqh9zwAGTS8ABk1EJhFcAYAOqFwAEqiBzwAGTccABk3gJhJQAXQPAAP1tAmADwAD+fmADwABVTgAEqiFzwAGTmMABk6QJhOQAXQPAAP1tAmADwAD+fmADwABVTgAEqiJzwAGTxMABk8sJm0IAXQPAAP1tAmADwAD+fmADwABVTgAEqiNzwAGT68ABlAUJhX0AXQPAAP07AWADwABXeQExwAGUA2ADwABXeQAEqhtzwAGUacABlG4YKKl1AGADwAD+fgAEqhxzwAGU8MABlPsYqcOpdQBgA8AA/JcABKodc8ABlRrAAZUoGKnEqXUAXQPAAP07AWADwABXXQErBKoec8ABlhDAAZYiGKnFqXUAYAPAAFc3ASsEqiRzwAGWLMABlkcYoe4AYAPAAPrRASoCBao3c8ABlkzAAZZMwAGW8QAAAAPAAZZlwAGW8QAAAAcHB8ABlmsAAASpwmADqgEAwAGWdwAABISUXQPAAP1tAmADwAD+fmADwABVTgDAAZaFAAAEm0JdA8AA/W0CYAPAAP5+YAPAAFVOAMABlpkAAASE5F0DwAD9bQJgA8AA/n5gA8AAVU4AwAGWrAAABChgA8AA/n4AwAGWuAAABKnDYAPAAPyXAMABlsoAAASEV2ADqhcAAGADqhcBPgFAIRzAAZblFsABlt8uKKl1qhtIAQABKwDAAP6NwAGW38ABluwACAgBqhqAAMAUpPAIAaoggQDAFKT+CAGqIoIAwBSlGwgBqiGDAMAUpTgIAaobhADAFKVVCAGqHIUAwBSlZAgBqh+GAMAUpXQJAcABlkzAAP36AAAAAAWqOHPAAZb2wAGW9sABl5kAhEgAA8ABlxfAAZeZAAAAAAAAAGADqhcBPwEKAMABlyKqNwcAB2rAAZc+YAOqAcAA3+0ywAGXWGADwAD+fmADwABVTgAywAGXeWADwAD+fmADwABVTgArJ6nGHMABl5CUgcYAAAAAwAD8uisADwaqJnPAAZeewAGXuMABmREAAKkBAAAAAQPAAZfEwAGZEQAAAAMDA8ABl+MAAACCa2ADqgEAwAGX8AAAAIC9YAPAAP5+AMABl/sAAACpAGADwAD60QAAYAOqFwE+AUrAAZgNAR/AAZgYqjcHAAeAwAGYO8AUpqkjgsABmEnAFKbHMsABmG1gA8AA/n5gA8AAVqEAKwFdA8AA/W0CYAPAAP5+YAPAAFahI4LAAZiAwBSmxzLAAZikYAPAAP5+YAPAAFahACsBXQPAAP1tAmADwAD+fmADwABWoSOCwAGYt8AUpscywAGY22ADwAD+fmADwABWoQArAV0DwAD9bQJgA8AA/n5gA8AAVqGBwAGY7sAUprccwAGY/JSBxgAAAADAAPy6LgAGqidzwAGZo8ABmajAAZsSAACpxwAAAAEDwAGZvsABmxIAAAADAwPAAZnNAAAAgL1gA8AA/n4AwAGZ1wAAAIdlYAPAAPyXAMABmf0AAACirV0DwAD9OwFgA8AAV10AAFwBPgVAHMABmh8WwAGaGS6pwql1qhpIAQABasABmjlgA6oBwADf/gDAAP3xwAGaGcABmlUBJMABmoQCJ6nIFsABmn4uqcKpdaoaPRfAAZqLLqnCqXVqwAGaqmADqgHAAN89qho9F8ABmsAuKKl1gMABmsjAFKfNqhs9F8ABmtIuqcOpdYHAAZrgwBSn3aocPRfAAZrwLqnEqXWCwAGbAcAUp+2qHQaqKHPAAZuqwAGbr8ABnSMAAKnJAAAAAQPAAZvKwAGdIwAAAAMDA8ABm9kAAACAvWADwAD+fgDAAZvjAAAAh2VgA8AA/JcAwAGcCQAAAKKtXQPAAP07AWADwABXXQAAXAE+BUAcwAGcKxbAAZwlLqnCqXWqGkgBAAFqwAGcRWADqgHAAN/+AMAA/fHAAZwlwAGcYQEkwAGckAInqcgWwAGcii6pwql1qho9F8ABnJcuqcKpdWrAAZy2YAOqAcAA34uqGj0XwAGc0S4oqXWAwAGc2cAUqNGqGz0XwAGc4y6pw6l1gcABnPHAFKjhqhw9F8ABnQEuqcSpdYLAAZ0SwBSo8aodBqopc8ABnbXAAZ26wAGf0gAAqcoAAAABA8ABndDAAZ/SAAAAAwMDwAGd3wAAAIC9YAPAAP5+AMABnekAAACHZWADwAD8lwDAAZ4PAAAAoq1dA8AA/TsBYAPAAFddAABcAT4FQBzAAZ7fFsABntkuqcKpdaoaSAEAAWrAAZ75YAOqAcAA3/4AwAD98cABntnAAZ8VASTAAZ9EAiepyBbAAZ8+LqnCqXWqGj0XwAGfSy6pwql1asABn2pgA6oBwADfTqoaPRfAAZ+ALiipdYDAAZ+IwBSp1aobPRfAAZ+SLqnDqXWBwAGfoMAUqeWqHD0XwAGfsC6pxKl1gsABn8HAFKn1qh0GqipzwAGgacABoG7AAaGfAACpywAAAAEDwAGgiMABoZ8AAAADAwPAAaCXAAAAgL1gA8AA/n4AwAGgoQAAAIdlYAPAAPyXAMABoMcAAACirV0DwAD9OwFgA8AAV10AAFwBPgRAHMABoOkWwAGg4y6pwql1qhpIAQABasABoQNgA6oBwADfZwDAAP3xwAGg48ABoRcBJMABoUYCJ6nIFsABoUAuqcKpdaoaPRfAAaFNLiipdYDAAaFVwBSq2aobPRfAAaFfLqnDqXWBwAGhbcAUqumqHD0XwAGhfS6pxKl1gsABoY7AFKr5qh0GqitzwAGiRMABoknAAaOHAACpzAAAAAEDwAGiYsABo4cAAAABAQHAAaJvAAAAgpRgA8AAVzcAAFwBPgNAHMABoogWwAGigi6pwql1qhpIAQABasABoqJgA6oBwADfZwDAAP3xwAGigsABorYBJMABowYCJ6nNFsABowAuqcKpdaoaQBzAAaMnFsABoxQuqcWpdaoeSAEAASsAwAD98cABoxTAAaMuASepzj0XwAGjai6pxal1gMABo3/AFKvDqh4GqjFzwAGlocABpbzAAaXJAQCCawAAAAEDwAGlwcABpckAAAAAAAAAYAOqAQFKwAGlxAEWwAGlxC6pwql1qhoGqjJzwAGlzsABpdnAAaXmAQCAvQAAAAEDwAGl3sABpeYAAAAAAAAAYAPAAP5+AUrAAaXhARbAAaXhLiipdaobBqozc8ABpevAAaXzwAGmDAEAh2UAAAABA8ABpf7AAaYMAAAAAAAAAGADwAD8lwFKwAGmAQEWwAGmAS6pw6l1qhwGqjRzwAGmEcABpi/AAaZOAQCirQAAAAEDwAGmPcABpk4AAAAAAAAAXQPAAP07AWADwABXXQFKwAGmQAEWwAGmQC6pxKl1qh0GqjVzwAGoMcABqEHAAalyAQCpzwAAAAEDwAGoU8ABqXIAAAAAAAAAYAPAAFc3AT4DQBzAAahlFsABqGAugmuqMUgBAAFqwAGof2ADqgHAAN9nAMAA/fHAAahgwAGokwEkwAGo2wMnqdAWwAGo1S6Ca6oxJ4FqQCEcwAGo/BbAAajpLqnFqXWqHkgBAAErAMAA/fHAAajpwAGpAwEkwAGpTgMnqdEuJ4FqSsABqVUBFsABqVwuqcWpdaoeBqosc8ABqqLAAaqnwAGq3QAAqPwAAAABA8ABqq7AAardAAAAAQEBwAGqvgAAAIKUYAPAAFd5AABcAT4BPRzAAarQFsABqsouhX2qI1YBAAGAwAGq1MAUrkYAwAD9TAaqLXPAAasywAGrN8ABshsAAJ68AAAAAQPAAatDwAGyGwAAAAICAsABq2UAAACirV0DwAD9OwFgA8AAV10AwAGriQAAAIRIYAOpeQAAXAE+BU7AAau5AAAAgKtdA8AA/W0CYAPAAP5+YAPAAFddAEnAAavCIRzAAavUgMABq8bAFK6kSAEAASsAwAD9ZT4CPYrAAavlwBSuzzLAAawIYAPAAP5+YAPAAFddAEbAAawSwAGsRcABrCsAAACEJmADwABXXQCAwAGsNsAUrqQ+AT0cwAGsUoLAAaxPwBSuz4C/AgACFsABrFuDwAGsU8AUrzGAvcAAV1GDwAGsY8AUrzEAwAD9gj9OwAGshAAAAJ8GYAOo9gBGwAGsj8ABrLLAAayjAAAAgpRgA8AAV3kAFsABrKsuhX2qIz4FTsABrMHAAazRAACp0mADwAD95AEWwAGs4BbAAazYhMABrNPAFK+bhCbAAFd7gL3AAFc6TsABrPPAAaz4AACAvWADwAD+fgEmwAGs8wEjJcABrQqFwAGs+sAUr7hgA8AAVNAWwAGtNxTAAa0nwBSvuAUBYAPAAFTQogLAAFTShcABrU3AFK+4AWADwAD95GADwAD+fk7AAa1sAAAAnt5gA8AAVU4AScABrX8hHMABrYiGwAGtg8AUr+tIAQABKwDAAP6NPgJJwAGtmyEcwAGtpxbAAa2fLoSUqiBIAQABKwDAAP3xPgE9j8ABrbzAFLBMHMABrdEWwAGtyi6ElKogSwEAAYbAAa3SwBSv6wDAAP2BP0nAAa3rIhzAAa37h8ABre/AFLBMSAEAASsAwAD98QAhHMABrgqCwAGuBsAUrs9IAQABKwDAAP3xPgE9j8ABrh/AFLBMHMABrjCCwAGuLcAUrs9LAQABhsABrjHAFK/rAMAA/YE/P0nAAa5QHMABrmCHwAGuVMAUsExIAQABKwDAAP3xPgE9HMABruEWwAGu2i6EV6ofqPwBAAGEwAGu6cAUr5sAqixJwAGu/SXAAa8RhcABrwHAFK+4YAPAAFTQPgNOwAGvdsABr34AACJgA5GYARzAAa+jasABr4BdA5GvAWEDAmADwAD+fmADwAD+fmADkZjAAG9UiC8CAAIewAGvvsAAVKkDAAMWwAGv6xTAAa/bwBSvuAUBYAPAAFTQogLAAFTSFsABr/uEwAGv9sAUr5uHZcAAV3wWwAGwDITAAbAHwBSvm4RmwABXfQAWwAGwMhTAAbAiwBSvuAUBYAPAAFTQgL3AAFStAJGzPRzAAbBJgcABsEHAFK67nq4EAAQUwAGwVMAUsYsIABbAAbBihMABsF3AFK+bh2XAAFd8HMABsJgWwAGwihTAAbB6wBSvuAUBYAPAAFTQqdPAAFSzgY0BAAEWwAGwn4TAAbCawBSvm4dlwABXfADAAP2+FsABsLCEwAGwq8AUr5uEZsAAV30Aqco9HMABsM8WwAGwx4TAAbDCwBSvm4QmwABXe560AQABJsABsOEBHMABsOEWwAGw2YTAAbDUwBSvm4QmwABXe6nUAQABHMABsPoUwAGw8sAUsYsIAIJfAwADFsABsRmEwAGxFMAUr5uEZsAAV30WwAGxM4TAAbEuwBSvm4dlwABXfBzAAbFpFsABsVsUwAGxS8AUr7gFAWADwABU0KnTwABUs4GNAQABFsABsXCEwAGxa8AUr5uHZcAAV3wAwAD9vgCRnwDAAFdGYAPAAFdNAMAAV0E+Aj0jHMABsZyDwAGxlsAUr4RIAQABKwDAAP3xi8ABsZbAFK+EHMABsa4cwAGxoC6o+wEAASsAqi6onQEAAYDAAbHAwBSupACpBSsBYAOo9j0cwAGx3YTAAbHYwBSvm6PWAgACg8ABsefAFK+EgcABse7AFK67AMAAV389HMABshAWwAGyCi6FfaojgkYAAAAAwAD9VAaqLnPAAbIgwAGyJsABsosAAKj7AAAAAQPAAbItwAGyiwAAAAEBAcABsjQAAACEV2ADqPYAAGADqPYBPgFKwAGyQgEfwAGyTakaBQAEFsABslMuhJSqIBbAAbJcLptCqiKAwAGyZcAUtE0WwAGybS6AvaoyAaKwKgaqL3PAAbKQwAGyo8ABsugAACMBasABspFgA8AA/eQCAAABA8ABsqvAAbLoAAAAAAAAAGADwAD+fgFKwAGysQEkwAGy6AcnqdUWwAGyxy6DxsAA/fcnqdYWwAGy1y6Ca6oxJ6nXFsABsuIugL2qMieDJgAAFKaCABSnpgAUqKoAFKmuABSqsgAUq5wAFKxcABSsmwAUrNsAFK0cABStZAAUrh8AFK59ABS0JgAUtJ4AFLUQAAAADwKqOXPAAbLtwAGy88ABs/MDqdgAAAFgAcAA/eQAAAUEqjtzwAGzDsABsxIJgL0AYAPAAP5+AASqPHPAAbMgwAGzKgmHZQBgA8AA/JcABKo9c8ABszrAAbNKCakbAGADnwAABKo+c8ABs1rAAbNkCakcAGADnwAABKo/c8ABs3LAAbN/Cai8AGADwAD8lwABBapBc8ABs4TAAbOKwAGz8QEAAAPAAbOTwAGz8QAAAAUFBcABs5kAAASAvWADwAD+fgDAAbOkAAAEh2VgA8AA/JcAwAGztQAABKkbYAOfAADAAbPSAAAEqRxgA58AAMABs+MAAASovGADwAD8lwAAYAOqOQE/BggBqjuAAMAUtgYIAao8gQDAFLYWCAGqPYIAwBS2JggBqj6DAMAUtjQIAao/hADAFLZCCQHAAbOKwAD9+gAAAAAAAAAUtpsAAAAAAqpCc8ABs/bAAbP8wAG0pgOp2QAAAWABwAD95AAAAwSqRHPAAbQgwAG0JAmAvQBgA8AA/n4ABKpFc8ABtDbAAbRBCZ7eAGADwABVTgAEqkZzwAG0T8ABtFkJh2UAYAPAAPyXAAEFqkhzwAG0XsABtGTAAbSkAQAAA8ABtHbAAbSkAAAAAwMDwAG0fAAABIC9YAPAAP5+AMABtIcAAASe3mADwABVTgDAAbSZAAAEh2VgA8AA/JcAAGADqkIBPwQIAapEgADAFLcrCAGqRYEAwBS3OwgBqkaCAMAUt0sJAcABtGTAAP36AAAAAAAAABS3kAAAAAACqklzwAG2NMABtjrAAbb2A6naAAABYAHAAP3kAAAEBKpLc8ABtl3AAbZkCSIAYAORmAAEqkxzwAG2csABtnwJh2UAYAPAAPyXAASqTXPAAbaKwAG2kAlhAGADwAD8lwAEqk5zwAG2nsABtqUJhGYAYAPAAP7/AAEFqlBzwAG2qsABtqrAAbb0AAAAA8ABtrrAAbb0AAAABAQEwAG2wAAABCJgA5GYAMABts4AAASHZWADwAD8lwDAAbbfAAAEYWADwAD8lwDAAbbsAAAEhGZgA8AA/v8AAGADqkkBPwUIAapLgADAFLgzCAGqTIEAwBS4QAgBqk2CAMAUuFAIAapOgwDAFLhfCQHAAbaqwAD9+gAAAAAAAAAUuK4AAAAAAAIGqXdzwAG0qcABtK3AAbXqAAGp2wAAAAEDwAG0vsABteoAAAABAQHAAbTHAAAAnt5gA8AAVU4AAGADwAD+/wE+A07AAbTgwAG06AAAXmADwABVTgGAwAG06sAUuOBEwAG0+T4CScABtQIlwAG1DoHAAbUGwBS4+2ADwABWXUrAAbUhARbAAbUwFMABtSjAFLj7AQFgA8AAVl2ArMAAVm8/PYnAAbU5wBS4+xbAAbVLgcABtUPAFLj7hFfAAFVSIRzAAbVmgcABtV7AFLj7SAEAASsAwAD98UrAAbVyASbAAbVyAR7AAbV5nWoEAAQnqdwkwAG1tAEWwAG1p4DAAbWbwBS44IWWwAD9+BbAAbXIgMABtbzAFLjgh2XAAFVUFsABteCAwAG11MAUuOCEZsAAVVMAYAPAAP7/Bql4c8ABte3AAbX0wAG2MQABqd0AAAABA8ABtf/AAbYxAAAAAQEBwAG2AAAAAIC9WwAAYAPAAP5+AUrAAbYJASbAAbYJASMlwAG2DoDAAbYJwBS6GWADwABU0BbAAbYmFMABtiHAFLoZAAFgA8AAVNCAvcAAVK2AwAG2LcAUuhkBW2ADwAD+fgFzABS6egATnu8AFKDPABSjaAAUtVUAFLakABS3mQAUuLcAAAAGABS4uQAUufIAFLp6AAAAAgACBKpRqd50AAAdgPgAAMAAuEcAAQEBA4EaAADAAMWHAAEBAQSBPAAAwADUPQABAQGH74FmAACCLgABAQ2FrYaHhNeCBoZ8hXuFYoaJhHuEqIVLhqyEVIKVAACb5QABAQKH45sygvcAAJyYAAEBAYfkgzAAAIujAACDYAAAwABSoAABAQGp34OgAACnvwABAQGeRoPjAADAAFJ1AAEBAajQhAkAAMAAUoIAAQEBqNGELwAAjGQAAQEYgimH9ojViNmP2o/ej+KQaIfliQKH/Irni1aLW4tfi2SMJIwpjSKNJ40sjiWQ8ZIoh44AAKxzAAEBAangh9kAAKh2AAEBDJ6FpBWemqhEqEWo1J6cnp6en6iHnp2eoIkoAACgFgABAQGVOYliAACiVgABAQGg6YmaAADAAFLKAAEBAanhieUAAMAAUu8AAQEBqeKKMQAAwABSSgABAQGogYp6AACgfAABAQKVPZ9yirkAAMAAUwAAAQEBqeOK/gAAr/gAAQEDoK+gs6C1i0QAAJ1mAAEBAZUmi3UAAJIOAAEBBoIUlWKVXpVwghaVcowcAADAAFMNAAEBAankjEwAAMAAU4UAAQEBqeWMeAAAwABTiwABAQGp5oysAACpYAABAQGelozpAACpdQABAQGelwAAAAICqld0jSqNMMAAmUEDnpgAAAFgAaB/AAANBKpZdI2ejagJglMAYAOLpAAEqlp0je2N/AmVcwBgA8AA+tEABKpbdI4bjjsJpHsAXQPAAP1tAmADwAD+/10DwAD9OwFgA8AA/JcBMo45YAPAAP7/XQPAAP07AWADwAD8lwAEqlx0jlaOZhikSgBgA8AAUPwBKwSqXXSOpo6vGId8AGADm/EBKwSqXnSOvY7GGId4AGADnJkBKwSqX3SPII8uGKF3AGADiOkBKwSqYHSPO49LGKF7AGADiOkBKwSqYXSPWI9mGKF5AGADiOkBKwSqYnSPhY+YGKELAGADrkMBKwSqY3SPrY+8GKnnAGADwABSpAErBKpkdI/Xj+wYqegAYAPAAFLLASsEqmV0kAeQHBip6QBgA8AAUvABKwEFqpt0kCGQIZB/AAAAA5AtkH8AAAADAwOQMwAABIJTYAOLpACQRAAABJVzYAPAAPrRAJBiAAAAgklgA6AZAABgA6pXAT8DCAGqWYAAwBS97QgBqlqBAMAUvfkJAJByoKIBAAGCkHjAFL4HADIGqmd0kISQopDeAQCfSAAAAAEDkLmQ3gAAAAAAAABdA5GvAV4DAAUFBWADwAD8l2ADwAD8l2ADwAD9rmADwAD9rmADwAD9rgABVwOMZgBgA5GYAUqQwgFqkMJdA5GvAWEDBWADwAD8l2ADwAD8l2ADwAD9rmADwAD9rmADwAD9rmADkZjAAIH/BqpodJDjkOyRAgEAn0kAAAABA5D7kQIAAAAAAAAAYAPAAPrRAUqQ/gEpBqprdJEHkRWf6wAAlW8AAAABA5Edn+sAAgACAQGRMwAAAIRIYAOpeQABkUgAAACp6mADwAD60QFqkV9gA8AA+tEAXQPAALloAWADnwABPg9OAAAAAYHKXQPAALiuAWADnwABH5FtwAC4uwABYAOfAAAATgAAAACBy10DwAC5ZAFgA58AAE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBOAAAAAIhOWwBPkRUAAAAAgdJbAAORHZ/rBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4LTpF3kXsAAICsYAPAAP7/ARaRhYCRfcAUvxCEZqmETpHGkcwAAIQ5XQPAAP07AWADwAD8lwEckdkWkc4upHuqW0sBAAEUkdrAFL/wDwAAwAD9gUmR5RyR7xSR6cAUwA4QAEgBAAErAMAA/WU+AkmSGRySKBaSIRSSHcAUv/APAIG8wAD/BUgBAAFqkitgA8AA/n7AAL+oAMAA/o0+A06SVpJeAAAiYAORmAEcknpqkmBdA5GvAWEDAWADwAD+/2ADkZjAAJVfiC8BAAEWkpCAkojAFL8QgKyppgCRsz0ckqaAkp7AFL8QqTkBAAEUkrzAFMCNEQAAqcM9FZLOwBTADhAcktYuqesCAAIWkv2AkvXAFL8QgKyppisAqmxJkxYhFpMfFJMbwBS/8A8AqezAAP8RPgI9i5M0wBS/ZiaTNAEekzudaAMAAxyTgGqTWF0Dka8BYQMBYAPAAP7/YAORmMAAV56ILwEAARSTjsAUv/APAACRsxyToJSBxgAAAADAAPy6FpO4gJOwwBS/EICsqaYAXQPAALlkAWADnwBCAABJk8sck9oWk9MUk8/AFL/wDwCBvMAA/wVIAQABapPyYAPAAP5+wADfNADAAP6NPgE9FZQSwBTADhAclBouqesCAAIWlEGAlDnAFL8QgKyppisAqmw/SZRbIRyUZRSUX8AUwA4QAEgBAAErAMAA/WU+BE6UgpSWAACp7WADwADjugEelJzAAOO+AQABHJSzFpSsFJSmwBTADhAAYcAA/WtkAQABlADAAP29AD0clNUUlMHAFMIBEQCDZAMAA5MWlOcUlOHAFMAOEABhwAD9axSU78AUwA4QAADAAP1gPRWU/8AUwA4QFJUHwBTCAREAPRyVLxaVJC6ke6pbgL8CAAIUlTDAFL/wDwAUlTfAFMAOEAAAwAD9gj8/SZVRHJVbFJVVwBTADhAASAEAASsAwAD9ZT4HTpXRAAAAqe5dA8AA/TsBYAPAAPyXAEs+Ak2V+gI1AAAAAABbAR6V+sAAuH4EAAQclh0clgsWlgAuglOqWYfdAQABFJYYwBS/8A8AAIumh94AAAAAi66FAMAUv4KGAMAUv4sUAMAUv7sLAAArPRWV78AUwsMRFADAFL/ODAAAAZY0YAOLsgGWUgAAAYNTYAOLsgAAPgNOlmeWbwAAImADkZgBHJaGapZxXQORrwFhAwJgA8AA/v9gA8AA/n5gA5GYh+GILwIAAhSWlMAUv/APABaWmxSWmcAUw0gSACKLtQCRsz0clrWAlq3AFL8QqTkBAAEUlsvAFMNYEwAAqcM9FZbdwBTCwxEcluguqesCAAIWlw+AlwfAFL8QgKypphSXFMAUw1gTAACqbE6XNpdKAACp7WADwADjugEel1DAAOO+AQABHJdqFpdjFJdawBTCwxEAYcAA/WtkAQABlADAAP29AD0cl4oUl3bAFMPtEgCDZAMAA5MWl58Ul5bAFMLDEQBhwAD9axSXp8AUwsMRAADAAP1gPRWXuMAUwA4QFJfAwBTD7RIAPRyX5haX2y6ke6pbgL8CAAIUl+fAFL/wDwAUl+7AFMAOEAAAwAD9gj0Xl/sun0ccmAUWl/sun0egi2QBAAEWmBEUmAjAFMLDEQBhwAD9awDAAP29oIs/TpgymDkAAIF2YAOSIgEemDuSFAQAARSYQMAUwA4QAAOVcxaYYC6Vc6palW0fmIyhbgMAAAOfhxaYyBaYwS6CSappn4eojZ+FFpkGFpj/LoJJqmmfhaiKn4YWmUQWmT0ugkmqaZ+GqIuVdDSZeAOZeJrZAAAAAgICmXkAAACAtWADkhgAmZEAAACB5WADnc8AAGADwAD9oQE+AT0cmliAmlDAFL8QhJAFAAIWmnMUmmvAFMVEEgCdM53RFpqCFJp6wBTFRBIAnTSd0gODYhaaoxSam8AUxUQSAINinqZhFpq7FJqzwBTFRBIAYZ69n1cpqalOmuaa7AAAkoVgA58AARaa9RSa7sAUxMERAJVqkiRJmwEhgZsGwBS/HT4ETpsvmzYAAINKXQPAAP07AWADwAD8lwEcmzguqe8BAAEUm0LAFMAOEAAAqm1Om1SbXgAAhHxgA8AA/v8BFptogJtgwBS/EICsqaZJm3MWm3+Am3fAFL8QnrPAAFVnPgROnSydPAAAqfBdA8AA/TsBYAPAAP5+AR6dTsAA/UEBAWADwAD+fgEWnWoUnWDAFMYKFACDHcAA/w0APRydkRSdgcAUxj0VAFYBAAEWnbIWnaUWnZ2AnZXAFL8QhGaphIMdwAD/DYHqwAD9IADAAP1MPRyd0BSdwcAUxj0VAIC/AgACkySd8wIcnegUndnAFMY9FQBLAQABkwDAAP1KJ6nxAMAA/Us9FZ39wBTGChQcnhMUngnAFMYKFACIZgEAAAGDHRSeKcAUxj0VAMAA/yg/PRyeUBaeSS6CSappnosEAAQUnnDAFMYKFAAWnoOAnnvAFL8QhGaphBaekxSejMAUxMERAIcekiUUnp/AFMXeEwAAoC4/PRyeuoCessAUvxCpPgAAAACpyUOe2CWe5RSe38AUxbMSAGADoas+Akme/CGBnwHAFL8dPgJOny2fMwAAgcdgA6GrASafLQEUnzXAFMWzEgBgA6GrPRyfTICfRMAUvxCergQABBafXRSfV8AUx4cTAIJhoa8en2/AAFo4AQABFJ9+wBTFsxIAAB6fksAAWj8BAAEUn6HAFMWzEgAAFJ+pwBS/8A8AAKnKPz0Vn73AFMWzEhafyxSfxcAUxbMSAIO1nxs9i5/bwBS/ZhSf4sAUxbMSAEIAAD0eAMAAuIECAAKCAMAUv0SDAMAUv2YASp/rAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIIAwBS/RIHdAgACFADAFMhHDwAUAMAUyFAQAADAALmRPYwAwBS/eR4AwAC4ggEAARQAwBS/uwsAAD2NAMAUv4IeAMAAuHwBAAEUAMAUv7sLAAA9jgDAFL+LHgDAALh9AQABFADAFL+7CwAAPRyRHYIAwBS/RGoBAAEUAMAUv7sLAAAASgABFgCCAMAUv0SB3sAAuY0Gqmx0n/Cf+qH4AACp6wAAAAEDoBih+AAAAAICAqAdAAAAgKxgA8AA/v8AoCoAAAAiYAORmAAAXQPAAP07AWADwAD8lwE+AUegOSSgRwGAoEPAFMkOBQGgVmqgVmADwAD+fsAAv4MAPgFKoGsBHKB3aqByYAPAAMnsgYmVegEAAWqgfmADwAD+fsAA4GYAwADH9QGgomqgomADwAD+fsAAv30APgFKoLgBHKDEaqC/YAPAAMnsgYmVegEAAWqgy2ADwAD+fsAA4GkAwADH9QGg8Gqg8GADwAD+fsAAv4AAPgFKoQsBHKEXaqESYAPAAMnsgYmVegEAAWqhHmADwAD+fsAA4GwAwADH9QGhSGqhSGADwAD+fsAAv3oAPgFKoWIBHKFuaqFpYAPAAMnsgYmVegEAAWqhdWADwAD+fsAA4G8AwADH9QABPgFKoakBHKG1aqGwYAPAAMnsgYmVegEAASMcocSBobzAFMkcSAEAASsAwAD98ScAJKHtAyep9hah4YGh2cAUyRwikZsnmggBYAPAAP5+AMAAx/UGqm10of2iB6MVAACp7wAAAAEDohCjFQAAAAEBAaIbAAAAhDldA8AA/TsBYAPAAPyXAABdA8AA/TsBYAPAAPyXAT4CSaJjJaJtgKJnwBTKqWADwADjuj4BSqKDAR6ijsAA48ADAAMWoq4UoqjAFMqpAAFgA8AA47qCj8AA438WorwUorbAFMqpAAFgA8AA47qp98AA430cotgWotEUosvAFMqpAAFgA8AA47phwAD9a4GNAQABlADAAP2+AD9KougBHKL1gKLvwBTKqYFYAgACkxyjDRajBoCjAMAUyqlhwAD9a4GNAQABlADAAP2+AMAA/V4Gqm50oxqjJ6QaAACfYAAAAAEDozOkGgACAAEBAaNJAAAIhEhgA6l5AABdA8AAuWgBYAPAAP2hAT4OTgAAAAGByl0DwAC4rgFgA8AA/aEBH6NYwAC4uwABYAPAAP2hAABOAAAAAIHLXQPAALlkAWADwAD9oQBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsAT6MnAAAAAIHSWwADozOkGgQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+BU2jbQI1AAAAAABbAR6jbcAAuH4EAAQco3MulW8BAAGAo3zAFMucAKprhADAFMv+hQDAFMwHFADAFMwuCQAAK06jZKNrAACVamADnwABFADAFMxBCgBJo4oco5UUo47AFMyiDQBIAQABKwDAAP3xPgI9iqOewBTL4CtCAAA/TqO5o8IAAKn4YAPAAFOZAR+jyMAAVBIBAAGAo9fAFMucAD0cpAUfo+nAAFMMAQABFKP7wBTM4A4AAKn5AQABFKQPwBTMog0AAMAAWMU9HgDAALiBAgACgQDAFMu6ggDAFMvgAEqkGgADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACBAMAUy7qB3QIAAhQAwBTNTA0AFADAFM1VDgAAwAC5kT2LAMAUy/UeAMAAuIIBAAEUAMAUzC4JAAA9jADAFMv+HgDAALh8AQABFADAFMwuCQAAPY0AwBTMBx4AwAC4fQEAARQAwBTMLgkAAD0cozOBAMAUy7pqAQABFADAFMwuCQAAAEoAARYAgQDAFMu6gd7AALmNBqpvdKQfpCynuwAAn10AAAABA6Q1p7sAAgABAQGkRQAACIRIYAPAAFZdAABdA8AAuWgBYAPAAP2hAT4OTgAAAAGByl0DwAC4rgFgA8AA/aEBH6RUwAC4uwABYAPAAP2hAABOAAAAAIHLXQPAALlkAWADwAD9oQBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsAT6QsAAAAAIHSWwADpDWnuwQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+AUmkWiWkZoCkXsAUzhNgA6l5PgdNpVwCNQAAAAAAWwEepVzAALh+BAAEHKViLpVvAgABFKVrwBTOEwABYAOpeQGp6imqa4QAwBTOd4UAwBTOgBQAwBTOpwkAACtOpVOlWgAAlWpgA58AARQAwBTOugoASaWYHKWjFKWcwBTPNw0ASAEAASsAwAD98T4CPYqlrMAUzlkrQgAAP06lx6XQAACp+GADwABTDgEcpdIuqfoBAAEUpeXAFM4TAAFgA6l5AKpxTqYApgcAAKGUYAPAAFOGAR+mDcAAU4oBAAEUphjAFM91DgAAPRymMBSmKcAUz54PAKn5AQABFKY6wBTPNw0AAMAAWMVGpkkApmMAAACaJWADqXkAFqZzFKZrwBTOEwABYAOpeYSGqX9BPgRJpoQhHKabFqaNFKaIwBTP5RAAqSvAAFZkSAEAARSmnsAUzhMAAWADqXkAwAD98T4BQqb3AT9NpyICNQAAAAAAWwEepyLAALh+BAAEHKcoLpVvAQABFKcxwBTP5RAAAKprhADAFM53hQDAFM6AFADAFM6nCQAAK06nGacgAACVamADnwABFADAFM66CgBJp0AhHKdLFKdEwBTQgBEASAEAASsAwAD98T4CPRenaRSnYMAUz3UOAICsFqd0FKdvwBTP5RAAhGaphMAAUx49HKeOFKeHwBTPng8AqfkBAAEUp5jAFNCAEQAAwABYxT8/PR4AwAC4gQIAAoEAwBTOM4IAwBTOWQBKp7sAAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAgQDAFM4zgd0CAAIUAMAU0RYNABQAwBTRHw4AAMAAuZE9iwDAFM5uHgDAALiCAQABFADAFM6nCQAAPYwAwBTOdx4AwAC4fAEAARQAwBTOpwkAAD2NAMAUzoAeAMAAuH0BAAEUAMAUzqcJAAA9HKQ1gQDAFM4zagEAARQAwBTOpwkAAABKAAEWAIEAwBTOM4HewAC5jQaqcHSoAagUrMgAAKR5AAAAAQOoI6zIAAIABAQEqEAAAACESGADqXkAqFYAAACFCmADwAD+fgCocQAAAKisYAPAAPrRAKibAAAAmrtgA4SuAABdA8AAuWgBYAOE2QE+Dk4AAAABgcpdA8AAuK4BYAOE2QEfqK3AALi7AAFgA4TZAABOAAAAAIHLXQPAALlkAWADhNkATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE+oFAAAAACB0lsAA6gjrMgEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgpNqMECNQAAAAAAWwEeqMHAALh+BAAEHKjHLpVvAgABgKjQwBTR3QGp6iqqa4cAwBTSXxQAwBTSaAgAFADAFNKPDAAAK06ouai/AACShWADnwABFADAFNKiDQBJqPwcqQYUqQDAFNMIEABIAQABKwDAAP3xPgI9jakPwBTSQytCAAA/TqktqToAAKn7YAPAAFMOARypPC6p+gEAAYCpT8AU0d0AqnFOqWapbQAAhFdgA8AAVU4BgKlvwBTR3UmpfCEcqY+BqYDAFNHpSAEAASsAwAD+jT4CTqmoqawAAJn6YAPAAFVOARypxxapuxSprsAU00YRAIcMwABTHZcoAwADganOwBTR6Ryp3pSBxgAAAADAAPy6KwCpCUmp7yWp9xSp88AU05oTAGADwABU7j4CPRWqEsAU02kSFKobwBTTmhMBYAPAAFTuPTWqKAAAAQBgA8AAUw4BFKoowBTTRhEANQAAAAEAWwEXqkEUqj/AFNQNFACp/BSqVsAU05oTAWADwABU7sAAUyM1AAAAAQBbAReqZhSqZMAU1A0UAIcMHKp+Fqp4FKp0wBTTmhMBYAPAAFTunwavjKiYAgACHKq1FqqpFKqcwBTTRhEAhwzAAFMdqJ0BAAEWqssUqsfAFNOaEwFgA8AAVO6ircAAVPAAqQUkqw0CJ6n9gar+wBTR6QCpAsAAUx0UAMAU1A0UAD8/TqszqzsAAIQmYAPAAFX5ATWrQQAAAQBgA8AAVfkBH6tBwABWEAwADCuTKyep/israquQYAOEUoTcgKuYwBTR3ZOTHKunlIHGAAAAAMAA/Locq6uUgcYAAAAAwAD8ugA1AAAAAQBbARertxSrtcAU1OUTAIRXFKvAwBTTaRIAwABWoxQAwBTU5RMATqvYq+EAAKn4YAOiXwEmq9gBHKvwFKvjwBTTRhEAqf8DAAIUrAjAFNTVEwAWrB4UrBHAFNNGEQCHDMAAUx0BoO2CrFDAFNH3wABTY2ADol89jaxtwBTSQxysfRSsdMAU1V8UAKGTAwADH6ygwABZmwEAARSsp8AU1V8UAAAUrLLAFNMIEACDrLnAFNIFAKK1QgAAPR4AwAC4gQIAAoQAwBTSIYUAwBTSQwBKrMgAAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAhADAFNIhgd0CAAIUAMAU1hEQABQAwBTWGhEAAMAAuZE9jgDAFNJWHgDAALiCAQABFADAFNKPDAAAPY8AwBTSXx4AwAC4fAEAARQAwBTSjwwAAD0VAMAU0mgIHgDAALh9AQABFADAFNKPDAAAPRyoI4QAwBTSIWoBAAEUAMAU0o8MAAAASgABFgCEAMAU0iGB3sAAuY0Gqml0rM2s3qz0AQCCSQAAAAEDrOWs9AAAAAAAAABgA6AZAUqs6AEmrOgBGKzugkmghGADoBkGqnF0rPmtBq2MAACp+gAAAAEDrRitjAAAAAEBAa0uAAAAhEhgA6l5AABgA8AAUw4BPgFKrT0BH61IwABThAQABICtVcAU1w8WrV4uh3yqXRataS6HeKpeFq10LqELqmIABqpydK2RrZaxaQAAnroAAAABA62isWkAAAAAAAAAXAE+CU6tta27AACEhl0DwAD9OwFgA8AA/v8BMa3CYAPAAP7/AE6t5a3vAACG6l0DwAD9OwFgA6l5ATGuB2ADqXkAPRyuGBauDy6esaCBg/0BAAE0riADriCu6gAAAAICAq4lAAAAgKxgA8AA/v8ArjkAAACESGADwABWXQAAYAPAAP2hAT4BSa5KHK5dFq5Wg65OwBTX4JVLwABWbEgBAAEuAMAA/fE+AUmucBaufIOudMAU1+CfW8AAVmo+AT0crpaArpDAFNd2VgEAAYKumsAU19IAwAD9TD4BPRyuxYGuu8AU15dWAQABJq7JAYOuycAU1+BgA6l5AMAA/Uw/AMAA/YxOrvqvBAAAqSVdA8AA/i8BYAPAAP7/AR6vCsAAwaYAAWADwAD+/wAARq8ar0qvNAAAAIRIYAOpeQCBrz/AFNeXPgE9HK9ag69SwBTYoqkoAQABgq9nwBTYdgCpu0avfa+Ur4YAAACArGADwAD+/wCAr43AFNd2PgFJr5wcr6qCr6DAFNh2gxwBAAGDr7PAFNjWAMAA/js+AT0cr8wWr8MunrGggYReAQABg6/TwBTY1gDAAP2KPgNOsAWwCgAAmiVgA6l5ASawBQEcsBQWsAwunrGggUsBAAGDsBXAFNjWAMAA/YFgA6l5PRywKISwI8AU2S2ergQABGqwM2ADkaPAAHqvk5QWsFGEsEzAFNkthGaphACpyj0csGiEsGPAFNktqSQCAAIrKwCpuj0csJsWsJQuiBOgjohHAQABJ6oAAJ18PRywwhawuS6esaCBg/0BAAE0sMoDsMqxPwAAAAICArDPAAAAgKxgA8AA/v8AsOMAAACESGADwABWXQAAYAPAAP2hAT4BSbD0HLEHFrEAhLD4wBTZ5JVLwABWbEgBAAEuAMAA/fE+AT0csSKEsRrAFNnkqZ0AAAAAwABWhT8AwAD9jD0csU0WsUYuiBOgjohHAQABJ6oBAJ18BqpzdLFusXO47QAAnrsAAAABA7GHuO0AAAAAAAAAXAE+Ck6xpLGuAACpJl0DwAD+LwFgA8AAVl0BHrG0wADBpgABYAPAAFZdAABOseOx7QAAqgJdA8AA/i8BYAPAAFZdAR6x88AAwaYAAWADwABWXQAAPRyyFxayDi6esaCBg/0BAAE0sh8Dsh+zkwAAAAICArIkAAAAgKxgA8AA/v8AsjgAAACESGADwABWXQAAYAPAAP2hAT4CSbJJHLJcFrJVg7JNwBTa75VLwABWbEgBAAEuAMAA/fE+Ak6yhLKSAACqA2ADqXkBJrKEAYOylMAU2u9gA6l5PRyys4SypcAU2yqpMQAAAACpvT9JstcWsu0WsuODstvAFNrvqSbAAFZjg7fAAP0ePgI9HLMNgbMDwBTam1YBAAGDsxHAFNrvAMAA/jxGsyOzTrMvAAAAqSdgA8AAUnYAFrNDg7M7wBTa76kmwABWYz4BPRyzZICzWsAU2nNWAQABFrNxhLNowBTbmKknwABSeADAAP48PwDAAP2MTrO0s7kAAKoEXQPAAP4vAWADqXkBHrO/wADBpgABYAOpeQAARrPgtAuz9AAAAKmFYAPAAFZdAIG0AMAU2ps+Akm0Exy0IYC0F8AU2nODHAEAAYO0KsAU3AsAwAD+Oz4BPRy0RIK0P8AU2+NWAQABJrRIAYO0SMAU3AtgA6l5AMAA/jw/RrRhtIu0bQAAAISwYAPAAFJ2ABa0gIO0d8AU3AupJsAAVmM+AT0ctKoWtJ6DtJXAFNwLnt/AAFZgg/0BAAEWtLmEtLLAFNxrqTLAAFJ/AKkSTrTjtO4AAKoFYAPAAPrRASpEtPs+Aj2LtQbAFNy4Kka1ILVMtToAAACphWADqXkAgrVGwBTb4z4BRrVWtYC1YgAAAISwYAPAAFJ2ABa1dYS1bMAU3NupJsAAVmM+AT0ctaEWtZWEtYzAFNzbnt/AAFZgg/0BAAE0takDtam2PAAAAAICArWxAAAAgL1gA8AA/n4Atb8AAACCamADwABVTgAAYAPAAP2hAT4BSbXVHLXghbXZwBTc9akyAgAChrXxwBTdPIe198AU3UoAwABSfz4BPYu2EMAU3LgpPwCpEoO2XsAU3Lg9HLZ4FrZvLp6xoIGD/QEAATS2gAO2gLc2AAAAAgICtoUAAACArGADwAD+/wC2mQAAAIRIYAPAAFZdAABgA8AA/aEBPgFJtqoctr0WtraFtq7AFN3KlUvAAFZsSAEAAS4AwAD98T4CTrbltvMAAKoDYAOpeQEmtuUBhbb1wBTdymADqXk9HLcUhrcGwBTeBaR1AAAAAKm+PwDAAP2MRrc9t2i3UQAAAKoGYAPAAFZdAIG3XcAU2ps+AT0cuJMWuImEuIDAFN4/qSbAAFZjgkYAAAAAwAD9VD0cuK0WuKYuiBOgjohHAQABJ6oHAJ18Bqp0dLjyuPe7zAAAqggAAAABA7kIu8wAAAAAAAAAXAE+AT0cuVwWuVMunrGggYP9AQABNLlkA7lku8cAAAACAgK5aQAAAICsYAPAAP7/ALl2AAAAgmdbAABgA8AA/aEBPgdOuZa5ngAAhEhgA6l5ASa5lgGBuaDAFN7aYAOpeU65trm+AACElF0DwAD+LwFgA8AAVU4BHrnEwADBpgABYAPAAFVOAABOuey59QAAXF0DwAD9NAFgA8AAVU4BFrn/grn3wBTe7lzAAFZwQ7oPHLofhLoWwBTfM10AAAAAwAD9Nj4BPRy6PYO6NcAU3wtWAQABFrpKhLpBwBTfM17AAP04AMAA/jxOum+6dwAAqOZdA8AA/TsBYAPAAP5+ATG6gWADwAD+fgA9HLqfFrqTgrqLwBTe7p7fwABWYIP9AQABNLqnA7qnu28AAAACAgK6rwAAAIC9YAPAAP5+ALq9AAAAgmpgA8AAVU4AAGADwAD9oQE+AUO6zyEcut2HutbAFN/oSAEAASsAwAD98T4CSbryIRy6/4O698AU3wuDHAEAAYe7CMAU3+gAwAD+Oz4BPRy7J4W7H8AU35NWAQABhrsrwBTf2gDAAP1MPz2Pu0jAFN/oFrtYh7tRwBTf6IO1wABVUACpEkm7eBa7hIW7fMAU35ODt8AA/R4+AT0eu5rAAPZ6AQABJLu3A4C7osAU3swnqgmFu6/AFN+TAD8AwAD9jAaqdXS70bvWvQUAAJ68AAAAAQO74r0FAAAAAAAAAFwBPgNOu++7+QAAqTZgA8AA/JcBkz0cvAsWvAIunrGggYP9AQABNLwTA7wTvNEAAAACAgK8GAAAAICsYAPAAP7/ALwsAAAAhEhgA8AAVl0AAGADwAD9oQE+AUm8PRy8UBa8SYK8QcAU4Q6VS8AAVmxIAQABLgDAAP3xPgJOvHi8hgAAqgNgA6l5ASa8eAGCvIjAFOEOYAOpeT2IvJnAFODRHLyjgLyZwBTg0WQBAAEcvLSDvKbAFOFJnrwAAAAAqcAAwAD9vT8AwAD9jD0cvN8WvNguiBOgjohHAQABJL0AAyeld4C88MAU4NEnqgoAnXwGqnZ0vQq9D75yAACewQAAAAEDvSq+cgAAAAAAAABcAT4DTr03vUMAAKoLYAPAAPyXAZM9HL1VFr1MLp6xoIGD/QEAATS9XQO9Xb4sAAAAAgICvWIAAACArGADwAD+/wC9dgAAAIRIYAPAAFZdAABgA8AA/aEBPgFJvYccvZoWvZOCvYvAFOIdlUvAAFZsSAEAAS4AwAD98T4CTr3CvdAAAKoDYAOpeQEmvcIBgr3SwBTiHWADqXk9iL3jwBTh4By974C948AU4eBkAQABHL4Ag73ywBTiWJ7BAAAAAKn7AMAA/b0/AMAA/Yw9HL46Fr4zLogToI6IRwEAASS+bQMnqgyAvkzAFOHgJ6oNAJ18Bqp3dL53vny/kAAAntYAAAABA76Wv5AAAAAAAAAAXAE+A06+o76pAACA7mADwAD8lwGTPRy+uxa+si6esaCBg/0BAAE0vsMDvsO/TwAAAAICAr7IAAAAgKxgA8AA/v8AvtwAAACESGADwABWXQAAYAPAAP2hAT4BSb7tHL8AFr75gr7xwBTjLJVLwABWbEgBAAEuAMAA/fE+AT2IvxPAFOLvHL8ZgL8TwBTi72QBAAEcvySCvxzAFOMsntYAAAAAwABWegDAAP29PwDAAP2MPRy/XRa/Vi6IE6COiEcBAAEkv4sCJ6oOgL+FwBTi7wCdfAaqeHS/lb+awABAqQAAntcAAAABA7+2wABAqQAAAAAAAABcAT4DTr/Dv8kAAIDuYAPAAPyXAZM9HL/bFr/SLp6xoIGD/QEAATS/4wO/48AAQGUAAAACAgK/6AAAAICsYAPAAP7/AL/8AAAAhEhgA8AAVl0AAGADwAD9oQE+AUnAAEANHMAAQCAWwABAGYLAAEARwBTkI5VLwABWbEgBAAEuAMAA/fE+AT2IwABAM8AU4+QcwABAOYDAAEAzwBTj5GQBAAEcwABARILAAEA8wBTkI6mNAAAAAMAAVnsAwAD9vT8AwAD9jD0cwABAcxbAAEBsLogToI6IRwEAASTAAECkAyeqD4DAAECTwBTj5CeqEACdfAaqeXTAAECuwABAs8AAQbMAAJ7EAAAAAQPAAEDGwABBswAAAAAAAABcAT4DTsAAQNPAAEDZAACA7mADwAD8lwGTPRzAAEDrFsAAQOIunrGggYP9AQABNMAAQPMDwABA88AAQXwAAAACAgLAAED4AAAAgKxgA8AA/v8AwABBDAAAAIRIYAPAAFZdAABgA8AA/aEBPgFJwABBHRzAAEEwFsAAQSmCwABBIcAU5UuVS8AAVmxIAQABLgDAAP3xPgE9iMAAQUPAFOT+HMAAQUmAwABBQ8AU5P5kAQABHMAAQVSCwABBTMAU5UuexAEAASsAwABVdQDAAP29PwDAAP2MPRzAAEGKFsAAQYMuiBOgjohHAQABJMAAQa4DJ6V3gMAAQZvAFOT+J6oRAJ18Bqp6dMAAQbjAAEG9wABDAAAAnsAAAAABA8AAQdDAAEMAAAAAAgICwABB3gAAAIPFYAPAAFTuAMAAQfIAAACepWADwABXNwAAXAE+A07AAEIJwABCDwAAgO5gA8AA/JcBkz0cwABCIRbAAEIYLp6xoIGD/QEAATTAAEIpA8AAQinAAELBAAAAAgICwABCLgAAAICsYAPAAP7/AMAAQkIAAACESGADwABWXQAAYAPAAP2hAT4BScAAQlMcwABCZhbAAEJfhMAAQlfAFOaWlUvAAFZsSAEAAS4AwAD98T4BPYrAAEJ5wBTmSRzAAEJ/gsAAQnnAFOZJZAEAARzAAEKKhMAAQoLAFOaWnsACAAKAwABCnsAU5iOBwABCpsAU5jMAwABWfwDAAP29PwDAAP2MPRzAAELPFsAAQsguiBOgjohHAQABJMAAQvsDJ6V3gsAAQuDAFOZJJ6oSAJ18Bqp7dMAAQwXAAEMKwABEmQAAnr0AAAABA8AAQx3AAESZAAAAAwMDwABDKgAAAJ6lYAPAAFc3AMAAQ0MAAACFAmADwABXNwDAAENiAAAAmv9gA8AAVO4AAFwBPgNOwABDecAAQ38AAIDuYAPAAPyXAZM9HMAAQ5EWwABDiC6esaCBg/0BAAE0wABDmQPAAEOZwABETgAAAAICAsAAQ54AAACArGADwAD+/wDAAEOyAAAAhEhgA8AAVl0AAGADwAD9oQE+AUnAAEPDHMAAQ9YWwABDz4XAAEPHwBToApVLwABWbEgBAAEuAMAA/fE+AT2LwABD6cAU57UcwABD74PAAEPpwBTntWQBAAEcwABEBoXAAEP+wBToAp69AwADgMAARBrAFOd/gcAARCfAFOePgsAARDPAFOefAMAAVoAAwAD9vT8AwAD9jD0cwABEXBbAAERVLogToI6IRwEAASTAAESUAyeqE4PAAER/wBTntSeqFACdfAaqfHTAAESewABEo8AARaEAAJ7YAAAAAQPAAES2wABFoQAAAAAAAABcAT4DTsAARMPAAETJAACA7mADwAD8lwGTPRzAAETbFsAARNIunrGggYP9AQABNMAAROMDwABE48AARWgAAAACAgLAAEToAAAAgKxgA8AA/v8AwABE/AAAAIRIYAPAAFZdAABgA8AA/aEBPgFJwABFDRzAAEUgFsAARRmCwABFEcAU6UeVS8AAVmxIAQABLgDAAP3xPgE9iMAARTPAFOj6HMAARTmAwABFM8AU6PpkAQABHMAARUSCwABFPMAU6Uee2AAAAADAAFZ8AMAA/b0/AMAA/Yw9HMAARXYWwABFby6IE6COiEcBAAEkwABFnAMnqhWAwABFh8AU6PonqhYAnXwGqn10wABFpsAARavAAEamAACe2QAAAAEDwABFvcAARqYAAAAAAAAAXAE+A07AAEXKwABF0AAAgO5gA8AA/JcBkz0cwABF4hbAAEXZLp6xoIGD/QEAATTAAEXqA8AARerAAEZuAAAAAgICwABF7wAAAICsYAPAAP7/AMAARgMAAACESGADwABWXQAAYAPAAP2hAT4BScAARhQcwABGJxbAAEYggsAARhjAFOpxlUvAAFZsSAEAAS4AwAD98T4BPYjAAEY6wBTqJBzAAEZAgMAARjrAFOokZAEAARzAAEZLgsAARkPAFOpxntkAAAAAwABWfQDAAP29PwDAAP2MPRzAAEZ8FsAARnUuiBOgjohHAQABJMAARqEDJ6oVgMAARo3AFOokJ6oXAJ18Bqp+dMAARwLAAEcHwABJ4wAAqhgAAAABA8AARyDAAEnjAAAAAQEBwABHLgAAAJr/YAPAAFTuAABcAT4BScAAR0EiJcAAR1GAwABHRcAU60hgA6ljABzAAEeNFsAAR4YWwABHfhTAAEdywBTrSAABYAOpY4RIqWuVS6l8SAEAAS4AwAD98T4DScAAR54hHMAAR7gWwABHrhTAAEeiwBTrSAABYAOpY4ThwABU8UgBAAErAMAA/fE+Aj0XwABH1xTAAEfLwBTrSAABYAOpY4ThK8AAVPE9HMAAR/0UwABH8cAU60gAAWADqWOergMAA2rAAEgVYAORo8AAcQ8WwABINxTAAEgrwBTrSAABYAOpY4dlwABW2GrAAEhDYAPAAPyXFQCvkj9JwABIXCEcwABIdxbAAEhsFMAASGDAFOtIAAFgA6ljnrbAAFTySAEAASsAwAD9ZT4CPRzAAEiWFMAASIrAFOtIAAFgA6ljnq4DAANqwABIrmADkaPAAHE3FsAASNMUwABIx8AU60gAAWADqWOHZcAAVthqwABI32ADwAD8lxUAr5I9F8AASP4UwABI8sAU60gAAWADqWOetivAAFTyP0nAAEkfIRzAAEk7FsAASS8UwABJI8AU60gAAWADqWOE4qlnSAEAASsAwAD98T4CPRzAAElaFMAASU7AFOtIAAFgA6ljnq4DAANqwABJcmADkaPAAHFfFsAASZQUwABJiMAU60gAAWADqWOHZcAAVthqwABJoGADwAD8lxUAr5I9F8AASb8UwABJs8AU60gAAWADqWOE4iupZz8/Bqp/dMAASyHAAEs6wABWSQAAqhkAAAABA8AAS0/AAFZJAAAAAQEBwABLXQAAAJr/YAPAAFTuAABdA8AA/TsBYAOpYwE+DU7AAEvWwABL3wAApIRdA8AA/TsBYAOpYwExwABL9WADqWMARsAAS/3AAEwtwABMEQAAAIRIYAPAAFZdABbAAEwlFsAATBwunrGggSnAAP2QPgFJwABMNRzAAExIFsAATEGCwABMOcAU7fGVS8AAVmxIAQABLgDAAP3xPgJOwABMbcAATHUAAISUXQPAAP00AWADwABVTgEWwABMf4LAAEx3wBTt8VzAAFZwQ8AATJEcwABMoIPAAEyYwBTuQl0AAAAAwAD9Nj4CTsAATMDAAEzHAACCamADwABVTgEWwABM0YPAAEzJwBTuQl7AAP04ScAATOQlwABM74TAAEzowBTujmADqWM+AT0cwABNHYHAAE0UwBTtxlYBAAEUwABNIcAU7o4EAWADqWMAwAD9TD8/TsAATWXAAE14AACqGl0DwAD+LwFgA8AAVO4BHsAATX7AAMGmAAFgA8AAVO4AAEXAAE2XAcAATaDAAE2iAABiYAPAAPyXAZMBHMAATamDwABNp8AU7ypjAQABFsAATcJqwABNq10DwAD9OwFgA8AA/n7AAL9PYcAA/WsAwAD9xQGLwABNysAU7yocwABNy4PAAE3KwBTvKmQBAAGUAMAA/b0+AT0cwABN6oLAAE3XwBTu91YBAAEmwABOBQEcwABOBRbAAE3uLpxjoImeuQIAARzAAE4tasAAThddA8AA/TsBYAPAAP5+wAC/T0sBAAGDwABOLsAU7yoAwAD9SgGaTSnAAFaDYAPAAFTuAMAA/jxOwABOjsAATqkAAKobXQPAAP4vAWADqWMBHsAATrfAAMGmAAFgA6ljAABOwABO7wAAAKocXQPAAP07AWADqWMARMAATwU+Az2MwABPEMAU8DGBwABPI8AU7cY9icAATzPAFO3GMcAAT1JgA6ljAEXAAE9cAcAAT2XAAE9nAABiYAPAAPyXAZMBHMAAT26FwABPbMAU8HpjAQABFsAAT4GEwABPcMAU8DFhwAD9awDAAP3FAY3AAE+JwBTwehzAAE+KhcAAT4nAFPB6ZAEAAZQAwAD9vT4GTsAAT6vAAE+vAACZ+mADqWMBHMAAT8GEwABPscAU8DFLAQABhcAAT8LAFPB6AMAA/UpOwABP3MAAT+0AAKodXQPAAP07AWADwABVTgEcwABP/4bAAE/7wBTw3ajEAQABgMAAUBfAFO2mAKlxTsAAUDLAAFBJAACqHmADwAD60QEpQUXAAFBZAcAAUGLAAFBkAABiYAPAAPyXAZMBHMAAUGsUwABQacAU8WQJAGMBAAEWwABQfofAAFBtwBTxD2HAAP1rAMAA/cUBFcAAUIbAFPFkCRzAAFCHFMAAUIbAFPFkCQBkAQABlADAAP29PgJOwABQn8AAUKkAAIThYAPAAFVOARzAAFC7h8AAUKvAFPEPSwEAARTAAFC8wBTxZAkAAMAA/UpJwABQyiIiJcAAUNgUwABQzsAU8cwKAGADqWMAHMAAURgWwABRERbAAFEJFMAAUP/AFPHMCgFgA6ljhEipa5VLqXxIAQABLgDAAP3xACEcwABRTYPAAFEywBTwB4McAQABFMAAUVbAFPHMCgFgA6ljAMAA/js+Aj0VwABRcMAU8UkIKkLAAFGcAD9JwABRwSIUwABRxcAU8UkIAAAWwABR44bAAFHfwBTw3Z6zwABVZz4BPRXAAFH4wBTxSQgcwABSOoPAAFIfwBTwB4McAQABFsAAUkeGwABSQ8AU8N2ejsAAVQEAwAD+Oz9JwABSYhTAAFJmwBTxSQgAPgI9HMAAUqWDwABSisAU8AdWAQABhsAAUqnAFPDdAMAA/jw9HMAAUrkuqh8DAAOGwABSzsAU8N2HwABS08AU8Q+CwABS5cAU7vcAqoA+AT0cwABTHoHAAFMVwBTtxlYBAAGGwABTIsAU8N0AwAD9TCEcwABTXxbAAFNYhMAAU0fAFPAxYcAA/WtIAQABFsAAU2uBwABTYsAU7cZhwAD9awDAAP27TsAAU5HAAFOZAACEiF0DwAD9OwFgA6ljARzAAFO2g8AAU5vAFPAHgK0AAAAAwAD9D07AAFPdwABT7wAAqiBdA8AA/TsBYAOpYwGEwABT8cAU8DE9HMAAVMGGwABUr8AU89KArgAAAADAAP1ORcAAVM0BwABU1sAAVNgAAGJgA8AA/JcBkwEcwABU34fAAFTdwBT0EmMBAAEWwABU84bAAFThwBTz0mHAAP1rAMAA/cUBj8AAVPvAFPQSHMAAVPyHwABU+8AU9BJkAQABlADAAP29PgROwABVG8AAVR8AAJn6YAOpYwEcwABVMobAAFUhwBTz0ksBAAGHwABVM8AU9BIAwAD9Sj0cwABVRBbAAFU9LoJJqmmekQEAARTAAFVPwBT0dQgAAKAyPRzAAFVjhcAAVVvAFPOhVgEAARTAAFVnwBT0dQgAAMAA/Uw9HMAAVXcUwABVc8AU9HUIAJ6uAwADHMAAVapqwABVjV0Dka8BYQMBYAPAAP5+YAORmKRyiC8BAAEWwABVvBTAAFW4wBT0dQgAoaTAAFUEAJGzFsAAVd4UwABV2sAU9HUIAIdlwABW2GrAAFX0YAPAAPyXFQCvkj0cwABWERbAAFYKLogToI6IRwEAASeqIQCdfErAAFY3AYXAAFY+wBTzoQaqgHTAAFZOwABWU8AAXrgAAKofAAAAAQPAAFZnwABeuAAAAAMDA8AAVnsAAACZ+mADqWMAwABWlAAAAKodXQPAAP07AWADwABVTgDAAFa4AAAAqhpdA8AA/i8BYAPAAFTuAABcAT4DRcAAVxgBwABXIcAAVyMAAGJgA8AA/JcBkwEcwABXKoPAAFcowBT1+2MBAAEWwABXPYHAAFcswBT1wmHAAP1rAMAA/cUBi8AAV0XAFPX7HMAAV0aDwABXRcAU9ftkAQABlADAAP29PgJOwABXWsAAV2QAAIThYAPAAFVOARzAAFd2gcAAV2bAFPXCSwEAAYPAAFd3wBT1+wDAAP1KScAAV4ElwABXj4TAAFeFwBT2XmADwABVfz4BPRzAAFetgMAAV6nAFPW0nq4DAAMcwABXzmrAAFe4XQORrwFhAwFgA8AA/n5gA5GYtyqILwEAARbAAFfmFMAAV9zAFPZeBAFgA8AAVX+AvcAAV1EAkbMWwABX/YDAAFf5wBT1tIdlwABW2GrAAFgJYAPAAPyXFQCvkknAAFghIiEWwABYMhbAAFgqgMAAWCbAFPW0hEipa59ZwABWZQAcwABYboLAAFhbwBT12YMcAQABhMAAWHfAFPZeAMAA/js+AT0cwABYkYDAAFiNwBT1tJ6uAwADHMAAWNZqwABYqV0Dka8BYQMBYAPAAP5+YAORmLeDiC8BAAEWwABY7oTAAFjkwBT2XqGkwABVVwCRsxbAAFkSgMAAWQ7AFPW0h2XAAFbYasAAWSpgA8AA/JcVAK+SP07AAFmWwABZogABhOJgA8AAVzcBFsAAWaiAwABZpMAU9bSE4qlnScAAWbkhHMAAWcmDwABZvcAU9+BIAQABKwDAAP3xPgNOwABZ38AAWe4AAKoiYAPAAPrRASpJwABZ/SXAAFoNg8AAWgHAFPfgYAPAAFb3PgJOwABaMMAAWjgAAIQmYAPAAFdNARbAAFpGFMAAWjrAFPfgAwFgA8AAVvee3sAAVvtJwABaWyXAAFpnhcAAWl/AFPhWYAPAAFTuPgI9jMAAWoTAFPgmKUbAAFqlwABa5MAAWrIAAACZCGADwABVTgAWwABa3BbAAFrWFsAAWskUwABawcAU+FYFAWADwABU7oTkwABU9J8HqO4pwAD9kD4BScAAWvIiFsAAWwKGwABa9sAU+LSHkcAAVVoAIRbAAFsghsAAWxTAFPi0hJPAAFVrPgE9HMAAW0GAwABbPcAU9bSergQAAxzAAFucasAAW19dA5GvAWEDAWADwAD+fmADkZjAAET7iC8BAAEWwABbshTAAFuqwBT4VgUBYAPAAFTuoaTAAFUEAJGzFsAAW9yAwABb2MAU9bSHZcAAVthqwABb+mADwAD8lxUBglcxwABcH2ADkbYBHMAAXLscwABceWrAAFw1XQORrwFhAwFgA8AA/n5gA5GYwABFYIgvAQABFsAAXI8UwABch8AU+FYFAWADwABU7qGkwABVBACRs4JfAwADFsAAXNSGwABcyMAU+LSEZsAAVVMWwABdBYbAAFz5wBT4tIdlwABVVGrAAF0RYAPAAPyXFQCRn6+SPz8/ScAAXWMhhMAAXWjAFPgmPgE9HMAAXhqAwABeFsAU9bSergMAAxzAAF5HasAAXjJdA5GvAWEDAWADwAD+fmADkZjAAESWiC8BAAEWwABeYYPAAF5VwBT34KGkwABXPACRsxbAAF6FgMAAXoHAFPW0h2XAAFbYasAAXp1gA8AA/JcVAK+SPz8GqoF0wABevcAAXtbAAGt9AACevwAAAAEDwABe5MAAa30AAAABAQHAAF7yAAAAmv9gA8AAVO4AAF0DwAD9OwFgA6ljAT4FPRzAAF8FLqoYAQABgMAAXx/AFPrjAKp+TsAAX0rAAF9SAACEiF0DwAD9OwFgA6ljARzAAF9ULqoZAQABgMAAX2rAFPrjAKp/PRzAAGAeFsAAYBUunrGggYP9AQABNMAAYCYDwABgJsAAax8AAAACAgLAAGArAAAAgKxgA8AA/v8AwABgPwAAAIRIYAPAAFZdAABgA8AA/aEBPgFJwABgUCIlwABgXIPAAGBUwBT7g2ADqXkAHMAAYIYWwABgfxTAAGB3wBT7gwMBYAOpeZVLqXxIAQABLgDAAP3xPgJJwABgsxbAAGDHFsAAYL8UwABgt8AU+4MDAWADqXmo5qmCg7fAAP0ePgROwABg+QAAAKojXQPAAP1tAmADwAD+fl0DwAD9OwFgA8AAUnYATsAAYRfAAGEkAACqJGADwAD60QEqRsAAYTfAAGFewABhQwAAAISwYAPAAFJ2ABbAAGFVFMAAYU3AFPuDAwFgA6l5qOapgj4CTsAAYXPAAGF4AACAvWADwAD+fgE1AAAAAQBgA8AA/n4BNQAAAAEAYAPAAFZdARbAAGGBhsAAYXrAFPxMqYXAAFJ5IxzAAGGLhwDAFPyYSAEAASsAACsWwABhi4cAwBT8mIC9wABW6AFgA8AA/n4jHMAAYZCHAMAU/ItIAQABKwAAJwCHAMAU/IsBYAPAAP5+ScAAYaMhHMAAYayHwABhp8AU/HdIAQABJwAAwAD+jT4EPSMcwABh0YTAAGHDwBT8CkgBAAErAMAA/fGMwABhw8AU/AoewABh2cAA/XQAAmADwAD+fl0DwAD9OwFgA8AAUnYAACsBXQPAAP1tAmADwAD+fl0DwAD9OwFgA8AAUnZOwABiEcAAYhkAAKjmXQPAAP07AWADwABSdgE1AAAAAQBdA8AA/W0CYAPAAP5+XQPAAP07AWADwABSdgGEwABiG8AU/Ao1AAAAAQBgA8AA/n4Bh8AAYinAFPx3NQAAAAEAXQPAAP07AWADwABSdgEcwABiKBTAAGIowBT9oggASwEAARTAAGIowBT9zAkAAMAA/YEjHMAAYi8UAMAU/eIKAEgBAAErAMAA/WU1AAAAAQBdA8AA/TsBYAPAAFJ2ATHAAGI7YAPAAFJ2ADUAAAABAFwBHMAAYigUwABiKMAU/aIIAIC/AgACFMAAYijAFP3MCQAUAMAU/jILAADAAP2CFADAFP4yCwAUAMAU/eIKAAFdA8AA/TsBYAPAAFJ2PRzAAGJVFMAAYk3AFP2HCABWAQABhsAAYlnAFPxMAMAA/UxJwABicCEcwABiiBbAAGJ/HMAAYnsUwABidMAU/YcIAEsBAAGTAMAA/UqphcAAUnlIAQABFsAAYpKGwABii8AU/EyphcAAUnkAwAD98T2NwABinMAU/C8pPz9JwABi1YXAAGLZwBT8Lz4BRsAAYvUAwABjAQAAAIC9YAPAAP5+ABbAAGMXhMAAYwnAFPwKg2jAAP2PQT4FTsAAYzrAAGNCAACo5l0DwAD9OwFgA8AAUnYBHMAAY1GEwABjRMAU/ApLAQABhsAAY1LAFP83AMAA/YFJwABjZxzAAGN6FsAAY3OHwABja8AU/19hwAD9a2MBAAGVAMAA/cVCwABjfwA/TsAAY6zAAGO0AACCV10DwAD9OwFgA5G2ATHAAGPGYAORtgBGwABj2MAAY//AAGPkAAAAhLBgA8AAUnYAHMAAY/aHwABj7sAU/1+WWwEAAZQAwAD9Ez4BPRzAAGQZFMAAZBHAFP/ICABWAQABHMAAZIIcwABkWWrAAGQdXQORrwFhAwFgA8AA/n5gA5GYrDSILwEAAYbAAGRnwBT/NwCRs4JfAwADgsAAZI/AFPtzFsAAZJsUwABklMAU//MJAIdlwABSe2rAAGSnYAPAAPyXFQCRnwDAAP1MPRzAAGTZFMAAZNHAFPuDAwFgA6l5nq4FAAQcwABlF2rAAGT3XQORrwFhAwFgA8AA/n5gA5GYq9uILwEAAYbAAGUlwBT/NwCRsxbAAGVJHMAAZUWHwABlPsAU/19LAQABkwDAAP1Kh2XAAFJ7asAAZWdgA8AA/JcVgsAAZYPAFPtzAYJXFMAAZaPAFP/ICACpyj8/ScAAZfQWwABmCBbAAGYAFMAAZfjAFPuDAwFgA6l5maepgYO3wAD9Hj4ETsAAZjoAAACqJV0DwAD9bQJgA8AA/n5dA8AA/TsBYAPAAFKFAE7AAGZYAAAAqiZgA8AA+tEARsAAZnDAAGaXwABmfAAAAISvYAPAAFKFABbAAGaOFMAAZobAFPuDAwFgA6l5maepgT4CTsAAZqzAAGaxAACAvWADwAD+fgE1AAAAAQBgA8AA/n4BNQAAAAEAYAPAAFZdARbAAGa6hsAAZrPAFQGbh4TAAFKIIxzAAGbEhwDAFQHnSAEAASsAACsWwABmxIcAwBUB54C9wABW6AFgA8AA/n4jHMAAZsmHAMAVAdpIAQABKwAAJwCHAMAVAdoBYAPAAP5+ScAAZtwhHMAAZuWHwABm4MAVAcZIAQABJwAAwAD+jT4EPSMcwABnCoTAAGb8wBUBXUgBAAErAMAA/fGMwABm/MAVAV0ewABnEsAA/XQAAmADwAD+fl0DwAD9OwFgA8AAUoUAACsBXQPAAP1tAmADwAD+fl0DwAD9OwFgA8AAUoVOwABnSsAAZ1IAAJmnXQPAAP07AWADwABShQE1AAAAAQBdA8AA/W0CYAPAAP5+XQPAAP07AWADwABShQGEwABnVMAVAV01AAAAAQBgA8AA/n4Bh8AAZ2LAFQHGNQAAAAEAXQPAAP07AWADwABShQEcwABnYRTAAGdhwBUC8QgASwEAARTAAGdhwBUDGwkAAMAA/YEjHMAAZ2gUAMAVAzEKAEgBAAErAMAA/WU1AAAAAQBdA8AA/TsBYAPAAFKFATHAAGd0YAPAAFKFADUAAAABAFwBHMAAZ2EUwABnYcAVAvEIAIC/AgACFMAAZ2HAFQMbCQAUAMAVA4ELAADAAP2CFADAFQOBCwAUAMAVAzEKAAFdA8AA/TsBYAPAAFKFPRzAAGeOFMAAZ4bAFQLWCABWAQABhsAAZ5LAFQGbAMAA/UxJwABnqSEcwABnwRbAAGe4HMAAZ7QUwABnrcAVAtYIAEsBAAGTAMAA/UqHhMAAUohIAQABFsAAZ8uGwABnxMAVAZuHhMAAUogAwAD98T2NwABn1cAVAYIpPz9JwABoDiEcwABoH4XAAGgSwBUBgkgBAAErAMAA/fE+AUbAAGg2AMAAaEIAAACAvWADwAD+fgAWwABoWITAAGhKwBUBXYNowAD9j0E+BU7AAGh7wABogwAAmaddA8AA/TsBYAPAAFKFARzAAGiShMAAaIXAFQFdSwEAAYbAAGiTwBUElgDAAP2BScAAaKgcwABouxbAAGi0h8AAaKzAFQS+YcAA/WtjAQABlQDAAP3FQsAAaMAAP07AAGjtwABo9QAAglddA8AA/TsBYAORtgExwABpB2ADkbYARsAAaRnAAGlAwABpJQAAAISvYAPAAFKFABzAAGk3h8AAaS/AFQS+llsBAAGUAMAA/RM+AT0cwABpWhTAAGlSwBUFJwgAVgEAARzAAGnDHMAAaZpqwABpXl0Dka8BYQMBYAPAAP5+YAORmKzYiC8BAAGGwABpqMAVBJYAkbOCXwMAA4LAAGnQwBT7cxbAAGncFMAAadXAFQVSCQCHZcAAUo5qwABp6GADwAD8lxUAkZ8AwAD9TD0cwABqGhTAAGoSwBT7gwMBYAOpeZ6uBQAEHMAAalhqwABqOF0Dka8BYQMBYAPAAP5+YAORmKx/iC8BAAGGwABqZsAVBJYAkbMWwABqihzAAGqGh8AAan/AFQS+SwEAAZMAwAD9SodlwABSjmrAAGqoYAPAAPyXFYLAAGrEwBT7cwGCVxTAAGrkwBUFJwgAqco/Pz8AwAD9jD0cwABrLRbAAGsmLogToI6IRwEAASeqJwCdfErAAGtrAYHAAGtywBT7GwaqgnTAAGuCwABrh8AAbOoAAJVBAAAAAQPAAGuVwABs6gAAAAAAAABcAT4CPRzAAGunFsAAa54unrGggYP9AQABNMAAa68DwABrr8AAbMAAAAACAgLAAGu0AAAAgKxgA8AA/v8AwABryAAAAIRIYAPAAFZdAABgA8AA/aEBPgFJwABr2RzAAGvsFsAAa+WBwABr3cAVByaVS8AAVmxIAQABLgDAAP3xPgNOwABsFMAAbCIAAKoDYAOpeQEmwABsFAGBwABsJMAVByZgA6l5TsAAbD3AAGxEAACCSWADgosBHMAAbFSCwABsRsAVB2ui2wEAARbAAGxaLpxjoIkAqbhJwABscCEWwABsfYHAAGx1wBUHJp6zwABVZz4BPRzAAGycFsAAbJIuhuqgg1YBAAGDwABsoMAVB5AAwAD9TD8/AMAA/Yw9HMAAbM4WwABsxy6IE6COiEcBAAEnqigAnXwGqoN0wABs78AAbPnAAG/+AACqKQAAAAEDwABtDcAAb/4AAAAAAAAAYAOKgAE+BU7AAG0jwABtLQAAhupdA8AA/i8BYAOCiwEewABtM8AAwaYAAWADgosAAE7AAG1VwABtXgAApIRdA8AA/TsBYAOCiwExwABtaWADgosAPRzAAG16FsAAbXEunrGggYP9AQABNMAAbYIDwABtgsAAbqsAAAACAgLAAG2HAAAAgKxgA8AA/v8AwABtmwAAAIRIYAPAAFZdAABgA8AA/aEBPgFJwABtrCIhFsAAbbmDwABtscAVCNaes8AAVWcAIiIcwABt3hbAAG3Xg8AAbc/AFQjWlUvAAFZsSAEAAS4AwAD98QEcwABuChbAAG4DFsAAbf+DwABt98AVCNaArMAAVm+BvMAA/wVIAQABJ4eAAMAA/o0BHMAAbi2DwABuJcAVCNZIAQABFsAAbjUugx6gigDAAP3xPgFJwABuRxzAAG5VgMAAbkvAFQhRVgEAARbAAG5hg8AAblnAFQjWgknAAFZuAMAA/jw+AT0cwABuf4HAAG52wBUIe1YBAAEWwABui4PAAG6DwBUI1oJJwABWbgDAAP1MPz8AwAD9jEPAAG6yFsAAbsKBwABuucAVCHuDt8AA/R4+Ak7AAG7ewABu5gAAhEhgA4KLARzAAG7xgcAAbujAFQh7hiYAAAAAwAD9WkbAAG8FwABvQMAAbxwAAACEwWADgsIAFsAAbzKCwABvKsAVCgeAz4KcPgFJwABvShzAAG9YgMAAb07AFQhRVgEAARbAAG9ng8AAb1zAFQo5hLOCzQDAAP48PgE9HMAAb4yBwABvg8AVCHtWAQABFsAAb5uDwABvkMAVCjmEs4LNAMAA/Uw/SsAAb8cBNcAAb9IAAAEAYAOKgAEfwABv0oqYAAAAADUAAAABAFsBHMAAb+kWwABv34LAAG/dwBUKvYbqioSApQEAAYDAAG/wwBUIUQDAAP1NggDAFQq9BqqEdMAAcAPAAHAIwABzqAAAnscAAAABA8AAcBjAAHOoAAAAAAAAAFwBPgZOwABwPMAAcFIAAKoqXQPAAP07AWADqpwBMcAAcFRgA6qcAE7AAHB2wABwjAAAmzVeAwADAwNgA4MbYAOJl2ADiZcAAVcDm+cAXAE0wABwlgPAAHCWwABxPgAAAAMDA8AAcJ0AAACZ+mADgxsAwABwrAAAAIHXYAOJlwDAAHC5AAAAgk5gA4mXAABgA8AA/aEBPgFJwABwxCEcwABw3oDAAHDIwBULOkgBAAErAMAA/WU+AT0cwABxB4DAAHDxwBULOlYBAAEfwABxD6qiAwADgcAAcSTAFQuYgsAAcSnAFQumg8AAcSzAFQu0AADAAP1MP0nAAHFEHMAAcVIWwABxSC6HfKpdSAEAASsAwAD98T4BPRfAAHFjLod8HsAAcXOb8wIAARzAAHGCLqopAAAAAKqDAZs1gcAAcbvAFQtdql0+Az0XwABx8BbAAHHmLod8ql2bNYHAAHIIwBULXZv1TsAAci/AAHI5AACCWWADioABHMAAcjsuqikAAAAAqoM9HMAAcmMWwAByWS6HfKpdm0oDAAJqwABydF0DwAD9OwFgA4KLwADFoBbAAHKIgsAAcn7AFQyahuqKhAGbTYLAAHK8wBUMmpwHRsAActLAAHMNwABy7AAAAKorYAOqnACAwABy9sAVCzo+AT0cwABzFS6qLAMAAxbAAHM2gsAAcy/AFQ0LmfqqnhbAAHNCgsAAczvAFQ0LgdeqnxbAAHNMgsAAc0XAFQ0Lgk6qoACqhT2IwABzWsAVCzorPRzAAHODFsAAc3wuiBOgjohHAQABJ6otAJ18BqqFdMAAc63AAHOywAB0tQAAqiwAAAABA8AAc8vAAHS1AAAAAwMDwABz0gAAAJn6YAODGwDAAHPhAAAAgddgA4mXAMAAc+4AAACCTmADiZcAAFwBPgE9HMAAc/cunq4EAAQcwAB0J2rAAHQLXQORrwFhAwNgA8AA/n5gA4jpYAOI6WADkZiKdogvAwADFsAAdEaAwAB0QsAVDbaAvYMhFsAAdE6BwAB0TMAVDcSGrYmdFsAAdGGCwAB0X8AVDdKGrYmdAJGzFsAAdH+AwAB0e8AVDbaEWIJZasAAdJNgA8AA/JcVFsAAdKmAwAB0pcAVDbaEZoMpAKCZBqqGdMAAdLrAAHS/wAB0/wAAqi4AAAABA8AAdNjAAHT/AAAAAwMDwAB03wAAAJn6YAODGwDAAHTuAAAAgddgA4mXAMAAdPsAAACCTmADiZcAAFwBPgAGqod0wAB1BMAAdQnAAHbEAACexQAAAAEDwAB1GcAAdsQAAAABAQHAAHUkAAAAgllgA4qAAABcAT4FPRfAAHU1Lod4H8AAdUWdFQEAAYDAAHVPwBUPBQCqXj0XwAB1YC6hdx/AAHV1iTQCAAIWwAB1lhbAAHWMLod4ql6bFJzpMcAAda1gA4jpAWrAAHW0YAOJGISqAKpfPRfAAHXILqF7H8AAdd+JNAIAAhbAAHYAFsAAdfYuh3iqXpsRnPExwAB2GWADiOkBasAAdiBgA4kYhKoAqmA9F8AAdjQuoXkfwAB2SYk0AgACFsAAdmoWwAB2YC6HeKpemxOdBDHAAHaBYAOI6QFqwAB2iGADiRiEqgCqYT0cwAB2pBbAAHadLogToI6IRwEAASeqLwCdfAaqiHTAAHbJwAB2zsAAd+QAAJ7JAAAAAQPAAHbdwAB35AAAAAEBAcAAdvcAAACqMF0DwAD9OwFgA6ljAABcAT4CRsAAdwzAAHc+wAB3JAAAAIQmYAOpYwCAwAB3L8AVEDM+AUnAAHdGIhzAAHdhFsAAd1oWwAB3UoHAAHdKwBUQVoRIqWuVS6l8SAEAAS4AwAD98QAhFsAAd3WBwAB3bcAVEFaes8AAVWc+AT0cwAB3kIHAAHeIwBUQVp7JAQABFsAAd6Auh3iqXgDAAFUVPz0cwAB3xRbAAHe+LogToI6IRwEAASeqMQCdfAaqiXTAAHfpwAB37sAAeXUAAJ7KAAAAAQPAAHf5wAB5dQAAAAAAAABcAT4DScAAeAIWwAB4DRbAAHgGLoJJqmmCUKApSsAAeBkAPz0cwAB4LxbAAHgmLp6xoIGD/QEAATTAAHg3A8AAeDfAAHknAAAAAgICwAB4PAAAAICsYAPAAP7/AMAAeFAAAACESGADwABWXQAAYAPAAP2hAT4BScAAeGElwAB4bYHAAHhlwBURemADqXk+AUnAAHiQHMAAeKMWwAB4nBTAAHiUwBURegEBYAOpeZVLqXxIAQABLgDAAP3xPgE9HMAAeM8UwAB4uMAVEXoBAWADqXmpsgEAARbAAHj4FsAAeOQuoQuqYqEPwABURgCp+j8/AMAA/Yw9HMAAeTUWwAB5Li6IE6COiEcBAAEnqjIAnXwGqop0wAB5esAAeX/AAHtoAACeywAAAAEDwAB5jcAAe2gAAAABAQHAAHmnAAAAqjBdA8AA/TsBYAOpYwAAXAE+Bk7AAHnXwAB55gAAqjNdA8AA/TsBYAPAAFGhARzAAHoQFsAAegEWwAB58C6kSqpcqjPAAFEGgK0AAAAAwAD9Dz0cwAB6PhbAAHovFsAAeh4upEqqXKozwABRBoJGAAAAAMAA/VRFwAB6SwHAAHpUwAB6VgAAYmADwAD8lwGTARzAAHpdgsAAelvAFRLaYwEAARbAAHpugcAAel/AFRJxYcAA/WsAwAD9xQGKwAB6dsAVEtocwAB6d4LAAHp2wBUS2mQBAAGUAMAA/b0+AT0cwAB6lRzAAHqRgcAAeoPAFRJxSwEAAYLAAHqSwBUS2gDAAP1Ko/EBAAEWwAB6my6kSqpcAMAAUac9HMAAer8WwAB6uC6IE6COiEcBAAEkwAB68QMnqjQWwAB634HAAHrQwBUScWHAAP1rJ6o1AJ18PTUAAAABAGADrkMBFsAAevkuoQuqYiMcwAB7DoIAwBUTr0gBAAErAAArHMAAew6CAMAVE6+qNgAAAADAAFRNAVw9HMAAez4WwAB7Ny6IE6COiEcBAAEnqjcAnXwGqot0wAB7bcAAe3LAAH42AACezAAAAAEDwAB7hsAAfjYAAAABAQHAAHugAAAAqjBdA8AA/TsBYAOpYwAAXAE+B07AAHvJwAB73QAAqjhdA8AA/TsBYAPAAFGqARzAAHwMFsAAe/gWwAB75y6kSqpcqjjAAFEHgK0AAAAAwAD9Dz0cwAB8PxbAAHwrFsAAfBoupEqqXKo4wABRB4JGAAAAAMAA/VROwAB8V8AAfGYAAKo5XQPAAP4vAWADgxsBHsAAfGzAAMGmAAFgA4MbAABFwAB8fgHAAHyHwAB8iQAAYmADwAD8lwGTARzAAHyQg8AAfI7AFRTeYwEAARbAAHymgcAAfJLAFRRLYcAA/WsAwAD9xQGLwAB8rsAVFN4cwAB8r4PAAHyuwBUU3mQBAAGUAMAA/b0+Aj0cwAB80hzAAHzOgcAAfLvAFRRLSwEAAYPAAHzPwBUU3gDAAP1Ko/EBAAEWwAB82C6kSqpcAMAAUbI9HMAAfQCCwAB88cAVFK9WAQABFsAAfSIWwAB9GxzAAH0XgcAAfQTAFRRLSwEAAYPAAH0YwBUU3gDAAP1KhFfAAFGsmfrAAFT+AMAA/jw9HMAAfTkWwAB9Mi6IE6COiEcBAAEkwAB9iwMnqjoWwAB9aIHAAH1UwBUUS2HAAP1rJ6o7AJ18PRzAAH2dFsAAfZMuh3yqXZtOAgABgsAAfbDAFRSvAZtPKpwIPRzAAH3tFsAAfd0uiBOgjohHAQABJMAAfjEDJ6o8FsAAfg2CwAB9/sAVFK9hwADNVyeqPQCdfAaqjHTAAH47wAB+QMAAf/0AAJ7NAAAAAQPAAH5ZwAB//QAAAAEBAcAAfnMAAACqMF0DwAD9OwFgA6ljAABcAT4DScAAfsAWwAB+yxbAAH7ELoJJqmmCUKApSsAAftcAP0bAAH7jwAB/FcAAfvsAAACEJmADqWMAgMAAfwbAFRaBPgFJwAB/HSIcwAB/OBbAAH8xFsAAfymBwAB/IcAVFsOESKlrlUupfEgBAAEuAMAA/fEAIRbAAH9MgcAAf0TAFRbDnrPAAFVnPgE9HMAAf2eBwAB/X8AVFsOezQEAARbAAH+iFsAAf44uoQuqYqEPwABURgDAAFUyPz0cwAB/0xbAAH/MLogToI6IRwEAASeqPgCdfAaqjXTAAIACwACAB8AAgnwAAJ7OAAAAAQPAAIAgwACCfAAAAAEBAcAAgDoAAACqMF0DwAD9OwFgA6ljAABcAT4FScAAgIchFsAAgKEWwACAkxbAAICMLoJJqmmeiqh/h3SLJ0rAAIC/AD9OwACA2MAAgOcAAKo5XQPAAP07AWADgxsBHsAAgO3AAPg1AQFgA4MbAZMARsAAgQDAAIEywACBGAAAAIQmYAOpYwCAwACBI8AVF5U+AUnAAIE6IhzAAIFVFsAAgU4WwACBRoLAAIE+wBUYDIRIqWuVS6l8SAEAAS4AwAD98QAhFsAAgWmCwACBYcAVGAyes8AAVWc+AUnAAIF8HMAAgYiCwACBgMAVGAyezgIAAhbAAIGiLoJJqmkWwACBqi6HfKpdAMAAVSI+AT0cwACB0YHAAIHCwBUX2VYBAAEWwACB3YLAAIHVwBUYDIJJwABU/wDAAP1MPz89HMAAggwWwACCAi6HfKpdm04CAAGBwACCH8AVF9kBm08pnAg9HMAAglIWwACCSy6IE6COiEcBAAEnqj8AnXwGqo50wACCgcAAgobAAIScAACezwAAAAEDwACCkcAAhJwAAAABAQHAAIKrAAAAqjBdA8AA/TsBYAOpYwAAXAE+AkbAAILAwACC8sAAgtgAAACEJmADqWMAgMAAguPAFRk0PgFJwACC+iIcwACDFRbAAIMOFsAAgwaBwACC/sAVGVeESKlrlUupfEgBAAEuAMAA/fEAIRbAAIMpgcAAgyHAFRlXnrPAAFVnPgNJwACDPBbAAINIgcAAg0DAFRlXhOypaD4BPRzAAINwgcAAg2jAFRlXqkAAAAAAwABVLD9OwACDosAAg68AAIT0YAODGwEWwACDvRbAAIO5gcAAg7HAFRlXmfqpaoT0gz1JwACD0yIhHMAAg+SCwACD18AVGexIAQABKwDAAP3xABbAAIP8gsAAg+/AFRnshOyDOz4BPRzAAIQkgcAAhBzAFRlXqkEBAAEWwACEOi6HfKpdAMAAVS0/Pz0cwACEaRbAAIRiLogToI6IRwEAASeqQgCdfAaqj3TAAIShwACEpsAAhtcAAJ7QAAAAAQPAAIS9wACG1wAAAAAAAABcAT4BPRzAAITPFsAAhMYunrGggYP9AQABNMAAhNcDwACE18AAhtIAAAACAgLAAITcAAAAgKxgA8AA/v8AwACE8AAAAIRIYAPAAFZdAABgA8AA/aEBPgFJwACFARzAAIUUFsAAhQ2BwACFBcAVGvGVS8AAVmxIAQABLgDAAP3xPgM9HMAAhS+BwACFJ8AVGvGe0AAAAADAAFaHTsAAhWTAAIVtAABcXQPAAP00AWADwABVTgEWwACFd4HAAIVvwBUa8VzAAFZwQ8AAhYkcwACFmYLAAIWQwBUbT10AAAAAwAD9Nj4CTsAAhbnAAIXFAACe3mADwABVTgEWwACF0ILAAIXHwBUbT17AAP04ScAAheMlwACF84PAAIXnwBUbmmADwABU7j4BPRzAAIYeFMAAhhLAFRuaAwFgA8AAVO6e0AEAAYHAAIY2wBUa8QDAAFUIScAAhlElwACGYYPAAIZVwBUbmmADwABWoT4BPRzAAIaNFMAAhoHAFRuaAwFgA8AAVqGe0AEAAYHAAIalwBUa8QDAAFayPz8AwAD9jAaqkHTAAIbcwACG4cAAiBUAAJ7GAAAAAQPAAIb0wACIFQAAAAICAsAAhxUAAACqMF0DwAD9OwFgA6ljAMAAhzEAAACa/2ADwABU7gAAXAE+Az0XwACHRC6kSh7AAIdtwABRFAQABIHAAId8wBUcjYDAAIeJwBUceC4WwACHni6HeKpeAKpcPTUAAAABAGADrkMBFsAAh64uoQuqYiMcwACHw4IAwBUc2UgBAAErAAArF8AAh8OCAMAVHNmqQxbAAIfWLqRKqlzAAFRDAWADwABQ/D0cwACH8xbAAIfsLogToI6IRwEAASeqRACdfAaqkXTAAIgawACIH8AAiKwAAJ63AAAAAQPAAIg4wACIrAAAAAAAAABcAT4CScAAiEEWwACITBbAAIhFLoJJqmmCUKApSsAAiFgAPz0XwACIZC6hCx/AAIh+rkgBAAEWwACImC6p56pjAKpiBqqSdMAAiLHAAIi2wACObwAAnsgAAAABA8AAiM7AAI5vAAAAAQEBwACI6AAAAKowXQPAAP07AWADqWMAAFwBPghJwACI/RbAAIkIFsAAiQEugkmqaYJQoClKwACJFAA/PRzAAIoqFsAAihYuoQuqYqpFAgACFsAAijouh3iqXhbAAIpFLod8ql0AwABUT07AAIpowACKgQAAqkZdA8AA/TsBYAPAAFWZATHAAIqRYAPAAFWZAEbAAIqZwACKycAAiq0AAACESGADwABWXQAWwACKwRbAAIq4Lp6xoIEpwAD9kD4BScAAitEcwACK5BbAAIrdgsAAitXAFR5nlUvAAFZsSAEAAS4AwAD98T4CTsAAiwrAAIsgAACo9l0DwAD9OwFgA8AAVZkBHMAAizaCwACLLsAVHmepMAAAAADAAFaIScAAi1shHMAAi3WDwACLX8AVHrhIAQABKwDAAP1lPgE9HMAAi6OBwACLisAVHjiApQEAAYPAAIuqwBUeuADAAP1NPz9FwACL3wHAAIvowACL6gAAYmADwAD8lwGTARzAAIvxgsAAi+/AFR80YwEAARbAAIwMgcAAi/PAFR44YcAA/WsAwAD9xQGKwACMFMAVHzQcwACMFYLAAIwUwBUfNGQBAAGUAMAA/b0+AT0cwACM5BzAAIzggcAAjMjAFR44SwEAAYLAAIzhwBUfNADAAP1KqkcAAAAAwABVrT0XwACNEBbAAIz8LqELqmKqSCnAAFRFPRfAAI4HFsAAjf0uh3yqXZs1FsAAjh8uqi6qhpv1PRzAAI5FFsAAjj4uiBOgjohHAQABJ6pJAJ18BqqTdMAAjnTAAI55wACQBAAAoVEAAAABA8AAjo/AAJAEAAAAAwMDwACOoAAAAIPzYAOCUgDAAI6rAAAAoPtgA8AA+tEAwACOxgAAAKD6YAPAAPrRAABcAT4CScAAjuKCwACO5sAVIFs+AT0cwACPCYDAAI8EwBUgPYRSAQABNQAAAAEAYAPAAFLLARbAAI8QLqnoqmQjHMAAjyaDAMAVIJVIAQABKwDAAP3xF8AAjxAuqegfwACPLsAAUu4BAAEuAKpkgwDAFSCVAWADwABSywCCWz9JwACPVoHAAI9awBUgSz4BPRzAAI99gMAAj3jAFSA9hFIBAAE1AAAAAQBgA8AAUvABFsAAj4QuqemqZSMcwACPmoMAwBUhD0gBAAErAMAA/fEXwACPhC6p6R/AAI+iwABS/wIAAS4BqkohFsAAj+AWwACP2S6CSappnw+oiKplgwDAFSEPAWADwABS8ACCWz8GqpR0wACQCcAAkA7AAJKyAAChMgAAAAEDwACQKMAAkrIAAAADAwPAAJA4AAAAg2FdA8AA/TsBYAOCUgDAAJBJAAAAoPtgA8AA+tEAwACQZAAAAKD6YAPAAPrRAABcAT4CScAAkICCwACQhMAVIcY+Ak7AAJC4wACQxAAAqktgA8AAUssBNQAAAAEAYAPAAFLLARbAAJDQLqnoqmQjHMAAkOaDAMAVIgBIAQABKwDAAP3xF8AAkNAuqegfwACQ7sAAUu4BAAEuAKpkgwDAFSIAAWADwABSy0XAAJERAcAAkRrAAJEcAABiYAPAAPyXAZMBHMAAkSOEwACRIcAVIldjAQABFsAAkSqAwACRJcAVIaFhwAD9awDAAP3FAYzAAJE0wBUiVxzAAJEyhMAAkTTAFSJXZAEAAZQAwAD9vT4BPRzAAJFFgMAAkUHAFSGhgL8CAAKEwACRRsAVIlcmwACRRQEcwACRUxzAAJFPgMAAkUvAFSGhSwEAAYTAAJFQwBUiVwDAAP1KhFIBAAGDwACRWsAVIewAgltgA4JSAMAA/Us/ScAAkXqBwACRfsAVIbY+Ak7AAJGywACRvgAAqktgA8AAUvABNQAAAAEAYAPAAFLwARbAAJHALqnpqmUjHMAAkdaDAMAVI0FIAQABKwDAAP3xF8AAkcAuqekfwACR6MAAUv8CAAEuAapKIRbAAJIqFsAAkiMugkmqaZ8PqIiqZYMAwBUjQQFgA8AAUvBFwACSSwHAAJJUwACSVgAAYmADwAD8lwGTARzAAJJdhMAAklvAFSOuYwEAARbAAJJkgMAAkl/AFSGhYcAA/WsAwAD9xQGMwACSbsAVI64cwACSbITAAJJuwBUjrmQBAAGUAMAA/b0+AT0cwACSf4DAAJJ7wBUhoYC/AgAChMAAkoDAFSOuJsAAkn8BHMAAko0cwACSiYDAAJKFwBUhoUsBAAGEwACSisAVI64AwAD9SoRSAQABg8AAkpTAFSMtAIJbYAOCUgDAAP1LPwaqlXTAAJK3wACSwsAAk6oAAIeKAAAAAQPAAJLXwACTqgAAAAUFBcAAkuMAAACFj2ADhNkAwACS9AAAAIC9YAPAAP5+AMAAkwoAAABbYAOFowDAAJMZAAAAg2JgA8AA/JcAwACTJgAAAIeLYAPAAPrRAABgA4TZAT4BSsAAkzUBHMAAk1EWwACTQxbAAJM8LoJJqmmeiqh/h4oGAAYWwACTcC6HeKpegMAAk3vAFSSagcAAk4XAFSSogsAAk4vAFSS4g8AAk5bAFSTFhMAAk57AFSTVAIs0BqqWdMAAk6/AAJO6wACW8wAAh4wAAAABA8AAk9bAAJbzAAAADgQEwACT6QAAAIWPYAOE2QDAAJP6AAAAgL1gA8AA/n4AwACUCgAAAFtgA4WjAMAAlBkAAACDYmADwAD8lwAKwACULQAAAIeNYAPAAPrRAWrAAJQ3YAPAAPrRAMAAlEkAAACFQmADwAD60QFqwACUU2ADwAD60QDAAJRlAAAAhURgA8AA+tEBasAAlG9gA8AA+tEAwACUgQAAAIeOYAPAAPrRAWrAAJSKYAPAAPrRAMAAlJwAAACHj2ADwAD60QFqwACUrWADwAD60QDAAJS/AAAAh5BgA8AA+tEBasAAlMpgA8AA+tEAwACU3AAAAIeLYAPAAPrRAWrAAJTlYAPAAPrRAMAAlPcAAACEHmADwAD60QFqwACVAWADwAD60QDAAJUTAAAAh5FgA8AA+tEBasAAlSJgA8AA+tEAwACVNAAAAIeSYAPAAPrRAWrAAJVAYAPAAPrRAGADhNkBPgFKwACVTgEcwACVahbAAJVcFsAAlVUugkmqaZ6KqH+HjA8ABRbAAJWQLod4ql6AwACVm8AVJXGBwACVpcAVJX+CwACVq8AVJY+DwACVtsAVJZwKh42EwACV0MAVJa2FQoXAAJXswBUlyYVEhsAAlgjAFSXlh46HwACWI8AVJgGHjxTAAJZFwBUmHQgAh5AUwACWacAVJjkJAIeLFMAAloXAFSZVCgCEHhTAAJagwBUmcQsAh5EUwACWwcAVJo0MAIeSFMAAluTAFSapDQCLNQaql3TAAJb4wACW/cAAl1MAAKRLAAAAAQPAAJcWwACXUwAAAAAAAABcAT4CPRfAAJcfLod8K6pdPRfAAJc1LqELK6piBqqYdMAAl1jAAJdxwACYxQAAn3ABasAAl1lgA8AA/eQCAAABA8AAl5PAAJjFAAAAAQEBwACXmgAAAJn6YAODGwAAYAPAAFTuAT4ETsAAl63AAJe7AACohWADgosBFsAAl8GAwACXvcAVKBGEsoNFTsAAl+bAAJfuAACESGADwABWXQEcwACX+BbAAJfwLp6xoIFLAQABFsAAmAeBwACX+cAVKCqEfIKNAMAA/YFJwACYFxzAAJgjgsAAmBvAFShOSAEAASsAwAD98T4BSsAAmDQBHMAAmFQWwACYTRbAAJhCFsAAmDsugkmqaZVHoB2VS6AMn3ABAAGAwACYd8AVKBEAqNA/SsAAmIcBJsAAmIcBHMAAmJaCwACYjsAVKE6euQIAARbAAJisgMAAmKjAFSgRgL2DIQGaTSnAAFaDYAPAAFTuBqqZdMAAmMrAAJjiwACZPwAAn3EBasAAmMtgA8AA/eQCAAABA8AAmPTAAJk/AAAAAQEBwACY/gAAAIKUYAOI6QAAYAPAAFc3AT4BSsAAmQoBJsAAmQoBHMAAmRaAwACZEcAVKVWEUgEAAR/AAJkhwABSWQEAAS4AAIjrYAPAAFc3AAAUvkEAFL7JABS+8wAUyPEAFMqMABTLfwAUzfYAFNHAABTWvAAU1vIAFNdTABTaUAAU3osAFOCuABThvQAU4swAFOO9ABTk0QAU5fwAFOdYABTozQAU6fcAFOshABTtfwAU9Y0AFPq8ABUGwQAVCCEAFQsNABUNjwAVDogAFQ7eABUQDAAVEPYAFRIvABUUCQAVFloAFRduABUZDQAVGowAFRxRABUdPgAVHakAFSAWABUhegAVJHMAFSVKABUnmgAVJ94AFSkiABUpowAAADICqpx0wACjH8AAoyXAAKOyA6pMAAABYAHAAP3kAAADBKqedMAAo0rAAKNNCZn6AGADgxsABKqfdMAAo2HAAKNiCYHXAGADiZcABKqgdMAAo3bAAKN3CYJOAGADiZcAAQWqonTAAKN8wACjgsAAo7ABAAADwACjlsAAo7AAAAADAwPAAKOcAAAEmfpgA4MbAMAAo6YAAASB12ADiZcAwACjrgAABIJOYAOJlwAAYAOqnAE/BAgBqp6AAMAVKvUIAaqfgQDAFSsDCAGqoIIAwBUrEQkBwACjgsAA/foAAAAAAAAAFStUAAAAAAQEqlN0wACZzsAAnUIGqk0AYAPAAP5+AWrAAJnmYAPAAP5+wADgZgSqVHTAAJ3OwAChMwaqTgBgA8AA/n4BasAAnedgA8AA/n7AAOBpBKpVdMAAocTAAKI7BqpPAGADwAD+fgFqwACh4mADwAD+fsAA4GwEqlZ0wACiy8AAoxwGqlAAYAPAAP5+AWrAAKLnYAPAAP5+wADgbwABdAAVK/cAFLydABUqdAAVK10AAAACABUr9wAAAAAAAgSqo6pRdQAAC4PVAADAAPY6AAEAAYYMg/gAAMAA6sCVogCEEQAAgi4AAIQzAACb5QAAhGEAAKfCAACEhQAAnJgAAISuAACCJgAAhNMAAJr3AACE/gAAm5wAAIUuAACK9gAAhVwAAIxkAAEBHYIph/aKCIoMiiWKaIptinGKdYflig2KEooXihyKJooqik2KLooyijaKO4o/ikSKSYpRilaKWopfinYAAQCqUgAOAqqpdZB9kIOStAOqUwAAAWABidQAAAEEqqt1kMGQzAmqVABgA8AA+qMABAWqsHWQ0JDQkRYAAAADkOWRFgAAAAEBAZDqAAAAgJZgA8AA/JcAAGADqqkBPwEKAJD4qrIBAAEekQrAAPrQAQABgJEPwBUtBwAABaqxdZEakRqRhwCqVQADkTqRhwAAAAEBAZFCAAAAgJZgA8AA+0kAAGADqqkBPwIIAKqrHpFmwAD60AEAAYCRa8AVLVIACQCRe4neAQABgJGBwBUtUgAFqrJ1kYuRi5HjAKpWAAORq5HjAAAAAQEBkbEAAASqVGADwAD6owAAYAOqqQE/AggBqquAAMAVLagJAJHGid4BAAEckdiAkczAFS2oqlcAAAAAwAD6zAAFqrN1keeR55JNAKpYAAOSB5JNAAAAAQEBkgwAAACAlmADwAD8lwAAYAOqqQE/AQoAkiCqsgEAARySPh6SMsAA+tABAAGAkjfAFS3/AKpZAQABN0AAwAD6yQACBqqtdZJSkluSigAAhq8AAAABA5JikooAAAABAQGScwAAAIV9YAObnwAAYAOI6QFKkn0BFpKDgJJ9wBUuXoWVm60Gqq51ko+SlpKyAAAjAAAAAQOSnpKyAAAAAAAAAGADwAD+fgFKkqQBJJKyARaSpi6qVKqrAAAVLkEAFS6CABUutgAAAAICqrR1kreSvb05A6paAAABYAGaXQAACASqtnWTAZMICahQAGADixUABKq3dZMkkzUJqlsAYAOq4AAEqrh1k0+TXgmG3QBgA5ufAASquXWTvZPHCapcAGADwAD60QAEqrp1k9aT4wmqXQBgA8AA+tEABKq7dZPylAUJql4AYAPAAPrRAASqvHWUFJQfCZ8QAGADwAD60QAEqr11lC6USAmHrgBgA8AA+tEAAQWq33WUTZRNllkAAAADlGGWWQAAAAkJCZRuAAAEqFBgA4sVAJSRAAAAh31dA8AA/W0CYAPAAP5+YAPAAP5+AJSwAAAEqlxgA8AA+tEAlMcAAASqXWADwAD60QCU4QAABKpeYAPAAPrRAJUBAAAEnxBgA8AA+tEAlRkAAASHrmADwAD60QCVQAAABIbdYAObnwCVZQAAAKpfYAOrfgAAYAOqtAE/CQgBqraAAMAVL4kIAaq5ggDAFS+wCAGquoMAwBUvvggBqruEAMAVL8wIAaq8hQDAFS/aCAGqvYYAwBUv6AgBqriHAMAVL/YIAKq3H5WUq1EGAASAlbPAFS+JgZW8wBUvlYeV0MAVL/YUleHAFTACCAACnxCFlgnAFS/ah66Glj7AFS/oCQGUTZpkAAAAAB8Gqr91lomWjplpAACqYAAAAAEDlpyZaQAAAAEBAZalAAAAhEhgA4KLAABcAT4IPRyWtC6qYQIAAhaW0YCWycAVMMGEaIKbgJbewBUwwQCqyD0elu2COQMAAxaXA4CW+8AVMMGAz4KcLoCXF8AVMMEAPR6XJYI5AwADFpc7gJczwBUwwYSGgp4ugJdIwBUwwQA9HpdWgjkDAAMWl2yAl2TAFTDBhIeCny6Al3zAFTDBAD0el4qCOQMAAxaXoICXmMAVMMGEiIKgLoCXr8AVMMEAPR6XvYI5AwADFpfTgJfLwBUwwYSKgqIugJflwBUwwQA9HpfzgjkDAAMWmAmAmAHAFTDBhIuCoy6AmBfAFTDBAEmYJiEWmCsuqlyquT4BPRyY6BaY1oCYzsAVMMGEhYKdlyoBAAE0mPQDmPSZXgAAAAEBAZj/AAAAhGNgA4J7AABgA8AA+tEBPgFKmRQBIiWZKhaZJYGZG8AVMeeD84J+YAODnAAcmU4WmUCBmTbAFTHnhGSCfUgBAAErAMAA/fEAwAD9Wz8GqsB1mW6ZbpoQAACEuwAAAAEDmX6aEAAAAAEBAZmLAAAAg/NgA4LcAABgA4JSAT4CPRyZqRaZly6qW6q3qmIBAAE0mbwDmbyZ+gAAAAAAAABgA8AA/aEBPgE9HJnHLqphAgACFpnhgJncwBUyVoRogt6Ame7AFTJWAKrIAKtLSpoBAYCaCMAVMlYGqsF1mhWaFZrDAACEuAAAAAEDmiuawwAAAAEBAZo+AAAAg/NgA4LCAABgA4JSAT4CPRyaXBaaSi6qW6q3qmIBAAE0mm8Dmm+arQAAAAAAAABgA8AA/aEBPgE9HJp6LqphAgACFpqUgJqPwBUy4IRogsWAmqHAFTLgAKrIAKtLSpq0AYCau8AVMuAGqsJ1msiayJxuAACE+wAAAAEDmtKcbgAAAAEBAZrZAAAAg/NgA4MbAABgA4JSAT4CPRya9xaa5S6qW6q3qmIBAAE0mwoDmwqcWAAAAAAAAABgA8AA/aEBPgY9HJsVLqphAgACFpsvgJsqwBUzaoRogyCAmzzAFTNqAKrIPR6bSYI5AwADFptcgJtXwBUzaoSLgy4ugJtqwBUzagA9Hpt3gjkDAAMWm4qAm4XAFTNqhMWDKi6Am6DAFTNqAD0em62COQMAAxabwICbu8AVM2qE5IMvLoCb1MAVM2oAPR6b4YI5AwADFpv0gJvvwBUzaoSKgzAugJwGwBUzagA9HpwTgjkDAAMWnCaAnCHAFTNqhOWDMS6AnEzAFTNqAACrS0qcXwGAnGbAFTNqBqrDdZxznHOdUgAAhUcAAAABA5yBnVIAAAABAQGcjAAAAIPzYAOEEgAAYAOCUgE+Aj0cnKoWnJguqluqt6piAQABNJy9A5y9nTwAAAAAAAAAYAPAAP2hAT4CPRycyC6qYQIAAhac4oCc3cAVNJSEaIOAgJzvwBU0lACqyD0XnQGAnPzAFTSUgm4mnQEBNZ0aAAABAFsBHJ0aFp0RgJ0MwBU0lIJuhBeEUgEAAS4AhMA1AAAAAQBbARedKIGdJsAVNQWEV4CdMcAVNJQAgQDAFTUFYAOEroQXAKtLSp1DAYCdSsAVNJQGqsR1nVedV55uAACFKQAAAAEDnWeebgAAAAEBAZ10AAAAg/NgA4PPAABgA4JSAT4CPRydkhadgC6qW6q3qmIBAAE0naUDnaWeWAAAAAAAAABgA8AA/aEBPgM9HJ2wLqphAgACFp3KgJ3FwBU1eoRog4CAndfAFTV6AKrIPR6d5II5AwADFp33gJ3ywBU1eoUmg9QugJ4LwBU1egA9F54dgJ4YwBU1eoJuJp4dATWeNgAAAQBbARyeNhaeLYCeKMAVNXqCboPThFIBAAEuAITANQAAAAEAWwEXnkSBnkLAFTYLhFeAnk3AFTV6AIEAwBU2C2ADhK6D0wCrS0qeXwGAnmbAFTV6BqrFdZ5znnOf+gAAhMoAAAABA55/n/oAAAABAQGeiAAAAIPzYAOC9gAAYAOCUgE+Aj0cnqYWnpQuqluqt6piAQABNJ65A565n+QAAAAAAAAAYAPAAP2hAT4FPRyexC6qYQIAAhae3oCe2cAVNoCEaIL5gJ7rwBU2gACqyD0enviCOQMAAxafC4CfBsAVNoCExYL7LoCfIcAVNoAAPR6fLoI5AwADFp9BgJ88wBU2gITGgv0ugJ9lwBU2gAA9Hp9ygjkDAAMWn4WAn4DAFTaAhMeC/i6An6HAFTaAAD0en66COQMAAxafwYCfvMAVNoCEyIL/LoCf2MAVNoAAAKtLSp/rAYCf8sAVNoAGqsZ1n/+f/6FuAACFMAAAAAEDoCGhbgAAAAEBAaBAAAAAg/NgA4PvAABgA4JSAT4CPRygXhagTC6qW6q3qmIBAAE0oHEDoHGhWAAAAAAAAABgA8AA/aEBPgQ9HKB8LqphAgACFqCWgKCRwBU3ioRog4CAoKPAFTeKAKrIPR6gsII5AwADFqDDgKC+wBU3ioTFg/QugKDZwBU3igA9HqDmgjkDAAMWoPmAoPTAFTeKhMeD9S6AoRXAFTeKAD0eoSKCOQMAAxahNYChMMAVN4qEyIP3LoChTMAVN4oAAKtLSqFfAYChZsAVN4oGqsd1oXOhc6HhAACGqgAAAAEDoYWh4QAAAAEBAaGUAAAAg/NgA4mCAABgA4JSAT4CPRyhoC6qYQIAAhahuoChtcAVOHSEaImFgKHHwBU4dACqyEqh0gGAodnAFTh0BqrIdaHmoeuikQAAqmEAAAABA6H/opEAAAACAgKiEQAAAIdDXQPAAP07AWADhNkAoiEAAACEV2ADglIAAFwBPgFJoi8iFqIzLqpeqrsAHKJXFqJQgKJKwBU40mHAAP1rgJcBAAGTAMAA/cc+AT0comQuqmMCAAKAonnAFTjSgaKAwBU45QCqyT8Gqsl1opaim6OsAACqYwAAAAEDoq+jrAAAAAICAqLBAAAAh0NdA8AA/TsBYAOE2QCi0QAAAIRXYAOCUgAAXAE+AT0covEWot8uqluqt6piAQABNKMEA6MEo6cAAAAAAAAAYAPAAP2hAT4BRaMPAaMYoxoAAGJgA8AA/JcBkwEcoyGCox/AFTmsYwEAARajKYCjI8AVOVthwAD9awDAAP3FAYqjM8AVOawcozGCozPAFTmsZAEAAZQAwAD9vT4BPRyjRYCjQMAVOVuAvwIAAoKjRsAVOaw1o0sAAAEAYAOE2QEco0suqmQCAAKBo2vAFTluHKN4gKNzwBU5W0sBAAGCo3nAFTmsAMAA/UoAqto1AAAAAQBbARejiYOjh8AVOhSEV4GjksAVOW6CWIMAwBU6FADAAP1LAKtLBqrKdaPXo9engQAAhXAAAAABA6Pop4EAAAABAQGj9gAAAIPzYAOErgAAYAOCUgE+BU6kCKQhAAGqZWADwAD8lwEWpD0WpCiApCPAFTqUhMeEtWHAAP1rRaRJAaRSpFQAAGJgA8AA/JcBkwEcpFuCpFnAFTrSYwEAAYGkXcAVOqkAwAD9xQGKpHnAFTrSHKR3gqR5wBU60mQBAAGUAMAA/b0+A06knqSnAAGCcGADiH4BHKTCFqSugKSpwBU6lITHhLVLAQABgqTDwBU60gDAAP1KPRykzS6qYQIAAhak64Ok4sAVOxuEaIiBg6T4wBU7GwCqyEmlCSEcpSIWpRaDpQ3AFTsbhROIhkgBAAErAMAA/fE+AT0XpT6DpTXAFTsbhRM1pVgAAAEAYAOE2QEcpVguqmQCAAKDpXjAFTsbFqWLg6WCwBU7G4UTiIYAqto1AAAAAQBbARelqISlpsAVO5qEV4OlscAVOxuCWIQAwBU7moiGP0alzaYOpewAAAGCcGADiH4AFqX9gKX4wBU6lITIhLY+Aj0cphYuqmECAAIWpjSCpivAFTvxhGiIgYKmQcAVO/EAqshJplIhHKZrFqZfgqZWwBU78YUTiIZIAQABKwDAAP3xPgE9F6aHgqZ+wBU78YUTNaahAAABAGADhNkBHKahLqpkAgACgqbBwBU78Ram1IKmy8AVO/GFE4iGAKraNQAAAAEAWwEXpvGDpu/AFTxehFeCpvrAFTvxgliDAMAVPF6Ihj9JpxYhHKckFqcfgKcawBU6lIJthMRIAQABKwDAAP3xPgE9F6c6gKc1wBU6lIJtJqc6ATWnSwAAAQBbARynSxanRoCnQcAVOpSCbYTEhFIBAAEuAIeRNQAAAAEAWwEXp1mCp1fAFTzjhFeAp2LAFTqUAIIAwBU842ADh4+Exz9Kp3IBgKd5wBU6lAaqy3WnhqeGq0oAAIZnAAAAAQOnnqtKAAAAAQEBp7MAAACD82ADiH4AAGADglIBPgM9HKe/LqphAgACFqfZgKfUwBU9VoRoiIGAp+bAFT1WAKrISafyIRyoBxan+4Cn9sAVPVaFE4iGSAEAASsAwAD98T4BSagYFqghgKgcwBU9VoQiiJE+BE6oQ6hMAAGGFWADiaYBHKhOLqpmAgACgKhiwBU9VhaobYCoaMAVPVaFE4iGAKrbPRyomRaolRaogy6qW6q3lqeq9apnAgACgKiqwBU9VoGosMAVPcEAq2s9F6jIgKjDwBU9VoUTNajWAAABAGADhNkBHKjWLqpoAgACgajtwBU9wRao/ICo98AVPVaFE4iGAKrcNQAAAAEAWwEXqRWCqRPAFT4mhFeAqR7AFT1WgliCAMAVPiaIhkmpYCIhFqllLqpdqroAHKl2LqppAQABFqmIgKmDwBU9VoUTiIYAqt0+AUmpoiElqa+BqabAFT3BYAOKdT4BSqquASs/Pz4BPReq7YCq6MAVPVaFEyaq7QE1qwwAAAEAWwEcqwwWqwCAqvvAFT1WhROIhoRSAQABLgCE3TUAAAABAFsBF6sagasYwBU+0IRXgKsjwBU9VgCBAMAVPtBgA4TZiIY/Sqs7AYCrQsAVPVYGqsx1q0+rT63kAACFIwAAAAEDq1mt5AAAAAEBAatgAAAAg/NgA4OcAABgA4JSAT4BSqtsASarbAEcq4UWq3Muqluqt6piAQABNKuYA6uYrd8AAAAAAAAAYAODnAE+AkmroxarrICrp8AVP0OEIoOtPgM9HKu/LqphAgACFqvZgKvUwBU/Q4Rog4CAq+bAFT9DAKrIPRer+oCr9cAVP0OFEzWsFAAAAQBgA4TZARysFC6qZAIAAoCsNMAVP0MWrD+ArDrAFT9DhRODoACq2jUAAAABAFsBF6xcgaxawBU/yIRXgKxlwBU/Q4JYgQDAFT/Ig6BJrKciIRasrC6qXKq5ABysui6qaQEAARaszICsx8AVP0OFE4OgAKrdPgFKrOYBKz8+Aj0crRQuqmECAAIWrS6ArSnAFT9DhGiDgICtO8AVP0MAqshJrUohHK1fFq1TgK1OwBU/Q4UTg6BIAQABKwDAAP3xPgE9F615gK10wBU/Q4UTJq15ATWtmAAAAQBbARytmBatjICth8AVP0OFE4OghFIBAAEuAITdNQAAAAEAWwEXraaBraTAFUCghFeAra/AFT9DAIEAwBVAoGADhNmDoD9Krc0BgK3UwBU/QwCrS2ADglIGqs11rjKuMq6oAACF/QAAAAEDrkSuqAAAAAEBAa5TAAAAg/NgA4bVAABgA4JSAT4BSq5fARyuZi6qaAIAAhyujxaufS6qW6q3nyIBAAGArpjAFUEaAKsCgK6fwBVBGgCq3AaqznWura6tsQEAAIWqAAAAAQOuu7EBAAAAAQEBrsYAAACD82ADhYIAAGADglIBPgNOrt+u5gABgklgA4N9ARau7YCu6MAVQXyCSYWGSa75IiWvBIGu/cAVQZFgA4OcABavFxSvEMAVQZEBAWADg5yEIoOtPgI9F69mFK9fwBVBkQEBYAODnIUTNa9+AAABAGADhNkBHK9+LqpkAgACFK+ewBVBkQEBYAODnBavrRSvpsAVQZEBAWADg5yFE4OgAKraNQAAAAEAWwEXr8iCr8bAFUHphFcUr9HAFUGRAQFgA4OcgliCAMAVQemDoEmv3xyv4y6qaQEAARav9xSv8MAVQZEBAWADg5yFE4OgAKrdPgFKsA8BHLAWLqpkAgACgLA2wBVBfICwPMAVQXwAqto/SbBWIiWwYYGwWsAVQZFgA4QSABywfRaweBSwccAVQZEBAWADhBKCa4QVSAEAAWqwjmADhFKE3ADAAP3xPgFKsJ4BHLClLqpkAgACgLDFwBVBfICwy8AVQXwAqto/SrDcAR2w6YWqAQABgLD4wBVBfACZOgaqz3WxBrEGsYUAAIZIAAAAAQOxFbGFAAAAAQEBsSEAAACD82ADiBoAAGADglIBPgI9HLEtLqpjAgACFrFHgLFCwBVDIIXPiByAsVTAFUMgAKrJSrFfAR2xbIZIAQABgLF8wBVDIACZjAaq0HWxirGKszAAAIWLAAAAAQOxmrMwAAAAAQEBsacAAACD82ADhOwAAGADglIBPgNOsc2x1gABgnBgA4h+ARax3YCx2MAVQ4mCcITuSbHrFrH4gbHvwBVDnoQiiJE+Aj0XshKBsgnAFUOehRM1sioAAAEAYAOE2QEcsiouqmQCAAKBskrAFUOeFrJdgbJUwBVDnoUTiIYAqto1AAAAAQBbAReyeIKydsAVQ9qEV4GygcAVQ56CWIIAwBVD2oiGSbKRHLKVLqppAQABFrKrgbKiwBVDnoUTiIYAqt0+AUqywwEcssouqmQCAAKAsurAFUOJgLLwwBVDiQCq2j8/SrMJAR2zFoWLAQABgLMnwBVDiQCZMgaq0XWzNbM1s90AAIYHAAAAAQOzRbPdAAAAAQEBs1IAAACD82ADhwgAAGADglIBPgJJs14Ws2eAs2LAFUSdhCKHCj4BSrN4ARyzfy6qZAIAAoCzn8AVRJ2As6XAFUSdAKraP0qztgEds8OGBwEAAYCz1MAVRJ0AmVAGqtJ1s+Kz4rRNAACF1gAAAAEDs/i0TQAAAAEBAbQLAAAAg/NgA4ZMAABgA4JSAT4BSrQXARy0Hi6qZAIAAoC0PsAVRRaAtETAFUUWAKraBqrTdbRStFK09wAAhgkAAAABA7RhtPcAAAABAQG0bQAAAIPzYAOHFQAAYAOCUgE+Akm0eRa0goC0fcAVRWWEIocXPgFKtJMBHLSaLqpkAgACgLS6wBVFZYC0wMAVRWUAqto/SrTRAR203oYJAQABgLTuwBVFZQCZUQaq1HW0/LT8tWUAAIXaAAAAAQO1EbVlAAAAAQEBtSMAAACD82ADhlgAAGADglIBPgFKtS8BHLU2LqpkAgACgLVWwBVF3oC1XMAVRd4AqtoGqtV1tWq1arYPAACGCwAAAAEDtXm2DwAAAAEBAbWFAAAAg/NgA4ciAABgA4JSAT4CSbWRFrWagLWVwBVGLYQihyQ+AUq1qwEctbIuqmQCAAKAtdLAFUYtgLXYwBVGLQCq2j9KtekBHbX2hgsBAAGAtgbAFUYtAJlSBqrWdbYUthS2fQAAheAAAAABA7Yptn0AAAABAQG2OwAAAIPzYAOGZAAAYAOCUgE+AUq2RwEctk4uqmQCAAKAtm7AFUamgLZ0wBVGpgCq2gaq13W2graCt0gAAIW8AAAAAQO2nLdIAAAAAQEBtrMAAACD82ADhfsAAGADglIBPgJJtr8WtsiAtsPAFUb1hCKF/z4BSrbZARy24C6qZAIAAoC3AMAVRvWAtwbAFUb1AKraP0q3FwEdtySFvAEAAYC3P8AVRvUAmUAGqth1t023TbgEAACFugAAAAEDt2K4BAAAAAEBAbd0AAAAg/NgA4XoAABgA4JSAT4CSbeAFreJgLeEwBVHboQihew+AUq3mgEct6EuqmQCAAKAt8HAFUdugLfHwBVHbgCq2j9Kt9gBHbflhboBAAGAt/vAFUduAJk/BqrZdbgJuAm5bwAAhhYAAAABA7gguW8AAAABAQG4NAAAAIPzYAOHVQAAYAOCUgE+Ak64SbhSAACGFWADiaYBFrhZgLhUwBVH54YVh1dJuGcluHSBuGvAFUf8YAOKdT4CTrifuKoAAIJvYAOE2QEWuLUUuKzAFUf8AQFgA4p1gm+Kd0q4xwEcuM4uqmQCAAKCuO7AFUgrgrj6wBVIKwCq2j4CPRe5H4C5GsAVR+eGFRy5PBa5Ki6qW6q3nSEBAAGBuUnAFUf8AKtJh1dKuVoBgLlhwBVH5waq2nW5dLl/uiIAAKpkAAAAAQO5nroiAAAAAgICua8AAACqamADglIAuccAAACD82ADhNkAAGADhNkBPgFKudMBHLnaLqpoAgACHLnxLqpmAgACgLoFwBVIvYG6EsAVSMkAqtuBuhnAFUjJAKrcBqrbdbonujC7OwAAqmYAAAABA7pDuzsAAAACAgK6TQAAAKpqYAOCUgC6ZQAAAIPzYAOE2QAAYAOJpgE+Akm6cRy6gYC6dcAVSStIAQABgbqEwBVJNwDAAP3xPgFKupIBHLqrFrqZLqpbqrefIgEAAYG6tMAVSTcAqwI/SrrGARy63xa6zS6qW6q3qmsCAAKAuvDAFUkrNLr9A7r9uzYAAAAAAAAAYAOJpgE+AUq7CAEcuyEWuw8uqluqt58iAQABgbsqwBVJNwCrAgCrEQaq3HW7QLtLvIgAAKpoAAAAAQO7YbyIAAAAAgICu2sAAACGFWADiaYAu4AAAACD82ADhNkAAGADhNkBPgJJu4wiJbuZgLuQwBVJ+GADinUAJbvPFrvEFLu7wBVJ+AABYAOKdYJvindgA4ThPgFKu+0BFrv9FLv0wBVJ+AABYAOKdYJvinc/SrwTATW8HgAAAQBgA4dVAR+8HodgAgACgLwxwBVJ+By8QIG8O8AVSgSFfAEAARa8Ti6G3aq4AITbADUAAAABAFsBF7xogrxmwBVKZoRYFrx6gbx1wBVKBIRYglmCWYIAwBVKZgaq3XW8jbySvTcAAKppAAAAAQO8nr03AAAAAQEBvKoAAACFE2ADhNkAAGADwAD60QE+Akm8vSW8zYC8wcAVSuJgA4dVPgFKvOwBHLz7FrzzLqhQqraHbwEAARS9EMAVSuIAAWADh1UAixo/Sr0oASkAABUwpAAVMjkAFTLDABUzTQAVNHcAFTVdABU2YwAVN20AFThXABU4tQAVOT4AFTp3ABU9OQAVPyYAFUD9ABVBXwAVQwMAFUNsABVEgAAVRPkAFUVIABVFwQAVRhAAFUaJABVG2AAVR1EAFUfKABVIoAAVSQ4AFUnbABVKxQAVSzUAAAAfAqrgdb08vULAASAlA6psAAABXQGaWAFgA4mmAAAaBKridb2SvZkJqFAAYAOLFQAEquN1vbO9wgmHbgBgA4sJAASq5HW92r3sGId9AF0DwAD9bQJgA8AA/n5gA8AA/n4ABKrldb37vhUJh64AYAPAAPrRAASq5nW+Kb4yCYd4AGADnJkABKrndb5MvlsJht0AYAObnwAEquh1vnO+gAmqXwBgA6t+AASq6XW+kL6bCZ8QAGADwAD60QAEqup1vqu+vQmqbQBgA4OcAASq63W+yL8DCapuAGEDAWADiOlgA8AA+tEBFr71H77dq50AAAAAqm6rkgSq7HW/Jr87CapvAF0DwAD9bQJgA4mmYAOJpgAEqu11v1e/YAmqcABdA8AA/W0CYAOCS2ADwAD95AAEqu51v3e/kgme8gBgA6fDAR+/hKg6AAAAAASq73W/qL+7GKpxAF0DwAD9bQJgA4MbYAPAAPrRASsEqvB1v9O/9AmqcgBgA4m8AR+/5onDAAAAAASq8XXAAEALwABAMAmqcwBgA4nEAR/AAEAeicsBAAEpAASq8nXAAEBHwABAbgmqdABgA4nEAR/AAEBbicsBAAEqAASq83XAAECIwABAmQmqdQBdA8AA/TsBYAOCUgExwABAl2ADglIABKr0dcAAQK7AAEC9GKp2AGADq1IBKwSq9XXAAEDXwABA2hiWpwBgA6tgAASq9nXAAEDuwABBHxiqdwBdA8AA/i8BYAOE2QEewABBBcAAwacAAWADhNkAAASq93XAAEE7wABBaxiqeABdA8AA/W0CYAOJpmADiaYBHsAAQUnAAMGeAAJgA4mmYAOJpgAABKr4dcAAQXXAAEGJGKp5AGADwAD60QErBKr5dcAAQb3AAEHGGKp6AGADwAD8lwErBKr6dcAAiLXAAIj8Bap7AGADwAD+DgEewACI2MAA/icBAAEnqnwABKr7dcAAiQ7AAIrIBqp9AF0DwAD9OwFgA8AA/n4BasAAiSJdA8AA/TsBYAPAAP5+wADgcgEFq1F1wABCisAAQorAAEe4AAAAA8AAQpvAAEe4AAAABgQEwABCoQAABKhQYAOLFQDAAEKvAAAEh31dA8AA/W0CYAPAAP5+YAPAAP5+AMAAQsgAAASG3WADm58AwABC5AAABKpfYAOrfgACwABC/wAABJ8QYAPAAPrRAWrAAEMNYAPAAPrRAMAAQxkAAASHrmADwAD60QFqwABDNmADwAD60QBgA6rgAT4CScAAROUiHMAARPwWwABE6S6HfarkSAEAASsAwAD98QAhFsAARRAWwABFCC6oUKrih3CLHT4BPTDAAEU2H8AARUDAAPvKAQABJAACJ6p+J6p/AD89F8AARe4uqnEywABGEWADgxtgA8AA+tEMFsAARiMWwABGGS6HeKrmmwGc4CkWwABGRBbAAEY6Lod4quabBZznKhbAAEZoFsAARl4uh3iq5psCnOwpFsAARogWwABGfi6HeKrmnGic7SkWwABGsxbAAEapLod4quabDZzzKRbAAEbUFsAARsouh3iq5psPnPcpFsAARvQWwABG6i6HeKrmmwCc+ykWwABHFRbAAEcLLod4quaa/5z9KRbAAEc4FsAARy4uh3iq5psOnPYpFsAAR1gWwABHTi6HeKrmmwadCykWwABHexbAAEdxLod4quabB50MKRbAAEeeFsAAR5Quh3iq5psInREpqu8NCAGq4oAAwBVO3ggBquSBAMAVTuwIAarnggDAFU8JCAGq6IMAwBVPFwgBqumEAMAVTyYIAarlhQDAFU9CCACq4xbAAENggMAAQ1jAFU7eh26LHAgAquYWwABDlYLAAEOFwBVPCYd4m6EIAKrsMsAAQ9RgA4mmYAOJpgAIAKrtMsAAQ/xgA4JLYAOJpgAIAKr1H8AARBKrcAAAAAAIAKrqJsAAREYBI4TAAERIwBVPJhzAAESTFsAARHwWwABEcoLAAERiwBVPCYd4m6EnnJycRAMAAyee+CeqgCeqgQCmvSsBYAODfWADg5wJAcAAQoqaXAAAAABRBqr9dcAAQfXAAEH+wABCOwEAqoIAAAABA8AAQhLAAEI7AAAAAAAAAGADwAD60QFKwABCFQEiFsAAQhUuqnmq+AEhHMAAQjcWwABCLS6qeqr5SAEAAZMAwAD9uwaq/nXAAEJAwABCScAAQoUBAKqDAAAAAQPAAEJdwABChQAAAAAAAABgA8AA+tEBSsAAQmABHMAAQnAWwABCYC6HbqrjSAEAAWrAAEKDYAOLCYXeAMAA/fEGqwB1wABHvcAAR8HAAEhdAACc/gAAAAEDwABHy8AASF0AAAABAQHAAEfVAAAAg/NgA4JSAABgA8AA/v8BPgJDwABH4SIhHMAAR+2AwABH6MAVUpRIAQABKwDAAP3xACElwABH/YDAAEf4wBVSlGADgm8+AT2IwABIFsAVUpQWwABIIoDAAEgdwBVSlIRXglhKwABINAE1AAAAAQBgA4JvASbAAEhBAIDAAEg8wBVSlGADgm8jHMAASFKBAMAVUwRIAQABKwAAKxbAAEhSgQDAFVMEhGaCcQFgA8AA/v8GqwF1wABIYsAASGbAAElhAACqhAAAAAEDwABIc8AASWEAAAACAgLAAEh4AAAAgKxgA8AA/v8AwABIhgAAAIPzYAOCUgAAYAPAAPyXAT4DScAASJIcwABImoDAAEiWwBVTckgBAAErAMAA/yZKwABIowFqwABIs2ADwAD8l4GeP0PAAEjBIiEcwABIzYHAAEjIwBVTgkgBAAErAMAA/fEAHMAASOgWwABI3YHAAEjYwBVTgoRYgllIAQABasAASPRgA8AA/JeBngDAAP27PgE9icAASQbAFVOCFsAASRKBwABJDcAVU4KEV4JYSsAASSQBIxzAAEkwgcAASSvAFVOCSAEAASsAwAD98WrAAElDYAPAAPyXgZ4WwABJU4HAAElOwBVTgoRYglkBYAPAAPyXBqsCdcAASnDAAEp5wABQnQAAnyIAAAABA8AASoHAAFCdAAAAAQEBwABKjQAAAIPzYAOE2QAAYAOJpgE+Az0XwABKmS6qeSqq+D0XwABKuy6qepOq+Us+A07AAErjwABK6gAAgXZgA4mmARzAAErsLqqFqqMBAAGAwABLA8AVVKIAqw9JwABLECIWwABLFC6HrqrlACXAAEs5gcAASzLAFVTUYAOKdT4BSsAAS1sBHMAAS2IugcUCAAKAwABLacAVVKJqwABLb2ADkaOfFgCrAz9KwABLmwGBwABLosAVVNQAAsAAS7BgA6txAcAAS8sAAAGDU2ADq3EAAD4ITsAAS+DAAEvkAAGArGADwAD+/wEcwABL5i6c/gEAARbAAEvzgcAAS/HAFVVmg/OrcwCrAE7AAEwKwABMFQABhFhgA8AA/JcBHMAATBcuqoQCAAKCwABMJcAVVXgWwABMLIHAAEwqwBVVZoPzq3MAqwFOwABMP8AATE4AAYjdYAORtgEcwABMWhbAAExSgcAATFDAFVVmIqt0gl8DAAOCwABMZ8AVVXiDwABMbMAVVaxqwABMeGADwAD8lxUAkZ9OwABMkMAATKAAAaqGXQPAAP07AWADkbYBMcAATLJgA5G2AEnAAEy8IRzAAEzKFsAATMKBwABMwMAVVWaCV6t1SAEAASsAwAD9ZT0cwABM44XAAEzTwBVWN4ClAQABFsAATOyBwABM6sAVVWaCV6t1AMAA/U0/RsAATPzAAE0mwABNEAAAAYPzYAOCUgAWwABNGC6qdarzPgNOwABNOsAATT4AAYCsYAPAAP7/ARzAAE1ALpz+AQABhsAATUvAFVa1AKsATsAATWTAAE1vAAGEWGADwAD8lwEcwABNcS6qhAIAAofAAE1/wBVW0IbAAE2EwBVWtQCrAT0cwABNo4XAAE2TwBVWN1YBAAEcwABNzGrAAE20YAORo5gtgl8DAAOHwABN2cAVVtAUwABN3sAVVvsIAGrAAE3qYAPAAPyXFQCRqwDAAP1MPRzAAE4SFsAATgQuql+q6IHFAgAChMAAThnAFVXphcAATinAFVY3AKuASsAATkEBH8AATkyKfwEAAR/AAE5khOsBAAEWwABOgBbAAE54gcAATnbAFVVmIqt0IpGbAADAAE6RYAOreAHAAE64AAABg1NgA6t4AAA+BE7AAE+ZwABPoQAAqodgA4ThAR/AAE+nhOsBAAEWwABPu4HAAE+5wBVX5iKrewBJwABPyxzAAE/iFsAAT9eCwABPz8AVV/iEWIJZSAEAAWrAAE/uYAPAAPyXgZ4AwAD9uz4BPRfAAFAKgsAAUALAFVf4hFgWwABQHIDAAFAXwBVUooRYglmCWT89HMAAUEQWwABQNi6qX6roqogBAAGCwABQXMAVV/gAq4FKwABQbAEfwABQd4p/AQABgsAAUIvAFVf4AAarA3XAAFDrwABQ8MAAUXwAAIHFAAAAAQPAAFD2wABRfAAAAAMCAsAAUQAAAACD82ADglIAwABRDgAAACJgA5GYAAHAAFEtAAAAglddA8AA/TsBYAORtgFqAGADwAD9oXlgA8AA/aEBPgE9MMAAUT0fwABRR6t3AwACgMAAUVjAFVjhgcAAUV7AFVjvAYJXgsAAUXDAFVj9BqsEdcAAUhfAAFIcwABSiAAAqokAAAABA8AAUinAAFKIAAAAAgICwABSMwAAAIPzYAOCUgDAAFJAAAAAImADwAD+fgAAYAPAAP2hAT4BPTDAAFJPH8AAUlmrfQIAAoDAAFJ2wBVZeYHAAFJ8wBVZhwAGqwV1wABSy8AAUtTAAFO6AACqigAAAAEDwABS38AAU7oAAAACAgLAAFLrAAAAnvFgA4TZAMAAUwAAAACEXGADhNkAAGADiaYBPgI9F8AAUx+BwABTE8AVWfiEWBbAAFM1gMAAUyzAFVnqhFiCWYJZSsAAU4sBH8AAU5aKfwEAAYHAAFOqwBVZ+AAGqwZ1wABUucAAVMTAAFW3AACqiwAAAAEDwABUy8AAVbcAAAABAQHAAFTVAAAAhhVgA4mmAABgA4TZAT4DTsAAVPDAAFT7AACCb2ADhNkBHMAAVQaAwABU/cAVWnSGsAAAAACJrUnAAFUaIRzAAFUwFsAAVR8uqneq9lYBAAGBwABVNMAVWosAwAD+PD4CPYnAAFVJwBVaixzAAFVdFsAAVVYunvKq7p7vAQFgA4TZAYHAAFVjwBVaiwCn1D0cwABVhxbAAFV2Lqp3qvZWAQABgcAAVYvAFVqLAMAA/jw/SsAAVaIBgcAAVanAFVqLBqsHdcAAV7LAAFe3wABX0QAAqowAAAABA8AAV8DAAFfRAAAAAAAAAFwBSsAAV8YBNQAAAAEAYAPAAPyXARbAAFfGLqp6qvk1AAAAAQBgA8AA/JcBF8AAV8YuqnocwABXz4AAwBVbbGQBAAGUAMAA/b2q+YAAwBVbbAarCHXAAFgRwABYFsAAWDAAAKqNAAAAAQPAAFgfwABYMAAAAAAAAABcAUrAAFglATUAAAABAGADwAD8lwEWwABYJS6qeqr5NQAAAAEAYAPAAPyXARfAAFglLqp6HMAAWC6AAMAVW+WBjQEAAZQAwAD9vqr5gADAFVvlBqsJdcAAWDXAAFg+wABZYwAAhpQAAAABA8AAWEPAAFljAAAAAgICwABYTQAAAJ7xYAOJpgDAAFhgAAAAhFxgA4mmAABgA4mmAT4CScAAWHMhHsAAWHjAAPZ4AgACgMAAWILAFVxVgcAAWIzAFVxjAD4EPYjAAFiiwBVcVRzAAFitLp0hAQABgMAAWLrAFVxVAKtJPYnAAFjLwBVcYxzAAFjZLp0hAQABgcAAWObAFVxjAKtJPRzAAFkBFsAAWPouqniq94C/AgACgcAAWQLAFVxjgMAAWRHAFVxVAMAA/YJKwABZIQGBwABZKMAVXGM/SsAAWT8BHMAAWUYunSEBAAGBwABZU8AVXGMAq0kGqwp1wABZaMAAWXHAAFm6AACqjgAAAAEDwABZeMAAWboAAAABAQHAAFmCAAAAhhVgA4mmAABgA4mmAT4BSsAAWZIBNQAAAAEAYAOJpgEcwABZoBbAAFmZLqp4qvdLAQABgMAAWaHAFV1iAMAA/YEjHMAAWauBAMAVXX9IAQABKwAAgMAAWa7AFV1igQDAFV1/AWADiaYGqwt1wABZv8AAWcjAAFpkAACHawAAAAEDwABZ2cAAWmQAAAABAQHAAFnnAAAAhhVgA4oTAABgA4mmAT4CScAAWfcWwABZ+y6qgqr9SsAAWhABgMAAWhfAFV34P0rAAFolARzAAFosLoaUAgACgMAAWjLAFV34HMAAWkQWwABaPC6oUKrih2sBAAGAwABaVsAVXfgAixcAqwkGqwx1wABaacAAWnLAAFsLAACHbAAAAAEDwABagsAAWwsAAAABAQHAAFqPAAAAhhVgA4okAABgA4mmAT4CScAAWp8WwABaoy6qgqr9SsAAWrgBgMAAWr/AFV6RP0rAAFrNARzAAFrULoaUAgACgMAAWtrAFV6RHMAAWuwWwABa5C6oUKrih2wBAAGAwABa/cAVXpEAixgAqwkGqw11wABbEMAAWxnAAFuyAACHbQAAAAEDwABbKcAAW7IAAAABAQHAAFs2AAAAhhVgA4n2AABgA4mmAT4CScAAW0YWwABbSi6qgqr9SsAAW18BgMAAW2bAFV8qP0rAAFt0ARzAAFt7LoaUAgACgMAAW4HAFV8qHMAAW5MWwABbiy6oUKrih20BAAGAwABbpMAVXyoAixkAqwkGqw91wABcXsAAXGfAAF9NAACqhaqjAAAAAQPAAFx9wABfTQAAAAEBAcAAXIkAAACD82ADhNkAAGADiaYBPgZOwABcmsAAXKkAAKqPYAPAAPrRARbAAFyrLqp5qvg9F8AAXMUuqnkqqvhOwABc8AAAAIF2YAOJpgBJwABc/BbAAF0EFsAAXQAulqeq9YFVq2c+AUnAAF1zHMAAXYEWwABddy6qcKrth1gBAAGAwABdjcAVX8UAwAD9gD4BPYrAAF2ewBVgBibAAF2eATUAAAABAGADwAD95AEcwABdsBbAAF2nLqpwqu1LAQABgMAAXbHAFV/FAMAA/YEjHMAAXbeDAMAVYGhIAQABKwAAHMAAXbougcUCAAKAwABdwcAVX8VqwABdx2ADkaOYCACrA4MAwBVgaAFgA8AA/eRgA4mmPgI9HMAAXgUWwABd/C6qcKrtgL8CAAKAwABeBsAVX8UrAMAA/YJLPgE9isAAXizAFWAGNQAAAAEAXQPAAP1tAmADgktgA8AA/eQBFsAAXjUuqnCq7TUAAAABAGADhNkBgMAAXj/AFV/FNQAAAAEAWwEcwABeTIDAAF5HwBVfxYRSAQABLgCE3TUAAAABAFwBHMAAXj6DwABePsAVYQ+AvwIAAoTAAF4+wBVhMYUAwBVhRQDAAP2ChQDAFWFFAAHAAF5kWwHAAF5rAAABg1NbAAA+Aj0cwABehBbAAF56Lqpwqu2EXgEAAYDAAF6LwBVfxQDAAP2KPS/AAF6cPgE9isAAXsrAFWAGJsAAXsoBHMAAXtiAwABe08AVX8WEUgEAAS4AhN1gA4mmPRfAAF7wLqp5IoHAAF8HwBVf3AElwABfIILAAF8ZwBVgBmADinWq+ErAAF88AYLAAF9DwBVgBgarEHXAAF9SwABfW8AAX+MAAKqQqqMAAAABA8AAX3nAAF/jAAAAAQEBwABfhQAAAIPzYAOE2QAAYAOJpgE+AknAAF+RHMAAX5qAwABflcAVYmRIAQABKwDAAP3xSsAAX6MBFsAAX6ouqnKq8D9KwABfvAEcwABfwy6qhaqjAQABgMAAX9rAFWJkAKsPBqsRdcAAX+jAAF/xwABgigAAqmsAAAABA8AAYAHAAGCKAAAAAgICwABgCwAAAIPzYAOCUgDAAGAaAAAAqpFhAwBgA4mmAABgA4mmAT4BTD4CPRzAAGAzLqqSAQABgMAAYD/AFWLuAKsTSsAAYEwBHMAAYFaBwABgU8AVYvwgAAAAAAA+AT0cwABgcC6qkwEAAYDAAGB7wBVi7gCrFAarEnXAAGCPwABgmMAAYUgAAKqUAAAAAQPAAGCzwABhSAAAAAICAsAAYL0AAACD82ADglIAwABgzAAAAKqRYQMAYAOJpgAAYAOJpgE+AUnAAGDZFsAAYOoWwABg3S6qdarzgVXAAP0dPgFKwABg+wEcwABhAi6qawIAAoDAAGETwBVji4HAAGEZwBVjmQCrET4BSsAAYTIBHMAAYTyBwABhOcAVY5kgAAAAAAAGqxN1wABhTcAAYU3AAGGWAACqkgAAAAEDwABhWMAAYZYAAAABAQHAAGFiAAAAqpVgA4JSAABbAT4BPRzAAGGCFsAAYXUuqnWq81YBAAGAwABhhsAVZDcAwAD9TAarFHXAAGGbwABhm8AAYiEAAKqTAAAAAQPAAGGlwABiIQAAAAEBAcAAYa8AAACqlWADglIAAFsBPgJAHMAAYdsWwABh1hbAAGHJLqp1qvOB6sAA/SBIAQABgMAAYd7AFWSTAMAA/fHAAGHJwABh6QA9F8AAYf0WwABh8C6qdarzYRzAAGIaFsAAYhMWwABiBi6qdarzYcAA/WuBjQEAAZQAwAD9vsAA/WkGqxV1wABiJsAAYibAAGMGAACHHAAAAAEDwABiNcAAYwYAAAABAQHAAGI7AAAAg/NgA4JLAABgA4mmAT4BSsAAYqABHMAAYqcuqokCAAImwABivgGAwABivsAVZTxgA4JSJMAAYwEDJ6qWFsAAYvOAwABi7sAVZTyFlsAA/fgnmhwAqwQGqxZ1wABjC8AAYwvAAGM9AACF+gAAAAEDwABjG8AAYz0AAAABAQHAAGMoAAAAg/NgA4bMAABgA4mmAUrAAGMxARbAAGMxLqpyqvAGqxd1wABjQsAAY0LAAGOSAACF+AAAAAEDwABjUsAAY5IAAAABAQHAAGNfAAAAg/NgA4bDAABgA4mmAT4BSsAAY2sBHMAAY3IuqpcBAAEWwABjiIDAAGODwBVmC4CWhsUAqz4Gqxh1wABjl8AAY5fAAGTEAACF8wAAAAEDwABjpsAAZMQAAAABAQHAAGOyAAAAg/NgA4axAABgA4mmAT4BSsAAZCkBIxbAAGQwLqqDqv4cwABkTi6dIQEAAR/AAGRfqrMBAAEWwABkhYDAAGSAwBVmboCWhrMAAKtJHMAAZJcunSEBAAEfwABkqInTAQABFsAAZLmAwABktMAVZm6AloazAACrSQFgA4mmBqsZdcAAZMnAAGTJwABlLQAAhfYAAAABA8AAZNvAAGUtAAAAAQEBwABk6gAAAIPzYAOGugAAYAOJpgE+AUrAAGT2ARzAAGT9Lp0hAQABHMAAZQouqpgBAAEWwABlIoDAAGUdwBVnF4CWhrwAqz8Aq0kGqxp1wABlMsAAZTLAAGWWAACF8QAAAAEDwABlRMAAZZYAAAABAQHAAGVTAAAAg/NgA4aoAABgA4mmAT4BSsAAZV8BHMAAZWYunSEBAAEfwABld4nmAQABFsAAZYuAwABlhsAVZ4iAloaqAACrSQarG3XAAGWbwABlm8AAZjcAAIX/AAAAAQPAAGWrwABmNwAAAAEBAcAAZbgAAACD82ADhuAAAGADiaYBPgJOwABl08AAZdgAAYKUYAOI6QEcwABl2i6qmQIAAoDAAGXrwBVn9hbAAGX2gMAAZfHAFWf2gpSG4gCrRUrAAGYBARzAAGYILp0hAQABH8AAZhmKdAEAAYHAAGYtwBVoDQAAq0kGqxx1wABmPMAAZjzAAGniAACGFgAAAAEDwABmU8AAaeIAAAABAQHAAGZnAAAAg/NgA4dVAABgA4mmAT4ETsAAZnzAAGaFAACGFWADiaYBFsAAZoyAwABmh8AVaJaGFYdXTsAAZqPAAGaqAACBdmADiaYBgcAAZqzAFWitScAAZrolwABmx4HAAGa+wBVorWADinU+AT2KwABm58AVaNEcwABm8C6qawIAAhbAAGcKFMAAZwHAFWitAQFgA4p1gm+KdzTAAGcWA8AAZxbAAGdeAAAAAAAAAGADiaYBPgFKwABnIwEcwABnKi6qhaqjAQABFsAAZ0oUwABnQcAVaK0BAWADinWCb4p3AKsPAKsRScAAZ2wWwABncC6qg6r+PgFJwABnjSXAAGeagcAAZ5HAFWitYAOJ1D4CTsAAZ77AAGfEAACAlmADwAD7SQEWwABnzxTAAGfGwBVorQEBYAOJ1ICWibRJwABoHyIWwABoKYPAAGgjwBVpqaqawAD94AAcwABoThzAAGg7g8AAaDXAFWmpqpsAAAAAwAD7ZUgBAAGDwABoUcAVaakAwAD9uz4BPYrAAGhkwBVo0R/AAGhxqrEBAAGDwABoksAVaakAPz8/SsAAacMBHMAAacounSEBAAGCwABp18AVaNEAq0kGqx11wABp58AAaefAAGtnAACGBwAAAAEDwABp98AAa2cAAAABAQHAAGoEAAAAg/NgA4cIAABgA4mmAT4EScAAahAhFsAAahqAwABqFcAVaoWEIocKPgFKwABqKwEcwABqMi6BxQIAAoDAAGpEwBVqhRzAAGpuasAAakpdA5GvAWEDAWADwAD+fmADkZid24gvAQABJ5wAAJGzAKsDP07AAGqqwABqsgABhCZgA6usAR/AAGrAq7IDAAOAwABq1MAVaoUWwABq34DAAGrawBVqhYXThwsuAEbAAGr4wABrJcAAawgAAACWUmADhNkAFsAAaxiAwABrE8AVaoWFz4cMPgE9HMAAazWBwABrLcAVav1WAQABgsAAaznAFWs+AKumSsAAa00BHMAAa1yBwABrVMAVav2i2wAAAACrsAarHnXAAGtswABrbMAAbHIAAIXWAAAAAQPAAGuCwABscgAAAAEBAcAAa5UAAACD82ADhkwAAGADiaYBPgNOwABru8AAa8MAAYQmYAOrrAEfwABr0auyAwADgMAAa+XAFWvCFsAAa/CAwABr68AVa8KF04ZOLgBGwABsCcAAbC3AAGwZAAAAg2FgA4TZABbAAGwmgMAAbCHAFWvChdSGTz4BPRzAAGw9gcAAbDXAFWvZqpwBAAGCwABsR8AVbBoAq6dKwABsWAEcwABsZ4HAAGxfwBVr2aLbAAAAAKuwBqsfdcAAbHfAAGx3wABt8gAAhgkAAAABA8AAbIbAAG3yAAAAAQEBwABskgAAAIPzYAOHFQAAYAOJpgE+BEnAAGyeIRbAAGyogMAAbKPAFWyfhCKHFz4BSsAAbLkBHMAAbMAugcUCAAKAwABs0sAVbJ8cwABs/GrAAGzYXQORrwFhAwFgA8AA/n5gA5GYnduILwEAASeccgCRswCrAz9OwABtNsAAbT4AAYQmYAOrswEfwABtTKu7AwADgMAAbV/AFWyfFsAAbWqAwABtZcAVbJ+F04cYLgBGwABtg8AAbbDAAG2TAAAAllJgA4TZABbAAG2jgMAAbZ7AFWyfhc+HGT4BPRzAAG3AgcAAbbjAFW0XVgEAAYLAAG3EwBVtWACrpkrAAG3YARzAAG3ngcAAbd/AFW0XotsAAAAAq7kGqyB1wABt98AAbffAAG74AACF2gAAAAEDwABuDMAAbvgAAAABAQHAAG4eAAAAg/NgA4ZYAABgA4mmAT4DTsAAbkPAAG5LAAGEJmADq7MBH8AAblmruwMAA4DAAG5swBVt3BbAAG53gMAAbnLAFW3chdOGWi4ARsAAbpDAAG6zwABuoAAAAKqdYAOE2QAWwABurYDAAG6owBVt3IXYhls+AT0cwABuw4HAAG67wBVt86qcAQABgsAAbs3AFW40AKunSsAAbt4BHMAAbu2BwABu5cAVbfOi2wAAAACruQarIXXAAG79wABu/cAAcH0AAIYLAAAAAQPAAG8MwABwfQAAAAEBAcAAbxgAAACD82ADhyIAAGADiaYBPgRJwABvJCEWwABvLoDAAG8pwBVuuYQihyQ+AUrAAG8/ARzAAG9GLoHFAgACgMAAb1jAFW65HMAAb4JqwABvXl0Dka8BYQMBYAPAAP5+YAORmJ3biC8BAAEnnAEAkbMAqwM/TsAAb7zAAG/EAAGEJmADq7wBH8AAb9KrygQABIDAAG/lwBVuuRbAAG/wgMAAb+vAFW65hdyHJRbAAG/+gMAAb/nAFW65hd2HJi4ARsAAcBTAAHA7wABwIgAAAJZSYAOHMAAWwABwMoDAAHAtwBVuuYPVhyc+AT0cwABwS4HAAHBDwBVvMVYBAAGCwABwT8AVb4QAq8VKwABwYwEcwABwcoHAAHBqwBVvMaLbAAAAAKvIBqsidcAAcILAAHCCwABxjAAAheAAAAABA8AAcJfAAHGMAAAAAQEBwABwqQAAAIPzYAOGZAAAYAOJpgE+A07AAHDOwABw1gABhCZgA6u8AR/AAHDkq8oEAASAwABw98AVcAgWwABxAoDAAHD9wBVwCIXchmYWwABxEIDAAHELwBVwCIXdhmcuAEbAAHEmwABxSMAAcTYAAACAq2ADhNkAFsAAcUKAwABxPcAVcAiF3oZoPgE9HMAAcViBwABxUMAVcB+qnAEAAYLAAHFiwBVwcgCrxkrAAHFyARzAAHGBgcAAcXnAFXAfotsAAAAAq8gGqyN1wABxkcAAcZHAAHInAACGEwAAAAEDwABxqMAAcicAAAABAQHAAHG8AAAAg/NgA4dKAABgA4mmAT4BSsAAccgBHMAAcc8ugcUCAAKAwABx38AVcPccwAByCWrAAHHlXQORrwFhAwFgA8AA/n5gA5GYnduILwEAASecBQCRswCrAwarJHXAAHIswAByLMAAfOkAAIW8AAAAAQPAAHJGwAB86QAAAAEBAcAAcl0AAACD82ADhfsAAGADiaYBPg1OwABye8AAcocAAZkIYAODzwEWwAByjoDAAHKJwBVxeoJJhgJOwABypsAAcqwAAamtYAODGwEWwAByuoHAAHKuwBVxkYUKg4VOwABy08AActwAAKqeYAPAAPrRARzAAHLkgsAAct7AFXG1SAEAARbAAHLxFsAAcucuh3iq5pxonO0AwAD98UnAAHMKIRbAAHMbgcAAcw/AFXGRhCKD2T4BSsAAcywBHMAAczMuqokCAAKAwABzQcAVcXonqp8AqwQ/ScAAc3ciIRzAAHOVFsAAc5AWwABzh4HAAHN7wBVxkYJug9OCbYTESAEAASsAwAD98QAhJcAAc8IWwABzvRbAAHO0gcAAc6jAFXGRgm6D04JthMRgA4e1PgFKwABz3gEcwABz5S6qiQIAAoDAAHP+wBVxeiQABieqoIDAAHQdwBVxeieqoSeDsxbAAHRiFsAAdF0WwAB0VIHAAHRIwBVxkYJug9OCbYTEhZbAAP34J0oAqwQ/ScAAdH4WwAB0iILAAHSCwBVxtYQfgzc+AUrAAHScARzAAHSjLqqJAgACgMAAdLzAFXF6JMAAdP0FJ6qggMAAdNHAFXF6J6qigsAAdPTAFXG1J0oAqwQ/TsAAdRHAAHUdAAGqo10DwAD9OwFgA4mmARzAAHUfLqqkAQABFsAAdUCAwAB1O8AVcXpbhf4Aq0ZOwAB1VsAAdVwAAYVtXQPAAP1tAmADwAD+fmADiaYBHMAAdV4uqqUBAAEWwAB1eoDAAHV1wBVxeluF/gCrR0nAAHWLIoPAAHWPwBVx2QAWwAB1my6qgqr9PgFKwAB1uAEcwAB1vy6qigIAAoDAAHXWwBVxeh/AAHXqhg0DAAKBwAB2AMAVcZEcwAB2Gy6qpgMAA4TAAHYwwBVzXYXAAHY9wBVzlRbAAHZTFsAAdkmAwAB2RMAVcXpbhf6FfYWlAKtIAYQiKQCrBT9JwAB3HIPAAHcgwBVx2T4DTsAAd0HAAHdLAAGqp2ADiaYBFsAAd1mEwAB3TcAVc12Aw8AA/SFJwAB3aCIlwAB3dobAAHdswBV0bmADid8AHMAAd4suqqgBAAEWwAB3pxTAAHedwBV0bgYBYAOJ34CWibQAqyY+AUrAAHe5ARzAAHfALp0hAQABH8AAd9GJ9QIAAhbAAHfqFMAAd+DAFXRuBgFgA4nfgJaJtCsAAKtJP0rAAHgHARzAAHgOLoHFAgACFsAAeC8WwAB4JBbAAHgagMAAeBXAFXF6W4X+haOFpoMewAD9HxzAAHhjasAAeEBdA5GvAWEDAWADiaZgA5GYnISILwEAAYbAAHhxwBV0bgCRswCrAz9OwAB4j8AAeJ0AAYUsXQPAAP07AWADiOkBHMAAeJ8uqqkCAAKAwAB4tcAVcXoWwAB4wIDAAHi7wBVxeluF/gCrQkXAAHkLAcAAeRTAAHkWAABiYAPAAPyXARbAAHkmhsAAeRjAFXV1YcAA/WsBHMAAeTCHwAB5LsAVdbtjAQABFsAAeUcWwAB5OILAAHkywBVxtYTFgyphwAD9awDAAP3FAY/AAHlPwBV1uxzAAHlQh8AAeU/AFXW7ZAEAAZQAwAD9vT4BPRzAAHlqhsAAeVzAFXV1VgEAAWrAAHl0YAOJAISbAMAA/UxKwAB5tQEmwAB5tQEcwAB5vC6qqgMAA4LAAHnTwBVxtYbAAHnawBV1dTTAAHnpA8AAeenAAHzkAAAAAAAAAGADiaYBPgFKwAB59AEcwAB5+y6qlAIAAoDAAHoXwBVxejTAAHodA8AAeh3AAHzcAAAAAAAAAGADiaYBPgRJwAB6rxbAAHqzLqqCqv0+BD0cwAB61C6qjAAAAACrBz0cwAB66y6qqwQABIHAAHsWwBVxkYbAAHsjwBV1dYTAAHsywBVzXYXAAHs/wBVzlQCrKD0cwAB7US6qjQAAAACrCErAAHtoARzAAHtvLqqKAgACgMAAe3vAFXF6HMAAe5EWwAB7gS6qdqr0qqwAAAAAq10AqwU/PRzAAHvALqqrBAAEgcAAe+nAFXGRhsAAe/bAFXV1hMAAfAXAFXNdhcAAfBLAFXOVAKsoScAAfCIWwAB8Ji6qgqr9PgFKwAB8RwEcwAB8Ti6qigIAAoDAAHxawBVxehzAAHxwFsAAfGAuqnaq9KqsAAAAAKtdAKsFP0rAAHyfARzAAHymLp0hAQABHMAAfMMWwAB8sy6qdqr0qq0AAAAAq1wAq0kAqxIAq0pgA4mmBqsldcAAfO7AAHzuwACANAAAheYAAAABA8AAfQPAAIA0AAAAAQEBwAB9FQAAAIPzYAOGcQAAYAOJpgE+AUrAAH0hASbAAH0hARzAAH0oLqqqAwADFsAAfUSAwAB9P8AVeEKE74Z5FsAAfVSAwAB9T8AVeEKFLIZ0NMAAfWMDwAB9Y8AAgC8AAAAAAAAAYAOJpgE+BUbAAH1uwAB9nsAAfYMAAACFYGADh70AFsAAfZWAwAB9kMAVeEKF5IZ2PgE9HMAAfaguqq4BAAGBwAB9tMAVeLgAqyk9HMAAfd8WwAB904DAAH3OwBV4QoXjhnWD/QEAATTAAH3nA8AAfefAAH58AAAAAgICwAB98gAAAIXnYAOCewDAAH4HAAAAgJZgA4TZAABgA8AA/aEBPgE9HMAAfigWwAB+GC6qdqr0qq8CAAIWwAB+TIHAAH5DwBV5I4RzgoUcwAB+VS6qhaqjAQABgsAAfmzAFXkxAKsPAKtbAMAA/Yw9HMAAfpoWwAB+ioDAAH6FwBV4QoXlhneD/QEAATTAAH6iA8AAfqLAAH90AAAAAQEBwAB+rgAAAICWYAOE2QAAYAPAAP2hAT4CTsAAfsjAAH7RAACGFWADiaYBHMAAftMuqoWqowEAAYHAAH7qwBV5wgCrD0nAAH76JcAAfweCwAB+/sAVedtgA4p1PgE9HMAAf0sWwAB/OxbAAH8rLqp2qvSF5atZVgEAARzAAH9PLqqLAQABFMAAf1fAFXnbAgFgA4p1AKsGAMAA/Uw/AMAA/QlJwAB/fRbAAH+BLqqCqv0+AUrAAH+gARzAAH+nLqqKAgACgMAAf7PAFXhCHMAAf8kWwAB/uS6qdqr0qqwAAAAAq10AqwU/SsAAf/QBHMAAf/sunSEBAAEcwACAGBbAAIAILqp2qvSqrQAAAACrXACrSQCrSmADiaYGqyZ1wACAOcAAgD7AAIabAACqqAAAAAEDwACAT8AAhpsAAAABAQHAAIBXAAAAgL1gA8AA/n4AAGADwAD60QE+CUnAAISQHMAAhJmAwACElMAVewJIAQABKwDAAP6NSsAAhKIBKj9JwACEtBzAAIS9gMAAhLjAFXsCSAEAAScAAMAA/o1KwACExAEpP07AAITcwACE4gABhIZdA8AA/TsBYAPAAP5+ARzAAITpgMAAhOTAFXsCgKYBAAEngWoAwAD+oUXAAIUtAcAAhTbAAIU4AABiYAPAAPyXAZMBHMAAhT+CwACFPcAVe6NjAQABHMAAhU4WwACFR4HAAIVBwBV7aGHAAP1rgY0BAAGUAMAA/b4AwAD9xQGKwACFVcAVe6McwACFU4LAAIVVwBV7o2QBAAGUAMAA/b0+AUnAAIVgIRzAAIVlLqqwAQABHMAAhYKBwACFfcAVe2hLAQABgsAAhYPAFXujAMAA/UoAqydKwACFiAEqP07AAIWowACFrQAAgepgA8AA/n4BFsAAhbWBwACFr8AVe2iB6sAA/SBJwACFvxzAAIXRasAAhcNdA8AA/TsBYAPAAP5+wADg/YMcAQABgsAAhdrAFXxSAMAA/Qg+AUrAAIXpASk/ScAAhgAcwACGCYLAAIYEwBV8Uk8BAAEngLwAwAD+jz4BPYrAAIYgwBV8UhzAAIYsgsAAhifAFXxSgL4CAAKTHMAAhkUWwACGPoLAAIY5wBV8UmHAAP6CgY0BAAGUAMAA/b4AwAD+lD9JwACGVSEcwACGWi6qsAEAAYLAAIZywBV8UgCrJ0rAAIZ5ASo/SsAAhowBKQarJ3XAAIrNwACK0sAAi1oAAKqwAAAAAQPAAIrpwACLWgAAAAEBAcAAivEAAACAvWADwAD+fgAAYAPAAPrRAT4BSsAAiv0BIhzAAIsbGsAAiwSq+qqxAQABgMAAiyTAFX1xAMAA/hsAIRzAAItIasAAizZdA8AA/TsBYAPAAP5+wADgcoMcAQABgMAAi1HAFX1xAMAA/QgGqyh1wACLX8AAi1/AAJiRAACqqwAAAAEDwACLesAAmJEAAAAEBATAAIuOAAAAmQhgA4PPAMAAi7AAAACFLF0DwAD9OwFgA4jpAMAAi9QAAACqsl0DwAD9OwFgA4mmAMAAjAUAAACqs10DwAD9bQJgA8AA/n5gA4mmAABbAT4BSsAAjBsBHMAAjCIuqmsCAAKAwACMM8AVfgg0wACMQAPAAIxAwACYjAAAAAAAAABgA4mmAT4BSsAAjEsBJsAAjEsBHMAAjFIuqmIBAAE0wACMZQPAAIxlwACYhAAAAAAAAABgA8AA/aEBPghOwACMfsAAjIQAAamtYAODGwEWwACMkoDAAIyGwBV+CIUKg4VOwACMvcAAjMYAAYJuYAOErgEWwACM1IDAAIzIwBV+CIJug9NFwACNhAHAAI2NwACNjwAAYmADwAD8lwGTARzAAI2WhsAAjZTAFX8ZYwEAARbAAI2tFsAAjZ6EwACNmMAVfsyExYMqYcAA/WsAwAD9xQGOwACNtcAVfxkcwACNtobAAI21wBV/GWQBAAGUAMAA/b0+AT0cwACNyhbAAI3GLpanqvWqtAIAAhzAAI30FsAAjeaEwACN4MAVfsyExYMqSwEAAYbAAI31wBV/GQDAAP1KHMAAjgaBwACN+cAVfhZLAQABhsAAjgfAFX8ZAMAA/UoAq2pFwACOHgHAAI4nwACOKQAAYmADwAD8lwGTARzAAI4whsAAji7AFX/rYwEAARbAAI5QFsAAjjuFwACOMsAVfvCEx4S1YcAA/WsAwAD9xQGOwACOWMAVf+scwACOWYbAAI5YwBV/62QBAAGUAMAA/b0+A07AAI6DwACOjQABgO1gA4h+ARzAAI66FsAAjqaFwACOncAVfvCEx4S1SwEAAYbAAI67wBV/6wDAAP1KTsAAjtjAAI7eAAGAlmADiaYBIxzAAI7jhsAAjuHAFX/rYwEAARbAAI75gsAAjuXAFX4rYcAA/WsAwAD9xRzAAI8kgsAAjxHAFX4rSwEAAYbAAI8lwBV/6wDAAP1KHMAAjzguqpCqowEAARbAAI9hh8AAj1fAFYBXhROIhgCrEAFgA4mmPRzAAI99FsAAj3kulqeq9apnAgACh8AAj47AFYBXFMAAj5nAFYCSCAAAq2tGwACPs8AAj/nAAI/SAAABgO1gA4h+ABbAAI/ohcAAj9/AFX7whMiEtj4CTsAAkBTAAJAaAAGAlmADiaYBNQAAAAEAYAOJpgEcwACQKoPAAJAcwBV+QEsBAAEWwACQNYbAAJArwBWBSoC9iIIAwAD9gSMcwACQO4cAwBWBf0gBAAErAAAcwACQTC6qkKqjAQABFsAAkHWGwACQa8AVgUqFE4iGAKsQhwDAFYF/AWADiaY9HMAAkJEWwACQjS6Wp6r1qmcCAAKGwACQosAVgUqHwACQrcAVgW0Aq2tGwACRM8AAkVvAAJFEAAABhJtgA4OcABbAAJFThMAAkU3AFX7MhIuDLj4BScAAkWchFsAAkXKGwACRbMAVgiWEHoOuPgE9HMAAkZoWwACRii6qdqr0qq8CAAKGwACRucAVgiUcwACRwC6qkKqjAQABFsAAkeWGwACR38AVgiWFE4OgAKsQAKtbP0bAAJISwACSS8AAkikAAAGqtWADhGEAFsAAkj2AwACSMcAVfgiFJoPUPgFJwACSVyXAAJJghsAAklvAFYKuYAOEbz4BPRzAAJKTFsAAkoMuqnaq9KqvAgACFsAAkrcUwACSssAVgq4GAWADhG+Em4R0HMAAkr4uqoWqowEAARbAAJLaFMAAktXAFYKuBgFgA4RvgJaEcgCrDwCrW0nAAJL0JcAAkv2GwACS+MAVgq5gA4ScPgJOwACTOsAAk0MAAYJwYAOIfgEWwACTShTAAJNFwBWCrgYBYAOEnIJwhJ49HMAAk2QWwACTYC6Wp6r1qmcCAAKHwACThsAVg1scwACTkC6qhaqjAQABFsAAk7CHwACTp8AVg1uFE4iGAKsPAKtrScAAk9AlwACT2YbAAJPUwBWCrmADhH4+AT0cwACT/C6qqwQABBbAAJQuFMAAlCnAFYKuBgFgA4R+gkmEgxzAAJRGLqq2AgACFMAAlHbAFYKuBgFgA4R+FsAAlJcWwACUiIDAAJR8wBV+CIUKg4WE4YMrAKtDHMAAlLMuqqQBAAEWwACU1BTAAJTPwBWCrgYBYAOEfluEgQCrRhzAAJTwLqqlAQABFsAAlQwUwACVB8AVgq4GAWADhH5bhIEAq0cAqyhJwACVKiXAAJUzhsAAlS7AFYKuYAOEjT4BPRzAAJXlLqqrBAAEFsAAlhcUwACWEsAVgq4GAWADhI2CSYSSgcAAli/AFX4WHMAAlk4uqqQBAAEWwACWbxTAAJZqwBWCrgYBYAOEjVuEkACrRhzAAJaLLqqlAQABFsAAlqcUwACWosAVgq4GAWADhI1bhJAAq0cAqyhJwACWxSXAAJbOhsAAlsnAFYKuYAOEpT4BPRzAAJbyLqquAQABFsAAlwMUwACW/sAVgq4GAWADhKWFYISnAKspPgFKwACXLgEcwACXNS6qiQIAAoDAAJdUwBV+CCQABCeqtyeDsxbAAJe5hsAAl7TAFYKuhZbAAP34J0oAqwRGwACX6sAAmC/AAJgDAAAAhhVgA4p1ABbAAJgTFsAAmA8ulqeq9aq4q2g+AT0cwACYWxbAAJhLFsAAmDsuqnaq9IXlq1lWAQABHMAAmF8uqosBAAGGwACYZ8AVhaMAqwYAwAD9TACrS2ADiaYAqxEGqyl1wACYlsAAmJvAAJ+1AACqrgAAAAEDwACYpsAAn7UAAAABAQHAAJi3AAAAhWBgA4e9AABcAT4CTsAAmNfAAJjhAAGFymADiaYBHMAAmOMuqoWqowEAARbAAJkEgMAAmPrAFYYwhcqHvwCrD0nAAJkVFsAAmRkuqoKq/T4DTsAAmUHAAJlJAAAiYAOE2QErScAAmVchHMAAmW0WwACZZYDAAJlbwBWGMCKHwEgBAAErAMAA/fE+Az0cwACZgC6qjAAAAACrBz2KwACZlcAVhokcwACZny6qiwEAARzAAJmnLqqFqqMBAAEWwACZyIDAAJm+wBWGMCKHwACrDwCrBj0cwACZ2y6qjQAAAACrCD89HMAAmg4WwACaBhbAAJn2Lqp2qvSF5KtYVgEAAR/AAJoWh8kEAAEcwACaJi6qiwEAAYHAAJouwBWGRACrBgMigsAAmk3AFYaJhi4WwACagIDAAJp2wBWGMIYuh8GGLxbAAJq+gMAAmrTAFYYwhi+HwgDAAP1MScAAmt8lwACa7YHAAJrjwBWGRGADicQ+AUnAAJsGIRbAAJsVFMAAmwvAFYZEAQFgA4nEgJaJtD4DScAAmyYcwACbPBbAAJs0gMAAmyrAFYYwIofASAEAASsAwAD98T4BPRzAAJtRLoHFAgACFsAAm2KAwACbWMAVhjCFyoe/asAAm21gA5GjmbcAqwM/TsAAm7DAAJu4AAEiYAOJpgEcwACbui6qhaqjAQABFsAAm9uAwACb0cAVhjAih8AAqw9JwACb7RbAAJvxLqqCqv0+AT0cwACcKhbAAJwiFsAAnBIuqnaq9IXkq1hWAQABH8AAnDKHyQQAARzAAJxCLqqLAQABFMAAnErAFYZEAQFgA4nEAKsGAyIcwACcbS6qiwEAAYLAAJx1wBWIHgCrBoYuFsAAnK2AwACco8AVhjCGLofBhi8WwACc74DAAJzlwBWGMIYvh8IAwAD9TEnAAJ0UJcAAnSCCwACdGMAViB5gA4nfPgE9HMAAnT8ugcUCAAIWwACdX4DAAJ1VwBWGMIXKh78cwACdt2rAAJ14XQORrwFhAwFgA8AA/n5gA5GYmdyILwEAARbAAJ3NFMAAncXAFYgeAgFgA4nfgJaJtACRswCrAz4BPRzAAJ3xLoHFAgACFsAAnhGAwACeB8AVhjAih8AcwACeRWrAAJ4oXQORrwFhAwNgA4mmYAOI6WADiOlgA5GYnMyILwMAA4LAAJ5mwBWIHhbAAJ6RFsAAnoEuht2q54XQm7AcwACet4LAAJ6vwBWIHoavAQABFsAAnr8uht2q5wCJrACRswCrAz8+AT0cwACe+C6BxQIAAhbAAJ8UgMAAnwrAFYYwhcqHvxzAAJ9GasAAnyldA5GvAWEDA2ADiaZgA4jpYAOI6WADkZiczIgvAwADgcAAn1TAFYZEFsAAn30WwACfbS6G3arnhbWbrBzAAJ+RgcAAn4fAFYZEhq8BAAEWwACfmS6G3arnAImsAJGzAKsDBqsqdcAAn7rAAJ+6wACgGwAAhYgAAAABA8AAn9DAAKAbAAAAAQEBwACf4wAAAIPzYAOE4QAAYAOJpgE+AUrAAJ/vARzAAJ/2LqqJAgACgMAAoATAFYqfFsAAoA+AwACgCsAVip8ihOMAqwQGqyt1wACgIMAAoCDAAMajAACFtgAAAAEDwACgNcAAxqMAAAABAQHAAKBHAAAAg/NgA4XDAABgA4mmAT4IQBbAAKCsFsAAoKYWwACgnIDAAKCXwBWLCluFx4VthaeBVcAA/R3AAKCXwACgswBOwACgysAAoNMAAYWPYAOJpgEcwACg1S6qhaqjAQABFsAAoPGAwACg7MAViwqFj4XFAKsPTsAAoRXAAKEfAAFbXQPAAP07AWADiaYBHMAAoSkuqqQBAAEWwAChSoDAAKFFwBWLCluFxwCrRknAAKFbFsAAoV8uqoKq/T4BSsAAoXwBHMAAoYMuqooCAAKAwAChmsAViwofwAChroXUAwADHMAAob8uqosBAAGBwAChx8AVi1AAqwYWwACh14DAAKHSwBWLCoC9hcYcwACh6y6qpgMAA4LAAKIAwBWLhDLAAKILYAPAAP5+YAOJpgAWwACiHhbAAKIUgMAAog/AFYsKW4XHhX2FpQCrSAAAqwU/TsAAokDAAKJDAAGquWADwAD+fgEWwACiTxbAAKJKgMAAokXAFYsKgL2FxoC9iLdJwACi7SIcwACjAhbAAKL7gsAAovHAFYuEYcAA/WtIAQABlADAAP27ABzAAKMNg8AAowrAFYxfSAEAASdIAMAA/o0+BE7AAKMkwACjKgABhcdgA4mmARzAAKM1gsAAoyzAFYuESwEAAZMAwAD9SknAAKPzIhzAAKP3Loa+AQABgcAAo/3AFYtQAKs7ARzAAKQKLoa+AQABhMAApBDAFYzSAKs7PgFKwACkIgEWwACkKS6qdKryP0nAAKSFHMAApIkuqroBAAGBwACkkMAVi1AAqzo+AUrAAKSlARzAAKSsLqqXAQABHMAApL0uqroBAAGEwACkxMAVjNIAqzoAqz4/ScAApNwiIiIiIiXAAKTpgcAApODAFYtQYAOJvAElwAClD4HAAKUGwBWLUGADicQBJcAApTWBwAClLMAVi1BgA4nMASXAAKVagcAApVHAFYtQYAOJ1AElwAClgoHAAKV5wBWLUGADid8BJcAApaeEwAClocAVjNJgA4m8PgFKwAClwgEcwAClyS6qlwEAARzAAKXjgcAApdrAFYtQSAEAAYTAAKXmwBWM0gCJqwCrPj4BSsAApgUBHMAApgwugcUCAAKAwACmIMAViwocwACmXGrAAKYyXQORrwFhAwJgA4mmYAOI6WADkZia0ogvAgACgcAApnvAFYtQHMAApo6BwACmhcAVi1CGrwEAARbAAKaWLobdqucAiawAkbMAqwM/ScAApwslwACnGIHAAKcPwBWLUGADid8+AUnAAKczHMAAp0gWwACnQYLAAKc3wBWLhGHAAP1rSAEAAZQAwAD9uz4BR8AAp1iDwACnYMAVjF8BAcAAp3VqwACndWADwAD+fsAAnFUAPgNOwACnlcAAp5sAAYPbYAOJpgEcwACnpoLAAKedwBWLhEsBAAGTAMAA/UpJwACntyXAAKfBhMAAp7vAFY8WYAOJ3z4BSsAAp+QBHMAAp+sunSEBAAEfwACoD4nmAQABHMAAqC0WwACoJxTAAKgewBWLUAEBYAOJ34CWibRkAQABFsAAqDUUwACoL8AVjxYEAWADid+Alom0AMAA/pMAAKtJP0rAAKhYARzAAKhfLoHFAgACgMAAqHfAFYsKHMAAqLdqwACojV0Dka8BYQMEYAPAAP5+YAOJpmADiOlgA4jpYAORmJpviC8EAAQnZBTAAKjzwBWLUAEBYAOJ3xbAAKkhFsAAqREuht2q54XQm7AcwACpR4TAAKlBwBWPFoavAQABFsAAqU8uht2q5wCJrACRswCrAz9JwACpgCIlwACpjYHAAKmEwBWLUGADicwBJcAAqaiBwACpn8AVi1BgA6qpPgFJwACpyhzAAKnfFsAAqdiCwACpzsAVi4RhwAD9a0gBAAGTAMAA/bs+AUfAAKnvg8AAqffAFYxfAgHAAKoMasAAqgxgA8AA/n7AAOD6AD4DScAAqiIWwACqJi6qg6r+PgNOwACqUsAAqlgAAICWYAPAAPqjARbAAKp+JsAAqmQAgcAAqlvAFYtQYAOqqapUqqtJwACqmRzAAKqjhMAAqp3AFZDYSAEAARrAAKqtwAD6pQDAAP3xPgFKwACqxQEcwACqzC6dIQEAAR/AAKrdid4BAAEcwACq7CgAAAAAAAAAAIHGAAAAAMAA+1wAAKtJP0rAAKsSARzAAKsZLp0hAQABH8AAqyqqsgEAARzAAKtLhMAAq0zAFZDYgcYAAAAAwAD6sgAAq0k/TsAAq3PAAKt5AACAlmADwAD8lwEWwACrlSbAAKuFAIHAAKt8wBWLUGADicyAlom0SsAAq6gBHMAAq68unSEBAAEfwACrwInTAQABHMAAq8yEwACrzcAVkZ+BxgAAAADAAPy6AACrSQHAAKvlasAAq+VgA8AA/n7AALxeAD4DScAAq/YWwACr+i6qg6r+PgJOwACsJsAArCwAAICWYAPAAPqjARbAAKxSJsAArDgAgcAArC/AFYtQYAOqqapUqqtKwACsbQEcwACsdC6dIQEAAR/AAKyFqrIBAAEcwACswhzAAKy6hMAArLvAFZIuhJIAAAAAwAD6v6pZAQABNyAAwAD6yQAAq0k/TsAArPLAAKz4AACAlmADwAD8lwEWwACtFCbAAK0EAIHAAKz7wBWLUGADicyAlom0SsAArScBHMAArS4unSEBAAEfwACtP4nTAQABHMAArUuEwACtTMAVkqeEkgAAAADAAPyyAACrSUnAAK1sHMAArYEWwACteoLAAK1wwBWLhGHAAP1rSAEAAZQAwAD9uz4DTsAAraDAAK2mAAGD22ADiaYBHMAArbGCwACtqMAVi4RLAQABkwDAAP1KScAArb4iJcAArciEwACtwsAVkzdgA4nMASXAAK3ghMAArdrAFZM3YAOqqT4DScAArgYiIhzAAK4Og8AArgvAFYxfSAEAASeDvwDAAP6NARzAAK4cg8AArhnAFYxfSAEAASeDwQDAAP6NARzAAK4qg8AArifAFYxfSAEAASeV4QDAAP6NPgNOwACuR8AArlUAAKMQYAPAAP3kASMlwACuYIHAAK5XwBWLUGADicwWwACuihTAAK6BwBWLUAEBYAOJzICWibQWwACuxibAAK6sAIHAAK6jwBWLUGADqqmqVKqrAWADwAD95E7AAK7jwACu7gAAqrtgA8AA/JcBIyXAAK72hMAArvDAFZM3YAOJzBbAAK8dFMAArxfAFZM3BAFgA4nMgJaJtBzAAK9iFsAAr1YmwACvPACEwACvNsAVkzdgA6qpqlSqq6q8AAAAAMAA+ssBYAPAAPyXScAAr3ccwACvhobAAK97wBWUSWMBAAGTAMAA/cU+AUrAAK+bARzAAK+iLoHFAgACFsAAr9YWwACvyxbAAK/BgMAAr7zAFYsKW4XHhaOFpoMewAD9HxzAALB2asAAsFddA5GvAWEDA2ADwAD+fmADwAD+fmADwAD+fmADkZideIgvAwADg8AAsJvAFYxfJMAAsLEBhcAAsKLAFZPnJMAAsMIBhsAAsLbAFZRJAJGzAKsDPz9JwACw6yIcwACw84PAALDwwBWMX0gBAAEnleAAwAD+jQEcwACxAIPAALD9wBWMX0gBAAEnhpcAwAD+jT4DTsAAsRzAALEqAACjEGADwAD95AEjJcAAsTWBwACxLMAVi1BgA4nMFsAAsV8UwACxVsAVi1ABAWADicyAlom0FsAAsZsmwACxgQCBwACxeMAVi1BgA6qpqlSqqwFgA8AA/eROwACxuMAAscMAAKq7YAPAAPyXASMlwACxy4TAALHFwBWTN2ADicwWwACx8hTAALHswBWTNwQBYAOJzICWibQcwACyNxbAALIrJsAAshEAhMAAsgvAFZM3YAOqqapUqquqvAAAAADAAPrLAWADwAD8l0nAALJMHMAAsluGwACyUMAVlgxIAQABkwDAAP27PgFKwACycQEcwACyeC6BxQIAAhbAALKsFsAAsqEWwACyl4DAALKSwBWLCluFx4WjhaaDHsAA/R8cwACzM2rAALMWXQORrwFhAwJgA8AA/n5gA8AA/n5gA5GYnzqILwIAAoPAALNYwBWMXyTAALNuAYXAALNfwBWVqgCRswCrAz8/R8AAs5eDwACzn8AVjF8DA8AAs7ZqwACztmADwAD+fsAAnEbAALPMasAAs8xgA8AA/n7AAJxMwACz4mrAALPiYAPAAP5+wACcSQA+A07AALP5wAC0BwAAoxBgA8AA/JcBIyXAALQSgcAAtAnAFYtQYAOJzBbAALQ+FMAAtDXAFYtQAQFgA4nMgJaJtBzAALTcHMAAtLYWwAC0kybAALRiAIHAALRZwBWLUGADqqmqVKqrqlkBAAE3IADAAPrJqrwAAAAAwAD6ywFgA8AA/JdOwAC098AAtQIAAKq7YAPAAPyXASMlwAC1CoTAALUEwBWTN2ADicwWwAC1MxTAALUtwBWTNwQBYAOJzICWibQcwAC1zhzAALWoFsAAtYUmwAC1VACEwAC1TsAVkzdgA6qpqlSqq6pZAQABNyAAwAD6yaq8AAAAAMAA+ssBYAPAAPyXSsAAteUBHMAAtewuqr0EAASDwAC2GsAVjF+FwAC2HsAVl2eGwAC2LcAVl+mAwAC2OcAViwoAq0wDwAC2UWrAALZRYAPAAP5+wACcUsAAtmhqwAC2aGADwAD+fsAAnE/AALZ/asAAtn9gA8AA/n7AALaqAD4FTsAAtpnAALaiAACqvmADwAD60QEqTsAAtr0AAACjEGADwAD8lwBJwAC22iXAALbngcAAtt7AFYtQYAOJzD4BPY7AALcJwBWY9RbAALciFMAAtxnAFYtQAQFgA4nMgJaJtD4DTsAAt1fAALdjAACqVGADwAD6owEWwAC3nSbAALeDAIHAALd6wBWLUGADqqmqVKqrPY7AALe6wBWY9RzAALflHMAAt9aHwAC3ysAVmUOqWQEAATcgAMAA+smqvAAAAADAAPrLPY3AALf+wBWY4BbAALgVh8AAuAnAFZlDqr/AAPqsTsAAuEPAALhOAACqu2ADwAD8lwEjJcAAuFaEwAC4UMAVkzdgA4nMFsAAuH8UwAC4ecAVkzcEAWADicyAlom0HMAAuMYWwAC4uibAALigAITAALiawBWTN2ADqqmqVKqrqrwAAAAAwAD6ywFgA8AA/JdKwAC43gEcwAC45S6qwAUABIPAALkVwBWMX4bAALkZwBWY9YfAALkowBWZxIDAALk0wBWLCgGqwYXAALlewBWY4KtNAAE+A07AALmQwAC5ngAAoxBgA8AA/a4BIyXAALmpgcAAuaDAFYtQYAOJzBbAALnVFMAAuczAFYtQAQFgA4nMgJaJtBbAALoMJsAAufkAgcAAufDAFYtQYAOJ1ICWibQBYAPAAP2uTsAAuiXAALowAACqu2ADwAD9rgEjJcAAujiEwAC6MsAVkzdgA4nMFsAAumEUwAC6W8AVkzcEAWADicyAlom0FsAAupUmwAC6ggCEwAC6fMAVkzdgA4nUgJaJtAFgA8AA/a5KwAC6qgEcwAC6sS6qwgQABIPAALrjwBWMX4XAALrnwBWafIbAALr2wBWa3oDAALsCwBWLCgCrTknAALskJcAAuy6EwAC7KMAVkzdgA4nUPgNJwAC7TSIiIhzAALtVg8AAu1LAFYxfSAEAASeBBgDAAP6NARzAALtig8AAu1/AFYxfSAEAASeDfADAAP6NARzAALtvg8AAu2zAFYxfSAEAASeDwADAAP6NASIiHMAAu4yDwAC7icAVjF9IAQABJ4O/AMAA/o0BHMAAu5qDwAC7l8AVjF9IAQABJ4PBAMAA/o0BHMAAu6iDwAC7pcAVjF9IAQABJ5XhAMAA/o0+AUrAALvBARzAALvILoHFAgACgMAAu+DAFYsKHMAAvCBqwAC79l0Dka8BYQMEYAPAAP5+YAOJpmADiOlgA4jpYAORmJpviC8EAASDwAC8Q8AVjF8UwAC8W8AVkzcEAWADidQWwAC8hhbAALx2LobdqueFlZutHMAAvKkUwAC8o8AVkzcEAWADidSGrwEAARbAALyxLobdqucAidoAkbMAqwM/TsAAvN/AALztAACjEGADwAD9rgEjJcAAvPiBwAC878AVi1BgA4nMFsAAvSAUwAC9F8AVi1ABAWADicyAlom0FsAAvVMmwAC9QACBwAC9N8AVi1BgA4nUgJaJtAFgA8AA/a5KwAC9ZAEcwAC9ay6qwgQABIPAAL2ZwBWMX4XAAL2dwBWc3xbAAL2yFMAAvazAFZM3BAFgA4nUgJaJtIDAAL25wBWLCgCrTj9KwAC90gEcwAC92S6BxQIAAoDAAL3twBWLChzAAL4pasAAvf9dA5GvAWEDBGADwAD+fmADiaZgA4jpYAOI6WADkZiab4gvBAAEg8AAvkjAFYxfgcAAvlzAFYtQFsAAvoYWwAC+di6G3arnmwObrhzAAL6lhMAAvp/AFZM3hq8BAAEWwAC+rS6G3arnAImsAJGzAKsDP0nAAL7UJcAAvuGBwAC+2MAVi1BgA4nUPgJJwAC+/CIiIhzAAL8Eg8AAvwHAFYxfSAEAASeBBgDAAP6NARzAAL8Rg8AAvw7AFYxfSAEAASeDfADAAP6NARzAAL8eg8AAvxvAFYxfSAEAASeDwADAAP6NASIiHMAAvzeDwAC/NMAVjF9IAQABJ4O/AMAA/o0BHMAAv0WDwAC/QsAVjF9IAQABJ4PBAMAA/o0BHMAAv1ODwAC/UMAVjF9IAQABJ5XhAMAA/o0+AUrAAL9oARzAAL9vLoHFAgACgMAAv4PAFYsKHMAAv79qwAC/lV0Dka8BYQMEYAPAAP5+YAOJpmADiOlgA4jpYAORmJpviC8EAASDwAC/3sAVjF8UwAC/8sAVi1ABAWADidQWwADAHBbAAMAMLobdqueFlZutHMAAwD4UwADANcAVi1ABAWADidSGrwEAARbAAMBGLobdqucAidoAkbMAqwM/ScAAwGgcwADAfRbAAMB2gsAAwGzAFYuEYcAA/WtIAQABkwDAAP27PgFHwADAjYPAAMCVwBWMXwEBwADAqmrAAMCqYAPAAP5+wADg+gA+AUrAAMDAARzAAMDHLp0hAQABHMAAwNQuqpgBAAEcwADA5xbAAMDxFMAAwOjAFYtQAQFgA4nUgJaJtIHGAAAAAMAA+1wAqz8Aq0lJwADBERzAAMEmFsAAwR+CwADBFcAVi4RhwAD9a0gBAAGUAMAA/bs+A07AAMFFwADBSwABg9tgA4mmARzAAMFWgsAAwU3AFYuESwEAAZMAwAD9SknAAMFkIiXAAMFuhMAAwWjAFaBGYAOJzAElwADBhoTAAMGAwBWgRmADidQ+Ak7AAMGvwADBtQABgJZgA8AA/a4BIyXAAMG+hMAAwbjAFaBGYAOJzBbAAMHkFMAAwd7AFaBGBAFgA4nMgJaJtBbAAMIUJsAAwgEAhMAAwfvAFaBGYAOJ1ICWibQBYAPAAP2uSsAAwiUBHMAAwiwuqsIEAASDwADCWsAVjF8WwADCZxTAAMJewBWLUAEBYAOJ1ICWibSFwADCbsAVoJ2AwADCdcAViwoAq04/SsAAwo4BHMAAwpUugcUCAAKAwADCqcAViwocwADC5WrAAMK7XQORrwFhAwRgA8AA/n5gA4mmYAOI6WADiOlgA5GYmm+ILwQABIPAAMMEwBWMXxTAAMMYwBWLUAEBYAOJ1BbAAMNCFsAAwzIuht2q55sDm64cwADDYYTAAMNbwBWgRoavAQABFsAAw2kuht2q5wCJrACRswCrAz9JwADDkCXAAMOdgcAAw5TAFYtQYAOJxD4BScAAw7YcwADDyxbAAMPEgsAAw7rAFYuEYcAA/WtIAQABlADAAP27PgJOwADD6sAAw/AAAYPbYAOJpgEcwADD+4LAAMPywBWLhEsBAAGTAMAA/UpJwADECCXAAMQShMAAxAzAFaIkYAOJxD4BR8AAxC+DwADEN8AVjF8DAcAAxE5qwADETmADwAD+fsAAnEYAPgFKwADEYQEcwADEaC6dIQEAAR/AAMSMicsBAAEiFsAAxKIUwADEmcAVi1ABAWADicSAlom0ARbAAMSxFMAAxKvAFaIkBAFgA4nEgJaJtAAAq0kBwADEy2rAAMTLYAPAAP5+wACcTAA+AUrAAMTeARzAAMTlLp0hAQABH8AAxQmJywEAASIWwADFHxTAAMUWwBWLUAEBYAOJxICWibQAFsAAxS4UwADFKMAVoiQEAWADicSAlom0AACrSQHAAMVIasAAxUhgA8AA/n7AAJxJAD4BSsAAxVsBHMAAxWIunSEBAAEfwADFhonLAQABIRzAAMWiFsAAxZwUwADFk8AVi1ABAWADicSAlom0SAEAARbAAMWrFMAAxaXAFaIkBAFgA4nEgJaJtADAAP3xAACrST8/ScAAxd0lwADF6oHAAMXhwBWLUGADibw+AUrAAMYDARzAAMYKLoHFAgACgMAAxhHAFYsKasAAxhdgA5GjnvEAqwM/SsAAxj4BHMAAxkUugcUCAAKAwADGTMAViwocwADGg2rAAMZaXQORrwFhAwJgA8AA/n5gA4mmYAORmJshiC8CAAKDwADGkcAVjF+BwADGlcAVi1AAkbMAqwMGqyx1wADGqMAAxqjAAM7YAACFyAAAAAEDwADGvsAAztgAAAABAQHAAMbRAAAAg/NgA4YmAABgA4mmAT4DTsAAxuzAAMbxAAGFxWADiaYBHMAAxvMuqoWqowEAARbAAMcPgMAAxwrAFaR+hcWGKACrD0nAAMcaFsAAxx4uqoKq/T4EPRzAAMc7LqqMAAAAAKsHTsAAx1fAAMddAACFx2ADiaYBHMAAx18uqoWqowEAARbAAMd7gMAAx3bAFaR+hceGKgCrDz0cwADHiS6qjQAAAACrCErAAMecARzAAMejLqqKAgACgMAAx6/AFaR+H8AAx8OGMgMAAxzAAMfVLqqLAQABgcAAx93AFaSVAKsGFsAAx+mAwADH5MAVpH6FxoYpHMAAx/MuqosBAAGCwADH+8AVpOkAqwYAAKsFP0fAAMgPFsAAyByAwADIF8AVpH6FxoYpBAHAAMgzasAAyDNgA8AA/n7AAJvpAD4CScAAyEElwADISoHAAMhFwBWklWADicQ+BEnAAMhnFsAAyHAUwADIa8AVpJUBAWADicSAlom0SsAAyHcBFsAAyH4uqnOq8T9OwADIpsAAyKwAAYXHYAOJpgEcwADIri6qhaqjAQABFsAAyMqAwADIxcAVpH6Fx4YqAKsPScAAyNwiJcAAyOaCwADI4MAVpgtgA4nEASXAAMj/gsAAyPnAFaYLYAOKdT4BSsAAySUBgsAAySzAFaYLP0rAAMlKARzAAMlRLoHFAgACgMAAyWfAFaR+HMAAyaVqwADJe10Dka8BYQMEYAPAAP5+YAOJpmADiOlgA4jpYAORmJpviC8EAAQWwADJy4DAAMnGwBWkfoXGhikUwADJ58AVpJUBAWADicQWwADKDxbAAMn/LobdqueFtZusHMAAyjGCwADKK8AVpguGrwEAARbAAMo5LobdqucAiawAkbMAqwM/SsAAyl8BHMAAymYugcUCAAKAwADKesAVpH4cwADKtWrAAMqMXQORrwFhAwJgA8AA/n5gA4mmYAORmJshiC8CAAIWwADK2YDAAMrUwBWkfoXGhimBwADK48AVpJUAkbMAqwMBwADK9mrAAMr2YAPAAP5+wACb5gA+AknAAMsEJcAAyw2BwADLCMAVpJVgA4nEPgRJwADLKiEWwADLNBTAAMsvwBWklQEBYAOJxICWibRKwADLOwEWwADLQi6qdKryP07AAMtrwADLcQABhcdgA4mmARzAAMtzLqqFqqMBAAEWwADLj4DAAMuKwBWkfoXHhioAqw9JwADLoSIlwADLq4LAAMulwBWn4WADicQBJcAAy8SCwADLvsAVp+FgA4p1PgFKwADL6gGCwADL8cAVp+E/SsAAzA8BHMAAzBYugcUCAAKAwADMLMAVpH4cwADMamrAAMxAXQORrwFhAwRgA8AA/n5gA4mmYAOI6WADiOlgA5GYmm+ILwQABBbAAMyQgMAAzIvAFaR+hcaGKRTAAMyswBWklQEBYAOJxBbAAMzUFsAAzMQuht2q54W1m6wcwADM9oLAAMzwwBWn4YavAQABFsAAzP4uht2q5wCJrACRswCrAz9KwADNJAEcwADNKy6BxQIAAoDAAM0/wBWkfhzAAM16asAAzVFdA5GvAWEDAmADwAD+fmADiaZgA5GYmyGILwIAAhbAAM2egMAAzZnAFaR+hcaGKYHAAM2owBWklQCRswCrAwHAAM27asAAzbtgA8AA/n7AAJwzAD4BSsAAzckBIyElwADN1oHAAM3RwBWklWADibyBwADN9sAVpJUcwADOCS6qhaqjAQABFsAAziWAwADOIMAVpH6Fx4YqAKsPAWADiaYAAT4BSsAAzkQBHMAAzksugcUCAAKAwADOX8AVpH4cwADOmmrAAM5xXQORrwFhAwJgA8AA/n5gA4mmYAORmJshiC8CAAIWwADOvoDAAM65wBWkfoXGhimBwADOyMAVpJUAkbMAqwMGqy11wADO3cAAzt3AANJUAACFzQAAAAEDwADO98AA0lQAAAABAQHAAM8OAAAAg/NgA4YzAABgA4mmAT4CTsAAzynAAM8zAAGFymADiaYBHMAAzzUuqoWqowEAARbAAM9RgMAAz0zAFapFhcqGNQCrD0nAAM9hHMAAz2+BwADPZcAVqlxIAQABFsAAz3IuqnOq8QCJqz4BSsAAz4gBHMAAz48uqoWqowEAARbAAM+rgMAAz6bAFapFga+GNgCrD0nAAM+9HMAAz8uBwADPwcAVqlxIAQABFsAAz84uqnSq8gCJqz4BSsAAz+UBHMAAz+wuqoWqowEAARbAANAIgMAA0APAFapFhcuGNwCrD0nAANAfFsAA0CMuqoKq/T4FPRzAANBALqqMAAAAAKsHTsAA0FzAANBhAACBr2ADiaYBHMAA0GMuqoWqowEAARbAANB/gMAA0HrAFapFga+GNgCrD07AANCVwADQnwAAhctgA4mmARzAANChLqqFqqMBAAEWwADQvYDAANC4wBWqRYXLhjcAqw89HMAA0M8uqo0AAAAAqwhKwADQ4gEcwADQ6S6qigIAAoDAANEAwBWqRR/AANEUhkAEAAQcwADRKi6qiwEAAYHAANEywBWqXACrBhzAANE+LqqLAQABgsAA0UbAFatMAKsGHMAA0VsuqosBAAGDwADRY8AVq4AAqwYWwADRdIDAANFvwBWqRYXMhjgAAKsFPgFKwADRlQEcwADRnC6BxQIAAhbAANGzgMAA0a7AFapFhcqGNRzAANHlasAA0chdA5GvAWEDA2ADiaZgA4jpYAOI6WADkZiczIgvAwADgcAA0fPAFapcFsAA0hwWwADSDC6G3arnhbWbrBzAANIwgcAA0ibAFapchq8BAAEWwADSOC6G3arnAImsAJGzAKsDBqsudcAA0lnAANJZwADXPQAAhZgAAAABA8AA0mnAANc9AAAAAQEBwADSdgAAAIPzYAOFBAAAYAOJpgE+BEnAANKCJcAA0pQWwADSi4DAANKGwBWs+IWPhQZgA4brPgNJwADS4BzAANL0FsAA0uQuqnaq9EgBAAErAMAA/fE+AUrAANMHARzAANMOLqqJAgACgMAA0xzAFaz4J6rDAKsEP0bAANNewADTlcAA028AAAGEm2ADg5wAFsAA048WwADTiBbAANN4Lqp2qvSEi6tXg2jAAP2PPgFJwADTnxzAANOuFsAA06mBwADTo8AVrXqAvYOBSAEAARbAANO2gMAA07HAFaz4gL2FBwCIwD4BSsAA08gBHMAA0+UWwADT3xbAANPPLqp2qvSEi6tXSwEAAYHAANPmwBWtegDAAP2BP0rAANQGARzAANQNLqqJAgACgMAA1BvAFaz4JMAA1G0DJ6rEFsAA1FCAwADUS8AVrPiAvYUHJ6rFAKsEP07AANSKwADUkwABhY9gA4mmARzAANSVLqqFqqMBAAEWwADUsYDAANSswBWs+IWPhQYAqw9JwADUwCIlwADUzYHAANTEwBWuTWADid8AHMAA1PEWwADU7BbAANTngMAA1OLAFaz4gL2FB4C9iLdIAQABJ2EAwAD+jT4CScAA1QYWwADVCi6qg6r+PgFKwADVKQEcwADVMC6dIQEAAR/AANVBqrABAAEWwADVZhbAANVgFMAA1VfAFa5NAQFgA4nfgJaJtGHAAP6CAACrST9KwADVfgEcwADVhS6dIQEAAR/AANWWidMBAAEWwADVsRbAANWrFMAA1aLAFa5NAQFgA4nfgJaJtGHAAP6CAACrSUnAANXGFsAA1couqoKq/T4BSsAA1ecBHMAA1e4uqooCAAKAwADV+sAVrPgfwADWDoUUAwADHMAA1houqosBAAGBwADWIsAVrk0AqwYWwADWMoDAANYtwBWs+IC9hQcWwADWPYDAANY4wBWs+IWRhQoAAKsFScAA1lslwADWaIHAANZfwBWuTWADibw+AUrAANaBARzAANaILoHFAgACgMAA1o/AFaz4asAA1pVgA5GjnvEAqwM/SsAA1rsBHMAA1sIugcUCAAKAwADW0sAVrPgcwADXBGrAANbgXQORrwFhAwJgA8AA/n5gA4mmYAORmJuCiC8CAAIWwADXKRbAANckgMAA1x/AFaz4gL2FB4C9iLeBwADXL8AVrk0AkbMAqwMGqy91wADXQsAA10LAANfsAACGGQAAAAEDwADXSsAA1+wAAAABAQHAANdPAAAAg/NgA4dhAABgA4mmAT4CPRzAANdfFsAA11sulqeq9apnAgACFsAA136AwADXecAVsKKCcIdjHMAA14guqoWqowEAARbAANetFsAA16SAwADXn8AVsKKCcIdjhROIhgCrDwCra0rAANfAARzAANfHLqqFqqMBAAEWwADX44DAANfewBWwooJth2QAqw8GqzB1wADX8cAA1/HAANtIAACFiwAAAAEDwADYAcAA20gAAAABAQHAANgOAAAAg/NgA4TsAABgA4mmAT4ETsAA2X7AANmHAAGCcGADiH4BFsAA2Y6AwADZicAVsVyCcITuScAA2ZwiJcAA2bAWwADZqYHAANmgwBWxc4RXglhgA4dhAR7AANm6qqgBAAGBwADZzcAVsXMAPgFKwADZ4AE1AAAAAQBgA4mmARzAANnrFsAA2eculqeq9arGAQABFsAA2f+AwADZ+sAVsVyCcITuAKttIxzAANoJggDAFbHVSAEAASsAABzAANoWLoHFAgACgMAA2izAFbFcHMAA2ntqwADaQF0Dka8BYQMBYAPAAP5+YAORmJ40iC8BAAEWwADakoHAANqJwBWxc4C9iIIAkbMAqwOCAMAVsdUBYAOJpj9JwADapBbAANqxgcAA2qjAFbFzhCKIkT4BSsAA2sIBHMAA2skuqoWqowEAARbAANrpgcAA2uDAFbFz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ASAOwBXqlIRXglgAABVRugAVUhUAFVJtABVTSwAVVHsAFVi6ABVZUgAVWcMAFVpNABVbOwAVW7QAFVwuABVdOwAVXdEAFV5qABVfAwAVX5wAFWI7ABVixwAVY2QAFWQQABVkbAAVZRUAFWWZABVl5AAVZkcAFWbwABVnYQAVZ88AFWhvABVqXgAVa5sAFWx4ABVttQAVbpIAFW/hABVw0AAVcVMAFXgbABV62wAVfUoAFX3hABWGCQAVingAFYrjABWkVwAVqh4AFazRABWwewAVsTUAFbLYABW1ogAVunsAFcT0ABXGLgAVyA0AFcmoABXKfAAVzREAFc24ABXOuAAVzzIAFc/lABXSjgAV0vQAFdQmABXWJQAV1zEAFdexABXYMgAV2QoAFdoAABXaxgAV3CsAFd75ABXfhwAV4FwAFeD7ABXiwwAV5dMAFeptABXq+wAAAFECq1J1wAEhQ8ABIUnAASafA6rfAAABYAHAAP3kAAAGBKtUdcABIW/AASF4GKrgAGADquAABKtVdcABIa7AASGzCamtAGADgxsABKtWdcABIgrAASIXCYUsAF0DwAD9OwFgA4jpAASrV3XAASJjwAEifwmEiwBdA8AA/W0CYAODnGADiaYBMsABIn1gA4OcYAOJpgAEq1h1wAEioMABIr0JheQAXQPAAP07AWADh70BMcABIrtgA4e9AASrWXXAASLZwAEi+QmF5QBdA8AA/TsBYAOE2QExwAEi92ADhNkAAQWrX3XAASL+wAEi/sABIz0AAAADwAEjDcABIz0AAAADAwPAASMTAAAEquBgA6rgAMABIyMAAASprWADgxsAwAEjLwAABIUsXQPAAP07AWADiOkAAGADq1IBPwQIAatUgADAFe1KCAGrVYEAwBXtWAgBq1aCAMAV7WYJAcABIv7AAP36AAAAAAMGq1t1wAEjQsABI0fAASOXAACqrwAAAAEDwAEjVMABI5cAAAACAgLAASNbAAAAhJtgA4OcAMABI2sAAACGFWADiaYAAFwBPgE9HMABI4EWwAEjey6Ei6tXgL8CAAKAwAEjgsAV7deBwAEji8AV7eUAwAD9ggarXHXAASOcwAEjrcABJS8AAKqtAAAAAQPAASO6wAElLwAAAAAAAABgA4o1AT4FQBbAASPSFsABI8ouheSrWIFVwAD9HcABI8rAASPZAE7A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AQPAATCTwAEwqwAAAAEBAcABMKYAAACD82ADhOEAAFwAAAAV+J0AFfjpABX5IQAAAAICq4R1wAEwsMABMLbAATM5A6roAAABYAHAAP3kAAFgAat+AAEFq4x1wAEw58ABMO3AATECAQAAA8ABMQDAATECAAAAAAAAAGADq4QBPwEJAcABMO3AAP36AAAAAAQGq4Z1wAExB8ABMRjAATHJAACBxQFqwAExCGADwAD95AIAAAEDwAExHsABMckAAAACAgLAATEuAAAAImADkbYAwAExTAAAAIJXXQPAAP07AWADkbYAAFwBPgI9HMABMVsuqumqowEAAYDAATFjwBX5wgCriUbAATFxwAExoMABMYUAAACfamADkbYAgcABMZfAFfnPPgE9HMABMaguqumqowEAAYLAATGwwBX6DACriQarh3XAATHOwAEx38ABMiIAAKqIAWrAATHPYAPAAP3kAgAAAQPAATH2wAEyIgAAAAEBAcABMgkAAACD82ADhOEAAFwBPgAGq4l1wAEyJ8ABMizAATKVAACq6aqjAAAAAQPAATIzwAEylQAAAAEBAcABMkMAAAAiYAORtgAAXAE+AT0cwAEyUi6dCgMAAxbAATJogMABMmDAFfqugKyRuBbAATJ1gMABMm3AFfquh2WRuRbAATKJgMABMoHAFfquIpG+AKuKBquKdcABMprAATKfwAEzNwAAnQoAAAABA8ABMqzAATM3AAAAAwMDwAEysQAAAICsYAPAAP7/AMABMroAAACDYmADwAD8lwDAATLJAAAAImADwAD+fgAAXAE+Aj0bwAEy28AA6v83Kj0cwAEy+BrAATLxwADrBYIDAQABJMABMzIFgMABMwLAFfsrJ4LqgcABMwfAFfs7J6rqgsABMyrAFftLAMAA9csAABX5jwAV+j8AFfqFABX7BAAV+6sAAAAEAquNdcABMzzAATNCwAE4EgOq6wAAAV0BmZIBYAPAAPrRAAABBKuQdcABM4DAATOuCarsqqMAXQPAAP4vAWADiYIBHsABM5rAAMGmAAFgA4mCAAABBaudAAAAAAQAAAMAAAAAAAAAAABgA6uNAT8BCQEAmZ4AAAAACgarknXAATOzwAEzuMABM/gAAKpuAAAAAQPAATPGwAEz+AAAAAEBAcABM9AAAACClGADiOkAAGADwAD60QE+AUrAATPcASbA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wABHb8AAR37AAEeOAQCrkAAAAAEDwABHh8AAR44AAAAAAAAAYAOE2QFKwABHigEWwABHii6CbYdkBqzafMAAR5PAAEekwABIKgAAq5EBasAAR5RgA8AA/eQCAAABA8AAR7PAAEgqAAAAAgICwABHxQAAAIdFYAOu1ADAAEfXAAAAq6BgA4jpAABcAT4BSsAAR+oBHMAAR/mAwABH8cAWgoir0QIAAi6BwABIGsAWgpYAru0AABaCGAAWglUAFoLPAAAAAgKs3XzAAEhxwABId8AASaIDq9IAAAFgAYfpAAFgAa3UAAEFrON8wABIt8AASLfAAEkAAAAAA8AASMHAAEkAAAAAAgICwABIzAAAAIJtYAOHjwDAAEjdAAAAhcpgA4TZAABgA6zdAT8BCQDAAEjqh/MCAAKAwABI8MAWgySBwABI9sAWgzIAAgas33zAAEkFwABJFMAASTIBAKuUAAAAAQPAAEkmwABJMgAAAAAAAABgA4TZAUrAAEkpARbAAEkpLoXKh+wGrOF8wABJN8AASUjAAEmgAACrkQFqwABJOGADwAD95AIAAAEDwABJV8AASaAAAAABAQHAAElpAAAAh0VgA67UAABcAT4BSsAASXgBHMAASYeAwABJf8AWg9er0wEAAS4Aru4AABaDZwAWg6QAFoQHAAAAAgKs5HzAAEnuwABJ9MAASxcDq9QAAAFgAYa6AAFgAazrAQSs5nzAAEpEwABKUBihggBgA4jpASsBBazqfMAASlXAAEpVwABKgAAAAAPAAEpjwABKgAAAAAEBAcAASmsAAACAlmADwAD7SQAAYAOs5AE/AQkAwABKdIbCAQABgMAASnrAFoRyAAEGrOh8wABKhcAASpbAAEsVAACrkQFqwABKhmADwAD95AIAAAEDwABKpcAASxUAAAACAgLAAEq3AAAAh0VgA67UAMAASskAAACroGADiOkAAFwBPgFKwABK3AEcwABK64DAAErjwBaE06vVAgACLoHAAEsFwBaE4QCu7wAAFoSgABaFGgAAAAECrOt8wABLcMAAS3/AAEx8B6vWAAABYAGE2QAAAQSs7XzAAEuywABLvhihggBgA4jpASsBBazxAAAAAAQAAAMAAAAAAAAAAABgA6zrAT8BCQEAhOAAAAAAAQas73zAAEw2wABMO8AATHoAAquRAAAAAQPAAExKwABMegAAAAICAsAATFwAAACHRWADrtQAwABMbgAAAKugYAOI6QAAXAAAABaFgAAWhcYAAAABAqzyfMAATMrAAEzQwABNtwOr1wAAAWABh7UAAWABrdQAAQWs9nzAAE0jwABNI8AATTsAAAADwABNOcAATTsAAAAAAAAAYAOs8gE/AQkBwABNI4e8AAAAAAEGrPR8wABNQMAATVHAAE21AACrkQFqwABNQWADwAD95AIAAAEDwABNYMAATbUAAAABAQHAAE1yAAAAh0VgA67UAABcAT4BSsAATYEBHMAATZCAwABNiMAWhl+r2AEAAS4ArvAAABaGLAAWho8AAAABAqz3fMAATgrAAE4QwABPXgOr2QAAAWABh5UAAWABrdQAAQWs/XzAAE5twABObcAATrMAAAADwABOiMAATrMAAAABAQHAAE6UAAAAgm9gA4TZAABgA6z3AT8BCQDAAE6ih54BAAGAwABOqMAWhuAAAgas+XzAAE64wABOx8AATt0BAKuQAAAAAQPAAE7QwABO3QAAAAAAAABgA4TZAUrAAE7TARbAAE7TLoJvh5cGrPt8wABO4sAATvPAAE9cAACrkQFqwABO42ADwAD95AIAAAEDwABPAsAAT1wAAAABAQHAAE8UAAAAh0VgA67UAABcAT4BSsAATyMBHMAATzKAwABPKsAWh3yr2gEAAS4ArvEAABaHDAAWh0kAFoesAAAAAgKs/nzAAE/JwABPz8AAUd0Dq9sAAAFgAYXoAAFgAazrAQStAHzAAFA8wABQSBihggBgA4jpASsBBa0GfMAAUE3AAFBNwABQ9wAAAAPAAFBxwABQ9wAAAAMCAsAAUIMAAACCSWADhBIAwABQnQAAAFtgA6yDAAHAAFC0AAAAhCJgA8AA+tEBasAAUL1gA8AA+tEAYAOs/gE/AQkAwABQzYX5AwACgMAAUNPAFogXgcAAUNvAFoglAYQigsAAUO/AFogzAgatAnzAAFD8wABREsAAUTABAKvcAAAAAQPAAFEkwABRMAAAAAAAAABgA6yDAUrAAFEnASbAAFEnARbAAFEnLluF62ADrIMGrQR8wABRNcAAUUbAAFHbAACrkQFqwABRNmADwAD95AIAAAEDwABRVcAAUdsAAAACAgLAAFFnAAAAh0VgA67UAMAAUXkAAACroGADiOkAAFwBPgFKwABRjAEcwABR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FtPKABbUcQAW1O8AFtVsABbV6QAW1nYAAAAGAq5kfMAA0P/AANEFwADSJAOsWgAAAWABrLEAAAABBa5pfMAA0UbAANFGwADRgQCAtaxzAAPAANFiwADRgQAAAAEBAcAA0W4AAACj+mADhNkAAGADrmQBPwEJAMAA0XuswQEAAYDAANF9wBbW2gABBq5mfMAA0YbAANGXwADSIgAAq5EBasAA0YdgA8AA/eQCAAABA8AA0abAANIiAAAAAgICwADRuAAAAIdFYAOu1ADAANHKAAAAq6BgA4jpAABcAT4BSsAA0d0BHMAA0eyAwADR5MAW1zmsWwIAAi6BwADSEsAW10cArzAAABbXBgAW14AAAAABAq5qfMAA0nbAANJ8wADdYQOkFgAAAWABiH4AAWABrdQGBK5sfMAA0uTAANL1CaI2AGADwAD60QAErm58wADTBcAA0xUJrFyscwBgA8AA+tEABK5vfMAA05HAANOmCaxQrHMAYAPAAPyXAASucHzAANSvwADUyBisWKxzAGADwAD60QEqBK5xfMAA1QbAANUeGKxWrHMAYAPAAPrRASoErnJ8wADVYsAA1XIJrFOscwBgA8AA+tEAAwWuenzAANV3wADVd8AA2HAAAAADwADVksAA2HAAAAAMAgLAANWaAAAAgL1gA8AA/n4AwADVpQAABKxQYAPAAPyXAArAANXIAAAEojZgA8AA+tEBasAA1dtgA8AA+tEAwADV8wAAAIUTYAOE2QFqAGADwAD9oXnAANYPAAAAgpRgA4jpAWoAYAPAAP2hecAA1iAAAACEIGADwAD60QFqwADWKWADwAD60QDAANY7AAAAhCJgA8AA+tEBasAA1kRgA8AA+tEAwADWVgAAAIZlYAPAAPrRAWrAANZlYAPAAPrRAMAA1ncAAACEJWADwAD60QFqwADWhGADwAD60QDAANaWAAAAo1JgA8AA+tEBasAA1qdgA8AA+tEAwADWuQAAAIUfYAPAAPrRAWrAANbBYAPAAPrRAMAA1tMAAACFbGADwAD60QFqwADW32ADwAD60QBgA65qAT8FCAGub4EAwBbYdwgBrmyCAMAW2IgIAK5uHMAA1weEwADXAsAW2LtIAQABKwCI7QgArnIUwADXK8AW2UIJAAkAwADXRIinCQABgMAA10rAFthnCIUTg8AA12nAFtikgpQ1AAAAAQBgA4jpAYTAANeIwBbYuyMcwADXjRQAwBbZ/QwASAEAASsAAGrAANeWYAOJAISbFADAFtn9DAABYAOI6YQghcAA17rAFtjShCKGwADX2MAW2O6GZYfAANf8wBbZCoQlFMAA2CTAFtkmCACFHxTAANhFwBbZXgoAhWwUwADYZcAW2XoLAAWue3zAANh1wADYdcAA2WAArF0AA8AA2JrAANlgAAAAAgICwADYrQAAAIUTYAOE2QDAANi/AAAErFBgA8AA/JcAAGADrmoBPwUIAa5vgQDAFtq2CACubCoIAK5uKggArnIqCQDAANlLiKgBAAGAwADZVMAW2qgABa58fMAA2WXAANllwADaTgCGZgADwADZicAA2k4AAAACAgLAANmcAAAAhRNgA4TZAMAA2a4AAASsUGADwAD8lwAAYAOuagE/BQgBrm+BAMAW2y0IAK5sKggArm4pCACucioJAMAA2jmIqAEAAYDAANpCwBbbHwAEBq50fMAA2lPAANpiwADahAEArF4AAAABA8AA2nbAANqEAAAAAAAAAGADhNkBSsAA2nkBFsAA2nkuhROIhgaudnzAANqJwADamsAA2wMAAKuRAWrAANqKYAPAAP3kAgAAAQPAANqpwADbAwAAAAEBAcAA2rsAAACHRWADrtQAAFwBPgFKwADaygEcwADa2YDAANrRwBbb5KxfAQABLgCvMQaud3zAANvIwADb1MAA3C4AAaxgAAAAAQPAANvlwADcLgAAAAEBAcAA3AIAAACCcGADrmoAAGADwAD60QFKwADcFQEWwADcHoDAANwVwBbcO6xcrHOubgaueHzAANz7wADdB8AA3V8AAaNSAAAAAQPAAN0WwADdXwAAAAEBAcAA3TMAAACCcGADrmoAAGADwAD60QFKwADdRgEWwADdT4DAAN1GwBbckqxTrHOucgAAFtt0ABbbsQAW3BQAFtxrABbcwgAAAAQCrn18wADdvcAA3cPAAN9iA6xhAAABYAGuHwAAAQSuf3zAAN4mwADeNwmr6wBgA6yDAAEFroR8wADePMAA3jzAAN63AIC1rHMAA8AA3mDAAN63AAAAAgICwADeegAAAKP1YAOE2QDAAN6KAAAEq+tgA6yDAABgA659AT8CCAGuf4EAwBbdQQkAwADeq64wAQABgMAA3q3AFt0zAAEGroF8wADevMAA3s3A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wBcYdIJwh2OClITAAEbOwBcZCYiEScAARywlwABHPIHAAEcwwBcYgmADrGA+AT0cwABHXRbAAEdULquxrtarvQQAA4PAAEdtwBcYuoTAAEd8wBcZCSkBq8Yprk4+AT0cwABHxxbAAEe+LquxrtarvQQAA4PAAEfXwBcYuoHAAEfmwBcYgikBq8Yprk5OwABIJ8AASC8AAKu5YAOI6QEewABIMax1AgACg8AASEHAFxi6FsAASFAuq7Gu1gA9F8AASO+AwABI6sAXGHShghzAAEklFsAASQ8WwABJBi6rsa7WoQ+w1avJAgAChMAASTvAFxkJhcAASUTAFxnVAMAAiWytLT0XwABJXBbAAElXgMAASVLAFxh0gm2tL4XMHsAASWmsdQIAAoDAAEl5wBcYdBbAAEl/LquxrtYAhjhKwABJjgErBq7+fcAASaLAAEmnwABLwQAAq/IAAAABA8AASbbAAEvBAAAAAQEBwABJwgAAAIPzYAOtNgAAXAE+Bk7AAEnSwABJ5AAAq5RgA4TZARbAAEnrgMAASebAFxqzq5StOE7AAEoGwABKEwAAq75gA4kkARbAAEoyFsAASigWwABKHhbAAEoVLquxrtaHeLC6mwGc4IUBg0k9HMAASkgWwABKPy6rsa7Wq70DAAOBwABKYcAXGseCwABKdMAXGushFsAASowWwABKgy6rsa7Wh5Kw0gCuTj0cwABKphbAAEqdLquxrtarvwQABILAAErAwBca6x7AAErWrHUCAAKBwABK5sAXGscWwABK+S6rsa7WABbAAEsRgMAASwzAFxqzhcqINBbAAEszFsAASymAwABLJMAXGrOFyog0hFiCWQCw4j0cwABLTRbAAEtELquxrtasSwEAARbAAEthgMAAS1zAFxqzga+INQCuUEnAAEtsIRzAAEt/FsAAS3WAwABLcMAXGrOFy4g2SAEAASsAwAD98T4BPRzAAEuZFsAAS5Auq7Gu1qxLAQABFsAAS62AwABLqMAXGrOFy4g2AK5QPwau/33AAEvGwABLy8AATW0AAKv0AAAAAQPAAEvpwABNbQAAAAICAsAATAsAAACD82ADrT0AwABMGgAAAKugYAOI6QAAXAE+BUnAAEwtIRzAAEw8FsAATDaAwABMMcAXHHCCjqy1SAEAASsAwAD98T4BPRzAAExWFsAATE0uq7Gu1qu9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okXAF09hDAAUwACiVMAXT5UNAACyFk7AAKJzwACieQAArMZgA8AA+tEBHMAAoqUWwACihBbAAKJ7LquxrtahD7DVmxoCAAIUwACiscAXTiIKABbAAKLZFsAAotAWwACixhbAAKK9LquxrtaHeLC6mw+c94UBg0kAwABUk07AAKLuwACi+QAArMdgA8AA+tEBHMAAoyUWwACjBBbAAKL7LquxrtahD7DVmxoCAAIUwACjMcAXTiIKABbAAKNeFsAAo1AWwACjRhbAAKM9LquxrtaHeLC6mxGc8YUBg0kAwABUk0nAAKNuIhTAAKNywBdYpw8AACEUwACjfMAXWQ0QAD4BPRfAAKOSLqx7FsAAo6oUwACjpMAXTVoAAWADshKEWIJZrtk/ScAAo8QiIRTAAKPJwBdYpw8AABTAAKPSwBdZDRAAPgE9F8AAo+gurHwWwACkEBbAAKQFFMAAo//AF01aAAFgA7ISgm+yFIRYglmu2j9KwACkKwBJwACkPiXAAKRIgMAApELAF01aYAOyJz4GTsAApGjAAKRxAACFtWADiOkBFsAApJAWwACkhhbAAKR8FsAApHMuq7Gu1od4sLqbAZzghQGDSU7AAKSowACktgAArLBgA4jpARzAAKTBFsAApLguq7Gu1qu9BAADFsAApOIUwACk3MAXTVoAAWADsieFyrIpFMAApO3AF1ojCgAUwACk98AXTfMJAAGrxiquTj0cwAClORbAAKUwLquxrtarvwQABBTAAKVVwBdaIwoAFMAApV/AF1paCwAWwACldBTAAKVuwBdNWgABYAOyJ4XKsikWwACljxbAAKWFFMAApX/AF01aAAFgA7InhcqyKYRYglkAsOI9HMAApmgurLsKAAoWwACmhxTAAKaBwBdNWgABYAOyJ4GvsioUwACml8AXTVoAAWADsieCwACmqMAXTXaDwACmw8AXTYSEwACm4MAXTZKFwACm+cAXTaCGwACnEMAXTbWHwACnLcAXTcoUwACnTMAXTeMIABTAAKdnwBdN8wkAAK8NScAAp4AhHMAAp5QWwACnihTAAKeEwBdNWgABYAOyJ4XLsitIAQABKwDAAP3xPglOwACoF8AAqCcAAKzBYAOI6QEcwACoNYXAAKgpwBdNoIYmAAAAAMAA/VpOwACoVMAAqGIAAKzAYAOI6QEcwACocIXAAKhkwBdNoIYmAAAAAMAA/VpOwACoj8AAqKAAAKzIYAOI6QEcwACotIbAAKiiwBdNtYYmAAAAAMAA/Vo9HMAAqMourLsKAAoWwACo6xTAAKjlwBdNWgABYAOyJ4XLsisUwACpAsAXTVoAAWADsieCwACpFcAXTXaDwACpMsAXTYSEwACpUcAXTZKFwACpbMAXTaCGwACphcAXTbWHwACppMAXTcoUwACpxcAXTeMIABTAAKniwBdN8wkAAK8NTsAAqgHAAKoIAABhYAPAAPyXARbAAKoWhcAAqgrAF02gYcAA/Ws9HMAAqjGFwACqJsAXTaCAvwIAAhzAAKo5FMAAqjLAF1zMDwCBjQEAAZUAwAD9vhzAAKpsFsAAqkkWwACqQC6rsa7WoQ+w1avJAgACFMAAqoLAF1v2DQAcwACqnIXAAKqRwBdNoEsBAAEcwACqpBTAAKqdwBdczA8AgY0BAAGVAMAA/b4AwAD9SgDAAIlsAMAA/Us9HMAAqr6FwACqs8AXTaCAvwIAAhzAAKrGFMAAqr/AF1zMDwCBjQEAAZQAwAD9vhzAAKr5FsAAqtYWwACqzS6rsa7WoQ+w1avJAgACFMAAqw/AF1vMDAAcwACrK4XAAKsgwBdNoEsBAAEcwACrMxTAAKsswBdczA8AgY0BAAGUAMAA/b4AwAD9SgDAAIlsAMAA/UtOwACrRsAAq1MAAKzJYAPAAPyXARbAAKtnhsAAq1XAF021YcAA/Ws9HMAAq4iGwACrd8AXTbWAvwIAAhzAAKuWFMAAq4nAF14YEACBjQEAAZQAwAD9vhzAAKvJFsAAq6YWwACrnS6rsa7WoQ+w1avJAgACFMAAq/DAF1wgDgAcwACsE4bAAKwCwBdNtUsBAAEcwACsIRTAAKwUwBdeGBAAgY0BAAGUAMAA/b4AwAD9SgDAAIlsAMAA/Us/SsAArDYAScAArEklwACsU4DAAKxNwBdNWmADsjw+BEbAAKxrwACspMAArIQAAACe3mADiH4AFsAArJkUwACsk8AXTVoAAWADsjyGOrI+PgFJwACsrhzAAKzDFsAArL4UwACsssAXXvoKAIC9iIJIAQABKwDAAP6NPgFJwACs2CEcwACs9BbAAKzoFMAArNzAF176CgCFE4iGSAEAASsAwAD98T4BPRfAAK0XFMAArQvAF176CgCClBzAAK0nFsAArR4uq7Gu1qu9BAADFsAArUMUwACtN8AXXvoKAIUTiIYWwACtbBTAAK1gwBde+goAgpSIhCIUwACtcsAXTeMIAAEUwACthcAXTfMJAAGrximuToiEPz4BPRzAAK3tFsAAreQuq7Gu1qxLAQABFMAArfzAF176CgAArlBJwACuIiEcwACuNhbAAK4sFMAAribAF01aAAFgA7I8hcqyP0gBAAErAMAA/fE+AT0cwACuUhbAAK5JLquxrtarvQQAAxbAAK51FMAArm/AF01aAAFgA7I8hcqyPxbAAK6pFsAArp8WwACulRbAAK6MLquxrtaHeLC6mwGc4IUBg0kiFMAArr7AF03jCAABFMAArtHAF03zCQABq8Yqrk4/RsAArxTAAK9BwACvJAAAAIJvYAOE2QAWwACvOBTAAK8ywBdNWgABYAOyPIY7skA+AT0cwACvVBbAAK9LLquxrtarvQQAAxTAAK9kwBdgtQoAasAAr3ZgA6xgwADhpiIUwACvkcAXTeMIAAEUwACvpMAXTfMJAAGrximuTkrAALAdARzAALAkLqy7CgAKFsAAsEMUwACwPcAXTVoAAWADsjyCbbJBFMAAsFPAF01aAAFgA7I8gsAAsGTAF012g8AAsH/AF02EhMAAsJzAF02ShcAAsLXAF02ghsAAsMzAF021h8AAsOnAF03KFMAAsQjAF03jCAAUwACxI8AXTfMJAACvDUnAALFBJcAAsUuAwACxRcAXTVpgA7JSPgNJwACxZRzAALF9FsAAsXgWwACxbxTAALFpwBdNWgABYAOyUoJwslSAvYiCSAEAASsAwAD+jT4BPRzAALGQLqySBAADFsAAsb4UwACxuMAXTVoAAWADslKCcLJUFsAAsc4UwACxyMAXTVoAAWADslKD0bJVFsAAsd4UwACx2MAXTVoAAWADslKjd7JWAYY/FsAAsgMUwACx/cAXTVoAAWADslKGP7JZrvY+AT0cwACyJC6siQQAAxbAALJUFMAAsk7AF01aAAFgA7JSgnCyVBbAALJkFMAAsl7AF01aAAFgA7JSg9GyVRbAALJ0FMAAsm7AF01aAAFgA7JSo3eyVgGGPxbAALKZFMAAspPAF01aAAFgA7JShj+yWa70ScAAsrEhHMAAssMWwACyuxTAALK1wBdNWgABYAOyUp7gslhIAQABKwDAAP3xPgE9HMAAst8WwACy1i6rsa7Wq70EAAMWwACy9RTAALLvwBdNWgABYAOyUp7gslhqwACzBGADrGDAAOGmIhTAALMfwBdN4wgAARTAALMywBdN8wkAAavGKa5OPz0cwACzqy6suwoAChbAALPKFMAAs8TAF01aAAFgA7JSgm2yVxTAALPawBdNWgABYAOyUoLAALPrwBdNdoPAALQGwBdNhITAALQjwBdNkoXAALQ8wBdNoIbAALRTwBdNtYfAALRwwBdNyhTAALSPwBdN4wgAFMAAtKrAF03zCQAArw0+CU7AALTZwAC04QAAhdxgA4jpARzAALTsFsAAtOMuq7Gu1qu9BAADFsAAtQ2AwAC1B8AXTVqD1ocygsAAtRLAF012KQGrximuTk7AALVYwAC1YgAAhd1gA4jpARzAALVtFsAAtWQuq7Gu1qu9BAADFsAAtY6AwAC1iMAXTVqAloczg8AAtZXAF02EKQGrximuTj0cwAC13RbAALXULquxrtarvwUABILAALX5wBdNdhTAALYKwBdj8AoAFsAAthmAwAC2E8AXTVqD1ocyFsAAtigWwAC2JIDAALYewBdNWoPWhzKEWIJZAavGJcAAtl2CwAC2TcAXTXZgA4kMsOI9HMAAtnoWwAC2cS6rsa7Wq78FAASDwAC2lsAXTYQUwAC2qcAXZDgLABbAALa6gMAAtrTAF01agJaHMxbAALbNFsAAtseAwAC2wcAXTVqAloczhFiCWQGrxiXAALcEg8AAtvLAF02EYAOJDLDiPRzAALckhcAAtxjAF02gVgEAARTAALcowBdj8AoAAMAA/Uw9HMAAt0SFwAC3OMAXTaBWAQABFMAAt0jAF2Q4CwAAwAD9TD0cwAC3l4bAALeFwBdNtVYBAAFqwAC3oWADiQCEmwDAAP1MPRfAALe3Lqx6FsAAt86AwAC3yMAXTVqEWIJZrthKwAC34AAGrw59wAC39cAAt/rAAL/HAACsygAAAAEDwAC4B8AAv8cAAAAHBwfAALgYAAAAg9RgA4cwAMAAuC4AAACEV2ADglIAwAC4RwAAAKzLYAOE2QDAALhjAAAArMxgA4TZAMAAuH8AAACF3GADiOkAwAC4lwAAAIXdYAOI6QDAALjAAAAArKxdA8AA/W0CYAOCUmADiOkAAFwBPgJJwAC5ByEcwAC5IBbAALkLLqx8rtpIAQABKwDAAP27PgE9HMAAuTiBwAC5McAXZhqEWgIAAoDAALlQwBdmDB/AALllhzkCAAIcwAC5jRbAALmGFsAAuX0uq7Gu1pWMsNmhXwEAARzAALnLFsAAubEWwAC5qC6rsa7WlYyw2aEZAwADHMAAui1qwAC5710Dka8BYQMBYAOI6WADkZjAAIQNiC8BAAEWwAC6Oy6sfa7bAJGzFsAAumYurHyu2pQAwABUGwDAAFQgH8AAuqmG1AAAAAAAAIJeP0nAALrEJcAAus6AwAC6yMAXZgxgA7ISPgJOwAC68sAAuv0AAKypYAOI6QEcwAC7EobAALr/wBdmYEsBAAEWwAC7GRTAALsTwBdmDAABYAOyEoJvshQAwAD9gUnAALssJcAAuzuHwAC7MMAXZ29gA4kAPgE9HMAAu14WwAC7VS6rsa7Wq78EAAQWwAC7ixbAALuCFsAAu3gWwAC7by6rsa7Wh3iwupsPnPeFAYNJFMAAu6DAF2dvBwFgA4kAFsAAu7IUwAC7rMAXZgwAAWADshKCb7IUFsAAu88WwAC7xBTAALu+wBdmDAABYAOyEoJvshSEWIJZALDiP0nAALvvJcAAu/mAwAC788AXZgxgA7InPgI9HMAAvBAurMoHAAcWwAC8JBTAALwewBdmDAABYAOyJ4GvsioUwAC8KsAXZgwAAWADsieCwAC8McAXZiiDwAC8PMAXZjaEwAC8ScAXZkSFwAC8XMAXZlKGwAC8Z8AXZmAArw5JwAC8gyEcwAC8lxbAALyNFMAAvIfAF2YMAAFgA7InhcuyK0gBAAErAMAA/fE+AT0cwAC8qi6sygcABxbAALy+FMAAvLjAF2YMAAFgA7InhcuyKxTAALzJwBdmDAABYAOyJ4LAALzQwBdmKIPAALzbwBdmNoTAALzowBdmRIXAALz9wBdmUobAAL0IwBdmYACvDj9JwAC9MSXAAL07gMAAvTXAF2YMYAOyPD4CScAAvVMhHMAAvWcWwAC9XRTAAL1XwBdmDAABYAOyPIXKsj9IAQABKwDAAP3xPgJOwAC9g8AAvZEAAKywYAOI6QEewAC9k6x1AgACFsAAvakUwAC9o8AXZgwAAWADsjyFyrI/FsAAvbQuq7Gu1gA9HMAAvdAWwAC9xy6rsa7Wq78EAAQWwAC9/hbAAL30FsAAveoWwAC94S6rsa7Wh3iwupsBnOCFAYNJh8AAvhPAF2mmFsAAvigUwAC+IsAXZgwAAWADsjyFyrI/FsAAvkMWwAC+ORTAAL4zwBdmDAABYAOyPIXKsj+EWIJZALDiPz0cwAC+Xi6sygcABxbAAL5yFMAAvmzAF2YMAAFgA7I8gm2yQRTAAL54wBdmDAABYAOyPILAAL5/wBdmKIPAAL6KwBdmNoTAAL6XwBdmRIXAAL6qwBdmUobAAL61wBdmYACvDknAAL7WJcAAvuCAwAC+2sAXZgxgA7JSPgE9HMAAvvourMoHAAcWwAC/DhTAAL8IwBdmDAABYAOyUoJtslcUwAC/FMAXZgwAAWADslKCwAC/G8AXZiiDwAC/JsAXZjaEwAC/M8AXZkSFwAC/RsAXZlKGwAC/UcAXZmAArw4+AAavD33AAL/MwAC/0cAA4TkAAKwLAAAAAQPAAL/owADhOQAAAAICAsAAv/wAAACD82ADrYcAwADACwAAAKugYAOI6QAAXAE+HE7AAMAiwADAKwAAmw9gA4MbARbAAMBAFsAAwDYWwADALS6rsa7Wh3iwupsPnPdOwADAUsAAwFoAAKzNYAOJJAEWwADAZYLAAMBcwBdrjoTJg0pOwADAggAAAKjzXQPAAP07AWADiOkATsAAwJ4AAACsvGADiOkATsAAwLwAAACsvWADiOkATsAAwOIAAACstV0DwAD9OwFgA4jpAE7AAMECAAAArLZdA8AA/TsBYAOI6QBOwADBIgAAAKy/XQPAAP07AWADiOkAQBzAAMFnJcAAwU4WwADBRoDAAMFBwBdrbIXchyVgA7VFSAEAASXAAMGCFsAAwXiAwADBc8AXa2yF3YcmYAO1RQDAAP3xwADBQMAAwZoATsAAwabAAMG2AACsrWADwAD60QElwADBxRbAAMG9gMAAwbjAF2tshdyHJWADtUVOwADB58AAwfgAAKzOYAPAAPrRASElwADCBxbAAMH/gMAAwfrAF2tshdyHJWADtUVOwADCKsAAwkAAAKzPYAPAAPrRASpJwADCTSIhFsAAwlsWwADCUi6rsa7Wh5Kw0gAUwADCacAXbKQKAD4CTsAAwq7AAMK2AACCV2ADiOkBHMAAwuEWwADCyxbAAMLCLquxrtahD7DVhg8BAAGBwADC7sAXa3oAm75JwADDAiXAAMMOFMAAwwbAF21ADQBgA4kkPgM9FcAAwyrAF2zTCyIUwADDPcAXbNMLAAEcwADDhhbAAMNmFsAAw10uq7Gu1ofosNObGgIAAhbAAMOaFMAAw5LAF21ADQFgA4kkhO+JKhbAAMO4FsAAw64WwADDpS6rsa7Wh3iwupsPnPcAnAQ9FcAAw8vAF20DDCIUwADD48AXbQMMAAEcwADEIBbAAMQRFsAAxAguq7Gu1ofosNObGgIAAhbAAMRFFMAAxD3AF21ADQFgA4kkhO+JKhbAAMRjFsAAxFkWwADEUC6rsa7Wh3iwupsRnPEAnARJwADEeyIiFsAAxIwWwADEhIDAAMR/wBdrbIPVhyeBVcAA/R0AFMAAxKPAF20DDAAAIRTAAMTJwBds0wsAPgVOwADFE8AAxR4AAKzQYAOtgAE1wADFJAAAAQBgA62AAR/AAMUkrYYDAAExwADFN2ADhNkAAoXTasAAxV1gA7VFwADBiIQiFsAAxYOAwADFfsAXa2yEIockNQAAAAEAWwEXwADFmhTAAMWYwBduvw4AhFgWwADFrIDAAMWnwBdrbIRYglmCWRQAwBduvw4APRzAAMXOFsAAxceAwADFwsAXa2yEV4JYhFoCAAKAwADF28AXa2wUwADF4cAXbq0OAACCXj0cwADF+C6sCQIAAhTAAMYQwBdurQ4AgcAAxhzAF2t6AK8cPRfAAMY5gMAAxjTAF2tsoYIWwADGUxTAAMZIwBdurQ4AoYKtgq2JSsAAxmsAPz8/TsAAxpTAAMalAACsimADwAD60QEhFsAAxrEWwADGqC6rsa7Wh5Kw0k7AAMbZAAAArKxdA8AA/W0CYAOCUmADiOkAScAAxvIiFMAAxvbAF2ykCgABFMAAxwnAF2/CDQA+BD2PwADHI8AXbBQxwADHMWADiOkAPRXAAMc7wBdsKggxwADHSWADiOkAPRXAAMdTwBdsQAkxwADHZ2ADiOkAPRXAAMdxwBdv6g4ewADHi8AAwZ4AAmADglJgA4jpAAA/ScAAx7kUwADHvcAXbKQKAD4EPYzAAMfWwBdr4DHAAMfmYAOI6QJqwADH7WADrGDAAOGmasAAyAJgA6xgwADhpj0cwADINxbAAMghFsAAyBguq7Gu1qEPsNWstwcABoPAAMhSwBdrvBbAAMhugsAAyGXAF2uOhMWDKisrgcAAyIrAF2t6hMAAyJfAF2vgAYQiFsAAyL6AwADIucAXa2yEIockwABUkD2NwADIzsAXa/YcwADI7YTAAMjgwBdr4EsBAAGTAMAA/Uo9jsAAyPjAF2wFHMAAyRmEwADJDMAXa+BLAQABlADAAP1KPgI9jcAAyTHAF2v2FsAAyUiAwADJQ8AXa2yF3IclPY7AAMlXwBdsBRbAAMlwgMAAyWvAF2tshd2HJk7AAMmWwADJoQAArNFdA8AA/TsBYAOE2QEewADJp8AA9pIBAWADhNkBFsAAybkWwADJsYDAAMmswBdrbIPVhydhwAD9awBOwADJ18AAyeQAAKzSXQPAAP07AWADhNkBHsAAyerAAPaSAQFgA4TZARbAAMn8FsAAyfSAwADJ78AXa2yD1YcnYcAA/WsARcAAygkBwADKEsAAyhQAAGJgA8AA/JcBkwEcwADKGxTAAMoZwBdyNxEAYwEAARbAAMoqFsAAyiKAwADKHcAXa2yD1YcnYcAA/WsAwAD9xQEVwADKMsAXcjcRHMAAyjMUwADKMsAXcjcRAGQBAAGUAMAA/b0+Ak7AAMpIwADKTgAAg9RgA4cwARzAAMpcFsAAylWAwADKUMAXa2yD1YcnSwEAARTAAMpdwBdyNxEAAMAA/UpJwADKZyElwADKcRTAAMprwBdyqBIAYAOx/j4CPRzAAMqeFMAAypTAF3GmDwCAvwIAAhTAAMqfwBdyNxEAFsAAyrQcwADKsBbAAMqpgMAAyqTAF2tsg9WHJ0sBAAEUwADKscAXcjcRAADAAP1Kg9aHMgDAAP1LPRzAAMrNFMAAysHAF3HsEACAvwIAAhTAAMrOwBdyNxEAFsAAyuMcwADK3xbAAMrYgMAAytPAF2tsg9WHJ0sBAAEUwADK4MAXcjcRAADAAP1KgJaHMwDAAP1LP07AAMsBwADLDQAArNNgA8AA+tEBKk7AAMsfwADLLAAArNRgA8AA+tEBKk7AAMs+wADLUAAArNVgA8AA+tEBKknAAMtdIhTAAMthwBdspAoAARTAAMt0wBdvwg0APgo9F8AAy44urHorrtg9F8AAy6surHsrrtk9F8AAy8kurHwrrto9F8AAy+wurH0rrttOwADMFsAAzCgAAKzWYAOI6QFqwADMMGADrGDAAOGmScAAzEUiFMAAzEnAF20DDAAAIRTAAMxjwBds0wsAPgE9FcAAzH/AF3REFBzAAMy/FsAAzJwWwADMky6rsa7WoQ+w1YWCAgACJsAAzNMBgcAAzNPAF2t6YAOJJBbAAMzzFsAAzOkWwADM4C6rsa7Wh3iwupsRnPEApphJwADNECIhFMAAzRXAF20DDAAAFMAAzS7AF2zTCwA+AT0VwADNSsAXdEQUH8AAzWKJNAIAAhbAAM2DFsAAzXkWwADNcC6rsa7Wh3iwupsPnPcxwADNo2ADiOkChcAAzaTAF2v2hsAAzbXAF2wFAD9FwADN2AHAAM3hwADN4wAAYmADwAD8lwGTARzAAM3qFMAAzejAF3VRFQBjAQABFsAAzfkWwADN8YDAAM3swBdrbIPVhydhwAD9awDAAP3FARXAAM4DwBd1URUcwADOARTAAM4DwBd1URUAZAEAAZQAwAD9vT4DTsAAzhnAAM4fAACD1GADhzABHMAAzi0WwADOJoDAAM4hwBdrbIPVhydLAQABFMAAzi7AF3VRFQAAwAD9Sj0cwADOOi6suwoAChTAAM5VwBd1whYAgMAAzmjAF2tshcAAznrAF2v2hsAAzpfAF2wFFMAAzrbAF3REFAAUwADO1cAXbCoIABTAAM7uwBdsQAkAFMAAzw3AF2/qDgAUwADPLsAXbKQKABTAAM9LwBdvwg0AAK8NScAAz2YUwADPasAXbKQKAD4CPRzAAM+Th8AAz4fAF2wUVgEAARzAAM+sFsAAz5+DwADPl8AXa7yFLIkoSwEAAZMAwAD9SgDAAP1MPRzAAM/Ih8AAz7zAF2wUVgEAARzAAM/hFsAAz9SDwADPzMAXa7yFLIkoSwEAAZQAwAD9SgDAAP1MPz0VwADP/8AXc7YRIRzAANAcFsAA0A0urHqu2EgBAAErAMAA/bs9FcAA0CvAF3PLEiEcwADQShbAANA6Lqx7rtlIAQABKwDAAP27PRXAANBZwBdz4BMhHMAA0IIWwADQbS6sfK7aSAEAASsAwAD9uz9JwADQlRTAANCZwBdspAoAPgtOwADQt8AA0MAAAKzXYAPAAPrRASIiIRTAANDDwBdzyxIAACEUwADQ1MAXc7YRAAAhFMAA0OTAF2zTCwBOwADRAcAA0QoAAKzYYAPAAPrRASIhFMAA0Q3AF3PgEwAAIRTAANEjwBdtAwwAScAA0UAiFMAA0UTAF3d9FAAAIRTAANFRwBd3uRUAPg5OwADRdsAA0YIAAKzZXQPAAP07AWADhNkBMcAA0ZBgA4TZAE7AANGrwADRvQAArNpdA8AA/TsBYAOI6QExwADRyWADiOkATsAA0ePAANHrAACs22ADiSQBFsAA0gkWwADSABbAANH2FsAA0e0uq7Gu1od4sLqbDpz2hMmDSkXAANIbAcAA0iTAANImAABiYAPAAPyXAZMBHMAA0i0UwADSK8AXeIkZAGMBAAEWwADSPBbAANI0gMAA0i/AF2tsg9WHJ2HAAP1rAMAA/cUBFcAA0kbAF3iJGRzAANJEFMAA0kbAF3iJGQBkAQABlADAAP29PgI9HMAA0mEUwADSVcAXeAcWAFYBAAEewADSZbGuAgACHMAA0oIWwADSe4DAANJ2wBdrbIPVhydLAQABFMAA0oPAF3iJGQAAwAD9ShbAANKQFsAA0ocuq7Gu1pWMsNkAAMAA/Uw9HMAA0rYUwADSpMAXeCoXAFYBAAEcwADSzxbAANLCFMAA0rrAF3hNGACFLIkoSwEAAZMAwAD9SgDAAP1MTsAA0vfAANMLAACs3F0DwAD9OwFgA4jpATHAANMXYAOI6QFqwADTHmADrGDAAOGmPRzAANNVFsAA0z8WwADTNi6rsa7WoQ+w1ay3BwAGFMAA033AF3hNGAAWwADTrhbAANOlFsAA05sWwADTki6rsa7Wh3iwupsOnPaExYMqKyuBwADT7sAXa3oUwADUB8AXeZoZAAGEIhbAANQ2gMAA1DHAF2tshCKHJMAAVJA9HMAA1GcWwADUURbAANRILquxrtahD7DVrLcGAAYWwADUqxbAANSiFsAA1JgWwADUjy6rsa7Wh3iwupsOnPaEyYNKFsAA1N0WwADU1BbAANTKFsAA1MEuq7Gu1od4sLqbDpz2hMWDKhTAANT5wBd4KhcAFMAA1RjAF2xACQCBwADVN8AXa3oUwADVUMAXeZoZAADAAFSQTsAA1XfAANWMAACsq2ADiOkBHMAA1aEUwADVjsAXeZoZAEsBAAGTAMAA/Uo9NQAAAAEAYAPAAFKkARbAANW3FsAA1a4uq7Gu1qnnsNQjHMAA1cgUAMAXewsbAEgBAAErAAArHMAA1cgUAMAXewsbAKorBAAEFsAA1eUWwADV3C6rsa7WgKyw0RbAANX7gMAA1fbAF2tshFiCWSesuB/AANYvwABSwgEAATHAANZPYAOI6QEUwADWUMAXet4aAAAAwABSpgFcTsAA1oXAANaQAACs0GADrYABNcAA1pYAAAEAYAOtgAEfwADWlq2GAwABFMAA1qnAF3gHFgAChdMUwADW0MAXet4aAIQiFsAA1vSAwADW78AXa2yEIockNQAAAAEAWwEXwADXCRTAANcHwBd7thsAhFgWwADXG4DAANcWwBdrbIRYglmCWRQAwBd7thsAPRzAANc7FsAA1zSAwADXL8AXa2yEV4JYhFoCAAKAwADXSMAXa2wUwADXTsAXe6QbAACCXknAANdjFMAA12fAF2/CDQA+AUXAANeFAcAA147AANeQAABiYAPAAPyXAZMBHMAA15cUwADXlcAXfHwcAGMBAAEWwADXsBbAANekFMAA15nAF3ukGwCFz4cZYcAA/WsAwAD9xQEVwADXuMAXfHwcHMAA17kUwADXuMAXfHwcAGQBAAGUAMAA/b0+AT0cwADXyy6sswQABBzAANfuFsAA1+MUwADX2MAXe6QbAIXPhxlLAQABFMAA1+/AF3x8HAAAwAD9ShTAANfzwBd7pBsAFsAA2BoUwADYD8AXe6QbAIXThxgUwADYKMAXb+oOAACvCT89F8AA2GKAwADYXcAXa2yhghfAANh8FMAA2HHAF3ukGwChgh/AANibiTQCAAIWwADYvBbAANiyFsAA2Kkuq7Gu1od4sLqbDpz2FMAA2MbAF3maGQAArYKtiUrAANjkAD9JwADY+iIiFMAA2P7AF3d9FAAAFMAA2QrAF3e5FQAAFsAA2SMWwADZG4DAANkWwBdrbIPVhyeDt8AA/R4+Az0cwADZRRbAANk+gMAA2TnAF2tshFeCWIRaAgACgMAA2V/AF2tsHMAA2YEWwADZehbAANlxLquxrtaVjLDZoV8BAAEcwADZvRbAANmlFsAA2Zwuq7Gu1pWMsNmhGQMAA2rAANnKYAORo5CaFsAA2hCAwADaC8AXa2yEWIJZlADAAFQbAMAAVCAAgl49F8AA2i+AwADaKsAXa2yhgmrAANpEYAOJGISqrYlKwADaWgA/ScAA2nAiIRTAANp1wBd3fRQAACEUwADagsAXd7kVAD4DScAA2pYhFsAA2qQWwADamy6rsa7Wh5Kw0j4BPRzAANrIFsAA2sGAwADavMAXa2yEV4JYhFoCAAKAwADa5MAXa2wcwADbCBbAANsBFsAA2vguq7Gu1pWMsNmhXwEAARzAANtGFsAA2ywWwADbIy6rsa7WlYyw2aEZAwADasAA21NgA5GjkHMWwADbm4DAANuWwBdrbIRYglmUAMAAVBsAwABUIACCXj89F8AA28SAwADbv8AXa2yhgmrAANvZYAOJGISqrYlKwADb7wA/PRzAANwkFsAA3A4WwADcBS6rsa7WoQ+w1ay3BgAGg8AA3ErAF2u8FsAA3GaCwADcXcAXa46ExYMqh8AA3IDAF2wUFMAA3JfAF2wqCACBwADcrsAXa3qEwADcxcAXa+AAwABUkD2NwADc28AXa/YcwADc+oTAANztwBdr4EsBAAGTAMAA/Uo9jsAA3QXAF2wFHMAA3SaEwADdGcAXa+BLAQABlADAAP1KPTUAAAABAGADwABSpAEWwADdOhbAAN0xLquxrtap57DUIxzAAN1LFADAF4A6FgBIAQABKwAAKxzAAN1LFADAF4A6FgCqKwQABBbAAN1mFsAA3V0uq7Gu1oCssNEWwADdeoDAAN11wBdrbIRYglknrLgfwADdqsAAUsIBAAExwADd2WADiOkChcAA3drAF2v2hsAA3evAF2wFAADAAFKmAVw9F8AA3gyAwADeB8AXa2yF3IXAAN4WwBdr9oclPRfAAN4ygMAA3i3AF2tshd2GwADePsAXbAWHJj9JwADeWxTAAN5fwBdvwg0APgFFwADeeQHAAN6CwADehAAAYmADwAD8lwGTARzAAN6LFMAA3onAF4EqFABjAQABFsAA3poWwADekoDAAN6NwBdrbIPVhydhwAD9awDAAP3FARXAAN6kwBeBKhQcwADeohTAAN6kwBeBKhQAZAEAAZQAwAD9vT4BPRzAAN6xLqzKBwAHHMAA3ssWwADexIDAAN6/wBdrbIPVhydLAQABFMAA3szAF4EqFAAAwAD9SoDAAN7QwBdrbBzAAN7gFMAA3tbAF3GmDwBLAQABFMAA3uHAF4EqFAAAwAD9ShzAAN7xFMAA3uXAF3HsEABLAQABFMAA3vLAF4EqFAAAwAD9ShbAAN8HgMAA3wLAF2tshdyHJRbAAN8VgMAA3xDAF2tshd2HJhTAAN8gwBdv6g4AAK8OPz0XwADfTYDAAN9IwBdrbKGCH8AA32iJNAIAAoLAAN92wBdrjjHAAN+AYAOI6QKFwADfgcAXa/aGwADfksAXbAUArYlJwADfqyEWwADfuRbAAN+wLquxrtaHkrDSPgJOwADf4sAA3+oAAIRIYAOpeQEWwADf9RbAAN/sLquxrtaESLDXScAA4IUUwADgicAXbKQKAD4BPRzAAOCsFMAA4KTAF4K0FACimAQAA4DAAODRwBdrbBbAAODgFsAA4Ncuq7Gu1qEPsNUWwADhBxbAAOEAFsAA4Pcuq7Gu1pWMsNmArMAAVBcBqaQpqfM/PwavEH3AAOE+wADhQ8AA7zwAAKwOAAAAAQPAAOFgwADvPAAAAAICAsAA4YEAAACD82ADrY4AwADhkAAAAKugYAOI6QAAXAE+A0nAAOGjIiIiHMAA4bYWwADhsRbAAOGsgMAA4afAF4NpgL2FxoC9iLdIAQABJ4HGAMAA/o0AFsAA4eIWwADh3BbAAOHSgMAA4c3AF4NpW4XHhX2FpYFVwAD9HQAWwADiDxbAAOIEFsAA4fqAwADh9cAXg2lbhceFo4WmgVXAAP0dABbAAOI3FsAA4jEWwADiJ4DAAOIiwBeDaVuFx4VthaeBVcAA/R0+AUnAAOTlJcAA5PcWwADk7oDAAOTpwBeDaYWPhcVgA61VPgROwADlHcAA5SYAAIWPYAOtVQEmwADlHQEWwADlLYDAAOUowBeDaYWPhcVgA61VScAA5T8cwADlTBbAAOVDLquxrtaspwEAAYHAAOVcwBeDdwCw4D4CTsAA5X3AAOWJAACr/WADwAD7SQEcwADllILAAOWLwBeEVav7AQAAAav8Ka1aScAA5bchHMAA5ceDwADlu8AXhKpIAQABKwDAAP27PgM9HMAA5eoWwADl44DAAOXewBeDaYRXgliEWgIAAoDAAOYIwBeDaTXAAOYOAAABAGADhroBH8AA5g6GwgEAAYPAAOYcwBeEqgA1AAAAAQBbARfAAOYqhMAA5ijAF4UdhFgWwADmPIDAAOY3wBeDaYRYglmCWYQAwBeFHQCCXj0XwADmWoDAAOZVwBeDaaGCFsAA5ogWwADmfBbAAOZyFsAA5mkuq7Gu1od4sLqbBZznhQGDSa2QSsAA5p0BKz8/TsAA5tPAAObZAACBx2ADhNkBHsAA5tusegQABBbAAOcKLquxrtYWwADnHYLAAOcUwBeEVYCWhrMWwADnLYLAAOckwBeEVaMsrVgWwADnP4LAAOc2wBeEVYRYglkAScAA51QhHMAA516DwADnWMAXhbVIAQABKwDAAP3xPgM9HMAA538WwADneIDAAOdzwBeDaYRXgliEWgIAAoDAAOeMwBeDaYPAAOeSwBeFtQCCXj0XwADnqYDAAOekwBeDaaGCasAA575gA4kYhKqtkErAAOfWASs/ScAA5/olwADoDBbAAOgDgMAA5/7AF4NphY+FxWADrV4+Ak7AAOhGwADoTwAAhY9gA61eASbAAOhGARbAAOhWgMAA6FHAF4NphY+FxWADrV5JwADoaCEWwADodoLAAOhtwBeGrKGtrWI+BEnAAOiTHMAA6KAWwADoly6rsa7WrKcBAAGBwADosMAXg3cAsOA+Ak7AAOjTwADo3wAAq/1gA8AA+0kBHMAA6OqCwADo4cAXhqyr+wEAAAGr/CmtZUnAAOkPIRzAAOkfg8AA6RPAF4cbSAEAASsAwAD9uz4DPRzAAOlEFsAA6T2AwADpOMAXg2mEV4JYhFoCAAKAwADpUcAXg2k1wADpaQAAAQBgA4a6AR/AAOlphsIBAAGDwADpd8AXhxsANQAAAAEAWwEXwADphYTAAOmDwBeHjoRYFsAA6ZeAwADpksAXg2mEWIJZglmEAMAXh44Agl49F8AA6beAwADpssAXg2mhghbAAOnlFsAA6dkWwADpzxbAAOnGLquxrtaHeLC6mwWc54UBg0mtkErAAOn8ASs/P07AAOoxwADqOgAAqsxgA8AA/JcBHMAA6kWCwADqPMAXhqysAAEAAAGr/CmtZknAAOpnHMAA6nSDwADqa8AXiCZIAQABKwDAAP27PgROwADqlsAA6pwAAIHHYAOE2QEcwADqrhbAAOqnFsAA6p4uq7Gu1pWMsNmhXwEAARzAAOrqFsAA6uMWwADq2i6rsa7WlYyw2aEZAwADHMAA60hqwADrDF0Dka8BYQMBYAPAAP5+YAORmMAAUb2ILwEAARbAAOtfgsAA61bAF4asoyytYACRsxbAAOuGgsAA633AF4ashFitYRbAAOu3FsAA66+CwADrpsAXhqyjLK1gYcAA/oIAwABUGwDAAFQgPRzAAOvZFsAA69KAwADrzcAXg2mEV4JYhFoCAAKAwADr5sAXg2mEwADr7MAXiHIAgl49F8AA7AWAwADsAMAXg2mhgmrAAOwaYAOJGISqrZBKwADsNAErP0nAAOxXIRzAAOxkg8AA7FvAF4gmSAEAASsAwAD9uz4DTsAA7IbAAOyMAACBx2ADhNkBHsAA7I6segQABBbAAOzBLquxrtaDwADsy8AXiCYWwADs3oLAAOzVwBeGrKMsrWAWwADs8ILAAOznwBeGrIRYrWEAScAA7QkhHMAA7ROEwADtDcAXiahIAQABKwDAAP3xPgM9HMAA7TgWwADtMYDAAO0swBeDaYRXgliEWgIAAoDAAO1FwBeDaYTAAO1LwBeJqACCXj0XwADtZoDAAO1hwBeDaaGCasAA7XtgA4kYhKqtkErAAO2XASs/PRfAAO3DgMAA7b7AF4NphY81wADtzgAAAQBgA4axAR/AAO3OhrkBAAEcwADt2YPAAO3awBeIJoHGAAAAAMAA/LoANQAAAAEAWwEXwADt9IXAAO3ywBeKhYRYFsAA7g8WwADuBoDAAO4BwBeDaYWPhcWEWIJZglk1AAAAAQBbARfAAO4qhcAA7ijAF4qFhFeAwADuM8AXg2mCWIUAwBeKhYXFPz8/P07AAO5lwADudQAArIVgA7EZARzAAO6AFsAA7ncuq7Gu1qzdBgAFgMAA7p/AF4NpFsAA7qqAwADupcAXg2mFj4XFFsAA7rmAwADutMAXg2mEWIJZFsAA7sqAwADuxcAXg2msDaxzrZKBwADu28AXg3cBrKWAwADvBcAXg2mw+T0XwADvFYDAAO8QwBeDaaGCFsAA7zSCwADvJMAXixqClLEcrZAGrxF9wADvQcAA70bAAPCtAACsEAAAAAEDwADvasAA8K0AAAACAgLAAO+SAAAAg/NgA62ZAMAA76EAAACroGADiOkAAFwBPgVOwADvv8AA78sAAIUTYAOE2QEWwADv4xbAAO/SgMAA783AF4vjq+atnYUTiIY9HMAA7/0WwADv9C6rsa7Wq70DAAOCwADwDcAXjAWBwADwGsAXi/EpAK5OPRfAAPA3gMAA8DLAF4vjoYIewADwRqx1AgACgsAA8FbAF4wFFsAA8GMuq7Gu1gCtmz0XwADwgBbAAPB3gMAA8HLAF4vjgnCHY4KUFsAA8IyAwADwh8AXi+Ohgq2biIRKwADwngErBq8SfcAA8LLAAPDDwADyBAAAhcMBasAA8LNgA8AA/eQCAAABA8AA8MvAAPIEAAAAAgICwADw0AAAAIPzYAOGGwDAAPDfAAAgq6BgA4jpAABcAT4ETsAA8PbAAPD+AACFwmADhNkBFsAA8QWAwADxAMAXjPWFwoYdTsAA8RbAAPEfAACFtWADiSQBFsAA8T4WwADxNBbAAPEqFsAA8SEuq7Gu1od4sLqbAZzghQGDST0cwADxVBbAAPFLLquxrtarvQMAA4LAAPFkwBeNF4PAAPFtwBeNOyEWwADxgRbAAPF4LquxrtaHkrDSAK5OPRzAAPGbFsAA8ZIuq7Gu1qu/BAAEg8AA8azAF407HsAA8basdQIAAoLAAPHGwBeNFxbAAPHPLquxrtYAFsAA8eeAwADx4sAXjPWFwoYdFsAA8fWAwADx8MAXjPWEWIJZALDiBq8TfcAA8gnAAPIOwADz1QAArBMAAAABA8AA8jTAAPPVAAAAAgICwADyXgAAAIPzYAOtogDAAPJtAAAAq6BgA4jpAABcAT4ETsAA8oTAAPKUAACshWADsRkBHMAA8p8WwADyli6rsa7WrN0HAAWAwADyvsAXjjkWwADy0hbAAPLJgMAA8sTAF445gnCHY4UTiIYWwADy5IDAAPLfwBeOOYRYglkqgcAA8vfAF45HAqzeFsAA8yOAwADzHsAXjjmCcIdjrKUWwADzT4DAAPNKwBeOOawSrHOtqLD5PRfAAPNvgMAA82rAF445oYIWwADzjoLAAPN+wBeOW4KUsRytpD0XwADzohbAAPOdgMAA85jAF445gm2tpoXMFsAA87SAwADzr8AXjjmhgq2khjhKwADzxgErBq8UfcAA89rAAPPfwAD1MgAArBcAAAABA8AA9ADAAPUyAAAAAgICwAD0JQAAAIPzYAOtrQDAAPQ0AAAAq6BgA4jpAABcAT4DPRzAAPRQFsAA9Ecuq7Gu1qzfBgAEgMAA9GrAF49uFsAA9HWAwAD0cMAXj26sFq20FsAA9IyAwAD0h8AXj26EWIJZgcAA9JjAF498AqzeFsAA9MSAwAD0v8AXj26CcIdjrOAWwAD04YDAAPTcwBePbqwVrHOts7D7PRfAAPT/FsAA9PqAwAD09cAXj26Cba2xhcwWwAD1EYDAAPUMwBePbqGCra+GOErAAPUjASsGrxV9wAD1N8AA9UjAAPWCAACF+gFqwAD1OGADwAD95AIAAAEDwAD1WMAA9YIAAAACAgLAAPVlAAAAg/NgA4bMAMAA9XQAACCroGADiOkAAFwBPgAGrxZ9wAD1h8AA9ZjAAPfzAACGGQFqwAD1iGADwAD95AIAAAEDwAD1oMAA9/MAAAACAgLAAPWlAAAAg/NgA4dhAMAA9bQAACCroGADiOkAAFwBPgdOwAD10MAA9d0AAKzhYAOI6QEWwAD17RbAAPXkgMAA9d/AF5DDgnCHY4KUiIRJwAD19xzAAPYIgsAA9fvAF5DlSAEAAWrAAPYRYAOJAISbAIjtPgFKwAD2KAEcwAD2Ly6YDAIAAoDAAPZBwBeQw4HAAPZHwBeQ0QCu3T9OwAD2asAA9nYAAIUTYAOE2QEWwAD2hhbAAPZ9gMAA9njAF5DDgnCHY4UTiIY9HMAA9qAWwAD2ly6rsa7Wq70EAAODwAD2sMAXkWCCwAD2vcAXkOUpAavGKa5OTsAA9v7AAPcDAACCbWADhNkBFsAA9wqAwAD3BcAXkMOCbYdkPRzAAPcdFsAA9xQuq7Gu1qu9BAADhMAA9y3AF5G7gcAA9zPAF5DRKQGrximuTj0cwAD3txbAAPeuLquxrtasgAIAAoDAAPfJwBeQwx7AAPfPrHUCAAKEwAD338AXkbsWwAD35S6rsa7WAACw3gavF33AAPf4wAD3/cAA/M0AAKwdAAAAAQPAAPgcwAD8zQAAAAICAsAA+D8AAACD82ADrbkAwAD4TgAAAKugYAOI6QAAXAE+Ck7AAPhlwAD4cgAAhZJgA4jpARzAAPh5gMAA+HTAF5Jyq82scwEAARbAAPiILquxrtYArMlOwAD4oQAAAKuyYAOI6QBJwAD4ryEcwAD4vRbAAPi4gMAA+LPAF5Jynq+ss0gBAAErAMAA/fE+BE7AAPjSwAD43QAArKNgA8AA/eQBHMAA+OgWwAD43y6rsa7WrOIDAAKCwAD4/sAXkpQWwAD5EYDAAPkMwBeScp6vrLMBq7cqsOY9i8AA+T3AF5LIHMAA+VEWwAD5SC6rsa7Wq7wCAAKEwAD5X8AXkwCCwAD5a8AXkpQAsOk9HMAA+YkWwAD5gC6rsa7WrOMGAAYWwAD5uYDAAPm0wBeScoWPrMSEwAD5zcAXkwAmwAD5/AEjJcAA+e0WwAD56IDAAPnjwBeScp6vrLNgA4UEFsAA+gOAwAD5/sAXknKer6yzKwFgA4TZYAOFBBbAAPofgMAA+hrAF5Jynq+ss4PAAPovwBeSyBbAAPpNFsAA+kiAwAD6Q8AXknKer6yzhFiCWQCw8D0cwAD6ZYDAAPpgwBeScqvFrHMDAAMWwAD6cy6rsa7WFsAA+oKAwAD6fcAXknKer6yzg8AA+ojAF5LIAK4qP07AAPqkAAAArJRgA4N9AEnAAPq1IRzAAPrEFsAA+r6AwAD6ucAXknKCjqy1SAEAASsAwAD98T4BPYzAAPrVwBeUYibAAPrVARzAAProgMAA+uPAF5JyrBuscwIAAhbAAPsDLquxrtaCwAD7DcAXkpQArb9gA4N9P07AAPvnwAD79AAAq7NgA4jpARzAAPv/FsAA+/Yuq7Gu1qyVAgAChMAA/A3AF5RigsAA/BrAF5KUALDtPRzAAPwygMAA/C3AF5Jyq7CscwMAAxbAAPw8LquxrtaDwAD8RsAXksiFwAD8UMAXlNoArL49NQAAAAEAYAOGMwEWwAD8aIDAAPxjwBeScqwZrbsjHMAA/HiGAMAXlUtIAQABKwAAKxfAAPx4hgDAF5VLhcwWwAD8ioDAAPyFwBeScqGCriGGOAFgA4jpPRzAAPyhgMAA/JzAF5JyrDmscwAAAACuKUrAAPy+ASsGrxh9wAD80sAA/OPAAP2OAACFmAFqwAD802ADwAD95AIAAAEDwAD888AA/Y4AAAACAgLAAP0AAAAAg/NgA4UEAMAA/Q8AACCroGADiOkAAFwBPgE9HMAA/SsWwAD9Ii6rsa7WrN8FAASAwAD9PMAXlfQWwAD9R4DAAP1CwBeV9IWPhQYWwAD9VoDAAP1RwBeV9IRYglmBwAD9YsAXlgIBrOCAwAD9hcAXlfSw+wavGX3AAP2TwAD9mMABALcAAKwfAAAAAQPAAP27wAEAtwAAAAEBAcAA/eIAAACD82ADrcQAAFwBPgZOwAD+AsAA/hYAAKzkXQPAAP07AWADiYIBFsAA/jsWwAD+LBbAAP4lgMAA/iDAF5aVgkmEkoUKg4WExYMqTsAA/l7AAP5sAACFLF0DwAD9OwFgA4jpAR7AAP56wAD2kgEBYAOI6QEWwAD+nYHAAP6JwBeWqWHAAP1rAEXAAP6qAcAA/rPAAP61AABiYAPAAPyXAZMBHMAA/ryDwAD+usAXlyhjAQABFsAA/syCwAD+vsAXluZhwAD9awDAAP3FAYvAAP7UwBeXKBzAAP7Vg8AA/tTAF5coZAEAAZQAwAD9vT4BPRzAAP7ugsAA/uHAF5bmgL8CAAKDwAD+78AXlygfwAD++ImBAQABHMAA/x2BwAD/CsAXlqlLAQABg8AA/x7AF5coAMAA/UoAAMAA/Us9HsAA/z+sigIAAibAAP9rARbAAP9rgMAA/2bAF5aVW4SQYAOsg4LAAP92wBeW5gA9HMAA/5MWwAD/ii6rsa7WrIYGAAUrFsAA/7+AwAD/usAXlpWEWIJZFsAA/+gWwAD/3xbAAP/YgMAA/9PAF5aVgkmEkoJug9OFSoTFFsABABkWwAEAChbAAQADgMAA//7AF5aVgkmEkoUKg4WEyYNKFsABADCAwAEAK8AXlpWr3K3GAaydKbD1PR7AAQCDrIsBAAEmwAEAqQEWwAEAqYDAAQCkwBeWlVuEkGADrIMABq8afcABALzAAQDNwAEA/wAAhgMBasABAL1gA8AA/eQCAAABA8ABANnAAQD/AAAAAgICwAEA4gAAAIPzYAOG9ADAAQDxAAAgq6BgA4jpAABcAT4ABq8bfcABAQTAAQEJwAEDpwAArCIAAAABA8ABARzAAQOnAAAAAQEBwAEBLAAAAIPzYAOtywAAXAE+Bk7AAQE8wAEBRQAAq5BgA4TZARbAAQFMgMABAUfAF5kxq5Ctz07AAQFewAEBbQAArOVgA7CTARbAAQF4FsABAW8uq7Gu1qzlsNpOwAEBlcABAaEAAKugYAOI6QEjIRbAAQGzgsABAaTAF5lprOawlhbAAQHYgsABAcnAF5lprOewl2rAAQH9YAOsYMAA4aYBYAOI6U7AAQIZAAAAoYJgA4jpAEnAAQIrIRzAAQI/FsABAjSAwAECL8AXmTGCb4hASAEAASsAwAD98T4CPRzAAQJZFsABAlAuq7Gu1qu9BAADgcABAmnAF5lFg8ABAnPAF5mOKQGrximuTj2MwAECrMAXmdgewAECu6x1AgACgcABAsvAF5lFFsABAtUuq7Gu1gA+AT2MwAEC88AXmdgWwAEDHxbAAQMVFsABAwsWwAEDAi6rsa7Wh3iwupsAnPuFAYNJPRzAAQNBgsABAzLAF5lprOgEAAQWwAEDTi6rsa7WgMABA1jAF5kxhMABA17AF5nYIR7AAQN1wAD2eAIAAhbAAQOEgMABA3/AF5kxrCGtzSeaRAAAsKMGrxx9wAEDrMABA7HAAQ4dAACsCQAAAAEDwAEDyMABDh0AAAACAgLAAQPcAAAAg/NgA62AAMABA+sAAACroGADiOkAAFwBPhBOwAEEAsABBAsAAJsOYAODGwEWwAEEIBbAAQQWFsABBA0uq7Gu1od4sLqbDpz2TsABBDLAAQQ6AACs22ADiSQBFsABBEWCwAEEPMAXmzWEyYNKTsABBGIAAACo810DwAD9OwFgA4jpAE7AAQR+AAAArKtgA4jpAE7AAQSnAAAArLVdA8AA/TsBYAOI6QBOwAEExwAAAKy2XQPAAP07AWADiOkATsABBN3AAQTtAACsrWADwAD60QElwAEFARbAAQT0gMABBO/AF5sThdOHGGADtUVOwAEFI8ABBTQAAKyKYAPAAPrRASEWwAEFQBbAAQU3LquxrtaHkrDSTsABBWgAAACsrF0DwAD9bQJgA4JSYAOI6QBJwAEFgSIUwAEFhcAXm9gIAAEUwAEFmMAXnAcJAD4DPY7AAQWywBebrDHAAQXAYAOI6QA9j8ABBcrAF5vCMcABBdhgA4jpAD0VwAEF4sAXnC8KHsABBfzAAMGeAAJgA4JSYAOI6QAAP0nAAQYqFMABBi7AF5vYCAA+Az2MwAEGR8AXm4cxwAEGV2ADiOkBasABBl5gA6xgwADhpj0cwAEGkxbAAQZ9FsABBnQuq7Gu1qEPsNWstwcABoPAAQauwBebYxbAAQbKgsABBsHAF5s1hMWDKisrgcABBubAF5shhMABBvPAF5uHAYQiFsABBxqAwAEHFcAXmxOEIocXwABUkD2NwAEHKsAXm50cwAEHToTAAQdBwBebh0sBAAGTAMAA/Uo+AT2NwAEHZsAXm50WwAEHgoDAAQd9wBebE4XThxhJwAEHmiIUwAEHnsAXm9gIAAEUwAEHscAXnAcJAD4BRcABB8sBwAEH1MABB9YAAGJgA8AA/JcBkwEcwAEH3RTAAQfbwBedrgsAYwEAARbAAQfwFsABB+SAwAEH38AXmxOFz4cZYcAA/WsAwAD9xQEVwAEH+sAXna4LHMABB/gUwAEH+sAXna4LAGQBAAGUAMAA/b0+A07AAQgQwAEIFQAAgpRgA4jpARzAAQgXLqyqBgAGHMABCEEWwAEINoDAAQgxwBebE4XPhxlLAQABFMABCELAF52uCwAAwAD9SoDAAQhSwBebE4XAAQhkwBebnRTAAQiGwBecLwoAFMABCKfAF5vYCAAUwAEIxMAXnAcJAACvCD0cwAEI64fAAQjfwBebwlYBAAEUwAEI78AXnh8MAADAAP1MScABCP4UwAEJAsAXm9gIAD4BPRzAAQkrhsABCR/AF5usVgEAARzAAQlEFsABCTeDwAEJL8AXm2OFLIkoSwEAAZMAwAD9SgDAAP1MPz9JwAEJZhTAAQlqwBeb2AgAPgQ9HMABCaIWwAEJjBbAAQmDLquxrtahD7DVrLcGAAaDwAEJyMAXm2MWwAEJ5ILAAQnbwBebNYTFgyqGwAEJ/sAXm6yHwAEKFcAXm8KBwAEKLMAXmyGEwAEKQ8AXm4cAwABUkD2NwAEKWcAXm50cwAEKfYTAAQpwwBebh0sBAAGTAMAA/Uo9NQAAAAEAYAPAAFKkARbAAQqRFsABCoguq7Gu1qnnsNQjHMABCqIUAMAXn6QLAEgBAAErAAArHMABCqIUAMAXn6QLAKorBAAEFsABCr0WwAEKtC6rsa7WgKyw0RbAAQrRgMABCszAF5sThFiCWSesuB/AAQsBwABSwgEAATHAAQshYAOI6QGFwAELIsAXm50AAMAAUqYBXD0XwAELRoDAAQtBwBebE4XThcABC1XAF5udhxg/ScABC3UUwAELecAXnAcJAD4BRcABC5MBwAELnMABC54AAGJgA8AA/JcBkwEcwAELpRTAAQujwBegbwsAYwEAARbAAQu4FsABC6yAwAELp8AXmxOFz4cZYcAA/WsAwAD9xQEVwAELwMAXoG8LHMABC8EUwAELwMAXoG8LAGQBAAGUAMAA/b0+AT0cwAELzy6sswQABBzAAQv5FsABC+6AwAEL6cAXmxOFz4cZSwEAARTAAQv6wBegbwsAAMAA/UqAwAEL/sAXmxMWwAEMCYDAAQwEwBebE4XThxgUwAEMF8AXnC8KAACvCT89F8ABDESAwAEMP8AXmxOhgh/AAQxXiTQCAAKCwAEMZcAXmzUxwAEMb2ADiOkBhcABDHDAF5udAK2CScABDIwhFsABDJoWwAEMkS6rsa7Wh5Kw0j4DTsABDMPAAQzLAACESGADqXkBFsABDNYWwAEMzS6rsa7WhEiw10nAAQzlFMABDOnAF5vYCAA+AT0cwAENDBTAAQ0EwBehlgsAooYEAAOAwAENMcAXmxMWwAENQBbAAQ03LquxrtahD7DVFsABDWcWwAENYBbAAQ1XLquxrtaVjLDZgKzAAFQXAamkKanyP0nAAQ2YIRbAAQ3BFsABDbMWwAENrBbAAQ2lFMABDZ3AF6GWCwCVS6l8gkmqaZ6KqH+HiYsrPgE9F8ABDfAWwAEN6RbAAQ3gLquxrtaVjLDZoPspwABUGT8/Bq8dfcABDiLAAQ4nwAEQ6gAArCUAAAABA8ABDkTAARDqAAAAAgICwAEOZQAAAIPzYAOt2QDAAQ50AAAAq6BgA4jpAABcAT4KTsABDpDAAQ6ZAACrsmADiOkBasABDqFgA4kAhJtOwAEO18ABDtwAAJ6vYAOE2QEWwAEO44DAAQ7ewBeio56vrLNJwAEO7SXAAQ72g8ABDvHAF6LiYAOFgj4CPYrAAQ8MwBeixRbAAQ8jFsABDxwUwAEPF8AXouIDAWADhYKCSYWGhQ+DkD0cwAEPOoDAAQ81wBeio6vFrHMDAAMWwAEPSC6rsa7WFMABD1LAF6LiAwFgA4WCgsABD1jAF6LFAK4qP07AAQ90AAAArJRgA4N9AE7AAQ+OwAEPmwAAq7NgA4jpAWrAAQ+jYAOsYMAA4aZOwAEPusABD8AAAIKOYAOE2QEWwAEPx4DAAQ/CwBeio4KOrLVJwAEP0iXAAQ/chsABD9bAF6O0YAOFkj4DPY3AAQ/ywBejlRbAARAOFsABEAcUwAEQAcAXo7QGAWADhZKCSYWXhRCDkT2MwAEQIMAXo4YWwAEQNBTAARAuwBejtAYBYAOFkoJJhZc9HsABEFbAAFRQAQABhMABEGvAF6OGAD89HMABEIiAwAEQg8AXoqOrsKxzAwADFsABEJIuq7Gu1oLAARCcwBeixYXAARCmwBejlQCsvj0cwAEQvoDAARC5wBeio6w5rHMAAAAArilKwAEQ2wErBq8efcABEO/AAREAwAESagAAhaoBasABEPBgA8AA/eQCAAABA8ABEQ7AARJqAAAAAgICwAERGQAAAIPzYAOFggDAAREoAAAgq6BgA4jpAABcAT4FTsABET/AARFGAACCSWADg30BFsABEU2AwAERSMAXpN2CSYWGPR7AARFtwABUUAEAAYLAARGCwBek/wBOwAERk8ABEZgAAIKUYAOI6QEWwAERoYLAARGawBek/4UPg5BJwAERsSIlwAERvILAARG1wBek/2ADhBIAHMABEdgWwAER0xTAARHMwBek/wIBYAOEEoJrhBVIAQABasABEelgA4RShNwAwAD98T4BPYvAARH5wBelOhzAARIJFsABEgAuq7Gu1qzpAwADg8ABEhzAF6U6gcABEiLAF6TrgMABEi/AF6TdALD+Pz0cwAESSRbAARJALquxrtasgAIAAoDAARJbwBek3YPAARJhwBelOgCw3gavH33AARJvwAESgMABFVoAAIW6AWrAARJwYAPAAP3kAgAAAQPAARKVwAEVWgAAAAICAsABEqcAAACD82ADhegAwAEStgAAIKugYAOI6QAAXAE+BU7AARLWwAES4QAArJ9gA4k2ASMhHMABEu8WwAES6IDAARLjwBemQ4JJhe9IAQABKwDAAP3xFsABExYWwAETDRbAARMGgMABEwHAF6ZDgkmF74JuhBeFSoTFH8ABEzGJTwIAAjHAARM+YAOI6QBqwAETSGADiQCEmwABYAOJNk7AARNhwAETegAArIdgA8AA+tEBIRzAAROtHsABE4SseQEAARbAAROigMABE53AF6ZDW4XrAEgBAAErAMAA/WVOwAETvsABE84AAKyFYAOxGQEcwAET2RbAARPQLquxrtashgUABYHAARPpwBemURbAARP7gMABE/bAF6ZDhFiCWYLAARQPwBemZRbAARQmgsABFBvAF6ZlhUmJPhbAARQ3gMABFDLAF6ZDW4XrALD1PRzAARRQFsABFEcuq7Gu1qyAAgACgMABFGLAF6ZDFsABFHiEwAEUaMAXpyOClLEcALDeScABFIMiIYPAARSIwBem4wAhHMABFLAWwAEUqYDAARSkwBemQ4JJhe9IAQABKwDAAP3xPgE9NQAAAAEAYAOpeQEWwAEUyhbAARTBLquxrtaESLDXIxzAARTThQDAF6f8SAEAASsAACscwAEU04UAwBen/KMiBAADgMABFPzAF6ZDFsABFQsWwAEVAi6rsa7WoQ+w1RbAARUyFsABFSsWwAEVIi6rsa7WlYyw2YCswABUFwGppCmp+AFcPwavIH3AARVfwAEVcMABFokAAIXRAWrAARVgYAPAAP3kAgAAAQPAARWIwAEWiQAAAAICAsABFaQAAACD82ADhkEAwAEVswAAIKugYAOI6QAAXAE+AUnAARXGIRbAARXUFsABFcsuq7Gu1oeSsNI+AUbAARXowAEWEcABFfEAAACCb2ADhNkAFsABFgSAwAEV/8AXqLOFz4ZDPgE9HMABFiQWwAEWGy6rsa7Wq70DAAOCwAEWQcAXqPhqwAEWU2ADrGDAAOGmIRbAARZsFsABFmMuq7Gu1oeSsNIArk4/Bq8hfcABFo7AARafwAEW3QAAhfEBasABFo9gA8AA/eQCAAABA8ABFrHAARbdAAAAAgICwAEWwAAAAIPzYAOGqADAARbPAAAgq6BgA4jpAABcAT4ABq8ifcABFuLAARbnwAEY7QAArCcAAAABA8ABFwTAARjtAAAAAQEBwAEXHgAAAIPzYAOt3wAAXAE+Ak7AARcuwAEXOwAAhPFgA5sNAR7AARdKmxQBAAEcwAEXeRbAARdhFsABF1guq7Gu1ofosNObPQIAAhbAARetFsABF6QWwAEXmy6rsa7WhMmw1oTviSoWwAEXxBbAARe9gMABF7jAF6nYgkmEg4UKg4UAm/sAPRzAARfjFsABF9ouq7Gu1qyGBgAFKxbAARgPgMABGArAF6nYhFiCWSbAARgwARzAARgwgcABGCPAF6nshZMBAAEWwAEYbhbAARhhFsABGFgWwAEYUYDAARhMwBep2IJJhIOCboPThUqExYW/iUQAmxxgA4k2FsABGJcWwAEYji6rsa7WhMmw1hbAARiugMABGKnAF6nYq9yt4QGsnSmw9QavI33AARjywAEY98ABGzQAAKwpAAAAAQPAARkZwAEbNAAAAAICAsABGT8AAACD82ADreYAwAEZTgAAAKugYAOI6QAAXAE+A0nAARlhIRzAARl6FsABGWqAwAEZZcAXqyaFkYXcSAEAASsAwAD98T4BPTUAAAABAGADwABSpAEWwAEZlBbAARmLLquxrtap57DUIxzAARmlggDAF6tySAEAASsAACscwAEZpYIAwBercqorBAAEFsABGbUWwAEZrC6rsa7WgKyw0RbAARm/gMABGbrAF6smhFiCWSeCSR/AARnjwABStAEAARbAARoGgMABGgHAF6smhZGF3AAAwABSpgFcP07AARonwAEaNwAArIVgA7EZARzAARpCFsABGjkuq7Gu1qzdCAAFgMABGmHAF6smKxbAARpygMABGm3AF6smhFiCWSqBwAEahcAXqzQDrOoWwAEasIDAARqrwBerJoWRhdys6xbAARragMABGtXAF6smgL2F2FsWwAEa+IDAARrzwBerJluF2bD5PRfAARsNgMABGwjAF6smoYIWwAEbLILAARscwBesBYKUsRyt6AavJH3AARs5wAEbPsABHO8AAKwrAAAAAQPAARtbwAEc7wAAAAICAsABG3wAAACD82ADre8AwAEbiwAAAKugYAOI6QAAXAE+AknAARueIRzAARu3FsABG6eAwAEbosAXrNmFkYVkSAEAASsAwAD98T4BPTUAAAABAGADwABSpAEWwAEb0RbAARvILquxrtap57DUIxzAARviggDAF60lSAEAASsAACscwAEb4oIAwBetJaorBAAEFsABG/IWwAEb6S6rsa7WgKyw0RbAARv8gMABG/fAF6zZhFiCWSeCSR/AARwgwABStAEAARbAARxDgMABHD7AF6zZhZGFZAAAwABSpgFcPz0cwAEcaRbAARxgLquxrtas3wYABIDAARx6wBes2SsWwAEci4DAARyGwBes2YRYglmBwAEcl8AXrOcCrOoWwAEcwoDAARy9wBes2YWRhWSs7BbAARzmgMABHOHAF6zZgL2FYbD7Bq8lfcABHPTAARz5wAEhfwAArDEAAAABA8ABHRXAASF/AAAAAQEBwAEdLgAAAIPzYAOt/QAAXAE+BE7AAR0+wAEdUQAArC9gA4TZARbAAR1YgMABHVPAF65DrC+t/z0cwAEdeRbAAR1wLquxrtarvQMAA4HAAR2JwBeuV2rAAR2jYAOsYMAA4aYpAK5OTsABHcHAAR3QAACs7WADiOkBHsABHdKsdQIAAoHAAR3iwBeuVxbAAR32LquxrtYARsABHgbAAR4xwAEeDwAAAKgUYAOt9gAWwAEeIoDAAR4dwBeuQ6wwrgA+AkbAAR45wAEedMABHkIAAACs7mADhNkAFsABHl+DwAEeVMAXruKsLa34PgJOwAEeh8ABHpoAAKzvYAOI6QEcwAEesRbAAR6oLquxrtarvQMAA4TAAR7BwBevDYLAAR7RwBeuqikArk5JwAEfVCEcwAEfYhbAAR9ZLquxrtasrwIAAoLAAR9vwBeuqoXAAR9/wBevMACw4T4BPRzAAR+wFsABH6kWwAEfoC6rsa7WlYyw2Z6uBAADHMABH/BqwAEfyl0Dka8BYQMCYAOI6WADiOlgA5GYwACJ5ogvAgACgsABIBHAF66qhcABICHAF68wAJGzFsABIFOEwAEgRMAXrw2EWIJZasABIG1gA8AA/JcVAYJXMcABII5gA5G2ARzAASDKasABIKBgA5GjwACKT4JfAwADFsABIPUWwAEg7C6rsa7WgKyw0RbAASENgcABIPrAF65XhFiCWWrAASEZYAPAAPyXFQCRq8AAVB0/PRzAASFWFsABIU0uq7Gu1qxLAQABFsABIXCDwAEhZcAXruKCbYgeAK5QBq8mfcABIYTAASGJwAEiMgAArDMAAAABA8ABIaPAASIyAAAAAgICwAEhwQAAAIPzYAOuBQDAASHQAAAAq6BgA4jpAABcAT4CPRfAASHogMABIePAF7DCoYIWwAEiFhbAASIKFsABIgAWwAEh9y6rsa7Wh3iwupsHnQyFAYNJrgdKwAEiIwErBq8nfcABIjfAASI8wAElMgAArDUAAAABA8ABImXAASUyAAAAAgICwAEikgAAAIPzYAOuDADAASKhAAAAq6BgA4jpAABcAT4GTsABIsEAAACsn2ADiTYATsABItoAAACFSWADiOkAScABIuohHMABIv8WwAEi84DAASLuwBexSZkIrg5IAQABKwDAAP3xPgI9isABIxDAF7FrFsABIzcWwAEjLhbAASMigMABIx3AF7FJmQiuDoJug4+FSoTFPYvAASNLwBexeh7AASNYrHgBAAEWwAEjeoDAASN1wBexSZkIrg4APgI9isABI5vAF7FrH8ABI6yJTwIAAjHAASO5YAOI6QBqwAEjw2ADiQCEmwA9i8ABI9nAF7F6asABI+xgA4kAhJtOwAEkH8ABJC8AAKyFYAOxGQEcwAEkOhbAASQxLquxrtashgUABYHAASRTwBexVxbAASRtgMABJGjAF7FJhFiCWYLAASSBwBexa4PAASSVwBexehbAASSugMABJKnAF7FJq9yuEQCw9T0XwAEky4DAASTGwBexSaGCFsABJOqEwAEk2sAXskiClLEcriFKwAEk9AEcwAEk+y6sOAIAAoDAASUcwBexSYHAASUiwBexVwCvKQavKH3AASU3wAElPMABJxQAAKw3AAAAAQPAASVVwAEnFAAAAAICAsABJXIAAACD82ADrhcAwAElgQAAAKugYAOI6QAAXAE+Az01AAAAAQBgA4TZARbAASZSgMABJk3AF7Mhgm+uGSMcwAEmZBbAASZdgsABJl3AF7NEhFeCWEgBAAErAMAA/fEXwAEmXYLAASZdwBezRIRXgMABJmjAF7MhglgrAWADglI9HMABJnwWwAEmcy6rsa7Wq70DAAMWwAEmmoDAASaVwBezIYJvrhlqwAEmrGADrGDAAOGmIRbAASbFFsABJrwuq7Gu1oeSsNIArk5KwAEm1gEcwAEm3S6sOAIAAoDAASb+wBezIYHAAScEwBezLwCvKQavKX3AAScZwAEnHsABJ+IAAKw4AAAAAQPAASc+wAEn4gAAAAICAsABJ2IAAACD82ADrh8AwAEncQAAAKugYAOI6QAAXAE+Az0cwAEniYDAASeEwBe0O6w5rHMAAAAArik9F8ABJ6uAwAEnpsAXtDuhgmrAASfAYAOJAISbriFKwAEn0wErBq8qfcABJ+fAASfswAEoLAAAhgEAAAABA8ABJ//AASgsAAAAAgICwAEoDwAAAIPzYAOG6wDAASgeAAAgq6BgA4jpAABcAT4ABq8rfcABKDHAAShCwAEo1gAAhgUBasABKDJgA8AA/eQCAAABA8ABKEzAASjWAAAAAgICwAEoUwAAAIPzYAOG/QDAAShiAAAgq6BgA4jpAABcAT4BPRzAASh+FsABKHUuq7Gu1qu9AwADFsABKJyAwAEol8AXtRWCb4b/asABKK5gA6xgwADhpiEWwAEoxxbAASi+LquxrtaHkrDSAK5OBq8sfcABKNvAASjgwAEpMwAArPAAAAABA8ABKPLAASkzAAAAAQEBwAEpAQAAAIPzYAOuMQAAXAE+AT0cwAEpFhbAASkNLquxrtasSwEAARbAASkqgMABKSXAF7Wogm2IWQCuUAavLX3AASk4wAEpPcABKewAAKxBAAAAAQPAASlSwAEp7AAAAAEBAcABKWQAAACD82ADrjcAAFwBPgI9HMABKXkWwAEpcC6rsa7WrEsBAAEWwAEpjYDAASmIwBe2DIJtiEoArlBGwAEpmMABKcDAASmhAAAArPFgA64xABbAASmwgMABKavAF7YMrECuOT4BPRzAASnILqzwAQABgcABKdvAF7ZSAK8sBq8ufcABKfHAASn2wAEqgAAArEMAAAABA8ABKg3AASqAAAAAAQEBwAEqIQAAAIPzYAOuPgAAXAE+Aj0cwAEqNhbAASotLquxrtasSwEAARbAASpKgMABKkXAF7azgm2IYgCuUD0cwAEqXhbAASpVLquxrtasSwEAARbAASpygMABKm3AF7azhleIYwCuUAavL33AASqFwAEqisABKy0AAKxNAAAAAQPAASqiwAErLQAAAAICAsABKr4AAACD82ADrlMAwAEqzQAAAKugYAOI6QAAXAE+Aj0XwAEq5YDAASrgwBe3QaGCFsABKxEWwAEr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ATR7sM9qwAE0mmADiQCEmxbAATS2gMABNLHAF74Cq+uufwCw9UrAATTOAYLAATTVwBe+JAavM33AATTkwAE06cABNlcAAKxkAAAAAQPAATUSwAE2VwAAAAICAsABNT8AAACD82ADroUAwAE1TgAAAKugYAOI6QAAXAE+Az0cwAE1ahbAATVhLquxrtarvQMAAxbAATV/gMABNXrAF77fo/quiGrAATWKYAOsYMAA4aYpAK5OPRfAATWpgMABNaTAF77foYIjFsABNb2AwAE1uMAXvt+j+a6HasABNdhgA4kAhJsewAE18Kx1AgACFsABNgWAwAE2AMAXvt+j+q6IFsABNgouq7Gu1gABYAOI6a4hSsABNhkBHMABNiAurDgCAAKAwAE2QcAXvt+BwAE2R8AXvu0ArykGrzR9wAE2XMABNmHAATmIAACsaAAAAAEDwAE2ecABOYgAAAACAgLAATaVAAAAg/NgA66OAMABNqQAAACroGADiOkAAFwBPgpOwAE208ABNtwAAIJwYAOuagEmwAE20wEWwAE244DAATbewBe/4oJwhO5gA65qTsABNvbAATcHAACs9WADwAD60QEWwAE3EoLAATcJwBfABKxYrHOucE7AATcywAE3SQAArPZgA4jpARbAATdUgsABN0vAF8AEgpSIhE7AATdowAE3dQAAhYpgA4jpARzAATeWFsABN4AWwAE3dy6rsa7WoPKuS6z3AwADFsABN6+AwAE3qsAXv+KsZqxzrpIWwAE3u4DAATe2wBe/4qxnrHOuk4PAATfDwBfAMgCxKknAATfaIRzAATfrhcABN97AF8B+SAEAASsAiO0+AT01AAAAAQBgA8AAUqQBFsABOAUWwAE3/C6rsa7Wqeew1CMcwAE4FoYAwBfBAEgBAAErAAArHMABOBaGAMAXwQCqKwQABBbAATgmFsABOB0uq7Gu1oCssNEWwAE4MIDAATgrwBe/4oRYglknhYofwAE4WsAAUrsBAAGFwAE4dsAXwH4AAMAAUqYBXD89F8ABOJWAwAE4kMAXv+KFioXAATikwBfAfoTvTsABOLrAATi/AACClGADiOkBNQAAAAEAYAOI6QGFwAE4wcAXwH4jHMABOM6GAMAXwbhIAQABKwAAhMABONHAF8BahgDAF8G4AWADiOlJwAE47RbAATj6gsABOPHAF8AErFOs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hGhdA8AA/TsBYAOE2QAAXAAGsMmAisAAQvfAAEL8wABDOwACrJwAAAABA8AAQxbAAEM7AAAAAQEBwABDLwAAAIRoXQPAAP07AWADhNkAAFwABrDKgIrAAEOcwABDocAARA4AAqF0AAAAAQPAAEO6wABEDgAAAAMDA8AAQ8sAAACVjGADwABUFADAAEPrAAAAhRNgA4TZAMAARAEAAACs8mADiOkAAFwAAAAYT+AAGFBUABhQeAAYUJwAGFDCABhQ6AAYUT8AGFGkABhR7QAYUj0AGFJ9ABhS1AAAAAsCsM2AisAARSTAAEUzwAEirgeo4QAAAWABsLgAAA4EsM+AisAARdPAAEYaBa3JAGADiTYBH8AARe+JTwIAAmrAAEX8XQPAAP07AWADiOmFtmrAAEYMYAOJAISbAASw0ICKwABGOcAARj8JrEcAYAPAAFRAAASw0YCKwABGWsAARl0JgKwBasAARkVgA8AA/eQCYAPAAP7/AASw0oCKwABHHcAARycJh5IAYAPAAPrRAASw04CKwABHQcAAR08Jh+gAYAOb8QAEsNSAisAAR2rAAEd5CannAGADwABSpAAEsNWAisAAR5rAAEevCaEPAGADwABUhgAEsNaAisAAR8jAAEfQCYTJAGADiSQABLDXgIrAAEf8wABIAwmESAFqwABH1mADwAD95AJgA6l5AASw2ICKwABIJsAASE8JrcoAXQPAAP1tAmADglJgA4jpATLAAEhNYAOCUmADiOkABLDZgIrAAEhkwABIahiVjABgA8AAVBQBKwSw2oCKwABI4cAASO8YrOUAYAOwkwErBLDbgIrAAEmHwABJnxitywBgA5sNASsEsNyAisAASjzAAEpKGK3MAGADiTYBKwEFsQ2AisAASk/AAEpPwABL+wCsRgADwABKZ8AAS/sAAAAFBQXAAEp0AAAErEdgA8AAVEAAwABKgQAABICsYAPAAP7/AMAASosAAACnaGADwAD60QDAAEqaAAAEhMlgA4kkAMAASqkAAASESGADqXkAAGADsM0BPwoIAbDQgADAGFTpCAGw0YEAwBhU+QgBsNaDAMAYVRkIAbDXhADAGFUnDABAIiKCwABKwsAYVQkAHMAAStaEwABKzsAYVSdIAQABKwDAAP3xASIhgsAASuTAGFUJACEcwABK+ITAAErwwBhVJ0gBAAErAMAA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GKlHCgBjAQABFsAA1daFwADVx8AYpnhhwAD9awDAAP3FH8AA1fOJgQEAARzAANYThcAA1gXAGKZ4SwEAARTAANYUwBipRwoAAMAA/UoAasAA1jBgA4kAhJsBYAOI6QDAAP2CPY/AANZNwBinKh7AANZpmxEBAAEUwADWccAYqRcJAAA+AT2PwADXwcAYpypqwADX3WADmw3AAJ0KRcAA2McBwADY0MAA2NIAAGJgA8AA/JcBkwEcwADY2RTAANjXwBiqsgkAYwEAARbAANjjhsAA2NvAGKajYcAA/WsAwAD9xQEVwADY68AYqrIJHMAA2OwUwADY68AYqrIJAGQBAAGUAMAA/b0+Ak7AANkUwADZGwAAme5gA65qASbAANkUARzAANkkhsAA2R3AGKajSwEAARTAANklwBiqsgkAAMAA/UpgA65qScAA2S8ewADZT653AQABFMAA2WHAGKsaCgAAPgROwADZfQAAAKGCYAOI6QBJwADZkxzAANmxHMAA2a0UwADZl8AYpzkIAEsBAAEUwADZrsAYqrIJAADAAP1KSAEAARbAANnIFsAA2b4WwADZtC6HeLC6mwCc+4UBg0kAiO0+AT0VwADZ3cAYq3ULFsAA2gIWwADZ9hbAANnsLod4sLqa/5z9hQGDSUnAANoaIRzAANo4HMAA2jQUwADaHsAYpzkIAEsBAAEUwADaNcAYqrIJAADAAP1KSAEAASsAiO0+AT0VwADaTcAYq3ULHsAA2lzAAFRVAgACFsAA2mwuh3iwuhzAANqSh8AA2oXAGKcqhZMBAAEcwADatxTAANqhwBinOQgASwEAARTAANq4wBiqsgkAAMAA/UoAmxwAPgE9FcAA2tnAGKt1C2rAANruYAOJAISbPTUAAAABAGADwABSpAEWwADbDy6p57DUIxzAANsgFADAGKysDABIAQABKwAAKxzAANsgFADAGKysDACqKwQABBbAANsnLoCssNEWwADbMxTAANsswBirGgoAhFiCWSeClB/AANtXwABSuwEAARTAANtzwBirdQsAAADAAFKmAVw9F8AA25IUwADbi8AYqxoKAIKUFMAA25nAGKt1CwCIhD9JwADcXiElwADccIPAANxiwBikI2ADrGA+AT2LwADcicAYpCMcwADcpofAANyZwBinKoWTAQABg8AA3LXAGKQjAJscP07AAN1hwADddQAArfNgA8AA+tEBhMAA3XfAGKQ6TsAA3aHAAN2zAACt9GADsJMBFsAA3bourOWw2k7AAN3dwADd7AAArOVgA7CTAR7AAN3ysKAEAAQuFsAA3hmAwADeEMAYo/eFY4Sxg8AA3ibAGKQjFMAA3jXAGK2QCQAAPRfAAN5ULqzlFMAA3mXAGK3JCwCw2j0cwADeeS6sSwEAARbAAN6RgMAA3ojAGKP3gm2ExACw/U7AAOAWAAAArfVgA4jpAEnAAOAuFMAA4DLAGK2QCQA+AT0VwADgT8AYrkQMHMAA4HMUwADgZMAYrckLAK3BAQABLgCwpT9JwADhdhTAAOF6wBitkAkAPgI9NQAAAAEAYAPAAFKkARbAAOGXLqnnsNQjHMAA4agUAMAYrp0NAEgBAAErAAArHMAA4agUAMAYrp0NAKorBAAEFsAA4a8ugKyw0YLAAOG0wBikEyeFSR/AAOHcwABSuwEAARTAAOH4wBiuRAwAAADAAFKmAVw9F8AA4h2AwADiFMAYo/eFSRTAAOIqwBiuRAwAhLc/PRfAAOJNLqzlFMAA4l7AGK2tCgCw2krAAOJ1AR/AAOKAsR4CAAIrFsAA4qmAwADioMAYo/eFSoTFAAaw94CKwADiv8AA4tDAAOOwAAChMQFqwADiwGADwAD95AIAAAEDwADi3cAA47AAAAACAgLAAOL1AAAAlYxgA8AAVBQAwADjFQAAAIRoXQPAAP07AWADhNkAAFwBPgFJwADjKCEcwADjOIHAAOMswBivrUgBAAErAMAA/WU+Az0XwADjTi6VjIDAAONXwBivnbDZPRzAAONlLqycAQABgcAA44DAGK+tALD4PRfAAOOZLpWMK7DZPwaw+ICKwADjtcAA48bAAOY+AACsnAFqwADjtmADwAD95AIAAAEDwADj4MAA5j4AAAABAQHAAOP5AAAAhGhdA8AA/TsBYAOE2QAAXAE+AUnAAOQMIRzAAOQcgMAA5BDAGLBUSAEAASsAwAD9ZT4ETsAA5PnAAOUBAACt9l0DwAD9OwFgA4JSARzAAOUkHMAA5Q+AwADlA8AYsFSAqwEBYAOCUgE0wADlEwPAAOUTwADlIgAAAAEBAcAA5RQAAACDU2ADhNkAAGADglIBSsAA5RoBFsAA5RyBwADlGsAYsNeEV4JYAMAA/QSArQAAAADAAP0PPR/AAOU4hxQBAAGAwADlRMAYsFQARsAA5VjAAOV8wADlYQAAAIS3YAOE2QCAwADlb8AYsFQ+AT0cwADlhi6rvQMAA4LAAOWWwBixMGrAAOWoYAOsYMAA4aYhFsAA5bguh5Kw0gCw8kXAAOXTAcAA5dzAAOXeAABiYAPAAPyXAZMBHMAA5eWCwADl48AYsX9jAQABFsAA5fOAwADl58AYsFRhwAD9awDAAP3FAYrAAOX9wBixfxzAAOX7gsAA5f3AGLF/ZAEAAZQAwAD9vT4BPRfAAOYZHMAA5hWAwADmCsAYsFRLAQABgsAA5hbAGLF/AMAA/UqEVxzAAOYpgcAA5iLAGLCPSwEAAYLAAOYqwBixfwDAAP1Kglg/BrD5gIrAAObXwADm8cAA91AAAKzdAAAAAQPAAOcGwAD3UAAAAAoFBcAA5yAAAACCb2ADhNkAwADnRAAAAIWPYAOE2QDAAOdYAAAAhFhgA8AA/JcAwADnbwAAAKG5YAPAAPrRAMAA544AAACroGADiOkABcAA57YAAACs3mADiH4BagBgA8AA/aF5wADn3wAAAKylYAOFwwFqAGADwAD9oXnAAOgBAAAArOpgA8AA/eQBagBgA8AA/aF5wADoHQAAAKzrYAOItAFqAGADwAD9oXnAAOg5AAAAW2ADhaMBagBgA8AA/aF5YAOxGQE+D07AAOiewADoqwAAhZJgA4jpASMcwADotoHAAOitwBiyYkgBAAErAMAA/fEWwADoyC6EybDWHMAA6Nsuq70DAAOBwADo68AYsmJqwADo+2ADrGDAAOGmKQCw8gFgA4jpPTUAAAABAGADiH4BhcAA6RXAGLKfIxzAAOknFADAGLN7CwBIAQABKwAAKxfAAOknFADAGLN7CwCClBTAAOkuwBizGwoAiIQBYAOI6UnAAOlAIRzAAOlYhsAA6UTAGLK2SAEAASsAwAD98T4DPY/AAOlpwBiyzRzAAOmFLqu2AgACFMAA6aDAGLMbCgCGwADprsAYsrYAsOU9FcAA6crAGLLmCBbAAOnrhsAA6dfAGLK2gL2Fxj0VwADp98AYsv0JFsAA6heGwADqA8AYsrZbhcc/TsAA6jHAAOpQAACFoWADwAD60QEiJcAA6mKHwADqUsAYss1gA4QSABzAAOqQFsAA6nouoQ+w1au4AgACFMAA6sPAGLLNBwFgA4QSFMAA6tTAGLMbCgAAwABUlU7AAOrrwADq9gAArJ9gA4jpARzAAOr4Lqu8AgACh8AA6wbAGLLNFMAA6xfAGLMbCgAAsOlOwADrLsAA6zsAAIVKYAOJNgEcwADrPS6ruwIAAhTAAOtTwBi0pwwAIYPAAOtgwBiygACw6EnAAOt2IiIiIRzAAOuKh8AA63rAGLLNSAEAASsAwAD98QAhJcAA66gUwADrncAYtKcMAGADiQAAIRzAAOvOFMAA68PAGLSnDABIAQABFsAA6+kWwADr2xbAAOvRLod4sLqbCpzohQGDSQCI7QAewADr/MAA9ngCAAIUwADsBsAYtNsNABrAAOwUsM8APgROwADsMsAA7DkAAIRXYAOCUgEWwADsRoDAAOw7wBiyVIRXglhOwADsZsAA7GwAAIHHYAOE2QEcwADsdRbAAOxuLpWMsNmhQQMAA4DAAOyDwBiyVBzAAOyzasAA7JldA5GvAWEDAWADwAD+fmADkZjAAGCFiC8BAAEWwADszBTAAOzBwBiy5ggAgL2ItwCRs2rAAOzTYAPAAPyXFQDAAFQePTUAAAABAGADglIBFMAA7OTAGLWeDgAjHMAA7OwUAMAYtj8QAEgBAAErAAArHMAA7OwUAMAYtj8QAIRaAgACgMAA7PnAGLJUFMAA7QXAGLXCDwAAgl4BXErAAO0TAR/AAO0esR4CAAIrasAA7URgA4kAhJsAP07AAO1iwADtbAAAq8BgA7CrARzAAO1uLqvBBgAGgcAA7Y/AGLJiFMAA7ZnAGLMbCgCHwADtr8AYss2GwADtwMAYsrYUwADt1cAYsv0JAIDAAO3gwBiyVACxAE7AAO31wADuBQAArIVgA7EZARzAAO4HLqyGBwAFhMAA7hfAGLKQgsAA7iTAGLJwFMAA7jDAGLTbDQAWwADuUxTAAO5GwBi02w0AhUmJPhTAAO5fwBiy/QkAAoWhFMAA7pLAGLRMCwCFkhTAAO7IwBizGwoAsPVOwADu38AA7uwAAKGCYAOI6QEWwADu/hTAAO7uwBi3Dg8AgpSxHEnAAO8IHMAA7xwWwADvFxTAAO8MwBiy5ggAgL2It0gBAAEnSADAAP6NPgE9FcAA7y3AGLeEEBbAAO9QFsAA70YWwADvPC6HeLC6mwGc4IUBg0k/PRzAAO9jLqvDBwAHFMAA74LAGLa0DgCGwADvjcAYsrYUwADvosAYsv0JAIDAAO+1wBiyVBTAAO/BwBi3hBAAFMAA78/AGLTbDQCCwADv3cAYsnAAsO9JwADv7iEewADv88AA9ngCAAKHwADv/cAYss0nIAA+AUnAAPAfIiIiIoPAAPAjwBiygAAhHMAA8E+HwADwP8AYss1IAQABKwDAAP3xACEiJcAA8HaHwADwZsAYss1gA4QSABzAAPCpFsAA8KQUwADwlMAYss0HAWADhBKCa4QVSAEAAWrAAPC6YAOEUoTcAMAA/fEAISXAAPDcFMAA8M/AGLMbCgBgA4kAACEcwADxBhTAAPD5wBizGwoASAEAARbAAPEfFsAA8QkuoQ+w1ZsJwACJZwCI7T4DTsAA8T7AAPFFAACEV2ADglIBFsAA8VKAwADxR8AYslSEV4JYTsAA8WbAAPFwAACt1mADhNkBHMAA8XkWwADxci6VjLDZoUEDAAOAwADxlMAYslQcwADxzGrAAPGsXQORrwFhAwFgA4jpYAORmMAASAqILwEAARTAAPHawBizGwoAAJGzasAA8fVgA8AA/JcVAMAAVB49NQAAAAEAYAOCUgEUwADyCMAYuSwRACMcwADyEBQAwBi5whMASAEAASsAACscwADyEBQAwBi5whMAhFoCAAKAwADyHcAYslQUwADyKcAYuVASAACCXgFcPz9JwADyvCEcwADyyBbAAPLALoRIsNdIAQABKwDAAP3xPgVOwAD0HAAAAK33YAOI6QBOwAD0PQAAAIWRYAODfQBOwAD0WQAAAK34YAOItABJwAD0cSXAAPSAFMAA9HXAGLSnDABgA4kkPgM9FcAA9JzAGLo8ERTAAPSxwBi0pwwBYAOJJD0VwAD0xcAYuksSKz0VwAD05cAYuloTGsAA9Piv3D4DPRXAAPUZwBi6PBEUwAD1LsAYsxsKAD0VwAD1RMAYuksSIyXAAPVmh8AA9VbAGLLNYAODfRTAAPVywBiyzQcBYAODfSsBYAODfT0VwAD1ksAYuloTFMAA9aXAGLLmCAA9HMAA9ccWwAD1vy6ESLDXqa4KAAkUwAD18MAYujwRABbAAPYOLqEPsNUWwAD2Ly6H6LDTLhTAAPZZwBi6WhMAFMAA9nXAGLpLEgAUwAD2kMAYsv0JABbAAPasFsAA9qUulYyw2YCswABUF4LAAPa7wBiycAGppBzAAPb/HsAA9tuseQEAARTAAPb0wBiy/QkAAEgBAAErAMAA/WWp+T9KwAD3FAEfwAD3H7EeAgACKxTAAPc/wBi3hBAAAAaw+oCKwAD3VcAA92bAAPj1AAChdAFqwAD3VmADwAD95AIAAAEDwAD3f8AA+PUAAAADAwPAAPeQAAAAlYxgA8AAVBQAwAD3sAAAAIUTYAOE2QDAAPfGAAAArPJgA4jpAABcAT4GQBzAAPfwFsAA9+EurOWw2kgBAAErAMAA/fHAAPfhwAD39wA9F8AA+AMulYyAwAD4DMAYvAyw2UAhHMAA+CyCwAD4H8AYvCpIAQABKwCI7cAA+B/AAPgzAE7AAPg+wAD4SQAArc1gA4jpARzAAPhLLqu9AwADgcAA+FvAGLwcgsAA+GjAGLwqKQCw8j0cwAD4gS6rvwQABILAAPibwBi8KoPAAPipwBi8loHAAPi1wBi8HBbAAPjOgcAA+MLAGLwchFiCWQCw4j0XwAD45C6VjCuw2Qaw+4CKwAD5hMAA+YnAAQAQAACs3wAAAAEDwAD5mcABABAAAAAIBATAAPmlAAAAgm9gA4TZAMAA+bwAAACFj2ADhNkAwAD50AAAAIRYYAPAAPyXAMAA+eUAAACroGADiOkABMAA+g0AAACs3mADiH4BagBgA8AA/aF5wAD6MQAAAKzgYAOFBAFqAGADwAD9oXnAAPpMAAAArOpgA8AA/eQBagBgA8AA/aF5wAD6aAAAAKzsYAOItAFqAGADwAD9oXlcAT4JTsAA+tUAAACFkmADiOkAScAA+uccwAD69IHAAPrrwBi9RkgBAAErAMAA/fE+AT0VwAD7BcAYvdYIFsAA+xQuhMmw1j4CPRzAAPsxLqu9AwADgcAA+0HAGL1GasAA+1FgA6xgwADhpikAsPI9FcAA+23AGL3WCB7AAPt8rHUCAAKBwAD7jMAYvUYuAD01AAAAAQBgA4h+AYTAAPunwBi9cyMcwAD7uRQAwBi+YgkASAEAASsAACsXwAD7uRQAwBi+YgkAgpQUwAD7wMAYvdYIAIiEAWADiOk9IxzAAPvfh8AA+9LAGL26SAEAASsAiMCPwAD70sAYvboWwAD78IXAAPvjwBi9ioC9hQcrAWADiLRJwAD7+iEcwAD8C4XAAPv+wBi9ikgBAAErAMAA/fE+Aj2OwAD8HMAYvaEcwAD8Li6t2QYAAxTAAPxNwBi91ggAh8AA/FvAGL26gsAA/GnAGL1UA63aasAA/I5dA5GvAWEDAmADwAD+fmADiOlgA5GYwACRIYJvgMAA/L3AGL04hY+BwAD83cAYvUaw5EnAAPzuJcAA/QKGwAD88sAYvaFgA4N9PgJJwAD9FyIhHMAA/SsWwAD9Gy6p57DUSAEAASsAwAD98QAcwAD9QxTAAP02wBi91ggASAEAAWrAAP1MYAOJAISbAIjtPgE9HMAA/XcWwAD9Zy6p57DUqisEAAQWwAD9fi6ArLDRFsAA/ZCFwAD9g8AYvYqEWIJZJ4JJH8AA/bjAAFK0AQABFMAA/dbAGL2hBgFgA4N9AADAAFKmPz0XwAD+CIXAAP37wBi9ioWRFMAA/hrAGL2hBgFgA4N9hQw/P07AAP5BwAD+TgAAoYJgA4jpARzAAP5QLqu8AgAChsAA/l7AGL2hFMAA/m/AGL3WCAAAsOlOwAD+hsAA/pkAAK3oYAOE2QEcwAD+my6s4wYABoHAAP67wBi9RobAAP7NwBi9oYXAAP7ewBi9ioDAAP7swBi9OBTAAP74wBjASgkAgsAA/wbAGL1UALDwScAA/xciJcAA/yyGwAD/HMAYvaFgA4QSABzAAP9ZFsAA/1QUwAD/RMAYvaEGAWADhBKCa4QVSAEAAWrAAP9qYAOEUoTcAMAA/fE+AT0VwAD/e8AYwEoJHMAA/5QurOkDAAMUwAD/p8AYwEoJAIPAAP+1wBi9ZBTAAP/CwBjAfgoAALD+Pz0cwAD/4S6sgAIAAoDAAP/zwBi9OBTAAP//wBjASgkAALDeBrD8gIrAAQBgwAEAacABAMsAAK3BAAAAAQPAAQB4wAEAywAAAAEBAcABAIIAAACFSWADiOkAAGADiOkBPgFKwAEAlAE1AAAAAQBgA4jpAYDAAQCbwBjBpSMcwAEApoEAwBjBwkgBAAErAAAWwAEAvxbAAQCpLqEPsNWFgMAAiWWBAMAYwcIBYAOI6Qaw/YCKwAEBrcABAbLAAQHVAAKsSwAAAAEDwAEBwMABAdUAAAABAQHAAQHLAAAAhWBgA4ePAABcAAaw/oCKwAECPMABAkXAAQZrAACs6QAAAAEDwAECV8ABBmsAAAADAwPAAQJoAAAArflgA4jpAMABAn4AAACCV2ADiOkAwAECkgAAAIJvYAOE2QAAYAOI6QE+AknAAQKkIiIlwAECtIDAAQKowBjCaWADiTYAJcABAteBwAECz8AYwndgA4k2ABbAAQMJFsABAvoUwAEC8sAYwncBAWADiTaExYk4gVXAAP0dPgJOwAEDHsABAy0AAITFXQPAAP07AWADiYIBFsABAzsUwAEDL8AYwmkAAWADiTaExYk4ScABA1EWwAEDZIPAAQNVwBjC7oO3wAD9Hj4GTsABA37AAQOMAACo810DwAD9OwFgA4jpAR7AAQOSwAD9QAIBYAOI6QIWwAEDxIPAAQO1wBjC7mHAAP1rasABA9JgA6xgwADhpgBOwAED7sABA/8AAK36YAOJNgEWwAEEDRTAAQQBwBjCaQABYAOJNoW/iUQ9HMABBEIWwAEELC6hD7DVrLcGAAaFwAEEasAYw4SDwAEEfMAYwu4xwAEEjGADiOkAMcABBJBgA4jpABTAAQSUwBjCdwEBYAOJNoTAAQSdwBjDOgDAAFSQScABBLUhFsABBLouh5Kw0j4CTsABBNbAAQTdAACEV2ADglIBFsABBOqCwAEE38AYwoWEV4JYPRzAAQUDhsABBPzAGMQYhFoCAAKCwAEFH8AYwoU1wAEFPQAAAQBgA4YPAR/AAQU9hhoCAAKCwAEFS8AYwoWEwAEFV8AYwzoANQAAAAEAWwEXwAEFeIfAAQV2wBjEWYRYFsABBZCCwAEFhcAYwoWEWIJZglmHAMAYxFkAgl4/TsABBbPAAQXAAACE8WADmw0BHsABBdubFwIAAoPAAQXlwBjC7oTAAQX1wBjDOgBKwAEGDQEcwAEGIYbAAQYUwBjEuoWTAQABhcABBjDAGMOEAJscPz9KwAEGVQGAwAEGXMAYwmkGsP+AisABCNvAAQjnwAEKzQABrfsAAAABA8ABCRDAAQrNAAAAAgICwAEJHgAAAISYYAODGwDAAQkvAAAAgpRgA4jpAABgA8AA+tEBPgNJwAEJOxbAAQlVFsABCUaAwAEJP8AYxUaExYMqgVXAAP0dSsABCV4BKj9OwAEJlcABCZ0AAK38YAPAAFQzAR/AAQmrwABUPwIAARbAAQnXgMABCdDAGMVGhMWDKgGt/WrAAQqeYAPAAFQmwADlrErAAQquASbAAQquARzAAQq6gcABCrXAGMVUhFIBAAGCwAEKwcAYxZcAiOtgA8AA+tEGsQCAisABC4HAAQufwAERPAAAq8EAAAABA8ABC7/AARE8AAAABgYGwAEL0gAAAIWPYAOE2QDAAQvrAAAAhZJgA4jpAMABDAYAAACs6mADwAD95ADAAQwuAAAArKVgA4XDAMABDFMAAABbYAOFowDAAQxvAAAAgm9gA4TZAABgA7CrAT4CScABDIEiJcABDJWCwAEMhcAYxk9gA4OcASIlwAEMuYLAAQypwBjGT2ADhBIAHMABDOoWwAEM5RTAAQzVwBjGTwIBYAOEEoJrhBVIAQABasABDPtgA4RShL4AwAD98T4DTsABDQ/AAQ0XAACGr2ADiOkBHMABDRkuq7wCAAKCwAENJ8AYxk+BwAENOMAYxkEAsOlJwAENTSXAAQ1ZhsABDVHAGMbxYAOJAD4BSsABDXMBasABDZhgA7CrwADlZz9JwAENrCIhHMABDbmAwAENsMAYxjNIAQABKwDAAP3xACElwAENzYDAAQ3EwBjGM2ADhus+AUnAAQ3rIiIlwAEOAILAAQ3wwBjGT2ADg5wAHsABDhyw/wIAAhbAAQ5rFMABDlvAGMZPAgFgA4OchQqDhRbAAQ6LFMABDnvAGMZPAgFgA4OcgpSDngABIiXAAQ6ygsABDqLAGMZPYAOEEgAewAEO0rD/AgACFsABDyEUwAEPEcAYxk8CAWADhBKFCoOFFsABD14WwAEPVRTAAQ9FwBjGTwIBYAOEEoJuhBeFSYS3AD4BSsABD3gBasABD51gA7CrwADliT8/ScABD80iIiIhHMABD9qAwAEP0cAYxjNIAQABKwDAAP3xACElwAEP9oDAAQ/twBjGM2ADhusAJcABECSCwAEQFMAYxk9gA4QSAB7AARA8sP8CAAIWwAEQgxTAARBzwBjGTwIBYAOEEoUKg4UWwAEQuBbAARCvFMABEJ/AGMZPAgFgA4QSgm6EF4VJhLcAPgFKwAEQzQFqwAEQ8mADsKvAAOV4P0rAAREPAWrAARE0YAOwq8AA5WcGsQGAisABEY7AARGXwAEVFgAArJEAAAABA8ABEavAARUWAAAAAQEBwAERtQAAAIKUYAOI6QAAYAOI6QE+B0/AARHBwAERygAAAa3/YQMBYAOI6WADiOkAA8ABEdjAARJcAAAAAQEBwAER4gAAAIKUYAOI6QAAYAOI6QE+AUnAARHwJcABEfmCwAER9MAYyWZgA4lxPgFKwAESGQEWwAESJRTAARIgwBjJZgIBYAOJcYV/iX8+AUrAARJDAStOwAESZ8ABEnAAAK4AYAOI6QEcwAESgIHAARJywBjJQiABAAGAwAESgcAYyScAAEnAARKMHMABEpmCwAESkMAYyb1IAQABKwCI7UrAARKiAYDAARKpwBjJJz89iMABEvfAGMkngsABEv7AGMm9TsABExXAARMaAACVkmADiOkBHMABEyqBwAETHMAYyUIgAQABgMABEyvAGMknAABJwAETNhzAARM/g8ABEzrAGMoqSAEAASsAiO1KwAETSAGAwAETT8AYySc/Q8ABE1kpPgdJwAETbh7AARNywAD2eAIAAoDAARN8wBjJJ4PAAROCwBjKKgA+AUrAARPVAWrAARPiYAOJAISbP07AARQiwAEUKAAArgFgA4jpARzAARQ4gcABFCrAGMlCIAEAAYPAARQ5wBjKKgAAScABFEYcwAEUUITAARRKwBjKxEgBAAErAIjtSsABFFkBg8ABFGDAGMoqP07AARRwwAEUdgAArgJgA4jpARzAARSGgcABFHjAGMlCIAEAAYTAARSHwBjKxAAAScABFJUcwAEUn4XAARSZwBjLHkgBAAErAIjtSsABFKgBg8ABFK/AGMoqPz2LwAEUu8AYyiqFwAEUwsAYyx49iMABFPHAGMknHMABFQaBwAEU+MAYyUIgAQABgMABFQfAGMknAAAGsQKAisABFRvAARUkwAEWkQAArH8AAAABA8ABFTTAARaRAAAAAQEBwAEVPgAAAIKUYAOI6QAAYAOI6QE+AknAARVKIiXAARVTgMABFU7AGMvZYAOJJAAewAEVb8AA9ngCAAIWwAEVfhTAARV5wBjL2QABYAOJJITviSoWwAEVkxbAARWJLod4sLqbC5zqAD4BSsABFasBFMABFbLAGMvZAAFgA4kkP0rAARYqAR/AARY1iTQCAAIWwAEWVhbAARZMLod4sLqbC5zqMcABFm9gA4jpATUAAAABAGADiOkBgMABFnDAGMvZIxzAARZ1gQDAGMyGSAEAASsAAGrAARZ+YAOJAISbgQDAGMyGAWADiOkABrEDgIrAARaWwAEWn8ABF1sAAK3CAAAAAQPAARatwAEXWwAAAAEBAcABFrcAAACClGADiOkAAGADiOkBPgJOwAEWx8ABFtsAAK4DYAOI6QE1AAAAAQBgA4jpAYDAARbdwBjM6yMcwAEW4oEAwBjNFEgBAAErAABqwAEW62ADiQCEm4EAwBjNFAFgA4jpSsABFv4BH8ABFwmJNAIAAhbAARcqFsABFyAuh3iwupsUnOkxwAEXQWADiOkBgcABF0LAGM0CAAaxBICKwAEXYMABF2nAARfiAACsjwAAAAEDwAEXccABF+IAAAACAgLAARd7AAAAgpRgA4jpAMABF4cAAACEmGADgxsAAGADiOkBPgFKwAEXlQEfwAEXoIk0AgACgcABF67AGM29McABF8BgA4jpATUAAAABAGADiOkBgMABF8HAGM2vIxzAARfGggDAGM33SAEAASsAAGrAARfPYAOJAISbggDAGM33AWADiOkABrEGgIrAARfnwAEX7MABGSEAAK3rsI4AAAABA8ABF/zAARkhAAAAAgICwAEYDgAAAFtgA4WjAMABGB4AAACZ8WEDAmADwAD+fmADhNlcAABcAT4CRsABGFLAARh/wAEYWwAAAIJvYAOE2QAWwAEYc4DAARhpwBjOXoWjhaY+AT0cwAEYj4HAARiHwBjOayACAAIrgsABGJbAGM6RAABGwAEYrcABGNrAARi2AAAArgRgA4WxABbAARjTgMABGMnAGM5ehW2Fpz4BPRzAARjqgcABGOLAGM5rIAIAAhbAARj7gsABGOvAGM7bgL2FsxbAARkRgsABGQHAGM7bgJaFtAAABrEHgIrAARkmwAEZLcABGwUAAK3bsI4AAAABA8ABGUDAARsFAAAABAQEwAEZTgAAAISYYAODGwDAARlbAAAAgL1gA4i0AMABGWYAAACbQGADwAD60QDAARlyAAAAh2VgA8AA/JcAAGADg30BPgNOwAEZi8ABGZIAAIJqYAODfQEcwAEZrBbAARmbFsABGZQurEew0KpDwABUQ64FBQAFgMABGdbAGM9ggcABGd7AGM9ugsABGeTAGM98g8ABGezAGM+MFsABGfguhEiw1wDAAFETScABGgYiHMABGhGEwAEaCsAYz6VIAQABKwDAAP3xADUAAAABAGADwAD60QE1AAAAAQBgA6l5ARbAARodLoRIsNcjHMABGiaFAMAY0DVIAQABKwAAKxbAARomhQDAGNA1nrPAAFVnAWADwAD60SMcwAEaLoUAwBjQKEgBAAErAAAqhQDAGNAoAWADwAD60T4BPSMcwAEacYTAARpqwBjPpUgBAAErAMAA/fGMwAEaasAYz6Uc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hMABNYDAGN6LALEVTsABNe/AATX2AACBdl0DwAD9bQJgA4mCYAPAAFRnARzAATYBFsABNfgurgaxEa4UAAAAAMAAWvJOwAE2cMABNnsAAJq7XQPAAP07AWADiYIBHMABOZocwAE2lxbAATaIg8ABNn3AGN5nhMWDKoCrAQFgA4mCATTAATabA8ABNpvAATmYAAAAAQEBwAE2nAAAAIDUYAOJggAAYAOJggE+BU7AATarwAE2tgAArhVgA8AAVGcBHMABNr6FwAE2uMAY3tlLAQABhsABNr/AGN9iAMAA/YFJwAE3YCIhHMABN2+HwAE3ZMAY33lIAQABKwDAAP3xACEcwAE3ixbAATeFh8ABN3rAGN95hpXAAFRqSAEAARbAATeZh8ABN47AGN95hpTAAFRpAIjtPgI9HMABN6ourgcCAAIcwAE362rAATfFXQORrwFhAwNgA8AA/n5gA8AA/n5gA4jpYAORmMAAaQCILwMAAxbAATgEg8ABN/nAGN5ngL2DIRbAATgtFsABOCOCwAE4GsAY3kOE74mcgL2DIRbAAThChMABODPAGN6Lhq2JnQCRs4PAAThgwBjeZwCxFErAATh1AYbAATh8wBjfYj9AIhzAATifh8ABOJTAGN95SAEAASsAwAD98QEcwAE4uxbAATi1h8ABOKrAGN95hpXAAFRqSAEAARbAATjJh8ABOL7AGN95hpTAAFRpAIjtwAE4lMABOM4ATsABONzAATjiAACuFmADwAD60QEiIRzAATj5h8ABOO7AGN95SAEAASsAwAD98QAhHMABORUWwAE5D4fAATkEwBjfeYaVwABUakgBAAFqwAE5HmADrGDAAOGmAIjtSsABOTMBH8ABOT6JlgMAAxbAATlZhsABOVfAGN9igL2JhiMUwAE5X8AY4PUIABbAATlyh8ABOWfAGN95hpXAAFRqFsABOXyGwAE5esAY32KFf4mHAWADiOkWwAE5hYbAATmDwBjfYoapiYgAAMAA/QSArQAAAADAAP0PTsABOjXAATpCAACE8WADmw0BHsABOlGbFwIAAhbAATpmg8ABOlvAGN5nhMWDKhzAATquHMABOomGwAE6fsAY3xGAqwEBYAOJcQE0wAE6jQPAATqNwAE6rAAAAAEBAcABOo4AAACA1GADiYIAAGADiXEBSsABOpQBH8ABOpiJgQEAAYfA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AK1sgMAArWfAGbe+go4BAAEnrpUAwAD+6j0ewACtjJ/xAwACFsAArZguro+zIoDAAK2nwBm3vgGZf4HAAK29wBm31AAAGax1ABmsuwAZrQIAGa2MABmvnwAZsKkAGbKBABmz/wAZtdwAGbZyABm3FAAZt4oAGbkHAAAADAKzNYCOwACt1cAArdvAAL82A6DbAAABYAGydQAABASzN4COwACuHsAAriMJJwBgA4TZAASzOICOwACuNcAArjsJofsAYAODfQAEszmAjsAArk3AAK5TCZtAAGADg30ABLM6gI7AAK5swACueRiujwBgA4h+ASsBBbNMgI7AAK5+wACufsAArxEAAAADwACumcAArxEAAAAFBQXAAK60AAAAlYxgA7TFAMAArsIAAACShWADnwAAwACu1AAABCdgA4TZAMAAruAAAASh+2ADg30AwACu7QAABJtAYAODfQAAYAOzNQE/BAgBszeCAMAZufYIAbM4gwDAGboDCAGzOYQAwBm6EQkAwACu/bKaAgACgMAArwPAGbnagcAArwvAGbnoAAwGsz2AjsAArxbAAK8hwACvOgEArmuybQAAAAEDwACvM8AArzoAAAAAAAAAYAPAAP5+AUrAAK82ASdLBrM+gI7AAK8/wACvSsAAr3UBAK5ssm0AAAABA8AAr1XAAK91AAAAAAAAAGADwAD+fgFKwACvWAEnoNsGs0CAjsAAr3rAAK+FwACwAQAArpAAAAABA8AAr5DAALABAAAAAAAAAGADhNkBPgI9IxzAAK+nFsAAr5kuro+zOkgBAAErAMAA/fEXwACvmS6ujx/AAK+viKgBAAEWwACvzC4nszcAszorAWADiH5KwACv2AEfwACv44T3AQABFsAAr+8uro+zOgAGs0KAjsAAsAbAALARwACy3AAArpGybQAAAAEDwACwJMAAstwAAAACAgLAALA3AAAAgJZgA4TZAMAAsFgAAACucWADrLEAAGADhNkBPgZOwACwdcAAsIMAAK6SYAOIfgEfwACwiYioAQABgMAAsKbAGbuNAEnAALCyHMAAsL0WwACwti6bQLM5SAEAASsAwAD98T4BPRzAALDWFsAAsM4urmmybbJ4od8DAAIawACw66/oHsAAsPnAAFo4AQABFsAAsQgukoWyeQABh4sptOM/TsAAsTjAALE+AACCjmADhdYBNcAA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0DvAGdd/IxzAANBOggDAGdhbSAEAASsAACsXwADQToIAwBnYW56vgcAA0FXAGde1rLMBYAOusErAANBfAYHAANBmwBnXtQazaoCOwADQc8AA0IrAANHsAAChtwFqwADQdGADwAD95AIAAAEDwADQlsAA0ewAAAACAgLAANCbAAAAg2JgA8AA/JcAwADQrQAAAFtgA4WjAABgA4TZAT4CScAA0L4iHMAA0PAWwADQ6RzAANDKFsAA0MIurmqybbJ8oyMBAAGBwADQ3sAZ2PIAtPdhwAD9a4CXAQABkwDAAP3HARzAANEoFsAA0SEcwADRBxbAAND/Lq5qsm2yfKMkAQABgcAA0RbAGdjyALT2YcAA/WuAlwEAAZMAwAD9xz4BPRzAANE9FsAA0TUurmmybbJ4oeEDAANqwADRX2ADkaPAAGLIgMAA0YPAGdjiFsAA0Zknrp1hwAD+ggC04D9KwADRrAEcwADRuxbAANGzLoQms2KuoAMAA4DAANHNwBnY4hbAANHVLq5qsm2yfIHAANHewBnY8gDAAFIGBrNrgI7AANHxwADSAsAA0lcAAIQxAWrAANHyYAPAAP3kAgAAAQPAANIJwADSVwAAAAEBAcAA0hUAAACEQGADwAD+6AAAXAE+Aj0cwADSJoDAANIhwBnaN4KOAQABJ66hAMAA/uo9HMAA0kWAwADSQMAZ2jeCjgEAARbAANJLLoQms2IAwAD+6gAAGda7ABnXAgAZ10kAGdiuABnaAwAZ2osAAAAFArNugI7AANJcwADSYsAA4ZsDrqIAAAFgAbJ1AAACBLNwgI7AANKpwADSuAmuowBgA7QPAASzcYCOwADSzcAA0twJrqQAYAOydQABBbOCgI7AANLhwADS4cAA03YAAAADwADS+MAA03YAAAAEBATAANMTAAAAlYxgA7TFAMAA0yEAAACShWADnwAAwADTMwAABK6jYAO0DwDAANNJAAAErqRgA7J1AABgA7NuAT8DCAGzcIIAwBnbMggBs3GDAMAZ20AJAMAA02KymgIAAoDAANNowBnbFoHAANNwwBnbJAALBrN0gI7AANN7wADTksAA1CUAAK5vsm0BasAA03xgA8AA/eQCAAABA8AA06HAANQlAAAAAAAAAGADhNkBPgFKwADTqgEcwADTuRbAANOxLq5psm2yeKPwAwADHMAA090WwADTzS6upLNxrm+ybQAAAACygxbAANQIFsAA0/gurqOzcIMptBEWwADUFhbAANQQLpKFsnmHZZ8JALTbBrN1gI7AANQqwADUQcAA1RUAAK5wsm0BasAA1CtgA8AA/eQCAAABA8AA1ErAANUVAAAAAQEBwADUZQAAAK5xYAOssQAAYAOE2QE+AUrAANR+ARzAANSNFsAA1IUurmmybbJ4o/ADAAMcwADUuhbAANSqLq6ks3GucLJtAQABgMAA1MTAGdxbALKHFsAA1PAWwADU4C6uo7Nwgym0ERbAANUGFsAA1QAukoWyeYdlnwkAtNsGs3aAjsAA1RrAANUxwADWRQAArnSybQFqwADVG2ADwAD95AIAAAEDwADVO8AA1kUAAAADAwPAANVHAAAAgJZgA4TZAMAA1VMAAACjfWADwAD60QDAANWAAAAArnFgA6yxAABgA4TZAT4BSsAA1ZkBHMAA1agWwADVoC6uabJtsnij8AMAAxzAANXVFsAA1cUurqSzca50sm0DAAOAwADV4MAZ3Q6BwADV58AZ3RyCwADV9MAZ3SwAsogWwADWIBbAANYQLq6js3CDKbQRFsAA1jYWwADWMC6ShbJ5h2WfCQC02wazd4COwADWSsAA1nDAANbKAACucgFqwADWS2ADwAD95AIAAAEDwADWhsAA1soAAAABAQHAANaSAAAAo/pgA4TZAABgA6yxAUrAANagASbAANagAR7AANaxrs0BAAGAwADWxsAZ3e8AYAOssQazeICOwADWz8AA1tvAANjjAAChPwFqwADW0GADwAD95AIAAAEDwADW7sAA2OMAAAADAwPAANcOAAAAodZgA7RkAMAA1xgAAACufWADwAD8lwDAANctAAAAodhgA8AA+tEAAFsBPgJOwADXR8AA11YAAK6lYAPAAP3kARzAANdwFsAA12AurqSzcaE/AwADgMAA14TAGd5bgcAA14rAGd5pgsAA15rAGd55ALKTScAA16wlwADXv4PAANewwBnej2ADsnU+AUrAANfVAR/AANfgs4IEAAQWwADYAy6uabJtsngWwADYDC6ShbJ5FsAA2BMurqOzcBTAANgkwBnejwMBYAOydQA+Ak7AANhTwADYXgAAgm9gA4TZASbAANhTAYPAANhgwBnej2ADhNlKwADYdgEcwADYhRbAANh9Lq5psm2yeKPwAwADhMAA2KTAGd8wFsAA2MAWwADYsC6uo7Nwgym0ERbAANjOFsAA2MgukoWyeYdlnwkAtNsGs3+AjsAA2OjAANj/wADZeAEArmuybQFqwADY6WADwAD95AIAAAEDwADZEcAA2XgAAAAAAAAAYAPAAP5+AT4BSsAA2RcBJsAA2RcBHsAA2R6dbAMAAyeuph7AANlYwABaOAEAARbAANlnLpKFsnkAFsAA2W8urm2ybbJ/AGADwAD+fgazgICOwADZfcAA2ZTAANm7AQCubLJtAWrAANl+YAPAAP3kAgAAAQPAANmfwADZuwAAAAAAAABgA8AA/n4BSsAA2aIBJ66iBrN5gI7AANnAwADZ2MAA3iAAAKKrAWrAANnBYAPAAP3kAgAAAQPAANn2wADeIAAAAAEBAcAA2gwAAABbXQPAAP07AWADwABXeQAAYAPAAFc3AT4ITsAA2iTAANopAACAvWADwAD+fgEkAAMWwADaPhbAANouLq6js3Cua7JttBQngWoWwADabhbAANpeLq6ks3Gua7Jtsn1OwADak8AA2pgAAIKUYAPAAFc3ARzAANqyFsAA2qIurqSzcaKrAQABgMAA2tHAGeCgALKUTsAA2vAAAAAiYAORtgBJwADa/SIlwADbBoLAANsBwBnhBWADwABW9wAlwADbLhbAANsiFMAA2x3AGeEFAgFgA8AAVvee3sAAVvtgA8AAVk8+Ak7AANtgwADbbAAAnt5gA8AAVk8BJsAA22ABFsAA23MUwADbbsAZ4QUCAWADwABW957ewABW+2ADwABWTz2LwADbhsAZ4TkWwADbnITAANuQwBnhiyLAAFZRPgJOwADbvMAA28cAAIdlYAPAAPyXAR7AANvJwABaOAEAARbAANvoFsAA29gurqOzcJKFsnkAPYvAANv2wBnhORzAANzGHMAA3CpqwADcAF0Dka8BYQMCYAOI6WADwAD+fmADkZinAogvAgACHMAA3E8WwADcRy6uabJtsnihUgEAAR/AANxhwABXhAMAA4LAANxwwBnhBYTAANx2wBnh5hbAANyCLq5tsm2yfwAAtOcWwADcqBbAANyYLq6js3Cua7JttBQAkbOCXwMAAxbAANziLq5tsm2yf4TAANzowBnh5h7AANz0wABaQAIAAhbAAN0RFsAA3QEurqOzcJKFsnkWwADdGC6ShbJ5AACRn07A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AACDYmADwAD8lwABwAEQrgAAAKN9YAPAAPrRAWrAARC7YAPAAPrRAGADhNkBPgFKwAEQyQEcwAEQ0C6usgIAARzAARDjFsABENsurmqybbJ8oYkCAAIxwAEQ/2ADhNkBgMABEQDAGgX7FsABEQgukoWyeQC09AGFRCmzqAazsoCOwAERMMABEUfAARGpAAChGAFqwAERMWADwAD95AIAAAEDwAERVsABEakAAAAAAAAAYAOE2QE+AUrAARFfARzAARFmLq6yAgABHMABEXkWwAERcS6uarJtsnyhogEAARbAARGOLpKFsnkAtPUBhUIps6gGs7SAjsABEa7AARHFwAESKAAArnuybQFqwAERr2ADwAD95AIAAAEDwAER1cABEigAAAAAAAAAYAOE2QE+AUrAARHeARzAARHlLq6yAgABHMABEfgWwAER8C6uarJtsnyhogEAARbAARINLpKFsnkAtPUBhUIps6gGs7WAjsABEi3AARJEwAES0AAArnyybQFqwAESLmADwAD95AIAAAEDwAESVcABEtAAAAABAQHAARJhAAAAgJZgA4TZAABgA4TZAT4BSsABEm4BHMABEnUurrICAAEcwAESiBbAARKALq5qsm2yfKGJAgACMcABEqRgA4TZAYDAARKlwBoHvBbAARKtLpKFsnkAtPQBhUQps6gGs7aAjsABEtXAARLswAEVNwAAozEBasABEtZgA8AA/eQCAAABA8ABEv3AARU3AAAABgYGwAETGgAAAIUsXQPAAP07AWADwABXeQDAARM2AAAAgL1gA8AA/n4AwAETTAAAAFtgA4WjAMABE2MAAACiPmADnwAAwAETegAAAKMwYAOfAADAAROZAAAAoY9gA7JgAABgA4TZAT4CScABE6ohHMABE7yAwAETrsAaCFNIAQABKwDAAP1lPgJAFsABE/4cwAET3BbAARPULq5qsm2yfKGzAQABgsABE/PAGgh6ALT4gVXAAP0dwAET1MABFAUAPRzAARQWFsABFA4urmqybbJ8obQCAAKCwAEUO8AaCHocwAEUThbAARRGLq5psm2yeKG1AQABgMABFGXAGghTALToALT5P0rAARSAARzAARSPFsABFIcurmmybbJ4ox8EAAQcwAEUwRbAARS5Lq5psm2yeKFfAQABHMABFNwurrIBAAGCwAEU58AaCHoAs6gA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FZYAGhZvABoXFQAaF6EAAAAGArPhgI7AASPOwAEj3cABKrUHrrQAAAFgAbJ1AAABBLPjgI7AASQZwAEkIgmhPgBgA7J1AAEFs/KAjsABJCfAASQnwAEknwAAAAPAASQ8wAEknwAAAAMDA8ABJF4AAACVjGADtMUAwAEkbAAAAJKFYAOfAADAASR4AAAEoT5gA7J1AABgA7PhAT8CCAGz44IAwBoYNgkAwAEki7KaAgACgMABJJHAGhgagcABJJnAGhgoAAkGs+aAjsABJKTAASS7wAElHAEArmuybQFqwAEkpWADwAD95AIAAAEDwAEkzcABJRwAAAAAAAAAYAPAAP5+AT4BSsABJNMBJsABJNMBHsABJNqdbAMAAyeuqRbAASUAFsABJPoukoWyeYdlnwkWwAElFBbAASUMLq5psm2yeICswABUFwBgA8AA/n4Gs+iAjsABJSHAASU4wAEluAAAobcBasABJSJgA8AA/eQCAAABA8ABJUTAASW4AAAAAgICwAElSQAAAIdlYAPAAPyXAMABJV8AAABbYAOFowAAYAOE2QE+AUrAASVwASbAASVwAR7AASV3nWoEAAQkwAElkQEWwAElhC6FlsAA/fgnobeAwAElo8AaGTMWwAElry6ubbJtsn8AYAOE2Qaz6YCOwAElvcABJdTAASY6AACjfAFqwAElvmADwAD95AIAAAEDwAEl48ABJjoAAAACAQHAASXvAAAAgJZgA4TZAAHAASX8AAAAo31gA8AA+tEBasABJglgA8AA+tEAYAOE2QE+AUrAASYXARzAASYeLq58sm0BAAGAwAEmMMAaGdEAs/AGs+qAjsABJj/AASZWwAEm7QAArnUBasABJkBgA8AA/eQCAAABA8ABJm7AASbtAAAABAMDwAEmgQAAAICWYAOE2QDAASaRAAAAgpRgA4jpAMABJpsAAACDYmADwAD8lwABwAEmrwAAAKN9YAPAAPrRAWrAASa8YAPAAPrRAGADhNkBPgFKwAEmygEcwAEm0S6ufLJtAQABgMABJuPAGhpWALPwBrPrgI7AASbywAEnCcABKAgAAK52AWrAASbzYAPAAP3kAgAAAQPAAScgwAEoCAAAAAcCAsABJyYAAACud2ADiLQAwAEnQQAAAICWYAOE2QAFwAEnUwAAAINiYAPAAPyXAWrAASdbYAPAAPyXgZ7AASdqAAAAo31gA8AA+tEBasABJ3dgA8AA+tEAwAEnjgAAAIWRYAOEEgFqAGADwAD9oXnAASeqAAAAq6ZgA8AA+tEBasABJ7dgA8AA+tEAwAEnyQAAAKulYAPAAPrRAWrAASfXYAPAAPrRAGADhNkBPgFKwAEn5QEcwAEn7C6ufLJtAQABgcABJ/7AGhsHALPwBrPsgI7AASgNwAEoJMABKMIAAKMUAWrAASgOYAPAAP3kAgAAAQPAASg4wAEowgAAAAQBAcABKD4AAACud2ADiLQAA8ABKFkAAACDYmADwAD8lwFqwAEoYWADwAD8l4GewAEoagAAAKN9YAPAAPrRAWrAASh3YAPAAPrRAMABKIgAAACFkWADhBIBagBgA8AA/aF5YAOE2QE+AUrAASigARzAASinLq58sm0BAAErALPwBrPtgI7AASjHwAEo3sABKX0AAK54AWrAASjIYAPAAP3kAgAAAQPAASjzwAEpfQAAAAQBAcABKPkAAACud2ADiLQAA8ABKRQAAACDYmADwAD8lwFqwAEpHGADwAD8l4GewAEpJQAAAKN9YAPAAPrRAWrAASkyYAPAAPrRAMABKUMAAACFkWADhBIBagBgA8AA/aF5YAOE2QE+AUrAASlbARzAASliLq58sm0BAAErALPwBrPvgI7AASmCwAEpjsABKe8AAK57sm0BasABKYNgA8AA/eQCAAABA8ABKZ7AASnvAAAAAAAAAGADhNkBPgFKwAEppwEmwAEppwEewAEprp1sAwADJ661FsABKdMWwAEpzS6ShbJ5h2WfCRbAASnnFsABKd8urmmybbJ4gKzAAFQXAGADhNkGs/CAjsABKfTAASoLwAEqswAArnyybQFqwAEp9WADwAD95AIAAAEDwAEqHMABKrMAAAABAQHAASooAAAAgJZgA4TZAABgA4TZAT4BSsABKjUBHMABKkQWwAEqPC6uabJtsnihGQMAA2rAASpRYAORo8AAQ9AewAEqgsAAWjgBAAEWwAEqkS6ShbJ5AB7AASqZwABaPwEAARbAASqoLpKFsnkAAMAAVBsAABoYdQAaGP8AGhmdABoaIgAaGsUAGhvEABocdQAaHSYAGh2sABoeVAAAAAkCs/OAjsABKrjAASq+wAE6ngOgzAAAAWABs+EAAAIEs/WAjsABKwPAASsICYCWAGADhNkABLP2gI7AASsUwAErJhiiMABgA8AA/n4AAQW0AYCOwAErK8ABKyvAASvTAAAAA8ABKzzAASvTAAAABQUFwAErVwAAAJWMYAO0xQDAAStlAAAAkoVgA58AAMABK3wAAAChPmADsnUAwAErjAAABICWYAOE2QDAASuYAAAEojBgA8AA/n4AAGADs/MBPwMIAbP1gwDAGh8bCAGz9oQAwBofKQkAwAErtLPyAwADgMABK7rAGh7xgcABK8LAGh7/gsABK8nAGh8NAAYGs/mAjsABK9jAASvvwAEsEAEArmyybQFqwAEr2WADwAD95AIAAAEDwAEr+sABLBAAAAAAAAAAYAPAAP5+AUrAASv9ASegzAaz+4COwAEsFcABLCzAASxmAAChGAFqwAEsFmADwAD95AIAAAEDwAEsO8ABLGYAAAAAAAAAYAOE2QE+AUrAASxEARzAASxLLq62AQABKgCz/Qaz/ICOwAEsa8ABLILAASy6AAChGgFqwAEsbGADwAD95AIAAAEDwAEskMABLLoAAAAAAAAAYAOE2QE+AUrAASyZARzAASygLq62AQABKQCz/Qaz/YCOwAEsv8ABLMrAAThFAACutgAAAAEDwAEs2sABOEUAAAABAQHAASzgAAAAo31gA8AA+tEAAGADhNkBPgJJwAEs8yEcwAEtDxbAASz/FsABLPcurmmybbJ4oP60ykgBAAFqwAEtImADr5fAAMF1AMAA/fE+AUrAAS0wARzAAS0/FsABLTcurmmybbJ4oRkDAANqwAEtV2ADkaPAAG8rHsABLXbAAFo4AQABFsABLYUukoWyeQAWwAEtkxbAAS2NLpKFsnlhnxkAwABUGz9JwAEtph7AAS2qwAD2eAIAAieAvBbAAS25LqIws/YAPgFKwAEt1gEcwAEt5xbAAS3dLqE+s+OjfAIAARbAAS33LoCWs/UBo32AwAEuC8AaII6yiknAAS4kHsABLijAAPZ4AgACJ54HFsABLjguojCz9gA+AUrAAS5VARzAAS5mFsABLlwuoT6z4652BAACGsABLn6v8xbAAS6ILoCWs/UCg2IewAEuocAAWjgBAAEWwAEusC6ShbJ5AKN9gMABLsXAGiCOsoxJwAEu3h7AAS7iwAD2eAIAAied/RbAAS7yLqIws/YAPgFKwAEvDwEcwAEvIBbAAS8WLqE+s+OudgQAAhrAAS84r+0WwAEvQy6AlrP1AoNiHsABL1zAAFo4AQABFsABL2sukoWyeQCjfYDAAS+AwBogjrKMScABL5kewAEvncAA9ngCAAInnhYWwAEvrS6iMLP2AD4BSsABL8oBHMABL9sWwAEv0S6hPrPjrnYEAAIawAEv86/uFsABMAEugJaz9QKDYh7AATAawABaOAEAARbAATApLpKFsnkAo32AwAEwPsAaII6yjEnAATBXHsABMFvAAPZ4AgACJ54CFsABMGsuojCz9gA+AUrAATCIARzAATCZFsABMI8uoT6z4652BAACGsABMLGv8hbAATC+LoCWs/UCg2IewAEw18AAWjgBAAEWwAEw5i6ShbJ5AKN9gMABMPvAGiCOsoxJwAExFB7AATEYwAD2eAIAAied1BbAATEoLqIws/YAPgFKwAExRQEcwAExVhbAATFMLqE+s+OudgQAAhrAATFur9oWwAExfS6AlrP1AoNiHsABMZbAAFo4AQABFsABMaUukoWyeQCjfYDAATG6wBogjrKMScABMdMewAEx18AA9ngCAAInnhMWwAEx5y6iMLP2AD4BSsABMgQBHMABMhUWwAEyCy6hPrPjrnYEAAIawAEyLa/eFsABMjsugJaz9QKDYh7AATJUwABaOAEAARbAATJjLpKFsnkAo32AwAEyeMAaII6yjEnAATKRHsABMpXAAPZ4AgACJ536FsABMqYuojCz9gA+AUrAATLDARzAATLUFsABMsouoT6z4652BAACGsABMuyv6RbAATL7LoCWs/UCg2IewAEzFMAAWjgBAAEWwAEzIy6ShbJ5AKN9gMABMzjAGiCOsoxJwAEzUR7AATNVwAD2eAIAAied8BbAATNmLqIws/YAPgFKwAEzgwEcwAEzlBbAATOKLqE+s+OudgQAAhrAATOsr/QWwAEzvC6AlrP1AoNiHsABM9XAAFo4AQABFsABM+QukoWyeQCjfYDAATP5wBogjrKMScABNBIewAE0FsAA9ngCAAInnfMWwAE0KC6iMLP2AD4BSsABNEUBHMABNFYWwAE0TC6hPrPjrnYEAAIawAE0bq/1FsABNH8ugJaz9QKDYh7AATSYwABaOAEAARbAATSnLpKFsnkAo32AwAE0vMAaII6yjEnAATTVHsABNNnAAPZ4AgACJ54PFsABNOouojCz9gA+AUrAATUHARzAATUYFsABNQ4uoT6z4651BAADFsABNTwugJaz9WrAATVJYAOJAISbHsABNVjAAFo4AQABFsABNWcukoWyeQABo32AwAE1hsAaII6yi0nAATWfHsABNaPAAPZ4AgACJ53kFsABNbMuojCz9gA+AUrAATXQARzAATXhFsABNdcuoT6z4652BAACGsABNfmv3RbAATYELoCWs/UCg2IewAE2HcAAWjgBAAEWwAE2LC6ShbJ5AKN9gMABNkHAGiCOsoxJwAE2Wh7AATZewAD2eAIAAied3xbAATZuLqIws/YAPgFKwAE2iwEcwAE2nBbAATaSLqE+s+OudgQAAhrAATa0r9sWwAE2vS6AlrP1AoNiHsABNtbAAFo4AQABFsABNuUukoWyeQCjfYDAATb6wBogjrKMScABNxMewAE3F8AA9ngCAAInnhwWwAE3KC6iMLP2AD4BSsABN0UBHMABN1YWwAE3TC6hPrPjrnYEAAIawAE3bq/vFsABN3wugJaz9QKDYh7AATeVwABaOAEAARbAATekLpKFsnkAo32AwAE3ucAaII6yjD4BSsABN9oBJsABN9oBHsABN+GdagQABBbAATfrLqIws/YnrrYWwAE4GRbAATgTLpKFsnmHZZ8JFsABODcWwAE4Ly6uabJtsniArMAAVBcAYAOE2Qaz/oCOwAE4SsABOGLAATngAAChYAFqwAE4S2ADwAD95AIAAAEDwAE4d8ABOeAAAAABAQHAATiJAAAAnwhdA8AA/W0CYAPAAP5+YAPAAPyXAABgA4RhAT4CScABOKIiIR7AATinwAD2eAIAAieAvBbAATi2LqIws/YAASElwAE43xbAATjVLqE+s+NgA7LGPgFKwAE5CAEcwAE5GRbAATkPLqE+s+OhYAEAAYDAATkvwBon6gCykT9KwAE5TQEcwAE5XBbAATlULq5psm2yeKFgBQAFKhbAATmDFsABOXkuoT6z465rsm2yfR7AATmewABaOAEAARbAATm3FsABOa0uoT6z45KFsnkAHsABOb/AAFo4AQABFsABOc4ukoWyeQAWwAE51i6AlrP1ALTUBrP/gI7AATnlwAE59sABOpwAAIQxAWrAATnmYAPAAP3kAgAAAQPAATn9wAE6nAAAAAEBAcABOgkAAACEQGADwAD+6AAAXAE+BD0cwAE6GoDAAToVwBopGIKOAQABJ66wAMAA/uo9HsABOjKf8QIAAhbAATo+LoCWs/WAwAE6RcAaKRgAPRzAATpVgMABOlDAGikYgo4BAAEnrrcAwAD+6j0cwAE6f4DAATp6wBopGIKOAQABFsABOoUuojCz9gDAAP7qAAAaH30AGh/EABogFQAaIGYAGie2ABoo5AAaKacAAAAGArQCgI7AATqhwAE6p8ABPqYDoM0AAAFgAbPhAAACBLQEgI7AATrswAE6+gmudwBgA4i0AAS0BYCOwAE7D8ABOx4JhZEAYAOEEgABBbQOgI7AATsjwAE7I8ABO9cAAAADwAE7OsABO9cAAAAFBQXAATtVAAAAlYxgA7TFAMABO2MAAACShWADnwAAwAE7egAAAKE+YAOydQDAATuKAAAErndgA4i0AMABO58AAASFkWADhBIAAGADtAIBPwMIAbQEgwDAGipgCAG0BYQAwBoqbgkAwAE7uLPyAwADgMABO77AGio2gcABO8bAGipEgsABO83AGipSAAQGtAiAjsABO9zAATvzwAE8GgEArmyybQFqwAE73WADwAD95AIAAAEDwAE7/sABPBoAAAAAAAAAYAPAAP5+AUrAATwBASegzQa0CoCOwAE8H8ABPDbAATz1AAChGAFqwAE8IGADwAD95AIAAAEDwAE8RcABPPUAAAAAAAAAYAOE2QE+AUrAATxOARzAATxfFsABPFUuoT6z4654BAABFsABPHUurne0BAODYh7AATyVwABaOAEAARbAATykLpKFsnkAo30qhZEWwAE84S6FkbQFso4GtAuAjsABPPrAAT0RwAE9zgAAoRoBasABPPtgA8AA/eQCAAABA8ABPR/AAT3OAAAAAAAAAGADhNkBPgFKwAE9KAEcwAE9ORbAAT0vLqE+s+OueAQAARbAAT1PLq53tAQDg2IewAE9b8AAWjgBAAEWwAE9fi6ShbJ5AKN9KYWRFsABPbouhZG0BbKOBrQMgI7AAT3TwAE95MABPqQAAIQxAWrAAT3UYAPAAP3kAgAAAQPAAT3rwAE+pAAAAAEBAcABPfcAAACEQGADwAD+6AAAXAE+BD0cwAE+CIDAAT4DwBosUYKOAQABJ664AMAA/uo9HMABPi6AwAE+KcAaLFGCjgEAARbAAT5DFsABPjQurne0BIC9iLcAwAD+6j0cwAE+U4DAAT5OwBosUYKOAQABJ665AMAA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NQAAAAEAWwEXwABKq4LAAEqpwBquxIRYHsAASrjAAFo4AQABgMAASsfAGq6PAIJZggDAGq7EAAa1JICQwABLFcAASx/AAEvtAACiIwAAAAEDwABLNMAAS+0AAAADAwPAAEtCAAAAruNgA58AAMAAS1wAAACCb2ADhNkAwABLbgAAAKIcYAOfAAAAYAOHjwE+AUrAAEt/ATXAAEuKAAABAGADrcsBH8AAS4qt0wIAAjUAAAABAGADnwABgMAAS5nAGq87IxzAAEuogwDAGq+MSAEAASsAACsWwABLqIMAwBqvjIJinxoBYAPAAP5+gcAAS7DAGq9JADUAAAABAFsBF8AAS8SDwABLwsAar3SEWBbAAEvfgMAAS9HAGq87h2WfCYJZgwDAGq90BrUlgJDAAEvywABL/cAATKkAAKILAAAAAQPAAEwWwABMqQAAAAICAsAATC8AAACFz10DwAD9OwFgA4TZAMAATEIAAACShWADnwAAAGADhNkBPgFKwABMTwE1wABMWgAAAQBgA4ZBAR/AAExahksBAAGAwABMbsAasC0ANQAAAAEAWwEXwABMg4LAAEyBwBqwX4RYHsAATJDAAFo4AQABgcAATJ/AGrBCAIJZggDAGrBfBrUmgJDAAE1awABNZMAATcAAAKJvAAAAAQPAAE16wABNwAAAAAEBAcAATYUAAACFYGADh48AAGADh48BPgFKwABNlgEfwABNoYfTAQABgMAATbLAGrDeAAa1J4CQwABNxcAATdDAAE47AAChzQAAAAEDwABN5MAATjsAAAABAQHAAE3rAAAAkoVgA58AAABgA4TZAT4BSsAATfgBNcAATgMAAAEAYAOG6wEfwABOA4bzAAAAADUAAAABAFsBF8AAThWBwABOE8AasVOEWB7AAE4iwABaOAEAAYDAAE4xwBqxNgCCWYEAwBqxUwa1KICQwABOnMAATqfAAE8vAACh4AAAAAEDwABOssAATy8AAAACAgLAAE65AAAAruRgA58AAMAATtIAAACCb2ADhNkAAGADhNkBPgFKwABO5AE1wABO7wAAAQBgA4b9AR/AAE7vhwcBAAGBwABO9cAasdcANQAAAAEAWwEXwABPAoLAAE8AwBqx9IRYHsAATw/AAFo4AQABgMAATx7AGrHJAIJZggDAGrH0BrUpgJDAAE80wABPOcAAT1gAAKFr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AFuRJcAAW5qAwABblcAauPFgA4h+PgJOwABbzsAAW9cAAIJwYAOIfgEmwABbzgGAwABb2cAauPFgA4h+PYjAAFvlwBq48RbAAFv1gcAAW+zAGrmAhROIhj9JwABcDCXAAFwVgMAAXBDAGrjxYAOuHz4CTsAAXFnAAFxfAACu6WADrh8BJsAAXFkBgMAAXGHAGrjxYAOuHz2IwABcbcAauPEWwABceoHAAFx0wBq526P1riM/ScAAXI8lwABcmIDAAFyTwBq48WADh2E+Ak7AAFyswABcsAAAmjBgA4dhASbAAFysAYDAAFyywBq48WADh2E9iMAAXL7AGrjxFsAAXNIWwABcyYHAAFzFwBq6NoJwh2OFE4iGP0rAAFzpASXAAFz1gMAAXPDAGrjxYAOE4Qa1NICQwABdd8AAXXzAAF3QAACiZgAAAAEDwABdkcAAXdAAAAABAQHAAF2cAAAAhWBgA4ePAABgA8AA+tEBSsAAXbABJcAAXbqAwABdsMAausBgA4eVBrU1gJDAAF3VwABd2sAAXhEAAKPuAAAAAQPAAF3qwABeEQAAAAEBAcAAXfIAAACD82ADwAD95AAAYAPAAPrRAUrAAF37ASXAAF4AgMAAXfvAGrsWYAOG6wa1NoCQwABeFsAAXhvAAF5fAACiUgAAAAEDwABeMcAAXl8AAAABAQHAAF45AAAAg/NgA8AA/eQAAGADwAD60QFKwABeQgElwABeR4DAAF5CwBq7bmADtTkAABqM1wAajbQAGo4FABqOTwAajpkAGo7jABqPRAAaj4cAGpAVABqQowAakWkAGpHPABqS8AAalBEAGpVBABqVugAalkgAGpbWABqXYgAamAEAGphFABqYnQAamOMAGpmCABqaKwAamt0AGpuPABqcYgAanTUAGp4uABqfJwAan80AGqIeABqiqgAapNwAGqVsABqmfwAapz4AGqfOABqogQAaqNMAGqkiABqqWQAaqzsAGqxxABqtRAAarf4AGq5nABqvEwAasAUAGrC2ABqxDgAasaEAGrJLABqyowAas9oAGrRSABq0rwAatiMAGrbgABq3uwAauBsAGrhzABq4yQAaupgAGrruABq7RgAau54AAABDArU5gJDAAF5kwABeasAAYFwDruoAAAFgAYePAAACBLU7gJDAAF62wABewgmu1QBdA8AA/TsBYAOI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ZMC3NELAAEOAAAHAAEOkasAAQ6RgA7b9wADm1wA+Aj0XwABDx4LAAEPCwBuVt4CWHMAAQ9WAwABDz8AblYmv2gEAASbAAEP5ARbAAEP5gsAAQ/TAG5W3ErchYAO9PADAAGTBtzRCwABECgABwABELmrAAEQuYAO2/cAA5ugAPgI9F8AAREyCwABER8AblbeAlhzAAERagMAARFTAG5WJr9wBAAEmwABEcQEWwABEcYLAAERswBuVtxK3IWADvVEAwABkzLc0QsAARIIAAcAARKZqwABEpmADtv3AAOb6AD4CPRfAAETFgsAARMDAG5W3gJYcwABE04DAAETNwBuVia/eAQABJsAAROsBFsAAROuCwABE5sAblbcStyFgA71RAMAAZMK3NELAAET8AAHAAEUgasAARSBgA7b9wADnDAA+Aj0XwABFO4LAAEU2wBuVt4CWHMAARUmAwABFQ8AblYmv4AEAASbAAEVZARbAAEVZgsAARVTAG5W3ErchYAO9KgDAAGTRtzRCwABFagABwABFjmrAAEWOYAO2/cAA5x4APgI9F8AARa2CwABFqMAblbeAlhzAAEW7gMAARbXAG5WJr+IBAAEmwABFzwEWwABFz4LAAEXKwBuVtxK3IWADwABi1gDAAGTQtzRCwABF4AABwABGBGrAAEYEYAO2/cAA5zAAPgI9F8AARiGCwABGHMAblbeAlhzAAEYvgMAARinAG5WJr+QBAAEmwABGRQEWwABGRYLAAEZAwBuVtxK3IWADvSoAwABk0rc0QsAARlYAAcAARnpqwABGemADtv3AAOdCAD4CPRfAAEaZgsAARpTAG5W3gJYcwABGp4DAAEahwBuVia/mAQABJsAARr8BFsAARr+CwABGusAblbcStyFgA71RAMAAZKe3NELAAEbQAAHAAEb0asAARvRgA7b9wADnVAA+Aj0XwABHEoLAAEcNwBuVt4CWHMAARyCAwABHGsAblYmv6AEAASbAAEc/ARbAAEc/gsAARzrAG5W3ErchYAO9TgDAAGS0tzRCwABHUAABwABHdGrAAEd0YAO2/cAA52YAPgI9F8AAR4+CwABHisAblbeAlhzAAEedgMAAR5fAG5WJr+oBAAEmwABHsQEWwABHsYLAAEeswBuVtxK3IWADwABLzwDAAGSrtzRCwABHwgABwABH5mrAAEfmYAO2/cAA53oAPgI9F8AASAaCwABIAcAblbeAlhzAAEgUgMAASA7AG5WJr+wBAAEmwABILQEWwABILYLAAEgowBuVtxK3IWADvU4AwABky7c0QsAASD4AAcAASGJqwABIYmADtv3AAOeOAD4CPRfAAEiNgsAASIjAG5W3gJYcwABIm4DAAEiVwBuVia/uAQABJsAASLsBFsAASLuCwABItsAblbcStyFgA70qAMAAZLG3NELAAEjMAAHAAEjwasAASPBgA7b9wADnoAA+Aj0XwABJGoLAAEkVwBuVt4CWHMAASSiAwABJIsAblYmv8AEAASbAAElHARbAAElHgsAASULAG5W3ErchYAO9FgDAAGSytzRCwABJWAABwABJfGrAAEl8YAO2/cAA57QAPgI9F8AASaiCwABJo8AblbeAlhzAAEm2gMAASbDAG5WJr/IBAAEmwABJ1wEWwABJ14LAAEnSwBuVtxK3IWADvTwAwABksLc0QsAASegAAcAASgxqwABKDGADtv3AAOfIAD4CPRfAAEo/gsAASjrAG5W3gJYcwABKTYDAAEpHwBuVia/0AQABJsAASnUBFsAASnWCwABKcMAblbcStyFgA702AMAAZLO3NELAAEqGAAHAAEqqasAASqpgA7b9wADn2gA+Aj0XwABK0ILAAErLwBuVt4CWHMAASt6AwABK2MAblYmv9gEAARbAAEr5gsAASvTAG5W3l1C3IgDAAGS9tzRCwABLCQABwABLLWrAAEstYAO2/cAA5+4APgI9F8AAS1eCwABLUsAblbeAlhzAAEtlgMAAS1/AG5WJr/gCAAImwABLhAEWwABLhILAAEt/wBuVtxK3IWADwABLzxbAAEuPgsAAS4rAG5W3l1C3IgDAAGS+tzRCwABLnwABwABLw2rAAEvDYAO2/cAA6AIAPgI9F8AAS9qCwABL1cAblbeAlhzAAEvogMAAS+LAG5WJr/oBAAEmwABL9AEWwABL9ILAAEvvwBuVtxK3IWADwAD+fgDAAGTTtzRCwABMBQBGwABMHsAATFfAAEw1AAAAgm9gA7dHABbAAExDLq/OtvQ+AUFHwABMXxbAAExygsAATGfAG515gmu3SgYBwABMnWrAAEydYAO3N8AA6BYAPgI9F8AATMqCwABMv8AbnXmAlibAAEzKARzAAE0iHMAATOeAwABM0sAblYmv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d2bAAHdmBrByAGADt10BagBgA7ddwADpWwS3aYCiwAB3c8AAd3MGsHMAYAO3XQFqAGADt13AAOltBLdqgKLAAHeHwAB3hwawdABgA7ddAWoAYAO3XcAA6X8Et2uAosAAd5bAAHeWBrB1AGADt10BagBgA7ddwADpkQS3bICiwAB3pcAAd6UGsHYAYAO3XQFqAGADt13AAOmjBLdtgKLAAHeywAB3sgawdwBgA7ddAWoAYAO3XcAA6bUEt26AosAAd8bAAHfGBrB4AGADt10BagBgA7ddwADpxwS3b4CiwAB33cAAd90GsHkAYAO3XQFqAGADt13AAOnbBLdwgKLAAHfswAB37AawegBgA7ddAWoAYAO3XcAA6e8Et3GAosAAd/3AAHf9BrB7AGADt10BagBgA7ddwADqAQS3coCiwAB4DsAAeA4GsHwAYAO3XQFqAGADt13AAOoVBLdzgKLAAHgnwAB4JwawfQBgA7ddAWoAYAO3XcAA6ikEt3SAosAAeDbAAHg2BrB+AGADt10BagBgA7ddwADqOwS3dYCiwAB4S8AAeEsGgm4AYAO3XQFqAGADt13AAOpPBLd2gKLAAHhXwAB4VwawfwBgA7ddAWoAYAO3XcAA6mMEt3eAosAAeGjAAHhoBrCAAGADt10BagBgA7ddwADqdwS3eICiwAB4csAAeHIGgO0AYAO3XQFqAGADt13AAOqLBLd5gKLAAHh/wAB4fwawgQBgA7ddAWoAYAO3XcAA6p8Et3qAosAAeJbAAHiWBrCCAGADt10BagBgA7ddwADqswS3e4CiwAB4qMAAeKgGsIMAYAO3XQFqAGADt13AAOrHBLd8gKLAAHi3wAB4twawhABgA7ddAWoAYAO3XcAA6tsEt32AosAAeMLAAHjCBoMpAGADt10BagBgA7ddwADq7wS3foCiwAB4zMAAeMwGgngAYAO3XQFqAGADt13AAOsDBLd/gKLAAHjWwAB41gawhQBgA7ddAWoAYAO3XcAA6xcEt4CAosAAeOjAAHjoBrCGAGADt10BagBgA7ddwADrKwS3gYCiwAB4+cAAePkGrdUAYAO3XQFqAGADt13AAOs9BLeCgKLAAHkIwAB5CAawhwBgA7ddAWoAYAO3XcAA61EEt4OAosAAeSLAAHkiBrCIAGADt10BagBgA7ddwADrZQS3hICiwAB5MMAAeTAGsIkAYAO3XQFqAGADt13AAOt3BLeFgKLAAHlLwAB5SwawigBgA7ddAWoAYAO3XcAA64sEt4aAosAAeWDAAHlgBrCLAGADt10BagBgA7ddwADrnQS3h4CiwAB5bcAAeW0GsIwAYAO3XQFqAGADt13AAOuxBLeIgKLAAHmBwAB5gQawjQBgA7ddAWoAYAO3XcAA68MEt4mAosAAeZXAAHmVBrCOAGADt10BagBgA7ddwADr1wS3ioCiwAB5rMAAeawGsI8AYAO3XQFqAGADt13AAOvrBLeLgKLAAHm9wAB5vQaoFABgA7ddAWoAYAO3XcAA6/8Et4yAosAAecvAAHnLBrCQAGADt10BagBgA7ddwADsEwS3jYCiwAB53sAAed4GsJEAYAO3XQFqAGADt13AAOwlBLeOgKLAAHntwAB57QajCABgA7ddAWoAYAO3XcAA7DkEt4+AosAAef3AAHn9BrCSAGADt10BagBgA7ddwADsTQS3kICiwAB6D8AAeg8GsJMAYAO3XQFqAGADt13AAOxhBLeRgKLAAHoiwAB6IgawlABgA7ddAWoAYAO3XcAA7HUEt5KAosAAejTAAHo0BrCVAGADt10BagBgA7ddwADshwS3k4CiwAB6ScAAekkGsJYAYAO3XQFqAGADt13AAOybBLeUgKLAAHpYwAB6WAawlwBgA7ddAWoAYAO3XcAA7K0Et5WAosAAemrAAHpqBrCYAGADt10BagBgA7ddwADsvwS3loCiwAB6fMAAenwGsJkAYAO3XQFqAGADt13AAOzRBLeXgKLAAHqMwAB6jAawmgBgA7ddAWoAYAO3XcAA7OMEt5iAosAAepvAAHqbBrCbAGADt10BagBgA7ddwADs9QS3mYCiwAB6rcAAeq0GsJwAYAO3XQFqAGADt13AAO0HBLeagKLAAHrEwAB6xAaaMgBgA7ddAWoAYAO3XcAA7RkEt5uAosAAes3AAHrNBrCdAGADt10BagBgA7ddwADtKwEFt5+AosAAdxHAAHcRwAB61gEAAAPAAHcRwAB61gAAAAICAsAAdxEAAAQnYAPAAPyXAMAAdxEAAAQoYAPAAP5+AABgA7ddAT8DCAC3X4AAwBvOuQgAt2GBAMAbzsgJAADAAP36AAAAAAEGt52AosAAdxHAAHcRwAB61gAAIwAAAAEDwAB3EcAAetYAAAAA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HMAAo5kuh0QBAAEWwACjqIDAAKOjwBvx5oP0wACWmAC35D0cwACjtS6awgEAARbAAKPAgMAAo7vAG/Hmgm3AAJaZALfjPRzAAKPQFsAAo8suhEC34LAbAQABFsAAo9+AwACj2sAb8eahb8AAlpoAwABdcz0cwACj+BbAAKPzLoRAt+CCkAEAAWrAAKQHYAPAAP5+wADuXwDAAF1oPRzAAKQWLrDbtnQBAAGAwACkIcAb8eYAt+YGt/+AosAApC/AAKRAwAClNAAAsP0BasAApDBgA8AA/eQCAAABA8AApFLAAKU0AAAAAQEBwACkZAAAAIPzYAPAAJaHAABcAT4GPRzAAKR1FsAApHAuhEC34LAbAQABasAApIpgA7ddwADqYwDAAF1zPRzAAKSjFsAApJ4uhEC34IKYAQABasAApLRgA8AA/n7AAO5iAMAAXWc9HMAApMgumsIBAAEWwACk04DAAKTOwBvzNoC9wACWiQC34z0cwACk3i6awgEAARbAAKTpgMAApOTAG/M2gm7AAJaKALfjPRzAAKT9FsAApPguhEC34IKQAQABasAApQxgA8AA/n7AAO5iAMAAXWg9HMAApSAusNu2dAEAAYDAAKUrwBvzNgC35ga4AICiwAClOcAApUrAAKYnAACw/gFqwAClOmADwAD95AIAAAEDwAClVcAApicAAAABAQHAAKVoAAAAg/NgA8AAlrUAAFwBPgY9HMAApXkWwACldC6EQLfgsBsBAAFqwACljmADt13AAOp3AMAAXXM9HMAApaAWwAClmy6EQLfggpgBAAFqwAClsWADwAD+fsAA7mUAwABdZz0cwAClvi6awgEAARbAAKXJgMAApcTAG/RYhY/AAJa3ALfjPRzAAKXYLprCAQABFsAApeOAwACl3sAb9FilNMAAlrgAt+M9HMAApfcWwACl8i6EQLfggpABAAFqwACmBmADwAD+fsAA7mUAwABdaD0cwACmEy6w27Z0AQABgMAAph7AG/RYALfmBrgBgKLAAKYswACmPcAApw4AALD/AWrAAKYtYAPAAP3kAgAAAQPAAKZLwACnDgAAAAEBAcAAplkAAACD82ADwACWdwAAXAE+BT0cwACmahbAAKZlLoRAt+CwGwEAAWrAAKZ/YAO3XcAA6osAwABdcz0cwACmlBbAAKaPLoRAt+CCmAEAAWrAAKal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wRbAAKy8LoRAt+CCkAEAAWrAAKzQYAPAAP5+wADuegDAAF1oPRzAAKzdLrDbtnQBAAGAwACs6MAb+/oAt+YGuAiAosAArPbAAK0HwACt8wAAsQUBasAArPdgA8AA/eQCAAABA8AArRDAAK3zAAAAAQEBwACtGQAAAIPzYAPAAJYQAABcAT4GPRzAAK0qFsAArSUuhEC34LAbAQABasAArT9gA7ddwADrFwDAAF1zPRzAAK1ZFsAArVQuhEC34IKYAQABasAArWpgA8AA/n7AAO59AMAAXWc9HMAArX8umsIBAAEWwACtioDAAK2FwBv9SoJJwACWEgC34z0cwACtly6HRAEAARbAAK2mgMAAraHAG/1KW8AAlhMAt+Q9HMAArbsWwACtti6EQLfggpABAAFqwACtymADwAD+fsAA7n0AwABdaD0cwACt3y6w27Z0AQABgMAArerAG/1KALfmBrgJgKLAAK34wACuCcAArvAAALEGAWrAAK35YAPAAP3kAgAAAQPAAK4RwACu8AAAAAEBAcAArhkAAACD82ADwACWHwAAXAE+Bj0cwACuKhbAAK4lLoRAt+CwGwEAAWrAAK4/YAO3XcAA6ysAwABdcz0cwACuWBbAAK5TLoRAt+CCmAEAAWrAAK5pYAPAAP5+wADugADAAF1nPRzAAK59LprCAQABFsAAroiAwACug8Ab/muCScAAlhIAt+M9HMAArpUuh0QBAAEWwACupIDAAK6fwBv+a1vAAJYTALfkPRzAAK65FsAArrQuhEC34IKQAQABasAArshgA8AA/n7AAO6AAMAAXWg9HMAArtwusNu2dAEAAYDAAK7nwBv+awC35ga4CoCiwACu9cAArwbAALAMAACxBwFqwACu9mADwAD95AIAAAEDwACvFsAAsAwAAAABAQHAAK8mAAAAg/NgA8AAlgAAAFwBPgc9HMAArzcWwACvMi6EQLfgsBsBAAFqwACvTGADt13AAOs9AMAAXXM9HMAAr2MWwACvXi6EQLfggpgBAAFqwACvdGADwAD+fsAA7oMAwABdZz0cwACvhi6awgEAARbAAK+RgMAAr4zAG/+MhcrAAJYCALfjPRzAAK+hLprCAQABFsAAr6yAwACvp8Ab/4yBr8AAlgMAt+M9HMAAr7cumsIBAAEWwACvwoDAAK+9wBv/jIXLwACWBAC34z0cwACv1xbAAK/SLoRAt+CCkAEAAWrAAK/mYAPAAP5+wADugwDAAF1oPRzAAK/4LrDbtnQBAAGAwACwA8Ab/4wAt+YGuAuAosAAsBHAALAiwACxWAAAsQgBasAAsBJgA8AA/eQCAAABA8AAsD3AALFYAAAAAQEBwACwWAAAAIPzYAPAAJX2AABcAT4GPRzAALBpFsAAsGQuhEC34LAbAQABasAAsH5gA7ddwADrUQDAAF1zPRzAALCgFsAAsJsuhEC34IKYAQABasAAsLFgA8AA/n7AAO6GAMAAXWc9HMAAsM4umsIBAAEWwACw2YDAALDUwBwA0Z7ewACV+AC34z0cwACw6y6awgIAARbAALD2gMAAsPHAHADRgJbAAJXoAZfdKbfjPRzAALEYFsAAsRMuhEC34IKQAQABasAAsSdgA8AA/n7AAO6GAMAAXWg9HMAAsUQusNu2dAEAAYDAALFPwBwA0QC35ga4DICiwACxXcAAsW7AALJ9AACxCQFqwACxXmADwAD95AIAAAEDwACxfcAAsn0AAAABAQHAALGMAAAAg/NgA8AAleQAAFwBPgc9HMAAsZ0WwACxmC6EQLfgsBsBAAFqwACxsmADt13AAOtlAMAAXXM9HMAAscgWwACxwy6EQLfggpgBAAFqwACx2WADwAD+fsAA7okAwABdZz0cwACx6i6awgEAARbAALH1gMAAsfDAHAH2sQrAAJXmALfjPRzAALINFsAAsgguhEC34LELAQABFsAAsiSAwACyH8AcAfaqucAAlecAwABdcD0cwACyLS6awgEAARbAALI4gMAAsjPAHAH2gJbAAJXoALfjPRzAALJJFsAAskQuhEC34IKQAQABasAAslhgA8AA/n7AAO6JAMAAXWg9HMAAsmkusNu2dAEAAYDAALJ0wBwB9gC35ga4DYCiwACygsAAspPAALPSAACxDAFqwACyg2ADwAD95AIAAAEDwACyr8AAs9IAAAABAQHAALLLAAAAg/NgA8AAlccAAFwBPgY9HMAAstwWwACy1y6EQLfgsBsBAAFqwACy8WADt13AAOt3AMAAXXM9HMAAsxQWwACzDy6EQLfggpgBAAFqwACzJWADwAD+fsAA7owAwABdZz0cwACzQy6HRAEAARbAALNSgMAAs03AHANGrtXAAJXJALfkPRzAALNqFsAAs2UuhEC34K+Y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0Pkug0q4KoKYAQABasAA0RFgA8AA/n7AAO4vAMAAXbM9isAA0SnAHCIRH8AA0TTAAJfrAQABHMAA0UwWwADRRS6DSrgqsBoAAAAAwABdwgA9HMAA0WoWwADRYy6DSrgqgpABAAFqwADReWADwAD+fsAA7i8AwABdtELAANGRAAHAANGuasAA0a5gA7ddwADpOAA+Bj0cwADRxxbAANHALoNKuCqCmAEAAWrAANHYYAPAAP5+wADuMgDAAF2zTsAA0fnAANH+AACAvWADwACVmAEcwADSAC6erwABYAPAAJWYAAC4L07AANIewADSJAAAgJZgA8AAlZgBHMAA0iYunq8AAWADwACVmAAAuC89isAA0jbAHCIRH8AA0kHAAJdZAgACg8AA0k3AHCRChMAA0lPAHCRqAD0cwADSahbAANJjLoNKuCqCkAEAAWrAANJ5YAPAAP5+wADuMgDAAF20QsAA0owAAcAA0qlqwADSqWADt13AAOlJAD4GPRzAANLLFsAA0sQug0q4KoKYAQABasAA0txgA8AA/n7AAO41AMAAXbNOwADTCsAA0xUAAJ9RXQPAAP07AWADwACXTQEcwADTFy6vjQABYAPAAJdNAAC4ME7AANMwwADTOwAAsO1gA8AA+tEBHMAA00QWwADTPS6DSrgqr5EAAAAAwABdvz2KwADTWMAcIhEfwADTY8AAl0wCAAGDwADTeMAcJSgBsO2EwADTkMAcJVc9HMAA06wWwADTpS6DSrgqgpABAAFqwADTu2ADwAD+fsAA7jUAwABdtELAANPXAAHAANP0asAA0/RgA7ddwADpWwA+BD0cwADUDhbAANQHLoNKuCqCmAEAAWrAANQfYAPAAP5+wADuOADAAF2zPYrAANQzwBwiER/AANQ+wACXPQAAAAA9HMAA1F0WwADUVi6DSrgqgpABAAFqwADUbGADwAD+fsAA7jgAwABdtELAANSAAAHAANSdasAA1J1gA7ddwADpbQA+BT0cwADUvhbAANS3LoNKuCqCmAEAAWrAANTPYAPAAP5+wADuOwDAAF2zTsAA1P7AANUHAACIal0DwAD9OwFgA8AAlZgBHMAA1Qkur40AAWADwACVmAAAuDA9isAA1R3AHCIRH8AA1SjAAJcxAQABg8AA1TzAHCagAD0cwADVVhbAANVPLoNKuCqCkAEAAWrAANVlYAPAAP5+wADuOwDAAF20QsAA1YAAAcAA1Z1qwADVnWADt13AAOl/AD4EPRzAANW5FsAA1bIug0q4KoKYAQABasAA1cpgA8AA/n7AAO4+AMAAXbM9isAA1eDAHCIRH8AA1evAAJXjAQABHMAA1founq8AAWADwACVmAAAuC8APRzAANYSFsAA1gsug0q4KoKQAQABasAA1iFgA8AA/n7AAO4+AMAAXbRCwADWNwABwADWVGrAANZUYAO3XcAA6ZEAPgY9HMAA1nAWwADWaS6DSrgqgpgBAAFqwADWgWADwAD+fsAA7kEAwABds07AANajwADWrwAAsHVgA7cbAR7AANa9tyQBAAEWwADW0C6DSrgqAD0cwADW7hbAANbhLq/NuCtWAQABg8AA1vLAHCf0AMAA/Uw9isAA1wjAHCIRg8AA1w/AHCf0PRzAANcrFsAA1yQug0q4KoKQAQABasAA1zpgA8AA/n7AAO5BAMAAXbRCwADXUAABwADXbWrAANdtYAO3XcAA6aMAPgY9HMAA14cWwADXgC6DSrgqgpgBAAFqwADXmGADwAD+fsAA7kQAwABds07AANe0wADXuwAAgylgA8AAlaIBHMAA170unq8AAWADwACVogAAuC9OwADX1cAA19oAAJaDYAPAAJWiARzAANfcLp6vAAFgA8AAlaIAALgvPYrAANfswBwiER/AANf3wABm0QIAAoPAANgBwBwovYTAANgJwBwo5QA9HMAA2B8WwADYGC6DSrgqgpABAAFqwADYLmADwAD+fsAA7kQAwABdtELAANhCAAHAANhfasAA2F9gA7ddwADptQA+BD0cwADYgBbAANh5LoNKuCqCmAEAAWrAANiRYAPAAP5+wADuRwDAAF2zPYrAANiswBwiER/AANi3wABmpQEAARzAANjPFsAA2Mgug0q4KrAaAAAAAMAAXcIAPRzAANjtFsAA2OYug0q4KoKQAQABasAA2PxgA8AA/n7AAO5HAMAAXbRCwADZFwABwADZNGrAANk0YAO3XcAA6ccAPgU9HMAA2VgWwADZUS6DSrgqgpgBAAFqwADZaWADwAD+fsAA7koAwABds07AANmYwADZngAAhIZdA8AA/TsBYAPAAJboARzAANmgLq+NAAFgA8AAlugAALgwPYrAANm0wBwiER/AANm/wACXFwEAAYPAANnWwBwqQAA9HMAA2e0WwADZ5i6DSrgqgpABAAFqwADZ/GADwAD+fsAA7koAwABdtELAANoaAAHAANo3asAA2jdgA7ddwADp2wA+BD0cwADaUxbAANpMLoNKuCqCmAEAAWrAANpkYAPAAP5+wADuTQDAAF2zPYrAANp6wBwiER/AANqFwACXAQAAAAA9HMAA2qYWwADany6DSrgqgpABAAFqwADatWADwAD+fsAA7k0AwABdtELAANrLAAHAANroasAA2uhgA7ddwADp7wA+BD0cwADbBhbAANr/LoNKuCqCmAEAAWrAANsXYAPAAP5+wADuUADAAF2zPYrAANsvwBwiER/AANs6wACXIwEAARzAANtSFsAA20sug0q4KrAaAAAAAMAAXcIAPRzAANtwFsAA22kug0q4KoKQAQABasAA239gA8AA/n7AAO5QAMAAXbRCwADblwABwADbtGrAANu0YAO3XcAA6gEAPgQ9HMAA29IWwADbyy6DSrgqgpgBAAFqwADb42ADwAD+fsAA7lMAwABdsz2KwADb+8AcIhEfwADcBsAAlwsBAAEcwADcHhbAANwXLoNKuCqwGgAAAADAAF3CAD0cwADcPBbAANw1LoNKuCqCkAEAAWrAANxLYAPAAP5+wADuUwDAAF20QsAA3GMAAcAA3IBqwADcgGADt13AAOoVAD4FPRzAANymFsAA3J8ug0q4KoKYAQABasAA3LdgA8AA/n7AAO5WAMAAXbNOwADc38AA3OQAAIC9YAPAAJWiARzAANzmLp6vAAFgA8AAlaIAALgvPYrAANz2wBwiER/AAN0BwACVtgEAAYPAAN0awBwsugA9HMAA3TAWwADdKS6DSrgqgpABAAFqwADdP2ADwAD+fsAA7lYAwABdtELAAN1fAAHAAN18asAA3XxgA7ddwADqKQA+BD0cwADdmBbAAN2RLoNKuCqCmAEAAWrAAN2pYAPAAP5+wADuWQDAAF2zPYrAAN2/wBwiER/AAN3KwACW+QEAARzAAN3gFsAA3dkug0q4Kq+RAAAAAMAAXb8APRzAAN38FsAA3fUug0q4KoKQAQABasAA3gtgA8AA/n7AAO5ZAMAAXbRCwADeIQABwADePmrAAN4+YAO3XcAA6jsAPgY9HMAA3mAWwADeWS6DSrgqgpgBAAFqwADecWADwAD+fsAA7lwAwABds07AAN6f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AGADvSoABrj3gKahCKEYoSUBArG4AAAAAQOhJaElAAAAAAAAAGADvSoABrj4gKahKqE6oUYBArG5AAAAAQOhRqFGAAAAAAAAAGADvSoABrj5gKahS6FboWgBArG6AAAAAQOhaKFoAAAAAAAAAGADvSoABrj6gKahbaF9oYcBArG7AAAAAQOhh6GHAAAAAAAAAGADvSoABrj7gKahjKGcoakBArG8AAAAAQOhqaGpAAAAAAAAAGADvSoABrj8gKahrqG+ockBArG9AAAAAQOhyaHJAAAAAAAAAGADvSoABrj9gKahzqHeoekBArG+AAAAAQOh6aHpAAAAAAAAAGADvSoABrj+gKah7qH+ohoBArG/AAAAAQOiGqIaAAAAAAAAAGADvSoABrj/gKaiH6Ivok0BArHAAAAAAQOiTaJNAAAAAAAAAGADvSoABrkAgKaiUqJionsBArHBAAAAAQOie6J7AAAAAAAAAGADvSoABrkBgKaigKKQoqcBArHCAAAAAQOip6KnAAAAAAAAAGADvSoABrkCgKairKK8oswBArHDAAAAAQOizKLMAAAAAAAAAGADvSoABrkDgKai0aLhovgBArHEAAAAAQOi+KL4AAAAAAAAAGADvSoABrkEgKai/aMNoyABArHFAAAAAQOjIKMgAAAAAAAAAGADvSoABrkFgKajJaM1o0YBArHGAAAAAQOjRqNGAAAAAAAAAGADvSoABrkGgKajS6Nbo3EBArHHAAAAAQOjcaNxAAAAAAAAAGADvSoABrkHgKajdqOGo54BArHIAAAAAQOjnqOeAAAAAAAAAGADvSoABrkIgKajo6Ozo8UBArHJAAAAAQOjxaPFAAAAAAAAAGADvSoABrkJgKajyqPao+cBArHKAAAAAQOj56PnAAAAAAAAAGADvSoABrkKgKaj7KP8pAkBArHLAAAAAQOkCaQJAAAAAAAAAGADvSoABrmIgKakgaSGpLsAArHMAAAAAQOkpqS7AAAAAQEBpLQAAACCamADvTwAAGADwAD60QAGuQuApqTApNOk7QECsc0AAAABA6TtpO0AAAAAAAAAYAO9UQAGuQyApqTypQilHwECsc4AAAABA6UfpR8AAAAAAAAAYAO9aQAGuYmApqWMpZulugACsc8AAAABA6WtpboAAAABAQGltQAAAIC9YAPAAP5+AABgA71RAAa5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HHPWABxz+gAcdB4AHHRCABx0ZgAcdIoAHHSuABx00gAcdPYAHHUaABx1PgAcdWIAHHWGABx1qgAcdc4AHHXyABx2FgAcdjoAHHZeABx2ggAcdqYAHHbKABx27gAcdxIAHHc2ABx3aAAcd4wAHHewABx34gAceAYAHHgqABx4TgAceHIAHHiWABx4ugAceN4AHHkCABx5JgAceUoAHHluABx5kgAcebYAHHnaABx5/gAceiIAHHpGABx6agAceo4AHHqyABx61gAcevoAHHseABx7QgAce2YAHHuKABx7rgAce9IAHHv2ABx8GgAcfD4AHHxiABx8hgAcfKoAHHzOABx88gAcfRYAHH06ABx9XgAcfYIAHH2mABx9ygAcfe4AHH4SABx+NgAcfloAHH5+ABx+ogAcfsYAHH7qABx/DgAcfzIAHH9WABx/egAcf54AHH/CABx/5gAcgAoAHIAuAByAUgAcgHYAHICaAByAvgAcgOIAHIEGAByBKgAcgU4AHIFyAByBlgAcgcgAHIH6AByCLAAcglAAHIJ0AByCmAAcgrwAHILgAByDBAAcgygAHINMAByDcAAcg5QAHIO4AByD3AAchAAAHIQkAByESAAchGwAHISQAByEtAAchNgAHIT8AByFIAAchUQAHIVoAByFjAAchbAAHIXUAByF+AAchhwAHIZAAByGZAAchogAHIasAByG0AAchvQAHIcYAByHPAAch2IAHIeGAByHqgAch9wAHIgaAAAA5AK5kYCmvGG8cL/LB7JCAAABYAHAAP3kAAFgAbioAAEFuZ8AAAAABAAAAwAAAAAAAAAAAGADuZEBPwEJAQDAAP36AAAAAAoGuZOApryzvMO81AECskMAAAABA7zUvNQAAAAAAAAAYAO9KgAGuZSAprzZvOm8+QECskQAAAABA7z5vPkAAAAAAAAAYAO9KgAGuZWAprz+vQ69GQECnHsAAAABA70ZvRkAAAAAAAAAYAO9KgAGuZaApr0dvS29QQECskUAAAABA71BvUEAAAAAAAAAYAO9TgAGuZeApr1FvVW9bAECskYAAAABA71svWwAAAAAAAAAYAO9TgAGuZuApr1xvXa9qQACskcAAAABA72UvakAAAABAQG9ogAAAIJqYAO9PAAAYAPAAPrRAAa5nICmva69s73qAAKySAAAAAEDvc+96gAAAAEBAb3iAAAAllJgA71pAABgA8AA+tEABrmYgKa9773/vhABArJJAAAAAQO+EL4QAAAAAAAAAGADvSoABrmZgKa+Fb4lvjcBArJKAAAAAQO+N743AAAAAAAAAGADvSoABrmdgKa/mr+fv8kAArJLAAAAAQO/sL/JAAAAAQEBv8AAAACCbmADvVEAAGADwAD60QAAAByL+QAcjB0AHIxBAByMZQAcjIkAHIytAByM3wAcjREAHI01AByNWQAcjYsAAAAKArmggKa/zr/dwABIRweyTAAAAWABwAD95AABYAG4qAABBbm5AAAAAAQAAAMAAAAAAAAAAABgA7mgAT8BCQEAwAD9+gAAAAAVBrmigKbAAEC6wABAv8AAQPIAArJNAAAAAQPAAEDXwABA8gAAAAEBAcAAQOoAAACWUmADvWkAAGADwAD60QAGuaOApsAAQafAAEGswABB3gACsk4AAAABA8AAQcPAAEHeAAAAAQEBwABB1gAAAJZSYAO9aQAAYAPAAPrRAAa5pICmwABB48AAQejAAEIdAAKyTwAAAAEDwABCB8AAQh0AAAABAQHAAEIVAAAAllJgA708AABgA8AA+tEABrmlgKbAAEJmwABCa8AAQpgAArJQAAAAAQPAAEKFwABCmAAAAAEBAcAAQo8AAAClNGADwABLzwAAYAPAAPrRAAa5r4CmwABCncAAQrDAAELBAQKyUQAAAAEDwABCwcAAQsEAAAAAAAAAYAO9UQAGubCApsAAQsbAAELZwABC4wECslIAAAABA8AAQuPAAELjAAAAAAAAAGADvVEABrmmgKbAAELowABC7cAAQxEAArJTAAAAAQPAAEL8wABDEQAAAAEBAcAAQwoAAACCamADvTwAAGADwAD60QAGuaeApsAAQ8HAAEPGwABENgACslQAAAABA8AAQ9zAAEQ2AAAAAwMDwABD5gAAAKU0YAPAAEvPAMAAQ/4AAACFj2ADvlEAwABEIgAAALEqYAO+XAAAYAPAAPrRAAa5sYCmwABEO8AARE7AAERbAQKyVQAAAAEDwABEW8AARFsAAAAAAAAAYAO9UQAGubKApsAARGDAAERzwABEgwECslYAAAABA8AARIPAAESDAAAAAAAAAGADvVEABrmzgKbAAESIwABEm8AARK4BArJXAAAAAQPAAESuwABErgAAAAAAAABgA71RAAa5tICmwABEs8AARMPAAETPAQKyWAAAAAEDwABEz8AARM8AAAAAAAAAYAO9KgAGuaiApsAARTLAAEU3wABFVgACslkAAAABA8AARUHAAEVWAAAAAQEBwABFTwAAAIJqYAO9PAAAYAPAAPrRAAa5qYCmwABFucAARb7AAEXdAAKyWgAAAAEDwABFyMAARd0AAAABAQHAAEXWAAAAgmpgA708AABgA8AA+tEABrmqgKbAAEZDwABGSMAARmoAArJbAAAAAQPAAEZVwABGagAAAAEBAcAARmMAAACCamADvTwAAGADwAD60QAGuauApsAARm/AAEZ0wABGmQACslwAAAABA8AARojAAEaZAAAAAQEBwABGlQAAAJn6YAO9KgAAYAPAAPrRAAa5tYCmwABGwcAARtHAAEblAQKyXQAAAAEDwABG5cAARuUAAAAAAAAAYAO9KgAGubaApsAARurAAEb6wABHEQECsl4AAAABA8AARxHAAEcRAAAAAAAAAGADvSoABrm3gKbAAEdHwABHV8AAR2QBArJfAAAAAQPAAEdkwABHZAAAAAAAAABgA70qAAa5rICmwABHacAAR27AAEeNAAKyYAAAAAEDwABHd8AAR40AAAABAQHAAEeFAAAAllJgA708AABgA8AA+tEABrmtgKbAAEgKwABID8AASEUAArJhAAAAAQPAAEgswABIRQAAAAEBAcAASDwAAACCbmADvVEAAGADwAD60QAAAByOBAAcjkIAHI6AAByOvgAcjv4AHI8sAByPWgAcj5gAHI/0AByQIgAckFAAHJB+AByQrAAckOoAHJEoAByRZgAckaQAHJHSABySAAAcki4AHJJsABySqgAAABUCubqApsAASErAAEhQwAD7kAOyYgAAAWABwAD95AADYAG4qGABuZFgAbmggIAEub2ApsAASMDAAEjECbJjuKcAYAO7XgAEub6ApsAASN7AAEjmCbJkuKcAYAOBFAAEub+ApsAASSjAAEk0GJwMuKcAYAO9KgErBLnAgKbAAEmswABJthicDrinAGADvSoBKwS5wYCmwABKIsAASisYnBC4pwBgA70qASsEucKApsAASpTAAEqdGJwPuKcAYAO9KgErBLnDgKbAAEsGwABLEhicEbinAGADvSoBKwS5xICmwABLisAAS5YYnBK4pwBgA70qASsEucWApsAATA7AAEwcGJwauKcAYAO9KgErBLnGgKbAAEyawABMqBiyZbinAGADvSoBKwS5x4CmwABNJsAATTIYnBi4pwBgA70qASsEuciApsAATarAAE20GJwNuKcAYAO9KgErBLnJgKbAAE4gwABOKhicGbinAGADvSoBKwS5yoCmwABOlsAATqYYnCi4pwBgA70qASsEucuApsAATyrAAE80GJwTuKcAYAO9KgErBLnMgKbAAE+gwABPqRicFLinAGADvSoBKwS5zYCmwABQEsAAUBsYnBW4pwBgA70qASsEuc6ApsAAUITAAFCZGLJmuKcAYAO9KgErBLnPgKbAAFFKwABRWBicFrinAGADvSoBKwS50ICmwABR1sAAUeIYnCe4pwBgA70qASsEudGApsAAUlvAAFJnGJwpuKcAYAO9KgErBLnSgKbAAFLiwABS7hicC7inAGADvRsBKwS504CmwABTe8AAU4gYnCa4pwBgA70bASsEudSApsAAVGXAAFR0GJw5uKcAYAO9GwErBLnVgKbAAFT6wABVCxiyZ7inAGADvRsBKwS51oCmwABVoMAAVbAYsmi4pwBgA70bASsEudeApsAAVjvAAFZPGLJpuKcAYAO9GwErBLnYgKbAAFblwABW9BiyarinAGADvRsBKwS52YCmwABXgsAAV40Ysmu4pwBgA70bASsEudqApsAAWGbAAFh2GLJsuKcAYAO9GwErBLnbgKbAAFkOwABZHRiybbinAGADvSoBKwS53ICmwABZr8AAWccYsm64pwBgA71pASsEud2ApsAAWyfAAFtVGLJvuKcAYAPAAPrRASoEud6ApsAAW2vAAFuRGLJwuKcAYAO9aQErBLnfgKbAAF/NwABf3xiycbinAGADvVEBKwS54ICmwAB4BcAAeBUYsnK4pwBgA70qASsEueGApsAAeY3AAHmjGLJzuKcAYAO9aQErBLnigKbAAHm5wAB51BiydLinAGADvWkBKwS544CmwAB558AAef4YsnW4pwBgA71RASsEueSApsAAehHAAHotGLJ2uKcAYAO9UQErBLnlgKbAAH47wAB+Sxiyd7inAGADvSoBKwS55oCmwAB+9cAAfwsYsni4pwBgA71pASsEueeApsAAfyHAAH88GLJ5uKcAYAO9aQErBLnogKbAAH9PwAB/ZhiyerinAGADvVEBKwS56YCmwAB/ecAAf5UYsnu4pwBgA71RASsEueqApsAAg6fAAIO6GLJ8uKcAYAO9UQErBLnrgKbAAI12wACNjhiyfbinAGADvVEBKwS57ICmwACONMAAjk8Ysn64pwBgA71RASsEue2ApsAAjwjAAI8pGLJ/uKcAYAO9UQErBLnugKbAAJDiwACQ9RiygLinAGADvSoBKwS574CmwACRf8AAkY0YsoG4pwBgA70qASsEufCApsAAkgrAAJIXGLKCuKcAYAO9KgErBLnxgKbAAJKRwACSnxiyg7inAGADvSoBKwS58oCmwACTHMAAkycYsoS4pwBgA70qASsEufOApsAAk5XAAJOjGLKFuKcAYAO9KgErBLn0gKbAAJQgwACULBiyhrinAGADvSoBKwS59YCmwACUo8AAlK8Ysoe4pwBgA70qASsEufaApsAAlSbAAJVDGLKIuKcAYAO9KgErBLn3gKbAAJX1wACWFBiyibinAGADvSoBKwS5+ICmwACWzMAAluYYsoq4pwBgA70qASsEufmApsAAl4XAAJedGLKLuKcAYAO9KgErBLn6gKbAAJg2wACYRxiyjLinAGADvSoBKwS5+4CmwACYzcAAmOUYso24pwBgA70qASsEufyApsAAmYDAAJmUGLKOuKcAYAO9KgErBLn9gKbAAJojwACaNRiyj7inAGADvSoBKwS5/oCmwACavsAAmtUYspC4pwBgA70qASsEuf+ApsAAm23AAJuGGLKRuKcAYAO9KgErBLoAgKbAAJwkwACcNxiykrinAGADvSoBKwS6AYCmwACcw8AAnNEYspO4pwBgA70qASsEugKApsAAnU7AAJ1cGLKUuKcAYAO9KgErBLoDgKbAAJ62wACe0RiylbinAGADvVEBKwS6BICmwACgIsAAoDoYspa4pwBgA71pASsEugWApsAAoNnAAKDrGLKXuKcAYAO9UQErBLoGgKbAAKGAwAChixiymLinAGADvVEBKwS6B4CmwAClzsAApdwYspm4pwBgA71RASsEugiApsAApmXAAKZ2GLKauKcAYAO9UQErBLoJgKbAAKcIwACnHBiym7inAGADvVEBKwS6CoCmwACnqsAAp7cYspy4pwBgA70qASsEuguApsAAqEvAAKhdGLKduKcAYAO9KgErBLoMgKbAAKmQwACpoRiynrinAGADvSoBKwS6DYCmwACr9MAArAEYsp+4pwBgA70qASsEug6ApsAArG/AAKyBGLKguKcAYAO9KgErBLoPgKbAAK0EwACtFRiyobinAGADvSoBKwS6EICmwACt28AArfAYsqK4pwBgA70qASsEuhGApsAArvXAAK8KGLKjuKcAYAO9KgErBLoSgKbAAK+HwACvmRiypLinAGADvSoBKwS6E4CmwACwHMAAsCgYnDq4pwBgA70qASsEuhSApsAAsKDAALC1GLKluKcAYAO9TgErBLoVgKbAALFDwACxWxiyprinAGADvU4BKwS6FoCmwACx8sAAsgoYsqe4pwBgA70qASsEuheApsAAsqDAALK9GLKouKcAYAO9PAErBLoYgKbAALN7wACzlxiyqbinAGADvSoBKwS6GYCmwAC3uMAAt84Ysqq4pwBgA70qASsEuhqApsAAuFnAALhxGLKruKcAYAO9aQErBLobgKbAALkWwAC5IRiyrLinAGADvVEBKwS6HICmwAC5ncAAuakYsq24pwBgA71RASsEuh2ApsAAuijAALo1GLKuuKcAYAO9UQErBLoegKbAALq3wAC6zxiyr7inAGADvVEBKwS6H4CmwAC7bMAAu4gYsrC4pwBgA71RASsEuiCApsAAvDvAALxSGLKxuKcAYAO9UQErBLohgKbAAMIzwADCWhiysrinAGADvVEBKwS6IoCmwADZHcAA2SYYsrO4pwBgA71RASsEuiOApsAA2ZPAANmgGLK0uKcAYAO9UQErBLokgKbAANofwADaMRiytbinAGADvVEBKwS6JYCmwADawMAA2tMYsra4pwBgA71RASsEuiaApsAA21/AANtwGLK3uKcAYAO9UQErBLongKbAANv2wADcBRiyuLinAGADvVEBKwS6KICmwADddMAA3X8Ysrm4pwBgA71OASsEuimApsAA3efAAN3yGLK6uKcAYAO9TgErBLoqgKbAAN5awADeaBiyu7inAGADvU4BKwS6K4CmwADe38AA3uwYsry4pwBgA71OASsEuiyApsAA313AAN9rGLK9uKcAYAO9UQErBLotgKbAAN/0wADgAhiyvrinAGADvVEBKwS6LoCmwADgi8AA4J0Ysr+4pwBgA71RASsEui+ApsAA4TXAAOFRGLLAuKcAYAO9UQErBLowgKbAAOIIwADiJRiywbinAGADvVEBKwS6MYCmwADi38AA4v4YssK4pwBgA71RASsEujKApsAA6l3AAOp3GLLDuKcAYAO9KgErBLozgKbAAOsPwADrIRiyxLinAGADvSoBKwS6NICmwADtFcAA7S8YssW4pwBgA71OASsEujWApsAA7fXAAO4QGLLGuKcAYAO9aQErBLo2gKbAAO8RwADvJhiyx7inAGADvSoBKwS6N4CmwADv+8AA8BMYssi4pwBgA70qASsEujiApsAA8SLAAPEwGLLJuKcAYAO9KgErBLo5gKbAAPHrwADx+RiyyrinAGADvSoBKwS6OoCmwADyrcAA8ssYssu4pwBgA8AA+tEBKgS6O4CmwADy28AA8u0Yssy4pwBgA70qASsEujyApsAA8v3AAPMQGLLNuKcAYAO9KgErAQW7XYCmwABI68AASOvAAEkXAAAAA8AASP3AAEkXAAAAAgICwABJAwAABLJjYAO7XgDAAEkOAAAEsmRgA4EUAABgA7m6AT8DCAG5vYAAwByf2ggBub6BAMAcn+gJAcAASOvAAP36AAAAAIEbBro+gKbAAEk4wABJVMAASZsBAJr/AWrAAEk5YAPAAP3kAgAAAQPAAElgwABJmwAAAAAAAABgA70qAUrAAElpATUAAAABAGADvSoBFsAASWkunAy4p7m/IxzAAEl2gADAHKBjSAEAASsAwAD98RfAAElpLpwMuKccwABJei6yzrinAgACFsAASYUunGO6USeb+QC7JLm/gADAHKBjAWADvSoGuj+ApsAASbrAAEnWwABKEQEAmwEBasAASbtgA8AA/eQCAAABA8AASeDAAEoRAAAAAAAAAGADvSoBSsAASeMBNQAAAAEAYAO9KgEWwABJ4y6cDrinucAjHMAASe6AAMAcoQRIAQABKwDAAP3xF8AASeMunA64pxzAAEnyLrLOuKcCAAIWwABJ/S6cY7pRJ5v7ALskucCAAMAcoQQBYAO9Kga6QICmwABKL8AASkvAAEqDAQCbBAFqwABKMGADwAD95AIAAAEDwABKVMAASoMAAAAAAAAAYAO9KgFKwABKVwE1AAAAAQBgA70qARbAAEpXLpwQuKe5wSMcwABKYYAAwByhpUgBAAErAMAA/fEXwABKVy6cELinHMAASmUuss64pwIAAhbAAEpwLpxjulEnm/0AuyS5wYAAwByhpQFgA70qBrpBgKbAAEqhwABKvcAASvUBAJsCAWrAAEqiYAPAAP3kAgAAAQPAAErGwABK9QAAAAAAAABgA70qAUrAAErJATUAAAABAGADvSoBFsAASskunA+4p7nCIxzAAErTgADAHKJGSAEAASsAwAD98RfAAErJLpwPuKccwABK1y6yzrinAgACFsAASuIunGO6USeb/AC7JLnCgADAHKJGAWADvSoGukKApsAASxbAAEsywABLeQEAmwUBasAASxdgA8AA/eQCAAABA8AASz7AAEt5AAAAAAAAAGADvSoBSsAAS0cBNQAAAAEAYAO9KgEWwABLRy6cEbinucMjHMAAS1SAAMAcoudIAQABKwDAAP3xF8AAS0cunBG4pxzAAEtYLrLOuKcCAAIWwABLYy6cY7pRJ5v+ALskucOAAMAcoucBYAO9Kga6Q4CmwABLmsAAS7bAAEv9AQCbBgFqwABLm2ADwAD95AIAAAEDwABLwsAAS/0AAAAAAAAAYAO9KgFKwABLywE1AAAAAQBgA70qARbAAEvLLpwSuKe5xCMcwABL2IAAwByjiEgBAAErAMAA/fEXwABLyy6cErinHMAAS9wuss64pwIAAhbAAEvnLpxjulEnm/8AuyS5xIAAwByjiAFgA70qBrpEgKbAAEwgwABMPMAATIkBAJsKAWrAAEwhYAPAAP3kAgAAAQPAAExKwABMiQAAAAAAAABgA70qAUrAAExTATUAAAABAGADvSoBFsAATFMunBq4p7nFIxzAAExigADAHKQpSAEAASsAwAD98RfAAExTLpwauKccwABMZi6yzrinAgACFsAATHEunGO6USecBQC7JLnFgADAHKQpAWADvSoGukWApsAATKzAAEzIwABNFQEAsYABasAATK1gA8AA/eQCAAABA8AATNbAAE0VAAAAAAAAAGADvSoBSsAATN8BNQAAAAEAYAO9KgEWwABM3y6yZbinucYjHMAATO6AAMAcpMpIAQABKwDAAP3xF8AATN8usmW4pxzAAEzyLrLOuKcCAAIWwABM/S6cY7pRJ7LPALskucaAAMAcpMoBYAO9Kga6RoCmwABNNsAATVLAAE2ZAQCbBwFqwABNN2ADwAD95AIAAAEDwABNXsAATZkAAAAAAAAAYAO9KgFKwABNZwE1AAAAAQBgA70qARbAAE1nLpwYuKe5xyMcwABNdIAAwByla0gBAAErAMAA/fEXwABNZy6cGLinHMAATXguss64pwIAAhbAAE2DLpxjulEnnAQAuyS5x4AAwBylawFgA70qBrpHgKbAAE24wABN1MAATg8BAJsAAWrAAE25YAPAAP3kAgAAAQPAAE3ewABODwAAAAAAAABgA70qAUrAAE3hATUAAAABAGADvSoBFsAATeEunA24p7nIIxzAAE3sgADAHKYMSAEAASsAwAD98RfAAE3hLpwNuKccwABN8C6yzrinAgACFsAATfsunGO6USeb+gC7JLnIgADAHKYMAWADvSoGukiApsAATi7AAE5KwABOhQEAmwgBasAATi9gA8AA/eQCAAABA8AATlTAAE6FAAAAAAAAAGADvSoBSsAATlcBNQAAAAEAYAO9KgEWwABOVy6cGbinuckjHMAATmKAAMAcpq1IAQABKwDAAP3xF8AATlcunBm4pxzAAE5mLrLOuKcCAAIWwABOcS6cY7pRJ4TTALskucmAAMAcpq0BYAO9Kga6SYCmwABOqsAATsbAAE8ZAQCcgAFqwABOq2ADwAD95AIAAAEDwABO1sAATxkAAAAAAAAAYAO9KgFKwABO3wE1AAAAAQBgA70qARbAAE7fLpwouKe5yiMcwABO8IAAwBynTkgBAAErAMAA/fEXwABO3y6cKLinHMAATvQuss64pwIAAhbAAE7/LpxjulEnnIEAuyS5yoAAwBynTgFgA70qBrpKgKbAAE84wABPVMAAT48BAJsNAWrAAE85YAPAAP3kAgAAAQPAAE9ewABPjwAAAAAAAABgA70qAUrAAE9hATUAAAABAGADvSoBFsAAT2EunBO4p7nLIxzAAE9sgADAHKfvSAEAASsAwAD98RfAAE9hLpwTuKccwABPcC6yzrinAgACFsAAT3sunGO6USecAAC7JLnLgADAHKfvAWADvSoGukuApsAAT63AAE/JwABQAQEAmw4BasAAT65gA8AA/eQCAAABA8AAT9LAAFABAAAAAAAAAGADvSoBSsAAT9UBNQAAAAEAYAO9KgEWwABP1S6cFLinucwjHMAAT9+AAMAcqJBIAQABKwDAAP3xF8AAT9UunBS4pxzAAE/jLrLOuKcCAAIWwABP7i6cY7pRJ5xyALskucyAAMAcqJABYAO9Kga6TICmwABQH8AAUDvAAFBzAQCbDwFqwABQIGADwAD95AIAAAEDwABQRMAAUHMAAAAAAAAAYAO9KgFKwABQRwE1AAAAAQBgA70qARbAAFBHLpwVuKe5zSMcwABQUYAAwBypMUgBAAErAMAA/fEXwABQRy6cFbinHMAAUFUuss64pwIAAhbAAFBgLpxjulEnnAEAuyS5zYAAwBypMQFgA70qBrpNgKbAAFCdwABQucAAUTkBALGBAWrAAFCeYAPAAP3kAgAAAQPAAFDOwABROQAAAAAAAABgA70qAUrAAFDRATUAAAABAGADvSoBFsAAUNEusma4p7nOIxzAAFDngADAHKnSSAEAASsAwAD98RfAAFDRLrJmuKccwABQ8S6yzrinAgACHMAAUQEWwABQ/C6yY7inub2y0AEAARrAAFEUuIYAu2YnqoAAuyS5zoAAwByp0gFgA70qBrpOgKbAAFFcwABReMAAUcUBAJsRAWrAAFFdYAPAAP3kAgAAAQPAAFGGwABRxQAAAAAAAABgA70qAUrAAFGPATUAAAABAGADvSoBFsAAUY8unBa4p7nPIxzAAFGegADAHKqJSAEAASsAwAD98RfAAFGPLpwWuKccwABRoi6yzrinAgACFsAAUa0unGO6USecAgC7JLnPgADAHKqJAWADvSoGuk+ApsAAUebAAFICwABSSgEAmxQBasAAUedgA8AA/eQCAAABA8AAUg7AAFJKAAAAAAAAAGADvSoBSsAAUhcBNQAAAAEAYAO9KgEWwABSFy6cJ7inudAjHMAAUiSAAMAcqypIAQABKwDAAP3xF8AAUhcunCe4pxzAAFIoLrLOuKcCAAIWwABSMy6cQbpSJwMAuyS50IAAwByrKgFgA70qBrpQgKbAAFJrwABSh8AAUs8BAJsTAWrAAFJsYAPAAP3kAgAAAQPAAFKTwABSzwAAAAAAAABgA70qAUrAAFKcATUAAAABAGADvSoBFsAAUpwunCm4p7nRIxzAAFKpgADAHKvKSAEAASsAwAD98RfAAFKcLpwpuKccwABSrS6yzrinAgACFsAAUrgunEG6UiecCgC7JLnRgADAHKvKAWADvSoGulGApsAAUvLAAFMQwABTaAEAnGMBasAAUvNgA8AA/eQCAAABA8AAUxzAAFNoAAAAAAAAAGADvRsBSsAAUyUBNQAAAAEAYAO9GwEWwABTJS6cC7inudIjHMAAUzKAAMAcrGtIAQABKwDAAP3xF8AAUyUunAu4pxzAAFM7FsAAUzYusmO4p7m9stACAAEawABTTriHAZpNKbtmudKAAMAcrGsBYAO9Gwa6UoCmwABTjMAAU6rAAFP1AQCcQQFqwABTjWADwAD95AIAAAEDwABTt8AAU/UAAAAAAAAAYAO9GwFKwABTwAE1AAAAAQBgA70bARbAAFPALpwmuKe50yMcwABTzoAAwBytEkgBAAErAMAA/fEXwABTwC6cJrinHMAAU9cWwABT0i6yY7inub2y0AEAARrAAFPquIUAu2a504AAwBytEgFgA70bBrpTgKbAAFR4wABUlsAAVOcBAJx0AWrAAFR5YAPAAP3kAgAAAQPAAFSlwABU5wAAAAAAAABgA70bAUrAAFSuATUAAAABAGADvRsBFsAAVK4unDm4p7nUIxzAAFS+gADAHK22SAEAASsAwAD98RfAAFSuLpw5uKccwABUxxbAAFTCLrJjuKe5vbLQAQABGsAAVNq4jQC7ZrnUgADAHK22AWADvRsGulSApsAAVQ/AAFUtwABVjQEAsYIBasAAVRBgA8AA/eQCAAABA8AAVT7AAFWNAAAAAAAAAGADvRsBSsAAVUcBNQAAAAEAYAO9GwEWwABVRy6yZ7inudUjHMAAVVmAAMAcrlpIAQABKwDAAP3xF8AAVUcusme4pxzAAFViFsAAVV0usmO4p7m9stABAAEawABVdbiPALtmudWAAMAcrloBYAO9Gwa6VYCmwABVtMAAVdLAAFYoAQCxgwFqwABVtWADwAD95AIAAAEDwABV4sAAVigAAAAAAAAAYAO9GwFKwABV6wE1AAAAAQBgA70bARbAAFXrLrJouKe51iMcwABV/IAAwByu/kgBAAErAMAA/fEXwABV6y6yaLinHMAAVgUWwABWAC6yY7inub2y0AEAARrAAFYYuJUAu2a51oAAwByu/gFgA70bBrpWgKbAAFZTwABWccAAVtIBALGEAWrAAFZUYAPAAP3kAgAAAQPAAFaFwABW0gAAAAAAAABgA70bAUrAAFaOATUAAAABAGADvRsBFsAAVo4usmm4p7nXIxzAAFajgADAHK+iSAEAASsAwAD98RfAAFaOLrJpuKccwABWrBbAAFanLrJjuKe5vbLQAQABGsAAVr+4lwC7ZrnXgADAHK+iAWADvRsGuleApsAAVvjAAFcWwABXbwEAsYUBasAAVvlgA8AA/eQCAAABA8AAVyXAAFdvAAAAAAAAAGADvRsBSsAAVy4BNQAAAAEAYAO9GwEWwABXLi6yarinudgjHMAAVz6AAMAcsEZIAQABKwDAAP3xF8AAVy4usmq4pxzAAFdHFsAAV0IusmO4p7m9stABAAEawABXWriYALtmudiAAMAcsEYBYAO9Gwa6WICmwABXkcAAV6/AAFgFAQCxhgFqwABXkmADwAD95AIAAAEDwABXusAAWAUAAAAAAAAAYAO9GwFKwABXwwE1AAAAAQBgA70bARbAAFfDLrJruKe52SMcwABXz4AAwByw6kgBAAErAMAA/fEXwABXwy6ya7inHMAAV9gWwABX0y6yY7inub2y0AIAARrAAFfruJYBmk0pu2a52YAAwByw6gFgA70bBrpZgKbAAFh6wABYmMAAWP0BALGHAWrAAFh7YAPAAP3kAgAAAQPAAFiowABY/QAAAAAAAABgA70bAUrAAFirATUAAAABAGADvRsBFsAAWKsusmy4p7naIxzAAFi8gADAHLGRSAEAASsAwAD98RfAAFirLrJsuKccwABYyxbAAFjGLrJjuKe5vbLQAgABGsAAWN64jgGaTSm7ZrnagADAHLGRAWADvRsGulqApsAAWSHAAFk9wABZmAEAsYgBasAAWSJgA8AA/eQCAAABA8AAWUzAAFmYAAAAAAAAAGADvSoBSsAAWVUBNQAAAAEAYAO9KgEWwABZVS6ybbinudsjHMAAWWWAAMAcsjhIAQABKwDAAP3xF8AAWVUusm24pxzAAFlpLrLOuKcCAAIWwABZdC6xgrpUJ7LRALskuduAAMAcsjgBYAO9Kga6W4CmwABZy8AAWe3AAFsdAQCxiQFqwABZzGADwAD95AIAAAEDwABaBcAAWx0AAAAAAAAAYAO9aQE+AUrAAFq+ATUAAAABAGADvWkBFsAAWsUusm64p7ncIxzAAFregADAHLLbSAEAASsAwAD98RfAAFrFLrJuuKccwABa6i6y0rinAgACFsAAWvsusjq7FicAALsnudyAAMAcstsBYAO9aQa7I4CmwABblsAAW5vAAF66AACy07inAAAAAQPAAFu/wABeugAAAAAAAABcAT4GScAAW8gWwABbzC6yb7inud1KwABb9AA/PRfAAFwALrJvuKcpud1JwABcMxzAAFxQFsAAXDcusm64p7ncSAEAASsAwAD98T4CScAAXGEcwABcgBbAAFxlLrLDuKe6MkgBAAErAMAA/fE+AT0XwABcky6yw7inHMAAXLwuss64pwMAAhbAAFzHLrGHulknnAQBmk0quyS6Mj9JwABdAiEcwABdIRbAAF0GLrLDuKe6MkgBAAErAMAA/fE+AT0XwABdNC6ybrinHMAAXVsustK4pwMAAhbAAF1sLrLDuKe6MicAAZpNKrsnudw/P0nAAF2wHMAAXcEWwABdtC6cGLinucdIAQABKwDAAP3xPgE9F8AAXdIunBi4pxzAAF3hLrLOuKcDAAIWwABd7C6cY7pRJ5wEAZpNKrskucc/ScAAXh8cwABeMBbAAF4jLpwYuKe5x0gBAAErAMAA/fE+AUrAAF5BAD89F8AAXlMusnC4pxzAAF6ELrLSuKcDAAIWwABelS6bB7pGJwABmk0quye53ga7OICmwABev8AAXtDAAF+5AACxigFqwABewGADwAD95AIAAAEDwABe48AAX7kAAAABAQHAAF72AAAAllJgA71pAABgA8AA+tEBPgNAIRzAAF8UgMAAXwzAHLUtSAEAASsAwAD98cAAXwzAAF8bAD0cwABfIi6y07inAAAAALsjSsAAX04BIhzAAF9dgMAAX1XAHLUtSAEAARbAAF9gLrJwuKe53gDAAP3xARzAAF+agMAAX5LAHLUtSAEAARbAAF+dLrJuuKe53ADAAP3xBrpcgKbAAF/jwABgAsAAYGABALGLAWrAAF/kYAPAAP3kAgAAAQPAAGAUwABgYAAAAAAAAABgA71RAUrAAGAdASbAAGAdATUAAAABAGADvVEBFsAAYB0usnG4p7nfIxzAAGAwgADAHLYOSAEAASsAwAD98RfAAGAdLrJxuKcmwABgHQEcwABgNC6y1LinAgACFsAAYEcunGO6USecZwC7JWADvVG534AAwBy2DgFgA708YAO9UQa7OYCmwABgZcAAYHbAAGDtAACxjAFqwABgZmADwAD95AIAAAEDwABgi8AAYO0AAAABAQHAAGCZAAAAllJgA708AABgA8AA+tEBSsAAYKsBIhzAAGC4FsAAYLOAwABgq8ActrCAvb0YSAEAASevnQDAAP6NABzAAGDdFsAAYM6AwABgxsActrCFCr1KSAEAARbAAGDgLpsKukQAwAD98Qa7OoCmwABhocAAYbLAAGJ2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saYBasAAhx1gA8AA/eQCAAABA8AAh03AAId+AAAAAAAAAGADvVEBSsAAh1YBHMAAh1Yusuu4pwEAASey7gC7LQa6eoCmwACHgsAAh6HAAIfmAQCxpwFqwACHg2ADwAD95AIAAAEDwACHtMAAh+YAAAAAAAAAYAO9UQFKwACHvQEcwACHvS6y67inAQABJ7LvALstBrp7gKbAAIfrwACICsAAiE8BALGoAWrAAIfsYAPAAP3kAgAAAQPAAIgTwACITwAAAAAAAABgA71RAUrAAIgcARzAAIgcLrLruKcBAAEnsvAAuy0GunyApsAAiFTAAIhzwACI2gEAsakBasAAiFVgA8AA/eQCAAABA8AAiH3AAIjaAAAAAAAAAGADvVEBSsAAiIABJsAAiIABHMAAiIUWwACIgC6yY7inub2y3QIAAhzAAIijLrLquKcBAAEnsvEAuywnsakAu2tgA71RBrp9gKbAAIjfwACI/sAAiWkBALGqAWrAAIjgYAPAAP3kAgAAAQPAAIkKwACJaQAAAAAAAABgA71RAUrAAIkNASbAAIkNARzAAIkSFsAAiQ0usmO4p7m9st0CAAIcwACJMC6y6rinAQABJ7LxALssJ7GqALtrYAO9UQa6foCmwACJbsAAiY3AAIoEAQCxqwFqwACJb2ADwAD95AIAAAEDwACJo8AAigQAAAAAAAAAYAO9UQFKwACJpgEmwACJpgEcwACJqxbAAImmLrJjuKe5vbLdAgACHMAAickusuq4pwEAASey8QC7LCey8gC7a2ADvVEGun+ApsAAignAAIoowACKbQEAsawBasAAigpgA8AA/eQCAAABA8AAijjAAIptAAAAAAAAAGADvVEBSsAAikEBHMAAikEusuu4pwEAASey8wC7LQa6gICmwACKcsAAipHAAIrcAQCxrQFqwACKc2ADwAD95AIAAAEDwACKpMAAitwAAAAAAAAAYAO9UQFKwACKrQEcwACKrS6y67inAQABJ7L0ALstBrqBgKbAAIrhwACLAMAAi3EBALGuAWrAAIriYAPAAP3kAgAAAQPAAIsPwACLcQAAAAAAAABgA71RAUrAAIsSASbAAIsSARzAAIsXFsAAixIusmO4p7m9st0CAAIcwACLNS6y6rinAQABJ7LxALssJ7GuALtrYAO9UQa6goCmwACLdsAAi5LAAIvWAQCx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HO8ZhEi9LEgBAAEWwACiWS6xhLpWAMAA/fEGu0uApsAAonXAAKKGwACjKAAAslMBasAAonZgA8AA/eQCAAABA8AAopXAAKMoAAAAAQEBwACiowAAAIJqYAO9PAAAYAPAAPrRAT4BSsAAorEBIiIcwACixBbAAKK/gMAAorjAHO+6gL29GEgBAAEngKYAwAD+jQAWwACi4YDAAKLawBzvuoUNvUEAHMAAov0usxe4pwEAARbAAKMVgMAAow7AHO+6hQq9SgC7MAa7TICmwACjLcAAoz7AAKW6AACyVAFqwACjLmADwAD95AIAAAEDwACjVMAApboAAAADAwPAAKNeAAAApTRgA8AAS88AwACjdgAAAIWPYAO+UQDAAKOaAAAAsSpgA75cAABgA8AA+tEBPgJJwACjtRzAAKPIFsAAo7kuspm4p7oHSAEAASsAwAD98T4ETsAAo+XAAKPpAACZ+mADvSoBHMAAo/Uuss64pwMAAhbAAKQALrGEulYnsv8Bmk0quyRJwACkORzAAKRBg8AApD3AHPDASAEAASsAwAD98UrAAKRKASo/PRfAAKReLrKZuKcmwACkXgEcwACkby6y3LinAwACg8AApIDAHPDAJ4CmAZpNKrsmYAO9UboHScAApKYcwACkuRbAAKSqLrKZuKe6B0gBAAErAMAA/fFKwACkwgEqPz9KwACk2gEiHMAApOqAwACk4cAc8GezGAEAARbAAKTyLrKZuKe6BwDAAEvvACIcwAClF4HAAKUOwBzwd0gBAAErAMAA/fEBFsAApaQcwAClU4LAAKUuwBzwhbMZAwADgcAApWXAHPB3FsAApW8uslW6oxbAAKWHgMAApX7AHPBnp3HAAEvTAL7Dsxq+QAa6o4CmwACl4MAApf/AAKZRAQCyVQFqwACl4WADwAD95AIAAAEDwACmDcAAplEAAAAAAAAAYAO9UQFKwACmFgEmwACmFgE1AAAAAQBgA71RARbAAKYWLrKZuKe6ByMcwACmJYAAwBzySEgBAAErAMAA/fEXwACmFi6ymbinJsAAphYBHMAApikusty4pwIAAhbAAKY6LrG4uosngKYAuyZgA71RugeAAMAc8kgBYAO9PGADvVEGuqSApsAApnrAAKaZwACm9AEAslYBasAApntgA8AA/eQCAAABA8AApqrAAKb0AAAAAAAAAGADvVEBSsAAprMBJsAAprMBNQAAAAEAYAO9UQEWwACmsy6ymrinuggjHMAApsWAAMAc8v1IAQABKwDAAP3xF8AAprMuspq4pybAAKazARzAAKbJLrLcuKcCAAIWwACm2i6xuLqLJyMAuyZgA71RugiAAMAc8v0BYAO9PGADvVEGuqWApsAApyDAAKc/wACnmQEAslcBasAApyFgA8AA/eQCAAABA8AAp1PAAKeZAAAAAAAAAGADvVEBSsAAp1wBJsAAp1wBNQAAAAEAYAO9UQEWwACnXC6ym7inugkjHMAAp3GAAMAc87FIAQABKwDAAP3xF8AAp1wuspu4pybAAKdcARzAAKd1LrLcuKcCAAIWwACnhi6xuLqLJ2QAuyZgA71RugmAAMAc87EBYAO9PGADvVEGuqaApsAAp7vAAKfXwACoJQEAslgBasAAp7xgA8AA/eQCAAABA8AAp+TAAKglAAAAAAAAAGADvSoBSsAAp+0BNQAAAAEAYAO9KgEWwACn7S6ynLinugojHMAAp/uAAMAc9F9IAQABKwDAAP3xF8AAp+0uspy4pxzAAKf/LrLOuKcCAAIWwACoCi6xhbpXJ7MbALskugqAAMAc9F8BYAO9Kga6p4CmwACoYcAAqH3AAKl/AQCyQwFqwACoYmADwAD95AIAAAEDwACoj8AAqX8AAAAAAAAAYAO9KgE+AknAAKiVHMAAqKwWwAComS6ynbinugtIAQABKwDAAP3xPgNOwACoy8AAqNMAAIRIYAO9GwEcwACo2hbAAKjVLrJjuKe5vbLQAQABGsAAqO24mwC7ZknAAKkAHMAAqQyAwACpBMAc9R5IAQABKwDAAP3xSsAAqRUBKz89F8AAqSgusp24pxzAAKk9LrLOuKcCAAKAwACpSMAc9R4nsT0AuyS6Cz9KwACpYgEWwACpaS6ynbinugsGuqiApsAAqaXAAKnBwACqxwEAskQBasAAqaZgA8AA/eQCAAABA8AAqdLAAKrHAAAAAAAAAGADvSoBPgJJwACp2BzAAKnuFsAAqdwusp64p7oMSAEAASsAwAD98T4DTsAAqg3AAKoVAACESGADvRsBHMAAqhwWwACqFy6yY7inub2y0AEAARrAAKovuJsAu2ZJwACqQhzAAKpOgMAAqkbAHPYPSAEAASsAwAD98UrAAKpXASs/PRfAAKpqLrKeuKccwACqfi6yzrinAgACgMAAqonAHPYPJ7McALskugw/SsAAqqsBFsAAqrIusp64p7oMBrtNgKbAAKrMwACq58AAqyMAALHPAWrAAKrNYAPAAP3kAgAAAQPAAKr5wACrIwAAAAEBAcAAqwEAAACAvWADwAD+fgAAYAO9UQFKwACrCgEcwACrCi6zHbinAQABgMAAqx7AHPbVALsxBrsxgKbAAKsowACrN8AAq4oAALMduKcAAAABA8AAq0rAAKuKAAAAAQEBwACrUgAAAIC9YAPAAP5+AABgA71RAUrAAKthASbAAKthARzAAKthLrLUuKcCAAIWwACrdC6xg7pVgMAAq4XAHPc0ALslYAO9UQa7MoCmwACrj8AAq5vAAKvjAACzHrinAAAAAQPAAKurwACr4wAAAAEBAcAAq7MAAACAvWADwAD+fgAAYAO9KgFKwACrwgEcwACrwi6yzrinAgACFsAAq80usYO6VYDAAKvewBz3pwC7JAa6qYCmwACsBcAArCHAAKxeAQCx0AFqwACsBmADwAD95AIAAAEDwACsLsAArF4AAAAAAAAAYAO9KgFKwACsMQE1AAAAAQBgA70qARbAAKwxLrKfuKe6DSMcwACsP4AAwBz4J0gBAAErAMAA/fEXwACsMS6yn7inHMAArEMusx64pwEAASezHwC7MroNgADAHPgnAWADvSoGuqqApsAArIXAAKyhwACs8wEAsdEBasAArIZgA8AA/eQCAAABA8AArLPAAKzzAAAAAAAAAGADvSoBSsAArLwBNQAAAAEAYAO9KgEWwACsvC6yoLinug4jHMAArM+AAMAc+L5IAQABKwDAAP3xF8AArLwusqC4pxzAAKzTLrMeuKcBAAEnsyAAuzK6DoAAwBz4vgFgA70qBrqrgKbAAK0ZwACtNcAArcoBALHSAWrAAK0aYAPAAP3kAgAAAQPAAK1GwACtygAAAAAAAABgA70qAUrAAK1PATUAAAABAGADvSoBFsAArU8usqG4p7oPIxzAAK1hgADAHPlVSAEAASsAwAD98RfAAK1PLrKhuKcjFsAArW4WwACtZS6yZLinub6CuIFWHMAArYsusyG4pwEAASezIgC7NBzAAK2uLrMeuKcBAAEnsyMAuzIBYAO9KroPgADAHPlVAWADvSoGuqyApsAArfTAAK4QwACuZwEAsdMBasAArfVgA8AA/eQCAAABA8AAriXAAK5nAAAAAAAAAGADvSoBSsAAri4BNQAAAAEAYAO9KgEWwACuLi6yorinuhAjHMAArkSAAMAc+hpIAQABKwDAAP3xF8AAri4usqK4pxzAAK5ILrMeuKcBAAEnsyQAuzK6EIAAwBz6GgFgA70qBrqtgKbAAK8OwACvKsAAr3YBALHUAWrAAK8PYAPAAP3kAgAAAQPAAK8/wACvdgAAAAAAAABgA70qAUrAAK9IATUAAAABAGADvSoBFsAAr0gusqO4p7oRIxzAAK9egADAHPqxSAEAASsAwAD98RfAAK9ILrKjuKcWwACvYi6xgbpNuhGAAMAc+rEBYAO9Kga6roCmwACvncAAr7nAALALAQCx1QFqwACvnmADwAD95AIAAAEDwACvy8AAsAsAAAAAAAAAYAO9KgFKwACv1AE1AAAAAQBgA70qARbAAK/ULrKkuKe6EiMcwACv54AAwBz7P0gBAAErAMAA/fEXwACv1C6ypLinHMAAr+susx64pwEAASej0gC7MroSgADAHPs/AWADvSoGuq+ApsAAsCzAALBIwACwjwEAnHsBasAAsC1gA8AA/eQCAAABA8AAsFTAALCPAAAAAAAAAGADvSoBSsAAsF0BNQAAAAEAYAO9KgEWwACwXS6cOrinuhMjHMAAsGqAAMAc+9ZIAQABKwDAAP3xF8AAsF0unDq4pxzAALBuLrLOuKcCAAIWwACweS6cY7pRJ5x8ALskuhOAAMAc+9YBYAO9Kga6sICmwACwucAAsNXAALEyAQCyRQFqwACwumADwAD95AIAAAEDwACw6sAAsTIAAAAAAAAAYAO9TgFKwACw8wEmwACw8wE1AAAAAQBgA71OARbAALDzLrKluKe6FCMcwACxCYAAwBz8fUgBAAErAMAA/fEXwACw8y6ypbinJsAAsPMBHMAAsQ0usty4pwIAAhbAALEeLpx7uq8ngL0AuyZgA71OuhSAAMAc/H0BYAO9PGADvU4GurGApsAAsV/AALF7wACx4QEAskYBasAAsWBgA8AA/eQCAAABA8AAsZPAALHhAAAAAAAAAGADvU4BSsAAsZwBJsAAsZwBNQAAAAEAYAO9TgEWwACxnC6yprinuhUjHMAAsbWAAMAc/TJIAQABKwDAAP3xF8AAsZwusqa4pybAALGcARzAALG5LrLcuKcCAAIWwACxyi6ce7qvJ3oAuyZgA71OuhWAAMAc/TIBYAO9PGADvU4GurKApsAAsg7AALIqwACyjgEAsdYBasAAsg9gA8AA/eQCAAABA8AAskLAALKOAAAAAAAAAGADvSoBSsAAsksBNQAAAAEAYAO9KgEWwACySy6yp7inuhYjHMAAsmSAAMAc/eBIAQABKwDAAP3xF8AAsksusqe4pxzAALJoLrMeuKcBAAEnsyUAuzK6FoAAwBz94AFgA70qBrqzgKbAALLBwACy3sAAs2oBALHXAWrAALLCYAPAAP3kAgAAAQPAALL7wACzagAAAAAAAABgA708AUrAALMEATUAAAABAGADvTwBFsAAswQusqi4p7oXIxzAALMigADAHP53SAEAASsAwAD98RfAALMELrKouKccwACzMC6y3LinAgACFsAAs0Eusda6sieFLAC7JroXgADAHP53AWADvTwGurSApsAAs5vAALO3wAC0NQEAsdgBasAAs5xgA8AA/eQCAAABA8AAs9PAALQ1AAAAAAAAAGADvSoBSsAAs9wBNQAAAAEAYAO9KgEWwACz3C6yqbinuhgjHMAAs/mAAMAc/xhIAQABKwDAAP3xF8AAs9wusqm4pxzAALQHLrMeuKcBAAEnsyYAuzK6GIAAwBz/GAFgA70qBrq1gKbAALQ6wAC0VsAAtI4BALHZAWrAALQ7YAPAAP3kAgAAAQPAALRswAC0jgAAAAAAAABgA70qAUrAALRvARzAALRvLrMeuKcBAAEnsycAuzIGuraApsAAtJPAALSvwAC1CwEAsdoBasAAtJRgA8AA/eQCAAABA8AAtMDAALULAAAAAAAAAGADvSoBSsAAtMkBHMAAtMkusx64pwEAAWrAALUAYAPAAP5+wADxHwC7Mga6t4CmwAC1D8AAtSvAALWUAQCx2wFqwAC1EGADwAD95AIAAAEDwAC1QsAAtZQAAAAAAAAAYAO9KgFKwAC1SwEcwAC1Sy6zHrinAQABasAAtYJgA8AA/n7AAPEiALsyBrq4gKbAALWYwAC1tMAAthsBALHcAWrAALWZYAPAAP3kAgAAAQPAALXKwAC2GwAAAAAAAABgA70qAUrAALXTARzAALXTLrMeuKcBAAFqwAC2CmADwAD+fsAA8SUAuzIGurmApsAAth/AALY7wAC2pwEAsd0BasAAtiBgA8AA/eQCAAABA8AAtlPAALanAAAAAAAAAGADvSoBSsAAtlYBHMAAtlYusx64pwEAAWrAALaUYAPAAP5+wADxKAC7Mga6uoCmwAC2rMAAtsjAALb9AQCx3gFqwAC2rWADwAD95AIAAAEDwAC238AAtv0AAAAAAAAAYAO9KgFKwAC24gEcwAC24i6zHrinAQABJ7MrALsyBrq7gKbAALcCwAC3HsAAt1MBALHfAWrAALcDYAPAAP3kAgAAAQPAALc1wAC3UwAAAAAAAABgA70qAUrAALc4ARzAALc4LrMeuKcBAAEnsywAuzIGuryApsAAt1jAALd0wAC3pwEAseABasAAt1lgA8AA/eQCAAABA8AAt4rAALenAAAAAAAAAGADvSoBSsAAt40BHMAAt40usx64pwEAASezLQC7Mga6vYCmwAC30sAAt+7AALhCAQCx4QFqwAC302ADwAD95AIAAAEDwAC4BMAAuEIAAAAAAAAAYAO9KgFKwAC4DQE1AAAAAQBgA70qARbAALgNLrKquKe6GSMcwAC4JIAAwB0Cd0gBAAErAMAA/fEXwAC4DS6yqrinHMAAuCgusx64pwEAASezLgC7MroZgADAHQJ3AWADvSoGur6ApsAAuHXAALiXwAC5AgEAseIBasAAuHZgA8AA/eQCAAABA8AAuK/AALkCAAAAAAAAAGADvWkBSsAAuLIBNQAAAAEAYAO9aQEWwAC4si6yq7inuhojHMAAuMuAAMAdAw5IAQABKwDAAP3xF8AAuLIusqu4pxzAALjaFsAAuNUusmO4p7m9oaECAAIWwAC47C6x1bquJwAAu226GoAAwB0DDgFgA71pBrq/gKbAALklwAC5RMAAuYkBALHjAWrAALkmYAPAAP3kAgAAAQPAALlPwAC5iQAAAAAAAABgA71RAUrAALlYATUAAAABAGADvVEBFsAAuVgusqy4p7obIxzAALlkgADAHQO3SAEAASsAwAD98RfAALlYLrKsuKccwAC5aC6zHbinAQABJ7HjALsxuhuAAMAdA7cBYAO9UQa6wICmwAC5rcAAuczAALoUAQCx5AFqwAC5rmADwAD95AIAAAEDwAC52MAAuhQAAAAAAAAAYAO9UQFKwAC54QE1AAAAAQBgA71RARbAALnhLrKtuKe6HCMcwAC57oAAwB0ETkgBAAErAMAA/fEXwAC54S6yrbinHMAAufIusx24pwEAASex5AC7MbocgADAHQROAWADvVEGusGApsAAujnAALpYwAC6owEAseUBasAAujpgA8AA/eQCAAABA8AAumXAALqjAAAAAAAAAGADvVEBSsAAum4BNQAAAAEAYAO9UQEWwAC6bi6yrrinuh0jHMAAunyAAMAdBOVIAQABKwDAAP3xF8AAum4usq64pxzAALqALrMduKcBAAEnseUAuzG6HYAAwB0E5QFgA71RBrrCgKbAALrTwAC68sAAu1gBALHmAWrAALrUYAPAAP3kAgAAAQPAALsKwAC7WAAAAAAAAABgA71RAUrAALsTATUAAAABAGADvVEBFsAAuxMusq+4p7oeIxzAALssgADAHQV8SAEAASsAwAD98RfAALsTLrKvuKccwAC7MC6zHbinAQABJ7MvALsxuh6AAMAdBXwBYAO9UQa6w4CmwAC7jMAAu6vAALwnAQCx5wFqwAC7jWADwAD95AIAAAEDwAC7x8AAvCcAAAAAAAAAYAO9UQFKwAC70AE1AAAAAQBgA71RARbAALvQLrKwuKe6HyMcwAC77YAAwB0GE0gBAAErAMAA/fEXwAC70C6ysLinHMAAu/susx24pwEAASezMAC7MbofgADAHQYTAWADvVEGusSApsAAvFbAALx1wAC82AEAsegBasAAvFdgA8AA/eQCAAABA8AAvIzAALzYAAAAAAAAAGADvVEBSsAAvJUBNQAAAAEAYAO9UQEWwAC8lS6ysbinuiAjHMAAvK2AAMAdBqpIAQABKwDAAP3xF8AAvJUusrG4pxzAALyxLrMduKcBAAEnszEAuzG6IIAAwB0GqgFgA71RBrrFgKbAALzdwAC8/MAAvUIBALHpAWrAALzeYAPAAP3kAgAAAQPAAL0PwAC9QgAAAAAAAABgA71RAUrAAL0YARzAAL0YLrMduKcBAAEnszIAuzEGusaApsAAvUfAAL1mwAC9rQEAseoBasAAvUhgA8AA/eQCAAABA8AAvXrAAL2tAAAAAAAAAGADvVEBSsAAvYMBHMAAvYMusx24pwEAASex6gC7MQa6x4CmwAC9ssAAvdHAAL4YAQCx6wFqwAC9s2ADwAD95AIAAAEDwAC95cAAvhgAAAAAAAAAYAO9UQFKwAC97gEcwAC97i6zHbinAQABJ7HrALsxBrrIgKbAAL4dwAC+PMAA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AM+UwADQEAAAAAAAAABgA71RAUrAAM+XASMWwADPoBbAAM+XLrJkuKe5voK4gVYcwADPuS6zPrinAQABJ7M/ALs1HMAAz+gusx24pwEAASeyDwC7MQFgA71RBrrsgKbAANAVwADQNMAA0HgBALIQAWrAANAWYAPAAP3kAgAAAQPAANBFwADQeAAAAAAAAABgA71RAUrAANBOARzAANBOLrMduKcBAAEns0AAuzEGuu2ApsAA0H3AANCcwADQ6QEAshEBasAA0H5gA8AA/eQCAAABA8AA0LPAANDpAAAAAAAAAGADvVEBSsAA0LwBHMAA0Lwusx24pwEAASeyEQC7MQa7UYCmwADQ7sAA0P/AANGyAACyRwFqwADQ72ADwAD95AIAAAEDwADRHcAA0bIAAAABAQHAANErAAAAgmpgA708AABgA8AA+tEBPgFKwADROQEiIhbAANFHgMAA0UDAHRdMh5K9PwAcwADRaRbAANFkgMAA0V3AHRdMgL29GEgBAAEns0EAwAD+jQAcwADRoBbAANGYgMAA0ZHAHRdMhEi9S0gBAAEWwADRoy6cY7pRAMAA/fEGuu6ApsAA0bfAANHWwADSNQEAshIBasAA0bhgA8AA/eQCAAABA8AA0fbAANI1AAAAAAAAAGADvVEBSsAA0f8BHMAA0f8usx24pwEAASeyEgC7MQa674CmwADSOsAA0lnAANKaAQCyEwFqwADSO2ADwAD95AIAAAEDwADSa8AA0poAAAAAAAAAYAO9UQFKwADSdAEcwADSdC6zHbinAQABJ7NCALsxBrrwgKbAANKfwADSvsAA0vUBALIUAWrAANKgYAPAAP3kAgAAAQPAANLNwADS9QAAAAAAAABgA71RAUrAANLQARzAANLQLrMduKcBAAEnshQAuzEGu1KApsAA0vrAANMLwADTnAAAshUBasAA0vtgA8AA/eQCAAABA8AA0yHAANOcAAAAAQEBwADTMQAAAIJqYAO9UQAAYAPAAPrRAT4BSsAA0z8BIhzAANNSFsAA002AwADTRsAdGPqAvb0YSAEAASezQwDAAP6NABzAANOGFsAA036AwADTd8AdGPqESL1LSAEAARbAANOJLrGHulkAwAD98Qa7M4CmwADT5sAA0+vAANT0AACzRLinAAAAAQPAANQCwADU9AAAAAEBAcAA1AcAAACVmGADwAD8lwAAXAE+AkAcwADUOYDAANQnwB0ZkYCXAQABkwDAAP3HwADUJ8AA1DwAScAA1EMcwADUWYDAANRHwB0ZkYCXAQABNxQAwAD9xz4BPR7AANRnth8CAAJqwADUe2ADtjHAAMYPJAACJ7NFgMAA1NbAHRmRAD8Gu1OApsAA1PnAANURwADVsgAAshYBasAA1PpgA8AA/eQCAAABA8AA1SbAANWyAAAAAQEBwADVKwAAAJWYYAPAAPyXAABgA70qAT4CPRzAANVELrNEuKcBAAGAwADVXMAdGkcAuzNKwADVdAEcwADVey6zHrinAQABJMAA1a0CJ4W+gMAA1ZvAHRpHALsyBrtUgKbAANW3wADV0sAA1nUAALIXAWrAANW4YAPAAP3kAgAAAQPAANXowADWdQAAAAEBAcAA1e0AAACVmGADwAD8lwAAYAO9UQE+Aj0cwADWBi6zRLinAQABgMAA1h7AHRrVALszSsAA1jYBHMAA1j0usx24pwEAASTAANZwAiexSoDAANZewB0a1QC7MQa68YCmwADWesAA1pnAANb4AQCyGAFqwADWe2ADwAD95AIAAAEDwADWucAA1vgAAAAAAAAAYAO9UQFKwADWwgEcwADWwi6zHbinAQABJ7IYALsxBrrygKbAANb9wADXHMAA14cBALIZAWrAANb+YAPAAP3kAgAAAQPAANdCwADXhwAAAAAAAABgA71RAUrAANdLARzAANdLLrMduKcBAAEnshkAuzEGu1WApsAA14zAANedwADYSgAAslwBasAA141gA8AA/eQCAAABA8AA17HAANhKAAAAAQEBwADXvgAAAJn6YAO9KgAAYAPAAPrRAT4BSsAA18kBIiIcwADX3BbAANfUgMAA19DAHRwJhEi9LEgBAAEWwADX3y6yaLinudYAwAD98QAhHMAA2AQWwADX/4DAANf7wB0cCYC9vRhIAQABJ4W+AMAA/o0AHMAA2CsWwADYJoDAANgiwB0cCYC9vRiB2AEAASeFvgDAAP6QBrs0gKbAANhkwADYcMAA2KoAALMhuKcAAAABA8AA2H3AANiqAAAAAQEBwADYhQAAAIC9YAPAAP5+AABgA70qAUrAANiOARzAANiOLrLOuKcCAAIWwADYmS6xhrpYgMAA2KXAHRzJALskBrs1gKbAANivwADYvsAA2QkAALM+uKcAAAABA8AA2M7AANkJAAAAAQEBwADY1gAAAIC9YAPAAP5+AABgA71RAUrAANjlASbAANjlARzAANjlLrLUuKcCAAIWwADY+C6xhrpYgMAA2QTAHR0yALslYAO9UQa684CmwADZKsAA2UnAANl/AQCyGgFqwADZK2ADwAD95AIAAAEDwADZUsAA2X8AAAAAAAAAYAO9UQFKwADZVQE1AAAAAQBgA71RARbAANlVLrKzuKe6IiMcwADZX4AAwB0dvEgBAAErAMAA/fEXwADZVS6ys7inHMAA2WMusz64pwEAASeyGgC7NboigADAHR28AWADvVEGuvSApsAA2aTAANnDwADaCwEAshsBasAA2aVgA8AA/eQCAAABA8AA2dDAANoLAAAAAAAAAGADvVEBSsAA2dkBNQAAAAEAYAO9UQEWwADZ2S6ytLinuiMjHMAA2eeAAMAdHlNIAQABKwDAAP3xF8AA2dkusrS4pxzAANnrLrM+uKcBAAEnshsAuzW6I4AAwB0eUwFgA71RBrr1gKbAANo1wADaVMAA2qwBALIcAWrAANo2YAPAAP3kAgAAAQPAANpmwADarAAAAAAAAABgA71RAUrAANpvATUAAAABAGADvVEBFsAA2m8usrW4p7okIxzAANqCgADAHR7qSAEAASsAwAD98RfAANpvLrK1uKccwADahi6zPrinAQABJ7K1ALs1uiSAAMAdHuoBYAO9UQa69oCmwADa18AA2vbAANtLAQCyHQFqwADa2GADwAD95AIAAAEDwADbCcAA20sAAAAAAAAAYAO9UQFKwADbEgE1AAAAAQBgA71RARbAANsSLrK2uKe6JSMcwADbJoAAwB0fgUgBAAErAMAA/fEXwADbEi6ytrinHMAA2yousz64pwEAASeytAC7NbolgADAHR+BAWADvVEGuveApsAA23TAANuTwADb4gEAsh4BasAA23VgA8AA/eQCAAABA8AA26TAANviAAAAAAAAAGADvVEBSsAA260BNQAAAAEAYAO9UQEWwADbrS6yt7inuiYjHMAA27+AAMAdIBhIAQABKwDAAP3xF8AA260usre4pxzAANvDLrM+uKcBAAEns0YAuzW6JoAAwB0gGAFgA71RBrr4gKbAANwJwADcKMAA3HYBALIfAWrAANwKYAPAAP3kAgAAAQPAANw3wADcdgAAAAAAAABgA71RAUrAANxAATUAAAABAGADvVEBFsAA3EAusri4p7onIxzAANxQgADAHSCvSAEAASsAwAD98RfAANxALrK4uKccwADcVC6zPrinAQABJ7IfALs1uieAAMAdIK8BYAO9UQa6+oCmwADce8AA3IvAANy5AQCzR7inAAAAAQPAANyZwADcuQAAAAAAAABgA70qAUrAANycARzAANycLrLOuKcCAAIWwADcpy6xhrpYJ7NIALskBrr7gKbAANy9wADczcAA3QUBALNJuKcAAAABA8AA3N/AAN0FAAAAAAAAAGADvSoBSsAA3OIBHMAA3OIuss64pwIAAhbAANztLrGGulgns0oAuyQGuzaApsAA3QnAAN0VwADdYwAAs0u4pwAAAAEDwADdJ8AA3WMAAAABAQHAAN0vAAAAgL1gA8AA/n4AAGADvU4BSsAA3T4BJsAA3T4BHMAA3T4usty4pwIAAhbAAN1PLrNHuKe6+oDAAN1ewB0h1QC7JmADvU4GuvyApsAA3YPAAN2fwADd1gEAsiABasAA3YRgA8AA/eQCAAABA8AA3arAAN3WAAAAAAAAAGADvU4BSsAA3a0BNQAAAAEAYAO9TgEWwADdrS6yubinuigjHMAA3bmAAMAdImFIAQABKwDAAP3xF8AA3a0usrm4pxzAAN29LrNLuKcBAAEns0wAuza6KIAAwB0iYQFgA71OBrr9gKbAAN32wADeEsAA3kkBALIiAWrAAN33YAPAAP3kAgAAAQPAAN4dwADeSQAAAAAAAABgA71OAUrAAN4gATUAAAABAGADvU4BFsAA3iAusrq4p7opIxzAAN4sgADAHSL4SAEAASsAwAD98RfAAN4gLrK6uKccwADeMC6zS7inAQABJ7NNALs2uimAAMAdIvgBYAO9Tga6/oCmwADebMAA3ojAAN7OAQCyIQFqwADebWADwAD95AIAAAEDwADelsAA3s4AAAAAAAAAYAO9TgFKwADenwE1AAAAAQBgA71OARbAAN6fLrK7uKe6KiMcwADeroAAwB0jj0gBAAErAMAA/fEXwADeny6yu7inHMAA3rIus0u4pwEAASezTgC7NroqgADAHSOPAWADvU4Guv+ApsAA3vDAAN8MwADfSQEAsiMBasAA3vFgA8AA/eQCAAABA8AA3xnAAN9JAAAAAAAAAGADvU4BSsAA3xwBNQAAAAEAYAO9TgEWwADfHC6yvLinuisjHMAA3yqAAMAdJCZIAQABKwDAAP3xF8AA3xwusry4pxzAAN8uLrNLuKcBAAEns08Auza6K4AAwB0kJgFgA71OBrsAgKbAAN9vwADfjsAA3+ABALIkAWrAAN9wYAPAAP3kAgAAAQPAAN+cwADf4AAAAAAAAABgA71RAUrAAN+lASbAAN+lATUAAAABAGADvVEBFsAA36Uusr24p7osIxzAAN+0gADAHSTDSAEAASsAwAD98RfAAN+lLrK9uKcmwADfpQEcwADfuC6y3LinAgACFsAA38kus0e4p7r6J7NQALsmYAO9UbosgADAHSTDAWADvTxgA71RBrsBgKbAAOAGwADgJcAA4HcBALIlAWrAAOAHYAPAAP3kAgAAAQPAAOAzwADgdwAAAAAAAABgA71RAUrAAOA8ASbAAOA8ATUAAAABAGADvVEBFsAA4Dwusr64p7otIxzAAOBLgADAHSV6SAEAASsAwAD98RfAAOA8LrK+uKcmwADgPAEcwADgTy6y3LinAgACFsAA4GAus0e4p7r6J7NRALsmYAO9UbotgADAHSV6AWADvTxgA71RBrsCgKbAAOChwADgwMAA4SEBALImAWrAAOCiYAPAAP3kAgAAAQPAAODSwADhIQAAAAAAAABgA71RAUrAAODbASbAAODbATUAAAABAGADvVEBFsAA4Nsusr+4p7ouIxzAAODugADAHSYxSAEAASsAwAD98RfAAODbLrK/uKcmwADg2wEcwADg8i6y3LinAgACFsAA4QMus0m4p7r7J7NSALsmYAO9UbougADAHSYxAWADvTxgA71RBrsDgKbAAOFVwADhdMAA4fQBALInAWrAAOFWYAPAAP3kAgAAAQPAAOGQwADh9AAAAAAAAABgA71RAUrAAOGZATUAAAABAGADvVEBFsAA4ZkussC4p7ovIxzAAOG2gADAHSbiSAEAASsAwAD98RfAAOGZLrLAuKccwADhxC6zPrinAQABJ7LAALs1ui+AAMAdJuIBYAO9UQa7BICmwADiKcAA4kjAAOLLAQCyKAFqwADiKmADwAD95AIAAAEDwADiZcAA4ssAAAAAAAAAYAO9UQFKwADibgE1AAAAAQBgA71RARbAAOJuLrLBuKe6MCMcwADijIAAwB0neUgBAAErAMAA/fEXwADibi6y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AcABD8QAAACpWGADvTYAAGADwABi1gAGu3qApsABD/zAARAJwAEQMQACs3oAAAABA8ABEBjAARAxAAAAAQEBwAEQKAAAAIJuYAO9UQAAYAPAAGNpAAa7e4CmwAEQd8ABEI7AARC/AAKzewAAAAEDwAEQpsABEL8AAAABAQHAARC2AAAAgm5gA71RAABdA8AA/TsBYAPAAGMpAAa7fICmwAEQ9MABEQHAAREiAAKzfAAAAAEDwAERFcABESIAAAABAQHAAREcAAAAnwdgA711AABgA8AAY2kABrt9gKbAARFKwAERU8ABEXIAArN9AAAAAQPAARFfwAERcgAAAAEBAcABEWwAAACEm2ADvU4AAGADwABi1gAGu36ApsABEqPAARKswAESywACs34AAAABA8ABErzAARLLAAAAAQEBwAESxgAAAIKUYAPAAGLWAABgA8AAYtYABrt/gKbAARMEwAETCcABEyUAArN/AAAAAQPAARMUwAETJQAAAAEBAcABEyEAAACZ+mADvSoAAGADwAD60QAAAB0++QAdPycAHT9VAB0/igAdP8gAHUAiAB1AbQAdQNUAHUEgAB1BpAAdQigAHUN8AB1D5AAdRC8AHUR+AB1EyQAdRSEAHUVuAB1FwwAdRfMAHUYxAB1GbwAdRq0AHUbrAB1HKQAdR2cAHUelAB1H6gAdSCgAHUhmAB1IpgAdSOQAAAAfAruCgKbAARMqwAETOcABF0oHs4AAAAFgAbteAAAAAQW7jAAAAAAEAAADAAAAAAAAAAAAYAO7ggE/AQkBALuBAAAAAAcGu4SApsABE8bAARPLwAEUAwACs4EAAAABA8ABE9fAARQDAAAAAgICwAET5AAAAJn6YAO9KgDAARPuAAAAgaZhAwFgA70qXAAAXAAGu4WApsABFFXAARRowAEUlQACs4IAAAABA8ABFILAARSVAAAAAQEBwAEUjwAAAISbYAO9TgAAYAPAAE4kAAa7hoCmwAEVBsABFQvAARU7AAKzgwAAAAEDwAEVJsABFTsAAAABAQHAARU0AAAAgmpgA708AABgA8AA+tEABruHgKbAARVswAEVg8ABFaQAArOEAAAAAQPAARWNwAEVpAAAAAEBAcABFZwAAACESGADvRsAAF0DwAD8+QFgA70gAAa7iICmwAEV5cABFf3AARYmAAKzhQAAAAEDwAEW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AFrawB14MISIvHCD/QEAATTAAFr3A8AAWvfAAFysAAAAAgICwABbBAAAAJn6YAO9KgDAAFsYAAAAgVRgA7x6AABgA8AA/aEBPgI9HMAAWyYus/O7nQQABBTAAFs+wB14uggAh8AAW0TAHXisgcAAW0nAHXgihsAAW1LAHXhoALvVScAAW2IWwABbaxTAAFtmwB14uggAhLa8fD4BScAAW4EmwABbhQEcwABbhS6z77udAQABhMAAW6LAHXhMALvTYAPAAPrRPgFGwABbt8AAW+nAAFvJAAAAhK5gA70gABbAAFvgFMAAW9vAHXi6CACZp7x9PgE9HMAAW/2FwABb98AdeFqElwIAAofAAFwGwB14rBzAAFwWFsAAXAsus7K7urP5AQABFMAAXCDAHXlZCQAAvAEAvCE/PgE9HMAAXF8us+e7nQUABYDAAFx1wB14EofAAFyCwB14rIPAAFyHwB14PoTAAFyPwB14TIXAAFyXwB14WgC70ADAAP2MPRzAAFzJFsAAXMGCwABctMAdeDCElLxxg/0BAAE0wABc0QPAAFzRwABelgAAAAICAsAAXN8AAACCamADvTwAwABc9gAAAIFUYAO8egAAYAPAAP2hAT4CPRzAAF0ELrP0u50EAAQUwABdHcAdekQIAIfAAF0jwB16NoHAAF0rwB14IobAAF00wB14aAC71knAAF1EFsAAXU0UwABdSMAdekQIAIS2vHw+AUnAAF1jJsAAXWcBHMAAXWcus++7nQEAAYTAAF2EwB14TAC702ADwAD60T4BRsAAXZnAAF3LwABdqwAAAISuYAO9IAAWwABdwhTAAF29wB16RAgAmae8fT4BPRzAAF3fhcAAXdnAHXhahJYCAAKHwABd6cAdejYcwABd/BbAAF3xLrOyu7qz+QEAARTAAF4GwB164wkAALwBALwiPz4BPRzAAF5FLrPtu50FAAWAwABeXMAdeBKHwABeacAdejaDwABeccAdeD6EwABeecAdeEyFwABegcAdeFoAu9EAwAD9jEbAAF6ewABe18AAXqkAAACzy2ADvXUAFsAAXseCwABeusAdeDCzzLxyPgE9HMAAXt8us+67nQMAA4fAAF70wB17mIPAAF8DwB14PoTAAF8LwB14TAC70j0cwABfPxbAAF8sgsAAXx/AHXgwmWK8c4P9AQABNMAAX0cDwABf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vApOwACip8AAorAAALQuXQPAAP07AWADu/MBFsAAorSBwACissAdodOzorudvApOwACixsAAosgAAGJgA8AA/JcBk07AAKLNwACizwAAl9JgA8AA/JcBk07AAKLUwACi3wAAtC9gA8AA/JcBk07AAKLkwACi7wAAtDBgA8AA/JcBk07AAKL8wACjAwAAgXZgA7wHARbAAKMFLrQqu527/UPAAKMUIhzAAKMdhMAAoxvAHaLoYwEAARbAAKMogsAAox/AHaKOYcAA/WsAwAD9xQAcwACjNIXAAKMywB2i/GMBAAEWwACjP4PAAKM2wB2iu2HAAP1rAMAA/cU+BU7AAKNTwACjWwAAtDFgA7vzARzAAKNlgsAAo13AHaKOSwEAAYTAAKNmwB2i6ADAAP1KTsAAo3TAAKN8AAC0MmADu/MBHMAAo4aDwACjfsAdortLAQABhcAAo4fAHaL8AMAA/UpAHMAAo6OGwACjmMAdoxGBawEAARbAAKOuFMAAo6bAHaO2CQAnu/YAwAD9xsAAo5jAAKOzAEAcwACjzofAAKPDwB2jJoFrAQABFsAAo9kUwACj0cAdo+gKACe79gDAAP3GwACjw8AAo94AScAAo+ccwACj+RbAAKPzFMAAo+vAHaO2CQAnu/ZjAQABFsAApAMUwACj+8Ado+gKACe79gDAAP3FPgI9FcAApBTAHaM7CBzAAKQkFMAApB3AHaM7CAC0K7udAQABFMAApCnAHaO2CQAAvBE9jMAApDvAHaLoHMAApDyEwACkO8AdouhkAQABlADAAP29PgI9FcAApFfAHaM7CBzAAKRnFMAApGDAHaM7CAC0K7udAQABFMAApGzAHaPoCgAAvBE9jcAApH7AHaL8HMAApH+FwACkfsAdovxkAQABlADAAP29RcAApJUAARzAAKSehMAApJzAHaLoYwEAARbAAKSpgsAApKDAHaKOYcAA/WsAwAD9xQGMwACkscAdougcwACksoTAAKSxwB2i6GQBAAGUAMAA/b0+AT0VwACkvsAdozsIHMAApM4UwACkx8AdozsIALQru50BAAEcwACk24LAAKTTwB2ijksBAAGEwACk3MAdougAwAD9SgC8EUXAAKTrAAEcwACk9IXAAKTywB2i/GMBAAEWwACk/4PAAKT2wB2iu2HAAP1rAMAA/cUBjcAApQfAHaL8HMAApQiFwAClB8AdovxkAQABlADAAP29PgE9FcAApRTAHaM7CBzAAKUkFMAApR3AHaM7CAC0K7udAQABHMAApTGDwAClKcAdortLAQABhcAApTLAHaL8AMAA/UoAvBFKwAClQgEUwAClScAdozsIAAa8BICnwAClnsAApa7AAKY7AAC0LLudAAAAAQPAAKWzwACmOwAAAAEBAcAApcEAAACEr2ADvSAAAGADu/MBPgFKwAClzwEcwACl4xbAAKXWLrQpu527/JlKAgACgMAApfjAHabTNMAApgADwACmAMAApjYAAAAAAAAAYAO78wFKwACmBgEfwACmCrv4AgACgMAAphrAHabTFsAApi8WwACmIi60Kbudu/xhwAD9kQAAwAD9iAAAHaDlAB2hJQAdoZ0AHaapAB2nXQAAAAQCvAeAp8AApmnAAKZvwACr6wO0MwAAAWABwAD95AAAAwS8CoCnwACnTMAAp1QJs6K7nQBdA8AA/TsBYAO78wAEvAuAp8AAp8XAAKf4CbQ0u50AXQPAAP1tAmADu/NgA7wHATLAAKf2YAO782ADvAcABLwMgKfAAKiHwACoixiztABgA7ugASsBBbwUgKfAAKf9wACn/cAAqDMAAAADwACoBsAAqDMAAAABAAHAAKgNAAAEs6JdA8AA/TsBYAO78wFqwACoGF0DwAD9OwFgA7vzwADy2QBgA7wHAT8CCAG8CoAAwB2oIQkBwACn/cAA/foAAAAAAwa8DoCnwACokMAAqJjAAKixAQBhAAAAAQPAAKifwACosQAAAAAAAABgA8AA/JcBSsAAqKIBFsAAqKsWwACooi6zorudvAphwAD9awa8EYCnwACp0MAAqdrAAKrwAAC0K7udAAAAAQPAAKnewACq8AAAAAEBAcAAqe8AAACEr2ADu/MAAGADvAcBPgNOwACqB8AAqg4AAIF2YAO8BwEcwACqHBbAAKoQLrQ0u528C0sBAAGAwACqHcAdqOAAwAD9gUnAAKoqHMAAqjWBwACqLsAdqPdIAQABKwDAAP3xPgM9icAAqkbAHaj3H8AAqlO8FAEAATXAAKphAAABAF0DwAD9OwFgA7vzAR7AAKphwAD9QQEBYAO78wEWwACqay6zorudvAoANQAAAAEAWwEcwACqdoLAAKp0wB2pX1YBAAGAwACqesAdqOAAwAD9TIIAwB2pXwA9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gMAARSvAHh1hAMAA/YFIAQABKwDAAP3xARzAAEVkHMAARVkWwABFSi60mry6vPBLAQABgMAARVrAHh1hAMAA/YFIAQABgcAARWfAHh1xAMAA/fHAAEUbwABFawA9HMAARYMWwABFdC60mry6vPCAvwIAAoDAAEWEwB4dYYHAAEWQwB4dcQDAAP2CPTUAAAABAF0DwAD9bQJgA8AAlGFgA8AAbRYBFsAARZwutJu8urzuNQAAAAEAYAPAAJRhAYHAAEWmwB4dcSMcwABFrBzAAEWlgsAARaXAHh5QSwEAAYPAAEWlwB4edgDAAP2BSAEAASsAwAD98TUAAAABAGADwABtFgEjFsAARbAutNC86h/AAEXGwABtHAAAAAAfwABF170UAAAAAAFgA8AAbRY1AAAAAQBcARzAAEWlgsAARaXAHh5QgL8CAAKDwABFpcAeHnaEAMAeHrwAwAD9goQAwB4evCsBYAPAAG0WPwa894CpwABF8cAARfrAAEYcAQC03gAAAAEDwABGCcAARhwAAAAAAAAAYAPAAPrRAUrAAEYMASEWwABGDS600LzqBr0AgKnAAEaLwABGkMAARzwAALTfAAAAAQPAAEaZwABHPAAAAAICAsAARqUAAACD82ADwACUYQDAAEavAAAAamADwAD8lwAAXAE+A07AAEbAwABGxQAAEmADwABtFgEcwABG0BbAAEbHLrSbvLq87ksBAAGAwABG0cAeH5kAwAD9gT01AAAAAQBgA8AAbRYBgsAARtzAHh++IxzAAEbigwDAHh/1SAEAASsAACsXwABG4oMAwB4f9WqBwABG6sAeH6nAAG0YAWADwAD8l0nAAEb2IhbAAEb6LrTevPcAIRzAAEcRgsAARwzAHh++SAEAASsAwAD98T4BPRzAAEcpFsAARyIutNW8urzxVgEAASbAAEctAYLAAEctwB4fvmADvQwAwAD9TD8GvQGAqcAAR0HAAEdGwABIlgAAtOAAAAABA8AAR0rAAEiWAAAAAQEBwABHUgAAAIPxYAPAAP5+AABcAT4BScAAR2AWwABHZC603rz3PgE9HMAASGcWwABIYC601by6vPGD/QEAATTAAEhvA8AASG/AAEiLAAAAAQEBwABIcAAAAIGmYAO9DAAAXAFKwABIdgEcwABIfhbAAEh4gcAASHbAHiEStOG8ur0Pgo4BAAGAwABIhMAeIMEAwAD+3ADAAP0JPwa9AoCpwABIm8AASKDAAEmpAAC04gAAAAEDwABIqMAASakAAAAEBATAAEi0AAAAg/NgA8AAlGEAwABIvgAAAGpgA8AA/JcAwABIyQAAAIKQYAPAAPyXAMAASNIAAAC042ADwAD8lwAAXAE+A07AAEjlwABI6gAAEmADwABtFgEcwABI9RbAAEjsLrSbvLq87ksBAAGAwABI9sAeIYMAwAD9gT01AAAAAQBgA8AAbRYBhMAASQHAHiHIIxzAAEkHhQDAHiH/SAEAASsAACsXwABJB4UAwB4h/4KQgsAASQ3AHiGiwABtGQFgA8AA/JdJwABJFiIWwABJGi603rz3ACEcwABJMYTAAEkswB4hyEgBAAErAMAA/fE+A07AAElGwABJSwAAgepgA70MARzAAElUFsAASU0utNW8urzxhiYAAAAAwAD9WkAcwABJdITAAElvwB4hyEgBAAGFwABJd8AeInYAwAD98cAASW/AAEl7AEAcwABJlhbAAEmQhMAASYvAHiHIasAAbRhIAQABgcAASZnAHiGTAMAA/bvAAEmLwABJngA/Br0DgKnAAEoqwABKLsAASucAALShAAAAAQPAAEo0wABK5wAAAAEBAcAASjwAAACkZ2ADvRYAAGADwAD8lwE+AUnAAEpKHMAASl0WwABKTi6007y6vO+HWAEAAYDAAEppwB4jKQDAAP2APgFKwABKegEcwABKqBzAAEqYHMAASo8WwABKgS6007y6vO9LAQABgMAASpDAHiMpAMAA/YGAqwEBYAPAAPyXARbAAEqcLrTkvQQAwAD9BINfAgFgA8AA/JcCkzTAAEqwA8AASrDAAEq/AAAAAgICwABKsQAAAIHXYAPAAPyXAMAASrQAAACCTmADwAD8lwAAYAPAAPyXAUrAAEq6ARzAAEq8gcAASrrAHiPZZAEAAYLAAEq+wB4j6QDAAP29AMAA/Qs+AUrAAErVAZMGvQSAqcAASuzAAErwwABLdwAAtOQAAAABA8AASvrAAEt3AAAAAQEBwABLBgAAAIPzYAPAAJRhAABgA8AA/JcBPgNOwABLG8AASyAAAJbYYAPAAG0WARzAAEsrFsAASyIutJu8urzuSwEAAYDAAEsswB4kXQDAAP2BScAASzccwABLQIHAAEs7wB4keEgBAAErAMAA/fFK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l7y6vMFLAQABhsAAV3rAHi8IAMAA/YFgA8AAbStOwABXncAAV6IAAK76XQPAAPz5AWADvNsBHMAAV6QutNkCAAKGwABXscAeLwiAwABXucAeK3YAvP1GwABYDADAAFgbAAAAtPVgA7zbABTAAFgowB4vdggAQT4DTsAAWD3AAFhFAAC09mADwABssQEcwABYYhbAAFhVFsAAWEcutNG867SXvLq8wUsBAAEWwABYbRTAAFhjwB4vtAkAtMq83QDAAP2BScAAWIYcwABYkhTAAFiKwB4v0QoASAEAASsAwAD98ULAAFibAD89HMAAWLcWwABYsofAAFitwB4vKq76wABszFYBAAEfwABYv8AAbWgCAAIUwABY28AeL9EKADUAAAABAGADwAD95AEWwABY7hTAAFjkwB4vtAkAtMu83iMcwABZAhQAwB4wdwsASAEAASsAACscwABZAhQAwB4wdwsAIwAAAADAAP3yAWADwAD+fgAAwAD9TD0cwABZiRbAAFl6FsAAWXEugpq86aT2pJylcQEAAWrAAFmWYAPAAE11wADy+gDAAE1/RsAAWdsAwABZ5wAAAKRnYAO9FgAWwABZ+xbAAFnxLrTUvPODaMAA/Y9BPgNOwABaEsAAWhwAALT4YAPAAGzKASbAAFoSARzAAFo5FsAAWiwWwABaHi600bzrtJe8urzBSwEAAYXAAFo6wB4xCADAAP2BYAPAAGzKScAAWkkcwABaV4bAAFpNwB4xL0gBAAErAMAA/fFCwABaYAA/RsAAWnAAwABafAAAALT5YAO9FgAcwABakBbAAFqHLrTUvPNLAQABhcAAWpHAHjEIAMAA/YFBPgNOwABaqcAAWrUAALT6YAPAAGyxARzAAFrSFsAAWsUWwABaty600bzrtJe8urzBSwEAAYfAAFrTwB4xpADAAP2BScAAWuUcwABa9RTAAFrpwB4x1wgASAEAASsAwAD98ULAAFr+AT89HMAAWx8WwABbGobAAFsQwB4xL676wABszFYBAAEfwABbJ8AAbWgCAAIUwABbNsAeMdcIACe0+QAAwAD9TD0XwABbaoLAAFtjwB4ryrT7HMAAW54WwABbhoDAAFt6wB4rdq9kwABNrrRyAgACFsAAW7oWwABbsS6CmrzpeqSdFsAAW8+AwABbw8AeK3alO8AATaIAvGnAAGzaPRzAAFvy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mICts+az87QaAAK1zgAAAAEDs/u0GgAAAAEBAbQUAAAIgJZgA75RAABgA743AAa+mYCttJy0qbTQAAK1zwAAAAEDtLG00AAAAAEBAbTKAAAIgJZgA75RAABgA743AAa+moCttUu1WLWIAAK10AAAAAEDtWm1iAAAAAEBAbWCAAAIgJZgA75RAABgA743AAa+m4CttgW2ErZIAAK10QAAAAEDtim2SAAAAAEBAbZCAAAIgJZgA75RAABgA743AAa+nICttry2ybb3AAK10gAAAAEDtti29wAAAAEBAbbxAAAIgJZgA75RAABgA743AAa+nYCtt223erehAAK10wAAAAEDt4K3oQAAAAEBAbebAAAIgJZgA75RAABgA743AAa+noCtuBi4JbhSAAK11AAAAAEDuDO4UgAAAAEBAbhMAAAIgJZgA75RAABgA743AAa+n4CtuMC4zbj0AAK11QAAAAEDuNW49AAAAAEBAbjuAAAIgJZgA75RAABgA743AAa+oICtuWy5ebmmAAK11gAAAAEDuYe5pgAAAAEBAbmgAAAIgJZgA75RAABgA743AAa+oYCtuhG6HrpGAAK11wAAAAEDuie6RgAAAAEBAbpAAAAIgJZgA75RAABgA743AAa+ooCturu6yLr2AAK12AAAAAEDute69gAAAAEBAbrwAAAIgJZgA75RAABgA743AAa+o4Ctu2O7cLuXAAK12QAAAAEDu3i7lwAAAAEBAbuRAAAIgJZgA75RAABgA743AAa+pICtvA68G7xIAAK12gAAAAEDvCm8SAAAAAEBAbxCAAAIgJZgA75RAABgA743AAa+pYCtvLu8yLz4AAK12wAAAAEDvNm8+AAAAAEBAbzyAAAIgJZgA75RAABgA743AAa+poCtvVi9Zr2hAAKXLgAAAAEDvWu9oQAAAAICAr2EAAAIgddgA75RAL2fAAAIgk5gA75RAABgA75RAAa+p4Ctvgi+Fr5BAAK13AAAAAEDviG+QQAAAAEBAb46AAAAKV0DwAD8+QFgA75RAABgA75RAAa+qICtvqK+sL75AAKXLwAAAAEDvry++QAAAAICAr7cAAAIgddgA75RAL73AAAIgk5gA75RAABgA75RAAa+qYCtv2m/dr++AAK13QAAAAEDv4G/vgAAAAICAr+hAAAIgddgA75RAL+8AAAIgk5gA75RAABgA743AAa+qoCtwABAKsAAQDfAAEBdAAKEBwAAAAEDwABAQsAAQF0AAAABAQHAAEBbAAAIgddgA75RAABgA743AAa+q4CtwABArMAAQLrAAEDuAAK13gAAAAEDwABA2cAAQO4AAAABAQHAAEDoAAAAgJZgA8AAYUIAAGADvlEABr6sgK3AAEE8wABBQcAAQWsAArXfAAAAAQPAAEFMwABBawAAAAEBAcAAQWUAAAiAlmADvlEAAGADwAD60QAGvq2ArcAAQpDAAEKewABDTAACteAAAAABA8AAQrLAAENMAAAABQUFwABCyAAAALXhYAO+UQDAAELkAAAAteJgA8AA/eQAwABDBwAAALXjYAO9PADAAEMuAAAAmwxgA75RAMAAQ0UAAABhYAPAAPyXAABgA75RAAa+roCtwABD0cAAQ9/AAEQLAAK15AAAAAEDwABD9sAARAsAAAABAQHAAEQFAAAAgJZgA75RAABgA75RAAa+r4CtwABE2sAARN7AAEUFAAK15QAAAAEDwABE8MAARQUAAAABAQHAAET/AAAAgJZgA75RAABgA8AA/JcABr6wgK3AAEVNwABFUsAARXYAAqKMAAAAAQPAAEVXwABFdgAAAAEBAcAARXAAAAiAlmADvlEAAGADwAD60QAGvrGArcAARnvAAEaJwABHHwACteYAAAABA8AARpfAAEcfAAAABAQEwABGrQAAALXhYAO+UQDAAEbJAAAAteJgA8AA/eQAwABG7AAAALXjYAO9PADAAEcTAAAAmwxgA75RAABgA75RAAa+soCtwABHnsAAR6zAAEfSAAK15wAAAAEDwABHvcAAR9IAAAABAQHAAEfMAAAAgJZgA75RAABgA75RAAa+s4CtwABIGsAASB/AAEhDAAKsxgAAAAEDwABIJMAASEMAAAABAQHAAEg9AAAIgJZgA75RAABgA8AA+tEABr60gK3AAElNwABJW8AASgQAArXoAAAAAQPAAElpwABKBAAAAAUFBcAASX8AAAC14WADvlEAwABJmwAAALXiYAPAAP3kAMAASb4AAAC142ADvTwAwABJ5QAAAIPWYAO+UQDAAEn+AAAAgJZgA75RAABgA75RAAa+tYCtwABKf8AASo3AAEqvAAK16QAAAAEDwABKmsAASq8AAAABAQHAAEqpAAAAgJZgA75RAABgA75RAAa+toCtwABLLMAASzrAAEteAAK16gAAAAEDwABLScAAS14AAAABAQHAAEtYAAAAgJZgA75RAABgA75RAAa+t4CtwABL2cAAS97AAEwJAAK16wAAAAEDwABL6sAATAkAAAABAQHAAEwDAAAIgJZgA75RAABgA8AA+tEABr64gK3AAE0awABNKMAATgMAArXsAAAAAQPAAE09wABOAwAAAAYGBsAATVMAAAC14WADvlEAwABNbwAAALXiYAPAAP3kAMAATZIAAAC142ADvTwAwABNuQAAAIPWYAO+UQDAAE3SAAAAgJZgA75RAMAATfoAAAC17V0DwAD9bQJgA8AA/n5gA75RAABgA75RAAa+uYCtwABOY8AATmjAAE6eAAK17gAAAAEDwABOfcAATp4AAAACAgLAAE6MAAAAgJZgA75RAMAATpoAAACD1mADwAD+fgAAYAPAAPrRAAa+uoCtwABPLMAATzrAAE9zAAK17wAAAAEDwABPUsAAT3MAAAACAgLAAE9hAAAAgJZgA75RAMAAT28AAACD1mADwAD+fgAAYAO+UQAGvruArcAAUGTAAFBpwABQvgACtfAAAAABA8AAUHvAAFC+AAAAAgICwABQkQAAALXxYAO+UQDAAFCvAAAAtfJgA75RAABgA8AA+tEABr68gK3AAFHNwABR28AAUgEAArXzAAAAAQPAAFHswABSAQAAAAEBAcAAUfsAAACAlmADvlEAAGADvlEABr69gK3AAFMdwABTJMAAU0oAArX0AAAAAQPAAFM1wABTSgAAAAEBAcAAU0QAAACAlmADvlEAAGADwAD95AAGvr6ArcAAVFfAAFRkwABUjQACtfUAAAABA8AAVHjAAFSNAAAAAQEBwABUhwAAAICWYAO+UQAAYAO9PAAGvr+ArcAAVOHAAFTmwABVFQACtfYAAAABA8AAVPbAAFUVAAAAAQEBwABVDwAACICWYAO+UQAAYAPAAPrRAAa+wICtwABVkMAAVZ7AAFX0AAK19wAAAAEDwABVssAAVfQAAAACAgLAAFXIAAAAteFgA75RAMAAVe4AAACAlmADwABheAAAYAO+UQAGvsGArcAAVqPAAFa6wABW6gACtfgAAAABA8AAVsvAAFbqAAAAAQEBwABW5AAACICWYAO+UQAAYAPAAGF4AAa+woCtwABXP8AAV03AAFd8AAK1+QAAAAEDwABXXMAAV3wAAAABAQHAAFd0AAAAhJRdA8AA/PkBYAO9PAAAYAO+UQAGvsOArcAAWEfAAFhUwABYpAACsxkAAAABA8AAWGXAAFikAAAAAwMDwABYewAAAIWPYAO+UQDAAFiSAAAAgmpgA708AMAAWJ8AAACAvWADwABo7wAAYAO+NwAGvsSArcAAWSPAAFkwwABZewACtfoAAAABA8AAWUnAAFl7AAAAAgICwABZXwAAAIWPYAO+UQDAAFlyAAAApTRgA8AAS88AAGADvjcABr7FgK3AAFo+wABaTMAAWocAArX7AAAAAQPAAFp4wABahwAAAAEBAcAAWoIAAACClGADwABi1gAAYAO+UQAGvsaArcAAWyrAAFs3wABbbQACgxwAAAABA8AAWz/AAFttAAAAAgICwABbTgAAALX8YAO+UQDAAFtmAAAAtf1gA75RAABgA743AAa+x4CtwABcEMAAXB3AAFxPAAK1/gAAAAEDwABcIcAAXE8AAAACAgLAAFwwAAAAtf1gA75RAMAAXEYAAAC1/GADvlEAAGADvjcABr7IgK3AAFz+wABdC8AAXUgAArX/AAAAAQPAAF0dwABdSAAAAAICAsAAXSwAAACFj2ADvlEAwABdPwAAAKU0YAPAAEvPAABgA708AAa+yYCtwABdxsAAXdPAAF3/AAKx7gAAAAEDwABd4MAAXf8AAAABAQHAAF35AAAIgJZgA75RAABgA743AAa+yoCtwABfCcAAXxbAAF9DAAK2AAAAAAEDwABfLsAAX0MAAAABAQHAAF89AAAAgJZgA75RAABgA743AAa+y4CtwABfv8AAX8zAAF/5AAK2AQAAAAEDwABf5MAAX/kAAAABAQHAAF/zAAAAgJZgA75RAABgA743AAa+zICtwABgTcAAYFTAAGB3AAK2AgAAAAEDwABgYsAAYHcAAAABAQHAAGBxAAAAgJZgA75RAABgA8AA/n4ABr7NgK3AAGDBwABgz8AAYQEAArErAAAAAQPAAGDuwABhAQAAAAEBAcAAYPoAAACDSmADwABdsQAAYAO+UQAGvs6ArcAAYT/AAGFEwABhhAACsTIAAAABA8AAYWDAAGGEAAAAAgICwABhagAAAIRAYAPAAF1iAMAAYX4AAACAlmADvlEAAFwAAAAegNYAHoD6AB6BHgAegUIAHoFmAB6BigAega4A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Ky62I79gv2YAwABBKQAhFsAAQ0OAwABDPcAe8/i2VsAAQT4ABr/WgK/AAENXwABDcMAARAkAALXOAWrAAENYYAPAAP3kAgAAAQPAAEN4wABECQAAAAEBAcAAQ4IAAAiAlmADwABBEAAAYAO+NwE+AUrAAEOPAR7AAEOjvkQBAAEiIRbAAEO2gMAAQ7DAHvSQtlbAAEE+ABzAAEPMLrZSv2ACAAKAwABD4MAe9JAWwABD9hbAAEPnLrO3v4axyrkJAL+1AAa/14CvwABEDsAARCfAAETAAAC1zwFqwABED2ADwAD95AIAAAEDwABEL8AARMAAAAABAQHAAEQ5AAAIgJZgA8AAQRAAAGADvjcBPgFKwABERgEewABEWr5EAQABIiEWwABEbYDAAERnwB71MLZWwABBPgAcwABEgy62Ur9gAgACgMAARJfAHvUwFsAARK0WwABEni6zt7+Gscu5CgC/tQAGv9iAr8AARMXAAETewABFhQAAtdABasAARMZgA8AA/eQCAAABA8AARO/AAEWFAAAAAQEBwABE+QAACICWYAPAAEEQAABgA743AT4BSsAARQYBHsAARRq+RAEAASIhFsAARS2AwABFJ8Ae9dC2VsAAQT4AHMAARUMutlK/YAIAAoDAAEVXwB710BbAAEVtFsAARV4us7e/hrHJuQgAv7UABr/ZgK/AAEWKwABFo8AARjwAALXRAWrAAEWLYAPAAP3kAgAAAQPAAEW6wABGPAAAAAEBAcAARcQAAAiAlmADwABBEAAAYAO+NwE+AUrAAEXRAR7AAEXlvkQBAAEcwABF+i62Ur9gAgACgMAARg7AHvZwFsAARiQWwABGFS6zt7+Gscm5CAC/tQAGv9qAr8AARkHAAEZawABGyAAAtdIBasAARkJgA8AA/eQCAAABA8AARmnAAEbIAAAAAQEBwABGcwAACICWYAPAAEEQAABgA743AT4BSsAARoABHsAARpS+RAEAARzAAEamgMAARqDAHvb5tmEBAAEWwABGti62I79gv2YAwABBKQAGv9uAr8AARs3AAEbmwABHawAAtdMBasAARs5gA8AA/eQCAAABA8AARu7AAEdrAAAAAQEBwABG+AAACICWYAPAAEEQAABgA743AT4BSsAARwUBHsAARxm+RAEAASIcwABHNIDAAEcuwB73erZiAQABFsAAR0QutiO/YL9mAMAAQSsAIRbAAEdcgMAAR1bAHvd6tlbAAEE+AAa/3ICvwABHcMAAR4nAAEfhAAC11AFqwABHcWADwAD95AIAAAEDwABHl8AAR+EAAAABAQHAAEehAAAIgJZgA8AAQRAAAGADvjcBSsAAR7EBHsAAR76+RAEAARzAAEfKLrZjv2ABAAGAwABH2sAe+BIAv7wABr+8gK/AAEfmwABH68AASD8AALZjv2AAAAABA8AAR/rAAEg/AAAAAQEBwABIBAAAAICWYAPAAEEQAABgA8AA+tEBPgFKwABIEQEcwABIHoDAAEgYwB74fLZiAQABFsAASC4utiO/YL9mAMAAQSsGv92Ar8AASETAAEhdwABI5QAAtdUBasAASEVgA8AA/eQCAAABA8AASGXAAEjlAAAAAQEBwABIbwAACICWYAPAAEEQAABgA743AT4BSsAASHwBHsAASJC+RAEAASIcwABIq4DAAEilwB749LZkAQABFsAASL4utiO/YL9mAMAAQSoAIRbAAEjWgMAASNDAHvj0tlbAAEE+AAa/3oCvwABI6sAASQPAAElzAAC11gFqwABI62ADwAD95AIAAAEDwABJEcAASXMAAAABAQHAAEkbAAAIgJZgA8AAQRAAAGADvjcBPgFKwABJKAEewABJPL5EAQABHMAASU6AwABJSMAe+Yy2ZAEAARbAAElhLrYjv2C/ZgDAAEEqAAa/34CvwABJeMAASZHAAEoYAAC11wFqwABJeWADwAD95AIAAAEDwABJmsAAShgAAAABAQHAAEmkAAAIgJZgA8AAQRAAAGADvjcBPgFKwABJsQEewABJxb5EAQABIhzAAEnggMAASdrAHvoNtmUBAAEWwABJ8S62I79gv2YAwABBLAAhFsAASgmAwABKA8Ae+g22VsAAQT4ABr/ggK/AAEodwABKNsAASpAAALXYAWrAAEoeYAPAAP3kAgAAAQPAAEpFwABKkAAAAAEBAcAASk8AAAiAlmADwABBEAAAYAO+NwFKwABKXwEewABKbL5EAQABHMAASngutma/YAEAAYDAAEqJwB76pQC/vQAGv72Ar8AASpXAAEqawABK8AAAtma/YAAAAAEDwABKqsAASvAAAAABAQHAAEq0AAAAgJZgA8AAQRAAAGADwAD60QE+AUrAAErBARzAAErOgMAASsjAHvsPtmUBAAEWwABK3y62I79gv2YAwABBLAa/4YCvwABK9cAASw7AAEuWAAC12QFqwABK9mADwAD95AIAAAEDwABLFsAAS5YAAAABAQHAAEsgAAAIgJZgA8AAQRAAAGADvjcBPgFKwABLLQEewABLQb5EAQABIhzAAEtcgMAAS1bAHvuHtmABAAEWwABLby62I79gv2YAwABBLQAhFsAAS4eAwABLgcAe+4e2VsAAQT4ABr/igK/AAEubwABLtMAATCQAALXaAWrAAEucYAPAAP3kAgAAAQPAAEvCwABMJAAAAAEBAcAAS8wAAAiAlmADwABBEAAAYAO+NwE+AUrAAEvZAR7AAEvtvkQBAAEcwABL/4DAAEv5wB78H7ZgAQABFsAATBIutiO/YL9mAMAAQS0ABr/jgK/AAEwpwABMQsAATKAAALXbAWrAAEwqYAPAAP3kAgAAAQPAAExTwABMoAAAAAEBAcAATF0AAAiAlmADwABBEAAAYAO+NwFKwABMbQEewABMer5EAQABHMAATIYutme/YAEAAYDAAEyZwB78oAC/vgAGv76Ar8AATKXAAEyqwABNWQAAtme/YAAAAAEDwABMvMAATVkAAAABAQHAAEzGAAAAgJZgA8AAQRAAAGADwAD60QE+AUrAAEzTASIiIhzAAEzaLrZfv2ABAAGAwABM8MAe/QoAv7oBHMAATQIutmO/YAEAAYDAAE0SwB79CgC/vAEcwABNJC62Zr9gAQABgMAATTXAHv0KAL+9ARzAAE1HLrZXv2ABAAGAwABNT8Ae/QoAv7YGv+SAr8AATV7AAE1zwABNrAAAly4BasAATV9gA8AA/eQCAAABA8AATXjAAE2sAAAAAgICwABNggAACIHXYAPAAEEQAMAATY4AAAiCTmADwABBEAAAYAPAAEEQAUrAAE2UARzAAE2WgMAATZTAHv3Ily4CAAKBwABNnMAe/dgWwABNny62I79gv2YAwABBNga/5YCvwABNscAATcbAAE4TAACXLwFqwABNsmADwAD95AIAAAEDwABN0sAAThMAAAACAgLAAE3cAAAIgddgA8AAQRAAwABN6AAACIJOYAPAAEEQAABgA8AAQRABSsAATfQBHMAATfaAwABN9MAe/leXLwIAAoHAAE4DwB7+ZxbAAE4GLrYjv2C/ZgDAAEE4Br/mgK/AAE4YwABOMcAATpUA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SJ3AAEivAE7AAEnGwABJzwAAtqZgA8AA/JcBIxzAAEnYFsAASdIuhIPAAEBGYwEAARbAAEnggMAASdrAH2tlhIPAAEBGAMAA/cUcwABJ9xbAAEnxLoSDwABARoN8AQABHMAASgwcwABKBxbAAEoBgMAASfvAH2tlhIPAAEBGg3wBAAGUAMAA/K+BBgEAARzAAEoOlISSAAAAAMAA/LIAwAD8sADAAPyvHMAASigWwABKIoDAAEocwB9rZYSDwABARoN8AQABHMAASjccwABKMhbAAEosLoSDwABARoN8AQABlADAAPyvgQYBAAEcwABKOZSEkgAAAADAAPyyAMAA/LAAwAD8rwFgA8AA/JdJwABKQhzAAEpMFsAASkYuhIPAAEBGSAEAAYLAAEpPwB9ryADAAP27PgFKwABKYQEuScAASnkcwABKiRbAAEqDgMAASn3AH2tlhIPAAEBGSAEAAYLAAEqMwB9ryADAAP27PgFKwABKngGAwABKpcAfa2U+AUrAAEq/AR7AAErKwABASAMAAxbAAEriLpaDwABARYLAAErowB9ryIHAAErywB9rdQAGwABAZICywABLDcAASxbAAE5dAAC2tAAAAAEDwABLMMAATl0AAAACAgLAAEtFAAAAg9tgA8AAQD4AwABLWQAAAKUiYAPAAE2cAABgA8AAQRABPgVAIRzAAEt4FsAAS3MuloPAAEBFSAEAARbAAEuBgMAAS3vAH22cloPAAEBFAMAA/fHAAEtzwABLhQBAHMAAS64WwABLn4HAAEuTwB9trIfowABNqptGAgACFsAAS8GAwABLu8AfbZyWg8AAQEUWwABLxy6Wg8AAQEUAwABxd8AAS5PAAEvMAEnAAExCFsAATEYutb/AAEBxSsAATE8BHMAATFYutrUBAAGAwABMaMAfbZwAwABAZT9OwABNl8AATaAAALamYAPAAPyXARzAAE2uFsAATaiAwABNosAfbZyEg8AAQEaDfAEAARzAAE29HMAATbgWwABNsi6Eg8AAQEaDfAEAAZQAwAD8r4EGAQABHMAATb+UhJIAAAAAwAD8sgDAAPywAMAA/K9JwABNyBzAAE3YFsAATdKAwABNzMAfbZyEg8AAQEZIAQABgsAATdvAH25+AMAA/bs+AUrAAE3tAYDAAE30wB9tnD4BSsAATg4BHsAAThnAAEBIAwADFsAATjeAwABOMcAfbZyWg8AAQEWCwABOPcAfbn6BwABOR8AfbawABsAAQGWAssAATmLAAE5rwABPBQAAtrUAAAABA8AATnzAAE8FAAAAAQEBwABOigAAAIPbYAPAAEA+AABgA8AAQRABPgFKwABOlwEjIhbAAE6eLrZWwABAcgAWwABOsoDAAE6swB9vlbZWwABAch/AAE7LwABAgwAAAAAfwABO6sAAQIIAAAAAAWADwABBEAbAAEBmgLLAAE8KwABPG8AAVTsAALYTAWrAAE8LYAPAAP3kAgAAAQPAAE8hwABVOwAAAAMDA8AATy8AAACWUmADvTwAwABPPQAAAIC9YAPAAGjvAMAAT1AAAAClImADwABNnAAAYAPAAPrRAT4GTsAAT3LAAE+BAACzt2ADuKgBFsAAT4+CwABPg8AfcE2zt8AATaRAHMAAT7cWwABPsoDAAE+qwB9wL4C9vRhIAQABFsAAT7+BwABPusAfcD2BssAAaPMAwAD+jcAAT6rAAE/DAEnAAE/KFsAAT84ugVXAAEBuSsAAT9cBKj9JwABP6RbAAE/tLqhCwABAbz4BSsAAT/0BHMAAUBCCwABQBMAfcE22tgMAAxbAAFA3g8AAUCjAH3Bosb24/IHAAFBEwB9wPYDAAFBKwB9wLwDAAE29P07AAFBrwABQcQAAg9tgA70qARbAAFB7gMAAUHPAH3AvhQq9SknAAFCPHMAAUJmEwABQk8AfcTtIAQABFsAAUKuDwABQnMAfcGixvbj8AMAA/fE+AUrAAFDAARbAAFDHLrZWwABAcknAAFDeFsAAUOIutb/AAEBxPgFKwABQ8wEcwABRBoLAAFD6wB9wTba2AwADFsAAURMuloPAAEBFgcAAURnAH3A9gMAAUR/AH3AvAMAATb1JwABRNBbAAFE4LrabwABAej4BSsAAUUwBIiIcwABRX4LAAFFTwB9wTba2AwADFsAAUWwuloPAAEBFgcAAUXLAH3A9gMAAUXjAH3AvAMAATb0BHMAAUakWwABRmoLAAFGOwB9wTYfowABNqptGAgAChMAAUbbAH3E7FsAAUb0uloPAAEBFAMAAcXcBHMAAUdyCwABR0MAfcE22twIAAhbAAFH0LpaDwABARYTAAFH6wB9xOwDAAE24PgVAFsAAUhwuqs7AAEB7wABSHMAAUiUATsAAUjPAAFI6AACBdmADwAD60QEiIiIcwABSSILAAFI8wB9wTba2AwADFsAAUlUuloPAAEBFgcAAUlvAH3A9gMAAUmHAH3AvAMAATb0BHMAAUpIWwABSg4LAAFJ3wB9wTYfowABNqpsaAgAChMAAUp7AH3E7FsAAUqUuloPAAEBFAMAAcXgBHMAAUsSCwABSuMAfcE22uAIAAoTAAFLhwB9xOxbAAFLoLpaDwABARQDAAE27ARzAAFMHgsAAUvvAH3BNtrkCAAKEwABTLsAfcTsWwABTNS6Wg8AAQEUAwABNt0nAAFNChcAAU0bAH3LASsAAU04BKT9OwABT+cAAVAMAALa6XQPAAPz5AWADvSoBHMAAVBGCwABUBcAfcE22agEAARbAAFQdLpaDwABARQDAAE21SsAAVCoBHMAAVDuGwABUMcAfc7iB1gEAATTAAFQ/A8AAVD/AAFUwAAAAAQEBwABUQAAAAKloYAO9KgAAYAPAAPrRAUrAAFRfASIiHMAAVGuCwABUX8AfcE22tgMAA4fAAFR4wB90IYHAAFSKwB9wPYDAAFSQwB9wLwDAAE29ARzAAFTBFsAAVLKCwABUpsAfcE2H6MAATaqbRgIAAoTAAFTOwB9xO4fAAFTVwB90IQDAAHF3ARzAAFUAgsAAVPTAH3BNtrcCAAKHwABVGMAfdCGEwABVKsAfcTsAwABNuADAAP0OBsAAQGeAssAAVUDAAFVRwABXjQAAtfoBasAAVUFgA8AA/eQCAAABA8AAVWrAAFeNAAAAAgICwABVewAAAKU0YAPAAEvPAMAAVZwAAAilImADwABNnAAAYAPAAPrRAT4DScAAVgQWwABWCC62d8AAQHBKwABWFwEqP0nAAFcVIhbAAFcZLrW/wABAcQAWwABXKRbAAFckLpaDwABARYQfvS5KwABXNQEqP0rAAFdIARzAAFdbgcAAV0/AH3UetrsDAAMWwABXbS6Wg8AAQEWAwABXc8AfdQ4WwABXfS62mb9gwABAbQDAAE28BsAAQGiAssAAV5LAAFerwABb1wAAtf8BasAAV5NgA8AA/eQCAAABA8AAV73AAFvXAAAAAgICwABXxwAAAKU0YAPAAEvPAMAAV94AAAClImADwABNnAAAYAO9PAE+CEnAAFfxFsAAV/UutnfAAEBwSsAAWAQBKz9JwABYFRzAAFglgcAAWBnAH3YItrwCAAKAwABYOcAfdfguAMAATb9KwABYSgErP07AAFhywABYegAAh6BdA8AA/PkBYAO9PAEcwABYiIHAAFh8wB92CLTbAgACgMAAWJbAH3X4LgDAAE3BScAAWKshHMAAWL4WwABYt4LAAFivwB92aWHAAP0cSAEAAZQAwAD9u0rAAFjEASs/TsAAWOLAAFjpAACBdmADvTwBFsAAWPOCwABY68AfdmmDHsAA/R9OwABZCsAAWRQAAK5JYAO9KgEWwABZHYPAAFkWwB921IUKvUpJwABaLRbAAFoxLqrOwABAez4CScAAWnkcwABaiYHAAFp9wB92CLa9AgACFsAAWq4uloPAAEBFhMAAWrTAH3b6AMAATbo+AUrAAFrKAYPAAFrRwB921D9KwABa8QErPgJJwABbERzAAFswFsAAWyGBwABbFcAfdgiH6MAATaqbRgIAAhbAAFs9LpaDwABARYTAAFtDwB92+gDAAHF3PgFKwABbWQGDwABbYMAfdtQ/ScAAW3YcwABbhoHAAFt6wB92CLa+AgACFsAAW50uloPAAEBFhMAAW6PAH3b6AMAATblKwABbrwGDwABbtsAfdtQ/SsAAW8gBKwbAAEBpgLLAAFvcwABb9sAAXMoDAEgBasAAW91gA8AA/eQCAAABA8AAW/jAAFzKAAAAAQEBwABb/QAAAIPbWwAAYAPAAPrRAT4EScAAXAoewABcDsAA9ngCAAIugMAAXB7AH3hKAErAAFwmASk/ScAAXDchJcAAXEGAwABcO8AfeEpgA8AAQD5KwABcUwEqP07AAFxywABcfAAAtr9gA8AAQD4BJsAAXHIBgMAAXH7AH3hKYAPAAEA+SsAAXIkBIhzAAFyXFsAAXJEuhIPAAEBGSAEAARbAAFykgcAAXJrAH3imhIPAAEBGAMAA/bsAHMAAXLQWwABcry6Wg8AAQEVIAQABFsAAXMGBwABct8AfeKaWg8AAQEUAwAD98QbAAEB8gLLAAFzPwABc48AAXTUBAIPGAWrAAFzQYAPAAP3kAgAAAQPAAFzswABdNQAAAAAAAABgA8AA/JcBPgFKwABc8gEcwABdHCMcwABc/xbAAFz6LpaDwABARUgBAAErAMAA/fGTFsAAXRIWwABdDS6Wg8AAQEWDxsAA/fcBYAPAAPyXZAEAARzAAF0hNx+DjQEAARbAAF0pFsAAXSMuhIPAAEBGg8bAAP3cAMAA/b8AwAD9vQbAAEBqgLLAAF06wABdTcAAXrAAACMBasAAXTtgA8AA/eQCAAABA8AAXVXAAF6wAAAAAAAAAGADwAD+fgE+CEnAAF1eFsAAXWIutnfAAEBwSsAAXXEBIxbAAF14LrZWwABAcieEAye2wAFgA8AA/n4/TsAAXazAAF2zAACCj2ADwAD+yAEfwABducAA/ucAAAAAScAAXc0WwABd0S62VsAAQHI9HMAAXeSAwABd3cAfeluCjgEAASe2wQDAAP7cP0nAAF34FsAAXfwutb/AAEBxPRzAAF4MgMAAXgXAH3pbgo4BAAEntsIAwAD+3D9JwABeIRbAAF4lLrabwABAej0cwABeOIDAAF4xwB96W4KOAQABJ7bDAMAA/tw/ScAAXlAWwABeVC6qzsAAQHs9HMAAXmaAwABeX8AfeluCjgEAASe2xADAAP7cPz0cwABehIDAAF59wB96W4KOAQABFsAAXo8WwABeii6Wg8AAQEWAvb0YAMAA/txKwABemgEkwABerAMnmcaAwABepMAfelsnmccAAB8+MwAfQOUAH0I8AB9DJwAfQ6AAH0PtAB9EOQAfRJ0AH0UBAB9FXQAfRZQAH0XLAB9GAgAfRjkAH0ZwAB9GpwAfRt4AH0c4AB9HkgAfSAoAH0iPAB9JsAAfTDAAH06dAB9PDQAfUDYAH1DYAB9RqAAfUkoAH1LsAB9TTQAfU+oAH1TPAB9VYAAfWLcAH1qNAB9dJwAfXwUAH2XjAB9pBAAfazsAH21yAB9vawAfb/kAH3TYAB91wgAfeBUAH3kyAB956QAfe3wAAAAxAsAAQIiAs4FKgVmP0Qe2xQAAAWABwAD95AABYAHAAEEQAAEFwABAroCzgZ+Bn4GzAAAAA4GxgbMAAAAAAAAAYAPAAECIAT8BCQGBn8AA/foAAAAAIgbAAECKgLOBhIGRgZoBArZoAAAAAQOBmoGaAAAAAAAAAGADwABBEAAGwABAi4CzgbiBzYH1AQC2dwFqgblgA8AA/eQCAAABA4HbgfUAAAAAAAAAYAPAAPrRAUqB3gEWgegWgd4utmjAAECKtnfAAEFABsAAQIyAs4H5gg6CKgEAgVUBaoH6YAPAAP3kAgAAAQOCFoIqAAAAAAAAAGADwAD60QFKghkBFoIjFoIZLrZowABAioFVwABBPQbAAECNgLOCLoJDgmUBALZWAWqCL2ADwAD95AIAAAEDgk6CZQAAAAAAAABgA8AA+tEBSoJRARaCWxaCUS62aMAAQIq2VsAAQT4GwABAjoCzgmmCfoKYAQCoQgFqgmpgA8AA/eQCAAABA4KFgpgAAAAAAAAAYAPAAPrRAUqCiAEWgpIWgogutmjAAECKqELAAEE/BsAAQI+As4KcgrGCzQEAtb8BaoKdYAPAAP3kAgAAAQOCuYLNAAAAAAAAAGADwAD60QFKgrwBFoLGFoK8LrZowABAirW/wABBQQbAAECQgLOC0oLngvcBALaeAWqC02ADwAD95AIAAAEDgu+C9wAAAAAAAABgA8AA+tEBSoLyASoGwABAkYCzgvuDEIMkAQC13wFqgvxgA8AA/eQCAAABA4McgyQAAAAAAAAAYAPAAPrRAUqDHwEqBsAAQJKAs4Mogz2DSwEAoowBaoMpYAPAAP3kAgAAAQODQ4NLAAAAAAAAAGADwAD60QFKg0YBKgbAAECTgLODT4Nkg3IBAKzGAWqDUGADwAD95AIAAAEDg2qDcgAAAAAAAABgA8AA+tEBSoNtASoGwABAlICzg3aDi4OgAQC16wFqg3dgA8AA/eQCAAABA4OYg6AAAAAAAAAAYAPAAPrRAUqDmwEqBsAAQJWAs4Okg7mDyQEAtlkBaoOlYAPAAP3kAgAAAQODwYPJAAAAAAAAAGADwAD60QFKg8QBKgbAAECWgLODzYPig/YBALafAWqDzmADwAD95AIAAAEDg++D9gAAAAAAAABgA8AA+tEBSoPyASkGwABAmYCzg/uEDIR2AAC2bAFqg/xgA8AA/eQCAAABA4QUhHYAAAACAgKEHgAAAIPbYAPAAEEQAIQyAAAApSJgA8AATZwAAGADwAD60QE+AUqERQEchFYWhEwutmjAAECKtmwCAAKAhF/AH3/egYRmwB9/7ADAAEEwBsAAQJqAs4R7hIyE/gAAtmsBaoR8YAPAAP3kAgAAAQOEmIT+AAAAAgIChKIAAACD22ADwABBEACEtgAAAKUiYAPAAE2cAABgA8AA+tEBPgFKhMkBHITaFoTQLrZowABAirZrAgACgITnwB+AV4GE7sAfgGUAwABBMQbAAECbgLOFA4UUhXUAALZhAWqFBGADwAD95AIAAAEDhSOFdQAAAAEBAYUxAAAApSJgA8AATZwAAGADwAD60QE+AUqFRAEchVUWhUsutmjAAECKtmEBAAGAhWXAH4DQAMAAQSkGwABAnICzhXqFi4XyAAC2ZAFqhXtgA8AA/eQCAAABA4WdhfIAAAABAQGFqwAAAKUiYAPAAE2cAABgA8AA+tEBPgFKhb4BHIXPFoXFLrZowABAirZkAQABgIXiwB+BNADAAEEqBsAAQJ2As4X3hgiGaQAAtmIBaoX4YAPAAP3kAgAAAQOGF4ZpAAAAAQEBhiUAAAClImADwABNnAAAYAPAAPrRAT4BSoY4ARyGSRaGPy62aMAAQIq2YgEAAYCGWcAfgZgAwABBKwbAAECegLOGboZ/huIAALZlAWqGb2ADwAD95AIAAAEDho+G4gAAAAEBAYadAAAApSJgA8AATZwAAGADwAD60QE+AUqGsAEchsEWhrcutmjAAECKtmUBAAGAhtLAH4H8AMAAQSwGwABAn4CzhueG+IdfAAC2YAFqhuhgA8AA/eQCAAABA4cKh18AAAABAQGHGAAAAKUiYAPAAE2cAABgA8AA+tEBPgFKhysBHIc8FocyLrZowABAirZgAQABgIdPwB+CYADAAEEtBsAAQKCAs4dkh3WHvwAAtlEBaodlYAPAAP3kAgAAAQOHgYe/AAAAAQEBh44AAACZ+mADvSoAAGADwAD60QE+AUqHmQEch6oWh6AutmjAAECKtlEBAAGAh7fAH4LEAMAAQS4GwABAoYCzh8SH1YhAAAC2SgFqh8VgA8AA/eQCAAABA4feiEAAAAACAgKH6wAAAJn6YAO9KgCH/QAAAKUiYAPAAE2cAABgA8AA+tEBPgFKiBABHIghFogXLrZowABAirZKAgACgIgrwB+DJoGIMMAfgzIAwABBMgbAAECigLOIRYhWiL8AAIMcAWqIRmADwAD95AIAAAEDiF6IvwAAAAICAohrAAAAmfpgA70qAIh9AAAApSJgA8AATZwAAGADwAD60QE+AUqIkAEciKEWiJcutmjAAECKgxwCAAKAiKrAH4OdgYivwB+DqQDAAEEzBsAAQKOAs4jEiNWJLgAAhAcBaojFYAPAAP3kAgAAAQOI4IkuAAAAAQEBiO4AAAClImADwABNnAAAYAPAAPrRAT4BSokBARyJEhaJCC62aMAAQIqEBwEAAYCJHsAfhBQAwABBNAbAAECkgLOJM4lLiaQAALZYAWqJNGADwAD95AIAAAEDiVaJpAAAAAEBAYlkAAAApSJgA8AATZwAAGADvSoBPgFKiXcBHImIFol+LrZowABAirZYAQABgImUwB+EeADAAEE1BsAAQKWAs4mpib6LBAAAly4BaomqYAPAAP3kAgAAAQOJw4sEAAAAAgICicQAAACD22ADwABBEACJ2AAAAKUiYAPAAE2cAABgA8AAQRABPgJJiescifQuSAEAAYCJ98AfhNoAwABArD4BSooGAS5Jih4ciiIutnUBAAGAijbAH4TaAMAAQKs+AUqKRgEjFopTgIpNwB+E2rZWwABBPoCKYMAfhNouAWADwABBEEmKeRaKg4CKfcAfhNq2d8AAQUA+AUqKmgEjFoqngIqhwB+E2rZWwABBPhyKuS6GeAAAAADAAEEnLgFgA8AAQRA/SorWARyK5xaK3S62aMAAQIqXLgIAAoCK7cAfhNqBivTAH4ToAMAAQTYGwABApoCziwmLGouIAAC2VQFqiwpgA8AA/eQCAAABA4ski4gAAAACAgKLLgAAAIPbYAPAAEEQAItCAAAApSJgA8AATZwAAGADwAD60QE+AUqLVQEci2YWi1wutmjAAECKtlUCAAKAi3HAH4XwgYt4wB+F/gDAAEE3BsAAQKeAs4uNi6KMFAAAly8BaouOYAPAAP3kAgAAAQOLrowUAAAAAgICi7gAAACD22ADwABBEACLzAAAAKUiYAPAAE2cAABgA8AAQRABPgFKi98BHIvwFovmLrZowABAipcvAgACgIv9wB+GaYGMBMAfhncAwABBOAbAAECogLOMGYwqjM0AALX6AWqMGmADwAD95AIAAAEDjEOMzQAAAAICAoxUAAAApTRgA8AAS88AjHUAAAilImADwABNnAAAYAPAAPrRAT4BSoyIARyMmRaMjy62aMAAQIq1+gIAAoCMs8AfhuKBjL3AH4bwAMAAQToGwABAqYCzjNKM441iAAC2EwFqjNNgA8AA/eQCAAABA4zpjWIAAAADAwOM9wAAAJZSYAO9PACNBQAAAIC9YAPAAGjvAI0YAAAApSJgA8AATZwAAGADwAD60QE+AUqNKwEcjTwWjTIutmjAAECKthMDAAOAjUPAH4dbgY1MwB+HZ4KNUsAfh3UAwABBOQbAAECqgLONZ42AjgQAALX/AWqNaGADwAD95AIAAAEDjZKOBAAAAAICAo2cAAAApTRgA8AAS88AjbMAAAClImADwABNnAAAYAO9PAE+AUqNxgEcjdcWjc0utmjAAECKtf8CAAKAjerAH4fngY30wB+H9QDAAEE7BsAAQKuAs44Jjg6PAwAAtnUAAAABA44hjwMAAAABAQGOIgAAAIPbWwAAYAPAAPrRAT4CSY4vISWOOYCOM8AfiFRgA8AAQIhKjlEBKj9JjmMWjnEWjmcutmjAAECKtlbAAEE+PgFKjoUBHI6WFo6MLrZowABAikgBAAEcjqkWjp+AjpnAH4hUtmgAhngAAAAAAADAAEEvPgFKjsgBHI7ZFo7PLrZowABAikgBAAEcjuwWjuKAjtzAH4hUtmgAhnkAAAAAAADAAEEvBsAAQKyAs48IjyKPeQMASAFqjwlgA8AA/eQCAAABA48kj3kAAAABAQGPJQAAAIPbWwAAYAPAAPrRAT4BSo8yASIcjzkutnUBAAGAj03AH4kmAMAAQKsAHI9iFo9XLrZWwABAjUgBAAEWj2uAj2XAH4kmtlYAAMAA/fEGwABAl4Czj36Pko/PAQCDxgFqj39gA8AA/eQCAAABA4+bj88AAAAAAAAAYAPAAPyXAUqPngEwj54ntsYAAB98ngAffMYAH30PAB99WAAffaEAH33qAB9+MwAffmoAH36hAB9+2AAffw8AH39GAB9/fQAff7QAH4AtAB+ApgAfgQoAH4FuAB+B0gAfgjYAH4KaAB+C/AAfg3MAH4PqAB+ETgAfhLAAH4XGAB+GPwAfhrgAH4cxAB+HvQAfiDQAH4j9AB+JdwAfibMAAAAiAsAAQK+As4/Uj+OQwQe2xwAAAWABwABAiAAAAAEFwABAtAAAAAAEAAADAAAAAAAAAAAAYAPAAECvAT8BCQEAwABArgAAAAACBsAAQLGAs5BKkFaQZAECteIAAAABA5BkkGQAAAAAAAAAYAOCSwAGwABAsoCzkJ2QrpC/AQK14wAAAAEDkL+QvwAAAAAAAABgA708AAAAH4qMAB+KsgAfitgAAAACAsAAQLWAtIHFgcuUPwO2yAAAAWABwABArwAABgTAAEC3gLSCbIKBBoPsAGADwAD+fgFqgnJgA8AA/n7AAPW+BMAAQLiAtIKhgqoJtmgBaoKHYAPAAP3kAmADwABBEAAEwABAuYC0gsmC1wm14gFqgrBgA8AA/eQCYAOCSwAEwABAuoC0gvuDDAm14wFqgt1gA8AA/eQCYAO9PAAEwABAu4C0g0GDSgmF3QBgA8AAQRAABMAAQLyAtIN9g4QJhdwAYAPAAEEQAAEFwABAzoC0g4mDiYP1AAAAA4OUg/UAAAAFBQWDmgAABLZoYAPAAEEQAIOqAAAEteJgA4JLAIO/AAAEteNgA708AIPdAAAEhdxgA8AAQRAAg+sAAASF3WADwABBEAAAYAPAAEC1AT8GCAHAAEC4gADAH4vMCAHAAEC5gQDAH4vaCAHAAEC6ggDAH4vmCAHAAEC8gwDAH4vyCAHAAEC7hADAH4wACQGDicAAQLQAAAAADQbAAEC+gLSEM4Q7ho4EAa9zAAAAAQOEWYaOAAAAAgIChGwAAACDSmADwABdsQCEgQAAAKUiYAPAAE2cAABgA8AAQLUBPgg9HISbgISUwB+MgYKYAQABaoShYAPAAP5+wAD1vgDAAF2zToS0hL4AALZoYAPAAEEQAR6ExMAAQSECAAKAhODAH4yBgYTowB+MjwBOhQaFFQAAteJgA4JSARyFHoCFF8AfjIG2cAAAAADAAF3SToVFhVcAALXjYAO9PAEchWCAhVnAH4yBtnEAAAAAwABd6U6FgYWJAACF3GADwABBEAEehY/AAEEhAgACgIWrwB+MgYGFs8AfjI8AToXOhdgAAIXdYAPAAEEQAR6F3sAAQSECAAKAhfrAH4yBgYYCwB+MjwA9HIYbgIYUwB+MgYKQAQABaoYfYAPAAP5+wAD1vgDAAF20SoYpAR+GNMAAQM4FAAWChknAH4zKg4ZUwB+M84SGZMAfjRWFhnfAH403hoaAwB+NYAAGwABAwIC0hsKG04gOAACvdAFqhsNgA8AA/eQCAAABA4biiA4AAAABAQGG7AAAAIRAYAPAAF1iAABcAT4IPRyG/YCG+MAfjgawGwEAAWqHFGADwABA/8AA9cQAwABdcz0chyOAhx7AH44GgpgBAAFqhylgA8AA/n7AAPW+AMAAXWc9HIc9FoczLrZowABAuK90AQABgIdNwB+OBgDAAEEjPRyHXYCHWMAfjga2cwEAASaHcQEWh3EuteLAAEC5YAOCUgDAAF1/PRyHi4CHhsAfjga2dAEAASaHnQEWh50utePAAEC6YAPAAI7uAMAAXZY9HIe9Foe1LoXcwABAvK90AQABgIfNwB+OBgDAAEEjPRyH4haH2C6F3cAAQLuvdAEAAYCH8sAfjgYAwABBIz0ciAKAh/3AH44GgpABAAFqiAZgA8AA/n7AAPW+AMAAXWgGwABAwYC0iBOIKIjQAACGeAFqiBRgA8AA/eQCAAABA4gwiNAAAAAAAAAAYAPAAEEQAT4BSog5ASMWiEAutlbAAECNLh+IaMAAQM4FAAUciH4WiHQutmjAAEC4hngAAAAAwABBJxaIii614sAAQLkWiKYutePAAEC6Foi5LoXcwABAvBaIwi6F3cAAQLsAAWADwABAtQbAAEDCgLSI1YjqiZgAAIZ5AWqI1mADwAD95AIAAAEDiPWJmAAAAAAAAABgA8AAQRABPgFKiP4BIxaJBS62VsAAQI0fiR7AAEDOBQAFHIk0FokqLrZowABAuIZ5AAAAAMAAQSgWiUMuteLAAEC5FolfLrXjwABAuhaJci6F3MAAQLwWiXsuhd3AAEC7AC4BYAPAAEC1BsAAQMmAtImdibKJxgEAtd8BaomeYAPAAP3kAgAAAQOJvonGAAAAAAAAAGADwAD60QFKicEBKgbAAEDKgLSJyonfiewBAKzGAWqJy2ADwAD95AIAAAEDieWJ7AAAAAAAAABgA8AA+tEBSonoASkGwABAy4C0ifCKBYoUAQC1vwFqifFgA8AA/eQCAAABA4oNihQAAAAAAAAAYAPAAPrRAUqKEAEpBsAAQMOAtIoZiiqLIQAAtnUBaooaYAPAAP3kAgAAAQOKPYshAAAAAQEBij4AAACD21sAAGADwAD60QE+AkmKSyElilWAik/AH5ElYAPAAEC1SopmASo/Sop4ASIiIh2KhbZ1AQABgIqZwB+RJQDAAECrAByKuhaKqy614sAAQLlIAQABForDgIq9wB+RJbXiAADAAP3xAByK5RaK3S6F3MAAQLxIAQABForugIrowB+RJYXcAADAAEEvAByLCxaLAS6F3cAAQLtIAQABFosUgIsOwB+RJYXdAADAAEEvBsAAQMSAtIsmizuMVAAAly8BaosnYAPAAP3kAgAAAQOLR4xUAAAAAgICi1EAAACD22ADwABBEACLZQAAAKUiYAPAAE2cAABgA8AAQRABPgNOi4GLlQAAtnZgA8AAQRABHIuhFouXLrZowABAuJcvAgACgIuuwB+SA4GLtcAfkhEAwABBOEmLxxaL34KLy8Afkiq2d8AAQUBKi+4Bgov1wB+SKj9KjA4BIxaMKYKMFcAfkiq2VsAAQT4cjDYuhngAAAAAwABAwRyMQy6GeQAAAADAAEDCAWADwABBEAbAAEDFgLSMWYxukxYAAJcuAWqMWmADwAD95AIAAAEDjHOTFgAAAAICAox8AAAAg9tbAIyQAAAApSJgA8AATZwAAGADwABBEAE+AUmMoxyMrC5IAQABgIyvwB+S3wDAAEDGPgFKjL4BLkmM1hyM2i62dQEAAYCM7sAfkt8AwABAwz4BSoz+ASaM/gEjJo0LARaNC4CNBcAfkt+2VgBgA8AA+tGAjRjAH5LfLgFbYAPAAEEQSY0xJo07ARaNO4CNNcAfkt+2dwBgA8AA+tE+AUqNUgEjJo1fARaNX4CNWcAfkt+2VgBgA8AA+tEcjXEuhngAAAAAwABAwS4BYAPAAEEQSY2PIiIiIiaNmQEWjZmAjZPAH5LfrMYAYAPAAPrRACEcjbIWjaouhdzAAEC8SAEAASsAwABBLwAhHI3TFo3LgI3FwB+S34XcAEgBAAErAMAA/fEAIRyN8BaN5i6F3cAAQLtIAQABKwDAAEEvACEcjhMWjgmAjgPAH5Lfhd0ASAEAASsAwAD98T4ETo4tjjgAALaCYAPAAEEQARyOQhaOOi6F3MAAQLyXLgIAAiaOTgEWjk6AjkjAH5LfhdwAYAPAAEEQgY5XwB+S6ADAAEE2To50joEAALaDYAPAAEEQARyOjRaOgy6F3cAAQLuXLgIAAiaOmQEWjpmAjpPAH5Lfhd0AYAPAAEEQgY6kwB+S6ADAAEE2To7Bjs4AALZ5YAPAAEEQARyO2haO0C62aMAAQLiXLgIAAiaO5gEWjuaAjuDAH5LftmgAYAPAAEEQgY7xwB+S6ADAAEE2So8FAR+PEMAAQM4FAAWEjyfAH5TLKyuCj0HAH5RBg49NwB+UhgBJj2cmj3EBFo9xgI9rwB+S37XrAGADwAD60T4GQByQDBaQBICP/sAfkt+F3ABIAQABHpAdwABBHAIAAhaQXRaQToGQQsAfkuizt8AATaSxuLj3gZBswB+S6AAAwAD98Y/+kHgATpCKkJUAALaCYAPAAEEQARyQnxaQly6F3MAAQLyXLgIAAiaQqwEWkKuAkKXAH5LfhdwAYAPAAEEQgZC0wB+S6ADAAEE2TpDRkN4AALaDYAPAAEEQASaQ0QEckP8WkPgWkPCAkOrAH5LftoAAKQCDXwIAAhaRBC6F3MAAQLw0kQ0DkQ2RLgAAAAICApEOAAAAgNRbAJERAAAAg6hbAABbAUqRFwEckRmDkRfAH5Ykly4CAAKEkR/AH5YtgZEiwB+S6AAAAABgA8AAQRBOkUCRTQAAtnlgA8AAQRABHJFZFpFPLrZowABAuJcuAgACJpFlARaRZYCRX8Afkt+2aABgA8AAQRCBkXDAH5LoAMAAQTZOkZCRnwAAtstgA8AAQLUBH5GlwABAzgUABYSRvMAflmUjHJHjFpHULrXiwABAuUgBAAEWkeyAkebAH5LfteIAAMAA/fEWkf0uteLAAEC5KwFgA4JLIxySMBaSHi6148AAQLpIAQABFpI5gJIzwB+S37XjAADAAP3xFpJbLrXjwABAuisBYAO9PIKSjcAflZqDkqPAH5XfAEqSuAGFkr/AH5aqPgFKkuIBHJLzFpLpLrZowABAuJcuAgACJpL5AYCS+cAfkt9gA8AAQRCBkwDAH5LoAMAAQTYGwABAxoC0kxuTNZNQAwBIAWqTHGADwAD95AIAAAEDkzeTUAAAAAEBAZM4AAAAg9tbAABgA8AA+tEBSpNCAR2TSEgBAAGAk0vAH5eqAMAAQKwGwABAzIC0k1WTaZPWAQCDxgFqk1ZgA8AA/eQCAAABA5Nyk9YAAAAAAAAAYAPAAPyXAT4BSpN4AR6Tf4HoBQAFFpOYLrXiwABAuRaTqC62VsAAQI0Wk7QuhdzAAEC8FpO9LoXdwABAuxaTyC62aMAAQLgABsAAQMeAtJPbk+6UPQAAIwFqk9xgA8AA/eQCAAABA5P2lD0AAAAAAAAAYAPAAP5+AT4BSpP/ASSUOQcntswWlAwutmjAAEC4J7aFFpQdLoXcwABAvCeusBaULi6F3cAAQLsngyYAAB+MYQAfjdwAH48sAB+PwQAfkFYAH5CNAB+QxAAfkPsAH5HZAB+StQAfl4EAH5fSAB+YRQAfmKoAAAANAsAAQM+AtYHBgceO3QO2zQAAAWABwABArwAABQTAAEDRgLWCaIJ9BoPsAGADwAD+fgFqgm5gA8AA/n7AAPXZBMAAQNKAtYKdgqYJtmgBaoKDYAPAAP3kAmADwABBEAAEwABA04C1gsWC0wm14gFqgqxgA8AA/eQCYAOCSwAEwABA1IC1gveDCAm14wFqgtlgA8AA/eQCYAO9PAAEwABA1YC1gz+DSgmbDABgA8AAQRAAAQXAAEDmgLWDT4NPg68AAAADg1qDrwAAAAQEBINgAAAEtmhgA8AAQRAAg3AAAAS14mADgksAg4UAAAS142ADvTwAg6MAAASbDGADwABBEAAAYAPAAEDPAT8FCAHAAEDSgADAH5m0CAHAAEDTgQDAH5nCCAHAAEDUggDAH5nOCAHAAEDVgwDAH5naCQGDT8AAQLQAAAAADAbAAEDXgLWD7YP1hfYEAa9zAAAAAQOEE4X2AAAAAgIChCYAAACDSmADwABdsQCEOwAAAKUiYAPAAE2cAABgA8AAQM8BPgc9HIRVgIROwB+aT4KYAQABaoRbYAPAAP5+wAD12QDAAF2zToRuhHgAALZoYAPAAEEQAR6EfsAAQSECAAKAhJrAH5pPgYSiwB+aXQBOhMCEzwAAteJgA4JSARyE2ICE0cAfmk+2cAAAAADAAF3SToT/hREAALXjYAO9PAEchRqAhRPAH5pPtnEAAAAAwABd6U6FO4VHAACbDGADwABBEAEehU3AAEEhAgACgIVpwB+aT4GFccAfml0APRyFioCFg8Afmk+CkAEAAWqFjmADwAD+fsAA9dkAwABdtEqFmAEfhaPAAEDmBAAEgoW4wB+amIOFw8AfmsGEhdPAH5rjhYXmwB+bBQAGwABA2YC1hiqGO4dVAACvdAFqhitgA8AA/eQCAAABA4ZKh1UAAAABAQGGVAAAAIRAYAPAAF1iAABcAT4HPRyGZYCGYMAfm6SwGwEAAWqGfGADwABA/8AA9d8AwABdcz0chouAhobAH5ukgpgBAAFqhpFgA8AA/n7AAPXZAMAAXWc9HIalFoabLrZowABA0q90AQABgIa1wB+bpADAAEEjPRyGxYCGwMAfm6S2cwEAASaG2QEWhtkuteLAAEDTYAOCUgDAAF1/PRyG84CG7sAfm6S2dAEAASaHBQEWhwUutePAAEDUYAPAAI7uAMAAXZY9HIcpFocdLpsMwABA1a90AQABgIc5wB+bpADAAEEjPRyHSYCHRMAfm6SCkAEAAWqHTWADwAD+fsAA9dkAwABdaAbAAEDagLWHWodvh/0AAIZ4AWqHW2ADwAD95AIAAAEDh3eH/QAAAAAAAABgA8AAQRABSod9ASMWh30utlbAAECNLh+HocAAQOYEAAQch8IWh7gutmjAAEDShngAAAAAwABBJxaHzi614sAAQNMWh94utePAAEDUFofxLpsMwABA1QABYAPAAEDPBsAAQNuAtYgCiBeIqgAAhnkBaogDYAPAAP3kAgAAAQOIIoiqAAAAAAAAAGADwABBEAFKiCgBIxaIKC62VsAAQI0fiD/AAEDmBAAEHIhVFohLLrZowABA0oZ5AAAAAMAAQSgWiGQuteLAAEDTFoh+LrXjwABA1BaIkS6bDMAAQNUALgFgA8AAQM8GwABA4oC1iK+IxIjRAQCijAFqiLBgA8AA/eQCAAABA4jKiNEAAAAAAAAAYAPAAPrRAUqIzQEpBsAAQOOAtYjWiOuI+gEAtb8BaojXYAPAAP3kAgAAAQOI84j6AAAAAAAAAGADwAD60QFKiPYBKQbAAEDcgLWI/4kQiecAALZ1AWqJAGADwAD95AIAAAEDiSOJ5wAAAAEBAYkkAAAAg9tbAABgA8AA+tEBPgJJiTEhJYk7gIk1wB+eVWADwABAz0qJTAEqP0qJXgEiIh2Ja7Z1AQABgIl/wB+eVQDAAECrAByJoBaJkS614sAAQNNIAQABFompgImjwB+eVbXiAADAAP3xAByJzxaJwy6bDMAAQNVIAQABFonYgInSwB+eVZsMAADAAEEvBsAAQN2AtYnsigGLGgAAly8BaontYAPAAP3kAgAAAQOKDYsaAAAAAgICihcAAACD22ADwABBEACKKwAAAKUiYAPAAE2cAABgA8AAQRABPgNOikeKWwAAtnZgA8AAQRABHIpnFopdLrZowABA0pcvAgACgIp0wB+fDoGKe8AfnxwAwABBOEmKjRaKpYKKkcAfnzW2d8AAQUBKirQBgoq7wB+fNT9KitQBIxaK74KK28AfnzW2VsAAQT4civwuhngAAAAAwABA2hyLCS6GeQAAAADAAEDbAWADwABBEAbAAEDegLWLH4s0jeUAAJcuAWqLIGADwAD95AIAAAEDizmN5QAAAAICAotCAAAAg9tbAItWAAAApSJgA8AATZwAAGADwABBEAE+AUmLaRyLci5IAQABgIt1wB+f6gDAAEDfPgFKi4QBLkmLnByLoC62dQEAAYCLtMAfn+oAwABA3D4BSovEASaLxAEjJovRARaL0YCLy8Afn+q2VgBgA8AA+tGAi97AH5/qLgFbYAPAAEEQSYv3JowBARaMAYCL+8Afn+q2dwBgA8AA+tE+AUqMGAEjJowlARaMJYCMH8Afn+q2VgBgA8AA+tEcjDcuhngAAAAAwABA2i4BYAPAAEEQSYxVIiImjF8BFoxfgIxZwB+f6qKMAGADwAD60QAhHIx8FoxwLpsMwABA1UgBAAErAMAAQS8AIRyMoRaMlYCMj8Afn+qbDABIAQABKwDAAP3xPgNOjLuMygAAtnhgA8AAQRABHIziFozWLpsMwABA1ZcuAgACJozuARaM7oCM6MAfn+qbDABgA8AAQRCBjPvAH5/zAMAAQTZOjRiNJQAAtnlgA8AAQRABHI0xFo0nLrZowABA0pcuAgACJo09ARaNPYCNN8Afn+q2aABgA8AAQRCBjUjAH5/zAMAAQTZKjVwBH41nwABA5gQABIONc8AfoVorK4KNjcAfoRUAPgFKjbEBHI3CFo24LrZowABA0pcuAgACJo3IAYCNyMAfn+pgA8AAQRCBjc/AH5/zAMAAQTYGwABA34C1jeqOBI4fAwBIAWqN62ADwAD95AIAAAEDjgaOHwAAAAEBAY4HAAAAg9tbAABgA8AA+tEBSo4RAR2OF0gBAAGAjhrAH6IbAMAAQKwGwABA5IC1jiSOOI6NAQCDxgFqjiVgA8AA/eQCAAABA45Bjo0AAAAAAAAAYAPAAPyXAUqOSgEejkqB6AQABBaOWi614sAAQNMWjmoutlbAAECNFo52LpsMwABA1RaOgy62aMAAQNIABsAAQOCAtY6SjqWO2wAAIwFqjpNgA8AA/eQCAAABA46tjtsAAAAAAAAAYAPAAP5+AUqOswEkjtsFJ7bQFo65LrZowABA0ie2exaOzi6bDMAAQNUngyYAAB+aLwAfm3oAH5yrAB+dNAAfnb0AH530AB+eKwAfnuQAH5/AAB+h8gAfokMAH6KqAB+jAAAAAAwCwABA54C2gZqBoIZmA7bRAAABYAHAAG/nAAACBMAAQOmAtoHjgfAYttIAYAPAAPrRASoEwABA64C2ggKCCBi2079gAF0DwAD+LwFgA8AAQRABKwEFwABA8gAAAAAEAAADAAAAAAAAAAAAYAPAAEDnAT8BCQEAwABv6wAAAAAEBsAAQO2AtoINgh6DFgAAthMBaoIOYAPAAP3kAgAAAQOCJIMWAAAAAwMDgjIAAACWUmADvTwAgkAAAACAvWADwABo7wCCUwAACLYPYAPAAE2cAABgA8AA+tEBPgRJgmAWgmQuttLAAEDpSoJrASk/SYJ8HIKHFoKALrbTv2DAAEDrSAEAASsAwAD98UqCkAEqP0aCooLAgrAAAACtLGADwABBEAAWgrguttO/YMAAQOs+AUmCyByC0YOCzMAfpE62EwMAA4CC2MAfo+KBguHAH6PugoLnwB+j/ADAAEE5SoLvASk/SoMGASoGwABA7oC2gxuDLIS8AAC1+gFqgxxgA8AA/eQCAAABA4NFhLwAAAACAgKDTwAAAKU0YAPAAEvPAINmAAAItg9gA8AATZwAAGADwAD60QE+A0mDcxaDdy620sAAQOk+Ak6Dj4OUAACtLGADwABBEAEeg6TAAEEZAgACFoPLFoO8gYO2wB+k2bO3wABNpJr/uKqBg9jAH6TZAEqD5gEcg/KCg+3AH6UBtfoCAAKAhAzAH6TLgYQWwB+k2QDAAEE6P0aEKIRGhDYAAACtLGADwABBEAAWhD4uttO/YMAAQOs+AUmEThyEV4KEUsAfpWW1+gIAAoCEccAfpMuBhHvAH6TZAMAAQTo+AUqEjQEpP0qErAEqBsAAQO+AtoTBhNKFswAAthIBaoTCYAPAAP3kAgAAAQOE54WzAAAAAQEBhPEAAAitLGADwABBEAAAYAPAAPrRAT4ESYT9FoUBLrbSwABA6UqFCAEqP0mFGhyFI4CFHsAfpd1IAQABKwDAAEEvPgM9F4U0LrbSKcAAQOk9F4VILrbTv2ArwABA60qFXQEpPz0jHIV7FoV0LrbTv2DAAEDrSAEAASsAwAD98ReFdC62079gHoWDwADBpgABYAPAAEEQAADAAEDrKwFdA8AA/i8BYAPAAEEQSoWYARyFphaFny62079gwABA61YBAAGAharAH6XdAMAA/jwGwABA8IC2hbiFy4ZkAAAjAWqFuWADwAD95AIAAAEDhdOGZAAAAAAAAABgA8AA/n4BPgFJhdwWheAuttLAAEDpPgFKhe8BJ7bUSYYKIRyGFRaGDi62079gwABA60gBAAErAMAA/fE+AUqGJgEkhjYBFoYvLrbTv2DAAEDrPgFKhksBJ7bVAAAfo7gAH6ShAB+lswAfpqsAH6cwAAAABALAAEDzgLaGaYZvh60DpN8AAAFgAcAA/eQAAWABvksAAQXAAED4gLaGpYarhr0BAAADhruGvQAAAAAAAABgA8AAQPMBPwEJAYarwAD9+gAAAAACBsAAQPWAtobChuKHNgAAtZkBaobDYAPAAP3kAgAAAQOG7oc2AAAAAQEBhvwAAAClImADwABNnAAAYAO+XAE+AUqHDwEfhxrAAEAMAQABgIcmwB+nxgAGwABA9oC2hzuHY4erAAC1mgFqhzxgA8AA/eQCAAABA4d5h6sAAAAAAAAAYAPAAG/sAT4BSoeCAR+HjcAAQP4AAAAAAAAfp5wAH6fyAB+oNQAAAAICwABA+YC2h7CHtopGA7bWAAABYAHAAP3kAAFgAcAAb+wAAQXAAED+gLaH+ogAiBoBAAADiBiIGgAAAAAAAABgA8AAQPkBPwEJAYgAwAD9+gAAAAACBsAAQPuAtogfiEeI8gAAtgwBaoggYAPAAP3kAgAAAQOIYIjyAAAAAgICiHEAAAClNGADwABLzwCIggAAALYNYAPAAP3kAABgA8AAb+cBPgFKiJsBNYimAAABAGADwABA5wEfiKbAAEDyAAAAADUAAAABAFsBHIjGgojEwB+o8LYSAQABJojcAYGI3MAfqNNgA8AAQRAAwABA74IAwB+o8AbAAED8gLaI94kIikQAALYOAWqI+GADwAD95AIAAAEDiRaKRAAAAAMDA4kiAAAAr7xgA8AAZ+UAiTsAAACCamADvTwAiWAAAAi2D2ADwABNnAAAYAPAAPrRAT4DTol2iX8AAKU0YAPAAEvPARaJjICJgcAfqWWlNMAAZ+hOiaOJqAAArSxgA8AAQRABJomjARaJtYCJqsAfqWW0y8AAZ+lgA8AAQRBKic0BIhyJ3YOJ1MAfqZi2EAEAAYGJ7MAfqXMAwABL7AAiHIoFhIoAwB+puEgBAAErAMAAQS8BHIoVhIoQwB+puLYTAwADgYocwB+pcxaKLYOKJMAfqZinccAAS9OCijnAH6l/AMAAQTkAAB+omwAfqTsAH6pKAAAAAgLAAED/gLaKj4qUiuYLttcAAAFgAcAA/eQAAAoEwABBAYC2ipSKlAknAGADwAD8lwAEwABBA4C2ipSKlAkov2AAYAPAAP5+AATAAEEEgLaKlIqUBikAXQPAAP07AWADwABA/wFqAF0DwAD9OwFgA8AAQP/AAPYiBMAAQQWAtoqliqUGttoAYAPAAED/AWoAYAPAAED/wAD0qQTAAEEGgLaKrYqtBpcuAGADwABA/wFqAGADwABA/8AA9fYEwABBB4C2iraKtga22wBgA8AAQP8BagBgA8AAQP/AAPR0BMAAQQiAtorDisMGl1AAYAPAAED/AWoAYAPAAED/wAD13wTAAEEJgLaKyorKBoCrAGADwABA/wFqAGADwABA/8AA9cQEwABBCoC2itGK0Qa23ABgA8AAQP8BagBgA8AAQP/AAPSOBMAAQQuAtorfit8GgJYAYAPAAED/AWoAYAPAAED/wAD2DQEFwABBD4C2ipSKlIrmAQAAA4qUiuYAAAACAgKKlAAABCdgA8AA/JcAipQAAAQoYAPAAP5+AABgA8AAQP8BPwMIAMAAQQGAAMAfq9wIAMAAQQOBAMAfq+kJAADAAP36AAAAAAEGwABBDYC2ipSKlIrmAAAjAAAAAQOKlIrmAAAAAAAAAGADwAD+fgFKAAEPAC7AAEEDAAAfrCQAH6xVAAAAAQLAAEEQgLaLqYu4uVkHtt0AAAFgAcAA/eQAAWABvlEBBMAAQROAtou4AASWdL9gAFsBMQBbAhoAwABBFhoAwABBGwAyBsAAQRWAtovei+aMqQQBAAAAAAEDi+6MqQAAAAQEBIwCAAAAloNgA70qAIwMAAAAgmtgA8AA/JcAjBcAAAC2VmADwAD60QCMMAAAAKUiYAPAAE2cAABgA8AAQRABPgFKjEMBHoxOwABASAMAA4CMb8AfrMUcjIEcjHuBjHbAH6zRg78BAAGUAMAA/LOBBgEAASOCjITAH6zflJMBYAPAAPyXAMAA/LCDjJnAH6ztAAbAAEEWgLaMroy8jOEESYWuAAAAAQOMyozhAAAAAAAAAGADwABBEAE9NQAAAACCcVsBGgDAAECDEwAABsAAQReAtozmjO6OZAQBrhYAAAABA4z8jmQAAAACAgKNCQAAAJaDYAO9KgCNHAAAAKUiYAPAAE2cAABgA8AAQRABPgJAHI1aFo1LgY0/wB+tvIfowABNqqpuAQABgI1pwB+tsADAAHFyjT+NbgEejXi2HwIAAjUAAAABAGADvSoBgI2OwB+tsCMcjZOCAMAfrgdIAQABKwAAao2WYAO2McAAxmmCAMAfrgcBYAO2MSQABSe23iepRoCOBcAfrbAntt8cjikWjhqBjg7AH628h+jAAE2qtBABAAGAji7AH62wAMAAcYoASo49AR+OSMAAQH8BAAGAjlvAH62wAAbAAEEYgLaOaY5xjz4EAbbgAAAAAQOOho8+AAAAAgICjpMAAACWg2ADvSoAjqYAAAClImADwABNnAAAYAPAAEEQAT4CSY65HI7YFo7JgY69wB+uuYfowABNqqpuAQABgI7nwB+urQDAAHFySo70AR+O/8AAQH8BAAGAjxLAH66tAD9Kjx0Bao8qYAPAAEA+wAD0HgbAAEEZgLaPQ49Lke4EAZtHAAAAAQOPXJHuAAAAAgICj2kAAACWg2ADvSoAj3wAAAClImADwABNnAAAYAPAAEEQAT4DQByPuhaPq4GPn8Afr0yH6MAATaqqbgEAAYCPycAfr0AAwABxco+fj84BHo/Yth8CAAI1AAAAAQBgA70qAYCP7sAfr0AjHI/zggDAH6+XSAEAASsAAGqP9mADtjHAAMZpggDAH6+XAWADtjEkAAUntuEnqUaAkGjAH69AJ7bfHJCMFpB9gZBxwB+vTIfowABNqrQQAQABgJCRwB+vQADAAHGKAE6QrJC0AAC24mADvSoBHJDCgZC2wB+vTLbjAQABgJDhwB+vQADAAE2ySZDsHJD4gpDwwB+wCEgBAAErAMAA/fE+AUqRCQEfkRTAAECDAAAAAEmRMRyRUBaRQYGRNcAfr0yH6MAATaq2aQEAAYKRZcAfsAgAwABxhD4BSpF3AR+RgsAAQIABAAGCkZjAH7AIAD4BSpG1AR6RwMAAQRcCAAKCkc/AH7AIgZHYwB+vTAAGwABBGoC2kfOR+5QIBAGbGQAAAAEDkguUCAAAAAICApIYAAAAloNgA70qAJIrAAAApSJgA8AATZwAAGADwABBEAE+BE6SSpJSAAC24mADvSoBHJJggZJUwB+w4rbkAQABgJJ9wB+w1gDAAE2zSZKIHJKUgpKMwB+w+0gBAAErAMAA/fE+AUqSpQEfkrDAAECDAAAAAD9JkswckusWktyBktDAH7Dih+jAAE2qtpQBAAGCkv3AH7D7AMAAcYY+AUqTDwEekxrAAEEZAgACgpMswB+w+4GTNcAfsOIAP0mTTRyTbBaTXYGTUcAfsOKH6MAATaq2kwEAAYKTgMAfsPsAwABxhT4BSpOSAR+TncAAQIEBAAGCk7LAH7D7AD4BSpPPAR6T2sAAQRcCAAKCk+nAH7D7gZPywB+w4gAGwABBG4C2lA2UG5ROBEm2jgAAAAEDlDCUTgAAAAAAAABgA8AAQRABPTUAAAAAgnFbARoAwABAghMAAAbAAEEcgLaUU5Rbld8EAbaPAAAAAQOUcJXfAAAAAgIClH0AAACWg2ADvSoAlJAAAAClImADwABNnAAAYAPAAEEQAT4CQByUzhaUv4GUs8AfsliH6MAATaqqbgEAAYCU3cAfskwAwABxcpSzlOIBHpTsth8CAAI1AAAAAQBgA70qAYCVAsAfskwjHJUHggDAH7KjSAEAASsAAGqVCmADtjHAAMZpggDAH7KjAWADtjEkAAUntt4nqUaAlXnAH7JMJ7bfHJWdFpWOgZWCwB+yWIfowABNqrQQAQABgJWiwB+yTADAAHGKAEqVsQEflbzAAECEAQABgJXWwB+yTAAGwABBHYC2leSV7JbdBAG25QAAAAEDlgiW3QAAAAICApYcAAAAloNgA70qAJYvAAAApSJgA8AATZwAAGADwABBEAE+AkmWQhyWYRaWUoGWRsAfs1WH6MAATaqqbgEAAYCWcMAfs0kAwABxcj4BSpZ/AR+WisAAQIQBAAGAlqTAH7NJAD9KlrUBapbCYAPAAEA+wAD0LwbAAEEegLaW4pbqmakEAbaQAAAAAQOXApmpAAAAAgIClw8AAACWg2ADvSoAlyIAAAClImADwABNnAAAYAPAAEEQAT4DQByXYBaXUYGXRcAfs+qH6MAATaqqbgEAAYCXb8Afs94AwABxcpdFl3QBHpd+th8CAAI1AAAAAQBgA70qAYCXlMAfs94jHJeZggDAH7Q1SAEAASsAAGqXnGADtjHAAMZpggDAH7Q1AWADtjEkAAUntuEnqUaAmA7AH7PeJ7bfHJgyFpgjgZgXwB+z6ofowABNqrQQAQABgJg3wB+z3gDAAHGKAE6YUphaAAC24mADvSoBHJhogZhcwB+z6rbjAQABgJiHwB+z3gDAAE2ySZiSHJiegpiWwB+0pkgBAAErAMAA/fE+AUqYrwEfmLrAAECCAAAAAEmY3hyY/RaY7oGY4sAfs+qH6MAATaq2aQEAAYKZEsAftKYAwABxhD4BSpkkAR+ZL8AAQIUBAAGCmUzAH7SmAD4BSplpAR6ZdMAAQRwCAAKCmYrAH7SmgZmTwB+z6gAGwABBH4C2ma6ZtpvmBAG2kQAAAAEDmc2b5gAAAAICApnaAAAAloNgA70qAJntAAAApSJgA8AATZwAAGADwABBEAE+BE6aDJoUAAC24mADvSoBHJoigZoWwB+1gLbkAQABgJo/wB+1dADAAE2zSZpKHJpWgppOwB+1mUgBAAErAMAA/fE+AUqaZwEfmnLAAECCAAAAAD9JmpUcmrQWmqWBmpnAH7WAh+jAAE2qtpQBAAGCmsbAH7WZAMAAcYY+AUqa2AEemuPAAEEeAgACgpr8wB+1mYGbBcAftYAAP0mbHRybPBabLYGbIcAftYCH6MAATaq2kwEAAYKbUMAftZkAwABxhT4BSptiAR+bbcAAQIYBAAGCm4nAH7WZAD4BSpumAR6bscAAQRwCAAKCm8fAH7WZgZvQwB+1gAAGwABBIIC2m+ub85xyBAG25gAAAAEDnAOccgAAAAICApwXAAAAthVdA8AA/PkBYAPAAEEQAJwrAAAApSJgA8AATZwAAGADwABBEAE+AUqcPgEenFPAAEFTAgACgJxbwB+2r4GcYsAftsQABsAAQSGAtpytnLWgigQBr3MAAAABA5zQoIoAAAACAgKc4wAAAINKYAPAAF2xAJz4AAAApSJgA8AATZwAAGADwABBEAE+A06dGJ0dAACCa2ADwABA/wEcnSaAnR/AH7cZsBcBAWADwABA/wFqnTxdA8AA/TsBYAPAAED/wAD2IgDAAF3GR51Jgp1RwB+3QAcBnXFqnXFgA8AAQP/AAPSpAD4BSp1/AR6disAAQEkCAAKAnarAH7cZgZ2ywB+3JwABndhqndhgA8AAQP/AAPX2AD4BSp3nAR6d8sAAQVACAAKAnhPAH7cZgZ4bwB+3JwABnkFqnkFgA8AAQP/AAPR0AD4BSp5UAR6eX8AAQBYCAAKAnoTAH7cZgZ6MwB+3JwABnrJqnrJgA8AAQP/AAPXfAD4BSp6/AR6eysAAQNcCAAKAnunAH7cZgZ7xwB+3JwABnxdqnxdgA8AAQP/AAPXEAD4BSp8kAR6fL8AAQL4CAAKAn07AH7cZgZ9WwB+3JwABn3xqn3xgA8AAQP/AAPSOAD4BSp+QAR6fm8AAQCwCAAKAn8HAH7cZgZ/JwB+3JwABn+9qn+9gA8AAQP/AAPYNAD4BSp/+AR6gCcAAQYQCAAKAoCrAH7cZgaAywB+3JwA9MKBKH6BUwAD8KQEAASSghQMntueCoH/AH7dAJ4FqAAbAAEEjgLagu6DAoN4AAq90AAAAAQOgz6DeAAAAAQEBoNkAAACEQGADwABdYgAAXAAGwABBJIC2oVKhYqHSAAG26AAAAAEDoXOh0gAAAAEBAaF0AAAArSxbAABgA8AAQRABPgJDoYAmoYwBFqGMgKGHwB+5SbafAGADwAD60T4BPYihosAfuUkWoa6AoanAH7lJtmgASqHDASahwwGAocrAH7lJYAPAAEEQBsAAQSWAtqMuozqkMwABtukAAAABA6NMpDMAAAACAgKjVgAAAK0sYAPAAEEQAKNpAAAApSJgA8AATZwAAGADwAD60QE+A06jg6OKAAClpmADwAD+fgEeo4zAAEEmAgACgKOjwB+5woGjqcAfudAAQByjyYKjwsAfuelIAQABKwDAAP6No8Kj0AEeo9q2HwIAAmqj42ADtjHAAMYPJKQcA4Cj/MAfucIntuqCpBXAH7npAEqkJAEpBsAAQSaAtqQ4pEapSAABtusAAAABA6RcqUgAAAACAgKkbQAAAK0sYAPAAEEQAKSAAAAApSJgA8AATZwAAGADwAD+fgE+Az2IpJPAH7p5HqSawABBJAEAAYCkrMAfunkASaS3JaTAgKS7wB+6eWADwABAPj4HSaTZFqTiFKTdwB+6eQABYAPAAEA+tnfAAEBwSqTxASs/SaUEFqUNFKUIwB+6eQABYAPAAEA+tb/AAEBxPgJJpSAhHKVAFqUxgaUlwB+6h4fowABNqqpuAQABFqVUFKVPwB+6eQABYAPAAEA+loPAAEBFAMAAcXI+AUqlZwEkpZcDJ7bsFqV8FKV3wB+6eQABYAPAAEA+loPAAEBFJ7btP0qlqwErP0mlxhalzxSlysAfunkAAWADwABAPrabwABAej4CSaXlIRymBRal9oGl6sAfuoeH6MAATaq2aQEAARamHxSmGsAfunkAAWADwABAPpaDwABARQDAAHGEPgFKpjIBJKZuAye27hamShSmRcAfunkAAWADwABAPpaDwABARSe27z9KpoIBKz9AFqapFKakwB+6eQABYAPAAEA+qs7AAEB7pqSmsgBJprshHKbbFqbMgabAwB+6h4fowABNqraTAQABFqb0FKbvwB+6eQABYAPAAEA+loPAAEBFAMAAcYU+AUqnBQEkp0ADJ7bwFqccFKcXwB+6eQABYAPAAEA+loPAAEBFJ7bvP0mnUBynbxanYIGnVMAfuoeH6MAATaq2lAEAARanhhSngcAfunkAAWADwABAPpaDwABARQDAAHGGPgFKp5cBJKfJAye28BanrhSnqcAfunkAAWADwABAPpaDwABARSe28T9Kp9kBK0mn8SWn+oCn9cAfunlgA8AAQUk+AkaoFKhBqCIAAAC28mADwABBEAAWqDIUqC3AH7p5AAFgA8AAQUm288AAQU4+Ak6oUqhgAAC29GADwAD+fgEeqGLAAEEmAgACgqh5wB+8+YGogsAfuocASaiYIRyoqoOonMAfvSJIAQABKwDAAP6NPgFKqL8BJKjyBye29YKo0MAfvPkngZ4UqNzAH7p5AAFgA8AAQUkng1uDqOPAH70iJ4FqP0qpDAErP0qpIwEkqUQDJ7b2gKk+wB+6eSeBagbAAEEngLapg6mMqZYAAoZ4AAAAAQOplKmWAAAAAAAAAGADwABBEAAGwABBKIC2qdWp3qnrAAKGeQAAAAEDqemp6wAAAAAAAABgA8AAQRAABsAAQT2AtqooqjGqOAECgVUAAAABA6o4qjgAAAAAAAAAYAPAAPrRAAbAAEE+gLaqb6p4qoIBArZWAAAAAQOqgqqCAAAAAAAAAGADwAD60QAGwABBP4C2qsOqzKrSAQKoQgAAAAEDqtKq0gAAAAAAAABgA8AA+tEABsAAQUCAtqsEqw2rGgECtncAAAABA6saqxoAAAAAAAAAYAPAAPrRAAbAAEFBgLarkauaq6EBArW/AAAAAQOroauhAAAAAAAAAGADwAD60QAGwABBQoC2q9er4KvnAQK2ngAAAAEDq+er5wAAAAAAAABgA8AA+tEABsAAQUOAtqworDGsPAECtd8AAAABA6w8rDwAAAAAAAAAYAPAAPrRAAbAAEFEgLasd6yArIUBAqKMAAAAAQOshayFAAAAAAAAAGADwAD60QAGwABBRYC2rMCsyazOAQKsxgAAAAEDrM6szgAAAAAAAABgA8AA+tEABsAAQUaAtq2PrZitpAECtesAAAABA62kraQAAAAAAAAAYAPAAPrRAAbAAEFHgLauBq4PrhsBArafAAAAAQOuG64bAAAAAAAAAGADwAD60QAGwABBSIC2rm6ud65+AQK2WQAAAAEDrn6ufgAAAAAAAABgA8AA+tEABsAAQSmAtq6DroiusQACtmEAAAABA66XrrEAAAABAQGupQAAAKUiYAPAAE2cAABgA8AA+tEABsAAQSqAtq61rrqu5gACtmQAAAABA67MruYAAAABAQGu2gAAAKUiYAPAAE2cAABgA8AA+tEABsAAQSuAtq7qru+vGAACtmIAAAABA67+rxgAAAABAQGvDAAAAKUiYAPAAE2cAABgA8AA+tEABsAAQSyAtq8cryGvSwACtmUAAAABA68xr0sAAAABAQGvPwAAAKUiYAPAAE2cAABgA8AA+tEABsAAQS2Atq9Pr1SvgAACtmAAAAABA69mr4AAAAABAQGvdAAAAKUiYAPAAE2cAABgA8AA+tEABsAAQS6Atq+Er4mvpgACtlEAAAABA6+Vr6YAAAABAQGvogAAAJn6YAO9KgAAYAPAAPrRAAbAAEEvgLawfrCYsKEDAkgBarB/YAPAAP3kAgAAAQOwmrChAAAAAQEBsJsAAACD21sAAGADwAD60QAGwABBMIC2saaxq7HdAAK2bAAAAAEDsbOx3QAAAAICArG9AAAAg9tgA8AAQRAAsdEAAAClImADwABNnAAAYAPAAPrRAAbAAEExgLay4rLnsx0AArZrAAAAAQOy87MdAAAAAgICsv0AAACD22ADwABBEACzEQAAAKUiYAPAAE2cAABgA8AA+tEABsAAQTKAtrNgs2WzmQACtkoAAAABA7Nus5kAAAACAgKzewAAAJn6YAO9KgCzjQAAAKUiYAPAAE2cAABgA8AA+tEABsAAQTOAtrPqs++0IgACgxwAAAABA7P3tCIAAAACAgK0BAAAAJn6YAO9KgC0FgAAAKUiYAPAAE2cAABgA8AA+tEABsAAQTSAtrRntGy0kQAChAcAAAABA7R3tJEAAAABAQG0hQAAAKUiYAPAAE2cAABgA8AA+tEABsAAQTWAtrUctSi1TQACtlgAAAABA7UztU0AAAABAQG1QQAAAKUiYAPAAE2cAABgA70qAAbAAEE2gLa1mrWjtdIAApcuAAAAAQO1qLXSAAAAAgICtbIAAACD22ADwABBEAC1xgAAAKUiYAPAAE2cAABgA8AAQRAABsAAQTeAtrYctiG2VQACtlUAAAABA7YrtlUAAAACAgK2NQAAAIPbYAPAAEEQALZJAAAApSJgA8AATZwAAGADwAD60QAGwABBOIC2tqm2srboAAKXLwAAAAEDtr626AAAAAICArbIAAAAg9tgA8AAQRAAttwAAAClImADwABNnAAAYAPAAEEQAAbAAEE5gLa3obemt+cAArYTAAAAAQO3rLfnAAAAAwMDt7oAAACWUmADvTwAt8gAAACAvWADwABo7wC32wAAAKUiYAPAAE2cAABgA8AA+tEABsAAQTqAtrhIuE24jQACtfoAAAABA7hmuI0AAAACAgK4cAAAAKU0YAPAAEvPALiHAAAAtg9gA8AATZwAAGADwAD60QAGwABBO4C2uQu5GLlXAAK1/wAAAAEDuSq5VwAAAAICArk0AAAApTRgA8AAS88AuUsAAAClImADwABNnAAAYAO9PAAAAB+spgAfrVUAH62QAB+ujQAfryAAH7C2AB+x8QAfsiwAH7MpAB+zvgAftVQAH7aPAB+2+QAfuPgAH7kpAB+5ogAfulkAH72xAB+92QAfvgEAH74pAB++UQAfvnkAH76hAB++yQAfvvEAH78ZAB+/QQAfv2kAH7+RAB+/uQAfv+EAH8AXAB/ATQAfwIMAH8C5AB/A7wAfwSMAH8FdAB/BoQAfweUAH8InAB/CaQAfwp8AH8LTAB/DFwAfw1sAH8OfAB/D7wAfxDMAH8R1AAAAMgLAAEFJgLeA6oDwvIADtvcAAAFgAcAA/eQAAWABwABBEAQEwABBS4C3gY6BpQaD7ABgA8AA/n4BaoGUYAPAAP5+wAD2RgTAAEFMgLeBu4HPBrb5AGADwAD8lwFqgc5gA8AA/JeBVwTAAEFNgLeCnYLBBrb6AGADwAD60QFqgrxgA8AA+tEABMAAQU6At4LfguwJtvMAXQPAAP07AWADwABAPgABBcAAQX2At4LxgvGDigCGa79gAAODCIOKAAAAAQEBgw4AAAS2810DwAD9OwFgA8AAQD4AAGADwABBSQE+AkAcgz8WgzgWgyoutvPAAEFOYcAA/WuAlwEAAZQAwAD9x4Mqg0IAQByDXhaDUC6288AAQU6WYgEAATSDZAODZIOEAAAAAQEBg24AAACtLGADwABBEAAAYAPAAPrRAUqDdwEhFoN9gYN4wB/GbraewABBQgDAAP0Mg1CDhQACCAHAAEFOgADAH8YICQGC8cAA/foAAAAAKQbAAEFQgLeDyoPShQsEAa9zAAAAAQOD8oULAAAAAgIChAUAAACDSmADwABdsQCEGgAAAKUiYAPAAE2cAABgA8AAQUkBPgQ9HIQ0gIQtwB/G3YKYAQABaoQ6YAPAAP5+wAD2RgDAAF2zToRXhGUAALbzXQPAAP07AWADwABAPgEchHeAhGfAH8bdr40BAWADwABAPgE0hIADhICEugAAAAAAAABgA8AAQD4BSoSGASaEhgEehIrAAEEhAgACgISmwB/G3YGErsAfxusAYAPAAEA+AMAAXb49HITIgITBwB/G3YKQAQABaoTMYAPAAP5+wAD2RgDAAF20SoTWAR+E4cAAQX0BAAGChPnAH8cmAAbAAEFSgLeFQYVShiQAAK90AWqFQmADwAD95AIAAAEDhWGGJAAAAAEBAYVrAAAAhEBgA8AAXWIAAFwBPgQ9HIV8gIV3wB/H9bAbAQABaoWTYAPAAED/wAD19gDAAF1zPRyFpICFn8Afx/WCmAEAAWqFqmADwAD+fsAA9kYAwABdZz0chbmAhbTAH8f1iGkCAWADwABAPgIWhcwutvPAAEFONIXbA4XbhgwAAAABAQGF6QAAAK0sYAPAAEA+AABcAUqF8gEchfeBhfLAH8h6r3QBAAGAhgfAH8f1AMAAQEsAwABdaz0chhiAhhPAH8f1gpABAAFqhhxgA8AA/n7AAPZGAMAAXWgGwABBU4C3himGOYibAAG25gAAAAEDhkCImwAAAAICAoZUAAAAthVdA8AA/PkBYAPAAEEQAIZoAAAApSJgA8AATZwAAGADwABBEAE+CUAchpGAhovAH8jxlmIBAAE0hpcDhpeGzwAAAAEBAYaYAAAArSxgA8AAQRAAAGADwAD60QFKhqEBHoaqwABBJQIAAoKGvcAfyTyBhsPAH8kGAADAAP0MhouG0ABOhuqG8wAAtvtdA8AA/TsBYAPAAEA+ATGHA2ADwABAPgA9HocLwABBVAMAA4CHGcAfyPGChyDAH8l6gYcqwB/JBgBJhzwWh0mCh0DAH8l6gVXAAP0dSodSAR+HXcAAQIIAAAAAP0mHehyHjhaHh4KHfsAfyXphwAD9a4CXAQABaoeQYAPAAPyXgVcAwAD9xz4BSoeqAR6HscAAQVUCAAKCh7nAH8l6gYfDwB/JBgA/SYfbHIfvFofogoffwB/JemHAAP1rSAEAAZQAwAD9u0qH9QEciASCh/zAH8l6SwEAAZMAwAD9Sj9OiBuIIQAAly5gA8AAQUkBH4gnwABBfQEAAYKIP8AfyXoAQB6IXsAAQSUCAAKDiHHAH8phgYh4wB/JBgCIVYiEAEqIiwGDiJLAH8phBsAAQVSAt4igiKyQlwABtvwAAAABA4i5kJcAAAADAwOIzQAAALYVXQPAAPz5AWADwABBEACI7QAAALb7XQPAAP07AWADwABAPgCJBAAAAKUiYAPAAE2cAABcAT4BRomPAImdAAAArSxgA8AAQRAAgImlwB/KzEE+Aj2LibTAH8sNHonEwABBJAEAAYOJ1sAfyw0ASYnjFonsg4nnwB/LDbaewABBQj4CTooNihMAAJcuYAPAAEFJASaKDQGDihXAH8sNYAPAAEFJPR6KI8AAQVQDAAMWijeEijHAH8tVtvPAAEFOgYpGwB/K4YKKUMAfyvYASYprFop0g4pvwB/LDYFVwABBPT4BQoqHAD4FToq1ir4AALb9YAPAAEA+ASaKtQGDisDAH8sNYAPAAEA+TorSit4AALb+YAPAAPyXARyK4JSBxgAAAADAAPy6TorxivkAALb/YAPAAPrRASpBRYtvAYt4i3oAAGJgA8AA/JcBkwEci4GHi3/AH8wPYwEAARaLjIGLg8AfyuFhwAD9awDAAP3FAY+LlMAfzA8ci5WHi5TAH8wPZAEAAZQAwAD9vUE+Ck6Lsou6AABeYAPAAEA+ARyLxIGLvMAfyuFLAQABh4vFwB/MDwDAAP1KSYvTHIvfFIvXwB/MYQgASAEAASsAwABAaUKL6AI/TowFjA0AALcAYAPAAEEQARyMGISMD8Afy7uXLgIAAhSMHsAfzGEIAIKMJ8AfyvYAwABAW0mMgxaMjxSMh8AfzKgJALaewABBQkKMmAI/PY6MrMAfy/opSY0sHI04FI0wwB/MYQgASAEAARSNO8AfzKgJAADAAEBpQo1EAT89HI5MgY5EwB/K4YC/AgACh45NwB/MDyaOTAEUjlLAH8yoCQBgA8AAQD4AwAD9Sz2MjmXAH8u7Jo5lARSOcMAfzKgJAGADwABAPkmOhCEcjpSFjojAH8vcSAEAARyOl5SBxgAAAADAAPy6AMAA/bs+Aj0cj2eBj17AH8rhoBMBAAGFj3DAH8vcAMAA/Vk9j4+KwB/MDxyPi4ePisAfzA+BjQEAAZQAwAD9vj89jY/WwB/L3IeP5MAfzA9JkGEhhpBmwB/L+j0ckHiBkG/AH8rhVgEAAYSQfMAfy7sAwAD9TD8GwABBVYC3kJyQrJkyAAG3AQAAAAEDkLOZMgAAAAICApDHAAAAthVdA8AA/TsBYAPAAEA+AJDbAAAApSJgA8AATZwAAGADwABBEAE+CkmRWhaRZICRXsAfziWBVcAA/R09MJFtH5GBwAD7ywIAAoCRh8AfziUnthUAP06SGJIkAAC3AmADwAD60QEckiyAkibAH84llmIBAAE0kjIDkjKSRQAAAAEBAZIzAAAAg1NgA8AAQD4AAGADwAD60QFKkjkBIRaSPIKSOsAfzqyqzsAAQHsAwAD9DE6SUZJcAAC2VmADwAD60QEckmSAkl7AH84lgdYBAAE0kmgDkmiSewAAAAEBAZJpAAAAg1NgA8AAQD4AAGADwAD60QFKkm8BFpJxg5JvwB/PCbZWwABAcgDAAP0OTpKVkqAAALcDXQPAAP07AWADvSoBHJLBHJKogJKiwB/OJYCrAQFgA70qATSSrAOSrJK/AAAAAQEBkq0AAACtLGADwABAPgAAYAO9KgFKkrYBFpK7hJK2wB/PcZaDwABARQDAAP0EgK0AAAAAwAD9D06S5ZLwAAC3BF0DwAD8+QFgA70qARyTBoGS+sAfzjq3BQEAAYSTGcAfzzkAwABNtE6TZwAAALcGYAO9KgBOk3wAAAC3B2ADwAD8lwBOk44AAAC3CGADwAD8lwBGk5yTxpOtAAAAiGJgA70qAIWTusAfz6k+BU+TzpPTAAABtwlhAwFbYAPAAPrRAAOT75SdAAAAAQEBk/AAAACZ+lsAAGADwAD60QFKlAIBIiIhHJQGFJQCwB/QPQsASAEAARSUCcAf0AgJAADAAP3xAByUOxaULIGUIMAfzjqH6MAATaq3CgEAASaUVAEUlFTAH9A9CwBgA70qAMAAcXUAHJSBFpRygZRmwB/OOofowABNqptGAgACJpSOARSUjsAf0D0LAGADvSoUlJPAH9AICQAAwABxd06UqgAAAJizYAPAAPyXAE6UugAAAIJrYAPAAPyXAEmUxiKClMrAH86AAByU5ISU2cAfzzmWYgEAARSU6sAf0CAKAADAAP0MPgM9FZYAwB/Q6gxqlhRgA8AA/JchPRWW78Af0NsLHJcRFpcCgZb2wB/OOofowABNqrcLAQABFJclwB/QCAkAAMAAcXtAHJdSFJdNwB/Q2wsAgWsBAAEcl3AWl2GBl1XAH846h+jAAE2qtwwBAAEUl4PAH9AICQAAwABxgADAAP3Gl02XjQA+Aj0Vl6fAH9DqDGqXu2ADwAD8l1M9FZfMwB/Q2wscl+4Wl9+Bl9PAH846h+jAAE2qtwwBAAEUmAHAH9AICQAAwABxgEmYWCIcmGiGmFzAH8/ZSAEAASsAwAD98QEcmHgUmHPAH9DbCwBjAQABFJh6wB/P9QgAAMAA/cU+Az2OmI7AH8/ZFJicwB/QCAkAPRWYr8Afz/UIFJi6wB/Q2wsAPY+YyMAfz+YUmNPAH9DqDAA/SpjrAR6Y9sAAQRUEAASGmP/AH8/Zh5kMwB/P5oOZFsAfzt2BmSLAH846AAbAAEFWgLeZN5lMmxEAAJcuAWqZOGADwAD95AIAAAEDmVGbEQAAAAICAplaAAAAg9tbAJluAAAApSJgA8AATZwAAGADwABBEAE+BT2ImYHAH9KuHpmSwABBJAEAAYCZpMAf0q4ASZmwIiEmmbQBFpm7gJm1wB/SrraeAGADwAD60QAcmdQWmcYutvPAAEFOgxwBAAGAmd3AH9KuAMAA/QhKmeUBLj9OmgqaEgAAtw1dA8AA/TsBYAPAAEA+AR6aGMAA/UEBAWADwABAPgEWmjAutvPAAEFOAEmaRCEmmkgBFppPgJpJwB/SrraeAGADwAD60T4BPRyaaIKaYMAf0ytWAQABJppsAYCabMAf0q5gA8AAQD4AwAD9TD4CQCWalICajsAf0q5gA8AAQUmajpqkAD0cmrWCmq3AH9MrgKUBAAEmmsIBFprCgJq8wB/SrrbzAF0DwAD8+QFgA8AAQD4AwAD9TUqa3AEemufAAEEgAgACgpr4wB/TK4GbAcAf0rcABsAAQVeAt5sWmyueOQAAly8BapsXYAPAAP3kAgAAAQObN545AAAAAgICm0AAAACD21sAm1QAAAClImADwABNnAAAYAPAAEEQAT4GPYibZ8Af1DAem3jAAEEkAQABgJuKwB/UMABJm5YiISabmgEWm6GAm5vAH9Qwtp4AYAPAAPrRABybuhabrC6288AAQU6DHAEAAYCbw8Af1DAAwAD9CEqbywEmm8sBgJvSwB/UMGADwABBED9Jm90iJpvnARab54Cb4cAf1DC2ngBgA8AA+tEAHJv3LkgBAAGAm/rAH9QwAMAAQWxKnAEBLj9OnCKcMAAAtw5dA8AA/TsBYAPAAEEQATGcPGADwABBEABGnEScbJxSAAAAXmADwABBEAAWnF0utvPAAEFOPgFJnHQmnH4BFpx+gJx4wB/UMLaeAGADwAD60T4BSZyRJpypARycqRacm4CclcAf1DC28wCDHAEAAYOcssAf1RgAAGADwAD60T4BPRyc1oKcyMAf1PNWAQABg5zawB/VGADAAP1MPgFGnP+dMwAAAAEAWwAmnSQBFp0kgJ0ewB/UMLbzAF0DwAD8+QFbPgJOnREAAAC2oWADwABAPgEmnP8BhJ0RwB/VnGADwABAPj0cnU+CnUHAH9TzVgEAARydW4OdU8Af1RiXLwIAAoWdaMAf1b+BnXPAH9Q5AMAAQTgAwAD9TD4BPRydvYKdr8Af1PNWAQABHJ3Jg53BwB/VGJcvAgACJp3WAYCd1sAf1DBgA8AAQRCBnd3AH9Q5AMAAQTgAwAD9TEqd/gEengnAAEEgAgACgp4awB/U84GeKcAf1DkABsAAQViAt54+nk+fCQAAtlUBap4/YAPAAP3kAgAAAQOeWZ8JAAAAAgICnmMAAACD22ADwABBEACedwAAAKUiYAPAAE2cAABgA8AA+tEBPgJGnoqerZ6TAAAAXmADwABAPgAWnp4utvPAAEFOPgFJnrUhHJ7Cgp66wB/WyLZVAgACgJ7NwB/WnYGe1MAf1qsAwABAYEqe4gEqP0qe+gEpBsAAQVmAt58OnyOf+QAAhngBap8PYAPAAP3kAgAAAQOfK5/5AAAAAAAAAGADwABBEAE+BEmfNBafOC62VsAAQXFKn0QBLj9On2ifcAAAtw1dA8AA/TsBYAPAAEA+AR6fdsAA/UEBAWADwABAPgEWn44utvPAAEFOAD0cn6mAn6LAH9dagL8CAAKTJp+pARyfuhyftoCfr8Af11pLAQABkwDAAP1KhngAAAAAwABATGADwABAPgDAAP1LSp/KAR+f1cAAQX0BAAGAn+3AH9daAAbAAEFagLef/qAToQYAAIZ5AWqf/2ADwAD95AIAAAEDoB6hBgAAAAAAAABgA8AAQRABPgNJoCchFqAsLrZWwABBcUqgOAEuP06gYKBsAAC3D10DwAD8+QFgA8AAQD4BHKDFHKB8FqBuLrbzwABBToCrAQFgA8AAQD4BNKCAA6CAoMMAAAABAQGggQAAAINTYAPAAEA+AABgA8AAQD4BPgJOoJmgmwAAg6lgA8AAQD4BJqCZARygn4CgncAf2GqGeQAAAADAAEBNYAPAAEA+SqC0AYGgu8Af2IMAwAD9BICtAAAAAMAA/Q9KoNMBH6DewABBfQEAASag9gGAoPbAH9grXQPAAP07AWADwABAPgAGwABBboC3oQuhIKE2AQC2dwFqoQxgA8AA/eQCAAABA6EuoTYAAAAAAAAAYAPAAPrRAUqhMQEqBsAAQW+At6E6oU+hXwEAgVUBaqE7YAPAAP3kAgAAAQOhV6FfAAAAAAAAAGADwAD60QFKoVoBKgbAAEFwgLehY6F4oYcBAKhCAWqhZGADwAD95AIAAAEDoX+hhwAAAAAAAABgA8AA+tEBSqGCASoGwABBcYC3oYuhoKHUAQC2VgFqoYxgA8AA/eQCAAABA6GrodQAAAAAAAAAYAPAAPrRAUqhrgEcobwWoa4utvPAAEFOgdYBAAE0ocADocCh0wAAAAEBAaHBAAAAg1NgA8AAQD4AAGADwAD60QFKoccBFqHJgKHHwB/Z7LZWwABAcgDAAP0OBsAAQXKAt6HYoe2h/QEAtb8BaqHZYAPAAP3kAgAAAQOh9aH9AAAAAAAAAGADwAD60QFKofgBKgbAAEFzgLeiAaIWoiUBALaeAWqiAmADwAD95AIAAAEDoh6iJQAAAAAAAABgA8AA+tEBSqIhASkGwABBdIC3oimiPqJSAQC13wFqoipgA8AA/eQCAAABA6JKolIAAAAAAAAAYAPAAPrRAUqiTQEqBsAAQXWAt6JWomuieQEAoowBaqJXYAPAAP3kAgAAAQOicaJ5AAAAAAAAAGADwAD60QFKonQBKgbAAEF2gLeifaKSoqABAKzGAWqifmADwAD95AIAAAEDopiioAAAAAAAAABgA8AA+tEBSqKbASoGwABBd4C3oqSiuaLOAQC16wFqoqVgA8AA/eQCAAABA6LGos4AAAAAAAAAYAPAAPrRAUqiyQEqBsAAQXiAt6LSouei/AEAtp8BaqLTYAPAAP3kAgAAAQOi9KL8AAAAAAAAAGADwAD60QFKovcBKgbAAEF5gLejAKMVoyUBALZZAWqjAWADwAD95AIAAAEDox2jJQAAAAAAAABgA8AA+tEBSqMgASoGwABBW4C3pBekHKjcAAC3EAAAAAEDpC2o3AAAAAICAqQ3AAAAg9tgA8AAQRAApEsAAAClImADwABNnAAAYAPAAPrRAT4LQCEWpJWApI/AH9vztp7AAEFCpI6knABAIRyk3Rakzy6288AAQU6B1gEAATSk4QOk4aUQAAAAAQEBpOIAAACtLGADwABAPgAAYAPAAPrRAUqk6wEcpPCCpOvAH9xStmsCAAKApP3AH9vzgaUEwB/cAQDAAEBRAMAA/Q6kzqURAEAhHKVVLoMcAgACFqV5FqVqgaVewB/cAbO3wABNpJr/uKqBpYbAH9wBAMAAQWWlVKWSAEAiFqXNLrZWwABBcQEhFqXigKXcwB/b87ZWwABBPqXNpewASaYkFqYugKYowB/b87W/wABBQUqmNwEqP0mmahymdICmbsAf2/ODHAIAAhammBamiYGmfcAf3AGzt8AATaSa/7iqgaalwB/cAQDAAEEzPgFKprsBKj9OpuCm5QAAttpgA8AAQD4BJqbgAR6m8MAAQSQBAAGApwLAH9vzAGADwABAPkmnNCEcpzkugxwCAAIWp0eCp0LAH91FloPAAEBFgadNwB/cAQDAAEFlSqdbASo/TqejAAAAhJRdA8AA/PkBYAO9KgBJp7AWp7mCp7TAH91FtpvAAEB6PgE9i6fNwB/doByn8han44Gn18Af3AGH6MAATaq2sQEAARaoCoKoBcAf3UWWg8AAQEUAwABxej4CQBaoMIKoK8Af3UWqzsAAQHuoK6g5AD2LqELAH92gHKhnFqhYgahMwB/cAYfowABNqrayAQABFqh9gqh4wB/dRZaDwABARQDAAHF/SqiOARyonYOolcAf3aCWYgEAATSoowOoo6jXAAAAAQEBqLAAAACZ+mADvSoAAGADwAD60QFKqLgBHKi9LoMcAgAChKjGwB/ea4Goy8Af3AEAwABBZQDAAP0MBsAAQVyAt6jhqPKtkwAAtmwBaqjiYAPAAP3kAgAAAQOo+q2TAAAAAgICqQQAAACD22ADwABBEACpGAAAAKUiYAPAAE2cAABgA8AA+tEBPgQ9iKkrwB/ezh6pPMAAQSQBAAGAqU7AH97OAEmpWiIWqV4utlbAAEFxACEWqXOAqW3AH97OtlbAAEE+Sql/ASo/SamRFqmbgKmVwB/ezraewABBQj4DTqm6qcAAAJcuYAPAAEFJASapugGAqcLAH97OYAPAAEFJT6nPqdQAAAG3EWEDAmADwABAPl0DwAD8+QFgA8AAQD5gA8AA+tEAA6nkq6cAAAACAgKp8gAAAK0sYAPAAEA+AKoPAAAAthVdA8AA/PkBYAPAAEA+AABgA8AA+tEBPgJOqvirCgAAtxJgA8AAQD4BJqr4ARyrEYSrDMAf35yGeQAAAADAAEBNYAPAAEA+SqsoARyrNYWrL8Af36qB1gEAATSrOQOrOaueAAAAAQEBq0cAAACD22ADwABAPgAAYAPAAPrRAT4BSqtaARyrZ4erYcAf4Bi2awIAAoardMAf38qBq4fAH97cAMAAQFEAwAD9DkqrsAEcq8UWq7cutvPAAEFOlmIBAAE0q8sDq8utOwAAAAEBAavZAAAAtxNgA8AAQD4AAGADwAD60QE+A06r9qwAAAC3FGADwAD60QEcrBKDrALAH99tIAIAAoSsE8Af4H8WrCeCrCHAH99KtvPAAEFOAABJrD8iImqsQ2ADwAD60QAAIYWscMAf4JgAHKyPgqyJwB/fSrcQAgAChKyhwB/gf4Gsr8Af3twAwABBWz4BPTCsySStDgUntxUuJ4GJgK0HwB/ezieBaj9KrSIBha0pwB/gmADAAP0MP0qtSAEcrV0WrU8utvPAAEFOlmIBAAE0rWMDrWOtjgAAAAEBAa1kAAAArSxgA8AAQD4AAGADwAD60QFKrW0BHK1ygq1twB/hWrZsAgACgK17wB/ezoGtgsAf3twAwABAUADAAP0MBsAAQV2At62YramwEwAAtmsBaq2ZYAPAAP3kAgAAAQOttbATAAAAAgICrb8AAACD22ADwABBEACt0wAAAKUiYAPAAE2cAABgA8AA+tEBPgc9iK3mwB/hxR6t98AAQSQBAAGArgnAH+HFAEmuFSIWrh+ArhnAH+HFtlbAAEE+ACEWri4utlbAAEFxSq46ASo/Sa5MFq5WgK5QwB/hxbaewABBQkquXwEcrmyArmbAH+HFtmwCAAIuga57wB/h0wDAAEEwPz2Iro3AH+HFHK6bgK6VwB/hxYZ5AAAAAMAAQShOruGu6wAAtxRgA8AA+tEBHK8DFq71LrbzwABBToHWAQABNK8HA68HrzYAAAABAQGvCAAAAK0sYAPAAEA+AABgA8AA+tEBSq8RARyvFoKvEcAf4qu2awIAAoCvI8Af4cWBryrAH+HTAMAAQFEAwAD9DkmvPSIiaq9BYAPAAPrRAAAhgq9qwB/ifAAcr38utxACAAKAr5HAH+HFga+YwB/h0wDAAEFbPgE9MK+uJK/zBSe3FS4ngYmAr+zAH+HFJ4FqP0qv/wGCsAbAH+J8BsAAQV6At7AYsCmwpAAAtmEBarAZYAPAAP3kAgAAAQOwOLCkAAAAAQEBsEYAAAClImADwABNnAAAYAPAAPrRAT4BSrBZARywbhawYC6288AAQU6WYgEAATSwdAOwdLCfAAAAAQEBsHUAAACtLGADwABAPgAAYAPAAPrRAUqwfgEcsIOBsH7AH+OutmEBAAGAsJPAH+NyAMAAQFIAwAD9DAbAAEFfgLewqbC6sTsAALZkAWqwqmADwAD95AIAAAEDsMyxOwAAAAEBAbDaAAAApSJgA8AATZwAAGADwAD60QE+AUqw7QEcsQIWsPQutvPAAEFOlmIBAAE0sQgDsQixNgAAAAEBAbEJAAAArSxgA8AAQD4AAGADwAD60QFKsRIBHLEXgbESwB/kTrZkAQABgLEqwB/kEgDAAEBTAMAA/QwGwABBYIC3sUCxUbHfAAC2YgFqsUFgA8AA/eQCAAABA7Fgsd8AAAABAQGxbgAAAKUiYAPAAE2cAABgA8AA+tEBPgFKsYEBHLGWFrGILrbzwABBTpZiAQABNLGcA7GcsdoAAAABAQGxnQAAAK0sYAPAAEA+AABgA8AA+tEBPgFKsasBHLG3gbGywB/k7rZiAQABgLHHwB/ksgDAAEBUAMAA/QwGwABBYYC3seSx9bJyAAC2ZQFqseVgA8AA/eQCAAABA7IFsnIAAAABAQGyEwAAAKUiYAPAAE2cAABgA8AA+tEBPgFKsiYBHLI7FrItLrbzwABBTpZiAQABNLJBA7JBsm0AAAABAQGyQgAAAK0sYAPAAEA+AABgA8AA+tEBSrJLARyyUIGyS8Af5ZC2ZQEAAYCyYcAf5VQAwABAVQDAAP0MBsAAQWKAt7J3soizCQAAtmABarJ4YAPAAP3kAgAAAQOymrMJAAAAAQEBsqgAAAClImADwABNnAAAYAPAAPrRAT4BSrK7ARyy0Baywi6288AAQU6WYgEAATSy1gOy1rMEAAAAAQEBstcAAACtLGADwABAPgAAYAPAAPrRAUqy4AEcsuWBsuDAH+YwtmABAAGAsvjAH+X0AMAAQFYAwAD9DAbAAEFjgLezDrMfs4sAALZRAWqzD2ADwAD95AIAAAEDsyuziwAAAAEBAbM4AAAAllJgA70qAABgA8AA+tEBPgFKs0cBHLNcFrNOLrbzwABBTpZiAQABNLNiA7Nis4YAAAABAQGzYwAAAK0sYAPAAEA+AABgA8AA+tEBSrNsARyzcYGzbMAf5s62UQEAAYCzfsAf5pQAwABAVwDAAP0MBsAAQWSAt7OQs6G0JgAAtkoBarORYAPAAP3kAgAAAQOzqrQmAAAAAgICs7cAAACZ+mADvSoAs8kAAAClImADwABNnAAAYAPAAPrRAT4BSrPcARyz8Raz4y6288AAQU6WYgEAATSz9wOz97QhAAAAAQEBs/gAAACtLGADwABAPgAAYAPAAPrRAUq0AQEctAaCtAHAH+d6tkoCAAKAtBDAH+cygbQVwB/nPgDAAEBYAMAA/QwGwABBZYC3tCu0PLS3AACDHAFqtCxgA8AA/eQCAAABA7REtLcAAAACAgK0UQAAAJn6YAO9KgC0YwAAAKUiYAPAAE2cAABgA8AA+tEBPgFKtHYBHLSLFrR9LrbzwABBToHWAQABNLSPA7SPtLIAAAABAQG0kAAAAINTYAPAAEA+AABgA8AA+tEBSrSWARy0mIK0lsAf6C2DHAIAAoC0ocAf5+WBtKbAH+fxAMAAQE4AwAD9DgbAAEFmgLe0vLTNtT4AAIQHAWq0vWADwAD95AIAAAEDtNi1PgAAAAEBAbTmAAAApSJgA8AATZwAAGADwAD60QE+AUq0+QEctQ4WtQAutvPAAEFOgdYBAAE0tRIDtRK1OQAAAAEBAbUTAAAArSxgA8AAQD4AAGADwAD60QFKtRwBHLUhgbUcwB/o1IQHAQABgLUtwB/omADAAEBaAMAA/Q4GwABBZ4C3tUO1W7WIAAC2WAFqtURgA8AA/eQCAAABA7VmtYgAAAABAQG1dAAAAKUiYAPAAE2cAABgA70qAUq1hAErBsAAQWiAt7WNtZ62SwAAtfoBarWOYAPAAP3kAgAAAQO1t7ZLAAAAAgICtcEAAAClNGADwABLzwC12AAAAKUiYAPAAE2cAABgA8AA+tEBPgFKtesBHLYJFrXyLrbzwABBToHWAQABNLYNA7YNtkYAAAABAQG2DgAAAINTYAPAAEA+AABgA8AA+tEBSrYUARy2FoK2FMAf6cW1+gIAAoC2MMAf6XuBtjrAH+mJAMAAQGcAwAD9DgbAAEFpgLe2ULZhtvIAALYTAWq2UWADwAD95AIAAAEDtme28gAAAAMDA7Z1AAAAllJgA708ALaDAAAAgL1gA8AAaO8AtpYAAAClImADwABNnAAAYAPAAPrRAT4BSrapARy2vha2sC6288AAQU6B1gEAATS2wgO2wrbtAAAAAQEBtsMAAACDU2ADwABAPgAAYAPAAPrRAUq2yQEctsuDtsnAH+qGthMDAAOAttLAH+owgbbbwB/qPIK24cAf6koAwABAZgDAAP0OBsAAQWqAt7b3txC4wwAAtf8Barb4YAPAAP3kAgAAAQO3IrjDAAAAAgICtywAAAClNGADwABLzwC3QwAAAKUiYAPAAE2cAABgA708AT4DTrdjAAAAiGJgA708AEa3crebt4QAAACtLGADwABAPgAWt4wutvPAAEFOPgJOt7C3uAAAXmADvTwBHLe/g7e6wB/rLrX/AgACgLfSwB/q+IG33MAf6wYAwABAaEm38By3/IS39MAf60lIAQABKwDAAP3xPgFKuA8BK0m4KRy4N4K4LcAf6x1IAQABKwDAAP3xPgE9irhKwB/rHYS4VsAf60lJuGwhHLh6grhwwB/rHUgBAAGEuH3AH+tJAMAA/fE+AUq4kAErP0q4rwGCuLbAH+sdBsAAQWuAt7jIuNu5jwAAIwFquMlgA8AA/eQCAAABA7jjuY8AAAAAAAAAYAPAAP5+AT4CTrjzuP8AALcWYAPAAP5+ARy5XzW5QAAAAQBdA8AA/TsBYAPAAP5+ARy5QBy5GBa5Ci6288AAQU6AqwEBYAPAAP5+ATS5HAO5HLk+AAAAAQEBuSYAAACtLGADwABBEAAAYAPAAP5+AUq5LwEcuTSAuS/AH+xyIwAAAADAAP3yAMAA/QSArQAAAADAAP0PNQAAAAEAWwEcuUqAuUjAH+w1gK4AAAAAwAD9ToAAwB/sNVgBAAEngYsAwAD9DUq5bwEkuYsDJ7cXgLl+wB/sIieDJgbAAEFsgLe5lLmuu1ADAEgBarmVYAPAAP3kAgAAAQO5sLtQAAAAAQEBubEAAACD21sAAGADwAD60QE+A0m5vh65wsAA9ngCAAIugLnSwB/tGgBKudoBKT9Puey58QAAAYQHYQMAYAPAAPrRAAO5/LqnAAAAAAAAAGADwAD60QE+AUq6BwEmugcBHLoiFroUgLoOwB/tGrbzAJZiAQABNLooA7oouqAAAAABAQG6KQAAAINTWwAAYAPAAPrRAT4CTro6uj4AAICrXQPAAPz5AWADwABBEAEcuk4WukAutvPAAEFOgKsBAWADwABBEAE0ulIDulK6aAAAAAEBAbpTAAAAg1NgA8AAQD4AAGADwABBEAFKulkBHLpbg7pZwB/t7YZ5AAAAAMAAQE0AwAD9BEq6cwEcun6DunrAH+2xgxwBAAEcuomCuofAH+2dhnkAAAAAAADAAP0IAABgA8AA+tFKuq4BIiIiJbq7gLq1wB/tGmADwABBSQAcuugWut0UutfAH+0aAAFgA8AAQUm2VsAAQXFIAQABFrrrLrZWwABBcQDAAP3xABy7HBa7FRa7BxS7AcAf7RoAAWADwABBSbbzwABBTmHAAP1rSAEAARa7LRa7Hy6288AAQU5hwAD9awDAAP27ABy7SoG7P8Af7UwgAAAAAAAGwABBeoC3u1W7abx+AQCDxgFqu1ZgA8AA/eQCAAABA7tyvH4AAAAAAAAAYAPAAPyXAT4DTrt8u4UAAIPGYAPAAPyXASMWu4cutlbAAEFxN1Y3KwFgA8AA/JdGu/e8F7wAAAAArSxgA8AAQD4AFrwILrbzwABBTj4BPYi8H8Af7xwcvFMcvDSAvCvAH+8cg8ABAAEWvEkcvDuBvDbAH+9GhnkAAAAAwABATYPGwAD99wDAAPyxg3wBAAE3/////wDAAPyvSrxrAYC8csAf7xwAAB/GvQAfx8sAH8jRAB/KrAAfzgUAH9KEAB/UBgAf1nMAH9cSAB/X4gAf2PEAH9koAB/ZXwAf2ZYAH9obAB/aUgAf2okAH9rAAB/a9wAf2y4AH9tlAB/bnAAf29MAH96kAB/hmwAf40gAH+PoAB/kiAAf5SoAH+XKAB/magAf5wgAH+e7AB/obgAf6Q4AH+lRAB/qBgAf6s4AH+vuAB/s8QAf7ucAH++2AAAAKQLAAEF+gLiA6oDwiLYDtxgAAAFgAcAAQIgAAAMEwABBgIC4gZWBrAaD7ABgA8AA/n4BaoGbYAPAAP5+wAD2SQTAAEGBgLiBzIHVCbZoAWqBsmADwAD95AJgA8AAQRAABMAAQYKAuIH2gfsJgJYAYAPAAGF4AAEFwABBkYC4ggCCAIIpAAAAA4INgikAAAACAgKCEwAABLZoYAPAAEEQAIIjAAAEgJZgA8AAYXgAAGADwABBfgE/AwgBwABBgYAAwB/w9AgBwABBgoEAwB/xAgkBggDAAECuAAAAAAoGwABBhIC4gmmCcYOsBAGvcwAAAAEDgpGDrAAAAAICAoKkAAAAg0pgA8AAXbEAgrkAAAClImADwABNnAAAYAPAAEF+AT4FPRyC04CCzMAf8V+CmAEAAWqC2WADwAD+fsAA9kkAwABds06C7IL2AAC2aGADwABBEAEegvzAAEEhAgACgIMYwB/xX4GDIMAf8W0AToNAg0kAAIYVYAPAAGFCARyDUoCDS8Af8V+wLgAAAADAAF3xPRyDbYCDZsAf8V+CkAEAAWqDcWADwAD+fsAA9kkAwABdtEqDewEfg4bAAEGRAgACgoOUwB/xqCaDnwGDg5/AH/HRYAPAAGF4AAbAAEGGgLiD4oPzhKoAAK90AWqD42ADwAD95AIAAAEDhAKEqgAAAAEBAYQMAAAAhEBgA8AAXWIAAFwBPgU9HIQdgIQYwB/yZ7AbAQABaoQ0YAPAAED/wAD2DQDAAF1zPRyERYCEQMAf8meCmAEAAWqES2ADwAD+fsAA9kkAwABdZz0chF8WhFUutmjAAEGBr3QBAAGAhG/AH/JnAMAAQSM9HIR/gIR6wB/yZ7AwAQABFoSNLoCWwABBggDAAF2ePRyEnoCEmcAf8meCkAEAAWqEomADwAD+fsAA9kkAwABdaAbAAEGHgLiEr4TEhSIAAIZ4AWqEsGADwAD95AIAAAEDhMyFIgAAAAAAAABgA8AAQRABPgFKhNUBIxaE3C62VsAAQI0uH4T0wABBkQIAAhyFDBaFAi62aMAAQYGGeAAAAADAAEEnFoUYLoCWwABBggABYAPAAEF+BsAAQYiAuIUnhTyFsAAAhnkBaoUoYAPAAP3kAgAAAQOFR4WwAAAAAAAAAGADwABBEAE+AUqFUAEjFoVXLrZWwABAjR+FcMAAQZECAAIchYgWhX4utmjAAEGBhnkAAAAAwABBKBaFly6AlsAAQYIALgFgA8AAQX4GwABBjoC4hbWFyoXZAQC2WQFqhbZgA8AA/eQCAAABA4XShdkAAAAAAAAAYAPAAPrRAUqF1QEpBsAAQYmAuIXehe+GggAAtnUBaoXfYAPAAP3kAgAAAQOGAoaCAAAAAQEBhgMAAACD21sAAGADwAD60QE+AkmGECElhhqAhhTAH/RtYAPAAEF+SoYtASo/SoY/ASIdhky2dQEAAYCGYMAf9G0AwABAqwAchnAWhmougJbAAEGCSAEAARaGeYCGc8Af9G2AlgAAwABhfQbAAEGKgLiGh4ach7UAAJcvAWqGiGADwAD95AIAAAEDhqiHtQAAAAICAoayAAAAg9tgA8AAQRAAhsYAAAClImADwABNnAAAYAPAAEEQAT4DTobihvYAALZ2YAPAAEEQARyHAhaG+C62aMAAQYGXLwIAAoCHD8Af9QGBhxbAH/UPAMAAQThJhygWh0CChyzAH/UotnfAAEFASodPAYKHVsAf9Sg/SodvASMWh4qCh3bAH/UotlbAAEE+HIeXLoZ4AAAAAMAAQYcch6QuhnkAAAAAwABBiAFgA8AAQRAGwABBi4C4h7qH1IfvAwBIAWqHu2ADwAD95AIAAAEDh9aH7wAAAAEBAYfXAAAAg9tbAABgA8AA+tEBSofhAR2H50gBAAGAh+rAH/XcAMAAQKwGwABBj4C4h/SICIhPAQCDxgFqh/VgA8AA/eQCAAABA4gRiE8AAAAAAAAAYAPAAPyXAT4BSogXAR6IHoHoAwADFoguLoCWwABBghaINS62VsAAQI0WiEEutmjAAEGBAAbAAEGMgLiIVIhniLQAACMBaohVYAPAAP3kAgAAAQOIb4i0AAAAAAAAAGADwAD+fgE+AUqIeAEkiLAFJ7caFoiHLrZowABBgSeusByIoRaImy6AlsAAQYKnFwAAAADAAGFiJ4MmAAAf8T8AH/I9AB/zHgAf85UAH/QMAB/0QwAf9NcAH/WzAB/2BAAf9mMAH/bIAAAACgABBr9igK/AAG+wwABvt8AAdPsAAbcbAAAAAQPAAG/BwAB0+wAAAAEBAcAAb8sAAACClGADwABBEAAAYAPAAP5+AT4GScAAb9UlwABv3oDAAG/ZwB/3I2ADwABAPj4EScAAcUMWwABxTBTAAHFHwB/3IwABYAPAAEA+tnfAAEBwSsAAcVsBIxbAAHFnFMAAcWLAH/cjAAFgA8AAQD62VsAAQHInm/ontxwBYAPAAP5+P07AAHGRwABxmgAAtx1gA8AA/n4BIxbAAHGhFMAAcZzAH/cjAAFgA8AAQD62VsAAQHIngPQnAAFgA8AA/n5OwABxw8AAccsAALceYAPAAP5+ASMWwABx0hTAAHHNwB/3IwABYAPAAEA+tb/AAEBxJwAjFsAAceYUwABx4cAf9yMAAWADwABAPrabwABAeidkJ4ONAWADwAD+fgFgA8AA/n5KwAByAgEkwAByLQMWwAByFhbAAHIRFMAAcgzAH/cjAAFgA8AAQD6Wg8AAQEWAvb0YgcAAchzAH/ergsAAciXAH/foP0nAAHI1JcAAcj6AwAByOcAf9yNgA8AAQUk+AUrAAHJWARzAAHKAHMAAcnAWwAByYhTAAHJdwB/3IwABYAPAAEFJtvPAAEFOgKsBAWADwAD+fgFqwABydGEDAWADwABBEGADwAD+fsAA9kwAwAD9BFgBAAEntx8AwAD9DT9JwABykyXAAHKcgMAAcpfAH/cjYAPAAEANPgNOwAByv8AAcskAALbbYAPAAP5+AR7AAHLLv2IBAAEWwABy2xTAAHLWwB/3IwABYAPAAEANtmjAAEAQAE7AAHLywABy+QAAgmpgA8AA/n4BHsAAcvu/YgEAARbAAHMLFMAAcwbAH/cjAAFgA8AAQA2bDMAAQBMASsAAcx0BJMAAczkEgcAAcybAH/kmJ2OCwABzMcAf+WEngJc/ScAAc0ElwABzSoDAAHNFwB/3I2ADwABAtT4ETsAAc2fAAHNxAAC222ADwAD+fgEewABzc79iAQABFsAAc4MUwABzfsAf9yMAAWADwABAtbZowABAuABOwABzmsAAc54AAIPWYAPAAP5+AR7AAHOgv2IBAAEWwABzsBTAAHOrwB/3IwABYAPAAEC1hdzAAEC8AE7AAHPFwABzywAAgJZgA8AA/n4BHsAAc82/YgEAARbAAHPdFMAAc9jAH/cjAAFgA8AAQLWF3cAAQLsASsAAc+0BJMAAdA0GgcAAc/bAH/nbJ2OCwAB0AcAf+hYngKeDwAB0BsAf+lEngJc/ScAAdBUlwAB0HoDAAHQZwB/3I2ADwABBfj4DTsAAdD3AAHRGAACuCmADwAD+fgEewAB0SL9iAQABFsAAdFgUwAB0U8Af9yMAAWADwABBfrZowABBgQBOwAB0b8AAdHUAAICWYAPAAP5+ARzAAHSCFsAAdHwUwAB0d8Af9yMAAWADwABBfoCWwABBgrA0AAAAAMAAYWNKwAB0mgEkwAB0swOBwAB0o8Af+tcngLyCwAB0rcAf+xI/SsAAdLsBJMAAdMkBgMAAdMTAH/cjCoCvgLCAsYCygLOAtIC1gLaAt4C4AB/7hwAewzIAHxyMAB8oVgAfOXEAH3xJAB+KRAAfiukAH5jnAB+jOQAfp0kAH6hGAB+qWwAfrGIAH8VGAB/wYwAf9vkAAAAPAB/2+wAf+4cAAAABAAIEwABBkoV9gLkAAA6A6gAAgi6CCACBEgAApIsAAQECpMqH6oFPAAC4SAAAgW4AAKRQAAEBAaSfgZ8AAKSOAAEBAaTwgcgAAL0VAACB7AAAwABDJwAAghcAAMAAclgAAII+AADAAHIhAAEBAbYYgoQAAMAAXVwAAIKyAADAAEu9AAEBAaTpguQAAMAATZgAAQEBpO2DDgAAvjYAAIMzAADAAHMJAAAAAAALAsAAQZOAuYXkhfOMVge0kwAAAWABwAD95AAAAQTAAEGWgLmF8wAElnTAAEGSAFsBMQBbARoAwABBmAALBsAAQZiAuYZkhmyHNgRBr3MAAAABA4aehzYAAAADAwOGqgAAAINKYAPAAF2xAIbGAAAAgldgA4N9AIbjAAAAsSpgA75cAABgA8AAQZMBPTUAAAAAgnFbARoAwABB9xMAAAbAAEGagLmHfoeDh+MAAq90AAAAAQOHkofjAAAAAwMDh5wAAACEQGADwABdYgCHrAAAAIJXYAODfQCHzwAAALEqYAO+XAAAXAAGwABBoYC5iDWIR4hLAQKClAAAAAEDiEuISwAAAAAAAABgA75RAAbAAEGigLmIxojPiNsBArcgAAAAAQOI24jbAAAAAAAAAGADwAD60QAGwABBo4C5iSyJNYlBAQK3IQAAAAEDiUGJQQAAAAAAAABgA8AA+tEABsAAQaSAuYmViaeJsQEChUkAAAABA4mxibEAAAAAAAAAYAO+UQAGwABBm4C5igaKFIowAAK3IgAAAAEDih6KMAAAAAEBAYorAAAAg/NgA4JSAABgA75RAAbAAEGcgLmKt4rFiuMAArcjAAAAAQOK0YrjAAAAAQEBit4AAACD82ADglIAAGADvlEABsAAQZ2AuYsciyqLSgACtyQAAAABA4s4i0oAAAABAQGLRQAAAIPzYAOCUgAAYAO+UQAGwABBnoC5i5mLp4vPAAK3JQAAAAEDi72LzwAAAAEBAYvKAAAAg/NgA4JSAABgA75RAAbAAEGfgLmMH4wtjFQAArcmAAAAAQOMQoxUAAAAAQEBjE8AAACD82ADglIAAGADvlEAAAAf/NcAH/04AB/9gQAf/acAH/3PAB/99wAf/h0AH/5PAB/+gQAf/rMAH/7lAB//FwAAAAsCwABBpYC5jMCMz5D3B7cnAAABYAHAAP3kAAABBMAAQaiAuYzPAASWdMAAQZIAWwExAFsBGgDAAEGqAAgGwABBqoC5jT6NRo4QBEGvcwAAAAEDjXeOEAAAAAMDA42DAAAAg0pgA8AAXbEAjZ8AAACCV2ADg30AjbwAAACxKmADvlwAAGADwABBpQE9NQAAAACCcVsBGgDAAHOmEwAABsAAQayAuY5XjlyOvAACr3QAAAABA45rjrwAAAADAwOOdQAAAIRAYAPAAF1iAI6FAAAAgldgA4N9AI6oAAAAsSpgA75cAABcAAbAAEGtgLmPgI+fj6kAArcoAAAAAQOPp4+pAAAAAAAAAGADwABBpQAGwABBroC5j/OQAZAdAAK3IgAAAAEDkAuQHQAAAAEBAZAYAAAAg/NgA4JSAABgA75RAAbAAEGvgLmQIZAvkE0AArcjAAAAAQOQO5BNAAAAAQEBkEgAAACD82ADglIAAGADvlEABsAAQbCAuZBSkGCQgAACtyQAAAABA5BukIAAAAABAQGQewAAAIPzYAOCUgAAYAO+UQAGwABBsYC5kIWQk5C7AAK3JQAAAAEDkKmQuwAAAAEBAZC2AAAAg/NgA4JSAABgA75RAAbAAEGygLmQwJDOkPUAArcmAAAAAQOQ45D1AAAAAQEBkPAAAACD82ADglIAAGADvlEAAAAf/4gAH//pACAAMgAgAFoAIACMACAAvgAgAPAAIAEiACABVAAAAAgCwABBs4C5kTWRRJGWB7cpAAABYAHAAP3kAAAAAQXAAEG3AAAAAAQAAAMAAAAAAAAAAABgA8AAQbMBPwEJAQDAAP36AAAAAAEGwABBtYC5kVaRcZGUAAK3KgAAAAEDkXyRlAAAAAEBAZGMAAAAllJgA71RAABgA8AAQbgAAAAgAcUAIAH5AAAAAQLAAEG4gLmTCJMXmJ0HpOAAAAFgAcAA/eQAAAAACgbAAEG6gLmTfpOGlTIEAa9zAAAAAQOTs5UyAAAABAQEk8YAAACDSmADwABdsQCT4wAAALQRYAPAAHJeAJQCAAAApSJgA8AATZwAlCIAAAClWmADwABDKAAAYAPAAEG4AT4DTpQ7lEUAALcrYAPAAPrRARyUToCUR8AgAkSvkQAAAADAAF2/SZRehJRiwCAChz4BSpR1AR+UgMAAQhEBAAGClKLAIAJgAD9KlLoBHpTFwABB3wQABICVAMAgAkSBlQjAIAJSgpUUwCACYIOVIcAgAm4ABsAAQbyAuZV1lXqVswACr3QAAAABA5WJlbMAAAACAgKVkwAAAIRAYAPAAF1iAJWoAAAAtBFgA8AAcl4AAFwABsAAQcSAuZW4lcmV1AECpSIAAAABA5XUldQAAAAAAAAAYAPAAE2cAAbAAEHFgLmV2ZXqlfYBAqVaAAAAAQOV9pX2AAAAAAAAAGADwABDKAAGwABBvYC5lfuWG5Y+AAK0qQAAAAEDlimWPgAAAAEBAZY3AAAAgmpgA708AABgA8AAQZMABsAAQb6AuZZDllGWcwACtKsAAAABA5ZilnMAAAABAQGWaQAAAIDtYAO9dQAAYAO+UQAGwABBv4C5luiW9pc1AAK3LAAAAAEDlwqXNQAAAAICApcUAAAApTRgA8AAS88AlywAAACFj2ADvlEAAGADvlEABsAAQcCAuZeVl5qXygACty0AAAABA5e4l8oAAAABAQGXxQAAAIPzYAOCUgAAYAPAAPrRAAbAAEHBgLmYB5gVmDQAArcuAAAAAQOYIpg0AAAAAQEBmC8AAACD82ADglIAAGADvlEABsAAQcKAuZhqmHiYmwACty8AAAABA5iJmJsAAAABAQGYlgAAAIPzYAOCUgAAYAO+UQAAACACJAAgAvgAIAM3ACADXwAgA4cAIAO7ACAD7QAgBC0AIARhACAEkwAgBMUAAAAKAsAAQcaAuZjQmNaeCgOk4QAAAWABpFEAAAQEwABByIC5mWeZfgmAvQFqmU9gA8AA/eQCYAPAAP5+ASe3MATAAEHJgLmZkpmaCYKaAGADpJEABMAAQcqAuZo6mk8YtzEAYAPAAHIuASsEwABBy4C5mm+agBi3MgBgA8AAQbgBKwEFwABBz4C5moWahZrtAAAAA5qcmu0AAAABAQGapgAAAIKaYAOkkQAAYAPAAEHGAT8CCADAAEHJgJrDwCAFkQkAmtWkcQEAARaa5ICa28AgBZGWnKS3AAEGwABBzYC5myebQp4IAAClUQAAAAEDm1ieCAAAAAMDA5toAAAAtzNgA71RAJuIAAAApSJgA8AATZwAm6kAAAClT2ADwABDMgAAYAPAAEG4AT4BSpvEARybyy6W2gEBYAPAAEG4ATSb0wOb054DAAAAAAAAAGADwABBuAE+BU6b+QAAALc0YAPAAEG4AEmcCBacFRacDC6CmsAAQcmCrKTBPgE9i5w1wCAGSx+cQ8AAQhEBAAGBnGXAIAX5AD4CPSMcnKAWnIoutzHAAEHKSAEAASsAwAD98Recii63MSacigEcnMoWnK0WnKQugprAAEHJpPKklK9oAgACgZzewCAF+YKc68AgBgcAtm5gA8AAci7AAEHKKwFgA8AAQbM9i50JwCAGSxydKRadEy63McAAQcq3KgEAAYCdNcAgBe0AwAByOT0cnW4WnV2BnVHAIAX5tzXAAE2ntzYBAAGDnY/AIAZLAMAAcFNJnZ8anaOkjT4BPRedwy63MoOd18AgBkvAAEHLP0qd7gGDnfXAIAZLAKRjAAAgBc0AIAdgAAAAAQLAAEHQgLmeDZ4TvJsDtzcAAAFgAcAA/eQAAWABwABBuAsEwABB0oC5nuGfBgaD7ABgA8AA/n4Bap7nYAPAAP5+wAD2TwTAAEHTgLmfKp81CaUiAWqfDGADwAD95AJgA8AATZwABMAAQdSAuZ9Yn2QJpVoBap86YAPAAP3kAmADwABDKAAEwABB1oC5n46fngm3OcAAQZIAYAPAAEGTAATAAEHXgLmfyJ/ZCbc6wABBkgBgA8AAQZMABMAAQdiAuZ/xoAgJtzvAAEGSAGADvlEABMAAQdqAuaBGoFMJtzwAXQPAAP1tAmADvTxgA8AAQZMABMAAQduAuaB3oIcJtz0AXQPAAP1tAmADvXVgA75RAATAAEHcgLmgoqC5Cbc+AF0DwAD+LwFgA4JSAATAAEHdgLmg0aDqCbc/AF0DwAD+LwFgA8AAS88ABMAAQdmAuaEUoSMJt0DAAEGSAF0DwAD9bQJgA4JSYAO+UQABBcAAQeyAuaEooSijRwAAAAOhRqNHAAAABwcHoVMAAASlImADwABNnAChawAABKVaYAPAAEMoAKGEAAAEtzxdA8AA/W0CYAO9PGADwABBkwChngAABLc9XQPAAP1tAmADvXVgA75RAKG7AAAEtz5dA8AA/i8BYAOCUgCh3wAABLc/XQPAAP4vAWADwABLzwCiBQAABLdAXQPAAP1tAmADglJgA75RAABgA8AAQdABPwsIAcAAQdOAAMAgCPUIAcAAQdSBAMAgCQMIAcAAQdqCAMAgCREIAcAAQduDAMAgCSoIAcAAQdyEAMAgCUEIAcAAQd2FAMAgCVQIAcAAQdmGAMAgCWkIAMAAQdYfojXAAEI0AQABFqJxgKJlwCAI9bEqwABNpQAIAMAAQdcfoqfAAEJGAQABFqLkgKLYwCAI9bEqwABNpQAIAMAAQdgWozwWoyiAoxzAIAj1sSrAAE2lnqW+XgkBoSjAAP36AAAAAAsGwABB34C5o0yjVKiIBAGvcwAAAAEDo4WoiAAAAAQEBKOYAAAAg0pgA8AAXbEAo7UAAAC0EWADwAByXgCj1AAAAKUiYAPAAE2cAKP0AAAApVpgA8AAQygAAGADwABB0AE+CD0cpA+ApAjAIApqgpgBAAFqpBVgA8AA/n7AAPZPAMAAXbNOpFKkYAAAtzxdA8AA/W0CYAO9PGADwABBkwEcpHGApGrAIApqtFQBAmADvTxgA8AAQZMBNKR/A6R/pV0AAAABAQGkjQAAAIJqYAO9PAAAYAPAAEGTAUqkpAEepKjAAEH3AwADgKTswCAKahylD4GlBMAgCni3QQEAAYSlJMAgCxAAwAByfBalSYKlPcAgCoaxKsAATaUAAMAAXetOpX6ljwAAtz1dA8AA/W0CYAO9dWADvlEBHKWYgKWRwCAKardCAQJgA711YAO+UQE0paUDpaWmBwAAAAAAAABgA75RAUqlswEcpeAWpb+CpbPAIAqGsSrAAE2lsSsBAAGApgDAIApqAL7NAMAAXfBOph+mNwAAtz5dA8AA/i8BYAOCUgEcplAcpkCApjnAIApqt0MAAWADglIAAMAAXdOVSQAAAADAAP0QTqZrpoUAALc/XQPAAP4vAWADwABLzwEcps4cppaApo/AIApqr40BAWADwABLzwE0pp8Dpp+mzAAAAAAAAABgA8AAS88BSqalAR6mqcAATAUBAAGApsXAIApqAADAAF2+lUkAAAAAwAD9EE6m+6cKAAC3RF0DwAD9bQJgA4JSYAO+UQEcpxOApwzAIApqt0UBAmADglJgA75RATSnLAOnLKeGAAAAAAAAAGADvlEBSqcyARynXxanPoKnMsAgCoaxKsAATaWxKwEAAYCnf8AgCmoAvs0AwABd1D0cp5SAp43AIApqgpABAAFqp5hgA8AA/n7AAPZPAMAAXbRKp6IBH6etwABB7AcAB4Kn1cAgCoaDp+rAIAqUhKgAwCAKz4WoF8AgC2uGqDHAIAvah6hSwCAMFBSodcAgDH4IAAAGwABB4YC5qI2onqxNAACvdAFqqI5gA8AA/eQCAAABA6itrE0AAAACAgKotwAAAIRAYAPAAF1iAKjMAAAAtBFgA8AAcl4AAFwBPgg9HKjjgKjewCANeq+YAQABKgDAAF1sPRypE4CpDsAgDXqCmAEAAWqpGWADwAD+fsAA9k8AwABdZz0cqSiAqSPAIA16tFwCAWADwABBkwIWqUAutzzAAEHaNKlXA6lXqjsAAAACAgKpZQAAAIJqYAO9PACpjQAAAIF2YAPAAEGTAABcAUqppAEcqauDqaTAIA4Nr3QDAAOAqczAIA16HKntganiwCANiLdBAQABgqoCwCAOAQDAAHJ8FqonFqobLqUiwABB07EqwABNpQDAAEGaAMAAXZg9HKpHgKpCwCANerdGAgFgA75RAhaqXi63PcAAQds0qngDqniq5wAAAAEBAaqHAAAAgJZgA75RAABcAUqqkQEcqr4Wqp0WqpEupSLAAEHTsSrAAE2lsTICAAKAqtvAIA16gqrhwCAOnAC+zgDAAF2dPRyq84Cq7sAgDXq3RwEAARarAi63PsAAQdwAwABdgD0cqyWAqyDAIA16iGkCAWADwABLzwIWqy8utz/AAEHdNKtSA6tSq4cAAAABAQGrXAAAAKU0YAPAAEvPAABcAUqraQEcq3KCq2nAIA8tr3QBAAGAq4LAIA16AMAAS+sAwABdaz0cq5OAq47AIA16t0gCAWADvlECFqutLrdAwABBksAAQdk0q8YDq8asNQAAAAEBAavVAAAAgJZgA75RAABcAUqr3wEcrAwWq+sWq98upSLAAEHTsSrAAE2lsTICAAKArCnAIA16gqwvwCAPkgC+zgDAAF2BPRysQYCsPMAgDXqCkAEAAWqsRWADwAD+fsAA9k8AwABdaAbAAEHigLmsUqx+rukAALSpAWqsU2ADwAD95AIAAAEDrIyu6QAAAAEBAayaAAAAgmpgA708AABgA8AAQZMBPgJAISWsv4CsuMAgECJgA71wrLis2AEerOK2HwIAAoCs+MAgECIkAAInt0knt0oASq58ATUAAAABAGADwABBkwEcrpAWroMutzzAAEHaSwEAAYCukcAgECIAwAD9gSMcrpmBAMAgEGtIAQABKwAAIyWurICupcAgECJgA71RFq7ALrc6wABBksAAQdcWrtQutznAAEGSwABB1gFgA8AAQZOBAMAgEGsBYAPAAEGTBsAAQeOAua7urwiwRgAAtKsBaq7vYAPAAP3kAgAAAQOvGbBGAAAAAQEBryAAAACA7WADvXUAAGADvlEBPgFKsAUBNQAAAAEAYAO+UQEcsBwWsAwutz3AAEHbSwEAAYCwHcAgEQ4AwAD9gSMcsCiBAMAgESdIAQABKwAAFrArLrc7wABBksAAQdiBAMAgEScBYAO+UQbAAEHkgLmwS7BltNgAALcsAWqwTGADwAD95AIAAAEDsHm02AAAAAICArCKAAAApTRgA8AAS88AsKIAAACFj2ADvlEAAGADvlEBPgVJsQEWsQ6AsQXAIBGit0vAAEviSrEjARaxShaxNhaxKi6lIsAAQdOxKsAATaWepb5eP0mxWyIWsWiAsV/AIBGihUTAAEvgARaxfYCxdMAgEaK3TMAAS+Q+AUqxkQEWsbgWsaQWsZgupSLAAEHTsSrAAE2lnqW+Xj9Jsc8csdMut00CAAKAserAIBGigbH0wCARsADAAEHlPgFKsgcBHLIuFrIaFrIOLqUiwABB07EqwABNpbXkAQABgbJGwCARsAC+rj9Jslscsl8ut04CAAKAsnPAIBGigbJ9wCARsADAAEHmPgFKspABHLK3FrKjFrKXLqUiwABB07EqwABNpbXqAQABgbLHwCARsAC+tj9Jst0csu0WsuEupSLAAEHTtrwCAAKAswHAIBGigbMLwCARsADAAE2/PgFKsx4BFrNFFrMxFrMlLqUiwABB07EqwABNpZ6lvl4+BE6zfLOFAACIal0DwAD8+QFgA708ARyznRazkS6lIsAAQdO02wIAAoCzq8AgEaKBs7XAIBGwAMAATcFOs9qz4AAAhX1dA8AA/TsBYAO+UQExs/FgA75RAEaz+7QitA0AAACWUmADvTwAgrQYwCATHT4CTrQ6tD8AAIKUYAO+UQEctEEut08CAAKEtFrAIBN4gLRjwCARogDAAEHnPRy0fIO0dsAgE1dWAQABhbSAwCATjgDAAP1MSrSVARy0vBa0qBa0nC6lIsAAQdOxKsAATaW13AEAAYO0yMAgE1cAvqcGwABB5YC5tN204rWyAAC3TQAAAAEDtPi1sgAAAAICArUCAAAApTRgA8AAS88AtRoAAACtLGADvlEAAGADwAD60QE+AUq1JgEiIiEctTKBtS3AIBQpSAEAASsAwAD98QActWUWtVEWtUUupSLAAEHTsSrAAE2ltd8BAAGBtXHAIBQpAL6sABy1nBa1gi63P8AAQd2DHAEAAYC1pcAgFBsAwAD+OwbAAEHmgLm1t7W8tmcAALdOAAAAAQO1z7ZnAAAAAgICtdkAAAClNGADwABLzwC18QAAAK0sYAO+UQAAYAPAAPrRAT4BSrX9ASIiIRy2CYG2BMAgFM1IAQABKwDAAP3xABy2PBa2KBa2HC6lIsAAQdOxKsAATaWsxgEAAYG2QsAgFM0AvrMAFrZcgLZTwCAUv7dQwABL4wbAAEHngLm2bLZ6ursAALdPAAAAAQO2krq7AAAAAgICtqcAAACWUmADvTwAtrkAAAClNGADwABLzwAAYAO+UQE+AUm2ySIcttoWttWAts3AIBVVgL29GEgBAAFqtulgA8AA/n7AAO95AMAA/o0AIRy3EBa3C4G3AsAgFWGAvcAAS91IAQABFrcbgLcTwCAVVYC9vRgAwAD+jT4BSreiARa3wRy3qS60qQEAAYC3uMAgFVUAwABB4oVJwABBpEm32Ba35YG33MAgFWGFQsAAS98+AUm39xa4A4C3+8AgFVWzNr1EPgFKuFgBFrh/FrhrFrhfLqUiwABB07EqwABNpYVKvmBJuJoWuKaAuJ7AIBVVh469Qz4BSri5ARa42By4wC60qQEAAYC4z8AgFVUAwABB4oKUwABBoUm46xa494C478AgFVWFQr1FPgFKuQsBFrkqHLkSLrSpAQABgLkhwCAVVQDAAEHihUnAAEGkPgJAKrlUuVkBHrlbth8CAAKAuWTAIBVVJLmJAie3UYC5gcAgFVUASrmVARa5vBa5qBa5nC6lIsAAQdOxKsAATaWepb5eSbncIha56IC54MAgFVWFQr1FARa5/IC59MAgFVWHjr1DPgJAIha6HYG6FMAgFWGzFcAAS+EBFrowgbonwCAVYYVEwABL4LoUujgASrpBARa6aBa6VBa6SC6lIsAAQdOxKsAATaWepb5ePgFKuogBFrqnHLqPLrSpAQABgLqewCAVVQDAAEHihUnAAEGkBsAAQeiAubt6u4u77wAAty0Bart7YAPAAP3kAgAAAQO7qbvvAAAAAQEBu7IAAAC3UmADgksAAGADwAD60QFKu8UBHLvdFrvFLrc+wABB3IMcAQABgLvmwCAXngDAAP47BsAAQemAubv0vA68QgAAty4Barv1YAPAAP3kAgAAAQO8G7xCAAAAAQEBvCQAAACD82ADgksAAGADvlEBSrwtARy8PBa8LS63QMAAQZLAAEHZSwEAAYC8PcAgF/4AwAD9gQbAAEHqgLm8R7xhvJkAALcvAWq8SGADwAD95AIAAAEDvHK8mQAAAAEBAbx7AAAAg/NgA4JLAABgA75RAUq8hAEcvJMWvIQut0DAAEGSwABB2UsBAAGAvJTAIBhfAMAA/YEAACAKSgAgDVAAIA/4ACAQ5AAgEXgAIBP7ACAUnwAgFTUAIBd0ACAX1AAgGDUAIBiWAAAACwLAAEHtgLm8nrykwABGHgO3UwAAAWABwAD95AABYAHAAEGTBgTAAEHvgLm9hb2wBoPsAGADwAD+fgFqvYtgA8AA/n7AAPZSBMAAQfGAub3avd8Jt1XAAEGSAGADwABBpQAEwABB8oC5vgO+DQmFSQFqveRgA8AA/eQCYAO+UQAEwABB84C5vjG+NQmClAFqvhJgA8AA/eQCYAO+UQAEwABB9IC5vlC+XAm3IQFqvjpgA8AA/eQCYAPAAPrRAATAAEH1gLm+d76DCbcgAWq+YWADwAD95AJgA8AA+tEAAQXAAEIAgLm+iL6IvwEAAAADvqu/AQAAAAUDA76xAAAEt1VgA8AAQaUAvr0AAASFSWADvlEAvs4AAASClGADvlEAAr7gAAAEtyFgA8AA+tEBagBgA8AA/aF5vvMAAAS3IGADwAD60QFqAGADwAD9oXlgA8AAQe0BPwYIAcAAQfGAAMAgGcQIAcAAQfKBAMAgGdIIAcAAQfOCAMAgGd4IAcAAQfSDAMAgGesIAcAAQfWEAMAgGgIJAb6IwAD9+gAAAAAHBsAAQfeAub8Gvw7AAEI+BAGvcwAAAAEDv0TAAEI+AAAAAwMDv1cAAACDSmADwABdsQC/bwAAAIJXYAODfQC/kgAAALEqYAO+XAAAYAPAAEHtAT4IPRy/tIC/rcAgGo+CmAEAAWq/umADwAD+fsAA9lIAwABds06/47/oAAASYAPAAEGlARy/8YC/6sAgGo+xJQEBYAPAAEGlATTAAEABA8AAQAHAAECAAAAAAAAAAGADwABBpQE+AUrAAEAMAR7AAEAXwABzpgMAA4DAAEBUwCAaj4HAAEBcwCAanYLAAEBlwCAaqQAAwABdvU7AAECVwABAoAAAhUlgA75RARzAAEC+gsAAQKrAIBqpsSsBAAGAwABA3sAgGo8Avs1OwABA+cAAQP4AAIKUYAO+UQEcwABBHILAAEEIwCAaqbErAQABgMAAQTzAIBqPAL7NTsAAQU7AAEFbAAC3IWADwAD60QEcwABBZIDAAEFdwCAaj6+RAAAAAMAAXb9OwABBecAAQYYAALcgYAPAAPrRARzAAEGPgMAAQYjAIBqPr5EAAAAAwABdvz0cwABBpoDAAEGfwCAaj4KQAQABasAAQapgA8AA/n7AAPZSAMAAXbRKwABBtAEfwABBv8AAQgAFAAODwABB48AgGuKEwABB6cAgG1eFwABB9cAgG4gCtyGGwABCEcAgG7m3IIfAAEItwCAb5QbAAEH5gLnAAEJDwABCVMAAREAAAK90AWrAAEJEYAPAAP3kAgAAAQPAAEJjwABEQAAAAAMDA8AAQm0AAACEQGADwABdYgDAAEJ9AAAAgldgA4N9AMAAQqAAAACxKmADvlwAAFwBPgc9HMAAQsCAwABCu8AgHLKCmAEAAWrAAELGYAPAAP5+wAD2UgDAAF1nPRzAAELVgMAAQtDAIByyt1YCAWADwABBpQIWwABC5i63VcAAQZLAAEHxNMAAQu0DwABC7cAAQ1oAAAABAQHAAEMNAAAAEmADwABBpQAAYAPAAP2hAT4BPRzAAEMgg8AAQxvAIB1Jr3QDAAOAwABDMMAgHLKBwABDNsAgHMKCwABDP8AgHNAAwABBrADAAF1qPRzAAEN1gsAAQ2HAIBzQsTICAAKAwABDksAgHLIWwABDmC6FScAAQfIAvs49HMAAQ72CwABDqcAgHNCxMgIAAoDAAEPawCAcshbAAEPgLoKUwABB8wC+zj0cwABD8IDAAEPrwCAcsq+YAQABFsAAQ/outyHAAEH0AMAAXWw9HMAARBKAwABEDcAgHLKvmAEAARbAAEQcLrcgwABB9QDAAF1sPRzAAEQ0gMAARC/AIByygpABAAFqwABEOGADwAD+fsAA9lIAwABdaAbAAEH6gLnAAERFwABEX8AARJIAALciAWrAAERGYAPAAP3kAgAAAQPAAERpwABEkgAAAAEBAcAARHIAAACD82ADgksAAGADvlEBSsAARHsBNQAAAAEAYAPAAEGlARbAAER7LrdVwABBksAAQfEjHMAARIKBAMAgHrZIAQABKwAAKxzAAESCgQDAIB62tyIBAAEmwABEjQGAwABEjcAgHptgA4JSAMAAQa4BYAO+UQbAAEH7gLnAAESWwABEsMAAROcAALcjAWrAAESXYAPAAP3kAgAAAQPAAES8wABE5wAAAAEBAcAARMUAAACD82ADgksAAGADvlEBSsAARM4BNQAAAAEAYAPAAEGlARbAAETOLrdVwABBksAAQfEjHMAARNWBAMAgH2RIAQABKwAAKxzAAETVgQDAIB9ktyMBAAEmwABE4gGAwABE4sAgH0lgA4JSAMAAQa8BYAO+UQbAAEH8gLnAAETrwABFBcAARUAAALckAWrAAETsYAPAAP3kAgAAAQPAAEUTwABFQAAAAAEBAcAARRwAAACD82ADgksAAGADvlEBSsAARSUBNQAAAAEAYAPAAEGlARbAAEUlLrdVwABBksAAQfEjHMAARSyBAMAgIBJIAQABKwAAKxzAAEUsgQDAICAStyQBAAEmwABFOwGAwABFO8AgH/dgA4JSAMAAQbABYAO+UQbAAEH9gLnAAEVEwABFXsAARa8AALclAWrAAEVFYAPAAP3kAgAAAQPAAEV0wABFrwAAAAEBAcAARX0AAACD82ADgksAAGADvlEBSsAARYwBNQAAAAEAYAPAAEGlARbAAEWMLrdVwABBksAAQfEjHMAARZOBAMAgIMBIAQABKwAAKxzAAEWTgQDAICDAtyUBAAEmwABFqgGAwABFqsAgIKVgA4JSAMAAQbEBYAO+UQbAAEH+gLnAAEWzwABFzcAARhwAALcmAWrAAEW0YAPAAP3kAgAAAQPAAEXiwABGHAAAAAEBAcAAResAAACD82ADgksAAGADvlEBSsAARfoBNQAAAAEAYAPAAEGlARbAAEX6LrdVwABBksAAQfEjHMAARgGBAMAgIW5IAQABKwAAKxzAAEYBgQDAICFutyYBAAEmwABGFwGAwABGF8AgIVNgA4JSAMAAQbIBYAO+UQAAIBprACAcfAAgHmUAIB8TACAfwQAgIG8AICEdACAhywAAAAcCwABCAYC5wABGIcAARifAAEs8A7dXAAABYAHAAP3kAAFgAcAAQbgEBMAAQgOAucAARpLAAEadCaUiAWrAAEZ0YAPAAP3kAmADwABNnAAEwABCBYC5wABGzsAARuIJt1jAAEGSAGADwABCEgAEwABCBoC5wABG+sAARxEJtzvAAEGSAGADvlEABMAAQgeAucAARzTAAEdcCaVaAWrAAEcWYAPAAP3kAmADwABDKAEfwABHR8AAQ3QAAAAAAQXAAEIRgLnAAEdhwABHYcAASGcAAAADwABHgsAASGcAAAABAQHAAEeIAAAEpSJgA8AATZwAAGADwABCAQE/BAgBwABCA4AAwCAi0QgAwABCBR/AAEe4wABCIgEAARbAAEgMFsAAR/iAwABH7MAgItGxKsAATaWepb5eAAgAwABCBhbAAEhcFsAASEiAwABIPMAgItGxKsAATaWepb5eCQHAAEdhwAD9+gAAAAAHBsAAQgmAucAASGzAAEh9wABI5AAAr3QBasAASG1gA8AA/eQCAAABA8AASIzAAEjkAAAAAgICwABIlgAAAIRAYAPAAF1iAMAASKsAAAC0EWADwAByXgAAXAE+AT0cwABIwoDAAEi9wCAjj6+YAQABKQDAAF1sBsAAQgqAucAASOnAAEj6wABJLwAAty0BasAASOpgA8AA/eQCAAABA8AASRjAAEkvAAAAAQEBwABJIQAAAIPzYAOCSwAAYAPAAPrRAUrAAEkqASoGwABCC4C5wABJNMAASU7AAEnGAAC3LAFqwABJNWADwAD95AIAAAEDwABJYsAAScYAAAACAgLAAElsAAAApTRgA8AAS88AwABJhAAAAK0sYAO+UQAAYAO+UQE+AUrAAEmQARbAAEm3FsAASaMWwABJly6lIsAAQgOxKsAATaWepb5eBsAAQgyAucAAScvAAEnlwABKMAAAtKsBasAAScxgA8AA/eQCAAABA8AASfbAAEowAAAAAQEBwABJ/QAAAIDtYAO9dQAAYAO+UQE+AUrAAEoOARbAAEoVLrc7wABBksAAQgYGwABCDYC5wABKNcAASmHAAEqqAAC0qQFqwABKNmADwAD95AIAAAEDwABKb8AASqoAAAABAQHAAEp9AAAAgmpgA708AABgA8AAQZMBPgFKwABKiwEWwABKki63WMAAQZLAAEIFBsAAQg6AucAASq/AAErJwABK9AAAty8BasAASrBgA8AA/eQCAAABA8AAStrAAEr0AAAAAQEBwABK5wAAAIPzYAOCUgAAYAO+UQFKwABK8AErBsAAQg+AucAASvnAAEsTwABLOgAAty4BasAASvpgA8AA/eQCAAABA8AASyDAAEs6AAAAAQEBwABLLQAAAIPzYAOCUgAAYAO+UQFKwABLNgErAAAgI1kAICPOACAkIQAgJKMAICUFACAlaQAgJboAICYLAAAABwLAAEISgLnAAEs/wABLRcAATwMDt1kAAAFgAcAA/eQAAWABwABBkwEEwABCFIC5wABLs8AAS74JnqUAYAO+UQABBcAAQiKAucAAS8PAAEvDwABL+wAAAAPAAEvpwABL+wAAAAEBAcAAS+8AAASepWADvlEAAGADwABCEgE/AggBwABCFIAAwCAmlgkBwABLw8AA/foAAAAACgbAAEIWgLnAAEwAwABMHsAATDEBAIKUAWrAAEwBYAPAAP3kAgAAAQPAAEwjwABMMQAAAAAAAABgA75RAUrAAEwmARbAAEwmLp6lwABCFAbAAEIXgLnAAEw2wABMVMAATG0BAIVJAWrAAEw3YAPAAP3kAgAAAQPAAExfwABMbQAAAAAAAABgA75RAUrAAExiARbAAExiLp6lwABCFAbAAEIYgLnAAExywABMh8AATJwBALchAWrAAExzYAPAAP3kAgAAAQPAAEyUwABMnAAAAAAAAABgA8AA+tEBSsAATJcBKgbAAEIbgLnAAEyhwABMu8AATOYAALcmAWrAAEyiYAPAAP3kAgAAAQPAAEzQwABM5gAAAAEBAcAATNkAAACD82ADgksAAGADvlEBSsAATOIBKwbAAEIcgLnAAEzrwABNBcAATTEAALclAWrAAEzsYAPAAP3kAgAAAQPAAE0bwABNMQAAAAEBAcAATSQAAACD82ADgksAAGADvlEBSsAATS0BKwbAAEIdgLnAAE02wABNUMAATXQAALckAWrAAE03YAPAAP3kAgAAAQPAAE1ewABNdAAAAAEBAcAATWcAAACD82ADgksAAGADvlEBSsAATXABKwbAAEIegLnAAE15wABNk8AATbUAALcjAWrAAE16YAPAAP3kAgAAAQPAAE2fwABNtQAAAAEBAcAATagAAACD82ADgksAAGADvlEBSsAATbEBKwbAAEIfgLnAAE26wABN1MAATfQAALciAWrAAE27YAPAAP3kAgAAAQPAAE3ewABN9AAAAAEBAcAATecAAACD82ADgksAAGADvlEBSsAATfABKwbAAEIZgLnAAE35wABODsAATiMBALcgAWrAAE36YAPAAP3kAgAAAQPAAE4bwABOIwAAAAAAAABgA8AA+tEBSsAATh4BKgbAAEIggLnAAE4owABOOcAATwEAAK90AWrAAE4pYAPAAP3kAgAAAQPAAE5IwABPAQAAAAMDA8AATlIAAACEQGADwABdYgDAAE5iAAAAgldgA4N9AMAAToUAAACxKmADvlwAAFwBPgE9MMAATqAfwABOqsAA/CkBAAEnt1oAAAAgJskAICcXACAnZQAgJ6oAICf7ACAoTAAgKJ0AICjuACApPwAgKYQAICoBAAAACgLAAEIjgLnAAE8GwABPDMAAU0ADt1sAAAFgAcAA/eQAAWABwABBkwIEwABCJYC5wABPdsAAT4EJnqUAYAO+UQAEwABCJoC5wABPmcAAT6IJtasAYAO+UQABBcAAQjSAucAAT6fAAE+nwABQPgAAAAPAAE/JwABQPgAAAAEBAcAAT94AAAC3XGADvlwAAGADwABCIwE/AwgAwABCJRbAAFAIgMAAUAHAICqwnqW+XggAwABCJhbAAFA1gMAAUC7AICqwtau+cwkBwABPp8AA/foAAAAACgbAAEIogLnAAFBDwABQYcAAUHIBAIKUAWrAAFBEYAPAAP3kAgAAAQPAAFBmwABQcgAAAAAAAABgA75RAUrAAFBpARbAAFBpLrWrwABCJgbAAEIpgLnAAFB3wABQlcAAUK4BAIVJAWrAAFB4YAPAAP3kAgAAAQPAAFCgwABQrgAAAAAAAABgA75RAUrAAFCjARbAAFCjLp6lwABCJQbAAEIqgLnAAFCzwABQyMAAUN0BALchAWrAAFC0YAPAAP3kAgAAAQPAAFDVwABQ3QAAAAAAAABgA8AA+tEBSsAAUNgBKgbAAEItgLnAAFDiwABQ/MAAUScAALcmAWrAAFDjYAPAAP3kAgAAAQPAAFERwABRJwAAAAEBAcAAURoAAACD82ADgksAAGADvlEBSsAAUSMBKwbAAEIugLnAAFEswABRRsAAUXIAALclAWrAAFEtYAPAAP3kAgAAAQPAAFFcwABRcgAAAAEBAcAAUWUAAACD82ADgksAAGADvlEBSsAAUW4BKwbAAEIvgLnAAFF3wABRkcAAUbUAALckAWrAAFF4YAPAAP3kAgAAAQPAAFGfwABRtQAAAAEBAcAAUagAAACD82ADgksAAGADvlEBSsAAUbEBKwbAAEIwgLnAAFG6wABR1MAAUfYAALcjAWrAAFG7YAPAAP3kAgAAAQPAAFHgwABR9gAAAAEBAcAAUekAAACD82ADgksAAGADvlEBSsAAUfIBKwbAAEIxgLnAAFH7wABSFcAAUjUAALciAWrAAFH8YAPAAP3kAgAAAQPAAFIfwABSNQAAAAEBAcAAUigAAACD82ADgksAAGADvlEBSsAAUjEBKwbAAEIrgLnAAFI6wABST8AAUmQBALcgAWrAAFI7YAPAAP3kAgAAAQPAAFJcwABSZAAAAAAAAABgA8AA+tEBSsAAUl8BKgbAAEIygLnAAFJpwABSesAAUz4AAK90AWrAAFJqYAPAAP3kAgAAAQPAAFKJwABTPgAAAAMDA8AAUpMAAACEQGADwABdYgDAAFKjAAAAgldgA4N9AMAAUsYAAACxKmADvlwAAFwBPgE9MMAAUuEfwABS68AA/CkBAAEnt10AAAAgKwcAICtVACArowAgK+gAICw5ACAsigAgLNsAIC0sACAtfQAgLcIAIC4/AAAACgLAAEI1gLnAAFNDwABTScAAV4MDt14AAAFgAcAA/eQAAWABwABBkwIEwABCN4C5wABTtMAAU70JtasAYAO+UQAEwABCOIC5wABT1cAAU+EJhUoAYAO+UQABBcAAQkaAucAAU+bAAFPmwABUgAAAAAPAAFQJwABUgAAAAAEBAcAAVB4AAAC3XGADvlwAAGADwABCNQE/AwgAwABCOBbAAFRJgMAAVELAIC7uhUq+YAgAwABCNxbAAFR3gMAAVHDAIC7utau+cwkBwABT5sAA/foAAAAACgbAAEI6gLnAAFSFwABUo8AAVLcBAIKUAWrAAFSGYAPAAP3kAgAAAQPAAFSowABUtwAAAAAAAABgA75RAUrAAFSrARbAAFSrLoVKwABCOAbAAEI7gLnAAFS8wABU2sAAVPEBAIVJAWrAAFS9YAPAAP3kAgAAAQPAAFTlwABU8QAAAAAAAABgA75RAUrAAFToARbAAFToLrWrwABCNwbAAEI8gLnAAFT2wABVC8AAVSABALchAWrAAFT3YAPAAP3kAgAAAQPAAFUYwABVIAAAAAAAAABgA8AA+tEBSsAAVRsBKgbAAEI/gLnAAFUlwABVP8AAVWoAALcmAWrAAFUmYAPAAP3kAgAAAQPAAFVUwABVagAAAAEBAcAAVV0AAACD82ADgksAAGADvlEBSsAAVWYBKwbAAEJAgLnAAFVvwABVicAAVbUAALclAWrAAFVwYAPAAP3kAgAAAQPAAFWfwABVtQAAAAEBAcAAVagAAACD82ADgksAAGADvlEBSsAAVbEBKwbAAEJBgLnAAFW6wABV1MAAVfgAALckAWrAAFW7YAPAAP3kAgAAAQPAAFXiwABV+AAAAAEBAcAAVesAAACD82ADgksAAGADvlEBSsAAVfQBKwbAAEJCgLnAAFX9wABWF8AAVjkAALcjAWrAAFX+YAPAAP3kAgAAAQPAAFYjwABWOQAAAAEBAcAAViwAAACD82ADgksAAGADvlEBSsAAVjUBKwbAAEJDgLnAAFY+wABWWMAAVngAALciAWrAAFY/YAPAAP3kAgAAAQPAAFZiwABWeAAAAAEBAcAAVmsAAACD82ADgksAAGADvlEBSsAAVnQBKwbAAEI9gLnAAFZ9wABWksAAVqcBALcgAWrAAFZ+YAPAAP3kAgAAAQPAAFafwABWpwAAAAAAAABgA8AA+tEBSsAAVqIBKgbAAEJEgLnAAFaswABWvcAAV4EAAK90AWrAAFatYAPAAP3kAgAAAQPAAFbMwABXgQAAAAMDA8AAVtYAAACEQGADwABdYgDAAFbmAAAAgldgA4N9AMAAVwkAAACxKmADvlwAAFwBPgE9MMAAVyQfwABXLsAA/CkBAAEnt10AAAAgL0UAIC+TACAv4QAgMCYAIDB3ACAwyAAgMRkAIDFqACAxuwAgMgAAIDJ9AAAACgAAAYC5ACAysAAf/JsAH/9MACABfQAgAgYAIAT2ACAHbQAgGMsAICHwACAmMAAgKjIAIC5wACAyrgAAAAsAIDKwAAAAAAACBMAAQke3X4C6AAAIgP8AAIIugggAgScAAKSLAACBQAAAvRUAAIFkAADAAGQAAAEBAbdggaEAAMAAXVwAAIHPAADAAGkfAACB+QAAlBMAAIIUAADAAHO2AAAAAAAKAsAAQkuAuoKlgrSJDQek4gAAAWABwACUXgAAAAEFwABCWIC6gvKC+IMLAQAAA4MJgwsAAAAAAAAAYAPAAEJLAT8BCQGC+MAAlGAAAAAACQbAAEJNgLqDEIMphJAAAa9zAAAAAQODO4SQAAAAAQEBg0cAAACDSmADwABdsQAAYAPAAEJLAT4CToNZg24AALdhYAPAAPyXARyDd4CDcMAgM8GxLwAAAADAAF3ASYOGHIOfgYOKwCAz2kgBAAGTAMAA/bs+AUqDrQErSYPFHIPegYPJwCAz2kgBAAGUAMAA/bs+AUqD7AFqg/lgA8AAc9XAAPZVPgJAHIQ+gYQpwCAz2kgBAAGVAMAA/buEKYRCAEqESwEehGzAAHPAAQABgIR/wCAzwQAGwABCToC6hJWEoYY4AAGvdAAAAAEDhLCGOAAAAAICAoTBAAAAhEBgA8AAXWIAhNkAAAClpGADwABCSwAAXAE+AUmE8hyFCIGE9sAgNKVIAQABKwDAAP3xPgE9HIUegIUZwCA0l7E1AQABkwDAAF1tSYU2JYVMgYU6wCA0pWADwABz1T4BPRyFcICFa8AgNJexNQEAAZQAwABdbT4DPRyFlYCFkMAgNJexNQEAAZUAwABdbU6FwoXcAAC3YmADwABzuQEmhcIBgYXewCA0pWADwABzuT0chhGChffAIDUrt2MBAAGAhinAIDSXAMAAc8IGwABCUIC6hj2GTIZWAQKW2QAAAAEDhlaGVgAAAAAAAABgA7YhAAbAAEJRgLqGn4ayhscBALdkAAAAAQOGwIbHAAAAAAAAAGADwABClwFKhsMBKwbAAEJSgLqHVIdnh3wBALdlAAAAAQOHdYd8AAAAAAAAAGADwABClwFKh3gBKwbAAEJTgLqHw4fWh+kBALdmAAAAAQOH4ofpAAAAAAAAAGADwABClwFKh+UBKwbAAEJUgLqIJ4hAiE8BArdnAAAAAQOIT4hPAAAAAAAAAF0DwAD9OwFgA8AAQpcABsAAQlWAuoiAiJeIrgEAt2gAAAABA4iniK4AAAAAAAAAXQPAAP07AWADwABCWQFKiKoBKwbAAEJWgLqI94kCiQsBArUmAAAAAQOJC4kLAAAAAAAAAGADwAD+fgAAACAzoQAgNHcAIDVnACA1jQAgNboAIDXnACA2FAAgNkMAIDZ3ACA2nwAAAAkCwABCWYC6ih2KI45LA7dpAAABYAHAAP3kAAADBMAAQluAuopIil0Gg+wAYAPAAP5+AWqKTmADwAD+fsAA9lwEwABCXIC6iqeKtgm3awBgA8AAQksABMAAQl2AuorziwQJt2wAYAPAAP5+AAEFwABCZIC6iwmLCYtDAAAAA4sVi0MAAAACAgKLGwAABLdrYAPAAEJLAIsxAAAEt2xgA8AA/n4AAGADwABCWQE/AwgBwABCXIAAwCA3UwgBwABCXYEAwCA3YQkBiwnAAP36AAAAAAMGwABCX4C6i0iLUIyzBAGvcwAAAAEDi2+MswAAAAEBAYt7AAAAg0pgA8AAXbEAAGADwABCWQE+BT0ci5CAi4nAIDe+gpgBAAFqi5ZgA8AA/n7AAPZcAMAAXbNOi7KLwgAAt2tgA8AAQksBHIvLgIvEwCA3vrEnAQFgA8AAQksBNIvyA4vyjCQAAAAAAAAAYAPAAEJLAUqL+AEejArAAEJNAQABgIwdwCA3vgAAwABdvE6MMoxEAAC3bGADwAD+fgEcjE2AjEbAIDe+sBoAAAAAwABdwj0cjGaAjF/AIDe+gpABAAFqjGpgA8AA/n7AAPZcAMAAXbRKjHQBH4x/wABCZAIAAoGMjMAgN/mCjJ3AIDhPAAbAAEJhgLqMuIy9je0AAK90AAAAAQOMzI3tAAAAAQEBjNYAAACEQGADwABdYgAAXAE+BD0cjOeAjOLAIDjRgpgBAAFqjO1gA8AA/n7AAPZcAMAAXWc9HIz8gIz3wCA40bDcAgFgA8AAQksCFo0kLrdrwABCXDSNPQONPY2sAAAAAQEBjVAAAAClpGADwABCSwAAXAFKjXIBHo2EwABCTgIAAoCNlMAgONGBjZrAIDk0AADAAF1pPRyNuICNs8AgONGBuwEAARaNxC63bMAAQl0AwABdbz0cjeGAjdzAIDjRgpABAAFqjeVgA8AA/n7AAPZcAMAAXWgGwABCYoC6jfKOBY5JAAAjAWqN82ADwAD95AIAAAEDjg2OSQAAAAAAAABgA8AA/n4BSo4TASSOSQUnt20WjiQut2vAAEJcJ4GLFo42LrdswABCXSeDJgAAIDeeACA4sQAgOagAIDn+AAAAAwLAAEJlgLqOlo6ckF4Dt24AAAFgAcAA/eQAAAABBcAAQmuAuo66jsCO2wEAAAOO2Y7bAAAAAAAAAGADwABCZQE/AQkBjsDAAP36AAAAAAMGwABCZ4C6jxiPMY+eAAC3bwAAAAEDj0iPngAAAAEBAY9nAAAIgmpgA708AABgA8AAQmwBPgFKj3UBH4+AwABClgAAAAAGwABCaIC6j+SP9pAXAAC3cAAAAAEDkA2QFwAAAAAAAABgA8AAQksBSpATASsGwABCaYC6kEmQTpBcAAC3cQAAAAEDkFiQXAAAAAAAAABcAT4AAAAgOmIAIDqnACA61AAgOvkAAAADAsAAQmyAupCTkJmlHAO3cgAAAWABwAD95AAAAAEFwABCloC6kLaQvJDWAQAAA5DUkNYAAAAAAAAAYAPAAEJsAT8BCQGQvMAA/foAAAAAJwbAAEJugLqRPJFVkbIAALdzAAAAAQORX5GyAAAAAgICkYIAAAiCamADvTwAkZwAAACCV2ADwABCSwAAYAPAAEJsAUqRrgEuBsAAQm+AupH/khGSSAAAt3QAAAABA5IhkkgAAAABAQGSOQAACIJqYAO9PAAAYAPAAEJLAUqSRAErBsAAQnCAupKekrCTEgAAt3UAAAABA5K5kxIAAAACAgKS3gAACIJuYAO9UQCS9gAAALUlYAPAAGkgAABgA8AAQksBSpMOASsGwABCcYC6k1KTcpOUAAC3dgFqk1NgA8AA+oSF/wAAAQOTfpOUAAAAAQEBk4cAAACD82ADgksAAGADwABCSwFKk5ABKwbAAEJygLqUCJQalDsAALd3AAAAAQOUJZQ7AAAAAQEBlC4AAACD82ADgksAAGADwABCSwFKlDcBKwbAAEJzgLqUepSMlK0AALd4AAAAAQOUl5StAAAAAQEBlKAAAACD82ADgksAAGADwABCSwFKlKkBKwbAAEJ0gLqU+pUMlUcAALd5AAAAAQOVH5VHAAAAAQEBlTcAAAiWUmADvTwAAGADwABCSwFKlUMBKwbAAEJ1gLqVhJWWlbUAALd6AAAAAQOVn5W1AAAAAQEBlagAAACD82ADgksAAGADwABCSwFKlbEBKwbAAEJ2gLqV+5YNlisAALd7AAAAAQOWFZYrAAAAAQEBlh4AAACD82ADgksAAGADwABCSwFKlicBKwbAAEJ3gLqWdpaIlqYAALd8AAAAAQOWkJamAAAAAQEBlpkAAACD82ADgksAAGADwABCSwFKlqIBKwbAAEJ4gLqW5Jb2lycAALd9AAAAAQOW/5cnAAAAAgIClwgAAACFj2ADgksAlxoAAAAgYAOCSwAAYAPAAEJLAUqXIwErBsAAQnmAupdvl4GXngAAt34AAAABA5eIl54AAAABAQGXkQAAAIPzYAOCSwAAYAPAAEJLAUqXmgErBsAAQnqAupfwmAKYIAAAt38AAAABA5gKmCAAAAABAQGYEwAAAIPzYAOCSwAAYAPAAEJLAUqYHAErBsAAQnuAuphhmHOYkwAAt4AAAAABA5h9mJMAAAABAQGYhgAAAIPzYAOCSwAAYAPAAEJLAUqYjwErBsAAQnyAupjVmOeZCAAAt4EAAAABA5jymQgAAAABAQGY+wAAAIPzYAOCSwAAYAPAAEJLAUqZBAErBsAAQn2AuplOmWCZhQAAo3wAAAABA5lvmYUAAAABAQGZeAAAAIPzYAOCSwAAYAPAAEJLAUqZgQErBsAAQn6Aupn7mg2aLwAAt4IAAAABA5olmi8AAAAAAAAAYAPAAEJLAUqaKwErBsAAQn+Aupptmn+anwAAt4MAAAABA5qJmp8AAAABAQGakgAAAIPzYAOCSwAAYAPAAEJLAUqamwErBsAAQoCAuprnmvmbGQAAt4QAAAABA5sDmxkAAAABAQGbDAAAAIPzYAOCSwAAYAPAAEJLAUqbFQErBsAAQoGAuptkm3abjgAAt4UAAAABA5uEm44AAAAAAAAAYAPAAEJLAUqbigErBsAAQoKAupvUm+ab/gAAt4YAAAABA5v0m/4AAAAAAAAAYAPAAEJLAUqb+gErBsAAQoOAupxNnF+chQAAt4cAAAABA5xvnIUAAAABAQGceAAAAIPzYAOCSwAAYAPAAEJLAUqcgQErBsAAQoSAupzTnOWdEwAAt4gAAAABA5z9nRMAAAABAQGdBgAAAIPzYAOCSwAAYAPAAEJLAUqdDwErBsAAQoWAup1nnXmdoQAAt4kAAAABA52LnaEAAAABAQGdlAAAAIPzYAOCSwAAYAPAAEJLAUqdnQErBsAAQoaAup3zngWeLQAAt4oAAAABA54Xni0AAAABAQGeIAAAAIPzYAOCSwAAYAPAAEJLAUqeKQErBsAAQoeAup6AnpKeuQAAt4sAAAABA56jnrkAAAABAQGerAAAAIPzYAOCSwAAYAPAAEJLAUqetQErBsAAQoiAup8PnyGfRAAAt4wAAAABA58un0QAAAABAQGfNwAAAIPzYAOCSwAAYAPAAEJLAUqfQAErBsAAQomAup+Un6afxgAAt40AAAABA5+wn8YAAAABAQGfuQAAAIPzYAOCSwAAYAPAAEJLAUqfwgErBsAAQoqAuqAboC2gUAAAt44AAAABA6A6oFAAAAABAQGgQwAAAIPzYAOCSwAAYAPAAEJLAUqgTAErBsAAQouAuqCcoK6gzwAAt48AAAABA6C5oM8AAAABAQGgwgAAAIPzYAOCSwAAYAPAAEJLAUqgywErBsAAQoyAuqEaoSyhTAAAt5AAAAABA6E2oUwAAAABAQGhPwAAAIPzYAOCSwAAYAPAAEJLAUqhSAErBsAAQo2AuqGVoaehxQAAt5EAAAABA6GvocUAAAABAQGhuAAAAIPzYAOCSwAAYAPAAEJLAUqhwQErBsAAQo6AuqIPoiGiQQAAt5IAAAABA6IrokEAAAABAQGiNAAAAIPzYAOCSwAAYAPAAEJLAUqiPQErBsAAQo+AuqKEopaiswAAt5MAAAABA6KdorMAAAABAQGipgAAAIPzYAOCSwAAYAPAAEJLAUqirwErBsAAQpCAuqL2owijJQAAt5QAAAABA6MPoyUAAAABAQGjGAAAAIPzYAOCSwAAYAPAAEJLAUqjIQErBsAAQpGAuqNuo4CjoQAAt5UAAAABA6OLo6EAAAABAQGjlAAAAIPzYAOCSwAAYAPAAEJLAUqjnQErBsAAQpKAuqPoo/qkHwAAt5YAAAABA6QJpB8AAAABAQGkEgAAAIPzYAOCSwAAYAPAAEJLAUqkGwErBsAAQpOAuqRnpHmknwAAt5cAAAABA6SJpJ8AAAABAQGkkgAAAIPzYAOCSwAAYAPAAEJLAUqkmwErBsAAQpSAuqTppPulGgAAt5gAAAABA6UEpRoAAAABAQGlDQAAAIPzYAOCSwAAYAPAAEJLAUqlFgErAAAgO10AIDukACA73QAgPCQAIDxoACA8oQAgPNoAID0TACA9TAAgPYUAID2+ACA+AgAgPjsAID50ACA+rQAgPuYAID8fACA/TAAgP4UAID++ACA/6wAgQBgAIEBRACBAigAgQMMAIED8ACBBNQAgQW4AIEGnACBB4AAgQhkAIEJSACBCiwAgQsQAIEL9ACBDNgAgQ28AIEOoACBD4QAgRBoAAAAnAsAAQpeAuqVApU+uBge3mQAAAWABwAD95AAAAQTAAEKZgLqldqWNBoPsAGADwAD+fgFqpXxgA8AA/n7AAPZfAQXAAEKogLqlkqWYpagBAAADpaalqAAAAAAAAABgA8AAQpcBPwEJAaWYwAD9+gAAAAALBsAAQpuAuqXwpfimAQECt5sAAAABA6YBpgEAAAAAAAAAYAPAAP7/AAbAAEKcgLqmU6ZbpmEBAoNiAAAAAQOmYaZhAAAAAAAAAGADwAD8lwAGwABCnYC6ppWmnaahAQKB+wAAAAEDpqGmoQAAAAAAAABgA8AA/JcABsAAQp6Auqblpu2m8wEChvoAAAABA6bzpvMAAAAAAAAAYAPAAPyXAAbAAEKfgLqnNadAp0oBArecAAAAAQOnSqdKAAAAAAAAAGADwAD+fgAGwABCo4C6p0+nZanUAAGvcwAAAAEDp3ep1AAAAAEBAaeDAAAAg0pgA8AAXbEAAGADwABClwE+Ak6nlaenAAC3nWADwAD8lwEcp7CAp6nAIEYZsS8AAAAAwABdwEmnvxyn1YGnw8AgRjJIAQABkwDAAP27PgFKp+MBK0mn+xyoEYGn/8AgRjJIAQABlADAAP27PgFKqB8BaqgsYAPAAELOwAD2Yj4JQByocoGoYMAgRjJIAQABlQDAAP27qGCodgA9HKiGgKh/wCBGGYKYAQABaqiMYAPAAP5+wAD2XwDAAF2zTqicqKYAALebYAPAAP7/ARyor4CoqMAgRhm3ngAAAADAAF3HTqjEqMsAAINiYAPAAPyXARyo1ICozcAgRhmxLwAAAADAAF3ATqjpqO4AAIH7YAPAAPyXARyo94Co8MAgRhmxLwAAAADAAF3ATqkMqRMAAIb6YAPAAPyXARypHICpFcAgRhmxLwAAAADAAF3ATqk0qT8AALecYAPAAP5+ARypSICpQcAgRhmwGgAAAADAAF3CPRypY4CpXMAgRhmCkAEAAWqpZ2ADwAD+fsAA9l8AwABdtEqpcwEfqX7AAEKxBQAFgqmewCBG3IOpqcAgRwCEqbHAIEckham3wCBHSIapv8AgR2wABsAAQqSAuqnZqeWr7wABr3QAAAABA6n0q+8AAAACAgKp/gAAAIRAYAPAAF1iAKoTAAAAt59gA8AAQpcAAFwBPgFJqikcqjyBqi3AIEgRSAEAASsAwABCpT4BPRyqUoCqTcAgSAOxNQEAAZMAwABdbUmqaiWqfYGqbsAgSBFgA8AAQs4+AT0cqqWAqqDAIEgDsTUBAAGUAMAAXW0+CD0cqsqAqsXAIEgDsTUBAAGVAMAAXW09HKrigKrdwCBIA4KYAQABaqroYAPAAP5+wAD2XwDAAF1nPRyq+YCq9MAgSAO3oAEAARarEYGrAsAgSBG3m8AAQpsAwABddD0cqyiAqyPAIEgDsTUBAAEWq0CBqzHAIEgRg2LAAEKcAMAAXW09HKtUgKtPwCBIA7E1AQABFqtsgatdwCBIEYH7wABCnQDAAF1tPRyrfoCrecAgSAOxNQEAARarloGrh8AgSBGG+sAAQp4AwABdbT0cq6qAq6XAIEgDgbsBAAEWq8WBq7bAIEgRt5zAAEKfAMAAXW89HKvdgKvYwCBIA4KQAQABaqvhYAPAAP5+wAD2XwDAAF1oBsAAQqCAuqv0rAisewEAg8YBaqv1YAPAAP3kAgAAAQOsEax7AAAAAAAAAGADwAD8lwE+AUqsFwEcrFUcrDYcrDEWrCgWrB4ut5vAAEKbg8bAAP8ag40BAAE3EQDAAP2/ZAEAARysUBasRxasQC6DYsAAQpyDxsAA/dyDjQEAATcTAMAA/b8AwAD9vWQBAAEcrHMWrGoWrF8ut5zAAEKfg8bAAP6Dg40BAAE3FwDAAP2/AMAA/b0GwABCpYC6rICsmq1tAwBIAWqsgWADwAD95AIAAAEDrJytbQAAAAEBAaydAAAAg9tbAABgA8AA+tEBPgJJrKoerK7AAPZ4AgACLoCsvsAgSnIASqzGASk/SqzXASIiIiWs5ICs3sAgSnJgA8AAQpcAHK0LFq0BLrebwABCm0gBAAEWrRQUrQ7AIEpyAAFgA8AAQpe3m8AAQpsAwAD/JgAcrTAWrSkug2LAAEKcSAEAARatORStM8AgSnIAAWADwABCl4NiwABCnADAAP27ABytVhatSy63nMAAQp9IAQABFq1fFK1ZwCBKcgABYAPAAEKXt5zAAEKfAMAA/o0GwABCoYC6rXKtfa28AQC1JgAAAAEDrYetvAAAAAAAAABgA8AA/n4BSq2KASStvAY1AAAAAQBdA8AA/TsBYAPAAP5+ATUAAAABAGADwAD+/wEWrY0ut5vAAEKbIxytmIAAwCBLikgBAAErAAArFq2YgADAIEuKgx3AAP8NAV0DwAD9OwFgA8AA/n4jHK2mgADAIEt2SAEAASsAACsWraaAAMAgS3aB6sAA/SABYAPAAP5+J7ehFq2uLoH7wABCnSeApxattC6G+sAAQp4nmccGwABCpoC6rcGt1K4EAAAjAWqtwmADwAD95AIAAAEDrdyuBAAAAAAAAABgA8AA/n4BSq3iASSuBAYWreUut5vAAEKbJ7ehFq3zLoH7wABCnSeApxat+y6G+sAAQp4nmccAACBFMQAgRVkAIEWBACBFqQAgRdEAIEX5ACBH4wAgSZMAIEpJACBLRQAgTBQAIEx0AAAACwLAAEKpgLquCa4Pr08Dt6IAAAFgAcAAQpcAAAUEwABCq4C6rlWuXgm3mwFqrkBgA8AA/eQCYAPAAP7/AATAAEKsgLquea5/CYNiAWquZGADwAD95AJgA8AA/JcABMAAQq2Auq6arp4JgfsBaq6FYAPAAP3kAmADwAD8lwAEwABCroC6rrmuvwmG+gFqrqRgA8AA/eQCYAPAAPyXAATAAEKvgLqu3a7nCbecAWquxWADwAD95AJgA8AA/n4AAQXAAEKxgLqu7K7sr00AAAADrwCvTQAAAAUFBa8NAAAEt5tgA8AA/v8Arx0AAASDYmADwAD8lwCvKgAABIH7YAPAAPyXAK81AAAEhvpgA8AA/JcAr0IAAAS3nGADwAD+fgAAYAPAAEKpAT8GCAHAAEKrgADAIE2BCAHAAEKsgQDAIE2PCAHAAEKtggDAIE2dCAHAAEKugwDAIE2rCAHAAEKvhADAIE25CQGu7MAAQqgAAAAAAAAAIE4aAAAAAALAAEKygLqvc6+Cs4oHt6MAAAFgAcAAQpcAAAIEwABCtYC6r8Wv0Am3pMAAQkcAXQOUFwFbAATAAEK2gLqv4K/pGLelwABCRwBgA4qZAAMFwABCwYC6r+6v7rECAAAAA7AEsQIAAAABAQGwCgAABLekXQOUFwFbAABgA8AAQrIBPgFAHLA0FrAtLoNiwABCuWMBAAEWsEIWsDYut6TAAEJHwABCtWGUIADAAP3FsC2wSAEesFK2HwIAAh+wbLYsAwADFrB3LrebwABCuJOTACQACCe3phawsy63m8AAQrgng1snt6cWsNYug2LAAEK5J7eoFrDzFrDnLrekwABCR8AAQrVhlCAngWoAAwgBwABCtisIAcAAQrWAAMAgTo0JAa/uwABCqAAAAAAFwABCwoC6sQexB7FPALepAAOxKrFPAAAAAQEBsTAAAAS3pWADipkAAGADwABCsgE/AwgBwABCtoAAwCBPaQgAwABCtSsJAbEHwABCqAAAAAAFwABCw4C6sVSxVLHDALeqAAOxdLHDAAAAAQEBsYwAAACEYGADwABCsgAAYAPAAEKyAT8BCgCxo8AAQsIBAAEWsbmAsbDAIE+6t6XAAEJHwABCtgAHBsAAQriAurHIsdyx+AEAt5sBarHJYAPAAP3kAgAAAQOx5rH4AAAAAAAAAGADwAD+/wFKsekBFrH1FrHpLrekwABCR8AAQrWArJQcBsAAQrmAurH9shGyFwECg2IBarH+YAPAAP3kAgAAAQOyF7IXAAAAAAAAAGADwAD8lwAGwABCuoC6shyyMLJsAQCB+wFqsh1gA8AA/eQCAAABA7I1smwAAAAAAAAAYAPAAPyXAUqyOAEWsmg1AAAAAQBgA4qZARayOS63pcAAQkfAAEK2IxyyQ4AAwCBQqkgBAAErAMAA/fEXsjkut6XAAEJHHLJTFrJHLrekwABCR8AAQrWG9gEAARayXy6DYsAAQrkAlCfAAEK2gADAIFCqAWADipmB+4qcBsAAQruAurJxsoWyxQEAhvoBarJyYAPAAP3kAgAAAQOyjLLFAAAAAAAAAGADwAD8lwFKso8BFrK/NQAAAAEAYAOKmQEWspAut6XAAEJHwABCtiMcspqAAMAgUVBIAQABKwDAAP3xF7KQLrelwABCRxyyqhayni63pMAAQkfAAEK1hvYBAAEWsrYug2LAAEK5AJQnwABCtoAAwCBRUAFgA4qZhvqKnQbAAEK8gLqyyrLhsusBArecAWqyy2ADwAD95AIAAAEDsuuy6wAAAAAAAABgA8AA/n4ABsAAQr2AurLwswezRAEAtSYBarLxYAPAAP3kAgAAAQOzEbNEAAAAAAAAAGADwAD+fgFKsxQBJLNEBhazLhazIRazFy63m8AAQriDHcAA/w2B6sAA/SAnt6EWszYugfvAAEK6J4CnFrM8Lob6wABCuyeZxwbAAEK/gLqzSbNcs4gAACMBarNKYAPAAP3kAgAAAQOzZLOIAAAAAAAAAGADwAD+fgFKs2oBJLOIBhazbS63m8AAQrgnt6EWs3ougfvAAEK6J4CnFrOALob6wABCuyeZxwAAIE/zACBQPgAgUHAAIFEWACBRvAAgUe4AIFJhACBSwQAAAAcCwABCxIC6s42zk7UIA7erAAABYAHAAEKyAAACBMAAQsaAurPhs+cJg2IBarPMYAPAAP3kAmADwAD8lwAEwABCx4C6tAS0Dgm3nAFqs+xgA8AA/eQCYAPAAP5+AAEFwABCzYC6tBO0E7R2AAAAA7QntHYAAAADAwO0MwAAAKSSXQOUFwFbALREAAAEg2JgA8AA/JcAtFEAAAS3nGADwAD+fgAAYAPAAELEAT8DCAHAAELGgQDAIFNsCAHAAELHggDAIFN6CQC0ZcAAQsEBAAGAtGvAIFNeAAIGwABCyYC6tHu0krS/AQC1JgFqtHxgA8AA/eQCAAABA7SctL8AAAAAAAAAYAPAAP5+AUq0nwEktL8DGLSotSbAAEK9J4LqFrS0LrecwABCxwbAAELLgLq0xLTXtQYAACMBarTFYAPAAP3kAgAAAQO037UGAAAAAAAAAGADwAD+fgFKtOUBJLUGAx207iMAAAAAwABCvyeC6ha0+y63nMAAQscAACBTvgAgVA4AIFRgAAAAAgLAAELOgLq7gLuGvQQDt6wAAAFgAcAAQpcAAAABBcAAQtmAuru4u7671gEAAAO71LvWAAAAAAAAAGADwABCzgE/AQkBu77AAEKoAAAAAAcGwABC0IC6u9u777wAAQC3mwFqu9xgA8AA/eQCAAABA7v5vAAAAAAAAAAAYAPAAP7/AUq7/AErBsAAQtGAurwFvBy8LgEAt5wBarwGYAPAAP3kAgAAAQO8J7wuAAAAAAAAAGADwAD+fgFKvCoBKwbAAELSgLq8M7xHvFUBAIb6AWq8NGADwAD95AIAAAEDvE68VQAAAAAAAABgA8AA/JcBSrxRASsGwABC04C6vFq8brx6AQCB+wFqvFtgA8AA/eQCAAABA7xzvHoAAAAAAAAAYAPAAPyXAUq8dgErBsAAQtSAurx/vJO8oQEAg2IBaryAYAPAAP3kAgAAAQO8mryhAAAAAAAAAGADwAD8lwFKvJ0BKwbAAELVgLq8pryxvM0BALetAAAAAQO8u7zNAAAAAAAAAGADwAD+fgFKvL4BJ7euBsAAQteAurzSvOW9AgAAIwFqvNNgA8AA/eQCAAABA7ztvQIAAAAAAAAAYAPAAP5+AUq88wEnt64AACBUwAAgVPcAIFUuACBVZQAgVZwAIFXTACBWAgAgVjoAAAAHAsAAQtqAur36vgDAAEBcA7evAAABYAHAAP3kAAADBMAAQtyAur5yvn4Jt7AAYAPAAEKXAATAAELdgLq+1L7lCbdsAGADwAD+fgAEwABC3oC6vz6/SAm3sQBgA8AA+tEAAgXAAELjgLq/Tb9Nv6IAoREAA79cv6IAAAACAgK/YgAABLewYAPAAEKXAL91AAAEt2xgA8AA/n4AAGADwABC2gE/BAgBwABC3IAAwCBW3AgBwABC3YEAwCBW6ggAwABC3ioJAb9NwAD9+gAAAAAFwABC5IC6v6e/p8AAQAQAoRQAA7+1wABABAAAAAEBAb+7AAAEt7FgA8AA+tEAAGADwABC2gE/BAgBwABC3oAAwCBXTQgAwABC3CsIAMAAQt0rCQG/p8AA/foAAAAAAgbAAELggLrAAEAJwABAEsAAQDABALeyAAAAAQPAAEAZwABAMAAAAAAAAABgA8AA+tEBSsAAQBwBIRzAAEApFsAAQBwut7DAAELcSAEAASsAwABCpQbAAELhgLrAAEA0wABAPcAAQFoBALezAAAAAQPAAEBDwABAWgAAAAAAAABgA8AA+tEBSsAAQEYBHMAAQFMWwABARi63sMAAQtxIAQABKwDAAEKlAAAgV4wAIFfgACBYMwAAAAIAAgbAAEJJgLq2B7YOuaMAAbe0AAAAAQO2LbmjAAAAAgECtjUAAACWUmADvRYAtlEAAAC1JWADwABpIAFqAGADwAD9oXkAYAPAAP5+AT4CSbZlJbZxgLZpwCBYZmADvSo+AUq2hwEWtpYUto7AIFhmAAFgA70qgL29GEm2pSW2sYC2qcAgWGZgA708PgJOts+21gAAn/RgA8AA/n4BHrbYwABCSgEAAYG26sAgWHIASbb+IiW3ChS3AsAgWGYAAWADvTxgA71pASW3KhS3IsAgWGYAAWADvTxgA71wPgNOt1O3XQAAhopgA8AA/n4BFrd2FrdnFLdfwCBYZgABYAO9PIUKvUqAvb0YSbeCHLeTFreOFLeGwCBYZgABYAO9PIC9vRhIAQABJwAAwAD+jT4BSrekAYO3q8AgWSM/SrfEASS37gSDt83AIFkjJ4FqFrfhFLfZwCBYZgABYAO9PIC9vRiCt+fAIFjSSbf7IRy4Fha4BxS3/8AgWGYAAWADvTyFCr1KSAEAASsAwAD98T4CSbgnFrhCFrgzFLgrwCBYZgABYAO9PIUKvUq1Eb0tPgFKuFcBHrhewABCSQIAAha4kxS4i8AgWGYAAWADvTyFCr1KgbijwCBYcgA/SrjBASS4/wQWuOIWuNMUuMvAIFhmAAFgA708hQq9SoC9vRgngWoWuPIUuOrAIFhmAAFgA708gL29GIK4+MAgWNI+AUq5FAEkuTMCFrkmFLkewCBYZgABYAO9PIC9vRiCuSzAIFjSP0q5jgEWuZ2AuZXAIFhmgL29GAbAAEJKgLq57Lnzu30AAbe1AAAAAQO6BLt9AAAAAQEBuhMAAAC1JWADwABpIAAAYAPAAP5+AT4HSbomHLo4gLoqwCBauEgBAAErAMAAaUBKukEBJwA/Trpbul4AAIPpYAPAAP7IAR+6ZMAA/ucAAAAAPRy6eYG6dsAgWu+CjgEAASe3tgDAAP7cPRy6moG6l8AgWu+CjgEAARa6roC6oMAgWri3t8AAaSwAwAD+3Em6yha66xa63IC6zsAgWriqs8AAaTCDt8AA/R4+Aj0cuwCBuv3AIFrvgo4BAAEnnhgAwAD+3D0cuxSBuxHAIFrvgo4BAAEcu0McuyiAuxrAIFq4t7gAAAAAwABpPFgBAAEnnhgAwAD9DQDAAP7cPz0cu1mBu1bAIFrvgo4BAAEnmccAwAD+3Eq7ZwEcu3GBu27AIFrvIwAAAADAAP7hAYC6ACBb5AAgM1IAIDbMACA6EwAgOw4AIES/ACBMqQAgTiMAIFLmACBUcQAgVl8AIFhEAAAACgAgWEYAIFqYACBb5AAAAAIAAgTAAELlt7mAuwAAEYD3AACkiwAAgRAAALZ0AACBMQAAu50AAQEBpNaBZwAAvLoAAQEBpNmBlQAAvRUAAIG5AAC9kQABAQGk3IHrAAC+GAAAgg8AAMAAQZIAAIIwAADAAHUIAACCVAAAwAB2LwAAgm0AAMAATRsAAQEEpOqznqTrr3GC3QAAwABumQAAgvgAAMAAdlMAAIMcAADAAGQ1AACDMQAAwAB2jAAAg04AAMAAd60AAINzAADAAHfuAAAAAAAFAsAAQuaAu4OVg6SEjwe3ugAAAWABwAD95AAAAAEFwABC7QAAAAAEAAADAAAAAAAAAAAAYAPAAELmAT8BCQEAwAD9+gAAAAADBsAAQuiAu4O5g76EGQACt7sAAAABA4PIhBkAAAACAgKD6wAAAKVSYAPAAEG4AIQRAAAAr2VgA8AAQxEAAFwABsAAQumAu4RMhFqEdgACZwAAAAEDhGGEdgAAAAEBAYRvAAAAgmpgA708AABgA7buAAbAAELrgLuEe4SIhI0BApagAAAAAQOEjYSNAAAAAAAAAF0DwAD8+QFbAAAAIF03ACBddgAgXacAIF3RAAAAAwLAAELugLuFN4U9oXcDt7wAAAFgAcAA/eQAAAkEwABC8YC7hWaFcwa3vcAAQuUAYAPAAPyXAWqFcWADwAD8l4GeBMAAQvKAu4WIhZoGt77AAELlAGADwAD8lwFqhZlgA8AA/JcJBMAAQvOAu4YjhkUGt7/AAELlAGADwAD8lwFqhkRgA8AA/JcVBMAAQvSAu4aXhrkGt8DAAELlAGADwAD8lwFqhrhgA8AA/JchBMAAQvWAu4dHh2sGt8HAAELlAGADwAD8lwFqh2pgA8AA/JdTBMAAQvaAu4eAh44Gt8LAAELlAGADwAD8lwFqh41gA8AA/JeBVwTAAEL3gLuHsofpCbfDwABC5QBdA8AA/W0CYAO9UWADwAD8lwEeh8/AAP10AAJgA71RYAPAAPyXAAAEwABC+IC7iAiINgm3xMAAQuUAXQPAAP4vAWADvVEBHoghwADBpgABYAO9UQAABMAAQvmAu4hUiIMJt8XAAELlAF0DwAD+LwFgA71RAR6IbsAAwaYAAWADvVEAAAEFwABDBYC7iIiIiImTAAAAA4ibiZMAAAABAQGIrAAAAKVQYAPAAG68AABgA8AAQu4BPgI9HIjTgIjDwCBfjrfGAQABNIjjA4jjiSQAAAABAQGI8wAAAIJuYAO9UQAAYAPAAP2hAT4BPRyJBS63xwEAAYGJFMAgX8QAwABDAADAAG7LPRyJO4CJK8AgX463yAEAATSJTAOJTImOAAAAAQEBiVwAAACCbmADvVEAAGADwAD9oQE+AT0ciW4ut8kBAAGBiX7AIGATAMAAQwIAwABuzAEJAYiIwAD9+gAAAAAJBsAAQvuAu4o1ijqKlQAAt8oAAAABA4pHipUAAAABAQGKVwAAAJZzYAO9UQAAYAPAAPrRAT4BSoplARyKdiSKdQGAim7AIGBygdgBAAFqioFgA8AA/n7AAPZpAMAA/pAGwABC/IC7iuqK7ouJAAC3zAAAAAEDiw+LiQAAAAEBAYsfAAAAllJgA71RAABgA8AA/JcBPgJAHIs1LrfKAQABgItDwCBg0QDAAEL7izWLSwEei022HwEAAYCLVsAgYNEASotlARyLfBaLbC63w8AAQuXAAEL3SwEAAYCLfcAgYNEAwAD9gQbAAEL9gLuL54vskjMAALfNAAAAAQOL9ZIzAAAAAgEBjAUAAACWUmADvVEAAYwUAAAAt85gA8AA+tEBagBgA8AA/aF5YAPAAPrRAT4FQByMLi63ygEAAYCMPMAgYVcAwABC+4wujEQBHoxGth8BAAGAjE/AIGFXAE6MYoxrAAC3z2ADwAD8lwEcjH0WjG0ut8PAAELlwABC90sBAAGAjH7AIGFXAMAA/YFJjI0cjJqCjJHAIGGwSAEAASsAwAD9uz4BPYqOEMAgYbBqjhtgA8AA/JeBnj9JjjCBjjTAIGFkPgFHjkiCjlDAIGGwAwGOaWqOaWADwAD8lwkAPgFKjoMBKgKOn2qOn2ADwAD8l4GejrZqjrZgA8AA/JcVAD4BSo92ASsDj5Fqj5FgA8AA/Jchj75qj75gA8AA/JdTj+1qj+1gA8AA/JeBVwA+AUqQAwEpPgFHkCuCkDPAIGGwAwOQTGqQTGADwAD8lwmQaWqQaWADwAD8lxWQlmqQlmADwAD8lyEAPgFKkMABKgKQ3GqQ3GADwAD8l4GekPNqkPNgA8AA/JdTAD4BSpG2ASsBkdFqkdFgA8AA/JeBVwA+AUqR5wEpSpIkASsGwABC/oC7kjiSPZg2AAC30AAAAAEDkkyYNgAAAAIBAZJcAAAAllJgA71RAAGSawAAALfOYAPAAPrRAWoAYAPAAP2heVwBPgRAHJKFLrfKAQABgJKTwCBjIADAAEL7koWSmwEekp22HwEAAYCSpsAgYyAATpK5ksUAALfRYAPAAPyXARyS1xaSxy63w8AAQuXAAEL3SwEAAYCS2MAgYyAAwAD9gUmS5xyS94KS68AgY3RIAQABKwDAAP27PgE9ipMIwCBjdGqTFmADwAD8l4GeP0mTK4GTL8AgYy0+AUFHk0OCk0vAIGN0BAGTZ2qTZ2ADwAD8lwkAPgE9MJOBHpOHth8CAAKAk5/AIGMgJAAEJ7fSgJPDwCBjICe30ye31AABlB5qlB5gA8AA/JeBngA+Aj0clLIWlKIut8PAAELlwABC94C/AgACgJSzwCBjIGqUvmADwAD8l1MAwAD9gkKU6gABlP9qlP9gA8AA/JcVAD4CPRyVORaVKS63w8AAQuXAAEL3gL8CAAKAlTrAIGMgapVFYAPAAPyXIQDAAP2CQpVvAAOVhGqVhGADwAD8lyGVsWqVsWADwAD8l1OV4GqV4GADwAD8l4FXAD4BQpYPAD4BQUeWMYKWOcAgY3QDA5ZVapZVYAPAAPyXCZZyapZyYAPAAPyXFZafapafYAPAAPyXIQA+AT0wlskels+2HwIAAoCW58AgYyAkAAQnt9KAlwvAIGMgJ7fTJ7fUAAKXZmqXZmADwAD8l4Gel31ql31gA8AA/JdTAD4CPRyXuRaXqS63w8AAQuXAAEL3gL8CAAKAl7rAIGMgapfFYAPAAPyXgVcAwAD9gkKX2wABl/Bql/BgA8AA/JeBVwA+AUKYHwAGwABC/4C7mDuYQJ8RAAC31QAAAAEDmFKfEQAAAAIBAZhiAAAAllJgA71RAAGYcQAAALfOYAPAAPrRAWqYfWADwAD60XdcAT4EQByYkS63ygEAAYCYn8AgZbEAwABC+5iRmKcBHpipth8BAAGAmLLAIGWxAE6YxZjRAAC30WADwAD8lwEcmOMWmNMut8PAAELlwABC90sBAAGAmOTAIGWxAMAA/YFJmPMcmQOCmPfAIGYGSAEAASsAwAD9uz4BPYqZFMAgZgZqmSJgA8AA/JeBnj9JmTeBmTvAIGW+PgFBR5lPgplXwCBmBgMDmXNqmXNgA8AA/JchmaBqmaBgA8AA/JdTmc9qmc9gA8AA/JeBVwA+AT0wmeUemeu2HwIAAoCaA8AgZbEkAAQnt9KAmifAIGWxJ7fTJ7fUAAKagmqagmADwAD8lxWar2qar2ADwAD8l4GeAD4CPRya0xaawy63w8AAQuXAAEL3gL8CAAKAmtTAIGWxaprfYAPAAPyXCQDAAP2CQpr5AAGbDmqbDmADwAD8lwkAPgFCm0EAPgFBR5tjgptrwCBmBgQBm4dqm4dgA8AA/JeBVwA+AT0wm50em6O2HwIAAoCbu8AgZbEkAAQnt9KAm9/AIGWxJ7fTJ7fUAAGcOmqcOmADwAD8l4GeAD4CPRycyBacuC63w8AAQuXAAEL3gL8CAAKAnMnAIGWxapzUYAPAAPyXFQDAAP2CQpz+AAGdE2qdE2ADwAD8l1MAPgI9HJ4iFp4SLrfDwABC5cAAQveAvwIAAoCeI8AgZbFqni5gA8AA/JchAMAA/YJCnlgAA55tap5tYAPAAPyXFZ6aap6aYAPAAPyXIZ7Hap7HYAPAAPyXCQA+AUKe+gAGwABDAIC7nxafG5+iAAC3xwAAAAEDnymfogAAAAEBAZ85AAAAllJgA71RAABcAT4CQByfTy63ygEAAYCfXcAgaEIAwABC+59Pn2UBHp9nth8BAAGAn3DAIGhCAD0cn5IWn38ut8TAAELlwABC+FYBAAGAn5bAIGhCAMAA/jwGwABDAYC7n6efrKBBAAC31gAAAAEDn7ygQQAAAAEBAZ/MAAAAllJgA71RAABgA8AA+tEBPgJAHJ/iLrfKAQABgJ/wwCBowADAAEL7n+Kf+AEen/q2HwEAAYCgA8AgaMAASqASARygLBagGS63xMAAQuXAAEL4gxwBAAGAoDXAIGjAAMAA/jsGwABDAoC7oEagS6DUAAC3yQAAAAEDoFqg1AAAAAEBAaBqAAAAllJgA71RAABcAT4CQByggC63ygEAAYCgjsAgaUcAwABC+6CAoJYBHqCYth8BAAGAoKHAIGlHAD0coMQWoLAut8XAAELlwABC+VYBAAGAoMjAIGlHAMAA/jwGwABDA4C7oNmg3qF1AAC31wAAAAEDoO+hdQAAAAEBAaD/AAAAllJgA71RAABgA8AA+tEBPgJAHKEVLrfKAQABgKEjwCBpxQDAAEL7oRWhKwEeoS22HwEAAYChNsAgacUASqFFARyhYBahTC63xcAAQuXAAEL5gxwBAAGAoWnAIGnFAMAA/jsAACBgUgAgYLEAIGE3ACBjAAAgZZEAIGgiACBooAAgaScAIGmlACBqLAAAAAkCwABDBoC7oXqhgKYyA6TkAAABYAHAAE18AAAEBMAAQwiAu6HNod8JpRQAYAO+MAAEwABDCYC7ofaiAgmlAABgA7zmAATAAEMKgLuiEaIkCaVCAGADwAD60QAEwABDC4C7ojOiQgmlRABgA8AA+tEAAQXAAEMQgLuiR6JHosMAAAADol+iwwAAAAQCAqJlAAAEpRRgA74wAKJ+AAAEpQBgA7zmAAKimAAABKVCYAPAAPrRAWoAYAPAAP2heaKyAAAEpURgA8AA+tEBagBgA8AA/aF5YAPAAEMGAT8FCAHAAEMIgADAIGrlCAHAAEMJgQDAIGrxCAHAAEMKggDAIGr+CAHAAEMLgwDAIGsVCQGiR8AATYEAAAAAAgbAAEMNgLuiyKLZpY8AALPIAWqiyWADwAD95AIAAAEDouSljwAAAAQEBKLpAAAApWxbAKMDAAAAr8xgA8AATR4AoyQAAACHRWADwABNggCjOwAAAKVyYAPAAE11AABcAT4BSaOcHKOqg6OgwCBrwUgBAAFqo8BgA8AATXXAAPM0AMAA/fE+AUmj1Baj2C6lQsAAQwo+AT0co/6Bo/fAIGulr50BAAGCpATAIGuzAMAATSc+AT0cpCyBpCXAIGulr50BAAGCpDLAIGuzAMAATSdJpE8cpF2DpFPAIGvBSAEAAWqkcWADwABNdcAA8S4AwAD98T4BPRykjIGkhcAga6WvnQEAAYKkksAga7MAwABNJ0mk4Ryk74Ok5cAga8FIAQABaqT/YAPAAE11wADy+gDAAP3xPgI9HKUagaUTwCBrpa+dAQABgqUgwCBrswDAAE0nPRylPRalMC6lAMAAQwm02AEAAYClTsAga5wAvPw+AT0cpXeBpXDAIGulr50BAAGCpX3AIGuzAMAATScGwABDDoC7pZSlpaYwAAClcQFqpZVgA8AA/eQCAAABA6WxpjAAAAABAQGlwAAAAKVyYAPAAE11AABcAT4BSaXRHKXfgKXVwCBtKUgBAAFqpfNgA8AATXXAAPEuAMAA/fE+AT0cphoWpgcupRTAAEMIpa8AAAAAvjM/AAAga3IAIGz/ACBteAAAAAICwABDEYC7pnOmgqeOB6TjAAABYAHAAP3kAAAAAQXAAEMbAAAAAAQAAAMAAAAAAAAAAABgA8AAQxEBPwEJAQDAAP36AAAAAAcGwABDE4C7ppSmq6a9AQK32AAAAAEDpr2mvQAAAAAAAABgA8AAdoEABsAAQxSAu6bBpt+m7wECt9kAAAABA6bvpu8AAAAAAAAAYAPAAHfmAAbAAEMVgLum86cLpxUBArfaAAAAAQOnFacVAAAAAAAAAGADwAB21QAGwABDFoC7pxmnK6c7AQK32wAAAAEDpzunOwAAAAAAAABgA8AAd/UABsAAQxeAu6c/p0qnUAECt9wAAAABA6dQp1AAAAAAAAAAYAPAAHY1AAbAAEMYgLunVKdop28BArfdAAAAAQOnb6dvAAAAAAAAAGADwAB3KwAGwABDGYC7p3OngqeMAQK33gAAAAEDp4ynjAAAAAAAAABgA8AAZU8AAAAgbdEAIG35ACBuIQAgbkkAIG5xACBumQAgbsEAIG7pAAAABwLAAEMcgLunkaeXqcoDt98AAAFgAcAA/eQAAWABwABDEQcEwABDHoC7p+uoGAm32AFqp8dgA8AA/eQCYAPAAHaBAR+oBMAAdosAAAAABMAAQx+Au6hJqFkJt9kBaqgeYAPAAP3kAmADwAB35gAEwABDIIC7qISojgm32gFqqF9gA8AA/eQCYAPAAHbVAATAAEMhgLuos6jDCbfbAWqolGADwAD95AJgA8AAd/UABMAAQyKAu6jhqOcJt9wBaqjJYAPAAP3kAmADwAB2NQAEwABDI4C7qQ6pFQm33QFqqO1gA8AA/eQCYAPAAHcrAATAAEMkgLupN6lBCbfeAWqpG2ADwAD95AJgA8AAZU8AAQXAAEMmgLupRqlGqcgAAAADqVepyAAAAAYGBqldAAAEt9lgA8AAd+YAqXQAAAS32mADwAB21QCpiwAABLfbYAPAAHf1AKmiAAAEt9xgA8AAdjUAqa8AAAS33WADwAB3KwCpvQAABLfeYAPAAGVPAABgA8AAQxwBPwcIAcAAQx+AAMAgcDcIAcAAQyCBAMAgcEUIAcAAQyGCAMAgcFMIAcAAQyKDAMAgcGEIAcAAQyOEAMAgcG8IAcAAQySFAMAgcH0JAalGwAD9+gAAAAAAAAAgcOoAAAAAAAABgLsAIHD1ACBc7wAgXeYAIGpZACBtiQAgbw4AIHDzAAAABQAgcPUAAAAAAAIEwABDJwCAvAAACYDaAADAAL5bAAEBAZ9CgQAAAKSLAACBGQAAvRUAAIE9AAC+NgAAgW4AAMAAXVwAAIGcAADAAEu9AACBwAAAwAB4bAAAgegAAMAATZgAAIIAAADAAG6ZAAAAAAAFAsAAQyiAvIIcgiuHXQe34AAAAWABwAD95AAAAAAHBsAAQyqAvIJ2gn6DmQQBr3MAAAABA4Kdg5kAAAACAgKCsAAAAINKYAPAAF2xAILFAAAApSJgA8AATZwAAGADwABDKAE+Ak6C3YLnAAC3K2ADwAD60QEcgvCAgunAIHHHr5EAAAAAwABdv0mDAIKDBMAgce4+AUqDFwEfgyLAAEN0AAAAAD4BSoNMAR6DV8AAQ0gCAAKAg3vAIHHHgYODwCBx1QAGwABDLIC8g86D04PxAAKvdAAAAAEDg+KD8QAAAAEBAYPsAAAAhEBgA8AAXWIAAFwABsAAQy2AvIQthDmEaAACtMIAAAABA4RQhGgAAAABAQGEYAAAAJZSYAO9UQAAYAPAAHhtAAbAAEMugLyEtYTBhQsAArfhAAAAAQOE2YULAAAAAgIChOoAAAClNGADwABLzwCFAgAAAIWPYAO+UQAAYAPAAHhtAAbAAEMvgLyFW4VghYYAArfiAAAAAQOFboWGAAAAAQEBhX4AAACWUmADvVEAAGADwAD60QAGwABDMIC8hleGXIaAAAK34wAAAAEDhmqGgAAAAAEBAYZ4AAAAllJgA708AABgA8AA+tEABsAAQzGAvIcnhyyHWwACt+QAAAABA4dDh1sAAAABAQGHUwAAAJZSYAO9UQAAYAPAAPrRAAAAIHGnACBySwAgcnwAIHKwACBy8gAgcyYAIHNaACBzjgAAAAcCwABDMoC8h2CHb4vNB7flAAABYAHAAP3kAAAAAQXAAEM8AAAAAAQAAAMAAAAAAAAAAABgA8AAQzIBPwEJAQDAAP36AAAAAAcGwABDNIC8h8uH0If/AAK35gAAAAEDh+eH/wAAAAEBAYf3AAAAllJgA71RAABcAAbAAEM1gLyIRYhYiIQAArfnAAAAAQOIbYiEAAAAAQEBiH0AAACCamADvVEAAGADwAB4qgAGwABDNoC8iSiJLYlhAAK36AAAAAEDiUmJYQAAAAEBAYlZAAAAllJgA71RAABcAAbAAEM3gLyJ3Inhih4AArfpAAAAAQOKBooeAAAAAQEBihYAAACWUmADvVEAAGADwAD60QAGwABDOIC8iqeKrIrZAAK36gAAAAEDisOK2QAAAAEBAYrRAAAAllJgA708AABcAAbAAEM5gLyLJosri1YAArfrAAAAAQOLPotWAAAAAQEBi04AAACWUmADvVEAAFwABsAAQzqAvIufi6yLywACgowAAAABA4uxi8sAAAABAQGLvwAAAKUiYAPAAE2cAABgA8AAQygAAAAgc/sAIHQqACB0XgAgdI0AIHTBACB08AAgdR8AIHVVAAAABwLAAEM9gLyL0IvWnhIDt+wAAAFgAcAA/eQAAWABwABDKAcEwABDP4C8jHqMjwaD7ABgA8AA/n4BaoyAYAPAAP5+wAD2bATAAENBgLyMp4yzCbYjwABDJwBgA8AATZwABMAAQ0KAvIzPjOUJt+7AAEMnAF0DwAD+LwFgA708AATAAENDgLyNEI0cCbfvwABDJwBdA8AA/W0CYAO9UWADwAB4bQAEwABDRIC8jTuNUwm38MAAQycAXQPAAP4vAWADvVEABMAAQ0WAvI1yjYoJt/HAAEMnAF0DwAD+LwFgA71RAATAAENGgLyNqY3LCbfywABDJwBdA8AA/i8BYAO9UQABBcAAQ1OAvI3QjdCOrwAAAAON4I6vAAAABgYGje0AAAS2I2ADwABNnACOBgAABLfuXQPAAP4vAWADvTwAjikAAAS3710DwAD9bQJgA71RYAPAAHhtAI5CAAAEt/BdA8AA/i8BYAO9UQCOZwAABLfxXQPAAP4vAWADvVEAjowAAAS38l0DwAD+LwFgA71RAABgA8AAQz0BPwcIAcAAQ0GAAMAgdpYIAcAAQ0KBAMAgdqQIAcAAQ0OCAMAgdrcIAcAAQ0SDAMAgdtAIAcAAQ0WEAMAgduMIAcAAQ0aFAMAgdvYJAY3QwAD9+gAAAAAIBsAAQ0iAvI60jrySQQQBr3MAAAABA47fkkEAAAACAgKO8gAAAINKYAPAAF2xAI8HAAAApSJgA8AATZwAAGADwABDPQE+CD0cjyGAjxrAIHeIgpgBAAFqjydgA8AA/n7AAPZsAMAAXbNOj0OPWQAAt/NdA8AA/i8BYAO9PAEcj3Acj2KAj1vAIHeIr5QAAWADvTwAAMAAXeqVSQAAAADAAP0QTo+ej6oAALTBXQPAAP1tAmADvVFgA8AAeG0BHI+zgI+swCB3iLRUAQJgA71RYAPAAHhtATSPygOPypANAAAAAQEBj9gAAACCamADvTwAAGADwAB4bQFKj+MBHo/nwAB4ewEAAYCQBsAgd4gAAMAAXetOkCiQQAAAt/RdA8AA/i8BYAO9UQEckG8ckFGAkErAIHeIr5QAAWADvVEAAMAAXeqVSQAAAADAAP0QTpCQkKgAALf1XQPAAP4vAWADvVEBHJDXHJC5gJCywCB3iK+UAAFgA71RAADAAF3qlUkAAAAAwAD9EE6Q+JEaAAC39l0DwAD+LwFgA71RARyRSRyRK4CRJMAgd4ivlAABYAO9UQAAwABd6pVJAAAAAMAA/RA9HJFdgJFWwCB3iIKQAQABapFhYAPAAP5+wAD2bADAAF20SpFrAR+RdsAAQ1MGAAaBkZDAIHeWgpGlwCB30YORxMAgeAuEkdnAIHh8hZH6wCB4toaSG8AgePAABsAAQ0qAvJJGkleUNwAAr3QBapJHYAPAAP3kAgAAAQOSZpQ3AAAAAQEBknAAAACEQGADwABdYgAAXAE+CD0ckoGAknzAIHmur5gBAAEqAMAAXWw9HJKxgJKswCB5roKYAQABapK3YAPAAP5+wAD2bADAAF1nPRySxoCSwcAgea6vnAEAARaS0y637sAAQyfAAENCAMAAXZc9HJL1gJLwwCB5rrRcAgFgA8AAeG0CFpMNLrfvwABDJ8AAQ0M0kyMDkyOTggAAAAICApMxAAAAgmpgA708AJNFAAAAtMFgA8AAeG0AAFwBSpNhARyTbYKTYcAgelqvdAEAAYCTfcAgea4AwAB4fQDAAF2YPRyTjoCTicAgea6vnAEAARaTmy638MAAQyfAAENEAMAAXZc9HJO/gJO6wCB5rq+cAQABFpPMLrfxwABDJ8AAQ0UAwABdlz0ck/CAk+vAIHmur5wBAAEWk/0ut/LAAEMnwABDRgDAAF2XPRyUK4CUJsAgea6CkAEAAWqUL2ADwAD+fsAA9mwAwABdaAbAAENLgLyUPJRUl/YAALfhAWqUPWADwAD95AIAAAEDlGyX9gAAAAICApR9AAAApTRgA8AAS88AlJUAAACFj2ADvlEAAGADwAB4bQE+BEmU2SIWlOaAlN3AIHtEt0vAAEviARyVDBaU/y62I8AAQyfAAENBtrwCAAKAlSDAIHtEgZUqwCB7UgDAAE2/PgFKlT0BH5VIwAB4pwAAAAA/TpVtlXkAALTBYAPAAHhtAR+Vf8AAeKgAAAAARpWYld+VqgAAAINTYAO9PAAclbwWla8utiPAAEMnwABDQbTbAgACgJXKwCB7RIGV1MAge1IAwABNwT4BSZXnFpXtg5XrwCB72IeOvUM+AUmWABaWDYCWBMAge0SFQsAAS98+AUmWIyEcljUWligutiPAAEMnwABDQbf3AQABg5ZHwCB72ADAAE2+PgE9HJZlgpZZwCB7ubf4AAAAAMAAeJg/SZalFpaygJapwCB7RIVEwABL4D4BPRyW1IKWyMAge7m3+QAAAADAAHiaPgNAFpcdgJcUwCB7RLMVwABL4ZcUlyMAPRyXPIKXMMAge7m3+gAAAADAAHiHPRyXZ4KXW8Age7m3+wAAAADAAHiJPgE9HJetgpehwCB7uVYBAAEcl7EutMIBAAEml8kBg5fJwCB72GADvVEAwABDTADAAHifSpfgAYKX58Age7kGwABDTIC8l/uYE5mbAAC0wgFql/xgA8AA/eQCAAABA5gqmZsAAAABAQGYOgAAAJZSYAO9UQAAYAPAAHhtAT4CQCEcmF0WmFAut+/AAEMnwABDQ0gBAAErAMAA/fGYUJhkAR6YbrYfAgACgJh3wCB9SSe3/ABKmV0BHJlxFplkLrfvwABDJ8AAQ0OZSgIAAoCZfcAgfUlqmYZhAwBgA8AAeG3AAPZvAMAA/YgGwABDToC8maCZs5naAAG3/cAAQycAAAABA5nDmdoAAAAAAAAAYAPAAHhtAUqZyQEfmc3AAHinAAAAAAbAAENPgLyZ35nwmk4AALfjAWqZ4GADwAD95AIAAAEDmf6aTgAAAAEBAZoMAAAAllJgA708AABgA8AA+tEBPgFKmhsBHJo5FpoiLrfuwABDJ8AAQ0KDHAEAAYCaQsAgfi8AwAD+OwbAAENQgLyaU5pkmsYAALfiAWqaVGADwAD95AIAAAEDmnKaxgAAAAEBAZqCAAAAllJgA71RAABgA8AA+tEBPgFKmpEBHJqxFpqYLrfxwABDJ8AAQ0WDHAEAAYCausAgfpUAwAD+OwbAAENRgLyay5rcnhAAALfkAWqazGADwAD95AIAAAEDmvOeEAAAAAEBAZsDAAAAllJgA71RAABgA8AA+tEBPgJJnZAWnbcWnZQut/LAAEMnwABDRoFVwAD9HUqdwAEpP0qd0QEcnfsWndgut/LAAEMnwABDRoMcAQABgJ4EwCB++wDAAP47AAAgd2gAIHmEACB7GgAgfR8AIH3KACB+BQAgfmsAIH7RACB/VwAAAAgCwABDVIC8nhWeG6tOA7f+AAABYAHAAP3kAAFgAcAAQzIGBMAAQ1eAvJ5unp4Jt+7AAEMnAF0DwAD+LwFgA708AR6ei8AAwaYAAWADvTwAAATAAENYgLyeyJ8JGLf/wABDJwBdA8AA/W0CYAO9PGADwAB4qgEynwdgA708YAPAAHiqAATAAENcgLyfJ59kCbgAAF0DwAD+LwFgA71RAR6fT8AAwaYAAWADvVEAAATAAENZgLyfg5+9CbfwwABDJwBdA8AA/i8BYAO9UQEen6jAAMGmAAFgA71RAAAEwABDWoC8n9ygFgm38cAAQycAXQPAAP4vAWADvVEBHqABwADBpgABYAO9UQAABMAAQ1uAvKA1oHkJt/LAAEMnAF0DwAD+LwFgA71RAR6gZMAAwaYAAWADvVEAAAEFwABDZ4C8oH6gfqE4AAAAA6CVoTgAAAABAQGgpgAAAKVQYAPAAG68AABgA8AAQ1QBPgI9HKDNgKC9wCCA07gBAQABFqDdLrfrwABDYwDAAG7NPRyhB4Cg98AggNO4AgEAARahHC635sAAQ18AwABuzgEJAaB+wAD9+gAAAAAIBsAAQ16AvKE9oVyh1wAAt+cBaqE+YAPAAP3kAgAAAQOhcaHXAAAAAQEBoX8AAACCamADvTwAAGADwAB4qgE+AUqhjQE1AAAAAQBdA8AA/W0CYAO9PGADwAB4qgEWoZQut//AAEMnwABDWDUAAAABAGADvTwBgKGpwCCBYTUAAAABAGADwAB4qgEcoaiBoajAIIF8SwEAAYKhqMAggaIAwAD9gSMcobGDAMAggbRIAQABKwDAAP3xNQAAAAEAYAPAAHiqAR+hucAAeMABAAGAoczAIIFhADUAAAABAFwBHKGogaGowCCBfIC/AgACgqGowCCBooQAwCCB7wDAAP2ChADAIIHvgwDAIIG0AWADwAB4qgbAAENfgLyh3KHtos4AALfmAWqh3WADwAD95AIAAAEDogSizgAAAAEBAaIUAAAAllJgA71RAABcAT4DPRyiPBaiIy638MAAQyfAAENZVgEAAYCiQMAggnMAwAD+PEAhHKJrFqJWLrf/wABDJ8AAQ1iHWAEAAYCid8AggnMAwAD9gKJVon8APRyimhaihi63/8AAQyfAAENYgL8CAAKAopvAIIJzH6KqwAB4wQEAAYCiwsAggnMAAMAA/YIGwABDYIC8oxijMaYyAACCjAFqoxlgA8AA/eQCAAABA6M2pjIAAAABAQGjRAAAAKUiYAPAAE2cAABgA8AAQygBPgdAIRyjcxajXi63/8AAQyfAAENYSAEAASsAwAD98aNeo3oBJ7gDTqPWo+MAALfvXQPAAP1tAmADvVFgA8AAeG0BMqQKYAO9UWADwAB4bQBOpC+kQwAAuARdA8AA/PkBYAPAAHiqARakYhakTS63/8AAQyfAAENYKcAA/ZA9HqRuwABDYQEAAYKkfMAgg5UARqSWpNmkrgAAALgFYAPAAHiqAIKkxMAgg5U+AT0cpO2BpOHAIINsgL8CAAImpO0BFqUBg6TuwCCD2YJqwAB4vmADvVEWpR6DpQvAIIPZtMHAAHi8AMAA/YI9F6U1Lrf/wABDJyvAAENYSqVXAR+lYsAAQ1MGAAaApXzAIIMuFqWRLrfuwABDJ8AAQ1eBpbHAIINsFqXHLrfwwABDJ8AAQ1kWpekut/HAAEMnwABDWhamCy638sAAQyfAAENbAAbAAENhgLymN6ZDqU0AAbgGAAAAAQOmUKlNAAAAAQEBpm4AAAC4BF0DwAD8+QFgA8AAeKoAAFwBPgROptim3gAAs+VdA8AAwvoBYAPAAHiqAR+m5MAAw6YAAWADwAB4qgAATqcdpyUAALgHXQPAAP4vAWADwAB4qgEepyvAAMGmAAFgA8AAeKoAAEanS6eDp2MAAACEJmADwAB4qgCAp27AIISyPgI9HKeRgaeLwCCEzYQnAQABg6eZwCCFIQDAAMMIPRynsYKnqcAghPVWAQABg6e1wCCFIQDAAP48Q6fJFqfWgafQwCCEzYO3wAD9Hj4DTqf9qBAAALgFYAPAAHiqARyoGIGoEsAghM2fXwAAAADAAMMFPRyoNYKoLcAghPWEXgEAAYOoPMAghYUAwAD+PkaoV6iaqG8AAACu/mADwAB4qgAWqI+DqHzAIIWFuAjAAHi9PgFJqKQcqLKEqKjAIIXJVgEAARaoyYOotsAghYW0wcAAeLwAwAB4uT4BSajjHKjvgqjnwCCE9VYBAAGEqPPAIIXJAMAA/jw+AT0cqROBqQ3AIITNhCcBAAGEqRvAIIXJAMAAwwg/PwbAAENigLypUqljqb4AALfqAWqpU2ADwAD95AIAAAEDqXqpvgAAAAEBAamIAAAAllJgA708AABcAT4BPRyprhaply637sAAQyfAAENXVgEAAYCpssAghngAwAD+PAbAAENjgLypw6nUqi8AALfrAWqpxGADwAD95AIAAAEDqeeqLwAAAAEBAan3AAAAllJgA71RAABcAT4BPRyqHxaqBi638cAAQyfAAENaVgEAAYCqI8AghtUAwAD+PAbAAENkgLyqNKpFqrMAALfoAWqqNWADwAD95AIAAAEDqmGqswAAAAEBAapxAAAAllJgA71RAABcAT4BPRyqoxaqgC638sAAQyfAAENbVgEAAYCqp8AghzIAwAD+PAbAAENlgLyquKrJq0wAALfpAWqquWADwAD95AIAAAEDqu6rTAAAAAEBAar+AAAAllJgA71RAABgA8AA+tEBPgFKqw0BHKs3FqsULrfywABDJ8AAQ1uDHAEAAYCrQMAgh48AwAD+OwAAIIE3ACCCSQAggwQAIISSACCGTgAghqsAIIcIACCHZQAgh8sAAAAIAsAAQ2iAvKtRq1et6QO4CQAAAWABwAD95AABYAHAAEMoAQTAAENrgLyrmau8CbgKwABDJwBgA8AAeG0BH6uvwAB4pwAAAAABBcAAQ3QAAAAABAAAAwAAAAAAAAAAAGADwABDaAE/AQkBAMAA/foAAAAABgbAAENtgLyrwavSrB4AAK90AWqrwmADwAD95AIAAAEDq+GsHgAAAAEBAavrAAAAhEBgA8AAXWIAAFwBPgE9HKv8gKv3wCCIka+YAQABKQDAAF1sBsAAQ26AvKwjrDusiwAAtMIBaqwkYAPAAP3kAgAAAQOsUqyLAAAAAQEBrGIAAACWUmADvVEAAGADwAB4bQE+AUqscQEWrHguuArAAEMnwABDawbAAENvgLyskKyhrNgAALfkAWqskWADwAD95AIAAAEDrLis2AAAAAEBAazIAAAAllJgA71RAABgA8AA+tEBSqzUASkGwABDcIC8rN2s7q0aAAC34wFqrN5gA8AA/eQCAAABA6z8rRoAAAABAQGtCgAAAJZSYAO9PAAAYAPAAPrRAUqtFgEpBsAAQ3GAvK0frTCtXwAAt+IBaq0gYAPAAP3kAgAAAQOtPq1fAAAAAQEBrU4AAACWUmADvVEAAGADwAD60QFKrVoBKgbAAENygLytZK18recAALfhAWqtZWADwAD95AIAAAEDrZSt5wAAAAICAq2lAAAApTRgA8AAS88Arb0AAACFj2ADvlEAAGADwAB4bQE+AUqtzQEWrdQuuArAAEMnwABDawAAIIhnACCIugAgiQwAIIlPACCJkgAgidUAIIo1AAAABgAAAYC8ACCKWAAgcYkAIHOzACB1egAgf4AAIIf0ACCKVgAAAAUAIIpYAAAAAAACBMAAQ3W4C4C9AAA1gP4AAIIugggAgScAALZgAACBSgAApIsAAIFjAAC2dAAAgYQAAKRQAACBowAAuJ8AAIHBAAC4pwABAQKxf6TVggsAAKSOAACCJgAAu50AAQABpNSCVAAAvLoAAIJwAAC9FQAAgpQAAL2RAACCrgAAwAB4wgABAQG4DIMGAADAAEJHAACDLgAAvjYAAINfAADAAHIhAACDjgAAwABBkgAAg68AAMAAeRAAAIPWAADAAELlAACD+wAAwAB5QgAAhCcAAMAAefwAAIRVAADAAHofAACEiwAAwABc9QAAhLEAAMAAelUAAIThAADAAEMnAACFDAAAwAB6fAAAhToAAMAAZDUAAIVdAADAAHaMAACFiAAAwAB3rQAAhbsAAMAAd+4AAQECuA24DoYUAADAAF0mAAEBAbgPhlcAAMAAeucAAQEBuBCGlAAAwABkAIKFAIayAADAAEPiAACG2wAAwABnDwAAhv0AAMAAeugAAIceAACA+wAAhzgAAMAAXVwAAIdmAADAAHspAACHiwAAwABEjwAAh6cAAMAAYNEAAIfBAADAAHz7AACH3QAAwAB2LwAAh/YAAMAATAgAAIgnAADAAEu9AACISwAAwABNGwAAiHMAAMAATZgAAIiLAADAAH0FAACIogAAwAByWAAAiL0AAMAAfjgAAIjdAADAAH+DAACI9QAAwAB/3gAAiRUAAMAAa24AAAAAAAUCwABDdoC9iSyJMrzrA7gRAAABYAHAAP3kAAFgAbZhDATAAEN5gL2Jcol7CaWIwABDdQBgA6SRAATAAEN6gL2JlImfGLgSwABDdQBgA8AAfjkBKwTAAEN7gL2KKYpHGLgTwABDdQBgA8AAejUBKwTAAEN8gL2KYop4GLgUwABDdQBgA8AAexoBKwTAAEN9gL2Kg4qJGLgVwABDdQBgA8AAZDgBKwTAAEN+gL2Kp4rAGLgWwABDdQBgA8AAemgBKwTAAEN/gL2K1YrhGLgXwABDdQBgA8AAXScBKwTAAEOAgL2LAIsRGLgYwABDdQBgA8AAdqMBKwTAAEOBgL2LJ4s4GK/HwABDdQBgA8AAQuYBKwTAAEOCgL2LV4twGK9nAGADwABCZQErBMAAQ4OAvYvXjAwJuBkAXQPAAP1tAmADvTxgA8AAlZgBMowKYAO9PGADwACVmAAEwABDhIC9kEyQZBi4GgBdA8AA/W0CYAO9PGADwABNHgErAQXAAEOggL2MEYwRjkIAAAADjCKOQgAAAAEBAYwoAAAEpYhgA6SRAABgA8AAQ3YBPgROjD6MUAAAgv9gA8AA+tEBFoxkFoxcFoxSLqWIwABDdcAAQ3l6pJ2C/4E9SYx7IYGMgMAgjlQ+AT0XjJsur2dqjL1gA8AAeRHAAPZ0wABDgj4BPReM9y6vZx+NF8AAeMwBAAEuAMAAQ4I9F41ILrgXwABDdR+NW8AAXT4CAAIWjWsupYjAAEN1wABDeYGNdsAgjlQAwABDfz0XjY4ur8fAAEN1H42mwABg6gUABRaNzRaNwy6liMAAQ3XAAEN5eqSdFo3oFo3eLqWIwABDdcAAQ3mlEKS6LhaOEhaOCC6liMAAQ3XAAEN5lpyktxaOJC6vZ8AAQ4IAwABDgQIIAcAAQ3mAAMAgjj0JAYwRwAD9+gAAAAAXBsAAQ4aAvY5HjmqO3AEAlqABao5IYAPAAP3kAgAAAQOOcI7cAAAAAAAAAF0DwAD9OwFgA6RRAT4DTo6JjpAAAIF2XQPAAP07AWADpFEBJo6JARaOoxaOki6lMsAAQ4eWoMAAQutdA8AA/TsBYAOkUT0cjrWAjq7AII+iVgEAARaOuS6vY8AAQ4gAwAD9TEqOywGAjtLAII+iBsAAQ4eAvY7hjwKPJwEApTIBao7iYAPAAP3kAgAAAQOPE48nAAAAAAAAAGADwABC5gFKjxYBFo8WLq/HwABDdcAAQ4EGwABDiIC9jyyPTI9nAQCvYwFqjy1gA8AA/eQCAAABA49Yj2cAAAAAAAAAYAPAAF0nAUqPWwEWj1suuBfAAEN1wABDfwbAAEOJgL2PbI92j48BALgbAAAAAQOPho+PAAAAAAAAAGADwABkOAFKj4kBFo+JLrgVwABDdcAAQ30GwABDioC9j5SPp4/WAQC4HAAAAAEDj72P1gAAAAAAAABgA8AAeukBSo/AARaPwC64FMAAQ3XAAEN8BsAAQ4uAvY/bj/mQKAEAuB0AAAABA5AUkCgAAAAAAAAAYAPAAHajAUqQFwEWkBcuuBjAAEN1wABDgAbAAEOQgL2QaZBwkRoAALgeAAAAAQOQipEaAAAAAQEBkJgAAACWUmADvTwAAGADwAD+fgE+AUqQpwEekK7AAGQCAgABHJDKFpC9LrgZwABDg0sBAAGAkMvAIJFXAMAA/YEBgvsWkQMWkPsWkPEupYjAAEN1wABDeXqknYL7gTgGwABDjIC9kR+RQJHKAQC0EQFqkSBgA8AA+oSF/wAAAQORS5HKAAAAAAAAAGADwAByXgE+AkAhHJFkFpFYLrgSwABDdcAAQ3pIAQABKwDAAP3xkViRawEnuB9KkbQBFpG7LrgSwABDdcAAQ3oGwABDjYC9kjaSWJNSAQC4IAAAAAEDknaTUgAAAAAAAABgA8AAejUBPgJAIRySqxaSjC64E8AAQ3XAAEN7SAEAASsAwAD98ZKMkrIBHpK8th8CAAJqksVgA7YxwADGDye4IQBKkykBFpMwLrgTwABDdcAAQ3sGwABDjoC9k1eTdZTqAQC4IgAAAAEDk4aU6gAAAAAAAABgA8AAdqMBPgNAIRyTrhaTnC64GMAAQ3XAAEOASAEAASsAwAD98ZOck7UBHpO/th8CAAJqk8hgA7YxwADGDye4IwBAIRaUSxaUOS64GMAAQ3XAAEOAuCTAAHaplDiUYQEelGu2HwIAAmqUdGADtjHAAMYPJ7glAEqUzgEWlNUuuBjAAEN1wABDgAbAAEORgL2U75UImR0AAKVnAWqU8GADwAD95AIAAAEDlRqZHQAAAAICApUvAAAApSJgA8AATd8AlUsAAACvZGADvEoAAGADwABNnAE+CE6VeJWBAAClXmADwABD5QEmlXgBFpWNFpWDLqWIwABDdcAAQ3mk8aSTYAPAAEPlPReVoy64EsAAQ3UflbXAAH7gBQAFFpXdFpXTLqWIwABDdcAAQ3mlEKS6FpX5FpXvLqWIwABDdcAAQ3mAiaShJpYXARaWF4KWDsAgk5C0EcAARAJgA8AAhDUWljeAlivAIJNruCbAAE3uFpZcgJZQwCCTa6VQwABN8QDAAEN6TpaClpMAALgnYAPAAGtxAR+WmcAAa30AAAAATpbDltYAALgoYAPAAH0cAR+W3MAAfSwDAAMWlvguuBLAAEN1wABDeoOXBcAglD0WlyOAlxfAIJNrpVDAAE3xAE6XTpdhAAC4KWADwAB/5AEfl2fAAH/9BQAFFpeFLrgSwABDdcAAQ3qDl5rAIJQ9hJe0wCCUWBaX2haX0C6liMAAQ3XAAEN5eqSdFpf1FpfrLqWIwABDdcAAQ3mk/aSlAE6YHpgrAAClZmADwABNnAEcmECFmC3AIJSYuCoDAAOAmFzAIJNrFphygphpwCCTkLgrwABD9oGYgcAgk3kAwAB/8z0XmKIWmJYuuBLAAEN1wABDergsH5jKvEkBAAEWmPGGmOTAIJT4r2TAAE2uAMAAfmZKmQYBhpkNwCCU+AbAAEOSgL2ZIpkzmZsAAKUrAWqZI2ADwAD95AIAAAEDmUeZmwAAAAEBAZlgAAAIpSJgA8AAf4QAAFwBPgE9F5lzLrgSwABDdRaZjYCZgcAglZ+0EcAAf5nAAEN6BsAAQ5OAvZmgmbqgMQAApS0BapmhYAPAAP3kAgAAAQOZyKAxAAAAAQEBmesAAAClIGADwABBuAAAYAPAAEMRAT4LTpoamiYAAKUiYAPAAE2cARaaQ4CaKMAglfulIsAAQcROmmSabAAAt91gA8AAdysBapp0YAPAAHcrwAD2e06alpqhAAC33mADwABlTwEjFpq1FpqtFpqjLqWIwABDdcAAQ3l6pJ2C+4E4aprYYAPAAGVhwAD2gmqa/WADwABlT8AA9okBYAPAAGVPTpsXmx4AALfcYAPAAHY1AR+bJMAAdkICAAKBmyvAIJYUFptCFps4LqWIwABDdcAAQ3mBcqS5AE6ba5t2AAC32mADwAB21QEfm3zAAHcqBQAFgpudwCCWNBabuoGbrsAglhS4LcAATaAWm9qBm87AIJYUpTvAAE2iFpwCgZv2wCCWFLO3wABNpBacJoGcGsAglhS4LsAATaYATpxPAAAAt9lgA8AAd+YASZxlFpx7FpxzFpxpLqWIwABDdcAAQ3l6pJ2CrYE0PgI9jpybwCCXNx+cssAAdtQBAAGBnNPAIJYUAD0XnOcuuBjAAEN1H50JwAB2vAIAAoGdKsAglhQmnTcBhp03wCCXN2ADwAB2zgDAAEOAPgNOnW6dfwAAuC9gA8AAdv8BH52FwAB3FAEAAYGdlsAglhQAPRedqi64GMAAQ3WHnb7AIJe0wABDgD2OndbAIJc3h53pwCCXtE6eFJ4lAAC322ADwAB39QEjFp45Fp4xFp4nLqWIwABDdcAAQ3l6pJ2CuIFWH55YwAB4EAYABoGed8AglhSGnpDAIJc3Fp66gZ6uwCCWFLgtwABNoBae3oGe0sAglhSlO8AATaIWnwqBnv7AIJYUs7fAAE2kFp8ygZ8mwCCWFLguwABNpgArAWADwAB3/06fXp9mAACvZWADwABDEQEfn2zAAEMmBgAGhp9+wCCXN4WfkMAgltWHn6TAIJf7hJ+2wCCWnoKfvsAgljSDn8fAIJZRAD0cn+oWn9kupTLAAEOHt7sCAAKAn/XAIJX7FKARwCCYiAgAAMAAQuhKoB8BFKAmwCCYiAgABsAAQ5SAvaA2oFKn7QAApVQBaqA3YAPAAP3kAgAAAQOgZ6ftAAAABQUFoHwAAACWvGADpFEAoJUAAAClImADwABNnACgwwAAAKVSYAPAAEG4AKDvAAAAr2VgA8AAQxEAoQ0AAAClL2ADttIAAGADwABc9gE+CEAhHKE2FqEqLrgSwABDdcAAQ3pIAQABKwDAAP3xoSqhPQEnuB9OoZ2htAAAuDBgA8AAesYBH6G6wAB61QMAAxah5oGh2sAgmTe4McAATaEWoguBof/AIJk3s7fAAE2kFqIvgaIjwCCZN7gtwABNoAA9HKJALrgywABDdQMAA4KiYcAgmUWDonnAIJlThaKCwCCZnQDAAEOWTqKyosUAAKU7YAO7XgEWotOBosfAIJk3pTvAAE2iTqL6owkAALO3YAO4qAEWoxeBowvAIJk3s7fAAE2kTqM6o0IAALSeYAPAAHlhAR+jUMAAefsCAAKHo1/AIJouFqOBFqN5FqNvLqWIwABDdcAAQ3l6pJ2CuIFWAD0Xo5guuBPAAEN1H6O9wAB6PwMAA4ej5MAgmi6Go/TAIJoQFqQUgaQIwCCZN7gtwABNoADAAEN7SqQlAR+kMMAAXSUFAAWApEnAIJkrH6RbwABMXgMAA4GkgMAgmTccpLkWpKMWpJkupYjAAEN1wABDeaT9pKW1mgAAAAC+ToWk38AgmZ0AH6UEwABDrAUABS6BpUDAIJk3hKVZwCCZYR+lecAAf2EBAAEWpYwuuBLAAEN1wABDegAfpmLAAF/kAQABFqaJFqZ+FqZyLrgSwABDdcAAQ3q4M8AAfle4NMAApKAAAB+mpsAAeh4IAAgWptUWpssupYjAAEN1wABDeXqknYam6sAgmhCHpwrAIJouFKcmwCCaTAgAFqdHgac7wCCZN7QEwABNnxanbYGnYcAgmTe4LsAATaYWp4IuuCDAAEONJqetARanrS64HMAAQ4pgA8AAexoAFqfZgafNwCCZN6VQwABNqwAGwABDloC9qDioPa56AAC4MsAAQ3UAAAABA6hUrnoAAAADAwOodwAAAKUgYAPAAEG4AKinAAAAr2VgA8AAQxEAqM0AAAC4MGADwAB6xgAAXAE+CE6o+KkEAAClImADwABNnAEWqSGAqQbAIJwVpSLAAEHETqlCqUoAALfdYAPAAHcrARapVIGpTMAgnCO33cAAQxhOqWypdwAAt95gA8AAZU8BFqmBgal5wCCcI7fewABDGT0XqZEuuBXAAEN1IxaprBappBapmi6liMAAQ3XAAEN5eqSdgvuBOCMWqdsWqdMWqckupYjAAEN1wABDeXqknYMGgU0fqf/AAGYjAwADg6oTwCCcRYSqIMAgnGWFqinAIJyFAB+qR8AAZl8DAAODqlPAIJxFhKpgwCCcZYWqacAgnIUAAWADwABkOB+qg8AAZNcDAAODqonAIJxFhKqWwCCcZYWqn8AgnIUAAWADwABkOMAAQ309F6qwLrgUwABDdR+qzcAAeygHAAcWqvYWquwupYjAAEN1wABDeXqknRarE4OrB8AgnEWlO8AATaIWqzuDqy/AIJxFs7fAAE2kFqtfg6tTwCCcRbg1wABNoxarci6vY8AAQ4gWq5ODq4fAIJxFuDbAAE2oFqu6g6uuwCCcRbgtwABNoADAAEN8PRyr1xaryy6vY8AAQ4i4NwMAAxar5S64FcAAQ3XAAEN9gavtwCCcI4Or9sAgnEUAwABdO06sdKx8AAC0nmADwAB5YQEfrILAAHn7AgACFqymg6yawCCcRbO3wABNpBasyBaswBasti6liMAAQ3XAAEN5eqSdgriBVgA9F6zgLrgWwABDdR+tAMAAensMAAyDrSLAIJxFFq1Dg603wCCcRaU7wABNohata4OtX8AgnEWzt8AATaSGrYPAIJ4WFq2gg62UwCCcRbgtwABNoBatwIOttMAgnEW0BMAATZ8WreKDrdbAIJxFuC7AAE2mJq3zARat8y64HMAAQ4pgA8AAexoWrhIuuBXAAEN1wABDfYKuIsAgnDEWrkIuuCLAAEOOFq5oFq5cLq9jwABDiLg4wABdNQDAAEN+BsAAQ5eAva5/rou0ogAAuDkAAAABA66XtKIAAAAFBQWuqAAAAKVpYAO4oACuwQAAAKUiYAPAAE2cAK7jAAAApS9gA7bSAK8GAAAAuDpgA8AAXgEAryoAAAC4O2ADwABf3AAAYAPAAE0eAT4JTq9Or1UAAIJqYAO9PAEWr1yAr1fAIJ85llK4ok6vd69+AACBdmADtu4BHK+Pgq+AwCCfU6/FAQABha+hwCCfhgC210mvrhavxBavvBavsi6liMAAQ3XAAEN5eqSdgsyBQj4MTq/br+gAALg8YAPAAPrRASlOsAOwCAAAEl0DwAD9OwFgA8AA/eQBMbAKYAPAAP3kAE6wHbAiAACEQGADwABdYgEfsCjAAGC9AgABFLAzwCCf+ggAAbg8h7BHwCCf6T0csGEUsFzAIKAaCQC4PQEAAR+we7hHAQABgbCNwCCfRQAAwABdrT0csKmGsKLAIJ+ir3QBAAEUsLnAIKAaCQAAtvhOsNGw2AAAg0pgA8AAXbEBH7DewABg0AIAARSw68Agn/oIAAG4PIew/8Agn+lOsSaxMwAAr81dA8AA/TsBYAO3GwExsTVgA7cbAE6xV7FpAACwfl0DwAD9OwFgA7dHATGxa2ADt0cAPRyxfBSxdcAgoIoKALg+AQABH7GhuD4DAAOBsbPAIJ9FFLHAwCCgtwsAFLHOwCCg1AwAAADAAF25PRyx8BSx6cAgoIoKALg/AQABg7IFwCCfXwDAAF22PRyyIRSyGsAgoIoKALhAAQABhLI5wCCfbQDAAF21PY6yUcAgn6Iesmi29gMAAxSyhsAgoIoKABSyjsAgoLcLABSynMAgoNQMAAA/SbK6IRyyyhayxYayvsAgn6KCl7bxSAEAASsAwAD98T4BPRyy6Bay2y64GcAAQ4OAvwIAAoWy6cAgn4YWsvqGsvPAIJ+igpe28QDAAP2CP0mzChqzDqSNPgI9IxyzRRazLC64GsAAQ4RIAQABKwDAAP3xF7MsLrgaMrNkYAO9PGADwABNHgDAAEOEKwFdA8AA/W0CYAO9PGADwABNHj0cs4YWs24uuBrAAEOEgL8CAAKFs4fAIJ+GFrOYhrORwCCfoq/MtvIAwAD9gj9Os7azwgAAs8dgA8AATR4BHLPmFrPMLrgWwABDdcAAQ364QQEAARa0BIaz/cAgn6KvzLbyAMAAenk9HLQoFrQbFrQRLqWIwABDdcAAQ3mlAKSptNcCAAKFtDfAIJ+Gh7Q/wCCiXgC8+z0ctFiGtFHAIJ+ir9ECAAIWtGouuBXAAEN1wABDfRa0fha0ci6vY8AAQ4iv08AAXTYAtvlKtIwBh7STwCCiXgbAAEOYgL20p7S4tSgAAKVcAWq0qGADwAD95AIAAAEDtMS1KAAAAAEBAbTTAAAAr2VgA8AAQxEAAFwBPgI9HLT8FrTiLq9nwABDgrdxAAAAAMAAQmk9HLUdFrUWgLUOwCCjLrfcwABDF4KMAAAAAMAAdkAGwABDmYC9tS21PbadAAClWQFqtS5gA8AA/eQCAAABA7VMtp0AAAAEBAS1WgAAAKUiYAPAAE2cALV0AAAApVpgA8AAQygAtZYAAAClLGADwABDEQC1sgAAAKVWYAPAAEwPAABgA8AA/JcBPgNOtcq11gAApVhgA8AA/JcBHLXkFrXYLq9jwABDiKVZBQAFFrX9LrgVwABDdcAAQ32AtgXAIKOhgbYSwCCjr4K2IMAgo72Dti/AIKPLAMAAXTw9HLZfFrZOgLZCwCCjobc1wABNp7hCAQABFrZ4FrZuLqWIwABDdcAAQ3mlEKS6AMAAcFRKtocBhLaOwCCj5AbAAEOagL22ora5uBUAAK9mAWq2o2ADwAD95AIAAAEDtsm4FQAAAAICArbeAAAAlrxgA6RRALb+AAAAr2dgA8AAQmUAAGADwABg6wE+AUq3HwEftyrAAEPIBgAGgLdEwCCknBa3XBa3Ui6liMAAQ3XAAEN5eqSdFrd3FrdtLqWIwABDdcAAQ3mlEKS6FreTFreJLqWIwABDdcAAQ3mlAKSpFrfjLrQRwABDjIG398AgpKgABsAAQ5uAvbgauDG4tAAApZMBargbYAPAAP3kAgAAAQO4Qri0AAAAAgICuE0AAAClkWADtjEAuF8AAAClFWADvRYAAGADtiEBPgFKuHUBHLiIFrh8LrgSwABDdcAAQ3q4QwIAAoC4lsAgpU+BuKHAIKVbAMAAfmoGwABDnIC9uLm407mEAACvaAFquLpgA8AA/eQCAAABA7jmuYQAAAACAgK4+wAAAKUiYAPAAE2cALkcAAAApU9gA8AAQzIAAGADwABBswE+AUq5NwEfuULAAHI+AwADFrlULqWIwABDdcAAQ3mAuV/AIKXGgblswCCl1AAGwABDnYC9uYm5mrq6AACvagFquYpgA8AA/eQCAAABA7muuroAAAABAQG5ugAAAINKYAPAAF2xAABcAT4DPRy5z4C5yMAgpkG4RAEAAR+56MAAf3cBAAEWufsuuBLAAEN1wABDegAAwABdtz0cuhWAug7AIKZBuD8BAAEfui7AAH9hAQABFrpBLrgSwABDdcAAQ3oAAMAAXbY9HLpbgLpUwCCmQbhAAQABH7qAwABf5AEAARa6pxa6nBa6kC64EsAAQ3XAAEN6uDPAAH5XuDTAAKSgAADAAF21BsAAQ56Avbq/uti86QAAr2kBarrAYAPAAP3kAgAAAQO67LzpAAAAAQEBuxAAAACBpmEDAWADvTxcAABgA8AAXhMBPgROux27MwAAuEVgA8AA/JcBHLtBFrs1LrgSwABDdcAAQ3q4RgAAAADAAH5oTrt6u4cAALhHYAPAAH94AR+7lcAAf4ICAAIWu6guuBLAAEN1wABDeoG7tcAgpzUARbvRAbvau+YAALhIYAPAAPyXAZMBHLv/g7vzwCCnk2MBAAEWvBUWvA0WvAEuuBLAAEN1wABDeoSUwAB+WmHAAI8XAMAA/cUBi7wlwCCnkxy8MIO8JcAgp5NkAQABlADAAP29QT4DTrxJvFAAAIJqYAO9PAEcvGYWvF4WvFIuuBLAAEN1wABDeoSUwAB+WrhJAQABg7xwwCCnkwDAAI8TSbyEIhy8j4S8iMAgp/ZIAQABKwDAAP3xARa8oYS8msAgp/aEH71JQrytAD89HLy+gLy9wCCnGiABAAGEvL/AIKf2AABKvNIBgrzZwCCnYAAAII9oACCQAQAgkEUAIJCJACCQwwAgkP0AIJE3ACCRtgAgkiIAIJKXACCTQQAglXUAIJXRACCZAQAgm/EAIJ8ZACCjBAAgo3cAIKRyACClJQAgpZwAIKYXACCm8AAgqH0AAAAXAsAAQ6GAvbzuvPS/dwO4SgAAAWABwAD95AABYAG+EwUEwABDpIC9vUi9WAm4S8AAQ3UAYAPAAEN2AATAAEOlgL29b717CbYjwABDdQBgA8AATZwABMAAQ6aAvb2UvaMJuEzAAEN1AGADttIABMAAQ6eAvb26vccJuE3AAEN1AGADwABeAQAEwABDqIC9veG98Qm4TsAAQ3UAYAPAAF/cAAEFwABDrIC9vfa99r6DAAAAA74SvoMAAAAFBQW+GAAABLhLYAPAAEN2AL4vAAAEtiNgA8AATZwAvkgAAAS4TGADttIAvl4AAAS4TWADwABeAQC+cgAABLhOYAPAAF/cAABgA8AAQ6EBPwYIAcAAQ6SAAMAgqZ4IAcAAQ6WBAMAgqawIAcAAQ6aCAMAgqboIAcAAQ6eDAMAgqcYIAcAAQ6iEAMAgqdQJAb32wAD9+gAAAAABBsAAQ6qAvb6Ivp2/dQAAtX4Bar6JYAPAAP3kAgAAAQO+q791AAAAAQEBvrkAAAikZ2ADvTwAAGADuKABPgJJvscWvtKAvsvAIKpfhB+9SUq+3gErP0q+7wEfvvrAAEO5BgAGFr8QLrhLwABDdcAAQ6QWvyIutiPAAEN1wABDpRa/OC64TMAAQ3XAAEOmFr9JLrhNwABDdcAAQ6cWv1guuE7AAEN1wABDqIC/asAgql8AAAAgqjUAIKrmAAAAAQLAAEOtgL2/er+AwABB8AO4TwAAAWABuKAAAAYEwABDsIC9v8O/0wm4S8AAQ3UAYAPAAEN2AATAAEOxgL2/6r/2CbYjwABDdQBgA8AATZwABMAAQ7KAvcAAQA/AAEAeCbhMwABDdQBgA7bSAATAAEOzgL3AAEA1wABAQgm4TcAAQ3UAYAPAAF4BAATAAEO0gL3AAEBcwABAbAm4TsAAQ3UAYAPAAF/cAATAAEO1gL3AAECPwABAlgmWUgFqwABAcWADwAD95AJgA708AAEFwABDuYC9wABAm8AAQJvAAEFOAAAAA8AAQLDAAEFOAAAABgYGwABAvQAABLhLYAPAAEN2AMAAQNoAAAS2I2ADwABNnADAAEDzAAAEuExgA7bSAMAAQQ8AAAS4TWADwABeAQDAAEEpAAAEuE5gA8AAX9wAwABBRgAABJZSYAO9PAAAYAPAAEOtAT8HCAHAAEOwgADAIKvlCAHAAEOxgQDAIKv1CAHAAEOyggDAIKwFCAHAAEOzgwDAIKwTCAHAAEO0hADAIKwjCAHAAEO1hQDAIKwzCQHAAECbuKYAAAAAAQbAAEO3gL3AAEFTwABBa8AAQe4AAIKfAWrAAEFUYAPAAP3kAgAAAQPAAEFuwABB7gAAAAAAAABgA8AATR4BPgFKwABBdwEcwABBjxbAAEF+LrhLwABDdcAAQ7C4OQUABS4WwABBqy62I8AAQ3XAAEOxFsAAQbkuuEzAAEN1wABDshbAAEHKLrhNwABDdcAAQ7MWwABB2S64TsAAQ3XAAEO0AMAAQ5cAACCsoAAgrUYAAAABAsAAQ7qAvcAAQi/AAEI1wABIIAO4UAAAAWABwAD95AABYAHAAGDrCATAAEO9gL3AAEJzwABCeAm4UcAAQ3UAYAOkUQAEwABDvoC9wABCksAAQpoJsmTAAEN1AGADgRQABMAAQ7+AvcAAQrfAAELACaTzwABDdQBgA7X/AATAAEPAgL3AAELXwABC5Am4UsAAQ3UAYAO85gAEwABDwYC9wABC/cAAQwgJuBLAAEN1AGADwAByXgAEwABDwoC9wABDLMAAQ0YJuFPAAEN1AGADwABCZQAEwABDw4C9wABDX8AAQ2sYuFTAAEN1AGADwABC7gErBMAAQ8SAvcAAQ3/AAEOPGLhVwABDdQBgA8AAfLUBKwEFwABDyIC9wABDlMAAQ5TAAEQcAAAAA8AAQ6TAAEQcAAAABgYGwABDqgAABLhRYAOkUQDAAEO2AAAEsmRgA4EUAMAAQ8UAAASk82ADtf8AwABD2wAABLhSYAO85gDAAEPvAAAEuBJgA8AAcl4AwABEAQAABLhTYAPAAEJlAABgA8AAQ7oBPwcIAcAAQ72AAMAgrosIAcAAQ76BAMAgrpkIAcAAQ7+CAMAgrqcIAcAAQ8CDAMAgrrUIAcAAQ8GEAMAgrsMIAcAAQ8KFAMAgrtMJAcAAQ5TAAP36AAAAAAEGwABDxoC9wABEIcAARDTAAEgeAACi2wFqwABEImADwAD95AIAAAEDwABEOcAASB4AAAAHBwfAAEROAAAAgmpgA708AMAARGkAAAClImADwABNnADAAESXAAAAtzRgA8AAQbgAwABEtAAAAK9lYAPAAEMRAMAARNMAAAC4VmADtrMAwABE8AAAAK/SYAPAAGVuAMAARQwAAACv02ADwABdPwAAYAPAAEUCAT4DPSMcwABFKBbAAEUbLrhUwABDdcAAQ8NIAQABKwDAAP3xF8AARRsuuFTAAEN1H8AARTDAAEMFAQABFsAARVCBwABFRMAgr4ilUMAATasAwABDwysBYAPAAELuPSMcwABFdxbAAEVmLrhVwABDdcAAQ8RIAQABKwDAAP3xF8AARWYuuFXAAEN1H8AARX/AAHy+AgAAAoL+FsAARbcWwABFri6yZMAAQ3XAAEO+gv6BPLhXFsAARfEWwABF6C6yZMAAQ3XAAEO+gr+BRcAAQ8QrAWADwAB8tUrAAEYKARzAAEYXFsAARhEuuFHAAEN1wABDvZbaAQFgA8AARQIBNMAARh8DwABGH8AASBkAAAAAAAAAYAPAAEUCAT4CTsAARkDAAEZIAACEJmADwAB7NgEfwABGTsAAfEQQABAWwABGby6yZMAAQ3XAAEO+FsAARoMupPPAAEN1wABDv4DAAEaYwCCvehzAAEa2FsAARqouuBLAAEN1wABDwbhYAQABgMAARsjAIK96AMAAcn0WwABG2y64UsAAQ3XAAEPAFsAARvQuuBLAAEN1wABDwYLAAEcLwCCvmIHAAEcewCCviITAAEc1wCCvuIXAAEdJwCCvxobAAEdawCCv1hbAAEd1g8AAR23AIK+ot9zAAEMXFsAAR4+DwABHh8Agr6i32sAAQxUWwABHpS64U8AAQ3XAAEPCFsAAR8suuFTAAEN1wABDwxbAAEfjLrhVwABDdcAAQ8QASsAAR/wBHMAASAuHwABIA8AgsQui2wAAAADAAHv+AKRjAAAgr0QAILJCAAAAAQLAAEPJgL3AAEgjwABIKcAAVFkDuFkAAAFgAcAA/eQAAWABwAByhwIEwABDzIC9wABIj8AASKYJtJbAAEN1AGADwABBuAAEwABDzYC9wABIysAASNgYuFrAAEN1AGADwABBkwErAQXAAEPhgL3AAEjdwABI3cAASWAAAAADwABI+cAASWAAAAACAgLAAEkOAAAAgklgA708AMAASRsAAAS0lmADwABBuAAAYAPAAEPJAT4BPRfAAEk6LrhawABDdRzAAElLLrhbwABDdQEAAYDAAElVwCCy2gDAAEPQwABDzQIIAcAAQ8yBAMAgsugJAcAASN3AAP36AAAAABAGwABD0IC9wABJZcAASYXAAEoJAAC4W8AAQ3UAAAABA8AASY7AAEoJAAAAAQEBwABJnAAAAINTYAO9PAAAYAPAAEGTAUrAAEmoARzAAEnLFsAASagutJbAAEN1wABDzLSpAQABIyXAAEncgMAASdrAILN6YAO9cBbAAEn5FMAASffAILN6AAFgA71wmQi9coDAAEoHwCCzegFgA708AMAAQb0GwABD0YC9wABKDsAASijAAEq/AAC4XAFqwABKD2ADwAD95AIAAAEDwABKN8AASr8AAAABAQHAAEpHAAAAgm5gA71RAABgA75RAT4BSsAASlcBHsAASnPAAHz+AgACgMAASpnAILQkFsAASqMutJbAAEN1wABDzAAGwABD0oC9wABKxMAASt7AAEtxAAC4XQFqwABKxWADwAD95AIAAAEDwABK9sAAS3EAAAACAgLAAEsSAAAAg/NgA4XDAMAASywAAACxKmADvlwAAGADvlEBPgFKwABLRwEcwABLXRbAAEtOLrhawABDdcAAQ823IgEAAYDAAEtowCC0nADAAEGbBsAAQ9OAvcAAS3bAAEuQwABL5wAAuF4BasAAS3dgA8AA/eQCAAABA8AAS6HAAEvnAAAAAQEBwABLsQAAAIPzYAOFBAAAYAO+UQE+AUrAAEu9ARzAAEvTFsAAS8QuuFrAAEN1wABDzbciAQABgMAAS97AILUkAMAAQZsGwABD1IC9wABL7MAATAbAAExpAAC4XwFqwABL7WADwAD95AIAAAEDwABMHcAATGkAAAABAQHAAEwzAAAAg/NgA4UpAABgA75RAT4BSsAATD8BHMAATFUWwABMRi64WsAAQ3XAAEPNtyIBAAGAwABMYMAgtZ4AwABBmwbAAEPVgL3AAExuwABMiMAATQ8AALhgAWrAAExvYAPAAP3kAgAAAQPAAEyZwABNDwAAAAICAsAATLAAAACD82ADhRYAwABMygAAALEqYAO+XAAAYAO+UQE+AUrAAEzlARzAAEz7FsAATOwuuFrAAEN1wABDzbciAQABgMAATQbAILYYAMAAQZsGwABD1oC9wABNFMAATS7AAE3+AAC3LwFqwABNFWADwAD95AIAAAEDwABNP8AATf4AAAACAgLAAE1WAAAAuGFgA4cIAMAATXcAAACxKmADvlwAAGADvlEBPgFKwABNkgE1AAAAAQBgA75RARzAAE2xFsAATZkutJbAAEN1wABDzLcvAQABgMAATcPAILagAMAAQcIjHMAATdCCAMAgtstIAQABKwAAFsAATe+BwABN28Agtq6epb5eggDAILbLAWADvlEGwABD14C9wABOA8AATh3AAE54AAC3JAFqwABOBGADwAD95AIAAAEDwABOK8AATngAAAABAQHAAE4+AAAAg/NgA4gBAABgA75RAT4BSsAATkoBHMAATmAWwABOUS64WsAAQ3XAAEPNtyQBAAGAwABOb8Agt2MAwABBnQbAAEPYgL3AAE59wABOl8AATwAAALcmAWrAAE5+YAPAAP3kAgAAAQPAAE6swABPAAAAAAEBAcAATr8AAACD82ADiAEAAGADvlEBPgFKwABOywEcwABO4RbAAE7SLrhawABDdcAAQ823JgEAAYDAAE73wCC33QDAAEGfBsAAQ9mAvcAATwXAAE8fwABPigAAtyUBasAATwZgA8AA/eQCAAABA8AATzXAAE+KAAAAAQEBwABPSAAAAIPzYAOIAQAAYAO+UQE+AUrAAE9UARzAAE9qFsAAT1suuFrAAEN1wABDzbclAQABgMAAT4HAILhXAMAAQZ4GwABD2oC9wABPj8AAT6DAAFCBAAC4YgFqwABPkGADwAD95AIAAAEDwABPtcAAUIEAAAACAgLAAE/PAAAAg/NgA4gBAMAAT+kAAACxKmADvlwAAGADwAD60QE+Ak7AAFASwABQFwAArSxgA75RARzAAFAZLrckAQABgMAAUCjAILjRAMAAQ9dKwABQMwEWwABQbRzAAFBOgcAAUDrAILjftgABAAGCwABQZ8AguPgAvsq0rb4/BsAAQ9uAvcAAUIbAAFCgwABRWwAAuGMBasAAUIdgA8AA/eQCAAABA8AAULHAAFFbAAAAAQEBwABQxAAAAIPzYAOIAQAAYAO+UQE+AUrAAFDQAR7AAFDswAB9AQMAAx7AAFEXwABL/QAAAAAc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/eQCAAABA8AAQ8bAAEPzAAAAAQEBwABD1AAAAIPzYAPAAEmgAABbAUrAAEPdARzAAEPdLrlEAQABgMAAQ+7AIVSBAMAARSsGwABFYIDCwABD98AAQ/fAAEQ0AAC5eQAAAAEDwABEB8AARDQAAAABAQHAAEQVAAAAg/NgA8AAR5kAAFsBSsAARB4BHMAARB4uuUQBAAGAwABEL8AhVN0AwABFKwbAAEVhgMLAAEQ4wABERMAARHsAALkVAWrAAEQ5YAPAAP3kAgAAAQPAAERRwABEewAAAAEBAcAARFwAAACD82ADwABHoAAAWwFKwABEZQEcwABEZS65eQEAAYDAAER2wCFVRQDAAEVgBsAARWKAwsAARH/AAESLwABEwgAAuRYBasAARIBgA8AA/eQCAAABA8AARJjAAETCAAAAAQEBwABEowAAAIPzYAPAAEenAABbAUrAAESsARzAAESsLrl5AQABgMAARL3AIVWtAMAARWAGwABFY4DCwABExsAARNLAAEUNAAC5FwFqwABEx2ADwAD95AIAAAEDwABE4cAARQ0AAAABAQHAAETuAAAAg/NgA8AASNoAAFsBSsAARPcBHMAARPcuuUQBAAGAwABFCMAhVhUAwABFKwbAAEVkgMLAAEURwABFHcAARV4AALkYAWrAAEUSYAPAAP3kAgAAAQPAAEUswABFXgAAAAEBAcAARTkAAACD82ADwABIsgAAWwFKwABFQgEcwABFQi65cwEAAYDAAEVZwCFWfQDAAEUzBsAARWWAwsAARWLAAEVuwABFoQAAuRoBasAARWNgA8AA/eQCAAABA8AARXnAAEWhAAAAAQEBwABFggAAAIPzYAPAAEhUAABbAUrAAEWLARzAAEWLLrlyAQABgMAARZzAIVblAMAARTIGwABFZoDCwABFpcAARbHAAEXeAACFwwFqwABFpmADwAD95AIAAAEDwABFucAARd4AAAABAQHAAEW/AAAAg/NgA8AASNIAAFsBSsAARcgBHMAARcguuUQBAAGAwABF2cAhV00AwABFKwbAAEVngMLAAEXiwABF7sAARjsAALkbAWrAAEXjYAPAAP3kAgAAAQPAAEYFwABGOwAAAAEBAcAARhoAAACD82ADwABJfQAAWwFKwABGIwEcwABGIy65cAEAAYDAAEY2wCFXtQDAAEUwBsAARWiAwsAARj/AAEZLwABGeAAAuR0BasAARkBgA8AA/eQCAAABA8AARlPAAEZ4AAAAAQEBwABGWQAAAIPzYAPAAEjzAABbAUrAAEZiARzAAEZiLrlEAQABgMAARnPAIVgdAMAARSsGwABFaYDCwABGfMAARojAAEbEAAC5GQFqwABGfWADwAD95AIAAAEDwABGlcAARsQAAAABAQHAAEagAAAAg/NgA8AAR+0AAFsBSsAARqkBHMAARqkuuWwBAAGAwABGv8AhWIUAwABFLAbAAEVqgMLAAEbIwABG1MAARxYAALkcAWrAAEbJYAPAAP3kAgAAAQPAAEbnwABHFgAAAAEBAcAARvgAAACD82ADwABI4AAAWwFKwABHAQEcwABHAS65FwEAAYDAAEcRwCFY7QDAAEVjBsAARWuAwsAARxrAAEcmwABHZQAAuR4BasAARxtgA8AA/eQCAAABA8AARzrAAEdlAAAAAQEBwABHTAAAAIPzYAPAAEpTAABbAUrAAEdVARzAAEdVLrl3AQABgMAAR2DAIVlVAMAARUAGwABFbIDCwABHacAAR3XAAEe6AAC5HwFqwABHamADwAD95AIAAAEDwABHicAAR7oAAAABAQHAAEebAAAAg/NgA8AAR34AAFsBSsAAR6QBHMAAR6QuuUQBAAGAwABHtcAhWb0AwABFKwbAAEVtgMLAAEe+wABHysAAR/gAALkgAWrAAEe/YAPAAP3kAgAAAQPAAEfSwABH+AAAAAEBAcAAR9gAAACD82ADwABGjAAAWwFKwABH4QEcwABH7BbAAEfmgMAAR+HAIVolgJbAAEaOhFIBAAEuAMAARlkGwABFboDCwABH/MAASAjAAEhGAAC5IQFqwABH/WADwAD95AIAAAEDwABIFsAASEYAAAABAQHAAEgiAAAAg/NgA8AASAgAAFsBSsAASCsBHMAASCsuuWwBAAGAwABIQcAhWpgAwABFLAbAAEVvgMLAAEhKwABIVsAASIkAALEYAWrAAEhLYAPAAP3kAgAAAQPAAEhhwABIiQAAAAEBAcAASGoAAACD82ADwABJNgAAWwFKwABIcwEcwABIcy65dAEAAYDAAEiEwCFbAADAAEU0BsAARXCAwsAASI3AAEiZwABI0gAAuSIBasAASI5gA8AA/eQCAAABA8AASKfAAEjSAAAAAQEBwABIswAAAIPzYAPAAEgeAABbAUrAAEi8ARzAAEi8LrluAQABgMAASM3AIVtoAMAARS0GwABFcYDCwABI1sAASOLAAEkdAAC5IwFqwABI12ADwAD95AIAAAEDwABI8cAASR0AAAABAQHAAEj+AAAAg/NgA8AASCcAAFsBSsAASQcBHMAASQcuuW4BAAGAwABJGMAhW9AAwABFLQbAAEVygMLAAEkhwABJLcAASWkAALkoAWrAAEkiYAPAAP3kAgAAAQPAAEk6wABJaQAAAAEBAcAASUUAAACD82ADwABH9gAAWwFKwABJTgEcwABJTi65bAEAAYDAAElkwCFcOADAAEUsBsAARXOAwsAASW3AAEl5wABJrAAAsRQBasAASW5gA8AA/eQCAAABA8AASYTAAEmsAAAAAQEBwABJjQAAAIPzYAPAAEgRAABbAUrAAEmWARzAAEmWLrl0AQABgMAASafAIVygAMAARTQGwABFdIDCwABJsMAASbzAAEnvAAC5JAFqwABJsWADwAD95AIAAAEDwABJx8AASe8AAAABAQHAAEnQAAAAg/NgA8AASV4AAFsBSsAASdkBHMAASdkuuUQBAAGAwABJ6sAhXQgAwABFKwbAAEV1gMLAAEnzwABJ/8AASjwAALklAWrAAEn0YAPAAP3kAgAAAQPAAEoPwABKPAAAAAEBAcAASh0AAACD82ADwABJkgAAWwFKwABKJgEcwABKJi65RAEAAYDAAEo3wCFdcADAAEUrBsAARXaAwsAASkDAAEpMwABKiwAAuSYBasAASkFgA8AA/eQCAAABA8AASl3AAEqLAAAAAQEBwABKbAAAAIPzYAPAAEpaAABbAUrAAEp1ARzAAEp1LrlEAQABgMAASobAIV3YAMAARSsGwABFd4DCwABKj8AASpvAAErUAAC5JwFqwABKkGADwAD95AIAAAEDwABKqcAAStQAAAABAQHAAEq1AAAAg/NgA8AASmMAAFsBSsAASr4BHMAASr4uuUQBAAGAwABKz8AhXkAAwABFKwbAAEV4gMLAAErYwABK5MAASxYAALEAAWrAAErZYAPAAP3kAgAAAQPAAErtwABLFgAAAAEBAcAASvQAAACD82ADwABI5wAAWwFKwABK/QEcwABK/S65HAEAAYDAAEsRwCFeqADAAEVqBsAARXmAwsAASxrAAEsmwABLVwAAhgUBasAASxtgA8AA/eQCAAABA8AASzDAAEtXAAAAAQEBwABLOAAAAIPzYAPAAElWAABbAUrAAEtBARzAAEtBLrl0AQABgMAAS1LAIV8QAMAARTQGwABFeoDCwABLW8AAS2fAAEusAAC5KQFqwABLXGADwAD95AIAAAEDwABLe8AAS6wAAAABAQHAAEuNAAAAg/NgA8AASTwAAFsBSsAAS5YBHMAAS5YuuUQBAAGAwABLp8AhX3gAwABFKwbAAEV7gMLAAEuwwABLvMAATAgAALkqAWrAAEuxYAPAAP3kAgAAAQPAAEvRwABMCAAAAAEBAcAAS+QAAACD82ADwABH/wAAWwFKwABL7QEcwABL7S65bAEAAYDAAEwDwCFf4ADAAEUsBsAARXyAwsAATAzAAEwYwABMRQAAsRUBasAATA1gA8AA/eQCAAABA8AATCDAAExFAAAAAQEBwABMJgAAAIPzYAPAAEiSAABbAUrAAEwvARzAAEwvLrl0AQABgMAATEDAIWBIAMAARTQGwABFfYDCwABMScAATFXAAEyAAAC5DgFqwABMSmADwAD95AIAAAEDwABMXMAATIAAAAABAQHAAExhAAAAg/NgA8AASckAAFsBSsAATGoBHMAATGouuUQBAAGAwABMe8AhYLAAwABFKwbAAEV+gMLAAEyEwABMkMAATMkAALkQAWrAAEyFYAPAAP3kAgAAAQPAAEyewABMyQAAAAEBAcAATKoAAACD82ADwABJ8wAAWwFKwABMswEcwABMsy65RAEAAYDAAEzEwCFhGADAAEUrBsAARX+AwsAATM3AAEzZwABNIAAAuQ8BasAATM5gA8AA/eQCAAABA8AATO7AAE0gAAAAAQEBwABNAQAAAIPzYAPAAEnmAABbAUrAAE0KARzAAE0KLrlEAQABgMAATRvAIWGAAMAARSsGwABFgIDCwABNJMAATTDAAE1tAAC5KwFqwABNJWADwAD95AIAAAEDwABNQ8AATW0AAAABAQHAAE1UAAAAg/NgA8AASfsAAFsBSsAATV0BHMAATV0uuXcBAAGAwABNaMAhYegAwABFQAbAAEWBgMLAAE1xwABNfcAATboAALktAWrAAE1yYAPAAP3kAgAAAQPAAE2QwABNugAAAAEBAcAATaEAAACD82ADwABKMAAAWwFKwABNqgEcwABNqi65dwEAAYDAAE21wCFiUADAAEVABsAARYKAwsAATb7AAE3KwABOBwAAuSwBasAATb9gA8AA/eQCAAABA8AATd3AAE4HAAAAAQEBwABN7gAAAIPzYAPAAEoXAABbAUrAAE33ARzAAE33Lrl3AQABgMAATgLAIWK4AMAARUAGwABFg4DCwABOC8AAThfAAE5KAAC5LgFqwABODGADwAD95AIAAAEDwABOJcAATkoAAAABAQHAAE4xAAAAg/NgA8AASjwAAFsBSsAATjoBHMAATjouuXcBAAGAwABORcAhYyAAwABFQAbAAEWEgMLAAE5OwABOWsAATosAALDpAWrAAE5PYAPAAP3kAgAAAQPAAE5kwABOiwAAAAEBAcAATmwAAACD82ADwABJQwAAWwFKwABOdQEcwABOdS65RAEAAYDAAE6GwCFjiADAAEUrBsAARYWAwsAATo/AAE6bwABOzAAAuS8BasAATpBgA8AA/eQCAAABA8AATqXAAE7MAAAAAQEBwABOrQAAAIPzYAPAAElMAABbAUrAAE62ARzAAE62LrlEAQABgMAATsfAIWPwAMAARSsGwABFhoDCwABO0cAATt3AAE8iAAC5MAFqwABO0mADwAD95AIAAAEDwABO8cAATyIAAAABAQHAAE8DAAAAg/NgA8AASx0AAFsBSsAATwwBHMAATwwuuUQBAAGAwABPHcAhZFgAwABFKwbAAEWHgMLAAE8mwABPMsAAT4cAALkxAWrAAE8nYAPAAP3kAgAAAQPAAE9LwABPhwAAAAEBAcAAT2IAAACD82ADwABLJgAAWwFKwABPcQEcwABPcS65RAEAAYDAAE+CwCFkwADAAEUrBsAARYiAwsAAT4zAAE+YwABP4wAAuTIBasAAT41gA8AA/eQCAAABA8AAT6/AAE/jAAAAAQEBwABPxAAAAIPzYAPAAEtDAABbAUrAAE/NARzAAE/NLrlEAQABgMAAT97AIWUoAMAARSsGwABFiYDCwABP6MAAT/TAAFAnAAC5MwFqwABP6WADwAD95AIAAAEDwABP/8AAUCcAAAABAQHAAFAIAAAAg/NgA8AAS1MAAFsBSsAAUBEBHMAAUBEuuUQBAAGAwABQIsAhZZAAwABFKwbAAEWKgMLAAFArwABQN8AAUGYAALk0AWrAAFAsYAPAAP3kAgAAAQPAAFBDwABQZgAAAAEBAcAAUE0AAACD82ADwABLYgAAWwFKwABQVgEcwABQVi65dwEAAYDAAFBhwCFl+ADAAEVABsAARYuAwsAAUGrAAFB2wABQsQAAuTUBasAAUGtgA8AA/eQCAAABA8AAUIjAAFCxAAAAAQEBwABQmAAAAIPzYAPAAEt0AABbAUrAAFChARzAAFChLrl3AQABgMAAUKzAIWZgAMAARUAGwABFjIDCwABQtcAAUMHAAFD6AAC5NgFqwABQtmADwAD95AIAAAEDwABQ0sAAUPoAAAABAQHAAFDhAAAAg/NgA8AAS4YAAFsBSsAAUOoBHMAAUOouuXcBAAGAwABQ9cAhZsgAwABFQAbAAEWNgMLAAFD+wABRCsAAUUEAALk3AWrAAFD/YAPAAP3kAgAAAQPAAFEXwABRQQAAAAEBAcAAUSIAAACD82ADwABLlAAAWwFKwABRKwEcwABRKy65RAEAAYDAAFE8wCFnMADAAEUrBsAARY6AwsAAUUXAAFFRwABRngAAuTgBasAAUUZgA8AA/eQCAAABA8AAUWnAAFGeAAAAAQEBwABRfwAAAIPzYAPAAEufAABbAUrAAFGIARzAAFGILrlEAQABgMAAUZnAIWeYAMAARSsGwABFj4DCwABRosAAUa7AAFHlAAC5OQFqwABRo2ADwAD95AIAAAEDwABRu8AAUeUAAAABAQHAAFHGAAAAg/NgA8AAS6gAAFsBSsAAUc8BHMAAUc8uuUQBAAGAwABR4MAhaAAAwABFKwbAAEWQgMLAAFHpwABR9cAAUiwAALk6AWrAAFHqYAPAAP3kAgAAAQPAAFICwABSLAAAAAEBAcAAUg0AAACD82ADwABLtAAAWwFKwABSFgEcwABSFi65RAEAAYDAAFInwCFoaADAAEUrAAAhQkcAIUL+ACFDMQAhQ3sAIUPFACFEDwAhRFkAIUSjACFE7QAhRTcAIUWBACFFywAhRhUAIUZfACFGswAhRwcAIUdbACFHrwAhSAMAIUhXACFIqwAhSP8AIUlTACFJnQAhSfEAIUpFACFKmQAhSu0AIUtBACFLlQAhS+kAIUw9ACFMkQAhTOUAIU05ACFNjQAhTeEAIU41ACFOiQAhTt0AIU8xACFPhQAhT98AIVBHACFQrwAhURcAIVF/ACFR5wAhUk8AIVK3ACFTEwAhU3sAIVPjACFUSwAhVLMAIVUPACFVdwAhVd8AIVZHACFWrwAhVxcAIVd/ACFX5wAhWE8AIVi3ACFZHwAhWYcAIVnvACFaYgAhWsoAIVsyACFbmgAhXAIAIVxqACFc0gAhXToAIV2iACFeCgAhXnIAIV7aACFfQgAhX6oAIWASACFgegAhYOIAIWFKACFhsgAhYhoAIWKCACFi6gAhY1IAIWO6ACFkIgAhZIoAIWTyACFlWgAhZcIAIWYqACFmkgAhZvoAIWdiACFnygAhaDIAIWiaAAAAZwLAAEWTgMLAAFIxwABSN8AAU38DuXoAAAFgAcAA/eQAAAIEwABFlYDCwABShsAAUosJagBgA8AARbAABMAARZaAwsAAUqHAAFKkCYKQAGADwABFsAABBcAARZqAwsAAUqnAAFKvwABSzQEAAAPAAFK3wABSzQAAAAICAsAAUr0AAARqYAPAAEWwAMAAUskAAASCkGADwABFsAAAYAPAAEWTAT8DCAHAAEWVgADAIWq6CAHAAEWWgQDAIWrJCQHAAFKvwAD9+gAAAAABBsAARZiAwsAAUtLAAFLXwABTfQAAgxwAAAABA8AAUt/AAFN9AAAAAQEBwABS7AAAAJoyYAPAAEWwAABgA8AA+tEBPgRAIRzAAFMGFsAAUwAuasAARZVIAQABKwDAAP3xwABTAMAAUw0AQCEcwABTHxbAAFMbLoKQwABFlkgBAAErAMAA/fHAAFMbwABTJgBAIRzAAFM6gMAAUzTAIWs0SAEAASsAwAD98cAAUzTAAFNBAErAAFNIASIcwABTWBbAAFNVFsAAU08uasAARZW0EsAARbKBawEAARbAAFNhgMAAU1vAIWs0tBLAAEWyAMAA/cYAHMAAU3AWwABTbYDAAFNnwCFrNLQSwABFsoFrAQABFsAAU3cWwABTcy6CkMAARZa0EsAARbIAwAD9xgAAIWsKACFsNwAAAAECwABFm4DCwABTgsAAU4jAAFTyA7l7AAABYAHAAEWTAAAAAQXAAEWfgMLAAFOrwABTscAAU/YBAAADwABTvsAAU/YAAAACAgLAAFPLAAAAamADwABFsADAAFPeAAAAgpBgA8AARbAAAGADwABFmwE/AQkAwABT5cAARZoCAAKAwABT68AhbIyBwABT8sAhbJsAAQbAAEWdgMLAAFRGwABUV8AAVPABALl8AAAAAQPAAFRrwABU8AAAAAAAAABgA8AARecBPgNOwABUfsAAVIMAAIHqYAPAAEXnARbAAFSJFsAAVIUugpDAAEWWgerAAEWjScAAVJMiJcAAVJyAwABUl8AhbQtgA8AARrYBJcAAVLqAwABUtcAhbQtgA8AASBFKwABUxgEcwABU2BbAAFTSgMAAVM3AIW0LglXAAEXtSwEAAZMAwAD9Sj9KwABU4QErAAAhbNYAIW2VAAAAAQLAAEWggMLAAFT1wABU+8AAXykDuX0AAAFgAcAA/eQAAAIEwABFooDCwABVHcAAVSkYgx4AYAPAAEXnASsEwABFo4DCwABVOsAAVUUYgeoAYAPAAEXnASsBBcAARa8AAAAABAAAAwAAAAAAAAAAAGADwABFoAE/AQkBAMAA/foAAAAABwbAAEWlgMLAAFVKwABVU8AAVXkBAIFVAAAAAQPAAFVbwABVeQAAAAAAAABgA8AA+tEBPgFKwABVYQEcwABVbhbAAFVoLoMewABFokgBAAErAMAA/fEGwABFp4DCwABVfsAAVYPAAFdJAAC5fgAAAAEDwABVk8AAV0kAAAACAgLAAFWhAAAAuX9gA8AARecAwABVtgAAALlGYAPAAEXnAABcAT4BScAAVckcwABV1IDAAFXNwCFupUgBAAErAMAA/fE+AkAWwABV7C6BVcAARaXAAFXswABV8wA9F8AAVfwugx4XwABWBC6B6oHAAFYLwCFutcAARaPAAEWiScAAViMewABWJ8AA9ngCAAKAwABWMcAhbqUWwABWOS6B6sAARaMAPgM9F8AAVk0WwABWSC6B6sAARaODtYHAAFZUwCFutcAARfE9F8AAVnOBwABWZ8AhbrWdMRbAAFZ+LoHqwABFo8AARfA9F8AAVoougeqBwABWkcAhbrXAAEWjPgQ9F8AAVr2BwABWscAhbrWdMYDAAFbIwCFupcAARfA9F8AAVuKBwABW1sAhbrWDtRbAAFbwgMAAVunAIW6lg7XAAEXxwABF8T0XwABXCBbAAFcDgMAAVvzAIW6lg7XAAEXxnTGBwABXE8AhbrXAAEXwPRfAAFctgMAAVybAIW6lg7WBwABXNMAhbrXAAEXxBsAARaiAwsAAV07AAFdTwABZJgAAuYAAAAABA8AAV2TAAFkmAAAAAgICwABXcgAAALl/YAPAAEXnAMAAV4cAAAC5RmADwABF5wAAXAE+AUnAAFeaHMAAV6WAwABXnsAhcFxIAQABKwDAAP3xPgJAFsAAV70ugVXAAEWlwABXvcAAV8QAPRfAAFfNLoMeF8AAV9UugeqBwABX3MAhcGzAAEWjwABFoknAAFf0HsAAV/jAAPZ4AgACgMAAWALAIXBcFsAAWAougx7AAEWiAD4DPRfAAFggFsAAWBougx7AAEWinTGBwABYK8AhcGzAAEXwPRfAAFhKgcAAWD7AIXBsg7UWwABYUS6DHsAARaLAAEXxPRfAAFheLoMegcAAWGbAIXBswABFoj4EPRfAAFiSgcAAWIbAIXBsg7WAwABYmcAhcFzAAEXxPRfAAFizgcAAWKfAIXBsnTEWwABYxYDAAFi+wCFwXJ0xwABF8MAARfA9F8AAWOUWwABY3IDAAFjVwCFwXJ0xwABF8IO1gcAAWOzAIXBswABF8T0XwABZBoDAAFj/wCFwXJ0xgcAAWRHAIXBswABF8AbAAEWpgMLAAFkrwABZMMAAWxQAALmBAAAAAQPAAFk2wABbFAAAAAEBAcAAWUQAAAC5RmADwABF5wAAXAE+BkAcwABZXi65gsAARI8BAAGAwABZesAhchMAwABFrcAAWV7AAFmGAEAcwABZoIDAAFmUwCFyE7mDAAAAAMAARlPAAFmUwABZsABJwABZtxzAAFnQFsAAWceAwABZu8AhchOdMcAARfBIAQABKwDAAP3xPgE9F8AAWeEugx4WwABZ9YDAAFnpwCFyE4O1wABF8cAARaI+AT0XwABaIxbAAFoagMAAWg7AIXITnTHAAEXwg7UWwABaNoDAAFoqwCFyE4O1wABF8cAARfFJwABaRhzAAFpbFsAAWlaAwABaSsAhchODtcAARfFIAQABKwDAAP3xPgE9F8AAWmwugeoWwABaf4DAAFpzwCFyE50xwABF8MAARaM+AT0XwABarRbAAFqogMAAWpzAIXITg7XAAEXxnTEWwABaxIDAAFq4wCFyE50xwABF8MAARfA9F8AAWuSAwABa2MAhchOdMSvAAEXwPRfAAFsFgMAAWvnAIXITg7UrwABF8QbAAEWqgMLAAFsZwABbHsAAW4QAAIReAAAAAQPAAFskwABbhAAAAAEBAcAAWzIAAAC5RmADwABF5wAAXAE+AkAWwABbXxbAAFtYgMAAW0zAIXPJuYTAAEXugVXAAP0dwABbTMAAW2YAPRzAAFttLrmBAQABgMAAW3TAIXPJAMAARakGwABFq4DCwABbsMAAW7XAAFyGAACDHAAAAAEDwABbvcAAXIYAAAABAQHAAFvLAAAAuUZgA8AARecAAGADwAD60QE+A07AAFvrwABb8gAAuX9gA8AARecBFsAAW/Qugx7AAEWiQ8AAW/8hHMAAXA2BwABcBsAhdGZIAQABKwDAAP3xPgJJwABcHh7AAFwiwAD2eAIAAoHAAFwswCF0ZoDAAFw0wCF0SwBKwABcQgEpPz2JwABcVcAhdGYWwABcZYHAAFxewCF0ZoO1wABF8UrAAFx2ASoGwABFrYDCwABd+MAAXf3AAF8nAAC5gsAARI8AAAABA8AAXhjAAF8nAAAAAQEBwABeJgAAALlGYAPAAEXnAABgA8AA+tEBPgROwABeRsAAXk0AALl/YAPAAEXnARbAAF5PLoMewABFok7AAF5ewABeZAAAgO5gA8AA/JcBk0PAAF5tIRzAAF57gcAAXnTAIXU/SAEAASsAwAD98T4EPYrAAF6MwCF1XxzAAF6RgsAAXozAIXVfZAEAAZQAwAD9vUnAAF6bHMAAXqWCwABen8AhdV+AlwEAATdkAMAA/cdKwABerAEpP0nAAF6/HsAAXsPAAPZ4AgACgcAAXs3AIXU/gMAAXtXAIXUkAErAAF7jASk/PYnAAF72wCF1PxbAAF8GgcAAXv/AIXU/g7XAAEXxSsAAXxcBKgAAIW4mACFuewAhcDIAIXHpACFznwAhdCEAIXT2ACF2LQAAAAcCwABFsIDCwABfLMAAXzLAAH/gA7mFAAABYAHAAEWgAAAQBMAARbKAwsAAX9DAAF/SGLQSAGADwAD8lwAEwABFs4DCwABf6MAAX/YGuYYAYAPAAPyXAWrAAF/1YAPAAPyXCQTAAEW0gMLAAGALwABgGga5hwBgA8AA/JcBasAAYBlgA8AA/JcVBMAARbWAwsAAYC/AAGBABrmIAGADwAD8lwFqwABgP2ADwAD8lyEEwABFtoDCwABgSMAAYFsYuYkAYAPAAPyXAWrAAGBRYAPAAPyXCQTAAEW3gMLAAGBxwABgdRi5igBgA8AARaAABMAARbiAwsAAYIvAAGChGLlTAGADwABKaQErBMAARbmAwsAAYLDAAGDAGLmLAGADwABKdgErBMAARbqAwsAAYNDAAGDnGLmMAGADwABFsAErBMAARbuAwsAAYPDAAGD9GLmNAGADwAD60QEpBMAARbyAwsAAYRrAAGEmCblgAF0DwAD9OwFgA8AARbAABMAARb2AwsAAYTzAAGFGGLmOAF0DwAD9OwFgA8AARbAABMAARb6AwsAAYVfAAGFnGLmPAGADwABFsAErBMAARb+AwsAAYYPAAGGSCbk/AF0DwAD9OwFgA8AARbAABMAARcCAwsAAYZrAAGGoGLllAGADwAD8lwErBMAARcGAwsAAYbDAAGG/GLlmAGADwAD8lwErAgXAAEXlgMLAAGHEwABhxMAAYeUAAAADwABhz8AAYeUAAAAAAAAAYAPAAEWwAT8BCgDAAGHZwABF5gEAASsABcAAReaAwsAAYenAAGHpwABiqQC5kAADwABh+8AAYqkAAAABAQHAAGIBAAAEtBJgA8AA/JcAAGADwABFsAE/BggBwABFsoAAwCF4xQgAwABFtx/AAGIYwABFrwAAAAAIAMAARbwxwABiUGADwABFsAAIAMAARb1qwABiaV0DwAD9OwFgA8AARbDAAPk7CADAAEW/McAAYqdgA8AARbAACQHAAGHpwABFrwAAAAAgBsAARcOAwsAAYq7AAGLCwABi0AEAg8YBasAAYq9gA8AA/eQCAAABA8AAYsvAAGLQAAAAAAAAAGADwAD8lwFKwABizgEWwABizi60EsAARbIGwABFxoDCwABi1cAAYtrAAGL5AAC5kQAAAAEDwABi38AAYvkAAAAAAAAAYAPAAPrRAUrAAGLlARzAAGLsFsAAYuUuuYnAAEW2SAEAAWrAAGLvYAPAAPyXCQDAAP27BsAARceAwsAAYv3AAGMCwABjIwAAuZIAAAABA8AAYwjAAGMjAAAAAAAAAGADwAD60QFKwABjDgEcwABjFRbAAGMOLrmJwABFtkgBAAFqwABjGGADwAD8lxUAwAD9uwbAAEXIgMLAAGMnwABjLMAAY1EAALmTAAAAAQPAAGM0wABjUQAAAAAAAABgA8AA+tEBSsAAYzoBHMAAY0EWwABjOi65icAARbZIAQABasAAY0RgA8AA/JchAMAA/bsGwABFyYDCwABjVsAAY1vAAGOSAAC5YQAAAAEDwABjZ8AAY5IAAAAAAAAAYAPAAPrRAT4BSsAAY3ABIRzAAGOHFsAAY3cuuVPAAEW4SAEAASsAwAD98QbAAEXKgMLAAGOXwABjnMAAZB0AALmUAAAAAQPAAGOowABkHQAAAAICAsAAY7sAAAC5lWADwABKfADAAGPSAAAAuZZgA8AARbAAAFwBPgE9F8AAY+YuuYsfwABj9sAASnsCAAKAwABkAcAhezeBwABkDMAhe0cAwABFuQbAAEXLgMLAAGQiwABkJ8AAZIAAALmXAAAAAQPAAGQ1wABkgAAAAAAAAABgA8AA+tEBSsAAZEEBIiEcwABkSxbAAGRBLrmLwABFuUgBAAErAMAA/fEAJcAAZGUWwABkYBbAAGRWLrmLwABFuYJtwABKeGADwABKwwbAAEXEgMLAAGSFwABklcAAZO8BALmYAAAAAQPAAGSpwABk7wAAAAAAAABgA8AARbABPgJJwABkrxzAAGSzLrlhAAAAAMAARclKwABkwwEuP0rAAGTUARbAAGTbLrmMwABFugbAAEXMgMLAAGT0wABk+cAAZTMAAKVtAAAAAQPAAGT9wABlMwAAAAAAAABcAT4CQBzAAGUNLrmRAAAAAMAARcbAAGUNwABlFAA9F8AAZRsuuYlqwABlJGADwAD8lxXAAEW2BsAARc2AwsAAZTjAAGU9wABlpAAAgowAAAABA8AAZULAAGWkAAAAAQEBwABlUAAAAIKQYAPAAEa9AABcAT4DQBzAAGViLrmSAAAAAMAARcfAAGViwABlagA9HMAAZXEuuZkCAAIWwABlei6B6sAARaOAwABlgMAhfO8AwABF1D0XwABlii65iWrAAGWTYAPAAPyXIcAARbYGwABFzoDCwABlqcAAZa7AAGZOAAC5mgAAAAEDwABluMAAZk4AAAABAQHAAGXGAAAAuUZgA8AARecAAFwBPgNAISXAAGXsgMAAZeDAIX2HYAPAAEjzwABl4MAAZfQAPRzAAGX7LrmAAgACFsAAZg0ugx7AAEWigMAAZhTAIX2HAMAARag9HMAAZjKAwABmJsAhfYe5mwEAAS4AwABGWgbAAEXPgMLAAGZTwABmWMAAZzAAALlVAAAAAQPAAGZhwABnMAAAAAEBAcAAZm8AAAC5RmADwABF5wAAXAE+BUAcwABmiS65kwAAAADAAEXIwABmicAAZpMAQCXAAGamFsAAZqEugerAAEWjYAPAAEa9wABmocAAZrUAQCElwABmz4DAAGbDwCF+JWADwABI88AAZsPAAGbXAD0cwABm3i65gAIAAhbAAGbwLoHqwABFo4DAAGb2wCF+JQDAAEWoPRzAAGcUgMAAZwjAIX4luZsBAAEuAMAARloGwABF0IDCwABnNcAAZzrAAGhIAAC5nAAAAAEDwABnRMAAaEgAAAABAQHAAGdSAAAAuUZgA8AARecAAFwBPgdAISXAAGd4gMAAZ2zAIX7+YAPAAEjzwABnbMAAZ4AAQBzAAGeagMAAZ47AIX7+uYMAAAAAwABGU8AAZ47AAGeqAEAcwABnuC65kwAAAADAAEXIwABnuMAAZ8IAQCXAAGfVFsAAZ9AugerAAEWjYAPAAEa9wABn0MAAZ+QAPRzAAGfrLrmAAgACFsAAZ/0ugerAAEWjgMAAaAPAIX7+AMAARag9F8AAaCGAwABoFcAhfv6aMi7AAEXvQBzAAGg6LrlnAAAAAMAAReHAAGg6wABoQwAGwABF0YDCwABoTcAAaFLAAGkTAABWAAAAAQPAAGhVwABpEwAAAAEBAcAAaGMAAAC5RmADwABF5wAAXAE+BEAhJcAAaImAwABofcAhgA5gA8AARr3AAGh9wABomQBAISXAAGizgMAAaKfAIYAOYAPAAEjzwABop8AAaLsAPRzAAGjCLrl+AgACFsAAaNMugerAAEWjgMAAaNnAIYAOAMAARac9HMAAaPeAwABo68AhgA65mwEAAS4AwABGWgbAAEXSgMLAAGkYwABpHcAAae4AALmdAAAAAQPAAGkjwABp7gAAAAEBAcAAaSkAAAC5nmADwABI8wAAXAE+BEAiHMAAaU0WwABpRhbAAGk/gMAAaTvAIYDLglXAAEXtYcAA/WtIAQABkwDAAP27ARzAAGlnFsAAaWAWwABpWYDAAGlVwCGAy4JVwABF7WHAAP1rSAEAARbAAGl3FsAAaWouuWDAAEW8YcAA/WsAwAD9u8AAaTvAAGl9AEAcwABplRbAAGmPgMAAaYvAIYDLmjLAAEXvSAEAASsAwAD98cAAaYvAAGmcAD0cwABpqBbAAGmjLrmKwABFt7l+AgACFsAAab4WwABpuS65isAARbeB6sAARaOAwABpxMAhgMsAwABFpz0cwABp0oDAAGnOwCGAy7mbAQABLgDAAEZaBsAARdOAwsAAafPAAGn4wABqZwAAuZ8AAAABA8AAagHAAGpnAAAAAQEBwABqBwAAALmeYAPAAEjzAABcAT4DPRzAAGoXFsAAahIuuYrAAEW3hF4BAAGAwABqHsAhgggAwABFqkAcwABqORbAAGozgMAAai/AIYIImjLAAEXvSAEAAS4AwAD98cAAai/AAGpAAD0cwABqS4DAAGpHwCGCCLmgAAAAAMAARlsGwABF1IDCwABqbMAAanHAAGtlAAC5mQAAAAEDwABqecAAa2UAAAACAgLAAGqHAAAAuX9gA8AARecAwABqnAAAALlGYAPAAEXnAABcAT4FQCElwABqvYDAAGq2wCGCsmADwABI88AAarbAAGrFAEAhJcAAat+BwABq08AhgsJgA8AASPPAAGrTwABq5wBAIhzAAGr1LrmSAAAAAMAARccBHMAAawEuuZMAAAAAwABFyMAAavXAAGsLAD0cwABrEi65fgIAAoDAAGsjwCGCsoHAAGsrwCGCwgDAAEWnPRzAAGtJgcAAaz3AIYLCuZsBAAEuAMAARloGwABF1YDCwABrasAAa2/AAGxlAAC5oQAAAAEDwABreMAAbGUAAAACAgLAAGuGAAAAuX9gA8AARecAwABrmwAAALlGYAPAAEXnAABcAT4FQCElwABrvIDAAGu1wCGDqGADwABI88AAa7XAAGvEAEAhJcAAa96BwABr0sAhg7hgA8AASPPAAGvSwABr5gBAIhzAAGv0LrmSAAAAAMAARccBHMAAbAAuuZMAAAAAwABFyMAAa/TAAGwKAD0cwABsES65gAIAAoDAAGwjwCGDqIHAAGwrwCGDuADAAEWoPRzAAGxJgcAAbD3AIYO4uZsBAAEuAMAARloGwABF1oDCwABsasAAbHvAAG1WAACEXgFqwABsa2ADwAD95AIAAAEDwABsgcAAbVYAAAABAQHAAGyPAAAAuUZgA8AARecAAFwBPgVAIhzAAGypLrmSAAAAAMAARccBHMAAbLUuuZMAAAAAwABFyMAAbKnAAGy/AEAhJcAAbNmAwABszcAhhKpgA8AASPPAAGzNwABs4QA9HcAAbO6EXgEAAYDAAGz1wCGEqgDAAEWqQBzAAG0gFsAAbRqAwABtDsAhhKqaMsAARe9IAQABLgDAAP3xwABtDsAAbScAPRzAAG06gMAAbS7AIYSquaAAAAAAwABGWwbAAEXXgMLAAG1bwABtYMAAbhAAALmiAAAAAQPAAG1swABuEAAAAAEBAcAAbXkAAACaMmADwABFsAAAXAE+AknAAG2GFsAAbZUWwABtii65jsAARb2BVcAA/R0+AT0XwABtpi65jjHAAG2zYAPAAEWwAYDAAG20wCGFk8AARb0+AT0cwABt2hbAAG3PLrmOwABFvVYBAAGAwABt3sAhhZMAwAD9TD0cwABuAxbAAG32gMAAbfDAIYWTuWDAAEW8VgEAAS4AwAD9TAbAAEXYgMLAAG4VwABuGsAAb0IAALmjAAAAAQPAAG4vwABvQgAAAAAAAABcAT4CQBzAAG4/LrlhAAAAAMAARcnAAG4/wABuTQBFwABuxQLAAG7OwABu0AAAYmADwAD8lwGUwABu1cAAbtwAAGFgA8AA/JcBFsAAbusWwABu3i65YMAARbxhwAD9awEcwABu9YDAAG7zwCGGgWMBAAGBwABu98AhhpQAwAD9xQGIwABu/8AhhoEcwABvAIDAAG7/wCGGgWQBAAGUAMAA/b0+AT0cwABvHBbAAG8MLrlTwABFuLmkAQABHMAAbzQWwABvKC65YMAARbxLAQABgMAAbzXAIYaBAMAA/UoAwABKcgbAAEXZgMLAAG+mwABvq8AAcGsAALmlAAAAAQPAAG+ywABwawAAAAICAsAAb8AAAACWWmADwABF5wDAAG/TAAAAm31gA8AARecAAFwBPgNGwABv3cAAcAPAAG/vAAAAr5VgA8AARecAFsAAb/uAwABv9sAhh2q5hMAARe4+AT0cwABwD4LAAHALwCGHmLmmAgACgMAAcBzAIYdqgcAAcCLAIYd6AMAARlw9HMAAcDsWwABwNIHAAHAxwCGHermEwABF7oClAQABFsAAcEeAwABwQsAhh2q5hMAARe4AwAD9TT0cwABwYBbAAHBZgMAAcFTAIYdquYTAAEXugkYAAAAAwAD9VAbAAEXagMLAAHE1wABxOsAAdFAAALmnAAAAAQPAAHFPwAB0UAAAAAICAsAAcV0AAACWWmADwABF5wDAAHFwAAAAm31gA8AARecAAFwBPgVOwABx1MAAcdsAALmoXQOTLwFgA8AARpgBasAAceNdA5MvAWADwABGmMAA+UNGwABx9wDAAHIJAAAApABgA8AARecAFsAAchSBwAByEcAhiH+5hMAARe5BPgNJwAByJCIcwAByLYPAAHIowCGIx0gBAAGAwAByMMAhiG8AwAD98QEhJcAAcj2DwAByOMAhiMdgA8AARphCwABySQA/TsAAcmDAAHJmAACj8WADwABGmAEmwAByYAGDwAByaMAhiMdgA8AARphJwABydBzAAHKLFsAAcn6EwAByeMAhiTK5qcAARppIAQABgcAAco7AIYh/AMAA/fE+AT2KwABynMAhiJUcwAByrILAAHKlwCGIlYPtAQABJsAAcrQBg8AAcrTAIYjHYAPAAEaYAJM8P0nAAHLOFsAActmCwABy0sAhiJWBVZM0SsAAcuIBHMAAcukuuaUCAAKAwABy8cAhiG+BwABy98AhiH8AwABF2T9GwABzCQDAAHMbAAAApABgA8AARecAFsAAcyiAwABzI8AhiG+5hMAARe5BPgNGwABzOMAAc1XAAHNEAAAAo/FgA8AARpgAgsAAc03AIYiVPgFJwABzXxzAAHNphMAAc2PAIYo4uaoBAAGDwABzc8AhiggAwABGcD4DPRzAAHOLg8AAc4bAIYoIuaYCAAKAwABzmMAhiG+EwABznsAhijgAwABGXD0cwABzvRbAAHO2hMAAc7DAIYo4uYTAAEXuVgEAAYPAAHPBwCGKCADAAP1MQsAAc9IAPz0cwABz/IPAAHP3wCGKCLmmAgACgMAAdAnAIYhvgcAAdA/AIYh/AMAARlw9HMAAdCQWwAB0HYHAAHQawCGIf7mEwABF7lYBAAGDwAB0KMAhiggAwAD9TD0cwAB0RRbAAHQ+gMAAdDnAIYhvuYTAAEXugkYAAAAAwAD9VAbAAEXbgMLAAHRVwAB0WsAAdKEAALmrAAAAAQPAAHRlwAB0oQAAAAAAAABgA8AA+tEBPgFKwAB0bgEiHsAAdHXAAPZ4AgACFsAAdH8ugx7AAEWiFsAAdIYugerAAEWjAAAlwAB0lRbAAHSPLoMewABFomADwABIbwbAAEXcgMLAAHSmwAB0q8AAd3MAALmsAAAAAQPAAHS8wAB3cwAAAAEBAcAAdMkAAACaMmADwABFsAAAXAE+CEAcwAB03S65kwAAAADAAEXIwAB03cAAdOcAQCIhHMAAdPgWwAB09S60EsAARbJIAQABKwDAAP27ACEcwAB1DBbAAHUJgMAAdQPAIYv2tBLAAEWySAEAASsAwAD9u8AAdPXAAHUTAEAcwAB1QBzAAHUxFsAAdSEuuT/AAEW/gLsBAAGAwAB1OcAhi/YAwAD9UGMBAAGTAMAA/cXAAHUhwAB1QwBOwAB2K8AAdjEAACdgA8AA/JcBFsAAdkMWwAB2My65P8AARb9hwAD9a0PAAHZPIhzAAHZcgcAAdlbAIYyvgJcBAAGTAMAA/ccAHMAAdoEWwAB2fhzAAHZyFsAAdmMuuT/AAEW/SwEAARzAAHZ5gcAAdnPAIYyvgY0BAAGUAMAA/b4AwAD9SrQSwABFsoCXAQABFsAAdomAwAB2g8Ahi/a0EsAARbIAwAD9xz4BPYnAAHaVwCGMrxzAAHaagcAAdpXAIYyvgY0BAAGUAMAA/b5JwAB2qBzAAHaygcAAdqzAIYyvSAEAARbAAHbFFsAAdrUuuT/AAEW/YcAA/WsAwAD9uz4BPRzAAHblFsAAdtUuuT/AAEW/VgEAAYDAAHbpwCGL9gDAAP1MPgE9HMAAdxQWwAB3BC65P8AARb+fDgIAAoHAAHcbwCGMr4DAAHciwCGL9gDAAP1VQBzAAHdLFsAAd0GAwAB3O8Ahi/a5j8AARb5IAQABKwDAAP3xwAB3O8AAd1IAPRfAAHdfgMAAd1nAIYv2uY8uwABFvgbAAEXdgMLAAHd4wAB3fcAAeRoAALmtAAAAAQPAAHeRwAB5GgAAAAEBAcAAd54AAACaMmADwABFsAAAXAE+B0AcwAB3si65kwAAAADAAEXIwAB3ssAAd7wAQCIhHMAAd80WwAB3yi60EsAARbJIAQABKwDAAP27ACEcwAB34RbAAHfegMAAd9jAIY5ytBLAAEWySAEAASsAwAD9u8AAd8rAAHfoAE7AAHfzwAB3+QAAJ2ADwAD8lwEcwAB4CxbAAHf7Lrk/wABFv4C7AQABgMAAeBPAIY5yAMAA/VBAHMAAeCyBwAB4JsAhju6BbQEAAZMAwAD9yMAAeCbAAHgwAEnAAHg3HMAAeEGBwAB4O8Ahju5IAQABHMAAeFsWwAB4VBbAAHhELrk/wABFv2HAAP1rgY0BAAGUAMAA/b4AwAD9uz4BPRzAAHh4FsAAeGguuT/AAEW/hiYAAAAAwAD9Wj4BPRzAAHipFsAAeJkuuT/AAEW/oAcCAAKBwAB4tcAhju4cwAB4woHAAHi8wCGO7mQBAAGUAMAA/b0AwAD9YUAewAB42cAA9ngCAAIWwAB46YDAAHjjwCGOcrmPwABFvi4AwAB42cAAePkAPRfAAHkGgMAAeQDAIY5yuY8rwABFvgbAAEXegMLAAHkfwAB5JMAAfNYAALliAAAAAQPAAHk5wAB81gAAAAEBAcAAeUYAAAC5rmADwABFsAAAXAE+AkAcwAB5YC65kwAAAADAAEXIwAB5YMAAeWoAScAAeXEcwAB5fxbAAHl1LrmPwABFvkgBAAErAMAA/fE+AT0cwAB6DoDAAHoCwCGQUrmsAQABLgDAAEXcScAAejIhHMAAekwWwAB6QoDAAHo2wCGQUrmPwABFvkgBAAErAMAA/fE+BE7AAHsawAB7IQAAua9gA8AARbABFsAAeyMuuY/AAEW+TsAAe0DAAHtHAAC5sGADwABFsAGAwAB7ScAhkFJDwAB7XCEewAB7ZMAA9ngCAAKBwAB7bsAhkOmCwAB7dsAhkQkAPgJJwAB7iRzAAHuXFsAAe5SBwAB7jcAhkOm0EsAARbKAlwEAARbAAHuggsAAe5nAIZEJtBLAAEWyAMAA/cc+AT2JwAB7sMAhkOkWwAB7wIHAAHu5wCGQ6bmPwABFvj4BPYrAAHvmwCGRCRbAAHv2gsAAe+/AIZEJuY/AAEW+QCIhHMAAfCGBwAB8GsAhkOlIAQABKwDAAP3xACEcwAB8M4LAAHwswCGRCUgBAAErAMAA/fHAAHwawAB8OgBJwAB8SyEewAB8UMAA9ngCAAIWwAB8Wi65j8AARb6BwAB8ZcAhkOkAPgI9HMAAfIIWwAB8eC65j8AARb65rQEAAS4AwABF3T0cwAB8rYHAAHymwCGQ6bmsAQABLgDAAEXcPz8GwABF34DCwAB828AAfODAAH2WAAC5sQAAAAEDwAB86sAAfZYAAAABAQHAAHzwAAAAgaZhAwFgA8AASPNcAABcAT4CTsAAfQjAAH0QAABeYAPAAEjzASbAAH0IARbAAH0XFsAAfRIuuYrAAEW3gx7AAEWiYAPAAEjzQ8AAfSIhHMAAfTGBwAB9KcAhkq1IAQABKwDAAP3xPgNOwAB9T8AAfVUAALmyYAPAAEXnARbAAH1fgcAAfVfAIZKtg7XAAEXxPRzAAH1sgMAAfWvAIZKTIAEAAYHAAH1twCGSrQAAPYnAAH19wCGSrSbAAH19AYLAAH2HwCGTA2ADwABI8wbAAEXggMLAAH2bwAB9oMAAfnEAALmzAAAAAQPAAH2ywAB+cQAAAAEBAcAAfbgAAACBpmEDAWADwABF51wAAFwBPgJOwAB96MAAffAAAF5gA8AARecBFsAAffIugx7AAEWiQ8AAff0hHMAAfgyBwAB+BMAhk6tIAQABKwDAAP3xPgNOwAB+KsAAfjAAALmyYAPAAEXnARbAAH46gcAAfjLAIZOrg7XAAEXxPRzAAH5HgMAAfkbAIZORIAEAAYHAAH5IwCGTqwAAPYnAAH5YwCGTq4LAAH5iwCGT6gbAAEXhgMLAAH52wAB+e8AAfxEAALlnAAAAAQPAAH6CwAB/EQAAAAAAAABgA8AA+tEBPgRAHMAAfpIuuZMAAAAAwABFyMAAfpLAAH6cAE7AAH6uwAB+uAAAuWhgA8AAh0MBH8AAfr7AAIdQAAAAAD0cwAB+2oDAAH7QwCGUkbk+AQABLgDAAIdLSsAAfvUBFsAAfwaAwAB+/MAhlJG5Z8AAh0UGwABF4oDCwAB/FsAAfxvAAH+tAAC5qgAAAAEDwAB/JMAAf60AAAABAQHAAH8xAAAAg9tgA8AARbAAAGADwAD60QE+AUrAAH8+ASIcwAB/WRbAAH9KLrllwABFwIFrAQABFsAAf2KAwAB/XMAhlQ+5ZcAARcAAwAD9xgAcwAB/khbAAH+CgMAAf3zAIZUPuWbAAEXBgWsBAAEWwAB/mi65ZsAARcEAwAD9xgbAAEXjgMLAAH+ywAB/vsAAf94AACMBasAAf7NgA8AA/eQCAAABA8AAf8bAAH/eAAAAAAAAAGADwAD+fgFKwAB/zAEkwAB/3gMnubQWwAB/2i60EsAARbIngyYAACF5TQAheZ0AIXn7ACF6WQAhercAIXsNACF7iAAhfAAAIXxjACF8xQAhfV0AIX37ACF+1AAhf+UAIYChACGB3gAhgogAIYN+ACGEdAAhhWkAIYYyACGHQAAhiEUAIYtUACGLzAAhjkgAIZAoACGSaQAhk2cAIZRCACGU5QAhlY8AIZXqAAAAIALAAEXngMLAAH/jwAB/8sAAs5IHpOgAAAFgAcAA/eQAAWABtjE+BMAARemAwsAAgB/AAIAsGKWjAGADvRYBKwTAAEXqgMLAAIBCwACAUxilpABgA8AAQksBKwTAAEXrgMLAAIBiwACAZAm0EgBgA8AA/JcABMAAReyAwsAAgHPAAIB8BLm1AGADwAD8lwErBMAARe2AwsAAgJrAAICgCYJVAF0DwAD9OwFgA8AARecABMAARe6AwsAAgL3AAIDDCbmEAF0DwAD9OwFgA8AARecABMAARe+AwsAAgNTAAIDZGJoyAGADwABFsAErBMAARfCAwsAAgOrAAID5GJ0xAGADwABF5wErBMAARfGAwsAAgQrAAIEVGIO1AGADwABF5wErBMAARfKAwsAAgSbAAIFLGLTBAGADwAB4bQEfwACBOMAAeKgAAAAABMAARfSAwsAAgVTAAIFjGLm2wABEjwBgA8AA+tEBKgTAAEX1gMLAAIGKwACBoQa5twBgA8AA/JcBasAAgZ9gA8AA/JeBngTAAEX2gMLAAIG2wACBzQa5uABgA8AA/JcBasAAgcxgA8AA/JcVBMAARfeAwsAAgeLAAIH7Brm5AGADwAD8lwFqwACB+mADwAD8lyEEwABF+IDCwACCEMAAgioGuboAYAPAAPyXAWrAAIIpYAPAAPyXUwTAAEX5gMLAAII/wACCVwa5uwBgA8AA/JcBasAAglZgA8AA/JeBVwTAAEX6gMLAAIJswACCfAa5vABgA8AA/JcBasAAgntgA8AA/JeCPwTAAEX7gMLAAIKRwACCpAa5vQBgA8AA/JcBasAAgqNgA8AA/JeC4QTAAEX8gMLAAIK5wACCzga5vgBgA8AA/JcBasAAgs1gA8AA/JeFBwTAAEX9gMLAAILjwACC+Aa5vwBgA8AA/JcBasAAgvdgA8AA/JeDXQTAAEX+gMLAAIMNwACDJAa5wABgA8AA/JcBasAAgyNgA8AA/JeEEQTAAEX/gMLAAIM5wACDTQa5wQBgA8AA/JcBasAAg0tgA8AA/JeEFATAAEYAgMLAAINiwACDdwa5wgBgA8AA/JcBasAAg3VgA8AA/JfAAJcIBMAARgGAwsAAg4zAAIOhBrnDAGADwAD8lwFqwACDn2ADwAD8l8AAljYEwABGAoDCwACDtsAAg8oGucQAYAPAAPyXAWrAAIPIYAPAAPyXhBcEwABGA4DCwACD38AAg/QGucUAYAPAAPyXAWrAAIPyYAPAAPyXwACNGATAAEYEgMLAAIQJwACEGga5xgBgA8AA/JcBasAAhBhgA8AA/JfAAIqoBMAARgWAwsAAhC/AAIRFBrnHAGADwAD8lwFqwACEQ2ADwAD8l4NwBMAARgaAwsAAhFrAAIRvBrnIAGADwAD8lwFqwACEbWADwAD8l8AAhW4EwABGB4DCwACEhMAAhJ8GuckAYAPAAPyXAWrAAISdYAPAAPyXwACGRgTAAEYIgMLAAIS0wACExga5ygBgA8AA/JcBasAAhMRgA8AA/JfAAISuBMAARgmAwsAAhNvAAITzBrnLAGADwAD8lwFqwACE8WADwAD8l8AAcYoEwABGCoDCwACFCMAAhRwGucwAYAPAAPyXAWrAAIUaYAPAAPyXwAB+KgTAAEYLgMLAAIUxwACFSwa5zQBgA8AA/JcBasAAhUlgA8AA/JfAAH2XBMAARgyAwsAAhWDAAIV3BrnOAGADwAD8lwFqwACFdWADwAD8l8AAa7kEwABGDYDCwACFjMAAhakGuc8AYAPAAPyXAWrAAIWnYAPAAPyXwABq+QTAAEYOgMLAAIW+wACF1ga50ABgA8AA/JcBasAAhdRgA8AA/JfAAHkyBMAARg+AwsAAhevAAIYGBrnRAGADwAD8lwFqwACGBGADwAD8l8AAasYEwABGEIDCwACGG8AAhi4GudIAYAPAAPyXAWrAAIYsYAPAAPyXwABqkwTAAEYRgMLAAIZDwACGUwa50wBgA8AA/JcBasAAhlFgA8AA/JfAAGogBMAARhKAwsAAhmjAAIaEBrnUAGADwAD8lwFqwACGgmADwAD8l7TlBMAARhOAwsAAhpnAAIayBrnVAGADwAD8lwFqwACGsGADwAD8l8AAaB8EwABGFIDCwACGyMAAhucGudYAYAPAAPyXAWrAAIblYAPAAPyXsPAEwABGFYDCwACG/MAAhxwGudcAYAPAAPyXAWrAAIcaYAPAAPyXwABh9gTAAEYWgMLAAIcywACHUga52ABgA8AA/JcBasAAh1BgA8AA/JfAAF/pBMAARheAwsAAh2fAAIeMBrnZAGADwAD8lwFqwACHimADwAD8l8AAXr4EwABGGIDCwACHocAAh8MGudoAYAPAAPyXAWrAAIfBYAPAAPyXwABeAQTAAEYZgMLAAIfZwACH8wa52wBgA8AA/JcBasAAh/FgA8AA/Je0PQTAAEYagMLAAIgIwACIHwa53ABgA8AA/JcBasAAiB1gA8AA/JfAAEbNBMAARhuAwsAAiDTAAIhMBrndAGADwAD8lwFqwACISmADwAD8l8AARpoEwABGHIDCwACIYcAAiHIGud4AYAPAAPyXAWrAAIhwYAPAAPyXwABGZwTAAEYdgMLAAIiHwACIpAa53wBgA8AA/JcBasAAiKJgA8AA/JfAAEPNBMAARh6AwsAAiLnAAIjWBrngAGADwAD8lwFqwACI1GADwAD8l7LbBMAARh+AwsAAiOzAAIkBBrnhAGADwAD8lwFqwACI/2ADwAD8l8AAX08EwABGIIDCwACJFsAAiSwGueIAYAPAAPyXAWrAAIkqYAPAAPyXtkoEwABGIYDCwACJQcAAiV4GueMAYAPAAPyXAWrAAIlcYAPAAPyXuQcEwABGIoDCwACJc8AAiY4GueQAYAPAAPyXAWrAAImMYAPAAPyXuN8EwABGI4DCwACJo8AAiboGueUAYAPAAPyXAWrAAIm4YAPAAPyXiXgEwABGJIDCwACJz8AAifEGueYAYAPAAPyXAWrAAInvYAPAAPyXjjIEwABGJYDCwACKBsAAih0GuecAYAPAAPyXAWrAAIobYAPAAPyXk14EwABGJoDCwACKMsAAikkGuegAYAPAAPyXAWrAAIpHYAPAAPyXk4kEwABGJ4DCwACbY8AAm3IYuekAYAO+UQABBcAARnWAwsAAik7AAIpOwACK/QAAAAPAAIpawACK/QAAAAICAsAAimAAAASCVV0DwAD9OwFgA8AARecAwACKbQAABLnpYAO+UQAAYAPAAEXnAT4BQBzAAIrOFsAAiscuglXAAEXtlmIBAAE0wACK1APAAIrUwACK5AAAAAEBAcAAitUAAACDU2ADwABF5wAAYAPAAPrRAUrAAIrbASEcwACK3YLAAIrbwCGgQkgBAAErAMAA/fEAwAD9DMAAisfAAIrlASTAAIr4Aie56hbAAIrxLoJVwABF7QUIAcAARe2AAMAhn+gIAcAARieBAMAhn/8IAMAARes1AAAAAQBgA8AA/JcBGsAAiovAAEXsNQAAAAEAYAPAAPyXARvAAIqLwABF7BzAAIqUggDAIaC8ZAEAAZQAwAD9vYIAwCGgvAgAwABF7jHAAIq3YAPAAEXnAAkBwACKTsAA/foAAAAASgbAAEYpgMLAAIsCwACLFsAAiyQBAIPGAWrAAIsDYAPAAP3kAgAAAQPAAIsfwACLJAAAAAAAAABgA8AA/JcBSsAAiyIBFsAAiyIutBLAAEXrBsAARi2AwsAAiynAAIsuwACLQQAAuesAAAABA8AAizTAAItBAAAAAAAAAGADwAD60QFKwACLOgEWwACLOi65tsAARI/AAEX0BsAARi6AwsAAi0XAAItKwACLbgAAuewAAAABA8AAi1PAAItuAAAAAAAAAFwBPgE9F8AAi1wuubbAAESPKcAARfQGwABGKoDCwACLc8AAi3zAAIuRAQC57QAAAAEDwACLhsAAi5EAAAAAAAAAYAPAAPrRAUrAAIuJARzAAIuJLrnrAAAAAMAARi0GwABGL4DCwACMLsAAjDPAAIzOAAC57gAAAAEDwACMOcAAjM4AAAABAQHAAIxOAAAAt1xgA75cAABgA8AA+tEBPgFKwACMXAEiIiEcwACMcBbAAIxkLrTBwABF8rnvAAAAAMAAeIUAIRzAAIyZFsAAjI0utMHAAEXyufAAAAAAwAB4hgAhHMAAjLouufEBAAGAwACMw8Ahom4AwABGMgbAAEYwgMLAAI25wACNvsAAje8AALnyAAAAAQPAAI3KwACN7wAAAAEBAcAAjd8AAAC3XGADvlwAAGADwAD60QFKwACN6gEqBsAARjGAwsAAjljAAI5lwACOdwAAufMAAAABA8AAjm3AAI53AAAAAAAAAGADwABF5wFKwACOcwEuBsAARjKAwsAAjqTAAI6pwACO1gAAufEAAAABA8AAjrHAAI7WAAAAAQEBwACOxgAAALdcYAO+XAAAYAPAAPrRAUrAAI7RASoGwABGM4DCwACPEcAAjxbAAI8uAAC59AAAAAEDwACPI8AAjy4AAAAAAAAAYAPAAPrRAUrAAI8pASoGwABGNIDCwACPM8AAjzjAAI+NAAC2WQAAAAEDwACPP8AAj40AAAABAQHAAI9UAAAAt1xgA75cAABgA8AA+tEBSsAAj2UBHMAAj2yAwACPZcAhpAy19gEAARbAAI99LrnpwABGJwC+vwbAAEY1gMLAAI+SwACPn8AAj+kAAKhCAAAAAQPAAI+lwACP6QAAAAEBAcAAj7oAAAC3XGADvlwAAGADvjcBSsAAj8sBHMAAj9KAwACPy8AhpHSoQgEAARbAAI/ZLrnpwABGJwC+igbAAEY2gMLAAI/uwACP+8AAkE0AALn1AAAAAQPAAJAIwACQTQAAAAEBAcAAkB0AAAC3XGADvlwAAGADvjcBSsAAkC4BHMAAkDWAwACQLsAhpNqBVQEAARbAAJA9LrnpwABGJwC+hgbAAEY3gMLAAJBSwACQX8AAkLMAALQYAAAAAQPAAJBqwACQswAAAAEBAcAAkH8AAAC3XGADvlwAAGADvjcBSsAAkJABHMAAkJeAwACQkMAhpUC0GAEAARbAAJCjLrnpwABGJwC+iwbAAEY4gMLAAJC4wACQxcAAkSUAALXCAAAAAQPAAJDWwACRJQAAAAEBAcAAkOsAAAC3XGADvlwAAGADvjcBSsAAkPwBHMAAkQOAwACQ/MAhpaa1wgEAARbAAJEVLrnpwABGJwC+jAbAAEY5gMLAAJEqwACRN8AAkZkAALXDAAAAAQPAAJFJwACRmQAAAAEBAcAAkV4AAAC3XGADvlwAAGADvjcBSsAAkW8BHMAAkXaAwACRb8Ahpgy1wwEAARbAAJGJLrnpwABGJwC+jQbAAEY6gMLAAJGewACRq8AAkgkAALXEAAAAAQPAAJG7wACSCQAAAAEBAcAAkdAAAAC3XGADvlwAAGADvjcBSsAAkeEBHMAAkeiAwACR4cAhpnK1xAEAARbAAJH5LrnpwABGJwC+jgbAAEY7gMLAAJIOwACSG8AAkoEAALXFAAAAAQPAAJIvwACSgQAAAAEBAcAAkkQAAAC3XGADvlwAAGADvjcBSsAAklUBHMAAklyAwACSVcAhpti1xQEAARbAAJJxLrnpwABGJwC+jwbAAEY8gMLAAJKGwACSk8AAkukAALXGAAAAAQPAAJKfwACS6QAAAAEBAcAAkrQAAAC3XGADvlwAAGADvjcBSsAAksUBHMAAksyAwACSxcAhpz61xgEAARbAAJLZLrnpwABGJwC+kAbAAEY9gMLAAJLuwACS+8AAk1sAALXHAAAAAQPAAJMMwACTWwAAAAEBAcAAkyEAAAC3XGADvlwAAGADvjcBSsAAkzIBHMAAkzmAwACTMsAhp6S1xwEAARbAAJNLLrnpwABGJwC+kQbAAEY+gMLAAJNgwACTbcAAk8cAALXIAAAAAQPAAJN7wACTxwAAAAEBAcAAk5AAAAC3XGADvlwAAGADvjcBSsAAk6EBHMAAk6iAwACTocAhqAq1yAEAARbAAJO3LrnpwABGJwC+kgbAAEY/gMLAAJPMwACT2cAAlDsAALXJAAAAAQPAAJPrwACUOwAAAAEBAcAAlAAAAAC3XGADvlwAAGADvjcBSsAAlBEBHMAAlBiAwACUEcAhqHC1yQEAARbAAJQrLrnpwABGJwC+kwbAAEZAgMLAAJRAwACUTcAAlJkAALXKAAAAAQPAAJRUwACUmQAAAAEBAcAAlGkAAAC3XGADvlwAAGADvjcBSsAAlHoBHMAAlIGAwACUesAhqNa1ygEAARbAAJSJLrnpwABGJwC+lAbAAEZBgMLAAJSewACUq8AAlQsAALXLAAAAAQPAAJS8wACVCwAAAAEBAcAAlNEAAAC3XGADvlwAAGADvjcBSsAAlOIBHMAAlOmAwACU4sAhqTy1ywEAARbAAJT7LrnpwABGJwC+lQbAAEZCgMLAAJUQwACVHcAAlW0AALXNAAAAAQPAAJUmwACVbQAAAAEBAcAAlTsAAAC3XGADvlwAAGADvjcBSsAAlUwBHMAAlVOAwACVTMAhqaK1zQEAARbAAJVdLrnpwABGJwC+lwbAAEZDgMLAAJVywACVf8AAlc0AALXOAAAAAQPAAJWHwACVzQAAAAEBAcAAlZwAAAC3XGADvlwAAGADvjcBSsAAla0BHMAAlbSAwACVrcAhqgi1zgEAARbAAJW9LrnpwABGJwC+mAbAAEZEgMLAAJXSwACV38AAli0AALXPAAAAAQPAAJXnwACWLQAAAAEBAcAAlfwAAAC3XGADvlwAAGADvjcBSsAAlg0BHMAAlhSAwACWDcAhqm61zwEAARbAAJYdLrnpwABGJwC+mQbAAEZFgMLAAJYywACWP8AAlp8AALXQAAAAAQPAAJZQwACWnwAAAAEBAcAAlmUAAAC3XGADvlwAAGADvjcBSsAAlnYBHMAAln2AwACWdsAhqtS10AEAARbAAJaPLrnpwABGJwC+mgbAAEZGgMLAAJakwACWscAAlx0AALXRAAAAAQPAAJbIwACXHQAAAAEBAcAAlt0AAAC3XGADvlwAAGADvjcBSsAAlu4BHMAAlvWAwACW7sAhqzq10QEAARbAAJcNLrnpwABGJwC+mwbAAEZHgMLAAJciwACXL8AAl4sAALXSAAAAAQPAAJc+wACXiwAAAAEBAcAAl1MAAAC3XGADvlwAAGADvjcBSsAAl2QBHMAAl2uAwACXZMAhq6C10gEAARbAAJd7LrnpwABGJwC+nAbAAEZIgMLAAJeQwACXncAAl+sAALXTAAAAAQPAAJelwACX6wAAAAEBAcAAl7oAAAC3XGADvlwAAGADvjcBSsAAl8sBHMAAl9KAwACXy8AhrAa10wEAARbAAJfbLrnpwABGJwC+nQbAAEZJgMLAAJfwwACX/cAAmFcAALXUAAAAAQPAAJgLwACYVwAAAAEBAcAAmCAAAAC3XGADvlwAAGADvjcBSsAAmDEBHMAAmDiAwACYMcAhrGy11AEAARbAAJhHLrnpwABGJwC+ngbAAEZKgMLAAJhcwACYacAAmLcAALXVAAAAAQPAAJhxwACYtwAAAAEBAcAAmIYAAAC3XGADvlwAAGADvjcBSsAAmJcBHMAAmJ6AwACYl8AhrNK11QEAARbAAJinLrnpwABGJwC+nwbAAEZLgMLAAJi8wACYycAAmSMAALXWAAAAAQPAAJjXwACZIwAAAAEBAcAAmOwAAAC3XGADvlwAAGADvjcBSsAAmP0BHMAAmQSAwACY/cAhrTi11gEAARbAAJkTLrnpwABGJwC+oAbAAEZMgMLAAJkowACZNcAAmYUAALXXAAAAAQPAAJk+wACZhQAAAAEBAcAAmVMAAAC3XGADvlwAAGADvjcBSsAAmWQBHMAAmWuAwACZZMAhrZ611wEAARbAAJl1LrnpwABGJwC+oQbAAEZNgMLAAJmKwACZl8AAmfMAALXYAAAAAQPAAJmmwACZ8wAAAAEBAcAAmbsAAAC3XGADvlwAAGADvjcBSsAAmcwBHMAAmdOAwACZzMAhrgS12AEAARbAAJnjLrnpwABGJwC+ogbAAEZOgMLAAJn4wACaBcAAmlMAALXZAAAAAQPAAJoNwACaUwAAAAEBAcAAmiIAAAC3XGADvlwAAGADvjcBSsAAmjMBHMAAmjqAwACaM8Ahrmq12QEAARbAAJpDLrnpwABGJwC+owbAAEZPgMLAAJpYwACaZcAAmr8AALXaAAAAAQPAAJpzwACavwAAAAEBAcAAmogAAAC3XGADvlwAAGADvjcBSsAAmpkBHMAAmqCAwACamcAhrtC12gEAARbAAJqvLrnpwABGJwC+pAbAAEZQgMLAAJrEwACa0cAAmzEAALXbAAAAAQPAAJriwACbMQAAAAEBAcAAmvcAAAC3XGADvlwAAGADvjcBSsAAmwgBHMAAmw+AwACbCMAhrza12wEAARbAAJshLrnpwABGJwC+pQbAAEYrgMLAAJt3wACbhMAAm5QBAKU0AAAAAQPAAJuNwACblAAAAAAAAABgA8AAS88BSsAAm5ABKwbAAEZRgMLAAJuYwACbpcAAm9YAALn2AAAAAQPAAJu0wACb1gAAAAEBAcAAm8IAAAClImADwABNnAAAYAPAAEXnAUrAAJvSASsGwABGUoDCwACb2sAAm9/AAJv3AAC59wAAAAEDwACb7MAAm/cAAAAAAAAAYAPAAPrRAUrAAJvyASoGwABGU4DCwACb/MAAnAHAAJwiAAC5gwAAAAEDwACcD8AAnCIAAAAAAAAAYAPAAPrRAUrAAJwVASEcwACcGxbAAJwVLpoywABF70gBAAErAMAA/fEGwABGVIDCwACcJ8AAnCzAAJ8hAAC5+AAAAAEDwACcNcAAnyEAAAABAQHAAJxDAAAAg9tgA8AARecAAGADwAD60QE+CkAiHMAAnFcuuesAAAAAwABGLQAcwACcaYDAAJxjwCGwq7nrAAAAAMAARi3AAJxXwACccQBOwACcs8AAnL8AALn5YAPAAPrRARzAAJzBLrn6AQABgMAAnMzAIbCrAMAARldAHMAAnOuBwACc38AhsPpIAQABHMAAnPocwACc7y65+wAAAADAAEZWSAEAARzAAJ0DgMAAnP3AIbCrufsAAAAAwABGVgDAAP27AMAA/fHAAJzfwACdDgBJwACdFSGBwACdGsAhsPpKwACdJwEqP0nAAJ05IRzAAJ1JFsAAnT0utMHAAEXySAEAARbAAJ1SgMAAnUzAIbCrtMHAAEXyAMAAeH5KwACdXwEqP07AAJ2fwACdrAABufxgA8AA/JcBFsAAnbUWwACdri6CVcAARe1hwAD9a07AAJ3awACd5gABuf1dA8AA/TsBYAPAAEXnARbAAJ3ugMAAnejAIbCrglXAAEXtScAAnfohHMAAnguCwACd/sAhsdFIAQABFsAAnhqDwACeDsAhsfthwAD9awDAAP27SsAAniIBKj9FwACeNAHAAJ49wACePwAAYmADwAD8lwGTARzAAJ5GhMAAnkTAIbJnYwEAAYLAAJ5IwCGx0QDAAP3FAYzAAJ5WwCGyZxzAAJ5XhMAAnlbAIbJnZAEAAZQAwAD9vT4BScAAnmMhHsAAnmjAAPZ4AgACHMAAnnwcwACeeBbAAJ5yLoJVwABF7UsBAAGEwACeecAhsmcAwAD9SrnzAAAAAMAARjEcwACelxzAAJ6Tg8AAnojAIbH7SwEAAYTAAJ6UwCGyZwDAAP1KufMAAAAAwABGMQA+AUrAAJ6uASo/SsAAnwUBHMAAnwwuuf4BAAGAwACfF8AhsKsAwABGWAbAAEZVgMLAAJ8mwACfKsAAoAMAALn/AAAAAQPAAJ81wACgAwAAAAAAAABgA8AA/JcBPgROwACfQsAAn0kAAIF2YAPAAPyXARzAAJ9LLrn7AAAAAMAARlZOwACfX8AAn2YAAGFgA8AA/JcBFsAAn28WwACfaC6CVcAARe1hwAD9a0XAAJ97AcAAn4TAAJ+GAABiYAPAAPyXAZMBHMAAn42CwACfi8Ahs+NjAQABgcAAn4/AIbO1AMAA/cUBisAAn5fAIbPjHMAAn5iCwACfl8Ahs+NkAQABlADAAP29PgE9iMAAn6TAIbORHMAAn9ccwACfuxzAAJ+1gMAAn67AIbORg40BAAE3EwDAAP2/ZAEAARbAAJ/THMAAn8gcwACfxBbAAJ++LoJVwABF7UsBAAGCwACfxcAhs+MAwAD9SrnzAAAAAMAARjG0EsAAResAwAD9vWQBAAEcwACf4YDAAJ/awCGzkYPBAQABNwcAwAD8tADAAP29SsAAn/IBgMAAn/nAIbORBsAARlaAwsAAoHLAAKB2wACgowAAufsAAAABA8AAoH7AAKCjAAAAAAAAAGADwAD8lwFKwACghAFqwACgkWADwAD8l4GeBsAARleAwsAAoKfAAKCswACg3QAAufoAAAABA8AAoLbAAKDdAAAAAQEBwACgzgAACIPbYAPAAEXnAABgA8AA+tEBSsAAoNgBKgbAAEZYgMLAAKDhwACg5sAAoRcAALn+AAAAAQPAAKDwwAChFwAAAAEBAcAAoQgAAAiD22ADwABF5wAAYAPAAPrRAUrAAKESASoGwABGWYDCwAChHMAAoRzAAKE0AAKEUgAAAAEDwAChIsAAoTQAAAABAQHAAKEsAAAAh0VdA8AARJABWwAAWwAGwABGWoDCwAChOcAAoT7AAKJ/AAC5mwAAAAEDwAChUMAAon8AAAABAQHAAKFdAAAAugBgA8AARbAAAFwBPgVAIRzAAKF4LrmDAAAAAMAARlPAAKF3wAChiABAHMAAoZwWwAChli6aMsAARe9IAQABKwDAAP3xwAChlsAAoaMARcAAodEBwACh2sAAodwAAGJgA8AA/JcBkwEcwACh44HAAKHhwCG2fGMBAAEWwACh7BbAAKHlLoJVwABF7WHAAP1rAMAA/cUBicAAofTAIbZ8HMAAofWBwACh9MAhtnxkAQABlADAAP29PgJAHMAAohIcwACiDhbAAKIILoJVwABF7UsBAAGBwACiD8AhtnwAwAD9SrmDAAAAAMAARlPAAKIIwACiIgA9HMAAojwWwACiNRzAAKIxFsAAoisuglXAAEXtSwEAAYHAAKIywCG2fADAAP1KuYTAAEXuVgEAAS4AwAD9TD0XwACiUS6aMoDAAKJZwCG2IcAARe9AHMAAonEuuWcAAAAAwABGbcAAonHAAKJ6AAbAAEZbgMLAAKKEwACiicAAo5EAALmgAAAAAQPAAKKfwACjkQAAAAAAAABcAT4FQBzAAKKvLrmDAAAAAMAARlPAAKKvwACivwBAFsAAotQWwACizS65hMAARe6BVcAA/R3AAKLNwACi2wBFwACjDwHAAKMYwACjGgAAYmADwAD8lwGTARzAAKMhgMAAox/AIbf7YwEAARbAAKMqFsAAoyMuglXAAEXtYcAA/WsAwAD9xQGIwACjMsAht/scwACjM4DAAKMywCG3+2QBAAGUAMAA/b0+AT0cwACjSRzAAKNFFsAAoz8uglXAAEXtSwEAAYDAAKNGwCG3+wDAAP1KugEBAAEuAMAARl49F8AAo2oumjIrwABF70AcwACjgy65ZwAAAADAAEZtwACjg8AAo4wABsAARlyAwsAApCHAAKQmwACkxQAAuaYAAAABA8AApDLAAKTFAAAAAgICwACkQAAAAJZaYAPAAEXnAMAApFMAAACbfWADwABF5wAAXAE+AUXAAKRdAcAApGbAAKRoAABiYAPAAPyXAZMBHMAApG+CwACkbcAhuRFjAQABFsAApHgWwACkcS6CVcAARe1hwAD9awDAAP3FAYrAAKSAwCG5ERzAAKSBgsAApIDAIbkRZAEAAZQAwAD9vT4BScAApI0ewACkkcAA9ngCAAIcwACkoRbAAKSbLoJVwABF7UsBAAGCwACkosAhuREAwAD9SoDAAKSmwCG45gA9HMAApLMWwACkrS6CVcAARe2AvwIAAoLAAKS0wCG5EYHAAKS5wCG49gDAAP1LPwbAAEZdgMLAAKUGwAClC8AApjUAALoCAAAAAQPAAKUZwACmNQAAAAICAsAApS0AAACDYV0DwAD9OwFgA8AARecAwAClQAAAALlGYAPAAEXnAABcAT4ETsAApVfAAKVeAABhYAPAAPyXARbAAKVlgMAApWDAIboNYcAA/WtOwACldcAApXcAAGJgA8AA/JcBk0PAAKWAHMAApYmDwAClh8AhumBjAQABgsAApYvAIbo6AMAA/cU+AUnAAKWbHMAApauBwACln8AhuiRIAQABHMAApbKAwAClrsAhug1LAQABg8AApbPAIbpgAMAA/UoAwAD98T4CPRzAAKXFgMAApcHAIboNgL8CAAKDwAClxsAhumAcwAClz4DAAKXLwCG6DUsBAAEcwACl14LAAKXQwCG6OoGNAQABlADAAP2+AMAA/UoAwAD9Sz2KwACl5cAhujocwACl64LAAKXlwCG6OoGNAQABlADAAP2+PgE9i8AApgbAIbpgHMAApgeDwACmBsAhumBkAQABlADAAP29PRfAAKYigMAAph3AIboNYYLAAKYrwCG6OsAA/WkGwABGXoDCwACmccAApnbAAKa6AAC6AQAAAAEDwACmgMAAproAAAABAQHAAKaOAAAApABgA8AARecAAFwBPgE9HMAAppouugICAAIWwACmqS65hMAARe6AwACmscAhu7gAwABGXQbAAEZfgMLAAKc4wACnPcAAqI0AALoDAAAAAQPAAKdGwACojQAAAAICAsAAp1QAAAC6BGADwABF5wDAAKdrAAAAugVgA8AARecAAFwBPgNAIiEcwACni4HAAKeCwCG8LUgBAAErAMAA/fEAIR7AAKeXwAD2eAIAAoDAAKehwCG8HYHAAKerwCG8LQDAAKeCwACntABFwACnuwHAAKfEwACnxgAAYmADwAD8lwGTARzAAKfNgsAAp8vAIbyNYwEAARbAAKfWFsAAp88uglXAAEXtYcAA/WsAwAD9xQGKwACn3sAhvI0cwACn34LAAKfewCG8jWQBAAGUAMAA/b0+AUnAAKfrHsAAp+/AAPZ4AgACHMAAp/8WwACn+S6CVcAARe1LAQABgsAAqADAIbyNAMAA/UqAwACoBMAhvB0APgI9HMAAqB8WwACoGS6CVcAARe2AvwIAAoLAAKggwCG8jYHAAKglwCG8LQDAAP1LPRzAAKhHFsAAqECBwACoN8AhvC25hMAARe5WAQABLgDAAP1MPz0cwACoZC66AgIAAhbAAKh8gMAAqHPAIbwduYTAAEXuLgDAAEZdBsAARmCAwsAAqJLAAKiXwACpLwAAugYAAAABA8AAqLHAAKkvAAAAAgICwACoxgAAALl/YAPAAEXnAMAAqNsAAAC6B2ADwABF5wAAXAE+AT0cwACpEB7AAKj/wABGfQIAAi6AwACpCMAhvdUAhF0BAAGBwACpHMAhveUAwABGfgbAAEZhgMLAAKk0wACpOcAAqhcAALoIAAAAAQPAAKlDwACqFwAAAAEBAcAAqVEAAACD22ADwABF5wAAXAE+BkAhJcAAqWouYAPAAEa9wACpZcAAqXoAQCElwACpjS5gA8AASPPAAKmIwACplQBAISXAAKmpgMAAqaPAIb5UYAPAAEjzwACpo8AAqbEAPRzAAKm+FsAAqbgumjLAAEXvuYEBAAEuAMAARak9HMAAqdwWwACp1oDAAKnQwCG+VJoywABF77mAAgACgMAAqe7AIb5ULgDAAEWoPRfAAKoALpoyFsAAqg6AwACqCMAhvlSaMsAARe/AAEXvBsAARmKAwsAAqhzAAKohwACqNgAAuVQAAAABA8AAqivAAKo2AAAAAAAAAGADwAD60QFKwACqMQEqBsAARmOAwsAAqjrAAKo/wACqWwAAugkAAAABA8AAqlDAAKpbAAAAAAAAAGADwAD60QFKwACqVgEqBsAARmSAwsAAql/AAKpkwACqfQAAugoAAAABA8AAqnLAAKp9AAAAAAAAAGADwAD60QFKwACqeAEqBsAARmWAwsAAqoHAAKqGwACqoQAAugsAAAABA8AAqpbAAKqhAAAAAAAAAGADwAD60QFKwACqnAEqBsAARmaAwsAAqqXAAKqqwACqxgAAugwAAAABA8AAqrvAAKrGAAAAAAAAAGADwAD60QFKwACqwQEqBsAARmeAwsAAqsrAAKrPwACq6gAAug0AAAABA8AAqt/AAKrqAAAAAAAAAGADwAD60QFKwACq5QEqBsAARmiAwsAAqu7AAKrzwACrDAAAug4AAAABA8AAqwHAAKsMAAAAAAAAAGADwAD60QFKwACrBwEqBsAARmmAwsAAqxDAAKsVwACrLQAAug8AAAABA8AAqyLAAKstAAAAAAAAAGADwAD60QFKwACrKAEqBsAARmqAwsAAqzHAAKs2wACrUAAAuhAAAAABA8AAq0XAAKtQAAAAAAAAAGADwAD60QFKwACrSwEqBsAARmuAwsAAq1TAAKtZwACrcgAAuhEAAAABA8AAq2fAAKtyAAAAAAAAAGADwAD60QFKwACrbQEqBsAARmyAwsAAq3fAAKt8wACrrAAAtcwAAAABA8AAq4nAAKusAAAAAQEBwACrlwAAAKUiYAPAAE2cAABgA8AA+tEBSsAAq6cBKgbAAEZtgMLAAKuxwACrtsAArFkAALlnAAAAAQPAAKu9wACsWQAAAAAAAABgA8AA+tEBPgROwACr0cAAq9sAALloYAPAAIdDAR/AAKvhwACHUAAAAAA9F8AAq/2AwACr88Ahwdq5QxbAAKwMLpoywABF78AARPw9HMAArCGAwACsF8Ahwdq5RAEAAS4AwACHTkrAAKw9ARbAAKxOgMAArETAIcHauWfAAIdFBsAARm6AwsAArF7AAKxjwACsgwAAuhIAAAABA8AArHjAAKyDAAAAAAAAAGADwAD60QFKwACsfgEqBsAARm+AwsAArIjAAKyNwACspQAAuhMAAAABA8AArJrAAKylAAAAAAAAAGADwAD60QFKwACsoAEqBsAARnCAwsAArKrAAKyvwACuDgAAuaoAAAABA8AArLjAAK4OAAAAAQEBwACsxgAAAIPbYAPAAEXnAABgA8AA+tEBPgVJwACtBBzAAK0NLkgBAAGAwACtEMAhwusAwAD98UrAAK0XASo/ScAArSkhHMAArTMWwACtLS6aMsAARe9IAQABFsAArTyAwACtNsAhwuuaMsAARe8AwAD98UrAAK1DARzAAK1QFsAArUoumjLAAEXvuaoBAAEWwACtYIDAAK1awCHC65oywABF7wDAAEXiP07AAK16wACtggAAXmADwABF5wEWwACtiS6DtcAARfFDwACtkyEcwACtooHAAK2awCHDlUgBAAErAMAA/fE+AknAAK2zHMAArb+BwACtt8Ahw5VIAQABgMAArcLAIcLrAMAA/fFKwACtyQEpPz2JwACt3MAhw5UWwACt7oHAAK3mwCHDlYO1wABF8UrAAK3+ASoGwABGcYDCwACuE8AAriDAALJ0AAC6FAAAAAEDwACuK8AAsnQAAAADAwPAAK45AAAApSJgA8AATZwAwACuTwAAAIKUYAPAAGLWAMAArlkAAACCa2ADwAD8lwAAYAPAAEXnAT4KScAArmUcwACuboHAAK5pwCHEX0gBAAErAMAA/fFKwACudwEuPz2JwACuiMAhxF8WwACulIHAAK6PwCHEX7R+wABi2EAhFsAAr0OBwACvPsAhxF+j68AAYuDAAK89wACvUQBAIhbAAK9kgcAAr1/AIcRfsuDAAGLZARbAAK93gcAAr3LAIcRfuhXAAGLfwACvX8AAr4UAScAAr4wWwACvlYHAAK+QwCHEX4eQwABi20rAAK+gAS4/ScAAr7EWwACvuoHAAK+1wCHEX7oWwABi3ErAAK/CAS4/ScAAr9McwACv3IHAAK/XwCHEX0gBAAEWwACv+hbAAK/rgMAAr9/AIcRPs7fAAE2khiC4ygDAAP3xSsAAsAYBLj9JwACwFyIWwACwIIHAALAbwCHEX7oVwABi3wEWwACwN4HAALAywCHEX7oXwABi4j4BSsAAsEsBH8AAsFbAAEoVBQAFgcAAsGbAIcRfgsAAsGzAIcRvFsAAsJwWwACwiIDAALB8wCHET7EqwABNpZ6lvl4uFsAAsK8upaTAAEXqAD9AFsAAsNmBwACw1MAhxF+z08AAYt3AALDUwACw6ABJwACw7yIcwACw+ILAALDzwCHEb0gBAAFqwACxC2ADwAD8lwkAwAD9uwAhFsAAsR+BwACxGsAhxF+y4MAAYtk+AT0wwACxMyTAALFsBSe6GIHAALFWwCHEXye6GS4ngyY+A07AALGPwACxnQAAuhpgA8AAYv0BJsAAsY8BgcAAsZ/AIcRfYAPAAGL9TsAAsbnAALHBAACbGWADvlEBHMAAse4WwACxz4DAALHDwCHET7EqwABNpbW2AQABFsAAshKDwACyBMAhxqSWUsAAYv8Avn1KwACyIgEfwACyLcAAShUFAAWBwACyPcAhxF+CwACyQ8AhxG+EwACyScAhxs0uFsAAslgupaTAAEXqAAbAAEZygMLAALLZwACy3sAAs1MAALobAAAAAQPAALLxwACzUwAAAAEBAcAAsv8AAACD22ADwABF5wAAYAPAAPrRAT4BSsAAswwBHMAAsy0WwACzGRbAALMTLpoywABF77mYwABFxEgBAAEWwACzPBbAALM2gMAAszDAIcd4mjLAAEXvuZjAAEXEAMAA/fEGwABGc4DCwACzWMAAs2vAALOQAAAjAWrAALNZYAPAAP3kAgAAAQPAALNzwACzkAAAAAAAAABgA8AA/n4BSsAAs3kBJMAAs5ACFsAAs4EuhZbAAP34J7ocAAAhoSMAIaFzACGhuwAhofwAIaJEACGi4gAhoykAIaNiACGjqQAho+IAIaRKACGksAAhpRYAIaV8ACGl4gAhpkgAIaauACGnFAAhp3oAIafgACGoRgAhqKwAIakSACGpeAAhqd4AIapEACGqqgAhqxAAIat2ACGr3AAhrEIAIayoACGtDgAhrXQAIa3aACGuQAAhrqYAIa8MACGvcgAhr6sAIa/0ACGwLQAhsIEAIbNcACG04QAhtSYAIbVvACG1uAAhtfcAIbeLACG4vAAhueMAIbuOACG78wAhvasAIb4qACG/IgAhv1sAIb+UACG/zQAhwAYAIcA/ACHAeAAhwLEAIcDqACHBIwAhwVwAIcGlACHCTwAhwogAIcLBACHEJQAhx04AIcfcACHINAAAAEoCwABGdoDCwACz2MAAs97AAMeJA7odAAABYAHAAP3kAAADBMAARnmAwsAAtAPAALQKCboewABEjwBgA8AARecABMAARnqAwsAAtI/AALSvCbofwABEjwBdA8AA/TsBYAPAAEXnATHAALStYAPAAEXnAATAAEZ7gMLAALTDwAC01Qm6IMAARI8AXQPAAP07AWADwAD8lwExwAC002ADwAD8lwABBcAARouAwsAAtNrAALTawAC09wCAtcAARI8AA8AAtOnAALT3AAAAAQEBwAC07wAABLoeYAPAAEXnAABgA8AARnYBPwIIAcAARnmAAMAhyjIJAcAAtNrAAP36AAAAAAoGwABGfYDCwAC29sAAtwvAALf3AAGabAAAAAEDwAC3DcAAt/cAAAAEAgLAALcbAAAAg0pgA8AARecAwAC3MAAAALmPYAPAAEXnAALAALdHAAAAuiFgA8AA+tEBasAAt1lgA8AA+tEAwAC3ZQAAALoiYAPAAPrRAWrAALd5YAPAAPrRAGADwABGdgE+AUrAALeHATXAALeSAAABAGADwABGdgEfwAC3ksAARosBAAGAwAC3osAhypEANQAAAAEAWwEcwAC3soTAALewwCHK+rojwABEjwQABIDAALe7wCHKkYHAALfDwCHKoYLAALfOwCHKsoPAALfgwCHKzgDAAEaBhADAIcr6BsAARoOAwsAAt/zAALgFwAC4JQEAgVUAAAABA8AAuA3AALglAAAAAAAAAGADwAD60QFKwAC4EAEWwAC4HhbAALgQLrofwABEj8AARnqBVcAA/R0GwABGhIDCwAC4KcAAuDLAALhIAQCDtwAAAAEDwAC4PcAAuEgAAAAAAAAAYAPAAPrRAUrAALhAASEWwAC4QS6BVcAARoMGwABGhYDCwAC4TMAAuFTAALhyAQBhAAAAAQPAALhbwAC4cgAAAAAAAABgA8AA/JcBSsAAuF4BFsAAuGwWwAC4Xi66H8AARI/AAEZ6YcAA/WsGwABGfoDCwAC4ssAAuLfAALsWAACEXQAAAAEDwAC4wsAAuxYAAAABAQHAALjQAAAAugdgA8AARecAAFwBPgNAIR7AALjuwAD2eAIAAoDAALj4wCHMgBbAALkILroewABEj8AARnkAwAC47cAAuRAAScAAuRcWwAC5Gy6BVcAARoNKwAC5JAA/RcAAuTABwAC5OcAAuTsAAGJgA8AA/JcBkwEcwAC5QoHAALlAwCHM5GMBAAEWwAC5UhbAALlELrofwABEj8AARnphwAD9awDAAP3FAYnAALlawCHM5BzAALlbgcAAuVrAIczkZAEAAZQAwAD9vT4HTsAAuXTAALl5AACkAGADwABF5wEcwAC5iBbAALl7LrofwABEj8AARnpLAQABgcAAuYnAIczkAMAA/UpOwAC5l8AAuZ0AACdgA8AA/JcBHMAAuacWwAC5ny66IMAARI/AAEZ7SwEAAYHAALmowCHM5ADAAP1KTsAAub/AALnOAAC6JGADwABF5wEcwAC52xbAALnVgsAAudDAIc1OglXAAEXtSwEAAYPAALncwCHNiQDAAP1KQB7AALn8wAD2eAIAAoTAALoGwCHNwxbAALoWLroewABEj8AARnkAwAC5/MAAuh4BJAAJJ7olg8AAujPAIc2JJ6RDgsAAuj/AIc1OJ7omJ7onhMAAumfAIc3DJ7ooFsAAuoYuuh7AAESPwABGeT0cwAC6oxbAALqdgsAAupjAIc1OglXAAEXtgL8CAAKDwAC6pMAhzYmAwAC6rcAhzIAAwAD9Sz0cwAC62RbAALrShMAAusPAIc3DuYTAAEXuhF4BAAGCwAC64MAhzU4AwAD9WD0cwAC7AxbAALr8gMAAuu3AIcyAuYTAAEXuVgEAAYLAALsHwCHNTgDAAP1MBsAARoaAwsAAuxvAALskwAC7TAEAuikAAAABA8AAuzDAALtMAAAAAAAAAGADwAD60QFKwAC7MwEcwAC7SBbAALtBFsAAuzMuuh/AAESPwABGemHAAP1rSAEAAZQAwAD9uwbAAEaHgMLAALtRwAC7YsAAu4ABAIDDAAAAAQPAALtpwAC7gAAAAAAAAABgA8AARecBSsAAu2wBFsAAu3oWwAC7bC66H8AARI/AAEZ6gMPAAP0hBsAARoiAwsAAu4XAALugwAC7vQEAuioAAAABA8AAu63AALu9AAAAAAAAAF0DwAD8+QFgA8AARecBSsAAu7ABFsAAu7Auuh/AAESPwABGegbAAEaAgMLAALvCwAC7x8AAvDEAALorwABEjwAAAAEDwAC7zsAAvDEAAAACAgLAALvcAAAApABgA8AARecAwAC75gAAALosYAPAAPyXAABcAT4CPRzAALwGFsAAu/guuh/AAESPwABGelYBAAGAwAC8CsAh0C4AwAD9TD0cwAC8HhbAALwVLrogwABEj8AARntWAQABgcAAvCLAIdA+AMAA/UwGwABGgYDCwAC8NsAAvDvAAMeHAAC6I8AARI8AAAABA8AAvEPAAMeHAAAABAQEwAC8UQAAAINKYAPAAEXnAMAAvGYAAAC5j2ADwABF5wDAALx8AAAAuiFgA8AA+tEAwAC8kwAAALoiYAPAAPrRAABcAT4ITsAAvUjAAL1OAAChKV0DwAD+LwFgA8AARecBH8AAvVSU3gABYAPAAEXnAABOwAC9gsAAvYcAAKmCXQPAAP4vAWADwABF5wEfwAC9jZTeAAFgA8AARecAAE7AAL2twAC9wQAAui1gA8AA/JcBk07AAL3XwAC95gAAui5gA8AARbABFsAAvfKBwAC96MAh0OGaMsAARe9GwAC/LQDAAL8/AAAAXmADwABF5wAWwAC/UYDAAL9KwCHQ0bmEwABF7kE+A0nAAL9hIRzAAL9rhcAAv2bAIdFDVgEAARTAAL9vwCHRsQgAAMAA/jxCwAC/eQA/TsAAv5XAAL+iAAC5Q2ADwABFsAEWwAC/rBTAAL+kwCHRsQgAmjLAAEXvScAAv7kcwAC/zIfAAL+9wCHRhLmqAQABFMAAv9bAIdIHCQAAwABF4j4CPRzAAL/1hMAAv+/AIdEXVgEAARTAAL/5wCHRsQgAAMAA/jxJwADACx7AAMAPwAD2eAIAAhTAAMAZwCHSBwkAh8AAwCfAIdGEAD2OwADAOMAh0W8cwADAS4bAAMA4wCHRb2QBAAGUAMAA/b0/ScAAwFwiIYPAAMBhwCHRAQAlwADAfxTAAMB3wCHRsQgAYAPAAEjzPgJOwADBWcAAwWYAALlgXQPAAP07AWADwABFsAEWwADBdRTAAMFowCHSBwkAuWDAAEW8RcAAwYsBwADBlMAAwZYAAGJgA8AA/JcBkwEcwADBnRTAAMGbwCHTJgsAYwEAARbAAMGsFMAAwZ/AIdLwCgBhwAD9awDAAP3FARXAAMG0wCHTJgscwADBtRTAAMG0wCHTJgsAZAEAAZQAwAD9vUE+A0nAAMHFIRzAAMHbHMAAwdcWwADB0RTAAMHJwCHRsQgBYAPAAEjzglXAAEXtSwEAARTAAMHYwCHTJgsAAMAA/UpIAQABgMAAwd7AIdDRAMAA/fFCwADB5gE/TsAAwgbAAMISAAC5rmADwABFsAEcwADCIBTAAMIUwCHS8AoASwEAARTAAMIhwCHTJgsAAMAA/UpJwADCLxzAAMJCh8AAwjPAIdGEuaoBAAEUwADCTMAh0+oMAADAAEXiPgE9HMAAwmguuivAAESPAgACFMAAwnDAIdGxCAFgA8AASPMUwADCecAh0yYLAADAAEaAPz9JwADDdBzAAMOMhsAAw3jAIdFvgJcBAAGTAMAA/cc+AUFFwADDmQHAAMOjwADDpwAAuZ5gA8AASPMBJsAAw6MBFsAAw70WwADDuIfAAMOpwCHRhLmKwABFt4MewABFomADwABI8wEhHMAAw8gUwADDxMAh1KUIAEgBAAErAMAA/fEBFcAAw9HAIdSlCCbAAMPRARbAAMPbFMAAw9fAIdSlCACDtcAARfFgA8AASPM+AUnAAMPrHMAAw/WEwADD78Ah0ReEXgEAARTAAMP8wCHUpQgAAMAA/j4+AUnAAMQOHMAAxCiOwADEFMAh0W8cwADEEobAAMQUwCHRb4GNAQABlADAAP2+SAEAAZMAwAD9u0LAAMQuAD8/P0nAAMS4HMAAxNCGwADEvMAh0W+AlwEAAZMAwAD9xz4DTsAAxOrAAMTyAABeYAPAAEXnARbAAMUDh8AAxPTAIdGEgx7AAEWiQUPAAMUQIR7AAMUYwAD2eAIAAhTAAMUiwCHVuAgAgcAAxSvAIdDhAD4CScAAxUEcwADFS4TAAMVFwCHRF4McAQABFMAAxVTAIdW4CAAAwAD+Oz4CPRzAAMW3hMAAxbHAIdEXhF4BAAEUwADFvsAh1bgIAADAAP4+ScAAxdIcwADF7I7AAMXYwCHRbxzAAMXWhsAAxdjAIdFvgY0BAAGUAMAA/b5IAQABkwDAAP27QsAAxfIAPz89FcAAxgvAIdW4CBbAAMYdFMAAxhXAIdW4CACDtcAARfFJwADGMYLAAMY1wCHQ8T4BPRzAAMZXhMAAxlHAIdEXhF4BAAGBwADGXsAh0OEAwAD+Pj8/RsAAxrvAAMbcwADGzQAAAKQAYAPAAEXnAITAAMbVwCHRFz4CTsAAxujAAMbvAACCVV0DwAD9OwFgA8AARecBFsAAxvYUwADG8cAh1vIIAIJVwABF7UXAAMcEAcAAxw3AAMcPAABiYAPAAPyXAZMBHMAAxxYUwADHFMAh10QKAGMBAAEWwADHHxTAAMcYwCHXDgkAYcAA/WsAwAD9xQEVwADHJ8Ah10QKHMAAxygUwADHJ8Ah10QKAGQBAAGUAMAA/b0+AUnAAMc2HMAAx0QcwADHQBTAAMc6wCHXDgkASwEAARTAAMdBwCHXRAoAAMAA/UpIAQABgMAAx0fAIdDRAMAA/fE+AT0cwADHWy66K8AARI8CAAIUwADHY8Ah1vIIABTAAMdpwCHXRAoAAMAARoA/AAAhymcAIcttACHLwAAhzAUAIcxWACHO/QAhz14AIc+xACHQAAAh0KMAIdgbAAAACgLAAEaMgMLAAMghwADIJ8AAyr8Dui8AAAFgAcAARecAAAABBcAARpSAwsAAyEXAAMhFwADI5QAAAAPAAMhJwADI5QAAAAICAsAAyFcAAACAlmADwABF5wDAAMhwAAAApaRgA8AAQksAAGADwABGjAE+AT0XwADIvC6lpIHAAMjQwCHYpMAAReoBCQDAAMiLwABGdQIAAjHAAMiRYAPAAEXnAYDAAMiSwCHYlBbAAMiggMAAyJrAIdiUuenAAEYnAAQGwABGjoDCwADI6sAAyPvAAMkNAQCAlgAAAAEDwADJAcAAyQ0AAAAAAAAAYAPAAEXnAUrAAMkEARzAAMkKFsAAyQQuglXAAEXtSwEAAZMAwAD9SgbAAEaQgMLAAMkSwADJK8AAykQAALoUAWrAAMkTYAPAAP3kAgAAAQPAAMk2wADKRAAAAAMDA8AAyUQAAAClImADwABNnADAAMlaAAAAgpRgA8AAYtYAwADJZAAAAIJrYAPAAPyXAABgA8AARecBPgVOwADJfcAAyYcAAJeEYAPAAEXnARzAAMmPFsAAyYkugJbAAEaOuhQDAAOAwADJm8Ah2ZaBwADJqMAh2aaCwADJrsAh2bYAwABGcUnAAMm5HMAAyceDwADJvcAh2dFIAQABFsAAycougJbAAEaOAMAA/fFKwADJ0QEuP07AAMnywADJ/QAAujBgA8AASfsBJsAAyfIBg8AAyf/AIdnRYAPAAEn7PRzAAMofFsAAyhmEwADKDsAh2kuCVcAARe2AvwIAApMuAMAA/UtKwADKLwGEwADKNsAh2ksGwABGkYDCwADKScAAylXAAMqHAACEUgFqwADKSmADwAD95AIAAAEDwADKW8AAyocAAAABAQHAAMplAAAAh0VdA8AARJABWwAAWwFKwADKcQEcwADKeYDAAMpxwCHa3rkgAQABLgDAAETJBsAARpKAwsAAyozAAMqfwADKvQAAIwFqwADKjWADwAD95AIAAAEDwADKp8AAyr0AAAAAAAAAYAPAAP5+AUrAAMqtASTAAMq9Aye6MRbAAMq1LoCWwABGjieDJgAAIdkNACHZYAAh2qgAIdsSACHbbQAAAAQCwABGlYDCwADLTsAAy13AAMvkB7oyAAABYAHAAEXnAAAAAQXAAEaXgMLAAMuHwADLh8AAy+IAAAADwADLl8AAy+IAAAACAgLAAMurAAAAglVdA8AA/TsBYAPAAEXnAMAAy8EAAACClGADvlEAAGADwABGlQE/AQkAwADLz8AARnUCAAKAwADL1cAh286BwADL3cAh2+UAAAAAIdweAAAAAALAAEaYgMLAAM0SwADNIcAAzmEHujMAAAFgAcAARecAAAABBcAARqCAwsAAzUHAAM1BwADNgQAAAAPAAM1HwADNgQAAAAICAsAAzUgAAACCVVsAwADNUAAAAIKUWwAAYAPAAEaYAT4BPRzAAM1yLrnsAAAAAMAARi4BCQDAAM1YwABGdQIAAibAAM1eAYDAAM1ewCHcb10DwAD9OwFgA8AARecmwADNZgGBwADNZsAh3HpgA75RAAQGwABGmoDCwADNhcAAzZbAAM2vAQC5qQAAAAEDwADNo8AAza8AAAAAAAAAYAPAAEXnAUrAAM2mARzAAM2sFsAAzaYuglXAAEXtSwEAAZMAwAD9SgbAAEacgMLAAM2zwADNxMAAzdsAALoTAWrAAM20YAPAAP3kAgAAAQPAAM3RwADN2wAAAAAAAABgA8AA+tEBSsAAzdcBKQbAAEadgMLAAM3fwADN8MAAzhwAALnxAWrAAM3gYAPAAP3kAgAAAQPAAM34wADOHAAAAAEBAcAAzg0AAAC3XGADvlwAAGADwAD60QFKwADOGAEpBsAARp6AwsAAziHAAM46wADOXwAAufMBasAAziJgA8AA/eQCAAABA8AAzkLAAM5fAAAAAAAAAGADwABF5wFKwADOSAEcwADOVRbAAM5ILrmpwABGmrnzAAAAAMAARjEAACHc3wAh3TIAId13ACHdygAh3ikAAAAEAsAARqGAwsAAzmTAAM5qwADS5AO6NAAAAWABwABGmAAABgTAAEajgMLAAM6bwADOqwa6NQBgA8AA/JcBasAAzqpgA8AA/JcJBMAARqSAwsAAzsDAAM7OBro2AGADwAD8lwFqwADOzWADwAD8lxUEwABGpYDCwADO48AAzvgGujcAYAPAAPyXAWrAAM73YAPAAPyXIQTAAEamgMLAAM8NwADPJAa6OABgA8AA/JcBasAAzyNgA8AA/JdTBMAARqeAwsAAzznAAM9IBro5AGADwAD8lwFqwADPR2ADwAD8l4FXBMAARqiAwsAAz9nAAM/yGLo6AGADwAD8lwFqwADP6GADwAD8lxUBBcAARrWAwsAAz/fAAM/3wADQWQAAAAPAANADwADQWQAAAAQEBMAA0AQAAABhWwDAANAMAAAAJ1sAwADQEwAAAKAYWwDAANAaAAAAgpRbAABgA8AARqEBPwEJAMAA0CjAAEagAgACMcAA0DxgA8AARecDJsAA0D0BgMAA0D3AId9vYAPAAEXnJsAA0EUBgcAA0EXAId95YAPAAEXnJsAA0EwBgsAA0EzAId+DYAPAAEXng8AA0FTAId+OAAkGwABGqoDCwADQXsAA0G/AANCCAQBhAAAAAQPAANB2wADQggAAAAAAAABgA8AARecBSsAA0HkBHMAA0H8WwADQeS6CVcAARe1LAQABlADAAP1KBsAARquAwsAA0IbAANCXwADQqQEAJwAAAAEDwADQncAA0KkAAAAAAAAAYAPAAEXnAUrAANCgARzAANCmFsAA0KAuglXAAEXtSwEAAZMAwAD9SgbAAEasgMLAANCtwADQvsAA0NABAKAYAAAAAQPAANDEwADQ0AAAAAAAAABgA8AARecBSsAA0McBHMAA0M0WwADQxy6CVcAARe1LAQABlQDAAP1KBsAARq2AwsAA0WbAANF3wADRrQEAujsAAAABA8AA0YXAANGtAAAAAAAAAGADwABF5wFKwADRiAEjHMAA0ZYWwADRjxbAANGILoJVwABF7WHAAP1rgJcBAAGWAMAA/cccwADRohbAANGcLoJVwABF7UsBAAGWAMAA/UoWwADRqC4nwABGqwFgA8AARecGwABGr4DCwADRscAA0cLAANHZAAC59AFqwADRsmADwAD95AIAAAEDwADRz8AA0dkAAAAAAAAAYAPAAPrRAUrAANHVASkGwABGsIDCwADR3sAA0erAANIkAACEUgFqwADR32ADwAD95AIAAAEDwADR8MAA0iQAAAABAQHAANH6AAAAh0VdA8AARJABWwAAWwFKwADSBgEcwADSDoDAANIGwCHiBLj1AQABLgDAAESZBsAARrGAwsAA0ijAANI4wADSaAAAufsBasAA0ilgA8AA/eQCAAABA8AA0kDAANJoAAAAAAAAAGADwAD8lwFKwADSRgFqwADSU2ADwAD8lyEGwABGsoDCwADSbMAA0n3AANKnAAC5+gFqwADSbWADwAD95AIAAAEDwADSh8AA0qcAAAABAQHAANKIAAAIg9tgA8AARecAAGADwAD60QFKwADSkgElwADSmIDAANKSwCHivmADwABGoQbAAEazgMLAANKrwADSvMAA0uIAALn+AWrAANKsYAPAAP3kAgAAAQPAANLGwADS4gAAAAEBAcAA0tQAAAiD22ADwABF5wAAYAPAAPrRAUrAANLeASkAACHgBgAh4FgAIeCqACHg/QAh4YkAIeHOACHiOAAh4ogAIeLwACHjRQAAAAkCwABGtoDCwADS58AA0vbAANQhB7o8AAABYAHAAEa9AAAAAQXAAEa8gMLAANMiwADTIsAA04kAAAADwADTNMAA04kAAAACAgLAANNJAAAAt1xgA75cAMAA02QAAACCVV0DwAD9OwFgA8AARecAAGADwABGtgE/AQkAwADTdMAARsICAAKAwADTesAh47qBwADTgsAh48gAAwbAAEa4gMLAANONwADTnsAA07QBAIXKAAAAAQPAANOowADTtAAAAAAAAABgA8AARecBSsAA06sBHMAA07EWwADTqy6CVcAARe1LAQABkwDAAP1KBsAARrmAwsAA07jAANPIwADT6QEAuj0AAAABA8AA09PAANPpAAAAAAAAAGADwABFsAFKwADT1gEcwADT5hbAANPcFsAA09YumjLAAEXvuY7AAEW9SwEAAZMAwAD9SgbAAEa6gMLAANPtwADT/cAA1B8BALo+AAAAAQPAANQJwADUHwAAAAAAAABgA8AARbABSsAA1AwBHMAA1BwWwADUEhbAANQMLpoywABF77mOwABFvUsBAAGUAMAA/UoAACHkCgAh5F0AIeS7ACHlGQAAAAMCwABGvYDCwADUJMAA1DPAANXaB7o/AAABYAHAAEXnAAAAAQXAAEbCgMLAANRZwADUWcAA1YAAAAADwADUZcAA1YAAAAACAgLAANR6AAAAt1xgA75cAMAA1JUAAACCVV0DwAD9OwFgA8AARecAAGADwABGvQE/AQkAwADVYcAARnUCAAKBwADVZ8Ah5YQWwADVdoDAANVvwCHldrWrvnMAAgbAAEa/gMLAANWEwADVlcAA1awAALn0AWrAANWFYAPAAP3kAgAAAQPAANWiwADVrAAAAAAAAABgA8AA+tEBSsAA1agBKQbAAEbAgMLAANWwwADVwcAA1dgAALoTAWrAANWxYAPAAP3kAgAAAQPAANXOwADV2AAAAAAAAABgA8AA+tEBSsAA1dQBKQAAIeXPACHmFAAh5lkAAAACAsAARsOAwsAA1gfAANYNwADa1gO6QAAAAWABwABF5wAABATAAEbFgMLAANZAwADWRwmWUgBgA70qAATAAEbGgMLAANakwADWrwm6QQBgA8AA+tEABMAARseAwsAA1//AANgQGLpCAF0DwAD9OwFgA8AAYv0ABMAARsiAwsAA2IzAANiWGLS9AGADvVEAAQXAAEbQgMLAANibwADYm8AA2aUAAAADwADYosAA2aUAAAAHBATAANioAAAEllJgA70qAMAA2MQAAACCVV0DwAD9OwFgA8AARecAwADY2gAAAIKUYAO+UQDAANj4AAAApaRgA8AAQksAA8AA2RcAAAS6Ql0DwAD9OwFgA8AAYv0BagBgA8AA/aF5wADZLwAABLpBYAPAAPrRAWrAANk8YAPAAPrRAMAA2UgAAAS0vWADvVEBagBgA8AA/aF5YAPAAEbDAT4BPRfAANl8LqWkg8AA2ZDAIedQwABF6gUIAcAARsWAAMAh5x0IAcAARseEAMAh52EIAcAARsaFAMAh54EIAcAARsiGAMAh550JAMAA2V3AAEZ1AgACgcAA2WPAIecrgsAA2WvAIedCAAQGwABGyoDCwADZqsAA2bvAANnrAAC58gFqwADZq2ADwAD95AIAAAEDwADZx8AA2esAAAABAQHAANncAAAAt1xgA75cAABgA8AA+tEBSsAA2ecBKQbAAEbOgMLAANnwwADaAcAA2j8BALpDAAAAAQPAANoKwADaPwAAAAAAAABgA8AARecBPgJAFsAA2hcuukHAAEbGwADaF8AA2iIASsAA2ikBFsAA2jcWwADaMC6CVcAARe2B6sAA/SAGwABGy4DCwADaRMAA2lDAANqFAACEUgFqwADaRWADwAD95AIAAAEDwADaVsAA2oUAAAABAQHAANpgAAAAh0VdA8AARJABWwAAWwFKwADabAEcwADadIDAANpswCHpFbj2AQABLgDAAESdBsAARsyAwsAA2orAANqdwADa1AAAIwFqwADai2ADwAD95AIAAAEDwADapcAA2tQAAAAAAAAAYAPAAP5+AUrAANqrASTAANrUBSe6RBbAANq1LpZSwABGxSeBixbAANrALrpCwABGxyeDJgAAIeglACHoeAAh6N8AIelJACHpswAAAAQCwABG0YDCwADbEMAA2xbAANw9A7pFAAABYAHAAEXnAAAAAQXAAEbXgMLAANs6wADbOsAA23gAAAADwADbRMAA23gAAAABAQHAANtTAAAAgpRgA75RAABgA8AARtEBPwEJAMAA21vAAEZ1AgACMcAA229gA8AARecAgMAA23PAIeoUAAMGwABG04DCwADbfcAA247AANu+AAC58gFqwADbfmADwAD95AIAAAEDwADbmsAA274AAAABAQHAANuvAAAAt1xgA75cAABgA8AA+tEBSsAA27oBKQbAAEbUgMLAANvDwADbz8AA3AcAAIRSAWrAANvEYAPAAP3kAgAAAQPAANvVwADcBwAAAAEBAcAA298AAACHRV0DwABEkAFbAABbAUrAANvrARzAANvzgMAA2+vAIerZuPcBAAEuAMAARJ4GwABG1YDCwADcDMAA3B/AANw7AAAjAWrAANwNYAPAAP3kAgAAAQPAANwnwADcOwAAAAAAAABgA8AA/n4BSsAA3C0BJ7pGAAAh6lAAIeqjACHrDQAh61MAAAADAsAARtiAwsAA3EDAANxPwADfGwe6RwAAAWABwABF5wAAAwTAAEbbgMLAANx1wADcihi6SMAARI8AYAPAAPrRASoEwABG3IDCwADdTcAA3WYYukkAYAPAAPrRASoEwABG3YDCwADeMcAA3kUGukoAYAPAAPyXAWrAAN5EYAPAAPyXFQEFwABG44DCwADda8AA3WvAAN4cAAAAA8AA3XLAAN4cAAAAAgICwADdhgAAAIJVXQPAAP07AWADwABF5wDAAN2cAAAAuktgA75RAABgA8AARtgBPgI9HMAA3dwWwADd0C60wcAARfK3+gAAAADAAHiHPRzAAN4BFsAA3fUutMHAAEXyt/sAAAAAwAB4iQEJAMAA3bDAAEZ1AgACgMAA3bbAIewQgcAA3b7AIewnAAMGwABG34DCwADeSsAA3lvAAN6HAAC58QFqwADeS2ADwAD95AIAAAEDwADeY8AA3ocAAAABAQHAAN54AAAAt1xgA75cAABgA8AA+tEBSsAA3oMBKQbAAEbggMLAAN6MwADencAA3tYAALnyAWrAAN6NYAPAAP3kAgAAAQPAAN6pwADe1gAAAAEBAcAA3r4AAAC3XGADvlwAAGADwAD60QFKwADeyQEWwADeyS66SMAARI/AAEbbBsAARuGAwsAA3tvAAN7gwADfGQAAukwAAAABA8AA3u3AAN8ZAAAAAQEBwADe8wAAAICWYAPAAPrRAABcAT4BPRfAAN8ALrpIwABEj4DAAN8QwCHteMAARtsAACHsmQAh7OwAIe1OACHtpwAAAAMCwABG5IDCwADfHsAA3y3AAOczB7pNAAABYAHAAEbYAAAFBMAARuaAwsAA32/AAN96CbpOAGADwACGTAAEwABG54DCwADfk8AA35sYpTQBasAA339gA8AA/eQCYAPAAEvPAATAAEbpgMLAAN+twADfuhi6T8AARI8AYAO+UQAEwABG6oDCwADf0sAA3+cJulDAAESPAGADvlEABMAARuuAwsAA3/jAAN//GJZSAGADvTwAAQXAAEb5gMLAAOAEwADgBMAA4hcAAAADwADgEsAA4hcAAAAGBgbAAOAcAAAApTRgA8AAS88AwADgKwAABLpPYAO+UQDAAOA/AAAEllJgA708AMAA4GEAAACCVV0DwAD9OwFgA8AARecAwADgbgAAALpRYAPAAPrRAMAA4IsAAAC6S2ADvlEAAGADwABG5AE+A0AhHMAA4cGEwADhs8Ah7tdIAQABKwDAAP3xwADh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wsAiGEKBwAEQzcAiGFIACQbAAEdygMLAARG4wAERycABEeIBAIWPAAAAAQPAARHSwAER4gAAAAAAAABgA8AARecBSsABEdUBFsABEdwWwAER1S6CVcAARe2Aw8AA/SEGwABHdIDCwAER58ABEfjAARJPAAC58QFqwAER6GADwAD95AIAAAEDwAESAMABEk8AAAABAQHAARIVAAAAt1xgA75cAABgA8AA+tEBSsABEiYBFsABEj4cwAESLxbAARImLoWPwABHcqhCAQABgMABEjbAIhnhAMAARjWzGr5ABsAAR3WAwsABElTAARJtwAESogAAufYBasABElVgA8AA/eQCAAABA8ABEnzAARKiAAAAAQEBwAESigAAAKUiYAPAAE2cAABgA8AARecBSsABEpoBFsABEpouhY/AAEdyBsAAR3aAwsABEqbAARK3wAESzgAAufcBasABEqdgA8AA/eQCAAABA8ABEsTAARLOAAAAAAAAAGADwAD60QFKwAESygEpBsAAR3eAwsABEtPAARLfwAETFwAAhFIBasABEtRgA8AA/eQCAAABA8ABEuXAARMXAAAAAQEBwAES7wAAAIdFXQPAAESQAVsAAFsBSsABEvsBHMABEwOAwAES+8AiGwW4/gEAAS4AwABEpQbAAEd4gMLAARMcwAETLMABE1oAALn7AWrAARMdYAPAAP3kAgAAAQPAARM0wAETWgAAAAAAAABgA8AA/JcBSsABEzoBasABE0dgA8AA/JfAAEaaBsAAR3mAwsABE17AARNvwAETlwAAufoBasABE19gA8AA/eQCAAABA8ABE3nAAROXAAAAAQEBwAETegAACIPbYAPAAEXnAABgA8AA+tEBSsABE4QBJcABE4qAwAEThMAiG8JgA8AAR24GwABHeoDCwAETm8ABE6zAARPQAAC5/gFqwAETnGADwAD95AIAAAEDwAETtsABE9AAAAABAQHAARPCAAAIg9tgA8AAR24AAGADwAD60QFKwAETzAEpBsAAR3uAwsABE9TAARPnwAEUAgAAIwFqwAET1WADwAD95AIAAAEDwAET78ABFAIAAAAAAAAAYAPAAP5+AUrAARP1ASe6eAAAIhlcACIZqwAiGioAIhqKACIazwAiGzkAIhuMACIb9AAiHEkAIhyPAAAACQLAAEd+gMLAARSRwAEUl8ABG4EDunkAAAFgAcAARpUAAAYEwABHgIDCwAEU0sABFN8GunoAYAPAAPyXAWrAARTeYAPAAPyXCQTAAEeBgMLAARTwwAEU+ga6ewBgA8AA/JcBasABFPlgA8AA/JcVBMAAR4KAwsABFQvAARUWBrp8AGADwAD8lwFqwAEVFWADwAD8lyEEwABHg4DCwAEVLMABFTMJllIAYAO9TgAEwABHhIDCwAEVRMABFUgJun0AYAPAAP5+AATAAEeFgMLAARVWwAEVXAm6fgBgA8AA/JcABAXAAEeVgMLAARVhwAEVYcABFqEAgLXAAESPAAPAARVzwAEWoQAAAAUFBcABFXkAAASWUmADvU4AwAEVhwAABLp9YAPAAP5+AMABFZIAAAS6fmADwAD8lwDAARWzAAAAglVdA8AA/TsBYAPAAEXnAMABFckAAACClGADvlEAAGADwABHfgE+BD0cwAEV/RbAARXxLrTBwABF8rpuAAAAAMAAeIg9HMABFiQWwAEWGC60wcAARfK6bwAAAADAAHiKPRzAARZMFsABFkAutMHAAEXyt/kAAAAAwAB4mj0cwAEWehbAARZuLrTBwABF8rf4AAAAAMAAeJgECAHAAEeDgADAIh3HCAHAAEeEgQDAIh3VCAHAAEeFggDAIh3lCQDAARXXwABGlwIAAoPAARXdwCId9YTAARXlwCIeDAAFwABHloDCwAEWpsABFqbAAReHALp/AAPAARa/wAEXhwAAAAUFBcABFswAAACWUmADvU4AwAEW3AAAALp9YAPAAP5+AMABFvUAAACFj2ADwABF5wDAARcMAAAAhcJgA8AARecAwAEXIwAAAIKUYAO+UQAAYAPAAEd+AT8BCgDAARc2wABHlQUABYDAARdFwCIe/4HAARdOwCIfDWrAARdUYAPAAPyXCTHAARdtYAPAAEXnAoLAARduwCIfHYPAARd4wCIfLYTAAReCwCIfPQAFwABHl4DCwAEXjMABF4zAARg7ALqAAAPAAReiwAEYOwAAAAQEBMABF68AAACWUmADvU4AwAEXvwAAALp9YAPAAP5+AMABF9gAAACFj2ADwABF5wDAARfwAAAAgpRgA75RAABgA8AAR34BPwEKAMABGAPAAEeVBQAFgMABGAXAIh/OgcABGA7AIh/casABGBRgA8AA/JcVMcABGCpgA8AARecBgsABGCvAIh/sg8ABGDbAIh/8AAXAAEeYgMLAARhAwAEYQMABGPEAuoEAA8ABGFfAARjxAAAABAQEwAEYZAAAAJZSYAO9TgDAARh0AAAAun1gA8AA/n4AwAEYjQAAAIWPYAPAAEXnAMABGKUAAACClGADvlEAAGADwABHfgE/AQoAwAEYuMAAR5UFAAWAwAEYusAiIISBwAEYw8AiIJJqwAEYyWADwAD8lyExwAEY4GADwABF5wGCwAEY4cAiIKKDwAEY7MAiILIACwbAAEeHgMLAARj2wAEZB8ABGRwBAIWPAAAAAQPAARkQwAEZHAAAAAAAAABgA8AARecBSsABGRMBHMABGRkWwAEZEy6CVcAARe1LAQABkwDAAP1KBsAAR4iAwsABGSHAARkqwAEZRQEAuoIAAAABA8ABGTLAARlFAAAAAAAAAGADwAD60QFKwAEZNQEcwAEZPBbAARk1Lrp+wABHhUgBAAFqwAEZP2ADwAD8lxUAwAD9uwbAAEeJgMLAARlJwAEZUsABGW8BALqDAAAAAQPAARlbwAEZbwAAAAAAAABgA8AA+tEBSsABGV4BHMABGWUWwAEZXi66fsAAR4VIAQABasABGWhgA8AA/JchAMAA/bsGwABHioDCwAEZc8ABGXzAARmdAQC6hAAAAAEDwAEZh8ABGZ0AAAAAAAAAYAPAAPrRAUrAARmKARzAARmRFsABGYouun7AAEeFSAEAAWrAARmUYAPAAPyXCQDAAP27BsAAR42AwsABGaLAARmzwAEaCgAAufEBasABGaNgA8AA/eQCAAABA8ABGbvAARoKAAAAAQEBwAEZ0AAAALdcYAO+XAAAYAPAAPrRAUrAARnhARbAARn5HMABGeoWwAEZ4S6Fj8AAR4eoQgEAAYDAARnxwCIiuADAAEY1sxq+QAbAAEeOgMLAARoPwAEaKMABGl0AALn2AWrAARoQYAPAAP3kAgAAAQPAARo3wAEaXQAAAAEBAcABGkUAAAClImADwABNnAAAYAPAAEXnAUrAARpVARbAARpVLoWPwABHhwbAAEePgMLAARphwAEacsABGokAALn3AWrAARpiYAPAAP3kAgAAAQPAARp/wAEaiQAAAAAAAABgA8AA+tEBSsABGoUBKQbAAEeLgMLAARqOwAEan8ABGrEBAICWAAAAAQPAARqlwAEasQAAAAAAAABgA8AARecBSsABGqgBHMABGq4WwAEaqC6CVcAARe1LAQABlADAAP1KBsAAR5CAwsABGrXAARrBwAEa/wAAhFIBasABGrZgA8AA/eQCAAABA8ABGsfAARr/AAAAAQEBwAEa0QAAAIdFXQPAAESQAVsAAFsBSsABGt0BHMABGuWAwAEa3cAiJC+5HwEAAS4AwABEyAbAAEeRgMLAARsEwAEbFcABGzIAALoTAWrAARsFYAPAAP3kAgAAAQPAARsiwAEbMgAAAAAAAABgA8AA+tEBSsABGygBFsABGyguuoTAAEeKBsAAR5KAwsABGzbAARtJwAEbfwAAIwFqwAEbN2ADwAD95AIAAAEDwAEbUcABG38AAAAAAAAAYAPAAP5+AUrAARtXASTAARt/Bie6hRbAARtpLrp9wABHhCeA2RbAARtvLrp+wABHhSeA2RbAARt3LpZSwABHgwAAIiEVACIhaAAiIcYAIiIkACIiggAiIwEAIiNhACIjpgAiI/kAIiRjACIkswAiJSkAAAALAsAAR5mAwsABG4TAARuTwAEcZQe6hgAAAWABwABF5wAAAQTAAEebgMLAARvFwAEbzQmCcABgA711AAEFwABHn4DCwAEb0sABG9LAARw4AAAAA8ABG97AARw4AAAAAwMDwAEb5AAABIJwYAO9dQDAARwBAAAAglVdA8AA/TsBYAPAAEXnAMABHBcAAACClGADvlEAAGADwABHmQE/AggBwABHm4AAwCIlvgkAwAEcJcAARnUCAAKBwAEcK8AiJcyCwAEcM8AiJeMAAQbAAEedgMLAARw9wAEcTsABHGMBAIWPAAAAAQPAARxXwAEcYwAAAAAAAABgA8AARecBSsABHFoBHMABHGAWwAEcWi6CVcAARe1LAQABkwDAAP1KAAAiJigAIiZ7AAAAAQLAAEeggMLAARxowAEcbsABHiIDuocAAAFgAcAAR5kAAAABBcAAR6aAwsABHNzAARzcwAEdsQAAAAPAARzlwAEdsQAAAAQEBMABHOwAAACCcGADvXUAwAEdAgAAAJ8HYAPAAEjaAMABHRcAAACClGADvlEAwAEdNQAAAKWkYAPAAEJLAABgA8AAR6ABPgE9F8ABHYgupaSDwAEdnMAiJvzAAEXqAQkAwAEdUMAAR58DAAOAwAEdVsAiJtAxwAEdbmADwABF5wGBwAEdb8AiJt6CwAEdd8AiJu4AAgbAAEeigMLAAR22wAEdwsABHfkAAIRSAWrAAR23YAPAAP3kAgAAAQPAAR3IwAEd+QAAAAEBAcABHdIAAACHRV0DwABEkAFbAABbAUrAAR3eARzAAR3mgMABHd7AIieZuRUBAAEuAMAARL0GwABHpIDCwAEd/sABHg7AAR4gAQCfBwAAAAEDwAEeFMABHiAAAAAAAAAAYAPAAEjaAUrAAR4XASbAAR4XARzAAR4dFsABHhcuglXAAEXtSwEAAZMAwAD9SmADwABI2gAAIidjACInzQAiKCwAAAACAsAAR6eAwsABHiXAAR4rwAEfvAO6iAAAAWABwABHmQAAAAEFwABHr4DCwAEeTsABHk7AAR74AAAAA8ABHlfAAR74AAAABAQEwAEebAAAALdcYAO+XADAAR56AAAAgnBgA711AMABHpAAAACfB2ADwABI2gDAAR6qAAAAgJZgA8AARecAAGADwABHpwE/AQkAwAEeucAAR58DAAOBwAEev8AiKJMxwAEe12ADwABF5wKCwAEe2MAiKKGDwAEe38AiKLEWwAEe7oDAAR7nwCIohbWrvnMABAbAAEepgMLAAR79wAEfCcABH0AAAIRSAWrAAR7+YAPAAP3kAgAAAQPAAR8PwAEfQAAAAAEBAcABHxkAAACHRV0DwABEkAFbAABbAUrAAR8lARzAAR8tgMABHyXAIilJuRYBAAEuAMAARL4GwABHrIDCwAEfRcABH1XAAR9nAQCfBwAAAAEDwAEfW8ABH2cAAAAAAAAAYAPAAEjaAUrAAR9eASbAAR9eARzAAR9kFsABH14uglXAAEXtSwEAAZMAwAD9SmADwABI2gbAAEetgMLAAR9rwAEffMABH44BAICWAAAAAQPAAR+CwAEfjgAAAAAAAABgA8AARecBSsABH4UBHMABH4sWwAEfhS6CVcAARe1LAQABlADAAP1KBsAAR6qAwsABH5LAAR+jwAEfugAAuhMBasABH5NgA8AA/eQCAAABA8ABH7DAAR+6AAAAAAAAAGADwAD60QFKwAEftgEpAAAiKRMAIil9ACIp3AAiKi8AIip0AAAABALAAEewgMLAAR+/wAEfzsABIRoHuokAAAFgAcAARecAAAABBcAAR7eAwsABH/DAAR/wwAEgPQAAAAPAAR/4wAEgPQAAAAICAsABIAcAAACClGADvlEAwAEgIAAAAIJVXQPAAP07AWADwABF5wAAYAPAAEewAT8BCQDAASAqwABGdQIAAoHAASAwwCIq44DAASA4wCIq1QADBsAAR7KAwsABIELAASBLwAEgXwEAuooAAAABA8ABIFfAASBfAAAAAAAAAGADwAD60QFKwAEgWgEqBsAAR7OAwsABIGPAASB2wAEgjAEAr6kAAAABA8ABIIXAASCMAAAAAAAAAGADwABnOwFKwAEgiAErBsAAR7WAwsABIJHAASCiwAEhGAAAufEBasABIJJgA8AA/eQCAAABA8ABIKrAASEYAAAAAQEBwAEgvwAAALdcYAO+XAAAYAPAAPrRAT4BSsABIM0BIhzAASDgFsABINQutMHAAEXyue8AAAAAwAB4hQEcwAEhABbAASD0LrTBwABF8rnwAAAAAMAAeIYAACIrJQAiK14AIiuXACIsIwAAAAMCwABHuIDCwAEhHcABISPAASqJA7qLAAABYAHAAEewAAAFBMAAR7qAwsABIVfAASFjCbqMAGADwACZogAEwABHu4DCwAEhfsABIYkJuooBasABIWhgA8AA/eQCYAPAAPrRAATAAEe8gMLAASGuwAEhvAmvqQFqwAEhjmADwAD95AJgA8AAZzsABMAAR72AwsABIdTAASHhGLqNAGADwABnIwAEwABHvoDCwAEh+sABIgkJuo4AYAO9UQACBcAAR8qAwsABIg7AASIOwAElZAAAAAPAASIawAElZAAAAAgDA8ABIiAAAAS6jGADwACZogDAASI8AAAAgpRgA75RAMABIlUAAACCVV0DwAD9OwFgA8AARecABcABImkAAAS6imADwAD60QFqwAEidmADwAD60QDAASKPAAAAuo9gA8AAeG0BagBgA8AA/aF5wAEirQAAAK+pYAPAAGc7AWoAYAPAAP2hecABItcAAAC6jWADwABnIwFqAGADwAD9oXnAASLxAAAEuo5gA71RAWoAYAPAAP2heWADwABHuAE+BkAhHMABI5MWwAEjhi66jMAAR7pIAQABKwDAAP3xwAEjhsABI5oAScABI6EiHMABI62EwAEjpcAiLWpIAQABKwDAAHh+ACEcwAEjx4XAASO4wCItg0gBAAErAMAA/fE+AT2MwAEj2MAiLWoWwAEj8YXAASPiwCItg7TBwABnQj9JwAEkCBzAASQfFsABJBEuuo3AAEe9SAEAASsAwAD98T4BPRfAASQ1LrqNIxzAASRVhcABJEbAIi2DSAEAASsAwAD98WrAASR+YAPAAGcjwAD5XRbAASSdhcABJI7AIi2Duo3AAGdDAWADwABnI8AAR70/QCEcwAEk0BbAASTCLrqNwABHvUgBAAErAMAA/fHAASS9wAEk1wBJwAEk3yEcwAEk64TAASTjwCItakgBAAErAMAAeH49HMABJQAWwAEk9C60wcAARfJWAQABhMABJQTAIi1qAMAAeJ8/ScABJRIiIRzAASUlhcABJRbAIi2DSAEAASsAwAD98QAWwAElP4XAASUwwCItg7nrwABnRT4BPRzAASVPLrnsAAAAAMAARi4/BggBwABHuoAAwCItGAgBwABHu4MAwCItTggBwABHvocAwCIttQgAwABHvIXAASMhwCItgwgAwABHvYbAASNOwCItnAkAwAEjZcAAR7cCAAKBwAEja8AiLSiCwAEjccAiLTYABcAAR8uAwsABJWnAASVpwAEmlACFYAADwAElf8ABJpQAAAAFBQXAASWMAAAAuoxgA8AAmaIAwAElrQAAAIJVXQPAAP07AWADwABF5wDAASXHAAAAuo9gA8AAeG0AwAEl3wAAAK+pYAPAAGc7AMABJf0AAACClGADvlEAAGADwABHuAE/AQoAwAEmC8AAR8oGAAOAwAEmEMAiMAGEwAEmHsAiMEiBwAEmJMAiMBEDuoopuo+CwAEmYMAiMCivqYPAASaFwCIwOAkGwABHwIDCwAEmmcABJqXAASbfAACEUgFqwAEmmmADwAD95AIAAAEDwAEmq8ABJt8AAAABAQHAASa1AAAAh0VdA8AARJABWwAAWwFKwAEmwQEcwAEmyYDAASbBwCIw2bj9AQABLgDAAESkBsAAR8GAwsABJuTAASb1wAEnEwAAuhMBasABJuVgA8AA/eQCAAABA8ABJwLAAScTAAAAAAAAAGADwAD60QFKwAEnCAEWwAEnCC66isAAR7sGwABHwoDCwAEnF8ABJyjAASgjAAC58QFqwAEnGGADwAD95AIAAAEDwAEnMMABKCMAAAABAQHAASdFAAAAt1xgA75cAABgA8AA+tEBPgJJwAEnUxzAASdlFsABJ14WwAEnVy6CVcAARe1hwAD9a4CXAQABkwDAAP3HPgFKwAEncgEjFsABJ5UcwAEnhhbAASeAFsABJ3kuglXAAEXtgx7AAP0fqEIBAAGAwAEnjcAiMZMAwABGNbMavkAWwAEnwRbAASezLrqNwABHvbnxwABnLRbAASfuFsABJ+QWwAEn1i66jcAAR726kMAAZzC58cAAZy0BYAPAAPrRP0rAASgCARbAASgXFsABKAkuuo3AAEe9ufHAAGctBsAAR8OAwsABKCjAASg5wAEobAAAufcBasABKClgA8AA/eQCAAABA8ABKEbAAShsAAAAAAAAAGADwAD60QFKwAEoTAEWwAEoWhbAAShMLrqNwABHvbqRwABnLwbAAEfEgMLAAShxwAEogsABKRkAALnyAWrAAShyYAPAAP3kAgAAAQPAASiOwAEpGQAAAAEBAcABKKMAAAC3XGADvlwAAGADwAD60QFKwAEotAEiIiEcwAEowxbAASi0Lq+pwABHvEgBAAErAMAA/fEAFsABKOMWwAEo1C6vqcAAR7y58sAAZ0QAFsABKQgcwAEo+S6oQgEAAYDAASkAwCIzBgDAAEY1tZO+QQbAAEfFgMLAASkewAEpLsABKV4AALn7AWrAASkfYAPAAP3kAgAAAQPAASk2wAEpXgAAAAAAAABgA8AA/JcBSsABKTwBasABKUlgA8AA/Je0PQbAAEfGgMLAASliwAEpc8ABKZ0AALn6AWrAASljYAPAAP3kAgAAAQPAASl9wAEpnQAAAAEBAcABKX4AAAiD22ADwABF5wAAYAPAAPrRAUrAASmIASXAASmOgMABKYjAIjQCYAPAAEe4BsAAR8eAwsABKaHAASmywAEqOQAAuf4BasABKaJgA8AA/eQCAAABA8ABKbzAASo5AAAAAQEBwAEpygAACIPbYAPAAEe4AABgA8AA+tEBPgFKwAEp1wEiIRzAASnyFsABKesWwAEp3i66jMAAR7qDSsAAmaRIAQABKwDAAP6NABzAASoZFsABKhIWwAEqBS66jMAAR7qDSsAAmaRIAQABFsABKi8WwAEqIoDAASocwCI0arqMwABHuoNKwACZpADAAP6NBsAAR8iAwsABKj7AASpRwAEqhwAAIwFqwAEqP2ADwAD95AIAAAEDwAEqWcABKocAAAAAAAAAYAPAAP5+AUrAASpfASTAASqHAye6khbAASp9FsABKnAuuozAAEe6g0rAAJmkJ7qTAAAiMKMAIjENACIxXQAi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XQPAAESQAVsAAFsBSsABMDwBHMABMESAwAEwPMAiPGu4+AEAAS4AwABEnwbAAEfngMLAATBawAEwhsABMKsAAJz9AWrAATBbYAPAAP3kAgAAAQPAATCPwAEwqwAAAAAAAABgA8AAaZgBSsABMJUBasABMKVgA8AAai/AAPl4BsAAR+iAwsABMK/AATC/wAEw6QAAufsBasABMLBgA8AA/eQCAAABA8ABMMfAATDpAAAAAAAAAGADwAD8lwFKwAEwzQFqwAEw2mADwAD8l4LhBsAAR+mAwsABMO3AATD+wAExIwAAufoBasABMO5gA8AA/eQCAAABA8ABMQjAATEjAAAAAQEBwAExCQAACIPbYAPAAEXnAABgA8AA+tEBSsABMRMBJcABMRmAwAExE8AiPXlgA8AAR+QGwABH6oDCwAExJ8ABMTjAATFeAAC5/gFqwAExKGADwAD95AIAAAEDwAExQsABMV4AAAABAQHAATFQAAAIg9tgA8AARecAAGADwAD60QFKwAExWgEpAAAiPDUAIjyfACI88gAiPUMAIj2rACI+AAAAAAUCwABH7YDCwAExY8ABMWnAATNxA7qYAAABYAHAAEfWAAAAAQXAAEf1gMLAATGRwAExkcABMhkAAAADwAExmsABMhkAAAAEBATAATGoAAAAhcVgA8AARecAwAExuwAAAIXHYAPAAEXnAMABMcsAAAClNGADwABLzwDAATHpAAAAgpRgA75RAABgA8AAR+0BPwEJAMABMffAAEfaBAAEgMABMf3AIj5lgcABMgPAIj51gsABMgrAIj6Fg8ABMhTAIj6VAAUGwABH74DCwAEyHcABMinAATJgAACEUgFqwAEyHmADwAD95AIAAAEDwAEyL8ABMmAAAAABAQHAATI5AAAAh0VdA8AARJABWwAAWwFKwAEyRQEcwAEyTYDAATJFwCI/FrkZAQABLgDAAETBBsAAR/CAwsABMmXAATKRwAEyuAAAnP0BasABMmZgA8AA/eQCAAABA8ABMprAATK4AAAAAAAAAGADwABpmAFKwAEyoAFqwAEysGADwABqCsAA+YcGwABH8YDCwAEyvMABMszAATL4AAC5+wFqwAEyvWADwAD95AIAAAEDwAEy1MABMvgAAAAAAAAAYAPAAPyXAUrAATLaAWrAATLnYAPAAPyXhQcGwABH8oDCwAEy/MABMw3AATM0AAC5+gFqwAEy/WADwAD95AIAAAEDwAEzF8ABMzQAAAABAQHAATMYAAAIg9tgA8AARecAAGADwAD60QFKwAEzIgElwAEzKIDAATMiwCJAJGADwABH7QbAAEfzgMLAATM4wAEzScABM28AALn+AWrAATM5YAPAAP3kAgAAAQPAATNTwAEzbwAAAAEBAcABM2EAAAiD22ADwABF5wAAYAPAAPrRAUrAATNrASkAACI+4AAiP0oAIj+dACI/7gAiQFYAIkCrAAAABQLAAEf2gMLAATN0wAEzesABNYIDupkAAAFgAcAAR9YAAAABBcAAR/6AwsABM6LAATOiwAE0KgAAAAPAATOrwAE0KgAAAAQEBMABM7kAAACFxWADwABF5wDAATPMAAAAhcdgA8AARecAwAEz3AAAAKU0YAPAAEvPAMABM/oAAACClGADvlEAAGADwABH9gE/AQkAwAE0CMAAR9oEAASAwAE0DsAiQRCBwAE0FMAiQSCCwAE0G8AiQTCDwAE0JcAiQUAABQbAAEf4gMLAATQuwAE0OsABNHEAAIRSAWrAATQvYAPAAP3kAgAAAQPAATRAwAE0cQAAAAEBAcABNEoAAACHRV0DwABEkAFbAABbAUrAATRWARzAATRegMABNFbAIkHBuSgBAAEuAMAARNIGwABH+YDCwAE0dsABNKLAATTJAACc/QFqwAE0d2ADwAD95AIAAAEDwAE0q8ABNMkAAAAAAAAAYAPAAGmYAUrAATSxAWrAATTBYAPAAGoBwAD5lgbAAEf6gMLAATTNwAE03cABNQkAALn7AWrAATTOYAPAAP3kAgAAAQPAATTlwAE1CQAAAAAAAABgA8AA/JcBSsABNOsBasABNPhgA8AA/JeDXQbAAEf7gMLAATUNwAE1HsABNUUAALn6AWrAATUOYAPAAP3kAgAAAQPAATUowAE1RQAAAAEBAcABNSkAAAiD22ADwABF5wAAYAPAAPrRAUrAATUzASXAATU5gMABNTPAIkLPYAPAAEf2BsAAR/yAwsABNUnAATVawAE1gAAAuf4BasABNUpgA8AA/eQCAAABA8ABNWTAATWAAAAAAQEBwAE1cgAACIPbYAPAAEXnAABgA8AA+tEBSsABNXwBKQAAIkGLACJB9QAiQkgAIkKZACJDAQAiQ1YAAAAFAsAAR/+AwsABNYXAATWLwAE3ygO6mgAAAWABwABH1gAAAAEFwABIB4DCwAE1u8ABNbvAATZLAAAAA8ABNczAATZLAAAABAQEwAE12gAAAIXFYAPAAEXnAMABNe0AAACFx2ADwABF5wDAATX9AAAApTRgA8AAS88AwAE2GwAAAIKUYAO+UQAAYAPAAEf/AT8BCQDAATYpwABH2gQABIDAATYvwCJDu4HAATY1wCJDy4LAATY8wCJD24PAATZGwCJD6wAFBsAASAGAwsABNk/AATZbwAE2mgAAhFIBasABNlBgA8AA/eQCAAABA8ABNmHAATaaAAAAAQEBwAE2awAAAIdFXQPAAESQAVsAAFsBSsABNncBHMABNn+AwAE2d8AiRGy5KgEAAS4AwABE1wbAAEgCgMLAATafwAE2y8ABNwAAAJz9AWrAATagYAPAAP3kAgAAAQPAATbUwAE3AAAAAAAAAABgA8AAaZgBSsABNuABasABNvBgA8AAaiXAAPmlBsAASAOAwsABNwTAATcUwAE3SQAAufsBasABNwVgA8AA/eQCAAABA8ABNxzAATdJAAAAAAAAAGADwAD8lwFKwAE3IgFqwAE3L2ADwAD8l7DwBsAASASAwsABN03AATdewAE3jQAAufoBasABN05gA8AA/eQCAAABA8ABN2jAATeNAAAAAQEBwAE3aQAACIPbYAPAAEXnAABgA8AA+tEBSsABN3MBJcABN3mAwAE3c8AiRXpgA8AAR/8GwABIBYDCwAE3kcABN6LAATfIAAC5/gFqwAE3kmADwAD95AIAAAEDwAE3rMABN8gAAAABAQHAATe6AAAIg9tgA8AARecAAGADwAD60QFKwAE3xAEpAAAiRDYAIkSgACJE8wAiRUQAIkWsACJGAQAAAAUCwABICIDCwAE3zcABN9PAATnhA7qbAAABYAHAAEfWAAAAAQXAAEgQgMLAATf8wAE3/MABOIUAAAADwAE4BsABOIUAAAAEBATAATgUAAAAhcVgA8AARecAwAE4JwAAAIXHYAPAAEXnAMABODcAAAClNGADwABLzwDAAThVAAAAgpRgA75RAABgA8AASAgBPwEJAMABOGPAAEfaBAAEgMABOGnAIkZmgcABOG/AIkZ2gsABOHbAIkaGg8ABOIDAIkaWAAUGwABICoDCwAE4icABOJXAATjNAACEUgFqwAE4imADwAD95AIAAAEDwAE4m8ABOM0AAAABAQHAATilAAAAh0VdA8AARJABWwAAWwFKwAE4sQEcwAE4uYDAATixwCJHF7khAQABLgDAAETKBsAASAuAwsABONLAATj+wAE5JgAAnP0BasABONNgA8AA/eQCAAABA8ABOQfAATkmAAAAAAAAAGADwABpmAFKwAE5DQFqwAE5HWADwABqHMAA+bcGwABIDIDCwAE5KsABOTrAATlnAAC5+wFqwAE5K2ADwAD95AIAAAEDwAE5QsABOWcAAAAAAAAAYAPAAPyXAUrAATlIAWrAATlVYAPAAPyXwABGzQbAAEgNgMLAATlrwAE5fMABOaQAALn6AWrAATlsYAPAAP3kAgAAAQPAATmGwAE5pAAAAAEBAcABOYcAAAiD22ADwABF5wAAYAPAAPrRAUrAATmRASXAATmXgMABOZHAIkgnYAPAAEgIBsAASA6AwsABOajAATm5wAE53wAAuf4BasABOalgA8AA/eQCAAABA8ABOcPAATnfAAAAAQEBwAE50QAACIPbYAPAAEXnAABgA8AA+tEBSsABOdsBKQAAIkbhACJHSwAiR54AIkfxACJIWQAiSK4AAAAFAsAASBGAwsABOqTAATqqwAE88QO6nAAAAWABwABGvQAAAAEFwABIGoDCwAE6y8ABOsvAATsnAAAAA8ABOtLAATsnAAAAAgICwAE65wAAALdcYAO+XADAATsCAAAAglVdA8AA/TsBYAPAAEXnAABgA8AASBEBPwEJAMABOxLAAEbCAgACgMABOxjAIkkTgcABOyDAIkkhAAUGwABIE4DCwAE7LMABOzbAATteAACGFQAAAAEDwAE7PsABO14AAAABAQHAATtDAAAAJ2ADwAD8lwAAYAPAAEi8AUrAATtNASbAATtNARzAATtTFsABO00uglXAAEXtSwEAARzAATtagMABO1TAIkmNZAEAAZQAwAD9vQDAAP1KYAPAAEi8BsAASBeAwsABO2LAATtzwAE7igEAgm8AAAABA8ABO37AATuKAAAAAAAAAGADwABF5wFKwAE7gQEcwAE7hxbAATuBLoJVwABF7UsBAAGTAMAA/UoGwABIGIDCwAE8NMABPETAATxqAQC6nQAAAAEDwAE8UsABPGoAAAAAAAAAYAPAAEWwAUrAATxVARbAATxmFsABPFsWwAE8VS6a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AIdFXQPAAESQAVsAAFsBSsABaMoBHMABaNKAwAFoysAifzq5FwEAAS4AwABEvwAAIn6jACJ/BAAif24AAAACAsAASOCAwsABaOzAAWjywAFrnAO6zAAAAWABwABI2gAAAAEFwABI5oDCwAFpGsABaRrAAWlmAAAAA8ABaSnAAWlmAAAAAgICwAFpMQAAAIJwYAO9FgDAAWlJAAAAgpRgA75RAABgA8AASOABPwEJAMABaVHAAEjfAgACgMABaVfAIn/HgcABaWHAIn/VAAMGwABI4oDCwAFqScABak7AAWsNAAC6zQAAAAEDwAFqXMABaw0AAAAAAAAAYAPAAPrRAT4CRsABamXAAWqHwAFqdwAAAKQAYAPAAEXnABbAAWp/LrmEwABF7j4CScABao8lwAFqmIDAAWqTwCKAS2ADwABHoErAAWqmASk/ScABarkiJcABasKAwAFqvcAigEtgA8AAR6cAHMABat0WwAFq1xTAAWrSwCKASwABYAPAAEennwfAAEesSAEAAS4AwAD98UrAAWrmASk/SsABav0BKgbAAEjjgMLAAWsSwAFrHsABa00AACMBasABaxNgA8AA/eQCAAABA8ABaybAAWtNAAAAAAAAAGADwAD+fgFKwAFrLAEkwAFrTQInus4WwAFrRxbAAWs5LqWjwABF6YC9vRgGwABI5IDCwAFrUcABa13AAWuaAACEUgFqwAFrUmADwAD95AIAAAEDwAFrY8ABa5oAAAABAQHAAWttAAAAh0VdA8AARJABWwAAWwFKwAFreQEcwAFrgYDAAWt5wCKBdrkcAQABLgDAAETFAAAigA4AIoDfACKBQAAigaoAAAADAsAASOeAwsABa5/AAWulwAFuAAO6zwAAAWABwABI4AAAAAEFwABI8oDCwAFrx8ABa8fAAWwKAAAAA8ABa8zAAWwKAAAAAgICwAFr1wAAAJZSYAPAAIXZAMABa+4AAACClGADvlEAAGADwABI5wE/AQkAwAFr9sAASOYCAAKAwAFr/MAiggeBwAFsBcAighcABgbAAEjpgMLAAWwPwAFsKcABbE0BAKWjAWrAAWwQYAPAAP3kAgAAAQPAAWw3wAFsTQAAAAAAAABgA8AAhdkBSsABbDoBJsABbDoBGMABbEClo8AARelgA8AAhdkGwABI64DCwAFsUsABbGfAAWy1AgClowFq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AQPAAYMSwAGDNwAAAAEBAcABgycAAAC3XGADvlwAAGADwAD60QFKwAGDMgEqAAAing4AIp5UACKevgAinxEAAAADAsAASVaAwsABg3fAAYN9wAGFAgO65wAAAWABwABGvQAAAQTAAElYgMLAAYOowAGDsQm66ABgA8AA+tEAAQXAAEldgMLAAYO1wAGDtcABhJcAAAADwAGDu8ABhJcAAAAEAwPAAYPQAAAAt1xgA75cAMABg+UAAACAlmADwABF5wDAAYQEAAAApaRgA8AAQksAAcABhCMAAAS66GADwAD60QFqwAGELmADwAD60QBgA8AASVYBPgE9F8ABhG4upaSCwAGEgsAin6bAAEXqAggBwABJWIMAwCKftwkAwAGEPsAARsICAAKAwAGERMAin4gxwAGEWmADwABF5wGBwAGEW8Ain5YAAgbAAElagMLAAYSbwAGEp8ABhLwAACMBasABhJxgA8AA/eQCAAABA8ABhK/AAYS8AAAAAAAAAGADwAD+fgFKwAGEtQEnmi4GwABJW4DCwAGEwMABhMzAAYUAAACEUgFqwAGEwWADwAD95AIAAAEDwAGE0sABhQAAAAABAQHAAYTcAAAAh0VdA8AARJABWwAAWwFKwAGE6AEcwAGE8IDAAYTowCKgqIYFAQABLgDAAETVAAAioCwAIqByACKg3AAAAAICwABJXoDCwAGFvMABhcLAAYlTA7rpAAABYAHAAEXnAAABBMAASWCAwsABhfbAAYX9CZZSAGADvTwAAQXAAElqgMLAAYYCwAGGAsABh4MAAAADwAGGCcABh4MAAAADAwPAAYYPAAAEllJgA708AMABhiYAAACClGADvlEAwAGGPgAAAKWkYAPAAEJLAABgA8AASV4BPgZAIRzAAYaMFsABhoQullLAAElgSAEAASsAwAD98cABhoTAAYaTAD0cwAGGphbAAYaaLrTBwABF8rpuAAAAAMAAeIg9HMABhs0WwAGGwS60wcAARfK6bwAAAADAAHiKScABhukWwAGG9RbAAYbtLpZSwABJYKyvvUc+AT0cwAGHFxbAAYcLLrTBwABF8rrqAAAAAMAAeIw/PRzAAYdELrnsAAAAAMAARi49F8ABh1oupaSCwAGHbsAioWnAAEXqAggBwABJYIAAwCKhTQkAwAGGWcAARnUCAAIxwAGGbWADwABF5wCBwAGGccAioVsABwbAAEligMLAAYeHwAGHk8ABh7kAACMBasABh4hgA8AA/eQCAAABA8ABh5vAAYe5AAAAAAAAAGADwAD+fgFKwAGHoQEkwAGHuQInuusWwAGHsxbAAYerLpZSwABJYIC9vRgGwABJY4DCwAGHvcABh8nAAYf+AACEUgFqwAGHvmADwAD95AIAAAEDwAGHz8ABh/4AAAABAQHAAYfZAAAAh0VdA8AARJABWwAAWwFKwAGH5QEcwAGH7YDAAYflwCKjCbkkAQABLgDAAETOBsAASWSAwsABiAPAAYgTwAGISgAAuf8BasABiARgA8AA/eQCAAABA8ABiB7AAYhKAAAAAAAAAGADwAD8lwFKwAGIJAEcwAGIOB3AAYgquf8AAAAAwABGVYPAAQABFsABiEIWwAGIOi6WUsAASWCDxsAA/fcAwAD8sQbAAEllgMLAAYhOwAGIXsABiIgAALn7AWrAAYhPYAPAAP3kAgAAAQPAAYhmwAGIiAAAAAAAAABgA8AA/JcBSsABiGwBasABiHlgA8AA/JfAAH4qBsAASWaAwsABiIzAAYidwAGIwgAAufoBasABiI1gA8AA/eQCAAABA8ABiKfAAYjCAAAAAQEBwAGIqAAACIPbYAPAAEXnAABgA8AA+tEBSsABiLIBJcABiLiAwAGIssAipD9gA8AASV4GwABJZ4DCwAGIxsABiNfAAYkMAAC5/gFqwAGIx2ADwAD95AIAAAEDwAGI4cABiQwAAAABAQHAAYjqAAAIg9tgA8AASV4AAGADwAD60QFKwAGI9AEcwAGI/BbAAYj0LpZSwABJYEgBAAEWwAGJBYDAAYj/wCKkp5ZSwABJYADAAP3xBsAASWiAwsABiRDAAYkhwAGJUQAAuhIBasABiRFgA8AA/eQCAAABA8ABiTbAAYlRAAAAAAAAAGADwAD60QFKwAGJPAEhFsABiUUWwAGJPS6WUsAASWCsr71HAAAionIAIqLTACKjPQAio7YAIqQJACKkcQAipPMAIqVNAAAABwLAAElrgMLAAYlWwAGJXMABkAIDuuwAAAFgAcAARecAAAEEwABJbYDCwAGJ+cABigsYuu0AXQPAAP4vAWADvSoBKwEFwABJfIDCwAGLYcABi2HAAYxkAAAAA8ABi23AAYxkAAAAAgICwAGLewAAAIWPYAPAAEXnAMABi5MAAACClGADvlEAAGADwABJawE+BD0XwAGL0i6lpBbAAYvvgMABi+bAIqXapaTAAEXqwABF6j0cwAGMEhbAAYwGLrTBwABF8rpuAAAAAMAAeIg9HMABjDkWwAGMLS60wcAARfK6bwAAAADAAHiKPRzAAYxVLrnsAAAAAMAARi4BCQDAAYuhwABGdQIAAjHAAYu1YAPAAEXnAYDAAYu2wCKl2oHAAYvBwCKl6gAKBsAASW+AwsABjGnAAYx8wAGMrgAAIwFqwAGMamADwAD95AIAAAEDwAGMhMABjK4AAAAAAAAAYAPAAP5+AUrAAYyKASTAAYyuAie67hbAAYybLrrtwABJbQbAAElwgMLAAYyywAGMvsABjPgAAIRSAWrAAYyzYAPAAP3kAgAAAQPAAYzEwAGM+AAAAAEBAcABjM4AAACHRV0DwABEkAFbAABbAUrAAYzaARzAAYzigMABjNrAIqcouQUBAAEuAMAARK0GwABJdoDCwAGM/MABjQ3AAY0iAQCFjwAAAAEDwAGNFsABjSIAAAAAAAAAYAPAAEXnAUrAAY0ZARzAAY0fFsABjRkuglXAAEXtSwEAAZMAwAD9SgbAAEl3gMLAAY0nwAGNMMABjWYBALrvAAAAAQPAAY1RwAGNZgAAAAAAAABgA8AA+tEBSsABjVQBHMABjWIWwAGNWxbAAY1ULoJVwABF7WHAAP1rSAEAAZUAwAD9uwbAAEl4gMLAAY1qwAGNe8ABjaYBALrwAAAAAQPAAY2awAGNpgAAAAAAAABgA8AARecBSsABjZ0BHMABjaMWwAGNnS6CVcAARe1LAQABlADAAP1KBsAASXqAwsABjarAAY2zwAGOMwIAuvAAAAABA8ABjdHAAY4zAAAAAQEBwAGN3AAAAIYVYAPAAEi8AABcAT4CQCEWwAGN9C6678AASXfAAY3zwAGOFAA9HMABjiIWwAGOGy6CVcAARe1WAQABgMABjibAIqiJAMAA/UwGwABJcYDCwAGOOMABjknAAY54AAC1zAFqwAGOOWADwAD95AIAAAEDwAGOVsABjngAAAABAQHAAY5kAAAApSJgA8AATZwAAGADwAD60QFKwAGOdAEpBsAASXKAwsABjn3AAY6NwAGOvAAAufsBasABjn5gA8AA/eQCAAABA8ABjpXAAY68AAAAAAAAAGADwAD8lwFKwAGOmwFqwAGOqGADwAD8l4FXBsAASXOAwsABjsDAAY7RwAGO+wAAufoBasABjsFgA8AA/eQCAAABA8ABjtvAAY77AAAAAQEBwAGO3AAACIPbYAPAAEXnAABgA8AA+tEBSsABjuYBJcABjuyAwAGO5sAiqbVgA8AASWsGwABJdIDCwAGO/8ABjxDAAZAAAAC5/gFqwAGPAGADwAD95AIAAAEDwAGPGsABkAAAAAABAQHAAY8oAAAIg9tgA8AASWsAAGADwAD60QE+AUrAAY81ASIcwAGPTxbAAY88LrrtwABJbUgBAAEWwAGPWIDAAY9SwCKqHbrtwABJbQDAAP3xASIcwAGPkRbAAY+KFsABj3cuuu3AAEltYcAAzVdIAQABFsABj60WwAGPmoDAAY+UwCKqHbrtwABJbWHAAM1XAMAA/bsAHMABj9YWwAGPwy667cAASW2EBwEAARbAAY/ogMABj+LAIqoduu3AAEltAMAA/kQAACKmmgAipvIAIqdcACKnrwAiqAwAIqhfACKo2QAiqS4AIql/ACKp5wAiquAAAAAKAsAASX2AwsABkXfAAZF9wAGU6QO68QAAAWABwABG5AAAAgTAAEl/gMLAAZHHwAGR1BiFLAFqwAGRrWADwAD95AJdA8AA/TsBYAPAAGLWAATAAEmAgMLAAZHpwAGR+xi67QBdA8AA/i8BYAO9KgABBcAASYaAwsABkgDAAZIAwAGT4gAAAAPAAZITwAGT4gAAAAcHB8ABki8AAAC3XGADvlwAwAGSRgAAAKU0YAPAAEvPAMABkmQAAACFkmADvlEAwAGSiwAAAIJVXQPAAP07AWADwABF5wDAAZKnAAAAuktgA75RAMABkr4AAASFLF0DwAD9OwFgA8AAYtYAwAGS2AAABLrtXQPAAP4vAWADvSoAAGADwABJfQE+A0AlwAGTSRzAAZNFg8ABkz/AIqvRSwEAAZMAwAD9SmADwABIvMABkz/AAZNVAEAcwAGTfRbAAZNtHMABk2mDwAGTY8Aiq9FLAQABkwDAAP1KuenAAEYnSAEAARbAAZOHgMABk4DAIqulhYC+agDAAP3xwAGTY8ABk48AQBzAAZPGFsABk7QWwAGTpoHAAZOdwCKrs7UlwABL1JWYwABpKEgBAAEWwAGT1xbAAZPJLoUswABJf2HAAP1rAMAA/bvAAZOdwAGT3QADCAHAAEl/hQDAIqv2CAHAAEmAhgDAIqwNCQDAAZL0wABG+QYABoHAAZL6wCKrs4LAAZMEwCKrwyuDwAGTGMAiq9EphMABkybAIqvoAAMGwABJgoDCwAGT5sABk/fAAZQsAAC6VQFqwAGT52ADwAD95AIAAAEDwAGUCsABlCwAAAABAQHAAZQYAAAApSJgA8AATZwAAGADwAD60QFKwAGUKAEpBsAASYOAwsABlDHAAZREwAGUlgAAIwFqwAGUMmADwAD95AIAAAEDwAGUTMABlJYAAAAAAAAAYAPAAP5+AUrAAZRYASTAAZSWBCe68hbAAZR5LqU0wABG5ye6VBbAAZSJLoWSwABG7QbAAEmEgMLAAZSawAGUpsABlOcAAIRSAWrAAZSbYAPAAP3kAgAAAQPAAZSswAGU5wAAAAEBAcABlLYAAACHRV0DwABEkAFbAABbAUrAAZTCARzAAZTKgMABlMLAIq4zuRsBAAEuAMAARMQAACKtQQAirZYAIq39ACKuZwAAAAMCwABJh4DCwAGVN8ABlT3AAZg1A7rzAAABYAHAAEXnAAABBMAASYmAwsABlXTAAZV7CZZSAGADvU4AAQXAAEmRgMLAAZWAwAGVgMABlusAAAADwAGVi8ABlusAAAADAwPAAZWYAAAEllJgA71OAMABla8AAACClGADvlEAwAGVxwAAAKWkYAPAAEJLAABgA8AASYcBPgM9HMABlnsWwAGWby60wcAARfK3+gAAAADAAHiHPRzAAZagFsABlpQutMHAAEXyt/sAAAAAwAB4iT0XwAGWwi6lpILAAZbWwCKu+MAAReoCCAHAAEmJgADAIq7cCQDAAZXiwABGdQIAAjHAAZX2YAPAAEXnAIHAAZX6wCKu6gAFBsAASYuAwsABlvDAAZb8wAGXJwAAIwFqwAGW8WADwAD95AIAAAEDwAGXBMABlycAAAAAAAAAYAPAAP5+AUrAAZcKASTAAZcnAie69BbAAZchFsABlxkullLAAEmJgL29GAbAAEmMgMLAAZcrwAGXN8ABl3AAAIRSAWrAAZcsYAPAAP3kAgAAAQPAAZc9wAGXcAAAAAEBAcABl0cAAACHRV0DwABEkAFbAABbAUrAAZdTARzAAZdbgMABl1PAIrAouREBAAEuAMAARLkGwABJjYDCwAGXdcABl4XAAZeVAAC5+wFqwAGXdmADwAD95AIAAAEDwAGXjcABl5UAAAAAAAAAYAPAAPyXAUrAAZeTATceBsAASY6AwsABl8HAAZfSwAGX8gAAuhIBasABl8JgA8AA/eQCAAABA8ABl+fAAZfyAAAAAAAAAGADwAD60QFKwAGX7QEqBsAASY+AwsABl/bAAZgHwAGYMwAAufEBasABl/dgA8AA/eQCAAABA8ABmA/AAZgzAAAAAQEBwAGYJAAAALdcYAO+XAAAYAPAAPrRAUrAAZgvASkAACKvkQAir/IAIrBcACKwogAisOcAIrE6AAAABQLAAEmSgMLAAZg4wAGYPsABmzoDuvUAAAFgAcAARecAAAEEwABJlIDCwAGYccABmHgYllIAYAO9PAABBcAASZ+AwsABmHzAAZh8wAGZfQAAAAPAAZiIwAGZfQAAAAMDA8ABmJ0AAAC3XGADvlwAwAGYqgAABJZSYAO9PADAAZjAAAAAgJZgA8AARecAAGADwABJkgE+Az0cwAGZEBbAAZkELrTBwABF8rpuAAAAAMAAeIg9HMABmTcWwAGZKy60wcAARfK6bwAAAADAAHiKPRzAAZlfFsABmVMutMHAAEXyuvYAAAAAwAB4jgIIAcAASZSBAMAiscUJAMABmM/AAEZ1AgACMcABmONgA8AARecBgsABmOTAIrHTFsABmPOAwAGY7MAisbe1q75zAAcGwABJloDCwAGZgcABmY3AAZm5AAAjAWrAAZmCYAPAAP3kAgAAAQPAAZmVwAGZuQAAAAAAAABgA8AA/n4BSsABmZsBJMABmbkCJ7r3FsABmbMWwAGZqy6WUsAASZSAvb0YBsAASZeAwsABmb3AAZnJwAGaAwAAhFIBasABmb5gA8AA/eQCAAABA8ABmc/AAZoDAAAAAQEBwAGZ2QAAAIdFXQPAAESQAVsAAFsBSsABmeUBHMABme2AwAGZ5cAisxu5JQEAAS4AwABEzwbAAEmdgMLAAZoIwAGaGcABmi8BAICWAAAAAQPAAZofwAGaLwAAAAAAAABgA8AARecBSsABmiIBFsABmikWwAGaIi6CVcAARe2Aw8AA/SEGwABJmIDCwAGaNMABmkTAAZp0AAC5+wFqwAGaNWADwAD95AIAAAEDwAGaTMABmnQAAAAAAAAAYAPAAPyXAUrAAZpSAWrAAZpfYAPAAPyXwAB9lwbAAEmZgMLAAZp4wAGaicABmrMAALn6AWrAAZp5YAPAAP3kAgAAAQPAAZqTwAGaswAAAAEBAcABmpQAAAiD22ADwABF5wAAYAPAAPrRAUrAAZqeASXAAZqkgMABmp7AIrQnYAPAAEmSBsAASZqAwsABmrfAAZrIwAGbAgAAuf4BasABmrhgA8AA/eQCAAABA8ABmtLAAZsCAAAAAQEBwAGa4AAACIPbYAPAAEmSAABgA8AA+tEBSsABmuoBHMABmvIWwAGa6i6WUsAASZRIAQABFsABmvuAwAGa9cAitI+WUsAASZQAwAD98QbAAEmbgMLAAZsGwAGbF8ABmzgAALoTAWrAAZsHYAPAAP3kAgAAAQPAAZskwAGbOAAAAAAAAABgA8AA+tEBSsABmyoBFsABmzEWwAGbKi65hMAARe6BVcAA/R0AACKyhAAisuUAIrNPACKzngAis/EAIrRZACK02wAitTYAAAAHAsAASaCAwsABmz3AAZtDwAGcfgO6+AAAAWABwABF5wAAAAEFwABJpoDCwAGbacABm2nAAZvAAAAAA8ABm3XAAZvAAAAAAgICwAGbiQAAAIJVXQPAAP07AWADwABF5wDAAZufAAAAgpRgA75RAABgA8AASaABPwEJAMABm63AAEZ1AgACgMABm7PAIrWjgcABm7vAIrW6AAMGwABJooDCwAGbxMABm9DAAZvsAAAjAWrAAZvFYAPAAP3kAgAAAQPAAZvYwAGb7AAAAAAAAABgA8AA/n4BSsABm94BJ7r5BsAASaOAwsABm/DAAZv8wAGcNgAAhFIBasABm/FgA8AA/eQCAAABA8ABnALAAZw2AAAAAQEBwAGcDAAAAIdFXQPAAESQAVsAAFsBSsABnBgBHMABnCCAwAGcGMAitm+5FAEAAS4AwABEvAbAAEmkgMLAAZw7wAGcTMABnHwAALnyAWrAAZw8YAPAAP3kAgAAAQPAAZxYwAGcfAAAAAEBAcABnG0AAAC3XGADvlwAAGADwAD60QFKwAGceAEpAAAitfMAIrY5ACK2owAitvYAAAADAsAASaeAwsABnQbAAZ0MwAGhjQO6+gAAAWABwABF5wAAAQTAAEmpgMLAAZ1HwAGdTwmlNAFqwAGdLWADwAD95AJgA8AAS88AAQXAAEm4gMLAAZ1TwAGdU8ABnnEAAAADwAGdWcABnnEAAAAEBATAAZ1nAAAAhY9gA8AARecAwAGdfgAAACdgA8AARecAwAGdigAABKU0YAPAAEvPAMABnagAAACClGADvlEAAGADwABJpwE+BD0cwAGd9RbAAZ3pLrTBwABF8rpuAAAAAMAAeIg9HMABnhwWwAGeEC60wcAARfK6bwAAAADAAHiKPRzAAZ5EFsABnjgutMHAAEXyuvsAAAAAwAB4kj0cwAGeYi657AAAAADAAEYuAggBwABJqYIAwCK3mAkAwAGdtsAARnUCAAIxwAGdymADwABF5wKAwAGdy8Ait3mBwAGd1cAit4mDwAGd3cAit6gACwbAAEmrgMLAAZ52wAGeicABnqcAACMBasABnndgA8AA/eQCAAABA8ABnpHAAZ6nAAAAAAAAAGADwAD+fgFKwAGelwEnuvwGwABJrIDCwAGeq8ABnrfAAZ7rAACEUgFqwAGerGADwAD95AIAAAEDwAGevcABnusAAAABAQHAAZ7HAAAAh0VdA8AARJABWwAAWwFKwAGe0wEcwAGe24DAAZ7TwCK45LkDAQABLgDAAESrBsAASbSAwsABnvDAAZ8BwAGfFgEAhY8AAAABA8ABnwrAAZ8WAAAAAAAAAGADwABF5wFKwAGfDQEcwAGfExbAAZ8NLoJVwABF7UsBAAGTAMAA/UoGwABJtYDCwAGfGsABnyvAAZ89AQAnAAAAAQPAAZ8xwAGfPQAAAAAAAABgA8AARecBSsABnzQBHMABnzoWwAGfNC6CVcAARe1LAQABlADAAP1KBsAASbaAwsABn8DAAZ/VwAGf5wEAue0BasABn8FgA8AA/eQCAAABA8ABn9/AAZ/nAAAAAAAAAGADwAD60QFKwAGf4gEqBsAASa2AwsABn+zAAaAFwAGgOgAAufYBasABn+1gA8AA/eQCAAABA8ABoBTAAaA6AAAAAQEBwAGgIgAAAKUiYAPAAE2cAABgA8AARecBSsABoDIBFsABoDIuhY/AAEm0BsAASa6AwsABoD7AAaBPwAGgZgAAufcBasABoD9gA8AA/eQCAAABA8ABoFzAAaBmAAAAAAAAAGADwAD60QFKwAGgYgEpBsAASa+AwsABoGrAAaB7wAGg0gAAufEBasABoGtgA8AA/eQCAAABA8ABoIPAAaDSAAAAAQEBwAGgmAAAALdcYAO+XAAAYAPAAPrRAUrAAaCpARbAAaDBHMABoLIWwAGgqS6Fj8AASbSoQgEAAYDAAaC5wCK63QDAAEY1sxq+QAbAAEmwgMLAAaDXwAGg58ABoRAAALn7AWrAAaDYYAPAAP3kAgAAAQPAAaDvwAGhEAAAAAAAAABgA8AA/JcBSsABoPUBasABoQJgA8AA/JfAAGqTBsAASbGAwsABoRTAAaElwAGhVgAAufoBasABoRVgA8AA/eQCAAABA8ABoS/AAaFWAAAAAQEBwAGhPQAACIPbYAPAAEXnAABgA8AA+tEBSsABoUcBJcABoU2AwAGhR8Aiu69gA8AASacGwABJsoDCwAGhWsABoWvAAaGLAAC5/gFqwAGhW2ADwAD95AIAAAEDwAGhdcABoYsAAAABAQHAAaF9AAAIg9tgA8AASacAAGADwAD60QFKwAGhhwEpAAAiuGgAIriuACK5GAAiuWsAIrm9ACK6AgAiumIAIrqnACK7JgAiu3kAIrvhACK8NgAAAAsCwABJuYDCwAGiF8ABoh3AAaY7A7r9AAABYAHAAEXnAAABBMAASbuAwsABol7AAaJmCaU0AWrAAaJEYAPAAP3kAmADwABLzwABBcAASciAwsABomrAAaJqwAGjpQAAAAPAAaJ2wAGjpQAAAAUFBcABoosAAAC3XGADvlwAwAGioAAAAIWPYAPAAEXnAMABor0AAAAnYAPAAEXnAMABotEAAACAlmADwABF5wDAAaLdAAAEpTRgA8AAS88AAGADwABJuQE+Az0cwAGjQRbAAaM1LrTBwABF8rpuAAAAAMAAeIg9HMABo2gWwAGjXC60wcAARfK6bwAAAADAAHiKPRzAAaOQFsABo4QutMHAAEXyuv4AAAAAwAB4lAIIAcAASbuEAMAivRYJAMABou/AAEZ1AgACMcABowNgA8AARecDgcABowTAIrzngsABow7AIrz3g8ABoxXAIr0GFsABoySAwAGjHcAivNm1q75zAAkGwABJvYDCwAGjqcABo7zAAaPhAAAjAWrAAaOqYAPAAP3kAgAAAQPAAaPEwAGj4QAAAAAAAABgA8AA/n4BSsABo8oBJ7r/BsAASb6AwsABo+XAAaPxwAGkKwAAhFIBasABo+ZgA8AA/eQCAAABA8ABo/fAAaQrAAAAAQEBwAGkAQAAAIdFXQPAAESQAVsAAFsBSsABpA0BHMABpBWAwAGkDcAivlW5BAEAAS4AwABErAbAAEnDgMLAAaQwwAGkQcABpFYBAIWPAAAAAQPAAaRKwAGkVgAAAAAAAABgA8AARecBSsABpE0BHMABpFMWwAGkTS6CVcAARe1LAQABkwDAAP1KBsAAScSAwsABpFrAAaRrwAGkfQEAJwAAAAEDwAGkccABpH0AAAAAAAAAYAPAAEXnAUrAAaR0ARzAAaR6FsABpHQuglXAAEXtSwEAAZQAwAD9SgbAAEnFgMLAAaSBwAGkksABpKQBAICWAAAAAQPAAaSYwAGkpAAAAAAAAABgA8AARecBSsABpJsBHMABpKEWwAGkmy6CVcAARe1LAQABlQDAAP1KBsAAScaAwsABpSfAAaU8wAGlTgEAue0BasABpShgA8AA/eQCAAABA8ABpUbAAaVOAAAAAAAAAGADwAD60QFKwAGlSQEqBsAASb+AwsABpVPAAaVswAGloQAAufYBasABpVRgA8AA/eQCAAABA8ABpXvAAaWhAAAAAQEBwAGliQAAAKUiYAPAAE2cAABgA8AARecBSsABpZkBFsABpZkuhY/AAEnDBsAAScCAwsABpaXAAaW2wAGlzQAAufcBasABpaZgA8AA/eQCAAABA8ABpcPAAaXNAAAAAAAAAGADwAD60QFKwAGlyQEpBsAAScGAwsABpdHAAaXiwAGmOQAAufEBasABpdJgA8AA/eQCAAABA8ABperAAaY5AAAAAQEBwAGl/wAAALdcYAO+XAAAYAPAAPrRAUrAAaYQARbAAaYoHMABphkWwAGmEC6Fj8AAScOoQgEAAYDAAaYgwCLAoQDAAEY1sxq+QAAAIr3ZACK+HwAivokAIr7cACK/LgAiv4EAIr/GACLAJgAiwGsAIsDqAAAACQLAAEnJgMLAAaZ9wAGmg8ABs58DuwAAAAFgAcAARecAAAYEwABJy4DCwAGm6cABpvYGuwEAYAPAAPyXAWrAAab1YAPAAPyXCQTAAEnMgMLAAaddwAGnbwa7AgBgA8AA/JcBasABp25gA8AA/JcVBMAASc2AwsABp73AAafPBrsDAGADwAD8lwFqwAGnzmADwAD8lyEEwABJzoDCwAGn48ABp/EJuwQAYAPAAGLWAATAAEnPgMLAAaf/wAGoAwmCawBgA8AA/JcABMAASdCAwsABqBLAAagfCbsFAGADwAD60QAFBcAASeGAwsABqCTAAagkwAGpBAC7BgADwAGoLsABqQQAAAAEBATAAag4AAAAuwRgA8AAYtYAwAGoVQAAAIJvYAPAAEXnAMABqHUAAACClGADvlEAwAGojQAAAKWkYAPAAEJLAABgA8AASckBPwEKAMABqK3AAEnlBQAFgMABqMPAIsIgMcABqNNgA8AARecBgcABqNTAIsIwasABqOFgA8AA/JcJgsABqOzAIsJAg8ABqPLAIsJOAAXAAEnigMLAAalKwAGpSsABqk8AuwcAA8ABqVjAAapPAAAABAQEwAGpYgAAALsEYAPAAGLWAMABqX8AAACCb2ADwABF5wDAAamfAAAAgpRgA75RAMABqbcAAAClpGADwABCSwAAYAPAAEnJAT8BCgDAAanXwABJ5QYABYDAAantwCLC2DHAAan9YAPAAEXnAYHAAan+wCLC6GrAAaoLYAPAAPyXCYLAAaoWwCLC+IPAAaocwCLDBgG7BSkFwABJ44DCwAGs7cABrO3AAa4FALsIAAPAAaz5wAGuBQAAAAUFBcABrQoAAAC7BGADwABi1gDAAa0tAAAAgm9gA8AARecAwAGtTAAAACBgA8AARecAwAGtZgAAAIKUYAO+UQDAAa2EAAAApaRgA8AAQksAAGADwABJyQE/AQoAwAGtpMAASeUFAAWAwAGtrcAiw5MxwAGtvWADwABF5wKBwAGtvsAiw6OCwAGtysAiw7NqwAGt0WADwAD8lxWDwAGt4cAiw8KEwAGt88Aiw9AABcAASeSAwsABrgrAAa4KwAGvIgCCcAADwAGuFsABryIAAAAFBQXAAa4nAAAAuwRgA8AAYtYAwAGuSgAAAIJvYAPAAEXnAMABrmkAAAAgYAPAAEXnAMABroMAAACClGADvlEAwAGuoQAAAKWkYAPAAEJLAABgA8AASckBPwEKAMABrsHAAEnlBQAFgMABrsrAIsRjMcABrtpgA8AARecCgcABrtvAIsRzgsABrufAIsSDasABru5gA8AA/Jchg8ABrv7AIsSShMABrxDAIsSgAAXAAEnlgMLAAa8nwAGvJ8ABsHAAlX8AA8ABrzPAAbBwAAAABgUFwAGvOQAABLsEYAPAAGLWAMABr1wAAACCVV0DwAD9OwFgA8AARecAwAGvaQAABIJrYAPAAPyXAMABr4MAAACClGADvlEAwAGvmwAAAKWkYAPAAEJLAAHAAa+/AAAEuwVgA8AA+tEBasABr85gA8AA+tEAYAPAAEnJAT4DQCIcwAGwBBbAAa//LoJrwABJz4FtAQABasABsAdgA8AA/JcJAMAA/cgAHMABsBkWwAGwFC6Ca8AASc+BawEAAWrAAbAcYAPAAPyXIQDAAP3GwAGv/8ABsCoAPRzAAbAxLrnsAAAAAMAARi49F8ABsEcupaSEwAGwW8AixXjAAEXqBAgBwABJzoAAwCLFMwgBwABJz4IAwCLFWggBwABJ0IUAwCLFiQkAwAGv3sAARnUCAAKBwAGv5MAixUODwAGv7MAixWoADAbAAEnSgMLAAapUwAGqXMABrOgEAZ/jAAAAAQPAAapjwAGs6AAAAAUFBcABqnQAAAC7BGADwABi1gDAAaqXAAAAgm9gA8AARecAwAGqtgAAALsJYAPAAElrAMABqtcAAACClGADvlEAwAGq9QAAAKWkYAPAAEJLAABgA8AASckBPgJAIhbAAawGgMABq/fAIsafuhXAAGLfARbAAawngMABrBjAIsafs9PAAGLdwAGr9sABrDcBJMABrG8CJ7sKgMABrGDAIsafSsABrHYBH8ABrIHAAEnlBQAFgMABrI7AIsafMcABrJ5gA8AARecCgcABrJ/AIsavgsABrKvAIsa/asABrMFgA8AA/JcJg8ABrMzAIsbPhMABrNLAIsbdAAbAAEnUgMLAAbB1wAGwhsABsJ0BAIJvAAAAAQPAAbCRwAGwnQAAAAAAAABgA8AARecBSsABsJQBHMABsJoWwAGwlC6CVcAARe1LAQABkwDAAP1KBsAASdWAwsABsKLAAbCzwAGxEwEAuwkAAAABA8ABsL/AAbETAAAAAAAAAGADwABF5wE+AkAcwAGw0RbAAbDMLoJrwABJz0gBAAFqwAGw1GADwAD8lwkAwAD9u8ABsMzAAbDdAErAAbDkASMcwAGw+RbAAbDyFsABsOsuglXAAEXtYcAA/WuAlwEAAZQAwAD9xxzAAbEFFsABsP8uglXAAEXtSwEAAZQAwAD9SisBYAPAAEXnBsAASdaAwsABsRjAAbEpwAGxiwEAuwsAAAABA8ABsTPAAbGLAAAAAAAAAGADwABF5wE+AkAiHMABsUUWwAGxQC6Ca8AASc9IAQABasABsUhgA8AA/JchAMAA/bsBHMABsV8WwAGxWi6Ca8AASc9IAQABasABsWJgA8AA/JcVAMAA/bvAAbFAwAGxcABKwAGxdwEcwAGxhBbAAbF+LoJVwABF7UsBAAGUAMAA/UoGwABJ14DCwAGxkMABsZnAAbG4AQC7DAAAAAEDwAGxpMABsbgAAAAAAAAAYAPAAPrRAUrAAbGnARzAAbGsFsABsacugmvAAEnPSAEAAWrAAbGvYAPAAPyXCQDAAP27BsAASdiAwsABsbzAAbHFwAGx7gEAuw0AAAABA8ABsdXAAbHuAAAAAAAAAGADwAD60QFKwAGx2AEcwAGx3RbAAbHYLoJrwABJz0gBAAFqwAGx4GADwAD8lyEAwAD9uwbAAEnZgMLAAbHywAGx+8ABsiQBALsOAAAAAQPAAbILwAGyJAAAAAAAAABgA8AA+tEBSsABsg4BHMABshMWwAGyDi6Ca8AASc9IAQABasABshZgA8AA/JcVAMAA/bsGwABJ24DCwAGyKcABsjXAAbJmAACEUgFqwAGyKmADwAD95AIAAAEDwAGyO8ABsmYAAAABAQHAAbJFAAAAh0VdA8AARJABWwAAWwFKwAGyUQEcwAGyWYDAAbJRwCLKmbkOAQABLgDAAES2BsAASdyAwsABsmvAAbJ3wAGypQAAIwFqwAGybGADwAD95AIAAAEDwAGyf8ABsqUAAAAAAAAAYAPAAP5+AUrAAbKFASTAAbKlAxbAAbKHLoJvwABJ1Ce7DxbAAbKWLrsEwABJzgbAAEndgMLAAbKqwAGyusABsuAAALn7AWrAAbKrYAPAAP3kAgAAAQPAAbLCwAGy4AAAAAAAAABgA8AA/JcBSsABssgBasABstVgA8AA/JfAAGogBsAASd6AwsABsuXAAbL2wAGzJAAAufoBasABsuZgA8AA/eQCAAABA8ABswDAAbMkAAAAAQEBwAGzDgAACIPbYAPAAEXnAABgA8AA+tEBSsABsxgBJcABsx6AwAGzGMAiy7pgA8AASckGwABJ34DCwAGzKcABszrAAbOdAAC5/gFqwAGzKmADwAD95AIAAAEDwAGzRMABs50AAAABAQHAAbNJAAAIg9tgA8AASckAAGADwAD60QE+AUrAAbNWASIcwAGzbBbAAbNdLrsEwABJzkgBAAEWwAGzdYDAAbNvwCLMIrsEwABJzgDAAP3xABzAAbOMFsABs4cugmvAAEnPSAEAARbAAbOVgMABs4/AIswigmvAAEnPAMAA/bsAACLGdQAix5UAIsfoACLInAAiyUkAIsmnACLKBQAiymMAIsrNACLLMQAiy4QAIsvsACLMoAAAAAwCwABJ5oDCwAG0YcABtGfAAbcVA7sQAAABYAHAAEaVAAABBMAASeiAwsABtKXAAbSzCbsEAGADwABi1gABBcAASfKAwsABtLfAAbS3wAG1WQAAAAPAAbTIwAG1WQAAAAMDA8ABtNUAAAS7BGADwABi1gDAAbTyAAAAuwlgA8AARecAwAG1DQAAAIKUYAO+UQAAYAPAAEnmAT4BPRzAAbVKLrnsAAAAAMAARi4CCAHAAEnogADAIs07CQDAAbUbwABGlwIAAjHAAbUvYAPAAEXnAYHAAbUwwCLNS4LAAbU+wCLNWwAGBsAASeqAwsABtV7AAbVvwAG1hwEAuwkAAAABA8ABtXvAAbWHAAAAAAAAAGADwABF5wFKwAG1fgEcwAG1hBbAAbV+LoJVwABF7UsBAAGTAMAA/UoGwABJ7IDCwAG1jMABtZjAAbXXAACEUgFqwAG1jWADwAD95AIAAAEDwAG1nsABtdcAAAABAQHAAbWoAAAAh0VdA8AARJABWwAAWwFKwAG1tAEcwAG1vIDAAbW0wCLOR7kPAQABLgDAAES3BsAASe2AwsABtdvAAbXnwAG2FgAAIwFqwAG13GADwAD95AIAAAEDwAG178ABthYAAAAAAAAAYAPAAP5+AUrAAbX1ASTAAbYWAxbAAbX3LrsJwABJ6ie7DxbAAbYHLrsEwABJ6AbAAEnugMLAAbYawAG2KsABtmAAALn7AWrAAbYbYAPAAP3kAgAAAQPAAbYywAG2YAAAAAAAAABgA8AA/JcBSsABtjgBasABtkVgA8AA/JfAAGH2BsAASe+AwsABtmTAAbZ1wAG2sQAAufoBasABtmVgA8AA/eQCAAABA8ABtn/AAbaxAAAAAQEBwAG2jQAACIPbYAPAAEXnAABgA8AA+tEBSsABtpcBJcABtp2AwAG2l8Aiz2hgA8AASeYGwABJ8IDCwAG2tcABtsbAAbcTAAC5/gFqwAG2tmADwAD95AIAAAEDwAG20MABtxMAAAABAQHAAbbVAAAIg9tgA8AASckAAGADwAD60QE+AUrAAbbiARzAAbb4FsABtukuuwTAAEnoSAEAARbAAbcBgMABtvvAIs/QuwTAAEnOAMAA/fEAACLNvgAizhEAIs57ACLO3wAizzIAIs+aACLQHgAAAAYCwABJ84DCwAG4ncABuKPAAbm/A7sRAAABYAHAAEaVAAAAAQXAAEn6gMLAAbjLwAG4y8ABuRQAAAADwAG41cABuRQAAAABAQHAAbjjAAAAgklgA8AARecAAGADwABJ8wE/AQkAwAG47cAARpcCAAIxwAG482ADwABF5wGAwAG49MAi0IcWwAG5BIDAAbj9wCLQh7npwABGJwADBsAASfWAwsABuRnAAbkqwAG5QQEAgkkAAAABA8ABuTHAAblBAAAAAAAAAGADwABF5wFKwAG5NAEWwAG5OxbAAbk0LoJVwABF7YDDwAD9IQbAAEn3gMLAAblGwAG5UsABuYoAAIRSAWrAAblHYAPAAP3kAgAAAQPAAblYwAG5igAAAAEBAcABuWIAAACHRV0DwABEkAFbAABbAUrAAbluARzAAbl2gMABuW7AItFeuRABAAEuAMAARLgGwABJ+IDCwAG5jsABuZrAAbm9AAAjAWrAAbmPYAPAAP3kAgAAAQPAAbmiwAG5vQAAAAAAAABgA8AA/n4BSsABuagBJMABub0DJ7sSFsABubUugknAAEn1J4MmAAAi0NkAItEoACLRkgAi0e0AAAADAsAASfuAwsABug3AAboTwAHIqAO7EwAAAWABwABGmAAABgTAAEn9gMLAAbpfwAG6bQa7FABgA8AA/JcBasABumxgA8AA/JcJBMAASf6AwsABuoLAAbqQBrsVAGADwAD8lwFqwAG6j2ADwAD8lxUEwABJ/4DCwAG6pMABurIJuwQAYAPAAGLWAATAAEoAgMLAAbrAwAG6xAmCawBgA8AA/JcABMAASgGAwsAButfAAbriGK5LAGADvlEABMAASgKAwsABux3AAbsmGLsWAGADvlEBKwIFwABKFYDCwAG7ZcABu2XAAbzSAAAAA8ABu3TAAbzSAAAABQUFwAG7egAABLsEYAPAAGLWAMABu48AAASCa2ADwAD8lwDAAbujAAAAgpRgA75RAMABu7wAAACBe2ADwABF5wDAAbvVAAAApaRgA8AAQksAAGADwABJ+wE+A0AiHMABvEsWwAG8PC67BMAASf9IAQABKwDAAP3xASEWwAG8ZhbAAbxXLrsEwABJ/7sXwABi3sABvDzAAbxvAD0XwAG8ey6loxbAAbyR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hAAEwABK7YDCwAIAzMACANUJu10AYAPAAEqEAAEFwABK9IDCwAIA2cACANnAAgEcAAAAA8ACAOzAAgEcAAAAAwMDwAIA8gAABIXKYAPAAEqJAMACAQIAAAS7XGADwABKhADAAgESAAAEu11gA8AASoQAAGADwABK6QE/BAgBwABK64AAwCMTKggBwABK7IEAwCMTOggBwABK7YIAwCMTSgkBwAIA2cAA/foAAAAAAwbAAErvgMLAAgEhwAIBPcACAVUBAGoBasACASJgA8AA/eQCAAABA8ACAUPAAgFVAAAAAAAAAGADwABFsAFKwAIBRgEWwAIBUBbAAgFGLoXKwABK62rAAEp+BsAASvCAwsACAVnAAgF1wAIBrQEAgpABasACAVpgA8AA/eQCAAABA8ACAXnAAgGtAAAAAAAAAGADwABFsAFKwAIBfAEjHMACAYYWwAIBfC67XcAASu1IAQABKwDAAP3xFsACAZoWwAIBkC67XMAASuyCkMAASn8WwAIBqhbAAgGgLrtdwABK7YKQwABKfwFgA8AARbAGwABK8oDCwAIBssACAcPAAgISAACEUgFqwAIBs2ADwAD95AIAAAEDwAIBycACAhIAAAABAQHAAgHnAAAAh0VgA8AASpAAAGADwAD60QFKwAIB+QEcwAICAYDAAgH5wCMUu7tEAQABLgDAAEqUAAAjE5cAIxPwACMUhQAjFPIAAAADAsAASvWAwsACAhfAAgIdwAIEQAO7XgAAAWABwAD95AABYAHAAEqJAwTAAEr3gMLAAgJlwAICagmuLABgA8AA+tEABMAASviAwsACAovAAgKPCYXFAGADwABKiQAEwABK+YDCwAICsMACArUJhccAYAPAAEqJAAEFwABLAYDCwAICucACArnAAgLyAAAAA8ACAs/AAgLyAAAAAwMDwAIC1QAABK4sYAPAAPrRAMACAuEAAASFxWADwABKiQDAAgLsAAAEhcdgA8AASokAAGADwABK9QE/BAgBwABK94AAwCMVowgBwABK+IEAwCMVswgBwABK+YIAwCMVwwkBwAICucAA/foAAAAABAbAAEr7gMLAAgL3wAIDE8ACAyYBAGoBasACAvhgA8AA/eQCAAABA8ACAxnAAgMmAAAAAAAAAGADwABFsAFKwAIDHAEWwAIDIRbAAgMcLoXFwABK+GrAAEp+BsAA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wAIKQwAAAAICAsACCcwAAACFj2ADwABF5wDAAgnkAAAAuelgA75RAABgA8AASx0BPgE9HMACCjQuuewAAAAAwABGLgEJAMACCf3AAEZ1AgACMcACChFgA8AARecBgMACChLAIx1+gcACCh3AIx2OAAUGwABLH4DCwAIKSMACClTAAgqSAACEUgFqwAIKSWADwAD95AIAAAEDwAIKWsACCpIAAAABAQHAAgpkAAAAh0VdA8AARJABWwAAWwFKwAIKcAEcwAIKeIDAAgpwwCMeG7kwAQABLgDAAETeBsAASyCAwsACCpfAAgqowAIK1QAAufEBasACCphgA8AA/eQCAAABA8ACCrDAAgrVAAAAAQEBwAIKxQAAALdcYAO+XAAAYAPAAPrRAUrAAgrQASoGwABLIYDCwAIK2sACCurAAgsgAAC5+wFqwAIK22ADwAD95AIAAAEDwAIK8sACCyAAAAAAAAAAYAPAAPyXAUrAAgr4AWrAAgsFYAPAAPyXwABf6QbAAEsigMLAAgskwAILNcACC3AAALn6AWrAAgslYAPAAP3kAgAAAQPAAgs/wAILcAAAAAEBAcACC00AAAiD22ADwABF5wAAYAPAAPrRAUrAAgtXASXAAgtdgMACC1fAIx8rYAPAAEsdBsAASyOAwsACC3XAAguGwAILvgAAuf4BasACC3ZgA8AA/eQCAAABA8ACC5DAAgu+AAAAAQEBwAILogAACIPbYAPAAEsdAABgA8AA+tEBPgFKwAILrwEpAAAjHeUAIx5PACMeogAjHvUAIx9dACMftAAAAAUCwABLJoDCwAIMo8ACDKnAAhGSA7tjAAABYAHAAEXnAAACBMAASyiAwsACDRPAAg0bCYJwAGADwABjKQAEwABLKYDCwAINKsACDTcJulEAYAPAAPrRAAIFwABLNYDCwAINPMACDTzAAg48ALtkAAPAAg1dwAIOPAAAAAQEBMACDWMAAASCcGADwABjKQDAAg16AAAAuwlgA8AARecAwAINmgAAAIWPYAPAAEXnAMACDbIAAAC56WADvlEAAGADwABLJgE+AT0cwAIOLS657AAAAADAAEYuAwgBwABLKIAAwCMgTggAwABLKSkJAMACDenAAEZ1AgACMcACDf1gA8AARecCgcACDf7AIyBegsACDgvAIyBug8ACDhbAIyB+AAXAAEs2gMLA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22ADwABLYgAAYAPAAPrRAT4BSsACJxYBHMACJykWwAInHS6F7cAAS2ZIAQABFsACJzKAwAInLMAjMoSF7cAAS2YAwAD98QbAAEtwgMLAAidGwAInS8ACKJwAALsdAAAAAQPAAidWwAIonAAAAAEBAcACJ2QAAAClImADwABNnAAAYAPAAPrRAT4EScACJ3chFsACJ4gWwAInfC6uS8AAS2S1nr5XSsACJ5MBKj9OwAInucACJ80AALEqYAO+XAEWwAIn24DAAifPwCMy/LEqwABNpU7AAigCwAIoDAAAuxZgA75RARbAAigbFsACKA4uuanAAEtpuenAAEYnSsACKDABFsACKIgcwAIoVIHAAig3wCMzOrX+AgACgsACKFnAIzNgFsACKHAWwAIoZC6uS8AAS2S1nb5WAL7HtK2+PwbAAEtxgMLAAiihwAIotMACKR4AACMBasACKKJgA8AA/eQCAAABA8ACKLzAAikeAAAAAAAAAGADwAD+fgE+Ak7AAijMwAIo0gAAgcdgA8AA/n4BIxbAAijULoXtwABLZie7eCe7eQFgA8AA/n5KwAIpAQEkwAIpGgMnu3qAwAIpE8AjNAsngyYAACMwNAAjMIcAIzDmACMxKwAjMZUAIzHmACMyTgAjMtIAIzPLACM0UwAAAAkCwABLdIDCwAIphsACKYzAAi6lA7t7AAABYAHAAEaYAAAEBMAAS3aAwsACKb3AAinFCbttAGADwABi1gAEwABLd4DCwAIp6sACKfUJrksAYAO+VAAEwABLeIDCwAIqBMACKg8Jhe0AYAPAAPrRAATAAEt5gMLAAiomwAIqLAmWcwBgA708AAEFwABLhYDCwAIqMcACKjHAAirzAAAAA8ACKj/AAirzAAAABgYGwAIqTQAAAIMjYAPAAEXnAMACKlsAAAS7bWADwABi1gDAAipqAAAErktgA75UAMACKoIAAASF7WADwAD60QDAAiqUAAAElnNgA708AMACKqoAAACClGADvlEAAGADwABLdAE/BggBwABLdoEAwCM1PAgBwABLd4IAwCM1TAgBwABLeIMAwCM1WggBwABLeYQAwCM1agwAQCEcwAIqy4PAAiq/wCM1WkgBAAErAMAA/fHAAiq/wAIq0gAJAMACKt3AAEagAgACMcACKuNgA8AARecBgMACKuTAIzUshcACKu7AIzV4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wABENhbAAERBgMAARDrAI5QahQ29QT4KTsAARGTAAERvAACncWADwAD+fgEWwABEeIDAAERxwCOUGoC9vRhOwABEksAARJYAAJn6YAO9KgEWwABEn4DAAESYwCOUGoUKvUpOwABEvMAARMUAAIZdYAPAAPrRARzAAETYFsAARMcuuG7AAEwIwABMQbNsAQABhsAARObAI5U7AMAAar89i8AARPTAI5RmHsAARQDAAG8SAgABgMAARQzAI5QaAbwMhMAARSXAI5TAScAART8iFsAARUqAwABFQ8AjlBqHjr1DACGHwABFVsAjlV8+AT0cwABFc4HAAEVswCOUKIClAQABHMAARYCDwABFesAjlGaqtQAAAADAAG8oAMAAaKY/ScAARZslwABFpoDAAEWfwCOUGmADwAB2CD4BPRzAAEaMgcAARoXAI5QogKUBAAEcwABGqIPAAEaiwCOUZrvtAgACasAARrhdA8AAaJQBYAPAAG/AwAD8M2rAAEbVYAPAAGkgwADwuADAAG8sAMAAaKY/ScAARvMiFsAARv2DwABG98AjlGa78cAAbyIAHMAARxYuu+PAAEwIAQABgMAARyjAI5QaAMAATEs+AT0cwABHRIHAAEc9wCOUKIClAQABHMAAR1GDwABHS8AjlGaerwEAAWrAAEdfXQPAAGiUAWADwABvwMAA/DMAwABvKgDAAGimP0nAAEeCIhbAAEeMg8AAR4bAI5Rmu/PAAG8jABzAAEemLrvkwABMCAEAAYDAAEe4wCOUGgDAAExMPgE9HMAAR9SBwABHzcAjlCiApQEAARzAAEfhg8AAR9vAI5Rmgo4BAAFqwABH8F0DwABolAFgA8AAb8DAAPwzAMAAbysAwABopj9JwABIExbAAEgdg8AASBfAI5Rmu+/AAG8hPgJOwABIWsAASGkAALvhXQPAAPz5AWADwABpIAEcwABIeS674sAATAgBAAGAwABIlsAjlBoAwABMSkFGwABIqcAASN3AAEi8AAAAtSVgA8AAaSAAFMAASM3AI5euCAA+Aj0cwABI8oHAAEjrwCOUKIClAQABHMAASP+DwABI+cAjlGa77QIAAmrAAEkPXQPAAGiUAWADwABvwMAA/DMUwABJHsAjl+8JAADAAG8sAMAAaKZJwABJOyEWwABJRoPAAElAwCOUZrvvwABvIT4BQsAASW8A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bQJgA8AAS89gA8AAb+EAwABEIQAAAIJqYAO9PAAAYAPAAPrRAT4DScAARC8cwABEPYDAAEQzwCPlykgBAAErAMAA/fFKwABERgEqP0bAAERYwABEgsAARGYAAAClNGADwABLzwAWwABEfIDAAERywCPlyoNowAD9jz4BScAARIocwABEl4LAAESOwCPmLbYQAQABgcAARKbAI+XnAMAAS+w+Ak7AAETNwABE0wAAthVgA8AAb+EBHMAARN6AwABE1cAj5cpLAQABgsAARN/AI+YtAMAA/YFJwABE8hzAAET8g8AARPbAI+Z8thMDAAOBwABFA8Aj5ecWwABFFILAAEULwCPmLadxwABL0y4AwABv4z4BSsAARTMBKT8/SsAARVwBKgbAAE0JgMXAAEW6wABF3sAARhcAALxmAAAAAQPAAEXxwABGFwAAAAAAAABdA8AA/W0CYAO9KmADwABMuAE+AUrAAEX6ARbAAEYBLrxSwABMksAATMcGwABM/4DFwABGHMAARjTAAEa1AAC74sAATJIAAAABA8AARlDAAEa1AAAAAQEBwABGXgAAAIJqYAO9PAAAXQPAAPz5AWADwABpIAE+AUrAAEZsARzAAEZzLrvgwABMkgIAAhzAAEabFsAARo4uu8rAAEySwABMy0sBAAEWwABGo4DAAEacwCPnf4C9vRgAwAD9gYDAAEaqwCPnfwDAAEz9BsAATQCAxcAARrrAAEa/wABHMQAAu+PAAEySAAAAAQPAAEbQwABHMQAAAAEBAcAARt4AAACCamADvTwAAGADwAD60QE+AUrAAEbsARzAAEbzLrvewABMkgIAAhzAAEcXFsAARwguu8vAAEySwABMzEsBAAEWwABHH4DAAEcYwCPoH4C9vRgAwAD9gYDAAEcmwCPoHwDAAEz+BsAATQGAxcAARzbAAEc7wABHrQAAu+TAAEySAAAAAQPAAEdMwABHrQAAAAEBAcAAR1oAAACCamADvTwAAGADwAD60QE+AUrAAEdoARzAAEdvLrvewABMkgIAAhzAAEeTFsAAR4Quu8zAAEySwABMzUsBAAEWwABHm4DAAEeUwCPouIC9vRgAwAD9gYDAAEeiwCPouADAAEz+BsAATQqAxcAAR7LAAEfDwABRPwAAr7sBasAAR7NgA8AA/eQCAAABA8AAR9XAAFE/AAAAAgICwABH6AAAAK+8YAPAAGflAMAASAcAAAC75V4DAAICAmADvTxdA8AAaJQBYAPAAG9zAAFXA8AAbv0AXAAAXAE+BE7AAEgiwABIKwAApTRgA8AAS88BFsAASDiAwABILcAj6VmlNMAAZ+hOwABITcAASFgAAKzrYAPAAP5+ARbAAEhjgsAASFrAI+magL3AAEvdT8AASG7AAEhzAAABu+ZhAwNdA8AA/W0CYAPAAP5+XQPAAP4vAWADwABvDWEDAWADwABvDV0DwABolAFgA8AAb3NhAwFgA8AAbw1gA8AA+tFcAAPAAEh7wABKgQAAAAMDA8AASKMAAAC0CV0DwAD9bQJgA8AA/n5dA8AA/i8BYAPAAG8NAMAASMkAAACIzGEDAWADwABvDV0DwABolAFgA8AAb3MAwABI8QAAALvnYQMBYAPAAG8NYAPAAPrRAABcAT4BPRzAAEkdLrvowABMkgMAA4XAAEkpwCPqSoPAAEk0wCPpwjTAAElAA8AASUDAAEp6AAAAAQEBwABJTQAAALvpYAPAAG8NAABgA8AA+tEBPgJJwABJXiIcwABJa4LAAEliwCPpmrYQAQABFsAASYAUwABJesAj6uIIAKRnwABvEADAAEvsABzAAEm0FsAASZcuu9PAAEySwABM5bYOAwADgMAASdTAI+lZFsAASeYUwABJ4MAj6uIIAKRnwABvEC4AwABv7z4CPRzAAEoLgcAASgHAI+lpIAIAAhbAAEoSFMAASgzAI+riCACkZ8AAbxAcwABKIIbAAEoawCPqbiABAAEUwABKIcAj6uIIAAAAAABKwABKNAEcwABKSofAAEo7wCPqjiABAAEUwABKS8Aj6uIIAAAAP0rAAEplASoAwABNBkFHwABKiBbAAEqbgMAASpDAI+lZgmvAAGf0AwHAAEq9asAASr1gA8AAZ9jAAPwfAD4DPRzAAErNLrvrAgACFsAASv+AwABK9MAj6VmlNMAAZ+gWwABLFIDAAEsJwCPpWYUswABn9QDAAHAkScAASywcwABLMC677MAATJICAAKAwABLRcAj6VkWwABLUS67ysAATJLAAEzLAMAATQI+AT0cwABLdYTAAEttwCPp7iADAAMWwABLhS67z8AATJLAAEzQNMAAS7QDwABLtMAATBEAAAABAQHAAEu1AAAARWADwABvDQAAXQPAAGiUAWADwABv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AAGCwACFo8AkFrECvGkWwACFzYPAAIXIwCQWv7xIwABMu7xqFsAAhgyDwACGB8AkFr+8ScAATLzAAHHDTsAAhq7AAIa5AACE82ADvSoBHMAAhskWwACGuy68XsAATJLAAEzns3ABAAGCwACG18AkFrEAwABx7kPAAIbjIRzAAIb1hMAAhurAJBdNSAEAASsAwAD98T4DTsAAhxnAAIc7AAC8d10DwAD+LwFgA70qARzAAIdmgMAAh0nAJBZGmUoCAAKEwACHg8AkF000wACHjwPAAIePwACHqwAAAAAAAABdA8AA/i8BYAO9KgFKwACHlQEewACHmcAAwaYAAWADvSoAAADAAP2IRsAAh7bAAIf2wACHyQAAAF5gA8AAYv0AHMAAh+IWwACH1C68XsAATJLAAEznvHgBAAGCwACH8MAkFrEAwABx7z4BPRzAAIgkhcAAiALAJBenVgEAARbAAIgwhsAAiCjAJBghllLAAGL/AMAA/jw9jMAAiEzAJBdNHMAAiGcWwACIWS68XsAATJLAAEzns3ABAAGEwACIdcAkF00AwABx7j0cwACJmxzAAImFLrxmAAAAAMAATQmD/QEAAYHAAImjwCQWigDAAP2MSsAAibYBgMAAib3AJBZGBsAATRSAxcAAieLAAIn5wACLcAAAvHkAAAABA8AAihfAAItwAAAAAAAAAF0DwAD8+QFgA708AT4ETsAAijLAAIpKAAC8el0DwAD+LwFgA708AR7AAIpQwADBpgABYAO9PAAARsAAimnAAIqjwACKewAAALx7YAO9PAAWwACKjS68YcAATJLAAEzqPgFJwACKqxzAAIqvLrvkwABMkgEAAYHAAIrBwCQZXADAAE0BPgE9HMAAivSAwACK3MAkGSpWAQABgcAAivjAJBlcAMAA/jw/PRzAAIszgMAAixvAJBkqgKUBAAEWwACLOi68VcAATJLAAEzTAMAA/j1KwACLTgGAwACLVcAkGSoGwABNFYDFwACLdcAAi4bAAIvYAAClPQFqwACLdmADwAD95AIAAAEDwACLk8AAi9gAAAABAQHAAIugAAAAmfpgA70qAABcAT4BPRzAAIvCFsAAi6suvF3AAEySwABM5qU9AQABgMAAi9DAJBowAMAAcb0GwABNFoDFwACL3cAAi+7AAIz4AAC8fAFqwACL3mADwAD95AIAAAEDwACL+8AAjPgAAAADAwPAAIwQAAAAgmpgA708AMAAjCQAAACClGADvSoAwACMOAAAALx9YAPAAHB+AABgA8AA+tEBPgFKwACMtAEcwACMuy68fgMAAxbAAIzVgMAAjM7AJBqihQq9SoHAAIzlwCQasILAAIzrwCQavgDAAE0XBsAATReAxcAAjP3AAI0CwACQVAAAvH4AAAABA8AAjRTAAJBUAAAAAwMDwACNIQAAALx/YAO9KgDAAI1BAAAAgpRgA70qAMAAjVsAAAC8fWADwABwfgAAYAPAAPrRAT4CR8AAjWuCwACNc8AkG1gDAcAAjZhqwACNmGADwABwfsAA9EMAPgFKwACNpwEcwACNxRbAAI2uLrxdwABMksAATOa8gAIAAoDAAI3qwCQbPIHAAI3+wCQbSgDAAHHFAcAAjh5qwACOHmADwABwfsAA9FoAPgFKwACONgEcwACOVBbAAI49LrxdwABMksAATOa8gQIAAoDAAI54wCQbPIHAAI6MwCQbSgDAAHHGAcAAjqxqwACOrGADwABwfsAA8+gAPgJJwACOvSIcwACO1IDAAI7BwCQbPEgBAAEWwACO5xbAAI7XLrR8wABMksAATNubALizAMAA/fEBHMAAjxOAwACPAMAkGzxIAQABFsAAjyYWwACPFi60fMAATJLAAEzbsb24/ADAAP3xPgFKwACPiQEpP0rAAI+oARzAAI/GFsAAj68uvF3AAEySwABM5ryCAgACgMAAj+rAJBs8gcAAj/7AJBtKAMAAccc9MMAAkA8fwACQGcAA/CkBAAEkwACQTwMnvIOCwACQRcAkG1gngWoABsAATRiAxcAAkFnAAJBywACbrAAApWUBasAAkFpgA8AA/eQCAAABA8AAkHzAAJusAAAAAQEBwACQkAAAAKUQYAO1/wAAYAPAAE3fAT4LTsAAkMPAAJDgAAC8dV0DwAD9bQJgA70qXQPAAP4vAWADvSoBHMAAkOouvHQAAAAAwABNE07AAJEWwACRIwAAtARgA8AAgm4BHMAAkToWwACRJS64dcAATJLAAEzfgowAAAAAwACCkj0XwACRRy68X8AATJIpwABM6E7AAJF7wACRiwAAuCZdA8AA/W0CYAO9PGADwABvDQEywACRjWADvTxgA8AAbw0APRzAAJGiFsAAkZUuu87AAEySwABMz4P9AQABNMAAkaoDwACRqsAAkz0AAAACAgLAAJG4AAAAgmpgA708AMAAkcwAAAC8J2ADwABvDQAAYAPAAP2hAT4BScAAkeEWwACR8YXAAJHlwCQeN7wSwABvBz4CPRzAAJISg8AAkgPAJB3MgL8CAAKEwACSE8AkHimFwACSHcAkHjcAwAD9gkAcwACSSxbAAJI5LrxjwABMksAATO2DHAEAAYTAAJJUwCQeKQDAAP47wACSOcAAklsBJMAAkqIFJ7h/hMAAknLAJB4pJ7yEhcAAkpXAJB43J4FqPgFAIRzAAJLWFsAAksQuvGPAAEySwABM7YMcAQABhMAAkt/AJB4pAMAA/jvAAJLDwACS5gEkwACTLQUnuH+EwACS/cAkHiknvIWFwACTIMAkHjcngWoAwAD9jEbAAJNEwACTc8AAk1YAAACCamADvTwAFsAAk2AuvGPAAEySwABM7T4BQBzAAJOPFsAAk4Iuu87AAEySwABMz4dYAQABhMAAk5vAJB9OAMAA/YDAAJOCwACTogEkwACT3gMnuH+EwACTt8AkH04nvIZOwACT/8AAlBEAALpCXQPAAP4vAWADwABi/QEewACUF8AAwaYAAWADwABi/QAAPRzAAJRHHMAAlDEuvGYAAAAAwABNCYP9AQABNMAAlE8DwACUT8AAlWYAAAACAgLAAJRQAAAAgLVgA70qAMAAlGUAAACBVGADwABMuAAAYAPAAP2hAT4BScAAlHMhHMAAlI0WwACUfIbAAJR3wCQgILxHwABMukgBAAErAMAA/fE+AUbAAJSgwACU3sAAlLMAAAC8h10DwAD+LwFgA8AATK0AFsAAlNYWwACUxYbAAJTAwCQgILxHwABMuinAAP2QPgFGwACU6sAAlQ/AAJT4AAAAlaNgA8AATK0Ah8AAlQTAJCBuPgE9HMAAlS+EwACVHcAkH7ZWAQABFsAAlTwUwACVM8AkIK4IAIKUwABMrwDAAP48PwDAAP2MTsAAlXvAAJWHAAClImADwABN3wEfwACVjcAAiAkcAAEWwACVni64EsAATJLAAEzuG3oWwACVvC6yZMAATJLAAEzYpTsmwACV4gEWwACV4i6vssAATJLAAEzZYAO7grg1FsAAlgouvFjAAEySwABM2rO3JsAAli4BFsAAli4utHzAAEySwABM22ADuZG4LRzAAJZmFsAAllMuuHTAAEySwABM3YKMAAAAAMAAauy4MRzAAJagFsAAloguvFnAAEySwABM3oKMAAAAAMAAepW0BILAAJa/wCQdh7c1HMAAlv0WwACW5y68XMAATJLAAEzjgowAAAAAwABwLbiDFsAAlx4uvFrAAEySwABM4LSxFsAAl0YuvFvAAEySwABM4byIFsAAl3Yuu8nAAEySwABMyLg2FsAAl8AWwACXpi64dsAATJLAAEziuDbAAHsUvIkWwACX8C68YcAATJLAAEzqvHocwACYJy68eQAAAADAAE0UuCaDwACYYsAkHcy2uhbAAJidFsAAmIYuvF3AAEySwABM5ra6wABxurx1gcAAmM7AJB1Th+gcwACZGxbAAJkELrxdwABMksAATOaCjAAAAADAAHG8pVAcwACZVRbAAJk9LriVwABMksAATOSCjAEAARbAAJlbLrJkwABMksAATNgAwABu+LwUFsAAmXguu9LAAEySwABM1LwaFsAAmasuvBrAAHAcvBsWwACZ9C68G8AAcB28ExbAAJo3LrwTwABwHrwoFsAAmnAuvGLAAEySwABM7LyKFsAAmsQuvFfAAEySwABM17PMFsAAmwUuvFbAAEySwABM1rpChMAAmzHAJB+2ScAAm0kawACbTaSNPgE9F8AAm2suvGDAAEyShcAAm3/AJCD+wABM6T9KwACblgGFwACbncAkIP4AACPbBwAj20wAI9uRACPbywAj3HoAI9zeACPdOwAj3YQAI933ACPe3gAj35EAI+NFACPlnAAj5vwAI+dRACPn8QAj6IoAI+kjACPvzQAj8h4AI/KRACPzBAAj84wAI/6oACP/CAAj/70AJAF4ACQCpAAkBIoAJAw7ACQTmAAkFH8AJBUfACQWAQAkGPAAJBn6ACQabAAkGxIAJB0EACQjqAAAACcAAAGAxQAkJE8AI8YTACPHBwAjytQAI835ACPSWAAkJE0AAAAFACQkTwAAAAAAAgTAAE0bvIuAxgAAA4ECAAC9FQAAgSYAAIHgAAEBAZdLgU4AAMAAZ9cAAAAAAcAATR2Axqj6vIwAAQAAmU9gA8AA/eQBW14DAAICAmADvTxfAwAAAAFXA8AATR0BXwMAAFwAAqkTAAAAgmpgA708AKkdAAAAr5VfAwAAAAAJAsAATR6AxoPCg8iKKwOk6wAAAWABwAD95AAAAAEFwABNLIDGg9iD3oPrAQAAA4Ppg+sAAAAAAAAAYAPAAE0eAT8BCQGD3sAA/foAAAAACgbAAE0ggMaD8IQBhA8BAIJqAAAAAQOECIQPAAAAAAAAAGADvTwBSoQLASsGwABNIYDGhBSELYRQAQCviQAAAAEDhDmEUAAAAAAAAABdA8AA/PkBYAPAAGflAUqEPAFqhDxdA8AA/TsBYAPAAGflwAD+gwbAAE0igMaEVYRthI4BAK+KAAAAAQOEeISOAAAAAAAAAF0DwAD8+QFgA8AAaBcBSoR7AWqEe10DwAD9OwFgA8AAaBfAAP6LBsAATSOAxoVbhXGFjgEAr4sAAAABA4V6hY4AAAAAAAAAXQPAAPz5AWADwABoYQFKhX0BaoV9XQPAAP07AWADwABoYcAA/pMGwABNJIDGhZOFrYXSAQCvjAAAAAEDhbqF0gAAAAAAAABdA8AA/PkBYAPAAGh/AUqFvQFqhb1dA8AA/TsBYAPAAGh/wAD+mwbAAE0lgMaF14Xghe8BAIFVAAAAAQOF6IXvAAAAAAAAAGADwAD60QFKhesBKQbAAE0ngMaF9IX5h3QAAK+dAAAAAQOF/od0AAAAAQEBhhIAAACHRWADwABNggAAXAE+BD0chiwWhiEur4rAAE0ig/0BAAE0hjQDhjSGagAAAAEBAYY/AAAAr5VgA8AAaBcAAFwBSoZHARyGT4CGR8AkJtyvngIAAhaGXi6CasAATSCBhmbAJCcQAMAATYQAwAD9CT0choYWhnEur4nAAE0hg/0BAAE0ho4Dho6GxgAAAAEBAYaaAAAAr5VgA8AAZ+UAAFwBSoaiARyGqoCGosAkJtyvnwIAAhaGui6CasAATSCBhsLAJCdwAMAATYUAwAD9CT0chtYWhs0ur4vAAE0jg/0BAAE0ht4Dht6HEAAAAAEBAYbnAAAAr5VgA8AAaGEAAFwBSobvARyG94CG78AkJtyvoAIAAhaHBC6CasAATSCBhwzAJCfQAMAATYYAwAD9CT0chy0Whxcur4zAAE0kg/0BAAE0hzUDhzWHbwAAAAEBAYdCAAAAr5VgA8AAaH8AAFwBSodKARyHUoCHSsAkJtyvoQIAAhaHYy6CasAATSCBh2vAJCgwAMAATYcAwAD9CQbAAE0ogMaHeYeMh6QAACMBaod6YAPAAP3kAgAAAQOHlIekAAAAAAAAAGADwAD+fgFKh5oBHoeawABNKQEAAS4ABsAATSmAxoeph7eIOwABtBAAAAABA4e7iDsAAAABAQGHyAAAALPHYAPAAE0eAABgA8AA/n4BPgNOh+iH6wAAg+lgA8AA/sgBH4fxwAD+5wAAAAA9HogFwABNKgIAAoGIDcAkKOmAiBHAJCjQAEqIIwEciC2BiCrAJCjpIwAAAADAAP7hBsAATSqAxohAiEyKKQABhDEAAAABA4hTiikAAAACAgKIYQAAAIPpYAPAAP7IAIhxAAAAs8dgA8AATR4AAFwBPgY9HIiHgIiEwCQpVIKOAQABJIisAie8jRaIpIGImMAkKWKCasAATSAAwAD+3E+ItIi5AAABVmEDAmADwAD+fl0DwAD8+QFbXAADiLyJYgAAAAICAojEAAAAr61gA8AA/n4AiNQAAACD0V0DwAD8+QFbAABcAT4BSYjmFojzhIjqwCQp1oO3wAD9Hj4CPRyJDICJCcAkKVSCjgEAASSJHgMnr66DiRfAJCnIJ4LqAMAA/tw9HIkyhIkpwCQp1oP9AQABNIk6A4k6iVMAAAABAQGJOwAAAINTWwAAXAFKiUEBHIlEgIlBwCQpVIKOAQABJIlSAievr4WJUMAkKkQAwAD+3ADAAP0JPz0ciWyCiWnAJCmkIAIAAie8jhaJiYGJfcAkKWKvicAATSEAAD0ciZ6CiZvAJCmkIAIAAie8jxaJuoGJrsAkKWKvisAATSIAAD0cic6CicvAJCmkIAIAAie8kBaJ6IGJ3MAkKWKvi8AATSMAAD0cifqCiffAJCmkIAIAAie8kRaKGIGKDMAkKWKvjMAATSQAAAAAJCVIACQlcwAkJboAJCYBACQmSAAkJo8AJCa8ACQobwAkKLAAJCk0ACQrDAAAAAoCwABNLYDGii6KPYsRB7ySAAABYAHAAP3kAAAAAQXAAE00AAAAAAQAAAMAAAAAAAAAAABgA8AATS0BPwEJAQDAAP36AAAAAAQGwABNL4DGilSKWYqCAAKvuwAAAAEDimuKggAAAAEBAYp3AAAAr7xgA8AAZ+UAAFwABsAATTCAxoqGiouKqwACr70AAAABA4qaiqsAAAABAQGKowAAAK++YAPAAGhhAABcAAbAAE0xgMaKr4q0itoAAq+5AAAAAQOKxYraAAAAAQEBitAAAACvumADwABoFwAAXAAGwABNMoDGit6K44sPAAKvvwAAAAEDivaLDwAAAAEBAYsDAAAAr8BgA8AAaH8AAFwAAAAkK4UAJCu2ACQr5wAkLBgAJCxJAAAABALAAE01gMaLFIsak1kDpOwAAAFgAcAATR4AAWABwABNLQQEwABNOIDGi8+L2xi8k8AATRsAXQPAAP4vAWADwABn5QAEwABNOYDGi+6L+Ri8lMAATRsAXQPAAP4vAWADwABoFwAEwABNOoDGjAqMExi8lcAATRsAXQPAAP4vAWADwABoYQAEwABNO4DGjCiMNRi8lsAATRsAXQPAAP4vAWADwABofwACBcAATUmAxow6jDqMUgAAAAOMUIxSAAAAAAAAAGADwABNNQE/BQgBwABNOysIAcAATTorCAHAAE05KwgBwABNOCsJAYw6wABNLAAAAAAFwABNSoDGjFeMV4zGAJV/AAOMdozGAAAABAQEjIMAAAS8k10DwAD+LwFgA8AAZ+UAjJYAAAS8lF0DwAD+LwFgA8AAaBcAjKgAAAS8lV0DwAD+LwFgA8AAaGEAjLgAAAS8ll0DwAD+LwFgA8AAaH8AAGADwABNNQE/BQgBwABNOIAAwCQtcggBwABNOYEAwCQthwgBwABNOoIAwCQtnAgBwABNO4MAwCQtsQkBjFfAAE0sAAAAAAoGwABNPYDGjMuM4I1cAQCBVQFqjMxgA8AA/eQCAAABA4zojVwAAAAAAAAAYAPAAPrRAUqM8QEiIiIcjP4WjPEuvJPAAE0bwABNOEgBAAErAMAA/fEAHI0bFo0PLryUwABNG8AATTlIAQABKwDAAP3xAByNNhaNLC68lcAATRvAAE06SAEAASsAwAD98QAcjVUWjUcuvJbAAE0bwABNO0gBAAErAMAA/fEGwABNQ4DGjZWNmo6mAAC8lwAAAAEDjaOOpgAAAAEBAY2wAAAAr8xgA8AATR4AAFwBPgVJjb4WjcmAjcLAJC7VgVXAAE0lSo3SAD89HI3xFo3lgI3ewCQu1a+JwABNIYP9AQABFo35Lq+7wABNRADAAP0JPRyOJBaOGYCOEsAkLtWvisAATSKD/QEAARaOLC6vucAATUYAwAD9CT0cjlQWjkuAjkTAJC7Vr4vAAE0jg/0BAAEWjlwur73AAE1FAMAA/Qk9HI6GFo55gI5ywCQu1a+MwABNJIP9AQABFo6OLq+/wABNRwDAAP0JBsAATUSAxo6rjryPWwAAr7sBao6sYAPAAP3kAgAAAQOOzo9bAAAAAQEBjtoAAACvvGADwABn5QAAXAE+A0AhHI7+gI7zwCQvykgBAAErAMAAZ/CO848FAD0jHI8ZFo8MLryTwABNG8AATThIAQABKwDAAP3xF48MLryTwABNGx+PIZTeAAFgA8AAZ+UAAMAATTgrAV0DwAD+LwFgA8AAZ+U9HI9IFo87LryTwABNG8AATThWAQABgI9MwCQvygDAAP48BsAATT6Axo9gj4WP3AEAr4kBao9hYAPAAP3kAgAAAQOPkY/cAAAAAAAAAF0DwAD8+QFgA8AAZ+UBPgFKj5cBIyEcj6sWj54uvJPAAE0bwABNOEgBAAErAMAA/fEWj7UuvJPAAE0bwABNOGqPxF0DwAD9OwFgA8AAZ+XAAP6DAV0DwADNVQFgA8AAZ+UGwABNRYDGj+GP8pB5AACvvQFqj+JgA8AA/eQCAAABA5ABkHkAAAABAQGQCgAAAK++YAPAAGhhAABcAT4DQCEckCiAkCDAJDEZSAEAASsAwABoeZAgkC8APSMckEAWkDYuvJXAAE0bwABNOkgBAAErAMAA/fEXkDYuvJXAAE0bH5BIlN4AAWADwABoYQAAwABNOisBXQPAAP4vAWADwABoYT0ckGkWkF8uvJXAAE0bwABNOlYBAAGAkG3AJDEZAMAA/jwGwABNP4DGkH6QoJDrAQCviwFqkH9gA8AA/eQCAAABA5CpkOsAAAAAAAAAXQPAAPz5AWADwABoYQE+AUqQrwEjIRyQwBaQti68lcAATRvAAE06SAEAASsAwAD98RaQyi68lcAATRvAAE06apDWXQPAAP07AWADwABoYcAA/pMBXQPAAM1VAWADwABoYQbAAE1GgMaQ8JEBkZgAAK+5AWqQ8WADwAD95AIAAAEDkRKRmAAAAAEBAZEdAAAAr7pgA8AAaBcAAFwBPgNAIRyRP4CRNcAkMmhIAQABKwDAAGgmkTWRRgA9IxyRWRaRTS68lMAATRvAAE05SAEAASsAwAD98ReRTS68lMAATRsfkWGU3gABYAPAAGgXAADAAE05KwFdA8AA/i8BYAPAAGgXPRyRhhaRei68lMAATRvAAE05VgEAAYCRisAkMmgAwAD+PAbAAE1AgMaRnZHBkhQBAK+KAWqRnmADwAD95AIAAAEDkcySFAAAAAAAAABdA8AA/PkBYAPAAGgXAT4BSpHSASMhHJHlFpHZLryUwABNG8AATTlIAQABKwDAAP3xFpHvLryUwABNG8AATTlqkf1dA8AA/TsBYAPAAGgXwAD+iwFdA8AAzVUBYAPAAGgXBsAATUeAxpIZkiqS0QAAr78BapIaYAPAAP3kAgAAAQOSPZLRAAAAAQEBkkoAAACvwGADwABofwAAXAE+A0AhHJJwgJJkwCQzt0gBAAErAMAAaIeSZJJ3AD0jHJKMFpJ+LryWwABNG8AATTtIAQABKwDAAP3xF5J+LryWwABNGx+SlJTeAAFgA8AAaH8AAMAATTsrAV0DwAD+LwFgA8AAaH89HJK9FpKvLryWwABNG8AATTtWAQABgJLBwCQztwDAAP48BsAATUGAxpLWkvyTVwEAr4wBapLXYAPAAP3kAgAAAQOTCZNXAAAAAAAAAF0DwAD8+QFgA8AAaH8BPgFKkw8BIyEckyQWkxYuvJbAAE0bwABNO0gBAAErAMAA/fEWky4uvJbAAE0bwABNO2qTPl0DwAD9OwFgA8AAaH/AAP6bAV0DwADNVQFgA8AAaH8AACQuDQAkLrUAJC+gACQwYwAkMO8AJDGyACQyPgAkMwEAJDONACQ0UAAkNNwAAAAKAsAATUuAxpOzk7mZswO8mAAAAWABwAD95AABYAHAAE0tAwTAAE1NgMaT/5QNCbyZAGADwAD60QAEwABNT4DGlCiUNxi8msAATRsAYAPAAE01ASsEwABNUIDGlFiUfhi8m8AATRsAXQPAAP07AWADwABNNQExlHxgA8AATTUAAQXAAE1cgMaUg5SDlLkAAAADlJuUuQAAAAEAAAGUogAABLyZYAPAAPrRAWqUsmADwAD60QBgA8AATUsBPwIIAcAATU2AAMAkNagJAZSDwAD9+gAAAAAHBsAATVOAxpS+lMOVgwAAvJzAAE0bAAAAAQOU0ZWDAAAAAAAAAFwBPgFJlNoclO4WlN4uvJrAAE0bwABNT0gBAAErAMAA/fE+Aj0XlP8uvJrAAE0bH5UVwABNSQAAAADAAE1PSZU1FpU5LryZwABNTT4BPRyVXRaVUy68m8AATRvAAE1QVgEAARaVYS68msAATRvAAE1PAMAA/Uw/PwbAAE1UgMaViJWZlgIAAK+9AWqViWADwAD95AIAAAEDlaiWAgAAAAEBAZWxAAAAr75gA8AAaGEAAFwBPgI9HJXALrycwABNGwAAAADAAE1TPRyV5haV1i68msAATRvAAE1Pr70BAAGAlfbAJDapAMAATUUGwABNVYDGlgeWGJaQAACvuwFqlghgA8AA/eQCAAABA5YqlpAAAAABAQGWNgAAAK+8YAPAAGflAABcAT4CPRyWSC68nMAATRsAAAAAwABNUz0clm4Wll4uvJrAAE0bwABNT6+7AQABgJaBwCQ3HADAAE1EBsAATVaAxpaVlqaXGQAAr7kBapaWYAPAAP3kAgAAAQOWt5cZAAAAAQEBlsIAAACvumADwABoFwAAXAE+Aj0cltMuvJzAAE0bAAAAAMAATVM9HJb5FpbpLryawABNG8AATU+vuQEAAYCXC8AkN48AwABNRgbAAE1XgMaXHpcvl6wAAK+/AWqXH2ADwAD95AIAAAEDl0KXrAAAAAEBAZdPAAAAr8BgA8AAaH8AAFwBPgI9HJdiLrycwABNGwAAAADAAE1TPRyXiBaXeC68msAATRvAAE1Pr78BAAGAl5zAJDgCAMAATUcGwABNWIDGmF6YapkWAACERgAAAAEDmG+ZFgAAAAAAAABgA8AATR4BPgRJmHgcmIwWmHwuvJrAAE0bwABNT0gBAAErAMAA/fFKmJUBapiiYAPAAE0ewAD+oz9OmMGYzQAAs8dgA8AATR4BFpjPLryawABNG8AATU89F5jkLryawABNGyvAAE1PSpkAAYCZB8AkOKYGwABNWoDGmX6ZmJmxAQC8nQAAAAEDmaWZsQAAAAAAAABdA8AA/PkBYAPAAE0eAUqZqAEWmaguvJvAAE0bwABNUAAAJDXiACQ2fwAkNvIAJDdlACQ32AAkOEsAJDjeACQ5HwAAAAcCwABNXYDGmjCaNqREA7yeAAABYAHAAP3kAAJgAcAATR5gAcAATS0FBMAATV+AxpqOmpkJs8cAYAPAAE0eAATAAE1hgMaasJq7GLyUwABNGwBdA5S+AWADwABoFwErBMAATWKAxprPmtgYvJXAAE0bAF0DlL4BYAPAAGhhASsEwABNY4DGmu+a+xi8k8AATRsAXQOUvgFgA8AAZ+UBKwTAAE1kgMabE5sgGLyWwABNGwBdA5S+AWADwABofwErAQXAAE10gMabJZslm00AAAADmzubTQAAAAEBAZtBAAAEs8dgA8AATR4AAGADwABNXQE/AggBwABNX4AAwCQ6HgkBmyXAAP36AAAAAAwGwABNZoDGm1Kbb5uLAQCCagFqm1NgA8AA/eQCAAABA5t2m4sAAAAAAAAAYAO9PAFKm3kBFpuFFpt5LrPHwABNX4JqwABNIAbAAE1ngMabkJulnE4BAIFVAWqbkWADwAD95AIAAAEDm62cTgAAAAAAAABgA8AA+tEBPgFKm7MBIiIiIhabxhabui6zx8AATV+BVcAATSUAHJvlFpvZLryUwABNG8AATWFIAQABKwDAAP3xABycAhab+C68lcAATRvAAE1iSAEAASsAwAD98QAcnCIWnBUuvJPAAE0bwABNY0gBAAErAMAA/fEAHJxDFpw1LryWwABNG8AATWRIAQABKwDAAP3xBsAATWiAxpxTnHic0gEAr4kBapxUYAPAAP3kAgAAAQOchJzSAAAAAAAAAF0DwAD8+QFgA8AAZ+UBPgFKnIoBIyEcnJ4WnJEuvJPAAE0bwABNY0gBAAErAMAA/fEWnKguvJPAAE0bwABNYxacwxacty6zx8AATV+vicAATSEBXQPAAPz5AWADwABn5QbAAE1tgMac15zoncEAAK+7AWqc2GADwAD95AIAAAEDnPqdwQAAAAEBAZ0GAAAAr7xgA8AAZ+UAAFwBPgJJnRgcnSkWnRwuvJPAAE0bwABNY0gBAAErAMAA/fE+Aj0XnTouvJPAAE0bH51NlN4AAWADwABn5QAAwABNYz0cnXYWnWkuvJPAAE0bwABNY4ClAQABFp2JFp19LrPHwABNX6+JwABNIQCUyz89HJ2uFp2hLryTwABNG8AATWNWAQABgJ2ywCQ8CgCUygbAAE1ugMadxp3XnpIAAK+9AWqdx2ADwAD95AIAAAEDneaekgAAAAEBAZ3vAAAAr75gA8AAaGEAAFwBPgJJnf4cngwWngIuvJXAAE0bwABNYkgBAAErAMAA/fE+Aj0Xnh0uvJXAAE0bH54tlN4AAWADwABoYQAAwABNYj0cnlAWnkYuvJXAAE0bwABNYoClAQABFp5jFp5XLrPHwABNX6+LwABNIwCUyz89HJ6CFp54LryVwABNG8AATWJWAQABgJ6GwCQ80wCUygbAAE1pgMael565nwcBAK+LAWqemGADwAD95AIAAAEDnsKfBwAAAAAAAABdA8AA/PkBYAPAAGhhAT4BSp7IASMhHJ7ZFp7PLryVwABNG8AATWJIAQABKwDAAP3xFp7jLryVwABNG8AATWIWnvsWnu8us8fAAE1fr4vAAE0jAV0DwAD8+QFgA8AAaGEGwABNb4DGnwyfHZ/sAACvuQFqnw1gA8AA/eQCAAABA58un+wAAAABAQGfOQAAAK+6YAPAAGgXAABcAT4CSZ9KHJ9aFp9OLryUwABNG8AATWFIAQABKwDAAP3xPgI9F59rLryUwABNGx+ffZTeAAFgA8AAaBcAAMAATWE9HJ+kFp+YLryUwABNG8AATWGApQEAARaftxafqy6zx8AATV+visAATSIAlMs/PRyf2hafzi68lMAATRvAAE1hVgEAAYCf3sAkPicAlMoGwABNaoDGn/GgFaBrAQCvigFqn/JgA8AA/eQCAAABA6AgoGsAAAAAAAAAXQPAAPz5AWADwABoFwE+AUqgJgEjIRygORagLS68lMAATRvAAE1hSAEAASsAwAD98RagQy68lMAATRvAAE1hFqBdFqBRLrPHwABNX6+KwABNIgFdA8AA/PkBYAPAAGgXBsAATWuAxqBwoJag9AEAr4wBaqBxYAPAAP3kAgAAAQOgo6D0AAAAAAAAAF0DwAD8+QFgA8AAaH8BPgFKoKkBIyEcoL4WoLAuvJbAAE0bwABNZEgBAAErAMAA/fEWoMguvJbAAE0bwABNZBag5Bag2C6zx8AATV+vjMAATSQBXQPAAPz5AWADwABofwbAAE1wgMag+aEKoe0AAK+/AWqg+mADwAD95AIAAAEDoR2h7QAAAAEBAaEqAAAAr8BgA8AAaH8AAFwBPgJJoT0coU8WoUEuvJbAAE0bwABNZEgBAAErAMAA/fE+Aj0XoWAuvJbAAE0bH6F0lN4AAWADwABofwAAwABNZD0coZ8WoZEuvJbAAE0bwABNZIClAQABFqGyFqGmLrPHwABNX6+MwABNJACUyz89HKHZFqHLLryWwABNG8AATWRWAQABgKHdwCRABgCUygbAAE1xgMah8qIDo34AAK+dAWqh82ADwAD95AIAAAEDogijfgAAAAEBAaIcAAAAh0VgA8AATYIAAFwBPgQ9HKI2FqIrLq+KwABNaoP9AQABNKI+A6I+onQAAAABAQGiSQAAAK+VYAPAAGgXAABcAUqiUQEcolmAolHAJEDPr54CAAIWomgugmrAAE1mgaJwwCRBAwDAAE2EAMAA/Qk9HKKQFqJ7Lq+JwABNaIP9AQABNKKYA6KYotAAAAABAQGipAAAAK+VYAPAAGflAABcAUqirAEcorSAoqzAJEDPr58CAAIWosQugmrAAE1mgaLMwCRBYwDAAE2FAMAA/Qk9HKLgFqLXLq+LwABNaYP9AQABNKLoA6LooxoAAAABAQGi8QAAAK+VYAPAAGhhAABcAUqi+QEcowGAovnAJEDPr6ACAAIWow4ugmrAAE1mgaMWwCRBwwDAAE2GAMAA/Qk9HKM3FqMhLq+MwABNa4P9AQABNKM/A6M/o3kAAAABAQGjTAAAAK+VYAPAAGh/AABcAUqjVAEco1yAo1TAJEDPr6ECAAIWo20ugmrAAE1mgaN1wCRCIwDAAE2HAMAA/QkGwABNcoDGo4OjlqRCAAAjAWqjhGADwAD95AIAAAEDo56kQgAAAAAAAABgA8AA/n4BPgROo7SjtwAAg+lgA8AA/sgBH6O9wAD+5wAAAAA9HKPUgKPRwCRCloKOAQABJKQAAye8nxaj8y6zx8AATV8ngyYAwAD+3D0epBPAAE0qAgACgKQbwCRCli4ASqQqARykNICkMcAkQpYjAAAAAMAA/uEAACQ6TwAkOpYAJDtVACQ74AAkPKkAJD1yACQ9/QAkPsYAJD9RACQ/3AAkQKUAJEJiACRDBAAAAAwCwABNdYDGpIakjKUQA7OeAAABYAHAAP3kAAABBMAATXeAxqSrpK8JgL0AYAPAAP5+AAEFwABNe4DGpLSkuqTSAQAAA6THpNIAAAABAQGkzQAABIC9YAPAAP5+AABgA8AATXUBPwIIAcAATXeAAMAkQ4sJAaS6wAD9+gAAAAABBsAATXmAxqTXpOqlDgAAIwFqpNhgA8AA/eQCAAABA6TypQ4AAAAAAAAAYAPAAP5+AUqk+AEkpQ4DJ7ygFqUILoC9wABNdyeDJgAAJEO8ACREBQAAAAECwABNfIDGpV+lZac9A6TqAAABYAHAAP3kAAAAAQXAAE2BgMaleKV+pY4BAAADpYyljgAAAAAAAABgA8AATXwBPwEJAaV+wAD9+gAAAAACBsAATX6AxqXipeemlQAAs8gAAAABA6XyppUAAAAEBASl9wAAAKVsWwCmEQAAAK/MYAPAAE0eAKYyAAAAh0VgA8AATYIApkkAAAC8oWADwABNdQAAXAE+AT0cpoOBpnzAJESKr50BAAGCponAJESYAMAATScGwABNf4DGpvWm+qc7AAClcQAAAAEDpwanOwAAAAEBAacVAAAAvKFgA8AATXUAAFwBPgAAACREYQAkRNUAJEUIAAAAAgLAAE2CgManeaeIqKAHr3EAAAFgAcAA/eQAAAABBcAATYkAAAAABAAAAwAAAAAAAAAAAGADwABNggE/AQkBAMAA/foAAAAABAbAAE2EgMann6ekp9wAAq+eAAAAAQOnsqfcAAAAAgICp8AAAACCamADvTwAp9IAAACvumADwABoFwAAXAAGwABNhYDGp+Cn5aggAAKvnwAAAAEDp/SoIAAAAAICAqgCAAAAgmpgA708AKgVAAAAr7xgA8AAZ+UAAFwABsAATYaAxqgkqCmoWwACr6AAAAABA6g1qFsAAAACAgKoQwAAAIJqYAO9PACoUwAAAK++YAPAAGhhAABcAAbAAE2HgMaoX6hkqJ4AAq+hAAAAAQOodKieAAAAAgICqIIAAACCamADvTwAqJYAAACvvmADwABofwAAXAAAACRFYQAkRZ4AJEXbACRGGAAkRlUAAAAEAsAATYqAxqkkqSqt9AOznwAAAWABwAD95AABYAHAAE2CBATAAE2NgMapfamMCbyiwABNGwBeAwACAgJgA708YAPAAGgXAAFXA8AATR0BYAPAAGgXXAAEwABNjoDGqaupuwm8o8AATRsAXgMAAgICYAO9PGADwABn5QABVwPAAE0dAWADwABn5VwABMAATY+AxqnXqeQJvKTAAE0bAF4DAAICAmADvTxgA8AAaGEAAVcDwABNHQFgA8AAaGFcAATAAE2QgMaqBKoVCbylwABNGwBeAwACAgJgA708YAPAAGh/AAFXA8AATR0BYAPAAGh/XAABBcAATZeAxqoaqhqrhgAAAAOqMKuGAAAABAAABKpNAAAAr55eAwACAgJgA708YAPAAGgXAAFXA8AATR0BYAPAAGgXXAFqAGADwAD9oXmqeAAAAK+fXgMAAgICYAO9PGADwABn5QABVwPAAE0dAWADwABn5VwBagBgA8AA/aF5qqEAAACvoF4DAAICAmADvTxgA8AAaGEAAVcDwABNHQFgA8AAaGFcAWoAYAPAAP2hearLAAAAr6FeAwACAgJgA708YAPAAGh/AAFXA8AATR0BYAPAAGh/XAFqAGADwAD9oXlgA8AATYoB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wCSfS4PAAQABHMAASn83F4ONAQABFsAASoeBwABKgcAkn/uDxsAATisAwAD9vwDAAPyxSsAASpsBgMAASqLAJJ9LBsAATtuAycAASrPAAErEwABMDQAAvObAAE38AWrAAEq0YAPAAP3kAgAAAQPAAErLwABMDQAAAAEBAcAASuoAAAiD22ADwABOzAAAYAPAAPrRAT4FScAASvchHMAASwAWwABK+y6ClMAATs5IAQABFsAASwmAwABLA8AkoKiClMAATs4AwABjD0rAAEsPASo/ScAASyEhHMAASywWwABLJS6CScAATs9IAQABFsAASzWAwABLL8AkoKiCScAATs8AwAD98UrAAEs9ASo/ScAAS08hHMAAS2EWwABLUy61JcAATtBIAQABFsAAS2qAwABLZMAkoKi1JcAATtAAwABpQErAAEt5ASo/RcAAS4sBwABLlMAAS5YAAGJgA8AA/JcBkwEcwABLnYHAAEubwCShfGMBAAEWwABLqRbAAEufLlvAAE7RYcAA/WsAwAD9xQGJwABLscAkoXwcwABLsoHAAEuxwCShfGQBAAGUAMAA/b0+AUnAAEu+IRzAAEvPHMAAS8sWwABLwi5bwABO0UsBAAGBwABLzMAkoXwAwAD9SkgBAAEcwABL4RbAAEvYgMAAS9LAJKCoW8AATtFLAQABgcAAS+LAJKF8AMAA/UoAwABOOUrAAEvmASo/SsAAS/4BKQbAAE7UgMnAAEwSwABMJ8AATDoBALzqAWrAAEwTYAPAAP3kAgAAAQPAAEwywABMOgAAAAAAAABgA8AA+tEBSsAATDUBKgbAAE7VgMnAAEw/wABMVMAATJQBALzrAWrAAExAYAPAAP3kAgAAAQPAAExgwABMlAAAAAAAAABgA8AA+tEBPgFKwABMZgEcwABMdxbAAExtLlvAAE7RgdYBAAE0wABMewPAAEx7wABMjwAAAAEBAcAATHwAAACDU2ADwABOJAAAYAPAAPrRAUrAAEyCARbAAEyEgMAATILAJKMDvOvAAE4tAMAA/Q4AACSW9AAklzcAJJepACSY7gAkmfoAJJqMACSblAAknwYAJKBuACSiTwAkopQAJKM6AAAACwLAAE7igMnAAEzWwABM3MAAWJYDvR0AAAFgAcAATiQAAAEEwABO5IDJwABNOMAATUMJhc8AXQPAAP07AWADwABOJAABBcAATvKAycAATUjAAE1IwABNdwAAAAPAAE1lwABNdwAAAAEBAcAATWsAAASFz10DwAD9OwFgA8AATiQAAGADwABO4gE/AggBwABO5IAAwCSj2AkBwABNSMAATjwAAAAACQbAAE7mgMnAAE18wABNo8AATc0BAIJrAWrAAE19YAPAAP3kAgAAAQPAAE2owABNzQAAAAAAAABgA8AATf0BSsAATasBasAATcJgA8AATf3AAP8JBsAATumAycAATdLAAE3ewABOSwAAhFIBasAATdNgA8AA/eQCAAABA8AATeTAAE5LAAAAAgECwABN/wAAAIdFXQPAAFAlAltbAMAATgkAAACCV1sBagBgA8AA/aF5AFsBPgFKwABOGQEcwABOKIDAAE4gwCSknb0eAgACLoHAAE4/wCSksADAAFAyBsAATuuAycAATlDAAE5hwABPeQAAvOXAAE38AWrAAE5RYAPAAP3kAgAAAQPAAE52wABPeQAAAAEBAcAAToQAAACD6WADwAD+yAAAXAE+BD0cwABOkYDAAE6OwCSlK4KOAQABJ70fAMAA/txOwABOwMAATsoAAL0AYAPAAP5+AScARsAATtTAAE8CwABO7AAAAICWYAPAAE4kABbAAE71LoXPwABO5D4DPRzAAE8NgMAATwrAJKUrgo4BAAGBwABPE8AkpV0AwAD+3D0cwABPK4LAAE8lwCSle7zlwABN/AEAAYDAAE9BwCSlKwDAAE42PYnAAE9MwCSlXSeApz0cwABPaoDAAE9nwCSlK4KOAQABJ70BAMAA/twGwABO7oDJwABPfsAAT53AAFAyAACvnQFqwABPf2ADwAD95AIAAAEDwABPosAAUDIAAAABAQHAAE+3AAAAW2ADwACJVAAAYAPAAE4kAT4BSsAAT8gBH8AAT9PAAE7yAQABHMAAUCUcwABQBhbAAE/6LoXPwABO5ICrAQFgA8AATiQBNMAAUAoDwABQCsAAUCMAAAABAQHAAFALAAAAgddgA8AATiQAAGADwABOJAFKwABQEQEcwABQE4HAAFARwCSmoK+dAQABgMAAUBnAJKZAAMAATjAAwAD9BICtAAAAAMAA/Q8ABsAATu+AycAAUDfAAFBRwABV5gAAnyIBasAAUDhgA8AA/eQCAAABA8AAUFnAAFXmAAAAAQEBwABQcAAAAICJYAPAAIkq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wADSmQAAAAAAAABgA8AA+tEBSsAA0pUBKQAAJRDTACURKAAlEbIAJRIyACUSqwAlExsAJROhACUUBAAlFEkAAAAIAsAAT9KAycAA0p7AANKtwADWwge9fQAAAWABwABOJAAAAgTAAE/UgMnAANMHwADTCwmAvQBgA8AATiQABMAAT9WAycAA0yjAANM0CYMqAGADwABOJAABBcAAT9+AycAA0znAANM5wADTeAAAAAPAANNawADTeAAAAAICAsAA02AAAASAvWADwABOJADAANNrAAAEgypgA8AATiQAAGADwABP0gE/AwgBwABP1IAAwCUU7ggBwABP1YEAwCUU/gkBwADTOcAATjwAAAAABQbAAE/YgMnAANN9wADTgsAA1QgAAL1+wABN/AAAAAEDwADTm8AA1QgAAAADAwPAANOyAAAAgIlgA8AAiSoAwADT2AAAAIC9YAPAAE4kAMAA0+wAAACqp2ADwABhQgAAYAPAAPrRAT4CScAA0/0hFsAA1AyCwADUAsAlFY212cAAYUw+Aj0cwADUKoDAANQewCUVbaWUAwADgcAA1EHAJRV9asAA1FNgA6U/wADJbzLAANR3W1sCJ4YVgcAA1I3AJRV9J4KUHMAA1K2CwADUo8AlFY2GrwEAARbAANTBgMAA1LXAJRVts7fAAIksAMAAYV8AwACJOUrAANThASo/SsAA1PkBKQbAAE/ZgMnAANUNwADVHcAA1XAAAIZxwABN/AFqwADVDmADwAD95AIAAAEDwADVLcAA1XAAAAAAAAAAYAPAAPyXAT4BSsAA1TYBHMAA1VAcwADVQDcNg40BAAEWwADVRxbAANVCLoC9wABP1IPGwABOKwDAAP2/ZAEAARzAANVVNxGDjQEAARbAANVkFsAA1VcugyrAAE/Vg8bAAE4rAMAA/b8AwAD9vQbAAE/agMnAANV1wADVhsAA1gAAALzmwABN/AFqwADVdmADwAD95AIAAAEDwADVjcAA1gAAAAABAQHAANWwAAAIg9tgA8AAT9IAAGADwAD60QE+AUrAANW9ASIcwADVyRbAANXELoC9wABP1EgBAAEWwADV0oDAANXMwCUXJoC9wABP1ADAAE45ABzAANXnFsAA1dougyrAAE/VSAEAARbAANXwgMAA1erAJRcmgyrAAE/VAMAATjkGwABP3IDJwADWBcAA1hrAANY7AQC86gFqwADWBmADwAD95AIAAAEDwADWJcAA1jsAAAAAAAAAYAPAAPrRAT4BSsAA1isBKgbAAE/dgMnAANZAwADWVcAA1sABALzrAWrAANZBYAPAAP3kAgAAAQPAANZhwADWwAAAAAAAAABgA8AA+tEBPgFKwADWZwEiFsAA1nMWwADWbi6AvcAAT9S868AATi0BIiEcwADWmBbAANaLLoMqwABP1UgBAAErAMAATjkAFsAA1rAWwADWoy6DKsAAT9W868AATi0AACUVPwAlFkQAJRbsACUXpAAlF+sAJRh/AAAABQLAAE/ggMnAANbywADW+MAA4OIDvX8AAAFgAcAAT9IAAAABBcAAT+uAycAA11DAANdQwADX2AAAAAPAANd1wADX2AAAAAICAsAA15AAAACAvWADwABOJADAANepAAAAgypgA8AATiQAAGADwABP4AE/AQkAwADXv8AAT98CAAKAwADXxcAlGOSBwADXy8AlGPQABgbAAE/igMnAANfdwADYBMAA2EYBAIJrAWrAANfeYAPAAP3kAgAAAQPAANgJwADYRgAAAAAAAABgA8AATf0BPgFKwADYDwFqwADYLWADwABN/cAA/vIGwABP5IDJwADYS8AA2FfAANjMAACEUgFqwADYTGADwAD95AIAAAEDwADYXcAA2MwAAAACAQLAANh4AAAAh0VdA8AAUCUCW1sAwADYggAAAIJXWwFqAGADwAD9oXkAWwE+AUrAANiSARzAANihgMAA2JnAJRm6vYACAAIugcAA2MDAJRnNAMAAUD0GwABP5oDJwADY0cAA2OLAANoJAAC85cAATfwBasAA2NJgA8AA/eQCAAABA8AA2PfAANoJAAAAAQEBwADZBQAAAIPpYAPAAP7IAABcAT4FPRzAANkSgMAA2Q/AJRpIgo4BAAEnvYEAwAD+3D0cwADZQBbAANk7LoC9wABP1LzlwABN/AEAAYDAANlWwCUaSADAAE42PRzAANligMAA2V/AJRpIgo4BAAEnvYIAwAD+3EnAANl/IRzAANmQFsAA2YMugyrAAE/VSAEAASsAwABOOT4BPRzAANmuFsAA2aEugyrAAE/VvOXAAE38AQABgMAA2cTAJRpIAMAATjY+AT0cwADZ34DAANncwCUaSIKOAQABJ4RBAMAA/tw9HMAA2fuAwADZ+MAlGkiC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YAPAAE5YAMABBQoAACCCV18DAQAAAF8DAAAABsAAUCuAycABBRbAAQUYwAEFTAACvPUAAAABA8ABBSPAAQVMAAAAAgICwAEFPQAAAL2WYAPAAE5nAMABBUQAACCCV18DAQAAAF8DAAAABsAAUCyAycABBVDAAQVSwAEFhgACvPgAAAABA8ABBV3AAQWGAAAAAgICwAEFdwAAAL2WYAPAAE52AMABBX4AACCCV18DAQAAAF8DAAAABsAAUC2AycABBYrAAQWMwAEFvAACvPsAAAABA8ABBZXAAQW8AAAAAgICwAEFrQAAAL2WYAPAAE6FAMABBbQAACCCV18DAQAAAF8DAAAABsAAUC6AycABBcDAAQXCwAEF8gACh0QAAAABA8ABBcvAAQXyAAAAAgICwAEF4wAAAL2WYAPAAE6SAMABBeoAACCCV18DAQAAAF8DAAAABsAAUC+AycABBfbAAQX4wAEGJgACvQMAAAABA8ABBgDAAQYmAAAAAgICwAEGFwAAAL2WYAPAAE6lAMABBh4AACCCV18DAQAAAF8DAAAABsAAUDCAycABBirAAQYswAEGWgACvQYAAAABA8ABBjTAAQZaAAAAAgICwAEGSwAAAL2WYAPAAE64AMABBlIAACCCV18DAQAAAF8DAAAABsAAUDGAycABBl7AAQZgwAEGngACvQwAAAABA8ABBnDAAQaeAAAAAgICwAEGjwAAAL2WYAPAAE7MAMABBpYAACCCV18DAQAAAF8DAAAABsAAUDKAycABBqLAAQakwAEG4gACvR4AAAABA8ABBrTAAQbiAAAAAgICwAEG0wAAAL2WYAPAAE7iAMABBtoAACCCV18DAQAAAF8DAAAABsAAUDOAycABBubAAQbowAEHHAACvSEAAAABA8ABBvPAAQccAAAAAgICwAEHDQAAAL2WYAPAAE7zAMABBxQAACCCV18DAQAAAF8DAAAABsAAUDSAycABByDAAQciwAEHUgACnygAAAABA8ABByvAAQdSAAAAAgICwAEHQwAAAL2WYAPAAE8CAMABB0oAACCCV18DAQAAAF8DAAAABsAAUDWAycABB1bAAQdYwAEHmgACvTMAAAABA8ABB2rAAQeaAAAAAgICwAEHiwAAAL2WYAPAAE8xAMABB5IAACCCV18DAQAAAF8DAAAABsAAUDaAycABB57AAQegwAEH0gAChSMAAAABA8ABB6rAAQfSAAAAAgICwAEHwwAAAL2WYAPAAE8jAMABB8oAACCCV18DAQAAAF8DAAAABsAAUDeAycABB9bAAQfYwAEIEAACtKMAAAABA8ABB+XAAQgQAAAAAgICwAEIAQAAAL2WYAPAAE8/AMABCAgAACCCV18DAQAAAF8DAAAABsAAUDiAycABCBTAAQgWwAEISgACsQQAAAABA8ABCCHAAQhKAAAAAgICwAEIOwAAAL2WYAPAAE9PAMABCEIAACCCV18DAQAAAF8DAAAABsAAUDmAycABCE7AAQhQwAEIigACvWAAAAABA8ABCF7AAQiKAAAAAgICwAEIewAAAL2WYAPAAE9lAMABCIIAACCCV18DAQAAAF8DAAAABsAAUDqAycABCI7AAQiQwAEIwgACvWQAAAABA8ABCJrAAQjCAAAAAgICwAEIswAAAL2WYAPAAE94AMABCLoAACCCV18DAQAAAF8DAAAABsAAUDuAycABCMbAAQjIwAEJCAACvWgAAAABA8ABCNnAAQkIAAAAAgICwAEI+QAAAL2WYAPAAE+MAMABCQAAACCCV18DAQAAAF8DAAAABsAAUDyAycABCQzAAQkOwAEJTAACsQcAAAABA8ABCR7AAQlMAAAAAgICwAEJPQAAAL2WYAPAAE+eAMABCUQAACCCV18DAQAAAF8DAAAABsAAUD2AycABCVDAAQlSwAEJpwACvYAAAAABA8ABCWrAAQmnAAAAAgICwAEJmAAAAL2WYAPAAE/gAMABCZ8AACCCV18DAQAAAF8DAAAABsAAUD6AycABCavAAQmtwAEKAAACvYgAAAABA8ABCcTAAQoAAAAAAgICwAEJ8QAAAL2WYAPAAE/sAMABCfgAACCCV18DAQAAAF8DAAAABsAAUD+AycABCgTAAQoGwAEKXwACvYsAAAABA8ABCiDAAQpfAAAAAgICwAEKUAAAAL2WYAPAAE/4AMABClcAACCCV18DAQAAAF8DAAAABsAAUECAycABCmPAAQplwAEKmQACvZEAAAABA8ABCnDAAQqZAAAAAgICwAEKigAAAL2WYAPAAFAEAMABCpEAACCCV18DAQAAAF8DAAAABsAAUEGAycABCp3AAQqfwAEK4QAChcAAAAABA8ABCrHAAQrhAAAAAgICwAEK0gAAAL2WYAPAAFAU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AGADwAD9oXkAXAE+AT0cwAEQVhbAARBTLoPpwABQSIKOAQABFsABEGCAwAEQXMAlTFSqzMAATloAwAD+3AbAAFBRgMnAARBywAEQg8ABEMYAALz7AWrAARBzYAPAAP3kAgAAAQPAARCMwAEQxgAAAAIBAsABEKQAAAC9lmADwABOhQDAARCqAAAggLVbAWoAYAPAAP2heQBcAT4BPRzAARC3FsABELQug+nAAFBIgo4BAAErAMAA/twGwABQUoDJwAEQy8ABENzAARFqAAC8+AFqwAEQzGADwAD95AIAAAEDwAEQ58ABEWoAAAACAQLAAREBAAAAvZZgA8AATnYAwAERBwAAIIC1WwFqAGADwAD9oXkAXAE+AT0cwAERSRbAARFGLoPpwABQSIKOAQABJMABEWUDJ4OzFsABEVeAwAERU8AlTV+drMAATngng7MAwAD+3AbAAFBTgMnAARFvwAERgMABEsoAAIdEAWrAARFwYAPAAP3kAgAAAQPAARGJwAESygAAAAIBAsABEaEAAAC9lmADwABOkgDAARGnAAAggLVbAWoAYAPAAP2heQBcAT4GPRzAARG0FsABEbEug+nAAFBIgo4BAAEnvZsAwAD+3D0cwAERyS69mQEAARbAARHggMABEdzAJU36gpTAAE6UAMAAUEs9HMABEe4WwAER6y6D6cAAUEiCjgEAASeZxgDAAP7cTsABEgPAARIOAAC8T2ADwAD60QEqRsABEhvAARJIwAESMwAAAICWYAPAAE4kABbAARJAgMABEjzAJU36KcAATpU+A0nAARJQgsABElTAJU6HPgE9HMABEm0WwAESai6D6cAAUEiCjgEAASeBiwDAAP7cPz0cwAESiC6awgEAAYPAARKOwCVOpADAAFBMPYrAARKcwCVOhyk9HMABErwWwAESuS6D6cAAUEiCjgEAASeZxwDAAP7cBsAAUFSAycABEs/AARLgwAETkAAAvQMBasABEtBgA8AA/eQCAAABA8ABEujAAROQAAAAAgECwAES/wAAAL2WYAPAAE6lAMABEwUAACCAtVsBagBgA8AA/aF5AFwBPgU9HMABExIWwAETDy6D6cAAUEiCjgEAASe9mwDAAP7cPRzAARMnLr2ZAQABFsABEz6AwAETOsAlT3OClMAATqcAwABQSz0cwAETTBbAARNJLoPpwABQSIKO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AEekYAPAAFFdwAEFygDAAP3xHMAAR9oWwABH0xbAAEfLFsAAR8cumfrAAFEahEivj5VLwABWbEgBAAEWwABH5xbAAEfdLod8wABRGZVLwABRAADAAP3xAD4BPYvAAEgPwCWhNR7AAEhBwABRxAUABRbAAEhbLpn6wABRGoDAAEhwwCWgEYHAAEiDwCWgHxzAAEiggsAASJbAJaAtSAEAAWrAAEitYAPAAFFdwAEFygDAAP3xHMAASOMWwABI3BbAAEjUFsAASNAumfrAAFEahEivj5VLwABWbEgBAAEWwABI8BbAAEjmLod8wABRGZVLwABRAADAAP3xAD01AAAAAQBgA8AAUPcBasAASQ9gA8AAUPd5IxzAAEkWhADAJaxYSAEAASsAACscwABJFoQAwCWsWJakAQABJMAASTECJ74Cg8AASSnAJaE1AMAAUPkBXEnAAEk+JcAASUmDwABJQsAloTVgA8AAUao+AT0cwABJhxbAAElzFsAASWkuh3zAAFEZqjjAAFEHVgEAARTAAEmLwCWhNQMBYAPAAFGqAMAA/Uw/QsAASbIASsAAScQBg8AAScvAJaE1BsAAUSKAzcAASdrAAEniwABMXAAAvfEAAAABA8AASfrAAExcAAAAAgICwABKAwAAAIHXYAPAAFVOAMAASg4AAACCTmADwABVTgAAYAPAAFVOAT4EScAAShclwABKHYDAAEobwCWtP2ADwABRqj4DTsAASj8AAACBdmADwABVTgBFwABKTQHAAEpWwABKWAAAYmADwAD8lwGTARzAAEpfg8AASl3AJa2bYwEAARbAAEpwFsAASmMUwABKYcAlrT8AAWADwABRqq7VwABRrWHAAP1rAMAA/cUBi8AASnjAJa2bHMAASnmDwABKeMAlrZtkAQABlADAAP29PgJOwABKj8AASpEAAJbIYAPAAFVOARzAAEqTLr3xAgACHMAASroWwABKrhTAAEqswCWtPwABYAPAAFGqrtXAAFGtSwEAAYPAAEq7wCWtmwDAAP1KgcAASr/AJa1PAMAAUSI9IxzAAErSgsAASsvAJa2FSAEAASsAwAD98YrAAErLwCWthYTAAErWwCWuESsBYAPAAFVOSsAASucBgsAASu7AJa2FP0nAAEsAJcAASwaBwABLBMAlrU9gA8AAUao+A07AAEsoAAAAgXZgA8AAVU4A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BsAmecICAWADwABVmQAAwABQ+QFcPRfAARciFsABFxsUwAEXGcAmecICAWADwABVmYJJwABVpoKUg8ABFynAJoFgg54/Pz0XwAEXTxTAARdNwCZ5wgIBYAPAAFWZvgkpwABVoT8/PRzAAReDgcABF3vAJnj3IAMAAybAAReGARbAAReGgsABF4TAJnnCgknAAFVVYAODfSbAAReQARbAAReQFsABF44ugk7AAFGlgknAAFVVYAODfRbAAReagsABF5jAJnnChUTAAFVpAAAAACZ4swAmhiIAAAABAsAAUaqAzcABF6zAARe7wAEblweoRAAAAWABwABVTgAABATAAFGsgM3AARgwwAEYNgmEVwFqwAEYEmADwAD95AJgA8AAVO4ABMAAUa2AzcABGG/AARh7Ca7VAF0DwAD9OwFgA8AAVU4ABMAAUa6AzcABGIbAARiOCYVEAGADwAD60QAEwABRr4DNwAEYnsABGKoJvqgAYAPAAPrRAAEFwABRu4DNwAEYr8ABGK/AARkFAAAAA8ABGLzAARkFAAAABAQEwAEYyQAABIRXYAPAAFTuAMABGNYAAASu1V0DwAD9OwFgA8AAVU4AwAEY6QAABIVEYAPAAPrRAMABGPgAAAS+qGADwAD60QAAYAPAAFGqAT8FCAHAAFGsgADAJobyCAHAAFGtgQDAJocCCAHAAFGuggDAJocZCAHAAFGvgwDAJocpCQHAARivwABVdwAAAAAIBsAAUbGAzcABGQrAARkPwAEaCAAAvgEAAAABA8ABGSPAARoIAAAAAQEBwAEZMgAAAK7VXQPAAP07AWADwABVTgAAXAE+AkXAARlGAcABGU/AARlRAABiYAPAAPyXAZMBHMABGViBwAEZVsAmh85jAQABFsABGWwWwAEZXy6u1cAAUa1hwAD9awDAAP3FAYnAARl0wCaHzhzAARl1gcABGXTAJofOZAEAAZQAwAD9vT4BPR7AARmBwABQ6wIAAhzAARmsFsABGaAurtXAAFGtSwEAAYHAARmtwCaHzgDAAP1KgMABGbHAJoesAEAcwAEZ7RbAARnmHMABGd6AwAEZ0cAmh6yVSQAAAADAAP0QYcAAzVdIAQABFsABGf2AwAEZ8MAmh6xhwAD9awDAAP27wAEZ0cABGgMABsAAUbKAzcABGg3AARoUwAEaOgACo/EAAAABA8AB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3wBOwACjwMAAo9IAAKl3XQPAAP07AWADwABVkAEcwACkCGrAAKPiXQPAAFrNAWADwABVkMABCEWhFAIAAhbAAKQMLqEgwABagYLAAKQTwCg/+wDAAFrPTsAApCPAAKQuAACHZWADwAD8lwEmwACkIwEcwACkMC6hFAAAAADAAFqOYAPAAPyXTsAApFrAAKRqAACoumADwAD8lwEWwACkeIDAAKRswCg/34dlnwlOwACkj8AApJQAAIC9YAPAAP3kARzAAKSWLqEUAAAAAMAAWo5OwACkt8AApMAAAIbsXQPAAP07AWADwABWuAEmwACktwEcwACkwi6hFAAAAADAAFqOXQPAAP07AWADwABWuD0cwACkzS6hnQEAARbAAKTkgMAApNjAKD/fh2WfCQDAAFqWScAApPUlwACk/ofAAKT5wChA+mADwABa2ErAAKURAD89HMAApSUWwAClHS6ESMAAU5updgcAB4PAAKUtwChAJRTAAKVDwChBHggAJsAApU0Bh8AApU3AKED6YAPAAP5+hMAApVPAKEBPhsAApW7AKEDUhcAApX/AKECkNQAAAAEAYAOfAAE1AAAAAQBgA58AAYHAAKWLwCg/7SMcwACllhQAwChCBQkASAEAASsAACsWwACllhQAwChCBQkAnUyfDQFgA58AIxzAAKWgFADAKEH6CQBIAQABKwAAKxbAAKWgFADAKEH6CQCHZZ8JAWADwAD8lwCp1wbAAFPvgOTAAKW0wAClxcAAplgAAMAAQBABasAApbVgA8AA/eQCAAABA8AApdvAAKZYAAAAAQEBwACl4gAAAJKFYAOfAAAAXAE+AT0cwACl9xbAAKXvLoRIwABTm6j/AwACasAApiVgA6oBwADfuyepegGpACqpqwbAAFPwgOTAAKZdwACmbsAApzoAAKKsAWrAAKZeYAPAAP3kAgAAAQPAAKZ/wACnOgAAAAEBAcAApoYAAACfkGADnwAAAFwBPgI9HMAAppguoTQBAAEnoqwAwABUED0cwACmxRbAAKa9LoRIwABTm6j/AwACasAApvxgA6oBwADfzSepfQGpACqpqwbAAFPxgOTAAKc/wACnUMAAqDcAAKLhAWrAAKdAYAPAAP3kAgAAAQPAAKdxwACoNwAAAAEBAcAAp3gAAACShWADnwAAAFwBPgI9HMAAp4UuoTQBAAEnouEAwABUED0cwACnwhbAAKe6LoRIwABTm6j/AwACasAAp/lgA6oBwADfzSepfQGpACqpqwbAAFPygOTAAKg8wACoTcAAqiUAAKKzAWrAAKg9YAPAAP3kAgAAAQPAAKhcwACqJQAAAAICAsAAqGMAAACitGADnwAAwACoeAAAAKKmYAOfAAAAXAE+Bz0cwACojC6hNAEAASeGjQDAAFQQScAAqKwhFsAAqMcWwACowBbAAKi5FsAAqLEuhEjAAFOblUupfIJJqmmfhqiLPgE9HMAAqOIuoqcBAAGBwACo/MAoREUAwABYTT9OwACpMsAAqToAAKFcXQPAAP07AWADwABVsgEmwACpMgEcwACpPC6hFAAAAADAAFqOXQPAAP07AWADwABVsj0cwACpRy6hFAAAAADAAFqOTsAAqXDAAKl7AACFSWADwABXNwEmwACpcAEcwACpfS6hFAAAAADAAFqOYAPAAFc3TsAAqaLAAKmwAACirV0DwAD9OwFgA8AAV10BJsAAqaIBHMAAqbIuoRQAAAAAwABajl0DwAD9OwFgA8AAV109HMAAqb0uoREBAAEcwACpyhbAAKnCLoRIwABTm6l7BAAEg8AAqePAKEUGhMAAqe/AKEU2gsAAqf7AKES3FsAAqhWAwACqB8AoRDeHZZ8JAKnZAMAAWosGwABT84DkwACqKsAAqjvAAKweAACi4gFqwACqK2ADwAD95AIAAAEDwACqWsAArB4AAAACAgLAAKphAAAAoj5gA58AAMAAqnIAAACixmADnwAAAFwBPgc9HMAAqoIuoTQBAAEnouMAwABUEE7AAKrPwACq1wAAoVxdA8AA/TsBYAPAAFWyASbAAKrPARzAAKrZLqEUAAAAAMAAWo5dA8AA/TsBYAPAAFWyTsAAqujAAKr2AADAAEAFYAPAAPyXASbAAKroARzAAKr4LqEUAAAAAMAAWo5gA8AA/JdOwACrD8AAqxoAAIVJYAPAAFc3ASbAAKsPARzAAKscLqEUAAAAAMAAWo5gA8AAVzdOwACrQcAAq08AAKKtXQPAAP07AWADwABXXQEmwACrQQEcwACrUS6hFAAAAADAAFqOXQPAAP07AWADwABXXUnAAKtcIRbAAKt3FsAAq3AWwACraRbAAKthLoRIwABTm5VLqXyCSappn4aoiz4BPRzAAKuSLqKnAQABgcAAq6zAKEYOAMAAWE0/PRzAAKvBLqERAQABHMAAq84WwACrxi6ESMAAU5upewQABITAAKvnwChGpoXAAKvzwChG1oLAAKwCwChGNoPAAKwLwChGdACp2QDAAFqLBsAAU/SA5MAArCPAAKw0wAC0gQAAv2ABasAArCRgA8AA/eQCAAABA8AArEjAALSBAAAAAwMDwACsVgAAAL9hYAOfAADAAKxsAAAAldJgA58AAMAArHoAAACdQ2ADnwAAAFwBPgo9HMAArIouoTQBAAEnv2AAwABUEE7AAKy5wACszgAAqOpgA8AA/n4BHsAArNDAAFQPAQABgMAArOjAKEfhAE7AAK0XAAAAoq1dA8AA/TsBYAPAAFddAE7AAK0xAAAAgL1gA8AA/eQATsAArT8AAACHZWADwAD8lwBOwACtYwAAAIVKYAPAAFY9AEnAAK11HMAArYCBwACtecAoR+9IAQABKwDAAP3xPglOwACtrsAArbYAAKFcXQPAAP07AWADwABVsgEmwACtrgEcwACtuC6hFAAAAADAAFqOXQPAAP07AWADwABVsj0cwACtxS6hFAAAAADAAFqOPYzAAK3kwChITybAAK3kARzAAK30LqEUAAAAAMAAWo5dA8AA/TsBYAPAAFddPY7AAK4BwChIeCbAAK4BARzAAK4OLqEUAAAAAMAAWo5gA8AA/Jc9jcAArhvAKEhnHMAAriIuoRQAAAAAwABajk7AAK47wACuRgAAhUlgA8AAVzcBJsAArjsBHMAArkguoRQAAAAAwABajmADwABXN0nAAK61JcAArr6FwACuucAoSGdgA8AAWtg+Az0cwACu2y6hFAAAAADAAFqOPRzAAK7/FsAArvcuhEjAAFObqQICAAJqwACvOGADqgHAAN+7J6kGAKmsSsAAr1wAPz0cwACvehbAAK9yLoRIwABTm6j/AwACasAAr7NgA6oBwADfzSepfQGpACqpqz2PwACv98AoSIkcwACwGBbAALAQLoRIwABTm6l7BAAEFMAAsCjAKEl1CQArFMAAsDrAKEi5CACGwACwQ8AoSHgAqdk+Bk7AALBnwACwbAAAgpRgA8AA/eQBHMAAsG4uoRQAAAAAwABajj2MwACwe8AoSE8mwACwewEcwACwiy6hFAAAAADAAFqOXQPAAP07AWADwABXXT2OwACwmMAoSHgmwACwmAEcwACw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A8AA/JcBJsAA1DIBHMAA1EIuoRQAAAAAwABajmADwAD8lz0cwADUTS6hFAAAAADAAFqOTsAA1G7AANR5AACHZWADwAD8lwEmwADUbgEcwADUey6hFAAAAADAAFqOYAPAAPyXTsAA1I3AANSSAACAvWADwAD95AEcwADUlC6hFAAAAADAAFqOTsAA1KPAANStAACiQWADwAD8lwEmwADUowEcwADUry6hFAAAAADAAFqOYAPAAPyXScAA1LohHMAA1M8WwADUvi6pbcAAU6FIAQABKwDAAP6NPgE9FcAA1ODAKGeACRzAANTqFMAA1ODAKGeACQCBBgEAAWrAANTtYAPAAPyXg10AwAD8sD9OwADVG8AA1SQAAIbsXQPAAP07AWADwABWuAEmwADVGwEcwADVJi6hFAAAAADAAFqOXQPAAP07AWADwABWuEnAANUxJcAA1ToUwADVNcAoZ1wIAGADwABa2D4CPRzAANVdFsAA1VUuhEjAAFObqQICAAJqwADVlGADqgHAAN+hJ6kGAKmsSsAA1bwAP07AANXVwADV6gAAqOpgA8AA/n4BHsAA1ezAAFQPAQABgMAA1gTAKGXCAD0cwADWHRbAANYVLoRIwABTm6lwCwALFMAA1jfAKGiSCwAUwADWVcAoaAYKABTAANZnwChngAkAFMAA1nrAKGdcCACFwADWiMAoZquEwADWmcAoZjYWwADWv4DAANa0wChlwodlnwmHwADW08AoZyyGwADW58AoZukWwADXB4LAANb+wChl3odlnwkWwADXGy6pbcAAU6EAqdY9F8AA1zIuqW0rwABToT0XwADXTy6hDSrAAFOeBsAAVACA5MAA123AANd+wADYFQAAv58BasAA125gA8AA/eQCAAABA8AA15fAANgVAAAAAgICwADXngAAAJ+QYAOfAADAANewAAAAnUNgA58AAABcAT4CPRzAANfALqE0AQABJ5V+AMAAVBA9HMAA1+ouoREBAAFqwADX+mADwABTjMABBtMAwABaiwbAAFQBgOTAANgawADYK8AA24QAAKI5AWrAANgbYAPAAP3kAgAAAQPAANg+wADbhAAAAAICAsAA2EUAAACiMGADnwAAwADYXwAAAJKFYAOfAAAAXAE+Bz0cwADYbC6hNAEAASeFVgDAAFQQTsAA2JbAANihAACpHGADnwABFsAA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AFUngOvAAKNAwACjRcAArekAAMAAQIjAAFTtAAAAAQPAAKNQwACt6QAAAAsKCsAAo14AAACFfWADwACJjwDAAKN4AAAAwABAgGADmw0AwACjogAAAMAAQIdgA5sNAMAAo8UAAACb1mADg30AwACj4gAAAKzqYAODfQDAAKQCAAAArPJgA4jpAMAApB8AAAC6GmADiOkAwACkOQAAAIQlYAPAAPrRAMAApGAAAADAAECCYAOIfgDAAKR+AAAAvqNgA8AA+tEAAcAApJwAAADAAECJYAPAAPrRAWrAAKS0YAPAAPrRAFwBPgdJwACkwhbAAKTqFsAApNwWwACk1RbAAKTOFsAApMYuhEivj5VLwABWbIJJoISeiqh/glCLJkrAAKT2AD9JwAClAyEcwAClHYHAAKUHwCk2okgBAAErAMAA/fE+AT2OwAClLsApNuwcwAClVIHAAKU+wCk2ooWTAQABhsAApWPAKTbsAJscP0nAAKV9IRzAAKWWgsAApYHAKTaySAEAASsAwAD98T4BPY3AAKWnwCk23hzAAKXLgsAApbbAKTayhZMBAAGFwACl2sApNt4Amxw/TsAApfnAAKYFAADAAECKYAPAAPrRASIhHMAAphkUwACmB8ApNwoIAEgBAAErAMAA/fEBFMAApiTAKTcrCgBOwACmSMAAplAAAJsZYAOI6QEjFMAAplLAKTgeCwCGwACmYMApNuyFwACmcMApNt4BYAOI6U7AAKaLwACmlQAAhOFgA4jpASMUwACml8ApOB4LAIXAAKalwCk23obAAKa0wCk27AFgA4jpScAApsgcwACm0oDAAKbMwCk2kr6hAgACFMAApuTAKThcDAAUwACm7cApOJENAADAAImTPgBJwACnRyKHwACnS8ApNvoAHMAAp2CAwACnWsApNpK+oQIAAhTAAKdywCk4kQ0AFMAAp33AKThcDAAAwACJkz4AScAAqCIiJcAAqC4UwACoJsApOFwMAGADiPQBJcAAqEoUwACoQMApOJENAGADiPQ+AD4GTsAAqPTAAKkHAADAAECLYAPAAP5+ASTAAKlWAxbAAKk0FsAAqSWDwACpFsApNsKFCoOFgL2DISeBahbAAKlQFsAAqUuDwACpPMApNsKAvYOBgL2It07AAKllwACpeQAAwABAjGADwAD+fgEkwACpygMWwACppxbAAKmYhMAAqYjAKTbQhQqDhYC9gyEngWoWwACpxBbAAKm/hMAAqa/AKTbQgL2DgYC9iLdOwACp2gAAACJgA5GYAE7AAKntAAAAhFhgA8AA/JcAScAAqf8cwACqFRTAAKoDwCk3CggASAEAASsAwAD98T4CPRXAAKoowCk6GBAcwACqWWrAAKoyXQORrwFhAwRgA8AA/n5gA4jpYAOI6WADwAD+fmADkZjAAHX0iC8EAAQUwACqdMApOW4OAIXAAKqUwCk23obAAKquwCk27BTAAKrJwCk5ww8AAJGzPRXAAKrnwCk6JhEWwACrA4PAAKr0wCk2woRYglk+Aj0VwACrJsApOhgQHMAAq1ZqwACrMF0Dka8BYQMFYAPAAP5+YAPAAP5+YAOI6WADiOlgA8AA/n5gA5GYwAB1cogvBQAFFsAAq4MUwACrccApNwoIAIC9iIIUwACrlcApOW4OAIXAAKu1wCk23obAAKvPwCk27BTAAKvqwCk5ww8AAJGzPRXAAKwIwCk6JhEWwACsJxTAAKwVwCk3CggAhFiCWT0cwACsSRbAAKxBLoRIr4+ergUABBTAAKxUwCk6GBAAFMAArF3AKTomEQBqwACsaWADwAD8lxUWwACsgoPAAKxzwCk2woRmg4IBglccwACtnDHAAKyeYAORtgEcwACtIRzAAKzjasAArLBdA5GvAWEDAWADwAD+fmADkZjAAHNbiC8BAAEWwACtBhbAAK0BhMAArPHAKTbQgL2DgYC9iLcAkbOCXwMAAxzAAK0uLsAAQHzAAFTtAQABhMAArTzAKTbQAMAAVSQWwACtdoTAAK1mwCk20IRYgllqwACtgmADwAD8lxUAkZ9kAQABHMAArawuwABAgQIAAhTAAK29wCk3GgkAg8AArc/AKTbCAMAAVSsAwAD9XcAAVnYGwABVKIDrwACuU8AArljAAMidAADAAEBoAAAAAQPAAK5rwADInQAAAAQEBMAArnIAAACFfWADwACJjwDAAK6DAAAAm9ZgA4QSAMAArqMAAACs6mADhBIAwACuuQAAAL6jYAPAAPrRAABgA8AA+tEBPhRAHMAAruwWwACu54HAAK7YwCk82IJrhBVIAQABasAArv1gA4RShNwAwAD98cAArtjAAK8DAEAcwACvJhbAAK8hgsAArxHAKTzmgmuEFUgBAAFqwACvN2ADhFKE3ADAAP3xwACvEcAArz0ATsAAr0nAAK9XAADAAEBnYAPAAPrRASpOwACvccAAr4IAAMAAQH5gA4SuARbAAK+TgcAAr4TAKTzYgm6EF07AAK+uwACvwAAAwABAf2ADhK4BFsAAr9KCwACvwsApPOaCboQXTsAAr+7AALAEAADAAECAYAObDQEcwACwBi7AAEB9wABU7QYABoDAALAtwCk8yIHAALA8wCk82ILAALBUwCk85oXAALBtwCk9kIbAALCHwCk9toPAALCiwCk89ADAAFUlTsAAsMfAALDcAADAAECHYAObDQEcwACw5i7AAECGwABU7QIAAoDAALEDwCk8yIHAALEKwCk82ADAAFUmPRzAALEgLsAAQIjAAFTtCgAKgMAAsTXAKTzIh8AAsUTAKT3cFMAAsWPAKT48CACBwACxgcApPNiCwACxmcApPOYWwACxw4XAALGywCk9kIVJhLcWwACx6YbAALHXwCk9toVJhLcqK4PAALIawCk89ADAAFUnScAAsjEcwACyYhbAALJbFsAAskaFwACyNcApPZCEx4S1YcAA/WtjAQABFsAAspMWwACyfobAALJswCk9toTHhLVhwAD9awDAAP3FPgE9HMAAsqsWwACyoy6ESK+Pnq4FAAQcwACy6mrAALLBXQORrwFhAwJgA8AA/n5gA8AA/n5gA5GYwAB0H4gvAgACJAADFsAAsygWwACzGYHAALMKwCk82IUKg4WAvYMhJ4FqFsAAs1kWwACzVIHAALNFwCk82IC9g4GAvYi3JAADFsAAs5EWwACzgoLAALNywCk85oUKg4WAvYMhJ4FqFsAAs8MWwACzvoLAALOuwCk85oC9g4GAvYi3AJGzFsAAs+WBwACz1sApPNiEWIJZasAAs/tgA8AA/JcVFsAAtB6BwAC0D8ApPNiEZoOCAYJXHMAAtTExwAC0OmADkbYBHMAAtL0cwAC0f2rAALRMXQORrwFhAwFgA8AA/n5gA5GYwABzW4gvAQABFsAAtKIWwAC0nYLAALSNwCk85oC9g4GAvYi3AJGzgl8DAAMWwAC02oLAALTKwCk85oRmg4IWwAC1C4LAALT7wCk85oRYgllqwAC1F2ADwAD8lxUAkZ9kAQABHMAAtUEuwABAgQIAAoPAALVSwCk89IHAALVkwCk82ADAAFUrAMAA/V3AAFZ2P0nAALWAHMAA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wADMpcApTpSBwADMrMApTqSCwADMvMApTrIrK4PAAMzZwClOwADAAFUlTsAAzP3AAM0SAADAAECHYAObDQEcwADNHC7AAECGwABU7QIAAoDAAM05wClOlIHAAM1AwClOpADAAFUmTsAAzV7AAM1rAACs8mADiOkBFsAAzXyBwADNbcApTqSFEIORTsAAzZXAAM2jAAC6GmADiOkBFsAAzbWCwADNpcApTrKFEIORTsAAzdnAAM3rAADAAECCYAOIfgE1AAAAAQBdA8AA/TsBYAOIfgE1AAAAAQBgA4SuARbAAM4EgcAAzfXAKU6kgm6DjyMcwADODhQAwClP1QgASAEAASsAACsWwADODhQAwClP1QgAhMeEtQFdA8AA/TsBYAOIfiMcwADOJBQAwClPwwgASAEAASsAACscwADOJBQAwClPwwgAlmUBAAGTAMAA/RgBYAOIfk7AAM47wADORwAAhCVgA8AA+tEBNQAAAAEAYAPAAPrRATUAAAABAGADiH4BFMAAzknAKU+vCAAjHMAAzlwUAMApUHkJAEgBAAErAAArFsAAzlwUAMApUHkJAIQliJIBYAPAAPrRIxzAAM5oFADAKVBsCQBIAQABKwAAKhQAwClQbAkAAWADwAD60UnAAM52IiEUwADOe8ApUFgJAAAlwADOmYHAAM6KwClOpGADg5w+AT0VwADOq8ApUFgJFsAAzsgUwADOucApTqQBAWADg5yEJYOrP0nAAM7fIiEUwADO5MApUFgJAAAlwADPA4LAAM7zwClOsmADg5w+AT0VwADPFcApUFgJFsAAzzMUwADPI8ApTrICAWADg5yEJYOrPz0cwADPSi7AAECIwABU7QsACoDAAM9fwClOlITAAM9uwClO24XAAM+NwClPK4HAAM+rwClOpILAAM/DwClOsobAAM/cwClPZ4fAAM/ywClPixTAANAJwClQWAkAFMAA0B7AKU+vCACDwADQOcApTsABwABAiSnAAFUnSsAA0HUBFMAA0HzAKVBYCQAGwABVK4DrwADQ4MAA0PXAANVbAADAAECBAAAAAQPAANEFwADVWwAAAAICAsAA0RIAAAC+o2ADwAD60QDAANErAAAAm9ZgA4N9AABdA8AA/TsBYAORtgE+AknAANFBHMAA0WMWwADRVIHAANFFwClSPoUKg4VIAQABFsAA0WYumfrAAFT+AMAA/fE+AUrAANGOAWrAANGVXQPAAP07AWADkbbAAOXdP0nAANGpgMAA0a3AKVIuPgFKwADR4AExwADR52ADkbYBHMAA0kEcwADSHGrAANHxXQORrwFhAwFgA8AA/n5gA5GYwABSJYgvAQABFsAA0i4WwADSKi6Z+sAAVP6AvYMhAJGzgl8DAAMWwADSUhbAANJOLpn6wABU/oRmgykWwADSXxbAANJbLpn6wABU/oRYglkWwADSdBbAANJvFsAA0msumfrAAFT+gL2DIWHAAP6CAJGfPgFJwADSmBbAANKgFsAA0pwumfrAAFT+hOmDOT4ETsAA0u/AANL4AADAAECTYAPAAP5+ARbAANMJFsAA0v4WwADS+i6Z+sAAVP6E84M8hPeDQE7AANMnwADTMQAAwABAlGADwAD+fgEWwADTRBbAANM3FsAA0zMumfrAAFT+hPSDPYC9gyFOwADTVsAA02YAAMAAQJVgA8AA/JcBFsAA04sWwADTbBbAANNoLpn6wABU/oT5g0JhwAD+gkrAANObATHAANOiYAORtgEcwADUFBzAANPiasAA065dA5GvAWEDAmADwAD+fmADwAD+fmADkZjAAEhuiC8CAAKDwADT8MApU6+CwADT+8ApU3sAkbOCXwMAAxbAANQlFsAA1CEumfrAAFT+hGaDKRbAANQyFsAA1C4umfrAAFT+hFiCWYTAANQ+wClT4wCRnz4BSsAA1JoBMcAA1KFgA5G2ARzAANUFHMAA1N5qwADUrV0Dka8BYQMBYAPAAP5+YAORmMAAa2OILwEAARbAANTwFsAA1OwumfrAAFT+gL2DIQCRs4JfAwADFsAA1RYWwADVEi6Z+sAAVP6EZoMpFsAA1SMWwADVHy6Z+sAAVP6EWIJZFsAA1TgWwADVMxbAANUvLpn6wABU/oC9gyFhwAD+ggCRnwbAAFUEgOvAANVgwADVa8AA1hwBAKGkAAAAAQPAANV9wADWHAAAAAAAAABgA8AA/n4BPgFKwADVgwEjIhbAANWKLoT2wABU+gAhFsAA1aEuqVbAAFT7JMAA1hIDFsAA1dAWwADVxi6E4cAAVPGhpMAAVzwnh10WwADV9hbAANXqLoTiwABU/KGkwABXPBbAANYULoC9wABXUQFgA8AA/n4GwABVLIDrwADWIcAA1ibAANjCAACqQAAAAAEDwADWO8AA2MIAAAAAAAAAXAE+AkAWwADWTxbAANZLLpn6wABU/oTsgzvAANZLwADWYQBGwADWaMAA1p/AANZ1AAAAmQhgA8AAVU4AFsAA1pcWwADWkRbAANaELoTkwABU9J8HqO4pwAD9kD4BScAA1qciIRbAANa4gMAA1qzAKVZDhJPAAFVrACIWwADW3oDAANbSwClWQ4QjwABVWwEWwADW94DAANbrwClWQ4eRwABVWj4BPRzAANcRLp6uBAADHMAA12BqwADXKV0Dka8BYQMBYAPAAP5+YAORmMAARPuILwEAARbAANduLqGkwABVBACRsxbAANeOLodlwABW2GrAANemYAPAAPyXFQGCVzHAANfFYAORtgEcwADYRxzAANgTasAA19VdA5GvAWEDAWADwAD+fmADkZjAAEVgiC8BAAEWwADYIS6hpMAAVQQAkbOCXwMAAxbAANh3gMAA2GvAKVZDhGbAAFVTFsAA2IyAwADYgMApVkOHZcAAVVRqwADYmGADwAD8lxUAkZ+vkj8GwABVLYDrwADYx8AA2MzAANwnAACqQQAAAAEDwADY4cAA3CcAAAABAQHAANjxAAAAh3xgA5vxAABcAT4DTsAA2Y/AANmZAACE4WADiSQBFsAA2akWwADZnxbAANmbLpn6wABU/oThgyuGrYmdTsAA2cvAANnYAACE8WADmw0BHsAA2eebFAEAARbAANn5FsAA2fUumfrAAFT+hOKDLABGwADaC8AA2lLAANoaAAAArhVgA4mXABzAANo5FsAA2iwWwADaKC6Z+sAAVP6E9IM9hO0AAAAAg1M+Ak7AANpowADacgAAnXNgA4kkARbAANqrHMAA2ouCwADafsApWAeE8gEAAYPAANqfwClYQQCbHYatiZ1JwADawiEcwADbBBzAANrQgMAA2sbAKVfDhYICAAKBwADa5MApV9cWwADa+YTAANrvwClYdITviSoAm/xIAQABhMAA2xHAKVh0AIkyPgE9HMAA2y4WwADbJi6ESK+Pnq4EAAQcwADbdGrAANtGXQORrwFhAwNgA4jpYAOI6WADiOlgA5GYwABoj4gvAwADgcAA25PAKVfXhMAA257AKVh0FsAA27kWwADbrRbAANupLpn6wABU/oTigyyGrYmdAJGzFsAA29sWwADb1y6Z+sAAVP6EWIJZasAA2/NgA8AA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wABVL4DrwADjCcAA4xbAAPG1AADAAECZAAAAAQPAAOMrwADxtQAAAAICAsAA400AAACELWADwABWMADAAONmAAAAht1gA5ufAABgA4k2AT4MTsAA45nAAOOrAAChhWADwABVPwEWwADjtYDAAOOtwClgv6GFwABWMk7AAOPZAAAAgklgA4SuAEnAAOPlHMAA5AIWwADj+4LAAOPpwClg5oJJwABVRkgBAAErAMAA/fFKwADkCwErP0nAAOQcJcAA5DkWwADkMoLAAOQgwClg5oJJwABVRmADwABVzj4CTsAA5GXAAORzAADAAEBXYAPAAFXOASbAAORlARbAAOSHgsAA5HXAKWDmgknAAFVGYAPAAFXOPYvAAOSVwClhDhbAAOSshMAA5J7AKWFzgm7AAFXZScAA5MEiJcAA5N4WwADk14LAAOTFwClg5oJJwABVRmADqNcAIhbAAOUYFsAA5RGCwADk/8ApYOaCScAAVUaHkcAAVVoBFsAA5U4WwADlR4LAAOU1wClg5oJJwABVRoQjwABVWz4CTsAA5XTAAOWCAADAAEBXYAOo1wEmwADldAEWwADlloLAAOWEwClg5oJJwABVRmADqNc9i8AA5sDAKWEOFsAA5t4WwADm14TAAObJwCliLYJqqNqCboOPScAA5vMlwADnEBbAAOcJgsAA5vfAKWDmgknAAFVGYAOpRj4BSsAA6A0BKz4BPR7AAOgtnWoEAAQkwADoVAEWwADoTILAAOg6wClg5oJJwABVRifAAECZFsAA6Hkuh2XAAFbYFsAA6IUuhGbAAFbZAE7AAOipwADotwAAhSxdA8AA/TsBYAOI6QEWwADo6x7AAOjBki4BAAEWwADo44DAAOjbwClgv4JJwABWBwCFLJI1TsAA6QvAAOkeAADAAECaYAOJNgEWwADpJ4PAAOkgwClhDoVKhMVJwADpOSIhHMAA6UuEwADpPcApYvRIAQABKwDAAP1lACEcwADphxbAAOmAFsAA6XGFwADpXsApYzWExYk4YcAA/WtIAQABFsAA6ZiEwADpisApYvRhwAD9awDAAP27PgI9HMAA6agunq4DAAMcwADp6mrAAOm+XQORrwFhAwFgA8AA/JdgA5GYwACNe4gvAQABFsAA6hoWwADqC4XAAOn4wCljNYTFiThhwAD9awCRsxbAAOo/gsAA6i3AKWDm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CwLAAFYRgPLAAEp9wABKg8AAamwDqNMAAAFgAcAAVc4AAAcEwABWE4DywABKxMAASs8JmQgAYAODzwAEwABWFIDywABK3sAASvEJqWwAYAPAAPyXAATAAFYVgPLAAEr7wABLGxjAAEDcAGADwAD60QEqBMAAVhaA8sAASzHAAEtBGMAAQN0AYAOEfgErBMAAVheA8sAAS13AAEtzGMAAQN4AYAOEjQErBMAAVhiA8sAAS37AAEuPGKFlAGADnwABKwTAAFYZgPLAAEuzwABLvxio7wFqwABLlWADwAD95AJgA8AAVhEBKwEFwABWL4DywABLxMAAS8TAAE6pAAAAA8AAS9bAAE6pAAAADAsMwABL9AAAAIbsXQPAAP07AWADwABWuADAAEwIAAAAokFgA8AA/JcAwABMJQAAAIVJYAPAAFc3AMAATD4AAACAvWADwAD+fgDAAExkAAAAoq1dA8AA/TsBYAPAAFddAMAATJYAAAChXF0DwAD9OwFgA8AAVbIAwABMugAAAMAAQFBgA6l5AMAATNUAAACoumADwAD8lwDAAEzwAAAAh2VgA8AA/JcAwABNBwAABKlsYAPAAPyXAMAATSYAAACovGADwAD8lwDAAE1DAAAAqW1gA8AA/n4BagBgA8AA/aF5AGADwABWEQE/AwgBwABWFBQAwCnrYwkACADAAFYTNcAATXAAAAEAYAODzwEfwABNcIPuAgABKwGEZjUAAAABAGADqXkBhsAATYvAKeszIxzAAE2cFADAKevXDABIAQABKwAAKxbAAE2cFADAKevXDACEZqmEAWADwAD+/zUAAAABAFsBF8AATbEUwABNr8Ap67sMAITYh8AATcPAKetDg9E1AAAAAQBbARfAAE3fFMAATd3AKeu7DACEWBTAAE3swCnrUwgAglk1AAAAAQBbARfAAE4DFMAATgHAKeu7DACE2RTAAE4TwCnrcwoAg38UAMAp67sMAAkAwABOKsAAVfgJAAmAwABOMMAp6r6BwABOOsAp6tWCwABORcAp6uWDwABOUcAp6vWEwABOV8Ap6wWFwABOZsAp6xyGwABOe8Ap6zMUwABOjMAp61MIABTAAE6YwCnrgwsAABIGwABWG4DywABOrsAATtHAAE7vAQCejgFqwABOr2ADwAD95AIAAAEDwABO2MAATu8AAAAAAAAAYAPAAFYR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AMAAV5AGwABYoIEDwACll8AApZzAAKW+AADAAEFVAAAAAQPAAKWvwAClvgAAAAEBAcAApbYAAACShWADnwAAAFwBPgAGwABYoYEDwAClw8AApcjAAKYxAACjmwAAAAEDwACl2cAApjEAAAADAwPAAKXgAAAAo5xgA58AAMAApfIAAACieWADnwAAwACmAwAAAJ1DYAOfAAAAXAE+AT0cwACmEy7AAEEJAQABJ4ZZAMAAV5AGwABYooEDwACnZ8AAp2zAAKe+AACiZQAAAAEDwACngsAAp74AAAADAwPAAKeSAAAAImADkZgAwACnoQAAAKAmYAOfAADAAKezAAAAnUNgA58AAABcAT4ABsAAWKOBA8AAqLrAAKi/wACpKAAAwABBVgAAAAEDwACoz8AAqSgAAAABAQHAAKjbAAAAkoVgA6GrAABcAT4BPRzAAKjoLqJlAwADFsAAqQWAwACo/8Aq64uCYaGvgMAAqRfAKuuLgMAAqR7AKuuLAMAAWKIGwABYpIEDwACpLcAAqT7AAKnVAACtZgFqwACpLmADwAD95AIAAAEDwACpUcAAqdUAAAAEBATAAKlhAAAAImADkZgAwACpcAAACIRgYAOfAADAAKl+AAAAn45gA8AA/JcAwACpkAAAAGFgA8AA/JcAAFwBPgE9HMAAqZ4uomUDAAOAwACptcAq7AmBwACpvsAq7BaBwACpyMAq7BYAwABYogbAAFilgQPAAKsSwACrF8AAq4MAAKPbAAAAAQPAAKstwACrgwAAAAICAsAAqzQAAACShWADnwAAwACrQwAAACJgA5GYAABcAT4BPRzAAKtSLqJlAwADgcAAq2nAKuysgMAAq3LAKuyegMAAq3nAKuyeAMAAWKIGwABYpoEDwACriMAAq43AAKvDAACiEQAAAAEDwACrmcAAq8MAAAABAQHAAKugAAAAkoVgA58AAABcAT4BPRzAAKutLsAAQQkBAAEnohIAwABXkAbAAFingQPAAKyuwACss8AArN8AAMAAQVcAAAABA8AArNvAAKzfAAAAAAAAAFwBPgAGwABYqIEDwACuvsAArsPAAK81AADAAEFYAAAAAQPAAK7dwACvNQAAAAICAsAAruUAAADAAEFZYAPAAP5+AMAArvoAAADAAEFaYAPAAPyXAABcAT4BPRzAAK8RLsAAQQkBAAEnwABBWwDAAFeQBsAAWKmBA8AAsH/AALCEwACw3gAAwABBXAAAAAEDwACwmsAAsN4AAAAEBATAALCoAAAAwABBXWADnwAAwACwugAAAIMpYAOfAADAALDIAAAAoT1gA58AAMAAsNYAAACShWADnwAAAFwBPgAGwABYqoEDwACxVMAAsVnAALF1AADAAEFeAAAAAQPAALFxwACxdQAAAAAAAABcAT4AAAAqk0YAKpNzACqTqAAqk90AKpQQACqUbwAqlMAAKpTzACqVRAAqlaMAKpXUACqWMwAqlmQAKpaVACqW0AAqlwEAKpdIACqXhwAql/QAKpglACqYbgAqmLUAKpkKACqZawAqmaYAKpn5ACqaNgAqmosAKprUACqbDwAqm2IAKpufACqb/gAqnDEAKpx4ACqcqwAqnNIAKp0pACqdWgAqnaEAKp3TACqeLwAqnmAAKp69ACqe7gAqnzUAKp9mACqfrQAqn+AAKqA/ACqgcgAqoMMAKqEXACqhXAAqoasAKqIIACqiawAqovwAKqNPACqjjgAqo/sAKqSKACqkzwAqpRQAKqVZACqligAqpeEAKqYmACqmVwAqpp4AKqbzACqnOAAqp2kAKqeuACqn3wAqqCYAKqhXACqonAAqqM0AKqkSACqpQwAqqaIAKqnnACqqKgAqql0AKqquACqq4QAqqz4AKquDACqrvAAqrAUAKqxYACqs4wAqrSIAKq11ACqtygAqrgkAKq5eACqunQAqrv4AKq87ACqvkAAqr80AKrAiACqwYQAqsMIAKrEjACqxeAAqsbcAKrIMACqySwAqsroAKrMdACqzWgAqs60AKrPsACq0PwAqtHwAKrTdACq1MAAqtW8AKrXCACq2FQAqtlIAKranACq25AAqt1UAKreaACq37wAquEQAKribACq47gAquTsAKrmQACq5zwAqujIAKrqTACq60AAqux0AKruCACq71wAqvAgAKrxbACq8oAAqvScAKr2yACq98QAqvkYAKr6DACq+8gAqvzEAKr+iACq/4QAqwEIAKsCBACrBAAAqwT8AKsGgACrB3wAqwkAAKsKhACrDAgAqw1cAKsO4ACrEKQAqxIoAKsTJACrFHAAqxVsAKsW8ACrF+QAqxmoAKsapACrHDAAqx20AKsesACrIDQAqyGQAKsi3ACrI9gAqyZ8AKsnuACrKXQAqypwAKsr9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hz0cwABKORbAAEowLsAAQYDAAFi9wABBnQIAAoLAAEpewCsCtCTAAEqMAifAAEGeFsAASoCCwABKe8ArArSHZZ8JAMAAi9FKwABKlQEcwABKnC7AAEGbAQABgsAASrTAKwK0AMAAWQY/PRzAAEsZFsAASxAuqfjAAFi0wABBSwEAAYLAAEstwCsCtADAAFhASsAASzgBHMAASz8uwABBnwEAAYDAAEtfwCsCaADAAFmLBsAAWMmBBMAAS+fAAEvtwABNiAAAwABBoAAAAAEDwABMC8AATYgAAAACAgLAAEwSAAAAamADnwAAwABMHwAAAJ2fYAOfAAAAYAOfAAE+A07AAEw0wABMPQAAqI1gA58AARbAAExFgMAATD/AKwdRg7WfG0PAAExPIRzAAExfgsAATFbAKwd1SAEAAYHAAExiwCsHXgDAAP3xPgJJwABMcx7AAEx3wABaNAIAAieEKYLAAEyMwCsHdQA+Aj0cwABMoS7AAEGhAgACgsAATL/AKwd1gcAATMnAKwdeAMAAWMpKwABM2wGCwABM4sArB3U+AT0cwABNFy7AAEGiAgACgsAATTPAKwd1gcAATT3AKwdeAMAAWMs9isAATVXAKwd1FsAATWmCwABNYMArB3WDtZ8bSsAATXkBKwbAAFjKgQTAAE3QwABN1cAATsQAAMAAQaEAAAABA8AATfLAAE7EAAAAAgICwABN+QAAAGpgA58AAMAATgYAAACdn2ADnwAAAFwBPgJOwABOG8AATiQAAKiNYAOfAAEWwABOLIDAAE4mwCsIioO1nxtDwABONiEcwABORoLAAE49wCsIq0gBAAGBwABOScArCJcAwAD98T4CPRzAAE5sLsAAQaICAAKCwABOiMArCKuBwABOksArCJcAwABYyz2KwABOosArCKsWwABOtoLAAE6twCsIq4O1nxsGwABYy4EEwABPNcAATzrAAFKXAADAAEGiAAAAAQPAAE9VwABSlwAAAAICAsAAT1wAAACojWADnwAAwABPbAAAAMAAQaNgA58AAABcAT4BScAAT4IiHsAAT4bAAFo0AgACJ4QsgMAAT5jAKwljAAAewABPpcAAWjQCAAInmg6BwABPt8ArCXEAPgE9HMAAT9AuwABBnAIAAoDAAE/nwCsJY2rAAE/3YAORo5cBAMAAWYdJwABQFh7AAFAawABaNAIA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nw0AwACLt0nAAKywIhzAAKy+FsAArLmGwACstMArSImCa58YSAEAAWrAAKzBYAPAAPyXwACbAgDAAP27ABzAAKzyFsAArO0WwACs6IbAAKzjwCtIiYO1nxuCa58YSAEAAWrAAKz1YAPAAPyXwACbAgDAAP27PgI9iMAArT/AK0UMHMAArUcuwABB5gMAA4DAAK1qwCtFDBzAAK2easAArYddA5GvAWEDAWADwAD+fmADkZixlogvAQABJ4CnAJGzH8AArcae/wIAAmrAAK3fYAOfSMAAs+YWwACt64bAAK3mwCtIiYdlnwkAAMAAWRdCwACuBQE+AT2IwACuLsArRQwcwACuNi7AAEHiAgACgMAArkfAK0UMgsAArk7AK0UzAMAAWRNCwACudAA/PYjAAK6JwCtFDITAAK6RwCtFvkAewACuqMAAWjQCAAIngyaAwACutsArRQwAwACuqMAArrwAPRzAAK7MFsAArsMuqfjAAFi0ou0EAASDwACu4MArRZ+CwACu8MArRTOAwACu98ArRQyBwACu/sArRRoAwABXyUrAAK8JAYDAAK8QwCtFDAbAAFjqgQTAAK99wACvhcAAsOIAAMAAQd8AAAABA8AAr5zAALDiAAAAAQEBwACvqAAAAIJrYAPAAFoWAABgA5GYAT4CScAAr7QcwACvvYDAAK+4wCtLHUgBAAFqwACvy2ADwABaFsABC8wAwAD98T4BSsAAr+YBasAAr/NgA5GjwABoYUnAALAfIhzAALAogMAAsCPAK0sdSAEAAWrAALA2YAPAAFoWwAEGgADAAP3xARzAALBWgMAAsFHAK0sdSAEAAWrAALBkYAPAAFoWwAEGaADAAP3xPgFKwACwegFqwACwh2ADkaPAAGdWP0rAALCxAWrAALC+YAORo8AAZj4GwABY64EEwACy28AAsuHAANDHAADAAEHlAAAAAQPAALL1wADQxwAAAAMDA8AAswMAAACShWADnwAAwACzHgAAAMAAQedgA8AAWboAwACzOAAAAKLWYAPAAFoWAABgA58AAT4nQCEcwACzX4HAALNRwCtMK0gBAAErAMAA/fHAALNRwACzZgA9iMAAs23AK0wdHMAAs3Uuv6wBAAGAwACzh8ArTB0AwABY3U7AALOZwACzngAAg7VgA58AARbAALOmgMAAs6DAK0wdg7WfG07AALO2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WjQCAAIngKeEwADZQsArZI4APgJJwADZUyEewADZWMAAWjQCAAInhteEwADZZsArZI4APgM9HMAA2Y8uwABBnAIAAoTAANm1wCtkjhzAANnYasAA2cFdA5GvAWEDAWADwAD+fmADkZixlogvAQABJ4bXAJGzAMAAWYc9jMAA2irAK2SOFsAA2jeCwADaMcArY/mdTJ8NQ8AA2kshHMAA2l0WwADaWIDAANpSwCtj0oO1nxtIAQABhMAA2mDAK2SOAMAA/fE+AT2IwADadMArY9IWwADagoDAANp8wCtj0oO1nxs/QsAA2qYAPz2IwADau8ArY9KEwADaw8ArZI5JwADa0xzAANrmg8AA2tfAK2RwSAEAAZMAwAD9uz4DPRzAANr0LsAAQeYDAAOAwADbEcArY9JqwADbKGADkaOvFR/AANtWnvUEAARqwADbhGADn0jAALBgJwAWwADbnxbAANuagMAA25TAK2PSg7WfG4dlnwmTAADAAFkXPYjAANu2wCtj0hzAANvILsAAQeUDAAOAwADb3cArY9JqwADb+GADwABZusAAxAKBwADcB8ArY+AAwABY6z2LwADcFsArZHAcwADcFIPAANwWwCtkcGQBAAGUAMAA/b0/PYjAANwwwCtj0hbAANw+gMAA3DjAK2PSg7WfG0AewADcT8AAWjQCAAInhteAwADcXcArY9IAwADcT8AA3GMAPRzAANxzFsAA3GouqfjAAFi0ot0DAAODwADcj8ArZHCCwADcn8ArY/mAwADcpsArY9IAwABYJErAANyyAYDAANy5wCtj0gbAAFjugQTAAN0WwADdHMAA3jAAAMAAQaoAAAABA8AA3SrAAN4wAAAAAwMDwADdMQAAAJKFYAOfAADAAN1KAAAAgldgA8AAWc0AwADdawAAAMAAQfRgA8AAWc0AAGADnwABPgM9iMAA3YbAK2frHMAA3Y4uwABBrwIAAoDAAN2fwCtn64HAAN2mwCtn+QDAAFkCQ8AA3bQewADdu8AAWjQCAAIngWoWwADdz4DAAN3JwCtn64O1nxsAPgE9iMAA3d7AK2frHMAA3eYuwABB9QIAAoDAAN35wCtn64LAAN4AwCtoCQDAAFjwSsAA3iABgMAA3ifAK2frBsAAWO+BBMAA3oDAAN6GwADfZAAAwABBzgAAAAEDwADem8AA32QAAAACAgLA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ARgswAEYMQAAgL1gA58AARbAARg5gcABGDPAK4vwg7WfG0nAARhDIhbAARhMgsABGEfAK4wLnSefDwAhHsABGF3AAFo0AgACJ5oUgsABGGzAK4wLAD4BPYnAARh7wCuL8ILAARiDwCuMCz4BPYrAARicwCuMCys9icABGLPAK4vwHMABGN4ewAEYu8AAi94CAAKBwAEY0cAri/ApAMAAQdUCAAKBwAEY7cAri/AuAMAAi/Q9HMABGQgWwAEY/y6p+MAAWLS/uwIAAoDAARkiwCuLtoLAARk0wCuMCwDAAFesTsABGUXAARlPAACi9mADnwABFsABGVeBwAEZUcAri/CDtZ8bScABGWEhHsABGWbAAFo0AgACJ5oUg8ABGXXAK4zuAD4BScABGZsiIh7AARmfwABaNAIAAieaEIPAARmzwCuM7gABHsABGcvAAFo0AgACJ5oRg8ABGeLAK4zuAAEewAEZ+sAAWjQCAAInmg+DwAEaC8ArjO4APgE9HMABGiEuwABBnAIAAoPAARpFwCuM7hzAARpuasABGlZdA5GvAWEDAWADwAD+fmADkZi0HYgvAQABJ5oUAJGzAMAAWYc+Aj0cwAEamy7AAEGcAgACgcABGr/AK4vwHMABGuhqwAEazF0Dka8BYQMBYAPAAP5+YAORmLCXiC8BAAEnmhQAkbMAwABZhz2LwAEbBsArjO4cwAEbGxbAARsSLsAAQYDAAFi9wABB2gIAAoHAARsywCuL8GrAARtBYAOeQ8AAqFIAwACL0j9OwAEbYcABG2oAAMAAQdJgA8AAi+ABHsABG2zAAIvdAgACg8ABG3jAK4zuKQA9icABG47AK4vwHMABG5+EwAEblsArjlXAAEHFAgACg8ABG7DAK4zuLgDAAIvnScABG8YhHsABG8vAAFo0AgACJ5nmFsABG9+BwAEb2cAri/CDtZ8bAD4DTsABHAbAARwLAACDtWADnwABFsABHBOBwAEcDcAri/CDtZ8bQUPAARwfIRbAARwshcABHCfAK47anamfDj4BScABHD0iIiIiHsABHEHAAFo0AgACJ4CnhcABHE/AK47aAAEewAEcZMAAWjQCAAInmhCFwAEceMArjtoAAR7AARyNwABaNAIAAieaEYXAARykwCuO2gABHsABHLnAAFo0AgACJ5oUhcABHMjAK47aAAEewAEc3cAAWjQCAAInmg+FwAEc7sArjtoAPgQ9HMABHXEuwABBjQIAAoXAAR2RwCuO2mrAAR2dXQORrwFhAwFgA58AYAORmMAAkooAwABZiD2JwAEdwcAri/CFwAEdycArjto9jcABHdnAK47aFsABHeaBwAEd4MAri/CDtZ8bScABHfYWwAEd/4XAAR36wCuO2p0nnw8+Aj2JwAEeG8Ari/CFwAEeI8Arjto9jcABHjXAK47aFsABHkKBwAEePMAri/CDtZ8bPz4BQsABHm8APRzAAR6OLsAAQfYDAAOBwAEemsAri/ArJ8AAQhAAwABZET89icABHwbAK4vwHMABHw4uwABB/wIAAmrAAR8uYAPAAFoIwAEH/YHAAR85wCuL8ADAAFkcPRzAAR9OFsABH0UuqfjAAFi0v74DAAOAwAEfZsAri7aDwAEfeMArjO6BwAEfg8Ari/AAwABXrUrAAR+PAYHAAR+WwCuL8AbAAFkAgQTAAR+kwAEfqsABIQkAAMAAQhEAAAABA8ABH7nAASEJAAAAAQEBwAEfwAAAAJKFYAOfAAAAYAOfAAE+BE7AAR/TwAEf2AAAg7VgA58AARbAAR/ggMABH9rAK5Eig7WfG0nAAR/qIRzAAR/4FsABH/OBwAEf7sArkTmCa58YSAEAAWrAAR/7YAPAAPyXwABevgDAAP27PgI9HMABIBEuwABBjQIAAoHAASAxwCuROWrAASA9XQORrwFhAwFgA58AYAORmLUMAMAAWYg9icABIFzAK5E5HMABIGwWwAEgYy7AAEGAwABYvcAAQhICAAKAwAEgeMArkSIfwAEgjZ71AwADasABIKxgA59IwACxHCcAFsABIL2BwAEguMArkTmHZZ8JAADAAIu2Pz0cwAEg3hbAASDVLqn4wABYtKIFAQABgcABIO/AK5E5AMAAWJNKwAEg+gGBwAEhAcArkTkGwABZAYEEwAEhw8ABIcnAASMGAADAAEGdAAAAAQPAASHiwAEjBgAAAAQCAsABIekAAACShWADnwAAwAEiAgAAAIJXYAPAAFnNAALAASIaAAAAImADkZgBagBgA8AA/aF5wAEiKQAAAMAAQhNgA58AAWoAYAPAAP2heWADnwABPgNOwAEiRsABIksAAIO1YAOfAAEWwAEiU4DAASJNwCuShYO1nxs9HMABIl0uwABBnAIAAjUAAAABAGADnwABg8ABInTAK5K6IxzAASKDhQDAK5MNSAEAASsAAITAASKGwCuS24UAwCuTDQFgA58ANQAAAAEAYAORmAGCwAEilMArkqQjHMABIpyFAMArk0hIAQABKwAAHMABIrgWwAEip4HAASKfwCuSk8AAQhTAAFoBiC8BAAGEwAEixsArktsAkbOFAMArk0gBYAORmADAAFmHSsABItIBHMABIuIWwAEi2S7AAEGAwABYvcAAQZ0BAAGAwAEi/MArkoUAwACL0QbAAFkCgQTAASRJwAEkT8ABJdgAAMAAQa8AAAABA8ABJF/AASXYAAAAAgICwAEkZgAAAJKFYAOfAADAASR/AAAAgldgA8AAWc0AAGADnwABPgVAIRzAASSdgcABJJXAK5QSSAEAASsAwAD98cABJJXAASSkAE7AASSxwAEkvAAAncpgA58AARbAASTEgMABJL7AK5QEg7WfG0nAASTOIRzAASTiFsABJN2CwAEk0sArlE6Ca58YSAEAAWrAASTlYAPAAPyXwACbAgDAAP27PgM9isABJP/AK5ROHMABJRSBwAElDMArlBLAAEGvAgACgMABJSXAK5QELgDAAFoEQCEcwAElS4LAASVAwCuUTkgBAAErAMAA/fHAASVAwAElUgBAFsABJW2CwAElYsArlE6dop8RwAElYsABJYIAPz0cwAElmBbAASWPLqn4wABYtKHmAgACgsABJanAK5ROgcABJbXAK5QSAMAAWHZKwAElwwGCwAElysArlE4GwABZA4EEwAEl3cABJeLAASZtAADAAEIVAAAAAQPAASXvwAEmbQAAAAICAsABJfcAAACAlmADwAD+fgDAASYEAAAAkoVgA58AAABgA8AA+tEBPgFKwAEmEQEiIR7AASYZwAD2eAIAAhbAASYpgcABJiPAK5WPgmufGGrAASYvYAPAAPyXCQAAIR7AASZGwAD2eAIAAoDAASZQwCuVfxbAASZdgcABJlfAK5WPnayfHwAGwABZBIEEwAEmcsABJnjAASbqAADAAEIWAAAAAQPAASaNwAEm6gAAAAEBAcABJpQAAACShWADnwAAAGADnwABPgFKwAEmoQEcwAEmyx7AASaowACL3gIAAoDAASa+wCuWMCkAwABB1QIAAoDAASbawCuWMC4AwACL9AbAAFkFgQTAASgnwAEoLcABKMAAAL/LAAAAAQPAAShAwAEowAAAAAEBAcABKEcAAACShWADnwAAAGADnwABPgI9iMABKFTAK5aoHMABKFwuv6wBAAEcwAEobi6hmgEAAYDAASiFwCuWqADAAFmQAMAAWN1KwAEokgEWwAEouBzAASiZLsAAQZsBAAGAwAEoscArlqgAwABZBoO1nxsGwABZBoEEwAEoxcABKMvAAT2cAADAAEGbAAAAAQPAASjiwAE9nAAAAAEBAcABKOkAAACShWADnwAAAGADnwABPhROwAEo/MABKQgAAMAAQhdgA58AAYDAASkKwCuXR07AASkbwAEpIAAAg7VgA58AARbAASkogMABKSLAK5dHg7WfGz0cwAEpOxbAASkyLqn4wABYtMAAQUsBAAGCwAEpT8Arl3sAwABYQE7AASlhAAAAwABAA2ADnwAATsABKXoAAAChSGADnwAATsABKY8AAAChSWADnwAAScABKaUewAEpqcAAi10BAAGCwAEptMArl3sAPgJJwAEpwx7AASnHwABaNAIAAieELoLAASncwCuXewA+Aj2LwAEp7cArl8aIwAEp/cArl0eCwAEqBcArl3s9isABKhPAK5d7FsABKiCAwAEqGsArl0eDtZ8bP0nAASo0HsABKjjAAItdAQABgsABKkPAK5d7AD4CScABKlQewAEqWMAAWjQCAAInhCqCwAEqasArl3sAPgI9jcABKn3AK5fmiMABKo/AK5dHgsABKpfAK5d7PYrAASqnwCuXexbAASq0gMABKq7AK5dHg7WfG0nAASrJHsABKs3AAFo0AgACJ4QrgsABKt3AK5d7AD4CPY3AASrwwCuX5ojAASsCwCuXR4LAASsKwCuXez2KwAErGsArl3sWwAErJ4DAASshwCuXR4O1nxtJwAErPB7AAStAwABaNAIAAieELILAAStSwCuXewA+Aj2NwAErZcArl+aIwAErd8Arl0eCwAErf8Arl3s9isABK4/AK5d7FsABK5yAwAErlsArl0eDtZ8bScABK7EewAErtcAAWjQCAAInmgGCwAErxsArl3sAPgM9jMABK9nAK5fXiMABK+XAK5dHgsABK+3AK5d7PYrAASv9wCuXexbAASwKgMABLATAK5dHg7WfG0nAASwaIh7AASwewACLXQEAAYLAASwpwCuXewAAHsABLDLAAFo0AgACJ4QqgsABLETAK5d7AD4CPY3AASxZwCuX5ojAASxrwCuXR4LAASxzwCuXez2KwAEshcArl3sWwAEskoDAASyMwCuXR4O1nxs/P0nAASy2HsABLLrAAItdAQABgsABLMXAK5d7AD4BScABLO4iIRzAAS0ChcABLPLAK5fmSAEAASsAwAD98QAiIh7AAS0cwABaNAIAAieEKoLAAS0uwCuXewABHsABLUnAAFo0AgACJ4QrgsABLVnAK5d7AAEewAEtdMAAWjQCAAInhCyCwAEthsArl3sAPgA+B07AAS5WwAEuXgAAgldgA8AAi14BNcABLmQAAAEAYAPAAIteAR/AAS5kwACLhAEAAS4ANQAAAAEAWwEXwAEukobAAS6QwCua/sAAQAODwAEuosArl8bAAItkNQAAAAEAWwEXwAEuwIbAAS6+wCua/qFIhMABLszAK5fXwACLZjUAAAABAFsBF8ABLuaGwAEu5MArmv6hSYXAAS74wCuX5sAAi22GAMArmv49iMABLxbAK5dHHMABLyaGwAEvHsArmurAAEIYAQABgMABLz3AK5dHAMAAi3Q9isABL1HAK5d7FsABL16AwAEvWMArl0eDtZ8bPYvAAS9xwCuXxhbAAS+JhsABL4HAK5rqwABAA8AAi2Q9jMABL6TAK5fXFsABL7iGwAEvsMArmuqhSMAAi2Y9jcABL8/AK5fmFsABL+mGwAEv4cArmuqhScAAi289jsABMAfAK5rqKz8/P07AATBGwAEwUQAAwABB6mADnwABgMABMFPAK5dHTsABMGfAATBwAADAAEHSYAPAAIvgAR7AATBywACL3QMAA4DAATB+wCuXRyopAD2IwAEwl8Arl0ccwAEwqIfAATCfwCucY8AAQdMBAAGAwAEwscArl0cAwACL6j2KwAEwvcArl3sWwAEwyoDAATDEwCuXR4O1nxtOwAEw2wAAAL9qYAOfAABOwAEw8MABMPYAAICWYAPAAP5+ARbAATD9gsABMPjAK5d7nayfH0nAATEOIh7AATESwAD2eAIAAhTAATEcwCuc6QkAJ5p8AAEewAExLcAA9ngCAAIUwAExN8ArnOkJACeXUAA+AUnAATFOFsABMVwWwAExV4LAATFSwCuXe4O1nxudJ58PPgI9FcABMXTAK5zaCIjAATF/wCuXR4LAATGHwCuXez2KwAExlcArl3sWwAExooDAATGcwCuXR4O1nxs/P0nAATG7IRzAATHJFsABMcSCwAExv8Arl3uClJ8gSAEAAWrAATHWYAOfSMAAsGAAwAD98T4CPRXAATHqwCuc6QkWwAEx94LAATHywCuXe52snx9JwAEyCiIewAEyDsAA9ngCAAIUwAEyGMArnOkJACeELQABHsABMi3AAPZ4AgACFMABMjfAK5zpCQAnhcYAPgI9FcABMpfAK5zpCRbAATKpFsABMqSCwAEyn8Arl3uDtZ8bnayfH0nAATK+IiIiIiIiIhzAATLLFMABMsLAK5zaCABIAQABKwDAAP3xACEewAEy48AA9ngCAAIUwAEy7cArnOkJACeD3AAAIR7AATMJwAD2eAIAAhTAATMTwCuc6QkAJ5nmAAAhHsABMy/AAPZ4AgACFMABMznAK5zpCQAnYwAAIR7AATNVwAD2eAIAAhTAATNfwCuc6QkAJ5nnAAAhHsABM3zAAPZ4AgACFMABM4bAK5zpCQAngLwAACEewAEzosAA9ngCAAIUwAEzrMArnOkJACeW0AAAIR7AATPIwAD2eAIAAhTAATPSwCuc6QkAJ4CnAD4EPRXAATQBwCuc6QkWwAE0DoLAATQJwCuXe52snx9JwAE0JR7AATQpwAD2eAIAAhTAATQzwCuc6QkAJ4QtAD4BPRzAATRULsAAQZwCAAKCwAE0fMArl3tqwAE0iGADkaO53ADAAFmHPgI9HMABNMsuwABBnAIAAoLAATTiwCuXe2rAATTuYAORo8AAjRsAwABZh0nAATUUFsABNSIWwAE1HYLAATUYwCuXe4O1nxudq58TPgM9iMABNT7AK5dHgsABNUbAK5d7PYrAATVawCuXexbAATVngMABNWHAK5dHg7WfG0nAATV7HsABNX/AAFo0AgACJ4PcFsABNZKCwAE1jcArl3uDtZ8bAD4BPRzAATW0FsABNasuwABBgMAAWL3AAEGdAgACgsABNePAK5d7JMABNhMCJ8AAQhkWwAE2B4LAATYCwCuXe4dlnwkAwACL0T8/PRzAATZTFsABNkouqfjAAFi0v0oBAAGCwAE2dMArl3sAwABYP0rAATaFAYLAATaMwCuXez9JwAE21iEWwAE24ILAATbbwCuXe50nnw8+AUnAATcMFsABNxWCwAE3EMArl3udoZ8QPgBJwAE3qBzAATeygMABN6zAK5dHSAEAAYHAATe1wCuXXgDAAP3xPgFKwAE39AEcwAE3+y7AAEGfAQABgMABOBvAK5dHAMAAWYs+Aj0cwAE4ti7AAEGdAgACgMABONDAK5dHasABOOlgA8AAjGfAAQeoAMAAWQE9isABOQfAK5d7FsABORSAwAE5DsArl0eDtZ8bPz89isABOWTAK5d7FsABOXCCwAE5a8Arl3uDtZ8bPRXAATl6wCuc6QkWwAE5h4LAATmCwCuXe52snx9JwAE5mCIiIiIiIRzAATmlFMABOZzAK5zaCABIAQABKwDAAP3xAR7AATm4wAD2eAIAAhTAATnCwCuc6QkAJ4PcAAEewAE52cAA9ngCAAIUwAE548ArnOkJACeZ5gABHsABOfrAAPZ4AgACFMABOgTAK5zpCQAnYwABHsABOhvAAPZ4AgACFMABOiXAK5zpCQAngWoAAR7AATo8wAD2eAIAAhTAATpGwCuc6QkAJ5nnAD4CScABOlwhHMABOnCFwAE6YMArl+ZIAQABKwDAAP3xPgFJwAE6gx7AATqHwABaNAIAAieEK4XAATqXwCuX5gA+AT0cwAE6tS7AAEGcAgAChcABOszAK5fmasABOuNgA5GjwACWOQDAAFmHPgE9HMABOxUuwABBjQIAAoXAATtEwCuX5mrAATtbXQORrwFhAwFgA58AYAORmLlZAMAAWYhJwAE7jyEcwAE7nYTAATuTwCuX10gBAAErAMAA/fE+AT0cwAE7sC7AAEGNAgAChMABO93AK5fXasABO+5dA5GvAWEDAWADnwBgA5GYuVkAwABZiD9KwAE8GQEcwAE8IC7AAEIaBgAGgcABPDTAK5deg8ABPEHAK5fGhsABPFDAK5xGh8ABPGbAK5xjFMABPHDAK5zaCAAWwAE8gIDAATx6wCuXR4O1nxsAwABZCD9JwAE8kiEcwAE8nxTAATyWwCuc2ggASAEAASsAwAD98T4BPRzAATywLsAAQY0CAAIUwAE828ArnNoIAGrAATzrXQORrwFhAwFgA58AYAORmLlZAMAAWYg/SsABPRIBHMABPRkuv64KAAqBwAE9JcArl16DwAE9MsArl8YrK4TAAT1NwCuX14XAAT1gwCuX5obAAT1xwCucRofAAT19wCucYxbAAT2NgMABPYfAK5dHg7WfGykAwABZBwbAAFkHgQTAAT2hwAE9p8ABSDUAAL+uAAAAAQPAAT2ywAFINQAAAAoKCsABPcAAAADAAEIXYAOfAADAAT3ZAAAAwABAA2ADnwAAwAE99AAAAKFGYAOfAADAAT4NAAAAoUdgA58AAMABPikAAAChSGADnwAAwAE+QAAAAKFJYAOfAADAAT5dAAAAwABB6mADnwAAwAE+eAAAAMAAQdJgA8AAi+AAwAE+jgAAAIC9YAOfAADAAT6fAAAAh5JgA8AA+tEAAGADnwABPg5JwAE+sSEcwAE+w4HAAT61wCuky0gBAAErAMAA/fE+AT0cwAE+1C7AAEGcAgACgcABPuvAK6TLasABPwBgA5GjuOIAwABZhz9JwAE/ISEcwAE/NIPAAT8lwCuk6UgBAAErAMAA/fE+AUnAAT9FIiEcwAE/WYXAAT9JwCulBUgBAAErAMAA/fEAHsABP2TAAFo0AgACJ4QqhcABP3bAK6UFAD4CPRzAAT+SLsAAQZwCAAKDwAE/qcArpOlqwAE/v2ADkaO+PQDAAFmHPYvAAT/iwCuk6Ss/P0nAAUALHMABQBiHwAFAD8ArpSNIAQABasABQBtgA8AAi+DAAQuDAMAA/fE+AUnAAUArIhzAAUA/hcABQC/AK6UFSAEAASsAwAD98QAcwAFAVITAAUBKwCuk90gBAAErAMAA/fE+AT0cwAFAZy7AAEGcAgACFMABQH7AK6U1CABqwAFAimADkaPAAGU+AMAAWYc/PgFJwAFAySIhHMABQN2FwAFAzcArpQVIAQABKwDAAP3xAB7AAUDowABaNAIAAieEK4XAAUD4wCulBQA+AT0cwAFBFC7AAEGcAgAChcABQSvAK6UFasABQUJgA5GjwACNTgDAAFmHP07AAUFxwAFBdwAAkoVgA58AARzAAUGCh8ABQXnAK6UjwABB1gIAAobAAUGMwCulEy4AwACL6UAcwAFBtRbAAUGwFMABQarAK6csCgCDtZ8bSAEAARTAAUG4wCulNQgAAMAA/fHAAUGqwAFBvABOwAFB1sABQd4AAIJXYAPAAFnNASMUwAFB4MArpUMJAGrAAUIHYAPAAIxzwADC2WrAAUI/YAPAAIwpwADDHAFgA8AAWc09FcABQlXAK6U1CBzAAUJcLsAAQa8CAAIUwAFCbcArpywKABTAAUJ0wCunmQsAAMAAWQJOwAFCh8ABQpIAAMAAQhtgA8AA/JcBlD0VwAFCm8ArpywKHMABQqMuwABCHAUABRTAAULFwCulNQgAFMABQsvAK6U1CACEwAFC0cArpPeFwAFC3MArpQUUwAFC7cArpUMJAADAAFkKQ8ABQv4ewAFDBcAAWjQCAAIngKcWwAFDGRTAAUMTwCunLAoAg7WfGwA+Az0VwAFDKMArpTUIHMABQy8uwABBrwIAAhbAAUNGFMABQ0DAK6csCgCDtZ8bFMABQ0zAK6eZCwAAwABZAj0VwAFDXMArpywKHMABQ2QuwABCHAUABRTAAUOIwCulNQgAFMABQ47AK6U1CACEwAFDlMArpPeFwAFDn8ArpQUUwAFDsMArpUMJAADAAFkKPRXAAUPFwCuoEQwcwAFDwxTAAUPFwCuoEQwAZAEAAZQAwAD9vU7AAUPhwAFD6wAAohxgA58AARbAAUPzFMABQ+3AK6csCgCDtZ8bScABQ/0ewAFEAcAAWjQCAAInltAUwAFED8ArqVQNAAA+AT0VwAFEI8ArpywKFMABRCvAK6lUDQA+AUnAAURbIiIUwAFEX8ArpUMJAAAWwAFEhxbAAUSChsABRHfAK6UTg7WfG50nnw8AHMABRLgWwAFEsRbAAUSshsABRKHAK6UTg7WfG4JinxpIAQABJ4KTAMAA/o0+Aj0cwAFFwi7AAEGcAgACFsABRfGGwAFF5sArpRODtZ8bHMABRjdqwAFGCV0Dka8BYQMBYAPAAP5+YAORmLYpiC8BAAEnh9cAkbMAwABZhz0VwAFGZMArpywKHMABRnUWwAFGbC7AAEGAwABYvcAAQh0CAAIUwAFGisArpywKAGrAAUabYAOfSMAAuy4AwACL0z4BPRXAAUa+wCunLAocwAFGxi7AAEGsAQABFMABRtbAK6csCgAAwABZFknAAUbwFMABRvTAK6VDCQA+AT0cwAFHERbAAUcILqn4wABYtKFFBwAHgsABRyPAK6Tbg8ABRzDAK6TphMABR0DAK6T3hcABR1XAK6UFFMABR2bAK6gRDAAWwAFHfoDAAUdywCuku4O1nxsUwAFHhMArpywKAADAAFhBPgE9HMABR6gWwAFHny6p+MAAWLShTAcAB4LAAUeywCuk24PAAUe/wCuk6YTAAUfPwCuk94XAAUfkwCulBRTAAUf1wCuoEQwAFsABSA2AwAFIAcArpLuDtZ8bFMABSBPAK6csCgAAwABXykrAAUglARTAAUgswCunLAoABsAAWQiBBMABSDrAAUhAwAFNqwAAwABCGgAAAAEDwAFIU8ABTasAAAAGBgbAAUhaAAAAwABCF2ADnwAAwAFIbQAAAMAAQANgA58AAMABSIgAAADAAEHqYAOfAADAAUidAAAAwABB0mADwACL4ADAAUitAAAAv2pgA58AAMABSL0AAACAvWADnwAAAGADnwABPhE9HMABSNIWwAFIyS6p+MAAWLTAAEACAgACgMABSObAK6vrgcABSPPAK6v7AMAAWEJOwAFJDsABSRQAAJKFYAOfAAEcwAFJH4PAAUkWwCusG8AAQdYCAAKCwAFJKcArrAsuAMAAi+lAHMABSVIWwAFJTYbAAUlHwCusgoO1nxtIAQABNQAAAAEAYAOfAAGEwAFJVsArrC0jHMABSV+HAMArrNRIAQABKwAAhcABSWLAK6w7hwDAK6zUAWADnwAAwAD98cABSUfAAUlnAD2NwAFJbsArrDscwAFJdS7AAEGvAgACNQAAAAEAYAOfAAGEwAFJj8ArrC0jHMABSZiHAMArrTRIAQABKwAAhsABSZvAK6yChwDAK600AWADnwBqwAFJtGADwACMc8ABDZIAwABZAk7AAUncwAFJ5QAAhUJgA8AA+tEBKknAAUnyHMABSf+EwAFJ9sArrC1IAQABKwDAAP3xPgE9jsABShDAK6yCHMABShguwABCHwEAAYXAAUorwCusOwDAAFkJPgM9j8ABSkXAK62DHsABSlDAAFo0AgACJ5p8hMABSmDAK6wtAD2OwAFKccArrIKFwAFKecArrDs9HMABSo4WwAFKhS6p+MAAWLSj1wEAARbAAUqqhsABSqTAK6yCg7WfGwDAAFiLPY7AAUq7wCusghzAAUrDLsAAQdwEAASGwAFK6sArrIKFwAFK8cArrDuHwAFK98ArrYNqwAFLDGADwABaFsABBh8AwABY407AAUsvwAFLQgAAwABCIGADkqkBFsABS0QuvzTAAFi2TsABS1rAAUtlAACieGADnwABFsABS22GwAFLZ8ArrIKDtZ8bPY7AAUt3wCusghzAAUt/Lr/KAQABhsABS5XAK6yCAMAAWS1JwAFLoSIiIRzAAUuuhMABS6XAK6wtSAEAASsAwAD98QAhFsABS7ouwABBg8AAWMAAHsABS8nAAFo0AgACJ5dQhMABS9nA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JtYiIh7AAibawAD2eAIAAoXAAibkwCw3QGrAAib0YAOfSMAAnhUAAR7AAicRwAD2eAIAAoXAAicbwCw3QGrAAicrYAOfSMAAnkoAAR7AAidRwAD2eAIAAoXAAidbwCw3QGrAAidrYAOfSMAAnoMAPgE9iMACJ5/ALDWuHMACJ6cuwABCeQIAAoDAAifAwCw1roPAAifHwCw2aQDAAFk9ScACJ+IewAIn5sAA9ngCAAKFwAIn8MAsN0BqwAIoAGADn0jAALdQAD4ETsACKCHAAigtAACEXGADnisBJsACKCEBHMACKC8ullUCAAIfwAIoSZ41AwADasACKF5gA59IwACeShbAAih4hMACKHPALDcch2WfCSbAAiidARbAAiidhMACKJjALDccnSKfHWADnjYAH8ACKMWezwIAAmrAAijVYAOfSMAAtNwcwAIo+xbAAijwhMACKOvALDcch2WfCWQBAAGUAMAA/b0AAMAAWY9gA54rPRzAAikXFsACKQ4uwABBgMAAWL3AAEIxAgACgMACKS3ALDWuFMACKTTALDyeCgAAwACLuD0XwAIpWhTAAilOwCw8ngoAnUMWwAIpcRTAAillwCw8ngoAg7WeqJ4tPYjAAimDwCw1rhzAAimLLsAAQnkCAAKAwAIppMAsNa5qwAIpq2ADwACL7cABDFoAwABZPUnAAinPHsACKdPAAPZ4AgAChcACKd3ALDdAasACKe1gA59IwACySQA+Aj0cwAIqCxbAAioCLqn4wABYtKKiAQABFsACKi+AwAIqKcAsNa6DtZ8bAMAAWEw9iMACKkLALDWuhMACKkrALDccPgI9HMACKocuwABBjQIAAhbAAiq+gMACKrjALDWug7WfG2rAAirKXQORrwFhAwFgA58AYAORmMAAkooAwABZiD2IwAIq8MAsNa6EwAIq+MAsNxxJwAIrGR7AAisdwAD2eAIAAoXAAisnwCw3QGrAAis3YAOfSMAAppEAPgE9iMACK0jALDWuHMACK1AuwABCegEAAYDAAitkwCw1rgDAAFleScACK3sewAIrf8AA9ngCAAKFwAIricAsN0BqwAIrmWADn0jAAJ8gAD4BPYjAAiuqwCw1rhzAAiuyLsAAQnsBAAGAwAIrxsAsNa4AwABZYEnAAivdHsACK+HAAPZ4AgAChcACK+vALDdAasACK/tgA59I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TsAChlbAAoZbAACAvWADnwABFsAChmiDwAKGXcAseuaDtZ8bScAChnIWwAKGe4TAAoZ2wCx7HZ0nnw8+A07AAoakwAKGrgAAnyZgA8AAi+0BHsAChrDAAIveAQABhMAChsbALHsdAE7AAobZwAKG3gAAg7VgA58AARbAAob1HMAChuqFwAKG4MAse1qWWwEAAYTAAobvwCx7HQDAAIv1g7WfG0nAAocBHsAChwXAAFo0AgACJ4PchsAChxPALHuEAD4BScAChyQcwAKHKC7AAEKdAQABFsACh0wWwAKHQ4bAAoc+wCx7hJ1Mnw2DtZ8bAMAAWWM+AUrAAodfARzAAodmLsAAQkcGAAaAwAKHisAselODwAKHkcAseuaEwAKHncAsex2CwAKHo8AsermFwAKHrcAse1qBwAKHuMAsemEAwABZJD8/P0rAAofeARzAAoflLsAAQn0CAAKAwAKH78AselOBwAKH9sAsemEAwABZWQbAAFlMgQTAAogHwAKIDcACiS4AAMAAQp4AAAABA8ACiBzAAokuAAAAAQEBwAKIIwAAAJKFYAOfAAAAYAOfAAE+A07AAog2wAKIOwAAg7VgA58AARbAAohDgMACiD3ALHy6g7WfG0nAAohNIR7AAohSwABaNAIAAieD3IHAAohgwCx80QA+Aj0cwAKIby7AAEGcAgACgMACiJHALHy6HMACiLpqwAKInl0Dka8BYQMBYAPAAP5+YAORmLCXiC8BAAEng9wAkbMAwABZhz2JwAKI1cAsfNEcwAKI5RbAAojcLsAAQYDAAFi9wABBvAIAAoDAAojywCx8uioAwACLtT9KwAKJCwEcwAKJEi7AAEKfAQABgcACiSXALHzRAMAAWV0GwABZTYEEwAKJM8ACiTnAAow3AADAAEKgAAAAAQPAAolcwAKMNwAAAAEBAcACiWMAAACShWADnwAAAGADnwABPgNOwAKJdsACiXsAAIO1YAOfAAEWwAKJg4DAAol9wCx924O1nxtJwAKJjSEewAKJksAAWjQCAAIng9yBwAKJoMAsffIAPgNOwAKJ98ACif8AAJ5VYAPAAIvtAR7AAooBwACL3gEAAYDAAooXwCx92wBJwAKKJRzAAooxgsACiinALH43SAEAAWrAAoo0YAPAAIvtwAEMWgDAAP3xPgE9HMACilAuwABBnAIAAoDAAop0wCx92xzAAoqdasACioFdA5GvAWEDAWADwAD+fmADkZiwl4gvAQABJ4PcAJGzAMAAWYc+BD0cwAKKyS7AAEGcAgACgMACiu3ALH3basACivpgA5GjoboAwABZhz2IwAKLKMAsfdscwAKLOILAAoswwCx+N8AAQdACAAKAwAKLR8AsfdsuAMAAi/M9HMACi2YWwAKLXS6p+MAAWLSjSQEAAYDAAouBwCx92wDAAFhVPYnAAouRwCx98hbAAouegMACi5jALH3bg7WfG0nAAouyIR7AAou3wABaNAIAAieD3IHAAovFwCx98gA+AT2JwAKL1sAsffIcwAKL5hbAAovdLsAAQYDAAFi9wABBvAIAAoDAAovzwCx92yoAwACLtT8/SsACjBQBHMACjBsuwABCnwEAAYHAAowuwCx98gDAAFldBsAAWU6BBMACjJzAAoyiwAKN5wAAwABCiQAAAAEDwAKMtMACjecAAAABAQHAAoy7AAAAkoVgA58AAABgA58AAT4HTsACjM7AAozZAADAAEFdYAOfAAEWwAKM4YDAAozbwCyADYO1nxtAHsACjPLAAFo0AgACJ5obgcACjQLALIAkAMACjPLAAo0NAD0cwAKNHRbAAo0ULqn4wABYtKMmAQABgcACjTDALIAkAMAAWIY9iMACjUHALIANHMACjUkuwABCTAEAAYHAAo1jwCyAJADAAFknPYjAAo10wCyADRzAAo18LsAAQqABAAGAwAKNoMAsgA0AwABZTT0cwAKNtRbAAo2sLqn4wABYtKMtAQABgcACjcbALIAkAMAAWIdKwAKN1wGAwAKN3sAsgA0GwABZT4EEwAKN7MACjfLAAo9IAADAAEKAAAAAAQPAAo4RwAKPSAAAAAICAsACjh8AAACShWADnwAAwAKOOQAAAJ5VYAPAAIvtAABgA58AAT4GTsACjk7AAo5UAACCmGADnwABgMACjlbALIE7PRzAAo5qFsACjmEuqfjAAFi0oyoBAAGAwAKOisAsgTsAwABX/j2IwAKOlsAsgTscwAKOni7AAEJMAgACgMACjrjALIE7gcACjr/ALIFJAMAAWSc9iMACjs3ALIE7HMACjtUuwABCoAEAAYDAAo75wCyBOwDAAFlNPRzAAo8OFsACjwUuqfjAAFi0ozMBAAGCwAKPLMAsgWIAwABX/0rAAo84AYDAAo8/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AFlVPYrAAplIwCyIuBzAAplNgsACmUjALIi4ZAEAAZQAwAD9vUnAAplbHMACmWWCwAKZX8AsiLiAlwEAAZQAwAD9xz4BPRzAApl7FsACmXIuqfjAAFi0ohMBAAGCwAKZlcAsiLgAwABYGT89F8ACmacuvzOBwAKZxcAsiGXAAFi1SsACmc4BgMACmdXALIgNBsAAWVSBBMACmkzAAppSwAKdkgAAwABChAAAAAEDwAKaZMACnZIAAAABAQHAApprAAAAkoVgA58AAABgA58AAT4FTsACmn7AApqIAACinmADnwABiMACmorALInoFsACmpiAwAKaksAsieiDtZ8bQB7AApqpwABaNAIAAieGxoHAApq3wCyJ/wDAApqpwAKawQA9HMACmtEWwAKayC6p+MAAWLTAAEFHAQABgcACmuTALIn/AMAAWDlOwAKa+sACmv8AAIO1YAOfAAEWwAKbB4DAApsBwCyJ6IO1nxtJwAKbERbAApsagsACmxXALIp2giyfFj4DPRzAAptEFsACmzsuqfjAAFi0o+QBAAGCwAKbU8AsinYAwABYjD0cwAKbaRbAAptgLqn4wABYtKKdAgACgcACm3rALIn/lADAAFg6SsACm48BgsACm5bALIp2ScACm6cewAKbq8AAWjQCAAInmlKCwAKbvMAsinYAPgM9HMACm9QWwAKbyy6p+MAAWLSj5QEAAYLAApvlwCyKdgDAAFiNPRzAApv7FsACm/IuqfjAAFi0op0CAAKBwAKcDMAsif+UAMAAWDpKwAKcIQGCwAKcKMAsinY+BU7AApxFwAKcSwAAgO5gA8AA/JcBlD2IwAKcVsAsiegcwAKcXi7AAEGvAgACgMACnG/ALInoasACnIhgA8AAjD3AARAAAMAAWQJDwAKcnh7AApylwABaNAIAAieBahbAApy5gMACnLPALInog7WfGwA+Aj2LwAKcysAsi4kcwAKcz4PAApzKwCyLiWQBAAGUAMAA/b09iMACnNvALInoHMACnOMuwABBrwIAAhbAAp0HgMACnQHALInog7WfG2rAAp0fYAPAAIw9wAEQPQDAAFkCPRzAAp1SFsACnUkuqfjAAFi0op0CAAKBwAKdY8Asif+DwAKdbsAsi4kAwABYOkrAAp18AYDAAp2DwCyJ6AbAAFlVgQTAAp2XwAKdncACongAAMAAQqEA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P0nAAq/6HsACr/7AAFnLAQABhcACsBfALJiTAD4BPY3AArCxwCyYkxzAArC4LsAAQeYDAAOAwAKw2cAsl7QcwAKxC2rAArD0XQORrwFhAwFgA8AA/n5gA5GYsZaILwEAASeApwCRsx/AArExnv8CAAJqwAKxSmADn0jAALPmFsACsVaFwAKxUcAsmJODYp8cAADAAFkXPgI9iMACsXvALJe0HMACsYMuwABB4gIAAoDAArGUwCyXtIHAArGbwCyXywDAAFkTQsACsa0APz2IwAKxzMAsl7SFwAKx1MAsmJNAHsACsevAAFo0AgACJ4MmgMACsfnALJe0AMACsevAArH/AD0XwAKyBi6/M4TAArIkwCyYXMAAWLU9HMACsjYWwAKyLS6p+MAAWLShpgMAA4LAArJDwCyYMIHAArJSwCyXy4DAArJZwCyXtADAAFeSSsACsmUBgMACsmzALJe0BsAAWV6BBMACsr7AArLEwAK0XwAAwABCegAAAAEDwAKy18ACtF8AAAABAQHAArLeAAAAkoVgA58AAABgA58AAT4ITsACsvHAArL6AACFxmADnwABiMACsvzALJxLFsACswqAwAKzBMAsnEuDtZ8bQB7AArMbwABaNAIAAieaKoHAArMqwCycYgDAArMbwAKzMwBOwAKzQMACs0QAAKK+YAOfAAErScACs1AewAKzVMAAWjQCAAInmhwWwAKzaIDAArNiwCycS4O1nxsAPgE9isACs3fALJyyiMACs33ALJxLFsACs4uAwAKzhcAsnEuDtZ8bP07AArOkwAKzrQAAwABB0mADwACL4AEcwAKzry7AAEKmAQABgMACs8bALJxLAMAAWV89iMACs9LALJxLHMACs+ODwAKz2sAsnRTAAEH7AgACgMACs/XALJxLLgDAAIvmPRzAArQQFsACtAcuqfjAAFi0or0CAAKBwAK0IcAsnGKCwAK0K8AsnLIAwABYeErAArQ1ARzAArQ8LsAAQqcBAAGAwAK0VcAsnEsAwABZYQbAAFlfgQTAArRkwAK0bcACtmAAAMAAQqYAAAABA8ACtIPAArZgAAAAAQEBwAK0igAAAJKFYAOfAAAAYAPAAIvgAT4DTsACtKDAArSpAADAAEHSYAPAAIvgAR7AArSrwACL3QIAAoDAArS3wCyd7SkAScACtMkWwAK01oHAArTNwCye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AFo0AgACJ4QsgcACvz7ALKUgAMACvyzAAr9JAEnAAr9QIR7AAr9VwACLXQEAARbAAr9rgcACv2DALKUgg7WfGwA+A07AAr+DwAK/jAAAwABB0mADwACL4AEewAK/jsAAi90CAAKBwAK/msAspSAqAEnAAr+0HMACv8GCwAK/uMAspZBIAQABasACv8RgA8AAi+DAAQuDAMAA/fE+BE7AAr/cwAK/4QAAg7VgA58AARbAAr/ugcACv+PALKUgg7WfG0nAAr/8IRbAAsAGg8ACwAHALKXqnSefDz4BSsACwCABHMACwCcuwABCawEAAYDAAsBAwCylCgDAAFk0Pz2LwALAWsAspeoWwALAZoPAAsBhwCyl6oO1nxtJwALAdCEiIiIiHsACwHrAAFo0AgACJ4C8g8ACwIjALKXqAAEWwALAuoPAAsC1wCyl6p2inxEBHsACwN/AAFo0AgACJ5bQg8ACwO3ALKXqAAEewALBAsAAWjQCAAIngKeDwALBEMAspeoAAR7AAsElwABaNAIAAieZ5oPAAsEzwCyl6gA+AUrAAsFHARzAAsFOLsAAQmsBAAGAwALBZ8AspQoAwABZND8/SsACwYcBHMACwY4uwABCVwYABoHAAsHNwCylIIDAAsHZwCylCiuBwALB5sAspSCCwALB8sAspZAqAMAAWWY/SsACwg4BHMACwhUuwABCWwEAAYDAAsI7wCylCgDAAFllBsAAWWWBBMACxSPAAsUpwALKhgAAwABCWwAAAAEDwALFTsACyoYAAAACAQLAAsVbAAABamADnwAAwALFbgAAAMAAQqpgA8AA+tEBasACxZJgA8AA+tEAAGADnwABPgdOwALFpsACxawAAJKFYAOfAAGAwALFrsAsp5pOwALFv8ACxcQAAIO1YAOfAAEWwALFzILAAsXGwCynzoO1nxtJwALF1h7AAsXawABaNAIAAieDhIPAAsXowCyn6QA+Aj2KwALF98Asp84cwALF/y6/rAEAAYLAAsYRwCynzgDAAFjdPYvAAsYfwCyn6RbAAsYsgsACxibALKfOg7WfGz9OwALGQwAAAKFIYAOfAABOwALGWAAAAKFJYAOfAABJwALGbh7AAsZywACLXQEAAYPAAsZ9wCyn6QA+AknAAsaMIiIewALGkMAAWjQCAAInhCuDwALGoMAsp+kAAR7AAsazwABaNAIAAieEKoPAAsbFwCyn6QABHsACxtjAAFo0AgACJ4Qsg8ACxurALKfpAD4CPY3AAsb7wCyofIrAAscNwCynzhbAAscbgsACxxXALKfOg7WfGz2LwALHKcAsp+kWwALHNoLAAscwwCynzoO1nxtJwALHSR7AAsdNwABaNAIAAieaAYPAAsdewCyn6QA+Az2MwALHb8AsqG2KwALHe8Asp86DwALHg8Asp+k9i8ACx5HALKfpFsACx56CwALHmMAsp86DtZ8bScACx6wiHsACx7DAAItdAQABg8ACx7vALKfpAAAewALHxMAAWjQCAAInhCqDwALH1sAsp+kAPgI9jcACx+nALKh8isACx/vALKfOg8ACyAPALKfpPYvAAsgTwCyn6RbAAsgggsACyBrALKfOg7WfGz8/ScACyD8ewALIQ8AAi10BAAGDwALITsAsp+kAPgZOwALIi8ACyJMAAIJXYAPAAIteATXAAsiZAAABAGADwACLXgEfwALImcAAi4QBAAEuADUAAAABAFsBF8ACyMOGwALIwcAsqjqhSITAAsjPwCyobcAAi2Y1AAAAAQBbARfAAsjlhsACyOPALKo6oUmFwALI98AsqHzAAItthgDALKo6PYrAAskRwCynzhzAAskhhsACyRnALKomwABCqwEAAYLAAslDwCynzgDAAIt1PYvAAslTwCyn6RbAAslggsACyVrALKfOg7WfGz2MwALJb8AsqG0WwALJg4bAAsl7wCyqJqFIwACLZj2NwALJlsAsqHwWwALJsIbAAsmowCyqJqFJwACLbz2OwALJysAsqiYrPz9KwALJ7QEcwALJ9C7AAEJXBgAGgsACyijALKfOgMACyi/ALKeahMACyj7ALKhthcACyknALKh8K4HAAspgwCynpwDAAFlmBsAAWWaBBMACyr3AAsrDwALdTQAAwABCVwAAAAEDwALK9sAC3U0AAAAGBgbAAssKAAABwABB6mADnwAAwALLKAAAAWpgA58AAMACy0EAAAGhSGADnwAAwALLWAAAAKFJYAOfAADAAst4AAAAwABB0mADwACL4ADAAsuNAAAAwABCqmADwAD60QAAYAOfAAE+Dj0jHMACy7+EwALLtsAsq+RIAQABKwDAAP3xjMACy7bALKvkHsACy8PAAIvdAgACgMACy8/ALKurKgArAWADwACL4E7A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my7AAEGAwABYvcAAQb8CAAIUwAMossAs41cKABbAAyjIFMADKL3ALOCVCACdTJ8NAMAAi7c/Pz89isADKQ/ALN6YHMADKR4uwABB3QIAAobAAyk0wCzgPGrAAylNYAPAAFoWwAERXQDAAFjoPYjAAyldwCzeExbAAylygsADKWXALN6Yg7WfGz89HMADKY8WwAMphi6p+MAAWLSi8wEAAYDAAymewCzeEwDAAFhHPYrAAymswCzemBzAAym7LsAAQlgCAAKCwAMpxsAs3pgnwABCxADAAFlzPYjAAynrwCzeExbAAyoAgsADKfPALN6Yg7WfGz2LwAMqDsAs3uYcwAMqDIPAAyoOwCze5mQBAAGUAMAA/b09HMADKikWwAMqIC6p+MAAWLSi9QMAA4XAAyo6wCzfgYbAAypFwCzgPIfAAypTwCzgTwDAAFhIPYzAAyphwCze+xbAAypvgMADKmnALN4TnayfH07AAyqgwAMqrwAAowNgA58AAStJwAMqux7AAyq/wABaNAIAAieaSIDAAyrTwCzeEwA+BD2NwAMq48As5f6AwAMq9MAs3hM9isADKwHALN6YHMADKxAuwABCWAIAAoDAAysbwCzeEyfAAELFAMAAWXM9iMADKzvALN4TFsADK1CCwAMrQ8As3piDtZ8bPRzAAytlFsADK1wuqfjAAFi0o4sBAAGFwAMreMAs5f4AwABYST4BScADK5wcwAMrq4PAAyugwCze5kgBAAGTAMAA/bs+AT0cwAMruy7AAEGcAgACgcADK9LALN4qasADK+RgA5GjwABxjQDAAFmHPz0cwAMsEBbAAywHLqn4wABYtKMAAwADg8ADLCDALN7mgcADLCzALN4qhcADLDjALOX+AMAAWEpKwAMsTQGCwAMsVMAs3pgGwABZeoEEwAMs0cADLNfAAy7TAADAAEJiAAAAAQPAAyzrwAMu0wAAAAEBAcADLPIAAACShWADnwAAAGADnwABPgpOwAMtBcADLRMAAKOxYAOfAAEWwAMtG4DAAy0VwCzna4O1nxtAHsADLSzAAFo0AgACJ5o9gcADLT/ALOeCAMADLSzAAy1NAD0cwAMtXRbAAy1ULqn4wABYtMAAQUYBAAGBwAMtcsAs54IAwABYNT2IwAMthsAs52scwAMtji7AAEKQAQABgcADLavALOeCAMAAWUBOwAMt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PgFJwANGkBbAA0adhsADRpTALPlGhJOfFD4BPYjAA0cCwCz2dRzAA0cTFsADRwouwABBgMAAWL3AAEG/AgACgMADRyHALPZ1hsADRyjALPlGAMAAi7c+Aj0cwANHSi7AAEGNAgACFsADR32AwANHd8As9nWDtZ8basADR4ldA5GvAWEDAWADnwBgA5GYwACSigDAAFmIPYjAA0erwCz2dYbAA0ezwCz5RkAewANH18AAWjQCAAIngyaAwANH5cAs9nUAwANH18ADR+sAPRfAA0fyLr8zhcADSBDALPgIwABYtUnAA0gZHMADSCKBwANIHcAs9oNIAQABasADSCxgA8AAWajAAMUBAMAA/fE+AT0cwANIQC7AAEGcAgACgsADSFfALPcJasADSGxgA5Gji/AAwABZh0nAA0iTHMADSJyBwANIl8As9oNIAQABasADSKZgA8AAWajAAMTqAMAA/fE+AT0cwANIuS7AAEGsAQABgMADSMnALPZ1AMAAWRY/PRzAA0jkFsADSNsuqfjAAFi0o5MFAAWCwANI98As9wmBwANJBsAs9oODwANJDMAs9ySEwANJHcAs9/UWwANJL4DAA0kpwCz2dYO1nxsAwABYfkrAA0k6AYDAA0lBwCz2dQbAAFmAgQTAA0mYwANJnsADSmUAAMAAQmUAAAABA8ADSbLAA0plAAAAAQEBwANJuQAAAJKFYAOfAAAAYAOfAAE+AkAewANJzcAAWjQCAAInmjYWwANJ5oDAA0ngwCz7uYO1nxsAwANJzcADSesASsADSjEBFsADSl0cwANKOC7AAEIlAgACgMADSkTALPu5asADSlJgA8AAWajAAMTqAMAAWX+DtZ8bBsAAWYGBBMADSsLAA0rIwANOBAAAwABCZAAAAAEDwANK3sADTgQAAAABAQHAA0rlAAAAkoVgA58AAABgA58AAT4HTsADSvjAA0sIAACjxmADnwABiMADSwrALPxgFsADSxiAwANLEsAs/GCDtZ8bQB7AA0spwABaNAIAAieaQYHAA0s+wCz8dwDAA0spwANLTgBOwANLWsADS2QAAKO9YAPAAPrRASpJwANLcRbAA0uAFsADS3uAwANLdcAs/GCDtZ8bnSefDz4DPYjAA0uWwCz8YBzAA0ueLsAAQa8CAAKAwANLr8As/GBqwANLyGADwACMTsABEY8AwABZAj2KwANL38As/McpScADS/chFsADS/wuwABBh8AAWMM+AT0cwANMIi7AAEGcAgACgcADTEbALPx3asADTF1gA5GjosQAwABZhz9JwANMjyEWwANMlC7AAEGFwABYwj4BPRzAA0yvLsAAQZwCAAKBwANM0cAs/HcjHMADTPYWwANM7C6/NcAAWLdIAQABasADTQNgA8AAi07AARF2AMAA/fFqwANNJmADkaOjN2rAA01eYAORo6LEAWADkaMAwABZhz89iMADTYfALPxgHMADTY8uwABBrAEAAYDAA02fwCz8YADAAFkWPRzAA020FsADTasuqfjAAFi0o8UDAAOCwANNzMAs/MeBwANN18As/HeAwANN6MAs/GAAwABYe0rAA030AYDAA037wCz8YAbAAFmCgQTAA05HwANOTcADTugAAMAAQmYAAAABA8ADTmDAA07oAAAAAQEBwANOZwAAAJKFYAOfAAAAYAOfAAE+BD2IwANOdMAs/okWwANOgoDAA058wCz+iYO1nxtAHsADTpPAAFo0AgACJ5bQgMADTqHALP6JAMADTpPAA06nAD0cwANOtxbAA06uLqn4wABYtKOPAQABgMADTszALP6JAMAAWHxKwANO2AGAwANO38As/okGwABZg4EEwANPfMADT4LAA1BhAADAAELOAAAAAQPAA0+PwANQYQAAAAICAsADT5YAAADAAEJDYAOfAADAA0+pAAAAkoVgA58AAABgA58AAT4DTsADT7zAA0/BAACDtWADnwABFsADT8+AwANPw8As/z6DtZ8bQ8ADT9kiIRzAA0/lgsADT+DALP9lSAEAAYHAA0/owCz/TgDAAP3xACEcwANP9oLAA0/xwCz/ZUgBAAGAwANP+cAs/z4AwAD98T4CPYjAA1AOwCz/PoLAA1AcwCz/ZT2KwANQKMAs/2UWwANQO4DAA1AvwCz/PoO1nxtKwANQSwGAwANQUsAs/z4GwABZhIEEwANRLMADUTLAA1UcAADAAEI6AAAAAQPAA1FRwANVHAAAAAcHB8ADUV8AAADAAEIXYAOfAADAA1F4AAAAwABAA2ADnwAAwANRkwAAAKFGYAOfAADAA1GsAAAAoUdgA58AAMADUcgAAAChSGADnwAAwANR3wAAAKFJYAOfAADAA1H8AAAAwABB6mADnwAAAGADnwABPghOwANSF8AD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QRbAA104Lqn4wABYtKFVAAAAAMAAWBxKwANdUgGAwANdWcAtAzUGwABZhoEEwANd9MADXfrAA19bAADAAEJUAAAAAQPAA14SwANfWwAAAAEBAcADXhkAAACShWADnwAAAGADnwABPgZOwANeLMADXjEAAIO1YAOfAAEWwANeOYDAA14zwC0IDoO1nxs9HMADXkMuwABBnAIAAoHAA15awC0IJWrAA15mYAORo8AAhLEAwABZhz2JwANegcAtCCUcwANekRbAA16ILsAAQYDAAFi9wABCHQIAAoDAA16mwC0IDmrAA163YAOfSMAAuy4AwACL0z0cwANe0BbAA17HLqn4wABYtKOPAQABgcADXuXALQglAMAAWHxDwANe8RzAA174LsAAQhUCAAInhteBwANfC8AtCCUAwABZAz4CPYjAA18awC0IDoHAA18iwC0IJT2JwANfLsAtCCUWwANfO4DAA181wC0IDoO1nxtKwANfSwGAwANfUsAtCA4GwABZh4EEwANfYMADX2XAA2BFAADAAEGcAAAAAQPAA197wANgRQAAAAICAsADX4IAAACShWADnwAAwANfkQAAACJgA5GYAABcAT4CPYjAA1/gwC0JZB7AA1/owABaNwEAAYDAA1//wC0JZAA9HMADYBQWwANgCy6p+MAAWLSiZQMAA4HAA2ArwC0JcoDAA2A0wC0JZIDAA2A7wC0JZADAAFiiBsAAWYiBBMADYErAA2BPwANhfQAAwABBjQAAAAEDwANgbsADYX0AAAACAgLAA2B8AAAAkoVgA58AAMADYKkAAACI1l0Dka8BXgMAAQEBYAOfAAABVwPAAFixAWADnwBgA5GYAABcAT4CPYjAA2D5wC0KBx7AA2EBwABaNwEAAYDAA2EYwC0KBwA9HMADYS0WwANhJC6p+MAAWLSiZQMAAxzAA2FWgcADYU3ALQoViC8BAAGAwANhZMAtCgcAkbOAwANhbMAtCgeAwANhc8AtCgcAwABYogbAAFmJgQTAA2GCwANhiMADYioAAMAAQY4AAAABA8ADYZzAA2IqAAAAAQEBwANhowAAAJKFYAOfAAAAYAOfAAE+AkPAA2GwJcADYb2AwANht8AtCt1gA6GrPgI9HMADYd0WwANh1C6p+MAAWLTAAEFWAQABJsADYe4BgMADYe7ALQrdYAOhqwDAAFijPYjAA2H8wC0K3RbAA2IKgMADYgTALQrdg7WfG0rAA2IaAYDAA2IhwC0K3QbAAFmKgQTAA2IvwANiNcADYqoAAMAAQYgAAAABA8ADYkTAA2KqAAAAAQEBwANiSwAAAJKFYAOfAAAAYAOfAAE+AkPAA2JYJcADYmWAwANiX8AtC5RgA6GrPgE9iMADYnzALQuUFsADYoqAwANihMAtC5SDtZ8bSsADYpoBgMADYqHALQuUBsAAWYuBBMADYq/AA2K1wANkQgAAwABBnwAAAAEDwANi1MADZEIAAAABAQHAA2LbAAAAkoVgA58AAABgA58AAT4FTsADYu7AA2LzAACDtWADnwABFsADYvuAwANi9cAtDBqDtZ8bPRzAA2MFLsAAQY0CAAKBwANjLsAtDDEjHsADYzzAAFo0AgACJ5bQgcADY0rALQwxAGrAA2NkXQORrwFhAwFgA58AYAORmMAAkopqwANjkF0Dka8BYQMBYAOfAGADkZiyhgFdA5GvAWEDAWADnwBgA5GYAMAAWYhJwANjsh7AA2O2wABaNAIAAieZ5oHAA2PEwC0MMQA+AT2JwANj08AtDDEcwANj2i6/OwEAAYDAA2PswC0MGgDAAFl0Pz0cwANkBxbAA2P+Lqn4wABYtL9KAQABgcADZCjALQwxAMAAWD9KwANkMwGBwANkOsAtDDEGwABZjIEEwANkR8ADZE3AA2dtAADAAELPAAAAAQPAA2RmwANnbQAAAAEBAcADZG0AAACShWADnwAAAGADnwABPgZAHsADZIHAAFo0AgACJ5oOgMADZJPALQ1vAMADZIHAA2SZAD0cwANkoC7AAEGcAgACgMADZLfALQ1vasADZMRgA5Gjk2EAwABZhz0cwANk5xbAA2TeLqn4wABYtL+vAQABgMADZPvALQ1vAMAAWBtOwANlDcADZRIAAIO1YAOfAAEWwANlGoDAA2UUwC0Nb4O1nxtJwANl8BbAA2X5gcADZfTALQ31nSefDz4DPYjAA2YowC0Nb4HAA2YwwC0N9T2JwANmPMAtDfUWwANmSYDAA2ZDwC0Nb4O1nxtJwANm3SIewANm4cAAWjQCAAInmeaBwANm78AtDfUAACEcwANnBhbAA2b9gcADZvjALQ31nUyfDUgBAAErAMAA/fE+AT2IwANnNMAtDW8WwANnQYHAA2c8wC0N9Z1Mnw0/P0rAA2ddAYDAA2dkwC0NbwbAAFmNgQTAA2dywANneMADarIAAMAAQtAAAAABA8ADZ5DAA2qyAAAAAQEBwANnlwAAAJKFYAOfAAAAYAOfAAE+BkAewANnq8AAWjQCAAInnWCAwANnvMAtDv0AwANnq8ADZ8IAPRzAA2fJLsAAQZwCAAKAwANn4MAtDv1qwANn7WADkaOwGQDAAFmHPRzAA2gPFsADaAYuqfjAAFi0v68BAAGAwANoI8AtDv0AwABYG07AA2g1wANoOgAAg7VgA58AARbAA2hCgMADaDzALQ79g7WfG0nAA2kXFsADaSCBwANpG8AtD4OdJ58PPgM9iMADaU7ALQ79gcADaVbALQ+DPYnAA2liwC0PgxbAA2lvgMADaWnALQ79g7WfG0nAA2l7Ih7AA2l/wABaNAIAAieZ5oHAA2mNwC0PgwAAIRzAA2mkFsADaZuBwANplsAtD4OdTJ8NSAEAASsAwAD98T4BPYjAA2p5wC0O/RbAA2qGgcADaoHALQ+DnUyfDT8/SsADaqIBgMADaqnALQ79BsAAWY6BBMADarfAA2q9wANsWAAAwABC0QAAAAEDwANq2MADbFgAAAABAQHAA2rfAAAAkoVgA58AAABgA58AAT4EQB7AA2rzwABaNAIAAieGkYDAA2sHwC0QiwDAA2rzwANrDQA9HMADaxQuwABBnAIAAoDAA2srwC0Qi2rAA2s4YAORo8AAkLkAwABZhz0cwANrXRbAA2tULqn4wABYtL+vAQABgMADa3HALRCLAMAAWBtKwANsSAGAwANsT8AtEIsGwABZj4EEwANsxsADbMzAA21ZAACWVQAAAAEDwANs0MADbVkAAAACAgLAA2zcAAAAn5BgA54rAMADbO4AAACdQ2ADnwAAAGADnwABPgM9HMADbQmAwANs/sAtEUudrQEAAYHAA20RwC0RWQCeyD0XwANtK4DAA20gwC0RS51MgcADbTbALRFZnjNKwANtRAGAwANtS8AtEUsGwABZkIEEwANtpcADbavAA2+oAAChmgAAAAEDwANtwcADb6gAAAABAQHAA23IAAAAkoVgA58AAABgA58AAT4EScADbxMhHMADbyYWwANvHYDAA28XwC0R5J0xnx5IAQABKwDAAP3xPgFKwANvNwEWwANvRIDAA28+wC0R5J0xnx4/TsADb17AA29lAACa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AAGEwAOSk8AtKlwAPgM9i8ADkqDALSoBHMADkq6DwAOSqMAtKgFkAQABlADAAP29ScADkrkcwAOSw4PAA5K9wC0qAYFtAQABgsADksbALSnbAMAA/cg+AUrAA5LYASo/PYzAA5L0wC0qXBzAA5MBgMADkvnALSmuhBABAAGDwAOTDMAtKgEAwAD+jErAA5MeARzAA5MohMADkyXALSpcSAEAATdbAMAA/bsAACr2VwAq9pYAKvcMACr3gAAq9/QAKvhDACr4lQAq+OYAKvk4ACr8vwArAYUAKwI8ACsHJQArCF4AKwk3ACsLRwArE3IAKxSrACsWvAArGK4AKx97ACsgpgArJIAAKyXrACsnUAArKSUAKyouACsrNwArLH4AKy4OACsvjgArMKkAKzKoACszzwArNnoAKzdCACs7JQArPNsAKz3YACtAiQArQYoAK0INACtDNQArRF8AK0TiACtK8QArS/EAK1+NACtjpgArZ78AK2i3ACtpbwAran0AK2rpACtv1wArcjsAK3RFACt16QArd3gAK34vACt/hAArgQYAK4NrACuEOwAriRsAK4nWACuLigArkPYAK5JZACuT2AArlVMAK5YEACuWfgArlxsAK6SRACurvwArsIgAK7IRACu07gArtisAK7bpACu6zgArwk8AK8XvACvGkQAryH8AK8nkACvLSgArzIkAK833ACvPGAArz9wAK9EqACvSowAr1CAAK9SFACvWbQAr1y8AK9epACvpRgAr9OgAK/vkACv/VgAsAIIALAHZACwEMwAsBTQALAefACwI6QAsDWcALBawACwYSAAsGgUALB0BACweOAAsKLUALCpaACwsZAAsLV8ALC9JACwwBwAsM0cALDP7ACw1ggAsQUkALEJdACxG5QAsTHsALFG6ACxZtAAsXUoALF6lACxfZAAsX9AALGDdACxihAAsZHQALGq1ACxzBQAsdNsALHhqACx6JwAsfI4ALH2vACx/4QAsgQ8ALIIoACyGHQAshxcALIfhACyJvAAsjJYALJAgACyRUwAskiMALJLYACyVbgAslkAALJccACyXiAAsnB8ALJ3BACye8AAsoCcALKIZACykKgAspN4ALKduACyrfwAstiYALLfeACy43AAsuy4ALL13ACzBHwAsxIIALMYpACzJVwAsyxUALM6gACzQkAAs02gA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wABEL8AAREXAAER1AQCa/wFqwABEMGADwAD95AIAAAEDwABEUcAARHUAAAAAAAAAYAODGwFKwABEVAEWwABEahbAAERgFsAARFQugInAAFsBh3iboZr/nP0GwABbBIEOwABEesAARJDAAETEAQCbCgFqwABEe2ADwAD95AIAAAEDwABEnsAARMQAAAAAAAAAYAODGwFKwABEoQEWwABEtxbAAEStFsAARKEugInAAFsBh3iboZsKnOgGwABbBYEOwABEycAARN/AAEUTAQCbCwFqwABEymADwAD95AIAAAEDwABE7cAARRMAAAAAAAAAYAODGwFKwABE8AEWwABFBhbAAET8FsAARPAugInAAFsBh3iboZsLnOoGwABbBoEOwABFGMAARS7AAEVaAQCbAAFqwABFGWADwAD95AIAAAEDwABFOMAARVoAAAAAAAAAYAODGwFKwABFOwEWwABFURbAAEVHFsAARTsugInAAFsBh3iboZsAnPsGwABbCIEOwABFX8AARXDAAEXfAAC+oAFqwABFYGADwAD95AIAAAEDwABFfcAARd8AAAACAgLAAEWNAAAArhVgA8AAVGcAwABFogAAAIaVYAOI6QAAXAE+AT0cwABFuxbAAEWvLoCJwABbAb6gAgACgMAARcnALasjgcAARdXALaszAMAAVI4GwABbCYEOwABF5MAARfXAAEZkAAC+nwFqwABF5WADwAD95AIAAAEDwABGAsAARmQAAAACAgLAAEYSAAAArhVgA8AAVGcAwABGJwAAAIaUYAOI6QAAXAE+AT0cwABGQBbAAEY0LoCJwABbAb6fAgACgMAARk7ALauqgcAARlrALau6AMAAVI0GwABbCoEOwABGacAARnzAAEceAACbQwFqwABGamADwAD95AIAAAEDwABGjsAARx4AAAADAgLAAEaVAAAAhJhgA4MbAMAARqIAAACAvWADiLQAAcAARq4AAACbQGADwAD60QFqwABGtmADwAD60QBgA4N9AT4BSsAARsQBHMAARuoWwABG1xbAAEbLLoCJwABbAYd8ppabQwMAAoDAAEb9wC2sMYHAAEcFwC2sPwGbQILAAEcTwC2sTpwABsAAWwuBDsAARyPAAEc9wABHuQAAhYIBasAARyRgA8AA/eQCAAABA8AAR1DAAEe5AAAAAgICwABHXwAAAIKUYAOJ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ALO0YAO7oAAAYAPAAPyXAAAALrL6AC6zJAAus2wALrOiAC6z2AAutAIALrRIAC60gAAutLQAAAAIAAABgRYALrTfAC6mGwAur4QALrKsAC603QAAAAMALrTfAAAAAAACBMAAXVwAgRcAABSA2gAAwADFhwAAgPEAAMAA1D0AAIELAACCLoIIAIEzAACU/QAAgWYAAJaCgggAgaEAAJT9gggAgdoAAMAAhYYAAIH0AADAAGlXsX0AgjMAAMAAYQ8AAIJWAAC7nQAAgnYAALYgAACCoAAAvRUAAILEAADAAI7bAACC5wAAwABi0QAAgwgAAL42AACDOQAAwACPQAAAg1gAAMAAj3EAAIN+AADAAGQAgoUAg5wAAMAAfQUAAIO/AADAAGtuAAAACgDAAERmAMAARGcAwABEaADAAERpAMAARGoAwABEawDAAERsAMAARG0AwABEbgDAAERvACMCwABdYoEXhQCFD8AARbIHwABEcAAAAWABwAD95AAAAAEFwABdsAAAAAAEAAADAAAAAAAAAAAAYAPAAF1iAT8BCQEAwAD9+gAAAABKBsAAXWSBF4WkhayFsgECYQAAAAEDhbKFsgAAAAAAAABgA8AA/JcABsAAXWaBF4Y2hjuGQgACgowAAAABA4ZAhkIAAAAAAAAAXAAGwABdZ4EXhvyHAYcSAAKCmAAAAAEDhwaHEgAAAAEBAYcOAAAAg+xgA8AA/n4AAFwABsAAXWiBF4fKh8+H3gACgpAAAAABA4fSh94AAAABAQGH2gAAAIPsYAPAAP5+AABcAAbAAF1pgReIdYh6iKIAArDcAAAAAQOIiIiiAAABAACD0GADwAD95AFbAgICiIsAAACAll8DAAAAiJcAAACBpmEDAV8DAABcAABcAAbAAF1qgReJpYmqidcAArdWAAAAAQOJvYnXAAABAACD0GADwAD95AFbAgICicAAAACAll8DAAAAicwAAACBpmEDAV8DAABcAABcAAbAAF1rgReK24rgizAAAohpAAAAAQOK7IswAAABAACD0GADwAD95AFbAwICivkAAAApXQPAAPz5AV8DAAAAiwYAAACBpmEDAV8DAABcAAGLHgAAAJfdYAPAAPrRAWqLKWADwAD60QBcAAbAAF1sgReLaYtui4MAAq+YAAAAAQOLd4uDAAAAAQEBi30AAACAlmADwAD60QAA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vTC9OwAAAAEBAb01AAAAgJZgA8AA/JcAAFwABsAAXaSBF71zvXi9lwACwABEiQAAAAEDvYO9lwAAAAEBAb2RAAAAgJZgA70gAABcAAbAAF2lgRe94r3nvgwAAsAARIoAAAABA734vgwAAAABAQG+BgAAAICWYAO9IAAAXAAGwABdpoEXvuW+6r8uAAK0WgAAAAEDvva/LgAAAAIBAb8OAAAAKV0DwAD8+QFgA70gAAG/HAAAAJfdYAPAAPrRAWq/J2ADwAD60QBcAAbAAF2ngRfAAEBTwABAWMAAQLMAArReAAAAAQPAAEBpwABAswAAAQAAhAlgA8AA/eQBWwMCAsAAQH8AAACAq10DwAD9bQJgA70gXwMAAADAAECJAAAAgaZhAwFfAwAAXAABwABAoQAAAJfdYAPAAPrRAWrAAECsYAPAAPrRAFwABsAAXaiBF8AAQT7AAEFDwABBagACsTEAAAABA8AAQVXAAEFqAAAAAQEBwABBZAAAAICWYAO+UQAAXAAGwABdqYEXwABCCMAAQg3AAEI3AAKxNAAAAAEDwABCJcAAQjcAAAABAQHAAEIxAAAAgJZgA7ugAABcAAbAAF2qgRfAAELAwABCxcAAQt8AArEzAAAAAQPAAELQwABC3wAAAAEBAcAAQtkAAACAlmADwACUYQAAXAAGwABdq4EXwABDe8AAQ4DAAEOgAAKv0AAAAAEDwABDkcAAQ6AAAAABAQHAAEOaAAAAgJZgA8AAlGEAAFwABsAAXayBF8AARA/AAEQUwABEPQACuN0AAAABA8AARCjAAEQ9AAAAAQEBwABENgAAAMAARItgA8AAXhMAAFwABsAAXa2BF8AARKzAAESxwABE3AACuD0AAAABA8AARMbAAETcAAAAAQEBwABE1QAAAMAARItgA8AAXigAAFwABsAAXa6BF8AARYDAAEWFwABFsAACwABEjAAAAAEDwABFlMAARbAAAAACAgLAAEWfAAAAgmpgA4N9AMAARawAAACBpmEDAFwAAFwAAAAutk4ALrZ1AC62mAAutskALrb6AC63RQAut5AALrf5AC64KgAuuFsALriMAC64vQAuuO4ALrk9AC65rQAuudkALroKAC66OQAuumgALrqXAC66yAAuuxcALruHAC67tgAuu+cALrwYAC68SQAuvHgALrzFAC69MwAuvWQALr2VAC695AAuvlQALr6FAC6+1AAuvx0ALr9uAC6/twAuwAYALsA3AC7AaAAuwJkALsEJAC7BOgAuwWsALsG4AC7CJgAuwlcALsKIAC7CuQAuwwYALsN4AC7DqQAuw9oALsQLAC7EWgAuxMgALsT5AC7FLAAuxX0ALsXtAC7GIAAuxlMALsaEAC7GtQAuxwIALseCAC7HvQAux/gALsg1AC7IcgAuyLEALsjwAC7JOwAAAEoCwABdsYEXwABF2MAARefAAII0B8AARI0AAAFgAcAA/eQAAAABBcAAXgAAAAAABAAAAwAAAAAAAAAAAGADwABdsQE/AQkBAMAA/foAAAAATAbAAF2zgRfAAEarwABGsMAARsEAAoKYAAAAAQPAAEa1wABGwQAAAAEBAcAARr0AAACD7GADwAD+fgAAXAAGwABdtIEXwABHecAAR37AAEeNAAKCkAAAAAEDwABHgcAAR40AAAABAQHAAEeJAAAAg+xgA8AA/n4AAFwABsAAXbWBF8AASBPAAEgYwABIUAACuEAAAAABA8AASC/AAEhQAAAAAQEBwABIQAAAALg7YAPAAF/cAABcAAbAAF22gRfAAEjYwABI3cAASQwAArg/AAAAAQPAAEjxwABJDAAAAAEBAcAASP8AAAC4OmADwABeAQAAXAAGwABdt4EXwABJfsAASYPAAEmsAAK4RAAAAAEDwABJl8AASawAAAABAQHAAEmlAAAAuN9gA8AAXgoAAFwABsAAXbiBF8AASijAAEotwABKWQACwABEjgAAAAEDwABKQMAASlkAAAABAQHAAEpNAAAAwABEj2ADwABeHAAAXAAGwABduYEXwABKzcAAStLAAEr9AAK4PgAAAAEDwABK58AASv0AAAABAQHAAEr2AAAAuN9gA8AAXiEAAFwABsAAXbqBF8AAS4DAAEuFwABLsgACuOAAAAABA8AAS5zAAEuyAAAAAQEBwABLqwAAALjfYAPAAF4hAABcAAbAAF27gRfAAExXwABMWcAATIQAAsAARIwAAAABA8AATGvAAEyEAAABAACCemADwAD95AFbAgICwABMdgAAAIJqYAODfQDAAEyAAAAAgaZhAwBfAwAAAABfAwAAAAbAAF28gRfAAE0pwABNK8AATT8AArEnAAAAAQPAAE04wABNPwAAAQAAg9BgA8AA/eQBWwEBAcAATTsA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FWADwABhzQEmtrMBgLa+wC8aMGADwABhzT0cts0ur5gBAAEWtuCBttfALxqRnSbAAGHSAMAAXmtCtvQAAbcYarcYYAPAAGEQwAEbGQA+A063Nrc/AACGFWADwABhmwEmtzYBgLdBwC8aMGADwABhmz0ct1AuwABFKMAAXVwBAAEWt2aBt13ALxroqszAAGGdAMAAXlhCt3kAAbedaredYAPAAGEQwAEbMgA+A063wbfKAACGFWADwABhtQEmt8EBgLfMwC8aMGADwABhtT0ct9suwABFJMAAXVwBAAEWt/aBt+3ALxtFq/3AAGG3AMAAXldCuAwAAbgwargwYAPAAGEQwAEbSwA+A064VLhdAACGFWADwABh+AEmuFQBgLhfwC8aMGADwABh+D0cuG4ugbsBAAEWuIOBuHrALxuinazAAGH6AMAAXm1CuJkAAbi9ari9YAPAAGEQwAEbZQA+AUK4ywABuO9quO9gA8AAYRDAARt+AD4FTrkXuSAAAIYVYAPAAGFnASa5FwGAuSLALxowYAPAAGFnTrlBuUoAAIJuYAPAAI70ASa5QQEWuVWBuUzALxwQllLAAGFpYAPAAI70PRy5Zi6slAEAAYK5csAvHDEAwABeeT0cuYUuhwkBAAEWuZyBuZPALxwQgpTAAGFqAMAAXkhCuasAAbnParnPYAPAAGEQwAEblwA+BE6577n4AACGFWADwABiIwEmue8BgLn6wC8aMGADwABiIz0cugkuhwkBAAEWuiCBuhfALxyngpTAAGILAMAAXkg9HLovLsAARIYBAAEWukeBuj7ALxyng9XAAGIlAMAAYFtCulkAAbp9arp9YAPAAGEQwAEbsQA+BE66sLq5AACGFWADwABqmgEmurABgLq7wC8aMGADwABqmj0cusouhwkBAAEWuuGButjALx0fgpTAAGILAMAAXkg9HLrwLrAwAQABFrsHgbr+wC8dH4PVwABqnADAAF58QrsZAAG7PWq7PWADwABhEMABG8sAPgdOu3C7eQAAhhVgA8AAaqEBJrtwAYC7e8AvGjBgA8AAaqE9HLuKLocJAQABFruhgbuYwC8dlYKUwABiCwDAAF5IPRy7sC6wMAEAARa7x4G7vsAvHZXAAEUzwABqrQDAAF58PRy72S7AAESGAQABFrvxgbvowC8dlSnAAGJGAMAAYFs9HLwCLsAA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RQ4AAAABAQHAAETKAAAAwABEi2ADwABeEwAAXAE+AkAhHMAAROaAwABE38AvJSxIAQABKwDAAP3xwABE38AARO0APRfAAET0LsAARNDAAF1cgMAARQTALyUswABePQbAAF6BgRjAAEUTwABFJMAARbEAALg9AWrAAEUUYAPAAP3kAgAAAQPAAEU5wABFsQAAAAEBAcAARUgAAADAAESLYAPAAF4oAABcAT4DQCEcwABFZIDAAEVdwC8luEgBAAErAMAA/fHAAEVdwABFawBAHMAARYgWwABFeS7AAETRwABdXMAAXj5IAQABKwDAAP3xwABFecAARY8APRfAAEWWLsAARNHAAF1cgMAARafALyW4wABePgbAAF6CgRjAAEW2wABFx8AARsIAALE0AWrAAEW3YAPAAP3kAgAAAQPAAEXfwABGwgAAAAEBAcAAResAAACAlmADu6AAAFwBPgJAIRzAAEYXFsAARgguwABE0cAAXVzAAF4+SAEAASsAwAD98cAARgjAAEYeASQAAifAAEVEJ8AARUU9HMAARpkWwABGii7AAETRwABdXMAAXj6xNAIAAi6AwABGuMAvJm8AwABeKwbAAF6DgRjAAEbHwABG2MAAR68AALExAWrAAEbIYAPAAP3kAgAAAQPAAEbqwABHrwAAAAEBAcAARvkAAACAlmADvlEAAFwBPgJAIRzAAEccFsAARw0uwABE0cAAXVzAAF4+SAEAASsAwAD98cAARw3AAEcjASfAAEVGPRzAAEeMFsAAR30uwABE0cAAXVzAAF4+sTECAAIugMAAR6XALycdAMAAXioGwABehIEYwABHtMAAR8XAAEiBAACxMwFqwABHtWADwAD95AIAAAEDwABH0MAASIEAAAABAQHAAEfZAAAAgJZgA8AAlGEAAFwBPgJAIRzAAEf8FsAAR+0uwABE0cAAXVzAAF4+SAEAASsAwAD98cAAR+3AAEgDASfAAEVHPRzAAEhlFsAASFYuwABE0cAAXVzAAF4+sTMCAAIugMAASHfALyfDAMAAXiwGwABeX4EYwABI1MAASNnAAEjrAALAAETVwABdXAAAAAEDwABI38AASOsAAAABAQHAAEjnAAAAg+xgA8AA/n4AAFwABsAAXmCBGMAASTzAAElBwABJUQACwABE1sAAXVwAAAABA8AASUXAAElRAAAAAQEBwABJTQAAAIPsYAPAAP5+AABcAAbAAF5hgRjAAEmcwABJocAASb0AAsAARUDAAF1cAAAAAQPAAEmywABJvQAAAAEBAcAASbcAAACAlmADwAD+/wAAXAAGwABeYoEYwABKC8AAShDAAEoyAALAAEU/wABdXAAAAAEDwABKJMAASjIAAAABAQHAAEosAAAAgJZgA8AA/n4AAFwABsAAXmOBGMAASpTAAEqZwABKtQACwABE4cAAXVwAAAABA8AASqrAAEq1AAAAAQEBwABKrwAAAICWYAPAAPyXAABcAAbAAF5kgRjAAEsCwABLB8AASygAAsAARO7AAF1cAAAAAQPAAEsZwABLKAAAAAEBAcAASyIAAACAllsAAFwAAAAu8AgALvIiAC7zAwAu8/kALvWCAC73HwAu9+cALviNAC75egAu+h4ALvsDAC77fgAu++oALv0qAC79owAu/iAALv6ZAC7/FgAu/48ALv/pAC8AXwAvAPUALwFUAC8B6gAvAoAALwNWAC8D0gAvBDMALwS7AC8FWwAvBkoALwedAC8JbgAvDb8ALw+2AC8QMgAvEe4ALxJRAC8StgAvExsALxOAAC8T5QAvFEoALxawAC8XKwAvF6gALxi1AC8ZPQAvGZgALxoGAC8iAgAvIoQALyMGAC8jlwAvJBUALyT2AC8lggAvJjkALybnAC8njQAvKDUALyh4AC8ouwAvKP4ALylBAC8phAAvKcIAAABCAsAAXomBGYFfgW7AAGatB8AARUgAAAFgAcAAYBoAAWABwABdsQ4EwABei4EZgcKBzgm4PABgA8AA+tEABMAAXo2BGYHfggMYwABFScAAXVwAYAPAAF4KAWqB9WADwABeCsABHPAEwABejoEZgheCJxi4TsAAXVwAYAPAAF/cASsEwABej4EZgjiCRRi4TcAAXVwAYAPAAF4BASsEwABekIEZglWCYRjAAEVKwABdXABgA8AAXhwBKwTAAF6RgRmCc4KBGMAARUvAAF1cAGADwABeIQErBMAAXpKBGYKcgqgYwABEy8AAXVwAXQPAAF/TAWADwAD+fgErBMAAXpOBGYK/gsgYwABEzMAAXVwAXQPAAF/TAWADwAD+/wErBMAAXpSBGYLngvcYwABEzcAAXVwAXQPAAF/TAWADwABgCAErBMAAXpWBGYMXgyMYtCnAAF1cAF0DwABf0wFgA70gASsEwABeloEZg0SDUhjAAETOwABdXABdA8AAX9MBYAPAAGFCASsEwABel4EZg3CDgxjAAETPwABdXABdA8AA/W0CYAPAAP78XQPAAF/TAVsBMoOBYAPAAP78XQPAAF/TAVsABMAAXpiBGYOSg6cYwABE08AAXVwAYAODfQErBMAAXpmBGYO3g8kYwABE1MAAXVwAYAPAAGAIASsBBcAAXuuBGYPOg86FFwAAAAOD4IUXAAAAAQAAAYPnAAAEuDxgA8AA+tEBaoP1YAPAAPrRAGADwABeiQE+BT0XhAMuwABEy8AAXVwfhBbAAF/bAQFgA8AA/n4BLgDAAF6SPReENy7AAETMwABdXB+ER8AAX9sBAWADwAD+/wEuAMAAXpM9F4RlLsAARM3AAF1cH4R8wABf2wEBYAPAAGAIAS4AwABelD0XhKIutCnAAF1cH4S1wABf2wEBYAO9IAEuAMAAXpU9F4TcLsAARM7AAF1cH4TxwABf2wEBYAPAAGFCAS4AwABelgIIAcAAXouAAMAvLOoJAYPOwABgQAAAAABMBsAAXpuBGYUchS2FZgAAgpgBaoUdYAPAAP3kAgAAAQOFMoVmAAAAAQEBhToAAACD7GADwAD+fgAAXAE+AUmFRRaFSS64PMAAXos9HIVXLsAARNXAAF1cAQABgIVewC8t+gDAAF7CPwbAAF6cgRmFa4V8hbEAAIKQAWqFbGADwAD95AIAAAEDhX+FsQAAAAEBAYWHAAAAg+xgA8AA/n4AAFwBPgFJhZIWhZYuuDzAAF6LPRyFpC7AAETWwABdXAEAAYCFqcAvLmEAwABewz8GwABenYEZhbaFx4ZSAAC4QAFqhbdgA8AA/eQCAAABA4XehlIAAAABAQGF7wAAALg7YAPAAF/cAABcAT4CQByGHhaGDS64TsAAXVzAAF6OSAEAASsAwAD98YYNhiUAPReGLC64TsAAXVyAhj/ALy7IwABejgbAAF7kgRmGV4ZrhsIBALg7AAAAAQOGe4bCAAAAAAAAAGADwABf3AE+AkAhHIaZFoaILrhOwABdXMAAXo5IAQABKwDAAP3xhoiGoABKhqcBFoauLrhOwABdXMAAXo4GwABenoEZhseG2IdRAAC4PwFqhshgA8AA/eQCAAABA4bsh1EAAAABAQGG+gAAALg6YAPAAF4BAABcAT4CQByHIxaHFS64TcAAXVzAAF6PSAEAASsAwAD98YcVhyoAPReHMS64TcAAXVyAh0HALy+awABejwbAAF7lgRmHVodnh7UBALg6AAAAAQOHdIe1AAAAAAAAAGADwABeAQE+AkAhHIePFoeBLrhNwABdXMAAXo9IAQABKwDAAP3xh4GHlgBKh50BFoekLrhNwABdXMAAXo8GwABen4EZh7qHy4g+AADAAESOAWqHu2ADwAD95AIAAAEDh96IPgAAAAEBAYfrAAAAwABEj2ADwABeHAAAXAE+AkAciBIWiAUuwABFSsAAXVzAAF6QSAEAASsAwAD98YgFiBkAPReIIC7AAEVKwABdXICIL8AvMG7AAF6QBsAAXqCBGYhDiFSIugAAuEQBaohEYAPAAP3kAgAAAQOIaIi6AAAAAQEBiHYAAAC432ADwABeCgAAXAE+AkAhHIiSgIiLwC8w6EgBAAErAMAA/fGIi4iZAD0XiKAuwABFScAAXVyAiLDALzDowABejQbAAF7mgRmIv4jPiRoBAMAARI8AAAABA4jbiRoAAAAAAAAAYAPAAF4cAT4CQCEciPUWiOguwABFSsAAXVzAAF6QSAEAASsAwAD98YjoiPwASokDARaJCi7AAEVKwABdXMAAXpAGwABeoYEZiR+JMIm9AAC4PgFqiSBgA8AA/eQCAAABA4lFib0AAAABAQGJVAAAALjfYAPAAF4hAABcAT4DQCEciXCAiWnALzG8SAEAASsAwAD98YlpiXcAQByJlBaJhS7AAEVLwABdXMAAXpFIAQABKwDAAP3xiYWJmwA9F4miLsAARUvAAF1cgImzwC8xvMAAXpEGwABeooEZicKJ04pGAAC44AFqicNgA8AA/eQCAAABA4nqikYAAAABAQGJ+QAAALjfYAPAAF4hAABcAT4CQByKHRaKDi7AAEVLwABdXMAAXpFIAQABgIogwC8yTwDAAP3xig6KJgA9F4otLsAARUvAAF1cK8AAXpEGwABeo4EZikuKWYu3AADAAESMAWqKTGADwAD95AIAAAEDimuLtwAAAQAAgnpgA8AA/eQBWwICAop2AAAAgldgA4N9AIqBAAAAgaZhAwBfAwAAAABfAwAAAT4IToqWiqcAAMAARNpgA4N9ARaKqS7AAETTwABdXMAAXphOitCK3gAAwABE22ADwABgCAEWiuAuwABE1MAA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AAEDkiiS5AAAAAAAAABgA7YhAT4FPRySMS7AAEVQwABdXAEAAWqSSWADwABfEsABFxcAwABev06SXpJiAACArGADwAD+/wEckmQuwABFUcAAXVwAAAAAwABetE6SeJJ+AACCmGADwAD8lwEckoAuwABFUsAAXVwAAAAAwABexU6SnJKgAACCkGADwAD8lwEckqIuwABFUsAAXVwAAAAAwABexUqSugEfksW2LAMAA4CS0MAvOnSBktXALzqYgpLcwC86vAAGwABeyYEZkumS/pOuAACHGQFqkupgA8AA/eQCAAABA5MKk64AAAABAAABkxEAAACX3WADwAD60QFqkxxgA8AA+tEAYAPAAGLWAT4EPRyTKi7AAEVQwABdXAEAAWqTQmADwABfEsABFzEAwABev06TWpNfAACClGADwABi1gEck2EuwABFTcAAXVwBAAExk29gA8AAYzsAAMAAXq1AIiEck4SBk3/ALztwSAEAASsAwAD98QGAk4/ALzssk3+TmABKk58BgZOmwC87cAbAAF6tgRmTs5O8ni0AAMAARU3AAF1cAAAAAQOTyZ4tAAAAAQEBk+UAAADAAETkXQPAAP07AWADwABjOwAAYAPAAGLWAT4DTpQPlBQAAIJrYAPAAF9+ARyUFi6wFwEBYAPAAF9+AWqULF0DwAD9OwFgA8AAX37AAR3EAMAAXs9HlDmBlEHALzwUCQGUYWqUYWADwABffsABF00APgFKlG8BKwGUlGqUlGADwABffsABHPwAPgFKlKYBapSzYAPAAGNQwAEd8AGU12qU12ADwABffsABHRUAPgFKlO0BH5T4wABjOgEAARyVCS6wGQAAAADAAF6pAAGVNmqVNmADwABffsABHS4APgNOlViVXgAAJ2ADwAD8lwEclWAusS8AAAAAwABe00AiHJV8k4FrAQABgpV/wC881gDAAP3GAByVjoKViMAvPNZjAQABFpWmgJWQwC878mHAAP1rAMAA/cWVepWsAEqVtwEcldOAlb7ALzvySwEAAYKV1MAvPNYAwAD9SgGV9GqV9GADwABffsABHUcAPgtOlg6WIAAAwABFW2ADwAD8lwEcliIusS8AAAAAwABe006WUJZeAACirV0DwAD9OwFgA8AAYzsBHpZwwAD9QwIBYAPAAGM7AoKWlMAvPWM0lrcDlreW5QAAAAEBAZa8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AEWsAGADwABfOgFqAGADwABfOsABGmEEwABfQ4Ecg42DjQbAAEWtAGADwABfOgFqAGADwABfOsABGnoEwABfRIEcg6aDpgbAAEWuAGADwABfOgFqAGADwABfOsABGpMBBcAAX0iBHINcg1yDuQEAAAODXIO5AAAAAgICg1wAAAQnYAPAAPyXAINcAAAEKGADwAD+fgAAYAPAAF86AT8DCADAAF88gADAL48XCADAAF8+gQDAL48kCQAAwAD9+gAAAAABBsAAX0aBHINcg1yDuQAAIwAAAAEDg1yDuQAAAAAAAABgA8AA/n4BSgABDwAuwABfPgAAL49fAC+PkAAAAAECwABfSYEchAWECoR/C8AARa8AAAFgAcAA/eQAAAoEwABfS4EchAqECgknAGADwAD8lwAEwABfTYEchAqECgkowABdXABgA8AA/n4ABMAAX06BHIQKhAoGKQBdA8AA/TsBYAPAAF9JAWoAXQPAAP07AWADwABfScABH+MEwABfT4EchByEHAaZ+gBgA8AAX0kBagBgA8AAX0nAARjNBMAAX1CBHIQjhCMGgmoAYAPAAF9JAWoAYAPAAF9JwAEY5gTAAF9RgRyELYQtBoPzAGADwABfSQFqAGADwABfScABGWYEwABfUoEchDWENQbAAEDfAGADwABfSQFqAGADwABfScABGRkEwABfU4EchEWERQae9gBgA8AAX0kBagBgA8AAX0nAARkyBMAAX1SBHIRWhFYGwABFsABgA8AAX0kBagBgA8AAX0nAARj/BMAAX1WBHIR1hHUGhhUAYAPAAF9JAWoAYAPAAF9JwAEZTAEFwABfWYEchAqECoR/AQAAA4QKhH8AAAACAgKECgAABCdgA8AA/JcAhAoAAAQoYAPAAP5+AABgA8AAX0kBPwMIAMAAX0uAAMAvkSYIAMAAX02BAMAvkTMJAADAAP36AAAAAAEGwABfV4EchAqECoR/AAAjAAAAAQOECoR/AAAAAAAAAGADwAD+fgFKAAEPAC7AAF9NAAAvkW4AL5GfAAAAAQLAAF9agRyEzITRhS4LwABFsQAAAWABwAD95AAABwTAAF9cgRyE0YTRCScAYAPAAPyXAATAAF9egRyE0YTRCSjAAF1cAGADwAD+fgAEwABfX4EchNGE0QYpAF0DwAD9OwFgA8AAX1oBagBdA8AA/TsBYAPA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QILAAEMVwDAQccAAQxXAAEMeAD0cwABDJy6xNQEAAZMAwABdbT4CPRzAAENHLrE1AQABFsAAQ1SAwABDUMAwEEVhwAD9kQDAAF1tPRzAAENngMAAQ2PAMBBFg/0BAAE0wABDbwPAAENvwABDwAAAAAICAsAAQ30AAACD1mADvSAAwABDhAAAAICWXwMAAAAAYAPAAP2hAT4CPRzAAEOVLsAARIkBAAGDwABDocAwESMAwABdpD0cwABDsIHAAEOvwDAQXiABAAGEwABDscAwETEAAADAAP2MBsAAYGGBHsAAQ9DAAEPhwABFAQAAwABEfwFqwABD0WADwAD95AIAAAEDwABD88AARQEAAAACAQHAAEQKAAAAKV0DwAD8+QFgA4jpAAHAAEQeAAAAl91gA8AA+tEBasAARClgA8AA+tEAXAE+AUnAAEQ3HMAAREKAwABEO8AwEcBIAQABKwDAAP3xPgJAgcAARFrAMBHVwABEWsAARGMAPRzAAERsLrE1AQABkwDAAF1tPgI9HMAARIwusTUBAAEWwABEnIDAAESVwDARwGHAAP0cAMAAXW1GwABEq8AARM3AAES8AAAAgJZgA4jpAIDAAETFwDARwD4BPRzAAETXLsAARH4BAAGCwABE6cAwEmgAwABdigbAAGBigR7AAEUGwABFF8AARYgAAIcIAWrAAEUHYAPAAP3kAgAAAQPAAEUgwABFiAAAAAEBAcAARSkAAACAlmADiLQAAFwBPgI9HMAARTYugbsBAAEWwABFSIDAAEVCwDAS04C9iLcAwABdbz0cwABFUy63VgIBYAOCiwIWwABFaoDAAEVkwDAS04RIiLoWwABFcy6XrMAAXXUAwABgVgbAAGBjgR7AAEWNwABFnsAARlIAAMAARHQBasAARY5gA8AA/eQCAAABA8AARbjAAEZSAAAAAQEBwABFzgAAAICWYAOCwgAAXAE+A07AAEXmwABF7gAAhEhgA4KLASbAAEXmARbAAEX2gMAARfDAMBN0hFeCWGADgos9HMAARgIul6wBAAGBwABGE8AwE4gAwABddT0cwABGIS6xNQEAARzAAEY/FsAARjKBwABGKsAwE4iAz4KcgLsBAAGAwABGR8AwE3QAwAD9UADAAF1tBsAAYGSBHsAARlfAAEZowABG4gAAwABEdQFqwABGWGADwAD95AIAAAED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0p4AAACWc2ADvVEAAGADwACVogE+AUrAANKsASMWwADSuoDAANKzwDHZtoUNvUEcwADS1S6v5gEAAYDAANLowDHZtgDAAGSnHMAA0vour/IBAAGAwADTFsAx2bYAwABksAFgA8AAlaIGwABknoEnwADUX8AA1GTAANUlAADAAEiwwABkNQAAAAEDwADUgsAA1SUAAAABAQHAANSQAAAAllJgA708AABgA8AA+tEBPgFKwADVCwEWwADVGoDAANUSwDHaUIeOvUMGwABkw4EnwADVc8AA1XrAANYpAACwKgAAAAEDwADVj8AA1ikAAAABAQHAANWdAAAAllJgA708AABgA8AA/n4BPgJJwADVrBzAANWwLsAASLDAAGQ1AQABgMAA1c/AMdqqAMAAZJ5KwADV2QEWwADV4C7AAEixwABlcT9KwADV9wEcwADV/i6wJwEAARbAANYdgMAA1hXAMdqqhEi9SwDAAGTJBsAAZMSBJ8AA1i7AANZMwADXKAAAsAMBasAA1i9gA8AA/eQCAAABA8AA1mXAANcoAAAAAQEBwADWcwAAAJZSYAO9PAAAYAPAAJZjAT4CScAA1oIcwADWhi7AAEiwwABkNQEAAYDAANalwDHbWQDAAGSePgFKwADWtwEfwADWwsAAlmwBAAEWwADW1C7AAEixwABlcQA/SsAA1vIBHMAA1vkur/wBAAEWwADXHIDAANcUwDHbWYRIvUsAwABkygbAAGTFgSfAANctwADXNMAA15YAALAoAAAAAQPAANdIwADXlgAAAAEBAcAA11UAAACWUmADvSoAAGADwAD+fgE+AUrAANdkARzAANdrLrAnAQABFsAA14qAwADXgsAx3AuESL0sAMAAZMkGwABkxoEnwADXm8AA17nAANgjAACv/wFqwADXnGADwAD95AIAAAEDwADX0cAA2CMAAAABAQHAANfeAAAAllJgA70qAABgA8AAlmMBPgFKwADX7QEcwADX9C6v/AEAARbAANgXgMAA2A/AMdyBhEi9LADAAGTKBsAAZMeBJ8AA2CjAANgvwADY4QAAsCkAAAABA8AA2ELAANjhAAAAAQEBwADYSgAAAJZSYAO9FgAAYAPAAP5+AT4CScAA2FklwADYZYDAANhdwDHc62ADvTE+AUrAANh/ARzAANiGLrAnAQABFsAA2KUUwADYncAx3OsAAWADvTGESL0zAMAAZMk/SsAA2LkBHMAA2MAusCgBAAEmwADY1QGAwADY1cAx3OtgA70qAMAAZMUGwABkyIEnwADY5sAA2QTAANnCAACwAQFqwADY52ADwAD95AIAAAEDwADZG8AA2cIAAAABAQHAANkjAAAAllJgA70WAABgA8AAlmMBPgJJwADZMiXAANk+gMAA2TbAMd2qYAO9MT4BSsAA2VgBHMAA2V8ur/wBAAEWwADZghTAANl6wDHdqgABYAO9MYRIvTMAwABkyj9KwADZlgEcwADZnS6v/wEAASbAANm2AYDAANm2wDHdqmADvSoAwABkxgbAAGTJgSfAANoEwADaC8AA24cAALAnAAAAAQPAANohwADbhwAAAAEBAcAA2jAAAACESGADvRsAAGADwAD+fgE+BEnAANo/HMAA2kuAwADaQ8Ax3l1IAQABFsAA2l4WwADaTi60fMAAZDXAAGR3sYS4wgDAAP3xSsAA2nMBJ61zP07AANqHwADaiwAAgKxgA8AA/v8BFsAA2pWAwADajcAx3l2lbr0dScAA2qccwADathbAANqvgcAA2qvAMd61gbzAAP8FSAEAASeHgADAAP6NPgNJwADayRzAANrWFsAA2tGBwADazcAx3rVOwAD/CkgBAAEnsVQAwAD+jUrAANrhASfAAEgKP0nAANrzHMAA2wAWwADa+4HAANr3wDHetU7AAP8KgdgBAAEngLUAwAD+kErAANsRASfAAEgHP0rAANsjASearT9KwADbOQEcwADbURrAANtAwABkP0sBAAEcwADbaBbAANtfFsAA21qAwADbUsAx3l2Avb0Yg8bAAP6DleABAAEWwADbfBrAANtqwABkP2HAAP1rAMAA/cAAwAD9SgbAAGTKgSfAANuMwADbqsAA3CMAAK/8AWrAANuNYAPAAP3kAgAAAQPAANvEwADcIwAAAAEBAcAA29MAAACESGADvRsAAGADwACWYwE+AUrAANviAR/AANvtwACWbAEAARzAANv/LrAnAQABgMAA3BbAMeANAMAAZMkABsAAZMuBJ8AA3CjAANw/wADdNAAAr+wBasAA3ClgA8AA/eQCAAABA8AA3FLAAN00AAAAAQEBwADcXwAAAJZSYAO9TgAAYAPAAJWiAT4DQCIWwADcfYDAANx1wDHgh4eSvT8BFsAA3JOAwADci8Ax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gMAA5k7AMeeRAMAA/js+AT2IwADmXcAx55EkwADmbQInnhiAwADmaMAx55E/QCEcwADmjBbAAOaBLsAASEfAAGRygxwBAAGAwADmlcAx55EAwAD+O8AA5oDAAOaaAErAAOahAYDAAOaowDHnkQbAAGTSgSfAAOa1wADmzMAA53QAAK/kAWrAAOa2YAPAAP3kAgAAAQPAAObcwADndAAAAAEBAcAA5ukAAACWUmADvSoAAGADwACVogE+AUrAAOb4AR/AAOcDwABm5QEAATHAAOcQYAPAAGZ+Ah/AAOccwABmpQEAARbAAOc4FsAA5y0ut97AAGRdwABIu8AAZVsAJsAA51EBHMAA51Eur9cBAAGAwADnYcAx6GsAwABkv2ADwABmfgAGwABk04EnwADnecAA55DAAOm6AACv+gFqwADnemADwAD95AIAAAEDwADnlsAA6boAAAABAQHAAOeeAAAAgL1gA8AA/n4AAGADwACVogE+A0nAAOeqIhzAAOezgMAA567AMekjgdgBAAEWwADnyRbAAOe+LrfewABkXadkwABlUQDAAP6QABzAAOfuFsAA5+eAwADn4sAx6SNhwAD+goCXAQABFsAA6AgWwADn+xbAAOfwLrfewABkXadkwABlUWHAAP6CAMAA/cc+AUrAAOgYAR/AAOgjwABmvgIAAhbAAOguLsAASCbAAGQ1wABkRh/AAOhSwABmpQEAARzAAOhogMAA6GPAMekjgL4BAAEWwADoihbAAOh9FsAA6HIut97AAGRdp2TAAGVRYcAA/oIAwAD+lAAAP0nAAOifIhzAAOiogMAA6KPAMekjgdgBAAEWwADovhbAAOizLrfewABkXadmwABlUgDAAP6QABzAAOjjFsAA6NyAwADo18Ax6SNhwAD+goCXAQABFsAA6P0WwADo8BbAAOjlLrfewABkXadmwABlUmHAAP6CAMAA/cc+AUrAAOkNAR/AAOkYwABmvgIAAhbAAOkjLsAASCfAAGQ1wABkRx/AAOlHwABmpQEAARzAAOldgMAA6VjAMekjgL4BAAEWwADpfxbAAOlyFsAA6Wcut97AAGRdp2bAAGVSYcAA/oIAwAD+lAAAP0rAAOmVAR/AAOmgwABmpQEAAYDAAOmxwDHpIwAGwABk1IEnwADpv8AA6cbAAO6MAADAAEhtAAAAAQPAAOnewADu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wABlFwbAAGUrgSfAASHnwAEh98ABItUAAMAARjwBasABIehgA8AA/eQCAAABA8ABIgzAASLVAAAAAgECwAEiKwAACIYVYAPAAGJ3AMABIjYAACiAtWADwAD9oQFqAGADwAD9oXkAYAPAAPyXAT4BPTDAASJAHsABIka2HwIAAmrAASJYYAO2McAAxg8kAAInwABI6yfAAEjsAAbAAGUsgSfAASLawAEi6sABI7kAAMAARj0BasABIttgA8AA/eQCAAABA8ABIvrAASO5AAAAAgECwAEjFAAACIYVYAPAAGKHAMABIx8AACiAtWADwAD9oQFqAGADwAD9oXkAYAPAAPyXAT4BPTDAASMpHsABIy+2HwIAAmrAASNBYAO2McAAxg8kAAInwABI7SfAAEjsAAbAAGUtgSfAASO+wAEjzsABJI4AAMAARj4BasABI79gA8AA/eQCAAABA8ABI9nAASSOAAAAAgECwAEj7gAACIYVYAPAAGJnAMABI/kAACiAtWADwAD9oQFqAGADwAD9oXkAYAPAAPyXAT4BPTDAASQDHsABJAm2HwIAAmrAASQbYAO2McAAxg8kAAInwABI7ifAAEjsAAbAAGUugSfAASSTwAEko8ABJUUAAMAARj8BasABJJRgA8AA/eQCAAABA8ABJLbAASVFAAAAAgECwAEk0wAACIYVYAPAAGK0AMABJN4AACiAtWADwAD9oQFqAGADwAD9oXkAYAPAAPyXAT4CTsABJOzAASTxAACDzWADwAD8lwEWwAElARbAAST8gMABJPPAMh6Cs7TAAGK3g8bAAP33SsABJQ8BHsABJRbAAGUbAgACgsABJR/AMh62HMABJSUuwABI18AAZDUBAAEWwAElNYDAASUswDIegsAARTvAAGK2AMAAZRYABsAAZReBJ8ABJUrAASVOwAEmkwAAwABI6cAAZDUAAAABA8ABJVnAASaTAAAAAgICwAElXgAAAIPNYAPAAPyXAMABJWsAAACIbGADwAD+fgAAYAPAAPyXAT4ETsABJXjAASV/AABhYAPAAPyXARbAASWDgcABJYHAMh9wYcAA/oI9iMABJY/AMh9gHsABJZbAAGUbAgACgMABJZ/AMh9ggsABJaXAMh+LAEXAASYbAcABJiTAASYmAABiYAPAAPyXAZMBHMABJi2DwAEmK8AyH99jAQABgsABJi/AMh+LAMAA/cUBi8ABJjfAMh/fHMABJjmDwAEmN8AyH99kAQABHMABJj6UZAEAARzAASZDg8ABJkHAMh/fg8EBAAGVAMAA/LQAwAD9vQDAAP29PgE9iMABJlLAMh9gHsABJlnAAGUbAgACgMABJmLAMh9gHMABJmqBwAEmaMAyH3CEEAEAAYPAASZ1wDIf3wDAAP6MAErAASaEAYDAASaLwDIfYAbAAGUYgSfAASaYwAEmnMABJ0kAAMAASOrAAGQ1AAAAAQPAASalwAEnSQAAAAICAsABJqoAAACDzWADwAD8lwDAASbEAAAAmWJdA8AA/TsBYAPAAGFCAABgA8AA/JcBPgJGwAEm1cABJv/AASboAAAAhhVgA8AAYUIAgcABJvTAMiDuPgE9iMABJwfAMiDeHsABJw7AAGUbAgACgMABJxfAMiDeHMABJx0uwABI18AAZDUBAAGCwAEnJMAyIRgAwABlFgBKwAEnOgGAwAEnQcAyIN4GwABlGYEnwAEnTsABJ1nAASfWAAHAAEjvwABkNQAAAAEDwAEnYcABJ9YAAAABAQHAASdmAAAAgJZgA8AA/JcAAGADwAD8lwE+AknAASdzHMABJ4McwAEnfYDAASd3wDIhsZf6AAAAAMAA/LtjAQABasABJ4VgA8AA/JfAAS0pAMAA/cVKwAEnlAEcwAEnoWrAASebYAPAAPyXwAEtI4N8AQABgMABJ6PAMiGxAMAA/K8/SsABJ64BHsABJ7XAAGUaAQABHMABJ8eAwAEnwcAyIbGqVwAAAADAAP3UAAbAAGUagSfAASfbwAEn5sABK0sAAcAASPDAAGQ1AAAAAQPAASfxwAErSwAAAAEBAcABJ/kAAACAlmADwAD7SQAAYAPAAPyXAT4DTsABKA3AASgXAADAAEjxYAPAAPtJARzAASgfgMABKBnAMiKOl/oAAAAAwAD7XU7AASguwAEoMwAAwABI8mADwAD8lwEjHMABKDuAwAEoNcAyIo5jAQABkwDAAP3FlJMBYAPAAPyXScABKEwcwAEoWoHAAShQwDIiqWMBAAFqwAEoXGADwAD8l8ABLSkAwAD9xT4HTsABKIXAASiOAACqzGADwAD8lwEcwAEoloDAASiQwDIijqq8AAAAAMAA/dNOwAEo+sABKP8AAIPNYAPAAPyXAR7AASkBwABlGQEAAYPAASkKwDIjPABJwAEpGxzAASklgMABKR/AMiKOSAEAAYPAASkowDIjPADAAP27SsABKTIBhMABKTnAMiNoPz2MwAEpRcAyI2gewAEpTMAAZRsCAAKEwAEpVcAyI2iCwAEpW8AyItcATsABKWzAASl1AADAAEjzYAPAAPyXARzAASmkHMABKZUcwAEpg4HAASl5wDIiqYGNAQABHMABKY6DwAEphcAyIzyX+gAAAADAAPy7AMAA+1eDjQEAARzAASmeasABKZhgA8AA/JfAAS0jZAEAAZQAwAD9vQDAAPtYqrwAAAAAwAD90z2MwAEps8AyI2gewAEpusAAZRsCAAKEwAEpw8AyI2iFwAEpycAyI/AASsABKdoBhMABKeHAMiNoScABKfIWwAEp/IDAASn2wDIijprawAD93z4BSsABKhABHsABKhfAAGUbAgACNwaCwAEqI8AyItcAScABKjUWwAEqP4DAASo5wDIijoa+wAD93T4BSsABKk4BNwc+BE7AASpvwAEqdAAAg81gA8AA/JcBk0PAASp/HMABKpCBwAEqhsAyIqmBbQEAAWrAASqTYAPAAPyXwAEtKQDAAP3IPgI9icABKqzAMiKpHMABKsKBwAEquMAyIqlQAQABasABKsRgA8AA/JfAAS0pAMAA+1o9i8ABKtvAMiUIHMABKt+DwAEq28AyJQhkAQABlADAAP29PYvAASrxwDIlCB7AASr4wABlGwIAAoPAASsBwDIlCILAASsHwDIi1wBKwAErFAEewAErG8AAZRsCAAKDwAErJMAyJQgewAErKsAAZRoBAAGBwAErNsAyIqkAAAbAAGUbgSfAASwdwAEsKMABLNkAAcAASPTAAGQ1AAAAAQPAASwwwAEs2QAAAAICAsABLDUAAACDzWADwAD8lwDAASw/AAAAgJZgA8AA/JcAAGADwAD8lwE+BD2IwAEsTMAyJiccwAEsWWrAASxTYAPAAPyXwAEtI4N8AQABHMABLGGAwAEsXMAyJidkAQABgcABLGPAMiY3AMAA/b0AwAD8rz2IwAEsb8AyJiccwAEsfGrAASx2YAPAAPyXwAEtI4N8AQABHMABLISAwAEsf8AyJidkAQABHMABLJ4cwAEslhzAASyPasABLIlgA8AA/JfAAS0jg8EBAAE3CgDAAPy0g3wBAAGAwAEsmMAyJicAwAD8r4O/AQAB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wACatsABLjQAPgFKwAFmEAEcwAFmFy6v+gEAARbAAWYpFsABZh4ut97AAGV2wABJBsAAZVYAwABliAHAAWZRasABZlFgA8AAmrbAAS5OAD4BSsABZnQBHMABZnsur/oBAAEWwAFmjRbAAWaCLrfewABldsAASQjAAGVXAMAAZYgBwAFmvGrAAWa8YAPAAJq2wAEuagA+AUrAAWbhARzAAWboLq/6AQABFsABZvoWwAFm7y633sAAZXbAAEkRwABlXQDAAGWIAcABZyhqwAFnKGADwACatsABLoYAPgFKwAFnSQEcwAFnUC6v+gEAARbAAWdiFsABZ1cut97AAGV2wABJCcAAZVgAwABliAHAAWeMasABZ4xgA8AAmrbAAS6gAD4BSsABZ6gBHMABZ68ur/oBAAEWwAFnwRbAAWe2LrfewABldsAASQTAAGVVAMAAZYgBwAFn5mrAAWfmYAPAAJq2wAEuvAA+AUrAAWgIARzAAWgPLq/6AQABFsABaCEWwAFoFi633sAAZXbAAEkLwABlWQDAAGWIAcABaEdqwAFoR2ADwACatsABLtgAPgFKwAFoYwEcwAFoai6v+gEAARbAAWh8FsABaHEut97AAGV2wABIu8AAZVsAwABliAHAAWikasABaKRgA8AAmrbAAS7yAD4BSsABaLwBHMABaMMur/oBAAEWwAFo1RbAAWjKLrfewABldsAASQ/AAGVcAMAAZYgBwAFo/mrAAWj+YAPAAJq2wAEvDgA+AUrAAWkQARzAAWkXLq/6AQABFsABaSkWwAFpHi633sAAZXbAAEhJwABlXgDAAGWIAcABaUhqwAFpSGADwACatsABLyoAPgFKwAFpXQEcwAFpZC6v+gEAARbAAWlzFsABaWsut93AAGV3wABJNMAAdy0AwABliAHAAWmVasABaZVgA8AAmrbAAS9GAD4BSsABabABHMABabcur/oBAAEWwAFpxhbAAWm+LrfdwABld8AASTbAAHcuAMAAZYgBwAFp7WrAAWntYAPAAJq2wAEvYgA+AUrAAWoXARzAAWoeLq/6AQABFsABai0WwAFqJS633cAAZXfAAEk4wAB3NADAAGWIAcABamFqwAFqYWADwACatsABL34APgFKwAFqiAEcwAFqjy6v+gEAARbAAWqeFsABapYut93AAGV3wABJOsAAdy8AwABliAHAAWrPasABas9gA8AAmrbAAS+aAD4BSsABavYBHMABav0ur/oBAAEWwAFrDBbAAWsELrfdwABld8AASTzAAHcwAMAAZYgBwAFrPWrAAWs9YAPAAJq2wAEvtgA+AUrAAWtsARzAAWtzLq/6AQABFsABa4IWwAFrei633cAAZXfAAEk+wAB3MQDAAGWIAcABa7tqwAFru2ADwACatsABL9IAPgFKwAFr6gEcwAFr8S6v+gEAARbAAWwAFsABa/gut93AAGV3wABJQMAAdzIAwABliAHAAWw5asABbDlgA8AAmrbAAS/uAD4BSsABbGUBHMABbGwur/oBAAEWwAFsexbAAWxzLrfdwABld8AASULAAHczAMAAZYgBwAFssWrAAWyxYAPAAJq2wAEwCgA+AUrAAWzIARzAAWzPLq/6AQABFsABbN4WwAFs1i633cAAZXfAAElEwAB3NQDAAGWIAcABbQFqwAFtAWADwACatsABMCYAPgFKwAFtJgEcwAFtLS6v+gEAARbAAW08FsABbTQut93AAGV3wABJRsAAdzYAwABliAHAAW1jasABbWNgA8AAmrbAATBCAD4BSsABbYQBHMABbYsur+ABAAEWwAFtphbAAW2WLrR8wABkNcAAZXux2LkVAMAAZY4BwAFt2WrAAW3ZYAPAAJq2wAEwXgA+AUrAAW33ARzAAW3+Lq/XAQABFsABbh4WwAFuDi60fMAAZDXAAGV7mwC4swDAAGWMAcABbj9qwAFuP2ADwACatsABMHoAPgFKwAFuXwEcwAFuZi6v1wEAARbAAW6GFsABbnYutHzAAGQ1wABle5r/uKoAwABljAHAAW6pasABbqlgA8AAmrbAATCUAD4BSsABbssBHMABbtIur9cBAAEWwAFu8hbAAW7iLrR8wABkNcAAZXubCriwAMAAZYwBwAFvF2rAAW8XYAPAAJq2wAEwsAA+AUrAAW83ARzAAW8+Lq/XAQABFsABb14WwAFvTi60fMAAZDXAAGV7mxS4uwDAAGWMAcABb4FqwAFvgWADwACatsABMMoAPgFKwAFvlgEcwAFvnS6v1wEAARbAAW+9FsABb60utHzAAGQ1wABle5sBuKsAwABljAHAAW/easABb95gA8AAmrbAATDkAD4BSsABb/UBHMABb/wur9cBAAEWwAFwHBbAAXAMLrR8wABkNcAAZXub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XAFqmthgA8AA/eQCAAABA5r8mywAAAAAAAAAXQPAAP00AV8DAAABSpr/AR+bA8AAaO0CAV8DAAACFpsdFpsULsAAS5vAAGiTwABo2oCWwABonhabJC7AAEucwABok8AAaNsAAAAzpjUAM6anAAAAAQLAAGjggS+bMZs3necDwABLnQABAACD0GADwAD95AFbAWABwAD95AABXQHAAP00AV8DAAAFBMAAaOOBL5tqm3AYlzjAAGiTAGADwAD8lwAEwABo5IEvm3ibfhiXSMAAaJMAYAPAAPyXASsEwABo5YEvm4abixjAAEuewABokwBgA8AA/JcBKwTAAGjmgS+bnZukCcAAS5zAAGiTAF0DwAD9OwFfAwAAAATAAGjngS+bqpuyWIjgwABokwBfAwAAASsBBcAAaO2BL5u3m7eb4gAAAAObx5viAAAAAgICm80AAASXOGADwAD8lwCb2gAABMAAS5xdA8AA/TsBXwMAAAAAXQPAAGjgAV8DAAABPwMIAcAAaOOAAMAzp5EIAcAAaOaBAMAzp58JAZu3wAD9+gAAAAACBsAAaOmBL5vnm/mcDAEAXgFqm+hgA8AA/eQCAAABA5wBnAwAAAAAAAAAXwMAAAFKnAQBFpwELojgwABok8AAaOcGwABo64EvnBGcIp3lAABdAWqcEmADwAD95AIAAAEDnCqd5QAAAAAAAABgA8AA+tEBPgFJnDMcnD4WnDculzjAAGiTwABo40gBAAGTAMAA/bs+AUqcTAEqPgRJnG0cnHcWnHEuwABLnsAAaJPAAGjlSAEAASsAwAD9uz4CPRecii6XSMAAaJMcnKQWnJoWnJMulzjAAGiTwABo48AAS5DAAPzNgY0BAAGUAMAA/b7AAGjkPRecsS7AAEuewABokxycu5SDvwEAARacvi6XSMAAaJPAAGjkAMAA/LPAAGjlPz0XnNQuiODAAGiTK8AAaOdBQ5zrHJz5FpzyLpdIwABok8AAaOSBbQEAAZMAwAD9yD4ESZ0JIRydHBydExadDS7AAEuewABok8AAaOWDfAEAARadFS6XOMAAaJPAAGjjAMAA/K9IAQABkwDAAP27PgE9F50uLojgwABokxydQBadOS7AAEucwABok8AAaOZLAQABFp1BLpdIwABok8AAaOQAwAD9SsAAaOc/PRedXC7AAEuewABokxydYhadXC7A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vwbAAGoQgTLAAEVAwABFTMAARW4AAK+dAWrAAEVBYAPAAP3kAgAAAQPAAEVRwABFbgAAAAICAsAARVIAAACFxVsAwABFWAAAAIXHWwAAWwFKwABFYgEcwABFZ4DAAEViwDPsy4ONAQABgcAARWnAM+zWAAAAADPrhwAz7A4AM+yVADPtCAAAAAMCwABqE4EywABFc8AARXnAAEbmA8AAS98AAAFgAcAAafgAAAEEwABqFYEywABFxcAARc8JgL0BasAARa1gA8AA/eQCYAPAAP5+ASeV4AEFwABqG4EywABF1MAARdrAAEXrAQAAA8AARenAAEXrAAAAAAAAAGADwABqEwE/AQkBwABF2sAAagAAAAAAAwbAAGoXgTLAAEXwwABGA8AARm8AAMAAS8gBasAARfFgA8AA/eQCAAABA8AARgvAAEZvAAAAAgICwABGEwAAAIXFYAPAAPqjAMAARiAAAACFx2ADwAD6owAAYAPAAPqjAT4CScAARi0cwABGN4HAAEYxwDPt8UgBAAEawABGQcAA+qUAwAD98UrAAEZHASs/SsAARlgBHMAARmSAwABGX8Az7eGV4AEAAYHAAEZmwDPt8QDAAPq4BsAAahiBMsAARnTAAEaEwABGsQAAwABL2gFqwABGdWADwAD95AIAAAEDwABGjMAARrEAAAACAgLAAEaRAAAAhcVgA8AA/a4AwABGmwAAAIXHYAPAAP2uAABgA8AA/a4BSsAARqUBHMAARqqAwABGpcAz7peV4AEAAYHAAEaswDPupwDAAP3ABsAAahmBMsAARrbAAEbCwABG5AAAr50BasAARrdgA8AA/eQCAAABA8AARsfAAEbkAAAAAgICwABGyAAAAIXFWwDAAEbOAAAAhcdbAABbAUrAAEbYARzAAEbdgMAARtjAM+8cleABAAGBwABG38Az7ycAAAAAM+2pADPuXwAz7uYAM+9ZAAAAAwLAAGocgTLAAEbpwABG78AASIUDwABL4AAAAWABwABp+AAAAQTAAGoegTLAAEc+wABHUAmAvQFqwABHJmADwAD95AJgA8AA/n4BJ5hdAQXAAGokgTLAAEdVwABHW8AAR28BAAADwABHbcAAR28AAAAAAAAAYAPAAGocAT8BCQHAAEdbwABqAAAAAAADBsAAaiCBMsAAR3TAAEeHwABH/AAAwABLyAFqwABH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AAGBwABMJMAz9vwAAAAAM/VoADP17gAz9nQAM/a7ADP3LQAAAAQCwABqOYEywABMLsAATDTAAFEGA8AAS+QAAAFgAcAA/eQAAWABwABpmAEEwABqO4EywABMecAATIMJgL0BasAATGFgA8AA/eQCYAPAAP5+ASdkAQXAAGpAgTLAAEyIwABMjsAATJwBAAADwABMmsAATJwAAAAAAAAAYAPAAGo5AT8BCQHAAEyOwAD9+gAAAAACBsAAaj2BMsAATKHAAEy7wABQ0QAAg18BasAATKJgA8AA/eQCAAABA8AATL/AAFDRAAAAAgICwABMzgAAAIXFYAPAAGFCAMAATOIAAACFx2ADwABhQgAAYAPAAGFCAT4ET8AATO/AAEz9AAABwABLwWEDAmADwABhQmADwABhQmADwABhQgADwABNAsAAUCcAAAACAgLAAE0RAAAAhcVgA8AAYUIAwABNJQAAAIXHYAPAAGFCAABgA8AAYUIBPgFJwABNNCIWwABNPYPAAE04wDP4bLrFwABhSQAWwABNTITAAE1GwDP4fLrFwABhST4ETsAATW7AAE12AADAAEvFYAPAAGGbASbAAE1uAYPAAE14wDP4bGADwABhm07AAE2XwABNoAAAwABLxmADwABhmwEmwABNlwGEwABNosAz+HxgA8AAYZtOwABNuMAATb8AAIF2YAPAAPqjARzAAE3SFsAATcmFwABNwcAz+MiqzMAAYZ1kAQABFsAATd2GwABN1MAz+POqzMAAYZ0AwAD6s0rAAE3vAR7AAE32wABpewEAAYfAAE4AwDP5HgBJwABOFiIWwABOH4PAAE4awDP4bLrEwABhSwAWwABOLoTAAE4owDP4fLrEwABhSz4ETsAATlDAAE5YAADAAEvXYAPAAGGVASbAAE5QAYPAAE5awDP4bGADwABhlU7AAE55wABOggAAwABL2GADwABhlQEmwABOeQGEwABOhMAz+HxgA8AAYZVOwABOmsAATqEAAIF2YAPAAPtJARzAAE63FsAATquFwABOo8Az+bWr/cAAYZdkAQABFsAATsKGwABOucAz+eCr/cAAYZcAwAD7VkrAAE7XAR7AAE7ewABpfQEAAYfAAE7rwDP6CwBJwABPASIWwABPCoPAAE8FwDP4bLXZwABhTAAWwABPHITAAE8WwDP4fLXZwABhTD4ETsAA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RKsuwABMbcAAaySAvwIAAoDAAETEwDRc6IHAAETNwDRc9gDAAP2CBsAAayqBM8AARN7AAET1wABFhQAAgowBasAARN9gA8AA/eQCAAABA8AARPrAAEWFAAAAAAAAAGADwABqyAFKwABFAAEfwABFBMAAa18FAAUWwABFEy64bsAAarbAAGsgFsAARSUuwABMasAAayEWwABFPS7AAExrwABrIhbAAEVTLsAATGzAAGsjFsAARWwuwABMbcAAayQAAAA0Wi0ANFuaADRcJQA0XLAANF07ADRd1AAAAAUCwABrLYEzwABF+sAARgDAAHFnA8AATHEAAAFgAcAA/eQAAmABwABqyGABwABrAQcEwABrL4EzwABGs8AARsYGg+wAYAPAAP5+AWrAAEa5YAPAAP5+wAE/oATAAGsxgTPAAEc+wABHXQbAAExzwABqtgBgA8AA/n4BasAAR1dgA8AA/n7AAT+lBMAAazKBM8AAR3zAAEeMCbhuwABqtgBgA8AAawEABMAAazOBM8AAR/jAAEgICcAATGoAXQPAAP1tAmADvTxgA8AA/n4ABMAAazSBM8AASHXAAEiJCcAATGsAXQPAAP1tAmADvVFgA8AAZzsABMAAazWBM8AASPjAAEkPCcAATGwAXQPAAP1tAmADvTxgA8AAZzsABMAAazaBM8AASXzAAEmUCcAATG0AXQPAAP1tAmADvTxgA8AAZzsAAQXAAGtfgTPAAEmZwABJmcAASkwAAAADwABJp8AASkwAAAAFBQXAAEm0AAAEuG5gA8AAawEAwABJ0QAABMAATGpdA8AA/W0CYAO9PGADwAD+fgDAAEnuAAAEwABMa10DwAD9bQJgA71RYAPAAGc7AMAASg8AAATAAExsXQPAAP1tAmADvTxgA8AAZzsAwABKMwAABMAATG1dA8AA/W0CYAO9PGADwABnOwAAYAPAAGstAT8GCAHAAGsygADANF9ZCAHAAGszgQDANF9pCAHAAGs0ggDANF+GCAHAAGs1gwDANF+jCAHAAGs2hADANF/ACQHAAEmZwAD9+gAAAAAiBsAAaziBM8AASlHAAEpZwABQ5QQBwABMYgAAAAEDwABKbsAAUOUAAAACAgLAAEqCAAAAgKtgA8AAg/QAwABKmAAAABJgA8AAgIgAAGADwABrLQE+CE7AAEq4wABKyAAAskFgA8AAawEBHsAAStbAAGsMAgACgMAASvHANGBegcAASvbANGBuAE7AAEsbwABLLAAAwABMal0DwAD9bQJgA708YAPAAP5+ATLAAEsuYAO9PGADwAD+fgBOwABLWsAAS28AAMAATGtdA8AA/W0CYAO9UWADwABnOwEywABLcWADvVFgA8AAZzsATsAAS5vAAEuzAADAAExsXQPAAP1tAmADvTxgA8AAZzsBMsAAS7VgA708YAPAAGc7AE7AAEvfwABL+AAAwABMbV0DwAD9bQJgA708YAPAAGc7ATLAAEv6YAO9PGADwABnOwA9HMAATAiBwABMA8A0YG7AAEx1AQABNMAATCADwABMIMAATeUAAAAEBATAAEwrAAAAg/NgA4N9AMAATEAAAACAvWADwAD+fgDAAExfAAAAwABKpl0DwAD8+QFgA8AA/n4AwABMjAAAAMAASqddA8AA/PkBYAPAAP5+AABgA8AA/aEBPgROwABMtcAATLwAAIJqYAO9PAEcwABMwoDAAEy+wDRgXpxEAQABh8AATMzANGGoAMAAhAQ9HMAATOmDwABM2cA0YLuAvwIAAhTAAEzqwDRiAwsAFMAATPTANGG2CAAAwAD9gk7AAE0FwABNEQAAwABKqWADwAD60QEcwABNI4LAAE0TwDRgiMAATDkBAAEUwABNNcA0YgMLAADAAGsXPRzAAE1YhMAATUTANGDsgL8CAAImwABNWAEUwABNWcA0YgMLAGADvVEcwABNZ4DAAE1jwDRgXsAATHYEAAOHwABNjcA0YagUwABNk8A0YcYJABTAAE2nwDRh3woAAcAASqkUwABN0sA0YmUMAMAAhBgAwAD9ggDAAICkPRzAAE3ygcAATe3ANGBuwABMdwEAATTAAE4JA8AATgnAAFArAAAABAQEwABOFAAAAIPzYAODfQDAAE4pAAAAgL1gA8AA/n4AwABOSAAAAMAASqZdA8AA/PkBYAPAAP5+AMAATnUAAADAAEqnXQPAAPz5AWADwAD+fgAAYAPAAP2hAT4FTsAATp3AAE6jAACEm2ADvU4BJsAATp0BHMAATqmAwABOpcA0YF6cRAEAAYfAAE6zwDRjRADAAIQEYAO9Tj0cwABO0IPAAE7AwDRgu4C/AgACFMAATtHANGOfCwAUwABO2sA0Y1IIAADAAP2CTsAATuvAAE73AADAAEqpYAPA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wABsaAAAwABMOgFqwABrzGADwAD95AIAAAEDwABr6sAAbGgAAAABAQHAAGv4AAAAllJgA708AABgA8AA+tEBPgJJwABsBxzAAGwLLsAATDkBAAGAwABsHcA0fOEAwABrTErAAGwnASk/SsAAbDgBHMAAbFAWwABsPy7AAExqwABrM4dYAQABgMAAbFzANHzhAMAA/YAGwABrUYEzwABsbcAAbIjAAG2FAADAAEw7AWrAAGxuYAPAAP3kAgAAAQPAAGyfwABthQAAAAEBAcAAbK8AAACWc2ADvVEAAGADwABnOwE+AkAcwABs4hbAAGzNLsAATGvAAGs0h1gBAAGAwABs7sA0fYUAwAD9gMAAbM3AAGz1AR7AAGz/th8CAAKAwABtCMA0fYUkwABtVgMnwABMgYDAAG1OwDR9hSeBagBKwABtXgEcwABteRbAAG1lLsAATGvAAGs0SwEAAYDAAG16wDR9hQDAAP2BBsAAa1KBM8AAbYrAAG2lwABuwwAAwABMPAFqwABti2ADwAD95AIAAAEDwABtv8AAbsMAAAABAQHAAG3MAAAAhJtgA71OAABgA8AAZzsBPgJAHMAAbgEWwABt6S7AAExswABrNYdYAQABgMAAbg3ANH5bAMAA/YDAAG3pwABuEwEewABuHbYfAgACgMAAbjPANH5bJAAEJ8AATIInwABMg4DAAG6LwDR+WyeBagBKwABumgEcwABuuBbAAG6hLsAATGzAAGs1SwEAAYDAAG65wDR+WwDAAP2BBsAAa1OBM8AAbsjAAG7jwABv6QAAwABMPQFqwABuyWADwAD95AIAAAEDwABu/sAAb+kAAAABAQHAAG8LAAAAhJtgA71OAABgA8AAZzsBPgJAHMAAb0EWwABvKC7AAExtwABrNodYAQABgMAAb03ANH8zAMAA/YDAAG8owABvUwEewABvXbYfAgACgMAAb2bANH8zJMAAb7cDJ8AATISAwABvsMA0fzMngWoASsAAb78BHMAAb94WwABvxi7AAExtwABrNksBAAGAwABv38A0fzMAwAD9gQbAAGtUgTPAAG/uwABwAcAAcKsAAMAATEMBasAAb+9gA8AA/eQCAAABA8AAcB7AAHCrAAAAAQEBwABwJgAAAIC9YAPAAP5+AABgA8AA/n4BPgFKwABwMgEjHMAAcD6AwABwOcA0gAmB2AEA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QUgBAAErAMAA/fEAFonwh4nqwDWnQblUwABhRD4BPRyKD4OKBsA1poyAvwIAAiaKDwGFihDANabxYAPAAGyEH4okwABuTwEAAYeKMsA1p0EAAMAA/YI/RopNioiKYQAAAJkIYAODzwAWinqBinDANaY5hOSDLz4DToqdirAAAMAATY5gA8AAbE0BJoqdARyKvhaKsi64EsAAbizAAG4wqFgBAAGEis3ANafoAMAAhAZgA8AAbE09HIrugorhwDWma1YBAAGFivLANagFAMAA/UxGiw0AiyEAAACFE2ADhGEAFos8hIswwDWn6IUmg9RBPgFJi1Qli2SGi1jANahhYAOEbz4HTouWi5sAABJgA8AAbkgBHIu0g4urwDWmjEsBAAEci8EWi7UuuBLAAG4swABuMMAATYoBAAEWi9YUi8rANahhBgFgA4RvhJuEdADAAIQHAMAA/YFJi+kci/KHi+3ANaiSSAEAASsAwAD98T4BQoyPAD9OjLyMzQAAwABNj2ADwABuXgFqjNVgA8AAbl7AAUKKTo0EjQoAAICWYAOE2QEWjRgUjQzANahhBgFgA4RvgJaEck6NN41FAADAAE2RYAPAAGFCARyNUxaNRy64EsAAbizAAG4wwABNiwMAARSNZMA1qSIJAALAAE2MKsAATY0pwACEEUmNsCIhHI3CFI20wDWpRAoASAEAASsAwAD98QAWjdsUjc3ANalECgC5VMAAYUQ+AT0VjfXANakDCB+ODMAAbmkBAAEUjh/ANalECgAASY5AJY5KFI5EwDWpIgkAYAOE7D4DTo6CjowAAIDtYAOIfgEWjpQUjo7ANakiCQFgA4TsgnCE7k6Oro63AACBs2ADwAD8lwEcjvMWjt4WjtWEjsnANafogm6D04THhLWAuwEAARSO+8A1qegLAADAAP1QSY8TIRyPIBSPF8A1qgoMAEgBAAEcjyOUgcYAAAAAwAD8ugDAAP27PgFJjzccj0QUjzvANaoKDACBbQEAARaPXBaPU4SPR8A1p+iCboPThS6EtADAAP3IPgI9FY+GwDWpRAocj6IWj5YuuBLAAG4swABuMMAATYsDAAEWj9IUj8jANanoCwCFE4iGAsAATYwqwABNjSnAAIQRSZBEIiEckFYUkEjANalECgBIAQABKwDAAP3xABaQbxSQYcA1qUQKALlUwABhRD4BPRWQ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NcbkEAAUAMA1xvoRAADAAP2CFADANcb6EQA+CU68E7wmAADAAE2yYAPAAPrRASEWvDUUvCnANcZUDgDAAE2xwABvGU68V7xnAADAAE21YAPAAG5AARy8nxa8jxa8gYC8dcA1upa0scAAh+3AAE2GwABuLMAAbjJLAQABFLygwDXE/wsAAMAA/YFOvL+8xQAAgJZgA8AAYUIBHLzYgbzHwDW6pMAATa4CAAEWvPoUvOrANcd0EACWaMAAbkIBl90pwACAHk69wL3JAADAAEjgYAPAAPrRASIiFL3XwDXHTQ8AACEcvfMUve3ANce6EQBIAQABKwDAAP3xABy+CYS9/sA1uvMgAQABFL4KwDXE/wsAAABOviEAAADAAE26YAPAAPrRAE7AAEDLAAAAwABNu10DwAD9OwFgA71OAE7AAEDvwABA/QAAwABNvGADwAD8lwErScAAQQ4UwABBEsA1x/USAD4BPRXAAEGNwDXIRBMqPgM9FcAAQxnANchEEyEcwABDKRTAAEMjwDXHuhEASAEAASsAwAD98UnAAEM8IRTAAENBwDXIRBMAPgNOwABD48AAQ+4AAMAATZJgA8AAnKcBFsAARAAUwABD8MA1x3QQAMAATZLAAG5DPRXAAEQYwDXIRBM1AAAAAQBgA8AA+tEBNQAAAAEAYAPAAJynARTAAEQiwDXI3RYAIxzAAEQuFADANckjFwBIAQABKwAAKxbAAEQuFADANckjFwDAAE26wACcsQFgA8AA+tEjHMAARDYUAMA1yRYXAEgBAAErAAAqFADANckWFwABYAPAAPrRScAAREwiFMAARFDANchEEwAAIRzAAERtFsAARGYUwABEW8A1yN0WAISLwACcqkgBAAErAMAA/fE+AUFGwABEhsAARK/AAESUAAAAg/NgA4OcABbAAESnFMAARJzANcjdFgCEi8AAnKo+Bk7AAETIwABE0wAAwABNvWADwABshAEmwABEyAEcwABE7BbAAEThgMAARNXANbqWtBHAAIfbwABNigEAARTAAET1wDXJ1RcAAMAAhJdgA8AAbIROwABFHsAARSgAAMAATb5gA8AAbnsBHMAARTYUwABFKsA1xNkKACABAAEUwABFN8A1yfwYAAAAScAARVQcwABFYhTAAEVYwDXKThkASAEAASsAwAD98T4CPRXAAEW3wDXIRBMqQsAARdoAP0nAAEYDFsAARhEUwABGB8A1yk4ZAMAATb/AAG6LPgI9FcAARmrANchEEypCwABGjQA/ScAARrYhFsAARsUUwABGu8A1yk4ZAMAATbLAAG6APgI9FcAAR7LANchEEypCwABH1QA/ScAAR/4hFsAASA0UwABIA8A1yk4ZAMAATa/AAG6MPgI9IxzAAEhPFMAASDjANchVFABIAQABKwDAAP1lFcAASDjANchVFDHAAEhTYAO9TgArAV0DwAD9OwFgA71OScAASGkawABIbaSNPgE9HMAASLAUwABImcA1yFUUAFYBAAEmwABIuAEcwABIuIHAAEi0wDW6pMAATacBAAEUwABIyMA1yfwYAADAAIAcYAO9TgDAAP1MPz8/P0nAAEkxIhTAAEk1wDXIRBMAACEcwABJVxTAAElAwDXIVRQASAEAASsAwAD9ZT4CPRXAAEluwDXIbRU1AAAAAQBgA8AA/JcBFMAASX7ANcTECQA1AAAAAQBgA8AA/JcBFcAASX7ANcTECRzAAEmQFADANcwQFgBkAQABlADAAP29FADANcwQFgBJwABJoCEawABJpaSNPgE9FcAAScvANchVFCs/PgE9FcAAShfANchVFCs9FcAASlXANcV0DTUAAAABAF0DwAD9bQJgA71OYAPAAG57AYPAAEpcwDW6yDUAAAABAGADwAB17QEUwABKZsA1xRoMADUAAAABAGADwABuewEfwABKdMAAbo8GAAAGlmgUwABKocA1x7oRAMAATbIUwABKyMA1x00PAMAASOAUwABK8sA1x/USAMAATboUwABLEcA1yEQTAMAATbgUwABLOsA1yG0VAMAATcAUwABLd8A1yFUUADUAAAABAFwBHMAASmUUwABKZcA1zJMWAIC/AgACFMAASmXANcy0FwAUAMA1zMwYAADAAP2CFADANczMGAA9HMAAS60UwABLn8A1xH8IAIReAQABFMAAS7TANcT/CwAAwAD+Pj0cwABL04fAAEvDwDXEPFYBAAEUwABL18A1xP8LAADAAP48SsAAS+YBFMAAS+3ANcV0DQA9HMAATHCFwABMXsA1wtiD/QEAARTAAEx4wDXE2QoAAMAA/Qk9HMAATU2GwABNPcA1wvuArgEAATTAAE1SA8AATVLAAE+ZAAAAAgICwABNWgAAAIHXYAPAAGyEAMAATWQAAACCTmADwABshAAAYAPAAPyXAT4JTsAATXPAAE16AACBdmADwAD8lwEewABNhsAAh1MCAAIWwABNpRbAAE2dFMAATZvANc4gCwCESMAAbC2lbsAAbBMWwABNvRbAAE21FMAATbPANc4wDACESMAAbC2lbsAAbBMAScAATdIhHMAATd0UwABN1sA1zksNAEgBAAGTAMAA/btKwABN4wEUwABN6sA1zksNAD9OwABOBMAATg4AAMAATcFgA4qZARbAAE44HMAATicWwABOHIDAAE4QwDW6lrQRwACH27iYAQABFMAATjXANc4gCwAAwACEqIRggmVOwABOVMAATl4AAMAATcJgA4qZARbAAE6IHMAATncWwABObIDAAE5gwDW6lrQRwACH27iYAQABFMAAToXANc4wDAAAwACEqIRggmU9FcAATpjANc5LDR7AAE6hwACHVgIAAhbAAE69FMAATrPANc7gDgCBvYqbFsAATs0UwABOw8A1zysPAIG9ipsAScAATtohHMAATuUUwABO3sA1zksNAEgBAAGTAMAA/btKwABO6wEUwABO8sA1zksNAD89FcAATwDANc5LDRzAAE8YFsAATxMUwABPCcA1zuAOAIH7ipyCTwEAARbAAE8sFMAATyLANc8rDwCB+4qcAMAA/bxJwABPOSEcwABPRBTAAE89wDXOSw0ASAEAAZMAwAD9u0rAAE9KARTAAE9RwDXOSw0AP0rAAE9fARzAAE93FsAAT3AUwABPZsA1zuAOAIb6ip2CTwEAARbAAE+LFMAAT4HANc8rDwCG+oqdAMAA/bwAwAD9Tj0cwABPsYbAAE+hwDXC+4P9AQABFMAAT7nANcTZCgAAwAD9CUrAAE/NAR/AAE/YwABuegEAAYPAAE/pwDW6yAAGwABud4E6wABQXMAAUG7AAFDIAAC0sgAAAAEDwABQesAAUMgAAAABAQHAAFCCAAAAhJtgA8AAde0AAGADwABuewE+AUrAAFCPATUAAAABAGADwABuewEcwABQoBbAAFCWLsAATaLAAG4swABucUsBAAGAwABQocA10QcAwAD9gSMcwABQqIEAwDXRKEgBAAErAABqwABQsWADwABue8ABQzqBAMA10SgBYAPAAG57AAA1uHkANbmHADW6cgA10N0ANdGMAAAABALAAG57gTrAAFECwABRCMAAXFUDwABNwwAAAWABwAD95AAACATAAG59gTrAAFEywABRTQaD7ABgA8AA/n4BasAAUThgA8AA/n7AAUNkBMAAbn6BOsAAUWbAAFFyCZZoAGADwABhQgAEwABuf4E6wABRgcAAUZkJwABNsABgA8AA+tEABMAAboCBOsAAUajAAFG6CcAATbIAYAPAAPrRAATAAG6BgTrAAFHJwABR0QnAAEjgAGADwAD60QAEwABugoE6wABSfMAAUoMJwABNugBgA8AA+tEABMAAboOBOsAAU0fAAFNZCcAATbgAYAPAAPyXAATAAG6EgTrAAFN2wABTlgnAAE3AAF0DwAD9OwFgA71OAAEFwABuj4E6wABTm8AAU6HAAFSvAQAAA8AAU7LAAFSvAAAABwAAB8AAU8AAAASWaGADwABhQgFqAGADwAD9oXnAAFPZAAAEwABNsGADwAD60QFqwABT82ADwAD60QDAAFQFAAAEwABNsmADwAD60QFqwABUGWADwAD60QDAAFQrAAAEwABI4GADwAD60QFqwABUNWADwAD60QDAAFRHAAAEwABNumADwAD60QFqwABUUGADwAD60QDAAFRiAAAEwABNuGADwAD8lwFqwABUdmADwAD9oXnAAFSHAAAEwABNwF0DwAD9OwFgA71OAWrAAFSpYAPAAP2heWADwABuewE/CAgBwABufoAAwDXS4AgBwABuf4EAwDXS+QgBwABugIIAwDXTFwgBwABugYMAwDXTNQgBwABugoQAwDXTUwgBwABug4UAwDXTcQgBwABuhIYAwDXTjwkBwABTocAA/foAAAAABgbAAG6GgTrAAFS0wABUvMAAWA8EAcAATcUAAAABA8AAVNzAAFgPAAAAAQEBwABU6AAAAINKYAPAAF2xAABgA8AAbnsBPgo9HMAAVP2AwABU9sA11EqCmAEAAWrAAFUDYAPAAP5+wAFDZADAAF2zTsAAVRzAAFUpAACWaGADwABhQgEcwABVMoDAAFUrwDXUSsAARKcAAAAAwABd8k7AAFVRwABVagAAwABNsGADwAD60QEcwABVc4DAAFVswDXUSq+RAAAAAMAAXb9OwABViMAAVZsAAMAATbJgA8AA+tEBHMAAVaSAwABVncA11EqvkQAAAADAAF2/TsAAVbnAAFXCAADAAEjgYAPAAPrRARzAAFXLgMAAVcTANdRKr5EAAAAAwABdv07AAFXgwABV6AAAwABNumADwAD60QEcwABV8YDAAFXqwDXUSq+RAAAAAMAAXb9OwABWBcAAVhgAAMAATbhgA8AA/JcBHMAAViGAwABWGsA11EqvkwAAAADAAF3BTsAAVkjAAFZfAADAAE27XQPAAP07AWADvU4BHMAAVnCAwABWacA11EqvlAEBYAO9TgABr44pwABd6j0cwABWqIDAAFahwDXUSoKQAQABasAAVqxgA8AA/n7AAUNkAMAAXbRKwABWtgEfwABWwcAAbo8HAAAHlmiBwABW6sA11I3AAE2wgsAAVxrANdS7wABNsoPAAFdQwDXU6cAASOCEwABXdsA11RfAAE26hcAAV5HANdVFwABNuIbAAFe2wDXVc8AATcCHwABX9MA11aEGwABuiIE6wABYFMAAWBnAAFmYAACvdAAAAAEDwABYKMAAWZgAAAABAQHAAFgyAAAAhEBgA8AAXWIAAFwBPgk9HMAAWEOAwABYPsA11piCmAEAAWrAAFhJYAPAAP5+wAFDZADAAF1nPRzAAFhYgMAAWFPANdaYwABEhQEAARbAAFhsLpZowABufgDAAF2fPRzAAFiEgMAAWH/ANdaYr5gBAAEWwABYji7AAE2wwABufwDAAF1sPRzAAFiygMAAWK3ANdaYr5gBAAEWwABYvC7AAE2ywABugADAAF1sPRzAAFjagMAAWNXANdaYr5gBAAEWwABY5C7AAEjgwABugQDAAF1sPRzAAFj4gMAAWPPANdaYr5gBAAEWwABZAi7AAE26wABuggDAAF1sPRzAAFkVgMAAWRDANdaYr5kBAAEWwABZJC7AAE24wABugwDAAF1uPRzAAFlCgMAAWT3ANdaYr5wCAAEWwABZTy7AAE3AwABuhAGX3SnAAF2XPRzAAFmMgMAAWYfANdaYgpABAAFqwABZkGADwAD+fsABQ2QAwABdaAbAAG6LgTrAAFn6wABaA8AAWi0BAMAATb8AAAABA8AAWgrAAFotAAAAAAAAAGADwAD60QFKwABaDQEiHMAAWhoWwABaDS6WaMAAbn5IAQABKwDAAP3xACEWwABaJi7AAE26wABuggbAAG6MgTrAAFoywABaO8AAWpABAMAATa8AAAABA8AAWlHAAFqQAAAAAAAAAGADwAD60QFKwABaWgEiIhbAAFpaLsAATbLAAG6AABbAAFpwLsAASODAAG6BACEcwABaiRbAAFp8LpZowABufkgBAAErAMAA/fEGwABujYE6wABalcAAWqfAAFrgAQDAAE2RAAAAAQPAAFq1wABa4AAAAAAAAABgA8AAYUIBSsAAWrgBIxbAAFq4LsAATbLAAG6AFsAAWs0ulmjAAG5+KwFgA8AAYUIGwABuiYE6wABa5cAAWvjAAFxTAAAjAWrAAFrmYAPAAP3kAgAAAQPAAFsAwABcUwAAAAAAAABgA8AA/n4BSsAAWwwBJAATJ8AATcY1AAAAAQBgA8AAYUIBFsAAWy4ulmjAAG5+IxzAAFs8gADANdmWSAEAASsAACscwABbPIAAwDXZlrA0AAAAAMAAYWMBYAPAAP5+J4CnJ8AATccWwABbcy7AAE2wwABufyeApyfAAE3IFsAAW6kuwABNssAAboAnwABNyRbAAFvGLsAASODAAG6BJ4CnJ8AATcoWwABb4S7AAE26wABugifAAE3LFsAAW/0uwABNuMAAboMngKcnwABNzBbAAFwxLsAATcDAAG6EJ4MmAAA11B4ANdZuADXYEQA12HcANdjtADXZSgA12l8AAAAGAAABgToANdqCADWlBAA1rvgANa/aADWxCQA1sl8ANbQGADW3sgA10aUANdqAAAAACAA12oIAAAAAAAIEwABukACBOwAAAQEAAFoOAAAAAAECwABukYE7KzGBKgPAAE3NAAABYAHAAP3kAAFdAcAA/kwBXQPAAP07AWADwAD8lwEEwABuk4E7fYCDGIGTAGADgIsAAQXAAG6YgTuAiICIgKwAAAADgJ+ArAAAAAEBAYClAAAEgZNgA4CLAABgA8AAbpEBPwIIAcAAbpOAAMA12y8JAYCIwAD9+gAAAAACBsAAbpWBO4CxgMKA8gAAVgFqgLJgA8AA/eQCAAABA4DFgPIAAAABAQGA0AAAIBJdA8AA/TsBYAPAAPyXAABcAT4BPRyA4xaA3C6Bk8AAbpOCjgEAAYCA6cA124cAgI0GwABuloE7gPeBCIEoAACCjAFqgPhgA8AA/eQCAAABA4ENgSgAAAAAAAAAXAE+AT0cgR0WgRYugZPAAG6TgowAAAAAgI4AADXbXgA1270ANdwCAAAAAgAAAYE7ADXcFQA12tAANdwTAAAAAQA13BUAAAAAAAIEwABumcAATc6BPAAADYEDAACCLoIIAIEsAACkiwAAgUUAALinAAEBArJCs4CBkQAAwABhDwAAgbQAALX+AACB5gAApTwAAIINAAC9FQAAgjEAAMAAgHsAAIJSAADAAJy4AACCbAAAwABr6wAAgpQAAID7AACCrgAAwABdXAAAgtwAAMAAaJMAAAAAAAQCwABunYE8gvyDApQUA8AATc8AAAFgAcAA/eQAABgEwABuoIE8gyGDJwmXSMAAbpkAYAPAAPyXAATAAG6hgTyDOIM8CYC9AGADwAD+fgAEwABuooE8g0uDWwnAAE3QAGADwAD60QAEwABuo4E8g2qDdwnAAE3RAGADwAD60QAEwABupIE8g4aDkgnAAE3SAGADwAD60QAEwABupYE8hO2FOwa4pgBgA8AAbp0BaoUEYAPAAG6dwAD2oQTAAG6mgTyFvIYMBrinAGADwABunQFqhdRgA8AAbp3AAPbHBMAAbqeBPIYvhqAGuKgAYAPAAG6dAWqGRGADwABuncAA9u0EwABuqIE8hsOG+wa4qQBgA8AAbp0BaobbYAPAAG6dwAD3EwTAAG6pgTyHrIgOBriqAGADwABunQFqh71gA8AAbp3AAPc5BMAAbqqBPIlKib0GuKsAYAPAAG6dAWqJYGADwABuncAA92AEwABuq4E8itaLSQa4rABgA8AAbp0BaorsYAPAAG6dwAD3hwTAAG6sgTyLbIvPBsAATdMAYAPAAG6dAWqLfGADwABuncAA964EwABurYE8i/KMVQbAAE3UAGADwABunQFqjAJgA8AAbp3AAPfVBMAAbq6BPIx4jOgGwABN1QBgA8AAbp0BaoyLYAPAAG6dwAD3/ATAAG6vgTyNC418BsAATdYAYAPAAG6dAWqNHmADwABuncAA+CMEwABusIE8jZ+OGAbAAE3XAGADwABunQFqjbZgA8AAbp3AAPhKBMAAbrGBPI47jrQGwABLfgBgA8AAbp0Bao5SYAPAAG6dwAD4cwTAAG6ygTyO149OBsAATdgAYAPAAG6dAWqO7WADwABuncAA+JwEwABus4E8j3GP6AbAAE3ZAGADwABunQFqj4dgA8AAbp3AAPjDBMAAbrSBPJARkRkGKQBdA8AA/TsBYAPAAG6dAWqQGl0DwAD9OwFgA8AAbp3AAPjpBMAAbrWBPJFYkckGwABN2gBdA8AA/W0CYAPAAG6dXQPAAP4vAWADwABunQFqkWJdA8AA/W0CYAPAAG6dXQPAAP4vAWADwABuncABQ/YEwAButoE8kgeTiwbAAE3bAF0DwAD9bQJgA8AAbp1dA8AA/i8BYAPAAG6dAWqSEl0DwAD9bQJgA8AAbp1dA8AA/i8BYAPAAG6dwAFGrwTAAG63gTyTyZQSBsAATdwAXQPAAP1tAmADwABunV0DwAD+LwFgA8AAbp0BapPUXQPAAP1tAmADwABunV0DwAD+LwFgA8AAbp3AAUbkAQXAAG67gTyDl4OdhCwBAAADg62ELAAAAAUCAoOzAAAEl0hgA8AA/JcAg8AAAASAvWADwAD+fgADg9IAAATAAE3QYAPAAPrRAWqD5GADwAD60QCD9gAABMAATdFgA8AA+tEBaoQFYAPAAPrRAIQXAAAEwABN0mADwAD60QFqhCVgA8AA+tEAYAPAAG6dAT8GCAHAAG6ggADANeClCAHAAG6hgQDANeCzCAHAAG6iggDANeDCCAHAAG6jgwDANeDcCAHAAG6khADANeD2CQGDncAA/foAAAAAAQbAAG65gTyEMYQ5hIIBACcAAAABA4Q/hIIAAAAAAAAAYAPAAPyXAT4CQByEUxaETC6XSMAAbpnAAG6gSAEAARyEXWqEVl0DwAD9OwFgA8AAbp3AAPjpgLsBAAEuAMAA/VAAwAD9u4RMhGoASoRxARaEeC6XSMAAbpnAAG6gAAA14WIANeHfAAAAAQLAAG68gTypNKlDtHIHwABN3QAAAWABwAD95AAAAQTAAG6/gTypQwAElnTAAG6ZAFsBMQBbARoAwABuwQARBsAAbsGBPKmUqZyqJARBr3MAAAABA6m+qiQAAAACAgKp2gAAAHpgA4EUAKnuAAAAg0pgA8AAXbEAAGADwABuvAE9NQAAAACCcVsBGgDAAG7dEwAABsAAbsOBPKpcqmGqfwACr3QAAAABA6pwqn8AAAABAQGqegAAAIRAYAPAAF1iAABcAAbAAG7EgTyq26rgqwUAAsAATd4AAAABA6rwqwUAAAABAQGq/gAAAIJqYAO9PAAAYAPAAPrRAAbAAG7FgTyrg6uIq6gAAsAATd8AAAABA6uTq6gAAAABAQGroQAAAIJqYAO9PAAAYAPAAPrRAAbAAG7GgTysKKwtrE4AAsAATeAAAAABA6w5rE4AAAABAQGsRwAAAIJqYAO9PAAAYAPAAPrRAAbAAG7HgTysrqyzrNcAAsAATeEAAAABA6zCrNcAAAABAQGs0AAAAIJqYAO9PAAAYAPAAPrRAAbAAG7IgTytNK05rVoAAsAATaQAAAABA61FrVoAAAABAQGtUwAAAIJqYAO9PAAAYAPAAPrRAAbAAG7JgTytoK2lrcUAAsAATeIAAAABA62wrcUAAAABAQGtvgAAAIJqYAO9PAAAYAPAAPrRAAbAAG7KgTyuEK4VrjoAAsAATeMAAAABA64lrjoAAAABAQGuMwAAAIJqYAO9PAAAYAPAAPrRAAbAAG7LgTyuuq6/ru8AArfGAAAAAQOuzq7vAAAAAQEBrtQAAACBpmEDAWADvVFcAABcAAbAAG7MgTyvca92r6cAArfIAAAAAQOvhq+nAAAAAQEBr4wAAACBpmEDAWADvVFcAABcAAbAAG7NgTywBbAKsDoAArgBAAAAAQOwGbA6AAAAAQEBsB8AAACBpmEDAWADvVFcAABcAAbAAG7OgTywnbCisNcAArgCAAAAAQOwtrDXAAAAAQEBsLwAAACBpmEDAWADvVFcAABcAAbAAG7PgTyxbbF5saUAArPeAAAAAQOxkLGlAAAAAQEBsZ4AAACCamADvTwAAGADgWcABsAAbtCBPLI0skCycwACs9wAAAABA7JesnMAAAABAQGybAAAAIJqYAO9PAAAYAOBZwAGwABu0YE8s2+ze7OnAALAAE3kAAAAAQOzkrOnAAAAAQEBs6AAAACCamADvTwAAGADgWcABsAAbtKBPLQ1tEG0cAACs9oAAAABA7RbtHAAAAABAQG0aQAAAIJqYAO9PAAAYAOBZwAAADXiKgA14n4ANeKvADXi5QA14xsANeNRADXjhwA1470ANePzADXkKQA15FwANeSPADXkwgA15PUANeUnADXlWQA15Y0ANeW/AAAAEQLAAG7TgTy0dbR7wABM0APAAE3lAAABYAHAAP3kAAFgAcAAbrwGBMAAbtWBPLUotUAGg+wAYAPAAP5+AWq1LmADwAD+fsABRwYEwABu14E8tVe1cwnAAE3nwABumQBgA4FnAATAAG7YgTy1ibWsCcAATejAAG6ZAGADgWcABMAAbtmBPLXCtd4JwABN6cAAbpkAYAOBZwAEwABu2oE8tfS2EwnAAE3qwABumQBgA4FnAATAAG7bgTy2SrZbCbiIAF0DwAD9bQJgA708XQPAAGiUAWADwABunQABBcAAbvKBPLZgtmC4EwAAAAO2c7gTAAAAAgICtoQAAAB6YAOBFAC2kgAABLiIXQPAAP1tAmADvTxdA8AAaJQBYAPAAG6dAABgA8AAbtMBPwYIAcAAbtuBAMA15wwIAMAAbtcWttmAttHANecBgwKBSAgAwABu2Ba3PYC3NcA15wGDA4FJCADAAG7ZFreVgLeNwDXnAYMEgUoIAMAAbtoWt/WAt+3ANecBgwWBSwkBtmDAAP36AAAAABIGwABu3YE8uBi4ILmcBAGvcwAAAAEDuEa5nAAAAAICArheAAAAemADgRQAuHIAAACDSmADwABdsQAAYAPAAG7TAT4EPRy4h4G4gMA158qCmAEAAWq4jWADwAD+fsABRwYAwABds064xLjWAAC4iF0DwAD9bQJgA708XQPAAGiUAWADwABunQEcuOeBuODANefKtFQBAmADvTxdA8AAaJQBYAPAAG6dATS5AgO5ArlCAAAAAQEBuRAAAACCamADvTwAAF0DwABolAFgA8AAbp0BSrkbAR+5H8AAaMYBAWADwABunQEcuTiBuTHANefKsS8AAAAAwABdwAAAwABd6z0cuVCBuUnANefKgpABAAFquVRgA8AA/n7AAUcGAMAAXbRKuV4BH7lpwABu8gIAAoC5fcA157+CuYbANegFAAbAAG7fgTy5obmyuo8AAK90AWq5omADwAD95AIAAAEDucG6jwAAAAEBAbnLAAAAhEBgA8AAXWIAAFwBPgM9HLncgLnXwDXpBoKYAQABarniYAPAAP5+wAFHBgDAAF1nPRy58YC57MA16Qa0XAIBXQPAAGiUAWADwABunQIWugAuuIjAAG7bNLobA7obuncAAAACAgK6KQAAAIJqYAO9PAC6SwAAAJdQXQPAAGiUAWADwABunQAAYAPAAP2hAT4BPRy6XYC6WMA16QaxNQEAARa6aoK6ZsA16XyAlsAAaJ4AwABdbQDAAF2YPRy6g4C6fsA16QaCkAEAAWq6h2ADwAD+fsABRwYAwABdaAbAAG7hgTy6lLqZu00AAMAATevAAG6ZAAAAAQO6o7tNAAAAAgICurEAAACCamADvTwAusoAAACEt2ADwABunQAAYAPAAPrRAT4CTrr2uvoAAJdQXQPAAGiUAWADwABunQEcuw0WuvwuuIjAAG7bSwEAAYC7DsA16g0AwAD9gUq7GwEiIRy7JoK7IsA16jJIAQABKwDAAGixABy7NYK7McA16jKDHAEAAYG7PsA16hkAwABorQbAAG7igTy7Urtju8QAAMAATd4BartTYAPAAP3kAgAAAQO7c7vEAAAAAQEBu4EAAACCamADvTwAAGADwAD60QFKu5IBHLuSLsAATevAAG6ZAgACgLudwDXqx2q7tmADwABuncAA94cAwABu4QbAAG7jgTy7ybvavDEAAMAATd8BarvKYAPAAP3kAgAAAQO75bwxAAAAAQEBu/MAAACCamADvTwAAGADwAD60QFKvAQBHLwELsAATevAAG6ZAgACgLwPwDXrM2q8KGADwABuncAA9qEAwABu4QbAAG7kgTy8NrxHvKAAAMAATeABarw3YAPAAP3kAgAAAQO8U7ygAAAAAQEBvGEAAACCamADvTwAAGADwAD60QFKvHIBHLxyLsAATevAAG6ZAgACgLx9wDXrn2q8lmADwABuncAA9scAwABu4QbAAG7lgTy8pby2vRUAAMAATeEBarymYAPAAP3kAgAAAQO8xb0VAAAAAQEBvNMAAACCamADvTwAAGADwAD60QFKvOQBHLzkLsAATevAAG6ZAgACgLzvwDXsC2q9CGADwABuncAA9u0AwABu4QbAAG7mgTy9Gr0rvYQAAMAATaQBar0bYAPAAP3kAgAAAQO9N72EAAAAAQEBvUUAAACCamADvTwAAGADwAD60QFKvVYBHL1WLsAATevAAG6ZAgACgL1hwDXsd2q9emADwABuncAA9xMAwABu4QbAAG7ngTy9ib2avfEAAMAATeIBar2KYAPAAP3kAgAAAQO9pb3xAAAAAQEBvbMAAACCamADvTwAAGADwAD60QFKvcQBHL3ELsAATevAAG6ZAgACgL3PwDXs42q96GADwABuncAA9zkAwABu4QbAAG7ogTy99r4HvmgAAMAATeMBar33YAPAAP3kAgAAAQO+F75oAAAAAQEBviUAAACCamADvTwAAGADwAD60QFKvjYBHL42LsAATevAAG6ZAgACgL5BwDXtT2q+WmADwABuncAA92AAwABu4QbAAG7pgTy+bb5+v2kAALfGAWq+bmADwAD95AIAAAEDvo2/aQAAAAEBAb6TAAAAgaZhAwFgA71RXAAAXAE+AT0cvtAWvrUuuIjAAG7bg/0BAAE0vtgDvti/ZAAAAAICAr7mAAAAgmpgA708AL8IAAAAl1BdA8AAaJQBYAPAAG6dAABgA8AA/aEBPgFJvxUcvx2CvxnANe37gxwBAAFqvzdgA8AAbp3AAPahAMAAaK0+AT0cv02Av0zANe25IAEAASa/TgGBv07ANe3vYAO9UQAAPwDAAP2MBsAAbuqBPL9uv3/AAEBsAAC3yAFqv29gA8AA/eQCAAABA7+PwABAbAAAAAEBAb+VAAAAgaZhAwFgA71RXAAAXAE+AT0cv9IWv7cuuIjAAG7bg/0BAAE0v9oDv9rAAEBnAAAAAgICv+gAAACCamADvTwAwABACgAAAJdQXQPAAGiUAWADwABunQAAYAPAAP2hAT4BScAAQBccwABAH4LAAEAbwDXu2IMcAQABasAAQDlgA8AAbp3AAPbHAMAAaK0+AT0cwABAUIDAAEBPwDXulCABAAEmwABAUQGBwABAUcA17sxgA71RAAA/AMAA/YwGwABu64E8wABAccAAQILAAEFtAAC4AQFqwABAcmADwAD95AIAAAEDwABAkcAAQW0AAAABAQHAAECXAAAAgaZhAwFgA71RXAAAXAE+AT0cwABA1BbAAEC5LriIwABu24P9AQABNMAAQNwDwABA3MAAQWgAAAACAgLAAEDqAAAAgmpgA708AMAAQQwAAACXUF0DwABolAFgA8AAbp0AAGADwAD9oQE+AUnAAEEZHMAAQSGCwABBHcA179uDHAEAAWrAAEE7YAPAAG6dwAD3OQDAAGitPgE9HMAAQVGAwABBUMA174sgAQABJsAAQVIBgcAAQVLANe/NYAO9UQAAPwDAAP2MBsAAbuyBPMAAQXLAAEGDwABCeAAAuAIBasAAQXNgA8AA/eQCAAABA8AAQZfAAEJ4AAAAAQEBwABBnQAAAIGmYQMBYAO9UVwAAFwBPgE9HMAAQdoWwABBvy64iMAAbtuD/QEAATTAAEHiA8AAQeLAAEJzAAAAAgICwABB8AAAAIJqYAO9PADAAEISAAAAl1BdA8AAaJQBYAPAAG6dAABgA8AA/aEBPgFJwABCHxzAAEIngsAAQiPANfDegxwBAAFqwABCQWADwABuncAA92AAwABorT4BPRzAAEJcgMAAQlvANfCOIAEAASbAAEJdAYHAAEJdwDXw0GADvVEAAD8AwAD9jAbAAG7tgTzAAEJ9wABClcAARUQAALPeAWrAAEJ+YAPAAP3kAgAAAQPAAEKswABFRAAAAAEBAcAAQroAAACCamADvTwAAGADgWcBPgJJwABCyCEcwABC04DAAELMwDXxkUgBAAErAMAA/fE+Ak7AAEL+wABDCgAAhGhdA8AAaJQBYAPAAG6dARzAAEMdFsAAQwwuuIjAAG7bSwEAAYDAAEMewDXxkQDAAP2BScAAQy0hHMAAQz2BwABDMcA18chIAQABKwDAAGixPgFJwABDUBzAAENggcAAQ1TANfHIgxwBAAFqwABDemADwABuncAA9/wAwABorT4BSsAAQ5MBasAAQ6ZgA4FngyNJwABDvhzAAEPOgcAAQ8LANfHIgxwBAAFqwABD6GADwABuncAA+CMAwABorT4BSsAARAEBasAARBRgA4Fngy5JwABELBzAAEQ8gcAARDDANfHIgxwBAAFqwABEVmADwABuncAA+EoAwABorT4BSsAARHMBasAARIZgA4FngyNJwABEnhzAAESugcAARKLANfHIgxwBAAFqwABEyGADwABuncAA+HMAwABorT4BSsAAROUBasAARPhgA4Fngy4/Pz9KwABFHQEWwABFJC7AAE3nwABumcAAbtcGwABu7oE8wABFScAARWHAAEgcAACz3AFqwABFSmADwAD95AIAAAEDwABFf8AASBwAAAABAQHAAEWNAAAAgmpgA708AABgA4FnAT4CScAARZshHMAARaaAwABFn8A183JIAQABKwDAAP3xPgJOwABF0cAARd0AAIRoXQPAAGiUAWADwABunQEcwABF8BbAAEXfLriIwABu20sBAAGAwABF8cA183IAwAD9gUnAAEYAIRzAAEYQgcAARgTANfOpSAEAASsAwABosT4BScAARiMcwABGM4HAAEYnwDXzqYMcAQABasAARk1gA8AAbp3AAPf8AMAAaK0+AUrAAEZmAWrAAEZ5YAOBZ4MjScAARpEcwABGoYHAAEaVwDXzqYMcAQABasAARrtgA8AAbp3AAPgjAMAAaK0+AUrAAEbUAWrAAEbnYAOBZ4MuScAARv8cwABHD4HAAEcDwDXzqYMcAQABasAARylgA8AAbp3AAPicAMAAaK0+AUrAAEdFAWrAAEdYYAOBZ4MjScAAR3AcwABHgIHAAEd0wDXzqYMcAQABasAAR5pgA8AAbp3AAPjDAMAAaK0+AUrAAEe2AWrAAEfJYAOBZ4MuPz8/SsAAR+4BFsAAR/UuwABN6MAAbpnAAG7YBsAAbu+BPMAASCHAAEg5wABK5gAAwABN5AFqwABIImADwAD95AIAAAEDwABIUMAASuYAAAABAQHAAEheAAAAgmpgA708AABgA4FnAT4CScAASGwhHMAASHeAwABIcMA19VVIAQABKwDAAP3xPgJOwABIosAASK4AAIRoXQPAAGiUAWADwABunQEcwABIwRbAAEiwLriIwABu20sBAAGAwABIwsA19VUAwAD9gUnAAEjRIRzAAEjhgcAASNXANfWMSAEAASsAwABosT4BScAASPQcwABJBIHAAEj4wDX1jIMcAQABasAASR5gA8AAbp3AAPf8AMAAaK0+AUrAAEk3AWrAAElKYAOBZ4MjScAASWIcwABJcoHAAElmwDX1jIMcAQABasAASYxgA8AAbp3AAPgjAMAAaK0+AUrAAEmlAWrAAEm4YAOBZ4MuScAASdAcwABJ4IHAAEnUwDX1jIMcAQABasAASfpgA8AAbp3AAPicAMAAaK0+AUrAAEoWAWrAAEopYAOBZ4MjScAASkEcwABKUYHAAEpFwDX1jIMcAQABasAASmtgA8AAbp3AAPjDAMAAaK0+AUrAAEqHAWrAAEqaYAOBZ4MuPz8/SsAASr8BFsAASsYuwABN6cAAbpnAAG7ZBsAAbvCBPMAASuvAAEsDwABMzgAAs9oBasAASuxgA8AA/eQCAAABA8AASx3AAEzOAAAAAQEBwABLKwAAAIJqYAO9PAAAYAOBZwE+AknAAEs5IRzAAEtEgMAASz3ANfc2SAEAASsAwAD98T4CTsAAS2/AAEt7AACEaF0DwABolAFgA8AAbp0BHMAAS44WwABLfS64iMAAbttLAQABgMAAS4/ANfc2AMAA/YFJwABLniEcwABLroHAAEuiwDX3bUgBAAErAMAAaLE+AUnAAEvBHMAAS9GBwABLxcA1922DHAEAAWrAAEvrYAPAAG6dwAD3rgDAAGitPgFKwABMAQFqwABMFGADgWeDI0nAAEwsHMAATDyBwABMMMA1922DHAEAAWrAAExWYAPAAG6dwAD31QDAAGitPgFKwABMbAFqwABMf2ADgWeDLj8/P0rAAEykARbAAEyrLsAATerAAG6ZwABu2gAANeefADXo3AA16ecANeqbADXrBwA163MANevfADXsSwA17LcANe0jADXtjwA17mYANe9VADXwWAA18VsANfM8ADX1HQA19wAANfhjAAAAEgLAAG7zgTzAAEzTwABM2cAATnMDwABN7AAAAWABwAD95AAAAQTAAG71gTzAAE0hwABNNxi4iABdA8AA/W0CYAO9PF0DwABolAFgA8AAbp0BMsAATTVgA708XQPAAGiUAWADwABunQABBcAAbvoAAAAABAAAAwAAAAAAAAAAAGADwABu8wE/AQkBAMAA/foAAAAAAgbAAG73gTzAAE08wABNQcAATfkAALicAAAAAQPAAE1awABN+QAAAAICAsAATW8AAACCamADvTwAwABNkQAAAIRoXQPAAGiUAWADwABunQAAXAE+AUnAAE2kFsAATbSBwABNqMA1+X+Dt8AAaKA+AT0cwABN2RbAAE3ILriIwABu9YC/AgACgMAATdrANflxgcAATeTANfl/AMAA/YI/BsAAbviBPMAATf7AAE4OwABOcQAAgowAAAABA8AAThPAAE5xAAAAAQEBwABOJAAAAHpgA4EUAABgA8AAbrwBPgFKwABOMwEfwABOPsAAbvICAAKAwABOUsA1+g8WwABOWy64iMAAbvUAAAA1+UcANfnlADX6TgAAAAIAAgbAAG6bgTyUF5QymYAAAcAATe0AAAABA5RNmYAAAAADAwOUYwAAALO3YAO5kQCUiwAAAKU7YAO7ggCUsAAAAJZSYAO9PAAAXQPAAP07AWADwACAqAE+A06U2JTkAACEaF0DwAD9OwFgA8AAgKgBMZTmYAPAAICoAEaU7ACU/wAAAMAATZFgA8AAYUIAHJUpgZUWwDX6j7OHAQABgpU7wDX6mwC7ikE+BUmVSyEWlV6ElVDANfrdwABGQcAAYVBClXMAP06VmpWgAACAlmADwABikwEmlZoBhJWiwDX63WADwABik06VwZXFAACZ+mADvSoBFpXSFpXNhZXHwDX7JYKUwABiC5ZSwABi/0AhHJXqhpXmwDX7RkgBAAErAMAA/fGV5pXxAEmWFRyWHYaWGcA1+0ZIAQABFpYvgJYgwDX6g7JJuZgAwAD98T4BPRyWVoOWSsA1+rlWAQABapZgYAPAAICowAFHCwDAAP1MSZaOHJaWhpaSwDX7RkgBAAEWlqiAlpnANfqDskq5mQDAAP3xPgE9HJbQg5bEwDX6uVYBAAFqltpgA8AAgKjAAUcfAMAA/UxJlwkclxGGlw3ANftGSAEAARaXI4CXFMA1+oOce7mVAMAA/fE+CE6XRpdQAACqp2ADwABhQgEcl2gWl2KFl1zANfslhIvAAGKVSwEAARaXeICXacA1+oOyRbmWAMAA/YFJl5UiHJejh5eZwDX8PEgBAAErAMAA/fEBIRaXuYeXr8A1/Dy12cAAYUxCl8MAP06X2pffAACAvWADwAD+fgEWmAQml+wAh5fiwDX8PGADwABh+J2swABh+k6YHpglAACDKWADwAD+fgEnwABN7kmYOSEcmEMUmD7ANfylCACB2AEAARSYTsA1/M8JAADAAP6QQphXAD9OmG6YdQAAn/RgA8AA/n4BHJh8FJh3wDX8pQgAgL4BAAEWmI0UmIbANfzPCQBhwAD+ggDAAP6UTpirmLgAAMAATe9gA8AAYUIBHJjQFpjKhZjEwDX7JYSLwABilUsBAAEWmOCAmNHANfqDska5lwDAAP2BPRyZDIOZAMA1+rlWAQABH5kfwACAsQIAARSZNMA1/QwKAAHAAE3wIRaZVhSZScA1/UMLAKhCwABhRQDAAP1MP0qZbAGDmXPANfq5BsAAbpyBPJmDmZ2pMQABwABN8QAAAAEDmbWpMQAAAAQEBJnLAAAAemADgRQAmesAAAClEGADtf8AmgMAAACCamADg30AmioAAAC4ml0DwAD9OwFgA8AAgKgAAF0DwABolAFgA8AAbp0BPgdOml6aagAAhGhdA8AAaJQBYAPAAG6dAR+acMAAaMUAAWADwABunQAATpqUmpgAAICsYAPAAP7/ARaashaaoYKamsA1/gKEsoOGhHyCjU6axJrfAADAAE3yYAPAAPrRASIiFprvgJrnwDX964LMgUIBHJsGFpr/hZr7wDX+XYG8wAD/BUgBAAEnh4AAwAD+jQEemxPAAGvxAQABhZslwDX+XQBGmy6bZptIAAAAEmADwACAqACDm1DANf4OPgVOm3ObeAAAgL1gA8AA/n4BFpt/h5t6wDX+24C9wACArU6bkJuXAACf9GADwAD+fgEWm56Hm5nANf7bn/TAAICqTpuvm7UAAJ75YAPAAPrRASpBRpvCm/+b2AAAAIS3YAPAAG6dAGqb910DwAD9OwFgA8AAbp3AAPjpPgFJnAccnBsWnBYUnAvANf9ICwCAvcAAbqFIAQABFJwewDX/EgkAAMAA/o0+Bz0VnDDANf8yCik9HJxShJxGwDX+NVYBAAEUnFbANf9ICwAAwABopUmcbBacdYeccMA1/tvAAE3wwACAqz4BPRycloGcjcA1/favOQMAAx6cuMAAnL0BAAGCnNbANf4CAGqc+WADpT/AAMZVMp0QW1sBJ4GyJJ1MAyfAAE3zFJ0kwDX+8ggAJ8AATfQAtgc/SZ1iFp1xFJ1mwDX/SAsAwABN0MAAbqI+AUmdjyIhJZ2agp2TwDX+AmADhBIAISWdtYKdrsA1/gJgA4PPPgE9HJ3ggZ3XwDX99q85AwADHp4EwACcvQEAAYKeIsA1/gIAap43YAOlP8AAxlUynkBbWwEngbIkAAQnwABN8xSeY8A1/vIIACfAAE31J8AATfYAtgc/P0me6Rae+BSe7cA1/0gLAMAATdHAAG6jPgFJnxMhJZ8egp8XwDX+AmADg5w+AT0cn0OBnzrANf32rzkDAAMen2fAAJy9AQABgp+FwDX+AgBqn5pgA6U/wADGVTKfo1tbASeBsiQABCfAAE3zFJ/GwDX+8ggAJ8AATfUnwABN9wC2Bz8/SaA6IhagSRSgPsA1/0gLAMAATdLAAG6kACGGoFrANf6CPgE9HKCLgaCCwDX99q85AwADHqCtwACcvQEAAYKgy8A1/gIAaqDuYAOlP8AAxlUyoQVbWwEngbIkoTwDJ8AATfgUoTXANf7yCAAniKcAtgc/QqFSAD9JoWshFKFwwDX/MgoAPgE9HKGIgaF/wDX99q85AwADHqGmwACcvQEAAYKhxMA1/gIAaqHjYAOlP8AAxlUyofZbWwEngbIkoigDJ8AATfkUoiHANf7yCAAniKcAtgc/TqJqon0AAMAATfpdA8AA/W0CYAPAAG6dXQPAAGiUAWADwABunQEyon9gA8AAbp1dA8AAaJQBYAPAAG6dAEaihaLeopsAAACEt2ADwABunQAcoruEoq/ANf41g9EBAAFqotVdA8AA/TsBYAPAAG6dwAD46QDAAGiuPgZOovqjAgAAwABN2l0DwAD+LwFgA8AAbp0BHKMcaqMVXQPAAP1tAmADwABunV0DwAD+LwFgA8AAbp3AAUP2SwEAARSjHcA2AlUIAADAAP2BSaMuIRyjOhSjMsA2Ao4JAEgBAAErAMAA/fE+AUajS6Nzo2EAAACD22ADwABunQAUo2rANgKOCQA+AUmjfRyjjYSjgcA1/jWDHAEAARSjlsA2Av0KAADAAGitPgE9HKOzgaOqwDX99q86AwADHqPUwACcvQEAAYKj8sA1/gIAaqQHYAOlP8AAxlUypBBbWwEngbIkAAYnwABN+xakRRSkOsA2AlUIAIC9wABuoSfAAE38J8AATfsWpIEUpHvANgL9CgCAvcAAbqEnlIcAtgs/P06ky6TUAADAAE3bXQPAAP4vAWADwABunQEcpO9qpOddA8AA/W0CYAPAAG6dXQPAAP4vAWADwABuncABRq9LAQABFKTwwDYCVQgAAMAA/YFJpQEhHKUOFKUFwDYDrQoASAEAASsAwAD98T4BRqUfpUilNQAAAIPbYAPAAG6dABSlPsA2A60KAD4BSaVSIhylYoSlVsA1/jWDHAEAARSla8A2BBwLAADAAGitACE1AAAAAQBgA8AA+tEBNQAAAAEAXQPAAGiUAWADwABunQEcpZWHpYPANgIUSwEAARSllsA2BBwLAADAAP2BIxylnhQAwDYEZgwASAEAASsAACscpZ4UAMA2BGYMAIMcAQABFKWnwDYCVQgAAMAAaK0BYAPAAPrRIxylsxQAwDYEWQwASAEAASsAACoUAMA2BFkMAAFgA8AA+tE+Aj0cpdOBpcrANf32rzkDAAMepfXAAJy9AQABgqYTwDX+AgBqpihgA6U/wADGVTKmMVtbASeBsiQABifAAE37FqZmFKZbwDYCVQgAgL3AAG6hJ8AATf0nwABN/hamsBSmqsA2BBwLAIC9wABuoSeUhwC2Bz0cpwU1AAAAAQBdA8AA/W0CYAPAAG6dXQPAAGiUAWADwABunQGHptPANgIUNQAAAAEAYAPAAG6dARSm5sA2AlUIADUAAAABAF0DwABolAFgA8AAbp0BHKblFKblwDYFagwASwEAARSm5cA2BZINAADAAP2BIxym8hQAwDYFqA4ASAEAASsAwABosTUAAAABAF0DwABolAFgA8AAbp0BH6b6wABoxQABYAPAAG6dAAA1AAAAAQBcARym5RSm5cA2BWoMAIC/AgACFKblwDYFkg0AFADANgXwDwAAwAD9ghQAwDYF8A8AFADANgWoDgABXQPAAGiUAWADwABunVYBAAEUpwnANgQcCwAAwABopT8/TqdD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A8AAaJQBYAPAAG/AAATAAG86gT2nqaewCbw1AWqniGADwAD95AJdA8AAaJQBYAPAAG/AAAIFwABvQoE9p7WntamQAKg2AAOnyamQAAAACAICp9cAAACCamADvTwAp/IAAADAAE4KXQPAAGiUAWADwABvcwAGqAoAAATAAE4QXQPAAGiUAWADwABvwAFqAGADwAD9oXmoJQAABMAAThFdA8AAaJQBYAPAAG/AAWoAYAPAAP2heahBAAAEwABOEl0DwABolAFgA8AAb8ABagBgA8AA/aF5qF4AAAS8Ll0DwABolAFgA8AAb8ABagBgA8AA/aF5qHAAAAS8MV0DwABolAFgA8AAb8ABagBgA8AA/aF5qIMAAAS8NV0DwABolAFgA8AAb8ABagBgA8AA/aF5YAPAAG8zAT8NCAHAAG81ggDANh+JCAHAAG82gwDANh+pCAHAAG83hADANh/JCAHAAG84hQDANh/pCAHAAG85hgDANiAHCAHAAG86hwDANiAlDABAIRyoq4KonMA2H4lIAQABKwDAAGixqJyosgAMAEAhHKjUg6jEwDYfqUgBAAErAMAAaLGoxKjbAAwAQCEcqP6EqO3ANh/JSAEAASsAwABosajtqQUADABAIRypHYWpF8A2H+lIAQABKwDAAGixqRepJAAMAEAhHKk9hqk2wDYgB0gBAAErAMAAaLGpNqlEAAwAQCEcqV6HqVbANiAlSAEAASsAwABosalWqWUACQCpdsAAbzICAAKAqX3ANh9lgamFwDYfcQAFwABvQ4E9qZWplar7AAAAA6miqvsAAAAEAQGpsAAAAIJqYAO9PAADqcQAAATAAE4QXQPAAGiUAWADwABvwAFqAGADwAD9oXmp2QAABMAAThFdA8AAaJQBYAPAAG/AAWoAYAPAAP2heanvAAAEwABOEl0DwABolAFgA8AAb8ABagBgA8AA/aF5YAPAAG8zAT8KCAHAAG81gQDANiGECAHAAG82ggDANiGkCAHAAG83gwDANiHECADAAG84H6oWwABoxQABYAPAAG/AAAAIAMAAbzkfqjbAAGjFAAFgA8AAb8AAAAgAwABvOh+qV8AAaMUAAWADwABvwAAADABAIRyqgIGqccA2IYRIAQABKwDAAGixqnGqhwAMAEAhHKqpgqqZwDYhpEgBAAErAMAAaLGqmaqwAAwAQCEcqtOD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s0/AAEKwA8AATiIAAAFgAcAAbw0AAAgEwABvRoE9s4OzihjAAE4TAWqzc2ADwAD95AJgA8AA+tEABMAAb0eBPbOxs78JwABOEAFqs5BgA8AA/eQCXQPAAGiUAWADwABvwAAEwABvSIE9s+az9QnAAE4RAWqzxWADwAD95AJdA8AAaJQBYAPAAG/AAATAAG9JgT20HLQsCcAAThIBarP7YAPAAP3kAl0DwABolAFgA8AAb8AABMAAb0qBPbRTtFgJvC4BarQyYAPAAP3kAl0DwABolAFgA8AAb8AABMAAb0uBPbR/tIYJvDUBarReYAPAAP3kAl0DwABolAFgA8AAb8AABMAAb0yBPbSttLMJvDEBarSMYAPAAP3kAl0DwABolAFgA8AAb8AABMAAb06BPbTMtN0YwABOI8AAbvsAXQPAAP07AWADwABhQgErAgXAAG9cgT204rTitssAqDYAA7TztssAAAAJAgK1AAAAAISbYAO9TgC1GgAAAMAATgpdA8AAaJQBYAPAAG9zAAe1MgAABMAAThBdA8AAaJQBYAPAAG/AAWoAYAPAAP2hebVNAAAEwABOEV0DwABolAFgA8AAb8ABagBgA8AA/aF5tWkAAATAAE4SXQPAAGiUAWADwABvwAFqAGADwAD9oXm1hgAABMAAThNgA8AA+tEBagBgA8AA/aF5tZoAAAS8Ll0DwABolAFgA8AAb8ABagBgA8AA/aF5tawAAAS8MV0DwABolAFgA8AAb8ABagBgA8AA/aF5tb8AAAS8NV0DwABolAFgA8AAb8ABagBgA8AA/aF5YAPAAG9EAT8OCAHAAG9HggDANisuCAHAAG9IgwDANitOCAHAAG9JhADANituCAHAAG9GhQDANiuOCAHAAG9KhgDANiunCAHAAG9MhwDANivFCAHAAG9LFADANivjCAAMAEAhHLXngrXYwDYrLkgBAAErAMAAaLG12LXuAAwAQCEcthCDtgDANitOSAEAASsAwABosbYAthcADABAIRy2OoS2KcA2K25IAQABKwDAAGixtim2QQAMAEAhHLZZhrZTwDYrp0gBAAErAMAAaLG2U7ZgAAwAQCEctnmHtnLANivFSAEAASsAwABosbZytoAADABAIRy2mhS2ksA2K+MIAEgBAAErAMAAaLG2krahAAkAtrLAAG8yAgACgLa5wDYrCoG2wMA2KxYABcAAb12BPbbQttC4SQAAAAO22rhJAAAABAEBtucAAACEm2ADvU4AA7b6AAAEwABOEF0DwABolAFgA8AAb8ABagBgA8AA/aF5tw8AAATAAE4RXQPAAGiUAWADwABvwAFqAGADwAD9oXm3JQAABMAAThJdA8AAaJQBYAPAAG/AAWoAYAPAAP2heWADwABvRAE/CwgBwABvR4EAwDYtUggBwABvSIIAwDYtcggBwABvSYMAwDYtkggAwABvRioIAMAAb0oft2XAAGjFAAFgA8AAb8AAAAgAwABvTB+3hcAAaMUAAWADwABvwAAACADAAG9LH7emwABoxQABYAPAAG/AAAAMAEAhHLfPgbfAwDYtUkgBAAErAMAAaLG3wLfWAAwAQCEct/iCt+jANi1ySAEAASsAwABosbfot/8ADABAIRy4IoO4EcA2LZJIAQABKwDAAGixuBG4KQAJALg6wABvMQEAAYC4Q8A2LUUACgbAAG9QgT24Trh2uKcBAMAATaoBarhPYAPAAP3kAgAAAQO4h7inAAAAAAAAAF0DwAD8+QFgA8AAYUIBSriKATUAAAABAF0DwAD9OwFgA8AAYUIBFriKLsAATiPAAG77wABvTiMcuJyAAMA2LtZIAQABKwAAarifXQPAAP07AWADwABhQsABIMSAAMA2LtYBXQPAAP07AWADwABhQgbAAG9UgT24rLjLuVsAAKq1AWq4rWADwAD95AIAAAEDuM+5WwAAAAAAAABdA8AAaJQBYAPAAG9zAT4DSbjYFrjcLsAAThPAAG9GPgFKuO0Barj/XQPAAGiUAWADwABvc8ABR3I/PRe5Dy7AAE4TKcAAb0ZKuSMBHLk2FrkqLsAATgTAAG77wABvApcpAQABarlLXQPAAGiUAWADwABvc8ABR4QAwABoqAbAAG9VgT25YLl/uf4AALwEAWq5YWADwAD95AIAAAEDuYu5/gAAAAEBAbmaAAAAhhVgA8AAYUIAAF0DwABolAFgA8AAb3MBPgM9Ixy5vBa5qi7AAE4jwABu+8AAb05IAQABKwDAAP1lF7mqLsAATiPAAG77MbnAYAPAAGFCAMAAb04rAV0DwAD9OwFgA8AAYUI9HLnaFrnILsAATiPAAG77wABvTlYBAAGAud7ANjAEAMAA/UxKue0BHLn0Lqq1AAAAAMAAb1QGwABvUYE9ugO6GLozAQC8KgFqugRgA8AA/eQCAAABA7ogujMAAAAAAAAAYAPAAPrRAUq6IwEWuikWuiMuvC7AAG9Kg7fAAGigBsAAb1aBPbo4ule7SwAAnq8Baro5YAPAAP3kAgAAAQO6W7tLAAAAAQEBumwAAADAAE4VXQPAAGiUAWADwABvwAAAXQPAAGiUAWADwABvcwE+BE66gbqQAADAAE4XYAPAAPrRARa6ki68KsAAb1E9HLqlFrqfLrwuwABvSoClAQABHLq7FrqsLsAAThDAAG9HlykBAAGAusXANjEUAMAAaKgAwABopkm61YG62cA2MT0+AUq68QFquwNdA8AAaJQBYAPAAG9zwAFHcj9KuxMBHLsmFrsaLsAATgTAAG77wABvApcpAQABars7XQPAAGiUAWADwABvc8ABR4QAwABoqAbAAG9SgT27ULtlu4IBAMAATbEBartRYAPAAP3kAgAAAQO7bruCAAAAAAAAAGADwAD60QFKu3EBFrt4FrtxLrwxwABvTIO3wABooAbAAG9XgT27h7umvKAAAIKOAWq7iGADwAD95AIAAAEDu6u8oAAAAAEBAbu8AAAAwABOFV0DwABolAFgA8AAb8AAAF0DwABolAFgA8AAb3MBPgROu9G74QAAwABOGGADwAD60QEWu+MuwABNscAAb1I9HLv4FrvxLrwxwABvTIClAQABHLwPFrv/LsAAThHAAG9IlykBAAGAvBnANjJfAMAAaKgAwABopkm8KYG8LcA2Mog+AUq8RgFqvFhdA8AAaJQBYAPAAG9zwAFHcj9KvGgBHLx7FrxvLsAATgTAAG77wABvApcpAQABaryQXQPAAGiUAWADwABvc8ABR4QAwABoqAbAAG9YgT28pbzEvvsAALvtAWq8pmADwAD95AIAAAEDvMq++wAAAAICArziAAAAwABOFV0DwABolAFgA8AAb8AAvPoAAAC1JWADwABpIAAAXQPAAGiUAWADwABvcwE+BU696r35AADAAE4XYAPAAPrRARa9+y68KsAAb1E9HL4OFr4ILrwuwABvSoClAQABHL4kFr4VLsAAThDAAG9HlykBAAFqvjddA8AAaJQBYAPAAG/AwAD8igDAAGioAMAAaKY9HL5TFr5LLrw1wABvS4ClAQABHL5rFr5aLsAAThLAAG9JlykBAAGAvnXANjNhAMAAaKgA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RV3ANjmNgsAARWfANjmtAAXAAG9ygT3AAEV3wABFd8AARswAAAADwABFgsAARswAAAADAQHAAEWSAAAAgm5gA71RAALAAEWoAAAEwABOEF0DwABolAFgA8AAb8ABagBgA8AA/aF5wABFvQAABMAAThJdA8AAaJQBYAPAAG/AAWoAYAPAAP2heWADwABvXgE/CAgBwABvYIEAwDY7eAgBwABvYYIAwDY7mggAwABvYh/AAEXkwABoxQABYAPAAG/AAAAIAMAAb2MfwABGBcAAaMUAAWADwABvwAAACADAAG9kH8AARi3AAG++AQABFsAARkWAwABGPMA2O2m1F71UAAwAQCEcwABGeIHAAEZpwDY7eEgBAAErAMAAaLHAAEZpwABGfwAMAEAhHMAARqKCwABGkcA2O5pIAQABKwDAAGixwABGkcAARqkACQDAAEa6wABvMQEAAYDAAEbDwDY7aQAIBsAAb2aBPcAARtHAAEbmwABHIQEAwABOFAFqwABG0mADwAD95AIAAAEDwABG8MAARyEAAAAAAAAAYAPAAPrRAUrAAEbzASIWwABG+xbAAEbzLrw1wABvY4O3wABooAAWwABHGBbAAEcJLsAATifAAG9kwABOFMAAb7oGwABvaIE9wABHJsAAR0nAAEeoAQDAAE4FwABu+wFqwABHJ2ADwAD95AIAAAEDwABHVsAAR6gAAAAAAAAAXQPAAGiUAWADwABvcwFKwABHXwEjFsAAR2YWwABHXy6kZ8AAbxCFDb1BasAAR4RdA8AAaJQBYAPAAG9zwAFHlmrAAEeeXQPAAGiUAWADwABvc8ABR6gBXQPAAGiUAWADwABvcwbAAG9sgT3AAEetwABHzMAASsIAAJ6vAWrAAEeuYAPAAP3kAgAAAQPAAEfQwABKwgAAAAEBAcAAR+EAAADAAE4VXQPAAGiUAWADwABvwAAAXQPAAGiUAWADwABvcwE+Bk7AAEf2wABIBwAAwABOKGADwAD60QEWwABICS7AAE4UwABvZk7AAEgdwABILAAAwABOF2ADwAD60QEWwABILi68KsAAbxY9HMAASEEWwABIOy68LsAAb2KApQEAARzAAEhXFsAASEguwABOEMAAb2CXKQEAAYDAAEhhwDY95wDAAGioAMAAaKY9HMAASHkWwABIcS68NcAAb2OApQEAARzAAEiRFsAA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/QAAAIPzYAOFwwDAAEcXAAAAwABOnmADwABxNgDAAEc4AAAAhUpgA4jpAMAAR1YAAACFkWADg30AAFwBPhJJwABHsCEcwABHyRbAAEe5gMAAR7TANrK5hZGFykgBAAErAMAA/fFKwABH0gA/PRfAAEfjgMAAR97ANrK5hZGDwABH9cA2sueFzEnAAEgKISXAAEgbgsAASA7ANrLZYAOJNkrAAEgwAD9OwABITMAASFsAALR/YAOJNgEmwABITAGCwABIXcA2stlgA4k2TsAASIXAAEicAADAAE6oXQPAAP1tAmADwAD8l2ADiOkBMsAASJ5gA8AA/JdgA4jpAEXAAEimAcAASK/AAEixAABiYAPAAPyXAZMBHMAASLiGwABItsA2s79jAQABFsAASNQWwABIyRbAAEi/gMAASLrANrK5W4XHhaOFpmHAAP1rAMAA/cUBjsAASNzANrO/HMAASN2GwABI3MA2s79kAQABlADAAP29PgNOwABI9cAASQIAAMAASuxgA4jpARzAAEkcFsAASRKBwABJBMA2sseFo8AAcThLAQABhsAASR3ANrO/AMAA/UpOwABJM8AASUEAAKtsYAOI6QEcwABJZhbAAElShMAASUPANrNkhMeJOksBAAGGwABJZ8A2s78AwAD9SknAAElxIRzAAEmGFsAASXYuht3AAI+xmxoCAAKHwABJksA2tDMUwABJoMA2tHIIAACb0z4BPRzAAEnQhcAASbrANrOJgL8CAAKGwABJ0cA2s78UwABJ1sA2tHIIAADAAP2CP07AAEoNwABKHwAAwABOqV0DwAD9bQJgA8AA/JdgA4jpATLAAEohYAPAAPyXYAOI6QBFwABKKQHAAEoywABKQAAAwABOqmADwAD8lwGTARzAAEpbh8AASk3ANrVGYwEAARbAAEpyFsAASmwWwABKYoDAAEpdwDayuVuFx4VthadhwAD9awDAAP3FAY/AAEqCwDa1RhzAAEqPh8AASoLANrVGZAEAAZQAwAD9vT4ETsAASq7AAEq8AADAAE6rYAOFsQEcwABK0hbAAErNFsAASsOAwABKvsA2srlbhceFbYWnSwEAAYfAAErTwDa1RgDAAP1KTsAASvXAAEsCAADAAErsYAOI6QEcwABLFxbAAEsSgcAASwTANrLHhW3AAHE5SwEAAYfAAEsYwDa1RgDAAP1K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9wEAARbAAKv5gMAAq/TANwNlg9GIBQDAAI+MTsAArBTAAKwhAADAAE7nYAOI6QFqwACsKWADiQCEm0nAAKw/FsAArEiAwACsQ8A3A2WGP4gHPgNOwACsasAArH4AAMAATuhgA4kkARzAAKyALsAATpABAAGBwACsk8A3A34AwABwoU7AAKy5wACsxAAAmxJgA4kkARzAAKzWFsAArMYuht3AAI+xhYICAAKDwACs9cA3A+wWwACtJBbAAK0aFsAArQouht3AAI+xh3iboZsTnQQAm85JwACtOCEcwACtR4TAAK08wDcEG0gBAAErAIkyPgE9isAArVrANwO0H8AArW2JNAIAAhbAAK2lFsAArZsWwACtiy6G3cAAj7GHeJuhnIedBxbAAK3RhMAArcbANwQbhSyJKAA/PgNOwACuDcAAriMAAMAATulgA4kkARzAAK4lLsAATpABAAGBwACuOMA3A34AwABwoU7AAK5XwACuXgAAgmpgA4N9ARzAAK5qFsAArmAuh3zAAHCZm0MCAAIWwACunoPAAK6IwDcE04TviSoewACurYi9AQABasAArsFgA8AA/n7AAO9xAACcAEnAAK7TIRzAAK7ehMAArtfANwUCSAEAASsAwAD98T4BPYrAAK7xwDcDtBzAAK+oHsAArxCbFQEAARzAAK9DFsAArzMuht3AAI+xhYICAAKDwACvbMA3BNMWwACvioTAAK+DwDcFAoUKg4UAm84AhZMBAAEWwACvvoTAAK+3wDcFAoUPg5AAmxw/PSMcwACv9RbAAK/dLsAAToLAAHB7wABwj0gBAAErAMAA/fEXwACv3S7AAE6CwABwezLAAK/5YAOIAWADiOkAwABwjysBXQPAAP1tAmADiAFgA4jpPRzAALAYFsAAsAEuwABOgsAAcHvAAHCPgL8CAAKAwACwGcA3A2WCwACwIcA3A7QAwAD9gk7AALA7wACwRgAAwABO5WADwABxWwEXwACwSC62gBzAALBiFsAAsFoutoDAAHErhF4BAAEWwACwjhzAALB8FsAAsGkuuKXAAHEpwABO3QEAAYDAALCIwDcDZQDAAII8wABO3sAAglIAwABxYsAAcTE9HMAAsKYuwABG9wEAARbAALC1gMAAsLDANwNlgnCIBADAAI+MPRzAALDELsAARvcBAAEWwACw04DAALDOwDcDZYJtiAYAwACPjD0cwACw3i7AAE7mAwADgMAAsPPANwNlgcAAsPnANwN+gsAAsQfANwO0AMAAcQQ9F8AAsRoutoCDwACxJMA3BmrAAHExBsAAcQaBQMAAsTfAALFIwACyOAAAhjgBasAAsThgA8AA/eQCAAABA8AAsVjAALI4AAAAAQEBwACxaAAAAIPzYAOH6QAAYAPAAP2hAT4ETsAAsXzAALGHAADAAE7lYAPAAHFbARfAALGJLraAHMAAsaMWwACxmy62gMAAcSuEXgEAARbAALHPHMAAsb0WwACxqi64pcAAcSnAAE7dAQABgMAAscnANwedAMAAgjzAAE7ewACCUgDAAHFiwABxMT0cwACx5y7AAEb3AQABFsAAsfaAwACx8cA3B52CbYfrAMAAj4w9HMAAsgEuwABG9wEAARbAALIQgMAAsgvANwedhcqH7ADAAI+MPRfAALIgLraAgcAAsirANwe2wABxMQbAAHEHgUDAALI9wACyTsAAs2MAAIY2AWrAALI+YAPAAP3kAgAAAQPAALJhwACzYwAAAAEBAcAAsnQAAACD82ADh94AAGADwAD9oQE+BU7AALKIwACykwAAwABO5WADwABxWwEXwACylS62gBzAALKvFsAAsqcutoDAAHErhF4BAAEWwACy2xzAALLJFsAAsrYuuKXAAHEpwABO3QEAAYDAALLVwDcIuwDAAII8wABO3sAAglIAwABxYsAAcTE9HMAAsvMuwABG9wEAARbAALMCgMAAsv3ANwi7hcqH4ADAAI+MPRfAALMSLraAFsAAsxwuwABOjMAAcSzAAHExPRzAALMxLsAARvcBAAEWwACzQIDAALM7wDcIu4Jth+EAwACPjD0XwACzSy62gIHAALNVwDcI1MAAcTEGwABxCIFAwACzaMAAs23AALOdAADAAE7qAAAAAQPAALOCwACznQAAAAEBAcAAs5YAAACD82ADiA8AAFwBPgAGwABxCYFAwACzosAAs7PAALXIAACGQwFqwACzo2ADwAD95AIAAAEDwACzx8AAtcgAAAABAQHAALPbAAAAg/NgA4gPAABgA8AA/aEBPgg9HMAAs+cuwABG9wEAARbAALP2gMAAs/HANwozgm+IEQDAAI+MTsAAtA/AALQfAADAAEKwYAPAAHFbARbAALQhLraAwABxK07AALQ8wAC0QgAAnwZg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AQEBwADFAwAAAIPzYAOIfgAAXAE+AAbAAHCtgUDAAMUPwADFFMAAxkcAAMAATszAAHB7AAAAAQPAAMUpwADGRwAAAAEBAcAAxUEAAACD82ADiH4AAFwBPgM9HMAAxV8WwADFTS7AAE6FwABwe8AAcJJWAQABgMAAxWPANxx6AMAA/jxOwADFesAAxX8AAIKUYAOI6QEcwADFgS7AAEb3AQABFsAAxZCAwADFi8A3HHqFE4iGAMAAj4xJwADFoiIiIRzAAMW3FsAAxauAwADFpsA3HHqFE4iGSAEAASsAwAD98QAcwADF3RbAAMXKLrilwABxKcAATbIBAAGAwADF8MA3HHoAwACCPQAWwADGAS64ucAAcSg+AT0XwADGMoDAAMYtwDcceoKUgcAAxjnANxy4iIQ/BsAAcSOBQMAAxkzAAMZdwADG3QAAhmcBasAAxk1gA8AA/eQCAAABA8AAxnXAAMbdAAAAAQEBwADGjQAAAIPzYAOIfgAAYAPAAP2hAT4CPRzAAMaZLsAATszAAHB7AQABgMAAxq/ANx2fAMAAcK09HMAAxrouwABOsAEAAYDAAMbUwDcdnwDAAHEiBsAAcSSBQMAAxuLAAMbnwADHHQAAwABO+QAAAAEDwADG/8AAxx0AAAABAQHAAMcWAAAAg/NgA4dVAABcAT4ABsAAcSWBQMAAxyLAAMc6wADHxgAAhhYBasAAxyNgA8AA/eQCAAABA8AAx1HAAMfGAAAAAQEBwADHaAAAAIPzYAOHVQAAYAOI6QE+Aj0cwADHdC7AAE75AQABgMAAx43ANx5oAMAAcSRKwADHmAEdwADHpYYWAQABgMAAx73ANx5oAMAAj68AADaQ2gA2kTUANpFdADaRhQA2ka0ANpITADaSjwA2kugANpOoADaUFQA2lI4ANpTtADaVZgA2lcUANpY5ADaWmAA2lzUANpfSADaYZgA2mesANpvnADacMgA2nI0ANp/rADagNgA2oz0ANqOIADak3AA2pTcANqeuADan+QA2qLYANqkkADap7gA2qpwANqtBADayiQA2vikANsWdADbImQA2yQYANs3ZADbOJgA20FcANtCkADbSSAA20pUANtM/ADbTjAA21DYANtSVADbWGwA21ngANtgiADbYbwA22nkANtrGADbbcAA2288ANt48ADbhQAA24kcANuUSADblyQA25ggANufyADbohQA26RQANum8ADbqFwA2604ANuydADbtFQA27WQANu4rADbuagA27xUANu9UADbv2gA28BkANvCfADbw3gA28WQANvGjADbyKQA28mgANvLuADbzLQA287MANvPyADb0nQA29NwANvWHADb1xgA29nEANvcJADb3SAA2+a0ANvnsADb6lwA2+y8ANvuQADb8AwA2/GQANvzXADb9SgA2/YkANv4YADb+aQA2/xkANv9qADcAGgA3AI0ANwEBADcBTwA3AtIANwMvADcHZwA3CIUANwm+ADcJ/QA3C+UANwxrADcNCQA3DaEANw3gADcObwA3DwcANw9GADcPzAA3EAsANxCRADcQ0AA3EjYANxJ1ADcUowA3FOIANxWKADcVyQA3FoAANxa/ADcYagA3GKkANxpPADcajgA3HAsANxxKADcdaQA3HfMANx4yADceuAAAAJYCwABxNoFAwADHy8AAx9HAAMhXA8AATvoAAAFgAcAA/eQAAAIEwABxOIFAwADH+8AAyAUJhaMAXQPAAP07AWADiOkABMAAcTmBQMAAyCHAAMgmCYVtAF0DwAD9OwFgA4jpAAEFwABxO4FAwADIK8AAyCvAAMhVAAAAA8AAyDjAAMhVAAAAAgICwADIPgAABIWjXQPAAP07AWADiOkAwADITwAABIVtXQPAAP07AWADiOkAAGADwABxNgE/AwgBwABxOIAAwDchoQgBwABxOYEAwDchtgkBwADIK8AA/foAAAAAAAAANyH8AAAAAALAAHE8gUDAAMlfwADJZcAA1IMDwABO+wAAAWABwAD95AAABATAAHE+gUDAAMm1wADJwQms8gBgA4jpAATAAHE/gUDAAMokwADKLQnAAE78AF0DwAD+LwFgA4jpAATAAHFAgUDAAMqWwADKoAnAAE79AF0DwAD+LwFgA4jpAATAAHFCgUDAAMqpwADKshiGj8AAcHsAYAPAAPyXASsBBcAAcUyBQMAAyrfAAMq3wADK9QAAAAPAAMrBwADK9QAAAAMDA8AAyscAAASs8mADiOkAwADK2gAABMAATvxdA8AA/i8BYAOI6QDAAMrqAAAEwABO/V0DwAD+LwFgA4jpAABgA8AAcTwBPwQIAcAAcT6AAMA3IsgIAcAAcT+BAMA3ItYIAcAAcUCCAMA3Iu0JAcAAyrfAAP36AAAAAAUGwABxRIFAwADLcsAAy37AAM+2AADAAE62AAAAAQPAAMuEwADPtgAAAAEBAcAAy5gAAACG3WADm58AAGADiOkBPgROwADLu8AAy8UAAIhiYAOI6QEWwADLxy6s8sAAcT5JwADL2SEcwADL6BbAAMvdLsAATv3AAHFASAEAASsAwAD98T4BRsAAzF3AAMyCwADMbgAAAIKUYAOI6QAWwADMdi7AAE79wABxQD4BScAAzIwcwADMoIDAAMyQwDcjbZsaAgACFsAAzKwurPLAAHE+gsAAzLrANyPPAJvTPgFKwADMzQEWwADM5IDAAMzUwDcjbYWAm6s/P0nAAM0KIRzAAM0YFsAAzQ4uwABO/MAAcT9IAQABKwDAAP3xPgFGwADNKcAAzU3AAM06AAAAgpRgA4jpABbAAM1CLsAATvzAAHE/PgJJwADNVxzAAM1ggsAAzVvANyRnSAEAARbAAM1zgMAAzWPANyNthYCbqwCI7T4BSsAAzYkBgsAAzZDANyRnP0nAAM2oHMAAzbyAwADNrMA3I22bGgIAAoLAAM3IwDckZ4HAAM3OwDcjhACb0z4BPYnAAM3mwDcjhILAAM3ywDckZ0nAAM4HIRzAAM4cgMAAzgzANyNtmxoCAAKBwADOKMA3I4SCwADOM8A3JGcAm9M+AUrAAM95ASs/P0rAAM+iAYHAAM+pwDcjhAbAAHFKgUDAAM+7wADPz8AA0IwBAIPGAWrAAM+8YAPAAP3kAgAAAQPAAM/YwADQjAAAAAAAAABgA8AA/JcBPgJJwADP3hzAAM/sFsAAz+Iuho/AAHB7wABxQkgBAAErAMAA/bs+AT0XwADP/S6Gj8AAcHsewADQEYH0AgFgA4jpAhbAANAZLsAATv3AAHFAHsAA0DeB9AIBYAOI6QIWwADQPy7AAE78wABxPx7AANBSgfEBAAEWwADQXS6s8sAAcT4AAADAAHFCP0rAANB4ARbAANB/LoaPwABwe8AAcUIGwABxRYFAwADQkcAA0KvAANGYAwBIAWrAANCSYAPAAP3kAgAAAQPAANCtwADRmAAAAAEBAcAA0K4AAACD21sAAGADwAD60QE+AknAANC7HsAA0L/AAPZ4AgACLoDAANDPwDcmYQBKwADQ1wEpP0rAANDoASIiIiXAAND1gMAA0O/ANyZhYAPAAHE8ABzAANEbFsAA0Q4urPLAAHE+SAEAARbAANEkFMAA0R7ANyZhAAFgA8AAcTys8sAAcT4AiO0AHsAA0TyB5QIBYAOI6QIWwADRRi7AAE78wABxPxbAANFXFMAA0VHANyZhAAFgA8AAcTzAAE78wABxPwAAHsAA0W2B5QIBYAOI6QIWwADRdy7AAE79wABxQBbAANGJFMAA0YPANyZhAAFgA8AAcTzAAE79wABxQAAGwABxR4FAwADRncAA0aLAANMtAADAAE7+wABwewAAAAEDwADRqsAA0y0AAAACAgLAANG/AAAAg+lgA8AA/sgAwADR6gAAAMAATv9hAwFdA8AA/PkBYAOI6WADwAD+fgAAXAE+BT0cwADSAIDAANH9wDcnlIKOAQABJ5nmAMAA/txOwADSF8AA0h0AAKL4YAPAAP5+AScAScAA0ichHMAA0jUWwADSKy7AAE78wABxP0gBAAErAMAA/fE+Az0cwADSSYDAANJGwDcnlIKOAQABJ8AATwAAwAD+3D0cwADSYoDAANJfwDcnlIKOAQABHMAA0nOBwADSaMA3J6QgAQABFsAA0nQuwABO/MAAcT8AAADAAP7cPYrAANKHwDcn5ieApz9JwADSniEcwADSrRbAANKiLsAATv3AAHFASAEAASsAwAD98T4DPRzAANLBgMAA0r7ANyeUgo4BAAGCwADSx8A3J+YAwAD+3D0cwADS2IDAANLVwDcnlIKOAQABJ8AATwEAwAD+3D0cwADS8oDAANLvwDcnlIKOAQABHMAA0wOBwADS+MA3J6QgAQABFsAA0wQuwABO/cAAcUAAAADAAP7cPz0cwADTH4DAANMcwDcnlIKOAQABJ4bXAMAA/twGwABxSIFAwADTMsAA00XAANSBAAAjAWrAANMzYAPAAP3kAgAAAQPAANNNwADUgQAAAAAAAABgA8AA/n4BPgdOwADTY8AA02YAAIPpYAPAAP7IAR/AANNswAD+5wAAAAA9HMAA04OAwADTgMA3KYSCjgEAASfAAE8CAMAA/tw9HMAA06CAwADTncA3KYSCjgEAASTAANO+AifAAE8DFsAA07EurPLAAHE+AMAA/txJwADTxSEcwADT0xbAANPJLsAATvzAAHE/SAEAASsAwAD98T4BPRzAANPngMAA0+TANymEgo4BAAEkwADT/wInvW4WwADT9S7AAE78wABxPwDA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bnsAwABxnD4BSrk4AWq5TmADwAByEcABSSU/SbltHLl4gblxwDduiUgBAAFquYZgA8AAcfLAAPTuAMAA/fE+AUm59xy5+y6bGgIAAoK6B8A3bpmAug3AN257AMAAcZs+AUq6IAFqujZgA8AAchHAAUklPz9KulYBarpsYAPAAHIRwAFI/Um6fiIcuomBuoLAN26JSAEAAWq6l2ADwABx8sAA9NcAwAD98QAcuqqDuqPAN26nSAEAAWq6uGADwABx8sAA9NcAwAD98T4CSbstIhy7NoC7McA3bntIAQABgrs5wDdumQDAAP3xARy7QS6bRgIAAoC7TsA3bnuCu1TAN26ZAMAAcZw+AUq7wwFqu9lgA8AAchHAAUk5SbvxHLv1LptGAgACgrwCwDdumYC8CMA3bnsAwABxnD4BSrx3AWq8jWADwAByEcABSU0/SrymAWq8vGADwAByEcABSP1JvM4cvNmBvNLAN26JSAEAAWq852ADwABx8sAA9NcAwAD98T4FSbz5HLz9LpsaAgACgL0JwDdue4K9D8A3bpkAwABxmz4BSr1gAWq9dmADwAByEcABSTk/Sb2PHL2YgL2TwDdue0gBAAEWvasWvZsutHzAAHFpwABxj5r/uKoAwAD98T4BSr43AWq+TWADwAByEcABSWE/TsAAQGfAAEBvAACEiF0DwAD9OwFgA70qATHAAEB+YAO9KgA9HMAAQIguwABPIwIAAoDAAECgwDduezTAAECmA8AAQKbAAEIHAAAAAQEBwABAswAAAJtHYAO9KgAAYAPAAIidAT4CScAAQMccwABAyy6bGgIAAoXAAEDXwDdy14LAAEDhwDdumQDAAHGbPgI9HMAAQPyEwABA9MA3copWAQABhcAAQQDAN3LXAMAA/UxKwABBqQFqwABBvmADwACIncABSXo/SsAAQeEBasAAQfZgA8AAiJ3AAUmTAMAAcaBKwABCEAEfwABCG8AAch8BAAGEwABCKsA3cooAScAAQj8cwABCSoPAAEJDwDdup0gBAAFqwABCWGADwABx8sAA9NcAwAD98T4FScAAQmocwABCbi6bGgIAAoLAAEJ6wDdumYDAAEKAwDduewDAAHGbPgFKwABC0QFqwABC52ADwAByEcABSU0/ScAAQwAcwABDCYLAAEMEwDdumUgBAAEWwABDHBbAAEMMLrR8wABx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wACHl8AAh54JhIgAXQPAAP07AWADvSoABMAAchWBQcAAiD7AAIiDBraKAGADwAByEQFqwACIUmADwAByEcABSP0EwAByFoFBwACIo8AAiOoGwABPfABgA8AAchEBasAAiLhgA8AAchHAAUkRBMAAcheBQcAAiQrAAIlRBsAAT30AYAPAAHIRAWrAAIkfYAPAAHIRwAFJJQTAAHIYgUHAAIlxwACJvgbAAE9+AGADwAByEQFqwACJiWADwAByEcABSTkEwAByGYFBwACJ3sAAiisGwABPfwBgA8AAchEBasAAifZgA8AAchHAAUlNBMAAchqBQcAAikvAAIqWBsAAT4AAYAPAAHIRAWrAAIpiYAPAAHIRwAFJpwTAAHIbgUHAAIq2wACLAQbAAE+BAGADwAByEQFqwACKzWADwAByEcABSWECBcAAch+BQcAAh6PAAIejwACH3wAAAAPAAIexwACH3wAAAAEBAcAAh7cAAASEiF0DwAD9OwFgA70qAABgA8AAchEBPwMIAcAAchSAAMA3ozUIAMAAchNqwACH3GADwABx/8AA9akJAcAAh6PAAP36AAAAAAXAAHIggUHAAIfkwACH6sAAiB0BlX8AA8AAiAHAAIgdAAAAAQEBwACIBwAABIJrYAPAAHH/AABgA8AAchEBPwMIAcAAchOAAMA3o6kIAMAAchQrCQHAAIfqwAD9+gAAAAABBsAAch2BQcAAiwbAAIsZwACLTwAAIwFqwACLB2ADwAD95AIAAAEDwACLIcAAi08AAAAAAAAAYAPAAP5+AUrAAIsnASTAAItPBSfAAE+DFsAAizgugmvAAHITJ8AAT4QWwACLRi6EiMAAchQngyYAADej5QA3pFMAAAABAAABgUEAN6RiADdQ9gA3WBAAN3m/ADeL/gA3kxsAN5kPADebUwA3nUsAN58EADehhwA3pGAAAAAKADekYgAAAAAAAgTAAHIhwABPhYFCAAAMgPgAAMAAvlsAAQEBn0KBHgAAgi6CCACBRgAAwACFhgAAgWAAAKSOAACBewAAvRUAAIGfAADAAEMnAACBygAAwAB1CAABAQHAAE+GggYAAMAATZgAAIIeAAC+NgAAgkMAAMAAcwkAAIJiAADAAJzsAACCggAAwABBkgAAAAAAAgLAAHIigUKDdYN7hY8DtDYAAAFgAcAA/eQAAAEEwABy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ojOiRKJRAQKrEwAAAAEDolGiUQAAAAAAAABgA708AAbAAHKegUSifKKCoq8AAsAATKwAAAABA6KSoq8AAAABAQGiqgAAAIPzYAOIfgAAYAO9dQAGwAByn4FEorSiuqMLAALAAEyuAAAAAQOizqMLAAAAAgICousAAACD82ADiXEAowAAAAC0EWADwAByXgAAYAO9dQAGwAByoIFEo0+jX6OLAALAAEywAAAAAQOjeqOLAAAAAQEBo4EAAACA7WADvXUAAGADhK4ABsAAcqGBRKO5o8Kj9gACwABMsgAAAAEDo86j9gAAAAICAqPeAAAAtBFgA8AAcl4Ao/AAAACfB2ADvXUAAGADwABi1gAGwAByooFEpDqkRaRyAALAAEyhAAAAAQOkWqRyAAAAAQEBpG0AAACD82ADh9QAAGADwACGAgAGwAByo4FEpMikzaT9AALAAEyjAAAAAQOk5aT9AAAAAQEBpPgAAACD82ADh9QAAGADwAD60QAGwABypIFEpXqlhaW0AALAAEynAAAAAQOlmqW0AAAAAQEBpa8AAACD82ADh8oAAGADwACGAgAGwABypYFEpi+mOqZpAALAAEyoAAAAAQOmUKZpAAAAAQEBpmQAAACD82ADiA8AAGADwACGAgAGwABypoFEpremwqcBAALAAEykAAAAAQOm4KcBAAAAAQEBpvwAAACD82ADiCgAAGADwACGAgAGwAByp4FEp3engqewAALAAEylAAAAAQOnnKewAAAAAQEBp6sAAACD82ADiBoAAGADwACGAgAGwAByqIFEqCSoL6hWAALAAEymAAAAAQOoQahWAAAAAQEBqFEAAACD82ADh+kAAGADwACGAgAGwAByqYFEqM6o2akCAALAAEypAAAAAQOo7KkCAAAAAQEBqP0AAACD82ADh/QAAGADwACGAgAGwAByqoFEqX2piKm1AALAAEyqAAAAAQOpnam1AAAAAQEBqbAAAACD82ADiAEAAGADwACGAgAGwAByq4FEqi+qOqpnAALAAEyrAAAAAQOqT6pnAAAAAQEBqmIAAACD82ADh94AAGADwACGAgAGwAByrIFEqqGqpqrEAAKvdAAAAAEDqrWqxAAAAAEBAaq/AAAAhEBgA8AAXWIAAFwAAAA3y/UAN8wbADfMTwA3zJEAN8zFADfNCQA3zT8AN811ADfNqwA3zeEA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+wEewABCBsAAfdABAAGAwABCMMA33NEAAcAAQk5qwABCTmADwAByycABSwsAPgFKwABCXgEewABCacAAfiQBAAGAwABClsA33NEAPTDAAEKpH8AAQrPAAPwpAQABJMAAQuACJ8AAT8yBwABC28A33OwABsAAcvqBRMAAQx3AAEMiwABDQAACr3QAAAABA8AAQzHAAENAAAAAAQEBwABDOwAAAIRAYAPAAF1iAABcAAAAN9wfADfcRwA33HcAN9ynADfeAgA33j8AAAAFAsAAcvuBRMAAQ3rAAEOAwABHCAPAAE/NAAABYAHAAP3kAAFgAcAAcvICBMAAcv2BRMAARDfAAERXBoPsAGADwAD+fgFqwABEPWADwAD+fsABSz0EwABy/oFEwABEd8AARHsJg/MBasAARF1gA8AA/eQCYAODGwABBcAAcwiBRMAARIDAAESAwABEoQAAAAPAAESWwABEoQAAAAEBAcAARJwAAASD82ADgxsAAGADwABy+wE/AggBwABy/oAAwDfe+QkBwABEgMAA/foAAAAABQbAAHMAgUTAAESmwABErsAARXQEAa9zAAAAAQPAAETXwABFdAAAAAEBAcAAROMAAACDSmADwABdsQAAYAPAAHL7AT4EPRzAAET4gMAARPHAN99WgpgBAAFqwABE/mADwAD+fsABSz0AwABds07AAEURwABFFgAAg/NgA4MbARzAAEUfgMAARRjAN99WwABEkQAAAADAAF3JPRzAAEU7gMAARTTAN99WgpABAAFqwABFP2ADwAD+fsABSz0AwABdtErAAEVJAR/AAEVUwABzCAEAAYHAAEVrwDffmQAGwABzAoFEwABFecAARYrAAEYOAACvdAFqwABFemADwAD95AIAAAEDwABFmcAARg4AAAABAQHAAEWjAAAAhEBgA8AAXWIAAFwBPgQ9HMAARbSAwABFr8A34D6wGwEAARbAAEW+LoJrwABzBgDAAF1zPRzAAEXOgMAARcnAN+A+gpgBAAFqwABF1GADwAD+fsABSz0AwABdZz0cwABF44DAAEXewDfgPpeeAQABFsAARfIug/PAAHL+AMAAXXY9HMAARgKAwABF/cA34D6CkAEAAWrAAEYGYAPAAP5+wAFLPQDAAF1oBsAAcwWBRMAARhPAAEYuwABGXQEAhGABasAARhRgA8AA/eQCAAAB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wABNPQAAALQRYAPAAHJeAMAATVgAAACCbmADvVEAwABNawAAAIGmXgMAAQIBYAOIfgHAAEjgYAPAAPrRAABcAABcAT4FTsAATbjAAE3LAAC1F2ADvXgBFsAATdaBwABNzcA36Cy1F71UT8AATe3AAE3yAAABwABO9F4DAAEDAWADiH4CwABI4GADwAD60QChcWADwAD60QAAXAADwABOAcAATnYAAAADAQHAAE4ZAAAAgO1gA4h+AALAAE5BAAAAwABI4GADwAD60QFqAGADwAD9oXnAAE4wAAAAoXFgA8AA+tEBagBgA8AA/aF5XAE+AT0cwABOU4LAAE5SwDfoOiACAAGFwABOVMA36MYBwABI4IbAAE5pwDfo1QBOwABOjMAATpcAAMAATMFgA8AAcsABHMAATqSAwABOmcA36BzAAE+qAQABgcAATrjAN+gsAMAAcntBR8AATsUWwABO2IXAAE7NwDfpOYJrwABywgQBwABO9GrAAE70YAPAAHKvwAFKAwA+A07AAE8LwABPEAAAg/NgA4JLARbAAE8dhcAATxLAN+k5g/PAAHLDScAATyklwABPMobAAE8twDfppGADhBI+Aj0ewABPTcAAclwDAAMWwABPhRTAAE+AwDfppAYBYAOEEoJuhBeDwABPj8A36GKEwABPo8A36IoASsAAT70AP0LAAE/TAALAAE/uasAAT+5gA8AAcq/AAUocwABQD2rAAFAPYAPAAHKvwAFKNQA+A07AAFAuwABQMwAAg/NgA4JLARbAAFBAhcAAUDXAN+k5g/PAAHLDScAAUEwlwABQVYbAAFBQwDfqUmADhBI+Aj0ewABQcMAAclwDAAMWwABQqBTAAFCjwDfqUgYBYAOEEoJuhBeDwABQssA36GKEwABQxsA36IoASsAAUOAAScAAUPUlwABQ/obAAFD5wDfqUmADg88+Aj0ewABRG8AAclwDAAMWwABRUxTAAFFOwDfqUgYBYAODz4Jug9ODwABRXcA36GKEwABRccA36IoASsAAUYsAP0LAAFGhAAHAAFG8asAAUbxgA8AAcq/AAUpOAD4DTsAAUeDAAFHlAACD82ADh0UBJsAAUeABFsAAUfKFwABR58A36TmD88AAcsNgA4dFPR7AAFH+wAByXAMAAxbAAFI0hsAAUi/AN+tEgm6HR4PAAFI+wDfoYoTAAFJS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YAPAAP3kAgAAAQPAAK9xwACv+AAAAAEBAcAAr38AAACWUmADvTwAAF0DwAD8+QFgA708AT4CTsAAr6TAAK+pAACBVGADwACdTQEcwACvsRbAAK+rLoV9wABzUsAAT5UBAAGAwACvycA4X70AwAChsErAAK/XARbAAK/jgcAAr97AOF/bwABQVcAAnVcGwABzhIFFwACv/cAAsBnAALQ5AAC3TwFqwACv/mADwAD95AIAAAEDwACwMcAAtDkAAAACAgLAALBGAAAAllJgA708AMAAsFgAAAClNGADwABLzwAAYAPAAJzxAT4BScAAsGgiHMAAsHkWwACwdIDAALBswDhgZoC9vRhIAQABasAAsIhgA8AA/n7AAO95AMAA/o0AIRzAALCvFsAAsKqBwACwocA4YHSAvcAAS91IAQABFsAAsLqAwACwssA4YGaAvb0YAMAA/o0+AUrAALFBARzAALFILsAAT/ABAAGAwACxW8A4YGYAwABzeEnAALFwFsAAsX2BwACxdMA4YHSFQsAAS98+AUnAALGPFsAAsZuAwACxk8A4YGazNr1EPgFKwACx8AEjHMAAsgoWwACx/RbAALH3LoV9wABzUoVKwAChlEgBAAErAMAA/fEWwACyJhbAALIgLoV9wABzUp6lwAChnxbAALJGFsAAskAuhX3AAHNShUrAAKGUAWADwACc8UnAALJhFsAAsm2AwACyZcA4YGaHjr1DPgFKwACygAEcwACyhy7AAE/xAQABgMAAspTAOGBmAMAAc3dJwACyqxbAALK3gMAAsq/AOGBmhUK9RT4BSsAAsssBHMAAstIuwABP8AEAAYDAALLlwDhgZgDAAHN4PgJAKsAAsw3AALMSAR7AALMUth8CAAKAwACzHcA4YGYkwACzQgInt1GAwACzOsA4YGYASsAAs04BFsAAs1sWwACzVS6FfcAAc1KepcAAoZ9JwACzeyIWwACzh4DAALN/wDhgZoVCvUUBFsAAs5uAwACzk8A4YGaHjr1DPgJAIhbAALO8gcAAs7PAOGB0sxXAAEvhARbAALPPgcAAs8bAOGB0hUTAAEvgwACzs8AAs9cASsAAs+ABFsAAs+0WwACz5y6FfcAAc1KepcAAoZ8+AUrAALQNARzAALQULsAAT/ABAAGAwAC0J8A4YGYAwABzeAbAAHOFgUXAALQ+wAC0T8AA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ZcAAcwnAAHOhNMAAzmUDwADOZcAAzskAAAABAQHAAM50AAAAgJZgA75RAABcAUrAAM6MARzAAM6ggsAAzozAOHelsTICAAKAwADOvcA4d4eDwADOw8A4eF0Avs4Bl90pwABdhT0cwADO8oDAAM7twDh3h8AARHoDAWADvlECFsAAzxcuwABQZsAAcwnAAHOiNMAAzy8DwADPL8AAz5MAAAABAQHAAM8+AAAAgJZgA75RAABcAUrAAM9WARzAAM9qgsAAz1bAOHelsTICAAKAwADPh8A4d4eDwADPjcA4eOQAvs4Bl90pwABdhT0cwADPvIDAAM+3wDh3h8AARHoDAWADvlECFsAAz+EuwABQZ8AAcwnAAHOjNMAAz/gDwADP+MAA0FwAAAABAQHAANAHAAAAgJZgA75RAABcAUrAANAfARzAANAzgsAA0B/AOHelsTICAAKAwADQUMA4d4eDwADQVsA4eWsAvs4Bl90pwABdhT0cwADQhYDAANCAwDh3h8AARHoDAWADvlECFsAA0KouwABQaMAAcwnAAHOkNMAA0MIDwADQwsAA0SYAAAABAQHAANDRAAAAgJZgA75RAABcAUrAANDpARzAAND9gsAA0OnAOHelsTICAAKAwADRGsA4d4eDwADRIMA4efIAvs4Bl90pwABdhT0cwADRT4DAANFKwDh3h4KQAQABasAA0VNgA8AA/n7AAUwfAMAAXWgAwABdrgbAAHOpgUXAANFowADRk8AA1JsAALcoAWrAANFpYAPAAP3kAgAAAQPAANGbwADUmwAAAAAAAABgA8AAQaUBPgZJwADRpCEcwADRsRbAANGoLsAAUGXAAHMJwABzoUgBAAErAMAA/fE+Aj0cwADRyxbAANHCLsAAUGXAAHMJwABzoZcqAQABasAA0ddhAwJgA4JSYAO+UWADwAD60cABTCQAwAD9h0nAANHrFsAA0fgWwADR7y7AAFBlwABzCcAAc6GBVcAA/ZI+AT0XwADSCy7AAFBlwABzCSvAAHOhPz9JwADSLiEcwADSPxbAANIyLsAAUGbAAHMJwABzokgBAAErAMAA/fE+Aj0cwADSXRbAANJQLsAAUGbAAHMJwABzopcqAQABasAA0mlhAwJgA4JSYAO+UWADwAD60cABTCQAwAD9h0nAANJ9FsAA0o4WwADSgS7AAFBmwABzCcAAc6KBVcAA/ZI+AT0XwADSoS7AAFBmwABzCSvAAHOiPz9JwADSyCEcwADS2BbAANLMLsAAUGfAAHMJwABzo0gBAAErAMAA/fE+Aj0cwADS9RbAANLpLsAAUGfAAHMJwABzo5cqAQABasAA0wFhAwJgA4JSYAO+UWADwAD60cABTCQAwAD9h0nAANMVFsAA0yUWwADTGS7AAFBnwABzCcAAc6OBVcAA/ZI+AT0XwADTOC7AAFBnwABzCSvAAHOjPz9JwADTXiEcwADTbxbAANNiLsAAUGjAAHMJwABzpEgBAAErAMAA/fE+Aj0cwADTjRbAANOALsAAUGjAAHMJwABzpJcqAQABasAA05lhAwJgA4JSYAO+UWADwAD60cABTCQAwAD9h0nAANOtFsAA074WwADTsS7AAFBowABzCcAAc6SBVcAA/ZI+AT0XwADT0S7AAFBowABzCSvAAHOkPz9JwADT+CIiIhzAANQFFsAA0/wuwABQZcAAcwnAAHOhSAEAASsAwAD98QAcwADUJRbAANQYLsAAUGbAAHMJwABzokgBAAErAMAA/fEAHMAA1EQWwADUOC7AAFBnwABzCcAAc6NIAQABKwDAAP3xABzAANRkFsAA1FcuwABQaMAAcwnAAHOkSAEAASsAwAD98T4BSsAA1HUBKz9KwADUjAEuBsAAc6qBRcAA1KDAANS6wADVHQAAtyIBasAA1KFgA8AA/eQCAAABA8AA1MTAANUdAAAAAQEBwADU0QAAAIPzYAOCUgAAYAO+UQE+AknAANTdHMAA1OoWwADU4S7AAFBlwABzCcAAc6FIAQABKwDAAP3xSsAA1PMBKz9KwADVBAEcwADVExbAANULLsAAUGXAAHMJwABzoUsBAAGAwADVFMA4ffgAwAD9gQbAAHOrgUXAANUiwADVJ8AA1cIAAMAAUAUAAAABA8AA1TnAANXCAAAAAgICwADVTAAAAIPzYAOIAQDAANVgAAAArSxgA75RAABcAT4CPSMcwADVeBbAANVsLsAAUGfAAHMJwABzo0gBAAErAMAA/fEXwADVbC7AAFBnwABzCTLAANWeYAOIAWADvlEAwABzoysBXQPAAP1tAmADiAFgA75RPRzAANWxFsAA1aYuwABQZ8AAcwnAAHOjgL8CAAKAwADVssA4fpeBwADVusA4fqUAwAD9ggbAAHOsgUXAANXHwADVzMAA1moAAMAAUAYAAAABA8AA1d/AANZqAAAAAgICwADV8gAAAIPzYAOIAQDAANYGAAAArSxgA75RAABcAT4CPSMcwADWHxbAANYSLsAAUGjAAHMJwABzpEgBAAErAMAA/fEXwADWEi7AAFBowABzCTLAANZFYAOIAWADvlEAwABzpCsBXQPAAP1tAmADiAFgA75RPRzAANZZFsAA1k0uwABQaMAAcwnAAHOkgL8CAAKAwADWWsA4f2yBwADWYsA4f3oAwAD9ggbAAHOtgUXAANZvwADWdMAA1xIAAMAAUAQAAAABA8AA1ofAANcSAAAAAgICwADWmgAAAIPzYAOIAQDAANauAAAArSxgA75RAABcAT4CPSMcwADWxxbAANa6LsAAUGbAAHMJwABzokgBAAErAMAA/fEXwADWui7AAFBmwABzCTLAANbtYAOIAWADvlEAwABzoisBXQPAAP1tAmADiAFgA75RPRzAANcBFsAA1vUuwABQZsAAcwnAAHOigL8CAAKAwADXAsA4gEGBwADXCsA4gE8AwAD9ggbAAHOugUXAANcXwADXMcAA17UAALcmAWrAANcYYAPAAP3kAgAAAQPAANdGwADXtQAAAAEBAcAA12MAAAiD82ADiAEAAGADvlEBPgJJwADXbxzAANd/FsAA13MuwABQZ8AAcwnAAHOjSAEAASsAwAD98UrAANeIASs/SsAA15kBHMAA16sWwADXoC7AAFBnwABzCcAAc6NLAQABgMAA16zAOIEgAMAA/YEGwABzr4FFwADXusAA19TAANhbAAC3JQFqwADXu2ADwAD95AIAAAEDwADX6sAA2FsAAAABAQHAANgHAAAIg/NgA4gBAABgA75RAT4CScAA2BMcwADYJBbAANgXLsAAUGjAAHMJwABzpEgBAAErAMAA/fFKwADYLQErP0rAANg+ARzAANhRFsAA2EUuwABQaMAAcwnAAHOkSwEAAYDAANhSwDiByQDAAP2BBsAAc7CBRcAA2GDAANh6wADY+QAAtyQBasAA2GFgA8AA/eQCAAABA8AA2IjAANj5AAAAAQEBwADYpQAACIPzYAOIAQAAYAO+UQE+AknAANixHMAA2MIWwADYtS7AAFBmwABzCcAAc6JIAQABKwDAAP3xSsAA2MsBKz9KwADY3AEcwADY7xbAANjjLsAAUGbA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BsAAdteBS8AAQ6LAAEOzwABEIAACwABR1QAAAAEDwABDx8AARCAAAAAEBATAAEPVAAAAr9JgA8AAZW4AwABD8QAAAK/TYAPAAF0/AMAARAMAAACClGADwABi1gDAAEQaAAAAwABR1mADwACVmAAAYAPAAJWYAAbAAHbbgUvAAESOwABEocAARLoBAsAAUdcAAAABA8AARLrAAES6AAAAAAAAAGADwACZogAGwAB23IFLwABFKMAARTvAAEVUAQLAAFHYAAAAAQPAAEVUwABFVAAAAAAAAABgA8AAmaIABsAAdt2BS8AARcDAAEXTwABF6AECwABR2QAAAAEDwABF6MAARegAAAAAAAAAYAPAAJmiAAbAAHbegUvAAEZXwABGasAARoIBAsAAUdoAAAABA8AARoLAAEaCAAAAAAAAAGADwACZogAGwAB234FLwABHBMAARxfAAEc5AQLAAFHbAAAAAQPAAEc5wABHOQAAAAAAAABgA8AAmaIABsAAdtiBS8AAR9bAAEfnwABIggACwABGEQAAAAEDwABH/MAASIIAAAAEAwTAAEgTAAAAr9NgA8AAXT8AwABIJQAAAIKUYAPAAGLWAMAASD4AAADAAFHcXgMAAQEBYAPAAGMpAAFXA8AAdo4AYAPAAJWYAMAASG0AAADAAFHdXgMAAQEBYAPAAGMTAAFXA8AAdo8AYAPAAPrRAWoAYAPAAP2heQBgA8AAlZgABsAAdtmBS8AASIfAAEiYwABIvAACwABR3gAAAAEDwABIscAASLwAAAABAQHAAEi2AAAAgO5gA8AA/JcAAGADwACVmAAGwAB24IFLwABI9sAASQrAAEkRAQK33QAAAAEDwABJEcAASREAAAAAAAAAYAPAAHcrAAAAOZ+QADmgBgA5oDoAOaBuADmgogA5oNYAOaEKADmhtQA5ofkAOaIrAAAACQLAAHbjgUvAAEkWwABJHMAAS64DwABR3wAAAWABwAD95AABYAHAAHaTBATAAHbmgUvAAElywABJgAnAAFGrwAB2jABgA8AAd+YABMAAdumBS8AASaHAAEmvCcAAUaQBasAASYVgA8AA/eQCYAPAAHfPAATAAHbngUvAAEnPwABJ3AnAAFHgwAB2jABdA8AA/PkBYAO9KgAEwAB26IFLwABJ/MAASgoJwABK/sAAdowAXQPAAPz5AWADvSoA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wDn3JgDAAHc+AMAA/YIAwABjHj9PwACrucAAq8oAAAGHL2EDAWADwACVmGADwACVmAADwACr0MAArCoAAAABAQHAAKviAAAAgXZgA8AAlZgAAGADwACVmAE+Aj0XwACr8i7AAFIGhMAArATAOfaHwAB3QErAAKwXAYbAAKwewDn3tUnAAKwxgsAArDXAOfYsPgZOwACsY8AArG8AAIUTYAPAAJc+ASbAAKxjARzAAKxxLprCAgACg8AArHfAOfZdgcAArIbAOfYRAMAAd0hgA8AAlz5OwACs1MAArNkAAIC9YAPAAJWYARzAAKzbLsAAUgkCAAIWwACs94DAAKzywDn2AZZSwABjFYHAAK0AwDn2EQDAAHdETsAArSHAAK0wAADAAFIZYAPAAJWYASMWwACtN4DAAK0ywDn2AbLgwABjG4fAAK1OwDn4SRzAAK1fLodEAwACFsAArW6AwACtacA59gGFLMAAYxaBwACtfcA59hEBg++HwACtjMA5+EnAAHdOAWADwACVmE7AAK3bwACt3wAAg+xgA8AAlwIBHMAAreRqwACt4WADwACYBsABIJuD8QEAARbAAK30FsAAresuwABSBcAAdozAAHc8wABJNMAAdy0AwACYFz0cwACuHhbAAK4ThsAArgfAOfgHn1HAAJdAVgEAAR/AAK4mwACXWQIAAhTAAK41wDn4/wkAFMAArjrAOfiMCAAAAMAA/UxKwACuUgEcwACuX4XAAK5ZwDn3jSABAAGGwACuYMA5+AcAAD4BSsAAroEBHMAAro6FwACuiMA5940gAQABHMAAro8umsICAAKDwACulcA59l2BwACupMA59hEAwAB3SAAABsAAd1KBS8AArrzAAK7ZwACxbAAAtH0BasAArr1gA8AA/eQCAAABA8AArurAALFsAAAAAgICwACu/wAACIKUYAPAAGOCAMAArxQAACCv02ADwABdPwAAYAPAAJWYAT4FTsAArzjAAK9DAACfUV0DwAD9OwFgA8AAl00BMcAAr1VgA8AAl00AT8AAr17AAK9jAAABwABSFWEDAmADwAD+fmADwACVmFwAA8AAr27AAK/cAAAAAgICwACvdgAAAIC9YAPAAP5+AMAAr40AAACAlmADwACVmAAAXAE+AT0cwACvp4LAAK+cwDn6V1YBAAEfwACvr8AAl1kCAAIcwACvwWrA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gZ7qwDuSBRae+S7AAFPLwAB66MAAexAnwABT0ADAAHsDP0qfHgGBnyXAO5IFBsAAexeBV587n0ygEgAAn14Bap88YAPAAP3kAgAAAQOfVqASAAAAAQEBn1wAAACWpGEDAWADwAD+flwAAFwBPgI9HZ99n14BAAGAn4jAO5MfAMAAewk9HJ+VgJ+SwDuTHyABAAEkAAUnpXcWn7UWn6IuwABTucAAeujAAHr2YcAAzVcnwABT0Raf7xaf4C7AAFO6wAB66MAAevdhwADNVyfAAFPSAAAAADuQ8gA7kTUAO5F4ADuRuQA7kvUAO5OcAAAABQLAAHsagVegF6AdrI0DwABT0wAAAWABwAB68wAABATAAHsdgVegaKBwCcAAREfAAHroAGADwABdJwAEwAB7HoFXoJCgngnAAFPLwAB66ABdA8AA/PkBYAO9KgAEwAB7H4FXoLOgvgnAAEhSwAB66ABgA8AAasgABMAAeyCBV6DaoQMJwABT1MAAeugAXQPAAP4vAWADvSoBHqDxwADBpgABYAO9KgAAAQXAAHsogVehCKEIojgAAAADoR2iOAAAAAcHB6E1AAAAemADgRQAoVcAAAClO2ADu14AoYAAAACzt2ADuKgAoaAAAAC4NWADwABj6QChtgAABMAAREdgA8AAXScAocsAAATAAFPLXQPAAPz5AWADvSoAoeYAAATAAEhSYAPAAGrIAABgA8AAexoBPwQIAcAAex2EAMA7lK0IAcAAex6FAMA7lL0IAcAAex+GAMA7lNIJAKH7wAB7CwQABICiAcA7lHyBogrAO5SHgqIewDuUk4OiLsA7lJ8ABAbAAHsigVeiPaJVpWgAAMAAU14BaqI+YAPAAP3kAgAAAQOiaaVoAAAAAQEBongAAACG6l0DwAD8+QFgA8AA/v8AAGADwABNHgE+CE6ioKKuAAC1hmADwABNNQEforTAAE1JAAAAAD0couEWotIuwABTusAAeujAAHr3gKUBAAEWouguwABTy8AAeujAAHseAMAA/j1Jov4hFqMDLsAAU7zAAHr/PgE9HKMjLsAAU73AAHroAwADgaM1wDuVhSajRAEWo0QuwABTy8AAeujAAHseXQPAAP4vAWADvSonwABT0ADAAHskP06jrKO8AADAAFPAXQPAAP4vAWADvSoBHqPCwADBpgABYAO9KgAARqPapAuj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BsAAe52BWMAA1+fAANfswADaEQAAwABUJsAAeykAAAABA8AA1//AANoRAAAAAgICwADYFgAAAIJuYAPAAHXBAMAA2DAAAADAAEDfYAOErgAAXAE+Bk7AANhTwADYWQAAg9RgA71RARbAANhkgMAA2FvAPBiQgm7AAHXEPRzAANhyLsAAVCzAAHspBAABgsAA2IDAPBi2A8AAQN+BwADYncA8GKC1FxbAANjQgMAA2MfAPBiQtRfAAHV7wABRvBrAANkBwACjf8AAe6U9F8AA2RIWwADZDC6kYcAAezi5SSnAAEUIScAA2TAhFsAA2UoWwADZPoDAANk1wDwYkJsMwAB1xcAARo7AAGLkPgE9F8AA2aYWwADZoC6kYcAAezi5ShbAANnCgMAA2bnAPBiQmwzAAHXFwABFCT89HMAA2esWwADZ5oHAANnZwDwYoIJthMSEUgEAAS4Ah5E9HMAA2f0uwABUM8AAeykAAAAAwAB7pgbAAHuegVjAANoWwADaG8AA26UAAMAAVHnAAHspAAAAAQPAANoxwADbpQAAAAAAAABgA8AA+tEBPgROwADaRsAA2kwAAJoyYAPAAEWwARbAANpOLl7AAHtxScAA2p4hHMAA2qsWwADaqIDAANqiwDwaDbQSwABFskgBAAGUAMAA/btKwADasQEqP0XAANrDAcAA2tXAANraAACD82ADwABF5wEWwADa4oDAANrcwDwaDYMewABFogEhHMAA2u6BwADa6cA8GmJIAQABKwDAAP3xAYnAANr3wDwaYhbAANsDgcAA2v7APBpig7XAAEXxQT4DScAA2xElwADbGoHAANsVwDwaYmADwABIdULAANskAD9JwADbNCXAANs9gcAA2zjAPBpiYAPAAEuUQsAA20sAP0rAANt+ASpKwADblgEpBsAAe5+BWMAA26rAANuvwADjBQAAwABUesAAeykAAAABA8AA29nAAOMFAAAAAgICwADb8QAAAIJuYAOErgDAANwIAAAAwABUe2ADwACjfQAAXAE+BknAANzyFsAA3QOBwADc9sA8G1DAAFR8wACjhz4BPRzAAN0gLsAAVH3AAHspAQABJsAA3TkBFsAA3TkuwABT5MAAe1lgA71RAMAAe6A/TsAA3WXAAN1wAADAAEzBYAPAAHLAARzAAN2GFsAA3XouuBLAAHspwAB7RcAAT6oB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D6AAALQCYAO7oAEcwAEPxxbAAQ+4FsABD6wupSLAAHtar2TAAE2utGcBAAGBwAEP3cA8PkcAvGFOwAEP+cABEAoAAMAAVJ1gA8AAYUIBH8ABEBrAAGLEAgACgcABEDbAPD5Hg8ABED3APD8GAD0cwAEQWRbAARBQLrhWwAB7W6+/AQABH8ABEHHAAGiSAQABJsABEIYBhMABEIbAPD9FYAPAAGK0AAC2wT0cwAEQphbAARCgLqEgwAB7VFYBAAEcwAEQsBbAARCqLqRhwAB7OLlWAwADJsABEM8BhMABEM/APD9FYAPAAGK0gsABEOHAPD6FFsABEPQupSLAAHtaAMAARRYAwAD9TD4BPRzAAREcFsABERYuoSDAAHtUVgEAARzAAREmFsABESAupGHAAHs4qvADAAKBwAERMsA8PkcWwAEROS6lIsAAe1oBpaSCwAERY8A8PoXAAEUVAMAA/UwGwAB8B4FYwAERhcABEZbAARcQAACGTgFqwAERhmADwAD95AIAAAEDwAERqsABFxAAAAABAQHAARG+AAAAg/NgA4g+AABcAT4GTsABEdzAARHuAAClpGADwABCSwEcwAESEhbAARH4LsAAU/rAAHspwAB7abd4AQABgMABEh7APECjAMAAQnNOwAESNgAAAICWYAPAAEXnAEnAARJBHMABElUWwAESSoDAARJFwDxAo4JviEBIAQABKwDAAP3xPgE9isABEmbAPED1HMABEnQWwAESbi6kYcAAezi5XQEAARbAARKELqUiwAB7WgDAAEUdPgM9HMABErUWwAESqoDAARKlwDxAo4JviECEUgEAAS4AhN09isABEsnAPED1HMABEtEuoRQAAAAAwAB7dUnAARLeHMABEvwWwAES8BbAARLiLsAAU/PAAHspwAB7TYVjwAB7LkgBAAFqwAETC2ADvVjAAOZaAMAA/fE+AD4BPYrAARTqwDxA9RzAART/FsABFPIuwABT7cAAeynAAHtHwABUMgMAAxbAARVCFsABFTQuwABT88AAeynAAHtNgmrAAHstgsABFUrAPED1FsABFVEuwABT8cAAeynAAHtLAMAAn2o9HMABFXEuwABUDcAAeykAAAAAwAB7fknAARWOIhbAARWhFsABFZIuwABT78AAeynAAHtJgVXAAP0dABbAARW6FsABFawuwABT5MAAe1mFRL1GPgFJwAEVzCXAARXcFsABFdWAwAEV0MA8QKOEV4JYYAOErj4BSsABFs0APz89HMABFucuwABUnsAAeykCAAKCwAEW88A8QPWBwAEW+sA8QLcAwAB78AbAAHwIgVjAARcVwAEXJsABG3wAAIY8AWrAARcWYAPAAP3kAgAAAQPAARc3wAEbfAAAAAEBAcABF0gAAACD82ADh/QAAFwBPghAFsABF1suwABT9cAAeynAAHtRwAEXW8ABF2cAQCEcwAEXfxbAARd6gMABF3XAPEMegm2H+UgBAAErAMAA/fHAARd1wAEXhgBPwAEXjcABF5IAAAHAAFSfYQMAXAADwAEXosABGBgAAAAAAAAAXAE+AUbAARetwAEX6MABF8kAAACe3mADiH4AFsABF92AwAEX2MA8Qx6GOof2PgE9HMABF/6CwAEX8sA8Q6uEUgEAAS4AiKFPwAEYH8ABGCwAAAHAAFSgYQMAYAPAAEXnAAPAARg6wAEY6AAAAAAAAABgA8AARecBPgNJwAEYRRzAARhYFsABGE6AwAEYScA8Qx6Fyof3SAEAASsAwAD98T4BSsABGGsBHMABGHgWwAEYci6kYcAAezi5XAIAAikWwAEYji6lIsAAe1oAwABFHD89HMABGLkWwAEYr4DAARiqwDxDHoXKh/eEUgEAAS4AhN1KwAEYzQEcwAEY1C7AAFQ0AAAAAMAAe/9PwAEY78ABGPQAAAHAAFShYQMAXAADwAEY/8ABGfUAAAAAAAAAXAE+AUbAARkKwAEZOcABGR0AAACCb2ADhNkAFsABGTCAwAEZK8A8Qx6GO4f4PgM9HMABGU6EwAEZQ8A8RNqEUgEAAS4AhN1AIRzAARlsLsAAVAIAAAAAwAB7+MABGWvAARl3AD0cwAEZ4i6hFAAAAADAAHt1T8ABGfzAARoBAAABn11hAwBcAAPAARoKwAEaMQAAAAAAAABcAT4BPRzAARofFsABGhqAwAEaFcA8Qx6CbYf5hFIBAAEuAIeRTsABGkPAARpOAADAAFSiYAPAAIYCARzAARpbFsABGlAuwABT+8AAeynAAHtjwABMqQEAAYDAARpvwDxDHgDAAHKpPRzAARqHFsABGnouwABT7MAAeynAAHtGwABUowgACIDAARqbwDxDHhzAARq8FsABGqkuwABT5sAAeynAAHs+wABUpAEAAYDAARrRwDxDHgDAAIWRhcABGuDAPEWLgcABGvTAPEN+gsABGw7APEPqg8ABGybAPESthMABGzvAPEVHHMABG2gWwAEbTi7AAFP6wAB7KcAAe2m3egEAAYDAARtywDxDHgDAAEJ1AMAApCwGwAB8CYFYwAEbgcABG5LAAR1AAACGQAFqwAEbgmADwAD95AIAAAEDwAEbpcABHUAAAAABAQHAARu4AAAAg/NgA4gBAABcAT4BScABG8QWwAEbzYDAARvIwDxGsoY/iAc+AT0cwAEb3i7AAFSlwAB7KQEAAYDAARvvwDxGsgDAAHupScABHAEcwAEcFxbAARwFLsAAU/3AAHspwAB7aLhiAgACgMABHDbAPEayFsABHDwuwABT/sAAeynAAHtqAMAAcpI+AT0cwAEc7i7AAFSmwAB7KQEAAYDAAR0DwDxGsgDAAHunPgE9HMABHR0uwABUp8AAeykBAAGAwAEdMcA8RrIAwAB7qAbAAHungVjAAR6XwAEenMABM5IAAMAAVKbAAHspAAAAAQPAAR6wwAEzkgAAAAEBAcABHsMAAACD82ADiAEAAFwBPgtOwAEe3sABHuwAAK6PYAPAAKQYARzAAR78FsABHu4uwABT4cAAe1PAAFSoAQABJ8AAVKkAwACkFE7AAR9vAAAAoBhgA8AARecATsABH5sAAADAAFSqYAPAAPrRAE7AAR/RwAEf4AAAwABUq2ADwABF5wErT8ABIAjAASAVAAABwABUrGEDAWADwABCS2ADwABF5wADwAEgI8ABISsAAAABAQHAASA2AAAApaRgA8AAQksAAGADwABF5wE+A07AASBcwAEgYwAAgXZgA8AAR24BNcABIGkAAAEAYAPAAEduAR/AASBpwABHfQMAAoLAASB/wDxH/xbAASCbFsABIIYuwABT/sAAeynAAHtqtae+bwGsryGDwAEgxcA8SBA1AAAAAQBbARfAASDYh8ABINbAPEiXpaSGwAEg7MA8SGjAAEXqhwDAPEiXPRzAASEFLlYBAAGHwAEhCcA8SIMAwAB7+krAASEYAYfAASEfwDxIg0/AASEywAEhNwAAAcAAVK1hAwBcAAPAASFcwAEkxwAAAAAAAABcAT4GScABIWccwAEheoTAASFrwDxII0gBAAErAMAA/fFKwAEhgwA/TsABImLAASJ0AAClpGADwABCSwEc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AACCSWADhK4AwAIlCQAAALUXYAO9eADAAiUwAAAAW2ADhaMAwAIlUAAAAIUsXQPAAP07AWADwABi1gDAAiV3AAAApaRgA8AAQksAAF0DwAD9OwFgA8AARecBPgVOwAIl78ACJfYAACldA8AA/TsBYAPAAEXnARzAAiX4LsAAVR7AAHspAQABgsACJhLAPPJvAMAAe7lDwAImIxzAAiY4FsACJjGFwAImKsA88rVhwAD9a2MBAAEWwAImTYHAAiY6wDzyYYTHvXwAwAD9xT4CTsACJoLAAiaMAACA7WADiH4BHMACJrMWwAImn4DAAiaYwDzyU4THhLVLAQABFsACJruFwAImtMA88rVhwAD9awDAAP1KPRzAAibRhcACJsrAPPK1VgEAARzAAibVLsAAVJTAAHspAQABhsACJu/APPMoAMAAe8IAwAD9TEnAAicHFsACJy4WwAInHoHAAicLwDzyYYTIvX2Dt8AA/R4+BU7AAidcwAInaAAAwABVIF0DwAD9bQJgA8AA/n5gA8AARecBMsACJ2pgA8AA/n5gA8AARecARsACJ3TAAiepwAInjAAAAB9gA4WxABbAAieigsACJ5jAPPJvhW2Fpz4CPRzAAifCFsACJ7yHwAIns8A89AWAloW0hFIBAAEuAITdPRzAAifjhsACJ9jAPPPIgL8CAAIWwAIn7YfAAifkwDz0BYC9hbMcwAIn9S6hFAAAAADAAHt1AMAA/YJOwAIpU8ACKWMAAITIXQPAAP07AWADiH4BNcACKfsAAAEAXQPAAP07AWADiH4BHMACKfscwAIprhbAAilsgMACKWXAPPJThMiEtoGlAQABNMACKbQDwAIptMACKe4AAAABAQHAAim1AAAAgNRgA4h+AABgA8AA+tEBSsACKbsBHMACKd4WwAIpzoHAAim7wDzyYYTIvX2DHAEAARbAAinph8ACKefAPPTlgL2IggDAAP0IAMAA/QWArQAAAADAAP0PNQAAAAEAWwEcwAIqEofAAioQwDz0nICuAQABasACKhdhAwJgA4h+YAOIfmADwAD8l8ABS0cAwAD9TocAwDz0nEbAAiotwAIqZ8ACKkkAAACA7WADiH4Ah8ACKlbAPPSDPgJOwAIqfsACKoQAAICWYAPAAEXnARzAAiqRhsACKobAPPPISwEAARbAAiqcFMACKpLAPPWMCACA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FMACkv/APTtdAAFgA8AAYpOEi8AAYpVhwAD9kUgBAAGVAMAA/bvAApLgwAKTGgBOwAKTM8ACk0EAAMAAS/RgA8AAYUIBFsACk1oWwAKTUxbAApNMFMACk0PAPTtdAAFgA8AAYpOEi8AAYpUpwAD9kIMewAD9H0nAApNpJcACk3uCwAKTbcA9PFxgA8AAYZs+AUrAApOcARzAApO6FsACk7EUwAKTo8A9PFwCAWADwABhm6rMwABhnaq8AAAAAMAA+ss/Pz9KwAKT3wErBsAAe8+BWMAClDXAApQ9wAKVbwAAwABVe8AAeykAAAABA8AClFHAApVvAAAAAgICwAKUYAAAAIYVYAPAAGFCAMAClHcAAACv0mADwABlbgAAYAPAAJWiAT4DTsAClIjAApSOAAAnYAPAAPyXARzAApSQLsAAVX3AAHspAgACgMAClLzAPT0oFsAClNYWwAKUxi60fMAAeynAAHtlsj65eADAAHvOScAClOocwAKU9ILAApTuwD09U0gBAAErAMAA/btKwAKU/QErP0rAApUOARzAApUbgcAClRXAPT04wABJHwIAAmrAApU4YAO2McAAxmkcwAKVY2rAApVdXQPAAP07AWADwACatsABVvpLAQABgsAClWTAPT1TAMAA/UoAwABlmwbAAHvQgVjAApV0wAKVecACmVgAAMAAVUXAAHspAAAAAQPAApWXwAKZWAAAAAEBAcAClawAAAChgWADhegAAFwBPgdJwAKVvhzAApXCLsAAVV/AAHspAwABgMACld7APT5MAsAAVWCVwABVYZXAAHvHPgI9HMAClkgWwAKWQi6hIMAAe1RWAQABHMACllIWwAKWTC6kYcAAezi5XQEAARbAApZiLqUiwAB7WgDAAEUdAMAA/UxKwAKWdwA/TsAClpDAApabAADAAFV+YAPAAP5+ARzAApadLsAAVXLAAHspBAAEgMAClsXAPT5MlCexPyfAAFV/AMAAe8hOwAKXBsAClwsAAK5cYAPAAJmiARzAApcTasAClxBgA8AAmAbAASCbwABVeAEAARzAApdAFsAClzcuwABER8AAeynAAHs7sAcBAAGBwAKXXcA9PtkAwABdSgDAAJgUTsACl3/AApeOAACvqWADwABnOwEcwAKXpBbAApeYLrgSwAB7KcAAe0XAAE+mAQABgMACl83APT5MAMAA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AqFpasACoWlgA8AAmujAAVenAD4CTsACoZTAAqGgAACa/2ADvSoBFsACob0WwAKhrhbAAqGiLqUiwAB7WrO3wABNpJr/uKpKwAKh0gEcwAKh7GrAAqHcYAPAAJgGwAEgm8AAVXgBAAEcwAKiEBbAAqIHLsAAREfAAHspwAB7O8AARFsBAAGBwAKiG8A9Rs4AwABdRwDAAJgUAcACokBqwAKiQGADwACa6MABV8AAPgNOwAKibMAConkAALHQYAO9KgEWwAKilhbAAqKHFsAConsupSLAAHtas7fAAE2ksdC5DT0cwAKjXRbAAqMJLrhWwAB7W6+2AQABgcACo3fAPUdpALa9SsACo44BHMACo6hqwAKjmGADwACYBsABIJvAAFV4AQABHMACo8wWwAKjwy7AAERHwAB7KcAAezvAAERbAQABgcACo9fAPUdpAMAAXUcAwACYFAHAAqP9asACo/1gA8AAmujAAVfZAD4CTsACpC3AAqQ8AADAAFWVYAPAAPyXARbAAqRhFsACpFAWwAKkRRbAAqQ+LrgVwAB7KcAAezy33sAAZXbAAEi6wABlWmHAAP6CSsACpHEBHMACpH5qwAKke2ADwACYBsABIJvAAFIQAQABJMACpLIDJ8AAVZaBwAKkosA9SCcngyYAwACYEQHAAqTLasACpMtgA8AAmujAAVfyAD4BSsACpOMBFsACpPYWwAKk6i7AAFPowAB7KcAAe0DAAFHXwAB22wHAAqUnasACpSdgA8AAmujAAVgLAD4BSsACpT8BFsACpVIWwAKlRi7AAFPowAB7KcAAe0DAAFHYwAB23AHAAqWDasACpYNgA8AAmujAAVglAD4BSsACpZcBFsACpaoWwAKlni7AAFPowAB7KcAAe0DAAFHZwAB23QHAAqXXasACpddgA8AAmujAAVg/AD4BSsACpe4BFsACpgEWwAKl9S7AAFPowAB7KcAAe0DAAFHawAB23gHAAqYxasACpjFgA8AAmujAAVhZAD4BSsACplIBFsACpmUWwAKmWS7AAFPowAB7KcAAe0DAAFHbwAB23wHAAqafasACpp9gA8AAmujAAVhzAD4BSsACpsIBHMACps9qwAKmzGADwACYBsABIJvAAFIQAQABJ8AAVZcAwACYEQHAAqcGasACpwZgA8AAmujAAViNAD4BSsACpx4BHMACpytq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YxICAAIWwAK3HBbAArcMLrR8wAB7KcAAe2Wxubj4McACtypgA8AAYtYBH8ACtyvAAGNoAAAAAABOwAK3UsACt2QAAKWkYAPAAEJLARzAAreIFsACt24uwABT+sAAeynAAHtpt30CAAKAwAK3ksA9VAiAwAK3nsA9VAgAwABCeE7AAre8wAK3wAAAu3NgA8AARecBNcACt8IAAAEAYAPAAEuUAR/AArfCwABLngIAAoHAArfMwD1UrBbAArfuFsACt9kuwABT/sAAeynAAHtqnqW+XgA1AAAAAQBbARfAArgDg8ACuAHAPVVcpaSCwAK4F8A9VQHAAEXqgwDAPVVcPRzAArguLqERAQABg8ACuDPAPVVIAMAAe3QGwAB72IFYwAK4QMACuEXAAsPVAADAAFU7wAB7KQAAAAEDwAK4VcACw9UAAAABAQHAArhqAAAAoYFgA4XoAABcAT4OScACuHwcwAK4gC7AAFVfwAB7KQQAAYDAAricwD1WEQPAAFVglcAAVWErlZiUwAB7xz4CPRzAArkfFsACuRkuoSDAAHtUVgEAARzAArkpFsACuSMupGHAAHs4uV0BAAEWwAK5OS6lIsAAe1oAwABFHQDAAP1MSsACuU4AP07AArlwwAK5fwAAr6lgA8AAZzsBHMACuZUWwAK5iS64EsAAeynAAHtFwABPpAEAAYDAArmwwD1WEQDAAHJ0QCEcwAK54IHAArnRwD1WoUgBAAErAMAA/fHAArnRwAK55wEewAK58bYfAgACHMACugYWwAK5+i64EsAAeynAAHtFwABPrAIAAhbAAroTLsAAU+TAAHtZgMACuiLAPVYRAMAAcoAkwAK6XgInwABVgIDAArpTwD1WEQBOwAK6esACuoEAAIJVXQPAAP07AWADwABF5wExwAK6kWADwABF5wBGwAK6mcACuuHAArqsAAAAH2ADhNkAHMACutgWwAK6zRbAArrDgMACurjAPVYRW4XrhaOFppZbAQABlQDAAP0TPgI9HMACuvKDwAK66cA9V4iEUgEAAS4AhN09HMACuw2CwAK7BsA9V1lWAQABHMACuxEuoRQAAAAAwAB7dQDAAP1MScACuyQhHMACu1wWwAK7RBbAArs3gcACuyjAPVahuozAAGdBt7fAAJmpSAEAARbAArtmgsACu1/APVdZYcAA/WsAwAD9uz4DPRzAArt/FsACu3YupRDAAHtYrzkDAAMcwAK7qRbAArudLrgSwAB7KcAAe0XAAE+sAgACFsACu7YuwABT5MAAe1mAwAK7xcA9VhEAwABygGrAArvoYAOlP8AAxlUywAK78VtbASeBsiQAAifAAFWlJ8AAVaYAtgc9HMACvI4WwAK8iC6hIMAAe1RWAQABHMACvJgWwAK8ki6kYcAAezi5XQEAARbAAryoLqUiwAB7WgDAAEUdAMAA/UxKwAK8vQA/ScACvNAewAK87MAAmw0BAAEWwAK9DhbAAr0BgcACvPLAPVahuozAAGdBtOXAAJmnAD4BPRzAAr0lFsACvRwupRDAAHtYrzkCAAIcwAK9TxbAAr1DLrgSwAB7KcAAe0XAAE+sAgACFsACvVwuwABT5MAAe1mAwAK9a8A9VhEAwABygGrAAr2OYAOlP8AAypsAtgc/TsACvcDAAr3IAADAAFWBYAO+UQEcwAK95BbAAr3SLsAAU/3AAHspwAB7aLhmAgACgcACvfvAPVahFsACvgsupSLAAHtaAMAAcpdOwAK+MMACvkIAAKWkYAPAAEJLAStOwAK+W8ACvmAAAIKXYAPAAEXnATXAAr5mAAABAGADwABHuAEfwAK+ZsAAR8oGAAMWwAK+i4HAAr58wD1WobqMwABnQYPAAr6ZwD1ZnYLAAr6iwD1XWQO6iiEWwAK+3BbAAr7PgcACvsDAPVahuozAAGdBosHAAJmluo8WwAK/CoHAAr77wD1WobTBwABnQq+pgcACvy/APVahNQAAAAEAWwEXwAK/R4XAAr9FwD1aEKWkhMACv1vAPVnnwABF6oUAwD1aED0cwAK/ci6hEQEAAYXAAr93wD1Z/ADAAHt0TsACv4zAAr+RAACClGADwABi1gEcwAK/ky7AAFQvwAB7KQEAARbAAr/CFsACv7wWwAK/soDAAr+nwD1WEVuF64V9haWAw8AA/SEAwAB7iE7AAr/dwAK/6QAAwABVp2ADvlEBHMACv/gWwAK/6y7AAFPtwAB7KcAAe0fAAFWoAQABhsACwAbAPVrbAMAAn2JJwALAEiEcwALAIofAAsAWwD1bKkgBAAErAMAA/fE+AUnAAsDGFsACwRccwALA6hbAAsDKLsAAU/7AAHspwAB7aoQHAQABFsACwPuFwALA9sA9Wfy56cAARicAvqqzGr5APgE9F8ACwW+FwALBasA9Wfy56YfAAsGBwD1bKsAARidJwALBmxbAAsH2HMACwb8WwALBny7AAFP+wAB7KcAAe2qDHAIAAofAAsHIwD1bKhbAAsHahcACwdXAPVn8uenAAEYnAL7Gsxq+QD4APgE9HMACwpAWwALChy6lEMAAe1ivOQMAAxzAAsK8FsACwrAuuBLAAHspwAB7RcAAT6wCAAIWwALCyS7AAFPkwAB7WYDAAsLYwD1WEQDAAHKAasACwv1gA6U/wADGVTLAAsMGW1sBJ4GyJAAHJ8AAVakng9yHwALDZMA9WyonwABVqifAAFWrFsACw6aFwALDocA9Wfy56cAARicngyYAtgc/BsAAe9mBWMACw9rAAsPfwALFkgAAwABVT8AAeykAAAABA8ACw/TAAsWSAAAAAQEBwALECQAAAKGBYAOF6AAAXAE+A0nAAsQbHMACxB8uwABVX8AAeykDAAGAwALEO8A9XQgCwABVYJXAAFVhlcAAe8c+Aj0cwALEpRbAAsSfLqEgwAB7VFYBAAEcwALErxbAAsSpLqRhwAB7OLldAQABFsACxL8upSLAAHtaAMAARR0AwAD9TErAAsTUAD9OwALE+cACxQAAAIJVXQPAAP07AWADwABF5wEcwALFAi7AAFUewAB7KQEAARbAAsUngMACxRzAPV0IW4XrAMAAe7k9HMACxTcuoREBAAEfwALFQMAASmIDAAMcwALFXYHAAsVXwD1dlUsBAAGTAMAA/UocwALFaIHAAsViwD1dlUsBAAGUAMAA/UoWwALFghbAAsVtLsAAU/7AAHspwAB7aoXQvmUAAMAAe3QGwAB72oFYwALFl8ACxZzAAsnVAADAAFSOwAB7KQAAAAEDwALFscACydUAAAAGBATAAsW/AAAAgklgA708AMACxdoAAABbXQPAAP07AWADwABF5wDAAsX5AAAAtk5gA75RAMACxhIAAACFLF0DwAD9OwFgA8AAYtYAAsACxjoAAAClpGADwABCSwFqAGADwAD9oXnAAsZbAAAAshtgA8AAYv0BagBgA8AA/aF5XAE+BEnAAsamHMACxqouwABUUsAAeykIAAcmwALGxAGAwALGxMA9Xm9gA71RKyuBwALG2MA9Xn2DwALG48A9XqErhMACxvjAPV65AbIbhcACxyHAPV7SwAB75z4BSsACxzgAP07AAsdPAAAAuUZbAEnAAsdgHMACx3sWwALHcBbAAsdkLqUiwAB7WrgtwABNoMAATDkBAAGAwALHjcA9Xm8AwABq1z4BPY7AAseewD1fUBzAAsesLsAAVazAAHspAgACJsACx8UBgMACx8XAPV5vYAO9UYHAAsfNwD1efQDAAHvcPgM9jsACx+zAPV9QNcACx/4AAAEAYAPAAEciAR/AAsf+wABHLgUABIDAAsgXwD1eb4HAAsgfwD1efYLAAsgqwD1ek4PAAsg0wD1eoQG6YyEcwALIbBbAAsheLsAAU//AAHspwAB7brfiAQABJsACyHsBgMACyHvAPV5vYAO9UQDAAEMvNQAAAAEAWwEXwALIjofAAsiMwD1f3KWkhMACyKLAPV65wABF6ocAwD1f3EnAAsi8FsACyN8WwALIwC7AAFPpwAB7KcAAe0GDt8AA/R4+AT0XwALJAYbAAsj1wD1fULpCHsACySXAAP1BAQFgA8AAYv0BFsACyT4uwABT6cAAeynAAHtBAAA/PRfAAsl5hsACyW3APV9QtMEcwALJlRbAAsmHLsAAU//AAHspwAB7brTCAQABJsACya0BgMACya3APV5vYAO9UQDAAEMtAD0cwALJwC6hEQEAASbAAsnFAYbAAsnFwD1fUGADwABF5wDAAHt0BsAAe9uBWMACydrAAsnfwALYfgAAwABUscAAeykAAAABA8ACyfXAAth+AAAABwcHwALKBQAAAIPzYAOCSwDAAsocAAAAwABVrWADwAB8jgDAAspEAAAAhZJgA75RAMACymEAAAClNGADwABLzwDAAsqEAAAAW10DwAD9OwFgA8AARecAwALKpAAAAIUsXQPAAP07AWADwABi1gDAAsrLAAAApaRgA8AAQksAAFwBPg5OwALK8sACyvwAAMAAVa5gA75RARbAAsubHMACyxwWwALK/i7AAFP+wAB7KcAAe2q1rwMAARbAAstEgcACyzHAPWGEgpTAAHyQArWwFsACy3iBwALLZcA9YYS8fcAAfJGGeCm+eLWdvlY9isACy67APWGWIxzAAsvKgsACy73APWGWSAEAASsAwAD98YfAAsvcwD1h9xzAAswFFsACy/AuwABT/sAAeynAAHtqly8CAAKCwALMEsA9YZaHwALMIMA9YfcAvqgBYAO+UU/AAs0FwALNCgAAAcAAVa9hAwJgA8AA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wANddQAAwABV7WADwAD8lwEWwANdkxbAA12AgMADXXfAPb7/tRe9VLUkvYhOwANdrgAAAMAAVeRgA8AA/JcAScADXcYUwANdysA9wCoIAD4BPRXAA13gwD3I+REcwANeG2rAA14AYAPAAPyXhA5kAQABHMADXlxqwANeNmADwAD8l4FXg40BAAEUwANeXsA9yMgQAADAAP2/AMAA/b0+AT0VwANehMA9yPkRHMADXsBqwANepGADwAD8l8AAiqhkAQABHMADXwJqwANe22ADwAD8l1ODjQEAARTAA18EwD3IyBAAAMAA/b8AwAD9vU7AA18nwANfNwAAwABV7mADwAD60QEcwANfRhbAA185LrhUwAB7KcAAe0631wEAAYDAA19YwD2+/wDAAEMDTsADX27AA195AADAAFXvYAPAAPrRARzAA197LsAAVebAAHspAQABgMADX4nAPb7/AMAAe/VJwANgWyIUwANgX8A9ybsSAAEUwANgcsA9yfkTAD4BPRXAA2CIwD3I+RErP07AA2C0wANgvwAAwABV62ADwAD60QEqScADYM4UwANg0sA9ybsSAD4BPRXAA2DtwD3KWhQpP07AA2EUwANhHgAAt81gA8AA+tEBHMADYSsUwANhIMA9xzQPAMAAVeMCAAACwABV5BTAA2FVwD3I+REAwABV6xTAA2FzwD3KWhQAwAB8rUnAA2GGFMADYYrAPcm7EgA+AUnAA2GlFMADYanAPcqQFQA+Aj0cwANhzRbAA2HALrhUwAB7KcAAe0630AIAAYDAA2HdwD2+/wG3zinAAEL+PRzAA2IRFsADYgQuuFTAAHspwAB7TrfQAgABgMADYiHAPb7/AbfOKsAAQv4+Aj0cwANiZxbAA2JaLrhUwAB7KcAAe0631QIAAYDAA2J6wD2+/wG3zinAAEL/PRzAA2KuFsADYqEuuFTAAHspwAB7TrfVAgABgMADYsHAPb7/AbfOKsAAQv9JwANi9hTAA2L6wD3J+RMAPgA+AUnAA2OkFMADY6jAPcqQFQA+AT0cwANjzBbAA2O/LrhUwAB7KcAAe0630AIAAYDAA2PcwD2+/wG3zhTAA2PywD3AKggAwABC/j4BScADZBocwANkHi7AAFXwwAB7KQEAAYDAA2Q0wD2+/wDAAHv0PgA+AT0cwANk+hbAA2TtLrhUwAB7KcAAe0631QIAAYDAA2UNwD2+/wG3zhTAA2UjwD3AKggAwABC/0rAA2VUARTAA2VbwD3KkBUAT8ADZXHAA2V2AAABwABV8WEDAFwAA8ADZYDAA2rtAAAAAAAAAFwBPgZJwANlixbAA2WYgMADZY/APb7/h5G9Qj4BPRzAA2W6FsADZbEuuFbAAHtbr7kBAAEewANl3cAAaEUCAAImwANl+wGAwANl+8A9vv9gA71ph8ADZgXAPb98AAC2vj4CQBzAA2ZAh8ADZjPAPb98SAEAASsAwABjD8ADZjPAA2ZHASTAA2aMBCfAAFXygMADZnTAPb7/J4Nbh8ADZn/APb98PRzAA2agFsADZpcuuFbAAHtbr7kBAAEewANmw8AAaEYCAAKAwANm3MA9vv+EwANm5sA9v0QAALa+ScADZ8YiIhbAA2fTgMADZ8rAPb7/hQ29QQAhJcADZ/qAwANn8cA9vv9gA71wACIcwANoJ4LAA2giwD2/HUgBAAErAMAA/fEBFsADaGIcwANoVRbAA2hALsAAU/7AAHspwAB7aqhCAQABgsADaFzAPb8dAL6Ksxq+QD4BPRzAA2iALlYBAAEfwANoiMAAR2EFAAQrHMADaKmDwANomMA9vytLAQABkwDAAP1KFsADaM8WwANoui7AAFP+wAB7KcAAe2qepb5ehsADaNzAPb9rAayvKgDAAHv6P07AA2kzwANpRQAAwABV810DwAD9OwFgA8AARecBHMADaUcuwABV9MAAeykEAASAwANpbcA9vv+BwANpd8A9vw2DwANpgcA9vyuFwANplMA9v1sAwAB76D0cwANpqC7AAFX1wAB7KQMAA4DAA2m8wD2+/xTAA2nGwD3OXA8Ah8ADadnAPb98AMAAe+s9HMADae4uwABUS8AAeykDAAOAwANp+8A9vv+GwANqBcA9v2s0wANqGAPAA2oYwANqyQAAAAAAAABgA8AA/aEBPgFJwANqJSEWwANqKi7AAFP1wAB7KcAAe1E+AT0cwANqRC7AAFSewAB7KQIAAhzAA2pWFsADalAupGHAAHs4uV0BAAEWwANqZi6lIsAAe1oAwABFHYbAA2p0wD2/awDAAHvwPgE9HMADaqMuwABV9sAAeykBAAGAwANqrcA9vv8AwAB78QDAAHuOPRzAA2rSLsAAVffAAHspAAAAAMAAe+1JwANq9CIcwANrDBTAA2r4wD3BIAoAIAAAAAAAABzAA2smFMADaxLAPcYjDQAgAAAAAAA+Az0cwANrPBTAA2sywD3MhQ4AIAAAAAAAPTUAAAABAGADvOEBFsADa0YuwABT6sAAeynAAHtCIxzAA2tVFADAPdAVDwBIAQABKwAAKxzAA2tVFADAPdAVDwC0zQIAAoDAA2tuwD2+/yMWwANrkRbAA2uCLsAAU+/AAHspwAB7SYFVwAD9HRbAA2upLsAAU+TAAHtZFsADa9sWwANr1hbAA2vHLsAAU+/AAHspwAB7SYHqwAD9IIJuwAB8TgFgA708ALzjAVxKwANr7AEpP0rAA2wEASoGwAB76IFYwANsWsADbG3AA2/RAADAAFX0wAB7KQAAAAEDwANsh8ADb9EAAAAEBATAA2yeAAAAgm5gA71RAMADbLcAAAClNGADwABLzwDAA2zaAAAAwABV3F0DwAD9OwFgA8AARecAwANs+wAAAMAAVd1gA4JLAABdA8AA/TsBYAPAAEXnAT4DQCEcwANtJ4LAA20VwD3RHUgBAAErAMAA/WXAA20VwANtLgBOwANtO8ADbUwAAIUNYAPAAPrRARbAA21XgMADbU7APdD/hQ29QUnAA23/IiIiIiGEwANuBMA90XsBHMADbiyDwANuIMA90TZIAQABKwDAAP3xARzAA25uLsAAVfjAAHspAQABg8ADbpLAPdE2AMAAe+8BJcADbrOAwANuqsA90P9gA71wARbAA27ggcADbtfAPdENhULAAEvfPgFKwANvQAGCwANvR8A90R0+AUrAA29tARzAA290LsAAVfnAAHspAwADgcADb6HAPdENgMADb6vAPdD/gsADb7XAPdEdAMAAe+kGwAB76YFYwANyvcADctDAA4GUAADAAFX5wAB7KQAAAAEDwANy8cADgZQAAAADAwPAA3L7AAAApTRgA8AAS88AwANzGgAAAIJuYAO9UQDAA3M3AAAAwABV3F0DwAD9OwFgA8AARecAAF0DwAD9OwFgA8AARecBPg5AHMADc2CAwANzV8A90o6zGAEAAYHAA3NowD3SngDAAEvvwANzV8ADc3EATsADc4bAA3OUAAC1JWADwABpIAEWwANzn4DAA3OWwD3SjrUlwABL1E7AA3PFwANz2AAAtRdgA714ARbAA3PjgcADc9rAPdKetRe9VE7AA3QIwAN0HgAA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nczAPe9QAMAAe/NOwAOd7cADnfgAAMAATMFgA8AAcsABHMADngYWwAOd+i64EsAAeynAAHtFwABPqgEAAYDAA54awD3vUADAAHJ7QUfAA54pFsADnjyBwAOeMcA974SCa8AAcsIFAcADnlpqwAOeWmADwAByr8ABShwAPgI9HMADnm8uwABUH8AAeykCAAImwAOegQGAwAOegcA971BgA71pJsADnpYBFsADnpaBwAOei8A974SD88AAcsNgA4PPAMAAe4tKwAOepQABwAOew2rAA57DYAPAAHKvwAFKNQA+A07AA57rwAOe9wAAmQhgA4PPASbAA57rARbAA58EgcADnvnAPe+Eg/PAAHLDYAODzz0cwAOfLBbAA58nFsADnx6CwAOfEsA98FuCboPTgm2ExIRSAQABLgCHkUrAA59CAAHAA59gasADn2BgA8AAcq/AAUoDAD4DTsADn3nAA59+AACD82ADgksBFsADn4uBwAOfgMA974SD88AAcsNJwAOfmSXAA5+igsADn53APfDSYAODzz4CPRzAA5/UFsADn88WwAOfxhTAA5/BwD3w0gIBYAODz4Jug9OCbYTEhFIBAAEuAIeRSsADn+wAScADoAMlwAOgDILAA6AHwD3w0mADhBI+Aj0cwAOgPBbAA6A3FsADoC4UwAOgKcA98NICAWADhBKCboQXgm2ExIRSAQABLgCHkUrAA6BUAD9CwAOgbgABwAOgi2rAA6CLYAPAAHKvwAFKTgA+A07AA6CxwAOgtgAAg/NgA4dFASbAA6CxARbAA6DDgcADoLjAPe+Eg/PAAHLDYAOHRT0cwAOg5BbAA6DfFsADoNaCwAOg0cA98bSCbodHgm2ExIRSAQABLgCHkUrAA6D6AAABPgFCwAOhGQA9HsADoSq2HwIAAoDAA6EzwD3vUCTAA6FnAifAAFYTgcADoVzAPe+EAAbAAHvzgVjAA6G4wAOhvcADpwYAAMAAVhLAAHspAAAAAQPAA6HjwAOnBgAAAAEBAcADofMAAACCbmADvVEAAFwBPgVOwAOilsADop4AAIMiYAPAAPrRASpJwAOiqyIiIhbAA6K4gMADoq/APfJ2hB69QAEWwAOi1YDAA6LMwD3ydoeSvT8BFsADovSAwAOi68A98naHkb1CASXAA6MWgMADow3APfJ2YAO9cD4BPYnAA6O4wD3y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AAAEBATAAEUpAAAEwABWrF0DwAD9bQJgA711YAPAAH2zAMAARUkAAACBVGADwACAvADAAEVnAAAAwABMjGADwABymgDAAEWBAAAAtBFgA8AAcl4AAGADwAB9LQE+AUnAAEcbFsAARySBwABHH8A+hsbAAFamwACAxD4BPRzAAEdXFsAAR0kuwABPkcAAfTNWAQABFsAAR2AuunDAAH0xAMAA/jw/BQgBwAB9MoAAwD6GqQgAwAB9MSMWwABFq4HAAEWmwD6GxsAAVrfAAIC/H8AARcrAAIXiAQABFsAARewWwABF3oLAAEXUwD6G1qsTwABynIUKvUoAKwFgA8AAhdkIAMAAfTAcwABGfBzAAEZcFsAARkaBwABGQcA+hsbAAFa2wACAvoCrAQFgA711ARbAAEZqgsAARmDAPobWwABMrMAAcp4AwAD9BJVJAAAAAMAA/RAIAMAAfTMcwABHDRzAAEbCFsAARqeBwABGosA+hsbAAE+RwACAwoCrAQFgA711ATTAAEbGA8AARsbAAEb+AAAAAQEBwABGzwAAAIPzYAOCSwAAYAO9dQFKwABG2AEewABG2MAAfQgDAAOEwABG4sA+iDyCwABG6MA+htaDwABG88A+hugAAMAA/QSVSQAAAADAAP0QCQHAAEUTwACFrAAAAAAGBsAAfTWBWsAAR3nAAEeKwABIGAAAwABWuAFqwABHemADwAD95AIAAAEDwABHnsAASBgAAAABAQHAAEefAAAAgaZhAwJgA711YAO9TlsAAFwBPgE9HMAAR9cWwABHyC7AAFaswAB9MoP9AQABNMAAR98DwABH38AASBMAAAACAgLAAEfmAAAAgmdgA711AMAAR/YAAADAAElXYAPAAH2zAABgA8AA/aEBPgE9HMAASASAwABIA8A+iNQgAgACgcAASAXAPokcgsAASAjAPokqAAAAwAD9jAbAAH02gVrAAEgdwABILsAASIYAAMAAVrkBasAASB5gA8AA/eQCAAABA8AASETAAEiGAAAAAQEBwABISwAAAIJwYAO9dQAAYAPAAPrRAUrAAEheARzAAEh0FsAASF4uwABWtsAAfTCDHAEAAYDAAEh9wD6JqgDAAP0IBsAAfTeBWsAASIvAAEiewABJYAAAIwFqwABIjGADwAD95AIAAAEDwABIpsAASWAAAAAAAAAAYAPAAP5+AT4ETsAASLzAAEi/AACD6WADwAD+yAEfwABIxcAA/ucAAAAAPRzAAEjcgMAASNnAPoosgo4BAAEkwABI9AMnwABWuhbAAEjpLrpwwAB9MSeApwDAAP7cPRzAAEj+gMAASPvAPoosgo4BAAEkwABJQQMnwABWuxzAAEk0FsAASR4uwABWtsAAfTBYAQABJ4GLAMAA/Q0nhtcAwAD+3ErAAElIARzAAElSgMAASU/APoosIwAAAADAAP7hBsAAfTiBWsAASWXAAEl2wABJvQAAwABUgAFqwABJZmADwAD95AIAAAEDwABJhcAASb0AAAABAQHAAEmMAAAAgnBgA711AABgA8AA+tEBSsAASZkBHMAASagWwABJmS7AAFaswAB9ModYAQABgMAASbTAPosaAMAA/YAGwAB9O4FawABJwsAAScrAAEvDBAGvcwAAAAEDwABJ6MAAS8MAAAABAQHAAEn0AAAAg0pgA8AAXbEAAGADwAB9LQE+Bz0cwABKCYDAAEoCwD6LhoKYAQABasAASg9gA8AA/n7AAVsLAMAAXbNOwABKKcAASj8AAMAAVrZdA8AA/PkBYAO9dQEcwABKSIDAAEpBwD6LhsAARKYAAWADvXUAAMAAXe9OwABKYMAASmoAALpwYAO9dQEcwABKc4DAAEpswD6LhsAARKUAAAAAwABd7k7AAEqjwABKsgAAwABWrF0DwAD9bQJgA711YAPAAH2zARzAAErDgMAASrzAPouGt0IBAmADvXVgA8AAfbMBNMAASuUDwABK5cAASv4AAAAAAAAAYAPAAH2zAUrAAErrASbAAErrARzAAErygMAASuvAPouGrKMAAAAAwABd6GADwAB9swDAAF3wTsAASxDAAEseAADAAE+RXQPAAP4vAWADvXUBHMAASzQcwABLJ4DAAEsgwD6LhsAARKYAAWADvXUAAMAAXe+VSQAAAADAAP0QPRzAAEtIgMAAS0HAPouGgpABAAFqwABLTGADwAD+fsABWwsAwABdtErAAEtWAR/AAEthwAB9PQQABIHAAEt/wD6LyYLAAEuWwD6MAoPAAEuhwD6MLoTAAEuxwD6MtwAGwAB9OYFawABLyMAAS9nAAE0DAACvdAFqwABLyWADwAD95AIAAAEDwABL6MAATQMAAAABAQHAAEvyAAAAhEBgA8AAXWIAAFwBPgc9HMAA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wACk9AQBr3MAAAABA8AAo/nAAKT0AAAAAgICwACkDAAAAINKYAPAAF2xAMAApB8AAACCa2ADwAByrwAAYAPAAH4SAT4FPRzAAKQygMAApCvAPuWrgpgBAAFqwACkOGADwAD+fsABXJgAwABds07AAKRNwACkVgAAhGBgA7YhARzAAKRfgMAApFjAPuWrwABEogAAAADAAF3fTsAApIHAAKSGAACD82ADglIBHMAApI+AwACkiMA+5avAAESYAAAAAMAAXdE9HMAApKqAwACko8A+5auCkAEAAWrAAKSuYAPAAP5+wAFcmADAAF20SsAApLgBH8AApMPAAH4eAwADgsAApNvAPuX+gcAApOXAPuW7g8AApOvAPuYqAAbAAH4bgVrAAKT5wAClCsAApbEAAK90AWrAAKT6YAPAAP3kAgAAAQPAAKUZwAClsQAAAAEBAcAApSMAAACEQGADwABdYgAAXAE+BT0cwAClNIDAAKUvwD7m4bAbAQABFsAApT4ugmvAAH4WAMAAXXM9HMAApU6AwAClScA+5uGCmAEAAWrAAKVUYAPAAP5+wAFcmADAAF1nPRzAAKVjgMAApV7APubhwABEgAEAARbAAKVzLoRgwAB+FQDAAF2MPRzAAKWHgMAApYLAPubhwABEdgEAARbAAKWVLoPzwAB+FwDAAF1+PRzAAKWlgMAApaDAPubhgpABAAFqwAClqWADwAD+fsABXJgAwABdaAbAAH4cgVrAAKW2wAClycAApg8AACMBasAApbdgA8AA/eQCAAABA8AApdHAAKYPAAAAAAAAAGADwAD+fgFKwACl1wEkwACmDwUnwABW/hbAAKX2LoJrwAB+FifAAE/HFsAApgUuhGDAAH4VJ4MmAAA+5YEAPuarAD7nuQA+6CcAAAADAsAAfh+BWsAAphTAAKYawACp6wPAAFb/AAABYAHAAP3kAAFgAcAAcvICBMAAfiGBWsAAptfAAKbwBoPsAGADwAD+fgFqwACm3WADwAD+fsABXJ0EwAB+IoFawACnEsAApxoJhGABasAApvZgA8AA/eQCYAO2IQABBcAAfiyBWsAApx/AAKcfwACnRwAAAAPAAKc4wACnRwAAAAEBAcAApz4AAASEYGADtiEAAGADwAB+HwE/AggBwAB+IoAAwD7o2QkBwACnH8AA/foAAAAABQbAAH4kgVrA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vcAAdS4UwABDx8A/GOcNAADAAKS0P0AcwABD6BTAAEPiwD8YvQsASAEAARbAAEPvFMAAQ+vAPxjMDADAAES8wACO6gDAAP27wABD4sAAQ/kAAMAAf0s9HMAARA+EwABECMA/DzWCkAEAAWrAAEQTYAPAAP5+wAFcvQDAAF20PRzAAEQuhMAARCfAPw81gpgBAAFqwABENGADwAD+fsABXMIAwABdsz0cwABEVoXAAERJwD8QOsAAV0UBAAE0wABEZQPAAERlwABFTAAAAAICAsAARGoAAAAnYAPAAPyXAMAARHoAAACGkWADwAB1OQAAYAPAAP2hAT4DTsAARJjAAESdAAASYAPAAKYQAR7AAESjwACmFgEAAYTAAETDwD8PNQA9HMAARNwWwABE0i7AAFchwAB+X4C/AgACFsAAROIUwABE3cA/G0YNAIPzwACmExzAAETzFsAAROouhIfAAH5cwABMmwMCYAPAAI8CYAPAAKYQAxTAAEUDwD8bHAsAFMAARQrAPxsrDAAUwABFE8A/G0YNAADAAI8tAMAA/YJAHMAARS0UwABFJ8A/GxwLAEgBAAEWwABFOBTAAEUwwD8bKwwAwABEvsAAjwQAwAD9u8AARSfAAEVEAADAAH9MPRzAAEVahMAARVPAPw81gpABAAFqwABFXmADwAD+fsABXMIAwABdtD0cwABFe4TAAEV0wD8PNYKYAQABasAARYFgA8AA/n7AAVzHAMAAXbM9HMAARaKFwABFlcA/EDrAAFdGAQABNMAARbADwABFsMAASCYAAAACAgLAAEW1AAAAJ2ADwAD8lwDAAEXKAAAAgmpgA8AAju4AAGADwAD9oQE+BE7AAEXmwABF6wAAEmADwAClXQEewABF8cAApWYBAAGEwABGEMA/DzUAPRzAAEYnFsAARh8uhJTAAH5awABMmwMCYAPAAI7uYAPAAKVdAxTAAEY3wD8cpgsAFMAARj7APxy1DAAUwABGRsA/HNANAADAAI8tQUfAAEZTFsAARmsWwABGYBTAAEZbwD8c0A0AwABMwcAApV+Ca8AAcsICAsAARotqwABGi2ADwAByr8ABSgPAAEasasAARqxgA8AAcq/AAUocAD4DTsAARs3AAEbSAACD82ADg30BJsAARs0BFsAARuQWwABG2RTAAEbUwD8c0A0AwABMwcAApV+D88AAcsNgA4N9ScAARvQWwABG/xTAAEb4wD8ctQwAh469Qz4BPRzAAEceFsAARxYuvRnAAH5jgL8CAAImwABHHgEUwABHH8A/HZgOAGADg5wmwABHHgEUwABHJ8A/HLUMAGADwACO+gDAAP2CScAAR0AWwABHSxTAAEdEwD8ctQwAh5G9Qj4BPRzAAEd2FsAAR2guwABXI8AAfmGAvwIAAhTAAEd3wD8dmA4AJsAAR3YBFMAAR3/APxy1DABgA8AAjvcAwAD9gj4BPRzAAEevFsAAR6YuwABXJMAAfmKAvwIAAibAAEevARTAAEewwD8dmA4AYAOEEibAAEevARTAAEe4wD8ctQwAYAPAAI70AMAA/YJCwABH1gAAAT4AQBzAAEgJFMAASAPAPxymCwBIAQABFsAASBMUwABIDMA/HLUMALhIwACO8ADAAP27wABIA8AASB4AAMAAf009HMAASDSEwABILcA/DzWCkAEAAWrAAEg4YAPAAP5+wAFcxwDAAF20PRzAAEhUhMAASE3APw81gpgBAAFqwABIWmADwAD+fsABXMwAwABdsz0cwABIgYXAAEh0wD8QOsAARpABAAE0wABIlQPAAEiVwABJswAAAAICAsAASJoAAAAnYAPAAPyXAMAASK8AAACpWGADwAB2IgAAYAPAAP2hAT4DTsAASNfAAEjcAAASYAPAAKYbAR7AAEjiwACmIwEAAYTAAEkHwD8PNQA9HMAASSUWwABJFi7AAFciwAB+YIC/AgACFsAASSsUwABJJsA/H8wNAIPzwACmHhzAAElLFsAAST0uoq3AAH5bwABMmwMCYAPAAI79YAPAAKYbAxTAAElbwD8fogsAFMAASWLAPx+xDAAUwABJcMA/H8wNAADAAI8tAMAA/YJAHMAASYoUwABJhMA/H6ILAEgBAAEWwABJmhTAAEmNwD8fsQwAwABEwcAAjv8AwAD9u8AASYTAAEmrAADAAH9OPRzAAEnBhMAASbrAPw81gpABAAFqwABJxWADwAD+fsABXMwAwABdtD0cwABJ54TAAEngwD8PNYKYAQABasAASe1gA8AA/n7AAVzRAMAAXbM9HMAAShcWwABKBS7AAFclwAB+OMAAflKApQEAARzAAEolhMAASh7APw81tFQBAmADwACO7l0DwAD9OwFgA8AAjvQBNMAASjwDwABKPMAASnoA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ty7AAFdLAQABFsAAWeAWwABZ1RbAAFnKLrgzwAB+V4JawACkn4Syg4YAwAB+xCsBYAO9GwbAAH5qgVzAAFoJwABaFMAAXm0AALhDAAAAAQPAAFohwABebQAAAAICAsAAWiwAAAClkWADtjEAwABaPgAAAKUVYAO9FgAAYAO2IQE+BE/AAFpUwABaXwAAAcAAV0xhAwFgA7YxYAO2IQADwABabMAAXekAAAABAQHAAFp3AAAApZFgA7YxAABgA7YhAT4CScAAWooiJcAAWpiDwABajsA/M5VgA8AAjuIAHMAAWs4WwABawRTAAFq3wD8zlQMBYAPAAI7ip27AAI7kYwEAARbAAFraFsAAWtAuhurAAH5YYcAAjxcAwAD9xT4CTsAAWvjAAFr8AACWp2ADwACkqAEcwABbCBbAAFr+LobqwAB+WMAAVysBAAEUwABbD8A/M5UDAWADwACO4gDAAI82SsAAWyMBHsAAWyrAAJy9AQABFsAAW0yEwABbSMA/NAmESMAApKsAScAAW2MiJcAAW3GDwABbZ8A/M5VgA8AAjugAHMAAW6MWwABbmBTAAFuOwD8zlQMBYAPAAI7owABEvMAAjupjAQABFsAAW60WwABbpS6EiMAAfllhwACPFwDAAP3FPgNOwABbysAAW88AABJgA8AApSUBHMAAW9kWwABb0S6EiMAAflnAAEyxAQABFMAAW+HAPzOVAwFgA8AAjugAwACPJkAhHMAAXAGEwABb/MA/NNFIAQABKwDAAP3xwABb/MAAXAgBJMAAXCsEJ8AAV00UwABcGMA/M5UDAWADwACO6CeBni5KwABcNgEWwABcTRbAAFxChMAAXD3APzTRwABMwcAApSuEYMAAcvZJwABcZCIlwABccoPAAFxowD8zlWADwACO7gAcwABcphbAAFyaFMAAXJDAPzOVAwFgA8AAju64SMAAjvBjAQABFsAAXLAWwABcqC6ElMAAflphwACPFwDAAP3FPgNOwABczsAAXNMAABJgA8AApV0BHMAAXN0WwABc1S6ElMAAflrAAEyxAQABFMAAXOXAPzOVAwFgA8AAju4AwACPJkAhHMAAXQWEwABdAMA/NdlIAQABKwDAAP3xwABdAMAAXQwBJMAAXS8EJ8AAV00UwABdHMA/M5UDAWADwACO7ieBni5KwABdOgEWwABdURbAAF1G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m8AApKzAAKU8AADAAFeBAAAAAQPAAKTHwAClPAAAAAEBAcAApOAAAAiCamADwACO7gAAYAPAAHLAAT4CQBzAAKT1LsAAV1ABAAGAwAClAcA/eVoAwAB+wsAApPXAAKUIAErAAKUPARbAAKUuHMAApR4WwAClFi6ElMAAflrAAEyxAQABgMAApSbAP3laAMAAjybAAEzBwAClXwbAAH6sgVzAAKVBwAClUcAApdYAAMAAV4IAAAABA8AApWvAAKXWAAAAAQEBwAClgwAACJn6YAPAAI7oAABgA8AAcvIBPgJAHMAApZUuwABXUAEAAYDAAKWhwD95/gDAAH7CwACllcAApaUASsAApawBFsAApcgcwACluxbAAKWzLoSIwAB+WcAATLEBAAGAwAClw8A/ef4AwACPJsAATMHAAKUrBsAAfq2BXMAApdvAAKX0wACmqgAAwABPpwFqwACl3GADwAD95AIAAAEDwACl/cAApqoAAAABAQHAAKYTAAAAg/NgA4LCAABgA70gAT4DTsAApirAAKYyAACESGADgosBJsAApioBFsAApjmAwACmNMA/eq6EV4JYYAOCi07AAKZSwACmVwAAEmADwACkuwEcwACmYxbAAKZZLobqwAB+WMAATLEBAAEmwACmawEcwACmay7AAFdLAQABgcAApn7AP3rFAMAAfsRgA8AAjuIAwACPJkrAAKaNARzAAKagFsAAppmCwACmlMA/evOZp8AApL9LAQABgMAApqHAP3quAMAA/YEGwAB+3IFcwACmr8AApsbAAKebAQCG3QAAAAEDwACm1sAAp5sAAAAAAAAAYAObnwE+AknAAKbcHMAApvEWwACm4C7AAFcewAB+OMAAfk9IAQABKwDAAP3xPgE9IxzAAKcTFsAApwIuwABXHsAAfjjAAH5PSAEAASsAwAD98RfAAKcCLsAAVx7AAH44HsAApxubqAIAAh/AAKc9nRUBAAEWwACnVRbAAKdKLrgzwAB+V7g0wACkoAAWwACnZS6H6MAAft0AwAB+TysBYAObnz9KwACngAEWwACnhy7AAFcewAB+OMAAfk8GwAB+3YFcwACnoMAAp7bAAKhZAQCH6AAAAAEDwACnxcAAqFkAAAAAAAAAYAOb8QE+AknAAKfLHMAAp98WwACnzy7AAFcfwAB+OMAAflBIAQABKwDAAP3xPgE9IxzAAKgAFsAAp/AuwABXH8AAfjjAAH5QSAEAASsAwAD98RfAAKfwLsAAVx/AAH44HsAAqAib8wEAARbAAKglFsAAqBouuDPAAH5XuDTAAKSgAMAAflArAWADm/E/SsAAqD8BFsAAqEYuwABXH8AAfjjAAH5QBsAAfq6BXMAAqF7AAKh9wACtjgAAwABPsAFqwACoX2ADwAD95AIAAAEDwACoksAArY4AAAABAQHAAKigAAAAgmpgA708AABgA8AAn0UBPgZOwACov8AAqNAAAMAAV4NgA8AAcsABFsAAqOocwACo2hbAAKjSLoSUwAB+WsAATLEBAAEmwACo4gGAwACo4sA/fWlgA8AAju4AwACPJsAATMHAAKVfTsAAqQoAAADAAFeEYAPAAJzeAE7AAKkyAAAAhMlgA4kkAEFHwACpQBbAAKlZgcAAqUjAP32CgmvAAHLCAwPAAKl3asAAqXdgA8AAcq/AAUoDwACplmrAAKmWYAPAAHKvwAFKHMAAqblqwACpuWADwAByr8ABSjUAPgROwACp3MAAqeEAAIPzYAODfQEmwACp3AEWwACp9IHAAKnjwD99goPzwAByw2ADg309i8AAqgLAP33qNQAAAAEAYAODGwEWwACqEoTAAKoNwD9+UYUKg4UjHMAAqiKFAMA/fotIAQABKwAAKxbAAKoihQDAP36LhMmDSgFgA4kkPYrAAKo0wD991xbAAKpgHMAAqlAWwACqSC6ElMAAflrAAEyxAQABJsAAqlgBgMAAqljAP31pYAPAAI7uAMAAjybAAFbnwAClYULAAKp1AAHAAKqSasAAqpJgA8AAcq/AAUpOAD4DTsAAqrPAAKq4AACD82ADglIBJsAAqrMBFsAAqsuBwACqusA/fYKD88AAcsNgA4JSQUPAAKrZIRzAAKrlhMAAquDAP382SAEAASsAwAD98T4CScAAqvolwACrA4TAAKr+wD9/NmADg30+BE7AAKspwACrMAAAgmpgA4N9ARTAAKsywD9/NgQBYAODfT2LwACrRMA/feo1AAAAAQBgA4MbARbAAKtWhcAAq0/AP3+ghQqDhSMcwACrZoYAwD9/y0gBAAErAAArFsAAq2aGAMA/f8uEyYNKAWADiSQ9isAAq3zAP33XFsAAq7McwACrmBbAAKuQLoSUwAB+WsAATLEBAAEmwACroAEcwACroC6cRAEAAYXAAKuqwD9/oADAAH6WYAPAAI7uAMAAjybAAFbnwAClYULAAKvMAT89jMAAq+nAP382FsAAq/WEwACr8MA/fzaEV4JYQsAArA8AA8AArCxqwACsLGADwAByr8ABSmfAAKxQasAArFBgA8AAcq/AAUqBwACscWrAAKxxYAPAAHKvwAFKmwA+Aj2KwACsiMA/fddqwACsomADwACc3sABXPZCwACsvQBAIRzAAKzogsAArNbAP33XSAEAASsAwAD98cAArNbAAKzvASTAAK0WAyfAAFeFgMAArQ7AP31pJ4FqSsAArR0BH8AArSjAAKZ8AwADFsAArTkuht3AAH7cgsAArUrAP33XHsAArWnAAI95AQABg8AArYDAP33qAAAGwAB+r4FcwACtk8AAraTAAK4ZAACZSQFqwACtlGADwAD95AIAAAEDwACtq8AArhkAAAABAQHAAK20AAAAgL1gA4i0AABgA8AAaO8BPgFKwACtwAEewACty8AAaPECAAIWwACt3oDAAK3ZwD+Bm4C9iLcjFsAAremAwACt5MA/gZuGbYi7HMAArfUunEIBAAEWwACuBYDAAK4AwD+Bm4RIiLoAwAB+kSsBYAO9GwAGwAB+sIFcwACuHsAArjjAAK9gAADAAE+fAWrAAK4fYAPAAP3kAgAAAQPAAK5IwACvYAAAAAEBAcAArlYAAABbYAOFowAAYAPAAGkgAT4DTsAArmvAAK55AAC7lGADwAD8lwEcwACulxbAAK6QFsAAroWAwACue8A/gkuFo4WmYcAA/WtkAQABFsAArqkWwACuo4DAAK6ZwD+CS4VthadhwAD9awDAAP29TsAArsLAAK7RAACqs10DwAD9OwFgA8AA/n4BHMAArvYcwACu4xbAAK7dgMAArtPAP4JLhW2Fp4CrAQFgA8AA/n4BNMAArucDwACu58AArvQAAAABAQHAAK7oAAAAg1NgA4WxAABgA8AA/n4BSsAAru4BFsAArvCCwACu7sA/gxKAvYWzAMAA/QSArQAAAADAAP0PSsAArwQBHsAArw/AAGk2AwADgcAArybAP4JjgsAArzXAP4K9FsAAr1UWwACvT4DAAK9FwD+CS4V9haVhwAD9awAGwAB+sYFcwACvZcAAr3rAALLmAADAAE+gAWrAAK9mYAPAAP3kAgAAAQPAAK+FwACy5gAA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ANMFAACG7F0DwAD9OwFgA8AAYUIBMcAA0xZgA8AAYUIAPRzAANMqgMAA0x7AP5+Cg/0BAAE0wADTMgPAANMywADTegAAAAEBAcAA00EAAACD82ADhNkAAGADwAD9oQE+AT0cwADTWIHAANNPwD+f31YBAAEcwADTXC7AAE2LAQABgsAA023AP6AtAMAAfrkAwAD9TADAAP0JSsAA04EBgcAA04jAP5/fBsAAfruBXMAA05nAANO0wADXHwAAwABOcwFqwADTmmADwAD95AIAAAEDwADTyMAA1x8AAAABAQHAANPVAAAAmfpgA70qAABgA71RAT4EQUPAANPgIRzAANPrgMAA0+fAP6DESAEAASsAwAD98T4DPYjAANP8wD+gxBzAANQVFsAA1AIupTvAAH7Xs3ABAAGAwADUI8A/oMQAwAB+/07AANQ8wADUQwAAgmpgA708ARzAANRYFsAA1EUupTvAAH7Xst0CAAKAwADUesA/oMRqwADUi2ADwAD+fsAA73kAwAB+/knAANShIiEcwADUrIHAANSlwD+hKkgBAAErAMAA/fEAIRbAANS/gcAA1LjAP6EqhB+9ST4CScAA1NUWwADU4IHAANTZwD+hKrM2vUQ+Ak7AANUHwADVEAAAgm5gA71RASbAANUHAYHAANUSwD+hKmADvVFJwADVJBzAANVZFsAA1UQWwADVMYLAANUowD+hvbUXvVSEx718gW0BAAGUAMAA/cg+AUrAANVtAYLAANV0wD+hvT8/QsAA1gYAP07AANYuwADWNwAAgm5gA71RASbAANYuARzAANZMFsAA1jkupTvAAH7Xst0CAAIWwADWexbAANZsLrO3wAB+2Jr/uj5qwADWlGADwAD+fsAA73kAwAB+/mADvVFAIRzAANa4gcAA1q/AP6IsSAEAASsAwAD98cAA1q/AANa/AR7AANbJth8CAAKAwADW0sA/oMQkwADXBAMnwABXnYDAANb/wD+gxCeBagBKwADXDAGBwADXE8A/oiwGwAB+vIFcwADXJMAA1zfAANfBAADAAFc+AAAAAQPAANdJwADXwQAAAAMDA8AA11gAAAC1FGADvRYAwADXcAAAAIC9YAPAAP5+AMAA13oAAAAnYAPAAPyXAABgA702AT4BSsAA14cBH8AA15LAAHYuAwADgMAA16DAP6MPgcAA17HAP6MdgsAA17fAP6MtAAbAAH69gVzAANfGwADX18AA2IAAAMAAV54AAAABA8AA1+zAANiAAAAAAgICwADYBgAAAJkIYAO9aQDAANgmAAAAtRdgA714AABgA8AAdaYBPgFKwADYQAEfwADYS8AAdbICAAImwADYXAGAwADYXMA/o55gA8AAdYCBwADYacA/o6wABsAAfr6BXMAA2IXAANiUwADZGAAAwABXnwAAAAEDwADYp8AA2RgAAAACAgLAANi+AAAAgm5gA71RAMAA2NEAAACbDGADwABi1gAAYAPAAHXBAT4BSsAA2OQBH8AA2O/AAHXPAgACJsAA2P4BgMAA2P7AP6QhYAPAAHV5gcAA2QjAP6QvAAbAAH6/gVzAANkdwADZIsAA2cMAALOMAAAAAQPAANk2wADZwwAAAAICAsAA2UsAAACCamADvTwAwADZWAAAAIGmYQMBYAO9UVwAAFwBPgJAHMAA2YAuwABXUAEAAYDAANmMwD+kpADAAH7CwADZgMAA2ZMAPTUAAAABAF0DwAD9OwFgA8AAjvQBHMAA2asWwADZmi7AAFclwAB+OMAAflJLAQABgMAA2azAP6SkAMAA/YEjHMAA2bWCAMA/pPBIAQABKwAAKxzAANm1ggDAP6Twg/0BAAGBwADZvcA/pLIAwAD9CQFcBsAAfsCBXMAA2cjAANniwADaSQAAuFgBasAA2clgA8AA/eQCAAABA8AA2fPAANpJAAAAAQEBwADaAQAAAIJqYAO9PAAAYAPAAGL9AT4BSsAA2g8BHMAA2i4cwADaHhbAANoWLoSUwAB+WsAATLEBAAEmwADaJgGAwADaJsA/pZZgA8AAju4AwACPJrhYAQABLgDAAKVjBsAAfsGBXMAA2k7AANpywADa8gAAwABPqwFqwADaT2ADwAD95AIAAAEDwADalcAA2vIAAAABAQHAANqqAAAAgmpgA708AABgA8AAn0wBPgFKwADauAEWwADa1xzAANrHFsAA2r8uhJTAAH5awABMsQEAASbAANrPAYDAANrPwD+mLmADwACO7gDAAI8mwABW7cAApWAGwAB+woFcwADa98AA2vzAANvOAADAAFdQAAAAAQPAANsHwADbzgAAAAEBAcAA2w8AAACkZ2ADvRYAAGADwAD60QE+AkAcwADbNyTAANs2AYDAANsvwD+mt4HYAQABasAA20JgA8AA/n7AAPZpAMAA/pDAANstwADbUgEewADbXLYfAgACgMAA22XAP6a3JMAA27cFJ8AAV6CAwADbjcA/prcnwABXoWrAANumYAPAAP5+wAD2aSeBagBKwADbvwEpBsAAfsOBXMAA29PAANvpwADc3AAAwABPrAFqwADb1GADwAD95AIAAAEDwADb9cAA3NwAAAACAgLAANwDAAAAgmpgA708AMAA3BMAAACD82ADgksAAGADtjEBPgROwADcKgAAAJbZYAO2IQBJwADcOiXAANxDgcAA3D7AP6eSYAOCUj4BPYrAANxbwD+nqR7AANxowACcvQEAARTAANyGwD+nkgEBYAOCUgA/PSMcwADcooLAANyXwD+nqUgBAAErALYpisAA3JfAP6epHMAA3KYuuEMCAAKAwADctMA/p4QrAMAAfmorAWADtiFKwADcxwGCwADczsA/p6kGwAB+3oFcwADc4cAA3P3AAN0zAQDAAFeiAAAAAQPAAN0RwADdMwAAAAAAAABdA8AA/PkBYAO9GwE+AUrAAN0XARbAAN0pFsAA3R4upF7AAH5dKcAA/ZAGwAB+xIFcwADdOMAA3UbAAN3/AADAAFdLAAAAAQPAAN1YwADd/wAAAAIBAsAA3WQAAACD82ADgosAwADddwAAAJanYAPAAKSoAWoAYAPAAP2heQBgA70bAT4DTsAA3ZHAAN2ZAACESGADvRsBHMAA3aUWwADdmy6kXsAAfl1LAQABgMAA3abAP6jKAMAA/YFAIRzAAN3AgsAA3bjAP6j6SAEAASsAwAD98cAA3bjAAN3HASTAAN3mAifAAFejgMAA3eHAP6jKSsAA3e0BgsAA3fTAP6j6BsAAfsWBXMAA3gTAAN4QwADesQAAwABXVAAAAAEDwADeIMAA3rEAAAACAQLAAN4qAAAAg/NgA4MbAMAA3jsAAACWp2ADwACk0wFqAGADwAD9oXkAYAO9KgE+A07AAN5TwADeVwAAmfpgA70qARzAAN5hFsAA3lkutAjAAH5eSwEAAYDAAN5iwD+poADAAP2BQCEcwADeeILAAN50wD+p0EgBAAErAMAA/fHAAN50wADefwEkwADenAInwABXpIDAAN6XwD+poErAAN6jAYLAAN6qwD+p0AbAAH7GgVzAAN62wADewsAA31gAAMAAV2EAAAABA8AA3tLAAN9Y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iH4+Ak7AARE7wAERSQAAwABXv2ADvXUBHMABEVWEwAERS8A/zOzAAEysAQABFMABEWbAP81bCAFgA4h+AMAAcp5JwAEReRzAARF9LsAAV7bAAH44AgACFMABEYnAP82dCQCFwAERmMA/zP4AwAB+hD4CTsABEcbAARHXAADAAFfAYAPAAPrRARzAARHZLsAAV8HAAH44BwAHFMABEgjAP82dCQCAwAESJcA/zKqCwAESRcA/zMqGwAESY8A/zRsUwAESfMA/zVsIAWADiH6FwAESlMA/zP6HwAESvsA/zTwAwAB+h0nAARLWFMABEtrAP84LCgA9j8ABEuzAP808HMABEveHwAES7MA/zTxkAQABlADAAP29Pz8/ScABE0QWwAETTYPAARNIwD/M3MAAVqbAAIDEPgI9HMABE20uwABXwsAAfjgIAAgWwAEToIDAAROPwD/MqrpwwAB9X4DAARO1wD/MqoLAARPRwD/MyobAARPrwD/NGybAARQqARbAARQqHMABFAAuwABPqAEAARbAARQagcABFBPAP8y8hQq9SgDAAH7Og/PAAHL1YAOCUikqh8ABFFvAP808AMAAfok9j8ABFG/AP808HMABFHqHwAEUb8A/zTxkAQABlADAAP29P0bAARSJwAEUtsABFJYAAACCcGADgksAFsABFKeDwAEUosA/zNzAAE+RwACAwj4BScABFUQlwAEVURTAARVIwD/PhQgAYAOIfj4CTsABFXzAARWKAADAAFe/YAO9dQEcwAEVloTAARWMwD/M7MAATKwBAAEUwAEVp8A/z4UIAWADiH4AwABynknAARW6IRzAARW/LsAAV7bAAH44AgACFMABFcvAP8/HCQCFwAEV2sA/zP4AwAB+hD4CPRzAARYDLsAAV8LAAH44CAAIFMABFinAP8/HCQCAwAEWRsA/zKqCwAEWZsA/zMqGwAEWhMA/zRsUwAEWncA/z4UIAWADiH4WwAEWvhTAARa1wD/PhQgBYAOIfoQiiJEqh8ABFyDAP808AMAAfok9j8ABFzjAP808HMABF0OHwAEXOMA/zTxkAQABlADAAP29P0nAARdeJcABF2sUwAEXYsA/z4UIAGADwACBKT4CPRzAAReVLsAAV8LAAH44CAAIHMABF8OEwAEXucA/zOzAAEyuAgACFsABF+EUwAEX2MA/z4UIAWAD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zAGGv9PAQIqaAMAA/QSVSQAAAADAAP0QSr/xAR+//MAAg4EIAAgWwABAGi6vssAAf97AAH/wg8AAQDfAQImUhcAAQFzAQIoShMAAQH3AQInTKyuGwABAvsBAilEWwABA7YLAAEDlwECJe8AAWFHAAIN1AAbAAH/7gV7AAEFzwABBisAARi8AAMAAVrMAAAABA8AAQZvAAEYvAAAABwYGwABBsAAAAIJqYAO9PADAAEHOAAAAwABYUmADhK4AwABB+gAAAISyYAPAAHULAMAAQisAAADAAFasXQPAAP1tAmADvXVgA8AAfbMAwABCUQAAAIFUYAPAAIC8AMAAQm8AAADAAEyMYAPAAHKaAAHAAEKGAAAAwABWsGADwAD60QFqAGADwAD9oXlgA8AAfVkBPghOwABCsMAAQrsAAITzYAO9KgEWwABCzRbAAEK9LrR8wAB/3sAAf/Gx0LkNTsAAQvfAAEMIAADAAFauYAPAAH1ZARzAAEMWFsAAQwouuBLAAH/ewAB/58AAV7gIAAeAwABDNcBAjA+BwABDRcBAjB2CwABDasBAjC2DwABDhMBAjD2EwABDnMBAjFqFwABDqsBAjGofwABDwcAAYxICAAKHwABDz8BAjKJqwABD210DwAD9OwFgA8AAYtbAAPlVAAHAAFawhsAARAXAQIx9wAB+007AAESawABEpQAAwABPV2ADwACIGwEcwABEuxbAAESnLsAATzHAAH/ewAB/6EsBAAGHwABEvMBAjKIAwAD9gU7AAETgwABE5QAAg/NgA8AAiBsBH8AAROvAAIhIAwADFMAARP7AQI1zCQAWwABFIxTAAEUSwECMzQgAwABVucAAfWAcwABFURbAAEVCFMAARTfAQI1zCQDAAFgswACIKGQBAAGUAMAA/b0APRzAAEVvFsAARVsuwABPMcAAf97AAH/ogL8CAAIWwABFgRTAAEVwwECMzQgAwABVucAAfWAUwABFl8BAjbIKAADAAP2CPRzAAEWrFsAARaEuwABPMsAAf97AAH/pgL8CAAIWwABFvRTAAEWswECMzQgAwABVucAAfWAfwABF18AAiGsBAAEUwABF4MBAjbIKAAAAwAD9gj0XwABF8BTAAEXrwECNsgoAvEgpwACIQ0rAAEYUARTAAEYbwECMzQgABsAAf/qBXsAARjTAAEZDwABQSAAAwABYQsAAf94AAAABA8AARlnAAFBIAAAAAwMDwABGbgAAAICrYAPAAIApAMAARogAAAASYAO8SgDAAEaaAAAAvK1gA8AAhYcAAGADvEoBPgNPwABHL8AAR0wAAAG0S2EDAl0DwAD9bQJgA70qYAO7oF0DwAD9bQJgA711YAO7oF0DwAD9bQJgA70qYAO7oAADwABHW8AASrwAAAACAgLAAEeCAAAAtAhdA8AA/W0CYAO9KmADu6AAwABHqwAAALQKXQPAAP1tAmADvXVgA7ugAABdA8AA/W0CYAO9KmADu6ABPgROwABHycAAR9AAAIF2XQPAAP1tAmADvSpgA7ugATLAAEfrYAO9KmADu6AAPRzAAEf+hMAAR/XAQI+Pg/0BAAE0wABIBgPAAEgGwABJLQAAAAICAsAASBMAAACkZ2ADvSoAwABIJgAAALO0YAO7oAAAYAPAAP2hAT4CTsAASELAAEhQAADAAFhTYAO9KgEcwABIVoDAAEhSwECPDMAAWCsBAAEmwABIZQGHwABIZcBAkCdgA8AAjugAwACAMUnAAEh2IRzAAEiIFMAASHrAQJBOCQBIAQABKwDAAP3xPgE9HMAASQSGwABI/sBAj9WAvwIAAhTAAEkFwECQTgkAFMAASRbAQJA1CAAAwAD9gj8AwAD9jD0cwABJR4XAAEk2wECPqIP9AQABNMAASU8DwABJT8AASqAAAAACAgLAAElWAAAApGdgA711AMAASWkAAACztGADu6AAAGADwAD9oQE+AUnAAEnrJcAASfaHwABJ78BAkQ9gA8AAbJc+Ak7AAEoZwABKJQAAtLhgA8AAhb0BHMAASjmCwABKJ8BAjynAAFBgAQABFsAASk8UwABKSMBAkQ8HAWADwABsl4PzwABsnADAAIWQPRzAAEpmhsAASmDAQI/VgL8CAAIWwABKcxTAAEpnwECRUQkAwABVucAAhcIUwABKicBAkR0IAADAAP2CPwDAAP2MSsAASqkBhsAASrDAQI/VT8AAS0DAAEteAAABtExhAwJdA8AA/W0CYAO9PGADu6BdA8AA/W0CYAO9dWADu6BdA8AA/W0CYAO9PGADu6AAA8AAS27AAE9MAAAAAgICwABLlgAAALQJXQPAAP1tAmADvTxgA7ugAMAAS8AAAAC0Cl0DwAD9bQJgA711YAO7oAAAXQPAAP1tAmADvTxgA7ugAT4ETsAAS97AAEvlAACBdl0DwAD9bQJgA708YAO7oAEywABMAWADvTxgA7ugAD0cwABMFYXAAEwLwECSOYP9AQABNMAATB0DwABMHcAATUcAAAACAgLAAEwrAAAApGdgA708AMAATD4AAACztGADu6AAAGADwAD9oQE+Ak7AAExbwABMaQAAwABYU2ADvTwBHMAATG+AwABMa8BAjwzAAE2nAQABJsAATH8BFMAATH/AQJLRCABgA8AAju4AwACAMknAAEyQIRzAAEyiFMAATJTAQJL4CgBIAQABKwDAAP3xPgE9HMAATR6HwABNGMBAkn+AvwIAAhTAAE0fwECS+AoAFMAATTDAQJLfCQAAwAD9gj8AwAD9jD0cwABNYYbAAE1QwECSUoP9AQABNMAATWkDwABNacAATzAAAAACAgLAAE1wAAAApGdgA711AMAATYMAAACztGADu6AAAGADwAD9oQE+AUnAAE4KJcAAThUUwABODsBAk7sIAGADwABslz4DTsAATjjAAE5EAAC0uGADwACFvQEcwABOWILAAE5GwECPKcAAUGABAAEWwABObhTAAE5nwECTuwgBYAPAAGyXg/PAAGycAMAAhZA9HMAAToWHwABOf8BAkn+AvwIAAhbAAE6SFMAATobAQJP/CgC0vcAAhcMUwABOoMBAk8kJAADAAP2CScAATrAhHMAATtAWwABOwBTAAE60wECT/woAwABRK8AAhcRIAQABKwDAAP3xPgE9HMAATu2HwABO58BAkn+AvwIAAhbAAE76FMAATu7AQJP/CgDAAFErwACFxBTAAE8NwECTyQkAAMAA/YI/PwDAAP2MSsAATzkBh8AAT0DAQJJ/SsAAT1MBHsAAT168WQUABYHAAE97wECPHCbAAE+NARbAAE+NgMAAT4nAQI8MwABYUMAAgDBhAwFgA70bYAO9G4PAAE+nwECPRoTAAE/AwECR8DTAAE/aA8AAT9rAAFBDAAAAAQEBwABP2wAAAEVdA8AA/W0CYAPAAGFCYAO7oAAAXQPAAP1tAmADwABhQmADu6ABSsAAT+EBHsAAT+HAAH/jAwNgA8AAYUJgA7ugYAO7oAOFwABQIMBAlWkWwABQJ4DAAFAjwECPDMAATa7AAIA1NMAAUDoDwABQOsAAUEIAAAABAQHAAFA7AAAAgPJgA7ugAABgA7ug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AAAAAQEBwABcIgAAAJdQXQPAAPz5AWADvSoAAF0DwAD+LwFgA70qAT4BSsAAXGABHMAAXH8cwABca4DAAFxnwECgjoCrAQFgA70qARbAAFxvLsAAWCvAAIAbAMAA/QSVSQAAAADAAP0QBsAAgCGBXsAAXI/AAFyhwABdkQAAwABYMAAAAAEDwABcs8AAXZEAAAABAQHAAFzLAAAAl1BdA8AA/PkBYAO9PAAAXQPAAP4vAWADvTwBPgFKwABc1gEcwABdhhzAAFz2HMAAXOGAwABc3cBAoR2AqwEBYAO9PAEWwABc5S7AAE2nwACAHADAAP0EgaUBAAE0wABc/APAAFz8wABdhAAAAAEBAcAAXQoAAACCamADvTwAAGADwAD60QE+AUrAAF1oASEcwABddoHAAF1vwEChlEgBAAErAMAA/fEAwAD9BZVJAAAAAMAA/RAGwACAIoFewABdlsAAXafAAF8lAADAAFhYAAAAAQPAAF24wABfJQAAAAEBAcAAXc8AAACXUF0DwAD8+QFgA71OAABdA8AA/i8BYAO9TgE+A07AAF3rwABd8gAAl05dA8AA/i8BYAO9TgEewABd+MAAwaYAAWADvU4AAEbAAF4QwABeMcAAXiEAAACWUmADvU4AgMAAXizAQKIGPgJOwABeRcAAXlIAAMAAWFlgA71OASbAAF5FARzAAF5ULsAATacBAAGCwABeZMBAol0AwACAHGADvU5JwABedCEcwABehYPAAF54wECid0gBAAErAMAA/fE+AT0cwABe74HAAF7owECiK1YBAAGDwABe88BAoncAwAD+PD9KwABfFAGBwABfG8BAoisGwACAI4FewABfKsAAXz7AAGDXAADAAFhAAAAAAQPAAF9SwABg1wAAAAEBAcAAX2wAAACXUF0DwAD8+QFgA71RAABdA8AA/i8BYAO9UQE+A07AAF+LwABfkgAAl05dA8AA/i8BYAO9UQEewABfmMAAwaYAAWADvVEAAEbAAF+zwABf18AAX8cAAACWUmADvVEAgMAAX9LAQKMsPgJOwABf7sAAX/4AAMAAWFpgA71RASbAAF/uARzAAGAALsAATacBAAGCwABgEMBAo4MAwACAHGADvVFJwABgICEcwABgNIPAAGAkwECjnUgBAAErAMAA/fE+AT0cwABgnoHAAGCXwECjUVYBAAGDwABg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aOXAAGj+wABpbQAAwABNpwFqwABo5mADwAD95AIAAAEDwABpDcAAaW0AAAABAQHAAGkmAAAIgmpgA8AAju4AAGADvTwBPgFKwABpNAEcwABpTBbAAGlEFsAAaTsuwABYXcAAf97AAIAshJTAAH5auEkBAAEWwABpXYDAAGlWwECrQ7hIwACO8ADAAI8TBsAAgDOBXsAAaXLAAGmAwABp9QAAwABYXwAAAAEDwABpkMAAafUAAAABAQHAAGmqAAAIhpFgA8AAjwIAAGADvTEBPgFKwABpuQEcwABp0hbAAGnJFsAAacAuwABYXcAAf97AAIAshIfAAH5cuEkBAAEWwABp5IDAAGncwECrzcAARL7AAI8EAMAAjxMGwACANIFewABp+sAAag3AAGtyAADAAFhgAAAAAQPAAGoiwABrcgAAAAEBAcAAajYAAACpWGADvTYAAGADvTYBPgNJwABqSiXAAGpbgMAAak7AQKxZYAPAAGyiPgE9HsAAanq2HwIAAhTAAGqOwECsWQABYAPAAGyiJ8AAWGIAP07AAGrvwABrAwAAwABYY2ADwACO/QEmwABq7wGAwABrBcBArFlgA8AAjv1KwABrFwEcwABrPhbAAGsnFsAAax4uwABYXcAAf97AAIAsoq3AAH5buEkBAAEWwABrXIHAAGtIwECsrsAARMHAAI7/AMAAjxMGwACANYFewABrd8AAa5HAAGzJAADAAE2uAWrAAGt4YAPAAP3kAgAAAQPAAGuiwABsyQAAAAIBAcAAa7EAAACGFWADwABhQgABwABrxwAAAJfdYAPAAPrRAWrAAGvSYAPAAPrRAGADwABhQgE+AknAAGvgHMAAa+2AwABr5MBArVhIAQABKwDAAP3xPgJJwABr/iGBwABsA8BArWk+AT0wwABsGB/AAGwiwAD8KQEAASfAAFhkAD9KwABsaQErP0rAAGyAASbAAGyAARzAAGyQgMAAbIfAQK1YhFICAAIfwABsm8AAgGUBAAEWwABsri7AAFhewACALwArAMAAYWFgA8AAYUIAAECnPABAqBEAQKndAECqcwBAqwsAQKuhAECsLQBArSAAQK4lAAAACALAAIA4gV7AAGz8wABtAsAAeg4DwABYZQAAAWABwAD95AABXQHAAGOVAmADwABi1l4DAAEBAWADvRYAAVcDwAB/4ABgA70WAgTAAIA6gV7AAG1XwABtaQnAAFhKAGADwAD60QAEwACAPIFewABtnsAAbesYwABYZsAAf94AXQPAAP1tAmADwABjO2ADwABjOwEywABt6WADwABjO2ADwABjOwABBcAAgEqBXsAAbfDAAG3wwABuIAAAAAPAAG3+wABuIAAAAAEAAAHAAG4FAAAEwABYSmADwAD60QFqwABuGWADwAD60QBgA8AAgDgBPwIIAcAAgDqAAMBArxgJAcAAbfDAAP36AAAAAAsGwACAPoFewABuJcAAbjTAAG6iAADAAFhnAAAAAQPAAG5AwABuogAAAAICAsAAblsAAACFfV0DwAD9OwFgA8AAYtYAwABucwAAAMAAWGheAwABAQFgA70WAAFXA8AAf+AAYAO9FgAAXQPAAP07AWADwABi1gFKwABuhwEcwABuhy6HRAIAAoDAAG6RwECvhoHAAG6YwECvnQDAAIBABsAAgD+BXsAAbqfAAG68wABvGgAAmsIBasAAbqhgA8AA/eQCAAABA8AAbsHAAG8aAAAAAgICwABuywAACIKUYAPAAGLWAMAAbuIAACDAAFhoXgMAAQEBYAO9FgABVwPAAH/gAGADvRYAAGADwABi1gE+AUrAAG7zARzAAG7/gMAAbvrAQLAthFICAmADwABi1l4DAAEBAWADvRYAAVcDwAB/4ABgA70WAi6BwABvDMBAsD0AwABi6QbAAIBAgV7AAG8fwABvLsAAb/gAAIdEAAAAAQPAAG83wABv+AAAAAICAsAAb0cAAACFfV0DwAD9OwFgA8AAYtYAwABvXwAAAMAAWGheAwABAQFgA70WAAFXA8AAf+AAYAO9FgAAXQPAAP07AWADwABi1gE+A07AAG9/wABvhAAAg2FdA8AA/TsBYAPAAGLWATHAAG+QYAPAAGLWAEbAAG+YwABvtcAAb6YAAACClGADwABi1gCAwABvrsBAsNk+AT0cwABvwoLAAG+9wECxJVYBAAEcwABvxi6awgIAAoPAAG/MwECxVIHAAG/SwECw8ADAAIA/AMAA/UxKwABv6QGCwABv8MBAsSUGwACAQYFewABv/cAAcBLAAHB1AACGhAFqwABv/mADwAD95AIAAAEDwABwIsAAcHUAAAACAgLAAHAvAAAIgpRgA8AAY1wAwABwRgAAIMAAWGheAwABAQFgA70WAAFXA8AAf+AA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a2ADwACA4gAAYAPAAID8AT8GCAHAAID+gADAQQ1+CADAAID/KwgAwACBACsIAMAAgQErCADAAIECKwkBoDfAAP36AAAAAAXAAIESgWKg26DboZ0AwABYqQADoPahnQAAAAEBAaD8AAAEgmpgA4N9AABgA8AAgPwBPwYIAcAAgP+AAMBBDegIAMAAgP5qoShgA8AAgOLAAVofCADAAIEAKwgAwACBASsIAMAAgQIrCQGg28AA/foAAAAABcAAgROBYqGioaKiYgDAAFiqAAOhvKJiAAAAAQEBocIAAASzy2ADh0UAAGADwACA/AE/BggBwACBAIAAwEEOXAgAwACA/mqh9WADwACA4sABWjkIAMAAgP8rCADAAIEBKwgAwACBAisJAaGiwAD9+gAAAAAFwACBFIFiomeiZ6MrAMAAWKsAA6KDoysAAAABAQGiiQAABIJqYAODfQAAYAPAAID8AT8GCAHAAID/gADAQQ7QCADAAID+aqK1YAPAAIDiwAFaVQgAwACBACsIAMAAgQErCADAAIECKwkBomfAAP36AAAAAAXAAIEVgWKjMKMwo/IAwABYrAADo0uj8gAAAAEBAaNRAAAEs8tgA4dFAABgA8AAgPwBPwYIAcAAgQCAAMBBD0QIAMAAgP5qo4RgA8AAgOLAAVpxCADAAID/KwgAwACBASsIAMAAgQIrCQGjMMAA/foAAAAABcAAgRaBYqP3o/ekyQDAAFilAAOkGqTJAAAAAQEBpCAAAASCamADg30AAGADwACA/AE/BggBwACA/4AAwEEPuAgAwACA/mqkTGADwACA4sABWbcIAMAAgQArCADAAIEBKwgAwACBAisJAaP3wAD9+gAAAAAFwACBF4FipM6kzqWWAMAAWKYAA6TspZYAAAABAQGk8gAABIJqYAODfQAAYAPAAID8AT8GCAHAAID/gADAQRAsCADAAID+aqUeYAPAAIDiwAFZ0QgAwACBACsIAMAAgQErCADAAIECKwkBpM7AAP36AAAAAAXAAIEYgWKlm6WbpmcAwABYpwADpbumZwAAAAEBAaXBAAAEoYFgA4XDAABgA8AAgPwBPwYIAcAAgQGAAMBBEKAIAMAAgP5qpfFgA8AAgOLAAVnrCADAAID/KwgAwACBACsIAMAAgQIrCQGlm8AA/foAAAAABcAAgRmBYqZspmynIwDAAFio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AILigWiGEYYhCcAAU63AAILYAGADwAB6kQAEwACC44Fohj+GTAnAAFNVwACC2ABgA8AAgoUABMAAguSBaIZshoEJvFzAAILYAGADwABwKQAEwACC5YFohqyGwwnAAFNWwACC2ABgA8AAei4ABMAAguaBaIbnhvYJwABTV8AAgtgAYAPAAHsMAATAAILngWiHD4cdCbh4wACC2ABgA8AAbi0ABMAAguiBaIdYh34YwABZaMAAgtgAYAPAAPrRASoBBcAAgwOBaIeDh4OI7gAAAAOHnYjuAAAADAwMh6oAAASyZGADgRQAh78AAASvsmADu4IAh98AAAS0fGADuZEAh/sAAATAAFNUYAPAAHlhAIgQAAAEwABIUmADwABqtwCIKAAABMAAU61gA8AAepEAiEUAAATAAFNVYAPAAIKFAIhfAAAEvFxgA8AAcCkAiIEAAATAAFNWYAPAAHouAIilAAAEwABTV2ADwAB7DACIwQAABLh4YAPAAG4tAIjcAAAEwABZZ2ADu60AAGADwACC2QE/DQgBwACC3YAAwEHMNwgBwACC3oEAwEHMQwgBwACC34IAwEHMTwgBwACC4IMAwEHMWwgBwACC4YQAwEHMawgBwACC4oUAwEHMewgBwACC44YAwEHMiwgBwACC5IcAwEHMmwgBwACC5RQAwEHMqQgACAHAAILmFADAQcy5CQAIAcAAgucUAMBBzMkKAAgBwACC3BQAwEHM1wsACQGHg73EAAAAABcGwACC64FoiPOI+Im1AADAAFlpwACC2AAAAAEDiQ6JtQAAAAICAokpAAAAhCZgA8AATS0AiUAAAACvzGADwAB5TwAAXAE+Aj0ciVWBiU7AQc3GtNcCAAKAiWTAQc24FoltLq+ywACC2MAAgt4AwAB5Xj0ciZUWiYcuwABTVcAAgtjAAILjwABTewEAAYGJqsBBzcYAwACCjgbAAILsgWiJuom/is4AAMAAWWrAAILYAAAAAQOJz4rOAAAAAgICidwAAACZ+mADvSoAifQAAAC1hmADwABNLQAAXAE+Az0cihoWigkuwABTrcAAgtjAAILiwABTnAEAAYCKKsBBzlAAwAB6kz0cikKBijTAQc5cr70BAAEeil/AAGhwAQABHIqJFop1Lq+ywACC2MAAgt6vuAEAAYCKlMBBzlAAu3QAAMAATTA9HIquFoqgLsAA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wEHjakgBAAEWsXQWsWQutHzAAILYwACC35sEuKwAwAD98T4BPRyxhi7AAFlpwACC2AIAAoGxncBB44EWsbUWsawuwABTVMAAgtjAAILgwABTRcAAed0AwACC60mxzSIcsdWAsdHAQeNqSAEAARax6Bax2C60fMAAgtjAAILfmw24tgDAAP3xARyyAYCx/cBB42pIAQABFrIUFrIELrR8wACC2MAAgt+bBrivAMAA/fE+AT0csikuwABZacAAgtgCAAKBskDAQeOBFrJYFrJPLsAAU1TAAILYwACC4MAAU0bAAHneAMAAgutJsnkcsoGAsn3AQeNqSAEAARaylBayhC60fMAAgtjAAILfmwq4sADAAP3xPgE9HLKrLsAAWWnAAILYAgACgbLCwEHjgRay2hay0S7AAFNUwACC2MAAguCbCsAAed8AwACC60my9Ryy/YCy+cBB42pIAQABFrMQFrMALrR8wACC2MAAgt+bD7i4AMAA/fE+AT0csyIuwABZacAAgtgCAAKBsznAQeOBFrNRFrNILsAAU1TAAILYwACC4JsPwAB54ADAAILrSbNnHLNvgLNrwEHjakgBAAEWs4IWs3IutHzAAILYwACC35sOuLcAwAD98T4BPRyzlC7AAFlpwACC2AIAAoGzq8BB44EWs8MWs7ouwABTVMAAgtjAAILgmw7AAHnhAMAAgutJs9kcs+GAs93AQeNqSAEAARaz9Baz5C60fMAAgtjAAILfsdG5DgDAAP3xPgE9HLQPLsAAWWnAAILYAgACgbQmwEHjgRa0Pha0NS7AAFNUwACC2MAAguCx0cAAeeIAwACC60m0XRy0bRa0YS7AAEhSwACC2MAAguHAAEiLAQABgLSFwEHjagDAAGrCPgE9HLSTLsAAWWnAAILYAgACgbSqwEHjgRa0wha0uS7AAFNUwACC2MAAguDAAFNHwAB54wDAAILrSbTkHLTsgLTowEHjakgBAAEWtP8WtO8utHzAAILYwACC37GYuNgAwAD98T4BPRy1GC7AAFlpwACC2AIAAoG1L8BB44EWtUcWtT4uwABTVMAAgtjAAILgsZjAAHnkAMAAgutJtWQctWyAtWjAQeNqSAEAARa1fxa1by60fMAAgtjAAILfsZ243QDAAP3xPgE9HLWYLsAAWWnAAILYAgACgbWvwEHjgRa1xxa1vi7AAFNUwACC2MAAguCxncAAeeUAwACC6z9JteMcteuAtefAQeNqSAEAARa1/ha17i60fMAAgtjAAILfsdC5DQDAAP3xPgE9HLYULsAAWWnAAILYAgACgbYrwEHjgRa2Qxa2Oi7AAFNUwACC2MAAguCx0MAAeeYAwACC6z9JtlwiHLZkgLZgwEHjakgBAAEWtncWtmcutHzAAILYwACC35sGuK8AwAD98QEctpKAto7AQeNqSAEAARa2pRa2lS60fMAAgtjAAILfsbi49wDAAP3xPgE9HLa8LsAAWWrAAILYAgACFrbdFrbNLrR8wACC2MAAgt+xuLj3gbbswEHjgQDAAILsSbcHIiIiIhy3D4C3C8BB42pIAQABFrciFrcSLrR8wACC2MAAgt+bDbi2AMAA/fEBHLc7gLc3wEHjakgBAAEWt04Wtz4utHzAAILYwACC37G5uPgAwAD98QEct2qAt2bAQeNqSAEAARa3fRa3bS60fMAAgtjAAILfsca5BQDAAP3xARy3noC3msBB42pIAQABFrexFrehLrR8wACC2MAAgt+xx7kGAMAA/fEBHLfXgLfTwEHjakgBAAEWt+oWt9outHzAAILYwACC37HIuQcAwAD98T4GPRy4DC7AAFlqwACC2AIAAha4LRa4HS60fMAAgtjAAILfsbm4+IG4O8BB44EAwACC7D0cuFEuwABZasAAgtgCAAIWuHIWuGIutHzAAILYwACC37HFuQSBuIfAQeOBAMAAguw9HLidLsAAWWrAAILYAgACFri+FriuLrR8wACC2MAAgt+xxrkFgbjRwEHjgQDAAILsPRy45y7AAFlqwACC2AIAAha5CBa4+C60fMAAgtjAAILfsce5BoG5IMBB44EAwACC7D0cuTYuwABZasAAgtgCAAIWuVcWuUcutHzAAILYwACC37HIuQeBuXHAQeOBAMAAguw9HLmHLsAAWWnAAILYAgACgbmewEHjgRa5tha5rS7AAFNUwACC2MAAguDAAFNIwAB55wDAAILrSbnPIhy514C508BB42pIAQABFrnqFrnaLrR8wACC2MAAgt+bAritAMAA/fEBHLoCgLn+wEHjakgBAAEWuhUWugUutHzAAILYwACC37G7uPoAwAD98T4FPRy6KS7AAFlqwACC2AIAAha6Sha6Oi60fMAAgtjAAILfsbu4+oG6VsBB44EAwACC7D0cumwuwABZasAAgtgCAAIWuo0Wun0utHzAAILYwACC37HJuQiBuqHAQeOBAMAAguw9HLq3LsAAWWrAAILYAgACFrrYFrrILrR8wACC2MAAgt+xyrkJgbrnwEHjgQDAAILsPRy6/S7AAFlqwACC2AIAAha7Hha7Di60fMAAgtjAAILfscu5CoG7LcBB44EAwACC7D0cu0MuwABZasAAgtgCAAIWu2QWu1QutHzAAILYwACC37G6uPmBu3PAQeOBAMAAguxJu44iHLuWgLuSwEHjakgBAAEWu6kWu5kutHzAAILYwACC35sFuK4AwAD98QEcu8SAu8DAQeNqSAEAARa71xa7xy60fMAAgtjAAILfsby4+wDAAP3xPgI9HLvuLsAAWWrAAILYAgACFrwPFrv/LrR8wACC2MAAgt+xvLj7gbwewEHjgQDAAILsPRy8NC7AAFlqwACC2AIAAha8VRa8RS60fMAAgtjAAILfsbq4+YG8ZMBB44EAwACC7Em8fyIcvIeAvIPAQeNqSAEAARa8mha8ii60fMAAgtjAAILfmwG4qwDAAP3xARy8s4C8r8BB42pIAQABFrzGFry2LrR8wACC2MAAgt+xvrj9AMAA/fE+AT0cvNsuwABZasAAgtgCAAIWvPwWvOwutHzAAILYwACC37G+uP2BvQnAQeOBAMAAguxJvSQiHL0sgL0owEHjakgBAAEWvT8WvS8utHzAAILYwACC35sAuLMAwAD98QEcvViAvVTAQeNqSAEAARa9axa9Wy60fMAAgtjAAILfsb24/ADAAP3xPgE9HL2ALsAAWWrAAILYAgACFr2hFr2RLrR8wACC2MAAgt+xvbj8gb2uwEHjgQDAAILsSb3JIhy90YC9zcBB42pIAQABFr3kFr3ULrR8wACC2MAAgt+bBLisAMAA/fEBHL38gL34wEHjakgBAAEWvg8Wvf8utHzAAILYwACC37G6uPkAwAD98T4GPRy+Ji7AAFlqwACC2AIAAha+Rxa+Ny60fMAAgtjAAILfsbu4+oG+U8BB44EAwACC7D0cvmkuwABZasAAgtgCAAIWvooWvnoutHzAAILYwACC37HJuQiBvp7AQeOBAMAAguw9HL60LsAAWWrAAILYAgACFr7VFr7FLrR8wACC2MAAgt+xyrkJgb7kwEHjgQDAAILsPRy++i7AAFlqwACC2AIAAha/Gxa/Cy60fMAAgtjAAILfscu5CoG/KsBB44EAwACC7D0cv0AuwABZasAAgtgCAAIWv2EWv1EutHzAAILYwACC37G8uPuBv3DAQeOBAMAAguw9HL+GLsAAWWrAAILYAgACFr+nFr+XLrR8wACC2MAAgt+xurj5gb+2wEHjgQDAAILsSb/RHL/ZgL/VwEHjakgBAAEWv+wWv9wutHzAAILYwACC37HCuQEAwAD98T4BPRzAAEANLsAAWWrAAILYAgACFsAAQC4WwABAHi60fMAAgtjAAILfscK5AYHAAEBHwEHjgQDAAILsScAAQGIcwABAaoDAAEBmwEHjakgBAAEWwABAfRbAAEBtLrR8wACC2MAAgt+xv7j+AMAA/fE+AT0cwABAoy7AAFlqwACC2AIAAhbAAEDPFsAAQL8utHzAAILYwACC37G/uP6BwABA7cBB44EAwACC7EnAAEEIHMAAQRCAwABBDMBB42pIAQABFsAAQSMWwABBEy60fMAAgtjAAILfscC4/wDAAP3xPgE9HMAAQUsuwABZasAAgtgCAAIWwABBdxbAAEFnLrR8wACC2MAAgt+xwLj/gcAAQZfAQeOBAMAAguxJwABBshzAAEG6gMAAQbbAQeNqSAEAARbAAEHNFsAAQb0utHzAAILYwACC37HBuQAAwAD98T4BPRzAAEHwLsAAWWrAAILYAgACFsAAQhwWwABCDC60fMAAgtjAAILfscG5AIHAAEI3wEHjgQDAAILsScAAQlIcwABCYhbAAEJWLsAASFLAAILYwACC4cAASIsBAAGAwABCesBB42oAwABqwj4BPRzAAEKZFsAAQoguwABTrcAAgtjAAILiwABTnQEAAYDAAEK+wEHjagDAAHqUScAAQs8cwABC14DAAELTwEHjakgBAAEWwABC6hbAAELaLrR8wACC2MAAgt+x2LkVAMAA/fE+AT0cwABDDy7AAFlpwACC2AIAAoHAAEMmwEHjgRbAAEM+FsAAQzUuwABTVMAAgtjAAILgwABTScAAeegAwACC6z89HMAAQ3YWwABDXi7AAFNWwACC2MAAguWvtgEAAYDAAEOQwEHjagDAAHopSsAAQ5oBgcAAQ6HAQeOBBsAAgv6BaMAAQ7fAAEPPwABEHAAAtTwBasAAQ7hgA8AA/eQCAAABA8AAQ+fAAEQcAAAAAQEBwABD9AAAAJn6YAO9KgAAYAPAAE0eAT4BSsAAQ/8BHMAARAYuwABTZMAAgtgBAAGAwABEFMBB8gsAwACC9AbAAIL/gWjAAEQhwABEOcAARLoAAK+2AWrAAEQiYAPAAP3kAgAAAQPAAERSwABEugAAAAEBAcAARF8AAACZ+mADvSoAAGADwABNHgE+Aj0cwABEeRbAAERqLrh4wACC2MAAguevtgEAASbAAESTAYDAAESTwEHyfmADwABsGADAAG40SsAARJ0BHMAARKQuwABTZMAAgtgBAAGAwABEssBB8n4AwACC9AbAAIMAgWjAAET7wABFB8AASZEAAMAAWW8AAAABA8AARRvAAEmRAAAAAAAAAGADwABNHgE+CkAhHMAARU8WwABFOxbAAEUrLrR8wACC2MAAgt+xhLjCSAEAASsAwAD98cAARSvAAEVWAE7AAEV0wABFggAAtYZgA8AATTUBH8AARYjAAE1JAAAAAD0cwABGXy7AAFlqwACC2AIAAhbAAEaAFsAARnAutHzAAILYwACC37G+uP2AwABGjcBB81oAwACC7D0cwABGoS7AAFlqwACC2AIAAhbAAEbCFsAARrIutHzAAILYwACC37G9uPyAwABGz8BB81oAwACC7EnAAEbjFsAARvAWwABG5y6yZMAAgtjAAILdgq2BND4CPRzAAEd8LsAAWWnAAILYAgACgMAAR5PAQfNaFsAAR6sWwABHoi7AAFNUwACC2MAAguCyAMAAeasAwACC6z0cwABHxC7AAFlpwACC2AIAAoDAAEfbwEHzWhbAAEfzFsAAR+ouwABTVMAAgtjAAILgsgLAAHmqAMAAgus/ScAASBcWwABIJBbAAEgbLrJkwACC2MAAgt2Ct4FVPgE9HMAASEsuwABZacAAgtgCAAKAwABIYsBB81oWwABIehbAAEhxLsAAU1TAAILYwACC4LHswAB56QDAAILrP0nAAEiTFsAASKAWwABIly6yZMAAgtjAAILdgriBVj4BPRzAAEi6LsAAWWnAAILYAgACgMAASNHAQfNaFsAASOkWwABI4C7AAFNUwACC2MAAguDAAFNQwAB58gDAAILrPz0cwABJAi7AAFlpwACC2AIAAoDAAEkZwEHzWhbAAEkxFsAASSguwABTVMAAgtjAAILgsy/AAHnqAMAAgus9HMAASUkuwABZ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AMAA/Q89i8AASf/AQsLYHMAASjocwABKL4PAAEoYwELC2ICrAQFgA8AAYtYBFMAASjPAQseeCgAAwAD9BICtAAAAAMAA/Q89jsAASkrAQsSvHMAASn8cwABKdIbAAEpgwELEr4CrAQFgA8AAYtYBFMAASnjAQseeCgAAwAD9BICtAAAAAMAA/Q9FwABKjwHAAEqYwABKngAAJ2ADwAD8lwGTARzAAEqpFMAASqPAQskLCwBjAQABFsAASrkUwABKq8BCxkcIAGHAAP1rAMAA/cUBFcAASsHAQskLCxzAAErGFMAASsHAQskLCwBkAQABlADAAP29PgE9F8AASukcwABK4RTAAErUwELGRwgASwEAARTAAEriwELJCwsAAMAA/UqFfxzAAEsCFMAASv3AQseeCgAgAQABHMAASwMuwABMswEAARbAAEsqHMAASyIWwABLFIDAAEsPwELCHITFhLNLAQABFMAASyPAQskLCwAAwAD9SoV/iYcAwACEmAAAwABjRT4BPRXAAEtOwELGRwhqwABLXl0DwAD9OwFgA8AAYzvAASFSSsAAS4kBH8AAS5TAAGOBBgAGgcAAS6HAQsI1gsAAS63AQsKxg8AAS73AQsLYhcAAS93AQsSIhsAAS+7AQsSvFMAATAPAQsZHCAAABsAAhJ2BbcAATBrAAEwowABNQAAAwABXbQAAAAEDwABMPMAATUAAAAAEAgLAAExOAAAApZFgA7YxAMAATGwAAACGFWADwABOJAACwABMggAAAMAATYxgA8AA+tEBasAATJNgA8AA+tF3wABMngAAAL0qYAPAAPrRAWrAAEyqYAPAAPrRd2ADwABhQgE+AUrAAEy3ARzAAEzTFsAATL4uwABXHcAAhDDAAIQ+wABXbsAAhDAEAAKAwABM5cBCypqBwABM8MBCyqgCwABXb4LAAE0UwELKub0qg8AATTHAQsrXwACFGgbAAISegW3AAE1FwABNWsAATfYAAMAARuMBasAATUZgA8AA/eQCAAABA8AATWjAAE32AAAAAgICwABNcgAAAIKUYAPAAGLWAMAATYYAAACCV2ADwABi/QAAYAPAAGLWAT4BSsAATZUBHMAATaGAwABNnMBCy4u+ZgIAAhbAAE24gcAATbDAQsubhSzAAGMAFsAATeQcwABNxy6zdgEAASbAAE3bARbAAE3bgcAA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wABaACrAAIStA4QkhMAArIHAQyIGhCIWwACspRTAAKygwEMhOgABYAOEEoQihCizaYbAAKzWwEMjJsAAhNM+AT0wwACtRh7AAK1Mth8CAAJqwACtYGADtjHAAMYPJMAArZ4DJ8AAWheAwACtl8BDITongWoASsAArasBHMAArboWwACtsi6ElMAAhEvAAEytAgJgA8AAjvdgA8AAqBoChcAArfLAQyIsH8AArgPAAKgtAgACgMAArhjAQyE6gcAArh7AQyGJAADAAI8sBsAAhL+BbcAArjXAAK5EwACvEgAAwABXSQAAAAEDwACuVcAArxIAAAABAQHAAK5jAAAAg/NgA4QSAABgA71RAT4BSsAArt4BNQAAAAEAYAPAAI70ARzAAK7uFsAAruUuwABXJMAAhFRLAQABgMAAru/AQyTcAMAA/YEjHMAArvWBAMBDJPlIAQABKwAAHMAArvguwABaGMAAhDABAAGAwACvCcBDJNwAwACEg4EAwEMk+QFgA71RBsAAhIOBbcAArxfAAK8mwAC3IgAAwABaGMAAhDAAAAABA8AArzbAALciAAAAAQEBwACvRAAAAIPzYAOEEgAAYAO9UQE+D0AhFsAAr2EuwABXP8AAhE7AAK9gwACvbAEkAAYnwABaAy4nwABaBCfAAFoZgMAAr8HAQyWXJ4FqTsAAr90AAACCbmADvVEATsAAr/kAAACESGADvRsATsAAsBIAAACFCmADvSoAScAAsCYhHMAAsD4WwACwL4DAALAqwEMll4UKg4VIAQABKwDAAP3xPgI9i8AAsE/AQyYEHMAAsGAuwABXVAEAARbAALB2gMAAsHHAQyWXhQqDhQDAAIS7PYrAALCNwEMl9RbAALCmg8AAsJfAQyYEhEi9LD4BPYrAALDCwEMl9RzAALDMLsAAV0sBAAEWwACw5IDAALDfwEMll4Syg4YAwACEuk7AALEGwACxCwAAgL1gA8AAaO8BHMAAsQ0umUkBAAEWwACxGoDAALEVwEMll4C9g4EAwACEq07AALEqwACxMwAAhB5gA8AA+tEBFsAAsTqAwACxNcBDJZeEHoQlTsAAsU3AALFYAACEJGADwAD60QEWwACxX4DAALFawEMll4QkhCdOwACxw8AAsc4AAIQfYAPAAPrRASIWwACx1YDAALHQwEMll4QfhCYAIRbAALHpgMAA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swEAARbAANMfgMAA0xnAQ0MGgpSDngDAAISYSsAA0yoBHMAA00cWwADTMS7AAFohwACEZMAASqsFAASEwADTXsBDQ2yBwADTbMBDQxSCwADTgMBDQy0cwADTlC7AAFeLAQAAAcAAV4wqwACEsQHAAEqpg8AA08rAQ0NHwABnbgbAAITMgW3AANQTwADULsAA1M4AAMAATHkBasAA1BRgA8AA/eQCAAABA8AA1EzAANTOAAAAAQEBwADUVgAAAISbYAODnAAAYAPAAGc7AT4CTsAA1GzAANRxAACClGADwABi1gEcwADUcy7AAEyzAQABFsAA1IWAwADUf8BDRD+ClIOeAMAAhJhKwADUkAEcwADUrRbAANSXLsAAWiHAAIRkwABKrAEAAYHAANTFwENEWADAAGdvBsAAhM2BbcAA1QfAANUiwADXiwAAwABMdgFqwADVCGADwAD95AIAAAEDwADVPMAA14sAAAAEAwPAANVHAAAAgmpgA4N9AMAA1WYAAADAAEqmXQPAAPz5AWADwAD+fgDAANWLAAAAwABKp10DwAD8+QFgA8AA/n4AAcAA1asAAADAAEqpYAPAAPrRAWoAYAPAAP2heWADwABnOwE+A07AANXIAAAAgpRgA8AAYtYAScAA1dIlwADV3YDAANXWwENE9WADhBI+AT2MwADV9sBDRVscwADV/S6zegEAARbAANYUFMAA1g3AQ0T1AAFgA4QSgm6EFwDAAIScScAA1iolwADWNYDAANYuwENE9WADg88+AT2MwADWUMBDRVscwADWVy6zegEAARbAANZuFMAA1mfAQ0T1AAFgA4PPgm6D0wDAAIScPgE9HsAA1oy2HwIAAmrAANaVYAO2McAAxmkkwADW0QMnwABaJoDAANbJwENE9SeBagBKwADW3gEcwADW+xbAANblLsAAWiHAAIRkwABKrQUABCbAANcPAYTAANcPwENFW2ADwABjaYHAANcVwENFA4LAANcxwENFHBzAANdFLsAAV4sBAAABwABXjCrAAISxAcAASqmDwADXe8BDRTbAAGdwBsAAhM6BbcAA15DAANefwADX/QAAwABaBgAAAAEDwADXrMAA1/0AAAACAgLAANe0AAAAgL1gA8AA/n4AwADXvgAAAKVuYAPAAP7/AABgA8AAjuIBPgFKwADX0gEfwADX3cAAbBcCAAKAwADX5sBDRs+BwADX7MBDRt8ABsAAhM+BbcAA2ALAANgPwADYmgAAwABaCQAAAAEDwADYGsAA2JoAAAADAgLAANgpAAAAhEhgA70bAMAA2DkAAACAvWADwAD+fgABwADYSwAAAIQfYAPAAPrRAWoAYAPAAP2heWADwACO6AE+AUrAANheAR/AANhpwABsIgMAAibAANhwAYDAANhwwENHSmADwABsEIHAANh5wENHWAGEH4LAANiLwENHaQbAAITQgW3AANifwADYrsAA2QwAAMAAWgwAAAABA8AA2LvAANkMAAAAAgICwADYygAAAIRIYAO9GwDAANjaAAAAgL1gA8AA/n4AAGADwACPAgE+AUrAANjmAR/AANjxwABsKgIAAibAANj6AYDAANj6wENH82ADwABsEIHAANkDwENIAQAGwACE0YFtwADZEcAA2STAANmuAADAAFc+AAAAAQPAANk2wADZrgAAAAMDA8AA2UUAAAC1FGADvRYAwADZXQAAAIC9YAPAAP5+AMAA2WcAAAAnYAPAAPyXAABgA702AT4BSsAA2XQBH8AA2X/AAGyWAwADgMAA2Y3AQ0h4gcAA2Z7AQ0iGgsAA2aTAQ0iWAAbAAITSgW3AANmzwADZxsAA2uQAAMAAWhQAAAABA8AA2eHAANrkAAAABQMDwADZ7gAAAIUKYAO9KgDAANoJAAAAgL1gA8AAaO8AwADaIgAAALUXYAO9eAACwADaQgAAAIQkYAPAAPrRAWoAYAPAAP2hecAA2lMAAACEImADwAD60QFqAGADwAD9oXlgA8AAjvcBPgFKwADaYwEfwADabsAAbF8FAAMmwADahQGAwADahcBDSQdgA8AAbBiBwADalcBDSRWCwADam8BDSSUChCSDwADaw8BDSTSEIoTAANrYwENJTQbAAITTgW3AANrpwADa/MAA3IMAAMAAWhYAAAABA8AA2xTAANyDAAAABgMDwADbIQAAAIUKYAO9KgDAANs8AAAAgL1gA8AAaO8AwADbVQAAALUXYAO9eAADwADbdQAAAIQkYAPAAPrRAWoAYAPAAP2hecAA24YAAACEImADwAD60QFqAGADwAD9oXnAANuUAAAAs2lgA8AA+tEBagBgA8AA/aF5YAPAAI73AT4BSsAA27kBH8AA28TAAGxnBgADJsAA29gBgMAA29jAQ0nrYAPA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wAD95AIAAAEDwABHjcAASAsAAAADAwPAAEepAAAAlqRgA8AAqwUAwABHuwAAAJ7xYAPAAEXnAMAAR9IAAACXhGADwABF5wAAXAE+AT0cwABH54DAAEfjwEQTC8AAWpsCAAImwABH8wGBwABH88BEExtgA8AARuQmwABH/QGCwABH/cBEEytgA8AAR9sAwACrGAAARBAyAEQRcgBEEccARBLTAEQThQAAAAQCwACGjIF0wABIEMAASBbAAExHA8AAWpwAAAFgAcAAhngAAAABBcAAhpOBdMAASFDAAEhWwABIaQEAAAPAAEhnwABIaQAAAAAAAABgA8AAhowBPwEJAcAASFbAAIaDAAAAAAQGwACGjoF0wABIbsAASJrAAEjNAACc/QFqwABIb2ADwAD95AIAAAEDwABIo8AASM0AAAAAAAAAYAPAAGmYAT4BSsAASKwBasAASMNgA8AAai/AAPl4BsAAho+BdMAASNLAAEjswABKdgAAwABahAFqwABI02ADwAD95AIAAAEDwABJBcAASnYAAAADAwPAAEkTAAAAuUZgA8AARecAwABJQQAAALc0YAPAAEG4AMAASVcAAAClImADwABNnAAAYAO+UQE+A07AAEl3wABJfAAAhcVgA8AARecBHMAASZAWwABJioDAAEl+wEQUjoJVwABF7UsBAAGUAMAA/UpJwABJmRbAAEnSHMAASaKDwABJncBEFMe11AEAARbAAEm9gsAASbHARBSusSrAAE2lAMAARkm0rb4/PgFKwABJ7AEWwABKExbAAEn/gsAASfPARBSusSrAAE2lhfW+Yz9KwABKKQEdwABKNsAAWoQDAAMmwABKUAGAwABKUMBEFI5gA8AARuSBwABKXcBEFJ6CwABKZsBEFK4AwACGegbAAIaQgXTAAEp7wABKlMAAS5oAAMAAWpYBasAASnxgA8AA/eQCAAABA8AASqXAAEuaAAAAAwMDwABKtQAAALlGYAPAAEbkAMAASuMAAAC3NGADwABBuADAAEr5AAAApSJgA8AATZwAAGADwABF5wE+AUrAAEsMAR/AAEsXwABH7AQABBzAAEsxFsAASyuAwABLH8BEFdOCVcAARe1LAQABlADAAP1KHMAAS0gWwABLQoDAAEs2wEQV04JVwABF7UsBAAGVAMAA/UoWwABLYYDAAEtVwEQV06U0wABG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AFUJgMAAVP3ARBlDufYBAAGCwABVGcBEGWMAwABG8wAAPgFKwABVMAEfwABVO8AASBAEAAQcwABVYxbAAFVdgMAAVVHARBlDglXAAEXtSwEAAZQAwAD9ShzAAFWEFsAAVX6AwABVcsBEGUOCVcAARe1LAQABlQDAAP1KFsAAVZ+AwABVk8BEGUOlNMAARuccwABVsy7AAFqEAwADgMAAVc3ARBlDgcAAVdrARBlTgsAAVePARBljAMAAhpYAP0rAAFe1ASsGwACGmYF0wABXycAAV9rAAFhvAADAAFqTAWrAAFfKYAPAAP3kAgAAAQPAAFfuwABYbwAAAAMDA8AAWAoAAACWpGADwACrBQDAAFgcAAAAnvFgA8AARecAwABYMwAAAJeEYAPAAEXnAABcAT4BPRzAAFhIgMAAWETARB59wABaogIAAibAAFhXAYHAAFhXwEQejWADwABG5CbAAFhhAYLAAFhhwEQenWADwABICADAAKsaAABEF8UARBi2AEQZCwBEHkUARB73AAAABALAAIacgXTAAFh0wABYesAAXKsDwABaowAAAWABwACGeAAAAAEFwACGo4F0wABYt8AAWL3AAFjTAQAAA8AAWNHAAFjTAAAAAAAAAGADwACGnAE/AQkBwABYvcAAhoMAAAAABAbAAIaegXTAAFjYwABY8sAAWkIAAMAAWoQBasAAWNlgA8AA/eQCAAABA8AAWQvAAFpCAAAAAwMDwABZGwAAALlGYAPAAEbkAMAAWUkAAAC3NGADwABBuADAAFlfAAAApSJgA8AATZwAAGADvlEBPgJJwABZchzAAFl2LsAAWpgCAAKAwABZkMBEH6uCwABZncBEH8sAwACGfj4BSsAAWbMBFsAAWdoWwABZxoLAAFm6wEQfy7EqwABNpbWnvm8/SsAAWfUBHcAAWgLAAFqEAwADgMAAWhzARB+rgcAAWinARB+7gsAAWjLARB/LAMAAhnoGwACGn4F0wABaR8AAWnPAAFqpAACc/QFqwABaSGADwAD95AIAAAEDwABafMAAWqkAAAAAAAAAYAPAAGmYAT4BSsAAWoUBasAAWpxgA8AAahzAAPm3BsAAhqCBdMAAWq7AAFrHwABb+wAAwABalgFqwABar2ADwAD95AIAAAEDwABa2MAAW/sAAAADAwPAAFroAAAAuUZgA8AARuQAwABb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g0HAAINGAACFxWADwABF5wEcwACDWhbAAINUgMAAg0jAREA9glXAAEXtSwEAAZQAwAD9Sk7AAINwwACDdgAAhcdgA8AARecBHMAAg4oWwACDhIDAAIN4wERAPYJVwABF7UsBAAGVAMAA/UpJwACDkxbAAIPGHMAAg5yGwACDl8BEQKa10wEAARbAAIOxhMAAg6XAREB7sSrAAE2lAMAARki0rb4/PgNJwACD4CIcwACD5C7AAFqwAQABh8AAg/fAREDdAMAAhsIAHMAAhAEuwABGVgIAAobAAIQMwERApoTAAIQSwERAewDAAIbEPgNOwACEN8AAhEEAAJeEYAPAAEXnARzAAIRPLsAAWpYDAAOAwACEYcBEQD2CwACEbsBEQF2EwACEd8BEQHsAwACG00nAAISNIRzAAISVhcAAhJHARECLSAEAASsAwAD98T4BPRzAAISqLsAAWpMDAAOFwACEv8BEQIuAwACExMBEQD0UwACE0cBEQZgIAADAAIbVP0rAAITvARTAAIT2wERBmAgAPz0cwACFsC66bgEAAYDAAIXEwERAPQDAAIZQScAAhdgiHMAAhdwuwABGVgIAAofAAIXnwERA3YTAAIXuwERAewDAAIbEABzAAIX+LsAARlYCAAKGwACGCcBEQKaEwACGD8BEQHsAwACGxD4CPRfAAIYzgMAAhifAREA9pTQcwACGPi7AAFqGAwADJ8AAWrYWwACGhYDAAIZ5wERAPaU0wABG54PAAIaPwERAbQDAAIZRwABG50nAAIaoIRzAAIawhcAAhqzARECLSAEAASsAwAD98T4BPRzAAIbFLsAAWpMDAAOFwACG2sBEQIuAwACG38BEQD0rAMAAhtU/ScAAhwoiHMAAhw4uwABGVgIAAobAAIcZwERApoTAAIcfwERAewDAAIbEABbAAIdpHMAAhz+HwACHOcBEQN210wEAARbAAIdUhMAAh0jAREB7sSrAAE2lAMAARki0rb4/PgI9F8AAh5GAwACHhcBEQD2lNBzAAIecLsAAWoYDAAMnwABatxbAAIfngMAAh9vAREA9pTTAAEbng8AAh/HAREBtAMAAhlHAAEbnScAAiAohHMAAiBKFwACIDsBEQItIAQABKwDAAP3xPgE9HMAAiCcuwABakwMAA4XAAIg8wERAi4DAAIhBwERAPSsAwACG1T9JwACIbBzAAIhwLsAARlYCAAKHwACIe8BEQN2EwACIgsBEQHsAwACGxD4CPRfAAIimgMAAiJrAREA9pTQcwACIsS7AAFqGAwADJ8AAWrgWwACI+YDAAIjtwERAPaU0wABG54PAAIkDwERAbQDAAIZRwABG50nAAIkcIRzAAIkkhcAAiSDARECLSAEAASsAwAD98T4BPRzAAIk5LsAAWpMDAAOFwACJTsBEQIuAwACJU8BEQD0rAMAAhtU/Pz9KwACJgwErBsAAhtOBdMAAiZfAAImwwACK5QAAwABalgFqwACJmGADwAD95AIAAAEDwACJwcAAiuUAAAADAwPAAInRAAAAuUZgA8AARuQAwACJ/wAAALc0YAPAAEG4AMAAihUAAAClImADwABNnAAAYAPAAEXnAT4BSsAAiigBH8AAijPAAEgvBAAEHMAAiloWwACKVIDAAIpIwERFJIJVwABF7UsBAAGUAMAA/UocwACKeRbAAIpzgMAAimfAREUkglXAAEXtSwEAAZUAwAD9ShbAAIqSgMAAiobAREUkpTTAAEbnHMAAiqQuwABahAMAA4DAAIq+wERFJIHAAIrLwERFNILAAIrUwERFRADAAIbRAAbAAIbUgXTAAIrqwACLFsAAi00AAJz9AWrAAIrrYAPAAP3kAgAAAQPAAIsfwACLTQAAAAAAAABgA8AAaZgBPgFKwACLKAFqwACLP2ADwABp2cAA+dUGwACG1YF0wACLUsAAi2PAAIv8AADAAFqTAWrAAItTYAPAAP3kAgAAAQPAAIt3wACL/AAAAAMDA8AAi5MAAACWpGADwACrBQDAAIulAAAAnvFgA8AARecAwACLvAAAAJeEYAPAAEXnAABcAT4BPRzAAIvRgMAAi83AREaFwABauQIAAibAAIvkAYHAAIvkwERGlWADwABG5CbAAIvuAYLAAIvuwERGpWADwABIJwDAAKsgAABEPtUAREAFAERE7ABERfgAREZNAERG/wAAAAUCwACG2IF0wACMAcAAjAfAAJDRA8AAWroAAAFgAcAAhr8AAAABBcAAht+BdMAAjDvAAIxBwACMUwEAAAPAAIxRwACMUwAAAAAAAABgA8AAhtgBPwEJAcAAjEHAAIbGAAAAAAQGwACG2oF0wACMWMAAjITAAIy2AACc/QFqwACMWWADwAD95AIAAAEDwACMjcAAjLYA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wACVEcBETiClNMAARuccwACVLy7AAFqEAwADgMAAlUnARE4ggcAAlVbARE4wgsAAlV/ARE5AAMAAhuMABsAAhuWBdMAAlXXAAJWGwACWGwAAwABakwFqwACVdmADwAD95AIAAAEDwACVmsAAlhsAAAADAwPAAJW2AAAAlqRgA8AAqwUAwACVyAAAAJ7xYAPAAEXnAMAAld8AAACXhGADwABF5wAAXAE+AT0cwACV9IDAAJXwwERPLMAAWr0CAAImwACWAwGBwACWA8BETzxgA8AARuQmwACWDQGCwACWDcBET0xgA8AASDkAwACrIgAAREu1AERMCgBETegARE70AERPpgAAAAQCwACG6IF0wACWIMAAlibAAJr1A8AAWr4AAAFgAcAAhr8AAAABBcAAhu+BdMAAllvAAJZhwACWdAEAAAPAAJZywACWdAAAAAAAAABgA8AAhugBPwEJAcAAlmHAAIbGAAAAAAQGwACG6oF0wACWecAAlqXAAJbYAACc/QFqwACWemADwAD95AIAAAEDwACWrsAAltgAAAAAAAAAYAPAAGmYAT4BSsAAlrcBasAAls5gA8AAacnAAPoCBsAAhuuBdMAAlt3AAJb3wACY+QAAwABahAFqwACW3mADwAD95AIAAAEDwACXEMAAmPkAAAADAwPAAJcgAAAAuUZgA8AARuQAwACXTgAAALc0YAPAAEG4AMAAl2QAAAClImADwABNnAAAYAO+UQE+BE7AAJeEwACXiQAAhcVgA8AARecBHMAAl50WwACXl4DAAJeLwERQr4JVwABF7UsBAAGUAMAA/UpOwACXs8AAl7kAAIXHYAPAAEXnARzAAJfNFsAAl8eAwACXu8BEUK+CVcAARe1LAQABlQDAAP1KScAAl9YiFsAAmAkcwACX34PAAJfawERQ6LXPAQABFsAAl/SCwACX6MBEUM+xKsAATaUAwABGRLStvj8AFsAAmFUcwACYK4TAAJglwERRH7XPAQABFsAAmECCwACYNMBEUM+xKsAATaUAwABGRLStvj8+AUrAAJhvARbAAJiWFsAAmIKCwACYdsBEUM+xKsAATaW1pb5tP0rAAJisAR3AAJi5wABahAMAA4DAAJjTwERQr4HAAJjgwERQv4LAAJjpwERQzwDAAIbBBsAAhuyBdMAAmP7AAJkXwACaSAAAwABalgFqwACY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ImADwABNnADAAKHgAAAAlqRgA8AAqwUAAGADwABF5wE+CE7AAKH4wACh/QAAhcVgA8AARecBHMAAohEWwACiC4DAAKH/wERY/oJVwABF7UsBAAGUAMAA/UpOwACiJ8AAoi0AAIXHYAPAAEXnARzAAKJBFsAAojuAwACiL8BEWP6CVcAARe1LAQABlQDAAP1KTsAAoljAAKJoAAC56WADvlEBFsAAom+GwACiasBEWWe56cAARidJwACihCIcwACijofAAKKIwERZnroKAAAAAMAARmQBFsAAovwcwACivIbAAKKqwERZZ7XbAQABFsAAotqEwACizsBEWTyxKsAATaUAwABGULStvj8+A07AAKMjwACjLQAAl4RgA8AARecBHMAAoy8uwABalgIAAoDAAKNBwERY/oTAAKNOwERZPADAAIb8ScAAo2IhHMAAo2qFwACjZsBEWUxIAQABKwDAAP3xPgE9HMAAo30uwABakwMAA4XAAKOSwERZTIDAAKOXwERY/hTAAKOkwERaUQkAAMAAhv0/SsAAo74BFMAAo8XARFpRCQA/ScAAo9ocwACj6oTAAKPewERZPLa8AgACFsAApBOAwACkB8BEWP6lNMAARucUwACkHcBEWdUIAADAAE2/PgFKwACkNwErP07AAKRlwACkbQAAvvpdA8AA/PkBYAO9PAEcwACkg4TAAKR3wERZPLTbAgACFsAApJ2AwACkkcBEWP6lNMAARucUwACkp8BEWdUIAADAAE3BScAApYEcwACllhTAAKWFwERbMgkAlmIBAAEWwACltxbAAKWohMAApZzARFk8s7fAAE2ksk+5pADAAP0MPgNOwACl7sAApfgAAJeEYAPAAEXnARzAAKX6LsAAWpYCAAKAwACmDMBEWP6EwACmGcBEWTwAwACG/EnAAKYtIRzAAKY1hcAApjHARFlMSAEAASsAwAD98T4BPRzAAKZILsAAWpMDAAOFwACmXcBEWUyAwACmYsBEWP4UwACmb8BEW8AKAADAAIb9P0rAAKaJARTAAKaQwERbwAoAP0rAAKalASsGwACG+4F0wACmucAApuXAAKcXAACc/QFqwACmumADwAD95AIAAAEDwACm7sAApxcAAAAAAAAAYAPAAGmYAT4BSsAApvcBasAApw5gA8AAamzAAQTCBsAAhvyBdMAApxzAAKc1wACoGAAAwABalgFqwACnHWADwAD95AIAAAEDwACnRsAAqBgAAAACAgLAAKddAAAAuUZgA8AARuQAwACndwAAAKUiYAPAAE2cAABgA8AARecBPgFKwACnigEfwACnlcAASREEAAQcwACnsRbAAKergMAAp5/ARFzuglXAAEXtSwEAAZQAwAD9ShzAAKfIFsAAp8KAwACntsBEXO6CVcAARe1LAQABlQDAAP1KFsAAp+GAwACn1cBEXO6lNMAARucWwACoCxbAAKf3gcAAp+vARFz+sSrAAE2lhbW+YQAGwACG/YF0wACoHcAAqC7AAKjDAADAAFqTAWrAAKgeYAPAAP3kAgAAAQPAAKhCwACowwAAAAMDA8AAqF4AAACWpGADwACrBQDAAKhwAAAAnvFgA8AARecAwACohwAAAJeEYAPAAEXnAABcAT4BPRzAAKicgMAAqJjARF3awABawgIAAibAAKirAYHAAKirwERd6mADwABG5CbAAKi1AYLAAKi1wERd+mADwABJBwDAAKskAABEWMYARFxhAERctgBEXaIARF5UAAAABALAAIcAgXTAAKjIwACozsAAqyEDwABawwAAAWABwACG8AAAAAEFwACHBoF0wACpAMAAqQbAAKkXAQAAA8AAqRXAAKkXAAAAAAAAAGADwACHAAE/AQkBwACpBsAAhvcAAAAAAwbAAIcCgXTAAKkcwACpSMAAqXkAAJz9AWrAAKkdYAPAAP3kAgAAAQPAAKlRwACpeQAAAAAAAABgA8AAaZgBPgFKwACpWgFqwACpcWADwABqSMAA+nkGwACHA4F0wACpfsAAqZfAAKp2AADAAFqWAWrAAKl/YAPAAP3kAgAAAQPAAKmowACqdgAAAAICAsAAqb8AAAC5RmADwABG5ADAAKnZAAAApSJgA8AATZwAAGADwABF5wE+AUrAAKnsAR/AAKn3wABJLAQABBzAAKoPFsAAqgmAwACp/cBEX12CVcAARe1LAQABlADAAP1KHMAAqiYWwACqIIDAAKoUwERfXYJVwABF7UsBAAGVAMAA/UoWwACqP4DAAKozwERfXaU0wABG5xbAAKppFsAAqlWBwACqScBEX22xKsAATaWFtb5hAAbAAIcEgXTAAKp7wACqjMAAqx8AAMAAWpMBasAAqnxgA8AA/eQCAAABA8AAqqDAAKsfAAAAAwMDwACqvAAAAJakYAPAAKsFAMAAqs4AAACe8WADwABF5wDAAKrlAAAAl4RgA8AARecAAFwBPgE9HMAAqvqAwACq9sBEYEnAAFrEAgACJsAAqwcBgcAAqwfARGBZYAPAAEbkJsAAqxEBgsAAqxHARGBpYAPAAEkkAMAAqyUAAERe0ABEXyUARGARAERgwwAAAAMCwACHB4F0wACrJMAAqyrAAK2MA8AAWsUAAAFgAcAAhvAAAAABBcAAhw2BdMAAq1/AAKtlwACreQEAAAPAAKt3wACreQAAAAAAAABgA8AAhwcBPwEJAcAAq2XAAIb3AAAAAAMGwACHCYF0wACrfsAAq6rAAKveAACc/QFqwACrf2ADwAD95AIAAAEDwACrs8AAq94AAAAAAAAAYAPAAGmYAT4BSsAAq7wBasAAq9NgA8AAalrAAPpbBsAAhwqBdMAAq+PAAKv8wACs3gAAwABalgFqwACr5GADwAD95AIAAAEDwACsDcAArN4AAAACAgLAAKwkAAAAuUZgA8AARuQAwACsPgAAAKUiYAPAAE2cAABgA8AARecBPgFKwACsUQEfwACsXMAASRoEAAQcwACsdxbAAKxxgMAArGXARGHIglXAAEXtSwEAAZQAwAD9ShzAAKyOFsAArIiAwACsfMBEYciCVcAARe1LAQABlQDAAP1KFsAArKeAwACsm8BEYcilNMAARucWwACs0RbAAKy9gcAArLHARGHYsSrAAE2lhbW+YQAGwACHC4F0wACs48AArPTAAK2KAADAAFqTAWrAAKzkYAPAAP3kAgAAAQPAAK0IwACtigAAAAMDA8AArSQAAACWpGADwACrBQDAAK02AAAAnvFgA8AARecAwACtTQAAAJeEYAPAAEXnAABcAT4BPRzAAK1igMAArV7ARGK0wABaxgIAAibAAK1yAYHAAK1ywERixGADwABG5CbAAK18AYLAAK18wERi1GADwABJEgDAAKsmAABEYTsARGGQAERifABEYy4AAAADAsAAhw6BdMAArY/AAK2VwACwEAPAAFrHAAABYAHAAIbwAAAAAQXAAIcUgXTAAK3PwACt1cAAre4BAAADwACt7MAAre4AAAAAAAAAYAPAAIcOAT8BCQHAAK3VwACG9wAAAAADBsAAhxCBdMAArfPAAK4fwACuWAAAnP0BasAArfRgA8AA/eQCAAABA8AArijAAK5YAAAAAAAAAGADwABpmAE+AUrAAK4xAWrAAK5IYAPAAGpjwAD6agbAAIcRgXTAAK5dwACudsAAr10AAMAAWpYBasAArl5gA8AA/eQCAAABA8AArofAAK9dAAAAAgICwACungAAALlGYAPAAEbkAMAArrgAAAClImADwABNnAAAYAPAAEXnAT4BSsAArssBH8AArtbAAEkjBAAEHMAArvYWwACu8IDAAK7kwERkM4JVwABF7UsBAAGUAMAA/UocwACvDRbAAK8HgMAArvvARGQzglXAAEXtSwEAAZUAwAD9ShbAAK8mgMAArxrARGQzpTTAAEbnFsAAr1AWwACvPIHAAK8wwERkQ7EqwABNpYW1vmEABsAAhxKBdMAAr2LAAK9zwACwDgAAwABakwFqwACvY2ADwAD95AIAAAEDwACvh8AAsA4AAAADAwPAAK+jAAAAlqRgA8AAqwUAwACvtQAAAJ7xYAPAAEXnAMAAr8wAAACXhGADwABF5wAAXAE+AT0cwACv4YDAAK/dwERlH8AAWsgCAAImwACv9gGBwACv9sBEZS9gA8AARuQmwACwAAGCwACwAMBEZT9gA8AASRsAwACrKAAARGOmAERj+wBEZOcARGWZAAAAAwLAAIcVgXTAALATwACwGcAAsoUDwABayQAAAWABwACG8AAAAAEFwACHG4F0wACwUMAAsFbAALBsAQAAA8AAsGrAALBsAAAAAAAAAGADwACHFQE/AQkBwACwVsAAhvcAAAAAAwbAAIcXgXTAALBxwACwncAAsNMAAJz9AWrAALByYAPAAP3kAgAAAQPAALCmwACw0wAAAAAAAABgA8AAaZgBPgFKwACwrwFqwACwxmADwABqUcAA+ogGwACHGIF0wACw2MAAsPHAALHVAADAAFqWAWrAALDZYAPAAP3kAgAAAQPAALECwACx1QAAAAICAsAAsRkAAAC5RmADwABG5ADAALEzAAAApSJgA8AATZwAAGADwABF5wE+AUrAALFGAR/AALFRwABJNQQABBzAALFuFsAAsWiAwACxXMBEZp6CVcAARe1LAQABlADAAP1KHMAAsYUWwACxf4DAALFzwERmnoJVwABF7UsBAAGVAMAA/UoWwACxnoDAALGSwERmnqU0wABG5xbAALHIFsAAsbSBwACxqMBEZq6xKsAATaWFtb5hAAbAAIcZgXTAALHawACx68AAsoMAAMAAWpMBasAAsdtgA8AA/eQCAAABA8AAsf/AALKDAAAAAwMDwACyGwAAAJakYAPAAKsFAMAAsi0AAACe8WADwABF5wDAALJEAAAAl4RgA8AARecAAFwBPgE9HMAAslmAwACyVcBEZ4rAAFrKAgACJsAAsmsBgcAAsmvARGeaYAPAAEbkJsAAsnUBgsAAsnXARGeqYAPAAEktAMAAqycAAERmEQBEZmYARGdSAERoBAAAAAMCwACHHIF0wACyiMAAso7AALelA8AAWssAAAFgAcAAhkwAAAABBcAAhyGBdMAAssnAALLPwACy5gEAAAPAALLkwACy5gAAAAAAAABgA8AAhxwBPwEJAcAAss/AAIZVAAAAAAIGwACHHoF0wACy68AAsxfAALNOAACc/QFqwACy7GADwAD95AIAAAEDwACzIMAAs04AAAAAAAAAYAPAAGmYAT4BSsAAsykBasAAs0BgA8AAaoTAAT94BsAAhx+BdMAAs1PAALNswAC3owAAwABahQFqwACzVGADwAD95AIAAAEDwACzf8AAt6MAAAAGBgbAALOWAAAAuUZgA8AARuQAwACzsAAAAKRhYAPAAEUCAMAAs9gAAAC3NGADwABBuADAALP3AAAAs7dgA7mgAMAAtBoAAAClImADwABNnADAALRBAAAAlqRgA8AAqwUAAGADwABF5wE+A07AALTewAC05wAAhY9gA8AARecBHMAAtPWAwAC06cBEaQm59gEAAYTAALUFwERpRwDAAEbzScAAtRcWwAC1ZhzAALUthsAAtRvARGlytdoBAAEWwAC1SITAALU8wERpR7EqwABNpQDAAEZPtK2+Pz4DPRzAALY5LrpuAQABgMAAtk3ARGkJAMAAhlBJwAC2YRbAALbGHMAAtogWwAC2eBbAALZxgMAAtmXARGkJglXAAEXtgerAAP0gtdABAAEWwAC2poTAALaawERpR7EqwABNpQDAAEZFtK2+Pz4BPRfAALbugMAAtuLARGkJpTQcwAC2+S7AAFqGAwADJ8AAWswWwAC3O4DAALcvwERpCaU0wABG54PAALdFwERpOQDAAIZRwABG5z89NQAAAAEAYAPAAKsFAYXAALdkwERpVyMcwAC3aYcAwERqmkgBAAErAAArHMAAt2mHAMBEaprAAFrNAQABgMAA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wACcRgA+AUqX8AFql/dgA8AAh5zAAWUYAAE+AUqYEgErBsAAh72Bd5hImF6diAABwABbLgAAAAEDmGadiAAAAAEBAZh6AAAAgmtgA8AAh3wAAGADwACHnAE+AUeYhoCYjsBEqmMWAZi0api0YAPAAId8wAEB/QA+AUqYwAFqmMdgA8AAh5zAAWORAZjpapjpYAPAAId8wAECFAA+AUqY+QFqmQBgA8AAh5zAAWOoAZkmapkmYAPAAId8wAEEBAA+AUqZNQFqmTxgA8AAh5zAAWO/AZlhaplhYAPAAId8wAEDJAA+AUqZbgFqmXVgA8AAh5zAAWQEAZmYapmYYAPAAId8wAEDPAA+AUqZpQFqmaxgA8AAh5zAAWQbAZnPapnPYAPAAId8wAED0gA+AUqZ3AFqmeNgA8AAh5zAAWRJAZoGapoGYAPAAId8wAEDVAA+AUqaFAFqmhtgA8AAh5zAAWQyAZo/apo/YAPAAId8wAEC9QA+AUqaTAFqmlNgA8AAh5zAAWPWAZp2app2YAPAAId8wAEDDAA+AUqagwFqmopgA8AAh5zAAWPtAZqtapqtYAPAAId8wAECqwA+AUqaugFqmsFgA8AAh5zAAWRgAZrkaprkYAPAAId8wAECwwA+AUqa8QFqmvhgA8AAh5zAAWR3AZsbapsbYAPAAId8wAEC2wA+AUqbKQFqmzBgA8AAh5zAAWSOAZtUaptUYAPAAId8wAEDngA+AUqbYgFqm2lgA8AAh5zAAWSlAZuNapuNYAPAAId8wAEDbAA+AUqbmQFqm6BgA8AAh5zAAWS8AZvCapvCYAPAAId8wAEDuAA+AUqb0AFqm9dgA8AAh5zAAWTTAZv7apv7YAPAAId8wAEDhAA+AUqcBwFqnA5gA8AAh5zAAWTqAZwwapwwYAPAAId8wAECeQA+AUqcPQFqnERgA8AAh5zAAWUBAZxnapxnYAPAAId8wAECXwA+AUqcdAFqnHtgA8AAh5zAAWUvAZyeapyeYAPAAId8wAECkQA+AUqcqgFqnLFgA8AAh5zAAWUYAZzTapzTYAPAAId8wAECKwA+AUqc6AFqnO9gA8AAh5zAAWVGAZ0aap0aYAPAAId8wAECRQA+AUqdLgFqnTVgA8AAh5zAAWVdAZ1fap1fYAPAAId8wAED6gA+AUqdcAFqnXdgA8AAh5zAAWV0AABEpdoA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YAPAAIidwAFJkwFgA8AAiJ1KqPsBHKkxHKkCLsAATzYDAAKDqRLARNdwgakbwETXNAHAAE8/gqkpwETXSsAAiDVIAQABaqlCYAPAAIidwAFdVgDAAP3xBsAAiDWBSKx5rIevnwAAwABPNgAAAAEDrJavnwAAAAMCAqynAAAAgaZeAwABAQFgA70qAAFXA8AAiAwAYAPAAIidAKzBAAAArSxdA8AAaJQBYAPAAIgNAAGs0wAAAMAATz9gA8AA+tEBaqzbYAPAAPrRAGADwACInQE+Bk6s9wAAAMAAW2VgA8AAiJ0ASa0FIiGCrQrARNiEABytGYGtFMBE2G62SwEAARatJC7AAEuewACICsAAiCMAwABorz4BPYutNMBE2KgcrUCArT/ARNhNIAEAARatQS6Z+sAAiCcAAD89Ixytn4OtlsBE2KhIAQABKwDAAP3xi62WwETYqGqtsWADwACIncABSZMrAWADwACInUmtwBytzYOtxMBE2KhIAQABaq3eYAPAAIidwAFJkwDAAP3xPgFJrfAiHK35ga30wETYboMcAQABaq4QYAPAAIgNwAD+aQDAAGitARauIy6qbsAAiEE+AUauPa50rlUAAACbR2ADwACIGwAWrmEuwABbVcAAiArAAIgmPgJOro6umQAAwABbZmADwACInQEcrqSErpvARNmcwABPNgIAAoCutMBE2E2BrrfARNhuAMAAiDVJrsgcrteFrszARNm9SAEAAWqu6GADwACIncABXVYAwAD98T4BSq78AYWvA8BE2b0/Pz9Jrzccr0SDrzvARNioSAEAAWqvVWADwACIncABXVYAwAD98T4BSq9jAYOvasBE2Kg/Sq9+AWqvk2ADwACIncABSZMGwACINoFIsH2wibGVAAC24wAAAAEDsKexlQAAAAAAAABgA70qAT4DSbCwIRawtS6qbsAAiEFKsMUBKz9JsNYcsPoWsNouwABbU8AAiArAAIgkSAEAASsAwAD98T4BPRexCy7AAFtTwACIChyxNy7AAFtnwACICgAAAADAAIguwACIJD9KsWsBFrFyLsAAW1PAAIgKwACIJAbAAIgugUixmrGms6IAAMAAW2fAAIgKAAAAAQOxzLOiAAAAAAAAAGADvSoBPgZJsdUWsdkutwrAAIg9PgFKsfsBFrICLpn6wACIJz9JshEhFrIWLqpuwACIQT4BSrIuASs/TrJYAAAAm0dgA8AAiBsARrJmspmyfgAAAIPzYAPAAIgbABayhi7AAFtVwACICsAAiCY+AUmyoRayqoGypcBE23WqbsAAiEE+AUmyxByy0YCyyMBE22JIAQABKwDAAP3xPgE9iLLmwETbYoGy8cBE23U+AUqzEgEWsxkumfrAAIgnP0mzOiEcs0eAsz7ARNtiSAEAASsAwAD98T4BSrNYARyzaICzX8BE22K24wAAAADAAIg2P0qzlAEWs5sumfrAAIgnBsAAiDeBSLOns6y6ogAAhDEAAAABA7OzuqIAAAAFAgKzwQAAAIPpYAPAAP7IALPMAAAAg+JgA8AA/n4AA7PlAAAAwABPT2ADwAD60QFqs/dgA8AA+tEAtAkAAAC8NGADwAD60QFqtBFgA8AA+tF3tCkAAADAAE9QYAO9KgFqAGADwAD9oXlcAT4JT7Q/tEQAAAHAAFtoYQMBYAO9KmADwAD60QADtE+1LAAAAAEBAbRcAAAAwABbaWADvSoAAGADwAD60QE+AUq0bwEpPRy1NoC1M8BE3ESCjgEAAYG1PMBE3FIAwAD+3Em1Tha1Vha1Ui6Z+sAAiCeEH70uPgE9HLVtgLVqwETcRIKOAQABJ8AAW2oAwAD+3D89HLWOgLWLwETcRIKOAQABJLWoAyepRha1oRa1nS6Z+sAAiCeAvb0YJ4LqAMAA/txJta8WtbMuvEjAAIg7PgE9HLXWgLXTwETcRIKOAQABJ7xBAMAA/tw/SbX0FrX4LsAATyHAAIg+PgE9HLYdgLYawETcRIKOAQABJ8AAW2sAwAD+3D9Jtj0WtkEuvEnAAIg8PgE9HLZmgLZjwETcRIKOAQABJ7xDAMAA/tw/PRy2iYC2hsBE3ESCjgEAASfAAEOUAMAA/txJtpoWtrAWtp4uwABbVcAAiArAAIgmgVXAAP0dPgE9HLbEgLbBwETcRIKOAQABJ5nHAMAA/tw+BU6267b2AADAAE8+WwEWtvguwABbVcAAiArAAIgmSbcRg7cVwETcez4BPY63J8BE3jw1t0YAAAEAXQPAAP07AWADwACIGwEct0YWtzQuwABbVcAAiArAAIgmgK0AAAAAwAD9DzUAAAABAFsBHLdbh7dZwETebYCuAQABNLdgA7dgt6kAAAACAgK3YQAAAIHXYAPAAIgbALdkAAAAgk5gA8AAiBsAAGADwAD8lwE+AUq3dQEct4cWt4IWt34Ut3zARN7DCACZ+sAAiCeAvb0Ygk8BAAEWt5cWt5MUt5HARN7RCQCZ+sAAiCeAvb0YAMAA/o4AwAD9TocAwETebT9Ot7+3ygAAvE9gA8AA+tEBKka32QAAAAABAFsAJrf6AYa3+sBE3jxdA8AA/PkBWz4CTrfxAAAAhFtgA8AAiBsBJrfZARS38cBE300IAGADwACIG0E+BUm4ECKCuBTARNxhACEWuC8UuCnARN9qCQCqbsAAiEE+AUK4SwA/SbhnIiEcuHmEuGvARNyTSAEAASsAwAD98QAhHLiXFLiRwETfagkAwABPQQIAAoW4o8BE3LEauMPAAIggAMAAiDQ+AUK41QA/Sbjxh7j1wETfOT4BPRy5EIC5DcBE3ESCjgEAASfAAFtsAMAA/tw+AT0cuTyAuTnARNxEgo4BAAEngK8AwAD+3D0cuWEUuVvARN9qCQCEMQUAAoC5acBE3EQkuX0CgblvwETcUieD4QPAAE9PgrmdwETcYbw0g7nDwETce8AAT1CEuebARNyTwACINz2Puf7ARN85KUm6H4e6I8BE3zk+Aj0cujyAujnARNxEgo4BAAEngK8AwAD+3D0culSAulHARNxEgo4BAAEkumkCgbpcwETcUieZxwDAAP7cPgE9HLqGgLqDwETcRIKOAQABJ5nHAMAA/twGwACIOIFIuqe6rrvJAAC0EAAAAAEDurK7yQAAAAMAAAO6wgAAAIPiYAPAAP5+AWq6z2ADwAD+foQout4AAADAAE9PYAPAAPrRAWq68GADwAD60QC7CQAAAMAAT1BgA70qAWoAYAPAAP2heWADwAD+fgE+A067LLsvAACD6WADwAD+yAEfuzXAAP7nAAAAAD0cu0kuhDEEAAKDu1HAROFmgLtVwEThEgLAAE9Pgbt8wEThK8AAT1CCu53AROFFwACIN0q7sQEcu7uDu7jAROFmIwAAAADAAP7hBsAAiDmBSLvOu+G7/QAAIwFqu89gA8AA/eQCAAABA7vpu/0AAAAAAAAAYAPAAP5+AUq77wEcu/MWu+8umfrAAIgnIwAAAADAAP3yAABEyQYARMqKAETK4ABEy2EARMu3AETMOABEzHoARM5dAETOqQBEzucARNCIAETS5gBE1EYARNTKAETVDwBE1eMARNY2AETWegBE1v0ARNgrAETaZwBE2v8ARNwkAETg8QBE4coAROIVAAAAGQLAAIhJgUjAAEHIwABBzsAAduIDm+4AAAFgAcAA/eQAAAUEwACIS4FIwABCTsAAQl8Gg+wAYAPAAP5+AWrAAEJUYAPAAP5+wAFl8QTAAIhMgUjAAEJ9wABCgQmD8wBgA8AAiBsABMAAiE6BSMAAQpHAAEKvGMAAW27AAIgKAGADvSoBKwTAAIhPgUjAAEVMwABFVRjAAFtvwACICgBdA8AA/TsBYAPAAIgbASsEwACIUIFIwABHLcAARz8YwABbcMAAiAoAXQPAAP07AWADwACIGwErAQXAAIhrgUjAAEdEwABHRMAAR1cAAAADwABHTMAAR1cAAAABAQHAAEdSAAAEg/NgA8AAiBsAAGADwACISQE/AggBwACITIAAwETjfAkBwABHRMAA/foAAAAAFQbAAIhSgUjAAEeSwABHmsAASeEEAa9zAAAAAQPAAEe1wABJ4QAAAAICAsAAR8gAAACDSmADwABdsQDAAEf1AAAAwABbX10DwAD9bQJgA70qYAPAAIgbAABgA8AAiEkBPgY9HMAASAuAwABIBMBE49uCmAEAAWrAAEgRYAPAAP5+wAFl8QDAAF2zTsAASC7AAEgzAACD82ADwACIGwEcwABIPIHAAEg1wETj60sBAAEcwABIRIDAAEg9wETj25jyAAAAAMAAXeMAwAD9gU7AAEhvwABIeAAAm3xdA8AA/TsBYAPAAIgbARzAAEiBgMAASHrAROPbr40CAWADwACIGwE0wABIigPAAEiKwABIvgAAAAAAAABgA8AAiBsBPgFKwABIlQEcwABIo4HAAEicwETj60sBAAEcwABIq4DAAEikwETj25jyAAAAAMAAXeMAwAD9gQGvjinAAF2+TsAASPHAAEkDAADAAFtxXQPAAP07AWADwACIGwEcwABJDIDAAEkFwETj26+NAgFgA8AAiBsBNMAASRUDwABJFcAASUkAAAAAAAAAYAPAAIgbAT4BSsAASSABHMAASS6BwABJJ8BE4+tLAQABHMAASTaAwABJL8BE49uY8gAAAADAAF3jAMAA/YEBr44pwABdvj0cwABJaoDAAEljwETj24KQAQABasAASW5gA8AA/n7AAWXxAMAAXbRKwABJeAE1wABJgwAAAQBgA8AAiEkBH8AASYPAAIhrAQABgsAASYzAROQ7ADUAAAABAFsBF8AASZqFwABJmMBE5czAAFtvwACICoPAAEmmwETkfsAAiE81AAAAAQBbARfAAEm3hcAASbXAROXMwABbcMAAiAqEwABJzMBE5Q3AAIhQhQDAROXMBsAAiFSBSMAAShLAAEoXwABLcgAAr3QAAAABA8AASibAAEtyAAAAAQEBwABKMAAAAIRAYAPAAF1iAABcAT4FPRzAAEpBgMAASjzAROZ3gpgBAAFqwABKR2ADwAD+fsABZfEAwABdZz0cwABKVoDAAEpRwETmd7AcAQABFsAASmYWwABKYS6D88AAiEyZ+sAAiCcAwABdkD0cwABKdYDAAEpwwETmd4hpAwFgA8AAiBsCFsAASn8uwABbb8AAiArAAIhPNMAASooDwABKisAASswAAAABAQHAAEqeAAAAg/NgA8AAiBsAAGADwAD9oQE+AT0cwABKsYDAAEqswETmd7AcAQABFsAASsGBwABKvMBE5ySZ+sAAiCcAwABdkAGX3SnAAF1rPRzAAErpgMAASuTAROZ3iGkDAWADwACIGwIWwABK8y7AAFtwwACICsAAiFA0wABLBwPAAEsHwABLSQAAAAEBAcAASxsAAACD82ADwACIGwAAYAPAAP2hAT4BPRzAAEsugMAASynAROZ3sBwBAAEWwABLPoHAAEs5wETns5n6wACIJwDAAF2QAZfdKcAAXWs9HMAAS2aAwABLYcBE5neCkAEAAWrAAEtqYAPAAP5+wAFl8QDAAF1oBsAAiGWBSMAAS3fAAEuHwABLlgEAmfoAAAABA8AAS4vAAEuWAAAAAAAAAGADvSoBSsAAS44BFsAAS5MWwABLji6D88AAiEyZ+sAAiCcGwACIVYFIwABL18AAS9zAAEwcAADAAE88AAAAAQPAAEvnwABMHAAAAAEBAcAAS/sAAACD22ADwACIGwAAYAPAAPrRAUrAAEwFARzAAEwKFsAATAUug/PAAIhMwABPPAEAAYDAAEwWwEToowDAAIgyBsAAiFaBSMAATFzAAExhwABNYwAAwABPOwAAAAEDwABMa8AATWMAAAABAQHAAEx/AAAAg9tgA8AAiBsAAGADwAD60QE+A0nAAEyMHMAATJAuwABPPAEAAYDAAEycwETpEwDAAIhVSsAATKQBKT9JwABMtSEcwABMwxbAAEy5LsAA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AABqwABnJmADwACIncABSZODAMBE85sBYAPAAIidScAAZzQiHMAAZ0GDwABnOMBE84VIAQABasAAZ1JgA8AAiJ3AAUmTAMAA/fEAIRzAAGdoFsAAZ14uwABbb8AAiArAAIhPSAEAASsAwAD9ZT4BRsAAZ3nAAGeowABnkQAAAJtHYAPAAIgbABbAAGedLsAAW2/AAIgKwACITz4CTsAAZ8DAAGfLAADAAFtmYAPAAIidARzAAGfWhMAAZ83ARPRswABPNgIAAoDAAGfmwETzIoHAAGfpwETzRQDAAIg1ScAAZ/gcwABoB4XAAGf8wET0kUgBAAFqwABoGGADwACIncABXVYAwAD98T4BSsAAaCoBhcAAaDHARPSRPz9AIRzAAGhpg8AAaGDARPOFSAEAAWrAAGh6YAPAAIidwAFJegDAAP3xwABoYMAAaIkASsAAaJABg8AAaJfARPOFBsAAiF6BSMAAaNTAAGjZwABvLQAAwABPWgAAAAEDwABo48AAby0AAAABAQHAAGj3AAAAmxlgA8AAiBsAAFwBPgJJwABpBhzAAGkPFsAAaQoug/PAAIhMgxwBAAGAwABpGMBE9XwAwACIMT4BSsAAaSoAP0nAAGk8HMAAaUoWwABpQC7AAFtvwACICsAAiE9IAQABKwDAAP1lPgE9F8AAaVsuwABbb8AAiAoxwABpe2ADwACIGwGAwABpfMBE9XzAAIhPPgZOwABpncAAaawAAMAAWCxgA8AA/JcBFsAAabaAwABprsBE9XzAAFgswACIKE7AAGnlwABp8QAAwABbcl0DwAD9OwFgA8AAiBsBMcAAagdgA8AAiBsATsAAahbAAGocAADAAFtzYAPAAPrRASpGwABqK8AAal7AAGpDAAAAwABbdGADwACIGwAWwABqUy7AAFtvwACICsAAiE8+Ak7AAGpswABqgAAAwABbdWADwAD8lwEWwABqj4TAAGqCwET2isAAWCzAAIgoScAAaqccwABquoHAAGqrwET2FkgBAAGFwABqvcBE9rEAwAD9uz4BScAAat4cwABq6oDAAGriwET1fEgBAAGEwABq7cBE9ooAwAD98T4BSsAAawkAPgE9HMAAa3WCwABracBE9kJWAQABhMAAa3nARPaKAMAA/UxJwABroxzAAGu2gcAAa6fARPYWgJcBAAEWwABrxYTAAGu4wET2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5AIAAAEDwABE3sAARZkAAAAFBQXAAETxAAAAiGxgA4lxAMAARQAAAADAAFvfYAOI2wDAAEUhAAAgg6tgA4k2AMAARTAAAADAAFvgYAOI2wDAAEVEAAAAhX1gA8AAiY8AAGADwAD60QE+AUrAAEVhARzAAEVuhMAARWjARbkkvqECAAIWwABFjBbAAEWCgMAARYDARbjogO2JdYV/iYeCwABFk8BFuQYAwACJkwbAAIm5gX7AAEWewABFr8AARmsAAMAAW+gBasAARZ9gA8AA/eQCAAABA8AARb/AAEZrAAAABQUFwABFzAAAAIhsYAOJUADAAEXbAAAAwABb32ADiNsAwABF9gAAIIOrYAOJNgDAAEYLAAAAwABb4GADiNsAwABGHwAAAIV9YAPAAImPAABgA8AA+tEBPgFKwABGOwEcwABGSITAAEZCwEW59L6hAgACFsAARlyAwABGWsBFubiGfolYgsAARmXARbnWAMAAiZMGwACJuoF+wABGcMAARoHAAEcIAADAAFviAWrAAEZxYAPAAP3kAgAAAQPAAEaOwABHCAAAAAUFBcAARpgAAACIbGADiQwAwABGpwAAAMAAW99gA4jbAMAARsIAACCDq2ADiTYAwABG1wAAAMAAW+BgA4jbAMAARusAAACFfWADwACJjwAAYAPAAPrRAT4BSsAARvgBKgAARa2CAEW16gBFtr0ARbdSAEW36QBFuLAARbmAAEW6RwBFutwAAAAIAsAAib2BfsAARw3AAEcTwABOAQPAAFwAAAABXQHAAImZAWADiXEAAAABBcAAiciBfsAAR1jAAEdewABHeAEAAAPAAEd2wABHeAAAAAAAAABgA8AAib0BPwEJAcAAR17AAImkAAAAAAgGwACJv4F+wABHfcAAR47AAEiEAADAAFvmAWrAAEd+YAPAAP3kAgAAAQPAAEekwABIhAAAAAUFBcAAR7cAAACIbGADiXEAwABHxgAAAMAAW99gA4jbAMAAR+wAACCDq2ADiXEAwABH+wAAAMAAW+BgA4jbAMAASA8AAACFfWADwACJjwAAYAPAAPrRAT4BSsAASBwBIhzAAEgvFsAASCWAwABII8BFu6WA7Yl1SAEAARbAAEg0gsAASDLARbvDgO2JdQDAAP3xARzAAEhjhMAASF3ARbvhvqECAAIWwABId4DAAEh1wEW7pYV/iX+CwABIfsBFu8MAwACJkwbAAInAgX7AAEiJwABImsAASZEAAMAAW+cBasAASIpgA8AA/eQCAAABA8AASK/AAEmRAAAABQUFwABIyQAAAJcvYAOJcQDAAEjpAAAAwABb72ADiNsAwABJGgAAIIOrYAOJcQDAAEkvAAAAwABb4GADiNsAwABJSQAAAIV9YAPAAImPAABgA8AA+tEBPgFKwABJVgEcwABJdBbAAElqgMAASV3ARbyggO2JdUgBAAEWwABJeYLAAEl3wEW8voDtiXUAwAD98QbAAInBgX7AAEmWwABJp8AASnEAAMAAW+QBasAASZdgA8AA/eQCAAABA8AASbnAAEpxAAAABQUFwABJyAAAAIhsYAOJJADAAEnXAAAAwABb32ADiNsAwABJ/QAAIIOrYAOJcQDAAEoMAAAAwABb4GADiNsAwABKIAAAAIV9YAPAAImPAABgA8AA+tEBPgFKwABKLQEcwABKQBbAAEo2gMAASjTARb1mhO+JKkgBAAEWwABKUxbAAEpJhMAASkPARb2ih3zAAImRvdXAAFEFAMAA/fEGwACJwoF+wABKdsAASofAAEsZAADAAFvhAWrAAEp3YAPAAP3kAgAAAQPAAEqXwABLGQAAAAUFBcAASqQAAACIbGADiQAAwABKswAAAMAAW99gA4jbAMAAStkAACCDq2ADiXEAwABK6AAAAMAAW+BgA4jbAMAASvwAAACFfWADwACJjwAAYAPAAPrRAT4BSsAASwkBKgbAAInDgX7AAEsewABLL8AAS8MAAMAAW+UBasAASx9gA8AA/eQCAAABA8AAS0DAAEvDAAAABQUFwABLTgAAAIhsYAOJNgDAAEtdAAAAwABb32ADiNsAwABLgwAAIIOrYAOJcQDAAEuSAAAAwABb4GADiNsAwABLpgAAAIV9YAPAAImPAABgA8AA+tEBPgFKwABLswEqBsAAicSBfsAAS8jAAEvZwABMlQAAwABb4wFqwABLyWADwAD95AIAAAEDwABL6sAATJUAAAAFBQXAAEwAAAAAwABFt2ADiSQAwABMHAAAAMAAW/BgA4jbAMAATEkAACCDq2ADiXEAwABMXgAAAMAAW+BgA4jbAMAATHgAAACFfWADwACJjwAAYAPAAPrRAT4BSsAATIUBKgbAAInFgX7AAEyawABMq8AATV0AAMAAW+gBasAATJtgA8AA/eQCAAABA8AATLvAAE1dAAAABQUFwABMyAAAAIhsYAOJUADAAEzXAAAAwABb32ADiNsAwABM/QAAIIOrYAOJcQDAAE0MAAAAwABb4GADiNsAwABNIAAAAIV9YAPAAImPAABgA8AA+tEBPgFKwABNLQEcwABNOoTAAE00wEXANr6hAgACFsAATU6AwABNTMBFv/qGfolYgsAATVfARcAYAMAAiZMGwACJxoF+wABNYsAATXPAAE3/AADAAFviAWrAAE1jYAPAAP3kAgAAAQPAAE2AwABN/wAAAAUFBcAATYoAAACIbGADiQwAwABNmQAAAMAAW99gA4jbAMAATbkAACCDq2ADiXEAwABNzgAAAMAAW+BgA4jbAMAATeIAAACFfWADwACJjwAAYAPAAPrRAT4BSsAATe8BKgAARbttAEW8aABFvS4ARb4BAEW+lgBFvysARb/CAEXAiQBFwR4AAAAIAsAAicmBfsAATgTAAE4KwABU+QPAAFwBAAABXQHAAImZAWADiVAAAAABBcAAidSBfsAATkPAAE5JwABOXQEAAAPAAE5bwABOXQAAAAAAAABgA8AAickBPwEJAcAATknAAImkAAAAAAgGwACJy4F+wABOYsAATnPAAE8jAADAAFvkAWrAAE5jYAPAAP3kAgAAAQPAAE6FwABPIwAAAAUFBcAATpQAAACIbGADiSQAwABOowAAAMAAW99gA4jbAMAATsMAACCDq2ADiVAAwABO0gAAAMAAW+BgA4jbAMAATuYAAACFfWADwACJjwAAYAPAAPrRAT4BSsAATvMBHMAATwCEwABO+sBFwiO+oQIAAoDAAE8SwEXB5xbAAE8XgsAATxXARcIFhn6JWADAAImTBsAAicyBfsAATyjAAE85wABP5QAAwABb4QFqwABPKWADwAD95AIAAAEDwABPScAAT+UAAAAFBQXAAE9WAAAAiGxgA4kAAMAAT2UAAADAAFvfYAOI2wDAAE9/AAAgg6tgA4lQAMAAT5QAAADAAFvgYAOI2wDAAE+oAAAAhX1gA8AAiY8AAGADwAD60QE+AUrAAE+1ARzAAE/ChMAAT7zARcLqvqECAAKAwABP1MBFwq4WwABP2YLAAE/XwEXCzIZ+iVgAwACJkwbAAInNgX7AAE/qwABP+8AAUKkAAMAAW+UBasAAT+tgA8AA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AT4BPTUAAAABAGADwABXjAEWovYuqfjAAIoaIxyjAIEAwEYNOUgBAAErAAArHKMAgQDARg05oiQBAAGAoxPARg0mAMAAV/EBXAbAAIprgYKjIqMzo4IAAMAAQUsBaqMjYAPAAP3kAgAAAQOjRqOCAAAAAQEBo00AAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARajWi6p+MAAihojHKNkgQDARg28SAEAASsAACsco2SBAMBGDbzAAEFLAQABgKN4wEYNqQDAAFhAAVwGwACKbIGCo4ejmKQZAADAAEACAWqjiGADwAD95AIAAAEDo6ukGQAAAAICAqOyAAAAv1NgA58AAKPGAAAAwABAA2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARaj2y6p+MAAihojHKPlggDARg5PSAEAASsAACsco+WCAMBGDk/AAEACAgACgKP5wEYOLoGkB8BGDjoAwABYQgFcBsAAim2BgqQepC+kegAAwABBTAFqpB9gA8AA/eQCAAABA6RApHoAAAABAQGkRwAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFqRULqn4wACKGiMcpF6BAMBGDttIAQABKwAAKxykXoEAwEYO28AAQUwBAAGApHDARg7IAMAAWEQBXAbAAIpugYKkf6SQpN0AAMAAQVEBaqSAYAPAAP3kAgAAAQOkoqTdAAAAAQEBpKkAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARakti6p+MAAihojHKTAgQDARg9gSAEAASsAACscpMCBAMBGD2DAAEFRAQABgKTTwEYPTQDAAFhTAVwGwACKb4GCpOKk86U2AADAAEEqAWqk42ADwAD95AIAAAEDpQClNgAAAAEBAaUHAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWpRQuqfjAAIoaIxylHoEAwEYP5UgBAAErAAArHKUegQDARg/lwABBKgEAAYClLMBGD9IAwABX7QFcBsAAinCBgqU7pUyllwAAo84BaqU8YAPAAP3kAgAAAQOlXaWXAAAAAQEBpWQAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARalcS6p+MAAihojHKV7gQDARhBoSAEAASsAACscpXuBAMBGEGijzgEAAYCljcBGEFUAwABYVwFcBsAAinGBgqWcpa2l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YAOfAADAAESlAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABEtS6p+MAAihojHMAARL+DAMBGM/pIAQABKwAAKxzAAES/gwDARjP6oWYDAAOAwABEz8BGM8eBwABE1sBGM9eCwABE4sBGM+UAwABYCwFcBsAAiq2BgsAARPTAAEUFwABFXAAAo4YBasAARPVgA8AA/eQCAAABA8AARRjAAEVcAAAAAQEBwABFHQAAAKODYAPAAPyXAABcAT4BPTUAAAABAGADwABXjAEWwABFLy6p+MAAihojHMAARTmBAMBGNKVIAQABKwAAKxzAAEU5gQDARjSlo4YBAAGAwABFTcBGNI4AwABYEgFcBsAAiq6BgsAARWHAAEVywABF5QAAv3IBasAARWJgA8AA/eQCAAABA8AARYDAAEXlAAAAAgICwABFhwAAAL9zYAOfAADAAEWdAAAAohxgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABFri6p+MAAihojHMAARbiCAMBGNUpIAQABKwAAKxzAAEW4ggDARjVKv3ICAAKAwABFx8BGNSeBwABF18BGNTUAwABYFAFcBsAAiq+BgsAARerAAEX7wABGdgAAogcBasAARetgA8AA/eQCAAABA8AARgvAAEZ2AAAAAgICwABGEAAAAKIIYAPAAPyXAMAARioAAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAEY6Lqn4wACKGiMcwABGRIIAwEY1+kgBAAErAAArHMAARkSCAMBGNfqiBwIAAoDAAEZVwEY11YHAAEZpwEY15QDAAFgYAVwGwACKsIGCwABGe8AARozAAEcDAACinQFqwABGfGADwAD95AIAAAEDwABGnMAARwMAAAACAgLAAEajAAAAop5gA58AAMAARrIAAACin2ADwAD8lwAAXAE+AT01AAAAAQBgA8AAV4wBFsAARskuqfjAAIoaIxzAAEbTggDARjaqSAEAASsAACscwABG04IAwEY2qqKdAgACgMAARuTARjaFgcAARu/ARjaTAMAAWDoBXAbAAIqxgYLAAEcIwABHGcAAR34AAKNhAWrAAEcJYAPAAP3kAgAAAQPAAEc0wABHfgAAAAEBAcAARzsAAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAEdLLqn4wACKGiMcwABHVYEAwEY3SkgBAAErAAArHMAAR1WBAMBGN0qjYQEAAYDAAEdxwEY3NQDAAFfcAVwGwACKsoGCwABHg8AAR5TAAEe/AAChVQFqwABHhGADwAD95AIAAAEDwABHncAAR78AAAAAAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAR6YuqfjAAIoaIxzAAEewgADARjfTSAEAASsAACscwABHsIAAwEY306FVAAAAAMAAWBwBXAbAAIqzgYLAAEfEwABH1cAASGIAAKE2AWrAAEfFYAPAAP3kAgAAAQPAAEfgwABIYgAAAAMDA8AAR+cAAACfkGADnwAAwABH+QAAAKE3YAOfAADAAEgRAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABIIS6p+MAAihojHMAASCuDAMBGOH1IAQABKwAAKxzAAEgrgwDARjh9oTYDAAOAwABIN8BGOEyBwABIQ8BGOFqCwABIVcBGOGgAwABYIgFcBsAAirSBgsAASGfAAEh4wABIvQAAoUIBasAASGhgA8AA/eQCAAABA8AASIfAAEi9AAAAAQEBwABIjAAAAIDuYAPAAPyXAABcAT4BPTUAAAABAGADwABXjAEWwABImS6p+MAAihojHMAASKOBAMBGOShIAQABKwAAKxzAAEijgQDARjkooUIBAAGAwABIs8BGOREAwABYIAFcBsAAirWBgsAASMLAAEjTwABJpQAAv6YBasAASMNgA8AA/eQCAAABA8AASNzAAEmlAAAABQUFwABI4wAAAL9qYAOfAADAAEjzAAAAn5BgA58AAMAASQUAAAC/p2ADnwAAwABJHQAAAKFlYAOfAADAAEk2AAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABJRi6p+MAAihojHMAASVCFAMBGOfdIAQABKwAAKxzAAElQhQDARjn3v6YFAAWAwABJY8BGOaqBwABJbcBGObiCwABJecBGOcaDwABJhcBGOdSEwABJmMBGOeIAwABYHgFcBsAAiraBgsAASarAAEm7wABKMgAAv7oBasAASatgA8AA/eQCAAABA8AASc7AAEoyAAAAAgICwABJ1QAAAL+5YAOfAADAAEnpAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABJ+S6p+MAAihojHMAASgOCAMBGOsBIAQABKwAAKxzAAEoDggDARjrAv7oCAAKAwABKF8BGOp2BwABKJcBGOqsAwABXqwFcBsAAireBgsAASjfAAEpIwABKqwAAo2ABasAASjhgA8AA/eQCAAABA8AASmLAAEqrAAAAAQEBwABKaQAAAJ1DYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAASnkuqfjAAIoaIxzAAEqDgQDARjtgSAEAASsAACscwABKg4EAwEY7YKNgAQABgMAASp7ARjtLAMAAV9oBXAbAAIq4gYLAAEqwwABKwcAAS6cAAL/CAWrAAEqxYAPAAP3kAgAAAQPAAErZwABLpwAAAAUFBcAASuAAAACCmGADnwAAwABK7QAAAL/DYAOfAADAAEsBAAAAldJgA58AAMAASxUAAAC/xGADnwAAwABLLgAAAJ1DYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAASz4uqfjAAIoaIxzAAEtIhQDARjwvSAEAASsAACscwABLSIUAwEY8L7/CBQAFgMAAS2rARjvigcAAS3HARjvwgsAAS3/ARjv+g8AAS4fARjwMhMAAS5rARjwaAMAAV+kBXAbAAIq5gYLAAEuswABLvcAATAYAAKMtAWrAAEutYAPAAP3kAgAAAQPAAEvNwABMBgAAAAEBAcAAS9QAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAEvhLqn4wACKGiMcwABL64EAwEY86kgBAAErAAArHMAAS+uBAMBGPOqjLQEAAYDAAEv8wEY81QDAAFiHAVwGwACKuoGCwABMC8AATBzAAEy4AACi3QFqwABMDGADwAD95AIAAAEDwABMN8AATLgAAAADAwPAAExDAAAAgO5gA8AA/JcAwABMUAAAAJ+QYAOfAADAAExiAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABMci6p+MAAihojHMAATHyDAMBGPZ9IAQABKwAAKxzAAEx8gwDARj2fot0DAAOAwABMmMBGPWyBwABMn8BGPXyCwABMq8BGPYoAwABYJAFcBsAAiruBgsAATL3AAEzOwABNLQAAv5gBasAATL5gA8AA/eQCAAABA8AATNXAAE0tAAAAAgICwABM3AAAAL9HYAOfAADAAEzvAAAAohxgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABNAC6p+MAAihojHMAATQqCAMBGPlZIAQABKwAAKxzAAE0KggDARj5Wv5gCAAKAwABNEsBGPjOBwABNH8BGPkEAwABYJgFcBsAAiryBgsAATTLAAE1DwABN4AAAv0YBasAATTNgA8AA/eQCAAABA8AATUzAAE3gAAAABAQEwABNWgAAAL9HYAOfAADAAE1tAAAAv0hgA58AAMAATX4AAACiHGADnwAAwABNjgAAAKIOYAPAAPrRAABcAT4BPTUAAAABAGADwABXjAEWwABNnS6p+MAAihojHMAATaeEAMBGPyJIAQABKwAAKxzAAE2nhADARj8iv0YEAASAwABNscBGPuGBwABNvsBGPu+CwABNycBGPv2DwABN1MBGPwsAwABYKAFcBsAAir2BgsAATeXAAE32wABOdQAAv58BasAATeZgA8AA/eQCAAABA8AATg/AAE51AAAAAgICwABOFgAAAJ+QYAOfAADAAE4oAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABOOC6p+MAAihojHMAATkKCAMBGP+JIAQABKwAAKxzAAE5CggDARj/iv58CAAKAwABOXMBGP7+BwABOaMBGP80AwABYKgFcBsAAir6BgsAATnrAAE6LwABPAgAAo4cBasAATntgA8AA/eQCAAABA8AATp7AAE8CAAAAAgICwABOpQAAAKOIYAOfAADAAE65AAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABOyS6p+MAAihojHMAATtOCAMBGQJBIAQABKwAAKxzAAE7TggDARkCQo4cCAAKAwABO58BGQG2BwABO9cBGQHsAwABYPQFcBsAAir+BgsAATwfAAE8YwABPswAAoiABasAATwhgA8AA/eQCAAABA8AATyrAAE+zAAAAAwMDwABPNwAAAKIhYAPAAPrRAMAAT0wAAACfkGADnwAAwABPXgAAAJ1DYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAT24uqfjAAIoaIxzAAE94gwDARkFOSAEAASsAACscwABPeIMAwEZBTqIgAwADgMAAT4vARkEbgcAAT5rARkErgsAAT6bARkE5AMAAWDEBXAbAAIrAgYLAAE+4wABPycAAUAwAAL+DAWrAAE+5YAPAAP3kAgAAAQPAAE/QwABQDAAAAAEBAcAAT9cAAAC/hGADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAE/qLqn4wACKGiMcwABP9IEAwEZB90gBAAErAAArHMAAT/SBAMBGQfe/gwEAAYDAAE/8wEZB4gDAAFg0AVwGwACKwYGCwABQEcAAUCLAAFClAACjsgFqwABQEmADwAD95AIAAAEDwABQMMAAUKUAAAADAwPAAFA1AAAAo7NgA8AA/JcAwABQRgAAAJ+QYAOfAADAAFBYAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABQaC6p+MAAihojHMAAUHKDAMBGQqxIAQABKwAAKxzAAFBygwDARkKso7IDAAOAwABQgcBGQnmBwABQjMBGQomCwABQmMBGQpcAwABYOAFcBsAAisKBgsAAUKrAAFC7wABSDQAAo6wBasAAUKtgA8AA/eQCAAABA8AAUMjAAFINAAAABwcHwABQ1AAAAKODYAPAAPyXAMAAUOoAAACjoWADwAD8lwDAAFEHAAAAo61gA58AAMAAUSMAAACjrmADnwAAwABRQAAAAKOvYAPAAPyXAMAAUVwAAACfj2ADnwAAwABRdAAAAJ1DYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAUYQuqfjAAIoaIxzAAFGOhwDARkOvSAEAASsAACscwABRjocAwEZDr6OsBwAHgMAAUZzARkNAgcAAUajARkNQgsAAUbnARkNgg8AAUdHARkNuhMAAUeTARkN8hcAAUfTARkOMhsAAUgDARkOaAMAAWJYBXAbAAIrDgYLAAFISwABSI8AAUpoAAKOwAWrAAFITYAPAAP3kAgAAAQPAAFI1wABSmgAAAAICAsAAUjwAAACjsWADnwAAwABSUQAAAJ1DYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAUmEuqfjAAIoaIxzAAFJrggDARkSKSAEAASsAACscwABSa4IAwEZEiqOwAgACgMAAUn7ARkRngcAAUo3ARkR1AMAAWDYBXAbAAIrEgYLAAFKfwABSsMAAUvkAAKImAWrAAFKgYAPAAP3kAgAAAQPAAFLAwABS+QAAAAEBAcAAUscAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFLULqn4wACKGiMcwABS3oEAwEZFKkgBAAErAAArHMAAUt6BAMBGRSqiJgEAAYDAAFLvwEZFFQDAAFfyAVwGwACKxYGCwABS/sAAUw/AAFNkAADAAEFJAWrAAFL/YAPAAP3kAgAAAQPAAFMlwABTZAAAAAEBAcAAUywAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFM5Lqn4wACKGiMcwABTQ4EAwEZFw0gBAAErAAArHMAAU0OBAMBGRcPAAEFJAQABgMAAU1rARkWuAMAAWD4BXAbAAIrGgYLAAFNpwABTesAAVLgAAKFFAWrAAFNqYAPAAP3kAgAAAQPAAFOLwABUuAAAAAcHB8AAU5kAAAChRmADnwAAwABTsgAAAKFHYAOfAADAAFPOAAAAoUhgA58AAMAAU+UAAAChSWADnwAAwABUAAAAAIDuYAPAAPyXAMAAVBMAAACfkGADnwAAwABUKwAAAJ1DYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAVDsuqfjAAIoaIxzAAFRFhwDARkaySAEAASsAACscwABURYcAwEZGsqFFBwAHgMAAVFfARkZHgcAAVGTARkZVgsAAVHTARkZjg8AAVIfARkZxhMAAVJjARkZ/hcAAVJ/ARkaPhsAAVKvARkadAMAAWEEBXAbAAIrHgYLAAFS9wABUzsAAVVcAAL9pAWrAAFS+YAPAAP3kAgAAAQPAAFTfwABVVwAAAAMDA8AAVOYAAACfkGADnwAAwABU+AAAAL9qYAOfAADAAFUIAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABVGC6p+MAAihojHMAAVSKDAMBGR5tIAQABKwAAKxzAAFUigwDARkebv2kDAAOAwABVNMBGR2qBwABVQMBGR3iCwABVSsBGR4YAwABYQwFcBsAAisiBgsAAVVzAAFVtwABWAAAAowABasAAVV1gA8AA/eQCAAABA8AAVXzAAFYAAAAAAwMDwABVgQAAAKMBYAPAAPyXAMAAVZMAAACjAmADnwAAwABVpQAAAKMDYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAVbsuqfjAAIoaIxzAAFXFgwDARkhiSAEAASsAACscwABVxYMAwEZIYqMAAwADgMAAVdXARkgvgcAAVeHARkg/gsAAVe3ARkhNAMAAWEoBXAbAAIrJgYLAAFYFwABWFsAAVpUAAKNHAWrAAFYGYAPAAP3kAgAAAQPAAFYmwABWlQAAAAMDA8AAVisAAACA7mADwAD8lwDAAFY4AAAAn5BgA58AAMAAVkoAAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFZaLqn4wACKGiMcwABWZIMAwEZJKUgBAAErAAArHMAAVmSDAMBGSSmjRwMAA4DAAFZ1wEZI9oHAAFZ8wEZJBoLAAFaIwEZJFADAAFhUAVwGwACKyoGCwABWmsAAVqvAAFboAAC/VQFqwABWm2ADwAD95AIAAAEDwABWtsAAVugAAAABAQHAAFa7AAAAgO5gA8AA/JcAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFbILqn4wACKGiMcwABW0oEAwEZJ1EgBAAErAAArHMAAVtKBAMBGSdS/VQEAAYDAAFbewEZJvQDAAFfuAVwGwACKy4GCwABW7cAAVv7AAFd9AACj0AFqwABW7mADwAD95AIAAAEDwABXDcAAV30AAAADAwPAAFcUAAAAkoVgA58AAMAAVx8AAAAnYAPAAPyXAMAAVywAAACj0WADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFdCLqn4wACKGiMcwABXTIMAwEZKiEgBAAErAAArHMAAV0yDAMBGSoij0AMAA4DAAFdcwEZKVoHAAFdjwEZKZILAAFdqwEZKcwDAAFhZAVwGwACKzIGCwABXgsAAV5PAAFgAAACj0wFqwABXg2ADwAD95AIAAAEDwABXo8AAWAAAAAACAgLAAFeqAAAAn5BgA58AAMAAV7wAAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFfMLqn4wACKGiMcwABX1oIAwEZLP0gBAAErAAArHMAAV9aCAMBGSz+j0wIAAoDAAFfnwEZLHIHAAFfzwEZLKgDAAFhbAVwGwACKzYGCwABYBcAAWBbAAFiFAACiLwFqwABYBmADwAD95AIAAAEDwABYLMAAWIUAAAABAQHAAFgzAAAAojBgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABYTS6p+MAAihojHMAAWFeBAMBGS99IAQABKwAAKxzAAFhXgQDARkvfoi8BAAGAwABYbsBGS8oAwABYBgFcBsAAis6BgsAAWIrAAFibwABZCgAAokMBasAAWItgA8AA/eQCAAABA8AAWLLAAFkKAAAAAgICwABYtwAAAIDuYAPAAPyXAMAAWMQAAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFjULqn4wACKGiMcwABY3oIAwEZMhkgBAAErAAArHMAAWN6CAMBGTIaiQwIAAoDAAFj2wEZMYYHAAFj9wEZMcQDAAFhfAVwGwACKz4GCwABZD8AAWSDAAFmTAACjjQFqwABZEGADwAD95AIAAAEDwABZMcAAWZMAAAACAgLAAFk4AAAAo2ZgA58AAMAAWUwAAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFlcLqn4wACKGiMcwABZZoIAwEZNNEgBAAErAAArHMAAWWaCAMBGTTSjjQIAAoDAAFl4wEZNEYHAAFmGwEZNHwDAAFhhAVwGwACK0IGCwABZmMAAWanAAFn8AACthgFqwABZmWADwAD95AIAAAEDwABZvsAAWfwAAAABAQHAAFnFAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABZ0i6p+MAAihojHMAAWdyBAMBGTdRIAQABKwAAKxzAAFncgQDARk3UrYYBAAGAwABZ8sBGTb8AwABXvAFcBsAAitGBgsAAWgHAAFoSwABanQAAo5sBasAAWgJgA8AA/eQCAAABA8AAWiPAAFqdAAAAAwMDwABaKgAAAKOcYAOfAADAAFo8AAAAonlgA58AAMAAWk0AAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFpdLqn4wACKGiMcwABaZ4MAwEZOh0gBAAErAAArHMAAWmeDAMBGToejmwMAA4DAAFp5wEZOVoHAAFqFwEZOZILAAFqQwEZOcgDAAFihAVwGwACK0oGCwABaosAAWrPAAFsCAACiuAFqwABao2ADwAD95AIAAAEDwABaw8AAWwIAAAABAQHAAFrKAAAAhcZgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABa2i6p+MAAihojHMAAWuSBAMBGTzBIAQABKwAAKxzAAFrkgQDARk8worgBAAGAwABa9cBGTxsAwABYYgFcBsAAitOBgsAAWwfAAFsYwABbdQAAokgBasAAWwhgA8AA/eQCAAABA8AAWzLAAFt1AAAAAQEBwABbOQAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAW0YuqfjAAIoaIxzAAFtQgQDARk/HSAEAASsAACscwABbUIEAwEZPx6JIAQABgMAAW2vARk+yAMAAWGMBXAbAAIrUgYLAAFt6wABbi8AAXAAAAKJ3AWrAAFt7YAPAAP3kAgAAAQPAAFuewABcAAAAAAICAsAAW6UAAACieGADnwAAwABbtwAAAKJ5YAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAW8guqfjAAIoaIxzAAFvSggDARlBsSAEAASsAACscwABb0oIAwEZQbKJ3AgACgMAAW+bARlBJgcAAW/LARlBXAMAAV5MBXAbAAIrVgYLAAFwFwABcFsAAXLEAAKO8AWrAAFwGYAPAAP3kAgAAAQPAAFwqwABcsQAAAAMDA8AAXDcAAACjvWADwAD60QDAAFxIAAAAo75gA58AAMAAXFwAAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFxsLqn4wACKGiMcwABcdoMAwEZRKkgBAAErAAArHMAAXHaDAMBGUSqjvAMAA4DAAFyLwEZQ94HAAFyWwEZRB4LAAFykwEZRFQDAAFh6AVwGwACK1oGCwABctsAAXMfAAF0uAACjugFqwABct2ADwAD95AIAAAEDwABc1sAAXS4AAAACAgLAAFzdAAAAocBgA58AAMAAXPAAAAChwmADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAFz9Lqn4wACKGiMcwABdB4IAwEZR4UgBAAErAAArHMAAXQeCAMBGUeGjugIAAoDAAF0XwEZRvoHAAF0kwEZRzADAAFhFAVwGwACK14GCwABdM8AAXUTAAF3LAACi9QFqwABdNGADwAD95AIAAAEDwABdVMAAXcsAAAADAwPAAF1bAAAAovZgA58AAMAAXWwAAACi92ADnwAAwABdgAAAAKL4YAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAXY0uqfjAAIoaIxzAAF2XgwDARlKdSAEAASsAACscwABdl4MAwEZSnaL1AwADgMAAXajARlJsgcAAXbPARlJ6gsAAXcHARlKIAMAAWEgBXAbAAIrYgYLAAF3QwABd4cAAXkAAAL/7AWrAAF3RYAPAAP3kAgAAAQPAAF3zwABeQAAAAAEBAcAAXfoAAAC//GADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAF4QLqn4wACKGiMcwABeGoEAwEZTRkgBAAErAAArHMAAXhqBAMBGU0a/+wEAAYDAAF4twEZTMQDAAFeiAVwGwACK2YGCwABeRcAAXlbAAF7jAADAAEAaAWrAAF5GYAPAAP3kAgAAAQPAAF5nwABe4wAAAAMDA8AAXm4AAACCmGADnwAAwABeewAAAL/DYAOfAADAAF6PAAAAog1gA58AAABcAT4BPTUAAAABAGADwABXjAEWwABeoi6p+MAAihojHMAAXqyDAMBGU/tIAQABKwAAKxzAAF6sgwDARlP7wABAGgMAA4DAAF6+wEZTyoHAAF7FwEZT2ILAAF7TwEZT5gDAAFekAVwGwACK2oGCwABe6MAAXvnAAF9AAAC/XAFqwABe6WADwAD95AIAAAEDwABfEMAAX0AAAAAAAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAXxkuqfjAAIoaIxzAAF8jgADARlSYSAEAASsAACscwABfI4AAwEZUmL9cAAAAAMAAV+YBXAbAAIrbgYLAAF9FwABfVsAAX/wAAL/1AWrAAF9GYAPAAP3kAgAAAQPAAF9ywABf/AAAAAICAsAAX4AAAAC/xGADnwAAwABflwAAAL/2YAPAAPyXAABcAT4BPTUAAAABAGADwABXjAEWwABfri6p+MAAihojHMAAX7iCAMBGVTZIAQABKwAAKxzAAF+4ggDARlU2v/UCAAKAwABf1cBGVRGBwABf6MBGVR8AwABXowFcBsAAityBgsAAYAHAAGASwABgcQAAv1oBasAAYAJgA8AA/eQCAAABA8AAYCfAAGBxAAAAAQEBwABgLgAAAL9YYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAYEEuqfjAAIoaIxzAAGBLgQDARlXWSAEAASsAACscwABgS4EAwEZV1r9aAQABgMAAYGHARlXBAMAAV+UBXAbAAIrdgYLAAGB2wABgh8AAYS0AAMAAQVwBasAAYHdgA8AA/eQCAAABA8AAYJ3AAGEtAAAABAQEwABgqwAAAMAAQV1gA58AAMAAYL0AAACDKWADnwAAwABgywAAAKE9YAOfAADAAGDZAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABg5i6p+MAAihojHMAAYPCEAMBGVptIAQABKwAAKxzAAGDwhADARlabwABBXAQABIDAAGEHwEZWWoHAAGETwEZWaoLAAGEbwEZWeIPAAGEjwEZWhgDAAFipAVwGwACK3oGCwABhMsAAYUPAAGHbAADAAEFYAWrAAGEzYAPAAP3kAgAAAQPAAGFdwABh2wAAAAICAsAAYWUAAADAAEFZYAPAAP5+AMAAYXoAAADAAEFaYAPAAPyXAABcAT4BPTUAAAABAGADwABXjAEWwABhkS6p+MAAihojHMAAYZuCAMBGV2dIAQABKwAAKxzAAGGbggDARldnwABBWAIAAoDAAGG2wEZXPIHAAGHHwEZXTgDAAFioAVwGwACK34GCwABh4MAAYfHAAGJKAACiyAFqwABh4WADwAD95AIAAAEDwABiEcAAYkoAAAAAAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAYhouqfjAAIoaIxzAAGIkgADARlf7SAEAASsAACscwABiJIAAwEZX+6LIAAAAAMAAWGcBXAbAAIrggYLAAGJPwABiYMAAYwcAAKPFAWrAAGJQYAPAAP3kAgAAAQPAAGJ3wABjBwAAAAMDA8AAYoQAAACjvWADwAD60QDAAGKVAAAAo8ZgA58AAMAAYqwAAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAGK8Lqn4wACKGiMcwABixoMAwEZYp0gBAAErAAArHMAAYsaDAMBGWKejxQMAA4DAAGLewEZYdIHAAGLpwEZYhILAAGL6wEZYkgDAAFh7AVwGwACK4YGCwABjDMAAYx3AAGNeAADAAEEbAWrAAGMNYAPAAP3kAgAAAQPAAGMxwABjXgAAAAAAAABcAT4BPTUAAAABAGADwABXjAEWwABjOi6p+MAAihojHMAAY0SAAMBGWURIAQABKwAAKxzAAGNEgADARllEwABBGwAAAADAAFexAVwGwACK4oGCwABjY8AAY3TAAGPjAAC/dAFqwABjZGADwAD95AIAAAEDwABjhMAAY+MAAAACAgLAAGOJAAAAgO5gA8AA/JcAwABjlgAAAL91YAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAY60uqfjAAIoaIxzAAGO3ggDARlnkSAEAASsAACscwABjt4IAwEZZ5L90AgACgMAAY8jARlm/gcAAY8/ARlnPAMAAV/0BXAbAAIrjgYLAAGPowABj+cAAZFQAAKM7AWrAAGPpYAPAAP3kAgAAAQPAAGQOwABkVAAAAAEBAcAAZBUAAACiKmADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAGQmLqn4wACKGiMcwABkMIEAwEZahEgBAAErAAArHMAAZDCBAMBGWoSjOwEAAYDAAGRGwEZabwDAAFhwAVwGwACK5IGCwABkWcAAZGrAAGTJAACiGwFqwABkWmADwAD95AIAAAEDwABkgcAAZMkAAAABAQHAAGSIAAAAohxgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABkmS6p+MAAihojHMAAZKOBAMBGWxtIAQABKwAAKxzAAGSjgQDARlsbohsBAAGAwABku8BGWwYAwABYLwFcBsAAiuWBgsAAZM7AAGTfwABlMAAAo48BasAAZM9gA8AA/eQCAAABA8AAZPPAAGUwAAAAAQEBwABk+gAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAZQcuqfjAAIoaIxzAAGURgQDARluySAEAASsAACscwABlEYEAwEZbsqOPAQABgMAAZSbARludAMAAWHwBXAbAAIrmgYLAAGU1wABlRsAAZZQAAMAAQVYBasAAZTZgA8AA/eQCAAABA8AAZVbAAGWUAAAAAQEBwABlYgAAAJKFYAOhqwAAXAE+AT01AAAAAQBgA8AAV4wBFsAAZW8uqfjAAIoaIxzAAGV5gQDARlxLSAEAASsAACscwABleYEAwEZcS8AAQVYBAAGAwABlisBGXDYAwABYowFcBsAAiueBgsAAZZnAAGWqwABmLwAAoh4BasAAZZpgA8AA/eQCAAABA8AAZcbAAGYvAAAAAgICwABlzQAAAKIfYAOfAADAAGXfAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABl7y6p+MAAihojHMAAZfmCAMBGXPJIAQABKwAAKxzAAGX5ggDARlzyoh4CAAKAwABmFsBGXM+BwABmIsBGXN0AwABYMAFcBsAAiuiBgsAAZjTAAGZFwABmoAAAoaUBasAAZjVgA8AA/eQCAAABA8AAZl7AAGagAAAAAQEBwABmZQAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAZnIuqfjAAIoaIxzAAGZ8gQDARl2SSAEAASsAACscwABmfIEAwEZdkqGlAQABgMAAZpbARl19AMAAV8IBXAbAAIrpgYLAAGalwABmtsAAZy0AAMAAQSQBasAAZqZgA8AA/eQCAAABA8AAZtDAAGctAAAAAgICwABm1wAAAJKFYAOfAADAAGbmAAAAImADkZgAAFwBPgE9NQAAAAEAYAPAAFeMARbAAGb1Lqn4wACKGiMcwABm/4IAwEZeOEgBAAErAAArHMAAZv+CAMBGXjjAAEEkAgACgMAAZxrARl4WgcAAZyHARl4kAMAAV8EBXAbAAIrqgYLAAGcywABnQ8AAZ6IAAKOLAWrAAGczYAPAAP3kAgAAAQPAAGdVwABnogAAAAEBAcAAZ1wAAACjA2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAGdyLqn4wACKGiMcwABnfIEAwEZe2kgBAAErAAArHMAAZ3yBAMBGXtqjiwEAAYDAAGePwEZexQDAAFhJAVwGwACK64GCwABnp8AAZ7jAAGglAACiVAFqwABnqGADwAD95AIAAAEDwABn2sAAaCUAAAABAQHAAGfhAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABn7i6p+MAAihojHMAAZ/iBAMBGX3FIAQABKwAAKxzAAGf4gQDARl9xolQBAAGAwABoG8BGX1wAwABXywFcBsAAiuyBgsAAaCrAAGg7wABosgAAolcBasAAaCtgA8AA/eQCAAABA8AAaGLAAGiyAAAAAQEBwABoaQAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAaHYuqfjAAIoaIxzAAGiAgQDARmAISAEAASsAACscwABogIEAwEZgCKJXAQABgMAAaKjARl/zAMAAV8wBXAbAAIrtgYLAAGi3wABoyMAAaUkAAKJZAWrAAGi4YAPAAP3kAgAAAQPAAGj0wABpSQAAAAEBAcAAaPsAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAGkILqn4wACKGiMcwABpEoEAwEZgn0gBAAErAAArHMAAaRKBAMBGYJ+iWQEAAYDAAGk/wEZgigDAAFfNAVwGwACK7oGCwABpTsAAaV/AAGonAACjbAFqwABpT2ADwAD95AIAAAEDwABpc8AAaicAAAAEBATAAGl6AAAAo21gA58AAMAAaYwAAACiYmADnwAAwABpogAAAKNuYAOfAADAAGm5AAAAo29gA58AAABcAT4BPTUAAAABAGADwABXjAEWwABpyi6p+MAAihojHMAAadSEAMBGYWBIAQABKwAAKxzAAGnUhADARmFgo2wEAASAwABp8sBGYSGBwABp/sBGYS+CwABqCMBGYT2DwABqGcBGYUsAwABX0wFcBsAAiu+BgsAAaizAAGo9wABrFQAAolsBasAAai1gA8AA/eQCAAABA8AAak/AAGsVAAAABAQEwABqVgAAAKJcYAOfAADAAGpoAAAAol1gA58AAMAAan8AAACiXmADnwAAwABqkgAAAKJfYAPAAPyXAABcAT4BPTUAAAABAGADwABXjAEWwABqry6p+MAAihojHMAAarmEAMBGYj5IAQABKwAAKxzAAGq5hADARmI+olsEAASAwABq1cBGYf2BwABq4cBGYguCwABq7MBGYhmDwABq+8BGYicAwABXzwFcBsAAivCBgsAAaxrAAGsrwABrlgAAouoBasAAaxtgA8AA/eQCAAABA8AAa0zAAGuWAAAAAQEBwABrUwAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAa2AuqfjAAIoaIxzAAGtqgQDARmLwSAEAASsAACscwABraoEAwEZi8KLqAQABgMAAa4zARmLbAMAAWJ4BXAbAAIrxgYLAAGubwABrrMAAbDAAAMAAQAYBasAAa5xgA8AA/eQCAAABA8AAa8XAAGwwAAAAAgICwABrzAAAAJKFYAOfAADAAGvYAAAAwABAB2ADwAD60QAAXAE+AT01AAAAAQBgA8AAV4wBFsAAa/AuqfjAAIoaIxzAAGv6ggDARmObSAEAASsAACscwABr+oIAwEZjm8AAQAYCAAKAwABsFMBGY3SBwABsG8BGY4IAwABX4AFcBsAAivKBgsAAbDXAAGxGwABsswAAoeYBasAAbDZgA8AA/eQCAAABA8AAbFbAAGyzAAAAAgICwABsXQAAAJKFYAOfAADAAGx2AAAAgldgA8AAWc0AAFwBPgE9NQAAAAEAYAPAAFeMARbAAGyFLqn4wACKGiMcwABsj4IAwEZkTUgBAAErAAArHMAAbI+CAMBGZE2h5gIAAoDAAGygwEZkKIHAAGynwEZkNgDAAFh2AVwGwACK84GCwABsuMAAbMnAAG0YAAC/gQFqwABsuWADwAD95AIAAAEDwABs3cAAbRgAAAABAQHAAGziAAAAgO5gA8AA/JcAAFwBPgE9NQAAAAEAYAPAAFeMARbAAGzvLqn4wACKGiMcwABs+YEAwEZk70gBAAErAAArHMAAbPmBAMBGZO+/gQEAAYDAAG0OwEZk2ADAAFfsAVwGwACK9IGCwABtHcAAbS7AAG2rAAC/iwFqwABtHmADwAD95AIAAAEDwABtQMAAbasAAAACAgLAAG1HAAAAv4xgA58AAMAAbV4AAAC/jWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAG1vLqn4wACKGiMcwABteYIAwEZllEgBAAErAAArHMAAbXmCAMBGZZS/iwIAAoDAAG2MwEZlcYHAAG2dwEZlfwDAAFf2AVwGwACK9YGCwABtsMAAbcHAAG5lAACjCgFqwABtsWADwAD95AIAAAEDwABt2MAAbmUAAAACAgLAAG3mAAAAowtgA58AAMAAbf8AAACjDGADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAG4ZLqn4wACKGiMcwABuI4IAwEZmQkgBAAErAAArHMAAbiOCAMBGZkKjCgIAAoDAAG47wEZmH4HAAG5OwEZmLQDAAFh3AVwGwACK9oGCwABuasAAbnvAAG8MAADAAEE7AWrAAG5rYAPAAP3kAgAAAQPAAG6YwABvDAAAAAICAsAAbp8AAACie2ADnwAAwABusgAAAKJ9YAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAbsYuqfjAAIoaIxzAAG7QggDARmbySAEAASsAACscwABu0IIAwEZm8sAAQTsCAAKAwABu7sBGZs+BwABu+8BGZt0AwABYFwFcBsAAiveBgsAAbxHAAG8iwABveQAAwABBNQFqwABvEmADwAD95AIAAAEDwABvOcAAb3kAAAABAQHAAG9AAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABvTS6p+MAAihojHMAAb1eBAMBGZ5ZIAQABKwAAKxzAAG9XgQDARmeWwABBNQEAAYDAAG9vwEZngQDAAFgNAVwGwACK+IGCwABvfsAAb4/AAG/qAACj5wFqwABvf2ADwAD95AIAAAEDwABvqMAAb+oAAAABAQHAAG+vAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABvvC6p+MAAihojHMAAb8aBAMBGaC9IAQABKwAAKxzAAG/GgQDARmgvo+cBAAGAwABv4MBGaBoAwABYDgFcBsAAivmBgsAAb+/AAHAAwABwVQAAv68BasAAb/BgA8AA/eQCAAABA8AAcBPAAHBVAAAAAQEBwABwGgAAAJ1DYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAcCouqfjAAIoaIxzAAHA0gQDARmjGSAEAASsAACscwABwNIEAwEZoxr+vAQABgMAAcEjARmixAMAAWBsBXAbAAIr6gYLAAHBawABwa8AAcO4AAL9/AWrAAHBbYAPAAP3kAgAAAQPAAHCEwABw7gAAAAICAsAAcIsAAAC/fWADnwAAwABwogAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAcK8uqfjAAIoaIxzAAHC5ggDARmlrSAEAASsAACscwABwuYIAwEZpa79/AgACgMAAcNPARmlIgcAAcOTARmlWAMAAWI8BXAbAAIr7gYLAAHDzwABxBMAAcXMAAKPbAWrAAHD0YAPAAP3kAgAAAQPAAHEawABxcwAAAAICAsAAcSEAAACShWADnwAAwABxMAAAACJgA5GYAABcAT4BPTUAAAABAGADwABXjAEWwABxPy6p+MAAihojHMAAcUmCAMBGahhIAQABKwAAKxzAAHFJggDARmoYo9sCAAKAwABxYMBGafaBwABxZ8BGagQAwABYpQFcBsAAivyBgsAAcXjAAHF9wABx2gAAokcAAAABA8AAcZfAAHHaAAAAAQEBwABxngAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAcasuqfjAAIoaIxzAAHG1gQDARmqsSAEAASsAACscwABxtYEAwEZqrKJHAQABgMAAcdDARmqXAMAAV5kBXAbAAIr9gYLAAHHfwABx8MAAcl8AAL9KAWrAAHHgYAPAAP3kAgAAAQPAAHIQwAByXwAAAAEBAcAAchcAAACdQ2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAHInLqn4wACKGiMcwAByMYEAwEZrQ0gBAAErAAArHMAAcjGBAMBGa0O/SgEAAYDAAHJSwEZrLgDAAFg/AVwGwACK/oGCwAByZMAAcnXAAHLSAACjSQFqwAByZWADwAD95AIAAAEDwAByj8AActIAAAABAQHAAHKWAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwAByoy6p+MAAihojHMAAcq2BAMBGa9pIAQABKwAAKxzAAHKtgQDARmvao0kBAAGAwAByyMBGa8UAwABYVQFcBsAAiv+BgsAActfAAHLowABzRQAAwABBNwFqwABy2GADwAD95AIAAAEDwABzAsAAc0UAAAABAQHAAHMJAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABzFi6p+MAAihojHMAAcyCBAMBGbHNIAQABKwAAKxzAAHMggQDARmxzwABBNwEAAYDAAHM7wEZsXgDAAFgPAVwGwACLAIGCwABzSsAAc1vAAHO+AACivQFqwABzS2ADwAD95AIAAAEDwABza8AAc74AAAACAgLAAHNyAAAAnatgA58AAMAAc4QAAACivmADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAHOPLqn4wACKGiMcwABzmYIAwEZtGkgBAAErAAArHMAAc5mCAMBGbRqivQIAAoDAAHOqwEZs94HAAHO2wEZtBQDAAFh4AVwGwACLAYGCwABzw8AAc9TAAHQTAACjgAFqwABzxGADwAD95AIAAAEDwABz38AAdBMAAAABAQHAAHPmAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwABz8y6p+MAAihojHMAAc/2BAMBGbbpIAQABKwAAKxzAAHP9gQDARm26o4ABAAGAwAB0CcBGbaUAwABYEAFcBsAAiwKBgsAAdBjAAHQpwAB0dAAAoo8BasAAdBlgA8AA/eQCAAABA8AAdDrAAHR0AAAAAQEBwAB0QQAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAdE4uqfjAAIoaIxzAAHRYgQDARm5RSAEAASsAACscwAB0WIEAwEZuUaKPAQABgMAAdGrARm48AMAAWHkBXAbAAIsDgYLAAHR5wAB0isAAdNkAAKKSAWrAAHR6YAPAAP3kAgAAAQPAAHSdwAB02QAAAAEBAcAAdKQAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAHSxLqn4wACKGiMcwAB0u4EAwEZu6EgBAAErAAArHMAAdLuBAMBGbuiikgEAAYDAAHTPwEZu0wDAAFh/AVwGwACLBIGCwAB03sAAdO/AAHU4AACiFgFqwAB032ADwAD95AIAAAEDwAB0/8AAdTgAAAABAQHAAHUGAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwAB1Ey6p+MAAihojHMAAdR2BAMBGb39IAQABKwAAKxzAAHUdgQDARm9/ohYBAAGAwAB1LsBGb2oAwABYgAFcBsAAiwWBgsAAdT3AAHVOwAB1+AAAonoBasAAdT5gA8AA/eQCAAABA8AAdV/AAHX4AAAABAQEwAB1awAAAIDuYAPAAPyXAMAAdXgAAACfkGADnwAAwAB1igAAAKJ8YAOfAADAAHWeAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwAB1ri6p+MAAihojHMAAdbiEAMBGcEJIAQABKwAAKxzAAHW4hADARnBConoEAASAwAB1ysBGcAGBwAB10cBGcBGCwAB13cBGcB+DwAB168BGcC0AwABYgQFcBsAAiwaBgsAAdf3AAHYOwAB2ewAAopkBasAAdf5gA8AA/eQCAAABA8AAdiPAAHZ7AAAAAgICwAB2KgAAAKHCYAOfAADAAHY3AAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwAB2Ry6p+MAAihojHMAAdlGCAMBGcQJIAQABKwAAKxzAAHZRggDARnECopkCAAKAwAB2Z8BGcN+BwAB2bsBGcO0AwABYFQFcBsAAiweBgsAAdoDAAHaRwAB23AAAopUBasAAdoFgA8AA/eQCAAABA8AAdqLAAHbcAAAAAQEBwAB2qQAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAdrYuqfjAAIoaIxzAAHbAgQDARnGiSAEAASsAACscwAB2wIEAwEZxoqKVAQABgMAAdtLARnGNAMAAWIMBXAbAAIsIgYLAAHbhwAB28sAAeHoAAKKHAWrAAHbiYAPAAP3kAgAAAQPAAHcHwAB4egAAAAUFBcAAdxEAAACA7mADwAD8lwDAAHciAAAAooNgA58AAMAAdzcAAACifGADnwAAwAB3TwAAAKKIYAOfAADAAHf+AAAAoolgA8AA+tEAAFwBPgE9NQAAAAEAYAPAAFeMARbAAHgVLqn4wACKGiMcwAB4H4UAwEZydUgBAAErAAArHMAAeB+FAMBGcnWihwUABYDAAHg+wEZyJIHAAHhFwEZyNILAAHhQwEZyQoPAAHhewEZyUITAAHhqwEZyXgDAAFiCAVwGwACLCYGCwAB4f8AAeJDAAHjpAADAAEAcAWrAAHiAYAPAAP3kAgAAAQPAAHihwAB46QAAAAEBAcAAeKgAAAC/uWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAHi8Lqn4wACKGiMcwAB4xoEAwEZzMkgBAAErAAArHMAAeMaBAMBGczLAAEAcAQABgMAAeNjARnMdAMAAV6kBXAbAAIsKgYLAAHjuwAB4/8AAeWQAAL/9AWrAAHjvYAPAAP3kAgAAAQPAAHkMwAB5ZAAAAAICAsAAeRMAAACi9mADnwAAwAB5IgAAAKk2YAPAAPyXAABcAT4BPTUAAAABAGADwABXjAEWwAB5My6p+MAAihojHMAAeT2CAMBGc9tIAQABKwAAKxzAAHk9ggDARnPbv/0CAAKAwAB5S8BGc7aBwAB5VsBGc8QAwABXqAFcBsAAiwuBgsAAeWnAAHl6wAB5yQAAo04BasAAeWpgA8AA/eQCAAABA8AAeY3AAHnJAAAAAQEBwAB5lAAAAKHCYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAeaEuqfjAAIoaIxzAAHmrgQDARnR7SAEAASsAACscwAB5q4EAwEZ0e6NOAQABgMAAeb/ARnRmAMAAWIUBXAbAAIsMgYLAAHnOwAB538AAel4AAL9XAWrAAHnPYAPAAP3kAgAAAQPAAHoEwAB6XgAAAAEBAcAAegsAAAC/WGADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAHoeLqn4wACKGiMcwAB6KIEAwEZ1EkgBAAErAAArHMAAeiiBAMBGdRK/VwEAAYDAAHpOwEZ0/QDAAFfoAVwGwACLDYGCwAB6Y8AAenTAAHrkAACiDAFqwAB6ZGADwAD95AIAAAEDwAB6hsAAeuQAAAACAgLAAHqNAAAAog1gA58AAMAAep8AAACiDmADwAD60QAAXAE+AT01AAAAAQBgA8AAV4wBFsAAeq4uqfjAAIoaIxzAAHq4ggDARnW5SAEAASsAACscwAB6uIIAwEZ1uaIMAgACgMAAesvARnWUgcAAetjARnWiAMAAWIQBXAbAAIsOgYLAAHrpwAB6+sAAe3sAAL+gAWrAAHrqYAPAAP3kAgAAAQPAAHsSwAB7ewAAAAICAsAAexkAAACiDWADnwAAwAB7LAAAAKIcYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAez0uqfjAAIoaIxzAAHtHggDARnZnSAEAASsAACscwAB7R4IAwEZ2Z7+gAgACgMAAe2DARnZEgcAAe23ARnZSAMAAWCwBXAbAAIsPgYLAAHuAwAB7kcAAfCAAAL+iAWrAAHuBYAPAAP3kAgAAAQPAAHuwwAB8IAAAAAICAsAAe7cAAACiDWADnwAAwAB7ygAAAKIcYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAe9suqfjAAIoaIxzAAHvlggDARncVSAEAASsAACscwAB75YIAwEZ3Fb+iAgACgMAAfAXARnbygcAAfBLARncAAMAAWC0BXAbAAIsQgYLAAHwlwAB8NsAAfMUAAL+kAWrAAHwmYAPAAP3kAgAAAQPAAHxVwAB8xQAAAAICAsAAfFwAAACiDWADnwAAwAB8bwAAAKIcYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAfIAuqfjAAIoaIxzAAHyKggDARnfDSAEAASsAACscwAB8ioIAwEZ3w7+kAgACgMAAfKrARneggcAAfLfARneuAMAAWC4BXAbAAIsRgYLAAHzKwAB828AAfSYAAL9MAWrAAHzLYAPAAP3kAgAAAQPAAHzswAB9JgAAAAEBAcAAfPMAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAH0ALqn4wACKGiMcwAB9CoEAwEZ4Y0gBAAErAAArHMAAfQqBAMBGeGO/TAEAAYDAAH0cwEZ4TgDAAFiIAVwGwACLEoGCwAB9K8AAfTzAAH2FAADAAEFeAWrAAH0sYAPAAP3kAgAAAQPAAH1UwAB9hQAAAAAAAABcAT4BPTUAAAABAGADwABXjAEWwAB9XS6p+MAAihojHMAAfWeAAMBGeO5IAQABKwAAKxzAAH1ngADARnjuwABBXgAAAADAAFiqAVwGwACLE4GCwAB9isAAfZvAAH44AAC/UAFqwAB9i2ADwAD95AIAAAEDwAB91cAAfjgAAAABAQHAAH3cAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwAB96S6p+MAAihojHMAAffOBAMBGeX5IAQABKwAAKxzAAH3zgQDARnl+v1ABAAGAwAB+LsBGeWkAwABYiQFcBsAAixSBgsAAfj3AAH5OwAB+pwAAojoBasAAfj5gA8AA/eQCAAABA8AAfmbAAH6nAAAAAQEBwAB+bQAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAfnouqfjAAIoaIxzAAH6EgQDARnoVSAEAASsAACscwAB+hIEAwEZ6FaI6AQABgMAAfp3ARnoAAMAAWAQBXAbAAIsVgYLAAH6swAB+vcAAfy0AAL9eAWrAAH6tYAPAAP3kAgAAAQPAAH7VwAB/LQAAAAICAsAAftwAAACShWADnwAAwAB+7gAAAIJrYAPAAFoWAABcAT4BPTUAAAABAGADwABXjAEWwAB++i6p+MAAihojHMAAfwSCAMBGerxIAQABKwAAKxzAAH8EggDARnq8v14CAAKAwAB/HcBGepeBwAB/JMBGeqUAwABXxwFcBsAAixaBgsAAfzLAAH9DwAB/lAAAv3ABasAAfzNgA8AA/eQCAAABA8AAf1fAAH+UAAAAAQEBwAB/XgAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAf2suqfjAAIoaIxzAAH91gQDARntcSAEAASsAACscwAB/dYEAwEZ7XL9wAQABgMAAf4rARntHAMAAV98BXAbAAIsXgYLAAH+ZwAB/qsAAf+sAAKFjAWrAAH+aYAPAAP3kAgAAAQPAAH++wAB/6wAAAAAAAABcAT4BPTUAAAABAGADwABXjAEWwAB/xy6p+MAAihojHMAAf9GAAMBGe+VIAQABKwAAKxzAAH/RgADARnvloWMAAAAAwABYDAFcBsAAixiBgsAAf/DAAIABwACAQgAAv+sBasAAf/FgA8AA/eQCAAABA8AAgA3AAIBCAAAAAQEBwACAFAAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAgCEuqfjAAIoaIxzAAIArgQDARnxzSAEAASsAACscwACAK4EAwEZ8c7/rAQABgMAAgDjARnxeAMAAWFABXAbAAIsZgYLAAIBHwACAWMAAgLkAAKKiAWrAAIBIYAPAAP3kAgAAAQPAAIB1wACAuQAAAAEBAcAAgHwAAACio2ADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAICILqn4wACKGiMcwACAkoEAwEZ9CkgBAAErAAArHMAAgJKBAMBGfQqiogEAAYDAAICwwEZ89QDAAFhMAVwGwACLGoGCwACAvsAAgM/AAIEeAAC/UgFqwACAv2ADwAD95AIAAAEDwACA28AAgR4AAAABAQHAAIDiAAAAv1NgA58AAABcAT4BPTUAAAABAGADwABXjAEWwACA9i6p+MAAihojHMAAgQCBAMBGfaFIAQABKwAAKxzAAIEAgQDARn2hv1IBAAGAwACBDcBGfYwAwABYigFcBsAAixuBgsAAgSPAAIE0wACBhwAAv04BasAAgSRgA8AA/eQCAAABA8AAgUnAAIGHAAAAAQEBwACBUAAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAgV0uqfjAAIoaIxzAAIFngQDARn44SAEAASsAACscwACBZ4EAwEZ+OL9OAQABgMAAgX3ARn4jAMAAWFYBXAbAAIscgYLAAIGMwACBncAAgfAAAKPXAWrAAIGNYAPAAP3kAgAAAQPAAIGywACB8AAAAAEBAcAAgbkAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAIHGLqn4wACKGiMcwACB0IEAwEZ+z0gBAAErAAArHMAAgdCBAMBGfs+j1wEAAYDAAIHmwEZ+ugDAAFiLAVwGwACLHYGCwACB9cAAggbAAIJlAACiNAFqwACB9mADwAD95AIAAAEDwACCIcAAgmUAAAABAQHAAIIoAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwACCNS6p+MAAihojHMAAgj+BAMBGf2ZIAQABKwAAKxzAAII/gQDARn9mojQBAAGAwACCW8BGf1EAwABYBwFcBsAAix6BgsAAgmrAAIJ7wACCwAAAo+QBasAAgmtgA8AA/eQCAAABA8AAgonAAILAAAAAAQEBwACCkAAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAgp0uqfjAAIoaIxzAAIKngQDARn/9SAEAASsAACscwACCp4EAwEZ//aPkAQABgMAAgrbARn/oAMAAWIwBXAbAAIsfgYLAAILFwACC1sAAg0sAAL98AWrAAILGYAPAAP3kAgAAAQPAAILowACDSwAAAAICAsAAgu8AAAC/fWADnwAAwACDBgAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAgxMuqfjAAIoaIxzAAIMdggDARoCiSAEAASsAACscwACDHYIAwEaAor98AgACgMAAgzDARoB/gcAAg0HARoCNAMAAWI4BXAbAAIsggYLAAINQwACDYcAAg8IAAKGoAWrAAINRYAPAAP3kAgAAAQPAAIN9wACDwgAAAAEBAcAAg4QAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAIORLqn4wACKGiMcwACDm4EAwEaBQkgBAAErAAArHMAAg5uBAMBGgUKhqAEAAYDAAIO4wEaBLQDAAFiQAVwGwACLIYGCwACDx8AAg9jAAIQ7AAChqwFqwACDyGADwAD95AIAAAEDwACD9cAAhDsAAAABAQHAAIP8AAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwACECS6p+MAAihojHMAAhBOBAMBGgdlIAQABKwAAKxzAAIQTgQDARoHZoasBAAGAwACEMcBGgcQAwABYkQFcBsAAiyKBgsAAhEDAAIRRwACEmgAAogABasAAhEFgA8AA/eQCAAABA8AAhGDAAISaAAAAAQEBwACEZwAAAKE9YAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAhHUuqfjAAIoaIxzAAIR/gQDARoJwSAEAASsAACscwACEf4EAwEaCcKIAAQABgMAAhI/ARoJbAMAAWJIBXAbAAIsjgYLAAISfwACEsMAAhWsAAKJlAWrAAISgYAPAAP3kAgAAAQPAAITGwACFawAAAAMDA8AAhNYAAAAiYAORmADAAITlAAAAoCZgA58AAMAAhPcAAACdQ2ADnwAAAFwBPgFJwACFBxbAAIULLsAAQr3AAIobPgE9NQAAAAEAYAPAAFeMARbAAIUiLqn4wACKGiMcwACFLIMAwEaDN0gBAAErAAArHMAAhSyDAMBGgzeiZQMAA4DAAIVDwEaC8oHAAIVMwEaC/4LAAIVYwEaDDQDAAFiiAVw/BsAAiySBgsAAhXDAAIWBwACFygAAv/kBasAAhXFgA8AA/eQCAAABA8AAhZnAAIXKAAAAAAAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAIWiLqn4wACKGiMcwACFrIAAwEaD00gBAAErAAArHMAAhayAAMBGg9O/+QAAAADAAFelAVwGwACLJYGCwACFz8AAheDAAIY3AAC/lQFqwACF0GADwAD95AIAAAEDwACF88AAhjcAAAABAQHAAIX6AAAAohxgA58AAABcAT4BPTUAAAABAGADwABXjAEWwACGCy6p+MAAihojHMAAhhWBAMBGhGFIAQABKwAAKxzAAIYVgQDARoRhv5UBAAGAwACGKcBGhEwAwABX+AFcBsAAiyaBgsAAhjzAAIZNwACGlgAAv/oBasAAhj1gA8AA/eQCAAABA8AAhmXAAIaWAAAAAAAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAIZuLqn4wACKGiMcwACGeIAAwEaE6kgBAAErAAArHMAAhniAAMBGhOq/+gAAAADAAFeqAVwGwACLJ4GCwACGm8AAhqzAAIbtAACiEQFqwACGnGADwAD95AIAAAEDwACGuMAAhu0AAAABAQHAAIa/AAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwACGzC6p+MAAihojHMAAhtaBAMBGhXhIAQABKwAAKxzAAIbWgQDARoV4ohEBAAGAwACG48BGhWMAwABYpgFcBsAAiyiBgsAAhvLAAIcDwACHZAAAoa4BasAAhvNgA8AA/eQCAAABA8AAhw3AAIdkAAAAAgICwACHFAAAAJ+QYAOfAADAAIcmAAAAnUNgA58AAABcAT4BPTUAAAABAGADwABXjAEWwACHNi6p+MAAihojHMAAh0CCAMBGhh1IAQABKwAAKxzAAIdAggDARoYdoa4CAAKAwACHS8BGhfqBwACHV8BGhggAwABYMgFcBsAAiymBgsAAh2nAAId6wACH2wAAo0IBasAAh2pgA8AA/eQCAAABA8AAh5DAAIfbAAAAAQEBwACHlwAAAKNDYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAh6ouqfjAAIoaIxzAAIe0gQDARoa9SAEAASsAACscwACHtIEAwEaGvaNCAQABgMAAh8vARoaoAMAAWHMBXAbAAIsqgYLAAIfgwACH8cAAiFgAAKITAWrAAIfhYAPAAP3kAgAAAQPAAIgKwACIWAAAAAEBAcAAiA8AAACiFGADwAD8lwAAXAE+AT01AAAAAQBgA8AAV4wBFsAAiCMuqfjAAIoaIxzAAIgtgQDARodWSAEAASsAACscwACILYEAwEaHVqITAQABgMAAiEfARoc/AMAAWBkBXAbAAIsrgYLAAIhdwACIbsAAiLcAAKIFAWrAAIheYAPAAP3kAgAAAQPAAIh+wACItwAAAAEBAcAAiIUAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAIiSLqn4wACKGiMcwACInIEAwEaH7UgBAAErAAArHMAAiJyBAMBGh+2iBQEAAYDAAIitwEaH2ADAAFiTAVwGwACLLIGCwACIvMAAiM3AAIlEAACjTAFqwACIvWADwAD95AIAAAEDwACI4sAAiUQAAAACAgLAAIjpAAAAkoVgA58AAMAAiQIAAACCV2ADwABZzQAAXAE+AT01AAAAAQBgA8AAV4wBFsAAiREuqfjAAIoaIxzAAIkbggDARoiUSAEAASsAACscwACJG4IAwEaIlKNMAgACgMAAiTHARohvgcAAiTjARoh9AMAAWJQBXAbAAIstgYLAAIlJwACJWsAAiaMAAKPlAWrAAIlKYAPAAP3kAgAAAQPAAIlqwACJowAAAAEBAcAAiXEAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAIl+Lqn4wACKGiMcwACJiIEAwEaJNEgBAAErAAArHMAAiYiBAMBGiTSj5QEAAYDAAImZwEaJHwDAAFiNAVwGwACLLoGCwACJqMAAibnAAIouAACjSwFqwACJqWADwAD95AIAAAEDwACJzcAAii4AAAACAgLAAInUAAAAkoVgA58AAMAAie0AAACCV2ADwABZzQAAXAE+AT01AAAAAQBgA8AAV4wBFsAAifwuqfjAAIoaIxzAAIoGggDARonbSAEAASsAACscwACKBoIAwEaJ26NLAgACgMAAihvARom2gcAAiiLARonEAMAAWJcBXAbAAIsvgYLAAIozwACKRMAAirsAAKLMAWrAAIo0YAPAAP3kAgAAAQPAAIpZwACKuwAAAAICAsAAimAAAACizWADnwAAwACKcgAAAJ1DYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAioIuqfjAAIoaIxzAAIqMggDARoqJSAEAASsAACscwACKjIIAwEaKiaLMAgACgMAAiqLARopmgcAAiq7ARop0AMAAWDsBXAbAAIswgYLAAIrAwACK0cAAizoAAKKlAWrAAIrBYAPAAP3kAgAAAQPAAIrbwACLOgAAAAICAsAAiuIAAACfkGADnwAAwACK9AAAAKKmYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAiwguqfjAAIoaIxzAAIsSggDARos3SAEAASsAACscwACLEoIAwEaLN6KlAgACgMAAix3ARosUgcAAiynARosiAMAAWEsBXAbAAIsxgYLAAIs/wACLUMAAi78AAKPPAWrAAItAYAPAAP3kAgAAAQPAAItqwACLvwAAAAICAsAAi3EAAACShWADnwAAwACLfAAAAIDuYAPAAPyXAABcAT4BPTUAAAABAGADwABXjAEWwACLiS6p+MAAihojHMAAi5OCAMBGi+dIAQABKwAAKxzAAIuTggDARovno88CAAKAwACLrsBGi8KBwACLtcBGi9AAwABYWAFcBsAAizKBgsAAi8TAAIvVwACMSgAAoxUBasAAi8VgA8AA/eQCAAABA8AAi/vAAIxKAAAAAQEBwACMAgAAAJKFYAOfAAAAXAE+AT01AAAAAQBgA8AAV4wBFsAAjA8uqfjAAIoaIxzAAIwZgQDARoyHSAEAASsAACscwACMGYEAwEaMh6MVAQABgMAAjEDARoxyAMAAWJgBXAbAAIszgYLAAIxPwACMYMAAjNMAAKMSAWrAAIxQYAPAAP3kAgAAAQPAAIyFwACM0wAAAAEBAcAAjIwAAACShWADnwAAAFwBPgE9NQAAAAEAYAPAAFeMARbAAIyZLqn4wACKGiMcwACMo4EAwEaNHkgBAAErAAArHMAAjKOBAMBGjR6jEgEAAYDAAIzJwEaNCQDAAFiaAVwGwACLNIGCwACM2MAAjOnAAI1IAACjDgFqwACM2WADwAD95AIAAAEDwACNBMAAjUgAAAABAQHAAI0LAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwACNGC6p+MAAihojHMAAjSKBAMBGjbVIAQABKwAAKxzAAI0igQDARo21ow4BAAGAwACNPsBGjaAAwABYmQFcBsAAizWBgsAAjU3AAI1ewACN/AAArWYBasAAjU5gA8AA/eQCAAABA8AAjXHAAI38AAAABAQEwACNgQAAACJgA5GYAMAAjZAAAAiEYGADnwAAwACNngAAAINiYAPAAPyXAMAAjaoAAABhYAPAAPyXAABcAT4BPTUAAAABAGADwABXjAEWwACNuC6p+MAAihojHMAAjcKEAMBGjnhIAQABKwAAKxzAAI3ChADARo54rWYEAASAwACN1sBGjjeBwACN38BGjkSCwACN6cBGjlKDwACN8cBGjmIAwABYpAFcBsAAizaBgsAAjgHAAI4SwACOhwAAougBasAAjgJgA8AA/eQCAAABA8AAji3AAI6HAAAAAgICwACONAAAAJXSYAOfAADAAI5CAAAAkoVgA58AAABcAT4BPTUAAAABAGADwABXjAEWwACO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wABEIsAAWgYCAAEnwABCSgGh6ykFwACMSIGJwABEXcAARGPAAEUIAbmWAAPAAESZwABFCAAAAAAAAABgA8AAjEMBPwEJAMAARKTAAFoGAwABJ8AAQvcCoespwABC+ikBBsAAjEWBicAARQ3AAEUfwABI0gAAwABBrwFqwABFDmADwAD95AIAAAEDwABFL8AASNIAAAACAgLAAEU2AAAAkoVgA58AAMAARUQAAAChlGADwABYsgAAYAOfAAE+BU7AAEVYwABFYwAAncpgA58AARbAAEVrgMAARWXARw5wg7WfG0AhHMAARYwWwABFh4LAAEV8wEcOl4JrnxhIAQABasAARY9gA8AA/JfAAJsCAMAA/bvAAEV8wABFnwBJwABFphbAAEW1gsAARarARw6XnSefDz4CPR7AAEXLwACL+gIAAoLAAEXswEcOl4HAAEX4wEcOfgBKwABGBwGCwABGDsBHDpc/ScAARjUiHsAARjnAAFo+AgACgsAARkbARw6XasAARlJdA8AA/TsBYAPAAP5+wAFpNQABHsAARnrAAFnMAQABgsAARpLARw6XAD4BPYrAAEanwEcOlxzAAEa7gcAARrTARw5+wABBnQMAAoDAAEbVwEcOcC4BIhzAAEcWasAARvtdA5GvAWEDAWADnwBgA5GYs9WILwEAAYLAAEckwEcOlwCRs8AAWQE+Aj0cwABHTIHAAEdFwEcOfsAAQY0CAAKCwABHd8BHDpdqwABHiV0Dka8BYQMBYAOfAGADkZiz1QDAAFmIScAAR6whFsAAR7yCwABHscBHDpedop8RPgE9isAASGfARw6XHMAASIQWwABIe4HAAEh0wEcOfsAAQYDAAFi9wABBnQEAAYLAAEiewEcOlwDAAIvRP0rAAEi9AYLAAEjEwEcOlwAARw44AEcQhQAAAAECwACMSYGJwABJBcAASQvAAE1nA8AAXF4AAAFgAcAAWc0AAAABBcAAjE2BicAASUvAAElRwABJqwEAAAPAAElywABJqwAAAAAAAABgA8AAjEkBPwEJAMAASX3AAFoGAgABJ8AAQm0BoespAQbAAIxLgYnAAEmwwABJwsAATWUAAMAAQa8BasAASbFgA8AA/eQCAAABA8AASdLAAE1lAAAAAgICwABJ2QAAAJKFYAOfAADAAEnnAAAAoZRgA8AAWLIAAGADnwABPgVO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AWADwAD+fsABaasAAR7AAGoGwACL+wEAAYLAAGomwEch1QA+AUrAAGo7ARzAAGpJgcAAakLARyG8wABBnQIAAoDAAGpjwEchri4AwABZAUnAAGp8IRbAAGqMgsAAaoHARyHVnaKfET4BSsAAazEBHMAAaz+BwABrOMBHIbzAAEGdBAACgsAAa1nARyHVLgIiHMAAa59qwABrhF0Dka8BYQMBYAOfAGADkZiz1YgvAQABgsAAa63ARyHVAJGzwABCE4LAAGvUwEch1cAAWQE+Aj0cwABr+4HAAGv0wEchvMAAQY0CAAKCwABsJsBHIdVqwABsOF0Dka8BYQMBYAOfAGADkZiz1QDAAFmISsAAbFsBgsAAbGLARyHVAABHIXYARyQKAAAAAQLAAIxugYnAAGyvwABstcAAcQIDwABcZAAAAWABwABZzQAAAAEFwACMcoGJwABs+8AAbQHAAG11AQAAA8AAbSjAAG11AAAAAAAAAGADwACMbgE/AQkAwABtM8AAWgYCAAEnwABCpQGh8CkBBsAAjHCBicAAbXrAAG2MwABxAAAAwABBrwFqwABte2ADwAD95AIAAAEDwABtnMAAcQAAAAACAgLAAG2jAAAAkoVgA58AAMAAbbEAAAChlGADwABYsgAAYAOfAAE+BU7AAG3FwABt0AAAncpgA58AARbAAG3YgMAAbdLARyS6g7WfG0AhHMAAbfkWwABt9ILAAG3pwEck4YJrnxhIAQABasAAbfxgA8AA/JfAAJsCAMAA/bvAAG3pwABuDABJwABuExbAAG4igsAAbhfARyThnSefDz4CPR7AAG44wACL+gIAAoLAAG5ZwEck4YHAAG5lwEckyABKwABudAGCwABue8BHJOE/ScAAbqIewABupsAAWj4CAAKCwABus8BHJOFqwABuv10DwAD9OwFgA8AA/n7AAWlNAD4BPYrAAG7VwEck4RzAAG7pgcAAbuLARyTIwABBnQMAAoDAAG8DwEckui4BIhzAAG9EasAAbyldA5GvAWEDAWADnwBgA5GYs9WILwEAAYLAAG9SwEck4QCRs8AAWQE+Aj0cwABveoHAAG9zwEckyMAAQY0CAAKCwABvpcBHJOFqwABvt10Dka8BYQMBYAOfAGADkZiz1QDAAFmIScAAb9ohFsAAb+qCwABv38BHJOGdop8RPgE9isAAcJXA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gRQABMAAjJKBiopVil4JpPPAAIyLAGADtf8ABMAAjJOBiop8io8Jr7LAAIyLAGADu40ABMAAjJSBioqpirgJtHzAAIyLAGADuaAABMAAjJWBiorRiuAJtEDAAIyLAGADvEoABMAAjJaBior3iwQJwABcf8AAjIsAYAPAAEwPAATAAIyXgYqLJIs6CbgUwACMiwBgA8AAexoABMAAjJiBiotRi14JwABTVcAAjIsAYAPAAIJuAATAAIyZgYqLc4t+CcAASFLAAIyLAGADwABqyAAEwACMmoGKi5mLoQnAAFG4wACMiwBgA8AAg1YABMAAjJuBiou7i8sJwABTrcAAjIsAYAPAAHp9AATAAIycgYqL6IvyCcAAXIDAAIyLAGADwAB2kwAEwACMnYGKjBCMGwnAAFPowACMiwBgA8AAdtUABMAAjJ6BiowzjEQJwABcgcAAjIsAYAPAAHf1AATAAIyfgYqMZYx8CbvGwACMiwBgA8AAesYABMAAjKCBioykjMIJuBPAAIyLAGADwAB6NQAEwACMoYGKjO2M+wnAAFyCwACMiwBdA8AA/W0CYAO9PGADwACVmAAEwACMooGKjQuNEQm4FcAAjIsAYAPAAGQ4AATAAIyjgYqNK40wCbhRwACMiwBgA8AAXScABMAAjKSBio1HjVMJtiPAAIyLAGADwABNnAAEwACMpYGKjWyNegm4eMAAjIsAYAPAAG5tAATAAIymgYqNkY2eCcAAU//AAIyLAGADwABDKAAEwACMp4GKjcKN3Am4U8AAjIsAYAPAAEJlAATAAIyogYqOOY5ACcAAV/XAAIyLAGADwACIvAAEwACMs4GKj4mPkgmoJgBgA8AAjN0ABMAAjKmBio+mj68JwABJU8AAjIsAYAPAAI0uAATAAIyqgYqPyY/WCcAAV0jAAIyLAGADvVEABMAAjKuBio/2kAcJwABcg8AAjIsAXQPAAPz5AWADvSoABMAAjKyBipBYkH0YwABchMAAjIsAYAPAAPrRASoEwACMrYGKkJ6QwAnAAFyFwACMiwBdA8AA/i8BYAPAAGMpATUAAAABAF0DwAD+LwFgA8AAYykBHgDAAMGmAAFgA8AAYykAAIAAwEc+rATAAIyugYqWbJaNCZvvwACMiwBdA8AA/W0CYAO9KmADwACOJgEylotgA70qYAPAAI4mAATAAIyvgYqX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wABHEsBHXZUChCAhFsAARzKAwABHKsBHXXysr71HwABNvykGwACMxoGKwABHVsAAR2TAAEjBAADAAFzAwACMiwAAAAEDwABHc8AASMEAAAABAQHAAEeBAAAAwABcvmADwACNGwAAXQPAAP07AWADwACODQE+BE7AAEejwABHrQAAhupdA8AA/TsBYAPAAI4NAR7AAEezwAD2kgEBYAPAAI4NARbAAEfOgMAAR8HAR18HYcAAjSoATsAAR9/AAEflAACA7mADwAD8lwGTPRzAAEf7gMAAR+7AR18Hg/0BAAE0wABIAwPAAEgDwABIpgAAAAMDA8AASBIAAACESGADvRsAwABILQAAAISIXQPAAP07AWADvSoAwABIUQAAAISUXQPAAP07AWADvTwAAGADwAD9oQE+AT0cwABIa4HAAEhiwEdfK4C/AgACNQAAAAEAYAPAAPyXAYLAAEhswEdfbDUAAAABAGADwAD8lwGKwABIbMBHX2wcwABIcYYAwEdf/2QBAAGUAMAA/b2GAMBHX/8cwABIdy7AAFzMwACMiwMAA4PAAEiFwEdfqITAAEiOwEdftoXAAEiXwEdfywDAAIzIAMAA/UsAwACNKErAAEitAYHAAEi0wEdfKwbAAIzHgYrAAEjGwABIy8AAXxAAAMAAXKDAAIyLAAAAAQPAAEjdwABfEAAAAAEBAcAASOsAAADAAFy+YAPAAI0bAABcAT4EScAASP8cwABJDBbAAEkDLpvvwACMi8AAjK6HWAEAARbAAEkoFsAASRgutHzAAIyLwACMlJr/uKoAwAD9gD4CTsAASUbAAElZAADAAFzNYAPAAJWiARzAAEliFsAASVsuuBXAAIyLwACMoq/qAQABGsAASXu4dwDAAGSrPRzAAEooFsAASh4cwABKABbAAEn4LpvvwACMi8AAjK5LAQABFsAAShEWwABKAS60fMAAjIvAAIyUmv+4qgDAAP2BwABczsAAjjRWAQABJsAASiwBHMAASiwuwABcz8AAjIsCAAIfwABKTMAAZqUBAAEnIwAcwABKdmrAAEp3YAPAAJgGwAEgmyACAAInwABc0IHAAEqgwEdhFgDAAJgIAMAAjNJgA8AAjo8AwAD9TD9OwABMzMAATN0AALh9YAPAAI4mARzAAEznFsAATN8um+/AAIyLwACMrksBAAEWwABM+BbAAEzo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A8AAet8BMsAAovtgA8AAlaJgA8AAet8ARsAAowPAAKNtwACjIgAAALsJYAPAAHrfABbAAKNRFsAAozkuu8bAAIyLwACMn694wAB60D4ETsAAo33AAKOCAACAvWADwACVogEcwACjixbAAKOELrgVwACMi8AAjKKv9gEAARbAAKOthcAAo6HAR54dhIjAAHriAMAAZL09HMAAo8ODwACjvcBHnblWAQABhsAAo8fAR55LAMAA/UxAIRzAAKP2hMAAo+fAR53gh1gBAAGGwACkAsBHnksAwAD9gMAAo+bAAKQHASQAByfAAF0WhsAApD/AR55LJ8AAXRccwACkbITAAKRewEed4EsBAAGGwACkbcBHnksAwAD9gSfAAF0YhcAApHvAR54dJ4FqPRzAAKSghMAApJLAR53ggL8CAAKGwACkocBHnkuFwACkqcBHnh0AwAD9gj0cwACkxoPAAKTAwEeduYCuAAAAAMAA/U5KwACk0gEcwACk34PAAKTZwEeduYCrAQFgA8AAjqkBNMAApOMDwACk48AApdIAAAABAQHAAKTsAAAAgL1gA8AAlaIAAGADwACOqQE+A07AAKUUwAClIAAAuwlgA8AAet8BHMAApTCEwAClIsBHneBLAQABhcAApTHAR5+cAMAA/YFOwAClTMAApVEAAIKXYAPAAJWYARzAAKVrgMAApV3AR5yJwABdGQEAAYbAAKWIwEeftwDAAKMKSsAApZwBH8AApafAAI6vAwADhcAApbjAR5+cgsAApb7AR513h8AApcbAR5/rAADAAP0EBsAAjNWBisAApdzAAKXowACuGAAAwABc4cAAjIsAAAABA8AApfTAAK4YAAAABAAABMAApgIAAADAAFzfYAPAAPrRAWrAAKYQYAPAAPrRAMAApiIAAADAAFz0YAPAAPrRAWrAAKY8YAPAAPrRAMAAplcAAACESGADvRsBagBgA8AA/aF5wACmcgAAAJn6YAO9KgFqAGADwAD9oXldA8AA/TsBYAPAAI5WAT4FTsAAporAAKaRAACEi10DwAD9OwFgA8AAjlYBMcAApppgA8AAjlYAT8AApqPAAKaoAAABhSNhAwZgA71OYAPAAJWiYAPAAJWiYAPAAPrRYAPAAPrRYAPAAPrRXAADwACmssAArQMAAAAGBgbAAKa/AAAAhJtgA71OAMAAps4AAACAvWADwACVogDAAKbcAAAAwABcemADwACVogDAAKb3AAAAwABce2ADwAD60QDAAKcJAAAAwABcfGADwAD60QDAAKcbAAAAwABcfWADwAD60QAAXAE+Ck7AAKc7wACnRwAAwABdGmADwAD8lwGTScAAp1IUwACnVsBHoZoJAD4BScAAp20igMAAp3HAR6CFASEcwACnnxbAAKeOLsAAU63AAIyLwACMm8AAU5QBAAGGwACnucBHoWoAwAB6hz4BPRXAAKfNwEeh1gyUPgI9FcAAp/nAR6HWDBzAAKgFFMAAp/nAR6HWDABkAQABlQDAAP29ScAAqPQhgcAAqPnAR6CjPgE9FcAAqSHAR6HWDBzAAKktFMAAqSHAR6HWDABkAQABlADAAP29Pz9OwACpXMAAqWgAAMAAXRtgA8AA/JcBk0nAAKlzFMAAqXfAR6GsCgA+AUnAAKmOIoDAAKmSwEeghQEhHMAAqcAWwACpry7AAFOtwACMi8AAjJvAAFOVAQABhsAAqdrAR6FqAMAAeog+AT0VwACp7sBHoqkNlD4CPRXAAKoawEeiqQ0cwACqJhTAAKoawEeiqQ0AZAEAAZUAwAD9vUnAAKo2IYHAAKo7wEegoz4BPRXAAKpjwEeiqQ0cwACqbxTAAKpjwEeiqQ0AZAEAAZQAwAD9vT8/TsAAqqzAAKq2AAC0sGADwABuewEcwACqxxbAAKq4Lrh4wACMi8AAjKW0sgEAASbAAKrUAYbAAKrUwEehamADwAB17QDAAG53TsAAqvAAAADAAF0cYAPAAGFCAEnAAKsOFsAAqxwUwACrEsBHo3wOAMAATbDAAG5/PgE9FcAAq0DAR6PEDxbAAKtjFMAAq1nAR6N8DgCWaMAAbn4/TsAAq40AAADAAE2RYAPAAGFCAEnAAKuiFsAAq7AUwACrpsBHo3wOAMAATa/AAG6MPgE9FcAAq9HAR6QYEBbAAKvrFMAAq+HAR6N8DgDAAE2RwABujT89HMAArBCEwACsCcBHoQBWAQABH8AArBjAAI5tCQAJhsAArCnAR6Fqh8AArDrAR6F4FMAArErAR6GICAAUwACsYsBHodYMABTAAKx5wEeiqQ0AFMAArJDAR6G+CwAUwACsrsBHo8QPABTAAKzQwEekGBAAFsAArPMUwACs6cBHo3wOAMAASODAAG6BAADAAP1MTsAArRfAAK0fAACHRWADwACNAwEfwACtJcAAjRQHAAcWwACtMi6yZMAAjIvAAIyRFsAArTwur7LAAIyLwACMkxbAAK1ZLrR8wACMi8AAjJQWwACtai7AAFx/wACMi8AAjJYWwACteS7AAEhSwACMi8AAjJkWwACthi64FcAAjIvAAIyiFsAArY4utiPAAIyLwACMpAA9HMAAramGwACtocBHpP/AAF0dBAABhcAArbXAR6ErA8AAXN+AwACt18BHoIWESILAAK3uwEegwZn6g8AArfzAR6DYwACNDkrAAK4HAYTAAK4OwEehAAbAAIzWgYrAAK4dwACuOMAAs6sAAMAAXN7AAIyLAAAAAQPAAK5UwACzqwAAAAAAAABdA8AA/PkBYAPAAI6pAT4ITsAArnbAAK6EAADAAFy8YAPAAKL7AR/AAK6KwACjEQcABxbAAK6sLrR8wACMi8AAjJQWwACuyxbAAK7FLrhRwACMi8AAjKOv08AAXTYWwACu3C64FMAAjIvAAIyXFsAArvwuuBXAAIyLwACMohbAAK8MLrgTwACMi8AAjKAWwACvNC7AAFx/wACMi8AAjJYWwACvSy62I8AAjIvAAIykAE7AAK9mwACvcQAAwABc/WADwAD+fgEcwACvghbAAK97LrgVwACMi8AAjKKwJwEAARbAAK+pFsAAr5kutHzAAIyLwACMlLGEuMIAwABkyU7AALA+wACwRQAAwABSG2ADwACN1wEcwACwURbAALBHLsAASVPAAIyLwACMqcAAXMcBAAGBwACwYMBHpssAwACNQ07AALB/wACwhQAAhL5dA8AA/TsBYAPAAJWiATHAALCHYAPAAJWiAE7AALCwwACwvwAAwABdFV0DwAD9bQJgA8AAlaJgA8AAetYBMsAAsMFgA8AAlaJgA8AAetYARsAAsMnAALElwACw4QAAALsJYAPAAHrWABbAALEQFsAAsPguu8bAAIyLwACMn699wAB6zz4ETsAAsTXAALE6AACAvWADwACVogEcwACxQxbAALE8LrgVwACMi8AAjKKv+AIAAhbAALF0hcAAsWjAR6e/pTTAAHrYFsAAsYqFwACxfsBHp7+EiMAAetoAwABkvj0cwACxoIPAALGawEenW1YBAAGGwACxpMBHp+0AwAD9TEAhHMAAsdOEwACxxMBHp4KHWAEAAYbAALHfwEen7QDA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wACVqSfAAF2XFsAARNMullLAAI5wJ8AAXa8ewABE7sAAmmEBAAEWwABE/i6Cl8AAjnIAJ4MmAABIPw8ASD9UAEg/6gAAAAICwACOj4GQwABF98AARf3AAEcSA8AAXbAAAAFgAcAAjm4AAAABBcAAjpOBkMAARhvAAEYbwABGggAAAAPAAEYlwABGggAAAAMCAsAARi4AAACAvWADwACVogDAAEZCAAAAgpdgA8AAlZgAAcAARlYAAACWUmADvTwBagBgA8AA/aF5YAPAAI6PAT8BCQDAAEZowACOdAMAA4LAAEZuwEhAZoDAAEZ3wEhARYHAAEZ9wEhAVQABBsAAjpGBkMAARofAAEaawABHEAAAIwFqwABGiGADwAD95AIAAAEDwABGosAARxAAAAAAAAAAYAPAAP5+AT4BSsAARqsBJAAHJ8AAXbEWwABGyhbAAEbFLoC9wACOcYPWwACVqSfAAF2XFsAARtkullLAAI5wJ8AAXa8ewABG9MAAmmEBAAEWwABHBC6Cl8AAjnIAJ4MmAABIQLAASEFGAAAAAQLAAI6UgZDAAEhNwABIU8AASxgDwABdsgAAAWABwACOjwAAAQTAAI6WgZDAAEm8wABJxBigqQBgA8AAlaIAAQXAAI6agZDAAEnJwABJycAASlcAAAADwABJ3MAASlcAAAAEAwPAAEnlAAAAgL1gA8AAlaIAwABJ8AAABKCpYAPAAJWiAMAASggAAACCl2ADwACVmAABwABKIgAAAJZSYAO9PAFqAGADwAD9oXlgA8AAjpQBPwIIAcAAjpaBAMBIQccJAMAASjTAAI6TAwACgMAASjrASEG3gsAASkDASEHXAZZSg8AASk/ASEHoAQbAAI6YgZDAAEpcwABKb8AASxYAACMBasAASl1gA8AA/eQCAAABA8AASnfAAEsWAAAAAAAAAGADwAD+fgE+AUrAAEqAASQACSfAAF2zFsAASqgWwABKoy6AvcAAjnGD1sAAlaknwABdtDUAAAABAGADwACVogEWwABKuS6gqcAAjpYjHMAASsOAAMBIQqpIAQABKwAAKxbAAErDgADASEKqg9bAAJWpAWADwAD+fie6YRbAAEreLpZSwACOcCfAAF21HsAASvrAAJphAQABFsAASwougpfAAI5yACeDJgAASEJAAEhDHgAAAAECwACOm4GQwABLG8AA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wABFgsBIwPmFwABFhsBIwXYAAD0XwABFjy7AAF4hg8AARaXASMDVwACP2UrAAEW6AYbAAEXBwEjBpwbAAJAKgZbAAEckwABHJMAASrIAAMAAXksAAAABA8AARzPAAEqyAAAAAgICwABHSAAAAIdDXQPAAP07AWADwACVmADAAEdPAAAAllZhAwFdA8AA/TsBYAPAAJWYWwAAWwE+CE7AAEd6wABHigAAwABeR2ADwAD8lwEWwABHjC7AAF4hwACP2U7AAEgswABIPwAAwABeTGADwAD8lwGTQUXAAEhIAcAASFHAAEhTAABiYAPAAPyXARzAAEhiFsAASFuAwABIVcBIwi5hwAD9a4GNAQABlADAAP2+ARzAAEhphMAASGfASMKngW0BAAGTAMAA/cgBjMAASHHASMKnHMAASG+EwABIccBIwqeBjQEAAZQAwAD9vkE+AknAAEh8HMAASIkcwABIhYDAAEiAwEjCLksBAAGEwABIhsBIwqcAwAD9SkgBAAErAMAA/fFCwABIkgE/ScAASKIcwABIpi7AAF47AQABHMAASLuAwABItsBIwi5LAQABhMAASLzASMKnAMAA/UoAwACP/j4CPYvAAEjLwEjCioTAAEjgwEjCp0LAAEjrAD9OwABJEsAASRoAAK8GXQPAAP07AWADwACUYQEcwABJphzAAEk7HMAASSKAwABJHMBIwi6WcAEAAYPAAEknwEjCigDAAP0RgKsBAWADwACVmAE0wABJPwPAAEk/wABJpAAAAAEBAcAASUgAAACD82ADwACUYQAAYAPAAJWYAT4BSsAASVYBIxzAAEljhMAASV7ASMQPSAEAASsAwAD98SscwABJdS7AAF5DwACPtQEAARzAAEmHLsAAXkIBAAEmwABJlwGEwABJl8BIxA9gA8AAlZgAwACQAwDAAJAFAWADwACVmADAAP0EgK0AAAAAwAD9Dz0cwABJvITAAEm0wEjDq4ClAQABHMAASescwABJ0oDAAEnMwEjCLpZbAQABg8AASdfASMKKAMAA/ROAqwEBYAPAAJWYATTAAEn+A8AASf7AAEpQAAAAAQEBwABKBwAAAIPzYAPAAJRhAABgA8AAlZgBPgFKwABKFQEjHMAASiKFwABKHcBIxPVIAQABKwDAAP3xKxzAAEo0LsAAXkIBAAEmwABKRAGFwABKRMBIxPVgA8AAlZgAwACQAwFgA8AAlZgAwAD9BADAAP1NTsAASlzAAEpjAACBdlsBHMAASmeBwABKZcBIwkUgAQABJsAASmgBhMAASmjASMOrXQPAAP07AWADwACVmAAAPRfAAEp2LsAAXiGCwABKjMBIwmbAAI/ZSsAASqEBhcAASqjASMVoBsAAkAuBlsAAS1zAAEthwABLlAACwABeTQAAAAEDwABLb8AAS5QAAAABAQHAAEuCAAAApaRgA8AAQksAAFwABsAAkAyBlsAATC/AAEw0wABMZQACwABeTgAAAAEDwABMQMAATGUAAAABAQHAAExTAAAApaRgA8AAQksAAFwABsAAkA2BlsAATGrAAExvwABM9QAAwABeTwAAAAEDwABMf8AATPUAAAABAQHAAEySAAAApaRgA8AAQksAAFwBPgI9HMAATKsuwABeTQEAAYDAAEy6wEjGdwDAAJALPRzAAEzSLsAAXk4BAAGAwABM38BIxncAwACQDAbAAJAOgZbAAE0gwABNJ8AATj8AAqFuAAAAAQPAAE01wABOPwAAAAYGBsAATVAAAACau10DwAD9OwFgA8AAlncAwABNdQAAAITFXQPAAP07AWADwACWdwDAAE2YAAAAwABeUGADwACUgQDAAE3IAAAAwABeUWADwACVxwDAAE32AAAAwABeUmADwABCSwDAAE4pAAAAwABGC2ADwABCSwAAYAPAAJaWAAbAAJAPgZbAAE5EwABOaMAATqsAAsAAXlMAAAABA8AATn/AAE6rAAAAAQEBwABOmQAAAKWkYAPAAEJLAABdA8AA/PkBYAPAAJX2AAbAAJAQgZbAAGK3wABixcAAbe8AAMAAXi8AAAABA8AAYtTAAG3vAAAAAwMDwABi4wAAAIPzYAPAAJaWAMAAYwEAAADAAEYLYAPAAEJLAMAAYzAAAADAAEYMYAPAAEJLAABgA8AAlZgBPhg9HMAAY00uwABeNgEAARzAAGNYLsAAXjUBAAEnwABeVADAAI/3AMAAj/g9F8AAY94uwABeDiMiFsAAY/QWwABj6y7AAF4UwACPx8AAXlXAAJCkARbAAGQKLsAAXi3AAI/uHMAAZCEuwABeNQEAASeaRADAAI/3KwFgA8AA/JfAAI/APRfAAGRILsAAXg8cwABkVy7AAF41AQABJ5otAMAAj/fAAI/BPRzAAGR9FsAAZHAuwABeDcAAj7+AvwIAAoDAAGR+wEjH4xbAAGSGLsAAXg/AAI/BAMAA/YJOwABkpcAAZKoAAIJtYAPAAJSBARbAAGSxgMAAZKzASMfjgm3AAJaZPRzAAGTHFsAAZLsuwABT48AAj8JWAQABgMAAZMvASMfjAMAA/Uw9HMAAZNYuwABeQAEAAYPAAGTlwEjI/QDAAJABPRzAAGT8FsAAZPAuwABT48AAj8KGJgAAAADAAP1aPRzAAGUOLsAAXk8BAAGCwABlH8BIyAUAwACQDU7AAGVSwABlWgAAwABeVl0DwAD9OwFgA8AAlUoBHMAAZdQcwABlbxbAAGVqFsAAZVwuwABeJMAAj9yDaMAA/Y+AqwEBYAPAAJVPATTAAGVzA8AAZXPAAGXSAAAAAQEBwABldAAAAJkuYAPAAPyXAABgA8AAlU8BPgFKwABlgwEfwABljsAAlVoCAAIewABllsAAkz0BAAGEwABloMBIyf8AH8AAZazAAJSRAQABHMAAZcIWwABltS7AAF4kwACP3EsBAAGEwABlw8BIyf8AwAD9gQAAAMAA/QSArQAAAADAAP0PTsAAZe/AAGX9AADAAF5QYAPAAJSBASbAAGXvARzAAGYlH8AAZgPAAJVJAgACFsAAZg0uuqvAAI/lhMAAZhPASMmhAK/9AQABgcAAZjvASMfzAMAAlG9gA8AAlIFJwABmVxbAAGZbLsAAXijAAI/gPgE9jcAAZnzASMqEH8AAZpDAAJV+AgACFsAAZqQuwABeHcAAj9KFwABmtMBIyoQAPz2NwABmzsBIyoQmwABmzgEcwABnIxzAAGbtasAAZuFgA8AAmAbAASCbhWACAAInwABeV4XAAGcLwEjKhADAAJgJr/0BAAGBwABnOcBIx/MAwACUb2ADwACUgU7AAGd1wABnfwAAhjpdA8AA/TsBYAPAAJX2ATHAAGecYAPAAJX2AD0cwABnr4bAAGelwEjLflYBAAEewABnvMAAj7gDAAMWwABn1S66q8AAj+UewABn28AAkz0BAAGTAIHAAGfpwEjH8wAAwAD9TD0cwABoEIbAAGgGwEjLfoClAQABHMAAaBcuwABeUwEAAYHAAGgvwEjH8wDAAJAPAMAA/U1JwABoTBbAAGhQLsAAXhnAAI/OPgI9HMAAaHSGwABoasBIy35WAQABHsAAaHjAAI+4AwADFsAAaJwuVcAAj+YewABopcAAkz0BAAEWwABory7AAF4PwACPwQCBwABovsBIx/MAAMAA/Uw9HMAAaOeGwABo3cBIy35WAQABHsAAaPbAAI+4AwADFsAAaQ8uwABeK8AAj+krgcAAaSPASMfzAADAAP1MP0nAAGlGIhbAAGlTFsAAaUouwABeFMAAj8fAAF5YwACQpwEiFsAAaWIuwABeLcAAj+4AFsAAaXoWwABpcS7AAF4UwACPx8AAXlnAAJCmPgE9HMAAaZeGwABpjcBIy35WAQABHsAAaZvAAI+4AwADFsAAabQug7XAAI/nH8AAacjAAJcxAQABMcAAaetgA8AAlZgAAIHAAGnwwEjH8wAAwAD9TD9JwABqEyIWwABqIBbAAGoXLsAAXhTAAI/HqX/AAJClACEWwABqLC7AAF4swACP7T4BPRzAAGqlhsAAapvASMt+VgEAAR7AAGq0wACPuAMAAxbAAGrNLpmwwACP6hzAAGrVasAAatZgA8AAmAbAASCbIAEAASeaLADAAJgIgcAAauLASMfzAADAAP1MPz0cwABrD4bAAGsFwEjLfoClAQABHMAAayUWwABrFi7AAF4JwACPu4CrAQFgA8AAlfYBNMAAaykDwABrKcAAa5QAAAABAQHAAGtBAAAAnt5gA8AAlm0AAGADwACV9gE+AUrAAGtWAR/AAGthwACV/wIAAofAAGt7wEjOPCsAAMAA/QQAwAD9TT0cwABrpobAAGucwEjLfoClAQABHsAAa7HAAPz+AgFgA8AAlfYCFsAAa8wuwABeIsAAj9o0wABr6gPAAGvqwABsTwAAAAEBAcAAa+8AAABiYAPAAPyXAABgA8AAlfYBSsAAa/UBHsAAa/XAAI+4AwADFsAAbC0cwABsGy7AAF4yAQABHMAAbCiHwABsJsBIzsVkAQABlADAAP29AMAAj/SAvcAAllgrgcAAbDnASMfzAAAAwAD9TU7AAGxywABshwAAwABeUWADwACVxwEfwABslcAAldUBAAGGwABssMBIy34ATsAAbP7AAG0NAACExV0DwAD9OwFgA8AAlncBHMAAbU8cwABtKRbAAG0XLsAAXh/AAI/UgKsBAWADwACWdwE0wABtLQPAAG0twABtTQAAAAEBAcAAbS4AAACAvWADwAD+fgAAYAPAAJZ3AUrAAG03AR/AAG07wACWfgEAARTAAG1IwEjPsggAAADAAP0EgK0AAAAAwAD9D0rAAG1dARzAAG1kLqFuBgAGFsAAbXiAwABtc8BIx+OD9MAAlpgUwABtgMBIz2EIAIXAAG2QwEjKhIfAAG2nwEjPNSbAAG3CARbAAG3CgMAAbb3ASMfjpaTAAJRmYAPAAEJLgcAAbdXASMfzAMAAkA4GwACQEYGWwABt9MAAbg7AAG/CAACw/AFqwABt9WADwAD95AIAAAEDwABuFsAAb8IAAAABAQHAAG4eAAAAg/NgA8AAlpYAAGADwACVmAE+AknAAG4qIhbAAG5BFsAAbjOAwABuLsBI0J2hb8AAlpqGP8AAlqkBFsAAbl8WwABuUYDAAG5MwEjQnaFvwACWmrUawACWqj4BPRzAAG9RFsAAb0gupRDAAI/VpaUCAAIWwABvai6lkcAAj+snwABeWgC2BT9KwABvswGAwABvusBI0J0GwACQEoGWwABvx8AAb+HAAHCIAACw/gFqwABvyGADwAD95AIAAAEDwABv7MAAcIgAAAABAQHAAG//AAAAg/NgA8AAlrUAAGADwACVmAE+AUrAAHALASbAAHALARzAAHASLsAAXkoDAAMWwABwJ4DAAHAiwEjRb4WPwACWtxbAAHA2gMAAcDHASNFvpTTAAJa4NMAAcEgDwABwSMAAcIMAAAACAgLAAHBJAAAAhY9gA8AAlZgAwABwUwAAAKU0YAPAAJWYAABgA8AAlZgBSsAAcGABHMAAcGJqwABwY2ADwACYBsABIJsgAgACJ8AAXlsxwABwbmADwACVmAKBwABwb8BI0d6CwABwecBI0e4AwACYCADAAJAJYAPAAJWYBsAAkBOBlsAAcI3AAHCnwABw3gAAsO4BasAAcI5gA8AA/eQCAAABA8AAcLXAAHDeAAAAAQEBwABwwwAAAIPzYAPAAJcyAABgA8AAlZgBPgFKwABwzwGAwABw1sBI0o0GwACQFIGWwABw48AAcP3AAHGgAACw7wFqwABw5GADwAD95AIAAAEDwABxEsAAcaAAAAABAQHAAHEnAAAAg/NgA8AAlyQAAGADwACVmAE+AUrAAHEzASbAAHEzARzAAHE6LsAAXksCAAIWwABxT4DAAHFKwEjS7IhqwACXJjTAAHFZA8AAcVnAAHGbAAAAAQEBwABxWgAAAIhqXQPAAP07AWADwACVmAAAYAPAAJckAT4BSsAAcWwBH8AAcXfAAJcxAQABgcAAcYvASNNHAADAAJAKYAPAAJWYBsAAkBWBlsAAcaXAAHG/wAB2IgAAsQkBasAAcaZgA8AA/eQCAAABA8AAcc7AAHYiAAAAAQEBwABx3QAAAIPzYAPAAJXkAABgA8AAlZgBPgNJwABx6SEcwABx7i7AAF47AQABgMAAcf7ASNPFAMAAj/4+AUrAAHINAR/AAHIYwACV9QMAAxzAAHIvLsAAXkIBAAEWwAByRIDAAHI/wEjTxbEKwACV5gDAAJADFsAAcmKAwAByXcBI08WqucAAleccwAByZi7AAF5CAQABFsAAcnuAwABydsBI08WAlsAAlegAwACQAwA/TsAAcpzAAHKpAACxCmADwACVmAEWwABysIDAAHKrwEjTxbEKwACV5knAAHLCJcAActOBwAByxsBI1HdgA8AAlmM+AUrAAHLuASbAAHLuARzAAHL1LsAAXkUDAAIWwABzCYDAAHMEwEjTxYCWwACV6DTAAHMQA8AAcxDAAHRmAAAAAQEBwABzHwAAAICWYAPAAJWYAABgA8AAleQBPgFKwAB0AAEfwAB0C8AAlfUDAAMcwAB0Ly7AAF5CAQABFMAAdD/ASNR3AQFgA8AAlmMAwACQAxbAAHRTgMAAdE7ASNPFqrnAAJXngsAAdFfASNT6AAHAAF5GKsAAkAdgA8AAlZhJwAB0giXAAHSTgcAAdIbASNR3YAPAAJa1PgFKwAB0sQEmwAB0sQEcwAB0uC7AAF5LAgACMcAAdNNgA8AAlZgDFsAAdOEUwAB01MBI1HcBAWADwACWtYWPwACWtxbAAHT4FMAAdOvASNR3AQFgA8AAlrWlNMAAlrgWwAB1B4DAAHUCwEjTxYCWwACV6DTAAHUZA8AAdRnAAHXIAAAAAQEBwAB1GgAAAMAAXlxdA8AA/TsBYAPAAJWYAABgA8AAleQBPgFKwAB1LwEfwAB1OsAAlfUDAAMfwAB1YsAAlsMCAAIcwAB1fYLAAHV0wEjWF0sBAAGTAMAA/UocwAB1i4LAAHWCwEjWF0sBAAGUAMAA/UoAFsAAdaKAwAB1ncBI08WqucAAleccwAB1u4LAAHWywEjWF0sBAAGVAMAA/UoAAMAAkApgA8AAlZg+AT0wwAB13iTAAHYYAifAAF5dgcAAdgvASNR3BsAAkBaBlsAAdifAAHY0wAB2gwACwABeXgAAAAEDwAB2QsAAdoMAAAACAgLAAHZYAAAAgJZgA8AAlZgAwAB2cQAAAKWkYAPAAEJLAABgA8AAlIEABsAAkBeBlsAAdv/AAHcZwAB4oAAAsOkBasAAdwBgA8AA/eQCAAABA8AAdyPAAHigAAAAAQEBwAB3LQAAAIPzYAPAAJfsAABgA8AAlZgBPgVAIhbAAHdALoY/wACP7AEWwAB3Sy7AAF4twACP7sAAd0DAAHdWAE7AAHdhwAB3bAAAwABeX2ADwAD8lwEcwAB3bi7AAF41AQABJ8AAXmAAwACP9z0cwAB3lS7AAF5FAwACFsAAd6mAwAB3pMBI12eCb8AAl+40wAB3tQPAAHe1wAB4XgAAAAEBAcAAd8QAAACAlmADwACVmAAAYAPAAP2hAT4CPRzAAHfTLoYoAQABHMAAd+AuwABeNwIAAoHAAHfwwEjXqCbAAHgBARbAAHgBgMAAd/zASNdnpaTAAJRmYAPAAEJLAMAAj/kAwACP/D0cwAB4HC6GKAEAARzAAHgpLsAAXl4CAAKCwAB4OMBI2AomwAB4RAEWwAB4RIDAAHg/wEjXZ6WkwACUZmADwABCSwDAAJAWAMAAj/wBwABeRirAAJAHPRzAAHhzLsAAXjYBAAGBwAB4fsBI16gAwACP+ErAAHiPARbAAHiWLoF2wACP5AbAAJAYgZbAAHpFwAB6SsAAeqkAAMAAXmEAAAABA8AAelLAAHqpAAAAAQEBwAB6YQAAAIPzYAPAAJWYAABgA8AA+tEBPgFKwAB6bQEiJcAAenmAwAB6dMBI2SBgA8AAlmMAHMAAepgWwAB6kxTAAHqOwEjZIAABYAPAAJZjgL3AAJZYSAEAARbAAHqbLsAAXhXAAI/JAMAA/o0GwACQGYGWwAB6rsAAesjAAH/dAACxBAFqwAB6r2ADwAD95AIAAAEDwAB608AAf90AAAABAQHAAHreAAAAg/NgA8AAlicAAGADwACVmAE+AknAAHrqIhzAAHruLsAAXjsBAAEWwAB7A4DAAHr+wEjZxIXHwACWKwDAAI/+ACIcwAB7FhbAAHsTgMAAew7ASNnEqrnAAJYpSAEAASeX9wDAAP6NARzAAHspFsAAeyaAwAB7IcBI2cSqucAAlilIAQABJ5f2AMAA/o0+CE7AAHs/wAB7SQAAwABeYmADwAD8lwEcwAB7Sy7AAF41AQABJ4GvAMAAj/dOwAB7Z8AAe3EAAMAAXmNgA8AA/JcBHMAAe3MuwABeNQEAASdYAMAAj/c9HMAAe4suwABeRQMAAhbAAHufgMAAe5rASNnEhcXAAJYqNMAAe6UDwAB7pcAAfhMAAAABAQHAAHu0AAAAhcVgA8AAlZgAAGADwAD9oQE+Ak7AAHvRwAB73AAAwABeZGADwACUgQEjHMAAe94uwABeYQEAAYPAAHvnwEja5ADAAJAYH8AAe//AAJSSAAAAABzAAHwkasAAfCFgA8AAmAbAASCbhWACAAInwABeRDHAAHw4YAPAAJWYAhbAAHw5LoF2wACP5IPAAHxBwEja5ADAAJgJAWADwACUgUnAAHxRHMAAfF0WwAB8WoDAAHxVwEjZxKq5wACWKUgBAAEnl/YAwAD+jT4BPRzAAHxyLoYoAQABHMAAfIVqwAB8gmADwACYBsABIJuFYAIAAifAAF5lMcAAfKRgA8AAlGEDg8AAfLLASNrkHMAAfMQuwABeOAIAAoHAAHzRwEjaWibAAHzhARbAAHzhgMAAfNzASNnEpaTAAJRmYAPAAEJLAMAAj/qEwAB9AcBI2v8AwACYCQDAAI/8PgJAHMAAfUUWwAB9QoDAAH09wEjZxKq5wACWKUgBAAEnl/cAwAD+jcAAfT3AAH1MAD0cwAB9WS6GKAEAARzAAH1sasAAfWlgA8AAmAbAASCbhWACAAInwABeZTHAAH2LYAPAAJRhA4PAAH2ZwEja5ITAAH2rwEja/xzAAH3DLsAAXjgCAAKBwAB90MBI2lomwAB94AEWwAB94IDAAH3bwEjZxKWkwACUZmADwABCSwDAAI/6AMAAmAkAwACP/AHAAF5GKcAAkAc9HMAAfikuo8oCAAKCwAB+McBI2oUmwAB+QQEWwAB+QYDAAH48wEjZxKWkwACUZmADwABCSwDAAI/7PRzAAH5bLsAAXjYBAAGBwAB+ZsBI2loAwACP+D0cwAB+eC7AAF5FAwACFsAAfoyAwAB+h8BI2cSFx8AAlis0wAB+kwPAAH6TwAB/IAAAAAEBAcAAfqIAAACAlmADwACVmAAAYAPAAP2hAT4BScAAfrMhHMAAfrguwABeYQEAAYPAAH7BwEjdlQDAAJAYPgE9HMAAftUuhigBAAEcwAB+6GrAAH7lYAPAAJgGwAEgm4VgAgACJ8AAXkQxwAB+/GADwACVmAIWwAB+/S6BdsAAj+SDwAB/BcBI3ZUAwACYCQDAAI/8PwHAAF5GKsAAkAc9HMAAfzcuwABeNgEAAYLAAH9CwEjahQDAAI/4SsAAf1QBFsAAf1sugXbAAI/kP0rAAH9uASbAAH9uARzAAH91LsAAXkoDAAMWwAB/ioDAAH+FwEjZxIXFwACWKhbAAH+VgMAAf5DASNnEhcfAAJYrNMAAf6QDwAB/pMAAf9gAAAACAgLAAH+lAAAAhcVgA8AAlZgAwAB/qwAAAIXHYAPAAJWYAABgA8AAlicBSsAAf7UBH8AAf7nAAJY3AwADFsAAf8iAwAB/w8BI2cSqucAAlimBwAB/zMBI3raCwAB/0sBI3sYAAMAAkAlgA8AAlZgGwACQGoGWwAB/4sAAf/PAAIBuAACGJwFqwAB/42ADwAD95AIAAAEDwAB//cAAgG4AAAABAQHAAIAHAAAAg/NgA8AAlIYAAFwBPgFGwACAE8AAgEPAAIAlAAAAhWBgA8AAlIEAFsAAgDeAwACAMsBI31iGJcAAlIg+AT0cwACASy7AAF5AAQABgcAAgFrASN92AMAAkAEGwACQG4GWwACAc8AAgITAAIFpAACxGQFqwACAdGADwAD95AIAAAEDwACAjsAAgWkAAAABAQHAAICYAAAAg/NgA8AAlP4AAFwBPgNOwACArMAAgLMAAIJJYAPAAJRhARzAAIDFFsAAgL4WwACAtS7AAF4UwACPx4egwACQoEsBAAGAwACAxsBI3+4AwAD9gUnAAIDRIRzAAIDWLsAAXjsBAAGBwACA5sBI4AQAwACP/j4CPRzAAID3LoYoAQABgMAAgQTASN/uAMAAj/xKwACBEQA/PRzAAIEjLsAAXmYDAAOBwACBMcBI4AQcwACBRBbAAIE5LsAAXgvAAI+9SwEAAYHAAIFFwEjgBADAAP2BJsAAgVMBFsAAgVOAwACBTsBI3+6lpMAAlGZgA8AAQksAwACQIwbAAJAcgZbAAIFuwACBiMAAgvsAALEFAWrAAIFvYAPAAP3kAgAAAQPAAIGRwACC+wAAAAEBAcAAgZoAAACD82ADwACWEAAAYAPAAJWYAT4CTsAAgavAAIG3AADAAF5nYAPAAPrRARzAAIHIFsAAgb6AwACBucBI4SJbwACWE4HWAQABFsAAgcwuwABeO8AAj/4AwAD9DkrAAIHiASbAAIHiARzAAIHpLsAAXkgDAAIWwACCB4DAAIICwEjhIoJJwACWEjTAAIIPA8AAgg/AAILiAAAAAQEBwACCEAAAAIJJYAPAAJWYAABbAT4BSsAAgiABHMAAgicuwABeSwIAAhbAAII8gMAAgjfASOEiW8AAlhM0wACCRwPAAIJHwACC2gAAAAEBAcAAglwAAABbXQPAAP07AWADwACVmAAAYAPAAJRhAT4BSsAAgnEBHMAAgqQfwACCfMAAlh4CAAKCwACChMBI4cODwACCjMBI4hIAr/0BAAEWwACCv4DAAIK6wEjhIqWkwACUZgDAAJRvAMAAkAoBwABeRoHAAILrwEjhPcAAkAhgA8AAlZgGwACQHYGWwACDAMAAgxHAAINLAACxEwFqwACDAWADwAD95AIAAAEDwACDGsAAg0sAAAABAQHAAIMjAAAAg/NgA8AAlU8AAFwBPgFKwACDLwEcwACDNi7AAEjjAQABgMAAg0LASOLNAMAAkAAGwACQHoGWwACDUMAAg2HAAIOdAACGVQFqwACDUWADwAD95AIAAAEDwACDa8AAg50AAAABAQHAAIN1AAAAg/NgA8AAlTAAAFwBPgFKwACDgQEcwACDiC7AAEjjAQABgMAAg5TASOM5AMAAkAAGwACQH4GWwACDosAAg7PAAIPtAACw6AFqwACDo2ADwAD95AIAAAEDwACDv8AAg+0AAAABAQHAAIPLAAAAg/NgA8AAl/oAAFwBPgE9HMAAg9cuhigBAAGAwACD5MBI46UAwACP/AbAAJAggZbAAIPywACEDMAAiMQAALEHAWrAAIPzYAPAAP3kAgAAAQPAAIQcwACIxAAAAAEBAcAAhCwAAACD82ADwACWAAAAYAPAAJWYAT4NScAAhDgiIRzAAIQ9LsAAXjsBAAEWwACEUoDAAIRNwEjkCoGvwACWAwDAAI/+ACEcwACEXC7AAF47AQABFsAAhHGAwACEbMBI5AqFy8AAlgQAwACP/j4BSsAAhIUBJsAAhIUBHMAAhR8cwACEjmrAAISPYAPAAJgGwAEgmyACAAInwABeaDHAAISfYAPAAJWYAxzAAISpLsAAXkIBAAEWwACEvoDAAIS5wEjkCoXKwACWAgDAAJADHMAAhNIuwABeQgEAARbAAITngMAAhOLASOQKga/AAJYDAMAAkAMcwACE9i7AAF5CAQABFsAAhQuAwACFBsBI5AqFy8AAlgQAwACQAwDAAJgIr/0BAAEWwACFOoDAAIU1wEjkCqWkwACUZgDAAJRvYAPAAJWYP07AAIVcwACFZgAAwABeYmADwAD8lwEcwACFaC7AAF41AQABJ4GvAMAAj/dOwACFgsAAhYwAAMAAXmNgA8AA/JcBHMAAhY4uwABeNQEAASdYAMAAj/dOwACFqMAAhbIAAMAAXmlgA8AA/JcBHMAAhbQuwABeNQEAASeaQwDAAI/3PRzAAIXKLsAAXkUDAAIWwACF3oDAAIXZwEjkCoXKwACWAjTAAIXpA8AAhenAAIaKAAAAAQEBwACF+AAAAIXKYAPAAJWYAABgA8AA/aEBPgE9HMAAhgsuhigBAAEcwACGHmrAAIYbYAPAAJgGwAEgm4VgAgACJ8AAXmoxwACGRGADwACVmAQWwACGRS66q8AAj+WEwACGS8BI5gcewACGVsAAkz0BAAGBwACGYMBI5VIAHsAAhmzAAJM9AQABg8AAhnbASOWnAADAAJgJAMAAj/wBwABeRirAAJAHPRzAAIafLqPDAQABJsAAhq0BFsAAhq2AwACGqMBI5AqlpMAAlGZgA8AAQksAwACQIj0cwACGxS7AAF42AQABgcAAhtDASOVSAMAAj/g9HMAAhuAuwABeRQMAAhbAAIb0gMAAhu/ASOQKga/AAJYDNMAAhvoDwACG+sAAh38AAAABAQHAAIcJAAAAgJZgA8AAlZgAAGADwAD9oQE+AUnAAIcYIRzAAIcdLsAAXmEBAAGEwACHJsBI5y8AwACQGD4BPRzAAIc4LoYoAQABHMAAh0tqwACHSGADwACYBsABIJuFYAIAAifAAF5EMcAAh19gA8AAlZgCFsAAh2AugXbAAI/khMAAh2jASOcvAMAAmAkAwACP/D8BwABeRirAAJAHPRzAAIeULqPKAgACgsAAh5zASOV9JsAAh6wBFsAAh6yAwACHp8BI5AqlpMAAlGZgA8AAQksAwACP+z0cwACHxC7AAF42AQABg8AAh8/ASOWnAMAAj/g9HMAAh98uwABeRQMAAhbAAIfzgMAAh+7ASOQKhcvAAJYENMAAh/4DwACH/sAAiIMAAAABAQHAAIgNAAAAgJZgA8AAlZgAAGADwAD9oQE+AUnAAIgcIRzAAIghLsAAXmEBAAGEwACIKsBI6FgAwACQGD4BPRzAAIg8LoYoAQABHMAAiE9qwACITGADwACYBsABIJuFYAIAAifAAF5EMcAAiGNgA8AAlZgCFsAAiGQugXbAAI/khMAAiGzASOhYAMAAmAkAwACP/D8BwABeRirAAJAHPRzAAIiYLsAAXjYBAAGCwACIo8BI5X0AwACP+ErAAIizARbAAIi6LoF2wACP5AbAAJAhgZbAAIjJwACI2sAAicgAALEbAWrAAIjKYAPAAP3kAgAAAQPAAIjnwACJyAAAAAEBAcAAiPQAAACD82ADwACU8gAAXAE+A07AAIkIwACJDwAAgklgA8AAlGEBHMAAiSEWwACJGhbAAIkRLsAAXhTAAI/Hh6DAAJCgSwEAAYDAAIkiwEjpWQDAAP2BScAAiS0hHMAAiTIuwABeOwEAAYHAAIlCwEjpbwDAAI/+PgI9HMAAiVMuhigBAAGAwACJYMBI6VkAwACP/ErAAIltAD89HMAAiX8uwABeZgMAA4HAAImNwEjpbxzAAImjFsAAiZUuwABeCsAAj7xLAQABgcAAiaTASOlvAMAA/YEmwACJsgEWwACJsoDAAImtwEjpWaWkwACUZmADwABCSwDAAJAjBsAAkCKBlsAAihDAAIoVwACLXgAAo8MAAAABA8AAih3AAIteAAAAAQEBwACKMAAAAKWkYAPAAEJLAABcAT4BScAAikkWwACKTS7AAF4nwACP3z4CPRfAAIpyLsAAXigpwACP4D0cwACKmC6GKAEAASbAAIrNARzAAIrNH8AAiqnAAJUJAQABFsAAirIuwABeHcAAj9IAr/0BAAGAwACK48BI6oEAwACUb2ADwACUgQDAAI/8PgE9HMAAiwsuhigBAAEmwACLKwEcwACLKx/AAIscwACVCQEAASsAr/0BAAGAwACLQcBI6oEAwACUb2ADwACUgQDAAI/8BsAAkCOBlsAAjF7AAIxjwACQngAAwABeZgAAAAEDwACMcMAAkJ4AAAADAwPAAIyAAAAAgklgA8AAlGEAwACMjAAAALEaYAPAAPyXAMAAjKsAAAClpGADwABCSwAAXAE+Bk7AAI1xwACNewAAwABea10DwAD9OwFgA8AA/JcBMcAAjYJgA8AA/JcAQUbAAI2KwACNtcAAjZcAAACD82ADwACUYQAWwACNqxbAAI2fLsAAU+PAAI/CmLXAAP1sPgFJwACNvSEcwACN1RzAAI3OFsAAjcEuwABeDMAAj75LAQABhMAAjc/ASOvkAMAA/YFIAQABKwDAAP27PgE9HMAAjfKDwACN6MBI67JWAQABHMAAjgMWwACN9i7AAF4MwACPvksBAAGEwACOBMBI6+QAwAD9gQDAAP1MScAAjhkcwACOIoTAAI4dwEjr5EgBAAGAwACOJcBI63wAwAD98T4CPRzAAI5Bg8AAjjfASOuyVgEAAYHAAI5FwEjrjADAAP1MQsAAjlsAPz2LwACOkcBI67IcwACOsBbAAI6ng8AAjp3ASOuymLXAAP1sgK0AAAAAwAD9D07AAI8cwACPKAAAwABebGADwAD8lwEcwACPNIPAAI8qwEjrsoYmAAAAAMAA/VpJwACPRhbAAI9Ug8AAj0rASOuyg7fAAP0ePgJOwACPdsAAj4IAAMAAXm1gA8AAlZgBH8AAj4jAAJcxAQABHMAAj9YcwACPsYPAAI+nwEjrsoCrAQFgA8AAlxgBNMAAj7UDwACPtcAAj9QAAAABAQHAAI+6AAAAmS5gA8AA/JcAAGADwACXGAFKwACPxAEewACPxMAAkz0BAAGFwACPzsBI7aEAAMAA/QSArQAAAADAAP0PAD0cwACP5y6GKAEAAR/AAI/4wACUngEAASbAAJA9ARzAAJA9HMAAkBFqwACQEmADwACYBsABIJsgAgACJ8AAVbYxwACQKGADwACVmAIWwACQKS6DtcAAj+eFwACQL8BI7U4AwACYCK/9AQABgsAAkFPASOucAMAAlG9gA8AAlZgAAMAAj/w/PRzAAJBzLqPKAgAChMAAkHvASO0FgsAAkIjASOucAMAAj/sGwACQJIGWwACQo8AAkLTAAJDmAACxEgFqwACQpGADwAD95AIAAAEDwACQwMAAkOYAAAABAQHAAJDMAAAAg/NgA8AAlVsAAFwBSsAAkNUBHMAAkNUuwABI4wEAAYDAAJDhwEjuxADAAJAABsAAkCWBlsAAkOvAAJD8wACU4AAAsRwBasAAkOxgA8AA/eQCAAABA8AAkQPAAJTgAAAAAQEBwACRCgAAAIPzYAPAAJTmAABcAT4NScAAkRYhHMAAkRsuwABeOwEAAYDAAJErwEjvLgDAAI/+PgVOwACRP8AAkV4AAMAAXm5gA8AA+tEBFsAAkWAuwABeJ8AAj989F8AAkYMuwABeJynAAI/fPRzAAJGtLoYoAQABHMAAkcBqwACRvWADwACYBsABIJuFYAIAAifAAF5vMcAAkehgA8AAlGECHMAAkekuwABecAEAARbAAJIDgMAAkf7ASO8ugm3AAJS8AMAAkCwcwACSCi7AAF5CAQABFsAAkh+AwACSGsBI7y6FysAAlOgAwACQAwDAAJgJAMAAj/w9F8AAkjQuwABeJ4HAAJJSwEjvZ8AAj99KwACSeAA/TsAAko7AAJKZAADAAF5xYAPAAPyXARzAAJKbLsAAXjUBAAEnwABecgDAAI/3TsAAkrnAAJLHAADAAF5zYAPAAPyXARzAAJLJLsAAXjUBAAEnwABedADAAI/3PRzAAJL1FsAAkucuwABeCsAAj7yAvwIAAoDAAJL2wEjvLoLAAJL+wEjwcwDAAP2CTsAAkxbAAJMhAADAAF51YAPAAPyXARzAAJMjLsAAXjUBAAEnwABedgDAAI/3PRzAAJNIFsAAkz0uwABeC8AAj72AvwIAAoDAAJNJwEjvLoPAAJNRwEjw0ADAAP2CPRzAAJNiLsAAXjYBAAGBwACTbcBI8EYAwACP+D0cwACTixbAAJN/LsAAU+PAAI/CVgEAAYDAAJOPwEjvLgDAAP1MPRzAAJOaLsAAXkABAAEWwACTroDAAJOpwEjvLoJtwACUvADAAJABPRzAAJPFFsAAk7kuwABT48AAj8KGJgAAAADAAP1aPRzAAJPYLsAAXjYBAAGCwACT48BI8HMAwACP+D0cwACT9y7AAF5FAwACFsAAlAuAwACUBsBI7y6FysAAlOg0wACUFgPAAJQWwACUsQAAAAEBAcAAlCUAAACFymADwACVmAAAYAPAAP2hAT4BPRzAAJQ4LoYoAQABHMAAlEtqwACUSGADwACYBsABIJuFYAIAAifAAF53McAAlGtgA8AAlGEChMAAlGzASPIFHMAAlHcuwABeOAIAAoHAAJSEwEjwRibAAJSVARbAAJSVgMAAlJDASO8upaTAAJRmYAPAAEJLAMAAj/oAwACYCQDAAI/8AcAAXkYqwACQBz0cwACUxi7AAF42AQABg8AAlNHASPDQAMAAj/gGwACQJoGWwACU5cAAlPbAAJU+AACGLAFqwACU5mADwAD95AIAAAEDwACVCcAAlT4AAAABAQHAAJUcAAAAg/NgA8AAlJ8AAFwBPgE9HMAAlSguhigBAAGAwACVNcBI8v8AwACP/AbAAJAngZbAAJVDwACVVMAAlcAAAIYjAWrAAJVEYAPAAP3kAgAAAQPAAJVswACVwAAAAAEBAcAAlYQAAACD82ADwACUkwAAXAE+AT0cwACVkC7AAF5BAQABFsAAlbGAwACVrMBI82SCb8AAlJUAwACQAgbAAJAogZbAAJXFwACV1sAAnNgAALEfAWrAAJXGYAPAAP3kAgAAAQPAAJXewACc2AAAAAEBAcAAleYAAACD82ADwACUvwAAXAE+EEnAAJXyIRzAAJX3LsAAXjsBAAGAwACWB8BI89YAwACP/j4FTsAAlhvAAJYxAADAAF54YAPAAPrRARbAAJYzLsAAXifAAI/fPRfAAJZWLsAAXicpwACP3z0cwACW9i7AAF5LAgACMcAAlwZgA8AAlZgDFsAAlwyAwACXB8BI89aqtcAAlMEWwACXF4DAAJcSwEjz1oXKwACUwhbAAJcngMAAlyLASPPWrJfAAJTDNMAAlzoDwACXOsAAl+QAAAABAQHAAJdPAAAAhehdA8AA/TsBYAPAAJWYAABgA8AA/aEBPgE9HMAAl2YuhigBAAEfwACXd8AAlMwEAAQcwACXiYLAAJd+wEj0rEsBAAGTAMAA/UocwACXmYLAAJeOwEj0rEsBAAGUAMAA/UocwACXqYLAAJeewEj0rEsBAAGVAMAA/UocwACXui7AAF5wAQABFsAAl9SAwACXz8BI89aCbcAAlLwAwACQLAAAwACP/ADAAJAKPRfAAJftLsAAXieBwACYC8BI9A/AAI/fSsAAmCgAP0nAAJg7IRzAAJhJFsAAmESAwACYP8BI89aqtcAAlMFIAQABKwDAAP3xPgE9HMAAmFouwABeQQEAARbAAJh7gMAAmHbASPPWqrXAAJTBAMAAkAI/TsAAmJDAAJibAADAAF5xYAPAAPyXARzAAJidLsAAXjUBAAEnwABeeQDAAI/3TsAAmRzAAJkqAADAAF5zYAPAAPyXASMcwACZQRbAAJk6gMAAmTXASPPWrJfAAJTDSAEAASsAwAD98YHAAJlMwEj10RzAAJlZLsAAXjUBAAEnwABeegDAAI/3AWADwAD8lz0cwACZgxbAAJl1LsAAXgrAAI+8gL8CAAKAwACZhMBI89aCwACZjMBI9f4AwAD9gk7AAJmjwACZrgAAwABedWADwAD8lwEcwACZsC7AAF41AQABJ8AAXnsAwACP9z0cwACZ1hbAAJnLLsAAXgvAAI+9gL8CAAKAwACZ18BI89aDwACZ38BI9o8AwAD9gj0cwACZ7y7AAF42AQABgcAAmfrASPXRAMAAj/hOwACaGcAAmiMAAIXKYAPAAJWYARbAAJoqgMAAmiXASPPWhcrAAJTCScAAmjkiHMAAmkeEwACaPcBI9whIAQABKwDAAP3xASIlwACaZYTAAJpbwEj3CGADwACW8AAcwACaihbAAJqEFMAAmnrASPcIBAFgA8AAlvCAlsAAlvJIAQABKQDAAP3xPgE9HMAAmpwuhigBAAEfwACarcAAmAUBAAEnwABefAAAwACP/D4BPRzAAJriLsAAXkUDAAKEwACa8cBI9wg0wACa/APAAJr8wACbpAAAAAEBAcAAmwsAAACFymADwACVmAAAYAPAAP2hAT4BPRzAAJsgLoYoAQABH8AAmzHAAJS5AgACH8AAm0LAAJZGAgACJ5ochcAAm1HASPfhABzAAJtpLsAAXjgCAAKDwACbdsBI9o8mwACbhwEWwACbh4DAAJuCwEjz1qWkwACUZmADwABCSwDAAI/6AADAAI/8AcAAXkYqwACQBz0cwACbyxbAAJu/LsAAU+PAAI/CVgEAAYDAAJvPwEjz1gDAAP1MPRzAAJvaLsAAXkABAAEWwACb7oDAAJvpwEjz1oJtwACUvADAAJABPRzAAJwFFsAAm/kuwABT48AAj8KGJgAAAADAAP1aScAAnBchHMAAnCcWwACcIIDAAJwbwEjz1qyXwACUw0gBAAErAMAA/fE+Aj0cwACcOC7AAF42AQABgsAAnEPASPX+AMAAj/g9HMAAnFkuwABeQQEAARbAAJx6gMAAnHXASPPWrJfAAJTDAMAAkAI/PRzAAJyNLqPKAgACgcAAnJXASPXRJsAAnKYBFsAAnKaAwACcocBI89alpMAAlGZgA8AAQksAwACP+z0cwACcvi7AAF42AQABg8AAnMnASPaPAMAAj/gGwACQKYGWwACc3cAAnO7AAJ2VAACxHgFqwACc3mADwAD95AIAAAEDwACc+MAAnZUAAAABAQHAAJ0CAAAAg/NgA8AAlM0AAFwBPgE9MMAAnUgnwABefQbAAJAqgZbAAJ2awACdq8AAnfwAAIZpAWrAAJ2bYAPAAP3kAgAAAQPAAJ3DwACd/AAAAAEBAcAAndsAAACD82ADwACVZQAAXAE+AT0cwACd5y6c/AEAAYDAAJ3zwEj6MwDAAI//BsAAkCuBlsAAngHAAJ4UwACfbwAAwABefgAAAAEDwACeMMAAn28AAAABAQHAAJ4+AAAAg/NgA8AAlIEAAF0DwAD9OwFgA8AAlIEBPgdAIRzAAJ5SLsAAXjsBAAGAwACeYsBI+o4AwACP/sAAnlHAAJ5nAE7AAJ6BwACeiwAAwABef10DwAD9OwFgA8AAlIEBFsAAno0uwABeKsAAj+I9F8AAnqkuwABeKjHAAJ7QYAPAAJSBAMAAj+JOwACe68AAnvgAAMAAXoBdA8AA/TsBYAPAAJSBARbAAJ76LsAAXirAAI/iPRzAAJ8WLsAAXkABAAGAwACfJcBI+o4AwACQAT0XwACfMC7AAF4qgcAAn0nASPrWwACP4krAAJ9YAYLAAJ9fwEj7HAbAAJAsgZbAAJ90wACfgcAAoFQAAMAAXnAAAAABA8AAn5XAAKBUAAAAAQEBwACfowAAAIPzYAPAAJSBAABgA8AAlIEBPgNOwACfwsAAn80AAIYlXQPAAP07AWADwACUgQEcwACfzy7AAF5+AQABgMAAn+zASPu1AMAAkCtJwACf9xzAAKANFsAAoAaBwACf+8BI+9BhwAD9a0gBAAGUAMAA/btKwACgEwEWwACgJYHAAKAawEj70IDDwAD9IT9KwACgMQEfwACgPMAAlJEBAAGBwACgRcBI+9AABsAAkC2BlsAAoFnAAKBiwACgxwAAwABegQAAAAEDwACgcsAAoMcAAAABAQHAAKCAAAAAg/NgA8AAlIEAAGADwACUhgE+AUrAAKCMAR/AAKCXwACUkQEAARzAAKCgLsAAXn4BAAGAwACgvcBI/I8AwACQKwAGwACQLoGWwACgzMAAoN3AAKVcAACxIAFqwACgzWADwAD95AIAAAEDwACg5MAApVwAAAABAQHAAKDrAAAAg/NgA8AAlKkAAFwBPgpJwACg9yIhHMAAoPwuwABeOwEAARbAAKERgMAAoQzASP0Nga/AAJSsAMAAj/4AIRzAAKEbLsAAXjsBAAEWwAChMIDAAKErwEj9DYXLwACUrQDAAI/+PgI9HMAAoUQuwABeRQMAAhbAAKFYgMAAoVPASP0NhcrAAJSrNMAAoWMDwAChY8AAomUAAAABAQHAAKFyAAAAhcpgA8AAlZgAAGADwAD9oQE+A07AAKGUwAChowAAwABegmADwACUgQEcwAChpS7AAF5wAQABFsAAob+AwAChusBI/Q2Br8AAlKwAwACQLE7AAKHbwACh6gAAwABeg2ADwACUgQEcwACh7C7AAF5wAQABFsAAogaAwACiAcBI/Q2Fy8AAlK0AwACQLD0cwACiGi6GKAEAAR/AAKIrwACUuAMAA4HAAKIxwEj9r4LAAKI8wEj9yoPAAKJMwEj+BgAAwACP/AHAAF5GKsAAkAdKwACifAA/TsAAopLAAKKcAADAAF5iYAPAAPyXARzAAKKeLsAAXjUBAAEnga8AwACP907AAKK4wACiwgAAwABeY2ADwAD8lwEcwACixC7AAF41AQABJ1gAwACP907AAKLewACi6AAAwABeaWADwAD8lwEjJcAAowIWwACi+IDAAKLzwEj9DYXLwACUrWADwACUn4LAAKMawEj+txzAAKMmLsAAXjUBAAEnmkMAwACP9wFgA8AA/Jc9HMAAoz0uwABeRQMAAhbAAKNRgMAAo0zASP0NhcrAAJSrNMAAo1wDwACjXMAApCMAAAABAQHAAKNrAAAAhcpgA8AAlZgAAGADwAD9oQE+AT0cwACjfi7AAF46AQABH8AAo5nAAJX0AgACFsAAo7IuuqvAAI/lH8AAo8bAAJYPAwADhMAAo+TASP9xHsAAo+/AAJM9AQABgcAAo/nASP6MAB7AAKQFwACTPQEAAYPAAKQPwEj+4QAAAADAAI/9AcAAXkYqwACQBz0cwACkOC6jwwEAASbAAKRGARbAAKRGgMAApEHASP0NpaTAAJRmYAPAAEJLAMAAkCI9HMAApF4uwABeNgEAAYHAAKRpwEj+jADAAI/4PRzAAKR5LsAAXkABAAEWwACkjYDAAKSIwEj9DYGvwACUrADAAJABScAApJghJcAApKsWwACkoYDAAKScwEj9DYXLwACUrWADwACUnz4DPRzAAKTKLqPKAgACgsAApNLASP63JsAApOIBFsAApOKAwACk3cBI/Q2lpMAAlGZgA8AAQksAwACP+z0cwACk/C7AAF42AQABg8AApQfASP7hAMAAj/g9HMAApRkuwABeQAEAARbAAKUtgMAApSjASP0N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wEkH9QbAAJA9gZbAAKx7wACsj8AArK4AAIZuAWrAAKx8YAPAAP3kAgAAAQPAAKyYwACsrgAAAAEBAcAArKEAAACD82ADwACVogAAYAPAAJWiAUrAAKyqAYDAAKyqwEkIUgbAAJA+gZbAAKyzwACszsAArSAAALDwAWrAAKy0YAPAAP3kAgAAAQPAAKzewACtIAAAAAEBAcAArO4AAACD82ADwACV1gAAYAPAAJXWAT4CPRzAAKz6Lpz8AQABgMAArQbASQivAMAAj/9KwACtEQErBsAAkD+BlsAArSXAAK0xwACtdgAAsP0BasAArSZgA8AA/eQCAAABA8AArUPAAK12AAAAAQEBwACtVQAAAIPzYAPAAJaHAABbAT4BPRzAAK1hLpz8AQABgMAArW3ASQkgAMAAj/8GwACQQIGWwACte8AArZXAAK3QAACw+wFqwACtfGADwAD95AIAAAEDwACtrMAArdAAAAABAQHAAK3DAAAAg/NgA8AAluAAAGADwACVmAFKwACtzAGAwACtzMBJCYUGwACQQYGWwACt1cAAre/AAK4iAACw+QFqwACt1mADwAD95AIAAAEDwACuAsAAriIAAAABAQHAAK4VAAAAg/NgA8AAls4AAGADwACVmAFKwACuHgGAwACuHsBJCeIGwACQQoGWwACuJ8AArkHAAK50AACw9wFqwACuKGADwAD95AIAAAEDwACuVMAArnQAAAABAQHAAK5nAAAAg/NgA8AAltcAAGADwACVmAFKwACucAGAwACucMBJCj8GwACQQ4GWwACuecAArpPAAK/IAACxBgFqwACuemADwAD95AIAAAEDwACum8AAr8gAAAABAQHAAK6jAAAAg/NgA8AAlh8AAGADwACVmAE+Ak7AAK60wACuwAAAwABeZ2ADwAD60QEcwACu0RbAAK7HgMAArsLASQqcW8AAlhOB1gEAARbAAK7VLsAAXjvAAI/+AMAA/Q5KwACu6wEmwACu6wEcwACu8i7AAF5IAwACFsAArxCAwACvC8BJCpyCScAAlhI0wACvGAPAAK8YwACvrwAAAAEBAcAArxkAAACCSWADwACVmAAAWwE+AUrAAK8pARzAAK8wLsAAXksCAAIWwACvRYDAAK9AwEkKnFvAAJYTNMAAr1ADwACvUMAAr6cAAAABAQHAAK9lAAAAW10DwAD9OwFgA8AAlZgAAGADwACWHwE+AUrAAK96AR/AAK+FwACWJgIAAoLAAK+MwEkLPYPAAK+UwEkLjAAAwACQCgHAAF5GgcAAr7jASQq3wACQCGADwACVmAbAAJBEgZbAAK/NwACv58AAsYMAALDsAWrAAK/OYAPAAP3kAgAAAQPAAK/9wACxgwAAAAEBAcAAsBMAAACD82ADwACXPgAAYAPAAJWYAT4BSsAAsB8BJsAAsB8BHMAAsCYuwABeSwIAAhzAALB9HMAAsE8WwACwRIDAALA/wEkMJJ9RwACXQICrAQFgA8AAlZgBNMAAsFMDwACwU8AAsHsAAAABAQHAALBgAAAAn1NgA8AAl00AAGADwACVmAFKwACwbQEWwACwdoHAALBtwEkMlICWwACXUADAAP0EgK0AAAAAwAD9DzTAALCPA8AAsI/AALF+AAAAAQEBwACwngAAACldA8AA/TsBYAPAAJRhAABgA8AAlz4BPgJOwACwwMAAsMsAAJ9RXQPAAP07AWADwACXTQEewACw0cAA/UMCAWADwACXTQIWwACw5oHAALDfwEkM6WHAAP1rNMAAsO4DwACw7sAAsUMAAAABAQHAALDzAAAAYmADwAD8lwAAYAPAAJdNAT4BSsAAsQABH8AAsQvAAJdZAgACFsAAsSocwACxJhbAALEcgMAAsRfASQwkn1HAAJdASwEAAYLAALEnwEkNXQDAAP1KgL3AAJdPJsAAsTYBHMAAsTaBwACxMMBJDOlLAQABgsAAsTfASQ1dAMAA/UpgA8AAlZgAAErAALFMAR/AALFXwACXTAEAAYLAALFswEkNCgAAwACQCmADwACVmAbAAJBFgZbAALGIwACxlMAAscoAALD/AWrAALGJYAPAAP3kAgAAAQPAALGiwACxygAAAAEBAcAAsbAAAACD82ADwACWdwAAWwFKwACxuQEcwACxuS7AAEjjAQABgMAAscXASQ5JAMAAkAAGwACQRoGWwACxz8AAsenAALThAACxAgFqwACx0GADwAD95AIAAAEDwACx9cAAtOEAAAABAQHAALIBAAAAg/NgA8AAlkcAAGADwACVmAE+AknAALINIhzAALIZFsAAshaAwACyEcBJDrOqucAAlklIAQABJ54JAMAA/o0BHMAAsiwWwACyKYDAALIkwEkOs6q5wACWSUgBAAEnnf8AwAD+jT4C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gsBJKg6xF8AAlSZIAQABKwDAAP3xKxzAANC5LsAAXoEBAAEWwADQz4DAANDKwEkqDrEXwACVJgDAAJAtAWADwACUhj0cwADQ4y6GKAEAAR/AAND0wACVLwMAA4HAAND7wEkqR4LAANEBwEkqgYPAANEMwEkrHgAAwACP/ErAANEhAD89F8AA0TQuwABeJinAAI/eTsAA0VHAANFfAADAAF6SYAPAAPyXARzAANFhLsAAXjUBAAEnwABekwDAAI/3TsAA0X/AANGMAADAAF6QYAPAAPyXASMcwADRphbAANGcgMAA0ZfASSoOsRbAAJUlSAEAASsAwAD98YHAANGxwEkr1BzAANHBLsAAXjUBAAEnmkYAwACP9wFgA8AA/JdOwADR3cAA0eoAAMAAXpFgA8AA/JcBHMAA0ewuwABeNQEAASeaSADAAI/3TsAA0gnAANIbAADAAF6UYAPAAPyXARzAANIdLsAAXjUBAAEnwABelQDAAI/3ScAA0jwhHMAA0lEWwADSRYDAANJAwEkqDrEXwACVJkgBAAErAMAA/fE+Aj0cwADSbxbAANJiLsAAXgzAAI++gL8CAAIWwADSdYDAANJwwEkqDrEXwACVJoPAANKEwEksYADAAP2CPRzAANKkFsAA0pguwABT48AAj8JWAQABFsAA0q2AwADSqMBJKg6xF8AAlSYAwAD9TD89HMAA0tMWwADSxi7AAF4NwACPv4C/AgACgMAA0tTASSoOgsAA0tzASSwBAMAA/YI9HMAA0voWwADS7i7AAFPjwACPwlYBAAGAwADS/sBJKg4AwAD9TD0cwADTcS7AAF6OAAAAAMAAkE89HMAA04kuwABeQAEAARbAANOdgMAA05jASSoOgm3AAJUkAMAAkAFOwADTscAA07YAAIHqYAPAAJRhARzAANPEFsAA07guwABT48AAj8KGJgAAAADAAP1aQBzAANPihcAA093ASS3gSAEAAYDAANPlwEkqDgDAAP3xwADT3cAA0+kAScAA0/EcwADUBhbAANP6gMAA0/XASSoOsRfAAJUmSAEAASsAwAD98T4CPRzAANQXLsAAXo4AAAAAwACQTz0cwADUMC6jygIAAoTAANQ4wEksiybAANRQARbAANRQgMAA1EvASSoOpaTAAJRmYAPAAEJLAMAAj/s+Aj0cwADUvi6GKAEAARzAANTcasAA1NlgA8AAmAbAASCbhWACAAInwABeljHAANT0YAPAAJWYAhbAANT1LoO1wACP5x7AANT7wACTPQEAAYTAANUFwEksiwAAwACYCQDAAI/8PRzAANUiLqPKAgACg8AA1SrASSxgJsAA1T0BFsAA1T2AwADVOMBJKg6lpMAAlGZgA8AAQksAwACP+0nAANVcIRzAANVvFsAA1WWAwADVYMBJKg6xFsAAlSVIAQABKwDAAP3xPg09HMAA1YAuwABeNgEAAYLAANWLwEksAQDAAI/4PRzAANZEFsAA1jcuwABeDcAAj7+AvwIAAhbAANZKgMAA1kXASSoOsRbAAJUlgcAA1lfASSvUAMAA/YI9HMAA1ngWwADWbC7AAFPjwACPwlYBAAEWwADWgYDAANZ8wEkqDrEWwACVJQDAAP1MPRzAANaTLsAAXo4AAAAAwACQT07AANdfwADXawAAwABel2ADwAD+fgEcwADXbS7AAEn2AQABFsAA15IWwADXhhbAANd8gMAA13fASSoOsRbAAJUlnt7AAJUygL3AAJZYAMAAj/U9HMAA164WwADXny7AAF4JwACPu1YBAAEfwADXtsAAlnYBAAGGwADXzcBJMBYAAMAA/Uw9HMAA1/8WwADX4i7AAF4TwACPxlYBAAEfwADYB4IDAgJgA8AA/n5gA8AA/n4CFsAA2CcWwADYGxbAANgRgMAA2AzASSoOsRbAAJUlnt7AAJUygL3AAJZYhsAA2C3ASTAWAADAAP1MPRzAANhCLoYoAQABHMAA2FVqwADYUmADwACYBsABIJuFYAIAAifAAF5EMcAA2GlgA8AA/eQChsAA2GrASTAWFsAA2HcuwABeK8AAj+kAwACYCQDAAI/8PRzAANiOLsAAXkABAAEWwADYrBbAANiigMAA2J3ASSoOsRbAAJUlgm3AAJUzAMAAkAE9HMAA2MsWwADYuS7AAF4TwACPxoYmAAAAAMAA/VpJwADY3yEcwADY9BbAANjogMAA2OPASSoOsRfAAJUmSAEAASsAwAD98T4CPRzAANlmLoYoAQABHMAA2YZqwADZdmADwACYBsABIJuFYAIAAifAAF6WMcAA2Z5gA8AAlZgCFsAA2Z8ug7XAAI/nHsAA2aXAAJM9AQABhMAA2a/ASSyLAADAAJgJAMAAj/w9HMAA2c4uo8oCAAKDwADZ1sBJLGAmwADZ6QEWwADZ6YDAANnkwEkqDqWkwACUZmADwABCSwDAAI/7PgE9HMAA2hQuo8oCAAKEwADaHMBJLIsmwADaNAEWwADaNIDAANovwEkqDqWkwACUZmADwABCSwDAAI/7TsAA2l7AANpjAACB6mADwACUYQEcwADacRbAANplLsAAU+PAAI/ChiYAAAAAwAD9WkAcwADakYfAANqMwEkyrEgBAAEWwADamYDAANqUwEkqDrEWwACVJQDAAP3xwADajMAA2qIAPz0cwADbPC7AAF42AQABgcAA20fASSvUAMAAj/hOwADbZsAA23kAAMAAXphdA8AA/TsBYAPAAPyXARzAANt7LsAAXo/AAI+1AAAAAMAAkAZOwADbqcAA27MAAMAAXplgA8AA/JcBHMAA28iGwADbtcBJMy+GJgAAAADAAP1aScAA29oWwADb8YbAANvewEkzL4O3wAD9Hj4BPRzAANyNLoYoAQABHMAA3KBqwADcnWADwACYBsABIJuFYAIAAifAAF5EMcAA3LRgA8AAlZgCFsAA3L4ug7XAAI/nH8AA3NDAAJcxAQABHMAA3QYcwADc94bAANzkwEkzL4CrAQFgA8AAlxgBasAA3P5hAwFgA8AA/a5gA8AAlxjAAWqsAMAA/QSArQAAAADAAP0PAADAAJgJAMAAj/w/ScAA3SUcwADdOhbAAN0ugMAA3SnASSoOsRfAAJUmSAEAASsAwAD98T4BPRzAAN3XLqPKAgACh8AA3d/ASTNiJsAA3e8BFsAA3e+AwADd6sBJKg6lpMAAlGZgA8AAQksAwACP+z9JwADeDSEcwADeIhbAAN4WgMAA3hHASSoOsRfAAJUmSAEAASsAwAD98T4ITsAA3jvAAN5AAACB6mADwACUYQEcwADeThbAAN5CLsAAU+PAAI/ChiYAAAAAwAD9WkAcwADebhTAAN5pwEk02ggASAEAARbAAN52gMAA3nHASSoOsRfAAJUmAMAA/fHAAN5pwADegQA9HMAA3osuwABeNgEAAYPAAN6WwEksYADAAI/4PRzAAN6rLsAAXo4AAAAAwACQTz0cwADexC7AAF5AAQABFsAA3tiAwADe08BJKg6xF8AAlSYAwACQAT0cwADe7C6GKAEAAR/AAN79wACYBQEAASfAAF6aAADAAI/8PRzAAN80LoYoAQABHMAA30dq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ARRZwACWdgEAARTAARRwwElYRwkAAB/AARR7wACWbAEAARTAARSKwElYcQoAAAAAwAD9TE7AARS/wAEUzgAAwABewWADwACVxwEfwAEU3MAAldUBAAGGwAEU98BJV9MATsABFRnAARUpAADAAF7CYAPAAJWYASbAARUZARzAARWZHMABFS1qwAEVLmADwACYBsABIJsgAgACJ8AAXsMywAEVTGADwAD+fmADwAD+fgIngXYWwAEVXi7AAF4VwACPySfAAF4rFsABFYAuwABeHMAAj9EAwACYCK/9AQABhcABFa/ASVe2AMAAlG9gA8AAlZhOwAEV2cABFeEAAMAAXsRgA8AAlZgBJsABFdkBHMABFjQcwAEV5WrAARXmYAPAAJgGwAEgmyACAAInwABexTLAARX9YAPAAP5+YAPAAJZjAie6qxbAARYNLrqrwACP5SdVFsABFiQuVcAAj+YAwACYCK/9AQABhcABFkrASVe2AMAAlG9gA8AAlZhOwAEWc8ABFoIAAMAAXsZgA8AAlIEBJsABFnMBHMABF6McwAEWimrAARaHYAPAAJgGwAEgm4VgAgACJ8AAXscywAEXB2ADwAD+fmADwAD95AQngfUWwAEXHC7AAF4WwACPyieVKR7AARc6wACTPQEAAWrAARdQYAPAAPyXFQAnwABewhTAARdxwElZVQkAJ8AAXsQUwAEXk8BJWecKAADAAJgJr/0BAAGFwAEXucBJV7YAwACUb2ADwACUgU7AARfmwAEX+QAAwABeyGADwACWhwEmwAEX5gEcwAEZJRzAARf9asABF/5gA8AAmAbAASCbIAIAAifAAF7JMsABGHtgA8AA/n5gA8AA/eQFJ8AAXsqCwAEYkcBJV4AngfUWwAEYsy7AAF4WwACPyieCbRbAARjQLsAARiHAAI/LJ4F2FsABGOouwABeFcAAj8knwABexhTAARkOwElacQsAAMAAmAiv/QEAAYTAARk7wElXpADAAJRvYAPAAJaHTsABGWXAARl+AADAAF7LYAPAAJUKASbAARllARzAARmrH8ABGYTAAJUVAQABFMABGY7ASVstDAAAr/0BAAGFwAEZwcBJV7YAwACUb2ADwACVCk7AARnkwAEZ8gAAwABetWADwACWlgEmwAEZ5AEcwAEbdBzAARn2asABGfdgA8AAmAbAASCbIAIAAifAAF7MMsABGrJgA8AA/n5gA8AA/eQEJ8AAXs0WwAEa1oDAARrLwElXUoO3wAD9HifAAF7BFMABGvrASVkpCAAnwABezoPAARsbwElXkifAAF7LFMABG1PASVvsDQAAwACYCK/9AQABhMABG4rASVekAMAAlG9gA8AAlpZOwAEbuMABG8wAAMAAXs9gA8AAlZgBJsABG7gBHMABHIwcwAEb2GrAARvZYAPAAJgGwAEgmyACAAInwABe0DLAARwHYAPAAP5+YAPAAP3kAyfAAEYjFsABHCIuwABGI8AAkHMngpQWwAEcQS7AAEYkwACQdCfAAF61FMABHHbASVw+DgAAwACYCK/9AQABhcABHKLASVe2AMAAlG9gA8AAlZhOwAEcy8ABHOUAAMAAXtFgA8AAlIEBJsABHMsBHMABHRMfwAEc68AAlRUBAAEUwAEc9cBJXPMPAACv/QEAAYXAAR0pwElXtgDAAJRvYAPAAJSBSsABHUUBJsABHUUBHMABHuocwAEdTmrAAR1PYAPAAJgGwAEgmyACAAInwABe0jLAAR4QYAPAAP5+YAPAAP3kBSfAAF6/h8ABHi3ASVf6J4TFgcABHljASVdpJ8AAXtMWwAEehBbAAR57LsAAXhTAAI/HqX/AAJClJ5mwFsABHpsuwABeHsAAj9MnwABe0RTAAR7IwEldlRAAAMAAmAiv/QEAAYTAAR8AwElXpADAAJRvYAPAAJaWBsAAkH2BlsABHyPAAR80wAEg5AAAwABeTgFqwAEfJGADwAD95AIAAAEDwAEfQMABIOQAAAABAQHAAR9TAAAApaRgA8AAQksAAFwBPgQ9F8ABH2wuwABeGSnAAI/OPRzAAR+1LsAAXjYBAAEWwAEfwC7AAF4PwACPwQDAAI/4TsABH+HAAR/9AADAAF7UYAPAAJWYASbAAR/hARzAASBIHMABIAFqwAEgAmADwACYBsABIJsgAgACJ8AARhYxwAEgDWADwACVmAIWwAEgFS7AAEYmwACQdxbAASA0LsAAXivAAI/pAMAAmAiv/QEAAYDAASBewEle1QDAAJRvYAPAAJWYPRzAASB2LoYoAQABJsABILcBHMABILcfwAEgh8AAlRUBAAGBwAEgkcBJXxwAr/0BAAGAwAEgzcBJXtUAwACUb2ADwACUgQDAAI/8BsAAkH6BlsABITPAASFEwAEi6QAAwABeTQFqwAEhNGADwAD95AIAAAEDwAEhUsABIukAAAABAQHAASFlAAAApaRgA8AAQksAAFwBPgNJwAEhfhbAASGLFsABIYIuwABeFMAAj8fAAF5VwACQpD4BPRzAASGnLsAAXjYBAAEWwAEhsi7AAF4OwACPwADAAI/4PgE9HMABIdEuhigBAAEfwAEh4sAAmAUBAAEnwABeqQAAwACP/E7AASIawAEiLQAAwABe1WADwACVmAEmwAEiGgEcwAEiVhzAASI5asABIjpgA8AAmAbAASCbIAIAAifAAF7WMcABIkRgA8AAlZgBFsABIkUusa7AAJB1AMAAmAiv/QEAAYDAASJswElgIgDAAJRvYAPAAJWYPRzAASKELoYoAQABJsABIrwBHMABIrwfwAEilcAAlRUBAAGBwAEin8BJYKAAr/0BAAGAwAEi0sBJYCIAwACUb2ADwACUgQDAAI/8BsAAkH+BlsABIu7AASMewAEjywAAwABeUwFqwAEi72ADwAD95AIAAAEDwAEjNcABI8sAAAABAQHAASNPAAAApaRgA8AAQksAAF0DwAD8+QFgA8AAlfYBPgJOwAEjiMABI5IAAIY6XQPAAP07AWADwACV9gExwAEjr2ADwACV9gBKwAEjtwGBwAEjvsBJYbgGwACQgIGWwAEj0MABI+nAASSnAADAAF5eAWrAASPRYAPAAP3kAgAAAQPAASP3wAEkpwAAAAICAsABJA0AAACAlmADwACVmADAASQmAAAApaRgA8AAQksAAGADwACUgQE+AT0wwAEkPxzAASROFsABJEUupRDAAI/VpaUCAAIWwAEkZS6lkcAAj+snwABe1wC2BQbAAJCBgZbAASSswAEkvcABJTIAAMAAXi4BasABJK1gA8AA/eQCAAABA8ABJMzAASUyAAAAAAAAAFwBPgE9F8ABJNUuwABGJBzAAST8LsAAXjQBAAEWwAElES7AAEYkwACQdADAAI/2wACQdAAASVVqAElVsQBJVxwASV6dAElf6gBJYV4ASWHtAElifwBJYusAAAAIAsAAkISBlsABJTfAASU9wAFOQgPAAF7YAAABYAHAAI+5AAAJBMAAkIaBlsABJonAASadGMAAXtkAYAPAAP5+ASsEwACQh4GWwAEm5sABJvQYwABe2gBgA8AA/n4BKwTAAJCIgZbAASkiwAEpMQmxrABgA8AAlZgABMAAkImBlsABKbbAASnDCcAARicAYAPAAJWYAATAAJCKgZbAASnbwAEp9RjAAEYoAF0DwAD9OwFgA8AAlZgABMAAkIuBlsABKlPAASplCbGtAGADwACVmAAEwACQjIGWwAEq9sABKwUJwABGKQBgA8AAlZgABMAAkI2BlsABK53AASuwCcAARiUAYAPAAJWYAATAAJCOgZbAASvJwAEr0QmxqABgA8AAlZgAAQXAAJCcgZbAASvWwAEr1sABLXMAAAADwAEr58ABLXMAAAALAgLAASv7AAAApRBgA7X/AMABLA8AAAClkWADtjEACcABLCYAAASxrGADwACVmAFqAGADwAD9oXnAASxCAAAEsa1gA8AAlZgBagBgA8AA/aF5wAEsYQAABMAARidgA8AAlZgBagBgA8AA/aF5wAEsewAABMAARihdA8AA/TsBYAPAAJWYAWoAYAPAAP2hecABLKIAAATAAEYpYAPAAJWYAWoAYAPAAP2hecABLL4AAATAAEYlYAPAAJWYAWoAYAPAAP2hecABLN4AAASxqGADwACVmAFqAGADwAD9oXnAASz1AAAAwABGH2EDAWADwAD+fmADwAD+fgFqAGADwAD9oXnAAS0qAAAAwABGIWADwACVogFqAGADwAD9oXlgA8AAkIQBPwgIAcAAkIiCAMBJZHoIAcAAkIuDAMBJZJMIAcAAkImEAMBJZKwIAcAAkIqFAMBJZMcIAcAAkIyGAMBJZOkIAcAAkI2HAMBJZQQIAcAAkI4UAMBJZR8IAAkAwAEtPcAAkFkEAASAwAEtQ8BJZF2BwAEtTcBJZGsUwAEtWMBJZTgJABTAAS1qwEllXAoAAAoGwACQkIGWwAElbcABJYLAASWVAQDAAF4tAWrAASVuYAPAAP3kAgAAAQPAASWOwAEllQAAAAAAAABgA8AA+tEBSsABJZEBKQbAAJCRgZbAASYgwAEmM8ABJn0BAMAAXtsAAAABA8ABJkTAASZ9AAAAAAAAAGADwACWYwE+AUrAASZKAR/AASZVwACWbAEAARbAASZkLsAAXtnAAJCGAAbAAJCSgZbAASb4wAEnC8ABJzsBAMAAXtwAAAABA8ABJxbAASc7AAAAAAAAAGADwACWYwFKwAEnGQEfwAEnHcAAlmwBAAEWwAEnLC7AAF7awACQhwAGwACQlIGWwAEvJMABLzXAATSBAADAAF6gAWrAAS8lYAPAAP3kAgAAAQPAAS89wAE0gQAAAAMDA8ABL0sAAACD82ADwACViwDAAS9fAAAAgm9gA8AAlZgAwAEvgwAAAKWkYAPAAEJLAABcAT4GTsABMEzAATBjAADAAF7dXQPAAP07AWADwAD8lwExwAEwamADwAD8lwEWwAEway7AAF4OwACPwD0cwAEwkoPAATB7wElnboClAQABHMABMOwcwAEwrhbAATCZLsAAU+PAAI/CgaUBAAE0wAEwtAPAATC0wAEw4QAAAAEBAcABML0AAACD82ADwACUYQAAYAPAAPrRAUrAATDGASEcwAEw2hzAATDTFsABMMYuwABeDMAAj75LAQABhMABMNTASWfpAMAA/YFIAQABKwDAAP27AMAA/QWAqwEBYAPAAPyXATTAATDwA8ABMPDAATEVAAAAAQEBwAEw+QAAAIPzYAPAAJRhAABgA8AA/JcBSsABMQIBHMABMQ8WwAExAi7AAF4MwACPvksBAAGEwAExEMBJaGAAwAD9gQDAAP0EAMAA/U09HMABMR0uhigBAAEmwAExswEcwAExsxzAATEwasABMS1gA8AAmAbAASCbhWACAAInwABeRDHAATFEYAPAAJWYAhbAATFMLsAAXtvAAJCRH8ABMWjAAJcxAQABHMABMaIcwAExk4PAATF8wElnboCrAQFgA8AAlxgBasABMZphAwFgA8AA/a5gA8AAlxjAAWqsAMAA/QSArQAAAADAAP0PAADAAJgJr/0BAAGCwAExycBJZ1gAwACUb2ADwACUgQDAAI/8TsABMfDAATIEAADAAF7eYAPAAJWYASbAATHwARzAATKlHMABMghqwAEyCWADwACYBsABIJsgAgACJ8AAXt8ywAEyLWADwAD+fmADwACVmAInwABGKSMWwAEyTYDAATJIwElnOLEQwACVjhbAATJXLsAARiXAAJCNFsABMm0uwABGKcAAkIwBYAPAAJWYJ4JvgcABMpLASWdIAMAAmAiv/QEAAYLAATK7wElnWADAAJRvYAPAAJWYTsABMuHAATL1AADAAF7gYAPAAJWYASbAATLhARzAATPtHMABMvlqwAEzA2ADwACYBsABIJsgAgACJ8AAXuEywAEzSGADwAD+fmADwAD95AQnsawWwAEzYy6xrMAAkIgn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SsdOwACujMAArpYAAKOmYAPAAP5+ARzAAK6fFsAArpguuBXAAJDtwACREcAASR0BAAGFwACuucBKFqcAwABlmT2MwACuyMBKFVYfwACu1cAAlX4CAAKGwACu6cBKFs+EwACu9MBKFVYAPRzAAK8aFsAArwMuwABfGcAAkRlWAQABhcAArx7AShanAMAA/jw9icAAry3AShTmHMAAr1OBwACvQcBKFOaD7QEAAYXAAK9bwEoWpwCTPD4BRsAAr3fAAK+uwACvjAAAAJkuYAPAAIX5ABbAAK+mgMAAr5XAShTJmWDAAErGPgFJwACvuBbAAK/ChcAAr7zAShePo7/AAIX+PgJOwACv5MAAr+4AAKOmYAPAAP5+ARzAAK/3FsAAr/AuuBXAAJDtwACREcAASRkBAAGFwACwBsBKF48AwABllj2MwACwGMBKFVYfwACwJcAAlX4CAAKGwACwOcBKF9GEwACwRMBKFVYAP07AALB0wACwewAAgklgA8AAhgIBFsAAsI6AwACwfcBKFMmCScAASsdJwACwmhbAALClhcAAsJ7AShg5wABMt8AAhgo+A07AALFnwACxcQAAo6ZgA8AA/n4BHMAAsXoWwACxcy64FcAAkO3AAJERwABJGgEAAYXAALGRwEoYOQDAAGWXPYzAALGgwEoVVh/AALGtwACVfgIAAobAALHBwEoYfoTAALHMwEoVVgA9HMAAsecWwACx2y7AAF8XwACRF1YBAAGFwACx68BKGDkAwAD+PD89F8AAsf8uwABfGoPAALISwEoVNcAAkRs9HMAAshwuwABfRAEAARbAALJAgMAAsi/AShTJgm3AAErFAMAAkUJJwACyTBbAALJhgMAAslDAShTJu1PAAErIPgFDwACydSEWwACyj4HAALJ9wEoU5oFVkzQ+Az0cwACysRbAALKiLsAAXxjAAJEYhF4BAAEWwACyyoHAALK4wEoU5oPvkzEAwAD+Pj0cwACy8BbAALLZLsAAXxnAAJEZhF4BAAEWwACzCYHAALL3wEoU5oPvkzEAwAD+Pj2JwACzGMBKFOYWwACzPoHAALMswEoU5oPwkzI+AT0cwACzaxbAALNfLsAAXxfAAJEXhF4BAAEWwACzg4DAALNywEoUyYJJwABKxwDAAP4+PRfAALOXLsAAXxqCwACzqsBKFRHAAJEbPRzAALO8LsAA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/Uw/BsAAkWOBl8AAzwrAAM8PwADRBAAAwABfXgAAAAEDwADPJcAA0QQAAAABAQHAAM8yAAAAg/NgA8AARbAAAFwBPgROwADPSsAAz1IAAFVgA8AArisBHMAAz2IWwADPVC7AAF8dwACRHsAAX4MBAAGAwADPccBKLBMAwACuQEnAAM98HMAAz4iBwADPgMBKLClIAQABKwDAAP3xSsAAz5EAPz0cwADPni7AAF96AwADFsAAz8OBwADPu8BKLCnAAEO+wACuLRzAAM/ZFsAAz8suwABfHcAAkR7AAF+EAAAAAMAArj4WwADP6C7AAF94wACRYQDAAJFiRsAAz/7AANAzwADQFgAAAJ0qXQPAAK4jAWADwABF5wAWwADQJoHAANAewEosKcAAUAzAAK4uPgNOwADQQsAA0EcAAIC9YAPAAP5+ARzAANBXFsAA0EkuwABfHcAAkR6ZSQEAARbAANBkgsAA0F/ASizmwABfecAAriYAwACuPz0cwADQeC6vlQEAARbAANCBgsAA0HzASizmg0rAAK4lAMAAkUs9HMAA0JAuwABfTwMAA4PAANCfwEotFhzAANClLqEUAAAAAMAAkTY1AAAAAQBgA8AAQksBFsAA0MIWwADQu4LAANC2wEos5oNKwACuJaWkwABF6iMcwADQ1IQAwEotqUgBAAErAAAWwADQ6BbAANDcgsAA0NfASizmwABfecAArialpMAAReqEAMBKLakBYAPAAEJLAMAAkUkGwACRZIGXwADRCcAA0Q7AANJMAADAAF93AAAAAQPAANEfwADSTAAAAAEBAcAA0SwAAACD82ADwABFsAAAXAE+BE7AANFFwADRUQAAuUZgA8AARecBFsAA0ViAwADRU8BKLkaDHsAARaJDwADRYyEewADRa8AA9ngCAAKBwADRdcBKLlwWwADRh4DAANGCwEouRoHqwABFowA+AknAANGWIRzAANGbLsAAXyQBAAGBwADRr8BKLlwAwACRLj4BPRzAANHHLsAAX1ABAAGBwADRzsBKLlwAwACRSj89icAA0erASi5cFsAA0gSBwADR+MBKLlyDtcAARfE9HMAA0hQuwABfXgEAAYDAANIrwEouRgDAAJFjPRzAANI2LprCAQABgcAA0jzASi5cAMAAkUwGwACRZYGXwADSUcAA0lbAANNhAADAAF+FAAAAAQPAANJowADTYQAAAAMDA8AA0n4AAACD82ADwABHzADAANKLAAAAqrlgA8AA/n4AwADSoQAAAKWkYAPAAEJLAABcAT4EPRzAANK6Lq+VAQABFsAA0sOAwADSvsBKL3WFxcAAR9AAwACRS07AANLcwADS4wAAwABfhmADwACVmAEcwADS5S6hFAAAAADAAJE2PRzAANLwLq+VAQABFsAA0vmAwADS9MBKL3WFx8AAR9EAwACRSz0cwADTBS6hEQEAASbAANM0ARzAANM0H8AA0w7AAJY3AwADgcAA0xjASi+Fg8AA0xzASi/QHMAA0yQuoRQAAAAAwACRNgCv/QEAAYLAANNKwEovlQDAAJRvYAPAAJWYAMAAkTUGwACRZoGXwADTZsAA03LAANOsAAC5EAFqwADTZ2ADwAD95AIAAAEDwADTgMAA06wAAAABAQHAANOMAAAAg/NgA8AASfMAAFsBPgE9HMAA05gur5UBAAEWwADToYDAANOcwEowtIJJwABJ9QDAAJFLBsAAkWeBl8AA07HAANOxwADUIAAAuW0AAAABA8AA08LAANQgAAAAAgICwADT0QAAAIPzYAPAAEfMAMAA094AAACquWADwAD+fgAAWwE+AT0cwADT6C7AAF+FAwADgMAA0/vASjEYgcAA1AHASjEoFsAA1AqAwADUBcBKMRilpMAAReoAwACRZQbAAJFogZfAANQlwADUJcAA1JAAALl2AAAAAQPAANQ0wADUkAAAAAICAsAA1EEAAACD82ADwABJAgDAANROAAAAqrlgA8AA/n4AAFsBPgE9HMAA1FguwABfhQMAA4DAANRrwEoxoIHAANRxwEoxsBbAANR6gMAA1HXASjGgpaTAAEXqAMAAkWUGwACRaYGXwADVCcAA1QnAANYbAADAAF+HAAAAAQPAANUdwADWGwAAAAICAsAA1SsAAACD82ADwABIGwDAANU4AAAAqrlgA8AA/n4AAFsBPgI9HMAA1UIuuW0CAAKAwADVVMBKMiqBwADVWsBKMjoAwACRZ0nAANVjIiEcwADVaoHAANVnwEoyOkgBAAEnleEAwAD+jQAcwADVdi7AAF8rAQABgMAA1Y3ASjIqAMAAkTE+AT0cwADVnC6hEQEAASbAANXjARzAANXjH8AA1aXAAJY3AwADJ5XhHMAA1bYuoRQAAAAAwACRNh/AANXBwACXIwEAASeEDQAAr/0BAAEWwADV/oDAANX5wEoyKqWkwABF6gDAAJRvYAPAAJWYAMAAkTU/BsAAkWqBl8AA1iDAANYgwADWxQAAuXIAAAABA8AA1jDAANbFAAAAAgICwADWPgAAAIPzYAPAAEhLAMAA1ksAAACquWADwAD+fgAAWwE+Aj0cwADWVS6vlQEAARbAANZegMAA1lnASjNMhcLAAEhPAMAAkUs9HMAA1mwuoREBAAEmwADWkwEcwADWkx/AANZ+wACWRgIAAoHAANaIwEozXBzAANaMLqEUAAAAAMAAkTYAr/0BAAEWwADWroDAANapwEozTKWkwABF6gDAAJRvYAPAAJWYAMAAkTUGwACRa4GXwADXPsAA1z7AANg/AADAAF+IAAAAAQPAANdRwADYPwAAAAICAsAA118AAACD82ADwABISwDAANdsAAAAqrlgA8AA/n4AAFsBPgI9HMAA13YuuXICAAKAwADXh8BKNCiBwADXjcBKNDgAwACRaknAANeWHMAA15ouwABfKwEAAYDAANexwEo0KADAAJExPgE9HMAA18AuoREBAAEmwADYBwEcwADYBx/AANfJwACWNwMAAyeV4RzAANfaLqEUAAAAAMAAkTYfwADX5cAAlyMBAAEnhA0AAK/9AQABFsAA2CKAwADYHcBKNCilpMAAReoAwACUb2ADwACVmADAAJE1PwbAAJFsgZfAANhEwADYScAA3HkAAMAAX4kAAAABA8AA2F/AANx5AAAAAwICwADYcQAAALlGYAPAAEkHAMAA2JAAAAClpGADwABCSwABwADYrwAAAMAAX4pgA8AA+tEBasAA2LhgA8AA+tEAXAE+BE7AANjNwADY0AAAqrlgA8AA/n4BFsAA2N6AwADY0sBKNS+63cAASQlOwADZA8AA2QgAAIXFYAPAAEXnARbAANkWgMAA2QrASjUvhcXAAEfQTsAA2S3AANkzAACFx2ADwABF5wEWwADZQYDAANk1wEo1L4XHwABH0UnAANlMIRzAANlTg8AA2VDASjVzSAEAASsAwAD+jT4EPRzAANlkLq+VAQABhMAA2WjASjWbAMAAkUtOwADZg8AA2YoAAMAAX4ZgA8AAlZgBHMAA2YwuoRQAAAAAwACRNj0cwADZmS6vlQEAAYXAANmdwEo1wwDAAJFLPRzAANmrLqERAQAB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S07AAQ+swAEPswAAg8VgA8AAlZgBHMABD7UuoRQAAAAAwACRNk7AAQ/IwAEP0wAArOtgA8AAlaIBHMABD9wWwAEP1S64FcAAkO3AAJERr+YBAAEmwAEP9AEWwAEP9IDAAQ/vwEpgWJZSwABHJGADvVEAwABlh07AARAWwAEQIAAAW10DwAD9OwFgA8AAlZgBHMABECIuhbABAAEWwAEQNoDAARAxwEpgWIJVwABF7QDAAJFGPRzAARBDLqERAQABJsABEIkBHMABEIkewAEQSMAAk0ADAAOBwAEQYcBKYKKCwAEQacBKYMaDwAEQdcBKYRcAr/0BAAEWwAEQpIDAARCfwEpgWKWkwABF6gDAAJRvYAPAAJWYAMAAkTU9HMABEMcWwAEQvS7AAElTwACQ7cAAkRSvuQEAAR7AARDdwABoNQIAAibAARELARbAARELgMABEQbASmBYllLAAEckYAO9cB/AAREYwABpRAEAARbAARE4g8ABES7ASmEXYcAA/WsAAAC2vgbAAJGNgZfAARFKwAERW8ABFHMAALkNAWrAARFLYAPAAP3kAgAAAQPAARFzwAEUcwAAAAEBAcABEYkAAACD82ADwABHRAAAXAE+A07AARGkwAERrAAAllJgA8AAdcEBJsABEaQBFsABEbOAwAERrsBKYl2WUsAARyRgA8AAdcFJwAERwBbAARHMgcABEcTASmJzhQ3AAHVyPgU9HMABEeYur5UBAAEcwAER9RbAARHvgMABEerASmJdglXAAEXtSwEAAZMAwAD9SgDAAJFLTsABEg/AARIWAACDxWADwACVmAEcwAESGC6hFAAAAADAAJE2TsABEjnAARJDAABbXQPAAP07AWADwACVmAEcwAESRS6FsAEAARbAARJZgMABElTASmJdglXAAEXtAMAAkUZOwAEScMABEnsAAKzrYAPAAJWiARzAARKEFsABEn0uuBXAAJDtwACREa/mAQABgcABEpfASmJzAMAAZYc9HMABEqcuoREBAAEmwAES8QEcwAES8R7AARKswACTQAMAA4LAARLHwEpi9oTAARLPwEpjWIPAARLbwEpjGgCv/QEAARbAARMMgMABEwfASmJdpaTAAEXqAMAAlG9gA8AAlZgAwACRNT4DPRzAARM0LqERAQABHMABE0IWwAETOS7AAERHwACQ7cAAkQzAAERWAQABgcABE1fASmJzAMAAXUIAwACRNU7AARN8wAEThgAAW10DwAD9OwFgA8AAlZgBHMABE4guhbACAAEWwAETnIDAAROXwEpiXYJVwABF7QFqk8AAkUY9HMABE7UuoREBAAEfwAETvsAAlh4DAAIcwAETxi6hFAAAAADAAJE2gsABE83ASmQ7AaWkFsABE/qAwAET9cBKYl2lpMAAReoAwACRNT0cwAEULRbAARQaLsAASVPAAJDtwACRFK+5AQABHsABFEPAAGg2AQABJsABFGYBFsABFGaAwAEUYcBKYl2WUsAARyRgA71RAAC2vgbAAJGOgZfAARR4wAEUicABF9QAALkbAWrAARR5YAPAAP3kAgAAAQPAARSgwAEX1AAAAAEBAcABFLUAAACD82ADwABJfQAAXAE+CU7AARTVwAEU3wAAW10DwAD9OwFgA8AAlZgBHMABFOEuhbABAAEWwAEU9YDAARTwwEplSIJVwABF7QDAAJFGTsABFRDAARUYAACxWmADwACVmAEcwAEVKRbAARUiLrgVwACQ7cAAkRGv/AEAARbAARVUFsABFUQutHzAAJDtwACRKbGEuMIAwABlfU7AARV3wAEVgAAApTRgA8AAS88BFsABFYeAwAEVgsBKZUilNMAARudOwAEVpsABFa4AAISIXQPAAP4vAWADvSoBHMABFckWwAEVuC7AAFOtwACQ7cAAkSvAAFOaAgACFsABFeqDwAEV4cBKZeiAvcAAS90WwAEV8C62I8AAkO3AAJETAMAAeo09HMABFg0WwAEWAy7AAElTwACQ7cAAkRSvqwEAAYPAARYowEpl6AC2xk7AARY/wAEWSgAArOtgA8AAlaIBHMABFlMWwAEWTC64FcAAkO3AAJERr/gCAAKDwAEWbcBKZeiEwAEWd8BKZhAAwABliz0cwAEWhS6hEQEAASbAARbMARzAARbMHsABForAAJNAAwADgsABFqPASmWchcABFqzASmaZgcABFrjASmVeAK/9AQABFsABFueAwAEW4sBKZUilpMAAReoAwACUb2ADwACVmADAAJE1ScABFwAWwAEXDYPAARcEwEpl6IVCwABL3z4BPRzAARcfLsAAX5oBAAGAwAEXLsBKZUgAwACRkknAARdAFsABF02DwAEXRMBKZeiFRMAAS+A+AT0cwAEXXy7AAF+bAQABgMABF27ASmVIAMAAkZE+AT0cwAEXiC7AAF+ZAQABgMABF53ASmVIAMAAkZA9HMABF7gWwAEXri7AAElTwACQ7cAAkRSvpQAAAAC2xwbAAJGPgZfAARfZwAEX58ABG/0AAMAAX5wAAAABA8ABF/7AARv9AAAAAwMDwAEYFQAAAIPzYAPAAEbkAMABGCQAAAClNGADwABLzwDAARg8AAAArSxgA75RAABgA75RAT4CScABGEghHMABGFkWwAEYUYDAARhMwEpoHZZSwABG60gBAAErAMAA/fE+Ak7AARl3wAEZgQAArklgA70qARbAARmQFsABGYiAwAEZg8BKaB2WUsAARuuFCr1KScABGaYcwAEZxhbAARm3FsABGaoutiPAAJDtwACRE4fowABNqqpuAQABg8ABGdXASmh/AMAAcXI+AUrAARnrARzAARoHFsABGfIuwABT/sAAkO3AAJEstbIBAAGDwAEaGsBKaH8Avnk+AkAcwAEaxBbAARq3LrYjwACQ7cAAkRObSAEAAYPAARrSwEpofwDAAE22wAEat8ABGtwBHsABGuq2HwIAAoDAARsEwEpoHSQABifAAF+dFsABGyqAwAEbJcBKaB2WUsAARusnm8aDwAEbOcBKaH8nwABAoifAAF+eAErAARt7ARzAARuXFsABG4IuwABT/sAAkO3AAJEstbUBAAGDwAEbrMBKaH8Avnw/SsABG8oBNQAAAAEAYAO+UQGCwAEb0cBKaD0jHMABG9aDAMBKacVIAQABKwAAFsABG+4WwAEb2S7AAFP+wACQ7cAAkSyepb5egwDASmnFAWADvlEGwACRkIGXwAEcAsABHAfAASOxAADAAF+ZAAAAAQPAARwbwAEjsQAAAAEBAcABHCsAAACD82ADwABG5AAAXAE+BE7AARxAwAEcSQAApTRgA8AAS88BFsABHFCAwAEcS8BKaj2lNMAARudOwAEdHMABHSMAAIJJYAO9PAEWwAEdKoDAAR0lwEpqPZZSwABG60nAAR03IiIcwAEdQ4LAAR08wEpqe0gBAAErAMAA/fEBFsABHVWCwAEdTsBKanuFQr1FACEcwAEe74HAAR7mwEpqU0gBAAEawAEe/Lh3AMAA/fE+Ak7AAR/KwAEfzwAAIGADwABLzwEewAEf1cAATAEBAAGBwAEf7sBKalMAPRzAASAUFsABH/8uwABJU8AAkO3AAJEUr7sBAAEfwAEgK8AAZ/gDAAODwAEgNsBKavUrFsABIEeAwAEgQsBKaj2FLMAARu8AALa/P0nAASBiIRzAASBtgsABIGbASmp7SAEAASsAwAD98T4DQBzAASGQgcABIYfASmpTsxgBAAGCwAEhmMBKansAwABL78ABIYfAASGfAR7AASGrth8CAAKAwAEhtMBKaj0kwAEh3wOBwAEhvMBKalMnwABfn4LAASHYwEpqewBAIiEWwAEh+oHAASHxwEpqU4VCwABL3wAhFsABIhCBwAEiB8BKalOFRMAAS+DAASHwwAEiGAEkwAEiVwMnwABfoIHAASJNwEpqUyeBaj0cwAEiahbAASJgLsAASVPAAJDtwACRFK+5AQABHsABIoDAAGg3AwADJsABIqIBgsABIqLASmp7YAO9URbAASKzgcABIqrASmpTtSXAAEvUFsABIseAwAEiwsBKaj2FLMAARu8AALa+PgJOwAEi+cABIv4AAK0sYAO+UQEcwAEjCi7AAF+cAwADgMABIyLASmo9gcABIyjASmpTFsABIzeAwAEjMsBKaj2FksAARu0AwACRjz0cwAEjVhbAASNMLsAASVPAAJDtwACRFK+7AQABH8ABI3jAAGf4AwADgcABI4PASmpTg8ABI43ASmydFsABI5iAwAEjk8BKaj2FLMAARu8AALa/BsAAkZGBl8ABI7bAASO7wAEmewAAwABfmwAAAAEDwAEjycABJnsAAAACAQHAASPZAAAAg/NgA8AARuQAAcABI+UAAAC6X2ADwAD60QFqwAEj8WADwAD60QBcAT4BScABI/8iJcABJBAWwAEkCIDAASQDwEptZZZSwABG62ADvU4AIYHAASQjwEptdj4BPRzAASU/FsABJTUuwABJU8AAkO3AAJEUr7kBAAEewAElVcAAaDkBAAEmwAElbgEWwAElboDAASVpwEptZZZSwABG62ADvU4AALa+PgNOwAEllcABJZ4AAKU0YAPAAEvPARbAASWlgMABJaDASm1lpTTAAEbnTsABJcPAASXIAACtLGADvlEBHMABJdQuwABfnAMAA4DAASXswEptZYLAASXywEpuFBbAASYBgMABJfzASm1lhZLAAEbtAMAAkY89HMABJiAWwAEmFi7AAElTwACQ7cAAkRSvuwEAAR/AASZCwABn+AMAA4LAASZNwEpuFIPAASZXwEpuPBbAASZigMABJl3ASm1lhSzAAEbvAAC2vwbAAJGSgZfAASaAwAEmhcABKdkAAMAAX5oAAAABA8ABJpPAASnZAAAAAQEBwAEmowAAAIPzYAPAAEbkAABcAT4BScABJq8iIRzAASbAFsABJriAwAEms8BKbwSWUsAARutIAQABKwDAAP3xACIWwAEm4RbAASbZgMABJtTASm8EllLAAEbrhUK9RQEWwAEm+hbAASbygMABJu3ASm8EllLAAEbrh469Qz4BPRzAASidFsABKJMuwABJU8AAkO3AAJEUr7kBAAEewAEos8AAaDgBAAEWwAEozIDAASjHwEpvBJZSwABG6wAAtr4+A07AASjzwAEo/AAApTRgA8AAS88BFsABKQOAwAEo/sBKbwSlNMAARudOwAEpIcABKSYAAK0sYAO+UQEcwAEpMi7AAF+cAwADgMABKUrASm8EgcABKVDASm/GFsABKV+AwAEpWsBKbwSFksAARu0AwACRjz0cwAEpfhbAASl0LsAASVPAAJDtwACRFK+7AQABH8ABKaDAAGf4AwADgcABKavASm/GgsABKbXASm/uFsABKcCAwAEpu8BKbwSFLMAARu8AALa/BsAAkZOBl8ABKd7AASnqwAErLwAAuQkBasABKd9gA8AA/eQCAAABA8ABKgLAASsvAAAAAQEBwAEqGAAAAIPzYAPAAEcYAABbAT4EPRzAASokLq+VAQABFsABKi2AwAEqKMBKcMCFj8AARu4AwACRS07AASpEwAEqSQAAgL1gA8AAlaIBHMABKlIWwAEqSy64FcAAkO3AAJERr+oBAAEWwAEqZoDAASphwEpwwKU0wABG5wDAAGWJPRzAASp1LqERAQABJsABKsYBHMABKsYewAEqesAAk0ADAAMcwAEqky6hFAAAAADAAJE2gcABKprASnD7HMABKqAuhbABAAEWwAEqtIDAASqvwEpwwIJVwABF7QDAAJFGAK/9AQABFsABKuGAwAEq3MBKcMClpMAAReoAwACUb2ADwACVmADAAJE1PRzAASr6LsAAX5sCAAGAwAErCcBKcMABul8WwAErIIDAASsbwEpwwLpfwABHGsAAkZEGwACRlIGXwAErNMABK0DAASxoAAC5BwFqwAErNWADwAD95AIAAAEDwAErWMABLGgAAAABAQHAAStuAAAAg/NgA8AARw4AAFsBPgQ9HMABK3our5UBAAEWwAErg4DAASt+wEpyM4WPwABG7gDAAJFLTsABK5rAASufAACAvWADwACVogEcwAErqBbAASuhLrgVwACQ7cAAkRGv6gEAARbAASu8gMABK7fASnIzpTTAAEbnAMAAZYk9HMABK8suoREBAAEmwAEsHAEcwAEsHB7AASvQwACTQAMAAxzAASvpLqEUAAAAAMAAkTaBwAEr8MBKcm4cwAEr9i6FsAEAARbAASwKgMABLAXASnIzglXAAEXtAMAAkUYAr/0BAAEWwAEsN4DAASwywEpyM6WkwABF6gDAAJRvYAPAAJWYAMAAkTU9HMABLFAuwABfmgEAAYDAASxfwEpyMwDAAJGSBsAAkZWBl8ABLG3AASx5wAEurgAAuQYBasABLG5gA8AA/eQCAAABA8ABLIvAAS6uAAAAAQEBwAEsmwAAAIPzYAPAAEb6AABbAT4ETsABLLDAASy1AAAgYAPAAEvPAR7AASy7wABMAQEAARbAASzZgMABLNTASnOQpTTAAEbnAD0cwAEs6C6vlQEAARbAASzxgMABLOzASnOQhY/AAEbuAMAAkUs9HMABLQAuoREBAAEmwAEtdQEcwAEtdR7AAS0FwACTQAMAAxzAAS0rLqEUAAAAAMAAkTYcwAEtORbAAS0yLrgVwACQ7cAAkRGv6gEAAYHAAS1IwEpzpgDAAGWJHMABLU8uhbABAAEWwAEtY4DAAS1ewEpzkIJVwABF7QDAAJFGAK/9AQABFsABLZCAwAEti8BKc5ClpMAAReoAwACUb2ADwACVmADAAJE1PRzAAS5oFsABLlUuwABJU8AAkO3AAJEUr7sBAAEfwAEuf8AAZ/gDAAOBwAEuisBKc6YrFsABLpuAwAEulsBKc5CFLMAARvwAALa/BsAAkZaBl8ABLrPAAS6/wAE5WQAAuQoBasABLrRgA8AA/eQCAAABA8ABLtDAATlZAAAAAQEBwAEu3wAAAIPzYAPAAEciAABbAT4ETsABLvjAAS8AAACWUmADvTwBFsABLweAwAEvAsBKdSiWUsAARyQ9NQAAAAEAXQPAAP07AWADwABi/QEWwAEvGYDAAS8UwEp1KLpCwABHJyMcwAEvLIIAwEp1ZUgBAAErAAArHMABLyyCAMBKdWWD/QEAARbAAS8+FsABLzQuwABJU8AAkO3AAJEUr7e2yADAAP0JAVxOwAEvb8ABL3kAAFtdA8AA/TsBYAPAAJWYARzAAS97LoWwAgABFsABL4+AwAEvisBKdSiCVcAARe0BapPAAJFGScABL6ccwAEvs4HAAS+rwEp1PkgBAAEWwAEvxhbAAS+2LrR8wACQ7cAAkSmx9rkzAMAA/fE+BUAcwAExaxbAATFkgsABMVrASnXTYcAA/WtIAQABlQDAAP27wAExWsABMW8ATsABMYfAATGVAADAAF+hYAO9UQEWwAExsRbAATGhLrR8wACQ7cAAkSmx97k0PRzAATHjFsABMdkuwABJU8AAkO3AAJEUr7kBAAEewAEyBMAAaCoCAAKDwAEyG8BKdnZqwAEyOGADwABpIMAA8MkAALa+TsABNJrAATSgAACFx2ADwACVmAEmwAE0mgEcwAE1CxzAATSkasABNKVgA8AAmAbAASCbIAIAAifAAF+iMcABNLVgA8AAlZgCHMABNMgWwAE0vy7AAERHwACQ7cAAkQzAAERWAQABg8ABNN3ASnZ2AMAAXUIcwAE0/oLAATT1wEp100sBAAGUAMAA/UoAwACYCK/9AQABFsABNSaAwAE1IcBKdSilpMAAReoAwACUb2ADwACVmD0cwAE1QC6hEQEAASbAATVsARzAATVsHMABNUdqwAE1SGADwACYBsABIJsgAgACJ8AAX6MxwAE1VWADwACVmAIcwAE1X4LAATVWwEp100sBAAGTAMAA/UqEwAE1ZMBKdugAwACYCK/9AQABFsABNZKAwAE1jcBKdSilpMAAReoAwACUb2ADwACVmADAAJE1PgVOwAE1xAAAAK+6YAPAAGgXAEnAATXVFsABNeGBwAE12cBKdT6Hkb1CPgJOwAE2CMABNhYAALUlYAPAAGkgAR/AATYcwABpRAIAAhbAATZJgsABNj/ASnXTYcAA/WsWwAE2ZBbAATZWgMABNlHASnUohSzAAEclYcAA/WsAPYvAATZ1wEp4Lh7AATaFwABoOgIAAibAATahAYHAATahwEp1PmADvWmEwAE2qsBKeFgAScABNscWwAE204HAATbLwEp1PoVCvUU+AT2LwAE258BKeC4ewAE298AAaCwBAAGBwAE3C8BKdT4AScABNyIWwAE3LoHAATcmwEp1PoVEvUY+AT2LwAE3QsBKeC4ewAE3UsAAaC0BAAGBwAE3ZsBKdT4APgNAFsABN5aBwAE3jsBKdT6zNr1EwAE3jsABN6AATsABN7nAATfHAAC1JWADwABpIAEfwAE3zcAAaUQCAAIWwAE3+oLAATfwwEp102HAAP1rFsABOBUWwAE4B4DAATgCwEp1KIUswABHJWHAAP1rAD2LwAE4JsBKeC4ewAE4NsAAaCoDAAMmwAE4WgGBwAE4WsBKdT5gA71RhMABOGPASnltFsABOHeAwAE4csBKdSiFLMAARyUAPRzAATifFsABOJUuwABJU8AAkO3AAJEUr7kBAAGDwAE4scBKeC4Atr49HMABOMMuoREBAAEcwAE40RbAATjILsAAREfAAJDtwACRDMAARFYBAAEmwAE45gGBwAE45sBKdT5gA71RAMAAXUIAwACRNT0cwAE49y6hEQEAAR/AATkAwACWHgMAAhzAATkILqEUAAAAAMAAkTaCwAE5D8BKddMBpaQWwAE5PIDAATk3wEp1KKWkwABF6gDAAJE1BsAAkZeBl8ABOV7AATlqwAFFEwAAuQsBasABOV9gA8AA/eQCAAABA8ABOXrAAUUTAAAAAQEBwAE5iAAAAIPzYAPAAEcvAABbAT4GTsABOaHAATmuAADAAF+kYAO9PAEWwAE5tYDAATmwwEp6+JZSwABHJE7AATnOwAE52QAAwABAXGADvSoBFsABOeiBwAE528BKew6FCr1KTsABOgXAAToOAAClNGADwABLzwEWwAE6FYDAAToQwEp6+KU0wABHM07AAToowAE6OAAAwABfpWADwAD60QEewAE6OsAArTMCAAKBwAE6U8BKew6DwAE6YcBKe1wAScABOnAWwAE6fYPAATp0wEp7XIVCwABL3z4BScABOo8iFsABOqCBwAE6k8BKew6Hjr1DARbAATq4gcABOqvASnsOhUK9RT4BPRzAATrWFsABOswuwABJU8AAkO3AAJEUr7kBAAEewAE67MAAaDABAAGBwAE6/8BKew4AALa+PgE9HMABOzAWwAE7Ji7AAElTwACQ7cAAkRSvuQEAAR7AATtGwABoMwEAASbAATtiARbAATtigMABO13ASnr4llLAAEckYAO9UQAAtr5JwAE7gBbAATuNg8ABO4TASntchUTAAEvgPgFJwAE7nxbAATuwgcABO6PASnsOh469Qz4BPRzAATvNFsABO8MuwABJU8AAkO3AAJEUr7kBAAEewAE748AAaDEBAAEmwAE7+wGBwAE7+8BKew5gA71OAAC2vj4CQBbAATw2gcABPCnASnsOhUS9RsABPCnAATw+AD0cwAE8UxbAATxJLsAASVPAAJDtwACRFK+5AQABHsABPGnAAGgyAQABJsABPIIBgcABPILASnsOYAO9UQAAtr4+AUnAATythMABPLHASnuEPgE9HMABPNYWwAE8zC7AAElTwACQ7cAAkRSvuQEAAR7AATzswABoLwIAAibAAT0PAYHAAT0PwEp7DmADvVEfwAE9IcAAaUQBAAEWwAE9QxbAAT08gMABPTfASnr4glXAAEXtYcAA/WsAAAC2vj4BPRzAAT1vFsABPWUuwABJU8AAkO3AAJEUr7kBAAEewAE9hcAAaC8CAAImwAE9qAGBwAE9qMBKew5gA71RH8ABPbrAAGlEAQABHMABPeMWwAE93BbAAT3VgMABPdDASnr4glXAAEXtYcAA/WuBjQEAAZQAwAD9vgAAALa+ScABPf4WwAE+D4HAAT4CwEp7DoeOvUM+BE7AAT4owAE+MgAAwABIiGADwACVogEcwAE+OxbAAT40LrgVwACQ7cAAkRGv6AEAASbAAT5VAYHAAT5VwEp7DmADvU4AwABlhj0cwAE+ai6vlQEAARzAAT55FsABPnOAwAE+bsBKeviCVcAARe1LAQABkwDAAP1KAMAAkUtOwAE+l8ABPp4AALCAYAPAAJa1ASbAAT6XARzAAT7TH8ABPqTAAJbDAgACHMABPrYuoRQAAAAAwACRNoXAAT69wEp+aQCv/QEAARbAAT7ugMABPunASnr4paTAAEXqAMAAlG9gA8AAlrVJwAE/CBbAAT8RgMABPwzASnr4hUTAAEcyPgI9HMABPyUur5UBAAEWwAE/LoDAAT8pwEp6+ICWwABHNgDAAJFLPRzAAT8+LqERAQABJsABP3EBHMABP3EfwAE/R8AAlfQCAAKGwAE/VcBKfuUcwAE/XS6hFAAAAADAAJE2AK/9AQABFsABP4yAwAE/h8BKevilpMAAReoAwACUb2ADwACVmADAAJE1PgE9HMABP7guoREBAAGGwAE/vcBKfuUAwACRNT4BScABP+EhhMABP+bASnuEPgNOwAFACQAAAKzrYAPAAJWiAEnAAUAdIhbAAUAqg8ABQCHASntchULAAEvfACEWwAFARIHAAUA3wEp7DoVCvUU+A07AAUE+wAFBRQAAlYxgA71RARbAAUFXFsABQUcutHzAAJDtwACRKbHtuSo9HMABQX8WwAFBdS7AAElTwACQ7cAAkRSvuQEAAR7AAUGVwABoKgMAA4bAAUG7wEqAZB/AAUHVwABpRAIAAhbAAUIKFsABQgOAwAFB/sBKeviCVcAARe1hwAD9axbAAUIlFsABQheAwAFCEsBKeviFLMAARyVhwAD9awAWwAFCQYDAAUI8wEp6+IUswABHJQAAtr49jcABQlzASoAjHMABQnAWwAFCaS64FcAAkO3AAJERr+oBAAGDwAFCf8BKe1wAwABliT4BPY3AAUKlwEqAIxzAAUK5FsABQrIuuBXAAJDtwACREa/mAQABJsABQswBgcABQszASnsOYAO9UQDAAGWHPRzAAULuLqERAQABJsABQ6YBHMABQ6YcwAFC9WrAAUL2YAPAAJgGwAEgmyACAAInwABfpjHAAUMIYAPAAP3kAxzAAUMdFsABQxQuwABER8AAkO3AAJEMwABEVAIAAYLAAUMtwEp7NgHAAERVKcAAXUGFwAFDX8BKgCMcwAFDdS6FsAIAARbAAUOJgMABQ4TASnr4glXAAEXtAWqTwACRRgDAAJgIr/0BAAEWwAFDwYDAAUO8wEp6+KWkwABF6gDAAJRvYAPAAJWYAMAAkTU+Aj0cwAFD7S6vlQEAARbAAUP2gMABQ/HASnr4hY/AAEc1AMAAkUs9HMABRAkuoREBAAEmwAFE0wEcwAFE0xzAAUQQasABRBFgA8AAmAbAASCbIAIAAifAAF+nMcABRB5gA8AA/eQDHMABRCouoRQAAAAAwACRNhzAAURCFsABRDsuuBXAAJDtwACREa/aAQABgcABRGHASnsOAMAAZYUcwAFEei6FsAIAARbAAUSOgMABRInASnr4glXAAEXtAWqUwACRRgDAAJgIr/0BAAEWwAFE7oDAAUTpwEp6+KWkwABF6gDAAJRvYAPAAJWYAMAAkTUGwACRmIGXwAFFGMABRSTAAUe6AAC4+wFqwAFFGWADwAD95AIAAAEDwAFFMcABR7oAAAABAQHAAUU8AAAAg/NgA8AAR1EAAFsBPgI9HMABRUgur5UBAAEWwAFFUYDAAUVMwEqDiIWPwABHTgDAAJFLScABRWAWwAFFaYDAAUVkwEqDiLpywABHXz4BPRzAAUYlLqERAQABJsABRmQBHMABRmQfwAFGLsAAlsQCAAIcwAFGRi6hFAAAAADAAJE2JyMAr/0BAAEWwAFGf4DAAUZ6wEqDiKWkwABF6gDAAJRvYAPAAJWYAMAAkTU+BE7AAUazwAFGuQAAhJtgA71OARbAAUbAgMABRrvASoOIllLAAEdMTsABRtfAAUbcAACAvWADwACVogEcwAFG5RbAAUbeLrgVwACQ7cAAkRGv6AEAAYHAAUb/wEqEPwDAAGWGPRzAAUcNLqERAQABJsABR0ABHMABR0AfwAFHFsAAlsMCAAIcwAFHKC6hFAAAAADAAJE2gsABRy/ASoRlAK/9AQABFsABR1uAwAFHVsBKg4ilpMAAReoAwACUb2ADwACVmADAAJE1PRzAAUeAFsABR3YuwABJU8AAkO3AAJEUr7kBAAEewAFHlsAAaD8BAAGBwAFHqcBKhD8AALa+BsAAkZmBl8ABR7/AAUfLwAFJwAAAuPwBasABR8BgA8AA/eQCAAABA8ABR9jAAUnAAAAAAQEBwAFH4wAAAIPzYAPAAEdiAABbAT4HTsABR/vAAUgDAACWUmADvU4BFsABSAqAwAFIBcBKhXKWUsAAR0w9HMABSCEWwAFIFy7AAElTwACQ7cAAkRSvuQEAAR7AAUg3wABoQAEAAYHAAUhKwEqFiAAAtr5OwAFIYcABSGYAAIC9YAPAAJWiARzAAUhvFsABSGguuBXAAJDtwACREa/oAQABgcABSInASoWIAMAAZYY9HMABSJcur5UBAAEWwAFIoIDAAUibwEqFcoWPwABHTgDAAJFLTsABSL3AAUjGAACFj2ADwACVmAEcwAFIyC6hFAAAAADAAJE2PRzAAUjTLq+VAQABFsABSNyAwAFI18BKhXKAlsAAR2sAwACRSz0cwAFI6C6hEQEAASbAAUmOARzAAUmOH8ABSPHAAJX0AgACHMABSUMfwAFJEMAAlsMCAAKDwAFJIsBKhkWCwAFJLMBKheQAr/0BAAEWwAFJXoDAAUlZwEqFcqWkwABF6gDAAJRvHMABSX4uoRQAAAAAwACRNgCv/QEAARbAAUmpgMABSaTASoVypaTAAEXqAMAAlG9gA8AAlZgAwACRNQbAAJGagZfAAUnFwAFJ0cABSnwAALj+AWrAAUnGYAPAAP3kAgAAAQPAAUnfwAFKfAAAAAEBAcABSesAAACD82ADwABHbgAAWwE+Aj0cwAFJ9y6vlQEAARbAAUoAgMABSfvASodihY/AAEdyAMAAkUs9HMABSg8uoREBAAEmwAFKSgEcwAFKSh/AAUoYwACWxAIAAhzAAUowLqEUAAAAAMAAkTYnYQCv/QEAARbAAUplgMABSmDASodipaTAAEXqAMAAlG9gA8AAlZgAwACRNQbAAJGbgZfAAUqBwAFKjcABTcoAALkfAWrAAUqCYAPAAP3kAgAAAQPAAUqhwAFNygAAAAEBAcABSrMAAACD82ADwABHfgAAWwE+B07AAUrLwAFK0wAAllJgA71OARbAAUragMABStXASogxllLAAEeDPRzAAUrxFsABSucuwABJU8AAkO3AAJEUr7kBAAEewAFLB8AAaD8BAAGBwAFLGsBKiEcAALa+PRzAAUszFsABSykuwABJU8AAkO3AAJEUr7kBAAEewAFLScAAaEABAAGBwAFLXMBKiEcAALa+TsABS3PAAUt4AACAvWADwACVogEcwAFLgRbAAUt6LrgVwACQ7cAAkRGv6AEAAYHAAUubwEqIRwDAAGWGPRzAAUupLq+VAQABFsABS7KAwAFLrcBKiDGFj8AAR4cAwACRS07AAUvPwAFL3gAAhVdgA8AAlZgBH8ABS+TAAJbDAgACHMABS/YuoRQAAAAAwACRNoLAAUv9wEqI2QBJwAFMCBbAAUwRgMABTAzASogxuoLAAEeIPgE9HMABTCIuoREBAAEmwAFMWwEcwAFMWx/AAUwrwACWRgIAAhbAAUw6gMABTDXASogxun3AAEeEg8ABTEDASok6AK/9AQABFsABTHaAwAFMccBKiDGlpMAAReoAwACUb2ADwACVmADAAJE1ScABTJYWwAFMn4DAAUyawEqIMbqDwABHiT4BPRzAAUyxLqERAQABJsABTOsBHMABTOsfwAFMusAAllUCAAIWwAFMyoDAAUzFwEqIMbp9wABHhIPAAUzQwEqJOgCv/QEAARbAAU0GgMABTQHASogxpaTAAEXqAMAAlG9gA8AAlZgAwACRNT4CPRzAAU0uLq+VAQABFsABTTeAwAFNMsBKiDGAlsAAR4sAwACRSz0cwAFNRS6hEQEAASbAAU2SARzAAU2SH8ABTU7AAJX1AwADg8ABTWXASok6FsABTXqAwAFNdcBKiDG6fcAAR4QcwAFNgC6hFAAAAADAAJE2AK/9AQABFsABTa2AwAFNqMBKiDGlpMAAReoAwACUb2ADwACVmADAAJE1BsAAkZyBl8ABTc/AAU3bwAFOFQAAuRUBasABTdBgA8AA/eQCAAABA8ABTejAAU4VAAAAAQEBwAFN8wAAAIPzYAPAAEegAABbAT4BPRzAAU3/Lq+VAQABFsABTgiAwAFOA8BKi1SFj8AAR50AwACRSwbAAJGdgZfAAU4awAFOJsABTr8AALkWAWrAAU4bYAPAAP3kAgAAAQPAAU4zwAFOvwAAAAEBAcABTj4AAACD82ADwABHpwAAWwE+Aj0cwAFOSi6vlQEAARbAAU5TgMABTk7ASovEgJbAAEetAMAAkUs9HMABTl8uwABfTwMAAxzAAU6FFsABTncuwABfHcAAkR6ZSQEAARbAAU6SgMABTo3ASovEhY/AAEedAMAArj8cwAFOnS6hFAAAAADAAJE2FsABTqmAwAFOpMBKi8SlpMAAReoAwACRSQbAAJGegZfAAU7EwAFOycABT4gAAMAAX6gAAAABA8ABTt3AAU+IAAAAAQEBwAFO5wAAAIPzYAPAAEewAABcAT4DTsABTwLAAU8RAACvqWADwABnOwEWwAFPGIDAAU8TwEqMkq+pwABHs0nAAU8sHMABTz+BwAFPMMBKjKhIAQABKwDAAP3xSsABT0gAPz0cwAFPXhbAAU9ULsAASVPAAJDtwACRFK+oAQABgcABT3XASoyoALbLBsAAkZ+Bl8ABT43AAU+ZwAFTvQAAuP0BasABT45gA8AA/eQCAAABA8ABT6nAAVO9AAAAAQEBwAFPtwAAAIPzYAPAAEe4AABbAT4ETsABT9bAAU/dAACCVV0DwAD9OwFgA8AARecBFsABT+SAwAFP38BKjVKCVcAARe1JwAFP8BzAAU/5gMABT/TASo1SuhMAAAAAwABHwT4DTsABUCbAAVA+AADAAF+pXQPAAP07AWADwACVmAExwAFQT2ADwACVmABFwAFQWQHAAVBiwAFQZAAAYmADwAD8lwGTARzAAVBrg8ABUGnASo3kYwEAARbAAVB0gcABUG3ASo1oYcAA/WsAwAD9xQGLwAFQfMBKjeQcwAFQfYPAAVB8wEqN5GQBAAGUAMAA/b0+Aj0cwAFQiy6vlQEAARzAAVCVgcABUI/ASo1oSwEAAYPAAVCWwEqN5ADAAP1KAMAAkUs9HMABULuCwAFQo8BKjbZWAQABHMABUL8uoRQAAAAAwACRNgDAAP1MPRzAAVDVLsAAXywBAAEmwAFRMAEcwAFRMBzAAVEAFsABUOiAwAFQ48BKjVK6jMAAR7qxSgEAAYLAAVEMwEqNtgDAAJmxr/0BAAEWwAFRS4DAAVFGwEqNUqWkwABF6gDAAJRvYAPAAJSBAMAAkTI+A07AAVGHwAFRnwAAwABfqV0DwAD9OwFgA8AAlZgBMcABUbBgA8AAlZgARcABUboBwAFRw8ABUcUAAGJgA8AA/JcBkwEcwAFRzIPAAVHKwEqPPmMBAAEWwAFR1YHAAVHOwEqNaGHAAP1rAMAA/cUBi8ABUd3ASo8+HMABUd6DwAFR3cBKjz5kAQABlADAAP29PgI9HMABUewur5UBAAEcwAFR9oHAAVHwwEqNaEsBAAGDwAFR98BKjz4AwAD9SgDAAJFLPRzAAVIcgsABUgTASo8QVgEAARzAAVIgLqEUAAAAAMAAkTYAwAD9TD0cwAFSNi6hEQEAASbAAVKIARzAAVKIHMABUlgWwAFSQIDAAVI7wEqNUrqMwABHurFKAQABgsABUmTASo8QAMAAmbGv/QEAARbAAVKjgMABUp7ASo1SpaTAAEXqAMAAlG9gA8AAlZgAwACRNT0cwAFTDS7AAF+oAQABgMABUyLASo1SAMAAkZ5JwAFTLiEcwAFTRxbAAVM3gMABUzLASo1Suo7AAEe+SAEAASsAwAD98T4BPTUAAAABAGADtrMBFsABU1guwABJU8AAkO3AAJEUIxzAAVNjggDASpCuSAEAASsAACscwAFTY4IAwEqQrq+5AQABHsABU4TAAGhEAQABFsABU6KAwAFTncBKjVK6jsAAR74AALa+AVw/BsAAkaCBl8ABU8LAAVPOwAFXZgAAuPYBasABU8NgA8AA/eQCAAABA8ABU9nAAVdmAAAAAQEBwAFT4gAAAIPzYAPAAEbDAABbAT4GTsABU/zAAVQNAADAAF+qYAPAAJWYARzAAVQYFsABVA8uwABER8AAkO3AAJEMwABEWgEAARbAAVQvgMABVCrASpFLllLAAEbFAMAAXUZOwAFUUcABVFsAAFtdA8AA/TsBYAPAAJWYARzAAVRdLoWwAgABFsABVHGAwAFUbMBKkUuCVcAARe0BapPAAJFGPRzAAVSILqERAQABJsABVL4BHMABVL4fwAFUkcAAliYCAAKBwAFUmMBKkWGCwAFUqsBKka4Ar/0BAAEWwAFU2YDAAVTUwEqRS6WkwABF6gDAAJRvYAPAAJWYAMAAkTVJwAFVtBbAAVXFFsABVb2AwAFVuMBKkUuWUsAARsW1Eb0tPgE9HMABVikWwAFV2C7AAElTwACQ7cAAkRSvtgEAARbAAVZIgMABVkPASpFLllLAAEbFALa9Pz01AAAAAQBdA8AA/TsBYAPAAGL9ARbAAVZhgMABVlzASpFLukLAAEbHIxzAAVZ0gwDASpKnSAEAASsAACscwAFWdIMAwEqSp4P9AQABFsABVoYWwAFWfC7AAElTwACQ7cAAkRSvt7bIAMAA/QkBXEnAAVaiIRzAAVa2FsABVquAwAFWpsBKkUu0vcAARshIAQABKwDAAP3xPgI9NQAAAAEAYAO2swEWwAFWxy7AAElTwACQ7cAAkRQjHMABVt2DAMBKk0FIAQABKwAAKxzAAVbdgwDASpNBr7kBAAEewAFW88AAaEQBAAEWwAFXEYDAAVcMwEqRS7S9wABGyAAAtr4BXD01AAAAAQBgA7azARbAAVclLsAASVPAAJDtwACRFCMcwAFXMIMAwEqTqUgBAAErAAArHMABVzCDAMBKk6mvwQEAARbAAVdRgMABV0zASpFLtL3AAEbIALbDAVw/BsAAkaGBl8ABV2vAAVd3wAFX0AAAuPcBasABV2xgA8AA/eQCAAABA8ABV4XAAVfQAAAAAQEBwAFXkQAAAIPzYAPAAEbRAABbAT4BPRzAAVedLqERAQABH8ABV6bAAJdMAQABMcABV8hgA8AAl00AAADAAJE1BsAAkaKBl8ABV9XAAVfjwAFZXwAAwABfZwAAAAEDwAFX8cABWV8AAAACAgLAAVf+AAAAgJZgA8AA+tEAwAFYFwAAAKWkYAPAAEJLAABgA8AAlZgBPgFJwAFYMBbAAVg9FsABWDQusmTAAJDtwACRC4L7gTg+AUrAAViBASbAAViBARzAAVjPH8ABWIzAAJZGAgACJ5ocH8ABWJ/AAJcjAQABI4DAAViwwEqUpCeEDSfAAEuRAWADwAD+fgAAr/0BAAGBwAFY5cBKlLQAwACUb2ADwACVmD4BSsABWQwBJsABWQwBHMABWS0fwAFZF8AAlvkBAAGAwAFZJsBKlKQAr/0BAAGBwAFZQ8BKlLQAwACUb2ADwACVmAbAAJGjgZfAAVlkwAFZacABWtkAAMAAX6sAAAABA8ABWXnAAVrZAAAAAgICwAFZjwAAAIYVYAPAAGFCAMABWasAAAClpGADwABCSwAAXAE+A07AAVnSwAFZ3QAAgm9gA8AAlZgBHMABWegWwAFZ3y7AAERHwACQ7cAAkQywBQEAAYDAAVn6wEqVvADAAF1LScABWgkhFsABWheAwAFaDsBKlbzAAEZDwABhVj4BPYrAAVp5wEqV4ibAAVp5ARzAAVqRgsABWobASpXir/0BAAGBwAFap8BKlcwAwACUb2ADwACVmD89HMABWsUuoREBAAGCwAFaysBKleIAwACRNQbAAJGkgZfAAVrewAFa6sABXIAAAIYXAWrAAVrfYAPAAP3kAgAAAQPAAVr3wAFcgAAAAAEBAcABWwIAAACD82ADwABIvAAAWwE+BEAcwAFbFS7AAF8kAQABgMABWynASpbFAMAAkS7AAVsVwAFbLgA9HMABWzUuwABfqwIAAhbAAVtLgMABW0bASpbFhhXAAEi+FsABW1qAwAFbVcBKlsWlpMAAReoAwACRoz0cwAFbfRbAAVtzLsAASVPAAJDtwACRFK+/AQABH8ABW5XAAGiRAQABFsABW66AwAFbqcBKlsWGFcAASL4AALbBScABW74WwAFb0BbAAVvHgMABW8LASpbFhhXAAEi+wABGQsAAYVQ+Ak7AAVvywAFb/wAAwABfrGADwABiFAEmwAFb8gEWwAFcBoDAAVwBwEqWxYYVwABIvmADwABiFD0cwAFcIBbAAVwWLsAASVPAAJDtwACRFK+9AQABHsABXD/AAGhzAQABFsABXGWBwAFcWMBKl6Sz9sAAYhYAALbAPwbAAJGlgZfAAVyFwAFckcABXQcAAIXDAWrAAVyGYAPAAP3kAgAAAQPAAVyZwAFdBwAAAAEBAcABXJ8AAACD82ADwABI0gAAWwE+AkAcwAFcxRbAAVy+FsABXLeAwAFcssBKmFGCVcAARe1hwAD9a0gBAAGUAMAA/bvAAVyywAFcyQA9HMABXNAuwABflQIAAhzAAVznFsABXOGAwAFc3MBKmFGCVcAARe1LAQABkwDAAP1KFsABXPGAwAFc7MBKmFGlpMAAReoAwACRpwbAAJGmgZfAAV0MwAFdGsABXlQAAcAAX60AAAABA8ABXS/AAV5UAAAAAgICwAFdNwAAAKq5YAPAAP5+AMABXUAAAADAAF+KYAPAAPrRAABgA8AA/n4BPgJOwAFdY8ABXXMAAMAAX65dA8AA/W0CYAPAAP5+YAPAAP5+AWrAAV11XQPAAP1tAmADwAD+fmADwAD+fsABav1KwAFeJwEjgcABXi7ASpkjHMABXkeCwAFeOMBKmUBLAQABgMABXkjASpkTAMAA/YGAwAFeTsBKmRMBYAPAAP5+BsAAkaeBl8ABXlnAAV5ewAFlLQAAwABflQAAAAEDwAFeacABZS0AAAACAgLAAV53AAAAgXtgA8AARecAwAFekAAAAKWkYAPAAEJLAABcAT4ET8ABXqnAAV6uAAABwABfr2EDAWADwABF52ADwAD60QADwAFezMABYVEAAAABAQHAAV7aAAAAuUZgA8AARecAAGADwAD60QE+BknAAV7vISXAAV7/g8ABXvPASpo+YAPAAEkCSsABXxABKj9OwAFfMcABXzwAAMAAX7BgA8AASQIBJsABXzEBg8ABXz7ASpo+YAPAAEkCTsABX1/AAV9kAACFxWADwABF5wEWwAFfcYTAAV9mwEqae4XFwABH0E7AAV+KwAFfkAAAhcdgA8AARecBFsABX52EwAFfksBKmnuFx8AAR9FJwAFfqiIWwAFf2BzAAV+zhcABX67ASpqmtdoBAAEWwAFfwi7AAFP+wACQ7cAAkSwAwABGT7Stvj8AFsABYCEcwAFf/IbAAV/2wEqazrXaAQABFsABYAsuwABT/sAAkO3AAJEsAMAARk+0rb4/PgFKwAFgPQEpP0rAAWDLASIWwAFg9xzAAWDXhcABYNLASpqmtc0BAAEWwAFg4S7AAFP+wACQ7cAAkSwAwABGQrStvj8AFsABYTscwAFhG4bAAWEVwEqazrXNAQABFsABYSUuwABT/sAAkO3AAJEsAMAARkK0rb4/TsABYV3AAWFyAADAAF+xYAPAAPrRASpJwAFhfxzAAWGDLsAAXyQBAAGAwAFhl8BKmeoAwACRLj4CPYvAAWGnwEqb2ylJwAFhyiXAAWHUgMABYc7ASpnqYAPAAEnJPgE9HMABYeYuwABfsgMAAxTAAWHtwEqZ6gABYAPAAEnJJ53ZgcABYfvASpn6AMAAkddJwAFiHCXAAWImgMABYiDASpnqYAPAAEnmPgE9HMABYkYuwABfswMAAhTAAWJbwEqZ6gABYAPAAEnmgcABYmLASpn6Aaq+KcAAkdhJwAFikyXAAWKdgMABYpfASpnqYAPAAEjSPgE9HMABYrAur5UBAAEcwAFiwBbAAWK6FMABYrTASpnqAAFgA8AASNKCVcAARe1LAQABkwDAAP1KAMAAkUtJwAFi0yXAAWLdgMABYtfASpnqYAPAAEkHPgE9HMABYvUuwABfiQMAAhTAAWMMwEqZ6gABYAPAAEkHgcABYxPASpn6AcAAX4opwACRbEnAAWNDHMABY2WCwAFjR8BKmhQgAQABgMABY2bASpnqAAA+BE7AAWOEwAFjjwAAwABfsGADwABJAgEmwAFjhAGAwAFjkcBKmepgA8AASQJOwAFjwMABY8oAAJz9YAPAAGmYARzAAWPXhMABY8zASp19nP0AAAAAwABH007AAWPzwAFj9gAAqrlgA8AA/n4BHsABY/jAAJGmAgACFsABZBiFwAFkDsBKnaiAvcAAaZApAD0cwAFkLS7AAF+FAwADJsABZEABgMABZEDASpnqYAPAAEfMhsABZEfASp3UgcABZEvASpn6AMAAkWU+AT2LwAFkdsBKm9sqP0nAAWSmIYPAAWSrwEqb2z4CPRzAAWTJLq+VAQABgMABZM3ASpnqAMAAkUs9HMABZNsuoREBAAEmwAFk+gEcwAFk+h/AAWTkwACWRgIAAieaHBzAAWTzLqEUAAAAAMAAkTYAr/0BAAGBwAFlEMBKmfoAwACUb2ADwACVmADAAJE1PwbAAJGogZfAAWUywAFlPsABZg0AALkcAWrAAWUzYAPAAP3kAgAAAQPAAWVRwAFmDQAAAAEBAcABZWIAAACD82ADwABI4AAAWwE+BEAhHMABZXYuwABfJAEAAYDAAWWKwEqfCADAAJEuwAFldcABZY8ATsABZZ3AAWWiAACAvWADwAD+fgEcwAFlshbAAWWkLsAAXx3AAJEemUkBAAGAwAFlusBKnwgAwACuPz0cwAFl0BbAAWXFLpq7wACRGlYBAAEfwAFl2MAAln4BAAGBwAFl5cBKn0QAAMAA/Uw9HMABZgAWwAFl8S7AAF8gwACRIVYBAAGBwAFmBMBKn0QAwAD+PAbAAJGpgZfAAWYSwAFmHsABZsgAALkXAWrAAWYTYAPAAP3kAgAAAQPAAWYtwAFmyAAAAAEBAcABZjoAAACD82ADwABI2gAAWwE+A0AhHMABZk4uwABfJAEAAYDAAWZiwEqgCgDAAJEuwAFmTcABZmcATsABZnXAAWZ6AACAvWADwAD+fgEcwAFmihbAAWZ8LsAAXx3AAJEemUkBAAGAwAFmksBKoAoAwACuPz0cwAFmuxbAAWadLsAAXx/AAJEgVgEAAYHAAWa/wEqgRgDAAP48BsAAkaqBl8ABZs3AAWbZwAFq/gAAuR0BasABZs5gA8AA/eQCAAABA8ABZuHAAWr+AAAAAQEBwAFm5wAAAIPzYAPAAEjzAABbAT4ETsABZ7HAAWe5AADAAF+0YAPAAEWwARbAAWfGFsABZ8CAwAFnu8BKoNuaMsAARe+5j8AARb5AHMABZ/EWwAFn3C7AAF8WwACRFoMcAQABFsABaAKBwAFn+sBKoPGB6sAARaMAwAD+O8ABZ9zAAWgHAE7AAWgbwAFoIQAAgXtgA8AARecBHMABaDYWwAFoMBbAAWgrgcABaCPASqDxgerAAEWjglXAAEXtSwEAAZMAwAD9SknAAWg/HMABaEmCwAFoQ8BKoWG6EAAAAADAAEZqPgE9HMABaGQur5UBAAEcwAFocxbAAWhtgMABaGjASqDbglXAAEXtSwEAAZQAwAD9SgDAAJFLScABaIQcwAFojoLAAWiIwEqhYboRAAAAAMAARms+AT0cwAFoqC6vlQEAARzAAWi3FsABaLGAwAForMBKoNuCVcAARe1LAQABkwDAAP1KAMAAkUtJwAFoyBzAAWjbHMABaNcWwAFo0YDAAWjMwEqg24JVwABF7UsBAAGUAMAA/Uq6CQAAAADAAEZjPgVOwAFo/8ABaQkAAJz9YAPAAP5+ASMcwAFpGhzAAWkWFsABaRCAwAFpC8BKoNuCVcAARe1LAQABlADAAP1KuhAAAAAAwABGaieX9ieX9wFgA8AA/n5JwAFpQRzAAWlPg8ABaUXASqKCSAEAASeX9wDAAP6NPgE9HMABaWIuwABflQIAAoLAAWluwEqhYRbAAWl7gsABaXXASqFhpaTAAEXqAMAAkac+AT0cwAFppi6vlQEAAYLAAWmqwEqhYQDAAJFLTsABac7AAWnTAACFxWADwACVmAEcwAFp1S6hFAAAAADAAJE2PRzAAWniLq+VAQABHMABafEWwAFp64DAAWnmwEqg24JVwABF7UsBAAGTAMAA/UoAwACRSz0cwAFp/S6hEQEAAR/AAWoGwACWNwMAA4PAAWoQwEqigoTAAWobwEqjQxzAAWohLqEUAAAAAMAAkTYAAMAAkTU+Bj0cwAFqPS6vlQEAAYLAAWpBwEqhYQDAAJFLTsABal3AAWpiAACXK2ADwACVmAEcwAFqZC6hFAAAAADAAJE2PRzAAWpxLq+VAQABHMABaoAWwAFqeoDAAWp1wEqg24JVwABF7UsBAAGTAMAA/UoAwACRS07AAWqawAFqnwAAga9gA8AAlZgBHMABaqEuoRQAAAAAwACRNj0cwAFqri6vlQEAARzAAWq9FsABareAwAFqssBKoNuCVcAARe1LAQABlADAAP1KAMAAkUs9HMABaskuoREBAAEfwAFq0sAAlg8DAAODwAFq4cBKo/eEwAFq58BKpE8cwAFq7S6hFAAAAADAAJE2AADAAJE1BsAAkauBl8ABawPAAWsPwAFsjgAAsRgBasABawRgA8AA/eQCAAABA8ABaxrAAWyOAAAAAQEBwAFrIwAAAIPzYAPAAEk2AABbAT4DQBzAAWtJFsABa0IWwAFrO4DAAWs2wEqlHIJVwABF7WHAAP1rSAEAAZQAwAD9u8ABazbAAWtNAE7AAWthwAFrZwAAgXtgA8AARecBHMABa3QWwAFrboDAAWtpwEqlHIJVwABF7UsBAAGTAMAA/UpJwAFrfRzAAWuHgcABa4HASqVpugoAAAAAwABGZD4BPRzAAWuhLsAAXywBAAEmwAFrygEcwAFryh/AAWu+wACVFQAAAACv/QEAARbAAWvlgMABa+DASqUcpaTAAEXqAMAAlG9gA8AAlIEAwACRMj4CPRzAAWwNLq+VAQABHMABbBwWwAFsFoDAAWwRwEqlHIJVwABF7UsBAAGTAMAA/UoAwACRSz0cwAFsKC7AAF8sAQABJsABbFYBHMABbFYfwAFsRcAAlRUBAAEcwAFsTy6hFAAAAADAAJE2AK/9AQABFsABbHGAwAFsbMBKpRylpMAAReoAwACUb2ADwACUgQDAAJEyBsAAkayBl8ABbJPAAWyfwAFs0gAAsQABasABbJRgA8AA/eQCAAABA8ABbKjAAWzSAAAAAQEBwAFsrwAAAIPzYAPAAEjnAABbAT4BPRzAAWy7LqERAQABH8ABbMTAAJaGAAAAAADAAJE1BsAAka2Bl8ABbNfAAWzjwAFuPgAAhgUBasABbNhgA8AA/eQCAAABA8ABbO3AAW4+AAAAAQEBwAFs9QAAAIPzYAPAAElWAABbAT4BScABbQEWwAFtCoDAAW0FwEqnQbrowABJWD4CPRzAAW0dLq+VAQABHMABbSwWwAFtJoDAAW0hwEqnQYJVwABF7UsBAAGTAMAA/UoAwACRSz0cwAFtOC7AAF8sAQABJsABbWUBHMABbWUfwAFtVcAAlSEBAAEcwAFtXi6hFAAAAADAAJE2AK/9AQABFsABbYCAwAFte8BKp0GlpMAAReoAwACUb2ADwACUgQDAAJEyPgE9HMABbaguwABftQMAAhbAAW3bFsABbcsutHzAAJDtwACRKbH5uTYcwAFt+xbAAW31gMABbfDASqdBglXAAEXtSwEAAZMAwAD9SgGlpBbAAW4igMABbh3ASqdBpaTAAEXqwACRsgbAAJGugZfAAW5DwAFuT8ABbtEAALDpAWrAAW5EYAPAAP3kAgAAAQPAAW5ZwAFu0QAAAAEBAcABbmEAAACD82ADwABJQwAAWwE+Aj0cwAFubS6vlQEAARzAAW58FsABbnaAwAFuccBKqKGCVcAARe1LAQABkwDAAP1KAMAAkUs9HMABboYuoREBAAEmwAFunwEcwAFunx/AAW6PwACX+QEAARzAAW6YLqEUAAAAAMAAkTYAr/0BAAEWwAFuuoDAAW61wEqooaWkwABF6gDAAJRvYAPAAJWYAMAAkTUGwACRr4GXwAFu1sABbuLAAW+IAAC5LwFqwAFu12ADwAD95AIAAAEDwAFu7MABb4gAAAABAQHAAW70AAAAg/NgA8AASUwAAFsBPgI9HMABbwAur5UBAAEcwAFvDxbAAW8JgMABbwTASql9glXAAEXtSwEAAZMAwAD9SgDAAJFLPRzAAW8ZLsAAXywBAAEmwAFvVgEcwAFvVh/AAW8rwACVlwIAAhzAAW84LqEUAAAAAMAAkTYWwAFvRIDAAW8/wEqpfbEQwABJTgCv/QEAARbAAW9xgMABb2zASql9paTAAEXqAMAAlG9gA8AAlIEAwACRMgbAAJGwgZfAAW+NwAFvmcABcDEAALkeAWrAAW+OYAPAAP3kAgAAAQPAAW+twAFwMQAAAAEBAcABb78AAACD82ADwABKUwAAWwE+AUAqwAFwJ8ABcCwABsAAkbGBl8ABcDbAAXBCwAF4GgAAuPUBasABcDdgA8AA/eQCAAABA8ABcFLAAXgaAAAAAQEBwAFwYAAAAIPzYAPAAEahAABbAT4CQCEcwAFxZxbAAXFagMABcVXASqrFujrAAEaoSAEAAWrAAXF3YAPAAPyXgVcAwAD9u8ABcVXAAXGCAEnAAXGJIRzAAXGfFsABcZKAwAFxjcBKqsW6OsAARqhIAQABasABca9gA8AA/JcJAMAA/bs+DU7AAXHTAAAAwABftmADwACVmABOwAFx7gAAAMAAX7dgA8AAlZgAScABcfohHMABchAWwAFyA4DAAXH+wEqqxbo6wABGqEgBAAFqwAFyIGADwAD8lyEAwAD9uz4CPRzAAXI9Lq+VAQABFsABckaAwAFyQcBKqsUnwABGqwDAAJFLScABclYWwAFyhRzAAXJlFsABcl+AwAFyWsBKqsUnwABGq7XNAQABFsABcm8uwABT/sAAkO3AAJEsAMAARkK0rb4/PgE9icABcqPASqtLHMABcq1qwAFyrmADwACYBsABIJsgAgACJ8AAX7gcwAFyui6hFAAAAADAAJE2AMAAmAg+Ak7AAXLrwAFy8wAAwABfuWADwACVmAEcwAFy9S6hFAAAAADAAJE2PYnAAXMGwEqrSxzAAXMQasABcxFgA8AAmAbAASCbIAIAAifAAF+6McABcyVgA8AAlZgCg8ABcybASqxNg8ABcy/ASqxNAMAAmAhJwAFzURbAAXOWHMABc2sWwAFzWoDAAXNVwEqqxSfAAEartc0BAAEWwAFzdS7AAFP+wACQ7cAAkSwAwABGQrWUvkI+Aj0cwAFztC6zNwIAAhbAAXPCgMABc73ASqrFJ8AARqsnndkAwACRvj2JwAFz2cBKq0scwAFz4S6hFAAAAADAAJE2P0nAAXP2IRzAAXQMFsABc/+AwAFz+sBKqsW6OsAARqhIAQABasABdBxgA8AA/JdTAMAA/bs+BU7AAXQ/wAF0RQAAJ2ADwABF5wEWwAF0TIDAAXRHwEqqxSfAAEarPRzAAXRbLq+VAQABg8ABdF/ASq15AMAAkUtOwAF0fcABdIUAAMAAX7lgA8AAlZgBHMABdIcuoRQAAAAAwACRNj0cwAF0li6vlQEAARbAAXSfgMABdJrASqrFYcAARqoAwACRSz2KwAF0sMBKq14fwAF0u8AAljcDAAMngW2EwAF0y8BKrbkcwAF01C6hFAAAAADAAJE2AD9AIiEcwAF09oLAAXTxwEqrXkgBAAErAMAA/fEBIRzAAXUHgcABdQHASqtLSAEAASsAwAD98cABdPHAAXUOAE7AAXUlwAF1LwAAwABfu2ADwACVmAEjHMABdTeBwAF1McBKq0tIAQABKwDAAP3xgsABdUvASqteIxzAAXVhgsABdVzASqteSAEAASsAwAD98YHAAXVrwEqrSx/AAXV3wACWNwMAAyeX94HAAXWHwEqrS4LAAXWOwEqrXgABYAPAAJWYAWADwACVmE7AAXWowAF1sQAAvxJgA8AAlIEBH8ABdbfAAJSSAAAAAE7AAXXYwAF15QAAwABfRmADwACUhgEWwAF15y7AAF8awACRGz0XwAF1/y7AAF8aJsABdf8BhMABdhLASq7/YAPAAJSGwACRGz0cwAF2Ii7AAF+1AwACFsABdkoWwAF2Oi60fMAAkO3AAJEpsfC5LTHAAXZzYAPAAEXnAhbAAXZ5gMABdnTASqrFoBjAAEasFsABdoWAwAF2gMBKqsW6O8AARq0BpaQWwAF2t4DAAXaywEqqxaWkwABF6sAAkbI9F8ABdtEuwABfGoXAAXbkwEqvIMAAkRs9jMABdvjASq7/HMABdwMuwABfRwEAASbAAXcTAYTAAXcTwEqu/2ADwACUhgDAAJFEPRzAAXckLsAAXywBAAEmwAF3YwEcwAF3Yx/AAXc2wACUuQIAAoPAAXdDwEqudYTAAXdOwEqu/wCv/QEAARbAAXd+gMABd3nASqrFpaTAAEXqAMAAlG9gA8AAlIEAwACRMj4BPRzAAXemLsAAX7UCAAIWwAF3zhbAAXe+LrR8wACQ7cAAkSmx8LktMcABd/dgA8AARecCFsABd/2AwAF3+MBKqsWgGMAARqwWwAF4CYDAAXgEwEqqxSfAAEarAMAAkbIGwACRsoGXwAF4H8ABeCTAAXydAADAAF+1AAAAAQPAAXg7wAF8nQAAAAMCAsABeEsAAACVjGADvVEAwAF4UwAAAB9bAAHAAXh2AAAApaRgA8AAQksBagBgA8AA/aF5XAE+Bk7AAXiewAF4pwAAwABfvGADwACVmAEcwAF4shbAAXipLsAAREfAAJDtwACRDMAARFYBAAGAwAF4x8BKsRQAwABdQk7AAXjZwAF44wAAW10DwAD9OwFbATHAAXj0YAPAAJWYAEnAAXj8JcABeQmBwAF5AMBKsSJdA8AA/TsBWz4BPRzAAXkjFMABeRrASrEiAQFdA8AA/TsBW4P9AQABNMABeSsDwAF5K8ABeXoAAAABAQHAAXksAAAAuUZbAABgA8AA/aEBPgI9HMABeUMur5UBAAEmwAF5RwGFwAF5R8BKsfxgA8AARecAwACRSz0cwAF5Z4TAAXldwEqxjVYBAAEcwAF5ay6hFAAAAADAAJE2AMAA/UwAwAD9CT4CPRzAAXmQLq+VAQABJsABeZQBgcABeZTASrEiYAPAAEXnAMAAkUs9HMABea+EwAF5pcBKsY1WAQABHMABebMuoRQAAAAAwACRNgDAAP1MPRzAAXnPFsABecUuwABJU8AAkO3AAJEUr7kBAAEewAF55cAAaCoCAAKAwAF6BcBKsRQfwAF6EcAAaUQBAAEWwAF6MYTAAXonwEqxjWHAAP1rAAAAtr5OwAF6SMABek4AAICWYAPAAJYQAR/AAXpUwACWHgMAAoPAAXpcwEqxSybAAXpwARzAAXpwhMABembASrGNgK0BAAABhW4qwAD9D10DwAD9OwFgA8AAlZgBpaSCwAF6pMBKsS1JwAF7lhzAAXuhgMABe5rASrEUSAEAARbAAXu0FsABe6QutHzAAJDtwACRKbH5uTYAwAD98T4BPRzAAXvRLsAAXywBAAEmwAF7/gEcwAF7/h/AAXvuwACVIQEAAYXAAXv3wEqzCwCv/QEAAYLAAXwUwEqxLQDAAJRvYAPAAJSBAMAAkTI+AT0cwAF8PC7AAF8sAQABJsABfGoBHMABfGofwAF8WcAAlRUBAAGFwAF8Y8BKswsAr/0BAAGCwAF8gMBKsS0AwACUb2ADwACUgQDAAJEyBsAAkbOBl8ABfKLAAXyuwAF+hwAAuSkBasABfKNgA8AA/eQCAAABA8ABfMLAAX6HAAAAAQEBwAF81AAAAIPzYAPAAEk8AABbAT4HTsABfO3AAXz2AAAfYAPAAEXnARzAAX0DFsABfP2AwAF8+MBKtHaCVcAARe1LAQABkwDAAP1KPRzAAX0MLq+VAQABgcABfRDASrSMAMAAkUtOwAF9L8ABfTYAAJWMYAO9UQEWwAF9SBbAAX04LrR8wACQ7cAAkSmx+rk3PRzAAX1tFsABfWMuwABJU8AAkO3AAJEUr7kBAAEewAF9jMAAaCoCAAKCwAF9o8BKtNxqwAF9uWADwABpIMAA8MkAALa+TsABfdfAAX3gAADAAF+8YAPAAJWYARzAAX3rFsABfeIuwABER8AAkO3AAJEMwABEVgEAAYLAAX4AwEq03ADAAF1CTsABfhXAAX4bAACAlmADwACWEAEmwAF+FQEcwAF+RR/AAX4hwACWHgIAAoPAAX4pwEq1TDHAAX4zYAPAAJWYARzAAX40LqEUAAAAAMAAkTYAr/0BAAEWwAF+YIDAAX5bwEq0dqWkwABF6gDAAJRvYAPAAJYQPRzAAX54LqERAQABhMABfn3ASrWOAMAAkTUGwACRtIGXwAF+jMABfp3AAX7wAACxFAFqwAF+jWADwAD95AIAAAEDwAF+qMABfvAAAAABAQHAAX6xAAAAg/NgA8AASBEAAFwBPgAGwACRtYGXwAF+9cABfwbAAYErAAC5JAFqwAF+9mADwAD95AIAAAEDwAF/EcABgSsAAAABAQHAAX8aAAAAg/NgA8AASV4AAFwBPgNOwAF/M8ABfzsAAJZSYAO9PAEWwAF/QoDAAX89wEq2nZZSwABJYEAiFsABf16BwAF/VsBKtrOzNr1EARbAAX90gcABf2zASrazh469Q8ABf1bAAX97AEnAAX+CFsABf46BwAF/hsBKtrOzNr1EPgI9HMABf6IuoREBAAEmwAF/4wEcwAF/4xzAAX+7FsABf6cuwABER8AAkO3AAJEMwABEWQEAASbAAX/PAYHAAX/PwEq2s2ADvVEAwABdRa/9AQABFsABf/6AwAF/+cBKtp2lpMAAReoAwACUb2ADwACVmADAAJE1PRzAAYAjFsABgBkuwABJU8AAkO3AAJEUr7kBAAEewAGAOcAAaCsBAAEmwAGAUQGBwAGAUcBKtrNgA71RAAC2vj4CPRzAAYBvLqERAQABJsABgK4BHMABgK4cwAGAiBbAAYB0LsAAREfAAJDtwACRDMAARFcBAAEmwAGAmgGBwAGAmsBKtrNgA71OAMAAXUOv/QEAARbAAYDJgMABgMTASradpaTAAEXqAMAAlG9gA8AAlZgAwACRNT0cwAGA7hbAAYDkLsAASVPAAJDtwACRFK+5AQABHsABgQTAAGgsAQABgcABgRjASrazAAC2vgbAAJG2gZfAAYEwwAGBQcABgqQAALkRAWrAAYExYAPAAP3kAgAAAQPAAYFQwAGCpAAAAAEBAcABgV0AAACD82ADwABJhwAAXAE+BU7AAYF1wAGBfQAAllJgA71OARbAAYGEgMABgX/ASri7llLAAEmJPRzAAYGbFsABgZEuwABJU8AAkO3AAJEUr7kBAAEewAGBscAAaC4BAAGBwAGBxsBKuNEAALa+TsABgePAAYHuAADAAF+9YAPAAJWYARzAAYH5FsABgfAuwABER8AAkO3AAJEMwABEWAEAAYHAAYIWwEq40QDAAF1ETsABgizAAYIxAAAgYAPAAJYQAR/AAYI3wACWHgMAAoLAAYI/wEq5LTHAAYJaYAPAAJWYAAGlpBbAAYJ+gMABgnnASri7paTAAEXqPRzAAYKWLqERAQABg8ABgpvASrlvAMAAkTUGwACRt4GXwAGCqcABgrrAAYPpAAC5JQFqwAGCqmADwAD95AIAAAEDwAGCysABg+kAAAABAQHAAYLYAAAAg/NgA8AASZIAAFwBPgQ9HMABgu4WwAGC5C7AAElTwACQ7cAAkRSvuQEAAR7AAYMEwABoLQEAARbAAYMdgMABgxjASroJllLAAEmUAAC2vk7AAYM0wAGDPQAAgnBgA8AAlGEBHMABg0gWwAGDPy7AAERHwACQ7cAAkQzAAERXAQABJsABg18BFsABg1+AwAGDWsBKugmWUsAASZRgA71OAMAAXUM9HMABg20ur5UBAAEcwAGDfBbAAYN2gMABg3HASroJglXAAEXtSwEAAZMAwAD9SgDAAJFLPRzAAYOGLqERAQABJsABg7cBHMABg7cfwAGDj8AAlfQCAAKBwAGDncBKumAcwAGDpy6hFAAAAADAAJE2AK/9AQABFsABg9KAwAGDzcBKugmlpMAAReoAwACUb2ADwACVmADAAJE1BsAAkbiBl8ABg+7AAYP/wAGE2AAAuSYBasABg+9gA8AA/eQCAAABA8ABhBDAAYTYAAAAAQEBwAGEHwAAAIPzYAPAAEpaAABcAT4EPRzAAYQrLq+VAQABFsABhDSAwAGEL8BKu4SFxcAASlwAwACRS07AAYRNwAGEVAAAwABfhmADwACVmAEcwAGEVi6hFAAAAADAAJE2PRzAAYRhLq+VAQABFsABhGqAwAGEZcBKu4SFx8AASl0AwACRSz0cwAGEdi6hEQEAASbAAYSmARzAAYSmH8ABhH/AAJY3AwADJ2SBwAGEjsBKu78cwAGEli6hFAAAAADAAJE2AK/9AQABFsABhMGAwAGEvMBKu4SlpMAAReoAwACUb2ADwACVmADAAJE1BsAAkbmBl8ABhN3AAYTuwAGJ9QAAuScBasABhN5gA8AA/eQCAAABA8ABhPzAAYn1AAAAAQEBwAGFCAAAAIPzYAPAAEpjAABcAT4CTsABhSHAAYUnAACBe2ADwABF5wEWwAGFNRbAAYUugMABhSnASrynglXAAEXtgx7AAP0fScABhUAWwAGFaRzAAYVKgcABhUTASry9tdkBAAEWwAGFUy7AAFP+wACQ7cAAkSwAwABGTrStvj8+AT0cwAGFgy6vlQEAAYHAAYWHwEq8vQDAAJFLScABhZoiFsABhcQcwAGFpIHAAYWewEq8vbXNAQABFsABha4uwABT/sAAkO3AAJEsAMAARkK0rb4/ARbAAYYGHMABheaBwAGF4MBKvL211wEAARbAAYXwLsAAU/7AAJDtwACRLADAAEZMtK2+Pz4CPRzAAYa/Lq+VAQABgcABhsPASry9AMAAkUtJwAGG0SIiHMABhugWwAGG4RbAAYbagMABhtXASrynuYTAAEXuYcAA/WtIAQABlADAAP27ACXAAYcJHMABhwUWwAGG/4DAAYb6wEq8p7mEwABF7ksBAAGTAMAA/UpgA8AASloAHMABh0AcwAGHPBbAAYc2HMABhzIWwAGHLIDAAYcnwEq8p7mEwABF7ksBAAGTAMAA/UqCVcAARe1LAQABlADAAP1KSAEAAYDAAYdDwEq8pwDAAP3xPgA+AT0cwAGHzi6hEQEAASbAAYgJARzAAYgJH8ABh9fAAJY3AwADJ2QewAGH5sAAkzgBAAEnAAAcwAGH9S6hFAAAAADAAJE2AK/9AQABFsABiCSAwAGIH8BKvKelpMAAReoAwACUb2ADwACVmADAAJE1PgVOwAGIY8ABiHMAAKcWYAO9UQEWwAGIjxbAAYh/LrR8wACQ7cAAkSmx+Lk1PRzAAYi6FsABiLAuwABJU8AAkO3AAJEUr7kBAAEewAGI28AAaCoCAAKCwAGI8sBKvvlqwAGJEWADwABpIMAA8MkAALa+TsABiTDAAYk5AADAAF+8YAPAAJWYARzAAYlEFsABiTsuwABER8AAkO3AAJEMwABEVgEAAYLAAYlZwEq++QDAAF1CPRzAAYlxLq+VAQABgcABiXXASry9AMAAkUs9HMABiYMuoREBAAEfwAGJjMAAlh4DAAKDwAGJlMBKv2kxwAGJrWADwACVmAEcwAGJri6hFAAAAADAAJE2AaWkFsABidiAwAGJ08BKvKelpMAAReoAwACRNQbAAJG6gZfAAYn6wAGKC8ABitoAALkUAWrAAYn7YAPAAP3kAgAAAQPAAYobwAGK2gAAAAEBAcABiikAAACD82ADwABJoAAAXAE+Aj0cwAGKghbAAYo1LsAASVPAAJDtwACRFK+2AQABFsABiqwWwAGKnC60fMAAkO3AAJEpmw24tgC2vT0cwAGKvC7AAF++AQABgMABitHASsBTAMAAkbsGwACRu4GXwAGK38ABiuTAAYv1AADAAF++AAAAAQPAAYr4wAGL9QAAAAEBAcABiwYAAACD82ADwABJoAAAXAE+Ak7AAYsmwAGLLwAAiGpdA8AA/TsBYAPAAJWYARzAAYuFHMABiz0WwAGLNoDAAYsxwErA6YJVwABF7YCrAQFgA8AAlZgBNMABi0EDwAGLQcABi4MAAAABAQHAAYtPAAAAgXtgA8AARecAAGADwACVmAE+Aj0cwAGLXi6vlQEAAYHAAYtiwErBVgDAAJFLSsABi3ABHMABi3cuoRQAAAAAwACRNgDAAP0EgK0AAAAAwAD9Dz0cwAGLky6hEQEAASbAAYvDARzAAYvDH8ABi5zAAJcxAQABgcABi7DASsD/AK/9AQABFsABi96AwAGL2cBKwOmlpMAAReoAwACUb2ADwACVmADAAJE1BsAAkbyBl8ABi/rAAYwLwAGM4QAAuQMBasABi/tgA8AA/eQCAAABA8ABjBXAAYzhAAAAAQEBwAGMHQAAAIPzYAPAAEmnAABcAT4EPRzAAYwpLq+VAQABFsABjDKAwAGMLcBKwjuFj8AASbQAwACRS07AAYxPwAGMWAAAhY9gA8AAlZgBHMABjFouoRQAAAAAwACRNj0cwAGMZS6vlQEAARbAAYxugMABjGnASsI7J8AASbUAwACRSz0cwAGMei6hEQEAASbAAYyvARzAAYyvH8ABjIPAAJbDAgACgcABjJXASsJ2HMABjJ8uoRQAAAAAwACRNgCv/QEAARbAAYzKgMABjMXASsI7paTAAEXqAMAAlG9gA8AAlZgAwACRNQbAAJG9gZfAAYzmwAGM98ABjikAALkEAWrAAYznYAPAAP3kAgAAAQPAAY0HwAGOKQAAAAEBAcABjRUAAACD82ADwABJuQAAXAE+Bj0cwAGNIS6vlQEAARbAAY0qgMABjSXASsNZhY/AAEnDAMAAkUtOwAGNR8ABjVAAAIWPYAPAAJWYARzAAY1SLqEUAAAAAMAAkTY9HMABjV0ur5UBAAEWwAGNZoDAAY1hwErDWSfAAEnEAMAAkUtOwAGNgMABjYYAACdgA8AAlZgBHMABjYguoRQAAAAAwACRNj0cwAGNky6vlQEAARbAAY2cgMABjZfASsNZgJbAAEnFAMAAkUs9HMABjaguoREBAAEmwAGN9wEcwAGN9x/AAY2xwACV9AIAAh/AAY3DwACWwwIAAoHAAY3VwErDlILAAY3fwErD3AAcwAGN5y6hFAAAAADAAJE2AK/9AQABFsABjhKAwAGODcBKw1mlpMAAReoAwACUb2ADwACVmADAAJE1BsAAkb6Bl8ABji7AAY4zwAGPFwAAszcAAAABA8ABjjvAAY8XAAAAAgICwAGOSQAAAIF7YAPAAEXnAMABjlcAAACzpWADwAD+fgAAXAE+BT0cwAGOYi6vlQEAAYDAAY5mwErEyQDAAJFLTsABjoDAAY6FAACFxWADwACVmAEcwAGOhy6hFAAAAADAAJE2PRzAAY6SLq+VAQABgMABjpbASsTJAMAAkUtOwAGOsMABjrQAAMAAX79gA8AAlZgBH8ABjrrAAJY3AwADJ4EGHMABjskuoRQAAAAAwACRNh/AAY7UwACXIwEAASeEDQAAPRzAAY7wLqERAQABH8ABjvnAAJY3AwADgcABjwPASsTZgsABjwjASsUJg8ABjw7ASsVHAADAAJE1BsAAkb+Bl8ABjxzAAY8hwAGRDwAAwABfwAAAAAEDwAGPLMABkQ8AAAADAwPAAY9BAAAAgXtgA8AARecAwAGPTwAAALOlYAPAAP5+AMABj2YAAAClpGADwABCSwAAXAE+Bj0cwAGPfy6vlQEAAYDAAY+DwErF8QDAAJFLTsABj53AAY+iAACFxWADwACVmAEcwAGPpC6hFAAAAADAAJE2PRzAAY+vLq+VAQABgMABj7PASsXxAMAAkUtOwAGPzcABj9MAAIXHYAPAAJWYARzAAY/VLqEUAAAAAMAAkTZOwAGQHsABkCwAAMAAX8FgA8AAlZgBJsABkB4BHMABkGQcwAGQMGrAAZAxYAPAAJgGwAEgmyACAAInwABfwjHAAZBcYAPAAJWYAYPAAZBdwErGQQDAAJgIr/0BAAGCwAGQesBKxhEAwACUb2ADwACVmD0cwAGQki6hEQEAASbAAZDiARzAAZDiHMABkJlqwAGQmmADwACYBsABIJsgAgACJMABkKcDJ5ysgcABkKHASsYBJ8AAX8MxwAGQuGADwACVmAKFwAGQwMBKxqOEwAGQ1cBKxn8AwACYCK/9AQABgsABkPjASsYRAMAAlG9gA8AAlZgAwACRNQbAAJHAgZfAAZEUwAGRGcABkj0AAMAAX8QAAAABA8ABkSTAAZI9AAAABAQEwAGRMgAAAIF7YAPAAEXnAMABkUAAAACzpWADwAD+fgDAAZFMAAAAozJgA8AA/n4AwAGRbgAAAKWkYAPAAEJLAABcAT4DPRzAAZGHLq+VAQABgMABkYvASsfGAMAAkUtOwAGRpcABkawAAMAATrZgA8AAlZgBH8ABkbLAAJZGAgACJ8AARxgcwAGRxi6hFAAAAADAAJE2AD0cwAGR0i6hEQEAASbAAZIQARzAAZIQH8ABkdvAAJY3AwADgcABkeXASsfWhMABkerASsgmHsABkfLAAJM4AQABgsABkfzASsfmAACv/QEAAYPAAZImwErH9gDAAJRvYAPAAJWYAMAAkTUGwACRwYGXwAGSQsABkkfAAZLhAACzOAAAAAEDwAGST8ABkuEAAAADAwPAAZJkAAAAgXtgA8AARecAwAGScgAAALOlYAPAAP5+AMABkokAAAClpGADwABCSwAAXAE+AUrAAZKiARzAAZKpLsAAX8QEAASAwAGStcBKyPGBwAGSvMBKyQEnwABSD4LAAZLLwErJEQDAAJHABsAAkcKBl8ABkubAAZLrwAGTewAAwABfxQAAAAEDwAGS9sABk3sAAAADAwPAAZMLAAAAgXtgA8AARecAwAGTGQAAALOlYAPAAP5+AMABkzAAAAClpGADwABCSwAAXAE+AUrAAZNJARzAAZNQLrM4AwADgMABk1nASsmKgcABk2DASsmagsABk2XASsmqAMAAkcEGwACRw4GXwAGTgMABk4XAAZQiAACzOQAAAAEDwAGTkMABlCIAAAADAwPAAZOlAAAAgXtgA8AARecAwAGTswAAALOlYAPAAP5+AMABk8oAAAClpGADwABCSwAAXAE+AUrAAZPjARzAAZPqLsAAX8QEAASAwAGT9sBKyhqBwAGT/cBKyiong/GCwAGUDMBKyjoAwACRwAbAAJHEgZfAAZQnwAGULMABlMgAAMAAX8YAAAABA8ABlDXAAZTIAAAAAwMDwAGUSgAAAIF7YAPAAEXnAMABlFgAAACzpWADwAD+fgDAAZRvAAAApaRgA8AAQksAAFwBPgFKwAGUiAEcwAGUjy7AAF/EBAAEgMABlJvASsqxgcABlKLASsrBJ8AAX8eCwAGUssBKytEAwACRwAbAAJHFgZfAAZTNwAGU0sABl/EAAMAAX8gAAAABA8ABlN3AAZfxAAAAAwMDwAGU8gAAAIF7YAPAAEXnAMABlQAAAACzpWADwAD+fgDAAZUXAAAApaRgA8AAQksAAFwBPgJAHMABlVBqwAGVSWADwAD+fsAAp9xIAQABJ4RBAMAA/o3AAZU3wAGVWQBJwAGVYBzAAZVogcABlWTASstaSAEAASed6wDAAP6NPgU9HMABlXouwABfxAQABIDAAZWGwErLSied6yeDxYLAAZWewErLagDAAJHATsABlcbAAZXLAACFxWADwACVmAEcwAGVzS6hFAAAAADAAJE2PRzAAZXaLq+VAQABgMABld7ASstKAMAAkUtOwAGV+sABlgIAAMAAX8lgA8AAlZgBH8ABlgjAAJY3AwADJ53ZHMABlhkuoRQAAAAAwACRNh/AAZYkwACXAQAAAAAAPRzAAZY9LqERAQABJsABlnABHMABlnAfwAGWRsAAljcDAAMnl/aDwAGWVsBKy/aEwAGWXMBKzDQAr/0BAAGCwAGWhsBKy2oAwACUb2ADwACVmADAAJE1PgZAHMABlrmBwAGWtcBKy1pIAQABJ53ZAMAA/o3AAZa1wAGWwQA9HMABlsouwABfxAQABIDAAZbWwErLSied2SeDxYLAAZbuwErLagDAAJHATsABlxbAAZcbAACFxWADwACVmAEcwAGXHS6hFAAAAADAAJE2PRzAAZcqLq+VAQABgMABly7ASstKAMAAkUtOwAGXSsABl1EAAMAAX8pgA8AAlZgBH8ABl1fAAJY3AwADJ53rHMABl2guoRQAAAAAwACRNh/AAZdzwACXAQAAAAAAPRzAAZeMLqERAQABJsABl74BHMABl74fwAGXlcAAljcDAAMnl/eDwAGXpcBKzR+EwAGXq8BKzV0Ar/0BAAGCwAGX1MBKy2oAwACUb2ADwACVmADAAJE1BsAAkcaBl8ABl/bAAZf7wAGY4QAAwABfywAAAAEDwAGYBcABmOEAAAACAgLAAZgTAAAAgXtgA8AARecAwAGYIQAAALOlYAPAAP5+AABcAT4DPRzAAZgsLq+VAQABgMABmDDASs4iAMAAkUtOwAGYTsABmFoAAJkIYAPAAJa1AR/AAZhowACWxAIAAhzAAZiALqEUAAAAAMAAkTYnmQgAPRzAAZibLqERAQABH8ABmKTAAJY3AwADgcABmK7ASs4ygsABmLPASs5iH8ABmMTAAJZsAQABJ8AARygAAADAAJE1BsAAkceBl8ABmObAAZjrwAGZ6AAAwABfzAAAAAEDwAGY+8ABmegAAAACAgLAAZkJAAAAgXtgA8AARecAwAGZFwAAAMAASIhgA8AA/n4AAFwBPgM9HMABmSgur5UBAAGAwAGZLMBKzwMAwACRS07AAZlKwAGZUAAAhJtgA8AAlrUBH8ABmVbAAJbEAgACHMABmW4uoRQAAAAAwACRNoHAAZl1wErPEwA9HMABmbEuoREBAAEfwAGZusAAlkYCAAInmhwfwAGZzcAAlkYCAAInmhyCwAGZ3MBKz0UAAADAAJE1BsAAkciBl8ABme3AAZnywAGatQAAwABfzQAAAAEDwAGaCMABmrUAAAACAgLAAZoWAAAAgXtgA8AARecAwAGaJAAAAMAASIhgA8AA/n4AAFwBPgM9HMABmjUur5UBAAGAwAGaOcBKz+QAwACRS07AAZpXwAGaXQAAhJtgA8AAlrUBH8ABmmPAAJbEAgACHMABmnsuoRQAAAAAwACRNoHAAZqCwErP9AA9HMABmpIuoREBAAEfwAGam8AAlkYCAAInmhyCwAGaqsBK0CYAAMAAkTUGwACRyYGXwAGausABmr/AAZsbAADAAF/OAAAAAQPAAZrSwAGbGwAAAAEBAcABmuAAAACBe2ADwABF5wAAXAE+AT0cwAGa7S7AAF/MAgACgMABmv7AStC1J8AAX88AwACRxwbAAJHKgZfAAZsgwAGbJcABm4UAAMAAX9AAAAABA8ABmzbAAZuFAAAAAQEBwAGbRAAAAIF7YAPAAEXnAABcAT4BPRzAAZtRLsAAX80CAAKAwAGbaMBK0RcnwABfzwDAAJHIBsAAkcuBl8ABm4rAAZuPwAGb8AAAwABf0QAAAAEDwAGbo8ABm/AAAAABAQHAAZuxAAAAgXtgA8AARecAAFwBPgE9HMABm74uwABfzQIAAoDAAZvVwErReSfAAF/SAMAAkcgGwACRzIGXwAGb9cABm/rAAZxQAADAAF/TAAAAAQPAAZwJwAGcUAAAAAEBAcABnBcAAACBe2ADwABF5wAAXAE+AT0cwAGcJC7AAF/MAgACgMABnDXAStHbJ8AAX9IAwACRxwbAAJHNgZfAAZxVwAGcWsABnMgAAMAAX9QAAAABA8ABnGPAAZzIAAAAAQEBwAGccQAAAIF7YAPAAEXnAABcAT4CPRzAAZx+Lq+VAQABgMABnILAStI9AMAAkUs9HMABnI4uoREBAAEfwAGcl8AAljcDAAMnSBzAAZynLqEUAAAAAMAAkTYfwAGcssAAlwEAAAAAAADAAJE1BsAAkc6Bl8ABnM3AAZzSwAGdQwAAwABf1QAAAAEDwAGc3sABnUMAAAABAQHAAZzsAAAAgXtgA8AARecAAFwBPgI9HMABnPkur5UBAAGAwAGc/cBK0tUAwACRSz0cwAGdCS6hEQEAAR/AAZ0SwACWNwMAAyeaHxzAAZ0iLqEUAAAAAMAAkTYfwAGdLcAAlwEAAAAAAADAAJE1BsAAkc+Bl8ABnUjAAZ1NwAGjDAAAqTcAAAABA8ABnVbAAaMMAAAABQQEwAGdZAAAAIF7YAPAAEXnAMABnXgAAAC7CWADwABF5wDAAZ2OAAAAgpRgA8AAYtYAwAGdrAAAAKWkYAPAAEJLAAHAAZ3LAAAAqr5gA8AA+tEBasABndVgA8AA+tEAXAE+AknAAZ3jFsABneyCwAGd58BK04yz08AAYt0+A07AAZ4TwAGeIQAAuhpgA8AAYv0BJsABnhMBgsABniPAStOMYAPAAGL9TsABnjvAAZ5DAACWUmADvSoBFsABnlOFwAGeRcBK0+mWUsAAYv9JwAGeYhzAAZ5uhsABnmbAStQSSAEAARbAAZ6BFsABnnEutHzAAJDtwACRKbG5uPgAwAD98T4CPRzAAZ6ZLsAAX8sCAAKAwAGepMBK02wjhMABnqvAStOtJ53ZJ53rAWADwAD+fgDAAJHGSsABns4AScABnuMcwAGe74bAAZ7nwErUEkgBAAEWwAGfAhbAAZ7yLrR8wACQ7cAAkSmxxbkEAMAA/fE+AknAAZ8hhMABnyXAStOtPgE9HMABnzsuwABfzgEAAYDAAZ9PwErTbADAAJHJPgE9HMABn3IuwABf0AEAAYDAAZ+EwErTbADAAJHKSsABn54AScABn7McwAGfv4bAAZ+3wErUEkgBAAEWwAGf0hbAAZ/CLrR8wACQ7cAAkSmxx7kGAMAA/fE+AknAAZ/0hMABn/jAStOtPgE9HMABoA4uwABf0wEAAYDAAaAewErTbADAAJHMPgE9HMABoEEuwABf0QEAAYDAAaBWwErTbADAAJHLSsABoHAAScABoIUcwAGgkYbAAaCJwErUEkgBAAEWwAGgpBbAAaCULrR8wACQ7cAAkSmxxrkFAMAA/fE+AknAAaDBhMABoMXAStOtPgE9HMABoNsuwABf0QEAAYDAAaDwwErTbADAAJHLPgE9HMABoRMuwABf0wEAAYDAAaEjwErTbADAAJHMSsABoT0AScABoVIcwAGhXobAAaFWwErUEkgBAAEWwAGhcRbAAaFhLrR8wACQ7cAAkSmxyLkHAMAA/fE+AknAAaGVhMABoZnAStOtPgE9HMABoa8uwABf0AEAAYDAAaHBwErTbADAAJHKPgE9HMABoeQuwABfzgEAAYDAAaH4wErTbADAAJHJSsABohIAPz9JwAGiLCEcwAGiPIHAAaIwwErTfEgBAAErAMAA/fE+AT0cwAGiTS7AAF/WBAADgcABomLAStN8gsABom/AStOMg8ABonXAStOcAaq+hMABopzAStOtwACR0D4BPRzAAaK6LsAAX9YEAAOAwAGiz8BK02yCwAGi1sBK04yDwAGi3MBK05wBqr6EwAGi+cBK063AAJHQBsAAkdCBl8ABoxHAAaMWwAGlvgAAwABf1gAAAAEDwAGjKsABpb4AAAAEAwPAAaM/AAAAgXtgA8AARecAwAGjTwAAAIKUYAPAAGLWAMABo2cAAAClpGADwABCSwABwAGjhgAAAKq+YAPAAPrRAWrAAaOQYAPAAPrRAFwBPgU9HMABo6gWwAGjni7AAElTwACQ7cAAkRSvvQEAAR7AAaO8wABoagEAAYHAAaPMwErXlQAAtsA9HMABo9kur5UBAAGAwAGj3cBK14UAwACRS07AAaP8wAGkAgAAhJtgA8AAlrUBJsABo/wBHMABpFMfwAGkEMAAlsMCAAIcwAGkIi6hFAAAAADAAJE2HMABpDAWwAGkKS64FcAAkO3AAJERr+IBAAGBwAGkP8BK15UAwABljwCv/QEAAYLAAaRpwErXpQDAAJRvYAPAAJa1PRzAAaTILqERAQABJsABpOcBHMABpOcfwAGk0cAAlkYCAAInmhyEwAGk4MBK2CcAr/0BAAGCwAGk/cBK16UAwACUb2ADwACVmADAAJE1ScABpVUhg8ABpVrASte2PgE9HMABpWwuoREBAAEmwAGliwEcwAGlix/AAaV1wACWRgIAAieaHBzAAaWELqEUAAAAAMAAkTYAr/0BAAGCwAGlocBK16UAwACUb2ADwACVmADAAJE1PwbAAJHRgZfAAaXDwAGlyMABp9QAAMAAX9cAAAABA8ABpd7AAafUAAAABAMDwAGl7AAAAIF7YAPAAEXnAMABpgEAAACClGADwABi/QDAAaYfAAAApaRgA8AAQksAAcABpj4AAACqvmADwAD60QFqwAGmSGADwAD60QBcAT4FPRzAAaZgFsABplYuwABJU8AAkO3AAJEUr70BAAEewAGmdMAAaHQBAAGBwAGmkMBK2ZQAALbAPRzAAaadLq+VAQABgMABpqHAStmEAMAAkUtOwAGmvMABps0AAMAAX6pgA8AAlZgBHMABptgWwAGmzy7AAERHwACQ7cAAkQzAAERaAQABFsABpu+BwAGm6sBK2ZSWUsAAYv8AwABdRj0cwAGm/S6hEQEAASbAAac9ARzAAac9HMABpwRqwAGnBWADwACYBsABIJsgAgACJ8AAX9gxwAGnImADwACVmAIcwAGnIy6hFAAAAADAAJE2hMABpyrAStomAMAAmAiv/QEAAYLAAadTwErZpADAAJRvYAPAAJWYAMAAkTVJwAGnbIPAAadwwErZtT4BPRzAAaeCLqERAQABJsABp6EBHMABp6EfwAGni8AAlkYCAAInmhwcwAGnmi6hFAAAAADAAJE2AK/9AQABgsABp7fAStmkAMAAlG9gA8AAlZgAwACRNT8GwACR0oGXwAGn2cABp97AAayVAADAAF/ZAAAAAQPAAagAwAGslQAAAAUEBMABqBUAAACBe2ADwABF5wDAAagvAAAAuwlgA8AARecAwAGoUAAAAIKUYAPA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wACRKZsGuK8AwAD98T4BPRzAAbkkLrM5AwADhMABuTDASubegcABuTfASuZagsABuUHASuZqAMAAkcNJwAG5YhzAAbluFMABuWbASuh7CABIAQABFsABuYEWwAG5cS60fMAAkO3AAJEpmwW4rgDAAP3xPgE9HMABuZguwABfxQMAA4TAAbmkwErm3oHAAbmrwErmWoLAAbm1wErmagDAAJHCScABudYcwAG54hTAAbnawEroewgASAEAARbAAbn1FsABueUutHzAAJDtwACRKZsEuKwAwAD98T4BPRzAAboJLrM4AwADhMABuhLASubegcABuhnASuZagsABuiPASuZqAMAAkcFJwAG6RBzAAbpQFMABukjASuh7CABIAQABFsABumMWwAG6Uy60fMAAkO3AAJEpmwG4qwDAAP3xPgE9HMABunguwABfxgMAA4TAAbqCwErm3oHAAbqJwErmWoLAAbqTwErmagDAAJHEScABurQcwAG6wBTAAbq4wEroewgASAEAARbAAbrTFsABusMutHzAAJDtwACRKZsCuK0AwAD98T4EPRzAAbuvLrM4AwADhMABu7jASubegcABu7/ASuZagsABu8nASuZqAMAAkcFOwAG788ABu/sAAMAAX+FgA8AAlZgBHMABu/0uoRQAAAAAwACRNj0cwAG8DC7AAF/AAwADhMABvBjASubegcABvB/ASuZagsABvCnASuZqAMAAkb89HMABvEUuoREBAAEmwAG8jQEcwAG8jR/AAbxOwACWNwMAAyOFwAG8WMBK50Ynl/cnl/YBYAPAAP5+FMABvHDASuuQCQAcwAG8eS6hFAAAAADAAJE2AK/9AQABgsABvKPASuZqAMAAlG9gA8AAlZgAwACRNUnAAbzFFsABvM6AwAG8ycBK5kq7BcAASdA+AkAcwAG8+obAAbzuwEroKkgBAAErAMAA/fHAAbzuwAG9AQA9HMABvQwuwABf1wQAA4TAAb0jwErm3ibAAb0qAYPAAb0qwErmgGADwABi/YLAAb0wwErmagGqvoXAAb1ZwErnRsAAkdFJwAG9cRzAAb2FFsABvXUutHzAAJDtwACRKbGOAQABFMABvZ/ASuh7CAAAuYI+AT0cwAG9sy7AAF/ZBQAEhMABvePASubehsABverASugqJsABvfcBg8ABvffASuaAYAPAAGL9gsAB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wAHHU4DAAcdOwErxyrmpwABKBgDAAJFLPRzAAcdwhMABx2bASvQWVgEAARzAAcd0LqEUAAAAAMAAkTYAwAD9TD0cwAHHh4LAAceAwErzMcAAUWUEAAQuFsABx6kuuBXAAJDtwACREYDAAcexwErxyoTAAce3wEr0FgDAAHZZPRzAAcfHLqERAQABJsAByCsBHMAByCsfwAHH2cAAlh4CAAIcwAHH6hbAAcfhLsAAREfAAJDtwACRDMAARFYBAAEmwAHICQEWwAHICYPAAcf/wErzpJZSwABoGmADvVEAwABdQoTAAcgTwEr0FgCv/QEAARbAAchGgMAByEHASvHKpaTAAEXqAMAAlG9gA8AAlZgAwACRNQbAAJHagZfAAchiwAHIc8ABzFwAALksAWrAAchjYAPAAP3kAgAAAQPAAciGwAHMXAAAAAEBAcAByJcAAACD82ADwABKFwAAXAE+CE7AAcixwAHItgAAlytgA8AAlZgBHMAByLguwABf4sAAkO0BAAGAwAHI3MBK9ZMAwACRPE7AAcjwwAHI/QAAwABfRmADwACUhgEWwAHI/y7AAF8awACRG07AAckiwAHJJwAAgm1gA8AAlIEBH8AByS3AAJSSAAAAAD0XwAHJQy7AAF8aJsAByUMBg8AByVbASvYAYAPAAJSGwACRG0nAAclgFsAByWmAwAHJZMBK9ZO7J8AASiw+AT0cwAHJhi7AAF+1AwACFsABybkWwAHJqS60fMAAkO3AAJEpse+5LBbAAcndgMABydjASvWTuanAAEaaAaWkFsAByg2AwAHKCMBK9ZOlpMAARerAAJGyScAByiwWwAHKNYDAAcowwEr1k7smwABKLT4EPRzAAcpSLq+VAQABFsAByluAwAHKVsBK9ZO5qcAARpoAwACRS07AAcp4wAHKgwAArOtgA8AAlaIBHMABypYWwAHKjy64FcAAkO3AAJERr+oBAAEWwAHKqoDAAcqlwEr1k7slwABKHQDAAGWJTsABytrAAcrfAAAgYAPAAJWYASbAAcraARzAAcsTHsAByuHAAJNAAwADHMAByvwuoRQAAAAAwACRNoTAAcsDwEr29jHAAcsPYAPAAJWYAACv/QEAARbAAcsugMAByynASvWTpaTAAEXqAMAAlG9gA8AAlZg9HMABy0guwABfLAEAASbAAct1ARzAAct1H8AB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SwBJzSoASdFcAEnRqwBJ0owASdOrAEnXBwBJ14YASdiEAEnZVABJ2joASdubAEneHQBJ4BIASeCuAEnkrgBJ53kASep3AEnsOwBJ7JQASe07AEnuVgBJ7uEASe9sAEnv9wBJ8Q4ASfFjAEn5RgBJ+Z0ASfobAEn6cgBJ+skASf4bAEn/XwBKFJMAShpqAEoeEABKH7UASiFiAEoiGwBKIrkASivnAEouGgBKL0kASjB+AEow7gBKMXYASjH+AEozIgBKM/wASjUDAEo4xwBKOUcASjmxAEo6GwBKOoYASjrxAEo7XgBKO8sASjw4AEo8pQBKPRIASj1/AEo/lwBKQAQASkBvAEpBUQBKQbsASkImAEpCkQBKQvwASkNHAEpFkQBKRmkASkl+AEpMfwBKTPEASk1WAEpPNABKU3AASlWGAEpYxwBKXCoASmAiAEpiJwBKZRIASmfxAEpqEQBKbTkASm7YAEpwigBKcf0ASnNaAEp08gBKesIASoNSAEqFPABKhywASof7AEqLHgBKi44ASoxmAEqNHABKkRUASpQDAEqUeABKlZAASpaPAEqYGwBKmOcASpm+AEqe0gBKn9QASqClAEqk5gBKpqIASqcLAEqoawBKqUcASqo5AEqqjwBKsOgASrRAAEq2HABKtmcASriFAEq50wBKu04ASrxxAErAHQBKwL0ASsIFAErDIwBKxJ8ASsXFAErHmgBKyMcASsleAErJ8ABKyoUASsseAErN9gBKztcASs+4AErQiQBK0OsAStFNAErRrwBK0hEAStKpAErTQgBK11kAStlYAErbVABK3zsASuIgAErlIgBK5aAASuYeAErw2ABK8ZQASvVdAEr4swBK+t8ASvzsAEr9QgBK/kgASwSRAEsIpQBLCqAASwsQAEsNHgBLD18ASxEXAEsRiQBLE3IASxiBAEsbmQBLHjwAAADAAAABgZcASyFHAEmt2ABJrp4ASbcpAEshRQAAAAMASyFHAAAAAAACBMAAkewAgZgAAB+A2gAApIsAAIDzAAC2dAABAQGvsYEpAAC4SAABAQGk0oFXAACkUAABAQKWmqSfgZIAAMAAaVexfQCB0QAAwABhDwAAgfQAALinAAEBAbJMgisAAL0VAACCTwAAwABi0QAAgnAAAL42AACCoQAAwABBkgAAgsIAAMAAbiwAAQECwABNw7yn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A8AAke8CH5pNwACuxwQABISaX8BLJQYWmpGDmoXASyT4s7fAAE2kg5qhwEsk+BSarsBLJoQLAAAfmyzAAJJMBgAGhJtFwEslBhabXS6yZMAAkezAAJH5Fpt9gpt1wEsk6rfZwABDFIObj8BLJPiFm5zASyUUFJumwEsmhAsAAD0cm8wUm8XASydCDACD/QEAAYab1MBLJSgAwAD9CQCkYwAASyRzAEskrgBLLSgAAAACAsAAkgKBmJ/on+7AASg4A8AAX/wAAAFgAcAARSYAAWABwACR7wkEwACSBIGYoPqhKAbAAF/9AGADwAD8lwFqoSVgA8AA/JfAAN9cBMAAkgWBmKFGoWcJgL0BaqEuYAPAAP3kAmADwAD+fgEnwABf/ATAAJIHgZihjKGjCbSWwACR7ABgA8AAQbgABMAAkgiBmKG9ocUJsmTAAJHsAGADgRQABMAAkgmBmKHpofoJwABSS8AAkewAYAPAAHfmAATAAJIKgZiiEaIdCbYjwACR7ABgA8AATZwABMAAkguBmKI3okAJwABJU8AAkewAYAO2swAEwACSDIGYol6iYgnAAF/+wACR7ABgA8AAqwUABMAAkg2BmKJtonMYwABf/8AAkewAYAPAAEUCASsBBcAAkkyBmKJ4onijCQAAAAOikKMJAAAABgYGopYAAAS0lmADwABBuACitAAABLJkYAOBFACiyQAABMAAUktgA8AAd+YAouEAAAS2I2ADwABNnACi9AAABMAASVNgA7azAKMEAAAEwABf/mADwACrBQAAYAPAAJICAT8HCAHAAJIHgADASy6ACAHAAJIIgQDASy6OCAHAAJIJggDASy6aCAHAAJIKgwDASy6qCAHAAJILhADASy64CAHAAJIMhQDASy7GCQGieMAARZIAAAAAOQbAAJIPgZijDqMio08BALO3AAAAAQOjMaNPAAAAAAAAAGADuaABSqM0ARajQRajNC62I8AAkezAAJIKs7fAAE2kBsAAkhGBmKNUo2yjqgEAwABT/sAAkewAAAABA6OBo6oAAAAAAAAAYAO+XAFKo4oBFqOXFqOKLrYjwACR7MAAkgqxKsAATaUGwACSEoGYo6+jvqPkAQDAAEhSwACR7AAAAAEDo8qj5AAAAAAAAABgA8AAasgBSqPNARaj2hajzS62I8AAkezAAJIKuC3AAE2gBsAAkhSB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HEnAAEUZJcAARSOCwABFHcBLREZgA8AASNI+AUrAAEU0ARzAAEVHFsAARUEUwABFO8BLREYCAWADwABI0oJVwABF7UsBAAGTAMAA/Uo/SsAARVYBgMAARV3AS0PQBsAAkiGBmMAARWrAAEWDwABGGwAAuXIBasAARWtgA8AA/eQCAAABA8AARZPAAEYbAAAAAQEBwABFoQAAAIPzYAPAAEhLAABgA8AARecBPgJOwABFusAARcEAAMAAYA9gA8AARecBHMAARcMuwABgEAIAAhzAAEXSgMAARc3AS0W3nP0AAAAAwABIURbAAEXkgMAARd/AS0W3hcLAAEhPAMAAkiJKwABF8gEjIRzAAEYAgcAARfnAS0XSSAEAASsAwAD98YHAAEYKwEtF0oDAAEYTwEtFtwFgA8AARecGwACSIoGYwABGIMAARi3AAEdoAADAAGAQAAAAAQPAAEY2wABHaAAAAAICAsAARl0AAACc/WADwABpkwDAAEZ1AAAAhcJgA8AARecAAGADwABF5wE+AknAAEaEJcAARpCBwABGiMBLRppgA8AASLw+A07AAEawwABGuQAAhY9gA8AASLwBFMAARrvAS0aaAQFgA8AASLxOwABG2MAARt8AAMAAYA9gA8AAYUIBHMAARuuAwABG4cBLRoqDXwEAARbAAEb5gsAARvDAS0bQhhXAAEi+AMAAaZVJwABHCiEcwABHFYPAAEcOwEtG9UgBAAErAMAA/fFKwABHHgEcwABHLBbAAEclLsAAX//AAJHswACSDarwAgACg8AARzjAS0b1FsAAR0AutiPAAJHswACSCgDAAEUVPz9KwABHWQErBsAAkiOBmMAAR23AAEd6wABOQwAAwABgEQAAAAEDwABHnMAATkMAAAABAQHAAEesAAAAg/NgA8AARuQAAGADwABF5wE+A07AAEfFwABH1AAAwABgEmADwABF5wEcwABH4RbAAEfbgMAAR9bAS0fJglXAAEXtSwEAAZQAwAD9SknAAEfqFsAASDocwABIBoHAAEfuwEtH5LXFAQABFsAASBsuwABT/sAAkezAAJIRAMAARju0rb4/PgdJwABIVBzAAEhngcAASFjAS0fkug0AAAAAwABGZz4DTsAASI/AAEidAADAAGATYAPAAEi8ASbAAEiPAYHAAEifwEtH5GADwABIvE7AAEjLwABI1AAAhhVgA8AAYfgBJsAASMsBFsAASOSCwABI1sBLSHaGFcAASL5gA8AAYfhKwABI9gEcwABJBBbAAEj9LsAAX//AAJHswACSDblXAgACFsAASRyDwABJE8BLSKFhwABh/hbAAEkkLrYjwACR7MAAkgoAwABFF0nAAElAHMAASVOBwABJRMBLR+S6DgAAAADAAEZoPgNOwABJecAASYcAAMAAYBNgA8AASLwBJsAASXkBgcAASYnAS0fkYAPAAEi8TsAASbPAAEm8AACGFWADwABiIwEmwABJswEWwABJzILAAEm+wEtJPoYVwABIvmADwABiI0rAAEneARzAAEnsFsAASeUuwABf/8AAkezAAJINuVcCAAIWwABKBIPAAEn7wEtJaWHAAGIpFsAASgwutiPAAJHswACSCgDAAEUXP07AAEouwABKNgAAwABUqmADwAD60QEewABKQsAAke4CAAIWwABKX4HAAEpQwEtH5LnpwABGJxbAAEpwLrYjwACR7MAAkgoATsAASpPAAEqeAACtzWADvlEBFsAASqWAwABKoMBLR8m56cAARidOwABKysAAStUAALpLYAO+UQEWwABK7BbAAErXLsAAU/7AAJHswACSEbWnvm9JwABLThbAAEu6HMAAS3IWwABLUi7AAFP+wACR7MAAkhG1vQIAAoPAAEuFwEtKLxbAAEugFsAAS5Eus7fAAJIPscu5CgC+hLStvj8+AT2MwABL1sBLSlUWwABL+BbAAEvjLsAAU/7AAJHswACSEbWlvm1JwABMERbAAEx9HMAATDUWwABMFS7AAFP+wACR7MAAkhG1vQIAAoPAAExIwEtKLxbAAExjFsAATFQus7fAAJIPscq5CQC+hLStvj8+AT2MwABMmcBLSlUWwABMuxbAAEymLsAAU/7AAJHswACSEbWmvm4/TsAATODAAEznAACBdmADwABHbgEfwABM98AAR30DAAKBwABNAsBLR+SEwABNEsBLSlUBrK8hgsAATS3AS0noSsAATT0BhcAATUTAS0tnScAATVccwABNaoHAAE1bwEtH5LoPAAAAAMAARmk+A07AAE2NwABNmwAAwABgE2ADwABIvAEmwABNjQGBwABNncBLR+RgA8AASLxOwABNxMAATc0AAIYVYAPAAGJDASbAAE3EARbAAE3dgsAATc/AS0vUhhXAAEi+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oC6zt8AAkg+xjgEAAYPAAKHJwEuCCAC5gj4BSsAAod0BHMAAoesWwACh5C7AAF//wACR7MAAkg25XAIAAikWwACiAS62I8AAkezAAJIKAMAARRxJwACiHRzAAKIpg8AAoiHAS4IISAEAARbAAKI7FsAAoiwus7fAAJIPmwK4rQDAAP3xPgFKwACjEgGAwACjGcBLgG4+AUrAAKM2ARzAAKNEFsAAoz0uwABf/8AAkezAAJINuVwCAAIqFsAAo1sutiPAAJHswACSCgDAAEUcScAAo30WwACjqxzAAKOMhMAAo4HAS4IutdMBAAEWwACjlS7AAFP+wACR7MAAkhEAwABGSLStvj8+AUnAAKPFHMAAo9GDwACjycBLgghIAQABFsAAo+MWwACj1C6zt8AAkg+bBLisAMAA/fE+AUrAAKP3ARzAAKQFFsAAo/4uwABf/8AAkezAAJINuVwCAAIpFsAApBsutiPAAJHswACSCgDAAEUcPgBJwACktCIWwAClBRzAAKTQhMAApLjAS4IutcIBAAEWwACk4i7AAFP+wACR7MAAkhEAwABGOLMavkAAHMAApSqDwAClIsBLgghIAQABFsAApTwWwAClLS6zt8AAkg+bAritAMAA/fE+AUrAAKWGAYDAAKWNwEuAbknAAKaGIR7AAKalwAB36wEAAYHAAKa2wEuAiQA+A07AAKbTwACm4gAAtlRgA75RARbAAKbvhMAApuTAS4IuuenAAEYnTsAApxPAAKcgAAC1vmADvjcBHMAAp0EWwACnLC7AAFP+wACR7MAAkhG1vgIAAoXAAKdOwEuGeIPAAKdewEuCCAC+hUnAAKduFsAAp3+GwACncsBLhp60rb4/PgFKwACnmwEcwACnqRbAAKeiLsAAX//AAJHswACSDblcAgACKRbAAKe/LrYjwACR7MAAkgoAwABFHEnAAKfbFsAAp+yGwACn38BLhp61k75BPgFKwACoCQEcwACoFxbAAKgQLsAAX//AAJHswACSDblcAgACKhbAAKguLrYjwACR7MAAkgoAwABFHD8/SsAAqE8BgMAAqFbAS4BuBsAAkjOBmMAAqGPAAKh8wACrVgAAuSsBasAAqGRgA8AA/eQCAAABA8AAqI/AAKtWAAAAAQEBwACooAAAAIPzYAPAAEn7AABgA8AARecBPgRJwACorBzAAKi1gMAAqLDAS4fJux0BAAEWwACowS62I8AAkezAAJIKAMAAShJKwACo0AEWwACo3IDAAKjXwEuHybmpwABKBj9OwACpKcAAqTUAAK5LYAPAAGLWARbAAKk8gMAAqTfAS4fJuwTAAEn/ScAAqVAiJcAAqWCBwACpVMBLiCxgA8AAYykAHMAAqYoWwACpgxbAAKl8gMAAqXfAS4fJglXAAEXtYcAA/WtIAQABlQDAAP27PgJOwACppcAAqakAAMAAYC9gA8AARecBFsAAqbCAwACpq8BLh8m7GcAASgVJwACpyiIiJcAAqdKCwACpzsBLiJ5gA8AAS0MAHMAAqf8WwACp+hTAAKn2wEuIngIBYAPAAEtDgmvAAEtFSAEAAWrAAKoZYAPAAEs3wAD6ogDAAP3xABbAAKo6FsAAqjMUwACqL8BLiJ4CAWADwABLQ4JVwABF7YFVwAD9HT4CTsAAqlbAAKpbAACClGADwABi1gEWwACqYRTAAKpdwEuIngIBYAPAAEtDu23AAEtGScAAqnMiFsAAqnyDwACqd8BLiUez08AAYt0AFsAAqpSDwACqj8BLiUey4MAAYtk+AUrAAKqsATXAAKrFAAABAGADwABF5wEcwACqxRbAAKq4gMAAqrPAS4fJuanAAEoGuhQDAAMWwACq0S62I8AAkezAAJIKg8AAqt/AS4lHFsAAquqAwACq5cBLh8mCa8AASgAAwABGcTUAAAABAFsBF8AAqv6EwACq/MBLia6lpBbAAKsXgMAAqxLAS4fJpaTAAEXqwABF6oQAwEuJrj8/P0rAAKtHAYDAAKtOwEuHyQbAAJI0gZjAAKtbwACrdMAAq/UAALksAWrAAKtcYAPAAP3kAgAAAQPAAKuHwACr9QAAAAEBAcAAq5gAAACD82ADwABKFwAAYAPAAEXnAT4CScAAq6QcwACrrYDAAKuowEuKi7sdAQABFsAAq7kutiPAAJHswACSCgDAAEopSsAAq8gBFsAAq9SAwACrz8BLiou5qcAARpo/SsAAq+YBgMAAq+3AS4qLBsAAkjWBmMAAq/rAAKwTwACslAAAuS0BasAAq/tgA8AA/eQCAAABA8AArCbAAKyUAAAAAQEBwACsNwAAAIPzYAPAAEowAABgA8AARecBPgJJwACsQxzAAKxMgMAArEfAS4syux0BAAEWwACsWC62I8AAkezAAJIKAMAASjhKwACsZwEWwACsc4DAAKxuwEuLMrmpwABGmj9KwACshQGAwACsjMBLizIGwACSNoGYwACsmcAArLLAAK0cAAC5LgFqwACsmmADwAD95AIAAAEDwACswMAArRwAAAABAQHAAKzMAAAAg/NgA8AASjwAAGADwABF5wE+AUrAAKzYASMcwACs5IDAAKzfwEuL2bsdAQABFsAArPAutiPAAJHswACSCgDAAEpLFsAArQWAwACtAMBLi9m5qcAARpqAwACtFMBLi9kBYAPAAEXnBsAAkjeBmMAArSHAAK0twACujQAAwABgMAAAAAEDwACtTsAAro0AAAACAgLAAK1qAAAAg/NgA8AARwkAwACtfQAAAIWPYAPAAEXnAABgA71OAT4DTsAArZvAAK2oAACFkmADvlEBFsAArbOBwACtqsBLjIK56cAARidOwACt1cAArdwAAIJqYAO9PAEjJcAAresWwACt44DAAK3ewEuMcpZSwABG62ADvU4WwACuCYDAAK4EwEuMcpZSwABG6xzAAK4oFsAArhsutiPAAJHswACSCrX/AgACFsAArkCAwACuO8BLjHKlNMAARueCwACuSsBLjJsAwABNwgFgA708SsAArl0BIyXAAK5rg8AArmTAS4zBYAO9ThTAAK58wEuMwQMBYAO9TisBYAO9TgbAAJI4gZjAAK6SwACuq8AAsTQAALj7AWrAAK6TYAPAAP3kAgAAAQPAAK64wACxNAAAAAEBAcAArsMAAACD82ADwABHUQAAYAPAAEXnAT4EScAArs8WwACu2IDAAK7TwEuNqbpywABHX0rAAK7lAYDAAK7swEuNqT9OwACu+sAArwMAAIWPYAPAAEXnARbAAK8KgMAArwXAS42phY/AAEdOScAAr3YlwACvg4HAAK96wEuN7WADwABIvD4CTsAAr6fAAK+wAACGFWADwABhQgEWwACvuxTAAK+ywEuN7QEBYAPAAEi8hhXAAEi+ScAAr8sWwACv2ILAAK/PwEuOMMAARkHAAGFQPgROwACwEMAAsCQAAMAAYDFgA8AAYpMBJsAAsBABgsAAsCbAS44wYAPAAGKTTsAAsFjAALBfAACEi10DwAD9bQJgA71OYAPAAGFCARbAALB1g8AAsGHAS459hIvAAGKVTsAAsJPAALCZAACAlmADwABhQgEcwACwoYTAALCbwEuOqEsBAAEWwACwp4DAALCiwEuNqZZSwABHTADAAP2BScAAsLkhHMAAsMOFwACwvcBLjttIAQABKwDAAP3xPgFKwACw2AEcwACw5hbAALDfLsAAX//AAJHswACSDarwAgAChcAAsPLAS47bFsAAsPkutiPAAJHswACSCgDAAEUVPz8/SsAAsSUBgMAAsSzAS42pBsAAkjmBmMAAsTnAALFSwAC5PAAAuP4BasAAsTpgA8AA/eQCAAABA8AAsWDAALk8AAAAAQEBwACxbAAAAIPzYAPAAEduAABgA8AARecBPgROwACxhcAAsY4AAIWPYAPAAEXnARbAALGVgMAAsZDAS4/BhY/AAEdyScAAsaMcwACxwhbAALGuFsAAsacuwABf/8AAkezAAJINuU/AAEUOgxwBAAGBwACxy8BLj9wAwAD+Oz4BScAAstUWwACzDBzAALLsHMAAsugWwACy4oHAALLZwEuP3IJVwABF7UsBAAGTAMAA/Uq1zQEAARbAALL2LsAAU/7AAJHswACSEQDAAEZCtK2+Pz4BSsAAsygBHMAAsz4WwACzOIHAALMvwEuP3IJVwABF7UsBAAGTAMAA/Uo/ScAAs1YcwACzY4HAALNawEuP3LoOAAAAAMAARmg+A07AALOHwACzmAAAwABgMmADwABIvAEmwACzhwGBwACzmsBLj9xgA8AASLxOwACzvMAAs8UAAIYVYAPAAGIjASbAALO8ARbAALPYgsAAs8fAS5DdhhXAAEi+YAPAAGIjSsAAs+gBHMAAs/YWwACz7y7AAF//wACR7MAAkg25VwIAAhbAALQOg8AAtAXAS5EIYcAAYikWwAC0Fi62I8AAkezAAJIKAMAARRdJwAC0MBzAALQ9gcAAtDTAS4/cug0AAAAAwABGZz4DTsAAtGPAALR0AADAAGAyYAPAAEi8ASbAALRjAYHAALR2wEuP3GADwABIvE7AALSawAC0owAAhhVgA8AAYfgBJsAAtJoBFsAAtLaCwAC0pcBLkaWGFcAASL5gA8AAYfhKwAC0xgEcwAC01BbAALTNLsAAX//AAJHswACSDblXAgACFsAAtOyDwAC048BLkdBhwABh/hbAALT0LrYjwACR7MAAkgoAwABFFz4CTsAAtSTAALUpAACClGADvlEBFsAAtTSBwAC1K8BLj9y56cAARidJwAC1SyIc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8QAcwADDsRbAAMOsFsAAw6SAwADDn8BLlyuWUsAARuuAvb0YSAEAARbAAMPCFsAAw7mAwADDtMBLlyulNMAARueAvcAAS90AwAD+jQAWwADD3xbAAMPXgMAAw9LAS5crllLAAEbrsza9RD4DPRzAAMQ7FsAAxC+AwADEKsBLlyu0wcAARfK6bwAAAADAAHiKPRzAAMRqFsAAxF6AwADEWcBLlyu0wcAARfK6bgAAAADAAHiIPRzAAMSMgMAAxIfAS5cruewAAAAAwABGLj9KwADE0QGAwADE2MBLlysGwACSG4GYwADE5cAAxPLAAMiFAADAAGA2wACR7AAAAAEDwADFAcAAyIUAAAADAwPAAMUWAAAAhY9gA8AARecAwADFLAAAAISbYAO9TgDAAMVAAAAAg/NgA8AARecAAGADwABF5wE+BE7AAMVRwADFXgAArK9gA8AA+tEBIRzAAMVuFsAAxWEutiPAAJHswACSCrf3AQABgcAAxYDAS54lAMAATb5OwADFmwAAAIKUYAO+UQBJwADFpRzAAMW1FsAAxakuwABIUsAAkezAAJISs2wBAAEWwADFyYHAAMXDwEueJYUKvUoAwABqvz4BPYzAAMXiwEueix7AAMX+wAB9AgIAAhzAAMYoFsAAxhwuwABIUsAAkezAAJISwABMPAEAAYHAAMZDwEueJQDAAGrSFsAAxksutiPAAJHswACSCgA+AT2MwADHscBLnosewADHzcAAfP8CAAKBwADH7sBLniUWwADH9S60lsAAkezAAJIHAErAAMgaAR/AAMglwABHYQUABIHAAMgvwEueJYDAAMg2wEueFYTAAMhAwEueixbAAMhLgsAAyEbAS54zpaTAAEXqAayvg8AAyHTAS55OBsAAkjyBmMAAyIrAAMijwADSsgAAuQkBasAAyItgA8AA/eQCAAABA8AAyLvAANKyAAAAAQEBwADI0QAAAIPzYAPAAEcYAABgA8AARecBPg1JwADI3RbAAMjmgMAAyOHAS5/buknAAEbcPgJOwADJDsAAyRUAAMAAYA9gA8AARecBHMAAyRcuwABgFAEAAYDAAMktwEuf2wDAAJIkScAAyTohHMAAyUWBwADJPsBLoBFIAQABgMAAyUjAS5/bAMAA/fFKwADJTgGBwADJVcBLoBE/P07AAMl1wADJfgAAhY9gA8AARecBHMAAyYWAwADJgMBLn9u59gEAARbAAMmVLrYjwACR7MAAkgoAwABG807AAMm0wADJugAAhJtgA71OARzAAMm8LsAAYDACAAKAwADJ3sBLn9uBwADJ5MBLoHkAwACSN0nAAMnzIhzAAMn9gsAAyffAS6C1SAEAASsAwAD98QEhFsAAyg+CwADKCcBLoLWsr71HSsAAyh0BgMAAyiTAS5/bP07AAMrCwADKyAAAgJZgA8AARecBFsAAytYWwADKz4DAAMrKwEuf24JVwABF7YHqwAD9IE/AAMrhwADK7gAAAcAAYDdhAwBgA8AARecAA8AAyvnAAMx+AAAAAAAAAGADwABF5wE+AUnAAMsEFsAAyzccwADLIxbAAMsVFsAAywgutiPAAJHswACSCrSxwABNnrSyAQABJsAAyzABgsAAyzDAS6C1YAPAAHXtAMAAbnfAAEjgwABugT4CPTUAAAABAGADwACrBQEWwADLSy7AAF/+wACR7MAAkgwjHMAAy1GFAMBLoedIAQABKwAAKxzAAMtRhQDAS6HnwABgOAEAAYDAAMtiwEuf2wDAAKsPAVxKwADLcQGDwADLeMBLoS0+A07AAMugwADLpwAAgXZgA8AAR2IBNcAAy7kAAAEAYAPAAEdiAR/AAMu5wABHbQQABBbAAMvDLsAAU/7AAJHswACSEYLAAMvZwEugtYHAAMvgwEugeYPAAMvqwEuhLQA1AAAAAQBbARfAAMwBhcAAy//AS6JhpaQWwADMGoDAAMwVwEuf26WkwABF6sAAReqFAMBLomE9NQAAAAEAYAPAAKsFARbAAMw1LsAAX/7AAJHswACSDCMcwADMO4YAwEui4kgBAAErAAArHMAAzDuGAMBLouLAAGA4AgACgMAAzEzAS5/bhcAAzFLAS6JNAMAAqw8BXErAAMxjAYXAAMxqwEuiTUnAAMyFIRbAAMzYHMAAzLAWwADMlxbAAMyKLrYjwACR7MAAkgqlUMAATauz3gEAAYLAAMzIwEugtQDAAG7PgyGBaj4BSsAAzOsBHMAAzP2EwADM8sBLoWQgAAAAAAA/TsAAzRXAAM0fAADAAFitYAPAAGLWARzAAM1BFsAAzS4WwADNIS62I8AAkezAAJIKpTvAAE2is30BAAGCwADNTsBLoLUAu31JwADNWxbAAM1oFsAAzV8usmTAAJHswACSCIK4gVY+BE7AAM2dwADNqQAArktgA75UARzAAM3KFsAAzbUuwABT/sAAkezAAJIRta8CAAGFwADN38BLo64BhngpvnhJwADOASIWwADOEYbAAM4FwEukFbWevlcAFsAAzpIcwADOTBbAAM4oLsAAU/7AAJHswACSEbX+AgACFsAAzleDwADOUcBLoS256cAARicWwADOdIbAAM5owEukFbWdvlYAvse0rb4/PgFKwADOrgEcwADOwITAAM61wEuhZCAAAAAAAD89F8AAz+KAwADP3cBLn9u6XynAAEcaSsAAz/sBgMAA0ALAS5/bP0nAANATIiIiIRbAANAihcAA0BjAS6OusuDAAGLZARbAANBChcAA0DjAS6Ouo+vAAGLgARbAANBwFsAA0GaFwADQXMBLo660fsAAYti6FcAAYt8BFsAA0J4WwADQlIXAANCKwEujrrR+wABi2LoXwABi4j4CPRfAANGigMAA0Z3AS5/bul8pwABHGkrAANG7AYDAANHCwEuf2z9OwADR38AA0eUAAIPbYAPAAEXnARzAANH1g8AA0e/AS6EtuhQDAAMWwADSAS62I8AAkezAAJIKhcAA0g/AS6OuasAA0ipgA8AA/JcJAMAARnFJwADSOyEcwADSRYbAANI/wEullkgBAAGDwADSSMBLoS0AwAD98T4CPRzAANJiFsAA0lyAwADSV8BLn9uaMsAARe+5oQIAAoDAANJswEuf24bAANJywEullgDAAEXVPYvAANKAwEuhLYbAANKIwEullj9KwADSmgEcwADSrITAANKhwEuhZCAAAAAAAAbAAJI9gZjAANK3wADS0MAA1kkAALkGAWrAANK4YAPAAP3kAgAAAQPAANLiwADWSQAAAAEBAcAA0vIAAACD82ADwABG+gAAYAPAAEXnAT4DTsAA0wvAANMTAAC0xmADwABF5wEcwADTGoDAANMVwEumqLn2AQABFsAA0youtiPAAJHswACSCgDAAEbzScAA06clwADTs4HAANOrwEumw2ADwABIvD4CTsAA09fAANPgAACGFWADwABhQgEWwADT6hTAANPiwEumwwEBYAPAAEi8hhXAAEi+ScAA0/olwADUB4LAANP+wEunGmADwABhZz4DTsAA1DrAANRBAACCSWADvVEBFsAA1EwUwADUQ8BLpxoCAWADwABhZ5ZSwABhaU7AANRwwADUgwAAtRdgA714ARbAANSMg8AA1IXAS6dltRe9VEnAANSoHMAA1M0WwADUv4TAANSswEunk7UlvYlIAQABFsAA1N4WwADU1YDAANTQwEumqKU0wABG57UlwABL1ADAAGlAPgJAIRbAANVPgMAA1UrAS6aouknAAEbcwADVScAA1WAASsAA1W0BNcAA1XgAAAEAYAPAAEciAR/AANV4wABHLgQABIPAANWGwEunZRzAANWiHMAA1ZoWwADVk4DAANWOwEumqIJVwABF7ZZbAQABlADAAP0TgK0AAAAAwAD9DxbAANW/gMAA1brAS6aouenAAEYnFsAA1dWAwADV0MBLpqiFLMAARvwANQAAAAEAWwEXwADV8oXAANXwwEuoIqWkFsAA1guAwADWBsBLpqilpMAARerAAEXqhQDAS6giPz8/SsAA1joBgMAA1kHAS6aoBsAAkj6BmMAA1k7AANZnwADfqAAAuQoBasAA1k9gA8AA/eQCAAABA8AA1njAAN+oAAAAAQEBwADWhwAAAIPzYAPAAEciAABgA8AARecBPgQ9HMAA1pMuwABgDgEAAYDAANawwEupIADAAJIeTsAA1sjAANbQAACWUmADvTwBFsAA1teAwADW0sBLqSCWUsAARyRJwADW5RzAANbxgcAA1unAS6lXSAEAARbAANcDFsAA1vQus7fAAJIPsYu4yADAAP3xPgFJwADXHhzAANc1FsAA1y4WwADXJ4DAANciwEupIIJVwABF7WHAAP1rSAEAAZUAwAD9uz4BSsAA10UBNcAA11AAAAEAYAPAAEkHAR/AANdQwABJEQQABBzAANdyFsAA12yAwADXZ8BLqSCCVcAARe1LAQABkwDAAP1KHMAA14IWwADXfIDAANd3wEupIIJVwABF7UsBAAGUAMAA/UorFsAA16IWwADXjS7AAFP+wACR7MAAkhGFtb5hADUAAAABAFsBF8AA17iCwADXtsBLqeqlpBbAANfRgMAA18zAS6kgpaTAAEXqwABF6oIAwEup6j9JwADX9xzAANgDgcAA1/vAS6lXSAEAARbAANgVFsAA2AYus7fAAJIPsf25OgDAAP3xPgFJwADYMRzAANhIFsAA2EEWwADYOoDAANg1wEupIIJVwABF7WHAAP1rSAEAAZUAwAD9uz4BSsAA2FgBHMAA2F8uwABgOQEAAYDAANhzwEupIADAAJI/P0nAANiNHMAA2JmBwADYkcBLqVdIAQABFsAA2KsWwADYnC6zt8AAkg+x9rkzAMAA/fE+AUnAANjVHMAA2OwWwADY5RbAANjegMAA2NnAS6kgglXAAEXtYcAA/WtIAQABlQDAAP27PgJOwADZCcAA2RcAAMAAYDpgA8AARecBHMAA2SQWwADZHoDAANkZwEupIIJVwABF7UsBAAGTAMAA/UpJwADZMSXAANlDgsAA2TXAS6uQYAPAAEi8PgJOwADZZ8AA2XAAAIYVYAPAAEi8ARTAANlywEurkAIBYAPAAEi8ScAA2YsWwADZoRbAANmYg8AA2Y/AS6vkhhXAAEi+usjAAGFHSsAA2akBg8AA2bDAS6vkPz8/ScAA2dccwADZ6hbAANnbLrO3wACSD7JZAQABgcAA2fXAS6lXALmoPgFJwADaBxzAANoeFsAA2hcWwADaEIDAANoLwEupIIJVwABF7WHAAP1rSAEAAZQAwAD9uz4CTsAA2jvAANpEAAAfYAPAAEXnARzAANpRFsAA2kuAwADaRsBLqSCCVcAARe1LAQABkwDAAP1KScAA2l4WwADaixzAANprgsAA2mLAS6yctc0BAAEWwADadS7AAFP+wACR7MAAkhEAwABGQrStvj8+AUrAANqpAYLAANqwwEusnD8/ScAA2tccwADa6hbAANrbLrO3wACSD7JaAQABgcAA2vXAS6lXALmpPgFJwADbBxzAANseFsAA2xcWwADbEIDAANsLwEupIIJVwABF7WHAAP1rSAEAAZQAwAD9uz4CTsAA2zvAANtEAAAfYAPAAEXnARzAANtRFsAA20uAwADbRsBLqSCCVcAARe1LAQABkwDAAP1KScAA214WwADbihzAANtrgsAA22LAS616tdMBAAEWwADbdC7AAFP+wACR7MAAkhEAwABGSLStvj8+AUrAANuoAYLAANuvwEutej8/ScAA29YcwADb6RbAANvaLrO3wACSD7JbAQABgcAA2/fAS6lXALmqPgFJwADcCRzAANwgFsAA3BkWwADcEoDAANwNwEupIIJVwABF7WHAAP1rSAEAAZQAwAD9uz4CTsAA3D3AANxGAAAfYAPAAEXnARzAANxTFsAA3E2AwADcSMBLqSCCVcAARe1LAQABkwDAAP1KScAA3GAWwADcjBzAANxt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uIcAwEvN+YP9AQABFsABE8oWwAETwC7AAElTwACR7MAAkguvt7bIAMAA/QkBXEnAARPxFsABE/wUwAET9cBLx+IDAWADwABGw7pBwABGxj4CTsABFCDAARQpAADAAEHSYAPAAEXnARbAARQyFMABFCvAS8fiAwFgA8AARsO6Q8AARs5JwAEURCXAARRRh8ABFEjAS86SYAPAAEtDPgI9HMABFIuGwAEUdcBLzdMgAAAAAABKwAEUmQEcwAEUsYXAARSgwEvJyyACAAIWwAEUyBTAARTBwEvH4gMBYAPAAEbDllLAAEbFNMABFNEDwAEU0cABFPYAAAABAQHAARTWAAAAJ2ADwAD8lwAAYAPAAEXnAUrAARTgARzAARTvFsABFOkUwAEU4MBLzpIHAWADwABLQ4JVwABF7UsBAAEUwAEU8MBLzzsIAADAAP1KAAA/PgI9HMABFgSGwAEV7sBLzdMgAAAAAABKwAEWEAEcwAEWKIXAARYXwEvJyyACAAIWwAEWPRTAARY2wEvH4gMBYAPAAEbDllLAAEbFNMABFqADwAEWoMABFs8AAAABAQHAARalAAAAYmADwAD8lwAAYAPAAEi8AUrAARarARzAARayFsABFqsuwABf/8AAkezAAJINuV0BAAEWwAEWwi62I8AAkezAAJIKAMAARR0AAD9JwAEYJRbAARgugMABGCnAS8dkulHAAEspPgJJwAEYtCEcwAEYuS7AAGA/AQABgsABGODAS8enAMAAkkM+AUrAARj5AR/AARkEwABLNgMAA4HAARk1wEvHf4PAARk/wEvH4hbAARlMgMABGUfAS8dkuenAAEYnAD9JwAEamBbAARrtHMABGrwWwAEanC7AAFP+wACR7MAAkhG1zAEAARbAARrRg8ABGsrAS8fiuenAAEYnAL6WtZO+QT4BSsABGwoBH8ABGxXAAEs2AwADgcABG0bAS8d/g8ABG1DAS8fiFsABG12AwAEbWMBLx2S56cAARicAPz9KwAEbggGAwAEbicBLx2QGwACSRoGYwAEblsABG6/AARxSAAC5OQFqwAEbl2ADwAD95AIAAAEDwAEbvMABHFIAAAABAQHAARvHAAAAg/NgA8AAS6gAAGADwABF5wE+AknAARvTHsABG+LAAIYqAgACFsABG/KAwAEb7cBL0Xu7BMAAS6sWwAEcB4DAARwCwEvRe7uEwABLqgA+AUrAARweARbAARwxFsABHCqAwAEcJcBL0XuCVcAARe2Aw8AA/SE/SsABHEMBgMABHErAS9F7BsAAkkeBmMABHFfAARxwwAEfbgAAuTQBasABHFhgA8AA/eQCAAABA8ABHHzAAR9uAAAAAQEBwAEchgAAAIPzYAPAAEtiAABgA8AARecBPgRJwAEckhzAARybgMABHJbAS9I8ux0BAAEWwAEcpy62I8AAkezAAJIKAMAAS3BKwAEctgEWwAEcwoDAARy9wEvSPLmpwABLaT9OwAEdG8ABHSUAALt0YAPAAEXnARbAAR0sgMABHSfAS9I8u3TAAEtoScABHTslwAEdSYHAAR0/wEvSn2ADwABLlD4DTsABHWjAAR1xAAC7bWADwABi1gEWwAEdfRTAAR1zwEvSnwEBYAPAAEuUuwTAAEuWTsABHaDAAR2xAADAAGBLYAO9PAEewAEdxcAArncDAAOCwAEd3MBL0uIWwAEd64DAAR3mwEvSPIXtwABLZhbAAR4FFsABHfgutiPAAJHswACSCrO3wABNpABJwAEeHCEcwAEeMYPAAR4gwEvTEkgBAAErAMAA/fE+Ak7AAR5fwAEeawAArktgA75UARzAAR6OFsABHnkuwABT/sAAkezAAJIRta8CAAGCwAEeo8BL0uIBhngpvnhKwAEexgEfwAEezcAAS4UGAAYWwAEe4YDAAR7cwEvSPLmpwABLaYLAAR7vwEvS4oTAAR75wEvTixbAAR8XgMABHxLAS9I8he3AAEtmg8ABHyTAS9MSFsABHzuAwAEfNsBL0jy56cAARicAPz9KwAEfXwGAwAEfZsBL0jwGwACSSIGYwAEfc8ABH4zAASALAAC5NQFqwAEfdGADwAD95AIAAAEDwAEfnsABIAsAAAABAQHAAR+uAAAAg/NgA8AAS3QAAGADwABF5wE+AknAAR+6HMABH8OAwAEfvsBL1Hi7HQEAARbAAR/PLrYjwACR7MAAkgoAwABLf0rAAR/eARbAAR/qgMABH+XAS9R4uanAAEt7P0rAAR/8AYDAASADwEvUeAbAAJJJgZjAASAQwAEgKcABIn8AALkzAWrAASARYAPAAP3kAgAAAQPAASA0wAEifwAAAAEBAcABID0AAACD82ADwABLUwAAYAPAAEXnAT4ITsABIGTAASB5AAC7cmADvlQBFsABIICAwAEge8BL1R+7csAAS1VOwAEgp8ABILQAALmpYAPAAEXnARbAASC7gMABILbAS9UfuanAAEtZTsABINvAASDlAAC7FmADvlEBFsABIPSCwAEg58BL1WC56cAARidOwAEhF8ABIRwAALX+YAO+NwEcwAEhMxbAASEeLsAAU/7AAJHswACSEbX+AgACg8ABIUHAS9WIFsABIWGBwAEhTMBL1Tq1nb5WAL7HScABIXYWwAEhf4TAASF6wEvVrrWTvkE+AUrAASGaARzAASGoFsABIaEuwABf/8AAkezAAJINuVwCAAIqFsABIb8utiPAAJHswACSCgDAAEUcP0nAASHYIRbAASHygcABId3AS9U6tZ6+V0rAASH9AYDAASIEwEvVHz9JwAEiDxbAASIYhMABIhPAS9WutK2+Pz4BSsABIjIBHMABIkAWwAEiOS7AAF//wACR7MAAkg25XAIAAikWwAEiVi62I8AAkezAAJIKAMAARRw/SsABInABgMABInfAS9UfBsAAkkqBmMABIoTAASKdwAEoNgAAuTgBasABIoVgA8AA/eQCAAABA8ABIrXAASg2AAAAAQEBwAEiywAAAIPzYAPAAEufAABgA8AARecBPgROwAEi5MABIu0AAJWjYAPAAEXnARbAASL7FsABIvSAwAEi78BL1wqCVcAARe2Aw8AA/SFJwAEl5iXAASXzgcABJerAS9clYAPAAEbDPgJJwAEmBxbAASYUFMABJgvAS9clAQFgA8AARsO6QcAARsY+Aj01AAAAAQBdA8AA/TsBYAPAAGL9ARbAASY0FMABJivAS9clAQFgA8AARsO6QsAARscjHMABJkeCAMBL15dIAQABKwAAKxzAASZHggDAS9eXg/0BAAEWwAEmWRbAASZPLsAASVPAAJHswACSC6+3tsgAwAD9CQFcSsABJnkBFsABJpAWwAEmiRTAASaAwEvXJQEBYAPAAEbDglXAAEXtgerAAP0gP0rAASakAYDAASarwEvXCj9JwAEmvCXAASbJgcABJsDAS9clYAPAAEi8PgNOwAEm7cABJvsAAMAATZFgA8AAYUIBFsABJwYUwAEm/cBL1yUBAWADwABIvIYVwABIvknAAScWJcABJyiCwAEnGsBL2GZgA8AAYpM+Aj0cwAEnWRbAASdPLsAASVPAAJHswACSC6+3AQABFsABJ30UwAEnb8BL2GYCAWADwABik4KUwABiCwC2yErAASeMAR/AASeTwABLngIAAhbAASerFMABJ53AS9hmAgFgA8AAYpOClMAAYgsWwAEnuhTAASexwEvXJQEBYAPAAEi8uenAAEYnAD9KwAEn2gGAwAEn4cBL1wo/SsABKCcBgMABKC7AS9cKAABLLzUASy92AEsvvQBLMAYASzBzAEszgQBLPOcASz27AEs+fABLP0sASz+YAEtAigBLQb0AS0OaAEtFgQBLRl4AS0edAEtMhABLVcUAS1uFAEtmvwBLbLkAS25IAEtv6gBLccgAS3OqAEt1AgBLdXwAS3tqAEt8NwBLfUwAS4A4AEuHkwBLilUAS4r8AEuLowBLjEYAS41zAEuPiwBLlGsAS5b1AEud5QBLn6UAS6ZyAEuo6gBLsN8AS7PbAEu5UwBLwDwAS8CtAEvByQBLxy4AS9FFAEvSBgBL1EIAS9TpAEvW1ABL2VkAAAA5AsAAkk2BmMABKDvAAShBwAE13APAAGBMAAABYAHAAEUmAAFgAcAAke8FBMAAkk+BmMABKKDAASitCcAAX/QAXQPAAP4vAWADwABF5wAEwACSUIGYwAEovMABKMsJgs0AYAPAAPrRAATAAJJRgZjAASjiwAEo7QmlIgBgA8AATZwABMAAklKBmMABKQrAASkjCYC9AWrAASjyYAPAAP3kAmADwAD+fgEnwABgTATAAJJTgZjAASkuwAEpMxikYQBgA8AARQIBKwEFwACSX4GYwAEpOMABKTjAASmEAAAAA8ABKUjAASmEAAAAAwMDwAEpTgAABILNYAPAAPrRAMABKWQAAASlImADwABNnADAASl2AAAEwABf9F0DwAD+LwFgA8AARecAAGADwACSTQE/BAgBwACSUIAAwEvbMwgBwACSUYEAwEvbQwgBwACST4IAwEvbUwkBwAEpOMAARZIAAAAABwbAAJJWgZjAASmJwAEpocABKd4BAMAAU/7AAJHsAAAAAQPAASm2wAEp3gAAAAAAAABgA75cAUrAASm/ARbAASnLFsABKb8upSLAAJJRsSrAAE2lBsAAkliBmMABKePAASn0wAErIwAAuWkBasABKeRgA8AA/eQCAAABA8ABKf7AASsjAAAAAQEBwAEqBgAAAKRhYAPAAEUCAABcAT4DPRfAASoYLqRhgMABKiDAS9wywACSU0nAASrkFsABKugugs3AAJJQSsABKvkAPz0cwAErBi65PAEAAYDAASsZwEvcMgDAAETtBsAAklmBmMABKyjAASs5wAEsKAAAuT4BasABKylgA8AA/eQCAAABA8ABK0jAASwoAAAAAQEBwAErVQAAAJoyYAPAAEWwAABcAT4CTsABK2/AASt7AAC5RmADwABF5wEWwAErg4DAASt9wEvcxYMewABFokPAASuOIRzAASuhgcABK5XAS9zbSAEAASsAwAD98T4DTsABK7/AASvEAACDtWADwABF5wEWwAEr0oHAASvGwEvc24O1wABF8T2JwAEr3sBL3NsmwAEr3gEcwAEr+IHAASvswEvc24RSAQABLgDAAEZZYAPAAEXnPYnAASwMwEvc24LAASwawEvdIwbAAJJagZjAASwtwAEsOsABMdYAAMAAYE0AAAABA8ABLEvAATHWAAAAAwMDwAEsYAAAAMAAYE5gA8AARecAwAEseAAAAKAYYAPAAEXnAMABLIwAAADAAGBPYAPAAEXnAABgA8AARqEBPghOwAEsrMABLLMAAGFgA8AAR24BH8ABLLnAAEd9AwACgcABLM3AS93KFsABLPQWwAEs4BbAASzULqUiwACSUbEqwABNpbWnvm8BrK8hHsABLRzAAJHuAgACFsABLTCBwAEtKsBL3cq56cAARicWwAEtQS6lIsAAklEAPRzAAS1kFsABLV6AwAEtVMBL3biaMsAARe+5oQIAAoDAAS1uwEvduIPAAS15wEvd9wDAAEXVTsABLZXAAS2aAACClGADvlEBIxbAAS3aHMABLbKCwAEtpMBL3dq10AEAARbAAS3ELsAAU/7AAJHswACSVgDAAEZFtK2+PxbAAS4HgsABLfnAS93auenAAEYnFsABLkUWwAEuMRbAAS4lLqUiwACSUbEqwABNpbWnvm8BYAO+UU7AAS5nwAEubQAAo/FgA8AARqEBNcABLnMAAAEAYAPAAEahAR/AAS5zwABGtQQABILAAS6AwEvd2oPAAS6PwEvd94HAAS6XwEvdyoTAAS6ewEvepgA1AAAAAQBbARfAAS6shcABLqrAS985paQWwAEuyoDAAS7AwEvduKWkwABF6sAAReqFAMBL3zk9HMABLvEWwAEu64DAAS7hwEvduJoywABF77mhAgACgMABLvvAS924hcABLwbAS98lAMAARdVJwAExEBbAATFCHMABMSKCwAExFMBL3dq1zQEAARbAATEsLsAAU/7AAJHswACSVgDAAEZCtZS+Qj4BPRzAATFsgsABMV7AS93augYCAAKAwAExh8BL3biFwAExksBL3yUAwABGYD89HMABMbIWwAExpC7AAF/0wACST1YBAAGAwAExtsBL3bgAwAD+PErAATHGAYXAATHNwEvfJQbAAJJbgZjAATHbwAEx7MABMpYAALkDAWrAATHcYAPAAP3kAgAAAQPAATH2wAEylgAAAAEBAcABMf4AAACD82ADwABJpwAAXAE+A0nAATIKHMABMhwWwAEyDi7AAF/0wACST4McAQABgMABMiXAS+C2AMAA/jtKwAEyLAA/TsABMkXAATJLAAAnYAPAAEXnARbAATJSgMABMk3AS+C2J8AASbU9icABMl3AS+D+HMABMmUuwABgTQMAA4DAATJ3wEvgthbAATKCgMABMn3AS+C2hY/AAEm0gcABMozAS+D+AMAAkloGwACSXIGYwAEym8ABMqzAATNiAAC5BAFqwAEynGADwAD95AIAAAEDwAEyvMABM2IAAAABAQHAATLKAAAAg/NgA8AASbkAAFwBPgNJwAEy1hzAATLoFsABMtouwABf9MAAkk+DHAEAAYDAATLxwEvhmwDAAP47SsABMvgAP07AATMRwAEzFwAAJ2ADwABF5wEWwAEzHoDAATMZwEvhmyfAAEnEPYnAATMpwEvh4xzAATMxLsAAYE0DAAOAwAEzQ8BL4ZsWwAEzToDAATNJwEvhm4WPwABJw4HAATNYwEvh4wDAAJJaBsAAkl2BmMABM2fAATN4wAE12gAAuQgBasABM2hgA8AA/eQCAAABA8ABM5DAATXaAAAAAQEBwAEzpgAAAIPzYAPAAEcBAABcAT4ITsABM7/AATPHAACWUmADvTwBFsABM86AwAEzycBL4oCWUsAARutJwAEz2xbAATPkgMABM9/AS+KAuknAAEbcSsABM/cAP0nAATQDIRzAATQPgcABNAfAS+KWSAEAARbAATQtFsABNB4WwAE0Ei6lIsAAklGzt8AATaSyUbmvAMAA/fFKwAE0QAA/ScABNEwcwAE0XhbAATRQLsAAX/TAAJJPgxwBAAGAwAE0Z8BL4oAAwAD+O0rAATRuAD9OwAE09sABNPwAAKPxYAPAAEahARzAATT+LsAAYE0DAAOAwAE1GcBL4oAWwAE1JIDAATUfwEvigIWPwABG7hzAATU0FsABNS4upGHAAJJTuVcCAAKTFsABNUYupSLAAJJRAMAARRcAwACSWk7AATVmwAE1bwAAwABgUGADwABF5wEcwAE1dxbAATVxLqRhwACSU7lXAgACHMABNYaUgcYAAAAAwAD8uhbAATWKLqUiwACSUQDAAEUXPRzAATWpFsABNaKCwAE1nMBL41KCVcAARe1WAQABg8ABNa3AS+O9AMAA/Uw9HMABNcwWwAE1xYPAATW8wEvjvbmEwABF7lYBAAGCwAE10MBL41IAwAD9TAAAS9upAEvb/ABL3I8AS92MAEvggABL4WUAS+JKAEvkYQAAAAcCwACSYIGYwAE138ABNeXAAWWEA8AAYFEAAAFgAcAAROsAAWABwACR7wgEwACSYoGYwAE2S8ABNmkJgL0BasABNjNgA8AA/eQCYAPAAP5+ASfAAGBRBMAAkmOBmMABNoHAATaMCaUiAGADwABNnAAEwACSZIGYwAE2p8ABNrAJwABGBQBgA8AAkfYABMAAkmaBmMABNrvAATbBGMAAX//AAJHsAGADwABFAgErBMAAkmeBmMABNtrAATbiGJ0aAGADwACSgQErBMAAkmiBmMABNv7AATdAGMAAYFIAXQPAAP1tAmADwABF52ADwAD60QEfwAE3JJSZAAJgA8AARedgA8AA+tEAAATAAJJpgZjAATdJwAE3ZhjAAF/6AGADwAD60QEqBMAAkmqBmMABOA7AATghGMAAYFMAYAPAAEXnASsBBcAAkoCBmMABN2vAATdrwAE3ogAAAAPAATeAwAE3ogAAAAICAsABN4YAAASlImADwABNnADAATeYAAAEwABGBWADwACR9gAAYAPAAJJgAT8DCAHAAJJjgADAS+XtCAHAAJJkgQDAS+X9CQHAATdrwABE8QAAAAARBsAAkm2BmMABN6fAATe/wAE3/AEAwABT/sAAkewAAAABA8ABN9TAATf8AAAAAAAAAGADvlwBSsABN90BFsABN+kWwAE33S6lIsAAkmOxKsAATaUGwACSboGYwAE4JcABODbAATlsAQDAAGBUAAAAAQPAAThFwAE5bAAAAAAAAABgA8AARecBPgJJwAE4SxzAAThjFsABOE8uwABgU8AAkmpIAQABKwDAAP3xPgJOwAE4yMABONEAAIYVYAPAAGFCAWrAATjZYAPAAGKHwAD5ND0XwAE4+y7AAGBTHMABOSAWwAE5GhbAATkRLp0awACSZ6RhwACSg6rwAgACgMABOSzAS+buFsABOTYupSLAAJJjAMAARRXAAJJqP0rAATlOARbAATlVLsAAYFPAAJJqBsAAknCBmMABOfTAATn5wAE6+AAAwABgVQAAAAEDwAE6EMABOvgAAAACAgLAAToeAAAAwABVNWADwABHuADAATo0AAAAhY9gA8AARecAAGADwAD60QE+BEnAATpEHMABOl4WwAE6VxbAATpQgMABOkjAS+ebglXAAEXtYcAA/WtjAQABlADAAP3FSsABOmMBKj9JwAE6dSEcwAE6jhbAATqIFsABOoGAwAE6ecBL55uCVcAARe2DHsAA/R9IAQABgcABOpHAS+etAMAA/fFKwAE6mwEqP0nAATqtFsABOscWwAE6uYDAATqxwEvnm7qNwABHvcAASkjAAGcuSsABOtcBKT9KwAE66AEqBsAAknGBmMABO6/AATu0wAFBngAAwABgVgAAAAEDwAE7y8ABQZ4AAAABAQHAATvZAAAAuUZgA8AARecAAGADwAD60QE+BE7AATv5wAE8AgAAhY9gA8AARecBHMABPBCAwAE8BMBL6Ka59gEAARbAATwgLqUiwACSYwDAAEZRTsABPD/AATxHAABeYAPAAEXnARbAATxVgMABPEnAS+img7XAAEXxRMABPF8+BknAATxqIhzAATyUHMABPHeCwAE8b8BL6Pm59gEAARbAATyHLqUiwACSYwDAAEZRSAEAAYHAATyXwEvowQDAAP3xABzAATy2gsABPK7AS+j5ufEBAAEWwAE8vy7AAFP+wACR7MAAkm0AwABGMj4BSsABPOABKT9JwAE8+yIlwAE9B4LAATz/wEvo+WADwABHuAAcwAE9JC7AAGBVAgACFMABPTzAS+j5AgFgA8AAR7iBwAE9RcBL6MEAwACScD4BSsABPVoBKT9JwAE9dSIcwAE9gYLAAT15wEvo+bnxAQABFsABPYouwABT/sAAkezAAJJtAMAARjIBHMABPcEWwAE9tYLAAT2twEvo+bTBwABF8rnvAAAAAMAAeIU+AUrAAT3dASo/TsABPgbAAT4LAACDtWADwABF5wEW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r8pJwAGnKyEcwAGnOYbAAacvwEw+aEgBAAGEwAGnPMBMPdcAwAD98T4DPRzAAadjhcABp1nATD5KuacCAAKGwAGnecBMPmiEwAGnhMBMPdcAwABF2j0cwAGnqoXAAaegwEw+SoReAQABhsABp7HATD5oAMAARdY9F8ABp8suwABf+SnAAJLAPz8/ScABqXwhHMABqZoWwAGpkxbAAamGgMABqYDATDtAuWDAAEW8YcAA/WtIAQABlADAAP27SsABqaAAP07AAao2wAGqOwAAqp1gA8AAr8ABHMABqkMWwAGqPS4pwACSwUsBAAEWwAGqSoDAAapEwEw7QLQSwABFsgDAAP1KTsABqmDAAapsAAC5RmADwABF5wEWwAGqdIDAAapuwEw7QIMewABFok7AAaqDwAGqiQAAhINgA8AA/JcBk0PAAaqSIRzAAaqlg8ABqpnATD/GSAEAASsAwAD98UE+DE7AAaq6wAGqxwAAwABSl2ADwAD8lwEewAGq1cAAeJ0BAAGEwAGq68BMP+4APYzAAar5wEw/7hzAAar/hMABqvnATD/ugQYBAAEcwAGrGhbAAasOg8ABqwLATD/GtMHAAEXywABSjQAAAADAAHiDAMAA/LBOwAGrQcABq0kAAF5gA8AARecBg8ABq0vATD/GPYvAAatewEw/xhbAAat4g8ABq2zATD/Gg7XAAEXxScABq4QiIRzAAauRhsABq4nATECXuesAAAAAwABGLQEhFsABq6aGwAGrnsBMQJe57cAARipCwAGrsQA/ScABrKEcwAGsrYbAAaylwExAl7nxAQABFsABrLYuwABT/sAAkezAAJK+AMAARjJCwAGszQA/ScABrN0cwAGs9RbAAazphsABrOHATECXtMHAAEXywABSlgEAAYXAAaz/wExAJADAAHieQsABrQ4AP07AAa0kwAGtLwAAwABgi2ADwAD60QEpQUbAAa09wAGtbsABrVUAAAGBe2ADwABF5wAWwAGtZobAAa1ewExAl4JVwABF7T4BScABrXgcwAGtiBbAAa2CFMABrXzATEGdCACaMsAARe9IAQABgMABrYvATDtAAMAA/fE+Aj2PwAGtnsBMQX0qQsABrbwBP0nAAa5SIYfAAa5XwExBfULAAa5jAD9OwAGugcABrooAAIO+YAPAAEXnARzAAa6RgsABrozATD+FlygB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wAHLdBbAActpHMABy2UWwAHLWYDAActTwExWrblgwABFvEsBAAGTAMAA/Uq5jsAARb1hwAD9a0gBAAGUAMAA/bs+AT0XwAHMjS7AAGCVHMABzKEWwAHMmS7AAGCWwACS30sBAAEWwAHMuBzAAcy0FsABzKiAwAHMosBMVq25YMAARbxLAQABkwDAAP1KtBLAAEWyAMAA/UrAAJLeScABzMgcwAHM5hbAAczfFsABzNKAwAHMzMBMVq25YMAARbxhwAD9a0gBAAGUAMAA/bs+AT0XwAHNYS7AAGCVHMABzZAcwAHNdRbAAc1tLsAAYJbAAJLfSwEAARbAAc2MHMABzYgWwAHNfIDAAc12wExWrblgwABFvEsBAAGTAMAA/Uq0EsAARbIAwAD9Sp7vAAAAAMAAky3AAJLePgI9F8ABzeMuwABglRzAAc33FsABze8uwABglsAAkt9LAQABFsABzg4cwAHOChbAAc3+gMABzfjATFatuWDAAEW8SwEAAZMAwAD9SrQSwABFsgDAAP1KwACS3kXAAc4ZAcABziLAAc4kAABiYAPAAPyXAZQBHMABziuBwAHOKcBMWPVjAQABFsABzkAWwAHOM4DAAc4twExWrblgwABFvGHAAP1rAMAA/cUBicABzkjATFj1HMABzkmBwAHOSMBMWPVkAQABlADAAP29PgE9F8ABzlcuwABglRzAAc5tFsABzmMuwABglcAAkt7AAGCXAwADHMABzpIWwAHOii7AAGCWwACS30sBAAEWwAHOqRzAAc6lFsABzpmAwAHOk8BMVq25YMAARbxLAQABgcABzqbATFj1AMAA/Uq0EsAARbIAwAD9SoDAAc6uwExWrYHAAc61wExY9QDAAJMswACS3j0cwAHO1BbAAc7MLsAAYJbAAJLfgL8CAAIWwAHO24DAAc7VwExWrbQSwABFshbAAc7hLsAAYJXAAJLeAMAA/UtOwAHO/cABzwkAALlGYAPAAEXnARbAAc8RgMABzwvATFatgx7AAEWiQ8ABzxwhHMABzy+BwAHPI8BMWjVIAQABKwDAAP3xPgNOwAHPTcABz1IAAIO1YAPAAEXnARbAAc9ggcABz1TATFo1g7XAAEXxPRzAAc94gcABz2zATFo1hFIBAAEuAMAARlk9icABz4zATFo1gsABz5rATFp9BsAAkueBmMABz63AAc+y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gMAATLLATQN6hiwBAAEuAMAAk0kGwACUooCjwABM2MAATNrAAE06AACFhQAAAAEDwABM58AATToAAAIAAJclYAPAAP3kAVsAAIPZYAPAAP3kAVsCAgLAAEz7AAAAh0VdA8AAk9ECXwMAAF8DAQAAwABNBgAAAIWGXwMBAAAAXwMAAAFKwABNFAEcwABNHIDAAE0UwE0D9oYsAgACLoHAAE02wE0EDwDAAJPWBsAAlKOAo8AATT/AAE1EwABNbgAAhFMAAAABA8AATVTAAE1uAAABAACCemADwAD95AFbAQEBwABNZAAAAIdFXQPAAJNEAV8DAAAAAFwBPgAGwACUpICjwABNc8AATXjAAE2xAADAAGDPAAAAAQPAAE2MwABNsQAAAgAAlyVgA8AA/eQBWwAAg9lgA8AA/eQBWwICAsAATaAAAACHRV0DwACT0QJfAwAAXwMBAADAAE2rAAAAhYZfAwEAAABcAT4ABsAAlKaAo8AATbbAAE3FwABN5QAAsCXAAJMwAAAAAQPAAE3LwABN5QAAAAAAAABgA8AAlJ8BSsAATdEBH8AATdXAAJSoAAAAAAAATQNEAE0DtABNBEsATQSbAE0FCwBNBVQAAAAFAsAAlKmAo8AATerAAE3wwABRIwPAAGDTAAABYAHAAJSBAAADBMAAlKuAo8AAThrAAE4jCYXKAGADwACVmAAEwACUrICjwABON8AATjsJga8AYAPAAJSBAATAAJStgKPAAE5PwABOWAmFywBgA8AAlIEAAgXAAJS4gKPAAE5dwABOXcAATooAAAADwABOX8AATooAAAADAwPAAE5lAAAEhcpgA8AAlZgAwABOdQAABIGvYAPAAJSBAMAAToAAAASFy2ADwACUgQAAYAPAAJSpAT8ECAHAAJSrgADATQYJCAHAAJSsgQDATQYZCAHAAJStggDATQYpCQHAAE5dwACUhQAAAAAFwACUuYCjwABOj8AATo/AAE7bAMAAYNQAA8AATpjAAE7bAAAAAgICwABOngAABIXKYAPAAJWYAMAATq4AAASBr2ADwACUgQAAYAPAAJSpAT8ECAHAAJSrgADATQadCAHAAJSsgQDATQatCADAAJStH8AATsvAAJSoAAAAAAkBwABOj8AAlIUAAAAABgbAAJSvgKPAAE7gwABO6cAATxABAMAAYNUAAAABA8AATvHA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AIpqAAABAACCemADwAD95AFbAQEBwACKPwAAAIdFXQPAAJNEAV8DAAAAAFwBPgE9HMAAilcWwACKTi6w8cAAldiEUgEBXwMAAAGAwACKXsBNW5kAwACUaQbAAJXdgKPAAIpvwACKdMAAitQAAMAAYM8AAAABA8AAiojAAIrUAAACAACXJWADwAD95AFbAACD2WADwAD95AFbAgICwACKnAAAAIdFXQPAAJPRAl8DAABfAwEAAMAAiqcAAACFhl8DAQAAAFwBPgE9HMAAirsWwACKsi6w8cAAldiFhQICXwMAAF8DAQACgMAAisPATVwggcAAiszATVw5AMAAlGsGwACV34CjwACK2cAAiuXAAIsKAACwJcAAkzAAAAABA8AAiuvAAIsKAAAAAAAAAGADwACV1gFKwACK8QEfwACK9cAAleMBAAEWwACLAS6w8cAAldgABsAAleGAo8AAiw/AAIsXwACLMQEAsDEAAAABA8AAiyfAAIsxAAAAAAAAAGADwAD8lwFKwACLKgFqwACLKmADwAD8l8AAiqgAAE1aXABNWswATVtjAE1b3ABNXIIATVzXAE1dHgAAAAYCwACV5ICjwACLNsAAizzAAI9HA8AAYOgAAAFgAcAAlZgAAAMEwACV5oCjwACLb8AAi3sJsQoAYAPAAJWYAATAAJXngKPAAIuMwACLjgmquQBgA8AA/n4ABMAAleiAo8AAi8/AAIvUCYCWAGADwACVmAACBcAAlfSAo8AAjAjAAIwIwACMUgAAAAPAAIwSwACMUgAAAAICAsAAjBMAAACxClsAwACMIQAAAICWWwAAYAPAAJXkAT8BCgDAAIwvwACV9QMAAybAAIw4AYDAAIw4wE1d12ADwACVmCsmwACMTAGBwACMTMBNXeJgA8AAlZgABcAAlfWAo8AAjJnAAIyZwACM1AC7CAADwACMrMAAjNQAAAADAwPAAIyyAAAEsQpgA8AAlZgAwACMxQAABKq5YAPAAP5+AMAAjM4AAASAlmADwACVmAAAYAPAAJXkAT8ECAHAAJXmgADATV5WCAHAAJXngQDATV5mCAHAAJXoggDATV52CQHAAIyZwACVngAAAAAHBsAAleqAo8AAjNnAAIzhwACM/gEAsDEAAAABA8AAjPHAAIz+AAAAAAAAAGADwAD8lwFKwACM9AFqwACM9GADwAD8lxUG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wACwc8AAsH0JtRoAYAPAAPrRAATAAJargKPAALCOwACwmQmWyQBgA8AA/n4ABMAAlqyAo8AAsRbAALFkBpnfAGADwACWpgFqwACxKWADwACWpsAA7tQEwACWrYCjwACxg8AAsdIGmeEAYAPAAJamAWrAALGXYAPAAJamwADu8gTAAJaugKPAALHxwACyRAbAAGD4AGADwACWpgFqwACyCWADwACWpsAA7xMEwACWr4CjwACyY8AAsrUGwABg+QBgA8AAlqYBasAAsnpgA8AAlqbAAO80BMAAlrCAo8AAstvAALMGBikAXQPAAP07AWADwACWpgFqwACy5F0DwAD9OwFgA8AAlqbAAO9SAQXAAJa0gKPAALCewACwpMAAsPYBAAADwACwscAAsPYAAAAEAgLAALC3AAAEJ2ADwAD8lwDAALDDAAAElslgA8AA/n4AAsAAsNwAAASGP2ADwAD60QFqAGADwAD9oXnAALDqAAAEtRpgA8AA+tEBagBgA8AA/aF5YAPAAJamAT8FCAHAAJaogADATZT1CAHAAJargQDATZUECAHAAJapggDATZUVCAHAAJaqgwDATZUuCQHAALCkwAD9+gAAAAABBsAAlrKAo8AAswvAALMSwACzKwAAIwAAAAEDwACzGsAAsysAAAAAAAAAYAPAAP5+AUrAALMgARbAALMgLpbJwACWqwAATZWPAE2V0gAAAAECwACWtYCjwACzMMAAszbAALaxA8AAYPoAAAFgAcAAlZgAAAIEwACWt4CjwACzbcAAs3UJhY8AYAPAAJWYAATAAJa4gKPAALOKwACzkgmlNABgA8AAlZgAAwXAAJbDgKPAALOXwACzl8AAs8MAAAADwACzpcAAs8MAAAACAgLAALOrAAAEhY9gA8AAlZgAwACzugAABKU0YAPAAJWYAABgA8AAlrUBPwMIAcAAlreAAMBNll0IAcAAlriBAMBNlm0JAcAAs5fAAJWeAAAAAAXAAJbEgKPAALPIwACzyMAAtDIAhJsAA8AAs9zAALQyAAAAAgICwACz4gAABIWPYAPAAJWYAMAAs/MAAADAAEiIYAPAAP5+AABgA8AAlrUBPwMIAcAAlreAAMBNltMIAMAAlrgfwAC0FcAAlwsBAAEkwAC0MQMng7OBwAC0JsBNluMng7MACQHAALPIwACVngAAAAAFwACWxYCj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ANIwCYC9AGADwACVmAAEwACXUICjwADSRcAA0koJgJYAYAPAAJWYAAEFwACXWYCjwADST8AA0k/AANKsAAAAA8AA0lfAANKsAAAAAgICwADSXQAABIC9YAPAAJWYAMAA0mgAAASAlmADwACVmAAAYAPAAJdNAT8ECAHAAJdPgADATbq+CAHAAJdQgQDATbrODABAIiXAANKDgMAA0n7ATbq+YAPAAJboASXAANKWgMAA0pHATbq+YAPAAJbgwADSfsAA0qsACQHAANJPwACUdAAAAAAFBsAAl1KAo8AA0rHAANKzwADS8wAAhFIAAAABA8AA0rzAANLzAAABAACCemADwAD95AFbAQEBwADSzAAAAIdFXQPAAJNEAV8DAAAAAF8DAAABSsAA0tgBHMAA0uCAwADS2MBNu3uw6wEAAS4AwACTegbAAJdTgKPAANL4wADS+sAA01QAAIWFAAAAAQPAANMHwADTVAAAAgAAlyVgA8AA/eQBWwAAg9lgA8AA/eQBWwICAsAA0xsAAACHRV0DwACT0QJfAwAAXwMBAADAANMmAAAAhYZfAwEAAABfAwAAAUrAANM0ARzAANM8gMAA0zTATbv3sOsCAAIugcAA01DATbwQAMAAlAcGwACXVICjwADTWcAA017AANPAAACEUwAAAAEDwADTbsAA08AAAAEAAIJ6YAPAAP3kAVsBAQHAANN+AAAAh0VdA8AAk0QBXwMAAAAAXAE+Aj0cwADTkhbAANONLoC9wACXT4RSAQFfAwAAAYDAANOZwE28ggDAAJRpPRzAANOtFsAA06cugJbAAJdQhFIBAV8DAAABgMAA07TATbyCAMAAlGkGwACXVYCjwADTxcAA08rAANRHAADAAGDPAAAAAQPAANPewADURwAAAgAAlyVgA8AA/eQBWwAAg9lgA8AA/eQBWwICAsAA0/IAAACHRV0DwACT0QJfAwAAXwMBAADAANP9AAAAhYZfAwEAAABcAT4CPRzAANQNFsAA1AgugL3AAJdPhYUCAl8DAABfAwEAAoDAANQVwE29MoHAANQewE29SwDAAJRrPRzAANQuFsAA1CgugJbAAJdQhYUCAl8DAABfAwEAAoDAANQ2wE29MoHAANQ/wE29SwDAAJRrBsAAl1eAo8AA1EzAANRVwADUegAAsCXAAJMwAAAAAQPAANRbwADUegAA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AAABA8AA1QnAANUkAAAAAAAAAGADwAD60QFKwADVDAElwADVGxbAANUMLsAARw3AAJdcYAPAAP5+BsAAl42Ao8AA1SnAANUywADVVwEAv2cAAAABA8AA1T/AANVXAAAAAAAAAGADwAD60QFKwADVQgElwADVURbAANVCLsAARw3AAJdcYAPAAPyXAABNyDkATchoAE3IuQBNyQoAAAADAsAAl5CAo8AA2bTAANm6wADcjAPAAGEMAAABYAHAAJeJAAFgAcAAlncBBMAAl5KAo8AA2iDAANouCcAARw0AWwABBcAAl5+Ao8AA2jPAANozwADaXQAAAAPAANpIwADaXQAAAAEBAcAA2k4AAATAAEcNWwAAYAPAAJeQAT8CCAHAAJeSgADATcmGCQHAANozwACXjwAAAAAIBsAAl5SAo8AA2mLAANptwADasgEAgL0AAAABA8AA2nLAANqyAAAAAAAAAGADwAD+fgE+AT0wwADaeCfAAGENBsAAl5WAo8AA2rfAANrAwADa1AEAsCAAAAABA8AA2szAANrUAAAAAAAAAGADwAD60QFKwADazwEqBsAAl5iAo8AA2tnAANrbwADbLgAAhFIAAAABA8AA2uTAANsuAAABAACCemADwAD95AFbAQEBwADa9AAAAIdFXQPAAJNEAV8DAAAAAF8DAAABSsAA2wYBHMAA2w6AwADbBsBNymaw4gEAAS4AwACTgAbAAJeZgKPAANszwADbNcAA25wAAIWFAAAAAQPAANtCwADbnAAAAgAAlyVgA8AA/eQBWwAAg9lgA8AA/eQBWwICAsAA21YAAACHRV0DwACT0QJfAwAAXwMBAADAANthAAAAhYZfAwEAAABfAwAAAUrAANtvARzAANt3gMAA22/ATcrisOICAAIugcAA25jATcr7AMAAlA0GwACXmoCjwADbocAA26bAANvQAACEUwAAAAEDwADbtsAA29AAAAEAAIJ6YAPAAP3kAVsBAQHAANvGAAAAh0VdA8AAk0QBXwMAAAAAXAE+AAbAAJebgKPAANvVwADb2sAA3BMAAMAAYM8AAAABA8AA2+7AANwTAAACAACXJWADwAD95AFbAACD2WADwAD95AFbAgICwADcAgAAAIdFXQPAAJPRAl8DAABfAwEAAMAA3A0AAACFhl8DAQAAAFwBPgAGwACXnYCjwADcGMAA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mAAAYAPAAJSBAT4GTsAAtwnAALcTAACFymADwACVmAErScAAtyEhHMAAtyYuwABhawEAAWrAALc1YAPAAPyXwACKqADAAJhaPgI9isAAt0vATlixHMAAt1cuoZkAAAAAwACYbT0cwAC3ci7AAGFqAQABasAAt4FgA8AA/JfAAIqoAMAAmFk/TsAAt6bAALetAACsl2ADwACVmAErScAAt7shHMAAt8AuwABhawEAAWrAALfPYAPAAPyXhQcAwACYWj4CPYvAALfiwE5ZLBzAALfrLqGZAAAAAMAAmG09HMAAuAYuwABhagEAAWrAALgVYAPAAPyXhQcAwACYWT9OwAC4NsAAuDsAAIJtYAPAAJSBARzAALg9LsAAQlMAAAAAwACYdErAALhVAR/AALhgwACUzAQABIHAALhkwE5YloLAALhqwE5YsYPAALh1wE5ZLITAALh9wE5ZowA9HMAAuI8uwABhagEAAWrAALieYAPAAPyXguEAwACYWUnAALirHMAAuK8uwABhawEAAWrAALi+YAPAAPyXwACKqADAAJhaPgFKwAC40gEcwAC44oDAALjZwE5YbCABAAErAAA/ScAAuPUcwAC4+S7AAGFwAQABJ4QrAMAAmF0+BU7AALkiwAC5LgAAnt5gA8AAlZ8BHMAAuTAuwABheAAAAADAAJh7ScAAuVIcwAC5Vi7AAGFwAQABJ5oxAMAAmF0+BE7AALl/wAC5kAAAwABhomADwACVmAEcwAC5ki6hmQAAAADAAJhtPRzAALmtLsAAYWoBAAFqwAC5vGADwAD8l4UHAMAAmFlOwAC518AAudwAAIJtYAPAAJSBARzAALneLsAAQlMAAAAAwACYdErAALn4AR/AALoDwACU2QMAAx/AALoawACV1QEAATHAALpDYAPAAJX2AR/AALpIwACV/wIAAoHAALpfwE5agCsAAILAALqBwE5awoPAALqfwE5bCAA/TsAAur/AALrMAACu1WADwACVmAEcwAC6zi7AAGGOAQABgcAAuuzATlqAAMAAmG89HMAAuwAuwABhagEAAWrAALsPYAPAAPyXwACKqADAAJhZSsAAuyEBHMAAuzGAwAC7KMBOWGwgAQABgsAAuzLATluEAAA/TsAAu1fAALtcAACqtWADwACVmAEcwAC7Xi6hmQAAAADAAJhtPRzAALt1LsAAYWoB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WoGawACh68AAofDAAKKUAACxFQAAAAEDwACh+MAAopQAAAABAQHAAKH9AAAAg/NgA8AAlSIAAGADwAD60QE+AUnAAKIJIRzAAKIeFsAAohKAwACiDcBO7/axF8AAlSZIAQABKwDAAP3xPgFKwACiLwEcwACiRxbAAKI7gMAAojbATu/2sRfAAJUmhFIBAWADwAD60QEuAMAAlIo+AUrAAKJoARzAAKJ+FsAAonSAwACib8BO7/axFsAAlSWEUgEBYAPAAPrRAS4AwACVNQbAAJlbgZrAAKKZwACinsAAos4AAIZVAAAAAQPAAKKowACizgAAAAEBAcAAoq8AAACD82ADwACVMAAAYAPAAPrRAUrAAKK4ARzAAKLCFsAAor2AwACiuMBO8MeCbcAAlTOEUgEBYAPAAPrRAS4AwACUigbAAJlcgZrAAKLSwACi18AAovgAALEUAAAAAQPAAKLiwACi+AAAAAEBAcAAouoAAACD82ADwACVPQAAYAPAAPrRAUrAAKLzASoGwACZXYGawACi/MAAowHAAKMeAACxEwAAAAEDwACjCsAAox4AAAABAQHAAKMQAAAAg/NgA8AAlU8AAGADwAD60QFKwACjGQEqBsAAmV6BmsAAoyLAAKMnwACjSgAAsRIAAAABA8AAozPAAKNKAAAAAQEBwACjPAAAAIPzYAPAAJVbAABgA8AA+tEBSsAAo0UBKgbAAJlfgZrAAKNOwACjU8AAo44AAIZpAAAAAQPAAKNrwACjjgAAAAEBAcAAo4AAAACD82ADwACVZQAAYAPAAPrRAUrAAKOJASoGwACZYIGawACjksAAo5fAAKPdAACGMgAAAAEDwACjrMAAo90AAAABAQHAAKO+AAAAg/NgA8AAlXIAAGADwAD60QFKwACjxwEcwACj0RbAAKPMgMAAo8fATvJdgm3AAJV1hFIBAWADwAD60QEuAMAAlGkGwACZYYGawACj4cAAo+bAAKQaAACxEQAAAAEDwACj+8AApBoAAAABAQHAAKQNAAAAg/NgA8AAlX8AAGADwAD60QFKwACkFgEpBsAAmWKBmsAApB/AAKQkwACkTQAAwABeQgAAAAEDwACkM8AApE0AAAABAQHAAKQ/AAAAg/NgA8AAlZgAAGADwAD60QFKwACkSAEqAABO6tAATusZAE7rlgBO698ATuwoAE7scQBO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wACVyYCrAQFeAwABAQFbAAFXA8AAkzMAWwEWwABEOi6awsAAmcAAwAD9BICtAAAAAMAA/Q9KwABETwE0wABEVgPAAERWwABFhAAAAAEBAcAARFcAAABbWwAAYAPAAJXHAT4DTsAARIfAAESUAACu1V0DwAD9OwFgA8AAlfYBMcAARK5gA8AAlfYARsAARLjAAETtwABEygAAAJrmXgMAAQEBWwABVwPAAJMzAFsAgcAARNrAT0PvPgJOwABE+8AARQIAAIF2WwEcwABFEITAAEUEwE9EwyABAAGCwABFEcBPRH8AAD0cwABFMoPAAEUlwE9ElFYBAAEmwABFNgGFwABFNsBPROpgA8AAlfYAwAD9TErAAEVNAR/AAEVYwACV1QEAAYPAAEVwwE9ElAAGwACZ6YGbwABFjcAARZrAAEbWAACxCQAAAAEDwABFqcAARtYAAAABAQHAAEW1AAAAg/NgA8AAleQAAF4DAAEBAVsAAVcDwACTMwBbAT4ETsAARc7AAEXfAADAAGJIXgMAAQEBWwABVwPAAJMzAFsBHMAAReEumsIBAAEWwABF7IDAAEXnwE9FiLEKwACV5gDAAJnATsAARgbAAEYJAACquWADwAD+fgEWwABGEIDAAEYLwE9FiKq5wACV507AAEYlwABGLwAAwABiVV4DAAEBAVsAAVcDwACTMwBbARzAAEYxLsAAYikBAAEWwABGRIDAAEY/wE9FiICWwACV6ADAAJnBSsAARlABNMAARlcDwABGV8AARtIAAAABAQHAAEZYAAAAW1sAAGADwACV5AE+AUrAAEZrAR/AAEZ2wACV9QMAAybAAEalARzAAEalgcAARpXAT0WuIAEAAYTAAEamwE9GewAAYAPAAJWYgsAARrLAT0XzJsAARr8BHMAARr+DwABGtsBPRhsgAQABhMAARsDAT0Z7AABgA8AAlZgABsAAmeqBm8AARtvAAEbowABIHwAAsQgAAAABA8AARwPAAEgfAAAAAQEBwABHGwAAAIPzYAPAAJX2AABeAwABAQFbAAFXA8AAkzMAWwE+A07AAEc0wABHRAAAwABiTl4DAAEBAVsAAVcDwACTMwBbARzAAEdGLprCAQABFsAAR1GAwABHTMBPRyee3sAAlfgAwACZwE7AAEdwwABHegAAwABiVV4DAAEBAVsAAVcDwACTMwBbARzAAEd8LsAAYikBAAEWwABHj4DAAEeKwE9HJ4CWwACV6ADAAJnBSsAAR5sBNMAAR6IDwABHosAASBsAAAABAQHAAEejAAAAW1sAAGADwACV9gE+AUrAAEe2AR/AAEfBwACV/wIAAibAAEfyARzAAEfygcAAR+PAT0dNIAEAAYPAAEfzwE9H8gAAYAPAAJWfJsAASAgBHMAASAiCwABH/8BPR5IgAQABg8AASAnAT0fyAABgA8AAlZgABsAAmeuBm8AASCTAAEgxwABJcgAAsQcAAAABA8AASEHAAElyAAAAAQEBwABITgAAAMAAYMZgA8AAlgAAAF4DAAEBAVsAAVcDwACTMwBbAT4ETsAASGfAAEh1AADAAGJCXgMAAQEBWwABVwPAAJMzAFsBHMAASHcumsIBAAEWwABIgoDAAEh9wE9IlYXKwACWAgDAAJnATsAASJ/AAEioAADAAGJDXgMAAQEBWwABVwPAAJMzAFsBHMAASKoumsIBAAEWwABItYDAAEiwwE9IlYGvwACWAwDAAJnATsAASM3AAEjbAADAAGJEXgMAAQEBWwABVwPAAJMzAFsBHMAASN0umsIBAAEWwABI6IDAAEjjwE9IlYXLwACWBADAAJnASsAASPgBNMAASP8DwABI/8AASW4AAAABAQHAAEkAAAAAW1sAAGADwACWAAFKwABJDgEfwABJEsAAlg8DAAMmwABJKwEcwABJK4HAAEkewE9IvSABAAGEwABJLMBPSaUAAGADwACVmCbAAElIARzAAElIgsAASUDAT0kCIAEAAYTAAElJwE9JpQAAYAPAAJWYJsAASWIBHMAASWKDwABJVcBPSUcgAQABhMAASWPAT0mlAABgA8AAlZgABsAAmeyBm8AASXfAAEmEwABJ6AAAsQYAAAABA8AASYzAAEnoAAAAAQEBwABJkQAAAIPzYAPAAJYfAABeAwABAQFbAAFXA8AAkzMAWwFKwABJoAEcwABJoC7AAGJWAgACgMAASbDAT0pvNMAASbYDwABJtsAASecAAAACAgLAAEm3AAAAgklbAMAASb8AAABbWwAAYAPAAJYfAUrAAEnNAR/AAEnRwACWJgIAAibAAEnVAYHAAEnVwE9KwmADwACVmCbAAEndAYLAAEndwE9KzV0DwAD9OwFgA8AAlZgAAMAAme4GwACZ7YGbwABJ7cAASfrAAEphAACxBQAAAAEDwABKA8AASmEAAAABAQHAAEoJAAAAg/NgA8AAlhAAAF4DAAEBAVsAAVcDwACTMwBbAUrAAEoYARzAAEoYLsAAYlYCAAKAwABKKMBPS1I0wABKLgPAAEouwABKYAAAAAICAsAASi8AAACCSVsAwABKNwAAAFtbAABgA8AAlhABSsAASkUBH8AASknAAJYeAgACJsAASk4BgcAASk7AT0ulYAPAAJWYJsAASlYBgsAASlbAT0uwXQPAAP07AWADwACVmAAAwACZ7gbAAJnugZvAAEpmwABKc8AATWgAAMAAYlYAAAABA8AASoLAAE1oAAAAAgICwABKiAAAAIPzYAPAAJYQAMAASo4AAACHL2EDAltbWwAAXgMAAQEBWwABVwPAAJMzAFsBPgNOwABKvMAASscAAMAAYldeAwABAQFbAAFXA8AAkzMAWwEcwABKyS6awgEAARbAAErUgMAASs/AT0w3gknAAJYSAMAAmcBOwABK+MAASwcAAMAAYlhdA8AA/PkBXgMAAQEBWwABVwPAAJMzAFsBHMAASz4cwABLIBbAAEsWgMAASxHAT0w3W8AAlhOAqwEBXgMAAQEBWwABVwPAAJMzAFsBFsAASyQuwABiMcAAmcgAwAD9BICtAAAAAMAA/Q9KwABLqgE0wABLsQPAAEuxwABNZAAAAAEBAcAAS7IAAABbWwAAWwE+BE7AAEvKwABL0QAAgklgA8AAlGEBJsAAS8oBHMAAS92CwABL08BPTG0gAQABhMAAS97AT01DAABgA8AAlGFOwABMAcAATA8AAMAAYlldA8AA/TsBYAPAAJWYATHAAEwdYAPAAJWYAEbAAEwnwABMWcAATDkAAACa5l4DAAEBAVsAAVcDwACTMwBbAIPAAExJwE9Msj4CTsAATGfAAExuAACBdlsBHMAATHyHwABMcMBPTcEgAQABhMAATH3AT01DAABJwABMkSXAAEycFMAATJXAT03oCABdA8AA/PkBWz4BPRzAAEzDhsAATLXAT02QgKUBAAEmwABMygEUwABMysBPTegIAV0DwAD8+QFbXQPAAPz5AWADwACVmADAAP1NPgE9HMAATPyGwABM7sBPTZBWAQABJsAATQABFMAATQDAT03oCABgA8AAlZgAwAD9TErAAE0hARzAAE0ugcAATSjAT0xHIAIAAoXAAE0vwE9NUxzAAE1FhsAATTfAT02QgK0BAAABhW4qwAD9DwAABsAAme+Bm8AATW3AAE16wABOawAAsQQAAAABA8AATYXAAE5rAAAAAQEBwABNjQAAAIPzYAPAAJYnAABeAwABAQFbAAFXA8AAkzMAWwE+BE7AAE2mwABNrwAAwABiWl4DAAEBAVsAAVcDwACTMwBbARzAAE2xLprCAQABFsAATbyAwABNt8BPTwqFxcAAlioAwACZwE7AAE3UwABN3gAAwABiW14DAAEBAVsAAVcDwACTMwBbARzAAE3gLprCAQABFsAATeuAwABN5sBPTwqFx8AAlisAwACZwE7AAE3+wABOAQAAqrlgA8AA/n4BFsAATgiAwABOA8BPTwqqucAAlilKwABOEAE0wABOFwPAAE4XwABOZwAAAAEBAcAAThgAAABbWwAAYAPAAJYnAUrAAE4uAR/AAE4ywACWNwMAA4PAAE45wE9PuibAAE5FARzAAE5FgcAATj3AT08wIAEAAYTAAE5GwE9P+wAAYAPAAJWYJsAATlsBHMAATluCwABOUsBPT3UgAQABhMAATlzAT0/7AABgA8AAlZgABsAAmfCBm8AATnDAAE59wABPKgAAsQMAAAABA8AATojAAE8qAAAAAQEBwABOkAAAAIPzYAPAAJY4AABeAwABAQFbAAFXA8AAkzMAWwE+A07AAE6pwABOtQAAwABiXF4DAAEBAVsAAVcDwACTMwBbARzAAE63LprCAQABFsAATsKAwABOvcBPUKUfwACWOwDAAJnATsAATtjAAE7bAACquWADwAD+fgEWwABO4oDAAE7dwE9Qpaq5wACWOkrAAE7qATTAAE7xA8AATvHAAE8mAAAAAQEBwABO8gAAAFtbAABgA8AAljgBSsAATwABH8AATwTAAJZGAgACgsAATwvAT1EPJsAATxoBHMAATxqBwABPD8BPUMsgAQABg8AATxvAT1FQAABgA8AAlZgABsAAmfGBm8AATy/AAE88wABP7AAAsQIAAAABA8AAT0jAAE/sAAAAAQEBwABPUQAAAIPzYAPAAJZHAABeAwABAQFbAAFXA8AAkzMAWwE+A07AAE9qwABPdgAAwABiXF4DAAEBAVsAAVcDwACTMwBbARzAAE94LprCAQABFsAAT4OAwABPfsBPUdEfwACWSgDAAJnATsAAT5nA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YmcCAAKAiHLAT3UkgYh4wE91MgDAAJoaP06ImIieAACD22ADwACXvAEmiJgBgYigwE91MmADwACXvEqIqQEciLAuwABiaAQABICIu8BPdSQWiMaAiMHAT3UkwABHDcAAl76CiNbAT3WCFojjgojdwE91gsAARw3AAJe+AMAAmhsGwACaIoGdiPuJDIoEAACw4QFqiPxgA8AA/eQCAAABA4kligQAAAACAgKJOwAAAIPzYAPAAJenAIlGAAAghYZgA8AAlGEAAGADwAD60QE+A0mJUSEliVmBiVXAT3YgYAPAAJenSolzARyJei7AAGJnAgACgImBwE92EoGJh8BPdiAAwACaGj9OiaaJrAAAg9tgA8AAl6cBJommAYGJrsBPdiBgA8AAl6dKibcBHIm+LsAAYmgEAASAicnAT3YSFonUgInPwE92EsAARw3AAJepgonkwE92cBaJ8YKJ68BPdnDAAEcNwACXqQDAAJobBsAAmiOBnYoJihqLFgAAsOIBaooKYAPAAP3kAgAAAQOKNIsWAAAAAgICiksAAACD82ADwACXkACKVgAAIIWGYAPAAJRhAABgA8AA+tEBPgNJimEhJYppgYplwE93DmADwACXkEqKhAEciosuwABiZwIAAoCKksBPdwCBipjAT3cOAMAAmho/Toq4ir4AAIPbYAPAAJeQASaKuAGBisDAT3cOYAPAAJeQSorJARyK0C7AAGJoBAAEgIrbwE93ABaK5oCK4cBPdwDAAEcNwACXkoKK9sBPd14WiwOCiv3AT3dewABHDcAAl5IAwACaGwbAAJokgZ2LG4ssjCAAALDkAWqLHGADwAD95AIAAAEDi0SMIAAAAAICAotZAAAAg/NgA8AAl30Ai2QAACCFhmADwACUYQAAYAPAAPrRAT4DSYtvISWLd4GLc8BPd/xgA8AAl31Ki5ABHIuXLsAAYmcCAAKAi57AT3fugYukwE93/ADAAJoaP06LwovIAACD22ADwACXfQEmi8IBgYvKwE93/GADwACXfUqL0wEci9ouwABiaAQABICL5cBPd+4Wi/CAi+vAT3fuwABHDcAAl3+CjADAT3hMFowNgowHwE94TMAARw3AAJd/AMAAmhsGwACaJYGdjCWMNo02AACw5gFqjCZgA8AA/eQCAAABA4xRjTYAAAACAgKMaQAAAIPzYAPAAJdoAIx0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T6juAE+p/ABPqzwAT6yuAE+t7gBPrnoAT69WAE+wOgAAAEMCBMAAkzWBnILigwkEwABicABgA8AAmZcBH4L4wACZoQAAAAAEwACTNoGcm9mb7waChQBgA8AAmAYBapvkYAPAAJgGwAEgmwwGwACTOIGcwABEOMAAREbAAERuAAGD8QAAAAEDwABETMAARG4AAAABAQHAAERUAAAAgJZgA8AA/n4AAGADwACXAgFKwABEXgEcwABEYWrAAEReYAPAAJgGwAEgm4PxAQABgMAARGjAT7HBAMAAmBcGwACTOYGcwABEcMAARH7AAETcAAHAAFFoAAAAAQPAAESHwABE3AAAAAIBAcAARI0AAACAvWADwACVogABwABElAAAAJfdWwFqwABEn2ADwAD60QBgA8AAlwIBPgFKwABEqwEcwABEtWrAAESyYAPAAJgGwAEgm8AAUWgCAAGAwABEv8BPsjIBl92BwABE0MBPskPAAJgbBsAAkzqBnMAARN/AAETtwABFHQABwABSaQAAAAEDwABE98AARR0AAAABAQHAAET/AAAAgJZgA8AA/n4AAGADwACXAgFKwABFCQEcwABFDGrAAEUJYAPAAJgGwAEgm8AAUmkBAAGAwABFF8BPsskAwACYGAbAAJM7gZzAAEUfwABFMcAARZYAAcAAUncAAAABA8AART3AAEWWAAAAAgICwABFUAAAAINhXQPAAPz5AWADwACW6ADAAEVeAAAAgbFgA8AAlugAAF0DwAD8+QFgA8AAlugBPgFKwABFbQEcwABFd2rAAEV0YAPAAJgGwAEgm8AAUncCAAKAwABFhMBPszyBwABFisBPs1MAwACYGgbAAJM8gZzAAEWZwABFrcAARjAAAcAAUnYAAAABA8AARb/AAEYwAAAAAgEBwABF0gAAAISGXQPAAPz5AWADwACW6AABwABF3gAAAMAAYTVbAWrAAEXpYAPAAPrRAGADwACXDAE+AUrAAEX1ARzAAEX/asAARfxgA8AAmAbAASCbwABSdgIAAYDAAEYSwE+z2AHAAGE1gcAARiTAT7PwwACYGQbAAJM9gZzAAEYzwABGQcAARmYAAcAAUg8AAAABA8AARkfAAEZmAAAAAQEBwABGTAAAAICWYAPAAP2uAABgA8AAlxgBSsAARlYBHMAARllqwABGVmADwACYBsABIJvAAFIP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AGJ4YAPAAPrRAWqB82ADwAD60QBgA8AA/n4BPgROghmCIQAAemADwACYmQEfgifAAJiiAgAAAsAARwQhgYJfwE/JwsAAYa0hgYKYwE/Jwk6CuoLKAADAAGJ5YAPAAJqQAR+C0MAAmpQAAAAAPRyDEh+C8MAAmSoCAAKCgvjAT8nmg4MBwE/KGACawgEAAYCDGMBPybMAwACY2kqDIQEcgziDgyjAT8oYvbwAAAAAwACYsAGBngBPynoAT7p9AE++AQBPxRkAT8jNAE/JjwAAAAQAT8mRAE/KegAAAAEAAgTAAJqVwABieoGfAAAAAAAAAwLAAJq2gZ+lNqU7r80Ls2QAAAFgAcAA/eQAACsEwACauIGfpTulOwknAGADwAD8lwAEwACauoGfpTulOwkowACalQBgA8AA/n4ABMAAmruBn6U7pTsGKQBdA8AA/TsBYAPAAJq2AWoAXQPAAP07AWADwACatsABVvoEwACavIGfpUmlSQbAAGJ7AGADwACatgFqAGADwACatsABLTQEwACavYGfpVqlWgbAAGJ8AGADwACatgFqAGADwACatsABLU0EwACavoGfpWulawbAAGJ9AGADwACatgFqAGADwACatsABLWYEwACav4GfpXqlegbAAGJ+AGADwACatgFqAGADwACatsABLX8EwACawIGfpYqligbAAGJ/AGADwACatgFqAGADwACatsABLZgEwACawYGfpZqlmgbAAGKAAGADwACatgFqAGADwACatsABLbIEwACawoGfpaqlqgbAAGKBAGADwACatgFqAGADwACatsABLcwEwACaw4GfpbqlugbAAGKCAGADwACatgFqAGADwACatsABLeYEwACaxIGfpcqlygbAAGKDAGADwACatgFqAGADwACatsABLgAEwACaxYGfpdql2gbAAGKEAGADwACatgFqAGADwACatsABLhoEwACaxoGfpeyl7AbAAGKFAGADwACatgFqAGADwACatsABLjQEwACax4Gfpful+wbAAGKGAGADwACatgFqAGADwACatsABLk4EwACayIGfphimGAbAAGKHAGADwACatgFqAGADwACatsABLmoEwACayYGfpjemNwbAAGKIAGADwACatgFqAGADwACatsABLoYEwACayoGfplKmUgbAAGKJAGADwACatgFqAGADwACatsABLqAEwACay4GfpmimaAbAAGKKAGADwACatgFqAGADwACatsABLrwEwACazIGfps2mzQbAAGKLAGADwACatgFqAGADwACatsABLtgEwACazYGfpymnKQbAAGKMAGADwACatgFqAGADwACatsABLvIEwACazoGfp7KnsgbAAGKNAGADwACatgFqAGADwACatsABLw4EwACaz4Gfp+Cn4AbAAGKOAGADwACatgFqAGADwACatsABLyoEwACa0IGfqBioGAbAAGKPAGADwACatgFqAGADwACatsABL0YEwACa0YGfqRqpGgbAAGKQAGADwACatgFqAGADwACatsABL2IEwACa0oGfqZipmAbAAGKRAGADwACatgFqAGADwACatsABL34EwACa04GfqhSqFAbAAGKSAGADwACatgFqAGADwACatsABL5oEwACa1IGfqpeqlwbAAGKTAGADwACatgFqAGADwACatsABL7YEwACa1YGfqyKrIgbAAGKUAGADwACatgFqAGADwACatsABL9IEwACa1oGfq6qrqgbAAGKVAGADwACatgFqAGADwACatsABL+4EwACa14Gfq/mr+QbAAGKWAGADwACatgFqAGADwACatsABMAoEwACa2IGfrG2sbQbAAGKXAGADwACatgFqAGADwACatsABMCYEwACa2YGfrMqsygbAAGKYAGADwACatgFqAGADwACatsABMLAEwACa2oGfrVOtUwbAAGKZAGADwACatgFqAGADwACatsABMEIEwACa24GfraqtqgbAAGKaAGADwACatgFqAGADwACatsABMF4EwACa3IGfrgCuAAbAAGKbAGADwACatgFqAGADwACatsABMHoEwACa3YGfrlquWgbAAGKcAGADwACatgFqAGADwACatsABMJQEwACa3oGfrqCuoAbAAGKdAGADwACatgFqAGADwACatsABMMoEwACa34Gfrtuu2wbAAGKeAGADwACatgFqAGADwACatsABMOQEwACa4IGfrxWvFQbAAGKfAGADwACatgFqAGADwACatsABMQAEwACa4YGfr0yvTAbAAGKgAGADwACatgFqAGADwACatsABMRoEwACa4oGfr4avhgbAAGKhAGADwACatgFqAGADwACatsABMTYEwACa44Gfr7+vvwbAAGKiAGADwACatgFqAGADwACatsAB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AF6gARbAAF6WLoDtwACdxgbAAJ3KganAAF6lwABeqsAAYFAAAMAAUE8AAAABA8AAXsbAAGBQAAAAAQEBwABe1gAAAKuxYAPAAHMNAABcAT4EQCEWwABe7i7AAGOVwACc7MAAncLAAF7twABfAwA9F8AAXwouwABjlsAAnOwpwACdw07AAF/QwABf3AAAhqlgA8AAnPEBHMAAX++AwABf5sBREPjAAE/dAQABFsAAYAkuwABjksAAnOzAAJ29AMAAcyNJwABgGiEcwABgKoHAAGAewFERP0gBAAErAMAA/fE9HMAAYD+BwABgM8BRET/AAGNqAQABLgDAAJ0HPwbAAJ3LganAAGCGwABglMAAZ0cAAMAAY4EAAAABA8AAYKbAAGdHAAAAAQEBwABgtgAAAKuxYAPAAHMNAABgA75RAT4HScAAYMYiIRzAAGDUgMAAYMvAURHlwABP9QEAARbAAGEGLsAAY43AAJzswACdvwDAAHM9ARzAAGEjgMAAYRrAURHluKwBAAEWwABhMS7AAGONwACc7MAAnb8AwABzPj4CPRzAAGHHLsAAUCABAAGAwABhzsBREeUAwACdEErAAGHfARzAAGHmLsAAY2wBAAGAwABh78BREeUAwACdzj9JwABiZxbAAGJrLsAAY5XAAJzswACdwkrAAGKCASs/ScAAYpQiIhbAAGKZLsAAY5bAAJzswACdwwEWwABity7AAGOUwACc7MAAncEAFsAAYtcuwABjdsAAnT0+Aj0cwABjki7AAFAgAgABgMAAY5nAURHlAcAAUCEqwACdEErAAGPDARzAAGPKLsAAY2wBAAGAwABj08BREeUAwACdzj9JwABj6CIWwABj7C7AAGOTwACc7MAAncAAIhzAAGQgFsAAZBsWwABkEy7AAGONwACc7MAAnb+Avb0YSAEAAWrAAGQvYAPAAP5+wADveQDAAP6NASIcwABkWhbAAGRVFsAAZE0uwABjjcAAnOzAAJ2/gL29GEgBAAFqwABkaWADwAD+fsAA72oAwAD+jQAWwABkgS7AAGN2wACdPT4CPRzAAGULLsAAUCABAAGAwABlEsBREeUAwACdEErAAGUjARzAAGUqLsAAY2wBAAGAwABlM8BREeUAwACdzj9JwABlSBzAAGVyFsAAZVWAwABlTMBREeWlT8AAcxm36QEAARbAAGWYLsAA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nnUBPgI9F8AAz/EuwABj0hzAANAWgMAA0ALAUWTHteUBAAEWwADQKS7AAFAKwACeeAC+r8AAnno9HMAA0EgWwADQPC6bDMAAnnfAAGNqAQABLgDAAJ0HBAgBwACeeIIAwFFk5QgBwACed4MAwFFk9QgBwACeeYQAwFFlBQkAwADPzsAAnnECAAKCwADP1MBRZOWBwADP4sBRZNUABgbAAJ59ganAANBewADQccAA0JAAACMBasAA0F9gA8AA/eQCAAABA8AA0HnAANCQAAAAAAAAAGADwAD+fgFKwADQfwEkwADQkAInwABj0xbAANCLLoKUwACc9wbAAJ5+ganAANCVwADQocAA0P8AAIRSAWrAANCWYAPAAP3kAgAAAQPAANCnwADQ/wAAAAEBAcAA0L8AAACHRV0DwACfLAFbAABbAT4BSsAA0M4BHMAA0N2AwADQ1cBRZknAAGPUAQABLgDAAJ80BsAAnn+BqcAA0QTAANEVwADRggAAwABQSgFqwADRBWADwAD95AIAAAEDwADRIsAA0YIAAAABAQHAANEyAAAAq7FgA8AAcw0AAGADwAD60QE+AUrAANFCASIWwADRVRbAANFJLpsMwACed8AAY2LAAJz9AB3AANFnwABQSgEAAYDAANF1wFFmuQDAAJ0UBsAAnoCBqcAA0YfAANGhwADURwAAwABBbwFqwADRiGADwAD95AIAAAEDwADRrMAA1EcAAAABAQHAANG8AAAAq7FgA8AAcw0AAGADvlEBPgROwADR4MAA0fQAALEqYAO+XAEWwADR/4DAANH2wFFnRrEqwABzFE7AANImwADSKwAArSxgA75RARbAANItLoKUwACc90nAANI3IiIhHMAA0lCBwADSPMBRZ1+13wEAARbAANJcLoKUwACc9wC+rAEhHMAA0p8cwADSgYHAANJtwFFnX7XkAQABFsAA0pkugpTAAJz3AL6uSAEAARbAANKuFsAA0qIumwzAAJ53gpTAAJz3AMAA/fEBIRzAANLrHMAA0tKBwADSvsBRZ1+15QEAARbAANLlLoKUwACc9wC+r0gBAAEWwADS7i7AAGPSwACeegDAAP27PgFKwADTBgEcwADTIYHAANMNwFFnX7XgBQAFHMAA01WBwADTQcBRZ1+18wEAARbAANNnLsAAUArAAJ54AL68HMAA05SBwADTgMBRZ1+19AEAARbAANOmLsAAUArAAJ54AL69HMAA09OBwADTv8BRZ1+19QEAARbAANPoLsAAUArAAJ54AL6+FsAA1A0WwADUAS6bDMAAnneClMAAnPcWwADUHS7AAGPSwACeegC+rT9KwADUOAGCwADUP8BRZ4UGwACegYGpwADUTMAA1GbAANSXAADAAGNsAWrAANRNYAPAAP3kAgAAAQPAANRuwADUlwAAAAEBAcAA1H4AAACrsWADwABzDQAAYAO+UQFKwADUiwEWwADUiy7AAFAKwACeeAbAAJ6CganAANScwADUrcAA1QIAALQMAWrAANSdYAPAAP3kAgAAAQPAANS0wADVAgAAAAAAAABcAT4DPR3AANTDtAwAAAAAwACdGD0cwADU3hbAANTSLpsMwACed7QMAAAAAMAAnRg9F8AA1O0uwABjzsAAnOwrwACfDQAAUWW5AFFmEwBRZoEAUWcOAFFpFABRaXYAUWnxAAAABgLAAJ6FganAANV4wADVfsAA1zoDwABj1QAAAWABwACeXgAAAAEFwACeioGpwADVxMAA1cTAANZ5AAAAA8AA1eXAANZ5AAAAAwMDwADV+gAAALEqYAO+XADAANYrAAAAgldgA8AAnU0AwADWNAAAAJsMWwAAYAPAAJ6FAT8BCQDAANZJwACeZQMAA4DAANZPwFFqXIHAANZkwFFqaibAANZtAYLAANZtwFFqemADwACc8QACBsAAnoeBqcAA1n7AANaRwADWuwAAIwFqwADWf2ADwAD95AIAAAEDwADWmcAA1rsAAAAAAAAAYAPAAP5+AUrAANafASTAANa7AifAAGPWFsAA1rYugpTAAJz3BsAAnoiBqcAA1sDAANbMwADXOAAAhFIBasAA1sFgA8AA/eQCAAABA8AA1tLAANc4AAAAAQEBwADW6gAAAIdFXQPAAJ8sAVsAAFsBPgFKwADW+QEcwADXCIDAANcAwFFrVcAAY9cBAAEuAMAAnzAAAFFqxQBRax8AUWuNAAAAAgLAAJ6LganAANeBwADXh8AA3QE3wABj2AAAAWABwACc8QABYAHAAJ8IAwTAAJ6NganAAQOnwAEDtxjAAFAJAGADwAD60QEpBMAAno6BqcABA+/AAQP/GMAAUAcAYAPAAPrRASoEwACekIGpwAEEGcABBCMYwABjzsAAnOwAXQPAAP4vAWADwACc8QErBAXAAJ6WAAAAAAQAAAMAAAAAAAICAgAAAACClFsAAAAAAIJXWwAAYAPAAJ6LAT8BCQAAwACdHQIAAoAAwFFsQIEAwFFsSAAFwACelwAAAAAEwABjZQADAAAAAAACAgIAAAAAgpRbAAAAAACCV1sAAGADwACeiwE/AQkAAMAAnR4CAAKAAMBRbImBAMBRbJEABcAAnpgAAAAABMAAY2YAAwAAAAAAAQEBAAAAAIKUWwAAYAPAAJ6LAT8BCQAAwACdHwEAAYAAwFFs0gAFwACemQAAAAAEwABjZwADAAAAAAADAwMAAAAAgpRbAAAAAACCV1sAAAAAAMAAY2FbAABgA8AAnosBPwEJAADAAJ0gAwADgADAUW0NgQDAUW0VggDAUW0dAAIGwACekoGpwAEEiMABBKHAAQUaAQDAAGPPAAAAAQPAAQSrwAEFGgAAAAAAAABdA8AA/i8BYAPAAJzxAT4BSsABBLEBIxzAAQTEFsABBLkuwABjzsAAnOzAAJ8NSAEAASsAwAD98WrAAQTdXQOUYgFgA8AAnPHAAW2UFsABBQwuwABjzsAAnOzAAJ8NAV0DwAD+LwFgA8AAnPEGwACelIGpwAEFd8ABBXzAAQYoAADAAGPQAAAAAQPAAQWPwAEGKAAAAAEBAcABBaoAAACHQ10DwAD8+QFgA8AAnPEAAFwBPgFJwAEFtxzAAQXGFsABBbsuwABjzsAAnOzAAJ8NSAEAASsAwAD98T4BPRfAAQXXLsAAY87AAJzsHMABBeqAwAEF5MBRbhSVSQAAAADAAP0QwACfDT4BPRzAAQYRFsABBgYuwABjzsAAnOzAAJ8NgKUBAAGAwAEGGMBRbhQAwAD+PQAAUW1PAFFt6ABRbrAAAAACAsAAnpqBqcAA14HAANeHwADdAQPAAGPZAAABYAHAAJ6LAAACBMAAnpyBqcAA1/PAANf+CZsMAGADwACepwAEwACenYGpwADYF8AA2CMJwABQCgBgA75RAAEFwACepoGpwADYKMAA2CjAANjOAAAAA8AA2DrAANjOAAAAAwMDwADYWAAAAIJXYAPAAJ1NAMAA2GYAAATAAFAKYAO+UQDAANh5AAAEmwxgA8AAnqcAAGADwACemgE+AT0cwADYvRbAANixLpsMwACenMAAY2oBAAEuAMAAnQcDCAHAAJ6dgQDAUW9PCAHAAJ6cggDAUW9fCQDAANiOwACelgIAAoHAANiUwFFvT4DAANiiwFFvPwAGBsAAnp+BqcAA2NPAANjmwADZBAAAIwFqwADY1GADwAD95AIAAAEDwADY7sAA2QQAAAAAAAAAYAPAAP5+AUrAANj0ASTAANkEAifAAGPaFsAA2P8ugpTAAJz3BsAAnqCBqcAA2QnAANkVwADZcgAAhFIBasAA2QpgA8AA/eQCAAABA8AA2RvAANlyAAAAAQEBwADZMwAAAIdFXQPAAJ8sAVsAAFsBPgFKwADZQgEcwADZUYDAANlJwFFwYsAAY9sBAAEuAMAAnzUGwACeoYGpwADZd8AA2ZHAANvBAADAAEFvAWrAANl4YAPAAP3kAgAAAQPAANmcwADbwQAAAAEBAcAA2awAAACrsWADwABzDQAAYAO+UQE+BE7AANnQwADZ5AAAsSpgA75cARbAANnvgMAA2ebAUXDSsSrAAHMUTsAA2hbAANobAACtLGADvlEBFsAA2h0ugpTAAJz3ScAA2iciIRzAANpAgcAA2izAUXDroowBAAEWwADaRi6ClMAAnPcAvrABIRzAANqDHMAA2muBwADaV8BRcOu15wEAARbAANp9LoKUwACc9wC+skgBAAEWwADakhbAANqGLpsMwACenIKUwACc9wDAAP3xPgFKwADaoAEcwADau4HAANqnwFFw67XmBAAEHMAA2umBwADa1cBRcOu18wEAARbAANr7LsAAUArAAJ6dAL68HMAA2yiBwADbFMBRcOu19AEAARbAANs6LsAAUArAAJ6dAL69HMAA22eBwADbU8BRcOu19QEAARbAANt8LsAAUArAAJ6dAL6+FsAA26EWwADblS6bDMAAnpyClMAAnPcAvrE/SsAA27IBgsAA27nAUXERBsAAnqKBqcAA28bAANvgwADcEQAAwABjbAFqwADbx2ADwAD95AIAAAEDwADb6MAA3BEAAAABAQHAANv4AAAAq7FgA8AAcw0AAGADvlEBSsAA3AUBFsAA3AUuwABQCsAAnp0GwACeo4GpwADcFsAA3CfAANyUAADAAFBKAWrAANwXYAPAAP3kAgAAAQPAANw0wADclAAAAAEBAcAA3EQAAACrsWADwABzDQAAYAPAAPrRAT4BSsAA3FQBIhbAANxnFsAA3FsumwzAAJ6cwABjYsAAnP0AHcAA3HnA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UadBs9PAAGLdPgNOwAERPMABEUoAALoaYAPAAGL9ASbAARE8AYLAARFMwFGnQWADwABi/UnAARFcHMABEXYWwAERbobAARFgwFGn9JZSwABi/0gBAAEWwAERlBbAARGFgMABEXnAUacjs7fAAE2kmv+4qgDAAP3xPgFKwAERqQGBwAERsMBRpzM/PY3AARHAwFGnnBzAARHghMABEczAUad2tbUBAAEWwAESA4bAARH1wFGn9JZSwABi/wC+fEnAARIWFsABEiWCwAESGsBRp0G6FsAAYtw+AUrAARIzAYHAARI6wFGnM0nAARJJIhbAARJYgsABEk3AUadBuxfAAGLeARbAARJwgsABEmXAUadBuhXAAGLfPgE9jcABEobAUaecFsABErIWwAESnoDAARKSwFGnI7EqwABNpYVKvmBJwAESyRbAARLYgsABEs3AUadBuhfAAGLiPgFKwAETHQGBwAETJMBRpzM+AkAiFsABE0uCwAETQMBRp0Gj68AAYuABFsABE2iCwAETXcBRp0HAAEaNwABi4cABE0DAARN+AErAAROuAYHAARO1wFGnM0nAARPBg8ABE8XAUadSPgE9jcABE9fAUaecHMABE/eEwAET48BRp3a1ugEAAYXAARQDwFGnnAC+gT9JwAEUFRzAARQegcABFBnAUaczSAEAASsAwAD98T4BSsABFC0BhcABFDTAUaecP0rAARRFARzAARRghMABFEzAUad2ly8CAAKBwAEUbcBRpzOFwAEUc8BRp5wAvqgBgakAUaowAFDUfABQ4xQAUOOGAFDlDwBQ6mkAUOv2AFDs/QBQ+QsAUP1OAFD/ugBRAbAAUQR3AFEJaABRC9QAURmcAFEbMQBRHKIAUR/0AFEowwBRTWEAUVHCAFFWNgBRWFAAUVo3AFFefQBRYNAAUWPzAFFqEgBRa54AUW7BAFFz3ABRdWgAUXiLAFGLEgBRjJcAUY8lAFGTqQBRlRoAUZkvAFGbWQBRnb0AUaAhAFGmBQAAACoAUaYHAFGm8wBRqjAAAAACAAIEwACfRACBqgAABYDaAACCLoIIAIECAACb5YIIAIE2AACcmIIIAIFlAACa94IIAIGWAACbnIIIAAAAAAECwACfRYGqggWCFIKWB8AAZAoAAAFgAcAA/eQAAAABBcAAn0oAAAAABAAAAwAAAAAAAAAAAGADwACfRQE/AQkBAMAA/foAAAAAAgbAAJ9HgaqCK4I3glgAAoV8AAAAAQOCRIJYAAAAAQEBglMAAACD82ADhNkAAGADiOkABsAAn0iBqoJcgmiClAACwABUFgAAAAEDgnyClAAAAAEBAYKPAAAAg/NgA4gBAABgA4jpAAAAUat/AFGrsQBRq+UAAAACAAABgaoAUav4AFGrNQBRq/YAAAABAFGr+AAAAAAAAgTAAJ9LAIGrAAAKgNoAAMAAeykAAID4AADAAESPAACBDQAAvRUAAIExAADAAGLRAACBUgAAvjYAAIGDAADAAIYQAACBqgAAwABCRwAAgdIAAID7AACB7AAAwABn1wABAQGvcIIYAADAAE2YAAAAAAADAsAAn0yBq4J+goOFBwvAAGQLAAABYAHAAP3kAAAHBMAAn06Bq4KDgoMJJwBgA8AA/JcABMAAn1CBq4KDgoMJKMAAn0sAYAPAAP5+AATAAJ9RgauCg4KDBikAXQPAAP07AWADwACfTAFqAF0DwAD9OwFgA8AAn0zAAVxHBMAAn1KBq4LRgtEGh54AYAPAAJ9MAWoAYAPAAJ9MwAFb6ATAAJ9TgauDF4MXBp9TAGADwACfTAFqAGADwACfTMABXAEEwACfVIGrg26DbgaA7QBgA8AAn0wBagBgA8AAn0zAAVwaBMAAn1WBq4T4hPgGsBMAYAPAAJ9MAWoAYAPAAJ9MwAFcMwEFwACfWYGrgoOCg4UHAQAAA4KDhQcAAAACAgKCgwAABCdgA8AA/JcAgoMAAAQoYAPAAP5+AABgA8AAn0wBPwMIAMAAn06AAMBRraUIAMAAn1CBAMBRrbIJAADAAP36AAAAAAEGwACfV4GrgoOCg4UHAAAjAAAAAQOCg4UHAAAAAAAAAGADwAD+fgFKAAEPAC7AAJ9QAABRre0AUa4eAAAAAQLAAJ9agauFhYWUwABNygeeoAAAAWABwAD95AAAAQTAAJ9cgauFwIXHCYQmAGADwAB7NgABBcAAn3WBq4XMhcyF5QAAAAOF14XlAAAAAQEBhd0AAASEJmADwAB7NgAAYAPAAJ9aAT8CCAHAAJ9cgADAUa57CQGFzMAA/foAAAAAEwbAAJ9fgauF6oX7hh4BALYjwACfSwAAAAEDhgiGHgAAAAAAAABgA8AATZwBSoYLARaGExaGCy6EJsAAn1ylIsAAe1oGwACfYIGrhiOGO4Z5AQDAAFP+wACfSwAAAAEDhlCGeQAAAAAAAABgA75cAUqGWQEWhmYWhlkutiPAAJ9LwACfX7EqwABNpQbAAJ9igauHF4cliQsAAMAAVagAAAABA4cyiQsAAAABAQGHPAAAAIKUYAPAAGLWAABgA75RAT4ISYdIHIdRgIdMwFGvWEgBAAErAMAA/fFKh1oBKz89iIdrwFGvWByHiBaHehaHci6EJsAAn1zAAFPhwAB7U8AAVEQBAAGAh5fAUa9YAMAAo/s9iIeiwFGvWBaHroCHqcBRr1i0fsAAYthJh70Wh8aAh8HAUa9Yh5DAAGLbSofRASs/SYfiIRaH7ICH58BRr1iz08AAYt1Kh/0BKz9JiA4ciBeAiBLAUa9YSAEAARaINhaIJxaIGi62I8AAn0vAAJ9fs7fAAE2khiC4ygDAAP3xSohCASs/ToieiKYAAJZSYAO9KgEWiMAmiK4AgIipwFGvWGADwABi/ZZSwABi/0qIzQEciOkWiNQuwABT/sAAn0vAAJ9gtbYBAAGBiP/AUbBEAL59BsAAn2SBq4lPiVyKMgAAwABkDMAAn0sAAAABA4lmijIAAAACAgKJdAAAAJ7xYAPAAEXnAImHAAAAgpRgA8AAYtYAAGADwABF5wE+BEAhHImfgYmawFGwxUgBAAErAMAA/fGJmommAE6Ju4nAAACtLGADvlEBHInCLsAAVagBAAGBidDAUbDFAMAAn2JJidscieSCid/AUbD5SAEAASsAwAD98UqJ7QGAifTAUbC3P0qKAgEfig3AAEpRAgACgoofwFGw+YCKJcBRsLcABsAAn2WBq4quiruOBgAAwABkDcAAn0sAAAABA4rFjgYAAAACAgKK0wAAAJ7xYAPAAEXnAIrmAAAAgpRgA8AAYtYAAGADwABF5wE+B0AhHIr+gYr5wFGxkUgBAAErAMAA/fGK+YsFAD2JiwzAUbGRHIspFosbFosTLoQmwACfXMAAU+HAAHtTwABURAEAAYGLOMBRsZEAwACj+06LUItWAACD22ADwABF5wEci2AuwABU4gMAA4CLdMBRsYOBi37AUbGRaouUYAPAAPyXCQDAAJ9yPTUAAAABAGADtrMBFoztFozlLoQmwACfXLhWwAB7WyMcjPeDAMBRsjFIAQABKwAAKxyM94MAwFGyMa+9AQABHo0LwABoagEAAYGNG8BRsZEAALbAAVxJjSciJY0xgo0rwFGx+GADwABJ+wAcjU0UjUfAUbH4AgFgA8AASfu7HQEAARaNYRaNWS6EJsAAn1ylIsAAe1oAwABKEj4BSo13AYCNfsBRsYM/SY2SIiWNnIKNlsBRsfhgA8AAS2IAHI2xFI2rwFGx+AIBYAPAAEtiux0BAAEWjcUWjb0uhCbAAJ9cpSLAAHtaAMAAS3A+AUqN2wGAjeLAUbGDP0qN9gGCjf3AUbH4BsAAn2aBq46Cjo+QDwAAwABkDsAAn0sAAAABA46ikA8AAAABAQGOsAAAAJ7xYAPAAEXnAABgA8AARecBPgVOjsSO1QAAwABUMWADwABKMAEfjt/AAEo7AgACgI7vwFGzWhaPDhaO+S7AAFP+wACfS8AAn2CFtb5hAEmPHRyPMoGPIcBRs3O7HQEAARaPPi62I8AAn0vAAJ9fAMAASjg+AUqPVQGAj1zAUbNaP06PeY+CAACFtWADwABi1gEWj6AWj5EWj4QutiPAAJ9LwACfX7O3wABNpIW1uMs9NQAAAAEAYAO2swEWj7YWj64uhCbAAJ9cuFbAAHtbIxyPwIMAwFG0EEgBAAErAAArHI/AgwDAUbQQr70BAAEej9TAAGhqAQABgo/kwFGz4QAAtsABXEqP9AGBj/vAUbNzBsAAn2iBq5AUkCGRhAAAwABUhQAAAAEDkDWRhAAAAAICApBDAAAAnvFgA8AARecAkFYAAACClGADwABi1gAAYAPAAEXnAT4GSZBiHJBrgZBmwFG0n0gBAAErAMAA/fFKkHQBgJB7wFG0kT9OkJaQngAAgyJgA8AARecBHJCgLsAAZAzAAJ9LAgACgJCrwFG0kYGQtcBRtJ8AwACfZEmQwByQzIKQxMBRtNtIAQABgJDPwFG0kQDAAP3xSpDZAYCQ4MBRtJE/SZDuIiWQ+oKQ8sBRtNtgA8AASjwAHJETFJELwFG02wIBYAPAAEo8ux0BAAEWkScWkR8uhCbAAJ9cpSLAAHtaAMAASks+AUqRPQGAkUTAUbSRPz0ckWAWkVguhCbAAJ9cVgEAAYKRZMBRtNsAwAB7+kqRcgGCkXnAUbTbBsAAn2mBq5GJkZaUHQAAwABULgAAAAEDkbyUHQAAAAMDA5HRAAAAtBVgA708AJHtAAAAnvFgA8AARecAkgAAAACClGADwABi1gAAYAPAAEXnAT4HSZIMHJIVgpIQwFG17EgBAAErAMAA/fFKkh4BgZIlwFG13j9OkkCSUQAAwABWFGADwABF5wGBklPAUbXeTpJtkoIAAMAAZA9gA4FnARySsRaSmBaSjBaShC6EJsAAn1ylIsAAe1qlUMAATauz3gEAAYCSycBRtdIAwABuz0mS3RaS9oSS4cBRtkGDIIFpPgE9i5MJwFG2KByTHC7AAGQMwACfSwIAAoGTJ8BRtd6CkzHAUbXsAMAAn2RJk0MWk1yEk0fAUbZBgyGBaj4BPYuTb8BRtigck4IuwABkDcAAn0sCAAKBk43AUbXegpOXwFG17ADAAJ9lP0mTqByTvYOTrMBRtihIAQABgZPAwFG13gDAAP3xSpPKAYGT0cBRtd4/PRyT5xaT3y6EJsAAn1xWAQABg5PrwFG2KADAAHv6SpQCAYOUCcBRtigGwACfaoGrlNKU35YyAADAAFQyAAAAAQOVBpYyAAAAAwMDlRsAAAC0FWADvTwAlTcAAACe8WADwABF5wCVSgAAAIKUYAPAAGLWAABgA8AARecBPgVJlVYclV+ClVrAUbeJSAEAASsAwAD98UqVaAGBlW/AUbd7P06VipWbAADAAFYUYAPAAEXnARyVnS7AAGQMwACfSwIAAoGVqMBRt3uClbLAUbeJAMAAn2RJlb0cldKDlcHAUbfFSAEAAYGV1cBRt3sAwAD98UqV3wGBlebAUbd7Pz0clfwWlfQuhCbAAJ9cVgEAAYOWAMBRt8UAwAB7+kqWFwGDlh7AUbfFBsAAn2uBq5Y3lkSY2gAAwABUNQAAAAEDlmqY2gAAAAICApZ/AAAAtBVgA708AJabAAAAnvFgA8AARecAAGADwABF5wE+B06WtJa9AACFtWADwABi1gEWltsWlswWlr8utiPAAJ9LwACfX7O3wABNpIW1uMtOlvaXBwAAwABWFGADwABF5wGBlwnAUbh4TpcjlzgAAMAAZBBgA4FnARyXZxaXThaXQhaXOi6EJsAAn1ylIsAAe1qlUMAATavAAE3kAQABgJd/wFG4bADAAG7RSZeTFpeshJeXwFG42IMggWk+AT2Ll7/AUbi/HJfSLsAAZAzAAJ9LAgACgZfdwFG4eIKX58BRuJEAwACfZEmX/RaYFoSYAcBRuNiDIYFqPgE9i5gpwFG4vxyYPC7AAGQOwACfSwEAAYGYUMBRuHgAwACfZj9JmGUcmHqDmGnAUbi/SAEAAYGYfcBRuHgAwAD98UqYhwGBmI7AUbh4Pz0cmKQWmJwuhCbAAJ9cVgEAAYOYqMBRuL8AwAB7+kqYvwGDmMbAUbi/BsAAn2yBq5jfmPeZJQACwABWPAAAAAEDmRCZJQAAAAEBAZkeAAAAgmpgA708AABgA8AAn0wABsAAn22Bq5l4mYWgewAAwABV0AAAAAEDmZ2gewAAAAMCApm2AAAAgpRgA8AAYykAmckAAACCamADvTwAAZnqAAAApaRgA8AAQksBagBgA8AA/aF5YAPAAEXnAT4ITpoKmhwAAMAARa5gA711ARyaPBaaLhaaJi6EJsAAn1zAAFPhwAB7U8AAVDoBAAGAmlPAUbo3AMAApAlPmpeapAAAAcAAZBFhAwBgA8AARecAA5qymxgAAAAAAAAAYAPAAEXnAT4BSpq9ARyaxC6wGQMAAoCa1cBRujeBmtvAUbpFAaWkgpsAwFG6UsAAn25Pm0ubWAAAAcAAZBJhAwBgA8AARecAA5tnm+IAAAAAAAAAYAPAAEXnAT4BSptyARybmhabgRabeS6EJsAAn1zAAFPhwAB7U8AARKQCAAGDm6TAUbpzAaWkgpvKwFG6UsAApAZOnAEAAADAAFe5YAPAAJ9MAEmcGSWcOhacKhacIoCcHcBRujeWUsAAYyu1FL04YAO9Kj4BPY6cUsBRu2UcnGcuwABWPAEAAYGcgcBRukUAwACfbD4BPY6cncBRu2VqnMpgA8AAn0zAAVwaR5zfhpznwFG7ZQQBnSBqnSBgA8AAn0zAAVwaAD4BSp0zARydSYWdOsBRuwQgAAAAAAABnXBqnXBgA8AAn0zAAVwzAD4CSZ2HIRydkoGdi8BRukVIAQABFp2dFp2VLoQmwACfXMAAU+TAAHtZAMAA/fE+AUqewAEcntaFnsfAUbsEIAAAAAAAP0qe7AEcnwGEnvPAUbqwIAAAAAAAAZ8oap8oYAPAAJ9MwAFcAQA+AUqfOgEcn0+En0HAUbqwIAAAAAAAAZ92ap92YAPAAJ9MwAFb6AA+AT0cn5UWn4wWn4QuhCbAAJ9cpRDAAHtYpaUCAAIWn7WAn7DAUbo3llLAAGMrJ8AAZBMAtgU9HKAJFqAAFp/4LoQmwACfXKUQwAB7WKWlAgACFqAlgKAgwFG6N5ZSwABjKySgZQMnwABkFIagUcBRu2UngWoAtgVKoGwBKwbAAJ9ugaugwqDPo4kAALAZAAAAAQOg36OJAAAAAwICoPEAAACCcGADwABjKQChCAAAAIJqYAO9PAABoSkAAAClpGADwABCSwFqAGADwAD9oXlgA8AARecBPgdAFqFRgaFKwFG9TYUNvUGhSqFhAEAloZAWoYAWoXiAoW/AUb0/llLAAGMrtRS9OGADvSqhb6GeAE6hsqG5AACCSWADwABF5wEcodkWocsWocMuhCbAAJ9cwABT4cAAe1PAAFQtAQAAAaWkgqH1wFG9WsAApAdOohqiJgAAuwlgA8AARecBNaI0AAABAGADwABJawEfojTAAEl8AgACg6JBwFG9sxaiXhaiSS7AAFP+wACfS8AAn2C1or5pADUAAAABAFsBF6J3hKJ1wFG+AKWkgqKLwFG9WsAAReqEAMBRvgA9HKKqFqKiLoQmwACfXFYBAAGEoq7AUb3wAMAAe/o9HKLIFqLALoQmwACfXKERAQABNaLRAAABAGADwABLJgEfotHAAEs1BAAEgKL8wFG9P4SjBsBRvfCDoxPAUb2zFqMwFqMbLsAAU/7AAJ9LwACfYJ6lvl4ANQAAAAEAWwEXo0WFo0PAUb6NpaSCo1nAUb1awABF6oUAwFG+jQDAAHt0SqNxARyjgBajeC6EJsAAn1yhFAAAAADAAHt1BsAAn2+Bq6OOo5unLQAAwABV0wAAAAEDo7unLQAAAAMCA6PMAAAAgpRgA8AAYtYAo98AAAClo2ADvTwApAcAAAClpGADwABCSwFqAGADwAD9oXkAYAPAAEXnAT4HQCEWpC6ApCnAUb84o+vAAGLgpCikPABAFqTkgKTfwFG/OLPTwABi3aTfpPMATqUIpRIAAJ1zYAPAAGL9ASalCAGApRTAUb84YAPAAGL9TqUxpTgAAIJVXQPAAP07AWADwABF5wExpUhgA8AARecARqVQpYOlXgAAAB9gA8AAYtYAFqV0g6VqwFG/oYUswABjAD4BPRylkoSli8BRv8JWAQABHKWWLsAAVFEDAAKFparAUb/ngaW0wFG/RgGlpIKl4MBRv1LAAJ9wAMAA/UxOpgymGwAAwABSCGADwABF5wE1piEAAAEAYAPAAEtDAR+mIcAAS1IEAARqplVgA8AASzfAAPq5HKaHFqZ0FqZnLrYjwACfS8AAn1+lO8AATaKzdgEAARamnYOmk8BRv6GWUsAAYv8Au3WEpq/AUb/CFqbUFqa/LsAAU/7AAJ9LwACfYJ6lvl4ANQAAAAEAWwEXpumFpufAUcBUpaSCpv3AUb9SwABF6oUAwFHAVEqnFAGFpxvAUcBCBsAAn3CBq6cypz+r7AAAwABUUQAAAAEDp1Kr7AAAAAMCAqdjAAAAH2ADwABi1gCnegAAAKWjYAO9PAABp6IAAAClpGADwABCSwFqAGADwAD9oXlgA8AARecBPglJp7wWp9AWp8gWp8AuhCbAAJ9cesAAe1eCuIFWPgFKp+oBHKfxLsAAVEYDAAKAqAvAUcEbgagVwFHBKAGlpIKoQcBRwTXAAJ9xPz2IqF/AUcEbFqhzgKhqwFHBG7R+wABi2Emoghaoj4CohsBRwRvAAEaMwABi2j4BSqjPARyo5Bao3hao1i6EJsAAn1ykYcAAezi5XQEAARao9C62I8AAn0vAAJ9fAMAARR0/SakOFqkbgKkSwFHBG6PrwABi4D4BSqkzARypOi7AAFXQAwACJqlTAYCpU8BRwRtgA8AAYymBqV3AUcEoAaWkgqmJwFHBNcAAn20/Tqm7qcIAAIJVXQPAAP07AWADwABF5wExqdJgA8AARecAPRyp44Cp2sBRwRvAAEaQAQABNKn3A6n3quQAAAABAQGqCQAAAIJwYAPAAGMpAABgA8AA/aEBPgE9HKqsg6qlwFHCTVYBAAEcqrAuwABUUQIAAoSqxMBRwo2Bqs7AUcEoAMAAn3AAwAD9TADAAGLnTqr4qv8AAIF2YAPAAEXnATWrBQAAAQBgA8AAS0MBH6sFwABLUgQABGqrOWADwABLN8AA+qKAq0vAUcEbg6tdwFHCTRargharbS7AAFP+wACfS8AAn2Cepb5eADUAAAABAFsBF6uXhKuVwFHC7aWkgqurwFHBNcAAReqEAMBRwu09HKvKFqvCLoQmwACfXFYBAAGEq87AUcLdAMAAe/pKq9sBhKviwFHC3QbAAJ9xgaur8av+r2YAAMAAVEYAAAABA6wXr2YAAAADAgKsKAAAAB9gA8AAYtYArD8AAAClo2ADvTwAAaxnAAAApaRgA8AAQksBagBgA8AA/aF5YAPAAEXnAT4GPYisgcBRw6cWrJWArIzAUcOntH7AAGLYSaylIRass4CsqsBRw6e8Z8AAYuM+A06s36zjAAC7c2ADwABF5wE1rOUAAAEAYAPAAEuUAR+s5cAAS54CAAKArO/AUcOnFq0OFqz5LsAAU/7AAJ9LwACfYJ6lvl4ANQAAAAEAWwEXrSWDrSPAUcQgpaSCrTnAUcPBwABF6oMAwFHEID0crVoWrVIuhCbAAJ9cVgEAAYOtXsBRxBAAwAB7+kqtagGDrXHAUcQQP06tzq3gAADAAGQVYAPAAJ92ARyt6i7AAGQWwACfSwMAAoCuA8BRw6eBrg3AUcO0AaWkgq47wFHDwcAAn2dOrmGuZQAAu3NgA8AARecBNa5nAAABAGADwABLqAEfrmfAAEuzBAAEFq6Mg656wFHEpoJvwACfeBausoOuoMBRxKbAAFp5wACfeR+uxcAAhjQBAAGArtrAUcOnABavAhau7S7AAFP+wACfS8AAn2Cepb5eADUAAAABAFsBF68XhK8VwFHE86Wkgq8rwFHDwcAAReqEAMBRxPM9HK9KFq9CLoQmwACfXFYBAAGEr07AUcTjAMAAe/pKr1gBhK9fwFHE4wbAAJ9ngauva6+OwABBqAAAwABkFsAAn0sAAAABA6+mwABBqAAAAAMCAq+3AAAAgpRgA8AAYtYAr8oAAACCamADvTwAAa/rAAAApaRgA8AAQksBagBgA8AA/aF5YAPAAJ92AT4LQBawEYCwDMBRxc68Z8AAYuOwDLAmAE6xebGQAADAAGQXYAPAAPrRASpOsasAAAC6GmADwABi/QBOsdSx3wAAmrtdA8AA/i8BYAPAAGMpAR6x4cAAwaYAAWADwABjKQAAT7HtsfIAAAHAAGQYYQMBYAPAAGMpXAADsgW3BgAAAAEBAbIXAAAAgpRgA8AAYykAAFwBPgNOsj0AAADAAFe5YAPAAJ9MAEmyVyWyeBayaBayYIeyW8BRxouWUsAAYyu1FL04YAO9Kj4CPRWyksBRxp8IHLKnLsAAVjwBAAGBssHAUcXcAMAAn2w9jLLSwFHGMxyzDxay7xay4i62I8AAn0vAAJ9fpTvAAE2is3YBAAEmsygBFrMoFrMgh7MbwFHGi5ZSwABjK7UUvThgA70qALt1PgE9FbNRwFHGnwhqs35gA8AAn0zAAVwaR7OXFLOfwFHGnwgABAGz2mqz2mADwACfTMABXBoAPgI9HLP6hbPvwFHGQlYBAAGHs/7AUcaLAMAA/jxKtA8AAbQ8arQ8YAPAAJ9MwAFcMwA+A0m0VSEctGCBtFnAUcXcSAEAARa0axa0Yy6EJsAAn1zAAFPkwAB7WQDAAP3xPgI9HLWjhbWYwFHGQlYBAAGHtafAUcaLAMAA/jxKtboAPz2LtdjAUcYgKUq2AQABti5qti5gA8AAn0zAAVwBAD4CPYu2QsBRxiApSrZrAAABPgE9HLafFraWFraOLoQmwACfXKUQwAB7WKWlAgACFrbBh7a8wFHGi5ZSwABjKyfAAGQTALYFPRy3EoC3DcBRxc7AAEaQAQABhrcmwFHGbADAAGLnTrdOAAAAgIlgA8AARecATrd4AAAAwABaeWADwACGEQBJt4iDt4zAUcYgPgROt7m3wAAAgklgA8AARecBHLfiFrfUFrfMLoQmwACfXMAAU+HAAHtTwABULQEAAAGlpIK3/sBRxenAAKQHPY+4ncBRyHc1uLUAAAEAYAPAAEufAR+4tcAAS6cCAAIUuMrAUcijCQAWuOcWuNIuwABT/sAAn0vAAJ9gnqW+XgA1AAAAAQBbARe5AhS5AMBRyOgKAKWkgrkWwFHF6cAAReoUAMBRyOgKAD0cuTcWuS8uhCbAAJ9cVgEAAYe5O8BRyHcAwAB7+j0VuU/AUciGCB+5W8AAhiYBAAABwABSTYS5g8BRxjM/RrnSugG56AAAAIDtYAPAAGMpAIW59cBRxkI+A066D7ohAADAAEWuYAO9dQEcukMWujUWui0uhCbAAJ9cwABT4cAAe1PAAFQ6AQABFLpawFHJjAkAAMAApAlOunm6gAAAsIBgA8AARecBHLqjFrqKFrqCLoQmwACfXMAAU+HAAHtTwABEpAIAARS6rcBRyaQKAAGlpIK608BRxenAAKQGSbruHLr+h7rywFHId0gBAAErAMAA/fE+Aj2PuxHAUch3FLsfwFHJ4QsAPRW7L8BRyIYIH7s7wACGHgEAARS7XcBRyYwJAABJu3Ylu4QUu3rAUciGCABgA8AAhhg+Bk671rvpAADAAGQZYAPAAIYYASa71gEUu+vAUciGCABgA8AAhhhOvTi9RwAAwABkGmADwABF5wE1vUkAAAEAYAPAAEuoAR+9ScAAS7MEAASHvWDAUch3FL15wFHIhggAH72QwACGSgEAAAGFfTG9sWADwABi1gEWvcUUvbLAUcqFDACCcMAAhhoWvfIWvd0uwABT/sAAn0vAAJ9gnqW+XgA1AAAAAQBbARe+CxS+CcBRyrwNAKWkgr4fwFHF6cAAReoUAMBRyrwNAD0cvkIWvjouhCbAAJ9cVgEAARS+RsBRyqoNAADAAHv6PY++X8BRyHcfvnnAAEu8AwADFL6DwFHKqg0AFL6TwFHJ4QsAFr6wFr6bLsAAU/7AAJ9LwACfYJ6lvl4APRy+zha+xi6EJsAAn1xWAQABh77SwFHIdwDAAHv6PRW+6MBRyIYIH770wACGJgEAAAHAAEaSMb8oYAPAAGMpAha/PBS/KcBRyoUMAIJwwACGGhS/RsBRyYwJAEm/YCW/bhS/ZMBRyIYIAGADwACGHz4ETr+2v8QAAMAAZBtgA8AAhh8BJr+2ARS/xsBRyIYIAGADwACGHz2Pv9nAUch3H7/zwABLvAMAA4e//cBRyHcUwABACsBRyeELABbAAEAnFsAAQBIuwABT/sAAn0vAAJ9gnqW+XgA9HMAAQEUWwABAPS6EJsAAn1xWAQABh8AAQEnAUch3AMAAe/o9FcAAQF/AUciGCB/AAEBrwACGJgIAAALAAFJNFsAAQK4UwABAoMBRzBwMAMAAUk3AAIYhwABGklIDTgAAAAEAXQPAAP07AWADwABjKQExAGADwABjKQBGAAAAAAABAGADwABjKQAWwABA4RTAAEDTwFHMHAwAwABGksAAhiI9HAAUAMBRzN8NAFYBAAEUAMBRzP4OAADAAP1MPRwAFADAUczfDQBWAQABFMAAQOvAUcmMCQAAwAD9TBQAwFHM3w0APgE9HMAAQSAWwABBFxbAAEEPLoQmwACfXKUQwAB7WKWlAgACFsAAQTgUwABBLsBRyYwJAJZSwABjKyfAAF8FALYFSsAAQWMBH8AAQWrAAJ97AgACh8AAQY3AUch3FMAAQZrAUciGCAAABsAAn3KBq8AAQl3AAEJqwABJngAAwABU4gAAAAEDwABCfcAASZ4AAAAEAwPAAEKSAAAAnvFgA8AARecAwABCpQAAAIKUYAPAAGLWAMAAQq8AAACCa2ADwAD8lwABwABCzgAAAKWkYAPAAEJLAWoAYAPAAP2heWADwABF5wE+BEnAAELoFsAAQvwWwABC9BbAAELsLoQmwACfXHrAAHtXgriBVj4BSsAAQxYBHMAAQx0uwABkHAQAAoDAAEMqwFHN+oHAAEM0wFHOCgKF7RzAAENWgsAAQ1HAUc4aSAEAAWrAAENpYAPAAPyXCQDAAP27paSDwABDksBRzivAAJ9zP0nAAEOxHMAAQ7qBwABDtcBRzgpIAQABKwDAAP3xSsAAQ8MBgMAAQ8rAUc36Pz2JwABD2MBRzgoWwABD5IHAAEPfwFHOCrR+wABi2EnAAEPzIhbAAEP8gcAAQ/fAUc4Ks9PAAGLdACEWwABEFYHAAEQQwFHOCrLgwABi2T4FTsAARDfAAERFAAC6GmADwABi/QEmwABENwGBwABER8BRzgpgA8AAYv1OwABEYcAARGkAAJsZYAO+UQEcwABEihbAAER1LsAAU/7AAJ9LwACfYLW2AQABFsAARK6EwABEoMBRz0yWUsAAYv8Avn1OwABEy8AARNsAAMAAVdJgA8AARecBHMAARN0uwABV0wMAA4HAAEUJwFHOChbAAEUXFsAARQ8uhCbAAJ9cpaPAAHtyg8AARSbAUc4rAMAAn289HMAARUgWwABFQC6EJsAAn1xWAQABhsAARUzAUc+6AMAAe/pKwABFZAE1wABFbwAAAQBgA8AASfsBH8AARW/AAEoWBQAFgcAARaHAUc4KgsAARafAUc4ahcAARa3AUc91gMAARbbAUc36hsAARcDAUc+6ADUAAAABAFsBF8AARduHwABF2cBR0DWlpIPAAEXvwFHOK8AAReqHAMBR0DVJwABGDRbAAEYWgcAARhHAUc4Ko+vAAGLgPgNOwABGPMAARkQAAJsZYAO+UQEWwABGT4DAAEZGwFHN+rnpwABGJ07AAEZzwABGgAAAqVhgA8AARecBHMAARowuwABV0AIAAibAAEalAYHAAEalwFHOCmADwABjKRbAAEazFsAARqsuhCbAAJ9cpaPAAHtyAMAAn21KwABGyQE1wABG1AAAAQBgA8AASfsBH8AARtTAAEoWBQAFgcAARwbAUc4KgsAARwzAUc4ahMAARxLAUdDFgMAARxvAUc36hcAARyXAUdDrADUAAAABAFsBF8AARz2GwABHO8BR0UOlpIPAAEdRwFHOK8AAReqGAMBR0UNJwABHbyIWwABHeIHAAEdzwFHOCroVwABi3wEWwABHj4HAAEeKwFHOCroXwABi4j4DTsAAR7DAAEe8AADAAGQdYAPAAEXnARzAAEfILsAAVFECAAKBwABH3MBRzgoWwABH6hbAAEfiLoQmwACfXKWjwAB7cgDAAJ9wTsAASFDAAEhcAADAAGQeYAO+UQEWwABIZ4DAAEhewFHN+rnpwABGJ0rAAEh+ATXAAEiJAAABAGADwABJ+wEfwABIicAAShYFAAWBwABIu8BRzgqCwABIwcBRzhqFwABIx8BR0jGAwABI1MBRzfqEwABI3sBR0ekANQAAAAEAWwEXwABI9YbAAEjzwFHSX6Wkg8AASQnAUc4rwABF6oYAwFHSXz4BSsAASS8BNcAAST8AAAEAYAPAAEXnARzAAEk/gMAASTbAUc36uhQDAAMWwABJSy62I8AAn0vAAJ9fgcAASVnAUc4KgsAASV/AUc4aAMAARnE1AAAAAQBbARfAAElvhMAASW3AUdLcpaSDwABJg8BRzivAAEXqhADAUdLcBsAAn3OBq8AASkzAAEpZwABNyAAAwABkHAAAAAEDwABKZcAATcgAAAAEAgLAAEpzAAAAnvFgA8AARecAwABKhgAAAIKUYAPAAGLWAALAAEqYAAAAhe1gA8AA+tEBagBgA8AA/aF5wABKtwAAAKWkYAPAAEJLAWoAYAPAAP2heWADwABF5wE+CUnAAErRHMAAStqBwABK1cBR04xIAQABKwDAAP3xSsAASuMBgMAASurAUdN8Pz2JwABK+MBR04wWwABLBIHAAEr/wFHTjLR+wABi2EnAAEsUFsAASx2BwABLGMBR04yHkMAAYttKwABLKAGAwABLL8BR03w/ScAASz0WwABLRoHAAEtBwFHTjLoWwABi3ErAAEtOAYDAAEtVwFHTfD9JwABLYxzAAEtsgcAAS2fAUdOMSAEAARbAAEuLFsAAS3wWwABLby62I8AAn0vAAJ9fs7fAAE2khiC4ygDAAP3xSsAAS5cBgMAAS57AUdN8P07AAEu6wABLxgAAwABkHWADwABF5wEcwABLyC7AAFRGAwACgcAAS+vAUdOMFsAAS/kWwABL8S6EJsAAn1ylo8AAe3IBpaSDwABMI8BR07bAAJ9xTsAATFbAAExiAACuS2ADvlQBHMAATIEWwABMbC7AAFP+wACfS8AAn2C1rwIAAYHAAEyWwFHTjAGGeCm+eE7AAEy/wABMzwAAuelgA75RARzAAEzmFsAATNEuwABT/sAAn0vAAJ9gly8CAAIWwABNBYDAAEz8wFHTfLnpwABGJxbAAE0ihcAATRbAUdUZtZ2+VgC+qErAAE02ATXAAE09AAABAGADwABLYgEfwABNPcAAS3MGAAaAwABNT8BR03yEwABNWcBR1MaFwABNZsBR1RmBwABNc8BR04yCwABNecBR052GwABNhsBR1VYANQAAAAEAWwEXwABNn4fAAE2dwFHVs6Wkg8AATbPAUdO2wABF6ocAwFHVswAAUa6sAFGu7wBRrzYAUbCRAFGxXQBRszQAUbRvAFG1sABRt00AUbhKAFG53wBRuhUAUb0fAFG/FgBRwPkAUcOFAFHFpABRzc4AUdNQAFHWMAAAABMCwACfdoGrwABNzcAATdPAAE6MA8AAZB8AAAFgAcAA/eQAAAIEwACfeIGrwABODcAAThcJgm8AYAPAAEXnAATAAJ95gavAAE46wABOQwnAAFp5AGADwACGEQABBcAAn3uBq8AATkfAAE5HwABOigAAAAPAAE5pwABOigAAAAICAsAATm8AAASCb2ADwABF5wDAAE6AAAAEwABaeWADwACGEQAAYAPAAJ92AT8DCAHAAJ94gADAUdcFCAHAAJ95gQDAUdcVCQHAAE5HwAD9+gAAAAAAAABR11gAAAAAAAABgasAUddjAFGshgBRrisAUdaFAFHXYQAAAAMAUddjAAAAAAACBMAAn3wAgawAABuA2gAAgi6CCACBAwAAwACFhgAAgR0AAKSLAACBNgAAuEgAAIFVAADAAGlXsX0AgZQAAMAAYQ8AAIG3AAC9FQAAgdsAAMAAhfgAAIH8AADAAGLRAACCHQAAvjYAAIJOAADAAEGSAACCbwAAwACPQAAAgo4AAMAAn0QAAIK4AADAAJy4AACC0gAAwABuLAAAgv4AAMAAclgAAIMlAADAAGtuAAEBAcAATLSDWAAAwAB/gwAAg3wAAMAAZw8AAIOeAACA+wAAg7gAAMAAS70AAIPcAADAAHhsAACEBAAAgeAAAIQgAADAAHMJAACEPwAAwACgewAAhF0AAMAAnOwAAIR9AADAAKFQAAAAAAAEAsAAn32BrIWhhafAAQqNA8AAZCAAAAFdAZohAWADwACc8QAAFgTAAJ+AgayF/IYECbJkwACffABgA4EUAATAAJ+BgayGHIYoCbYjwACffABgA8AAf4QABMAAn4KBrIZBhkoJwABkIcAAn3wAYAPAAHMNAATAAJ+DgayGX4ZlCcAAUbfAAJ98AGADwAChXgAEwACfhIGshnyGiwnAAGQiwACffABgA708AATAAJ+FgayGnYaqCcAAZCPAAJ98AGADgksABMAAn4aBrIbGhtAJwABT+8AAn3wAYAPAAHKaAATAAJ+HgayG+YcECcAARMrAAJ98AGADwABBpQAEwACfiIGshxOHKwnAAGQkwACffABgA8AA+tEABMAAn4mBrIc7h0kYwABkJcAAn3wAYAPAAKA1AATAAJ+KgayHWIdzGMAAZCbAAJ98AGADwACgNQErBMAAn4uBrIeCh54YwABkJ8AAn3wAYAPAAKA1ASsEwACfjIGsjteO6gnAAGQowACffABgA8AAeKoABMAAn42BrI8Wj0kJwABkKcAAn3wAXQPAAP1tAmADwACGAl0DwAD9OwFgA8AAoDUBMo9HYAPAAIYCXQPAAP07AWADwACgNQAEwACfjoGsj3WPqwnAAGQqwACffABdA8AA/W0CYAPAAIYCXQPAAP07AWADwACgNQEyj6lgA8AAhgJdA8AA/TsBYAPAAKA1AATAAJ+PgayPv4/KGMAAU/HAAJ98AGADwACc8QErBMAAn5CBrI/fkAQJwABjHMAAn3wAXQPAAP4vAWADvXUBHo/4wADBpgABYAO9dQAABMAAn5GBrJAmkDcJwABkK8AAn3wAXQPAAP1tAmADvXVgA71OAATAAJ+SgayQVZBoCcAAZCzAAJ98AGADwACfRQAEwACfk4GskOmRBBjAAGQtwACffABgA8AA+tEBKgTAAJ+UgayWV5ZlGMAAZC7AAJ98AGADwAD8lwGTBMAAn5WBrKR3pIAYhOfAAJ98AGADwACc8QErAQXAAKAYgayRCZEJlUUAAAADkR+VRQAAAAkHCZEsAAAEsmRgA4EUAJFBAAAEtiNgA8AAf4QAkVoAAATAAGQhYAPAAHMNAJFwAAAEwABkImADvTwAkYwAAATAAGQjYAOCSwCRpgAABMAAU/tgA8AAcpoAkb0AAATAAGQsYAPAAJ9FAJHeAAAEwABkJWADwACgNQFqAGADwAD9oXmSDAAAAMAAZC9dA8AA/W0CYAO9dWADvU4BagBgA8AA/aF5AGADwACffQE+AkmUxSEclNAWlMkuwABkMMAAn3zAAJ+YSAEAASsAwAD98UqU2QA/PReU5i7AAGQwwACffB+U88AAoFUBAAABwABkMRaVKC7AAGQkwACffMAAn4jAAJ+hDggBwACfgIAAwFHbtQgBwACfgYEAwFHbwQgBwACfgoIAwFHbzwgBwACfhIMAwFHb3wgBwACfhYQAwFHb7QgBwACfhoUAwFHb+wgBwACfkoYAwFHcCwgBwACfiYcAwFHcGwgAwACfgxaSP4KSNcBR28+FfcAAcxcIAMAAn4cckmuCkmHAUdvPwABPkAEAAYOSeMBR298AwABzJwgAwACfjCMlkySDkxTAUdvfYAO9URyTcxaTToKTRMBR28+lT8AAcxm35wEAARSTicBR298DAWADvVEAwABDNR+TrMAAeMEBAAGDk8TAUdvfAAFgA8AAeKoIAMAAn4gllAyEk/7AUdvtYAODzwgAwACfkSMhHJRRFJRAwFHcNAgASAEAASsAwAD98R6Ua8AAwZ8BAmADvXVgA71OARSUiMBR3DQIAAAylLxgA711YAO9TgABXQPAAP1tAmADvXVgA71OCQGRCZpXAAAAAHsGwACfmIGsiCaINYhbAQDAAGQwwACffAAAAAEDiDyIWwAAAAAAAABgA8AAoDUBPgFKiEIBFohJLsAAZCXAAJ98wACfiQbAAJ+hgayJpImtii0CAMAAZDDAAJ98AAAAAQOJs4otAAAAAQEBib8AAACAlmADwACgNQAAXAE+Aj0XicwuwABkJcAAn3yAid3AUd6HwACfiT0XieguwABkJsAAn3wXigYuwABkJ8AAn3wrwACfi8AAn4oGwACfmYGsixKLIYtrAQDAAGQywACffAAAAAEDizWLawAAAAAAAABgA8AAoDUBSos+ATUAAAABAGADwACgNQEWiz4uwABkJsAAn3zAAJ+KIxyLWoAAwFHfB0gBAAErAAAWi10uwABkJcAAn3zAAJ+JgADAUd8HAWADwACgNQbAAJ+agayMUYxgjKwBAMAAZDPAAJ98AAAAAQOMdYysAAAAAAAAAGADwACgNQFKjH4BNQAAAAEAYAPAAKA1ARaMfi7AAGQnwACffMAAn4sjHIybgADAUd+ESAEAASsAABaMni7AAGQlwACffMAAn4mAAMBR34QBYAPAAKA1BsAAn6SBrI3pje6OuQAAwABkNMAAn3wAAAABA438jrkAAAADAwOODwAAAJaDYAPAAKA1AI4gAAAAwABkNWADwACgNQCONQAAAMAAZDZgA8AAoDUAAFwBPgM9F45GLsAAZCXAAJ98gI5XwFHf9MAAn4k9F45hLsAAZCbAAJ98gY5/wFHgAsAAn4o9F46NLsAAZCfAAJ98go6swFHgEsAAn4sGwACfm4GslUqVXZWDAQC4EsAAn3wAAAABA5VplYMAAAAAAAAAYAPAAHJeAUqVbAEWlXkWlWwutiPAAJ98wACfgbQRwAB/mQbAAJ+cgayViJWYlcwBAMAAU+bAAJ98AAAAAQOVq5XMAAAAAAAAAGADwACFhwFKla4BFpW7FpWuLrYjwACffMAAn4G8rcAAf54GwACfpYGsldGV2pZOAADAAFQUwACffAAAAAEDleiWTgAAAAEBAZX3AAAAg/NgA4TZAABgA8AAYtYBPgFKlgMBHJYWFpYKLrgSwACffMAAn5vAAEyzAQABHJY2FpYiLsAAZCzAAJ98wACfkoV8AQABgJZEwFHhJQDAAJ9HAMAAcmQGwACfnYGslmqWc5aLAQDAAE/oAAAAAQOWepaLAAAAAAAAAGADwAD60QFKln0BHJaIFpZ9LsAAZC7AAJ98wACflICXAQABkwDAAP3HBsAAn6aBrJbqlu+X4AAAwABkN8AAn3wAAAABA5cDl+AAAAABAQGXEQAAAIJqYAO9PAAAYAPAAPrRAT4DTpcrly8AAJn6YAO9KgE1AAAAAQBgA8AAYv0BHJc9FpcxLrgSwACffMAAn5u4WAEAARaXTy7AAGQiwACffMAAn4QAwAByfSMcl2GBAMBR4hdIAQABKwAAKxaXYYEAwFHiF5ZSwABi/wFgA70qSZduHJd2gZdywFHiCUgBAAErAMAA/fFKl38BKj9Kl5EBHJe0FpelFpeYLrYjwACffMAAn4GH6MAAf5ibRgIAAhaXyICXwcBR4fKFCr1KgZfYwFHiCQDAAHF3BsAAn6eBrJmsmbGe0QAAwABkOMAAn3wAAAABA5nEntEAAAACAgKZzgAAAKU0YAPAAEvPAJnmAAAArSxgA75RAABcAT4CSZnyFpn9Fpn2LsAAZDDAAJ98wACfmMAAZDnAAKBBPgFKmk4AP0maYByaehaabhaaZC7AAGQhwACffMAAn4KlIsAAcxK2vAIAAoCajsBR4vSBmpjAUeMCAMAATb8+AT0cmx4WmxcuwABkMMAAn3zAAJ+YwABkOgAAAADAAKBDPgE9HJtQFptGLsAAZCHAAJ98wACfgsAAT9wDAAOAm2fAUeL0gZtxwFHjAjSbdwObd57GAAAAAQEBm4UAAACWUmADvTwAAGADwAD60QE+A0mbmCIhHJukgpucwFHjykgBAAErAMAA/fEAFpu3gpuvwFHjyoeOvUM+A06b2JveAACEm2ADvU4BJpvYAYKb4MBR48pgA71OSZvzIiIiIiEWnAGAm/jAUeL0hUTAAEvgABycGy7AAGQ3wACffAEAAYOcMMBR5AsAwACfpgAWnE6DnEjAUeQLrK+9RwAcnIQcnHMWnGwuwABkMMAAn3zAAJ+YmPMBAAGDnH3AUeQLAMAAoEVIAQABKwDAAP3xABycxR6cncAAclsCAAIWnLEuuBLAAJ98wACfm4OcvsBR5AsASAEAASsAwAD98T4BPRydghadeC7AAGQhwACffMAAn4LAAE/kAgACg52UwFHkCxadohadmy7AAFG3wACffMAAn4OFgMAAoYwAwABzKz9KnfoBKT89HJ6UFp6NLsAAZDDAAJ98wACfmMAAZDoAAAAAwACgQ0qesQEqAMAAcyIGwACfsYGsntae5qHdAACCnwAAAAEDnumh3QAAAAAAAABgA8AAnPEBPgRJnvIWnwYWnvYuwABkIsAAn3zAAJ+Eh469Qz4BSZ8XIhyfKRafGy7AAGQjwACffMAAn4VIAQABKwDAAP3xASWfQhafNC7AAGQjwACffMAAn4VgA4bMPgFKn9kBFp/nFp/gLsAAUbfAAJ98wACfg4WAwAChjD8/TqERoRsAAMAAVG1gA8AAhaEBHKEwFqEdLsAAU+bAAJ98wACfnMAAT5MBAAEWoT0uwABkIsAAn3zAAJ+EAMAAhY89HKFdgKFTwFHl3sAAVrgBAAE0oXIDoXKhtgAAAAICAqFzAAAAgnBgA711AKF9AAAAhJtgA71OAABgA8AA/aEBPgE9HKGdFqGMLsAAZCvAAJ98wACfkYC/AgACgaGewFHmPoKhqsBR5koAwAD9ggDAAIWnSqG+ARyhxS6awgEAARahyy7AAGQjwACffMAAn4UAwACftAbAAJ+ygayh4qHno5kAAMAAZDsAAAABA6H7o5kAAAACAgKiCwAAAIJuYAO9UQCiJAAAAFtgA8AAoKYAAGADwAD60QE+Ak6iSKJbAAC1F2ADvXgBFqJmgKJdwFHm1bUXvVRKon8BIiIcoqIWopsWopCBoobAUebhhaPAAKCoYcAA/WtjAQABFqLDgqKwwFHm+bUhvXsAwAD9xQEcov0WovYWouuBouHAUebhhaPAAKCoYcAA/WuAlwEAARajEoKi/8BR5vmEx718AMAA/ccBHKNUFqNCFqM8gaMywFHm4YVtwACgqYNowAD9j4HWAQABNKNYA6NYo5QAAAABAQGjWQAAAIC9YAPAAP5+AABgA8AA+tEBSqNiASEco4YWo3aCo2PAUeb5hMi9fYMcAQABg6OPwFHnsADAAP0IAMAA/Q4GwACfs4Gso56jo6RiAADAAE/jAAAAAQOjs6RiAAAAAQEBo8QAAACClGADwACc8QAAXAE+Ak6j36PuAADAAGQ8YAO9UQEmo98BFqPwLsAAZCLAAJ98wACfhGADvVE9F6QFLsAAU/HAAJ98HKQlFqQbLsAAZCHAAJ98wACfgsAAT9oDAAOBpDzAUegoFqRMLsAAU/HAAJ98wACfj4CkWcBR6BQAwABzIcAAn48GwACfnoGspISkmKXKAQCEyQAAAAEDpKGlygAAAAAAAABgA8AAnPEBPgNJpKchHKS1FqSrLoTnwACffMAAn5VIAQABKwDAAP3xSqS+ARakxS6E58AAn3zAAJ+VP06k4KTkAACZ+mADvSoBNQAAAAEAYAPAAGL9ARyk8hak5i64EsAAn3zAAJ+buFgBAAEWpQQuwABkIsAAn3zAAJ+EAMAAcn0jHKUWgADAUekISAEAASsAACsWpRaAAMBR6QiWUsAAYv8BYAO9KkmlIxylNBalJy62I8AAn3zAAJ+Bm0gBAAGApULAUej6AMAAf6g+AUqlUAEXpVcuhOfAAJ98HKVqFqVjLsAAUbfAAJ98wACfg7aRAQABgKV5wFHo+gDAAKG0wACflT4BSqWSARelmS6E58AAn3wcpawWpaUuwABRt8AAn3zAAJ+DtpABAAGApbzAUej6AMAAobXAAJ+VBsAAn7SBrKXPpd+m4QAAmsIAAAABA6XkpuEAAAACAQGl7QAAAIPzYAOCSwABpfkAAADAAGQ9YAPAAPrRAWqmC2ADwAD60QBgA8AAnPEBPgVOph2mMwAAwABkPmADwAD60QEWpjUuwABkLcAAn3zAAJ+TPRemTi7AAGQtwACffIGmZMBR6ifAAJ+TTqZ+poUAAIF2WwE1AAAAAQBgA4JLAYCmh8BR6hojHKaNgwDAUeqQSAEAASsAACscpo2DAMBR6pCEUgEAAS4Agk0BWz0Xpp8uwABkLcAAn3yCprXAUepLwACfk0qm0AEmptABg6bXwFHqhWADwACc8QbAAJ+1gaym5qbrp0cAAIdEAAAAAQOm9KdHAAAAAQEBpwMAAACHQ10DwAD9OwFgA4JLAABcAT4CSacQHKcagKcUwFHrFEgBAAErAMAA/WVKpyMAPz0cpzWApy/AUesUg/0BAAEWpz0umsLAAJ+0AMAA/QkGwACftoGsp0ynUamxAADAAE70AAAAAQOnYKmxAAAAAgEBp3gAAACD82ADiH4AAaeEAAAAoXFgA8AA+tEBagBgA8AA/aF5XAE+BE6nnaejAACfB2ADvXUBHKewFqelLsAAU/vAAJ98wACfhsAATKwBAAGAp8HAUeuJAMAAcp5Op9Wn2gAAgpRgA8AAYtYBHKfnFqfcLsAAU/vAAJ98wACfhsAATLICAAIWp/QuuBLAAJ98wACfm4KoAcBR67IAwAByoT0cqBQWqA0uwABkMMAAn3zAAJ+YwABUVAYABhaoIC7AAGQhwACffMAAn4IWqCsuwABkK8AAn3zAAJ+Rgqg+wFHrshyoVxaoTS7AAGQhwACffMAAn4LAAE/yAQABgqhnwFHrsgDAAHM2gKhvwFHriYOodcBR6+YAwACgSEmogIGohMBR65Y+A06oqAAAAIKUYAPAAJzxAEmotCEcqMkWqL2AqLjAUeuJhROIhkgBAAErAMAA/fE+AT2MqNzAUeyxHKjjLprCAQABFqjugKjpwFHriYUTiIYAwACftD4BPYypE8BR7LEWqSEWqRouwABRt8AAn3zAAJ+DhYDAAKGMPRypQxapOS7AAGQhwACffMAAn4LAAE/fAwACgqldwFHrsoSpZMBR7LEBhQ0WqZYWqYYuwABkIsAAn3zAAJ+EhQ29QcAAcyU/BsAAn7eBrKm2qdKwMAAAhSkBaqm3YAPAAP3kAgAAAQOp4rAwAAAAAQEBqfIAAACD82ADg88AAGADwACc8QE+Cj0cqf4uwABkPwEAARaqFICqD8BR7ZmCboPTAMAAn7w9HKo1FqoogKojwFHtmYUmg9SD/QEAARaqPS6awsAAn7QAwAD9CT0cqkkumsIBAAEWql0WqlSAqk/AUe2Zgm6D04JthMQAwACftE6qdap5AACZ+mADvSoBFqqLFqp7LsAAZCLAAJ98wACfhIUKvUpJqp8hIhaqtxaqqoCqpcBR7ZmFJoPUg7fAAP0eACWq5Raq3xaq0oCqzcBR7ZmFJoPUgx7AAP0fYAOEjT4BPRyrpBarkRarhS64EsAAn3zAAJ+bpTvAAHJis3ECAAKBq7zAUe4ZNKvLA6vLrgQAAAABAQGr2QAAAIJqYAO9PAAAYAPAAP2hAT4BSavrIiIWq/aCq+/AUe6vh469QwAWrAiCrAHAUe6vhQ29QQAWrCOCrBzAUe6vrK+9Rz4FTqxNrFIAAIKUYAPAAJzxARysWxasVC7AAGQwwACffMAAn5iY8wEAASasZQGCrGXAUe6vYAO9TgDAAKBFTqyJrJQAAMAATMFgA8AAcsABHKyiFqyWLrgSwACffMAAn5vAAE+qAQABgqy2wFHurwDAAHJ7QBys4Bas24Ss0MBR7zWCa8AAcsJIAQABaqzuYAPAAHKvwAFKAwDAAP3xrNCs9QBOrQutEAAAg/NgA4OcASatCwEWrR2ErRLAUe81g/PAAHLDYAODnEmtLSIcrTaDrTHAUe75SAEAASsAwAD98QAiHK1hFq1Vha1QwFHvmoUTg6BIAQABKwDAAP3xASWtjxatg4WtfsBR75qFE4OgYAOGzD4BPRytuxatsS7AAGQhwACffMAAn4LAAE/kAgACJq3NAYKtzcBR7q9gA71OFq3cFq3VLsAAUbfAAJ98wACfg4WAwAChjADAAHMrPz8Au24/PRyuGxauES7AAGQhwACffMAAn4LAAE/hAgACJq4tARauLS7AAGQiwACffMAAn4RgA71pFq5FFq4+LsAAZDDAAJ98wACfmMAAZDnAAKBBAMAAcylJrloWrmKBrl7AUe4ZhB+9Lj4BSa52HK6WFq6HFq56LrYjwACffMAAn4GH6MAAf5iqbgEAAYGupcBR7hkAwABxcj4BPReutS7AAFPxwACffByuyhauwy7AAFG3wACffMAAn4O2kAEAAYGu2sBR7hkAwAChtcAAn48+AT0Xr2UuwABT8cAAn3wcr3oWr3MuwABRt8AAn3zAAJ+Dto4AAAAAwACht8AAn48+AT0Xr6UuwABT8cAAn3wcr7oWr7MuwABRt8AAn3zAAJ+Dto8BAAGBr8fAUe4ZAMAAobbAAJ+PQBav6Rav3i7AAGQpwACffMAAn42BVcAA/ZKv3q/wAEAWsAwWr/4uwABkKsAAn3zAAJ+OgVXAAP2Sr/6wEwBKsBoBFrAhLsAAU/HAAJ98wACfjwbAAJ+4gaywNbBBsUoAAIVYAWqwNmADwAD95AIAAAEDsFaxSgAAAAEBAbBrAAAAg/NgA4RvAABgA8AAnPEBPgVOsIewjwAAq7lgA8AAnPEBHLCRLprCAQABFrCcgLCXwFHyCICWhHIAwACftE6wtLC6AACEm2ADvU4BHLDIFrC8LrgSwACffMAAn5vAAE2KAQABFrDWgLDRwFHyCISbhHQAwABybj0csOkWsOIuwABkMMAAn3zAAJ+YwABkQAIAAoKw9cBR8kuBsPzAUfIfAMAAoEY9HLEUFrEKLsAAZCHAAJ98wACfgsAAT+QCAAKCsSbAUfJLgbEtwFHyHwDAAHMrSrE7ASsGwACfuYGssU+xW7PSAACFWgFqsVBgA8AA/eQCAAABA7Fws9IAAAABAQGxhQAAAIPzYAOEfgAAYAPAAJzxAT4ITrGjsa8AAJkIYAO9aQEcsb0WsbEuuBLAAJ98wACfm6hYAQABFrHRgLHMwFHzDoJJhIMAwABybU6x7bH3AABbYAPAAKCmARyx+S7AAGRBAQABFrIPgLIKwFHzDluEgQDAAJ/kTrIosjEAAKU0YAPAAEvPAR6yN8AAS/cDAANqsk1gA8AAS77AAPsLFrJfgbJTwFHzJadxvT4csn8WsnMuuBLAAJ98wACfm8AAT58BAAEWspWAspDAUfMOW4SBAMAAcmkATrK0srkAAK0sYAO+UQEcsscWsrsuwABEysAAn3zAAJ+HtyIBAAGAstLAUfMOAMAAQa49HLLdLsAAZEIGAAaAsv7AUfMOFrMJgLMEwFHzDluEgYOzFMBR84iEsx7AUfPogbMkwFHzJYKzMcBR81wAwACf7j0cs0wWs0IuwABkIcAAn3zAAJ+CwABKngEAAYGzVMBR8yUAwABzHUmzZhyzdBazai7AAGQhwACffMAAn4LAAE/gAQABgbOHwFHzJQDAAHMoPgE9HLOkFrOdLsAAZDDAAJ98wACfmMAAZDoAAAAAwACgQz9Ks8MBKwbAAJ+6gayz17PjtmYAAIVcAWqz2GADwAD95AIAAAEDs/62ZgAAAAEBAbQZAAAAg/NgA4SNAABgA8AAnPEBPghOtDe0QwAAmQhgA71pARy0URa0RS64EsAAn3zAAJ+bqFgBAAEWtGWAtGDAUfT8gkmEkgDAAHJtTrSBtIsAAFtgA8AAoKYBHLSNLsAAZEEBAAEWtKOAtJ7AUfT8W4SQAMAAn+ROtLy0xQAApTRgA8AAS88BHrTLwABL9wMAA2q04WADwABLvsAA+wsWtPOBtOfAUfUTp3G9Phy1Exa1By64EsAAn3zAAJ+bwABPnwEAARa1KYC1JMBR9PxbhJAAwAByaQBOtUi1TQAArSxgA75RARy1Wxa1Ty7AAETKwACffMAAn4e3IgEAAYC1ZsBR9PwAwABBrj0ctXEuwABkQgYABoC1ksBR9PwWtZ2AtZjAUfT8W4SQg7WowFH1doS1ssBR9daBtbjAUfUTgrXFwFH1SgDAAJ/uPRy14Ba11i7AAGQhwACffMAAn4LAAEqeAQABgbXowFH1EwDAAHMdSbX6HLYIFrX+LsAAZCHAAJ98wACfgsAAT+ABAAGBthvAUfUTAMAAcyg+AT0ctjgWtjEuwABkMMAAn3zAAJ+YwABkOgAAAADAAKBDP0q2VwErBsAAn7uBrLZrtne21gAAhV4BarZsYAPAAP3kAgAAAQO2jLbWAAAAAQEBtqEAAACD82ADhJwAAGADwACc8QE+Aj0ctq0umsIBAAEWtriAtrPAUfbqgnCEngDAAJ+0SrbHASsGwACfvIGsttu24LhjAADAAGQ/AAAAAQO28LhjAAAAAQEBtwEAAACD82ADhK4AAFwBPgNOtxG3GgAAgbNgA8AA/JcBk0a3I7dntz8AAACA7WADiH4AFrdRgLdMwFH3RITHhLU+Aj0ct28uwABO9AIAAYK3f8BR92sBoXEct6mBt6DAUfdWgW0BAAEWt7GAt6zAUfdEhS6EtADAAP3IwACftj2Jt9DAUfdWHLfYgbfQwFH3VmQBAAGUAMAA/b1Gt+a4JbgCAAAAgO1gA4h+ABa4FIC4D8BR90SEyIS2PgE9HLgtLsAATvQCAAGCuD3AUffkAaFxKcAAn7YGwACfvYGsuGi4hL51AACFcAFquGlgA8AA/eQCAAABA7iVvnUAAAABAQG4pgAAAIPzYAOErgAAYAPAAJzxAT4HPRy4si7AAGQ/AQABgLjDwFH4RQDAAJ+8SbjPHLjrFrjgFrjTLrYjwACffMAAn4G4LcAAf4fAAEw6AQABFrj6LsAAZCLAAJ98wACfhADAAGrQPgFKuXgBFrmGFrl/LsAAUbfAAJ98wACfg56lwAChnz89HLmeLprCAQABFrmpgLmkwFH4RYJthMQAwACftEFHubQWucGAubzAUfhFhWOEsQUBuepquepgA4TKhQ0APgJJufgcuggWufwuwABT8cAAn3zAAJ+PSAEAASsAwAD98T4BPRe6QS7AAFPxwACffCMWulYWuk8uwABkMMAAn3zAAJ+YwABkQ8AAoDscun8WunguwABRt8AAn3zAAJ+Dto4AAAAAwAChtxa6vBa6tS7AAFG3wACffMAAn4OFgMAAoYwBYAPAAJzxwACfj0m61SEWuuEWutouwABkMMAAn3zAAJ+YwABkQ8AAoDs+AT0cu3UuwABP4wEAARa7jRa7hi7AAFG3wACffMAAn4OFgMAAoYwAwACfsz9Cu6oAAbvMarvMYAOEyoUiAD4CPRy8by7AAE/jAQABFryHFryALsAAUbfAAJ98wACfg7WswAChoQDAAJ+zQrymAAG8yGq8yGADhMqFMQA+Aj0cvNcuwABP4wEAARa87xa86C7AAFG3wACffMAAn4O1rcAAoaAAwACfs0K9CQABvStqvStgA4TKhUAAPgI9HL0+LsAAT+MBAAEWvVYWvU8uwABRt8AAn3zAAJ+Dta7AAKGiAMAAn7NCvXQAAb2Var2VYAOEyoVPAD4CPR69q7YfAgACFr3BLsAAZCLAAJ98wACfhCS+AAInwABY+xa984C97sBR+EWFY4SxAEK+CwBAFr4uFr4jLsAAZCnAAJ98wACfjYFVwAD9kr4jvjUAQBa+URa+Qy7AAGQqwACffMAAn46BVcAA/ZK+Q75YAEq+XwEWvmYuwABT8cAAn3zAAJ+PBsAAn76BrL56vpa/CwAAhcABar57YAPAAP3kAgAAAQO+qL8LAAAAAQEBvroAAACD82ADhg8AAGADwACc8QE+AUq+xgEcvs0uwABkRAEAARy+8C6awgEAARa++4C+9sBR+16Cb4YRAMAAn7QAwACfvwbAAJ+/gay/EL8gwABAnQAAwABkRAAAAAEDv0LAAECdAAAAAQEBv1oAAACs7WADwACc8QAAYAPAAJzxAT4BSsAAQIQBgMAAQIvAUfvKBsAAn8CBrMAAQKLAAEC+wABBSgAAmAwBasAAQKNgA8AA/eQCAAABA8AAQM/AAEFKAAAAAQEBwABA3gAAAIPzYAOE2QAAYAPAAJzxAT4BPTDAAEDqH8AAQPTAAPwwAQABJMAAQUUFJ8AAZEWAwABBKcBR/Ccng08WwABBN4DAAEEywFH8J4WWwAD9+CeDJgAGwACfwYGswABBT8AAQVvAAEHkAACYFAFqwABBUGADwAD95AIAAAEDwABBa8AAQeQAAAABAQHAAEF5AAAAg/NgA4ePAABgA8AAnPEBPgE9MMAAQYUfwABBj8AA/DABAAEkwABB3wUnwABkRoDAAEHDwFH8tieDTxbAAEHRgMAAQczAUfy2hZbAAP34J4MmAAbAAJ/CgazAAEHpwABCBcAAQloAAIX6AWrAAEHqYAPAAP3kAgAAAQPAAEIVwABCWgAAAAEBAcAAQiUAAACjLGADhswAAGADwACc8QE+AUrAAEI0ARzAAEI7LsAAZEcAAAAAwACfwwbAAJ/DgazAAEJfwABCb8AAQqsAAMAAZEcAAAABA8AAQojAAEKrAAAAAAAAAGADwACc8QE+AUrAAEKRARbAAEKfFsAAQpguwABRt8AAn3zAAJ+DhYDAAKGMBsAAn8SBrMAAQrDAAEK8wABDYQAAhicBasAAQrFgA8AA/eQCAAABA8AAQsbAAENhAAAAAQEBwABC0AAAAJoyYAOHnwAAYAPAAJzxAT4CQUbAAELdwABDDsAAQu8AAACFYGADh48AFsAAQwKAwABC/MBR/gSGJYehPgI9HMAAQxYumsIBAAGBwABDHMBR/iYAwACftEnAAEMuFsAAQzkWwABDMi7AAGQwwACffMAAn5jAAGRIwACgQELAAENBAD9KwABDUgErBsAAn8WBrMAAQ2bAAENywABD2QAAhiMBasAAQ2dgA8AA/eQCAAABA8AAQ4rAAEPZAAAAAQEBwABDogAAAIPzYAOHlQAAYAPAAJzxAT4CPRzAAEOuLprCAQABFsAAQ7mAwABDtMBR/sqCb4eXAMAAn7RKwABDygErBsAAn8aBrMAAQ97AAEPqwABEQQAAhiwBasAAQ99gA8AA/eQCAAABA8AAQ/3AAERBAAAAAQEBwABEEAAAAIPzYAOHtQAAYAPAAJzxAT4BSsAARDIBKwbAAJ/HgazAAERGwABEUsAAR5QAAIYwAWrAAERHYAPAAP3kAgAAAQPAAERmwABHlAAAAAEBAcAARHoAAACD82ADh70AAGADwACc8QE+C0nAAETDIRbAAETRFsAARMgusmTAAJ98wACfgIL+gTw+AUrAAETvASs/TsAARazAAEW4AADAAGRJYAPAAKA1ARbAAEW6LsAAZDDAAJ98wACfmD0cwABFxi7AAGRKAQABFsAARduAwABF1sBR/5eFyoe/AMAAn/xOwABF9sAARg0AAMAATsZgA8AAoDUBFsAARg8uwABkMsAAn3zAAJ+ZTsAARjPAAEZLAADAAE7HYAPAAKA1ARbAAEZNLsAAZDPAAJ98wACfmj0XwABGZy7AAGQwwACffB/AAEZ0wACgVgEAAYPAAEaJwFIATgDAAJ+hPRzAAEanLprCAQABFsAARrKAwABGrcBR/5cih8AAwACftE7AAEbLwABG3QAAwABkS2ADwACgNQEWwABG3y7AAGQwwACffMAAn5g9F8AARv2EwABG68BSAMHAAGRDKcAAoDs9F8AARxsuwABkMMAAn3wcwABHMIHAAEckwFH/2cAAZEwDAAMWwABHSi7AAGQhwACffMAAn4KCwABHVcBSACaEwABHbcBSAMEAwACgS8AAn6FKwABHhQErBsAAn8iBrMAAR5nAAEelwABJfQAAhjQBasAAR5pgA8AA/eQCAAABA8AAR7jAAEl9AAAAAQEBwABHywAAAIPzYAOH1AAAYAPAAJzxAT4ETsAAR+LAAEfpAACCSWADwACGAgEcwABH9hbAAEfrLsAAU/vAAJ98wACfhsAATKEBAAGAwABIDMBSAY4AwAByoj0XwABIHhbAAEgXLsAAZDDAAJ98wACfmMAAZE0pwACgPEnAAEihHMAASLAWwABIpS7AAFP7wACffMAAn4bAAEyjAQABgMAASMnAUgGOAMAAcqM+AT0cwABI7hzAAEjlFsAASNguwABkKsAAn3zAAJ+OSwEAAYHAAEjmwFIBpwDAAP2BVgEAAR/AAEj2wACgWAEAARbAAEkMLsAAZDDAAJ98wACfmAAAwAD9TD4BPRzAAEk8HMAASTMWwABJKS7AAGQpwACffMAAn41LAQABgcAASTTAUgGnAMAA/YFWAQABH8AASUTAAKBYAQABFsAASVouwABkMMAAn3zAAJ+YAADAAP1MSsAASW4BKwbAAJ/JgazAAEmCwABJjsAAS3IAAIYyAWrAAEmDYAPAAP3kAgAAAQPAAEmjwABLcgAAAAEBAcAASbgAAACD82ADh8oAAGADwACc8QE+A07AAEnRwABJ1gAAgm1gA4ePARbAAEndgMAASdjAUgMngm2HzEnAAEnnHsAASffAAGusAQABgcAASgjAUgNAAD4BPRzAAEpMLprCAQABgcAASlLAUgNAAMAAn7Q+BU7AAEp3wABKggAAwABUomADwACGAgEcwABKjxbAAEqELsAAU/vAAJ98wACfhsAATKcBAAGAwABKpcBSAycAwABypD0cwABKsi7AAGROwACffAEAAYLAAErLwFIDnQDAAJ+pPRzAAEreLprCAQABgcAASuTAUgNAAMAAn7Q9HMAASvgWwABK8S7AAGQwwACffMAAn5jAAGRPAgACFsAASwkuwABkIcAAn3zAAJ+CHMAASxQuwABkUMAAn3wBAAGCwABLH8BSA50AwACfqwDAAKBMPRzAAEszLsAAZFHAAJ98AQABgsAAS0zAUgOdAMAAn6pKwABLYwErBsAAn8qBrMAAS3fAAEuDwABTKgAAhkMBasAAS3hgA8AA/eQCAAABA8AAS5fAAFMqAAAAAQEBwABLqwAAAIPzYAOIDwAAYAPAAJzxAT4IPRzAAEu3LprCAQABFsAAS8KAwABLvcBSBMqCb4gRAMAAn7ROwABL38AAS+oAAMAAVKJgA8AAhgIBHMAAS/cWwABL7C7AAFP7wACffMAAn4bAAEyoAQABgMAATA7AUgTKAMAAcqU9HMAATBkuwABkTsAAn3wBAAGBwABMMsBSBQYAwACfqU7AAExVwABMZQAAwABkUl0DwAD9OwFgA8AAhgIBMcAATHNgA8AAhgIARsAATHvAAEyowABMjgAAAKgUYAOIGgAWwABMoYDAAEycwFIEyoZCiBI+Ak7AAEy7wABMygAAok5gA8AAhgIBHMAATOEWwABM1i7AAFP7wACffMAAn4bAAEylAQABg8AATPzAUgWZAMAAcqdJwABNDyEcwABNIoTAAE0TwFIFvEgBAAErAMAA/fE+AT0cwABNRYLAAE01wFIFaFYBAAGEwABNScBSBbwAwAD9TD9JwABNbBbAAE2AgsAATXDAUgVog7fAAP0ePgY9HMAATaSCwABNlMBSBWiD/QEAARbAAE2sLsAAZE7AAJ98wACfqQDAAP0JTsAATnEAAACu9WADwAD60QA9HMAATocWwABOgC7AAGQwwACffMAAn5jAAFTBAgACFsAATpEuwABkIcAAn3zAAJ+CgMAATpzAUgTKAMAAoE5EwABOqT4CPYvAAE62wFIGhCpGwABOz8AATvzAAE7iAAAAqBRgA4gaABbAAE71gMAATvDAUgTKhkKIEj4GTsAATxPAAE8jAADAAGRTYAPAAKA1ARbAAE8lLsAAZDDAAJ98wACfmD0XwABPNy7AAGQwwACffB/AAE9EwACgVgEAAYXAAE9ZwFIHEQDAAJ+hPRzAAE91LprCAQABhMAAT3vAUgbuAMAAn7ROwABPncAAT6wAAMAAZFRgA8AAoDUBFsAAT64uwABkMMAAn3zAAJ+YPYvAAE/AwFIGhCIcwABP6IXAAE/YwFIHEcAAZFUCAAIWwABP8S7AAGQhwACffMAAn4IxwABP/GADwACgNQGGwABP/cBSB3wAwACgTQGDwABQEcBSBoQ9F8AAUCQuwABkMMAAn3yFwABQLcBSBxHAAJ+hg8AAUFfAUgaEPRzAAFBuFsAAUGcuwABkMMAAn3zAAJ+YwABU1wIAAhbAAFB2LsAAZCHAAJ98wACfgoDAAFCBwFIEygDAAKBPPRzAAFCfgsAAUI/AUgVog/0BAAEWwABQpy7AAGRRwACffMAAn6oAwAD9CT4GTsAAUODAAFDwAADAAGRTYAPAAKA1ARbAAFDyLsAAZDDAAJ98wACfmE7AAFERwABRHwAAwABkVl0DwAD9OwFgA8AAoDUBMcAAUS1gA8AAoDUATsAAUTzAAFFLAADAAGRXYAPAAPrRASpGwABRW8AAUYjAAFFuAAAAqBRgA4gaABbAAFGBgMAAUXzAUgTKhkKIEj4EScAAUZIWwABRoYbAAFGWwFII+4ZGiB8+AT2NwABRuMBSCNwpPz0XwABR4S7AAGQwwACffB/AAFHuwACgVgEAAYPAAFIDwFIIiwDAAJ+hPRzAAFIdLprCAQABhsAAUiPAUgj7AMAAn7Q9HMAAUkaEwABSOMBSCLNWAQABFsAAUkouwABkMMAAn3zAAJ+YAMAA/Uw9HMAAUnGDwABSYcBSCIvAAGRPAwACFsAAUoIuwABkIcAAn3zAAJ+ChMAAUo3AUgizAcAAZFghhcAAUrbAUgjcwACgTD0XwABSzS7AAGQwwACffIPAAFLWwFIIi8AAn6E9HMAAUvEuwABkUcAAn3wBAAGBwABTCsBSBQYAwACfqkrAAFMbASsGwACfy4GswABTL8AAUzvAAFOKAACGSAFqwABTMGADwAD95AIAAAEDwABTSsAAU4oAAAABAQHAAFNZAAAAg/NgA4gaAABgA8AAnPEBPgI9HMAAU2UumsIBAAEWwABTcIDAAFNrwFIKbIJtiB4AwACftErAAFN7ASsGwACfzIGswABTj8AAU5vAAFUDAACGSgFqwABTkGADwAD95AIAAAEDwABTt8AAVQMAAAABAQHAAFPTAAAAg/NgA4goAABgA8AAnPEBPgROwABT6sAAU/EAAIJJYAPAAIYCARzAAFP+FsAAU/MuwABT+8AAn3zAAJ+GwABMpAEAAYDAAFQdwFIK5ADAAHKmPRfAAFQvFsAAVCguwABkMMAAn3zAAJ+YwABkTSnAAKA8PRzAAFTIHMAAVL8WwABUsi7AAGQqwACffMAAn45LAQABgcAAVMDAUgr9AMAA/YFWAQABH8AAVNDAAKBYAQABFsAAVOYuwABkMMAAn3zAAJ+YAADAAP1MSsAAVPQBKwbAAJ/NgazAAFUIwABVJMAAVckAAIYHAWrAAFUJYAPAAP3kAgAAAQPAAFU0wABVyQAAAAEBAcAAVUQAAACD82ADhwgAAGADwACc8QE+AUrAAFVQARzAAFVXLsAAZFkDAAKAwABVesBSC/EcwABVkRbAAFWFgMAAVYDAUgvxhc+HDICrAQFgA8AAnPEBNMAAVZUDwABVlcAAVaQAAAABAQHAAFWWAAAAg1NgA4TZAABgA8AAnPEBSsAAVZwBHMAAVZwumsIBAAGBwABVosBSDFsAwACftADAAP0EAYQiFsAAVb2AwABVuMBSC/GEIocKwACfzgbAAJ/OgazAAFXOwABV3sAAWYIAAMAAZFkAAAABA8AAVffAAFmCAAAAAwICwABWCwAAAIPzYAOCUgDAAFYrAAAAwABkWl0DwAD8+QFgA8AAnPEAAcAAVkUAAACEImADwAD60QFqAGADwAD9oXlgA8AAnPEBPgFKwABWwQEcwABW4BbAAFbSFsAAVsguwABkIcAAn3zAAJ+CwABP1sAAcxiZSgIAAoDAAFbswFIM2jTAAFbyA8AAVvLAAFl9AAAAAAAAAGADwACc8QE+Bk7AAFcNAAAAmwxgA8AAnPEATsAAVyTAAFcrAABhYAPAAPyXAZNGwABXNsAAV2HAAFdLAAAAgpRgA8AAnPEAgcAAV1PAUgzoPgI9i8AAV2vAUg17IxzAAFeFg8AAV3nAUg17SAEAASsAwAD98RzAAFeiFsAAV5suwABRt8AAn3zAAJ+DwABkWwQAAysrhcAAV7rAUg2oAcAAY/YqwAChvxzAAFfjFsAAV9wuwABRt8AAn3zAAJ+DwABkXAMAAysmwABX9QGDwABX9cBSDXtgA8AAnuOFwABYAsBSDagAwAChwgFgA8AAnuM9jMAAWBHAUg2MHMAAWBeEwABYEcBSDYxkAQABlADAAP29PYvAAFgpwFINeyMcwABYQ4PAAFg3wFINe0gBAAErAMAA/fEcwABYXhbAAFhXLsAAUbfAAJ98wACfg7aOAAAAAMAAobccwABYgBbAAFh5LsAAUbfAAJ98wACfg8AAYF8DAAMrKybAAFiYAYPAAFiYwFINe2ADwACe4wDAAKHBAWADwACc8U7AAFi8wABYygAAwABkXWADwACc8QEjgsAAWNbAUg0CFsAAWOcWwABY4C7AAFG3wACffMAAn4O1qMAAoZYWwABY/hbAAFj3LsAAUbfAAJ98wACfg7WjwAChmAFgA8AAnPFKwABZFgEcwABZJBbAAFkdLsAAUbfAAJ98wACfg8AAZF4FAAWFwABZPMBSDwqAwABZS8BSDNoWwABZUS7AAGQiwACffMAAn4SDwABZYsBSDXuEwABZb8BSDYwAwAChuQDAAP2IBsAAn8+BrMAAWYfAAFmjwABaPAAAhgkBasAAWYhgA8AA/eQCAAABA8AAWbLAAFo8AAAAAQEBwABZwQAAAIPzYAOHFQAAYAPAAJzxAT4BSsAAWc0BHMAAWdQuwABkXwMAAoDAAFntwFIQBBzAAFoEFsAAWfiAwABZ88BSEASFz4cZgKsBAWADwACc8QE0wABaCAPAAFoIwABaFwAAAAEBAcAAWgkAAACDU2ADhNkAAGADwACc8QFKwABaDwEcwABaDy6awgEAAYHAAFoVwFIQbgDAAJ+0AMAA/QQBhCIWwABaMIDAAForwFIQBIQihxfAAJ/QBsAAn9CBrMAAWkHAAFpRwABdTQAAwABkXwAAAAEDwABaacAAXU0AAAADAgLAAFp9AAAAg/NgA4JSAMAAWp0AAADAAGRaXQPAAPz5AWADwACc8QABwABatwAAAIQiYAPAAPrRAWoAYAPAAP2heWADwACc8QE+AUrAAFrHARzAAFrmFsAAWtgWwABazi7AAGQhwACffMAAn4LAAE/WwABzGJlKAgACgMAAWvLAUhDtNMAAWvgDwABa+MAAXUgAAAAAAAAAYAPAAJzxAT4FTsAAWxMAAACbDGADwACc8QBGwABbJsAAW1HAAFs7AAAAgpRgA8AAnPEAgcAAW0PAUhD7PgE9i8AAW1vAUhGOIxzAAFt1g8AAW2nAUhGOSAEAASsAwAD98RzAAFuSFsAAW4suwABRt8AAn3zAAJ+DwABkWwQAAysrhMAAW6rAUhGnAcAAY/YqwAChvxzAAFvTFsAAW8wuwABRt8AAn3zAAJ+DwABkXAMAAysmwABb5QGDwABb5cBSEY5gA8AAnuOEwABb8sBSEacAwAChwgFgA8AAnuM9i8AAXAfAUhGOIxzAAFwhg8AAXBXAUhGOSAEAASsAwAD98RzAAFw8FsAAXDUuwABRt8AAn3zAAJ+Dto4AAAAAwAChtxzAAFxeFsAAXFcuwABRt8AAn3zAAJ+DwABgXwMAAysrJsAAXHYBg8AAXHbAUhGOYAPAAJ7jAMAAocEBYAPAAJzxTsAAXJrAAFyoAADAAGRdYAPAAJzxASOCwABctMBSERUWwABcxRbAAFy+LsAAUbfAAJ98wACfg7WpwAChmhbAAFzbFsAAXNQuwABRt8AAn3zAAJ+DrNvAAKGZAWADwACc8UrAAFzqARzAAFz4FsAAXPEuwABRt8AAn3zAAJ+DwABkYAQABITAAF0PwFIS54DAAF0ewFIQ7RbAAF0kLsAAZCLAAJ98wACfhIPAAF01wFIRjgDAAKG7AMAA/YgGwACf0YGswABdUsAAXW7AAF4qAACGCwFqwABdU2ADwAD95AIAAAEDwABdfcAAXioAAAABAQHAAF2MAAAAg/NgA4ciAABgA8AAnPEBPgFKwABdmAEcwABdny7AAGRhAwACgMAAXcHAUhPYHMAAXdQWwABdzIDAAF3HwFIT2IPVhyeAqwEBXQOB+QJgA8AAnPFgA8AAnPEBNMAAXdgDwABd2MAAXgUAAAABAQHAAF3ZAAAAg1NgA4cwAABdA4H5AmADwACc8WADwACc8QFKwABd3wEfwABd44IDAgJgA8AAnPFgA8AAnPECHMAAXegumsIBAAEWwABd8IHAAF3uwFIUTYPWhzIAwACftBzAAF32LprCAQABFsAAXf6BwABd/MBSFE2AloczAMAAn7QAAMAA/QQBhCIWwABeHoDAAF4ZwFIT2IQihyTAAJ/SBsAAn9KBrMAAXi/AAF4/wABgrAAAwABkYQAAAAEDwABeV8AAYKwAAAADAgLAAF5kAAAAg/NgA4JSAMAAXqEAAADAAGRiXQPAAPz5AV0DgfkCYAPAAJzxYAPAAJzxAAHAAF65AAAAhCJgA8AA+tEBagBgA8AA/aF5YAPAAJzxAT4BSsAAXskBHMAAXugWwABe2hbAAF7QLsAAZCHAAJ98wACfgsAAT9bAAHMYmUoCAAKAwABe9MBSFRk0wABe+gPAAF76wABgpwAAAAAAAABgA8AAnPEBPgVOwABfCsAAXxMAAMAAZGNdA8AA/TsBWwExwABfJmADwACc8QBOwABfNcAAX0AAAMAAZGRdA8AA/TsBWwExwABfU2ADwACc8QBGwABfXsAAX6PAAF+KAAAArMVdA4H5AmADwACc8WADwACc8QCBwABfl8BSFSc+Aj0cwABftoPAAF+twFIVxVYBAAEWwABfxIXAAF+6wFIWFYHXgfsAwAD9TD0cwABf24TAAF/QwFIV6VYBAAEWwABf6YXAAF/fwFIWFYJOgfwAwAD9TE7AAGAMwABgEQAAgpRgA8AAnPEBI4LAAGATwFIVTBbAAGAkFsAAYB0uwABRt8AAn3zAAJ+DtarAAKGcFsAAYDoWwABgMy7AAFG3wACffMAAn4OszcAAoZsBYAPAAJzxSsAAYEkBHMAAYFcWwABgUC7AAFG3wACffMAAn4PAAGRlBQAFJsAAYG4BhcAAYG7AUhaQYAPAAJ4zgMAAYHTAUhUZFsAAYHouwABkIsAAn3zAAJ+EJsAAYIsBg8AAYIvAUhXFXQPAAP07AWADwACc8SbAAGCVAYTAAGCVwFIV6V0DwAD9OwFgA8AAnPEAwAChvADAAP2IBsAAn9OBrMAAYLHAAGDNwABh3AAAhk4BasAAYLJgA8AA/eQCAAABA8AAYOHAAGHcAAAAAQEBwABg9QAAAIPzYAOIPgAAYAPAAJzxAT4FTsAAYQnAAGEUAACCb2ADgksBFsAAYRuAwABhFsBSF7qCb4hAPRzAAGErLsAAT+MBAAEjHMAAYUeBwABhPMBSF9NIAQABKwDAAP3xFsAAYVgWwABhUS7AAFG3wACffMAAn4OFgMAAoYwcwABhYy6awgEAAYHAAGFpwFIX0wDAAJ+0AWADwACc8QDAAJ+zPRfAAGGCFsAAYXsuwABkMMAAn3zAAJ+YwABkQynAAKA7PRzAAGGnFsAAYaAuwABkMMAAn3zAAJ+YwABkZgAAAADAAKBESsAAYc0BKwbAAJ/UgazAAGHhwABh/cAAYlkAAIX4AWrAAGHiYAPAAP3kAgAAAQPAAGINwABiWQAAAAEBAcAAYh0AAACD82ADhsMAAGADwACc8QE+AUrAAGIpARzAAGIwLsAAZGcBAAEWwABiT4DAAGJKwFIY4YCWhsUAwACf1QbAAJ/VgazAAGJewABibsAAYsIAAMAAZGcAAAABA8AAYofAAGLCAAAAAQEBwABijQAAAICWYAPAAPrRAABgA8AAnPEBPgFKwABimgEcwABiqBbAAGKhLsAAUbfAAJ98wACfg8AAZGgBAAGAwABiuMBSGU8AwAChpgbAAJ/WgazAAGLHwABi48AAYzwAAIXzAWrAAGLIYAPAAP3kAgAAAQPAAGLywABjPAAAAAEBAcAAYwEAAACD82ADhrEAAGADwACc8QE+AUrAAGMNARzAAGMULsAAZGkBAAEWwABjMoDAAGMtwFIZ0YCWhrMAwACf1wbAAJ/XgazAAGNBwABjUcAAZHUAAMAAZGkAAAABA8AAY2nAAGR1AAAAAQEBwABjbgAAAICWYAPAAPyXAABgA8AAnPEBPgFKwABj0AEcwABj3hbAAGPXLsAAUbfAAJ98wACfg8AAZGoBAAEcwABkGxbAAGP+FsAAY/EutiPAAJ98wACfgbEqwAB/wrXeAQABHsAAZEjAAGl8AQABgMAAZGnAUho/AAC+qwDAAKGyBsAAn9iBrMAAZHrAAGSWwABk+AAAhfYBasAAZHtgA8AA/eQCAAABA8AAZKjAAGT4AAAAAQEBwABkugAAAIPzYAOGugAAYAPAAJzxAT4BSsAAZMYBHMAAZM0uwABkawEAARbAAGTugMAAZOnAUhr2gJaGvADAAJ/ZBsAAn9mBrMAAZP3AAGUNwABmJgAAwABkawAAAAEDwABlKMAAZiYAAAABAQHAAGUwAAAAgJZgA8AA+0kAAGADwACc8QE+AUrAAGWSARzAAGWgFsAAZZkuwABRt8AAn3zAAJ+DwABkagEAARzAAGXdFsAAZcAWwABlsy62I8AAn3zAAJ+BsSrAAH/Ctd4BAAEewABl/cAAaX0BAAGAwABmGsBSG2QAAL6rAMAAobIGwACf2oGswABmK8AAZkfAAGapAACF8QFqwABmLGADwAD95AIAAAEDwABmWcAAZqkAAAABAQHAAGZrAAAAg/NgA4aoAABgA8AAnPEBPgFKwABmdwEcwABmfi7AAGRsAQABFsAAZp+AwABmmsBSHBuAloaqAMAAn9sGwACf24GswABmrsAAZr7AAGcYAADAAGRsAAAAAQPAAGbZwABnGAAAAAEBAcAAZuEAAACAlmADwAD+fgAAYAPAAJzxAT4BSsAAZu4BHMAAZvwWwABm9S7AAFG3wACffMAAn4PAAGRtAQABgMAAZw7AUhyJAMAAoaUGwACf3IGswABnHcAAZznAAGnaAACF0QFqwABnHmADwAD95AIAAAEDwABnUcAAadoAAAABAQHAAGdpAAAAg/NgA4ZBAABgA8AAnPEBPgM9HMAAaYYWwABpci7AAGQowACffMAAn4y3+gAAAADAAHi3PRzAAGmlgMAAaaDAUh0LhFMBAAEuAIZISsAAab4BFsAAacwWwABpxS7AAFG3wACffMAAn4OF0MAAoZ0GwACf3YGswABp38AAafvAAGpaAACF/QFqwABp4GADwAD95AIAAAEDwABqDcAAaloAAAABAQHAAGofAAAAg/NgA4bVAABgA8AAnPEBPgFKwABqKwEcwABqMi7AAGRuAAAAAMAAn94GwACf3oGswABqX8AAam/AAGr6AADAAGRuAAAAAQPAAGqRwABq+gAAAAAAAABgA8AAnPEBPgFKwABqmgEcwABqsRbAAGqhLsAAUbfAAJ98wACfg7aRAQABFsAAatwWwABqzRbAAGrALrYjwACffMAAn4Gzt8AAf7+yOrl0AMAAobQGwACf34GswABq/8AAaxvAAGtwAACF/wFqwABrAGADwAD95AIAAAEDwABrK8AAa3AAAAABAQHAAGs7AAAAg/NgA4bgAABgA8AAnPEBPgFKwABrRwEcwABrTi7AAGRvAAAAAMAAn+AGwACf4IGswABrdcAAa4XAAGvEAADAAGRvAAAAAQPAAGuhwABrxAAAAAAAAABgA8AAnPEBPgFKwABrqgEWwABruBbAAGuxLsAAUbfAAJ98wACfg4WXwAChngbAAJ/hgazAAGvJwABr5cAAbmYAAIZnAWrAAGvKYAPAAP3kAgAAAQPAAGv9wABuZgAAAAEBAcAAbBUAAACD82ADiH4AAGADwACc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HS6EJsAAoBvAAGRvAAAAAMAAn+AGwACgLIGswAEWTMABFmjAARcGAACG5wFqwAEWTWADwAD95AIAAAEDwAEWgMABFwYAAAABAQHAARaYAAAAg/NgA4p1AABgA8AAnPEBPgJAKsABFqvAARawASTAARbaAifAAGSsgMABFtXAUqxaSsABFuEBFsABFvcWwAEW8BbAARboLoQmwACgG8AAUbfAAJ98wACfg56lwAChnwAAUqHpAFKidQBSouYAUqNpAFKj7ABSpG8AUqTyAFKlYwBSpr0AUqfBAFKoxQBSqpYAUqsnAFKrswBSrCQAUqy/AAAADwLAAKAvgazAARcLwAEXEcABF34DwABkrQAAAWABwAD95AAAAgTAAKAxgazAARcvwAEXNwmlNABgA8AAS88ABMAAoDKBrMABF0/AARdTCa0sAGADvlEAAQXAAKA0gazAARdYwAEXWMABF3wAAAADwAEXYsABF3wAAAACAgLAARdoAAAEpTRgA8AAS88AwAEXdwAABK0sYAO+UQAAYAPAAKAvAT8DCAHAAKAxgADAUq2ACAHAAKAygQDAUq2QCQHAARdYwAD9+gAAAAAAAABSrc8AAAAAAsAAoDWBrMABF4HAAReHwAEyZQPAAGSuAAABYAHAAP3kAAAFBMAAoDiBrMABF6rAARexCcAATJXAAJ98AGADwACgxgAEwACgOYGswAEX1MABF9sJwABkr8AAn3wAYAPAAKCXAATAAKA7gazAARfkwAEX/RjAAGRDAGADwAD60QEqBMAAoDyBrMABGAbAARghGMAAZE0AYAPAAPrRASoEwACgOoGswAEYM8ABGDwYwABksMAAn3wAYAPAAKDGAAUFwACgVYGswAEYQcABGEHAARlYAMAAZLEAA8ABGFPAARlYAAAAAQAAAcABGFoAAADAAGQxYAPAAPrRAWoAYAPAAP2heWADwACgNQE/AQoAwAEYgcAAoFkFAAMfwAEYm8AAoNgAAAAAI4DAARi4wFKuwB/AARjWwACgpAAAAAArAWADwACglysCwABkQyrAAGRNKgXAAKBWgazAARldwAEZXcABGlEAwABksgADwAEZccABGlEAAAABAQHAARl9AAAAg9tgA8AAoDUAAGADwACgNQE/AQoAwAEZkcAAoFkFAAMfwAEZnsAAoNkBAAEWwAEZt4DAARmxwFKvUcAA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PgJOwAEgjcABIJMAAISbYAO9TgEcwAEgpYHAASCVwFK2a0sBAAGCwAEgpsBStoYAwAD9gUnAASCyIRzAASC8g8ABILbAUrafSAEAASsAwAD98T4BSsABIM0BHMABIN2AwAEg1MBStlvAAE/xAQABg8ABIOrAUrafAMAAczU+AUrAASEFARzAASEUFsABIQwuwABMlcAAn3zAAKA4r5UCAAKAwAEhGMBStluCwAEhIsBStoYAwACgywbAAKBIgazAASE3wAEhPMABI1UAAMAAVFQAAAABA8ABIUfAASNVAAAABwYGwAEhXgAAAKuxYAPAAHMNAMABIYYAAADAAGQvXQPAAP1tAmADvXVgA71OAMABIaQAAACfB2ADvXUAwAEhwQAAAIKUYAPAAJzxAMABIdUAAACD82ADgksAwAEh6gAAAIXMYAPAAGLWAAHAASH9AAAAtlZbAWrAASIJYAPAAPrRd1wBPgRAIRzAASIig8ABIh3AUre5SAEAASsAwAD98cABIh3AASIpAD2LwAEiMMBSt7kcwAEiRhbAASJAgMABIjfAUreAhX3AAHMXwABkcwMAAoPAASJRwFK3uYXAASJXwFK31wG2VibAASJvAYbAASJvwFK36GADwAD60cAAoa1OwAEijcABIpMAAISbYAO9TgEcwAEipYHAASKVwFK3kEsBAAGCwAEipsBSt6sAwAD9gUnAASKyIRzAASK8h8ABIrbAUrh/SAEAASsAwAD98T4BPRzAASLWgMABIs3AUreAwABP5AIAAofAASLowFK4f4PAASLvwFK3uQDAAHMrPgE9HMABIxEWwAEjCS7AAEyVwACffMAAoDislwYABoDAASMYwFK3gILAASMiwFK3q4PAASMpwFK3uYTAASMvwFK3yYXAASM1wFK31xbAASNBLsAAZLDAAJ98wACgOgDAAKDMBsAAoEmBrMABI1rAASNfwAEkswAAwABkjgAAAAEDwAEjasABJLMAAAAFBQXAASOBAAAAq7FgA8AAcw0AwAEjqQAAAMAAZC9dA8AA/W0CYAO9dWADvU4AwAEjxwAAAJ8HYAO9dQDAASPdAAAAgpRgA8AAYtYAwAEj8QAAAIPzYAOCSwAAXAE+Ak7AASQNwAEkGQAAwABkf2ADwACc8QEcwAEkGy7AAESkAwADgMABJCXAUrmMgcABJC/AUrmcgsABJEHAUrm3AMAAoEc9HMABJE0uwABUVAcABoDAASRZwFK5jIHAASRjwFK5nILAASR1wFK5t4XAASR8wFK56YTAASSJwFK51YPAASSPwFK5xQG2VirAAKBIBsAAoEqBrMABJLjAASTDwAEmVQAAwABkpAAAAAEDwAEkzMABJlUAAAACAgLAASTcAAAAq7FgA8AAcw0AwAEk8QAAAIPbYAPAAKA1AABgA8AAoDUBPgU9F8ABJP4uwABkQyrAAKA7PRfAASUdLsAAZE0qwACgPEnAASU/FsABJUmBwAElQ8BSurPAAGRIwACgQD4BSsABJVkBLj9OwAElfsABJYUAAMAAVM9gA8AAoMYBHMABJY8WwAElhy7AAEyVwACffMAAoDjAAGSkAgACgMABJZnAUrqjFsABJamBwAElo8BSurPAAEyVwACffMAAoDgAwACgzUrAASW3AR/AASXCwACgWQUAA4LAASXWwFK7ExbAASXeLsAAZK/AAJ98wACgORbAASXnLsAAZLDAAJ98wACgOgLAAGRDFsABJg0uwABkQ8AAoDvAAGRNFsABJj0uwABkTcAAoDwGwACgS4GswAEmWsABJmXAASpSAADAAGRMAAAAAQPAASZ1wAEqUgAAAAMDA8ABJowAAACrsWADwABzDQDAASahAAAAwABktmADwACgNQDAASa4AAAAwABkt2ADwACgNQAAYAPAAKA1AT4GPRfAASbKLsAAZEMiFsABJvGBwAEm5sBSvA7AAGRDwACgOwAWwAEnEYLAAScGwFK8IMAAZEPAAKA7wACgOz0XwAEnKC7AAGRNIhbAASdRgcABJ0bAUrwOwABkTcAAoDwAFsABJ3OCwAEnaMBSvCDAAGRNwACgPMAAoDxOwAEnmwAAAMAAVM9gA8AAoMYAScABJ6cWwAEnqy7AAGRIwACgQD4BPYvAASe7wFK8txbAASfELsAATJXAAJ98wACgOEnAASfYFsABJ+eBwAEn3MBSvA7AAGRIwACgQD4BPYvAASf3wFK8txzAASgIFsABKAAuwABMlcAAn3zAAKA4wABkpAMAAoDAASgSwFK7/hbAASgngsABKBzAUrwgwABMlcAAn3zAAKA4AcAAZLgpwACgzUnAAShLFsABKFqCwAEoT8BSvCDAAGRIwACgQD4BPYvAAShqwFK8txzAASh7FsABKHMuwABMlcAA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APyXATUAAAABAGADwACgfAGBhf3AUtkpIxyGBYIAwFLZyUgBAAErAAArFoYFggDAUtnJwABk4cAAoHvAAKB/AWADwAD8lyMchgyCAMBS2bxIAQABKwAAHIYPlIHGAAAAAMAA/LqCAMBS2bwBYAPAAPyXZAEAAZQAwAD9vQkBhXvAAP36AAAAAAXAAKCWga+Go4ajiDAAwABkswADhruIMAAAAAEBAYbKAAAAg9tgA8AAoHwAAGADwACgfAE/BggAwACggCMchvUWhuuAhuXAUtpqhjrAAKCASAEAASsAwAD98SsehyLAAMGfAQJgA711YAPAAJzxARaHSYCHQ8BS2mqGOsAAoIAAAV0DwAD9bQJgA711YAPAAJzxCADAAKCCFodugIdowFLaaqMHwACggggAwACggzUAAAABAGADwACgfAEWh4+Ah4nAUtpqwABk4sAAoIMjHIeWgQDAUtr7SAEAASsAAICHmcBS2mqBAMBS2vsBYAPAAKB8CADAAKB/Foe3gIexwFLaasAAZOHAAKB7wACgfwgAwACggSMch90Wh9aAh9DAUtpqhFfAAKCBSAEAASsAwAD98SsfiArAAKCWAQABFogpgIgjwFLaaoRXwACggQABYAPAAKB8CQGGo8AA/foAAAAADAbAAKCFga+IZIhtiIYBAMAAY/YAAAABA4hziIYAAAAAAAAAYAPAAPrRAUqIdgEhHIh/Foh2LqMHwACggkgBAAErAMAA/fEGwACghoGviW+JgYmbAQDAAEwYAAAAAQOJiombAAAAAAAAAGADwACgfAFKiY0BNQAAAAEAYAPAAKB8ARaJjS7AAGTiwACggyMciZSAAMBS3CNIAQABKwAALoAAwFLcIwFgA8AAoHwGwACgiIGvie6J/It0AADAAGTlAAAAAQOKCIt0AAAAAQEBihcAAACD22ADwACgfAAAYAPAAKB8AT4BSYokHIoxFoooLsAATBjAAKCGSAEAARaKOoCKNMBS3HzAAEwYwACghgDAAP3xPgFKikwBFopTLsAATBjAAKCGSYpoHIpzFopsLsAAZOHAAKB7wACgf4CXAQABFop7gIp1wFLcfMAAZOHAAKB7wACgfwDAAP3HPgFKiosBHIqZFoqSLoRXwACggcAAZOUBAAGAiqbAUtx8AMAAoIhJirkcisQWir0uwABk4cAAoHvAAKB/YwEA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S43AAEzLAAAAAgICwABLjgAAAJ8HYAO9dQDAAEuVAAAAwABkCWADwACc8QAAYAPAAP2hAT4ETsAAS7rAAEvBAADAAGUJYAPAAJzxARzAAEvKFsAAS8MuwABMlcAAoHvAAKDJSwEAAYXAAEvLwFMOjADAAKCJScAAS9scwABL5ofAAEvfwFMOt0gBAAErAMAA/fFKwABL7wA/TsAATA/AAEwXAACpYmADwACc8QEcwABMNBbAAEwugMAATCXAUwv/hX3AAHMXwABkXAMAA4XAAExAwFMOjCbAAExHAYfAAExHwFMOt2ADwACe44bAAExPwFMOmgDAAKHCScAATGMhHMAATG8UwABMZ8BTDxoIAEgBAAGHwABMcsBTDrcAwAD98T4CPYrAAEyGwFMMMCk9HMAATKcWwABMoC7AAEyVwACge8AAoMmAvwIAAoXAAEyowFMOjBTAAEyxwFMPGggAAMAAoIo/AMAAoIsAwAD9CUrAAEzaAYLAAEzhwFMMMAbAAKDRga/AAEzxwABM9sAATi0AAMAAVMEAAAABA8AATP/AAE4tAAAAAgICwABNDwAAAKuxYAPAAHMNAMAATSEAAAC/FWADgksAAFwBPgE9HMAATTUWwABNLS7AAEyVwACge8AAoMnAAGTsAQABNMAATUIDwABNQsAATigAAAACAgLAAE1JAAAAgnBgA711AMAATWMAAACClGADwACc8QAAYAPAAP2hAT4CTsAATYHAAE2JAACpYmADwACc8QEcwABNpBbAAE2egMAATZXAUxAqhX3AAHMXwABlEAQAA4HAAE20wFMQOoLAAE26wFMQgIPAAE3EwFMQjgHAAGP2KsAAocBJwABN3yEcwABN64TAAE3jwFMQqUgBAAGDwABN7sBTEI4AwAD98T4BPRzAAE4FFsAATf4uwABMlcAAoHvAAKDJgL8CAAKCwABOBsBTEICEwABOEsBTEKkAwACgij8AwACgjwbAAKDSga/AAE4ywABON8AAT1oAAMAAVNcAAAABA8AATj7AAE9aAAAAAgICwABOTgAAAKuxYAPAAHMNAMAATmAAAAC/FWADgksAAFwBPgE9HMAATnQWwABObC7AAEyVwACge8AAoMnAAGTsAQABNMAAToEDwABOgcAAT1UAAAACAgLAAE6IAAAAgnBgA711AMAATqIAAACClGADwACc8QAAYAPAAP2hAT4CTsAATsDAAE7IAACpYmADwACc8QEcwABO4xbAAE7dgMAATtTAUxGPhX3AAHMXwABgXwMAA4HAAE7vwFMRn4LAAE71wFMR5SbAAE7/AYPAAE7/wFMR82ADwACe4wDAAKHBScAATwwhHMAATxiEwABPEMBTEg5IAQABg8AATxvAUxHzAMAA/fE+AT0cwABPMhbAAE8rLsAATJXAAKB7wACgyYC/AgACgsAATzPAUxHlhMAATz/AUxIOAMAAoIo/AMAAoI8GwACg04GvwABPX8AAT2bAAE/xAACwNAAAAAEDwABPdsAAT/EAAAABAQHAAE9+AAAAqKdgA8AA/n4AAGADwAD+fgE+A07AAE+ZwABPnAAAg+lgA8AA/sgBH8AAT6LAAP7nAAAAAD0cwABPti7AAGNuwACgewIAAoHAAE/IwFMTFIDAAE/MwFMS+QDAAKDVSsAAT9kBHMAAT+OBwABP4MBTExQjAAAAAMAA/uEGwACg1YGvwABP9sAAT/vAAFDMAADAAGNuwACgewAAAAEDwABQDMAAUMwAAAACAgLAAFAaAAAAg+lgA8AA/sgAwABQJQAAAKinYAPAAP5+AABcAT4EPRzAAFA2gMAAUDPAUxOqgo4BAAEkwABQWAMnwABlERbAAFBMLoPGwAD99yfAAGS8AMAA/tw9HMAAUGKAwABQX8BTE6qCjgEAASTAAFB+AyeAr4HAAFBtwFMTuifAAGS9AMAA/tw9HMAAUI0WwABQhS7AAEyVwACge8AAoMnAAGNuwACgewIAAoDAAFCfwFMTqiTAAFCyAoHAAFCmwFMTuie+ewDAAKCOPRzAAFC8gMAAULnAUxOqgo4BAAEnwABkvgDAAP7cBsAAoNaBr8AAUNHAAFDkwABRiwAAIwFqwABQ0mADwAD95AIAAAEDwABQ7MAAUYsAAAAAAAAAYAPAAP5+AT4FTsAAUQLAAFEFAACD6WADwAD+yAEfwABRC8AA/ucAAAAAPRzAAFEigMAAUR/AUxTVgo4BAAEnwABlEQDAAP7cPRzAAFFCgMAAUT/AUxTVgo4BAAEkwABRWQInwABkvxbAAFFRLsAATJXAAKB7wACgyQDAAP7cPRzAAFFjgMAAUWDAUxTVgo4BAAEngyYAwAD+3ErAAFFzARzAAFF9gMAAUXrAUxTVIwAAAADAAP7hAABS+Q4AUvl5AFL7zQBS/sYAUwRgAFML0wBTD/4AUxFjAFMSzwBTE3oAUxSVAFMVggAAAAsAAAGBrwBTFbkAUtdrAFLnZABS7QoAUvTXAFL3QABTFbcAAAAFAFMVuQAAAAAAAgTAAKDcwABlEoGwAAAGgQYAALhIAACBJQAAvRUAAIFJAADAAEu9AAEBAaTpgXsAAIHgAAEBAZdLgaMAAMAAs/MAAIG+AADAAJzsAAAAAAABAsAAoOCBsIiXiJ2T6wPAAGUTAAABYAHAALP4AAACBMAAoOKBsIkPiToYwABQDABdA8AA/i8BYAPAAJzxAR+JIZTeAAFgA8AAnPEAAATAAKDjgbCJQ4leGMAAUAsAYAPAAPrRASoBBcAAoOqBsIljiWOJqAAAAAOJdImoAAAAAgICiXUAAADAAFAjWwCJgQAAAKuxWwAAYAPAAKDgAT8BCQCJjcAAtCsCAAImiZMBgImTwFMWt2ADwACc8SaJnwGBiZ/AUxbCYAPAAHMNAAQGwACg5YGwioiKjYwLAACCnwAAAAEDipCMCwAAAAAAAABgA8AA+tEBPgM9HIqZLsAASp4AAAAAwAC0CU6KvIrBAACDYWADwACedQEmirwBForDLsAAUCPAALP6YAPAAJ51SYrTForXLsAAUB3AALQEPgNJivIiIRaK9y7AAFALwACg4wAciyIWixOAiw7AUxdAwABj0sAAnnpIAQABKwDAAP27PgE9F4s6gIs1wFMXQMAAY9IWi1CAi0vAUxdAwABUq8AAnnnAAJ56Pz0ci3OAi27AUxdAwABj0AEAARaLhy7AAGPPwAC0AgDAAJ8RSouZASk+Az0Xi7kuwABQCynAAKDjPReL2y7AAFAMK8AAoOJKi/UBKgbAAKDmgbCMEIwcjI0AAMAAY7sBaowRYAPAAP3kAgAAAQOMP4yNAAAAAQEBjF8AAACBVGADwACeJgAAXAE+AT0cjGsuwABkzgEAASfAAGTPAMAAtAoGwACg54GwjJKMno3qAADAAGOkAWqMk2ADwAD95AIAAAEDjMCN6gAAAAEBAYzfAAAAgVRgA8AAnfwAAFsBPgM9HYzxwABjpAEAAYCNFMBTGJsAwAC0G06NLI0zAADAAGTQYAO9PAEWjTqAjTXAUxibwABQJcAAnf5JjU0iHI11Fo1mFo1aFo1RLquxwACz+6UiwABzErO3wABNpLJgAQABgY1/wFMYxgC5rAAcjZ4WjZmBjZLAUxjGgL29GEgBAAFqja1gA8AA/n7AAO+EAMAA/o0+AT0cjbkuwABkzgEAASSN3wInwABk0RaN1ICNz8BTGJukC8AAnfkAwAC0Cj8GwACg6IGwje+N+5PpAADAAGO3AWqN8GADwAD95AIAAAEDjh6T6QAAAAEBAY4+AAAAgVRdA8AAng0BWwAAXAE+BD0djlDAAGO3AQABgI50wFMZmgDAALQkTo6IjpEAAKU0YAPAAEvPARaOmICOk8BTGZqlNMAAnfBOjq2OugAAu5hgA8AA/n4BFo7FgY68wFMZx4C9wABL3UmOzxyO3xaO0y7AAGTNwAC0A0gBAAEWjueAjuLAUxmahY/AAJ4TAMAA/fE+A0mO+SEcjxEajv7AAKDegxwBAAGCjxrAUxnnAMAA/js+AUmPMxaPQIGPN8BTGcezFcAAS+E+Ak6PWI9pAADAAGUUYAPAAPyXARaPhRaPehaPcICPa8BTGZpbwACd8oWjwACgqGHAAP1rSY+XHI+ogo+bwFMZ50gBAAEnVgDAAP6NPgFJj8Acj9WDj8TAUxpqSAEAAZQAwAD9uz4BPRyP9xaP6y7AAFAMwACg4lYBAAEckBQWkAoWkACAj/vAUxmaW8AAnfKFo8AAoKhLAQABkwDAAP1KAMAA/jw/SZA5HJBKgpA9wFMZ50gBAAEnnw4AwAD+jT4BSZBlHJB6g5BpwFMaakgBAAGVAMAA/bs+AT0ckJwWkJAuwABQDMAAoOJWAQABHJC5FpCvFpClgJCgwFMZmlvAAJ3yhaPAAKCoSwEAAZQAwAD9SgDAAP48Pz4CPRyQ7C7AAGTOAQABJ8AAZRUAwAC0CkqRHgBJkUEWkU6BkUXAUxnHt0zAAEvkPgE9HJFyFpFmLsAAUAzAAKDiVgEAARyRjxaRhRaRe4CRdsBTGZpbwACd8oWjwACgqEsBAAGUAMAA/UoAwAD+PEmRpCEWkbKBkanAUxnHt1DAAEvjPgI9HJHHLsAAZM4BAAEnwABlFQDAALQKSpH3AD8/SZIXIRySOhqSHMAAoN+DHAEAAYKSQ8BTGecAwAD+Oz4BPReSXC7AAFALKcAAoOM/SZKGIhySl4KSisBTGedIAQABJ2EAwAD+jQAWkq+BkqbAUxnHhUTAAEvgPgI9F5LDLsAAUAspwACg4z0ckvMWkucuwABQDMAAoOJWAQABFpMGFpMAFpL3LquxwACz+4V9wABzF4WAwAChjADAAP48P0mTJCIWkzGBkyjAUxnHsxXAAEvhACIWk0mAk0TAUxmawABQMMAAniEBHJODFpNzgJNuwFMZmsAAUDLAAJ4igdYBAAE0k4cDk4eTpwAAAAEBAZOIAAAAllJgA708AABgA8AA+tEBSpOUASEWk52Dk5XAUx0Ssza9RADAAP0OPgI9HJOzLsAAZM4BAAEnwABkzwDAALQKSpPZAD8AAFMXBABTGBoAUxhvAFMZbgBTHVsAAAAEAgTAAKDegbCCo4W+BMAAZRYAXQPAAP4vAWADwAD+fgEegrzAAMGoAQFgA8AA/n4BaoLNXQPAAP07AWADwAD+fsABbjEABMAAoN+BsIXNiJQEwABlGQBdA8AA/i8BYAPAAP5+AR6F8cAAwagBAWADwAD+fgFqhgJdA8AA/TsBYAPAAP5+wAFvAQAAAYGwAFMd/gBTFjYAUx10AAAAAQBTHf4AAAAAAAIEwACg68AAZRqBsQAABYEFAAC4SAAAgSQAAL0VAACBSAAAwABLvQABAQGk6YF6AADAALPzAACBlQAAwACc7AAAAAAAAQLAAKDugbGC7YLzkx0DwABlGwAAAWABwACz+AAAAwTAAKDwgbGD94QbGMAAUA4AXQPAAP07AWADwACc8QExhBlgA8AAnPEABMAAoPGBsYQ1hFsYwABQEABdA8AA/TsBYAPAAJzxATGEWWADwACc8QAEwACg8oGxhM2E9BjAAFARAF0DwAD9OwFgA8AAnrwBMYTyYAPAAJ68AAEFwACg+YGxhPmE+YU9AAAAA4UJhT0AAAACAgKFCgAAAMAAUCNbAIUWAAAAq7FbAABgA8AAoO4BPwEJAIUiwAC0KwIAAiaFKAGAhSjAUx8UYAPAAJzxJoU0AYGFNMBTHx9gA8AAcw0ABAbAAKD0gbGGQoZHhzoAAIKfAAAAAQOGSoc6AAAAAAAAAGADwAD60QE+BT0chlMuwABKngAAAADAALQJToZ1hnkAAICrYAPAAJ68ASaGdQEWhnsuwABQI8AAs/pgA8AAnrxJhosWho8uwABQHcAAtAQ+Aj0chq6AhqrAUx+dwABj0AEAARaGwi7AAGPPwAC0AgDAAJ8RSobUASk/PReG6y7AAFAOF4b8LsAAUBAXhw8uwABQESvAAKDywACg8cAAoPBKhyoBKgbAAKD1gbGHP4dLh7wAAMAAY7sBaodAYAPAAP3kAgAAAQOHboe8AAAAAQEBh44AAACBVGADwACeJgAAXAE+AT0ch5ouwABkzgEAASfAAGTPAMAAtAoGwACg9oGxh8GHzYkZAADAAGOkAWqHwmADwAD95AIAAAEDh++JGQAAAAEBAYgOAAAAgVRgA8AAnfwAAFsBPgM9HYggwABjpAEAAYCIQ8BTIKgAwAC0G06IW4hiAADAAGTQYAO9PAEWiGmAiGTAUyCowABQJcAAnf5JiHwiHIikFoiVFoiJFoiALquxwACz+6UiwABzErO3wABNpLJgAQABgYiuwFMg0wC5rAAciM0WiMiBiMHAUyDTgL29GEgBAAFqiNxgA8AA/n7AAO+EAMAA/o0+AT0ciOguwABkzgEAASSJDgInwABk0RaJA4CI/sBTIKikC8AAnfkAwAC0Cj8GwACg94GxiR6JKpMbAADAAGO3AWqJH2ADwAD95AIAAAEDiU2TGwAAAAEBAYltAAAAgVRdA8AAng0BWwAAXAE+BD0diX/AAGO3AQABgImjwFMhpwDAALQkTom3icAAAKU0YAPAAEvPARaJx4CJwsBTIaelNMAAnfBOidyJ6QAAu5hgA8AA/n4BFon0gYnrwFMh1IC9wABL3UmJ/hyKDhaKAi7AAGTNwAC0A0gBAAEWihaAihHAUyGnhY/AAJ4TAMAA/fE+AUmKKCEcij8aii3AAKDtgxwBAAGCikjAUyH0AMAA/js+AUmKYRaKboGKZcBTIdSzFcAAS+E+AUmKghyKk4KKhsBTIfRIAQABJ4ClAMAA/o0+Ak6LFYsZAACAq2ADwACc8QEcizQWiyoWiyCAixvAUyGnW8AAnfKFo8AAoKhLAQABkwDAAP1KSYtFJYtNg4tJwFMikmADwACevD4CPRyLfRaLdC6rscAAs/vAAE/ZAQABFIuSwFMikgMBYAPAAJ68AMAAcyA9HIu1FoumLsAAUBHAAKDyVgEAARSLucBTIpIDAWADwACevADAAP1MPgE9HIzhLsAAZM4BAAEnwABlHADAALQKSY08HI1Ngo1AwFMh9EgBAAEnmUoAwAD+jT4CPRyO9haO5y7AAFAOwACg8FYBAAEcjxMWjwkWjv+AjvrAUyGnW8AAnfKFo8AAoKhLAQABkwDAAP1KAMAA/Uw9HI82Fo8lLsAAUBDAAKDxVgEAARaPSRaPQxaPOi6rscAAs/uFfcAAcxeepcAAoZ8AwAD9TD4CPRyQvS7AAGTOAQABJJD0AyfAAGUdgpDmwFMh9CeZxwDAALQKSpEDAEmRJhaRM4GRKsBTIdS3TMAAS+Q+Aj0ckVoWkUsuwABQDsAAoPBWAQABHJF3FpFtFpFjgJFewFMhp1vAAJ3yhaPAAKCoSwEAAZMAwAD9SgDAAP1MPRyRmBaRhy7AAFAQwACg8VYBAAEckbUWkasWkaGAkZzAUyGnW8AAnfKFo8AAoKhLAQABlADAAP1KAMAA/UxJkcohFpHYgZHPwFMh1LdQwABL4z4CPRyR7S7AAGTOAQABJJIkAyfAAGUdgpIWwFMh9CeZxwDAALQKSpIxAD8/SZJWIhaSY4GSWsBTIdSzFcAAS+EAIhaSe4CSdsBTIafAAFAwwACeIQEckrUWkqWAkqDAUyGnwABQMsAAniKB1gEAATSSuQOSuZLZAAAAAQEBkroAAACWUmADvTwAAGADwAD60QFKksYBIRaSz4OSx8BTJR6zNr1EAMAA/Q4+Aj0ckuUuwABkzgEAASfAAGTPAMAAtApKkwsAPwAAUx9hAFMgJwBTIHwAUyF7AFMlZwAAAAQBBMAAoO2BsYHCguoEwABlHgBdA8AA/i8BYAPAAP5+AR6B2sAAwagBAWADwAD+fgFqgeNdA8AA/TsBYAPAAP5+wAFvxgAAAYGxAFMlxgBTHl8AUyWAAAAAAQBTJcYAAAAAAAIEwACg+sAAZR+BsgAABYEFAAC4SAAAgSQAAL0VAACBSAAAwABLvQABAQGk6YF6AADAALPzAACBlQAAwACc7AAAAAAAAQLAAKD9gbKFJYUrjZADwABlIAAAAWABwACz+AAAAQTAAKD/gbKFbIWNGMAAUAwAXQPAAP07AWADwACc8QExhYtgA8AAnPEAAQXAAKEGgbKFkoWShdYAAAADhaKF1gAAAAICAoWjAAAAwABQI1sAha8AAACrsVsAAGADwACg/QE/AQkAhbvAALQrAgACJoXBAYCFwcBTJopgA8AAnPEmhc0BgYXNwFMmlWADwABzDQAEBsAAoQGBsoa1hrqHhgAAgp8AAAABA4a9h4YAAAAAAAAAYAPAAPrRAT4FPRyGxi7AAEqeAAAAAMAAtAlOhuiG7AAAl1BgA8AAnpoBJoboARaG7i7AAFAjwACz+mADwACemkmG/haHAi7AAFAdwAC0BD4CPRyHIYCHHcBTJxPAAGPQAQABFoc1LsAAY8/AALQCAMAAnxFKh0cBKT89F4deLsAAUAwrwACg/0qHdgEqBsAAoQKBsoeLh5eICAAAwABjuwFqh4xgA8AA/eQCAAABA4e6iAgAAAABAQGH2gAAAIFUYAPAAJ4mAABcAT4BPRyH5i7AAGTOAQABJ8AAZM8AwAC0CgbAAKEDgbKIDYgZiWUAAMAAY6QBaogOYAPAAP3kAgAAAQOIO4llAAAAAQEBiFoAAACBVGADwACd/AAAWwE+Az0diGzAAGOkAQABgIiPwFMoBgDAALQbToiniK4AAMAAZNBgA708ARaItYCIsMBTKAbAAFAlwACd/kmIyCIciPAWiOEWiNUWiMwuq7HAALP7pSLAAHMSs7fAAE2ksmABAAGBiPrAUygxALmsAByJGRaJFIGJDcBTKDGAvb0YSAEAAWqJKGADwAD+fsAA74QAwAD+jT4BPRyJNC7AAGTOAQABJIlaAifAAGTRFolPgIlKwFMoBqQLwACd+QDAALQKPwbAAKEEgbKJaol2jY4AAMAAY7cBaolrYAPAAP3kAgAAAQOJmY2OAAAAAQEBibkAAACBVF0DwACeDQFbAABcAT4EPR2Jy8AAY7cBAAGAie/AUykFAMAAtCROigOKDAAApTRgA8AAS88BFooTgIoOwFMpBaU0wACd8E6KKIo1AAC7mGADwAD+fgEWikCBijfAUykygL3AAEvdSYpKHIpaFopOLsAAZM3AALQDSAEAARaKYoCKXcBTKQWFj8AAnhMAwAD98T4BSYp0IRyKihqKecAAoPyDHAEAAYKKk8BTKVIAwAD+Oz4BSYqsFoq5gYqwwFMpMrMVwABL4T4CQUeKzYKK1cBTKVIDAYr2aor2YAPAAP5+wAEx7gA+Aj0cixcWiwsuwABQDMAAoP9WAQABHIs0FosqFosggIsbwFMpBVvAAJ3yhaPAAKCoSwEAAZMAwAD9SgDAAP1MQotIAAGLYGqLYGADwAD+fsABcA4APgI9HIvbLsAAZM4BAAEnwABlIQDAALQKQowqAAABPgE9HIxULsAAZM4BAAEkjIsDJ8AAZSKCjH3AUylSJ5nHAMAAtApKjKQAPz9JjMkiFozWgYzNwFMpMrMVwABL4QAiFozugIzpwFMpBcAAUDDAAJ4hARyNKBaNGICNE8BTKQXAAFAywACeIoHWAQABNI0sA40sjUwAAAABAQGNLQAAAJZSYAO9PAAAYAPAAPrRAUqNOQEhFo1Cg406wFMq4bM2vUQAwAD9Dj4CPRyNWC7AAGTOAQABJ8AAZM8AwAC0CkqNfgA/AABTJtcAUyeFAFMn2gBTKNkAUysqAAAABAEEwACg/IGygnqFIgTAAGUjAF0DwAD+LwFgA8AA/n4BHoKRwADBqAEBYAPAAP5+AWqCol0DwAD9OwFgA8AA/n7AAXAmAAABgbIAUyuJAFMmJwBTK0MAAAABAFMriQAAAAAAAgTAAKEHwABlJIGzAAAHgQQAAFoAAIEmAAC9FQAAgUoAAMAAh1G7iQCBewAAvjYAAIGgAADAAHMJAACBvwAAwACc7AAAgd8AAMAAoHQAAAAAAAICwAChCIGzhIuEkZKxA8AAZSUAAAFgAcAA/eQAAAYEwAChCoGzhLeEzgbAAGUmAGADwAD+fgFqhMNgA8AA/n7AAXDaBMAAoQuBs4TohPYJGQBgA4CRAATAAKEMgbOFD4UXCauxAGADwABzDQAEwAChDYGzhUyFlwnAAGUoAF0DwAD9bQJgA8AAnPFdA8AA/i8BYAPAAJzxATKFlWADwACc8V0DwAD+LwFgA8AAnPEABMAAoQ6Bs4XMhhYJwABlKQBdA8AA/W0CYAPAAJzxXQPAAP4vAWADwACc8QEyhhRgA8AAnPFdA8AA/i8BYAPAAJzxAATAAKEPgbOGLIZNCcAAZSoAXQPAAP4vAWADwAD+fgEehkDAAMGmAAFgA8AA/n4AAAEFwAChFoGzhlKGUoaDAAAAA4ZfhoMAAAACAgKGZQAABBlgA4CRAIZ6AAAEq7FgA8AAcw0AAGADwAChCAE/AwgBwAChC4AAwFMtNggBwAChDIEAwFMtQQkBhlLAAP36AAAAAAQGwAChEYGzhvCG9YfbAADAAFAWAAAAAQOHA4fbAAAAAAAAAFwBPgFGhwyHQochAAAAg/NgA8AAnPEAFoc4FocyFocpLquxwAChDIV9wABzF8AAZSvAAKGIPgJOh1+HZAAAnSpdA8AA/i8BYAPAAJzxARyHdxaHa4CHZsBTLarAAFAMwACdApVJAAAAAMAA/RBJh4YhFoeQgYeLwFMt2YFVwAD9HT4BPRyHvBaHoy7AAGUowAChDYC/AgACgIe9wFMtqoGHxcBTLdkAwAD9gj8GwAChEoGziCKIJ4kLAADAAFApAAAAAQOINIkLAAAAAAAAAFwBPgFGiD2Ic4hSAAAAg/NgA8AAnPEAFohpFohjFohaLquxwAChDIV9wABzF8AAZSvAAKGIPgJOiJCIlQAAnSpdA8AA/i8BYAPAAJzxARyIqBaInICIl8BTLnnAAFAMwACdApVJAAAAAMAA/RBJiLchFojBgYi8wFMuqIFVwAD9HT4BPRyI7BaI1C7AAGUpwAChDoC/AgACgIjtwFMueYGI9cBTLqgAwAD9gj8GwAChE4GziS6JM41mAADAAFA2AAAAAQOJQI1mAAAAAAAAAFwBPgNOiauJsQAAh0NdA8AA/W0CYAO9PF0DwAD9OwFgA8AAnPEBMongYAO9PF0DwAD9OwFgA8AAnPEARonoih6J/QAAAIPzYAPAAJzxABaKFBaKDhaKBS6rscAAoQyFfcAAcxfAAGUrwAChiD4BSYomIRyKPRaKL4GKKsBTL3/AAGNowACdAUgBAAErAMAA/fE+AT0ciqscimOAilDAUy9EmUoCAAIWinSBim/AUy9/wABjaMAAnQE0ioMDioOKnAAAAAAAAABdA8AA/TsBYAPAAJzxAUqKiQExippgA8AAnPEAAMAA/YhWAQABgYqvwFMvfwDAAP1MP0aK7YsWiv8AAACWUmADvTwAFosQgIsKwFMvRINowAD9jz4CTospAAAAgZNgA4CFAEw+Bk6LTItRAACAvWADwAD+fgEci1MuwABlLAEAAYGLZ8BTMD0AwAChFD2Ki3nAUzBcHIuRFouCLhnAAKELgpIDAAMki8EDaouxYAPAAP5+wAFw2idQg4u8wFMwbCeZeGqL1WADdYJFAICTTov1i/0AAIdFYAPAAKEXAR+MA8AAoU8EAAQugYwmwFMwPYKML8BTMFwWjFQWjEAWjDcuq7HAAKEMsSrAAHMUtgK+zABGjG2MmoyCAAAAg/NgA8AAnPEAHIyPgIyKwFMvREsBAAGBjJDAUzA9AMAA/YE+AT0cjK6EjKbAUzDUmsIBAAGFjLTAUzEcAMAAoS49HIzVhIzNwFMw1MAAZS0AAAAAwAChLT0cjPiEjPDAUzDUhy8AAAAAwAChLD4BSY0cIRyNJ4KNIMBTMFxIAQABKwDAAP3xPgE9HI1Dgo08wFMwXIKMAAAAAICIPwbAAKEUgbOOPo5Fkq8AAMAAZSwAAAABA45Ykq8AAAABAQGOZgAAAJZSYAO9PAAAYAPAAP5+AT4JTo7yjvgAAISGXQPAAP07AWADwAD+fgExjwJgA8AA/n4APRyPEIGPCsBTMfdWAQABFo8+Fo8xFo8kFo8cgI8UwFMx4IRIvUulbr0dgx3AAP8NgerAAP0gAMAA/Uw9HI9PgY9JwFMx91YBAAE1AAAAAQBgA70qARaPW4CPU8BTMeCFCr1KIxyPa4IAwFMyYkgBAAErAAArFo9rggDAUzJigL29GAFgA8AA/n4AwAD9TEmPdhaPgoCPesBTMeCFQr1FPgE9HI+agY+UwFMx91YBAAEkj7MCJ8AAZS4Wj62Aj6XAUzHggL29GADAAP1MSY/BFo/NgI/FwFMx4IVEvUY+AT0cj+WBj9/AUzH3VgEAASSP/gInwABlLxaP+ICP8MBTMeCAvb0YAMAA/UxJkAwWkBiAkBDAUzHgh5G9Qj4BSZAvFpBAFpA7gJAzwFMx4IC9vRiBVcAA/oQ+AT0ckFmBkFPAUzH3VgEAASfAAGUwAMAA/Uw+AT0ckIuBkIXAUzH3VgEAARaQl4CQj8BTMeCAvb0YAMAA/Uw+AT0ckL+BkLnAUzH3VgEAARyQ+x6QzsAAh1oBAAEWkPWAkO3AUzHggL29GACC6AIAAieeGCeBjQDAAP6eAMAA/UxOkSSRLQAAgudgA8AA/n4BHJFYHJE1gZEvwFMx94GlAQABNJE7A5E7kVYAAAABAQGRPAAAAIOAYAPAAP5+AABgA8AA+tEBSpFCASIhHJFEgpFCwFMz/0gBAAErAMAA/o0AIRyRUYKRT8BTM/9IAQABJwAAwAD+jQDAAP0FWAEAASeBagDAAP0NSZFnHJF5FpFrLsAAZSrAAKEPVgEAAYKRfcBTM9AAwAD+PEqRiAGCkY/AUzPQP06SHZIqAADAAGUxYAPAAPyXAZVDkjMhHJJJFpI7LsAAZSrAAKEPVgEAASSSZgOCkk/AUzPQJ4GNg5JZwFM0hgDAAP48PgE9i5JzwFM0hhyScYOSc8BTNIZkAQABlADAAP29SpKLASSSqwOCkpTAUzPQJ4GNg5KewFM0hgAAUy1+AFMuTQBTLxwAUzG+AFM1AAAAAAQCwAChF4GzkuyS8rquA8AAZTIAAAFdAcAAnywBWwAAEgTAAKEZgbOTOZM/CcAARF4AYAPAAKEIAATAAKEagbOTXpN/CamCAF0DwAD+LwFgA8AAnPEBHpNpwADBpgABYAPAAJzxAAAEwAChG4Gzk5+TxQmbuABdA8AA/TsBYAPAAJzxAR6TrsAA+DUBAWADwACc8QGTAATAAKEcgbOT6ZQKCcAAZTMAXQPAAP1tAmADwACc8WADwAD8lwEylAhgA8AAnPFgA8AA/JcABMAAoR2Bs5QzlD0JtxsAYQMBYAO+UWADwAD+fgAEwAChHoGzlEWUUBjAAE1FAGADwAD8lwGTBMAAoR+Bs5RllGsJgZMAYAOAhQAEwAChIIGzlIKUiQmWUgBgA708AATAAKEhgbOUnZSoGMAAR1AAYAPAAJzxASsEwAChIoGzmgGaJgnAAGU0AGADwAD+DgEemhTAAP4nAQABJ8AAZTUABMAAoSOBs5/in/4GwABlNgBgA8AA/n4Bap/1YAPAAP5+wAFw3wTAAKEkgbOgFqAqBsAAZTgAYAPAAP5+AWqgIWADwAD+fsABcOQEwAChJYGzoEKgWAbAAGU6AGADwAD+fgFqoFBgA8AA/n7AAXDkBMAAoSaBs6BwoIUGwABlOwBgA8AA/n4BaqB8YAPAAP5+wAFw6QTAAKEngbOg+qERBsAAZT0AYAPAAP5+AWqhCmADwAD+fsABcO4EwAChKIGzoSmhPQbAAGU+AGADwAD+fgFqoTVgA8AA/n7AAXDxBMAAoSmBs6FVoWkGwABlQABgA8AA/n4BaqFjYAPAAP5+wAFw9gTAAKEqgbOhgaGZBsAAZUIAYAPAAP5+AWqhkWADwAD+fsABcPsBBcAAoU+Bs5StlK2VoAAAAAOUvJWgAAAABAQElMIAAATAAEReYAPAAKEIAJTPAAAEllJgA708AJTdAAAEgZNgA4CFAJTqAAAEtxthAwFgA75RYAPAAP5+AABgA8AAoRcBPgM9F5T8LsAAR1AclSAWlRoWlREWlQouwABEXsAAoRmrscAAoQyFfcAAcxfAAE+VAQABFpU4LpZSwAChIADAAKGwwAChIT0clUYuwABlRAEAARaVTi7AAEdQwAChIQDAAKEyPRyViS7AAGVFAQABJ8AAZUYAwAChLwUIAcAAoRmAAMBTN8YIAcAAoSCBAMBTN9YIAcAAoR+CAMBTN+IIAcAAoR2DAMBTN+4JAZStwACfQwAAAAAiBsAAoSyBs5WllaqVyAAAhy8AAAABA5WwlcgAAAAAAAAAXAE+AT0clbkuwABlRQEAASeG1wDAAKEvBsAAoS2Bs5axlraXYwAAwABlLQAAAAEDlsWXYwAAAAAAAABcAT4BQ5bOFpbeFpbVLpu4wAChG4O3wAD9Hj4DTpcClwcAAIPzYAPAAJzxARyXEhaXCS6buMAAoRuGJgAAAADAAP1aQByXNBaXLS7AAGUzwAChHIdYAQABgJdAwFM5OwDAAP2Aly2XRQA9HJdOLprCAQABgJdUwFM5OwDAAKEuBsAAoS6Bs5dol22XyQAAmsIAAAABA5dyl8kAAAABAQGXgwAAAIFUYAPAAJzxAABcAT4CSZePHJeYFpeTLqmCwAChGoMcAQABgJehwFM5vQDAAP47SpeoAD89HJe5gJe0wFM5vYRSAQABLgDAAJ0TBsAAoS+Bs5fOl9OYEQAAwABlRQAAAAEDl9mYEQAAAAEBAZfhAAAAg/FgA8AA/n4AAFwBPgE9NZfvAAABAGADgIUBFpfvLoGTwAChHzUAAAABAFsBHJf3gZf1wFM6Q1YBAAGAl/vAUzouAICHNQAAAAEAWwEcmASBmALAUzpDVgEAASeArwCAh4EAwFM6QwbAAKEwgbOYFpgdmLgAAMAAZUcAAAABA5gkmLgAAAABAQGYLAAAAIGyYAPAAP5+AABgA8AA/n4BPgJJmDgcmEgWmEGAmDzAUzq8YcAA/oKAlwEAATcoAMAA/cc+AUqYVgEcmHscmHMcmGKAmF3AUzq8gL4CAAKTNxMAwAD+lGQBAAEnnO8AwAD+k2QBAAEcmIKAmH3AUzq8gL4BAAEcmJgWmJGAmIzAUzq8YcAA/oKBjQEAATcSAMAA/b4AwAD+lADAAP6TP0qYqQGAmLDAUzq8BsAAoTGBs5i9mMGY2gAAwABlSAAAAAEDmMuY2gAAAAAAAABgA8AA/JcBSpjRAReY0y7AAE1FHJjRFpjTLsAATUXAAKEeZAEAAZQAwAD9vcAAoR4GwAChMoGzmRuZIpnvAADAAGVEAAAAAQOZKZnvAAAAAQEBmToAAACBVGADwACc8QAAYAPAAP5+AT4CTplKmU0AALQSYAPAAPyXARyZVhaZTy7AAGUzwAChHJlKAgACgJliwFM74DSZaAOZaJnYAAAAAAAAAGADwAD8lwE+Aj0cmXwWmXMum7jAAKEbVgEAAYCZgMBTO+AAwAD9TEqZvgEcmcUuwABlSAAAAADAAKExAMAA/YhKmd8BJJnrAYGZ6MBTO/kGwAChM4GzmnSae5riAADAAGVJAAAAAQOahpriAAAAAQEBmo4AAACBsmADwAD+fgAAYAPAAP5+AT4BSpqaARyapoCaocBTPKPAAEiqAgACFpq3LsAAZTTAAKEiNJrFA5rFmt0AAAABAQGaxgAAAEVgA8AA/gEAAGADwAD+fgFKmswBJJrdAieC6Rya04Ga0cBTPOrAAEPhAQABkwDAAP4JAMAA/p8GwAChNIGzm6ObqJ8/AADAAGMLAAAAAQObr58/AAAABAICm8AAAADAAEmOYAPAAJzxAJvVAAAAwABlSmADwACc8QACm+gAAACWiWADwAD+fgFqAGADwAD9oXmb9QAAAIN+YAPAAP5+AWqb/GADwAD+fsABcO5cAT4ESZwMIhycEC6EJAEAAYCcG8BTPUgAwAChNQAcnCMuhCQBAAGBnC7AUz1YAMAAoTU+AUqcPAA/TpyBnIkAAMAAZUtgA8AA/n4BHJyLLsAAZUQBAAGBnJPAUz1YAMAAoTJJnJ0hHJymgpyhwFM9aUgBAAErAMAA/o0+AT2MnLfAUz3WHJy/hJy3wFM91mQBAAEknMoCJ4LqgpzFwFM9aQDAAP6TP0mc1iWc3oCc2sBTPUhgA8AAnjM+Bk6dzZ3QAAC0EmADwAD8lwEcndIuwABlSAAAAADAAKExTp3tnfIAAIKUYAPAAP5+ARyd9C7AAGVJAQABJJ4ZARyeAy63GwEAARaeEhSeDsBTPUgAAWADwACeM4KUwACc9wDAAKEdAMAAoTNOnimeLgAAgbJgA8AA/n4BJ8AAZUxOnkmeTwAAmS5gA8AA/n4BJJ5tBSeZ5oeeVMBTPsInwABlTYaeZ8BTPngnhtc9HJ51LsAAZUUBAAEknqwEhZ5+wFM+WCfAAGVOFJ6kwFM+1wgAJ8AAZU8AwAChLz0cnrUuwABlRQEAASSe3gaFnr7AUz5YJ647hJ7FwFM91ifAAGVQg57WwFM9gCfAAGVPAMAAoS8+AT0cnvQuwABlRQEAASSfNAYcnv4uwABlRAEAAYCfBsBTPUgAwAChMifAAGVRhJ8bwFM91ifAAGVQg58swFM9gCfAAGVPAMAAoS8GwAChNYGzob+hxKIqAACEJAAAAAEDoc6iKgAAAAEBAaHfAAAAg/NgA8AAnPEAAGADwAD60QE+AUqh6wEiIRyh94Ch8sBTP9RIAQABFqH6LsAAR1DAAKEhAMAA/fEAIRyiHBaiDoCiCcBTP9TAAGNowACdAUgBAAEWoh8ullLAAKEgAMAA/fEGwAChNoGzoi+iNqLQAADAAGVSAAAAAQOiRaLQAAAAAgIColYAAACD82ADwACc8QCiYwAAAIN+YAPAAP5+AABgA8AA/n4BPgFKonABIxyidy6EJAEAAYCigsBTQF0AwAChNSfAAGVTJKLMAyfAAGVUgaLFwFNAayeDswFgA8AA/n4GwAChN4GzoyKjKaQ7AADAAGVVAAAAAQOjNqQ7AAAAAgICo0cAAACD82ADwACc8QCjVAAAAIGyYAPAAP5+AABgA8AA/n4BPgNJo2Aco2mAo2TAU0DeSAEAARajbC7AAEdQwAChIQDAAP3xPgFKo4EBJKOfAoGjisBTQOwnwABlVj9Jo6siIRyjwhajtICjr8BTQN7AAGNowACdAUgBAAErAMAA/fEAIRyj4Baj0oCjzcBTQN7AAGNowACdAUgBAAEWo+MullLAAKEgAMAA/fE+AUqj9AEkpCAEgaP9wFNA7CfAAGVXFqQQgKQLwFNA3sAAY2jAAJ0BJ4MmP0qkLAGBpDPAU0DsBsAAoTiBs6T8pQGsvAAAwABZpAAAAAEDpQisvAAAAAQCAqUZAAAAg/NgA8AAnPEApSYAAACBsmADwAD+fgACpToAAACDfmADwAD+fgFqpUFgA8AA/n7AAXDfpXAAAACCVV0DwAD9bQJgA8AA/n5gA8AAnPEBagBgA8AA/aF5XAE+CD0cpYQWpX8uqYLAAKEaVgEAAYCliMBTQeQAwAD+PE6lmqWgAADAAEn9YAPAAP5+ARyloi7AAGVSAgACgKWywFNB5IKluMBTQgEAwAChNj2JpcTAU0HyHKXLLsAAZVUCAAKApdnAU0HkgaXfwFNB8gDAAKE3PYml6sBTQfIcpfEuwABlSQEAAYGl/cBTQfIAwAChM06mD6YSAAC0EmADwAD+fgEcphQuwABlRAEAAYCmHMBTQeQAwAChMk6mLqY5AACFSWADwAD+fgEcpjsuwABlSQEAARymRy63GwEAARamV4CmUsBTQeSClMAAnPcAwAChHQDAAKEzSaZjIRymboOmZ8BTQhxIAQABKwDAAP3xPgVOppCmlQAAg2hdA8AA/PkBYAPAAP5+ARymoxamnoOml8BTQhyDaMAA/Y+BpQEAATSmqQOmqabFAAAAAQEBpqoAAACD1mADwAD+fgAAYAPAAPrRAUqmsgEhHKa+HKa4g6aywFNCHEsBAAGHprnAU0OTAMAA/YFIAQABKwDAAP3xAMAA/QVOptWm3AAAmaBgA8AA/n4BHKcAHKbjh6bewFNDV4CrAQFgA8AA/n4BNKbnA6bnpv4AAAABAQGm6AAAAIPWYAPAAP5+AABgA8AA/n4BSqbwASSm/gQnwABlWBSm9MBTRBAIACfAAGVZFKb6wFNEEAgAAMAA/QRYAQABJ4EGAMAA/Q1OpxinHgAAmS5gA8AA/n4BJKdMByfAAGVaFKckwFND2wgAJ8AAZVuBpy3AU0HyJ8AAZU2Gp0DAU0L/J4bXPRynVC7AAGVFAQABJKeFBoWnXcBTQtgnwABlXBSndsBTRFwJACfAAGVdhKd+wFNCYyeZxwDAAKEvRqeOp6enmgAAAIPWYAPAAP5+AIenocBTQ1c+AT0cp7EuwABjCwMAAhynv4OnucBTQhxLAQABFKfAwFNE1goAAMAA/YGAp8bAU0HkAZaJJKfZAieB1xSn1cBTRNYKAMAAoTQ+CE6n/qgEAACZLmADwAD+fgEkqCgFJ5nmgagJwFNB8ifAAGVNhqgcwFNC/yeG1z0cqDAuwABlRQEAASSoYQaFqDnAU0LYJ8AAZVyHqFLAU0U2J8AAZV2EqFrAU0JjJ5nHAMAAoS9OqO6o+gAAwABlXlsBNQAAAAEAXQPAAP4vAWADwACc8QEcqRwWqQMWqPwuwABEXsAAoRnAAGUowAChDUsBAAGAqR3AU0HkAMAA/YEjHKkjFADAU0WnCABIAQABKwAAaqkmXQPAAP07AVuCZhQAwFNFpwgAAWADwAD95E6pOqlEAADAAGVfYAPAAP3kATUAAAABAF0DwAD+LwFgA8AAnPEBHKllFqlNFqlGLsAARF7AAKEZwABlKcAAoQ5LAQABgKlmwFNB5ADAAP2BIxypbBQAwFNGJgkASAEAASsAAGqpb10DwAD9OwFbgmYUAMBTRiYJAAFgA8AA/eROqYOpjgAAs+ZdA8AA/i8BYAPAAJzxARypoRaplYCpkMBTQeTAAFAMwACdApVJAAAAAMAA/RBGqbCp36nFAAAAsIhgA8AAnPEAFKnTwFNGkwoAPgJOqfCp9gAAg35gA8AA/n4BIyaqEAEcqhAUqgTAU0WaCACDHAEAARSqGcBTRs0LAAAAYAPAAPrRaqonYAPAAP5+wAFw7mqqN2ADwAD+fsABcPEBYAPAAP5+PRyqSi7AAGMLAwACFKpSwFNGzQsAgKpewFNB5AGDfhSqa8BTRucMAMAAoTRGqoGqsQAAAAEAWwAmqqQBFKqkwFNFmggAXQPAAPz5AVs+Ak6qlgAAALCIYAPAAJzxASaqgQEUqpbAU0dvCwBgA8AAnPFJqrshHKrLFKrAwFNGkwoAgxwBAAEUqtTAU0eODAAAwAD+Oz4BPRyq7S7AAGMLAwACFKr1wFNHjgwAgKsBwFNB5AGDfmqrDmADwAD+fsABcPbAAKE0P0arNKtiAAAAAQBbACarVwEUq1fAU0YUCQBdA8AA/PkBWz4CTqtJAAAAsIhgA8AAnPEBJqs0ARSrScBTSAoLAGADwACc8UmrbCIhHKt8FKtxwFNGkwoAgxwBAAEUq4XAU0gpDAAAwAD+OwAhJqugARyrrRSrocBTRZoIAIMcAQABFKu2wFNIKQwAAABgA8AA+tE+AT0cq88uwABjCwMAAhSr18BTSCkMAICr48BTQeQBg35qq/BgA8AA/n7AAXD7wAChND9JrBwarCDAAKB6PgFGrD+saKxUAAAApABgA8AAnPEAFqxhgKxcwFNB5KEpwACc8z4BSaxyIRysdy6EJAEAAYesgsBTSNoAwAChNT4BPRyslS6awgEAAYesm8BTSNoAwAChLj8/BsAAoTmBs6zBrNKtxAAAwABjygFqrMJgA8AA/eQCAAABA6zsrcQAAAABAQGtAwAAAIFUYAPAAJ5UAABcAT4CSa0rIiEarTDAAKB6ABatVBatToCtScBTSVmhKcAAnPOBVcAA/R1KrV0APz0crWkuwABZpAMAAoCtccBTSVkkraMCJ8AAZWAcrYIutxsBAAEWrZKArY3AU0lZwABjxcAAnlYAwAChHQGDfmqttGADwAD+fsABcOTAAKE4BsAAoTqBs63JrdquvAAAwABj+QFqrcpgA8AA/eQCAAABA634rrwAAAABAQGuEwAAAIFUYAPAAJ7jAABcAT4CSa44IiEarj3AAKB6ABauYRauW4CuVsBTShOhKcAAnPOBVcAA/R1KrmoAPz0crnYuwABZpAMAAoCufsBTShMkrqYCJ8AAZWE1AAAAAQBgA8AA/n4BNQAAAAEAYAO9dQEWrpCArovAU0oTgnDAAJ7mIxyumoEAwFNKe0gBAAErAAArFq6agQDAU0p7gL29GAFgA8AA/n4jHK6fgQDAU0puSAEAASsAACcAgQDAU0puAWADwAD+fgGDfmqur2ADwAD+fsABcOTAAKE4BsAAoTuBs67BrtKvVQAAwABj1wFqrsJgA8AA/eQCAAABA674r1UAAAABAQGvIgAAAIFUYAPAAJ6FAABcAT4BPRyvLi7AAFmkAgACgK82wFNLGyfAAGViAMAAoTgGwAChPIGzr1qva6/VAADAAGPeAWqvW2ADwAD95AIAAAEDr4uv1QAAAAEBAa+oAAAAgVRgA8AAnqcAAFwBPgE9HK+0LsAAWaQCAAKAr7zAU0t3J8AAZWMAwAChOAbAAKE9gbOv2q/rsEkAAMAAY+8Baq/bYAPAAP3kAgAAAQOwB7BJAAAAAQEBsCAAAACBVGADwACe1AAAXAE+AT0csCwuwABZpAIAAoCwNMBTS9MnwABlZADAAKE4BsAAoT6Bs7BOsF+wwwAAwABj8gFqsE9gA8AA/eQCAAABA7B9sMMAAAABAQGwmAAAAIFUYAPAAJ7aAABcAT4BPRywpC7AAFmkAgACgLCswFNMLyfAAGVlAMAAoTgGwAChP4GzsMiw2bErAADAAGPUAWqwyWADwAD95AIAAAEDsPGxKwAAAAEBAbEGAAAAgVRgA8AAnnUAAFwBPgE9HLESLsAAWaQCAAKAsRrAU0yLJ5wAAMAAoTgGwAChQIGzsTCxQbGQAADAAGPbAWqxMWADwAD95AIAAAEDsVixkAAAAAEBAbFsAAAAgVRgA8AAnpoAAFwBPgE9HLF4LsAAWaQCAAKAsYDAU0zlJ5xyAMAAoTgGwAChQYGzsZWxprH1AADAAGPoAWqxlmADwAD95AIAAAEDsb2x9QAAAAEBAbHRAAAAgVRgA8AAnrwAAFwBPgE9HLHdLsAAWaQCAAKAseXAU00/J5wBAMAAoTgGwAChQoGzsfqyC7JpAADAAGO+AWqx+2ADwAD95AIAAAEDsieyaQAAAAEBAbJAAAAAgVRgA8AAnjMAAFwBPgE9HLJMLsAAWaQCAAKAslTAU02ZJ8AAZUwAwAChOAbAAKFDgbOybrJ/szQAAMAAY8EBarJvYAPAAP3kAgAAAQOyoLM0AAAAAQEBsr4AAACBVGADwACeQwAAXAE+Ak6y0bLWAACBsmADwAD+fgEcsuwcstguwABlRwEAARay5YCy4MBTTfWAlsAAnkUAwAChMILoAgACJ4CvJ4QTAMAA/p49HLMJLsAAWaQCAAKAsxHAU031JLMvAyfAAGVmgbMpwFNOCSeDswDAAKE4BsAAoUSBs7M5s0qzwAAAwABjwwFqszpgA8AA/eQCAAABA7Nps8AAAAABAQGzhQAAAIFUYAPAAJ5MAABcAT4BPRyzkS7AAFmkAgACgLOZwFNOoiSzuwInwABlZxaztICzr8BTTqKAlsAAnk4AwAChOAbAAKFFgbOzxbPKtecAAMAAZWgAAAABA7PUtecAAAADAwOz7QAAAIFUYAPAAJ3rALP6AAAAgbJgA8AA/n4AtCMAAACCVV0DwAD9bQJgA8AA/n5gA8AAnPEAAFwBPgROtDi0QwAAmOJgA8AA/n4BHLRFLsAAZUcBAAEktGABFrRVgLRQwFNPCKQLwACd+QDAAKEwPYm0Z8BTTxYktIIDgbRwwFNPFieAr4O0d8BTT0VJtIghHLSbFrSRgLSMwFNPCFvAAJ3ySAEAASsAwACgsD4CRbSsAbS1tLcAAGJgA8AA/JcBkwEctL6EtLzAU0+7YwEAARa02ha0zxa0xYC0wMBTTwhbwACd8oWjwACgqGHAAP1rAMAA/cUBjLTkwFNPuxy04oS05MBTT7tkAQABlADAAP29PgE9HLT3grTxwFNPJIC/AgACJLT/AieFhoS0/cBTT7sctRwWtRIWtQiAtQPAU08IW8AAnfKFo8AAoKhLAQABhLUdwFNPuwDAAP1KAMAA/YJGtS+1YbU7AAAAwABlaWADwAD+fgAWtVsWtVUWtUuAtUbAU08IW8AAnfKFbcAAoKmDaMAA/Y8+AT0ctXGCtWvAU08kgL8CAAKEtXLAU1BvHLWRFrWMFrWCgLV9wFNPCFvAAJ3yhW3AAKCpSwEAAYS1ksBTUG8AwAD9gQDAAP2CPz0cta4uwABZpAQAAoC1tsBTTwiBtbzAU08WAoN+arXJYAPAAP5+wAFw6YJVgrXcwFNPJMAAoTgGwAChRoGztey1/bZ+AADAAGO7AWq17WADwAD95AIAAAEDtiC2fgAAAAEBAbZHAAAAgVRgA8AAniYAAFwBPgE9HLZTLsAAZWgDAAOAtl7AU1FNJ8AAZWoytndgA8AA/n5gA8AAnPEAAMAAoUUGwAChR4GztoO2lLcLAADAAGOkAWq2hGADwAD95AIAAAEDtra3CwAAAAEBAbbVAAAAgVRgA8AAnfwAAFwBPgE9HLbhLsAAZWgDAAOAtuzAU1G5J8AAZWsytwRgA8AA/n5gA8AAnPEAAMAAoUUGwAChSIGztxC3Ibe2AADAAGO3AWq3EWADwAD95AIAAAEDt0S3tgAAAAEBAbdrAAAAgVRdA8AAng0BWwAAXAE+AT0ct3cuwABlaAMAA4C3gsBTUiUnwABlbDK3m2ADwAD+fmADwACc8QEnwABlbRa3qIC3o8BTUiWFj8AAnhMAwAChRQbAAKFJgbO3u7fMuDcAAMAAY4UBare8YAPAAP3kAgAAAQO35rg3AAAAAQEBt/0AAACBVGADwACdTQAAXAE+AT0cuAkuwABZpAIAAoC4EcBTUqgkuDICJ8AAZW4WuCeAuCLAU1KopAvAAJ1WAMAAoTgGwAChSoGzuDy4TbjAAADAAGOXAWq4PWADwAD95AIAAAEDuGq4wAAAAAEBAbiEAAAAgVRgA8AAnboAAFwBPgE9HLiQLsAAWaQCAAKAuJjAU1MYJLi7AifAAGOYFriwgLirwFNTGKQLwACdyADAAKE4BsAAoUuBs7jFuNa5aAAAwABj/QFquMZgA8AA/eQCAAABA7jxuWgAAAABAQG5CQAAAIFUYAPAAJ74AABcAT4CTrkcuSEAAIGyYAPAAP5+ARy5Iy7AAGVHAQABJLk+ARa5M4C5LsBTU4ikC8AAnv4AwAChMD0cuUUuwABZpAIAAoC5TcBTU4gkuWMCJ8AAZW+BuV7AU1OcAMAAoTgGwAChTIGzuW25froKAADAAGQBAWq5bmADwAD95AIAAAEDuZe6CgAAAAEBAbmtAAAAgVRgA8AAnxQAAFwBPgJOucC5xQAAgbJgA8AA/n4BHLnHLsAAZUcBAAEkueIBFrnXgLnSwFNUI6QLwACfHQDAAKEwPRy56S7AAFmkAgACgLnxwFNUIyS6BQInwABlcIG6AMBTVDcAwAChOAbAAKFNgbO6D7oguqwAAMAAZAQBaroQYAPAAP3kAgAAAQO6ObqsAAAAAQEBuk8AAACBVGADwACfIAAAXAE+Ak66YrpnAACBsmADwAD+fgEcumkuwABlRwEAASS6hAEWunmAunTAU1S+pAvAAJ8pAMAAoTA9HLqLLsAAWaQCAAKAupPAU1S+JLqnAifAAGVxgbqiwFNU0gDAAKE4AABTOMIAUzj7AFM5nQBTOgwAUzqaAFM7awBTO74AUzyBAFM9JgBTP7QAU0A7AFNAvABTQcIAU0ktAFNJ5wBTSu8AU0tLAFNLpwBTTAMAU0xfAFNMuQBTTRMAU01tAFNNyQBTTnYAU07mAFNRIQBTUY0AU1H5AFNSfABTUuwAU1NcAFNT9wBTVJIAU1UtAAAAIgAAAYGzAFNVwABTK/gAUzUZAFNVvgAAAAIAU1XAAAAAAAACBMAAoVAAgbQAAAeA2gAAgi6CCACBAgAApIsAAIEbAAC9FQAAgT8AAMAAYtEAAIFgAADAAE2YAACBeAAAvjYAAIGdAADAAJzsAAAAAAACAsAAoVGBtIIpgjiGqgfAAGVyAAABYAHAAP3kAAAAAQXAAKFdAAAAAAQAAAMAAAAAAAAAAABgA8AAoVEBPwEJAQDAAP36AAAAAAkGwAChU4G0goOCmYL5AALAAFBiAAAAAQOCtIL5AAAAAgICgtAAAACxKmADvlwAgvIAAACCamADvTwAAGADwACdTQAGwAChVIG0gziDUYPOAALAAFBfAAAAAQODb4POAAAAAwMDg4sAAACxKmADvlwAg6wAAACA7WADvXUAg8gAAACFfWADwAChXgAAYAPAAJ26AAbAAKFVgbSEBYQKhEwAArOUAAAAAQOEGoRMAAAAAgIChCoAAACCbmADvVEAhDkAAACBpmEDAWADvXVcAABcAAbAAKFWgbSEjoSThK0AAsAAUF4AAAABA4SfhK0AAAABAQGEqAAAAIPzYAOCSwAAYAPAAPrRAAbAAKFXgbSE7ITxhQ8AAsAAUF0AAAABA4UBhQ8AAAABAQGFCgAAAIPzYAOCSwAAYAPAAPrRAAbAAKFYgbSFVYVahXUAAsAAUFwAAAABA4VnhXUAAAABAQGFcAAAAIPzYAOCSwAAYAPAAPrRAAbAAKFZgbSFuoW/hdkAAsAAUFsAAAABA4XLhdkAAAABAQGF1AAAAIPzYAOCSwAAYAPAAPrRAAbAAKFagbSGHoYjhj0AAsAAUFoAAAABA4Yvhj0AAAABAQGGOAAAAIPzYAOCSwAAYAPAAPrRAAbAAKFbgbSGgoaHhqgAAsAAUFkAAAABA4aXhqgAAAABAQGGpAAAAJn6YAO9KgAAYAPAAPrRAAAAU1Z5AFNWuwBTVwsAU1dKAFNXgABTV7YAU1fsAFNYIgBTWFgAU1iOAAAACQLAAKFegbSG84b5wABh3wPAAGVzAAABYAHAAP3kAAAlBMAAoWGBtIcbhycJtiPAAKFQAGADwABNnAAEwAChZIG0h0SHTAmlXgBgA8AAoVEABMAAoWKBtIf8iCoJwABldMAAoVAAXQPAAP07AWADwACc8QExiChgA8AAnPEABMAAoWWBtIiMiNgJwABQVABdA8AA/W0CYAO9dWADwACdugEeiLLAAP10AAJgA711YAPAAJ26AAAEwAChZoG0iTiJhQnAAFBTAF0DwAD9bQJgA708YAPAAJ1NAR6JW8AA/XQAAmADvTxgA8AAnU0AAATAAKFngbSJ54opCbdEAF0DwAD9bQJgA4JSYAPAAJ51AR6KAsAA/XQAAmADglJgA8AAnnUAAATAAKFogbSKiIrICcAAUBkAXQPAAP1tAmADglJgA8AAnpoBHoqiwAD9dAACYAOCUmADwACemgAABMAAoWmBtIski2EJwABQGgBdA8AA/W0CYAOCUmADwACc8QEeiz7AAP10AAJgA4JSYAPAAJzxAAAEwAChaoG0i6uL2QnAAFAcAF0DwAD+LwFgA8AAnPEBHovDwADBpgABYAPAAJzxAAAEwACha4G0jDKMcQnAAE/WAF0DwAD9bQJgA75RYAPAAJzxAR6MTMAA/XQAAmADvlFgA8AAnPEAAATAAKFsgbSM240NCcAAUEYAXQPAAP07AWADwACd6wExjQtgA8AAnesABMAAoW2BtI2XjbsJwABQQwBdA8AA/TsBYAPAAJzxATGNuWADwACc8QAEwAChY4G0kVqRbxjAAEyUwAChUABgA8AAnU0BKwTAAKFugbSS0ZLeGMAAZXUAYAPAAJzxASsEwAChb4G0k5uTpxjAAGV2AGADwACc8QErBMAAoXCBtJRflG4YwABldwBgA8AAnPEBKwTAAKFxgbSVPZVMGMAAZXgAYAPAAJzxASsEwAChcoG0lhuWLxjAAGV5AGADwACc8QErBMAAoXOBtJcXlyYYwABlegBgA8AAnPEBKwTAAKF0gbSX9ZgBGMAAZXsAYAPAAJzxASsEwAChdYG0mLmYxhjAAGV8AGADwACc8QErBMAAoXaBtJmDmZQYwABlfQBgA8AAnPEBKwTAAKF3gbSabZp6GMAAZX4AYAPAAJzxASsEwACheIG0mzebSRjAAGV/AGADwACc8QErBMAAoXmBtJwnnDkYwABlgABgA8AAnPEBKwTAAKF6gbSdF50sGMAAZYEAYAPAAJzxASsEwAChe4G0nhmeJRjAAGWCAGADwACc8QErBMAAoXyBtJ6knrUYwABlgwBgA8AAnPEBKwTAAKF9gbSfQ59PGMAAZYQAYAPAAJzxASsEwAChfoG0oAegGBjAAGWFAGADwACc8QErBMAAoX+BtKDxoQAYwABlhgBgA8AAnPEBKwTAAKGAgbShz6HcGMAAZYcAYAPAAJzxASsEwAChgYG0opmiqRjAAGWIAGADwACc8QErBMAAoYKBtKN9o5EYwABliQBgA8AAnPEBKwTAAKGDgbSkq6TEGMAAZYoAYAPAAJzxASsEwAChhIG0pcWl3RjAAGWLAGADwACc8QErBMAAoYWBtKbZpukYwABjrwBgA8AAnPEBKwEFwAChxoG0kAiQCJCEAAAAA5ASkIQAAAACAgKQGAAABLYjYAPAAE2cAJArAAAEpV5gA8AAoVEAAGADwAChXgE+AT0XkDsuwABjrxyQTi7AAGRqAQABFpB2FpBhLsAAU/7AAKFQwAChirWrvnMAwAChssAAoYUDCAHAAKFhgADAU12ZCAHAAKFkgQDAU12nCQGQCMAA/foAAAAAOwbAAKGHgbSOT45tjqYBAMAAUEwAAAABA46FjqYAAAAAAAAAXQPAAPz5AWADwACc8QFKjo4BFo6OLsAAZXTAAKFQwAChYgbAAKGIgbSOq47JkAMBAMAAZSsAAAABA47SkAMAAAAAAAAAXQPAAPz5AWADwACc8QFKjtUBHI/zMY7VXQPAAPz5AWADwACc8QkWjvkWjt8uwABQVMAAoWUpwAD9kBaPIBaPCS7AAFBTwAChZinAAP2QFo8/Fo8wLrdEwAChZynAAP2QFo9dFo9PLsAAUBnAAKFoKcAA/ZAWj3sWj20uwABQGsAAoWkpwAD9kBaPiy7AAFAcwAChahaPtBaPpi7AAE/WwAChaynAAP2QFo/ELsAAUEbAAKFsFo/cLsAAUEPAAKFthJUBAWADwACc8QE0j/oDj/qQAgAAAAEBAY/7AAAAg4BdA8AA/PkBYAPAAJzxAABdA8AA/PkBYAPAAJzxAUqQAQGAkAHAU19aAMAA/QcGwAChioG0kImQoZDfAQDAAFP+wAChUAAAAAEDkLaQ3wAAAAAAAABgA75cAUqQvwEWkMwWkL8utiPAAKFQwAChYbEqwABNpQbAAKGLgbSRc5GNkawBAKsTAAAAAQORm5GsAAAAAAAAAGADwACdTQFKkZ4BFpGeLsAATJTAAKFQwAChYwbAAKGkgbSRsZG2krwAAMAAUDwAAAABA5HAkrwAAAACAgKRzgAAAJZSYAO9PACR3AAAAIjMYQMAXAAAXAE+BEAckgIWkfMuwABMlMAAoVDAAKFjSAEAASsAwAD98ZHzkgkBHpITth8CAAKAkhzAU2AzJJJWAyfAAGWMFpJGLsAATJTAAKFQwAChYyeBagA9F5JeLsAATJTAAKFQHJJvLsAAT5UBAAGAkofAU2AzAMAAobDAAKFjPRySm4GSlcBTYD8gAAAAAAA9F5KjLsAATJTAAKFQK8AAoWMGwAChjIG0kuKS9pOGAQCFgAAAAAEDkv+ThgAAAAAAAABgA8AAnPEBPgJJkwUhHJMXFpMJLsAAZXXAAKFuSAEAASsAwAD98UqTIAEWkycuwABldcAAoW4/SpM6AReTQS7AAGV1HJNRLsAAZGoBAAEWk3kWk2QuwABT/sAAoVDAAKGKhYC+agDAAKGywAChbgbAAKGNgbSTq5O/lEoBAIWVAAAAAQOTx5RKAAAAAAAAAGADwACc8QE+AkmTzSEck94Wk9EuwABldsAAoW9IAQABKwDAAP3xSpPnARaT7i7AAGV2wAChbz9KlAABF5QHLsAAZXYclBYuwABkagEAARaUPhaUKS7AAFP+wAChUMAAoYqFlb5iAMAAobLAAKFvBsAAoY6BtJRylIaVKAEAtaYAAAABA5SRlSgAAAAAAAAAYAPAAJzxAT4CSZSXIRyUqxaUmy7AAGV3wAChcEgBAAErAMAA/fFKlLQBFpS7LsAAZXfAAKFwP0qU0AEXlNcuwABldxyU8S7AAGRqAQABFpUZFpUELsAAU/7AAKFQwAChirWmvm4AwAChssAAoXAGwAChj4G0lVCVZJYGAQC1pQAAAAEDlW+WBgAAAAAAAABgA8AAnPEBPgJJlXUhHJWJFpV5LsAAZXjAAKFxSAEAASsAwAD98UqVkgEWlZkuwABleMAAoXE/SpWuAReVtS7AAGV4HJXPLsAAZGoBAAEWlfcWleIuwABT/sAAoVDAAKGKtaW+bQDAAKGywAChcQbAAKGQgbSWM5ZHlwIBALWnAAAAAQOWV5cCAAAAAAAAAGADwACc8QE+AkmWXSEclnYWlmEuwABlecAAoXJIAQABKwDAAP3xSpZ/ARaWhi7AAGV5wAChcj9KlqABF5anLsAAZXkclsYuwABkagEAARaW7haW2S7AAFP+wAChUMAAoYq1p75vAMAAobLAAKFyBsAAoZGBtJcqlz6X4AEAhfUAAAABA5dJl+AAAAAAAAAAYAPAAJzxAT4CSZdPIRyXYxaXUy7AAGV6wAChc0gBAAErAMAA/fFKl2wBFpdzLsAAZXrAAKFzP0qXiAEXl48uwABlehyXqS7AAGRqAQABFpfRFpe8LsAAU/7AAKFQwAChioX1vmMAwAChssAAoXMGwAChkoG0mAWYGZikAQCbAwAAAAEDmCGYpAAAAAAAAABgA8AAnPEBPgJJmCchHJg4FpgrLsAAZXvAAKF0SAEAASsAwAD98UqYQQEWmEguwABle8AAoXQ/SphaAReYYS7AAGV7HJhwLsAAZGoBAAEWmJgWmIMuwABT/sAAoVDAAKGKmwO+ZADAAKGywAChdAbAAKGTgbSYypjemW4BAIW1AAAAAQOY55luAAAAAAAAAGADwACc8QE+AkmY7SEcmP8WmPEuwABlfMAAoXVIAQABKwDAAP3xSpkIARaZDy7AAGV8wAChdT9KmSIBF5kpLsAAZXwcmTkuwABkagEAARaZYRaZTC7AAFP+wAChUMAAoYqFtb5hAMAAobLAAKF1BsAAoZSBtJmYmayaWAEAhUoAAAABA5m5mlgAAAAAAAAAYAPAAJzxAT4CSZm/IRyZ1RaZwy7AAGV9wAChdkgBAAErAMAA/fFKmd4BFpnlLsAAZX3AAKF2P0qZ/AEXmgMuwABlfRyaHy7AAGRqAQABFppHFpoyLsAAU/7AAKFQwAChioVKvmAAwAChssAAoXYGwAChlYG0mn6akpsiAQCstAAAAAEDmpubIgAAAAAAAABgA8AAnPEBPgJJmqEhHJqzFpqlLsAAZX7AAKF3SAEAASsAwAD98UqavAEWmsMuwABlfsAAoXc/SprWARea3S7AAGV+HJrtLsAAZGoBAAEWmxUWmwAuwABT/sAAoVDAAKGKrLS+ZgDAAKGywAChdwbAAKGWgbSbTZthnBIBALWoAAAAAQObb5wSAAAAAAAAAGADwACc8QE+AkmbdSEcm4wWm3kuwABlf8AAoXhIAQABKwDAAP3xSpuVARabnC7AAGV/wACheD9Km7QBF5u7LsAAZX8cm9guwABkagEAARacABab6y7AAFP+wAChUMAAoYq1qL5wAMAAobLAAKF4BsAAoZeBtJw9nFGdAgEAtaQAAAABA5xfnQIAAAAAAAAAYAPAAJzxAT4CSZxlIRycfBacaS7AAGWAwACheUgBAAErAMAA/fFKnIUBFpyMLsAAZYDAAKF5P0qcpAEXnKsuwABlgBycyC7AAGRqAQABFpzwFpzbLsAAU/7AAKFQwAChirWkvmwAwAChssAAoXkGwAChmIG0nTCdRJ4EAQC1owAAAAEDnVWeBAAAAAAAAABgA8AAnPEBPgJJnVshHJ11Fp1fLsAAZYHAAKF6SAEAASsAwAD98UqdfgEWnYUuwABlgcAAoXo/Sp2gARedpy7AAGWBHJ3HLsAAZGoBAAEWne8WndouwABT/sAAoVDAAKGKtaO+awDAAKGywAChegbAAKGZgbSeKZ49no8BAKzbAAAAAQOeRZ6PAAAAAAAAAGADwACc8QFKnk4BNQAAAAEAYAPAAJzxARaeTi7AAGWCwACheyMcnluAAMBTaFpIAQABKwDAAP3xF55OLsAAZYIcnl8uwABkagEAARaehxaeci7AAFP+wAChUMAAoYqs275nAMAAobLAAKF7gADAU2haAWADwACc8QbAAKGagbSeuZ7Nny4BALWpAAAAAQOe2p8uAAAAAAAAAGADwACc8QFKnt0BNQAAAAEAYAPAAJzxARae3S7AAGWDwAChfCMcnu+AAMBTaPNIAQABKwDAAP3xF57dLsAAZYMcnvkuwABkagEAARafIRafDC7AAFP+wAChUMAAoYq1qb5xAMAAobLAAKF8gADAU2jzAWADwACc8QbAAKGbgbSfU59nn/IBAKzNAAAAAQOfb5/yAAAAAAAAAGADwACc8QE+AkmfdSEcn4YWn3kuwABlhMAAoX1IAQABKwDAAP3xSp+PARafli7AAGWEwAChfT9Kn6gBF5+vLsAAZYQcn74uwABkagEAARaf5haf0S7AAFP+wAChUMAAoYqszb5oAMAAobLAAKF9BsAAoZyBtKAcoDCg3AEAtaoAAAABA6A9oNwAAAAAAAAAYAPAAJzxAT4CSaBDIRygWRagRy7AAGWFwAChfkgBAAErAMAA/fFKoGIBFqBpLsAAZYXAAKF+P0qggAEXoIcuwABlhRygoy7AAGRqAQABFqDLFqC2LsAAU/7AAKFQwAChirWqvnIAwAChssAAoX4GwAChnYG0oQShGKG6AQCF0AAAAAEDoSOhugAAAAAAAABgA8AAnPEBPgJJoSkhHKE9FqEtLsAAZYbAAKF/SAEAASsAwAD98UqhRgEWoU0uwABlhsAAoX8/SqFiARehaS7AAGWGHKGDLsAAZGoBAAEWoasWoZYuwABT/sAAoVDAAKGKhdC+ZQDAAKGywAChfwbAAKGegbSh4KH0ooQBAIWXAAAAAQOh/aKEAAAAAAAAAGADwACc8QE+AkmiAyEcohUWogcuwABlh8AAoYBIAQABKwDAAP3xSqIeARaiJS7AAGWHwAChgD9KojgBF6I/LsAAZYccok8uwABkagEAARaidxaiYi7AAFP+wAChUMAAoYqFl75fAMAAobLAAKGABsAAoZ+BtKKtosGjaAEAnqUAAAABA6LNo2gAAAAAAAAAYAPAAJzxAT4CSaLTIRyi6Bai1y7AAGWIwAChgUgBAAErAMAA/fFKovEBFqL4LsAAZYjAAKGBP0qjDgEXoxUuwABliByjMC7AAGRqAQABFqNYFqNDLsAAU/7AAKFQwAChip6lvl4AwAChssAAoYEGwAChoIG0o8ej26SWAQC1rQAAAAEDo+uklgAAAAAAAABgA8AAnPEBPgJJo/EhHKQKFqP1LsAAZYnAAKGCSAEAASsAwAD98UqkEwEWpBouwABlicAAoYI/SqQ0ARekOy7AAGWJHKRaLsAAZGoBAAEWpIIWpG0uwABT/sAAoVDAAKGKta2+dQDAAKGywAChggbAAKGhgbSkyKTcpbABALWsAAAAAQOk8aWwAAAAAAAAAGADwACc8QE+Akmk9yEcpRUWpPsuwABlisAAoYNIAQABKwDAAP3xSqUeARalJS7AAGWKwAChgz9KpUQBF6VLLsAAZYocpW8uwABkagEAARallxalgi7AAFP+wAChUMAAoYq1rL50AMAAobLAAKGDBsAAoaKBtKXhpfWmxAEAta4AAAABA6YJpsQAAAAAAAAAYAPAAJzxAT4CSaYPIRymLBamEy7AAGWLwAChhEgBAAErAMAA/fFKpjUBFqY8LsAAZYvAAKGEP0qmWgEXpmEuwABlixymhC7AAGRqAQABFqasFqaXLsAAU/7AAKFQwAChirWuvnYAwAChssAAoYQGwAChpYG0pu6m/qeWAADAAGRtAAAAAQOnD6eWAAAAAQEBpxcAAACAlmADwAD+fgAAYAPAAJzxAT4BSqckAR+nL8AAnksDAAMWp1UuwABT/sAAoVDAAKGKgKdrwFNt+Ranhxanci7AAFP+wAChUMAAoYqF0L5lAAbAAKGmgbSnm6erqDsAAMAAZGgAAAABA6e6qDsAAAABAQGnwAAAAICWYAPAAPrRAABgA8AAnPEBPgFKp80BH6fYwACeUwMAAxan/C7AAFP+wAChUMAAoYqAqBLAU25wFqguFqgZLsAAU/7AAKFQwAChioW1vmEABsAAoaeBtKiQqKCqiAAAwABQAAAAAAEDqKqqiAAAAAICAqjCAAAAwABknWADwACc8QCo3QAAAMAAZJ5gA8AAnPEAAGADwACc8QE+Bkmo7xyo/YCo88BTbudIAQABKwDAAP3xSqkGAYGpDcBTbvc/SakdHKkrgKkhwFNu50gBAAGBqS7AU273AMAA/fFKqToBgKlBwFNu5z9JqVAcqV6AqVTAU27nSAEAARapYS7AAGOvwAChhQDAAP3xSqlzAYGpesBTbvc/SamKHKmZgamOwFNu90gBAAEWqZwuwABjr8AAoYUAwAD98UqprgGAqbXAU27nP0mpxCIcqdKAqcjAU27nSAEAARap1S6epcAAoZ8AwAD98QEcqe+BqeTAU273SAEAARap8i6epcAAoZ8AwAD98T4BSqoHARaqDi6epcAAoZ8/SqolARyqLC7AAGRqAQABHKpdFqpILsAAU/7AAKFQwAChipcuAgACFqptgKpjwFNu54KUwACc9xaqfoGqc8BTbveClMAAnPcAvqYAwAChsgbAAKGogbSq66rwq1AAAMAAZHgAAAABA6sDq1AAAAACAgKrFAAAAIFUYAPAAJzxAKsoAAAArSxgA75RAABgA8AA+tEBPgFKqzQBIRyrRRarQICrO8BTcHqClMAAnPdIAQABgatIwFNwiADAAP3xBsAAoaqBtKtVq1qr8wAAwABljcAAoVAAAAABA6tqq/MAAAABAQGrewAAAIKUYAPAAJzxAABgA8AA+tEBSquKASIlq4+Aq4rAU3DsYAPAAJ5UABar4hyrxharsS7AAFP+wAChUMAAoYqoQgEAARar0hSrzcBTcOwAAWADwACeVMAAY8XAAJ5WAL6KtZO+QQbAAKGtgbSsh6yXssEAAMAAZHMAAAABA6yhssEAAAADAgKssgAAAIKUYAPAAJzxAKzBAAAAhLdgA8AAYtYAAazZAAAAtlZgA8AA+tEBaqzlYAPAAPrRd2ADwACc8QE+CE6tAAAAAMAAZAlgA75RAEmtDxatHoGtE8BTcYS6FsAAYtxKrSYBgK0twFNxdj9JrTcWrUaBrTvAU3GEwABGjMAAYto+A0mtXoKtYsBTcZNKrW4BgK11wFNxdj9JrfgcrfwuwABljcAAoVABAAGArg3AU3F2AMAAoapKrhQBgK4bwFNxdj89i64nwFNxtRyuSBauMy7AAFP+wAChUMAAoYq1uQEAARauYBauVC6epcAAoZ+ClMAAnPcAvoBJrnIWroGBrnbAU3GEs9PAAGLdPgJOrqiusgAAnXNgA8AAYv0BJq6oAYGutMBTcYRgA8AAYv1JrsYcrtwWrtSErsrAU3KFllLAAGL/SAEAARau+xau7Bau3y62I8AAoVDAAKFhs7fAAE2kmv+4qgDAAP3xPgNJrxKCrxbAU3GTSq8iAYCvKcBTcXY/Sa83HK87LsAAZY3AAKFQAQABgK9MwFNxdgDAAKGqSq9TAYCvWsBTcXY/PYuvaMBTcbUcr4kWr3QuwABT/sAAoVDAAKGKtbkBAAEWr6EWr5UunqXAAKGfgpTAAJz3AL6APgE9i6+/wFNxtRyv7Bav1y7AAFP+wAChUMAAoYq1tQEAARawC4SwAcBTcoWWUsAAYv8AvnxJsCgiFrA3gbAswFNxhLsXwABi3gEWsE+BsETAU3GEuhXAAGLfPgE9i7BnwFNxtRawgBawcy6FSsAAoZSClMAAnPdJsJEWsKCBsJXAU3GEuhfAAGLiPgFKsPEBgLD4wFNxdj4CQBaxI4GxGMBTcYSj68AAYuCxGLExAEqxZQGAsWzAU3F2SbF8grGAwFNxkz4BPYuxlMBTcbUcsbUWsaAuwABT/sAAoVDAAKGKtboBAAGDscHAU3G1AL6BP0mx1xayAxyx8Bax2y7AAFP+wAChUMAAoYq1vwEAARax/YCx+MBTcXaClMAAnPcAvoe0rb4/SrIVAYCyHMBTcXY/TrI2sj4AAKliYAPAAJzxAR+yTMAAnl0DAAMWsmIuwABT/sAAoVDAAKGKgLJ4wFNxdoOyfsBTcbUAPRyynRayji7AAFBDwAChbVYBAAGEsqHAU3SNAMAA/UxKsq8BhLK2wFN0jQbAAKGugbSyxrLftEUAALhlAAAAAQOy+bRFAAAAAQEBswAAAACA7WADvXUAAGADwACdugE+AUqzEQEcszIWsxguwABQVMAAoWWZSgIAAoCzPsBTdRA0s0kDs0m0QAAAAAAAAABgA8AAnboBPgNOs22zfQAAwABPj2ADwACdugEcs5IWs4kupV7AAKFkwABQXwMAAxazwC7AAFP+wAChUMAAoYqAs9bAU3UQLgDAAKFUPRy0Bxaz7i7AAGV0wAChUMAAoWJWAQABgbQLwFN1XgDAAP1MSrQjAYG0KsBTdV4AwAD9iAbAAKGvgbS0SrRPtNwAAMAAT5cAAAABA7RjtNwAAAABAQG0cAAAAIGmYQMCYAO9dWADwACdulwAAFwBPgE9HLTOFrS0LsAAUFTAAKFlg/0BAAGAtNbAU3X2AMAA/YwGwAChsIG0tOG097XZAADAAE+VAAAAAQO1DrXZAAAAAQEBtRwAAACCamADvTwAAGADwACdTQE+AkAhFrU5gLUywFN2VIQfvUm1MbVDAR61TbYfAgACgLVWwFN2VCS1gwMnwABljoC1e8BTdlQngWoASrWLATUAAAABAF0DwAD9bQJgA708YAPAAJ1NARa1ki7AAFBTwAChZjUAAAABAGADvTwBgLWpwFN2VDUAAAABAGADwACdTQEctaiBtajAU3anSwEAAYK1qMBTdssAwAD9gSMctbGDAMBTdt1IAQABKwDAAP3xNQAAAAEAYAPAAJ1NARy1tS7AAGWPwAChUAEAAYC1zsBTdlQAwAChqzUAAAABAFwBHLWogbWowFN2p4C/AgACgrWowFN2y4QAwFN3GADAAP2ChADAU3cYgwDAU3bdAWADwACdTQbAAKGxgbS13rXjtmsAAMAAT5IAAAABA7X0tmsAAAABAQG2AQAAAIGmYQMCYAO9PGADwACdTVwAAFwBPgE9HLZdFrZGLsAAUFPAAKFmg/0BAAGAtmXAU3edAMAA/YwGwAChq4G0tnC2hrd/AADAAGWPwAChUAAAAAEDtp63fwAAAAEBAbasAAAAgmpgA708AABgA8AAnU0BPgNOttC24AAAwABPj2ADwACdTQEctvMWtuoupV7AAKFkwABQYgIAAha3Dy7AAFP+wAChUMAAoYqAtyXAU3f/AMAAoVM9HLdLFrcyLsAAZXTAAKFQwAChYlYBAAGBt0/AU3gWAMAA/UxKt2UBgbdswFN4FgbAAKGygbS3w7fbuIgAAMAAZGoAAAABA7ftuIgAAAABAQG3/AAAAK0sYAO+UQAAYAPAAJ4zAT4CQCEcuBSAuA/AU3ioSAEAASsAwAD98bgPuBsASrgiASa4IgEcuDcWuCkuwABP1sAAoWuZSgIAAoC4Q8BTeKg0uEkDuEm4gwAAAAAAAABgA8AAnjMBPgFKuFQBH7hfwACeQgEAAYC4d8BTeKgAAMAA/YhgA8AAnjMGwAChs4G0uI24lLonAADAAFAzAAAAAQO4sLonAAAAAQEBuMAAAACCbmADvVEAAGADwAD+fgE+BU6457jsAACBVGADwACdOwEcuO4uwABPlQEAAYC5BsBTeVcAwAChsE65GbkdAACgMmADwAD+fgEnAD0cuTAWuScupV7AAKFks5QCAAKAuUHAU3lXNLlLA7lLufIAAAABAQG5UgAAAIDtYAO9dQAAYAPAAP2hAT4CTrl1uXoAAIKUYAPAAJzxARy5fC64ZQEAAYO5l8BTec4AwAChrj2KuanAU3mVHLmtgrmpwFN5lWQBAAEkuesEIxa5t4K5s8BTeZWBVcAA/oQng9wngYsBYAPAAP5+FrnThLnOwFN55YKUwACc9yeA2Ra55YO528BTec6Avb0YAMAA/pMAwAChVT2KufnAU3mVHLn9grn5wFN5lWQBAAEkuhMCJ8AAQOQWug2BugjAU3lugpTAAJz3AMAA/pNKuhkBgrogwFN5lQbAAKG0gbS6LLo8utsAALaRAAAAAQO6SrrbAAAAAQEBulcAAACZ+mADvSoAAGADwACc8QE+AkAcunIWumkupV7AAKFkwABQWQEAAYC6g8BTessAwAChW7ppuocASrqOARy6lS7AAGRqAQABHLq9FrqoLsAAU/7AAKFQwAChirW1AQABgLrSwFN6ywC+fADAAKGyBsAAobWBtLrguvC7kQAAtpAAAAABA7r/u5EAAAABAQG7DAAAAJn6YAO9KgAAYAPAAJzxAT4CQBy7Jxa7Hi6lXsAAoWTAAFBZAQABgLs4wFN7XQDAAKFbux67PABKu0MBHLtKLsAAZGoBAAEcu3IWu10uwABT/sAAoVDAAKGKtbQBAAGAu4jAU3tdAL57AMAAobIGwAChtoG0u5a7prxBAAC2jwAAAAEDu7K8QQAAAAEBAbu/AAAAmfpgA70qAABgA8AAnPEBPgJAHLvaFrvRLqVewAChZMAAUFkBAAGAu+vAU3vvAMAAoVu70bvvAEq79gEcu/0uwABkagEAARy8JRa8EC7AAFP+wAChUMAAoYq1sgEAAYC8OMBTe+8AvnkAwAChsgbAAKG3gbS8RrxWvIYAALaOAAAAAQO8YryGAAAAAAAAAGADwACc8QE+AUq8awEWvHIuwABjr8AAoYUGwAChuIG0vIu8kLzOAACoQgAAAAEDvJa8zgAAAAEBAbynAAAAgpRgA8AAnPEAAGADwAD60QE+AUq8swEcvL+AvLrAU3y7SAEAARa8wi6FgMAAoYwAwAD98QbAAKG5gbS807zjwABCSwAAwABkXgAAAAEDvO/AAEJLAAAABQMFvQcAAACClGADwACc8QC9GQAAAIPzYAOCUgC9LAAAAK5JYAO9PAC9TgAAAJsMYAPAAJzxAWoAYAPAAP2heb1fAAAAYWADwAD8lwFqAGADwAD9oXkAYAPAAJzxAT4NQBy9fha9dS6lXsAAoWTAAFBcAQABgb2MwFN9KADAAKFYvXW9kQBOvaS9swAAsYhgA70qARa90Ra9wha9tS62I8AAoVDAAKFhs7fAAE2ksYi4xk696r33AAC1t2ADwAD60QEiIiEcvgiFvfnAU32eSAEAASsAwAD98QAcvjcWvigWvhsutiPAAKFQwAChYYfowABNqqpuAQABhb5GwFN9ngDAAHFyABa+vhy+gxa+YS7AAFP+wAChUMAAoYq1vQIAAha+m4C+lsBTfRqClMAAnPeFvqHAU32eAL6EtK2+P06+2b7hAACEImADwAD60QEcvu4WvumAvuTAU30agpTAAJz3SAEAARa/Bha+8S7AAFP+wAChUMAAoYq1qL5wAMAA/fFOvx+/JwAAwABUqmADwAD60QEiIhy/NBa/L4C/KsBTfRqClMAAnPdIAQABFr9MFr83LsAAU/7AAKFQwAChirWkvmwAwAD98QGHv2bAU35XAYa/ecBTfcpOv5C/ogAAwABlkGADwAD60QEih7+kwFN+VwGGv6/AU33KTr/Gv9UAAMAAY9JgA8AA/JcBIxS/18BTfpoIAIS/4cBTfVcrAWADwAD8l07AAEACwABAEgAAwABlkWADvlEBIxTAAEAcwFN+8QkAFsAAQDyDwABAMMBTfUCClMAAnPcWwABATxbAAEBDLp6lwAChn4KUwACc9wFgA75RTsAAQGfAAEBsAACtLGADvlEBHMAAQIMWwABAbi7AAFP+wAChUMAAoYq14AUABRbAAECmgMAAQKHAU30agpTAAJz3gcAAQKzAU30ogsAAQLLAU300FMAAQL3AU38+CwAUwABAzsBTfxMKAAC+rU7AAEEFwABBDQAAllJgA8AAnoUBH8AAQRvAAJ6KAwADFsAAQUouwABT/sAAoVDAAKGKFsAAQWAuqxPAAKGLg8AAQW/AU31AAD0XwABBiRTAAEGBwFN/+w0AqaQUwABBlMBTfvEJAMAAnmA9HMAAQbsWwABBrC7AAFBDwAChbVYBAAEUwABBv8BTf/sNAADAAP1MSsAAQc0BNQAAAAEAXQPAAP1tAmADglJgA8AAnnUBFsAAQdQut0TAAKFnNQAAAAEAYAOCUgGBwABB48BTfSg1AAAAAQBgA8AAnnUBH8AAQe/AAJ6EBQAFFsAAQgwuwABT/sAAoVDAAKGKFsAAQiIuqxPAAKGLFMAAQjHAU3+ODAAUwABCN8BTf/sNAITAAEJAwFN9VwA1AAAAAQBcARzAAEHiFMAAQeLAU4CTDgCAvwIAAhTAAEHiwFOAtw8AFADAU4DLEAAAwAD9ghQAwFOAyxAABsAAobqBtMAAQzXAAENFwABEFwAAwABQQQAAAAEDwABDVMAARBcAAAABAQHAAENkAAAAllJgA71RAABgA8AAnPEBPgNOwABDg8AAQ4oAAIF2YAPAAJzxAR/AAEOQwACfBwMAAxbAAEOwLsAAU/7AAKFQwAChihbAAEPGLqsTwAChi4DAAEPVwFOBigA9HMAAQ/UWwABD4y7AAFAcwAChalYBAAGBwABD+cBTgaMAwAD+PErAAEQGAYHAAEQNwFOBowbAAKG7gbTAAEQcwABELMAARwsAAMAAZGAAAAABA8AARDfAAEcLAAAABAMEwABETwAAAIKUYAPAAJzxAMAARGEAAACD82ADglIAwABEdAAAAK5JYAO9PADAAESWAAAAmwxgA8AAnPEBagBgA8AA/aF5AGADwACc8QE+CEAcwABEuhbAAESxLqVewAChZMAAUFsBAAGBwABEx8BTglsAwAChWcAARLHAAETMAE7AAETYwABE4AAAhCJgA8AA+tEBHMAAROwWwABE54DAAETiwFOCS4KUwACc90gBAAEWwABFBBbAAETvLsAAU/7AAKFQwAChirWpvnEAwAD98U7AAEUlwABFNQAAwABlkWADvlEBI4TAAEU/wFOCyxbAAEVVg8AARUnAU4J3gpTAAJz3FsAARWgWwABFXC6epcAAoZ+ClMAAnPcBYAO+UU7AAEWAwABFhQAArSxgA75RARzAAEWcFsAARYcuwABT/sAAoVDAAKGKteYEAAQWwABFuYDAAEW0wFOCS4KUwACc94HAAEW/wFOCW4LAAEXFwFOCaYXAAEXQwFODHAC+sU7AAEYCwABGCgAAllJgA8AAnqcBH8AARhDAAJ6sAwADFsAARjUuwABT/sAAoVDAAKGKFsAARksuqxPAAKGLg8AARlrAU4J3AD0XwABGdIfAAEZswFODyqmkhMAARn/AU4LLwACeYD0cwABGnBbAAEaNLsAAUEPAAKFtVgEAAYfAAEagwFODygDAAP1MSsAARq4BNQAAAAEAXQPAAP1tAmADglJgA8AAnpoBFsAARrUuwABQGcAAoWg1AAAAAQBgA4JSAYHAAEbDwFOCWzUAAAABAGADwACemgEfwABG18AAnqYDAAMWwABG6i6rE8AAoYuGwABG+cBTg2qHwABG/8BTg8oANQAAAAEAXAEcwABGwhTAAEbCwFOEXAgAgL8CAAIUwABGwsBThIIJABQAwFOElgoAAMAA/YIUAMBThJYKAAbAAKG8gbTAAEcQwABHIMAAT5AAAMAAZGUAAAABA8AARyvAAE+QAAAABQMFwABHSwAAAIKUYAPAAJ4zAMAAR10AAACD82ADglIAwABHcAAAAJZSYAO9PADAAEeWAAAAwABkY10DwAD9OwFgA8AAnPEBagBgA8AA/aF5wABHtgAAAMAAZGRdA8AA/TsBYAPAAJzxAWoAYAPAAP2heQBgA8AAnPEBPhVAHMAAR9kWwABH0C6lXsAAoWTAAFBaAQABgcAAR+bAU4VGAMAAoVrAAEfQwABH6wBAHMAASAkWwABIAoPAAEf5wFOFYmHAAP1rSAEAARbAAEgXhMAASAzAU4WEYcAA/WsAwAD9u8AAR/nAAEgdAE7AAEgpwABIMQAAwABUqmADwAD60QEcwABIPhbAAEg5gMAASDTAU4U2gpTAAJz3SAEAARbAAEhWFsAASEEuwABT/sAAoVDAAKGKtaq+cgDAAP3xTsAASHoAAACF3GADwACc8QBOwABIgwAAAIXdYAPAAJzxAEXAAEiSAcAASJvAAEidAABiYAPAAPyXAZMBHMAASKQUwABIosBThpkIAGMBAAEWwABIr4PAAEimwFOFYmHAAP1rAMAA/cUBFcAASLnAU4aZCBzAAEi3FMAASLnAU4aZCABkAQABlADAAP29PgROwABI1MAASNkAAIKUYAPAAJzxARzAAEjjg8AASNvAU4ViSwEAARTAAEjkwFOGmQgAAMAA/Uo9jsAASO7AU4ZyIxzAAEkAhsAASPjAU4ZySAEAASsAwAD98RzAAEkULsAAZFsEAAMrKxTAAEkswFOHAQkAAcAAY/YqwAChvxzAAElMLsAAZFwDAAMrJsAASV4BhsAASV7AU4ZyYAPAAJ7jFMAASWfAU4cBCQAAwAChwgFgA8AAnuM9FcAASXXAU4cBCRzAAEmGhMAASXzAU4WESwEAARTAAEmHwFOGmQgAAMAA/Uo9j8AASZHAU4aDIxzAAEmnh8AASZ3AU4aDSAEAASsAwAD98RzAAEm7LsAAZFsEAAMrKxTAAEnTwFOHAQkAAcAAY/YqwAChvxzAAEnzLsAAZFwDAAMrJsAASgUBh8AASgXAU4aDYAPAAJ7jFMAAShDAU4cBCQAAwAChwgFgA8AAnuM9jsAASiLAU4ZyIxzAAEo8hsAASjTAU4ZySAEAASsAwAD98RzAAEpGLraOAAAAAMAAobccwABKVy7AAGBfAwADKysmwABKbwGGwABKb8BThnJgA8AAnuMAwAChwQFgA8AAnPE9j8AASn3AU4aDIxzAAEqbh8AASpHAU4aDSAEAASsAwAD98RzAAEqlLraOAAAAAMAAobccwABKti7AAGBfAwADKysmwABKzgGHwABKzsBThoNgA8AAnuMAwAChwQFgA8AAnPFOwABK7QAAAMAAZZJgA75RAE7AAEr6AAAAwABlk2ADvlEAScAASw2FwABLEcBThh8+Aj0VwABLIsBTiSwIFsAASziGwABLMMBThnKClMAAnPc9FcAAS0TAU4k9CRbAAEteh8AAS1TAU4aDgpTAAJz3PgE9FcAAS3fAU4ksCBXAAEuFwFOJPQkWwABLoRbAAEuVLp6lwAChn4KUwACc907AAEu/wABLxAAArSxgA75RARzAAEvbFsAAS8YuwABT/sAAoVDAAKGKtegFAAUWwABL+IDAAEvzwFOFNoKUwACc94HAAEv+wFOFRoLAAEwEwFOFVBTAAEwNwFOJLAgAFMAATBrAU4k9CQAAvrROwABMP8AATEsAAMAAZZRgA8AAnPEBH8AATFHAAJ7ZAwADFsAATHIuwABT/sAAoVDAAKGKFsAATIguqxPAAKGLhsAATJfAU4ZyAE7AAEy1wABMwwAAwABllWADwACc8QEfwABMycAAnuIDAAMWwABM7C7AAFP+wAChUMAAoYoWwABNAi6rE8AAoYuHwABNEcBThoMAPRzAAE0wFsAATSEuwABQQ8AAoW1WAQABFMAATTTAU4o3CwAAwAD9TD0cwABNVRbAAE1GLsAAUEPAAKFtVgEAARTAAE1ZwFOKgQwAAMAA/UxOwABNgcAATYUAAICrYAPAAJ68AR/AAE2TwACe0wQABBbAAE2mLqsTwAChixTAAE21wFOJygoAJsAATbsBFMAATbvAU4o3CwBgA8AAntQmwABNyAEUwABNyMBTioEMAGADwACe2gBFwABN3QHAAE3mwABN6AAAYmADwAD8lwGTARzAAE3vFMAATe3AU4uGDgBjAQABFsAATfqDwABN8cBThWJhwAD9awDAAP3FARXAAE4EwFOLhg4cwABOAhTAAE4EwFOLhg4AZAEAAZQAwAD9vT4CTsAATh/AAE4nAACpYmADwACc8QEcwABOLRTAAE4pwFOLGw0AwABQDwQABBbAAE5LLsAAU/7AAKFQwAChihzAAE5pg8AATmHAU4ViSwEAARTAAE5qwFOLhg4AAMAA/UocwABOeITAAE5uwFOFhEsBAAEUwABOecBTi4YOAADAAP1KKQDAAJ7HScAAToohHMAATpYUwABOjsBTi+4PAEgBAAErAMAA/fE9HMAATq4WwABOny7AAFBDwAChbVYBAAEUwABOssBTi+4PAADAAP1MP0nAAE87hcAATz/AU4YfPRzAAE9MFMAAT0jAU4sbDQDAAFATAAAAAMAAnsk/PRzAAE9wFsAAT2MuwABQGsAAoWmAvwIAAoHAAE9xwFOFRhTAAE95wFOLGw0AAMAA/YJKwABPggEUwABPicBTixsNAAbAAKG9gbTAAE+VwABPo8AAULAAAMAAZHUAAAABA8AAT7PAAFCwAAAAAgICwABPxAAAAIFUYAPAAJzxAMAAT9gAAACtLGADvlEAAGADvlEBPgFKwABQgwEjFsAAUI+AwABQisBTjVjAAGCuwACdBBbAAFChgMAAUJzAU41YgpTAAJz3gcAAUKjAU41oAWADvlEGwAChvoG0wABQ+sAAUQrAAFJ3AADAAGSfAAAAAQPAAFEcwABSdwAAAAICAsAAUTQAAADAAGWWYAPAAJzxAMAAUVAAAADAAGWXYAPAAJzxAABgA8AAnPEBPgVOwABRfcAAUYQAAIF2YAPAAJ7jAR/AAFGKwACe7wUABBbAAFGtLsAAU/7AAKFQwAChihbAAFHDLqsTwAChiysrAcAAY/YqPRzAAFIAgsAAUfnAU44YwABQDQEAAYDAAFIOwFON6QDAAJ0LPRzAAFImgsAAUh/AU44YwABQDQEAAYHAAFI0wFON+wDAAJ0LPRzAAFJVFsAAUkYuwABQQ8AAoW1WAQABgsAAUlnAU44YAMAA/UxKwABSZgGCwABSbcBTjhgGwAChrIG0wABSfMAAUpbAAFPgAADAAGWYwAChUAAAAAEDwABSncAAU+AAAAAEBATAAFKtAAAAg/NgA4JLAMAAUrkAAACCcGADvXUAwABS0wAAALsWYAPAAJzxAMAAUuMAAADAAGP2YAPAAPrRAABgA8AAnuMBPgROwABTCsAAUxEAAIF2YAPAAJ7jAR/AAFMXwACe7wUABBbAAFM6LsAAU/7AAKFQwAChihbAAFNQLqsTwAChi4DAAFNfwFOPCoHAAFNlwFOPGAHAAGP2g8AAU37AU482PRzAAFOZFsAAU4ouwABQQ8AAoW1WAQABhMAAU53AU49TAMAA/Uw9HMAAU7GEwABTqsBTj1PAAFANAQABgsAAU7/AU48mAMAAnQtKwABTzwGEwABT1sBTj1MGwAChv4G0wABUZcAAVH/AAFZkAADAAGRbAAAAAQPAAFSKwABWZAAAAAQDA8AAVJoAAACD82ADgksAwABUpgAAAIJwYAO9dQDAAFTAAAAAuxZgA8AAnPEAAcAAVNcAAADAAGP2YAPAAPrRAWoAYAPAAP2heWADwACe4wE+A0AcwABU9RbAAFTsLqVewAChZMAAUF4BAAGAwABVAsBTkDUAwAChVsAAVOzAAFUHAEnAAFWdIiIlwABVq4LAAFWhwFOQUWADwACe4wAcwABV6BbAAFXdFMAAVdPAU5BRAgFgA8AAnuPAAGP1wACe5UgBAAGAwABV68BTkDUAwAD98QAWwABWBRTAAFX7wFOQUQIBYAPAAJ7jwABj9sAAnuc+AUrAAFYUARTAAFYbwFOQUQIBYAPAAJ7jP0rAAFYwARzAAFY3LsAAZZjAAKFQBAAEgMAAVj/AU5A1gcAAVkXAU5BDgsAAVk/AU5BRg8AAVlrAU5BiAMAAoawGwAChwIG0wABXrsAAV8jAAFiTAADAAGUQAAAAAQPAAFfXwABYkwAAAAQDA8AAV+cAAACD82ADgksAwABX8wAAAIJwYAO9dQDAAFgNAAAAuxZgA8AAnPEAAcAAWCQAAADAAGP2YAPAAPrRAWoAYAPAAP2heWADwACe4wE+AkAcwABYQhbAAFg5LqVewAChZMAAUF0BAAGAwABYU8BTkawAwAChV8AAWDnAAFhYAErAAFhfARzAAFhmLsAAZZjAAKFQBAAEgMAAWG7AU5GsgcAAWHTAU5G6gsAAWH7AU5HIg8AAWInAU5HZAMAAoawGwAChwYG0wABZccAAWYHAAFpgAADAAGBfAAAAAQPAAFmMwABaYAAAAAMDA8AAWZwAAACD82ADgksAwABZqAAAAIJwYAO9dQDAAFnMAAAAwABguGADwACe4wAAYAPAAJzxAT4DQBzAAFn1FsAAWeqCwABZ4sBTkrXAAGP1wACe5UgBAAGAwABZ+MBTkpkAwAD98cAAWeLAAFn8AEnAAFoDHMAAWiIWwABaGxbAAFoPgsAAWgfAU5K1wABQDMAAnQJhwAD9HEgBAAGUAMAA/btKwABaKAEWwABaQxbAAFo3gsAAWi/AU5K1wABQDMAAnQKDHsAA/R8/SsAAWk4BgsAAWlXAU5K1BsAAocKBtMAAWpTAAFquwABbSAAAwABkXAAAAAEDwABaucAAW0gAAAADAwPAAFrAAAAAgnBgA711AMAAWuoAAADAAGC4YAPAAJ7jAMAAWwMAAACpYmADwACc8QAAYAPAAJ7jAT4CPRzAAFsagcAAWxLAU5OtwABQDQEAAYLAAFsowFOTvwDAAJ0LSsAAWzYBgcAAWz3AU5OtBsAAocOBtMAAW03AAFtbwABb0AAAwABPmwAAAAEDwABbasAAW9AAAAABAQHAAFuFAAAAwABQDF0DwAD8+QFgA8AAnPEAAGADvlEBPgFKwABbmAEcwABbny7AAGOyAQABHMAAW7mAwABbrcBTlDiAqwEBYAO+UQE0wABbvQPAAFu9wABbygAAAAEBAcAAW74AAACDU2ADwACc8QAAYAO+UQFKwABbxAEWwABbxoHAAFvEwFOUl4KUwACc9wDAAP0EAMAAocQGwAChxIG0wABb1cAAW+PAAGHdAADAAGOyAAAAAQPAAFvwwABh3QAAAAEBAcAAXAkAAAC2FV0DwAD8+QFgA75RAABgA75RAT4ITsAAXBrAAFwmAACepWADvlEBFsAAXD0WwABcKC7AAFP+wAChUMAAoYqepb5eTsAAXQLAAF0HAACDYV0DwAD9OwFbATHAAF0JWwBOwABdFsAAXSwAAMAAZZlgA8AA+tEBKk7AAF0+wABdSAAAwABlmmADwAD60QEqRsAAXVXAAF13wABdaAAAAK0sYAO+UQCAwABdcMBTlP0+BEnAAF5sFsAAXpccwABehRbAAF5wLsAAU/7AAKFQwAChioQHAQABhcAAXpHAU5WbAL6qsxq+QD4BPYvAAF60wFOVZSk/ScAAXuAWwABfBhzAAF75FsAAXuQuwABT/sAAoVDAAKGKqEIBAAGFwABfAMBTlZsAvoqzGr5APgE9jMAAXyPAU5V8KT9JwABfQyKDwABfR8BTlWUAhMAAX2DAU5V8SsAAX2sBgcAAX3LAU5UbPz0cwABfioLAAF+FwFOVSFYBAAGFwABfjsBTlZsAwAD9TE7AAF+uwABftgAAqWJgA75RAStGwABfwsAAX+MAAAABAFsAgsAAX93AU5VIPgVOwABf1QAAAK0sYAO+UQEmwABfwgGGwABf1cBTlqJgA75RPY3AAF/rwFOWhyMcwABgB4XAAF//wFOWh0gBAAErAMAA/fGHwABgEcBTlrUcwABgLRbAAGAYLsAAU/7AAKFQwAChipcuAgAChcAAYDPAU5aHh8AAYDzAU5a1AL6mAWADvlFJwABghRbAAGCzHMAAYJ4WwABgiS7AAFP+wAChUMAAoYqEBwEAAYXAAGCqwFOWhwC+qrMavkA+AT2LwABg0MBTlWUpP0nAAGD8FsAAYSUcwABhFRbAAGEALsAAU/7AAKFQwAChiqhCAQABhcAAYRzAU5aHAL6Ksxq+QD4BPYzAAGFCwFOVfCk/ScAAYWIig8AAYWbAU5VlAITAAGF/wFOVfErAAGGKAYHAAGGRwFOVGz9KwABhqQE1AAAAAQBgA75RAYXAAGGwwFOWhyMcwABhuIYAwFOX8EgBAAErAAAWwABh0BbAAGG7LsAAU/7AAKFQwAChirWrvnOGAMBTl/ABYAO+UQAAU14ZAFNeXgBTX44AU1/VAFNgEQBTYOoAU2F5AFNiCABTYpcAU2MmAFNjtQBTZEQAU2TTAFNlYgBTZfEAU2aAAFNnDwBTZ54AU2gtAFNoxgBTaV8AU2nuAFNqfQBTawwAU2ubAFNsKgBTbLkAU21IAFNt1wBTbk4AU27FAFNwWABTcMYAU3FUAFN08ABTddQAU3YyAFN3ewBTd9kAU3iGAFN5NQBTeqsAU3s9AFN7zwBTfGEAU3ybAFN89ABTgV4AU4IfAFOFCgBTjSwAU429AFOO2gBTkAkAU5GAAFOSbQBTk3MAU5QMAFOU0QBTmDwAAAA7AAABgbQAU5kzAFNWLwBTWLsAU5kxAAAAAgBTmTMAAAAAAAIEwAChx8AAZZuBtQAAB4DvAABaAAEBAYKLgSEAALYaAAEBAa88gVkAAL42AACBigAAwABkNQABAQHAAEo6gcoAAMAAdi8AAIHjAADAAE2YAAEBAaTtgg0AAMAARI8AAAAAAAMCwAChyIG1gquCsY3tN8AAZZwAAAFgAcAAROsAAWABwAB2QwEEwAChy4FJiGKIegnAAFFXwAB2LwBgA4IEAR+IbYIUAAAAAAEFwACh1wAAAAAEAAADAAAAAAAAAAAAYAPAAKHIAT8BCQAAwABE8QAAAAAIBsAAoc2BSYgziEaITAECgZMAAAABA4hMiEwAAAAAAAAAYAOAhQAGwAChz4FJiH+IhIj9AACD7AAAAAEDiIeI/QAAAAICAoiPAAAAwABRWGADwAD+fgCIoQAAAIGmYAPAAPyNAABcAT4DPRyIqi6cywEAASSIwgInwABRWYCIusBTmnAAwAB2Sz0ciM4WiMkuwABRV8AAdi/AAHZGg+YBAAGBiNrAU5qAAIISPRyI4i6cywEAASSI+AInwABRWoCI8MBTmnAAwAB2SwbAAKHQgUmJAokHiVMAAJzLAAAAAQOJDolTAAAAAQEBiRYAAACD8WADwAD+fgAAXAE+Az0ciSQuwABRWwAAAADAAHZQPRyJNS5WAQABgIk5wFObFADAAHZPPRyJRi5WAQABJ4CvAMAAdk8GwACh0YFJiViJXYmkAADAAFFcAAAAAQOJb4mkAAAAAQEBiXcAAACs7GADwAD+fgAAXAE+AT0ciYsunMsBAAGAiZPAU5uAAMAAdksGwACh0oFJiamJsIqyAADAAFFdAAAAAQOJuoqyAAAAAQEBibsAAACDgFsAAGADwAD+fgE+AUmJxCWJyoCJyMBTm8tgA8AA/a4+AUqJ2gEkiecBFInkwFObywABYAPAAP2uSYn0JYn6gIn4wFOby2ADwAD+fj4BSooNASSKHAMng7MUihjAU5vLAAFgA8AA/n4ng7NJiiklii+Aii3AU5vLXQPAAPz5AVs+AUqKRAEcimccik0UikvAU5vLAAFdA8AA/PkBW4CrAQFgA8AA/n4BNIpRA4pRimUAAAABAQGKUgAAAIhsWwAAYAPAAP5+AUqKWAEcilguwABRXQEAAYGKY8BTnIcAwAB2TQDAAP0EWAEAASeA2QDAAP0NPgE9MIqFJIqoAifAAFFegIqlwFObywbAAKHTgUmKt4q8ix0AAMAAUVIAAAABA4rJix0AAAACAgKK0QAAAKzsYAPAAP5+AIrfAAAAgJZbAABcAT4BPRyK7C6cywEAASSLGAOAivbAU5z8J4DZHIsFLsAAUV0BAAGBixDAU50KAMAAdk0AwAB2SwbAAKHUgUmLIosni1YAAFYAAAABA4sqi1YAAAABAQGLMgAAAIPxYAPAAP5+AABcAT4BPRyLRxaLQC6Bk8AAdkhWAQABgItLwFOdawCAhwbAAKHVgUmLW4tgi4sAAMAAUVsAAAABA4tpi4sAAAAAAAAAXAE+AT0ci3IuVgEAARaLexaLdi7AAFFXwAB2L8AAdkaD4oILAMAAdk8AAFOaKgBTmlAAU5r0AFObXgBTm6kAU5zaAFOdTABTnZoAU53mAAAACALAAKHYgbWCq4Kxje0DwABRSgAAAWABwAChyAAAAgTAAKHagbWC9oMBCaUiAGADwABNnAAEwACh24G1gyKDKAmBkwFqgwZgA8AA/eQCYAOAhQABBcAAoeOBtYMtgy2DUwAAAAODNINTAAAAAgICgzoAAASBk2ADgIUAg0cAAASlImADwABNnAAAYAPAAKHYAT8DCAHAAKHbgADAU559CAHAAKHagQDAU56JCQGDLcAAodcAAAAABQbAAKHdgbWDWINdg/4AAMAAUVQAAAABA4Nng/4AAAACAgKDbwAAAIC9YAPAAP5+AIN8AAAApGFgA8AARQIAAFwBPgI9G4OJthwpPRyDoC6D7AIAAifAAFFONIOrA4Org/kAAAAAAAAAYAPAAP2hAT4CPRyDti7AAFFSAgACJ4C9gIPMwFOe6ADAAHZOPRyD2S65PAEAAYGD7MBTnvYAwABE7QDAAHZKBsAAod6BtYQDhAiFOwAAwABlnQAAAAEDhBeFOwAAAAEBAYQkAAAAmjJgA8AARbAAAFwBPgFJhDEWhEgWhDuAhDXAU5+PuWDAAEW8gVXAAP0dPgE9HIRZLsAAUVwBAAEnuWAAwAB2TD4EPRyEkC7AAFFbAAAAAMAAdlA9HISjLlYBAAEnuWAAwAB2T0aEvoTyhM8AAAC5rmADwABFsAAWhOSAhN7AU5+PuWDAAEW8PgE9HIT8LlYBAAEkhRcDJ8AAZZ4WhRKBhQbAU5/9tBLAAEWyJ4OzAMAAdk89HIUoLlYBAAEngK8AwAB2TwbAAKHfgbWFQIVFhmoAAMAAZZ8AAAABA4VShmoAAAABAQGFXwAAAJoyYAPAAEWwAABcAT4BSYVsFoWBFoV2gIVwwFOgermOwABFvYFVwAD9HT4BPRyFki7AAFFcAQABJ7mOAMAAdkw+BD0chccuwABRWwAAAADAAHZQPRyF2i5WAQABJ7mOAMAAdk9GhfOGI4YEAAAAwABWLWADwABFsAAWhheAhhHAU6B6uY7AAEW9PgE9HIYtLlYBAAEkhkYDJ8AAZZ4WhkGBhjfAU6DotBLAAEWyJ4OzAMAAdk89HIZXLlYBAAEngK8AwAB2TwbAAKHggbWGb4Z0iQoAAMAAZaAAAAABA4aDiQoAAAACAgKGowAAAMAAZaFgA8AAoeQAhsEAAACDYWADwABFoAAAXAE+AUWGzQGG34brAAC5RmADwABF5wEWhvKBhu3AU6F3gx7AAEWiASEchw2ChwHAU6GOSAEAASsAwAD98QGKhx7AU6GOFoc4gocswFOhjoO1wABF8T4ITodKh04AAMAAZaJgA8AA/JcBk06HXYdiAACu+mADwAD8lwEWh3cWh3CCh2TAU6GOuYTAAEXuYcAA/WtOh4yHlAAAwABlo2ADwAD+fgEjHIeuFoeigoeWwFOhjrTBwABF8rnvAAAAAMAAeIUnmhwngNkBYAPAAP5+TofZh+EAAMAASndgA8AA/n4BIxyH+xaH74KH48BToY60wcAARfK58AAAAADAAHiGJ4D0JwABYAPAAP5+PRyIIi7AAFFbAAAAAMAAdlBOiDyISAAAwABlpGADwAD+fgEciFaAiErAU6FnwABlpAEAAYKIYsBToY4AwACh7U6IfYiPAADAAGWlYAPAAP5+ASaIfQEciJ2AiJHAU6FnmsIBAAGCiKPAU6GOAMAAoexgA8AA/n49HIi3LlYBAAEkiP8Mg4i9wFOh3ieA2YSIwsBTofEngNmHiMjAU6KjJ4DZFIjVwFOi0ggAJ4DZhYjowFOiGSeA2YaI8cBTolYnwABlpgDAAHZPBsAAoeGBtYkPiSCN6wAAuT4BaokQYAPAAP3kAgAAAQOJL43rAAAAAQEBiTwAAACaMmADwABFsAAAXAE+A06JYYltAADAAGWhYAPAAKHkAR+Je8AAokwCAAKAiZPAU6OEFomaLqUiwACh2gBAIRyJvBaJuYCJs8BTo4S0EsAARbJIAQABKwDAAP27ibOJwwA9HInKLoPsAgACJ5oyNInXA4nXjeYAAAAAAAAAYAPAAP2hAT4KPRyJ4i7AAFFSAgACJ4C9JIoGAieD2haKAoCJ/MBTo4S0EsAARbIAwAB2Tj0cig8uwABRUgIAAifAAGWnHIoplIHGAAAAAMAA/LoAwAB2Tj0cijQuwABRUgIAAifAAGWoHIpMlIHGAAAAAMAA/LoAwAB2Tj0cilcuwABlnQEAAYCKZ8BTo4QAwACh3j0cinUuwABlnwEAAYCKg8BTo4QAwACh3z0cipEuwABRXAEAASfAAGWpAMAAdkw9HIq4LsAAUVwBAAEnhIMAwAB2TEmK2yEciu8WiuWAit/AU6OEuY/AAEW+SAEAASsAwAD98T4BPRyLAi7AAFFSAgACJ7mPJIs1AieD2haLMRaLJ4CLIcBTo4S5j8AARb60EsAARbIAwAB2Tj89HItGLoPsAgACJ8AAZLk0i1QDi1SNXwAAAAAAAABgA8AA/aEBPgE9HIthLoPsAgACJ8AAVM80i28Di2+NVQAAAAAAAABgA8AA/aEBPgM9HIt+LsAAUVICAAInmLOTAMAAdk49HIuiLsAAUVICAAInlnMnwABJsADAAHZOPRyL04CLzcBTo4S5sQEAATSL3gOL3o1JAAAAAQEBi98AAAC5nmADwABI8wAAYAPAAP2hAT4ETov5i/8AAMAAZapgA8AA/n4BHIwNgYwBwFOjmMAAZaQBAAGCjBnAU6XNAMAAoe1OjDiMQQAAwABlq2ADwAD+yAEfjEfAAP7nAAAAAEWMYwGMbIxuAABiYAPAAPyXAZMBHIx1hYxzwFOmNWMBAAEWjIIWjHuCjHfAU6XNglXAAEXtYcAA/WsAwAD9xQGNjIrAU6Y1HIyLhYyKwFOmNWQBAAGUAMAA/b0+Aj0cjKiEjJ/AU6YVgo4BAAEcjLqBjK7AU6OYwABlpAEAARyM0BaMyoKMxsBTpc2CVcAARe1LAQABhYzRwFOmNQDAAP1KAMAAoe0AwAD+3D0cjO6EjOXAU6YVgo4BAAEngNkAwAD+3D0cjRQunMsBAAEkjTsGFo0jgo0fwFOlzbQSwABF6yeA2YONKMBTpeYnwABlrISNMcBTphUnmccAwAB2SwDAAEXfAMAAdkoAwAB2Sj0cjWgug+wCAAInwABlrTSNcwONc43eAAAAAAAAAGADwAD9oQE+Aj0cjYAuwABloAIAAoGNkMBTo5gWjaOAjZ3AU6OEuYrAAEW3AMAAoeA9HI2yLsAAZaACAAKBjcLAU6OYgI3PwFOjhADAAKHgAMAAdkoAwAB2SgAAU57GAFOfbQBToFgAU6FFAFOjWgBTp7cAAAAFAsAAoeSBtY3wjfbAAFUwA8AAZa4AAAFgAcAA/eQAAV0BwABEkAFgA8AA/n4CBMAAoeaBtY5BjkwJpSIAYAPAAE2cAATAAKHngbWOYo5uCblDAGADwABFsAABBcAAokyBtY5zjnOOrwAAAAOOio6vAAAAAgICjpAAAAS5Q2ADwABFsACOowAABKUiYAPAAE2cAABgA8AAoeQBPwMIAcAAoeeAAMBTqEkIAcAAoeaBAMBTqFcJAY5zwAD9+gAAAABfBsAAoeqBtY60jsyPCQEAwABT/sAAoccAAAABA47hjwkAAAAAAAAAYAO+XAFKjuoBFo72Fo7qLqUiwACh5rEqwABNpQbAAKHsgbWPDo8Oj1gAAJrCAAAAAQOPE49YAAAAAQEBjyEAAACD82ADwABF5wAAWwFKjyoBJI9YAxyPMoCPLcBTqPeEUgEAAS4AwABGWSeA2RaPR4CPQsBTqPe56cAARicGwACh7YG1j12PZJWFAADAAGWkAAAAAQOPb5WFAAAAAQEBj30AAAC5RmADwABF5wAAYAPAAP5+AT4DTo+XAAAAgylgA8AA/n4ASY+jFo/QHI+zgI+nwFOpWqhCAQABFo+6LsAAU/7AAKHHwACh6gDAAEY1tK2+Pz4BPYmP6sBTqXMnu+5JkAMWkEkckByAkAfAU6laufUBAAEWkCouwABT/sAAocfAAKHqAMAARja0rb4/PgE9iZBjwFOpcyeA9UmQfBaQxhyQlYCQgMBTqVq1xwEAARaQpy7AAFP+wAChx8AAoeoAwABGPbStvj8+AT2JkODAU6lzJ4NTSZD5FpE+HJESgJD9wFOpWrXGAQABFpEfLsAAU/7AAKHHwACh6gDAAEY8tK2+Pz4BPYmRWMBTqXMngaZJkXEWkbgckYqAkXXAU6latcgBAAEWkZkuwABT/sAAocfAAKHqAMAARj60rb4/PgE9iZHSwFOpcydFSZHrFpIZHJH7gJHvwFOpWrXKAQABFpIDLsAAU/7AAKHHwACh6gDAAEZAtK2+Pz4BPYmSM8BTqXMngddJkkwWknscklyAklDAU6latdkBAAEWkmUuwABT/sAAocfAAKHqAMAARk60rb4/PgE9iZKVwFOpcyeIbEmSrhaS+xySx4CSssBTqVq1xQEAARaS3C7AAFP+wAChx8AAoeoAwABGO7Stvj8+AT2JkxXAU6lzJ4OpSZMuFpNeHJM+gJMywFOpWrXXAQABFpNILsAAU/7AAKHHwACh6gDAAEZMtK2+Pz4BPYmTeMBTqXMngk5Jk5EWk8Eck6GAk5XAU6latc0BAAEWk6suwABT/sAAocfAAKHqAMAARkK0rb4/PgE9iZPbwFOpcydiSZP0FpQjHJQEgJP4wFOpWrXVAQABFpQNLsAAU/7AAKHHwACh6gDAAEZKtK2+Pz4BPYmUPcBTqXMnlshJlFYWlIUclGaAlFrAU6latdMBAAEWlG8uwABT/sAAocfAAKHqAMAARki0rb4/PgE9iZSfwFOpcyeDqEmUuBaVDByU2haUvC7AAFP+wAChx8AAoeqEBwEAARaU8oCU5sBTqVq56cAARicAvqqzGr5APgE9iZUnwFOpcyeA8j4BPYmVSMBTqXMnmU9KlWABJJWBAoGVacBTqXMWlX2AlXHAU6latBLAAEXrBsAAoe6BtZWKlZ2V+QAAuRABapWLYAPAAP3kAgAAAQOVq5X5AAAAAQEBlbcAAACD82ADwABJ8wAAYAPAAP5+AT4BSpXDASSV9QInwABlrxyV2C7AAGWkAQABHJXvFpXpgJXkwFOs24JVwABF7UsBAAGTAMAA/UoAwACh7QbAAKHvgbWV/pYFlrkAAMAAX4UAAAABA5YXlrkAAAACAgKWJgAAAIPzYAPAAEfMAJYzAAAAwABlsGADwAD+fgAAYAPAAP5+AT4DTpZIlk0AAIXFYAPAAP5+ARyWTy7AAGWkAQABFpZggJZbwFOtT4XFwABH0ADAAKHtTpZylngAAIXHYAPAAP5+ARyWei7AAGWkAQABFpaLgJaGwFOtT4XHwABH0QDAAKHtSpaXASSWtQWBlqDAU61dJ4NbgpapwFOteCeA2YOWr8BTragGwACh8IG1lr6W0Zc1AAC47wFqlr9gA8AA/eQCAAABA5bZlzUAAAABAQGW3wAAAIPzYAPAAEhdAABgA8AA/n4BPgJOlvKW+gAAhcJgA8AA/n4BHJb8LsAAZaQBAAEWlw2AlwjAU64khcLAAEhPAMAAoe1KlxsBJJcxAifAAGWxgZcpwFOuPQbAAKHxgbWXOpdNl4MAALjwAWqXO2ADwAD95AIAAAEDl1WXgwAAAAEBAZdbAAAAg/NgA8AAR9sAAGADwAD+fgFKl2QBHJdkLsAAX4UCAAKAl3fAU66qJ8AAZbIAwACh7wbAAKHygbWXiJebl9oAALjxAWqXiWADwAD95AIAAAEDl6aX2gAAAAEBAZevAAAAg/NgA8AASDkAAGADwAD+fgFKl7gBHJe4LsAAX4UCAAKAl8vAU68KJ8AAZbMAwACh7wbAAKHzgbWX35fymF8AALjyAWqX4GADwAD95AIAAAEDl/2YXwAAAAEBAZgGAAAAg/NgA8AASGYAAGADwAD+fgE+Ak6YGZghAACFwmADwAD+fgEcmCMuwABlpAEAARaYNICYL8BTr2qFwsAASE8AwACh7UqYQgEkmFsCJ8AAZbSBmFPAU6+DBsAAofSBtZhkmHeYswAAuPMBaphlYAPAAP3kAgAAAQOYgZizAAAAAQEBmIkAAACD82ADwABIMAAAYAPAAP5+AUqYkgEcmJIuwABfhQIAAoCYpcBTr/AnwABltQDAAKHvBsAAofWBtZi4mMuZCgAAuPQBapi5YAPAAP3kAgAAAQOY1pkKAAAAAQEBmN8AAACD82ADwABIQgAAYAPAAP5+AUqY6AEcmOguwABfhQIAAoCY+8BTsFAnwABltgDAAKHvBsAAofaBtZkPmSKZ6AAAuPUBapkQYAPAAP3kAgAAAQOZMpnoAAAAAQEBmUAAAACD82ADwABGoQAAYAPAAP5+AT4DTplTmVwAAMAAZbdgA8AA/n4BHJleLsAAZaQBAAEWmW+AmWrAU7CwYcAARqoAwACh7U6Zg5mLAADAAGW4YAPAAP5+ARyZjS7AAGWkAQABFpmegJmZwFOwsCfAAEarAMAAoe1KmaoBJJnkBCfAAGW5gZnJwFOwySfAAGW6gpncwFOw+gbAAKH3gbWZ7ZoAmtkAALEZAWqZ7mADwAD95AIAAAEDmgqa2QAAAAEBAZoSAAAAg/NgA8AASIIAAGADwAD+fgE+A06aKpoxAACCSWADwABFsAEcmkoWmkAWmjMuuUPAAKHnuY7AAEW9SwEAAZMAwAD9SkmaUyEcmmIWmlyAmlfAU7F0mS7AAEh+SAEAASsAwAD98T4BSppzASSaqgUnwABluxaajhaaiICag8BTsXSZLsAASH6jpsAAhfsnwABlvBaapYGansBTsY20EsAARbIngyY/Spq2ASSa1QMnwABlvRaa0IGaycBTsY20EsAARbIngyYGwACh+IG1mt6a8Zs2AACGFwFqmt9gA8AA/eQCAAABA5r+mzYAAAABAQGbCQAAAIYVYAPAAEi8AABgA8AA/n4BSpsWASSbNgInwABlvhabLICbI8BTsmiGFcAASL4GwACh+YG1mzubTpwzAACxGwFqmzxgA8AA/eQCAAABA5tbnDMAAAABAQGbZgAAAIPzYAPAAEiLAABgA8AA/n4BPgNOm36bhQAAgklgA8AARbABHJueFpuUFpuHLrlDwACh57mOwABFvUsBAAGTAMAA/UpJm6chHJu2FpuwgJurwFOyxZkuwABIfkgBAAErAMAA/fE+AUqbxwEknAEFJ8AAZb8Wm+UWm9+Am9rAU7LFmS7AAEh+o6bAAIX7J8AAZbwWm/yBm/XAU7LetBLAAEWyJ4MmP0qcDQEknC8DJ8AAZcAWnCqBnCPAU7LetBLAAEWyJ4MmBsAAofqBtZw4nEucuAAAuPYBapw5YAPAAP3kAgAAAQOcVpy4AAAAAQEBnF8AAACD82ADwABGwwAAYAPAAP5+AT4BSpxrARycci7AAGXBAwADJ8AAZcIknKYBFpygFpyYgJyTwFOzuZZSwABGxYC9vRgWnK2AnKjAU7O5glXAAEXtAMAAogkGwACh+4G1nL2c0J0yAAC49wFqnL5gA8AA/eQCAAABA5zenTIAAAABAQGc6gAAAIPzYAPAAEbRAABgA8AA/n4BPgFKnPYBHJz9LsAAZcEDAAMnwABlwycAFp0ngJ0iwFO0P4JVwABF7QDAAKIJBsAAofyBtZ03nUqdiQAAuPgBap04YAPAAP3kAgAAAQOdVZ2JAAAAAQEBnV4AAACD82ADwABH5AAAYAPAAP5+AUqdZwEcnWcuwABfhQIAAoCdesBTtKwnwABlxADAAKHvBsAAof2BtZ2OnaGdwAAAuPkBap2PYAPAAP3kAgAAAQOdqp3AAAAAAQEBnbEAAACD82ADwABIbwAAYAPAAP5+AUqdugEnwABlxQbAAKH+gbWdxZ3YnskAALj7AWqdxmADwAD95AIAAAEDneWeyQAAAAEBAZ3wAAAAg/NgA8AAR1EAAGADwAD+fgE+A0md/BaeBYCeAMBTtVW6csAAR18+AUqeGgEknlQCJ8AAZcYcnjguwABlpAEAARaeSYCeRMBTtVWFj8AAR04AwACh7T9OnmeecQAAwABIiGADwAD+fgEWnoAWnniAnnPAU7VVllLAAEdMgL29GEqeigEknsUEJ8AAZcccnp4uwABlpAEAARaer4CeqsBTtVWFj8AAR04AwACh7SeBaoGeu8BTtbEGwACh/4G1ns6e4Z+oAAC4/AFqns9gA8AA/eQCAAABA57un6gAAAABAQGe+QAAAIPzYAPAAEdiAABgA8AA/n4BPgNOnwyfFAAAwABlyGADwAD+fgEcnxYuwABlpAEAARafJ4CfIsBTtjqAlsAAR2sAwACh7U6fOp9EAADAAEiIYAPAAP5+ARafUxafS4CfRsBTtjqWUsAAR0yAvb0YSp9dASSfpAYnwABlyRyfcS7AAGWkAQABFp+CgJ99wFO2OoWPwABHTgDAAKHtJ4Fqgp+OwFO2hSeBnYGfnMBTtlMGwACiAIG1n62fwKGiAAC5HwFqn65gA8AA/eQCAAABA5/UoaIAAAABAQGf5gAAAIPzYAPAAEd+AABgA8AA/n4BPgROn/mgAwAAwABIiGADwAD+fgEWoBIWoAqAoAXAU7cYllLAAEeDgL29GE6gI6AuAADAAGXKYAPAAP5+ARygMC7AAGWkAQABFqBBgKA8wFO3GIWPwABHhwDAAKHtTqBXoFoAAKq5YAPAAP5+ARagYYCgXMBTtxi6fcAAR4RJoGsWoHSAoG/AU7cYuoTAAEeKPgJOoI+glwAAwABlyGADwAD+fgEcoJkuwABlpAEAARagqoCgpcBTtxiAlsAAR4sAwACh7UqguAEkoPYIJ8AAZcuCoNLAU7daJ4FqgaDewFO3MSeA2YOg6cBTt4wnwABlzISg7sBTt8FJoQMWoQyAoQfAU7cYuoLAAEeIPgFKoR0BJKFQBSfAAGXLg6E3wFO3jIKhOsBTt1ongWqBoUbAU7cxPgFKoWUBJKGYBSfAAGXLgqF/wFO3WieBaoGhi8BTtzGDoZXAU7eMBsAAogGBtaGnobqiFQAAuP4BaqGoYAPAAP3kAgAAAQOhyKIVAAAAAQEBodQAAACD82ADwABHbgAAYAPAAP5+AT4BSqHgASSiEQInwABlzRyh9S7AAGWkAQABFqIGgKIBwFO4sYWPwABHcgDAAKHtBsAAogKBtaIaoi2iuAAAuRUBaqIbYAPAAP3kAgAAAQOiOqK4AAAAAQEBokUAAACD82ADwABHoAAAYAPAAP5+AT4CTqJYomIAAMAAZc5gA8AA/n4BFqJyFqJpgKJkwFO5IIJwwABHm4C9vRhKonwBJKK0BCfAAGXPHKKQLsAAZaQBAAEWoqGAopzAU7kgnwfAAEekAMAAoe0ngWqBoqrAU7k5BsAAogOBtaK9otCjlQAAuRYBaqK+YAPAAP3kAgAAAQOi3aOVAAAAAQEBougAAACD82ADwABHpwAAYAPAAP5+AT4DTqL7owMAAMAAZchgA8AA/n4BHKMFLsAAZaQBAAEWoxaAoxHAU7nCgJbAAEetAMAAoe1OoymjMwAAwABlzmADwAD+fgEWo0MWozqAozXAU7nCgnDAAEebgL29GEqjTQEko5EGJ8AAZdAco2EuwABlpAEAARajcoCjbcBTucKfB8AAR6wAwACh7SeBaoKje8BTug0ngZ2Bo4nAU7nbBsAAogSBtaOao62kIAAAuP8BaqObYAPAAP3kAgAAAQOjtqQgAAAAAQEBo70AAACD82ADwABIdQAAYAPAAP5+AT4CTqPVo9wAAIJJYAPAAEWwARyj9Raj6xaj3i65Q8AAoee5jsAARb1LAQABkwDAAP1KSqP+ASSkHAMnwABl0RakF4GkEMBTurm0EsAARbIngyYGwACiBYG1pCWkOKR6AAC5AAFqpCZgA8AA/eQCAAABA6REpHoAAAABAQGkTgAAAIPzYAPAAEkSAABgA8AA/n4BSqRXARykVy7AAF+FAgACgKRqwFO7MifAAGXSAMAAoe8GwACiBoG1pH6kkaTwAAC5AQFqpH9gA8AA/eQCAAABA6SipPAAAAABAQGksQAAAIPzYAPAAEkbAABgA8AA/n4BPgFKpL0BHKTELsAAX4UCAAKApNfAU7uSJ8AAZdMAwACh7wbAAKIHgbWk9aUIpU0AALkCAWqk9mADwAD95AIAAAEDpRWlTQAAAAEBAaUgAAAAg/NgA8AASQcAAGADwAD+fgFKpSkBHKUpLsAAX4UCAAKApTzAU7v0J8AAZdQAwACh7wbAAKIIgbWlUqVlpm0AALEgAWqlU2ADwAD95AIAAAEDpWymbQAAAAEBAaVxAAAAg/NgA8AASKYAAGADwAD+fgE+BE6liaWTAAC6u2ADwABFsAEcpawWpaIWpZUuuUPAAKHnuY7AAEW9SwEAAZMAwAD9Sk6lwaXLAAC6vGADwABFsAEcpeQWpdoWpc0uuUPAAKHnuY7AAEW9SwEAAZQAwAD9Sk6l9KYAAADAAGXVYAPAAP5+ARymAi7AAGWkAQABHKYZFqYTgKYOwFO8VIJVwABF7UsBAAGTAMAA/UoAwACh7UqmIwEkpmkHJ8AAZdaDpjDAU7zNJ8AAZdcWpkyBpkLAU7xttBLAAEWyJ8AAZdgWpmSCplrAU7ydtBLAAEWyJ4MmBsAAogmBtaZypnmn7gAAwABlwQAAAAEDpoyn7gAAAAMDA6abAAAAwABl2WADwAD+fgCmrgAAAMAAZdpgA8AA/n4Aps8AAABbXQPAAP07AWADwABF5wAAYAPAAP5+AT4DTqbtpv0AAMAAZdtgA8AA/sgBH6cDwAD+5wAAAABFpxcBpyCnIgAAYmADwAD8lwGTARynKYSnJ8BTvc1jAQABFqc1gqcrwFO9jmHAAP1rAMAA/cUBjKc9wFO9zRynPoSnPcBTvc1kAQABlADAAP29PgJJp0ohHKdQhKdOwFO9zUgBAAGTAMAA/bs9HKdmg6dWwFO9rYKOAQABJ4GLAMAA/tw/PRyniYOnecBTva2CjgEAARynjy7AAGWkAQABHKekgqebwFO9jksBAAGEp6XAU73NAMAA/UoAwACh7QDAAP7cSqe1ASSn6gaAp77AU71uJ4NbgafLwFO9fieD3IOn2cBTva0ngyYGwACiCoG1p/OoBqinAAC5AwFqp/RgA8AA/eQCAAABA6gQqKcAAAABAQGoGAAAAIPzYAPAAEmnAABgA8AA/n4BPgNOqCuoNAAAhY9gA8AA/n4BHKg2LsAAZaQBAAEWqEeAqELAU77dhY/AAEm0AMAAoe1OqF2oYwAAJ2ADwAD+fgEcqGUuwABlpAEAARaodoCoccBTvt0nwABJtQDAAKHtSqiCASSoowUnwABl3IGoksBTvvYnmcaCqJzAU78mJ5nHBsAAoguBtaisqL+ppwAAuQQBaqitYAPAAP3kAgAAAQOoz6mnAAAAAQEBqN0AAACD82ADwABJuQAAYAPAAP5+AT4ETqjwqPkAAIWPYAPAAP5+ARyo+y7AAGWkAQABFqkMgKkHwFO/noWPwABJwwDAAKHtTqkiqSgAACdgA8AA/n4BHKkqLsAAZaQBAAEWqTuAqTbAU7+eJ8AAScQAwACh7U6pTqlUAACAlmADwAD+fgEcqVYuwABlpAEAARapZ4CpYsBTv56AlsAAScUAwACh7UqpcwEkqaMGJ8AAZd2BqYnAU7+3J5nGgqmTwFO/5yfAAGXeg6mdwFPAFQbAAKIMgbWprKm/qxoAALkFAWqprWADwAD95AIAAAEDqc+rGgAAAAEBAandAAAAg/NgA8AASWsAAGADwAD+fgE+A06p8Kn2AACAlmADwAD+fgEcqfguwABlpAEAARyqDxaqCYCqBMBTwJiCVcAARe1LAQABkwDAAP1KAMAAoe1JqhkhHKo1FqoigKodwFPAmLrtwABJbUgBAAErAMAA/fE+Ak6qTapRAACZ+mADwAD+fgEeqlPAAGQ3AwADFqp3FqprLqUiwACh5rO3wABNpBaqnRaqkS6lIsAAoea4LcAATaAWqq6AqqnAU8CYuu3AAEltAEqqyQEkqu4EJ8AAZd+CquDAU8ERJ8AATziBqujAU8CxP0qq+gEkqxYCJ8AAZeCBqxDAU8CxBsAAog2BtasfqzKrjQAAuQYBaqsgYAPAAP3kAgAAAQOrRKuNAAAAAQEBq1QAAACD82ADwABG+gAAYAPAAP5+AUqrYwEcq2MuwABl4QIAAoCrd8BTwcAnwABl4gDAAKIOBsAAog6BtauSq5mtFQAAwABl4QAAAAEDq6ytFQAAAAICAqu8AAAAu+1gA8AARuQAq8sAAACCa2ADwAD+fgAAYAPAAP5+AT4GTqveq+cAAIWPYAPAAP5+ARyr6S7AAGWkAQABFqv8gKv1wFPCGIWPwABG7gDAAKHtTqwSrBcAAIC9YAPAAP5+ARasKRasIICsGcBTwhilNMAARueAvcAAS91OrDqsQQAAgklgA8AA/n4BJKxUA4KsRcBTwj8ngWqDrE/AU8JvTqxerGUAAINiYAPAAPyXAWqsb2ADwAD8lxVOrIqslAAAW10DwAD9OwFbARyspBasnYCslsBTwhiCVcAARe2BWAEAAYWsrMBTwr0AwAD9XkqsuQEcrO0crMAuwABlwQMAA4Gs1MBTwiaErNrAU8KYJqziAYas4sBTwtddA8AA/TsBYAPAAEXnAMAAoglkAQABJK0RAyeD3BatAoCs+8BTwhiFksAARu0ngyYAwAD+kwbAAKIPgbWtGq0trZoAALkIAWqtG2ADwAD95AIAAAEDrUWtmgAAAAEBAa1bAAAAg/NgA8AARwEAAGADwAD+fgFKrWoBHK1qLsAAZeECAAKArX7AU8OVJ8AAZeMAwACiDgbAAKIQgbWtnq2xrh4AALkHAWqtn2ADwAD95AIAAAEDrcmuHgAAAAEBAa3fAAAAg/NgA8AARw4AAGADwAD+fgFKre4BHK3uLsAAZeECAAKArgLAU8P1J8AAZeQAwACiDgbAAKIRgbWuIq41rqIAALkJAWquI2ADwAD95AIAAAEDrk2uogAAAAEBAa5jAAAAg/NgA8AARxgAAGADwAD+fgFKrnIBHK5yLsAAZeECAAKArobAU8RVJ8AAZeUAwACiDgbAAKISgbWup666r1YAALkKAWquqGADwAD95AIAAAEDrsuvVgAAAAEBAa7aAAAAu+1gA8AARyIAAGADwAD+fgE+Ak6u7672AACCSWADwAD+fgEWrwcWrv+ArvjAU8S1llLAAEckgL29GEqvEQEcrxguwABlwQMAAyfAAGXmga88wFPEzhavS4CvRMBTxLWCVcAARe0AwACiCQbAAKITgbWvW69usAcAALkLAWqvXGADwAD95AIAAAEDr36wBwAAAAEBAa+MAAAAu+1gA8AARy8AAGADwAD+fgE+Ak6voa+oAACCSWADwAD+fgEWr7kWr7GAr6rAU8VOllLAAEckgL29GEqvwwEcr8ouwABlwQMAAyfAAGXnga/twFPFZxav/ICv9cBTxU6CVcAARe0AwACiCQbAAKIUgbWwDLAfsNYAALkMAWqwDWADwAD95AIAAAEDsDmw1gAAAAEBAbBRAAAAu+1gA8AARz4AAGADwAD+fgE+Ak6wZrBtAACCSWADwAD+fgEWsH4WsHaAsG/AU8XnllLAAEckgL29GEqwiAEcsI8uwABlwQMAAyfAAGXogbC8wFPGABawy4CwxMBTxeeCVcAARe0AwACiCQbAAKIVgbWw27DusZ8AALkNAWqw3GADwAD95AIAAAEDsQaxnwAAAAEBAbEcAAAAu+1gA8AAR0QAAGADwAD+fgE+Ak6xMbE4AACCSWADwAD+fgEWsUkWsUGAsTrAU8aAllLAAEckgL29GEqxUwEcsVouwABlwQMAAyfAAGXpgbGFwFPGmRaxlICxjcBTxoCCVcAARe0AwACiCQbAAKIWgbWxpLG3so8AALj9AWqxpWADwAD95AIAAAEDsceyjwAAAAEBAbHVAAAAg/NgA8AAR7gAAGADwAD+fgE+BE6x5bHuAACI1mADwACZogEWsfWAsfDAU8cZuozAAEe6TrIOshMAAIKXYAPAAP5+ASSyJgEWsiGBshjAU8cytOXAAJmnTrIwsjcAAIJVYAPAAP5+ARyyVhyyRRayPoCyOcBTxxmCVcAARe2AqwEBYAPAAP5+ARaySS7AAGWkwACh7QDAAP0EWAEAASeBiwDAAP0NSrJmASSyiwUnwABl6oKyfMBTx1Ing0+DsoPAU8d2J4MmBsAAoheBtbKUsqey4AAAuRIBarKVYAPAAP3kAgAAAQOysLLgAAAAAQEBsrcAAACD82ADwABJJAAAYAPAAP5+AUqywAEcssAuwABfhQIAAoCy08BTyA4nwABl6wDAAKHvBsAAohiBtbLksvezRQAAuRMBarLlYAPAAP3kAgAAAQOzBbNFAAAAAQEBsxEAAACD82ADwABJLQAAYAPAAP5+AUqzIAEcsyAuwABfhQIAAoCzM8BTyG4nwABl7ADAAKHvBsAAohmBtbNKs120iAAAuRQBarNLYAPAAP3kAgAAAQOzbbSIAAAAAQEBs3sAAACD82ADwABJoAAAYAPAAP5+AT4DTrOUs6MAAMAAZe1gA8AA/sgBH7OpwAD+5wAAAABFs70Bs8azyAAAYmADwAD8lwGTARyzz4KzzcBTyQdjAQABFrPdFrPWgLPRwFPIzoJVwABF7WHAAP1rAMAA/cUBirPlwFPJBxyz5oKz5cBTyQdkAQABlADAAP29PgJJs/IhHLP4grP2wFPJB0gBAAGTAMAA/bs9HLQNgbP+wFPI54KOAQABJ4GLAMAA/tw/PRy0L4G0IMBTyOeCjgEAARy0NS7AAGWkAQABHLRMFrRGgLRBwFPIzoJVwABF7UsBAAGCtE3AU8kHAMAA/UoAwACh7QDAAP7cSrRdASS0hAMnwABl7oG0dMBTyOcnmccGwACiGoG1tI20oLXEAAC5GAFqtI5gA8AA/eQCAAABA7SvtcQAAAABAQG0vAAAAMAAUO1gA8AASLIAAGADwAD+fgE+BE601rTgAADAAGXvYAPAAEWwARy0+Ra07xa04i65Q8AAoee5jsAARb1LAQABkwDAAP1KTrUOtRgAAMAAViZgA8AARbABHLUxFrUnFrUaLrlDwACh57mOwABFvUsBAAGUAMAA/UpOtUG1TQAAwABl1WADwAD+fgEctU8uwABlpAEAARy1aBa1YoC1W8BTyhqCVcAARe1LAQABkwDAAP1KAMAAoe1KtXIBJLXAByfAAGXwg7WHwFPKmSfAAGXXFrWjgbWZwFPKNbQSwABFsifAAGXxFrW7grWxwFPKZ7QSwABFsieDJgbAAKIbgbW1ybXctiEAALkZAWq1ymADwAD95AIAAAEDtem2IQAAAAEBAbX0AAAAg/NgA8AAR+0AAGADwAD+fgFKtf0BHLX9LsAAX4UCAAKAthDAU8tCJ8AAZfIAwACh7wbAAKIcgbW2JrY5tqYAALkaAWq2J2ADwAD95AIAAAEDtkS2pgAAAAEBAbZNAAAAg/NgA8AASFQAAGADwAD+fgE+Ak62YLZoAACFwmADwAD+fgEctmouwABlpAEAARa2e4C2dsBTy6KFwsAASE8AwACh7Uq2iQEktqICJ8AAZfOBtprAU8u7BsAAoh2Btbartr62+gAAhcMBarasYAPAAP3kAgAAAQO2xrb6AAAAAQEBtswAAACD82ADwABI0gAAYAPAAP5+AUq21QEktvoCJ8AAZfQctt0uwABlpAEAARy29Ba27oC26cBTzCiCVcAARe1LAQABkwDAAP1KAMAAoe0GwACiHoG1tv+3Erd5AAC5HAFqtwBgA8AA/eQCAAABA7clt3kAAAABAQG3NgAAAIPzYAPAAEjgAABgA8AA/n4BPgFKt0IBJLd1AifAAGX1FrdvFrdhgLdcwFPMoqWjwABF6YC9vRgGwACiH4G1t363kbfsAAC5FwFqt39gA8AA/eQCAAABA7egt+wAAAABAQG3rQAAAIPzYAPAAEjaAABgA8AA/n4BPgFKt7kBJLfoAifAAGX2FrfiFrfUgLfPwFPNCKWjwABF6YC9vRgGwACiIIG1t/G4BLkPAAC5HQFqt/JgA8AA/eQCAAABA7gMuQ8AAAABAQG4EgAAALmeYAPAAEjzAABgA8AA/n4BPgROuCq4MQAAgo9gA8AA/sgBH7g3wAD+5wAAAAA9HLhSgbhLwFPNh4KOAQABJ8AAZfcAwAD+3EW4ZgG4b7hxAABiYAPAAPyXAZMBHLh4grh2wFPNv2MBAAEWuIUWuH6AuHrAU81uglXAAEXtYcAA/WsAwAD9xQGKuI3AU82/HLiOgriNwFPNv2QBAAGUAMAA/b0+Akm4mhy4oIK4nsBTzb+AlwEAAZMAwAD9xz0cuKyBuKXAU82Hgo4BAAEngYsAwAD+3D89HLjGgbi/wFPNh4KOAQABHLjMLsAAZaQBAAEcuOIWuNyAuNjAU81uglXAAEXtSwEAAYK448BTzb8AwAD9SgDAAKHtAMAA/txKuPMBHLkBgbj6wFPNhyMAAAAAwAD+4QbAAKIhgbW5FLknuW0AALkgAWq5FWADwAD95AIAAAEDuS+5bQAAAAEBAbk1AAAAg/NgA8AARowAAGADwAD+fgE+AUq5QQEkuWkCJ8AAZfgcuVAuwABlpAEAARa5YYC5XMBTztKAlsAARo4AwACh7QbAAKIigbW5crmFucoAALEYAWq5c2ADwAD95AIAAAEDuZC5ygAAAAEBAbmZAAAAg/NgA8AASTYAAGADwAD+fgFKuaIBJLnKAifAAGX5HLmtLsAAZaQBAAEcucQWub6AubnAU89BglXAAEXtSwEAAZMAwAD9SgDAAKHtBsAAoiOBtbnPueK6MAAAuSIBarnQYAPAAP3kAgAAAQO58LowAAAAAQEBufwAAACD82ADwABIHgAAYAPAAP5+AUq6CwEcugsuwABfhQIAAoC6HsBTz7snwABl+gDAAKHvBsAAoiSBtbo0uke6mAAAuSMBaro1YAPAAP3kAgAAAQO6VrqYAAAAAQEBumMAAACD82ADwABIJwAAYAPAAP5+AUq6cgEcunIuwABfhQIAAoC6hcBT0BsnwABl+wDAAKHvBsAAoiWBtbqdurC66wAAuSQBarqeYAPAAP3kAgAAAQO6u7rrAAAAAQEBusQAAACD82ADwABJXgAAYAPAAP5+AUq6zQEkuusCJ8AAZfwWuuUWut2AutjAU9B7llLAAElggL29GAbAAKImgbW68LsDu1AAALkRAWq68WADwAD95AIAAAEDuxK7UAAAAAEBAbsfAAAAg/NgA8AASYcAAGADwAD+fgFKuy4BJLtQAifAAGX9FrtKFrtCgLs9wFPQ35ZSwABJiYC9vRgGwACiJ4G1u1W7aLvSAAC5GwFqu1ZgA8AA/eQCAAABA7t/u9IAAAABAQG7lAAAAIPzYAPAAEl9AABgA8AA/n4BSrujARy7oy7AAGXhAgACgLu3wFPRQyfAAFOvAMAAog4GwACiKIG1u9e76rx3AAC5JQFqu9hgA8AA/eQCAAABA7v6vHcAAAABAQG8CAAAAIPzYAPAAEmSAABgA8AA/n4BPgJOvBu8HwAAocRgA8AA/n4BFrwuFrwmgLwhwFPRo5ZSwABJlIC9vRhKvDgBJLxzBCfAAGX+gbxOwFPRvCfAAFSPHLxWLsAAZaQBAAEcvG0WvGeAvGLAU9GjglXAAEXtSwEAAZMAwAD9SgDAAKHtBsAAoimBtbx8vI+9PAAAuSYBarx9YAPAAP3kAgAAAQO8oL08AAAAAQEBvK8AAACD82ADwABKWgAAYAPAAP5+AT4DTry/vMYAAMAAZf9gA8AA/n4BHLzILsAAZaQBAAEWvNmAvNTAU9JShcXAAEpcAMAAoe1OvOi88AAAwABmAGADwAD+fgEcvPIuwABlpAEAARa9A4C8/sBT0lKFx8AASl0AwACh7Uq9DwEkvTgEJ8AAZgGBvSbAU9JrJ8AAZgKCvTDAU9KdBsAAoiqBtb1BvVS9sAAAuScBar1CYAPAAP3kAgAAAQO9Yr2wAAAAAQEBvW4AAACD82ADwABKYwAAYAPAAP5+AT4BSr16ASS9rAInwABmAxy9jy7AAGWkAQABHL2mFr2ggL2bwFPTGIJVwABF7UsBAAGTAMAA/UoAwACh7QbAAKIrgbW9tb3Ivg0AALkoAWq9tmADwAD95AIAAAEDvdW+DQAAAAEBAb3gAAAAg/NgA8AAR/YAAGADwAD+fgFKvekBHL3pLsAAX4UCAAKAvfzAU9OUJ8AAZgQAwACh7wbAAKIsgbW+Er4lv/EAALEUAWq+E2ADwAD95AIAAAEDvjC/8QAAAAEBAb45AAAAg/NgA8AASBEAAGADwAD+fgE+CE6+Ur5WAACXFWADwAD+yAEfvlzAAP7nAAAAAD0cvnSBvnDAU9QNgo4BAAEnwABmBQDAAP7cPRy+kIG+jMBT1A2CjgEAARy+li7AAGWkAQABHL6tFr6ngL6iwFPT9IJVwABF7UsBAAGTAMAA/UoAwACh7QDAAP7cPRy+vIG+uMBT1A2CjgEAASebyQDAAP7cRb7NAb7WvtgAAGJgA8AA/JcBlAEcvt+Cvt3AU9SfYwEAARa+7Ra+5oC+4cBT0/SCVcAARe1hwAD9awDAAP3FAYq+9cBT1J8cvvaCvvXAU9SfZAEAAZQAwAD9vT4EPRy/BoG/AsBT1A2CjgEAARy/DC7AAGWkAQABHL8jFr8dgL8YwFPT9IJVwABF7UsBAAGCvyTAU9SfAMAA/UoAwACh7QDAAP7cPRy/NIG/MMBT1A2CjgEAASfAAGYGAMAA/tw9HL9Mgb9IwFPUDYKOAQABFr9vHL9nFr9dFr9XgL9SwFPT9JoywABF77mOwABFvUsBAAEcv2qCv2jAU9SfgY0BAAGUAMAA/b4AwAD9SrQSwABFsgDAAP7cPRy/foG/esBT1A2CjgEAASeBiwDAAP7cPRy/mYG/lcBT1A2CjgEAASfAAGYHAMAA/tw9HL+2gb+ywFPUDYKOAQABFr/PFr/BgL+8wFPT9LqdwABIGLQSwABFsgDAAP7cSr/YARy/44G/38BT1A0jAAAAAMAA/uEGwACiLYG1v/bAAEAJwABAKAAAsQABar/3YAPAAP3kAgAAAQPAAEASwABAKAAAAAEBAcAAQBkAAACD82ADwABI5wAAYAPAAP5+AUrAAEAiASfAAGD1BsAAoi6BtcAAQC3AAEBAwABAggAAhgUBasAAQC5gA8AA/eQCAAABA8AAQErAAECCAAAAAQEBwABAUgAAAIPzYAPAAElWAABgA8AA/n4BSsAAQFsBJMAAQIICJ8AAZggcwABAZS7AAGWkAQABHMAAQHwWwABAdoDAAEBxwFPWtIJVwABF7UsBAAGTAMAA/UoAwACh7QbAAKIvgbXAAECHwABAmsAAQQgAALkpAWrAAECIYAPAAP3kAgAAAQPAAECuwABBCAAAAAEBAcAAQMAAAACD82ADwABJPAAAYAPAAP5+AT4BSsAAQMwBJMAAQQQCJ8AAZgkcwABA5y7AAGWkAQABHMAAQP4WwABA+IDAAEDzwFPXSIJVwABF7UsBAAGTAMAA/UoAwACh7QbAAKIwgbXAAEENwABBIMAAQYsAALkqAWrAAEEOYAPAAP3kAgAAAQPAAEE1wABBiwAAAAEBAcAAQUgAAACD82ADwABH/wAAYAPAAP5+AT4BSsAAQVQBHMAAQVsuwABfhQIAAoDAAEFuwFPX3ifAAGYKAMAAoe8GwACiMYG1wABBkMAAQaPAAEH5AAC5IQFqwABBkWADwAD95AIAAAEDwABBscAAQfkAAAABAQHAAEG9AAAAg/NgA8AASAgAAGADwAD+fgE+AUrAAEHJARzAAEHQLsAAX4UCAAKAwABB48BT2FQnwABmCwDAAKHvBsAAojKBtcAAQf7AAEIRwABCRwAAuPoBasAAQf9gA8AA/eQCAAABA8AAQh3AAEJHAAAAAQEBwABCJwAAAIPzYAPAAEieAABgA8AA/n4BPgFKwABCMwEnwABmDAbAAKIzgbXAAEJMwABCX8AAREcAALEVAWrAAEJNYAPAAP3kAgAAAQPAAEJnwABERwAAAAEBAcAAQm0AAACD82ADwABIkgAAYAPAAP5+AT4HTsAAQovAAEKWAAC5jl0DwAD9OwFgA8AARbABFsAAQqUWwABCmC65Q8AAoee5jsAARb1OwABCvMAAQsUAAKMHYAPAAP5+ASTAAELdAieD2hbAAELZHMAAQtWBwABCy8BT2UBLAQABkwDAAP1KtBLAAEWyTsAAQurAAEL1AAC6tGADwAD+fgEnh55JwABDAyEcwABDFxbAAEMMgMAAQwfAU9klurTAAEiVSAEAASsAwAD98T4BPYvAAEMowFPZsiTAAENLAieD2hbAAENHHMAAQ0OBwABDOcBT2UBLAQABlADAAP1KtBLAAEWyP07AAENfwABDbAAAowRgA8AA/n4BJ4eeScAAQ3ohHMAAQ5AWwABDg4DAAEN+wFPZJaMEwABIlkgBAAErAMAA/fE+AT2MwABDocBT2iskwABDygIng9oWwABDxhbAAEO5gMAAQ7TAU9klowTAAEiWtBLAAEWyP0rAAEPXASQACSfAAGYNgsAAQ+XAU9lyJ8AAZg6DwABD98BT2bInwABmD4TAAEQNwFPaKyeBiyfAAGYQFsAARD8WwABEOoHAAEQvwFPZQIHqwAD9ILQSwABFsgbAAKI0gbXAAERMwABEX8AAROIAALkOAWrAAERNYAPAAP3kAgAAAQPAAERmwABE4gAAAAEBAcAARGsAAACD82ADwABJyQAAYAPAAP5+AT4CTsAARH7AAESDAACClGADwAD+fgEcwABEmRbAAESKgMAARIXAU9svuwTAAEnOIwAAAADAAP3ySsAARKkBJMAARN4EJ8AAZhEcwABEty7AAGWkAQABFsAARMiAwABEw8BT2y+Cb8AASdQAwACh7Se7D4HAAETZwFPbSgbAAKI1gbXAAETnwABE+sAARaYAALkPAWrAAEToYAPAAP3kAgAAAQPAAEUPwABFpgAAAAEBAcAARSIAAACD82ADwABJ5gAAYAPAAP5+AT4CTsAARTXAAEU6AACClGADwAD+fgEcwABFUBbAAEVBgMAARTzAU9v4uwTAAEnoIwAAAADAAP3ySsAARWABJMAARaIEJ8AAZhIcwABFfC7AAGWkAQABHMAARZMWwABFjYDAAEWIwFPb+IJVwABF7UsBAAGTAMAA/UoAwACh7Se7D4HAAEWdwFPcEwbAAKI2gbXAAEWrwABFvsAAR1YAALkrAWrAAEWsYAPAAP3kAgAAAQPAAEXRwABHVgAAAAEBAcAAReIAAACD82ADwABJ+wAAYAPAAP5+AT4FTsAARfXAAEYCAAC5qWADwAD+fgEcwABGBC7AAGWkAQABFsAARhWAwABGEMBT3NC5qcAASgYAwACh7U7AAEYvAAAAwABk9WADwAD+fgBJwABGORzAAEZQFsAARkkWwABGQoDAAEY9wFPc0IJVwABF7WHAAP1rSAEAAZUAwAD9uz4BPYrAAEZewFPdJSTAAEaIAieA2RzAAEZpLsAAZaQBAAEWwABGgRbAAEZ6gMAARnXAU9zQglXAAEXtgerAAP0gAMAAoe0+AkAcwABGtxbAAEawFsAARqmAwABGpMBT3NCCVcAARe1hwAD9a0gBAAGUAMAA/bvAAEakwABGuwA9isAARsTAU90lJwBOwABG4MAARuUAAIJrYAPAAP5+ARzAAEbnLsAAZhPAAKHHAQABgMAARvvAU9zQAMAAojhKwABHBgEkwABHUgcnwABmFIPAAEcfwFPd9SeA2YHAAEclwFPc6yeBnRbAAEc8gMAARzfAU9zQuenAAEYngsAAR03AU90lBsAAojiBtcAAR1vAAEdiwABH/gAAwABmE8AAoccAAAABA8AAR3XAAEf+AAAAAQEBwABHhgAAAIPzYAPAAEn7AABgA8AA/n4BPgNJwABHkhbAAEebgMAAR5bAU96duxvAAEoHSsAAR6gBJ7sUP0nAAEfBFsAAR8qAwABHxcBT3p27HMAASghKwABH1wEnuxU/SsAAR/ABJ4D0BsAAojqBtcAASAPAAEgWwABJHQAAuSwBasAASARgA8AA/eQCAAABA8AASCnAAEkdAAAAAQEBwABIOgAAAIPzYAPAAEoXAABgA8AA/n4BPgROwABITcAASFoAALmpYAPAAP5+ARzAAEhcLsAAZaQBAAEWwABIbYDAAEhowFPfPLmpwABGmgDAAKHtQBzAAEiaFsAASJMWwABIjIDAAEiHwFPfPIJVwABF7WHAAP1rSAEAAZQAwAD9u8AASIfAAEieAE7AAEiswABIsQAAgmtgA8AA/n4BHMAASLMuwABmFcAAoccBAAGAwABIx8BT3zwAwACiOUrAAEjSASTAAEkZBifAAGYWgsAASOvAU9/IJ4DZgcAASPHAU99XJ4GdFsAASQiAwABJA8BT3zy56cAARicGwACiOYG1wABJIsAASSnAAEnRAADAAGYVwAChxwAAAAEDwABJPMAASdEAAAABAQHAAElNAAAAg/NgA8AAShcAAGADwAD+fgE+A0nAAElZFsAASWKAwABJXcBT4Ge7JsAASi1KwABJdwEnwABmFz9JwABJjhbAAEmXgMAASZLAU+BnuyfAAEosSsAASawBJ8AAZhg/SsAAScMBJ4D0BsAAojuBtcAASdbAAEnpwABKfQAAuS0BasAASddgA8AA/eQCAAABA8AASfzAAEp9AAAAAQEBwABKDQAAAIPzYAPAAEowAABgA8AA/n4BPgJOwABKIMAASi0AALmpYAPAAP5+ARzAAEovLsAAZaQBAAEWwABKQIDAAEo7wFPhCrmpwABGmgDAAKHtSsAASlMBJMAASnkCJ8AAZhmBwABKbMBT4SUGwACiPIG1wABKgsAASpXAAEu2AAC5LgFqwABKg2ADwAD95AIAAAEDwABKo8AAS7YAAAABAQHAAEqvAAAAg/NgA8AASjwAAGADwAD+fgE+BEAcwABK1RbAAErOFsAASseAwABKwsBT4a6CVcAARe1hwAD9a4FrAQABlQDAAP3GwABKwsAAStkATsAASufAAEruAACBdmADwAD+fgEkwABLOwQnwABmGhzAAEsGLsAAZaQBAAEWwABLF4DAAEsSwFPhrrmpwABGmgDAAKHtJ7sPFsAASzCAwABLK8BT4a67LMAASj5JwABLQSEcwABLUhbAAEtKgMAAS0XAU+GuuzDAAEpOSAEAASsAwAD98T4BPYnAAEtjwFPiARzAAEtqgcAAS2PAU+IBZAEAASTAAEuZAifAAGYbHMAAS34uwABlpAEAARbAAEuPgMAAS4rAU+GuuzDAAEpOAMAAoe0AwAD+kz9KwABLpQGBwABLrMBT4gEGwACiPYG1wABLu8AAS87AAEwyAAC5HgFqwABLvGADwAD95AIAAAEDwABL4sAATDIAAAABAQHAAEv0AAAAg/NgA8AASlMAAGADwAD+fgE+AUrAAEwAASTAAEwuAifAAGYcFsAATCCAwABMG8BT4x+5qcAARpoGwACiPoG1wABMN8AATErAAEzbAAC5MAFqwABMOGADwAD95AIAAAEDwABMXsAATNsAAAABAQHAAExwAAAAg/NgA8AASx0AAGADwAD+fgE+Ak7AAEyAwABMhwAAglVgA8AA/n4BHMAATKYcwABMlRbAAEyOgMAATInAU+OUglXAAEXtgKsBAWADwAD+fgEWwABMmS7AAGWkwACh7QDAAP0EWAEAASeBiwDAAP0NSsAATLYBJMAATNcCJ8AAZh2BwABM0MBT468GwACiP4G1wABM4MAATPPAAE2lAAC5MQFqwABM4WADwAD95AIAAAEDwABNDMAATaUAAAABAQHAAE0jAAAAg/NgA8AASyYAAGADwAD+fgE+Ak7AAE0zwABNOgAAglVgA8AA/n4BHMAATVkcwABNSBbAAE1BgMAATTzAU+RaglXAAEXtgKsBAWADwAD+fgEWwABNTC7AAGWkwACh7QDAAP0EWAEAASeBiwDAAP0NSsAATWkBJMAATaEEJ8AAZh4WwABNjoDAAE2JwFPkWoJwwABLKCeD4YHAAE2awFPkdQbAAKJAgbXAAE2qwABNvcAATooAALkyAWrAAE2rYAPAAP3kAgAAAQPAAE3UwABOigAAAAEBAcAATekAAACD82ADwABLQwAAYAPAAP5+AT4CTsAATfnAAE4AAACCVWADwAD+fgEcwABOHxzAAE4OFsAATgeAwABOAsBT5TeCVcAARe2AqwEBYAPAAP5+ARbAAE4SLsAAZaTAAKHtAMAA/QRYAQABJ4GLAMAA/Q1KwABOLwEkAAcnwABmHxbAAE5SgMAATk3AU+U3u3DAAEtQJ4DZFsAATmeAwABOYsBT5Te7bcAAS0Yng0+BwABOfsBT5VIngyYGwACiQYG1wABOj8AATqLAAE7yAACw6QFqwABOkGADwAD95AIAAAEDwABOrMAATvIAAAABAQHAAE60AAAAg/NgA8AASUMAAGADwAD+fgE+AUrAAE7AASTAAE7uAifAAGYgHMAATtEuwABlpAEAARzAAE7oFsAATuKAwABO3cBT5iuCVcAARe1LAQABkwDAAP1KAMAAoe0GwACiQoG1wABO98AATwrAAE90AAC5LwFqwABO+GADwAD95AIAAAEDwABPFMAAT3QAAAABAQHAAE8cAAAAg/NgA8AASUwAAGADwAD+fgE+AUrAAE8oASTAAE9wBCfAAGQDIxbAAE88gMAATzfAU+bBsRDAAElOJ4ONJwABYAPAAP5+J4NbHMAAT1MuwABlpAEAARzAAE9qFsAAT2SAwABPX8BT5sGCVcAARe1LAQABkwDAAP1KAMAAoe0GwACiQ4G1wABPecAAT4zAAFACAAC5MwFqwABPemADwAD95AIAAAEDwABPl8AAUAIAAAABAQHAAE+gAAAAg/NgA8AAS1MAAGADwAD+fgE+Ak7AAE+wwABPtwAAglVgA8AA/n4BHMAAT9YcwABPxRbAAE++gMAAT7nAU+d7glXAAEXtgKsBAWADwAD+fgEWwABPyS7AAGWkwACh7QDAAP0EWAEAASeBiwDAAP0NSsAAT+YBJMAAT/4CJ8AAZiGBwABP98BT55YGwACiRIG1wABQB8AAUBrAAFDbAAC5NAFqwABQCGADwAD95AIAAAEDwABQJsAAUNsAAAABAQHAAFAwAAAAg/NgA8AAS2IAAGADwAD+fgE+A07AAFBAwABQRwAAglVgA8AA/n4BHMAAUGYcwABQVRbAAFBOgMAAUEnAU+hBglXAAEXtgKsBAWADwAD+fgEWwABQWS7AAGWkwACh7QDAAP0EWAEAASeBiwDAAP0NTsAAUH3AAFCDAACBx2ADwAD+fgEjFsAAUIqAwABQhcBT6EGF7cAAS2Ynu3gnu3kBYAPAAP5+SsAAULcBJMAAUNcEJ8AAZiKCwABQycBT6LgngNmBwABQ0MBT6FwGwACiRYG1wABQ4MAAUPPAAFHXAAC5NQFqwABQ4WADwAD95AIAAAEDwABRBcAAUdcAAAABAQHAAFEVAAAAg/NgA8AAS3QAAGADwAD+fgE+A07AAFElwABRLAAAglVgA8AA/n4BHMAAUUscwABROhbAAFEzgMAAUS7AU+lJglXAAEXtgKsBAWADwAD+fgEWwABRPi7AAGWkwACh7QDAAP0EWAEAASeBiwDAAP0NTsAAUWLAAFFoAACBx2ADwAD+fgEjFsAAUW+AwABRasBT6UmF7cAAS3gnu3gnu3kBYAPAAP5+SsAAUZwBJMAAUdMGJ8AAZiOCwABRtMBT6cAngNkWwABRwYDAAFG8wFPpSbttwABLdieA2YHAAFHMwFPpZAbAAKJGgbXAAFHcwABR78AAUncAALk2AWrAAFHdYAPAAP3kAgAAAQPAAFIAwABSdwAAAAEBAcAAUg8AAACD82ADwABLhgAAYAPAAP5+AT4CTsAAUh/AAFImAACCVWADwAD+fgEcwABSRRzAAFI0FsAAUi2AwABSKMBT6miCVcAARe2AqwEBYAPAAP5+ARbAAFI4LsAAZaTAAKHtAMAA/QRYAQABJ4GLAMAA/Q1KwABSVQEkwABScwInwABmJIHAAFJswFPqgwbAAKJHgbXAAFJ8wABSj8AAUyMAALk3AWrAAFJ9YAPAAP3kAgAAAQPAAFKcwABTIwAAAAEBAcAAUqcAAACD82ADwABLlAAAYAPAAP5+AT4CTsAAUrfAAFK+AACCVWADwAD+fgEcwABS3RzAAFLMFsAAUsWAwABSwMBT6y6CVcAARe2AqwEBYAPAAP5+ARbAAFLQLsAAZaTAAKHtAMAA/QRYAQABJ4GLAMAA/Q1KwABS7QEkwABTHwQnwABmJRbAAFMGgMAAUwHAU+suuwTAAEuWJ4PhgcAAUxjAU+tJBsAAokiBtcAAUyjAAFM7wABT2AAAuTgBasAAUylgA8AA/eQCAAABA8AAU1PAAFPYAAAAAQEBwABTaQAAAIPzYAPAAEufAABgA8AA/n4BPgJOwABTecAAU4AAAIJVYAPAAP5+ARzAAFOfHMAAU44WwABTh4DAAFOCwFPsC4JVwABF7YCrAQFgA8AA/n4BFsAAU5IuwABlpMAAoe0AwAD9BFgBAAEngYsAwAD9DUrAAFOvASTAAFPUAifAAGYmgcAAU83AU+wmBsAAokmBtcAAU93AAFPwwABUmgAAuTkBasAAU95gA8AA/eQCAAABA8AAU/3AAFSaAAAAAQEBwABUCAAAAIPzYAPAAEuoAABgA8AA/n4BPgJOwABUGMAAVB8AAIJVYAPAAP5+ARzAAFQ+HMAAVC0WwABUJoDAAFQhwFPs0YJVwABF7YCrAQFgA8AA/n4BFsAAVDEuwABlpMAAoe0AwAD9BFgBAAEngYsAwAD9DUrAAFROASTAAFSWBifAAGYnFsAAVGeAwABUYsBT7NG7BMAAS6sng+EWwABUf4DAAFR6wFPs0buEwABLqieD4YHAAFSPwFPs7AbAAKJKgbXAAFSfwABUssAAVS4AALk6AWrAAFSgYAPAAP3kAgAAAQPAAFS/wABVLgAAAAEBAcAAVMoAAACD82ADwABLtAAAYAPAAP5+AT4CTsAAVNrAAFThAACCVWADwAD+fgEcwABVABzAAFTvFsAAVOiAwABU48BT7cWCVcAARe2AqwEBYAPAAP5+ARbAAFTzLsAAZaTAAKHtAMAA/QRYAQABJ4GLAMAA/Q1KwABVEAEkwABVKgInwABmKIHAAFUjwFPt4AAAU6iUAFOo1wBTqTgAU6yxAFOtLQBTrfoAU66AAFOu4ABTr0AAU6/GAFOwJgBTsIYAU7FKAFOyPgBTspsAU7OPAFO0FQBTtIIAU7TiAFO1KwBTthAAU7buAFO4hwBTuPYAU7mYAFO6dgBTuwgAU7toAFO7ygBTvCoAU71MAFO+swBTv3QAU8BuAFPBlgBTwfYAU8NrAFPDywBTxCsAU8SLAFPFJABTxb0AU8ZWAFPG7wBTx+QAU8hEAFPIpABTyfAAU8sYAFPLeABTy/4AU8x4AFPM3gBTzUQAU86oAFPPFwBTz5EAU8/xAFPQUQBT0LUAU9EZAFPReQBT0igAU9LuAFPTagBT08oAU9YpAFPWfgBT1xIAU9eoAFPYHgBT2JQAU9jvAFPa+QBT28IAU9yaAFPebQBT3wYAU+A3AFPg1ABT4XgAU+LpAFPjXgBT5CQAU+UBAFPl9QBT5osAU+dFAFPoCwBT6RMAU+oyAFPq+ABT69UAU+ybAFPtjwBT7lUAAABfAAABgbUAU+/cAFOZtwBTng8AU6fUAFPv2gAAAAMAU+/cAAAAAAACBMAAok3AAGYpgbYAAAAAAAABAsAAok6BtoGRgaCk0wfAAGYqAAABYAHAAP3kAABxBMAAolCBtoHcge4GgbEAYAPAAPyXAWqB6GADwAD8l8AARmcEwACiUYG2ggaCJAbAAGYrAGADwAD+fgFqghhgA8AA/n6BawTAAKJSgbaCOoJNBsAAZiwAYAPAAPyXAWqCQ2ADwAD8l5REBMAAolOBtoJlgoQGwABmLQBgA8AA/n4BaoJ0YAPAAP5+wAC7KATAAKJUgbaCmoKrBsAAZi4AYAPAAPyXAWqCqGADwAD8l4SMBMAAolWBtoLDguAGwABmLwBgA8AA/n4BaoLXYAPAAP5+wACyEwTAAKJWgbaC9YMGBsAAZjAAYAPAAPyXAWqDAGADwAD8l8AAm1kEwACiV4G2gx6DOwbAAGYxAGADwAD+fgFqgy9gA8AA/n7AALxeBMAAoliBtoNRg2UGwABmMgBgA8AA/JcBaoNcYAPAAPyXwABGzQTAAKJZgbaDfYOdBsAAZjMAYAPAAP5+AWqDjmADwAD+fsAAnFoEwACiWoG2g7KDygbAAGY0AGADwAD8lwFqg8FgA8AA/JeglgTAAKJbgbaD4oQGBsAAZjUAYAPAAP5+AWqD92ADwAD+foCbBMAAolyBtoQbhDAGwABmNgBgA8AA/JcBaoQqYAPAAPyXwABfTwTAAKJdgbaESIRpBsAAZjcAYAPAAP5+AWqEXWADwAD+fsAAnGAEwACiXoG2hH+EnQbAAGY4AGADwAD8lwFqhJRgA8AA/JeW/gTAAKJfgbaEtYTfBsAAZjkAYAPAAP5+AWqE0GADwAD+fsAAnEEEwACiYIG2hPSFEwajRwBgA8AA/JcBaoUHYAPAAPyXn6IEwACiYYG2hSuFVgbAAGY6AGADwAD+fgFqhURgA8AA/n7AAJw7BMAAomKBtoVshY8GwABmOwBgA8AA/JcBaoWFYAPAAPyXwABeAQTAAKJjgbaFp4XWBsAAZjwAYAPAAP5+AWqFxmADwAD+fsAAng8EwACiZIG2heuGDQbAAGY9AGADwAD8lwFqhgJgA8AA/Je0PQTAAKJlgbaGJYZTBsAAZj4AYAPAAP5+AWqGQmADwAD+fsAAtKYEwACiZoG2hmiGiQbAAGY/AGADwAD8lwFqhn1gA8AA/JfAAJrzBMAAomeBtoahhs4GwABmQABgA8AA/n4Baoa8YAPAAP5+wACeRATAAKJogbaG44cDBsAAZkEAYAPAAPyXAWqG9mADwAD8l8AAmvYEwACiaYG2hxuHRwbAAGZCAGADwAD+fgFqhzRgA8AA/n7AALTWBMAAomqBtodch3gGwABmQwBgA8AA/JcBaoduYAPAAPyXwACbUATAAKJrgbaHkIe4BsAAZkQAYAPAAP5+AWqHqGADwAD+fsAAnd0EwACibIG2h82H6AbAAGZFAGADwAD8lwFqh91gA8AA/JfAAJtWBMAAom2BtogAiCcGwABmRgBgA8AA/n4BaogWYAPAAP5+wAC0dATAAKJugbaIPIhSBsAAZkcAYAPAAPyXAWqITGADwAD8l5bTBMAAom+BtohqiIwGwABmSABgA8AA/n4BaoiAYAPAAP5+wACzswTAAKJwgbaIoojRBsAAZkkAYAPAAPyXAWqIxmADwAD8l8AAmvkEwACicYG2iOmJKgbAAGZKAGADwAD+fgFqiRlgA8AA/n7AAJxJBMAAonKBtolAiVgGwABmSwBgA8AA/JcBaolOYAPAAPyXwABf6QTAAKJzgbaJcImUBsAAZkwAYAPAAP5+AWqJhGADwAD+fsAAnEwEwACidIG2iamJvwbAAGZNAGADwAD8lwFqib5gA8AA/JcJBMAAonWBtonXigcGwABmTgBgA8AA/n4BaooHYAPAAP5+wAFxAATAAKJ2gbaKHIowBsAAZk8AYAPAAPyXAWqKL2ADwAD8lxUEwACid4G2ikiKdAbAAGZQAGADwAD+fgFqinRgA8AA/n7AAXEDBMAAoniBtou8i8wGoT0AYAPAAPyXAWqLxWADwAD8l7LbBMAAonqBtov3jAcGwABmUcAAok0AYAPAAPyXAWqMA2ADwAD8l8AAljYEwACie4G2jB+MNQbAAGZSwACiTQBgA8AA/n4BaowxYAPAAP5+g7wEwACifIG2jEuMWAbAAGZTwACiTQBgA8AA/JcBaoxUYAPAAPyXg0oEwACifYG2jHCMggbAAGZUwACiTQBgA8AA/n4Baox/YAPAAP5+wACcMATAAKJ+gbaMl4yqBsAAZlXAAKJNAGADwAD8lwFqjKZgA8AA/JfAAGU7BMAAon+BtozCjNoGwABmVsAAok0AYAPAAP5+AWqM12ADwAD+fsAAskMEwACigIG2jO+M+wbAAGZXwACiTQBgA8AA/JcBaoz3YAPAAPyXwABk3QTAAKKBgbaNE40kBsAASOnAAKJNAGADwAD+fgFqjSFgA8AA/n7AALcVBMAAooKBto05jUcGwABmWMAAok0AYAPAAPyXAWqNQ2ADwAD8l7DwBMAAooOBto1fjXMGwABmWcAAok0AYAPAAP5+AWqNb2ADwAD+fsAAvCwEwACihIG2jYiNlwbAAGZawACiTQBgA8AA/JcBao2TYAPAAPyXwABh9gTAAKKFgbaNr43DBsAAZlvAAKJNAGADwAD+fgFqjcBgA8AA/n7AAJxdBMAAooaBto3YjekGwABmXMAAok0AYAPAAPyXAWqN5WADwAD8l8AAX+kEwACih4G2jgGOFwbAAGZdwACiTQBgA8AA/n4Bao4UYAPAAP5+wACcTATAAKKIgbaOLI4+BsAAZl7AAKJNAGADwAD8lwFqjjpgA8AA/JfAAF6+BMAAoomBto5Wjm0GwABmX8AAok0AYAPAAP5+AWqOamADwAD+fsAAwLMEwACiioG2joKOkwbAAGZgwACiTQBgA8AA/JcBao6PYAPAAPyXwABeAQTAAKKLgbaOq47BBsAAZmHAAKJNAGADwAD+fgFqjr5gA8AA/n7AAJ4PBMAAooyBto7WjugGwABmYsAAok0AYAPAAPyXAWqO5GADwAD8l7Q9BMAAoo2Bto8AjxcGwABmY8AAok0AYAPAAP5+AWqPFGADwAD+fsAAtKYEwACijoG2jyyPPAbAAGZkwACiTQBgA8AA/JcBao84YAPAAPyXwABGzQTAAKKPgbaPVI9pBsAAZmXAAKJNAGADwAD+fgFqj2ZgA8AA/n7AAJxaBMAAopCBto9+j4oGwABmZsAAok0AYAPAAPyXAWqPhmADwAD8l8AARpoEwACikYG2j6KPswbAAGZnwACiTQBgA8AA/n4Bao+wYAPAAP5+wACcVQTAAKKSgbaPyI/VBsAAUm7AAKJNAGADwAD8lwFqj9FgA8AA/JfAAEZnBMAAopOBto/tj/8GwABmaMAAok0AYAPAAP5+AWqP/GADwAD+foFrBMAAopSBtpAUkCEGwABmacAAok0AYAPAAPyXAWqQHWADwAD8l8AAQ80EwACilYG2kDmQSwbAAGZqwACiTQBgA8AA/n4BapBIYAPAAP5+wACcVwTAAKKWgbaQYJBuBsAAZmvAAKJNAGADwAD8lwFqkGpgA8AA/Jey2wTAAKKXgbaQhpCZBsAAZmzAAKJNAGADwAD+fgFqkJZgA8AA/n7AALlWBMAAopiBtpCukLsGwABmbcAAok0AYAPAAPyXAWqQt2ADwAD8l8AAX08EwACimYG2kNOQ5QbAAGZuwACiTQBgA8AA/n4BapDiYAPAAP5+wACcYATAAKKagbaQ+5EJBsAAZm/AAKJNAGADwAD8lwFqkQVgA8AA/Je2SgTAAKKbgbaRHpEsBsAAZnDAAKJNAGADwAD8lwFqkShgA8AA/JfAAI48BMAAopyBtpFCkU8GwABSbcAAok0AYAPAAPyXAWqRS2ADwAD8l5bTBMAAop2BtpFnkXkGwABmccAAok0AYAPAAP5+AWqRdmADwAD+fsAAs7MEwACinoG2kY6RnwbAAGZywACiTQBgA8AA/JcBapGbYAPAAPyXlEQEwACin4G2kbeRzQbAAGZzwACiTQBgA8AA/n4BapHKYAPAAP5+wAC7KATAAKKggbaR4pHyBsAAZnTAAKJNAGADwAD8lwFqke5gA8AA/JeW/gTAAKKhgbaSCpIfBsAAZnXAAKJNAGADwAD+fgFqkhxgA8AA/n7AAJxBBMAAoqKBtpI0kkIGvObAAKJNAGADwAD8lwFqkj5gA8AA/JfAAJYGBMAAoqOBtpJakm0GwABmdsAAok0AYAPAAP5+AWqSamADwAD+fsAAtQgEwACipIG2koKSlQbAAGZ3wACiTQBgA8AA/JcBapKRYAPAAPyXn6IEwACipYG2kq2SxQbAAGZ4wACiTQBgA8AA/n4BapLCYAPAAP5+wACcOwTAAKKmgbaS2pLqBsAAZnnAAKJNAGADwAD8lwFqkuZgA8AA/JeglgTAAKKngbaTApMXBsAAZnrAAKJNAGADwAD+fgFqkxRgA8AA/n6AmwTAAKKogbaTLJM2BsAAZnvAAKJNAGADwAD8lwFqkzJgA8AA/JeEjATAAKKpgbaTTpNdBsAAZnzAAKJNAGADwAD+fgFqk1pgA8AA/n7AALITBMAAoqqBtpNzk4UGwABmfcAAok0AYAPAAPyXAWqTgWADwAD8l8AAX7wEwACiq4G2k5qTrAbAAGZ+wACiTQBgA8AA/JcBapOoYAPAAPyXwACa8ATAAKKsgbaTwpPVBsAAUmvAAKJNAGADwAD8lwFqk9FgA8AA/JfAAJrzBMAAoq2BtpPtlAUGwABmf8AAok0AYAPAAP5+AWqUAmADwAD+fsAAnkQEwACiroG2lBqUKwbAAGaAwACiTQBgA8AA/JcBapQnYAPAAPyXhCUEwACir4G2lEOUWgbAAGaBwACiTQBgA8AA/n4BapRWYAPAAP5+g8IEwACisIG2lG+UgwbAAFJswACiTQBgA8AA/JcBapR/YAPAAPyXwACa9gTAAKKxgbaUm5S0BsAAZoLAAKJNAGADwAD+fgFqlLFgA8AA/n7AALTWBMAAorKBtpTJlNsGwABmg8AAok0AYAPAAPyXAWqU12ADwAD8l8AAmvkEwACis4G2lPOVCgbAAGaEwACiTQBgA8AA/n4BapUHYAPAAP5+wACcSQTAAKK0gbaVH5UxBsAAZoXAAKJNAGADwAD8lwFqlS1gA8AA/JfAAJr8BMAAorWBtpVJlWAGwABmhsAAok0AYAPAAP5+AWqVXWADwAD+fsABcQgEwACitoG2lXWVhQbAAGaHwACiTQBgA8AA/JcBapWBYAPAAPyXwACa/wTAAKK3gbaVnZWyBsAAZojAAKJNAGADwAD+fgFqla9gA8AA/n7AALz/BMAAoriBtpXIldoGwABmicAAok0AYAPAAPyXAWqV1mADwAD8l8AAmwIEwACiuYG2le+WAQbAAGaKwACiTQBgA8AA/JcBapX9YAPAAPyXwACbTQTAAKK6gbaWF5YoBsAAUmjAAKJNAGADwAD8lwFqliRgA8AA/JfAAJtQBMAAoruBtpZAllYGwABmi8AAok0AYAPAAP5+AWqWU2ADwAD+fsAAnd0EwACivIG2lmuWewbAAGaMwACiTQBgA8AA/JcBapZ3YAPAAPyXwACbUwTAAKK9gbaWk5aoBsAAZo3AAKJNAGADwAD+fgFqlqVgA8AA/n7AAJxGBMAAor6Btpa9ls8GwABSasAAok0AYAPAAPyXAWqWy2ADwAD8l8AAm1YEwACiv4G2lueW/gbAAGaOwACiTQBgA8AA/n4Bapb7YAPAAP5+wAC0dATAAKLAgbaXE5cgBsAAZo/AAKJNAGADwAD8lwFqlxxgA8AA/JfAAJtZBMAAosGBtpc4l0oGwABmkMAAok0AYAPAAP5+AWqXR2ADwAD+fsAAvF4BBcAAosmBtoGrgauBtQCAtcAAok0AA4GzgbUAAAAAAAAAYAPAAKJOAT8BCQGBq8AA/foAAAAABAbAAKLDgbaKm4qnit4AAZZFAAAAAQOKroreAAAAAQEBirMAAACCl2ADwAD8lwAAYAPAAPrRAUqKvAEiHIrBgIq8wFQBvIFtAQABaorEYAPAAPyXtkoAwAD9yAAcitSAis/AVAG8gWsBAAFqitdgA8AA/JfAAI48AMAA/cYGwACixIG2iuKK7YsTAAHAAGaRAAAAAQOK94sTAAAAAQEBivwAAACCl2ADwAD8lwAAYAPAAPyXAUqLBQEciwqAiwXAVAI6gY0BAAFqiwxgA8AA/Je2SgDAAP2+BsAAosWBtosYiySLpgABwABmkgAAAAEDizWLpgAAAAEBAYs6AAAAwABC32ADwAD8lwAAYAPAAPrRAUqLRwEiIhyLbByLYhyLUxyLTYCLSsBUApWBBgEAATcgAMAA/LCBjQEAAWqLVWADwAD8l8AAmwIAwAD9voN8AQABN8AA//8AwAD8r2MBAAE3GgDAAP3FARyLfoCLe8BUApVIAQABaouBYAPAAPyXwACa/ADAAP27ARyLm4CLmMBUApVIAQABaoueYAPAAPyXsPAAwAD9uwbAAKLGgbaXT5dbpNEAAcAAZpMAAAABA5dqpNEAAAAAAAAAXAE+N0+Xc5d4AAABlythAwNgA8AA/n5gA8AA/JdgA8AA/n5cAAOXfJgxAAAAAwMDl4QAAACZLmADwAD+fgCXjwAAAMAAYe5gA8AA/JcAl6AAAACD/2ADwAD+fgAAXAE+AUmXrSEcl88el7jAAP6nAQABgpfFwFQDpABIAQABg5fSwFQDtADAAP6NPgE9MJfhH5fnwAD8NwEAASSYIgWBl/TAVAOWJ8AAZpSCmBDAVAOkJ8AAZpWDmB7AVAO0AD9PmDiYPQAAAcAAZpZhAwNgA8AA/n5gA8AA/JdgA8AA/n5cAAOYSpjRAAAAAwMDmFIAAACZLmADwAD+fgCYXQAAAKq5YAPAAPyXAJhoAAAAg/9gA8AA/n4AAFwBPgFJmHUhHJh/JJh/AYOYe8BUBGFIAQABhJiCwFQEbwDAAP6NPgE9MJiRH5iXwAD8NwEAASSYwgWCmKTAVARTJ4Nbg5iswFQEYSfAAGaXhJi+wFQEbwA/PRyY3ICY2MBUA20gAwADJ4GxapjqYAPAAPyXwABGZ2qY9WADwAD+foFrAAA9HJkPgJkLwFQDbSADAAMnwABmLGqZGmADwAD8l5REapkiYAPAAP5+wAC7KAAAPRyZOYCZNcBUA20gAwADJ8AAZi5qmUlgA8AA/JeEjGqZVmADwAD+fsAAshMAAD0cmXKAmW7AVANtIAMAAyfAAGYwapl/YAPAAPyXwACbWWqZiWADwAD+fsAAvF4AAD0cmaKAmZ7AVANtIAMAAyfAAGYyapmvYAPAAPyXwABGzWqZuWADwAD+fsAAnFoAAD0cmdKAmc7AVANtIAMAAyfAAGY0apnjYAPAAPyXoJZqmfFgA8AA/n6AmwAAPRyaDoCaCsBUA20gAwADJ8AAZjZqmh9gA8AA/JfAAF9PapotYAPAAP5+wACcYAAAPRyaSoCaRsBUA20gAwADJ8AAZjhqmmFgA8AA/JeW/mqadWADwAD+fsAAnEEAAD0cmpiAmpTAVANtIAMAAyejR2qarWADwAD8l5+iapq/YAPAAP5+wACcOwAAPRya4ICa3MBUA20gAwADJ8AAZjtqmvtgA8AA/JfAAF4BapsbYAPAAP5+wACeDwAAPRybQoCbPsBUA20gAwADJ8AAZj1qm1tgA8AA/Je0PWqbeWADwAD+fsAAtKYAAD0cm56Am5rAVANtIAMAAyfAAGY/apu1YAPAAPyXwACa82qbyWADwAD+fsAAnkQAAD0cm+yAm+jAVANtIAMAAyfAAGZBapwBYAPAAPyXwACa9mqcE2ADwAD+fsAAtNYAAD0cnDSAnDDAVANtIAMAAyfAAGZDapxIYAPAAPyXwACbUGqcWWADwAD+fsAAnd0AAD0cnHmAnHXAVANtIAMAAyfAAGZFapyLYAPAAPyXwACbVmqcmmADwAD+fsAAtHQAAD0cnLiAnLTAVANtIAMAAyfAAGZHapzKYAPAAPyXltNqnNlgA8AA/n7AALOzAAA9HJz3gJzzwFQDbSADAAMnwABmSWqdHWADwAD8l8AAmvlqnUhgA8AA/n7AAJxJAAA9HJ16gJ12wFQDbSADAAMnwABmS2qdimADwAD8l8AAX+lqnZdgA8AA/n7AAJxMAAA9HJ28gZ2vwFQEKCADAAMnwABmTWqd3GADwAD8lwlqnfBgA8AA/n7AAXEAAAA9HJ4cgZ4PwFQEKCADAAMnwABmT2qeMWADwAD8lxVqnkNgA8AA/n7AAXEDAAA9HJ5lgJ5hwFQDbSADAAMnwABmUWqec2ADwAD8l8AAljZqnn5gA8AA/n6DvAAAPRyemICelMBUA20gAwADJ8AAZlNqnqNgA8AA/JeDSmqeq2ADwAD+fsAAnDAAAD0cnsKAnr7AVANtIAMAAyfAAGZVap7TYAPAAPyXwABlO2qe4WADwAD+fsAAskMAAD0cnv6AnvrAVANtIAMAAyfAAGZXap8IYAPAAPyXwABk3WqfD2ADwAD+fsAAtxUAAD0cnyWAnyHAVANtIAMAAyfAAGZYap8xYAPAAPyXsPBqnzpgA8AA/n7AALwsAAA9HJ9SgJ9OwFQDbSADAAMnwABmWmqfX2ADwAD8l8AAYfZqn2lgA8AA/n7AAJxdAAA9HJ+CgJ9+wFQDbSADAAMnwABmXGqfkWADwAD8l8AAX+lqn51gA8AA/n7AAJxMAAA9HJ+4gJ+0wFQDbSADAAMnwABmXmqfyGADwAD8l8AAXr5qn9VgA8AA/n7AAMCzAAA9HJ/xgJ/twFQDbSADAAMnwABmYGqgAGADwAD8l8AAXgFqoAxgA8AA/n7AAJ4PAAA9HKAngKAjwFQDbSADAAMnwABmYmqgN2ADwAD8l7Q9aqBEYAPAAP5+wAC0pgAAPRygYICgXMBUA20gAwADJ8AAZmRqoG5gA8AA/JfAAEbNaqB5YAPAAP5+wACcWgAAPRygk4Cgj8BUA20gAwADJ8AAZmZqoJ1gA8AA/JfAAEaaaqCkYAPAAP5+wACcVQAAPRyguoCgtsBUA20gAwADJ8AAUm5qoMVgA8AA/JfAAEZnaqDNYAPAAP5+gWsAAD0coOSAoODAVANtIAMAAyfAAGZpaqDvYAPAAPyXwABDzWqg92ADwAD+fsAAnFcAAD0coQ6AoQrAVANtIAMAAyfAAGZraqEaYAPAAPyXsttqoSNgA8AA/n7AALlWAAA9HKE7gKE3wFQDbSADAAMnwABmbWqhRmADwAD8l8AAX09qoU5gA8AA/n7AAJxgAAA9HKFlgKFhwFQDbSADAAMnwABSbWqhcGADwAD8l5bTaqF4YAPAAP5+wACzswAAPRyhj4Chi8BUA20gAwADJ8AAZnJqoZ5gA8AA/JeURGqhqmADwAD+fsAAuygAAD0cocWAocHAVANtIAMAAyfAAGZ0aqHTYAPAAPyXlv5qod5gA8AA/n7AAJxBAAA9HKH4gKH0wFQDbSADAAMnvOZqogRgA8AA/JfAAJYGaqINYAPAAP5+wAC1CAAAPRyiJYCiIcBUA20gAwADJ8AAZndqojZgA8AA/JefomqiRGADwAD+fsAAnDsAAD0comGAol3AVANtIAMAAyfAAGZ5aqJvYAPAAPyXoJZqonpgA8AA/n6AmwAAPRyilICikMBUA20gAwADJ8AAZntqopxgA8AA/JeEjGqioWADwAD+fsAAshMAAD0corWAorHAVANtIAMAAyfAAFJraqLGYAPAAPyXwACa82qi1GADwAD+fsAAnkQAAD0covGAou3AVANtIAMAAyfAAGaAaqMAYAPAAPyXhCVqowxgA8AA/n6DwgAAPRyjJ4CjI8BUA20gAwADJ8AAUmxqozlgA8AA/JfAAJr2aqNIYAPAAP5+wAC01gAAPRyjZoCjYsBUA20gAwADJ8AAZoNqo3ZgA8AA/JfAAJr5aqODYAPAAP5+wACcSQAAPRyjn4Cjm8BUA20gAwADJ8AAZoVqo69gA8AA/JfAAJr8aqO8YAPAAP5+wAFxCAAAPRyj2ICj1MBUA20gAwADJ8AAZodqo+ZgA8AA/JfAAJr/aqPxYAPAAP5+wAC8/wAAPRykC4CkB8BUA20gAwADJ8AAUmhqpBpgA8AA/JfAAJtQaqQmYAPAAP5+wACd3QAAPRykQYCkPcBUA20gAwADJ8AAZoxqpE9gA8AA/JfAAJtTaqRaYAPAAP5+wACcRgAAPRykdICkcMBUA20gAwADJ8AAUmpqpIRgA8AA/JfAAJtWaqSRYAPAAP5+wAC0dAAAPRykrYCkqcBUA20gAwADJ8AAZo9qpLhgA8AA/JfAAJtZaqTAYAPAAP5+wAC8XgAAAABUAZwAVAIYAFQCcwBUA0MAVA6LAAAABAAAAYG2AFQOpgBT8BMAVA6kAAAAAQBUDqYAAAAAAAIEwACiysAAZpiBtwAAD4EMAAC4SAABAQKxOaTSgUcAALinAAEBAbF/gX0AAL0VAACBoQAAwABkALSUAIHCAADAAGQAAAEBAYKFgeIAAMAAbiwAAIIOAADAAGQ1AAEBAZlIgjwAAMAAenwAAQEBvKiCfwAAgPsAAIKZAADAAEwIAACCygAAwABLvQABAQGk6YL8AADAAG/gAAEBAcAATlWDPgAAwABNmAABAQGk7YNpAADAAF0mAACDigAAwACNwQAAAAAAAQLAAKLNgbeDoIOmpsYDwABcbwAAAWABwAD95AAABgTAAKLQgbeDyYPPCbgVwACiygBgA8AAZDgABMAAotGBt4Pmg/MJwABcf8AAosoAYAPAAEwPAATAAKLSgbeECoQWCbYjwACiygBgA8AATZwABMAAotWBt4QlhDcJgvsAYAPAAPrRAATAAKLTgbeESYRRCcAAREfAAKLKAGADwABdTwAEwACi1IG3hGqEeQm0fMAAosoAYAO4qAABBcAAouGBt4R+hH6FEAAAAAOEkIUQAAAABgUFhJYAAATAAERHYAPAAF1PAISlAAAEtHxgA7ioAIS7AAAEuBVgA8AAZDgAhM4AAATAAFx/YAPAAEwPAITiAAAEtiNgA8AATZwAAYT8AAAEgvtgA8AA+tEBagBgA8AA/aF5YAPAAKLNAT8HCAHAAKLTgADAVBBcCAHAAKLUgQDAVBBsCAHAAKLQggDAVBB4CAHAAKLRgwDAVBCGCAHAAKLShADAVBCWCAHAAKLVhQDAVBClCQGEfsAA/foAAAAABwbAAKLYgbeFFYUphVkBAMAAU63AAKLKAAAAAQOFOoVZAAAAAAAAAGADwAB6fQFKhT0BFoVKFoU9LrYjwACiysAAotK4McAATaEGwACi2oG3hV6Fb4oyAADAAGaZAAAAAQOFh4oyAAAAAwMDhZsAAACy32ADvSoAhboAAACEi10DwAD9OwFgA8AAlaIAhccAAADAAFzlYAPAAPrRAABgA8AAlZgBPgZOhz2HTAAAhMVbAWqHTl0DwAD9OwFgA8AAlnfAAXELTod1h38AAMAAZppbAWqHgV0DwAD9OwFgA8AAlZjAAWqBSYehgoelwFQRpj4DTofCh8oAAMAASElbARaH0xaHzC64FcAAosrAAKLQr9XAAGR0PYuH6cBUEcGFh/rAVBINPYyICcBUEeAciBdqiBVgA8AAmAbAASCbIAIAAifAAGabMYgmWwKFiCfAVBINhYgwwFQSDQDAAJgIP06IW4hmAACau10DwAD9OwFgA8AAlncBHohswAD9QwIBYAPAAJZ3AhaIm4GIlMBUEZFhwAD9azSIowOIo4jEAAAAAQEBiKQAAABiYAPAAPyXAABgA8AAlncBSoiqAR+IrsAAln4BAAEkiMMCJ4OrhYjBwFQSvQAATojiiPQAAMAAZpxdA8AA/TsBYAPAAJWYAR6JAsAA/UMCAWADwACVmAIWiSmBiSLAVBGRYcAA/Ws0iTEDiTGJdwAAAAEBAYkyAAAAYmADwAD8lwAAYAPAAJWYAT4BSok9ARyJRmqJRGADwACYBsABIJsgAgACJ8AAZpsxiVVgA8AAlncCHIlcgYlWwFQRkUsBAAGGiV3AVBM2AMAA/UociWuFiWHAVBJ6SwEAAYaJbMBUEzYAwAD9SgDAAJgIAEqJfgEciYdqiYVgA8AAmAbAASCbIAIAAifAAGadMYmtWwWFibXAVBJ6g4nHwFQRwYaJ3cBUEvGEifbAVBHgFooZFooOFooHLrgVwACiysAAotC33sAAZF3AAEkLwABlWQDAAJgIBsAAotuBt4o3ikiLvQAAwABmngAAAAEDilaLvQAAAAICAopkAAAAgmpgA708AIp3AAAAwABIiGADwACVogAAYAPAAJWYAT4EToqUipgAAJn6YAO9KgEWiqGAiprAVBQ1hQq9Sk6KvIrFAACFj2ADwAD+fgEjHIrgForPLsAAU63AAKLKwACi2LpxAQABgorzwFQUXADAAHqFJ4WPJ5osAWADwAD+fk6LIIslAACB/V0DwAD9OwFgA8AA/n4BIxyLQBaLLy7AAFOtwACiysAAotjAAFOTAQABgItUwFQUNQDAAHqGMYteYAPAAP5+ASeFjzGLbWADwAD+fgABXQPAAP07AWADwAD+fkqLdQEci35qi3xgA8AAmAbAASCbIAIAAifAAGafMYudYAPAAP3kA4SLnsBUFLqDi6TAVBR4gYuuwFQUQQDAAJgIBsAAotyBt4vCi9ONgQAAwABmoAAAAAEDi+GNgQAAAAICAovvAAAAgmpgA708AIwCAAAAwABIiGADwACVogAAYAPAAJWYAT4ETowfjCMAAJn6YAO9KgEWjCyAjCXAVBV/hQq9Sk6MR4xQAACFj2ADwAD+fgEjHIxrFoxaLsAAU63AAKLKwACi2LpxAQABgox+wFQVpgDAAHqFJ4WPJ5osAWADwAD+fk6Mq4ywAACB/V0DwAD9OwFgA8AA/n4BIxyMyxaMui7AAFOtwACiysAAotjAAFOTAQABgIzfwFQVfwDAAHqGMYzpYAPAAP5+ASeFjzGM+GADwAD+fgABXQPAAP07AWADwAD+fkqNKAEcjTFqjS9gA8AAmAbAASCbIAIAAifAAGahMY1hYAPAAP3kA4SNYsBUFgSDjWjAVBXCgY1ywFQViwDAAJgIBsAAot2Bt43xjhOY2AAAwABc7AAAAAEDji2Y2AAAAAICAo5CAAAAgmpgA708AI5tAAAAu99dA8AA/W0CYAPAAEvPYAPAAG/hAABdA8AA/W0CYAPAAJWiYAPAAJWYAT4HTo8AjxQAAMAAU5NgA8AA+tEBHI8nFo8WLsAAU63AAKLKwACi2MAAU5MBAAGAjzvAVBbJAMAAeoZOj02PYAAAunFgA8AA+tEBHI97Fo9qLsAAU63AAKLKwACi2LpxAQABFo+VgI+OwFQWyYUKvUoAwAB6hU+P4o/zAAABwABmomEDAGADwACVmAADj/6S7AAAAAAAAABgA8AAlZgBPgJOkBqQIwAAhY9gA8AAlZgBHJAxapAvYAPAAJgGwAEgmyABAAEjg5AywFQXQGqQR2ADwAD+fsABcRMnmiwBYAPAAP5+AMAAmAhJkG0WkHiAkHHAVBbJhUK9RT4DTpCXkKIAAMAASE5gA8AAlaIBHJCrFpCkLrgVwACiysAAotDAAEiNAQABgJC8wFQWyQDAAGS4SZDNgpDRwFQXCD4BSpDyARyQ+2qQ+WADwACYBsABIJsgAgACJ8AAZqQxkQlgA8AAlZgChpEKwFQYAYWRFsBUF6YAwACYCD9KkTQBHJE9apE7YAPAAJgGwAEgmyACAAInwABmpTGRR2ADwACVmAKFkUjAVBemhpFSwFQYAQDAAJgIPgJOkYmRkwAAtLBgA8AAbnsBHJG8FpGuFpGhLrYjwACiysAAotK0scAATZ60sgEAASaRyQGAkcnAVBbJYAPAAHXtAMAAbndJkdoWkeiGkd7AVBi6wABNr8AAbow+AUqSCwEckhsWkhIuwABER8AAosrAAKLTsAUBAAEWkjeGki3AVBi6wABNkcAAbo0AwABdSz4CTpJtkncAAMAASIhgA8AAlaIBHJKAFpJ5LrgVwACiysAAotCv6AEAASaSmgGAkprAVBbJYAO9TgDAAGS0SpKtARyStmqStGADwACYBsABIJsgAgACJ8AAX+Qxkr5gA8AAlZgChZK/wFQXpoeSycBUGUsAwACYCE6TFZMkAADAAGamXQPAAP1tAmADwACVomADwACVmAEyk0xgA8AAlaJgA8AAlZgATpQMlB8AAMAAZqddA8AA/i8BYAPAAEvPAR6UJcAAwaYAAWADwABLzwAARpQ6AJRIAAAApTRgA8AAS88AFpRegZRUwFQW1YNowAD9j0E+A0mUbByUg4aUcMBUGfCDHAEAAYeUjMBUGh0AwAD+O0KUlwA/SZSnIRyUtYeUrMBUGh22EAEAAYCUxMBUFskAwABL7EKUzQA/SZTdHJUAHJTqgZThwFQW1UsBAAGHlOvAVBodAMAA/YG2EwMAA4CVB8BUFskWlRiHlQ/AVBodp3HAAEvTFpUkLrYjwACiysAAotIAwABv4z4KPRyVUIaVPcBUGfBWAQABh5VUwFQaHQDAAP48TpVzlYIAAK/qYAPAAJWiARyVixaVhC64FcAAosrAAKLQr+oBAAGHlZrAVBodAMAAZKtOlbaVwwAAwABLs2ADwABLzwEelcnAAEwBAQABh5XiwFQaHQBOlgCWEAAAwABmqGADwACVogEclhkWlhIuuBXAAKLKwACi0K/qAQABFJYowFQbJAkAAMAAZKtOllaWYQAAmrtdA8AA/TsBYAPAAJZ3ATGWdGADwACWdwBOlpeWoQAAW10DwAD9OwFgA8AAlZgBMZa1YAPAAJWYAEmWwYKWxcBUFwg+AT0clvEUlubAVBt+CwBWAQABH5b5wACWfgEAAWqXCWADwAD+fsABcRMAAMAA/Uw/RZc0AZc9lz8AAGJgA8AA/JcBkwEcl0YUl0TAVBv9DQBjAQABFpdRh5dIwFQaHbuUwABL2ADAAP3FARWXYMBUG/0NHJdhFJdgwFQb/Q0AZAEAAZQAwAD9vT4DTpd4l30AAIC9YAPAAP5+ASSXhgInhYYUl4TAVBv9DQA9HJedFJeSwFQbfgsAVgEAAR+XpcAAln4BAAEUl7XAVBxUDgAAAMAA/Uw9HJfRFJfHwFQbnwwAVgEAARyX12qX1WADwACYBsABIJsgAgACJ4bGFJfdwFQcVA4AAMAAmAgAwAD9TE6YApgLAACCbmADwACWlgEmmAIBHJgPapgNYAPAAJgGwAEgmyACAAInwABmqTGYPmADwAD95AQUmD/AVBt+CwAcmFaEmEvAVBd9IAAAAAAAFJhawFQbSAoAFJhrwFQbnwwAAMAAmAhgA8AAlpY9HJiPhZiBwFQZwYC/AgACFJiQwFQa8ggAFJiiwFQc2Q0AAMAA/YI/Spi/AYWYxsBUGcEGwACi3oG3mN2Y954dAADAAFzvAAAAAQOZFZ4dAAAAAAAAAF0DwAD9bQJgA8AAlaJgA8AAS88BPgdOmTiZQAAAwABmql0DwAD9bQJgA8AAlaJgA8AAS88BMplYYAPAAJWiYAPAAEvPAEmZphaZ1BaZuBaZqi7AAFx/wACiysAAotG1TsAATB+BVcAA/R0+AUqZ5QGAmezAVB2yP0+aAJoFAAABwABmq2EDAmADwAD+fl0DwAD9bQJgA8AAS89gA8AAb+FcAAOaHJ1DAAAAAgICmi0AAADAAEBUYAPAAP5+AJpYAAAAu99dA8AA/W0CYAPAAEvPYAPAAG/hAABcAT4BRpprAJp5AAAApTRgA8AAS88AFpqPg5qFwFQeWINowAD9j0E+A0manyIiIiIcmqyEmqPAVB58SAEAARqaubh/AMAA/fEBHJrehJrVwFQefEgBAAEamuu4ewDAAP3xARybCoSbAcBUHnxIAQABGpsXuHcAwAD98QEcmzmEmzDAVB58SAEAARqbRrh5AMAA/fEBHJtohJtfwFQefEgBAAEam3W4dQDAAP3xPgFCnCEAP06cUpxaAADAAGasYAPAAG/hARycZYOcXMBUHlhLAQABhJxmwFQefADAAP2BSZx5HJyFhZx9wFQfKLX6AgAChJyfwFQefBacqS62I8AAosrAAKLSAMAAb+Q+Ak6cz5zWAADAAEhLYAPAAJWiARyc3xac2C64FcAAosrAAKLQwABIfQEAAYSc/MBUHnwAwABkrT0cnRiAnRHAVB2ygL8CAAKGnRnAVB+ChJ0jwFQefADAAP2CPz0cnVgWnUouwABcf8AAosrAAKLRu7oBAAGBnWvAVB4WAMAATBc9HJ2XFp2JLsAAXH/AAKLKwACi0bu7AQABgZ2swFQeFgDAAEwYPRyd2Badyi7AAFx/wACiysAAotG7vAEAAYGd7cBUHhYAwABMGUqeCwGAnhLAVB2yBsAAot+Bt54ini2mxAAAwABc8AAAAAEDnkimxAAAAAICAp5UAAAAgL1gA8AAlaIAnmMAAAClNGADwABLzwAAYAPAAI6PAT4LTp60nrkAAIKUYAPAAPyXARaexIGeu8BUIIW7pcAAS+hOnuue+gAAwABmrV0DwAD9OwFgA8AA/n4BHJ89Hp8IwAD9QwIBYAPAAP5+AhafH4GfFsBUIIW7lMAAS9g0ny4Dny6fOwAAAAEBAZ8vAAAAYmADwAD8lwAAYAPAAP5+AUqfNQEknzsCJ54Yg585wFQhBwBkAQABHp9PwAD9QwIBYAPAAP5+AhafZoGfXcBUIIWVmMAAS9s0n3kDn3mfjQAAAAEBAZ96AAAAYmADwAD8lwAAYAPAAP5+AUqfgAEkn40CJ5YdHJ+Ig5+GwFQhYWQBAAGUAMAA/b0AAMAA/V1On6yftQAAwABmrl0DwAD9OwFgA8AAlZgBHKAqHJ/7HJ/XFp/AgZ+3wFQghbUlwABL1Le4AAAAAMAAaTyAqwEBYAPAAJcCATSf/wOf/6AfAAAAAQEBoAcAAACAvWADwAD+fgAAYAPAAJcCAUqgEAEcoBNqoBBgA8AAmAbAASCbg/EBAAGEoBrAVCHwAMAAmBcAwAD9BICtAAAAAMAA/Q9OoESgTwAArOtgA8AAlaIBHKBYFqBRLrgVwACiysAAotCv+gEAARagaIGgX8BUIIW7pMAAS+cAwABk006glKChAADAAFVdYAPAAJWiARygqhagoy64FcAAosrAAKLQwABIfQEAAYGgx8BUIIUAwABkrUAcoO8WoN4uwABTrcAAosrAAKLYwABTlgEAAWqhDWADwAD+fsAA73kAwAB6iaDeoRsATqEnoTUAALpRYAPAAPrRARyhSBahNy7AAFOtwACiysAAotjAAFOWAQABFqFjgaFawFQghYC9wABL3QDAAHqJTqF/oYoAAIJvYAPAAJWYARyhjmqhjGADwACYBsABIJsgAgACJ8AAZq8yoxVgA8AA/n5gA8AA/eQJJ4WPI4ejKcBUIt4nwABmoyeaLAFgA8AA/n4nrUcWo3EWo2ouuBXAAKLKwACi0K1HwABkfSeyERyjthajrS7AAERHwACiysAAotPAAERWAQABFqPbFqPLLrR8wACiysAAotSyEblOAMAAXUInrOscpBVqpBJgA8AAmAbAASCbwABRaAEAASMWpB8ugvvAAKLVhqQ0wFQidoWkQ8BUIjsBYAPAAJWiAMAAmBsnwABVXRykaWqkZmADwACYBsABIJvAAFFoAQABhqRzwFQidgDAAJgbJ4KUHKSTaqSQYAPAAJgGwAEgm8AAUg8BAAGCpJrAVCCeAMAAmBwnWx+kuMAAlzEBAAEcpQMcpOmDpNrAVCC+gKsBAWADwACVmAE1pP8AAAEAYAPAAJgGAWqk/2ADwACYBsABIJsjHKT/FADAVCRyCABIAQABKwAAKxak/xQAwFQkcggAIMAAmAgBXgMAAQICYAPAAP5+WwAAYAPAAJWYAMAA/QSArQAAAADAAP0PACeqsx+lKsAAlzEBAAGEpUHAVCGcACeVmBylamqlZ2ADwACYBsABIJvAAFIPAQABFqV6gaVxwFQghZWYwABL2wDAAJgcAMAAmAhOpasAAACCbmADwACVmABJpbmHpb3AVCLePgE9FaXUwFQlIAkcpeFqpd9gA8AAmAbAASCbIAIAAifAAGawMaYVYAPAAP3kAoOmFsBUIL4UpibAVCMdCAAAwACYCD4BPRWmR8BUJSAJHKZUaqZSYAPAAJgGwAEgmyACAAInwABR/jGmcmADwAD95AKDpnPAVCC+FKaDwFQjHQgAAMAAmAhKppsBH6amwACOkwIAAoCmscBUIHcUprfAVCUgCQAAAABUERoAVBFjAFQUEwBUFV0AVBanAFQdeABUIFUAVCXdAAAABwABBsAAosyBt6meqbS5TwABwABmsQAAAAEDqcS5TwAAAAQEBKnVAAAAemADgRQAqeYAAACv02ADwABdTwCp+QAAAK/SYAPAAGQ4AKoPAAAAs7dgA7ioAABdA8AA/TsBYAPAAJSBAT4JTqoyqkUAALHtYAO9UQEWqlaDqkfAVCZNse25Kk6qfQAAAMAAZrJgA8AAlZgATqqpAAAAwABms2ADwACVmABOqtcAAADAAGa0YAPAAJWYAEmq7iEcqwWEqvLAVCZrSAEAASsAwAD98T4DPY2rFMBUJoccqzaBqy7AVCYxwABEVgEAAYSrS8BUJmsAwABdQj2Pq2TAVCapHKuFaquCYAPAAJgGwAEgm8AAUmkBAAEcq5aCq5DAVCY/sCoBAAGEq6zAVCZrAMAAZMMAwACYGD2Oq8bAVCaYHKvtaqvqYAPAAJgGwAEgm4PxAQABHKv6gqv0wFQmP7AqAQABhKwQwFQmawDAAGTDAMAAmBc+Az2NrGnAVCaHHKyNaqyLYAPAAJgGwAEgmyABAAEnwABmtQDAAJgIPY6s18BUJpgcrPZqrPNgA8AAmAbAASCbg/EBAAEnwABmtgDAAJgXPY+tG8BUJqkcrTNqrTFgA8AAmAbAASCbIAEAASfAAGa3AMAAmAhOrZ0AAADAAGa4YAPAAJSBAEmtriEWrbuArbPAVCYmgs+BTD4CTq3srf4AAMAAZrlgA8AAlZgBH64EwABkNAMAA4WuIMBUJocWrkGArjnAVCYmgvuBOCoAPRWuYcBUJ+oIHK50aq5xYAPAAJgGwAEgm4VgAgACJ8AAZroysx9gA8AA/n5gA8AAlZgDJ8AAZrkUszzAVCgPCQAnwABmtIezbMBUJqknwABms4azpMBUJpgAwACYCT4BPRWz1cBUJ+oIHLPoarPlYAPAAJgGwAEgm4VgAgACJ8AAZrsxto5gA8AAlZgChbaPwFQmh4W2qMBUJocAwACYCU622rbiAACt1GADwACUgQEctudqtuRgA8AAmAbAASCbhWACAAInwABmvDK482ADwAD+fmADwACVmAEnrdSFuP/AVCaHAMAAmAlKuR0BMbk1YAPAAJSBAhS5NsBUJ+oIABS5RcBUKOIJAAGBtwBUKUoAVA+IAFQmAgAAAAEAVCYEAFQpSgAAAAEAAgTAAKLiwABmvYG4AAAOgRQAALinAAEBArJMs4mBYAAAvRUAAIGEAADAAEJHAACBrAAAwABkALSUAIHNAADAAGQAAAEBAYKFge0AAMAAZDUAAQEBmUiCGwAAgPsAAII1AADAAGkfAAEBAbE4gnIAAMAATAgAAIKjAADAAEu9AAEBAaTpgtUAAMAAb+AAAQEBwABOVYMXAADAAE2YAAEBAaTtg0IAAMAAjcEAAINYAADAAF0mAAEBArgQr2wAAAABAsAAouOBuIPSg9ihRQPAAFxwAAABYAHAAP3kAAAFBMAAouaBuIQNhBkJuBfAAKLiAGADwABdJwAEwACi54G4hCmELwm4FcAAouIAYAPAAGQ4AATAAKLogbiERoRTCcAAXH/AAKLiAGADwABMDwAEwACi6YG4hGqEdgm2I8AAouIAYAPAAE2cAATAAKLqgbiEtITOCbhTwACi4gBgA8AAQmUAAQXAAKL5gbiE04TThVsAAAADhO2FWwAAAAUFBYTzAAAEuBdgA8AAXScAhQYAAAS4FWADwABkOACFEwAABLYjYAPAAE2cAIUsAAAEwABcf2ADwABMDwCFQAAABLhTYAPAAEJlAABgA8AAouMBPwYIAcAAouaAAMBUKugIAcAAoueBAMBUKvYIAcAAoumCAMBUKwQIAcAAouiDAMBUKxIIAcAAouqEAMBUKyIJAYTTwAD9+gAAAAAJBsAAou2BuIVghWyFjAEAwABER8AAouIAAAABA4V1hYwAAAAAAAAAYAPAAF1PAUqFeAEWhYUWhXguuBfAAKLiwACi5q/TwABdNgbAAKLugbiFkYWlhdMBALR8wACi4gAAAAEDhbWF0wAAAAAAAABgA7mgAUqFuAEWhcUWhbgutiPAAKLiwACi6bO3wABNpAbAAKLvgbiF14XvhisBAK+ywACi4gAAAAEDhgOGKwAAAAAAAABgA7uNAUqGDAEWhhkWhgwutiPAAKLiwACi6aU7wABNogbAAKLwgbiGMIZEhmQBALJkwACi4gAAAAEDhk2GZAAAAAAAAABgA4EUAUqGUAEWhl0WhlAuuBfAAKLiwACi5nrAAF00BsAAovOBuIe2h8qPvwAAwABmvsAAouIAAAABA4fXj78AAAAEBASH6wAAAMAAXRNgA70qAIgRAAAAwABmv2ADvU4AiC8AAADAAEuzYAPAAEvPAIhMAAAAwABmwGADwABLzwAAYAPAAI6UAT4KQByJzBaJuoKJrcBULNyVmMAAS9tIAQABkwDAAP27ia2J0ABOiduJ7QAAlZhgA8AA/JcBFon+g4nvwFQs7JWYwABL20Acii6EihzAVC0qgJcBAAGTAMAA/ceKHIoxAE6LV4tiAACau10DwAD9OwFgA8AAlncBMYt1YAPAAJZ3AE6LlIueAABbXQPAAP07AWADwACVmAExi7JgA8AAlZgARYu7AYvEi8YAAGJgA8AA/JcBkwEci82Hi8vAVC2pYwEAARaL3IKLz8BULNy7lMAAS9gAwAD9xQGPi+vAVC2pHIvsh4vrwFQtqWQBAAGUAMAA/b0+A06L/4wGAADAAEhLYAPAAP5+ASSMDQIngdeHjAvAVC2pPRyMH4aMFcBULYZWAQABHIwlaowjYAPAAJgGwAEgmyACAAInhsYUjCvAVC37CAAAwACYCADAAP1MPRyMRoWMO8BULWVWAQABH4xOwACWfgEAARSMXsBULfsIAAAAwAD9TEmMcxaMgBaMdy6yZMAAouLAAKLwgriBVj4BRYyaAYyjjKUAAGJgA8AA/JcBkwEcjKyHjKrAVC6ZYwEAARaMvYOMrsBULOyVmMAAS9sAwAD9xQGPjNDAVC6ZHIzRh4zQwFQumWQBAAGUAMAA/b0+AT0cjOmGjN/AVC2GVgEAARyM72qM7WADwACYBsABIJsgAgACJ8AAZsExjP9gA8AAlugDFo0SFo0LLrgVwACi4sAAouev1cAAZHQcjTMWjSwuuBXAAKLiwACi58AASIABAAEWjVUWjUUutHzAAKLiwACi7rIjuV0AwABkrxyNcWqNbmADwACYBsABIJvAAFIPAQABh414wFQumQDAAJgcAMAAmAgAwAD9TD4BRY2jAY2sja4AAGJgA8AA/JcBkwEcjbWHjbPAVC+YYwEAARaNxoONt8BULOyVmMAAS9sAwAD9xQGPjdnAVC+YHI3ah43ZwFQvmGQBAAGUAMAA/b0+AT0cjfKGjejAVC2GVgEAARyN+GqN9mADwACYBsABIJsgAgACJ8AAZsIxjgZgA8AAlugCFo4OFo4HLrgVwACi4sAAouev1cAAZHQcjiFqjh5gA8AAmAbAASCbwABSDwEAAYeOKMBUL5gAwACYHADAAJgIAMAA/UxOjkyOVQAAgm5gA8AAlpYBJo5MARyOWWqOV2ADwACYBsABIJsgAgACJ8AAZsMxjoFgA8AA/eQEhY6JwFQtZRyOohaOmy64FcAAouLAAKLnwABIgAEAAYGOtMBULM4AwABkrxyO0RaOyi64FcAAouLAAKLnr+oBAAGDjuDAVCzsAMAAZKuGjvfAVC2GAMAAmAhgA8AAlpZOj1ePXAAAgL1gA8AAlaIBHI9lFo9eLrgVwACi4sAAouev6gEAAYKPdMBULNwAwABkq0qPhwEfj5LAAI6aAwADFI+mwFQw9ggAK4ePssBUMGAABsAAovSBuJF1kYmTiAAAwABmxMAAouIAAAABA5Gfk4gAAAABAQGRrAAAAMAAZr9gA71OAABgA8AAjpQBPgNOkcyR3gAAwABJD2ADwACVogEcke8WkeguuBXAAKLiwACi56/6AQABFpIIFpH9FpH2LrgVwACi4sAAoue33sAAZF3AAEkPwABlXADAAGTTTpIrkjQAAIJuYAPAAJaWASMWkj8WkjYusmTAAKLiwACi8IK4gVYcklouwABmxcAAouIBAAGAknPAVDFtAMAAovYckowuwABmxsAAouIBAAGAkqXAVDFtAMAAovUBYAPAAJaWSpNDAR+TTsAAjpoDAAOBk2LAVDGGK4KTe8BUMdUABsAAovWBuJONk5eVMAAAwABmxsAAouIAAAABA5OvlTAAAAABAQGTvAAAAMAAZr9gA71OAABgA8AAlpYBSpPUASaT1AEck9Zqk9RgA8AAmAbAASCbIAIAAifAAGbHMZQGYAPAAJWYBByUGRaUEC7AAERHwACi4sAAou3AAERWAQABFpRLFpQ7LrR8wACi4sAAou6yGLlSAMAAXUIclH4WlHUuwABER8AAouLAAKLtwABEVgEAARaUsBaUoC60fMAAouLAAKLushm5UwDAAF1CHJTnFpTgLrgVwACi4sAAoufAAEiAAQABgJT5wFQyewDAAGSvFpUYFpURLrgVwACi4sAAouev1cAAZHQAwACYCGADwACWlgbAAKL2gbiVNZU/lr8AAMAAZsXAAKLiAAAAAQOVV5a/AAAAAQEBlWQAAADAAGa/YAO9TgAAYAPAAJaWAUqVfAEmlXwBHJV+apV8YAPAAJgGwAEgmyACAAInwABmxzGVrmADwACVmAQclcEWlbguwABER8AAouLAAKLtwABEVgEAARaV8xaV4y60fMAAouLAAKLusji5cgDAAF1CHJYsFpYjLsAAREfAAKLiwACi7cAARFYBAAEWllEWlkEutHzAAKLiwACi7rI5uXMAwABdQhyWdhaWby64FcAAouLAAKLnwABIgAEAAYCWiMBUM5AAwABkrxaWpxaWoC64FcAAouLAAKLnr9XAAGR0AMAAmAhgA8AAlpYGwACi94G4lvyXDaFDAADAAF0UAAAAAQOXGqFDAAAAAgICly4AAADAAF0TYAO9KgCXUQAAAIJqYAO9UQAAXQPAAP07AWADwACOjwE+DE6XqZe7AACVmGADwAD8lwEWmB0WmAYcl90Wl8oWl70utiPAAKLiwACi6bg1wABNo7N2AQABgJfpwFQ0oQDAAGP3hSzAAGMAYcAA/WtAHJhCgpgwwFQ0zYCXAQABkwDAAP3HmDCYRQBOmIgAAADAAGa/YAO9TgA9HJivFpibLq+ywACi4sAAou+zkgIAAoCYxMBUNKE0mOADmOCZnwAAAAICApjtAAAArklgA70qAJkEAAAAhJtgA71OAABgA8AA/aEBPgJJmRMWmUYcmTIWmSQWmRcutiPAAKLiwACi6bSxwABNnrSyAQABJpk/AYWZP8BUNXpgA8AAde0AwABud8AASODAAG6BSplQAD9JmV4cmW0WmWiFmWLAVDV6gL29GEgBAAEnwABmyADAAP6NPYuZg8BUNTSFmZPAVDV6PwC7l0AhHJm7g5mtwFQ1NEgBAAErAMAA/fGZrZnCASSZ/QInwABmyYCZ6sBUNKFOmgyaEQAAIGADwAD+fgEWmhoWmhMuuBXAAKLiwACi58AASFzAAGR/Tppgmm4AAMAAZspdA8AA/W0CYAPAAEvPYAPAAG/hARyahhaaeC7AAFx/wACi4sAAoui7twEAAYSamMBUNjkAwABMFE+apJq8AAABwABmy2EDAF0DwAD+LwFgA714AAOa2pziAAAAAAAAAF0DwAD+LwFgA714AT4GTpr9mxEAAMAAZsxdA8AA/i8BYAO9eAEemyHAAMGmAAFgA714AABPm0ObSAAAAcAARwlhAwFgA71RXAADm0+cCgAAAAEBAZtfAAAAgm5gA71RAABcAT4BSZtzHJuiFpuTFpuAFJt3wFQ3HgkAtRe9VITFvX5IAQABgpulwFQ0zQDAAP27PgE9HJvYh5vEwFQ22VYBAAEWm+UUm9zAVDceCQC1F71UAMAA/jw/PRycMxacIRacEy7AAFx/wACi4sAAoui8K8AATdmD/QEAARScO8BUNwEIAADAAP0JPRycaxacWRacSy7AAFx/wACi4sAAoui8KcAATdiD/QEAARScc8BUNwEIAADAAP0JPRyckRacgy7AAFx/wACi4sAAoui7tAEAARScscBUNwEIAADAAEwRSpzCAYecycBUNtlOnPqdAAAAwABmzV0DwAD9OwFgA8AAjo8BMZ0OYAPAAI6PAEmdiyEcnZ2FnY/AVDZhSAEAASsAwAD98T4CTp3GAAAAwABmzF0DwAD+LwFgA714AEad4QCd7wAAAKU0YAPAAEvPABaeCYWd+8BUNmGDaMAA/Y9BPgVOnieeNQAAtSVgA8AAaSABFp5AFJ43wFQ4bAkAtSXAAEvUSZ5XIRyeexaeaRSeW8BUOI4KAJWYwABpKEgBAAGTAMAA/btCnoEAP06eoZ62AADAAGbOYAPAAGkgARye0hSexMBUOI4KAMAAS64BAAGCnujAVDTNAMAAaTs9IxyfGBSfBMBUOFMIAEgBAAErAMAA/fEVnwTAVDhTCByfOoafHMBUNqYgAAAAAAArAV0DwAD+LwFgA714QUafRp+Jn14AAAC1F2ADvXgAFJ90wFQ4UwgAPgFJn5Ucn64Un5nAVDjYCwC7pgEAARSfv8BUOUsMAADAAGlBPgNOn+uf+wAAwABmz2ADwABLzwEeoBHAAEv/AgACFqAoFKAfwFQ4bAkAp3HAAEvTFKA0wFQ42AsAAD0coF2HoFfAVDgWVgEAARygYS7AAGa+wACi4gQABICggMBUNKGDoJTAVDU0FKCjwFQ4bAkAFKCtwFQ5hw0AAMAAovMAwAD9TEKgzAE/Pz0coQKHoPzAVDgWVgEAARyhBi7AAGbEwACi4gEAAYOhHcBUNTQAwACi9ADAAP1MSqEzAYehOsBUOBYAAFQrgwBUK8wAVCwRAFQsVgBULJoAVDFHAFQyVQBUM2oAVDR/AFQ6RgAAAAkAAAGBuABUOnUAVCoqAFQ6cwAAAAEAVDp1AAAAAAACBMAAovrAAGbQgbkAABCBEgAAwACalcAAZtEAgVwAALinAACBfgAAwABhDwAAgaEAAL0VAACBxQAAwABi0QABAQGGiYH5AADAAGQAtJQAghoAAMAAZAAAAQEBgoWCOgAAwABkNQABAQGZSIJoAADAAHofAAEBAcAAU2yCxQAAwABqtgAAgu4AAMAAenwAAIMcAADAAHroAACDPQAAwABMCAAAg24AAMAAS70AAQEBpOmDoAAAwABNmAABAQGk7YPLAADAAF0mAAEBAa9sAAAAAQLAAKL7gbmD+oQAwABC/wPAAFxxAAABYAHAAP3kAAAHBMAAov6BuYQyhEEJtHzAAKL6AGADuKgABMAAov+BuYRThFsJwABER8AAovoAYAPAAF1PAATAAKMAgbmEe4SRCbgUwACi+gBgA8AAexoABMAAowGBuYShhKcJuBXAAKL6AGADwABkOAAEwACjAoG5hM+E7Qm4E8AAovoAYAPAAHo1AATAAKMDgbmFBIURCcAAXH/AAKL6AGADwABMDwAEwACjBIG5hSiFNAm2I8AAovoAYAPAAE2cAAEFwACjEYG5hTmFOYYXAAAAA4VRhhcAAAAHBweFXgAABLR8YAO4qACFegAABMAAREdgA8AAXU8AhY8AAAS4FGADwAB7GgCFsgAABLgVYAPAAGQ4AIXFAAAEuBNgA8AAejUAhfAAAATAAFx/YAPAAEwPAIYKAAAEtiNgA8AATZwAAGADwACi+wE/CAgBwACi/oAAwFQ8VggBwACi/4EAwFQ8YggBwACjAIIAwFQ8cggBwACjAYMAwFQ8gAgBwACjAoQAwFQ8jggBwACjA4UAwFQ8nAgBwACjBIYAwFQ8rAkBhTnAAP36AAAAAAcGwACjB4G5hhyGK4ZRAQDAAEhSwACi+gAAAAEDhjeGUQAAAAAAAABgA8AAasgBSoY6ARaGRxaGOi62I8AAovrAAKMEuC3AAE2gBsAAowiBuYZWhmqGmgEAwABTrcAAovoAAAABA4Z7hpoAAAAAAAAAYAPAAHp9AUqGfgEWhosWhn4utiPAAKL6wACjBLgxwABNoQbAAKMKgbmGn4awnsgAAMAAXRkAAAABA4bMnsgAAAABAQGG7gAAALsJYAPAAHrfAABgA8AAlZgBPhhOhxKHGgAAhIhdA8AA/i8BYAO9KgEWhyiAhxzAVD3ZhIjAAHriT4c2h0cAAAHAAGbSYQMBYAO9KmADwACVmAADh1WHpAAAAAEBAYdiAAAAmfpgA70qAABgA8AAlZgBPgFKh28BHId/Fod2LsAAREfAAKL6wACi/8AARGEBAAGDh5rAVD47AMAAXVRPiCaINgAAAcAAZtNhAwFgA70qYAPAAJSBAAOIS4xXAAAAAQEBiFgAAACZ+mADvSoAAGADwACUgQE+BE6IdgAAAIXKYAPAAJWYAEAciJ8WiI4uwABTrcAAovrAAKMIunEBAAGEiLLAVD6gAMAAeoWIjoi2AEmIvxyIx4SIw8BUPqBIAQABFojaFojKLrR8wACi+sAAov6xvrj9AMAA/fE+AT2NiPHAVD63HIj/aoj9YAPAAJgGwAEgmyABAAEnwABm1ADAAJgISYkwIiIciTiEiTTAVD6gSAEAARaJSxaJOy60fMAAovrAAKL+sbu4+gDAAP3xARyJZ4SJY8BUPqBIAQABFol6FolqLrR8wACi+sAAov6xvLj7AMAA/fEBHImZhImVwFQ+oEgBAAEWiawWiZwutHzAAKL6wACi/rG6uPkAwAD98T4BPTCJxSfAAGbVSYnqIiIiHInyhInuwFQ+oEgBAAEWigUWifUutHzAAKL6wACi/rG5uPgAwAD98QEciiOEih/AVD6gSAEAARaKNhaKJi60fMAAovrAAKL+scW5BADAAP3xARyKW4SKV8BUPqBIAQABFopuFopeLrR8wACi+sAAov6xxrkFAMAA/fEBHIqRhIqNwFQ+oEgBAAEWiqQWipQutHzAAKL6wACi/rHHuQYAwAD98T4BPY2KxsBUPrccitRqitJgA8AAmAbAASCbIAEAASfAAGbWAMAAmAhJiwQciwyEiwjAVD6gSAEAARaLHxaLDy60fMAAovrAAKL+sbi49wDAAP3xPgE9jYs4wFQ+txyLRmqLRGADwACYBsABIJsgAQABJ8AAZtcAwACYCEmLdhyLfoSLesBUPqBIAQABFouRFouBLrR8wACi+sAAov6xvbj8AMAA/fE+AT2Ni6jAVD63HIu2aou0YAPAAJgGwAEgmyABAAEnwABm2ADAAJgIPgE9MIvjJ8AAZtVKjAkBHIwTaowQYAPAAJgGwAEgm4VgAgACJ8AAZtkxjDBgA8AAlZgChYwxwFQ+txyMSoKMPMBUPhkgAQABhIxLwFQ+oAAAAMAAmAlOjGOMbAAAwABm2mADwAD60QEqTox+jIYAAMAAZttgA8AA+tEBKk6MmIyiAADAAGbcYAPAAPrRASpOjLSMuwAAwABm3WADwAD60QEqTozNjNUAAMAAZt5gA8AA+tEBKk6M54zxAADAAGbfYAPAAPrRASpOjQONDQAAwABm4GADwAD60QEqTo0fjSkAAMAAZuFgA8AA+tEBKk6NO41MAADAAGbiYAPAAPrRARaNZRaNTi64FMAAovrAAKMAwABTkcAAev5GjYiNqY2ZAAAAmfpgA70qAIGNoMBUPfI+AUmNsSIiIhyNuRSNtcBUQmENAEgBAAEWjcwWjbwutHzAAKL6wACi/rG5uPgAwAD98QEcjeoUjebAVEJhDQBIAQABFo39Fo3tLrR8wACi+sAAov6xxbkEAMAA/fEBHI4iFI4ewFRCYQ0ASAEAARaONRaOJS60fMAAovrAAKL+sca5BQDAAP3xARyOWBSOVMBUQmENAEgBAAEWjmsWjlsutHzAAKL6wACi/rHHuQYAwAD98T2MjovAVEGaKUmOpxyOrxSOq8BUQmENAEgBAAEWjsIWjrIutHzAAKL6wACi/rG+uP0AwAD98T2NjtfAVEGtKUmO8hyO+hSO9sBUQmENAEgBAAEWjw0Wjv0utHzAAKL6wACi/rG8uPsAwAD98T2OjyTAVEHAKUmPQRyPSRSPRcBUQmENAEgBAAEWj1wWj0wutHzAAKL6wACi/rG7uPoAwAD98T2Pj3DAVEHTKUmPihyPkhSPjsBUQmENAEgBAAEWj6UWj5UutHzAAKL6wACi/rG9uPwAwAD98T0Vj7rAVEHmCClJj9Ucj90Uj9nAVEJhDQBIAQABFo/wFo/gLrR8wACi+sAAov6xurj5AMAA/fE9FZAHwFRB+QkpSZAkHJAsFJAowFRCYQ0ASAEAARaQPxaQLy60fMAAovrAAKL+sbi49wDAAP3xPRWQVsBUQgwKKT4BSZKGFJKKwFRCMgwAPgFJkqgckrgWkqwuwABIUsAAovrAAKMHwABIiwEAARSS0MBUQmENAADAAGrCPRWS1sBUQh8LKT8/SZMEhpMIwFRBwD4BPRWTG8BUQfkJKT9JkzeHkzvAVEHTPRWTQ8BUQfkJKT9Jk1ock2aBk17AVD3yhAcBAAEWk4MWk3IuwABTrcAAovrAAKMIuu3AAHqQAMAA/kQ+AT0Vk8/AVEIfCxST28BUQjIMAD9OlA6UGQAAhiVdA8AA/TsBYAPAAJSBATGULGADwACUgQBJlDUUlDnAVEH5CQA+BE6UXAAAAMAAZuNgA8AAlIEATpVylYcAAMAAZuRgA8AAlZgBHJWXgpWJwFQ+GSABAAEjhpWYwFRBwBaVvhaVri60fMAAovrAAKL+sby4+xaV6BaV2C60fMAAovrAAKL+sbq4+QFgA70qAABJlf+HlgPAVEHTPgE9FZYVwFRFXw4cliVqliJgA8AAmAbAASCbhWACAAInwABm5TGWoGADwACVmAIclq+ClqHAVD4ZIAEAARaWwBaWsC60fMAAovrAAKL+sbu4+gAAFJbNwFRFcA8AAMAAmAk+AT0VlvzAVEVfDhyXDGqXCWADwACYBsABIJuFYAIAAifAAGbmFJciwFRFcA8AAMAAmAk9HJddFJdHwFRFMA0AVgEAARyXZGqXYWADwACYBsABIJuFYAIAAifAAGbnFJeVwFRFXw4AAMAAmAkAwAD9TD9Jl64Ul7LAVEIMCgA+AT0cl9AUl8XAVEUwDQBWAQABHJfpg5fUwFQ+fiABAAEWl/oWl+outHzAAKL6wACi/rG4uPcAAADAAP1MP0mYFRSYGcBUQeYIAD4BPRyYNRSYKsBURTANAFYBAAEcmE6DmDnAVD5+IAEAARaYXxaYTy60fMAAovrAAKL+sb24/AAAAMAA/Uw+AT0cmUIUmTfAVEUwDQBWAQABHJlJaplGYAPAAJgGwAEgm4VgAQABJ8AAZugAwACYCQDAAP1MSZmIhZmMwFRBrT4BPRyZqBSZncBURTANAFYBAAEcmcGDmazAVD5+IAEAARaZ0haZwi60fMAAovrAAKL+sb64/QAAAMAA/Uw/SZpEhJpIwFRBmj4BPRyaZRSaWsBURTANAFYBAAEcmn6DmmnAVD5+IAEAARaajxaafy60fMAAovrAAKL+sbm4+AAAAMAA/Uw/SZqqFJquwFRCHwsAPgE9HJrMFJrBwFRFMA0AVgEAARya02qa0GADwACYBsABIJuFYAIAAifAAGbpMZvXYAPAAJWYAxyb74Kb4cBUPhkgAQABFpwAFpvwLrR8wACi+sAAov6xwbkAAAAcnC0WnCQuwABER8AAovrAAKL/wABEWgEAARacTxacPy60fMAAovrAAKL+mv+4qgDAAF1GHJx7FpxlLsAAREfAAKL6wACi/8AARFYBAAEWnKAWnJAutHzAAKL6wACi/rHNuQsAwABdQgDAAJgJAMAA/Uw+A06c5pzwAADAAGbqYAO9KgEWnQIWnPIutHzAAKL6wACi/rHAuP9JnSgcnVYWnToWnSwuwABcf8AAovrAAKMDtU7AAEwfgxwBAAEUnV/AVEjdDgAAwAD9CD4BPRydgBSddcBURTANAFYBAAEcnYdqnYRgA8AAmAbAASCbhWACAAInwABm6zGdvGADwACVmAIcndEWncguwABER8AAovrAAKL/wABEWgEAARad8xad4y60fMAAovrAAKL+mv+4qgDAAF1GHJ4Zgp4LwFQ+GSABAAEUnhrAVEjdDgAAAADAAJgJAMAA/Uw/PRyeTBSeQcBURTANAFYBAAEcnlNqnlBgA8AAmAbAASCbhWABAAEnwABm7ADAAJgJAMAA/UxKnn0BHJ6Gap6EYAPAAJgGwAEgmyACAAInwABm7R+erMAAlJEBAAEUnrjAVEUwDQAAAMAAmAgGwACjDIG5ns2e2KISAADAAGbuwACi+gAAAAEDnvKiEgAAAAICAp8LAAAAwABm72ADwACVmACfIgAAAMAAZvBgA8AAlZgAAGADwACWEAE+B06fNZ9KAADAAGLMYAPAAP5+AWqfWmADwAD+fsABbIZOn4efmAAAwABm8WADwACVmAEcn6sWn6IuwABER8AAovrAAKL/sAcBAAGCn8jAVEp+AMAAXUpOoMGgyAAAqitgA8AAlrUBH6DWwACWwwIAAoGg68BUSmODoPHAVEqdAE6hIKEqAABbXQPAAP07AWADwACVmAExoT5gA8AAlZgCgKE/wFRKU4ShRcBUStNOoWGhaAAAlYxgA71RARahehahai60fMAAovrAAKL+se65K06hnqGvAADAAGbyYAPAAJWYARyhuhahsS7AAERHwACi+sAAov/AAERWAQABhqHPwFRLKgDAAF1CSqHcAR+h58AAlh4CAAKHofLAVEtNhaIEwFRK/AAGwACjDYG5oqyivLeMAADAAGbzwACi+gAAAAEDotq3jAAAAAICAqLrAAAApTRgA8AAS88AowYAAACEiF0DwAD+LwFgA70qAABgA8AAlIEBPgJJoxUWoyKAoxnAVEvHnavAAEvlPgROoz2jQgAAgL1gA8AA/n4BFqNNgKNEwFRLx4C9wABL3UmjWRyjYoKjXcBUTAhIAQABJ0gAwAD+jT4BSqN1ARyjf2qjfGADwACYBsABIJuFYAEAASfAAGb0AMAAmAk/SaQ7IiIhHKRIgaRAwFRL1YMcAQABFqRhFqRRLrR8wACi+sAAov6xu7j6AMAA/jsAIRykg4Gke8BUS9WDHAEAARaknBakjC60fMAAovrAAKL+sbq4+QDAAP47ACEcpMGBpLnAVEvVgxwBAAEWpNoWpMoutHzAAKL6wACi/rG8uPsAwAD+Oz4BSqT0ASs/SaUPHKUqFqUcgKUTwFRLx7uUwABL2EgBAAGUAMAA/bs+BEmlgiIiIhyli4KlhsBUTAhIAQABJ4aXAMAA/o0BHKWbgqWWwFRMCEgBAAEng78AwAD+jQEcpauCpabAVEwISAEAASeV4ADAAP6NARyluoKltcBUTAhIAQABJ4PBAMAA/o0+AUqlzwErP06l/6YGAACBdmADwACVmAEcpgpqpghgA8AAmAbAASCbIAEAASSmHgMnwABm9YKmFsBUTAgnwABm9gDAAJgISaYpIiIcpjKCpi3AVEwISAEAASeDfADAAP6NARymQYKmPMBUTAhIAQABJ4EGAMAA/o0BHKZQgqZLwFRMCEgBAAEng8AAwAD+jT4BPYumZMBUTX4cpm9qpm1gA8AAmAbAASCbIAIAAifAAGb3g6Z7wFRNfgDAAJgIP0qmlgEcpqBqpp1gA8AAmAbAASCbhWACAAIkAAInwABm+CfAAGb5g6cawFRNfgDAAJgJSacwHKc5gqc0wFRMCEgBAAEngcYAwAD+jT4BSqdQARynZ2qnV2ADwACYBsABIJuFYAEAASfAAGb6AMAAmAk+AkAcp8qCp8XAVEwISAEAASeEkgDAAP6Np8Wn0ABKp9sBHKflaqfiYAPAAJgGwAEgm4VgAQABJ8AAZvsAwACYCUmoiyIWqJiAqI/AVEvHt1DAAEvjARaorICoo8BUS8e3TMAAS+Q+CU6riKuWAADAAGb8YAPAAPrRARyroIGrmMBUS9WDHAEAARaruRarqS60fMAAovrAAKL+sbm4+ADAAP47TqvTq+IAAMAAZv1gA8AA+tEBHKvsgavkwFRL1YMcAQABFqwFFqv1LrR8wACi+sAAov6xuLj3AMAA/jtOrCCsNAAAwABm/mADwAD60QEiHKxSFqw2LrYjwACi+sAAowS2UwEAARascBasYC60fMAAovrAAKL+sdi5FQDAAE2xABysooGsmsBUS9WB1gEAATSspgOspq04AAAAAQEBrKcAAACZ+mADvSoAAGADwAD60QE+AUqsugEcrO4WrM4WrMEutiPAAKL6wACjBIfowABNqpsaAgAChKz6wFRP4xatDxas/y60fMAAovrAAKL+sdi5FQDAAHF4AMAA/Q5JrfkiFq4GgK39wFRLx7dMwABL5AAiFq8HHK7WFq6zFq6mLrYjwACi+sAAowSlUMAATauz3gEAASsAwABuz4MhgWoBIYKvI8BUTw0+AUqvPQErP0mvWCIhgq9dwFRPDQAhg69vwFRPSD4BSq+JASs/Tq+1r8AAAMAAZv9gA8AAlZgBHK/Eaq/CYAPAAJgGwAEgmyABAAEnwABm1gDAAJgIT7CFsJYAAAHAAGcAYQMAYAPAAJWYAAOwq7D1AAAAAAAAAGADwACVmAFKsLsBHLC7LsAAZu7AAKL6AgACHLDYarDWYAPAAJgGwAEgmyABAAEnhY8AwACYCByw6Gqw5mADwACYBsABIJsgAQABJ4WPAMAAmAgAwACjDE+w/rEPAAABwABnAWEDAltbYAPAAJWYAAOxFLFtAAAAAgICsRUAAACFxVsAsRsAAACFx1sAAGADwACVmAE+AUqxLAEmsSwBIxyxOBSxM8BUUX4IAEgBAAErAMAA/fEUsULAVFGHCQAcsUxqsUpgA8AAmAbAASCbIAIAAifAAF+jMbFXWwIUsVjAVFF+CAAUsV7AVFGHCQAAwACYCAFbYAPAAJWYSbF2FrGDgLF6wFRLx7dQwABL4z4FTrGnAAAArdhgA8AAlZgASbG6grG+wFRPDT4BPRWx2cBUUhUIhbHlwFRQsz9JsgSDsgjAVE9IPgE9FbIkwFRSFQgcsjWHsjDAVFFeIAIAAhSyNsBUUhUIAByyQ2qyQWADwACYBsABIJsgAQABJ8AAZwIAwACYCAAAP0myeISyfMBUT4M+AT0Vsp3AVFIVCByyroeyqcBUUV4gAgACFLKvwFRSFQgAHLLPhrK6wFRQ5SAAAAAAAAAAP0qy5wEcsvFqsu5gA8AAmAbAASCbhWACAAInwABnAxSzqcBUUhUIAADAAJgJPgROs90AAACt2GADwACVmABJs/CCs/TAVE8NPgE9FbQPwFRS+wiFtBvAVFCzP0m0OoS0PsBUT4M+AT0VtF/AVFL7CBy0cIe0a8BUUV4gAgACFLRxwFRS+wgAHLSRhrR8wFRQ5SAAAAAAAAAAP0q0qQEctLNqtLBgA8AAmAbAASCbhWACAAInwABnBBS1i8BUUvsIAADAAJgJSbWqFrW3gLWuwFRLx7MVwABL4T4BSbXHIhy12Ra11IC1y8BUS8eAvcAAS91IAQABJ5f6AMAA/o0AHLX8FrXugLXlwFRLx7uUwABL2EgBAAGTAMAA/bs+AUq2DAEcthZqthNgA8AAmAbAASCbhWABAAEnwABnBQDAAJgJP0m2jRa2moC2kcBUS8eFQsAAS98+AUm2rBy2vha2uYC2sMBUS8eAvcAAS91IAQABJ8AASPIAwAD+jT4BSrbTARy23Wq22mADwACYBsABIJuFYAEAASfAAGcGAMAAmAk/P0q3fQErBsAAow6BubeRt6K8GwAAwABdHgAAAAEDt7y8GwAAAAEBAbfQAAAAuwlgA8AAetYAAGADwACVmAE+C0637Lf1AAClNGADwABLzwEWuAOAt/fAVFSUpTTAAHrYTrgiuCoAAISIXQPAAP4vAWADvSoBFrg4gLgswFRUlISIwAB62k64ULhjAADAAGcHYAPAAJWiARy4bBa4ZS64FcAAovrAAKMBr/YBAAGCuILAVFTNAMAAZL1OuJ64rQAAwABmrV0DwAD9OwFgA8AA/n4BMbi3YAPAAP5+AD0cuM6EuL/AVFUmVgEAASeFjwDAAP1MSbjkFrjxgbjowFRUrYVEwABL4D4BPRy5EoS5A8BUVSZWAQABJ4CWAMAA/Uw+AkW5MwG5PLk+AABiYAPAAPyXAZMBHLlFhblDwFRVkWMBAAEWuVCBuUfAVFStu5TAAEvYAMAA/cUBjblfwFRVkRy5YIW5X8BUVZFkAQABlADAAP29PgE9HLl9hLluwFRVJlYBAAEkuYYCJ4HXhbmEwFRVkQDAAP1MRbmXAbmguaIAAGJgA8AA/JcBlAEcuamFuafAVFYIgWsBAAEWubWBuazAVFStlZjAAEvbAMAA/cYBjbnIwFRWCBy5yYW5yMBUVghkAQABlADAAP29PgE9HLnmhLnXwFRVJlYBAAEkufECJ5YdhbnvwFRWCADAAP1MTroSuiEAAK/qYAPAAJWiARy6Kha6Iy64FcAAovrAAKMBr+oBAAGBujnAVFStAMAAZKtOuk+6XAAAwABnCGADwAD+fgEcum0WumYuuBXAAKL6wACjAbAnAQABFrqUFrqELrR8wACi+sAAov6xhLjCAMAAZMlOur+6zQAAwABnCWADwACUgQEcutcuwABm88AAovoCAAKBuvbAVFStgrsAwFRUzQDAAKMNSbsOHLsgh7sSwFRW8UgBAAErAMAA/fE9j7spwFRW8Ry7PGq7OWADwACYBsABIJuFYAEAASeW0ADAAJgJP0q7UQEcu1pqu1hgA8AAmAbAASCbIAIAAifAAGcKMbuLYAPAAP3kBoS7k8BUVSaHu6nAVFbxhru+wFRWr4O70sBUVPKFu+zAVFZ9hLwCwFRVJgDAAJgIBsAAow+BubwgvDfAAEL9AADAAFy9AAAAAQO8U8AAQv0AAAAAAAAAYAPAAJckAT4GTryvvLgAAMAAXhRgA8AAejUBFry6LrgTwACi+sAAowJJvN4hFrzsgLzjwFRX6MAAU23AAHo9Srz4ASs/Tr0hvSoAAIhqXQPAAP07AWADwACVmAExvT5gA8AAlZgATr1evWgAAJliXQPAAPz5AWADwABhQgEcvYAWvXIuwABcf8AAovrAAKMDu8IBAAEWvaEWvZguwABER8AAovrAAKL/wABEZMAAXVcAwABMHEa9uAC9ywAAAIYVYAPAAGFCAIK918BUWEVBPgFJveoiJb33g73uwFRYl2ADwABiFAAlvjIWviIUvhnAVFiXAwFgA8AAYhSz9sAAYhZgA8AAYv0+CU6+XL5hAACClGADwABi/QEmvlwBFr5sFL5jwFRYlwMBYAPAAGIUs/bAAGIWYAPAAGL9Tr6Rvp4AALLfYAO9KgEWvqWEvqDAVFjollLAAGL/Sb62IRy+xIC+u8BUV+jAAFNuAQABhb7PwFRZGgDAAHo6Qr7eAD89HL76gb7xwFRYJFYBAAEcvwcWvv4uwABER8AAovrAAKL/sAUBAAEUvxnAVFiXAwFgA8AAYhQAwABdSwDAAP1MPRy/NoG/LcBUWCRWAQABHL9DFr86LsAAREfAAKL6wACi/8AARGIBAAGFv1rAVFkaAMAAXVUAwAD9TE7AAEFtwABBeAAAn1FdA8AA/TsBYAPAAJdNATHAAEGKYAPAAJdNAEbAAEGWwABB3MAAQa0AAACCamADvWkAHMAAQcCAwABBt8BUV+iE5AEAAYXAAEHNwFRZGgDAAHo7PgE9HMAAQfOGwABB6MBUWdhWAQABH8AAQfvAAJdZAgACHMAAQhxqwABCGWADwACYBsABIJuD8QEAARbAAEIqh8AAQiPAVFoHgL29GADAAJgXHMAAQjoWwABCMS7AAERHwACi+sAAov/AAERWAQABh8AAQk/AVFoHAMAAXUIAAMAA/UxOwABCccAAQnUAAICrYAPAAJc+AR/AAEJ7wACXTAEAAYbAAEKTwFRZ2AA9HMAAQrGBwABCqMBUWCRWAQABh8AAQrXAVFq6AMAA/Uw/SsAAQs4BH8AAQtnAAJcxAQABgcAAQvDAVFgkAAAAVD0lAFQ9bgBUPbcAVEotAFRLoQBUVHIAVFe3AFRbIQAAAAcAAAGBuQBUW0gAVDtiAFRbRgAAAAEAVFtIAAAAAAACBMAAoxLAAGcLgboAAAWBEAAAwACalcAAZtEAgVoAAL0VAACBfgAAwABkALSUAIGfAADAAGQAAAEBAYKFgcAAAMAAXSYAAQEBr2wAAAABAsAAoxOBuoHvgfWIsgPAAFxyAAABYAHAAP3kAAAAAQXAAKMXAAAAAAQAAAMAAAAAAAAAAABgA8AAoxMBPwEJAQDAAP36AAAAAAEGwACjFYG6gg+CJoiwAAHAAGcMAAAAAQOCOIiwAAAAAgICgkgAAACv02ADwABdTwCCYAAAAIHpYAO9UQAAYAPAAJSBAT4DToJ9go0AAMAAZw1gA8AAlZgBHIKXgIKPwFRcH8AARFYBAAGBgqzAVFwtAMAAXUJOgsiC3AAAwABnDmADwACVmAEcgu6AgubAVFwfsAcBAAFqgxlgA8AA/n7AAWyQAMAAXUpKhEQBHIROaoRLYAPAAJgGwAEgm4VgAgACJ8AAZw8yiE9gA8AA/n5gA8AAlZgCJ8AAYs+DiGjAVFxzJ8AAZw2CiJbAVFxEAMAAmAkAAFRb/QBUXPAAAAABAAABgboAVFz/AFRbswBUXP0AAAABAFRc/wAAAAAAAgTAAKMYwABnEIG7AAAFgQgAAMAAmpXAAGbRAIFSAADAAGQAtJQAgXMAAMAAZAAAAQEBgoWBkwAAwACCbQABAQG8NoHRAADAAI3BAAAAAAABAsAAoxmBu4Hnge2hIAPAAGcRAAABYAHAAP3kAAAAAQXAAKMhAAAAAAQAAAMAAAAAAAAAAABgA8AAoxkBPwEJAQDAAP36AAAAAAUGwACjG4G7ggGCDYKOAAHAAGcSAAAAAQOCMoKOAAAAAQEBgkAAAAC0BGADwACCbgAAYAPAAPrRAT4BSoJUARaCaICCW8BUXdjAAFLJwACCcAbAAKMcgbuDYIN3iwIAAcAAZxMAAAABA4OfiwIAAAADAwODtAAAALQEYAPAAIJuAIPZAAAAsAdhAwFgA8AA/n5gA8AAlZgAhB0AAADAAGcUYAPAAJWYAABgA8AAlIEBPgVAFoRNgIRAwFReKMAAUsnAAIJwhECEbwBOhIiEnAAAwABnFWADwACVmAEchMKBhKbAVF42IAEAAWqE0WADwAD+fsABbHwAAE6E+IUJAADAAGcWYAPAAJWYARyFL4GFE8BUXjYgAQABaoU+YAPAAP5+wAFsgQAAToVhhXwAAMAAZxdgA8AAlZgBHIWigYWGwFReNiABAAFqhbFgA8AA/n7AAWyGAABKhc8BHIXZaoXWYAPAAJgGwAEgm4VgAgACJInYAyfAAGcYHogqwACjHQAAAAAnwABnGTKJ2mADwAD+fmADwAD95AUnwABnGhaKF4CKCsBUXijAAFLKwACCcSfAAGcUgopXwFReTSfAAGLIg4qEwFRegCfAAGLKhIqtwFReryfAAGLMhYrdwFRe3gDAAJgJBsAAox2Bu4sHixWLgQABwABnGwAAAAEDiyuLgQAAAAAAAABgA8AA/n4BPgFKi28BJ8AAZxwGwACjHoG7jMqM4pDSAAHAAGcdAAAAAQOM8pDSAAAAAQEBjPkAAACZ+mADwACOJgAAYAPAAJWYAT4LTo0RjRoAAMAAXcNdA8AA/TsBYAPAAP5+ARaNIICNHMBUX/HAAF2cwACOQE6NQY1NAADAAGceXQPAAP07AWADwAD+fgEWjVOAjU/AVF/xwABdncAAjkFOjXaNgQAAhIldA8AA/TsBYAPAAI4mARaNh4CNg8BUX/HAAF2ewACOQk+Nno2lAAABwABnH2EDAV0DwAD8+QFgA8AA/n5gA8AA/n4AA42vjiAAAAABAQGNwQAAAMAAScFdA8AA/PkBYAPAAP5+AABgA8AA/n4BPgJJjc8cjdiFjdPAVGC2SAEAASsAwAD98UqN4QEnAD9KjfIBHI4RNY3/AAABAF0DwAD9OwFgA8AA/n4BHI3/hY36wFRgtoCtAAAAAMAA/Q81AAAAAQBbARyOCYaOB8BUYP2ArgAAAADAAP1OhgDAVGD9WAEAASeBBgDAAP0NTo4ujjYAAMAAZyBgA8AA/n4BHI5ChI44wFRgiyABAAGBjkPAVGAKAABOjlmOZAAAwABnIWADwAD+fgEcjnCEjmbAVGCLIAEAAYKOccBUYDUAAE6OkY6UAACD6WADwAD+yAEfjprAAP7nAQABhY6nwFRhVABJjrUhHI7Eho65wFRhfUgBAAEnAADAAP6NPgE9NY7TAAABAGADwAD+yAGHjtPAVGGmNQAAAAEAWwEcjtcUjtXAVGHkCACCjgEAASeW0ADAAP7cNQAAAAEAWwEcjuMUjuHAVGHkCACCjgEAAYaO6cBUYX0AwAD+3BQAwFRh5AgAP06PCI8RAADAAFH9YAPAAP5+ARyPFoePE8BUYaYjAAAAAMAA/uFJjyciIhaPL4CPK8BUX/GGXcAAjjoBIRyPRBSPO8BUYkgIAEgBAAEnAADAAP6NASEcj1iDj03AVGBgSAEAASsAwAD9ZT4DTo99j4MAAISGXQPAAP07AWADwACW6AExj5RgA8AAlugBHI+Yao+VYAPAAJgGwAEgm8AAUmkBAAEUj6PAVGJICAAAwACYGEmPtSEcj8SDj7nAVGBgSAEAASsAwAD9ZT4BPTWP1wAAAQBdA8AA/TsBYAPAAJboARSP18BUYrMJADUAAAABAFsBHI/pFI/nwFRjFAoAVgEAARyP8GqP7WADwACYBsABIJvAAFJpAQABJ5bQAMAAmBgAwAD9TDUAAAABAFsBHJANFJALwFRjFAoAgKUBAAEckBdqkBRgA8AAmAbAASCbwABSdwIAAhyQPoOQM8BUYGCAqwEBYAPAAJboATSQQgOQQpBZAAAAAQEBkEkAAACZ+mADwACOJgAAYAPAAJWiAUqQUQEWkFUUkFHAVGPADACAvcAAjikAwAD9BByQX2qQXGADwACYBsABIJvAAFJpAQABJ4EGAMAAmBgAwACYGgDAAP1NFADAVGMUCgA/SpCAAR6Qh8AAkzwCAAEUkKDAVGKzCQABwABhNSk/SpDDASsGwACjH4G7lbaVzaEeAAHAAGciAAAAAQOV46EeAAAABQUFlfwAAADAAGcjYAPAAJWYAJYfAAAAwABEWmADwACVmACWSQAAAMAAZyRhAwFgA8AAlZhgA8AAlZgAlpIAAADAAGclYAPAAJWYAJbCAAAAwABnJmADwACVmAAAYAPAAJSBAT4CTpbplvYAAMAAZydgA8AAlZgBHJcVgpcAwFRkiCABAAEclxhqlxZgA8AAmAbAASCbIAIAAifAAGcoMZcqWwAAwACYCAAASpc0ARyXPmqXO2ADwACYBsABIJuFYAIAAifAAGcpMp/ZYAPAAP5+YAPAAP3kByeBVICf6cBUZGgnmQiBoArAVGR4J8AAZyeFoDPAVGTMJ8AAZyWDoGLAVGShJ8AAZyaEoJPAVGSxJ8AAZypqoNJgA8AA/n7AAWxZJ8AAZyspAMAAmAkAAFRdtgBUXgYAVF+aAFRfzwBUZEYAVGWTAAAABQAAAYG7AFRlsgBUXWwAVGWwAAAAAQBUZbIAAAAAAAIEwACjIsAAZyyBvAAAFIEQAAC4pwABAQGziYFLAADAAGEPAACBbgAAvRUAAIGSAADAAGLRAACBswAAwABCRwAAgdsAAMAAZAC0lACB/AAAwABkAAABAQGChYIcAADAAGQ1AAEBAZlIgkoAAMAAarYAAIJzAADAAHp8AACCoQAAwAB2jAAAgswAAMAAd+4AAQEBuA2DDgAAwABpHwABAQGxOINLAADAAEwIAACDfAAAwABLvQABAQGk6YOuAADAAG/gAAEBAcAATlWD8AAAwABNmAABAQGk7YQbAADAAI3BAACEMQAAwABdJgABAQGvbIRfAADAAI6wAAAAAAABAsAAoyOBvIR+hITAAEN/A8AAXHMAAAFgAcAA/eQAAAsEwACjJYG8hLqE4AXAAGctAF0DwAD+LwFgA8AAS88BHoTRwADBpgABYAPAAEvPAAAEwACjJ4G8hPOE+wnAAERHwACjIgBgA8AAXU8ABMAAoyiBvIUThSEJwABERsAAoyIAYAPAAI6xAATAAKMpgbyFMYU3CbgVwACjIgBgA8AAZDgABMAAoyqBvIVVhWAJwABT6MAAoyIAYAPAAHbVAATAAKMrgbyFeIWJCcAAXIHAAKMiAGADwAB39QAEwACjLIG8hcGFzAnAAEhSwACjIgBgA8AAasgABMAAoy2BvIXmhfYJwABTrcAAoyIAYAPAAHp9AATAAKMugbyGDYYaCcAAXH/AAKMiAGADwABMDwAEwACjL4G8hjGGPQm2I8AAoyIAYAPAAE2cAATAAKMwgbyGYYZ7CbhTwACjIgBgA8AAQmUAAQXAAKM5gbyGgIaAh58AAAADhpaHnwAAAAoKCoajAAAEwABER2ADwABdTwCGuAAABMAAREZgA8AAjrEAhtMAAAS4FWADwABkOACG5gAABMAAU+hgA8AAdtUAhv4AAATAAFyBYAPAAHf1AIccAAAEwABIUmADwABqyACHNAAABMAAU61gA8AAen0Ah1EAAATAAFx/YAPAAEwPAIdrAAAEtiNgA8AATZwAh4QAAAS4U2ADwABCZQAAYAPAAKMjAT8LCAHAAKMngADAVGhKCAHAAKMogQDAVGhaCAHAAKMpggDAVGhqCAHAAKMqgwDAVGh4CAHAAKMrhADAVGiICAHAAKMshQDAVGiYCAHAAKMthgDAVGioCAHAAKMuhwDAVGi4CAHAAKMvFADAVGjICAAIAcAAozAUAMBUaNYJAAkBhoDAAP36AAAAAAQGwACjM4G8h6SHvIf4AQCvssAAoyIAAAABA4fQh/gAAAAAAAAAYAO7jQFKh9kBFofmFofZLrYjwACjIsAAoy+lO8AATaIGwACjNYG8h/2IAohiAADAAGcuAAAAAQOIEohiAAAAAQEBiCIAAACWUmADvVEAAGADwAD60QFKiDQBHIhCFog0LsAAXH/AAKMiwACjLru+AQABgIhawFRp3gDAAEwaBsAAozaBvIudi7GpzAAAwABnLwAAAAEDi8apzAAAAAMDA4vdAAAAgmpgA71RAIvuAAAApTRgA8AAS88AjAEAAADAAEuzYAPAAEvPAABgA8AAjpQBPhlOjaqNuAAAtSVgA8AAaSABFo3DgY26wFRqSLUlwABL1E6N6Y38AAC1F2ADvXgBFo4FgI3+wFRqPLUXvVROjiGOOQAAt7dgA8AA/JcBFo5Jg447wFRqcbe3wABpLEAiHI6NFo57g45twFRqcZWYwABpKEgBAAGTAMAA/bsBHI69Fo6rg46dwFRqcZWYwABpKEgBAAEWjtOEjsDAVGqRhMW9fgDAAP27jm2O4QBJj7ocj94Wj8yDj77AVGpxlZjAAGkoSAEAARaP9ISP4cBUapGExb1+AMAA/bs+AkmQDByQKIWQEMBUaq1IAQABFpA+hJArwFRqkbUkvYgAwAD9uz4CQBaQqYOQm8BUanHAAEuvwABpL5CbkLIASpC9ASs/SZDYIhaQ/xaQ74SQ3MBUapGEyL19g7fAAP0eAByROBaRJYORF8BUanG7lcAAaStIAQABFpFsFpFchJFJwFRqkYTIvX1hwAD9awDAAP27PgFKkbQBKz8/TpHhkecAAIS+XQPAAP07AWADwAD+fgEckfeDkenAVGpxt7gAAAAAwABpPE6SHZIxAADAAFOTYAPAAPrRARySRBaSMy7AAFOtwACjIsAAoy3AAFOTAQABgJJYwFRqPADAAHqGTpK5kswAAMAAZzBgA8AA/JcBI4eSzsBUbBGUkwFgA8AA/JdOk9KT5wAAwABnMWADwAD+fgEnwABmo06UPpRNAADAAF3MXQPAAP07AWADwACWdwEelFPAAPaSAQFgA8AAlncBHJSqHJSFFJRywFRsSQgAZAEAARaUnIGUk8BUaki7lMAAS9gAwAD9vWQBAAEWlMGBlLjAVGpIlZjAAEvbAMAA/b0ATpUtlT0AAMAAZzJdA8AA/TsBYAPAAJWYAR6VQ8AA9pIBAWADwACVmAEclacclXYUlWPAVGxJCABkAQABFpWXhJWEwFRqkbUkvYgAwAD9vWQBAAEWlciElbXAVGqRhMW9fgDAAP29AE6V4pXoAACA7mADwAD8lwGTSZXxh5X1wFRsET4DPRWWEsBUbVUMHJYXFJYSwFRtVQwAZAEAAZQAwAD9vT0cli8UliHAVGyDCgCAvwIAApMfljnAAJZ+AQABFJZJwFRsbAkAAADAAP1LPRyWdRSWZsBUbO4LAIC/AgACkxyWfWqWe2ADwACYBsABIJsgAgACJ4bGFJaDwFRsbAkAAMAAmAgAwAD9Sz9OlqmWwAAAwABnM2ADwAD8lwEcltqFlsLAVGqtZAEAARSW3MBUbEkIAADAAP29TpdCl2oAAMAAXdFgA8AA/JcBHJeDFJdswFRt+w0AgY0BAAGUAMAA/b49HJehFpeNLq+ywACjIsAAozOzlAIAAoCXssBUajw0l8IDl8KcpQAAAAMDA5fDAAAAgLVgA8AAYtYAl80AAACAvWADwAD+fgCX4QAAAICWYAPAAGFCAABgA8AA/aEBPgROl/eX/gAAwABIS2ADwAD+fgEcmAcWmAAuuBXAAKMiwACjKcAARh8BAAEUmBjAVG6LEAAAwABlmkAhHJgzFJgswFRushIASAEAARSYNsBUbGwJAADAAP6NmCyYSgBJmFMcmF0UmFfAVG1VDABjAQABFJhfwFRt+w0AAMAA/cU+Aj0cmI8UmIHAVGyDCgCAvwIAAhSYkMBUbVUMAB+YncAAln4BAAEUmK3AVG6yEgAAAMAA/Us9HJjNFJi+wFRs7gsAgL8CAAIUmM7AVG1VDAAcmNlqmNdgA8AAmAbAASCbIAIAAieGxhSY38BUbrISAADAAJgIAMAA/Us+Ak6ZA5kJAAAnYAPAAPyXARyZEYaZC8BUa+aAuwEAARSZGcBUbosQAADAAP1QSZkoIRyZMhSZLMBUb60TAEgBAAEcmTWUgcYAAAAAwAD8ugDAAP27PgM9FZlFwFRuKQ4UmW/AVG1VDAA9HJoZFJoKwFRs7gsAgL8CAAIUmhrAVG1VDAAcmiVqmiNgA8AAmAbAASCbIAIAAieGxhSaK8BUbrISAADAAJgIAMAA/Us9HJpMFJo+wFRsgwoAgL8CAAIcmmQUmk3AVG37DQBkAQABFJpmwFRvrRMAAMAA/b0fmoHAAJZ+AQABFJqRwFRushIAAADAAP1LPgFJmrUcmr8UmrnAVG6ZEQBIAQABKwDAAP3xPgE9HJrlFJrWwFRs7gsAgL8CAAIUmubAVG1VDAAcmwgWmv8uwABER8AAoyLAAKMnsAUBAAEfmx7AAGGUAAAAAADAAF1LAMAA/Us+AkmbUyEWm14Um1jAVG6ZEQCoQsAAYUU+AT0Vm+zAVG4pDhScFsBUbVUMAD89HJxGFJw3wFRs7gsAgL8CAAIUnEfAVG1VDAAcnFkWnFAuwABER8AAoyLAAKMnsAUBAAEUnGvAVG6ZEQAAwABdSwDAAP1LPRWcl8BUbVUMHJycFJyXwFRtVQwAZAEAAZQAwAD9vQC7mUmcrRyc0xacxIScscBUapGExb1+gJcBAAGTAMAA/cc+Ak6c5JzzAAC0wGADwAD8lwEcnRUWnQ4UnP/AVGyDCgBhwAD9a4GNAQABFp0qhJ0XwFRqkYTFvX4AwAD9vkadQJ2ynVYAAACpWGADwABjKQAcnZAWnX0WnXAutiPAAKMiwACjL6U7wABNorN7AQABgJ2pwFRqPAC7ez4BSZ28HJ3bFp3JgZ3AwFRqSJWYwABL20gBAAGTAMAA/bs+Ak6d9p4CAACGqWADwABi1gEcnjMWnhEWngQutiPAAKMiwACjL6U7wABNorOPAQABFp5bFJ5OwFRx/RAAllLAAGMrALuUSZ5vIRyehRaecy7AAFyBwACjIsAAoytIAQABKwDAAP3xPgJOnq2etQAAwABnNGADwACVmAEcnskWnrcuwABcgcAAoyLAAKMrwABSSQIAAhae6S7AAERHwACjIsAAoyccnxUWnwMuwABcgcAAoyLAAKMrwABSRQIAAhafUC7AAERHwACjIsAAoycUn1rAVHJZEQAAwAB3+QDAAHf7PRyfhBSfdcBUbO4LAIC/AgACNQAAAAEAYAPAAPyXARSfhcBUbVUMADUAAAABAGADwAD8lwEVn4XAVG1VDByfihQAwFRzSxMAZAEAAZQAwAD9vRQAwFRzSxMAFJ+QwFRywBIAAMAA/Us+AT0cn8cUn7jAVGzuCwCAvwIAAjUAAAABAGADwAD8lwEUn8jAVG1VDAA1AAAAAQBgA8AA/JcBFZ/IwFRtVQwcn80UAMBUc7USAGQBAAGUAMAA/b0UAMBUc7USAByf3xaf0y7AAFPowACjIsAAoyrAAEYRAwADFqAGLsAAREfAAKMiwACjJxSgEMBUclkRADSgHQOgHaFNAAAAAQEBoB4AAACAtWADwABjKQAAYAPAAJWYAUqgJAEcoC0WoCQuwABER8AAoyLAAKMnsAUBAAEeoSfAAGGoAQABHqE8wAD60AEAARyhSJWBxgAAAADAAPy6AAAAwABdSwDAAHbYAMAA/Us+A06hfqGFAADAAEhLYAPAAP5+ASShpwInnhgWoaEWoZkUoYzAVHH9EACWUsAAYyuAvb0YPRyhwRShs8BUbIMKAIC/AgACNQAAAAEAYAPAAPyXARShwsBUcb0PADUAAAABAGADwAD8lwEVocLAVHG9Dxyh0BQAwFR06RIAZAEAAZQAwAD9vRQAwFR06RIAH6HawACWfgEAARSh6sBUdKURAAAAwAD9Sz0cogwUof3AVGzuCwCAvwIAAjUAAAABAGADwAD8lwEUog3AVG1VDAA1AAAAAQBgA8AA/JcBFaINwFRtVQwcohIUAMBUdVwSAGQBAAGUAMAA/b0UAMBUdVwSAByiGmqiGGADwACYBsABIJsgAgACJ4bGFKIgwFR0pREAAMAAmAgAwAD9Sz9OokoAAACCbVsASaJwHKKAFqJ0LsAASFLAAKMiwACjLMAASIMBAAGAopTAVGo8AMAAatQ+AT0VoqXAVHXPDxyiuxairC7AAERGwACjIsAAoyjAAF3PBgAGgKLmwFRqPIei+MBUbBEcox4WoxcuuBXAAKMiwACjKa/qAQABgaMtwFRqSADAAGSrFKNCwFRsgwoAFKNcwFRs7gsAFKN3wFRuKQ4AAMAAjsZJo6wWo7eAo7DAVGo8hQ29QT4BSaPRHKPVLsAAZy4BAAGAo+bAVGo8AMAAozU+A06kBaQQAADAAEBcYAO9KgEWpBmApBLAVGo8hQq9Sk6kPKRHAACs62ADwACVogEcpFAWpEkuuBXAAKMiwACjKa/mAQABgKRjwFRqPADAAGSnPRWllcBUdc8PHKWfaqWcYAPAAJgGwAEgm4VgAgACJ8AAZzUxpcZgA8AA/eQDHKXbFqXSLsAAREfAAKMiwACjJ8AARFQCAAEUpevAVHamEAABwABEVSnAAF1BFKYdwFR2xBEAFKYzwFRs7gsAAMAAmAk+AT0VpmbAVHXPDxymcGqmbWADwACYBsABIJuFYAIAAifAAGc2MaabYAPAAP3kAhymoxamnC64FcAAoyLAAKMpr+YBAAGAprbAVGo8AMAAZKcUpr/AVGzuCwAAwACYCT4BPRWm7cBUdc8PHKb3aqb0YAPAAJgGwAEgm4VgAgACJ8AAZzcxpxpgA8AA/eQCHKckFqcbLsAAREfAAKMiwACjJ8AARFYBAAGApznAVGo8AMAAXUIUp0LAVGzuCwAAwACYCU6neaeSAADAAEYIYAPAAEJsARyntxannC64U8AAoyLAAKMwt28BAAGAp8/AVGo8AMAAQmdOp+6oAAAApaRgA8AAQksBHKgjFKgKwFR4KRAAt3UCAAKAqC3AVGo8g6g1wFRqcQDAAEJwTqhUqF0AAIJuYAPAAJaWASaoVAEcqJkcqGFqqF9gA8AAmAbAASCbIAIAAifAAGc4Mah4WwIUqHnAVGyDCgAUqInAVHXPDwAAwACYCK/9AQABFKivwFR4XREAAMAAlG9gA8AAlpZOqNOo2AAAgL1gA8AAlaIBIxao4YCo2sBUajyEHr1AKxyo+hao8y64FcAAoyLAAKMpr+oBAAGBqQnAVGpIAMAAZKsBYAPAAJWiTqkjqSwAAKCpYAPAAJWiASMhHKlEgqk3wFRqVkgBAAErAMAA/fEcqVYWqU8uuBXAAKMiwACjKa/qAQABgqllwFRqVgDAAGSrKwFgA8AAlaJKqX8BH6mKwACOmgQAAxSpnsBUePYTABSppMBUeT8UABSprsBUeJESAAGWUoCpwcBUajwGwACjN4G8rqquxMAAQ30AAMAAXRIAAAABA67awABDfQAAAAMBAa7qAAAAgmpgA71RAAKu/gAAAMAAXQRgA8AA+tEBagBgA8AA/aF5rw8AAADAAF0IYAPAAPrRAWoAYAPAAP2heV0DwAD9OwFgA8AAjpQBPhJAIRyvNoGvK8BUefRIAQABKwDAAP3xryuvPQBAIRyvWIKvS8BUeg1IAQABKwDAAP3xr0uvXwBOsDEAAADAAGc5XQPAAP1tAmADwABLz2ADwABv4QBOsgcAAADAAGbKXQPAAP1tAmADwABLz2ADwABv4QBOsh+yNAAAwABnOmADwAD8lwEWslAWsj2AsjbAVHnntRe9VITFvX5JsqMWsq6AsqfAVHnnhQ29QT4BPYuyyMBUem0csuYWstguwABcf8AAoyLAAKMuu7cBAAEWsv+AsvjAVHnngL29GADAAEwUP0mzEYGzFcBUefQ+Ak6zMLM1AAAgYAPAAP5+ARazPhazNy64FcAAoyLAAKMpwABIXMAAZH89jLNjwFR6ixyzgRazcy7AAFx/wACjIsAAoy67twEAAYazk8BUeyMAwABMFD9AFrO9GrOswACjJYFVwAD9HbOss8QAPSMcs9mDs8vAVHptSAEAASsAwAD98Yuzy8BUem1qs91dA8AA/W0CYAPAAEvPYAPAAG/hwAFxGCsBXQPAAP1tAmADwABLz2ADwABv4T0jHLQYhLQKwFR6i0gBAAErAMAA/fGMtArAVHqLarQcXQPAAP1tAmADwABLz2ADwABv4cABcRgrAV0DwAD9bQJgA8AAS89gA8AAb+FOtGS0agAAwABmzV0DwAD9OwFgA8AAjpQBMbSBYAPAAI6UAEm0iiIiFrScg7SOwFR6bYFVwAD9kgAWtL2EtK/AVHqLgVXAAP2SACEigrUdwFR6DQActUKFtS3AVHqpgJcBAAGTAMAA/cc+AUq1UAGGtVfAVHwmP062VrZrAADAAGc7XQPAAP4vAWADwABLzwEetnHAAMGmAAFgA8AAS88AAE62lbajAADAAGc8XQPAAP4vAWADwABLzwEetqnAAMGmAAFgA8AAS88AAEm3LyKCtzPAVHoNABy3WIW3Q8BUeqmAlwEAAZMAwAD9xz4HTrgiuDAAAMAAZz1gA8AAS88BHLhTHrg2wABL+AEAAYC4S8BUeecAu60AAAAAwABL9U64criCAADAAGc+YAPAAEvPASMWuJwUuI7AVH0UCQC3S8AAS+IrHLjBFLizwFR9FAkAu6wAAAAAwABL9AFgA8AAS889HLjvh7jawFR8nVYBAAEUuPPAVH0UCQAAwAD+PD0cuRcUuQnAVHzHCABWAQABFLkbwFR9FAkAAMAA/jxOuUW5SgAAvr9gA8AAjpQBHLlWLsAAZy8DAAOAuWzAVHnnFLl0wFR9FAkAFLmDwFR9RQoAAMAAozZAIRy5pxS5osBUfcQLAEgBAAErAMAA/fG5ormuAD0cub2GubfAVHwmVgEAARS5wcBUfcQLAADAAP1MP0a50wC54QAAAKU0YAPAAEvPABa5+4S57cBUeouDaMAA/Y9BPgVOuhK6IgAAwABnP2ADwABLzwEeujLAAEv/AgACFrpHgLpAwFR556dxvT4WulwUulPAVH47CQC1JcAAS9QAPRy6h4e6csBUfJ1WAQABFLqLwFR+XQoAAMAA/jxJuqQhHLq5FLqpwFR+XQoAthABAAGAusjAVHnnAMAAS+w+AUK62wA/Sbr0HLsGFLr4wFR8xwgAVgEAARS7CsBUfl0KAADAAP48PgJOuzq7PwAAvr9gA8AAjpQBHLtNLsAAZy8DAAOAu2PAVHnnFLtrwFR+XQoAFLt8wFR+OwkAAMAAozZJu48hHLuYFLuTwFR/AgsASAEAASsAwAD98T4BPRy7s4a7rcBUfCZWAQABFLu3wFR/AgsAAMAA/Uw/P0m9Xxy9jBa9eha9bBS9Y8BUfjsJALUlwABL1JWYwABpKEgBAAGTAMAA/bs+AUm9nBy9tYW9oMBUeqmAlwEAAZMAwAD9xz4DTr3PvfAAAMAAZ0BgA8AAS88BHr32wABL/wIAAha+GoC+E8BUeeencb0+HL5eFr49FL40wFR+OwkAtSXAAEvUwABLrgEAAYW+dMBUeqkAwABpOwA9HL6rh76WwFR8nVYBAAEUvq/AVH+9CwAAwAD+PEm+3Ry+7xS+4cBUfMcIAFYBAAEUvvPAVH+9CwAAwAD+PD4DTr8tvz0AAMAAZz5gA8AAS88BHr9TwABMAQEAARS/bMBUf70LAABOv6+/tAAAvr9gA8AAjpQBHL+2LsAAZy8DAAOAv93AVHnnFL/lwFR/vQsAFMAAQAfAVIBQDAAAwACjNknAAEAlIRzAAEAuFMAAQCnAVIB2DQBIAQABKwDAAP3xPgE9HMAAQE2GwABAR8BUfCZWAQABFMAAQFHAVIB2DQAAwAD9TD8/Pz9GwABBcQDAAEF/AAAApTRgA8AAS88AFsAAQZmDwABBi8BUem2DaMAA/Y9BPgRJwABBpxzAAEHAh8AAQavAVHydgxwBAAEUwABBycBUgP8JAADAAP47QsAAQdQAP0nAAEHkIRzAAEHyFMAAQenAVID/CQC2EAEAAYDAAEIBwFR55wDAAEvsQsAAQgoAP0nAAEIaIRzAAEJCHMAAQiyDwABCH8BUem1LAQABFMAAQi3AVID/CQAAwAD9gbYTAwADgMAAQknAVHnnFsAAQloUwABCUcBUgP8JAKdxwABL0xbAAEJmLrYjwACjIsAAoy8AwABv4z4BQsAAQn8AP0nAAEKYHMAAQqoUwABCnMBUfMcIAFYBAAEUwABCrsBUgP8JAADAAP48PgJOwABC18AAQtwAAL6/YAPAAI6UARzAAELqLsAAZy8DAAOAwABDAMBUeecUwABDCMBUgP8JACsAwACjNknAAEMhIRzAAEMqFMAAQyXAVIIgCgBIAQABKwDAAP3xPgE9HMAAQ0WGwABDP8BUfCZWAQABFMAAQ0nAVIIgCgAAwAD9TD8/SsAAQ20BhsAAQ3TAVHwmAABUaXcAVGm8AFRqGgBUecEAVIKwAAAABAAAAYG8AFSCywBUZswAVILJAAAAAQBUgssAAAAAAAIEwACjOsAAZ0GBvQAADYEOAAC4pwABAQGxf4FEAAC7nQABAQKzoKTXgYQAAL0VAACBqAAAwABi0QAAgckAAMAAZAC0lACB6gAAwABkAAABAQGChYIKAADAALQswABnQgCCUAAAwABkNQABAQGZSIJ+AADAAHaMAAEBA8AAUaPAAFHUwABRoYLuAADAAHetAAEBBMAAUjXAAFIwlXzAAFGZg2IAAMAAiLsAAIOGAACB4AABAQGXS4OvAADAAF0mAAEBArgQr2wAAAHAAKM8gb2ER8AAZ0MAAF4DAAEBAWADwAB3rgABVwPAAKM8AFwAAYR2AAAAwABnRGADwAB3rgAABQLAAKM9gb2Ei4SRhP0DwABnRQAAAWABwAD95AAAAgTAAKM/gb2Er4SzCYC9AGADwACVogAEwACjQIG9hMiE0gmCbwBgA8AAlGEAAQXAAKNCgb2E14TXhPsAAAADhN+E+wAAAAICAoTlAAAEgL1gA8AAlaIAhPAAAASCb2ADwACUYQAAYAPAAKM9AT8DCAHAAKM/gADAVIRPCAHAAKNAgQDAVIRdCQGE18AA/foAAAAAAAAAVISaAAAAAALAAKNDgb2FAIUGhVQDwABnRgAAAWABwAD95AAAAwTAAKNFgb2FHYUjGMAAZ0cAYAPAAKM9ASsEwACjRoG9hTCFPBiE8QBgA8AAoz0BKwTAAKNHgb2FSYVSGK3dAGADwACjPQErAQXAAKNJAAAAAAQAAAMAAAAAAAAAAABgA8AAo0MBPwEJAQDAAP36AAAAAAAAAFSFNAAAAAACwACjSoG9hVeFXYxPA8AAXHUAAAFgAcAA/eQAAAIEwACjTIG9htGG4hjAAFz+AGADwACVmAErBMAAo06BvYelh80JwABnSMAAozoAXQPAAP1tAmADvSpgA8AAo0MBMofLYAO9KmADwACjQwABBcAAo1UAAAAABAAAAwAAAAAAAAAAAGADwACjSgE/AQkBAMAA/foAAAAABAbAAKNQgb2H0ofXiKQAAMAAZ0kAAAABA4fgiKQAAAADAwOH7QAAAJn6YAO9KgCH/QAAAIC9YAPAAJWiAIgOAAAAgm9gA8AAlGEAAFwBPgJOiCqINAAAwABc9WADwACjQwEciEIWiDYuwABnSMAAozrAAKNOmUoCAAKAiE7AVIX3NIhTA4hTiGgAAAAAAAAAYAPAAKNDAUqIWQEfiF3AAKNJAAAAAADAAP2IPReIeYOIb8BUhiXAAGdHH4iGwACjQgIAAoGIj8BUhgOCiJXAVIYRAMAAo0UGwACjUYG9iKmIromOAADAAGdKAAAAAQOIvYmOAAAAAwMDiNEAAACZ+mADvSoAiOEAAACAvWADwACVogCI8gAAAIJvYAPAAJRhAABcAT4CTokOiRgAAMAAXPVgA8AAo0MBHIkmFokaLsAAZ0jAAKM6wACjTplKAgACgIkywFSGzTSJNwOJN4lMAAAAAAAAAGADwACjQwFKiT0BH4lBwACjSQAAAAAAwAD9iD0XiV2DiVPAVIb7hPEfiXDAAKNCAgACgYl5wFSG2YKJf8BUhucAwACjRgbAAKNSgb2Jk4mYimsAAMAAZ0sAAAABA4mkimsAAAADAwOJsQAAAJn6YAO9KgCJwQAAAIC9YAPAAJWiAInSAAAAgm9gA8AAlGEAAFwBPgJOie6J+AAAwABc9WADwACjQwEcigYWifouwABnSMAAozrAAKNOmUoCAAKAihLAVIehNIoXA4oXiiwAAAAAAAAAYAPAAKNDAUqKHQEfiiHAAKNJAAAAAADAAP2IPReKPYOKM8BUh8+t3R+KTcAAo0ICAAKBilbAVIetgopcwFSHuwDAAKNHBsAAo1OBvYpwinWMTQAAwABc+QAAAAEDioSMTQAAAAICAoqTAAAAvK5gA8AAiLwAiqAAAACBpmEDAmADwACVomADwACUYVwAAFwBPgJPitGK1gAAAcAAZ0xhAwFgA8AAoz1cAAOK5ItPAAAAAQEBiu4AAADAAGdNYAPAAKM9AABcAT4CSYsAHIsNg4sEwFSIwkgBAAErAMAA/fFKixYAPz0ciyWBiyTAVIiDIAIAAhaLL4OLJsBUiMKAvcAAoz8Wiz6DizXAVIjCgm/AAKNAAABGi1aLlItnAAAAmfpgA70qAByLdYCLbsBUiHXAAFgXAQABFouNFouBLsAAZ0jAAKM6wACjToNowAD9jwDAAIi/PgROi6aLsAAAwABc9WADwACjQwEci70Wi7IuwABnSMAAozrAAKNOSwEAAYOLvsBUiSkAwAD9gT0ci9iCi8rAVIijIAEAARaL44SL2cBUiWfAAGdHwACjRQAAPRyMAIKL8sBUiKMgAQABFowLhIwBwFSJZ4TxwACjRgAAPRyMLoKMIMBUiKMgAQABFow5hIwvwFSJZ63dwACjRwAAAABUhdUAVIarAFSHfwBUiFMAVIoAAAAABALAAKNWgb2MUoxYrhwDwABcdAAAAWABwAD95AAABwTAAKNZgb2MhoyVCbR8wACjOgBgA7ioAATAAKNagb2Mroy9CbRAwACjOgBgA7xKAATAAKNfgb2M14ziCa9jAGADwABdJwAEwACjW4G9jPKM+Am4FcAAozoAYAPAAGQ4AATAAKNcgb2NFY0fCcAAXIDAAKM6AGADwAB2kwAEwACjXYG9jT2NSAnAAFPowACjOgBgA8AAdtUABMAAo16BvY10jYYJwABnTsAAozoAYAPAAKNpAAEFwACjaIG9jYuNi46FAAAAA42fjoUAAAAGBgaNpQAABLR8YAO4qACNuwAABLRAYAO8SgCN1wAABK9jYAPAAF0nAI3pAAAEuBVgA8AAZDgAjfYAAATAAFyAYAPAAHaTAI4HAAAEwABT6GADwAB21QAAYAPAAKNWAT8ICAHAAKNZgADAVIsHCAHAAKNagQDAVIsTCAHAAKNfggDAVIsfCAHAAKNbgwDAVIstCAHAAKNchADAVIs7CAHAAKNdhQDAVItLCADAAKNeH441wACjewIAAoCOZMBUiweBjnXAVIsTAAkBjYvAAP36AAAAAAUGwACjYYG9kfaSCaEFAADAAFz2AAAAAQOSGKEFAAAAAwICkiUAAACy32ADvSoAkl0AAAC4GV0DwAD9bQJgA708YAPAAJWYAAGSeAAAAMAAXPdgA8AA+tEBapKVYAPAAPrRd2ADwACjSgE+Bk6StZK8AACBdmADwACjSgEfksLAAKNVAAAAAE+TJ5MsAAABwABnT2EDAWADwAB3rlwAA5NJnGsAAAABAQGTXAAAAMAAZ0RgA8AAd64AAFwBPgZOk4aTjQAAlnNgA71RARaToYWTj8BUjIHAAFIuwAB3sE6TwpPHAACClGADwABjaQEWk9uFk8nAVIyBreHAAHexTpUnAAAAwABc/mADwACVmABOlUWVUAAAhLZgA8AA+tEBKkmVXyEWlWmHlWTAVIy3vGfAAGNyPgJOliqWOQAAtEdgA7ugARaWSxaWOy60QMAAozrAAKNatEe8TkmWYxyWehaWZy7AAGdOwACjOsAAo17AAGdQAgACh5aMwFSMtxSWksBUjQ8KAADAAKNvPgE9FZavwFSM1wgclu8Wlt0WltEur2PAAKNfnqTAAF0vwABdEQIAAoeW+cBUjLcUlv/AVI0PCgAAwACNtkmXHyGClyTAVIwhPgI9FZe3wFSM6AkpPRWX1MBUjNcIHJgVFpf0FpfoLq9jwACjX56kwABdL8AAXRECAAKHmB/AVIy3HJg1FpglLrRAwACjOsAAo1q0RQEAAYaYScBUjJcAvF8AwACNtj8/SZhrIoKYb8BUjCEAIRyYoBSYjsBUjNcIAEgBAAErAMAA/fE+AT0XmLqDmLPAVIxFwABc/hSYzsBUjNcIAMAAo0w+BE6ZCZkSAADAAFH9YAPAAJWYARyZLYGZIMBUjAdLAQABFplAhZkuwFSMgcAAUi3AAHeyAMAA/YFJmVwcmYQWmXKFmWDAVIyBwABSLcAAd7JIAQABKwDAAP3xPgFKmckAP0mZ4yEcmfkUmefAVIzXCABIAQABKwDAAP3xPgFJmg4UmhLAVIzoCQA+AT0VmpjAVI5PCh+ap8AAljcDAAMnZB+a3sAAlmwBAAEWmvcWmvAuuBXAAKM6wACjW8AASLbAAGSCABSbGcBUjNcIAAA+AT0Vm0zAVI5PChSbV8BUjNcIAD9Jm4ghHJuVFJuMwFSOTwoASAEAASsAwAD98T4CTpu1m8cAAMAASQ9gA8AAlaIBHJveFpvXLrgVwACjOsAAo1uv+gEAARab9xab7Bab5S64FcAAozrAAKNbt97AAGRdwABJD8AAZVwAwABk0z0cnByDnBXAVIxFwABnSwMAA4CcKcBUi/sUnDfAVI9NCwAUnErAVI5PCgAAwACjUj9PnHKcdwAAAcAAZ1FhAwFgA8AAd7VcAAOciJ57AAAAAQEBnJMAAACj8WADwAB3tQAAXAE+BE6crpy7AADAAFHEYAO9KgEWnMOGnL3AVI/umfrAAHe3SZzOFpzYhpzSwFSP7sAAUcHAAHe4PgE9HJzyg5zrwFSMRcAAZ0kDAAOHnQnAVJACHJ0eFp0XLrgVwACjOsAAo1uv4AEAAYedKcBUkAIAwABk0RydOmqdOGADwACYBsABIJsgAQABJ8AAS5EAwACYCADAAKNQP06dXZ1qAACE8WADwAB31gEWnXKGnWzAVI/uhPHAAHe5SZ2GIRydlxSdisBUkJgIAEgBAAErAMAA/fE+Ak6du53AAACCbWADwACVmAEcnc4uwABnUsAAozoCAAIWne8WneMur2PAAKNfr9PAAF02FJ34wFSQmAgAAMAAo2M9HJ4Wg54PwFSMRcAAZ0oDAAOHnjPAVJACHJ5IFp5BLrgVwACjOsAAo1uv5AEAAYeeWcBUkAIAwABk0hSeaMBUkNQJAADAAKNRPz0cnoIuwABnU8AAozoDAAOAnp7AVIv7hJ6swFSMYoWey8BUj88AwACjZkme5Bye9YCe6MBUi/tIAQABFp8IFp74LrR8wACjOsAAo1mxwbkAAMAA/fE+Ak6fL580AACClGADwABjaQEenzbAALQvAAAAAEmfZSEcn26Gn2nAVJG1SAEAASsAwABjfj4ETp+Sn50AAMAAXQ9gA8AAlZgBH5+jwACWhgAAAABOn8qf0wAAwABR/WADwACVmAEcn+EWn9UuwABT6MAAozrAAKNdwABR1QQABBagAy64FcAAozrAAKNbFqAXFqALLq9jwACjX6/TwABdNoagIMBUkbWHoCbAVJHqAMAAdtdOoEagWAAAwABJD2ADwACVogEcoG0WoGYuuBXAAKM6wACjW6/6AQABFqCGFqB7FqB0LrgVwACjOsAAo1u33sAAZF3AAEkPwABlXADAAGTTPRygqYOgosBUjEXAAGdLAwADgKC2wFSL+xSgxMBUkmcJABSg18BUkgcIAADAAKNSPz9KoPQBg6D7wFSMRQbAAKNjgb2jlqOnqNgAAMAAZ1LAAKM6AAAAAQOju6jYAAAAAgICo8sAAACv02ADwABdTwCj4QAAAITxYAPAAHfWAABgA8AAlZgBPgVJo/UWpAaBo/nAVJMmtyvAAHfYPgFKpBkBH6QkwACXAQAAAAA/SaREFqRVgaRIwFSTJsAASqnAAHfePgFKpGoBHKRzaqRxYAPAAJgGwAEgmyACAAInwABnVBykpRakmS7AAFPowACjOsAAo13AAFHeAQABFqTMgaS/wFSTJmHAAHfcAMAAdtkAwACYCD9PpOGk8gAAAZ7eYQMBYAPAAGMpYAPAAJWYAAOk/aVqAAAAAQEBpQ8AAACCcGADwABjKQAAYAPAAJWYAT4BSqUhAR+lLMAAln4BAAEcpTwuwABnVcAAozoBAAEWpV4WpVaDpU3AVJPwllLAAGMrgL29GADAAKNlAE+lcaWCAAABr5VhAwFgA8AAYylgA8AAlZgAA6WFpfQAAAABAQGllwAAAIJwYAPAAGMpAABgA8AAlZgBPgFKpakBH6W0wACWbAEAARylxi7AAGdVwACjOgEAARal6Bal4ISl18BUlGeWUsAAYyuAvb0YAMAAo2UASaX7HKYWFqYMgaX/wFSTJlvAAHfalmIBAAE0phwDphymPQAAAAEBAaYmAAAAgpRgA8AAYtYAAGADwAD60QFKpi8BFqY0hKYvwFSU4YeQwABi2wDAAP0MPgFKpkgBHKZXgKZPwFSTGMAARGMAAAAAwABdVj4CTqaepqQAAICWYAPAAJWYARymsC7AAGdWwACjOgMAA4Cmz8BUkxgWpuWBptjAVJMmW8AAd9qDpvDAVJRFAMAAo2RJpvwWpw2BpwDAVJMmszbAAHfZPgJOpz6nRgAAoVxdA8AA/PkBYAPAAJWYARyoIRaoFoGoCcBUkyaau8AAd9uAqwEBYAPAAJWYATSoJQOoJahAAAAAAQEBqCYAAACClGADwABi1gAAYAPAAJWYAUqoLwEcqDqCqC/AVJPOIAEAASaoOwGFqDvAVJXHYAPAAGMpAAAAwAD9BEqoSwEcqFRqqFJgA8AAmAbAASCbIAIAAifAAFH+MahxYAPAAP3kAoWocsBUlYWEqHvAVJUvAMAAmAg+AUqomwEcqKRqqKJgA8AAmAbAASCbIAIAAifAAGdUhKjAwFSVLwDAAJgIBsAAo2SBvajdqO6qRwAAwABnVsAAozoAAAABA6kMqkcAAAADAwOpHAAAAK/TYAPAAF1PAKk0AAAAhX1dA8AA/TsBYAPAAGLWAKlOAAAAwABR3F4DAAEBAWADwABjKQABVwPAAHaOAGADwACVmAAAYAPAAJWYAT4CTql3qYAAAIhqXQPAAP07AWADwACVmAEcqfscqZGBqYLAVJaggKsBAWADwACVmAE0qZUDqZWp8AAAAAEBAamfAAAAgpRgA8AAYtYAAGADwACVmAFKqbQBHKnAFqm0LsAAU+jAAKM6wACjXcAARhEDAAOAqdbAVJaSg6nfwFSXIYKp5cBUlrUAwAB22ADAAP0EgK0BAAABhW4qwAD9D0qqGAEfqiPAAJcxAQABg6o6wFSW5QAGwACjZYG9qkyqU6tJAADAAGdVwACjOgAAAAEDqmOrSQAAAAEBAaprAAAAgL1gA8AA/n4AAGADwAD+fgE+Aj2IqvvAVJe9HKsHgKsCwFSXvYLoAgACJ4bGJ4C1AMAA/p5KqyEBHKsvFqsoLrgVwACjOsAAo1vAAEYfAQABgKtAwFSXvQDAAGWaBsAAo2aBvatOq1OuGgAAwABnU8AAozoAAAABA6tlrhoAAAADAwOreQAAAJn6YAO9KgCroQAAAMAAZ09eAwABAQFgA8AAd64AAVcDwACjPABcAKvLAAAAwABnV2EDAWADwAB3tVwAAFwBPgVOrAWsDwAAwABnWF0DlL4BYAO9KgEfrBWU3gABYAO9KgAATqxbrGcAAMAAUc9gA8AAd8EBHKyCFqx0FqxpLsAAXIDAAKM6wACjXMAAUaTAAHaVSwEAAYCsg8BUmEUAwAB30U6soaysAACbFl0DwAD8+QFgA8AAd7UBFqy6hKyuwFSYrcAAUbzAAHfLSazGIRys1YWsysBUmO1IAQABKwDAAP3xPgFGrOatDqz1AAAArdhgA8AAd7UAha0CwFSY7T4BSa0YIRytJ4OtHcBUmIuDHAEAARatOoatMMBUmTSZ+sAAd7cAlMk+Aj0crVmCrUzAVJhxIAEAAYatWsBUmTQAAD0crXqDrXDAVJiLVgEAARatiIatfsBUmTSZ+sAAd7cAlMo/P0mtqyEcrcgWrbuEra/AVJithUrAAHfFSAEAASsAwAD98T4BPRyt9oGt2cBUmFEgAQABFq4DhK33wFSYrYVKwAB3xQAAPwAAVIvZAFSS8gBUlmwAVJeXAFSYHwBUmfQAAAAFAsAAo2mBva5rrnG3MwPAAGdZAAABYAHAAP3kAAFdAcAAY5UCYAPAAPrRYAO7oAIEwACjbIG9rt2u7Am0fMAAozoAYAO4qAAEwACjbYG9rwWvFAm0QMAAozoAYAO8SgABBcAAo3uBva8ZrxmvZgAAAAOvOq9mAAAAAgICr0AAAAS0fGADuKgAr1YAAAS0QGADvEoAAGADwACjaQE/AwgBwACjbIAAwFSajAgBwACjbYEAwFSamAkBrxnAAP36AAAAAAsGwACjb4G9r7ivvbAVAADAAGdQAAAAAQOvzrAVAAAAAgICr9gAAACClGADwABi1gCv6QAAALQCYAO7oAAAYAPAAPrRAUqv/gEcr/4umsICAAKAsATAVJr1gbAKwFSbAwDAAKNwBsAAo3CBvbAasCuwcwAAmsIBarAbYAPAAP3kAgAAAQOwMLBzAAAAAgICsDoAAAiClGADwABi1gCwSwAAIB9gA7ugAABgA8AA+tEBSrBYARywXYCwWMBUm2GEUgICYAPAAPrRYAO7oAIugbBqwFSbbwDAAGLpBsAAo3GBvbB4sH2xMgAAh0QAAAABA7CGsTIAAAACAgKwlgAAAIV9XQPAAP07AWADwABi1gCwqAAAAB9gA7ugAABgA8AA+tEBPgJGsLiw1bDGAAAAgpRgA8AAYtYAgLDOwFSbzD4BSbDdIRyw4i6awgIAAoKw6MBUm/uBsO7AVJvhAMAAo3A+AUqxAwEqP0qxIwEpBsAAo3KBvbE3sUiyMAAAtH0BarE4YAPAAP3kAgAAAQOxWbIwAAAAAgICsWcAAAiClGADwABjggCxeAAAIB9gA7ugAABgA8AA+tEBPgJJsYghHLHOHLGcFrGMLrRAwACjOsAAo220YQEAARaxvxaxry60fMAAozrAAKNsmwq4sAC8XUgBAAGBsdnAVJx3AMAA/fE+AUqx6wEqP0qyAwEcsgoumsICAAIWshWAshDAVJxphdPAAGOEgbIjwFScdwDAAKNwBsAAo3OBvbI1skayhQAAhoQBarI2YAPAAP3kAgAAAQOyVrKFAAAAAgICsmMAAAiClGADwABjXACydAAAIB9gA7ugAABgA8AA+tEBSrKBASkGwACjdIG9soqym7MDAACGnAFqsotgA8AA/eQCAAABA7KrswMAAAACAgKyuAAACIKUYAPAAGMTALLJAAAgH2ADu6AAAGADwAD60QE+AUqy2QEcsuAumsICAAIWsuuAsubAVJ18tH7AAGMXgbL2wFSdigDAAKNwBsAAo3WBvbMIsxmz7wAAhowBarMJYAPAAP3kAgAAAQOzK7PvAAAAAgICszoAAAiClGADwABi/QCzSwAAIB9gA7ugAABgA8AA+tEBPgJJs1shHLOQHLNvFrNfLrRAwACjOsAAo220YQEAARazh4CzgsBUnfKWUsAAYv8AvF1IAQABgbOTwFSeAADAAP3xPgFKs6UBKj9Ks70BHLPELodEAgACFrPTgLPOwFSd8oUswABjAIGz4sBUngAAwACjcQbAAKN2gb2z9LQFteoAAIaSAWqz9WADwAD95AIAAAEDtBa16gAAAAICArQkAAAIgpRgA8AAY2kAtDUAACAfYAO7oAAAYAPAAPrRAT4ETrRKtFEAAIF2YAPAAPrRASIiIhy0Uy6awgIAAha0XoC0WcBUnrCFScAAY2uBtGrAVJ6+AMAAo3AAHLR/LodEAgACFrSOgLSJwFSesLR/wABjbIG0nsBUnr4AwACjcQActLMuh0QCAAIWtMKAtL3AVJ6wtIDAAGNtgbTawFSevgDAAKNxABy07y6HRAIAAha0/oC0+cBUnrC0gcAAY2+BtRPAVJ6+AMAAo3FJtSIhgrUnwFSe1Eq1LwEqP0a1QbV/tVsAAACpWGADwABjOwAWtXCAtWvAVJ6woq3AAGNwPgFJtYchHLWMLprCAgACFrWfg7WSwFSfk4V/wABjQYG1psBUnr4AwACjcD4BSrW7ASo/SrXbASkGwACjd4G9te+2ALZmAAC0ggFqtfBgA8AA/eQCAAABA7YZtmYAAAACAgK2NgAACIKUYAPAAGM7ALZHAAAgH2ADu6AAAGADwAD60QE+AUq2VwEpBsAAo3iBvbZrtny21AAAtIMBarZsYAPAAP3kAgAAAQO2kbbUAAAAAgICtqMAAAiClGADwABjKQC2tAAAIB9gA7ugAABgA8AA+tEBPgFKtsQBKgbAAKN5gb222bbqtzEAAIaGAWq22mADwAD95AIAAAEDtve3MQAAAAICArcBAAAIgpRgA8AAY1AAtxIAACAfYAO7oAAAYAPAAPrRAT4BSrciASkAAFSa0wBUmzcAVJusAFScPwBUnQIAVJ1SAFSdyABUnoYAVJ/pAFSgOwBUoI0AVKDfAAAACwAAAYG9AFShFgBUg+kAVISjAFSFPQBUihkAVJoRAFShFAAAAAUAVKEWAAAAAAACBMAAo3zAAGdagb4AAAAAAAABAsAAo32BvoSLhJGIVgPAAFPaAAABYAHAAP3kAAAGBMAAo3+BvoUfhU8Fh54AYAPAAKN9AWqFLGADwACjfcABcTEEwACjgIG+hZ+F2wXAAGdbAGADwACjfQFqhbtgA8AAo33AAXFHBMAAo4GBvoYYhlgFwABnXABgA8AAo30BaoY2YAPAAKN9wAFxXQTAAKODgb6GwYbWCcAAZ13AAKN8AGADwAD60QAEwACjhIG+huWG/gnAAGdewACjfABgA8AA+tEABMAAo4WBvocNhyEJwABnX8AAo3wAYAPAAPrRAAEFwACjjIG+hyWHK4ehAYC1wACjfAADhzmHoQAAAAMDA4dEAAAEwABnXWADwAD60QCHZAAABMAAZ15gA8AA+tEAh4gAAATAAGdfYAPAAPrRAABgA8AAo30BPwQIAcAAo4OAAMBUolUIAcAAo4SBAMBUomUIAcAAo4WCAMBUonUJAYcrwAD9+gAAAAADBsAAo4eBvoemh6+H2gEAwABUfAAAAAEDh8OH2gAAAAAAAABgA8AA+tEBSofGARaHxi7AAGdfwACjfMAAo4UGwACjiIG+h96H54gcAQDAAFSEAAAAAQOIAIgcAAAAAAAAAGADwAD60QFKiAMBFogDLsAAZ17AAKN8wACjhAbAAKOJgb6IIIgpiFQBAMAAVIMAAAABA4g8iFQAAAAAAAAAYAPAAPrRAUqIPwEWiD8uwABnXcAAo3zAAKODAABUosAAVKL+AFSjPABUo3oAAAADAAABgb4AVKORAFShVQBUo48AAAABAFSjkQAAAAAAAgTAAKONAIG/AAAHgNoAAKSLAACA8wAAwACF+AAAgRQAAL42AACBRQAAwABCRwAAgW4AAMAAeykAAIGMAADAAKPkAACBqgAAwABEjwAAAAAABQLAAKOOgb+B6YHvgtwDwABnYAAAAWABwAD95AAAAgTAAKOQgb+CEYIgCcAAZ2EAYAPAAEh7AATAAKORgb+COII+CcAAVM8AYAPAAKPlAAEFwACjloG/gqaCpoLaAAAAA4K3gtoAAAACAgKCvQAABMAAZ2FgA8AASHsAgtMAAATAAFTPYAPAAKPlAABgA8AAo44BPwMIAcAAo5CAAMBUpGkIAcAAo5GBAMBUpHkJAYKmwAD9+gAAAAACBsAAo5OBv4JCgkeCbQAAo8QAAAABA4JOgm0AAAAAAAAAYAPAAPrRAUqCVAElgmQWglQuwABnYcAAo5BgA8AASIIGwACjlIG/gnGCdoKiAAC7UwAAAAEDgoCCogAAAAAAAABgA8AA+tEBSoKGASWClhaChi7AAGdhwACjkGADwABIiwAAVKS4AFSk+QBUpToAAAACAsAAo5eBv4Lfgu6FVwfAAGdiAAABYAHAAP3kAAABBMAAo5mBv4UrhTEJgkkAYAPAAIYCASsACQbAAKObgb+C/oMGg3sEAQAAAAABA4MRg3sAAAACAgKDKAAAAIQmYAPAAHs2AIM8AAAAgklgA8AAhgIAAGADwACjlwE+AUqDSgEfg1XAAKPIAgACgINnwFSloYGDcMBUpa8ABsAAo52Bv4N/g4SD1QACwABU6QAAAAEDg5GD1QAAAAIBAoOkAAAApaRgA8AAQksAg84AAACZLmADwACF+QFqAGADwAD9oXkAXAAGwACjnoG/g9mD3oQyAALAAFToAAAAAQOD7oQyAAAAAgEChAEAAAClpGADwABCSwCEKwAAAJkuYAPAAIX5AWoAYAPAAP2heQBcAAbAAKOfgb+ENoQ7hH4AAsAAVNoAAAABA4RHhH4AAAABAQGETQAAAIjMYQMCYAPAAEiCYAPAAKPlXAAAXAAGwACjoIG/hIKEh4TXAALAAFTOAAAAAQOEloTXAAAAAQEBhKMAAACIzGEDAmADwABIi2ADwACj5VwAAFwABsAAo6GBv4TbhOCE8AACwABnYwAAAAEDhO6E8AAAAAAAAABgA8AA+tEABsAAo6KBv4T0hPmFBgACwABU2QAAAAEDhQSFBgAAAAAAAABgA8AA+tEABsAAo6OBv4UKhQ+FFgACgowAAAABA4UUhRYAAAAAAAAAXAAGwACjpYG/hTWFT4VVAQKZYAAAAAEDhVWFVQAAAAAAAABdA8AA/TsBYAPAAIX5AAAAVKWCAFSl5ABUpi4AVKZ4AFSmtQBUpvIAVKccAFSnRgBUp2kAVKeYAAAACQLAAKOmgb+F/4YFiaADwABnZAAAAWABwAD95AABYAHAAKOXAQTAAKOogb+GSYZRCaUQAGADtf8AAQXAAKO1gb+GVoZWhnQAAAADhmWGdAAAAAEBAYZrAAAEpRBgA7X/AABgA8AAo6YBPwIIAcAAo6iAAMBUqBkJAYZWwAD9+gAAAAAJBsAAo6qBv4Z5hoqHVgAAwABU6QFqhnpgA8AA/eQCAAABA4aXh1YAAAACAQKGqgAAAKWkYAPAAEJLAIbUAAAAmS5gA8AAhfkBagBgA8AA/aF5AFwBPgE9HIbrFobiLqUQwACjqKWlAgACaob5YAO2McAAxmknwABnZQC2BQbAAKOrgb+HW4dsiD4AAMAAVOgBaodcYAPAAP3kAgAAAQOHfIg+AAAAAgECh48AAAClpGADwABCSwCHuQAAAJkuYAPAAIX5AWoAYAPAAP2heQBcAT4BPRyH0BaHxy6lEMAAo6ilpQIAAmqH3mADtjHAAMZpJ8AAZ2YAtgUGwACjrIG/iEOIVIh0AADAAFTaAWqIRGADwAD95AIAAAEDiGCIdAAAAAEBAYhqAAAAgfBgA8AA/I0AAFwBPgAGwACjrYG/iHiIiYisAADAAFTOAWqIeWADwAD95AIAAAEDiJiIrAAAAAEBAYiiAAAAgfBgA8AA/I0AAFwBPgAGwACjroG/iLCIwYjKAACCjAFqiLFgA8AA/eQCAAABA4jGiMoAAAAAAAAAXAE+AAbAAKOvgb+IzojfiPgAAMAAZ2MBaojPYAPAAP3kAgAAAQOI7Yj4AAAAAAAAAGADwAD60QFKiPMBKgbAAKOwgb+I/IkNiSMAAMAAVNkBaoj9YAPAAP3kAgAAAQOJGIkjAAAAAAAAAGADwAD60QFKiR4BKgbAAKOygb+JKIlOiXEBAJlgAWqJKWADwAD95AIAAAEDiVWJcQAAAAAAAABdA8AA/TsBYAPAAIX5AUqJWAFqiVhdA8AA/TsBYAPAAIX5wAD6lwbAAKOzgb+JdYmQiZ4BAIJJAWqJdmADwAD95AIAAAEDiZeJngAAAAAAAABgA8AAhgIBSomaASsAAFSoSABUqMQAVKlAAFSpfwBUqb4AVKntAFSqJgBUql8AVKqwAFSq5wAAAAkCwACjtoG/ioKKiJWxA8AAZ2cAAAFgAcAA/eQAAWABwACjlwMEwACjuIG/itGK2AmEJgBgA8AAezYABMAAo7mBv4r5iv8JgkkBaordYAPAAP3kAmADwACGAgAEwACjuoG/iyGLJgnAAGdoAF0DwAD9OwFgA8AAo44AAQXAAKPIgb+LK4srjAwAAAADizyMDAAAAAICAotTAAAAhCZgA8AAezYAi2EAAASCSWADwACGAgAAYAPAAKO2AT4CQByL2ByLzxaLxICLvMBUq6nAAFPjwAB7VksBAAEWi9AugknAAKO5AMAA/YFIAQABKwDAAP3xi7yL3wA9HIv5FovugIvmwFSrqcAAU+PAAHtWgL8CAAIWi/ougknAAKO5LgDAAP2CBAgBwACjuYEAwFSrtwgAwACjuICLgMBUq6kIAMAAo7oxi6xgA8AAo44ACQGLK8AA/foAAAAACQbAAKO9gb+MEYwpjG4BAMAAU/7AAKONAAAAAQOMPoxuAAAAAAAAAGADvlwBSoxHARaMWxaMTxaMRy6EJsAAo7ilIsAAe1qxKsAATaUGwACjwIG/jHOMhI6fAADAAFTpAWqMdGADwAD95AIAAAEDjJGOnwAAAAIBAoykAAAApaRgA8AAQksAjM4AAACZLmADwACF+QFqAGADwAD9oXkAXAE+BU6M6QAAAMAAVNtgA8AARecASYz/HI0JgY0DwFSs8kgBAAErAMAA/fE+AT2KjRrAVK0PH407wABIiQMAAxaNQi7AAFP+wACjjcAAo70WjVgugknAAKO5gI1gwFSs5AA+AT2KjYfAVK0PH42owABIigMAAxaNty7AAFP+wACjjcAAo72Bjc3AVKzygI3UwFSs5ABOjgCOBwAAwABUz2ADwACj5QEfjg3AAKQXAQABFo4oFo4gLoQmwACjuMAAU+HAAHtTAD0cjkQWjjwuhCbAAKO4gowBAAEmjkoBgo5KwFStD2ADwABGvQDAAHt5PRyOZxaOYS7AAGdowACjulYBAAEfjm/AAKOWAgACJo6BAYKOgcBUrQ9gA8AASHuDjpPAVK2gAADAAP1MBsAAo8GBv46kjrWRdAAAwABU6AFqjqVgA8AA/eQCAAABA47FkXQAAAACAQKO2AAAAKWkYAPAAEJLAI8CAAAAmS5gA8AAhfkBagBgA8AA/aF5AFwBPgVOjx0AAADAAGdpYAPAAEXnAEmPNhyPQIGPOsBUrnBIAQABKwDAAP3xPgE9io9RwFSujR+PdcAASJADAAMWj38uwABT/sAAo43AAKO9Fo+VLoJJwACjuYCPncBUrmIAPgI9io/EwFSujR+P6MAASJEDAAMWj/ouwABT/sAAo43AAKO9gZAQwFSucICQF8BUrmIAQCEWkKgWkKGBkJvAVK5wgknAAIX8wABMuMAAhguQmpC0AE6Qz5DWAADAAFTPYAPAAKPlAR+Q3MAApBcBAAEWkPcWkO8uhCbAAKO4wABT4cAAe1MAPRyRExaRCy6EJsAAo7iCjAEAASaRGQGCkRnAVK6NYAPAAEa9AMAAe3k9HJE5FpEzLsAAZ2jAAKO6VgEAAR+RQcAAo5YCAAImkVMBgpFTwFSujWADwABIe4ORaMBUr0AAAMAA/UwGwACjwoG/kXmRipInAADAAFTaAWqRemADwAD95AIAAAEDkZaSJwAAAAEBAZGgAAAAiMxgA8AA/I0AAFwBPgFGka6R1ZHFAAAAg9RgA8AAo44AFpHOLsAAZ2jAAKO6PgFJkd0ckeeBkeHAVLAao8QAAAAAwACjkz0ckfiAkfLAVLACIAIAAhaR/4GR+cBUsBrAAGdhwACjkBaSFoGSEMBUsBrAAFTPwACjkQAAPwbAAKPDgb+SLJI9kuAAAMAAVM4BapItYAPAAP3kAgAAAQOSTJLgAAAAAQEBklYAAACIzGADwAD8jQAAXAE+AUaSZJKLknsAAACD1GADwACjjgAWkoQuwABnaMAAo7o+AUmSkxySnYGSl8BUsMe7UwAAAADAAKOUPRySsYCSq8BUsK8gAgACFpK4gZKywFSwx8AAZ2HAAKOQFpLPgZLJwFSwx8AAVM/AAKORAAA/BsAAo8SBv5LlkvaTewAAwABnYwFqkuZgA8AA/eQCAAABA5MEk3sAAAAAAAAAYAPAAPrRAT4CRpMNkzSTJAAAAIPUYAPAAKOOABaTLS7AAGdowACjuj4BSZM8HJNGgJNAwFSxa7tTAAAAAMAAo5RKk1QBKT9Kk2sBKgbAAKPFgb+TgJORlBAAAMAAVNkBapOBYAPAAP3kAgAAAQOTnJQQAAAAAAAAAGADwAD60QE+AkaTpZPMk7wAAACD1GADwACjjgAWk8UuwABnaMAAo7o+AUmT1ByT3oCT2MBUseSjxAAAAADAAKOTSpPpASk/SpQAASoGwACjxoG/lBWUJpSkAACCjAFqlBZgA8AA/eQCAAABA5QrlKQAAAAAAAAAXAE+AT0clJIWlIYWlH4uhCbAAKO4wABT48AAe1aEXgEAARaUmS6CScAAo7kAwAD9igbAAKO+gb+UqZTPla8BAJlgAWqUqmADwAD95AIAAAEDlNaVrwAAAAAAAABdA8AA/TsBYAPAAIX5AT4DTpTylPkAAIF2XQPAAP07AWADwACF+QErRpUFlTSVGgAAAJZSYAPAAIX5ABaVLBaVJS6CScAAo7mZYMAAhgc+Aj0jHJVDgJU8wFSyukgBAAErAMAA/WWIlTzAVLK6MZVYYAPAAIX5ACsBXQPAAP07AWADwACF+T0clWmAlWLAVLK6VgEAAYGVbcBUstYAwAD9TEqVgQE1AAAAAQBdA8AA/TsBYAPAAIX5AYCViMBUsrojHJWPgQDAVLNPSAEAASsAAGqVkl0DwAD9OwFgA8AAhfnAAPqXgQDAVLNPAV0DwAD9OwFgA8AAhfkAAFSsbABUrLgAVK42AFSv1gBUsIMAVLEwAFSxqQBUsiIAVLJ+AFSzogAAAAkCwACjyYG/lhyWK5+fB8AAZ2oAAAFgAcAAo7YAAAEEwACjy4G/lt+XCgnAAFY/AF0DwAD9bQJgA8AAhgJgA8AA/JcBHpb0wAD9dAACYAPAAIYCYAPAAPyXAAABBcAAo9KBv5cPlw+XdQAAAAOXJJd1AAAAAgIClzsAAACEJmADwAB7NgCXTwAAAIJJYAPAAIYCAABgA8AAo8kBPwEJAJdfwACjyAIAAoCXZcBUtEWBl27AVLRTAAQGwACjzYG/l3qXi5peAADAAFTpAWqXe2ADwAD95AIAAAEDl5iaXgAAAAIBAperAAAApaRgA8AAQksAl9UAAACZLmADwACF+QFqAGADwAD9oXkAXAE+AUmX4xyX7YGX58BUtMBIAQABKwDAAP3xPgROmNuY7AAAwABU22ADwABF5wEfmPLAAEiJBAADFpkELsAAU/7AAKONwACjvRaZGi6CScAAo7mAmSLAVLSyAbqvKU6Zc5l6AADAAFTPYAPAAKPlAR+ZgMAApBcBAAEWmZsWmZMuhCbAAKO4wABT4cAAe1MAPRyZuRaZsS6EJsAAo7iCjAEAASaZvwGCmb/AVLT2YAPAAEa9AMAAe3k9HJneFpnYLsAAZ2jAAKO6VgEAAR+Z5sAAo5YCAAImmfgBgpn4wFS09mADwABIe4OaCsBUtTcAAMAA/Uw+AT0dmi3AAFTpAgACgJo7wFS0soGaTsBUtMAAwACjwAbAAKPOgb+aY5pomuAAAMAAZ2sAAAABA5p+muAAAAABAQGajwAAAJkuYAPAAIX5AABgA8AA+tEBPgFKmpwBIiEcmqmAmqPAVLYPSAEAASsAwAD98QAcmsMWmrQuwABWP8AAo8uHWAEAARaa1YCaz8BUtg+CScAAhfwAwAD9gAbAAKPPgb+a5Zr2nrkAAMAAVOgBaprmYAPAAP3kAgAAAQObBp65AAAAAgECmxkAAAClpGADwABCSwCbQwAAAJkuYAPAAIX5AWoAYAPAAP2heQBcAT4BSZtRHJtVLsAAZ2sBAAGBm2zAVLalAMAAo84+CEAhHJxRgZxLwFS2pUgBAAErAMAA/fGcS5xYAE6cbpx0AACAlmADwABF5wEcnI8WnH4WnHYuhCbAAKO4pGHAAHs4uVcCAAIcnKwWnJ4uwABWP8AAo8tLAQABFpyzgZytwFS2pYJJwACF/ADAAP2BFpzEFpy8LoQmwACjuKUiwAB7WgDAAEUXPRyc7hac4Bac2C6EJsAAo7jAAFPhwAB7U8AAVFQCAAIWnPougknAAKO5gp0CwFS2+QDAAKQKQBydLBadJRadHoGdGMBUtqWCScAAhfyZYMAAhgeDHAEAAYGdNcBUtqUAwAD9CJ0YnTsATp1RnWUAAMAAZ2lgA8AARecBH511wABIkAMAAxadfy7AAFP+wACjjcAAo70WnZUugknAAKO5gJ2dwFS2lwBOncWdzAAAwABUz2ADwACj5QEfndLAAKQXAQABFp3tFp3lLoQmwACjuMAAU+HAAHtTAD0cngsWngMuhCbAAKO4gowBAAEmnhEBg54RwFS3zWADwABGvQDAAHt5PRyeMxaeLS7AAGdowACjulYBAAEfnjvAAKOWAgACJp5NAYOeTcBUt81gA8AASHuEnmLAVLgLAADAAP1MPgE9HZ6FwABU6AIAAoCelsBUtpeBnqnAVLalAMAAo8EGwACj0IG/nr6ez5+dAACCjAFqnr9gA8AA/eQCAAABA57Un50AAAAAAAAAXAE+AkafJ59WnzcAAACCSWADwACGAgAWn1AWn0EuwABWP8AAo8uDaMAA/Y8+AT0cn3IWn2YWn14uhCbAAKO4wABT48AAe1aEXgEAAYCfecBUuPUAwAD9ij0dn5KCjAAAAADAAKPGAABUtIYAVLXtAFS2awBUuMEAVLlSAAAABAAAAYG/AFS5bQBUo/8AVKVLAFSnxQBUqxQAVLPPAFS5awAAAAUAVLltAAAAAAACBMAAo9MAgcAAAAWA2gAAgi6CCACBAwAApIsAAIEcAAC+NgAAgU0AAMAAeykAAIFrAADAAESPAAAAAAABAsAAo9SBwIHIgc6J4APAAGdsAAABXQGaIQFbAAACBMAAo9aBwIIVghwJhCYAYAPAAHs2AATAAKPXgcCCV4JkGIF2AGADwABF5wErAQXAAKPjgcCCaYJpgooAAAADgnyCigAAAAEBAYKCAAAEhCZgA8AAezYAAGADwACj1AE/AggBwACj1oAAwFS6PQkBgmmaVwAAAAAHBsAAo9qBwIKPgqeC7AEAwABT/sAAo9MAAAABA4K8guwAAAAAAAAAYAO+XAFKgsUBFoLZFoLNFoLFLoQmwACj1qUiwAB7WrEqwABNpQbAAKPcgcCC8YMCg2MAAJgCAWqC8mADwAD95AIAAAEDgw2DYwAAAAEBAYMWAAAAg/NgA4JLAABcAT4BPR6DIrYfAgACaoMrYAO2McAAxmkkg14CJ8AAZ22Ag1nAVLriAAbAAKPdgcCDaIN5hwcAAJgMAWqDaWADwAD95AIAAAEDg4qHBwAAAAEBAYOZAAAAg/NgA4TZAABcAT4EPRyDqoCDpcBUu0KEUgEAARaDsS6EJsAAo9YAhN1Og8yD1wAAgm9gA8AARecBHIPhFoPZLoQmwACj1qEUAAAAAMAAe3VJhT0WhW4chUyBhUHAVLtxtBgBAAEWhVguwABT/sAAo9PAAKPaAMAARjezGr5APgI9HIWJLsAAZUUBAAEchZAuuzcBAAGBhZrAVLtxAMAAo+EAwACj30qFrgA/PRyG5i7AAGVFAQABHIbtLrs3AQABgYb3wFS7cQDAAKPhAMAAo98GwACj3oHAhwyHHYd1AACF0QFqhw1gA8AA/eQCAAABA4c1h3UAAAABAQGHTQAAAIPzYAOGQQAAXAE+AT0ch16Ah1nAVLxChFMBAAEuAIZIBsAAo9+BwId6h3+H7AAAwABlRQAAAAEDh4WH7AAAAAEBAYeTAAAAgm9gA8AARecAAFwBPgE9F4elLoF2IxyHthaHry6BdsAAo9dIAQABKwDAAP3xgIfBwFS8iRyHzi7AAGduAgACFofVLoF2wACj14CH3cBUvIkAwACj4AFgA8AARefAAKPXBsAAo+CBwIfxh/6IzgAAwABnbgAAAAEDiASIzgAAAAICAogSAAAAhcVgA8AARecAiCUAAACFx2ADwABF5wAAYAPAAEXnAT4DTog/iEsAALlGYAPAAEXnAR+IWcAASmIDAAOAiGfAVL0QgYhtwFS9HhaIiRaIdC7AAFP+wACj08AAo9qF0L5lAD0ciKIWiJouhCbAAKPWVgEAAYKIpsBUvTcAwAB7+kqIuAGCiL/AVL03BsAAo+GBwIjTiOCJ3gAAuzcAAAABA4jpid4AAAABAQGI9wAAAIJvYAPAAEXnAABgA8AARecBPgNOiRaJIgAAuUZgA8AARecBNYkwAAABAGADwABKYwEfiTDAAEpoAgACgIk7wFS9vxaJXBaJRy7AAFP+wACj08AAo9qF0L5lADUAAAABAFsBF4l0gYlywFS96KWkFomTgImIwFS9v6WkwABF6sAAReqBAMBUveg9HImyFomqLoQmwACj1lYBAAGBibbAVL3YAMAAe/pKicgBgYnPwFS92AAAVLpsAFS6uABUuxgAVLwYAFS8ZwBUvO4AVL2fAFS+dQAAAAcAAAGBwABUvpwAVLnWAFS+mgAAAAEAVL6cAAAAAAACBMAAo+QAgcEAAA+A2gAAwACFhgAAgPQAAKSLAACBDQAAvRUAAIExAADAAGLRAACBUgAAvjYAAIGDAADAAEGSAACBpAAAwABCRwAAgcwAAMAAarYAAIH1AADAAHp8AACCIwAAwAB9BQABAQLAAE+cwABW1YJnAADAAGtuAAEBAcAATMyClQAAwABNmAABAQGk7YLAAADAAHspAACC3gAAwABEjwAAgvMAAMAAfPsAAAAAAAICwACj5YHBg62Ds8AAb3MDwABlBAAAAWABwAD95AAADQTAAKPngcGFf4WsGMAAVDsAXQPAAP1tAmADvXVgA8AARecBHoWSwAD9dAACYAO9dWADwABF5wAABMAAo+iBwYXIhfoYwABnbwBdA8AA/W0CYAO9dWADvU4BHoXhwAD9dAACYAO9dWADvU4AAATAAKPpgcGGGoYhCYQmAGADwAB7NgAEwACj6oHBhi+GOBjAAFRtAGADwACFoQAEwACj64HBhmWGrhjAAGdwAF0DwAD9bQJgA8AAYylgA8AAheMBHoaEwAD9dAACYAPAAGMpYAPAAIXjAAAEwACj7IHBhr+G0AnAAEz5AGADvRYABMAAo+2BwYbnhvQJtBUAYAO9PAAEwACj7oHBiT6JSgmyGwBgA8AAYv0ABMAAo/CBwYlgiWsJwABIUsAAo+QAYAPAAGrIAATAAKPxgcGJhomWCcAAU63AAKPkAGADwAB6fQAEwACj8oHBwABpqsAAaboYwABncQBgA75RAATAAKPzgcHAAGywwABs/BjAAGdyAF0DwAD9bQJgA71OYAO+UQEewABs28AA/XQAAmADvU5gA75RAAAEwACj9IHBwABuzcAAbvkYwABncwBdA8AA/W0CYAO9dWADwABI2gEywABu92ADvXVgA8AASNoAAgXAAKQWgcGJm4mbiiQAAAADiaiKJAAAAAYGBomuAAAEhCZgA8AAezYAibwAAATAAEz5YAO9FgCJ1AAABLQVYAO9PACJ7gAABLIbYAPAAGL9AIoBAAAEwABIUmADwABqyACKEwAABMAAU61gA8AAen0AAGADwACj5QE/CQgBwACj8isIAcAAo+orCAHAAKPpgADAVMGBCAHAAKPsgQDAVMGPCAHAAKPtggDAVMGdCAHAAKPugwDAVMGpCAHAAKPwhADAVMG3CAHAAKPxhQDAVMHHCQGJm8AA/foAAAAABcAApBeBwY6Ojo6RIwCWWgADjqCRIwAAAAEBAY6vAAAAg9tgA8AAo+UAAGADwACj5QE/DQgAwACj5x6O0cAAwZ8BAmADvXVgA8AARecBFo71gI7vwFTCX8AAVDvAAKPnAAgAwACj6BaPJ4CPIcBUwl/AAGdvwACj6AgAwACj7BaPXYCPV8BUwl/AAEz5wACj7AgAwACj7RaPjoCPiMBUwl+0FcAAo+0IAMAAo+4Wj7qAj7TAVMJfshvAAKPuCADAAKPpFo/ggI/awFTCX4QmwACj6QgAwACj6haQA4CP/cBUwl/AAFRtwACj6ggAwACj8BaQKoCQJMBUwl/AAEhSwACj5MAAo/AIAMAAo/EWkFiAkFLAVMJfwABTrcAAo+TAAKPxCADAAKP0FpCOgJCIwFTCX8AAZ3PAAKP0CADAAKPyFpDEgJC+wFTCX8AAZ3HAAKPyCADAAKPzFpEFgJD/wFTCX8AAZ3LAAKPzCQGOjsAA/foAAAAAHAbAAKP3gcGKKYo6il0BALYjwACj5AAAAAEDikeKXQAAAAAAAABgA8AATZwBSopKARaKUhaKSi6EJsAAo+mlIsAAe1oGwACj+IHBimKKeoq4AQDAAFP+wACj5AAAAAEDio+KuAAAAAAAAABgA75cAUqKmAEWiqUWipgutiPAAKPkwACj97EqwABNpQbAAKP5gcGKvYrcixsBALSWwACj5AAAAAEDivSLGwAAAAAAAABgA8AAQbgBSor9ARaLBRaK/S6EJsAAo+mlUsAAe1wGwACj+4HBi3+LiI3fAADAAFREAAAAAQOLlo3fAAAAAQEBi6AAAACClGADwABi1gAAYAPAAGLWAT4DTou1i70AAKliYAPAAGLWAYCLv8BUxKpJi8khHIvaFovNLrIbwACj7kgBAAErAMAAYw8+A06L94wDAACroGADvSoBHowPwABj/QEAAYGMH8BUxMMASYwvIRyMP4KMM8BUxPdIAQABKwDAAP3xPgE9iYxSwFTEwxyMcxaMaRaMXC62I8AAo+TAAKP3uDXAAE2jwABG4wIAAoGMj8BUxMMcjLsWjLEWjKQutiPAAKPkwACj97g1wABNo8AARrkCAAIcjPAWjOYWjNkutiPAAKPkwACj97g1wABNo7N2AQABFo0JFoz8LrIbwACj7pZSwABi/wDAAGP3go0jwFTE9wDAAGP1AMAAY/Y/SY1AIRaNUhaNRS6yG8AAo+68Z8AAYwQ+AT2JjXPAVMTDHI2UFo2KFo19LrYjwACj5MAAo/e4NcAATaPAAEbjAgACgY2jwFTEwxaNrC6yG8AAo+4AwABj9j8/So3NAYGN1MBUxMMGwACj/IHBkceRzJKIAADAAGd0AAAAAQOR25KIAAAAAgICkeIAAACWWmADvXUAkfQAAACbfWADvU4AAFwBPgNAHJIeHJIXFpIFLsAAZ2/AAKPoSwEAAYCSGMBUxlEAwAD9gUgBAAErAMAA/fGSBZIlAD0ckj4WkiwuwABnb8AAo+iAvwIAAoCSP8BUxlGBkkfAVMZdAMAA/YJAIhySVi7AAGd1AQABgJJtwFTGUQDAAKQCARySdi7AAFRMAQABgJJ+wFTGUQDAAKQDklaSgwAGwACj/YHBko2SmpNqAADAAGd2AAAAAQOSo5NqAAAAAQEBkrYAAAClpGADwABCSwAAYAPAAEXnAT4DTpLckuAAAMAASVdgA8AARecBNZLmAAABAGADwABG0QEfkubAAEbXAQABFpMGFpLxLsAAU/7AAKPkwACj+LWivmkANQAAAAEAWwEXkxuBkxnAVMdLpaSAky/AVMcgwABF6oEAwFTHSz0ck04Wk0YuhCbAAKPpVgEAAYGTUsBUxzkAwAB7+kqTXAGBk2PAVMc5BsAAo/6BwZP2k/ubZwAAhwsAAAABA5QFm2cAAAAEAgKUGwAAALS4YAPAAIWtAJQ6AAAApaRgA8AAQksAApRZAAAAwABWBGADwAD60QFqlHdgA8AA+tEAlIsAAADAAFYGYAPAAEXnAWoAYAPAAP2heVwBPgVJlRUhFpUmgJUawFTH6MAAVE/AAIWxSpU6AD9OlVMAAADAAElXYAPAAEXnAEmVhYKVicBUyAU+AT2MlfvAVMhYNQAAAAEAYAPAAEXnAYOWAcBUyB8jHJYMhQDAVMh9SAEAASsAAByWIRaWGS6EJsAAo+nAAFQFAgACFpZJgJY9wFTH6IJXwACFshaWZxaWUi7AAFP+wACj5MAAo/i1or5pAMAAe/uFAMBUyH0BYAPAAEXnPgE9jJaIwFTIWByWji7AAGd2AQABgZaYwFTH9gDAAKP9PRyW6haW3i7AAFQ7wACj54C/AgACFpb3gJbrwFTH6IJXwACFsoSXAsBUyFgAwAD9gj0cl7KAl6bAVMfowABWuAEAATSXxwOXx5tiAAAAAgICl84AAACWWmADvXUAl+AAAACbfWADvU4AAGADwAD9oQE+BE6YUZhXAADAAGd3YAPAAGvUASaYUQGFmFnAVMlgYAPAAGvUTphqmHYAAMAAZ3hgA8AA+tEBFph+h5h4wFTJg8AATJrAAGvYQCEcmKsUmJ/AVMmmCABIAQABKwDAAP3xmJ+YsgBJmLsiFJi/wFTJpggAACGCmM/AVMgFPgNOmrmaxQAAuUZgA8AARecBHJrHLsAARKQBAAGFmtHAVMlgAMAApAY9HJrgLsAAZ3QCAAKFmvDAVMlghpr2wFTJbADAAKP8PRybAy7AAFRUAgAChZsPwFTJYBSbFcBUyf8JAADAAKQKPgE9HJs6LsAAZ3QCAAKFm0rAVMlghptQwFTJbADAAKP8AMAAhacGwACj/4HBm+6b857FAADAAGd5AAAAAQOcA57FAAAAAwMDnAoAAADAAGd6YAO9dQCcIgAAAMAAZ3tdA8AA/TsBYAO9dQCcTgAAAKWkYAPAAEJLAABcAT4ETpzPnNYAAMAAZ3xgA8AARecBHJzYLsAARKQBAAGAnOLAVMqtAMAApAZOnQCdBwAAwABnfWADwABF5wEcnQkuwABndgEAAYKdE8BUytAAwACj/UadK51bnTYAAADAAGd+YAO9dQCBnUfAVMq7PgQ9HJ3sLsAAVFQCAAKAnfjAVMqtg54EwFTK5ADAAKQKTp4gnikAAMAAZ39gA8AARecBHJ4rLsAARKQBAAGFnjXAVMs6AMAApAY9HJ5LLsAAVFQCAAKAnlfAVMqthJ5jwFTLDQDAAKQKPRyeci7AAFRUAgAChZ5+wFTLOoaejcBUy3EAwACkCj0cnqIuwABUVAIAAoCersBUyq2EnrrAVMsNAMAApAoGwACkAIHBnzufQLElAADAAEYXAAAAAQOfTbElAAAABwYGn2IAAACWUmADvTwAn3sAAADAAFRtYAPAAIWhAJ+aAAAAwABUTWADwACFrQCfxQAAAJq7XQPAAP1tAmADvXVgA75RAJ/iAAAAwABT910DwAD+LwFgA711AKAMAAAApaRgA8AAQksAAaArAAAAwABUk2ADwAD60QFqAGADwAD9oXlcAT4IPRegVC7AAFRtgaBgwFTMJMAAo+o9HKB7g6BwwFTMRIP9AQABNKCDA6CDonUAAAACAgKgigAAAJ8HYAO9dQCgnwAAALZOYAO+UQAAYAPAAP2hAT4ESaCxhqC1wFTMfz4BSaDcHKDqgqDgwFTMNMAAVIABAAGHoPrAVMzOAMAAhag+AUqhhgA/P06hs6G9AACA7WADwABF5wEcoccWob8uhCbAAKPpwABUBQMAAoeh1MBUzM4UodvAVMzaCAABwABI4ByiCoSh+cBUzFuDHAEAAYeiE8BUzM4AwAD+O8AAe/s9HKI0FqIqFqIiLoQmwACj6Zq7wAB7X4C/AgACh6I1wFTMzhSiPsBUzSUJAADAAP2CPRyiWxaiTy7AAFQ7wACj54C/AgACh6JcwFTMzhSiZcBUzSUJAADAAP2CAMAA/Yw9F6KEFqJ8LoQmwACj6cAAU/eEopfAVMxbwAB7YD0coq4uhwsDAAKCornAVMw0haLEwFTMcAHAAFYEhqL9wFTMf8AAo/5Jo9giJaPmgaPcwFTMJGADwACFvQAWpBAUpAbAVMwkAQFgA8AAhb21EcAAhcc+Bk6kPaRJAADAAFe7YAPAAIW9ARSkS8BUzCQBAWADwACFvT0cpSeHpRvAVM5RwABPlAEAATSlOwOlO6WEAAAAAgICpUIAAACWWmADvXUApVQAAACbfWADvU4AAGADwAD9oQE+AT0cpWIuwABndAIAAhSlcsBUzpEIABSleMBUzp0JAADAAKP8AMAAhctOpdal5gAAuUhgA8AASOcBH6X2wABI8gIAAiamCAEWpgiHpfzAVM5RunDAAIWqYAPAAIXZFqYoFqYTLsAAU/7AAKPkwACj+LWivmkAPRemShamRBamPC6EJsAAo+mkYcAAezi5SBSmXMBUztwIAMAARQc9HKaHFqaBFqZ7FqZzLoQmwACj6aRhwAB7OIPUwABFBbmaAQABFKaSwFTO3AgAAMAARc49HKaqLsAAVFQCAAIWpsKHprbAVM5RwABWx8AAhcEUptHAVM7cCAAAwACkCkmm7ham+oCm8sBUzBiFDb1BPgROp8mn2QAAuUhgA8AASOcBH6ffwABI8gIAAian7wEWp++Bp+XAVMwkunDAAIWqYAPAAIXZHKf6LsAAZ4AAAAAAwACkEgA9F6ggFqgaFqgSLoQmwACj6aRhwAB7OLlIh6gywFTPwMAARQc9HKhdFqhXFqhRFqhJLoQmwACj6aRhwAB7OIPUwABFBbmaAQABh6howFTPwADAAEXOPRyojBaogC7AAFQ7wACj54C/AgACFqiXgaiNwFTMJLpwwACFqoeopMBUz8AAwAD9gj9OqZOplwAAmfpgA70qARapoYCpmcBUzBiFCr1KTqryqwkAAMAAZ4FgA8AA+tEBIiIlqxOAqwvAVMwYYAO9aQAWqzsUqzPAVMwYAAFgA71ps8S9awAcq2oWq14uwABIUsAAo+TAAKPwwABIiwEAAYergsBU0IwAwABqwkmrjByroRarkC7AAFOtwACj5MAAo/HAAFOTAQABgKu1wFTMGADAAHqGPghOq8yr3wAAunFgA8AA+tEBHKvyFqvhLsAAU63AAKPkwACj8bpxAQABh6wFwFTQjADAAHqFTqwYrB0AAIC9YAPAAP5+ASMUrB/AVNExCQAnhY8ngLUBYAPAAP5+TqxbrGUAAIDtYAPAAKQYARysZy7AAFSoAQABFKxzwFTRZQoAAMAApBROrJCslgAAgJZgA8AASOABH6ycwABI5gIAAhSsrMBU0YwLABysty7AAGeAAAAAAMAApBIAPRes3Ras1xaszy6EJsAAo+mkYcAAezi5SxSs+cBU0bUMAMAARQo9HK0aFq0UFq0OFq0GLoQmwACj6aRhwAB7OIPUwABFBbmZAgACHK0vFq0jLsAAVDvAAKPnSwEAARatOoGtMMBUzCS6cMAAhaoAwAD9gRStRsBU0bUMAADAAEXUSa1UHK1zFq1gFq1YLoQmwACj6cAAU/bAAHteSAEAASsAwAD98T4BPRet3Bat1C6EJsAAo+nAAFP2FK3xwFTRtQwAwAB7Xj9JrgYUrgrAVNExCQA+AT0crnQWrmguwABUO8AAo+eAvwIAAhauf4GudcBUzCS6cMAAhaoUrozAVNG1DAAAwAD9gj9JrqYUrqrAVNCoCAA+BU6u2a7jAACA7WADwACkGAEcruUuwABUqAEAASeFjwDAAKQUTq+Zr58AAICWYAPAAEjgAR+vpcAASOYCAAIUr8DAVNMBCQAcr+wWr9gWr8sutiPAAKPkwACj97EqwABNpbWzAQABh7AAwFTQjAC+egA9F7AbFrAVFrANLoQmwACj6aRhwAB7OLlLFLA3wFTTJAoAwABFCj0csFgWsFIWsEwWsEQuhCbAAKPppGHAAHs4g9TAAEUFuZoBAAEUsGPAVNMkCgAAwABFzkmwcRywkBawfRawdS6EJsAAo+nAAFP2wAB7XkgBAAErAMAA/fE+AT0XsPkWsPEuhCbAAKPpwABT9hSxDsBU0yQKAMAAe14/PwbAAKQBgcGxx7HMsnIAAMAAZ4IAAAABA7HesnIAAAABAQGx5QAAAJ8HYAO9dQAAYAPAAPrRAT4CQCEcsf+AsfnAVNQzSAEAASsAwAD98bH5sgYASrINASIhHLIoFrIVLsAAZ2/AAKPoh1gBAAGAsjTAVNQzAMAA/YAAIRyyURayRy7AAFRtwACj6sAAVrkBAAGAsmjAVNQzAMAAhaYGwACkAoHBsneyfLPFAADAAGd1AAAAAQOykrPFAAAAAQEBspkAAACfB2ADvXUAAGADwAD60QE+BkAhHLKzgLKtwFTU0EgBAAErAMAA/fGyrbK6AEmywRyyxS7AAGeCAQABgLLYwFTU0ADAAKQBSrLgASo/SbLyISWzABay9i7AAFRtwACj6mADwACFvUqzHwEqP06zPbNMAADAAGeDYAO9TgEcs2AWs04uwABnb8AAo+hLAQABgLNhwFTU0ADAAP2BSbNtHLOAgbNxwFTVQUgBAAErAMAA/fFKs4kBKj9Ks5sBJbOxgbOiwFTVQWADwAB9hgbAAKQDgcGzyrPPtIAAAMAAVEwAAAABA7PWtIAAAAABAQGz3QAAAJ8HYAO9dQAAYAPAAPrRAT4DSbPqHLPuLsAAZ4IBAAGAtAHAVNXCAMAApAFKtAkBKj9JtBsctB8uwABndQEAAYC0NsBU1cIAwACkAkq0PgEqP0q0UAEctGoWtFcuwABnb8AAo+iHWAEAAYC0dsBU1cIAwAD9gAbAAKQFgcG0hbSKtOcAAMAAZ4TAAKPkAAAAAQO0obTnAAAAAQEBtKgAAACfB2ADvXUAAGADwAD60QE+AUq0tQEctMYWtLwuwABUbcAAo+rAAFa5AQABgLTdwFTWYgDAAIWmBsAApAaBwbWUtaG+ogAAwABEpAAAAAEDtaq+ogAAAAIBAbWxAAAAnwdgA711AAG1ywAAAKWkYAPAAEJLAWoAYAPAAP2heWADwABF5wE+AUm15Ry16S7AAGeCAQABgLX8wFTWwADAAKQBPgRJtgwctiQcthwWthAuwABUO8AAo+dLAQABgLYdwFTWwADAAP2BSAEAASsAwAD98T4BSbY3JbZBgLY7wFTWwGADwACF4z4BPR62Y7YfAgACarZ7YAO2McAAxmkkAAgnwABnhRS20cBU1sAAAWADwACF4yeA2SeBoRa2+ha27S7AAFQ7wACj54NowAD9jye+pxa3BS7AAEz5wACj7CeBagA+AT0etza2HwIAAoC3TsBU1sAkAAcnwABnhoC3d8BU1sAngZ4Wt48Wt4IuwABUO8AAo+eDaMAA/Y8nvqcWt6suwABM+cAAo+wngWoAP0635rfsAACAlmADwABF5wEct/oWt+4uwABUO8AAo+dLAQABgLf7wFTWwADAAP2BSbgJIRy4H4G4DcBU1s1IAQABKwDAAP3xPgI9irgywFTX9h+4PsAARpQCAAKCuEPAVNf2gbhKwFTWzQA9HLhuFrhmLoQmwACj6VYBAAGCuHLAVNf2AMAAe/o/SriIAYK4j8BU1/ZJuKEcuKUuwABndQEAAYC4vMBU1sAAwACkAj4HTrjmuPIAAMAAV7tgA8AAhb0BJrjmARa49C7AAFRtwACj6mADwACFvU65EbkaAADAAEBVYAO9TgEcuS4WuRwuwABnb8AAo+hLAQABgLkvwFTWwADAAP2BTrlKuVMAAIWPYAPAAEXnARy5VS7AAESkAQABFrlrgrlfwFTYpsAAVsfAAIXBAMAApAZOuY+5lAAAgpRgA75RASMluZyAuZbAVNbAYAPAAIXOFrnJFrm0LsAAU/7AAKPkwACj+LWivmkcueEuwABnhwEAAYO5+8BU2M4AwACkEwFgA75RTroZuiIAAMAAS15gA8AARecBH7oywABHYQQABIO6PMBU2M6EukbAVNj9hbpQwFTZL4G6VsBU1s0APRy6eBa6cC6EJsAAo+lWAQABhrp8wFTZgQDAAHv6SrqNAYa6lMBU2YFJuqkcuq0uwABUTAEAAYC6tcBU1sAAwACkAz4ITrrRutoAAMAAQFVgA71OARy67ha63C7AAGdvwACj6EsBAAGAuu/AVNbAAMAA/YFOuwYAAADAAGeIYAPAAIXOAEm8LyW8PIK8M8BU2f9gA8AAfbM+AT2LvFfAVNouFrxrFLxiwFTZ/wIBYAPAAH2zwABJV8AAfbY/QCEcvI6DvIXAVNouSAEAASsAwACF1byFvJUATrysvLAAAMAASVdgA8AARecBHLyyLsAARKQBAAGDvLzAVNouAMAApAZOvNq84QAAlyhgA8AARecBH7znwABHYQQABIK88cBU2f+EvPvAVNqSHL0KLsAAZ4cBAAGCvSTAVNn/AMAApBOBvS/AVNbNAD0cvVEWvUkuhCbAAKPpVgEAAYW9VcBU2rsAwAB7+kq9ZAGFvWvAVNq7PgVAHL2NLsAAZ4TAAKPkAQABgL2lwFTWwADAAKQFvY29qwBOvcC9ywAAwABniWADwABI2gEcvc0uwABnigEAAYC91sBU1sAAwACkCE698b39AAC5RmADwABF5wEfvgPAAEemBAAEgL4NwFTWwIK+FMBU204Wvj8WviouwABT/sAAo+TAAKP4nqW+XoG+TMBU1s0APRy+bha+Zi6EJsAAo+lWAQABg75ywFTbdwDAAHv6Sr6GAYO+jcBU23cGwACkB4HBvqe+tL+3AADAAFQtAAAAAQO+vL+3AAAAAQAAAb7QAAAApaRgA8AAQksBagBgA8AA/aF5YAPAAEXnAT4DTr73vvsAAKAyYAPAAEXnARy/BS7AAESkAgABFr8ZFr8PLsAAVG3AAKPqunDAAIWqAaWkgL83wFTcCcAApAZJv08cv2cWv1eBv1PAVNwquenAAEYnSAEAASsAwAD98T4BPRe/fIG/eMBU3Cq56Ry/ji7AAGeAAAAAAMAApBLAAEYnP0q/qQGBv7DAVNwqBsAApAiBwb+8v8jAAEKdAADAAGeKAAAAAQO/0MAAQp0AAAACAQG/1wAAAJ8HYAO9dQABv/EAAAClpGADwABCSwFqAGADwAD9oXlgA8AASNoBPgJJwABBHxzAAEE2FsAAQSsWwABBIy6EJsAAo+mau8AAe1+HWAEAAYDAAEFCwFTc3ADAAP2APgFKwABBUgEmwABBUgEcwABBaxbAAEFhFsAAQVkuhCbAAKPpmrvAAHtfSwEAAYDAAEFswFTc3ADAAP2BYAPAAEjaP0rAAEF/ARzAAEGaFsAAQYYuwABnc8AAo/SZSgIAAoDAAEGmwFTc3DTAAEGtA8AAQa3AAEKYAAAAAAAAAGADwABI2gE+A07AAEHEwABBzwAAwABniWADwABI2gE1wABB3wAAAQBgA8AASNoBH8AAQd/AAEjfAgACgMAAQevAVNzcFsAAQgcWwABB8i7AAFP+wACj5MAAo/i1or5pADUAAAABAFsBF8AAQiKCwABCIMBU3dylpIHAAEI2wFTc6cAAReqCAMBU3dw9HMAAQmMWwABCXRbAAEJXFsAAQk8uhCbAAKPppGHAAHs4g9TAAEUFuVUBAAGCwABCbcBU3cYAwABFz0rAAEKAAYLAAEKHwFTdxgDAAP2IBsAApAmBwcAAQqLAAEKowABDQQAAwABUOgAAAAEDwABCvsAAQ0EAAAABAQHAAELQAAAAgpRgA8AAYykAAGADvXUBPgFKwABC3AEcwABC9hbAAELjLsAAZ3DAAKPrmUoCAAKAwABDAsBU3sI0wABDCAPAAEMIwABDPAAAAAAAAABgA8AAheMBPgFKwABDEwEfwABDHsAAhe0BAAGAwABDMMBU3sIAAMAA/YgGwACkCoHBwABD0cAAQ9bAAEjQAADAAFRUAAAAAQPAAEPhwABI0AAAAAMCAsAAQ+gAAACfB2ADvXUAwABD/AAAAICWYAPAAEXnAAHAAEQcAAAApaRgA8AAQksBagBgA8AA/aF5XAE+A0nAAEQ2JcAARECBwABEOsBU33pgA8AARow+Ak7AAERWwABEWgAAl+lgA8AARowBJsAARFYBgcAARFzAVN96YAPAAEaMPYnAAERpwFTfehbAAER1g8AARHHAVN/EgJbAAEaOP0AhHMAARI4uwABndQEAAYDAAESlwFTfbADAAKQCwABEjcAARKsBJMAAROEDJ8AAZ4uAwABEvcBU32wnwABnjEnAAEToHMAAROwuwABnggEAAYDAAET/wFTfbADAAKQBPgE9HMAARRsWwABFDy7AAFQ7wACj54C/AgACgMAARRzAVN9sgcAARSXAVN96AMAA/YJJwABFNxzAAEU7LsAAVEwBAAGAwABFQ8BU32wAwACkAz4HTsAARV/AAEVoAADAAEBVYAO9TgEcwABFfBbAAEVqLsAAZ2/AAKPoSwEAAYDAAEV9wFTfbADAAP2BQCEcwABFm4PAAEWSwFTgv0gBAAErAMAA/fHAAEWSwABFogBOwABFtAAAAMAAZ4hgA8AAhc4AScAARcQlwABF0YPAAEXIwFTgv2ADwAB9sz4BPYzAAEXswFThGxbAAEYAFMAARffAVOC/AwFgA8AAfbPAAElXwAB9tj9AIRzAAEYjhMAARhrAVOEbSAEAASsAwACF1cAARhrAAEYqAE7AAEdCwABHRgAAwABJV2ADwABF5wEcwABHSC7AAESkAQABhMAAR1LAVOEbAMAApAY9HMAAR2sWwABHYy6EJsAAo+lWAQABNcAAR3MAAAEAYAPAAEdiAR/AAEdzwABHbQQABBbAAEd9LsAAU/7AAKPkwACj+IPAAEeTwFTgv4XAAEedwFThlYHAAEeiwFTfegA1AAAAAQBbARfAAEezhsAAR7HAVOHcpaSCwABHx8BU34vAAEXqhgDAVOHcAMAAe/o+A0AcwABH9S7AAGeEwACj5AEAAYDAAEgNwFTfbADAAKQFwABH9cAASBMATsAASCjAAEgzAADAAGeJYAPAAEjaARzAAEg1LsAAZ4oBAAGAwABIPsBU32wAwACkCD0cwABIVBbAAEhMLoQmwACj6VYBAAE1wABIXAAAAQBgA8AAR6cBH8AASFzAAEevBAAEFsAASGYuwABT/sAAo+TAAKP4gMAASHzAVN9sg8AASIPAVOKBgcAASI/AVN96ADUAAAABAFsBF8AASKCEwABInsBU4silpILAAEi0wFTfi8AAReqEAMBU4sgAwAB7+gbAAKQLgcHAAFEgwABRJcAAUtEAAMAAVMEAAAABA8AAUS7AAFLRAAAAAgICwABRSAAAAMAAVMRgA8AAhbUAwABRZAAAAKWkYAPAAEJLAABcAT4BScAAUX0WwABRioDAAFGBwFTjbcAAVsPAAIW5PgE9HMAAUqAuhwsCAAKAwABSq8BU422BwABStcBU438AwACj/j8GwACkDIHBwABTa8AAU3DAAFZpAADAAFTDAAAAAQPAAFN/wABWaQAAAAEBAcAAU4wAAADAAGeNYAPAAEWwAABcAT4CTsAAU/7AAFQQAADAAGeOXQPAAP1tAmADvXVgA8AARecBHsAAVB7AAMGfAQJgA711YAPAAEXnARbAAFQ8LsAAVDvAAKPnAD0cwABUpoHAAFSUwFTkGYP9AQABNMAAVK4DwABUrsAAVmQAAAACAgLAAFS1AAAAnwdgA711AMAAVMkAAAC5RmADwABF5wAAYAPAAP2hAT4BScAAVN4cwABU4i7AAGeCAQABgsAAVPXAVOSGAMAApAE+AUnAAFU1IRzAAFU/gsAAVTnAVOSGSAEAARbAAFVMFsAAVUIuwABUbcAAo+q6cMAAhaoAwAD98T4DTsAAVWjAAFVsAAC5nmADwABI8wEfwABVcsAASQADAAOCwABVksBU5IaDwABVmcBU5JQWwABVuxbAAFWmLsAAU/7AAKPkwACj+J6lvl4APRzAAFXdgMAAVdPAVOQBuZ0BAAGEwABV5MBU5QkAwABF0j0cwABWABbAAFX0LsAAVDvAAKPngL8CAAKCwABWAcBU5IaEwABWCsBU5QkAwAD9gj4BPRzAAFY2FsAAViouwABUO8AAo+eAvwIAAoLAAFY3wFTkhoPAAFZAwFTklADAAP2CPwDAAP2MBsAApA2BwcAAVm7AAFZzwABXwgAAwABUyAAAAAEDwABWgMAAV8IAAAACAgLAAFaaAAAAwABUxGADwACFtQDAAFa2AAAApaRgA8AAQksAAFwBPgFJwABXZCEWwABXcoDAAFdpwFTmDMAAVsPAAIW5PgE9HMAAV5EuhwsCAAKAwABXnMBU5gyBwABXpsBU5h4AwACj/j8GwACkDoHBwABXx8AAV8zAAFnTAADAAGePAAAAAQPAAFfcwABZ0wAAAAICAsAAV/YAAADAAFTEYAPAAIW1AMAAWBIAAAClpGADwABCSwAAXAE+AUnAAFlAFsAAWU2AwABZRMBU5qHAAFbDwACFuT4BPRzAAFlsLsAAZ3kDAAMWwABZkYDAAFmIwFTmoYJXwACFshbAAFmjgMAAWZrAVOahwABWwsAAhbqBwABZt8BU5rMAwACj/z8GwACkD4HBwABac8AAWnjAAFvcAADAAFTXAAAAAQPAAFp/wABb3AAAAAEBAcAAWowAAADAAGeNYAPAAEWwAABcAT4CScAAWuwcwABbDhbAAFsHFsAAWvqAwABa8MBU51i5YMAARbxhwAD9a0gBAAGUAMAA/btKwABbFAA/PRzAAFsqgMAAWyDAVOdYubEBAAE0wABbNQPAAFs1wABb1wAAAAEBAcAAWzsAAAC5nmADwABI8wAAYAPAAP2hAT4DTsAAW07AAFtWAACWUmADvXUBJsAAW04BFsAAW1yBwABbWMBU59Clo8AARelgA711TsAAW37AAFuRAADAAGeQYAPAAEXnARzAAFufFsAAW5MuwABUO8AAo+dLAQABgsAAW6DAVOfrAMAA/YE9HMAAW7SBwABbsMBU59C62AEAAYPAAFu9wFToGwDAAEj6AMAARd8GwACkEIHBwABc2sAAXN/AAGGYAADAAGeRAAAAAQPAAFzowABhmAAAAAICAsAAXPcAAADAAGeSYAPAAKPlAMAAXRAAAAC6tWADwABFsAAAXAE+A07AAF5twABeegAAwABnk10DwAD9bQJgA711YAPAAEXnAR7AAF6AwAD9dAACYAO9dWADwABF5wAAPRzAAF65FsAAXqyAwABeoMBU6KjAAFQ7wACj54P9AQABNMAAXsEDwABewcAAYXIAAAACAgLAAF7IAAAAnwdgA711AMAAXtwAAAC5RmADwABF5wAAYAPAAP2hAT4BScAAXx0cwABfJ4PAAF8hwFTpPEgBAAEWwABfNBbAAF8qLsAAVG3AAKPqunDAAIWqAMAA/fE+AkAcwABfZBzAAF9cFsAAX1AuwABUO8AAo+dLAQABg8AAX13AVOk8AMAA/YFIAQABhMAAX2fAVOlKAMAA/fHAAF9QwABfcgA9HMAAX4mCwABffcBU6NCAvwIAAoPAAF+KwFTpPITAAF+TwFTpSgDAAP2CPgNOwABfxMAAX8kAAMAAZ5RgA8AARecBHMAAX9cWwABfyy7AAFQ7wACj50sBAAGDwABf2MBU6TwAwAD9gUnAAF/oHMAAX/GFwABf7MBU6g9IAQABKwDAAP3xSsAAX/oAP0nAAGAKHsAAYA7AAPZ4AgAChMAAYBjAVOlKhcAAYCXAVOoPAD4BPRzAAGBEgsAAYDjAVOjQgL8CAAKDwABgRcBU6TyEwABgTsBU6UoAwAD9gj4DTsAAYIPAAGCHAAC5nmADwABF5wEfwABgjcAASQEDAAODwABgrMBU6TwxwABgz2ADwABF5wKFwABg0MBU6g+EwABg1sBU6UoWwABhBxbAAGDyLsAAU/7AAKPkwACj+J6lvl4APRzAAGEpgcAAYR/AVOi6uZ0BAAEmwABhMAGGwABhMMBU6sFgA8AASPMAwABF0j0cwABhTILAAGFAwFTo0IC/AgACg8AAYU3AVOk8hsAAYVbAVOrBAMAA/YIAwAD9jD0XwABheS7AAFQ7gsAAYYjAVOjQwACj5wbAAKQRgcHAAGMbwABjKcAAaZcAAMAAVNAAAAABA8AAYzbAAGmXAAAAAgICwABjUgAAAMAAZ5VdA8AA/TsBYAPAAKPlAMAAY24AAAC6tWADwABFsAAAYAPAAKPlAT4KQBzAAGOcFsAAY5WAwABjhsBU68VhwAD9a4CXAQABkwDAAP3HwABjhsAAY58AScAAY6YcwABjwBbAAGO5gMAAY6rAVOvFYcAA/WtIAQABlADAAP27SsAAY8YBFsAAY9yAwABjzcBU68WAw8AA/SE/TsAAZAHAAGQOAADAAGeTXQPAAP1tAmADvXVgA8AARecBHsAAZBTAAP10AAJgA711YAPAAEXnAABOwABkQcAAZEsAAMAAZ5ZgA8AARecBKz0cwABkZBbAAGRXLsAAVDvAAKPng/0BAAE0wABkbAPAAGRswABmVgAAAAICAsAAZHMAAACfB2ADvXUAwABkhwAAALlGYAPAAEXnAABgA8AA/aEBPgFJwABknCEcwABkpoTAAGSgwFTs40gBAAEWwABksxbAAGSpLsAAVG3AAKPqunDAAIWqAMAA/fE+A07AAGTNwABk0QAAuZ5gA8AASPMBH8AAZNfAAEj/AgAChMAAZOXAVOzjFsAAZQEWwABk7C7AAFP+wACj5MAAo/iepb5eAD0cwABlI4LAAGUXwFTsaIC/AgAChMAAZSTAVOzjhsAAZS3AVO1EAMAA/YI9HMAAZUSBwABlOsBU6965nQEAAYbAAGVLwFTtRADAAEXSPgE9i8AAZjDAVOyghcAAZjzAVOzxAMAA/YxGwABmXcAAZovAAGZwAAAAVWADwACj5QCAwABme8BU68U+AT0cwABmqBbAAGabhMAAZpPAVO34wABUO8AAo+eD/QEAATTAAGawA8AAZrDAAGdTAAAAAgICwABmtwAAAJ8HYAO9dQDAAGbLAAAAuUZgA8AARecAAGADwAD9oQE+Ak7AAGbnwABm6wAAuZ5gA8AASPMBJsAAZucBHMAAZvmCwABm7cBU7GhLAQABhcAAZvrAVO5HAMAA/YFgA8AASPNJwABnCiEcwABnEofAAGcOwFTucEgBAAErAMAA/fE+AT0cwABnK4fAAGcnwFTucLrYAQABhsAAZzTAVO5VAMAASPo/AMAA/YxJwABnYCEcwABnboPAAGdkwFTsoEgBAAErAMAA/fE+AT0cwABn04LAAGfHwFTsaIC/AgACFsAAZ94WwABn1C7AAFRtwACj6rpwwACFqoPAAGfrwFTsoADAAP2CPz0XwABoNC7AAFQ7HsAAaEfAAP10AAJgA711YAPAAEXnAADAAKPnPRzAAGh0gsAAaGfAVOxog/0BAAE0wABofAPAAGh8wABpgQAAAAICAsAAaIMAAACfB2ADvXUAwABolwAAALlGYAPAAEXnAABgA8AA/aEBPgFJwABorCIhHMAAaLaEwABosMBU76FIAQABFsAAaMMWwABouS7AAFRtwACj6rpwwACFqgDAAP3xACEcwABo9BbAAGjtFsAAaOaFwABo2sBU76+CVcAARe1hwAD9a0gBAAEWwABpBoDAAGj3wFTrxWHAAP1rAMAA/bs+AT0cwABpIoHAAGkYwFTr3rmfAQABJsAAaSwBhcAAaSzAVO+vYAPAAEjzAMAARdM+AT0cwABpXRbAAGlRLsAAVDvAAKPngL8CAAKEwABpXsBU76GFwABpZ8BU768AwAD9ggDAAP2MSsAAaYgBLgbAAKQSgcHAAGm/wABpzcAAbIsAAMAAZ4AAAAABA8AAadrAAGyLAAAAAAAAAGADvlEBPgNOwABp8cAAafgAAIF2YAO+UQEWwABp+i7AAGdxwACj8knAAGoQHMAAahuAwABqFMBU8ORIAQABKwDAAP3xPgROwABqNsAAajwAAJ8HYAPAAIXZASbAAGo2ARbAAGpIFsAAaj4uwABUbcAAo+q6cMAAhapgA8AAhdlOwABqZcAAamkAAJn6YAO9KgEWwABqcYHAAGprwFTxI4UKwACF20nAAGqHHMAAapgWwABqiy62I8AAo+TAAKP3m0gBAAGCwABqpsBU8VwAwABNtj4BPYjAAGu9wFTw5BzAAGvbFsAAa8YuwABT/sAAo+TAAKP4tbUBAAGCwABr8MBU8VwAvnw+AT2IwABsDcBU8OQcwABsKxbAAGwWLsAAU/7AAKPkwACj+LW0AQABgsAAbEHAVPFcAL57PRfAAGxVLsAAZ3GAwABsaMBU8OTAAKPyP0rAAGx6AYDAAGyBwFTw5AbAAKQTgcHAAG0BwABtD8AAbfQAAMAAZ4cAAAABA8AAbSjAAG30AAAAAQEBwABtNQAAAJZSYAO9TgAAYAO+UQE+AUrAAG1EARzAAG1qFsAAbUsuwABncsAAo/OZSgIAAoDAAG12wFTyajTAAG1/A8AAbX/AAG3vAAAAAAAAAGADvlEBPgFKwABtigEewABtpsAAfP8CAAKAwABtx8BU8moWwABt0C60lsAAo+TAAKP5AADAAP2IBsAApBSBwcAAbv7AAG8NwABvcQAAwABUqAAAAAEDwABvGMAAb3EAAAABAQHAAG8gAAAAgL1gA8AA/n4AAGADwACkGAE+AUrAAG8sAR/AAG83wACkIwMAA4DAAG9GwFTzIBbAAG9MLsAATPnAAKPsFsAAb18utBXAAKPtAAAAVMO7AFTD/gBUxEUAVMSIAFTGLwBUxv4AVMfIAFTKiwBUy/YAVNQRAFTUrgBU1aAAVNY8AFTWngBU2+YAVNy2AFTelgBU30AAVONBAFTj1QBU5eAAVOZ1AFTnLABU6HwAVOuZAFTwrwBU8j4AVPL0AFTzcAAAABwCwACkGIHBwABwIcAAcCfAAHHGA8AAZ5cAAAFgAb11AAAFBMAApBqBwcAAcGHAAHBlCYC9AWrAAHBJYAPAAP3kAmADwAD+fgAEwACkG4HBwABwdsAAcIcJwABM+QBgA70WAATAAKQcgcHAAHCewABwqwm0FQBgA708AATAAKQdgcHAAHDnwABxJAmDxgFqwABw0mADwAD95AJgA8AA/JcBG8AAcPLAAKQfHMAAcRYcwABxERrAAHEDwACkH2QBAAGUAMAA/b2qWQEAATceAMAA/LgEwACkH4HBwABxM8AAcUQEwABnmMAAo+QAYAPAAPyXAZMBBcAApCOBwcAAcUnAAHFJwABxjgAAAAPAAHFXwABxjgAAAAMDA8AAcV0AAASAvWADwAD+fgDAAHFoAAAEwABM+WADvRYAwABxgAAABLQVYAO9PAAAYAPAAKQYAT8ECAHAAKQagADAVPUCCAHAAKQbgQDAVPUSCAHAAKQcggDAVPUiCQHAAHFJvXcAAAAAAQbAAKQhgcHAAHGTwABxn8AAccQAACMBasAAcZRgA8AA/eQCAAABA8AAcafAAHHEAAAAAAAAAGADwAD+fgFKwABxrQEkwABxxAMnwABnmRbAAHG+LoC9wACkGieDJgAAVPVrAFT1yAAAAAEAAAGBwQBU9dcAVL9sAFTz6QBU9dUAAAACAFT11wAAAAAAAgTAAKQkAIHCAAAJgNoAAIIugggAgQMAAMAAhYYAAQEBwABaX4E0AADAAIX4AACBVQAAvjYAAIGGAADAAEJHAACBrwAAwAB7KQAAgc0AAMAAo40AAIHpAADAAKPkAACCBwAAwABEjwAAAAAAAwLAAKQlgcKCRoJVr8wHwABnmgAAAWABwAD95AAAAQTAAKQngcKCgYKICYQmAGADwAB7NgABBcAApDKBwoKNgo2CpgAAAAOCmIKmAAAAAQEBgp4AAASEJmADwAB7NgAAYAPAAKQlAT8CCAHAAKQngADAVPa0CQGCjcAA/foAAAAABgbAAKQqgcKCq4LDgwgBAMAAU/7AAKQkAAAAAQOC2IMIAAAAAAAAAGADvlwBSoLhARaC9RaC6RaC4S6EJsAApCelIsAAe1qxKsAATaUGwACkLIHCg/mD/qFNAADAAFSjAAAAAQOECKFNAAAACAgIhBgAAAC/FWADgksAhDYAAADAAFTAYAPAAIW1AIRYAAAAwABUomADwACGAgCEbwAAALe7YQMAXACEkAAAAIXKYQMAYAPAAEXnAISoAAAArJdhAwBcAIS9AAAAgm1hAwBcAITdAAAApaRgA8AAQksAAFwBPho9HIXHFoW5FoWxLoQmwACkJ8AAU+HAAHtTwABUwQIAAoGF0cBU91+HheLAVPe0AMAApAtOhiGGMgAAwABnm2ADwABFmwErToZKAAAAwABnnGADwABFsABJhlohHIZpg4ZewFT3f0gBAAErAMAA/fE+BU6GhoaXAADAAGedYAPAAEWwARyGoRaGmS6EJsAApCfAAFQDAAAAAMAAe/k9FYa3wFT4DgkUhsTAVPg5CgA9HIbmg4bcwFT3fyAAAAAAAEAhHIcAFob4LoQmwACkJ8AAVAIAAAAAwAB7+Ib3hwsAPRWHFMBU9/sIH4crwABFnwIAAhSHOcBU+DkKABaHUxaHSy6EJsAApCdewAB7cQA/PTUAAAABAGADwAB7NgEWh2guhCbAAKQnF4dwFIdwwFT42AoAwABT4hyHeRaHcBSHcMBU+NgKAMAAU+LAAHtVZAEAAZQAwAD9vcAAe1VOh42HmQAAwABUwmADwACjlwEch5suwABUwwIAAiaHqwGAh6vAVPdTYAOCUoKHscBU928AwACkLU6H04fcAADAAFTEYAPAAEppARaH7haH5haH3i6EJsAApCdewAB7cblTwABFuE6ID4geAADAAFTMYAPAAEWwARaIKBaIIC6EJsAApCdewAB7cUmINRyIRBSIOcBU+A4JAEgBAAErAMAA/fE9FYhNwFT4DgkUiFrAVPmJDAA/Toh8iJEAAMAAVNNgA8AARecBHIichIiTwFT3iyAAAAAAAE6IsIjCAADAAFTUYAPAAEWwARyI1RaIxC6EJsAApCeCjAEAAR+I38AASLsCAAIWiOsuwABT/sAApCTAAKQqFIkBwFT52Q0AAADAAHt5TokriT8AALl8YAPAAEWbAR+JTcAARZ8CAAIUiVvAVPmJDAAUiWvAVPn7DgAAToo/iksAAMAAVL9gA8AAo+UBH4pRwACkFwEAARaKbBaKZC6EJsAApCfAAFPhwAB7UwBOip6KrQAAwABnnmADwABFsAEcircWiq8uhCbAAKQnuVAAAAAAwAB7dz0citwUisrAVPn7DgC5ogEAARSK6cBU+qcRAADAAEXXPRyLBhaK/i6EJsAApCelbQEAARSLC8BU+qcRAADAAHt4PRyLNxaLKRaLIS6EJsAApCfAAFPhwAB7U8AAVMgCAAKBi0XAVPdfh4tWwFT3tADAAKQNPRyLcoaLbsBU96ggAAAAAABOi4SLjgAAwABU0WADwABFkwEfi5TAAEWaAgACFIudwFT6pxEAFou1FoutLoQmwACkJ8AAU/TAAHtdAE6L14vhAADAAGXvYAPAAEWwARaL6xaL4y6EJsAApCdewAB7cUmL+CEcjAwWjAQWi/wuhCbAAKQnXsAAe3FIAQABKwDAAP3xPRyMHRaMFS6EJsAApCeCjAEAAR+MJ8AASHoBAAEWjC0uwABT/sAApCTAAKQqAADAAHt5P06MWAAAAMAAZ59gA8AARZsAToxvjIAAAMAAVMtgA8AA+tEBIiEcjI8UjIPAVPkkCgDAAGdjAAAAAMAAo6EAHIytFIyjwFT7kBMASAEAASsAwAD98UmMuiEUjL/AVPwcFQA+Fk6N543zAADAAGegYAPAAEWwARyN/RaN9S6EJsAApCe5UAAAAADAAHt3To4njjgAAMAAVM1dA8AA/TsBYAPAAKPlATGOSWADwACj5QA9HI5qFI5TwFT5JAoAwABUzgEAATSOegOOeo8MAAAAAgICjoUAAAC5RmADwABIiwCOoAAAAMAAVM9gA8AAo+UAAGADwAD9oQE+Aj0cjsQWjr4UjrLAVPzbGACaMsAARe+5ogEAARSO0cBU/G4WAADAAEXXPRyO+BSO58BU/JcXAFYBAAEUjvzAVPzpGQAAwAD9TADAAKOgSY8WIRyPJBSPGsBU+5ATAEgBAAErAMAA/fE+Aj0cj0gUjzfAVPyXFwBWAQABFo9UFo9MLoQmwACkJ8AAU+HAAHtTAMAA/Uw9HI92FI9swFT7kBMAuaIBAAEUj4PAVPxuFgAAwABF1z89HI+oFo+gLoQmwACkJ6VtAQABFI+twFT8bhYAAMAAe3g9F4/JFo/BLoQmwACkJ8AAU+Ecj/ccj/MUj+PAVPyXFwBLAQABkwDAAP1KwABU0AIAAhSQBcBU/JcXABSQF8BU/G4WAADAAKQRwAB7U06QQpBJAACZYF0DwAD9OwFgA8AAhfkBFpBXFJBLwFT5JAoAmWDAAKOlSZBlFpBwFJBpwFT+JxgAg7fAAP0ePgE9HJCVFJCGwFT6pxEAuZQCAAIfkLPAAErPAwACH5DhwABKrQEAARSQ+8BU+1USAAAWkRMUkQfAVPkkCgCZYMAAo6UBu1MpFJFKwFT8bhYAAMAARcpJkWUiIRyRdIKRacBU929IAQABKwDAAP3xABaRioKRf8BU92+jy8AAhgk+AT0ckbUUkabAVPqnEQC5lAIAAh+R08AAStADAAIfkgrAAEqtAQABFJIkwFT7VRIAAIKSMMBU928Bu1MpFJJrwFT8bhYAAMAARco/PRySqRaSkBaSiC6EJsAApCfAAFPhwAB7U8AAZ48CAAKBkrrAVPdfh5LLwFT3tADAAKQOPRyS7IWS5sBU95wgAAAAAABOkwOTEgAAwABnoWADwABFsAEckyYWkx4uhCbAAKQngowBAAEfkzDAAEh6AQABFpM2LsAAU/7AAKQkwACkKgAAwAB7eT0ck5AUk4HAVP91GQC5ogEAARSTncBU+YkMAADAAEXXPRWTtMBU/AsUH5PGwABFnwIAAhST1MBU/G4WABST4cBU/3UZAABOlE6UYQAAwABU1mADwABFsAEclGsWlGMuhCbAAKQnuVAAAAAAwAB7dz0clIgWlIAuhCbAAKQnpW0BAAEUlI3AVP//GgAAwAB7eD0clLAWlKguhCbAAKQngowBAAEflLrAAEh6AQABFpTALsAAU/7AAKQkwACkKgAAwAB7eT0clPAUlN7AVPn7DgC5ogEAARSU/cBU//8aAADAAEXXPRyVGS7AAFTXBAAEFJUhwFT5iQwAFJUxwFT//xoAFJVFwFT5JAoAFJVSwFT6dRAAAMAApC49HJV2FJVnwFT5iQwAuaMAAAAAwABF2E6Vq5WwAACBVGADwABK0QEflbbAAEroCAAIHJXXLsAAZ6IBAAEmleABgJXgwFT3U2ADglIAwACkLxyV+RaV8S6EJsAApCfAAFQHAQABFJYNwFT3+wgAAMAAe/0cljIWliouhCbAAKQnwABUBwEAARSWRsBU+kgPAADAAHv9HJZuFpZmLoQmwACkJ8AAVAYBAAEUloHAVPtVEgAAwAB7/ByWnxaWly6EJsAApCfAAFQHAQABFJazwFT8CxQAAMAAe/0WluoWltoUlsvAVPmJDAC5U8AARbiCScAASm8WlxsWlwsUlvzAVPmJDAC5U8AARbiZYMAASm6Hly3AVPe0AD0cl1MUl0jAVPgOCQC5lAIAAhSXYMBVAOgbABaXbhaXZi6EJsAApCdewAB7cQDAAEXKPReXhxSXfsBU+VwLALs6FJeewFUA6BsAwABKcD4PTpktmTcAALq8YAPAAEWwARyZQRaZOS6EJsAApCe5UAAAAADAAHt3PRyZXhaZVi6EJsAApCelbQEAARSZY8BVAjcWAADAAHt4PRyZfRaZdS6EJsAApCeCjAEAAR+Zh8AASHoBAAEWmY0uwABT/sAApCTAAKQqAADAAHt5PRyaJi7AAFTXBAAEFJouwFT5iQwAFJo+wFUCNxYAFJpJwFT5JAoAFJpWwFT6dRAAAMAApC5OmnSafgAAu11gA8AARZMBH5qEwABFmgIAAhSajcBVAjcWABSamMBVAjcWAAA9F5r2FJrnwFT5iQwAuVMrwABFuE6bdJt+AACFymADwABF5wEcm50Wm5cWm5IUm4DAVPn7DgCB6sAARaOCVcAARe1LAQABkwDAAP1KPRybuhSbqMBU+fsOALlVAQABH5vIwABIsQIAAhabzC7AAFP+wACkJMAApCoUm+LAVQMoGAAAAMAARc89HJwHFJv1wFT5+w4AuaIBAAEUnBTAVQI3FgAAwABF1z0cnDgUnCbAVPn7DgCEXgEAARacURScP8BU+fsOAIHqwABFowDAAEXWTpxynHcAAIFUYAPAAErpAR+cfcAASvQDAAMcnKQWnJwuhCbAAKQnwABUBwEAARScuMBU+kgPAADAAHv9HJzgFpzYLoQmwACkJ8AAVAYBAAEUnPPAVPtVEgAAwAB7/BydERadCS6EJsAApCfAAFQGAQABFJ0kwFUC5xcAAMAAe/wAPRydShSdOMBU+fsOALmUAgACFJ1XwFUD5BkAFp1lFp1dLoQmwACkJ17AAHtxAMAARcpOnXmdgQAAwABftGADwABIpgEmnXkBFp2VFJ2DwFT5+w4AgerAAEWjYAPAAEimPRedqRSdocBVBJcaALq6Fp3OFJ28wFT5+w4AuYvAAEW5wABIqEmeORyeSRSePcBU+SQKAMAAVNkAAAAAwACjoj4FTp5ynngAAJkuYAPAAIX5ARyekYKehsBU92/AAEy6AgABJ78VAaO/KcAAhg1Onsme1AAAwABno2ADwABFkwEfntrAAEWaAgACFJ7jwFT5iQwAFp77Fp7zLoQmwACkJ17AAHtxAE6fJp8wAADAAGekYAPAAErDAR+fNsAASs8CAAIfn2DAAEqtAQABFJ96wFUFMxwAADGfpGADwACF+QEUn6XAVQUHGwAAPRyfxhSft8BU+YkMALmUAgACFJ/TwFUFax0AFp/mFp/eLoQmwACkJ17AAHtxAMAARco9HKAFFJ/5wFT5JAoAwABU2gEAATSgEgOgEqEIAAAAAgICoBoAAADAAFTbYAPAAEiCAKAsAAAAgLVgA8AAo+UAAGADwAD9oQE+A06gR6BNAACaMmADwABFsAEWoGAUoE/AVQYCHgCaMsAARe89HKB3FKBxwFUGKyAAuVUBAAEfoIXAAEiKAwADFqCjLsAAU/7AAKQkwACkKhSgucBVBQcbAIegwMBU97QAAMAARc89HKDlFKDfwFUGKyAAhF4BAAEUoOzAVQYCHgAAwABF1gDAAKOfPz0coSkUoR3AVPkkCgCCjAAAAADAAKOjPTUAAAABAGADwAB7NgEWoTYuhCbAAKQnF6E+FKE+wFUGzRYAwABT4hyhRxahPhShPsBVBs0WAMAAU+LAAHtVgY0BAAGUAMAA/b7AAHtVBsAApC2BwqIioi6kRAAAwABUwwAAAAEDoj2kRAAAAAICAqJKAAAAg/NgA4JSAKJbAAAAwABUomADwACGAgAAYAPAAKOXAT4IQCEcon0WonUuhCbAAKQnwABUAgAAAADAAHv4onSiiABOopuiqQAAwABnpWADwABFsAEcorMWoqsuhCbAAKQngowBAAEfor3AAEh6AQABFqLDLsAAU/7AAKQkwACkKgAAwAB7eU6i7KL4AADAAFTCYAPAAKOXARyjAi7AAFTmAwACgKMUwFUHO4GjGsBVB0cBwABU5ynAAKQwTqNJo1MAAMAAZ41gA8AARbABHKNsFqNdFqNVLoQmwACkJ6RhwAB7OLlSAgACFqOOg6OCwFUHxoJJwACjmRajooOjlsBVB8aZYMAAo6UAwABFFD0co72Co6/AVQeCuaIBAAGEo8rAVQf7AMAARdc9HKPiFqPaLoQmwACkJ6VtAQABhKPnwFUH+wDAAHt4PRykDhakABaj+C6EJsAApCfAAFPhwAB7U8AAVMMBAAGEpB7AVQf7AMAApAxKpC4Bg6Q1wFUHxgbAAKQugcKm/qcDrSMAAMAAVNcAAAABA6cKrSMAAAAEBASnFwAAAMAAZ41gA8AARbAApy4AAADAAGemYAPAAEWwAKdRAAAAwABUwmADwACjlwCnbAAAAMAAVL9gA8AAo+UAAFwBPgdOp4unmQAAwABnp2ADwABFsAEcp6MWp5suhCbAAKQnuVAAAAAAwAB7d06ny6fZAADAAFTrXQPAAP07AWADwACj5QExp+pgA8AAo+UAPRyoQYKoNcBVCQDAAFTaAQABNKhOA6hOqOAAAAACAgKoVgAAAMAAVNtgA8AASIIAqHYAAADAAFTPYAPAAKPlAABgA8AA/aEBPgI9HKidFqiXhqiGwFUJkZoywABF77miAQABhKiqwFUJJgDAAEXXPRyozoWowMBVCU9WAQABh6jSwFUJoQDAAP1MAMAAo59JqeUhHKn5ganpwFUI8EgBAAErAMAA/fE+AT0cqhqBqgrAVQjwuaIBAAGEqifAVQkmAMAARdc/PRyqoxaqlRaqjS6EJsAApCfAAFPhwAB7U8AAVNcBAAGAqqvAVQjgAMAApA89HKr1FqrtLoQmwACkJ6VtAQABhKr6wFUJJgDAAHt4SateIRarcYWrY8BVCU+BVcAA/R0+AkmrgiEcq5aBq4bAVQjwSAEAASsAwAD98T4BPRysaIWsWsBVCU9WAQABg6xswFUJEADAAP1MPz0XrJAWrIguhCbAAKQnwABT4RystoOsqsBVCRDAAFTQAgAChazEwFUJT4Ss08BVCSYAwACkEcAAe1M+AT0XrP4WrPYuhCbAAKQnwABT4YOtDsBVCRDAAHtTBsAApC+Bwq2srbCtygACwABnogAAAAEDrbitygAAAAEBAa3FAAAAg/NgA4JSAABgA8AA/JcABsAApDCBwq9rr3evygACwABU5gAAAAEDr4ivygAAAAMCAq+VAAAAg/NgA4JSAK+mAAAAwABUomADwACGAgABr74AAADAAFTnYAPAAPrRAWoAYAPAAP2heWADwACjlwAAAFT25QBU9zEAVQcZAFUIvgBVCycAVQtdAFULvAAAAAYCwACkM4HCsGuwcbJVA8AAZ6gAAAFgAcAApCUAAAEEwACkNYHCsMOwygmEJgFqsJxgA8AA/eQCYAPAAHs2AAEFwACkOoHCsM+wz7E2AAAAA7DgsTYAAAABAQGw9wAAAIQmYAPAAHs2AABgA8AApDMBPwIIAMAApDWAsRfAVQw3CQCxKMAApDIBAAGAsS7AVQw3AAIGwACkN4HCsTuxU7H3AADAAFTmAWqxPGADwAD95AIAAAEDsWSx9wAAAAMCArFxAAAAg/NgA4JSALGCAAAAwABUomADwACGAgABsZ4AAADAAFTnYAPAAPrRAWoAYAPAAP2heWADwACjlwFKsbQBHLG8FrG0LoQmwACkNcAAVOYDAAKAsc7AVQycgbHUwFUMqAHAAFTngrHswFUMucAAfA8GwACkOIHCsfyyDLJTAADAAGeiAWqx/WADwAD95AIAAAEDshSyUwAAAAEBAbIhAAAAg/NgA4JSAABgA8AA/JcBSrIqASayKgEcsi+AsirAVQ07hFIBAAEfsjrAAKREAAAAAACCW2ADwAD8lwAAVQxwAFUNDwBVDXoAAAACAsAApDuBwrJYsl608APAAGepAAABXQGaIQFgA8AA/JcAAAABBcAApEQAAAAABAAAAwAAAAAAAAAAAGADwACkOwE/AQkBAJpXAAAAAAYGwACkPYHCspGyobLeAACYAgFqspJgA8AA/eQCAAABA7Ksst4AAAABAQGytQAAAIPzYAOCSwAAYAPAAPyXAUqyvgFqstRgA8AA/JeBngbAAKQ+gcKy47Lzs0gAAIY2AWqy5GADwAD95AIAAAEDswazSAAAAAEBAbMZAAAAg/NgA4feAABgA8AA/JcBSrMoAWqzPmADwAD8lwkGwACkP4HCs02zXbOmAACGPAFqs05gA8AA/eQCAAABA7Nus6YAAAABAQGzfwAAAIPzYAOH9AAAYAPAAPyXAUqziAFqs55gA8AA/JcVBsAApECBwrOrs7u0DQAAhjgBarOsYAPAAP3kAgAAAQOzy7QNAAAAAQEBs9sAAACD82ADh+kAAGADwAD8lwFKs+oBarQAYAPAAPyXIQbAAKRBgcK0ErQitHgAAIZAAWq0E2ADwAD95AIAAAEDtDW0eAAAAAEBAbRIAAAAg/NgA4gBAABgA8AA/JcBSrRXAWq0bWADwAD8l1MGwACkQoHCtH20jbTuAACGQwFqtH5gA8AA/eQCAAABA7ShtO4AAAABAQG0tQAAAIPzYAOIDwAAYAPAAPyXAUq0xAFqtNpgA8AA/JeBVwAAVQ3YAFUOJQBVDnEAVQ69AFUPCQBVD1UAVQ+iAAAABgAAAYHCAFUPxQBU9mQAVQvdAFUNiwBVD8MAAAADAFUPxQAAAAAAAgTAAKRFAIHDAAAGgNoAAKSLAACA8wAAvjYAAIEkAADAAEJHAACBTQAAwAB7KQAAgWsAAMAAo+QAAIGJAADAAESPAAAAAAACAsAApEaBw4GfgaWCfQPAAGeqAAABYAHAAP3kAAAFBMAApEiBw4HKgdcJwABU3ABgA8AApE8ABMAApEmBw4HtgfIJmjIAYAPAAEWwAATAAKRKgcOCBIIPGMAAZ6sAYAPAAKPlASsEwACkS4HDgiGCKxjAAGesAGADwACj5QErBMAApEyBw4I4gj0YpGEAYAPAAEWTASsBBcAApE6Bw4JCgkKCewAAAAOCS4J7AAAAAQEBglEAAATAAFTcYAPAAKRPAABgA8AApEYBPwMIAcAApEiAAMBVEOIIAMAApEkfgm7AAEXlAAAAAAkBgkLAAP36AAAAAAAAAFURJgAAAAACwACkT4HDgoCChp6kA8AAZ60AAAFgAcAA/eQAAAIEwACkUYHDgreCvgmEJgBgA8AAezYABMAApFKBw4LSguAJwABnrgBgA7YxAAEFwACkY4HDguWC5YMaAAAAA4L1gxoAAAACAQKC+wAABIQmYAPAAHs2AIMKAAAEwABnrmADtjEBagBgA8AA/aF5AGADwACkTwE/AwgBwACkUYAAwFURlQgBwACkUoEAwFURowkBguXAAP36AAAAAAsGwACkVYHDgx+DN4N8AQDAAFP+wACkRQAAAAEDg0yDfAAAAAAAAABgA75cAUqDVQEWg2kWg10Wg1UuhCbAAKRRpSLAAHtasSrAAE2lBsAApFeBw4OBg4aD+QAAwABnrwAAAAEDg5WD+QAAAAAAAABcAT4BSYOeHIOqFoOiLoQmwACkUcAAVAIAAAAAwAB7+D4BPR6Dv7YfAgACFoPILsAAZ67AAKRSJ8AAZ7AAPwbAAKRYgcOD/oQDiC4AAMAAVKAAAAABA4QRiC4AAAAFBQWEHgAAAMAAVHJhAwBcAIRAAAAAwABnsWADwACkRgCEYQAAAMAAZLZgA8AApEYAhH0AAADAAGS3YAPAAKRGAIShAAAApaRgA8AAQksAAFwBPg49HIS6LsAAZ7IBAAGBhMbAVRLGAMAApFo9HITqgITcwFUSuCAAAAAAAD0chPIuwABnrwAAAADAAKRXQB6FEMAA9ngCAAIWhSIWhRouhCbAAKRRXsAAe3EWhTMWhSsuhCbAAKRRwABT9MAAe10AhRCFQwBOhVeFZgAAvXBgA8AARecBHIVwFoVoLoQmwACkUcAAVDQAAAAAwAB7/06FiIWPAADAAFDtYAPAAEimATWFlQAAAQBgA8AASKYBH4WVwABIsQIAAhaFmS7AAFP+wACkRcAApFWFha/AVRN8ADUAAAABAFsBF4XHhoXFwFUTt6WkhIXbwFUS9sAAReqGAMBVE7dOhf6GEQAAwABU1mADwABFsAEWhhsWhhMuhCbAAKRRXsAAe3E9HIYwFoYoLoQmwACkUYKMAQABhoY2wFUTpQDAAHt5PReGU4GGQ8BVEsbAAGesFoZoFoZgLoQmwACkUcAAU+HAAHtTwACkSz0cho6HhnvAVRQMuaIBAAEWhqaChpvAVRLWmjLAAKRJAMAARdc9HIbFh4aywFUUDLmiAQABFobdg4bSwFUS5poywACkSQDAAEXXTobuhw8AAMAAZ7NgA8AA+tEBHIcZLsAAZ7QDAAKBhyXAVRLGgoc2wFUS1gHAAGe1KcAApFk9HIdhLsAAZ7QDAAKBh23AVRLGg4d+wFUS5gHAAGe1FIemwFUUwQgAwACkWT0Xh96Bh87AVRLGpGEfh/LAAEWfAgACFogQgYgAwFUSxpoywACkSYeIF8BVFAwAwACkTAbAAKRZgcOIzIjRisIAAMAAZ7QAAAABA4jcisIAAAADAgKI5wAAAMAAZ7ZgA8AApEYAiP0AAADAAGe3YAPAAKRGAAGJEwAAAMAAZ7VgA8AA+tEBagBgA8AA/aF5YAPAAPrRAT4CTok8iUcAAMAAZ7hgA8AAo+UBFolUgIlJwFUVdsAAZ6zAAKRLSYlkHIl9FolxgYlowFUVhsAAZ6vAAKRKSAEAASsAwAD98T4BSYmOgomSwFUVlz4CPReJuYGJsMBVFYbAAGerg4nHwFUVusAApEpKidsBKj4CPReKCYGKAMBVFYbAAGerH4obwACkFwEAAYOKLsBVFboAwACkSkqKQwEpPgI9HIqAFop0gYprwFUVhsAAZ6vAAKRKwABnkQIAAoOKisBVFboWip+BipbAVRWGmjLAAKRJAMAApBBKiq0BKQbAAKRagcOKx4rMi2gAAMAAZ7IAAAABA4rXi2gAAAABAQGK4gAAAMAAUO1gA8AApEYAAFwBPgM9HIr+For4ForwLoQmwACkUaRhwAB7OLlRAQABFosOgIsHwFUWupoywACkSQDAAEUSPReLIhaLGi6EJsAApFHAAFPhFos5gIsywFUWusAAZ6vAAKRKwAB7Uz0ci1IWi0ouhCbAAKRRpW0BAAEWi16Ai1fAVRa6mjLAAKRJAMAAe3gGwACkW4HDi22Leo2EAADAAGe5AAAAAQOLhY2EAAAABAQEi5AAAADAAFDtYAPAAKRGAIudAAAAwABnumEDAFwAi7wAAADAAGe7YAPAAKRGAIvNAAAAosFgA8AA+tEAAGADwABF5wE+Bz0ci+EuwABnsgEAAYCL7cBVF3IAwACkWj0cjAWBi/rAVReCIAAAAAAAPReMFICMDcBVF3KkYR+MIMAARZoCAAIWjDCAjCnAVRdymjLAAKRJFow/Fow3LoQmwACkUcAAU/TAAHtdAMAApEw9F4xcgIxVwFUXcsAAZ6wWjHEWjGkuhCbAAKRRwABT4cAAe1PAAKRLSYyEIRyMkRaMiS6EJsAApFHAAFQCAAAAAMAAe/g+Aj0cjK4WjKYuhCbAAKRRuqsCAAIWjLsWjLMuhCbAAKRRXsAAe3EWjM+CjMTAVReQmjLAAKRJAMAAe/c9HIzdLsAAZ7QDAAKAjOnAVRdygozxwFUXkAHAAGe1KcAApFk/SY0ig40mwFUXoD4CPRyNPC7AAGevAAAAAMAApFdKjVUBHI1kFo1cLoQmwACkUaEUAAAAAMAAe3U/So11ASsGwACkXIHDjYmNiY/7AADAAFTdAAAAAQONkY/7AAAABAMDjZcAAADAAFRyYQMAXACNrgAAAMAAVHNhAwBcAI3AAAAAwABUdGEDAFwAAY3mAAAApaRgA8AAQksBagBgA8AA/aF5WwE+AkmOAByODoKOBMBVGURIAQABKwDAAP3xPgE9io9cwFUZRDSPaAOPaI9tAAAAAAAAAGADwAD9oQE+AD89HI96LsAAZ7zAAKRFBQADgI+PwFUZKIGPn8BVGTaCj6rAVRlEAqLBKqWkg4/lwFUZU8AApGEGwACkXYHDkACQAJDMAADAAFUHAAAAAQOQEZDMAAAAAwMDkBcAAADAAFRyYQMAXACQLgAAAMAAVHNhAwBcAJBAAAAAwABUdGEDAFwAAFsBPgJAIRyQZIKQWsBVGhxIAQABKwDAAP3xkFqQawA9HJByLsAAZ7zAAKRFBAADgJCHwFUaAIGQl8BVGg6CkKLAVRocAaLBKcAApGEGwACkXoHDkNGQ0ZIHAADAAGe9AAAAAQOQ3ZIHAAAAAgICkOMAAACFxWEDAFwAkPAAAACFx2EDAFwAAFsBPgJOkUEAAADAAGe+YAPAAEXnAD0ckVUuwABVBwMAAzSRZwORZ5HSAAAAAAAAAGADwAD9oQE+Az0ckXaAkXLAVRqZIAAAAAAAPYqRgMBVGrcckZkWkZEuhCbAAKRRoRQAAAAAwAB7dT0cka4WkaYuhCbAAKRRwABUAAEAAYKRvMBVGrcAwAB7doGR1MBVGqU0kdsDkduSAgAAAAAAAABcAUqR4QEcke8WkekWkeEuhCbAAKRRoSDAAHtUVgEAAYKR88BVGrcAwAD9TADAAKRdBsAApF+Bw5OWk5uXjAAAwABVCwAAAAEDk66XjAAAAAQDA5O7AAAAhcVhAwBcAJPIAAAAhcdhAwBcAJPjAAAApaRgA8AAQksAAZQCAAAArixgA8AA+tEBagBgA8AA/aF5XAE+CU6UHQAAAMAAZ79gA8AARecATpQ9AAAAwABnwGADwABF5wBPlFKUVwAAAcAAVHJhAwBcAAOUZZVuAAAAAAAAAFwBPgQ9HJR0gJRwwFUbpSAAAAAAAD2MlH7AVRvoHJSWFpSOLoQmwACkUcAAVDQAAAAAwAB7/z0clLoWlLQWlKwuhCbAAKRRoSDAAHtUVgEAAYSUvsBVG+gAwAD9TEmU1CGDlNnAVRvMPgE9HJTyFpTqLoQmwACkUaERAQABNZT7AAABAGADwABI0gEflPvAAEjZAgACHJUIFpUALoQmwACkUaEUAAAAAMAAe3UWlSQWlQ8uwABT/sAApEXAAKRVhbW+YQA1AAAAAQBbAReVOoeVOMBVHKSlpIKVTsBVG73AAEXqhwDAVRykAMAAe3Q/T5V1lXoAAAHAAFRzYQMAXAADlYOVygAAAAAAAABcAT4CPRyVk4GVjsBVG7EgAAAAAAA9jZWdwFUb+RyVthaVri6EJsAApFHAAFQ0AAAAAMAAe/89HJXRLsAAVN0EAAOGldrAVRwMh5XqwFUdGCsBpaSClhbAVRu9wACkXE6WOJZBAADAAGfBYAPAAEi8ARyWWRaWUxaWSy6EJsAApFGkYcAAezi5XAIAAiGDlmrAVRvMFpZ5FpZxLoQmwACkUaUiwAB7WgDAAEUcTpaQlpcAAIF2YAPAAEjzATWWnQAAAQBgA8AASPMBH5adwABJAQMAAysxltJgA8AARecChZbTwFUb+RSW48BVHZIIABaXCxaW9i7AAFP+wACkRcAApFWepb5eADUAAAABAFsBF5cgFJcewFUd7wkApaSClzTAVRu9wABF6hQAwFUd7wkAPRyXWxaXUxaXSy6EJsAApFFewAB7cbmdAQABFJdiwFUd3wkAAMAARdI9HJd9Fpd3FpdvLoQmwACkUaEgwAB7VFYBAAEUl4HAVR3fCQAAwAD9TAbAAKRhgcOXkZeWnqIAAMAAZ7zAAKRFAAAAAQOXqp6iAAAABQMDl7cAAADAAFRyYQMAXACXzgAAAMAAVHNhAwBcAJfgAAAAwABUdGEDAFwAApf5AAAAosFgA8AA+tEBagBgA8AA/aF5mBkAAAClpGADwABCSwFqAGADwAD9oXlcAT4TTpg9mE0AAMAAZ7FgA8AApEYBH5hTwACkTgEAAS4ATphymH0AAMAAZLZgA8AApEYBH5iDwACkTgEAAS4ATpiimK0AAMAAZLdgA8AApEYBH5izwACkTgEAAS4ATpjSmN0AAMAAZ7tgA8AApEYBH5jjwACkTgEAAS4APReZCYWY+cBVHzjAAGerFpkfFpkXLoQmwACkUcAAU+HAAHtTwACkSj0cmToWmTIuhCbAAKRRuqsCAAIWmUcWmT8uhCbAAKRRXsAAe3EWmWCFmVDAVR84mjLAAKRJAMAAe/c9HJltLsAAVKAFAAWAmXzAVR7ahZmMwFUfOIaZncBVH1aHmanAVR90hJm9wFUfHADAAKRYTpnimewAAMAAZ8JgA8AARecBHJn2LsAAZ7kEAASGmgLAVR9WgZoOwFUe6BSaGcBVH5IIAIOaJcBVHwUAwACkW06aRZpPAADAAGfDYAPAAEXnARyaWS7AAGe5BAAEh5plwFUfdIKaccBVHvYUmnzAVR+SCACDmojAVR8FAMAApFtJmpyDmqDAVR8FPgRAIiEcmscUmr3AVSBGCQBIAQABKwDAAP3xACEcmtwUmtLAVSCGCgBIAQABKwDAAP3xmr2a4wBOmvGa9QAAuZ5gA8AASPMBH5r7wABJAQMAAysxmx9gA8AARecCFJsgwFUgRgkAFJsrwFUghgoAFptWFptBLsAAU/7AAKRFwACkVZ6lvl4APRybexabdRSbasBVH5IIAJoywACkSbmdAQABFJuCwFUhCAsAAMAARdI9HJucFpuWFpuOLoQmwACkUaEgwAB7VFYBAAEUm6DAVSEICwAAwAD9TD9Om70AAAC6tWADwABFsABJnA4hFpwxFpwkFpweFJwTwFUfkggAmjLAAKRJuWDAAEW8gVXAAP0dPgI9HJxCLsAAZ7IBAAEUnE7AVR+SCAAAwACkWj0VnGHAVSGqCxaceBScbcBVH5IIAJoywACkST9OnJ6cowAAgVRgA8AASukBH5ypwABK9AMAAx+cysAASrgBAAEmnPkBFpz5hZzpwFUfOKRhwACkTGADwABFmwAfnQ3AAEqtAQABFp0yhp0nwFUfVqRhwACkTAAfnUbAAEqtAQABFp1rh51gwFUfdKRhwACkTAAATp2FnZkAAMAAZ8RgA8AARbABFp2rhZ2bwFUfOJoywACkST0cncoUnbbAVSKPDQC5lAIAAhSd18BVIhkMABSd3cBVIaoLAADAAEXKTp32ngUAAMAAZ8VgA8AARZMBFp4XhZ4HwFUfOKRhwACkTE6eJp4tAADAAFDtYAPAAEimASaeJgEWnkIWnj4Uni/AVSLaDgCCkMAARZaB6sAARaNgA8AASKZAJZ5aFJ5TwFUi/A8AYAPAAEimnlOeYAA9F55uFJ5nwFUi/A8AuroWnpUUnoHAVSKPDQC5i8AARbnAAEioAABVEekAVRI1AFUSlgBVFVQAVRaYAFUXUABVGQYAVRneAFUadwBVG4MAVR60AFUjbwAAAAsAAAGBwwBVI6YAVRAxAFURLwBVI6QAAAACAFUjpgAAAAAAAgTAAKRkAIHEAAABgNoAAIIugggAAAAAAQLAAKRlgcSB0IHWjjEDwABnxgAAAV0BmiEBYAPAAPrRAAAAAQXAAKR7gcSCCoIKgiQAgLXAAKRkAAOCIoIkAAAAAAAAAGADwACkZQE/AQkBggqaVwAAAAASBsAApGeBxIIpgjWCqQABwABnxwAAAAEDgkWCqQAAAAEBAYJTAAAAwABnyGADh48AAGADwAD60QE+AUqCaQEmgmkBHIJ/gIJwwFUkWoRSAQABH4KKwACkewAAAAAAh5FgA8AA+tEGwACkaIHEgq6Cv4QhAACGSgFqgq9gA8AA/eQCAAABA4LbhCEAAAABAQGC9wAAAMAAZ8lgA4goAABgA8AA+tEBPgFKhBIBKQbAAKRpgcSEJoQ3hOYAAIYnAWqEJ2ADwAD95AIAAAEDhEGE5gAAAAEBAYRLAAAAmjJgA4efAABgA8AA+tEBPgJGhFiEiYRqAAAAhWBgA4ePABaEfYCEd8BVJQ6GJYehPgFJhJEmhJ8BHISfgYSVwFUlKYRSAQABLgCHkWADwAD60T4BSoS3ASk/SoTWASoGwACkaoHEhOuE/IVdAACGMgFqhOxgA8AA/eQCAAABA4URhV0AAAABAQGFJgAAAIVgYAOHygAAYAPAAPrRAT4BSoU3ASaFNwEchU0WhUiAhT7AVSWcgm2HzIRSAQABLgCHkWADwAD60QbAAKRrgcSFYoVzhc4AAIY4AWqFY2ADwAD95AIAAAEDhYOFzgAAAAEBAYWTAAAAsJZgA4fpAABgA8AA+tEBPgFKhaYBJoWmARyFvhaFuYCFrcBVJgSCbYfrhFIBAAEuAIeRYAPAAPrRBsAApGyBxIXTheSGQwAAhjwBaoXUYAPAAP3kAgAAAQOF9YZDAAAAAQEBhgYAAACwmWADh/QAAGADwAD60QE+AUqGGgEmhhoBHIYzFoYugIYhwFUmbIJth/mEUgEAAS4Ah5FgA8AA+tEGwACkbYHEhkiGWYbAAACGQAFqhklgA8AA/eQCAAABA4ZshsAAAAABAQGGfwAAALCYYAOIAQAAYAPAAPrRAT4BSoaVASaGlQEchrAWhquAhpzAVSbUgm2IBoRSAQABLgCHkWADwAD60QbAAKRugcSGxYbWh6EAAIZDAWqGxmADwAD95AIAAAEDhuqHoQAAAAEBAYb+AAAAsJBgA4gPAABgA8AA+tEBPgJGhxWHQ4ceAAAAqBRgA4gaABaHPICHLMBVJzyGQogSPgFJh0smh1oBHIdagYdPwFUnV4RSAQABLgCIIWADwAD60T4BSodyASk/SoeRASoGwACkb4HEh6aHt4gOAACGSAFqh6dgA8AA/eQCAAABA4fGiA4AAAABAQGH1QAAAKgUYAOIGgAAYAPAAPrRAT4BSofnASaH5wEch/4Wh/mAh+7AVSfKgm2IHoRSAQABLgCHkWADwAD60QbAAKRwgcSIE4gkiNAAAIZMAWqIFGADwAD95AIAAAEDiDSI0AAAAAEBAYhEAAAAsJpgA4gyAABgA8AA+tEBPgFKiFcBIiaIbwEciG8WiGqAiF7AVSgyga+INYRSAQABLgCHkWADwAD60QEiIRyInhaIlICIiMBVKDKFy4g2SAEAASsAwAD98QAmiL8BHIi/Foi1gIipwFUoMoXLiDaEUgEAAS4Ah5FgA8AA+tEGwACkcYHEiNWI5onVAACGUQFqiNZgA8AA/eQCAAABA4jzidUAAAABAQGJAAAAAMAAVdtgA4hIAABgA8AA+tEBPgJJiRAmiSIBHIkiFokdgIkUwFUo3oJtiEqEUgEAAS4Ah5FgA8AA+tE+AUaJOIlliUEAAADAAFM5YAOIVAAWiVyAiVPAVSjehlCISz4BSYlvJomCARyJgoGJc8BVKSSEUgEAAS4AiFtgA8AA+tE+AUqJnAEpPz9KicUBKgbAAKRygcSJ2onrikgAAIY2AWqJ22ADwAD95AIAAAEDif6KSAAAAAEBAYoRAAAAhWBgA4feAABgA8AA+tEBPgFKiiIBJooiARyKOBaKM4CKKcBVKZqCbYfhhFIBAAEuAIeRYAPAAPrRBsAApHOBxIpNil6KswAAhlUBaopOYAPAAP3kAgAAAQOKaIqzAAAAAQEBinIAAADAAFM5YAOIVAAAYAPAAPrRAT4BSoqIASaKiAEciqMWip6Aio/AVSoCgm2IWYRSAQABLgCHkWADwAD60QbAAKR0gcSKuIrJi0UAAIZYAWqKuWADwAD95AIAAAEDitiLRQAAAAEBAYrnAAAAwABnymADiGAAAGADwAD60QE+AUqK+QEiJosQARyLEBaLC4CLAMBVKmyCbYhihFIBAAEuAIeRYAPAAPrRACaLNQEcizUWiyuAiyDAVSpshleIY4RSAQABLgCHkWADwAD60QbAAKR1gcSLSotbi8oAAIZpAWqLS2ADwAD95AIAAAEDi3OLygAAAAEBAYuLAAAAnt5gA4ipAABgA8AA+tEBPgFKi54BJoueARyLuhaLsYCLpcBVKvyCboishFIBAAEuAITAYAPAAPrRBsAApHaBxIvPi+CMLwAAhXABaovQYAPAAP3kAgAAAQOL8YwvAAAAAQEBjAIAAACD82ADhK4AAGADwAD60QE+AUqMDgEmjA4BHIwfFowagIwVwFUrZIJthMSEUgEAAS4Ah5FgA8AA+tEGwACkd4HEjDSMRY33AACYFAFqjDVgA8AA/eQCAAABA4xVjfcAAAABAQGMYwAAAIPzYAOHjwAAYAPAAPrRAT4CSYxvIiIiIiIiJYx4gIxzwFUrzGADh5UBJYyigIydwFUrzGADh7UBJYzHgIzCwFUrzGADh9QBJYzsgIznwFUrzGADiD4BJY0SgI0NwFUrzGADh70BJY04gI0zwFUrzGADiGsBJY1dgI1YwFUrzGADiH4+AUqNgAEqPz0wjZgkAAQnwABnyxaNtYCNsMBVK8yFlsAA/fgnwABnzCfAAGfGBsAApHiBxI38jg2OLwAAmAIBao39YAPAAP3kAgAAAQOOGI4vAAAAAQEBjiEAAACD82ADgksAAGADwAD60QFKjioBKgAAVSQ4AFUknQBVJOQAVSVyAFUl2gBVJkIAVSaqAFUnEgBVJ6AAVSgIAFUotABVKXAAVSnYAFUqQgBVKtIAVSs6AFUrogBVLIEAVSzEAAAAEgAAAYHEAFUtFwBVI98AVS0VAAAAAQBVLRcAAAAAAAIEwACkfACBxQAAC4DaAACCLoIIAIECAACb5YIIAIE2AACcmIIIAIFlAACbnIIIAIGbAACkiwAAgbQAALinAACB1gAAvRUAAIH6AADAAI7bAACCHQAAwABi0QAAgj4AAMAApioAAIJgAADAAGkfAAAAAAABAsAApH2BxYNUg2OLJwfAAGfNAAABYAHAAP3kAAAAAQXAAKSXAAAAAAQAAAMAAAAAAAAAAABgA8AApH0BPwEJAQDAAP36AAAAABYGwACkf4HFg6yDtYPSAALAAEyzAAAAAQODwIPSAAAAAQEBg80AAACClGADiOkAAGADwABi1gAGwACkgIHFhByEKYRCAAKcRAAAAAEDhDKEQgAAAAEBAYQ9AAAAg/NgA4N9AABgA708AAbAAKSBgcWEkYSghLwAAsAAT6EAAAABA4SphLwAAAABAQGEtwAAAIPzYAOEEgAAYAO9UQAGwACkgoHFhSyFPoVcAAKoWAAAAAEDhUyFXAAAAAEBAYVXAAAAg/NgA4N9AABgA71pAAbAAKSDgcWFpIWwhccAAsAATYoAAAABA4W4hccAAAABAQGFwgAAAIPzYAODnAAAYAO9TgAGwACkhIHFhg+GG4YyAAKcSwAAAAEDhiOGMgAAAAEBAYYtAAAAg/NgA4MbAABgA70qAAbAAKSFgcWGZ4Z0hpkAArN6AAAAAQOGg4aZAAAAAQEBhpQAAACD82ADhK4AAGADwABjaQAGwACkhoHFhu+G+4caAALAAE+iAAAAAQOHCYcaAAAAAQEBhxUAAACD82ADgvYAAGADwABjEwAGwACkh4HFh4GHj4fYAAKy3gAAAAEDh6KH2AAAAAICAoezAAAAmfpgA4MbAIfKAAAAhSxdA8AA/TsBYAOI6QAAYAPAAGL9AAbAAKSIgcWIIYgviFcAAsAAT58AAAABA4g/iFcAAAABAQGITQAAAFtgA4WjAABgA8AAaSAABsAApImBxYi1iMiI7gACwABXWgAAAAEDiNeI7gAAAAEBAYjpAAAAg/NgA4mCAABgA702AAbAAKSUgcWI84kGiRQBArO3AAAAAQOJFIkUAAAAAAAAAGADuKgABsAApJWBxYkYiS+JNwECpRAAAAABA4k3iTcAAAAAAAAAYAO1/wAGwACkioHFiTuJSYlmAAKzdgAAAAEDiVSJZgAAAAEBAYliAAAAmfpgA8AAjugAAGADwABi/QAGwACki4HFiWqJeImWAALAAFdWAAAAAQOJhImWAAAAAQEBiZIAAACZ+mADwACO6AAAYAPAAGL9AAbAAKSMgcWJmompicwAAsAAV38AAAABA4m6icwAAAABAQGJyAAAAJn6YAPAAI7oAABgA8AApisABsAApI2BxYnQieiKBwACwABG5QAAAAEDifWKBwAAAAEBAYoDAAAAmfpgA8AAjugAAF0DwAD8+QFgA8AAYv0ABsAApI6BxYoLihmKSgACwABGuQAAAAEDiiWKSgAAAAICAoo0AAAAgpRgA8AAYv0AikYAAACZ+mADvSoAAGADwABi/QAGwACkj4HFik6KV4qLAALAAEbjAAAAAQOKZYqLAAAAAgICim8AAACClGADwABi1gCKgwAAAIJXYAPAAGL9AABgA8AAYtYABsAApJCBxYqPipiKtwACwABGugAAAAEDiqOKtwAAAAEBAYqyAAAAgpRgA8AAYv0AAGADwABi1gAGwACkkYHFiruKv4riAALAAE9YAAAAAQOK0IriAAAAAQEBit4AAACZ+mADwACO6AAAYAPAAPyXAAbAAKSSgcWK5orviyUAArN5AAAAAQOLA4slAAAAAQEBixgAAACpWGADwACO/QAAYAPAAGLWAAAAVS3xAFUuJwBVLlkAVS6NAFUuvwBVLvMAVS8lAFUvWQBVL48AVS/WAFUwCwBVMD8AVTBlAFUwiwBVMMEAVTD5AFUxMQBVMXAAVTG0AFUx+gBVMjIAVTJqAFUyoAAAABYAAAGBxQBVMwMAVS2nAFUzAQAAAAEAVTMDAAAAAAACBMAApJjAAGfOgVsAABOA+QAAgi6CCACBIgAApIsAAIE7AADAAIjIAACBZAAAwABN/AAAgYwAAMAAYQ8AAIGvAAC9FQAAgdMAAMAAjtsAAIH2AADAAGLRAACCFwAAwACkfAAAgjgAAMAAnN0AAIJfAADAAKb3AACCfQAAwAByWAAAgqQAAMAApioAAILGAADAAF1cAACC9AAAwACfSwAAgxcAAMAAfQUAAIMuAADAAHJYAACDSQAAwAB+OAAAg2kAAMAAdQgAAAAAAB4CwACkmYFbg7qDwIb4A8AAZ88AAAFgAcAA/eQAAAIEwACknIFbg+2D+AnAAGfQwACkmABdA8AA/PkBYAOKgAAEwACknYFbhBiEKAnAAEXLwACkmABdA8AA/W0CYAPAAP7/YAPAAKSoATKEJmADwAD+/2ADwACkqAABBcAApKeBW4QthC2ESgAAAAOEOIRKAAAAAQEBhD4AAATAAGfQXQPAAPz5AWADioAAAGADwACkmQE/AggBwACknIAAwFU0fwkBhC3AAP36AAAAAAYGwACkn4FbhJGEn4TKAQCCWgAAAAEDhKqEygAAAAAAAABgA4N9AUqErQE1AAAAAQBgA4qAARaEuRaErS7AAGfQwACkmMAApJyDHsAA/R8jHITAgADAVTTiSAEAASsAACsWhMCAAMBVNOKCWoqTAWADhBIGwACkoIFbhM+E4IUCAQC4NAAAAAEDhO6FAgAAAAAAAABgA4qAAUqE8QEWhP0WhPEuwABn0MAApJjAAKScgx7AAP0fBsAApKOBW4UHhQyFXwAAwABXLgAAAAEDhRuFXwAAAAEBAYUoAAAAlqdgA8AApKgAAFwBPgE9HIU+FoUzLsAARcvAAKSYwACknYC/AgACFoVLFoVDgIU/wFU1joRIwACkq4R8go2AhVjAVTWOAMAA/YIGwACkpIFbha2FuYXxAACy0AAAAAEDhcaF8QAAAAEBAYXLAAAAgKxgA8AA/v8AAGADwACkqAE+AUqF1gEchegWhd0uwABFy8AApJjAAKSdSwEAAYCF6cBVNf0AwAD9gQbAAKSlgVuGLIYxhoQAAMAAV0QAAAABA4Y/hoQAAAABAQGGRQAAAIGmYQMBYAPAAKSoXAAAXAE+AT0chnYWhm8WhmMuwABFy8AApJjAAKSdKcAA/ZCD/QEAAYCGfsBVNl4AwAD9CQbAAKShgVuGxIbMhvYBAGEAAAABA4bThvYAAAAAAAAAYAPAAPyXAT4BSobZARaG7BaG4C7AAEXLwACkmMAApJ1hwAD9kQAAVTS3AFU1KQBVNWwAVTXdAFU2PABVNqIAVTbnAAAABgLAAKSogVuHO4dBjuMDwABn0QAAAWABwAD95AAABQTAAKSqgVuHx4faBoPsAGADwAD+fgFqh81gA8AA/n7AAXFzBMAApKuBW4fwh/cJhEgAYAOCiwAEwACkrYFbiBiIJgnAAGfTwACkmABdA8AA/W0CYAPAAP5+YAPAAKTTATKIJGADwAD+fmADwACk0wAEwACkroFbiEeIUQnAAGfUwACkmABdA8AA/W0CYAPAAP5+YAODfQAEwACkr4FbiHKIfAnAAGfVwACkmABdA8AA/W0CYAPAAP5+YAODfQABBcAApLqBW4iBiIGIvAAAAAOIjIi8AAAAAwMDiJIAAASESGADgosAiKAAAATAAGfUXQPAAP1tAmADwAD+fmADg30AiLEAAATAAGfVXQPAAP1tAmADwAD+fmADg30AAGADwACkqAE/BAgBwACkq4AAwFU4AAgBwACkroEAwFU4DAgBwACkr4IAwFU4JwkBiIHAAP36AAAAAAcGwACksYFbiPqJAoqKBAGvcwAAAAEDiSCKigAAAAEBAYksAAAAg0pgA8AAXbEAAGADwACkqAE+Bj0ciUGAiTrAVTidgpgBAAFqiUdgA8AA/n7AAXFzAMAAXbNOiVyJZAAAhEhgA4KLARyJbYCJZsBVOJ3AAESQAAAAAMAAXchOiZuJpQAAtAldA8AA/W0CYAPAAP5+YAODfQEcibaAia/AVTidtFgBAWADg30BFonLgInEwFU4ncAARJPAAF3LAMAAXcVOifeKAQAAwABn1l0DwAD9bQJgA8AA/n5gA4N9ARyKEoCKC8BVOJ20WAEBYAODfQEWiieAiiDAVTidwABEk8AAXcsAwABdxT0cikOAijzAVTidgpABAAFqikdgA8AA/n7AAXFzAMAAXbRKilEBH4pcwACkugMAA4GKaMBVONiCinHAVTj8g4p8wFU5QQAGwACks4Fbir6Kw4uoAACvdAAAAAEDitKLqAAAAAEBAYrcAAAAhEBgA8AAXWIAAFwBPgU9HIrtgIrowFU57YKYAQABaorzYAPAAP5+wAFxcwDAAF1nPRyLAoCK/cBVOe2XrAEAARaLEy6ESMAApKsAwABddT0ciyaAiyHAVTnttF8CAWADg30CFos1LsAAZ9TAAKSYwACkrhaLRoCLQcBVOe3AAERxwABdeADAAF1yPRyLYYCLXMBVOe20XwIBYAODfQIWi3AuwABn1cAApJjAAKSvFouBgIt8wFU57cAARHHAAF14AMAAXXI9HIucgIuXwFU57YKQAQABaougYAPAAP5+wAFxcwDAAF1oBsAApLSBW4uti7KMBQAApT0AAAABA4u/jAUAAAACAgKLxwAAAIC9YAPAAP5+AIvXAAAAwABXU2ADwACk0wAAXAE+AT0ci/AWi+cuwABn08AApJjAAKStgL8CAAKAi/HAVTr5gYv5wFU7BwDAAP2CBsAApLWBW4xKjFSMjQAAstoAAAABA4xfjI0AAAABAQGMZwAAAIC9YAPAAP5+AABgA8AApNMBPgFKjHMBHIyDFox6LsAAZ9PAAKSYwACkrUsBAAGAjITAVTtoAMAA/YEGwACktoFbjMKMx40QAAClPAAAAAEDjNONEAAAAAEBAYzZAAAAgaZhAwFgA8AApNNcAABcAT4BPRyNAhaM+xaM8S7AAGfTwACkmMAApK0pwAD9kIP9AQABgI0KwFU7xwDAAP0JBsAApLeBW41WjWCNzQAAwABXUQAAAAEDjWyNzQAAAAIBAY10AAAAgL1gA8AA/n4AAY2AAAAAm0BgA8AA+tEBao2IYAPAAPrRAGADg30BPgFKjZYBI4GNncBVPDwcjbAWjaYuwABn1cAApJjAAKSvSwEAAYCNscBVPC0AwAD9gRyNwxaNuS7AAGfUwACkmMAApK5LAQABgI3EwFU8LQDAAP2BAWADg30GwACkuIFbjdKN147hAADAAFdGAAAAAQON5I7hAAAAAQEBjeoAAACBpmEDAWADg31cAABcAT4CPRyOFxaOEBaOBS7AAGfUwACkmMAApK4pwAD9kIP9AQABgI4fwFU81ADAAP0JRo4njlOONgAAAIJqYAODfQAWjksWjkAuwABn1cAApJjAAKSvKcAA/ZA+AUmOWyWOZoGOX8BVPRtgA4QSPgE9HI6CgI6BwFU81CABAAEUjoPAVT0bAQFgA4QSAAA+AAAAVTh9AFU5zQBVOtkAVTtIAFU7pwBVPAsAVTyyAFU9dAAAAAcCwACku4FbjuaO7JS1A8AAZ9cAAAFgAcAA/eQAAAMEwACkvYFbj3SPiAaD7ABgA8AA/n4Bao96YAPAAP5+wAFcuATAAKS+gVuPno+lCYRIAGADgosABMAApL+BW5BqkHEJmacAXQPAAP1tAmADgsJgA70gAAEFwACkxYFbkHaQdpCeAAAAA5CCkJ4AAAACAgKQiAAABIRIYAOCiwCQlgAABJmnXQPAAP1tAmADgsJgA70gAABgA8AApLsBPwMIAcAApL6AAMBVPikIAcAApL+BAMBVPjUJAZB2wAD9+gAAAAACBsAApMGBW5CjkKuSyAQBr3MAAAABA5DKksgAAAABAQGQ1gAAAINKYAPAAF2xAABgA8AApLsBPgc9HJDrgJDkwFU+m4KYAQABapDxYAPAAP5+wAFcuADAAF2zTpEGkQ4AAIRIYAOCiwEckReAkRDAVT6bwABEkAAAAADAAF3ITpEykT4AAMAAZ9hgA8AA/JcBHJFHgJFAwFU+m7EvAAAAAMAAXcBOkX4AAACZp10DwAD9bQJgA4LCYAO9IABJkYsckZuCkY/AVT76gJcBAAGTAMAA/cc+Aj2LkajAVT8gMpGyYAOCwmADvSAARZG8AZHFkccAAGJgA8AA/JcBkwEckc6EkczAVT9pYwEAAYKR0MBVPvoAwAD9xQGMkd3AVT9pHJHehJHdwFU/aWQBAAGUAMAA/b0+A06R8JH2AAAnYAPAAPyXARyR/4CR+MBVPpuxLwAAAADAAF3ATpIfkiYAAISvYAO9IAEcki+AkijAVT6bwABEqwAAAADAAF33PRySTIOSRcBVPyCAvwIAAhySYRaSVYGSTcBVPtaAz4KcSwEAAYWSYsBVP7IAwAD9SoaSbMBVP9UAwAD9gj89HJKNgJKGwFU+m4KQAQABapKRYAPAAP5+wAFcuADAAF20SpKbAR+SpsAApMUCAAKBkrPAVT7Wg5K8wFU/IAAGwACkw4Fbks2S0pSzAACvdAAAAAEDkuGUswAAAAEBAZLrAAAAhEBgA8AAXWIAAFwBPgQ9HJL8gJL3wFVAlYKYAQABapMCYAPAAP5+wAFcuADAAF1nPRyTEYCTDMBVQJWXrAEAARaTIi6ESMAApL4AwABddUmTMByTPBaTNC6Zp8AApL9IAQABKwDAAP3xPgE9HJNSgJNNwFVAlbE1AQABkwDAAF1tPgM9HJN3gJNywFVAlbE1AQABFpOIFpOALpmnwACkv2HAAP2RAMAAXW1Ok5uToQAAJ2ADwAD8lwGTRpOsk+STxgAAAIPzYAOCwgAWk9YWk84uhEjAAKS+gM+CnD4DTpP7lAIAAISvYAO9IAEclAsWlAQumafAAKS/SwEAAYKUDMBVQVkAwAD9gUmUGyEclCaDlB/AVUF5SAEAASsAwAD98T4CPRyUQICUO8BVQJWxNQEAAYGUScBVQUUAwABdbT0clGCAlFvAVUCVwABEiQEAAYOUbMBVQXkAwABdpD89iZSHwFVBRRyUjIGUh8BVQUVkAQABlADAAP29PRyUp4CUosBVQJWCkAEAAWqUq2ADwAD+fsABXLgAwABdaAAAVT57AFVAdQBVQjYAAAACAsAApMaBW5T/lQSVKgvAAGfZAAABYAHAAP3kAAAGBMAApMiBW5UElQQJJwBgA8AA/JcABMAApMqBW5UElQQJKMAApJgAYAPAAP5+AATAAKTLgVuVBJUEBikAXQPAAP07AWADwACkxgFqAF0DwAD9OwFgA8AApMbAAXHDBMAApMyBW5UUlRQGg/MAYAPAAKTGAWoAYAPAAKTGwAFxfQTAAKTNgVuVGpUaBrTGAGADwACkxgFqAGADwACkxsABcZYEwACkzoFblSOVIwaqKwBgA8AApMYBagBgA8AApMbAAXGvAQXAAKTSgVuVBJUElSoBAAADlQSVKgAAAAICApUEAAAEJ2ADwAD8lwCVBAAABChgA8AA/n4AAGADwACkxgE/AwgAwACkyIAAwFVDRAgAwACkyoEAwFVDUQkAAMAA/foAAAAAAQbAAKTQgVuVBJUElSoAACMAAAABA5UElSoAAAAAAAAAYAPAAP5+AUoAAQ8ALsAApMoAAFVDjABVQ70AAAABAsAApNOBW5VKlVmcaAfAAGfdAAABYAHAAP3kAAAAAAoGwACk1YFblZ6VppeOBAGvcwAAAAEDlcKXjgAAAAEBAZXOAAAAg0pgA8AAXbEAAGADwACk0wE+A06V6pXvAACCa2ADwACkxgEclfiAlfHAVUQKsBcBAWADwACkxgFqlg9dA8AA/TsBYAPAAKTGwAFxwwDAAF3GR5YcgZYkwFVEIwMBlkVqlkVgA8AApMbAAXF9AD4BSpZTAR6WXsAApO0BAAGAln/AVUQKAAGWoWqWoWADwACkxsABcZYAPgFKlrIBHpa9wAClEgEAAYCW4MBVRAoAAZcCapcCYAPAAKTGwAFxrwA+AUqXEgEelx3AAKUAAQABgJc6wFVECgA9MJdNH5dXwAD8KQEAASSXiQInwABn3oGXhMBVRCMABsAApNeBW5fAl8WX4wACr3QAAAABA5fUl+MAAAABAQGX3gAAAIRAYAPAAF1iAABcAAbAAKTegVuYHZgqmC0BApn6AAAAAQOYLZgtAAAAAAAAAGADgxsABsAApN+BW5hrmHSYjQECs3gAAAABA5iNmI0AAAAAAAAAYAPAAPrRAAbAAKTggVuY75j4mQ8BArONAAAAAQOZD5kPAAAAAAAAAGADwAD60QAGwACk2IFbmb+ZzJocAALAAFdRAAAAAQOZ2JocAAAAAwICmegAAAC0EWADwACkfQCZ+wAAAIC9YAPAAP5+AAGaDQAAAJtAYAPAAPrRAWqaFWADwAD60QBgA708AAbAAKTZgVuaS5pQmpUAAsAAV0YAAAABA5pdmpUAAAACAgKabQAAALQRYAPAAKR9AJp+AAAAgaZhAwFgA708XAAAXAAGwACk2oFbmuSa9psvAAKhoQAAAAEDmwebLwAAAAICApsXAAAAtBFgA8AApH0AmyoAAACAvWADwAD+fgAAYAO9aQAGwACk24Fbm2ObaJvDAAKzcwAAAAEDm3qbwwAAAAICApuRAAAAtBFgA8AApH0Am6IAAACBpmEDAWADvWlcAABcAAbAAKTcgVucIJwlnGYAArOLAAAAAQOcO5xmAAAAAQEBnEEAAACBpmEDAWADvXBcAABcAAAAVUPqAFVFBQBVRTYAVUVcAFVFhABVRawAVUYIAFVGSwBVRo0AVUbOAFVHAQAAAAoCwACk4YFbnJ2co6iXA8AAZ98AAAFgAcAA/eQAAWABwACk0wgEwACk44FbnT6dTwaD7ABgA8AA/n4Bap1EYAPAAP5+wAFx1wTAAKTkgVudb51yCZn6AWqdVWADwAD95AJgA4MbAATAAKTmgVudk52iCcAAZ+HAAKSYAF0DwAD9bQJgA8AA/n5gA4N9AATAAKTngVudw53NCcAAZ9TAAKSYAF0DwAD9bQJgA8AA/n5gA4N9AATAAKTogVud7p34CcAAZ9XAAKSYAF0DwAD9bQJgA8AA/n5gA4N9AATAAKTpgVueEp4aCad7wACkmABdA8AA/TsBYAODfQAEwACk64Fbnk6eZQmzjQFqnjhgA8AA/eQCYAPAAPrRAATAAKTqgVuet57LGMAAZ+LAAKSYAF0DwAD9OwFgA71wASsBBcAApPmBW57QntCfUgAAAAOe3Z9SAAAABgYGnuMAAASZ+mADgxsAnu0AAATAAGfhXQPAAP1tAmADwAD+fmADg30AnwMAAATAAGfUXQPAAP1tAmADwAD+fmADg30AnxoAAATAAGfVXQPAAP1tAmADwAD+fmADg30AnysAAASne10DwAD9OwFgA4N9AJ86AAAEs41gA8AA+tEAAGADwACk4QE/BwgBwACk5IAAwFVIiQgBwACk5oEAwFVIlQgBwACk54IAwFVIsAgBwACk6IMAwFVIywgBwACk6YQAwFVI5ggBwACk64UAwFVI+QkBntDAAP36AAAAAAkGwACk7YFbn1efX6HoBAGvcwAAAAEDn3+h6AAAAAEBAZ+LAAAAg0pgA8AAXbEAAGADwACk4QE+CT0cn6CAn5nAVUmGgpgBAAFqn6ZgA8AA/n7AAXHXAMAAXbNOn7mfvQAAmfpgA4MbARyfxoCfv8BVSYbAAESRAAAAAMAAXclOn/KgAQAAwABXI10DwAD9bQJgA8AA/n5gA4N9ARygEoCgC8BVSYa0WAEBYAODfQEWoCeAoCDAVUmGwABEk8AAXcsAwABdxU6gU6BdAAC0CV0DwAD9bQJgA8AA/n5gA4N9ARygboCgZ8BVSYa0WAEBYAODfQEWoIOAoHzAVUmGwABEk8AAXcsAwABdxU6gr6C5AADAAGfWXQPAAP1tAmADwAD+fmADg30BHKDKgKDDwFVJhrRYAQFgA4N9ARag34Cg2MBVSYbAAESTwABdywDAAF3FTqEEoQwAAISUXQPAAP07AWADg30BHKEVgKEOwFVJhsAARJQAAWADg30AAMAAXcxOoTGhSQAAs41gA8AA+tEBHKFSgKFLwFVJhq+RAAAAAMAAXb89HKFpgKFiwFVJhoKQAQABaqFtYAPAAP5+wAFx1wDAAF20SqF3AR+hgsAApPkGAAaBoZDAVUnBgqGVwFVJ5YOhpcBVSiyEobDAVUpxhaG7wFVKuIahzMBVSucABsAApO+BW6Htof6jlwAAr3QBaqHuYAPAAP3kAgAAAQOiDaOXAAAAAQEBohcAAACEQGADwABdYgAAXAE+CT0coiiAoiPAVUuPsBsBAAFqokBgA8AApMbAAXF9AMAAXXM9HKJQgKJLwFVLj4KYAQABaqJWYAPAAP5+wAFx1wDAAF1nPRyiZYCiYMBVS4+XngEAARaidC6Z+sAApOQAwABddj0cooOAon7AVUuPtF8CAWADg30CFqKSLsAAZ+HAAKSYwACk5haiqICio8BVS4/AAERxwABdeADAAF1yPRyiw4CivsBVS4+0XwIBYAODfQIWotIuwABn1MAApJjAAKTnFqLjgKLewFVLj8AARHHAAF14AMAAXXI9HKL+gKL5wFVLj7RfAgFgA4N9AhajDS7AAGfVwACkmMAApOgWox6AoxnAVUuPwABEccAAXXgAwABdcj0cozmAozTAVUuPwABEcgEAARajSi6ne8AApJjAAKTpAMAAXXk9HKNegKNZwFVLj6+YAQABFqNoLrONwACk6wDAAF1sPRyji4CjhsBVS4+CkAEAAWqjj2ADwAD+fsABcdcAwABdaAbAAKT3gVujnKOxo+IBALN4AWqjnWADwAD95AIAAAEDo8uj4gAAAAAAAABgA8AA+tEBSqPOARaj0hajzi6Z+sAApOSE6YM5BsAApPCBW6PnpACk2wAAwABXUQFqo+hgA8AA/eQCAAABA6QMpNsAAAADAgKkHAAAALQRYAPAAKR9AKQvAAAAgL1gA8AA/n4AAaRBAAAAm0BgA8AA+tEBaqRJYAPAAPrRAGADvTwBPgJOpGGkaAAAgmpgA4N9ASOCpGrAVU2sHKR9FqRzLsAAZ9XAAKSYwACk6EsBAAGBpH7AVU2dAMAA/YEcpJAWpIYuwABn1MAApJjAAKTnSwEAAYGkkcBVTZ0AwAD9gQFgA4N9SqScASMhHKSqg6SjwFVNzEgBAAErAMAA/fEcpL+ApLTAVU2PnEQBAAGDpMnAVU3MAMAApIArAWADvTwGwACk8YFbpOCk8aWUAADAAFdGAWqk4WADwAD95AIAAAEDpP6llAAAAAICAqUOAAAAtBFgA8AApH0ApR8AAACBpmEDAWADvTxcAABcAT4BPRylRhalPS6ne8AApJjAAKTpg/0BAAE0pU4DpU6ljwAAAAEBAaVZAAAAgmpgA4N9AABgA8AA/aEBPgE9HKVqgaVpwFVOoSABAAEcpXaApWvAVU6TnEQBAAGCpYDAVU7bAMAApIAAAADAAP0JBsAApPKBW6WZpbemeAAAoaEBaqWaYAPAAP3kAgAAAQOlyKZ4AAAAAgICpdgAAAC0EWADwACkfQCl6wAAAIC9YAPAAP5+AABgA71pAT4CTqYBpg0AAJkIYAODfQEcph4Wpg8uwABn4cAApJjAAKTmSwEAAYGmH8BVT1oAwAD9gUqmKgEjIRymPYKmMcBVT3FIAQABKwDAAP3xHKZSgKZHwFVPTKhYAQABgqZhwFVPcQDAAKSCKwFgA71pBsAApPOBW6Z9po6nZAAAs3MBaqZ+YAPAAP3kAgAAAQOmoKdkAAAAAgICprcAAAC0EWADwACkfQCmyAAAAIGmYQMBYAO9aVwAAFwBPgE9HKcHFqcAFqbwLsAAZ+HAAKSYwACk5inAAP2Qg/0BAAE0pw8Dpw+nXwAAAAEBAacaAAAAmQhgA4N9AABgA8AA/aEBPgE9HKcwgacvwFVQFCABAAEcpzyApzHAVVAGqFgBAAGCp0vAVVBYAMAApIIAAADAAP0JBsAApPSBW6dpp26oEwAAwABXrQAAAAEDp4CoEwAAAAEBAaeXAAAAwABPu2ADvXAAAFwBPgI9Ixynwxanri7AAGfiwACkmMAApOpIAQABKwDAAP1lF6euLsAAZ+LAAKSYMafeYAO9cADAAKTqKwFdA8AA/TsBYAO9cD0cp/sWp+YuwABn4sAApJjAAKTqVgEAAYCn/8BVUMEAwAD9TAbAAKT1gVuoGKgpqJUAALOLAWqoGWADwAD95AIAAAEDqD+olQAAAAEBAahFAAAAgaZhAwFgA71wXAAAXAE+AT01AAAAAQBdA8AA/TsBYAO9cAEWqHEuwABn4sAApJjAAKTqIxyoh4EAwFVRfUgBAAErAAArHKiHgQDAVVF9g/0BAAGAqI/AVVFmAMAA/QkBXAAAVUlmAFVLZQBVTRwAVU1jAFVOZwBVTyIAVU/cAFVQnwBVUTwAVVHMAAAACQLAAKT6gVuomqigrxkDwABn4wAAAWABwAD95AABYAHAAKTTAgTAAKT8gVupN6lJBoPsAGADwAD+fgFqqT1gA8AA/n7AAXHcBMAApP6BW6lvqXkJwABn1MAApJgAXQPAAP1tAmADwAD+fmADwACO7gABBcAApQ2BW6l+qX6pmAAAAAOph6mYAAAAAQEBqY0AAATAAGfUXQPAAP1tAmADwAD+fmADwACO7gAAYAPAAKT6AT8CCAHAAKT+gADAVVKFCQGpfsAA/foAAAAACgbAAKUAgVupnamlqpAEAa9zAAAAAQOpwaqQAAAAAQEBqc0AAACDSmADwABdsQAAYAPAAKT6AT4EPRyp4oCp28BVUuWCmAEAAWqp6GADwAD+fsABcdwAwABds06qDaoYAADAAGfUXQPAAP1tAmADwAD+fmADwACO7gEcqimAqiLAVVLltFgBAWADwACO7gE0qjcDqjeqUAAAAAAAAABgA8AAju4BSqo9ARyqRICqPcBVUuWsowAAAADAAF3oAMAAXcU9HKpegKpXwFVS5YKQAQABaqpiYAPAAP5+wAFx3ADAAF20SqpsAR+qd8AApQ0BAAGBqoHAVVMgAAbAAKUCgVuqlaqmq30AAK90AWqqlmADwAD95AIAAAEDqrWrfQAAAAEBAaq/AAAAhEBgA8AAXWIAAFwBPgQ9HKrQgKrLwFVT6LAbAQABaqroYAPAAKTGwAFxrwDAAF1zPRyq+oCq9cBVU+iCmAEAAWqrAGADwAD+fsABcdwAwABdZz0cqw+AqwrAVVPotF8CAWADwACO7gIWqycuwABn1MAApJjAAKT+NKszA6szq2UAAAABAQGrQgAAAIJqYAPAAI7uAABcAUqrTQEcq1KAq03AVVPorJQBAAGBq17AVVRzAMAAXZUAwABdcj0cq3GAq2zAVVPogpABAAFqq3VgA8AA/n7AAXHcAMAAXWgGwAClA4Fbq4Krk6wUAACziwFqq4NgA8AA/eQCAAABA6uprBQAAAABAQGrrwAAAIGmYQMBYAO9cFwAAFwBPgAGwAClBIFbrBmsKqy/AACzcwFqrBpgA8AA/eQCAAABA6w8rL8AAAACAgKsUwAAALQRYAPAAKR9AKxkAAAAgaZhAwFgA71pXAAAXAE+AAbAAKUFgVusxKzirWYAAKGhAWqsxWADwAD95AIAAAEDrPOtZgAAAAICAq0DAAAAtBFgA8AApH0ArRYAAACAvWADwAD+fgAAYAO9aQE+AUqtVwErBsAApQaBW61rrXyt6AAAwABXRgFqrWxgA8AA/eQCAAABA62JregAAAACAgKtmQAAALQRYAPAAKR9AK2qAAAAgaZhAwFgA708XAAAXAE+AT0crdoWrdMWrcguwABn1MAApJjAAKT+KcAA/ZCD/QEAAYGt4sBVVeMAwAD9CQbAAKUHgVut7a4GrngAAMAAV1EBaq3uYAPAAP3kAgAAAQOuEq54AAAAAwICriIAAAC0EWADwACkfQCuNQAAAIC9YAPAAP5+AAGuRwAAAJtAYAPAAPrRAWquT2ADwAD60QBgA708AT4BSq5dARyubhauZC7AAGfUwACkmMAApP5LAQABga5vwFVWXwDAAP2BBsAApQmBW659rpKutAEAs3gBaq5+YAPAAP3kAgAAAQOurK60AAAAAAAAAGADwAD60QFKrq8BKgbAAKUKgVuuua7Oru4BALONAWquumADwAD95AIAAAEDruau7gAAAAAAAABgA8AA+tEBSq7pASoGwAClC4FbrvOvDK8XAQCZ+gFqrvRgA8AA/eQCAAABA68QrxcAAAAAAAAAYAODGwFKrxMBKwAAVVLFAFVTvgBVVMoAVVUJAFVVVgBVVakAVVYlAFVWtABVVusAVVciAFVXVwAAAAoCwAClDoFbrxyvIrMhA8AAZ+UAAAFgAcAApPoAAAEEwAClEIFbr8Kv2waD7ABgA8AA/n4Baq/IYAPAAP5+wAFx4QEFwAClF4Fbr+Cv4LAnAAAAA6/vsCcAAAABAQGwCgAAALQJXQPAAP1tAmADwAD+fmADvTwAAGADwAClDgE/AQkAsBfAAKUNAQABJrAdAYCwHcBVV+VdA8AA/W0CYAPAAP5+YAPAAI7uAAMGwAClEoFbsCywNLErBAGvcwAAAAEDsFaxKwAAAAEBAbBiAAAAg0pgA8AAXbEAAGADwAClDgE+BD0csHeAsHDAVVhTgpgBAAFqsH1gA8AA/n7AAXHhAMAAXbNOsKKwrQAAwABn1F0DwAD9bQJgA8AA/n5gA8AAju4BHLC+gLC3wFVYU7RYAQFgA8AAju4BNLDMA7DMsOUAAAAAAAAAYAPAAI7uAUqw0gEcsNmAsNLAVVhTrKMAAAAAwABd6ADAAF3FPRyw84Cw7MBVWFOCkAEAAWqw92ADwAD+fsABceEAwABdtEqxAQEfsQzAAKUXAQABgbEcwFVYjgAGwAClFIFbsTCxQbIZAACvdAFqsTFgA8AA/eQCAAABA7FQshkAAAABAQGxWgAAAIRAYAPAAF1iAABcAT4EPRyxa4CxZsBVWVawGwEAAWqxg2ADwACkxsABcZYAwABdcz0csZaAsZHAVVlWgpgBAAFqsZxgA8AA/n7AAXHhAMAAXWc9HLGrgLGmwFVZVrRfAgFgA8AAju4CFrHDLsAAZ9TAAKSYwACk/jSxzwOxz7IBAAAAAQEBsd4AAACCamADwACO7gAAXAFKsekBHLHugLHpwFVZVqyUAQABgbH6wFVZ4QDAAF2VAMAAXXI9HLINgLIIwFVZVoKQAQABarIRYAPAAP5+wAFx4QDAAF1oBsAApRWBW7IesjezHwAAwABXUQFqsh9gA8AA/eQCAAABA7JDsx8AAAADAgKyUwAAALQRYAPAAKR9ALJmAAAAgL1gA8AA/n4AAbJ4AAAAm0BgA8AA+tEBarKAYAPAAPrRAGADvTwBPgJJso6CspLAVVqBPgFKsskBKz9KsuABHbLtwABXUQMAAoCy+sBVWmSBswbAVVpyAZtAgrMUwFVagcAApQcAAFVYMwBVWSwAVVo4AFVa3AAAAAMCwAClGIFbs2yzcbOYC8AAZ+cAAAFgAcAA/eQAAAYEwAClGoFbs3GzcQknAGADwAD8lwAEwAClHIFbs3GzcQkowACkmABgA8AA/n4ABMAApR2BW7Nxs3EGKQBdA8AA/TsBYAPAAKUYAWoAXQPAAP07AWADwAClGMABcf8EwAClHoFbs4KzggaD8wBgA8AApRgBagBgA8AApRjAAXHrBMAApR+BW7OIs4gGtMYAYAPAAKUYAWoAYAPAAKUYwAFbvQTAAKUggVuzkbORBqorAGADwAClGAFqAGADwAClGMABW5cBBcAApSSBW7Nxs3GzmAEAAAOzcbOYAAAAAgICs3EAAAQnYAPAAPyXALNxAAAEKGADwAD+fgAAYAPAAKUYAT8DCADAAKUagADAVVvuCADAAKUcgQDAVVv7CQAAwAD9+gAAAAABBsAApSKBW7Nxs3GzmAAAIwAAAAEDs3GzmAAAAAAAAABgA8AA/n4BSgABDwAuwAClHAAAVVw2AFVcZwAAAAECwAClJYFbs5uzqreCB8AAZ+kAAAFgAcAA/eQAAAAADAbAAKUngVuz8bP5te8EAa9zAAAAAQO0FrXvAAAAAQEBtCIAAACDSmADwABdsQAAYAPAAKUlAT4DTrQ/tEQAAIJrYAPAAKUYARy0TYC0RsBVXLSwFwEBYAPAAKUYAWq0ZV0DwAD9OwFgA8AApRjAAXH/AMAAXcZHtHKBtHrAVVzNAwG0nGq0nGADwAClGMABcesAPgFKtKoBHrS1wAClQwEAAYC018BVXLQAAbT6arT6YAPAAKUYwAFbvQA+AUq1CwEetRbAAH3GAQABgLU6wFVctAABtV1qtV1gA8AApRjAAVuXAD4BSrVtAR61eMAAfZsBAAGAtZvAVVy0AD0wta4ftbjAAPwpAQABJLXqAifAAGfqgbXlwFVczQAGwAClKYFbtiK2J7ZFAAKvdAAAAAEDtja2RQAAAAEBAbZAAAAAhEBgA8AAXWIAAFwABsAApSuBW7ZKtl62aAECwABMwQAAAAEDtmi2aAAAAAAAAABgA8AAcvIABsAApSyBW7Zttn+2hwEChMkAAAABA7aHtocAAAAAAAAAYAPAAGL9AAbAAKUtgVu2i7adtqQBAoUBAAAAAQO2pLakAAAAAAAAAGADwABi/QAGwAClLoFbtqi2urbDAQKE4QAAAAEDtsO2wwAAAAAAAABgA8AAYv0ABsAApS+BW7bHttm25AEChOIAAAABA7bktuQAAAAAAAAAYAPAAGL9AAbAAKUwgVu26LcAtwoBAp62AAAAAQO3CrcKAAAAAAAAAF0DwAD9OwFgA8AAYv0ABsAApTGBW7cOtyG3LwECwABW2QAAAAEDty+3LwAAAAAAAABgA8AApisABsAApTKBW7czt0C3SAECreEAAAABA7dIt0gAAAAAAAAAYAPAAGLWAAbAAKUzgVu3TbdWt2EBArN/AAAAAQO3YbdhAAAAAAAAAGADwAD60QAGwAClNIFbt2W3breAAQKE9gAAAAEDt4C3gAAAAAAAAABgA8AA+tEAAABVXJQAVV2vAFVd4ABVXgoAVV4yAFVeWgBVXoIAVV6qAFVe2QBVXwMAVV8rAFVfUwBVX3sAAAAMAsAApTWBW7eFt4u8UwPAAGfrAAABYAHAAP3kAAFgAcAApSULBMAApTeBW7gtuD8Gg+wAYAPAAP5+AWq4M2ADwAD+fsABXL0EwAClOIFbuFO4VgmZ+gBgA4MbAATAAKU5gVu4fLiGCcAATMEBarhbYAPAAP3kAmADwABy8gAEwAClOoFbuJu4rRiE9gFquItgA8AA/eQCYAPAAPrRASsEwAClO4FbuLa40BjAAGfsAGADwAD60QEqBMAApTyBW7jvuPcYhMkBarjWYAPAAP3kAmADwABi/QErBMAApT2BW7kVuRwYhQEBarj8YAPAAP3kAmADwABi/QErBMAApT6BW7k6uUMYhOEBarkhYAPAAP3kAmADwABi/QErBMAApT+BW7lhuWwYhOIBarlIYAPAAP3kAmADwABi/QErBMAApUCBW7mQuZoYnrYBarlxYAPAAP3kAl0DwAD9OwFgA8AAYv0BKwTAAKVBgVu5ubnHGMAAVtkBarmfYAPAAP3kAmADwACmKwErAQXAAKVKgVu5zLnMufUAAAADudq59QAAAAICArngAAAEmfpgA4MbALnqAAAEwABMwWADwABy8gAAYAPAAKU1AT8DCAHAAKU4gADAVWFWCAHAAKU5gQDAVWFiCQG5zMAA/foAAAAABAbAAKVDgVu5+roCuxMEAa9zAAAAAQO6I7sTAAAAAQEBui8AAACDSmADwABdsQAAYAPAAKU1AT4FPRy6RIC6PcBVYcGCmAEAAWq6SmADwAD+fsABXL0AwABds066XbphAACZ+mADgxsBHLpqgLpjwFVhwcAARJEAAAAAwABdyU66j7qaAADAAEzBYAPAAHLyAR66oMAAcvgBAAGAusPAVWHBAD0cuteAutDAVWHBgpABAAFquttgA8AA/n7AAVy9AMAAXbRKuuUBH7rwwAClSgIAAoG6/8BVYfyCuwTAVWIgAAbAAKVFgVu7GLspu+EAAK90AWq7GWADwAD95AIAAAEDuzi74QAAAAEBAbtCAAAAhEBgA8AAXWIAAFwBPgU9HLtTgLtOwFVirLAbAQABartsYAPAAKUYwAFx6wDAAF1zPRy7fIC7d8BVYqyCmAEAAWq7gmADwAD+fsABXL0AwABdZz0cu5GAu4zAVWKsl54BAAEWu6AumfrAAKU4AMAAXXY9HLu1FruqLsAATMHAAKU5r3QBAAGAu8XAVWKsAMAAcvo9HLvVgLvQwFVirIKQAQABarvZYAPAAP5+wAFcvQDAAF1oBsAApUeBW7vmu/u8IwEAs38BarvnYAPAAP3kAgAAAQO8B7wjAAAAAAAAAGADwAD60QFKvAoBIiEcvA4WvAoumfrAAKU4SAEAASsAwAD98QAWvB0WvBkumfrAAKU4hOqDOAbAAKVIgVu8KLxBvFEBAK3hAWq8KWADwAD95AIAAAEDvEq8UQAAAAAAAABgA8AAYtYBSrxNASsAAFVhoQBVYoIAVWNlAFVjxgBVY/0AAAAEAsAApUuBW7yfvKS9LgvAAGftAAABYAHAAP3kAAALBMAApU2BW7ykvKQJJwBgA8AA/JcABMAApU+BW7ykvKQJKMAApJgAYAPAAP5+AATAAKVQgVu8pLykBikAXQPAAP07AWADwAClSwFqAF0DwAD9OwFgA8AApUvAAXKrBMAApVGBW7y4vLgGgm4AYAPAAKVLAWoAYAPAAKVLwAFyGATAAKVSgVu8xLzEBoSbAGADwAClSwFqAGADwAClS8ABcjEEwAClU4FbvM28zQaZCABgA8AApUsBagBgA8AApUvAAXJKBMAApVSBW7zcvNwGwABPuwBgA8AApUsBagBgA8AApUvAAXJjBMAApVWBW7zvvO8Grd0AYAPAAKVLAWoAYAPAAKVLwAFyfATAAKVWgVu8/Lz8BsAAT70AYAPAAKVLAWoAYAPAAKVLwAFylgTAAKVXgVu9Db0NBsAAZ/QAYAPAAKVLAWoAYAPAAKVLwAFcZATAAKVYgVu9IL0gBsAAT7wAYAPAAKVLAWoAYAPAAKVLwAFcgwEFwAClXIFbvKS8pL0uAQAAA7ykvS4AAAACAgK8pAAABCdgA8AA/JcAvKQAAAQoYAPAAP5+AABgA8AApUsBPwMIAMAApU2AAMBVZcUIAMAApU+BAMBVZdIJAADAAP36AAAAAAEGwAClWoFbvKS8pL0uAAAjAAAAAQO8pL0uAAAAAAAAAGADwAD+fgFKAAEPAC7AAKVPAABVZg0AVWY+AAAAAQLAAKVdgVu9Mb1AwABC7QfAAGf1AAABYAHAAP3kAAAAAQXAAKVogVu+D74PvhwAAAADvhq+HAAAAAAAAABgA8AApV0BPwEJAb4PwAD9+gAAAAAGBsAApV+BW71QvWW9bwECwABMwQAAAAEDvW+9bwAAAAAAAABgA8AAcsAABsAApWOBW710vYK9rgACuFgAAAABA72Tva4AAAABAQG9owAAALQRYAPAAHJeAABgA8AAYv0ABsAApWCBW72zvc+95gECwABW7QAAAAEDvea95gAAAAAAAABgA8AAn0wABsAApWGBW73rvf++CgECwABW5wAAAAEDvgq+CgAAAAAAAABgA8AAnN4ABsAApWaBW75avmLAAEKUBAGvcwAAAAEDvoDAAEKUAAAAAQEBvowAAACDSmADwABdsQAAYAPAAKVdAT4DTr6qvq8AAIJrYAPAAKVLARy+uIC+scBVZ3awFwEBYAPAAKVLAWq+0V0DwAD9OwFgA8AApUvAAXKrAMAAXcZHvt6BvubAVWePCAG/CWq/CWADwAClS8ABchgAPgFKvxsBHr8mwAClowEAAYC/SsBVZ3YAAb9uar9uYAPAAKVLwAFyMQA+AUq/fQEev4jAAKYGAQABgL+qwFVndgABv85qv85gA8AApUvAAXJKAD4BSr/jAR6/7sAApeMBAAGAwABAFsBVZ3YAAcAAQDpqwABAOmADwAClS8ABcmMAPgFKwABAUwEewABAXsAApfEBAAGAwABAicBVZ3YAAcAAQK1qwABArWADwAClS8ABcnwAPgFKwABAwAEewABAy8AApbQBAAGAwABA9MBVZ3YAAcAAQRhqwABBGGADwAClS8ABcpYAPgFKwABBLwEewABBOsAApdABAAGAwABBZ8BVZ3YAAcAAQYtqwABBi2ADwAClS8ABXGQAPgFKwABBpAEewABBr8AAffwBAAGAwABB1sBVZ3YAAcAAQfpqwABB+mADwAClS8ABXIMAPgFKwABCEAEewABCG8AAfgkBAAGAwABCP8BVZ3YAPTDAAEJSH8AAQlzAAPwpAQABJMAAQo8CJ8AAZ/aBwABCisBVZ48ABsAApWSBW8AAQsjAAELNwABC6wACr3QAAAABA8AAQtzAAELrAAAAAQEBwABC5gAAAIRAYAPAAF1iAABcAAAAVWaeAFVmyABVZv4AVWcoAFVnUgBVaXoAVWm3AAAABgLAAKVpgVvAAELwwABC/8AARQQHwABn9wAAAWABwAD95AABYAHAAKVdAwTAAKVrgVvAAEM6wABDPgmD8wBgA4N9AATAAKVsgVvAAENmwABDcAnAAEzBAWrAAENEYAPAAP3kAmADwABywAAEwAClbYFbwABDl8AAQ6IJwABW5wFqwABDdmADwAD95AJgA8AAnN4AAQXAAKVxgVvAAEOnwABDp8AAQ+QAAAADwABDtsAAQ+QAAAADAwPAAEO8AAAEg/NgA4N9AMAAQ8cAAATAAEzBYAPAAHLAAMAAQ9gAAATAAFbnYAPAAJzeAABgA8AApWkBPwQIAcAApWuAAMBVapAIAcAApWyBAMBVap4IAcAApW2CAMBVarAJAcAAQ6fAAP36AAAAAAEGwAClb4FbwABD6cAARAPAAEUCAAC4WAFqwABD6mADwAD95AIAAAEDwABEFMAARQIAAAABAQHAAEQkAAAAtBFgA8AAcl4AAGADwABi/QE+BE7AAERDwABESgAAgmpgA708ARzAAERXgMAAREzAVWs1nEQBAAEWwABEYS6D88AApWsAwABya07AAER4wABEfAAAmfpgA70qARbAAESFgcAARH7AVWtQhQq9SknAAESZIRzAAEShgsAARJ3AVWuGSAEAASsAwAD98T4BSsAARLIBHMAARNcWwABExIDAAES5wFVrNaU7wAByYrN2AQABgsAAROPAVWuGALt1P0rAAETzASsAAFVq/wBVbAEAAAABAsAApXKBW8AARQfAAEUWwABGkwfAAGf4AAABYAHAAP3kAAFgAcAApV0AAQXAAKV4AAAAAAQAAAMAAAAAAAAAAABgA8AApXIBPwEJAQDAAP36AAAAAAMGwACldIFbwABFPsAARUvAAEV1AAKzegAAAAEDwABFWsAARXUAAAABAQHAAEVqAAAAtBFgA8AApH0AAGADwABjaQAGwACldYFbwABFesAARZHAAEXEAAKzewAAAAEDwABFqcAARcQAAAABAQHAAEW5AAAAtBFgA8AApH0AAF0DwAD9OwFgA8AAYykABsAApXaBW8AARcnAAEXOwABGkQACs5QAAAABA8AARd7AAEaRAAAABAMDwABF9QAAALQRYAPAAHJeAMAARhoAAAC1F2ADvXgAwABGOQAAAIGmYQMDYAPAAGLWYAPAAP5+YAPAAGFCXAABwABGgAAAAIZdYAPAAPrRAWrAAEaKYAPAAPrRAFwAAABVbGQAVWymAFVs7wBVbXYAAAADAsAApXmBW8AARpbAAEalwABKbAfAAGf5AAABYAHAAP3kAAFgAcAApXIBBMAApXyBW8AARxvAAEcpGKnEwACkmABdA8AA/TsBYAPAAGMpASsBBcAApYIAAAAABAAAAwAAAAAAAAAAAGADwACleQE/AQkBAMAA/foAAAAAAgbAAKV+gVvAAEbgwABG9MAARwABAsAAQN8AAAABA8AARwDAAEcAAAAAAAAAAGADhK4ABsAApYCBW8AARy7AAEdRwABKagAAs3sBasAARy9gA8AA/eQCAAABA8AAR2nAAEpqAAAAAQEBwABHkAAACLQRYAPAAH45AABdA8AA/TsBYAPAAGMpAT4CScAAR6IcwABHtRbAAEemLqnEwACkmMAApXxIAQABKwDAAP1lPgFJwABHxhbAAEfmFsAAR9cWwABHyi7AAEDfwAClfoTFhLOBVcAA/R0+AT0XwABH+S6pxMAApJhqwABICl0DwAD9OwFgA8AAYynAAVvWwAClfD4CTsAASEnAAEhQAACEV2ADglIBFsAASF8WwABIUi7AAEDfwAClfoRXglhJwABIbyIlwABIeoHAAEhzwFVvCWADg88BIiXAAEijgcAASJzAVW8JYAOEEgAcwABI0hbAAEjNFMAASMbAVW8JAQFgA4QSgmuEFUgBAAFqwABI5mADhFKB0QDAAP3xPgE9F8AASPwuqcTAAKSYasAASQ1dA8AA/TsBYAPAAGMpwAFb1sAApXw+AT0XwABJRC6pxMAApJgcwABKKxzAAEmAFsAASWIWwABJVS7AAEDfwAClfoTFhLOAqwEBYAPAAGMpATTAAEmWA8AASZbAAEopAAAAAQEBwABJqAAAAJ72YAOJggAAYAPAAGMpAT4BSsAAScUBJsAAScUBHMAASeiAwABJzMBVbm/AAEyzAQABH8AASfiJgQEAAYLAAEoNwFVwBwAAwAB+nGADwABjKQDAAP0EgK0AAAAAwAD9D8AApXw/SsAASlEBFsAASlguqcTAAKSYwAClfAAAVW4HAFVuOQBVcIkAAAACAsAApYOBW8AASm/AAEp+wABOqQfAAGf6AAABYAHAAP3kAAFgAcAApXIAAQXAAKWJAAAAAAQAAAMAAAAAAAAAAABgA8AApYMBPwEJAQDAAP36AAAAAAIGwAClhYFbwABKvMAAStDAAErcAQLAAEDfAAAAAQPAAErcwABK3AAAAAAAAABgA4SuAAbAAKWHgVvAAErhwABK8sAATqcAALOUAWrAAEriYAPAAP3kAgAAAQPAAEsCwABOpwAAAAQDA8AASxkAAAC0EWADwAByXgDAAEs+AAAAtRdgA714AMAAS10AAACBpmEDA2ADwABi1mADwAD+fmADwABhQlwAAcAAS6QAAACGXWADwAD60QFqwABLrmADwAD60QBcAT4CT8AAS7zAAEvBAAABwABO9F4DAAECAWADiH4BoXFgA8AA+tEAAFwAA8AAS9DAAE2HAAAAAgEBwABL6AAAAIPzYAOIfgABwABL9AAAAKFxYAPAAPrRAWrAAEwAYAPAAPrRd1wBPgVOwABMGMAATB0AAIKUYAPAAGLWARzAAEwqgMAATB/AVXFYwABMswEAARbAAEw7hcAATDbAVXHtgpSIhADAAHJkTsAATE/AAExUAACAvWADwAD+fgEWwABMW4XAAExWwFVx7YC9iIJOwABMdQAAAIMqYAPAAGFCAEnAAEyJhsAATI3AVXH8PgFJwABMoyEcwABMuBbAAEyshcAATKfAVXHthROIhkgBAAErAMAA/fE+AT0VwABMzcBVcoMJHMAATOeAwABM3MBVcVjAAE2LAQABFsAATP2FwABM+MBVce2FE4iGAMAAcnc+AT0VwABNJsBVcoMJH8AATTnAAGGUAAAAAD89HMAATWeCwABNZsBVcXYgAwADh8AATWjAVXIdFMAATW7AVXJdCAAUwABNdMBVcoMJAAAAPR7AAE2OwAByXAQAAxbAAE20LsAAQN/AAKWFgcAATcLAVXFoNMAATd4DwABN3sAAToUAAAADAQHAAE32AAAAgO1gA4h+AALAAE4YAAAAwABI4GADwAD60QFqAGADwAD9oXnAAE4HAAAAoXFgA8AA+tEBagBgA8AA/aF5YAPAAP2hAT4BScAATishhsAATjDAVXOZPgE9HMAATlOEwABORMBVcbwgAgABhcAATlTAVXOKAaFxh8AATmvAVXO0AD8BwABP0oPAAE6awFVxlwAAVXDwAFVxIgBVdB8AAAACAsAApYqBW8AATqzAAE6ywABV8zfAAGf7AAABYAHAAKVpAAFgAcAApXkBBMAApY2BW8AARxvAAEcpGKnEwACkmABdA8AA/TsBYAPAAGMpASsBBcAApZMAAAAABAAAAwAAAAAAAwMDAAAAAIPzWwAAAAAAwABMwVsAAAAAAMAAVudbAABgA8AApYoBPwEJAADAAKVxAwADgADAVXSWgQDAVXSeggDAVXSoAAIGwAClj4FbwABG4MAARvTAAEcAAQLAAEDfAAAAAQPAAEcAwABHAAAAAAAAAABgA4SuAAbAAKWRgVvAAEcuwABHUcAASmoAALN7AWrAAEcvYAPAAP3kAgAAAQPAAEdpwABKagAAAAEBAcAAR5AAAAi0EWADwAB+OQAAXQPAAP07AWADwABjKQE+AknAAEeiHMAAR7UWwABHpi6pxMAApJjAAKV8SAEAASsAwAD9ZT4BScAAR8YWwABH5hbAAEfXFsAAR8ouwABA38AApX6ExYSzgVXAAP0dPgE9F8AAR/kuqcTAAKSYasAASApdA8AA/TsBYAPAAGMpwAFb1sAApXw+Ak7AAEhJwABIUAAAhFdgA4JSARbAAEhfFsAASFIuwABA38AApX6EV4JYScAASG8iJcAASHqBwABIc8BVddxgA4PPASIlwABIo4HAAEicwFV13GADhBIAHMAASNIWwABIzRTAAEjGwFV13AEBYAOEEoJrhBVIAQABasAASOZgA4RSgdEAwAD98T4BPRfAAEj8LqnEwACkmGrAAEkNXQPAAP07AWADwABjKcABW9bAAKV8PgE9F8AASUQuqcTAAKSYHMAASiscwABJgBbAAEliFsAASVUuwABA38AApX6ExYSzgKsBAWADwABjKQE0wABJlgPAAEmWwABKKQAAAAEBAcAASagAAACe9mADiYIAAGADwABjKQE+AUrAAEnFASbAAEnFARzAAEnogMAASczAVXVCwABMswEAAR/AAEn4iYEBAAGCwABKDcBVdtoAAMAAfpxgA8AAYykAwAD9BICtAAAAAMAA/Q/AAKV8P0rAAEpRARbAAEpYLqnEwACkmMAApXwAAFV02gBVdQwAVXdcAAAAAgLAAKWUgVvAAE6swABOssAAVfM3wABn/AAAAWABwACligABYAHAAKWDAAEFwAClmwAAAAAEAAADAAAAAAADAwMAAAAAg/NbAAAAAADAAEzBWwAAAAAAwABW51sAAGADwACllAE/AQkAAMAApZMDAAOAAMBVd62BAMBVd7WCAMBVd78AAwbAAKWWgVvAAE6ywABOsgAAErN7AADAAKV1AQMAAAAAAAEBAQAAAAi0EWADwACkfQAAXQPAAP07AWADwABjKQAGwAClmYFbwABKvMAAStDAAErcAQLAAEDfAAAAAQPAAErcwABK3AAAAAAAAABgA4SuAAbAAKWXgVvAAErhwABK8sAATqcAALOUAWrAAEriYAPAAP3kAgAAAQPAAEsCwABOpwAAAAQDA8AASxkAAAC0EWADwAByXgDAAEs+AAAAtRdgA714AMAAS10AAACBpmEDA2ADwABi1mADwAD+fmADwABhQlwAAcAAS6QAAACGXWADwAD60QFqwABLrmADwAD60QBcAT4CT8AAS7zAAEvBAAABwABO9F4DAAECAWADiH4BoXFgA8AA+tEAAFwAA8AAS9DAAE2HAAAAAgEBwABL6AAAAIPzYAOIfgABwABL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j4CZisBWBbqAloaqAAbAAKcYgcuZnpm9miAAAIX9AWqZn2ADwAD95AIAAAEDmc+aIAAAAAEBAZnhAAAAg/NgA4bVAABgA8AATiQBPgFKme0BH5n4wABPAQEAARaaFoCaEcBWBheAlobXAAbAAKcZgcuaJZpEmy4AAIXRAWqaJmADwAD95AIAAAEDmlybLgAAAAEBAZp0AAAAg/NgA4ZBAABgA8AATiQBPgNOmpmapQAAhc9dA8AA/TsBYAPAAE4kARyapy7AAGhNwACm9wEAARaauYCatMBWBnSFz4ZDAMAApw1JmsscmtuBms/AVgaLSAEAASsAwAD9ZUqa5AErP0qa9QEfmwDAAE7yAQABgZsewFYGiwAGwACnGoHLmzObUp4zAACGCwFqmzRgA8AA/eQCAAABA5thnjMAAAABAQGbcAAAAIPzYAOHIgAAYAPAAE4kAT4HSZt8IRabhoCbgcBWByCEIockPgFKm5cBHJueLpgMAQABgJuwwFYHIADAAKcLP06bypvSAACF3GADwABi1gEcm98Wm9QutBHAAKcCwABMswEAARab8ICb68BWByCF3IclAMAApH9OnAecEQAAhd1gA8AAYtYBHJweFpwTLrQRwACnAsAATLMBAAEWnC+AnCrAVgcghd2HJgDAAKR/TpxYnF0AAINoXQPAAP07AWADwABOJAExnHNgA8AATiQATpyUnJsAACldA8AA/TsBYAPAAE4kATGcsWADwABOJABGnLmc4ZzKAAAAg9RgA4cwABac2ICc08BWByCD1YcnPgZOnPydAAAAg9ZgA8AATiQBHJ0CLprCAQABFp0OhZ0IwFYIGIPWhzIAwACnCkmdGhydIoadHsBWCDVIAQABKwDAAE45Sp0rASs/PRydQ4OdPsBWB9NWAQABhp1HwFYINQDAAP1MTp1mnWwAAICWYAPAAE4kARydbi6awgEAARadeoWddMBWCBiAloczAMAApwpJnYgcnZKHnYzAVgiZSAEAASsAwABOOUqdmwErPz0cnbWEna7AVgf0VgEAAYeducBWCJkAwAD9TEqdywEfndbAAE7LAwADHJ4FFp31LrR8wACm98AApwiszQIAAoGeDcBWB2WCnhbAVgecALl+g54iwFYH04SeKMBWB/QABsAApxuBy544nlegVwAAhgkBap45YAPAAP3kAgAAAQOeZqBX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bobAAERhwFYhwkgBAAErAMAATjlKwABEdwErPz0cwABEl4PAAESKwFYf7oC/AgACFsAARKKFwABEmMBWIZaAvYiChsAARKrAViHCAMAA/YJOwABEyMAARNYAAJ8DYAPAAPrRASIcwABE8RbAAETqFsAARN2AwABE2MBWHzaFJoPUYcAA/WtIAQABlADAAP27ACXAAEUaFsAARRMWwABFBoDAAEUBwFYfNoUmg9SAw8AA/SFgA4SNTsAARWLAAEVrAAC9GV0DwAD9bQJgA71OYAPAAE4kATLAAEWWYAO9TmADwABOJABPwABFn8AARaQAAAHAAGhQYQMCYAODnGADwABOJFwAA8AARbHAAEYcAAAAAgICwABFuwAAAISbYAODnADAAEXVAAAAhhVgA8AATiQAAFwBPgE9HMAARe+GwABF58BWIriAvwIAAhzAAEX7FsAARfAutBHAAKcCwABNigEAARTAAEYEwFYjFAgAAMAApIMUwABGDsBWIyIJAADAAP2CScAARiMhhcAARijAViJRPgFGwABGPwDAAEZNAAAAhJtgA4OcABbAAEZagcAARlbAVh9rhIuDLkE+AknAAEZsFsAARnYUwABGcMBWI5oIAIQeg65CwABGgAA/ScAARpIhHMAARqgWwABGnBTAAEaWwFYjmggAhRODoEgBAAErAMAA/fE+AT0cwABGyofAAEa9wFYi6yACAAIUwABGy8BWI5oIABzAAEbSLprCAQABFsAARt4UwABG2MBWI5oIAIUTg6AAwACnCgAAPz9OwABHKAAAAMAAW59gA8AATswATsAAR2fAAEdyAAC9HF0DwAD9OwFgA8AAUAQBMcAAR45gA8AAUAQARsAAR5bAAEfMwABHqgAAAIUTYAOEYQAWwABHvoDAAEe5wFYfNoUmg9Q+AUnAAEfUJcAAR+QUwABH2MBWJJEKAGADhG8+AT0cwABIE4fAAEgGwFYi6yACAAIWwABIIBTAAEgUwFYkkQoBYAOEb4SbhHQcwABIJy6awgEAARbAAEg5FMAASC3AViSRCgFgA4RvgJaEcgDAAKcKAABJwABITyXAAEhfFMAASFPAViSRCgBgA4R+PgE9FcAASIHAViRPCBzAAEieLsAAaE/AAKb3AwADFsAASNUUwABIycBWJJEKAWADhH6CSYSDFsAASPUUwABI6cBWJJEKAWADhH5bhIEWwABJIhbAAEkYFMAASQzAViSRCgFgA4R+W4SBhX2FpQDAAKcPScAASTclwABJRxTAAEk7wFYkkQoAYAOEjT4BPRXAAElvwFYkTwgcwABJjC7AAGhPwACm9wMAAxbAAEnDFMAASbfAViSRCgFgA4SNgkmEkhbAAEnjFMAASdfAViSRCgFgA4SNW4SQFsAAShcWwABKDhbAAEn/gMAASfrAVh82hQqDhYTJg0qFLIkoAMAApw9JwABKNCXAAEpEFMAASjjAViSRCgBgA4SlPgNOwABKesAASoQAAIXKYAPAAE4kARzAAEqGLprCAQABFsAASqIWwABKmBTAAEqMwFYkkQoBYAOEpYVghKeFyoe/AMAApwpOwABKycAAStEAACJgA8AATiQBIyEcwABK8RbAAErpFsAASt8UwABK08BWJJEKAWADhKWFYISnIofASAEAASsAwAD98RzAAEsHLprCAQABFsAASyMWwABLGRTAAEsNwFYkkQoBYAOEpYVghKcih8AAwACnCisBYAPAAE4kPRzAAEtTFMAAS0jAViRiCQBWAQABH8AAS1vAAFATAgACFMAAS3TAViZZCwAUwABLf8BWJp4MAAAAwAD9TEnAAEuXJcAAS6cUwABLm8BWJJEKAGADhGg+A07AAEvSwABL4gAAqWtgA8AA/n4BJMAAS/4DFsAAS+uBwABL58BWH2uAvYMhJ4FqFsAAS/iAwABL88BWHzaAvYOBPRzAAEwcFsAATBMWwABMCC60EcAApwKlEMAApJWvOQMAAx7AAEw8wACcvQEAARTAAExawFYkkQoBYAOEaABqwABMgGADpT/AAMitMsAATKpbWwEnqWsUwABMvsBWJ3ILAAC2B0rAAEzZAR/AAEzkwACJKAAAAABJwABNESXAAE0hFMAATRXAViSRCgBgA4ScPgNOwABNWsAATWMAAIJwYAOIfgEWwABNcRTAAE1lwFYkkQoBYAOEnIJwhJ5OwABNlsAATZ8AAIYVYAPAAE4kARzAAE2hLprCAQABFsAATbAUwABNp8BWKEULAIUTiIYAwACnCknAAE3GIRzAAE3TFMAATcrAVihvDABIAQABKwDAAE45PgE9HMAATfoWwABN6C7AAGhMwACm98AApwWAvwIAAhTAAE37wFYoRQsAFMAATgfAVihvDAAAwAD9gj4DTsAATsXA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V1qzCAHAAKmHgQDAV1rBCQHAAKQhwAD9+gAAAAACBsAAqYmBZMAApGbAAKRuwAClsAQBwABNxQAAAAEDwACklcAApbAAAAABAQHAAKShAAAAg0pgA8AAXbEAAGADwACpgwE+BT0cwACktoDAAKSvwFdbLoKYAQABasAApLxgA8AA/n7AAXORAMAAXbNOwACk3cAApOsAALPLYAOIqQEmwACk3QEcwACk9IDAAKTtwFdbLsAARJgAAAAAwABd0WADiKlOwAClF8AApSUAALUlYAPAAKkiAR7AAKUrwACpKgEAAYDAAKVJwFdbLgA9HMAApV2AwAClVsBXWy6CkAEAAWrAAKVhYAPAAP5+wAFzkQDAAF20SsAApWsBH8AApXbAAKmNAgACgcAApY/AV1txgsAApZ7AV1unAAbAAKmLgWTAAKW1wAClusAApksAAMAAaJUAAAABA8AApcTAAKZLAAAAAQEBwAClzgAAAIRAYAPAAF1iAABcAT4EPRzAAKXfgMAApdrAV1xJgpgBAAFqwACl5WADwAD+fsABc5EAwABdZz0cwACl9IDAAKXvwFdcScAARHYBAAEWwACmAi6zy8AAqYYAwABdfj0cwACmJBbAAKYWLrUlwACph8AAaJUBAAGAwACmL8BXXEkAwACpLD0cwACmP4DAAKY6wFdcSYKQAQABasAApkNgA8AA/n7AAXORAMAAXWgAAFdbAgBXXB0AV1z8AAAAAgLAAKmOgWTAAKZQwACmVsAAqZADwABoogAAAWABwAD95AAABATAAKmQgWTAAKaAwACmmQaD7ABgA8AA/n4BasAApoZgA8AA/n7AAXOWBMAAqZGBZMAAprHAAKa3CYJJAGADhBIABMAAqZKBZMAAptDAAKbdCbUlAGADwACpIgAEwACpk4FkwACm/MAApwIJhK8AYAOCwgABBcAAqZmBZMAApwfAAKcHwACnRgAAAAPAAKcYwACnRgAAAAMDA8AApx4AAASCSWADhBIAwACnKwAABLUlYAPAAKkiAMAApz8AAASEr2ADgsIAAGADwACpjgE/BAgBwACpkYAAwFddyggBwACpkoEAwFdd2AgBwACpk4IAwFdd6AkBwACnB8AA/foAAAAAAgbAAKmVgWTAAKdLwACnU8AAqMUEAcAATcUAAAABA8AAp3PAAKjFAAAAAQEBwACnfwAAAINKYAPAAF2xAABgA8AAqY4BPgY9HMAAp5SAwACnjcBXXl+CmAEAAWrAAKeaYAPAAP5+wAFzlgDAAF2zTsAAp7HAAKe4AACCSWADhBIBJsAAp7EBHMAAp8GAwACnusBXXl/AAESTAAAAAMAAXctgA4QSTsAAp+bAAKf0AAC1JWADwACpIgEewACn+sAAqSoBAAGAwACoGMBXXl8ATsAAqDrAAKhBAACEr2ADgsIBHMAAqEqAwACoQ8BXXl/AAESXAAAAAMAAXdA9HMAAqHiAwACoccBXXl+CkAEAAWrAAKh8YAPAAP5+wAFzlgDAAF20SsAAqIYBH8AAqJHAAKmZAwADgcAAqKPAV16igsAAqKvAV17Yg8AAqLrAV18CAAbAAKmXgWTAAKjKwACoz8AAqY4AAMAAaJUAAAABA8AAqNnAAKmOAAAAAQEBwACo4wAAAIRAYAPAAF1iAABcAT4FPRzAAKj0gMAAqO/AV1+vgpgBAAFqwACo+mADwAD+fsABc5YAwABdZz0cwACpCYDAAKkEwFdfr8AARHEBAAEWwACpGS6CScAAqZEAwABdeD0cwACpNBbAAKkmLrUlwACpksAAaJUBAAGAwACpP8BXX68AwACpLD0cwACpT4DAAKlKwFdfr8AARHUBAAEWwACpcC6Er8AAqZMAwABdfT0cwACpgoDAAKl9wFdfr4KQAQABasAAqYZgA8AA/n7AAXOWAMAAXWgAAFdeMwBXX4MAV2CJAAAAAgLAAKmagWTAAKmTwACpmcAArhgDwABoowAAAWABwAD95AAABgTAAKmcgWTAAKnIwACp5gaD7ABgA8AA/n4BasAAqc5gA8AA/n7AAXObBMAAqZ2BZMAAqfvAAKoGCZkIAGADg30ABMAAqZ6BZMAAqiHAAKolCYKUAGADiSQABMAAqZ+BZMAAqj7AAKpLCbUlAGADwACpIgAEwACpoIFkwACqasAAqnAJhK8AYAOCwgAEwACpoYFkwACqf8AAqoYJhCIAYAPAAPrRAAEFwACpp4FkwACqi8AAqovAAKr8AAAAA8AAqqHAAKr8AAAABQQEwACqrgAABJkIYAODfQDAAKrAAAAEgpRgA4kkAMAAqssAAAS1JWADwACpIgDAAKrfAAAEhK9gA4LCAAHAAKrzAAAEhCJgA8AA+tEBagBgA8AA/aF5YAPAAKmaAT8GCAHAAKmdgADAV2GJCAHAAKmegQDAV2GXCAHAAKmfggDAV2GlCAHAAKmggwDAV2G1CAHAAKmhhADAV2HECQHAAKqLwAD9+gAAAAACBsAAqaOBZMAAqwHAAKsJwACtCQQBwABNxQAAAAEDwACrLsAArQkAAAABAQHAAKs6AAAAg0pgA8AAXbEAAGADwACpmgE+CD0cwACrT4DAAKtIwFdiXYKYAQABasAAq1VgA8AA/n7AAXObAMAAXbNOwACracAAq3UAAJkIYAODfQEcwACrfoDAAKt3wFdiXcAARJMAAAAAwABdy07AAKulwACrqgAAgpRgA4kkASbAAKulARzAAKuzgMAAq6zAV2JdwABEoAAAAADAAF3dYAOJJE7AAKvawACr6AAAtSVgA8AAqSIBHsAAq+7AAKkqAQABgMAArAzAV2JdAE7AAKwuwACsNQAAhK9gA4LCARzAAKw+gMAArDfAV2JdwABElwAAAADAAF3QTsAArGrAAKxyAACEImADwAD60QEcwACse4DAAKx0wFdiXa+RAAAAAMAAXb89HMAArJKAwACsi8BXYl2CkAEAAWrAAKyWYAPAAP5+wAFzmwDAAF20SsAArKABH8AArKvAAKmnBQAEgcAArMLAV2KggsAArM/AV2LMg8AArNXAV2MChMAArOTAV2MsAYQihcAArP3AV2NYBsAAqaWBZMAArQ7AAK0TwACuFgAAwABolQAAAAEDwACtHcAArhYAAAABAQHAAK0nAAAAhEBgA8AAXWIAAFwBPgc9HMAArTiAwACtM8BXZBmCmAEAAWrAAK0+YAPAAP5+wAFzmwDAAF1nPRzAAK1NgMAArUjAV2QZwABEcQEAARbAAK1dLpkIwACpnQDAAF14PRzAAK10gMAArW/AV2QZwABEfgEAARbAAK2GLoKUwACpngDAAF2KPRzAAK2fFsAArZEutSXAAKmfwABolQEAAYDAAK2qwFdkGQDAAKksPRzAAK26gMAArbXAV2QZwABEdQEAARbAAK3bLoSvwACpoADAAF19PRzAAK3tgMAArejAV2QZr5gBAAEWwACt9y6EIsAAqaEAwABdbD0cwACuCoDAAK4FwFdkGYKQAQABasAArg5gA8AA/n7AAXObAMAAXWgAAFdiMQBXY+0AV2U/AAAAAgLAAKmogWTAAK4bwACuIcAAsUsDwABopAAAAWABwAD95AAABATAAKmqgWTAAK5NwACuaAaD7ABgA8AA/n4BasAArlNgA8AA/n7AAXOgBMAAqauBZMAArnzAAK5/CZn6AGADgxsABMAAqayBZMAArpvAAK6oCYUsAF0DwAD9OwFgA4jpAATAAKmtgWTAAK7HwACuzQmErwBgA4LCAAEFwACps4FkwACu0sAArtLAAK8QAAAAA8AAruXAAK8QAAAAAwMDwACu6wAABJn6YAODGwDAAK71AAAEhSxdA8AA/TsBYAOI6QDAAK8JAAAEhK9gA4LCAABgA8AAqagBPwQIAcAAqauAAMBXZhIIAcAAqayBAMBXZiAIAcAAqa2CAMBXZjUJAcAArtLAAP36AAAAAAIGwACpr4FkwACvFcAArx3AALB8BAHAAE3FAAAAAQPAAK8/wACwfAAAAAEBAcAAr0sAAACDSmADwABdsQAAYAPAAKmoAT4GPRzAAK9ggMAAr1nAV2asgpgBAAFqwACvZmADwAD+fsABc6AAwABds07AAK95wACvfQAAmfpgA4MbARzAAK+GgMAAr3/AV2aswABEkQAAAADAAF3JTsAAr63AAK+7AACFLF0DwAD9OwFgA4jpARzAAK/EgMAAr73AV2aswABEoQAAAADAAF3eTsAAr/LAAK/5AACEr2ADgsIBHMAAsAKAwACv+8BXZqzAAESXAAAAAMAAXdA9HMAAsDCAwACwKcBXZqyCkAEAAWrAALA0YAPAAP5+wAFzoADAAF20SsAAsD4BH8AAsEnAAKmzAwADgcAAsF3AV2bvgsAAsGLAV2cbg8AAsHHAV2dOAAbAAKmxgWTAALCBwACwhsAAsUkAAMAAaJUAAAABA8AAsJDAALFJAAAAAQEBwACwmgAAAIRAYAPAAF1iAABcAT4FPRzAALCrgMAAsKbAV2f7gpgBAAFqwACwsWADwAD+fsABc6AAwABdZz0cwACwwIDAALC7wFdn+5eeAQABFsAAsM8umfrAAKmrAMAAXXY9HMAAsN6AwACw2cBXZ/vAAER/AQABFsAAsPEuhSzAAKmsAMAAXYs9HMAAsQqAwACxBcBXZ/vAAER1AQABFsAAsSsuhK/AAKmtAMAAXX09HMAAsT2AwACxOMBXZ/uCkAEAAWrAALFBYAPAAP5+wAFzoADAAF1oAABXZoAAV2fPAFdo0wAAAAICwACptIFkwACxTsAAsVPAALIYC8AAaKUAAAFgAcAA/eQAAA0EwACptoFkwACxU8AAsVMJJwBgA8AA/JcABMAAqbiBZMAAsVPAALFTCSjAAKieAGADwAD+fgAEwACpuYFkwACxU8AAsVMGKQBdA8AA/TsBYAPAAKm0AWoAXQPAAP07AWADwACptMABczkEwACpuoFkwACxYMAAsWAGwABTOgBgA8AAqbQBagBgA8AAqbTAAV93BMAAqbuBZMAAsW3AALFtBq6dAGADwACptAFqAGADwACptMABX6kEwACpvIFkwACxfMAAsXwGhlQAYAPAAKm0AWoAYAPAAKm0wAFf2wTAAKm9gWTAALGKwACxigawkQBgA8AAqbQBagBgA8AAqbTAAV/0BMAAqb6BZMAAsZnAALGZBrM7AGADwACptAFqAGADwACptMABYA0EwACpv4FkwACxrMAAsawGwABopgBgA8AAqbQBagBgA8AAqbTAAWBzBMAAqcCBZMAAscfAALHHBrB4AGADwACptAFqAGADwACptMABYI0EwACpwYFkwACx3sAAsd4GwABTLgBgA8AAqbQBagBgA8AAqbTAAWD1BMAAqcKBZMAAsfPAALHzBsAAUy0AYAPAAKm0AWoAYAPAAKm0wAFhDwTAAKnDgWTAALILwACyCwbAAFM0AGADwACptAFqAGADwACptMABYSkBBcAAqceBZMAAsVPAALFTwACyGAEAAAPAALFTwACyGAAAAAICAsAAsVMAAAQnYAPAAPyXAMAAsVMAAAQoYAPAAP5+AABgA8AAqbQBPwMIAMAAqbaAAMBXax0IAMAAqbiBAMBXaywJAADAAP36AAAAAAEGwACpxYFkwACxU8AAsVPAALIYAAAjAAAAAQPAALFTwACyGAAAAAAAAABgA8AA/n4BSgABDwAuwACpuAAAV2tpAFdrpAAAAAECwACpyIFkwACyG8AAsiHAALQ2A8AAaKcAAAFgAcAA/eQAAAMEwACpyoFkwACyQsAAslIGg+wAYAPAAP5+AWrAALJIYAPAAP5+wAFzpQTAAKnLgWTAALJpwACybQmClABgA4jpAATAAKnMgWTAALKEwACyiAmCawBgA8AAqdMAAQXAAKnSgWTAALKNwACyjcAAsqsAAAADwACylcAAsqsAAAACAgLAALKbAAAEgpRgA4jpAMAAsqYAAASCa2ADwACp0wAAYAPA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wABHuIPAAEeqwFexlWHAAP1rAIXAAEfLwFeyAQAAwABNRj4CPRzAAEgBFsAAR/MutYbAAKrAr7kBAAEewABIF8AAaC8CAAIcwABIQxbAAEg4LrQRwACqvsAATnMBAAEWwABIZhbAAEhYLqsTwACqv4UKvUoAwACEC2rAAEiPYAPAAGkgwADwyQAAwABNRj0cwABIrhbAAEigLrWGwACqwMAAaLkBAAFqwABIxmADwABndMABPHIAwAC0UQbAAKpygc/AAEjqwABI+8AAS2gAAMAAWPABasAASOtgA8AA/eQCAAABA8AASQvAAEtoAAAAAQEBwABJFAAAAIC9YAOItAAAXAE+Ak7AAEktwABJNAAAgmpgA708ARzAAElJFsAAST4utBHAAKq+wABPowMAAhbAAElYLqsTwACqv4DAAElnwFezuwGbQCrAAIQKScAASYEhHMAASYyBwABJhcBXs89IAQABKwDAAP3xPgFJwABJnRbAAEmogcAASaHAV7PPsza9RD4BPRzAAEnMFsAASb4utYbAAKrAr7kBAAEewABJ4sAAaDMBAAEmwABJ+QGBwABJ+cBXs89gA71RAADAAE1GPgE9HMAASigWwABKGi61hsAAqsCvuQEAAR7AAEo+wABoMAEAAYHAAEpRwFezzwAAwABNRj4CPRzAAEqEFsAASnYutYbAAKrAr7kBAAEewABKmsAAaC8CAAIcwABKxhbAAEq7LrQRwACqvsAATnMBAAEWwABK6RbAAErbLqsTwACqv4UKvUoAwACEC2rAAEsSYAPAAGkgwADwyQAAwABNRj0cwABLMRbAAEsjLrWGwACqwMAAaLkBAAFqwABLSWADwABndMABPHIAwAC0UQbAAKpzgc/AAEttwABLfsAATe4AAMAAWPEBasAAS25gA8AA/eQCAAABA8AAS47AAE3uAAAAAQEBwABLlwAAAIC9YAOItAAAXAE+Ak7AAEuwwABLtwAAgmpgA708ARzAAEvMFsAAS8EutBHAAKq+wABPowMAAhbAAEvbLqsTwACqv4DAAEvqwFe1jwGbQCnAAIQKScAATAMhHMAATA6BwABMB8BXtaNIAQABKwDAAP3xPgFJwABMHxbAAEwqgcAATCPAV7Wjh469Qz4BPRzAAExLFsAATD0utYbAAKrAr7kBAAEewABMYcAAaDEBAAEmwABMeQGB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NAAAgmpgA708ARzAAElJFsAAST4utBHAAKq+wABPowMAAhbAAElYLqsTwACqv4DAAElnwFgHDQGbQCrAAIQKScAASYEhHMAASYyBwABJhcBYByFIAQABKwDAAP3xPgFJwABJnRbAAEmogcAASaHAWAchsza9RD4BPRzAAEnMFsAASb4utYbAAKrAr7kBAAEewABJ4sAAaDMBAAEmwABJ+QGBwABJ+cBYByFgA71RAADAAE1GPgE9HMAASigWwABKGi61hsAAqsCvuQEAAR7AAEo+wABoMAEAAYHAAEpRwFgHIQAAwABNRj4CPRzAAEqEFsAASnYutYbAAKrAr7kBAAEewABKmsAAaC8CAAIcwABKxhbAAEq7LrQRwACqvsAATnMBAAEWwABK6RbAAErbLqsTwACqv4UKvUoAwACEC2rAAEsSYAPAAGkgwADwyQAAwABNRj0cwABLMRbAAEsjLrWGwACqwMAAaLkBAAFqwABLSWADwABndMABPHIAwAC0UQbAAKrkgc/AAEttwABLfsAATe4AAMAAWPEBasAAS25gA8AA/eQCAAABA8AAS47AAE3uAAAAAQEBwABLlwAAAIC9YAOItAAAXAE+Ak7AAEuwwABLtwAAgmpgA708ARzAAEvMFsAAS8EutBHAAKq+wABPowMAAhbAAEvbLqsTwACqv4DAAEvqwFgI4QGbQCnAAIQKScAATAMhHMAATA6BwABMB8BYCPVIAQABKwDAAP3xPgFJwABMHxbAAEwqgcAATCPAWAj1h469Qz4BPRzAAExLFsAATD0utYbAAKrAr7kBAAEewABMYcAAaDEBAAEmwABMeQGBwABMecBYCPVgA71OAADAAE1GPgE9HMAATKgWwABMmi61hsAAqsCvuQEAAR7AAEy+wABoMgEAASbAAEzXAYHAAEzXwFgI9WADvVEAAMAATUY+Aj0cwABNChbAAEz8LrWGwACqwK+5AQABHsAATSDAAGgvAgACHMAATUwWwABNQS60EcAAqr7AAE5zAQABFsAATW8WwABNYS6rE8AAqr+FCr1KAMAAhAtqwABNmGADwABpIMAA8MkAAMAATUY9HMAATbcWwABNqS61hsAAqsDAAGi5AQABasAATc9gA8AAZ3TAATxyAMAAtFEGwACq5YHPwABN88AATgTAAFHZAADAAFjoAWrAAE30YAPAAP3k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2oO1nxtIAQABFsAAQS4uasAArAwAwAD98cAAQRrAAEEzAD0cwABBOy7AAGkPAgACgMAAQUfAWIjagcAAQVTAWIjqAMAArCNJwABBYxzAAEF4FsAAQWcuwABpCsAArBFIAQABKwDAAP3xPgFKwABBiQEjgcAAQZDAWIjqasAAQZtgA8AAi+DAAWgKasAAQahgA8AAi+DAAQuDAWADwACL4D9AIRzAAEHFFsAAQcEugpDAAKwPSAEAASsAwAD98cAAQcHAAEHMAErAAEHTAS4GwACsHYHSwABCZsAAQm/AAENyAADAAFxJAAAAAQPAAEJ9wABDcgAAAAEBAcAAQoMAAACaTWADwAD60QAAYAPAAIvgAT4GQB7AAEKawABaNAIAAieaUhbAAEKrLmrAAKwMAMAAQprAAEKxAEAewABCv8AAWjQCAAInnAUWwABC2hbAAELULmrAAKwMg7WfGwDAAEK/wABC3wA9HMAAQucuwABpDwIAAhbAAELzLmrAAKwMgMAAQvrAWIo2AMAArCNJwABDCRzAAEMeFsAAQw0uwABpCsAArBFIAQABKwDAAP3xPgFKwABDLwFqwABDNmADwACL4MABZ80/QCEcwABDVRbAAENRLoKQwACsD0gBAAErAMAA/fHAAENRwABDXABKwABDYwEuBsAArB6B0sAAQ/zAAEQFwABFFAAAwABcTAAAAAEDwABEGcAARRQAAAABAQHAAEQfAAAAmk1gA8AA+tEAAGADwACL4AE+BkAewABENsAAi9wBAAEWwABESy5qwACsDADAAEQ2wABEUQBAHsAARF/AAFo0AgACJ5wFFsAARHoWwABEdC5qwACsDIO1nxsAwABEX8AARH8APRzAAESHLsAAaQ8CAAIWwABEky5qwACsDIDAAESawFiLXQDAAKwjScAARKkcwABEvhbAAEStLsAAaQrAAKwRSAEAASsAwAD98T4BSsAARM8BasAARNZgA8AAi+DAAWgKP0AhHMAARPcWwABE8y6CkMAArA9IAQABKwDAAP3xwABE88AARP4ASsAARQUBLgbAAKwfgdLAAEWiwABFq8AARvYAAMAAXE0AAAABA8AARcfAAEb2AAAAAQEBwABFzQAAAJpNYAPAAPrRAABgA8AAi+ABPgdAHsAAReTAAIvcAQABFsAARfkuasAArAwAwABF5MAARf8AQB7AAEYNwABaNAIAAieA9BbAAEYhFsAARhsuasAArAyDtZ8bAMAARg3AAEYmAEAewABGNMAAWjQCAAInnAUWwABGVBbAAEZPFsAARkkuasAArAyDtZ8bg7WfGwDAAEY0wABGWQA9HMAARmEuwABpDwIAAhbAAEZtLmrAAKwMgMAARnTAWIyBAMAArCNJwABGgxzAAEaYFsAARocuwABpCsAArBFIAQABKwDAAP3xPgFKwABGqQFqwABGsGADwACL4MABaAM/QCEcwABG2RbAAEbVLoKQwACsD0gBAAErAMAA/fHAAEbVwABG4ABKwABG5wEuBsAArCCB0sAAR3PAAEd8wABIVQAAwABcRwAAAAEDwABHlcAASFUAAAABAQHAAEebAAAAmk1gA8AA+tEAAGADwACL4AE+BUAiFsAAR70WwABHuBbAAEeyLmrAAKwMgpSfIJ2Xn6kBHsAAR8rAAFo0AgACJ4QrFsAAR9ouasAArAwAwABHssAAR+AAPRfAAEfoLoKQHMAAR/wWwABH7i6FLMAArA2WWwEAARbAAEgBLmrAAKwMAMAAi/XAAKwPPRzAAEgNLsAAaQ8CAAIWwABIGS6CkMAArA+AwABIHsBYjdwAwACsI0AhHMAASDgWwABINC6CkMAArA9IAQABKwDAAP3xwABINMAASD8ASsAASEYBLgbAAKwhgdLAAEjRwABI2sAASmQAAMAAXEsAAAABA8AASPjAAEpkAAAAAQEBwABI/gAAAJpNYAPAAPrRAABgA8AAi+ABPghAHsAASRXAAIvcAQABFsAASSouasAArAwAwABJFcAASTAAQB7AAEk+wABaNAIAAidjFsAASVIWwABJTC5qwACsDIO1nxsAwABJPsAASVcAQCEcwABJcxbAAEllLoUswACsDUgBAAFqwABJdmADwACL7cABDFoAwAD98cAASWXAAEmGAD0XwABJji6CkBzAAEmiFsAASZQuhSzAAKwNllsBAAEWwABJpy5qwACsDADAAIv1wACsDz0cwABJsy7AAGkPAgACFsAASb8ugpDAAKwPgMAAScTAWI7uAMAArCNJwABJ1CIiIYDAAEnZwFiO7gAhHsAASebAAKuuAQABFsAASfgWwABJ9C6CkMAArA+DtZ8bAAAcwABKEhbAAEoBLsAAaQrAAKwRSAEAASsAwAD98T4BSsAASiMBasAASipgA8AAi+DAAQuDP0AhHMAASkcWwABKQy6CkMAArA9IAQABKwDAAP3xwABKQ8AASk4ASsAASlUBLgbAAKwigdLAAEscwABLJcAATRcAAMAAXEgAAAABA8AASzjAAE0XAAAAAQEBwABLPgAAAJpNYAPAAPrRAABgA8AAi+ABPglOwABLVMAAS1oAAJKFYAOfAAEWwABLXC5qwACsDEnAAEtnIR7AAEtswABaNAIAAieBaoHAAEt6wFiQxQA+AkAWwABLl4HAAEuRwFiQxZ2inxHAAEuRwABLrAA9icAAS7XAWJDFFsAAS8OBwABLvcBYkMWDtZ8bP0AewABL2sAAWjQCAAIngWqBwABL6MBYkMUAwABL2sAAS+4AScAAS/UWwABMBBbAAEv/gcAAS/nAWJDFg7WfG52inxE+AT2JwABMI8BYkMUWwABMMYHAAEwrwFiQxYO1nxs/PRfAAExCLoKQHMAATFYWwABMSC6FLMAArA2WWwEAAYHAAExbwFiQxQDAAIv1wACsDz0cwABMZy7AAGkPAgACFsAATHMugpDAAKwPgMAATHjAWJCqAMAArCNJwABMhyIiIYDAAEyMwFiQqgAhHsAATJnAAKuuAQABFsAATKsWwABMpy6CkMAArA+DtZ8bAAAcwABMxRbAAEy0LsAAaQrAAKwRSAEAASsAwAD98T4BSsAATNYBasAATN1gA8AAi+DAAQuDP0AhHMAATPoWwABM9i6CkMAArA9IAQABKwDAAP3xwABM9sAATQEASsAATQgBLgbAAKwjgdLAAE0cwABNIcAAUgoAAMAAaQ8AAAABA8AATSzAAFIKAAAAAgICwABNMwAAAJKFYAOfAADAAE0/AAAAmk1gA8AA+tEAAFwBPgNJwABNTx7AAE1TwABaNAIAAieA9BbAAE1ngMAATWHAWJK6g7WfGwA+Aj0XwABNdi7AAGkIgMAATYvAWJK6wACsDj0XwABNmC6CkIjAAE2ewFiSuhbAAE2sgMAATabAWJK6g7WfG8AArA8/PYjAAE28wFiSuhbAAE3KgMAATcTAWJK6g7WfG0FDwABN1B7AAE3bwABaNAIAAiecBYDAAE3wwFiSugA+Dk7AAE4GwABOGAAAwABpEGADnwABgMAAThrAWJK6PYjAAE5kwFiSuhzAAE6PHsAATmzAAIveAgACgMAAToLAWJK6KQCWWwEAAYDAAE6UwFiSugDAAIv1PYjAAE6iwFiSuhbAAE6wgMAATqrAWJK6g7WfG0nAAE68IR7AAE7BwABaNAIAAieD3IDAAE7PwFiSugA+AULAAE7hAD89iMAATw7AWJK6FsAATxyAwABPFsBYkrqdTJ8NScAATywcwABPNoDAAE8wwFiSukgBAAErAMAA/fE+AULAAE9JAD9JwABPdiGBwABPe8BYksg+A07AAE+VwABPmgAAg7VgA58AARbAAE+igMAAT5zAWJK6g7WfG0nAAE+wHsAAT7TAAFo0AgACJ4D0g8AAT8LAWJRyAD4BPYvAAE/VwFiUchbAAE/hg8AAT9zAWJRyg7WfGz9JwABP+SEiFsAAUASDwABP/8BYlHKdJ58PAR7AAFAUwABaNAIAAieaLIPAAFAlwFiUcgA+AULAAFA5AD8/QB7AAFCZwABaNAIAAieDJoDAAFCnwFiSugDAAFCZwABQrQA9IxzAAFDHFsAAULYuwABpCsAArBFIAQABKwDAAP3xF8AAULYuwABpCiEcwABQ3YLAAFDLwFiThUgBAAEWwABQ4C5qwACsDADAAP3xwACsESsBYAPAAPrRPRfAAFDtLsAAaQkcwABRGRbAAFEELsAAaQnAAKwQg+0BAAGCwABRIcBYk4UAkzzAAKwQPRfAAFE8LsAAaQgrwACsDj0XwABRXS6CkIDAAFFjwFiSusAArA89iMAAUXDAWJK6FsAAUX6AwABReMBYkrqDtZ8bScAAUYsewABRj8AAWjQCAAIngPSAwABRncBYkroAPgM9F8AAUa8uwABpCBbAAFHELoKQwACsD8AArA49F8AAUdEugpCAwABR18BYkrrAAKwPPYjAAFHmwFiSuhbAAFH0gMAAUe7AWJK6g7WfGz8AAFh+5gBYf4QAWH/0AFiARABYgLIAWIEgAFiBjgBYiFQAWIiuAFiKCgBYizEAWIxVAFiNsABYjsIAWJB+AFiSjgBYlm0AAAAQAsAArCiB0sAAUivAAFIxwABT+QPAAGkRAAABYAHAAIvtAAAAAQXAAKwwgdLAAFJhwABSZ8AAUnkBAAADwABSd8AAUnkAAAAAAAAAYAPAAKwoAT8BCQHAAFJnwACL9wAAAAAEBsAArCqB0sAAUn7AAFKSwABSqAEAlZgBasAAUn9gA8AA/eQCAAABA8AAUqTAAFKoAAAAAAAAAGADwAD8lwFKwABSpwGTBsAArCyB0sAAUq3AAFK/wABTNwAAwABB0AFqwABSrmADwAD95AIAAAEDwABSzcAAUzcAAAACAgLAAFLUAAAAkoVgA58AAMAAUuIAAAChlGADwABYsgAAYAOfAAE+Aj0cwABTABbAAFL3gcAAUvDAWJekqfjAAFi0v04BAAEWwABTHIDAAFMWwFiXloO1nxsAwABYVkrAAFMnAYDAAFMuwFiXlgbAAKwtgdLAAFM8wABTTsAAU8YAAMAAQdUBasAAUz1gA8AA/eQCAAABA8AAU1zAAFPGAAAAAgICwABTYwAAAJKFYAOfAADAAFNxAAAAoZRgA8AAWLIAAGADnwABPgI9HMAAU48WwABThoHAAFN/wFiYR6n4wABYtKPXAQABFsAAU6uAwABTpcBYmDmDtZ8bAMAAWItKwABTtgGAwABTvcBYmDkGwACsLoHSwABTy8AAU93AAFP3AACWWwFqwABTzGADwAD95AIAAAEDwABT4cAAU/cAAAABAQHAAFPoAAAAkoVgA58AAABgA58AAUrAAFPyAYDAAFPywFiY2gAAWJcZAFiXXgBYmAEAWJikAFiY/QAAAAQCwACsMYHSwABT/MAAVALAAFswA8AAaRIAAAFgAcAAi+0AAAABBcAArD2B0sAAVDXAAFQ7wABUUAEAAAPAAFROwABUUAAAAAAAAABgA8AArDEBPwEJAcAAVDvAAIv3AAAAAAgGwACsM4HSwABUVcAAVGrAAFSGAQDAAFxEAWrAAFRWYAPAAP3kAgAAAQPAAFR/wABUhgAAAAAAAABgA8AA+tEBSsAAVIIBKQbAAKw0gdLAAFSLwABUn8AAVLUBAJWYAWrAAFSMYAPAAP3kAgAAAQPAAFSxwABUtQAAAAAAAABgA8AA/JcBSsAAVLQBlAbAAKw1gdLAAFS6wABU08AAVPYBAMAAQdIBasAAVLtgA8AA/eQCAAABA8AAVNzAAFT2AAAAAAAAAGADwACL4AFKwABU3wFqwABU32ADwACL4MABdNgGwACsN4HSwABU+8AAVQ3AAFafAADAAEHQAWrAAFT8YAPAAP3kAgAAAQPAAFUbwABWnwAAAAICAsAAVSIAAACShWADnwAAwABVMAAAAKGUYAPAAFiyAABgA58AAT4ITsAAVUTAAFVPAADAAEIrYAOfAAEWwABVV4DAAFVRwFiakoO1nxtAHsAAVWjAAFo0AgACJ2OCwABVdsBYmrkAwABVaMAAVYEATsAAVY7AAFWXAACdTGADnwABHMAAVZkuwABpEwIAAoLAAFWnwFiauRbAAFW+gsAAVbPAWJq5g7WfGwDAAKw7TsAAVdLAAFXbAACp+GADwABXjAEWwABV5IHAAFXdwFiaoKn4wABYtD0cwABV+4TAAFXywFibQMAAQVEBAAGCwABWDsBYmrkAwABYUz0cwABWKmrAAFYfYAPAAIvgwAFoCsAAQdYCAAKCwABWNMBYmrmBwABWQMBYmqAAwACL6T0cwABWXRbAAFZUgcAAVk3AWJqgqfjAAFi0o0cDAAOUgsAAVnHAWJq5g8AAVn3AWJsBAMAAWFRKwABWjAGDwABWk8BYmwEGwACsOIHSwABWpMAAVrbAAFlpAADAAEHVAWrAAFalYAPAAP3kAgAAAQPAAFbEwABZaQAAAAICAsAAVssAAACShWADnwAAwABW2QAAAKGUYAPAAFiyAABgA58AAT4PTsAAVu3AAFb4AADAAEIrYAOfAAEWwABXAIDAAFb6wFicPIO1nxtAHsAAVxHAAFo0AgACJ2OCwABXH8BYnGMAwABXEcAAVyoAPYjAAFcxwFicPBbAAFdEgsAAVznAWJxjg7WfG07AAFdUwABXXQAAnUxgA58AARzAAFdfLsAAaRMCAAKCwABXbcBYnGOAwABXecBYnDwAwACsO07AAFeOwABXlwAAqfhgA8AAV4wBFsAAV6CBwABXmcBYnEqp+MAAWLQ9HMAAV7eEwABXrsBYnP3AAEFSAQABgsAAV8rAWJxjAMAAWFo9HMAAV+SEwABX28BYnP3AAEE+AQABgMAAV/bAWJw8AMAAWB89HMAAWAuEwABYAsBYnP2hQgEAAZMAwABYID0cwABYLITAAFgjwFic/aHmAgACgMAAWD3AWJw8asAAWFZgA8AAjIbAARH0AMAAWHY9HMAAWH2EwABYdMBYnP2jzgEAAYDAAFiPwFicPADAAFhXPRzAAFikhMAAWJvAWJz9o88CAAKAwABYv8BYnDyUAMAAWFg9HMAAWNeEwABYzsBYnP2/UgEAAYDAAFjkwFicPADAAFiKPRzAAFj5hMAAWPDAWJz9o9ADAAODwABZCcBYnMeTKwDAAFhZPRzAAFkqhMAAWSHAWJz9o9MCAAKCwABZO8BYnGODwABZR8BYnMcAwABYW0rAAFlWAYPAAFldwFicxwbAAKw5gdLAAFluwABZgMAAWjEAAJZbAWrAAFlvYAPAAP3kAgAAAQPAAFmEwABaMQAAAAEBAcAAWYsAAACShWADnwAAAGADnwABPgU9iMAAWZjAWJ6yFsAAWaaAwABZoMBYnrKDtZ8bQB7AAFm3wABaNAIAAidjgMAAWcXAWJ6yAMAAWbfAAFnLAD2IwABZ0sBYnrIWwABZ4IDAAFnawFiesoO1nxtAFsAAWfeAwABZ8cBYnrKdop8RwABZ8cAAWgwASsAAWhMBHMAAWhouwABpFAEAAYDAAFonwFiesgDAAKw6BsAArDqB0sAAWjbAAFo8wABapgAAwABpFAAAAAEDwABaSMAAWqYAAAABAQHAAFpPAAAAkoVgA58AAABgA58AAT4DPYjAAFpcwFifixbAAFpqgMAAWmTAWJ+Lg7WfG0AewABae8AAWjQCAAIngJeAwABaicBYn4sAwABae8AAWo8ASsAAWpYBgMAAWp3AWJ+LBsAArDuB0sAAWqvAAFqxwABbLgAAwABpEwAAAAEDwABavsAAWy4AAAACAgLAAFrFAAAAwABCK2ADnwAAwABa1wAAAJKFYAOfAAAAYAOfAAE+Az2JwABa5MBYoCsWwABa8oHAAFrswFigK4O1nxtAHsAAWwPAAFo0AgACJ4CXgcAAWxHAWKArAMAAWwPAAFsXAErAAFseAYHAAFslwFigKwAAWJl5AFiZwABYmgUAWJpaAFicBABYnnwAWJ9fAFif7wBYoI8AAAAIAsAArD6B0sAAWzPAAFs5wABdgwPAAGkVAAABYAHAAKwxAAAAAQXAAKxFgdLAAFtxwABbd8AAW5ABAAADwABbjsAAW5AAAAAAAAAAYAPAAKw+AT8BCQHAAFt3wACsPQAAAAADBsAArECB0sAAW5XAAFuuwABb1QEAwABB0gFqwABblmADwAD95AIAAAEDwABbt8AAW9UAAAAAAAAAYAPAAIvgAUrAAFu6AWrAAFu6YAPAAIvgwAF08AbAAKxCgdLAAFvawABb4MAAXFYAAMAAaRQAAAABA8AAW+zAAFxWAAAAAQEBwABb8wAAAJKFYAOfAAAAYAOfAAE+Az2IwABcAMBYoZwWwABcDoDAAFwIwFihnIO1nxtAHsAAXB/AAFo0AgACJ4FtgMAAXC7AWKGcAMAAXB/AAFw0AErAAFw7AR7AAFxCwABaQgEAAYDAAFxMwFihnAAGwACsQ4HSwABcW8AAXGHAAF2BAADAAGkTAAAAAQPAAFxuwABdgQAAAAICAsAAXHUAAADAAEIrYAOfAADAAFyHAAAAwABpFmADnwAAAGADnwABPgROwABco8AAXKwAAJ1MYAOfAAEWwABcvYHAAFyuwFiiSYO1nxtJwABcxyEewABczMAAWjQCAAIngJeCwABc2sBYomIAPgI9isAAXO3AWKJiHsAAXPjAAFpCAQABgsAAXQLAWKJiAD0cwABdIRbAAF0cgsAAXRPAWKJig7WfG52tAQABFsAAXTcWwABdMoLAAF0pwFiiYoO1nxuDtZ8bAJ8qPz0cwABdV4HAAF1IwFiiSZ2tAQABgsAAXV/AWKJiAJ8qSsAAXW4BgsAAXXXAWKJiAABYoRsAWKFwAFiiDQBYozEAAAADAsAArEaB0sAAXYbAAF2MwABf1gPAAGkXAAABYAHAAKwxAAAAAQXAAKxNgdLAAF3EwABdysAAXeMBAAADwABd4cAAXeMAAAAAAAAAYAPAAKxGAT8BCQHAAF3KwACsPQAAAAADBsAArEiB0sAAXejAAF4BwABeKAEAwABB0gFqwABd6WADwAD95AIAAAEDwABeCsAAXigAAAAAAAAAYAPAAIvgAUrAAF4NAWrAAF4NYAPAAIvgwAF0/wbAAKxKgdLAAF4twABeM8AAXqkAAMAAaRQAAAABA8AAXj/AAF6pAAAAAQEBwABeRgAAAJKFYAOfAAAAYAOfAAE+Az2IwABeU8BYpCoWwABeYYDAAF5bwFikKoO1nxtAHsAAXnLAAFo0AgACJ4PBgMAAXoHAWKQqAMAAXnLAAF6HAErAAF6OAR7AAF6VwABaQwEAAYDAAF6fwFikKgAGwACsS4HSwABersAAXrTAAF/UAADAAGkTAAAAAQPAAF7BwABf1AAAAAICAsAAXsgAAADAAEIrYAOfAADAAF7aAAAAwABpFmADnwAAAGADnwABPgROwABe9sAAXv8AAJ1MYAOfAAEWwABfEIHAAF8BwFik14O1nxtJwABfGiEewABfH8AAWjQCAAIngJeCwABfLcBYpPAAPgI9isAAX0DAWKTwHsAAX0vAAFpDAQABgsAAX1XAWKTwAD0cwABfdBbAAF9vgsAAX2bAWKTwg7WfG52tAQABFsAAX4oWwABfhYLAAF98wFik8IO1nxuDtZ8bAJ8qPz0cwABfqoHAAF+bwFik152tAQABgsAAX7LAWKTwAJ8qSsAAX8EBgsAAX8jAWKTwAABYo6kAWKP+AFikmwBYpb8AAAADAsAArE6B0sAAX9nAAF/fwACHkwPAAGkYAAABYAHAAIvtAAAEBMAArFCB0sAAYEvAAGBQCWoAYAOfAAAEwACsUYHSwABg8cAAYP4JoesAYAPAAPrRAATAAKxSgdLAAGETwABhJBiVmAFqwABhBGADwAD95AJgA8AA/JcBKwTAAKxTgdLAAGIxwABiOBjAAGkZAGADnwABKwEFwACsXIHSwABiPcAAYj3AAGLkAAAAA8AAYlbAAGLkAAAAAgICwABiXQAAAJKFYAOfAADAAGJpAAAEoetgA8AA+tEAAGADwACsTgE/BQgBwACsUYEAwFimnwwAQB7AAGKHwABaNAIAAidjFsAAYpuAwABilcBYppGDtZ8bAMAAYofAAGKgAAwAQCEcwABiwIHAAGKywFimn0gBAAErAMAA/fHAAGKywABixwAIAMAArFAWwABi4IDAAGLawFimkYO1nxsJAcAAYj3AAIv3AAAAAAYGwACsVYHSwABjj8AAY6LAAGrRAADAAFxOAAAAAQPAAGOpwABq0QAAAAAAAABgA8AAi+0BPgdOwABjuAAAAJKFYAOfAABOwABjycAAY84AAIO1YAOfAAEWwABj0C5qwACsUD0XwABj2y6VmJPAAKxSQUPAAGP2KT4HTsAAZBTAAGQdAADAAEHSYAPAAIvgAR7AAGQfwACL3QMAA4HAAGQrwFinhCkWwABkNy6h68AArFEAScAAZE0cwABkWoLAAGRRwFinuEgBAAFqwABkXWADwACL4MABC4MAwAD98T4DQ8AAZG8iHMAAZH+CwABkdsBYp7hIAQABasAAZIJgA8AAi+DAAQuDAMAA/fEAHsAAZIzAAFo0AgACJ4OEFsAAZJ+BwABkmsBYp4SDtZ8bAD4CPYnAAGSywFinhB7AAGS5wABaQQEAAYHAAGTGwFinhAA9isAAZNfAWKe4HsAAZOLAAIvdAwADgcAAZO7AWKeEKRbAAGT6LqHrwACsUQBJwABlHBzAAGUpgsAAZSDAWKe4SAEAAWrAAGUsYAPAAIvgwAELgwDAAP3xPgJJwABlQCIiHMAAZUmBwABlRMBYp4RIAQABFsAAZUwuasAArFAAwAD98QAhFsAAZVYuoevAAKxRACEewABlaMAAq7ABAAEWwABldoHAAGVxwFinhIO1nxsAPgFKwABliwFqwABlkmADwACL7cABDFo/ScAAZbohHsAAZb/AAFo0AgACJ4CnFsAAZdKBwABlzcBYp4SDtZ8bAD4DPYjAAGXnwFindYHAAGXvwFinhD2JwABmAcBYp4QWwABmDoDAAGYIwFindYO1nxtCwABmIAA/P0AiIRzAAGZVgsAAZkzAWKe4SAEAAWrAAGZYYAPAAIvgwAELgwDAAP3xAR7AAGZiwABaNAIAAieApxbAAGZ1gcAAZnDAWKeEg7WfGwDAAGZMwABmegA/PRfAAGbOLpWYHMAAZswWwABmzi6VmMAArFJkAQABlADAAP29wACsUj2IwABm58BYp3UcwABm+ILAAGbvwFinuMAAQdMBAAGBwABnAcBYp4QAwACL6j2JwABnDsBYp4QWwABnG4DAAGcVwFindYO1nxtJwABnJx7AAGcrwABaNAIAAieaEIHAAGc/wFinhAA+Aj2IwABnUMBYp3UcwABnfx7AAGdYwACL3QMAA4HAAGdkwFinhCkWwABncC6h68AArFEAwABB0wEAAYHAAGeIwFinhADAAIvqPYnAAGeXwFinhBbAAGekgMAAZ57AWKd1g7WfGz9JwABnuCEewABnvcAAWjQCAAIngKeBwABny8BYp4QAPgU9F8AAZ9wuwABpGR7AAGfmwACrsgEAAYHAAGfywFinhADAAKxTScAAaAEhHMAAaA0WwABoBS7AAGkZwACsU0gBAAErAMAA/fE+AUrAAGgiAS4/ScAAaEEhFsAAaEYuoevAAKxRPgFKwABoYQFqwABoaGADwACL7cABDFo/ScAAaKEhHsAAaKbAAKuvAgACFsAAaL4uoevAAKxRgcAAaM3AWKeEAD4BQsAAaOAAPz2JwABpMMBYp4SAwABpN8BYp3U/PRfAAGlhLsAAaRkewABpa8AAq7IBAAGBwABpd8BYp4QAwACsU0nAAGmCHMAAaY4WwABphi7AAGkZwACsU0gBAAErAMAA/fE+BEnAAGmfHsAAaaPAAFo0AgACJ4PcgcAAabHAWKeEAD4CPYjAAGnCwFindRbAAGnPgcAAacrAWKeEnUyfDT2JwABp4cBYp4QWwABp7oDAAGnowFindYO1nxs/PRfAAGoCLsAAaRkewABqDMAAq7IBAAGBwABqGMBYp4QAwACsU0nAAGolHMAAajEWwABqKS7AAGkZwACsU0gBAAErAMAA/fE+AT0XwABqRC7AAGkZHsAAak7AAKuyAQABFsAAal+BwABqWsBYp4SDtZ8bAMAArFM/ScAAanQcwABqgBbAAGp4LsAAaRnAAKxTSAEAASsAwAD98T4BPRfAAGqTLsAAaRkewABqncAAWkgBAAGBwABqqcBYp4QAwACsUz8/SsAAasIBLgbAAKxWgdLAAGrWwABq6MAAb+oAAMAAQdABasAAatdgA8AA/eQCAAABA8AAavbAAG/qAAAAAgICwABq/QAAAJKFYAOfAADAAGsLAAAAoZRgA8AAWLIAAGADnwABPghAHsAAayDAAPZ4AgACFsAAazCAwABrKsBYrYqDtZ8bFsAAazYuasAArFAAwABrIMAAazwATsAAa0nAAGtOAACDtWADnwABFsAAa1AuasAArFA9HMAAa2sWwABrYoHAAGtbwFitmKn4wABYtMAAQVEBAAEWwABrfi5qwACsUADAAFhTTsAAa47AAGuUAACA7mADwAD8lwGTQUPAAGudKT4GTsAAa7vAAGvEAADAAEHSYAPAAIvgAR7AAGvGwACL3QMAA4LAAGvSwFit5SkWwABr3i6h68AArFEAScAAa/QcwABsAYTAAGv4wFiuUUgBAAFqwABsBGADwACL4MABC4MAwAD98T4BQ8AAbCoiHMAAbDqEwABsMcBYrlFIAQABasAAbD1gA8AAi+DAAQuDAMAA/fEAHsAAbEfAAFo0AgACJ4OEFsAAbFqCwABsVcBYreWDtZ8bAD4DPRzAAGx0gcAAbG3AWK2YwABBjQIAAhbAAGyogsAAbKPAWK3lg7WfG2rAAGy0XQORrwFhAwFgA58AYAORmMAAkooAwABZiD2KwABs2MBYreUewABs38AAWkEBAAGCwABs7MBYreUAPYzAAGz9wFiuUR7AAG0IwACL3QMAA4LAAG0UwFit5SkWwABtIC6h68AArFEAPz2IwABticBYrYocwABtmoTAAG2RwFiuUcAAQcUCAAKCwABtq8BYreWBwABtscBYrZgAwACL5z2KwABtwMBYreUWwABtzYDAAG3HwFit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urYWwACAOIDAAIAywFi6fYO1nxs9F8AAgE2CwACARsBYup2p+IfAAIBYwFi9b8AAWLRJwACAcx7AAIB3wACrsQEAAYDAAICDwFi6fQA+AUrAAICXAYDAAICewFi6fT8/P07AAIDVwACA5AAAwABpImADwACL7QEewACA7sAAi94CAAKAwACBBMBYun0WwACBCy6h68AArFEAScAAgR8hHMAAgTKGwACBI8BYvlpIAQABasAAgTVgA8AAi+3AAQxaAMAA/fE+B0nAAIFPIYTAAIFUwFi62j4CPRzAAIF0gsAAgW3AWLqdwABBnAIAAoDAAIGYwFi6fRzAAIHBasAAgaVdA5GvAWEDAWADwAD+fmADkZiwl4gvAQABJ4CXAJGzAMAAWYc9jMAAgd7AWLraKT9OwACCnsAAgq8AAcAAQq9gA8AAV4wBFsAAgriCwACCscBYup2p+MAAWLQ9F8AAgs+CwACCyMBYup2p+B/AAILewACLPQAAAADAAFi0PYjAAIL6wFi6fSOBwACDAsBYuoscwACDKYbAAIMawFi+WsAAQdACAAKAwACDOMBYun2CwACDP8BYup0AwACL8xzAAINihsAAg1PAWL5awABB1QIAAoDAAINxwFi6fYLAAIN4wFi6nQDAAIv0AWADnwA9i8AAg4fAWLq2FsAAg5SAwACDjsBYun2DtZ8bPRfAAIOngsAAg6DAWLqdqfiHwACDssBYvyrAAFi0ScAAg8sewACDz8AAq7EBAAGAwACD28BYun0APgFKwACD7QGAwACD9MBYun0/P0nAAIQOIh7AAIQSwABaNAIAAieD3IPAAIQgwFi6tgAAIRzAAIQ3FsAAhC6DwACEKcBYuradTJ8NSAEAASsAwAD98T4EScAAhEghhMAAhE3AWLraPgI9HMAAhLOCwACErMBYup3AAEGcAgACgMAAhNfAWLp9HMAAhQBqwACE5F0Dka8BYQMBYAPAAP5+YAORmLCXiC8BAAEngJcAkbMAwABZhz2MwACFHcBYutopPz2IwACFQcBYun0WwACFToPAAIVJwFi6tp1Mnw09i8AAhV7AWLq2FsAAhWuAwACFZcBYun2DtZ8bScAAhXgewACFfMAAq7EBAAGAwACFiMBYun0APgFKwACFmgGAwACFocBYun0/P0nAAIW7IYTAAIXAwFi62j4BPRzAAIYigsAA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qC7AAFG4wACsXcAArIXAAFHIAQABFsAAQ86BwABDycBY9XiWUsAAYv8AwACDWz4BSsAAQ+ABH8AAQ+vAAJYeAgACHMAARAEuwABpXgEAARbAAEQjFsAARBMutHzAAKxdwACsg7H9uToAwACskDHAAERCYAPAAJWYAoLAAERDwFj1iBzAAERKLsAAaVTAAKxdAQABgcAARF3AWPV4AMAArJoAP0rAAERwAYLAAER3wFj1iAbAAKyZgdPAAESFwABElsAARwYAAMAAaVXAAKxdAAAAAQPAAESrwABHBgAAAAICAsAARMEAAACGFWADwABhQgDAAETaAAAAhSxdA8AA/TsBYAPAAGLWAABgA8AAlZgBPgRPwABE78AARQAAAAGc+WEDAWADwABjKWADwACVmAADwABFCsAARfoAAAABAQHAAEUcAAAAwABpX2ADwABjKQAAYAPAAJWYAT4CTsAARUDAAEVJAACCcGADwABjKQGDwABFS8BY93g9MMAARVwewABFYrYfAgACasAARXZgA7YxwADGDyQABifAAGlghMAARbTAWPeVJ4NIJ8AAaWEcwABF5IDAAEXbwFj3GqcXAAAAAMAAYWIng0gATsAARhjAAEYiAABbXQPAAP07AWADwACVmAExwABGNmADwACVmABGwABGPsAARmfAAEZMAAAAH2ADwABi1gCBwABGWMBY9yo+AT0cwABGeYPAAEZvwFj4BFYBAAEcwABGlBbAAEaILsAAU+jAAKxdwACshsAARhEDAAMWwABGqi7AAERHwACsXcAArImEwABGtMBY+DKCwABGvsBY91AAwAB22ADAAP1MSsAARtYBH8AARuHAAJcxAQABg8AARvjAWPgEAAbAAKyagdPAAEcLwABHHMAASFQAAMAAaVTAAKxdAAAAAQPAAEcuwABIVAAAAAEBAcAARzgAAACClGADwABi1gAAYAPAAJWYAT4EQBbAAEdUFsAAR0susmTAAKxdwACsZIK4gVbAAEdLwABHZABAIRbAAEd4gMAAR3PAWPj3vGfAAGLjwABHcsAAR40ATsAAR6XAAEesAADAAEYUYAPAAJWYARzAAEfAFsAAR64uwABcgcAArF3AAKyHwABGFQIAAhbAAEfcLsAAREfAAKxdwACsiR/AAEfmwACGNAEAAYDAAEf7wFj49wAAwAB3+ErAAEgHARzA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AKzUAMAArNU/CQgBwACszIAAwFkebAgBwACszYEAwFkeeggBwACszoIAwFkeiAgBwACsz4MAwFkemAgBwACs0IQAwFkeqggBwACs0YUAwFkevAgBwACs0oYAwFkezggBwACs04cAwFke3gkBwABTusAA/foAAAAAKQbAAKzbgdXAAFG+wABRzMAAUfABALxYwACsngAAAAEDwABR18AAUfAAAAAAAAAAYAPAAGPpAUrAAFHaARbAAFHnFsAAUdoutiPAAKyewACs0rg1wABNowbAAKzcgdXAAFH0wABSDMAAUkgBAK+ywACsngAAAAEDwABSIMAAUkgAAAAAAAAAYAO7jQFKwABSKQEWwABSNhbAAFIpLrYjwACsnsAArNKlO8AATaIGwACs3YHVwABSe8AAUofAAFLhAQDAAGmuAAAAAQPAAFKRwABS4QAAAAAAAABgA8AAlaIBSsAAUpoBNQAAAAEAYAPAAJWiARbAAFKaLsAAaavAAKyewACs1iMcwABSpYAAwFkhyEgBAAErAMAA/fEXwABSmi7AAGmrwACsnhzAAFKwFsAAUqkuuBXAAKyewACszsAASR8CAAIrasAAUtRgA8AAmrbAAS1/AMAAZZvAAKzWgADAWSHIAWADwACVogbAAKzegdXAAFLlwABS8cAAU0sBAMAAaa8AAAABA8AAUvvAAFNLAAAAAAAAAGADwACVogFKwABTBAE1AAAAAQBgA8AAlaIBFsAAUwQuwABprMAArJ7AAKzXIxzAAFMPgADAWSKHSAEAASsAwAD98RfAAFMELsAAaazAAKyeHMAAUxoWwABTEy64FcAArJ7AAKzOwABJHwIAAitqwABTPmADwACatsABLZgAwABlm8AArNeAAMBZIocBYAPAAJWiBsAArN+B1cAAU0/AAFNbwABTtQEAwABpsAAAAAEDwABTZcAAU7UAAAAAAAAAYAPAAJWiAUrAAFNuATUAAAABAGADwACVogEWwABTbi7AAGmtwACsnsAArNgjHMAAU3mAAMBZI0ZIAQABKwDAAP3xF8AAU24uwABprcAArJ4cwABThBbAAFN9LrgVwACsnsAArM7AAEkfAgACK2rAAFOoYAPAAJq2wAEtsgDAAGWbwACs2IAAwFkjRgFgA8AAlaIGwACs4YHVwABWlcAAVqPAAFcFAACwBwAAAAEDwABWv8AAVwUAAAABAQHAAFbHAAAAwABEXmADwAD+fgAAYAPAAJWYAUrAAFbYARzAAFbhFsAAVtguwABER8AArJ7AAKzPsAcBAAGAwABW/sBZI/QAwABdSgbAAKzigdXAAFcKwABXGMAAV34AAMAAXV8AAAABA8AAVzHAAFd+AAAAAQEBwABXQAAAAICWYAPAAGFCAABgA8AAlZgBSsAAV1ABHMAAV14WwABXUC7AAGmpwACsnsAArNHAAF1fAQABgMAAV3jAWSRqAMAArL8GwACs44HVwABXg8AAV5HAAFflAACF4gAAAAEDwABXn8AAV+UAAAABAQHAAFemAAAAmfpgA8AAjiYAAGADwACVmAE+AUrAAFexARzAAFe6asAAV7tgA8AAmAbAASCbIAIAAifAAF/kMcAAV8VgA8AA/eQCFsAAV9EWwABXyoDAAFfGwFkk3sAAUhvAAI4qgL3AAI3ZFsAAV9uAwABX18BZJN6AvcAAjikAwACYCAbAAKzkgdXAAFfqwABX78AAWUIAALTcAAAAAQPAAFgAwABZQgAAAAMCAsAAWAgAAACkZ2ADvRYAwABYGAAAAIKXYAPAAJRhAAHAAFgtAAAAhEhgA70bAWoAYAPAAP2heVwBPgI9HMAAWEsWwABYPS64UsAArJ7AAKzNtNwCAAKAwABYXcBZJYuBwABYZcBZJZkAvP5JwABY+yEcwABZB4LAAFj/wFklqkgBAAErAMAA/fE9HMAAWR4WwABZEC64UsAArJ7AAKzNtNwCAAKCwABZMMBZJaqBwABZOcBZJZkAvP4/BsAArOWB1cAAWUfAAFlUwABpYAAAwABpewAAAAEDwABZZMAAaWAAAAACAgLAAFl0AAAAsJ1gA8AAjcIAwABZkgAAAMAAaXlgA8AArRoAAGADwACUgQE+B07AAFm7wABZxAAAlotgA8AAje0BJsAAWbsBFsAAWdgWwABZzoDAAFnGwFkmcMAASNbAAI3Egx7AAP0fYAPAAI3tTsAAWfXAAFoLAADAAGmxXQPAAPz5AWADwACN1wEcwABaJRbAAFodgMAAWhXAWSZwwABcqsAAjcWBpQEAATTAAForA8AAWivAAFpZAAAAAQEBwABaMwAAAMAAUhtgA8AAjdcAAGADwAD60QFKwABaPgEhFsAAWkaDwABaP8BZJy7AAF0iwACN2wDAAP0FTsAAWmjAAFp3AADAAGmyYAPAAP5+ASTAAFqqAifAAGmzHMAAWpUewABajMAA0QEAAAAAoAMBAAE5wABGTADAANEETsAAWrzAAFrHAADAAGm0YAPAAK0UARzAAFrRLsAAabUDAAIWwABa5YDAAFrdwFkmcMAAXKrAAI3FgsAAWu7AWSadAcAAabYpwACs6E7AAFspwABbMgAAwABpemADwACUgQEcwABbOmrAAFs3YAPAAJgGwAEgm4VgAgACasAAW0RgA8AA/n7AAXUtMsAAW1VgA8AA/n5gA8AA/eQlJ8AAabgfwABbvsAAlnYCAAEnwABpuAGwIConwABpuRzAAFwcasAAXB1gA8AAmAbAASCbIAEAAWrAAFwgYAPAAP5+wAF1MgDAAJgIJ8AAabscwABcZhbAAFxSLsAAREfAAKyewACsz8AARFYBAAEWwABclxbAAFyIFsAAXHsutiPAAKyewACs0rO3wABNpLITuVAAwABdQifAAEi6HsAAXMXAAJM4AQABFsAAXOEWwABc1hbAAFzPLrgVwACsnsAArM633sAAZF3AAEi6wABlWgAnwABpvB/AAF0NwACUkQEAAR7AAF0WwACizAQABBbAAF0yLrJkwACsnsAArMwWwABdPC7AAERHwACsnsAArM8WwABdRi64FcAArJ7AAKzOFsAAXVsWwABdTi62I8AArJ7AAKzSs7fAAE2kAAAnwABpvRzAAF2ELrAHAQABasAAXaFgA8AA/n7AAVlRAMAArOEnwABpvhzAAF3ULrAHAQABasAAXfFgA8AA/n7AAWxyAMAArOEnwABpvxzAAF4hLrAHAQABasAAXj5gA8AA/n7AAWx3AMAArOEnwABpwBzAAF5rasAAXmxgA8AAmAbAASCbIAEAASeqtQDAAJgIJ8AAacEfwABenMAAlnYCAAEWwABexRbAAF6+LrgVwACsnsAArM7AAEixwABlcQGwIConwABpwhzAAF8OasAAXw9gA8AAmAbAASCbIAIAAieGxhbAAF8eFsAAXxcuuBXAAKyewACszsAASLHAAGVxAMAAmAgnwABpwxzAAF9TLsAAacQBAAGAwABfcMBZJnAAwACs6SfAAFyqFsAAX5aFwABfi8BZJ62GJcAArRcnoKkewABftMAAkzgBAAEWwABf0BbAAF/FFsAAX74uuBXAAKyewACszrfewABkXcAASQTAAGVVACfAAFzTHsAAX/LAAJM4AQABFsAAYAMWwABf/C64FcAArJ7AAKzOwABIFsAAZFcAJ7uUHsAAYCrAAJM4AQABFsAAYEYWwABgOxbAAGA0LrgVwACsnsAArM633sAAZF3AAEkRwABlXQAnwABpxR7AAGB+wACTOAEAARbAAGCaFsAAYI8WwABgiC64FcAArJ7AAKzOt97AAGRdwABJCcAAZVgAJ8AAacZqwABg1GADwAD+fsABdRknwABcsRbAAGEYgMAAYRDAWSZwwABcscAAjcgnwABpxx7AAGFAwACTOAEAAYTAAGFKwFknawAnwABpyBbAAGGDFsAAYXousmTAAKyewACszIKygVInwABpyRzAAGG1LsAAacoBAAGCwABhxMBZJp0AwACs7CfAAGnLHMAAYeQuwABpzAEAAYLAAGH0wFkmnQDAAKzyJ8AAac0cwABiEC7AAGnOAQABgsAAYirAWSadAMAArPMnwABpzxzAAGJHLsAAadABAAGCwABiW8BZJp0AwACs+CeZYhzAAGJ5LsAAadEBAAGCwABih8BZJp0AwACs+SfAAFzFHMAAYrAuwABp0gEAAYLAAGLJwFkmnQDAAKz6J8AAadMcwABi6S7AAGnUAQABgsAAYwbAWSadAMAArPsnwABp1RzAAGM5LsAAadYCAAKAwABjUsBZJnCBwABjW8BZJoAAwACtASfAAGnXHMAAY5ouwABp2AIAAoDAAGOzwFkmcIHAAGO8wFkmgADAAK0CJ8AAYrAcwABj5i7AAGnZAQABgsAAY/TAWSadAMAArQMnwABp2iMWwABkHoDAAGQWwFkmcMAAXKvAAI3HHMAAZD0uwABp2wEAAYLAAGRPwFkmnQDAAK0FH8AAZGnAAJSoAAAAAAFgA8AAlIEnwABp3DUAAAABAGADwACUgQEewABkmMAAtC4DAAMWwABk0S7AAFx/wACsnsAArNMWwABk7RbAAGTgLrYjwACsnsAArNK4LcAATaAWwABk+S64FcAArJ7AAKzOACMcwABlAYYAwFktpUgBAAErAAAfwABlEsAAlKgAAAAAhgDAWS2lAWADwACUgSfAAF2QFsAAZUSCwABlO8BZJp3AAF2QwACN7yfAAGndHsAAZWjAAJM5AQABFsAAZXUuwABprsAArN0AJ8AAad4ewABlmMAAkzkBAAEWwABlpS7AAGmvwACs3gAnwABp3x7AAGXIwACTOQEAARbAAGXVLsAAabDAAKzfAADAAJgJScAAZe0WwABl+YDAAGXxwFkmcMAAXLHAAI3IPgFKwABmGQEfwABmJMAAlJEBAAExwABmLWADwACUgQIcwABmPWrAAGY6YAPAAJgGwAEgm4VgAgACasAAZkdgA8AA/n7AAXU3MsAAZmBgA8AA/n5gA8AA/eQJJ8AAacZqwABmi2ADwAD+fsABdRknwABpxx7AAGa7wACTOAEAAYTAAGbFwFknawAnwABpwB/AAGc3wACWfgEAASeqtQAnwABpwh/AAGdqwACWfgEAARbAAGd+FsAAZ3cuuBXAAKyewACszsAASLHAAGVxACfAAGnhHMAAZ8QuwABp4gEAAYPAAGffwFkm3gDAAKzmJ8AAackcwABoDy7AAGnKAgABgsAAaB7AWSadAcAAabMpwACs7CfAAGnNHMAAaFIuwABpzgIAAYLAAGhswFkmnQHAAGmzKcAArPMnwABpzxzAAGihLsAAadACAAGCwABotcBZJp0BwABpsynAAKz4J8AAacscwABo7S7AAGnMAgABgsAAaP3AWSadAcAAabMpwACs8gDAAJgJhsAAaTDAWSf5AD9KwABpTQGGwABpVMBZJ/kGwACs5oHVwABpZcAAaXLAAGsNAADAAGniAAAAAQPAAGmMwABrDQAAAAEBAcAAaZ4AAADAAFyqXQPAAPz5AWADwACN1wAAYAPAAJSBAT4ETsAAacDAAGnMAADAAGnjXQPAAP07AWADwACUgQExwABpzmADwACUgQBOwABp2sAAaeIAAIQ2YAPAAPyXAZNGwABp68AAagrAAGn3AAAAwABSG2ADwACN1wCAwABqAcBZMI8+AT0cwABqHoHAAGoSwFkws1YBAAEfwABqJsAAlJ4BAAEfwABqQcAAlf8CAAIfwABqasAAlnYCAAEWwABqiIPAAGqBwFkw+YC9wACN2QGwICocwABqr2rAAGqwYAPAAJgGwAEgmyACAAInwABp5B7AAGrFwACTPQEAATUAAAABAGADwAD8lwGCwABqz8BZMNw1AAAAAQBgA8AA/JcBisAAas/AWTDcHMAAataEAMBZMY9kAQABlADAAP29hADAWTGPAADAAJgIAAAAwAD9TErAAGrpAR/AAGr0wACUkQEAAYHAAGr9wFkw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TsAA107AANdfAADAAGo0YAPAAJckAR/AANdvwACXMQEAAYfAANeDwFl5iABOwADXncAA16sAALpRYAPAAPrRASpJwADXuiXAANfFhcAA177AWXlEYAPAAI6EPgE9FcAA1+LAWXv9CxbAANf5FMAA1/LAWXlEBQFgA8AAjoS6UcAAjog/TsAA2BvAANgyAACFLmADwAD8lwEWwADYO4XAANg0wFl5RIUuwACOfU7AANhnwADYhgAAwABdA2ADwACVmAEfwADYjMAAlwEAAAAAScAA2KQWwADYr4XAANiowFl5RMAAXQjAAI56PgE9FcAA2MfAWXx9DRzAANj0LsAAahzAAKyeAQABhcAA2RrAWXlEAMAArPU/TsAA2TbAANlBAADAAF0MYAPAAJcYAR7AANlDwACTPQEAARbAANlUhcAA2U3AWXlEwABdDMAAjnsAScAA2WgWwADZc4XAANlswFl5RIQewACOgT4DScAA2YciIiIcwADZohTAANmLwFl8VQwAgWsBAAGVAMAA/cYAHMAA2ccWwADZwIbAANm2wFl5X2HAAP1rSAEAAZQAwAD9uwAlwADZ+hTAANnbwFl8fQ0AYAPAAJb6ABzAANotFsAA2iKFwADaG8BZeUTAAF0MwACOe0gBAAGTAMAA/bs+BU/AANo/wADaTAAAAYcvYQMBYAPAAPyXYAPAAJSBAAPAANpSwADcagAAAAEBAcAA2lcAAAC7nmADwAD8lwAAYAPAAJSBAT4CTsAA2qfAANqvAADAAGo1YAPAAP5+ARzAANrIgsAA2sHAWXjdwABHZwIAAiTAANrfAifAAGo2FMAA2tjAWX3tEAAkwADa/wInwABqNxTAANr4wFl97RAAAMAArRBKwADbDgEcwADbG2rAANsYYAPAAJgGwAEgm4VgAgACJ8AAajgywADbcGADwAD+fmADwAD95AUnwABqNRTAANuLwFl+CBEAJ7bbhMAA26/AWXk0J8AASE4ewADb1sAAkzkBAAEWwADb6oXAANvjwFl5RMAAXQXAAI54ACeAvRbAANwah8AA3A7AWXmIgMPAAP0hJ8AAajkWwADcQoXAANw7wFl5RIVKwACOfADAAJgJTsAA3HvAANyJAADAAGo6YAPAAJWiARbAANyVhsAA3IvAWXlfgMPAAP0hScAA3KccwADcuRTAANyrwFl/ExAASAEAARbAANy8LsAAaa7AAKzdAMAA/fFKwADcxwEcwADc1BTAANzOwFl9xQ8AIAEAAZMAAD9JwADc4xzAANz1FMAA3OfAWX8TEABIAQABFsAA3PguwABpr8AArN4AwAD98UrAAN0DARzAAN0QFMAA3QrAWX3FDwAgAQABlAAAP0nAAN0fHMAA3TEUwADdI8BZfxMQAEgBAAEWwADdNC7AAGmwwACs3wDAAP3xSsAA3T8BHMAA3UwUwADdRsBZfcUPACABAAGVAAA/P07AAN1owADdcAAAwABqNWADwAD+fgEcwADdhYLAAN1+wFl43cAAR2cCAAInwABqOyfAAGo8AMAArRBKwADdwgEcwADdz2rAAN3MYAPAAJgGwAEgm4VgAgACJ8AAaj0ywADepWADwAD+fmADwAD95AknwABqNRTAAN68wFmAHA8AJ7bbhMAA3tzAWXk0J8AASE4ewADe/8AAkzkBAAEWwADfE4XAAN8MwFl5RMAAXQXAAI54ACeFLh7AAN9FwACTPQEAARTAAN9PwFl8VQwAACfAAF0DFMAA35TAWXx9DQAnwABqMBTAAN/LwFl7YAkAJ8AAajEUwADf88BZe9EKACfAAGo5FsAA4CGFwADgGsBZeUSFSsAAjnwnwABdDBTAAOBHwFl86A4AAMAAmAk+A0nAAOB2IiIiHMAA4JEUwADgesBZfFUMAIFrAQABlQDAAP3GABzAAOC2FsAA4K+GwADgpcBZeV9hwAD9a0gBAAGUAMAA/bsAJcAA4OkUwADgysBZfH0NAGADwACW+gAcwADhHBbAAOERhcAA4QrAWXlEwABdDMAAjntIAQABkwDAAP27PgVPwADhLsAA4TsAAAGHL2EDAWADwAD8l2ADwACUgQADwADhQcAA48UAAAABAQHAAOFGAAAAu55gA8AA/JcAAGADwACUgQE+A07AAOGZwADhqgAAwABqPmADwAD+fgEjFMAA4azAWXv9CwAnYie77gFgA8AA/n5OwADh18AA4d8AAMAAajVgA8AA/n4BHMAA4eiCwADh4cBZeN3AAEdnAgACJMAA4hUEJ8AAaj8UwADh+sBZgfwQACeAtRTAAOIDwFmCFxEAJMAA4loDJ8AAakAUwADiQMBZgfwQABTAAOJIwFmCFxEAAMAArRBKwADiaQEcwADidmrAAOJzYAPAAJgGwAEgm4VgAgACJ8AAajgywADiy2ADwAD+fmADwAD95AUnwABqNRTAAOLmwFmCRRIAJ7bbhMAA4wrAWXk0J8AASE4ewADjMcAAkzkBAAEWwADjRYXAAOM+wFl5RMAAXQXAAI54ACeAvRbAAON1h8AA42nAWXmIgMPAAP0hJ8AAajkWwADjnYXAAOOWwFl5RIVKwACOfADAAJgJTsAA49bAAOPkAADAAGo6YAPAAJWiARbAAOPwhsAA4+bAWXlfgMPAAP0hScAA5AIcwADkFBTAAOQGwFmDaRAASAEAARbAAOQXLsAAaa7AAKzdAMAA/fFKwADkIgEcwADkLxTAAOQpwFmB1A8AIAEAAZMAAD9JwADkPhzAAORQFMAA5ELAWYNpEABIAQABFsAA5FMuwABpr8AArN4AwAD98UrAAOReARzAAORrFMAA5GXAWYHUDwAgAQABlAAAP0nAAOR6HMAA5IwUwADkfsBZg2kQAEgBAAEWwADkjy7AAGmwwACs3wDAAP3xSsAA5JoBHMAA5KcUwADkocBZgdQPACABAAGVAAA/P07AAOTDwADkywAAwABqNWADwAD+fgEcwADk4ILAAOTZwFl43cAAR2cCAAInwABqQSfAAGpCAMAArRBKwADlIQEcwADlLmrAAOUrYAPAAJgGwAEgm4VgAgACJ8AAakMywADmE2ADwAD+fmADwAD95AonwABqNRTAAOYqwFmEcg8AJ7bbhMAA5krAWXk0J8AASE4ewADmbcAAkzkBAAEWwADmgYXAAOZ6wFl5RMAAXQXAAI54ACe6UR7AAObjwACTPQEAASMUwADm7cBZe/0LAJSTAWADwAD8lwAnhS4ewADnKcAAkz0BAAEUwADnM8BZfFUMAAAnwABdAxTAAOd4wFl8fQ0AJ8AAajAUwADnr8BZe2AJACfAAGoxFMAA59fAWXvRCgAnwABqORbAAOgFhcAA5/7AWXlEhUrAAI58J8AAXQwUwADoK8BZfOgOAADAAJgJTsAA6GnAAOhvAADAAF9kXQPAAP07AWADwACUgQExwADocWADwACUgQBOwADohwAAAL8WYAPAAJWYAEbAAOiSwADovsAA6J8AAACESGADwACODQAWwADos4DAAOiqwFl4pIbqwACN5D4CRsAA6MbAAOjzwADo2AAAAJZzYAPAAI6bABbAAOjqhsAA6OLAWYYGwABc28AAjhE+AUnAAOlMJcAA6VeHwADpUMBZhjVgA8AAjqA+AUnAAOl4FsAA6YMUwADpfMBZhjUHAWADwACOoMAAXQ7AAI53PgROwADppsAA6a0AAMAAUhtgA8AAjdcBFsAA6bYUwADpr8BZhjUHAWADwACOoMAAUhvAAI6iTsAA6dfAAOnhAACFYGADwACUgQEcwADqBYPAAOnzwFl5BCACAAIfwADqCsAAlmwBAAEWwADqIBTAAOoZwFmGnggAgL3AAI3ZABTAAOonwFmGNQcBYAPAAI6gAAA9HMAA6jwutNwDAAIWwADqVRTAAOpOwFmGNQcBYAPAAI6gllLAAI5wFMAA6l7AWYbSCQABhEgWwADqiobAAOqCwFmGBpZSwACOD8AArOQ9HMAA6qaEwADqoMBZhcRWAQABFMAA6qrAWYbSCQAAwAD9TD8/RsAA6toAwADq5QAAAJn6YAPAAI4mABbAAOr0hsAA6uzAWYYGhIjAAI4SQT4GScAA6wchHMAA6x4WwADrD4fAAOsLwFmHpsAAXP/AAI48SAEAAYHAAOshwFl4tQDAAP3xQsAA6y8AP07AAOtFwADrTQAAwABI4V0DwAD9OwFgA8AAjm4BHMAA64AcwADrWxbAAOtTh8AA60/AWYemwABI4cAAji6BpQEAATTAAOthA8AA62HAAOt+AAAAAQEBwADragAAAEVbAABgA8AA+tEBSsAA63ABJsAA63ABFsAA63IUwADrcMBZiF0IAMAAXQ4AYAPAAPrRAMAA/QWArQAAAADAAP0PTsAA66DAAOuqAAC222ADwACVmAEcwADrrmrAAOuvYAPAAJgGwAEgmyACAAInwABdVxzAAOvBLoXiAQABh8AA69DAWYemAMAArOMAwACYCE7AAOvtwADr9wAAhGNgA8AAlZgBFMAA6/nAWYimCQBJwADsDBzAAOwfFsAA7BgUwADsEMBZiAgIAGHAAP1rgJcBAAGUAMAA/cc+AknAAOwwHMAA7DmFwADsNMBZhe1IAQABKwDAAP3xPgI9HMAA7FaEwADsUMBZhcRWAQABHMAA7GBqwADsXWADwACYBsABIJuFYAEAASfAAGpEAMAAmAkAwAD9TD2NwADsgsBZhe0cwADsi2rAAOyMYAPAAJgGwAEgmyABAAEngLUAwACYCD89FcAA7PPAWYj1ChzAAO0BasAA7QJgA8AAmAbAASCbIAIAAifAAFW2McAA7Q5gA8AAlZgChcAA7Q/AWYXtFMAA7RXAWYimCQAAwACYCD9GwADtNMAA7VsAAAABAGADwACObgAUwADtUsBZiAgIAD4FTsAA7UgAAACWc2ADwACOhAEmwADtNAEUwADtSMBZihsLAGADwACOhE7AAO10wADtfgAAhWBgA8AAlIEBHMAA7ZKDwADtgMBZeQQgAgACFMAA7ZPAWYj1CgAUwADtnsBZijUMAAAAPRzAAO2xLrTcAgACFsAA7coUwADtw8BZijUMAJZSwACOcBTAAO3TwFmKXQ0AAMAArOQ9HMAA7e+EwADt6cBZhcRWAQABFMAA7fPAWYpdDQAAwAD9TD0VwADuCcBZiPUKhcAA7hXAWYXtScAA7mEWwADubILAAO5lwFl43YO3wACtDj4BPRzAAO6GhMAA7oDAWYXEnw4CAAKTHMAA7peCwADukMBZeN3AAGDSAAAAAMAArREAwAD9VT9KwADusgEcwADuuS7AAGopAgACJ8AAakWEwADu1sBZhcQAwACs9gbAAKz5gdXAAO8IwADvFcAA8jcAAMAAadEAAAABA8AA7yLAAPI3AAAAAQEBwADvLAAAAJaLYAPAAI3hAABgA8AAlIEBPgVOwADvT8AA71sAAMAAUAxdA8AA/TsBYAPAAJSBATHAAO9dYAPAAJSBAE7AAO9qwADvcgAAwABqRmADwAD60QEqRsAA73/AAO+twADvjQAAAIYVYAPAAI3/ABbAAO+igMAA75nAWYulmWLAAI3lPgROwADwR8AA8FIAALCIYAPAAJSBARzAAPBaasAA8FdgA8AAmAbAASCbhWACAAInwABqBTHAAPBvYAPAAP3kAxbAAPCJFsAA8IKDwADwecBZjAjAAFIbwACOAoC9wACN2RbAAPCgg8AA8JfAWYwIgL3AAI4BHMAA8L8WwADwri7AAF1ZwACsnsAArNDAAF1aAQABFsAA8NGDwADwyMBZjAiAlsAAjgMAwACsZwDAAJgJPRzAAPD2FsAA8OguuFLAAKyewACszbTdAgACFsAA8RODwADxCsBZjAiAlsAAjgOEwADxGsBZjC8AvP89HMAA8TmBwADxLcBZi8BWAQABhMAA8T3AWYwvAMAA/UxJwADxUBbAAPFjFsAA8V2DwADxVMBZjAiAlsAAjgO6xsAAYU09isAA8WvAWYvpKT9JwADxhYLAAPGJwFmL6T4BPRzAAPGmgcAA8ZrAWYvAnw4CAAKTHMAA8cFqwADxvmADwACYBsABIJuFYAEAASfAAGpHAMAAmAkAwAD9VT9KwADyCQEcwADyEC7AAGopAgACJ5ligcAA8ifAWYvAAMAArPYGwACs+oHVwADy18AA8uTAAPwaAADAAGnSAAAAAQPAAPL8wAD8GgAAAAEBAcAA8wYAAACWi2ADwACN4QAAYAPAAJSBAT4DTsAA8yjAAPMvAACEi10DwAD9OwFgA8AAjhgBFsAA8zqAwADzMcBZjgfAAFzFwACN5k7AAPQXwAD0IgAAhiVdA8AA/PkBYAPAAJSBARzAAPQrgcAA9CTAWY4igKsBAWADwACUgQE0wAD0LwPAAPQvwAD72gAAAAEBAcAA9DwAAACEm2ADwACOGAAAYAPAAJSBAT4FQBbAAPRfFsAA9FiCwAD0UsBZjprAAFIbwACOHcAAXSLAAI3bwAD0UsAA9HIATsAA9IgAAACFYGADwACUgQBJwAD0mRbAAPSjgsAA9J3AWY6awABcycAAjiE+AT2LwAD0xsBZjuIcwAD05WrAAPTVYAPAAJgGwAEgm4VgAgACJ8AAakgxwAD0+2ADwAD95AMWwAD1CRbAAPUCgsAA9PzAWY6awABSG8AAjh2AvcAAjdkWwAD1FYLAAPUPwFmOmoC9wACOGxbAAPUhgsAA9RvAWY6agpfAAI4eAMAAmAk+A07AAPftwAD38gAAgpdgA8AAlpYBJsAA9+0BFsAA9/qCwAD39MBZjpqCl8AAjh5gA8AAlpZAIRzAAPgUhMAA+A/AWY+USAEAASsAwAD98cAA+A/AAPgbASTAAPgxAifAAGpJgsAA+CvAWY6aScAA+DwiIhbAAPhMFsAA+EWEwAD4QMBZj5SD9MAAlpiBVcAA/R0AHMAA+H8WwAD4eBbAAPhtFsAA+GiEwAD4Y8BZj5SCbcAAlpmGJcAAlIhhwAD9a0gBAAGUAMAA/bsAJcAA+K0WwAD4qBbAAPidFsAA+JiEwAD4k8BZj5SCbcAAlpmGJcAAlIiB6sAA/SBgA8AAlQo+Ak7AAPnFwAD5ygAAgepgA8AAlQoBJsAA+cUBFsAA+eEWwAD51hbAAPnRhMAA+czAWY+Ugm3AAJaZhiXAAJSIgerAAP0gYAPAAJUKPYvAAPnxwFmO4hzAAPoDasAA+gBgA8AAmAbAASCbhWACAAInwABqSDHAAPooYAPAAP3kAxbAAPo2FsAA+i+CwAD6KcBZjprAAFIbwACOHYC9wACN2RbAAPpCgsAA+jzAWY6agL3AAI4bFsAA+k2FwAD6SMBZkJaAlsAAlQwAwACYCT4BPYvAAPrtwFmO4hzAAPsOasAA+vxgA8AAmAbAASCbhWACAAInwABqSjHAAPsmYAPAAP3kAxbAAPs0FsAA+y2CwAD7J8BZjprAAFIbwACOHYC9wACN2RbAAPtAgsAA+zrAWY6agL3AAI4bhMAA+0bAWY+UAMAAmAk9HMAA+2YutNwDAAIWwAD7foLAAPt4wFmOmpZSwACOGoPAAPuHwFmO4gGESBbAAPuzFsAA+6uCwAD7pcBZjpqWUsAAjhqESL1LwACs5ErAAPvDAYPAAPvKwFmO4gDAAP0ESsAA++EBHMAA++guwABqKQIAAifAAGpLHMAA/A2CwAD8AsBZjlOArQAAAADAAP0PAMAArPYGwACs+4HVwAD8qMAA/LXAAP/jAADAAGnUAAAAAQPAAPzRwAD/4wAAAAEBAcAA/NsAAACWi2ADwACN4QAAYAPAAJSBAT4GTsAA/P3AAP0EAACEi10DwAD9OwFgA8AAjhgBFsAA/Q+AwAD9BsBZkpzAAF2MwACN507AAP1FwAD9UAAAhiVdA8AA/TsBYAPAAJSBATHAAP1SYAPAAJSBAE7AAP1nwAD9bgAAwABUz2ADwACtCAEfwAD9cMAArRMAAAAARsAA/YTAAP2mwAD9lQAAAISbYAPAAI4YAIHAAP2ewFmStz4EQBbAAP3CFsAA/buEwAD9tcBZkzrAAFIbwACOHcAAXSLAAI3bwAD9tcAA/dUATsAA/evAAP31AACFYGADwACUgQEcwAD9/WrAAP36YAPAAJgGwAEgm4VgAgACJ8AAakwxwAD+GWADwAD95AUcwAD+KoPAAP4jwFmTD8AAR2cCAAInwABqTSfAAGpOAMAArRAWwAD+YhbAAP5bhMAA/lXAWZM6wABSG8AAjh2AvcAAjdkewAD+cMAAkzkBAAEWwAD+g4TAAP59wFmTOoC9wACOGwAewAD+ksAAkzkBAAEWwAD+pYTAAP6fwFmTOsAASE7AAI4cABbAAP7AhMAA/rrAWZM6gpfAAI4eAMAAmAk9HMAA/tYutNwDAAIWwAD+7oTAAP7owFmTOpZSwACOGoXAAP73wFmTgwGESBbAAP8jFsAA/xuEwAD/FcBZkzqWUsAAjhqESL1LwACs5D0cwAD/PoLAAP8zwFmS6FYBAAGFwAD/QsBZk4MAwAD9TEnAAP9ZFsAA/2SDwAD/XcBZkw+Dt8AArQ4+AT0cwAD/g4LAAP94wFmS6J8OAgACkxzAAP+Ug8AA/43AWZMPwABg0gAAAADAAK0RAMAA/VU/SsAA/68BHMAA/7YuwABqKQIAAifAAGntgsAA/9TAWZLoAMAArPYGwACs/IHVwAEBLsABAUTAAQiiAADAAGpPAAAAAQPAAQFpwAEIogAAAAEBAcABAYYAAADAAGl5YAPAAK0aAABdA8AA/PkBYAPAAJdNAT4NTsABAbTAAQG8AADAAEiXXQPAAP07AWADwACXTQExwAEBvmADwACXTQA9HMABAc+BwAEBx8BZlZZWAQABH8ABAdfAAJdZAgACHsABAezAAJM4AQABasABAfZgA8AA/n7AAWyzABzAAQIPasABAhBgA8AAmAbAASCbIAEAASfAAGpQAMAAmAgAAMAA/UxOwAECOcABAkgAAMAAacZgA8AA/n4BasABAldgA8AA/n7AAXUZTsABAoXAAQKaAADAAGpRYAPAAJWYARzAAQKmasABAqdgA8AAmAbAASCbIAEAASTAAQLeAyfAAGpSgsABAsbAWZYiJ8AAalMAwACYCD0cwAEC9oHAAQLlwFmVllYBAAEfwAEC/sAAl1kCAAIewAEDCsAAkzgBAAFqwAEDFGADwAD+fsABbKkAg8ABAyXAWZZHAADAAP1MTsABA1DAAQNqAADAAGpUYAPAAJWYARzAAQNuasABA29gA8AAmAbAASCbIAIAAifAAGpVMsABA7ZgA8AA/n5gA8AAlZgBJ8AAYt0cwAED1S6wBwEAAWrAAQPyYAPAAP5+wAFsswDAAKzhAMAAmAg9HMABBByBwAEEFMBZlZZWAQABH8ABBCTAAJdZAgACHsABBDnAAJM4AQABasABBENgA8AA/n7AAWyuAITAAQRZwFmW3QAAwAD9TE7AAQTYwAEE9QAAwABqVmADwACVmAEcwAEE+WrAAQT6YAPAAJgGwAEgmyACAAIkwAEGZAMnwABqV4LAAQU4wFmWIifAAGpYMsABBmZgA8AA/n5gA8AAlZgBJ8AAYt0cwAEGhS6wBwEAAWrAAQaiYAPAAP5+wAFsswDAAKzhAMAAmAg9HMABBs2BwAEGxcBZlZZWAQABH8ABBtXAAJdZAgACHsABBurAAJM4AQABasABBvRgA8AA/n7AAWykAIXAAQcNwFmXlQAAwAD9TD0cwAEHOoHAAQcywFmVllYBAAEfwAEHQsAAl1kCAAIewAEHTsAAkzgBAAFqwAEHWGADwAD+fsABbJUAFsABB46AwAEHecBZlXLAAGLRwACtHAAAwAD9TD0cwAEHsoHAAQeqwFmVllYBAAEfwAEHusAAl1kCAAIewAEHz8AAkzgBAAFqwAEH2WADwAD+fsABbJoAFsABCAOAwAEH7sBZlXLAAGLTwACtHQAAwAD9TD0cwAEII4HAAQgbwFmVllYBAAEfwAEIK8AAl1kCAAIewAEIN8AAkzgBAAFqwAEIQWADwAD+fsABbJ8AFsABCHWAwAEIYMBZlXLAAGLVwACtHgAAwAD9TErAAQiQAYHAAQiXwFmVlgbAAKz9gdXAAQoEwAEKCcABD5oAAMAAaYIAAAABA8ABCiTAAQ+aAAAAAwMDwAEKSAAAAMAAXLtdA8AA/W0CYAPAAP5+XQPAAP07AWADwACN4QDAAQp1AAAAwABqWV0DwAD9bQJgA8AAjfZgA8AA/n4AwAEKpAAAAMAAaXlgA8AArRoAAFwBPglJwAEKwBbAAQrMgMABCsTAWZmggVXAAP2SSsABCtUAP07AAQr1wAELBQAAwABqWl0DwAD9bQJgA8AAjeFgA8AA/JcBMsABCwdgA8AAjeFgA8AA/JcATsABCxzAAQspAADAAGpbXQPAAP07AWADwAD+fgExwAELK2ADwAD+fgBOwAELQMABC08AAMAAalxdA8AA/TsBYAPAAP5+ATHAAQtRYAPAAP5+AE7AAQtswAELgwAAwABqXV0DwAD9OwFgA8AAl00BMcABC4VgA8AAl00APRzAAQuWgMABC47AWZmgg/0BAAE0wAELngPAAQuewAEOZwAAAAICAsABC6YAAADAAFSXYAPAAP5+AMABC70AAADAAGpeXQPAAP07AWADwACN4QAAYAPAAP2hAT4DTsABC+fAAQvvAADAAGpfXQPAAP07AWADwACVmAExwAEL8WADwACVmABGwAEL+wDAAQwJAAAAlotgA8AAjeEAFMABDBXAWZsGCABBPgVOwAEMNMABDEEAAMAAamBgA8AA/n4BHMABDFWBwAEMQ8BZmcZLAQABFMABDFbAWZtYCgAAwAD9gUnAAQxpHMABDHoUwAEMbcBZm3cLAEgBAAErAMAA/o1CwAEMgwA/TsABDJnAAQyfAAAnYAPAAPyXARzAAQywg8ABDKHAWZodSwEAARTAAQyxwFmbWAoAAMAA/YFJwAEMxBzAAQzOFMABDMjAWZvVDABIAQABKwDAAP27PgM9FcABDOPAWZvVDDUAAAABAF0DwAD9bQJgA8AAjeFgA8AA/JcBg8ABDOvAWZodNQAAAAEAYAPAAI3hARTAAQz7wFmbWAoANQAAAAEAYAPAAPyXARbAAQ0Xg8ABDQfAWZodYcAA/ZE1AAAAAQBcARzAAQz6FMABDPrAWZw2DQCAvwIAAhTAAQz6wFmcWQ4AFADAWZxxDwAAwAD9ghQAwFmccQ8APRzAAQ02hMABDSnAWZpSVgEAASTAAQ2HAxbAAQ1VFMABDUzAWZtYCgDAAF2NwACN6CeBamrAAQ10YAPAAP5+wAF1HgDAAP1MPRzAAQ2jhcABDZTAWZp7VgEAARTAAQ2nwFmbdwsAAMAA/Uw/PRzAAQ3QFMABDcjAWZsqCQBWAQABHsABDdTAAJM9AQABFMABDd7AWZvVDAAAAMAA/Uw9HMABDgyGwAEN9cBZmqRWAQABH8ABDh/AAJdZAgACHsABDivAAJM4AQABh8ABDjXAWZr0AB/AAQ5CwACXMQEAARTAAQ5WwFmbKgkAAAAAwAD9TADAAP2MPRzAAQ6iFsABDoSCwAEOb8BZmeXAAGLRwACtHMAAamEBAAEfwAEOr8AAl0wBAAGGwAEOxMBZmqQAAMAArSY9HMABDxEWwAEO94LAAQ7iwFmZ5cAAYtPAAK0dwABqYQEAAR7AAQ8awACTPwEAAYTAAQ8pwFmaUgAAwACtJj0cwAEPbhbAAQ9SgsABDz3AWZnlwABi1cAArR7AAGphAQABHsABD3fAAJM/AQABhcABD4bAWZp7AADAAK0mBsAArP6B1cABEHDAARB8wAET8wAAwABqYgAAAAEDwAEQksABE/MAAAAAAAAAYAPAAJdNAT4FTsABEK3AARCzAACEvl0DwAD9OwFgA8AAl00BMcABELVgA8AAl00ATsABEM3AARDcAACzt2ADuKgBFsABEOsWwAEQ3i62I8AArJ7AAKzSs7fAAE2kTsABEYLAARGkAADAAGpjXQPAAP07AWADvSoBMcABEaZgA70qBxbAARG9gcABEa7AWZ7bmwK4rRbAARHcgcABEc3AWZ7bmwW4rhbAARH+gcABEe/AWZ7bmwS4rBbAARIdgcABEg7AWZ7bmwa4rxbAARI/gcABEjDAWZ7bmwG4qxbAARJfgcABElDAWZ7bmwC4sxbAARJ/gcABEnDAWZ7bmw24tj0cwAES/oLAARLcwFmfCIP9AQABNMABEwYDwAETBsABE4YAAAABAQHAARMHAAAAllJgA70qAABgA8AA/aEBPgE9HMABEx6AwAETGMBZnrRWAQABH8ABEybAAJdZAgACHsABEz3AAJM5AQABHMABE1EWwAETSi64FcAArJ7AAKzOhooBAAGDwAETW8BZn9IAwABkwAAewAETZsAAkzgBAAEWwAETeIPAARNwwFmf0oC9vRgAAADAAP1MAMAA/QlKwAETjgEfwAETmcAAl1kCAAIewAETrsAAkzgBAAFqwAETuGADwAD+fsABbGgAH8ABE9PAAJdMAQABgMABE+jAWZ60AAAGwACs/4HVwAEUvsABFMrAARViAADAAGpkAAAAAQPAARTdwAEVYgAAAAAAAABgA8AAl00BPgJOwAEU9MABFP0AAIJuYAPAAJWYARzAARUBasABFQJgA8AAmAbAASCbIAEAASfAAGplAMAAmAhKwAEVHwEfwAEVKsAAl1kCAAIewAEVNsAAkzgBAAFqwAEVQGADwAD+fsABbGMAgMABFVXAWaDkAAbAAK0AgdXAARX7wAEWDcABGDMAAMAAamYAAAABA8ABFhnAARgzAAAAAQEBwAEWIgAAALCdYAPAAI3CAABdA8AA/TsBYAPAAJdNAT4ITsABFkPAARZTAADAAGpnXQPAAP07AWADwACXTQExwAEWVWADwACXTQBPwAEWXsABFmoAAAHAAGpoYQMCYAPAAJWYYAPAAP5+YAPAAJdNAAPAARZ2wAEW3wAAAAICAsABFoUAAACG7GADwACVmADAARaWAAAAwABEXmADwAD+fgAAYAPAAJdNAT4BSsABFqYBH8ABFrHAAJdZAgACHsABFr3AAJM4AQABhMABFsfAWaIMAIPAARbQwFmh/ABOwAEW6sABFvMAAMAAamlgA7ugARbAARcKFsABFv2AwAEW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ASELAAAAAQEBwAEg8AAAAIRIYAPAAI4NAABdA8AA/TsBYAPAAI4mAUrAASD8ARbAASEEgsABIPzAWamNhIjAAI4SAMAA/Qc9HMABIRqCwAEhEsBZqTuD/QEAATTAASEiA8ABISLAASRPAAAAAQEBwAEhKQAAAJn6YAPAAI4mAABgA8AA/aEBPgZJwAEhNhzAASFQFsABIT6DwAEhOsBZqfPAAF2bwACOMUgBAAErAMAA/fFKwAEhWQA/TsABIXXAASGAAADAAFJlYAPAAGL9ARzAASGWFsABIYIur7LAAKyewACs3LN2AQABFsABIaaDwAEhosBZqfOWUsAAjigAu3VOwAEhzsABIdkAAJuwXQPAAPz5AWADwABi/QEcwAEh+BbAASHxFsABId+DwAEh28BZqfPAAF2bwACOMcAAUbzAAHfLgKsBAWADwABi/QE0wAEiBwPAASIHwAEiSgAAAAEBAcABIhIAAACj8WADwAB3tQAAYAPAAGL9AUrAASIcARzAASInFsABIhwuvFjAAKyewACs28AARrkCAAKEwAEiNMBZqj8WwAEiRoXAASJAwFmq55n6wAB3twDAAGP1AMAA/QROwAEic8ABIoEAAKKtXQPAAP1tAmADwABjKWADwABi1gEywAEig2ADwABjKWADwABi1gBGwAEijcABItHAASKjAAAAqVhgA8AAYykAFsABIreDwAEis8BZqfO8FcAAjjI+BE7AASLuwAEi9gAAllJgA702ARbAASMFh8ABIvjAWauEllLAAGMrTsABIyTAASMuAACE4WADwABi/QEcwAEjRxbAASM8LrxYwACsnsAArNvAAEa5AgAChMABI1TAWao/JsABI2gBFsABI2gUwAEjYMBZq6sIALUUvThgA70qAMAAY/VOwAEjkcABI6QAAMAAam5dA8AA/TsBYAPAAGLWARbAASOwFMABI6bAWavRCQCFLMAAYwA9HMABI9SGwAEjx8BZq0mAvwIAAofAASPVwFmrhBzAASP3FMABI+XAWawtCgBLAQABFsABJAAUwAEj+MBZq6sIACe9OQDAAP1KAMAA/YI9HMABJB6BwAEkFsBZqRhWAwADhMABJCLAWao/hcABJC7AWaqGhsABJDrAWatJAMAAeEoAwAD9CU7AASRmwAEkbQAAlnNgA71RARbAASSLFsABJHwWwAEkby62I8AArJ7AAKzSs7fAAE2ksia5YErAASSiARzAASSvasABJKxgA8AAmAbAASCbhWACAAInwABqbzHAASTVYAPAAP3kAxzAASTmFsABJN0uwABER8AArJ7AAKzPwABEVgEAAYPAAST7wFms5gDAAF1CasABJQpgA8AA/n7AAWy4HMABJS4WwAElHi7AAGmqwACsnsAArNXAAFJ0AQABgcABJTzAWakYAMAAeGkAwACYCQbAAK0EgdXAASXqwAEl+MABJ5oAAMAAamoAAAABA8ABJgnAASeaAAAAAAAAAGADwACVmAE+Bk7AASYkwAEmMwAAwABqcF0DwAD9OwFgA8AAl00BMcABJjVgA8AAl00AT8ABJj3AASZCAAABwABqcWEDAmADwAD+fmADwAD+flwAA8ABJkvAASazAAAAAgICwAEmUwAAAIC9YAPAAP5+AMABJmAAAACAlmADwAD+fgAAXAE+AT0cwAEmfoDAASZvwFmt7lYBAAEfwAEmhcAAl1kCAAIewAEmjsAAkzgBAAGCwAEmmMBZrkYAHMABJqFqwAEmomADwACYBsABIJsgAQABg8ABJqXAWa5WAMAAmAgAAMAA/Uw9HMABJsOBwAEmusBZrhsgAgACGsABJtrAAJsCJ8AAanIAAD0cwAEnAIHAASb3wFmuGyACAAIawAEnF8AAmwMnmeUAAD0cwAEnNoHAASctwFmuGyACAAIawAEnTcAAmwQnSwAASsABJ2sBH8ABJ3XAAJdMAQABgMABJ4fAWa3uAAbAAK0FgdXAASkfwAEpLMABMosAAMAAadsAAAABA8ABKT3AATKLAAAAAQEBwAEpRwAAAJaLYAPAAI3hAABgA8AAlIEBPgpOwAEpasABKXUAAIYlXQPAAP07AWADwACUgQExwAEpd2ADwACUgQBJwAEpyyIWwAEp2IDAASnPwFmveMAAXY7AAI3qAB7AASoCwACjGwEAARbAASpCFsABKjUutiPAAKyewACs0rQEwABNnwA+AT0cwAEqZIHAASpZwFmvk1YBAAEewAEqeMAAoxwDAAMWwAEquRbAASqsLrYjwACsnsAArNK0BMAATZ8WwAEqxy6wB8AArOEcwAEq52rAASroYAPAAJgGwAEgmyACAAInwABqczHAASw1WwAAwACYCAAAwAD9TD9OwAEsYsABLHQAAMAAYsVdA8AA/W0C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AAAAAQBdA8AA/W0CYAPAAP5+YAPAAJWYARbAATNXLsAATJXAAKyewACtCzUAAAABAGADwAD+fgGAwAEzX8BZt2YjHMABM2YcwAEzXoLAATNewFm3lEsBAAGDwAEzXsBZt8AAwAD9gUgBAAErAMAA/fE1AAAAAQBgA8AAlZgBHMABM2xqwAEzbWADwACYBsABIJsgAQABgcABM3DAWbd4AMAAmAg1AAAAAQBcARzAATNegsABM17AWbeUgL8CAAKDwAEzXsBZt8CEAMBZuAYAwAD9goQAwFm4BisBYAPAAJWYSsABM4EBgMABM4jAWbdmBsAArRGB1cABM5bAATOjwAE00wAAwABg0gAAAAEDwAEzrsABNNMAAAAAAAAAYAPAAJSBAT4DTsABM9fAATPnAADAAGp4XQPAAP07AWADwACV9gExwAEz6WADwACV9gA9HMABM/kWwAEz8S7AAEyVwACsnsAArQuD/QEAATTAATQBA8ABNAHAATR+AAAAAgICwAE0AgAAAJ8HYAPAAP5+AMABNAkAAACAlmADwACVmAAAYAPAAP2hAT4BPRzAATQzgMABNBjAWbi7VgEAAR/AATQ6wACV/wIAAh/AATRUwACWdgEAAYHAATRowFm5FACCwAE0cMBZuSQAAMAA/UwAwAD9jErAATSFAR/AATSPwACUngEAAR/AATSmwACV1QEAAYDAATS+wFm4uwAAAABZtqAAWbb1AFm3OgBZuIQAWbmwAAAABALAAK0UgdXAATUSwAE1GMABNZkDwABqeQAAAWABwAD95AAAAgTAAK0WgdXAATU6wAE1RwnAAGnmAF0DwAD9OwFgA8AAjdcABMAArReB1cABNVjAATViGIYlAGADwACUgQABBcAArRmB1cABNWbAATVmwAE1lwAAAAPAATVwwAE1lwAAAAIAAALAATV3AAAEwABp5l0DwAD9OwFgA8AAjdcBagBgA8AA/aF5wAE1iwAABIYlYAPAAJSBAWoAYAPAAP2heWADwACtFAE/AwgBwACtFoAAwFm6UQgBwACtF4EAwFm6cwkBwAE1ZsAA/foAAAAAAAAAWbq8AAAAAALAAK0agdXAATWcwAE1osABNnMDwABqegAAAWABwAD95AAAAwTAAK0cgdXAATXBwAE19wnAAGLRAGADwACtIQEfwAE13MAArSsAAAAABMAArR2B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ScAARJQlwABEoIPAAESYwFnp92ADwABJNj4BScAARLYcwABE0BbAAETJFsAARMIUwABEusBZ6fcDAWADwABJNoJVwABF7YDDwAD9IUgBAAGBwABE08BZ6UQAwAD98T4CPRzAAETuFMAARObAWen3AwFgA8AASTa6AwIAAoHAAET4wFnpRILAAET/wFnpqwDAAEZfSsAARREBFsAARSAUwABFGMBZ6fcDAWADwABJNoO1wABF8T8/QsAART4ATsAARWPAAEVoAAGDtWADwABF5wEWwABFcILAAEVqwFnpq4O1wABF8UnAAEV7HMAARZMWwABFjBbAAEWFgcAARX/AWelEuYTAAEXuYcAA/WuBawEAAZQAwAD9xkrAAEWZAYPAAEWgwFntDj9OwABF7sAARfMAAK76YAPAAEZ2AR7AAEYDwABGfQMAAoHAAEYGwFnpRILAAEYNwFnpqwG6ISlJwABGMhbAAEY7hMAARjbAWe15gVXAAEaDSsAARkQBg8AARkvAWe0OP07AAEZbwABGaAAAwABqnmADwAD60QEiJcAARnCBwABGasBZ6URgA8AASLwBJcAARoaBwABGgMBZ6URgA8AASOBJwABGnxbAAEaohMAARqPAWe15uinAAEaGPgNOwABGwcAARsUAAK+VYAPAAEXnARbAAEbMhMAARsfAWe15gMPAAEaHScAARtolwABG4obAAEbewFnuM2ADwABI8z4EScAAR7gcwABHyRbAAEfGFsAAR8AUwABHvMBZ7jMGAWADwABI85oywABF77QSwABFsmMBAAEWwABH1xbAAEfRgsAAR8vAWemrmjLAAEXvtBLAAEWyAMAA/cVKwABH2wGDwABH4sBZ7Q4/ScAAR/AcwABH/xbAAEf4FMAAR/TAWe4zBgFgA8AASPO5hMAARe6B1gEAATTAAEgDA8AASAPAAEgZAAAAAQEBwABIBAAAAIPzYAPAAEXnAABgA8AA+tEBSsAASA0BJcAASBKHwABIDcBZ7x1gA8AASPMAwAD9DkrAAEgcAYPAAEgjwFntDj9JwABJziKFwABJ0sBZ7dgBHMAASfYWwABJ7xbAAEnogcAASeLAWelEuYTAAEXuYcAA/WuBawEAAZUAwAD9xj4BScAASggiIhzAAEoSgcAASgzAWelEue4BAAEWwABKGS7AAFP+wACtMcAArYQAwABG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AFsBPgZOwACgU8AAoFkAAKEpXQPAAP07AWADwABF5wEcwACgZxbAAKBggMAAoFvAWh1NuYTAAEXugK0AAAAAwAD9D07AAKB5wACggwAAhGNgA8AASfMBH8AAoInAAEn6AQABgMAAoJTAWh1NAD0XwAChGYTAAKEPwFodzKWkFsAAoTKAwAChLcBaHU2lpMAARerAAEXqPRfAAKFThMAAoUnAWh3MpaMfwAChY8AAreIBAAGCwAChc8BaHXgAwABF6T0cwAChiRbAAKGDgMAAoX7AWh1NmjLAAEXvuZkCAAKAwAChksBaHU2EwAChmMBaHcwAwABF1EbAAKGowAChycAAoboAAACkAGADwABF5wCDwAChwsBaHY4+AUnAAKHRHMAAod6BwACh1cBaHV0gAQABhcAAod/AWh6IAAA+AT0cwACh9YXAAKHwwFoeiLoDAgACgMAAof/AWh1NhMAAogXAWh3MAMAARl8/BsAArdqB18AAoibAAKI3wAClUgAAsQABasAAoidgA8AA/eQCAAABA8AAokDAAKVSAAAAAQEBwACiRwAAAIPzYAPAAEjnAABcAT4ETsAAolfAAKJcAACYs2ADwAD8lwGXTsAApM3AAKTWAADAAGq/YAPAAPyXARbAAKTkFsAApN2AwACk2MBaHym5hMAARe5hwAD9a0nAAKTwHMAApQQcwACk/YLAAKT0wFofVIONAQABgcAApP/AWh8/AMAA/b+BawEAARzAAKUQHMAApQk3B2QBAAGBwAClC8BaHz8AwAD9vWQBAAEcwAClG4LAAKUSwFofVIONAQABlADAAP2/AMAA/b0AwAD9xkrAAKUgAD89HMAApSwuwABFw8AArTEDAAOAwAClM8BaHyk0wAClOQPAAKU5wAClRAAAAAEBAcAApToAAACAtWADwABF5wAAYAPAAPrRAUrAAKVAASknwABqwADAAK3WBsAArduB18AApVfAAKVowACm0AAAhhcBasAApVhgA8AA/eQCAAABA8AApXXAAKbQAAAAAQEBwAClgAAAAIPzYAPAAEi8AABcAT4FScAApYwcwACloxbAAKWcFsAApZWAwAClkMBaIJG5hMAARe5hwAD9a4FrAQABlADAAP3GSsAApakAP07AAKXDwAClzAAAhhVgA8AAYUIBFsAApdOAwAClzsBaIJGGFcAASL5JwACl4hbAAKXvgcAApebAWiDhqELAAGFFPgI9HMAApf8uwABqwcAArTEBAAGAwACmC8BaIJEAwACt10rAAKYYAD9JwACmKxbAAKY4gcAApi/AWiDhusXAAGFJPgI9HMAApkcuwABqwsAArTECAAKAwACmUsBaIJEmwACmWAGBwACmWMBaIOFgA8AAYZsAwACt2ErAAKZpAD9JwACmfBbAAKaJgcAApoDAWiDhtdnAAGFMPgI9HMAAppsuwABqw8AArTECAAKAwACmqcBaIJEmwACmrwGBwACmr8BaIOFgA8AAYfgAwACt2UrAAKbAAD8GwACt14HXwACm1cAAptrAAKpcAADAAGrBwACtMQAAAAEDwACm5cAAqlwAAAABAQHAAKbwAAAAg/NgA8AASLwAAFwBPgZOwACnAMAApwUAAJizYAPAAPyXAZdPwACnD8AApxQAAAHAAGrEYQMBYAPAAEXnYAPAAPrRAAPAAKcjwACppAAAAAEBAcAApzEAAAC5RmADwABF5wAAYAPAAPrRAT4HScAAp4klwACnmYPAAKeNwFoigWADwABJfUrAAKexASo/ScAAp8YlwACn1oPAAKfKwFoigWADwABG2ErAAKfiASk/ScAAp/UlwACoBYPAAKf5wFoigWADwABGw0rAAKgRASk/ScAAqCQlwACoNIPAAKgowFoigWADwABI80rAAKg9ASk/ScAAqJslwACoq4PAAKifwFoigWADwABJNkrAAKi3ASo/ScAAqRElwACpIYPAAKkVwFoigWADwABJB0rAAKkvASo/SsAAqZIBKk7AAKmvwACpuAAAwABqv2ADwAD8lwEcwACpui7AAGq9wACtMQIAAoDAAKnOwFoiKILAAKnUwFoiVwDAAK3VScAAqeocwACp/hzAAKn3g8AAqe7AWiNpg40BAAGBwACp+cBaIj4AwAD9v4FrAQABHMAAqgocwACqAzcHZAEAAYHAAKoFwFoiPgDAAP29ZAEAARzAAKoVg8AAqgzAWiNpg40BAAGUAMAA/b8AwAD9vQDAAP3GSsAAqhoAPz0cwACqJi7AAEXDwACtMQMAA4DAAKotwFoiKILAAKozwFoiVyfAAGrFAMAArdZKwACqUgAGwACt2IHXwACqYcAAqmbAAK45AADAAGrCwACtMQAAAAEDwACqcMAArjkAAAACAgLAAKp7AAAAg/NgA8AASLwAwACqkgAAAMAAS79gA8AAYZsAAFwBPghOwACqrMAAqrIAAICWYAPAAPqjARbAAKrAgcAAqrTAWiSWqszAAGGdTsAAqtXAAKraAACBsmADwAD+fgEcwACq4oLAAKrcwFokriMAAAAAwAD6zU7AAKr2wACq+wAAmLNgA8AA/JcBFsAAqwKDwACq/cBaJNZhwAD+gknAAKsOHMAAqxeEwACrEsBaJQGBawEAAZYAwAD9xkrAAKsdAD9PwACrKsAAqy8AAAHAAGrEYQMBYAPAAEXnYAPAAPrRAAPAAKs+wACtcwAAAAEBAcAAq0wAAAC5RmADwABF5wAAYAPAAPrRAT4HScAAq2ElwACrcYbAAKtlwFole2ADwABG2ErAAKt9ASk/ScAAq5AlwACroIbAAKuUwFole2ADwABGw0rAAKusASk/ScAAq78lwACrz4bAAKvDwFole2ADwABJNkrAAKvbASk/ScAAq+4lwACr/obAAKvywFole2ADwABI80rAAKwHASk/ScAArFwlwACsbIbAAKxgwFole2ADwABJB0rAAKx6ASo/ScAArN0lwACs7YbAAKzhwFole2ADwABHuErAAKz+ASo/SsAArWEBKk7AAK1+wACthwAAwABqv2ADwAD8lwEcwACtiS7AAGq9wACtMQIAAoDAAK2dwFokhoXAAK2jwFolUQDAAK3VScAArbkcwACtzRzAAK3GhsAArb3AWiZjg40BAAGEwACtyMBaJQEAwAD9v4FrAQABHMAArdkcwACt0jcHZAEAAYTAAK3UwFolAQDAAP29ZAEAARzAAK3khsAArdvAWiZjg40BAAGUAMAA/b8AwAD9vQDAAP3GSsAArekAPz0cwACt9S7AAEXDwACtMQMAA4DAAK38wFokhoXAAK4CwFolUSTAAK40AieAtRzAAK4cg8AArhfAWiTWwABDewIAAieBjSeAtQDAAP6cAMAArdYGwACt2YHXwACuPsAArkPAALKEAADAAGrDwACtMQAAAAEDwACuUMAAsoQAAAACAgLAAK5bAAAAg/NgA8AASLwAwACudQAAAMAAS/NgA8AAYfgAAFwBPghOwACuksAArpgAAICWYAPAAP5+ARbAAK6pgcAArprAWieunazAAGH6TsAArr7AAK7FAABhYAPAAPyXARbAAK7NgsAArsfAWifGYcAA/oJOwACu3cAAruIAAJizYAPAAPyXARzAAK7rg8AAruTAWifuZAEAAZUAwAD9vUnAAK8HHMAArxCEwACvC8BaKBSBawEAAZUAwAD9xkrAAK8WAD9PwACvI8AArygAAAHAAGrEYQMBYAPAAEXnYAPAAPrRAAPAAK83wACx0QAAAAEBAcAAr0UAAAC5RmADwABF5wAAYAPAAPrRAT4IScAAr6glwACvuIbAAK+swFook2ADwABHuErAAK/JASo/ScAAsBEcwACwHIPAALAVwFon7oFtAQABNxAAwAD9yErAALAjASk/ScAAsDclwACwR4bAALA7wFook2ADwABG2ErAALBTASk/ScAAsGYlwACwdobAALBqwFook2ADwABGw0rAALCCASk/ScAAsJUlwACwpYbAALCZwFook2ADwABJNkrAALCxASk/ScAAsMQlwACw1IbAALDIwFook2ADwABI80rAALDdASk/ScAAsT8lwACxT4bAALFDwFook2ADwABHYkrAALFdASk/SsAAsb8BKk7AALHcwACx5QAAwABqv2ADwAD8lwEcwACx5y7AAGq9wACtMQIAAoDAALH7wFonnoXAALIBwFooaQDAAK3VScAAshccwACyKxzAALIkhsAAshvAWimig40BAAGEwACyJsBaKBQAwAD9v4FrAQABHMAAsjccwACyMDcHZAEAAYTAALIywFooFADAAP29ZAEAARzAALJChsAAsjnAWimig40BAAGUAMAA/b8AwAD9vQDAAP3GSsAAskcAPz0cwACyUy7AAEXDwACtMQMAA4DAALJawFonnoXAALJgwFooaSTAALJ/AyfAAGrGg8AAsnbAWifuJ4C1AMAArdYAAFobBABaG5QAWhx8AFodHQBaHvMAWiBbAFoh+ABaJFYAWiduAFoqmwAAAAkCwACt3oHXwACy68AAsvHAALNUA8AAascAAAFgAcAA/eQAAWABvRYBBMAAreCB18AAszDAALM0CYC9AWrAALMYYAPAAP3kAmADwAD+fgABBcAAreKB18AAszjAALM4wACzUgAAAAPAALNHwACzUgAAAAEBAcAAs00AAASAvWADwAD+fgAAYAPAAK3eAT8CCAHAAK3ggADAWis8CQHAALM4wAD9+gAAAAAAAABaK3EAAAAAAAEGwACtM4HXgxCDFYN1AAHAAGrIAAAAAQODLYN1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NQEBXQPAAK4jAWADwABF5wGTAAgAwACuLh62TcAA+DUBAV0DwACuIwFgA8AARecBkwAJAbX0wAD9+gAAAAAEBsAArjCB2LZstnG26QAAwABq6AAAAAEDtni26QAAAAICAraGAAAAg0pgA8AARecAtpsAAADAAF95YAPAAEXnAABcAT4BPRy2tRa2ri7AAEO+wACuLVYBAAEftr3AAK4qAgFgA8AARecCgLbQwFpLnYG22MBaS6sAAMAA/UwGwACuMYHYtu6287d2AADAAFANAAAAAQO3ALd2AAAAAgICtw4AAACDSmADwABF5wC3IwAAAMAAX3lgA8AARecAAFwBPgE9HLdCFrc2LsAAUAzAAK4uVgEAAR+3SsAArioCAWADwABF5wKAt13AWkwagbdlwFpMKAAAwAD9TAbAAK4ygdi3e7eOt8gAACMBard8YAPAAP3kAgAAAQO3lrfIAAAAAAAAAGADwAD+fgFKt5wBJLfIBCfAAGrpFremLsAAQ77AAK4tJ8AAauoWt7wuwABQDMAAri4GwACuNIHYt8231rgGAQCBVQAAAAEDt964BgAAAAAAAABgA8AA+tEBSrfhASIWt+gWt+EuwABDvsAAri2BVcAA/R0AFrf/FrfzLsAAUAzAAK4ugVXAAP0dAABaS3sAWkv4AFpMdQBaTNAAWk0oAAAABALAAK43gdi4lbibvpsDwABq6wAAAWABwAD95AAABATAAK45gdi4zbjUCcAAauwAXQPAAP1tAmADwABF52ADwAD+fgAEwACuOoHYuPy5CAnAAGrtAF0DwAD9bQJgA8AARbBgA8AArisABMAArjuB2LlwuXwJwABq7gBdA8AA/i8BYAPAAP5+AATAAK48gdi6ULpYCcAAau8AYAPAAP5+AAEFwACuSIHYurC6sLtwAAAAA7q9u3AAAAAAAAAAYAPAAK43AT8FCADAAK45HrrWwAD9dAACYAPAAEXnYAPAAP5+AAAIAMAArjoeuw7AAP10AAJgA8AARbBgA8AArisAAAgAwACuOx67SsAAwaYAAWADwAD+fgAACADAAK48J8AAavAJAbqwwAD9+gAAAAAIBsAArj6B2LpdumS6qwAAwABfhAAAAAEDum+6qwAAAAAAAABgA8AA/n4BPgI9HLqFFrp4LsAAau7AAK47VgEAARa6iS7AAGrvwACuPADAAP48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kwcAAACClGADvlEAkx4AAAC67V0DwAD+LwFgA70qAABgA70qAT4CSZM4FpNeHJNRFpM8LsAAU/7AAK58wACuiKhCAQABgJNYwFp48AC+irMavkA+AUmTeRaTnxyTkhaTfS7AAFP+wACufMAAroioQgEAAYCTmcBaePAAvoq0rb4/PgFKk7sBFpPSFpPCLrR8wACufMAAroaxvbj8P0mT8haUIRyUCxaT9i7AAFP+wACufMAAroi10gEAAYCUG8BaePAAvpy0rb4/PgFKlDsBFpRSFpRCLrR8wACufMAAroaxu7j6SZRpFpSXHJSCFpRtLsAAU/7AAK58wACuiLXWAQABgJSRwFp48AC+oLStvj8+AUqUsQEWlMgWlLgutHzAAK58wACuhrG8uPtJlOIWlREclPsWlOYuwABT/sAArnzAAK6ItdgBAAGAlQvAWnjwAL6itK2+Pz4BSpUrARaVQhaVMi60fMAArnzAAK6Gsb64/UmVWhaViByVcxaVXi7AAFP+wACufMAAroi12gEAAYCVgsBaePAAvqS0rb4/PgFKlaIBFpW5FpWpLrR8wACufMAAroaxuLj3SZXTFpX6HJXsFpXXLsAAU/7AAK58wACuiLXKAQABgJX0wFp48AC+lLStvj8+AUqWFAEWlisWlhsutHzAAK58wACuhrG5uPhJlkQiIhaWchyWXRaWSC7AAFP+wACufMAAroi11AEAAYCWbMBaePAAvp60rb4/ACEclqKBlo/AWnj8gxwBAAEWlrsWlqsutHzAAK58wACuhrG7uPoAwAD+OwAhHJbmgZbTwFp4/IMcAQABFpb/FpbvLrR8wACufMAAroaxvLj7AMAA/js+AUqYAgEWmBkWmAkutHzAAK58wACuhrG6uPk+Ak6a/5sHAACWUmADvSoBHJseFpsJLsAAU/7AAK58wACuiLXBAQABgJsswFp48AC+iUmbOSIhHJtFgps9wFp7kkgBAAErAMAA/fEAHJtoFptdFptQLrYjwACufMAAroG4LcAATaCzbAEAAYKbdsBae5IAwABqvz4BSpuKAYKbkcBae5I/SputASsGwACukYHam8Gbzp0kAADAAGsPAAAAAQOb250kAAAAAQEBm/MAAAC6Kl0DwAD8+QFgA8AARecAAGADwABF5wE+A06cFAAAAIF2YAPAAEXnAEFGnCgAnDoAAACIYmADwABF5wCAnEfAWnw7QT4DRpxdnIicbwAAAF5gA8AARecAgJx6wFp8Oz4BSZySIiEcnJ6DnJbAWnyLSAEAAYKcocBafG4AwAD98QAhHJy5gpyvwFp8brmqAQABg5zDwFp8iwDAAEZwQpzNAT89iZzowFp8W4Kc8cBafG5CnQIASp0TAYGdGsBafFsGwACukoHanSmdNJ2eAAHAAGq/AAAAAQOdPJ2eAAAAAgICnUoAAACkAGADwABF5wCdXQAAAJuHYAPAAEXnAABgA8AA/JcBSp1sARadmBydeBadcYCdbMBafSKCVcAARe2BpQEAATSdfgOdfp2WAAAAAQEBnX8AAACBe2ADwABF5wAAYAPAAPrRAUqdiQEcnY+CnYnAWn1zSAEAAYGdksBafTAAwAD98QDAAP0FYcAA/RwGwACuk4HanaOdtL44AAC5BQFqnaRgA8AA/eQCAAABA53EvjgAAAABAQGd0gAAAIPzYAPAAElrAABgA8AA+tEBPhJJnd4cnfscnfAWneeAneLAWn3bhY/AAEl2ufMAAAAAwABGMUgBAAEWngUWnf4uwABf/8AArnzAAK6DuUvAAEUKAMAA/fE+Aj0cnyQWnx6AnxnAWn3bmjLAAEXvuaUCAAKAnyzAWn3bFp85Fp8yLsAAX//AAK58wACug7lIwABFBwDAAEXZSp9RASk/PRyfaS7AAGsQAQABgJ+EwFp92wDAAK6USZ+QFp+gFp+ZgJ+UwFp927mEwABF7oFVwAD9HUqfqQEpP06ixQAAALrtXQPAAP4vAWADvSoATqLqovQAALmPYAPAAEXnARyi9i7AAGsPAQABFqMJgKMEwFp927mEwABF7gDAAK6RSaOIIiIiJaOWgqOMwFp+zWADwABG5AAco70Uo7PAWn7NAgFgA8AARuS6VQEAARaj0S62I8AArnzAAK6BAMAARvQAHKPvgKPqwFp920gBAAEWo/wUo/LAWn7NAgFgA8AARuSFj8AARu4AwAD98QAcpCoepBDAAK6SAgACFKQZwFp+zQIBYAPAAEbkgKQkwFp92wBIAQABlADAAP27PgI9iaQ4wFp+uRykXhakTS7AAFOtwACufMAArofAAFOaAgACFqSUFqSLFKSBwFp+zQIBYAPAAEbkpTTAAEbngL3AAEvdFqSaLrYjwACufMAAroEAwAB6jUmlLiIcpUWBpTLAWn65gxwBAAEWpV4WpU4utHzAAK58wACuhrG6uPkAwAD+OwAhIhylj4GlfMBafrmDHAEAARalqBalmC60fMAArnzAAK6Gsby4+wDAAP47ARyl24GlyMBafrmDHAEAARal9Bal5C60fMAArnzAAK6Gsbu4+gDAAP47PgNOph0AAACaTV0DwAD+LwFgA70qAEamLwCmQQAAAKQAYAPAAEXnABamToCmScBafdu5hMAARe5BPgRJpmIhJaZrhKZmwFqAjWADwABG2EKmeAA/TqadpqkAALtkXQPAAP4vAWADvSoBHKbLFqarLsAAU63AAK58wACuh8AAU5oCAAIWpvEWpuiEpuPAWoCNpTTAAEYrgL3AAEvdFqb3LrYjwACufMAAroEAwAB6jUmnEBynIIWnFMBagMiDHAEAARanORanKS60fMAArnzAAK6Gsbu4+gDAAP47PgI9Ixyn7IOn48BagHZIAQABKwDAAP3xi6fjwFqAdh6n9MAAwaYAAWADvSoAACsBXQPAAP4vAWADvSo9HKgdg6gUwFqAdlYBAAEWqDEWqCEutHzAAK58wACuhrG7uPoAwAD+PD9JqFQcqGSFqFjAWoDIgxwBAAEWqH0WqG0utHzAAK58wACuhrG8uPsAwAD+Oz4CPSMcqTODqSrAWoB2SAEAASsAwAD98YupKsBagHYeqTvAAMGmAAFgA70qAAArAV0DwAD+LwFgA70qPRypZIOpW8BagHZWAQABFql4FqloLrR8wACufMAAroaxvLj7AMAA/jw/SaoDIRyqEIOqB8BagHZIAQABKwDAAP3xPgE9iaolwFp+uRyqTYGqOsBafrmXLgEAAYOqU8BagHYAwAD+Rj8/PgI9iasGwFp+uR6rH8AAwaYAAWADvSoAAEFGqzmrYKtLAAAApABgA8AARecAFqtYgKtTwFp927mEwABF7j4BSatqIiIiJatzg6tuwFqComADwABG5AAcq5kUq5TAWoKiAwFgA8AARuS6VQEAARarrS62I8AArnzAAK6BAMAARvQAHKvPgKvKwFp920gBAAEWq9cUq9LAWoKiAwFgA8AARuSFj8AARu4AwAD98QAcrAQeq+/AAK6SAgACFKv4wFqCogMBYAPAAEbkgKv+wFp92wBIAQABlADAAP27PgE9HKwpgawWwFp+uYClAQABHKxBFqwwLsAAU63AAK58wACuh8AAU5oCAAIWrHYWrG0UrGjAWoKiAwFgA8AARuSlNMAARueAvcAAS90WrHwutiPAAK58wACugQDAAHqNAMAA/j1JrJsiIiIlrKSDrJ/AWoKiYAPAAEcvABysyBSsw8BagqIDAWADwABHL7pVAQABFqzcLrYjwACufMAAroEAwABHOQAcrP6ArPnAWn3bSAEAARatBhStAcBagqIDAWADwABHL4WPwABHNQDAAP3xABytMx6tHsAArpICAAIUrSfAWoKiAwFgA8AARy+ArS3AWn3bAEgBAAGUAMAA/bs+AT0crViBrUXAWn65gKUBAAEcrXAWrV8uwABTrcAArnzAAK6HwABTmgIAAhatpRatnBStl8BagqIDAWADwABHL6U0wABHM4C9wABL3Ratqy62I8AArnzAAK6BAMAAeo0AwAD+PT4CPRyuaIGuVcBafrmApQEAARaugBauby7AAFOtwACufMAAroe67cAAepAAwAD+PUKunwA9F67IgK7DwFp927rtga7dwFp+ucAASW1OrwOvDAAAhY9gA8AARecBFq8TgK8OwFp924WPwABJdk6vXK9wAADAAGsNYAPAAEXnARyvei7AAGsLAgACg6+YwFqFEYGvosBafrkAwACuj0mvuyEcr9OEr7/AWoUxSAEAASsAwAD98T4CPRyv7xav6YCv5MBafduaMsAARe+5pQIAAoCv98BafduEr/3AWoUxAMAARdlKsBkBKj9JsMUWsM6AsMnAWn3buu/AAEl3SrDwASo/SbJIFrJyHLJVg7JMwFqFEahCAQABFrJcLsAAU/7AAK58wACuiADAAEY1sxq+QD4BSbKNIRyypYGyksBafrmDHAEAARayvhayri60fMAArnzAAK6Gsb24/ADAAP47PgFJsyYhIiIWs38cs0aDsyzAWoURtcIBAAEWs1guwABT/sAArnzAAK6IAMAARjizGr5AARaz9ByzuoOzoMBahRG1wwEAARazzS7AAFP+wACufMAArogAwABGObMavkABFrRoHLQvg7QVwFqFEbXLAQABFrRBLsAAU/7AAK58wACuiADAAEZBsxq+QD4CTrSUtKUAALh9YAO9KgEctKcuwABrDgIAAhy08Ra03C7AAFP+wACufMAAroi1uQEAARa1BoO0/cBahRG56cAARicAvoCBtSbAWn65AMAArpBJtUUhHLVahbVJwFqGsEgBAAErAMAA/fE+BE61frWSAADAAGAkYAPAAEXnARy1mxa1lC7AAF//wACufMAAroOq8AIAAh+1vMAAYmYBAAGFtdXAWoawABa16C62I8AArnzAAK6BAMAARRU9F7YIgLYDwFp927rwJrYIAYa2KcBahxpgA8AASLzAAEl6PRy2ZRa2Xoa2SsBahxq5hMAARe5WAQABgLZpwFp92wDAAP1MSrZ8ASo/Pz8/Sbb0IRy3Cxa3BBa2/YC2+MBafdu5hMAARe5hwAD9a0gBAAGUAMAA/btKtxEBKj9OtzC3NQAApABgA8AARecBFrdDFrc8gLc3wFp927mEwABF7oDDwAD9IUm3nCEct6aFt6HAWofnuhsBAAGAt7rAWn3bAMAARnJKt8EBKj9Pt9S32QAAAcAAaxFhAwFgA8AARedgA8AA+tEAA7fouK4AAAABAQG39gAAAIRcYAPAAEXnAABgA8AA+tEBPgVOuBe4HQAAmjJgA8AARbABFrgkhbgfwFqH55oywABF7z0cuDcUuDHAWoh0CAC5mQIAAoW4QMBah+eHuEbAWohbAMAARdQ9HLhgFLhawFqIdAgAuaUCAAKFuGjAWofnh7huwFqIWwDAAEXZPRy4iBS4gsBaiHQIAIReAQABhbiPwFqH5wDAAEXWSricASpJuLUluL6FuLnAWofnYAPAAEnJPgFJuVMcuVyAuVfAWn3bSAEAARa5ZBS5X8Bah+cFAWADwABJybsJwABJ1QDAAP3xPgFJuXscuZAWuX8uwABTrcAArnzAAK6HwABTmwIAAha5vRS5uMBah+cFAWADwABJybsEwABJzha5zS62I8AArnzAAK6BAMAAeo4+A0659boFAADAAGsSYAPAAEXnAR+6C8AASeIEAAQWuh8UuhrAWofnBQFgA8AAScm7BMAASc4WukIUuj3AWofnBQFgA8AAScmCb8AASdQWulMUuk7AWofnBQFgA8AAScm56cAARicWumkUumTAWofnBQFgA8AAScmlpMAAReoAPRe6l4e6h8BaiZCloxa6rBS6p8Bah+cFAWADwABJyaWjwABF6cAARelKusUBHLrbhrrMwFqINyABAAGHutzAWomQAAA/P0m7CyW7FIW7D8Bah+dgA8AARuQ+AUm7Lxy7OIC7M8BafdtIAQABHLtGFrtAFLs7wFqH5wUBYAPAAEbkglXAAEXtSwEAAZMAwAD9SgDAAP3xPgdOu5m7pgAAqnJgA8AASLwBHLuvFruoLsAAX//AAK58wACug7ldAQABFru/LrYjwACufMAAroEAwABFHU676bvwAACCVV0DwAD9OwFgA8AARecBHrv2wAD9QQEBYAPAAEXnARa8ExS8DsBah+cFAWADwABG5IJVwABF7QA9HLwqFLwkwFqK4AgAgL8CAAKTh7wwwFqKpQDAAP1LTrxavG0AAMAAaxNgA8AASX0BH7xzwABJhgcABxa8lC7AAFP+wACufMAArogWvLsUvLbAWofnBQFgA8AARuSlNMAARucWvNYUvNHAWofnBQFgA8AARuSFksAARu0UvPDAWorgCAAWvQkUvQTAWofnBQFgA8AARuS56cAARicWvSsUvSbAWofnBQFgA8AARuSFLMAARu+BvUbAWn65AD0XvXYUvWPAWos/CQClpBa9jxS9isBah+cFAWADwABG5KWkwABF6sAAReo9F729FL2qwFqLPwkApaMWvdIUvc3AWofnBQFgA8AARuSlo8AARenAAEXpSr3pARy9/4a98MBaiDcgAQABFL4AwFqLPwkAAAA/P0q+KAEqBsAArpSB2r49vkLAAEVdAADAAGsQAAAAAQO+XMAARV0AAAABAQG+agAAAIPzYAPAAElrAABcAT4DTr6DvowAAIWPYAPAAEXnARa+k4C+jsBajHuFj8AASXZPv9G/0QAAAcAAaxRhAwJgA8AARthgA8AAS89gA8AA/aEAA7/dwABBugAAAAICAr/mAAAAu+1gA8AARtgAv/cAAAClNGADwABLzwAAYAPAAP2hAT4CTsAAQBbAAEAjAADAAGsVYAPAAEXnARzAAEAsg8AAQCXAWozdufYBAAEWwABAPC62I8AArnzAAK6BAMAARlFJwABAURzAAEBpHMAAQF6BwABAVcBajI+58wAAAADAAEYxSAEAARzAAEB5hcAAQGzAWo0EufMAAAAAwABGMQDAAP3xPgJOwABAoMAAQLMAALrtXQPAAP4vAWADvSoBHMAAQNMWwABAtS7AAFOtwACufMAArofAAFOaAgACFsAAQPSEwABA68BajOuAvcAAS90WwABA+i62I8AArnzAAK6BAMAAeo1JwABBEhzAAEEWLsAAawwCAAGFwABBL8BajQQBuu2GwABBXcBajYfAAK6OPgE9HMAAQYWDwABBfsBajN26AwIAAoDAAEGPwFqMe4XAAEGVwFqNBADAAEZfPz9GwABBwcAAQfHAAEHTAAAApABgA8AARecAHMAAQecWwABB4IDAAEHbwFqMe7mEwABF7oCtAAAAAMAA/Q8+AUnAAEH5JcAAQgKDwABB/cBajklgA8AASck+AUnAAEIUHMAAQikWwABCHRTAAEIYwFqOSQMBYAPAAEnJuwnAAEnVSAEAAYDAAEIswFqMewDAAP3xPgJOwABCS8AAQlYAAIJvYAPAAEXnARbAAEJdFMAAQljAWo5JAwFgA8AAScmCb8AASdRJwABCcxzAAEJ3LsAAawwBAAGEwABCkMBajtQAwACujj4BPRzAAEKwFMAAQqvAWo5JAwFgA8AAScm6AwIAAoDAAEK6wFqMe4TAAELAwFqO1ADAAEZfPz9JwABC8CXAAEL5g8AAQvTAWo5JYAPAAEbkPgFJwABDFiIiHMAAQx8UwABDGsBajkkDAWADwABG5LpVAQABFsAAQzMutiPAAK58wACugQDAAEb0ABzAAENVgMAAQ1DAWox7SAEAARzAAENjFsAAQ10UwABDWMBajkkDAWADwABG5IJVwABF7UsBAAGTAMAA/UoAwAD98QAcwABDix7AAEN2wACukgIAAhTAAEN/wFqOSQMBYAPAAEbkgMAAQ4XAWox7AEgBAAGUAMAA/bs+AT0cwABDqYLAAEOdwFqMsSACAAIUwABDqsBajkkDAWADwABG5BbAAEO1FMAAQ7DAWo5JAwFgA8AARuSlNMAARucAAD9JwABD1yXAAEPgg8AAQ9vAWo5JYAPAAEcvPgFJwABD+yIiHMAARAQUwABD/8BajkkDAWADwABHL7pVAQABFsAARBgutiPAAK58wACugQDAAEc5ABzAAEQ6gMAARDXAWox7SAEAARzAAERIFsAAREIUwABEPcBajkkDAWADwABHL4JVwABF7UsBAAGTAMAA/UoAwAD98QAcwABEcB7AAERbwACukgIAAhTAAERkwFqOSQMBYAPAAEcvgMAARGrAWox7AEgBAAGUAMAA/bs+AT0cwABEjoLAAESCwFqMsSACAAIUwABEj8BajkkDAWADwABHLxbAAESaFMAARJXAWo5JAwFgA8AARy+lNMAARzMAAD8+AAbAAK6VgdrAAEViwABFc8AASw8AALkbAWrAAEVjYAPAAP3kAgAAAQPAAEWKwABLDwAAAAEBAcAARZ8AAACD82ADwABJfQAAYAPAAPrRAT4KTsAARhXAAEYeAACGFWADwABF5wEcwABGKC7AAGsLAgACHMAARlEWwABGS4DAAEZGwFqRtIJVwABF7UsBAAGUAMAA/UoWwABGW4DAAEZWwFqRtLrtwABJgADAAK6PScAARnUcwABGgoHAAEZ5wFqRz0gBAAErAMAA/fFKwABGiwEqP07AAEanwABGsAAApTRgA8AAS88BFsAARreAwABGssBakbSlNMAARudOwABG08AARuAAAIWSYAO+UQEWwABG54DAAEbiwFqRtIWSwABG7U7AAEcGAAAAuUZgA8AARecAScAARxcWwABHJILAAEcbwFqSUYVCwABL3z4BPYzAAEc2wFqSnx/AAEdIwABHFwcAB4LAAEdowFqSUYPAAEd8wFqSeRbAAEeZgMAAR5TAWpG0llLAAEbrMcAAR7pgA8AARecCgcAAR7vAWpHPHMAAR9AWwABHyoDAAEfFwFqRtIJVwABF7UsBAAGUAMAA/UopFsAAR/WAwABH8MBakbS56cAARicWwABIFYDAAEgQwFqRtKWkwABF6gBJwABINBbAAEhBgsAASDjAWpJRhUTAAEvgPgE9jMAASFPAWpKfH8AASGXAAEchBwAHgsAASIXAWpJRg8AASJnAWpJ5FsAASLaAwABIscBakbSWUsAARusxwABI12ADwABF5wOBwABI2MBakc8cwABI7RbAAEjngMAASOLAWpG0glXAAEXtSwEAAZQAwAD9ShzAAEj9FsAASPeAwABI8sBakbSCVcAARe1LAQABlQDAAP1KKRbAAEkigMAASR3AWpG0uenAAEYnFsAASUKAwABJPcBakbSlpMAAReoAPgNOwABJfMAASYMAAIJVXQPAAP07AWADwABF5wEewABJicAA/UEBAWADwABF5wEWwABJpoDAAEmhwFqRtIJVwABF7QA9HMAASbuFwABJtcBalEeAvwIAApOBwABJwcBakc8AwAD9Sz2MwABJ0cBakp8fwABJ48AARwgHAAaCwABJ+MBaklGDwABKAsBaknmFwABKEMBalEcWwABKJ4DAAEoiwFqRtLnpwABGJxbAAEo9gMAASjjAWpG0hSzAAEl/FsAASlGAwABKTMBakbSlpMAAReoBulEpTsAASpvAAEqhAACaMmADwABFsAEWwABKqIDAAEqjwFqRtJoywABF7z0cwABKuYXAAEqzwFqVHbmZAgACgMAASsLAWpG0hMAASsjAWpKfAMAARdQ9HMAASuCFwABK2sBalR25pQIAAoDAAErowFqRtITAAEruwFqSnwDAAEXZSsAASwABKQAAWnJFAFpyigBactMAWnMaAFpzhQBadKAAWnTlAFp2KQBad2YAWnjOAFp8GQBafQAAWn2xAFqMVQBakX4AWpWhAAAADwAAAYHaAFqV6ABacUIAWpXmAAAAAQBalegAAAAAAAIEwACumACB2wAACoDaAAC4pwABAQGxf4EQAAC9FQAAgTQAAMAAYtEAAIFVAAC+NgAAgYYAAMAAQZIAAIGnAADAAEu9AAEBAaTpgdkAAMAATZgAAQEBpO2CAwAAwACrBAAAghoAAMAARI8AAIIvAADAAJHsAAAAAAABAsAArpmB24VnhW3AAFCmA8AAaxYAAAFgAcAARSYAAWABwACR7wcEwACum4HbhdKF+AnAAGsXAF0DwAD9bQJgA8AA/JdgA8AARecBHoXgwAD9dAACYAPAAPyXYAPAAEXnAAAEwACunIHbhgyGJgmbuABdA8AA/TsBYAPAAPyXAR6GG8AA+DUBAWADwAD8lwGTAATAAK6dgduGTIaKCcAAaxgAXQPAAP1tAmADwABF52ADwAD8jQEehm3AAP10AAJgA8AARedgA8AA/I0AAATAAK6egduGsIa3Cbc0AGADwABBuAAEwACun4HbhtCG3gmztwBgA7ioAATAAK6ggduG9YcACaUiAGADwABNnAAEwACuooHbhx6HIgnAAF/+wACumABgA8AAqwUAAQXAAK7HgduHXYddh7UAAAADh26HtQAAAAQEBId7AAAEtzRgA8AAQbgAh4kAAASzt2ADuKgAh54AAASlImADwABNnACHsAAABMAAX/5gA8AAqwUAAGADwACumQE/BQgBwACunoAAwFqXwwgBwACun4EAwFqX0QgBwACuoIIAwFqX3QgBwACuooMAwFqX6wkBh13AAEWSAAAAACAGwACupIHbhyaHPYdYAQCAvQFqhydgA8AA/eQCAAABA4dCh1gAAAAAAAAAYAPAAP5+AUqHRQEnwABrFgbAAK6lgduHuofSiA4BALEqAAAAAQOH5ogOAAAAAAAAAGADvlwBSofvARaH+xaH7y6lIsAArqCxKsAATaUGwACup4HbiBOIIYhwAADAAEFvAAAAAQOILIhwAAAAAQEBiDoAAAC5RmADwABF5wAAYAO+UQE+AUqITQEmiE0BHIhggIhUwFqY3IRSAQABLgDAAEZZYAO+UQbAAK6ogduI34jkip0AAMAAaxkAAAABA4juip0AAAABAQGI/AAAALlGYAPAAEXnAABgA8AA+tEBPgVOiT+JRwAAwABQR2ADvlEBFolVgIlJwFqZNbnpwABGJ06JeImAAACpYmADvlEBHImCLsAAQW8BAAGAiY7AWpk1AMAArqdAIRyJr4KJp8BamW5IAQABKwDAAP3xiaeJtgA9F4phgIpVwFqZNbnpgopzwFqZbsAARidKioABIRyKj4GKh8BamU5IAQABgoqSwFqZbgDAAP3xBsAArqmB24qiirOLBgAAuWkBaoqjYAPAAP3kAgAAAQOKvYsGAAAAAQEBisUAAACkYWADwABFAgAAXAE+Aj0citIuuTwBAAGAiuXAWpoOAMAARO09HIrxLsAAaxoAAAAAwACuqwbAAK6qgduLC4sXjwUAALk+AWqLDGADwAD95AIAAAEDiyaPBQAAAAEBAYszAAAAmjJgA8AARbAAAFsBPgNJi0Aci0qAi0TAWppyuWEAAAAAwABFyT4BPRyLaICLYsBamnK5sQEAATSLcwOLc42CAAAAAQEBi3kAAAC5nmADwABI8wAAYAPAAP2hAT4CPReNLoGNKsBamry56RaNThyNShaNRIGNQMBamryCVcAARe1LAQABkwDAAP1KuenAAEYnwABGJz0cjWcuwABrGwEAAYGNdcBamrwAwACurADAAEXfPgE9HI2egI2YwFqacrmxAQABNI2pA42pjhkAAAABAQGNrwAAALmeYAPAAEjzAABgA8AA/aEBPgFJjb4cjcIuwABrGQEAAYGNzcBam0gAwACuqD4BPRyN3y7AAGscAQABgY4CwFqbSADAAK7CPwDAAEXfTo40jkAAALlGYAPAAEXnARaOSICOQsBamnKDHsAARaJDjlMhHI5mgY5awFqbm0gBAAErAMAA/fE+AkmOdxyOey7AAGsZAQABgY6GwFqbmwDAAK6oPgE9HI6eLsAAaxwBAAGBjsHAWpubAMAArsI/PYmO3cBam5sWjveBjuvA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ROTAWrX4HMAARQMWwABE/YDAAETxwFq1+IJVwABF7UsBAAGUAMAA/UoAwACuwz8/Pz0cwABFURbAAEU8LsAAaxjAAK6dmUoCAAKAwABFXcBatfg0wABFagPAAEVqwABFewAAAAAAAABhAwBcAUrAAEVwAYHAAEVwwFq2MADAAP2IP07AAEWWwABFnwAAhY9gA8AARecBHMAARa2AwABFocBatfi59gEAARbAAEW9LqUiwACuoADAAEbzTsAARd3AAEXqAACFkmADvlEBFsAARfWBwABF7MBauLu56cAARic9HMAARhaAwABGCsBatfi6UgIAAhbAAEYpLrEqwACupYLAAEY+wFq48wDAAEbxTsAARs3AAEbWAAClNGADwABLzwEWwABG5IDAAEbYwFq1+KU0wABG50nAAEbyIiEWwABHAIPAAEb3wFq5R7dLwABL4gAhHMAARxuDwABHEsBauUe7pwAAAADAAEvtPgJOwABHRMAAR0kAAIO1YAPAAEXnARbAAEdXgMAAR0vAWrX4g7XAAEXxScAAR2MiJcAAR2yEwABHZ8BauaZgA8AASjwAHMAAR48WwABHghTAAEd9wFq5pgQBYAPAAEo8uanAAEaaSAEAAYHAAEeSwFq4uwDAAP3xPgJOwABJFMAASRwAAKliYAO+UQEcwABJMhbAAEkeLrEqwACupbW5AQABgsAAST7AWrjzAL6AScAASVUhHMAASW4WwABJXhTAAElZwFq5pgQBYAPAAEo8uenAAEYnSAEAAYXAAElxwFq6HgDAAP3xPgI9F8AASYsUwABJhsBauaYEAWADwABKPLssF8AASZwUwABJl8BauaYEAWADwABKPLnphcAASa7AWroewABGJ8AASj49HMAAScEuwABrHAEAARTAAEnkwFq5pgQBYAPAAEo8AMAArsI/ScAASgIWwABKLxzAAEoaFsAASgYusSrAAK6lqEIBAAGCwABKIcBauPMAvoqzGr5APgJOwABKWsAASl8AAK76YAPAAEZ2AR7AAEp7wABGfQMAAoHAAEp+wFq4u4DAAEqIwFq1+AG6ISlJwABKthbAAEq/hcAASrrAWrsmg7fAAEaEPgVOwABLesAAS4IAAKliYAO+UQEcwABLmBbAAEuELrEqwACupbW5AQABgsAAS6TAWrjzAL6ATsAAS8jAAEvSAACXhGADwABKPAEfwABL5sAASlIDAAOGwABL+8Bau3eBwABMBMBauLuAwABMDsBatfgAPRzAAEw4FsAATDKAwABMJsBatfiaMsAARe+5oQIAAhbAAExOgMAATELAWrX4g7XAAEXxh8AATFTAWrurAMAARdU9HMAATG+FwABMasBauyaEXQEAAYfAAEx7wFq7qwDAAEZ+PRzAAEyRLsAAaxwBAAGHwABMtMBau6sAwACuwj8/P0rAAEzdARzAAE0FFsAATPCAwABM5MBatfi6TsAARubAAFqEAwADgMAATR/AWrX4FsAATSwutzTAAK6eFsAATTUupSLAAK6gAMAAhk4GwACuxYHbwABNSsAATWTAAFCkAAC5NAFqwABNS2ADwAD95AIAAAEDwABNcMAAUKQAAAABAQHAAE16AAAAuUZgA8AAS2IAAGADvlEBPgdOwABNmsAATaAAAIF7YAPAAEXnARbAAE2ugMAATaLAWrzquanAAEtpTsAATc7AAE3YAAC7FmADvlEBFsAATeCBwABN2sBavQO56cAARidOwABOA8AATg8AAK5LYAO+UQEWwABOKRbAAE4dgMAAThHAWrzqrkvAAEtktZ2+Vk7AAE5KwABOVQAAwABrH2ADvlEBHMAATnMWwABOXy6xKsAArqWXLwIAAoPAAE6AwFq9UYLAAE6NwFq9KwC+qD2MwABOncBavYAcwABOqi7AAGsgwACumAMAA4TAAE64wFq9gILAAE7EwFq9K4PAAE7PwFq9UQDAAK66ScAATuEhHMAATu+CwABO5cBavStIAQABhMAATvLAWr2AAMAA/fE+AUnAAE/3ISIlwABQA4HAAE/9wFq9A2ADwABI4AAcwABQHxTAAFAZwFq9AwEBYAPAAEjgus0AAAAAwABI4j4BPRzAAFBCgcAAUDzAWr0DugYCAAIWwABQaYDAAFBdwFq86oO1wABF8YDAAFBvwFq86gDAAEZgPz9KwABQjwGEwABQlsBavYAAAFqYQgBamH0AWpi6AFqZEwBameQAWppIAFqcIQBanVIAWp4UAFqfUABaoEgAWqCjAFqg/gBaoVIAWqGmAFqh+gBaorcAWqMUAFqjjABapM0AWqZaAFqnxgBaqlsAWqttAFqtVABarfEAWrF8AFqzVwBas/MAWrTcAFq1wgBavLQAWr6mAAAAIAAAAYHbAFq/MQBaln4AWr8v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r46xKsAATaUAwABGQrStvj8AFsAAa84cwABro4LAAGudwFsg8rXNAQABFsAAa7kWwABrrS6lIsAAr46xKsAATaUAwABGQrStvj8+AUnAAGvqFsAAa/aDwABr7sBbISnAAEZWwACvhD4BSsAAbA4BHMAAbBoWwABsFS6BVMAAr4/AAGsxAgACFsAAbEEWwABsPC6BVMAAr4/AAGsowACuyxzAAGxYFsAAbFKDwABsSsBbISmGlcAAr3KBjQEAARbAAGxfFsAAbFougVTAAK+PwABrKcAArswAwACu3gDAAK7VScAAbHcWwABsg4PAAGx7wFshKaq/wACvgz4BSsAAbJsBHMAAbKcWwABsoi6BVMAAr4/AAGsxAgACFsAAbM4WwABsyS6BVMAAr4/AAGsowACuyxzAAGz6HMAAbNwWwABs1y6BVMAAr4/AAGsvAQABFsAAbPODwABs68BbISmGlMAAr3EAwACu04GNAQABFsAAbQEWwABs/C6BVMAAr4/AAGspwACuzADAAK7eAMAArtU/ScAAbSEiFsAAbXIcwABtOYHAAG0lwFsgu7XTAQABFsAAbU4WwABtQi6lIsAAr46xKsAATaUAwABGSLStvj8AFsAAbcAcwABtloLAAG2QwFsg8rXTAQABFsAAbasWwABtny6lIsAAr46xKsAATaUAwABGSLStvj8+AUnAAG3cFsAAbeiDwABt4MBbISnAAEZWwACvhD4BSsAAbgABHMAAbgwWwABuBy6BVMAAr4/AAGsxAgACFsAAbiQWwABuHy6BVMAAr4/AAGsowACuyxbAAG41g8AAbi3AWyEphpXAAK9yAMAArtVJwABuTBbAAG5Yg8AAblDAWyEpqr/AAK+DPgFKwABucAEcwABufBbAAG53LoFUwACvj8AAazECAAIWwABuoxbAAG6eLoFUwACvj8AAayjAAK7LHMAAbrEWwABurC6BVMAAr4/AAGsvAQABFsAAbsiDwABuwMBbISmGlMAAr3EAwACu0wDAAK7VPz8/SsAAbu0BHMAAbvkWwABu9C6BVMAAr4/AAGswAAAAAMAArtQGwACvoYHcwABvE8AAbyXAAHQtAAC5IQFqwABvFGADwAD95AIAAAEDwABvM8AAdC0AAAABAQHAAG8/AAAAuUZgA8AASAgAAGADwACvbwE+BU7AAG9fwABvZAAAhcVg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Ak6HkIeWAAGAll8DAQABHIeYLsAAa8DAALDZAQABFIegwFvNygABXwMAAADAALDsSoeqASIlh7eBh7HAW832XwMBAAAch8YWh78uwABrwcAAsNnAALDtwABEKQEAARSH0cBbzfYBAV8DAQAAwACw6D9Kh+MBKgAAW8ydAFvNOABbzagAW85qAAAAAwLAALD0geaJm4mhimIDwABrwwABAACD0GADwAD95AFbAWABwAD95AABXQHAALDfAV8DAAAAAQXAALD6geaJz4nVieYBAAADieSJ5gAAAAAAAABdA8AAsPQBXwMAAAE/AQkBidXAAP36AAAAAAMGwACw9oHmieqJ74oXAACV0gAAAAEDifWKFwAAAAICAon9AAAgwABrvWADwAD95ACKCAAAIMAAa75gA8AA/eQAAGADwAD60QFKig8BHIoSgIoPwFvPDEgBAAGBihXAW88cAMAA/fEGwACw94HmihuKH4o7AACDzQAAAAEDiiOKOwAAAAEBAYorAAAgg1NgA8AA/eQAAGADwAD8lwFKijEBFoozgIoxwFvPcoPGwAD99wbAALD4geaKP4pEimAAAMAARCkAAAABA4pOimAAAAABAQGKVgAAAK7lYAPAAP3kAABgA8AA+tEBSopcASkAAFvO7ABbz1IAW8+cAFvP2QAAAAMCwACw+4Hmiq2Ks4t5A8AAa8QAAQAAg9BgA8AA/eQBWwFgAcAA/eQAAV0BwACw3wFfAwAAAAEFwACxAYHmiuKK6Ir6AQAAA4r4ivoAAAAAAAAAXQPAALD7AV8DAAABPwEJAYrowAD9+gAAAAADBsAAsP2B5or+iwOLKgAAldIAAAABA4sJiyoAAAACAgKLDAAAIMAAa71fAwAAAIsSAAAgwABrvl8DAAAAAGADwAD60QFKixkBHosZwAD2eAIAAoCLI8Bb0HuBiyfAW9CJAAbAALD+geaLLosyi1IAAIPNAAAAAQOLNotSAAAAAQEBizkAACCDU18DAAAAAGADwAD8lwFKiz8BHos/wAD2eQEAAYCLUMBb0NwABsAAsP+B5otWi1uLdwAAwABEKQAAAAEDi2WLdwAAAAEBAYttAAAAruVgA8AA/eQAAGADwAD60QFKi3MBKQAAW9BbAFvQvABb0QYAW9FDAAAAAwLAALECgeaMjoyUkWkDwABrxQABAACD0GADwAD95AFb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AQEBobUAAACu5WADwAD95AAAYAPAAPrRAUqhuwElob2AobvAW+MPXQPAAP4vAV8DAAAAAFvi7QBb4z4AAAABAsAAsSmB5qJzonmkLQPAAGvRAAABYAHAAP3kAAADBMAAsSuB5qKZoqEJwABr0gBdA8AAsTQCW1sABMAAsSyB5qKroq4Jg9YAWwAEwACxLYHmoriivQmAlgBbAAEFwACxM4HmosGiwaLvAAAAA6LKou8AAAADAwOi0AAABMAAa9JdA8AAsTQCW1sAot8AAASD1lsAoukAAASAllsAAGADwACxKQE/BAgBwACxK4AAwFvjwggBwACxLIEAwFvj1QgBwACxLYIAwFvj3gkBosHAAP36AAAAAAIGwACxL4HmovSi/KN6AQCDxgAAAAEDowWjegAAAAAAAABgA8AA/JcBSqMOARyjaByjMxyjEZaDjQEAARyjKRajHBajEy7AAGvSwACxK8AAa9PAALDZwACxN4PNAQABFqMuLoPWwACxLADAALDnAMAA/b9kAQABHKNBNweDjQEAARyjWxajTBajQy7AAGvSwACxK8AAa9TAALDZwACxOIPNAQABFqNgLoCWwACxLQDAALDnAMAA/b8AwAD9vYN8AQABaqNwYAPAAPyXwAF1iADAAPyvBsAAsTGB5qN/o42kKwMASAAAAAEDo4+kKwAAAAEBAaOXAAAAg9tgA8AA/eQAAGADwAD60QFKo6cBIiIlo62Ao6fAW+UUYAPAALEpAByj2RajzBajwy7AAGvSwACxK8AAa9PAALDZwACxN5XSAgACFqPgLoPWwACxLBaj6xSj5cBb5RQAAWADwACxKYPWwACxLADAALDmABykERakAhaj+S7AAGvSwACxK8AAa9TAALDZwACxOJXSAgACFqQYLoCWwACxLRakJRSkH8Bb5RQAAWADwACxKYCWwACxLQDAALDmAABb5CIAW+T1AFvl1gAAAAICwACxNIHmpYClhquRA8AAa9UAAgAAhAhgA8AA/eQBWwAAhAlgA8AA/eQBWwFgAcAA/eQAAV0BwACw3wFdA8AA/W0CXwMAAF8DAQACBMAAsTeB5qXNpdkJwABr08AAsNkAXQPAALDfAV8DAAAABMAAsTiB5qXvpf0JwABr1MAAsNkAXQPAALDfAV8DAQAAAQXAALE+geamAaYHprYBAAADphKmtgAAAAIA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R/LAXN/uAMAAs45OwABIA8AASAoAAIF2YAPAAPrRASo9HMAASCAWwABIFy7AAGxQwACyvcAAs42ZSgIAAoHAAEgswFzgBzTAAEgxA8AASDHAAEhkAAAAAAAAAF8DAQABPgI9isAASDzAXOA4KUrAAEhRAYDAAEhYwFzf7gDAAP2ISsAASGsBgsAASHLAXOA4BsAAs5qB8MAASIHAAEiGwABIuwAAgKUAAAABA8AASIzAAEi7AAAAAQEBwABImQAAIIhqXQPAAPz5AV8DAQAAAFwBSsAASKYBHMAASK+AwABIpsBc4OaD/QEAARbAAEi3LlbAALOZAMAA/QkGwACzm4HwwABIwMAASMXAAEjgAACCRgAAAAEDwABIysAASOAAAAAAAAAAXAFKwABI0AEcwABI2RbAAEjQLsAAbFDAALK9wACzjYJGAAAAAMAA/YsGwACznIHwwABI5cAASOrAAEkmAACEBwAAAAEDwABI9cAASSYAAAABAQHAAEkHAAAAg9tdA8AA/PkBYAPAAP3kAABgA8AA+tEBSsAASREBHMAASReAwABJEcBc4aWWYgEAARbAAEkdLoMcwACzlwDAAP0MBsAAs52B8MAASqbAAEqtwABLCAAAlzAAAAABA8AASrfAAEsIAAAAAQEBwABKxAAAAIPbXQPAAP4vAWADwAD95AAAXQPAAP4vAV8DAQABSsAAStQBHMAASwEcwABK1C6BpQEAATTAAEraA8AAStrAAEr/AAAAAQEBwABK2wAAAJZSXwMBAAAAYAPAAPrRAUrAAErnASEcwABK7oDAAErowFziGIMcAQABgcAASvfAXOJmAMAA/jsAwACy4pVJAAAAAMAA/RAGwACznoHwwABMhsAATI3AAEzNAACXLwAAAAEDwABMmcAATM0AAAABAQHAAEymAAAAg9tdA8AA/i8BYAPAAP3kAABdA8AA/i8BXwMBAAFKwABMsAEcwABMxhzAAEywLoGlAQABFsAATLyAwABMtsBc4t2DHMAA/jsAwACy4pVJAAAAAMAA/RAGwACzn4HwwABM0sAATNTAAE1rAACXKAAAAAEDwABM2sAATWsAAAABAQHAAEziAAAAllJgA8AA/eQAAF8DAQABPgNJwABM8SIhHMAATP2AwABM9cBc42RIAQABKwDAAP3xACElwABNEIDAAE0IwFzjZF8DAQBKwABNFwErP07AAE0swABNMAAAg9ZfAwAAARzAAE0yLsAAbFPAALK9AQABJsAATUcAgMAATT/AXONkXwMBAADAALOOSsAATVMBHMAATWIWwABNWi7AAGxQwACyvcAAs41LAQABgcAATWPAXOO4AMAA/YEGwACzoIHwwABNcMAATXXAAE5QAACEXgAAAAEDwABNe8AATlAAAAABAQHAAE2DAAAAllJgA8AA/eQAAGADwAD60QE+BUnAAE2SIiEcwABNnoDAAE2WwFzkS0gBAAErAMAA/fEAISXAAE2xgMAATanAXORLXwMBAErAAE24ASo/TsAATc7AAE3SAACD1l8DAAABHMAATdQuwABsU8AAsr0BAAEmwABN6QCAwABN4cBc5EtfAwEAAMAAs45JwABN9SEcwABOAxbAAE36LsAAbFDAALK9wACzjYdYAQABgcAATg/AXOShAMAA/YBKwABOFQEqPz0cwABOMBbAAE4nLsAAbFDAALK9wACzjYReAQABgcAATjfAXOShAMAA/YpKwABOQQEpBsAAs6GB8MAATlXAAE5awABOmgAAlykAAAABA8AATmPAAE6aAAAAAQEBwABOdQAAAIhqXQPAAPz5AWADwAD95AAAXAFKwABOggEcwABOi4DAAE6CwFzlb4P9AQABFsAATpMuhF7AALOgAMAA/QkGwACzooHwwABOn8AATqTAAE9eAACXKgAAAAEDwABOr8AAT14AAAABAQHAAE61AAAAlythAwFfAwEAYAPAAPrRAABcAT4DTsAATtDAAE7ZAADAAGxVXQPAAP07AVsBMcAATttbAD0cwABO7BbAAE7jLsAAbFDAALK9wACzjYP9AQABNMAATvQDwABO9MAATzIAAAACAgLAAE71AAAAg9ZfAwAAAMAATvoAAACAll8DAQAAAGADwAD9oQE+AUnAAE8JHMAATxGAwABPDcBc5d0gAQABg8AATxLAXOZXAAA9HMAATyOBwABPGsBc5fpWAQABgsAATyfAXOZJAMAA/Uw/AMAA/Yw9HMAAT0KBwABPOcBc5fqD/QEAARbAAE9TFsAAT0ouwABsUMAAsr3AALONhF7AAP2KAMAA/QkGwACzo4HwwABPY8AAT2jAAFFQAACXLAAAAAEDwABPccAAUVAAAAABAQHAAE+DAAAAiGpdA8AA/PkBYAPAAP3kAABcAT4F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wABG4SIcwABG9obAAEblwF31qEgBAAErAMAA/fEBHMAARx+GwABHD8Bd9aggAgACFMAARyDAXfrCIQAUwABHKsBd+D0eAAAAPgE9FcAAR0XAXff7HCk/PwDAAP2MScAAR4cUwABHi8Bd9/scAD4CPRXAAEekwF33DxYpScAAR70hHMAAR8UUwABHwcBd994bAEgBAAErAMAA/yY+AT0cwABH5BTAAEfYwF33IhcAVgEAARTAAEfowF333hsAAMAA/jw/Pz0cwABIExbAAEgIFMAASAPAXfbXFQDAAG1vwAC1n4P9AQABNMAASBsDwABIG8AASIgAAAACAgLAAEggAAAAgKxgA8AA/v8AwABIPAAAAMAAbXFdA8AA/W0CYAPAALXjXQPAALY9AV8DAAAAAGADwAD9oQE+AT0cwABIWxTAAEhNwF33ThgAIAMAAxTAAEhcwF39+xoAHMAASHgWwABIbBTAAEhnwF321xUAwABtbcAAtZlLAQABFMAASHnAXf3rGQAAwAC1bhTAAEh/wF396xkAAAAAwAC1bT0cwABImxTAAEiNwF33ThgAIAIAAhbAAEisFsAASKEUwABInMBd9tcVAMAAbW/AALWfwABtZcAAtWoWwABIyhbAAEi9FMAASLjAXfbXFQDAAG1twAC1mcAAbWXAALVqAABOwABI4sAASO0AAMAAbcJdA8AA/i8BYAPAALXjAR7AAEjzwADBpgABYAPAALXjAABPwABJAMAASQUAAAHAAG3DXgMAAgMDXQPAAP1tAmADwAC142ADwAC16l0DwAD9bQJgA8AAteNdA8AAtj0BXwMAAGADwAD+/wAAXAADwABJEcAAS6QAAAADAgPAAEkqAAAAwABtsl0DwAD9bQJgA8AAteNgA8AAteoAwABJTgAAAMAAbXFdA8AA/W0CYAPAALXjXQPAALY9AV8DAAAAwABJZAAAAICsYAPAAP7/AWoAYAPAAP2heQBcAT4CPRzAAEl8FMAASXDAXf93GwCD/QEAATTAAEmEA8AASYTAAEtNAAAAAgICwABJiAAAALQSYAPAALXjAMAASZQAAACc+mADwAC16gAAYAPAAP2hAT4BScAASaYhHMAASbUUwABJq8Bd/5YcAIdYAQABFMAAScHAXgACHgAAwAD9gD4DPRzAAEnbFMAASdDAXf7uGQBWAQABFMAASd/AXgACHgAAwAD+PE7AAEnzwABJ+wAAImADwAD+fgEkAAcnwABtxIDAAEoHwF31KyfAAG23FsAASh4UwABKG8BeAAIeAJoVwAC15yeDWyeU+x7AAEpFwAC1XQEAASTAAEphARTAAEpYwF4AEh8AAEnAAEpuIRzAAEp2FMAASnLAXf+6HQBIAQABKwDAAP8mPgE9HMAASpiEwABKi8Bd9X2llAQAAxTAAEqzwF3/uh0AHMAASsWEwABKuMBd9X3AAG12AgACFMAAStXAXgACHgAUwABK2cBd/7odAADAALWEFMAASt/AXgB/IAABwABtXxTAAEsAwF317wgAwAC1hT4BPR7AAEsmwAD2egEAARTAAEsswF4AfyAAAD8AwAD9jEnAAEtUIhbAAEtjFMAAS1jAXf7uGQCDt8AA/R4AIRzAAEt1FMAAS3HAXf+6HQBIAQABKwDAAP8mPgE9HMAAS5IUwABLhsBd9yIXAFYBAAEUwABLlsBd/7odAADAAP48Pz0cwABLuxbAAEuuFMAAS6nAXfbXFQDAAG1twAC1mYP9AQABNMAAS8MDwABLw8AATCoAAAACAgLAAEvIAAAAgKxgA8AA/v8AwABL3gAAAMAAbbJdA8AA/W0CYAPAALXjYAPAALXqAABgA8AA/aEBPgE9HMAAS/0UwABL8cBd/yIaACADAAMUwABL/sBeAjkcABzAAEwaFsAATBAUwABMC8Bd9tcVAMAAbW/AALWfSwEAARTAAEwbwF4CKRsAAMAAtW4UwABMIcBeAikbAAAAAMAAtW09HMAATDsUwABML8Bd/yIaACACAAIWwABMThbAAExBFMAATDzAXfbXFQDAAG1twAC1mcAAbWXAALVqFsAATGoWwABMXxTAAExawF321xUAwABtb8AAtZ/AAG1lwAC1agAAScAATHkhFMAATH7AXfXvCAA+AUbAAEyOwABMq8AATJcAAACArGADwAD+/wAUwABMnsBd9yIXAD4DPR7AAEyzwAD2egEAASTAAEz1AyfAAG3FFsAATOEWwABM1BTAAEzQwF4DQhsAgx3AAP8NgerAAP0gJ8AAbcYAPR7AAEz+wAD2egEAARzAAE0JFMAATQTAXfbXFQDAAG19AgACFMAATRLAXgNCGwCFwABNF8Bd9ZIAwAC1ogA9HsAATS7AAPZ6AQABJ8AAbccAP0nAAE1/FsAATY4UwABNg8Bd/u4ZAIO3wAD9Hj4CPR7AAE2gwAD2egEAASTAAE3DAyfAAG3IFMAATbbAXf7uGQAngWoAPRXAAE3KwF33DxYpP0nAAE3jIhTAAE3nwF33DxYAAIfAAE31wF311T4BPRzAAE4RFMAATgjAXfYJCQAgAQABJ8AAbckAAD89FcAATirAXfZbCxTAAE4xwF33DxYAQgAAPR4AwAC4gQIAAhQAwF32NQoAFADAXfZbCwAASsAATj0AAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAFADAXfY1CgCB3QIAAhQAwF4EuhUAFADAXgTDFgAAwAC5kT0VAMBd9nAMHgDAALiCAQABFADAXfagEQAAPRUAwF32eQ0eAMAAuHwBAAEUAMBd9qARAAA9FQDAXfaCDh4AwAC4fQEAARQAwF32oBEAAD0cvUkUAMBd9jUKAGoBAAEUAMBd9qARAAAASgABFgAUAMBd9jUKAIHewAC5jQbAALVlgf3AAE8AwABPB8AAVwMAAcAAbcoAAAABA8AATw/AAFcDAAIACQEBwABPGgAAAMAAbctgA8AA7roACMAATzUAAACB/V0DwAD9OwFgA8AA/n4BasAATztdA8AA/TsBYAPAAP5+gznAAE9VAAAAuNpgA8AA/JcBasAAT11gA8AA/JcVwABPaAAAAMAAbcxgA8AA/JcBasAAT3RgA8AA/JcJwABPgAAAAMAAbc1hAwFgA8AA/v9cAWoAYAPAAP2hecAAT6YAAADAAG2YXQPAAPz5AWADwAD+fgFqAGADwAD9oXnAAE/AAAAAwABtmWEDAWADwAD+fmADwAD+/wFqAGADwAD9oXnAAE/wAAAAgXRhAwFgA8AA/n5cAWoAYAPAAP2hecAAUB8AAADAAG3OXgMAAQUBYAPAALVyBMAAbV5gA8AA+tEAwABtX2ADwAD60QDAAG1gYAPAAPrRAICBYAPAAPrRAAFXA8AAtVEAXQPAALloAWADwAD60QFqAGADwAD9oXldA8AAuWgBWwE+Dk4AAAABgcpdA8AAuK4BWwEfwABQL8AAuLsAAVsAAE4AAAAAgctdA8AAuWQBWwBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsAT8AATwcAAAAAgdJbAAPAAE8PwABXAwQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+ED2JwABQfsBeBawcwABQioHAAFCFwF4FrICtAAAAAMAA/Q9OwABQm8AAUKMAAICBYAPAAPrRARzAAFCqgcAAUKXAXgWshF4BAAEnwABtzwDAAP1YTsAAUL/AAFDIAADAAG1fYAPAAPrRARzAAFDPgcAAUMrAXgWshF4BAAEnwABt0ADAAP1YTsAAUOTAAFDzAADAAG3RYAPAAPrRARzAAFD6gcAAUPXAXgWshF4BAAEnnNEAwAD9WE7AAFEPwABRIQAAwABtYGADwAD60QEcwABRKIHAAFEjwF4FrIReAQABJ8AAbdIAwAD9WE7AAFE9wABRRwAAwABtXmADwAD60QEcwABRToHAAFFJwF4FrIReAQABJ8AAbdMAwAD9WE7AAFFjwABRbQAAwABt1GADwAD60QEqTsAAUX3AAFGJAADAAG3VYAPAAPrRASpOwABRnMAAUagAAMAAbdZgA8AA/n4BHMAAUbsWwABRthbAAFGygMAAUarAXgWZgKzAAO6+TsAA/wqC6AIAAhbAAFHPGsAAUcrAAP8ETsAA/wonAADAAP6ePR7AAFHcwAD2egEAASTAAFH8AifAAG3XFMAAUe/AXgjtHAAATsAAUhjAAFIhAAC1Cl0DwAD9OwFgA8AA8IMBHMAAUiuAwABSI8BeBZnAAG2eAAAAAMAA7tFJwABSORzAAFJEgsAAUj3AXgXXgJcBAAGUAMAA/cc+A07AAFJTwABSWQAAamADwAD8lwEcwABSeBzAAFJrFsAAUmQUwABSW8BeCWkdAGHAAP1rg40BAAGDwABSbcBeBfMAwAD9v4aXAQABgsAAUnvAXgXXAMAA/cJOwABSi8AAUo8AAIKQYAPAAPyXARzAAFK0HMAAUqEWwABSmhTAAFKRwF4JaR0AYcAA/WuDjQEAARzAAFKvg8AAUqTAXgXzZAEAAZQAwAD9vQDAAP2/hpcBAAGCwABSt8BeBdcAwAD9wj0VwABSw8BeCWkdHMAAUtcUwABSzsBeCWkdAIFYAgACFMAAUt/AXgm+HgAUwABS5sBeChYfAADAAP1eP07AAFL2wABTAAAAwABt2GADwAD8lwGTRsAAUwcAwABTHQAAAKRnYAPAAPCDABTAAFMnwF4JaR0AQT4LTsAAUz7AAFNDAACAvWADwAD+fgEWwABTXRbAAFNQFsAAU0wUwABTRcBeCtYfAICswADwjIMdwAD/DYHqwAD9IEnAAFNnJcAAU3IUwABTa8BeCtYfAGADwADuuj4BPRXAAFOIwF4K9SAcwABTphbAAFOaFsAAU5YUwABTj8BeCtYfAWADwADuuoCswADuvoMdwAD/DUsBAAEcwABTxhbAAFO/FsAAU7IWwABTrhTAAFOnwF4K1h8BYAPAAO66gKzAAO6+gx3AAP8NYcAA/WuBjQEAAZUAwAD9vgDAAP1KP0nAAFPWIiIWwABT34HAAFPawF4FrIO3wAD9HgAhHMAAU/OBwABT7sBeBayDHAEAARTAAFP8wF4K9SAAAMAA/QgAIRTAAFQGwF4IvxoAQsAAVBEBP0nAAFQfFMAAVCPAXggoFwA9FcAAVDPAXgi/Gik/PRXAAFRJwF4Kuh4cwABUUhTAAFRJwF4Kuh4AZAEAAZQAwAD9vUnAAFRbIRzAAFRmhMAAVF/AXgYRSAEAASsAwAD98T4BPRzAAFR9hMAAVHfAXgYRIAEAARbAAFSFFMAAVH7AXgrWHwCArMAA8IwAAD89HsAAVJXAAPZ6AQABJ8AAbdkATsAAVO7AAFT3AADAAG1hYAPAALVyAR7AAFT5wAC1YgQAARTAAFUJwF4K1h8AA8AAbZiFwABVK8BeBjDAAG2ZhsAAVVvAXgZSgXSHwABVhMBeBnY9HsAAVZTAAPZ6AQABJMAAVbkCJ8AAbdoWwABVrBTAAFWjwF4MySEAwABta8AAtXUATcAAVcUCNQAAAAAAWwEewABVxcAAuH4EAAQcwABV0hTAAFXLwF4GkwgAIAUAARTAAFXTwF4MySEABMAAbWAUwABV+MBeCFkYAICBFMAAVhzAXgfEFQDAAG1fFMAAVjfAXgf1FgDAAG1eFMAAVlTAXgiMGQAAFADAXgc3DAAUAMBeB0ANABQAwF4HaREAACtJwABVwRQAwF4HgBIAPgE9FcAAVmjAXgjWGyk/ScAAVogUwABWjMBeCNYbAD4BPRzAAFaoh8AAVp/AXgZ2IAEAASfAAG3JAAA/ScAAVsEcwABWzxTAAFbFwF4Kuh4ASAEAAZMAwAD9uz4BPRzAAFbkh8AAVtvAXgZ2IAEAASfAAG3bAAA/PR4AwAC4gQIAAhQAwF4HAAkAFADAXgceCgAASsAAVwMAAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAFADAXgcACQCB3QIAAhQAwF4OhhUAFADAXg6PFgAAwAC5kT0VAMBeBy4LHgDAALiCAQABFADAXgdpEQAAPRUAwF4HNwweAMAAuHwBAAEUAMBeB2kRAAA9FQDAXgdADR4AwAC4fQEAARQAwF4HaREAAD0cwABPDxQAwF4HAAkAagEAARQAwF4HaREAAABKAAEWABQAwF4HAAkAgd7AALmNAYH9AF4POwBdxP8AXcosAF3MDgBd1JAAXdW0AF3XuwBd4k8AAAAGAF3jGwBd45cAXeQTAF3kjwBd5QsAXeWHAF3mAwBd5pYAXeceAF3riwBd8n4AXfT5AF4FbQBeDzsAAAANAAIEwAC1pgCB/gAABoDaAQDAALZVAACA9AEAwAC2YAAAgQwBAMAAtmkAAIEkAQDAALaBAACBOwEAwAC2lgAAgVMBAMAAtqoAAAnAALZWwAC2YcAAtmrAALaDwAC2h8AAtpjAALaZwAC2rMAAtq8AAAAAAAGB/gBeEBEAXhAPAAAAAABeEBEAAAAAAAIEwAC1pwCB/wAAAAAAAAICwAC1soH/ga2Bs4OKA8AAbdwAAAFgAcAA/eQAAAQEwAC1tIH/gfmB/wnAAEOBAGADwAD8lwAEwAC1tYH/gj2CRQnAAEOCAGADwAD8lwAEwAC1toH/gp6CpAmDYgBgA8AA/JcABMAAtbeB/4LYgtwJgbIAYAPAAP5+AAEFwAC1u4H/guGC4YMfAAAAA4Lrgx8AAAAEBASC8QAABMAAQ4FgA8AA/JcAgv4AAATAAEOCYAPAAPyXAIMNAAAEg2JgA8AA/JcAgxoAAASBsmADwAD+fgAAYAPAALWyAT8FCAHAALW0gADAXhDPCAHAALW1gQDAXhDfCAHAALW2ggDAXhDvCAHAALW3gwDAXhD9CQGC4cAA/foAAAAAAQbAALW5gf+DJIMrg4gAACMAAAABA4Mzg4gAAAAAAAAAYAPAAP5+AUqDPwEkg4gJJ8AAbd0Wg1MuwABDgcAAtbQnwABt3haDZC7AAEOCwAC1tSfAAG3fFoN1LoNiwAC1tifAAG3gFoOCLoGywAC1tyeDJgAAXhFSAF4RxAAAAAECwAC1vIH/hbuFwZSDA8AAbeEAAAFgAcAA/eQAAAMEwAC1voH/hguGFQmY4gBgA8AA/n4ABMAAtb+B/4ZchmcJhGgAXQPAAP07AWADwAC1sgAEwAC1wYH/hnaGgRjAAG3iwAC1pwBdA8AA/TsBYAPAAPyXAAIFwAC1yoH/hoaGhoa2AAAAA4aThrYAAAACAgKGmQAABJjiYAPAAP5+AIaqAAAEhGhdA8AA/TsBYAPAALWyAABgA8AAtbwBPwQIAcAAtcErCAHAALW+gADAXhJhCAHAALW/gQDAXhJvCQGGhsAA/foAAAAABcAAtcuB/4a7hruHBgCVfwADhtGHBgAAAAMDA4bXAAAEmOJgA8AA/n4AhugAAASEaF0DwAD9OwFgA8AAtbIAhvoAAATAAG3iXQPAAP07AWADwAD8lwAAYAPAALW8AT8ECAHAALW+gADAXhLVCAHAALW/gQDAXhLjCAHAALXBggDAXhL4CQGGu8AA/foAAAAABAbAALXDgf+H44frjvwEAcAAbMgAAAABA4gBjvwAAAADAQOICQAAAMAAbaBgA8AA/n4AiCcAAABqYAPAAP37AWqIL2ADwAD9+8ABd6aIRQAAAIKQYAPAAP37AWqIS2ADwAD9+8AAtHQAYAPAALW8AT4LTohpiHQAAMAAbeRgA8AA/sgBH4h6wAD+5wAAAABOiJ+IqwAAhGhdA8AA/TsBYAPAALWyATGIuWADwAC1sgBOiMWIywAAJ2ADwAD8lwGTTojYiN8AAINiYAPAAPyXAZNOiOyI8wAAwABDgWADwAD8lwGUTokAiQkAAMAAQ4JgA8AA/JcBlE6JHIknAACHHl0DwAD9OwFgA8AA/JcBMYkuYAPAAPyXAD0ciUEUiTbAXhRBCQBWAQABholFwF4UCgDAAP1MQ4lSHIlfhYlZwF4T+mMBAAEWiW+AiWHAXhNsYcAA/oIAwAD9xUE+BU6JhYmQAADAAG3lYAPAAP4BARyJmIGJksBeE3zAAG3mAgACgImmwF4TbIWJtcBeE/oAwAD9/kmJwyEcidIUicfAXhSnCgBIAQABKwDAAP3xPgNOiemJ9AAAwABDT2ADwAD8lwEWigEUifbAXhSnCgCCkMAA/gROih6KKQAAwABt510DwAD8+QFgA8AA/gEBHIo7goo3wF4TlsAAbegCAAKAikbAXhNsFopgFIpVwF4UpwoAgpDAAP4EAMAA/f1Jim4hFop+FIpzwF4VHQwAgVXAAP0dPgZOipmKogAAwABt6WADwAD+AQEWiq8UiqTAXhUdDACDHsAA/R89HIrOgIrAwF4TbIC7AgACgorWwF4TlhSK28BeFPkLAADAAP6RTor5iv4AAIGyYAPAAP5+ARyLDoCLAMBeE2yAvgIAAhaLIxSLGMBeFKcKAIKQwAD+BBaLMRSLKMBeFX0NAGrAAP4DAMAA/pQ9HItPhItDwF4T2VYBAAEfi1fAALW7BAAEh4tiwF4UGxSLasBeFC4IAIaLdMBeFAoUi3zAXhXGDgAAAMAA/Uw9jYuOwF4T+haLnxSLlsBeFX0NAIKQwAD+BEKLrgA/P06L1YveAADAAGHuYAPAAPyXARyL7oCL4MBeE2yEEAEAAYWL+cBeE/oAwAD+jEFHjAcUjA/AXhZsCwADAYwoaowoYAPAAPyXhBQAPgY9HIxCg4w3wF4TvIKOAQABJ4CvAMAA/tw9joxZwF4UChyMX4aMWcBeFApkAQABlADAAP29PRyMeBSMbcBeFEEJAFYBAAGGjHzAXhQKAMAA/Uw9j4yPwF4UGxyMlYeMj8BeFBtkAQABlADAAP29PRWMo8BeFC4IlEKMuwEBjM9qjM9gA8AA/JeEFwA+B0mM3iIcjOwcjOiFjOLAXhP6ZAEAAZQAwAD9vWMBAAEWjPyAjO7AXhNsYcAA/oIAwAD9xQAcjTgcjSKAjRTAXhNshBABAAEcjTOFjS3AXhP6ZAEAAZQAwAD9vQDAAP6MSAEAAWqNO2ADwAD8l4QUAMAA/bs+AT2NjU7AXhP6HI1ThY1OwF4T+mQBAAGUAMAA/b0/PRyNeIONbcBeE7yCjgEAASeArwDAAP7cPY6Nj8BeFAocjZWGjY/AXhQKZAEAAZQAwAD9vT0cja4UjaPAXhRBCQBWAQABho2ywF4UCgDAAP1MPY+NxcBeFBscjcuHjcXAXhQbZAEAAZQAwAD9vT0VjdnAXhQuCJRCjfEBAAE+Az0cjh6DjhPAXhO8hBYBAAEUjizAXhZsCwAAwAD+3T2OjkHAXhQKHI5Hho5BwF4UCmQBAAGUAMAA/b09FY5VwF4ULggcjl0UjlXAXhQuCABkAQABlADAAP29PY2Ob8BeE/ocjnSFjm/AXhP6ZAEAAZQAwAD9vT0cjo0UjoLAXhRBCQBWAQABho6RwF4UCgDAAP1MSo6eAR+OqcAAtcsDAAMcjtSDjsnAXhO8IwAAAADAAP7hhI7gwF4T2RSO7cBeFEEJAAAGwAC1xoH/jwGPBpHlAADAAG3qwAC1pwAAAAEDjxeR5QAAAAAAAABcAT4BSY8gHI8wFo8kLsAAbeLAALWnwAC1wUgBAAErAMAA/WU+Bk6PRY9LAAAnYAPAAPyXAZNOj1qPYQAAg2JgA8AA/JcBkz0Xj2wuwABt4sAAtacxj39gA8AA/JcAwAC1wT0cj5UWj4kuwABt4sAAtafAALXBVgEAAYGPmcBeGXYAwAD9TEOPqByPtYCPr8BeGWZjAQABFo/CFo+3LpjiwAC1vmHAAP6CAMAA/cU+A06P2I/hAADAAGHuYAPAAPyXARyP7haP4y6Y4sAAtb6EEAEAAYCP+cBeGWYAwAD+jEFHkAmCkBHAXhnwAwGQLGqQLGADwAD8l4QUAD4DPYmQPcBeGXYckEOBkD3AXhl2ZAEAAZQAwAD9vT0ckF8WkFMuwABt4sAAtafAALXBVgEAAYGQY8BeGXYAwAD9TEKQeAABkI5qkI5gA8AA/JeEFwA+BEmQnyIckK0ckKmAkKPAXhlmZAEAAZQAwAD9vWMBAAEWkLoWkK8umOLAALW+YcAA/oIAwAD9xQAckPUckN8WkNQumOLAALW+hBABAAEckPCAkOrAXhlmZAEAAZQAwAD9vQDAAP6MSAEAAWqQ+GADwAD8l4QUAMAA/bs+AT2IkQ3AXhlmHJESgJENwF4ZZmQBAAGUAMAA/b0/PYmRMMBeGXYckTaBkTDAXhl2ZAEAAZQAwAD9vT0ckVIWkUYuwABt4sAAtafAALXBVgEAAYGRVsBeGXYAwAD9TEKRawAAAT4BPYmRkcBeGXYckZeBkZHAXhl2ZAEAAZQAwAD9vT2Ika3AXhlmHJGygJGtwF4ZZmQBAAGUAMAA/b09HJHQFpHELsAAbeLAALWnwAC1wVYBAAGBkdTAXhl2AMAA/Uw/BsAAtceB/5Hqke+SwQAAhGkAAAABA5H8ksEAAAADAwOSAQAAAMAAQ4FgA8AA/JcAkg0AAADAAEOCYAPAAPyXAJIeAAAAgbJgA8AA/n4AAFwBPgM9HJIqLsAAberAALWnAAAAAMAAtcZOkkeSTgAAg2JgA8AA/JcBHJJoHJJbFpJQLsAAbeLAALWnwAC1wUsBAAEckmOAklzAXhvugY0BAAGUAMAA/b4AwAD9SmQBAAEcknSBkmvAXhv+gY0BAAGUAMAA/b4AwAD9vT0ckooWkn4uhGjAALW/VgEAAR+SksAAtbsEAASAkp3AXhvugZKlwF4b/oOSr8BeHDeCkrfAXhwOAADAAP1MBsAAtciB/5LGks2UgQAAwABt6wAAAAEDktOUgQAAAAAAAABgA8AA/n4BPgZOkumS7AAAg+lgA8AA/sgBH5LywAD+5wAAAABOkxeTHAAAg2FdA8AA/TsBYAPAALWyATWTKgAAAQBdA8AA/TsBYAPAALWyARyTKhaTHi6EaMAAtb+ArQAAAADAAP0PNQAAAAEAWwEckzuBkznAXh01gK4BAAE0k0ADk0CTZgAAAAICApNBAAAAgddgA8AAtbIAk0QAAACCTmADwAC1sgAAYAPAAPyXAUqTSgEck1MWk0yCk0rAXh2Fg2LAALW2gk8BAAEWk1+Dk13AXh2Tg2LAALW2AMAA/bwAwAD9ToEAwF4dNU6TcZN4AACDYmADwAD8lwGTRpOBk6WTkQAAAIS3YAPAALWyAIGTn8BeHR4+Az0ck7CAk63AXh0Dgo4BAAEck8EWk7YumOLAALW+gL4CAAKCk8vAXh3mFpPeg5PTwF4d+4NiwAC1tgDAAP6UAMAA/tw9HJPxgJPuwF4dA4KOAQABJJQOAyfAAG3jFpQHg5P8wF4d+4GywAC1tyeG1wDAAP7cPYqUF8BeHeYWlCuDlCDAXh37g2LAALW2PRyUQICUPcBeHQOCjgEAARyUURaURi6Y4sAAtb6AvgEAAYKUW8BeHeYAwAD+lADAAP7cSpRpARyUc4CUcMBeHQMjAAAAAMAA/uEAAF4TSgBeGRgAXhvOAF4c1gBeHugAAAAEBgTAALWqgf+A5IDuBsAAbezAALWnAGADwAD8lwFqgOpgA8AA/JeEFATAALWrgf+A+oEEBsAAbe3AALWnAGADwAD8lwFqgQBgA8AA/JeEFwTAALWsgf+BFYEoBsAAbe4AYAPAAP37AWqBJGADwAD+fsABd6YEwAC1rYH/gTiBRgbAAG3vAGADwAD9+wFqgUNgA8AA/n7AALR0BMAAta6B/4FXgXgFwABt8ABgA8AA/fsBHoFqwAD+JwEAASfAAG3xAATAALWvgf+BiIGqBcAAbfIAYAPAAP37AR6BmcAA/icBAAEnwABt8wABBsAAtbGB/5Yslkea5wABwABt9AAAAAEDllaa5wAAAAICApZqAAAAwABtoGADwAC1vACWigAAAJlkXQPAAPz5AWADwAD+fgAAXQPAAP1tAmADwAD+fmADwAC1vAE+B06WpJauAADAAG31XQPAAP4vAWADwAD+fgEclrmBlrDAXiAdlUkAAAAAwAD9EE6W4pbmAACAq10DwAD9bQJgA8AA/n5dA8AA/TsBYAPAALWyATKXAmADwAD+fl0DwAD9OwFgA8AAtbIARpcIlymXFAAAAIMpYAPAAP5+AIKXHsBeIEo+AT0clzKDly/AXiB3gL8CAAKElzPAXiC2MZdJYAPAALWyAADAAP2CRpdcAJdsAAAAhLdgA8AAtbIAFpeIgJd6wF4gDYRowAC1v0E+A06Xn5emAADAAG32YAPAAPyXARyXuBaXs4SXqMBeIPeBssAAtbeAuwEAASeBagDAAP6RSZfKIRyX1YWXzsBeIRlIAQABHJfYlIHGAAAAAMAA/LoAwAD9uz4ETpfrl/wAAMAAbfdgA8AA/n4BHJgOFpgJhJf+wF4g94GywAC1t4C+AgACk4WYG8BeIRkAwAD+lE6YMZhAAADAAG34YAPAAP5+ARyYUhaYTYSYQsBeIPeBssAAtbeAvgEAARyYY4WYXMBeIRlkAQABlADAAP29AMAA/pROmHyYhAAAvbFdA8AA/TsBYAPAAP5+ARyYohyYl4aYhsBeIXKApgEAASeBBgDAAP6hgK0AAAAAwAD9D0mYshyYwIKYtsBeIEqEBwEAARSYzMBeIewIAADAAP5EPgJGmOCY/ZjsAAAAmiVgA8AA/n4AFJj0wF4h7AgAPgE9HJkTHJkMg5kJwF4gd0sBAAEUmQ3AXiJNCQAAwAD9gVYBAAEfmRvAALW7BAAEFpkxhJkmwF4g98AAQ4HAALW0FplEhJk5wF4g98AAQ4LAALW1FplnhJlcwF4g94NiwAC1toeZb8BeIakAAMAA/UxCmZMAPz9GmbWZ1pnBAAAAgylgA8AA/n4AgpnLwF4gSj4BPRyZ6hyZ4YOZ3sBeIHdLAQABhpniwF4i4ADAAP2BVgEAAYSZ7sBeIPcAwAD9TE6aIpooAACApl0DwAD9bQJgA8AA/n5gA8AAtbwBMppBYAPAAP5+YAPAALW8AD0cmkuDmkfAXiB3g/0BAAE0mlMDmlOa1AAAAAICAppbAAAAgylgA8AA/n4AmnQAAACEaF0DwAD9OwFgA8AAtbIAAGADwAD9oQE+AT0cmoyEmofAXiMmgL8CAAKFmo3AXiNwH5qbwAC1ygIAAhaat4CaqcBeIA2Y4sAAtb6GmsPAXiN+AADAAP2CAMAA/YxKmtkBhJrgwF4jJgGB/wBeI+sAXhA5AF4R0QBeHwEAAAACAF4f6wBeI+sAAAABAAIEwAC1zACCAAAAAAAAAAkCwAC1zYIAgNqA34WlC8AAbfkAAAFgAcAA/eQAAA8EwAC1z4IAgN+A3wknAGADwAD8lwAEwAC10YIAgN+A3wkowAC1zABgA8AA/n4ABMAAtdKCAIDfgN8GKQBdA8AA/TsBYAPAALXNAWoAXQPAAP07AWADwAC1zcABeOEEwAC104IAgTSBNAaCagBgA8AAtc0BagBgA8AAtc3AAXewBMAAtdSCAIF1gXUGmfoAYAPAALXNAWoAYAPAALXNwAF3yQTAALXVggCBt4G3BoRIAGADwAC1zQFqAGADwAC1zcABd+IEwAC11oIAgl+CXwaD8wBgA8AAtc0BagBgA8AAtc3AAXf7BMAAtdeCAIK1grUGu+0AYAPAALXNAWoAYAPAALXNwAF4FATAALXYggCDDYMNBqyXAGADwAC1zQFqAGADwAC1zcABeC4EwAC12YIAg4GDgQZcAGADwAC1zQFqAGADwAC1zcABeEgEwAC12oIAhAeEBwZeAGADwAC1zQFqAGADwAC1zcABeGIEwAC124IAhI2EjQZdAGADwAC1zQFqAGADwAC1zcABeHwEwAC13IIAhOGE4QbAAG4GAGADwAC1zQFqAGADwAC1zcABeJYEwAC13YIAhT2FPQbAAG4HAGADwAC1zQFqAGADwAC1zcABeLAEwAC13oIAhZ6FngaBxwBgA8AAtc0BagBgA8AAtc3AAXjKAQXAALXiggCA34DfhaUBAAADgN+FpQAAAAICAoDfAAAEJ2ADwAD8lwCA3wAABChgA8AA/n4AAGADwAC1zQE/AwgAwAC1z4AAwF4mTwgAwAC10YEAwF4mXAkAAMAA/foAAAAAAQbAALXgggCA34DfhaUAACMAAAABA4DfhaUAAAAAAAAAYAPAAP5+AUoAAQ8ALsAAtdEAAF4mlwBeJsgAAAABAsAAteOCAIXMhduG+QfAAE1fAAABYAHAAP3kAAAAAQXAALXpAAAAAAQAAAMAAAAAAAAAAABgA8AAteMBPwEJAQDAAP36AAAAAAMGwAC15YIAheKF7YXxAQKCawAAAAEDhfGF8QAAAAAAAABgA8AAtc0ABsAAteaCAIashrWGvQECtToAAAABA4a9hr0AAAAAAAAAYAPAAPrRAAbAALXnggCG4obthvcBApoVAAAAAQOG94b3AAAAAAAAAGADwAD+fgAAAF4nHwBeJ0cAXidvAF4nlwAAAAMCwAC16oIAhvyHApkNA8AAbggAAAFgAcAA/eQAAA4EwAC17IIAhxeHGQm0EgBgA8AAteMABMAAte2CAIcqhy8JgJYAYAPAAP5+AATAALXuggCMmoyyBsAAbgkAYAPAAP5+AWqMqWADwAD+fsABeRkEwAC174IAjMqM4wbAAG4LAGADwAD+fgFqjNlgA8AA/n7AAXkeBMAAtfCCAIz7jRIGwABuDABgA8AA/n4Bao0JYAPAAP5+wAF5IQTAALXxggCNKo1FBsAASJwAYAPAAP5+AWqNOmADwAD+fsABeSYEwAC18oIAjV2NdgbAAG4PAGADwAD+fgFqjWxgA8AA/n7AAXkrBMAAtfOCAI2OjacGwABuEQBgA8AA/n4Bao2dYAPAAP5+wAF5MATAALX0ggCNv43cBsAAbhMAYAPAAP5+AWqN0GADwAD+fsABeTUEwAC19YIAjfSODwbAAG4VAGADwAD+fgFqjgRgA8AA/n7AAXk6BMAAtfaCAI4njkQGwABuFwBgA8AA/n4Bao44YAPAAP5+wAF5PwTAALX3ggCOXI51BsAAbhkAYAPAAP5+AWqOb2ADwAD+fsABeUQEwAC1+IIAjo2OogbAAG4bAGADwAD+fgFqjppgA8AA/n7AAXlJBMAAtfmCAI66jtEGwABuHQBgA8AA/n4Bao7IYAPAAP5+wAF5TgEFwAC2AoIAhzSHOodWAQAAA4dBh1YAAAACAgKHRwAABLQSYAPAALXjAIdQAAAEgJZgA8AA/n4AAGADwAC16gE/AwgBwAC17IAAwF4pzggBwAC17YEAwF4p3AkBhzrAAP36AAAAAAUGwAC1+4IAh1uHb4ehAQCDxgFqh1xgA8AA/eQCAAABA4d4h6EAAAAAAAAAYAPAAPyXAUqHewEch4wch4cWh34Wh3sutBLAALXsg8bAAP33g40BAAE3DQDAAP2/ZAEAARyHnRaHlBaHji6AlsAAte2DxsAA/oODjQEAATcRAMAA/b8AwAD9vQbAALX9ggCHpofAiFcDAEgBaoenYAPAAP3kAgAAAQOHwohXAAAAAQEBh8MAAACD21sAAGADwAD60QE+A0mH0B6H1MAA9ngCAAIugIfkwF4qyABKh+wBKT9Jh/0hJYgHgIgBwF4qyGADwAC16kqIFAEqP0qIJgEiHIgwFogtLrQSwAC17EgBAAEWiDmAiDPAXirItBIAAMAA/fEAHIhFFog/LoCWwAC17UgBAAEWiE6AiEjAXirIgJYAAMAA/o0GwAC1/oIAiFyIb4iSAAAjAWqIXWADwAD95AIAAAEDiHeIkgAAAAAAAABgA8AA/n4BSoh9AR6IfcAAtf8CAAIWiIgutBLAALXsFoiMLoCWwAC17QAGwAC1/4IAiJeIpYyBAAHAAG4fAAAAAQOIr4yBAAAAAgICiLMAAAC0EmADwAC14wCIvgAAAICWYAPAAP5+AABgA8AA/n4BPgJHiMsWiNaAiNPAXivTgmvAALXlDAGI8GqI8GADwAC1zcABd7AAPgJOiQmJEwAAwABuIGADwAC2AwEmiQkBgIkVwF4r02ADwAC2A0qJIQEkiU8EaokqYAPAAP5+wAF5HhaJQoKJOMBeLCGAvcAAtg0nguqBiUnAXivhAYljaoljYAPAALXNwAF3yQA+Ak6JeImAAADAAG4hYAPAALYUASaJeAGAiYLAXivTYAPAALYUSomOASSJuQRqiZdgA8AA/n7AAXkhFomsgomkwF4shoC9wAC2GyeC6oGJs8BeK+EBic1qic1gA8AAtc3AAXfiAD4BSoneASSJ+wJqiedgA8AA/n7AAXkmgYn1wF4r4QGKD2qKD2ADwAC1zcABd/sAPgFKih0BgYokwF4r4QGKPWqKPWADwAC1zcABeBQAPgFKik0BJIppAmqKVmADwAD+fsABeSuBimPAXivhAYp9aop9YAPAALXNwAF4LgA+AUqKjQEkiqkCaoqWYAPAAP5+wAF5MIGKo8BeK+EBir1qir1gA8AAtc3AAXhIAD4BSorPASSK7QJqithgA8AA/n7AAXk1gYrnwF4r4QGLAWqLAWADwAC1zcABeGIAPgFKixIBJIsvAmqLG2ADwAD+fsABeTqBiynAXivhAYtDaotDYAPAALXNwAF4fAA+AUqLVQEki3MCaoteYAPAAP5+wAF5P4GLbcBeK+EBi4dqi4dgA8AAtc3AAXiWAD4BSoubASSLuwJqi6RgA8AA/n7AAXlEgYu1wF4r4QGLz2qLz2ADwAC1zcABeLAAPgFKi90BJIv3AmqL5mADwAD+fsABeUmBi/HAXivhAYwLaowLYAPAALXNwAF4ygA+AUqMGgEkjDUCaowjYAPAAP5+wAF5ToGML8BeK+E9MIxBH4xLwAD8KQEAASSMfAInwABuIhaMdoCMc8BeK9OCa8AAteUABsAAtgCCAI7WjuWZCwABhyEAAAABA47rmQsAAAADAwOO8AAAALebYAPAAP7/AI7/AAAAg2JgA8AA/JcAjw4AAACBsmADwAD+fgAAYAPAALXqAT4FTo8dAAAAtBJgA8AAteMATo8sAAAAnPpgA8AA/n4ASY86HI9Dgo8+wF4vAIHYAQABao9OYAPAAP5+wAF5HgDAAP6QPgg9io9lwF4vAByPcYKPbMBeLwCAvgEAARaPiGqPe2ADwAD+fsABeR5hwAD+ggDAAP6UTo+bj6QAAMAAbiNgA8AA/JcBHI+rgo+mwF4vAIC7AQABJ4LqAMAA/pFJj78cj8yFj8PAXi+OSAEAARyPz5SBxgAAAADAAPy6AMAA/bs9MI/TJI/1AyfAAG4kgo/vwF4vACeDSD9OkASQCQAAgL1gA8AA/n4BHJAQgpALwF4vAIC+AgACk4WQHcBeL44AwAD+lE6QM5A8AAC1OmADwAD60QEckEOGkD7AXi/zgdgBAAFqkE5gA8AA/n7AAXkZAMAA/pBJkGOHkGfAXjAfPgE9jpB7wF4v8xyQh4aQgsBeL/OAvgEAARaQnmqQkWADwAD+fsABeRlhwAD+ggDAAP6UPz2LkLXAXi8ZHpC+wAC2CQIAAYaQx8BeL/MBtTqHkNfAXjAfPYyQ6MBeLygckPiCkPPAXi8AgL4BAAEckQuFkQLAXi+OZAEAAZQAwAD9vQDAAP6USZEcHJElgpEgwF4vAIHYAQABapEwYAPAAP5+wAF5IQDAAP6QPgg9ipFGwF4vAByRUoKRTcBeLwCAvgEAARaRaGqRXGADwAD+fsABeSFhwAD+ggDAAP6UTpF7kYQAAMAAbiNgA8AA/JcBHJGLgpGGwF4vAIC7AQABJ4LqAMAA/pFJkZ8ckayFkaPAXjE4SAEAARyRr5SBxgAAAADAAPy6AMAA/bs9MJGzJJHUAyfAAG4lgpHOwF4vACeDSD9OkeOR6AAAgL1gA8AA/n4BHJHvgpHqwF4vAIC+AgACk4WR/MBeMTgAwAD+lE6SEpIbAAC1OmADwAD60QEckiKGkh3AXjGdgdgBAAFqki1gA8AA/n7AAXkZAMAA/pBJkkKHkkbAXjHJPgE9jpJawF4xnRySZoaSYcBeMZ2AvgEAARaSfWqScGADwAD+fsABeRlhwAD+ggDAAP6UPz2LkpTAXi8ZH5KdwAC2IQIAAYaSpcBeMZ0BtTqHkrXAXjHJPYySxsBeLygcktaCktHAXi8AgL4BAAEckumFkuDAXjE4ZAEAAZQAwAD9vQDAAP6USZL6HJMDgpL+wF4vAIHYAQABapMOYAPAAP5+wAF5JgDAAP6QPgI9i5MmwF4vGR+TL8AAti8BAAGAkznAXi7kAD2Mk0vAXi8oHJNbgpNWwF4vAIC+AQABFpNzapNlYAPAAP5+wAF5JmHAAP6CAMAA/pRJk4cck5CCk4vAXi8AgdgBAAFqk5tgA8AA/n7AAXkrAMAA/pA+Aj2Lk7LAXi8ZH5O7wAC2PAIAAoGTwsBeLvJqk9FgA8AAtc3AAXgUAD2Mk+DAXi8oHJPwgpPrwF4vAIC+AQABFpQHapP6YAPAAP5+wAF5K2HAAP6CAMAA/pRJlBsclCSClB/AXi8AgdgBAAFqlC9gA8AA/n7AAXkwAMAA/pA+Aj2LlEbAXi8ZH5RPwAC2PAIAAoGUVsBeLvJqlGVgA8AAtc3AAXguAD2MlHTAXi8oHJSEgpR/wF4vAIC+AQABFpSbapSOYAPAAP5+wAF5MGHAAP6CAMAA/pRJlK8clLiClLPAXi8AgdgBAAFqlMNgA8AA/n7AAXk1AMAA/pA+Aj2LlNzAXi8ZH5TlwAC2PAIAAoGU7MBeLvJqlPtgA8AAtc3AAXhIAD2MlQzAXi8oHJUcgpUXwF4vAIC+AQABFpU1apUmYAPAAP5+wAF5NWHAAP6CAMAA/pRJlUkclVKClU3AXi8AgdgBAAFqlV1gA8AA/n7AAXk6AMAA/pA+Aj2LlXXAXi8ZH5V+wAC2PAIAAoGVhcBeLvJqlZRgA8AAtc3AAXhiAD2MlaTAXi8oHJW0gpWvwF4vAIC+AQABFpXMapW+YAPAAP5+wAF5OmHAAP6CAMAA/pRJleAclemCleTAXi8AgdgBAAFqlfRgA8AA/n7AAXk/AMAA/pA+Aj2Llg3AXi8ZH5YWwAC2PAIAAoGWHcBeLvJqlixgA8AAtc3AAXh8AD2Mlj3AXi8oHJZNgpZIwF4vAIC+AQABFpZmapZXYAPAAP5+wAF5P2HAAP6CAMAA/pRJlnocloOCln7AXi8AgdgBAAFqlo5gA8AA/n7AAXlEAMAA/pA+Aj2LlqnAXi8ZH5aywAC2PAIAAoGWucBeLvJqlshgA8AAtc3AAXiWAD2MltvAXi8oHJbrgpbmwF4vAIC+AQABFpcGapb1YAPAAP5+wAF5RGHAAP6CAMAA/pRJlxoclyOClx7AXi8AgdgBAAFqly5gA8AA/n7AAXlJAMAA/pA+Aj2Ll0PAXi8ZH5dMwAC2PAIAAoGXU8BeLvJql2JgA8AAtc3AAXiwAD2Ml2/AXi8oHJd/gpd6wF4vAIC+AQABFpeUapeJYAPAAP5+wAF5SWHAAP6CAMAA/pRJl6gcl7GCl6zAXi8AgdgBAAFql7xgA8AA/n7AAXlOAMAA/pA+Aj2Ll9LAXi8ZH5fbwAC2PAIAAoGX4sBeLvJql/FgA8AAtc3AAXjKAD2Ml//AXi8oHJgPgpgKwF4vAIC+AQABFpglapgZYAPAAP5+wAF5TmHAAP6CAMAA/pQ+Aj2LmEHAXi8ZH5hKwAC2PAIAAoGYUcBeLvJqmGBgA8AAtc3AAXf7AD2MmG3AXi8ogph4wF4vAD2MmKDAXi8oHJi0hJirwF4vKILoAgACHpjDwAD+JwEAASfAAG4mACcAAMAA/p5KmOcBH5jywAC2AgIAAoOY+sBeLxmEmP7AXi8oAAAAXioZAF4qnwBeK10AXiuxAF4uxABeN24AAAAFAsAAtgOCAJkumTSdWAPAAG4nAAABYAHAAP3kAAFgAcAAteMDBMAAtgWCAJlcmWUJhooAYAPAAP5+AATAALYGggCZdpmACadxAGADwAD+fgAEwAC2B4IAmZuZowm1OgFqmYVgA8AA/eQCYAPAAPrRAAEFwAC2E4IAmvia+JtCAJV/AAObCZtCAAAAAwEBmw8AAASncWADwAD+fgACmyEAAASGimADwAD+fgFqAGADwAD9oXmbMQAABLU6YAPAAPrRAWqbO2ADwAD60QBgA8AAtgMBPwQIAcAAtgaAAMBeOBgIAcAAtgWBAMBeOCcIAcAAtgeCAMBeOD4JAZr4wAD9+gAAAAAHBsAAtgmCAJmombCa8wQBAAAAAAEDmbia8wAAAAIBAZnAAAAAgbJgA8AA/n4AAZnMAAAAtTpgA8AA+tEBapnWYAPAAPrRAGADwAC2AwE+Ak6Z6JnvAADAAG32YAPAAPyXARyZ9oCZ8cBeOK+AuwEAASeBagDAAP6RSZoIIRyaE4KaDMBeOOBIAQABHJoWlIHGAAAAAMAA/LoAwAD9uz4BSpoiAR+aLcAAthMDAAEcmkSAmj/AXjivgL4BAAEcmlWCmk7AXjjgZAEAAZQAwAD9vQDAAP6UAoaKHJp1gJpwwF44r4C+AgACk4KagsBeOOAAwAD+lLU6gZqVwF44vj4BSpqzAR+avsAAthMCAAGAmtDAXjivAbU6gZrgwF44vgbAALYLggCbR5tbm5kBAIPGAWqbSGADwAD95AIAAAEDm2SbmQAAAAAAAABgA8AA/JcBSptnARybfxybehabcRabZy6GisAAtgWDxsAA/oODjQEAATcNAMAA/b9kAQABHJuVFpuMFpuBLqdxwAC2BoPGwAD+g4ONAQABNxEAwAD9vwDAAP29BsAAthCCAJuem7icaAMASAFqm59gA8AA/eQCAAABA5u6nGgAAAABAQGbuwAAAIPbWwAAYAPAAPrRAT4DSZvIHpvMwAD2eAIAAi6Am9zAXjpdAEqb5AEpP0mb9SElm/+Am/nAXjpdYAPAALYDSpwNASo/SpwfASIcnDAWnCYuhorAALYFSAEAARacOYCcM8BeOl2GigAAwAD+jQAcnFEWnEYup3HAALYGSAEAARacWoCcVMBeOl2ncQAAwAD+jQbAALYMggCcbZyEnJkBAIJrAWqcbmADwAD95AIAAAEDnImcmQAAAAAAAABgA8AAtc0BSpyMAWqck2ADwAC1zcABd7AGwAC2DYIAnJ6cqZzqAQCAvQAAAAEDnK6c6gAAAAAAAABgA8AA/n4BSpyxASMhHJy7FpyxLoaKwAC2BUgBAAErAMAA/o0knN4DFpzHLoaKwAC2BSeBahac0i6nccAAtgYWnOAup3HAALYGAWADwAD+fgbAALYOggCc750GnSIBAJoVAWqc8GADwAD95AIAAAEDnRGdIgAAAAAAAABgA8AA/n4BSp0UASSdIgInwABuKBadHS6AvcAAtg0GwAC2EYIAnSedOp1WAAAjAWqdKGADwAD95AIAAAEDnUKdVgAAAAAAAABgA8AA/n4BSp1IASSdVgInwABuKRadUS6AvcAAtg0AAF44kABeOa4AXjo0AF468gBeOzUAXjumAF477wBePDcAAAAHAsAAthSCAJ1vnXWfnwPAAG4qAAABYAHAAP3kAAFgAcAAteMCBMAAthaCAJ2cnaUJhooAYAPAAP5+AATAALYXggCdwJ3ICbU6AWqdqmADwAD95AJgA8AA+tEAAQXAALYhggCdzZ3NnfwAAAADndSd/AAAAAIBAZ3aAAAEhopgA8AA/n4AAZ3rAAAEtTpgA8AA+tEBap31YAPAAPrRAGADwAC2FAE/AwgBwAC2FoAAwF480ggBwAC2F4EAwF484QkBnc3AAP36AAAAAAYGwAC2GYIAngGeFZ44AQCDxgFqngJgA8AA/eQCAAABA54enjgAAAAAAAAAYAPAAPyXAUqeIQEcnjQWnisWniEuhorAALYWg8bAAP6Dg40BAAE3DQDAAP2/BsAAth6CAJ49nlee5AMASAFqnj5gA8AA/eQCAAABA55ZnuQAAAABAQGeWgAAAIPbWwAAYAPAAPrRAT4DSZ5nHp5rwAD2eAIAAi6AnnvAXj2oAEqegwEpP0melCElnp6AnpjAXj2oYAPAALYUSp6rASo/Sp69ARyezhaexC6GisAAthZIAQABFp7XgJ7RwF49qIaKAADAAP6NBsAAthqCAJ7pnwCfEgEAgmsBap7qYAPAAP3kAgAAAQOfBZ8SAAAAAAAAAGADwAC1zQFKnwgBap8PYAPAALXNwAF3yQbAALYbggCfF58inzMBAIC9AAAAAQOfJ58zAAAAAAAAAGADwAD+fgFKnyoBFp8qLoaKwAC2FgbAALYcggCfOJ9Pn2oBAJoVAWqfOWADwAD95AIAAAEDn1qfagAAAAAAAABgA8AA/n4BSp9dASSfagInqUYWn2UugL3AALYbBsAAth+CAJ9vn4KfnQAAIwFqn3BgA8AA/eQCAAABA5+Kn50AAAAAAAAAYAPAAP5+AUqfkAEkn50CJ8AAbisWn5gugL3AALYbAABePScAXj1/AF4+GABePlsAXj6RAF4+2ABePyAAAAAGAsAAtiKCAJ+4n76iCAPAAG4sAAABYAHAAP3kAAFgAcAAteMBBMAAtiSCAJ/kn+cJgKwAYAPAAP7/AAEFwAC2L4IAn+yf7J//AAAAA5/1n/8AAAABAQGf+wAABICsYAPAAP7/AABgA8AAtiIBPwIIAcAAtiSAAMBeP5cJAZ/swAD9+gAAAAAHBsAAtiaCAKBCoFegaAEAtToBaqBDYAPAAP3kAgAAAQOgYKBoAAAAAAAAAGADwAD60QFKoGMBKgbAALYnggCgbaCBoJ4BAIPGAWqgbmADwAD95AIAAAEDoIqgngAAAAAAAABgA8AA/JcBSqCNARygmhagkRagjS6ArMAAtiSDxsAA/xqDjQEAATcNAMAA/b8GwAC2LIIAoKOgvaFAAwBIAWqgpGADwAD95AIAAAEDoL+hQAAAAAEBAaDAAAAAg9tbAABgA8AA+tEBPgNJoM0eoNHAAPZ4AgACLoCg4cBeQIAASqDpASk/SaD6ISWhBICg/sBeQIBgA8AAtiJKoRMBKj9KoSUBHKEwFqEsLoCswAC2JEgBAAEWoTmAoTPAXkCAgKwAAMAA/yYGwAC2KIIAoUWhXKFyAQCCawFqoUZgA8AA/eQCAAABA6FhoXIAAAAAAAAAYAPAALXNAUqhZAFqoWtgA8AAtc3AAXfiBsAAtimCAKF3oYKhmAEAgL0AAAABA6GHoZgAAAAAAAAAYAPAAP5+AUqhigEcoY4WoYougKzAALYkIwAAAADAAP8nBsAAtiqCAKGdobSh0QEAmhUBaqGeYAPAAP3kAgAAAQOhv6HRAAAAAAAAAGADwAD+fgFKocIBJKHRAifAAG4tFqHMLoC9wAC2KQbAALYtggCh1qHpogYAACMBaqHXYAPAAP3kAgAAAQOh8aIGAAAAAAAAAGADwAD+fgFKofcBJKIGAifAAG4uFqIBLoC9wAC2KQAAXj/IAF4//wBeQFcAXkDwAF5BMwBeQXUAXkG+AF5CBgAAAAcCwAC2MIIAokiiTqRnA8AAbi8AAAFgAcAA/eQAAWABwAC14wIEwAC2MoIAonGidgmAlgBgA8AA/JcABMAAtjOCAKKTopcJgmsBaqJ7YAPAAP3kAmADwAC1zQABBcAAtjyCAKKcoqKivwEAAAOiqKK/AAAAAgICoq4AAASAlmADwAD8lwCiugAABIJrYAPAALXNAABgA8AAtjABPwMIAcAAtjKAAMBeQqEIAcAAtjOBAMBeQq8JAaKiwAD9+gAAAAAFBsAAtjWCAKLEotmi6gEAtToBaqLFYAPAAP3kAgAAAQOi4qLqAAAAAAAAAGADwAD60QFKouUBKgbAALY2ggCi76MDozcBAIPGAWqi8GADwAD95AIAAAEDowyjNwAAAAAAAABgA8AA/JcBSqMPARyjIxyjHhajFRajDy6AlsAAtjKDxsAA/dyDjQEAATcNAMAA/b9kAQABHKMzFqMqFqMlLoJrwAC2M4PGwAD994ONAQABNxEAwAD9vwDAAP29BsAAtjmCAKM8o1aj8AMASAFqoz1gA8AA/eQCAAABA6NYo/AAAAABAQGjWQAAAIPbWwAAYAPAAPrRAT4DSaNmHqNqwAD2eAIAAi6Ao3rAXkPSAEqjggEpP0mjkyElo52Ao5fAXkPSYAPAALYwSqOpASo/SqO7ASIco8gWo8IugJbAALYySAEAARaj0YCjy8BeQ9KAlgAAwAD9uwAco98Wo9ougmvAALYzSAEAARaj6ICj4sBeQ9KCawAAwAD98QbAALY3ggCj9aQMpDEBAJoVAWqj9mADwAD95AIAAAEDpBekMQAAAAAAAABgA8AA/n4BSqQaASSkMQUnwABuMBakIy6AlsAAtjIng08WpCsugmvAALYzJ4MmBsAAtjqCAKQ2pEmkZQAAIwFqpDdgA8AA/eQCAAABA6RRpGUAAAAAAAAAYAPAAP5+AUqkVwEkpGUDFqRZLoJrwAC2MyeC6hakXy6AlsAAtjIAAF5C7ABeQyMAXkOpAF5EZwBeRMAAXkUQAAAABQLAALY9ggCkaqRwpp8DwABuMQABAACCemADwAD95AFbAWABwAD95AAABQTAALY/ggCki6SNCbQSAGADwAC14wAEwAC2QIIApJmkngmAlgBfAwAAAATAALZBggCkrKSvCYCsAGADwAD+/wAEwAC2Q4IApL2kxAnAAG4ywAC1zABgA8AA/JcABMAAtkSCAKTVpNsJg8UAYAPAAP3kAAEFwAC2S4IApOCk4KUkAAAAA6TqpSQAAAAFBQWk8AAABLQSYAPAALXjAKT5AAAEgJZfAwAAAKUFAAAEgKxgA8AA/v8ApQ8AAATAAG4yYAPAAPyXAKUdAAAEg8VgA8AA/eQAAF0DwAC2PQFfAwAAAT8GCAHAALY/gADAXkXlCAHAALZAgQDAXkXzCAHAALZBggDAXkX/CAHAALZDgwDAXkYNCAHAALZEhADAXkYdCQGk4MAA/foAAAAAAwbAALZGggClKaUxpbIBAINiAAAAAQOlOKWyAAAAAAAAAGADwAD8lwE+AUmlPiWlRRalQi60EsAAtj9gA8AAtjA+Ak6lX6VmAADAAGUzYAPAALYwASalXwEWpWgutBLAALY/YAPAALYwSqVyARalgIClecBeRsaAlsAAtjI+AUqlmgEWpaEuwABuMsAAtczAALZDBsAAtkeCAKW3pcKmIgEAwABtugAAAAEDpc2mIgAAAAAAAABgA8AA/n4BPgFKpdMBJKYeBSfAAG4zHKXvJKXuARal5y6DxcAAtkSC6AIAAieArycAAMAA/p4nwABDQBamEBamCS6DxcAAtkSFlsAA/fgngyYGwAC2SYIApiemOqadAAAjAWqmKGADwAD95AIAAAEDpkKmnQAAAAAAAABgA8AA/n4BSqZIASQADCfAAG40FqZYLrQSwAC2PyewNRamYi6AlsAAtkAnwABuNRambS6ArMAAtkEngKcnt6cWpoIug2LAALZGJ8AAbjYWppEuwABtusAAtkcngyYAAF5GgwBeRxUAXkeJAF5IEAAAAAMCwAC2TIIApqKmsaqlB8AAbjcAAQAAgnpgA8AA/eQBWwFgAcAA/eQAAAABBcAAtlQAAAAABAAAAwAAAAAAAAAAAF0DwAC2TAFfAwAAAT8BCQEAwAD9+gAAAAAEBsAAtk6CAKbFpuCm6QECwABtcQAAAAEDpumm6QAAAAAAAABdA8AA/W0CYAPAALXjXQPAALY9AV8DAAAABsAAtlCCAKdQp1Wp7wAAwABuOAAAAAEDp2Kp7wAAAAUFBadnAAAAgKxgA8AA/v8Ap3AAAACDYmADwAD8lwCnewAAALQSYAPAALXjAKeBAAAggJZfAwAAAKePAAAAg8VgA8AA/eQAAFwBPgFJp50hHKeng6ehwF5JCEgBAAErAMAA/fE+AkmnuBynxhanvC7AAG1xwAC2TodYAQABgqfSwF5I+gDAAP2APgROqGGobgAAwABuOV0DwAC2PQFfAwAAARyoeRaocC7AAG1xwAC2TksBAAGCqHrAXkj6AMAA/YE9HKiHLoHFAwADgKiOwF5I3oGok8BeSOwkqM0GJ8AAbjqCqKvAXkj6J7Akg6i3wF5JCCfAAG47hKjGwF5JFADAALZRPRyo2C6BxQMAA4Co7MBeSN6BqP3AXkjsJAAHJ8AAbjqCqSHAXkj6J7AkFqk7hakuwF5JZ4CWwAC2QCeBiyfAAG48FqlohalbwF5JZ4PFwAC2RADAALZRPRypey6BxAEAASSpkwMnwABuOoKpj8BeSPongWoAwAC2Uj89HKmtFqmkLsAAbXHAALZOgL8CAAKCqa7AXkj6H6m4wAC2SwUBXwMAAAWCqcbAXkj6g6nKwF5JCICp0cBeSN6BqdbAXkjshKnewF5JFAAAwAD9gj8GwAC2UYIAqh2qIqpNAAKBxQAAAAEDqiiqTQAAAAMDA6otAAAAgKxgA8AA/v8AqjYAAACDYmADwAD8lwCqRQAAACJgA8AA/n4AAFwABsAAtlKCAKqKqo+qowACgcQAAAABA6qTqqMAAAABAQGqmwAAACJgA8AA/n4AAFwAAABeSIAAXki8AF5KrQBeSvkAXkspAAAABAAAAYIAAF5LRABeJB8AXibVAF4nrABeN4sAXjxcAF4/QQBeQisAXkUtAF5IJQBeS0IAAAAJAF5LRAAAAAAAAgTAALZVAIIBAAACgNoAAMAAm18AAIEHAADAALbJAAAAAAABAsAAtlaCAYFwgXaDtQPAAG49AAABYAHAAP3kAAABBMAAtliCAYHAgcUJhDkAXQPAAP07AWADwAD8lwABBcAAtl+CAYHKgcqB3AAAAAOB0IHcAAAAAQEBgdYAAASEOV0DwAD9OwFgA8AA/JcAAGADwAC2VgE/AggBwAC2WIAAwF5L+wkBgcrAAP36AAAAAAMGwAC2WoIBgoWCn4L7AwBIAWqChmADwAD95AIAAAEDgqGC+wAAAAEBAYKpAAAAg9tgA8AA/eQAAGADwAD60QFKgrkBIiWCv4CCucBeTFxgA8AAtlYAHILhaoLSXQPAALEMAVvAAXlTldICAAIWguguhDnAALZYFoL1FILvwF5MXAABYAPAALZWhDnAALZYAMAAsREGwAC2XYIBgwCDFINAAQCDxgFqgwFgA8AA/eQCAAABA4Mdg0AAAAAAAAAAYAPAAPyXAUqDIAEcgzVqgyZdA8AAsQwBW8ABeVODzQEAARaDOi6EOcAAtlgAwACxEgbAALZbggGDgYOUg7MAACMBaoOCYAPAAP3kAgAAAQODnIOzAAAAAAAAAGADwAD+fgFKg6IBHIOmaoOiYAPAALcYwAF5Y5V6AQABFoOtLoQ5wAC2WADAAMf1AABeTDMAXkzGAF5NIgBeTXsAAAADAAABggEAXk2SAF5LpABeTZAAAAABAF5NkgAAAAAAAgTAALZgAIICAAADgNoAAMAAxYcAAIDyAADAALZVAACBCAAAwAC2ygAAAAAAAQLAALZhggKCCYIYhEIHwABuPgAAAV0BwADIEgJdA8AA/TsBYAPAAPyXYAPAALZWAAAAAQXAALZoggKDCoMQgxYBAAADgxSDFgAAAAAAAABgA8AAtmEBPwEJAYMQwADIGwAAAAADBsAAtmOCAoL0gvyDBQECwABuPwAAAAEDgwWDBQAAAAAAAABgA8AA/JcABsAAtmWCAoMbgy6D8wAAiOMBaoMcYAPAAP3kAgAAAQODNYPzAAAAAQEBg0AAACASXQPAAP07AWADwAD8lwAAYAPAALZWAT4FToNQg1oAAMAAbkBgA8AAtssBH4NgwAC21QAAAABOg3aDgAAAwABuQWADwADHqgEcg4IutOsBAAGBg5nAXk60AMAAtmY9HIOzgoOpwF5O0VYBAAGAg7fAXk6VAMAAx9o9HIPMgoPCwF5O0YKMAAAAAMAAx9tKg9kBFoPqgYPgwF5OtICWwAC20AbAALZmggKD+IQXhEAAArTrAWqD+WADwAD95AIAAAEDhC2EQAAAAAEBAYQ7AAAghEBdA8AA/kwBYAPAALZWAABgA8AAx6oAAABeTkEAXk5rAF5POwBeT4IAAAADAAABggIAXk+ZAF5N3ABeT5cAAAABAF5PmQAAAAAAAgTAALZpAIIDAAAFgNoAAMAAxYcAAIDxAADAANQ9AACBDAAAwAC2VQAAgSIAAMAAtsoAAIE9AADAALZgAAAAAAACAsAAtmqCA4JEgkqGkQPAAG5CAAABXQHAAMgSAl0DwAD9OwFgA8AA/JdgA8AAtlYAAAIEwAC2bYIDgsaCywnAAGZXwAC2aQBgA8AAtmEABMAAtm6CA4McgyAJlzfAALZpAGADwADjugABBcAAtnOCA4PHg8eFOwAAAAODy4U7AAAAAgICg9EAAACDzWADwAC2YQCD4QAAAIPWXQPAAP07AWADwAD8lwAAYAPAALZqAT4CSYRzHISCFoR7gYR3wF5QiWHAAP1rgJcBAAEWhIoWhIQuwABmV8AAtmnAALZtwABuP8AAtmMAwAD9xz2JhJXAXlCJFoSuHIShFoSbLsAAZlfAALZpwAC2bYjjAQABgYSpwF5QiQDAALZlhDnAALZYPz0chRsWhRYulzfAALZpwAC2boNkAwADkxaFK4GFJ8BeUIlhwAD9a4GFM8BeUIkAwAD9YAMIAMAAtm2Ag/bAXlB7CADAALZuHoQPwADjvgEAARaEHoCEGcBeUHvAAG4/wAC2YwAJAYPHwADIGwAAAAACBsAAtnCCA4VAhVOGGAAAiOMBaoVBYAPAAP3kAgAAAQOFWoYYAAAAAQEBhWUAACASXQPAAP07AWADwAD8lwAAYAPAALZWAT4FToV1hX8AAMAAbkBgA8AAtssBH4WFwAC21QAAAABOhZuFpQAAwABuQWADwADHqgEchacutOsBAAGBhb7AXlHSAMAAtnE9HIXYgoXOwF5R71YBAAGAhdzAXlGzAMAAx9o9HIXxgoXnwF5R74KMAAAAAMAAx9tKhf4BFoYPgYYFwF5R0oCWwAC20AbAALZxggOGHYY8ho8AALTrAWqGHmADwAD95AIAAAEDhlKGjwAAAAEBAYZgAAAghEBdA8AA/kwBYAPAALZWAABgA8AAx6oBSoZvAR+Gc8AAtoADAAOAhn3AXlKDFoaDLsAAZlfAALZpwAC2bRaGii6XN8AAtmnAALZuAAAAXlGJAF5SWQBeUtQAAAACAsAAtnSCA4bLhtGMZAPAAG5DAAABYAHAAMeqAAAEBMAAtneCA4dCh0wJwABuRMAAtmkAYAPAAMeqAATAALZ4ggOHp4fKCcAAbkXAALZpAGADwAC2ywEfh77AALbVAAAAAATAALZ5ggOIEYgbGMAAbkbAALZpAGADwADHqgErBMAAtnqCA4hMiF0YwABuR8AAtmkAYAPAAPrRASoBBcAAtoCCA4hiiGKKZwAAAAOIa4pnAAAAAwMDiHkAAACEQF0DwAD+TAFgA8AAtlYAiIQAAACDzWADwAC2YQCIlAAAAIPWXQPAAP07AWADwAD8lwAAYAPAALZ0AT4GPReI1i7AAG5GwAC2aRyI6IGI48BeU7G06wEAARaI/y7AAG5FwAC2acAAtngAwAC2ZsAAtnlOiTmJQQAAlspgA8AA47oBHolHwADjvgEAARaJVYKJUcBeU79hwAD9awBFiWIBiWuJbQAAYmADwAD8lwGTARyJdISJcsBeVEFjAQABFol+g4l2wF5UFGHAAP1rAMAA/cUBjImGwF5UQRyJh4SJhsBeVEFkAQABlADAAP29PgE9HImag4mTwF5UFIC/AgAChImbwF5UQRyJpTdcg8ABAAEciaqCiafAXlO/SwEAAYSJq8BeVEEAwAD9SgDAAPyxAMAA/Us9HInEFom5LsAAbkTAALZpwAC2d1YBAAGDicjAXlQUAMAAx9pFifUBif6KAAAAYmADwAD8lwGTARyKB4SKBcBeVP5jAQABFooRg4oJwF5UFGHAAP1rAMAA/cUBjIoZwF5U/hyKGoSKGcBeVP5kAQABlADAAP29PgE9HIotg4omwF5UFIC/AgAChIouwF5U/hyKODc2g8ABAAEcij2CijrAXlO/SwEAAYSKPsBeVP4AwAD9SgDAAPyxAMAA/Us9HIpXFopMLsAAbkbAALZpwAC2eVYBAAGDilvAXlQUAMAAx9oCCADAALZ3HIizgYiuwF5TsbTrAQABgIjKwF5TnADAALZmCQGIYsAAx7QAAAAAAwbAALZ8ggOKbIp9iuoAAFYBaoptYAPAAP3kAgAAAQOKgIrqAAAAAQEBiosAACASXQPAAP07AWADwAD8lwAAXAE+AkmKlxaKmy7AAG5HwAC2acAAtno9MIqmH4qwwAD8NwEAASfAAG5IAD89HIrdForSLsAAbkbAALZpwAC2eVYBAAGAiuHAXlYPAMAAx9oGwAC2fYIDiu+LAIusAADAAG5JAWqK8GADwAD95AIAAAEDiwiLrAAAAAQEBIsTAAAAEl0DwAD9OwFgA8AA/JcAix0AAABqYAPAAPyXAIsoAAAAgpBgA8AA/JcAizIAAADAAG5KYAPAAPrRAABcAT4CSYtAFotELsAAbkfAALZpwAC2ej0wi08fi1nAAPw3AQABJ8AAbkgAPz0ci4YWi3suwABuRsAAtmnAALZ5wABuSQQABICLj8BeVqCBi5XAXla0goucwF5WwYOLocBeVs8AwADHsgbAALZ+ggOLsYvCjGIAAIKMAWqLsmADwAD95AIAAAEDi8eMYgAAAAAAAABcAT4FSYvQFovULsAAbkfAALZpwAC2ekqL3wA/PReL6y7AAG5HwAC2aSnAALZ6PRyMDRaMAi7AAG5GwAC2acAAtnmCjAAAAADAAMfbPRyMJRaMGi7AAG5EwAC2acAAtndWAQABFoxAFow6FowpLsAAbkXAALZpwAC2eICWwAC20IQ5wAC2WADAAMfaPRyMVxaMTC7AAG5EwAC2acAAtneCjAAAAADAAMfbAABeVeYAXlZ0AF5XSABeWBwAAAADAAABggMAXlgzAF5P9wBeUuUAXlgxAAAAAgBeWDMAAAAAAAIEwAC2gQCCBAAABoDaAADAAMWHAACA8QAAwADUPQAAgQwAAMAAtlUAAIEiAADAALZgAACBNgAAwAC21gAAgU8AAMAAtu4AAAAAAAICwAC2h4IEg9SD2oS2A8AAbksAAAFgAcAAtmEAAAEEwAC2iYIEhAWEIgnAAG4/AWqD8GADwAD95AJgA8AA/JcBHIQUNxCDjQEAAWqEFmADwAD8l4FXAMAA/b8BBcAAto6CBIQnhCeELgCAtcAAtoEAA4QshC4AAAAAAAAAYAPAALaHAT8BCQGEJ8AAtmgAAAAAAQbAALaLggSEM4RShLQAALTrAWqENGADwAD95AIAAAEDhGiEtAAAAAEBAYR2AAAghEBdA8AA/kwBYAPAALZWAABgA8AAx6oBSoSFAR+EicAAx8QBAAEfhKXAALaVAQABgISuwF5ZWwAAAABeWTEAXlmZAAAAAQLAALaPggSKI4opjtkDwABuTAAAAWABwAC21wAAAQTAALaRggSKWYpzCZWfAWqKSGADwAD95AJgA8AA4+gBHopmwADj7AEAAZcAAQXAALaVggSKeIp4izEAAAADioCLMQAAAAEBAYqOAAAAhEBdA8AA/kwBYAPAALZWAABgA8AAto8BPgQ9HIrJForDLpWfwAC2kYC/AgACkznAAG5NAMAA/Us9HIrlForfLpWfwAC2kYC/AgAClDnAAG5OAMAA/Us9HIsBFor7LpWfwAC2kYC/AgAClTnAAG5PAMAA/Us9HIsdFosXLpWfwAC2kYC/AgACljfQMlR2AMAA/UsBCQCKlsAAtu0DAAKAipzAXloMNxABwABuUGqKtWADwADjjMABeWoBBsAAtpOCBIs2i0eO1wAAwABuUQFqizdgA8AA/eQCAAABA4tRjtcAAAABAQGLXQAAAK0RYAPAAOPoAABcAT4MQByLfhaLd4CLccBeWvdhwAD9a0gBAAE3EADAAP27i3GLgwBOi4+LkQAAgddgA8AA/JcBHIuZFouTLpWfwAC2kUsBAAGTAMAA/UpOi6aLqAAAgk5gA8AA/JcBHIuwFouqLpWfwAC2kUsBAAGUAMAA/UpOi72LvwAAgPVgA8AA/JcBHIvHFovBLpWfwAC2kUsBAAGVAMAA/UpOi9SL1gAAlshgA8AA/JcBHIveFovYLpWfwAC2kUsBAAGWAMAA/UpOi+wAAACDU2ADwAD8lwBOi/cAAACBpmADwAD8lwBFi/8BjAiMCgAAYmADwAD8lwGTARyMEYeMD8BeW+tjAQABN0AAwAD9xQGPjBfAXlvrHIwYh4wXwF5b62QBAAGUAMAA/b0+BkmMJByMKoeMKMBeW+tjAQABNxAAwAD9xT4CPY2MOsBeW8ocjEYcjEGCjD/AXltVg3wBAAGDjEPAXlt8AMAA/K+BBgEAARyMVxyMTRyMSoKMS8BeW1WEkgAAAADAAPyyg3wBAAFqjE9gA8AA/JfAAXl2AMAA/K+DfAEAAYSMWcBeW6MAwAD8rwDAAPywPY6MZcBeW9mHjGnAXlvrSYx5HIx/h4x9wF5b62MBAAE3IADAAP3FPgI9jYyPwF5byhyMmxyMloSMlMBeW6ODfAEAAYKMmMBeW1UAwAD8r4EGAQABHIysHIyiHIyfhIygwF5bo4SSAAAAAMAA/LKDfAEAAWqMpGADwAD8l8ABeXYAwAD8r4N8AQABg4yuwF5bfADAAPyvAMAA/LA9joy6wF5b2RyMzByMxxyMwjcFg40BAAGHjMTAXlvrAMAA/b9kAQABlADAAP29leABAAE3EADAAP3ASYzfHIzlh4zjwF5b62MBAAE3MADAAP3FPgI9jYz1wF5byhyM/xyM+4KM+cBeW1WDwAEAAYOM/cBeW3wAwAD8sYPAAQABhI0BwF5bowDAAPyxPY6NDMBeW9kcjR4cjRkcjRSWg40BAAGHjRbAXlvrAMAA/b9kAQABNwUAwAD9vZXgAQABNxAAwAD9wD4CPY2NO8BeW8ocjUGDjT/AXlt8g8ABAAEcjUaCjUTAXltVgQYBAAEcjUwcjUmEjUrAXlujhJIAAAAAwAD8soN8AQABao1OYAPAAPyXwAF5dgDAAPyvAMAA/LAAwAD8sT2OjWDAXlvZHI1sHI1nNweDjQEAAYeNacBeW+sAwAD9v5XgAQABNxAAwAD9wE6NhY2KAAC/FmADwAD8lwGEjYzAXlujPYyNlcBeW6ODjZnAXlt8PYuNosBeW3yCjabAXltVPYqNr8BeW1UejbPAALb0AgACgo3EwF5bVR6N0cAAtvUCAAIejdjAALb0AgACHo3ewAC29AIAAoGN5MBeWy6FjefAXlvKAB6N68AAtvQCAAIcjfdqjfFdA8AA/TsBYAPAAPyXwAF6/EsBAAGHjfjAXlvrAMAA/UocjgGAjfzAXlr3SwEAAYaOAsBeW9kAwAD9SgAAHI4jao4WXQPAAP07AWADwAD8l8ABfARLAQABh44kwF5b6wDAAP1KAAA9iY4wwF5bLhSONMBeXqgIAD0cjksWjkUulZ/AALaRgL8CAAKTHo5RwAC29AIAAoGOV8BeWy4cjmAWjloulZ/AALaRSwEAAZMAwAD9SgAAwAD9Sz0cjnAWjmoulZ/AALaRgL8CAAKUHo52wAC29AIAAoKOfMBeW1UcjoUWjn8ulZ/AALaRSwEAAZQAwAD9SgAAwAD9Sz0cjpUWjo8ulZ/AALaRgL8CAAKVHo6bwAC29AIAAoOOocBeW3wcjqoWjqQulZ/AALaRSwEAAZUAwAD9SgAAwAD9Sz0cjroWjrQulZ/AALaRgL8CAAKWHo7AwAC29AIAAoSOxsBeW6Mcjs8WjskulZ/AALaRSwEAAZYAwAD9SgAAwAD9SwAAXlrLAF5gsQAAAAEDBMAAtoOCBIJ/gpAFwABuigBgA8AAtocBH4KJwAC2jgAAAAAEwAC2hYIEhRqIRAbAAG6LwAC2gQBdA8AA/TsBYAPAAPyXAWqFI10DwAD9OwFgA8AA/JfAAXr8BMAAtoaCBIhqiY0GwABujMAAtoEAXQPAAP07AWADwAD8lwFqiHpdA8AA/TsBYAPAAPyXwAF8BAABggQAXmFRAF5YnwBeWaYAXmC+AAAAAgBeYVEAAAAAAAIEwAC2lgCCBQAABoDaAADAAMWHAACA8QAAwADUPQAAgQwAAMAAtlUAAIEiAADAALZgAACBNgAAwAC21gAAgU8AAMAAtu4AAAAAAAICwAC2mYIFgo2Ck4NyA8AAbo0AAAFgAcAAtmEAAAEEwAC2m4IFgr+C3AnAAG4/AWqCqmADwAD95AJgA8AA/JcBHILONxCDjQEAAWqC0GADwAD8l4FXAMAA/b8BBcAAtqCCBYLhguGC6QCAtcAAtpYAA4LngukAAAAAAAAAYAPAALaZAT8BCQGC4cAAtmgAAAAAAQbAALadggWC7oMNg3AAALTrAWqC72ADwAD95AIAAAEDgyODcAAAAAEBAYMxAAAghEBdA8AA/kwBYAPAALZWAABgA8AAx6oBSoNAAR+DRMAAx8QBAAEfg2DAALapAQABgINqwF5ieQAAAABeYk8AXmK3AAAAAQLAALahggWECoQQiuoDwABujgAAAWABwAC21wAAAgTAALajggWEQYRbCZWfAWqEMGADwAD95AJgA8AA4+gBHoROwADj7AEAATcFAATAALalggWFO4VECcAAbo/AALaWAGADwADj6AABBcAAtqmCBYVJhUmGNgAAAAOFUoY2AAAAAQEBhWAAAACEQF0DwAD+TAFgA8AAtlYAAGADwAC2oQE+BT0chbIWhawulZ/AALajgL8CAAKTOcAAbk0AwAD9Sz0chc4WhcgulZ/AALajgL8CAAKUOcAAbk4AwAD9Sz0cheoWheQulZ/AALajgL8CAAKVOcAAbk8AwAD9Sz0chgYWhgAulZ/AALajgL8CAAKWN9AyVHYAwAD9Sz0chiIWhhwulZ/AALajgL8CAAKXOcAAbpAAwAD9SwIIAMAAtqUehX7AAOPsAQABN1AACQCFlsAAtu0CAAKAhZzAXmNHNxAAAQbAALanggWGO4ZMiugAAMAAblEBaoY8YAPAAP3kAgAAAQOGVoroAAAAAQEBhmIAAACtEWADwADj6AAAXAE+DEAchoMWhnyAhnbAXmRSYcAA/WtIAQABNxAAwAD9u4Z2hogAToaUhpYAAIHXYAPAAPyXARyGnhaGmC6Vn8AAtqNLAQABkwDAAP1KToarhq0AAIJOYAPAAPyXARyGtRaGry6Vn8AAtqNLAQABlADAAP1KTobChsQAAID1YAPAAPyXARyGzBaGxi6Vn8AAtqNLAQABlQDAAP1KTobZhtsAAJbIYAPAAPyXARyG4xaG3S6Vn8AAtqNLAQABlgDAAP1KTobwhvIAAINTYAPAAPyXARyG+haG9C6Vn8AAtqNLAQABlwDAAP1KRYcEAYcNhw8AAGJgA8AA/JcBkwEchxaGhxTAXmVPYwEAATdQAMAA/cUBjoccwF5lTxyHHYaHHMBeZU9kAQABlADAAP29PghJhykchy+Ghy3AXmVPYwEAATcQAMAA/cU+AT0ch0gWhz8uwABuj8AAtpbAALalgL8CAAKGh0nAXmVPHIdTgIdOwF5kUksBAAGGh1TAXmVPAMAA/UoAwAD9Sz4BPRyHeBaHby7AAG6PwAC2lsAAtqWAvwIAAoaHecBeZU8eh37AALb1AgACHIfqHIfGHIejHIebFoeSLsAAbo/AALaWwAC2pUsBAAEch56Gh5zAXmVPgY0BAAGWAMAA/b4AwAD9SoPAAQABHIe+Foe1LsAAbo/AALaWwAC2pUsBAAEch8GGh7/AXmVPgY0BAAE3CADAAP2+AMAA/UoAwAD8sYPAAQABHIfhFofYLsAAbo/AALaWwAC2pUsBAAEch+SGh+LAXmVPgY0BAAE3DgDAAP2+AMAA/UoAwAD8sYPAAQABHIgFFof8LsAAbo/AALaWwAC2pUsBAAEciAiGiAbAXmVPgY0BAAE3EADAAP2+AMAA/UoAwAD8sZQAAMAA/UtOiDKINwAAwABukWADwAD8lwEeiDnAALb0AgACHog/wAC29AIAAh6IRcAAtvUCAAKBiEzAXmSJNwUAhYhTwF5lJQAciGAWiFcuwABuj8AAtpbAALalSwEAAYaIYcBeZU8AwAD9SgBJiGwciHKGiHDAXmVPYwEAATcUAMAA/cU+AT2PiILAXmcNHoiJwAC29AIAAh6Ij8AAtvQCAAKHiJXAXmcNHIijHIiegoicwF5ksIN8AQABg4igwF5k1wDAAPyvgQYBAAEciKkciKaCiKfAXmSwhJIAAAAAwAD8soN8AQABhIirwF5k/gDAAPyvAMAA/LAAOcAAbpIASYjKHIjQhojOwF5lT2MBAAE3KADAAP3FPgE9j4jgwF5nDR6I58AAtvQCAAIeiO3AALb0AgACh4jzwF5nDRyJAByI/IKI+sBeZLCDwAEAAYOI/sBeZNcAwAD8sYPAAQABhIkCwF5k/gDAAPyxADnAAG6TAEmJIRyJJ4aJJcBeZU9jAQABNzwAwAD9xT4BPY+JN8BeZw0eiT7AALb0AgACHolEwAC29AIAAoeJSsBeZw0ciWIciVgciVOCiVHAXmSwg3wBAAGDiVXAXmTXAMAA/K+BBgEAARyJXYKJW8BeZLCDfAEAAYSJX8BeZP4AwAD8rwDAAPywgQYBAAEciWeDiWXAXmTXg3wBAAGEiWnAXmT+AMAA/K8AwAD8sAA5wABulAA+AT2PiZLAXmcNHomZwAC29AIAAh6Jn8AAtvQCAAKHiaXAXmcNHImxHImtgomrwF5ksIPAAQABg4mvwF5k1wDAAPyxg8ABAAGEibPAXmT+AMAA/LEAOcAAbpUAPY2J08BeZSWEidfAXmT+PYyJ4MBeZP6DieTAXmTXPYuJ7cBeZNceifHAALb1AgACgon4wF5ksDceAD2KigbAXmSwgYoKwF5kiT2JihPAXmSJHIoch4oXwF5nDYN8AQABaooeYAPAAPyXwAF5dgDAAPyvPRyKNxaKMS6Vn8AAtqOAvwIAApMeij3AALb0AgACgYpDwF5kiRyKTBaKRi6Vn8AAtqNLAQABkwDAAP1KAADAAP1LPRyKXBaKVi6Vn8AAtqOAvwIAApQeimLAALb0AgACgopowF5ksByKcRaKay6Vn8AAtqNLAQABlADAAP1KAADAAP1LPRyKgRaKey6Vn8AAtqOAvwIAApUeiofAALb0AgACg4qNwF5k1xyKlhaKkC6Vn8AAtqNLAQABlQDAAP1KAADAAP1LPRyKphaKoC6Vn8AAtqOAvwIAApYeiqzAALb0AgAChIqywF5k/hyKuxaKtS6Vn8AAtqNLAQABlgDAAP1KAADAAP1LPRyKyxaKxS6Vn8AAtqOAvwIAApceitHAALb0AgAChYrXwF5lJRyK4BaK2i6Vn8AAtqNLAQABlwDAAP1KAADAAP1LAABeZCYAXms/AAAAAQEEwAC2mIIFggyCHwXAAG6WAGADwAC2mQEfghfAALagAAAAAAABggUAXmtxAF5hvQBeYsQAXmtMAAAAAgBea3EAAAAAAAIEwAC2qgCCBgAABoDaAADAAMWHAACA8QAAwADUPQAAgQwAAMAAtlUAAIEiAADAALZgAACBNgAAwAC21gAAgU8AAMAAtu4AAAAAAAICwAC2r4IGgvuDAYQRA8AAbpcAAAFgAcAAtmEAAAEEwAC2sYIGgy+DTAnAAG4/AWqDGmADwAD95AJgA8AA/JcBHIM+NxCDjQEAAWqDQGADwAD8l4FXAMAA/b8BBcAAtreCBoNRg1GDWwCAtcAAtqoAA4NZg1sAAAAAAAAAYAPAALavAT8BCQGDUcAAtmgAAAAAAgbAALazggaDYINng4YAAMAAVTcAAAABA4Nyg4YAAAAAAAAAYAPAALavAUqDeAEfg3zAALa3AAAAAAbAALa0ggaDi4OqhA8AALTrAWqDjGADwAD95AIAAAEDg8CEDwAAAAEBAYPOAAAghEBdA8AA/kwBYAPAALZWAABgA8AAx6oBSoPdAR+D4cAAx8QBAAEfg/3AALbIAQABgIQJwF5s0gAAAABebG8AXmyoAF5tEAAAAAICwAC2uIIGiDGIN5J6A8AAbpgAAAFgAcAAttcAAAIEwAC2uoIGiGqIhAmVnwFqiFlgA8AA/eQCYAPAAOPoAR6Id8AA4+wBAAE3CAAEwAC2vIIGiWSJbQnAAG6PwAC2qgBgA8AA4+gAAQXAALbIggaJcolyizwAAAADiX2LPAAAAAEBAYmLAAAAhEBdA8AA/kwBYAPAALZWAABgA8AAtrgBPgg9HIpkFopeLpWfwAC2uoC/AgACkznAAG6ZAMAA/Us9HIqAFop6LpWfwAC2uoC/AgAClDnAAG6aAMAA/Us9HIqcFoqWLpWfwAC2uoC/AgAClTf8bvNyAMAA/Us9HIq4FoqyLpWfwAC2uoC/AgACljnAAG6bAMAA/Us9HIrUForOLpWfwAC2uoC/AgAClznAAG6cAMAA/Us9HIrwForqLpWfwAC2uoC/AgACNwU5wABunQDAAP1LPRyLDBaLBi6Vn8AAtrqAvwIAAjcGN9+D2asAwAD9Sz0ciygWiyIulZ/AALa6gL8CAAI3BznAAG6eAMAA/UsCCADAALa8HompwADj7AEAATdAAAkAicHAALbtAgACgInHwF5tpDcQAAgGwAC2v4IGi6eLq4vpAADAAG6fwAC2qgAAAAEDi7KL6QAAAAICAou3AAAAg6hgA8AA/JcAi74AAACDgGADwAD8lwAAYAPAAPyXAUqLxAEci80ci8eBi8XAXm8Ug8EBAAGAi8rAXm8GAMAA/LSBBgEAARyL4ByL04GL0cBebxSDvwEAARyL2jcggY0BAAGAi9zAXm8GAMAA/b4AwAD8s4N8AQABaoviYAPAAPyXwAF5dgDAAPyvAMAA/LAGwAC2wIIGi+2L8YwqAADAAG6gwAC2qgAAAAEDi/SMKgAAAAMDA4v5AAAAg4BgA8AA/JcAjAAAAAC8r2ADwAD8lwCMBwAAAMAASK5gA8AA/JcAAGADwAD8lwFKjA0BHIwVHIwQgIwOwF5vwIN8AQABgYwSwF5vzgDAAPyvg8ABAAEcjCYcjBwcjBmAjBrAXm/AhJIAAAAAwAD8soN8AQABaoweYAPAAPyXwAF5dgDAAPyvg3wBAAGCjCjAXm/cAMAA/K8AwAD8sQbAALbBggaMLowyjGoAAMAAbqHAALaqAAAAAQOMNoxqAAAAAwMDjDsAAACDgGADwAD8lwCMQgAAALyvYAPAAPyXAIxJAAAAwABIrmADwAD8lwAAYAPAAPyXAUqMTwEcjGEcjFccjFKAjFDAXnCIg3wBAAGBjFTAXnCWAMAA/K+DwAEAARyMXICMWsBecIiDfAEAAYKMXsBecKQAwAD8rwDAAPyxg8ABAAEcjGaBjGTAXnCWg3wBAAGCjGjAXnCkAMAA/K8AwAD8sQbAALbCggaMboxyjLIAAMAAbqLAALaqAAAAAQOMeIyyAAAAAQEBjH0AAACDgGADwAD8lwAAYAPAAPyXAUqMgwEcjKIcjJEcjIMuwABun8AAtqoCAAKVgIyOwF5xUQDAALa/g8ABAAEcjJMuwABun8AAtqoCAAI3DYCMn8BecVEAwAC2vwDAAPyxg8ABAAEcjKQuwABun8AAtqoCAAI3FoCMsMBecVEAwAC2vwDAAPyxBsAAtsOCBoy2jLqM+gAAwABuo8AAtqoAAAABA4zAjPoAAAABAQGMxQAAAIOAYAPAAPyXAABgA8AA/JcBSozLARyM6hyM2RyMyy7AAG6fwAC2qgIAAjcGgIzWwF5yAQDAALa/g8ABAAEcjNsuwABun8AAtqoCAAI3C4CM58BecgEAwAC2vwDAAPyxg8ABAAEcjOwuwABun8AAtqoCAAI3GYCM+MBecgEAwAC2vwDAAPyxBsAAtsSCBoz+jQKNPAAAwABupMAAtqoAAAABA40IjTwAAAABAQGNDQAAAIOAYAPAAPyXAABgA8AA/JcBSo0TARyNMhyNIRyNEy7AAG6fwAC2qgIAAjcHgI0ewF5ysgDAALa/g8ABAAEcjSMuwABun8AAtqoCAAI3EoCNL8BecrIAwAC2vwDAAPyxg8ABAAEcjTeAjTXAXnKyg8EBAAGWAMAA/LQAwAD8sQbAALbFggaNQI1EjYAAAMAAbqXAALaqAAAAAQONSo2AAAAAAQEBjU8AAACDgGADwAD8lwAAYAPAAPyXAUqNVQEcjXUcjWQcjVUuwABun8AAtqoCAAI3EYCNYcBec1sAwAC2v4PAAQABHI1mLsAAbp/AALaqAgACNxOAjXLAXnNbAMAAtr8AwAD8sYPAAQABHI16gI14wF5zW4PBAQABNwoAwAD8tADAAPyxBsAAtsaCBo2FjZaSeAAAwABuUQFqjYZgA8AA/eQCAAABA42gkngAAAABAQGNrAAAAK0RYAPAAOPoAABcAT4UQByNzRaNxoCNwMBedAthwAD9a0gBAAE3EADAAP27jcCN0gBFjfsBjgSOBgAAYmADwAD8lwGTARyODYGOC8BedEVjAQABNxAAwAD9xQGJjhPAXnRFHI4UgY4TwF50RWQBAAGUAMAA/b0+AT0cjikWjiAuwABuj8AAtqrAALa8gL8CAAKBjirAXnRFHI40gI4vwF50C0sBAAGBjjXAXnRFAMAA/UoAwAD9S0WOQwGOTI5OAABiYAPAAPyXATcQARyOVoGOVMBedMtjAQABN0AAwAD9xQGJjlzAXnTLHI5dgY5cwF50y2QBAAGUAMAA/b0+AT0cjnIWjmkuwABuj8AAtqrAALa8gL8CAAKBjnPAXnTLHo54wAC29AIAAh6OfsAAtvQCAAIcjoQuwABupcAAtqoBAAEcjpQWjosuwABuj8AAtqrAALa8SwEAARyOl4GOlcBedMuBjQEAAZUAwAD9vgDAAP1KAMAAtsUcjqcWjp4uwABuj8AAtqrAALa8SwEAARyOqoGOqMBedMuBjQEAATcHAMAA/b4AwAD9SgAejrvAALb0AgACHI7BLsAAbqTAALaqAQABHI7RFo7ILsAAbo/AALaqwAC2vEsBAAEcjtSBjtLAXnTLgY0BAAE3DwDAAP2+AMAA/UoAwAC2xByO5RaO3C7AAG6PwAC2qsAAtrxLAQABHI7ogY7mwF50y4GNAQABNxAAwAD9vgDAAP1KAAAAwAD9S06PII8iAACB12ADwAD8lwEcjyoWjyQulZ/AALa6SwEAAZMAwAD9Sk6PN485AACCTmADwAD8lwEcj0EWjzsulZ/AALa6SwEAAZQAwAD9Sk6PTo9QAACA9WADwAD8lwEcj1gWj1IulZ/AALa6SwEAAZUAwAD9Sk6PZY9nAACWyGADwAD8lwEcj28Wj2kulZ/AALa6SwEAAZYAwAD9Sk6PfI9+AACDU2ADwAD8lwEcj4YWj4AulZ/AALa6SwEAAZcAwAD9Sk6Pk4+VAACBpmADwAD8lwEcj50Wj5culZ/AALa6SwEAATcFAMAA/UpOj6qPrAAAvpJgA8AA/JcBHI+0Fo+uLpWfwAC2uksBAAE3BgDAAP1KTo/Bj8MAAIDzYAPAAPyXARyPyxaPxS6Vn8AAtrpLAQABNwcAwAD9SkWP1QGP3o/gAABiYAPAAPyXAZMBHI/nFI/lwF53gwkAYwEAATdAAMAA/cUBFY/twF53gwkcj+4Uj+3AXneDCQBkAQABlADAAP29PgpOj/6QBAAAwABupmADwAD8lwEekAbAALb0AgACHpAMwAC29AIAAhSQEsBed1gIAByQFS7AAG6jwAC2qgEAAYWQHMBeduEAwAC2wwAekCvAALb0AgACHJAxLsAAbqDAALaqAwADhZA1wF524YaQOMBedwiHkDvAXncwAMAAtsAekD/AALb0AgACHJBLapBFXQPAAP07AWADwAD8l8ABflRLAQABFJBMwF53gwkAAMAA/UockFkWkFAuwABuj8AAtqrAALa8SwEAARSQWsBed4MJAADAAP1KAAAATpBrkHEAAMAAbtdgA8AA/JcBHpBzwAC29AIAAhyQeS7AAG6iwAC2qgEAAYGQgMBedkUAwAC2whyQhC7AAG6hwAC2qgMAA4GQicBedkWCkIzAXnZsg5CPwF52kwDAALbBAD0VkJrAXndYCIeQnsBedzA9j5CnwF53MIaQq8Bedwg9jpC0wF53CIWQuMBeduE9jZDBwF524R6QxcAAtvQCAAKEkMvAXna6FJDOwF53zAoAAD2MkNzAXna6g5DgwF52kz2LkOnAXnaTgpDtwF52bD2KkPbAXnZsgZD6wF52RT2JkQPAXnZFHpEHwAC29AIAAhSRDcBed8wKABSRFMBeeKULAAA9HJFYFpFSLpWfwAC2uoC/AgACkx6RXsAAtvQCAAKBkWTAXnZFHJFtFpFnLpWfwAC2uksBAAGTAMAA/UoAAMAA/Us9HJF9FpF3LpWfwAC2uoC/AgAClB6Rg8AAtvQCAAKCkYnAXnZsHJGSFpGMLpWfwAC2uksBAAGUAMAA/UoAAMAA/Us9HJGiFpGcLpWfwAC2uoC/AgAClR6RqMAAtvQCAAKDka7AXnaTHJG3FpGxLpWfwAC2uksBAAGVAMAA/UoAAMAA/Us9HJHHFpHBLpWfwAC2uoC/AgAClh6RzcAAtvQCAAKEkdPAXna6HJHcFpHWLpWfwAC2uksBAAGWAMAA/UoAAMAA/Us9HJHsFpHmLpWfwAC2uoC/AgAClx6R8sAAtvQCAAKFkfjAXnbhHJIBFpH7LpWfwAC2uksBAAGXAMAA/UoAAMAA/Us9HJIRFpILLpWfwAC2uoC/AgACNwUekhfAALb0AgAChpIdwF53CBySJhaSIC6Vn8AAtrpLAQABNwUAwAD9SgAAwAD9Sz0ckjYWkjAulZ/AALa6gL8CAAI3Bh6SPMAAtvQCAAKHkkLAXncwHJJLFpJFLpWfwAC2uksBAAE3BgDAAP1KAADAAP1LPRySWxaSVS6Vn8AAtrqAvwIAAjcHHpJhwAC29AIAAhSSZ8Bed1gIAByScBaSai6Vn8AAtrpLAQABNwcAwAD9SgAAwAD9SwAAXm7gAF5vmgBecGIAXnErAF5x2wBecowAXnM1AF5z3wBee8AAAAAIAgTAALasggaCD4ImBcAAbtgAYAPAALavAR+CHMAAtrcAAAAABMAAtq6CBoRuh5gGwABui8AAtqoAXQPAAP07AWADwAD8lwFqhHddA8AA/TsBYAPAAPyXwAF+VAABggYAXnxFAF5r3QBebSEAXnvpAAAAAgBefEUAAAAAAAIEwAC2yYjjggcAAAWA7AEAwAC29gAAgRABAMAAtwUAAIE5AQDAALcVAACBUAEAwAC3HwAAgWsBAMAAtykAAAvAALb3wAC3BsAAtxfAALcYwAC3IcAAtyLAALcqwAC3QcAAt1jAALeAwAC3mgAAAAAAAYIHAF581gBefNQAAAAAAF581gAAAAAAAgTAALbKAIIIAAABgNoAAMAAtlUAAAAAAAECwAC2y4IIgT2BQ4LhA8AAbtkAAAFdAcAA/kwBYAPAALZWAAABBMAAts6CCIHigegYlzjAALbKAGADwAC2VgErAQXAALbVAAAAAAQAAAMAAAAAAAAAAABgA8AAtssBPwEJAQDAAP5RAAAAAAMGwAC20IIIgZKBnYHWAQCAlgAAAAEDgaOB1gAAAAAAAABgA8AAtlYBPgJAIRyBtxaBsC6XOMAAtsrAALbOSAEAASsAwAC2WoGwgb4ASoHFARaBzC6XOMAAtsrAALbOBsAAttKCCIJKgluCoQAAVgFqgktgA8AA/eQCAAABA4JegqEAAAABAQGCZgAAIICWYAPAALZWAABcAT4CQByCgRaCei6XOMAAtsrAALbOSAEAASsAwAC2WoJ6gogAPReCjy6XOMAAtsqAgpjAXn37wAC2zgbAALbTggiCpoK3gt8AAIKMAWqCp2ADwAD95AIAAAEDgryC3wAAAAAAAABcAT4BQCEcgtMWgswulzjAALbKwAC2zkgBAAErAMAAtlqCzILaAAAAXn10AF590gBefkUAXn6WAAAAAwAAAYIIAF5+rQBefQgAXn6rAAAAAQBefq0AAAAAAAIEwAC21gCCCQAABIDaAADAANQ9AACA9QAAwAC3OQAAgSMAAMAAtlUAAIE5AADAALbuAAAAAAABAsAAtteCCYHOgd2VDwfAAG7aAAABYAHAAP3kAAFdAcAA/kwBXQPAAP07AWADwAD8lwcEwAC22oIJgkqCTwmXaMAAttYAXQPAAP5MAWADwAC2VgAEwAC224IJgp+CpgnAAG7bwAC21gBgA8AA44wABMAAttyCCYNjg3AJwABu3MAAttYAYAPAAOPoAATAALbdggmER4R0BsAAbt3AALbWAGADwAD8lwFqhGJgA8AA/JfAAX9cBMAAtt6CCYSyhMQYwABu38AAttYAYAPAAPyXAZMEwAC234IJhQ2FLQnAAG7gwAC21gBgA8AAt+0BH4UgwAC38gAAAAAEwAC24IIJhV6FbxjAAG5HwAC21gBgA8AA+tEBKgEFwAC27YIJhpeGl4cxAAAAA4afhzEAAAADAgKGpQAABJdoXQPAAP5MAWADwAC2VgCGsAAAAMAAbuFgA8AA/JcAAYbKAAAAwABuUGADwADjjAFqhtlgA8AA44zAAX9iYAPAALbXAT8ECAHAALbagADAXoAyCADAALbbgobxwF6AWAgAwAC23B6HFcAA4+wBAAGBhyDAXoBHAAkBhpfAAP36AAAAAAgGwAC24oIJheCF74X1AQKVnwAAAAEDhfWF9QAAAAAAAABgA8AA4+gABsAAtuSCCYgZiB6IOgACwABuUQAAAAEDiCiIOgAAAAEBAYg0AAAArRFgA8AA4+gAAFwABsAAtuWCCYg/iFCJBwAAVgFqiEBgA8AA/eQCAAABA4hTiQcAAAABAQGIXgAAIBJdA8AA/TsBYAPAAPyXAABcAT4ESYhqFohuLsAAbkfAALbWwAC24D0wiHkfiIPAAPw3AQABJ8AAbuIAPz0XiLcuwABu38AAttYciMYWiLcuwABu38AAttbAALbeZAEAARaIzoCIycBegUBhwAD9awDAAP29wAC23j0ciOcWiNouwABu4MAAttbAALbfgKUBAAGAiO7AXoFAAMAAt9k9HIj5LsAAbuPAALbWAAAAAMAAtukGwAC25oIJiQyJHYnfAACCjAFqiQ1gA8AA/eQCAAABA4kiid8AAAAAAAAAXAE+B0mJKxaJLy7AAG5HwAC21sAAtuBKiToAPz0XiUYuwABuR8AAttYpwAC24D0ciV0uwABu5MAAttYAAAAAwAC26j0ciXIuwABu48AAttYAAAAAwAC26UAWiZYWiYkuwABu4MAAttbAALbfgVXAAMHqiYmJnQA9HImqFomkLpdowAC21sAAttpWAQABH4mywAC2XwEAARyJuS7AAG7lwAC21gAAAADAALboAADAAP5OPRyJ1BaJzi6XaMAAttbAALbagowAAAAAwAD+TwbAALboggmJ5InuizQAAMAAbuXAALbWAAAAAQOJ+Ys0AAAAAAAAAGADwADjugE+BUmKAhyKDhaKBi7AAG7bwAC21sAAtttIAQABGooYwADjkgDAAP3xSooeARyKMxaKLBaKJS6Vn8AAtuKCj8AA43+YVwAAAADAAONpP06KS4pWAADAAG7mYAPAAOO6AR6KXMAA474BAAEWim0WimYulZ/AALbiwABu58AA434AToqFio4AAMAAbuhgA8AA45YBHIqiFoqbgIqQwF6Da4KPwADjf8AAbukAAAAAwADjd0WKtAGKvYq/AABiYAPAAPyXAZMBHIrGgorEwF6D0WMBAAEWis8WisgulZ/AALbiYcAA/WsAwAD9xQGKitfAXoPRHIrYgorXwF6D0WQBAAGUAMAA/b0+AT0ciu2BiuTAXoOdwABu6gIAAhyK+YKK98Beg9GDjQEAAWqK+2ADwAD8l4FXAMAA/b8ciw8WiwkulZ/AALbiSwEAAYKLEMBeg9EAwAD9SgDAAOOoSosfAYCLJsBeg2sGwAC26YIJi5SLmY5xAADAAG7jwAC21gAAAAEDi6GOcQAAAAAAAABcAT4ETouui78AAMAAbutgA8AA45YBHIvVFovOFovBLsAAbuDAALbWwAC234KPwAC3ysAAbukAAAAAwADjd06L64v9AADAAG7sYAPAAPyXARyMExaMDBaL/y7AAG7gwAC21sAAtt9hwAC3xoaXAQABFowkFowWLsAAbtzAALbWwAC23MAAbufAAON+AMAA/cJFjDcBjECMQgAAYmADwAD8lwGTARyMSYKMR8BehT1jAQABgYxLwF6E6ADAAP3FAYqMXsBehT0cjF+CjF7AXoU9ZAEAAZQAwAD9vT4CRYy7AYzEjMYAAJfSYAPAAPyXAZMBHIzNg4zLwF6FiWMBAAEWjN0WjM8uwABu3MAAttbAALbcYcAA/WsAwAD9xQGLjOXAXoWJHIzmg4zlwF6FiWQBAAGUAMAA/b0+AT0cjQEWjPQuwABu3MAAttbAALbcgL8CAAKDjQLAXoWJHI0YgI0HwF6ErsAAbu0CAAIcjU8cjTGCjS/AXoU9g40BAAEWjUEWjTMuwABu3MAAttbAALbcwABu58AA434AwAD9v2QBAAEcjVODjVHAXoWJg40BAAFqjVVgA8AA/JeBVwDAAP2/AMAA/b0WjWMuwABu28AAttbAALbbAMAA46cAwAD9Sz0cjbEuwABuUQEAARaNvC7AAG7cwAC21sAAttwAwAC25D0cjiUWjhguwABu4MAAttbAALbfoAcCAAKTHI5PgY49wF6E6IONAQABFo5fFo5RLsAAbtzAALbWwAC23MAAbufAAON+AMAA/b8AwADCGQbAALbqggmO/48ElHsAAMAAbuTAALbWAAAAAQOPEZR7AAAAAAAAAFwBPgw9HI+fFo+SLsAAbuDAALbWwAC231YBAAE3gIAAwAC32E6Pso/BAADAAG7uYAPAAPyXARyP0haPwy7AAG7fwAC21sAAtt5kAQABNwkAwAD9vU6P34/vAADAAG7vYAPAAPyXARyP8S7AAG7wwAC21gIAAoCP+sBeh0MWkBgWkAouwABu3MAAttbAALbcwABu58AA434AwAC260WQLAGQNZA3AABiYAPAAPyXAZMBHJA+gpA8wF6HvmMBAAEckFCBkEDAXodzgY0BAAGAkFLAXodDAMAA/b4AwAD9xQGKkGLAXoe+HJBjgpBiwF6HvmQBAAGUAMAA/b0+AT0ckHwWkG8uwABu4MAAttbAALbfVgEAAZMAwAC32EmQjxyQohaQky7AAG7fwAC21sAAtt6AlwEAAWqQpGADwAD8l8ABf1wAwAD9xz4BPTCQxh+Q0MAA/CkBAAEnwABu8QA/TpE9kUoAAMAAbvJgA8AA/JcBHJFbFpFMLsAAbt/AALbWwAC23oONAQABapFdYAPAAPyXg10AwAD9v06R0ZHYAACDYmADwAD8lwEWkecWkdouwABu4MAAttbAALbfYcAAt8Y9HJIAFpHzLsAAbuDAALbWwAC234ClAQABHpILwADjvgEAATcIAADAALfZTpIikisAAMAAbuhgA8AA45YBHJJBFpI6FpItLsAAbuDAALbWwAC234KPwAC3ysAAbukAAAAAwADjd06TDZMWAADAAG7zYAPAAPyXARyTJYKTGMBeiH2DwQEAATcgAMAA/LROkzSTPAAAwABu9GADwAD8lwEck0uCkz7AXoh9g3wBAAFqk01gA8AA/JfAAXl2AMAA/K9Jk1kck2UWk10uwABu28AAttbAALbbSAEAAWqTb2ADwADjjMABf2IAwAD98T4CPRyThYSTfMBeiQrAAG7qAwADg5OPwF6It4WTl8BeiUQWk6EuwABu28AAttbAALbbAMAA46g9HJO6hJOxwF6JCsAAbuoDAAMck8uDk8TAXoi3ZAEAAWqTzWADwAD8l4FXAMAA/b2Gk9vAXolsFpPkLsAAbtvAALbWwAC22wDAAOOoPgI9HJQKhJQBwF6JCsAAbuoDAAODlBTAXoi3hpQcwF6JbBaUJS7AAG7bwAC21sAAttsAwADjqD0clD6ElDXAXokKwABu6gMAAxyUT4OUSMBeiLdkAQABapRRYAPAAPyXgVcAwAD9vYWUX8BeiUQWlGkuwABu28AAttbAALbbAMAA46gGwAC264IJlNuU35UNAADAAG7wwAC21gAAAAEDlOeVDQAAAAICApTsAAAAwABJzGADwAD8lwCU9QAAAIOoYAPAAPyXAABgA8AA/JcBSpT7ARyVCRyVBByVAICU/MBeivZkAQABgZUCwF6LBgDAAP29gY0BAAGUAMAA/b6DfAEAARyVC4GVDMBeiwaBxgAAAADAAPy6AMAA/K8AAF6AvABegOQAXoEXAF6B9wBegu8AXoSCAF6G9wBeitAAXotpAAAACAAAAYIJAF6LlABefwEAXouSAAAAAQBei5QAAAAAAAIEwAC27gCCCgAAAAAAAAADBMAAtvCCCoERgSQGwABu9QBgA8AA/JcBaoEaYAPAAPyXwAF5dgTAALbxggqBT4FeBsAAbvYAYAPAAPyXAWqBXWADwAD8l4NdBMAAtvKCCoGRgaEGwABu9wBgA8AA/JcBaoGgYAPAAPyXgVcCBsAAtvSCCoHZgd2CBAABwABu+AAAAAEDgeKCBAAAAAICAoHnAAAAg4BgA8AA/JcAge4AAAC8r2ADwAD8lwAAYAPAAPyXAUqB9AEcgfwcgfeAgfXAXoxPZAEAAYGB+cBejF0AwAD9vYN8AQABaoH+YAPAAPyXwAF5dgDAAPyvBsAAtvWCCoJggmSC6wABwABu+QAAAAEDgmqC6wAAAAICAoJvAAAAwABJzGADwAD8lwCCeAAAAL1bYAPAAPyXAABgA8AA/JcBPgJOgoeCkAAAwABu+mADwAD8lwEcgpiBgpLAXozdg3wBAAE3HwDAAPyvSoKgARyCxByCuhyCrYCCqcBejM2DvwEAAYKCsMBejPYAwAD8s4N8AQABaoK8YAPAAPyXwAF5dgDAAPyvgQYBAAEcgtYcgsyAgsjAXozNg3wBAAFqgs5gA8AA/JfAAXl2AMAA/K+DwQEAARyC3TcggY0BAAGCgt/AXoz2AMAA/b4AwAD8tADAAPywAYIKAF6NpwBei8AAAAAAAF6MLQBejKsAXo2nAAAAAgACBMAAtvYAggsAAAGA2gAAwAC+WwAAAAAAAQLAALb3gguBfYGDg+wDwABu+wABAACCemADwAD95AFbAWABwAD95AABXQHAAP5MAV8DAAACBMAAtvqCC4Ivgj5JwABu/MAAtvYAXQPAAP07AV8DAAABMYI8XwMAAAAEwAC2+4ILgpCCoRjAAG5HwAC29gBgA8AA+tEBKgEFwAC3BAAAAAAEAAADAAAAAAAAAAAAXQPAALb3AV8DAAABPwEJAQDAAP36AAAAAAUGwAC2/YILge6B+oIlAQCb6QAAAAEDggGCJQAAAAAAAABdA8AA/TsBXwMAAAFKggQBH4IIwADBTQEBXwMAAAEWgh0uwABu/MAAtvbAALb6AAbAALb+gguCaoJzgogBALmTAAAAAQOCfIKIAAAAAAAAAGADwAD60QFKgn8BFoJ/LsAAbkfAALb2wAC2+wbAALcAgguDDoMTgzQAAIJGAAAAAQODGIM0AAAAAAAAAFwBPgE9HIMpFoMhLsAAbvzAALb2wAC2+oJGAAAAAMAA/VQGwAC3AYILgzmDPoO+AABWAAAAAQODQYO+AAAAAQEBg0QAACCb7F8DAAAAAFwBPgJJg1EWg1UuwABuR8AAtvbAALb7PgE9MINoH4NywAD8NwEAASfAAG79AD89HIOwFoOoLsAAbvzAALb2wAC2+lYBAAGAg7TAXo97AMAA/UwGwAC3AoILg8ODyIPqAACCjAAAAAEDg82D6gAAAAAAAABcAT4BPReD1i7AAG5HwAC29inAALb7AABejo0AXo7dAF6PGQBej1wAXo/aAF6QEQAAAAUAAAGCCwBekDAAXo3hAF6QLgAAAAEAXpAwAAAAAAACBMAAtwUAggwAAAOA2gAAwADFhwAAgPEAAMAA1D0AAIEMAADAALc5AAAAAAABAsAAtwaCDIG2gbyFwQPAAG7+AAABYAHAAMe1AAACBMAAtwmCDIMIgyMJmFPAALcFAGADwAC37QEfgxbAALfyAAAAAATAALcKggyDdYOGGMAAbkfAALcFAGADwAD60QEqAQXAALcUAAAAAAQAAAMAAAAAAAAAAABgA8AAtwYBPwEJAQDAAMe7AAAAAAYGwAC3DIIMgrGCv4L9AQCEOQAAAAEDgsWC/QAAAAAAAABgA8AA47oBSoLIAR6CzMAA48ADAAMWguMWgtsumFPAALcFwAC3CYKPwAC3ypMWgvYWgu4umFPAALcFwAC3CWHAALfGAAbAALcNggyDT4NYg20BALmTAAAAAQODYYNtAAAAAAAAAGADwAD60QFKg2QBFoNkLsAAbkfAALcFwAC3CgbAALcPggyD74P0hBUAAIJGAAAAAQOD+YQVAAAAAAAAAFwBPgE9HIQKFoQCLphTwAC3BcAAtwmCRgAAAADAAMIQBsAAtxCCDIQahB+EqgAAVgAAAAEDhCKEqgAAAAEBAYQtAAAghDldA8AA/TsBYAPAAPyXAABcAT4CSYQ6FoQ+LsAAbkfAALcFwAC3Cj4BPTCEUR+EW8AA/DcBAAEnwABu/QA/PRyEmRaEkS6YU8AAtwXAALcJgKUBAAGAhKDAXpIHAMAAt9kGwAC3EYIMhK+EtIWTAADAAG5JAAAAAQOEvIWTAAAABAQEhMcAAACtEV0DwAD9OwFgA8AA/JcAhNIAAABqYAPAAPyXAITdAAAAgpBgA8AA/JcAhOcAAADAAG5KYAPAAPrRAABcAT4DSYT1FoT5LsAAbkfAALcFwAC3Cj4BPTCFDB+FFsAA/DcBAAEnwABu/QA/PRyFVBaFTC6YU8AAtwXAALcJgKUDAAOAhVvAXpKQgYViwF6SpYKFacBekrIAwAC32UmFc4OFd8BeksA9F4V/LsAAbkfAALcFKcAAtwo/BsAAtxKCDIWYhZ2FvwAAgowAAAABA4Wihb8AAAAAAAAAXAE+AT0XhasuwABuR8AAtwUpwAC3CgAAXpEGAF6RawBekacAXpHoAF6SbgBek00AXpOEAAAABgAAAYIMAF6TpwBekHoAXpOlAAAAAQBek6cAAAAAAAIEwAC3FcAAbv+CDQAABYDwAADAAMWHAACBCAAAwAC3OgAAgSMAAMAAt1IAAIE/AQDAALc6AAEAAcAAbwCBagEAwAC3UgABAAHAAG8BAsAAt0HAALdYAAABAsAAtxiCDYK8gsKDVQPAAG8CAAABXQHAAMfzAl0DwAD9OwFgA8AA/JdgA8AA/n4AAAABBcAAtx6CDYNBg0eDUwGAtcAAtxUAA4NRg1MAAAAAAAAAYAPAALcYAT8BCQGDR8AAx/0AAAAAAgbAALcagg2C8IL/gxQBAIjiAAAAAQODB4MUAAAAAAAAAGADwAC3QQFKgwoBaoMKYAPAALdBwAF/bgbAALcbgg2DGIMngzwBAIH4AAAAAQODL4M8AAAAAAAAAGADwAC3WAFKgzIBaoMyYAPAALdYwAF/dQAAXpSGAF6UvwBelPgAAAACAQTAALcXgg2BxoHeBsAAbwMAYAPAALcYAWqB0mADwAC3GMABeWMAAYINAF6VMABelBwAXpUJAAAAAQBelTAAAAAAAAIEwAC3H8AAbwSCDgAABYD0AADAAMWHAACBDAAAwAC3eQAAgSsAAMAAt5EAAIFLAQDAALd5AAEAAcAAbwWBfgEAwAC3kQABAAHAAG8GAsAAt4DAALeaAAABAsAAtyKCDoVKhVCF+wPAAG8HAAABXQHAAMfzAl0DwAD9OwFgA8AA/JdgA8AA/n4AAAABBcAAtyiCDoXjhemF+QGAtcAAtx8AA4X3hfkAAAAAAAAAYAPAALciAT8BCQGF6cAAx/0AAAAAAgbAALckgg6FgoWVha4BAIjiAAAAAQOFnYWuAAAAAAAAAGADwAC3gAFKhaABaoWgYAPAALeAwAF/fAbAALclgg6FsoXFhd4BAIH4AAAAAQOFzYXeAAAAAAAAAGADwAC3mgFKhdABaoXQYAPAALeawAF/gwAAXpYPAF6WSABeloEAAAACAQTAALchgg6B5oIGBpbMAGADwAC3IgFqgfZgA8AAtyLAAX+KAAGCDgBelrcAXpWlAF6WkgAAAAEAXpa3AAAAAAACBMAAtykAgg8AAAGA2gAAwADFhwAAAAAAAQLAALcqgg+BcoF4hLcDwABvCAAAAWABwADJqAAAAgTAALctgg+CCYIlCZhTwAC3KQBgA8AA/sgBH4IXwAD+5wAAAAAEwAC3LoIPgneCiBjAAG5HwAC3KQBgA8AA+tEBKgEFwAC3OAAAAAAEAAADAAAAAAAAAAAAYAPAALcqAT8BCQEAwADJqgAAAAAGBsAAtzCCD4HYgeOB/wEAg/EAAAABA4Hqgf8AAAAAAAAAYAPAAP5+AUqB7QEcgfUWge0umFPAALcpwAC3LSMAAAAAwAD+4QbAALcxgg+CUYJagm8BALmTAAAAAQOCY4JvAAAAAAAAAGADwAD60QFKgmYBFoJmLsAAbkfAALcpwAC3LgbAALczgg+C44LogwkAAIJGAAAAAQOC7YMJAAAAAAAAAFwBPgE9HIL+FoL2LphTwAC3KcAAty2CRgAAAADAAP7gBsAAtzSCD4MOgxODmgAAVgAAAAEDgxaDmgAAAAEBAYMeAAAgrRFgA8AA/n4AAFwBPgJJgysWgy8uwABuR8AAtynAALcuPgE9MINCH4NMwAD8NwEAASfAAG79AD89HIOKFoOCLphTwAC3KcAAty2CjgEAAYCDkMBemFsAwAD+3AbAALc1gg+Dn4OkhIkAAMAAbkkAAAABA4OshIkAAAAEBASDtAAAAK0RYAPAAP5+AIO/AAAAamADwAD8lwCDygAAAIKQYAPAAPyXAIPUAAAAwABuSmADwAD60QAAXAE+A0mD4haD5i7AAG5HwAC3KcAAty4+AT0wg/kfhAPAAPw3AQABJ8AAbv0APz0chEEWhDkumFPAALcpwAC3LYKOAQABHIRNgIRHwF6Y3YC+AgACgYRXwF6Y64KEXsBemPgAwAD+lADAAP7cSYRpg4RtwF6ZBj0XhHUuwABuR8AAtykpwAC3Lj8GwAC3NoIPhI6Ek4S1AACCjAAAAAEDhJiEtQAAAAAAAABcAT4BPReEoS7AAG5HwAC3KSnAALcuAABel3kAXpe/AF6X+wBemDwAXpi7AF6ZoABemdcAAAAGAAABgg8AXpn6AF6W7QBemfgAAAABAF6Z+gAAAAAAAgTAALc5sWGCEAAAAYE5AQDAALe7AAANwAC37cAAt/PAALf5wAC3/8AAuAXAALgLwAC4EcAAuBfAALgdwAC4I8AAuCnAALgvwAC4OwAAAAAAAYIQAF6aZwBemmUAAAAAAF6aZwAAAAAAAgTAALc6wABvCYIRAAADgPgAAMAAxYcAAIEPAADAANQ9AACBKgAApukAAAAAAAICwAC3QYIRgl2CY4NZA8AAbwoAAAFdAcAAyBICXQPAAP07AWADwAD8l2ADwAD+fgAAAAEFwAC3R4IRgpeCnYKrAYC1wAC3OgADgqmCqwAAAAAAAABgA8AAt0EBPwEJAYKdwADIGwAAAAACBsAAt0OCEYKwgreC8wAAiOMAAAABA4K+gvMAAAABAQGCyQAAIIQ5XQPAAP07AWADwAD8lwAAYAPAAP5+AUqC0wEegtPAALc/AwADgILcwF6bOJMWguyAgubAXps4YcAA/WsABsAAt0SCEYL4gwuDVwAAtOsAAAABA4Mhg1cAAAABAQGDLwAAIIRAXQPAAP5MAWADwAD+fgAAYAPAAMeqAUqDPgEfg0LAALdRAQABgINSwF6bmwAAAF6bGABem3sAXpvOAAAAAgLAALdIghGDlIOahZkDwABvCwAAAWABwADHtQAAAQTAALdLghGEJ4QsCZdowAC3OgBdA8AA/kwBYAPAAP5+AAEFwAC3UYIRhDGEMYRMAAAAA4RAhEwAAAABAQGERgAABJdoXQPAAP5MAWADwAD+fgAAYAPAALdIAT8CCAHAALdLgADAXpw6CQGEMcAAx7sAAAAAAwbAALdNghGEUYRWhKAAAFYAAAABA4RZhKAAAAABAQGEZAAAIK0RXQPAAP07AWADwAD8lwAAXAE+AT0chHcWhHEul2jAALc6wAC3S1YBAAEehHvAALc/AwADgISEwF6ckZMWhJSAhI7AXpyRYcAA/WsAAMAA/k4GwAC3ToIRhKWEqoVuAADAAG5JAAAAAQOEsoVuAAAABAQEhL0AAACtEV0DwAD9OwFgA8AA/JcAhMgAAABqYAPAAPyXAITTAAAAgpBgA8AA/JcAhN0AAADAAG5KYAPAAPrRAABcAT4DPR6E9sAA+9gDAAOBhQbAXp0fgoUNwF6dLBaFGICFEsBenQphwAD9awA9HIUrFoUlLpdowAC3OsAAt0tWAQABHoUvwAC3PwMAA4CFOMBenQqBhT/AXp0fgoVGwF6dLAAAwAD+TkmFUYOFVcBenTo9HIVjFoVdLpdowAC3OsAAt0uCjAAAAADAAP5PPwbAALdPghGFc4V4hZcAAIKMAAAAAQOFfYWXAAAAAAAAAFwBPgE9HIWMFoWGLpdowAC3OsAAt0uCjAAAAADAAP5PAABenHIAXpzoAF6d2gBenhsAAAADAQTAALc8ghGBg4GkBsAAbwAAYAPAALdBAWqBlmADwAC3QcABf24CBsAAtz+CEYWchaOK3AABwABvDMAAtzoAAAABA4WritwAAAADAwOFtgAAAIQ5XQPAAP07AWADwAD8lwCFwQAAAGpgA8AA/JcAhcwAAACCkGADwAD8lwAAYAPAAP5+AT4HToaOhpUAAIKPYAPAAOO6AR6Gm8AA474BAAEchrMchqqChqbAXp6fgY0BAAGBhqzAXp6SAMAA/b6DjQEAAZUAwAD9vwBOhr+GywAAwABvDWADwAD8lwGTTod5h4AAAMAAbw5gA8AA/JcBk0WHhwGHkIeSAABiYAPAAPyXAYGHlMBenpIBHIedhoebwF6fJWMBAAGCh5/AXp6fAMAA/cUBjoekwF6fJRyHpYaHpMBenyVkAQABlADAAP29PgROh7OHuAAAhwFgA8AA/JcBHIe/gIe6wF6efUsBAAGGh8DAXp8lAMAA/Uo9jYfIwF6fDxyHz4WHyMBenw+BBgEAAYeH0sBen3QAwAD8sD0ciL6DiLjAXp64gL8CAAI1AAAAAQBgA8AA/JcBhIi/wF6e/DUAAAABAGADwAD8lwGMiL/AXp78HIjKFADAXp/RCABkAQABlADAAP29FADAXp/RCAAeiNDAALdAAQABHIjwHIjoh4jjwF6fdIN8AQABN4DwAMAA/K+DwQEAAZcAwAD8tAAAwAD9Sz0ciQGDiPvAXp64gL8CAAI1AAAAAQBgA8AA/JcBhIkCwF6e/DUAAAABAGADwAD8lwGMiQLAXp78HIkNFADAXqBbCABkAQABlADAAP29FADAXqBbCAAeiRPAALdAAQABHIkqh4klwF6fdIN8AQABNw8AwAD8rwAAwAD9S0mJOiIciUWFiT7AXp8PgW0BAAGTAMAA/cgAHIlUhYlNwF6fD4FrAQABN4D/AMAA/cZKiVwBHolnwAD+pgEAAYOJfMBenrgAP0WJywGJ1InWAABiYAPAAPyXAYGJ2MBenpIBHInhhonfwF6hEWMBAAGCiePAXp6fAMAA/cUBjonowF6hERyJ6YaJ6MBeoRFkAQABlADAAP29QT4DTon3ifwAAIcBYAPAAPyXARyKA4CJ/sBenn1LAQABhooEwF6hEQDAAP1KSYoMIhyKFYeKEMBeoWGBbQEAAZMAwAD9yAAciiKHih3AXqFhgWsBAAE3gP8AwAD9xkKKKwA/PTCKOR+KQ8AA/HIDAAMkiqMFJ8AAbw8jHIpxh4pswF6hYWMBAAGTAMAA/cUngY0nAAFgA8AA/n4nrQMcio8ciomHioTAXqFhl/oAAAAAwAD8u4QOAQABNxAAwAD8xSeBaoCKrcBenn2GirzAXqERAD0wiscnwABI4wbAALdAghGLO4s/i4gAAcAAbxDAALc6AAAAAQOLUIuIAAAAAQEBi1UAAACtbWADwAD8lwAAYAPAAPyXAUqLXwEjHItlgItfwF6iX2MBAAE3CgDAAP3FHItygItswF6iX2QBAAFqi3RgA8AA/Je2SgDAAP29HIuEHIt/gIt5wF6iX2QBAAFqi4FgA8AA/JfAAJsCAMAA/b2BjQEAATcKAMAA/b4BYAPAAPyXAYIRAF6i4wBemq4AXpvfAF6eMAAAAAIAXp5XAF6iOQBeouMAAAACAAIEwAC3UsAAbxGCEgAAA4D4AADAAMWHAACBDwAAwADUPQAAgSoAAMAAuEQAAAAAAAMCwAC3WIISgsuC0YTAA8AAbxIAAAFdAcAAyBICYAPAAP5+XQPAAP07AWADwAD8lwAAAAEFwAC3XoISgwWDC4MZAYC1wAC3UgADgxeDGQAAAAAAAABgA8AAt1gBPwEJAYMLwADIGwAAAAACBsAAt1qCEoMegyiEVQAAiOMAAAABA4MvhFUAAAABAQGDNwAAIIPxYAPAAP5+AABdA8AA/TsBYAPAAPyXAT4ESYNFIRaDWBaDUYCDSsBeo8ZhwAD+gsAAbxPAAPzLPgE9MINoH4NywAD8cgMAAyfAAG8UgIO0wF6jxhaDw4CDvMBeo8ZhwAD+ggA/ToPbg+EAAIQ5YAPAAOO6AR6D58AA474BAAEcg/8Wg/iAg/HAXqPGYcAA/oKGlwEAAZUAwAD9wgA9HoQKwAC3VwUABRaEGYCEEsBeo8af88AA/oaTFoQugIQnwF6jxmHAAP6CgYQ2wF6kMZMASoRFAYGETMBepDEGwAC3W4IShFqEb4S+AAC06wAAAAEDhIWEvgAAAAEBAYSWAAAghEBdA8AA/kwBXQPAAP07AWADwAD8lwAAYAPAAMl1AUqEpQEfhKnAALdrAQABgIS5wF6kxwAAAF6jpgBepKcAXqUBAAAAAgLAALdfghKE+4UBi0oDwABvFQAAAWABwADJqAAAAgTAALdighKFk4WYCZdowAC3UgBdA8AA/kwBXQPAAP07AWADwAD8lwAEwAC3Y4IShoyGlhjAAG8WwAC3UgBgA8AA/JcBKwEFwAC3a4IShpuGm4a2AAAAA4aqhrYAAAABAQGGsAAABJdoXQPAAP5MAV0DwAD9OwFgA8AA/JcAAGADwAC3XwE/AggBwAC3YoAAwF6lkQkBhpvAAMmqAAAAAAQGwAC3ZYIShruGwImUAADAAG5JAAAAAQOGyImUAAAABAQEhtAAAACD8WADwAD+fgCG3AAAAGpgA8AA/JcAhucAAACCkGADwAD8lwCG8QAAAMAAbkpgA8AA+tEAAFwBPgk9HocKwAD72AMAA4GHGsBepgCChyHAXqYNFoctgIcmwF6l8mHAAP6CAEmHOxyHRYGHP8BepgBIAQABgodIwF6mDQDAAP27PgJJh1WDh1nAXqYbPRyHYS7AAG8XwAC3UgIAAoCHaMBepfKCh3DAXqYNAMAAt2k/Sod8AD9Oh5OHnQAAn/NdA8AA/TsBYAPAAPyXARaHpoCHn8BepfKf88AA/oZOh78AAACEOWADwADjugBOh84AAADAAG8YYAPAAPyXAEmH3hyH7RaH4i7AAG8WwAC3UsAAt2NIAQABKwDAAP27PgI9jYf+wF6m0x6ICsAA474BAAEciCIciBmCiBXAXqYNgY0BAAGBiBvAXqYAAMAA/b6GlwEAAZUAwAD9wgA9jogvwF6m4pM+BU6IVohfAADAAG8ZYAPAAPyXARyIcxyIbhyIZoKIYsBepg2BjQEAAYGIaMBepgAAwAD9voGNAQABlADAAP2+hpcBAAGVAMAA/cI9jYh/wF6m0x6Ii8AA474BAAEciJeUZAEAAYeImcBep1wAwAD9vQA9HIivhYiqwF6m04C/AgACkxyIwBaItS7AAG8WwAC3UsAAt2NkAQABHojCwAC4RgIAAoSI08BepqyBiN7AXqYAAADAAP29AMAA/Us9iYjswF6mAByI8YGI7MBepgBkAQABlADAAP29PY6I+8BepuKUPReJFi7AAG8WwAC3Uh6JI8AAt1cFAAWEiSvAXqasgYk2wF6mAIKJPcBepg2FiULAXqbTholJwF6m4gDAALdjPRyJYRaJWy6XaMAAt1LAALdiVgEAAYWJZcBeptMAwAD+TkmJcYOJdcBephs9HIl9LsAAbxfAALdSAgACgImEwF6l8oKJjMBepg0AwAC3aT8GwAC3ZoISiZmJrInzAADAAG8aAAAAAQOJtonzAAAAAQEBibwAAACHImADwAD60QAAYAPAAMeqAUqJ1QEfidnAALd4AQABFontLpdowAC3UsAAt2IABsAAt2eCEon4if2KEAAAgowAAAABA4oCihAAAAAAAAAAXAFKiggBHIoILsAAbxfAALdSAAAAAMAAt2kGwAC3aYISinyKgYtIAADAAG8XwAC3UgAAAAEDioeLSAAAAAIAAoqQAAAAg/FgA8AA/n4BagBgA8AA/aF5ipwAAAAnYAPAAPyXAWoAYAPAAP2heQBcAT4CSYqqIRyKuRaKri7AAG8WwAC3UsAAt2NIAQABKwDAAP27PgE9MIrKH4rUwAD8cgMAAyfAAG8bgIscwF6pgIGLJMBeqZcAPz0ciz0Wizcul2jAALdSwAC3YoKMAAAAAMAA/k8AAF6l0ABeqMoAXqkfAF6pWgBeqhQAAAAEAsAAt2yCEouWi5yRpgPAAG8cAAABYAHAAMe1AAACBMAAt2+CEowwjDUJl2jAALdSAF0DwAD+TAFdA8AA/TsBYAPAAPyXAATAALdwghKNKY0zGMAAbxbAALdSAGADwAD8lwErAQXAALd4ghKNOI04jVcAAAADjUuNVwAAAAEBAY1RAAAEl2hdA8AA/kwBXQPAAP07AWADwAD8lwAAYAPAALdsAT8CCAHAALdvgADAXqqsCQGNOMAAx7sAAAAABAbAALdyghKNXI1hjaAAAFYAAAABA41kjaAAAAABAQGNbwAAIK0RXQPAAP07AWADwAD8lwAAXAFKjXkBHI15LsAAbkkEAASAjYLAXqsKkxaNkoCNjMBeqwphwAD9ayoAwAC3cwbAALdzghKNpY2qkE8AAMAAbkkAAAABA42ykE8AAAAEBASNvQAAAK0RXQPAAP07AWADwAD8lwCNyAAAAGpgA8AA/JcAjdMAAACCkGADwAD8lwCN3QAAAMAAbkpgA8AA+tEAAFwBPgg9Ho32wAD72AMAA4GOBsBeq4WCjg3AXquSFo4YgI4SwF6rcGHAAP1rAEmOJhyOMIGOKsBeq4VIAQABgo4zwF6rkgDAAP27PgJJjkCDjkTAXqugPRyOTC7AAG8XwAC3UgIAAoCOU8Beq3CCjlrAXquSAMAAt3Y/So5mAD9OjoMAAACEOWADwADjugBOjpIAAADAAG8YYAPAAPyXAEmOohyOsRaOpi7AAG8WwAC3UsAAt3BIAQABKwDAAP27PgI9jI7CwF6sMR6OzsAA474BAAEcjuYcjt2CjtnAXquSgY0BAAGBjt/AXquFAMAA/b6GlwEAAZUAwAD9wgA9jY7zwF6sQJM+BU6PGo8jAADAAG8ZYAPAAPyXARyPNxyPMhyPKoKPJsBeq5KBjQEAAYGPLMBeq4UAwAD9voGNAQABlADAAP2+hpcBAAGVAMAA/cI9jI9DwF6sMR6PT8AA474BAAEcj1uUZAEAAYaPXcBerLoAwAD9vQA9HI9zhI9uwF6sMYC/AgACkxyPhBaPeS7AAG8WwAC3UsAAt3BkAQABHo+GwAC4RgIAAoCPl8Beq3CBj57AXquFAADAAP29AMAA/Us9iY+swF6rhRyPsYGPrMBeq4VkAQABlADAAP29PY2Pu8BerECUPReP1i7AAG8WwAC3Uh6P48AAt1cFAAWAj+vAXqtwgY/ywF6rhYKP+cBeq5KEj/7AXqwxhZAFwF6sQADAALdwPRyQHRaQFy6XaMAAt1LAALdvVgEAAYSQIcBerDEAwAD+TkmQLYOQMcBeq6A9HJA5LsAAbxfAALdSAgACgJBAwF6rcIKQR8Beq5IAwAC3dj8GwAC3dIISkFSQWZBsAACCjAAAAAEDkF6QbAAAAAAAAABcAUqQZAEckGQuwABvF8AAt1IAAAAAwAC3dgbAALd2ghKQ15DckaQAAMAAbxfAALdSAAAAAQOQ4pGkAAAAAgACkO4AAACtEV0DwAD9OwFgA8AA/JcBagBgA8AA/aF5kPkAAAAnYAPAAPyXAWoAYAPAAP2heQBcAT4CSZEHIRyRFhaRCy7AAG8WwAC3UsAAt3BIAQABKwDAAP27PgE9MJEnH5ExwAD8cgMAAyfAAG8bgJF5wF6uiYGRgMBerqcAPz0ckZkWkZMul2jAALdSwAC3b4KMAAAAAMAA/k8AAF6q6wBeq04AXq4oAF6uYwBeryQAAAAEAQTAALdUghKBdYGWBsAAbwEAYAPAALdYAWqBiGADwAC3WMABf3UBBsAAt1eCEpL8kwCU/AABwABvHcAAt1IAAAABA5MHlPwAAAAFBQWTEgAAAJ/zXQPAAP07AWADwAD8lwCTIQAAAMAAbx5gA8AA/JcAkzIAAADAAG8fYAPAAPyXAJNLAAAAwABfeV0DwAD9OwFgA8AA/JcAk1wAAADAAG8gYAPAAPyXAABgA8AA/JcBPgROk3aThwAAwABvIWADwAD8lwGEk4nAXq/WRZOdAZOmk6gAAGJgA8AA/JcBgZOqwF6vnwEck7mGk7fAXrANYwEAARyTxYKTu8Ber6+BjQEAAZQAwAD9vgDAAP3FAY6TysBesA0ck8yGk8rAXrANZAEAAZUAwAD9vT4DTpPck+cAAMAAbyJgA8AA/JcBHpPpwAC4RgIAAoCT+sBer4qGlAXAXrANAE6UEZQdAADAAG8jYAPAAPyXAR6UH8AAuEYCAAKAlDDAXq+KHJQ9hpQ7wF6wDWQBAAGUAMAA/b0APRyUUoOUR8Ber7+AvwIAAjUAAAABAGADwAD8lwGFlFPAXq/xNQAAAAEAYAPAAPyXAY2UU8Ber/EclGMUAMBesN0JAGQBAAGUAMAA/b0UAMBesN0JAByUeRyUbDcQg40BAAGHlG7AXrBqAMAA/b9kAQABFJR7wF6wlQgAAMAA/b0AwAD9S0mUjxaUrRyUnoKUlMBer6+BjQEAAYGUoMBer58AwAD9vsAAbxPAAPzLSpS1ASs/SpTEARyUzjcQg40BAAEelNDAALhGAgACgJThwF6vihyU9oKU7MBer6+BjQEAAZQAwAD9vgAAwAD9vwGCEgBesboAXqM8AF6lEgBeqi0AXq89AAAAAwBer2QAXrG6AAAAAQACBMAAt3nAAG8kghMAAAKA/AAAwADFhwAAgRQAAKbpAAAAAAACAsAAt4CCE4M4gz6EQAPAAG8lAAABXQHAAMgSAl0DwAD9OwFgA8AA/JdgA8AA/n4AAAABBcAAt4aCE4N2g3yDjgGAtcAAt3kAA4OMg44AAAAAAAAAYAPAALeAAT8BCQGDfMAAyBsAAAAAAgbAALeCghODk4Oag9YAAIjjAAAAAQODoYPWAAAAAQEBg6wAACCEOV0DwAD9OwFgA8AA/JcAAGADwAD+fgFKg7YBHoO2wAC3fgMAA4CDv8BespGTFoPPgIPJwF6ykWHAAP1rAAbAALeDghOD24PuhD4AALTrAAAAAQOEBIQ+AAAAAQEBhBIAACCEQF0DwAD+TAFgA8AA/n4AAGADwADHqgFKhCEBH4QlwAC3kAEAAYCEOcBesvQAAABesnEAXrLUAF6zJwAAAAICwAC3h4IThH+EhYaMA8AAbyYAAAFgAcAAx7UAAAEEwAC3ioIThRaFGwmXaMAAt3kAXQPAAP5MAWADwAD+fgABBcAAt5CCE4UghSCFPwAAAAOFM4U/AAAAAQEBhTkAAASXaF0DwAD+TAFgA8AA/n4AAGADwAC3hwE/AggBwAC3ioAAwF6zkwkBhSDAAMe7AAAAAAMGwAC3jIIThUSFSYWTAABWAAAAAQOFTIWTAAAAAQEBhVcAACCtEV0DwAD9OwFgA8AA/JcAAFwBPgE9HIVqFoVkLpdowAC3ecAAt4pWAQABHoVuwAC3fgMAA4CFd8Bes+qTFoWHgIWBwF6z6mHAAP1rAADAAP5OBsAAt42CE4WYhZ2GYQAAwABuSQAAAAEDhaWGYQAAAAQEBIWwAAAArRFdA8AA/TsBYAPAAPyXAIW7AAAAamADwAD8lwCFxgAAAIKQYAPAAPyXAIXQAAAAwABuSmADwAD60QAAXAE+Az0ehenAAPvYAwADgYX5wF60eIKGAMBetIUWhguAhgXAXrRjYcAA/WsAPRyGHhaGGC6XaMAAt3nAALeKVgEAAR6GIsAAt34DAAOAhivAXrRjgYYywF60eIKGOcBetIUAAMAA/k5JhkSDhkjAXrSTPRyGVhaGUC6XaMAAt3nAALeKgowAAAAAwAD+Tz8GwAC3joIThmaGa4aKAACCjAAAAAEDhnCGigAAAAAAAABcAT4BPRyGfxaGeS6XaMAAt3nAALeKgowAAAAAwAD+TwAAXrPLAF60QQBetTMAXrV0AAAAAwEEwAC3e4ITgXGBmgbAAG8FAGADwAC3gAFqgYhgA8AAt4DAAX98AgbAALd+ghOGj4aWjXkAAcAAbwzAALd5AAAAAQOGno15AAAAAwMDhqkAAACEOV0DwAD9OwFgA8AA/JcAhrQAAABqYAPAAPyXAIa/AAAAgpBgA8AA/JcAAGADwAD+fgE+Bk6GzIbTAACCj2ADwAD+yAEfhtnAAP7nAAAAAE6HkoeZAADAAG8OYAPAAPyXAZNFh6ABh6mHqwAAYmADwAD8lwGBh63AXrXrARyHtoWHtMBetkJjAQABgoe4wF61+ADAAP3FAY2HvcBetkIch76Fh73AXrZCZAEAAZQAwAD9vUE+B06HzIfRAACHAWADwAD8lwEch9iAh9PAXrXWSwEAAYWH2cBetkIAwAD9Sj2Mh+HAXrYsHIfohIfhwF62LIEGAQABhofrwF62kgDAAPywTokjiSoAAMAASglgA8AA/JcBHIkxNyCBBgEAAYaJM8BetpIAwAD8sEmJPSIiIiIiIhyJSYeJQsBett+BbQEAAWqJTGADwAD8l8AAmwIAwAD9yAAciVmHiVLAXrbfgWsBAAFqiVxgA8AA/JfAAJtNAMAA/cYBIhyJcYaJbMBetpKBbQEAAWqJdGADwAD8l7ZKAMAA/cgAHIl/hol6wF62koFrAQABaomCYAPAAPyXwACOPADAAP3GARyJloaJkcBetpJIAQABaomZYAPAAPyXwABDzQDAAP27ARyJr4aJqsBetpJIAQABaomyYAPAAPyXstsAwAD9uwEciceGicLAXraSSAEAAWqJymADwAD8l8AAmvwAwAD9uwEcieaGieHAXraSSAEAAWqJ6WADwAD8l8AAm1kAwAD9uz4CPRyKOIOKMcBethGEFgEAAYaKRsBetpIAwAD+3UKKUwA/PRyKb4OKaMBethGEFgEAAWqKfWADwAD8l8AAYfYAwAD+3T0ci2+Di2jAXrYRhBYBAAEei33AALd/AQABHIudHIuVhouQwF62koN8AQABN4DwAMAA/K+DwQEAAZcAwAD8tAAAwAD+3T0ci7CDi6nAXrYRhBYBAAEei77AALd/AQABHIvVhovQwF62koN8AQABNw8AwAD8rwAAwAD+3UmL5iIci/GEi+rAXrYsgW0BAAGTAMAA/cgAHIwAhIv5wF62LIFrAQABN4D/AMAA/cZKjAgBHIwWg4wPwF62ESMAAAAAwAD+4T9FjGgBjHGMcwAAYmADwAD8lwGBjHXAXrXrARyMfoWMfMBeuSRjAQABgoyAwF61+ADAAP3FAY2MhcBeuSQcjIaFjIXAXrkkZAEAAZQAwAD9vUE+A06MlIyZAACHAWADwAD8lwEcjKCAjJvAXrXWSwEAAYWMocBeuSQAwAD9SkmMqSIcjLKGjK3AXrl0gW0BAAGTAMAA/cgAHIy/hoy6wF65dIFrAQABN4D/AMAA/cZCjMgAPz0wjNYfjODAAPxyAwADJI1ABSfAAG8PIxyNDoaNCcBeuXRjAQABkwDAAP3FJ4GNJwABYAPAAP5+J60DHI0sHI0mho0hwF65dJf6AAAAAMAA/LuEDgEAATcQAMAA/MUngWqAjUrAXrXWhY1ZwF65JAA9MI1kJ8AASOMGwAC3f4ITjdiN3I4lAAHAAG8QwAC3eQAAAAEDje2OJQAAAAEBAY3yAAAArW1gA8AA/JcAAGADwAD8lwFKjfwBIxyOAoCN/MBeunJjAQABNwoAwAD9xRyOD4COCcBeunJkAQABao4RYAPAAPyXtkoAwAD9vRyOIRyOHICOFsBeunJkAQABao4eYAPAAPyXwABfvADAAP29gY0BAAE3CgDAAP2+AWADwAD8lwGCEwBeuvYAXrIHAF6zOABetYkAAAACAF61sABeukwAXrr2AAAAAgACBMAAt5HAAG8nghQAAASA/AAAwADFhwAAgRQAAKbpAACBOgAAwAC3OQAAgWgAAMAAuEQAAAAAAAMCwAC3moIUg82D04X2A8AAbygAAAFdAcAAyBICYAPAAP5+XQPAAP07AWADwAD8lwAAAAEFwAC3oIIUhAuEEYQjAYC1wAC3kQADhCGEIwAAAAAAAABgA8AAt5oBPwEJAYQRwADIGwAAAAACBsAAt5yCFIQohDKFhwAAiOMAAAABA4Q5hYcAAAABAQGEQQAAIIPxYAPAAP5+AABdA8AA/TsBYAPAAPyXAT4EToRThFoAAIKPYAPAALftAR+EYMAAt/IAAAAAToR3hIEAAMAAbylgA8AA/JcBHoSDwAC3mAQABBaEkoCEi8Beu+Gf88AA/oaTFoSngISgwF674WHAAP6CgYSvwF68AQBJhL0hHITLgoTBwF68HEgBAAErAMAA/bs+AT0whNwfhObAAPxyAwADJ8AAbxuAhS7AXrvhFoU9gIU2wF674WHAAP6CAD9KhVEBHIVmFoVfgYVYwF68AYKPwAC3yphXAgACkxaFfIGFdcBevAFhwAC3xgDAAONpBsAAt52CFIWMhaGF9AAAtOsAAAABA4W3hfQAAAABAQGFyAAAIIRAXQPAAP5MAV0DwAD9OwFgA8AA/JcAAGADwADJdQFKhdcBH4XbwAC3rQEAAYCF78BevPUAAABeu8EAXrzVAF69LwAAAAICwAC3oYIUhjWGO419A8AAbyoAAAFgAcAAyagAAAIEwAC3pIIUhtGG1gmXaMAAt5EAXQPAAP5MAV0DwAD9OwFgA8AA/JcABMAAt6WCFIiOiJgYwABvFsAAt5EAYAPAAPyXASsBBcAAt62CFIidiJ2IvAAAAAOIsIi8AAAAAQEBiLYAAASXaF0DwAD+TAFdA8AA/TsBYAPAAPyXAABgA8AAt6EBPwIIAcAAt6SAAMBevb8JAYidwADJqgAAAAAEBsAAt6eCFIjBiMaLwwAAwABuSQAAAAEDiM6LwwAAAAQEBIjWAAAAg/FgA8AA/n4AiOIAAABqYAPAAPyXAIjtAAAAgpBgA8AA/JcAiPcAAADAAG5KYAPAAPrRAABcAT4JPR6JEMAA+9gDAAOBiSDAXr4ugoknwF6+OxaJM4CJLMBeviBhwAD+ggBJiUEciUuBiUXAXr4uSAEAAYKJTsBevjsAwAD9uz4CSYlbg4lfwF6+ST0ciWcuwABvF8AAt5ECAAKAiW7AXr4ggol2wF6+OwDAALerP0qJggA/TomZiaAAAIKPYAPAALftAR+JpsAAt/IAAAAATom9iccAAJ/zXQPAAP07AWADwAD8lwEWidCAicnAXr4gn/PAAP6GSYnfHInuFonjLsAAbxbAALeRwAC3pUgBAAFqifFgA8AA/JeBngDAAP27PgM9F4oHLsAAbxbAALeRHIoXNxCDjQEAAR6KGcAAuEYCAAKFiirAXr71gYo1wF6+LgAAwAD9v8AAt6U9iYpDwF6+LhyKSIGKQ8Bevi5kAQABlADAAP29SYpTHIpdgYpXwF6+LkgBAAGCimDAXr47AMAA/bs+AkmKb4OKc8Bevkk9HIp7LsAAbxfAALeRAgACgIqCwF6+IIKKisBevjsAwAC3qz9KipgAPz9JirMhHIrCFoq3LsAAbxbAALeRwAC3pUgBAAErAMAA/bs+Aj0citqEitPAXr7aVgEAARyK6RaK3i7AAG8WwAC3kcAAt6VkAQABHorrwAC4RgIAAoWK/MBevvWBiwfAXr4uAADAAP29AMAAt9g9iYsWwF6+LhyLG4GLFsBevi5kAQABlADAAP29Pz0XiyouwABvFsAAt5EeizfAALeYBAAEhYs/wF6+9YGLSsBevi6Ci1HAXr47hItWwF6+2gDAALelPRyLahaLZC6XaMAAt5HAALekVgEAARyLfBaLdYSLbsBevtqCj8AAt8qYVwIAApMWi5KEi4vAXr7aYcAAt8YAwADjaQDAAP5OSYugg4ukwF6+ST0ci6wuwABvF8AAt5ECAAKAi7PAXr4ggou7wF6+OwDAALerPwbAALeoghSLyIvbjCYAAMAAbxoAAAABA4vljCYAAAABAQGL6wAAAIciYAPAAPrRAABgA8AAx6oBSowEAR+MCMAAt7oBAAEWjCAul2jAALeRwAC3pAAGwAC3qYIUjCuMMIxDAACCjAAAAAEDjDWMQwAAAAAAAABcAUqMOwEcjDsuwABvF8AAt5EAAAAAwAC3qwbAALerghSMr4y0jXsAAMAAbxfAALeRAAAAAQOMuo17AAAAAgACjMMAAACD8WADwAD+fgFqAGADwAD9oXmMzwAAACdgA8AA/JcBagBgA8AA/aF5AFwBPgJJjN0hHIzsFozhLsAAbxbAALeRwAC3pUgBAAErAMAA/bs+AT0wjP0fjQfAAPxyAwADJ8AAbxuAjU/AXsHcgY1XwF7B8wA/PRyNcBaNai6XaMAAt5HAALekgowAAAAAwAD+TwAAXr3+AF7BJgBewXsAXsG2AF7CcAAAAAQCwAC3roIUjc2N05TNA8AAbysAAAFgAcAAx7UAAAIEwAC3sYIUjmuOcAmXaMAAt5EAXQPAAP5MAV0DwAD9OwFgA8AA/JcABMAAt7KCFJAokDIYwABvFsAAt5EAYAPAAPyXASsBBcAAt7qCFJA3kDeQWgAAAAOQTpBaAAAAAQEBkFQAAASXaF0DwAD+TAFdA8AA/TsBYAPAAPyXAABgA8AAt64BPwIIAcAAt7GAAMBewwgJAZA3wADHuwAAAAAEBsAAt7SCFJBfkGSQowAAVgAAAAEDkGeQowAAAAEBAZByAAAgrRFdA8AA/TsBYAPAAPyXAABcAUqQfAEckHwuwABuSQQABICQhcBew2aTFpCVgJCPwF7DZmHAAP1rKgDAALe1BsAAt7WCFJCokK2TdgAAwABuSQAAAAEDkLWTdgAAAAQEBJDAAAAArRFdA8AA/TsBYAPAAPyXAJDLAAAAamADwAD8lwCQ1gAAAIKQYAPAAPyXAJDgAAAAwABuSmADwAD60QAAXAE+CD0ekPnAAPvYAwADgZEJwF7D4YKREMBew+4WkRuAkRXAXsPMYcAA/WsASZEpHJEzgZEtwF7D4UgBAAGCkTbAXsPuAMAA/bs+AkmRQ4ORR8Bew/w9HJFPLsAAbxfAALeRAgACgJFWwF7DzIKRXcBew+4AwAC3uD9KkWkAP06RgJGHAACCj2ADwAC37QEfkY3AALfyAAAAAEmRoByRrxaRpC7AAG8WwAC3kcAAt7JIAQABapGyYAPAAPyXgZ4AwAD9uz4DPReRyC7AAG8WwAC3kRyR2DcQg40BAAEekdrAALhGAgACgJHrwF7DzIGR8sBew+EAAMAA/b/AALeyPYmSAMBew+EckgWBkgDAXsPhZAEAAZQAwAD9vUmSEBySGoGSFMBew+FIAQABgpIdwF7D7gDAAP27PgJJkiyDkjDAXsP8PRySOC7AAG8XwAC3kQIAAoCSP8Bew8yCkkbAXsPuAMAAt7g/SpJUAD8/SZJvIRySfhaScy7AAG8WwAC3kcAAt7JIAQABKwDAAP27PgI9HJKWhJKPwF7EjVYBAAEckqUWkpouwABvFsAAt5HAALeyZAEAAR6Sp8AAuEYCAAKAkrjAXsPMgZK/wF7D4QAAwAD9vQDAALfYPYmSzsBew+EcktOBks7AXsPhZAEAAZQAwAD9vT89F5LiLsAAbxbAALeRHpLvwAC3mAQABICS98Bew8yBkv7AXsPhgpMFwF7D7oSTCsBexI0AwAC3sj0ckx4Wkxgul2jAALeRwAC3sVYBAAEckzAWkymEkyLAXsSNgo/AALfKmFcCAAKTFpNGhJM/wF7EjWHAALfGAMAA42kAwAD+TkmTVIOTWMBew/w9HJNgLsAAbxfAALeRAgACgJNnwF7DzIKTbsBew+4AwAC3uD8GwAC3toIUk3uTgJOTAACCjAAAAAEDk4WTkwAAAAAAAABcAUqTiwEck4suwABvF8AAt5EAAAAAwAC3uAbAALe4ghST/pQDlMsAAMAAbxfAALeRAAAAAQOUCZTLAAAAAgAClBUAAACtEV0DwAD9OwFgA8AA/JcBagBgA8AA/aF5lCAAAAAnYAPAAPyXAWoAYAPAAP2heQBcAT4CSZQuIRyUPRaUMi7AAG8WwAC3kcAAt7JIAQABKwDAAP27PgE9MJROH5RYwAD8cgMAAyfAAG8bgJSgwF7HE4GUp8BexzEAPz0clMAWlLoul2jAALeRwAC3sYKMAAAAAMAA/k8AAF7DRwBew6oAXsayAF7G7QBex64AAAAEAgTAALeTghSBt4HgBsAAbwYAYAPAALeaAWqBzmADwAC3msABf4MEwAC3lYIUgemB+gbAAG8swAC3kQBgA8AA/JcBaoH4YAPAAPyXgZ4CBsAAt5iCFJYjliecPAABwABvHcAAt5EAAAABA5YunDwAAAAEBASWOQAAAJ/zXQPAAP07AWADwAD8lwCWSAAAAGpgA8AA/JcAllMAAACCkGADwAD8lwCWZAAAAIKPYAPAALftAABgA8AA/JcBPgVOlySXLwAAwABvLWADwAD8lwGTTpe1l8AAAMAAby5gA8AA/JcBgZfCwF7IUEWXywGX1JfWAABiYAPAAPyXAYGX2MBeyFABHJfhhpffwF7Is2MBAAGCl+PAXshdAMAA/cUBjpfowF7IsxyX6YaX6MBeyLNkAQABlADAAP29QT4LTpgkmC0AAJhiYAPAAPyXARyYOICYL8BeyDtLAQABhpg5wF7IswDAAP1KSZhBIRyYUhyYToCYRcBeyDtLAQABhphPwF7IswDAAP1KSAEAAWqYVWADwAD8l8AAYfYAwAD9uz4CPYyYZ8BeyIQcmHKEmGfAXsiEgQYBAAGHmHXAXskDAMAA/LBCmIUAP0mZFxyZHYaZG8BeyLOAlwEAAYWZH8BeyJcAwAD9xz4CPR6ZM8AAt5kEAASEmUzAXsiEgJlYwF7IO4WZY8BeyJeGmW/AXsizAD0cmYCDmXnAXshrgKUDAAOAmYfAXsg7hZmSwF7Il4aZnsBeyLMAwAC32T89jpnswF7IsxyZ7YaZ7MBeyLNkAQABlADAAP29SZn1HJn7hpn5wF7Is4FtAQABgpn+wF7IXQDAAP3ISpoDAWqaCmADwAD8l4GeP06aIZosAADAAG8iYAPAAPyXAR6aLsAAuEYCAAKAmj/AXsg7hppKwF7IswA9jppSwF7IsxyaU4aaUsBeyLNkAQABlADAAP29SZpbHJphhppfwF7Is4FtAQABgppkwF7IXQDAAP3ISpppARyaczcQg40BAAEUmnXAXspLCAAAwAD9vz9OmoqalgAAwABvI2ADwAD8lwEempjAALhGAgACgJqpwF7IO4aatMBeyLMAPRyaw4OavMBeyGtWAQABHJrXHJrKNxCDjQEAARSazMBeyksIAADAAP2/ZAEAARSa2cBeys0JAADAAP29AMAAt9g9jZsswF7IlxybO4abOcBeyLNkAQABlADAAP29SZtHHJtPgptLwF7IXYCXAQABhZtRwF7IlwDAAP3HPgI9HptjwAC3mQQABISbfMBeyISAm4jAXsg7hZuTwF7Il4Kbn8BeyF0ASZupHJuzgZutwF7IUEgBAAGFm7bAXsiXAMAA/bs+AT0cm9GDm8rAXshrgKUBAAGAm9jAXsg7AMAAt9k+AT0cm/6Dm/fAXshrgKUDAAOAnAXAXsg7hZwQwF7Il4KcHMBeyF0AwAC32T9KnC8BKwbAALeZghScP5xEnesAAcAAby/AALeRAAAAAQOcXJ3rAAAABAQEnGYAAADAAG8tYAPAAPyXAJx8AAAAn/NdA8AA/TsBYAPAAPyXAJyLAAAAamADwAD8lwCclgAAAIKQYAPAAPyXAABcAT4CSZyfIhycroCco8BezC+BbQEAAZMAwAD9yAAcnMGAnLbAXswvgWsBAAE3fwDAAP3GSpzKAD9FnNUBnN6c4AAAYmADwAD8lwGCnOLAXsxUARyc64Sc6cBezK1jAQABg5ztwF7MYQDAAP3FAYyc8sBezK0cnPOEnPLAXsytZAEAAZQAwAD9vUE+A06dAZ0KAACYYmADwAD8lwEcnRWBnQzAXsw/SwEAAYSdFsBezK0AwAD9SkmdHiIcnSuFnSLAXsz9gW0BAAGTAMAA/cgAHJ08hZ0zwF7M/YFrAQABN38AwAD9xkKdRQA/PTCdUx+dXcAA/HIDAAMkAAMnwABvMCeSbhydtRydo4WdmsBezP2EDgEAATcQAMAA/MWScAIAApcnhA0AwAD+mYGd0MBezD+EnePAXsytAAGCFABezaoAXrtXAF69QABewokAXsfHAAAAAwBeyBUAXswJAF7NqgAAAAIAAgTAALe7wABvMYIVAAACgqgAAMAAvlsAAQEBwABvMoLQAADAANQ9AAAAAAAQAsAAt7yCFYLrgvqoUwfAAG8zAAEAAIPQYAPAAP3kAVsBXQHAAMIpAV8DAAAAAAMEwAC3voIVgzeDSQbAAG80AGADwAD8lwFqg0hgA8AA/JeDXQTAALfAghWEF4QeWJhTwAC3uwBdA8AA/TsBXwMAAAAEwAC3wYIVhLyEwxidL8AAt7sAYAPAAPyXAAEFwAC34IIVhMiEyIUsAAAAA4TYhSwAAAABAQGE4QAAAIKPXQPAAP07AV8DAAAAAF0DwAC3vAFfAwAAAT8DCADAALfAgIUAwF7OqggAwAC3wRaFJoCFH8BezqphwAD9awkBhMjAAMItAAAAABgGwAC3xIIVhFeEZYSJAQDAAG81wAC3uwAAAAEDhHKEiQAAAAAAAABgA8AA43oBSoR1ASaEfQAWhHUumFPAALe7wAC3wGADwADjegbAALfGghWFMYU5hUoBAGEAAAABA4VAhUoAAAAAAAAAYAPAAPyXAUqFQwEWhUMunS/AALe7wAC3wQbAALfMghWFToVZhcgDAEsAAAABA4VbhcgAAAABAQGFYAAAACdgA8AA/JcAAF8DAAABPgJJhW0chXeAhXHAXs+dgW0BAAEWhXouYcAAt8YAwAD9yD0whYIfhYzAAPvtAgACgIWdwF7PnS4AP0qFrwEchb0WhbYumFPAALe7wAC3wEsBAAGAhb7AXs+dAMAA/UoGwAC3zYIVhc2F24ZVAwCAvwAAAAEDhd6GVQAAAAICAoXjAAAAJ2ADwAD8lwCF7AAAIICWXwMAAAAAXAE+AkmF+RyGA4CF/cBe0C+BbQEAARaGBi5hwAC3xgDAAP3IPTCGDh+GGMAA++0CAAKAhinAXtAvLgA/PRyGQhaGOy6YU8AAt7vAALfAgL8CAAKAhkPAXtAvgYZMwF7QPADAAP1LBsAAt96CFYZahmOIaAIAYQAAAAEDhmmIaAAAAAEBAYZuAAAAl4NgA8AA/JcAAFwBPgJJhn8cho2AhoPAXtDOYwEAARaGjy6dL8AAt7vAALfBAMAA/cU+Ak6GooavAACDKl8DAAABFoaxLsAAbzbAALe7wAC3xUWGxgGGz4bRAABiYAPAAPyXAYCG08Be0M4BHIbggobewF7RKWMBAAEWhuIunS/AALe7wAC3wQDAAP3FAYqG68Be0SkchuyChuvAXtEpZAEAAZQAwAD9vT4BPRyHARaG+i6YU8AAt7vAALfAgL8CAAKChwLAXtEpgYcHwF7RCADAAP1LSYcoHIc2gIcswF7QzoCXAQABFodAFoc4LphTwAC3u8AAt8BhwAD9awDAAP3HPgROh1gAAADAAG83XQPAAP07AV8DAAAASYdpHId8Fod1FodtLphTwAC3u8AAt8BhwAD9a0gBAAGTAMAA/bs+AT2Jh4zAXtHYHIeYLsAAbzjAALe7AQABgIemwF7QzgDAALfXPgE9iYfJwF7R2ByH1S7AAG85wAC3uwEAAYCH6cBe0M4AwAC31D0ciA2BiAPAXtHYg2QDAAOTFogZLp0vwAC3u8AAt8EWiCIumFPAALe7wAC3wADAAP1gPReIMi6YU8AAt7uBiDzAXtHYwAC3wD89F4hRLp0vwAC3u4CIW8Be0M7AALfBBsAAt8+CFYhtiHKI1wAAtCvAALe7AAAAAQOIdojXAAAAAQEBiHkAACCAll8DAAAAAFwBPgJJiIYciJIWiIounS/AALe7wAC3wUgBAAEWiJ0WiJUumFPAALe7wAC3wGHAAP1rAMAA/bs9HIilLsAAQ03AALe7AQABFoirLp0vwAC3u8AAt8EAwAC31T89HIjAFoi5LphTwAC3u8AAt8CAvwIAAjUAAAABAGADwAD8lwEWiMEunS/AALe7wAC3wTUAAAABAGADwAD8lwEXiMEunS/AALe7HIjIgQDAXtNgZAEAAZQAwAD9vcAAt8GBAMBe02CAiM7AXtLgAMAA/UsGwAC32IIViZWJmom8AABWAAAAAQOJnYm8AAAAAQEBiaAAACCAll8DAAAAAFwBPgE9HImtLrQrwAC3uwEAAYCJssBe09kAwAC3zwbAALfZghWLq4uwjKMAAIClAAAAAQOLtoyjAAAAAwEDi8MAACApXQPAAPz5AV8DAAAAi9AAAABqYAPAAPyXAWqL2GADwAD8lwmL3wAAAIKQYAPAAPyXAWoAYAPAAP2heQBcAT4DPR6L9sAA+9kCAAKBjAfAXtQ2J2oASYwcIiEcjCSCjCDAXtRNSAEAASsAwAD9uwAcjDWBjC/AXtQ2gJcBAAGCjDfAXtRNAMAA/cc+AT0wjEQfjE7AAPvhBAAEgoxfwF7UTYGMZMBe1DYrJ4KQAD89HIyELsAAbzrAALe7AwADgIyMwF7UJIGMlMBe1DaCjJvAXtRNAMAAt9EGwAC32oIVjpmOnpV+AACgFAAAAAEDjqeVfgAAAAQCBI6sAAAAJ2ADwAD8lwCOvwAAICldA8AA/PkBXwMAAACOzAAAAGpgA8AA/JcBao7UYAPAAPyXCY7bAAAAgpBgA8AA/JcBagBgA8AA/aF5AFwBPhA9Ho7ywAD71wQABICPAsBe1SEuJyccjyAWjxgunS/AALe7wAC3wWQBAAGUAMAA/b0APR6PNcAA+9kCAAKCj0bAXtVAJ2oASY9bIRyPY4OPX8Be1VdIAQABKwDAAP27PgJJj3Qcj36Cj3jAXtVAgJcBAAGDj4DAXtVXAMAA/cc+AT0wj48fj5nAAPvhBAAEg4+qwF7VV4KPr8Be1UArJ4KQAD9Jj9Icj9yCj9bAXtVASAEAAYOP38Be1VcAwAD9u0qP5AA/P0mRNByRPoCROMBe1SFIAQABFpFBLp0vwAC3u8AAt8EAwAD9uz4CPRyRUi7AAG86wAC3uwMAA4GRWsBe1S6CkWLAXtVAg5FpwF7VVwDAALfRSpF1AD9JkYgiHJGQg5GMwF7VV0gBAAErAMAA/bsAJZGigZGbwF7VLl0DwAD9OwFbPgE9i5GzwF7VVxaRwIGRucBe1S5hwAD9HD9JkdIhHJHag5HWwF7VV0gBAAErAMAA/bs+Aj0ckesuwABvO8AAt7sEAASAkf7AXtUhgZIFwF7VLoKSDcBe1UCDkhTAXtVXAMAAt9JKkiAAP06St5LCAADAAG88YAPAAPyXARaSxC6dL8AAt7vAALfBTpLVkt8AAKAJYAPAAPyXAYKS4cBe1UBGkuwAkvUAAACAll8DAAAAgZL+wF7VLkE+A0mTDhyTHIWTEsBe10OAlwEAAZMAwAD9xz4CPY2TK8Be10MckzSFkyvAXtdDgY0BAAGUAMAA/b5Ck0AAP0mTWByTZ4STXMBe1yNIAQABFpNyFpNqLphTwAC3u8AAt8BhwAD9awDAAP27PgE9HJOELsAAQ03AALe7AQABhJOKwF7XIwDAALfVPz0ck6wWk6UumFPAALe7wAC3wIC/AgACNQAAAAEAYAPAAPyXAYSTrcBe1yM1AAAAAQBgA8AA/JcBjJOtwF7XIxyTt4cAwF7YEmQBAAGUAMAA/b2HAMBe2BKGk73AXtddAMAA/UtJk88ck92Fk9PAXtdDgJcBAAGTAMAA/cc+AT0wk+ofk/TAAPw3AQABJ8AAbz0AP0mUHiIhHJQmg5QiwF7VV0gBAAErAMAA/bsAHJQ8hJQxwF7XI2MBAAGDlD7AXtVXAMAA/cU+AT0wlEsflFXAAPvhBAAEg5RmwF7VV4KUa8Be1UCElHLAXtcjJ4KQAD89HpTdwAC30AMAAxaU5i6YU8AAt7vAALfAgJTvwF7VIRaU9i6dL8AAt7vAALfBAD0elQTAALfQAwADFpUNLphTwAC3u8AAt8AWlRYunS/AALe7wAC3wYSVH8Be1yMAPR6VMMAAt9ADAAMWlTkumFPAALe7wAC3wICVQsBe1SGElUnAXtcjAD0XlVounS/AALe7hJVkwF7XI8AAt8FKlXQABsAAt9CCFZWzlb+W3AABwABre8AAt7sAAAABA5XHltwAAAADAwOVzQAAAIKPXQPAAP07AVsAldkAAABqYAPAAPyXAJXkAAAAgpBgA8AA/JcAAFwBPgI9ipXvwF7ZzhyV8oKV78Be2c6BjQEAAZQAwAD9vkOWLByWOYGWM8Be2cFjAQABgpY7wF7ZzgDAAP3FPgZOlkyWUgAAgx5bARyWWoCWVMBe2bFLAQABgZZbwF7ZwQDAAP1KTpZtlnIAAIHqWwEclnqAlnTAXtmxSwEAAYKWe8Be2c4AwAD9Sj0clo2AlofAXtmxgL8CAAKClo7AXtnOg5aVwF7aHgDAAP1LPRyWqICWosBe2bGAvwIAAoGWqcBe2cGElrLAXtpDAMAA/Us9iZa+wF7ZwRyWw4GWvsBe2cFkAQABlADAAP29PYqWzcBe2c4cltCCls3AXtnOgY0BAAGUAMAA/b4GwAC30YIVl7mXvpolAADAAG86wAC3uwAAAAEDl8WaJQAAAAMBA5fSAAAgKV0DwAD8+QFfAwAAAJffAAAAamADwAD8lwFql+dgA8AA/JcJl+4AAACCkGADwAD8lwFqAGADwAD9oXkAXAE+BUmX+iWYBYCX/sBe2wxdA8AA/TsBWz0jHJgSgpgOwF7bNUgBAAErAMAA/buKmA7AXts1FpgdgJgWwF7bDGHAAP0cKwFgA8AA/Jc/SZj0IRyY/IKY+MBe2zVIAQABKwDAAP27PgI9HJkNLsAAbzvAALe7BAAEFpkgLp0vwAC3u8AAt8GAmSnAXtsMgZkxwF7bHoKZOMBe2zUAwAC30kqZRAA/TpmMmY4AAGJgA8AA/JcBk0aZl5mxmaAAAACAll8DAAAAgJmpwF7bDD4CSZm5HJm/g5m9wF7b84FtAQABgZnCwF7bHgDAAP3IPRyZyS5WAQABhJnNwF7cBwDAALfYPz2LmdvAXtvzHJncg5nbwF7b82QBAAGUAMAA/b1JmeocmfCDme7AXtvzYwEAAYGZ8sBe2x4AwAD9xT0wmfkfmgPAAPw3AQABJ8AAbz0APwbAALfSghWadpp7nMgAAMAAbzvAALe7AAAAAQOajZzIAAAABAQEmpIAAAAnYAPAAPyXAJqlAAAgKV0DwAD8+QFfAwAAAJqxAAAAamADwAD8lwCavAAAAIKQYAPAAPyXAABcAT4HSZrHJZrSgZrLwF7c0V0DwAD9OwFbPgI9Ixya54Oa48Be3PBIAQABKwDAAP27i5rjwF7c8Baa8oGa68Be3NFhwAD9HCsBYAPAAPyXSZsAIhybCoKbBMBe3OOAlwEAARabE4GbDMBe3NFhwAD9HADAAP3HARybIYObHcBe3PCAlwEAARabKoGbI8Be3NFhwAD9HADAAP3HPgE9MJs8H5tGwAD8NwEAASfAAG89AD8+AUAhHJuMg5uIwF7c8EgBAAErAMAA/bubiJuTAE6bpZuyAADAAG8+YAPAAPyXARybuIObtMBe3PCBjQEAAYKbusBe3OMAwAD9vk6byZvTAACXg2ADwAD8lwEcm90Wm9UunS/AALe7wAC3wWQBAAGEm9/AXt3OAMAA/b09HJvxLsAAbz/AALe7AQABhZwBwF7d+wDAALfTPRycGhacEi6YU8AAt7vAALfAg2QEAAQcnDKAnCzAXtzEZAEAAYScNMBe3c4AwAD9vRycShacQi6dL8AAt7vAALfBZAEAAYScTMBe3c4AwAD9vRacWi6YU8AAt7vAALfAgJxjwF7cxADAAP1gPRycdxacby6YU8AAt7vAALfAg2QEAASAnIDAXtzEHJyNgJyHwF7cxGQBAAGEnI/AXt3OAMAA/b2BnJ3AXtzRgpylwF7c4wDAAP1gPRecsS6dL8AAt7uFnLvAXt37wAC3wQbAALfbghWczZzSnuUAAJ8OAAAAAQOc2J7lAAAAAgICnN0AAAAnYAPAAPyXAJzmAAAgllJfAwAAAABcAT4ISZz1Ihyc/4Cc+cBe3zRjAQABkwDAAP3FARydDICdBsBe3zSAlwEAARadDi6dL8AAt7vAALfBAMAA/cc+AT0wnR8fnSnAAPvhAwADgJ06wF7fNJMWnUQunS/AALe7wAC3wQA/SZ1YHJ1kFp1cLp0vwAC3u8AAt8FjAQABFp1uFp1mLphTwAC3u8AAt8BhwAD9awDAAP3FPgQ9HJ2GFp1+LphTwAC3u8AAt8CDZAQABBydlYCdj8Be3zRkAQABlADAAP29HJ2iFp2aLp0vwAC3u8AAt8FkAQABlADAAP29Fp2nLphTwAC3u8AAt8CAnbDAXt80AMAA/WA9HJ3FFp2+LphTwAC3u8AAt8CAvwIAAoCdxsBe3zSBnc/AXt9BAMAA/Us9F53eLp0vwAC3uxyd5Rad3i6dL8AAt7vAALfBZAEAAZQAwAD9vcAAt8FKne8AP06eCZ4TAADAAG83XQPAAP07AV8DAAABHJ4VLsAAbznAALe7AQABKwDAALfUPRyePoKeNMBe4KSDZAMAA5OAnkrAXt80Fp5RLphTwAC3u8AAt8AAwAD9YD0cnmmCnl/AXuCkg2QEAAQcnniAnnLAXt80ZAEAAZQAwAD9vRyehRaefS6dL8AAt7vAALfBZAEAAZQAwAD9vRaeii6YU8AAt7vAALfAgJ6TwF7fNADAAP1gPRyeqIKen8Be4KSAvwIAAoCeqcBe3zSBnrLAXt9BAMAA/Us9F56/Lp0vwAC3uxyexhaevy6dL8AAt7vAALfBZAEAAZQAwAD9vcAAt8E9F57OLphTwAC3u4Ke2MBe4KTAALfABsAAt9OCFZ9xn3agVQAAwABvP8AAt7sAAAABA5+FoFUAAAABAQGfigAAAMAAb0BgA8AA/JcAAFwBPgRJn6Icn7eAn6bAXuHcgWsBAAEWn8IWn7oumFPAALe7wAC3wGHAAP1rAMAA/cZKn8oAP06f2p/kAADAAG83XQPAAP07AV8DAAABHJ/mLsAAbznAALe7AQABgJ/6wF7h3ADAALfUPRygG4GgEcBe4iSDZAMAA5MWoCcunS/AALe7wAC3wRagMC6YU8AAt7vAALfAAMAA/WA9F6A+LphTwAC3u4GgSMBe4iTAALfABsAAt9SCFaFnoW+ipwAAwABvOcAAt7sAAAABA6GCoqcAAAABAQGhhwAAAMAAb0BgA8AA/JcAAF0DwAD9OwFfAwAAAT4DTqGjoa0AAJeDYAPAAPyXARyhvhahtxahry6YU8AAt7vAALfAYcAA/WuDjQEAAZUAwAD9v0mhxyIhHKHcgKHLwF7iw0gBAAErAMAA/bsAHKHxgaHnwF7i42MBAAGAofPAXuLDAMAA/cU+AT2Jog3AXuLjgKIZwF7iw0miNhyiRIGiOsBe4uNjAQABaqJGYAPAAPyXg10AwAD9xT4BPYmiXsBe4uNqompgA8AA/JeDXT9KooQBHKKLLsAAbzjAALe7AQABgaKZwF7i4wDAALfXBsAAt9WCFaMNoxKjbwAAwABDTcAAt7sAAAABA6MXo28AAAABAQGjHAAAAGFgA8AA/JcAAFwBPgE9F6MqLphTwAC3uzWjNAAAAQBdA8AA/TsBXwMAAAEcozQuwABvOcAAt7sBAAErAMAAt9Q1AAAAAQBbARyjT4GjTcBe4/WDZAMAA5OAo1vAXuPXFqNjLphTwAC3u8AAt8AAwAD9YIEAwF7j9cAAt8AGwAC33IIVo3SjeaQ1AACDZAAAAAEDo4GkNQAAAAQDBKOGAAAAamADwAD8lwCjkQAAAIKQYAPAAPyXAKOiAAAgg0pdA8AA/PkBXwMAAACjrwAAAKAJYAPAAPyXAWqju2ADwAD8lwkAXAE+AkmjxRyjzYGjycBe5IWAlwEAARajzy6dL8AAt7vAALfBAMAA/cc9MKPYH6PiwAD74QMAA4Gj88Be5IWTFqP7Lp0vwAC3u8AAt8EAPz0cpAkuwABvQcAAt7sEAASApBPAXuR4gaQawF7khYKkH8Be5JODpCfAXuSmAMAAt9YGwAC31oIVpG6kc6VqAADAAG9BwAC3uwAAAAEDpHylagAAAAQEBKSBAAAAamADwAD8lwCkjAAAAIKQYAPAAPyXAKSdAAAgg0pdA8AA/PkBXwMAAACkqQAAAKAJYAPAAPyXAABcAT4BSaS6JaTFgqS+wF7lgF0DwAC3vAFfAwAAPgE9HKTtFqTlLphTwAC3u8AAt8CDZAQABICk9sBe5WWBpP3AXuVyFqUJFKUCwF7lgAIBXQPAALe8AV8DAACYU8AAt7vAALfAg6USwF7lkwDAAP1gPgE9HKU5FqUxLphTwAC3u8AAt8CDZAQABIClQsBe5WWBpUnAXuVygqVOwF7lgIOlVsBe5ZMAwAD9YAbAALfHghWlgKWIpb0BAMAAb0IAAAABA6Wbpb0AAAAAAAAAYAPAAPyXAUqlngEWpasWpZ4uwABvNcAAt7vAALfEwABvQsAA43wGwAC3yIIVpcKlyqYEAQDAAG7nAAAAAQOl2KYEAAAAAAAAAGADwAD8lwFKpdsBHKXjFqXbLp0vwAC3u8AAt8GDjQEAARal8hal5S7AAG81wAC3u8AAt8TAAG9CwADjfADAAP2/BsAAt8mCFaYJphGmPAEAqfcAAAABA6YfpjwAAAAAAAAAYAPAAPyXAUqmIgEWpi8WpiIuwABvNcAAt7vAALfEqffAAON9BsAAt8qCFacrpzqnVwEAgo8AAAABA6dBp1cAAAAAAAAAYAPAAONlAUqnRAEWp1EWp0QuwABvNcAAt7vAALfEgo/AAON/BsAAt8WCFafrp/Gn/gECwABvNsAAt7sAAAABA6f+p/4AAAAAAAAAXwMAAAAGwAC314IVqDKoOqhRAALAAG84wAC3uwAAAAEDqEeoUQAAAAEBAahMAAAAmLNgA8AA/JcAAF0DwAD9OwFfAwAAAAAAXs77AF7PRQBez34AXtAPAF7QrwBe0rwAXtO6AF7UBABe1QEAXtmLAF7a5gBe3J4AXt8UAF7htgBe4p0AXuOxAF7kWABe5T8AXuZMAF7mlQBe5vkAXuc+AF7ngwBe568AXufwAAAAGALAALfhghWoVqhlqN8HwABvQwAAAV0BwAC3vAFgA8AA/JcAAAABBcAAt+aCFaiSqJKovgAAAAOonKi+AAAAAQEBqKcAAACCj10DwAD9OwFgA8AA/JcAAGADwAC34QE/AQkAqLHAALfgAQABgKi3wF7omgABBsAAt+SCFajDqMuo3QEAwABvNsAAt7sAAAABA6jZqN0AAAAAAAAAYAPAAPyXAUqo3AGTAABe6M0AXukAAAAAAQLAALfnghWo4qjxqXoHwABvRAAAAV0BwAC3vAFgA8AA+0kAAAABBcAAt+yCFakjqSOpVAAAAAOpL6lUAAAAAQEBqT0AAACCj10DwAD9OwFgA8AA+0kAAGADwAC35wE/AQkAqUfAALfgAQABgKlNwF7pTgABBsAAt+qCFalZqWSpeAEAwABvNsAAt7sAAAABA6lyqXgAAAAAAAAAYAPAAPtJAUqpdQEoAAAAAAAAAAAAAF7pgQBe6bwAAAABAsAAt+2CFal9qYOqLgPAAG9FAAABYAHAALfhAAAAAQXAALfyghWppqmmqfAAAAADqbGp8AAAAAEAAam3AAAAwABvRmADwAD8lwFqqcdgA8AA/JcJAGADwAC37QE/AQkAqc3AALfmAQABHqnXwADjvgEAAYCp4cBe6gMAAAEGwAC38IIVqfSp/qosAADAAG84wAC3uwAAAAEDqguqLAAAAAEBAaoQAAAAmLNgA8AA/JcAAGADwADjugFKqhkBHqodwADjvgEAAYCqJ8Be6mwAAABe6kYAXuqYAAAAAQLAALfzghWqMao3qt0DwABvRwAAAWABwAC34QAAAAEFwAC3+IIVqlmqWaqhAAAAA6pjqqEAAAABAAGqaQAAAMAAb0ZgA8AA/JcBaqp5YAPAAPyXCQBgA8AAt/MBPwEJAKp/wAC35gEAAR6qicAA47UBAAGAqpLAXurfAAABBsAAt/aCFaqlqq6q2wAAwABvOMAAt7sAAAABA6q7qtsAAAABAQGqwAAAAJizYAPAAPyXAABgA8AA47EBSqrJAR6qzcAA47UBAAGAqtbAXutIAAAAXusiAF7rdAAAAAECwAC3+YIVquCq5qu6A8AAb0gAAAFgAcAAt+EAAAABBcAAt/6CFasQqxCrbgAAAAOrIqtuAAAAAQABqygAAADAAG9GYAPAAPyXAWqrOGADwAD8lwkAYAPAALf5AT8BCQCrRMAAt+YBAAEeq07AAOPIAQABgKtfwF7ruwAAAQbAALf8ghWrcquDq7gAAMAAbzjAALe7AAAAAQOrkKu4AAAAAQEBq5UAAACYs2ADwAD8lwAAYAPAAOPEAUqrngEeq6LAAOPIAQABgKuzwF7sJAAAAF7r/gBe7FAAAAABAsAAt/+CFau9q8OscwPAAG9JAAABYAHAALfhAAAAAQXAALgEghWr56vnrDMAAAADq/OsMwAAAAEAAav5AAAAwABvRmADwAD8lwFqrAlgA8AA/JcJAGADwAC3/wE/AQkArA/AALfmAQABHqwZwADj2gEAAYCsJMBe7JcAAAEGwAC4AoIVrDesQqxxAADAAG84wAC3uwAAAAEDrE+scQAAAAEBAaxUAAAAmLNgA8AA/JcAAGADwADj1gFKrF0BHqxhwADj2gEAAYCsbMBe7QAAAABe7NoAXu0sAAAAAQLAALgFghWsdqx8rScDwABvSgAAAWABwAC34QAAAAEFwAC4CoIVrJ+sn6zpAAAAA6yqrOkAAAABAAGssAAAAMAAb0ZgA8AA/JcBaqzAYAPAAPyXCQBgA8AAuAUBPwEJAKzGwAC35gEAAR6s0MAA49EBAAGArNrAXu1zAAABBsAAuAiCFaztrPetJQAAwABvOMAAt7sAAAABA60ErSUAAAABAQGtCQAAAJizYAPAAPyXAABgA8AA480BSq0SAR6tFsAA49EBAAGArSDAXu3cAAAAXu22AF7uCAAAAAECwAC4C4IVrSqtMK3gA8AAb0sAAAFgAcAAt+EAAAABBcAAuBCCFa1UrVStoAAAAAOtYK2gAAAAAQABrWYAAADAAG9GYAPAAPyXAWqtdmADwAD8lwkAYAPAALgLAT8BCQCtfMAAt+YBAAEerYbAAOPsAQABgK2RwF7uTwAAAQbAALgOghWtpK2vrd4AAMAAbzjAALe7AAAAAQOtvK3eAAAAAQEBrcEAAACYs2ADwAD8lwAAYAPAAOPoAUqtygEerc7AAOPsAQABgK3ZwF7uuAAAAF7ukgBe7uQAAAABAsAAuBGCFa3jremulAPAAG9MAAABYAHAALfhAAAAAQXAALgWghWuDK4MrlYAAAADrheuVgAAAAEAAa4dAAAAwABvRmADwAD8lwFqri1gA8AA/JcJAGADwAC4EQE/AQkArjPAALfmAQABHq49wADj4wEAAYCuR8Be7ysAAAEGwAC4FIIVrlquZK6SAADAAG84wAC3uwAAAAEDrnGukgAAAAEBAa52AAAAmLNgA8AA/JcAAGADwADj3wFKrn8BHq6DwADj4wEAAYCujcBe75QAAABe724AXu/AAAAAAQLAALgXghWul66dr00DwABvTQAAAWABwAC34QAAAAEFwAC4HIIVrsGuwa8NAAAAA67Nrw0AAAABAAGu0wAAAMAAb0ZgA8AA/JcBaq7jYAPAAPyXCQBgA8AAuBcBPwEJAK7pwAC35gEAAR6u88AA4/4BAAGArv7AXvAHAAABBsAAuBqCFa8RrxyvSwAAwABvOMAAt7sAAAABA68pr0sAAAABAQGvLgAAAJizYAPAAPyXAABgA8AA4/oBSq83AR6vO8AA4/4BAAGAr0bAXvBwAAAAXvBKAF7wnAAAAAECwAC4HYIVr1CvVrABA8AAb04AAAFgAcAAt+EAAAABBcAAuCKCFa95r3mvwwAAAAOvhK/DAAAAAQABr4oAAADAAG9GYAPAAPyXAWqvmmADwAD8lwkAYAPAALgdAT8BCQCvoMAAt+YBAAEer6rAAOP1AQABgK+0wF7w4wAAAQbAALggghWvx6/Rr/8AAMAAbzjAALe7AAAAAQOv3q//AAAAAQEBr+MAAACYs2ADwAD8lwAAYAPAAOPxAUqv7AEer/DAAOP1AQABgK/6wF7xTAAAAF7xJgBe8XgAAAABAsAAuCOCFbAEsAqwxwPAAG9PAAABYAHAALfnAAAAAQXAALgoghWwMbAxsIUAAAADsD6whQAAAAEAAbBEAAAAwABvRmADwAD8lwFqsFRgA8AA/JcJAGADwAC4IwE/AQkAsGDAALfsAQABHrBqwADkBwEAAYCwdsBe8b8AAAEGwAC4JoIVsImwlbDFAADAAG84wAC3uwAAAAEDsKKwxQAAAAEBAbCnAAAAmLNgA8AA/JcAAGADwADkAwFKsLABHrC0wADkBwEAAYCwwMBe8igAAABe8gIAXvJUAAAAAQLAALgpghWwyrDQsY0DwABvUAAAAWABwAC35wAAAAEFwAC4LoIVsPew97FLAAAAA7EEsUsAAAABAAGxCgAAAMAAb0ZgA8AA/JcBarEaYAPAAPyXCQBgA8AAuCkBPwEJALEmwAC37AEAAR6xMMAA5BABAAGAsTzAXvKbAAABBsAAuCyCFbFPsVuxiwAAwABvOMAAt7sAAAABA7FosYsAAAABAQGxbQAAAJizYAPAAPyXAABgA8AA5AwBSrF2AR6xesAA5BABAAGAsYbAXvMEAAAAXvLeAF7zMAAAAAECwAC4L4IVsZCxlrK4A8AAb1EAAAFdAcAAt7wBYAPAAOVbAAABBMAAuDKCFbHZsfgEwABrn8AAt7sAYAPAAOVbAR6x5cAA5l4EAASTk5OTAAEFwAC4OoIVsfyx/LJQAAAAA7IJslAAAAABAAGyDwAAAMAAb0ZgA8AA/JcBarIfYAPAAPyXCQBgA8AAuC8BPwEJALIrwAC34AEAAR6yNcAA5CMBAAGAskHAXvOpAAACBsAAuDWCFbJUsmCydgEAwABvNsAAt7sAAAABA7JusnYAAAAAAAAAYAPAAOVbAUqycQEasnHAALgyBsAAuDiCFbJ6soaytgAAwABvOMAAt7sAAAABA7KTsrYAAAABAQGymAAAAJizYAPAAPyXAABgA8AA5B8BSrKhAR6ypcAA5CMBAAGAsrHAXvRLAAAAXvPsAF70JQBe9HcAAAACAsAAuDuCFbK7ssGzzgPAAG9SAAABXQHAALe8AWADwADkMwAAAAEFwAC4Q4IVsvmy+bNRAAAAA7MIs1EAAAABAAGzDgAAAMAAb0ZgA8AA/JcBarMeYAPAAPyXCQBgA8AAuDsBPwEJALMqwAC34AEAAR6zNMAA5BkBAAGAs0LAXvTJAAACBsAAuD6CFbNVs2OziAEAwABvNsAAt7sAAAABA7Nxs4gAAAAAAAAAYAPAAOQzAUqzdAEes3jAAOU4AAAAAAbAALhBghWzjLOas8wAAMAAbzjAALe7AAAAAQOzp7PMAAAAAQEBs6wAAACYs2ADwAD8lwAAYAPAAOQVAUqztQEes7nAAOQZAQABgLPHwF71bwAAAF71DABe9UkAXvWbAAAAAgAAAYIVAF71rgBezgMAXuhZAF7pDQBe6ckAXuqlAF7rgQBe7F0AXu05AF7uFQBe7vEAXu/NAF7wqQBe8YUAXvJhAF7zPQBe9IgAXvWsAAAAEABe9a4AAAAAAAIEwAC4RMAAb1OCFgAAAYDyAACm6QAAAAAAAAABBsAAuEaCFoHegeKGVwABwABvVAAAAAEDgfKGVwAAAAICAoH9AAAAn/NdA8AA/TsBYAPAAPyXAIIMAAAAJ2ADwAD8lwAAYAPAAPyXAT4EToPHg9AAAJhiYAPAAPyXARyD24CD0sBe9kVLAQABgYPcwF72WgDAAP1KToPqg/AAAK1tYAPAAPyXARyD9WqD8mADwAD8l7ZKg8ABAAGCg/fAXvZyAMAA/LFJhAMchA2DhAfAXvacgWsBAAE3CQDAAP3GPgFJhBkchCODhB3AXvacgW0BAAGTAMAA/chKhCkBg4QwwF72nD8+Ak6FXIVjAADAAEoJYAPAAPyXARyFajcggQYBAAGChWzAXvZyAMAA/LBJhXoiHIWBaoV+YAPAAPyXwACbAoFrAQABhIWEwF73DADAAP3GAByFlYSFjsBe9wyBawEAAWqFmGADwAD8l8AAmxEAwAD9xkqFnAEcha8chaqEhaPAXvcMgY0BAAFqhaxgA8AA/JfAAJsCAMAA/b5kAQABNwoAwAD9vT89MIW8H4XGwAD8cgMAAyQABCfAAG9VJ5JuHIYkHIYSgoYJwF72coQOAQABNxAAwAD8xZJwAgAClyeEDQDAAP6ZJ4FqgIY+wF72RYGGT8Be9loAAYIWAF74AABe9iEAAAAAAF72IwBe+AAAAAABAAIEwAC4R8AAb1aCFwAAA4HpAADAAMt8AAEBAsAAb1edgY8QAADAAL5bAAEBAsAARw+Wd49FAADAAMt8AAEBB8AAb1jAAG9ZwABvWsAAb1vAAG9cwABvXcAAb14ADQDAAG9fAMAAb2AAwABvYQDAAG9iAMAAb2MAwABvZADAAG9lAMAAb2YAwABvZwDAAG9oAMAAb2kAwABvagDAAG9rKMAAuEmCF4IGwABvbAAAXgMAAQEBYQMAXAABVwPAALhJAFwAAYIlAAAAmfFhAwBcAADAALhKgheFVcAAb20AAF4DAAMDA2ADwAD8l2EDAWADwAC9TVxgA8AA+tEAAVcDwAC4SgBgA8AAvU0AA4VzAAAAlr9gA8AA/JcAhYYAAACZ8WEDAWADwAC9TVwAhaIAAADAAG9uYAPAAPrRAADAALhLghiBTcAAb28AAgAAlnlgA8AA/eQBWwAAgnpgA8AA/eQBW14DAAEBAV8DAAAAAVcDwAC4SwJfAwAAXwMBAF0DwAC5ZAFfAwEAAAGBZAAAAICWXwMAAAAAwAC4TIIYgb3AAG9wAABeAwABAQFgA8AA/eQAAVcDwAC4TABgA8AA+tEAAYHVAAAAgcdgA8AA/eQAAMAAuE2CGIIKwABvcQAAXgMAAAAAAAFXA8AAuE0AWwAAAMAAuE6CGYD8wABvcgAAXgMAAAAAAAFXA8AAuE4AXAAAAMAAuE+CGoGgwABvcwAAXgMAAAAAAAFXA8AAuE8AXAAAAMAAuFCCG4IewABvdAAAXgMAAAAAAAFXA8AAuFAAXAAAAMAAuFGCG4KxwABvdQAAXgMAAAAAAAFXA8AAuFEAWwAAAMAAuFKCG8AAcALAAG92AABeAwAAAAAAAVcDwAC4UgBbAAAAwAC4U4IcuuHAAG93AAEAAIJ6YAPAAP3kAVteAwAAAAAAAVcDwAC4UwFfAwAAXQPAALvqAV8DAAAAAADAALhUghzAAEQDwABveAABAACCemADwAD95AFbXgMAAQEBXwMAAAABVwPAALhUAV8DAABcAAHAAEQVAAAAgJZfAwAAAADAALhVghzAAEQqwABveQAAXgMAAAAAAAFXA8AAuFUAXAAAAMAAuFaCHMAAVSLAAG96AAEAAIJ6YAPAAP3kAVteAwABAQFdA8AAulUBXwMAAAABVwPAALhWAV8DAABcAAHAAFVOAAAAgfldA8AAulUBXwMAAAAAwAC4V4IdhlDAAG97AABeAwACAgJbYAPAAP5SAAFXA8AAuFcAXAAChl8AAACBx1sAhnEAAACGVGADwAD+UgAAwAC4WIIdlaTAAG98AAEAAIJ6YAPAAP3kAVteAwABAQFfAwAAAAFXA8AAuFgBXwMAAGADwAD60QABlbQAAACAll8DAAAAAMAAuFmCHZjHwABvfQACAACWeWADwAD95AFbAACCemADwAD95AFbXgMAAQEBXwMAAAABVwPAALhZAl8DAABfAwEAXwMBAAABmN8AAACAll8DAAAAAMAAuFqCHZ2DwABvfgAAXgMAAQEBWwABVwPAALhaAGADwAD60QABnY4AAACBx1sAAMAAuFuCHbLOwABvfwABAACCemADwAD95AFbXgMAAgICXwMAAF8DAAAAAVcDwAC4WwFfAwAAYAPAAPrRAAKy3QAAAIHXXwMAAACy4gAAAIJOXwMAAAAAwAC4XIIejvvAAG+AAAIAAJZ5YAPAAP3kAVsAAIJ6YAPAAP3kAVteAwABAQFdA8AAumIBXwMBAAABVwPAALhcAl8DAABfAwEAXQPAALpiAV8DAAAAAY8aAAAAgZNdA8AAumIBXwMBAAAAwAC4XYIelJzAAG+BAAIAAJZ5YAPAAP3kAVsAAIJ6YAPAAP3kAVteAwACAgJfAwAAXQPAALpiAV8DAQAAAVcDwAC4XQJfAwAAXwMBAFwAApS6AAAAEl8DAAAAlM0AAACEQF0DwAC6YgFfAwEAAADAALhegh6VIsAAb4IAAQAAgnpgA8AA/eQBW14DAAMDA2ADwAD95GADwAD+Ul0DwAC6YgFfAwAAAAFXA8AAuF4BXwMAAFwAA5VIAAAAgcdgA8AA/eQAlVoAAACGVGADwAD+UgCVcwAAAIRAXQPAALpiAV8DAAAAAMAAuF+CHpXHwABvgwABAACCemADwAD95AFbXgMAAQEBXQPAALpiAV8DAAAAAVcDwAC4XwFfAwAAXAABle0AAACEQF0DwAC6YgFfAwAAAADAALhggh6fYcAAb4QAAgAAlnlgA8AA/eQBWwAAgnpgA8AA/eQBW14DAAICAl0DwAC6HAFfAwAAYAPAAPrRAAFXA8AAuGACXwMAAF8DAQBdA8AAulUBXwMBAAACn48AAACB9l0DwAC6HAFfAwAAAJ+cAAAAwABvhWADwAD60QAAwAC4YYIfgPnAAG+GAAEAAJclYAPAAP3kAVteAwAAAAAAAVcDwAC4YQFfAwAAXwMAAAAAAMAAuGKCH4EWwABvhwACAACXJWADwAD95AFbAACCemADwAD95AFbXgMAAQEBXwMBAAABVwPAALhiAl8DAABfAwEAXwMAAAABgTAAAACFhl8DAQAAAMAAuGOCH4FAwABviAADAACXJWADwAD95AFbAACkuWADwAD95AFbAACkumADwAD95AFbXgMAAgICXwMBAF8DAgAAAVcDwAC4YwNfAwAAXwMBAF8DAgBfAwAAAAKBYQAAAMAAQ6FfAwEAAIFqAAAAwABDol8DAgAAAMAAuGSCH4F6wABviQAAXgMABQUFYAPAAL2lYAPAAL2UYAPAAL2lYAPAAP3kYAPAAP5SAAFXA8AAuGQAXAAFgaoAAACZsGADwAC9pQCBwQAAAIRXYAPAAL2UAIHOAAAApLhgA8AAvaUAgdsAAACBx2ADwAD95ACB7QAAAIZUYAPAAP5SAADAALhlgh+CAsAAb4oAAF4DAQAAlyVgA8AA/eQBWwQEBGADwAC9pWADwAC9lGADwAC9pWEDAF8DAAAAAVcDwAC4ZQBfAwAAAQAAlyVgA8AA/eQBWwSCJwAAAJmwYAPAAL2lAII6AAAAhFdgA8AAvZQAgkcAAACkuGADwAC9pQCCWgAAAIGmYQMAXwMAAAAAwAC4ZoIfgmbAAG+LAABeAwIAAJclYAPAAP3kAVsAAIJ6YAPAAP3kAVsFBQVgA8AAvaVgA8AAvZRgA8AAvaVhAwFfAwEAXwMAAF8DAQAAAVcDwAC4ZgBfAwAAAgAAlyVgA8AA/eQBWwAAgnpgA8AA/eQBWwWCkwAAAJmwYAPAAL2lAIKmAAAAhFdgA8AAvZQAgrMAAACkuGADwAC9pQCCywAAAIGmYQMBXwMBAF8DAAAAgtAAAACFhl8DAQAAAMAAuGeCH4LewABvjAAAXgMDAACXJWADwAD95AFbAACkuWADwAD95AFbAACkumADwAD95AFbBgYGYAPAAL2lYAPAAL2UYAPAAL2lYQMCXwMBAF8DAgBfAwAAXwMBAF8DAgAAAVcDwAC4ZwBfAwAAAwAAlyVgA8AA/eQBWwAApLlgA8AA/eQBWwAApLpgA8AA/eQBWwaDDAAAAJmwYAPAAL2lAIMfAAAAhFdgA8AAvZQAgzAAAACkuGADwAC9pQCDUwAAAIGmYQMCXwMBAF8DAgBfAwAAAINZAAAAwABDoV8DAQAAg2IAAADAAEOiXwMCAAAAwAC4aIIfg3HAAG+NAABeAwEAAJclYAPAAP3kAVsEBARgA8AAvaVgA8AAvZRgA8AAvaVhAwBfAwAAAAFXA8AAuGgAXgMAAAAAAAFXA8AAuGEBXwMAAF8DAAABAACXJWADwAD95AFbBIOxAAAAmbBgA8AAvaUAg8QAAACEV2ADwAC9lACD0QAAAKS4YAPAAL2lAIPkAAAAgaZhAwBfAwAAAADAALhpgh+D8MAAb44AAF4DAgAAlyVgA8AA/eQBWwAAgnpgA8AA/eQBWwQEBGADwAC9pWADwAC9lGADwAC9pWEDAV8DAQBfAwAAAAFXA8AAuGkAXgMAAQEBXwMBAAABVwPAALhiAl8DAABfAwEAXwMAAAIAAJclYAPAAP3kAVsAAIJ6YAPAAP3kAVsEhEAAAACZsGADwAC9pQCEUwAAAIRXYAPAAL2UAIRgAAAApLhgA8AAvaUAhHgAAACBpmEDAV8DAQBfAwAAAADAALhqgh+EhMAAb48AAF4DAwAAlyVgA8AA/eQBWwAApLlgA8AA/eQBWwAApLpgA8AA/eQBWwQEBGADwAC9pWADwAC9lGADwAC9pWEDAl8DAQBfAwIAXwMAAAABVwPAALhqAF4DAAICAl8DAQBfAwIAAAFXA8AAuGMDXwMAAF8DAQBfAwIAXwMAAAMAAJclYAPAAP3kAVsAAKS5YAPAAP3kAVsAAKS6YAPAAP3kAVsEhN8AAACZsGADwAC9pQCE+gAAAIRXYAPAAL2UAIUHAAAApLhgA8AAvaUAhSoAAACBpmEDAl8DAQBfAwIAXwMAAAAAwAC4a4IfhUHAAG+QAABeAwAFBQVgA8AAvaVgA8AAvZRgA8AAvaVgA8AA/eRgA8AA/lIAAVcDwAC4awBgA8AAvVoABYVbAAAAmbBgA8AAvaUAhW4AAACEV2ADwAC9lACFfwAAAKS4YAPAAL2lAIWMAAAAgcdgA8AA/eQAhZ4AAACGVGADwAD+UgAAwAC4bIIfhbjAAG+RAABeAwAEBARgA8AAvaVgA8AAvZRgA8AAvaVhAwBcAAFXA8AAuGwAXAAEhdsAAACZsGADwAC9pQCF7gAAAIRXYAPAAL2UAIX7AAAApLhgA8AAvaUAhgYAAACBpmEDAFwAAMAAuG2CH4YawABvkgAAXgMABQUFYAPAAL2lYAPAAL2UYAPAAL2lYAPAAPttYQMAXAABVwPAALhtAGADwAC9TQAFhjcAAACZsGADwAC9pQCGSgAAAIRXYAPAAL2UAIZXAAAApLhgA8AAvaUAhmYAAACBtWADwAD7bQCGdQAAAIGmYQMAXAAAwAC4boIfhonAAG+TAABeAwAFBQVgA8AAvaVgA8AAvZRgA8AAvaVgA8AA+21hAwFgA8AAvU1cAAFXA8AAuG4AYAPAAL1NAAWGqQAAAJmwYAPAAL2lAIa8AAAAhFdgA8AAvZQAhs0AAACkuGADwAC9pQCG3AAAAKE9YAPAAPttAIbpAAAAgaZhAwFgA8AAvU1cAADAALhvgh+HB8AAb5QAAF4DAAQEBGADwAC9pWADwAC9lGADwAC9pWADwAD+fgABVwPAALhvAFwABIceAAAAmbBgA8AAvaUAhzEAAACEV2ADwAC9lACHPgAAAKS4YAPAAL2lAIdLAAAAgftgA8AA/n4AAMAAuHCCH4dfwABvlQAAXgMABQUFYAPAAL2lYAPAAL2UYAPAAL2lYAPAAL1uXQPAAP1tAltbAAFXA8AAuHAAYAPAAL2lAAWHcAAAAJmwYAPAAL2lAIeDAAAAhFdgA8AAvZQAh5AAAACkuGADwAC9pQCHrAAAAMAAb5ZgA8AAvW4Ah78AAACIzV0DwAD9bQJbWwAAYALAALiugiCDF4MdhYUDnFsAAQAAgnpgA8AA/eQBWwFgAcAA/eQAAV0BwAC5iAFfAwAAAgTAALixgiCDV4NxScAAb5fAALhHAF0DwAC51wFfAwAAAR+DZcAAugsAAV8DAAAAAATAALiygiCDeoOAGMAAb5gAYAPAAPrRAAEFwAC4u4Igg4WDhYOsAAAAA4OZg6wAAAAAAAAAXQPAALiuAV8DAAABPwIIAMAAuLIqCQGDhcAA/foAAAAABQbAALi0giCDsYO2hGIAAMAAb5kAAAABA4O+hGIAAAABAAGDzAAAIICWXQPAALlkAV8DAAABagBgA8AA/aF5AFwBPgFJg9oiIRaD3y7AAG+YwAC4sgElg++Ag+nAXwkzXQPAALloAV8DAAA+AT0chA0WhAUuwABvl8AAuEfAALixwABvmsAAuEcBAAGAhBzAXwkzAMAAugE+AT0chD8WhDcuwABvl8AAuEfAALixwABvm8AAuEcBAAEmhFIBgIRSwF8JM18DAAAAwAC5/wbAALi1giCEZ4RshPsAAIHdAAAAAQOEeYT7AAAAAgEChHoAAACDU2ADwAD95ACEfgAAAKQ0YAPAAP5SAWoAYAPAAP2heQBcAT4BSYSJFoSNLsAAb5jAALiyPgE9HISlFoSdLsAAb5fAALhHwAC4scAAb5zAALhHAgACgIS0wF8J/YGEt8BfCgsAwAC6AD4BPRyE1xaEzy7AAG+XwAC4R8AAuLHAAG+dwAC4RwIAAoCE68BfCf2BhO7AXwoLAMAAugMGwAC4toIghQCFBYUuAABqAAAAAQOFCoUuAAAAAQEBhQsAAACBplsAAFwBPgI9HIUVgIUUwF8KvSAAAAAAAD0XhR0uwABvmCnAALiyBsAAuLiCIIUzhUGFUgEAgd4AAAABA4VIhVIAAAAAAAAAXQPAALloAV8DAAABSoVLARaFSy7AAG+XwAC4R8AAuLEGwAC4uYIghVaFX4WDAQDAAG+eAAAAAQOFa4WDAAAAAAAAAGADwAD60QFKhW4BIRaFdxaFby7AAG+XwAC4R8AAuLHAAG+fwAC4R8AAueUAAF8JEQBfCd0AXwqeAF8K6gBfCysAXwt5AAAABQLAALi8giCSq5LLotkDnEUBapKsYAPAAPqYwAF/lgEAAIJ6YAPAAP3kAVsBYAHAAP3kAAAHBMAAuL6CIJMBkwtYwABe3ABdA8AAuqQBXwMAAAErBMAAuL+CIJMYkyUYwABTFwBgA8AA/I0ABMAAuMCCIJMukz4YwABvoQBgA8AA+tEBKgTAALjBgiCTR5NfGMAAb6IAYAPAAPrRASoEwAC4woIgk2iTexjAAG+jAGADwAD60QEqBMAAuMOCIJOEk54YwABvpABgA8AA+tEBKgTAALjEgiCTqpPDGMAAb6UAXQPAALnXAVsBKwEFwAC40oIgn7SftKByAAAAA5/OoHIAAAABAQGf1AAABMAAUxdgA8AA/I0AAF0DwAC4vAFfAwAAAT4BPRef6S7AAF7cHp/6wAC6sAMBXwMAAAADwABvphagIy7AAG+mwAC4zsAAb6cWoEQuwABvp8AAuM/AAG+oFqBlLsAAb6jAALjQwAC4vgIIAcAAuL+AAMBfDJwJAZ+0wAD9+gAAAAAKBsAAuMaCIJPIk9aUcwEAgfYAAAABA5PdlHMAAAAAAAAAXQPAALocAV8DAAABPgNOk/OT+QABnwddA8AAuhwBXwMAAAEWlAYWk/suwABe3MAAuL6B9sAAuqZJlBIllByAlBbAXw1RXQPAALuqAV8DAAA+AT0XlD0UlDfAXw1RAAFdA8AAu6oBXwMAAMAAb6nAALhHFpRKLsAAUxfAALi/wAC7rj9KlGMBgJRqwF8NUQbAALjIgiCUeJR9lNkAAMAAb6oAAAABA5SElNkAAAAAAAAAXAE+Az0XlI0uwABvoyrAALjCPReUpi7AAG+kKsAAuMM9HJTGLsAAUxcAAAAAwAC4vwbAALjJgiCU3pTjlYEAAMAAb6sAAAABA5T0lYEAAAAAAAAAXAE+A0mU/SIiFpUBLsAAb6PAALjCARaVGxaVEC7AAF7cwAC4vsAAb6zAALqtARaVJy7AAG+hwAC4wD4BSpU5AD89F5VLLsAAb6MpwAC4wj0elWPAALisAQABFpV1LsAAb6rAALjIAAbAALjKgiCXQJdFmMAAAFYAAAABA5dImMAAAAABAQGXSwAAIJvsXwMAAAAAYAPAAPrRAT4HSZdYIRaXXS7AAG+iwAC4wT0el2/AALh7AQABJ8AAb60AP0mXoRaXpS7AAG+kwAC4wz0el7nAALh7AQABJ8AAb64AP0mYISEWmDEWmCYuwABe3MAAuL7AAG+vwAC6rj4BSphGASk/PRyYaBaYXS7AAF7cwAC4vlYBAAGAmGzAXw7NAMAAurg9HJh4LsAAb6sAAAAAwAC4yT0XmJEuwABvpCnAALjDSpiwASoGwAC4y4IgmciZzZusAACcSQAAAAEDmdabrAAAAAEBAZnhAAAggfZdA8AAuhwBXwMAAAAAYAPAAPrRAT4GSZnvIRaZ9C7AAG+iwAC4wT0emgbAALh7AQABJ8AAb60AP0magCEWmpAWmoUuwABe3MAAuL7AAG+vwAC6rkqanQEpPz0Xmq4uwABvoSnAALjATprHmtYAAMAAb7BdA8AAuWgBWwEcmuMWmtguwABe3MAAuL6cSQIAAYCa7cBfD60BwABvhSrAALq7PRybH4GbEMBfEByBrwEBWwE0myQDmySblQAAAAEBAZslAAAAgLVbAABgA8AA/aEBPgM9F5swLsAAb6EqwAC4wD0cm0guwABvqwAAAADAALjJSZtjIRabaC7AAG+jwAC4wj0Xm3UuwABvpCnAALjDPwDAALl7SpucASoGwAC4zIIgm7Gbtp6dAACcRwAAAAEDm76enQAAAAICApvGAAAAgcdgA8AA/eQAm9gAAACGVGADwAD+UgAAXAE+A0mb6iIhHJwCFpvvLsAAb6XAALjESAEAASsAwAD98QAWnCEWnA4uwABvpcAAuMTAAG+fwAC4R8AAueU+Aj0cnK8WnJwuwABvpcAAuMTAAG+cwAC4RwIAAoCcvsBfEO6BnMXAXxD8AMAAugBKnNgAP0mdMiEWnUIWnTcuwABe3MAAuL7AAG+vwAC6rkqdTwA/PRydZhadWy7AAF7cwAC4vpxHAgACgJ1vwF8Q7oGddsBfEPwAwAC6uQbAALjNgiCeop6in68AAIKMAAAAAQOep5+vAAAAAAAAAFsBPgJJnrAiIRyeyBaetS7AAG+lwAC4xEgBAAErAMAA/fEAFp7nFp7ULsAAb6XAALjEwABvn8AAuEfAALnlPgE9HJ91Fp9iLsAAb6XAALjEwABvm8AAuEcBAAErAMAAuf8/PRyfpBafmS7AAF7cwAC4voKMAAAAAMAAuroGwAC4zoIgoHegd6DbAADAAG+mAAAAAQOgf6DbAAAAAAAAAFsBPgNAIRagkC7AAG+iwAC4waCPoKAAPRegpy7AAG+iKcAAuME9HKDELsAAb6sAAAAAwAC4yQbAALjPgiCg4KDgoS4AAMAAb6cAAAABA6DooS4AAAAAAAAAWwE+AUmg8Rag9S7AAG+kwAC4wz4BPRyhES7AAG+rAAAAAMAAuMk/BsAAuNCCIKEzoTOi1wAAwABvqAAAAAEDoTui1wAAAAAAAABbAT4DSaFEFqFTFqFILsAAXtzAALi+uZPAALqsPgFKoWUBKz9JoXwcoZMWoYAuwABvpcAAuMRIAQABKwDAAP3xPgI9F6GkLsAAb6Ufob3AALoLAAFbAADAALjESaJxFqJ1LsAAb6TAALjDPgE9HKKTLsAAb6sAAAAAwAC4yT8/SqK6ARaiwS7AAG+lwAC4xAAAXw0hAF8N0ABfDiQAXw6uAF8PjQBfEM4AXxHGAF8SYwBfErwAXxMGAF8TuAAAAAoCwAC404IhgjOCOYJ7A8AAb7EAAAFgAcAA/eQAAAEEwAC41oIhgnGCeQTAAFMAwAC4RwBeAwABAQFhAwBcAAFXA8AAuEkAXAErAQXAALjYAAAAAAQAAAMAAAAAAAAAAABgA8AAuNMBPwEJAQDAAP36AAAAAAAAAF8UXgAAAAACwAC42YIiha+FtYXtA8AAb7IAAAFgAcAA/eQAAAEEwAC43IIiheOF6wTAAG+zwAC4RwBeAwADAwNgA8AA/JdhAwFgA8AAvU1cYAPAAPrRAAFXA8AAuEoAYAPAAL1NASsBBcAAuN4AAAAABAAAAwAAAAAAAAAAAGADwAC42QE/AQkBAMAA/foAAAAAAAAAXxTzAAAAAALAALjfgiOA74D1gaEDwABvtAABAACCemADwAD95AFbAV0BwAC7LAFfAwAAAAAAAQXAALjjgiOBKoEqgX4AAAADgTqBfgAAAAEBAYFZAAAAwABe3F0DwAC6wwFfAwAAAABdA8AAuN8BXwMAAAE/AQkAgW3AALs3AQABgIFzwF8VRwABBsAAuOGCI4GDgYyBnwEAwABvtQAAAAEDgZiBnwAAAAAAAABgA8AA+tEBSoGbASkAAF8VfwBfFa4AAAABAsAAuOSCI4GkgaqHmAPAAG+2AAEAAIJ6YAPAAP3kAVsBXQHAALs4AV8DAAAAAAYEwAC454IjgfyCDwbAAG+3wAC4RwBgA8AA/JcBaoIOYAPAAPyXFQTAALjogiOCJII1BsAAb7jAALhHAGADwAD8lwFqgjRgA8AA/JchBMAAuOmCI4JKgmgGwABvucAAuEcAYAPAAPyXAWqCZ2ADwAD8l4FXBMAAuOqCI4NGg1UYwABvusAAuEcAYAPAAPyXAZMEwAC464Ijg6ODqFjAAG+7wAC4RwBdA8AAuOQBXwMAAAErBMAAuOyCI4PGg89YwABvvMAAuEcAXQPAALjkAV8DAAABKwEFwAC4+YIjg9SD1ITJAAAAA4PqhMkAAAAFBQWECQAAAMAAXtxdA8AAusMBXwMAAACEIAAAAMAAb71hAwFfAwAAXACEOQAAAIGsYAPAAPyNAIRHAAAAg45hAwBcAIRWAAAAwABvhWADwAD60QAAXQPAALjkAV8DAAABPgE9F4StLsAAb7vAALhHF4S1LsAAb7zAALhHLsAAuOzAALjrAQkAhG3AALtCBQAFgIRzwF8W2oGEf8BfFu+ChIfAXxcBg4SQwF8XD4SEmMBfFxsABwbAALjvgiOEzoTThRsAAMAAb77AALhHAAAAAQOE4IUbAAAAAQEBhOUAAADAAG+/YAPAAPyXAABgA8AA+tEBSoTxARyFERyE/haE8i7AAG+6wAC4R8AAuOqDfAEAAWqFAGADwAD8lxUAwAD8r0gBAAGAhRTAXxezAMAA/bsGwAC48IIjhSCFJYVeAADAAG/AwAC4RwAAAAEDhTOFXgAAAAAAAABcAT4BPReFPC7AAG+6wAC4RxyFSBaFPC7AAG+6wAC4R8AAuOqDwAEAAWqFS2ADwAD8lxUAwAD8scAAuOoGwAC49oIjhWOFbIWbAQDAAG/BwAC4RwAAAAEDhXaFmwAAAAAAAABgA8AA+tEBSoV5ASEchZcchYYWhXouwABvusAAuEfAALjqg3wBAAFqhYhgA8AA/JchAMAA/K9IAQABkwDAAP27BsAAuPGCI4WghaWGBwAAwABvwsAAuEcAAAABA4W6hgcAAAAAAAAAXAE+AkAWhcouwABvwcAAuEfAALj2hcqF0wA9F4XaLsAAb7rAALhHHIXmFoXaLsAAb7rAALhHwAC46oEGAQABaoXpYAPAAPyXgVcAwAD8sMAAuOoGwAC494IjhgyGFYZgAQDAAG/DwAC4RwAAAAEDhiiGYAAAAAAAAABgA8AA+tEBSoYxASEchlwchj4WhjIuwABvusAAuEfAALjqg3wBAAFqhkBgA8AA/JeBVwDAAPyvSAEAAZMAwAD9uwbAALjygiOG2obfhusAAMAAb8TAALhHAAAAAQOG54brAAAAAAAAAFwBPgAGwAC484Ijh2aHa4d4AADAAG/FwAC4RwAAAAEDh3SHeAAAAAAAAABcAT4AAABfF40AXxgJAF8YbABfGNMAXxlNAF8ZtQBfGeAAXxoLAAAABwLAALj6giOHm4eqqusHwABvxgABAACCemADwAD95AFbAWABwAD95AABXQHAALrMAV8DAAAMBMAAuP2CI4gFiBcGwABvx8AAuEcAYAPAAPyXAWqIFmADwAD8lwkEwAC4/oIjiCyIPwbAAG+3wAC4RwBgA8AA/JcBaog+YAPAAPyXFQTAALj/giOIVIhlBsAAb7jAALhHAGADwAD8lwFqiGRgA8AA/JchBMAAuQCCI4h6iIsGwABvyMAAuEcAYAPAAPyXAWqIimADwAD8l4FXBMAAuQGCI4igiLQGwABvycAAuEcAYAPAAPyXAWqIs2ADwAD8l4NdBMAAuQeCI4jMiNQYwABvpgBeAwAAAAAAAVcDwAC4UABcAATAALkIgiOI8Yj5GMAAb6gAXgMAAAAAAAFXA8AAuFEAWwAEwAC5AoIjiSCJJhjAAGQwwAC4RwBgA8AA/JcABMAAuQOCI4lyiYRYwABvysAAuEcAXQPAALjkAV8DAAABKwTAALkEgiOJoomzWMAAb8vAALhHAF0DwAC45AFfAwAAASsEwAC5BYIjif2KDFjAAG/MwAC4RwBdA8AAu1ABXwMAAAErBMAAuQaCI4wujDkYwABvzcAAuEcAXQPAALnXAVsBKwEFwAC5L4IjjD6MPoyWAAAAA4xYjJYAAAACAgKMXgAABMAAb6ZeAwAAAAAAAVcDwAC4UABcAIxtAAAEwABvqF4DAAAAAAABVwPAALhRAFsAAF0DwAC4+gFfAwAAAT8ECAHAALkHgADAXxwmCAHAALkIgQDAXxxACADAALkCaoyIYAPAAPyXCQkBjD7AAP36AAAAACAGwAC5CoIjjJuMso0mAQDAAG/OAAAAAQOMuo0mAAAAAAAAAF4DAAAAAAABVwPAALhQAFwBPgE9MIzAH4zKwAD8KQEAASfAAG/PAAbAALkZgiONK400jb8CAMAAb84AAAABA407jb8AAAABAQGNQQAAAMAAb9BhAwBcAABcAT4BPTCNWR+NY8AA/CkBAAEnwABvzwAGwAC5C4IjjcSN245QAQDAAG+nAAAAAQON5I5QAAAAAAAAAF4DAAAAAAABVwPAALhQAFwBPgE9MI3qH430wAD8KQEAASfAAG/PAAbAALkagiOOVY5ejusCAMAAb6cAAAABA45mjusAAAABAQGObAAAAMAAb9FhAwBcAABcAT4BPTCOhR+Oj8AA/CkBAAEnwABvzwAGwAC5DIIjjxKPII9HAQCB9gAAAAEDjyePRwAAAAAAAABdA8AAuhwBXwMAAAFKjyoBH48uwAC44wEBXwMAAAEuAAbAALkNgiOPTI9ej4UBAIRAAAAAAQOPY4+FAAAAAAAAAF0DwAC6egFfAwAAAUqPZgEfj2rAALtPAQFfAwAAAS4ABsAAuQ6CI4+Kj5OPvAEAuZMAAAABA4+cj7wAAAAAAAAAYAPAAPrRAUqPnwEhHI+4HI+nFo+gLsAAZDDAALhHwAC5AoN8AQABao+pYAPAAPyXgVcAwAD8r0gBAAGTAMAA/bsGwAC5D4IjkGCQaZB6AQDAAG+sAAAAAQOQcpB6AAAAAAAAAGADwAD60QFKkHUBKgbAALkQgiOQvZDGkN4BAMAAb68AAAABA5DSkN4AAAAAAAAAYAPAAPrRAUqQ1QEhFpDWLsAAb9LAALhHwAC5FgbAALkSgiORaZFykdoBAMAAb9PAALhHAAAAAQORgpHaAAAAAAAAAGADwAD60QE+AkAhFpGQLsAAb9LAALhHwAC5FpGPkZgASpGfAR6RpsAA9ngCAAIWkbAuwABvysAAuEfAALkDFpHELsAAb8vAALhHwAC5BAAGwAC5E4IjkjCSOZJjAQDAAG/BwAC4RwAAAAEDkkOSYwAAAAAAAABgA8AA+tEBSpJGASEckl8ckk4WkkcuwABkMMAAuEfAALkCg3wBAAFqklBgA8AA/JchAMAA/K9IAQABkwDAAP27BsAAuRSCI5JoknGSpAEAwABv1MAAuEcAAAABA5KBkqQAAAAAAAAAYAPAAPrRAUqShAEhHJKgHJKMFpKFLsAAZDDAALhHwAC5AoN8AQABapKOYAPAAPyXg10AwAD8r0gBAAGTAMAA/bsGwAC5FYIjkqmSspLaAQDAAG/VwAC4RwAAAAEDkr+S2gAAAAAAAABgA8AA+tEBSpLCARySyhaSwy7AAGQwwAC4R8AAuQJjAQABapLMYAPAAPyXgVcAwAD9xQbAALkdgiOS35Lnk1gAAMAAb9bAALhHAAAAAQOS+JNYAAAAAAAAAF0DwAC51wFbAT4CSZMBIRyTERaTBS7AAG/NwAC4R8AAuQZIAQABKwDAAP3xSpMaARaTIS7AAG/NwAC4R8AAuQY/SpMyAReTOS7AAG/NwAC4Rx+TS8AAugsAAVsAAMAAuQYGwAC5FoIjk3eTgJOmAQDAAG/SwAC4RwAAAAEDk4mTpgAAAAAAAABgA8AA+tEBSpOMARyTnxaTjC7AAG/KwAC4R8AAuQNIAQABKwDAAP3xBsAAuR6CI5Pqk++V8AAAwABv18AAuEcAAAABA5P7lfAAAAABAQGUFgAAIIH5XQPAALjkAV8DAAAAAFwBPgdAHpQxwAD2eAIAAhaUSICUO8BfIbHAAG+7wAC4R8AAuOuAlE/AXyGxAJQxlFwAPReUcICUY8BfIbHAAG+6wAC4RxyUhhaUfy7AAGQwwAC4R8AAuQKDfAEAAWqUiGADwAD8lxUAwAD8r8AAuOpOlOuU8wAAwABv2F0DwAC45AFfAwAAARaU9S7AAG/LwAC4R8AAuQQ9F5UMLsAAb8vAALhHgJUgwF8hscAAuQQ9F5U/gJUywF8hscAAb7vAALhHK8AAuOs9F5VegJVRwF8hscAAb7zAALhHgZVqwF8iNsAAuOxJlXcclYOBlXvAXyI2SAEAASsAwAD98T4BPReVlC7AAG/KwAC4R4CVqcBfIbHAALkDPgE9F5XSgZXKwF8iNsAAb7vAALhHgJXawF8hscAAuOsGwAC5H4IjlfWV+piSAADAAG/ZwAC4RwAAAAEDlgmYkgAAAAEBAZYkAAAggfldA8AAuOQBXwMAAAAAXAE+B0Aelj/AAPZ4AgACFpZWgJZJwF8jIcAAb9rAALhHwAC7Oy4Alj+WaABAIR6Wd8AA9ngCAAIWlo6AloHAXyMhwABvu8AAuEfAALjrgJaVwF8jIQCWdpaiAE6Ww5bMAACdMV0DwAC45AFfAwAAARaW24CWzsBfIyHAAG+8wAC4R8AAuOxOlwSXCQAAg7VdA8AAuOQBXwMAAAEWlxiAlwvAXyMhwABvu8AAuEfAALjrSZcjHJcwgZcnwF8jkUgBAAErAMAA/fE+AT0Xl2suwABvysAAuEeCl4DAXyO8wAC5Az4BPReXooGXmcBfI5HAAG+7wAC4R4KXqsBfI7zAALjrSZe6HJfDgpe+wF8jvEgBAAErAMAA/fE+AT0Xl/0uwABvy8AAuEeBmBHAXyORwAC5BD4BPReYM4KYLsBfI7zAAG+8wAC4R4GYP8BfI5HAALjsPReYYYCYVMBfIyHAAG+7wAC4RxeYdoCYacBfIyHAAG+8wAC4R4CYgsBfIyHAALjswAC46wbAALkggiOYw5jZmv8AAMAAb9vAALhHAAAAAQOY45r/AAAABAQEmOkAAADAAG+9YQMBXwMAAFwAmQIAAACBrGADwAD8jQCZFgAAAIOOYQMAXACZJQAAAMAAb4VgA8AA+tEAAF0DwAC6VQFfAwAAAT4FSZk6Fpk+LrmTwAC5Dj4CPSMcmVeCmVDAXyUCSAEAASsAwAD98YqZUMBfJQJqmVthAwBcwAF/qisBYQMAXEqZcwEfmX7AALwjAQFfAwAAAYKZmcBfJQIAP06ZwpnPAACB+V0DwAC6VQFfAwAAAR+Z1cAAuPkFAV8DAAAFLoCZ/sBfJOKBmgbAXyT0gpoPwF8lAoOaF8BfJQ4APRyaKy7AAG/XwAC4RwEAASaaOAGEmjjAXyWGXQPAALjkAV8DAAAAwAC5HkmaSx6aT8AA9ngCAAIWmlkuwABvysAAuEfAALkDFpptLsAAb8vAALhHwAC5BAA+AT0emsfAALiRAQABFprTLsAAb6bAALkHAD9KmugBhJrvwF8lhgbAALkhgiObBJsLnU0AAMAAb9zAALhHAAAAAQObGJ1NAAAAAQEBmy8AACCVl10DwAC6VQFfAwAAAABdA8AAuWgBWwE+BE6bVJthAACB+V0DwAC45AFfAwAAASabVAGAm2PAXyZrXQPAALjkAV8DAABJm6wem7DAAPZ4AgACFpvHgZu6wF8mi8AAb7vAALhHwAC464GbzsBfJosASpvdASs/SZvuFpv/gZvywF8mi8AAb8HAALhHwAC49j4BPRycH4GcEsBfJovAAG/CwAC4RwAAAADAALjxPgI9HJxLLsAAb9nAALhHAQABgZxbwF8miwDAALkfSZz1IiEWnPouwABvwcAAuEfAALkTABadBy7AAG/SwAC4R8AAuRY+AT0cnRsuwABv3cAAuEcAAAAAwAC5KT9KnT4BKwbAALkigiOdUp1XnYkAAMAAb97AALhHAAAAAQOdY52JAAAAAQEBnXoAACCB+V0DwAC6VQFfAwAAAABcAT4ABsAAuSOCI52NnZKdxQAAwABv38AAuEcAAAABA52fncUAAAABAQGdtgAAIIH5XQPAALpVAV8DAAAAAFwBPgAGwAC5JIIjneWd657OAADAAG/gwAC4RwAAAAEDnfmezgAAAAAAAABgA8AA+5wBPgNJngIWngYuuZPAALkOPgFKnhgBH54jwAD8NwEAASfAAG/hAD9AFp5tLsAAb9TAALhHwAC5FJ5tnnwASp6DAR+ejsAA/DcBAAEnwABv4gAGwAC5KoIjntOe2J8sAABWAAAAAQOe258sAAAAAQEBnt4AACASXwMAAAAAXAE+Akme6iEWnu8uwABv1cAAuEfAALkVPTCe/RyfAy7AAG/gwAC4RwAAAADAALkkPz0cnxkuwABv48AAuEcBAAGAnyPAXyiWAMAAu2wGwAC5K4IjnzGfNqCqAACcRwAAAAEDnz6gqgAAAAIBAp9GAAAAgcdgA8AA/eQAn1kAAACGVGADwAD+UgFqAGADwAD9oXkAXAE+BT2In2zAXykPHp90wAC4iwEAAYCfgsBfKQ8ASZ+OIRafky7AAG/VwAC4R8AAuRU9MJ+hHJ+nLsAAb+DAALhHAAAAAMAAuSQ/Tp/In9QAAIRcYAPAAL1aARyf4xqf28AAvavAAG/kAgACgJ/xwF8pD4Gf+MBfKR0AwAC9wUmgCSEcoBmCoA3AXymBSAEAASsAwAD98T4CPYigKsBfKQ8eoDLAALiLAQABFqBMgqBAwF8pgYHHwAC9XAA9iaBawF8pHRagc4KgZ8BfKYGGVMAAvV0/PRygiS7AAG/lwAC4RwIAAoCglMBfKQ+BoJvAXykdAMAAu20GwAC5LIIjoK+gtqG6AACCjAAAAAEDoLuhugAAAAAAAABdA8AAuWgBWwE+BkmgxBagyC65k8AAuQ4+AkAhHKDtFqDhLsAAb83AALhHwAC5BkgBAAErAMAA/fGg4aD0AEqg/QEWoQQuwABvzcAAuEfAALkGP0mhGyEWoSAuwABv1cAAuEfAALkVPTChLhyhNC7AAG/gwAC4RwAAAADAALkkPz0XoUouwABkMMAAuEccoVEWoUouwABkMMAAuEfAALkCgQYBAAFqoVRgA8AA/JeBVwDAAPywwAC5Ak6hbqF5AADAAG/mXQPAALloAVsBHKF7LsAAb9bAALhHAAAAAMAAuR09HKGULsAAb+fAALhHAAAAAMAAu25KoaUBgKGswF8rCAbAALkXgiOhv6HKoeUBAJ/OAAAAAQOhz6HlAAAAAAAAAF0DwAC5aAFbAUqh0gEcodIuwABv1sAAuEcAAAAAwAC5HQbAALktgiOh6qHxovMAAJxJAAAAAQOh+qLzAAAAAgEBogUAACCB9l0DwAC6HAFfAwAAAAGiEwAAAMAAb4VgA8AA+tEBagBgA8AA/aF5XQPAALloAVsBPgRJoikhFqIuLsAAb9XAALhHwAC5FT0wojwcokIuwABv4MAAuEcAAAAAwAC5JD89F6JYLsAAZDDAALhHHKJfFqJYLsAAZDDAALhHwAC5AoEGAQABaqJiYAPAAPyXg10AwAD8sMAAuQI9F6J4LsAAb8zAALhHH6KOwAC7WwMBXwMAAAMugKKkwF8rsTUAAAABAGADwAD60QGBoqzAXyvFIxyiuoIAwF8sc0gBAAErAAAqggDAXyxzAWADwAD60QDAALkFSqLJARai4Bai0C7AAG/MwAC4R8AAuQXAAG/owAC7UgbAALklgiOjL6M0o1oAALQrwAC4RwAAAAEDozijWgAAAAEBAaM7AAAgEl8DAAAAAFwBPgE9HKNHLsAAb+PAALhHAQABgKNRwF8s7QDAALtsBsAAuSaCI6Nfo2SjugAAwABv6cAAuEcAAAABA6Nto7oAAAACAgKjdQAAAIHHYAPAAP3kAKOHAAAAhlRgA8AA/lIAAFwBPgE9HKOZLsAAb+XAALhHAgACgKOkwF8tP4Gjq8BfLU0AwAC7bQbAALkngiOjv6PEpHQAAMAAbxfAALhHAAAAAQOjyqR0AAAAAAAAAFwBPgVAFqPaLsAAb9TAALhHwAC5FKPao+kATqQApAkAAMAAb+pdA8AAu1ABWwEWpAsuwABvzMAAuEfAALkFPRekIC7AAG/MwAC4RyvAALkFPRekPC7AAGQwwAC4RxykQxakPC7AAGQwwAC4R8AAuQKDfAEAARykRmqkR2ADwAD8l4NdhJIAAAAAwAD8sgDAAPyvwAC5Aj0cpGaApF3AXy3FwABvmQAAAADAALtZBsAAuSiCI6SOpJOqDQAAwABv68AAuEcAAAABA6Sjqg0AAAABAQGksAAAAIjMYQMBXQPAALtxAV8DAABcAABcAT4ISaTsFqTwLsAAb8HAALhHwAC5Ez4BPTClAx+lDcAA/DcBAAEnwABv7AA/SaVuFqVyLsAAb9LAALhHwAC5FkqlfAA/TqWwpbMAALQSYAPAAPyXARylvRalti7AAGQwwAC4R8AAuQKDfAEAAWqlv2ADwAD8lxUAwAD8rz0XpyIuwABkMMAAuEccpykWpyIuwABkMMAAuEfAALkCg8ABAAEcpzxqpyxgA8AA/JcVgQYBAAFqpz5gA8AA/JchAMAA/LAAwAD8scAAuQJOp2uneAAAgfldA8AAuOQBXwMAAAEWp3ouwABvysAAuEfAALkDQ6eSIRynpoKnmcBfL2JIAQABKwDAAP3xPgFJp7ccp8iCp7vAXy9iwABvvsAAuEcBAAGBp9bAXy7cAMAAuO8+Bz01AAAAAQBdA8AAuOQBXwMAAAGCp+XAXy9iF6fyg6fywF8vyMAAb7rAALhHHKf+Fqfyg6fywF8vyMAAb7rAALhHwAC46oEGAQABaqgYYAPAAPyXIQDAAPywwAC46j0cqDWAqC/AXy59IAEAAYKoNsBfL2IAAD0cqFqCqE3AXy9iwABvwMAAuEcAAAAAwAC48E6ojqiTAACDtV0DwAC45AFfAwAAARaoooKolcBfL2LAAG+7wAC4R8AAuOtJqLEWqMKCqLXAXy9iwABvw8AAuEfAALj3PgE9HKjiLsAAb9nAALhHAQABgqjywF8vYgDAALkfPz01AAAAAQBdA8AAuOQBXwMAAAGCqRPAXy9iF6kghKkgwF8wu8AAb7rAALhHHKksFqkghKkgwF8wu8AAb7rAALhHwAC46oN8AQABHKkvaqlHYAPAAPyXIYSSAAAAAMAA/LIAwAD8r8AAuOo9iqlewF8vYoOpbcBfMFc+AT2KqYrAXy9iFqmmgqmZwF8vYsAAb7vAALhHwAC46z0Xqb8uwABkMMAAuEccqcYWqb8uwABkMMAAuEfAALkCg3wBAAEcqclqqcpgA8AA/JchhJIAAAAAwAD8sgDAAPyvwAC5Akmp3hap4i7AAG/SwAC4R8AAuRY+AT0cqfQuwABv3cAAuEcAAAAAwAC5KT8GwAC5KYIjqhKqF6rpAADAAG/dwAC4RwAAAAEDqiSq6QAAAAAAAABcAT4DQBaqNC7AAG/SwAC4R8AAuRaqNKo8AEmqQyIWqkcuuZPAALkOABaqXxaqUy7AAG/NwAC4R8AAuQbAAG+fwAC4R8AAueU+AT0cqrAWqqQuwABvzcAAuEfAALkGwABvmsAAuEcBAAErAMAAugE/PR6q0MAAuJEBAAEWqtwuwABvqMAAuQgAAABfHJ4AXxzoAF8dMQBfHXsAXx3EAF8eBQBfHkYAXx6oAF8e1wBfHxYAXx+MAF8f8wBfIFsAXyC0AF8hPABfIYsAXyL7AF8kvABfJkUAXyd9AF8nuwBfJ/kAXyh3AF8o7wBfKi0AXytPAF8rkQBfLMkAXy0ZAF8tgwBfLlcAXzHCAF8ycQAAACACwAC5MIIjqu6q9LDQA8AAb+0AAQAAgnpgA8AA/eQBWwFdAcAAuPoBXwMAAAABXQHAALq8AV8DAAAAAQXAALk7giOrbqtuq9AAAAADq4yr0AAAAAICAquSAAAAwABvpmEDAFwAq6MAAADAAG+oYQMAXAAAXQPAALkwAV8DAAABPwEJAKu3wAC5LwIAAoCrvcBfM1CBq8fAXzNeAAUGwAC5M4Ijq/Sr/awtAQDAAG/VwAC4RwAAAAEDrAqsLQAAAAAAAABgA8AA+tEBSqwNASIYrBPAAG/VwAC4R8AAuRUAIRasJC7AAG/BwAC4R8AAuRMGwAC5NoIjrDKsMqztAADAAG/gwAC4RwAAAAEDrECs7QAAAAAAAABgA8AA+5wBPgJJrEkWrE0uwABvwcAAuEfAALkTPgFKrGABH6xrwAD8NwEAASfAAG/sAD9KrMwBHazZwABv4MAAuEcAAAAAwAC5JAbAALk3giOs8qz3rtEAAMAAb+PAALhHAAAAAQOtAK7RAAAAAQEBrQMAACASXwMAAAAAXAE+A0mtDxatEy7AAG/SwAC4R8AAuRZKrR0AP0mtKRatLS7AAG/TwAC4R8AAuRI+Bj0XrUYuwABkMMAAuEccrU0WrUYuwABkMMAAuEfAALkCgQYBAAFqrWtgA8AA/JchAMAA/LDAALkCTq2aracAAIH5XQPAALjkAV8DAAABFq2pLsAAb8rAALhHwAC5Az0crdCBrcPAXzT3tCvAALhHAQABgK3VwF80gQDAALuIPRet4i7AAGQwwAC4Rxyt6Rat4i7AAGQwwAC4R8AAuQKDfAEAARyt7GquCGADwAD8lyGEkgAAAADAAPyyAMAA/K/AALkCSa4dFq4hLsAAb9LAALhHwAC5Fj4BPRyuNS7AAG/dwAC4RwAAAADAALkpP0quVAA/PRyuZi7AAG/rwAC4RwEAATSudwOud67MAAAAAQEBrpgAAACB+V0DwAC7cQFfAwAAAABgA8AA/aEBPgE9HK67ga6uwF81zrQrwAC4RwEAAYCuwMBfNIEAwAC7iADAALkoBsAAuTiCI67WrtuvqAAAwABv5cAAuEcAAAABA67lr6gAAAACAgKu7QAAAIHHYAPAAP3kAK7/AAAAhlRgA8AA/lIAAFwBPgJJrxEWrxUuwABv0sAAuEfAALkWSq8fAD89HK8rLsAAb+vAALhHAQABNK88A688r6MAAAABAQGvXQAAAIH5XQPAALtxAV8DAAAAAGADwAD9oQE+AT0cr4CCr3PAXzaNwABv6cAAuEcCAAKAr4rAXzY2ga+RwF82RADAALuJAMAAuSgGwAC5OYIjr62vsrDOAADAAG/nwAC4RwAAAAEDr7uwzgAAAAAAAABcAT4BSa/EIRavyS7AAG/SwAC4R8AAuRY+AT0cr9suwABv68AAuEcBAAE0r+wDr+ywQwAAAAEBAbANAAAAgfldA8AAu3EBXwMAAAAAYAPAAP2hAT4BPRywMoCwJcBfNzfAAG8XwAC4RwAAAADAALuKAMAAuSg+A0AhHLBsFrBgLsAAb83AALhHwAC5BkgBAAErAMAA/fGwYLBzAEAWsI8WsIMuwABvzcAAuEfAALkGwABvn8AAuEfAALnlsIOwmwA9HLCwFrCkLsAAb83AALhHwAC5BsAAb5rAALhHAQABKwDAALoBAABfM5YAXzPqAF80WwBfNhAAXzbYAF835AAAAAUCwAC5PIIjsNOw2bVDA8AAb+4AAQAAgnpgA8AA/eQBWwFdAcAAuPoBXwMAAAAAAAEFwAC5Q4IjsSaxJrGJAAAAA7FFsYkAAAACAgKxSwAAAMAAb6ZhAwBcALFcAAAAwABvqGEDAFwAAF0DwAC5PAFfAwAAAT8BCQCxcMAAuS8CAAKAsXbAXzhMgbGAwF84WgADBsAAuT+CI7GtsbKymgAAwABv48AAuEcAAAABA7G7spoAAAABAQGxvgAAIBJfAwAAAABcAT4BRbHKAbHpsfYAAIH5XQPAALjkAV8DAAABFrH4LsAAb8rAALhHwAC5AwEhHLIhgbIUwF84zEgBAAErAMAA/fEBibIywF84zBayToGyQcBfOMzAAG+7wAC4R8AAuOs+AT0csmqBsl3AXzjMwABv78AAuEcBAAEfsnrAALvYAQFfAwAAAYCyisBfOLgAAMAAu44GwAC5QIIjsp+ypLO1AADAAG/lwAC4RwAAAAEDsq6ztQAAAAICArK2AAAAgcdgA8AA/eQAssgAAACGVGADwAD+UgAAXAE+AUWy2gGy+bMGAACB+V0DwAC45AFfAwAAARazCC7AAG/KwAC4R8AAuQMBIRyzMYKzJMBfOaJIAQABKwDAAP3xAYqzQsBfOaIWs16Cs1HAXzmiwABvu8AAuEfAALjrPgE9HLN6grNtwF85osAAb+/AALhHAQABH7OKwAC74AIAAoCzmMBfOX2Bs5/AXzmLAADAALuOBsAAuUGCI7O6s7+1QQAAwABv58AAuEcAAAABA7PItUEAAAAAAAAAXAE+AUmz0SEWs9YuwABv0sAAuEfAALkWPgFFs+gBtAe0FAAAgfldA8AAuOQBXwMAAAEWtBYuwABvysAAuEfAALkDASEctEGAtDTAXzp1SAEAASsAwAD98QGItFTAXzp1FrRwgLRjwF86dcAAb7vAALhHwAC46z4BPRy0joC0gcBfOnXAAG/vwAC4RwEAAWq0oGADwAC74cABf68AwAC7jj4DQCEctN8WtNMuwABvzcAAuEfAALkGSAEAASsAwAD98bTTtOYAQBa1Aha09i7AAG/NwAC4R8AAuQbAAG+fwAC4R8AAueW09rUOAD0ctSMWtRcuwABvzcAAuEfAALkGwABvmsAAuEcBAAErAMAAugEAAF84kgBfOVcAXzowAF87ZwAAAAMCwAC5RIIjtyS3KryNA8AAb/AAAQAAgnpgA8AA/eQBWwFdAcAAuTABXwMAAAABXQHAALtpAV8DAAABBMAAuUeCI7eut7ZYwABjEsAAuEcAXQPAALv9AV8DAAABKwEFwAC5U4Ijt7u3u7gbAAAAA7fXuBsAAAACAgK33QAAAMAAb6ZhAwBcALfuAAAAwABvqGEDAFwAAF0DwAC5RAFfAwAAAT8BCQC4AsAAuTsCAAKAuAjAXzv0gbgSwF88AgAGBsAAuUqCI7gguCm4XQEAwABv8cAAuEcAAAABA7g1uF0AAAAAAAAAYAPAAPrRAUq4OAEiIRy4QRa4OC7AAGMSwAC4R8AAuUdIAQABKwDAAP3xACEWuFYWuE0uwABjEsAAuEfAALlHgVXAALwCBsAAuU2CI7hiuGe41wAAwABv8sAAuEcAAAABA7h3uNcAAAABAQG4hgAAAJvsXQPAALvLAVsAAFwBPgI9Ixy4nBa4ky7AAGMSwAC4R8AAuUdIAQABKwDAAP3xF7iTLsAAYxLAALhHH7ikwAC8CAABXwMAAAAAwAC5RysBXQPAALv9AV8DAAA9HLjJFrjALsAAYxLAALhHwAC5R1YBAAGAuM3AXzzMAMAAvAQGwAC5T4IjuNy44bmwAABWAAAAAQO45LmwAAAAAQEBuOcAACASXwMAAAAAXAE+A0m48yIhFrj4LrmTwAC5DgAWuQQuwABvwcAAuEfAALkTPgI9HLkXLsAAb/LAALhHAQABH7kswAC72AEBXwMAAAGAuTzAXz1vAADAALlNSrlKAD89HbliVgEAAYC5ZsBfPW8AwAC5KkO5cRa5eC7AAG/xwAC4R8AAuUo+AT0cuZYWuY0uwABjEsAAuEfAALlHwABv8wEAAS4AwAC8BQbAALlQgiO5tbm6uvUAAJxHAAAAAQO5wrr1AAAAAgECucoAAACBx2ADwAD95AC53QAAAIZUYAPAAP5SAWoAYAPAAP2heQBcAT4ESbnwIiEWufUuuZPAALkOABa6AS7AAG/BwAC4R8AAuRM+Aj0cuhQuwABv8sAAuEcBAAEfuinAALvgAgACgLo3wF8+O4G6PsBfPkkAAMAAuU1KulIAP0m6ZCEWumkuwABv1cAAuEfAALkzPTC6dxy6fS7AAG/gwAC4RwAAAADAALk2Pz0cupMuwABv5cAAuEcCAAKAup7AXz47gbqlwF8+SQDAALk4Q7q2Frq9LsAAb/HAALhHwAC5Sj4BPRy62xa60i7AAGMSwAC4R8AAuUfAAG/zAQABLgDAALwFBsAAuVGCI7r6uwG8BgAAgowAAAABA7sGvAYAAAAAAAAAXQPAALloAVsBPgRJuw8iIRa7FC65k8AAuQ4AFrsgLsAAb8HAALhHwAC5Ez4DPRy7My7AAG/ywAC4RwEAAWq7SmADwAC74cABf68AwAC5TT0Xu2EuwABkMMAAuEccu2gWu2EuwABkMMAAuEfAALkCgQYBAAFqu4ZgA8AA/JeBVwDAAPywwAC5Akq7mwEYu6ifzsAAuRc/Tru/u8YAAIF2XQPAALloAVsBHbvOgowAAAAAwAC5LEAhFrvjLsAAb/HAALhHwAC5Srviu+4ASrv1AYC7/MBfP/gGwAC5ToIjvAu8ELyLAADAAG/dwAC4RwAAAAEDvB28iwAAAAAAAABcAT4CSbwmFrwqLsAAb/HAALhHwAC5Sj4CPRy8SBa8Py7AAGMSwAC4R8AAuUeCRgAAAADAALwGPRe8Vy7AAGMSwAC4RyvAALlHPz0dvHjAAG/dwAC4RwAAAADAALkpAABfPDoAXzymAF89UABfPhsAXz9AAF9AOABfQL0AAAAGAsAAuVSCJIGSgbeC8gPAAG/0AmqBt2ADwADLv8ABf7ZqgbdgA8AA+oTAAX/CAAFgAcAA/eQAAAIEwAC5VoIkgdiB4wmGbABgA8AA/n4ABMAAuVeCJIH0gfcJgKwAYAPAAP5+AAEFwAC5W4IkgfyCAoIvAQAAA4IRgi8AAAACAQGCFwAABIZsYAPAAP5+AAGCKgAABICsYAPAAP5+AWoAYAPAAP2heWADwAC5VAE/AwgBwAC5VoAAwF9BXggBwAC5V4EAwF9BbQkBggLAAP36AAAAAAEGwAC5WYIlgVSBaoI/AAClJAFqgWpgA8AAy7/AAX+2AAABA4Fugj8AAAAAAAAAXQPAALloAWADwAD9oQE+A06B3IHjAACB3l0DwAC5aAFbAR6B6cAAuXEBAWADwAD9oQErAD0cghgaggfAALhzVgEAARaCHC6GbMAAuVYAwAD+PEqCLgEmgi4BgII1wF9B8V0DwAC5aAFgA8AA/aEAAF9BsgBfQk4AAAABAsAAuVyCJIMugzSDzQPAAG/2AAABYAHAAP3kAAFgAcAA/GABBMAAuV+CJIPJg8sJwABqxsAAuEcAYAPAAP5+AAEFwAC5Y4Ikg2ODY4OBAAAAA4N4g4EAAAABAQGDfgAABMAAasZgA8AA/n4AAGADwAC5XAE/AggBwAC5X4AAwF9CtwkBg2PAAP36AAAAAAEGwAC5YYIkg4WDjIO4AAAjAAAAAQODlIO4AAAAAAAAAGADwAD+fgFKg5oBJIO4AyfAAG/3FoO0LsAAasbAALhHwAC5XyeDSAAAX0LqAF9DMQAAAAECwAC5ZIImhiOGMob7B5xlAAEAAIJ6YAPAAP3kAVsBYAHAAP3kAAAAAQXAALlngiaGpoamhvkAgLXAALhHAAOGsIb5AAAAAAAAAF0DwAC5ZAFfAwAAAT4BPTCGuR+Gw8AA/CkBAAEnwABv+AABCQGGpsAA/foAAAAAAAAAX0O4AAAAAALAALlogiaXfpeNwABptwcDAAEAAIJ6YAPAAP3kAVsBYAHAAP3kAAACBMAAuWuCJpfkmCQFwABv+cAAuEcAXQPAALnXAWADwAD9oQEfl/zAALoNAgFgA8AA/aECK2qYH2ADwAC9pcABf9EABMAAuWyCJphzmLUFwABv+sAAuEcAXQPAALnXAWADwAD60QEfmIzAALoNAgFgA8AA+tECKmqYsGADwAC9pcABf9EAABAGwAC5boImmsOay5vPBAEAAAAAAQOa0ZvPAAABAACCemADwAD95AFbAQEBmt4AAADAAG/7YQMAXQPAALlkAV8DAQAAAF0DwAC5aAFfAwEAAT4DTpr+mwUAAIF2XQPAALnXAV8DAQABH5sLwAC6CwABXwMBAAAAPR6bI8AAvVIBAAE0mycDmyebtwAAAAAAAABgA8AA/aEBPgFLPgE9HJtHgZtAwF9Ew8AAb/zAALhHAQABHJtcgJtRwF9EmyAAAAAAAADAALn+AQGbaVsBm3AAAAGDU1sAAZtzAAABiGxgA8AA/lIAPgE9HpuAwAC4iQMAA4Gbm8BfRMOCm6PAX0U9g5umwF9FRwAASpu+AYGbxcBfRMMGwAC5b4ImnfGd+Z8PBAHAAG/9AAAAAQOeCZ8PAAABAACCemADwAD95AFbAQEBnhYAAADAAG/7YQMAXQPAALlkAV8DAQAAAF0DwAC5aAFfAwEAAT4DTp42nj0AAIF2XQPAALnXAV8DAQABH55DwAC6CwABXwMBAAAAPR6eVcAAuKwBAAE0nmcDnmee9wAAAAAAAABgA8AA/aEBPgFLPgE9HJ6HgZ6AwF9F2sAAb/zAALhHAQABHJ6cgJ6RwF9FsiAAAAAAAADAALn+AQGeqVsBnrAAAAGDU1sAAZ6zAAABiGxgA8AA/lIAPgE9Hp7AwAC4iQMAA4Ge28BfRdqCnuPAX0ZUg57mwF9GXgAASp7+AYGfBcBfRdoGwAC5cIImoK6gtqMTBAGZ3wAAAAEDoMGjEwAAAQAAgnpgA8AA/eQBWwEBAaDOAAAAwABv+2EDAF0DwAC5ZAFfAwEAAABdA8AAuWgBXwMBAAE+AUs+Ak6g86D6AACBdl0DwAC5ZAFfAwEAARyhB4Cg/MBfRscgAAAAAABJoREloRyBoRXAX0byXQPAALloAV8DAQA+AUqhNAEUoTvAX0byAQFdA8AAuWgBXwMBAD4BSqFaAR+hZcAAug8BAV8DAQABJqF2AYGhdsBfRvJfAwEAAAEBoY1bAaGUAAABgcdbAAGhmwAAAYZUYAPAAP5SAD4ETqGzoboAAIHeXQPAALnXAV8DAQABH6HAwAC6CwABXwMBAAAATqHfoesAAIRcYAPAAL1aARyh+hqh8sAAvavAAG/kAgACgaIIwF9HcoKiD8BfR3wAwAC9wUmiIiEcojKEoibAX0exSAEAASsAwAD98T4BPRyiTIOiRcBfR43AAG+dwAC4RwIAAh6ibcAAuIsBAAEWooeEonvAX0exgcfAAL1cABaim4Sij8BfR7GGVMAAvV0AwAC6Az4BPRyixoOiv8BfR43AAG+dwAC4RwIAAoGi2sBfR3KCouHAX0d8AMAAugNKovwBg6MDwF9HjQbAALlxgialT6VXpakEAYCWAAAAAQOlY6WpAAABAACCemADwAD95AFbAQABpXEAAACAll0DwAC5ZAFfAwEAAWoAYAPAAP2heQBdA8AAuWgBXwMBAAE+AUqlfwEfpYrAALoMAQFfAwEAAYCln8BfSKYABsAAuXKCJqeMp5SpNgQBgccAAAABA6egqTYAAAEAAIJ6YAPAAP3kAVsCAQKnqAAAAIHHYAPAAP3kAKe7AAAAhlRgA8AA/lIBagBgA8AA/aF5AF0DwAC5aAFfAwEAAT4DPYinzsBfSRcep9bAALiLAQABgKfkwF9JFwBJp/AhHqf1wAD2eAIAAhqoBMAAvatqqA1gA8AAvinAAX/RAD4CTqgsqDgAAIRcYAPAAL1aARyoRxqoP8AAvavAAG/kAgACgKhVwF9JF4GoXMBfSSUAwAC9wUmobyEcqH+CqHPAX0mLSAEAASsAwAD98T4CPYioksBfSRceqJrAALiLAQABFqi0gqiowF9Ji4HHwAC9XAA9iajEwF9JJRao3YKo0cBfSYuGVMAAvV0/P0qo+wEfqQbAALoOAgFfAwEAAoCpIMBfSReBqSfAX0klAAbAALlzgias4KzornUEAcAAb/4AAAABA6z2rnUAAAEAAIJ6YAPAAP3kAVsCAQKtAAAAAIG1YAPAAPttAK0XAAAAwABv+2EDAF0DwAC5ZAFfAwEAAWoAYAPAAP2heQBdA8AAuWgBXwMBAAE+A06tOK0/AACBdl0DwAC51wFfAwEAAR+tRcAAugsAAV8DAQAAAD0erVvAAL1PAgACgK1hwF9KZDStawOta65dAAAAAAAAAGADwAD9oQE+AUmtdhythoGtesBfSnJIAQABKwDAAP3xPgE9HK2ggq2ZwF9Ko8AAb/zAALhHAQABKwDAALn+PgFLPgE9HK3fgq3YwF9Ko8AAb/zAALhHAQABHK30ga3pwF9KciAAAAAAAADAALn+AQGuA1sBrgoAAAGDU1sAAa4NAAABiGxgA8AA/lIAPgE9Hq4cwAC4iQMAA4KuN8BfSqODrj/AX0tbhK5CwF9LZQAASq5kAYKua8BfSqMGwAC5dYIms9uz8sAAQKQAAcAAb/8AAAABA7P5wABApAAAAQAAgnpgA8AA/eQBWwMBAbQOAAAAwABwAF0DwAD8+QFdA8AAuWgBXwMBAAACtCMAAADAAHABYAPAAPrRAWq0L2ADwAD60QC0OwAAAMAAVLhhAwFfAwEAXAFqAGADwAD9oXldA8AAuWgBXQPAAP07AV8DAQABPghOtHK0eQABgXZdA8AAudcBXQPAAP07AV8DAQABH7R/wAC6CwABXQPAAP07AV8DAQAAAE60nwAAACldA8AA/TsBXwMBAABOtN205wAAlzpgA8AA/JcBk061HAAAAIHHWwBOtVQAAACGVGADwAD+UgBPtiq2KgAAAcAAcAJhAwJbYAPAAP5SYAPAAP2hAAO2NbjuAAAAAgICtjYAAADAAHADWwC2SwAAAMAAcARgA8AA/lIAAGADwAD9oQE+Aj2NtmLAX0yBHLZrhbZiwF9MgYGNAQABlADAAP2+SbZ1IRy2gIS2ecBfTG5IAQABKwDAAP1lPgNJtpMhHLafgraXwF9MC0gBAAErAMAA/fE+AUa2tLbOtr0AAACAll8DAQAAhLbGwF9Mbj4BSbbcIRy25hS24MBfTU0LAEgBAAErAMAA/fE+AT0etz3AALlwAQFbATS3SQO3Sbd9AAAAAAAAAGADwAD9oQE+AT0ct2WCt17AX0wLIAEAARS3ZsBfTU0LAAAAAD8/PYy3rMBfTG4rSbfDIhy30YW3x8BfTIFIAQABkwDAAP27AYG32cBfS/E+AT0ct/iDt/HAX0w8wABvnMAAuEcCAAIUuAfAX0zSCQAUuBHAX0zdCgAAwAC6AD4CPY64PMBfTJIUuETAX0zSCQA9j7hYwF9MnBS4ZcBfTN0KAEm4iyIcuJmFuI/AX0yBSAEAAZMAwAD9uwAhgbiiwF9L8T4BPRy4v4O4uMBfTDzAAG+cwAC4RwIAAoa4zsBfTJKHuNXAX0ycAMAAugA/Sz4DRrlyuY65ewAAAIHeXQPAALloAV8DAQAAgLmFwF9L1D4DTrmcuaAAAKACYAPAAPyXAYW5osBfTIE9HLm8FLm1wF9OkAkAga8CAVsBNLnBA7nBu/YAAAABAQG5xAAAAICWXwMBAAAAYAPAAP2hAT4CPY2518BfTIEcueCFudfAX0yBgY0BAAGUAMAA/b5Jue4hHLn5hLnywF9MbkgBAAErAMAA/WU+Aj0cuhaEuhDAX0xugL8CAAIUuhfAX06tCgAUuh7AX07kCwAAwAD9S0m6MRy6P4W6NcBfTIFIAQABkwDAAP27PgE9HLpcg7pVwF9MPMAAb5vAALhHAQABhLpvwF9MbgDAALn/Pz4CSbqlIiEcurGCuqnAX0wLSAEAASsAwAD98QAhHLrCFLq8wF9O5AsASAEAASsAwAD98T4BPR67GcAAuXABAVsBNLslA7slu1kAAAAAAAAAYAPAAP2hAT4BPRy7QYK7OsBfTAsgAQABFLtCwF9O5AsAAAAAP0m7diIcu4SFu3rAX0yBSAEAAZMAwAD9uwAhgbuNwF9L8T4BPRy7sIO7qcBfTDzAAG+cwAC4RwIAAoa7v8BfTJKHu8bAX0ycAMAAugA/AYGsFLwBwF9MrQgAwAC5ez2NvN3AX0yBHLzmhbzdwF9MgWQBAAGUAMAA/b1JvPgcvQaFvPzAX0yBSAEAAZMAwAD9uz4BSr0WAR69IcAAuXEBAV0DwAD9OwFfAwEAAWq9Ll0DwAD9OwFgA8AA/aHAAXWWAD89jL1HwF9Mbh69VMAA9pIBAV8DAQABhb1cwF9MgQABAb1uWwG9dQAAAYNTWwABvXgAAAGkNGADwAD+UgA+AUm+EyIcviGFvhfAX0yBSAEAAZMAwAD9uwGBvinAX0vxPgFKv5cBHr+iwAC5cgIBXQPAAP07AV8DAQACFL+vwF9Q7gkAFL+ywF9Q+AoAAD4CPY7AAEBdwF9MkhTAAEBlwF9Q7gkAPY/AAEBwwF9MnBTAAEB9wF9Q+AoASsAAQJMBg8AAQJrAX0w8BsAAuXaCJsAAQk/AAEJgwABECAABgdYAAAABA8AAQmbAAEQIAAABAACCemADwAD95AFbAQEBwABCewAAAMAAcABdA8AA/PkBXQPAALloAV8DAQAAAF0DwAC5aAFfAwEAAT4FTsAAQo7AAEKYAADAAF6kXQPAALmIAV8DAQABHsAAQp7AALmLAAFfAwEAAABOwABCu8AAQsMAAMAAcAVhAwFfAwEAYAPAAP2hATTAAELFA8AAQsXAAEMTAAAAAQEBwABCyAAAAICWXwMBAAAAYAPAAP2hAT4BScAAQtchFsAAQuaBwABC3MBfUfXAAG+ewAC5jj0cwABC/YHAAELzwF9R9cAAb5kBAAGCwABDBsBfUlEAwAC5kD9OwABDHcAAQyUAAIGsYQMCW2ADwAD+UmADwAD9oQE0wABDJwPAAEMnwABDkQAAAAICAsAAQygAAACBx1sAwABDOgAAAKEgYAPAAP5SAABgA8AA/aEBPgFJwABDSSEWwABDWIHAAENOwF9R9cAAb57AALmOPRzAAENvgcAAQ2XAX1H1gd0CAAKDwABDfcBfUtyEwABDhMBfUucAwAC5kT9GwABDl8AAQ7PAAEOgAAAAgd5dA8AAuWgBXwMBAACAwABDqsBfUcc+AT0cwABDwoTAAEO7wF9TUoGvAgFbAYLAAEPHwF9SIQGBrIPAAEPZwF9Sq8AAuXtKwABD7QEWwABD/oHAAEP0wF9R9YHewAC5jQbAALl3gibAAEbHwABG1cAASAIAAYP9AAAAAQPAAEbfwABIAgAAAQAAgnpgA8AA/eQBWwICAsAARuwAAACIal0DwAD8+QFfAwEAAMAARv8AAACIzGEDAV8DAQBdA8AAuWQBWwAAXQPAALloAVsBPgJOwABHHMAARyUAAFxdA8AA/TQBXwMBAAEWwABHMIDAAEcnwF9T8FzAAP0bSsAARz4BHsAAR0XAALl6AQABNMAAR00DwABHTcAAR/0AAAAAAAAAXQPAALlkAWADwAD60QE+BEnAAEdYIRzAAEdmgsAAR13AX1QrXQAAAADAAP02SsAAR3IBKj9OwABHisAAR5EAAIF2XQPAALlkAVsBHMAAR5mBwABHk8BfVAUgAQABFsAAR6OCwABHmsBfVCtewAD9OAAAScAAR7MlwABHvoPAAEe3wF9Usl0DwAC5aAFbSsAAR8kBHMAAR9cUwABH0MBfVLIDAV0DwAC5aAFbga8BAWADwAD60QFqwABH3GEDAVtgA8AA+tHAAX/YAMAAuXs/SsAAR+sBKQAGwAC5eYImwABIRcAASFHAAEhiAAHAAHAGwAC4RwAAAAEDwABIV8AASGIAAAABAQHAAEhYAAAAgLVbAABgA8AA+tEBSsAASF4BKQbAALl6gibAAEw+wABMTMAAUFkAAcAAcAcAAAABA8AATFPAAFBZAAAAAQEBwABMYwAAAIjMYQMAXQPAALlkAWADwAD60QAAXQPAALloAVsBPgVOwABMe8AATIYAAMAAcAhdA8AAudcBWwEfwABMjMAAugsAAVsAAE7AAEyvAAAAwABwCWEDAWADwAD60VwAPYrAAE2lwF9WFhzAAE3CGsAATbrAAL2rwABwCgEBYAPAAPrRATTAAE3bA8AATdvAAFAkAAAAAQEBwABN4QAAAMAAcAtgA8AA+tEAAGADwAD9oQE+AkPAAE30g8AATfvAX1ZlPgROwABOHwAAAIF2XQPAALlkAWADwAD60QBLPgE9jMAATj/AX1aSHMAATk6AwABOSMBfVckgAAAAAAABAcAATlxbAcAATmMAAAGBx1sAAcAATmoAAAGGVGADwAD+UgA+Aj0ewABO8cAAuIoDAAOBwABPEcBfVfCFwABPHcBfVtKGwABPJMBfVt4ASsAATzsAScAAT1UlwABPYITAAE9ZwF9Wkl0DwAC5aAFgA8AA+tE+Aj0cwABPhBTAAE99wF9WkgQBXQPAALloAWADwAD60YGvAgFcAYLAAE+JwF9WFgGBrBbAAE+sgcAAT6HAX1XwwABvnMAAuEfAALoAwAC5e0rAAE/HAD89i8AAT+HAX1ZlJsAAT+EBhMAAT+3AX1aSYAPAAPrRPRzAAFAOgcAAUAPAX1XwwABv/MAAuEcBAAErAMAAuf4AwAC9vz0cwABQOILAAFArwF9WFiABAAEpAABKwABQRAGBwABQS8BfVfAGwAC5e4ImwABZG8AAWSXAAFleAAKBrwAAAAEDwABZLMAAWV4AAAEAAJclYAPAAP3kAVsCAQHAAFk5AAAAwABwBWEDAV8DAABdA8AAuWQBXwMBAAABwABZVQAAAIGsYAPAAPyNAWoAYAPAAP2heV0DwAC5aAFfAwEAAAbAALl8gibAAGBEwABgTsAAYIUAAoHyAAAAAQPAAGBYwABghQAAAAIBAcAAYGIAAACBrGADwAD8jQABwABgcQAAAJcrYQMBYAPAAP3kYAPAAPrRAWoAYAPAAP2heV0DwAC5aAFfAwAAAAbAALl9gibAAGWRwABlm8AAZboAAoH/AAAAAQPAAGWnwABlugAAAAEBAcAAZbEAAACIzGEDAF0DwAC5ZAFbAABdA8AAuWgBXwMAAAAGwAC5foImwABm/MAAZwbAAGcQAALAAHAMAAAAAQPAAGcOwABnEAAAAAAAAABdA8AAuhwBXwMAAAAGwAC5f4ImwABpdcAAaX/AAGm1AALAAHANAAAAAQPAAGmGwABptQAAAAIBAcAAaZAAAADAAHAOYAPAAPttAAHAAGmoAAAgwABwD2EDAF0DwAC5ZAFfAwAAAWoAYAPAAP2heV0DwAC5aAFfAwAAAAAAX0RwAF9FhABfRpsAX0h6AF9I6wBfSjYAX0uiAF9RkQBfU7oAX1VTAF9VnQBfV/8AX1h5AF9Y4gBfWS4AX1lnAF9Z1QAAABACwAC5gIImwABqEMAAahbAAGvUA8AAcBAAAAFgAcAA/eQAAWABwAD8YAIEwAC5goImwABqf8AAaoYJIgBgA8AA/n4ABMAAuYOCJsAAasLAAGrKCYG1AGADwAD7bQABBcAAuYeCJsAAas/AAGrPwABq/gAAAAPAAGrfwABq/gAAAAIBAsAAauUAAAQiYAPAAP5+AMAAavQAAASBtWADwAD7bQFqAGADwAD9oXkAYAPAALmAAT8DCAHAALmCgADAX1qhCAHAALmDgQDAX1qwCQHAAGrPwAD9+gAAAAABBsAAuYWCJsAAawPAAGsKwABr0gAAIwAAAAEDwABrEsAAa9IAAAAAAAAAYAPAAP5+AT4ETsAAayLAAGspAACBdmADwAD+fgEnwABwEEnAAGtDIRzAAGtQFsAAa0cugbXAALmDSAEAASsAwAD7ij2IwABrWcBfWy4kwABrhAInwABwERbAAGt7LoG1wAC5gz9JwABriiEcwABrlhbAAGuOLiLAALmCSAEAASsAwAD+jT2IwABrn8BfWy4kwABruwOAwABrqsBfWy4ng1sWwABrsy4iwAC5gj9KwABrwQGAwABryMBfWy4AAF9a+gBfW+AAAAABAsAAuYiCJsAAcQDAAHEPwACFGQecYAABAACCemADwAD95AFbAWABwAD95AAAAAAGBsAAuYqCJsAAc7/AAHPHwABz7gQBAAAAAAEDwABz0MAAc+4AAAEAAIJ6YAPAAP3kAVsAAAAAXQPAALmIAV8DAQABSsAAc9YBH8AAc9rAALmkAAFfAwEAAAAGwAC5i4ImwAB9RcAAfU3AAH14BAGZ3wAAAAEDwAB9W8AAfXgAAAEAAIJ6YAPAAP3kAVsAAAAAXQPAALmIAV8DAQABSsAAfWEBH8AAfWXAALmrAAFfAwEAAAAGwAC5jYImwAB+E8AAfiHAAH4nAQKB3gAAAAEDwAB+J8AAficAAAAAAAAAXQPAALloAV8DAAAABsAAuZCCJsAAgAjAAIANwACAKgACwABvmQAAAAEDwACAFcAAgCoAAAABAAHAAIAjAAAggJZdA8AAuWQBXwMAAAFqAGADwAD9oXkAXAAGwAC5kYImwACCx8AAgszAAIMAAAKB3QAAAAEDwACC2cAAgwAAAAACAQLAAILhAAAAgcdgA8AA/eQAwACC9AAAAIZUYAPAAP5SAWoAYAPAAP2heQBcAAbAALmOgibAAIUDwACFDMAAhRcBAsAAb54AAAABA8AAhRfAAIUXAAAAAAAAAGADwAD60QAAAF9cHQBfXHYAX1zQAF9dBwBfXVQAX12qAF9d3gAAAAYCwAC5koIYghyCK4UvB8AAcBIAAQAAgnpgA8AA/eQBWwFgAcAA/eQAAV0BwAC5iAFfAwAAAQTAALmUghiCZoJ/CYHeAF0DwAC51wFfAwAAAR+Cc8AAugsAAV8DAAAAAAEFwAC5nQAAAAAEAAADAAAAAAAAAAAAXQPAALmSAV8DAAABPwEJAQDAAP36AAAAAAQGwAC5loIYgoSCiYKmAALAAG+ZAAAAAQOCkYKmAAAAAQABgp8AACCAll0DwAC5ZAFfAwAAAWoAYAPAAP2heQBcAAbAALmXghiCq4KwhE4AAIHdAAAAAQOCvYROAAAAAgECgsUAAACBx2ADwAD95ACC2AAAAIZUYAPAAP5SAWoAYAPAAP2heQBcAT4FPYiC68BfXvAegvPAALiLAQABgIMBwF9e8ABJgw0hFoMZFoMSLoHewAC5lMAAb5/AALhHwAC55T0wgycfgzHAAPw3AQABJ8AAcBMAP06DaIN0AACEXGADwAC9WgEcg4Mag3vAAL2rwABv5AIAAoCDkcBfXvCBg5jAX17+AMAAvcFJg6khHIO5goOtwF9fZ0gBAAErAMAA/fE+Aj2Ig8rAX17wHoPSwAC4iwEAARaD7IKD4MBfX2eBx8AAvVwAPYmD+sBfXv4WhBOChAfAX19nhlTAAL1dPz0chCkuwABvnMAAuEcCAAKAhDjAX17wgYQ/wF9e/gDAALmZBsAAuZmCGIRThFiEiwACwABvnMAAuEcAAAABA4RmhIsAAAACAgKEbgAAAIHHYAPAAP3kAISAAAAAhlRgA8AA/lIAAFwABsAAuZuCGIUBhQqFLQEAwABvngAAAAEDhRaFLQAAAAAAAABgA8AA+tEBSoUZASEWhSEWhRougd7AALmUwABvn8AAuEfAALnlAABfXo8AX17QAF9gEwBfYFgAX2CgAAAABALAALmeghiFMoU4hnUDwABwFAABAACCemADwAD95AFbAV0BwAC5kgFfAwAAAAAAAQXAALmkAAAAAAQAAAMAAAAAAAAAAABdA8AAuZ4BXwMAAAE/AQkBAMAAuZ0AAAAAAgbAALmgghiFZYVqhf4AAMAAb5kAAAABA4Vyhf4AAAABAAGFgAAAIICWXQPAALlkAV8DAAABagBgA8AA/aF5AFwBPgJJhY4hFoWaFoWTLoHewAC5lMAAb5/AALhHwAC55T0whagfhbLAAPw3AQABJ8AAcBMAPz0cheUWhd4ugd7AALmUwABvmsAAuEcBAAGAhfTAX2E7AMAAugEGwAC5ooIYhgOGCIZzAADAAG+cwAC4RwAAAAEDhhaGcwAAAAICAoYeAAAAgcdgA8AA/eQAhjAAAACGVGADwAD+UgAAXAE+AT0chkkWhkIugd7AALmUwABvncAAuEcCAAKAhl3AX2HZgYZkwF9h5wDAALoDAABfYRkAX2GzAF9iJgAAAAICwAC5pYIYhniGfoewA8AAcBUAAQAAgnpgA8AA/eQBWwFdAcAAuZIBXwMAAAAAAAEFwAC5qwAAAAAEAAADAAAAAAAAAAAAXQPAALmlAV8DAAABPwEJAQDAALmdAAAAAAIGwAC5p4IYhqqGr4c+AADAAG+ZAAAAAQOGt4c+AAAAAQABhsUAACCAll0DwAC5ZAFfAwAAAWoAYAPAAP2heQBcAT4CSYbTIRaG3xaG2C6B3sAAuZTAAG+fwAC4R8AAueU9MIbtH4b3wAD8NwEAASfAAHATAD89HIcqFocjLoHewAC5lMAAb/zAALhHAQABgIc0wF9iuQDAALn+BsAAuamCGIdDh0iHrgAAwABvnMAAuEcAAAABA4dWh64AAAACAgKHXgAAAIHHYAPAAP3kAIdwAAAAhlRgA8AA/lIAAFwBPgE9HIeJFoeCLoHewAC5lMAAb5zAALhHAgACgIeYwF9jV4GHn8BfY2UAwAC6AAAAX2KXAF9jMQBfY6QAAAACAsAAuayCGIezh7mWKQPAAHAWAAIAAJZ5YAPAAP3kAVsAAIJ6YAPAAP3kAVsBYAHAAP3kAAARBMAAua6CGIfkh/EGwABbYQBgA8AA/JcBaofwYAPAAPyXFQTAALmvghiIBogTBsAAcBcAYAPAAPyXAWqIEmADwAD8lyEEwAC5sIIYiCiIOQbAAHAYAGADwAD8lwFqiDhgA8AA/JeBVwTAALmxghiITohiBsAAcBkAYAPAAPyXAWqIYWADwAD8l4NdBMAAubKCGIh3iIUGwABwGgBgA8AA/JcBaoiEYAPAAPyXCQTAALmzghiImoivBsAAcBsAYAPAAPyXAWqIpmADwAD8lxUEwAC5tIIYiMSI7AbAAHAcAGADwAD8lwFqiOFgA8AA/JdTBMAAubWCGIkBiRwGwABwHQBgA8AA/JcBaokTYAPAAPyXIQTAALm2ghiJMYlgBsAAcB4AYAPAAPyXAWqJUWADwAD8l4LhBMAAubeCGIl1iZkGwABwHwBgA8AA/JcBaomJYAPAAPyXg10EwAC5uIIYia6J9wbAAHAgAGADwAD8lwFqieVgA8AA/JfAAIqoBMAAubmCGIoMih0GwABwIQBgA8AA/JcBaoobYAPAAPyXg3AEwAC5u4IYinGKfhjAAHAiwAC4RwBdA8AAuawCW1sBKwTAALm8ghiK0IrWCYF2AF0DwAC51wFfAwEAAATAALm9ghiLAosHCYJSAGADwAD8lwAEwAC5voIYi06LVgmZ8QBgA8AA/I0ABMAAub+CGIuIi5UJwABv5ABgA8AA/I0ABAXAALnTghiLmouajIIAga8AA4uujIIAAAADAwOLuwAABIF2XQPAALnXAV8DAQAAi9gAAADAAHAFXgMAAQEBXwMAAAABVwPAALhLAl8DAABfAwEAXQPAALlkAV8DAQAAi+oAAADAAG/kYAPAAPyNAABdA8AAuawCXwMAAF8DAQABPwUIAcAAubyAAMBfZicIAMAAub6BjAzAX2Y6CADAALm/gowtwF9maggAwAC5vSMcjFuCjE3AX2ZqSAEAASsAwAD8kmqMZmADwAD8lxVqjHJgA8AA/JdTAWADwAD8lwkBi5rAAP36AAAAAAXAALnUghiMh4yHjZQAwABwIwADjKCNlAAAAAMDA4ytAAAEgXZdA8AAudcBXwMBAACMygAAAMAAcAVeAwABAQFfAwAAAAFXA8AAuEsCXwMAAF8DAQBdA8AAuWQBXwMBAACM3AAAAMAAb+RgA8AA/I0AAF0DwAC5rAJfAwAAXwMBAAE/BQgBwAC5vIAAwF9nEwgAwAC5voGM/sBfZyYIAMAAub+CjR/AX2dWCADAALm9HI2FIxyNToKNQMBfZ1ZIAQABKwDAAPySao1ZYAPAAPyXFWqNZWADwAD8l1MBYAPAAPyXgQYBAAFqjYdgA8AA/JeDcADAAPywCQGMh8AA/foAAAAABcAAudWCGI2ZjZmOLgCB8gADjbOOLgAAAAMDA425AAAEgXZdA8AAudcBXwMBAACNxgAABMAAb+RgA8AA/I0AjdoAAASZ8WADwAD8jQAAXQPAALmsAl8DAABfAwEAAT8FCAHAALm8gADAX2gVCAHAALm/gQDAX2goCAHAALm+ggDAX2g4CADAALm9IxyN/oKN9cBfaDhIAQABKwDAAPySao4JYAPAAPyXIWqOG2ADwAD8l4LhAWADwAD8lwkBjZnAAP36AAAAAAXAALnWghiOM44zjqsAgf8AA45PjqsAAAACAgKOVQAABIF2XQPAALnXAV8DAQAAjmIAAASZ8WADwAD8jQAAXQPAALmsAl8DAABfAwEAAT8FCAHAALm8gADAX2jcCAHAALm+gQDAX2jvCADAALm/KwgAwAC5vWqOmmADwAD8l4NdCQGOM8AA/foAAAAADwbAALnCghiOsI65js4BAMAAcCTAALhHAAAAAQOOv47OAAAAAAAAAGADwAC9pQFKjsIBFo7JFo7CLoF2wAC5vMAAcCTAALhHwAC54QbAALnHghiO047cjwQBAMAAcCUAAAABA47pjwQAAAAAAAAAYAPAAPrRAUqO7AEhHI7/HI7zFo7tLoJSwAC5vYN8AQABao71YAPAAPyXFQDAAPyvSAEAAZMAwAD9uwbAALnIghiPCI8RjzkBAMAAcCYAAAABA48ejzkAAAAAAAAAYAPAAPrRAUqPIQEhHI80HI8oFo8iLoJSwAC5vYN8AQABao8qYAPAAPyXIQDAAPyvSAEAAZMAwAD9uwbAALnJghiPPY9Gj38BAMAAcCcAAAABA49Tj38AAAAAAAAAYAPAAPrRAUqPVgEcj2gcj10Wj1cuglLAALm9g3wBAAFqj19gA8AA/JfAAIqoAMAA/K9IAQABao9rYAPAAPyXguEAwAD9uwbAALnKghiPg4+Mj8YBAMAAcCgAAAABA4+cj8YAAAAAAAAAYAPAAPrRAUqPnwEcj7Ecj6YWj6AuglLAALm9g3wBAAFqj6hgA8AA/JfAAIqoAMAA/K9IAQABao+0YAPAAPyXg10AwAD9uwbAALnLghiPyo/Tj/kBAMAAcCkAAAABA4/bj/kAAAAAAAAAYAPAAPrRAUqP3gEhHI/0HI/lFo/fLoJSwAC5vYN8AQABao/nYAPAAPyXg3AAwAD8r0gBAAGTAMAA/bsGwAC5w4IYj/6QF5BTAQDAAHAqwAC4RwAAAAEDkCCQUwAAAAAAAABeAwABAQFfAwAAAAFXA8AAuEsCXwMAAF8DAQBdA8AAuWQBXwMBAAE+AkAWkC0uwABwJcAAuceQLZA5AEqQQAEmkEABFpBHLpnxwAC5vl4DAAEBAV8DAAAAAVcDwAC4SwJfAwAAXwMBAF0DwAC5ZAFfAwEABsAAucSCGJBYkGWQfgEAwABwK8AAuEcAAAABA5BukH4AAAAAAAAAYAPAAPyNAUqQcQEWkHEuwABv5MAAub8GwAC5xYIYkIKQl5DVAQDAAHAswAC4RwAAAAEDkKKQ1QAAAAAAAABeAwABAQFgA8AA/eQAAVcDwAC4TABgA8AA+tEBPgJAFpCvLsAAcCfAALnJkK+QuwBKkMIBJpDCARaQyS6Z8cAAub5eAwABAQFgA8AA/eQAAVcDwAC4TABgA8AA+tEGwAC5xoIYkNqQ7JE2AQDAAHAtwAC4RwAAAAEDkQCRNgAAAAAAAABeAwAAAAAAAVcDwAC4TQBbAT4CQBaRDS7AAHAowAC5ypENkRwASpEjASaRIwEWkSoumfHAALm+XgMAAAAAAAFXA8AAuE0AWwbAALnMghiRvJHFkhEBAMAAcC4AAAABA5HWkhEAAAAAAAAAYAPAAPrRAT4CQBaR4y7AAHAmwAC5yJHjke8ASpH2ASEckgYWkf0uwABwK8AAuEfAALnESAEAASsAwAD8kgbAALnOghiSFpIikoUAAMAAcC8AAAABA5ItkoUAAAABAQGSMAAAIMAAcDBfAwAAAABdA8AAuWQBXwMBAAE+AUqSRAEcklEWkksuwABwJMAAuEfAALnCpLQCAl0DwAC5ZAFfAwEAXwMAAAIWkmouwABwKsAAuEfAALnDgJJ0wF9tzgDAAL2zBsAAuc+CGJKKko+TJgAAwABwMQAAAAEDkp+TJgAAAAEBAZKrAAAAwABwMmADwAC9WgAAYAPAAPrRAT4CSZK9IRaSwi7AAHAnwAC5yUqS0AEpP0qS4QEcku4WkuguwABwJMAAuEfAALnCpLQCAmADwAD60WADwAD95AIWkwUuwABwLMAAuEfAALnFFpMcgJMRwF9uVIHHwAC9XADAAL2zBsAAudCCGJMrkzeVuwAAwABwAgAAAAEDk0KVuwAAAAEBAZNOAAAAwABwMmADwAC9WgAAXQPAALlkAV8DAQABPgNAIhaTZy7AAHAmwAC5yAAWk3cuwABwLsAAucyTZ5OHAE6TkpOgAADAAG/kYAPAAPyNARaTpy7AAG/kwAC5v0mUYyWUdYGUZ8BfbzNhAwJgA8AA/eRgA8AA/lJbPgFKlKYBJpSmARyUsxaUrS7AAHAkwAC4R8AAucKktgMDW2ADwAD95GADwAD+UgMUlOXAX28zAQFhAwJgA8AA/eRgA8AA/lJbFpT/gJT0wF9u84HHwAC9XBaVEYCVBsBfbvOGVMAAvV0AwAC9tF0DwAC5ZAFfAwEAPgJAJZVGgZU4wF9vM2EDAWADwAD95FuVOJVhAEqVagEmlWoBHJV3FpVxLsAAcCTAALhHwAC5wqS0AgJbYAPAAP3kAiaVkQGBlZHAX28zYQMBYAPAAP3kWxaVq4CVoMBfbvOBx8AAvVwAwAC9s10DwAC5ZAFfAwEABsAAudGCGJXAlciWJwAAwABwMwAAAAEDldqWJwAAAAAAAABbAT4CQCEWlesuwABwJsAAuciV6pX3AEqV/gEclgsWlgUuwABwJMAAuEfAALnCgp8BAVsBFpYPLsAAcC3AALhHwAC5xgDAAL2yAABfaU0AX2mYAF9p9QBfalIAX2q7AF9rJABfa4IAX2wcAF9sWgBfbN4AX21MAF9trABfbjIAX27RAF9wXQBfcMkAAAAPAsAAudeCGJYsljLAAGj5A7L2AWqWMmADwADLv8ABf7YBAACCemADwAD95AFbAWABwAD95AABXQHAALloAV8DAAAJBMAAudqCIKOlo60YwABwNMAAuEcAYAPAAPyNASsEwAC524IYlwaXGgbAAHA1wAC4RwBgA8AA/JcBapcZYAPAAPyXCQTAALncghiX65gEBsAAcDbAALhHAGADwAD8lwFqmANgA8AA/JcVBMAAud2CGJjWmOcGwABwN8AAuEcAYAPAAPyXAWqY5mADwAD8lyEEwAC53oIYmTaZRQbAAHA4wAC4RwBgA8AA/JcBaplEYAPAAPyXgVcEwAC534IYmZWZpAbAAHA5wAC4RwBgA8AA/JcBapmjYAPAAPyXg10EwAC54IIYmeOZ/BjAAGQwwAC4RwBgA8AA/JcBapnsYAPAAPyXCQTAALnhghibDJsRCcAAcCTAALhHAGADwAC9pQAEwAC54oIYnaeduRjAAHA6wAC4RwBbASsFBcAAuguCGJ3sneyeDAAAAAOd854MAAAAAAAAAF0DwAC51wFfAwAAAT8CCADAALnhGp4FwAC9qwkBnezAAP36AAAAAAXAALoMghieEZ4Rnm4AwABwOwADniKebgAAAAEBAZ4vAAAAgXZdA8AAuWQBXwMAAAAAXQPAALnXAV8DAAABPgE9HJ5ULsAAb5rAALhHAQABgJ5jwF9y6QDAALoBAggAwAC54RqeRsAAvasJAZ4RwAD9+gAAAAAFwAC6DYIYnrSetJ71AMAAcDwAA57FnvUAAAACAgKeyAAAAICWXwMAAACe1AAABMAAcCRgA8AAvaUAAF0DwAC51wFfAwAAAT4BPRye4S7AAHA9wAC4RwEAAYCe68Bfc18AwAC59AIIAcAAueGBAMBfc2sJAZ60wAD9+gAAAAAFwAC6DoIYnvqe+p+CAMAAcD4AA58Qn4IAAAACAQKfFQAAAIHHWwCfKAAAAIZUYAPAAP5SAWoAYAPAAP2heQBdA8AAudcBXwMAAAE+AT0cn1guwABvncAAuEcCAAKAn2zAX3PdgZ9zwF9z5gDAALoDAggAwAC54RqfSsAAvasJAZ76wAD9+gAAAAAFwAC6D4IYn8ufy6AHAICWAAOf2KAHAAAAAQEBn9sAAACAll8DAAAAAF0DwAC51wFfAwAAAT8BCgCf6cAAug0CAAKAn/PAX3RlGp//wAC9qwAjBsAAueWCGKAMoBWgPwEAwABvn8AAuEcAAAABA6AioD8AAAAAAAAAYAPAAPrRAUqgJQEcoCwWoCUuwABkMMAAuEfAALngSAEAAWqgL2ADwAD8lwkAwAD9uwbAALnmghigQ6BMoIEBAMAAcD/AALhHAAAAAQOgX6CBAAAAAAAAAGADwAD60QFKoGIBHKBpFqBiLsAAZDDAALhHwAC54EgBAAFqoGxgA8AA/JcVAMAA/bsGwAC554IYoIWgjqDAAQDAAHBAwAC4RwAAAAEDoJ6gwAAAAAAAAABgA8AA+tEBSqChARygqBagoS7AAGQwwAC4R8AAueCBawEAAWqgq2ADwAD8lxUAwAD9xgbAALnoghigxKDNoPIBAMAAcEHAALhHAAAAAQOg2KDyAAAAAAAAAGADwAD60QFKoNsBHKDiFqDbLsAAZDDAALhHwAC54EgBAAFqoOVgA8AA/JchAMAA/bsGwAC56YIYoPag/6EjAQDAAHBCwAC4RwAAAAEDoQuhIwAAAAAAAABgA8AA+tEBSqEOARyhFRahDi7AAGQwwAC4R8AAueCBbQEAAWqhGGADwAD8l4FXAMAA/cgGwAC56oIYoSehMKFSAQDAAHBDwAC4RwAAAAEDoTqhUgAAAAAAAABgA8AA+tEBSqE9ARyhRBahPS7AAGQwwAC4R8AAueBIAQABaqFHYAPAAPyXg10AwAD9uwbAALnvghihV6Fto/UAAcAAcETAALhHAAAAAQOhg6P1AAAAAQEBoZQAAACB3l0DwAC51wFgA8AA/eQAAF0DwAD9OwFgA8AA/I0BPgNOobGhuAAAgXZdA8AA/TsBYAPAAPyNAStBQ6HEKT4FSaHZFqHkgKHdwF921cAAcEDAALhHwAC550qh9QGBofzAX3b8P0AhFqIZgKISwF921cAAcELAALhHwAC56aIRoiQAQCEWojyAojXAX3bVwABwQcAAuEfAALnoojSiRgBOoqKiqwAAqfhdA8AAuawCYAPAAP3kYAPAAP3kASaiogEWorSAoq3AX3bVwABwOsAAuEfAALniXQPAALmsAmADwAD95GADwAD95EmiziIiIRyi24Ki0sBfd3pIAQABKwDAAP3xAByjBxai+YKi8MBfd3rAAHAiwAC4R8AAubtIAQABKwDAAP3xABajJYKjHMBfd3rAAHApwAC5yz4DPRyjUjUAAAABAF0DwAD9OwFgA8AA/I0BgaM5wF92/CMco0CDAMBfeBtIAQABKwDAAP1liaM5wF92/DGjTmADwAD8jQCDAMBfeBsBXQPAAP07AWADwAD8jVYBAAEWo1+Co1bAX3d6wABwL8AAuc4AwAD9TD2Io3XAX3bVFqOHgqN+wF93eoF2wAC5vEAhFqOmgKOfwF921cAAcELAALhHwAC56aOeo7EAPgFCo8sASqPkAYGj68BfdvwGwAC58IIYo/qj/6R5AADAAHBFwAC4RwAAAAEDpAqkeQAAAAEBAaQTAAAAg0pdA8AAudcBWwAAXAE+A0AWpCguwABwQMAAuEfAALnnpCikNwA9F6Q+LsAAZDDAALhHaqRHYAPAAPyXIcAAueA9F6RaLsAAcDrAALhHgKRvwF949cAAueIGwAC6BYIYpH6kiKbmAACBrwAAAAEDpI+m5gAAAQAAlyVgA8AA/eQBWwIBAaScAAAAgaZhAwFfAwAAXQPAALlkAV8DAQAAAaSyAAAAgaxgA8AA/I0BagBgA8AA/aF5XQPAALloAV8DAQABPgVOpMek0wAAwABwRmADwAC9pQEapNrAAL2rSaTnIR6k7MAA9ngCAAKCpPbAX3nAaqUDYAPAAL4pwAF/0QA+Aj2IpRfAX3l/HKUngqUbwF95wMAAcEcBAl0DwAC5ZAFfAwEAXwMAAAGApU3AX3l/AMAAvblJpVchHKVjgaVbwF95mkgBAAErAMAA/JI+AT2JphzAX3maHqYmwAC4jAIAAoGmPMBfeZqCpkXAX3nAAD8/TqZwpncAAIF2XQPAALnXAV8DAQABH6Z9wAC6CwABXwMBAAAAPRymjy7AAG/XwAC4RwEAAR+moMAAudMDAl8DAABfAwEAA4Omu8Bfem+ApsPAX3l/gabGwF95mgAAwAC5+Eqm1QGDptzAX3pvBsAAufGCGKgoqDKo/QAAwABwSMAAuEcAAAABA6g/qP0AAAEAAIPQYAPAAP3kAVsCAgKoUwAAAIGmYQMBXwMAAF0DwAC5ZAFfAwEAAKhoAAAAgaxgA8AA/I0AAF0DwAC5aAFfAwEAAT4DTqiCqIkAAIF2XQPAALnXAV8DAQABH6iPwAC6CwABXwMBAAAAPRyooS7AAG/XwAC4RwEAAR+ossAAudQDAl8DAABfAwEAA4Ko0sBfe0SAqNrAX3sMgajdwF97JgAAwAC5+Eqo7AGCqPPAX3tEBsAAugaCGKkCqQyqiQAAgfIAAAABA6kWqokAAAACAQGpIAAAAIGsYAPAAPyNAAGpLwAAAJcrYQMBW2ADwAD60QFqAGADwAD9oXldA8AAuWgBXwMAAAE+BE6pTqlVAACBdl0DwAC51wFfAwAAAR+pW8AAugsAAV8DAAAAAEmpbSEeqXLAAPZ4AgACFqmDgql8wF98CMAAcCTAALhHwAC54WqpimADwAC+KcABf9EAPgI9iKmewF97zx6pqMAAuIwCAAKAqb7AX3vPFqnOgqnHwF98CMAAcCTAALhHwAC54QBJqdwhHKnlgangwF973kgBAAErAMAA/fE9ianuwF973hyqAhap/IKp9cBffAjAAHAkwAC4R8AAueHAAHBHAQJgA8AA+tFbAYGqGMBfe94AwAC9uT8/PRyqKS7AAG/XwAC4RwEAAR+qOsAAudUDAl8DAABfAwAAA4KqW8BffAiAqmPAX3vPgapswF973gAAwAC5+EqqeAGCqn/AX3wIBsAAugeCGKqOqpirtgAAgf8AAAABA6qkq7YAAAABAQGqrQAAAIjMYQMAWwAAXQPAALloAV8DAAABPgROqsiqzwAAgXZdA8AAudcBXwMAAAEfqtXAALoLAAFfAwAAAABJquchHqrswAD2eAIAAhaq/YGq9sBffWjAAHAkwAC4R8AAueFqqwRgA8AAvinAAX/RAD4BPYirGMBffUwcqy4WqyiBqyHAX31owABwJMAAuEfAALnhwABwSQEBWwGAq0jAX31MAMAAvbg/PRyrWy7AAG/XwAC4RwEAAR+rbMAAudYCAl8DAABfAwAAAoGrj8BffWiAq5fAX31MAADAALn4SqulAYGrrMBffWgGwAC6CIIYq7urxavxAADAAHAMAAAAAQOrzavxAAAAAAAAAF0DwAC6HAFfAwAAAUqr0wEeq9fAALokAQFfAwAAAS4ABsAAufKCGKv2q/usUwAAwABwSsAAuEcAAAABA6wOrFMAAAAAAAAAXAE+AkAWrB4uwABvn8AAuEfAALnlrB6sKgA9F6wxLsAAZDDAALhHaqw6YAPAAPyXFcAAueAGwAC584IYrFisXay4AADAAHBLwAC4RwAAAAEDrHKsuAAAAAAAAABcAT4CQBasgi7AAHA/wAC4R8AAueasgqyUAD0XrJsuwABkMMAAuEdqrKRgA8AA/JcJwAC54AbAALnrghisvazMrQ0BAMAAcEzAALhHAAAAAQOs060NAAAAAAAAAGADwAC9WgE+AkAWrOAuwABwQ8AAuEfAALnqrOCs6QBKrPABJqzwARas9y7AAHA6wAC4R8AAueJgA8AAvVoGwAC57IIYrRKtHq1mAQDAAHBNwAC4RwAAAAEDrSutZgAAAAAAAABdA8AAudcBWwE+AkAWrTguwABwQcAAuEfAALnorTitQgBKrUkBJq1JARatUC7AAHA6wAC4R8AAueJdA8AAudcBWwbAALn0ghitlK2ZrioAAMAAcD3AALhHAAAAAQOtoq4qAAAAAQEBraUAACCAll8DAAAAAFwBPgNAIRatui7AAHBCwAC4R8AAuemtua3FAD0XrfIuwABkMMAAuEdqrftgA8AA/JeBV8AAueA9F64MLsAAcDrAALhHgK4hwF+AI8AAueIGwAC59YIYri+uNK7UAADAAHBOwAC4RwAAAAEDrkOu1AAAAAEBAa5PAAAAgcdgA8AAvVoAAFwBPgNAIRauZC7AAHBCwAC4R8AAuemuY65vAD0XrpwuwABkMMAAuEdqrqVgA8AA/JeDXcAAueA9F662LsAAcDrAALhHgK7LwF+ApcAAueIGwAC59oIYrtmu3q9JAADAAHBPwAC4RwAAAAEDruevSQAAAAICAq7vAAAAgcdgA8AA/eQArwEAAACGVGADwAD+UgAAXAE+AT0crxMuwABwTsAAuEcBAAEfryfAAL1nAgACgK8ywF+BKYGvOcBfgTcAAMAAufUGwAC594IYr9qv37CKAADAAHBQwAC4RwAAAAEDr+uwigAAAAEBAa/0AAAAg0pdA8AAudcBWwAAXAE+BEAhFrAKLsAAcELAALhHwAC56bAJsBUAQBawKoCwI8BfgZ7AAHBCwAC4R8AAuemwI7A1AD0XsDwuwABkMMAAuEcWsEyAsEXAX4GewABkMMAAuEfAALngwAC54D0XsFguwABwOsAAuEcWsHSAsG3AX4GewABwOsAAuEfAALniwAC54gbAALn4ghiwj7CUs3wAAMAAb9fAALhHAAAAAQOwoLN8AAAAAQEBsLEAAACp+F0DwAC5rAJbWwAAXAE+AkAcsN8WsNGAsMjAX4JawABwIsAAuEfAALm7SAEAASsAwAD98bDIsOYASbDtFrDxLsAAcEDAALhHwAC55z4CPRexE4CxCsBfglrAAHAiwAC4RyaxEwEWsSMuwABwOsAAuEfAALniXQPAALmsAltbwAC5uz0XsT0uwABwOsAAuEeAsVLAX4JawAC54j4DSbFvFrFzLsAAcEHAALhHwAC56D4DTrIpsjAAAINKXQPAALnXAVsBFrIyLsAAcE3AALhHwAC57EmySCEWslSBsk3AX4MSwABwQsAAuEfAALnpPgI9HLJ0gbJtwF+DEsAAb9fAALhHAQABgLKBwF+CWgDAALn4SrKWAD89HLKwLsAAcFDAALhHAQABgbK9wF+DEgDAALn3P0AWstsuwABwQsAAuEfAALnpstuy5gA9HLMkFrMeLsAAcCTAALhHwAC54cAAcFEBAAE0szYDszazcQAAAAAAAABgA8AA/aEBPgE9HrNDwAC6BAIAAi6As1/AX4JaAADAAL3CBsAAufmCGLOBs4a3bgAAwABwUsAAuEcAAAABA7OXt24AAAABAQGzqAAAAMAAUONdA8AAuawCW1sAAFwBPgJJs7kcs8eAs73AX4QbSAEAASsAwAD98Uqz0AA/SbPcFrPgLsAAcEDAALhHwAC55z4DTrQJtBsAAMAAcFNdA8AAuawCW1sBJrQJARa0HS7AAHA6wAC4R8AAueJdA8AAuawCW1s9F7Q3LsAAcDrAALhHgLRMwF+EG8AAueJJtF0hHLRzgbRhwF+EZUgBAAErAMAA/fE+A060lrSdAAC5f10DwAC5rAJbWwGAtJ/AX4QbQ7SyIRy0zha0wIK0ucBfhMnAAHAiwAC4R8AAubtIAQABKwDAAP3xPgE9irTjwF+EyRa084K07MBfhMnAAHAiwAC4R8AAubs9F7UbgrUUwF+EycAAcCLAALhHgbUrwF+EZcAAubs/PgRJtVkWtV0uwABwQcAAuEfAALnoPgNOthO2GgAAg0pdA8AAudcBWwEWthwuwABwTcAAuEfAALnsSbYyIRa2PoG2N8BfhWDAAHBCwAC4R8AAuek+Aj0ctl6BtlfAX4VgwABwUsAAuEcBAAGAtnDAX4QbAMAAuflKtoYAPz0ctqAuwABwUMAAuEcBAAGBtq3AX4VgAMAAufc/QBa2yy7AAHBCwAC4R8AAuem2y7bWAD2Itt/AX4QbHLbrLsAAcFTAALhHAQABgLb9wF+EGwDAALn7PRy3FRa3Dy7AAHAkwAC4R8AAueHAAHBRAQABNLcnA7cnt2MAAAAAAAAAYAPAAP2hAT4BPR63NMAAugQCAAIugLdQwF+EGwAAwAC9wgbAALn6ghi3c7eDuJMAAMAAcFXAALhHAAAAAQO3k7iTAAAAAAAAAF0DwAC5rAJbWwE+BEAhFrgLLsAAcELAALhHwAC56bgKuBYATrgtuDUAAF5dA8AAuawCW1sBJrgtARa4Ny7AAHA6wAC4R8AAueJdA8AAuawCW1s9F7hPLsAAcDrAALhHK8AAueJKuG4BHLh1LsAAcFTAALhHAQABgLiHwF+GsQDAALn7BsAAufuCGLiYuKi51QAAwABwVMAAuEcAAAABA7i5udUAAAABAQG4ygAAAMAAUONdA8AAuawCW1sAAF0DwAC5rAJbWwE+BE646wAAAMAAaDBdA8AAuawCW1sATrkFuQ0AAF5dA8AAuawCW1sBgLkPwF+HNkO5HiEcuS2CuSXAX4drSAEAASsAwAD98T4ETrlOuVMAAIO1XQPAALmsAltbARa5XYK5VcBfh2vAAHAiwAC4R8AAubs9F7l6grlywF+Ha8AAcCLAALhHgbmKwF+HV8AAubs9ibmWwF+HV4K5ncBfh2s9irmswF+Ha4O5tsBfh55KucYBgbnNwF+HVwbAALn8ghi6z7rbwABAGwABwABwVsAAuEcAAAABA7ruwABAGwAAAAICArr2AAAAg0pdA8AAuWgBWwC7BgAAAIJJXQPAALnXAVsAAFwBPgRAIRa7I4G7HMBfiEfAAHBCwAC4R8AAuem7G7suAEAhJbtDgLs8wF+IN10DwAC51wFbuzy7TgA9HLudgbuWwF+IR8AAcErAALhHAAAAAMAAufJLPgE9HLvLgLvEwF+IN4GvAgFbATS70AO70L0jAAAAAQEBu9EAAACAllsAAGADwAD9oQE+A0AWu/CBu+nAX4hHwABwP8AAuEfAALnmu+m8AgA9HLy9gby2wF+IR8AAcEvAALhHAAAAAMAAufM9HL0Kgb0DwF+IR8AAb/zAALhHAQABgr0UwF+IzwDAALn+AYGsNL5BA75BvsgAAAACAQK+QgAAAIHHWwC+VQAAAIZUYAPAAP5SAWoAYAPAAP2heQBgA8AA/aEBPgJAFr56gb5zwF+IR8AAcD/AALhHwAC55r5zvowAPRy+noG+l8BfiEfAAG+cwAC4RwIAAoK+rcBfiUyDvrTAX4lVAMAAugDAALl7AQG+0VsBvtgAAAGDU1sAAb7bAAABiGxgA8AA/lIAPgE9Hr/NwAC4rAEAATS/3wO/38AAQBAAAAAAAAAAYAPAAP2hAT4BPRy/84G/7MBfiEfAAG+cwAC4RwIAAoLAAEACwF+JxYPAAEAFwF+JzwDAALoAAAbAALn9ghjAAEC0wABAwMAAQtUAAcAAcFfAALhHAAAAAQPAAEDQwABC1QAAAAICAsAAQNkAAACDSl0DwAC51wFbAMAAQOkAAACCSV0DwAC51wFbAABcAT4DQBbAAEEFgcAAQP7AX4p0wABwQMAAuEfAALnnwABA/sAAQRQAQ8AAQUIWwABBUIDAAEFJwF+KYsAAcEHAALhHwAC56D4BPYjAAEFkwF+KYhbAAEF0gMAAQW3AX4piwABwTcAAuEfAALnsScAAQYwWwABBl4DAAEGQwF+KYsAAcELAALhHwAC56T4DTsAAQbzAAEHGAADAAFDjXQPAALmsAltbARzAAEHPgcAAQcjAX4p0wABwVcAAuEcAAAAAwAC5+j0cwABB8IHAAEHpwF+KdMAAcFDAALhHAQABgMAAQf3AX4piAMAAufc9HsAAQgzAALoEAgACgcAAQiLAX4p0gsAAQirAX4sWAD4DTsAAQlnAAEJjAADAAFDjXQPAALmsAltbASbAAEJZARbAAEJsgcAAQmXAX4p0wABwOsAAuEfAALniXQPAALmsAltbPRzAAEKNgcAAQobAX4p0wABwRcAAuEcBAAGAwABCmcBfimIAwAC58D0cwABCr4DAAEKowF+KYsAAcFLAALhHAQABgsAAQsHAX4uXAMAAufkGwAC5/oIYwABC2sAAQt/AAERQAADAAG/8wAC4RwAAAAEDwABC6MAARFAAAAABAQHAAEL1AAAggJZdA8AAuWQBXwMAAAAAXAE+AkAhFsAAQwouwABwQsAAuEfAALnpwABDCcAAQxUAScAAQxwlwABDJoDAAEMgwF+MWF0DwAC5aAFfAwAAPgFJwABDPCXAAENGFMAAQ0DAX4xYAAFdA8AAuWgBXwMAAF0DwAC51wFfAwAAPgE9HsAAQ1/AALn9AgACFMAAQ3DAX4xYAAFdA8AAudcBXwMAAC4APgE9HsAAQ5XAALn8AgACFMAAQ6nAX4xYAAFdA8AAuWgBXwMAAC4APgNOwABD4sAAQ+wAAMAAUONdA8AAuawCW1sBHMAAQ+4uwABwVcAAuEcAAAAAwAC5+j0cwABECC7AAHA9wAC4RwEAASbAAEQSAYDAAEQSwF+MWF8DAAAAwAC59D0ewABEIMAAugQCAAIugcAARDzAX40rAAbAALn/ghjAAERVwABEWsAARSwAAMAAb5vAALhHAAAAAQPAAERswABFLAAAAAEBAcAARG8AACCAll8DAAAAAFwBPgVAIRbAAESELsAAcELAALhHwAC56cAARIPAAESPAEAhJcAARKOAwABEncBfjctdA8AAuWgBXwMAAMAARJ3AAESwAE7AAETIwABE0gAAwABQ410DwAC5rAJbWwEcwABE1C7AAHBVwAC4RwAAAADAALn6PRzAAETsLsAAcD3AALhHAQABgMAARPbAX43LAMAAufQ9HsAARQLAALoEAgACLoHAAEUewF+OIAAGwAC6AIIYwABFMcAARTbAAEYNAADAAG+cwAC4RwAAAAEDwABFRMAARg0AAAACAQLAAEVMAAAAgcdgA8AA/eQAwABFXwAAAIZUYAPAAP5SAWoAYAPAAP2heQBcAT4EQCEWwABFei7AAHBCwAC4R8AAuenAAEV5wABFhQBOwABFncAARacAAMAAUONdA8AAuawCW1sBHMAARakuwABwVcAAuEcAAAAAwAC5+j0cwABFwS7AAHBPwAC4RwIAAoDAAEXLwF+OtoHAAEXSwF+OxgDAALn2PR7AAEXjwAC6BAIAAi6CwABF/8BfjwIABsAAugGCGMAARhLAAEYXwABJdAAAwABvmsAAuEcAAAABA8AARiXAAEl0AAAAAQEBwABGMgAAIICWXQPAALlkAV8DAAAAAFwBPgRAIRbAAEZHLsAAcELAALhHwAC56cAARkbAAEZSAEnAAEjEJcAASM6AwABIyMBfj6FdA8AAuWgBXwMAAD4CPRzAAEjkLsAAcFjAALhHAQABFMAASPHAX4+hAAFdA8AAuWgBXwMAAADAALoCSsAASP8APz0cwABJES7AAHBKwAC4RwAAAADAALnyPRzAAEkyFsAASSwuwABwJMAAuEfAALnhwABwUQEAATTAAElEA8AASUTAAElvAAAAAAAAAGADwAD9oQE+AT0cwABJTy7AAG+bwAC4RwEAASbAAEliAYDAAEliwF+PoV8DAAAAwAC5/wDAAL3CBsAAugKCGMAASXnAAEl+wABLXAAAwABwWMAAuEcAAAABA8AASYrAAEtcAAAAAQEBwABJlQAAIICWXQPAALloAV8DAAAAAFwBPgJJwABJoiXAAEmsgMAASabAX5DfXQPAALnXAV8DAAA+AknAAEnDFsAASc0UwABJx8BfkN8AAV0DwAC51wFfAwAAwABw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XQPAALloAV8DAQA+Aj0cwABLioLAAEt9wF+2IIH8AAAAAMAAuls9HMAAS+EcwABLtRTAAEudwF+3OwcBXQPAALloAV8DAQCBrwIBXAGEwABLusBftl8BgayFwABLyMBftsLAALl7gf8BAAEWwABL+4LAAEvuwF+2IIIFwAC6XADAALl9PgE9HMAATCqBwABMH8BftghWAQABJsAATC4Bh8AATC7AX7c7XwMBAADAALq4AoGshcAATFXAX7bCg44WwABMcoHAAExnwF+2CIKMwAC6usAAuixJwABMhRbAAEyOLsAAb7XAALpLPgE9icAATKPAX7YIJsAATKMBHsAATLTAALqxAwFfAwEAAAPAAG+mg8AATOfAX7Y6wABvqDTAAE0FA8AATQXAAE04AAAAAAAAAGADwAD9oQE+AT0cwABNI4LAAE0WwF+2IJyGAAAAAMAAuleZ3yldA8AAuswBXwMBAD4BPYnAAE1kwF+2CCbAAE1kAR7AAE11wAC6sAUBXwMBAAAFwABvpoPAAE2ewF+2OsAAb840wABNuwPAAE27wABN7QAAAAAAAABgA8AA/aEBPgE9HMAATdmCwABNzMBftiCB/AAAAADAALpbwABvpzTAAE4DA8AATgPAAE42AAAAAAAAAGADwAD9oQE+AT0cwABOIYLAAE4UwF+2IIIFAAAAAMAAulzAAG+oNMAATkwDwABOTMAATmcAAAAAAAAAXQPAALloAVsBSsAATlIBHMAATl+CwABOUsBftiCchgAAAADAALpXmd8pXQPAALrMAV8DAQBKwABOigEWwABOnIHAAE6RwF+2CIH2wAC6pgbAALowghrAAFI4wABSQsAAV08AAMAAcHoAAAABA8AAUlDAAFdPAAABAACD0GADwAD95AFbAQEBwABSWwAAAIjjYQMBXwMAAF0DwAC6HAFfAwEAAABdA8AAuhwBXwMBAAE+BU7AAFKMAAAAwABe3F0DwAC6zAFfAwEAAE7AAFKyAAAAgfldA8AAulUBXwMAAABPwABSxMAAUskAAAHAAG+mYQMAXAADwABS0cAAVScAAAAAAAAAXAE+AkAiJcAAUu6BwABS48Bfur1dA8AAus8BWwElwABTG4HAAFMQwF+6vV0DwAC4+gFbwABS48AAUzgAPYrAAFNBwF+61RzAAFNVLoH6AwABNMAAU1wDwABTXMAAVLIAAAABAQHAAFNfAAAAm+xfAwAAAABgA8AA/aEBPgNOwABTegAAAMAAcHtdA8AAuhwBXwMBAABLPgE9jcAAU53AX7uNHMAAU7CAwABTqcBfupEgAQABhMAAU7HAX7t0AAABAcAAU8NbAcAAU8oAAAGDU1sAAcAAU80AAAGIbGADwAD+UgA+Aj0cwABT54HAAFPcwF+6vZxHAgAChsAAU/DAX7vWh8AAU/PAX7viAMAAurlKwABUAQBJwABUGyEcwABUKYXAAFQfwF+7jUgBAAErAMAA/fE+Aj0cwABUS4LAAFQ+wF+61YH8AAAAAMAAuls9HMAAVH4cwABUaYHAAFRewF+6vZxJAQABhcAAVHPAX7uNAMAAuruB/wEAARbAAFSYgsAAVIvAX7rVggXAALpcAMAAuX0/AoGsFsAAVNKBwABUx8Bfur3AAG/pwAC4R8AAu2WDjhbAAFUbgcAAVRDAX7q9gozAALq6wAC6LEnAAFUuFsAAVTcuwABvtcAAuks+AT2JwABVTMBfur0mwABVTAEewABVXcAAurEDAV8DAQAAA8AAb6aDwABVkMBfuu/AAG+oNMAAVa4DwABVrsAAVeEAAAAAAAAAYAPAAP2hAT4BPRzAAFXMgsAAVb/AX7rVnIYAAAAAwAC6V5nfKV0DwAC6zAFfAwEAPgE9icAAVg3AX7q9JsAAVg0BHsAAVh7AALqwBQFfAwEAAAXAAG+mg8AAVkfAX7rvwABvzjTAAFZkA8AAVmTAAFaWAAAAAAAAAGADwAD9oQE+AT0cwABWgoLAAFZ1wF+61YH8AAAAAMAAulvAAG+nNMAAVqwDwABWrMAAVt8AAAAAAAAAYAPAAP2hAT4BPRzAAFbKgsAAVr3AX7rVggUAAAAAwAC6XMAAb6g0wABW9QPAAFb1wABXEAAAAAAAAABdA8AAuWgBWwFKwABW+wEcwABXCILAAFb7wF+61ZyGAAAAAMAAuleZ3yldA8AAuswBXwMBAErAAFczARbAAFdFgcAAVzrAX7q9gfbAALqmBsAAujGCGsAAXUvAAF1VwABdxgAAwABwAgAAAAEDwABdYMAAXcYAAAACAQHAAF1qAAAAgaxgA8AA/I0AAcAAXXkAAACXK2EDAVtgA8AA+tEBagBgA8AA/aF5XQPAALocAV8DAAABPgFKwABdjQEfwABdmMAAvKgDAV8DAAADLoDAAF20wF++oYHAAF29wF++sgAGwAC6MoIawABhP8AAYUnAAGGqAACElQAAAAEDwABhUsAAYaoAAAEAAJZ5YAPAAP3kAVsBAQHAAGFfAAAAiONhAwFfAwAAXQPAAPz5AV8DAQAAAF0DwAC6HAFfAwEAAT4BSsAAYXkBH8AAYYTAALyeAgJfAwAAXwMBAAIugMAAYZ7AX789AAbAALozghrAAGRVwABkXMAAZNYAAMAAcHwAAAABA8AAZGDAAGTWAAAAAQEBwABkcwAAIMAAcH1dA8AAunQBXwMAAAAAXQPAALloAVsBPgFKwABkiQEcwABkrxzAAGSfgMAAZJDAX7+5nEkBAAEuAMAAunaBrwEBWwE0wABktAPAAGS0wABk0QAAAAEBAcAAZLUAAACAtVsAAF0DwAC5aAFbAUrAAGS7ARzAAGTKgMAAZLvAX7+5gowAAAAAwAC6dwDAALl7BsAAujSCGsAAaYbAAGmQwABp9QAAgfcAAAABA8AAaZzAAGn1AAABAACWeWADwAD95AFbAQEBwABptQAAIMAAcH5dA8AAuoECXwMAAF8DAQAAAF0DwAC6HAFfAwEAAT4BSsAAac4BHMAAaeeAwABp1cBfwIietAEAAS4AwAC6iwbAALo1ghrAAGzvwABs+cAAcUsAAJZsAAAAAQPAAGz/wABxSwAAAAEBAcAAbQIAACCHLmEDAl8DAABfAwAAXwMAAAAAXQPAALloAV8DAAABPgZOwABtM8AAbToAAIF2XQPAALnXAV8DAAABH8AAbUDAALoLAAFfAwAAAABOwABtV8AAbWEAAMAAcH9gA8AA+tEBKk7AAG1wAAAAgJZfAwAAAE7AAG2OAAAAgfldA8AAulUBWwA9jMAAbaDAX8F0HMAAbbQugfoEAAE0wABtxAPAAG3EwABu9QAAAAEBAcAAbccAAACWUl8DAAAAAGADwAD9oQE+AUnAAG3cgsAAbeDAX8FOPgE9HsAAbfnAALiVAwFfAwAAAzTAAG4GA8AAbgbAAG4jAAAAAAAAAF8DAAABSsAAbgwBHMAAbhOAwABuDMBfwPsgAgACg8AAbhTAX8FlhcAAbhvAX8GvAAA0wABuJQPAAG4lwABuYQAAAAEBAcAAbigAAACFPV8DAAAAAGADwAD9oQE+AT2LwABuQsBfwWWGwABuSsBfwkIewABuY8AAuJgCAAKEwABuesBfwXSBwABuiMBfwSQAAD4CPYvAAG6xwF/BZYXAAG65wF/Brz2KwABuzsBfwU4pA4GsFsAAbw+BwABvCMBfwSTAAG+cwAC4R8AAugCDjjTAAG8vA8AAby/AAHEWAAAAAAAAAGADwAD9oQE+AUnAAG8+IYLAAG9DwF/BTj4BSz4BPTDAAHA+HsAAcFnAAM65AAAAAAEBwABwdFsBwABwewAAAYNTWwABwABwfgAAAYhsYAPAAP5SAD4BPR7AAHCRwAC4iQMAA4HAAHCswF/BJIXAAHC0wF/DGYbAAHC3wF/DJQA+AT0cwABw74HAAHDowF/BJMAAb/zAALhHAQABg8AAcPnAX8FlAMAAuf7AAG+FKcAAuixKwABxOgGBwABxQcBfwSQGwAC6NoIawAB0CMAAdBLAAHY3AACDXwAAAAEDwAB0GcAAdjcAAAEAAJZ5YAPAAP3kAVsCAgLAAHQcAAAAlmhfAwEAAMAAdCwAAACHLmEDAl8DAQBfAwAAXwMBAAAAXQPAALloAV8DAQABPgVOwAB0XcAAdGQAAIF2XQPAALnXAV8DAQABH8AAdGrAALoLAAFfAwEAAABOwAB0fsAAdIQAAICWXwMBAAGAwAB0hsBfw9hOwAB0qwAAAIH5XQPAALpVAVsAPYzAAHS9wF/EVBzAAHTRLoH6BAABNMAAdOEDwAB04cAAdZcAAAABAQHAAHTkAAAAllJfAwAAAABgA8AA/aEBPgE9HsAAdPnAALiVAwFfAwEAAzTAAHUGA8AAdQbAAHUjAAAAAAAAAF8DAQABSsAAdQwBHMAAdROBwAB1DMBfw+YgAgACg8AAdRTAX8Q5hcAAdRvAX8SPAAA0wAB1JQPAAHUlwAB1XQAAAAEBAcAAdSgAAACFPV8DAQAAAGADwAD9oQE+AT2LwAB1QMBfxDmGwAB1SMBfxRIewAB1X8AAuJgCAAKEwAB1dsBfxFSCwAB1hMBfxA8AAAOBrBbAAHWxgsAAdarAX8QPwABvnMAAuEfAALoAg440wAB10QPAAHXRwAB2AgAAAAAAAABgA8AA/aEBPgE9HMAAdeeCwAB14MBfxA/AAG/8wAC4RwEAAYPAAHXxwF/EOQDAALn+wABvhSnAALosSsAAdiYBgsAAdi3AX8QPBsAAujeCGsAAeErAAHhZwAB7BgAAWAAAAAEDwAB4XcAAewYAAAABAAHAAHhmAAAAgbFgA8AA/n4BasAAeHJgA8AA/n6EKABdA8AAuWgBYAPAAP5+AT4GTsAAeI3AAHiUAACBdl0DwAC51wFgA8AA/n4BH8AAeJrAALoLAAFgA8AA/n4AAE7AAHi+wAB4xQAAgo9gA8AA/sgBH8AAeMvAAP7nAAAAAE7AAHjyAAAAgfldA8AAulUBWwBOwAB5CcAAeQ8AAIMeYAPAAPrRASk9i8AAeRvAX8aBHMAAeS8ugfoEAAE0wAB5PwPAAHk/wAB6WgAAAAEBAcAAeUIAAACWUl8DAAAAAGADwAD9oQE+A0nAAHlXIYTAAHlcwF/GlD4BPRzAAHl4gsAAeXHAX8Zggo4BAAGAwAB5fsBfxgMAwAD+3D89jMAAeaDAX8aUKks+AT0cwAB50oLAAHnLwF/GYIKOAQABhcAAedjAX8bRAMAA/twBAcAAee5bAcAAefUAAAGDU1sAAcAAefgAAAGIbGADwAD+UgA+AT0ewAB6CcAAuJcEAASDwAB6KMBfxoGBwAB6NsBfxjKGwAB6PsBfx1WHwAB6QcBfx2EAA4GsFsAAenSBwAB6bcBfxjLAAG+cwAC4R8AAugCDjjTAAHqUA8AAepTAAHrRAAAAAAAAAGADwAD9oQE+AT0cwAB6qoHAAHqjwF/GMsAAb/zAALhHAQABHMAAeruCwAB6tMBfxmAjAAAAAMAA/uEAwAC5/sAAb4UpwAC6LErAAHr1AYHAAHr8wF/GMgbAALo4ghrAAHz/wAB9DMAAfz0AAIMcAAAAAQPAAH0UwAB/PQAAAAEBAcAAfRwAAADAAHCAYAPAAP3kAABdA8AAuWgBYAPAAPrRAT4ETsAAfTjAAH0/AACB3l0DwAC51wFgA8AA+tEBH8AAfUXAALoLAAFgA8AA+tEAAE7AAH1tAAAAgfldA8AAulUBWwA9isAAfX/AX8isHMAAfZMugfoEAAE0wAB9owPAAH2jwAB+nQAAAAEBAcAAfaYAAACWUl8DAAAAAGADwAD9oQE+AT0ewAB9u8AAuJUDAWADwAD60QM0wAB9yAPAAH3IwAB94QAAAAAAAABgA8AA+tEBSsAAfc4BHMAAfdeDwAB9z8BfyOdIAQABgMAAfdrAX8haAMAA/fE0wAB94wPAAH3jwAB+YwAAAAEBAcAAfekAAADAAENXYAPAAPrRAABgA8AA/aEBPgFJwAB+AITAAH4EwF/JaD4BPR7AAH4dwAC4mQMAA4LAAH4twF/IrIHAAH47wF/IfikAPx7AAH5lwAC4mAIAAoLAAH58wF/IrIHAAH6KwF/IfgAAA4GsFsAAfreBwAB+sMBfyH7AAG+cwAC4R8AAugCDjjTAAH7XA8AAftfAAH8IAAAAAAAAAGADwAD9oQE+AT0cwAB+7YHAAH7mwF/IfsAAb/zAALhHAQABKgDAALn+wABvhSnAALosSsAAfywBgcAAfzPAX8h+BsAAujmCGsAAgIXAAICMwACClgAAg/0AAAABA8AAgJPAAIKWAAAAAQEBwACAmQAAAIjMYQMBXwMAAFwAAF0DwAC5aAFbAT4ETsAAgLrAAIDBAACB3l0DwAC51wFbAR/AAIDHwAC6CwABWwAATsAAgOkAAACB+V0DwAC6VQFbAD2KwACA+8BfyrgcwACBDy6B+gQAATTAAIEfA8AAgR/AAIH3AAAAAQEBwACBIgAAAJZSXwMAAAAAYAPAAP2hAT4BPR7AAIF8wAC4lQMBWwM0wACBkgPAAIGSwACBpwAAAAAAAABcAUrAAIGYARzAAIGegMAAgZjAX8p1IAEAAYPAAIGfwF/K8wAANMAAgakDwACBqcAAga8AAAABAQHAAIGqAAAAgLVbAABgA8AA/aEBPgAewACBv8AAuJgCAAKCwACB1sBfyriBwACB5MBfypQAAAOBrBbAAIIRgcAAggrAX8qUwABvnMAAuEfAALoAg440wACCMQPAAIIxwACCYQAAAAAAAABgA8AA/aEBPgE9HMAAgkeBwACCQMBfypTAAG/8wAC4RwEAASsAwAC5/sAAb4UpwAC6LErAAIKFAYHAAIKMwF/KlAbAALo6ghrAAISvwACEvMAAhuwAAJZiAAAAAQPAAITBwACG7AAAAAEBAcAAhMcAAACXK2EDAV8DAABgA8AA+tEAAF0DwAC5aAFgA8AA+tEBPgROwACE7MAAhPMAAIHeXQPAALnXAWADwAD60QEfwACE+cAAugsAAWADwAD60QAATsAAhSEAAACB+V0DwAC6VQFbAD2KwACFM8BfzJIcwACFRy6B+gQAATTAAIVXA8AAhVfAAIZNAAAAAQEBwACFWgAAAJZSXwMAAAAAYAPAAP2hAT4BPR7AAIVvwAC4lQMBYAPAAPrRAzTAAIV8A8AAhXzAAIWPAAAAAAAAAGADwAD60QFKwACFggEcwACFhoDAAIWCwF/MOyABAAGDwACFh8BfzM0AADTAAIWRA8AAhZHAAIYTAAAAAQEBwACFlwAAAMAAQ1dgA8AA+tEAAGADwAD9oQE+AUnAAIWuIYTAAIWzwF/NSz4BPR7AAIXMwAC4mQMAA4LAAIXcwF/MkoHAAIXqwF/MZCoAPx7AAIYVwAC4mAIAAoLAAIYswF/MkoHAAIY6wF/MZAAAA4GsFsAAhmeBwACGYMBfzGTAAG+cwAC4R8AAugCDjjTAAIaHA8AAhofAAIa3AAAAAAAAAGADwAD9oQE+AT0cwACGnYHAAIaWwF/MZMAAb/zAALhHAQABKQDAALn+wABvhSnAALosSsAAhtsBgcAAhuLAX8xkBsAAujuCGsAAiQPAAIkQwACLPQAAgdYAAAABA8AAiRPAAIs9AAAAAQEBwACJGQAAAJcrYQMBXwMAAGADwAD60QAAXQPAALloAWADwAD60QE+BE7AAIk+wACJRQAAgd5dA8AAudcBYAPAAPrRAR/AAIlLwAC6CwABYAPAAPrRAABOwACJcwAAAIH5XQPAALpVAVsAPYrAAImFwF/OsBzAAImZLoH6BAABNMAAiakDwACJqcAAip0AAAABAQHAAImsAAAAllJfAwAAAABgA8AA/aEBPgE9HsAAicHAALiVAwFgA8AA+tEDNMAAic4DwACJzsAAieEAAAAAAAAAYAPAAPrRAUrAAInUARzAAInYgMAAidTAX85ZIAEAAYPAAInZwF/O6wAANMAAieMDwACJ48AAimMAAAABAQHAAInpAAAAwABDV2ADwAD60QAAYAPAAP2hAT4BScAAigCEwACKBMBfz2k+AT0ewACKHcAAuJkDAAOCwACKLcBfzrCBwACKO8BfzoIpAD8ewACKZcAAuJgCAAKCwACKfMBfzrCBwACKisBfzoIAAAOBrBbAAIq3gcAAirDAX86CwABvnMAAuEfAALoAg440wACK1wPAAIrXwACLCAAAAAAAAABgA8AA/aEBPgE9HMAAiu2BwACK5sBfzoLAAG/8wAC4RwEAASoAwAC5/sAAb4UpwAC6LErAAIssAYHAAIszwF/OggbAALpMghrAAIz8wACNDMAAjjEBAGEAAAABA8AAjRPAAI4xAAAAAAAAAF0DwAC5aAFgA8AA/JcBPgROwACNJsAAjS0AAIHeXQPAALnXAWADwAD8lwEfwACNM8AAugsAAWADwAD8lwAATsAAjUvAAI1RAACA7mADwAD8lwGTPRzAAI1fLoH6BAABNMAAjW8DwACNb8AAjZEAAAABAQHAAI1wAAAAgLVfAwAAAABgA8AA/aEBPgE9icAAjX/AX9C1HMAAjYSBwACNf8Bf0LVkAQABlADAAP29A4GsFsAAjauAwACNpMBf0IfAAG+cwAC4R8AAugCDjjTAAI3LA8AAjcvAAI38AAAAAAAAAGADwAD9oQE+AT0cwACN4YDAAI3awF/Qh8AAb/zAALhHAQABgcAAjevAX9C1AMAAuf7AAG+FKcAAuixKwACOIAGAwACOJ8Bf0IcGwAC6TYIawACQMMAAkEHAAJGuAQCBVQAAAAEDwACQScAAka4AAAAAAAAAXQPAALloAWADwAD60QE+BE7AAJBdwACQZAAAgd5dA8AAudcBYAPAAPrRAR/AAJBqwAC6CwABYAPAAPrRAABOwACQkgAAAIH5XQPAALpVAVsAPYnAAJCkwF/SChzAAJC4LoH6BAABNMAAkMgDwACQyMAAkQ8AAAABAQHAAJDJAAAAgLVfAwAAAABgA8AA/aEBPgE9HsAAkNjAALiZAwADgcAAkOjAX9IKgMAAkPbAX9HcKgADgawWwACRKYDAAJEiwF/R3MAAb5zAALhHwAC6AIOONMAAkUkDwACRScAAkXkAAAAAAAAAYAPAAP2hAT4BPRzAAJFfgMAAkVjAX9HcwABv/MAAuEcBAAEpAMAAuf7AAG+FKcAAuixKwACRnQGAwACRpMBf0dwGwAC6PIIawACSg8AAko3AAJK1AACWZAAAAAEDwACSlMAAkrUAAAEAAJclYAPAAP3kAVsAAAAAXQPAALocAV8DAQABSsAAkpoBHsAAkqHAALoqAQJfAwAAXwMBAAEuAAbAALo9ghrAAJQywACUQsAAlYkAAICtAAAAAQPAAJRIwACViQAAAAAAAABdA8AAuWgBXQPAAP07AV8DAAABPgROwACUWcAAlGAAAIF2XQPAAP07AV8DAAABMcAAlGVfAwAAAE7AAJR+wACUhQAAgd5dA8AAudcBXQPAAP07AV8DAAABH8AAlIvAALoLAAFdA8AA/TsBXwMAAAAAPRzAAJSoLoH6BAABNMAAlLgDwACUuMAAlOgAAAABAQHAAJS7AAAAEl8DAAAAAGADwAD9oQE+AT0cwACU1IDAAJTNwF/Tk1YBAAGCwACU2MBf1A0AwAD9TAOBrBbAAJUCgcAAlPvAX9O2wABvnMAAuEfAALoAg440wACVIgPAAJUiwACVVAAAAAAAAABgA8AA/aEBPgE9HMAAlTiBwACVMcBf07bAAG/8wAC4RwEAAYDAAJVCwF/TkwDAALn+wABvhSnAALosSsAAlXgBgcAAlX/AX9O2BsAAuj6CGsAAmAfAAJgWwACZYAAAlUkAAAABA8AAmBvAAJlgAAAAAAAAAF0DwAC5aAFdA8AA/i8BXwMAAAE+BE7AAJgrwACYMgAAgXZdA8AA/i8BXwMAAAEewACYOMAAwaYAAV8DAAAAAE7AAJhWwACYXQAAgd5dA8AAudcBXQPAAP4vAV8DAAABH8AAmGPAALoLAAFdA8AA/i8BXwMAAAAAPRzAAJh/LoH6BAABNMAAmI8DwACYj8AAmL8AAAABAQHAAJiSAAAAEl8DAAAAAGADwAD9oQE+AT0cwACYq4DAAJikwF/VA1YBAAGCwACYr8Bf1YQAwAD+PAOBrBbAAJjZgcAAmNLAX9UtwABvnMAAuEfAALoAg440wACY+QPAAJj5wACZKwAAAAAAAABgA8AA/aEBPgE9HMAAmQ+BwACZCMBf1S3AAG/8wAC4RwEAAYDAAJkZwF/VAwDAALn+wABvhSnAALosSsAAmU8BgcAAmVbAX9UtBsAAuj+CGsAAm4bAAJuQwACb7QAAwABwgQAAAAEDwACbmMAAm+0AAAEAAIPQYAPAAP3kAVsBAAHAAJucAAAAwABwgl8DAQABagBgA8AA/aF5AF0DwAC5aAFfAwEAAUrAAJuzARzAAJvVHMAAm7MugfoCAAErAcAAb4UpwAC6LMAAcIMBAV8DAQABgMAAm+HAX9ZxAMAAul0GwAC6QIIawACfncAAn6fAAJ/nAACWcAAAAAEDwACfq8AAn+cAAAABAQHAAJ+wAAAAgO5gA8AA/JcAAF0DwAC6HAFfAwAAAT4BSsAAn70BH8AAn8jAALyyAgFfAwAAAi6AwACf3cBf1vsABsAAukGCGsAAo7zAAKPGwACkGgAAlnEAAAABA8AAo8/AAKQaAAAAAQEBwACj1QAAAJcrYQMBXwMAAGADwAD60QAAXQPAALocAV8DAAABPgFKwACj7AEfwACj98AAvMsCAV8DAAACLoDAAKQRwF/XZQAGwAC6QoIawACmhMAApo7AAKbOAACWWwAAAAEDwACmksAAps4AAAABAQHAAKaXAAAAgO5gA8AA/JcAAF0DwAC6HAFfAwAAAT4BSsAApqQBH8AApq/AALzVAgFfAwAAAi6AwACmxMBf19YABsAAukOCGsAAqhXAAKofwACqcwAAlm8AAAABA8AAqijAAKpzAAAAAQEBwACqLgAAAJcrYQMBXwMAAGADwAD60QAAXQPAALocAV8DAAABPgFKwACqRQEfwACqUMAAvN8CAV8DAAACLoDAAKpqwF/YQAAGwAC6RIIawACudMAArn7AAK7fAADAAHCEAAAAAQPAAK6GwACu3wAAAAEAAcAAro0AAACV0mEDAl8DAABfAwAAYAPAAPrRAWoAYAPAAP2heQBdA8AAuhwBXwMAAAE+AUrAAK6wAR/AAK67wAC86gIBXwMAAAIugMAArtTAX9izAAbAALpOghrAALGhwACxr8AAs5kBAIMeAAAAAQPAALG1wACzmQAAAAAAAABdA8AAuWgBXwMAAAE+BE7AALHGwACxzQAAgd5dA8AAudcBXwMAAAEfwACx08AAugsAAV8DAAAAAE7AALH4AAAAgfldA8AAulUBWwA9icAAsgrAX9lrHMAAsh4ugfoEAAE0wACyLgPAALIuwACyewAAAAEBAcAAsjEAAACAll8DAAAAAGADwAD9oQE+AT0ewACyRMAAuJkDAAOBwACyVMBf2WuAwACyYsBf2UGCwACyasBf2aYAA4GsFsAAspWAwACyjsBf2UHAAG+cwAC4R8AAugCDjjTAALK1A8AAsrXAALNkAAAAAAAAAGADwAD9oQE+AUs+AT0wwACy1h7AALLxwADOuQAAAAABAcAAswpbAcAAsxEAAAGDU1sAAcAAsxQAAAGIbGADwAD+UgA+AT0ewACzJcAAuIkDAAOAwACzQMBf2UGCwACzSMBf2kKDwACzS8Bf2k4AwABvhSnAALosSsAAs4gBgMAAs4/AX9lBBsAAuk+CGsAAtMnAALTXwAC3FgEAgeoAAAABA8AAtNzAALcWAAAAAAAAAF0DwAC5aAFfAwAAAT4FTsAAtO3AALT0AACB3l0DwAC51wFfAwAAAR/AALT6wAC6CwABXwMAAAAATsAAtQ4AAACBdl8DAAAATsAAtR/AALUrAADAAHCFYAPAAPrRASo9HMAAtTgugfoEAAE0wAC1SAPAALVIwAC1lQAAAAEBAcAAtUsAAACAll8DAAAAAGADwAD9oQE+Aj2KwAC1XsBf2xQpPYnAALV8wF/bBYPAALWFwF/bSgOBrBbAALWvgMAAtajAX9rbwABvnMAAuEfAALoAg440wAC1zwPAALXPwAC24QAAAAAAAABgA8AA/aEBPgJJwAC13oLAALXiwF/bFD4CPRzAALYEgMAAtf3AX9rbwABv/MAAuEcBAAGBwAC2DsBf2wUAwAC5/krAALYjAD9LPgE9MMAAtlMewAC2bsAAzrkAAAAAAQHAALaHWwHAALaOAAABg1NbAAHAALaRAAABiGxgA8AA/lIAPgE9HsAAtqLAALiJAwADgMAAtr3AX9rbg8AAtsXAX9wahMAAtsjAX9wmAMAAb4UpwAC6LErAALcFAYDAALcMwF/a2wbAALpQghrAALg8wAC4SsAAu+4BAIDDAAAAAQPAALhRwAC77gAAAAAAAABdA8AAuWgBXwMAAAE+Bk7AALhiwAC4aQAAgd5dA8AAudcBXwMAAAEfwAC4b8AAugsAAV8DAAAAAE7AALiDAAAAgXZfAwAAAE7AALiUwAC4oAAAwABwhWADwAD60QEqTsAAuMAAAACB+V0DwAC6VQFbAD2LwAC40sBf3QMcwAC45i6B+gQAATTAALj2A8AAuPbAALptAAAAAQEBwAC4+QAAAICWXwMAAAAAYAPAAP2hAT4DScAAuQyCwAC5EMBf3Ow+Aks+AT0wwAC5cR7AALmMwADOugAAAAABAcAAuaVbAcAAuawAAAGDU1sAAcAAua8AAAGIbGADwAD+UgA+AT0ewAC5wsAAuJcEAASDwAC54cBf3QOAwAC578Bf3LOFwAC598Bf3YSGwAC5+sBf3ZAASsAAuhgAPz2KwAC6NsBf3OwpPYnAALpUwF/c3YTAALpdwF/dPgOBrBbAALqHgMAAuoDAX9yzwABvnMAAuEfAALoAg440wAC6pwPAALqnwAC7uQAAAAAAAABgA8AA/aEBPgJJwAC6toLAALq6wF/c7D4CPRzAALrcgMAAutXAX9yzwABv/MAAuEcBAAGBwAC65sBf3N0AwAC5/krAALr7AD9LPgE9MMAAuysewAC7RsAAzrkAAAAAAQHAALtfWwHAALtmAAABg1NbAAHAALtpAAABiGxgA8AA/lIAPgE9HsAAu3rAALiJAwADgMAAu5XAX9yzhMAAu53AX96ThcAAu6DAX96fAMAAb4UpwAC6LErAALvdAYDAALvkwF/cswbAALpFghrAAMBSwADAXMAAw5sAAJZmAAAAAQPAAMBmwADDmwAAAAIBAcAAwGwAAACXK2EDAV8DAABgA8AA+tEAAcAAwIAAACCWZ2EDAF8DAAABagBgA8AA/aF5XQPAALloAV8DAAABPgROwADAnMAAwKMAAIHeXQPAALnXAV8DAAABH8AAwKnAALoLAAFfAwAAAABOwADAywAAAIH5XQPAALpVAVsAPYvAAMDdwF/fhxzAAMDxLoH6BAABNMAAwQEDwADBAcAAwfIAAAABAQHAAMEEAAAAgJZfAwAAAABgA8AA/aEBPgE9HsAAwRfAALiVAwFgA8AA+tEDNMAAwSQDwADBJMAAwTUAAAAAAAAAYAPAAPrRAUrAAMEqARzAAMEugMAAwSrAX98cIAEAAYTAAMEvwF/fwgAANMAAwTcDwADBN8AAwbgAAAABAQHAAME9AAAAwABDV2ADwAD60QAAYAPAAP2hAT4BScAAwVSFwADBWMBf4EA+AT0ewADBccAAuJkDAAODwADBgcBf34eCwADBj8Bf312EwADBl8Bf38IAPx7AAMG6wAC4mAIAAoPAAMHRwF/fh4LAAMHfwF/fXQAAA4GsFsAAwgyCwADCBcBf313AAG+cwAC4R8AAugCDjjTAAMIsA8AAwizAAMNmAAAAAAAAAGADwAD9oQE+AknAAMI7IRzAAMJGgcAAwj/AX980SAEAASsAwAD98T4CPR7AAMJdwAC4lQMBXwMAAAOBwADCasBf3zQWwADCeYLAAMJywF/fXcAAb/zAALhHwAC5/hbAAMKLgsAAwoTAX99dwABvnMAAuEfAALoAAErAAMKoAD9LPgE9MMAAwtgewADC88AAzrkAAAAAAQHAAMMMWwHAAMMTAAABg1NbAAHAAMMWAAABiGxgA8AA/lIAPgE9HsAAwyfAALiJAwADgsAAw0LAX99dhMAAw0rAX+GHhcAAw03AX+GTAMAAb4UpwAC6LErAAMOKAYLAAMORwF/fXQbAALpGghrAAMUpwADFM8AAyQwAAJZrAAAAAQPAAMU8wADJDAAAAAIBAcAAxUIAAACXK2EDAV8DAABgA8AA+tEAAcAAxVYAACCWZ2EDAF8DAAABagBgA8AA/aF5XQPAALloAV8DAAABPgZOwADFcsAAxXkAAIHeXQPAALnXAV8DAAABH8AAxX/AALoLAAFfAwAAAABOwADFkAAAAIF2XwMAAABOwADFocAAxa0AAMAAcIVgA8AA+tEBKk7AAMXNAAAAgfldA8AAulUBWwA9jcAAxd/AX+KhHMAAxfMugfoEAAE0wADGAwPAAMYDwADHAAAAAAEBAcAAxgYAAACAll8DAAAAAGADwAD9oQE+AT0ewADGGcAAuJUDAWADwAD60QM0wADGJgPAAMYmwADGPwAAAAAAAABgA8AA+tEBSsAAxiwBHMAAxjEpSAEAARzAAMY4gMAAxjTAX+IQIAEAAYbAAMY5wF/i3AAAAMAA/fE0wADGQQPAAMZBwADGxgAAAAEBAcAAxkcAAADAAENXYAPAAPrRAABgA8AA/aEBPgFJwADGXofAAMZiwF/jaT4CPYzAAMZ7wF/iiik9i8AAxp3AX+J7hsAAxqbAX+LcPx7AAMbIwAC4mAIAAoXAAMbfwF/ioYLAAMbtwF/iUQAAA4GsFsAAxxqCwADHE8Bf4lHAAG+cwAC4R8AAugCDjjTAAMc6A8AAxzrAAMjXAAAAAAAAAGADwAD9oQE+A0nAAMdJhMAAx03AX+KKPgI9HMAAx2+CwADHaMBf4lHAAG/8wAC4RwEAAYPAAMd5wF/iewDAALn+SsAAx44AP0nAAMesIRzAAMe3gcAAx7DAX+IoSAEAASsAwAD98T4CPR7AAMfOwAC4lQMBXwMAAAOBwADH28Bf4igWwADH6oLAAMfjwF/iUcAAb/zAALhHwAC5/hbAAMf8gsAAx/XAX+JRwABvnMAAuEfAALoAAErAAMgZAD9LPgE9MMAAyEkewADIZMAAzrkAAAAAAQHAAMh9WwHAAMiEAAABg1NbAAHAAMiHAAABiGxgA8AA/lIAPgE9HsAAyJjAALiJAwADgsAAyLPAX+JRhsAAyLvAX+Tkh8AAyL7AX+TwAMAAb4UpwAC6LErAAMj7AYLAAMkCwF/iUQbAALpHghrAAMnQwADJ2sAAztgAAJZuAAAAAQPAAMnlwADO2AAAAAIBAcAAyesAAACXK2EDAV8DAABgA8AA+tEAAcAAyf8AACCWZ2EDAF8DAAABagBgA8AA/aF5XQPAALloAV8DAAABPgZOwADKG8AAyiIAAIHeXQPAALnXAV8DAAABH8AAyijAALoLAAFfAwAAAABOwADKPAAAAIF2XwMAAABOwADKTcAAylkAAMAAcIVgA8AA+tEBKk7AAMp5AAAAgfldA8AAulUBWwA9jcAAyovAX+X+HMAAyp8ugfoEAAE0wADKrwPAAMqvwADMxAAAAAEBAcAAyrIAAACAll8DAAAAAGADwAD9oQE+AT0ewADKxcAAuJUDAWADwAD60QM0wADK0gPAAMrSwADK6wAAAAAAAABgA8AA+tEBSsAAytgBHMAAyt0pSAEAARzAAMrkgMAAyuDAX+VtIAEAAYbAAMrlwF/mOQAAAMAA/fE0wADK7QPAAMrtwADMigAAAAEBAcAAyvMAAADAAENXYAPAAPrRAABgA8AA/aEBPgFJwADLCofAAMsOwF/mxj4DScAAyyeEwADLK8Bf5ec+Aks+AT0wwADLYh7AAMt9wADOugAAAAABAcAAy5pbAcAAy6EAAAGDU1sAAcAAy6QAAAGIbGADwAD+UgA+AT0ewADLu8AAuJcEAASFwADL2sBf5f6CwADL6MBf5a4UwADL8MBf5yAIABTAAMvzwF/nLAkAAErAAMwZAD89jMAAzD/AX+XnKT2LwADMYcBf5diGwADMasBf5jk/HsAAzIzAALiYAgAChcAAzKPAX+X+gsAAzLHAX+WuAAADgawWwADM3oLAAMzXwF/lrsAAb5zAALhHwAC6AIOONMAAzP4DwADM/sAAzqMAAAAAAAAAYAPAAP2hAT4CScAAzQ2EwADNEcBf5ec+Aj0cwADNM4LAAM0swF/lrsAAb/zAALhHAQABg8AAzT3AX+XYAMAAuf5KwADNUgA/Sz4CScAAzYIhHMAAzY2BwADNhsBf5YVIAQABKwDAAP3xPgI9HsAAzabAALiVAwFfAwAAA4HAAM2zwF/lhRbAAM3CgsAAzbvAX+WuwABv/MAAuEfAALn+FsAAzdSCwADNzcBf5a7AAG+cwAC4R8AAugAASsAAzfMAPz0wwADOFR7AAM4wwADOuQAAAAABAcAAzklbAcAAzlAAAAGDU1sAAcAAzlMAAAGIbGADwAD+UgA+AT0ewADOZMAAuIkDAAOCwADOf8Bf5a6GwADOh8Bf6MqHwADOisBf6NYAwABvhSnAALosSsAAzscBgsAAzs7AX+WuBsAAukiCGsAA0TLAANE8wADT5QAAlmUAAAABA8AA0UXAANPlAAAAAQEBwADRSgAAACdgA8AA/JcAAF0DwAC5aAFfAwAAAT4HPR7AANFlwAD7wwIAAoDAANFywF/pUycnAD0ewADRksAA+9kCAAKAwADRo8Bf6VMnJwBOwADRw8AA0coAAIHeXQPAALnXAV8DAAABH8AA0dDAALoLAAFfAwAAAABOwADR9QAAAIH5XQPAALpVAVsATsAA0gvAANIYAADAAHCGYAPAAPyXAZM9isAA0iHAX+nOHMAA0jUugfoEAAE0wADSRQPAANJFwADS+AAAAAEBAcAA0kgAAACAll8DAAAAAGADwAD9oQE+AknAANJbHMAA0mWAwADSX8Bf6VNIAQABg8AA0mjAX+nhAMAA/bs+Aj0ewADShMAAuJkDAAOCwADSlMBf6c6BwADSosBf6aSEwADSqsBf6iAASsAA0r4APz2LwADS3MBf6eEcwADS6YPAANLcwF/p4WQBAAGUAMAA/b0DgawWwADTEoHAANMLwF/ppMAAb5zAALhHwAC6AIOONMAA0zIDwADTMsAA07AAAAAAAAAAYAPAAP2hAT4BPRzAANNIgcAA00HAX+mkwABvnMAAuEcBAAEfwADTasAA++0FAAWAwADTe8Bf6VMuJycrg8AA05fAX+nhAADAALoAwABvhSnAALosSsAA09QBgcAA09vAX+mkBsAAukmCGsAA2QnAANkTwADjTQAAwABwDQAAAAEDwADZGsAA400AAAACAQHAANkkAAAAwABwDmADwAD7bQABwADZNQAAAMAAcA9hAwFdA8AAumIBXwMAAFwBagBgA8AA/aF5XQPAALocAV8DAAABPgxOwADZcwAAAMAAXtxdA8AAuswBXwMAAABOwADZywAAAIH5XQPAALpVAV8DAAAATsAA2eMAAADAAHBlYAPAAL1NAE7AANnzAAAApLhgA8AAvaUATsAA2gwAAADAAHANXgMAAAAAAAFXA8AAuE8AXABPwADaGsAA2h8AAAHAAG+9YQMBXwMAAFwAA8AA2iXAANtMAAAAAQEBwADaKAAAAJvsXwMAAAAAXAE+Az0cwADaPYTAANo3wF/r6JyGAAAAAMAAvVM9jMAA2k3AX+voHMAA2lqFwADaVcBf6/vAAHCHAgACgMAA2mbAX+t0hsAA2nHAX+wMAMAAvcM9HMAA2zyCwADbMcBf67pWAQABFMAA20DAX+xQCAAAwAC6uE/AANtTwADbWAAAAYGsYQMCW2ADwAD+UlwAA8AA21/AANyDAAAAAgICwADbYAAAAIHHWwDAANtyAAAAhlRgA8AA/lIAAFwBPgQ9HMAA24yEwADbhsBf6+ichgAAAADAAL1TQCIlwADbroLAANujwF/rul0DwAC6zwFbASXAANvbgsAA29DAX+u6XQPAALj6AVvAANujwADb+AA9HMAA3AyCwADcAcBf67rAAG/pwAC4RwIAAhTAANwWwF/s/gkAFMAA3B3AX+0JCgAAwAC7ZT2MwADcUcBf6+gcwADcXoXAANxZwF/r+8AAcIcCAAKAwADcasBf63SGwADcdcBf7AwAwAC9w0/AANyKwADcjwAAAYOOYQMAXAADwADclcAA3M4AAAAAAAAAXAE+Aj0cwADcpoTAANygwF/r6JyGAAAAAMAAvVM9HMAA3MGCwADctsBf67qCjAAAAADAALq6T8AA3NXAANzaAAABwABvpmEDAFwAA8AA3OLAAOD3AAAAAAAAAFwBPgQ9jcAA3cfAX+v7GsAA3dPAAL2rScAA3eIcwADd8IHAAN3mwF/rh0gBAAErAMAA/fE+AT2OwADeA8Bf7Aw0wADeDQPAAN4NwADegwAAAAAAAABgA8AA/aEBPgE9HMAA3ieCwADeHMBf67qcRwIAAh/AAN5DwAC5hwIAAifAAHCIgMAA3mfAX+t0ACsAwAC6uT4DTsAA3wnAAN8dAADAAHCJXgMAAQEBXQPAALpiAV8DAAAAAVcDwAC4YgJbXQPAALpiAV8DAABbARzAAN8whcAA3yvAX+v7wABwRwECW10DwAC6YgFfAwAAAYHAAN9dwF/rhwDAAL25TsAA33XAAN99AADAAFtkXQPAALqaAV8DAAABH8AA34PAALqjAQFfAwAAASsAPY7AAN+xwF/sDDTAAN+7A8AA37vAAOBoAAAAAAAAAGADwAD9oQE+Az0XwADf0hTAAN/KwF/vVAwAl2jAALhHgsAA39rAX+u6wAC6nT0cwADgEIXAAOALwF/r+8AAcIoCAV0DwAC6mgFfAwAAAhTAAOAgwF/u7gsAFMAA4DXAX+9UDAAAwAC9tj0XwADgURTAAOBJwF/vVAwAl2jAALhHK8AAup09i8AA4HnAX+vSHMAA4I0ugfoDAAGHwADglMBf7C0CgawUwADgpcBf7NoIAIOOFMAA4LbAX+3fCQDAALosPYzAAODFwF/r6BzAAODShcAA4M3AX+v7wABwhwIAAoDAAODewF/rdIbAAODpwF/sDADAAL3DT8AA4P7AAOEFAAABwABvqGEDAF0DwAC5aAFbAAPAAOENwADhiQAAAAAAAABdA8AAuWgBWwE+BD0cwADhHoTAAOEYwF/r6JyGAAAAAMAAvVNOwADhNcAA4TwAAIF2XQPAALloAVsBHMAA4UuDwADhPsBf69KchgAAAADAALpXPYvAAOFbwF/r0itKwADhdgEUwADhfcBf8OgMAD2KwADhkMBf67omwADhkAEjFsAA4Z0uwABvtcAAuksfwADht8AAuTsCAV8DAAACFMAA4dnAX+44CgAUwADh48Bf8JwLAAAfwADh+8AAuyAEAV8DAAAEFMAA4hTAX+44CgA0wADiHgPAAOIewADisQAAAAAAAABgA8AA/aEBPgI9HMAA4nqEwADidMBf6+ichgAAAADAAL1TPRzAAOKdg8AA4pDAX+vSgfwAAAAAwAC6WzTAAOKzA8AA4rPAAOMgAAAAAAAAAGADwAD9oQE+Aj0cwADi0YPAAOLEwF/r0oIFAAAAAMAAulw9jMAA4ufAX+voHMAA4vSFwADi78Bf6/vAAHCHAgACgMAA4wDAX+t0hsAA4wvAX+wMAMAAvcMUwADjIsBf8JwLAAABXQPAALqkAV8DAABdA8AAuswBXwMAAErAAOMxARbAAONDgsAA4zjAX+u6gfbAALqmAABfpuwAX6dFAF+oGQBfqQ8AX6qMAF+tWABfrfAAX7JjAF+y8gBfs2oAX7OZAF+0MABftLQAX7UlAF+1pABfulkAX751AF+/BwBfv40AX8BSAF/A0QBfw6IAX8XaAF/IMABfyksAX8wRAF/OLwBf0EwAX9GgAF/S8wBf01IAX9TCAF/WOQBf1tEAX9c7AF/XrABf2BYAX9iHAF/ZBwBf2qEAX9x5AF/e8gBf4eYAX+VDAF/pKQBf60gAX/KMAAAALgLAALpVghrAAOTawADk6cAA+ngHwABwiwABAACCemADwAD95AFbAWABwAD95AAAAAEFwAC6YQAAAAAEAAADAAAAAAAAAAAAXQPAALpVAV8DAAABPwEJAQDAAP36AAAAAAgGwAC6V4IawADovcAA6MTAAOjMAAKchgAAAAEDwADoysAA6MwAAAAAAAAAXQPAALloAVsABsAAuliCGsAA6kvAAOpQwADqbwACwABvvQAAAAEDwADqVsAA6m8AAAABAQHAAOpcAAAAwABwjGEDAV8DAABcAABcAAbAALpZghrAAO0lwADtKsAA7UcAAoGsAAAAAQPAAO0xwADtRwAAAAEBAcAA7TsAAADAAHACYAPAAPyNAABcAAbAALpaghrAAO64wADuvcAA7tYAAoOOAAAAAQPAAO7DwADu1gAAAAEBAcAA7skAAADAAHCNYQMAXAAAXAAGwAC6W4IawAD1O8AA9UDAAPVcAAKB/AAAAAEDwAD1RcAA9VwAAAABAAHAAPVOAAAAwABwjl0DwAC5aAFbAWoAYAPAAP2heQBcAAbAALpcghrAAPbywAD298AA9v8AAoIFAAAAAQPAAPb9wAD2/wAAAAAAAABcAAbAALpfghrAAPhywAD4e8AA+IMBAsAAb6wAAAABA8AA+IPAAPiDAAAAAAAAAGADwAD60QAGwAC6XYIawAD6UMAA+lrAAPp2AALAAHCDAAAAAQPAAPplwAD6dgAAAQAAg9BgA8AA/eQBWwEAAcAA+mkAAADAAHCCXwMBAAFqAGADwAD9oXkAXQPAALloAV8DAQAAAABf864AX/PiAF/0JQBf9GQAX/ShAF/06wBf9RgAX/VMAF/1qgAAAAgCwAC6YoIawAD75sAA+/XAAP3qB6SOAAEAAIJ6YAPAAP3kAVsBYAHAAP3kAAFdAcAA/kwBXwMAAAABBcAAumgAAAAABAAAAwAAAAAAAAAAAF0DwAC6YgFfAwAAAT8BCQEAwAD9+gAAAAADBsAAumSCGsAA/HrAAPx/wAD8iwACVgAAAAEDwAD8gsAA/IsAAAABAQHAAPyFAAAgm+xfAwAAAABcAAbAALplghrAAPztwAD88sAA/SEAApxHAAAAAQPAAPz6wAD9IQAAAAIBAsAA/QIAAACBx2ADwAD95ADAAP0VAAAAhlRgA8AA/lIBagBgA8AA/aF5AFwABsAAumaCGsAA/dzAAP3hwAD96AACgowAAAABA8AA/ebAAP3oAAAAAAAAAFwAAABf9j0AX/Z3AF/2zQBf9voAAAADAsAAummCGsAA/i/AAP41wAEAyQPAAHCPAAEAAIJ6YAPAAP3kAVsBXQHAALocAV8DAAAAAAEEwAC6bIIawAD+acAA/nAJwABwkMAAuEcAXQPAALocAV8DAAAAAQXAALpzghrAAP51wAD+e8AA/ssBAAADwAD+hcAA/ssAAAABAQHAAP6QAAAAgfZdA8AAuhwBXwMAAAAAXQPAALppAV8DAAABPwIIAMAAumyAwAD+qsBf948JAMAA/sDAALpUAAAAAAMGwAC6boIawAD+0MAA/tnAAP77AQDAAG+1AAAAAQPAAP7lwAD++wAAAAAAAABgA8AA+tEBSsAA/ugBFsAA/vAWwAD+6C7AAHCQwAC4R8AAumzAAG+1wAC6SwbAALpwghrAAP8AwAD/CsAA/+MAAMAAcHgAAAABA8AA/xvAAP/jAAAAAgAAAsAA/y0AAADAAG+mYQMBXQPAALpVAV8DAABcAWoAYAPAAP2hecAA/2oAAADAAG+oYQMBXQPAALpVAV8DAABcAWoAYAPAAP2heV0DwAC6HAFfAwAAAUrAAP+iARzAAP+qFsAA/6IuwABwkMAAuEfAALpswABweAIAAALAAG+mgMAA/8bAX/hXwABvqIHAAP/awF/4e8AAuisGwAC6cYIawAD/6MAA//7AAQDHAACB+gAAAAEDwAEABMABAMcAAAAEAQHAAQAKAAAAwABvvWEDAV8DAABcAAPAAQArAAAAgaxgA8AA/I0BagBgA8AA/aF5wAEAOQAAAIOOYQMAXAFqAGADwAD9oXnAAQBIAAAAwABvhWADwAD60QFqAGADwAD9oXldA8AAulUBXwMAAAE+AUrAAQBeARzAAQBtFsABAGUuwABwkMAAuEfAALpsgfoEAAGAwAEAdMBf+RgDgayBwAEAjcBf+S2DjoLAAQCewF/5RsAAb4WDwAEAtcBf+V3AALosAABf99EAX/gqAF/47gBf+dkAAAADAsAAunSCGsABArHAAQLAwAEHrwfAAHCRAAEAAJZ5YAPAAP3kAVsBYAHAAP3kAAAAAQXAALp5AAAAAAQAAAMAAAAAAAAAAABdA8AAunQBXwMAAAE/AQkBAMAA/foAAAAAAgbAALp2ghrAAQXuwAEF9cABBhAAApxJAAAAAQPAAQX+wAEGEAAAAAEBAcABBgkAACCB9l0DwAC6HAFfAwAAAABdA8AAuWgBWwAGwAC6d4IawAEHn8ABB6bAAQetAAKCjAAAAAEDwAEHq8ABB60AAAAAAAAAXQPAALloAVsAAABf+k8AX/qYAF/6zAAAAAICwAC6eoIawAEKaMABCnfAARBuB8AAcJIAAQAAlnlgA8AA/eQBWwFgAcAA/eQAAl0BwAC6YgFfAwAAXQHAALp0AV8DAAAAAQXAALqAAAAAAAQAAAMAAAAAAAAAAABdA8AAunoBXwMAAAE/AQkBAMAA/foAAAAAAgbAALp8ghrAAQ4uwAEONcABDjwAAoKMAAAAAQPAAQ46wAEOPAAAAAAAAABdA8AAuWgBWwAGwAC6foIawAEQXcABEGjAARBsAQKfzgAAAAEDwAEQbMABEGwAAAAAAAAAXQPAALloAVsAAABf+1QAX/uIAF/7vAAAAAICwAC6gYIawAETPcABE0zAATN9B8AAcJMAAgAAlnlgA8AA/eQBWwAAgnpgA8AA/eQBWwFgAcAA/eQAAAEEwAC6hIIawAETTAAElnTAALhHAFsBMQBbAxoAwAC6hhoAwAC6hxoAwAC6iAAGBsAAuoaCGsABH63AAR+7wAEgWQRJAAAAAAEDwAEfzMABIFkAAAIAAJZ5YAPAAP3kAVsAAIJ6YAPAAP3kAVsBAQHAAR/uAAAAwABvpmEDAl0DwAC6HAFfAwIAYAPAAPrRXQPAALpVAV8DAwAAAF0DwAC6gQJfAwIAXwMDAAE9NQAAAACCcVsBGgDAAL1BNQAAAACWdV8DAgABKzUAAAAAwABwlF8DAwABKxMAAAbAALqHghrAASbOwAEm1sABJ8UEQcAAcJUAAAABA8ABJvTAASfFAAACAACWeWADwAD95AFbAACCemADwAD95AFbAwAAA8ABJwIAAADAAHCMYQMCXwMCAF0DwAC6YgFfAwMAXAFqAGADwAD9oXnAASc0AAAAwABwAmEDA2ADwAD95GADwAD+Ul0DwAC6YgFfAwMAXAFqAGADwAD9oXnAASeEAAAAwABwjWEDAV0DwAC6YgFfAwMAXAFqAGADwAD9oXldA8AAuoECXwMCAF8DAwABPTUAAAAAgnFbARoAwAC9MTUAAAAAlnVfAwIAASs1AAAAAMAAcJRfAwMAASsTAAAGwAC6iIIawAEpqcABKbHAASoUBEHAAHCWAWrAASmaYAPAAMvSwAF/9gAAAQPAASnLwAEqFAAAAgAAlnlgA8AA/eQBWwAAgnpgA8AA/eQBWwEBAcABKeoAAACetGEDAV0DwAC6HAFfAwIAXQPAALocAV8DAwAAAF0DwAC6gQJfAwIAXwMDAAE9NQAAAACCcVsBGgDAAL05NQAAAACWdV8DAgABKzUAAAAAwABwlF8DAwABKxMAAAbAALqKghrAASu3wAEr2MABLFwAAcAAcHcAAAABA8ABK/DAASxcAAAEAADAAHCYYAPAAP3kAVsAAMAAcJlgA8AA/eQBWwAAwABwmmADwAD95AFbAADAAHCbYAPAAP3kAVsBAQHAASwSAAAAg0pdA8AAuoECXwMCAF8DAwAAAF0DwAC6gQJfAwQAXwMFAAE+AUrAASwgAR/AASwrwADMbQEEXwMCAF8DAwBfAwQAXwMFAAGAwAEsUcBf/v0ABsAAuouCGsABMdfAATHhwAEx9wACnrQAAAABA8ABMeXAATH3AAAAAQEBwAEx8AAAIIH2XQPAALocAV8DAAAAAF0DwAC6HAFfAwEAAAbAALqMghrAATNTwAEzbcABM3sAApZkAAAAAQPAATN5wAEzewAAAgAAwABwnGADwAD95AFbAADAAHCdYAPAAP3kAVsAAAAAXQPAALqBAl8DAgBfAwMAAAAAX/w3AF/84wBf/eMAX/6ZAF//VQBf/6EAX//4AAAABgLAALqNghrAATQCwAE0EcABNNgHwABwngACAACWeWADwAD95AFbAACCemADwAD95AFbAWABwAD95AABXQHAALqBAl8DAABfAwEAAAEFwAC6kYIawAE0VMABNFrAATRxAQAAA8ABNG/AATRxAAAAAAAAAF0DwAC6jQJfAwAAXwMBAAE/AQkBwAE0WsAA/foAAAAAAQbAALqPghrAATR2wAE0kMABNNYAAJZkAAAAAQPAATScwAE01gAAAgAAwABwnGADwAD95AFbAADAAHCdYAPAAP3kAVsAAAAAXQPAALqBAl8DAgBfAwMAAUrAATSoAR7AATS6wAC6igEEXwMAAF8DAQBfAwIAXwMDAAEuAAAAYACsAGABJwAAAAECwAC6koIawAE2EsABNiHAAT5LB7L4AAEAAIJ6YAPAAP3kAVsBYAHAAP3kAAAAAAQGwAC6lIIawAE2Z8ABNm/AATchBAEAAAAAAQPAATZ9wAE3IQAAAQAAgnpgA8AA/eQBWwEBAcABNogAAACB9l0DwAC6HAFfAwEAAABdA8AAupIBXwMBAAFKwAE3AwEfwAE3B8AAvFwBAV8DAQABgMABNxrAYAGZAAbAALqWghrAATl0wAE5gcABOYsAAl0AAAABA8ABOYnAATmLAAAAAAAAAF0DwAC5aAFgA8AA+tEABsAAupmCGsABO2/AATt1wAE7fAECXgAAAAEDwAE7fMABO3wAAAAAAAAAXwMAAAAGwAC6l4IawAE+OsABPkHAAT5JAAKchgAAAAEDwAE+R8ABPkkAAAAAAAAAXQPAALloAVsAAABgAWQAYAHbAGACEwBgAkIAYAJ2AAAABALAALqaghrAAT6dwAE+o8ABP9ADwABwnwABAACCemADwAD95AFbAWABwAD95AABXQHAALpiAV8DAAABBMAAup2CGsABPujAAT7tGJdowAC4RwBdA8AAumIBWwABBcAAuqOCGsABPvHAAT7xwAE/GAAAAAPAAT8MwAE/GAAAAAEBAcABPxIAAASXaF0DwAC6YgFbAABdA8AAupoBXwMAAAE/AggBwAC6nYAAwGADEAkBwAE+8cAA/foAAAAAAwbAALqfghrAAT8dwAE/IsABP0cAAFYAAAABA8ABPyXAAT9HAAAAAQEBwAE/KAAAIBJfAwAAAABcAT4BPRzAAT86FsABPzQul2jAALhHwAC6nVYBAAGAwAE/PsBgA3UAwAC6ZAbAALqgghrAAT9MwAE/UcABP6UAAJxHAAAAAQPAAT9ZwAE/pQAAAAIBAsABP1oAAACBx2ADwAD95ADAAT9tAAAAhlRgA8AA/lIBagBgA8AA/aF5AFwBPgE9HMABP4YWwAE/gC6XaMAAuEfAALqdnEcCAAKAwAE/j8BgA9mBwAE/lsBgA+kAwAC6ZQbAALqhghrAAT+qwAE/r8ABP84AAIKMAAAAAQPAAT+0wAE/zgAAAAAAAABcAT4BPRzAAT/DFsABP70ul2jAALhHwAC6nYKMAAAAAMAAumYAAGADTABgA68AYAQ5AGAEiAAAAAMCwAC6pIIbhHeEhqoSB8AAcKAAAQAAgnpgA8AA/eQBWwFgAcAA/eQAAV0BwAC6egFfAwAAAAATBsAAuqaCG4TwhP6FBAECgfYAAAABA4UEhQQAAAAAAAAAXQPAALocAV8DAAAABsAAurCCG4xYjGCNlAQBAAAAAAEDjHCNlAAAAQAAgnpgA8AA/eQBWwUAAAWMfgAAAMAAb6ZhAwBcAWoAYAPAAP2heYyVAAAAwABvzmEDAFwBagBgA8AA/aF5jKsAAADAAG+nYQMAXAFqAGADwAD9oXmMvQAAAMAAb6hhAwBbAWoAYAPAAP2heYzUAAAAmd9gA8AA+tEBaozaYAPAAPrRAF0DwAC6pAFfAwEAAT4BSozoASOEjO/AYAWJH40CwAC7IAQBXwMBAASAjRvAYAUtgY0lwGAFRIKNLsBgBVuDjTjAYAVyAB+NUMAAuxgEAV8DAQAEgI1qwGAFLYGNdMBgBUSCjX3AYAVbg42HwGAFcgABXQPAALrPAV8DAQAGwAC6sYIbl8yX1JjKBAHAAHChAAAAAQOX7pjKAAABAACCemADwAD95AFbAwAAA5f8AAAAwABvpmEDAFwBagBgA8AA/aF5mA0AAADAAG+oYQMAXAFqAGADwAD9oXmYHgAAAJnfYAPAAPrRAWqYJGADwAD60QBdA8AAuqQBXwMBAAE+AUqYMgEjgpg5wGAGeh+YTMAAuTsCAV8DAQACgJhuwGAGTIGYeMBgBmMAH5iQwAC5QwIBXwMBAAKAmLPAYAZMgZi9wGAGYwABXQPAALj6AV8DAQAGwAC6p4IbmWSZe5mDAQLAAG+mAAAAAQOZg5mDAAAAAAAAAF4DAAAAAAABVwPAALhQAFwABsAAurOCG5mImZGZsQICwABvpgAAAAEDmZmZsQAAAAEBAZmfAAAAwABwomEDAFwAAFwABsAAuqiCG5qbmrKauQECwABvzgAAAAEDmrmauQAAAAAAAABeAwAAAAAAAVcDwAC4UABcAAbAALq0ghuavprHmuUCAsAAb84AAAABA5rOmuUAAAABAQGa1AAAAMAAb9BhAwBcAABcAAbAALqpghub0Jvnm+8BAsAAb6cAAAABA5vvm+8AAAAAAAAAXgMAAAAAAAFXA8AAuFAAXAAGwAC6tYIbm/Sb/ZwdAgLAAG+nAAAAAQOcBZwdAAAAAQEBnAsAAADAAG/RYQMAXAAAXAAGwAC6qoIbnLSc0ZzZAQLAAG+oAAAAAQOc2ZzZAAAAAAAAAF4DAAAAAAABVwPAALhRAFsABsAAuraCG5zenOedAgICwABvqAAAAAEDnO+dAgAAAAEBAZzwAAAAwABwo2EDAFsAAFwABsAAuquCG51knXadegEChEAAAAABA516nXoAAAAAAAAAXQPAALp6AV8DAAAABsAAuqyCG58cnyWfLQECuZMAAAABA58tny0AAAAAAAAAYAPAAPrRAAbAALqtghuhFqEfoScBAsAAb6wAAAABA6EnoScAAAAAAAAAYAPAAPrRAAbAALqughuhZKFtoXgBAsAAb68AAAABA6F4oXgAAAAAAAAAYAPAAPrRAAbAALq4ghuji6OQo5wAAlYAAAABA6OTo5wAAAABAQGjlgAAIJvsXwMAAAAAXAAGwAC6uYIbpR+lJKVTAAKcRwAAAAEDpSylUwAAAAIBAqU0AAAAgcdgA8AA/eQApUcAAACGVGADwAD+UgFqAGADwAD9oXkAXAAGwAC6uoIbpoSmi6aSAAKCjAAAAAEDppCmkgAAAAAAAABdA8AAuWgBWwAGwAC6u4Ibqdip36oQAAKcSQAAAAEDqeiqEAAAAAIBAanzAAAgg0pdA8AAuhwBXwMAAAABqgEAAADAAG+FYAPAAPrRAWoAYAPAAP2heV0DwAC5aAFbAAAAYATUAGAFAQBgBh0AYAbyAGAHJgBgB1kAYAeNAGAHwABgB/QAYAgnAGAIWwBgCI4AYAi7AGAI4wBgCQ0AYAk3AGAJZQBgCa0AYAnXAGAKLQAAABMCwAC6vIIbuMi417ufB8AAcKQAAQAAgnpgA8AA/eQBWwFgAcAA/eQAAV0BwAC6pAFfAwAAAAEFwAC6wgAAAAAEAAADAAAAAAAAAAAAXQPAALq8AV8DAAABPwEJAQDAAP36AAAAAAMGwAC6voIbudG51rnhAAJWAAAAAQO52bnhAAAAAQEBudwAACASXwMAAAAAXAAGwAC6v4IbuqO6qLrXAAKcRwAAAAEDurC61wAAAAIBArq4AAAAgcdgA8AA/eQAussAAACGVGADwAD+UgFqAGADwAD9oXkAXAAGwAC6wIIbu4+7lrudAAKCjAAAAAEDu5u7nQAAAAAAAABdA8AAuWgBWwAAAGAK6ABgCxUAYAtdAGALhwAAAAMCwAC6w4Ibu6K7sb0BB8AAcKUAAQAAgnpgA8AA/eQBWwFgAcAA/eQAAAABBcAAussAAAAABAAAAwAAAAAAAAAAAF0DwAC6wwFfAwAAAT8BCQEAwAD9+gAAAAAEBsAAusaCG7vTu+m8RAACwABv28AAuEcAAAABA7vzvEQAAAAEBAS8AAAAAMAAb71hAwFfAwAAXAC8GQAAAIGsYAPAAPyNALwnAAAAg45hAwBcALw2AAAAwABvhWADwAD60QAAXQPAALpVAV8DAAAABsAAuseCG7xIvE28fwAAwABv3sAAuEcAAAABA7xZvH8AAAABAQG8cAAAIIH5XQPAALpVAV8DAAAAAFwBPgAGwAC6yIIbvIO8iLy7AADAAG/fwAC4RwAAAAEDvJW8uwAAAAEBAbysAAAggfldA8AAulUBXwMAAAAAXAE+AAbAALrJghu8v7zGvP8AAMAAb9zAALhHAAAAAQO807z/AAAAAQEBvOoAACCB+V0DwAC6VQFfAwAAAABdA8AAuWgBWwFKvPsBKwAAYAv3AGAMZgBgDKQAYAziAGANKgAAAAQCwAC6zIIbvTy9S73pB8AAcKYAAQAAgnpgA8AA/eQBWwFgAcAA/eQABF0BwAC6pAFfAwAAXQHAALrDAV8DAABdAcAAu2EBXwMAAF0BwAC7aQFfAwAAAAEFwAC6zgAAAAAEAAADAAAAAAAAAAAAXQPAALrMAV8DAAABPwEJAQDAAP36AAAAAAAAAGANygAAAAACwAC6z4IbvmW+dMAAa6sHwABwpwABAACCemADwAD95AFbAWABwAD95AABXQHAALrMAV8DAAANBMAAutKCG8AAQPHAAEEDBsAAb8fAALhHAGADwAD8lwFqwABBAmADwAD8lwkEwAC604IbwABBaMAAQX0GwABwqMAAuEcAYAPAAPyXAWrAAEF8YAPAAPyXFQTAALrUghvAAEG5wABBzAbAAHCpwAC4RwBgA8AA/JcBasAAQctgA8AA/JchBMAAutWCG8AAQgvAAEInBsAAcKrAALhHAGADwAD8lwFqwABCJmADwAD8l1MEwAC61oIbwABDx8AAQ9gGwABvyMAAuEcAYAPAAPyXAWrAAEPXYAPAAPyXgVcEwAC614IbwABEpMAARLgGwABvycAAuEcAYAPAAPyXAWrAAES3YAPAAPyXg10EwAC62IIbwABGW8AARmMYwABwq8AAuEcAWwErBMAAutmCG8AARpbAAEatGMAAZDDAALhHAGADwAD8lwFqwABGn2ADwAD8lwkEwAC62oIbwABIE8AASB4YwABvzcAAuEcAXQPAALnXAVsBKwTAALrbghvAAEg2wABIPhjAAG+mAF4DAAAAAAABVwPAALhQAFwABMAAutyCG8AASFXAAEhcGMAAb84AXgMAAAAAAAFXA8AAuFAAXAAEwAC63YIbwABIc8AASHsYwABvpwBeAwAAAAAAAVcDwAC4UABcAATAALreghvAAEiYwABIoBjAAG+oAF4DAAAAAAABVwPAALhRAFsAAQXAALr/ghvAAEilwABIpcAASPEAAAADwABItsAASPEAAAAEBATAAEi8AAAEwABvpl4DAAAAAAABVwPAALhQAFwAwABIywAABMAAb85eAwAAAAAAAVcDwAC4UABcAMAASNkAAATAAG+nXgMAAAAAAAFXA8AAuFAAXADAAEjoAAAEwABvqF4DAAAAAAABVwPAALhRAFsAAF0DwAC6zwFfAwAAAT8FCAHAALrbgADAYBA9CAHAALrcgQDAYBBZCAHAALrdggDAYBB1CAHAALregwDAYBCRCQHAAEilwAD9+gAAAAAbBsAAuuCCG8AASUXAAElTwABJewEAgfYAAAABA8AASVrAAEl7AAAAAAAAAF0DwAC6HAFfAwAAAUrAAEldAR/AAElhwAC7NwEBXwMAAAEuAAbAALrhghvAAEndwABJ78AAShYBAIRAAAAAAQPAAEn0wABKFgAAAAAAAABdA8AAunoBXwMAAAFKwABJ9wEfwABJ+8AAu08BAV8DAAABLgAGwAC644IbwABKmMAASqHAAErPAQDAAHCswAC4RwAAAAEDwABKrcAASs8AAAAAAAAAYAPAAPrRAUrAAEqwASEcwABKyxzAAEq4FsAASrEuwABkMMAAuEfAALrZg3wBAAFqwABKumADwAD8lyEAwAD8r0gBAAGTAMAA/bsGwAC66YIbwABLAsAASwvAAEs7AQDAAG+vAAAAAQPAAEsXwABLOwAAAAAAAABgA8AA+tEBSsAASxoBIRzAAEs3HMAASyIWwABLGy7AAGQwwAC4R8AAutmDfAEAAWrAAEskYAPAAPyXFQDAAPyvSAEAAZMAwAD9uwbAALrkghvAAEt0wABLfcAAS8sBAMAAcK3AALhHAAAAAQPAAEuNwABLywAAAAAAAABgA8AA+tEBSsAAS5YBHMAAS7ocwABLnhbAAEuXLsAAZDDAALhHwAC62YN8AQABasAAS6BgA8AA/JdTAMAA/K9IAQABasAAS71gA8AA/JcJAMAA/bsGwAC66oIbwABL0MAAS9nAAEwCAQC5kwAAAAEDwABL4sAATAIAAAAAAAAAYAPAAPrRAUrAAEvlASEcwABL/hzAAEvtFsAAS+YuwABkMMAAuEfAALrZg3wBAAFqwABL72ADwAD8l4FXAMAA/K9IAQABkwDAAP27BsAAuuuCG8AATAfAAEwQwABMWwEAwABvrAAAAAEDwABMGcAATFsAAAAAAAAAYAPAAPrRAUrAAEwiASMWwABMIi7AAG+vwAC66RbAAEw+FsAATDAunITAALhHwAC66MAAcK7AALhHwAC7nSEWwABMUC7AAHCswAC4R8AAuuMBYAPAAPrRBsAAuuWCG8AATGDAAExpwABMnAEAwABv1MAAuEcAAAABA8AATHnAAEycAAAAAAAAAGADwAD60QFKwABMfAEhHMAATJgcwABMhBbAAEx9LsAAZDDAALhHwAC62YN8AQABasAATIZgA8AA/JeDXQDAAPyvSAEAAZMAwAD9uwbAALrmghvAAEzowABM8cAATRkBAMAAb9XAALhHAAAAAQPAAEz+wABNGQAAAAAAAABgA8AA+tEBSsAATQEBHMAATQkWwABNAi7AAGQwwAC4R8AAutljAQABasAATQtgA8AA/JeBVwDAAP3FBsAAuueCG8AATqXAAE67wABPdwEAwABwr8AAuEcAAAABA8AATsrAAE93AAAAAAAAAF0DwAC76gFfAwAAAT4EQBbAAE7XLsAAcK3AALhHwAC65MAATtfAAE7mAEnAAE7tIRbAAE7yLsAAb9TAALhHwAC65T4BSsAATwsBJsAATwsBFsAATxIuwABwq8AAuEfAALrYXQPAALvqAV8DAAA/TsAAT0nAAE9PAACCUl0DwAC7XAFfAwAAASbAAE9JARbAAE9RLsAAcKvAALhHwAC62F0DwAC7XAFfAwAASsAAT18BJsAAT18BFsAAT2yAwABPZsBgFZHAAHCwwAC7Xl0DwAC76gFfAwAABsAAuu+CG8AAT8LAAE/XwABRFQAAwABwscAAuEcAAAABA8AAT+vAAFEVAAAAAAAAAF0DwAC7/QFfAwAAAT4FQBbAAE/7LsAAcK3AALhHwAC65MAAT/vAAFAKAEnAAFARIRbAAFAWLsAAb9TAALhHwAC65T4CPSMcwABQOBbAAFAvLsAAcKvAALhHwAC62EgBAAErAMAA/fEXwABQLy7AAHCrwAC4Rx/AAFBAwAC8CAABXwMAAAAAwAC62CsBW0rAAFBeASbAAFBeARbAAFBlLsAAcKvAALhHwAC62F0DwAC7/QFfAwAAP07AAFCcwABQogAAglJdA8AAu1wBXwMAAAEmwABQnAEWwABQpC7AAHCrwAC4R8AAuthdA8AAu1wBXwMAAEnAAFCyHMAAUMQWwABQvIDAAFC2wGAW4sAAcLDAALteSAEAASsAwAD98T0XwABQ04DAAFDNwGAW4sAAcLAfwABQ4cAAvAgAAV8DAAAAAMAAu14/SsAAUP0BJsAAUP0BFsAAUQqAwABRBMBgFuLAAHCwwAC7Xl0DwAC7/QFfAwAABsAAuuiCG8AAUcfAAFHmwABSpAEAnITAALhHAAAAAQPAAFH0wABSpAAAAAAAAABdA8AAuzgBXwMAAAE+A0AWwABSAS7AAG+vwAC66cAAUgHAAFIMAEnAAFITFsAAUhcuwABv1MAAuEfAALrlPgJOwABSU8AAUlwAAMAAb+pdA8AAu1wBXwMAAAEmwABSUwEWwABSXi7AAHCrwAC4R8AAuthdA8AAu1wBXwMAAErAAFJuASbAAFJuARbAAFJ+gMAAUnXAYBgMwABwsMAAu15dA8AAuzgBXwMAAD9KwABSkQEmwABSkQEWwABSmC7AAHCrwAC4R8AAuthdA8AAuzgBXwMAAAbAALrwghvAAFNJwABTT8AAVB8AAMAAcLLAALhHAAAAAQPAAFNdwABUHwAAAAAAAABgA8AA+5wBPgNJwABTZhbAAFNqLrmTwAC66j4BSsAAU3wBH8AAU4fAAPw3AQABJ8AAcLMAP0AWwABTxi7AAG/UwAC4R8AAuuXAAFPGwABT1QBKwABT3AEfwABT58AA/DcBAAEnwABwtAAGwAC6+oIbwABUP8AAVEbAAFXhAACcSQAAAAEDwABUT8AAVeEAAAACAQHAAFRaAAAgg0pdA8AAuhwBXwMAAAABwABUaAAAAMAAb4VgA8AA+tEBagBgA8AA/aF5XQPAALloAVsBPgZJwABUfiEWwABUgy7AAG/VwAC4R8AAuuY9MMAAVJEcwABUly7AAHCywAC4RwAAAADAALrwP0nAAFStFsAAVLEuwABwrMAAuEfAALrjSsAAVL4BH8AAVMnAALoMAQFbASsAP07AAFUJwABVEgAAwABv6l0DwAC7XAFfAwAAAR/AAFUgwAC7YAQBXwMAAAQuFsAAVVYuwABwq8AAuEfAALrYgMAAVWDAYBlkNQAAAAEAYAPAAPrRAYHAAFVowGAZeiMcwABVdoIAwGAaSkgBAAErAAAqggDAYBpKAWADwAD60QA9F8AAVYUuwABwq8AAuEeCwABVkMBgGgPAALrYPRfAAFWeLsAAZDDAALhHHMAAVaUWwABVni7AAGQwwAC4R8AAutmBBgEAAWrAAFWoYAPAAPyXg10AwAD8sMAAutlKwABVvgEWwABVzoLAAFXFwGAaA8AAb+jAALtSBsAAuuyCG8AAVtPAAFbewABW+QEAn84AAAABA8AAVuPAAFb5AAAAAAAAAF0DwAC5aAFbAUrAAFbmARzAAFbmLsAAb9bAALhHAAAAAMAAuvEGwAC68YIbwABW/sAAVwXAAFd7AADAAG/WwAC4RwAAAAEDwABXFsAAV3sAAAAAAAAAXQPAALloAVsBPgI9IxzAAFcrFsAAVx8uwABvzcAAuEfAALraSAEAASsAwAD98RfAAFcfLsAAb83AALhHIxbAAFcvLsAAcKzAALhHwAC64xrAAFdEwAC5ax/AAFdWwAC6CwABWwAAAV0DwAC51wFbwAC62isBXQPAALnXAVtKwABXZQEWwABXbC7AAG/NwAC4R8AAutoGwAC6+4IbwABXr8AAV7TAAFgFAABWAAAAAQPAAFe3wABYBQAAAAEBAcAAV7oAACCAll8DAAAAAFwBPgJJwABXxyEWwABXzC7AAG/VwAC4R8AAuuY9MMAAV9ocwABX4C7AAHCywAC4RwAAAADAALrwPz0cwABX9i60K8AAuEcBAAGAwABX+8BgHDkAwAC68wbAALr8ghvAAFg7wABYQMAAWbMAAJxHAAAAAQPAAFhIwABZswAAAAIBAsAAWFAAAACBx2ADwAD95ADAAFhjAAAAhlRgA8AA/lIBagBgA8AA/aF5AFwBPgVJwABYdiEWwABYey7AAG/VwAC4R8AAuuY9MMAAWIkcwABYjy7AAHCywAC4RwAAAADAALrwPz2IwABYpcBgHMkewABYrcAAuIsBAAGAwABYu8BgHMkATsAAWNLAAFjeAACEXGADwAC9WgEcwABY7RrAAFjlwAC9q8AAb+QCAAKAwABY+8BgHMmBwABZAsBgHNkAwAC9wUnAAFkTIRzAAFkjgsAAWRfAYB1NSAEAASsAwAD98T4CPYjAAFk0wGAcyR7AAFk8wAC4iwEAARbAAFlWgsAAWUrAYB1NgcfAAL1cAD2JwABZZMBgHNkWwABZfYLAAFlxwGAdTYZUwAC9XT89HMAAWZMuwABv6cAAuEcCAAKAwABZncBgHMmBwABZpMBgHNkAwAC69AbAALr9ghvAAFuKwABbkcAAXD8AAIKMAAAAAQPAAFuWwABcPwAAAAAAAABdA8AAuWgBWwE+BEnAAFufFsAAW6MuuZPAALrqPgFKwABbtQEcwABbvC7AAG/WwAC4RwAAAADAALrxP0nAAFvbIRbAAFvgLsAAb9XAALhHwAC65j0wwABb7hzAAFv0LsAAcLLAALhHAAAAAMAAuvA/PRzAAFwKLsAAcGzAALhHAAAAAMAAuvJKwABcIQEcwABcKC7AAG/WwAC4RwAAAADAALrxBsAAuvKCG8AAXETAAFxJwABdBgAAwABwbMAAuEcAAAABA8AAXFjAAF0GAAAAAAAAAFwBPgI9F8AAXGEuwABkMMAAuEccwABcaBbAAFxhLsAAZDDAALhHwAC62YEGAQABasAAXGtgA8AA/JeBVwDAAPywwAC62UnAAFx+FsAAXIIuwABvr8AAuuk+AT0cwABcly7AAG/nwAC4RwAAAADAALtuScAAXK8WwABcsy7AAHCtwAC4R8AAuuQ+AT0cwABc4xzAAFzMLsAAcLHAALhHAAAAAMAAuu9WAQABasAAXO1gA8AAu+HAAX+vAMAAvAQ/BsAAuvOCG8AAXY3AAF2SwABeOQAAtCvAALhHAAAAAQPAAF2WwABeOQAAAAEBAcAAXZkAACCAll8DAAAAAFwBPgFJwABdphbAAF2qLsAAb6/AALrpPgE9HMAAXb8uwABv48AAuEcBAAGAwABdycBgIAsAwAC7bEnAAF3cFsAAXeAuwABwrcAAuEfAALrkPgE9HMAAXhAcwABd+S7AAHCxwAC4RwAAAADAALrvVgEAAR/AAF4YwAC72AEBXwMAAAGAwABeKMBgIAsAAMAAvAQ/BsAAuvSCG8AAXj7AAF5DwABfIgAAwABv6cAAuEcAAAABA8AAXkzAAF8iAAAAAgICwABeVAAAAIHHYAPAAP3kAMAAXmYAAACGVGADwAD+UgAAXAE+AUnAAF54FsAAXnwuwABvr8AAuuk+AT0cwABekS7AAG/lwAC4RwIAAoDAAF6cwGAg3IHAAF6jwGAg7ADAALttScAAXrsWwABevy7AAHCtwAC4R8AAuuQ+AT0cwABe7xzAAF7YLsAAcLHAALhHAAAAAMAAuu9WAQABH8AAXvfAALvgAgACgMAAXwXAYCDcgcAAXwzAYCDsAADAALwEPwbAALr1ghvAAF8nwABfLMAAYA0AAMAAbxfAALhHAAAAAQPAAF8ywABgDQAAAAAAAABcAT4FQBbAAF9iLsAAb9TAALhHwAC65cAAX2LAAF9xAE7AAF+bwABfpAAAwABv6l0DwAC7XAFfAwAAASbAAF+bARbAAF+mLsAAcKvAALhHwAC62F0DwAC7XAFfAwAAPRfAAF+0LsAAcKvAALhHFsAAX8iAwABfv8BgIe/AAHCwwAC7XsAAutg9F8AAX9UuwABkMMAAuEccwABf3BbAAF/VLsAAZDDAALhHwAC62YN8AQABHMAAX99qwABf4GADwAD8l4NdhJIAAAAAwAD8sgDAAPyvwAC62T0cwABf/4DAAF/2wGAh78AAb5kAAAAAwAC7WQbAALr2ghvAAGA9wABgU8AAY1cAAMAAb9vAALhHAAAAAQPAAGBdwABjVwAAAAQEBMAAYGMAAADAAG+9YQMBXwMAAFwAwABgfAAAAIGsYAPAAPyNAMAAYJAAAACDjmEDAFwAwABgnwAAAMAAb4VgA8AA+tEAAF0DwAC6VQFfAwAAAT4IScAAYLQhFsAAYLkuwABwrcAAuEfAALrkPgE9MMAAYNIfwABg3MAA/DcBAAEnwABwtQA/TsAAYTXAAGFCAACB+V0DwAC7OAFfAwAAAR/AAGFIwAC7QgUBXwMAAAUugMAAYXLAYCLwgcAAYXrAYCMEgsAAYYPAYCMUg8AAYYvAYCMiAE7AAGGywABhwAAAwABwtl0DwAC76gFfAwAAARbAAGHCLsAAcK/AALhHwAC65z0XwABh1i7AAGQwwAC4RxzAAGHdFsAAYdYuwABkMMAAuEfAALrZgQYBAAFqwABh4GADwAD8lxUAwAD8sMAAutlJwABh9xbAAGH7LsAAb9TAALhHwAC65T4DTsAAYjfAAGJAAADAAG/qXQPAALtcAV8DAAABJsAAYjcBFsAAYkIuwABwq8AAuEfAALrYXQPAALtcAV8DAAA9F8AAYluGwABiUsBgJEzAAHCwhMAAYmXAYCN3wAC7Xj0cwABigobAAGJ5wGAkTIIFAAAAAMAAu1c+AT0XwABiny7AAHCrwAC4R4TAAGKqwGAjd8AAutg9HMAAYs+EwABiwsBgI3fAAHC3wAC4RwEAAYXAAGLhwGAjxgDAALuFPRzAAGMChMAAYvXAYCN3wABwuMAAuEcBAAE0wABjEQPAAGMRwABjOAAAAAAAAABgA8AA/aEBPgE9HsAAYxzAALiRAQABFsAAYyguwABvpsAAutsAAMAAu5JKwABjQAGEwABjR8BgI3cGwAC694IbwABjXMAAY2PAAGoGAADAAG/cwAC4RwAAAAEDwABjcMAAagYAAAABAQHAAGOHAAAggfldA8AAulUBXwMAAAAAXQPAALloAVsBPghOwABljgAAAIF2XQPAALloAVsAScAAZZoWwABlni7AAG/UwAC4R8AAuuU+Ak7AAGXawABl4wAAwABv6l0DwAC7XAFfAwAAASbAAGXaARbAAGXlLsAAcKvAALhHwAC62F0DwAC7XAFfAwAAPYnAAGX1wGAlwhzAAGYHgsAAZf7AYCXunIYAAAAAwAC7WD89F8AAZhsuwABwq8AAuEcrwAC62D0XwABmMC7AAGQwwAC4RxzAAGZ0HMAAZkkWwABmQi7AAGQwwAC4R8AAutmDfAEAARzAAGZLHMAAZl9qwABmTWADwAD8lxWBBgEAAWrAAGZhYAPAAPyXg10AwAD8sISSAAAAAMAA/LIAwAD8r4EGAQABasAAZnZgA8AA/JchAMAA/LDAALrZScAAZowhHMAAZpkWwABmkC7AAG+owAC63kgBAAErAMAA/fE+AUnAAGaqHMAAZrWBwABmrsBgJcJIAQABKwDAAP3xPgFLPgE9icAAZ0jAYCXCJsAAZ0gBHMAAZ1EuwABvqAAAAADAALreXQPAALloAVsBAcAAZ2dbAcAAZ24AAAGDU1sAAcAAZ3EAAAGIbGADwAD+UgA+AT2JwABoIcBgJcI1wABoLgAAAQBdA8AAudcBWwEfwABoLsAAugsAAVsAADUAAAABAFsBHMAAaDmEwABoN8BgJ4rAAG+dwAC4RwIAAoLAAGhNwGAnYYPAAGhQwGAnbQDAALoDhADAYCeKPgE9icAAaMDAYCXCHMAAaNCBwABoycBgJcKB/wEAARbAAGjdLsAAb6jAALreAMAAuX0/T8AAaPvAAGkAAAABwABvmWEDAFwAA8AAaQjAAGmAAAAAAAAAAFwBPgFJwABpEyIhHMAAaSMWwABpFy7AAG/NwAC4R8AAutpIAQABKwDAAP3xABbAAGk6FsAAaS4uwABvzcAAuEfAALrawABvn8AAuEfAALnlPgE9HMAAaV4WwABpUi7AAG/NwAC4R8AAutrAAG+awAC4RwEAASsAwAC6AT9JwABphyEcwABpkoHAAGmLwGAlwkgBAAErAMAA/fE+AT2JwABpo8BgJcIcwABps4HAAGmswGAlwoH/AQABgsAAacDAYCgfAMAAuX0+AT0cwABp5oLAAGnewGAoHyAAAAAAAErAAGn1AYHAAGn8wGAlwgbAALr4ghvAAGoLwABqEMAAatYAAMAAb97AALhHAAAAAQPAAGocwABq1gAAAAEBAcAAajMAACCB+V0DwAC6VQFfAwAAAABcAT4CScAAakcWwABqSy7AAG/UwAC4R8AAuuU+Ak7AAGqHwABqkAAAwABv6l0DwAC7XAFfAwAAASbAAGqHARbAAGqSLsAAcKvAALhHwAC62F0DwAC7XAFfAwAAPRzAAGqrgcAAaqLAYCmQgfwAAAAAwAC7Vj89HsAAar7AALiRAQABFsAAasouwABvzsAAutwABsAAuvmCG8AAatvAAGrgwABrqQAAwABv38AAuEcAAAABA8AAau3AAGupAAAAAQEBwABrBAAAIIH5XQPAALpVAV8DAAAAAFwBPgJJwABrGBbAAGscLsAAb9TAALhHwAC65T4CTsAAa1jAAGthAADAAG/qXQPAALtcAV8DAAABJsAAa1gBFsAAa2MuwABwq8AAuEfAALrYXQPAALtcAV8DAAA9HMAAa3yBwABrc8BgKmeCBQAAAADAALtXPz0ewABrkMAAuJEBAAEWwABrnC7AAG+nwAC63QAAAGAQ+wBgEUoAYBGZAGASFABgEosAYBMQAGAThgBgFAoAYBSGAGAU8QBgFfkAYBedAGAYoABgGToAYBr6AGAbSgBgHBAAYByfAGAeHwBgHu0AYB/dAGAgrABgIZ0AYCLAAGAlcABgKSwAYCoDAGAq2gAAABsCwAC7AIIbwABrrsAAa73AAG02B8AAcLkAAQAAgnpgA8AA/eQBWwFgAcAA/eQAAl0BwAC6zwFfAwAAXQHAALq8AV8DAAAAAQXAALsNAAAAAAQAAAMAAAAAAAAAAABdA8AAuwABXwMAAAE/AQkBAMAA/foAAAAABQbAALsDghvAAGwmwABsLsAAbDQBAsAAZDDAALhHAAAAAQPAAGw0wABsNAAAAAAAAABgA8AA/JcABsAAuwaCG8AAbDjAAGxBwABsUgICwABkMMAAuEcAAAABA8AAbEfAAGxSAAAAAQEBwABsTAAAAIJSYAPAAPyXAABcAAbAALsJghvAAGxXwABsXMAAbJAAAMAAb+PAALhHAAAAAQPAAGxlwABskAAAAAEBAcAAbGgAACASXwMAAAAAXAE+AT0cwABsghbAAGx0LpyEwAC4R8AAuui0K8AAuEcBAAGAwABsh8BgLHEAwAC7iAbAALsKghvAAGyVwABsmsAAbP4AAMAAb+XAALhHAAAAAQPAAGykwABs/gAAAAICAsAAbKwAAACBx2ADwAD95ADAAGy+AAAAhlRgA8AA/lIAAFwBPgE9HMAAbN4WwABs0C6chMAAuEfAALrowABv6cAAuEcCAAKAwABs6MBgLOCBwABs78BgLPAAwAC7iQbAALsLghvAAG0DwABtCMAAbTQAAMAAb+fAALhHAAAAAQPAAG0RwABtNAAAAAAAAABcAT4BPRzAAG0oFsAAbRounITAALhHwAC66MAAbxfAALhHAAAAAMAAu4oAAGArxgBgK/4AYCxBAGAssABgLT0AYC2YAAAABQLAALsOghvAAG05wABtSMAAbrsHwABwugABAACCemADwAD95AFbAWABwAD95AABXQHAALrPAV8DAAAAAQXAALsVAAAAAAQAAAMAAAAAAAAAAABdA8AAuw4BXwMAAAE/AQkBAMAA/foAAAAAAwbAALsRghvAAG2SwABtl8AAbecAAMAAb+PAALhHAAAAAQPAAG2gwABt5wAAAAEBAcAAbaMAACASXwMAAAAAXAE+AT0cwABtvRbAAG2vLpyEwAC4R8AAuujAAG/vwAC4RwEAAR/AAG3NwAC72AEBXwMAAAGAwABt3cBgLlEAAMAAu44GwAC7EoIbwABt7MAAbfHAAG5qAADAAG/lwAC4RwAAAAEDwABt+8AAbmoAAAACAgLAAG4DAAAAgcdgA8AA/eQAwABuFQAAAIZUYAPAAP5SAABcAT4BPRzAAG41FsAAbicunITAALhHwAC66MAAb+/AALhHAQABH8AAbkXAALvgAgACgMAAblPAYC7TgcAAblrAYC7jAADAALuOBsAAuxOCG8AAbm/AAG50wABuuQAAwABv58AAuEcAAAABA8AAbn3AAG65AAAAAAAAAFwB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wABIC8AASswAAMAAcj/AAL5bAAAAAQPAAEgYwABKzAAAAAEBAcAASCAAAACD1mADwAD95AAAYAPAAP3kAT4JTsAASDXAAEg6AAGYs2ADwAD8lwEWwABIQxbAAEg8LpdIwAC+W8AAvzhhwAD9a07AAEhZwABIYgABwAByDGADwAD8lwEcwABIaYHAAEhkwGMOdIGNAQABlADAAP2+TsAASHzAAEiHAAHAAHIjYAPAAPyXARzAAEiOgcAASInAYw50g8EBAAGUAMAA/LROwABIosAASKsAAcAAcghgA8AA/JcBHMAASK0uho/AAL5bAQABgMAASLfAYw5ZAMAAv2lOwABIy8AASNcAAcAAciFgA8AA/JcBHsAASOPAAL9aAwADhMAASPDAYw8AFsAASPouwABx7MAAvlvAAL85gcAASQXAYw50AE7AAEkUwABJFgAAYmADwAD8lwEewABJIsAAv1sCAAKEwABJLsBjDwCCwABJOMBjDqIATsAASUvAAElQAACq2GADwAD8lwEcwABJWBbAAElSLpdIwAC+W8AAvzhLAQABhsAASVnAYw96AMAA/UpDwABJYSEcwABJbYfAAElowGMPrEgBAAFqwABJemADwAD8lwkAwAD9uz4DScAASZAhHMAASZmHwABJlMBjD6xIAQABasAASaZgA8AA/JcVAMAA/bs+Ak7AAEnJwABJywABlshgA8AA/JcBHMAASdmFwABJzcBjDzODwAEAAYfAAEnbwGMPrADAAPyxScAASekiHMAASe8UwABJ7cBjED0IAGMBAAGDwABJ8cBjDtEAwAD9xQAcwABJ/y685sAAvlsCAAKAwABKB8BjDlkcwABKERbAAEoMLrdVwAC+W8AAvzpLAQABFMAAShLAYxA9CAAAwAD9SgDAAL9qPgFKwABKIwEcwABKLxbAAEoqLrdVwAC+W8AAvzpLAQABFMAASjDAYxA9CAAAwAD9Sj8/PY7AAEpzwGMPeh7AAEqBwAC/XAIAAobAAEqMwGMPeoLAAEqPwGMOogA9j8AASqDAYw+sHMAASq0WwABKpy6XSMAAvlvAAL84SwEAAYbAAEquwGMPegDAAP1KSsAASrwBFsAASsMut1XAAL5bwAC/OgbAAMEYgi7AAErRwABK08AASzUAAJcoAAAAAQPAAErZwABLNQAAAAEBAcAASuEAAACD1mAD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+oTAAY3+YAPAAPyXAWqqpWADwAD8l8ABjB0EwADMKIJWqvGrFwbAAHZhAWqqsmADwAD6hMABjhJgA8AA/JcBaqsGYAPAAPyXwAGMIQTAAMwpglarVKtsBsAAdmMBaqscYAPAAPqEwAGOJmADwAD8lwFqq2JgA8AA/JfAAYwpBMAAzCqCVqurq8YGwAB2ZQFqq3FgA8AA+oTAAY46YAPAAPyXAWqrumADwAD8l8ABjC0EwADMK4JWrAisKgbAAHZnAWqry2ADwAD6hMABjk5gA8AA/JcBaqwbYAPAAPyXwAGMMQTAAMwsglasZqx7BsAAdmkBaqwvYAPAAPqEwAGOYmADwAD8lwFqrHJgA8AA/JfAAYw1BMAAzC2CVqy2rMoGwAB2awFqrIBgA8AA+oTAAY52YAPAAPyXAWqswmADwAD8l8ABjDkEwADMLoJWrQ2tMgbAAHZtAWqsz2ADwAD6hMABjopgA8AA/JcBaq0iYAPAAPyXwAGMPQTAAMwvglatcq2QBsAAdm8Baq03YAPAAPqEwAGOnmADwAD8lwFqrYNgA8AA/JfAAYxBBMAAzDCCVq3erhkGwAB2cQFqrZVgA8AA+oTAAY6yYAPAAPyXAWqt/mADwAD8l8ABjEUEwADMMYJWrlquegbAAHZzAWquHmADwAD6hMABjsZgA8AA/JcBaq5sYAPAAPyXwAGMSQTAAMwyglauta7IBsAAdnUBaq5/YAPAAPqEwAGO2mADwAD8lwFqrsBgA8AA/JfAAYxNBMAAzDOCVq7/rwoGwAB2dwFqrs1gA8AA+oTAAY7uYAPAAPyXAWqvBmADwAD8l8ABjFEEwADMNIJWr0uvawbAAHZ5AWqvD2ADwAD6hMABjwJgA8AA/JcBaq9dYAPAAPyXwAGMVQTAAMw1glavsK/YBsAAdnsBaq9wYAPAAPqEwAGPFmADwAD8lwFqr8ZgA8AA/JfAAYxZBMAAzDaCVrAgsFAGwAB2fQFqr91gA8AA+oTAAY8qYAPAAPyXAWqwO2ADwAD8l8ABjF0EwADMN4JWsJSwvAbAAHZ/AWqwVWADwAD6hMABjz5gA8AA/JcBarCrYAPAAPyXwAGMYQTAAMw4glaxA7EwBsAAdoEBarDBYAPAAPqEwAGPUmADwAD8lwFqsRxgA8AA/JfAAYxlBMAAzDmCVrF/scMGwAB2gwFqsTVgA8AA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wAD60QFKwABJBAEqBsAAzmWCV8AASQ7AAEkTwABJNgAAlmIAAAABA8AASRjAAEk2AAAAAQEBwABJHgAAAJcrYQMBXwMAAGADwAD60QAAYAPAAPrRAUrAAEkyASkGwADOZoJXwABJO8AASUDAAEliAACB1gAAAAEDwABJQ8AASWIAAAABAQHAAElJAAAAlythAwFfAwAAYAPAAPrRAABgA8AA+tEBSsAASV0BKgbAAM5nglfAAElnwABJacAASfEAAJZmAAAAAQPAAElzwABJ8QAAAAIBAcAASXkAAACXK2EDAV8DAABgA8AA+tEAAcAASY0AACCWZ2EDAF8DAAABagBgA8AA/aF5XwMAAAE+AknAAEmeIRzAAEmpgcAASaLAaJDmSAEAASsAwAD98UrAAEmyARzAAEm/gcAASbnAaJDmIAAAAAAAPz0wwABJxx7AAEniwADOuQAAAAAGwADOaIJXwABJ9sAASfjAAEp/AACWawAAAAEDwABKAcAASn8AAAACAQHAAEoHAAAAlythAwFfAwAAYAPAAPrRAAHAAEobAAAglmdhAwBfAwAAAWoAYAPAAP2heV8DAAABPgJJwABKLCEcwABKN4HAAEowwGiRlUgBAAErAMAA/fFKwABKQAEcwABKTYHAAEpHwGiRlSAAAAAAAD89MMAASlUewABKcMAAzrkAAAAABsAAzmmCV8AASoTAAEqGwABLDwAAlm4AAAABA8AASpHAAEsPAAAAAgEBwABKlwAAAJcrYQMBXwMAAGADwAD60QABwABKqwAAIJZnYQMAXwMAAAFqAGADwAD9oXlfAwAAAT4CScAASrwhHMAASseBwABKwMBokkRIAQABKwDAAP3xSsAAStABHMAASt2BwABK18BokkQgAAAAAAA/PTDAAErlHsAASwDAAM65AAAAAAbAAM5qglfAAEsUwABLG8AASz4AAFgAAAABA8AASx/AAEs+AAAAAQABwABLKAAAAIGxYAPAAP5+AWrAAEs0YAPAAP5+hCgAYAPAAP5+AUrAAEs8AScABsAAzmuCV8AAS0PAAEtPwABLcgAAgaUAAAABA8AAS1TAAEtyAAAAAQEBwABLWgAAAJcrYQMBXwMAAGADwAD60QAAXQPAAPz5AV8DAAABSsAAS24BLgbAAM5sglfAAEt3wABLg8AAS7MAAICrAAAAAQPAAEuJ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iGcAACCD210DwADQ7gFfAwAAAABgA8AA+0kBPgNOiHiIewAAwABJYGADwAD9rgEciH8WiH0ug4DAANDwgY0BAAEWiIeAiIHAaYmUg4DAANDwAMAA/b5OiJKIlQAAwABJYWADwAD9rgEciJkWiJcuvK/AANDxgY0BAAEWiKGAiJvAaYmUvK/AANDxAMAA/b5KiKgBHoivwADQwAEAARyIvByIt4GItMBpibKDjQEAAYGIucBpibIAwAD9v2QBAAEciMGCiL7AaYnrg40BAAGCiMPAaYnrAMAA/b8AwAD9vQAGwADQ+YJriXWJd4nvAADAAHgXAAAAAQOJiInvAAAAAQEBiZIAACCD210DwADQ7gFfAwAAAABfAwAAAT4DTomjiaYAAMAASWBgA8AA/a4BHImqFomoLoOAwADQ8IGNAQABFomygImswGmKloOAwADQ8ADAAP2+Tom9icAAAMAASWFgA8AA/a4BHInEFonCLryvwADQ8YGNAQABFonMgInGwGmKlryvwADQ8QDAAP2+SonTASaJ0wEcieIcid2BidrAaYqyg40BAAGBid/AaYqyAMAA/b9kAQABHInngonkwGmK64ONAQABgonpwGmK6wDAAP2/AMAA/b1fAwAAAABphYYAaYXUAGmGjQBphuoAaYeaAGmITQBpiOsAaYlyAGmKdABpi3EAAAAJAsAA0P+CbIHwgf+F+wfAAGllAWqB/2ADwADLv8ABf7YAAWABwAD95AAAAAAFBsAA0QGCaZYHlg+XPwQBAAFqlg9gA8AAy7/AAX+2AAABA5YVlz8AAAABAAGWGwAAAMAASb1gA8AA/JcBagBgA8AA/aF5AGADwADQ/wE+Ak6WLJYyAACCUmADwADj6AEeljzAANDQAQABIxyWTYCWSMBpi/dIAQABKwDAAP27HpZgwADQ0gAAAACAlm7AaYv3AWADwAD8lwBKlsMBNZbOAAABAGADwADQwwEfls7AANDYAQABgZbhwGmMGwA1AAAAAQBbARyW8IKW7sBpjGjAAHgCwADQnAAAAADAANDPNQAAAAEAWwEclwWClwPAaYxowAB4AsAA0JwAAAAAwADQzzUAAAABAFsBHJcagpcYwGmMaMAAeALAANCcAAAAAMAA0M81AAAAAQBbARyXL4KXLcBpjGjAAHgCwADQnAAAAADAANDPggDAaYxoBsAA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AEKgwGnyiCoqKhTAAELBwGnwywEBYAPAANQTAADAAP2CPz8AwAD9CT0XwABC7i7AAHifwADROR/AAEMVwADC+QECYAPAAP7wYAPAANP9AYDAAEM/wGnwEwDAANH+P0rAAENSASbAAENSARbAAENZLsAAeJ/AANE5wADR/l0DwAD9bQJgA8AA/vBgA8AA0/0GwADSFoJvwABDqMAAQ8vAAEbsAQCu1QAAAAEDwABD2MAARuwAAAAAAAAAXQPAAP1tAmADwAD+8GADwADTigE+CUnAAEPeIRzAAEPwFsAAQ+IuwAB4oMAA0TnAANH/SAEAASsAwAD98UrAAEP5ARbAAEQALsAAeKDAANE5wADR/z9OwABEGMAARB4AAMAAeK1dA8AA/W0CYAPAAP7wYAPAANOKAR7AAEQkwAD9dAACYAPAAP7wYAPAANOKAABOwABET8AARFcAAISUXQPAAP07AVsBHMAARHYmwABEYAAWwABEWi6E9cAA0hNgA8AA0e/AAHiuwADROQIAAhbAAESPLsAAeJrAANE5wADR+BbAAES7JsAARKUAFsAARJ8uhPXAANITYAPAANHvwAB4e8AA0TnAANG3AMAA0ixGwABEzMAAROjAAETVAAAAgmpbAIHAAETfwGn0WT4BPRzAAET1gMAARPDAafQdgL8CAAImwABE9QEWwABE/YLAAET2wGn038AAeHUAYAPAAP7wJsAARPUBgsAARQvAafTfYAPAANOKAMAA/YJOwABFIsAARS8AAITkXQPAAP07AVsBHMAARTEuwAB4r8AA0TkCAAIWwABFRi7AAHiawADROcAA0fgWwABFVS7AAHh7wADROcAA0bcAwADSLU7AAEVqwABFdQAAwAB4sGADwAD+fgEewABFd8AA0T8BAAEWwABFei7AAHh1wADSBwBGwABFi8AARbHAAEWUAAAAmQhbAILAAEWjwGn1Qz4CPRzAAEXFhMAARbnAafXMwAB4scAA0TkBAAGDwABF28Bp9ZMAAD0cwABF84DAAEXuwGn0HYC/AgACJsAARfMBFsAARgCEwABF9MBp9czAAHh1AGADwAD+8CbAAEXzAYTAAEYOwGn1zGADwADTigDAAP2CRsAARibAAEZOwABGLwAAAKlYYAPAANPwABbAAEY/LqKtwADSFz4BPRzAAEZbgMAARlbAafQdgL8CAAIW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xwBqAeQAagI1AGoDPgBqBJIAagX4AGoGSQBqBpoAagbrAGoHPgBqB5EAagfiAGoIPgBqCJwAagj6AGoJaABqCcEAagolAGoKngBqCvEAagtEAAAALALAANI3gm/AAF1uwABddMAAZVQDwAB40gAAAWABwADR7wABYAHAANPpBQTAANI6gm/AAF3TwABd5QnAAHjTwADROQBbAATAANI7gm/AAF8lwABfMBjAAHiVwADROQBgA8AA/vABKwTAANI8gm/AAF/jwABf7hjAAHjUwADROQBgA8AA0/0BKwTAANI9gm/AAGCowABgsxjAAFPxwADROQBgA8AA08wBKwTAANI+gm/AAGGNwABhmBjAAHjVwADROQBdA8AA/TsBYAPAANQdASsBBcAA0lSCb8AAXenAAF3pwABemwCAtcAA0TkAA8AAXgPAAF6bAAAAAwMDwABeBAAAAMAAeH1bAMAAXhQAAATAAHjTWwDAAF4oAAAAwAB4oVsAAGADwADSNwE/AggBwADSOoEAwGoNBQkAwABeRcAA0jYJAAmAwABeR8BqDPiCwABeUsBqDRIrKyoqKioqAA8GwADSQYJvwABeoMAAXqnAAF7OAQDAAHiywADROQAAAAEDwABexsAAXs4AAAAAAAAAYAPAAPrRAUrAAF7JASoGwADSQoJvwABfNMAAXz/AAF/RAQDAAHh1AAAAAQPAAF9KwABf0QAAAAAAAABgA8AA/vABPgJJwABfUBzAAF9gFsAAX1QuwAB4lcAA0TnAANI7SAEAASsAwAD++z4BPRfAAF9xLsAAeJXAANE5HsAAX3/AANFAAQABHsAAX4LAANFCAgACFsAAX5cuhUnAANJEFsAAX6MumrvAANJFAADAANI7P0rAAF+7ARbAAF/CLsAAeJXAANE5wADSOwbAANJDgm/AAF/ywABgA8AAYJgBALS9AAAAAQPAAGAOwABgmAAAAAAAAABgA8AA0/0BPgJJwABgFBzAAGAkFsAAYBguwAB41MAA0TnAANI8SAEAASsAwADUED4BPRfAAGA1LsAAeNTAANE5HMAAYEMuwAB41sAA0TkBAAEWwABgYy7AAHjTwADROcAA0joAwADST8AA0jw/SsAAYIIBFsAAYIkuwAB41MAA0TnAANI8BsAA0kSCb8AAYLfAAGDGwABhcgEAhUkAAAABA8AAYNHAAGFyAAAAAAAAAGADwADTzAE+AknAAGDXHMAAYOcWwABg2y7AAFPxwADROcAA0j1IAQABKwDAAP3xPgE9F8AAYPguwABT8cAA0TkewABhEMAA0UoBAAEewABhHMAA0lABAAEWwABhPC7AAHjTwADROcAA0joAAMAA0j0/SsAAYVwBFsAAYWMuwABT8cAA0TnAANI9BsAA0kWCb8AAYZzAAGG2wABiuQEAmrsAAAABA8AAYcHAAGK5AAAAAAAAAF0DwAD9OwFgA8AA1B0BPgJJwABhxxzAAGHXFsAAYcsuwAB41cAA0TnAANI+SAEAASsAwAD9ZT4CPRfAAGHoLsAAeNXAANE5HMAAYjQcwABh9i7AAHjXwADROQEAARbAAGIVLsAAeNPAANE5wADSOgDAANJRlmQAAWADwADUHQAAwAD9ScAA0j49F8AAYlMuwAB41cAA0TkfwABiZcAAwU0BAWADwADUHQEWwABiiy7AAHjVwADROcAA0j4AwADSPj9KwABiowEWwABiqi7AAHjVwADROcAA0j4GwADSRoJvwABivsAAYsfAAGLkAQDAAHimAAAAAQPAAGLdwABi5AAAAAAAAABgA8AA+tEBSsAAYuABKQbAANJHgm/AAGLowABi+MAAYxMBAMAAeLMAAAABA8AAYwzAAGMTAAAAAAAAAGADwADT2QFKwABjDwEuBsAA0kiCb8AAYxfAAGMbwABjSAEAoq0AAAABA8AAYynAAGNIAAAAAAAAAF0DwAD9OwFgA8AA0/ABSsAAYywBasAAYyxdA8AA/TsBYAPAANPwwAGVJAbAANJJgm/AAGNMwABjUMAAY3UBAIUsAAAAAQPAAGNewABjdQAAAAAAAABdA8AA/TsBYAPAANPMAUrAAGNhAWrAAGNhXQPAAP07AWADwADTzMABlSwGwADSSoJvwABjecAAY33AAGOhAQCG7AAAAAEDwABjhsAAY6EAAAAAAAAAXQPAAP07AWADwADTnQFKwABjiQFqwABjiV0DwAD9OwFgA8AA053AAZS1BsAA0kuCb8AAY6XAAGOpwABjuQEAhGAAAAABA8AAY7LAAGO5AAAAAAAAAGADwADUJgFKwABjtQErBsAA0k2Cb8AAY77AAGPFwABj/gAAIwAAAAEDwABjzcAAY/4AAAAAAAAAYAPAAP5+AUrAAGPTASTAAGP+AyfAAHjYHsAAY+3AANE/AQABFsAAY/AuwAB4dcAA0kIAJ4NIBsAA0k+Cb8AAZAPAAGQQwABkcAAEwAB41sAA0TkBagBgA8AAy83AAZZqAAABA8AAZC/AAGRwAAAAAQEBwABkMAAAAMAAeNpbAABgA8AA0/0ABsAA0lCCb8AAZHXAAGSBwABk4QAFwAB428AA0TkBagBgA8AAy83AAZZ+AAABA8AAZKDAAGThAAAAAQEBwABkoQAAAMAAeNpbAABgA8AA/vwABsAA0lGCb8AAZObAAGT0wABlUgAEwAB418AA0TkBagBgA8AAy83AAZaSAAABA8AAZRLAAGVSAAAAAQEBwABlEwAAAMAAeNpbAABdA8AA/TsBWwAAAGoNXQBqDZwAag5YAGoPCABqD7wAahDAAGoQ+wBqETYAahGLAGoR4ABqEjUAahJuAGoSzgBqEx8AahNwAGoTwwAAAA8CwADSVYJvwABlV8AAZWbAAGlDB8AAeN4AAAFgAcAA0W4AAWABwADTigMEwADSWIJvwABlvsAAZcgJwAB4e8AA0TkAWwAEwADSWYJvwABl08AAZd4YwAB4lcAA0TkAYAPAAP7wAATAANJagm/AAGZUwABmYhjAAHibwADROQBgA8AA/vABKwEFwADSZoJvwABl48AAZePAAGYfAIC1wADROQADwABl/MAAZh8AAAACAgLAAGYCAAAEwAB4e1sAwABmEwAABMAAeJVgA8AA/vAAAGADwADSVQE/AwgBwADSWIAAwGoUuQgBwADSWYEAwGoUxgkBwABl48AA0XAAAAAABwbAANJcgm/AAGYkwABmL8AAZkgBAMAAeHUAAAABA8AAZjrAAGZIAAAAAAAAAGADwAD+8AFKwABmPQEWwABmPS7AAHiVwADROcAA0lkGwADSXYJvwABmZsAAZnHAAGcHAQDAAGn7AAAAAQPAAGZ/wABnBwAAAAAAAABgA8AA/vABPgJJwABmhRzAAGaYFsAAZokuwAB4m8AA0TnAANJaSAEAASsAwAD++z4BPRfAAGapLsAAeJvAANE5HsAAZrrAANFBAgACFsAAZtAuqU7AANOOFsAAZtcuwAB4dcAA0lwAwADSWj9KwABm7gEWwABm9S7AAHibwADROcAA0loGwADSXoJvwABnDMAAZxXAAGdAAQCGbQAAAAEDwABnH8AAZ0AAAAAAAAAAYAPAAPrRAUrAAGciARzAAGcxHsAAZyLAANE/AQABFsAAZyUuwAB4dcAA0lwAgdgBAAEngLUAwAD+kAbAANJfgm/AAGdFwABnWMAAZ4cBAIRgAAAAAQPAAGdhwABnhwAAAAAAAABgA8AA1CYBPgFKwABnZwEewABnbsAA0UMBAAEWwABneC7AAHh7wADROcAA0lgABsAA0mCCb8AAZ4zAAGelwABokwEAhuwAAAABA8AAZ67AAGiTAAAAAAAAAF0DwAD9OwFgA8AA050BPgFKwABoMwEfwABoPsAAwU0BAWADwADTnQEcwABogh7AAGhswADRRAEAARbAAGh2LsAAeHvAANE5wADSWACAqwEBYAPAANOdAWrAAGiGYQMBYAPAAP3kYAPAANOdwAGVNADAAP0EAAbAANJjgm/AAGiYwABopsAAaRUDAEgAAAABA8AAaKjAAGkVAAAAAQEBwABoqQAAAIPbWwAAYAPAAPrRAT4BSsAAaLYBIhzAAGjOFsAAaMIuhZbAAP34SAEAARbAAGjXgMAAaNHAaheNhZbAAP34AMAA/fEAHMAAaP4WwABo8y7AAHh7wADROcAA0lhIAQABFsAAaQeAwABpAcBqF43AAHh7wADROQAAwAD98QbAANJhgm/AAGkawABpIsAAaUEBAIPGAAAAAQPAAGkrwABpQQAAAAAAAABgA8AA/JcBSsAAaS4BFsAAaTkWwABpLi7AAHh1wADSXIPGwAD++QAAahUJAGoVVQBqFgYAahZrAGoWxABqF2QAahgPAGoYYAAAAAcCwADSZ4JvwABpRsAAaUzAAHH9A8AAeN8AAAFgAcAA0lUAAmABwADT8GABwADR6QIEwADSaoJvwABqRMAAakoYwAB4lsAA0TkAYAPAANOKAATAANJrgm/AAGtVwABrYBjAAHjgwADROQBgA8AA08wBKwEFwADShIJvwABpvcAAab3AAGotAIC1wADROQADwABp18AAai0AAAADAwPAAGnYAAAAwAB4fVsAwABp6gAAAMAAeHVgA8AA/n4AwABp+wAABMAAeJZgA8AA04oAAGADwADSZwE/AggBwADSaoIAwGoZQAkAwABqEcAA0mYCAAKAwABqE8BqGSEewABqHsAA0UABAAGBwABqIcBqGS4AABIGwADSbYJvwABqTsAAamTAAGsGAQCpTgAAAAEDwABqasAA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wABwVAEqP07AAHBswABwfwABwAB4t2ADwAD+/AEWwABwnSbAAHCIAIDAAHCCwGogM2ADwADR6cAAeJPAANE5wADR7ErAAHCxASIewABwuMAA0UUCAAIWwABwxS7AAHiTwADROcAA0nSBwABw1cBqIMgAAR7AAHD0wADRRQIAAoHAAHEBwGogyBbAAHEVLsAAeJPAANE5wADSdAAGwADSgIJvwABxLcAAcUbAAHGSAAXAAHjjwADROQFqAGADwADLzcABlqYAAAEDwABxX8AAcZIAAAABAQHAAHFgAAAAwAB4fVsAAGADwADTigAGwADSgYJvwABxl8AAcaPAAHH7AAXAAHjlwADROQFqAGADwADLzcABlroAAAEDwABxwsAAcfsAAAABAQHAAHHDAAAAwAB4fVsAAGADwAD+/AAAAGoZlgBqGlYAahqPAGoayABqG3wAahu3AGocBQBqHGEAahy2AGodCwBqHUYAah2BAGod4QBqHq0Aah7+AGogBwBqIVsAaiGsAGoh/QAAABICwADShYJvwAByAMAAcgbAAH6cA8AAeOcAAAFgAcAA0lUAAmABwADT+GABwADR6QcEwADSiIJvwAByeMAAcoYJwAB4k8AA0TkAYAPAAP78AATAANKJgm/AAHKVwABynwnAAHiXwADROQBgA8AA+tEABMAA0oqCb8AAcq7AAHLDCcAAeJnAANE5AGADwAD60QAEwADSi4JvwABzsMAAc7YYwAB4lsAA0TkAYAPAANOKAATAANKMgm/AAHSmwAB0rxjAAHjowADROQBgA8AA0jcBKwTAANKNgm/AAHd4wAB3hhipxMAA0TkAXQPAAP07AWADwADT8AErBMAA0o6Cb8AAeYzAAHmaGMAASv7AANE5AF0DwAD9OwFgA8AA08wBKwEFwADSoYJvwAByyMAAcsjAAHN5AAAAA8AActvAAHN5AAAABgYGwABy3AAAAMAAeH1bAMAAcuwAAATAAHiTYAPAAP78AMAAcwMAAADAAHh1YAPAAP5+AMAAcxoAAATAAHiXYAPAAPrRAMAAcysAAATAAHiZYAPAAPrRAMAAc0cAAATAAHiWYAPAANOKAABgA8AA0oUBPwUIAcAA0oiBAMBqI6AIAcAA0omDAMBqI8QIAcAA0oqEAMBqI9YIAcAA0ouFAMBqI+gJAMAAc13AANJmAgACgMAA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BMAA0sqCb8AAiZ7AAImmCYbsAF0DwAD9OwFgA8AA050AAQXAANLVgm/AAImrwACJq8AAi54AgLXAANE5AAPAAInKwACLngAAAAcHB8AAidcAAASqA2ADwADTrQDAAInxAAAEwAB4+lsAwACKHAAAAMAAePtdA8AA/TsBWwDAAIo2AAAAwAB4/FsAwACKTwAABIS1YAPAAPrRAMAAimQAAASEtmADwAD60QDAAIqEAAAAwAB4/V0DwAD9OwFbAABgA8AA0sEBPwgIAcAA0sOAAMBqOagIAcAA0sWBAMBqObgIAcAA0siEAMBqOeYIAcAA0smFAMBqOfYIAMAA0scewACKqMAA0UABAAEmwACKqwGDwACKq8BqOdlgA8AA/n4ACADAANLGH8AAitTAAMFNAQFgA8AA08UBHMAAixuCwACLCMBqOcWWZAABYAPAANPFAADAAP1JAAgAwADSyh/AAItNwADBTQEBYAPAANOdARzAAIuRhsAAi3/AajoGgKsBAWADwADTnQFqwACLlWEDAWADwAD95GADwADTncABlTQAwAD9BAAJAcAAiavAANFwAAAAAAUGwADSzIJvwACLo8AAi6zAAIvBAQCEtAAAAAEDwACLtcAAi8EAAAAAAAAAYAPAAPrRAUrAAIu4ASEWwACLuS6EtcAA0sgGwADSzYJvwACLxsAAi9jAAIz4AQCEswAAAAEDwACL5sAAjPgAAAAAAAAAYAPAANOtAT4EScAAi+wlwACMBhbAAIvwLsAAePrAANE5wADSxWADwADSoj4BSsAAjCYBJsAAjCYBFsAAjC0uwAB4+sAA0TnAANLFYAPAANOtP07AAIxSwACMXwAAwAB4/mADwADTrQEewACMYcAA0tIBAAEWwACMcy7AAHj6wADROcAA0sUAScAAjI8hHMAAjKCAwACMk8BqO9RIAQABKwDAANOzPgE9F8AAjLEuwAB4+sAA0TmAwACMycBqO9TAANLFP0rAAIzhAYDAAIzowGo71AbAANLQgm/AAIz9wACNE8AAjisAAK6dAAAAAQPAAI0ewACOKwAAAAAAAABdA8AAuWgBYAPAANOtAT4DScAAjSclwACNQRbAAI0rLsAAePrAANE5wADSxWADwADSoj4BSsAAjWEBHsAAjWzAALlxAQFgA8AA060BJsAAjXkBFsAAjXkuwAB4+sAA0TnA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wACf0sAAoAQAAAABAQHAAJ/TAAAAwAB4fVsAAF0DwAD9OwFbAAbAANMOgm/AAKAJwACgF8AAoFMABcAAeR/AANE5AWoAYAPAAMvNwAGYAgAAAQPAAKArwACgUwAAAAEBAcAAoCwAAADAAHh9WwAAYAPAAP5+AAAAakOBAGpEBgBqRIsAakUQAGpFlQBqRh0AakajAGpHKwBqR7EAakg3AGpIvQBqSTUAakn6AGpKjABqStsAakvtAGpMzABqTS8Aak9GAGpPnQBqULwAalEcAGpRcwBqUcoAalIdAGpSbgAAABkCwADTE4JvwACgWMAAoF7AAKTnA8AAeSEAAAFgAcAA0lUAAWABwADUEwUEwADTFYJvwACgzcAAoNIJqU4AYAPAANOKAATAANMWgm/AAKDhwACg6QmEHgBgA8AA+tEABMAA0xeCb8AAoPjAAKD/CYQgAGADwAD60QAEwADTGIJvwAChDsAAoRUJhCIAYAPAAPrRAATAANMagm/AAKOSwACjlxiSXcAA0TkAYAPAANPMAAEFwADTJoJvwAChGsAAoRrAAKHCAIC1wADROQADwAChMMAAocIAAAAHBwfAAKExAAAAwAB4fVsAwAChQwAAAMAAeHVgA8AA/n4AwAChVAAABKlOYAPAANOKAMAAoWAAAASSXWADwADTzADAAKFyAAAEhB5gA8AA+tEAwAChgQAABIQgYAPAAPrRAMAAoY8AAASEImADwAD60QAAYAPAANMTAT8GCAHAANMVggDAalPVCAHAANMagwDAalPlCAHAANMWhADAalP1CAHAANMXhQDAalQFCAHAANMYhgDAalQVCQDAAKGmwADSZgIAAoDAAKGowGpTth7AAKGzwADRQAEAAYHAAKG2wGpTwwAABQbAANMcgm/AAKHHwACh0MAAofQBAIeSAAAAAQPAAKHbwACh9AAAAAAAAABgA8AA+tEBSsAAod4BJcAAoeQWwACh3i6pTsAA0xVgA8AA060GwADTHoJvwACh+cAAogLAAKOCAQDAAHiawADROQAAAAEDwACiEMAAo4IAAAAAAAAAYAPAAP78AT4CTsAAohzAAKIeAAGu5WADwADTigEWwACiIC6pTsAA0xVJwACiYSXAAKJngMAAomXAalUjYAPAANHvPgFKwACihQEWwACijhTAAKKMwGpVIwABYAPAANHvwAB4msAA0TnAANH4ScAAoqglwACiroDAAKKswGpVI2ADwADS3z4BSsAAos0BFsAAotYUwACi1MBqVSMAAWADwADS38AAeJrAANE5wADS4knAAKLwJcAAovaAwACi9MBqVSNgA8AA0qI+AUrAAKMWARbAAKMfFMAAox3AalUjAAFgA8AA0qLAAHiawADROcAA0q8+AT0wwACjQR/AAKNLwAD8KQEAASTAAKN3AifAAHkiFsAAo3AuqU7AANMVAAbAANMfgm/AAKObwACjqsAApDABAIKUAAAAAQPAAKOvwACkMAAAAAAAAABgA8AA08wBPgJJwACjtRzAAKO/FsAAo7kukl3AANE5wADTGkgBAAErAMAA/fE+AT0XwACj0C6SXcAA0TkewACj2MAA0UoBAAEmwACj5AEewACj5MAA0yMCAAIWwACj+S7AAHh7wADROcAA0lgWwACkBS7AAHiawADROcAA0x4AYAPAAP78AMAA0xo/SsAApCABFsAApCcukl3AANE5wADTGgbAANMhgm/AAKQ1wACkPMAApIkAACMAAAABA8AApETAAKSJAAAAAAAAAGADwAD+fgFKwACkUAEkwACkiQMnwAB5Ix7AAKRzwADTdAEAARbAAKR7LsAAeHXAANJcACeDSAbAANMjgm/AAKSOwACklcAApOUABcAAeSTAANE5AWoAYAPAAMvNwAGYFgAAAQPAAKSpwACk5QAAAAICAsAApKoAAADAAHh9WwDAAKS1AAAAmuZbAABbAAAAalSZAGpU6ABqVjcAalcDAGpXYwBqV7oAAAAFAsAA0yeCb8AApOrAAKTwwACroQPAAHkmAAABYAHAANMTAAFgAcAA1B0HBMAA0yqCb8AApVDAAKVZCcAAcozAANE5AGADwAD8lwAEwADTL4JvwAClaMAApXIJoXEAYAPAAPrRAATAANMwgm/AAKWBwACliAmkBQBgA8AA+tEABMAA0yuCb8AApZfAAKWqCcAAeSfAANE5AF0DwAD9OwFbAATAANMsgm/AAKekwACnuhjAAHkowADROQBgA8AA/eQABMAA0y2Cb8AAp83AAKfaGMAAbzbAANE5AGADwADTnQErBMAA0y6Cb8AAqjnAAKo+GJJdwADROQBgA8AA08wBKwEFwADTPYJvwAClr8AApa/AAKeYAIC1wADROQADwAClxsAAp5gAAAAJCQnAAKXOAAAAwAB4fVsAwACl5gAAAMAAeHVgA8AA/n4AwACmCgAAAKlOYAPAANOKAMAAphwAAATAAHKMYAPAAPyXAMAApjIAAAShcWADwAD60QDAAKZJAAAEpAVgA8AA+tEAwACmXQAAAIQgYAPAAPrRAMAApnEAAATAAHkoYAPAAP3kAMAAppQAAATAAHknXQPAAP07AVsAAGADwADTJwE/BggBwADTKoMAwGpZMQgBwADTL4QAwGpZQwgBwADTMIUAwGpZUwgBwADTLIcAwGpZcwgBwADTKxQAwGpZhQgACQDAAKa3wADTJgcAB4DAAKbGwGpZAoHAAKbdwGpZD4LAAKb1wGpZISsqhsAAp2LAalljKgAHBsAA0zKCb8AAp97AAKfxwACoqgEAgyoAAAABA8AAp/7AAKiqAAAAAAAAAGADwADTnQE+A0nAAKgEIRbAAKgJLqFxwADTLz4BSsAAqB0BKz9JwACoNBzAAKhGFsAAqDguwABvNsAA0TnAANMtSAEAASsAwADToz4BPRfAAKhXLsAAbzbAANE5HsAAqGfAANFIAQABFsAAqG8uwAB5KMAA0TnAANMsAMAA0y0/SsAAqJIBFsAAqJkuwABvNsAA0TnAANMtBsAA0zOCb8AAqK/AAKi4wACo6QEAwAB4eQAAAAEDwACoyMAAqOkAAAAAAAAAYAPAAPrRAUrAAKjLASEcwACo4hbAAKjLLsAAeSjAANE5wADTLEgBAAErAMAA/fEGwADTNIJvwACo7sAAqQHAAKlYAQCEYAAAAAEDwACpCsAAqVgAAAAAAAAAYAPAANQmAT4BPTDAAKkQH8AAqRrAAPwpAQABJ8AAeSkABsAA0zWCb8AAqV3AAKl2wACqKQEAhuwAAAABA8AAqX/AAKopAAAAAAAAAF0DwAD9OwFgA8AA050BPgJJwACphRzAAKmdFsAAqYkuwAB5J8AA0TnAANMrSAEAASsAwAD9ZUrAAKmmAWrAAKmtXQPAAP07AWADwADTncABlLU/SsAAqcsBH8AAqdbAAMFNAQFgA8AA050BHMAAqhgWwACqBC7AAHknwADROcAA0yuAqwEBYAPAANOdAWrAAKocYQMBYAPAAP3kYAPAANOdwAGVNADAAP0EAAbAANM2gm/AAKpCwACqUcAAqu4BAIKUAAAAAQPAAKpWwACq7gAAAAAAAABgA8AA08wBPgJJwACqXBzAAKpmFsAAqmAukl3AANE5wADTLkgBAAErAMAA/fE+AT0XwACqdy6SXcAA0TkewACqf8AA0UoBAAEewACqlsAA0zoDAAMWwACqrC7AAHh7wADROcAA0lgWwACquC7AAHKMwADROcAA0yoWwACqwy7AAHiawADROcAA0x4AAMAA0y4/SsAAqt4BFsAAquUukl3AANE5wADTLgbAANM4gm/AAKrzwACq+sAAqzAAACMAAAABA8AAqwLAAKswAAAAAAAAAGADwAD+fgFKwACrCAEkwACrMAMnwAB5Kh7AAKsfwADRPwEAARbAAKsiLsAAeHXAANJcACeDSAbAANM6gm/AAKs1wACrQcAAq58ABcAAeSvAANE5AWoAYAPAAMvNwAGYKgAAAQPAAKtWwACrnwAAAAMDA8AAq1cAAADAAHh7WwDAAKtjAAAAwAByjFsAwACrbgAAAJrmWwAAYAPAAP78AAAAaloXAGpa2gBqWzYAaluCAGpcWABqXSoAal2KAGpd8wAAAAcCwADTPoJvwACrpMAAq6rAALDbA8AAeS0AAAFgAcAA0W4AAmABwADTzGABwADTigEEwADTQIJvwACsEMAArBoJwAB4dQBgA8AA/vAAAQXAANNWgm/AAKwfwACsH8AArFgAgLXAANE5AAPAAKwzwACsWAAAAAEBAcAArDsAAACAvWADwAD+fgAAYAPAANM+AT8CCADAANNAHsAArFDAANFAAQABgMAArFPAal6PAAkBwACsH8AA0XAAAAAAEQbAANNCgm/AAKxdwACsZsAArHgBAIZtAAAAAQPAAKxwwACseAAAAAAAAABgA8AA+tEBSsAArHMBKgbAANNDgm/AAKx8wACshcAArJcBAIeSAAAAAQPAAKyQwACslwAAAAAAAABgA8AA+tEBSsAArJMBKQbAANNEgm/AAKycwACsssAArL8BAKlOAAAAAQPAAKy4wACsvwAAAAAAAABgA8AA04oBSsAArLsBKwbAANNFgm/AAKzEwACs18AArOcBAIRgAAAAAQPAAKzgwACs5wAAAAAAAABgA8AA1CYBSsAArOMBKwbAANNGgm/AAKzrwACtBMAArSgBAIbsAAAAAQPAAK0NwACtKAAAAAAAAABdA8AA/TsBYAPAANOdAUrAAK0QAWrAAK0QXQPAAP07AWADwADTncABlLUGwADTR4JvwACtLcAArTbAAK1gAQDAAHiiAAAAAQPAAK1HwACtYAAAAAAAAABgA8AA+tEBSsAArUoBHMAArVUWwACtSi7AAHh1wADTQEgBAAFqwACtWGADwAD+8MABmDkAwAD++wbAANNIgm/AAK1kwACtbcAAre0BAMAAeKEAAAABA8AArXvAAK3tAAAAAAAAAGADwAD+/AE+AknAAK2BHMAArZAWwACthS7AAHh1wADTQEgBAAFqwACtk2ADwAD+8MABmDkAwAD++0rAAK2dAS1bPz0wwACtsR/AAK27wAD8KQEAASfAAHkuAAbAANNJgm/AAK3ywACuD8AArjwBAKKtAAAAAQPAAK4dwACuPAAAAAAAAABdA8AA/TsBYAPAANPwAUrAAK4gAWrAAK4gXQPAAP07AWADwADT8MABlSQGwADTSoJvwACuQMAArlXAAK56AQCFLAAAAAEDwACuY8AArnoAAAAAAAAAXQPAAP07AWADwADTzAFKwACuZgFqwACuZl0DwAD9OwFgA8AA08zAAZUsBsAA00uCb8AArn/AAK6IwACupQEAwAB4pgAAAAEDwACunsAArqUAAAAAAAAAYAPAAPrRAUrAAK6hASkGwADTTIJvwACuqcAArrjAAK7TAQDAAHizAAAAAQPAAK7MwACu0wAAAAAAAABgA8AA08wBSsAArs8BLgbAANNNgm/AAK7YwACu48AArv4BAMAAafsAAAABA8AArvHAAK7+AAAAAAAAAGADwAD+8AFKwACu9AEWwACu9C7AAHh1wADTQAbAANNQgm/AAK8DwACvEcAAr5EDAEgAAAABA8AArxPAAK+RAAAAAQEBwACvFAAAAIPbWwAAYAPAAPrRAT4CScAAryEhJcAAryuAwACvJcBqYopgA8AA0z4+AUrAAK9LASo/SsAAr2MBHMAAr3oWwACvby7AAHh1wADTQEgBAAEWwACvg4DAAK99wGpiisAAeHUAAMAA/vsGwADTToJvwACvlsAAr57AAK+9AQCDxgAAAAEDwACvp8AAr70AAAAAAAAAYAPAAPyXAUrAAK+qARbAAK+1FsAAr6ouwAB4dcAA00CDxsAA/vkGwADTUYJvwACvwsAAr8nAAK/6AAAjAAAAAQPAAK/RwACv+gAAAAAAAABgA8AA/n4BSsAAr9cBJMAAr/oDJ8AAeS8ewACv6cAA0T8BAAEWwACv7C7AAHh1wADTQAAng0gGwADTUoJvwACv/8AAsATAALBoAACbGgAAAAEDwACwD8AAsGgAAAABAQHAALAbAAAAg9tgA8AA08wAAGADwAD60QE+AUrAALAoASIcwACwOhbAALAvLsAAeHXAANNASAEAAWrAALA9YAPAAP7wwAGYOQDAAP77ASXAALBPgMAAsEnAamPTYAPAANM+BsAA01OCb8AAsG3AALBywACw2QAAwAB4tgAAAAEDwACwgMAAsNkAAAABAQHAALCMAAAAg9tgA8AA08wAAGADwAD60QE+AUrAALCZASIcwACwqxbAALCgLsAAeHXAANNASAEAAWrAALCuYAPAAP7wwAGYOQDAAP77ASXAALDAgMAAsLrAamRgYAPAANM+AABqXtQAal8NAGpfRgBqX38Aal+4AGpgDQBqYHIAamD5AGphTgBqYaMAamHeAGpiGQBqYmEAamL4AGpjSQBqY6kAamQ0AGpkwQAAABECwADTV4JvwACw3sAAsOTAALjDA8AAeTAAAAFgAcAA/eQAAAMEwADTWoJvwACxBcAAsTQEwAB5McAA0TkAYAPAANNvAR/AALEgwADRYwAAAAAEwADTW4JvwACzycAAs/0EwAB5MsAA0TkAXQPAAPx4AWADwADR7wEfwACz58AA/IwBAWADwADR7wEnwAB5MwAEwADTXIJvwAC0HMAAtEsEwAB5NMAA0TkAXQPAAPx4AWADwADTzAEfwAC0NsAA/IwBAWADwADTzAEnwAB5NQABBcAA02gAAAAABAAAAwAAAAAAAAAAAGADwADTVwE/AQkBAMAA/foAAAAACAbAANNegm/AALE4wACxTMAAsYcAAcAAeTYAAAABA8AAsV/AALGHAAAAAAAAAGADwADTbwE+AUrAALFoARrAALFvwADTWgbAANNfgm/AALG9wACx08AAsnIAAcAAeTcAAAABA8AAsdrAALJyAAAAAQEBwACx4gAAAMAAeH1gA8AA/eQAAGADwADTnQE+AUrAALHzASMlwACyBIDAALH6wGpmemADwAD8jR/AALIewADR6AEAARTAALI0wGpmegABYAPAAPyNAB/AALJNwADR2gEAAYDAALJkwGpmegABYAPAANHEBsAA02GCb8AAsnfAALKKwACy1QAFwAB5OMAA0TkBagBgA8AA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AQABKwDAANOzPgE9iInawGpwwCaJ2gEeieHAANNyAgACgIntwGpwwCaKFAEWihQmifwAgYn0wGpwzmADwADSosAAeHvAANE5wADRt2ADwADTaQBgA8AA/n4/SoorAR+KNsAAz2wBAAGAilLAanDAAAAAam0iAGptcwBqbagAam+wAGpv2ABqcAAAanAqAGpwkQBqcgwAAAAIAsAA032Cbpp4moeajwfAAHlNAAABYAHAAP3kAAAAAQXAANN/AAAAAAQAAAMAAAAAAAAAAABgA8AA030BPwEJAQDAAP36AAAAAAAAAGpyfwAAAAACwADTgIJumsWa1KAzB8AAeU4AAAFgAcAA/eQAAWABwADTfQABBcAA04kAAAAABAAAAwAAAAAAAAAAAGADwADTgAE/AQkBAMAA/foAAAAABQbAANOCgm6bS5tWm18BAqQLAAAAAQObX5tfAAAAAAAAAGADwAD+fgAGwADTg4Jum7GbupvDAQLAAHhuAAAAAQObw5vDAAAAAAAAAGADwAD60QAGwADThIJunAWcF5wiAQLAAHhtAAAAAQOcIpwiAAAAAAAAAGADwADTrQAGwADThoJunVCdXp1nAwJIAAAAAQOdYJ1nAAAAAQEBnWEAAACD21sAAGADwAD60QAGwADTh4JuoAugIaAxAALAAHhwAAAAAQOgKKAxAAAAAQEBoC0AAACArGADwAD+/wAAXQPAALloAWADwADTrQAAAGpy2ABqcwAAanMqAGpzVABqc4QAanPDAAAABQLAANOKgm6giKCXtAwHwAB5TwAAAWABwAD95AABYAHAANN9AAEFwADTlAAAAAAEAAADAAAAAAAAAAAAYAPAANOKAT8BCQEAwAD9+gAAAAAHBsAA04yCbqHNodih4gECwAB4dQAAAAEDoeKh4gAAAAAAAABgA8AA/vAABsAA042CbqVOpVmlZgECwABp+wAAAAEDpWalZgAAAAAAAABgA8AA/vAABsAA046CbqiuqMSoyQECqU4AAAABA6jJqMkAAAAAAAAAYAPAANOKAAbAANOPgm6py6nUqd0BAoZtAAAAAQOp3andAAAAAAAAAGADwAD60QAGwADTkIJuqm+qeKqCAQKHkgAAAAEDqoKqggAAAAAAAABgA8AA+tEABsAA05GCbrEasS2xNQEChGAAAAABA7E1sTUAAAAAAAAAYAPA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at5IAMAA/cUBjcAARtzAat5sHMAARtqFwABG3MBq3mxkAQABlADAAP29PgJOwABG68AARvMAAJZSYAPAAPtJARzAAEb5LksBAAGFwABG+sBq3mwAwAD9SknAAEcEHMAARwyAwABHCMBq3eEgAQABhsAARw3Aat7FAAA+A0nAAEchg8AARyXAat4xPgE9MMAAR0AewABHW8AAzroAAAAAPz2KwABHeMBq3iGGwABHgcBq3sU9i8AAR5LAat4xKT9JwABHuoPAAEe+wGreMUrAAEfNASbAAEfNAYLAAEfUwGreIWADwAD7ST9JwABH4CEcwABH64HAAEfkwGrd+0gBAAErAMAA/fFKwABH9AEcwABIAYHAAEf7wGrd+yAAAAAAAD89MMAASAkewABIJMAAzrkAAAAABsAA1MuCdMAASDjAAEg/wABIcAAAlmUAAAABA8AASEjAAEhwAAAAAQEBwABITQAAACdgA8AA/JcAAGADwAD7SQE+AUrAAEhaARzAAEhlLksBAAGAwABIZsBq3/cAwAD9SgbAANTMgnTAAEh1wABIesAASNUAAFYAAAABA8AASH3AAEjVAAAAAQEBwABIhQAAIICWYAPAAPtJAABcAT4BPTDAAEiSH8AASJzAAPwpAQABJ8AAdtcABsAA1M2CdMAASNrAAEjfwABJRwAAgKUAAAABA8AASOXAAElHAAAAAQEBwABI9wAAIICWXQPAAPz5AWADwAD7SQAAXAE+AT0wwABJBB/AAEkOwAD8KQEAASfAAHbXAAbAANTOgnTAAElMwABJUcAASb8AAJ8OAAAAAQPAAElXwABJvwAAAAICAsAASVwAAAAnYAPAAPyXAMAASWoAACCAlmADwAD7SQAAXAE+AT0wwABJdx/AAEmBwAD8KQEAASfAAHl6AAbAANTPgnTAAEnEwABJycAASkUAAKAUAAAAAQPAAEnSwABKRQAAAAICAsAASdcAAAAnYAPAAPyXAMAASe8AACApXQPAAPz5AWADwAD7SQAAXAE+AT0wwABJ/R/AAEoHwAD8KQEAASfAAHl6AAbAANTQgnTAAEpKwABKT8AASq8AAICuAAAAAQPAAEpTwABKrwAAAAEAAcAASlkAAACbU2EDAmADwAD7SWADwAD7SWADwAD8lwFqAGADwAD9oXkAXAE+AT0ewABKgsAAz08CAWADwAD7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AACDHAAAAAEDwACxisAAsiEAAAABAQHAALGSAAAAllJgA8AA/eQAAGADwAD60QE+A07AALGlwACxqQAAl5hgA8AA/JcBFsAAsbAuYcAA/WtFwACxvAHAALHFwACxxwAAYmADwAD8lwGTARzAALHOgsAAsczAa11+YwEAAYHAALHQwGtdWgDAAP3FAYrAALHXwGtdfhzAALHVgsAAsdfAa11+ZAEAAZQAwAD9vT4BScAAseIcwACx7hzAALHqLksBAAGCwACx68BrXX4AwAD9SkgBAAGAwACx8cBrXT8AwAD98UrAALH6ASk/SsAAshEBKgbAANVwgnTAALImwACyK8AAsxQAAKAAAAAAAQPAALIywACzFAAAAAEAAcAAsjsAAACgAWADwADQ/wFqAGADwAD9oXkAXAE+Az0jHMAAslGAwACySsBrXkNIAQABKwDAAP3xiMAAskrAa15DHsAAslnAANEBAAAAACsBYAPAAND/TsAAsmvAALJtAABiYAPAAPyXARbAALJ0LmHAAP1rQ8AAsoAcwACyiYHAALKHwGtemoCXAQABlADAAP3HPgVOwACymsAAsp4AAKACYAPAAPyXARzAALKngMAAsqDAa15DoAMBAAGBwACyr8BrXpoAwADRBD2JwACyucBrXpocwACyu4HAALK5wGtemoGNAQABlADAAP2+TsAAssvAALLPAACgBGADwADmfAEcwACy1S5LAQABgcAAstbAa16aAMAA/Uo9HMAAsuQugL8CAAKBwACy5cBrXpocwACy7i5LAQABgsAAsu/Aa17YAMAA/UoAwAD9Sz0cwACy/y6AvwIAAoLAALMAwGte2IPAALMHwGtfMADAAP1LBsAA1XGCdMAAsxnAALMewAC8BwAAg2QAAAABA8AAsybAALwHAAAABAMEwACzKwAAAGpgA8AA/JcAwACzNgAAAIKQYAPAAPyXAMAAs08AACCWWl0DwAD8+QFgA8AA5nwAwACzYAAAAKAJYAPAAPyXAWrAALNsYAPAAPyXCQBcAT4LScAAs4siIhzAALORk4CXAQABgMAAs5PAa1/aAMAA/ccBHMAAs6KAwACznMBrX9qAlwEAAYHAALOkwGtf6QDAAP3HARzAALOvgcAAs6vAa1/pgJcBAAEWwACzsS5hwAD9awDAAP3HPgI9HsAAs8zAAPvYAwADgMAAs9zA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AMAA/b6GlwEAAWrAANjFYAPAAPyXFQDAAP3CKwFgA8AA/Jc9HsAA2NrAANRRAwADFsAA2PQuwABu58AA1aGAwADZA8BrilUcwADZGYHAANkSwGuKcYONAQABasAA2SVgA8AA/JcVAMAA/b8ASsAA2TsBHsAA2UbAAN+SAwADFsAA2V0ut1XAANQ9wADVnIDAANlkwGuKVYHAANlzwGuKcQAGwADVqIJ0wADZg8AA2ZTAANrkAADAAHmKAAAAAQPAANmmwADa5AAAAAIAAsAA2awAAACp92ADwAD8lwFqwADZvGADwAD8lwnAANnDAAAAYWADwAD8lwFqAGADwAD9oXkAYAPAAOPEAT4DPSMcwADZ2YHAANnSwGuLxUgBAAErAMAA/buJwADZ0sBri8UcwADaAhzAANnxFsAA2eMuwABu58AA1aGBjQEAAYDAANnzwGuLqQDAAP2+hpcBAAFqwADaHmADwAD8lxUAwAD9wisBYAPAAPyXPR7AANozwADUUQMAAxbAANpELsAAbufAANWhgMAA2lPAa4upHMAA2nGBwADaasBri8WDjQEAAWrAANqEYAPAAPyXFQDAAP2/AErAANqaAR7AANqlwADf4QMAAxbAANrDLrdVwADUPcAA1ZyAwADaysBri6mBwADa2cBri8UABsAA1amCdMAA2unAANrzwADcbQAAwAB5iwAAAAEDwADa/sAA3G0AAAACAALAANsEAAAAqfdgA8AA/JcBasAA2xRgA8AA/JcJwADbGwAAAGFgA8AA/JcBagBgA8AA/aF5AGADwADjzQE+BD0jHMAA2zGBwADbKsBrjRlIAQABKwDAAP27icAA2yrAa40ZHMAA22IcwADbURbAANtDLsAAbufAANWhgY0BAAGAwADbU8BrjP0AwAD9voaXAQABasAA229gA8AA/JchAMAA/cIrAWADwAD8lz0ewADbhMAA1FEDAAMWwADbni7AAG7nwADVoYDAANutwGuM/RzAANvDgcAA27zAa40Zg40BAAFqwADbz2ADwAD8lyEAwAD9vwA9HsAA2+XAANRSAgACgMAA2/vAa4z9asAA3BRgA8AA/JchAErAANwqAR7AANw1wADgMAMAAxbAANxMLrdVwADUPcAA1ZyAwADcU8BrjP2BwADcYsBrjRkABsAA1aqCdMAA3HLAANx9wADd/AAAwAB5jAAAAAEDwADcicAA3fwAAAACAALAANyPAAAAqfdgA8AA/JcBasAA3J9gA8AA/JcJwADcpgAAAGFgA8AA/JcBagBgA8AA/aF5AGADwADj1gE+BD0jHMAA3LyBwADctcBrjpBIAQABKwDAAP27icAA3LXAa46QHMAA3O0cwADc3BbAANzOLsAAbufAANWhgY0BAAGAwADc3sBrjnQAwAD9voaXAQABasAA3PtgA8AA/JchAMAA/cIrAWADwAD8lz0ewADdEMAA1FEDAAMWwADdKi7AAG7nwADVoYDAAN05wGuOdBzAAN1PgcAA3UjAa46Qg40BAAFqwADdXGADwAD8lyEAwAD9vwA9HsAA3XLAANRSAgACgMAA3YjAa450asAA3aJgA8AA/JchAErAAN24AR7AAN3DwADggAMAAxbAAN3bLrdVwADUPcAA1ZyAwADd4sBrjnSBwADd8cBrjpAABsAA1auCdMAA3gHAAN4LwADfhQAAwAB5jQAAAAEDwADeFsAA34UAAAACAALAAN4cAAAAqfdgA8AA/JcBasAA3ixgA8AA/JcJwADeMwAAAGFgA8AA/JcBagBgA8AA/aF5AGADwADj3wE+BD0jHMAA3kmBwADeQsBrkAdIAQABKwDAAP27icAA3kLAa5AHHMAA3nocwADeaRbAAN5bLsAAbufAANWhgY0BAAGAwADea8Brj+sAwAD9voaXAQABasAA3odgA8AA/JeBVwDAAP3CKwFgA8AA/Jc9HsAA3pzAANRRAwADFsAA3rYuwABu58AA1aGAwADexcBrj+scwADe24HAAN7UwGuQB4ONAQABasAA3udgA8AA/JeBVwDAAP2/AD0ewADe/cAA1FICAAKAwADfE8Brj+tqwADfLGADwAD8l4FXAErAAN9CAR7AAN9NwADg0AMAAxbAAN9kLrdVwADUPcAA1ZyAwADfa8Brj+uBwADfesBrkAcABsAA1ayCdMAA34rAAN+VwADhFAAAwAB5jgAAAAEDwADfocAA4RQAAAACAALAAN+nAAAAqfdgA8AA/JcBasAA37dgA8AA/JcJwADfvgAAAGFgA8AA/JcBagBgA8AA/aF5AGADwADj6AE+BD0jHMAA39SBwADfzcBrkYFIAQABKwDAAP27icAA383Aa5GBHMAA4AUcwADf9BbAAN/mLsAAbufAANWhgY0BAAGA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EaDAARHAAAAAAAAAAGADwADXXgE+AT0wwAERqSfAAGH0BsAA12OCdMABEfXAARI2wAES0wMASwFqwAER9mADwAD6mMABhDoAAAEDwAESOMABEtMAAAABAQHAARI9AAAAJ2ADwAD8lwAAYAPAAPyXAT4CScABEkoiHMABElSAwAESTsBsi9ljAQABkwDAAP3FARzAARJhgMABElvAbIvZgW0BAAEWwAESZC5hwADVvADAAP3IPgE9MMABEnQfwAESfsAA++0DAAOAwAESj8Bsi9kuJycAP0rAARKwARzAARK3LsAAeeDAANQ9AQABgMABEsnAbIvZAMAA12gGwADXZIJ0wAES2MABEubAAROaAwCAvwAAAAEDwAES6cABE5oAAAACAgLAARLuAAAAJ2ADwAD8lwDAARL5AAAggJZgA8AA/JcAAFwBPgJJwAETBiIcwAETEIDAARMKwGyMpWMBAAGTAMAA/cUBHMABEx2AwAETF8BsjKWBbQEAARbAARMgLmHAANW8AMAA/cg+AT0wwAETMB/AARM6wAD77QMAA4DAARNLwGyMpS4nJwA/PRzAARNsLsAAeeHAANQ9AgACgMABE37AbIylHsABE4XAANROAQABgcABE4/AbIy0AADAANdpBsAA12WCdMABE5/AAROkwAEVRQAAg2QAAAABA8ABE6zAARVFAAAABAMEwAETsQAAAGpgA8AA/JcAwAETvAAAAIKQYAPAAPyXAMABE8oAACCD0V0DwAD8+QFbAMABE9kAAACgCWADwAD8lwFqwAET5WADwAD8lwkAXAE+AUnAARPvJcABE/yCwAET88BsjaxgA8AAy8I+BD2JwAEUEsBsjZwewAEUI8AA+9gDAAOAwAEUM8BsjY2BwAEUOsBsjZwWwAEURC5hwADVvABOwAEUV8ABFF4AAGFgA8AA/JcBHMABFGSBwAEUYMBsjZyBjQEAAYDAARRmwGyNjQDAAP2+TsABFHfAARSBAADAAHnNYAPAAPyXARzAARSWFsABFIguqffAANRrZAEAARzAARSegMABFJjAbI2Ng40BAAFqwAEUq2ADwAD8lyEAwAD9vwDAAP29PRzAARTCLsAAeczAANQ9BAAEFMABFNDAbI2sAgFgA8AAy8KFwAEU2sBsjmOEwAEU5cBsji+DwAEU7cBsjb4AwADV2T4BPR3AARUSg2QE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ecBtj2FkAQABlADAAP29PgFJwABDhBzAAEOJgMAAQ4jAbY8ZIAEAARzAAEOOLksBAAGCwABDj8Btj2EAwAD9SgAASsAAQ5QBKT9KwABDqwEqBsAA2R2CdMAAQ8DAAEPHwABE5AAAlmYAAAABA8AAQ9HAAETkAAAAAgEBwABD1wAAAJcrYQMBYAPAAPtJYAPAAPrRAAHAAEP1AAAglmdhAwBgA8AA+0kBagBgA8AA/aF5YAPAAPtJAT4ETsAARArAAEQOAACXmGADwAD8lwEWwABEFS5hwAD9a0XAAEQhAcAARCrAAEQsAABiYAPAAPyXAZMBHMAARDODwABEMcBtkIdjAQABgsAARDXAbZBjAMAA/cUBi8AARDzAbZCHHMAARDqDwABEPMBtkIdkAQABlADAAP29PgJOwABES8AARFMAAJZSYAPAAPtJARzAAERZLksBAAGDwABEWsBtkIcAwAD9SknAAERkHMAARGyAwABEaMBtkCMgAQABhMAARG3AbZDgAABKwABEdwGEwABEfsBtkOA/ScAARJEhHMAARJyBwABElcBtkD1IAQABKwDAAP3xSsAARKUBHMAARLKBwABErMBtkD0gAAAAAAA/PTDAAES6HsAARNXAAM65AAAAAAbAANkegnTAAETpwABE8MAARiMAAJZrAAAAAQPAAET5wABGIwAAAAIBAcAARP8AAACXK2EDAWADwAD7SWADwAD60QABwABFHQAAIJZnYQMAYAPAAPtJAWoAYAPAAP2heWADwAD7SQE+BE7AAEUywABFNgAAl5hgA8AA/JcBFsAART0uYcAA/WtFwABFSQHAAEVSwABFVAAAYmADwAD8lwEcwABFWoLAAEVWwG2R84GNAQABlADAAP2+ARzAAEVhg8AARV/AbZIXgW0BAAGTAMAA/cgBi8AARWnAbZIXHMAARWeDwABFacBtkheBjQEAAZQAwAD9vj4CTsAARXjAAEWAAACWUmADwAD7SQEcwABFhi5LAQABg8AARYfAbZIXAMAA/UpJwABFkRzAAEWZgMAARZXAbZGzIAEAAYTAAEWawG2SggAAPgFKwABFrgGEwABFtcBtkoI/ScAARdAhHMAARduBwABF1MBtkc1IAQABKwDAAP3xSsAAReQBHMAARfGBwABF68Btkc0gAAAAAAA/PTDAAEX5HsAARhTAAM65AAAAAAbAANkfgnTAAEYowABGL8AASDMAAJZuAAAAAQPAAEY6wABIMwAAAAIBAcAARkAAAACXK2EDAWADwAD7SWADwAD60QABwABGXgAAIJZnYQMAYAPAAPtJAWoAYAPAAP2heWADwAD7SQE+B07AAEZzwABGegAAgXZbAStOwABGi8AARpkAAMAAcj1gA8AA+tEBKk7AAEaqwABGrgAAl5hgA8AA/JcBFsAARrUuYcAA/WtFwABGwQHAAEbKwABGzAAAYmADwAD8lwGTARzAAEbThcAARtHAbZPiYwEAAYTAAEbVwG2TvgDAAP3FAY3AAEbcwG2T4hzAAEbahcAARtzAbZPiZAEAAZQAwAD9vT4CTsAARuvAAEbzAACWUmADwAD7SQEcwABG+S5LAQABhcAARvrAbZPiAMAA/UpJwABHBBzAAEcMgMAARwjAbZNXIAEAAYbAAEcNwG2UOwAAPgNJwABHIYPAAEclwG2Tpz4BPTDAAEdAHsAAR1vAAM66AAAAAD89isAAR3jAbZOXhsAAR4HAbZQ7PYvAAEeSwG2Tpyk/ScAAR7qDwABHvsBtk6dKwABHzQEmwABHzQGCwABH1MBtk5dgA8AA+0k/ScAAR+AhHMAAR+uBwABH5MBtk3FIAQABKwDAAP3xSsAAR/QBHMAASAGBwABH+8Btk3EgAAAAAAA/PTDAAEgJHsAASCTAAM65AAAAAAbAANkggnTAAEg4wABIP8AASHAAAJZlAAAAAQPAAEhIwABIcAAAAAEBAcAASE0AAAAnYAPAAPyXAABgA8AA+0kBPgFKwABIWgEcwABIZS5LAQABgMAASGbAbZVtAMAA/UoGwADZIYJ0wABIdcAASHrAAEjVAABWAAAAAQPAAEh9wABI1QAAAAEBAcAASIUAACCAlmADwAD7SQAAXAE+AT0wwABIkh/AAEicwAD8KQEAASfAAHbXAAbAANkignTAAEjawABI38AASUcAAIClAAAAAQPAAEjlwABJRwAAAAEBAcAASPcAACCAll0DwAD8+QFgA8AA+0kAAFwBPgE9MMAASQQfwABJDsAA/CkBAAEnwAB21wAGwADZI4J0wABJTMAASVHAAEm/AACfDgAAAAEDwABJV8AASb8AAAACAgLAAElcAAAAJ2ADwAD8lwDAAElqAAAggJZgA8AA+0kAAFwBPgE9MMAASXcfwABJgcAA/CkBAAEnwAB5egAGwADZJIJ0wABJxMAAScnAAEpFAACgFAAAAAEDwABJ0sAASkUAAAACAgLAAEnXAAAAJ2ADwAD8lwDAAEnvAAAgKV0DwAD8+QFgA8AA+0kAAFwBPgE9MMAASf0fwABKB8AA/CkBAAEnwAB5egAGwADZJYJ0wABKSsAASk/AAEqvAACArgAAAAEDwABKU8AASq8AAAABAAHAAEpZAAAAm1NhAwJgA8AA+0lgA8AA+0lgA8AA/JcBagBgA8AA/aF5AFwBPgE9HsAASoLAAM9PAgFgA8AA+0kCLjUAAAABAGEDAmADwAD7SWADwAD7SWADwAD8lwGAwABKjcBtl1QjHMAASpWBAMBtl5ZIAQABKwAAasAASqNhAwJdA8AA+t0BW10DwAD63QFbYAPAAPyXwAGFMIEAwG2XlgFhAwJgA8AA+0lgA8AA+0lgA8AA/JcABsAA2SaCdMAASrTAAEq4wABLtgAAgLsAAAABA8AASr/AAEu2AAAAAgECwABKxwAAIJZSYAPAAPtJAMAAStUAAABqYAPAAPyXAWrAAErdYAPAAPyXCQBgA8AA/JcBPgNJwABK5xzAAErxgcAASuvAbZhGgW0BAAEWwABK+S5hwAD9awDAAP3IPgFKwABLCQEcwABLEJSBxgAAAADAAPy6ScAASx8cwABLKYHAAEsjwG2YRmMBAAGTAMAA/cU+AT2JwABLNsBtmEaTP0XAAEtLAcAAS1TAAEtWAABiYAPAAPyXAYHAAEtYwG2YRgEcwABLYYLAAEtfwG2Y3GMBAAEWwABLaC5hwAD9awDAAP3FAYrAAEtwwG2Y3BzAAEtxgsAAS3DAbZjcZAEAAZQAwAD9vT4BScAAS30cwABLiRzAAEuFLksBAAGCwABLhsBtmNwAwAD9SkgBAAGAwABLjMBtmDYAwAD9u0rAAEuVAYLAAEucwG2Y3D9KwABLqQEcwABLsJSBxgAAAADAAPy6BsAA2SeCdMAAS7vAAEu/wABM2gAAlowAAAABA8AAS8rAAEzaAAAAAgECwABL0gAAIJZSYAPAAPtJAMAAS+AAAABqYAPAAPyXAWrAAEvoYAPAAP2heQBgA8AA/JcBPgNJwABL9SIcwABL/4HAAEv5wG2Z0kgBAAErAMAA/bsBHMAATBCBwABMCsBtmdKBbQEAARbAAEwYLmHAAP1rAMAA/cg+AT2JwABMKMBtmdIcwABMPBbAAEw1LmHAAP1rgY0BAAGUAMAA/b5JwABMTBzAAExWgcAATFDAbZnSYwEAAZMAwAD9xT4BSsAATGMBHMAATGqUgcYAAAAAwAD8uj9FwABMeAHAAEyBwABMgwAAYmADwAD8lwGBwABMhcBtmdIBHMAATI6CwABMjMBtmpyBbQEAAZMAwAD9yAGKwABMlMBtmpwcwABMlYLAAEyUwG2anIGNAQABlADAAP2+PgFJwABMoRzAAEytHMAATKkuSwEAAYLAAEyqwG2anADAAP1KSAEAAYDAAEywwG2ZwgDAAP27SsAATLkBgsAATMDAbZqcP0rAAEzNARzAAEzUlIHGAAAAAMAA/LoGwADZKIJ0wABM38AATObAAE1BAACGJgAAAAEDwABM8MAATUEAAAAAAAAAYAPAAPtJAT4BPTDAAEz5H8AATQPAAPwpAQABJ8AAdtgABsAA2SmCdMAATUbAAE1NwABNrwAAoBMAAAABA8AATVXAAE2vAAAAAQEBwABNWgAAACdgA8AA/JcAAGADwAD7SQE+AT0wwABNZx/AAE1xwAD8KQEAASfAAHbYAAbAANkqgnTAAE20wABNucAATi4AAJcqAAAAAQPAAE3EwABOLgAAAAEBAcAATcoAAACXK2EDAWADwAD7SWADwAD60QAAXAE+AT0wwABN5h/AAE3wwAD8KQEAASfAAHbYAAbAANkrgnTAAE4zwABOOMAATq0AAJctAAAAAQPAAE5DwABOrQAAAAEBAcAATkkAAACXK2EDAWADwAD7SWADwAD60QAAXAE+AT0wwABOZR/AAE5vwAD8KQEAASfAAHbYAAbAANk2gnTAAE6ywABOvcAATxcBAIMeAAAAAQPAAE7DwABPFwAAAAAAAABgA8AA+0kBPgJJwABOyRzAAE7UFsAATs0uYcAA/WuAlwEAAZMAwAD9x0rAAE7ZARzAAE7kLksBAAGTAMAA/Uo/PTDAAE7tHsAATwjAAM65AAAAAAbAANk3gnTAAE8cwABPJ8AAT4kBAIHqAAAAAQPAAE8swABPiQAAAAAAAABgA8AA+0kBPgJJwABPMhzAAE89FsAATzYuYcAA/WuAlwEAAZMAwAD9x0rAAE9CARzAAE9NLksBAAEcwABPVRbAAE9OLmHAAP1rgY0BAAGUAMAA/b4AwAD9Sj89MMAAT18ewABPesAAzrkAAAAABsAA2TiCdMAAT47AAE+ZwABQMAEAgMMAAAABA8AAT6DAAFAwAAAAAAAAAGADwAD7SQE+A0nAAE+mHMAAT7EWwABPqi5hwAD9a0gBAAGUAMAA/btKwABPtwEcwABPwi5LAQABkwDAAP1KP0nAAE/LHMAAT9YWwABPzy5hwAD9a0gBAAGTAMAA/bs9MMAAT9wewABP98AAzrkAAAAAPz0wwABQCB7AAFAjwADOugAAAAAGwADZLIJ0wABQNcAAUDrAAFC4AACgFgAAAAEDwABQQMAAULgAAAACAgLAAFBFAAAAJ2ADwAD8lwDAAFBdAAAgg9FdA8AA/PkBYAPAAPtJAABcAT4CTsAAUHPAAFB3AAGCkGADwAD8lwEcwABQiRbAAFCCgcAAUHnAbZ62YcAA/RxkAQABgMAAUIvAbZ6nAMAA/b09HMAAUJYug2QDAAOAwABQn8BtnqeCwABQpsBtntOBwABQq8BtnrYAwAD9YAbAANktgnTAAFC9wABQwsAAUXoAAJvjAAAAAQPAAFDLwABRegAAAAMCA8AAUNAAAABqYAPAAPyXAMAAUNsAAACCkGADwAD8lwDAAFDoAAAgwABDs2ADwAD7SQFqAGADwAD9oXkAXAE+Aj0ewABRBcAA+9gDAAOAwABRFcBtn2aBwABRHMBtn3UWwABRJi5hwAD9awBFwABRMwHAAFE8wABRPgAAYmADwAD8lwGAwABRQMBtn2YBHMAAUUmDwABRR8Btn9ZjAQABgcAAUUvAbZ91AMAA/cUBi8AAUVLAbZ/WHMAAUVCDwABRUsBtn9ZkAQABlADAAP29PgE9HMAAUWEugL8CAAKDwABRYsBtn9aCwABRZ8Btn4UAwAD9SwAAbX0EAG19dwBtfaEAbX3JAG198QBtfj4AbX6fAG1+8gBtf2cAbX/yAG2BBABtgkQAbYNeAG2EMABthYEAbYXkAG2GPwBthqIAbYb9AG2HYABth6UAbYfwAG2IjABtiNAAbYk4AG2JfwBtikAAbYupAG2M2wBtjVwAbY3kAG2O7wBtj/kAbZGJAG2TLQBtlUMAbZWkAG2V+gBtllgAbZa+AG2XKgBtmAwAbZmYAG2bUABtm5wAbZv3AG2cVwBtnLcAbZ01AG2dzQBtnn0AbZ88AG2gWQAAADQCwADZPIJ0wAEz0MABM/DAAThgN8AAefwAAAFgAcAA2QIAAV0BwADU3AFgA8AA5AwAAQXAANlEAAAAAAQAAAMAAAAAAAAAAABgA8AA2TwBPwEJAADAANkvAAAAAAQGwADZPoJ0wAEz8MABM/AAABCgDADAANRgwADUYAEDAAAAAAADAwMAAAAAamADwAD8lwAAAAAAgpBgA8AA/JcAAAAAIIPRXQPAAPz5AVsAAFwBSgABHQCgDAMAA4AAwG2htoEAwG2hwoIAwG2hzwDAANRgBsAA2UCCdMAAUfHAAFH9wABSFAACwAB5fcAA1D0AAAABA8AAUgjAAFIUAAAAAQEBwABSDQAAAGFgA8AA/JcAAGADwADkDAAGwADZQYJ0wABSGcAAUh7AAFr4AACDZAAAAAEDwABSJsAAWvgAAAAEAwTAAFIrAAAAamADwAD8lwDAAFI2AAAAgpBgA8AA/JcAwABSTAAAIJZaXQPAAPz5AWADwAD7SQDAAFJdAAAAoAlgA8AA/JcBasAAUmlgA8AA/JcJAFwBPgtJwABSiCIiHMAAUo6TgJcBAAGAwABSkMBtonMAwAD9xwEcwABSn4DAAFKZwG2ic4CXAQABgcAAUqHAbaKCAMAA/ccBHMAAUqyBwABSqMBtooKAlwEAARbAAFKuLmHAAP1rAMAA/cc+Aj0ewABSycAA+9gDAAOAwABS2cBtonOBwABS4MBtooIWwABS5S5hwAD9awBAKsAAUw3AAFMSAD9JwABTHxzAAFMtg8AAUyPAbaKpYwEAAZMAwAD9xT4BPTDAAFM6H8AAU0vAAPvhBAAEg8AAU1HAbaKpkysnoAkAP07AAFOEwABTigABgO5gA8AA/JcBHMAAU5CBwABTjMBtooKBjQEAAYDAAFOSwG2icwDAAP2+ScAAU50cwABTuxzAAFOuFsAAU6eCwABTosBtopJhwAD9HIGNAQABg8AAU7DAbaKpAMAA/b5jAQABhMAAU73AbaOrAMAA/cU+AT0wwABTzB7AAFPnwADOuwAAAAA/ScAAU/wcwABUBoTAAFQAwG2jq0gBAAGTAMAA/btKwABUDAA/ScAAVBklwABUIoLAAFQdwG2ikmADwADUUz4CTsAAVKzAAFS8AAHAAHl+YAPAANRTASbAAFTDAILAAFS+wG2ikmADwADUU0nAAFTcHMAAVPgWwABU5S7AAG9CwADUp0gBAAEWwABVC4XAAFT7wG2kfMAAb0LAANRWAMAA/bs+AUnAAFUpIhzAAFU0hMAAVS7AbaOrYwEAATcKAMAA/cUAIRzAAFVVFsAAVU6FwABVPsBtpHyCj8AA1FhIAQABFsAAVV0ugo/AANSpAMAA1aQ+Aj0ewABVeMAAy68FAAUmwABVggCCwABVfcBtopJdA8AA/TsBYAPAAPtJg8AAVZPAbaKpLoDAAFWkwG2ic4TAAFWrwG2jqwBKwABVvQBJwABV1BzAAFXqFsAAVeQWwABV3S6Cj8AA1Km3VcAA1D3AANWcwABvQcAA1D0GAAYcwABWHBzAAFYHgMAAVgHAbaJzg40BAAEWwABWCS7AAG9CwADUpwDAAP2/ZAEAARbAAFYjLqn3wADUqADAAP29HMAAVkSEwABWPsBto6uDjQEAARbAAFZGLsAAb0LAANSnAMAA/b8WwABWfRbAAFZ2hcAAVmbAbaR8go/AANRYt1XAANQ9wADVnBzAAFavHMAAVpqDwABWkMBtoqmDjQEAARbAAFacLsAAb0LAANSnAMAA/b9kAQABFsAAVsGFwABWscBtpHyp98AA1FcAwAD9vR7AAFbkwADLvAEAAS4AHsAAVwXAAMu8AQABgsAAVwvAbaKSAADAANRjPgFKwABXHwA/ScAAVz4cwABXWRbAAFdShcAAV0LAbaR8go/AANRYSAEAARbAAFdhLoKPwADUqQDAANWkPgVOwABYN8AAWEIAAcAAeX9dA8AA/TsBYAPAAPtJASbAAFhJAILAAFhEwG2ikl0DwAD9OwFgA8AA+0lOwABYaMAAWHMAAcAAeYBgA8AA5AwBHMAAWHUuwAB5fcAA1D0BAAGEwABYgcBto6sAwADU30XAAFiRAcAAWJrAAFicAABiYAPAAPyXAZMBHMAAWKMUwABYocBtp1gIAGMBAAGEwABYpcBto6sAwAD9xQEVwABYrMBtp1gIHMAAWK0UwABYrMBtp1gIAGQBAAGUAMAA/b0+AT0cwABYx4fAAFi9wG2nHoC/AgACFMAAWMjAbadYCAAcwABY14bAAFjNwG2m5UsBAAEcwABY4oPAAFjYwG2iqWQBAAEUwABY5MBtp1gIAADAAP29AMAA/UoAwAD9S0XAAFj6AcAAWQPAAFkFAABiYAPAAPyXAYDAAFkHwG2icwEcwABZEBTAAFkOwG2oGAgAYwEAAYHAAFkSwG2iggDAAP3FARXAAFkXwG2oGAgcwABZGBTAAFkXwG2oGAgAZAEAAZQAwAD9vT4BPRzAAFksLoC/AgACFMAAWS3AbagYCAAcwABZPIfAAFkywG2nHksBAAEcwABZPxTAAFk9wG2oGAgAgY0BAAGAwABZQcBtonMAwAD9vgDAAP1KAMAA/UtKwABZWwA/P07AAFl7AAAAoApdA8AA/TsBWwBOwABZjgAAAKALYAPAAPyXAEnAAFmeJcAAWaeCwABZosBtopJdA8AA/TsBYAPAAPtJPgI9jcAAWcDAbajcFMAAWczAbaKSAgFdA8AA/TsBYAPAAPtJPY7AAFnYwG2o74PAAFnlwG2iqT4CPY3AAFoDwG2o3BzAAFokHMAAWhSCwABaD8BtopKWWwEAAYPAAFoZwG2iqQDAAP0TgK0BAAABhW4qwAD9Dz2OwABaQ8BtqO+TScAAWl0cwABadBzAAFpshsAAWmHAbajvZAEAAYTAAFpuwG2jqwDAAP29gJcBAAEWwABagIXAAFp2wG2o3GHAAP1rAMAA/cc+AT0wwABakB7AAFqrwADOuwAAAAA/PR7AAFrFwADLrwUABYXAAFrKwG2o3IbAAFrVwG2o7y6AwABa58BtonOEwABa7sBto6sABsAA2UKCdMAAWv3AAFsJwABb9gAAgVgAAAABA8AAWxDAAFv2AAAAAgECwABbFQAAAGpgA8AA/JcAwABbIQAAAIKQYAPAAPyXAWoAYAPAAP2heQBgA8AA5AwBPgU9icAAWy3AbappHsAAWz7AAPvYAwADgMAAW07AbapagcAAW1XAbappFsAAW18uYcAA/WsATsAAW3DAAFt3AABhYAPAAPyXARzAAFt9gcAAW3nAbappgY0BAAGAwABbf8BtqloAwAD9vk7AAFuWwABbnQAAgXZgA8AA5AwBHMAAW58uwAB5fcAA1D0BAAGCwABbq8BtqsEAwADU3z0cwABbv4PAAFu4wG2q9YNkBAAEk4LAAFvLwG2qwS6AwABb2cBtqloAwAD9YErAAFvlAYPAAFvswG2q9QAAbaGPAG2iAgBtokkAbaowAG2rYwAAAAQCwADZRYJ0wAEz0MABM/DAAThgA8AAef0BasABM9FgA8AA+pjAAX+WAAFgAcAA2TwAAWABwADkDAAACAbAANlIgnTAATRtwAE0dcABNLEEAcAAd1zAANQ9AAAAAQPAATSRwAE0sQAAAAAAAABgA8AA2UUBPgE9MMABNJonwABh9AbAANlKgnTAATTmwAE1LcABNcsDAEsBasABNOdgA8AA+pjAAZNiAAABA8ABNS/AATXLAAAAAQEBwAE1NAAAACdgA8AA/JcAAGADwAD7SQE+AknAATVBIhzAATVLgMABNUXAbaw0YwEAAZMAwAD9xQEcwAE1WIDAATVSwG2sNIFtAQABFsABNVsuYcAA1bwAwAD9yD4BPTDAATVrH8ABNXXAAPvtAwADgMABNYbAbaw0LicnAD9KwAE1pwEcwAE1ri7AAHn+wADUPQEAAYDAATXBwG2sNADAANlOBsAA2UuCdMABNdDAATXewAE2iwMAgL8AAAABA8ABNeHAATaLAAAAAgICwAE15gAAACdgA8AA/JcAwAE19AAAIICWYAPAAPtJAABcAT4CScABNgEiHMABNguAwAE2BcBtrQBjAQABkwDAAP3FARzAATYYgMABNhLAba0AgW0BAAEWwAE2Gy5hwADVvADAAP3IPgE9MMABNisfwAE2NcAA++0DAAOAwAE2RsBtrQAuJycAPz0cwAE2Zy7AAHn/wADUPQIAAoDAATZ6wG2tAIHAATaBwG2tDwDAANlPBsAA2VKCdMABNsXAATbNwAE3DAEAwABvQgAAAAEDwAE24MABNwwAAAAAAAAAYAPAAPyXAT4BSsABNuYBasABNvlgA8AA/JeDXQbAANlNgnTAATcwwAE3PMABN3wAAMAAeX3AANQ9AAAAAQPAATdHwAE3fAAAAAEBAcABN0wAAABhYAPAAPyXAABgA8AA5AwBPgFKwAE3WgEewAE3ZcAA5BABAAGAwAE3ccBtrioABsAA2U6CdMABN4HAATeIwAE35wAAwAB5/sAA1D0AAAABA8ABN5rAATfnAAAAAQEBwAE3nwAAACdgA8AA/JcAAGADwAD7SQE+AUrAATesARzAATezLsAAebzAANQ9AQABHMABN8WAwAE3v8Btro+DjQEAAWrAATfTYAPAAPyXg10AwAD9vwDAANXRBsAA2U+CdMABN+zAATfxwAE4XgAAwAB5/8AA1D0AAAABA8ABOAPAATheAAAAAgICwAE4CAAAACdgA8AA/JcAwAE4FgAAAICWYAPAAPtJAABcAT4BPRzAATgjLsAAeb7AANQ9AgACHMABODWAwAE4L8BtrxmDjQEAAWrAAThDYAPAAPyXg10AwAD9v4HAAThUwG2vKADAANXSBsAA2VCCdMABM/DAATPwAAAQoAwAwADUYMAA1GABAwAAAAAAAwMDAAAAAGpgA8AA/JcAAAAAAIKQYAPAAPyXAAAAACCD0V0DwAD8+QFbAABcAUoAAR0AoAwDAAOAAMBtr6mBAMBtr7WCAMBtr8IAwADUYAAAbau3AG2r/ABtrNYAba2xAG2t+gBtrl8Aba7pAG2vggBtr/UAAAAIAsAA2VOCdMABObLAATnSwAE+EDfAAHoAAAABYAHAANW2AAFgAcAA1OIAAQXAANmEAAAAAAQAAAMAAAAAAAAAAABgA8AA2VMBPwEJAADAANXbAAAAADcGwADZVYJ0wAE50sABOdIAABCgDADAANRgwADUYAEDAAAAAAADAwMAAAAAamADwAD8lwAAAAAAgpBgA8AA/JcAAAAAIIPRXQPAAPz5AVsAAFwBSgABHQCgDAMAA4AAwG2wm4EAwG2wp4IAwG2wtADAANRgBsAA2YaCdMAAXD3AAFxFwABcVwECwABvQgAAAAEDwABcV8AAXFcAAAAAAAAAYAPAAPyXAAbAANmHgnTAAFxbwABcY8AAXHABAqn3AAAAAQPAAFxwwABccAAAAAAAAABgA8AA/JcABsAA2YiCdMAAXHTAAFyEwABcigECgo8AAAABA8AAXIrAAFyKAAAAAAAAAGADwADVmQAGwADZV4J0wABcj8AAXJ3AAFy0AALAAHl9wADUPQAAAAEDwABcqMAAXLQAAAABAQHAAFytAAAAYWADwAD8lwAAYAPAAOQVAAbAANlYgnTAAFy5wABcxcAAXPUAAJZyAAAAAQPAAFzRwABc9QAAAQAAgnpgA8AA/eQBWwAAAABdA8AA/PkBXwMAAAFKwABc1wEfwABc28AAzqwBAV8DAAABLgAGwADZWYJ0wABc+sAAXQ7AAF16AACWaQAAAAEDwABdGMAAXXoAAAABAQHAAF0tAAAgg9tdA8AA/PkBYAPAAOQzAABdA8AA/PkBYAPAAOQzAUrAAF09AR7AAF1BwADOhAIBYAPAAOQzAi6AwABddMBtsksABsAA2VqCdMAAXX/AAF2HwABdtQAAlmQAAAABA8AAXY7AAF21AAABAACXJWADwAD95AFbAAAAAF0DwAD9OwFfAwAAAUrAAF2UAR7AAF2ZwAD9RgECYAPAAOQzXwMAAAEuAAbAANmPgnTAAF25wABdwsAAXjECAIMeAAAAAQPAAF3HwABeMQAAAAEBAcAAXdIAACCAlmADwADkMwAAXAE+AknAAF3fHMAAXe8WwABd6C5hwAD9a0gBAAGTAMAA/bs9MMAAXfUfwABd/8AA++0CAAKTLgA/PRzAAF4iLoC/AgACk4DAAF4owG2zHwDAAP1LBsAA2ZCCdMAAXjbAAF4/wABeuwIAgeoAAAABA8AAXkPAAF67AAAAAQEBwABeTgAAIICWYAPAAOQzAABcAT4CScAAXlscwABeaxbAAF5kLmHAAP1rSAEAAZMAwAD9uz0wwABecR/AAF57wAD77QIAApMuAD89HMAAXp4ugL8CAAIcwABeqxbAAF6kLmHAAP1rgY0BAAGUAMAA/b6AwABessBts64AwAD9SwbAANlbgnTAAF7AwABexMAAX4MAAKARAAAAAQPAAF7OwABfgwAAAAIBAsAAXtQAAACXK2EDAWADwADkM2ADwAD60QDAAF7yAAAAamADwAD8lwFqwABe+mADwAD8lwkAYAPAAPyXAT4DScAAXwQcwABfDoHAAF8IwG20cGMBAAGTAMAA/cU9icAAXxPAbbRwkz9FwABfIgHAAF8rwABfLQAAYmADwAD8lwGBwABfL8BttHABHMAAXziCwABfNsBttMRjAQABFsAAXzouYcAA/WsAwAD9xQGKwABfQsBttMQcwABfQ4LAAF9CwG20xGQBAAGUAMAA/b0+AUnAAF9PHMAAX1eAwABfU8BttFcgAQABHMAAX1wuSwEAAYLAAF9dwG20xADAAP1KAABKwABfYgGCwABfacBttMQ/SsAAX3YBHMAAX32UgcYAAAAAwAD8ugbAANlcgnTAAF+IwABfjMAAYHEAAKASAAAAAQPAAF+awABgcQAAAAIBAsAAX6AAAACXK2EDAWADwADkM2ADwAD60QDAAF++AAAAamADwAD8lwFqAGADwAD9oXkAYAPAAPyXAT4DScAAX8wiHMAAX9aBwABf0MBttcBIAQABKwDAAP27ARzAAF/ngcAAX+HAbbXAgW0BAAEWwABf7y5hwAD9awDAAP3IPYnAAF/3wG21wBzAAGALFsAAYAQuYcAA/WuBjQEAAZQAwAD9vj9FwABgFAHAAGAdwABgHwAAYmADwAD8lwGBwABgIcBttcABHMAAYCqCwABgKMBttlCBbQEAAZMAwAD9yAGKwABgMMBttlAcwABgMYLAAGAwwG22UIGNAQABlADAAP2+PgFJwABgPRzAAGBFgMAAYEHAbbWnIAEAARzAAGBKLksBAAGCwABgS8BttlAAwAD9SgAASsAAYFABgsAAYFfAbbZQP0rAAGBkARzAAGBrlIHGAAAAAMAA/LoGwADZXYJ0wABgdsAAYI/AAGFuAwBkAAAAAQPAAGCQwABhbgAAAAEBAcAAYKEAACCD210DwAD9OwFgA8AA5DMAAF0DwAD9OwFgA8AA5DMBPgJOwABgssAAYL4AAINeYAPAAPyXARzAAGDMFsAAYMUuYcAA/WtkAQABFsAAYNSAwABgzsBttyphwAD9awDAAP29SsAAYOABNcAAYPIAAAEAXQPAAP07AWADwADkMwExwABg8mADwADkMwA1AAAAAQBbARfAAGD9gsAAYPvAbbeZYYHAAGEGwG23U8AA/Wk1AAAAAQBbARzAAGEagsAAYRjAbbeZg2QDAAOTFsAAYSsuYcAA/WsuAMAA/WA1AAAAAQBbARzAAGFBgsAAYT/AbbeZg2QDAAMWwABhTy5hwAD9a4HAAGFXwG23U4DAAGFkwG23KgDAAP1gggDAbbeZBsAA2V6CdMAAYXPAAGF4wABiFwAAgxwAAAABA8AAYYDAAGIXAAAAAQEBwABhiAAAAJZSYAPAAP3kAABgA8AA+tEBPgNOwABhm8AAYZ8AAJeYYAPAAPyXARbAAGGmLmHAAP1rRcAAYbIBwABhu8AAYb0AAGJgA8AA/JcBkwEcwABhxILAAGHCwG24uGMBAAGBwABhxsBtuJQAwAD9xQGKwABhzcBtuLgcwABhy4LAAGHNwG24uGQBAAGUAMAA/b0+AUnAAGHYHMAAYeQcwABh4C5LAQABgsAAYeHAbbi4AMAA/UpIAQABgMAAYefAbbh5AMAA/fFKwABh8AEpP0rAAGIHASoGwADZX4J0wABiHMAAYiHAAGMKAACgAAAAAAEDwABiKMAAYwoAAAABAAHAAGIxAAAAoAFgA8AA0P8BagBgA8AA/aF5AFwBPgM9IxzAAGJHgMAAYkDAbbl9SAEAASsAwAD98YjAAGJAwG25fR7AAGJPwADRAQAAAAArAWADwADQ/07AAGJhwABiYwAAYmADwAD8lwEWwABiai5hwAD9a0PAAGJ2HMAAYn+BwABifcBtudSAlwEAAZQAwAD9xz4FTsAAYpDAAGKUAACgAmADwAD8lwEcwABinYDAAGKWwG25faADAQABgcAAYqXAbbnUAMAA0QQ9icAAYq/AbbnUHMAAYrGBwABir8BtudSBjQEAAZQAwAD9vk7AAGLBwABixQAAoARgA8AA5DMBHMAAYssuSwEAAYHAAGLMwG251ADAAP1KPRzAAGLaLoC/AgACgcAAYtvAbbnUHMAAYuQuSwEAAYLAAGLlwG26EgDAAP1KAMAA/Us9HMAAYvUugL8CAAKCwABi9sBtuhKDwABi/cBtumoAwAD9SwbAANlggnTAAGMPwABjFMAAa/0AAINkAAAAAQPAAGMcwABr/QAAAAQDBMAAYyEAAABqYAPAAPyXAMAAYywAAACCkGADwAD8lwDAAGNFAAAgllpdA8AA/PkBYAPAAOQzAMAAY1YAAACgCWADwAD8lwFqwABjYmADwAD8lwkAXAE+C0nAAGOBIiIcwABjh5OAlwEAAYDAAGOJwG27FADAAP3HARzAAGOYgMAAY5LAbbsUgJcBAAGBwABjmsBtuyMAwAD9xwEcwABjpYHAAGOhwG27I4CXAQABFsAAY6cuYcAA/WsAwAD9xz4CPR7AAGPCwAD72AMAA4DAAGPSwG27FIHAAGPZwG27IxbAAGPeLmHAAP1rAEAqwABkBsAAZAsAP0nAAGQYHMAAZCaDwABkHMBtu0pjAQABkwDAAP3FPgE9MMAAZDMfwABkRMAA++EEAASDwABkSsBtu0qTKyegCQA/TsAAZH3AAGSDAAGA7mADwAD8lwEcwABkiYHAAGSFwG27I4GNAQABgMAAZIvAbbsUAMAA/b5JwABklhzAAGS0HMAAZKcWwABkoILAAGSbwG27M2HAAP0cgY0BAAGDwABkqcBtu0oAwAD9vmMBAAGEwABktsBtvEwAwAD9xT4BPTDAAGTFHsAAZODAAM67AAAAAD9JwABk9RzAAGT/hMAAZPnAbbxMSAEAAZMAwAD9u0rAAGUFAD9JwABlEiXAAGUbgsAAZRbAbbszYAPAANRTPgJOwABlqMAAZbgAAcAAeX5gA8AA1FMBJsAAZb8AgsAAZbrAbbszYAPAANRTScAAZdgcwABl9BbAAGXhLsAAb0LAANTkSAEAARbAAGYHhcAAZffAbb0dwABvQsAA1FYAwAD9uz4BScAAZiUiHMAAZjCEwABmKsBtvExjAQABNwoAwAD9xQAhHMAAZlEWwABmSoXAAGY6wG29HYKPwADUWEgBAAEWwABmWS6Cj8AA1OYAwADVpD4CPR7AAGZ0wADLrwUABSbAAGZ+AILAAGZ5wG27M10DwAD9OwFgA8AA5DODwABmksBtu0ougMAAZqPAbbsUhMAAZqrAbbxMAErAAGa8AEnAAGbTHMAAZukWwABm4xbAAGbcLoKPwADU5rdVwADUPcAA1ZzAAG9BwADUPQYABhzAAGcbHMAAZwaAwABnAMBtuxSDjQEAARbAAGcILsAAb0LAANTkAMAA/b9kAQABFsAAZyIuqffAANTlAMAA/b0cwABnQ4TAAGc9wG28TIONAQABFsAAZ0UuwABvQsAA1OQAwAD9vxbAAGd8FsAAZ3WFwABnZcBtvR2Cj8AA1Fi3VcAA1D3AANWcHMAAZ64cwABnmYPAAGePwG27SoONAQABFsAAZ5suwABvQsAA1OQAwAD9v2QBAAEWwABnwIXAAGewwG29Han3wADUVwDAAP29HsAAZ+PAAMu8AQABLgAewABoBMAAy7wBAAGCwABoCsBtuzMAAMAA1GM+AUrAAGgeAD9JwABoPRzAAGhYFsAAaFGFwABoQcBtvR2Cj8AA1FhIAQABFsAAaGAugo/AANTmAMAA1aQ+BU7AAGk2wABpQQABwAB5f10DwAD9OwFgA8AA5DMBJsAAaUgAgsAAaUPAbbszXQPAAP07AWADwADkM07AAGlqwABpdQABwAB5gGADwADkFQEcwABpdy7AAHl9wADUPQEAAYTAAGmDwG28TADAANTuRcAAaZMBwABpnMAAaZ4AAGJgA8AA/JcBkwEcwABppRTAAGmjwG2/+QgAYwEAAYTAAGmnwG28TADAAP3FARXAAGmuwG2/+QgcwABprxTAAGmuwG2/+QgAZAEAAZQAwAD9vT4BPRzAAGnJh8AAab/Abb+/gL8CAAIUwABpysBtv/kIABzAAGnZhsAAac/Abb+GSwEAARzAAGnkg8AAadrAbbtKZAEAARTAAGnmwG2/+QgAAMAA/b0AwAD9SgDAAP1LRcAAafwBwABqBcAAagcAAGJgA8AA/JcBgMAAagnAbbsUARzAAGoSFMAAahDAbcC5CABjAQABgcAAahTAbbsjAMAA/cUBFcAAahnAbcC5CBzAAGoaFMAAahnAbcC5CABkAQABlADAAP29PgE9HMAAai4ugL8CAAIUwABqL8BtwLkIABzAAGo+h8AAajTAbb+/SwEAARzAAGpBFMAAaj/AbcC5CACBjQEAAYDAAGpDwG27FADAAP2+AMAA/UoAwAD9S0rAAGpdAD8/TsAAan0AAACgCl0DwAD9OwFbAE7AAGqQAAAAoAtgA8AA/JcAScAAaqAlwABqqYLAAGqkwG27M10DwAD9OwFgA8AA5DM+Aj2NwABqxcBtwX0UwABq0cBtuzMCAV0DwAD9OwFgA8AA5DM9jsAAat3AbcGQg8AAaurAbbtKPgI9jcAAawjAbcF9HMAAaykcwABrGYLAAGsUwG27M5ZbAQABg8AAax7AbbtKAMAA/ROArQEAAAGFbirAAP0PPY7AAGtIwG3BkJNJwABrYhzAAGt5HMAAa3GGwABrZsBtwZBkAQABhMAAa3PAbbxMAMAA/b2AlwEAARbAAGuFhcAAa3vAbcF9YcAA/WsAwAD9xz4BPTDAAGuVHsAAa7DAAM67AAAAAD89HsAAa8rAAMuvBQAFhcAAa8/AbcF9hsAAa9rAbcGQLoDAAGvswG27FITAAGvzwG28TAAGwADZYYJ0wABsAsAAbBbAAGxlAACBpQAAAAEDwABsG8AAbGUAAAABAQHAAGwhAAAAgaZhAwFgA8AA5DNgA8AA+tEAAF0DwAD8+QFgA8AA5DMBSsAAbEABH8AAbETAAM3OAgFgA8AA5DMCLoDAAGxjwG3C+wAGwADZYoJ0wABsasAAbH7AAGy3AACWcAAAAAEDwABsgsAAbLcAAAABAQHAAGyHAAAAg6hgA8AA/JcAAF0DwAD8+QFgA8AA5DMBSsAAbI0BH8AAbJHAAM2JAwFgA8AA5DMDLpOAwABstcBtw3AABsAA2WOCdMAAbLzAAGzQwABtLQAAlnEAAAABA8AAbNnAAG0tAAAAAQEBwABs3wAAAJcrYQMBYAPAAOQzYAPAAPrRAABdA8AA/PkBYAPAAOQzAUrAAG0BAR/AAG0FwADOFAIBYAPAAOQzAi6AwABtKMBtw90ABsAA2WSCdMAAbTLAAG1GwABtiAAAllsAAAABA8AAbUrAAG2IAAAAAQEBwABtTwAAAIOoYAPAAPyXAABdA8AA/PkBYAPAAOQzAUrAAG1bAR/AAG1fwADNiQMBYAPAAOQzAy6AwABtgMBtxFIrAAbAANllgnTAAG2NwABtocAAbf4AAJZvAAAAAQPAAG2qwABt/gAAAAEBAcAAbbAAAACXK2EDAWADwADkM2ADwAD60QAAXQPAAPz5AWADwADkMwFKwABt0gEfwABt1sAAzkwCAWADwADkMwIugMAAbfnAbcS/AAbAANmJgnTAAG4DwABuG8AAblABAJi1AAAAAQPAAG4kwABuUAAAAAAAAABdA8AA/PkBYAPAAOQzAUrAAG4nAR/AAG4rwADPOgEBYAPAAOQzAS4ABsAA2WaCdMAAblXAAG5pwABulAAAnJsAAAABA8AAbm7AAG6UAAAAAAAAAF0DwAD9bQJgA8AA/JdgA8AA5DMBSsAAbnQBH8AAbnjAAM8wAQFgA8AA5DMBLgAGwADZZ4J0wABumcAAbq3AAG9GAACgBgAAAAEDwAButcAAb0YAAAACAQLAAG66AAAAamADwAD8lwDAAG7GAAAAgpBgA8AA/JcBagBgA8AA/aF5AF0DwAD8+QFgA8AA5DMBPgI9HsAAbt3AAPvYAwADgMAAbu3AbcXggcAAbvTAbcXvFsAAbv4uYcAA/WsASsAAbwsBH8AAbxbAAM2JAwFgA8AA5DMDLoDAAG83wG3F4IHAAG8+wG3F7wAGwADZioJ0wABvS8AAb2PAAG+WAQBcAAAAAQPAAG9swABvlgAAAAAAAABdA8AA/TQBYAPAAOQzAUrAAG9vAR/AAG9zwADe8gEBYAPAAOQzAS4ABsAA2WiCdMAAb5vAAG+rwABwDAAAgK0AAAABA8AAb7HAAHAMAAAAAQAAAcAAb7gAAACFbmADwAD60QFqwABvwmADwAD60XddA8AA/TsBYAPAAOQzAT4BSsAAb88BHsAAb9rAAP1BAgFgA8AA5DMBLgGFboDAAG//wG3G7QbAANlpgnTAAHARwABwIMAAcFYAAJVJAAAAAQPAAHAlwABwVgAAAAAAAABdA8AA/i8BYAPAAOQzAT4BSsAAcC4BHsAAcDnAAMGoAQFgA8AA5DMBLgAGwADZaoJ0wABwW8AAcGDAAHDeAACD/QAAAAEDwABwZ8AAcN4AAAABAQHAAHBtAAAAgaZhAwFgA8AA5DNcAABcAT4CTsAAcI3AAHCRAACXmGADwAD8lwEWwABwmC5hwAD9a0XAAHCkAcAAcK3AAHCvAABiYAPAAPyXAZMBHMAAcLaCwABwtMBtx/tjAQABgcAAcLjAbcfXAMAA/cUBisAAcL3Abcf7HMAAcL6CwABwvcBtx/tkAQABlADAAP29PgE9HMAAcMuAwABwysBtx70gAQABHMAAcNAuSwEAAYLAAHDRwG3H+wDAAP1KAAAGwADZa4J0wABw48AAcO3AAHIAAACWbAAAAAEDwABw88AAcgAAAAABAQHAAHD+AAAghy5hAwJgA8AA5DNgA8AA5DNgA8AA5DMAAGADwADkMwE+BU7AAHE1wABxOQAAl5hgA8AA/JcBFsAAcUAuYcAA/WtJwABxTBzAAHFUgcAAcVDAbcjUSAEAAZMAwAD9uz0wwABxWh7AAHF1wADOuQAAAAA/TsAAcYrAAHGQAACAlmADwADkMwEcwABxli5LAQABkwDAAP1KRcAAcZ8BwABxqMAAcaoAAGJgA8AA/JcBlAEcwABxsYPAAHGvwG3JTWMBAAGBwABxs8BtyNQAwAD9xQGLwABxusBtyU0cwABxuIPAAHG6wG3JTWQBAAGUAMAA/b0+AT2KwABxxcBtySQcwABx1IDAAHHNwG3IqiACAAKCwABx1cBtySQcwABx4C5LAQABg8AAceHAbclNAMAA/UoAAErAAHHwAYLAAHH3wG3JJAbAANlsgnTAAHIFwAByB8AAcuQAAINfAAAAAQPAAHIOwABy5AAAAQAAgnpgA8AA/eQBWwICAsAAchEAAACWaF8DAAAAwAByIQAAAIcuYQMCXwMAAGADwADkM18DAAAAAF8DAAABPgNOwAByV8AAclsAAJeYYAPAAPyXARbAAHJiLmHAAP1rRcAAcm4BwAByd8AAcnkAAGJgA8AA/JcBkwEcwABygIPAAHJ+wG3Kf2MBAAGCwABygsBtylsAwAD9xQGLwAByicBtyn8cwAByh4PAAHKJwG3Kf2QBAAGUAMAA/b0+AT2IwABylMBtyikcwAByqoHAAHKjwG3KNyACAAKAwAByq8BtyikcwAByvS5LAQABg8AAcr7Abcp/AMAA/UoAAErAAHLNAYDAAHLUwG3KKQbAANltgnTAAHLpwABy9cAAc0YAAICrAAAAAQPAAHL7wABzRgAAAQAAgnpgA8AA/eQBWwEBAcAAcv4AAACBpmEDAWADwADkM18DAAAAAF0DwAD8+QFfAwAAAUrAAHMdAR7AAHMhwADNnQICYAPAAOQzXwMAAAIugMAAc0TAbctbAAbAANlugnTAAHNLwABzV8AAc7UAAISVAAAAAQPAAHNgwABztQAAAQAAgnpgA8AA/eQBWwEBAcAAc20AAACBpmEDAWADwADkM10DwAD8+QFfAwAAAABdA8AA/PkBXwMAAAFKwABzjAEfwABzkMAAzeICAmADwADkM18DAAACLoDAAHOzwG3L3AAGwADZb4J0wABzusAAc7/AAHRfAACWYgAAAAEDwABzxMAAdF8AAAABAQHAAHPKAAAAgaZhAwFgA8AA5DNgA8AA+tEAAGADwAD60QE+A07AAHPqwABz7gAAl5hgA8AA/JcBFsAAc/UuYcAA/WtFwAB0AQHAAHQKwAB0DAAAYmADwAD8lwGTARzAAHQTgsAAdBHAbcygYwEAAYHAAHQVwG3MfADAAP3FAYrAAHQcwG3MoBzAAHQagsAAdBzAbcygZAEAAZQAwAD9vT4BScAAdCchHMAAdC2AwAB0LMBtzFggAQABHMAAdDIuSwEAAYLAAHQzwG3MoADAAP1KAABKwAB0OAEqP0rAAHRQASkGwADZcIJ0wAB0ZMAAdGnAAHUGAACB1gAAAAEDwAB0bMAAdQYAAAABAQHAAHRyAAAAgaZhAwFgA8AA5DNgA8AA+tEAAGADwAD60QE+A07AAHSSwAB0lgAAl5hgA8AA/JcBFsAAdJ0uYcAA/WtFwAB0qQHAAHSywAB0tAAAYmADwAD8lwGTARzAAHS7gsAAdLnAbc2rYwEAAYHAAHS9wG3NhwDAAP3FAYrAAHTEwG3NqxzAAHTCgsAAdMTAbc2rZAEAAZQAwAD9vT4BScAAdM8cwAB01IDAAHTTwG3NYyABAAEcwAB02S5LAQABgsAAdNrAbc2rAMAA/UoAAErAAHTfASk/SsAAdPYBKgbAANlxgnTAAHULwAB1FcAAdjgAAJZmAAAAAQPAAHUfwAB2OAAAAAIBAcAAdSUAAACXK2EDAWADwADkM2ADwAD60QABwAB1SQAAIJZnYQMAYAPAAOQzAWoAYAPAAP2heWADwADkMwE+BE7AAHVewAB1YgAAl5hgA8AA/JcBFsAAdWkuYcAA/WtFwAB1dQHAAHV+wAB1gAAAYmADwAD8lwGTARzAAHWHg8AAdYXAbc7RYwEAAYLAAHWJwG3OrQDAAP3FAYvAAHWQwG3O0RzAAHWOg8AAdZDAbc7RZAEAAZQAwAD9vT4CTsAAdZ/AAHWnAACWUmADwADkMwEcwAB1rS5LAQABg8AAda7Abc7RAMAA/UpJwAB1uBzAAHXAgMAAdbzAbc5tIAEAAYTAAHXBwG3PKgAASsAAdcsBhMAAddLAbc8qP0nAAHXlIRzAAHXwgcAAdenAbc6HSAEAASsAwAD98UrAAHX5ARzAAHYGgcAAdgDAbc6HIAAAAAAAPz0wwAB2Dh7AAHYpwADOuQAAAAAGwADZcoJ0wAB2PcAAdkfAAHeAAACWawAAAAEDwAB2UMAAd4AAAAACAQHAAHZWAAAAlythAwFgA8AA5DNgA8AA+tEAAcAAdnoAACCWZ2EDAGADwADkMwFqAGADwAD9oXlgA8AA5DMBPgROwAB2j8AAdpMAAJeYYAPAAPyXARbAAHaaLmHAAP1rRcAAdqYBwAB2r8AAdrEAAGJgA8AA/JcBHMAAdreCwAB2s8Bt0D2BjQEAAZQAwAD9vgEcwAB2voPAAHa8wG3QYYFtAQABkwDAAP3IAYvAAHbGwG3QYRzAAHbEg8AAdsbAbdBhgY0BAAGUAMAA/b4+Ak7AAHbVwAB23QAAllJgA8AA5DMBHMAAduMuSwEAAYPAAHbkwG3QYQDAAP1KScAAdu4cwAB29oDAAHbywG3P/SABAAGEwAB298Bt0MwAAD4BSsAAdwsBhMAAdxLAbdDMP0nAAHctIRzAAHc4gcAAdzHAbdAXSAEAASsAwAD98UrAAHdBARzAAHdOgcAAd0jAbdAXIAAAAAAAPz0wwAB3Vh7AAHdxwADOuQAAAAAGwADZc4J0wAB3hcAAd4/AAHmZAACWbgAAAAEDwAB3msAAeZkAAAACAQHAAHegAAAAlythAwFgA8AA5DNgA8AA+tEAAcAAd8QAACCWZ2EDAGADwADkMwFqAGADwAD9oXlgA8AA5DMBPgdOwAB32cAAd+AAAIF2WwErTsAAd/HAAHf/AADAAHI9YAPAAPrRASpOwAB4EMAAeBQAAJeYYAPAAPyXARbAAHgbLmHAAP1rRcAAeCcBwAB4MMAAeDIAAGJgA8AA/JcBkwEcwAB4OYXAAHg3wG3SLGMBAAGEwAB4O8Bt0ggAwAD9xQGNwAB4QsBt0iwcwAB4QIXAAHhCwG3SLGQBAAGUAMAA/b0+Ak7AAHhRwAB4WQAAllJgA8AA5DMBHMAAeF8uSwEAAYXAAHhgwG3SLADAAP1KScAAeGocwAB4coDAAHhuwG3RoSABAAGGwAB4c8Bt0oUAAD4DScAAeIeDwAB4i8Bt0fE+AT0wwAB4ph7AAHjBwADOugAAAAA/PYrAAHjewG3R4YbAAHjnwG3ShT2LwAB4+MBt0fEpP0nAAHkgg8AAeSTAbdHxSsAAeTMBJsAAeTMBgsAAeTrAbdHhYAPAAOQzP0nAAHlGIRzAAHlRgcAAeUrAbdG7SAEAASsAwAD98UrAAHlaARzAAHlngcAAeWHAbdG7IAAAAAAAPz0wwAB5bx7AAHmKwADOuQAAAAAGwADZdIJ0wAB5nsAAeajAAHnZAACWZQAAAAEDwAB5scAAedkAAAABAQHAAHm2AAAAJ2ADwAD8lwAAYAPAAOQzAT4BSsAAecMBHMAAec4uSwEAAYDAAHnPwG3TtwDAAP1KBsAA2XWCdMAAed7AAHnjwAB6QQAAVgAAAAEDwAB55sAAekEAAAABAQHAAHnxAAAggJZgA8AA5DMAAFwBPgE9MMAAef4fwAB6CMAA/CkBAAEnwAB21wAGwADZdoJ0wAB6RsAAekvAAHq2AACApQAAAAEDwAB6UcAAerYAAAABAQHAAHpmAAAggJZdA8AA/PkBYAPAAOQzAABcAT4BPTDAAHpzH8AAen3AAPwpAQABJ8AAdtcABsAA2XeCdMAAervAAHrAwAB7MQAAnw4AAAABA8AAesbAAHsxAAAAAgICwAB6ywAAACdgA8AA/JcAwAB63AAAIICWYAPAAOQzAABcAT4BPTDAAHrpH8AAevPAAPwpAQABJ8AAeXoABsAA2XiCdMAAezbAAHs7wAB7ugAAoBQAAAABA8AAe0TAAHu6AAAAAgICwAB7SQAAACdgA8AA/JcAwAB7ZAAAICldA8AA/PkBYAPAAOQzAABcAT4BPTDAAHtyH8AAe3zAAPwpAQABJ8AAeXoABsAA2XmCdMAAe7/AAHvEwAB8ZQAAgK4AAAABA8AAe8jAAHxlAAAAAQABwAB7zgAAAJtTYQMCYAPAAOQzYAPAAOQzYAPAAPyXAWoAYAPAAP2heQBcAT4CScAAe/gcwAB8BIDAAHv8wG3VnkgBAAErAMAA/fE+AT0wwAB8FSfAAHmEPz0ewAB8TsAAz08CAWADwADkMwIugMAAfFnAbdWeAAbAANl6gnTAAHxqwAB8bsAAfW8AAIC7AAAAAQPAAHx1wAB9bwAAAAIBAsAAfIAAACCWUmADwADkMwDAAHyOAAAAamADwAD8lwFqwAB8lmADwAD8lwkAYAPAAPyXAT4DScAAfKAcwAB8qoHAAHykwG3WToFtAQABFsAAfLIuYcAA/WsAwAD9yD4BSsAAfMIBHMAAfMmUgcYAAAAAwAD8uknAAHzYHMAAfOKBwAB83MBt1k5jAQABkwDAAP3FPgE9icAAfO/AbdZOkz9FwAB9BAHAAH0NwAB9DwAAYmADwAD8lwGBwAB9EcBt1k4BHMAAfRqCwAB9GMBt1uRjAQABFsAAfSEuYcAA/WsAwAD9xQGKwAB9KcBt1uQcwAB9KoLAAH0pwG3W5GQBAAGUAMAA/b0+AUnAAH02HMAAfUIcwAB9Pi5LAQABgsAAfT/AbdbkAMAA/UpIAQABgMAAfUXAbdY+AMAA/fFKwAB9TgGCwAB9VcBt1uQ/SsAAfWIBHMAAfWmUgcYAAAAAwAD8ugbAANl7gnTAAH10wAB9eMAAfpYAAJaMAAAAAQPAAH2DwAB+lgAAAAIBAsAAfY4AACCWUmADwADkMwDAAH2cAAAAamADwAD8lwFqwAB9pGADwAD9oXkAYAPAAPyXAT4DScAAfbEiHMAAfbuBwAB9tcBt19pIAQABKwDAAP27ARzAAH3MgcAAfcbAbdfagW0BAAEWwAB91C5hwAD9awDAAP3IPgE9icAAfeTAbdfaHMAAffgWwAB98S5hwAD9a4GNAQABlADAAP2+ScAAfggcwAB+EoHAAH4MwG3X2mMBAAGTAMAA/cU+AUrAAH4fARzAAH4mlIHGAAAAAMAA/Lo/RcAAfjQBwAB+PcAAfj8AAGJgA8AA/JcBgcAAfkHAbdfaARzAAH5KgsAAfkjAbdikgW0BAAGTAMAA/cgBisAAflDAbdikHMAAflGCwAB+UMBt2KSBjQEAAZQAwAD9vj4BScAAfl0cwAB+aRzAAH5lLksBAAGCwAB+ZsBt2KQAwAD9SkgBAAGAwAB+bMBt18oAwAD98UrAAH51AYLAAH58wG3YpD9KwAB+iQEcwAB+kJSBxgAAAADAAPy6BsAA2XyCdMAAfpvAAH6lwAB/AAAAhiYAAAABA8AAfq/AAH8AAAAAAAAAAGADwADkMwE+AT0wwAB+uB/AAH7CwAD8KQEAASfAAHbYAAbAANl9gnTAAH8FwAB/D8AAf3EAAKATAAAAAQPAAH8XwAB/cQAAAAEBAcAAfxwAAAAnYAPAAPyXAABgA8AA5DMBPgE9MMAAfykfwAB/M8AA/CkBAAEnwAB22AAGwADZfoJ0wAB/dsAAf3vAAH/zAACXKgAAAAEDwAB/hsAAf/MAAAABAQHAAH+MAAAAlythAwFgA8AA5DNgA8AA+tEAAFwBPgE9MMAAf6sfwAB/tcAA/CkBAAEnwAB22AAGwADZf4J0wAB/+MAAf/3AAIB1AACXLQAAAAEDwACACMAAgHUAAAABAQHAAIAOAAAAlythAwFgA8AA5DNgA8AA+tEAAFwBPgE9MMAAgC0fwACAN8AA/CkBAAEnwAB22AAGwADZi4J0wACAesAAgIjAAIDiAQCDHgAAAAEDwACAjsAAgOIAAAAAAAAAYAPAAOQzAT4CScAAgJQcwACAnxbAAICYLmHAAP1rgJcBAAGTAMAA/cdKwACApAEcwACAry5LAQABkwDAAP1KPz0wwACAuB7AAIDTwADOuQAAAAAGwADZjIJ0wACA58AAgPXAAIFXAQCB6gAAAAEDwACA+sAAgVcAAAAAAAAAYAPAAOQzAT4CScAAgQAcwACBCxbAAIEELmHAAP1rgJcBAAGTAMAA/cdKwACBEAEcwACBGy5LAQABHMAAgSMWwACBHC5hwAD9a4GNAQABlADAAP2+AMAA/Uo/PTDAAIEtHsAAgUjAAM65AAAAAAbAANmNgnTAAIFcwACBasAAggEBAIDDAAAAAQPAAIFxwACCAQAAAAAAAABgA8AA5DMBPgNJwACBdxzAAIGCFsAAgXsuYcAA/WtIAQABlADAAP27SsAAgYgBHMAAgZMuSwEAAZMAwAD9Sj9JwACBnBzAAIGnFsAAgaAuYcAA/WtIAQABkwDAAP27PTDAAIGtHsAAgcjAAM65AAAAAD89MMAAgdkewACB9MAAzroAAAAABsAA2YCCdMAAggbAAIIUwACDAwAAgVgAAAABA8AAghvAAIMDAAAAAgECwACCIAAAAGpgA8AA/JcAwACCLAAAAIKQYAPAAPyXAWoAYAPAAP2heQBgA8AA5BUBPgU9icAAgjjAbdy+HsAAgknAAPvYAwADgMAAglnAbdyvgcAAgmDAbdy+FsAAgmouYcAA/WsATsAAgnvAAIKCAABhYAPAAPyXARzAAIKIgcAAgoTAbdy+gY0BAAGAwACCisBt3K8AwAD9vk7AAIKjwACCqgAAgXZgA8AA5BUBHMAAgqwuwAB5fcAA1D0BAAGCwACCuMBt3RYAwADU7j0cwACCzIPAAILFwG3dSoNkBAAEk4LAAILYwG3dFi6AwACC5sBt3K8AwAD9YErAAILyAYPAAIL5wG3dSgbAANmBgnTAAIMIwACDDcAAg44AAKAWAAAAAQPAAIMTwACDjgAAAAICAsAAgxgAAAAnYAPAAPyXAMAAgzMAACCD0V0DwAD8+QFgA8AA5DMAAFwBPgJOwACDScAAg00AAYKQYAPAAPyXARzAAINfFsAAg1iBwACDT8Bt3fFhwAD9HGQBAAGAwACDYcBt3eIAwAD9vT0cwACDbC6DZAMAA4DAAIN1wG3d4oLAAIN8wG3eDoHAAIOBwG3d8QDAANT3BsAA2YKCdMAAg5PAAIOYwACEUwAAm+MAAAABA8AAg6HAAIRTAAAAAwIDwACDpgAAAGpgA8AA/JcAwACDsQAAAIKQYAPAAPyXAMAAg8EAACDAAEOzYAPAAOQzAWoAYAPAAP2heQBcAT4CPR7AAIPewAD72AMAA4DAAIPuwG3eoYHAAIP1wG3esBbAAIP/LmHAAP1rAEXAAIQMAcAAhBXAAIQXAABiYAPAAPyXAYDAAIQZwG3eoQEcwACEIoPAAIQgwG3fEWMBAAGBwACEJMBt3rAAwAD9xQGLwACEK8Bt3xEcwACEKYPAAIQrwG3fEWQBAAGUAMAA/b0+AT0cwACEOi6AvwIAAoPAAIQ7wG3fEYLAAIRAwG3ewADAAP1LAABtsHQAbbDnAG2xGwBtsU0AbbF/AG2xxgBtsiEAbbKUAG2y9QBts4QAbbQtAG21fQBttwEAbbhPAG25UwBtuuoAbcLRAG3DRgBtw7MAbcQoAG3ElQBtxQoAbcVdAG3FtgBtxnAAbcbCAG3HPgBtx5MAbciAAG3J8wBtyyUAbcumAG3MLgBtzTkAbc5DAG3P0wBt0XcAbdONAG3T7gBt1EQAbdSiAG3VCABt1XQAbdYUAG3XoABt2VgAbdmkAG3Z/wBt2l8Abdq/AG3bPQBt29UAbdyFAG3duABt3ncAbd+UAAAANwLAANmRgnTAATmywAE50sABPhADwAB6AQFqwAE5s2ADwAD6mMABf5YAAWABwADZUwABYAHAAOQVAAAIBsAA2ZSCdMABOjLAATo6wAE6eAQBwAB3XMAA1D0AAAABA8ABOljAATp4AAAAAAAAAGADwADZkQE+AT0wwAE6YSfAAGH0BsAA2ZaCdMABOn3AATq+wAE7XgMASwFqwAE6fmADwAD6mMABmsQAAAEDwAE6wMABO14AAAABAQHAATrFAAAAJ2ADwAD8lwAAYAPAAOQzAT4CScABOtIiHMABOtyAwAE61sBt4TFjAQABkwDAAP3FARzAATrpgMABOuPAbeExgW0BAAEWwAE67C5hwADVvADAAP3IPgE9MMABOvwfwAE7BsAA++0DAAOAwAE7F8Bt4TEuJycAP0rAATs4ARzAATs/LsAAegLAANQ9AQABgMABO1TAbeExAMAA2ZoGwADZl4J0wAE7Y8ABO3HAATwjAwCAvwAAAAEDwAE7dMABPCMAAAACAgLAATt5AAAAJ2ADwAD8lwDAATuKAAAggJZgA8AA5DMAAFwBPgJJwAE7lyIcwAE7oYDAATubwG3h/WMBAAGTAMAA/cUBHMABO66AwAE7qMBt4f2BbQEAARbAATuxLmHAANW8AMAA/cg+AT0wwAE7wR/AATvLwAD77QMAA4DAATvcwG3h/S4nJwA/PRzAATv9LsAAegPAANQ9AgACgMABPBLAbeH9gcABPBnAbeIMAMAA2ZsGwADZnoJ0wAE8XcABPGXAATymAQDAAG9CAAAAAQPAATx4wAE8pgAAAAAAAABgA8AA/JcBPgFKwAE8fgFqwAE8k2ADwAD8l4NwBsAA2ZmCdMABPMrAATzYwAE9GgAAwAB5fcAA1D0AAAABA8ABPOPAAT0aAAAAAQEBwAE86AAAAGFgA8AA/JcAAGADwADkFQE+AUrAATz2AR7AAT0BwADkGQEAAYDAAT0PwG3jJwAGwADZmoJ0wAE9H8ABPSnAAT2OAADAAHoCwADUPQAAAAEDwAE9PcABPY4AAAABAQHAAT1CAAAAJ2ADwAD8lwAAYAPAAOQzAT4BSsABPU8BHMABPVYuwAB5wMAA1D0BAAEcwAE9aoDAAT1kwG3jjIONAQABasABPXpgA8AA/JeDcADAAP2/AMAA1dMGwADZm4J0wAE9k8ABPZjAAT4OAADAAHoDwADUPQAAAAEDwAE9rMABPg4AAAACAgLAAT2xAAAAJ2ADwAD8lwDAAT3CAAAAgJZgA8AA5DMAAFwBPgE9HMABPc8uwAB5wsAA1D0CAAIcwAE944DAAT3dwG3kFoONAQABasABPfNgA8AA/JeDcADAAP2/gcABPgTAbeQlAMAA1dQGwADZnIJ0wAE50sABOdIAABCgDADAANRgwADUYAEDAAAAAAADAwMAAAAAamADwAD8lwAAAAAAgpBgA8AA/JcAAAAAIIPRXQPAAPz5AVsAAFwBSgABHQCgDAMAA4AAwG3kpoEAwG3ksoIAwG3kvwDAANRgAABt4LQAbeD5AG3h0wBt4q4AbeL3AG3jXABt4+YAbeR/AG3k8gAAAAgCwADZn4J0wAE/VMABP3TAAUOKN8AAegQAAAFgAcAA1bYAAWABwADVHwABBcAA2dAAAAAABAAAAwAAAAAAAAAAAGADwADZnwE/AQkAAMAA1dsAAAAANwbAANmhgnTAAT90wAE/dAAAEKAMAMAA1GDAANRgAQMAAAAAAAMDAwAAAABqYAPAAPyXAAAAAACCkGADwAD8lwAAAAAgg9FdA8AA/PkBWwAAXAFKAAEdAKAMAwADgADAbeWYgQDAbeWkggDAbeWxAMAA1GAGwADZ0oJ0wACElsAAhJ7AAISwAQLAAG9CAAAAAQPAAISwwACEsAAAAAAAAABgA8AA/JcABsAA2dOCdMAAhLTAAIS8wACEyQECqfcAAAABA8AAhMnAAITJAAAAAAAAAGADwAD8lwAGwADZ1IJ0wACEzcAAhN3AAITjAQKCjwAAAAEDwACE48AAhOMAAAAAAAAAYAPAANWZAAbAANmjgnTAAITowACE9MAAhQsAAsAAeX3AANQ9AAAAAQPAAIT/wACFCwAAAAEBAcAAhQQAAABhYAPAAPyXAABgA8AA5B8ABsAA2aSCdMAAhRDAAIUcwACFTAAAlnIAAAABA8AAhSjAAIVMAAABAACCemADwAD95AFbAAAAAF0DwAD8+QFfAwAAAUrAAIUuAR/AAIUywADOrAEBXwMAAAEuAAbAANmlgnTAAIVRwACFY8AAhcsAAJZpAAAAAQPAAIVtwACFywAAAAEBAcAAhYAAACCD210DwAD8+QFgA8AA5VsAAF0DwAD8+QFgA8AA5VsBSsAAhZABHsAAhZTAAM6EAgFgA8AA5VsCLoDAAIXFwG3nSAAGwADZpoJ0wACF0MAAhdjAAIYEAACWZAAAAAEDwACF38AAhgQAAAEAAJclYAPAAP3kAVsAAAAAXQPAAP07AV8DAAABSsAAheUBHsAAherAAP1GAQJgA8AA5VtfAwAAAS4ABsAA2duCdMAAhgjAAIYRwACGfgIAgx4AAAABA8AAhhbAAIZ+AAAAAQEBwACGHwAAIICWYAPAAOVbAABcAT4CScAAhiwcwACGPBbAAIY1LmHAAP1rSAEAAZMAwAD9uz0wwACGQh/AAIZMwAD77QIAApMuAD89HMAAhm8ugL8CAAKTgMAAhnXAbegcAMAA/UsGwADZ3IJ0wACGg8AAhozAAIcGAgCB6gAAAAEDwACGkMAAhwYAAAABAQHAAIaZAAAggJZgA8AA5VsAAFwBPgJJwACGphzAAIa2FsAAhq8uYcAA/WtIAQABkwDAAP27PTDAAIa8H8AAhsbAAPvtAgACky4APz0cwACG6S6AvwIAAhzAAIb2FsAAhu8uYcAA/WuBjQEAAZQAwAD9voDAAIb9wG3oqwDAAP1LBsAA2aeCdMAAhwvAAIcPwACHzAAAoBEAAAABA8AAhxnAAIfMAAAAAgECwACHHwAAAJcrYQMBYAPAAOVbYAPAAPrRAMAAhzsAAABqYAPAAPyXAWrAAIdDYAPAAPyXCQBgA8AA/JcBPgNJwACHTRzAAIdXgcAAh1HAbeltYwEAAZMAwAD9xT2JwACHXMBt6W2TP0XAAIdrAcAAh3TAAId2AABiYAPAAPyXAYHAAId4wG3pbQEcwACHgYLAAId/wG3pwWMBAAEWwACHgy5hwAD9awDAAP3FAYrAAIeLwG3pwRzAAIeMgsAAh4vAbenBZAEAAZQAwAD9vT4BScAAh5gcwACHoIDAAIecwG3pVCABAAEcwACHpS5LAQABgsAAh6bAbenBAMAA/UoAAErAAIerAYLAAIeywG3pwT9KwACHvwEcwACHxpSBxgAAAADAAPy6BsAA2aiCdMAAh9HAAIfVwACIuAAAoBIAAAABA8AAh+PAAIi4AAAAAgECwACH6QAAAJcrYQMBYAPAAOVbYAPAAPrRAMAAiAUAAABqYAPAAPyXAWoAYAPAAP2heQBgA8AA/JcBPgNJwACIEyIcwACIHYHAAIgXwG3qvUgBAAErAMAA/bsBHMAAiC6BwACIKMBt6r2BbQEAARbAAIg2LmHAAP1rAMAA/cg9icAAiD7Abeq9HMAAiFIWwACISy5hwAD9a4GNAQABlADAAP2+P0XAAIhbAcAAiGTAAIhmAABiYAPAAPyXAYHAAIhowG3qvQEcwACIcYLAAIhvwG3rTYFtAQABkwDAAP3IAYrAAIh3wG3rTRzAAIh4gsAAiHfAbetNgY0BAAGUAMAA/b4+AUnAAIiEHMAAiIyAwACIiMBt6qQgAQABHMAAiJEuSwEAAYLAAIiSwG3rTQDAAP1KAABKwACIlwGCwACInsBt600/SsAAiKsBHMAAiLKUgcYAAAAAwAD8ugbAANmpgnTAAIi9wACI1MAAia8DAGQAAAABA8AAiNXAAImvAAAAAQEBwACI5AAAIIPbXQPAAP07AWADwADlWwAAXQPAAP07AWADwADlWwE+Ak7AAIj1wACJAQAAg15gA8AA/JcBHMAAiQ8WwACJCC5hwAD9a2QBAAEWwACJF4DAAIkRwG3sJ2HAAP1rAMAA/b1KwACJIwE1wACJMwAAAQBdA8AA/TsBYAPAAOVbATHAAIkzYAPAAOVbADUAAAABAFsBF8AAiT6CwACJPMBt7JZhgcAAiUfAbexQwAD9aTUAAAABAFsBHMAAiVuCwACJWcBt7JaDZAMAA5MWwACJbC5hwAD9ay4AwAD9YDUAAAABAFsBHMAAiYKCwACJgMBt7JaDZAMAAxbAAImQLmHAAP1rgcAAiZjAbexQgMAAiaXAbewnAMAA/WCCAMBt7JYGwADZqoJ0wACJtMAAibnAAIpYAACDHAAAAAEDwACJwcAAilgAAAABAQHAAInJAAAAllJgA8AA/eQAAGADwAD60QE+A07AAIncwACJ4AAAl5hgA8AA/JcBFsAAiecuYcAA/WtFwACJ8wHAAIn8wACJ/gAAYmADwAD8lwGTARzAAIoFgsAAigPAbe21YwEAAYHAAIoHwG3tkQDAAP3FAYrAAIoOwG3ttRzAAIoMgsAAig7Abe21ZAEAAZQAwAD9vT4BScAAihkcwACKJRzAAIohLksBAAGCwACKIsBt7bUAwAD9SkgBAAGAwACKKMBt7XYAwAD98UrAAIoxASk/SsAAikgBKgbAANmrgnTAAIpdwACKYsAAi0sAAKAAAAAAAQPAAIppwACLSwAAAAEAAcAAinIAAACgAWADwADQ/wFqAGADwAD9oXkAXAE+Az0jHMAAioiAwACKgcBt7npIAQABKwDAAP3xiMAAioHAbe56HsAAipDAANEBAAAAACsBYAPAAND/TsAAiqLAAIqkAABiYAPAAPyXARbAAIqrLmHAAP1rQ8AAirccwACKwIHAAIq+wG3u0YCXAQABlADAAP3HPgVOwACK0cAAitUAAKACYAPAAPyXARzAAIregMAAitfAbe56oAMBAAGBwACK5sBt7tEAwADRBD2JwACK8MBt7tEcwACK8oHAAIrwwG3u0YGNAQABlADAAP2+TsAAiwLAAIsGAACgBGADwADlWwEcwACLDC5LAQABgcAAiw3Abe7RAMAA/Uo9HMAAixsugL8CAAKBwACLHMBt7tEcwACLJS5LAQABgsAAiybAbe8PAMAA/UoAwAD9Sz0cwACLNi6AvwIAAoLAAIs3wG3vD4PAAIs+wG3vZwDAAP1LBsAA2ayCdMAAi1DAAItVwACUNAAAg2QAAAABA8AAi13AAJQ0AAAABAMEwACLYgAAAGpgA8AA/JcAwACLbQAAAIKQYAPAAPyXAMAAi4QAACCWWl0DwAD8+QFgA8AA5VsAwACLlQAAAKAJYAPAAPyXAWrAAIuhYAPAAPyXCQBcAT4LScAAi8AiIhzAAIvGk4CXAQABgMAAi8jAbfARAMAA/ccBHMAAi9eAwACL0cBt8BGAlwEAAYHAAIvZwG3wIADAAP3HARzAAIvkgcAAi+DAbfAggJcBAAEWwACL5i5hwAD9awDAAP3HPgI9HsAAjAHAAPvYAwADgMAAjBHAbfARgcAAjBjAbfAgFsAAjB0uYcAA/WsAQCrAAIxFwACMSgA/ScAAjFccwACMZYPAAIxbwG3wR2MBAAGTAMAA/cU+AT0wwACMch/AAIyDwAD74QQABIPAAIyJwG3wR5MrJ6AJAD9OwACMvMAAjMIAAYDuYAPAAPyXARzAAIzIgcAAjMTAbfAggY0BAAGAwACMysBt8BEAwAD9vknAAIzVHMAAjPMcwACM5hbAAIzfgsAAjNrAbfAwYcAA/RyBjQEAAYPAAIzowG3wRwDAAP2+YwEAAYTAAIz1wG3xSQDAAP3FPgE9MMAAjQQewACNH8AAzrsAAAAAP0nAAI00HMAAjT6EwACNOMBt8UlIAQABkwDAAP27SsAAjUQAP0nAAI1RJcAAjVqCwACNVcBt8DBgA8AA1FM+Ak7AAI3lwACN9QABwAB5fmADwADUUwEmwACN/ACCwACN98Bt8DBgA8AA1FNJwACOFRzAAI4xFsAAjh4uwABvQsAA1SFIAQABFsAAjkSFwACONMBt8hrAAG9CwADUVgDAAP27PgFJwACOYiIcwACObYTAAI5nwG3xSWMBAAE3CgDAAP3FACEcwACOjhbAAI6HhcAAjnfAbfIago/AANRYSAEAARbAAI6WLoKPwADVIwDAANWkPgI9HsAAjrHAAMuvBQAFJsAAjrsAgsAAjrbAbfAwXQPAAP07AWADwADlW4PAAI7NwG3wRy6AwACO3sBt8BGEwACO5cBt8UkASsAAjvcAScAAjw4cwACPJBbAAI8eFsAAjxcugo/AANUjt1XAANQ9wADVnMAAb0HAANQ9BgAGHMAAj1YcwACPQYDAAI87wG3wEYONAQABFsAAj0MuwABvQsAA1SEAwAD9v2QBAAEWwACPXS6p98AA1SIAwAD9vRzAAI9+hMAAj3jAbfFJg40BAAEWwACPgC7AAG9CwADVIQDAAP2/FsAAj7cWwACPsIXAAI+gwG3yGoKPwADUWLdVwADUPcAA1ZwcwACP6RzAAI/Ug8AAj8rAbfBHg40BAAEWwACP1i7AAG9CwADVIQDAAP2/ZAEAARbAAI/7hcAAj+vAbfIaqffAANRXAMAA/b0ewACQHsAAy7wBAAEuAB7AAJA/wADLvAEAAYLAAJBFwG3wMAAAwADUYz4BSsAAkFkAP0nAAJB4HMAAkJMWwACQjIXAAJB8wG3yGoKPwADUWEgBAAEWwACQmy6Cj8AA1SMAwADVpD4FTsAAkXHAAJF8AAHAAHl/XQPAAP07AWADwADlWwEmwACRgwCCwACRfsBt8DBdA8AA/TsBYAPAAOVbTsAAkaPAAJGuAAHAAHmAYAPAAOQfARzAAJGwLsAAeX3AANQ9AQABhMAAkbzAbfFJAMAA1StFwACRzAHAAJHVwACR1wAAYmADwAD8lwGTARzAAJHeFMAAkdzAbfT2CABjAQABhMAAkeDAbfFJAMAA/cUBFcAAkefAbfT2CBzAAJHoFMAAkefAbfT2CABkAQABlADAAP29PgE9HMAAkgKHwACR+MBt9LyAvwIAAhTAAJIDwG309ggAHMAAkhKGwACSCMBt9INLAQABHMAAkh2DwACSE8Bt8EdkAQABFMAAkh/AbfT2CAAAwAD9vQDAAP1KAMAA/UtFwACSNQHAAJI+wACSQAAAYmADwAD8lwGAwACSQsBt8BEBHMAAkksUwACSScBt9bYIAGMBAAGBwACSTcBt8CAAwAD9xQEVwACSUsBt9bYIHMAAklMUwACSUsBt9bYIAGQBAAGUAMAA/b0+AT0cwACSZy6AvwIAAhTAAJJowG31tggAHMAAkneHwACSbcBt9LxLAQABHMAAknoUwACSeMBt9bYIAIGNAQABgMAAknzAbfARAMAA/b4AwAD9SgDAAP1LSsAAkpYAPz9OwACStgAAAKAKXQPAAP07AVsATsAAkskAAACgC2ADwAD8lwBJwACS2SXAAJLigsAAkt3AbfAwXQPAAP07AWADwADlWz4CPY3AAJL8wG32ehTAAJMIwG3wMAIBXQPAAP07AWADwADlWz2OwACTFMBt9o2DwACTIcBt8Ec+Aj2NwACTP8Bt9nocwACTYBzAAJNQgsAAk0vAbfAwllsBAAGDwACTVcBt8EcAwAD9E4CtAQAAAYVuKsAA/Q89jsAAk3/AbfaNk0nAAJOZHMAAk7AcwACTqIbAAJOdwG32jWQBAAGEwACTqsBt8UkAwAD9vYCXAQABFsAAk7yFwACTssBt9nphwAD9awDAAP3HPgE9MMAAk8wewACT58AAzrsAAAAAPz0ewACUAcAAy68FAAWFwACUBsBt9nqGwACUEcBt9o0ugMAAlCPAbfARhMAAlCrAbfFJAAbAANmtgnTAAJQ5wACUS8AAlJYAAIGlAAAAAQPAAJRQwACUlgAAAAEBAcAAlFYAAACBpmEDAWADwADlW2ADwAD60QAAXQPAAPz5AWADwADlWwFKwACUcwEfwACUd8AAzc4CAWADwADlWwIugMAAlJTAbff4AAbAANmugnTAAJSbwACUrcAAlOQAAJZwAAAAAQPAAJSxwACU5AAAAAEBAcAAlLYAAACDqGADwAD8lwAAXQPAAPz5AWADwADlWwFKwACUvAEfwACUwMAAzYkDAWADwADlWwMuk4DAAJTiwG34bQAGwADZr4J0wACU6cAAlPvAAJVUAACWcQAAAAEDwACVBMAAlVQAAAABAQHAAJUKAAAAlythAwFgA8AA5VtgA8AA+tEAAF0DwAD8+QFgA8AA5VsBSsAAlSoBH8AAlS7AAM4UAgFgA8AA5VsCLoDAAJVPwG342gAGwADZsIJ0wACVWcAAlWvAAJWlAACWWwAAAAEDwACVb8AAlaUAAAABAQHAAJV0AAAAg6hgA8AA/JcAAF0DwAD8+QFgA8AA5VsBSsAAlXoBH8AAlX7AAM2JAwFgA8AA5VsDLoDAAJWdwG35TysABsAA2bGCdMAAlarAAJW8wACWFQAAlm8AAAABA8AAlcXAAJYVAAAAAQEBwACVywAAAJcrYQMBYAPAAOVbYAPAAPrRAABdA8AA/PkBYAPAAOVbAUrAAJXrAR/AAJXvwADOTAIBYAPAAOVbAi6AwACWEMBt+bwABsAA2dWCdMAAlhrAAJYwwACWYwEAmLUAAAABA8AAljnAAJZjAAAAAAAAAF0DwAD8+QFgA8AA5VsBSsAAljwBH8AAlkDAAM86AQFgA8AA5VsBLgAGwADZsoJ0wACWaMAAlnrAAJajAACcmwAAAAEDwACWf8AAlqMAAAAAAAAAXQPAAP1tAmADwAD8l2ADwADlWwFKwACWhQEfwACWicAAzzABAWADwADlWwEuAAbAANmzgnTAAJaowACWusAAl1EAAKAGAAAAAQPAAJbCwACXUQAAAAIBAsAAlscAAABqYAPAAPyXAMAAltMAAACCkGADwAD8lwFqAGADwAD9oXkAXQPAAPz5AWADwADlWwE+Aj0ewACW6sAA+9gDAAOAwACW+sBt+t2BwACXAcBt+uwWwACXCy5hwAD9awBKwACXGAEfwACXI8AAzYkDAWADwADlWwMugMAAl0LAbfrdgcAAl0nAbfrsAAbAANnWgnTAAJdWwACXbMAAl50BAFwAAAABA8AAl3XAAJedAAAAAAAAAF0DwAD9NAFgA8AA5VsBSsAAl3gBH8AAl3zAAN7yAQFgA8AA5VsBLgAGwADZtIJ0wACXosAAl7DAAJgPAACArQAAAAEDwACXtsAAmA8AAAABAAABwACXvQAAAIVuYAPAAPrRAWrAAJfHYAPAAPrRd10DwAD9OwFgA8AA5VsBPgFKwACX1AEewACX38AA/UECAWADwADlWwEuAYVugMAAmALAbfvqBsAA2bWCdMAAmBTAAJghwACYVQAAlUkAAAABA8AAmCbAAJhVAAAAAAAAAF0DwAD+LwFgA8AA5VsBPgFKwACYLwEewACYOsAAwagBAWADwADlWwEuAAbAANm2gnTAAJhawACYX8AAmNsAAIP9AAAAAQPAAJhmwACY2wAAAAEBAcAAmGwAAACBpmEDAWADwADlW1wAAFwBPgJOwACYisAAmI4AAJeYYAPAAPyXARbAAJiVLmHAAP1rRcAAmKEBwACYqsAAmKwAAGJgA8AA/JcBkwEcwACYs4LAAJixwG38+GMBAAGBwACYtcBt/NQAwAD9xQGKwACYusBt/PgcwACYu4LAAJi6wG38+GQBAAGUAMAA/b0+AT0cwACYyIDAAJjHwG38uiABAAEcwACYzS5LAQABgsAAmM7Abfz4AMAA/UoAAAbAANm3gnTAAJjgwACY6MAAmfUAAJZsAAAAAQPAAJjuwACZ9QAAAAEBAcAAmPcAACCHLmEDAmADwADlW2ADwADlW2ADwADlWwAAYAPAAOVbAT4FTsAAmSrAAJkuAACXmGADwAD8lwEWwACZNS5hwAD9a0nAAJlBHMAAmUmBwACZRcBt/dFIAQABkwDAAP27PTDAAJlPHsAAmWrAAM65AAAAAD9OwACZf8AAmYUAAICWYAPAAOVbARzAAJmLLksBAAGTAMAA/UpFwACZlAHAAJmdwACZnwAAYmADwAD8lwGUARzAAJmmg8AAmaTAbf5KYwEAAYHAAJmowG390QDAAP3FAYvAAJmvwG3+ShzAAJmtg8AAma/Abf5KZAEAAZQAwAD9vT4BPYrAAJm6wG3+IRzAAJnJgMAAmcLAbf2nIAIAAoLAAJnKwG3+IRzAAJnVLksBAAGDwACZ1sBt/koAwAD9SgAASsAAmeUBgsAAmezAbf4hBsAA2biCdMAAmfrAAJn8wACa1wAAg18AAAABA8AAmgPAAJrXAAABAACCemADwAD95AFbAgICwACaBgAAAJZoXwMAAADAAJoWAAAAhy5hAwJfAwAAYAPAAOVbXwMAAAAAXwMAAAE+A07AAJpKwACaTgAAl5hgA8AA/JcBFsAAmlUuYcAA/WtFwACaYQHAAJpqwACabAAAYmADwAD8lwGTARzAAJpzg8AAmnHAbf98YwEAAYLAAJp1wG3/WADAAP3FAYvAAJp8wG3/fBzAAJp6g8AAmnzAbf98ZAEAAZQAwAD9vT4BPYjAAJqHwG3/JhzAAJqdgcAAmpbAbf80IAIAAoDAAJqewG3/JhzAAJqwLksBAAGDwACascBt/3wAwAD9SgAASsAAmsABgMAAmsfAbf8mBsAA2bmCdMAAmtzAAJrowACbNQAAgKsAAAABA8AAmu7AAJs1AAABAACCemADwAD95AFbAQEBwACa8QAAAIGmYQMBYAPAAOVbXwMAAAAAXQPAAPz5AV8DAAABSsAAmw4BHsAAmxLAAM2dAgJgA8AA5VtfAwAAAi6AwACbM8BuAFgABsAA2bqCdMAAmzrAAJtGwACboAAAhJUAAAABA8AAm0/AAJugAAABAACCemADwAD95AFbAQEBwACbXAAAAIGmYQMBYAPAAOVbXQPAAPz5AV8DAAAAAF0DwAD8+QFfAwAAAUrAAJt5AR/AAJt9wADN4gICYAPAAOVbXwMAAAIugMAAm57AbgDZAAbAANm7gnTAAJulwACbqsAAnEgAAJZiAAAAAQPAAJuvwACcSAAAAAEBAcAAm7UAAACBpmEDAWADwADlW2ADwAD60QAAYAPAAPrRAT4DTsAAm9PAAJvXAACXmGADwAD8lwEWwACb3i5hwAD9a0XAAJvqAcAAm/PAAJv1AABiYAPAAPyXAZMBHMAAm/yCwACb+sBuAZ1jAQABgcAAm/7AbgF5AMAA/cUBisAAnAXAbgGdHMAAnAOCwACcBcBuAZ1kAQABlADAAP29PgFJwACcECEcwACcFoDAAJwVwG4BVSABAAEcwACcGy5LAQABgsAAnBzAbgGdAMAA/UoAAErAAJwhASo/SsAAnDkBKQbAANm8gnTAAJxNwACcUsAAnO0AAIHWAAAAAQPAAJxVwACc7QAAAAEBAcAAnFsAAACBpmEDAWADwADlW2ADwAD60QAAYAPAAPrRAT4DTsAAnHnAAJx9AACXmGADwAD8lwEWwACchC5hwAD9a0XAAJyQAcAAnJnAAJybAABiYAPAAPyXAZMBHMAAnKKCwACcoMBuAqhjAQABgcAAnKTAbgKEAMAA/cUBisAAnKvAbgKoHMAAnKmCwACcq8BuAqhkAQABlADAAP29PgFJwACcthzAAJy7gMAAnLrAbgJgIAEAARzAAJzALksBAAGCwACcwcBuAqgAwAD9SgAASsAAnMYBKT9KwACc3QEqBsAA2b2CdMAAnPLAAJz6wACeGQAAlmYAAAABA8AAnQTAAJ4ZAAAAAgEBwACdCgAAAJcrYQMBYAPAAOVbYAPAAPrRAAHAAJ0qAAAglmdhAwBgA8AA5VsBagBgA8AA/aF5YAPAAOVbAT4ETsAAnT/AAJ1DAACXmGADwAD8lwEWwACdSi5hwAD9a0XAAJ1WAcAAnV/AAJ1hAABiYAPAAPyXAZMBHMAAnWiDwACdZsBuA85jAQABgsAAnWrAbgOqAMAA/cUBi8AAnXHAbgPOHMAAnW+DwACdccBuA85kAQABlADAAP29PgJOwACdgMAAnYgAAJZSYAPAAOVbARzAAJ2OLksBAAGDwACdj8BuA84AwAD9SknAAJ2ZHMAAnaGAwACdncBuA2ogAQABhMAAnaLAbgQnAABKwACdrAGEwACds8BuBCc/ScAAncYhHMAAndGBwACdysBuA4RIAQABKwDAAP3xSsAAndoBHMAAneeBwACd4cBuA4QgAAAAAAA/PTDAAJ3vHsAAngrAAM65AAAAAAbAANm+gnTAAJ4ewACeJsAAn1sAAJZrAAAAAQPAAJ4vwACfWwAAAAIBAcAAnjUAAACXK2EDAWADwADlW2ADwAD60QABwACeVQAAIJZnYQMAYAPAAOVbAWoAYAPAAP2heWADwADlWwE+BE7AAJ5qwACebgAAl5hgA8AA/JcBFsAAnnUuYcAA/WtFwACegQHAAJ6KwACejAAAYmADwAD8lwEcwACekoLAAJ6OwG4FOoGNAQABlADAAP2+ARzAAJ6Zg8AAnpfAbgVegW0BAAGTAMAA/cgBi8AAnqHAbgVeHMAAnp+DwACeocBuBV6BjQEAAZQAwAD9vj4CTsAAnrDAAJ64AACWUmADwADlWwEcwACevi5LAQABg8AAnr/AbgVeAMAA/UpJwACeyRzAAJ7RgMAAns3AbgT6IAEAAYTAAJ7SwG4FyQAAPgFKwACe5gGEwACe7cBuBck/ScAAnwghHMAAnxOBwACfDMBuBRRIAQABKwDAAP3xSsAAnxwBHMAAnymBwACfI8BuBRQgAAAAAAA/PTDAAJ8xHsAAn0zAAM65AAAAAAbAANm/gnTAAJ9gwACfaMAAoW4AAJZuAAAAAQPAAJ9zwAChbgAAAAIBAcAAn3kAAACXK2EDAWADwADlW2ADwAD60QABwACfmQAAIJZnYQMAYAPAAOVbAWoAYAPAAP2heWADwADlWwE+B07AAJ+uwACftQAAgXZbAStOwACfxsAAn9QAAMAAcj1gA8AA+tEBKk7AAJ/lwACf6QAAl5hgA8AA/JcBFsAAn/AuYcAA/WtFwACf/AHAAKAFwACgBwAAYmADwAD8lwGTARzAAKAOhcAAoAzAbgcpYwEAAYTAAKAQwG4HBQDAAP3FAY3AAKAXwG4HKRzAAKAVhcAAoBfAbgcpZAEAAZQAwAD9vT4CTsAAoCbAAKAuAACWUmADwADlWwEcwACgNC5LAQABhcAAoDXAbgcpAMAA/UpJwACgPxzAAKBHgMAAoEPAbgaeIAEAAYbAAKBIwG4HggAAPgNJwACgXIPAAKBgwG4G7j4BPTDAAKB7HsAAoJbAAM66AAAAAD89isAAoLPAbgbehsAAoLzAbgeCPYvAAKDNwG4G7ik/ScAAoPWDwACg+cBuBu5KwAChCAEmwAChCAGCwAChD8BuBt5gA8AA5Vs/ScAAoRshHMAAoSaBwAChH8BuBrhIAQABKwDAAP3xSsAAoS8BHMAAoTyBwAChNsBuBrggAAAAAAA/PTDAAKFEHsAAoV/AAM65AAAAAAbAANnAgnTAAKFzwAChe8AAoawAAJZlAAAAAQPAAKGEwAChrAAAAAEBAcAAoYkAAAAnYAPAAPyXAABgA8AA5VsBPgFKwAChlgEcwAChoS5LAQABgMAAoaLAbgi0AMAA/UoGwADZwYJ0wAChscAAobbAAKISAABWAAAAAQPAAKG5wACiEgAAAAEBAcAAocIAACCAlmADwADlWwAAXAE+AT0wwAChzx/AAKHZwAD8KQEAASfAAHbXAAbAANnCgnTAAKIXwACiHMAAooUAAIClAAAAAQPAAKIiwACihQAAAAEBAcAAojUAACCAll0DwAD8+QFgA8AA5VsAAFwBPgE9MMAAokIfwACiTMAA/CkBAAEnwAB21wAGwADZw4J0wACiisAAoo/AAKL+AACfDgAAAAEDwACilcAAov4AAAACAgLAAKKaAAAAJ2ADwAD8lwDAAKKpAAAggJZgA8AA5VsAAFwBPgE9MMAAorYfwACiwMAA/CkBAAEnwAB5egAGwADZxIJ0wACjA8AAowjAAKOFAACgFAAAAAEDwACjEcAAo4UAAAACAgLAAKMWAAAAJ2ADwAD8lwDAAKMvAAAgKV0DwAD8+QFgA8AA5VsAAFwBPgE9MMAAoz0fwACjR8AA/CkBAAEnwAB5egAGwADZxYJ0wACjisAAo4/AAKQsAACArgAAAAEDwACjk8AApCwAAAABAAHAAKOZAAAAm1NhAwJgA8AA5VtgA8AA5VtgA8AA/JcBagBgA8AA/aF5AFwBPgJJwACjvxzAAKPLgMAAo8PAbgqbSAEAASsAwAD98T4BPTDAAKPcJ8AAeYQ/PR7AAKQVwADPTwIBYAPAAOVbAi6AwACkIMBuCpsABsAA2caCdMAApDHAAKQ1wAClNAAAgLsAAAABA8AApDzAAKU0AAAAAgECwACkRQAAIJZSYAPAAOVbAMAApFMAAABqYAPAAPyXAWrAAKRbYAPAAPyXCQBgA8AA/JcBPgNJwACkZRzAAKRvgcAApGnAbgtLgW0BAAEWwACkdy5hwAD9awDAAP3IPgFKwACkhwEcwACkjpSBxgAAAADAAPy6ScAApJ0cwACkp4HAAKShwG4LS2MBAAGTAMAA/cU+AT2JwACktMBuC0uTP0XAAKTJAcAApNLAAKTUAABiYAPAAPyXAYHAAKTWwG4LSwEcwACk34LAAKTdwG4L4WMBAAEWwACk5i5hwAD9awDAAP3FAYrAAKTuwG4L4RzAAKTvgsAApO7AbgvhZAEAAZQAwAD9vT4BScAApPscwAClBxzAAKUDLksBAAGCwAClBMBuC+EAwAD9SkgBAAGAwAClCsBuCzsAwAD98UrAAKUTAYLAAKUawG4L4T9KwAClJwEcwAClLpSBxgAAAADAAPy6BsAA2ceCdMAApTnAAKU9wACmWQAAlowAAAABA8AApUjAAKZZAAAAAgECwAClUQAAIJZSYAPAAOVbAMAApV8AAABqYAPAAPyXAWrAAKVnYAPAAP2heQBgA8AA/JcBPgNJwACldCIcwAClfoHAAKV4wG4M10gBAAErAMAA/bsBHMAApY+BwAClicBuDNeBbQEAARbAAKWXLmHAAP1rAMAA/cg+AT2JwAClp8BuDNccwACluxbAAKW0LmHAAP1rgY0BAAGUAMAA/b5JwAClyxzAAKXVgcAApc/AbgzXYwEAAZMAwAD9xT4BSsAApeIBHMAApemUgcYAAAAAwAD8uj9FwACl9wHAAKYAwACmAgAAYmADwAD8lwGBwACmBMBuDNcBHMAApg2CwACmC8BuDaGBbQEAAZMAwAD9yAGKwACmE8BuDaEcwACmFILAAKYTwG4NoYGNAQABlADAAP2+PgFJwACmIBzAAKYsHMAApiguSwEAAYLAAKYpwG4NoQDAAP1KSAEAAYDAAKYvwG4MxwDAAP3xSsAApjgBgsAApj/Abg2hP0rAAKZMARzAAKZTlIHGAAAAAMAA/LoGwADZyIJ0wACmXsAApmbAAKbBAACGJgAAAAEDwACmcMAApsEAAAAAAAAAYAPAAOVbAT4BPTDAAKZ5H8AApoPAAPwpAQABJ8AAdtgABsAA2cmCdMAApsbAAKbOwACnMAAAoBMAAAABA8AAptbAAKcwAAAAAQEBwACm2wAAACdgA8AA/JcAAGADwADlWwE+AT0wwACm6B/AAKbywAD8KQEAASfAAHbYAAbAANnKgnTAAKc1wACnOsAAp7AAAJcqAAAAAQPAAKdFwACnsAAAAAEBAcAAp0sAAACXK2EDAWADwADlW2ADwAD60QAAXAE+AT0wwACnaB/AAKdywAD8KQEAASfAAHbYAAbAANnLgnTAAKe1wACnusAAqDAAAJctAAAAAQPAAKfFwACoMAAAAAEBAcAAp8sAAACXK2EDAWADwADlW2ADwAD60QAAXAE+AT0wwACn6B/AAKfywAD8KQEAASfAAHbYAAbAANnXgnTAAKg1wACoQcAAqJsBAIMeAAAAAQPAAKhHwAComwAAAAAAAABgA8AA5VsBPgJJwACoTRzAAKhYFsAAqFEuYcAA/WuAlwEAAZMAwAD9x0rAAKhdARzAAKhoLksBAAGTAMAA/Uo/PTDAAKhxHsAAqIzAAM65AAAAAAbAANnYgnTAAKigwACorMAAqQ4BAIHqAAAAAQPAAKixwACpDgAAAAAAAABgA8AA5VsBPgJJwACotxzAAKjCFsAAqLsuYcAA/WuAlwEAAZMAwAD9x0rAAKjHARzAAKjSLksBAAEcwACo2hbAAKjTLmHAAP1rgY0BAAGUAMAA/b4AwAD9Sj89MMAAqOQewACo/8AAzrkAAAAABsAA2dmCdMAAqRPAAKkfwACptgEAgMMAAAABA8AAqSbAAKm2AAAAAAAAAGADwADlWwE+A0nAAKksHMAAqTcWwACpMC5hwAD9a0gBAAGUAMAA/btKwACpPQEcwACpSC5LAQABkwDAAP1KP0nAAKlRHMAAqVwWwACpVS5hwAD9a0gBAAGTAMAA/bs9MMAAqWIewACpfcAAzrkAAAAAPz0wwACpjh7AAKmpwADOugAAAAAGwADZzIJ0wACpu8AAqcfAAKq0AACBWAAAAAEDwACpzsAAqrQAAAACAQLAAKnTAAAAamADwAD8lwDAAKnfAAAAgpBgA8AA/JcBagBgA8AA/aF5AGADwADkHwE+BT2JwACp68BuEbsewACp/MAA+9gDAAOAwACqDMBuEayBwACqE8BuEbsWwACqHS5hwAD9awBOwACqLsAAqjUAAGFgA8AA/JcBHMAAqjuBwACqN8BuEbuBjQEAAYDAAKo9wG4RrADAAP2+TsAAqlTAAKpbAACBdmADwADkHwEcwACqXS7AAHl9wADUPQEAAYLAAKppwG4SEwDAANUrPRzAAKp9g8AAqnbAbhJHg2QEAASTgsAAqonAbhITLoDAAKqXwG4RrADAAP1gSsAAqqMBg8AAqqrAbhJHBsAA2c2CdMAAqrnAAKq+wACrPQAAoBYAAAABA8AAqsTAAKs9AAAAAgICwACqyQAAACdgA8AA/JcAwACq4gAAIIPRXQPAAPz5AWADwADlWwAAXAE+Ak7AAKr4wACq/AABgpBgA8AA/JcBHMAAqw4WwACrB4HAAKr+wG4S7mHAAP0cZAEAAYDAAKsQwG4S3wDAAP29PRzAAKsbLoNkAwADgMAAqyTAbhLfgsAAqyvAbhMLgcAAqzDAbhLuAMAA1TQGwADZzoJ0wACrQsAAq0fAAKwAAACb4wAAAAEDwACrUMAArAAAAAADAgPAAKtVAAAAamADwAD8lwDAAKtgAAAAgpBgA8AA/JcAwACrbgAAIMAAQ7NgA8AA5VsBagBgA8AA/aF5AFwBPgI9HsAAq4vAAPvYAwADgMAAq5vAbhOegcAAq6LAbhOtFsAAq6wuYcAA/WsARcAAq7kBwACrwsAAq8QAAGJgA8AA/JcBgMAAq8bAbhOeARzAAKvPg8AAq83AbhQOYwEAAYHAAKvRwG4TrQDAAP3FAYvAAKvYwG4UDhzAAKvWg8AAq9jAbhQOZAEAAZQAwAD9vT4BPRzAAKvnLoC/AgACg8AAq+jAbhQOgsAAq+3AbhO9AMAA/UsAAG3lcQBt5eQAbeYYAG3mSgBt5nwAbebDAG3nHgBt55EAbefyAG3ogQBt6SoAbep6AG3r/gBt7UwAbe5QAG3v5wBt984AbfhDAG34sABt+SUAbfmSAG36BwBt+loAbfqzAG37bQBt+78Abfw7AG38kABt/X0Abf7wAG4AIgBuAKMAbgErAG4CNgBuA0AAbgTQAG4GdABuCIoAbgjrAG4JQQBuCZ8AbgoFAG4KcQBuCxEAbgydAG4OVQBuDqEAbg78AG4PXABuD7wAbhA6AG4Q0gBuEYIAbhK1AG4TdABuFJEAAAA3AsAA2d2CdMABP1TAAT90wAFDigPAAHoFAWrAAT9VYAPAAPqYwAF/lgABYAHAANmfAAFgAcAA5B8AAAgGwADZ4IJ0wAE/zsABP9bAAUASBAHAAHdcwADUPQAAAAEDwAE/8sABQBIAAAAAAAAAYAPAANndAT4BPTDAAT/7J8AAYfQGwADZ4oJ0wAFAF8ABQFTAAUDyAwBLAWrAAUAYYAPAAPqYwAGbCgAAAQPAAUBWwAFA8gAAAAEBAcABQFsAAAAnYAPAAPyXAABgA8AA5VsBPgJJwAFAaCIcwAFAcoDAAUBswG4WLmMBAAGTAMAA/cUBHMABQH+AwAFAecBuFi6BbQEAARbAAUCCLmHAANW8AMAA/cg+AT0wwAFAkh/AAUCcwAD77QMAA4DAAUCtwG4WLi4nJwA/SsABQM4BHMABQNUuwAB6BsAA1D0BAAGAwAFA6MBuFi4AwADZ5gbAANnjgnTAAUD3wAFBBcABQbMDAIC/AAAAAQPAAUEIwAFBswAAAAICAsABQQ0AAAAnYAPAAPyXAMABQRwAACCAlmADwADlWwAAXAE+AknAAUEpIhzAAUEzgMABQS3Abhb6YwEAAZMAwAD9xQEcwAFBQIDAAUE6wG4W+oFtAQABFsABQUMuYcAA1bwAwAD9yD4BPTDAAUFTH8ABQV3AAPvtAwADgMABQW7Abhb6LicnAD89HMABQY8uwAB6B8AA1D0CAAKAwAFBosBuFvqBwAFBqcBuFwkAwADZ5wbAANnqgnTAAUHtwAFB9cABQjQBAMAAb0IAAAABA8ABQgjAAUI0AAAAAAAAAGADwAD8lwE+AUrAAUIOAWrAAUIhYAPAAPyXg3AGwADZ5YJ0wAFCWMABQmTAAUKkAADAAHl9wADUPQAAAAEDwAFCb8ABQqQAAAABAQHAAUJ0AAAAYWADwAD8lwAAYAPAAOQfAT4BSsABQoIBHsABQo3AAOQjAQABgMABQpnAbhgkAAbAANnmgnTAAUKpwAFCscABQxAAAMAAegbAANQ9AAAAAQPAAULDwAFDEAAAAAEBAcABQsgAAAAnYAPAAPyXAABgA8AA5VsBPgFKwAFC1QEcwAFC3C7AAHnEwADUPQEAARzAAULugMABQujAbhiJg40BAAFqwAFC/GADwAD8l4NwAMAA/b8AwADV1QbAANnngnTAAUMVwAFDGsABQ4gAAMAAegfAANQ9AAAAAQPAAUMswAFDiAAAAAICAsABQzEAAAAnYAPAAPyXAMABQ0AAAACAlmADwADlWwAAXAE+AT0cwAFDTS7AAHnGwADUPQIAAhzAAUNfgMABQ1nAbhkTg40BAAFqwAFDbWADwAD8l4NwAMAA/b+BwAFDfsBuGSIAwADV1gbAANnognTAAT90wAE/dAAAEKAMAMAA1GDAANRgAQMAAAAAAAMDAwAAAABqYAPAAPyXAAAAAACCkGADwAD8lwAAAAAgg9FdA8AA/PkBWwAAXAFKAAEdAKAMAwADgADAbhmjgQDAbhmvggDAbhm8AMAA1GAAAG4VsQBuFfYAbhbQAG4XqwBuF/QAbhhZAG4Y4wBuGXwAbhnvAAAACALAANnrgnTAAUTcwAFE/MABSTo3wAB6CAAAAWABwADVtgABYAHAANVcAAEFwADaHAAAAAAEAAADAAAAAAAAAAAAYAPAANnrAT8BCQAAwADV2wAAAAA3BsAA2e2CdMABRPzAAUT8AAAQoAwAwADUYMAA1GABAwAAAAAAAwMDAAAAAGpgA8AA/JcAAAAAAIKQYAPAAPyXAAAAACCD0V0DwAD8+QFbAABcAUoAAR0AoAwDAAOAAMBuGpWBAMBuGqGCAMBuGq4AwADUYAbAANoegnTAAKxHwACsT8AArGEBAsAAb0IAAAABA8AArGHAAKxhAAAAAAAAAGADwAD8lwAGwADaH4J0wACsZcAArG3AAKx6AQKp9wAAAAEDwACsesAArHoAAAAAAAAAYAPAAPyXAAbAANoggnTAAKx+wACsjsAArJQBAoKPAAAAAQPAAKyUwACslAAAAAAAAABgA8AA1ZkABsAA2e+CdMAArJnAAKynwACsvgACwAB5fcAA1D0AAAABA8AArLLAAKy+AAAAAQEBwACstwAAAGFgA8AA/JcAAGADwADkKQAGwADZ8IJ0wACsw8AArM/AAKz/AACWcgAAAAEDwACs28AArP8AAAEAAIJ6YAPAAP3kAVsAAAAAXQPAAPz5AV8DAAABSsAArOEBH8AArOXAAM6sAQFfAwAAAS4ABsAA2fGCdMAArQTAAK0YwACthAAAlmkAAAABA8AArSLAAK2EAAAAAQEBwACtNwAAIIPbXQPAAPz5AWADwADmfAAAXQPAAPz5AWADwADmfAFKwACtRwEewACtS8AAzoQCAWADwADmfAIugMAArX7AbhxFAAbAANnygnTAAK2JwACtkcAArb8AAJZkAAAAAQPAAK2YwACtvwAAAQAAlyVgA8AA/eQBWwAAAABdA8AA/TsBXwMAAAFKwACtngEewACto8AA/UYBAmADwADmfF8DAAABLgAGwADaJ4J0wACtw8AArczAAK47AgCDHgAAAAEDwACt0cAArjsAAAABAQHAAK3cAAAggJZgA8AA5nwAAFwBPgJJwACt6RzAAK35FsAArfIuYcAA/WtIAQABkwDAAP27PTDAAK3/H8AArgnAAPvtAgACky4APz0cwACuLC6AvwIAApOAwACuMsBuHRkAwAD9SwbAANoognTAAK5AwACuScAArsUCAIHqAAAAAQPAAK5NwACuxQAAAAEBAcAArlgAACCAlmADwADmfAAAXAE+AknAAK5lHMAArnUWwACubi5hwAD9a0gBAAGTAMAA/bs9MMAArnsfwACuhcAA++0CAAKTLgA/PRzAAK6oLoC/AgACHMAArrUWwACuri5hwAD9a4GNAQABlADAAP2+gMAArrzAbh2oAMAA/UsGwADZ84J0wACuysAArs7AAK+NAACgEQAAAAEDwACu2MAAr40AAAACAQLAAK7eAAAAlythAwFgA8AA5nxgA8AA+tEAwACu/AAAAGpgA8AA/JcBasAArwRgA8AA/JcJAGADwAD8lwE+A0nAAK8OHMAArxiBwACvEsBuHmpjAQABkwDAAP3FPYnAAK8dwG4eapM/RcAArywBwACvNcAArzcAAGJgA8AA/JcBgcAArznAbh5qARzAAK9CgsAAr0DAbh6+YwEAARbAAK9ELmHAAP1rAMAA/cUBisAAr0zAbh6+HMAAr02CwACvTMBuHr5kAQABlADAAP29PgFJwACvWRzAAK9hgMAAr13Abh5RIAEAARzAAK9mLksBAAGCwACvZ8BuHr4AwAD9SgAASsAAr2wBgsAAr3PAbh6+P0rAAK+AARzAAK+HlIHGAAAAAMAA/LoGwADZ9IJ0wACvksAAr5bAALB7AACgEgAAAAEDwACvpMAAsHsAAAACAQLAAK+qAAAAlythAwFgA8AA5nxgA8AA+tEAwACvyAAAAGpgA8AA/JcBagBg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SQEcwABEWS5LAQABg8AARFrAcsAmAMAA/UpJwABEZBzAAERsgMAARGjAcr/CIAEAAYTAAERtwHLAfwAASsAARHcBhMAARH7AcsB/P0nAAESRIRzAAEScgcAARJXAcr/cSAEAASsAwAD98UrAAESlARzAAESygcAARKzAcr/cIAAAAAAAPz0wwABEuh7AAETVwADOuQAAAAAGwADh4oJ0wABE6cAARPDAAEYjAACWawAAAAEDwABE+cAARiMAAAACAQHAAET/AAAAlythAwFgA8AA+0lgA8AA+tEAAcAARR0AACCWZ2EDAGADwAD7SQFqAGADwAD9oXlgA8AA+0kBPgROwABFMsAARTYAAJeYYAPAAPyXARbAAEU9LmHAAP1rRcAARUkBwABFUsAARVQAAGJgA8AA/JcBHMAARVqCwABFVsBywZKBjQEAAZQAwAD9vgEcwABFYYPAAEVfwHLBtoFtAQABkwDAAP3IAYvAAEVpwHLBthzAAEVng8AARWnAcsG2gY0BAAGUAMAA/b4+Ak7AAEV4wABFgAAAllJgA8AA+0kBHMAARYYuSwEAAYPAAEWHwHLBtgDAAP1KScAARZEcwABFmYDAAEWVwHLBUiABAAGEwABFmsBywiEAAD4BSsAARa4BhMAARbXAcsIhP0nAAEXQIRzAAEXbgcAARdTAcsFsSAEAASsAwAD98UrAAEXkARzAAEXxgcAARevAcsFsIAAAAAAAPz0wwABF+R7AAEYUwADOuQAAAAAGwADh44J0wABGKMAARi/AAEgzAACWbgAAAAEDwABGOsAASDMAAAACAQHAAEZAAAAAlythAwFgA8AA+0lgA8AA+tEAAcAARl4AACCWZ2EDAGADwAD7SQFqAGADwAD9oXlgA8AA+0kBPgdOwABGc8AARnoAAIF2WwErTsAARovAAEaZAADAAHI9YAPAAPrRASpOwABGqsAARq4AAJeYYAPAAPyXARbAAEa1LmHAAP1rRcAARsEBwABGysAARswAAGJgA8AA/JcBkwEcwABG04XAAEbRwHLDgWMBAAGEwABG1cByw10AwAD9xQGNwABG3MByw4EcwABG2oXAAEbcwHLDgWQBAAGUAMAA/b0+Ak7AAEbrwABG8wAAllJgA8AA+0kBHMAARvkuSwEAAYXAAEb6wHLDgQDAAP1KScAARwQcwABHDIDAAEcI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rsAAT+8AAsAAetcAAAABA8AAT7bAAE/vAAAAAwIDwABPuwAAAJiKYAPAAPyXAMAAT8sAAACAlmADwAD8lwDAAE/aAAAAwABuUGADwADjjAFqwABP6mADwADjjMABf2IAXAAGwADjo4JzwABRacAAUW3AAFGkAALAAEUmAAAAAQPAAFF2wABRpAAAAAIBAsAAUXsAAACYimADwAD8lwDAAFGPAAAAwABuUGADwADjjAFqwABRn2ADwADjjMABf2IAYAPAAPyXAAbAAOOkgnPAAFNFwABTSsAAU4wAAsAARYIAAAABA8AAU1PAAFOMAAAAAwIDwABTWAAAAJiKYAPAAPyXAMAAU2gAAACAlmADwAD8lwDAAFN3AAAAwABuUGADwADjjAFqwABTh2ADwADjjMABf2IAXAAGwADjpYJzwABVI8AAVSfAAFVdAALAAHrYAAAAAQPAAFUvwABVXQAAAAIBAsAAVTQAAACYimADwAD8lwDAAFVIAAAAwABuUGADwADjjAFqwABVWGADwADjjMABf2IAYAPAAPyXAAbAAOOmgnPAAFcXwABXHMAAV10AAsAAetkAAAABA8AAVyTAAFddAAAAAwIDwABXKQAAAJiKYAPAAPyXAMAAVzkAAACAlmADwAD8lwDAAFdIAAAAwABuUGADwADjjAFqwABXWGADwADjjMABf2IAXAAGwADjp4JzwABY2MAAWNzAAFkTAALAAG7tAAAAAQPAAFjlwABZEwAAAAIBAsAAWOoAAACYimADwAD8lwDAAFj+AAAAwABuUGADwADjjAFqwABZDmADwADjjMABf2IAYAPAAPyXAAbAAOOognPAAFq2wABau8AAWv0AAsAAbuoAAAABA8AAWsTAAFr9AAAAAwIDwABayQAAAJiKYAPAAPyXAMAAWtkAAACAlmADwAD8lwDAAFroAAAAwABuUGADwADjjAFqwABa+GADwADjjMABf2IAXAAGwADjqYJzwABclcAAXJnAAFzPAALAAHraAAAAAQPAAFyhwABczwAAAAIBAsAAXKYAAACYimADwAD8lwDAAFy6AAAAwABuUGADwADjjAFqwABcymADwADjjMABf2IAYAPAAPyXAAbAAOOqgnPAAF6LwABekMAAXtEAAsAAetsAAAABA8AAXpjAAF7RAAAAAwIDwABenQAAAJiKYAPAAPyXAMAAXq0AAACAlmADwAD8lwDAAF68AAAAwABuUGADwADjjAFqwABezGADwADjjMABf2IAXAAGwADjq4JzwABgTcAAYFHAAGCIAALAAHrcAAAAAQPAAGBawABgiAAAAAIBAsAAYF8AAACYimADwAD8lwDAAGBzAAAAwABuUGADwADjjAFqwABgg2ADwADjjMABf2IAYAPAAPyXAAbAAOOsgnPAAGItwABiMsAAYnQAAsAAet0AAAABA8AAYjvAAGJ0AAAAAwIDwABiQAAAAJiKYAPAAPyXAMAAYlAAAACAlmADwAD8lwDAAGJfAAAAwABuUGADwADjjAFqwABib2ADwADjjMABf2IAXAAGwADjrYJzwABjx8AAY87AAGQGAALAAHreAAAAAQPAAGPYwABkBgAAAAIBAsAAY90AAACYimADwAD8lwDAAGPxAAAAwABuUGADwADjjAFqwABkAWADwADjjMABf2IAYAPAAPtJAAbAAOOugnPAAGeXwABnnMAAZ+IAAsAAet8AAAABA8AAZ6bAAGfiAAAAAwIDwABnqwAAAJiKYAPAAPyXAMAAZ74AAACAlmADwAD7SQDAAGfNAAAAwABuUGADwADjjAFqwABn3WADwADjjMABf2IAXAAGwADjr4JzwABpNsAAaT3AAGl1AALAAEWDAAAAAQPAAGlHwABpdQAAAAIBAsAAaUwAAACYimADwAD8lwDAAGlgAAAAwABuUGADwADjjAFqwABpcGADwADjjMABf2IAYAPAAPtJAAbAAOOwgnPAAGrKwABqz8AAaxUAAsAARSUAAAABA8AAatnAAGsVAAAAAwIDwABq3gAAAJiKYAPAAPyXAMAAavEAAACAlmADwAD7SQDAAGsAAAAAwABuUGADwADjjAFqwABrEGADwADjjMABf2IAXAAAAHPgkgBz4UoAc+IXAHPiwwBz4wcAc+NWAHPjmgBz4+kAc+ROAHPkvgBz5SMAc+WTAHPl+ABz5mgAc+bNAHPnPQBz56IAc+gSAHPodwBz6OcAc+lMAHPpvABz6iEAc+qRAAAAFwLAAOOxgnPAAGyIwABsl8AAdQMHwAB66wFqwABsl2ADwADLv8ABf7YAAWABwAD95AACXQHAAP07AWADwAD8l2ABwADjggEEwADjs4JzwAB07sAAdQEGwAB67ABgA8AA/JcBasAAdQBgA8AA/JcV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0lsAA8AASG3AAEmiBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4FTcAASKkCNQAAAAAAWwEewABIqcAAuH4EAAQcwABIry7AAH30wADpCgEAAYHAAEjBwHXoigDAAOmJhQDAdejxhgDAdej6FADAdekjCgAAK07AAEiewABIpwABg1dbARQAwHXpOgsAScAASM8cwABI3BTAAEjTwHXpqw4ASAEAASsAwAD98T4DQBzAAElBFsAASTyBwABJNMB16IqClMAA6g9IAQABasAASVBgA8AA6f3AAalIAMAA/fHAAEk0wABJXAA9i8AASWXAdejTK0IAAD89i8AASXzAdejTHsAASYfAAOpJAQABFMAASZXAdemrDgAAQgAAPR4AwAC4gQIAAoIAwHXoq4MAwHXo0wBKwABJogADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACCAMB16KuB3QIAAhQAwHXqcw4AFADAdep8DwAAwAC5kT2MAMB16OgeAMAAuIIBAAEUAMB16SMKAAA9jQDAdejxHgDAALh8AQABFADAdekjCgAAPY4AwHXo+h4AwAC4fQEAARQAwHXpIwoAAD0cwABIbYIAwHXoq2oBAAEUAMB16SMKAAAASgABFgCCAMB16KuB3sAAuY0GwADpiYJ5wABJp8AASa7AAE23AADAAH30wADpCgAAAAEDwABJv8AATbcAAgABAQHAAEnIAAAAImADwADqCgAAXQPAALloAVsBPg9OAAAAAYHKXQPAALiuAVsBH8AASdfAALi7AAFbAABOAAAAAIHLXQPAALlkAVsATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE4AAAAAiE5bAE/AAEmuAAAAAIHSWwADwABJv8AATbcEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgFLPgtJwABJ6RbAAEn1gMAASe3AdetPwAB99cAA6hY+A03AAEoRAjUAAAAAAFsBHsAAShHAALh+BAAEFsAASh+AwABKF8B160+DV8AA6heEAMB166KFAMB166sUAMB1690KAAArPYrAAEoKwHXriRQAwHXr9AsAQgAAP0nAAEo3HMAASkoWwABKQ4DAAEo7wHXrT5ZzwADqEUgBAAEnwAB99gDAAP6NPgNNwABKbgI1AAAAAABbAR7AAEpuwAC4fgQABBzAAEp0LsAAfeLAAOkKAQABgMAASoLAdetPAMAA6YCEAMB166KFAMB166sUAMB1690KAAArPYrAAEpnwHXriRQAwHXr9AsAQgAAP0nAAEqaHMAASq0WwABKpoDAAEqewHXrT5ZzwADqEUgBAAEnwAB99wDAAP6NPgNNwABK0QI1AAAAAABbAR7AAErRwAC4fgQABBzAAErXLsAAfeXAAOkKAQABgMAASuXAdetPAMAA6YGEAMB166KFAMB166sUAMB1690KAAArPYrAAErKwHXriRQAwHXr9AsAQgAAP0nAAEr9HMAASxAWwABLCYDAAEsBwHXrT5ZzwADqEUgBAAEnwAB9+ADAAP6NPgNNwABLNwI1AAAAAABbAR7AAEs3wAC4fgQABBzAAEs9LsAAfenAAOkKAQABgMAAS07AdetPAMAA6YWEAMB166KFAMB166sUAMB1690KAAArPYrAAEswwHXriRQAwHXr9AsAQgAAP0nAAEtmHMAAS3kWwABLcoDAAEtqwHXrT5ZzwADqEUgBAAEnwAB3tADAAP6NPgNNwABLmgI1AAAAAABbAR7AAEuawAC4fgQABBzAAEugLsAAd7TAAOkKAQABgMAAS6rAdetPAMAA6YiEAMB166KFAMB166sUAMB1690KAAArPYrAAEuTwHXriRQAwHXr9AsAQgAAP0nAAEvCHMAAS8wWwABLxi7AAHzkwADpcsAAffkBAAGAwABL4MB1608AwADpvz4DTcAAS/sCNQAAAAAAWwEewABL+8AAuH4EAAQcwABMBxbAAEwBLsAAfOTAAOlywAB9+gEAAYDAAEwVwHXrTwDAAOnAhADAdeuihQDAdeurFADAdevdCgAAKz2KwABL9MB164kUAMB16/QLAEIAAD9JwABMLR7AAEwxwADpggEAARbAAExHgMAATD/AdetPlnPAAOoRAD4DTcAATGECNQAAAAAAWwEewABMYcAAuH4EAAQcwABMZy7AAH3twADpCgEAAYDAAEx2wHXrTwDAAOmHhADAdeuihQDAdeurFADAdevdCgAAKz2KwABMWsB164kUAMB16/QLAEIAAD9JwABMjiEcwABMrhzAAEygFsAATJqAwABMksB160+D9MAA6hJLAQABJ8AAfGUAwAD9gUgBAAErAMAA/fE+A03AAEzIAjUAAAAAAFsBHsAATMjAALh+BAAEHMAATN4WwABMzi7AAH3CwADpb8AAfdwCAAIugMAATPHAdetPAMAA6eqEAMB166KFAMB166sUAMB1690KAAArPYrAAEzBwHXriRQAwHXr9AsAQgAAP03AAE0QAjUAAAAAAFsBHsAATRDAALh+BAAEHMAATR6AwABNFsB160/AAH37AAAAAMAA6iSEAMB166KFAMB166sUAMB1690KAAArPYrAAE0JwHXriRQAwHXr9AsAQgAAAQHAAE0wWwHAAE03AAABg1NbAAHAAE06AAABpDRgA8AA/lIAPgM9HMAATU6AwABNRsB160/AAH38AgACasAATV9gA8AA/JfAAas/JMAATY0EJ8AAff0UwABNhsB18RkOACeArxTAAE2KwHXxJQ8AAMAA6iY9isAATZbAdeuJFsAATaWAwABNncB160+DV8AA6hdCAAA9HgDAALiBAgACgQDAdetrggDAdeuJAErAAE23AAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIEAwHXra4HdAgACFADAdfHIDgAUAMB18dEPAADAALmRPYsAwHXrmR4AwAC4ggEAARQAwHXr3QoAAD2MAMB166IeAMAAuHwBAAEUAMB1690KAAA9jQDAdeurHgDAALh9AQABFADAdevdCgAAPRzAAEm/gQDAdetragEAARQAwHXr3QoAAABKAAEWAIEAwHXra4HewAC5jQbAAOmMgnnAAE28wABNwcAATq8AAMAAff4AAAABA8AATc7AAE6vAAAAAQEBwABNzwAAACJgA8AA6goAAFwBPgJOwABN5MAATesAAYNUYAPAAOmdARbAAE31gMAATe3AdfKgg1TAAOoOScAATgEcwABOGxbAAE4MgcAATgXAdfK1wAB91MAA6aOHWAEAARbAAE4vgMAATifAdfKgwAB98MAA6hAAwAD9gD4CPRzAAE5sHMAATlYWwABOR4HAAE5AwHXytcAAfdTAAOmjhF4BAAEWwABOZYDAAE5dwHXyoMAAffDAAOoQAMAA/YogAQABgMAATm3AdfKgAAA9HMAATo4WwABOfS7AAH3AwADpCsAA6WzAAH3/AQABJsAATp4BFsAATp6AwABOlsB18qDAAH3wwADqEGADwAD+fgDAAOqKPwAAdbYIAHW2owB1uOsAdbmzAHW7BgB1vnYAdcLUAHXF8QB1yf0AdcpqAHXLAQB1y74Adc/2AHXTDwB105QAddP0AHXUVAB12RoAddycAHXiAwB16E4AdesfAHXydAB187UAAAAXAsAA6ZKCe4D0gPqF2gPAAH4AAAABYAHAAP3kAAACBMAA6ZSCe4ERgRUJgL0AYAPAAP5+AATAAOmVgnuBKYEtCRIAYAPAAOO6AAEFwADpnIJ7gTKBMoFNAAAAA4E3gU0AAAACAgKBPQAABIC9YAPAAP5+AIFIAAAEEmADwADjugAAYAPAAOmSAT8DCAHAAOmUgADAdfR/CAHAAOmVgQDAdfSNCQGBMsAA/foAAAAAAwbAAOmXgnuBUoFdhBIBAMAAfOsAAAABA4FmhBIAAAAAAAAAYAPAAP5+AT4DToFwgX8AAMAAfgFgA8AA/JcBHIGGFoGBLoC9wADplJaMAQABJ4FqAMAA/pJOgaCBqgAAgpNgA8AA/n4BHIGxFoGsLoC9wADplIC+AQABHIHKgIG7wHX09mQBAAGUAMAA/b0AwAD+lEeB1IGB3MB19SIKAYH0aoH0YAPAAP5+wAFA4wA+AUqCBAEnwAB+AgGCMmqCMmADwAD+fsAAv3UAPgFKgkIBJ8AAfgMBgndqgndgA8AA/n7AAUDsAD4BSoKFASfAAH4EAYLAaoLAYAPAAP5+wAGrRQA+AUqCzwEnwAB+BgGC/GqC/GADwAD+fsABq0oAPgFKgwsBJ8AAfggBgypqgypgA8AA/n7AAatPAD4BSoM5ASfAAH4KAYNYaoNYYAPAAP5+wAGrVAA+AUqDZwEnwAB+DAGDh2qDh2ADwAD+fsABq1kAPgFKg5cBJ8AAfgwBg7dqg7dgA8AA/n7AAUD0AD4BSoPGASfAAH4OAAE+AUqD9QEnwAB9MwbAAOmZgnuEF4QxhasAAYNWAAAAAQOEOIWrAAAAAAAAAF0DwAD9bQJgA8AA/n5gA8AA6ZIBPgZOhEuEVAAAwAB+D2ADwADjugEehFbAAOlFAAAAAEmEbByEeYCEcMB19qhIAQABKwDAAP3xPgFKhIoBKz9OhKaEsAAAwAB+EF0DwAD9OwFbAR6EssAA6TsBAAGAhMDAdfaoAE6E4oTpAADAAH4RXQPAAP1tAmADwAD+fmADwADpkgEehO/AAMFTAAJgA8AA/n5gA8AA6ZIAAEWFDQGFFoUYAABiYAPAAPyXAZMBHIUfg4UdwHX3Q2MBAAEWhSuBhSHAdfbkYcAA/WsAwAD9xQGLhTPAdfdDHIU1g4UzwHX3Q2QBAAGVAMAA/b0+Ak6FR4VJAACB12ADwADpkgEfhU/AAOmcAgACJoVeARyFXoGFVcB19uRLAQABg4VfwHX3QwDAAP1KYAPAAP5+JoVsARyFbIGFY8B19uRLAQABHIVvg4VtwHX3Q2QBAAGUAMAA/b0AwAD9SmADwADjugA9HIWCgoV8wHX3CoC/AgACFoWFhIWDwHX3lIC9wADplISFjcB195QAwAD9gkqFmgGChaHAdfcKBsAA6ZqCe4WwhbeF2AAAIwAAAAEDhb+F2AAAAAAAAABgA8AA/n4BSoXFASSF2AQWhccugL3AAOmUJ4NPFoXOLsAAfOvAAOmXJ4MmAAB19MkAdfZwAHX4OgB1+IUAAAADAsAA6Z2CeoE+gU2H+gfAAH4SAAABYAHAAP3kAAAFBMAA6Z+CeoFogW8JwAB8pABgA8AA6WgABMAA6aCCeoF+gYgJwAB8uQBgA8AA+tEABMAA6aGCeoHsggcJwAB9yABdA8AA/i8BYAPAAP5+AR6B+sAAwaYAAWADwAD+fgAABMAA6aKCeoJ4gpwJwAB9yQBdA8AA/W0CYAPAAP5+YAPAAP5+AR6Ch8AA/XQAAmADwAD+fmADwAD+fgAABMAA6aOCeoNhg54JwAB91ABdA8AA/W0CYAPAAP5+XgMAAQEBYAPAAOoKAAFXA8AA6RgAXAEeg3zAAP10AAJgA8AA/n5eAwABAQFgA8AA6goAAVcDwADpGABcAAABBcAA6a2CeoOjg6OEEgAAAAODqYQSAAAAAgEBg68AAATAAHykYAPAAOloAAGDvgAAAMAAfLlgA8AA+tEBaoPKYAPAAPrRd2ADwADpnQE+AT0cg/4Wg/YuwAB8pMAA6Z/AAH3HwADpCgEAAS4AwADpdwMIAcAA6Z+AAMB1+cwIAMAA6aCBg+XAdfndCQGDo8AA/foAAAAABwbAAOmlgnqENIQ0hEAAAsAAfKYAAAABA4Q+hEAAAAAAAAAAWwAGwADppoJ6hI+ElITBAACCjAAAAAEDhJmEwQAAAAAAAABcAT4BPRyEqhaEoi7AAHykwADpn8AAfcrAAOkKAQABLgDAAOl4BsAA6aeCeoULhRCF7AAAwAB8qwAAAAEDhRmF7AAAAAEBAYUiAAAAImADwADqCgAAXAE+AT0chd4chb8WhbcuwAB8pMAA6Z/AAH3cAgACFoXMLsAAfKTAAOmfgIXVwHX61QDAAOmLga8BAVwBFoXjLsAAfLHAAOmqAMAAuXsGwADpqIJ6hfGF9oY6AADAAHyvAAAAAQOGAIY6AAAAAQEBhgkAAAAiYAPAAOoKAABcAT4BPRyGIBaGGC7AAHykwADpn8AAff4BAAGAhi7AdftSAMAA6YwGwADpqYJ6hoKGh4dxAADAAHytAAAAAQOGlYdxAAAAAQEBhp4AAAAiYAPAAOoKAABcAT4BPRyHTxaHRy7AAHykwADpn8AAfdwCAAIWh1wuwAB8pMAA6Z+Ah2XAdfupAMAA6YsGwADpqoJ6h7WHuofPAALAAHyxAAAAAQOHvofPAAAAAQEBh8gAAACBdmADwADqQwAAXAAGwADpq4J6h9SH3If4AACI4QAAAAEDh+KH+AAAAAAAAABbAT4BSofrATKH8ltbAAAAdfpIAHX6bQB1+rMAdfswAHX7hwB1++oAdfwdAHX8TAAAAAcCwADproJ8g1KDWIcLA8AAfhMAAAFgAcAA/eQAAAIEwADpsIJ8g5qDngmAvQBgA8AA/n4ABMAA6bGCfIOsg68JgKwAYAPAAP7/AAEFwADpt4J8g2iDaIOIAAAAA4Nzg4gAAAACAgKDeQAABIC9YAPAAP5+AIOEAAAEgKxgA8AA/v8AAGADwADprgE/AwgBwADpsIAAwHX81wgBwADpsYEAwHX85QkBg2jAAP36AAAAAAMGwADps4J8g7SDuITnAADAAH4UAAAAAQODw4TnAAAAAQEBg8sAAABOYAPAAP5+AABgA8AA/v8BPgVJg9ccg+CAg9vAdf1EgdgBAAEnUADAAP6QPgE9iIP5wHX9RByEBYCEAMB1/USAvgEAAZQAwAD+lD9JhB0WhCaAhCHAdf1EgVXAAP6EPgFKhDcBKz9OhFIAAADAAH16YAPAAP7/AEs+AT2JhGvAdf2wHoR5wAD/dQEAAYCEgsB1/UQAAAGEj2ADwAD8agGEqQAAAYNTYAPAAPxqAAA+AUqEtAErSoTMARyE0y5sAQABgYTbwHX9sADAAOm0BsAA6bSCfITshPCGkwAAbAAAAAEDhPeGkwAAAAEBAYT8AAAAwAB9emADwAD+/wAAYAPAAP7/AT4ESz4BPRyFZYCFXcB1/jWBvwAAAADAAP8lAAGFeWADwAD8IQGFlAAAAYNTYAPAAPwhAAA+AUqFnwErToW7hccAAIOcYAPAAP7/ARyFzRaFyS6ArMAA6bGDQgEAAYCF2MB1/jUAwAD/K0mF5iEchgIchfeBhevAdf6JIwAAAADAAP8ngdgBAAEchhEWhg0ugKzAAOmxIwAAAADAAP8nAMAA/pA+AUqGZgErP0qGfQGBhoTAdf6JBsAA6bWCfIaYhpyHCQAAluYAAAABA4ahhwkAAAAAAAAAXQPAAP1tAltbAT4BSoaqATKGsVtbAyeClCeCDCeAvRaG3S6AvcAA6bAngKwchvQWhvAugKzAAOmxIwAAAADAAP8nAAB1/SIAdf4WAHX/AwB1/2YAAAADAsAA6biCfIcOhxSvEQPAAH4VAAABYAHAAP3kAAACBMAA6buCfIdDh04YwAB+FsAA6QoAXQPAAP1tAmADwAD+fmADwADprgEyh0xgA8AA/n5gA8AA6a4ABMAA6byCfIddiBIJwAB+F8AA6QoAXQPAAP4vAVsBHodtwADBqAEBWwExh3ZbByfAAH4YJ8AAfhknwAB+GifAAH4bJ8AAfhwnwAB+HSfAAH4eAAEFwADpy4J8hx6HHoclAAAAA4cjhyUAAAAAAAAAYAPAAOm4AT8BCQGHHsAA/foAAAAACwbAAOm+gnyIF4gciTMAALQMAAAAAQOII4kzAAAAAAAAAFwBPgZOiDCIOgAAwAB9tl4DAAEBAWADwAD+/wABVwPAAOkQAF0DwAC5aAFbARqIU8AA6V9JiGIciHCAiGbAdgB9SAEAASsAwAD98T4BSoiBAD9OiJeIoQAAwAB+H10DwAD9OwFdA8AAuWgBWwExiKtdA8AAuWgBWwBGiLOI0Yi8AAAAlURgA8AA6a4AFojJFojCLsAAfhbAAOkKwADpuynAAP2QPgE9HIjjgYjZwHYAy1YBAAEciPCAiOfAdgB9IAEAARaI9IKI8cB2APaArMAA6bEAAADAAP1MPR6JDMAAuXUBAVsBgYkRwHYAywA9HIkoFokhLsAAfhbAAOkKwADpu4JGAAAAAMAA/YsGwADpv4J8iTiJPYmVAADAAH35AAAAAQOJUImVAAAAAQEBiVkAAAAiYAPAAOoKAABgA8AA+tEBPgFKiWgBHIl5FolvLsAAfhfAAOkKwADpvIMcAQABFomKgImCwHYBppZzwADqEQDAAP47BsAA6cCCfImaiamMUQAAwAB9+gAAAAEDibaMUQACAAEBAYm/AAAAImADwADqCgAAXQPAALloAWADwAD+fgE+DU4AAAABgcpdA8AAuK4BYAPAAP5+AR+JzsAAuLsAAWADwAD+fgAATgAAAACBy10DwAC5ZAFgA8AA/n4ATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE+JqQAAAACB0lsAA4m2jFEEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgFHidQWieSAidzAdgIQlnPAAOoRCAGJ+WqJ+WADwAD+fsABq14APgI9iooPwHYCVRyKFi7AAH4YwADpCgEAAYCKIcB2AhAAwADpw0IAAAGKNmqKNmADwAD+fsABq2MAPgI9iopOwHYCVRyKVS7AAH4ZwADpCgEAAYCKYsB2AhAAwADpxEIAAAGKd2qKd2ADwAD+fsABq2gAPgI9ioqPwHYCVRyKli7AAH4awADpCgEAAYCKo8B2AhAAwADpxUIAAAGKuGqKuGADwAD+fsABq20APgI9iorSwHYCVRyK2S7AAH4bwADpCgEAAYCK6MB2AhAAwADpxkIAAAGK/WqK/WADwAD+fsABq3IAPgI9iosYwHYCVRyLHy7AAH4cwADpCgEAAYCLL8B2AhAAwADpx0IAAAGLRGqLRGADwAD+fsABq3cAPgI9iotgwHYCVRyLZy7AAH4dwADpCgEAAYCLeMB2AhAAwADpyEIAAAGLjWqLjWADwAD+fsABq3wAPgI9iouowHYCVRyLry7AAH4ewADpCgEAAYCLv8B2AhAAwADpyUIAAAABPgI9iovgwHYCVR6L58AA6UoDAAKAi/bAdgIQaov/YAPAAPyXwAGrPwGfOiSMRgInwAB+IBaMPoCMNsB2AhCWc8AA6hFCAAA9HgDAALiBAgACgQDAdgIvggDAdgJVAEqMUQADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACBAMB2Ai+B3QIAAhQAwHYE2gwAFADAdgTjDQAAwAC5kT2LAMB2AmoeAMAAuIIBAAEUAMB2ApoIAAA9jADAdgJzHgDAALh8AQABFADAdgKaCAAAPY0AwHYCfB4AwAC4fQEAARQAwHYCmggAAD0cibaBAMB2Ai9qAQABFADAdgKaCAAAAEoAARYAgQDAdgIvgd7AALmNBsAA6cGCfIxWjGWRPQAAwAB85QAAAAEDjHSRPQACAAQEBIyDAAAAwAB83GADwAD95ACMkgAAAE5gA8AA/eQAjJwAAADAAHzeYAPAAP7/AIy1AAAAhDldA8AAuhwBXQPAAP07AWADwAD8lwAAXQPAALloAWADwAD+fgE+Dk4AAAABgcpdA8AAuK4BYAPAAP5+AR+MwsAAuLsAAWADwAD+fgAATgAAAACBy10DwAC5ZAFgA8AA/n4ATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE+MZQAAAACB0lsAA4x0kT0EAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPg1OjQeNDwAAImADwADqCgEfjRXAAOotAQABJ8AAfhwATo1DjVMAAMAAfbheAwACAgJgA8AA/v9dA8AAuhwBXQPAAP07AWADwAD8lwABVwPAAOkSAF0DwAC5aAFbARqNbMAA6WFJjYEcjZUUjYXAdgbJEQBIAQABKwDAAP3xPgI9jY2mwHYGJx6NrcAA6TwBAAEUjcfAdgaqEAAAQgAAP0mN2xyN5oCN38B2BaZIAQABKwDAAP3xPgI9jY33wHYGJx6N/sAA6UsCAAIUjhbAdgaqEAAnwAB83ABCAAA/SY40ISWOP4COOMB2BaZgA8AA/n4+Aj2NjlPAdgYnHo5awADpTAIAAhSOcsB2BqoQACfAAHzcAEIAAD9OjpSOlwAAlURgA8AA6a4BHI6fFo6ZLsAAfhbAAOkKwADpu0sBAAGAjqDAdgWmAMAA/YFJjq0cjrQUjrHAdgfBEgBIAQABKwDAAP3xPgI9jY7FwHYGJx6OzMAA6T4CAAIUju/AdgaqEAAmjvgBgI74wHYFpmADwAD+fgBCAAA/To8PjxMAAICsYAPAAP7/AYKPFcB2BcNJjyAcjygUjyTAdghAEwBIAQABKwDAAP8mPgRJjzkcj0KBjz3AdgW2SAEAASsAwAD98T4CPY2PVcB2Bicej1zAAOlLAgACFI90wHYGqhAAJ04AQgAAP0mPlCElj52Bj5jAdgW2YAPAAP5+PgI9jY+zwHYGJx6PusAA6UwCAAIUj9LAdgaqEAAnTgBCAAA/PRWP8sB2CEATHI/7FI/4wHYHwRIAwAB+FAEAASaQBwGBkAfAdgW2YAPAAP5+AMAA6bNJkBQckBwUkBjAdghAEwBIAQABKwDAAP8mPgI9jZAvwHYGJx6QNsAA6UwCAAIUkE7AdgaqEAAnTgBCAAA/PgI9FZB7wHYIQBMckIQUkIHAdgfBEgBsAQABFJCMwHYIQBMAAMAA6bRJkJgckKAUkJzAdghAEwBIAQABKwDAAP8mPgI9jZCzwHYGJx6QusAA6UwCAAIUkNLAdgaqEAAngKwAQgAAP02Q9QI1AAAAAABbAR6Q9cAAuH4EAAQckQoUkPvAdgbJEQAgAgACFJELwHYIQBMAg5EQwHYF0wAAhwDAdgZFFADAdgZOCAAUAMB2BnUMAAArPRQAwHYGiA0APY2RHMB2BicekSPAAOlPAQABFJExwHYGqhAAAEIAAD0eAMAAuIECAAKEAMB2BgGFAMB2BicASpE9AAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIQAwHYGAYHdAgACFADAdgpSEAAUAMB2ClsRAADAALmRPY4AwHYGPB4AwAC4ggEAARQAwHYGdQwAAD2PAMB2BkUeAMAAuHwBAAEUAMB2BnUMAAA9FQDAdgZOCB4AwAC4fQEAARQAwHYGdQwAAD0cjHSEAMB2BgFqAQABFADAdgZ1DAAAAEoAARYAhADAdgYBgd7AALmNBsAA6cOCfJFCkVGSCwAAwAB+GMAA6QoAAAABA5FbkgsAAgABAQGRZAAAACJgA8AA6goAAF0DwAC5aAFgA8AA/n4BPg1OAAAAAYHKXQPAALiuAWADwAD+fgEfkXPAALi7AAFgA8AA/n4AAE4AAAAAgctdA8AAuWQBYAPAAP5+AE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBPkVEAAAAAgdJbAAORW5ILBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4FTpF9kYQAAIF2XQPAAP1tAltbATKRhltbAD0ckZQUkY7AdgviDACAvwIAAieClCfAAH4hAMAA/YI9HJG7FJG1wHYL4gwAgL8CAAInwAB+IhyR1RaR0BaRyS7AAH4WwADpCsAA6buDaMAA/Y+ArQAAAADAAP0PAMAA/YI9ipHjwHYLaB6R6sAA6U4CAAKAkffAdgsjFJIAwHYL4gwAAEIAAD0eAMAAuIECAAKBAMB2C0KCAMB2C2gASpILAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIEAwHYLQoHdAgACFADAdgyhDAAUAMB2DKoNAADAALmRPYsAwHYLfR4AwAC4ggEAARQAwHYLrQgAAD2MAMB2C4YeAMAAuHwBAAEUAMB2C60IAAA9jQDAdguPHgDAALh9AQABFADAdgutCAAAPRyRW4EAwHYLQmoBAAEUAMB2C60IAAAASgABFgCBAMB2C0KB3sAAuY0GwADpxIJ8khCSH5TaAADAAH4ZwADpCgAAAAEDkiuU2gACAAEBAZI0AAAAImADwADqCgAAXQPAALloAWADwAD+fgE+Dk4AAAABgcpdA8AAuK4BYAPAAP5+AR+SQ8AAuLsAAWADwAD+fgAATgAAAACBy10DwAC5ZAFgA8AA/n4ATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE+SHwAAAACB0lsAA5IrlNoEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPg1Okk2SWwAAwAB9tV4DAAEBAWADwAD+fgABVwPAAOkPAF0DwAC5aAFgA8AA/v8BGpJ0wADpXkmShxySmRSSi8B2DjkNAEgBAAErAMAA/fE+Aj2KkqrAdg22HpKxwADpPAEAAYCSy8B2DXEAQgAAP06S45LqAADAAHzcWwEckvoWkvSAkuzAdg1xg/TAAOoSSwEAASfAAHzcAMAA/YFJkwockxUUkw7Adg6nDgBIAQABKwDAAP3xPgI9ipMmwHYNth6TLcAA6UsCAAKAk0XAdg1xJ8AAfNwAQgAAP0mTYyElk24Uk2fAdg6nDgBgA8AA/n4+Aj2Kk4LAdg22HpOJwADpTAIAAoCTocB2DXEnwAB83ABCAAA/TpPDk8YAAJVEYAPAAOmuARyTzhaTyC7AAH4WwADpCsAA6btLAQABFJPPwHYOpw4AAMAA/YFJk9whHJPjFJPgwHYPTg8ASAEAASsAwAD98T4CPYqT9MB2DbYek/vAAOk9AgACgJQfwHYNcSaUKAEUlCjAdg6nDgBgA8AA/n4AQgAAP02USQI1AAAAAABbAR6UScAAuH4EAAQclFwUlE/Adg45DQAgAQABJpRdARSUXcB2DqcOAGADwAD+fgAAhADAdg3UhQDAdg3dFADAdg4ECQAAK06UP5RHAACvKWADwAD+/wEUAMB2DhcKAD0VlGrAdg9ODx+Uc8AA6bcCAAImlH8BFJR/wHYOpw4AYAPAAP5+FJSHwHYQIRAAAD0clJsWlJUuwAB+FsAA6QrAAOm7gL8CAAImlJsBFJScwHYOpw4AYAPAAP5+FJSmwHYPTg8AAMAA/YI9ipSuwHYNth6UtcAA6U4CAAKAlMLAdg1xHJTOFJTLwHYPTg8AluYAAAAAwADptQBCAAA9HgDAALiBAgACgQDAdg2QggDAdg22AEqU2gADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACBAMB2DZCB3QIAAhQAwHYQ9Q0AFADAdhD+DgAAwAC5kT2LAMB2DcseAMAAuIIBAAEUAMB2DgQJAAA9jADAdg3UHgDAALh8AQABFADAdg4ECQAAPY0AwHYN3R4AwAC4fQEAARQAwHYOBAkAAD0ckiuBAMB2DZBqAQABFADAdg4ECQAAAEoAARYAgQDAdg2Qgd7AALmNBsAA6cWCfJTflO6XQgAAwAB+GsAA6QoAAAABA5T6l0IAAgABAQGVAwAAACJgA8AA6goAAF0DwAC5aAFgA8AA/n4BPg5OAAAAAYHKXQPAALiuAWADwAD+fgEflRLAALi7AAFgA8AA/n4AAE4AAAAAgctdA8AAuWQBYAPAAP5+AE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBPlO4AAAAAgdJbAAOU+pdCBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4LTpUclSYAAMAAfbZeAwABAQFgA8AA/v8AAVcDwADpEABdA8AAuWgBWwEalT/AAOlfSZVOHJVcFJVSwHYSjQ0ASAEAASsAwAD98T4CPYqVbcB2EgoelXTAAOk8AQABgJWOwHYRxQBCAAA/TpWmla0AAMAAfNxbARyVvRaVt4CVr8B2EcWD9MAA6hJLAQABJ8AAfNwAwAD9gUmVzRyV2BSV0cB2EvYOAEgBAAErAMAA/fE+Aj2KlenAdhIKHpXwwADpSwIAAoCWCMB2EcUnwAB83ABCAAA/SZYmISWWMRSWKsB2EvYOAGADwAD+fj4CPYqWRcB2EgoelkzAAOlMAgACgJZkwHYRxSfAAHzcAEIAAD9OloaWiQAAlURgA8AA6a4BHJaSFpaLLsAAfhbAAOkKwADpu4ReAQABFJaZwHYS9g4AAMAA/YpJlqYclq0UlqrAdhOdDwBIAQABKwDAAP3xPgI9ipa+wHYSCh6WxcAA6T4CAAKAlujAdhHFJpbxARSW8cB2EvYOAGADwAD+fgBCAAA/TZcEAjUAAAAAAFsBHpcEwAC4fgQABByXExSXCsB2Eo0NACABAAEWlxcUlxTAdhOdDwCArMAA6bEAAIQAwHYSKIUAwHYSMRQAwHYSWAkAACs9FADAdhJrCgA9ipchwHYSCh6XKMAA6U8BAAGAlzbAdhHFAEIAAD0eAMAAuIECAAKBAMB2EeSCAMB2EgoASpdCAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIEAwHYR5IHdAgACFADAdhS0DQAUAMB2FL0OAADAALmRPYsAwHYSHx4AwAC4ggEAARQAwHYSWAkAAD2MAMB2EigeAMAAuHwBAAEUAMB2ElgJAAA9jQDAdhIxHgDAALh9AQABFADAdhJYCQAAPRyU+oEAwHYR5GoBAAEUAMB2ElgJAAAASgABFgCBAMB2EeSB3sAAuY0GwADpxoJ8l0eXVp3ZAADAAH4bwADpCgAAAAEDl2Sd2QACAAEBAZdtAAAAImADwADqCgAAXQPAALloAWADwAD+fgE+D04AAAABgcpdA8AAuK4BYAPAAP5+AR+XfMAAuLsAAWADwAD+fgAATgAAAACBy10DwAC5ZAFgA8AA/n4ATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE4AAAAAiE5bAE+XVgAAAACB0lsAA5dkndkEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgpOl4aXjwAAwAB9uV4DAAEBAWADwAD+/wABVwPAAOkTAF0DwAC5aAFdA8AA/TsBYAPAAPyXARqXqMAA6WJJl7Ycl8MUl7rAdhZVDgBIAQABKwDAAP3xPgI9ipfUwHYVyR6X28AA6TwBAAGAl/XAdhWEAEIAAD9OmA2YFAAAwAB83FsBHJgkFpgegJgWwHYVhIP0wADqEksBAAEnwAB83ADAAP2BSZg0HJg/FJg4wHYWyg8ASAEAASsAwAD98T4CPYqYUMB2FckemFfAAOlLAgACgJhvwHYVhCfAAHzcAEIAAD9JmI0hJZiYFJiRwHYWyg8AYAPAAP5+PgI9ipiswHYVyR6Ys8AA6UwCAAKAmMvAdhWEJ8AAfNwAQgAAP06Y7ZjwAACVRGADwADprgEcmPgWmPIuwAB+FsAA6QrAAOm7SwEAARSY+cB2FsoPAADAAP2BSZkGHJkNFJkKwHYXcRAASAEAASsAwAD98T4CPYqZHsB2FckemSXAAOk+AgACgJlIwHYVhCaZUQEUmVHAdhbKDwBgA8AA/n4AQgAAP06ZaAAAAICsYAPAAP7/AEmZcSEcmYscmYMWmX2AmXXAdhWEg/TAAOoSSwEAASeArADAAP2BSAEAASsAwAD98T4BSz4FTpmumbcAAMAAfiNbARyZxxaZwYCZucB2FYSD9MAA6hJLAQABJ4CsAMAA/YFJmdghJZnlFJncwHYYNhIAYAPAAP5+PgI9ipn9wHYVyR6aBMAA6UwCAAKAmhzAdhWEJ4CsAEIAAD9OmkOaTQAAqQlgA8AA/v8BHppTwAD/LQEAASaaWQEUmlnAdhg2EgBgA8AA/n4APRWabMB2F/IRHJp1FJpywHYXcRAAbAEAARSafcB2GJsTAADAAOm0SZqRHJqZFJqVwHYX8hEASAEAASsAwAD/Jj4CPYqarsB2FckemrXAAOlMAgACgJrNwHYVhCeArABCAAA/AAGa8FsBmvcAAAGDU1sAAD4CPYqbBMB2FckemwvAAOlMAgACgJsjwHYVhCeArABCAAA+BU6bU5tYAABOWwEcm2gWm2KAm1rAdhWEg/TAAOoSSwEAASdOAMAA/YFJm3gcm4EUm3zAdhlgEgBIAQABKwDAAP3xPgI9ipuUwHYVyR6bm8AA6UsCAAKAm7PAdhWEJ04AQgAAP0mb0yElm9wUm9fAdhlgEgBgA8AA/n4+Aj2Km/LAdhXJHpv5wADpTAIAAoCcEcB2FYQnTgBCAAA/PRWcMcB2F/IRHJw6FJw3wHYXcRAAwAB+FAEAASacRgEUnEbAdhlgEgBgA8AA/n4AwADps0mcUxycWxScV8B2F/IRAEgBAAErAMAA/yY+Aj2KnG7AdhXJHpx1wADpTAIAAoCcjcB2FYQnTgBCAAA/Sz4FTZzPAjUAAAAAAFsBHpzPwAC4fgQABByc3RSc1cB2FlUOACABAAEUnN7AdhfyEQAAAIQAwHYV54UAwHYV8BQAwHYWIAoAACtOnMeczQAAhDldA8AA/TsBYAPAAPyXARQAwHYWMwsATpzunPUAAIF2XQPAAP1tAmADwAD+fmADwAD+fgEynPdgA8AA/n5gA8AA/n4CJ4KUJ8AAfiQnwAB+JRydIWqdGmADwADHKcABd12VegEAARSdKMB2GrQSAADAAMf1PYqdN8B2FckenT7AAOlOAgACgJ1LwHYVhBSdVMB2GtMTAABCAAAAAZ1jWwGdagAAAYNTWwAAPgI9ip11wHYVyR6dfMAA6UoDAAKAnYvAdhWEap2UYAPAAPyXwAGrgQGfOiSdzgInwAB+JhSdzMB2G1sSAEIAAD0eAMAAuIECAAKBAMB2FaOCAMB2FckASp3ZAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIEAwHYVo4HdAgACFADAdhvFDgAUAMB2G84PAADAALmRPYsAwHYV3h4AwAC4ggEAARQAwHYWIAoAAD2MAMB2FeceAMAAuHwBAAEUAMB2FiAKAAA9jQDAdhXwHgDAALh9AQABFADAdhYgCgAAPRyXZIEAwHYVo2oBAAEUAMB2FiAKAAAASgABFgCBAMB2FaOB3sAAuY0GwADpx4J8nd6d7aTiAADAAH4cwADpCgAAAAEDnfyk4gACAAEBAZ4FAAAAImADwADqCgAAXQPAALloAWADwAD+fgE+Dk4AAAABgcpdA8AAuK4BYAPAAP5+AR+eFMAAuLsAAWADwAD+fgAATgAAAACBy10DwAC5ZAFgA8AA/n4ATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE+d7QAAAACB0lsAA538pOIEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPhFOnh6eKAAAwAB9t14DAAICAmADwAD+/10DwAD9OwFgA8AA/JcAAVcDwADpEQBdA8AAuWgBWwEankHAAOlgSZ5QHJ5eFJ5UwHYdXQ0ASAEAASsAwAD98T4CPYqeb8B2HNoennbAAOk8AQABgJ6QwHYclQBCAAA/Tp6onq8AAMAAfNxbARyevxaeuYCescB2HJWD9MAA6hJLAQABJ8AAfNwAwAD9gUmezxye2hSe08B2HdMOAEgBAAErAMAA/fE+Aj2KnuvAdhzaHp7ywADpSwIAAoCfCsB2HJUnwAB83ABCAAA/SZ8oISWfMxSfLMB2HdMOAGADwAD+fj4CPYqfR8B2HNoen07AAOlMAgACgJ9mwHYclSfAAHzcAEIAAD9On4ifiwAAlURgA8AA6a4BHJ+TFp+NLsAAfhbAAOkKwADpu0sBAAEUn5TAdh3TDgAAwAD9gUmfoRyfqBSfpcB2HnoPAEgBAAErAMAA/fE+Aj2Kn7nAdhzaHp/AwADpPgIAAoCf48B2HJUmn+wBFJ/swHYd0w4AYAPAAP5+AEIAAD9OoAMAAACArGADwAD+/wBJoAwhHKAmHKAeFqAYgKAQwHYclYP0wADqEksBAAEngKwAwAD9gUgBAAErAMAA/fE+AUs+BU6gSaBSAADAAH4jWwEcoGIWoFyAoFTAdhyVg/TAAOoSSwEAASeArADAAP2BSaBzISWggBSgd8B2Hz8RAGADwAD+fj4CPYqgmMB2HNoeoJ/AAOlMAgACgKC3wHYclSeArABCAAA/TqDeoOgAAKkJYAPAAP7/AR6g7sAA/y0BAAEmoPQBFKD0wHYfPxEAYAPAAP5+AD0VoQfAdh77EByhEBShDcB2HnoPAGwBAAEUoRjAdh+kEgAAwADptEmhLByhNBShMMB2HvsQAEgBAAErAMAA/yY+Aj2KoUnAdhzaHqFQwADpTAIAAoChaMB2HJUngKwAQgAAPwABoYtbAaGSAAABg1NbAAA+Aj2KoZ/AdhzaHqGmwADpTAIAAoChvsB2HJUngKwAQgAAPgVOoe6h8wAATlsBHKIDFqH9gKH1wHYclYP0wADqEksBAAEnTgDAAP2BSaITHKIcFKIXwHYgaREASAEAASsAwAD98T4CPYqiL8B2HNoeojbAAOlLAgACgKJOwHYclSdOAEIAAD9Jom4hJaJ3FKJywHYgaREAYAPAAP5+PgI9iqKNwHYc2h6ilMAA6UwCAAKAoqzAdhyVJ04AQgAAPz0VoszAdh77EByi1RSi0sB2HnoPAMAAfhQBAAEmouEBFKLhwHYgaREAYAPAAP5+AMAA6bNJou4covYUovLAdh77EABIAQABKwDAAP8mPgI9iqMJwHYc2h6jEMAA6UwCAAKAoyjAdhyVJ04AQgAAP06jUKNdAADAAH4lWwEco20Wo2eAo1/AdhyVg/TAAOoSSwEAASfAAH4lAMAA/YFJo4Mco5QUo4fAdiFzEQBIAQABKwDAAP3xPgI9iqOlwHYc2h6jrMAA6UsCAAKAo8TAdhyVJ8AAfiUAQgAAP0mj6CElo/kUo+zAdiFzEQBgA8AA/n4+Aj2KpA3AdhzaHqQUwADpTAIAAoCkLMB2HJUnwAB+JQBCAAA/TqRapG4AAMAAfiddA8AA/TsBYAPAAPyXARykd2qkcGADwADHKcABd12HIQEAASakfgEUpH7AdiFzEQBgA8AA/n4AwADHMU2kkgI1AAAAAABbAR6kksAAuH4EAAQcpKEUpJjAdh1dDQAgAgACFKSiwHYe+xAAFKSnwHYiGhIAAACEAMB2HPiFAMB2HQEUAMB2HSgJAAArPRQAwHYdOwoAPYqkwcB2HNoepMjAAOlPAQABgKTWwHYclQBCAAA9HgDAALiBAgACgQDAdhy0ggDAdhzaAEqk4gADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACBAMB2HLSB3QIAAhQAwHYi9Q0AFADAdiL+DgAAwAC5kT2LAMB2HO8eAMAAuIIBAAEUAMB2HSgJAAA9jADAdhz4HgDAALh8AQABFADAdh0oCQAAPY0AwHYdAR4AwAC4fQEAARQAwHYdKAkAAD0cnfyBAMB2HLRqAQABFADAdh0oCQAAAEoAARYAgQDAdhy0gd7AALmNBsAA6ciCfKTnpParsQAAwAB+HcAA6QoAAAABA6UGq7EAAgABAQGlDwAAACJgA8AA6goAAF0DwAC5aAFgA8AA/n4BPg5OAAAAAYHKXQPAALiuAWADwAD+fgEfpR7AALi7AAFgA8AA/n4AAE4AAAAAgctdA8AAuWQBYAPAAP5+AE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBPpPYAAAAAgdJbAAOlBquxBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4STqUopTIAAMAAfbdeAwACAgJgA8AA/v9dA8AA/TsBYAPAAPyXAAFXA8AA6REAXQPAALloAVsBGqVLwADpYEmlWhylaBSlXsB2JI0NAEgBAAErAMAA/fE+Aj2KpXnAdiQKHqWAwADpPAEAAYClmsB2I8UAQgAAP06lsqW5AADAAHzcWwEcpckWpcOApbvAdiPFg/TAAOoSSwEAASfAAHzcAMAA/YFJpdkcpeQUpd3AdiUDDgBIAQABKwDAAP3xPgI9iqX1wHYkCh6l/MAA6UsCAAKAphTAdiPFJ8AAfNwAQgAAP0mmMiElpj0UpjbAdiUDDgBgA8AA/n4+Aj2KplHAdiQKHqZYwADpTAIAAoCmcMB2I8UnwAB83ABCAAA/TqaSppUAAJVEYAPAAOmuARymnRamly7AAH4WwADpCsAA6btLAQABFKaewHYlAw4AAMAA/YFJpqscprIUpq/AdiWqDwBIAQABKwDAAP3xPgI9iqbDwHYkCh6mysAA6T4CAAKApu3AdiPFJqb2ARSm9sB2JQMOAGADwAD+fgBCAAA/TqcNpxMAAIGiWwEcpyMWpx2ApxXAdiPFg/TAAOoSSwEAASeBogDAAP2BSacyHKc8FKc2wHYmKxAASAEAASsAwAD98T4CPYqnTcB2JAoep1TAAOlLAgACgKdswHYjxSeBogBCAAA/SaeJISWnkxSnjcB2JisQAF0DwAD9OwFbPgI9iqelwHYkCh6nrMAA6UwCAAKAp8TAdiPFJ4GiAEIAAD9Op+Wn6gAAg2ddA8AA/TsBWwExp+xbAEWn9AGn/af/AABiYAPAAPyXAZMBHKgGFKgEwHYm5hIAYwEAASaoDgEWqA4UqAjAdiYrEABhAGADwAD9rgDAAP3FARWoFsB2JuYSHKgXFKgWwHYm5hIAZAEAAZQAwAD9vT4FTqgnqDAAAMAAfihbARyoNxSoMsB2JisQAEsBAAEUqDjAdibmEgAAAEmoQiIiIiElqE8UqEbAdidFEwBdA8AA/TsBWwEhHKh1FqhuFKhlwHYnRRMAYQBIAQABlQDAAP3xASElqJMcqI8UqIfAdidFEwBLAQABkwAAYAPAAP5+ASElqLccqLMUqKvAdidFEwBLAQABlAAAYAPAAP5+PgI9iqjNwHYkCh6o1MAA6UoDAAKAqOPAdiPFaqjsYAPAAPyXwAGIkQGfOiQABhapHICpFMB2I8WWc8AA6hEnwAB+KSfAAH4qFKldwHYm5hIAJ4NbFKljwHYnRRMAQgAAP06pgqmGAACArGADwAD+/wEcqYsUqYjAdiWqDwDAAH4UAQABJqmfARypnxSpl8B2J0UTAEsBAAGTAABgA8AA/n4AwADps0mpqxypsxSpr8B2KEIUAEgBAAErAMAA/yY+Aj2KqcbAdiQKHqnNwADpSgMAAoCp3MB2I8VqqeVgA8AA/JfAAYiRAZ86JAAGFqoVgKoNwHYjxZZzwADqESfAAH4pJ8AAfioUqlbAdibmEgAng1sUqlzAdidFEwBCAAA/PRyqfBSqd8B2JswRAFYBAAEUqoDAdihCFAAAwAD9TE6qlKqiAADAAHxaXQPAAP07AV0DwAC5aAFbATGqrF0DwAC5aAFbAEWqtAGqvaq/AABiYAPAAPyXAZMBHKrGFKrEwHYpShMAYwEAARaqzRSqyMB2JswRAGHAAP1rAMAA/cUBFarVwHYpShMcqtYUqtXAdilKEwBkAQABlADAAP29PgJOquyrAAAAwAB+J10DwAD9OwFgA8AA/JcBHKsJaqsCYAPAAMcpwAF3XYchAQABJqsYARyrGByrFRSrEMB2JisQAEsBAAEUqxbAdilKEwAAAEsBAAGUAABgA8AA/n4AwADHMT0cqzIUqyTAdikgEgBWAQABHKs/FKs2wHYkjQ0AIAIAAiarRAEcq0QUq0DAdibMEQBLAQABFKtFwHYpShMAAMAA/UpgA8AA/v8Uq0nAdimiFAAAAADAAP1MTatqAjUAAAAAAFsBHqtqwAC4fgQABB6rd8AAuXUBAVsBFKt8wHYpIBIAAIQAwHYkKIUAwHYkMRQAwHYkWAkAACs9FADAdiRrCgA9iquQwHYkCh6rl8AA6U8BAAGAq6XAdiPFAEIAAD0eAMAAuIECAAKBAMB2I+SCAMB2JAoASquxAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIEAwHYj5IHdAgACFADAdirjDQAUAMB2KuwOAADAALmRPYsAwHYkHx4AwAC4ggEAARQAwHYkWAkAAD2MAMB2JCgeAMAAuHwBAAEUAMB2JFgJAAA9jQDAdiQxHgDAALh9AQABFADAdiRYCQAAPRylBoEAwHYj5GoBAAEUAMB2JFgJAAAASgABFgCBAMB2I+SB3sAAuY0GwADpyYJ8q7arxa8PAADAAH4ewADpCgAAAAEDq9SvDwACAAEBAavdAAAAImADwADqCgAAXQPAALloAWADwAD+fgE+Dk4AAAABgcpdA8AAuK4BYAPAAP5+AR+r7MAAuLsAAWADwAD+fgAATgAAAACBy10DwAC5ZAFgA8AA/n4ATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE+rxQAAAACB0lsAA6vUrw8EAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPg1Oq/asAAAAwAB9ul4DAAEBAWADwAD+/wABVwPAAOkUAF0DwAC5aAFdA8AA/TsBXQPAAP1tAmADwAD+flsBGqwZwADpY0msKBysNhSsLMB2LHsNAEgBAAErAMAA/fE+Aj2KrEfAdiv4HqxOwADpPAEAAYCsaMB2K7MAQgAAP06sgKyHAADAAHzcWwEcrJcWrJGArInAdiuzg/TAAOoSSwEAASfAAHzcAMAA/YFJrKccrLIUrKvAdiz4DgBIAQABKwDAAP3xPgI9iqzDwHYr+B6sysAA6UsCAAKArOLAdiuzJ8AAfNwAQgAAP0mtACElrQsUrQTAdiz4DgBgA8AA/n4+Aj2KrR/Adiv4Hq0mwADpTAIAAoCtPsB2K7MnwAB83ABCAAA/Tq1grWMAAJVEYAPAAOmuARytaxatZS7AAH4WwADpCsAA6btLAQABFK1swHYs+A4AAMAA/YFJrXkcrYAUrX3Adi2fDwBIAQABKwDAAP3xPgI9iq2RwHYr+B6tmMAA6T4CAAKArbvAdiuzJq3EARStxMB2LPgOAGADwAD+fgBCAAA/Ta3mAjUAAAAAAFsBHq3mwAC4fgQABByt9RSt7MB2LHsNACABAAEWrfkUrfbAdi2fDwCArMAA6bEAAIQAwHYsFoUAwHYsHxQAwHYsRgkAACtOrdut5AAAwAB+K10DwAD9OwFdA8AA/W0CYAPAAP5+WwEUAMB2LFkKAEWuNAGuPa4/AABiYAPAAPyXAZMBHK5GFK5EwHYunBEAYwEAARauURSuSMB2LnAQAGHAAP1rAMAA/cUBFa5ZwHYunBEcrloUrlnAdi6cEQBkAQABlADAAP29PgE9HK5xHK5uFK5mwHYucBAASwEAARSub8B2LpwRAADAAP1KgL8CAAIngL0eroDAAP80AQABJq6WARyulhyukxSui8B2LnAQAEsBAAEUrpTAdi6cEQAAwAD9SksBAAEngL0AwAD9gWADwAD+fgAAwAD9gk6ur662AACBdl0DwAD9bQJgA8AA/n5gA8AA/eQBMq64YAPAAP5+YAPAAP3kAieClCfAAH4sJ4GiFK7YwHYucBAAPYqu58B2K/geru7AAOlOAgACgK77wHYrsxSvBMB2L2URAABCAAA9HgDAALiBAgACgQDAdivSggDAdiv4AEqvDwADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACBAMB2K9KB3QIAAhQAwHYv6w0AFADAdi/0DgAAwAC5kT2LAMB2LA0eAMAAuIIBAAEUAMB2LEYJAAA9jADAdiwWHgDAALh8AQABFADAdixGCQAAPY0AwHYsHx4AwAC4fQEAARQAwHYsRgkAAD0cq9SBAMB2K9JqAQABFADAdixGCQAAAEoAARYAgQDAdivSgd7AALmNAAB2AFcAdgGEAHYB7gB2BYQAdgr9AHYNSwB2EZ8AdhVeAHYcbwB2I58AdiuNAHYwlQAAAAsCwADpzIJ9gS6BNIOuA8AAfi0AAAFgAcAA/eQAAAYEwADpzoJ9gVOBbgbAAH4uAGADwAD8lwFqgW1gA8AA/JcJBMAA6c+CfYGDgaEGwAB+LwBgA8AA/JcBaoGgYAPAAPyXFQTAAOnQgn2BtoHVBsAAfjAAYAPAAPyXAWqB1GADwAD8lyEEwADp0YJ9geqCCwbAAH4xAGADwAD8lwFqggpgA8AA/JdTBMAA6dKCfYIggjoGwAB+MgBgA8AA/JcBaoI5YAPAAPyXgVcEwADp04J9g5GDrAbAAH4zAGADwAD8lwFqg6tgA8AA/JeCPwEFwADp1QAAAAAEAAADAAAAAAAAAAAAYAPAAOnMAT8BCQEAwAD9+gAAAAAAAAB2MeIAAAAAAsAA6daCfoD0gPqCqgPAAH40AAABYAHAAP3kAAFgAcAA6jADBMAA6diCfoEwgTYJwAB91gBgA8AA/JcABMAA6dmCfoFJgVEJwAB1MQBgA8AA0GsABMAA6dqCfoFigWYJgL0AYAPAAP5+AAEFwADp4YJ+gWuBa4GgAAAAA4F5gaAAAAADAwOBfwAABMAAfdZgA8AA/JcAgYwAAATAAHUxYAPAANBrAIGbAAAEgL1gA8AA/n4AAGADwADp1gE/BAgBwADp2IAAwHYycQgBwADp2YEAwHYygQgBwADp2oIAwHYykQkBgWvAAP36AAAAAAMGwADp3IJ+gaWBsIHPAQDAAH41AAAAAQOBuoHPAAAAAAAAAGADwAD+fgFKgb0BJIHPAifAAH42FoHILsAAfdbAAOnYBsAA6d6CfoHUgfGCcgAAwAB93AFqgdVgA8AA/eQCAAABA4H9gnIAAAACAgKCCAAAAMAAfKRgA8AA6WgAghkAAAAiYAPAAOoKAABdA8AAuWgBYAPAAOpDAT4BSoJIARyCV4GCT8B2M1nAAH43AQABFoJlLsAAdTHAAOnZAMAA6iMGwADp34J+gneCiIKoAADAAH3+AWqCeGADwAD95AIAAAEDgpWCqAAAAAEBAYKeAAAAImADwADqCgAAXAE+AAAAdjLaAHYzHQB2M50AdjPbAAAAAwLAAOnign+A9ID6iIIDwAB+OAAAAWABwAD95AABYAHAAOowAgTAAOnkgn+BRoFvCcAAfjkAXQPAAP1tAmADwAD8l2ADwADp1gEegVXAAP10AAJgA8AA/JdgA8AA6dYAAATAAOnmgn+Bd4GCGMAAfjrAAOkKAGADwAD8lwErAQXAAOntgn+Bh4GHgZgAAAADgZaBmAAAAAAAAABgA8AA6eIBPwEJAYGHwAD9+gAAAAAEBsAA6eiCf4GdgaKCagAAwAB91wAAAAEDgbCCagAAAAMDA4G1AAAAwAB91mADwAD8lwCBxgAAAMAAfGJgA8AA0GsAgdEAAACAvWADwAD+fgAAXAE+A0mB3RyB7RaB4S7AAH46wADpCsAA6eZIAQABKwDAAP27PgE9F4H+LsAAfjrAAOkKgIIMwHY0wsAA6eY/ToIigiUAAMAAfjtgA8AA6dYBH4IrwADp4QMAA4CCOsB2NMKBgkLAdjTSgoJGwHY04gA9HIJZFoJRLsAAfjnAAOnkgL8CAAKAglrAdjTCg4JkwHY1MQDAAP2CBsAA6emCf4JvgnSC/wAAwAB92AAAAAEDgoOC/wAAAAICAoKIAAAAwAB91mADwAD8lwCCmQAAAMAAfGJgA8AA0GsAAFwBPgJJgqMcgrMWgqcuwAB+OsAA6QrAAOnmSAEAAYCCtsB2NawAwAD9uz4BPReCxi7AAH46wADpCivAAOnmPz0cgu0WguQuwAB+OcAA6eSEXgEAAYCC9MB2NawAwAD9igbAAOnqgn+DBIMhiEoAAMAAfdwBaoMFYAPAAP3kAgAAAQODLYhKAAAAAgICgzgAAADAAHykYAPAAOloAINJAAAAImADwADqCgAAXQPAALloAWADwADqQwE+CE6DX4NsAADAAH48YAPAAP5+ASaDXwEcg3wWg3aBg27AdjZpg/TAAOoSSwEAASfAAHxlAMAA/YFgA8AA/n5Og5MAAADAAHxlYAPAAPyXAEmDoiEcg7SCg6fAdjaIgdgBAAEnwAB+NgDAAP6QPgI9HIPdgYPVwHY2acAAffwCAAJqg/lgA8AA/JfAAYiRJIQ3AifAAH49goQqwHY2iADAAOomSoRAARaET4GER8B2NmmDV8AA6hc/PYqEY8B2NogchH+ChHLAdjaIgL4BAAEWhJUnwAB+NmHAAP6CAMAA/pRJhKIchLOChKbAdjaISAEAASeG6QDAAP6NPgE9i4TGwHY2xRaE0i7AAH46wADpCsAA6eY+AUs+AT2LhQDAdjbFHoUQwAD8xgEAAYKFFsB2NogAAAGFLVsBhTQAAAGDU1sAAD4CPRyFSYGFQcB2NmnAAH38AgACaoVnYAPAAPyXwAGIkSSFpQInwAB+PYKFmMB2NogAwADqJkqFsAEWhb+BhbfAdjZpg1fAAOoXToXfhecAALFaYAPAAOnWARyF8RaF6S7AAH45wADp5EsBAAGDhfLAdjbFAMAA/YFJhgIchg6EhgbAdjgTSAEAASsAwAD98T4DToaehqUAAIF2XQPAAP1tAmADwAD+fmADwAD+fgEyhqdgA8AA/n5gA8AA/n4DJ4KUJ8AAfj4ngmsnwAB+PyfAAH5AJ8AAfkE9HIchgYcZwHY2acAAfkIBAAEehy3AAOlOAgACgYc6wHY2aYWHQ8B2OFsAAMAA6iVKh1MBFodigYdawHY2aYNXwADqFz9Jh3ciHIeKFoeDgYd7wHY2aZZzwADqEUgBAAEnwAB+QwDAAP6NARyHsRaHqoGHosB2NmmWc8AA6hFIAQABJ58iAMAA/o0+AUqHyAEch/kfh9PAAOn8AwADgYfewHY2aYSH58B2OBOAh/DAdjZZAIKfAAAAAMAA6fU+AUqIEwEciCKEiBrAdjgTwAB93AIAAoCIL8B2NlmBiDjAdjZpAMAA6d4GwADp64J/iE+IYIiAAADAAH3+AWqIUGADwAD95AIAAAEDiG2IgAAAAAEBAYh2AAAAImADwADqCgAAXAE+AAAAdjSgAHY1igB2Ni0AdjmIAHY5xgAAAAQCwADp7oJ/iNOI2Zx2A8AAfkQAAAFgAcAA/eQAAAMEwADp8YJ/i4aLjhjAAH5FwADpCgBgA8AA6goABMAA6fKCf4uhi6kYwAB4ZMAA6QoAYAPAAOnWAATAAOnzgn+Lt4u/GMAAfMDAAOkKAGADwADpaAABBcAA6fyCf4joiOiJHwAAAAOI8okfAAAAAwMDiPgAAATAAH5FYAPAAOoKAIkHAAAEwAB4ZGADwADp1gCJFgAABMAAfMBgA8AA6WgAAGADwADp7gE/BAgBwADp8YAAwHY6bQgBwADp8oEAwHY6fQgBwADp84IAwHY6jQkBiOjAAP36AAAAAAUGwADp9YJ/iSSJNYt5AACCnwAAAAEDiTiLeQACAAAAAABdA8AAuWgBYAPAAOpDAT4PTgAAAAGByl0DwAC4rgFgA8AA6kMBH4lBwAC4uwABYAPAAOpDAABOAAAAAIHLXQPAALlkAWADwADqQwBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsATgAAAACITlsAT4k1AAAAAIHSWwADiTiLeQQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+CE2JZQI1AAAAAABbAR6JZcAAuH4EAAQciWsuwAB+RsAA6QoAAAAAwADp94MAwHY7ToQAwHY7VxQAwHY7hwkAACtOiVCJYwAAwAB+R2ADwADqQwEUAMB2O5oKAE6Jk4mgAADAAH5IXQPAAP1tAmADwAD+flsBJomTARyJtRSJosB2O/wNAMAAfkkAAAAAwADqS10DwAD9bQJgA8AA/n5bSYnIHInZFInMwHY8Fg4Ah1gBAAEngccAwAD9gD4CPYmJ98B2OzAeigLAAOpJAQABHooQwADpTQIAAhaKMi7AAH5FwADpCsAA6fEmilkBHIpZHIpRHIpIFIo8wHY8Fg4ASwEAASeBxwDAAP2BSwEAAScSAABLAQABJ586AABgA8AA/n4AAEIAAD9OinoAAADAAH5KYAPAAP5+AEs+Ak2KpwI1AAAAAABbAR6Kp8AAuH4EAAQciq0uwAB+S8AA6QoBAAEmiswBHIrMFIrAwHY8Fg4ASwEAASeBdgDAAP2BXQPAAP1tAmADwAD+flsAwADp+IMAwHY7ToQAwHY7VxQAwHY7hwkAACs9FYqYwHY84w8UAMB2O5oKAAABit9bAYrmAAABg1NbAAA+Aj2JivHAdjswHor8wADqSQEAAR6LCsAA6U0CAAIWiyEuwAB+RcAA6QrAAOnxHIstFIsrwHY9dxAAIwAAAADAAP3yAABCAAA9iYtFwHY7MByLTC7AAH5MwADpCgEAARSLaMB2POMPAADAAOn5QgAAPR4AwAC4gQIAAoAAwHY7CoEAwHY7MABKi3kAAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAgADAdjsKgd0CAAIUAMB2PhENABQAwHY+Gg4AAMAAuZE9igDAdjtFHgDAALiCAQABFADAdjuHCQAAPYsAwHY7Th4AwAC4fAEAARQAwHY7hwkAAD2MAMB2O1ceAMAAuH0BAAEUAMB2O4cJAAA9HIk4gADAdjsKagEAARQAwHY7hwkAAABKAAEWAIAAwHY7CoHewAC5jQbAAOn3gn+LxIvVjk0AAMAAfkbAAOkKAAAAAQOL4I5NAAAAAAAAAF0DwAC5aAFgA8AA6kMBPgZOi/6MBQAAg/RdA8AA/W0CYAPAAP5+WwEcjAcuwAB+TcAA6QoAAAAAwADp+j0cjCGAjBvAdj7zgL8CAAInwAB8ZRyMQBaMOhaMMS7AAH5FwADpCsAA6fGD9MAA6hJLAQABJ8AAfGUAwAD9gQDAAP2CToxXjGgAAMAAfk5dA8AA/W0CW1sBMoxqW1sDJ5ZzJ8AAfk8ntBIWjLQWjKsuwAB+RcAA6QrAAOnxwAB98MAA6hAng/SAjMzAdj7zSYzfIRyM/ByM8haM7BaM4y7AAH5FwADpCsAA6fGD9MAA6hJLAQABJ58GAMAA/YFIAQABKwDAAP3xPgE9HI0nHI0dgY0NwHY/Y0sBAAEng/QAwAD9gYC/AgACJ58GHI1CFo08Fo0zLsAAfkXAAOkKwADp8YP0wADqEksBAAEnnwYAwAD9gQAAP06NW41mAADAAH5QYAPAAOoKAR+NdMAA6ikCAAIWjZkWjZAuwAB+RcAA6QrAAOnxg1TAAOoOgY2hwHY/YwBKjhcBHI4nFo4eLsAAeGTAAOkKwADp8sAAfdwCAAIWjjQuwAB8wMAA6QrAAOnzgo4+wHZANgDAAOneBsAA6fiCf45SjmGXywAAwAB+S8AA6QoAAAABA45zl8sAAAABAQGOkAAAAMAAflFdA8AA/W0CYAPAAP5+WwAAXQPAALloAWADwAD+fgE+BU6Ot47GAADAAH5SYAPAAOmdARyO2RaO0C7AAHzAwADpCsAA6fPAAH3hwADpCgEAASekbgDAAOl/To8bjykAAMAAflNdA8AA/W0CW1sBMo8rW1sGJ8AAfGUcj08Wj0kWj0AuwAB+RcAA6QrAAOnxg/TAAOoSSwEAASfAAHxlAMAA/YEngm8cj4EWj3sWj3IuwAB+RcAA6QrAAOnxg/TAAOoSSwEAASeCbwDAAP2BJ5bhHI++gI+mwHZA0ksBAAEnwAB+VADAAP2BJ6RvHJAAgI/owHZA0ksBAAEnwAB+VQDAAP2BJ5jSHJBDgJArwHZA0ksBAAEnmNIAwAD9gSeEHhyQfYCQZcB2QNJLAQABJ4QeAMAA/YFOkJ6QpAAAqa1bARyQvoCQpsB2QNJLAQABJ6mtAMAA/YFJkM0hHJDXg5DRwHZCEUgBAAErAMAA/fE+AT0ckPWCkOjAdkE0gL8CAAInqa2DkQHAdkIRAMAA/YI/SZESIRyRJYGRFsB2QPxIAQABKwDAAP3xPglOkTqRTAAApG5gA8AA6goBH5FSwADqLQEAASekbgA9F5GShJGAwHZChoNUgZGbwHZA/MAA6g49HJHKFpHDhJGxwHZChoP0wADqEoClAQABgpHRwHZBNADAAP2JTpHukfEAAbQSYAPAAP5+ARySDRaR/BaR8y7AAHzAwADpCsAA6fPAAH3AwADpCsAA6WzAAH3uAAAAAMAA6olOkiKSKAABwAB971sBFpIzFpIqLsAAfkXAAOkKwADp8cAAffDAAOoQTpJHklEAAcAAXqRdA8AAuYgBYAPAAP5+AR6SV8AAuYoAAWADwAD+fgAAPRySjxaSgYGScsB2QPzAAH3UwADpo4C/AgAChZKQwHZC4TSSlgOSlpN3AAAAAQEBkp8AAABFYAPAAOoKAABgA8AA/aEBPgFJkqwhHJKyFJKwwHZDoAgASAEAASsAwAD98T4BPRyS0YeSx8B2Q0fAAG+ZAQABHJLfapLaYAPAAMhniMWVegEAARyS6BSS5sB2Q6AIAMAAffEBAAEykvZbWwEntBKGkv3AdkMfAMAA6iIAwADIbgDAALmQPgE9HJMth5MjwHZDR8AAb5kBAAEekzbAAOlKAgACFpNFLsAAfkXAAOkKwADp8WqTT2ADwAD8l8AAmy8AAMAAuZAAwAD9gj0ck46Bk3/AdkD8wAB8sQEAAR+Tl8AA6k4BAAEck8KEk6XAdkKGwAB98QEAATKT0FtbAie0EoWT18B2QuEnlnMnpG4AwADqIgAAwADpqkqUBAEclFQclCcWlBWHlAvAdkNHgd7AALmNga8BAVsBNJQsA5QslEcAAAABAQGUNAAAAIhsYAPAAP5+AABbAUqUOgEelDrAAMWtAQABFJRFwHZE7AgAAADAALl7ga8BAWADwAD+fgE0lFkDlFmVMQAAAAEBAZRiAAAAgmRbAABdA8AAuWQBYAPAAP5+AT4DTpSHlI8AAMAAflZdA8AA/W0CYAPAAP5+WwEmlIcBFJSRwHZFMwgAXQPAAP1tAmADwAD+fltJlJ8clKsUlKPAdkVOCQCHWAEAASeBxwDAAP2APgE9MJTNHJTaFJTTwHZFTgkASwEAASeBxwDAAP2BP0qU9wEmlPcBHJUZHJUPHJUFFJT+wHZFTgkASwEAASeBdgDAAP2BSwEAASeBdgAASwEAASfAAH5XAABdA8AAuWQBYAPAAP5+AMAAuXs+A06VfZWVAADAAH5YXQPAAP1tAltbATKVl1tbAyeWcyfAAH5LJ7QSFpXYFpXPLsAAfkXAAOkKwADp8cAAffDAAOoQJ4P0gpXywHZBNE6WFJYmAACkbmADwADqCgEflizAAOopAgACFpZcFpZTLsAAfkXAAOkKwADp8YNUwADqDoSWZMB2RgwASpaFARyXExyW1RyWoBaWjC7AAHhkwADpCsAA6fLAAH3cAgACFpatLsAAfMDAAOkKwADp84WWt8B2RlcAwADp3oGvAQFbATSW2gOW2pcGAAAAAQEBluQAAACDV2ADwADqQwAAWwFKlvEBHJb6hpbxwHZG5cAAfkkAAAAAwADqSwDAALl7ga8BAWADwAD+fgE0lxgDlxiXwAAAAAEBAZchAAAAgmRbAABdA8AAuWQBYAPAAP5+AT4CSZcxIRyXRByXOYaXNcB2Ry5LAQABJ4F2AABIAQABKwDAAP3xPgFKl1kBJpdZARyXbhyXZIaXYMB2Ry5LAQABJ4F2AABLAQABJ8AAflcAAF0DwAC5ZAFgA8AA/n4/PTCXkRyXrByXpByXm4aXl8B2Ry5LAQABJ4HHAABLAQABJxIAAEsBAAEnnzoAAADAALl7BsAA6fmCf5fQl+GbQQAAwAB+TMAA6QoAAAABA5f8m0EAAAABAQGYBAAAAMAAfkpgA8AA/n4AAF0DwAC5aAFgA8AA6kMBPgFJmBgWmCmAmBzAdkf+g7fAAP6FPghOmFKYWQAAg/RdA8AA/W0CYAPAAP5+WwEcmFsuwAB+TcAA6QoAAAAAwADp+j0cmHeBmHHAdkg1gL8CAAInwAB8ZRyYlhaYkBaYhy7AAH5FwADpCsAA6fGD9MAA6hJLAQABJ8AAfGUAwAD9gQDAAP2CPRyYsYGYq8B2SDWAvwIAAifAAH5XgJjDwHZH/gDAAP2CPRyY3YGY18B2SDWAvwIAAifAAH5ZHJkFFpj/Fpj2LsAAfkXAAOkKwADp8YP0wADqEksBAAEnwAB+WQDAAP2BAMAA/YJOmSeZMQAAwAB+Wl0DwAD9bQJbWwEymTNbWwMnlnMnwAB+TCe0EhaZfRaZdC7AAH5FwADpCsAA6fHAAH3wwADqECeD9IGZl8B2SDVJma4hHJnLHJnBFpm7FpmyLsAAfkXAAOkKwADp8YP0wADqEksBAAEnnwYAwAD9gUgBAAErAMAA/fE+AT0cmfEcmeeCmd7AdkkKSwEAASeD9ADAAP2BgL8CAAInnwYcmgwWmgYWmf0uwAB+RcAA6QrAAOnxg/TAAOoSSwEAASefBgDAAP2BAAA/TpopmjcAAMAAfltgA8AA6goBH5pHwADqKQIAAhaabBaaYy7AAH5FwADpCsAA6fGDVMAA6g6CmnTAdkkKAEqahgEcmpYWmo0uwAB4ZMAA6QrAAOnywAB93AIAAhaaoy7AAHzAwADpCsAA6fODmq3AdkndAMAA6d4+AUqbBwEcmxcWmw4uwAB4ZMAA6QrAAOnywAB93AIAAhabJC7AAHzAwADpCsAA6fMWmy4uwAB+RcAA6QrAAOnxAMAA6d4GwADp+oJ/m0abW5x0AADAAH5NwADpCgAAAAEDm2ecdAAAAAAAAABdA8AA/W0CYAPAAP5+WwE+AUmbcBybhBabfRabdC7AAH5FwADpCsAA6fGWc8AA6hFIAQABJ8AAfkMAwAD+jT4BSpuiATKbumADwAD+flsBJ8AAflwcm9gWm9IWm8kuwAB+RcAA6QrAAOnxg/TAAOoSSwEAASfAAH5cAMAA/YE+AkAcnBMWnAwWnAMuwAB+RcAA6QrAAOnxlnPAAOoRSAEAASefIgDAAP6NnAOcIABKnCkBMpxBYAPAAP5+WwEnwAB+XRycXRacVxacTi7AAH5FwADpCsAA6fGD9MAA6hJLAQABJ8AAfl0AwAD9gQAAdjrYAHY+uwB2QKwAdkfYAHZKmAB2S6sAAAAFAsAA6f2CgID0gPmBJwvAAH5eAAABYAHAAP3kAAAGBMAA6f+CgID5gPkJJwBgA8AA/JcABMAA6gGCgID5gPkJKMAA6QoAYAPAAP5+AATAAOoCgoCA+YD5BikAXQPAAP07AWADwADp/QFqAF0DwAD9OwFgA8AA6f3AAauFBMAA6gOCgIEHgQcGwAB+XwBgA8AA6f0BagBgA8AA6f3AAakvBMAA6gSCgIEQgRAGwAB+YABgA8AA6f0BagBgA8AA6f3AAalIBMAA6gWCgIEegR4GwAB+YQBgA8AA6f0BagBgA8AA6f3AAalhAQXAAOoJgoCA+YD5gScBAAADgPmBJwAAAAICAoD5AAAEJ2ADwAD8lwCA+QAABChgA8AA/n4AAGADwADp/QE/AwgAwADp/4AAwHZMywgAwADqAYEAwHZM2AkAAMAA/foAAAAAAQbAAOoHgoCA+YD5gScAACMAAAABA4D5gScAAAAAAAAAYAPAAP5+AUoAAQ8ALsAA6gEAAHZNEwB2TUQAAAABAsAA6gqCgIEqgTCd0gOH9gAAAWABwAD95AAACATAAOoNgoCBVoGBCcAAfmLAAOkKAF0DwAC5iAFgA8AA6kMBHoFnwAC5iwABYAPAAOpDAAAEwADqDoKAgg2CExiDVABgA8AA6Z0ABMAA6g+CgIJVglkJgpQAYAPAAOn9AATAAOoQgoCCkoKYCcAAffAAWwAEwADqEYKAgqqCsAmWcwBgA8AA/n4ABMAA6hKCgIK/gtEJg/QAXQPAAP1tAltbAR6CzMAA/XQAAltbAAAEwADqE4KAgt+C8QmBdgBdA8AA/W0CW1sBHoLswAD9dAACW1sAAATAAOoUgoCC/4MQCYHHAF0DwAD9bQJbWwEegwvAAP10AAJbWwAABwXAAOopgoCGNIY0hy8AwAB+Y8AA6QoAA4ZPhy8AAAACAgKGVwAAAINUYAPAAOmdAIZjAAAAgKtdA8AA/W0CW1sAAGADwADqCgE+AUmG5iEchvgchu2BhurAdk6ZSwEAASeD9ADAAP2BSAEAASsAwAD98T4BPRyHEBaHCS6D9MAA6hKApQEAASaHGgEchxqBhxfAdk6ZSwEAASeD9ADAAP2BXQPAAP1tAltbAMAA/Yk/BQgAwADqDoCGecB2TosIAMAA6g9qhpxgA8AA6f3AAakvCADAAOoQHIa5gYa2wHZOmUsBAAEntBIAwAD9gQgAwADqESaG0AEchtWBhtLAdk6ZSwEAASeWcwDAAP2BYAPAAP5+CQGGNMAA/foAAAAABcAA6iqCgIdrh2uIawDAAH5kwADpCgADh4uIawAAAAICAoeTAAAAg1RgA8AA6Z0Ah58AAACAq10DwAD9bQJbWwAAYAPAAOoKAT4BSYgiIRyINByIKYGIJsB2T7hLAQABJ4P0AMAA/YFIAQABKwDAAP3xPgE9HIhMFohFLoP0wADqEoClAQABJohWARyIVoGIU8B2T7hLAQABJ4P0AMAA/YFdA8AA/W0CW1sAwAD9iT8FCADAAOoOgIe1wHZPqggAwADqD2qH2GADwADp/cABqUgIAMAA6hEmh/UBHIf6gYf3wHZPuEsBAAEnlnMAwAD9gWADwAD+fggAwADqECsJAYdrwAD9+gAAAAAFwADqK4KAiKqIqolzAMAAfmXAAOkKAAOIxIlzAAAAAgICiMwAAACDVGADwADpnQCI2AAAAICrXQPAAP1tAltbAABgA8AA6goBPgE9HIlaFolTLoF2wADqE4ClAQABJolkARyJZIGJYcB2UMJLAQABJ4F2AMAA/YFdA8AA/W0CW1sAwAD9iQUIAMAA6g6AiO7AdlC0CADAAOoPaokRYAPAAOn9wAGpYQgAwADqEByJL4GJLMB2UMJLAQABJ7QSAMAA/YEIAMAA6hErCQGIqsAA/foAAAAABcAA6iyCgImyibKKeADAAH5mwADpCgADicuKeAAAAAICAonTAAAAg1RgA8AA6Z0Aid8AAACAq10DwAD9bQJbWwAAYAPAAOoKAT4BPRyKYBaKWi6Bx8AA6hSApQEAASaKagEcimqBimfAdlGYSwEAASeBxwDAAP2BXQPAAP1tAltbAMAA/YkFCADAAOoOgIn1wHZRiggAwADqD2qKGGADwADp/cABqWEIAMAA6hAcijaBijPAdlGYSwEAASe0EgDAAP2BCADAAOoRKwkBibLAAP36AAAAAAXAAOotgoCLPYs9i8UAwAB+ZwADi06LxQAAAAEBAYtWAAAAlnNgA8AA/n4AAGADwADqCgE/BQgAwADqDisIAMAA6hGAi4bAdlJcCADAAOoPaoupYAPAAOn9wAGpLwgAwADqECcACQGLPcAA/foAAAAABcAA6i6CgIvKi8qMfgCXHwADi9mMfgAAAAICAovfAAAEg1RgA8AA6Z0Ai+sAAACArGADwAD+/wAAYAPAAOoKAT4BPRyMXxaMWC6D9MAA6hKApQEAARaMaoGMZsB2UtnAAHzswAD/DgDAAP2JBQgBwADqDoAAwHZSywgAwADqD2qMC2ADwADp/cABqS8IAMAA6hAnAAgAwADqER6MOsAA6hwBAAGBjE3AdlLZAAkBi8rAAP36AAAAAAXAAOovgoCMg4yDjX8AwAB+aAADjJWNfwAAAAMDA4ybAAAEg1RgA8AA6Z0AjKcAAACArGADwAD+/wCMuwAAALFaYAPAAOnWAABgA8AA6goBPgI9HI0zFo0sLoP0wADqEoClAQABFo0+gY06wHZTk8AAfOzAAP8OAMAA/Yk9HI1aFo1ULoP0wADqEoC/AgACJ8AAfGUWjXKCjWrAdlOhwAB+NcAA6dwAwAD9ggUIAcAA6g6AAMB2U4UIAMAA6g9qjN9gA8AA6f3AAakvCADAAOoQJwAIAMAA6hEejQ7AAOocAQABgY0hwHZTkwAJAYyDwAD9+gAAAAAOBsAA6haCgIGFgY6BsQEAwAB99QAAAAEDgZiBsQAAAAAAAABgA8AA+tEBSoGbARaBphaBmy7AAH5iwADpCsAA6g3AAG+ewAC5jgbAAOoXgoCB0IHlggIBAINXAAAAAQOB7oICAAAAAAAAAF0DwAC5aAFgA8AA6kMBSoHxARaB/BaB8S7AAH5iwADpCsAA6g2B3sAAuY0GwADqGYKAgxWDHYX2BAHAAH5pAAAAAQODMIX2AAAAAgICgzgAAACDVGADwADpnQCDRAAAAICrXQPAAP1tAltbAABgA8AA6goBPgJJg08cg1eBg1PAdlUkh1gBAAEntBIAwAD9gD4FToN4g3sAAbQSWwEcg4CBg33AdlUkSwEAASe0EgDAAP2BSYOOIiIhHIOVgoOSwHZVXEgBAAErAMAA/fEAISWDo4KDoMB2VVxgA8AA/a4AISWDsYKDrsB2VVxgA8AA/n4+AT0wg8ceg9HAAPxiAQABJ8AAfmoAP0mEFRyEHYGEGcB2VSSHWAEAASeWcwDAAP2APgFKhD4BH4RJwADqKQIAAoCEZcB2VRaBhG3AdlUkAD9JhIEchImBhIXAdlUkh1gBAAEngXYAwAD9gD4BSoSqAR+EtcAA6isCAAKAhNDAdlUWgYTYwHZVJAA/SYTsHIT0gYTwwHZVJIdYAQABJ4HHAMAA/YA+AUqFFAEfhR/AAOosAgACgIU5wHZVFoGFQcB2VSQAP0mFWhyFYoGFXsB2VSSHWAEAASeWcwDAAP2APgFKhYEBH4WMwADqKgIAAoCFrcB2VRaBhbXAdlUkAD89MIXFHoXPwAD8YgEAASfAAH5rAAbAAOocgoCKfYqLizgAAcAAfmzAAOkKAAAAAQOKnYs4AAAAAQEBiqIAAACArGADwAD+/wAAYAPAAP5+AT4DSYqtHIq1gIqxwHZW80gBAAErAMAA/yY+AUqKxgEnAD9JitscivcWivAWiuOAit/Adlbzgx3AAP8NYcAA/WtIAQABkwDAAP27PgFKiwUBJwA/SosaARyLMRaLJYCLIcB2VvODHcAA/w1LAQABkwDAAP1KBsAA6iCCgI2EjYiNzwAAwAB+bQAAAAEDjY2NzwAAAAAAAABgA8AA/v8BPgFKjZYBHo2hwAD/cgIAAAJOFo2rLpZzwADqEcAAfOwmjcQBFo3ELoP0wADqEl0DwAD9bQJgA8AA/n5bBsAA6iGCgI3UjdyOAgAAiOEAAAABA43ijgIAAAAAAAAAWwE+AT0wjesnnPwGwADqIoKAjgeOD5BeAADAAH3xAAAAAQOOHJBeAAAAAQABjiIAAADAAH5uXQPAAP1tAltbAWoAYAPAAP2heQBbAT4ETo5Kjk8AAIJkXQPAAP1tAltbATKOUVtbAifAAH3QJ8AAfdEntBIWjmouwAB98MAA6hBBR453Fo5/LoKUwADqDwICjp5qjp5gA8AA6f3AAakvjr5qjr5gA8AA6f3AAalIAD4DPRyO2IGO1MB2WFOAvwIAAieWcxaO5S6Wc8AA6hEAwAD9gkmO9RaPABaO+S6D9MAA6hKDt8AA/ZM+AT0cjxyBjxjAdlhTgL8CAAIng/QWjykug/TAAOoSAMAA/YI/Qo9DAAGPYWqPYWADwADp/cABqWEAPgJJj3MWj34Wj3cugXbAAOoTg7fAAP2TPgE9HI+agY+WwHZYU4C/AgACJ4F2Fo+nLoF2wADqEwDAAP2CP0mPwRaPyxaPxS6Bx8AA6hSDt8AA/ZM+AT0cj+eBj+PAdlhTgL8CAAIngccWj/MugcfAAOoUAMAA/YI/SZAOIRyQHICQEsB2WDFIAQABKwDAAP3xPgE9HJAygZAtwHZYU4ClAQABgJA5wHZYMQDAAP2JP0qQTwGBkFbAdlhTBsAA6h2CgJGJkZaShgAAwAB+b8AA6QoAAAABA5GkkoYAAAABAQGRqgAAAINhXQPAAP07AVsAAF0DwAD9OwFgA8AA/n4BPgRJkbYckb+AkbrAdloHSAEAASsAwAD9ZT4BSpHQASs/TpHrkfQAAMAAfnBdA8AA/TsBYAPAAP5+AR6R+sAA9pIBAWADwAD+fgEWkgyAkgfAdloHYcAA/WsARZIZAZIikiQAAGJgA8AA/JcBkwEckiuCkinAdlqEYwEAARaSMoCSLcB2WgdhwAD9awDAAP3FAYqSOsB2WoQckjuCkjrAdlqEZAEAAZQAwAD9vT4BPRyST4GSR8B2WkiAvwIAAoKSUMB2WoQckl0cklmAklXAdloHSwEAAYKSWsB2WoQAwAD9SiMAAAAAwAD98gDAAP1LSpJzAYGSesB2WkgGwADqI4KAkouSnJWWAADAAH43AAAAAQOSqZWWAAAAAQEBkrMAAADAAHUxYAPAANBrAABdA8AAuWgBYAPAAOpDAT4HTpLJktUAAcAAdS9gA8AA0HwBHpLbwADQfgAAAAA9F5L9gZLxwHZbZVU0kwcDkweTVAAAAAEBAZMIAAAAgJZbAABgA8AA/aEBPgI9HJMjgZMXwHZbZYKMAAAAAMAA0II9HJMyLsAAfnHAAOkKAQABgpNHwHZbmwDAAOofwADQgE6TXpNjAACDaF0DwAD9OwFgA8AA/n4BHJNlLsAAfm/AAOkKAQABHJOAFpN7FpN0LoP0wADqEoNowAD9j4CtAQAAAYVuKsAA/Q8AwADqHU6TopOpAAApXQPAAP07AWADwAD+fgEck6suwAB+b8AA6QoBAAEck8gWk8EWk7oug/TAAOoSKcAA/ZCArQEAAAGFbirAAP0PAMAA6h1Ok+qT8gAAg1ZdA8AA/TsBWwE1k/gAAAEAXQPAAP07AVsBHpP4wAD2kgEBWwE3BgA1AAAAAQBbARyUCISUBsB2XJCAvwIAApOTAMAA/Us1AAAAAQBbARyUO4SUOcB2XJCAvwIAApQWlE2BlEHAdltlwAB1McAA0IQAwAD9SzUAAAABAFsBHJRehJRcwHZckIC/AgAClRaUZC7AAH3wwADqEADAAP1LNQAAAAEAWwEclHOElHHAdlyQgL8CAAKWFpR5LpZzwADqEQDAAP1LNQAAAAEAWwEclIiElIbAdlyQgL8CAAKXgpSOwHZb5ADAAP1LNQAAAAEAWwEclJuElJnAdlyQgL8CAAI3BYOUocB2XDIAwAD9S4QAwHZckEmUrSEelLLAAOlHAgACgJTMwHZbQ4SU1sB2XH4APgI9HJT0gZTowHZbZYKMAAAAAMAA0II9HJUOFpUDLsAAfmLAAOkKwADqDcAAb5kBAAEelRvAAOpIAQABJJVsAyfAAH5yFpVYLsAAffDAAOoQJ8AAfnMAAMAAuZA/SpV6ARaVjBaVgS7AAH5iwADpCsAA6g2B3sAAuY0GwADqHoKAlvuXAJhlAADAAH50wADpCgAAAAEDlxyYZQAAAAEBAZckAAAAlnNgA8AA/n4AAGADwAD60QE+AUeXMoCXOsB2XlYCCJdPapdPYAPAAP5+wAGrXpdoapdoYAPAAP5+wAGrfJeGapeGYAPAAP5+wAGrY5ehapehYAPAAP5+wAGraJe8ape8YAPAAP5+wAGrcpfaapfaYAPAAP5+wAGrd5f5apf5YAPAAP5+wAGrbZgWapgWYAPAAP5+wAGrmQA+AUqYKwEpAAE+AUqYTwEqBsAA6iSCgJhqmHubyAAAwAB9+wAAAAEDmIObyAAAAAAAAABdA8AAuWgBYAPAAOpDAT4ITpiSmJ4AAcAAdS9gA8AA0HwBHpikwADQfgAAAAA9F5jGgJi6wHZfN1U0mNADmNCZHQAAAAEBAZjRAAAAgJZbAABgA8AA/aEBPgI9HJjsgJjgwHZfN4KMAAAAAMAA0II9HJj7LsAAfnHAAOkKAQABgZkQwHZfbQDAAOofwADQgE6ZJ5ksAACDaF0DwAD9OwFbARyZOhaZNRaZLi6D9MAA6hKDaMAA/Y+ArQEAAAGFbirAAP0PTplbmWIAACldA8AA/TsBWwEcmXIWmWsWmWQug/TAAOoSKcAA/ZCArQEAAAGFbirAAP0PSZmPIRyZlC7AAH50wADpCgEAARaZsS6Wc8AA6hEAwADqHj4CPYmZwsB2X7YcmckuwAB+b8AA6QoBAAGBmdjAdl+2AMAA6h09ipnlwHZf6xyZ7i7AAH5vwADpCgEAAYKZ/cB2X+sAwADqHT9OmheaHwABg1ZdA8AA/TsBWwE1miUAAAEAXQPAAP07AVsBHpolwAD2kgEBWwE3BgA1AAAAAQBbARyaNYOaM8B2YJuAvwIAApOTAMAA/Us1AAAAAQBbARyaaIOaZsB2YJuAvwIAApQWmnqAmm7Adl83wAB1McAA0IQAwAD9SzUAAAABAFsBHJqLg5qJwHZgm4C/AgAClRaakS7AAH3wwADqEADAAP1LNQAAAAEAWwEcmqCDmp7AdmCbgL8CAAKWFpqmLpZzwADqEQDAAP1LNQAAAAEAWwEcmrWDmrPAdmCbgL8CAAKXgZq7wHZftgDAAP1LNQAAAAEAWwEcmsiDmsbAdmCbgL8CAAI3BYKazsB2X+sAwAD9S4MAwHZgm0ma2xya3y7AAH50wADpCgEAARaa/C6Wc8AA6hEAwADqHj4BPR6bRsAA6UkBAAGDm2PAdmCJAD4BPR6bgMAA6UgBAAGDm5fAdmCJAEqbrAEWm74Wm7MuwAB+YsAA6QrAAOoNgd7AALmNBsAA6h+CgJvNm9Kc1AAAwAB+ccAA6QoAAAABA5vmnNQAAAABAQGb7wAAAINXWwAAXAE+Akmb/xycDICcA8B2YjJIAQABKwDAAP3xPgJAHJxpFpxkLoKUwADqD0gBAAFqnHhgA8AA6f3AAalIAMAA/fGcZJyEAEqcjQErPz0cnK8WnKQuwAB+YsAA6QrAAOoNwABvmQEAAR6cwcAA6kkBAAGAnMbAdmIyAADAALmQBsAA6iWCgJzZnN6dTAAAwAB+QgAAAAEDnOmdTAAAAAEBAZzxAAAAg1dgA8AA/n4AAFwBPgE9HJ0MFp0BLsAAfmLAAOkKwADqDcAAb5kBAAEfnRnAAOpNAgACap02YAPAAOo2wAGpeoCdPsB2YtwAAMAAuZAGwADqJoKAnVGdVp3QAADAAH38AAAAAQOdZp3QAAAAAgICnWsAAACCl2ADwAD8lwCdeAAAAJ86YAPAAP5+AABcAT4BPRydhy7AAH5CAQABHp2TwADpSgMAAi6AnajAdmNQAZ86JJ3KAxaduS6Wc8AA6hEng1uBncLAdmNeAMAA6iUAAHZUXwB2VKgAdlT0AHZWzQB2V30AdlfjAHZYDwB2WeEAdlshAHZeMAB2XwMAdmIMAHZiugB2Yy4AdmOvAAAADgLAAOowgoGA9IEDgX8HwAB+dQAAAWABwAD95AAAAAEFwADqNQAAAAAEAAADAAAAAAAAAAAAYAPAAOowAT8BCQEAwAD9+gAAAAACBsAA6jKCgYEVgSaBVgACwAB93AAAAAEDgTKBVgAAAAICAoE9AAAAwAB8pGADwADpaACBTgAAACJgA8AA6goAAF0DwAC5aAFgA8AA6kMABsAA6jOCgYFagV+BfQACwAB9/gAAAAEDgWyBfQAAAAEBAYF1AAAAImADwADqCgAAXAAAAHZkOgB2ZIgAdmS6AAAAAgLAAOo2goGBgoGHgmALwAB+dgAAAWABwAD95AAABgTAAOo4goGBh4GHCScAYAPAAPyXAATAAOo6goGBh4GHCSjAAOkKAGADwAD+fgAEwADqO4KBgYeBhwYpAF0DwAD9OwFgA8AA6jYBagBdA8AA/TsBYAPAAOo2wAGrngTAAOo8goGByIHIBpv/AGADwADqNgFqAGADwADqNsABqXoEwADqPYKBggOCAwaXIQBgA8AA6jYBagBgA8AA6jbAAamTBMAA6j6CgYJUglQGwAB+dwBgA8AA6jYBagBgA8AA6jbAAamsAQXAAOpCgoGBh4GHgmABAAADgYeCYAAAAAICAoGHAAAEJ2ADwAD8lwCBhwAABChgA8AA/n4AAGADwADqNgE/AwgAwADqOIAAwHZlyggAwADqOoEAwHZl1wkAAMAA/foAAAAAAQbAAOpAgoGBh4GHgmAAACMAAAABA4GHgmAAAAAAAAAAYAPAAP5+AUoAAQ8ALsAA6joAAHZmEgB2ZkMAAAABAsAA6kOCgYJjgmmJvwPAAH5hAAABYAHAAP3kAAACBMAA6kWCgYKQgpQJgmsAYAPAAOo2AATAAOpGgoGCnoKlCaf3AFsAAgXAAOpNgoGC74LvhBcAAAADgveEFwAAAAICAoL9AAAEgmtgA8AA6jYAgwgAAASn91sAAGADwADqQwE+AUAchBA0gx4Dgx6EEAAAAAAAAABgA8AA+tEBPgFHgykWgzEugmvAAOpFAgGDWmqDWmADwADqNsABqXoAPgFKg2wBJYN7FoNzLqf3wADqRmADwAD+fgKDp2qDp2ADwADqNsABqZOD0GqD0GADwADqNsABqawAPgFKg+YBJYP1FoPtLqf3wADqRmADwADjuiAAAAAAAIMehBIAAwgBwADqRYAAwHZmsQgBwADqRoEAwHZmvwkBgu/AAP36AAAAAAXAAOpOgoGEc4RzhMsAgmQAA4SAhMsAAAABAQGEiAAAAICWYAPAAP3kAABgA8AA6kMBPwEKAISXwADqTQIAAmqEsGADwADqNsABqXochL1qhLhgA8AAyGeIxZV6AQABgITEwHZnqwDAAMhuAAMGwADqSIKBhNCE2IWRBAGlpQAAAAEDhO6FkQAAAAEBAYT2AAAAImADwAD+fgAAYAPAAOpDAT4BSoUFAR+FEMAA6k4BAAEyhR5gA8AA/n5gA8AA/n4EJ4KUJ8AAfngntBInACeCayfAAH55JyKAhX7AdmgcAAbAAOpJgoGGWIZgiFQEAZZaAAAAAQOGbYhUAAAAAQEBhnUAAACAlmADwAD95AAAYAPAAOpDAT4BSYaCJYaMgIaGwHZokGADwAD+fj4BSoafAR+GqsAA6k0CAAJqhsdgA8AA6jbAAal6FIbPwHZokAABYAPAAP5+AEmG4iWG7ICG5sB2aJBgA8AA47o+AUqHAgEfhw3AAOpNAgACaocqYAPAAOo2wAGpkxSHMsB2aJAAAWADwADjugBJh0Ulh0+Ah0nAdmiQXQPAAP07AVs+AkAch3QWh20Uh2fAdmiQAAFdA8AA/TsBW2HAAP1rSAEAAZQAwAD9u4dnh3gASoeBAR+HjMAA6k0CAAJqh7RgA8AA6jbAAamsJofJAByHxRSHwMB2aJAAAV0DwAD9OwFbSwEAAZMAwAD9SmADwADjugBJh+Mlh+2Ah+fAdmiQYAPAAOpDPgFKiAIBFIgJwHZokAABYAPAAOpDPgE9MIgjJIhKAifAAH56gIhDwHZokAbAAOpLgoGIh4iPib0AAMAAfkkAAAABA4iZib0AAAAAAAAAWwE+AUeIohaIqi6Ca8AA6kUDAYjRaojRYAPAAOo2wAGpegA+AUqI4QEciO1qiOhgA8AAyGeIxYchAQABJoj0ARaI9C6n98AA6kZgA8AA/n4AwADIbQGJHWqJHWADwADqNsABqawAPgFKiTEBHIlIHIk9aok4YAPAAMhniMXAAHQlAQFdA8AA/TsBYAPAAPyXAWqJQmADwADJ7IGJAMAAx/eHIQEAASaJTwEWiU8up/fAAOpGXQPAAP07AWADwAD8lwDAAMf2AYl4aol4YAPAAOo2wAGpkwA+AT0wiYgnwAB+ewAAdmf8AHZocAB2ae0AdmryAAAAAwLAAOpPgoKBQoFIg783wAB+fAABAACD0GADwAD95AFbAWABwAD95AABXQHAAMFiAV8DAAAAAQXAAOpRAAAAAAUAAAMAAAAAAAAAAABdA8AA6k8BXwMAAAE/AQkAAMAA/foAAAAAHgbAAOpTgjKCVYJhgosAAJZkAAAAAQOCaIKLAAABAACXJWADwAD95AFbAAAAAF0DwAD8+QFfAwEAAUqCbgEegnfAAP0BAQJfAwAAXwMBAAEuAAbAAOpUgjKCj4KbgtIAAICrAAAAAQOCoYLSAAABAACCemADwAD95AFbAQEBgqQAAACBpmEDAV8DAABfAwEAAABdA8AA/PkBXwMBAAFKgrUBHoK1wADNnQICXwMAAF8DAQACLoCC0MB2a+oABsAA6lWCMoLXguODGAAAgaUAAAABA4LogxgAAAABAQGC7gAAAIGmYQMBXwMAAGADwAD60QAAXQPAAPz5AV8DAAABSoL/AR+C/8AAzc4CAV8DAAACLoCDFsB2bEkABsAA6laCMoMdgymDVQAAlnIAAAABA4M1g1UAAAEAAIJ6YAPAAP3kAVsAAAAAXQPAAPz5AV8DAQABSoM7AR+DO8AAzqwBAV8DAQABLgAGwADqV4Iyg1qDZoOwAACElQAAAAEDg2+DsAAAAQAAgnpgA8AA/eQBWwEBAYN8AAAAgaZhAwFfAwAAXQPAAPz5AV8DAQAAAF0DwAD8+QFfAwEAAUqDkwEfg5PAAM3iAgJfAwAAXwMBAAIugIOuwHZs/wAGwADqWIIyg7WDwYUJAACWaQAAAAEDg8uFCQAAAAEBAYPYAAAgg9tdA8AA/PkBXwMAAAAAXQPAAPz5AV8DAAABPgNOhFeEXAAAmbBdA8AA/PkBXwMAAAEuSYRoJYRxgYRswHZtiF0DwADNVQFfAwAAPgFKhJgBHoSYwADOhAIBXwMAAAIUhMTAdm2IAQFdA8AAzVUBXwMAAICEysB2bWUAP0qE3AEfhOPAAM6PAgFfAwAAAi6AhP/Adm1lAAbAAOpZgjKFDoUThYUAAIMcAAAAAQOFG4WFAAAAAQEBhSMAAACWUmADwAD95AAAYAPAAPrRAT4CRoUyAIU5AAAAg1NfAwAAAC4+AUmFTByFUoGFUMB2bj1IAQABgIVVwHZuIQDAAP3xSoVeASk/SoV1ASoGwADqWoIyhYqFj4XWAACD/QAAAAEDhZaF1gAAAAEBAYWcAAAAgaZhAwFfAwAAXAAAXAE+AUaFsACFtwAAAJZSXwMAAAAuPRyFyYCFyMB2bpQgAQABgYXKwHZurQAABsAA6luCMoXbhd2HDwAAlmwAAAABA4Xjhw8AAAABAQGF5gAAIIcuYQMCXwMAAF8DAABfAwAAAABfAwAAAT4FToYVhh4AAFxdA8AA/TQBXwMAAAEWhiUuXMAA/RtJhjMhHIZBgYY4wHZvEl0AAAAAwAD9Nj4BPTCGVR6GcMAAzrkAAAAAP06GiYaPAACAll8DAAABFoaagYaRwHZvEl7AAP04Q4anHIa3gYauwHZvEl0AAAAAwAD9Nj4BPYqGy8B2b1gchtqAhtPAdm7yIAIAAoKG28B2b1gWhuuBhuLAdm8SXsAA/TgAAEqG/wGChwbAdm9YBsAA6lyCMocUhxaHxgAAg18AAAABA4cdh8YAAAEAAIJ6YAPAAP3kAVsCAgKHIAAAAJZoXwMBAACHMAAAAIcuYQMCXwMBAF8DAABfAwEAAABfAwEAAT4DTodfh2UAAICWXwMBAAGAh2fAdm/xRod5AIeAAAAAllJfAwAAAC49ioeRwHZwHRyHoIGHmcB2b/0gAgACgoehwHZwHYOHqMB2cDUAAEqHtgGCh73AdnAdBsAA6l2CMofLh9CIRwAAlmIAAAABA4fViEcAAAABAQGH2wAAAIGmYQMBXwMAAGADwAD60QAAYAPAAPrRAT4CRofvAIf2AAAAllJfAwAAAC4+AUmIDyEciBWAiBTAdnCTIAEAAYGIFsB2cLYAAEqIIAEqP0qIOAEpBsAA6l6CMohMiFOKVQAAWAAAAAEDiFeKVQAAAAEAAYhgAAAAgbFgA8AA/n4BaohsYAPAAP5+hCgAYAPAAP5+AT4FToiDiIwAAFxdA8AA/TQBXwMAAAEWiJMuXMAA/RtJiKEhHIivgYimwHZxLl0AAAAAwAD9NkqIuwEnAD9OiNeI3gAAgo9gA8AA/sgBH4jgwAD+5wAAAABJiPQiHIkCgIj4wHZxCkgBAAErAMAA/o0BHIkXgIkNwHZxCkgBAAEnAADAAP6NPgFEiSY+AT0ciTqCiTPAdnFpgo4BAAEkiVUBFolMgYlDwHZxLl7AAP04AMAA/twciXCBiWfAdnEuXQAAAADAAP02PgI9HImXgomQwHZxaYKOAQABJImyARaJqYGJoMB2cS5ewAD9OADAAP7cQ4m7HInLgYnCwHZxLl0AAAAAwAD9Nj4CPRyJ6IKJ4cB2cWmCjgEAAYCJ7sB2cQoAwAD+3D0cigmCigLAdnFpgo4BAAEkiiQBFoobgYoSwHZxLl7AAP04AMAA/txKijkBHIpHgopAwHZxaSMAAAAAwAD+4QbAAOpfgjKKWopfitkAAIHWAAAAAQOKYorZAAAAAQEBimgAAACXK2EDAV8DAABgA8AA+tEAAGADwAD60QE+AkaKfwCKhgAAAJZSXwMAAAAuPgFJip8ciqeAiqPAdnKwIAEAAYGKqMB2ctMAAEqKsgEpP0qKyQEqBsAA6mCCMoreiuaLNAAAgK0AAAABA4rsizQAAAABAAABivMAAACFbmADwAD60QFqiv5gA8AA+tF3XQPAAP07AV8DAAABSosOAR6LBcAA/UECAV8DAAABLgGFboCLK8B2cygGwADqYYIyizmLQItcAACVSQAAAAEDi0WLXAAAAAAAAABdA8AA/i8BXwMAAAFKi0sBHotIwADBqAEBXwMAAAEuAAbAAOpsgjKLYYtpjBQBAGEAAAABA4twjBQAAAAAAAAAYAPAAPyXAT4FQCEli4IuXQPAAM1VAVuLfYudAE6LqIuuAACA7mADwAD8lwGTTovAi8MAAMAAcjxdA8AA/TQBWwEWi8UuXMAA/RtDi9Mci92Bi9rAdnP4XQAAAADAAP02PgE9iIvxwHZz5xyL9oCL8cB2c+dkAQABlADAAP29SowEAYCMC8B2c+cGwADqbYIyjBmMIoxBAQCBVQAAAAEDjCqMQQAAAAAAAABgA8AA+tEBSowtASEcjDcWjC4uXMAA/RtdAAAAAMAA/TYGwADqboIyjEaMT4xlAQCDtwAAAAEDjFqMZQAAAAAAAABgA8AA+tEBSoxdASEWjF4ugVXAAMF+BsAA6mKCMoxqjHaMswAAlnAAAAABA4x6jLMAAAABAQGMfwAAAIDuYAPAAPyXAABdA8AA/PkBXwMAAAE+AUqMjAEejJPAAM32AgFfAwAAAi6AjKnAdnTsAAbAAOpjgjKMuIzEjRMAAJZxAAAAAQOMzY0TAAAAAQEBjNMAAACXK2EDAV8DAABgA8AA+tEAAF0DwAD8+QFfAwAAAT4BSozoAR+M78AAzhQCAV8DAAACLoCNCsB2dUQABsAA6mSCMo0YjSSNYQAAllsAAAABA40ojWEAAAABAQGNLQAAAIDuYAPAAPyXAABdA8AA/PkBXwMAAAE+AUqNOgEejUHAAM4nAgFfAwAAAi6AjVfAdnWjAAbAAOplgjKNZo1yjcEAAJZvAAAAAQONe43BAAAAAQEBjYEAAACXK2EDAV8DAABgA8AA+tEAAF0DwAD8+QFfAwAAAT4BSo2WAR+NncAAzkwCAV8DAAACLoCNuMB2dfsABsAA6m+CMo3GjcyOWgEAgx4AAAABA43SjloAAAAAAAAAXwMAAAE+A06N5I3nAADAAHI8XQPAAP00AV8DAAABFo3pLlzAAP0bSY33IRyN/4CN/MB2dmNdAAAAAMAA/TY+AT0wjhMeji7AAM65AAAAAD9KjkUBFo5PgI5MwHZ2Y17AAP04BsAA6nCCMo5fjmWPPQEAgeoAAAABA45qjz0AAAAAAAAAXwMAAAE+BU6OfI5/AADAAHI8XQPAAP00AV8DAAABFo6BLlzAAP0bSY6PIRyOl4COlMB2duddAAAAAMAA/TY+AT0wjqsejsbAAM65AAAAAD9Ojt8AAACBdl8DAAAARI7rPgE9iY72wHZ3MBaPAoCO/8B2dudewAD9OByPG4CPGMB2duddAAAAAMAA/TZKjywBgY8zwHZ3MAbAAOpxgjKPQo9IkB0BAIDDAAAAAQOPT5AdAAAAAAAAAF8DAAABPgVOj2GPZAAAwAByPF0DwAD9NAFfAwAAARaPZi5cwAD9G0mPdCEcj3yAj3nAdnefXQAAAADAAP02PTCPiB6Po8AAzrkAAAAAP06Pto+9AACBdl8DAAABFo/CgI+/wHZ3n17AAP04SY/PHI/WgI/TwHZ3n10AAAAAwAD9Nj0wj+Iej/3AAM66AAAAAD9KkAwBgZATwHZ35gbAAOpmgjKQIpAkkPcAAJZmAAAAAQOQLpD3AAAAAgEBkDQAAACXK2EDAV8DAABgA8AA+tEAAZBGAAAglmdhAwBfAwAAAWoAYAPAAP2heV8DAAABPgNGkFcAkF4AAACWUl8DAAAALj4BSZB3HJB/gJB7wHZ4UyABAAGCkIDAdniMAABKkIoBgpCRwHZ4jD9JkKQhHJCvgZCowHZ4aUgBAAErAMAA/fFKkLgBHJDFgZC/wHZ4aSAAAAAAAD89MJDNHpDowADOuQAAAAAGwADqZ4IykPyQ/pJWAACWawAAAAEDkQeSVgAAAAIBAZENAAAAlythAwFfAwAAYAPAAPrRAAGRHwAAIJZnYQMAXwMAAAFqAGADwAD9oXlfAwAAAT4GTpEyAAAAgXZfAwAAAE6RQ5FRAADAAHI9YAPAAPrRASpGkV4AkWUAAACWUl8DAAAALj4BSZF+HJGGgJGCwHZ5HSABAAGEkYfAdnl2AAA+Aj2KkZvAdnlThJGkwHZ5dj2LkbXAdnlgKT9Jkd2DkeHAdnlgSpHwAYKR98B2eVM/SZIDIRySDoGSB8B2eTNIAQABKwDAAP3xSpIXARySJIGSHsB2eTMgAAAAAAA/PTCSLB6SR8AAzrkAAAAABsAA6miCMpJbkl2UEAAAlm4AAAABA5JolBAAAAACAQGSbgAAAJcrYQMBXwMAAGADwAD60QABkoIAACCWZ2EDAF8DAAABagBgA8AA/aF5XwMAAAE+Bk6SlQAAAIF2XwMAAABOkqaStAAAwAByPWADwAD60QEqRpLBAJLIAAAAllJfAwAAAC4+AUmS4RyS6YCS5cB2eiwgAQABhJLqwHZ6hQAAPgNJkv6DkwLAdnpvPgE9MJMdHpM4wADOugAAAAA/PYqTVcB2emKEk17AdnqFPYuTb8B2em8pP0mTl4OTm8B2em9Kk6oBgpOxwHZ6Yj9Jk70hHJPIgZPBwHZ6QkgBAAErAMAA/fFKk9EBHJPegZPYwHZ6QiAAAAAAAD89MJPmHpQBwADOuQAAAAAGwADqaYIylBWUF5VcAACWZQAAAAEDlCCVXAAAAAEBAZQlAAAAJ2ADwAD8lwAAXwMAAAE+BT0elEDAAPvDAgACgJRNwHZ7VycnAD0elG3AAPvZAgACgJR+wHZ7VycnAE6Ul5SkAADAAHCGYAPAAPyXAZNGlK0AlLQAAACWUl8DAAAALj4CSZTNHJTXgJTRwHZ7V0gBAAGBlNrAdnuXAMAA/btKlOgBgpTvwHZ7rT89iZT+wHZ7lxyVCoGU/sB2e5dkAQABlADAAP29PTCVGB+VKcAA++0FAAWAlS/AdntXLicnK4GVS8B2e5cABsAA6mqCMpVhlWiVqAAAIwAAAAEDlXCVqAAAAAAAAABgA8AA/n4BSpV2AR6Vg8AAwYcDAAMuJ4PcJ4MmAAAAdmttAHZrvgB2bCkAdmyGAHZs0wB2bUUAdm4BAHZudAB2btIAdm/FAHZwcwB2cOsAdnKQAHZzBwB2c2kAdnOqAHZ0UwB2dJUAdnTMAHZ1JAB2dYMAdnXbAHZ2OgB2dr4Adnd2AHZ4MwB2eP0AdnoMAHZ7NwB2fCIAdnxfAAAAHgLAAOpygoKBQoFIg78DwAB+fQABAACD0GADwAD95AFbAV0BwADqTwFfAwAAAAADBMAA6nWCgoGSgZwJwABvqcAA6QoAYAPAAOqBAATAAOp2goKBtYHVCcAAfn7AAOkKAF0DwAD9bQJgA8AA/n5fAwAAAR6BxcAA/XQAAmADwAD+fl8DAAAAAATAAOp3goKB7oIJCcAAfn/AAOkKAF0DwAD9bQJfAwAAYAPAAP5+AR6B+cAA/XQAAl8DAABgA8AA/n4AAAEFwADqgIKCgg6CDoJqAAAAA4IZgmoAAAABAAABgiIAAACjd2ADwAD+fgFqgi1gA8AA/n6EKF0DwADqcgFfAwAAAT8CCADAAOp1H4JLwADqjAEAAAGjd4CCYcB2fcAJAYIOwADqUQAAAAAFBsAA6nmCgoJvgnSCzQAAVgAAAAEDgneCzQAAAAEBAYJ6AAAgg1NfAwAAAABcAT4DToKJgowAAbQSYAPAAP5+ARyCmRaCji7AAG+pwADpCsAA6nXAAH3uAAAAAMAA6ok9HIKvFoKmLsAAfn7AAOkKwADqdoC/AgACgYKwwHZ+P4CCtsB2fi0AwAD9gj0cgsEWgr0uwAB+f8AA6QrAAOp3gL8CAAKAgsLAdn4tgYLHwHZ+PwDAAP2CBsAA6nqCgoLSgteDPAAAhF4AAAABA4LdgzwAAAABAQGC4AAAIINTXwMAAAAAXAE+A06C74LyAAG0EmADwAD+fgEcgvkWgvQuwAB+f8AA6QrAAOp3hF4BAAGAgwDAdn7lAMAA/Yo9HIMSFoMILsAAfn7AAOkKwADqdoReAQABgYMZwHZ+9wDAAP2KPRyDLRaDIi7AAG+pwADpCsAA6nXAAH3/AQABgYM1wHZ+9wDAAOqKBsAA6nuCgoNBg0yDagMASwAAAAEDg06DagAAAAEBAYNWAAAAtBJgA8AA/n4AAF8DAAABSoNdARyDZhaDXS7AAH5+wADpCsAA6nZLAQABgINnwHZ/lQDAAP2BBsAA6nyCgoNug3WDigAAwAB9zAAAAAEDg3qDigAAAAEBAYN9AAAgg1NfAwAAAABgA8AA/n4BSoODARyDhxaDgy7AAH5/wADpCsAA6ndLAQABgIOIwHZ/8gDAAP2BBsAA6n6CgoOPg5+DvQEAXAAAAAEDg6iDvQAAAAAAAABdA8AA/TQBXwMAAAFKg6sBFoO1FoOwFoOrLsAAfn/AAOkKwADqd4NowAD9j1zAAP0bAAB2fg4Adn7FAHZ/dgB2f9AAdoAtAHaAfgAAAAUCwADqgYKCg/uEAYb8A8AAfoAAAAFgAcAA/eQAAAQEwADqg4KChEGESQmjdwBgA8AA/n4ABMAA6oWCgoRvhIgJwAB3Z8AA6QoAXQPAAP4vAWADwAD+fgEehHvAAMGmAAFgA8AA/n4AAATAAOqGgoKE5YT+CcAAUqHAAOkKAF0DwAD+LwFgA8AA/n4BHoTxwADBpgABYAPAAP5+AAAEwADqh4KChU6FVxjAAG+7wADpCgBgA8AA/JcBkwEFwADqjIKChVyFXIV9AAAAA4VnhX0AAAABAAABhW4AAASjd2ADwAD+fgFqhXlgA8AA/n6EKGADwADqgQE/AggBwADqg4AAwHaBcQkBhVzAAP36AAAAAAIGwADqiYKCha2FtIZ0AADAAH3uAAAAAQOFuYZ0AAAAAAAAAGADwAD+fgE+BU6FxgAAALQSWwBJhc4WhdgWhdIuwABSocAA6QrAAOqGgVXAAP0dPgE9iIXpwHaB2RyF9xaF7i6jd8AA6oNkAQABHIYDNQAAAAEAYAPAAPyXARaF+i7AAG+7wADpCsAA6oc1AAAAAQBgA8AA/JcBF4X6LsAAb7vAAOkKHIX/gQDAdoIdZAEAAZQAwAD9vcAA6oeBAMB2gh0jAAAAAMAA/MQAwAD+kz4BPYiGIsB2gdkWhi0WhicuwABSocAA6QrAAOqGgx7AAP0fPRyGRBaGPi7AAFKhwADpCsAA6oaEXgEAAYCGS8B2gdkAwAD+Pj0chloWhlQuwAB3Z8AA6QrAAOqFVgEAASaGXgGAhl7AdoHZYAPAAP5+AMAA/jxKhmcBJoZnAYCGbsB2gdlgA8AA/n4GwADqioKChqeGrIb6AADAAH3/AAAAAQOGs4b6AAAAAQEBhrsAAAC0EmADwAD+fgAAXAE+AUmGxRyGzxaGyS7AAHdnwADpCsAA6oWEXgEAAYCG1sB2gyoAwAD+Pj4BPRyG6RaG4y7AAFKhwADpCsAA6oZWAQABgIbtwHaDKgDAAP48PwAAdoGsAHaDCAB2g4sAAAACHgTAAOkagnmCbYKWBcAAfoEAYAPAANB8AR6ChsAA0H4AAAAABMAA6RuCeYKtgtIFwAB+ggBgA8AA0HwBHoLCwADQfgAAAAAEwADpHIJ5hGqEjQXAAH6DAGADwAD+fgEehH3AAOk/AAAAAATAAOkdgnmFi4XIBcAAfoQAXQPAAP1tAmADwAD8l2ADwADpVAEehanAAP10AAJgA8AA/JdgA8AA6VQAAATAAOkegnmGGoYuBsAAfoUAYAPAAPyXAWqGKGADwAD8l8ABq7IEwADpH4J5hjaGTgbAAH6GAGADwAD8lwFqhkhgA8AA/JfAAau4BMAA6SCCeYZWhm4GwAB+hwBgA8AA/JcBaoZoYAPAAPyXwAGrOQTAAOkhgnmGdoaNBsAAdQcAYAPAAPyXAWqGh2ADwAD8l8ABiJEEwADpIoJ5hpWGrAbAAH6IAGADwAD8lwFqhqZgA8AA/JfAAas/BMAA6SOCeYa1hs0GwAB1CABgA8AA/JcBaobHYAPAAPyXwAGIlwTAAOkkgnmG1obsBsAAfokAYAPAAPyXAWqG6WADwAD8l8AAmwsEwADpJYJ5hvSHDgbAAH6KAGADwAD8lwFqhwtgA8AA/JfAAJsRBMAA6SaCeYcWhzQGwAB+iwBgA8AA/JcBaocxYAPAAPyXwACbFATAAOkngnmHPIdWBsAAfowAYAPAAPyXAWqHU2ADwAD8l8AAmxcEwADpKIJ5h16HegbAAH6NAGADwAD8lwFqh3dgA8AA/JfAAJsaBMAA6SmCeYeCh5wGwAB+jgBgA8AA/JcBaoeZYAPAAPyXwACbHQTAAOkqgnmHpIe3BsAAfo8AYAPAAPyXAWqHtGADwAD8l8AAmyAEwADpK4J5h7+H2AbAAH6QAGADwAD8lwFqh9VgA8AA/JfAAJsjBMAA6SyCeYfgh/oGwAB+kQBgA8AA/JcBaof3YAPAAPyXwACbJgTAAOktgnmIAoggBsAAfpIAYAPAAPyXAWqIHWADwAD8l8AAmykEwADpLoJ5iCiIRwbAAH6TAGADwAD8lwFqiERgA8AA/JfAAJssBMAA6S+CeYhPiGgGwAB+lABgA8AA/JcBaohlYAPAAPyXwACbLwTAAOkwgnmIcIiRBsAAfpUAYAPAAPyXAWqIjmADwAD8l8AAmzIEwADpMYJ5iJmItgbAAH6WAGADwAD8lwFqiLNgA8AA/JfAAJs1BMAA6TKCeYjniQYGwAB+lwBgA8AA/JcBaokCYAPAAPyXwAGrvgTAAOkzgnmJDoksBsAAfpgAYAPAAPyXAWqJKGADwAD8l8ABq8IEwADpNIJ5iTSJTAbAAH6ZAGADwAD8lwFqiUhgA8AA/JfAAauBBMAA6TaCeYlTjAoEwAB+msAA6QoAXQPAAP1tAmADwAD8l2ADwAD+fgEyiWRgA8AA/JdgA8AA/n4MaoloYAPAAPyXwAGIkSfAAHUQaomMYAPAAPyXwAGrPyeHJGqJsGADwAD8l8AAmwsnwAB+m2qJ22ADwAD8l8AAmxQnwAB+nGqKFGADwAD8l8AAmxcnwAB+nWqKRWADwAD8l8ABq74nwAB+nmqKf2ADwAD8l8ABq8InwAB+n2qKuGADwAD8l8ABq4EnwAB+oGqK5GADwAD8l8AAmywnwAB+oWqLH2ADwAD8l8AAmy8nwAB+omqLUWADwAD8l8AAmzInwAB+o2qLkGADwAD8l8AAmzUkAAInwAB+pCfAAH6lBMAA6TiCeZDJkPYGwAB+pgBgA8AA+20BapDcYAPAAPttwAGq/QTAAOk3gnuGNYY8BMAAfqfAAOkKAF0DwAD9bQJgA8AA/n5gA8AA6ZIAGAbAAOk7gnuF3YXihh8ABcAAfqjAAOkKAWoAYAPAAMvNwAGrywAAAQOF74YfAAAAAQEBhfoAAAASYAPAAOO6AABdA8AA/TsBWwAGwADpU4J7hj6GVYcGAQHAAH4RAAAAAQOGXIcGAAAAAAAAAF0DwAD9bQJgA8AA/n5gA8AA6ZIBPgJJhmAchmwahmTAAOk3SAEAASsAwAD98T4BSz4BPRuGh8AA6TcehpfAAOmZAAAAAAABhqhbAYavAAABg1NbAAA+AT0ehrrAAPZ6AQABJIbnAifAAH6qgIblwHaJsgA/Sob2ARqG/cAA6TcGwADpPIJ8gPSA+4GhAAHAAH6rwADpCgAAAAEDgRSBoQAAAAEBAYEdAAAAImADwADqCgAAYAPAAP5+AT4BSoEqAR6BMcAA6UoDAAKAgUDAdooMaoFJYAPAAPyXwACbCwGfOifAAH6sBsAA6T2CfIGkgauCeQABwAB+rcAA6QoAAAABA4HOgnkAAAACAgKB1wAAACJgA8AA6goAgecAAADAAHzcYAPAAP5+AABgA8AA/n4BPgFKgfMBHoH6wADpSgMAAoCCCcB2inNqghJgA8AA/JfAAau+AZ86JIJ2BBaCRoCCPsB2inOWc8AA6hEnwAB+roGCXsB2ioAnwAB+rwbAAOk+gnyCfIKDg08AAcAAfrDAAOkKAAAAAQOCpYNPAAAAAgICgq4AAAAiYAPAAOoKAIK+AAAAwAB83GADwAD+fgAAYAPAAP5+AT4BSoLKAR6C0cAA6UoDAAKAguDAdosKaoLpYAPAAPyXwAGrwgGfOiSDTAQWgxyAgxTAdosKlnPAAOoRJ8AAfq6BgzTAdosXJ8AAfrEGwADpR4KAndWd2p45AAXAAH6yAWoAYAPAAMvNwAGr3wAAAQOd8545AAAAAgICnf0AAADAAHxiYAPAANBrAJ4GAAAARV0DwAD9OwFbAABgA8AA+tEABsAA6UiCgJ48nkGeiQAFwAB+tAFqAGADwADLzcABq/MAAAEDnleeiQAAAAEBAZ5dAAAARV0DwAD9OwFbAABcAAbAAOlJgoCejJ6RnukABcAAfrYBagBgA8AAy83AAawHAAABA56tnukAAAABAQGeswAAAEVdA8AA/TsBWwAAXAAGwADpP4J5gw+DFoQWAAHAAH64wADpCgAAAAEDgySEFgAAAAAAAABgA8AA/n4BPgVOgzGDQAABwAB+uWADwAD8lwE3CE6DUYNXAACEOWADwADjugEeg13AAOO+AQABgINnwHaMgQBOg4GDiAAAoAFgA8AA0P8BHoOOwADRAgAAAABFg6EBg6qDrAAAYmADwAD8lwGTARyDs4ODscB2jNVjAQABgIO1wHaMgQDAAP3FAYuDxcB2jNUcg8aDg8XAdozVZAEAAZQAwAD9vT4BPRyD1YGD0MB2jJWAvwIAAoOD1sB2jNUcg+KCg9vAdoy3oAMBAAE3gQAAwADRBADAAP1LSoP2ARyEB2qD/WADwADHKcABiCyVegEAAYGEDsB2jJUAwADH9QbAAOlKgnmMDYwUjWsAAcAAfroAAAABA4wijWsAAAADAgKMKwAAACJgA8AA6goAjDgAAACCl2ADwAD8lwABjEYAAACfOmADwAD+fgFqAGADwAD9oXlgA8AA/n4BPgNOjFiMYQAAg1ddA8AA/W0CYAPAAP5+WwEyjGNgA8AA/n5bAyfAAH3QJ8AAfdEntBIWjI2AjIXAdo2XwAB98MAA6hAngccyjKJgA8AA/n5gA8AA/eQCJ4KXgYyywHaNpCciHIzXGozJwADpNksBAAGBjNjAdo2kAMAA/YFJjO0hHIz5gozxwHaNs0gBAAErAMAA/o0+AT0cjRkcjRCDjQjAdo3USwEAASeBxwDAAP2BgL8CAAInEjKNJGADwAD+fmADwAD+fgEnnzqCjTfAdo2zAAA/So1NARyNWWqNVGADwADIZ4jFlXoBAAGDjWDAdo3UAMAAyG4GwADpS4J5jW6NdY4lAAHAAH67AAAAAQONjI4lAAAAAgICjZUAAAAiYAPAAOoKAI2lAAAAmUZgA8AA/n4AAGADwAD+fgE+AUqNsAEejbfAAOlKAwACgI3GwHaO62qNz2ADwAD8l8ABiJEBnzokjiIEFo35gI3xwHaO65ZzwADqESfAAH68gY4QwHaO+CfAAH69BsAA6UyCeY4oji+PCwABwAB+vgAAAAEDjkaPCwAAAAICAo5PAAAAImADwADqCgCOXwAAAJlGYAPAAP5+AABgA8AA/n4BPgJOjm6OdAAAgJZbARyOhBaOfoCOdsB2j3yD9MAA6hJLAQABgY6FwHaPiQDAAP2BSo6PAR6OlsAA6UoDAAKAjqXAdo98ao6uYAPAAPyXwAGIkQGfOiSPCAUWjtiAjtDAdo98lnPAAOoRJ8AAfr+BjuzAdo+JJ8AAfsCCjwHAdo+iBsAA6U2CeY8OjxWPrAABwAB+wQAAAAEDjyuPrAAAAAICAo80AAAAImADwADqCgCPRAAAAMAAfsJgA8AA/n4AAGADwAD+fgE+AUqPVAEej1vAAOlKAwACgI9qwHaQQmqPc2ADwAD8l8AAmzIBnzqBj5/AdpBPBsAA6U6CeY+vj7aQYAABwAB+wwAAAAEDj8KQYAAAAAICAo/LAAAAImADwADqCgCP2AAAAIF2XQPAAP1tAltbAABgA8AA/n4BPgJOj+iP8QAAg1ddA8AA/W0CYAPAAP5+WwEyj/NgA8AA/n5bAyfAAH3QJ8AAfdEntBIWkB2AkBXAdpC3wAB98MAA6hAngXaBkDPAdpDESpBCARyQTmqQSWADwADIZ4jFlXoBAAGCkFXAdpDgAMAAyG4GwADpT4J5kGOQapDAAAHAAH7EAAAAAQOQd5DAAAAAAQEBkIAAAAAiYAPAAOoKAABgA8AA/n4BPgFKkI0BHpCUwADpTgIAAoCQocB2kXAykKpbWwEngpQnwAB+xQAGwADpUIJ5wABOtMAATuXAAE9HAAHAAH7GAWrAAE61YAPAAPqYwAGDHwAAAQPAAE7pwABPRwAAAAAAAABgA8AA0HwBPgFKwABPLAEawABPM8AA6RoGwADpQIJ5wABPSsAAT5nAAFAxAAHAAH7HwADpCgFqwABPS2ADwAD6mMABiKMAAAEDwABPqcAAUDEAAAADAwPAAE+uAAAAwAB+yGADwAD8lwDAAE/AAAAAwAB8YmADwADQawDAAE/LAAAAgL1gA8AA/n4AAFwBPgJOwABP2cAAT+EAAMAAfKRgA8AA6WgBHsAAT+fAAOmOAAAAAD0cwABQDhbAAE/+g8AAT/bAdpJ4wAB9wsAA6W/AAH3XAwADgMAAUB3AdpI+gcAAUCbAdpJQgsAAUCrAdpJiAMAA6egGwADpQYJ5wABQY8AAUGjAAFCNAAXAAH7JwADpCgFqAGADwADLzcABrBsAAAEDwABQcMAAUI0AAAAAAAAAXAAGwADpQoJ5wABQycAAUM7AAFDxAAXAAH7LwADpCgFqAGADwADLzcABrC8AAAEDwABQ1cAAUPEAAAAAAAAAXAAGwADpUYJ5wABRLcAAUTLAAFGEAAXAAH7NAWoAYAPAAMvNwAGsQwAAAQPAAFFHwABRhAAAAAEBAcAAUU8AAADAAHWnYAPAAP5+AABcAAbAAOlDgnnAAFGqwABRr8AAUe8ABcAAfs/AAOkKAWoAYAPAAMvNwAGsVwAAAQPAAFG+wABR7wAAAAEBAcAAUcYAAADAAH3NYAPAAP5+AABgA8AA+tEABsAA6USCecAAUiHAAFImwABSZgAFwAB+0cAA6QoBagBgA8AAy83AAaxrAAABA8AAUjXAAFJmAAAAAQEBwABSPQAAAMAAfc1gA8AA/n4AAFwABsAA6UWCecAAUo/AAFKZwABSygAFwAB+08AA6QoBagBgA8AAy83AAax/AAABA8AAUqfAAFLKAAAAAAAAAGADwADjugAGwADpRoJ5wABTEcAAUxbAAFNaAAXAAH7VwADpCgFqAGADwADLzcABrJMAAAEDwABTJcAAU1oAAAACAgLAAFMmAAAAwABlbVsAwABTMgAAAJKFYAPAAP5+AABcAAqCeYJ6gnuCfIJ9gn6Cf4KAgoGCggB2lO8AdbDwAHWxagB1tAMAdfQaAHX4mgB1/HEAdf97AHYwygB2MesAdjPwAHY53wB2S8gAdk1RAHZj8AB2ZMsAdmZQAHZrBwB2fOAAdoCbAHaDnAAAABMAdoj7AHaJRAB2ieYAdopNAHaK5AB2i3sAdovQAHaMEAB2jFAAdo11AHaOyQB2j1oAdpAgAHaQlQB2kU4AdpGrAHaR/wB2kt0AdpMcAHaTWwB2k6gAdpP+AHaUTwB2lJMAdpTvAAAAGAACBMAA6o3AAFWUgoMAAAWBGQAAwAC4RwAAgS4AAMAAvlsAAQACwAByUcAAclqBaQAAwADLfAABAAGcBIGOAADAAM+PAACBpQAAwADUPQAAAAAAAA4EwADqkIKDgiKCNwTAAH0LwADqjQBgA8AA+tEBKgTAAOqRgoOCoIK3BMAAftfAAOqNAGADwAD60QEqBMAA6pKCg4SshLUEwAB+2MAA6o0BaoSKYAPAAPqYwAF/lmADwADQawAEwADqk4KDhR2FJwTAAH7ZwADqjQFqhQBgA8AA+pjAAX+WYAPAAPyXAATAAOqUgoOFuYXOBsAAfRjAAOqNAGADwAD8lwFqhc1gA8AA/JeBVwTAAOqVgoOF8IYHBsAAfRnAAOqNAGADwAD8lwFqhgZgA8AA/JeCPwTAAOqWgoOGKoZGBsAAfRrAAOqNAGADwAD8lwFqhkVgA8AA/JeC4QTAAOqXgoOGcYaPBsAAfRvAAOqNAGADwAD8lwFqho5gA8AA/JeFBwTAAOqYgoOGtYbRBsAAfRzAAOqNAGADwAD8lwFqhtBgA8AA/JeDXQTAAOqZgoOJfImNBMAAfGfAAOqNAGADwAD+/wAEwADqmoKDikqKVQTAAHxowADqjQBgA8AA/v8ABMAA6puCg4qIipQEwAB8asAA6o0AYAPAAP7/AATAAOqcgoOLSotcBMAAfQTAAOqNAWqLLGADwAD6mMABf5ZgA8AA+tEBKgTAAOqdgoOLm4vbBMAAftrAAOqNAGADwAD+fgEci8oci74Wi7Uai63AANBlg8bAAP33leABAAE3wBAAAADAAP3AhA4BAAE3EADAAPzFEwbAAOqggoODOIM9g3AABcAAftvAAOqNAWoAYAPAAMvNwAGspwAAAQODSYNwAAAAAQEBg1EAAACIbGADwAD+fgAAXAAGwADqoYKDg3ODeIOmAAHAAHFiwADqjQAAAAEDg36DpgAAAAEBAYN/AAAAhYZbAABcAT4BPR6DiMAA6qABAAEcg5mAg5XAdpidIwAAAADAAP3yAAbAAOqigoODqYPDg98AAcAAft3AAOqNAWqDqmADwAD6mMABf5YAAAEDg9OD3wAAAAAAAABbAUqD2QFqg9lhAwFbXMABrLYGwADqo4KDh1qHZIk0AAHAAH7ewADqjQAAAAEDh3mJNAAAAQAAgnpgA8AA/eQBWwICAod+AAAAg+xgA8AA/JcAh4oAAACArGADwAD+fgAAXQPAALloAV8DAAABPgdAIRyHpRqHmsAA6pNIAQABKwDAAP27h5qHrABJh7Ech78ah7XAAOqSSAEAASsAwADQbj4BPTCHzh+H2MAA/CkBAAEnwAB+3wA/TogfiCkAAMAAXqRdA8AAuYgBWwEeiC/AALmKAAFfAwAAAABOiFCIVQAAlolgA8AA0HwBHohbwADQfgAAAAA9F4h0g4hvwHaZ2lU0iH4DiH6IzwAAAAEBAYh/AAAAg1lbAABgA8AA/aEBPgI9HIimg4ihwHaZ2oKMAAAAAMAA0II9HIi9goizwHaZt8AAb5kBAAGEiMbAdpoOAMAAuZDAANCAPRyI3RqI08AA6pKh1gEAATGI4mADwAD95AUaiOPAAOqQGojywADqk4CI/sB2mUIWiQiDiQPAdpnawAB1McAA0ISBiRLAdplQAMAA0G1KiRsBJokbARaJLIKJIsB2mbeB3sAAuY1dA8AAuWgBXwMAAAbAAOqkgoOL3YvdjAUAAcAAX/7AAOqNAAAAAQOL4YwFAAAAAQEBi+IAAACDWVsAAFsBPgE9HovrwADqoQEAASSMAgQnwAB+4BqL9sAA6p0ngNmAi/7AdpruAAbAAOqlgoOMCIwIjhgAAcAAfSHAAOqNAAAAAQOMHI4YAAAAAQEBjB0AAABOWwAAWwE+BEmM/RyNDBqNAcAA6pxIAQABKgDAAP3xPgFKjUgBgI1PwHabSD9OjWCNagAAwAB9ImADwAD+fgEkjYsBHI10gI1vwHabSILoAgACJ4LpJ1AAAEmNkCImjaEBHI2hFo2agI2VwHabSGEAgJcBAAGVAABgA8AA+tEAHI2yHI2ugI2qwHabSEsBAAGUAABIAQABJ4LqAMAA/fE+AUqN6QEkjf0CJ1CBjfPAdpt7P0qOBgGBjg3Adpt7BsAA6qaCg44bjhuPgQABwAB9I8AA6o0AAAABA44rj4EAAAABAQGOLAAAAE5bAABbAT4ESY5QHI5fGo5UwADqnEgBAAEqAMAA/fE+AUqOmwGAjqLAdpwxP0mOriIhJo6yARyOuICOs8B2nDGB2AEAASdQAABgA8AA+tEBJo7YARyO2BaO0YCOzMB2nDFhAGMBAAGWAABgA8AA+tE+AUqO5AGAjuvAdpwxP0mPCSIcjxYcjxKAjw7AdpwxSwEAAZMAAEgBAAEnUADAAP3xAByPKhyPJoCPIsB2nDFLAQABlQAASAEAASeC6gDAAP3xPgFKj1QBHI9ggI9bwHacMYC+AQABlAAAP0qPdAGAj3vAdpwxBsAA6qeCg4+yj7KQEQABwAB9JMAA6o0AAAABA4/HkBEAAAABAQGPyAAAAICsWwAAWwE+AkmP0SEmj9UBHI/agI/WwHadQk8BAAEnUAAAYAPAAPrRPgFKj+8BJI/9AoCP+MB2nUInUD9KkAUBgJAMwHadQgbAAOqogoOQcpCRka0AAcAAfuHAAOqNAWqQc2ADwAD6mMABf5YAAAEDkKWRrQAAAAEBAZCtAAAAgzxgA8AA/n4AAFwBPgRJkLYhGpC7wADqkT4BPR6Q0sAA6q4AAAAAP0mQ5xqQ68AA6pA+AT0ekQDAAOqkAQABJJEmAifAAH7igJEiwHadwgA/PRuRL8AA6pkekUfAAP92AQABgJFVwHadwgBJkV0akWHAAOqQPgE9HpF2wADqpAEAASSRpgInwAB+4xqRlMAA6pkAPwbAAOqpgoOSBpInlkwAAcAAfHbAAOqNAWqSB2ADwAD6mMABf5YAAAEDkjaWTAAAAAEBAZI+AAAAeWADwAD+fgAAYAPAAP5+AT4HSZJPIRqSVMAA6pE+AT0ekmvAAOquAAAAAD9JkoAakoTAAOqQPgE9HpKZwADqpAEAASSSwgInwAB+5ICStsB2no4AP0mSyyIiHJLbgJLPwHaejoHYAQABJ50WAMAA/pABHJMEgJL4wHaejoHYAQABJ8AAfH0AwAD+kAEcky2AkyHAdp6OgdgBAAEnwAB8fgDAAP6QPgI9iJNJwHaejiaTSQEek1fAAOqnAQABgJNtwHaejgBgA8AA/n49G5N/wADqmxyToBqTjsAA6plsAQABgJOowHaejgDAAP8qPgM9iJPFwHaejiaTxQEek9PAAOqlAQABgJPowHaejgBgA8AA/n49iJP6wHaejiaT+gEelAjAAOqmAQABgJQZwHaejgBgA8AA/n49G5QrwADqmxyUTBqUOsAA6pmDQgEAAR6UW8AA/3YBAAGAlGnAdp6OAADAAP8rTpWMlZsAAMAAfuVgA8AA/n4BHJWqGpWdwADqmyMAAAAAwAD/Jz0blcfAAMufgZXbwHaf+UmV7RqV8cAA6pA+AT0elgbAAOqkAQABJJYsAifAAH7mGpYfwADqmwA/SpY1AYGWPMB2n/kGwADqqoKDlmeWiJqEAAHAAH7nwADqjQFqlmhgA8AA+pjAAX+WAAABA5aXmoQAAAABAQGWnwAAAMAAfH9gA8AA/n4AAGADwAD+fgE+CkmWsiEalrfAAOqRPgE9HpbOwADqrgAAAAA/SZfYGpfcwADqkD4BPR6X8cAA6qQBAAEkmB4CJ8AAfuiAmBDAdqCTAD9JmCccmD0amCvAAOqZSAEAASsAwAD/Jj4BPTCYTCfAAH7pP06YgZiOAADAAHyAWwEemJDAAOqlAQABgJilwHagkwBOmLuYxwAAiBhgA8AA/v8BHpjNwAD/LQEAASaY0wGBmNPAdqEUYAPAAP5+AEmY5ByY+xaY9IKY6MB2oTOBvMAA/wVIAQABJwAAwAD+jT4BPYqZecB2oTMcmZkamYfAAOqZg0IBAAGCmaTAdqEzAMAA/ys/Tpm8mcsAAMAAfupgA8AA/n4BHJnZgpnNwHahMyMAAAAAwAD/Jz0bmfbAAMugg5oMwHahpkmaHhqaIsAA6pA+AT0emjfAAOqkAQABJJpkAifAAH7rgppYwHahMwA/SpptAYOadMB2oaYGwADqq4KDmyWbRp4bAAHAAH7swADqjQFqmyZgA8AA+pjAAX+WAAABA5tXnhsAAAABAQGbXwAAAIFdYAPAAP5+AABgA8AA/n4BPghJm28am3PAAOqQPgE9HpuIwADqpAEAASSbrAInwAB+7YCbocB2okAAP0mbtRybyxqbucAA6plIAQABKwDAAP8mPgE9MJvaJ8AAfuk/PYicC8B2okAmnAsBHpwYwADqpQEAAYCcLcB2okAAYAPAAP5+TpxBnEsAAIheYAPAAP7/AR6cUcAA/y0BAAGAnFfAdqJAAEmcZhycexacdIGcasB2osmBvMAA/wVIAQABJwAAwAD+jT4BPYmc+cB2oskcnRcanQXAAOqZg0IBAAGBnSLAdqLJAMAA/ys/PRudlMAA6pqBnaLAdqLJSZ2wGp20wADqkD4BPR6dycAA6qQBAAEknfUCJ8AAfu4anenAAOqaAD9Knf4BHJ4PgZ4FwHaiySMAAAAAwAD/JwbAAOqsgoOeQJ5EnqsAAcAAfIPAAOqNAAAAAQOeVp6rAAAAAQEBnlsAAACArGADwAD+/wAAYAPAAP7/AT4CQCEcnnganmvAAOqbSAEAASsAwAD/Jp5rnn8ASp6EARyemBqei8AA6ptsAQABFp6kgJ6gwHajpk7AAP8KAMAA/yoGwADqrYKDnvqfAaF7AAHAAH7vwADqjQAAAAEDnxGhewAAAAEBAZ8ZAAAAwAB+8GADwAD+fgAAYAPAAP5+AT4ETp8qny4AAICsYAPAAP7/AR6fNMAA/y0BAAGAnzrAdqQlAEmfRhqfSsAA6pA+AT0en1/AAOqkAQABJJ+CAifAAH7xgZ9+wHakQAA/Tp+QAAAATlsAR5+YFp+kgZ+gwHakQIG8wAD/BQQCn7dqn7dgA8AA/n6EKJ/Eap/EYAPAAP5+wAEzFQA+AUqf0gEcn92Bn9nAdqRAgb8AAAAAwAD/JQGf9Gqf9GADwAD+fsAAv3IAPgFKoAUBHqAMwADqrQEAARygNR6gHcAA6qwBAAGBoDDAdqRAACMAAAAAwAD/JwADoEtqoEtgA8AA/n7AAL94oFxqoFxgA8AA/n7AAaqCoG1qoG1gA8AA/n7AAaqFAD4BSqB8ARygh4Ggg8B2pEAjAAAAAMAA/ycAAT4CSaD5GqD9wADqkD4BPR6hFsAA6qQBAAEkoUQFJ8AAfUAWoTKBoS7AdqRAgbzAAP8FJ8AAfXuBoT/AdqRAJ4FqAD89MKFVJKF1AifAAH7ygaFxwHakQAbAAOqugoOhw6HdowwAAcAAd/PAAOqNAWqhxGADwAD6mMABf5YAAAEDoeijDAAAAAAAAABbAT4FPRuh78AA6pEpPRuiGMAAy55qoi5hAwFgA8AA/v9dA8AAuWgBXQPAAP07AWADwAD8l8ABrLs9G6JWwADLoWqibWEDAF0DwAC5aAFgA8AA/v/AAazAPRuilcAAy6Jqoq5hAwBdA8AAuWgBYAPAAP7/wAGsxT0botjAAMujaqLyYQMBYAPAAP7/XQPAALloAWADwAD+/8ABrMoGwADqr4KDo06jYKRdAAHAAH7zwADqjQAAAAEDo3SkXQACAAEBAaN5AAAAgKxgA8AA/v8AAF0DwAC5aAFdA8AA/TsBYAPAAPyXAT4OTgAAAAGByl0DwAC4rgFdA8AA/TsBYAPAAPyXAR+jhMAAuLsAAV0DwAD9OwFgA8AA/JcAAE4AAAAAgctdA8AAuWQBXQPAAP07AWADwAD8lwBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsAT6NgAAAAAIHSWwADo3SkXQQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+A02jngI1AAAAAABbAR6jnsAAuH4EAAQeo6TAAOqjAgFdA8AA/TsBYAPAAPyXAmqjwmADwAD8l4I/HKPbgKPXwHamtiMAAAAAwAD/JwCEAMB2pzaFAMB2pz8UAMB2p2YJAAArTqONo5YAAINXXQPAAP07AVsBFADAdqd5CgBJo+olo/oco/YUo+7Adqf9DQBLAQABlwDAAP1KYAPAAP5+PgE9MKQjHKQxFKQpwHan/Q0ASwEAAZcAwAD9Sj4CPYqkRcB2pxEmpEUBHKRUFKRMwHan/Q0ASwEAAZcAwAD9Sl0DwAC5ZAFdA8AA/TsBYAPAAPyXQgAAPR4AwAC4gQIAAoEAwHam3YIAwHanEQBKpF0AAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAgQDAdqbdgd0CAAIUAMB2qK8NABQAwHaouA4AAMAAuZE9iwDAdqctHgDAALiCAQABFADAdqdmCQAAPYwAwHanNh4AwAC4fAEAARQAwHanZgkAAD2NAMB2pz8eAMAAuH0BAAEUAMB2p2YJAAA9HKN0gQDAdqbdagEAARQAwHanZgkAAABKAAEWAIEAwHam3YHewAC5jQbAAOqwgoOkgaSNpWQAAcAAfvTAAOqNAAAAAQOkoqVkAAAAAAAAAF0DwAC5aAFgA8AA/v8BPgJJpKkapK3AAOqQPgE9HqTCwADqpAEAASfAAH71AD9KpUUBHqVQwAC5cQEBYAPAAP7/ASsABsAA6rGCg6VnpXOmQwABwAB+9sAA6o0AAAABA6WKpkMAAAAAAAAAXQPAALloAWADwAD+/wE+A0mlkRqllcAA6pA+AT0eparAAOqkAQABJ8AAfvcAP0AhHKX1GqXrwADqkkgBAAErAMAA0G6l66X8AEqmAQEepgjAAOqjAgFgA8AA/v8CaqYgYAPAAPyXhQcrAAbAAOqygoOmRqZSqSMAAcAAfvjAAOqNAAAAAQOmaqkjAAIAAQEBpm8AAACcmWADwAD+/wAAXQPAALloAWADwAD+/wE+Dk4AAAABgcpdA8AAuK4BYAPAAP7/AR+mgcAAuLsAAWADwAD+/wAATgAAAACBy10DwAC5ZAFgA8AA/v8ATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE+mUgAAAACB0lsAA6ZqqSMEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPghJpoUaponAAOqQPgE9HqaewADqpAEAASSm4wInwAB++YCm2MB2qnsAP0mm7CEcpwIWpvuApvDAdqp7gbzAAP8FSAEAASeB2wDAAP6NPgNJpxYapxrAAOqQPgE9HqcxwADqpAEAASSnagInwAB++oCnX8B2qnsAPz2Kp7rAdqrBgKfBwHaqe0IAAD9Np+ACNQAAAAAAWwEep+DAALh+BAAEHqfmwADqowIBYAPAAP7/AmqoBWADwAD8l4NdHKgqgKgfwHaqeyMAAAAAwAD/JwCEAMB2qt+FAMB2qugUAMB2qw8JAAArTqfXp94AAIF2YAPAAP7/ARQAwHarIgoASag5ISWoRBSoPcB2rCkNAGADwAD+/z4CSahTGqhXwADqkD4BPR6obsAA6qQBAAEkqKYCJ8AAfvuAqJvAdqp7AD89FaizwHasKQ0rP0moyBqozMAA6pA+AT0eqOHAAOqkAQABJKkLBSfAAHyVgKjywHaqeyeSpRSpA8B2rCkNACeDSAA/PYqpFMB2qsEUqRvAdqwpDQBCAAA9HgDAALiBAgACgQDAdqqbggDAdqrBAEqpIwADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACBAMB2qpuB3QIAAhQAwHas+A0AFADAdq0BDgAAwAC5kT2LAMB2qtYeAMAAuIIBAAEUAMB2qw8JAAA9jADAdqrfHgDAALh8AQABFADAdqsPCQAAPY0AwHaq6B4AwAC4fQEAARQAwHarDwkAAD0cpmqBAMB2qptqAQABFADAdqsPCQAAAEoAARYAgQDAdqqbgd7AALmNAYKDAHatogB2lhgAAAAAAHaYNAB2mHcAdpjKAHaZEAB2msgAdpsiAHacCwB2nRwAdp2PAHaeWwB2oGAAdqINAHajgAB2o/8AdqXAAHamkAB2qVkAdqnEAHaqVQB2raIAAAATAAIEwADqs8AAfvyChAAAAAAAAAQCwADqtIKEgPOA+YETA8AAfv0AAAFgAcAA/eQAAAABBcAA6rYAAAAABAAAAwAAAAAAAAAAAGADwADqtAE/AQkBAMAA/foAAAAAAAAAdq5jAAAAAALAAOq3goSBFoEcgTYDwAB+/gAAAWABwAD95AAAAAEFwADquQAAAAAEAAADAAAAAAAAAAAAYAPAAOq3AT8BCQEAwAD9+gAAAAAAAAB2rrYAAAAAAsAA6rqChIE5gT+BWQPAAH7/AAABYAHAAP3kAAAAAQXAAOq8AAAAAAQAAAMAAAAAAAAAAABgA8AA6roBPwEJAQDAAP36AAAAAAAAAHavCQAAAAACwADqvYKEgVyBYoF8A8AAfwAAAAFgAcAA/eQAAAABBcAA6r8AAAAABAAAAwAAAAAAAAAAAGADwADqvQE/AQkBAMAA/foAAAAAAAAAdq9cAAAAAAAAAYKEAHavZwB2rhkAdq5sAHauvwB2rxIAdq9lAAAABAB2r2cAAAAAAAIEwADqwMAAfwGChQAAE4HmAADAAMt8AAEBAsAAb1edgYIbAADAALhHAAEBCZxgA5wKwABwkcAAcKDAAHCLwABxQIi5wABwUYLyAADAAL5bAAEBAcAARw+DGgAAwADFhwABAQKLkASDRgAAwADKQAABAQHAAHVsg3cAAMAAz48AAQEDwAB0+MAAd9/AAHT3g7oAAMAA0JwAAQEBnOCD2AAAwADqswABAQHAAH79hBUAAMAA1D0AAQEBh++bEgAAwAC4RwAAmycAAMAAy3wAAQABnASbTAAAwAC+WwABAQbAAEcPwAByRZ9CwAByhZcznLebsAAAwADFhwAAm8cAAMAAykAAAQABlqSb6QAAwADPjwAAnAAAAMAA0JwAAJwUAADAANQ9AACcLwEAwAEAGAAAnEQBAMAAy3wAAQEBwAB2BB7AAMvXwAEAMMABAELAAQBKwAEAy8ABANTAAQDewAEA8cABAQDAAQEQwAEBIcABAUbAAQFYwAEBasABAXfAAQF6wAEBfcABAYDAAQGHwAEBjsABAZTAAQGcwAEB6sABABvAAQYlwAEGP8ABBl3AAQZvwAEGdcABBpMbAMAAfwIAwAB/AwDAAH8EAMAAfwUAwAB/BgDAAH8HAMAAfwgAwAB/CQDAAH8KAMAAfwsAwAB/DADAAH8NAMAAfw4AwAB/DwDAAH8QAMAAfxEAwAB/EgDAAH8TAMAAfxQAwAB/FQDAAH8WAMAAfxcAwAB/GADAAH8ZAMAAfxoAwAB/GwDAAH8cAICRAsAA6waChoXKhdCHdgPAAH8dAAABYAHAAOq0AAFgAcAA7v0AAQXAAOsPgoaGOoY6hloAgLXAAOrAAAOGWIZaAAAAAAAAAGADwADrBgE/AQkBhjrAAOq2AAAAAAMGwADrCIKGhl+GZ4bUBAEAAAAAAQOGg4bUAAAAAQEBhogAAACc7WADwAD8lwAAYAPAAOsGAUqGmgE1hp4AAAEAYAPAAOsGAR+GnsAA6w8AAAAANQAAAAEAWwEchsCBhr7AdrJqwAB/HsAA6sABAAGAhszAdrJPAMAA6wuBAMB2smoGwADrC4KGhtmG3ocuAATAAH8ewADqwAFqAGADwADLzcABrNQAAAEDhumHLgAAAAEBAYbuAAAAnO1gA8AA/JcAAFwABsAA6wyChocyhzaHdAAEwAB/IAFqAGADwADLzcABrOgAAAEDh0CHdAAAAAAAAABgA8AA/JcAAAB2sjAAdrKxAHay9AB2syoAAAADAsAA6xCCh4g3iFeL6APAAH8iAWqIOGADwAD6mMABf5YAAWABwADqtAABYAHAAPAQAAEFwADrJYKHiLmIuYjVAIC1wADqwAADiNOI1QAAAAAAAABgA8AA6xABPwEJAYi5wADqtgAAAAAPBsAA6xKCh4jaiOKJRwQBAAAAAAEDiPqJRwAAAAEBAYj/AAAAnO1gA8AA/JcAAGADwADrEAFKiREBNYkVAAABAGADwADrEAEfiRXAAOslAAAAADUAAAABAFsBHIkzgYkxwHaz4sAAfx7AAOrAAQABgIk/wHazxwDAAOsVgQDAdrPiBsAA6xWCh4lMiVGJggAEwAB/HsAA6sABagBgA8AAy83AAaz8AAABA4lciYIAAAABAQGJYQAAAJztYAPAAPyXAABcAAbAAOsWgoeJh4mLibAABMAAfyABagBgA8AAy83AAa0QAAABA4mVibAAAAAAAAAAYAPAAPyXAAbAAOsXgoeJtIm4idMABIKMAWoAYAPAAMvNwAGtJAAAAQOJvYnTAAAAAAAAAGADwAD8lwAGwADrGIKHideJ14n4AASHEQFqAGADwADLzcABrTgAAAEDid+J+AAAAAAAAABbAAbAAOsZgoeJ/In8ih4ABJ6vAWoAYAPAAMvNwAGtTAAAAQOKAIoeAAAAAQEBigUAAACEOWADwAD8lwAAWwAGwADrGoKHiiKKIopnAATAAH8oAWoAYAPAAMvNwAGtYAAAAQOKKopnAAAAAwMDijUAAACCj10DwAD9OwFgA8AA/JcAikEAAABqYAPAAPyXAIpMAAAAgpBgA8AA/JcAAFsABsAA6xuCh4primuKlwAEhwABagBgA8AAy83AAa10AAABA4p0ipcAAAABAQGKeQAAAICWYAPAAPyXAABbAAbAAOscgoeKm4qbiuIABMAAfysBagBgA8AAy83AAa2IAAABA4qkiuIAAAADAwOKrwAAAIKPXQPAAP07AWADwAD8lwCKuwAAAGpgA8AA/JcAisYAAACCkGADwAD8lwAAWwAGwADrHYKHiuaK5osHAASBswFqAGADwADLzcABrZwAAAEDiu6LBwAAAAAAAABbAAbAAOsegoeLC4sLiz4ABMAAfy4BagBgA8AAy83AAa2wAAABA4sWiz4AAAABAQGLGwAAAIGzYAPAAPyXAABbAAbAAOsfgoeLQotCi20ABK0LAWoAYAPAAMvNwAGtxAAAAQOLSottAAAAAQEBi08AAABhYAPAAPyXAABbAAbAAOsggoeLcYtxi44ABGEBagBgA8AAy83AAa3YAAABA4t3i44AAAAAAAAAWwAGwADrIYKHi5KLkoutAASERgFqAGADwADLzcABrewAAAEDi5eLrQAAAAAAAABbAAbAAOsigoeLsYuxi+YABMAAfzMBagBgA8AAy83AAa4AAAABA4u1i+YAAAADAwOLugAAAMAAfzNgA8AA/JcAi8QAAABqYAPAAPyXAIvPAAAAgpBgA8AA/JcAAFsAAAB2s6gAdrQpAHa0bAB2tKIAdrTWAHa1BQB2tUIAdrWjAHa14AB2tkEAdrZwAHa2rwB2tusAdrcZAHa3SAB2t6QAAAAPAsAA6yaCh4vri/GMgwPAAH81AAABYAHAAP3kAAAEBMAA6yiCh4wMjBIJwAB/NgBgA8AA/JcABMAA6ymCh4wjjCcJTgBgA8AA/n4ABMAA6yqCh4w1jDsJm+kAYAPAAPyXAATAAOsrgoeMQ4xMGIDuAGADwAD8lwGTAQXAAOstgoeMUIxQjIEAAAADjFyMgQAAAAMDA4xiAAAEwAB/NmADwAD8lwCMbwAABE5gA8AA/n4AjHoAAASb6WADwAD8lwAAYAPAAOsmAT8ECAHAAOsogADAdrh9CAHAAOspgQDAdriNCAHAAOsqggDAdriaCQGMUMAA/foAAAAAAAAAdrjjAAAAAALAAOsugoepJqksrUUDwAB/NwAAAWABwADw8wAAAgTAAOsxgoepjamYBcAAfzjAAOrAAF0DwAD9bQJgA8AA/JddA8AAuqQBWwEyqZZgA8AA/JddA8AAuqQBWwAEwADrMoKHqbapwwSchMAA6sAAXQPAALpVAVsBKwEFwADrOoKHqcipyKojAAAAA6nhqiMAAAADAwOp4gAAAE5bAKnoAAAAm+lbAKnwAAAAwABtn1sAAGADwADrLgE/AQkAqgnAAPEVAwADJqoLAYCqC8B2uYBgA8AA/n4mqhEBgaoRwHa5iGADwAD8lyaqGQGCqhnAdrmRYAPAAPrRAAQGwADrNYKHqiiqLauCAADAAH85wADqwAAAAAEDqjirggAAAAAAAABcAT4CTqpFqkgAALQSYAPAAPyXARqqXcAA8PY9G6pmwADrMhyqrB6qkcAA8QcDAAOAqqHAdroSgKqlwHa6EpMAgfoBAAE0qrMDqrOrfQAAAAEBAaq0AAAAm+xbAABgA8AA/aEBPgFJqsMcqs4aqsfAAOsxh1gBAAEcqt+BqtrAdrpgSwEAAZMAAADAAP2APgFJqu8hHKr8HKr4garzwHa6YEsBAAGUAABIAQABKwDAAP3xPgE9HKsiHKsXGqsRwADrMUsBAAEcqx2BqxjAdrpgSwEAAZMAAADAAP2BVgEAARyrK4GrJsB2umBLAQABlAAAAMAAurg+AT0cq10cq1Iaq0zAAOsxSwEAARyrWIGrU8B2umBLAQABkwAAAMAA/YGCjAAAAADAALq6PwDAALosBsAA6zaCh6uHq4yruwAAwAB/OsAA6sAAAAABA6uYq7sAAAAAAAAAXAE+AT0cq68aq6HAAOsynIYAAAAAwAC6VwbAAOs3goerwKvHrJkAAMAAfzvAAOrAAAAAAQOr06yZAAAAAAAAAF0DwAC6HAFbAT4DTqvgq+cAAMAAfzZgA8AA/JcBFqv2FqvpLsAAfzzAAOrAwADw+8AAfzbAAOsoSawCIRysDhqsB8AA6zGHWAEAAYCsGsB2u7AAwAD9gD4BPRysMRqsK8AA6zGAvwIAAoCsMsB2u7AerEDAALqxAAFgA8AA8MEAAADAAP2CP0qseQEWrI8crIYarIDAAOsxSwEAAYCsh8B2u7AAwAD9gYH2wAC6pgbAAOs4goesnqyjrUMAAMAAfz3AAOrAAAAAAQOssq1DAAAAAAAAAFwBPgROrL+sxgAAwAB/NmADwAD8lwEWrNUWrMguwAB/PMAA6sDAAPD7wAB/NsAA6yhJrOEhHKztGqzmwADrMYdYAQABgKz5wHa8fgDAAP2ASq0CAD89HK0dHK0UGq0OwADrMUsBAAGArRXAdrx+AMAA/YGCjAAAAADAALq6PRytMRqtKsAA6zGEXgEAAYCtOMB2vH4AwAD9igAAdrnmAHa7PQB2u30AdrxSAHa9EgAAAAQCwADrO4KHrUitTrAbA8AAfz4AAAFgAcAA8PMAAAIEwADrPoKHrZitpRichMAA6sAAXQPAALpVAVsBKwTAAOs/goetuq3FGMAAb9rAAOrAAF0DwAC6pAFbASsBBcAA60WCh63KrcquIwAAAAOt4a4jAAAAAwMDreIAAABOWwCt6AAAAJvpWwCt8AAAAMAAbZ9bAABgA8AA6zsBPwEJAK4JwADxFQMAAyauCwGArgvAdr2hYAPAAP5+Jq4RAYGuEcB2valgA8AA/JcmrhkBgq4ZwHa9smADwAD60QACBsAA60KCh64ori+vxAAAwAB/O8AA6sAAAAABA647r8QAAAAAAAAAXQPAALocAVsBPgROrkiuTwAAwAB/NmADwAD8lwEWrl4WrlEuwAB/PMAA6sDAAPD7wAB/NsAA6yg9F65qLsAAb9rAAOrAHq58wAC6sAABYAPAAPDBAADAAOs/PReupS6chMAA6sAcrvMertDAAPEHAwADgK7gwHa+OpOAruvAdr46AIH6AQABNK76A676r6AAAAABAQGu+wAAAJvsWwAAYAPAAP2hAT4CQByvGhyvFoGvEcB2vsNLAQABkwAASAEAAYCvHcB2vjoAwAD98a8RryMASa8sIRyvORyvNYGvMMB2vsNLAQABlAAASAEAASsAwAD98T4BPRyvWBavTC7AAG/awADqwMAA6z9WAQABHK9hga9cwHa+w0sBAAGUAAAAwAC6uD4BPRyvihavfi7AAG/awADqwMAA6z+CjAAAAADAALq6AMAAuizAAOs+Sq+nARavuhavri7AAG/awADqwMAA6z+B9sAAuqYGwADrQ4KHr8mvzrAZAADAAH89wADqwAAAAAEDr92wGQAAAAAAAABcAT4CPRyv9Bav5i6chMAA6sDAAOs+nIYAAAAAwAC6Vz0csA4WsAIuwABv2sAA6sDAAOs/gowAAAAAwAC6ugAAdr4HAHa/mAB2v/0AAAACAsAA60aCh7AesCSzIAPAAH8/AAABYAHAAPDzAAACBMAA60mCh7B2sIMYnITAAOrAAF0DwAC6VQFbASsEwADrSoKHsJiwoxjAAG/awADqwABdA8AAuqQBWwErAQXAAOtQgoewqLCosQkAAAADsMexCQAAAAMDA7DIAAAATlsAsM4AAACb6VsAsNYAAADAAG2fWwAAYAPAAOtGAT8BCQCw78AA8RUDAAMmsPEBgLDxwHbAhGADwAD+fiaw9wGBsPfAdsCMYAPAAPyXJrD/AYKw/8B2wJVgA8AA+tEAAgbAAOtNgoexDrEVsskAAMAAfzvAAOrAAAAAAQOxIbLJAAAAAAAAAF0DwAC6HAFbAT4FTrEusTUAAMAAfzZgA8AA/JcBFrFEFrE3LsAAfzzAAOrAwADw+8AAfzbAAOsoTrFUsV0AAMAAf0BgA8AA/JcBHrFywADxDQIAApOAsYLAdsEdAD0XsY8uwABv2sAA6sAesaHAALqwAAFgA8AA8MEAAMAA60o9F7HKLpyEwADqwByyGh6x9cAA8QcDAAOBsgXAdsFKk4CyEsB2wR0AgfoBAAE0siEDsiGypQAAAAEBAbIiAAAAm+xbAABgA8AA/aEBPgFJsjEhHLI+HLI6grI1wHbBy0sBAAGUAABIAQABKwDAAP3xPgE9HLJdFrJRLsAAb9rAAOrAwADrSlYBAAEcsmaCsmHAdsHLSwEAAZQAAADAALq4PgE9HLKPFrKDLsAAb9rAAOrAwADrSoKMAAAAAMAAuroAwAC6LMAA60lKsqwBFrK/FrKzLsAAb9rAAOrAwADrSoH2wAC6pgbAAOtOgoeyzrLTsx4AAMAAfz3AAOrAAAAAAQOy4rMeAAAAAAAAAFwBPgI9HLL5FrLrLpyEwADqwMAA60mchgAAAADAALpXPRyzExazBy7AAG/awADqwMAA60qCjAAAAADAALq6AAB2wOoAdsJ2AHbC2wAAAAICwADrUYKIgPuBAYHyA8AAf0EAAAFgAcAA6rQAAWABwADukgABBcAA61YAAAAABAAAAwAAAAAAAAAAAGADwADrUQE/AQkBAMAA6rYAAAAAAgbAAOtTgoiBS4FQgZMABMAARwkBagBgA8AAy83AAa4UAAABA4FXgZMAAAADAwOBYgAAABJdA8AA/TsBYAPAAPyXAIFsAAAAamADwAD8lwCBdwAAAIKQYAPAAPyXAABcAAbAAOtUgoiBmIGigfAABMAAf0MBagBgA8AAy83AAa4oAAABA4GrgfAAAAACAAACgbIAAACERmADwAD60QFqgblgA8AA+tF3gcQAAACCkGADwAD60QFqgclgA8AA+tEAXQPAAP07AWADwAD8lwAAAHbDPAB2w5wAdsQJAAAAAgLAAOtXgoiB9YH7gv0DwAB/RQAAAWABwADrUQAAAAEFwADrXIKIgiaCJoKVAAAAA4I4gpUAAAADAwOCPQAAAMAAf0ZgA8AA/JcAglMAAAC23F0DwAD9OwFgA8AA/JcAgmQAAACf42ADwAD60QAAYAPAAOtXAT4BPRyCby7AAHIcwADqwAMAA4CCdcB2xFSBgoHAdsRkgoKNwHbEeQDAAOtaAQkBgibAAOtWAAAAAAEGwADrWoKIgpmCnoL7AATAAHIcwADqwAFqAGADwADLzcABrjwAAAEDgqOC+wAAAAMDA4KoAAAAwAB/RmADwAD8lwCCvgAAALbcXQPAAP07AWADwAD8lwCCzwAAAJ/jYAPAAPrRAABcAAAAdsTJAHbFMQAAAAECwADrXYKIgwCDBoSTA8AAf0gAAAFgAcAA61EAAAABBcAA62KCiIMxgzGD+QAAAAODQ4P5AAAABwcHg0kAAADAAH9JYAPAAPrRAINTAAAAhNpgA8AA/JcAg14AAADAAH9GYAPAAPyXAINuAAAAwAB/SmADwAD8lwCDggAAAKVeYAPAAPyXAIOWAAAAttxdA8AA/TsBYAPAAPyXAIOnAAAAn+NgA8AA+tEAAGADwADrXQE+AT0cg7IuwAByHMAA6sAHAAeAg7jAdsV4gYO+wHbFiIKDxcB2xZaDg9HAdsWmhIPbwHbFtoWD5cB2xcSGg/HAdsXZAMAA62ABCQGDMcAA61YAAAAAAQbAAOtggoiD/YQChJEABMAAchzAAOrAAWoAYAPAAMvNwAGuUAAAAQOEB4SRAAAABwcHhA0AAADAAH9JYAPAAPrRAIQXAAAAhNpgA8AA/JcAhCIAAADAAH9GYAPAAPyXAIQyAAAAwAB/SmADwAD8lwCEQAAAAKVeYAPAAPyXAIRaAAAAttxdA8AA/TsBYAPAAPyXAIRrAAAAn+NgA8AA+tEAAFwAAAB2xkUAdsbpAAAAAQLAAOtjgomA+4EBhdoDwAB/TAAAAWABwAD95AAABATAAOtlgomBvIHJBsAAf00AYAPAAPyXAWqBx2ADwAD8l4NKBMAA62eCiYHcgfEYwAB/TsAA6sAAXQPAAP07AWADwADQawExge9gA8AA0GsABMAA62iCiYIEgh0YwAB/T8AA6sAAXQPAAP07AWADwADQawExghtgA8AA0GsABMAA62mCiYI0gl0YwAB/UMAA6sAAXQPAAP1tAmADwAD8l2ADwADQawEegkXAAMFTAAJgA8AA/JdgA8AA0GsAAAEFwADrcIKJgmKCYoJzAAAAA4JxgnMAAAAAAAAAYAPAAOtjAT8BCQGCYsAA/foAAAAAAwbAAOtsgomCeIKBhNoAAMAAf1HAAOrAAAAAAQOCiYTaAAAAAQEBgo4AAADAAH9SYAPAAPyXAABgA8AA0GsBPgVJgqIiFoKxFoKmLsAAf0/AAOrAwADraIFVwAD9HQAcgs4WgscWgrwuwAB/UMAA6sDAAOtpYcAA/ZFjAQABaoLQYAPAAPyXg0oAwAD9xT4DToLxgvYAAZaJYAPAANBrAR6C+MAA624AAAAAPRyDGBaDES7AAH9OwADqwMAA62dWAQABgYMcwHbIlADAAP1MPRyDNBaDKS7AAH9PwADqwMAA62hWAQABgYM4wHbIlADAAP1MP0mDSSEWg1kWg04uwAB/T8AA6sDAAOtogVXAAP0dPgROg3mDfgABlolgA8AA0GsBHIOLFoOALsAAf0/AAOrAwADraIYmAAAAAMAA/VpAIRyDshaDpy7AAH9QwADqwMAA62mHWAEAAYCDvsB2yCoAwAD9gIOmg8sAPRyD3haD1C7AAH9QwADqwMAA62mAvwIAAoCD38B2yCqBg+/AdskXAMAA/YJKg/sBgYQCwHbJFz9OhHqEfwABlolgA8AA0GsBHISHFoSBLsAAf07AAOrAwADrZ0sBAAEchJWAhIjAdsgqleABAAFqhJdgA8AA/JeDSgDAAP3AAMAA/Uo9HISwFoSmLsAAf1DAAOrAwADraYC/AgACgISxwHbIKoGEwcB2yacAwAD9gkqEywGBhNLAdsmnBsAA622CiYTfhOSFkAAAwAB/U8AA6sAAAAABA4TvhZAAAAABAQGE9AAAAMAAf1JgA8AA/JcAAFwBPgJOhReFHAABlolgA8AA0GsBHIUpFoUeLsAAf1DAAOrAwADraYReAQABgIUwwHbKTgDAAP2KSYVDIRyFWhaFUxaFSC7AAH9QwADqwMAA62kpwAD9kIMcAQABgYVjwHbKZADAAP0IPgE9HIV9FoVyLsAAf0/AAOrAwADraFYBAAGBhYHAdspkAMAA/Uw/BsAA626CiYWVhaWF2AAFwAB/VMAA6sABagBgA8AAy83AAa5kAAABA4W0hdgAAAAAAAAAYAPAANBrAAAAdsgEAHbKKAB2yu4AdssoAAAAAwLAAOtxgoqA2oD6hPcDwAB/VgFqgNtgA8AA+pjAAX+WAAFgAcAA6rQAAWABwADyEwEEwADrdIKKgu+DBgTAAH9XwADqwABgA8AA63EBKwEFwADrgYKKgUSBRIFWAIC1wADqwAADgVSBVgAAAAAAAABgA8AA63EBPwEJAYFEwADqtgAAAAAGBsAA63eCioFbgXGBuQAFnJTAAOrAAWoAYAPAAMvNwAGueAAAAQOBeIG5AAAAAgICgYgAAADAAH3LYAPAAOtxAIGXAAAAg6hbAABgA8AA63EABsAA63iCioG9gciCEQAFwAB/WcAA6sABagBgA8AAy83AAa6MAAABA4HTghEAAAABAQGB4wAAAMAAfctgA8AA63EAAGADwAD8lwAGwADreYKKghWCIIJLAAXAAH9bwADqwAFqAGADwADLzcABrqAAAAEDgiuCSwAAAAAAAABgA8AA/JcABsAA63qCioMKgxaDfAABwAB/XcAA6sAAAAABA4Mlg3wAAAABAQGDKgAAAMAAfctbAABcAT4BPRuDO8AA63Qeg07AAOt3AgACH4NawADrgQAAAACAg27Adsy+AAbAAOt9goqDgYObhLUBAcAAf17AAOrAAAAAAQODpoS1AAAAAAAAAGADwADrcQE+AkmDrByDwRqDsMAA63RIAQABKwDAAP3xPgE9G4RNwADrdB6EYMAA63cCAAIfhGzAAOuBAAAAAB6EgMAA63kAAAAAAD9KhJoBGoShwADrdAbAAOt+goqEuoTJhPUBAcAAf1/AAOrAAAAAAQOE24T1AAAAAAAAAGADwAD8lwFKhN4BHoTewADreAEAARqE6sAA630AAAB2y8MAdswUAHbMXgB2zJgAdszzAHbNcQB2zbUAAAAGAsAA64KCi4nPidWOMQPAAH9gAAABYAHAAP3kAAADBMAA64SCi4n/igUJwAB9lQBgA8AA8wgABMAA64aCi4oqijUYwABv2sAA6sAAXQPAALqkAWADwADzCAErBMAA64eCi4o9ikAYwAByYcAA6sAAWwErAQXAAOuRgouKRYpFitgAAAADilaK2AAAAAEBAYpcAAAEwAB9lWADwADzCAAAYAPAAOuCAT4BPReKai7AAG/awADqwB6KfMAAurECAWADwADzCAACwABvphaKuS7AAH9hwADqwMAA64zAAG+oForMLsAAcNzAAOrAwADrjcAA64YCCAHAAOuEgADAds5kCQGKRcAA/foAAAAABQbAAOuJgouK3Yr3ixMBAIH2AAAAAQOK/osTAAAAAAAAAF0DwAC6HAFgA8AA8wgBSosBARaLDRaLAS7AAG/awADqwMAA64aB9sAAuqYGwADrjIKLixiLHY0UAADAAH9hwADqwAAAAAEDiySNFAAAAAAAAABcAT4FTosxizQAALQSWwEeizbAAOuOAQABFotPFotILsAAfZXAAOuEwAB/YsAA6sDAAPNFAEmLYyEli2qAi2fAds9aYAPAAPyXPgI9HIuSFot7LsAAb9rAAOrAwADrhpxHAQABH4ufwADzVAIAAiSLzQInwAB/YxaLxi7AAH2VwADrhICLz8B2z1oAAMAAurlKi9sAPz0Xi+0uwAByYcAA6sCAi/PAds9awADrh06L/4wGAADAAHyjYAPAAOyzAR+MDMAA7N0BAAEfjBvAAOyZAQABJow1AYCMNcB2z1pgA8AA/JcAAD0cjEaBjD/AdtADgfoBAAE0jE0DjE2NDwAAAAEBAYxOAAAAm+xgA8AA9QIAAGADwAD9oQE+AUmMXRyMZ4KMYcB20FlIAQABaox5YAPAAPUCwAGurwDAAP3xPgJOjI2MkwAAhDlgA8AA47oBHIycgYyVwHbQA56vAAAAAMAA7MBFjKwBjLWMtwAAYmADwAD8lwGTARyMvoSMvMB20L5jAQABFozGg4zAwHbQl2HAAP1rAMAA/cUBjIzOwHbQvhyMz4SMzsB20L5kAQABlADAAP29PgE9HIzrFozfLsAAb9rAAOrAwADrhlYBAAEWjO8uwAB9lcAA64QAwAC6uD8AwADsvgbAAOuNgouNGY0ejYwAAMAAcNzAAOrAAAAAAQONJY2MAAAAAAAAAFwBPgFJjS4hHI02Fo0yLsAAcmHAAOrAwADrh0gBAAErAMAA/fE+Aj0ejUfAAOuPAQABFo1iFo1bLsAAfZXAAOuEwAB/YsAA6sDAAPNFAD0XjXguwAByYcAA6sArwADrhz8GwADrjoKLjZGNmI3XAAXAAH9kwADqwAFqAGADwADLzcABrsAAAAEDjamN1wAAAAEBAY2uAAAAwAB9lWADwAD8lwAAWwAGwADrj4KLjduN5o4vAAXAAH9mwADqwAFqAGADwADLzcABrtQAAAEDjfmOLwAAAAEBAY3+AAAAwAB9lWADwAD8lwAAYAPAAPyXAAAAds7iAHbPLgB20T0AdtHFAHbSCgB20lQAAAAFAsAA65KCi5U5lVmWRAPAAH9oAWqVOmADwAD6mMABf5YAAWABwAD95AAAAgTAAOuVgouVmJWiGMAAf2nAAOrAAWqVcmADwAD6mMABruNgA8AA/JcBKwTAAOuWgouWAZYOGMAAf2rAAOrAAWqV2GADwAD6mMABruNgA8AA/n4BKwEFwADrmAAAAAAEAAADAAAAAAAAAAAAYAPAAOuSAT8BCQEAwAD9+gAAAAAAAAB20xwAAAAAAsAA65mCi5atlrOW7wPAAH9rAAABYAHAAOq0AAAAAQXAAOubAAAAAAQAAAMAAAAAAAAAAABgA8AA65kBPwEJAQDAAOq2AAAAAAAAAHbTbwAAAAACwADrnIKLlvKW+MAAQp4DwAB/bAAAAWABwADrmQABYAHAAPLxDgTAAOufgouXU5dgGMAAf23AAOrAAGADwADxSAErBMAA66yCi5dwl5AEwAB/bgBgA8AA+tEBKgTAAOuggovAAEFWwABBWxjAAH9vwADqwABgA8AA/n4BKwTAAOuhgovAAEFswABBdhjAAHU5wADqwABdA8AA/TsBYAPAAP5+ASsEwADrooKLwABBgcAAQZIYwAB8Z8AA6sAAYAPAAP5+AATAAOujgovAAEGjwABBrxjAAFJSwADqwABdA8AA/TsBYAPAAP5+ASsEwADrpIKLwABBxMAAQckYwAB/cMAA6sAAYAPAAPLeASsEwADrpYKLwABCFsAAQhwYwAB/ccAA6sAAYAPAAPXAASsEwADrpoKLwABCK8AAQjIYwAB/csAA6sAAYAPAAPVvASsEwADrp4KLwABCQcAAQkgYwAB/c8AA6sAAYAPAAPVvASsEwADrqIKLwABCVMAAQmAYwAB/dMAA6sAAYAPAAOz+ASsEwADrqYKLwABCacAAQm8YwAB/dcAA6sAAYAPAAPrRASsEwADrqoKLwABCeMAAQoAYwAB/dsAA6sAAYAPAAPrRASsEwADrq4KLwABCk8AAQpwYwAB/d8AA6sAAXQPAALmIAWADwAD8lwErAQXAAOvFgouXlZeVo70AAAADl6GjvQAAAAcHB5ewAAAATmADwAD+fgCXyQAAAFtdA8AA/TsBYAPAAP5+AJffAAAEwAB8Z2ADwAD+fgCYDAAAAICJXQPAAP1tAmADwAD+fmADwAD+fgCYJAAAAMAAf3hgA8AA+tEAmEkAAADAAH95YAPAAPrRAJhsAAAAgcFgA8AA8t4AAGADwADrnAE+FEmYiCEamI3AAOusPgM9HpivwADKZAIAAifAAH96apj9YQMCYAPAAP5+XQPAAP1tAmADwAD+fmADwAD+fl0DwAC5aAFgA8AAym7AAa76AD0emRnAAMpkAgACJ8AAf3tqmWhhAwJgA8AA/n5dA8AA/W0CYAPAAP5+YAPAAP5+XQPAALloAWADwADKbsABrv8APRuZhsAA66wpP0mZsoWZtsB21ew+Aj2JmcrAdtWdHpnWwADrvAIAAoCZ6cB21ZCBme/AdtWdAD2ImgHAdtWQHpoIwADruwAAAAA/SZonISWaMICaK8B21ZBgA8AA/n4+AT0wmkQfmk7AAPvKAQABJJp5AifAAH98gJp0wHbVkAA/SZqHIiIampTAAPJsAByapoCaocB21ZCDHAEAASeA2QDAAP6bACEcmr2AmrjAdtWQgxwBAAEng7MAwAD+mz4BPRebPi7AAH9vwADqwCSbTwMng7OAm0nAdtWQJ4OzwADroD4BPRebZC7AAH9vwADqwICbbMB21ZDAAOugSZt9ISWbi4GbgcB21Z1dA8AA/TsBWz4BPTCbnR+bp8AA+8oBAAEkm9oCJ8AAf32Bm9DAdtWdAD9Om+ub7wAAl5hgA8AA/JcBFpv7gZvxwHbVnWHAAP1rPRecBy7AAHU5wADqwB6cGMAA9pIBAWADwAD+fgGHnCXAdtfYAMAA66FFnC8BnDicOgAAYmADwAD8lwGTARycQRScP8B22CMIAGMBAAGHnEPAdtfYAMAA/cUBFZxIwHbYIwgcnEkUnEjAdtgjCABkAQABlADAAP29PgROnFmcXQAAhYZgA8AA/n4BHJxogZxfwHbVnUsBAAEUnGnAdtgjCAAAwAD9SkmccyElnHsUnHfAdthxCQBgA8AA/n4+AT0wnJEfnJvAAPvKAQABJJzEAifAAH9+FJzAwHbYcQkAAD89HJzfFpzVLsAAdTnAAOrAwADroYC/AgACFJzgwHbYIwgAHJzugZzlwHbVnUsBAAEUnO/AdtgjCAAAwAD9SgDAAP1LSZz5Gp0GwADybD4BPRydJRadGy7AAHU5wADqwMAA66GAvwIAAhSdJsB22CMIABydKy7AAH9/wADqwAEAARydTBadQi7AAHU5wADqwMAA66FLAQABFJ1NwHbYIwgAAMAA/UoAwADrvQDAAP1LP0mdZSIhHJ17Fp1pLsAAfGfAAOrAwADrokgBAAErAMAA/o0AISWdmBadhi7AAHxnwADqwMAA66JgA8AA/n4+AT0wnawfnbbAAPvKAQABJJ4FAifAAH+AFp3zLsAAfGfAAOrAwADrogA/PReeEy7AAFJSwADqwDGeImADwAD+fgDAAOujPYueXcB21cEjHJ54g55swHbVwUgBAAErAMAA/fFqnoRdA8AA/W0CYAPAAP5+YAPAAP5+gmmDnpDAdtXBAV0DwAD9bQJgA8AA/n5gA8AA/n5JnqEhJZ6xg56lwHbVwV0DwAD9bQJbWz4BPTCewh+ezMAA+8oBAAEknwICJ8AAf4GDnvbAdtXBAD89HJ8bg58PwHbVwYP9AQABNJ8jA58joAAAAAACAgKfJAAAAIPWYAPAAP5+AJ8pAAAAgJZgA8AA/n4AAGADwAD9oQE+AkmfOCIhJZ9AFJ88wHbasAgAYAPAAP5+ASEln1QUn07Adtq+CQBgA8AA/n4+AT0wn2ofn3TAAPvKAQABJJ/JBSfAAH+CFJ+8wHbasAgAJ4GLFJ/CwHbavgkAJ4MmAD89HJ/nFp/aLsAAUlLAAOrAwADro1YBAAEkn/gDFJ/twHbasAgAJ4C8FJ/ywHbavgkAAMAA/UwAwAD9jEmgB4SgC8B21dw+AT0coEIaoDbAAPJ3g/0BAAE0oEoDoEqhRgAAAAICAqBLAAAAg9ZgA8AA/n4AoFAAAACAlmADwAD+fgAAYAPAAP2hAT4DQCWgbBSgaMB225kIAGADwAD+fqBooHUAQCWgjRSgh8B226cJAGADwAD+fqCHoJYASaDlIRyg9oOg6sB21cGHWAEAARShAsB225kIAADAAP2APgE9HKEhFqEULsAAUlLAAOrAwADro1YBAAEkoTIDFKEnwHbbmQgAJ4C8FKEswHbbpwkAAMAA/Uw/AMAA/Yw/SaFUISWhXYahWMB21fxgA8AA8t4+AT0woXsfoYXAAPvKAQABJKG6AifAAH+DhqG1wHbV/AA/PRehxy7AAH9wwADqwIahz8B21fzAAOukSaHaHqHewADrugEAAYah7MB21fwAPgM9F6IcLsAAf3HAAOrAH6IpwAD11AEAATWiNgAAAQBgA8AA7P4BHqI2wADtCwAAAAA1AAAAAQBbAReiTBSiSsB23MwIAMAAeJbAAOrALsAA7TUUAMB23MwIAADAAOulPReihy7AAH9ywADqwB+ilcAA9XYBAAE1oqQAAAEAYAPAAOz+AR6ipMAA7QwAAAAANQAAAAEAWwEXorkUorfAdt0qCADAAHiWwADqwC7AAO01FADAdt0qCAAAwADrpj0XovQuwAB/c8AA6sAfowLAAPV2AQABNaMRAAABAGADwADs/gEeoxHAAO0MAAAAADUAAAABAFsBF6MmFKMkwHbdiAgAwAB4lsAA6sAuwADtNRQAwHbdiAgAAMAA66c/SaNAHqNEwADruQEAAYajVMB21fwAPgE9F6NjLsAAf3TAAOrAHqN2wADtDAAAAADAAOuoPz0Xo5UuwAB/dcAA6sAqwADrqT0Xo6kuwAB/dsAA6sAqwADrqgIIAcAA66KCAMB21bEJAJh6wADrmwAAAAATBsAA66+Ci6PCo9SkFwEAwAB/hMAA6sAAAAABA6PnpBcAAAAAAAAAYAPAAOwGAUqj8AEWpAomo/4AFqP4FqPxLsAAf3HAAOrAwADrpZdowADqwMAA9cNgA8AA7P7AAH+FwADqwMAA7Q8GwADrsIKLpBukLaR0AQDAAH+GwADqwAAAAAEDpEGkdAAAAAAAAABgA8AA7AYBSqRKARakZyakWwAWpFMWpEsuwAB/csAA6sDAAOumwABwkMAA6sDAAPVyYAPAAOz+wAB/hcAA6sDAAO0PBsAA67GCi6R4pIqk0QEAwAB/h8AA6sAAAAABA6SepNEAAAAAAAAAYAPAAOwGAUqkpwEWpMQmpLgAFqSwFqSoLsAAf3PAAOrAwADrp8AAcJDAAOrAwAD1cmADwADs/sAAf4XAAOrAwADtDwbAAOu5gouk1qTipW4AAcAAf4jAAOrAAAAAAQOk8aVuAAAAAQEBpQMAAACBwWADwADy3gAAYAPAAPrRAT4BSqUPASIcpRyApRfAdt+jSAEAAWqlMGADwADy3sABrwQAwAD98QEcpUmApUTAdt+jSAEAAWqlXWADwADy3sABrxAAwAD98QbAAOu6goulc6V/pg4AAcAAf4nAAOrAAAAAAQOljKYOAAAAAQEBpZ4AAACBwWADwADy3gAAYAPAAPrRAT4BSqWqASIcpbeApbLAduAnSAEAAWqly2ADwADy3sABrwQAwAD98QEcpeSApd/AduAnSAEAAWql+GADwADy3sABrxwAwAD98QbAAOu7goumE6YhpooAAcAAf4rAAOrAAAAAAQOmMaaKAAAAAAAAAGADwAD+fgE+AkmmOhqmR8AA8mw+AUqmWgEnwAB/iz9KpnYBJ5zQBsAA67yCi6aPpqOpUQABwAB/jMAA6sAAAAABA6a1qVEAAAACAgKmxAAAAMAAf41gA8AA/n4Apt0AAABbXQPAAP07AWADwAD+fgAAXQPAAP07AWADwAD+fgE+A06m+6cKAADAAH+OXQPAAP07AWADwAD+fgExpwxgA8AA/n4ASacUGqchwADybD4DPRynQ4KnNMB24S5WAQABJ8AAf48AwAD9TD0cp2OCp1TAduEuVgEAAYCnZ8B24PgAwAD9TEaneqeVp4MAAACFhmADwAD+fgCBp4rAduEIPgE9HKeugqefwHbhLlYBAAGDp7LAduGVAMAA/Uw+Bk6n16fjAADAAH+QYAPAAP7IAR+n6cAA/ucAAAAAPYin/8B24PgcqBeAqAzAduD4gugCAAIng0gnwAB/kQDAAP6ePRyoRYOoOcB24cqCjgEAASSoWgMng0iAqE7AduD4J4NIAMAA/tw9HKhygqhjwHbhLlYBAAEnnNEAwAD9TEaog6ieqIwAAACFhmADwAD+fgCBqJPAduEIPgI9jKiowHbiTByosoSorsB24kyC6AIAAieDSCfAAH+RAMAA/p49HKjig6jWwHbhyoKOAQABJKjxAyekwISo7MB24kwng0gAwAD+3D0cqRGCqQLAduEuVgEAARypIYOpFcB24cojAAAAAMAA/uEAwAD9TEqpOAGCqT/AduEuBsAA672Ci6lWqV2vKgAAwAB/f8AA6sAAAAABA6lzryoAAAABAQGpewAAAB9gA8AA/n4AAGADwAD+fgE+A06pj6mWAACBdmADwAD+fgGAqZjAduMFSammIiIcqbOAqarAduMFgxwBAAEng6wAwAD+mwEcqdaAqc3AduMFgxwBAAEngNkAwAD+mwEcqfiAqe/AduMFgxwBAAEng7MAwAD+mz4NTqrbquUAAMAAdHhgA8AA/JcBHKrsJ4LphBABAAGTAMAA/oxOqwWrCAAAg+lgA8AA/sgBH6sOwAD+5wAAAABOqyirMAAAwAB/kmADwAD8lwGTTqs/q0gAAMAAf5NgA8AA/JcBHKtTgKtKwHbjBYC7AgACJ4OzhKtgwHbjwADAAP6RQ6twIRyrgIWrd8B249NIAQABHKuDlIHGAAAAAMAA/LoAwAD9uz4ITquVq6IAAMAAf5RgA8AA/JcBk06rs6u3AACgAmADwAD8lwEcq8KFq7nAduPTgY0BAAGUAMAA/b5Dq88iHKvah6vWwHbkPYFtAQABkwDAAP3IAByr+xyr64Cr4sB24wWEEAEAAYer9sB25D0AwAD+jEgBAAGCq/7AduOCAMAA/bs+Aj2OrBXAduQqHKwhhqwVwHbkKmQBAAGUAMAA/b09j6wvwHbkPRysMoesL8B25D2BjQEAAZQAwAD9vj0crEuDrEjAduOlgo4BAAEcrFqArFHAduMFgL4CAAKErGTAduPAHKx2haxtwHbj04GNAQABhqx4wHbkKgDAAP2+AMAA/pQAwAD+3EWskAGsmaybAABiYAPAAPyXAZMBHKyiFKygwHblMwgAYwEAAYaspMB25CoAwAD9xQEVrLLAduUzCByssxSsssB25TMIAGQBAAGUAMAA/b0+AT0crMaDrMPAduOlgo4BAAEnhBUAwAD+3D0crOmDrObAduOlgo4BAAEnhBEAwAD+3D2MrP/AduPAHK0Sha0JwHbj02QBAAGUAMAA/b09ja0fwHbj0xytM4CtKsB24wWAuwIAAieDs4StQMB248AAwAD+kT0crVuDrVjAduOlgo4BAAEcrWqArWHAduMFgL4CAAKErXTAduPAFq2GgK19wHbjBWHAAP6CAMAA/pQAwAD+3D2JrZbAduMdHK2ig62fwHbjpSMAAAAAwAD+4T2LrhXAduOlH64ewAD+5wEAASeDswA9HK46g643wHbjpYKOAQABga5AwHbjHQDAAP7cPYyuT8B248AcrmkWrmKArlnAduMFYcAA/oKBjQEAAZQAwAD9vkOudByumByuhICue8B24wWEEAEAAYSuj8B248AAwAD+jEgBAAGCrpvAduOCAMAA/bs+Aj0crrODrrDAduOlgo4BAAEngukAwAD+3D2MrsjAduPAHK7PhK7IwHbjwIGNAQABlADAAP2+PRyu5IOu4cB246WCjgEAASeDswDAAP7cPYmu9sB24x0crwKDrv/AduOlIwAAAADAAP7hP0qvGQGBryDAduMdBsAA676Ci68vrzOv6QAAwAB/lcAA6sAAAAABA69Ar+kAAAACAgKvSwAAAIQ5XQPAAP07AWADwAD8lwCvVgAAAINiYAPAAPyXAABgA8AA/JcBPgFKr2QBHK/BHK+dHK96HK9xgK9swHbncEsBAAGBr3LAdueFAMAA/UpkAQABHK+XHK+KgK+FwHbncEsBAAEcr5KBr4vAdueFZAEAAZQAwAD9vQDAAP1Kg78BAAE3CADAAPyzAMAA/b1kAQABHK+6HK+tgK+owHbncEsBAAEcr7WBr67AdueFZAEAAZUAwAD9vQDAAP1Kg78BAAE3EADAAPyzAMAA/b1kAQABHK/eHK/RgK/MwHbncEsBAAEcr9mBr9LAdueFZAEAAZYAwAD9vQDAAP1Kg78BAAE3GADAAPyzAMAA/b0GwADrv4KLr+6v/rjKAACkrMAA6sAAAAABA7AEuMoAAAAAAAAAXQPAALloAWADwADy8QE+BE6wEbAbAADAAF6kXQPAALmIAWADwADy8QEesCHAALmKAAFgA8AA8vEAAEmwOx6wP8AA67kBAAEWsE8uwAB/cMAA6sDAAOukAD4BPRewXy7AAH93wADqwB6wb8AAuYoAAWADwAD8lwAAwADrqz89HrEAwAC9UgEAATSxBAOxBLioAAAAAAAAAGADwAD9oQE+B06xE7EaAAC5iWADwADrkgEfsSDAAOuYAAAAAE6xQrFKAACCoGADwAD60QEcsUwuwAB/lsAA6sALAAsasW/AAPIWFrGFLsAAf2/AAOrAwADroBaxli7AAHU5wADqwMAA66EWsawuwAB8Z8AA6sDAAOuiFrHJLsAAUlLAAOrAwADroxax5xax4S7AAH9wwADqwMAA66TAAH9wwADqwMAA8ukjHrH4wADrugEAARayBi7AAH9wwADqwMAA66QAFrIPLsAAf4TAAOrAwADrrysBYAPAAOwGIx6yNMAA67oBAAEWskIuwAB/cMAA6sDAAOukABaySy7AAH+GwADqwMAA67ArAWADwADsBiMesnHAAOu6AQABFrJ/LsAAf3DAAOrAwADrpAAWsoguwAB/h8AA6sDAAOuxKwFgA8AA7AYjHrKuwADruQEAARayvi7AAH9wwADqwMAA66QAFrLUFrLHLsAAf3TAAOrAwADrqMAAf4XAAOrAwADtDysBYAPAAOwGgbL0wHbpRwDAAOvBSbMDIYKzCMB26WI+Aj0csyWAsxvAdui3gd0BAAEfszfAAPNeBAAEFrNVLsAAf2/AAOrAwADroBazXC7AAHU5wADqwMAA66EWs2+Bs2jAdulHwAB/asAA6sDAAOuWFrOFgbN+wHbpR8AAf2nAAOrAwADrlQAAwAC5kUqzmwA/PRezsi7AAH92wADqwCnAAOuqPRezyS7AAH9twADqwB+z3cAA8VoBAAEuAMAA659JtHQetHjAAOu5AQABFrSILsAAf3DAAOrAwADrpAA+BE60nrSrAADAAH+XYAPAAPyXAZNOtMK00QABwAB/mGADwAD8lwE3CE606LT3AADAAH+ZXQPAAP07AWADwAD8lwEetP3AAPaSAQFgA8AA/JcBhLUHwHbrsgA9HLUtFrUgLsAAf3TAAOrAwADrqIH6AQABNLU0A7U0uHcAAAABAQG1NQAAABJgA8AA47oAAGADwAD9oQE+BU+1R7VLAAABFGEDAV0DwAD9OwFgA8AA/JdgA8AA/JcAA7VTtjkAAAABAQG1XgAAAMAAf5pdA8AA/TsBYAPAAPyXAABgA8AA/JcBPgROtXa1ewAAgpdgA8AA/JcBHLV9LsAAf5XAAOrAAgACFLWLwHbsXwgAkwDAAOu+TrWlta4AAKq+YAPAAPyXARy1sC7AAH+VwADqwAIAAhS1vsB27F8IAJcAwADrvkAiHLXkFLXbwHbsrwoASAEAAZMAwAD9uwEctfUUtezAduyvCgBIAQABlADAAP27tdu1+QBKtggBIxy2GRS2EMB27K8KAEgBAAGTAMAA/bsUtiHAduyBCQActigUtinAduyBCQCBxgAAAADAAPy6AWADwAD8l0+2RrZLAAABwAB/m2EDAFwAA7ZVt4wAAAAAAAAAXAE+BD0XtmYuwAB/dcAA6sApwADrqT0ctosWtoEuwAB/d8AA6sDAAOurwABvmQEAARy2nIe2lMB27DcgAQABhbadwHbrxgAAAMAAuZBJtwAetwTAAOu6AQABFrcSLsAAf3DAAOrAwADrpAA+AT0ct0QmtzgAFrcyFrcrLsAAf3HAAOrAwADrpZdowADqwMAA9cNgA8AA7P7AAH+cAAAAAMAA7SE/PRy3dxa3aS7AAH9twADqwMAA65/AAH+dAAAAAMAA8VM9HLeohbeZwHbrxoNkAwADg7fAwHbrnxy324O3zsB2659kAQABFrfihrfdwHbsHWHAAP1rAMAA/b2Gt+rAduwdAMAA/WA9i7f7wHbrnxy4CIO3+8B2659kAQABFrgQhrgLwHbsHWHAAP1rAMAA/b1JuCIcuDODuCbAduufSAEAAYS4NsB267IAwAD9uz4BPRy4XhS4VMB27VQIACAAAAAAAD8AwADtFz89HLiTgLiJwHbot8AAb5kBAAEuAMAAuZAASrivARa4wIC4tsB26LeB3sAAuY0GwADrwIKLuM+43b0kAADAAH+ewADqwAAAAAEDuOi9JAAAAAICArjyAAAAwAB/n2ADwADIJgC5CwAAAMAAf6BgA8AAyCYAAGADwADzAAE+CU65JbksAAC5iWADwADrkgEfuTLAAOuYAAAAAD0XuU0uwAB/d8AA6sAeuV3AALmKAAFgA8AA/JcAAMAA66tOuXi5gAAAgqBgA8AA+tEBHLmCLsAAf5bAAOrACwALGrmjwADyFha5ty7AAH9vwADqwMAA66AWucYuwAB1OcAA6sDAAOuhFrnaLsAAfGfAAOrAwADroha59S7AAFJSwADqwMAA66MWuiNquhxgA8AA8t7AAa8EwAB/cMAA6sDAAPLpFroyLsAAf4TAAOrAwADrrxa6Ti7AAH+GwADqwMAA67AWumsuwAB/h8AA6sDAAOuxFrqVFrqILsAAf3TAAOrAwADrqMAAf4XAAOrAwADtD4K6rMB271kAwADrwUm6uSGDur7Adu+WPgE9MLrPH7rZwADzXgQABBa69S7AAH9vwADqwMAA66AWuvwuwAB1OcAA6sDAAOuhFrsPgrsIwHbvWcAAf2rAAOrAwADrlha7JYK7HsB271nAAH9pwADqwMAA65UAPz0Xuz0uwAB/bcAA6sAfu1HAAPFaAQABLgDAAOufTrt2u30AAIF2WwEcu38uwAB/ocAA6sAEAAQWu4UuwAB/hMAA6sDAAOuvFruZLsAAf4bAAOrAwADrsBa7ti7AAH+HwADqwMAA67EWu9gWu8suwAB/dMAA6sDAAOuowAB/hcAA6sDAAO0PAMAA68JPu+277QAAAcAAf6JhAwJbW1sAA7v2vGAAAAACAgK79wAAAIGTWwC7/wAAAMAAUf1bAABbAT4CSbwRHLweh7wVwHbxjUgBAAErAMAA/fFKvCcBhrwuwHbxhD9KvDwBHLxMh7xDwHbxjYchAQABhrxTwHbxhAAAPRy8dRa8Zy7AAH9twADqwMAA65/AAH+dAAAAAMAA8VNKvIUBH7yQwADzBwQABCa8rQEcvK2EvKfAdvD5SwEAAZMAAGADwAD8lya8wAEcvMCEvLrAdvD5SwEAAZQAAGADwAD8lxy81oW8zcB28WkgAgACHLzdhLzXwHbw+UsBAAGVAACAvOLAdu8uAAAcvQSFvPvAdvFpIAIAAhy9C4S9BcB28PlLAQABlgAAgb0QwHbvPgAAAAbAAOvBgou9Kb0uvoQABMAAf5bAAOrAAWoAYAPAAMvNwAGvLQAAAQO9Or6EAAAACwsLvU0AAADAAH3LYAPAAPITAL1lAAAATmADwAD+fgC9fgAAAFtdA8AA/TsBYAPAAP5+AL2WAAAAwAB8dGADwAD+fgC9uwAAAICJXQPAAP07AWADwAD+fgC90gAAAIHBYAPAAPyXAL3sAAAACmADwADsBgC+BwAAAIRCYAPAAOwGAL4jAAAAC2ADwADsBgC+PwAAAMAAf6RgA8AA7AYAvmYAAAC5iWADwADrkgAAYAPAAPrRAAbAAOvCgou+ib6JvwYABMAAf6HAAOrAAWoAYAPAAMvNwAGvQQAAAQO+jr8GAAAABAQEvp0AAAAKYAPAAOwGAL6yAAAAhEJgA8AA7AYAvsgAAAALYAPAAOwGAL7kAAAAwAB/pGADwADsBgAAWwAGwADrsoKLvwu/Ib9AAQCEQgAAAAEDvyi/QAAAAAAAAABdA8AAuhwBXQPAAP07AWADwAD8lwE+AUq/LgEWvzUuwAB/csAA6sDAAOumBsAA67OCi79Fv1u/egEACwAAAAEDv2K/egAAAAAAAABdA8AAuhwBXQPAAP07AWADwAD8lwE+AUq/aAEWv28uwAB/c8AA6sDAAOunBsAA67SCi79/v4q/pwEACgAAAAEDv5C/pwAAAAAAAABgA8AA8W4BPgFKv5YBFr+dLsAAf3HAAOrAwADrpQbAAOu1gou/rL+8v/MBABQAAAABA7/Fv/MAAAAAAAAAXQPAALloAWADwAD8lwFKv8gBIyEcv9IWv8guwAB/d8AA6sDAAOurSAEAASsAwAD98Ra/5ha/3C7AAH93wADqwMAA66uB3sAAuY0rAV0DwAC5aAFgA8AA/JcGwADrw4KLv/i//cAAQR4AAMAAYIQAAAABA8AAQAHAAEEeAAAAAQABwABAEQAAAMAAfZVgA8AA8wgBasAAQChgA8AA8wjAAa9VAGADwAD60QE+BEnAAEA4ISXAAEBDgMAAQDzAdvVXYAPAAPMIPgE9MMAAQF4fwABAaMAA+8oBAAEnwAB/pwA/QBbAAEC1LsAAf3bAAOrAwADrqsAAQLXAAEC9AEnAAEDEFsAAQMguwAB/dcAA6sDAAOupSsAAQNABKj9KwABA4gEewABA98AA8soCAAIWwABBAC7AAH+owADrthbAAEEMgMAAQQXAdvVXwAB/YsAA6sDAAPNFAAbAAOu2govAAEEjwABBK8AAQUoBAMAAf6gAAAABA8AAQS/AAEFKAAAAAAAAAGADwAD8lwFKwABBMgEewABBQMAA8tABAAEuAAAAdt5BAHbeqQB23xMAdt99AHbgAQB24IUAduDSAHbi3wB250oAduiBAHbvCAB28pEAdvN1AHbz4gB29C4AdvR5AHb0tgB29S8AdvYtAHb2dQAAABMCwADrxoKMi8aLzJvoA8AAf6kAAAFgAcAA/eQAAWABwAD0iQ0EwADryYKMjA2MJQbAAH+qwADqwABgA8AA/JcBaowkYAPAAPyXCQTAAOvKgoyMOoxSBsAAf6vAAOrAAGADwAD8lwFqjFFgA8AA/JcVBMAA68uCjIxnjHoGwAB/rMAA6sAAYAPAAPyXAWqMeWADwAD8lyEEwADrzIKMjI+MogbAAH+twADqwABgA8AA/JcBaoyhYAPAAPyXUwTAAOvNgoyMt4zKBsAAf67AAOrAAGADwAD8lwFqjMlgA8AA/JeBVwTAAOvOgoyM34zzBsAAf6/AAOrAAGADwAD8lwFqjPFgA8AA/JeDcATAAOvRgoyNEI1VBMAAf7AAYAPAAOvGAR6NKcAA6+cBAAFqjUBgA8AA/JcJAATAAOvSgoyNcY22BMAAf7EAYAPAAOvGAR6NisAA6+cBAAFqjaFgA8AA/JcVAATAAOvTgoyN0o4HBMAAf7IAYAPAAOvGAR6N4MAA6+cBAAFqjfdgA8AA/JchAATAAOvUgoyOI45YBMAAf7MAYAPAAOvGAR6OMcAA6+cBAAFqjkhgA8AA/JdTAATAAOvVgoyOao5xCcAAdacAYAPAAP5+AATAAOvPgoyOgo6HCcAAf7TAAOrAAGADwAD+fgAEwADr0IKMjpuOownAAH+1wADqwABgA8AA47oAAQXAAOvpgoyTw5PDk/wAAAADk9OT/AAAAAMDA5PZAAAEwAB1p2ADwAD+fgCT5wAABMAAf7RgA8AA/n4Ak/MAAATAAH+1YAPAAOO6AABgA8AA68YBPwQIAcAA69WAAMB2+PQIAcAA68+BAMB2+QQIAcAA69CCAMB2+RQJAZPDwAD9+gAAAAAOBsAA69eCjI6ojsCPLAEAgpQAAAABA47FjywAAAAAAAAAYAPAAPR1AUqOyAEjHI7YFo7RFo7ILsAAf7XAAOrAwADr0GHAAP1rSAEAAWqO22ADwAD8l4FXAMAA/btqjwdgA8AA9HXAAan5ao8oYAPAAPR1wAGvbAFgA8AA9HUGwADr2IKMjzGPPI9jAQCWiAAAAAEDj0GPYwAAAAAAAABgA8AA/n4BSo9EASMhHI9KFo9ELsAAf7TAAOrAwADrz0gBAAErAMAA/o0Wj1QuwAB/tMAA6sDAAOvPFo9cLsAAdafAAOvVAWADwAD+fgbAAOvZgoyPaI92j6QBAMAAf7YAAAABA4+Bj6QAAAAAAAAAYAPAAOO6AUqPhAEej4jAAOO/AQABFo+bLsAAf7XAAOrAwADr0AAGwADr2oKMj6mPspDsAQDAAH+3AAAAAQOPvZDsAAAAAAAAAGADwAD60QE+AUePwxaPyy6ClMAA69cCAY/yao/yYAPAAPR1wAGp+QA+AUqQAAEckBMckA8WkAcuwAB/tcAA6sDAAOvQSwEAAZMAwAD9SkgBAAE3fwDAAP27AZA7apA7YAPAAPR1wAGvbAA+AkWQSQGQUpBUAABiYAPAAPyXAZMBHJBbgJBZwHb7JmMBAAEckG1qkF1gA8AA/JeDcIGNAQABlADAAP2+AMAA/cUBiJBywHb7JhyQc4CQcsB2+yZkAQABlADAAP29PgFJkIMhHJCTHJCPFpCHLsAAf7XAAOrAwADr0EsBAAGAkJDAdvsmAMAA/UpIAQABkwDAAP27SpCZASo/SpC5ARyQ3hyQyBaQwC7AAH+1wADqwMAA69BLAQABHJDZapDJYAPAAPyXg3CBjQEAAZQAwAD9vgDAAP1KSAEAAZQAwAD9uwbAAOvbgoyQ8ZD6kjcBAMAAf7gAAAABA5EGkjcAAAAAAAAAYAPAAPrRAT4BR5EMFpEULoKUwADr1wIBkTtqkTtgA8AA9HXAAan5AD4BSpFxASIckYQckYAWkXguwAB/tcAA6sDAAOvQSwEAAZMAwAD9SkgBAAE3gKkAwAD9uwAckZockZYWkY4uwAB/tcAA6sDAAOvQSwEAAZQAwAD9SkgBAAE3gP4AwAD9uwGRwmqRwmADwAD0dcABr2wAPgFKkfMBIhySBhySAhaR+i7AAH+1wADqwMAA69BLAQABkwDAAP1KSAEAATeA/gDAAP27ABySJhySHhySGhaSEi7AAH+1wADqwMAA69BLAQABlADAAP1Kg3wBAAE3gLAAwAD8r0gBAAE3gIAAwAD9uwbAAOvcgoySPJJFk3MBAMAAf7kAAAABA5JRk3MAAAAAAAAAYAPAAPrRAT4BR5JXFpJfLoKUwADr1wIBkoZqkoZgA8AA9HXAAan5AD4BSpLPASIckuIckt4WktYuwAB/tcAA6sDAAOvQSwEAAZMAwAD9SoFtAQABN4DgAMAA/cgAHJL4HJL0FpLsLsAAf7XAAOrAwADr0EsBAAGTAMAA/UpjAQABN4DwAMAA/cUBkx9qkx9gA8AA9HXAAa9sAD4BSpNPARyTYhyTXhaTVi7AAH+1wADqwMAA69BLAQABkwDAAP1KSAEAATeA/wDAAP27BsAA69+CjJN4k5CTvgAAllgAAAABA5OXk74AAAAAAAAAXQPAALloAWADwAD0iQFKk50BHpOrwADsSAEAAS4ABsAA6+aCjJQBlAmVXQQBgwsAAAABA5QflV0AAAABAQGUJwAAAMAAdadgA8AA/n4AAGADwADrxgE+BEmUNiEllEKAlDrAdv56YAPAAP5+PgE9MJRWH5RgwAD7ygEAASSUkQInwAB/uoCUicB2/noAP06UopSqAADAAH+7YAPAAOO6AR6UrMAA6+IBAAGAlLPAdv56AEmUwRyUzYGUxcB2/stIAQABKwDAAP3xPgE9MJTeH5TowAD7ygEAASSVGQInwAB/uoCVEcB2/noAP0qVJgEflTHAAOvpAwADgJVCwHb+eiuBlVHAdv7LAAbAAOvngoyVYpVqmKgEAcAAS40AAAABA5WAmKgAAAABAQGVhQAAALQSYAPAAPyXAABgA8AA68YBPgFHlY+AlZfAdv9nBQGVqGqVqGADwAD8lwkAPgROlcqV0gAAwAB/u2ADwADjugEeldjAAOO+AQABapXiYAPAAPyXgVcAPRyWA4GV/MB2/5uAvwIAApM3fwDAAP1LPRyWHYGWFsB2/5uAvwIAAhyWLmqWHmADwAD8l4FXgY0BAAGUAMAA/b6UAMAA/UtKlkABH5ZLwADr6QMAAyfAAHzMK4GWb8B2/5sAAZaEapaEYAPAAPyXFQA+A06WppauAADAAH+7YAPAAOO6AR6WtMAA474BAAFqlr5gA8AA/JeDcAA9HJbfgZbYwHcANoC/AgACHJbwapbgYAPAAPyXg3CBjQEAAZQAwAD9vpQAwAD9S0qXAgEflw3AAOvpAwADJ8AAfMsrgZcrwHcANgABl0Bql0BgA8AA/JchAD4CTpddl2UAAMAAf7tgA8AA47oBHpdrwADjvgEAAWqXdWADwAD8l4FXAEqXjwEfl5rAAOvpAwADJ8AAf7wnwAB/vIGXwcB3ALkAAZfWapfWYAPAAPyXUwA+Ak6X85f7AADAAH+7YAPAAOO6AR6YAcAA474BAAFqmAtgA8AA/JeDcABKmCUBH5gwwADr6QMAAyeGcCeGcIGYTcB3AREAAAE+AkAqmHWYegA9MJiFH5iPwAD7ygAAAAAGwADr4YKMmO6Y/5l9AADAAH+9wADqwAAAAAEDmRCZfQAAAAEBAZkYAAAAlohgA8AA/n4AAGADwADrxgE+AUqZJAEfmS/AAOvpAwADFplJLsAAdafAAOvVgJlSwHcBlB6ZXMAA478BAAEWmW8uwAB/tcAA6sDAAOvQAAAGwADr44KMmYKZkJqYAwBIAAAAAQOZkpqYAAAAAQEBmZMAAACD21sAAGADwAD60QE+BUmZoCElmayAmabAdwIIYAPAAOvGSpnCASo/SZnUIRyZ4xaZ3oCZ2MB3AgiClABIAQABFpnmLoKUwADr1wDAAP3xSpnsASo/TpoDmgoAAJXSYAPAAPrRASlFmhYBmh+aIQAAYmADwAD8lwGTASIcmiiCmibAdwJ3YwEAARaaMxaaKi7AAH+1wADqwMAA69BhwAD9awDAAP3FAIGaPcB3AmMBippFwHcCdxyaRoKaRcB3AndkAQABlADAAP29PgE9iZpSwHcCYxyabRyaaRaaYYCaW8B3AgjAAH+1wADqwABLAQABgppqwHcCdwAASAEAARyaeBaacC7AAH+1wADqwMAA69BLAQABgpp5wHcCdwDAAP1KAMAA/fFKmocBgZqOwHcCYwbAAOvdgoyanZqlm0gBAIPGAAAAAQOarptIAAAAAAAAAGADwAD8lwE+A06auJq/AACBdmADwAD8lwGURZrIAZrRmtMAAGJgA8AA/JcBkwEcmtqBmtjAdwN9YwEAARaa5Raa3C7AAH+1wADqwMAA69BhwAD9awDAAP3FAYma7cB3A30cmu6Bmu3AdwN9ZAEAAZQAwAD9vT4BPYia+sB3A2kcmx8cmxAcmwuAmwTAdwNpg40BAAE3HwDAAP2/ZAEAARybGhabEi7AAH+1wADqwMAA69BLAQABgZsbwHcDfQDAAP1KAMAA/b2DfAEAATf/////AMAA/K9KmzcBgJs+wHcDaQbAAOvkgoybTZtUm5sAACMAAAABA5tcm5sAAAAAAAAAYAPAAP5+AT4BSptlASSblwUnwAB/vhabfy7AAHWnwADr1SeAmRabkBabiy6ClMAA69eAvcAA9IMngyYGwADr4oKMm6CbsZvmAAXAAH+/wADqwAFqAGADwADLzcABr30AAAEDm7eb5gAAAAEBAZu/AAAAwAB1p2ADwAD+fgAAYAPAAOO6AAAAdvlfAHb53AB2+koAdvqTAHb8AAB2/SwAdv4bAHb+WgB2/0UAdwFuAHcB6QB3Az4AdwRAAHcEmwB3BOUAAAAOAsAA6+qCjJvrm/Gc8wPAAH/BAAABYAHAAP3kAAFgAcAA9KEDBMAA6+yCjJwwnDQJgL0AYAPAAP5+AATAAOvtgoycQpxHCScAYAPAAPyXAATAAOvugoycZ5x1CcAAfPEAXQPAAP07AWADwAD0iQExnHNgA8AA9IkAAQXAAOvygoycepx6nKIAAAADnIucogAAAAICApyRAAAEgL1gA8AA/n4AnJwAAAQnYAPAAPyXAABgA8AA6+oBPwMIAcAA6+yAAMB3BboIAcAA6+2BAMB3BcgJAZx6wAD9+gAAAAABBsAA6/CCjJynnK6c8QAAIwAAAAEDnLac8QAAAAAAAABgA8AA/n4BPgFKnL8BJJztBSfAAH/CFpzaLoC9wADr7CeAmRac4i7AAHzxwADr7ieDJgAAdwYEAHcGVgAAAAECwADr84KMnVudYZ2eA8AAf8MAAAFgAcAA6rQAAAABBcAA6/UAAAAABAAAAwAAAAAAAAAAAGADwADr8wE/AQkBAMAA6rYAAAAAAAAAdwatAAAAAALAAOv2goyd153dwACc/zfAAH/EAAABYAHAAOvzAAFgAcAA9GUBBMAA6/uCjYFkgXMYwAB/xcAA6sAAYAPAAPyXAZMBBcAA6/gAAAAABAAAAwAAAAAAAAAAAGADwADr9gE/AQkAAMAA6/UAAAAABgbAAOv+go2Bd4F/geABAMAAf8bAAOrAAAAAAQOBioHgAAAAAAAAAGADwAD8lwE+AkmBkByBoBaBlC7AAH/FwADqwMAA9GhIAQABkwDAAP27PReBpi7AAH/FwADqwDUAAAABAGADwAD8lwEagbTAAOrONQAAAAEAYAPAAPyXARuBtMAA6s4cgcKAAMB3B4NkAQABlADAAP29gADAdweDwAD0aD9KgcoBFoHRLsAAf8XAAOrAwAD0aAbAAOwEgo2B5YHpgfoAAsAAdRvAAOrAAAAAAQOB8IH6AAAAAQEBgfYAAACX6WADwAD60QAAXQPAAP1tAltbAAbAAOv/go2B/4IKgjkBAMAAf8fAAOrAAAAAAQOCF4I5AAAAAAAAAGADwAD+fgFKghoBJII5AxaCHC7AAH/IwADqwMAA9G0nUBaCLi7AAH/GwADqwMAA9GsGwADsAIKNgj6CSYJZAQLAAH/IwADqwAAAAAEDglmCWQAAAAAAAABgA8AA/n4ABsAA7AGCjYJegmmCeQECwAB/ycAA6sAAAAABA4J5gnkAAAAAAAAAYAPAAP5+AAbAAOwFgo2CfoKFgucAAMAAf8rAAOrAAAAAAQOCkYLnAAAAAQEBgpcAAACX6WADwAD60QAAYAPAAP5+AT4CSYKigIKmwHcI9UqCqwEkgsYCJ4OEFoK1LsAAf8nAAOrAwAD0bj9KgswBFoLTLsAAf8nAAOrAwAD0bgAAdwclAHcH3AB3CBsAdwhzAHcIoQB3CM8AdwlHAAAABgLAAOwGgoyd153dwACc/wPAAH/LAAABYAHAAOv2AAA9BMAA7AiCjKBLoFgGwAB/zABgA8AA/JcBaqBXYAPAAPyXCQTAAOwJgoygbaB7BsAAf80AYAPAAPyXAWqgemADwAD8lxUEwADsCoKMoJCgngbAAH/OAGADwAD8lwFqoJ1gA8AA/JchBMAA7AuCjKCzoMIGwAB/zwBgA8AA/JcBaqDBYAPAAPyXUwTAAOwMgoyg16DpBsAAf9AAYAPAAPyXAWqg6GADwAD8l4FXBMAA7A2CjKD+oRQGwAB/0QBgA8AA/JcBaqELYAPAAPyXCQTAAOwOgoyhKaFDBsAAf9IAYAPAAPyXAWqhNWADwAD8l4FXBMAA7A+CjKFYoX8GwAB/0wBgA8AA/JcBaqF8YAPAAPyXgj8EwADsEIKMoZWhpQbAAH/UAGADwAD8lwFqoaRgA8AA/JeDXQTAAOwRgoyhuqHRBsAAf9UAYAPAAPyXAWqh0GADwAD8l4QRBMAA7BKCjKHmof8GwAB/1gBgA8AA/JcBaqH9YAPAAPyXhBQEwADsE4KMonSiiwbAAH/XAGADwAD8lwFqoolgA8AA/JfAAJcIBMAA7BSCjKKgorgGwAB/2ABgA8AA/JcBaqK2YAPAAPyXwACWNgTAAOwVgoyizaLoBsAAf9kAYAPAAPyXAWqi3GADwAD8l4NdBMAA7BaCjKL9ox4GwAB/2gBgA8AA/JcBaqMLYAPAAPyXwACWNgTAAOwXgoyjpqO6BsAAf9sAYAPAAPyXAWqjuGADwAD8l4NwBMAA7BiCjKPPo94GwAB/3ABgA8AA/JcBaqPcYAPAAPyXwACFbgTAAOwZgoyj86QHBsAAf90AYAPAAPyXAWqkBmADwAD8lwkEwADsGoKMpBykRgbAAH/eAGADwAD8lwFqpDRgA8AA/JfAAJu5BMAA7BuCjKRbpHUGwAB/3wBgA8AA/JcBaqRoYAPAAPyXwAGvjATAAOwcgoykiqS5BsAAf+AAYAPAAPyXAWqkrWADwAD8l8ABr5IEwADsHYKMpRilJgbAAH/hAGADwAD8lwFqpSRgA8AA/JfAAIZGBMAA7B6CjKU7pUkGwAB/4gBgA8AA/JcBaqVHYAPAAPyXwACErgTAAOwfgoylXqVxBsAAf+MAYAPAAPyXAWqlb2ADwAD8l8AAcYoEwADsIIKMpYalnwbAAH/kAGADwAD8lwFqpZ1gA8AA/JfAAH4qBMAA7CGCjKW0pdIGwAB/5QBgA8AA/JcBaqXGYAPAAPyXwAGvmATAAOwigoyl56YFBsAAf+YAYAPAAPyXAWql+WADwAD8l8ABr54EwADsI4KMphqmQgbAAH/nAGADwAD8lwFqpjFgA8AA/JfAAa+kBMAA7CSCjKZXposGwAB/6ABgA8AA/JcBaqZ0YAPAAPyXwAGvqgTAAOwlgoymoKcSBsAAf+kAYAPAAPyXAWqm8mADwAD8l8ABr7AEwADsJoKMpz+nWAbAAH/qAGADwAD8lwFqp1dgA8AA/JcJBMAA7CeCjKdpp4IGwAB/6wBgA8AA/JcBaqeBYAPAAPyXFQTAAOwogoynk6erBsAAf+wAYAPAAPyXAWqnqmADwAD8lyEEwADsKYKMp9an6wbAAH/tAGADwAD8lwFqp+dgA8AA/JcVBMAA7CqCjKgAqBUGwAB/7gBgA8AA/JcBaqgRYAPAAPyXIQTAAOwrgoyoK6hDBsAAf+8AYAPAAPyXAWqoQmADwAD8l4NdBMAA7CyCjKhYqHMGwAB/8ABgA8AA/JcBaqhyYAPAAPyXIQTAAOwugoyojqjABsAAf/HAAOrAAGADwAD7bQFqqKVgA8AA+23AAa+8BMAA7C+CjKjaqRkGwAB/8sAA6sAAYAPAAPttAWqo/2ADwAD7bcABr9EEwADsMIKMqTupSxi5kwBgA8AA+tEBKgTAAOwxgoypVKllGMAAf/MAYAPAAPrRASoEwADsMoKMqW6pghjAAH/0AGADwAD60QEqBMAA7DOCjKmLqaYYwAB/9QBgA8AA+tEBKgTAAOw0goypr6nEGMAAf/YAYAPAAPrRASoEwADsNYKMqdKp9xjAAH/3AF0DwAC5iAFbAR6p58AAuYsAAVsAAATAAOw2goyqUKp4CcAAf/gAXQPAAP07AVsBHqpkwAD2kgEBWwEcqnRqqmlgA8AA/JeCP2QBAAGUAMAA/b0ABMAA7DeCjKqLqpQYwAB9wwBgA8AA0HwBKwTAAOw4goyqnaquGMAAf/kAYAPAAPrRASoEwADsOYKMquKq6wnAAH/6AGADwAD8lwAEwADsOoKMqyerNBjAAH/7AGADwAD8lwGTBMAA7DuCjKuEq5AYwAB//ABgA8AA9IkABMAA7DyCjKuZq6YYwAB//QBgA8AA/JcBkwTAAOw9goyrr6u5GJVqAGADwAD8lwGTBMAA7D6CjKvDq9kYwAB//gBgA8AA+tEBKgTAAOw/goyr4qv5GMAAf/8AYAPAAPrRASoEwADsQIKMrAOsGhjAAIAAAGADwAD60QEqBMAA7EGCjKwjrDsYwACAAQBgA8AA+tEBKgTAAOxCgoysRKxaGMAAgAIAYAPAAPrRASoEwADsQ4KMrGusiwTAAH9uAGADwAD60QEqBMAA7ESCjKymrLIYwACAAwBgA8AA8ScBKwTAAOxFgoytSa1OGKlOAGADwAD95AErBwXAAOyTgozAAFC3wABQt8AAURUAwACABAADwABQzcAAURUAAAABAQHAAFDTAAAEwAB//GADwAD0iQAAYAPAAOwGAT8DCAHAAOw7gADAdxF2CADAAOw5HMAAUQZqwABQ9WADwAD8lwmBBgEAAWrAAFEIYAPAAPyXwAGvngDAAPywCQHAAFC3wADr+AAAAAAFwADslIKMwABRGsAAURrAAFFfAMAAgAUAA8AAUS7AAFFfAAAAAAAAAGADwADsBgE/AwgBwADsOysIAMAA7DkcwABRUGrAAFE/YAPAAPyXCYEGAQABasAAUVJgA8AA/JfAAa+YAMAA/LAJAcAAURrAAOv4AAAAAAXAAOyVgozAAFFkwABRZMAAUcsAgfoAA8AAUXjAAFHLAAAAAAAAAGADwADsBgE+AT0XwABRsy7AAH/2KcAA7DQDCAHAAOw7KwgAwADsORzAAFGdasAAUYlgA8AA/JfAAJu5gQYBAAFqwABRn2ADwAD8l8ABr5gAwAD8sAkBwABRZMAA6/gAAAAABcAA7JaCjMAAUdDAAFHQwABR+wDAAHB8AAPAAFHiwABR+wAAAAAAAABgA8AA7AYBPwMIAcAA7DsrCADAAOw5asAAUfNgA8AA/JfAAa+MCQHAAFHQwADr+AAAAAAFwADsmIKMwABSAMAAUgDAAFKdAMAAgAbAAOrAAAPAAFIawABSnQAAAAICAsAAUh8AAAC0EmADwAD8lwDAAFInAAAAgpRgA8AA/JcAAGADwADsBgE+Aj0XwABSXy7AAH/2KcAA7DQ9HMAAUnkuwACABwIAAoDAAFKLwHcTZBbAAFKPLsAAf/rAAOw5AMAA7G4DCAHAAOw7KwgAwADsORzAAFJSasAAUkFgA8AA/JcJgQYBAAGBwABSVMB3E3QAwAD8sAkBwABSAMAA6/gAAAAABcAA7JmCjMAAUqLAAFKiwABS+wDAAIAIAAPAAFK7wABS+wAAAAEBAcAAUsAAAAC0EmADwAD8lwAAYAPAAOwGAT8BCgDAAFLRwADsmAIAAoDAAFLewHcUMGrAAFLiYAPAAPyXwAGvqgAFwADsmoKMwABTAMAAUwDAAFNHAMAAcHIAA8AAUxPAAFNHAAAAAQEBwABTGAAAALQSYAPAAPyXAABgA8AA7AYBPwEKAMAAUyPAAOyYAgACgMAAUzDAdxSYasAAUzRgA8AA/JfAAa+kAEgGwADsR4KMrVOteK+VAAGXKAAAAAEDrX6vlQAAAAIBAa2GAAAAlohgA8AA/n4AAa2nAAAAgpRgA8AA9HUBaq3BYAPAAPR1wAGv4F0DwAC5aAFdA8AA/TsBYAPAAPSJAT4BSq3NARyuIB6t38AA8eECAAJqrfRgA8AA/JfAAGeHMa4CWwKArgPAdxT5Fq4Oga4JwHcVCJc4wADqwMAA9H4Aga8BAV0DwAD9OwFgA8AA9IkBNK4lA64lr5AAAAABAQGuJgAAAINXWwAAXQPAALlkAV0DwAD9OwFgA8AA9IkBPgFJrjgerjzAAOxkAQABgq5MwHcVmQA+AT0wrmEermfAAOxlAgACgq5zwHcVmSSumgMnwACACYCulMB3FPkng0gAPgFKrrQBJq60ARyveRyuzByuxIKuu8B3FZmWWwEAAZQAAICrAQFgA8AA9IkBNK7hA67hr3cAAAABAQGu4gAAAIF2WwAAYAPAAOvGAT4CTq76rv8AAIKUYAPAAPR1AR6vBcAA9IEBAAEmryUBHK8lg68fwHcWNUsBAAGTAABgA8AA/JcASq81AR+vQMAA6+kDAAMmr1cBHK9Xg69RwHcWNUsBAAGUAABgA8AA/n6Ar1zAdxT5Jq9oARyvaIOvYsB3FjVLAQABlQAAYAPAAOO6AAAAgK0AAAAAAF0DwAC5ZAFdA8AA/TsBYAPAAPSJAMAAuXsGwADsSIKMr5qvubE4AAHAAIAKAAAAAQOvxrE4AAAAAQEBr9cAAADAAIALYAPAAPSJAABdA8AAuWgBYAPAAPSJAT4BSq/jARywTh6v9cAA8eECAAJqsApgA8AA/JfAAGU7MbAnWwEWsEMmsC4AgLApwHcXDmADwADrxsAAf7XAAOrAwADr0ACBrwEBYAPAAPSJATSwUwOwU7EzAAAAAQEBsFQAAACDV1sAAGADwADrxgE+AUmwZh6wasAA7GQBAAGBsHrAdxeMAD4BPTCwjx6wlcAA7GUDAAOBsKHAdxeMJ8AAgAyAsMnAdxcOAD4BSrDnARyxCSaw9ACAsO/AdxcOYAPAAOvGwAB/vcAA6sABAAEmsRsBgbEbwHcXjGADwAD+fgDAAOvhAMAAuXsGwADsSYKMsT2xY7VgAAHAAIANAAAAAQOxcbVgAAAAAwAAA7F/AAAAwACADmADwAD60QFqsZBgA8AA+tEAsaIAAADAAIAPYAPAAPrRAWqxtGADwAD60QCx1QAAAIKUYAPAAPR1AWqx72ADwAD0dcABr+BdA8AAuWgBXQPAAP07AWADwAD0oQE+AUqx+wEcslAesg3AAPHhAgACarIiYAPAAPyXg0oxsjhbARayPoKyOcB3GG+XOMAA6sDAAPR+AIGvAQFdA8AA/TsBYAPAAPShATSyVQOyVbVbAAAAAQEBslYAAACDV1sAAF0DwAC5ZAFdA8AA/TsBYAPAAPShAT4BSbJoHrJswADsZAEAAYOyfMB3GPcAPgE9MLKRHrKXwADsZQIAAoOyo8B3GPcnwACAEAA+Ak6y5rLqAACAq1sBHLL9HLL1g7LswHcY95ZbAQABlAAAg18CAAIeswbAAP10AAJgA8AA/n5gA8AA9KEAADSzMwOzM7UnAAAAAgICszQAAACAq1sAszkAAACBdlsAAFsBPglOs1GzVgAAgpRgA8AA9HUBHrNcwAD0gQEAASazfAEcs3yFs3bAdxmfSwEAAZMAAGADwAD8lwBOs5CzlQAAgL1bARyznYWzl8B3GZ9LAQABlgAATrOws7YAACdbARyzvoWzuMB3GZ9LAQABlwAATrPRs9kAAMAAdadgA8AA68YBH7PfwADr6QMAAyaz9gEcs/aFs/DAdxmfSwEAAZQAAGADwAD+ficAJrQFARy0BYWz/8B3GZ9LAQABlQAAYAPAAOO6AEm0FSIhgbQawHcYVQAWtDYUtC7AdxobCQDAAH+4wADr20q0QwGEtErAdxmWP0m0WSIhgLRewHcYOwAWtHkUtHHAdxobCQDAAH+3wADr2kq0hQGEtIzAdxmWPz0ctJ+EtJvAdxmWmUoCAAKHtKvAdxnkNLSxA7SxtNkAAAAAAAAAYAPAAOvqAUq0twEftLvAAOvyAgACJrTNAYe0zcB3GeRgA8AA/n4mtNMBFLTTwHcaAAgAYAPAAPyXAAAAPRy0+ha08By06YS05sB3GZZLAQABh7TqwHcZ5AAAwAB88QBWAQABFLT+wHcaGwkAAABKtRIBhLUZwHcZlgAASrUyASa1MgEctUQWtT2EtTnAdxlNKQCArQAAAAAAXQPAALlkAV0DwAD9OwFgA8AA9KEAwAC5ewbAAOxKgoy1ZbWSwABHvQABwACAEQAAAAEDtZ7AAEe9AAAAAwMDtaYAAACWiFsAtbAAAACWiWADwAD8lwC1tgAAAMAAgBJbAABdA8AAuWgBXQPAAPUTAWADwADsBgE+Az0etcvAAOruAQABgbXbwHcb0ABJteYiIRy1+IK16sB3G95IAQABKwDAAP3xACElthGCtgPAdxveYAPAAOvGPgFJti8ltkGCtjPAdxveYAPAAP5+PgE9irZWwHcb3h62asAA9JsBAAEmtnoBgrZ6wHcb3mADwAD+fgA/P0q2nAEct8ActroetqfAALlxAQFbAYC2tMB3G8cAga8BAWADwAD95AE0tr8Dtr+3vgAAAAEBAbbAAAAAlohbAABgA8AA/eQBPgJJts4ltteDttLAdxyyYAPAAOvGSrbsATG282ADwADrxgEUtvTAdxyyAwFgA8AA68Y/SrcBARy3FR63CMAA7EcBAAEmtw8Bg7cPwHccsmADwAD+fgCBrwEBXQPAAP07AWADwAD0iQE0txoDtxq3tgAAAAEBAbcbAAAAwAB88V0DwAD9OwFgA8AA9IkAAF0DwAD9OwFgA8AA9IkBPgJJtzAWtz6EtzTAdx05gVXAAP0dPgE9MLdTHrdZwADsZQIAAiskt4gDJ8AAgAmDt4LAdxyyJ4NIAD9Kt50BhLekwHcdOQDAALl7AMAAuXuBrwEBXQPAAPUTAWADwADsBgE0t8UDt8XAAEe4AAAAAQEBt8YAAADAAHzxYAPAAP3kAABdA8AA9RMBYAPAAOwGAT4ITrfdt+cAAMAAXqRdA8AAuYgBYAPAAOwGAR637cAAuYoAAWADwADsBgAATrgTuBYAAMAAcjxdA8AA/TQBYAPAAPSJARa4PSa4IwCDuBnAdx3RXQPAAP07AWADwAD0iVzAAP0bTrhRuFcAAIHHWwErTrhpuHQAAMAAgBNdA8AAwU4CW1sBHrh6wADBUwACW1sAAE+4jLiRAAABwACAFGEDAFwAA7icwABFTgAAAAAAAABcAT4HSbipIRy4sYW4rsB3Hh1dAAAAAMAA/TY+Akm4yRa42Ie4zcB3HmKBVcAA/ZI+AkAhHLj8hrj2wHceVkgBAAErAMAA/fG49rkDAD0cuRyEuRLAdx3zgd0BAAGGuSrAdx5WAMAAuZE/SrlIAD9OuXm5gQABwAB1p2ADwADrxgEmuXkBFrmGhbmDwHceHV7AAP04YAPAAOvGTrmbuaIAAMAAfKNgA8AA7AYBH7mowADslAAAAAA9F7nPFLnIwHcfPQoAwAB//BS53sB3HxIJAMAA7DtOufMAAACBdlsASboDHLoVgroHwHcb3kgBAAErAMAA/fE+AT0VuirAdx94Cxy6OhS6M8B3Hz0KAMAAgBUCAAIWulYUuk7Adx8SCQDAAH+1wADqwMAA69CBumDAdxvQAMAA7HQ+AkAlupeCuonAdxveYAPAAOvGuom6qgA9Fbq3wHcfeAscuscUusDAdx89CgDAAIAWAwADFrr2FLruwHcfEgkAwAB/tcAA6sDAAOvQgbsAwHcb0Ca7FAEWuxSCuwbAdxvewAB/tcAA6sAAYAPAAOO6AMAA7HVJuzEluzwUuzXAdx94CwBgA8AA7iY+Akm7fxy7iYa7g8B3HlZIAQABKwDAAP3xPgJOu6S7rgAAgfVgA8AA/JcBFru3FLuwwHcfeAsBYAPAAO4mgfXAAO4qSbvOIiIhHLvggrvSwHcb3kgBAAErAMAA/fEAIRy8BRS7+8B3IIAMAEgBAAErAMAA/bsAHLwnFLwgwHcfPQoAwACAFwEAARS8M8B3IIAMAADAAOx2PgE9jrxPwHceVh68V8AA7GUDAAMUvGPAdx94CwFgA8AA7iYnwACAGCa8egGCvHrAdxveYAPAAPSJAD4BPY68rcB3HlYevLXAAOxlBAAEFLzBwHcfeAsBYAPAAO4mJ8AAgBkUvN7Adx8SCQCBvOfAdxvQAD89HL0dFL0SwHcehggAIAAAAAAAPgdLPgE9Fr2LFL2EwHcfPQoAlonAAOyOAAG9nVsBvaQAAAGDU1sAAD4CSb21HL2/hr25wHceVkgBAAErAMAA/fE+AT2OvdjAdx5WHr3gwADsZQQABBS97MB3IaAMACfAAIAZFL4EwHcfEgkAgb4NwHcb0AA/PRy+ORS+LsB3HoYIACAAAAAAAE6+sr67AACBtWADwAD7bQEjFr7TFL7LwHcfEgkAwAB/t8AA69pqvuBgA8AA+23AAa/Rar75YAPAAPttwAGvvAFgA8AA+21Ovxe/HQAAwABwZWADwAC9TQEevyPAAL1PAgACFL8pwHciCwwAFL8zwHcehggAAD0ev0vAAOxQAQABFL9dwHcfPQoAAD0cv3uHv3HAdx5igL8CAAIUv3zAdx89CgAUv4bAdyJRDQAAwAD9gj0cwABAHhTAAEAXwHcfPQoAwACAGgIAAAKCjjTAAEAxA8AAQDHAAEP7AAAAAAAAAGADwAD9oQE+CD0cwABASBTAAEBCwHciUQ0AnIYAAAAAwAC9Uz0cwABAaYfAAEBewHceYoReAQABFMAAQHDAdx89CgAAwAD9ik7AAEGzwABBuwAAg01gA8AA7iYBHMAAQcQUwABBvcB3Hz0KAMAAgBsAAAAAwADsfUnAAEHiIRzAAEH4FsAAQe4UwABB5sB3IzQOAIH1wADuKkgBAAGTAMAA/bs+BD0cwABCFRTAAEIOwHcfPQoAgowAAAAAwADsXUnAAEIsHMAAQjaGwABCMMB3HlZIAQABKwDAAP3xPY7AAEI/wHceVhTAAEJHwHcjNA4AP0nAAEJeFsAAQm2HwABCYsB3HmKBVcAA/ZI9HMAAQoEUwABCdsB3HoYIACAAAAAAAD9KwABCkwA/PRzAAEK8FMAAQrXAdx89CgDAAIAcAgAAAp6vKoKOKsAA7Fw9HMAAQvuEwABC8cB3HfPAAG+ZAQABFMAAQwTAdx89CgAAwAC5kD0cwABDJIfAAEMZwHceYoP9AQABNMAAQywDwABDLMAAQ80AAAACAgLAAEMtAAAAiGxbAMAAQzAAAACDq1sAAGADwAD9oQE+BD0cwABDRRTAAENDwHckkhAAnIYAAAAAAD0cwABDXxTAAENdwHckhw8AgowAAAAAAD0cwABDeBTAAEN2wHckhw8AwACAGgAAAAAAPRzAAEOXFMAAQ5XAdySHDwDAAIAcAgAAAp6vKoKOKgAAwAD9jD0cwABD54fAAEPcwHceYoJGAAAAAMAA/YuBxzTAAEQEA8AARATAAEUCAAAAAgICwABEBQAAAINTWwDAAEQIAAAApDRbAABgA8AA/aEBPgU9HMAARCAUwABEGsB3IlENAJyGAAAAAMAAvVM9HMAARD0UwABENsB3Hz0KAIKMAAAAAMAA7F1JwABEfxzAAESJhsAARIPAdx5WSAEAASsAwAD98T2OwABEksB3HlYUwABEmsB3JUUOAD89HMAARLSHwABEqcB3HmKEXgEAARTAAES7wHcfPQoAAMAA/YpJwABE0BbAAETfh8AARNTAdx5igVXAAP2SPRzAAETzFMAAROjAdx6GCAAgAAAAAAA/wADsWz0cwABFFhTAAEUPwHcfPQoAwACAHAIAAAKeryqCjinAAOxcT8AARVfAAEVcAAABwABvqGEDAFwAA8AARWTAAEcwAAAAAAAAAFwBPgM9HMAARXyHwABFccB3HmKD/QEAATTAAEWEA8AARYTAAEaxAAAAAgICwABFhQAAAIhsWwDAAEWIAAAAg6tbAABgA8AA/aEBPgU9HMAARZkUwABFl8B3JqYLAJyGAAAAAAA9HMAARa8UwABFrcB3JpsKAIKMAAAAAAA9HMAARcQUwABFwsB3JpsKAMAAgBoAAAAAAD0cwABF3xTAAEXdwHcmmwoAwACAHAIAAAKeryqCjioAScAARhIcwABGHIbAAEYWwHceVkgBAAErAMAA/fE+AT2OwABGM8B3HlYewABGO8AA7GUCAAIrJMAARpkEJ8AAgB2AwABGhMB3G8cnwACAHoHAAEaTwHcb0AA/AMAA/Yw9HMAARseHwABGvMB3HmKCRgAAAADAAP2LScAARtghFsAARueEwABG3cB3HfPAAG+ewAC5jj4BPRzAAEcKhMAARwDAdx3zgd0BAAGGwABHGMB3HlYAwAC5kT89HMAAR0QUwABHOcB3HoYIACAAAAAAAErAAEdOAR/AAEdZwAD1HAIBYAPAAOwGAALAAHyjFsAAR5aEwABHjMB3HfOB3sAAuY3AAG+oFMAAR6jAdyZPCQAAwAC5ewbAAOxLgozAAEfCwABH38AASd0AAcAAgB8AAAABA8AAR+bAAEndAAAABAQEwABH7gAAAJaIWwDAAEf4AAAAlolgA8AA/JcAwABH/gAAAMAAgBJbAMAASBYAAADAAHANYAPAAPttAABdA8AAuWgBYAPAAOwGAT4BSsAASCUBHMAASF0ewABILMAA7EoDAAOAwABIOcB3KGaBwABIP8B3KHGCwABIRcB3KIEAga8BAWADwADsBgE0wABIYgPAAEhiwABJ2AAAAAEBAcAASIEAAACWvF0DwAD1EwFgA8AA7AYAAF0DwAC5aAFgA8AA7AYBPgNOwABIpcAASLIAAMAAgCBdA8AAuWgBYAPAAOwGARbAAEi5hMAASLTAdykDwAB8o8AA9RVJwABIxyEcwABI04PAAEjLwHcojkgBAAErAMAA+4o+AT2NwABI5sB3KSwcwABJAoXAAEj1wHcpLMAAcA0CAAGDwABJCsB3KI4BwABwDzTAAEkeA8AASR7AAEmtAAAAAAAAAGADwAD9oQE+Aj0cwABJMoTAAEktwHcpA5yGAAAAAMAA9Rk9MMAASUYewABJTMAA7GUCAAIrJMAASaEEJ8AAgCGAwABJjMB3KGYnwACAHoHAAEmbwHcocQDAALl/P0rAAEm+AYXAAEnFwHcpLADAALl7BsAA7E2CjMAASeLAAEoCwABLHwABwACAIsAA6sAAAAABA8AASg7AAEsfAAIAAQEBwABKDwAAAJaIWwAAXQPAALloAWADwADrxgE+Dk4AAAABgcpdA8AAuK4BYAPAAOvGAR/AAEobwAC4uwABYAPAAOvGAABOAAAAAIHLXQPAALlkAWADwADrxgBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsAT8AASgIAAAAAgdJbAAPAAEoOwABLHwQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+AUnAAEohJcAASiqAwABKJcB3KmFgA8AA68Y+Aj2KwABKR8B3KqYUwABKTsB3KmEAAWADwADrxkIAAD4FTcAASnQCNQAAAAAAWwEewABKdMAAuH4EAAQewABKesAA7EcBAAEmwABKgQGAwABKgcB3KmFgA8AA/n4AhADAdyrEhQDAdyrNFADAdyr2CQAAK07AAEptwABKcgABg2FdA8AA/TsBYAPAAPSJARQAwHcrDQoAScAASo4WwABKlxTAAEqSwHcrvA0AgVXAAP0dPgE9MMAASqoewABKsMAA7GUCAAIrJMAASt8DJ8AAgAmAwABK2cB3KmEng0gAPz2KwABK8MB3KqYmwABLAgAWwABK/BTAAEr3wHcrvA0Agx7AAP0fYAPAAOvGQgAAPR4AwAC4gQIAAoEAwHcqfoIAwHcqpgBKwABLHwADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACBAMB3Kn6B3QIAAhQAwHcseA0AFADAdyyBDgAAwAC5kT2LAMB3KrseAMAAuIIBAAEUAMB3KvYJAAA9jADAdyrEHgDAALh8AQABFADAdyr2CQAAPY0AwHcqzR4AwAC4fQEAARQAwHcq9gkAAD0cwABKDoEAwHcqfmoBAAEUAMB3KvYJAAAASgABFgCBAMB3Kn6B3sAAuY0GwADsT4KMwABLJMAAS0HAAE20AAGetAAAAAEDwABLRcAATbQAAgAFBQXAAEtNAAAAlohbAMAAS1cAAACWiWADwAD8lwDAAEthAAAAwACAI2ADwAD8lwDAAEtvAAAAwACAJGADwAD60QDAAEt8AAAAwACAJWADwAD60QAAXQPAALloAWADwADsBgE+Dk4AAAABgcpdA8AAuK4BYAPAAOwGAR/AAEuKwAC4uwABYAPAAOwGAABOAAAAAIHLXQPAALlkAWADwADsBgBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsAT8AAS0EAAAAAgdJbAAPAAEtFwABNtAQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+DD0ewABLkMAA6u4BAAGBwABLoMB3LVkATcAAS7wCNQAAAAAAWwEewABLvMAAuH4EAAQewABLwsAA7E0BAAGAwABLz8B3LU4AFADAdy33CAAUAMB3LgAJABQAwHcuKQ0AACtOwABLssAAS7oAAcAAdadgA8AA68YBFADAdy5ADgBOwABL38AAS+YAAMAAfKNgA8AA7AYBH8AAS+zAAOyVAAAAAD0XwABMDxTAAEwIwHcu4RIAwAB//BTAAEwewHcuwxEAwADsO07AAEwvwABMNgAAgXZbARzAAEw/FMAATDjAdy7hEgDAAIAmBQAFFsAATGcUwABMX8B3LsMRAMAAf7XAAOrAwADr0IHAAExxwHctWYLAAEx3wHctaYPAAEyAwHcte4TAAEyIwHctjQDAAOx3ScAATJUlwABMoBTAAEyZwHcvKBMAYAPAAO4mPgE9MMAATLQfwABMvsAA9W0EAAEnwACAJwODTRTAAE0DwHcvKBMBYAPAAO4mwAB1pxTAAE0UwHcuwxEAlomBwABNI8B3LVk/ScAATTQhHMAATT2BwABNOMB3LVlIAQABkwDAAP27PRfAAE1KFMAATUPAdy7hEgDAAH/7gcAATVbAdy1ZwADsOj89HsAATWDAAOxQAQABFMAATXLAdy7hEgAAPRzAAE2GFMAATX/Ady7hEgDAAIAoAAAAAMAA7GI9jsAATaPAdy3ZFMAATarAdy7hEgBCAAA9HgDAALiBAgAChQDAdy2xhgDAdy3ZAErAAE20AAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIUAwHctsYHdAgACFADAdzCmEQAUAMB3MK8SAADAALmRPY8AwHct7h4AwAC4ggEAARQAwHcuKQ0AAD0VAMB3LfcIHgDAALh8AQABFADAdy4pDQAAPRUAwHcuAAkeAMAAuH0BAAEUAMB3LikNAAA9HMAAS0WFAMB3LbFqAQABFADAdy4pDQAAAEoAARYAhQDAdy2xgd7AALmNBsAA7FCCjMAATbnAAE3FwABOLAABwACAKQAAAAEDwABN1sAATiwAAAABAQHAAE3lAAAAwAB8o2ADwADsBgAAXAE+AT0XwABN+oDAAE3zwHcxgMAAgAMfwABODcAA8W0BAAGAwABOIcB3MYAAwADsRAbAAOxRgozAAE4xwABOTsAAULIAAcAAgCoAAAABA8AATlrAAFCyAAIABQUFwABOYgAAAJaIWwDAAE5sAAAAlolgA8AA/JcAwABOdwAAAMAAgCtgA8AA+tEAwABOigAAAMAAgCxgA8AA+tEAwABOmQAAAMAAgC1gA8AA/JcAAF0DwAC5aAFgA8AA7AYBPg5OAAAAAYHKXQPAALiuAWADwADsBgEfwABOpMAAuLsAAWADwADsBgAATgAAAACBy10DwAC5ZAFgA8AA7AYATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE/AAE5OAAAAAIHSWwADwABOWsAAULIEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgs9HsAATqrAAOruAQABgcAATrrAdzH7AD0ewABOxcAA6u8BAAGEwABO1MB3Mi8ATcAATu8CNQAAAAAAWwEewABO78AAuH4EAAQewABO9cAA7E0BAAGAwABPAsB3MfAAFADAdzKZCAAUAMB3MqIJABQAwHcyyw0AACtOwABO5cAATu0AAcAAdadgA8AA68YBFADAdzLiDgBOwABPEsAATxkAAMAAfKNgA8AA7AYBH8AATx/AAOyTAQABFMAATzbAdzN8EQAATsAAT0jAAE9PAACBdlsBHMAAT1gUwABPUcB3M5oSAMAAgC4FAAUWwABPghTAAE96wHczfBEAwAB/tcAA6sDAAOvQgcAAT4zAdzH7gsAAT5LAdzILg8AAT6DAdzIdhMAAT6vAdzIvAMAA7HhJwABPtSXAAE/AFMAAT7nAdzPIEwBgA8AA7iY+AT0wwABP1B/AAE/ewAD1bQQAASfAAIAvA4NNFMAAUCXAdzPIEwFgA8AA7ibAAHWnFMAAUDbAdzN8EQCWiYHAAFBFwHcx+z9JwABQViEcwABQX4HAAFBawHcx+0gBAAGTAMAA/bs9F8AAUGwUwABQZcB3M5oSAMAAf/uBwABQeMB3MfvAAOw6Pz0ewABQgsAA7FABAAEUwABQlMB3M5oSAAA9jsAAUKHAdzJ7FMAAUKjAdzOaEgBCAAA9HgDAALiBAgAChQDAdzJThgDAdzJ7AErAAFCyAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIUAwHcyU4HdAgACFADAdzUpEQAUAMB3NTISAADAALmRPY8AwHcykB4AwAC4ggEAARQAwHcyyw0AAD0VAMB3MpkIHgDAALh8AQABFADAdzLLDQAAPRUAwHcyogkeAMAAuH0BAAEUAMB3MssNAAA9HMAATlqFAMB3MlNqAQABFADAdzLLDQAAAEoAARYAhQDAdzJTgd7AALmNBsAA7IWCjMAAU0zAAFNVwABTigEAwACAMAAAAAEDwABTYcAAU4oAAAAAAAAAYAPAAPrRAUrAAFNkASEcwABThhzAAFNvFsAAU2UuwAB/+sAA7DmDfAEAAWrAAFNxYAPAAPyXwACbuQDAAPyvSAEAAZMAwAD9uwbAAOyGgozAAFOOwABTl8AAU7wBAMAAgDEAAAABA8AAU57AAFO8AAAAAAAAAGADwAD60QFKwABToQEhHMAAU7gcwABTrBbAAFOiLsAAf/rAAOw5g3wBAAFqwABTrmADwAD8l8ABr4wAwAD8r0gBAAGTAMAA/bsGwADsh4KMwABTwMAAU8nAAFP8AQDAAIAyAAAAAQPAAFPUwABT/AAAAAAAAABgA8AA+tEBSsAAU9cBIRzAAFP4HMAAU+IWwABT2C7AAH/6wADsOYN8AQABasAAU+RgA8AA/JfAAa+kAMAA/K9IAQABkwDAAP27BsAA7IiCjMAAVADAAFQJwABUSAEAwACAMwAAAAEDwABUGsAAVEgAAAAAAAAAYAPAAPrRAUrAAFQdASEcwABURBzAAFQoFsAAVB4uwAB/+sAA7DmDfAEAAWrAAFQqYAPAAPyXwAGvqgDAAPyvSAEAAZMAwAD9uwbAAOyJgozAAFRMwABUVcAAVH4BAMAAgDQAAAABA8AAVFvAAFR+AAAAAAAAAGADwAD60QFKwABUXgEhHMAAVHocwABUaRbAAFRfLsAAf/rAAOw5g3wBAAFqwABUa2ADwAD8l8ABr5gAwAD8r0gBAAGTAMAA/bsGwADsioKMwABUgsAAVIvAAFS0AQDAAIA1AAAAAQPAAFSRwABUtAAAAAAAAABgA8AA+tEBSsAAVJQBIRzAAFSwHMAAVJ8WwABUlS7AAH/6wADsOYN8AQABasAAVKFgA8AA/JfAAa+eAMAA/K9IAQABkwDAAP27BsAA7E6CjMAAVLnAAFS9wABU8AAAwAB1G8AA6sAAAAABA8AAVMTAAFTwAAAAAQEBwABUygAAAJfpYAPAAPrRAABdA8AA/W0CW1sBSsAAVNIBMMAAVNIfwABU3MAA/DAAAAAABsAA7IyCjMAAVPTAAFT/wABVMQEAwAB/yMAA6sAAAAABA8AAVRDAAFUxAAAAAAAAAGADwAD+fgFKwABVEwEwwABVEx/AAFUdwAD8MAAAAAAGwADsjYKMwABVNcAAVUDAAFVyAQDAAH/JwADqwAAAAAEDwABVUcAAVXIAAAAAAAAAYAPAAP5+AUrAAFVUATDAAFVUH8AAVV7AAPwwAAAAAAbAAOxSgozAAFV3wABVgcAAWSIAAJ6vAAAAAQPAAFWFwABZIgAAAAEBAcAAVYoAAACXmGADwAD8lwAAYAPAAOO6AT4KScAAVZUiIRzAAFWdgMAAVZnAdznISAEAASsAwAD9uwAcwABVrIDAAFWowHc5yIFrAQABkwDAAP3GPgE9MMAAVbofwABVxMAA+8oBAAEkwABV5wInwACANoDAAFXjwHc5yAA/ScAAVfQiFsAAVfguwAB/88AA7DEBFsAAVgUuuZPAAOwwSsAAVg8BKz89iMAAViDAdznIHsAAVibAANC2AgFgA8AA/JcCFsAAViouwAB//cAA7DwjHMAAVjmAwABWNcB3OchIAQABKwDAAP27FsAAVkMuwAB//cAA7DyAwABWT8B3OcgBYAPAAPyXAEnAAFZZHMAAVmGAwABWXcB3OchIAQABkwDAAP27SsAAVmcBKz9OwABWfMAAVoMAAIF2WwEcwABWhS7AAIA3AQABgMAAVpDAdznIAMAA7HBJwABWmiXAAFalgcAAVp7Adzr2YAPAAO4mPgI9HMAAVrkupZQDAAMUwABWxcB3OvYBAWADwADuJhrAAFbYwAD+WSfAAIA4AMAA7GZKwABW9wErP0nAAFcOIRzAAFcZgcAAVxLAdzr2SAEAASsAwAD98T4DPRfAAFcqLsAAf/0mwABXKgEcwABXNBbAAFcqLsAAf/3AAOw8gY0BAAEmwABXNAEWwABXPoHAAFc3wHc69mEAYAPAAP2uAMAA/b5gA8AA/JfAAOw8QCIiIiEcwABXoxbAAFeWLsAAgAPAAOxESAEAASsAwAD98QEWwABXri7AAIAxwADshgEWwABXuC7AAIAywADshwEWwABXxi7AAIAzwADsiMAAV5bAAFfWAEnAAFffIRzAAFfwFsAAV+MuwACAA8AA7ERIAQABKwDAAP3xPgE9NQAAAAEAYAPAAPEnARbAAFgDLsAAgAPAAOxEF8AAWBCCwABYEMB3PGXAAIA5JsAAWBABHMAAWBoWwABYEILAAFgQwHc8ZcAAgDnAAPEpZAEAASbAAFgaARbAAFgkgcAAWB3Adzr2YQBgA8AA/a4AwAD9vWADwAD8l8AA8Sk/P0AiIiIhHMAAWJMWwABYhi7AAIADwADsREgBAAErAMAA/fEBFsAAWJ4uwACAMcAA7IYBFsAAWKguwACAMsAA7IcBFsAAWLYuwACAM8AA7IjAAFiGwABYxgBJwABYzSEcwABY3hbAAFjRLsAAgAPAAOxESAEAASsAwAD98T4BPRzAAFj8FsAAWO8uwACAA8AA7ETAAIA6AAAAAMAA8TE/SsAAWREBJsAAWREBgcAAWRjAdzr2YAPAAOO6BsAA7FOCjMAAWSfAAFkwwABdJAAAwACAOwAAAAEDwABZN8AAXSQAAAAAAAAAYAPAAPVHAT4HScAAWUAiFsAAWUQuwAB/88AA7DEBFsAAWVEuuZPAAOwwSsAAWVsBKz9OwABZcMAAWXcAAIF2WwEcwABZeS7AAIA8AAAAAMAA7HFJwABZjyXAAFmagMAAWZPAdz38YAPAAO4mPgI9HMAAWa4upZQDAAMUwABZusB3PfwAAWADwADuJhrAAFnNwAD+WSfAAIA9AMAA7GZKwABZ7wErP0nAAFoGIRzAAFoRgMAAWgrAdz38SAEAASsAwAD98T4DPRfAAFskLsAAf/0mwABbJAEcwABbMC7AAIA+AAAAAMAA7G9gA8AA/JfAAOw8QCIiIiEcwABboBbAAFuTLsAAgAPAAOxESAEAASsAwAD98QEWwABbqy7AAIAxwADshgEWwABbtS7AAIAywADshwEWwABbwy7AAIAzwADsiMAAW5PAAFvTAEnAAFvcIRzAAFvtFsAAW+AuwACAA8AA7ERIAQABKwDAAP3xPgE9NQAAAAEAYAPAAPEnARbAAFwALsAAgAPAAOxEF8AAXA2BwABcDcB3PzvAAIA5JsAAXA0BHMAAXBcWwABcDYHAAFwNwHc/O8AAgDnAAPEpZAEAASbAAFwXARbAAFwmFsAAXCGAwABcGsB3PfwSAGEAYAPAAP2uAMAA/b1gA8AA/JfAAPEpPz9AIiIiIRzAAFyVFsAAXIguwACAA8AA7ERIAQABKwDAAP3xARbAAFygLsAAgDHAAOyGARbAAFyqLsAAgDLAAOyHARbAAFy4LsAAgDPAAOyIwABciMAAXMgAScAAXM8hHMAAXOAWwABc0y7AAIADwADsREgBAAErAMAA/fE+AT0cwABc/hbAAFzxLsAAgAPAAOxEwACAOgAAAADAAPExP0rAAF0TASbAAF0TAYDAAF0awHc9/GADwAD1RwbAAOxUgozAAF0pwABdLcAAY94AAIKOAAAAAQPAAF0ywABj3gAAAAMDA8AAXT0AAACCj10DwAD9OwFgA8AA/JcAwABdSQAAAINiYAPAAPyXAMAAXVUAAACEOWADwAD8lwAAYAPAAPyXAT4RScAAXWIhJcAAXW2AwABdZsB3QKNdA8AA/TsBWz0wwABddx/AAF2BwAD7ygAAAAA/ScAAXZYcwABdoYHAAF2awHdAukgBAAErAMAA/bs9icAAXarAd0C6kz9JwABduhzAAF3EgsAAXb7Ad0DKSAEAASsAwAD9uz4CScAAXdUcwABd4IHAAF3ZwHdAuoCXAQABFsAAXemAwABd4sB3QKNhwAD9awDAAP3HPgE9MMAAXfsfwABeBcAA++ABAAGBwABeFsB3QLoAPz2KwABeLcB3QMocwABeQxbAAF48gMAAXjXAd0CjYcAA/WuBjQEAAYHAAF5FwHdAugDAAP2+P0nAAF5XHMAAXmKBwABeW8B3QLpjAQABkwDAAP3FPTDAAF5nH8AAXnHAAPvgAQABgcAAXoLAd0C6AD9JwABejxzAAF6ZgsAAXpPAd0DKYwEAAZMAwAD9xT0wwABenh/AAF6owAD74AEAAYLAAF65wHdAygA/ScAAXsUcwABe2hzAAF7RgcAAXsrAd0C6ZAEAAYLAAF7TwHdAygDAAP29gJcBAAEWwABe44DAAF7cwHdAo2HAAP1rAMAA/cc+AT0wwABe8x/AAF79wAD74AEAARzAAF8VgcAAXw7Ad0C6ZAEAAYLAAF8XwHdAygDAAP29AD9JwABfKSIhJcAAXzSBwABfLcB3QLpgA8AA/JcBISXAAF9FgsAAXz/Ad0DKYAPAAPyXPgE9MMAAX1YfwABfYMAA+8oBAAEnwACAPwA/ScAAX6EiFsAAX6UuwAB/88AA7DEBFsAAX7IuuZPAAOwwSsAAX7wBkz9JwABfyhzAAF/UgsAAX87Ad0DKSAEAAZMAwAD9u0rAAF/aAZM/TsAAX/jAAGAHAADAAIBAYAPAAO4vAR7AAGARwADq9QMAA4DAAGA0wHdAo4HAAGA8wHdAuhzAAGBLgcAAYETAd0C6ZAEAAYLAAGBNwHdAygDAAP29AE7AAGBdwABgZAAAgXZbARzAAGBuLsAAgEEDAAMWwABgiYPAAGB6wHdDbYKPwADuMRbAAGCgg8AAYJHAd0NtasAA7jKCwABgp8B3QMoAwADscknAAGCzJcAAYL6EwABgt8B3Q8JgA8AA7iY+BE7AAGDawABg4gAAg01gA8AA7iYBJsAAYNoBhMAAYOTAd0PCYAPAAO4mTsAAYP3AAGEAAACkNGADwAD+UgEawABhDcAA/lk9HsAAYRzAALisAQABNMAAYS4DwABhLsAAYVwAAAAAAAAAXAFKwABhNAEcwABhNC6llAMAA4XAAGFAwHdELobAAGFJwHdEVyfAAIBCAMAA7GYAPYzAAGFlwHdDwpM/ScAAYlUiJsAAYmABHMAAYmCEwABiWcB3Q8KBbQEAAZMAAGADwAD60QAmwABibwEcwABib4TAAGJowHdDwmMBAAGCwABiccB3QMoAAGADwAD60T4BPRfAAGKALsAAgAIqwADsQj9JwABizSbAAGLYARzAAGLYhMAAYtHAd0PCYwEAAZMAAGADwAD60T2MwABi3cB3Q8IcwABi5oTAAGLnwHdDwoHGAAAAAAA/QCIiIiEcwABjSBbAAGM7LsAAgAPAAOxESAEAASsAwAD98QEWwABjUy7AAIAxwADshgEWwABjXS7AAIAywADshwEWwABjay7AAIAzwADsiMAAYzvAAGN7AEnAAGOCIRzAAGOTFsAAY4YuwACAA8AA7ERIAQABKwDAAP3xPgE9HMAAY7EWwABjpC7AAIADwADsRMAAgEMBAAEmwABjugGEwABjusB3Q8JgA8AA/JcAwADxMj9KwABjzQEmwABjzQGEwABj1MB3Q8JgA8AA/JcGwADsVYKMwABj48AAY+fAAGcrAACh1gAAAAEDwABj68AAZysAAAAFBQXAAGP2AAAAgo9dA8AA/TsBYAPAAPyXAMAAZAIAAACDYmADwAD8lwDAAGQOAAAAhDlgA8AA/JcAwABkJQAAAMAAdadgA8AA9IkAwABkOAAAAJaJYAPAAPyXAABgA8AA/JcBPgg9HsAAZETAAOruAQABhMAAZFTAd0a9AEnAAGRfIhbAAGRjLsAAf/PAAOwxARbAAGRwLrmTwADsMErAAGR6AZM/TsAAZJjAAGSnAADAAIBAYAPAAO4vAR7AAGSxwADq9QMAA4DAAGTUwHdGdIHAAGTcwHdGi4LAAGTkwHdGmwBOwABk9MAAZPsAAIF2WwEcwABk/S7AAIBEBQAFFsAAZRmFwABlCsB3RxiCj8AA7jEWwABlMIXAAGUhwHdHGGrAAO4ygsAAZT/Ad0abFsAAZWQmwABlTwCDwABlR8B3RqtgA8AA68bAAH+1wADqwMAA69CEwABlbsB3Rr0AwADsc0nAAGV5JcAAZYSGwABlfcB3R1ZgA8AA7iY+BE7AAGWgwABlqAAAg01gA8AA7iYBJsAAZaABhsAAZarAd0dWYAPAAO4mTsAAZcPAAGXGAACkNGADwAD+UgEawABl08AA/lk9HsAAZeLAALisAQABNMAAZfQDwABl9MAAZiEAAAAAAAAAXAFKwABl+gEcwABl+i6llAMAA4fAAGYGwHdH8RTAAGYPwHdIGggAJ8AAgEUAwADsZgA9jsAAZirAd0dWkz9AIiIiIRzAAGaVFsAAZoguwACAA8AA7ERIAQABKwDAAP3xARbAAGagLsAAgDHAAOyGARbAAGaqLsAAgDLAAOyHARbAAGa4LsAAgDPAAOyIwABmiMAAZsgAScAAZs8hHMAAZuAWwABm0y7AAIADwADsREgBAAErAMAA/fE+AT0cwABm/hbAAGbxLsAAgAPAAOxEwACAQwEAASbAAGcHAYbAAGcHwHdHVmADwAD8lwDAAPEyP0rAAGcaASbAAGcaAYbAAGchwHdHVmADwAD8lwbAAOxWgozAAGcwwABnPsAAadwAAIRSAAAAAQPAAGdEwABp3AAAAAAAAABgA8AA7AYBPg1JwABneSIWwABnfS7AAH/zwADsMQEWwABnii65k8AA7DBKwABnlAErP0AcwABnthbAAGesLsAAf/3AAOw8gJcBAAGTAMAA/cfAAGeswABnuQA9F8AAZ8AuwAB//RzAAGfJFsAAZ8AuwAB//cAA7DyBjQEAAZQAwAD9vsAA7Dw9F8AAZ9EulWocwABn1xbAAGfRLpVqwADsPWQBAAGUAMAA/b3AAOw9PRzAAGffLsAAgEYBAAFqwABn7GADwAD8lyEAwADsWk7AAGgOwABoFQAAwAB8o2ADwADsBgEfwABoG8AA7JQAAAAAScAAaDchHMAAaFAcwABoOy7AAIBHAQABgMAAaEjAd0peAMAA7HlIAQABKQDAAP3xSsAAaFkBKz89F8AAaHGAwABoasB3Sl7AAH/7FsAAaH0uwAB/+8AA7DrAAOw6PRfAAGiTgMAAaIzAd0pewAB//BbAAGiiLsAAdafAAOyQwADsOz0ewABor8AA7FABAAGAwABowcB3Sl4AQCIiIiEcwABpIxbAAGkWLsAAgAPAAOxESAEAASsAwAD98QEWwABpLi7AAIAxwADshgEWwABpOC7AAIAywADshwEWwABpRi7AAIAzwADsiMAAaRbAAGlWAEnAAGldIRzAAGluFsAAaWEuwACAA8AA7ERIAQABKwDAAP3xPgE9HMAAabUWwABpqC7AAIADwADsRMAAgEgBAAGUAMAA8TA/SsAAacsBgMAAadLAd0peBsAA7I6CjMAAaeHAAGnpwABqywEAlokAAAABA8AAae7AAGrLAAAAAAAAAGADwAD8lwE+BUnAAGn0IRzAAGoCFsAAafguwAB/+8AA7DpIAQABkwDAAP27SsAAaggBFsAAag8uwAB/+8AA7Do/ScAAah4iFsAAaiIuwAB/88AA7DEBFsAAai8uuZPAAOwwPTDAAGo5asAAakVgA8AA9WTAAa/yP07AAGpnwABqbgAAgXZgA8AA/JcBHMAAanAuwACASgAAAADAAOx6ScAAaoUlwABqkIDAAGqJwHdMa2ADwADuJj0wwABqnIDAAGqiwHdMaz9KwABqrgEXwABqtS7AAH/7gMAAasHAd0xrwADsOgbAAOyPgozAAGrQwABq2MAAa5MBAJ58AAAAAQPAAGrjwABrkwAAAAAAAABgA8AA/JcBPgRJwABq6SIWwABq7S7AAH/zwADsMQEWwABq+i65k8AA7DA9MMAAawRqwABrEGADwAD1ZMABr/I/TsAAazLAAGs5AACBdl0DwAD9OwFbARzAAGs7LsAAgEsAAAAAwADse0nAAGtWJcAAa2GAwABrWsB3TUJgA8AA7iY9MMAAa22AwABrc8B3TUI/SsAAa38BJsAAa38BHMAAa4yAwABrhsB3TUJLAQABlADAAP1KYAPAAPyXBsAA7JCCjMAAa5jAAGuswABrwwEAwAB1pwAAAAEDwABrtMAAa8MAAAAAAAAAYAPAAPSJAUrAAGu3ARbAAGu3LsAAf/zAAOw7BsAA7JGCjMAAa8jAAGvcwABtDgEAnnsAAAABA8AAa+rAAG0OAAAAAAAAAGADwAD0iQE+BknAAGvwIhbAAGv0LsAAf/PAAOwxARbAAGwBLrmTwADsMD0wwABsC2rAAGwXYAPAAPVkwAGv8j9OwABsOcAAbEAAAIF2XQPAAP07AVsBHMAAbEIuwACASwAAAADAAOx7ScAAbF0lwABsaIDAAGxhwHdOcGADwADuJj0wwABsdIDAAGx6wHdOcD9OwABsisAAbI8AAMAAgAtbARzAAGyXgMAAbJHAd05wSwEAAZMAwAD9Sk7AAGykwABsqQAAgpRgA8AA9HUBHsAAbK/AAPSBAQABJsAAbM0BHMAAbM2BwABsycB3TsFLAQABkwAAYAPAAPyXAErAAGzXAR/AAGziwADr6QMAAybAAGz3ARzAAGz3gcAAbPPAd07BSwEAAZQAAGADwAD+fismwABtBgEcwABtBoHAAG0CwHdOwUsBAAGVAABgA8AA47oABsAA7FeCjMAAbRPAAG0YwABv9AAAwACATAAAAAEDwABtJsAAb/QAAAAAAAAAXAE+BUnAAG0vFsAAbTMuwAB/9cAA7DNKwABtSAA/ScAAbVQWwABtWC7AAH//wADsP0rAAG1pAD89F8AAbXUuwAB//ynAAOw/T8AAbZHAAG2WAAABqaZhAwBcAAPAAG2bwABv0QAAAAAAAABcAT4JPRfAAG2mLsAAf/8qwADsP0nAAG3FFsAAbckuwAB/88AA7DFKwABt1AA/ScAAbeIhFsAAbecuwAB//sAA7D5KwABt9wA/ScAAbgUcwABuExbAAG4JLsAAf/3AAOw8SAEAAZMAwAD9uz4CScAAbiMiFsAAbicuwAB/9MAA7DIAIRbAAG44LsAAf/XAAOwzPgVJwABuWRbAAG5dLsAAf/bAAOw0PRzAAG5sLoKMAAAAAMAA7F0/TsAAboPAAG6LAABVWwEcwABumhbAAG6NLsAAf/jAAOw2SwEAAWrAAG6bYAPAAPyXUwDAAP1KScAAbrMcwABuv4HAAG63wHdQ0kgBAAErAMAA/fFKwABuyAA/PRfAAG7aLsAAf/UpwADsMz0cwABvB4HAAG8AwHdQ0iAAAAAAAD9KwABvHQA/TsAAbzfAAG8/AABVWwEcwABvThbAAG9BLsAAf/jAAOw2SwEAAWrAAG9PYAPAAPyXCQDAAP1KScAAb2EcwABvbYHAAG9lwHdRWUgBAAErAMAA/fFKwABvdgA/PRfAAG+ELsAAf/8pwADsPz0cwABvqYHAAG+iwHdRWSAAAAAAAD0ewABvs8AAuKwBAAGAwABvxcB3T/sAPR7AAG/YwAC4rAEAAYDAAG/qwHdP+wAGwADsWIKMwABv+cAAb/7AAHH/AADAAIBNAAAAAQPAAHANwABx/wAAAAEAAAHAAHAUAAAAwABv/mADwAD60QFqwABwHWADwAD60XdcAT4EScAAcCoWwABwLi7AAIABwADsQUrAAHBAAD9JwABwTCEWwABwUS7AAIACwADsQkrAAHBhAD9PwABwbcAAcHIAAAGppmEDAFwAA8AAcHfAAHGGAAAAAAAAAFwBPgg9F8AAcIIuwACAASrAAOxBScAAcKIhFsAAcKcuwACAAsAA7EJKwABwtwA/ScAAcMUWwABwyS7AAH/zwADsMUrAAHDUAD9JwABw4iEWwABw5y7AAIAAwADsQErAAHD4AD89F8AAcQYuwACAACrAAOxATsAAcSnAAHExAABVWwEcwABxQBbAAHEzLsAAf/jAAOw2SwEAAWrAAHFBYAPAAPyXFQDAAP1KScAAcVQcwABxYILAAHFYwHdTIUgBAAErAMAA/fFKwABxaQA/PRzAAHF+gsAAcXfAd1MhIAAAAAAAScAAcY2AwABxkcB3UjI+Aj0XwABxoi7AAIABKcAA7EE9HsAAccHAALisAQABgcAAcdPAd1KOAD4BPRzAAHHzgcAAce7Ad1KOIAAAAAAABsAA7FmCjMAAcjvAAHJAwAB5+wAAwACATgAAAAEDwAByScAAefsAAAABAQHAAHJRAAAAwACAT2ADwAD95AAAXAE+A07AAHLuwABy9QAAm+lgA8AA/JcBJsAAcu4BgMAAcvfAd1QJYAPAAPyXRcAAcwYBwABzD8AAcxEAAGJgA8AA/JcBasAAcxNgA8AA/JcJARzAAHMhgsAAcx/Ad1RPgWsBAAFqwABzJGADwAD8l4FXAMAA/cYBisAAcy/Ad1RPHMAAczCCwABzL8B3VE9kAQABlADAAP29QT4BScAAczwhHMAAc1UcwABzSYHAAHNCwHdUIYN8AQABHMAAc06Ug78BAAGCwABzUcB3VE8AwAD8swDAAPyvSAEAAZMAwAD9uz4IScAAc2YiIhzAAHNtgsAAc2vAd1RPSAEAAWrAAHNwYAPAAPyXUwDAAP27ARzAAHOBgsAAc3/Ad1RPSAEAAWrAAHOEYAPAAPyXCQDAAP27ABbAAHOSLsAAf/TAAOwyQsAAc6AAP0nAAHOyIhbAAHO2LsAAf/PAAOwxACEcwABzxYLAAHPDwHdUT0gBAAFqwABzyGADwAD8l4FXAMAA/btCwABz2AA/ScAAc+oiIiIcwABz8ILAAHPuwHdUT0gBAAFqwABz82ADwAD8l1MAwAD9uwAhFsAAdAMuwACAMMAA7IUAIRbAAHQTLsAAf/PAAOwxACEWwAB0IS65k8AA7DA+Az0XwAB0Ny7AAH/0KcAA7DI9HMAAdFYuwACATAAAAADAAOxXQsAAdHIAP0nAAHSPHMAAdJWCwAB0k8B3VE9IAQABasAAdJhgA8AA/JcVAMAA/bs+Az0XwAB0sC7AAIACKcAA7EI9HMAAdNEuwACATQEAAAHAAG/+KsAA7FhCwAB0/AA/ScAAdRkcwAB1H4LAAHUdwHdUT0gBAAFqwAB1ImADwAD8lwkAwAD9uz4BScAAdTkWwAB1PS7AAIAwwADshT4BPRfAAHVYLsAAf/0cwAB1YRbAAHVYLsAAf/3AAOw8ZAEAAZQAwAD9vcAA7Dw+Az0XwAB1hC7AAH/9JsAAdYQBHMAAdZAuwACAPgAAAADAAOxvYAPAAPyXwADsPD0cwAB1ry7AAIBMAAAAAMAA7FdCwAB1zQA/TsAAdfrAAHYCAABVWwEcwAB2ERbAAHYELsAAf/jAAOw2SwEAAYLAAHYSwHdUTwDAAP1KScAAdh4cwAB2JILAAHYiwHdUT0gBAAFqwAB2J2ADwAD8l4FXAMAA/bs+CUAWwAB2Si7AAH/zwADsMcAAdkrAAHZTAEAhFsAAdmguuZPAAOwwwAB2Z8AAdnAAQCIiIiEcwAB27hbAAHbhLsAAgAPAAOxESAEAASsAwAD98QEWwAB2+S7AAIAxwADshgEWwAB3Ay7AAIAywADshwEWwAB3ES7AAIAzwADsiMAAduHAAHchAEnAAHcuIRzAAHc/FsAAdzIuwACAA8AA7ERIAQABKwDAAP3xPgE9HsAAd2rAAPFrAQABJsAAd3cBFsAAd3cuwACAA8AA7ERgA8AA8VsAPz0XwAB3nC65kynAAOwwPRzAAHfGFsAAd7cuwAB/98AA7DXAAG+ZAAAAAMAAuZA9HMAAd9wuwACAUAAAAADAAOxjScAAeAQhHMAAeBCDwAB4CMB3VzhIAQABKwDAAP3xPRzAAHggg8AAeBnAd1c4IAAAAAAAP0LAAHguAD9JwAB4SxzAAHhRgsAAeE/Ad1RPSAEAAWrAAHhUYAPAAPyXIQDAAP27PgFJwAB4bCEWwAB4cS7AAH/zwADsMT4BPRzAAHiKLqWUAwADHMAAeJYuwACAGwAAAADAAOx9KycAAMAA7GY/ScAAeM4hFsAAeNMuuZPAAOwwPgFJwAB5aSEcwAB5dYPAAHltwHdXOEgBAAErAMAA/fE9HMAAeYWDwAB5fsB3VzggAAAAAAA/Pz9JwAB5pSEWwAB5qi7AAIAwwADshT4CPRfAAHm/LpVqHMAAecUWwAB5vy6VasAA7D1kAQABlADAAP29wADsPT0cwAB5zy7AAIBGAQABasAAedxgA8AA/JeDXQDAAOxaPwbAAOxagozAAHoAwAB6BcAAe0AAAMAAgEYAAAABA8AAehHAAHtAAAAAAQEBwAB6FgAAAMAAgFFgA8AA/JcAAFwBPgFJwAB6LCIhFsAAejEuwAB/88AA7DEAIRbAAHo/LrmTwADsMD4CQCEcwAB6YhbAAHpYLsAAfcPAAOw3SAEAASsAwAD98cAAeljAAHppAEnAAHqOHMAAepkWwAB6ki6VasAA7D1IAQABgMAAepzAd1oiAMAA/bs+A0AcwAB6xBbAAHq9LpVqwADsPWMBAAEcwAB6yZSDvwEAAWrAAHrMYAPAAPyXg10AwAD8swDAAP3FwAB6vcAAetkAPRzAAHrkLsAAgFIBAAEcwAB7ERzAAHr6lIO/AQABasAAev1gA8AA/JfAAJcIAMAA/LOBBgEAARbAAHsTLpVqwADsPQDAAPywAMAA7GE9F8AAeyQulWqTwADsPT8/BsAA7FuCjMAAe0XAAHtKwAB8TgAAwACAGgAAAAEDwAB7VcAAfE4AAAAFAAAFwAB7VwAAAJ6vWwFqAGADwAD9oXnAAHtdAAAAgo5bAWoAYAPAAP2hecAAe2QAAACBx1sBagBgA8AA/aF5wAB7awAAAMAARzRbAWoAYAPAAP2hecAAe3MAAADAAIBTWwFqAGADwAD9oXlcAT4FPRzAAHuSFsAAe4UuwAB/+MAA7DaAvwIAAmrAAHuTYAPAAPyXCYDAAHugwHdbewDAAP1LPRzAAHu3FsAAe6ouwAB/+MAA7DaAvwIAAmrAAHu4YAPAAPyXFYHAAHvGwHdbjwDAAP1LPRzAAHveFsAAe9EuwAB/+MAA7DaAvwIAAmrAAHvfYAPAAPyXIYLAAHvtwHdbowDAAP1LPRzAAHwFFsAAe/guwAB/+MAA7DaAvwIAAmrAAHwGYAPAAPyXU4PAAHwVwHdbtwDAAP1LPRzAAHwuFsAAfCEuwAB/+MAA7DaAvwIAAmrAAHwvYAPAAPyXgVeEwAB8QcB3W80AwAD9SwbAAOxcgozAAHxTwAB8WMAAffMAAMAAgBwAAAABA8AAfGTAAH3zAAAAAgAAAsAAfGYAAACer1sBasAAfGxgA8AA+tF3wAB8cgAAAIKOWwFqwAB8eWADwAD60XdcAT4FPRfAAHyGLsAAf/4mwAB8hgGAwAB8l8B3XRRgA8AA+tHAAOw+PRfAAHyhLsAAgAAmwAB8oQGBwAB8s8B3XStgA8AA+tHAAOxAScAAfL4mwAB8wgGAwAB8wsB3XRRgA8AA+tE9HMAAfMguwACATAAAAADAAOxXP0nAAHzeJsAAfOIBgcAAfOLAd10rYAPAAPrRPRzAAHzpLsAAgE0AAAAAwADsWD9JwAB9ACIhFsAAfQUuwAB/+cAA7DgAIRbAAH0TLsAAf/PAAOwxPgU9F8AAfSYuwAB/+SnAAOw4TsAAfULAAH1IAACEg2ADwAD8lwEcwAB9TJSDvwEAAWrAAH1PYAPAAPyXwACWNgDAAPyzScAAfWohFsAAfW8uwAB/9MAA7DI9isAAfX3Ad14iHMAAfYOCwAB9fcB3XiKBBgEAARzAAH2IlIO/AQABasAAfYtgA8AA/JcJAMAA/LMAwAD8sD9JwAB9nCEWwAB9oS7AAH/2wADsND2KwAB9sMB3XiIcwAB9toLAAH2wwHdeIoEGAQABHMAAfbuUg78BAAFqwAB9vmADwAD8lxUAwAD8swDAAPywPz0cwAB90C7AAIBSAQABgsAAfePAd14iAMAA7GE/BsAA7F2CjMAAffjAAH3/wAB+mwAAgowAAAABA8AAfgTAAH6bAAAAAAAAAF0DwAC5aAFbAT4CScAAfg0iIRbAAH4SLsAAf/PAAOwxACEWwAB+IC65k8AA7DA+Aj0cwAB+Mi7AAIBSAQABHMAAfkeUg78BAAFqwAB+SmADwAD8l4NdAMAA/LMAwADsYT0XwAB+Xy7AAH/zKcAA7DE/SsAAfnsBFsAAfpEWwAB+gi7AAH/3wADsNYHewAC5jQbAAOxegozAAH6gwAB+pcAAgD8AAMAAcQcAAAABA8AAfq3AAIA/AAAAAQEBwAB+vgAAAMAAgFRgA8AA9L8AAFwBPgFJwAB+zyIhFsAAftQuwAB/88AA7DEAIRbAAH7iLrmTwADsMD4BQUfAAH70gMAAfvzAd1/+BAHAAH8masAAfyZgA8AA9L/AAbAQAD4CPRzAAH85LsAAgFUAAAAAwADsYELAAH9TAAHAAH93asAAf3dgA8AA9L/AAbAcAD4CPRzAAH+HLsAAgFYAAAAAwADsX0LAAH+iAAHAAH/GasAAf8ZgA8AA9L/AAbAoAD4CPRzAAH/WLoKMAAAAAMAA7F1CwAB/6QAAAT4BPTDAAIALH8AAgBXAAPvKAQABgMAAgCPAd1/+AD8GwADsX4KMwACARMAAgEnAAIEiAADAAIBWAAAAAQPAAIBWwACBIgAAAAAAAABcAT4BScAAgF8iIRbAAIBkLsAAf/PAAOwxACEWwACAci65k8AA7DA+AknAAICEFsAAgIguwAB/9cAA7DM+AT0cwACApy6CjAAAAADAAOxdPgE9HMAAgMcuwACAUgEAARzAAIDclIO/AQABasAAgN9gA8AA/JeEFADAAPyzAMAA7GE9F8AAgQQuwAB/9inAAOw0PwbAAOxggozAAIEnwACBLMAAgfwAAMAAgFUAAAABA8AAgTjAAIH8AAAAAAAAAFwBPgFJwACBQSIhFsAAgUYuwAB/88AA7DEAIRbAAIFULrmTwADsMD4CScAAgWYWwACBai7AAH/2wADsND4BPRzAAIGDLoKMAAAAAMAA7F0+AT0cwACBoy7AAIBSAQABHMAAgbiUg78BAAFqwACBu2ADwAD8l4QRAMAA/LMAwADsYT0XwACB3y7AAH/0KcAA7DI/BsAA7GGCjMAAggHAAIIGwACC0wAAwACAUgAAAAEDwACCGMAAgtMAAAABAQHAAIIdAAAAEmADwAD8lwAAXAE+BE7AAIItwACCNgAAwACAV2ADwAD8lwEcwACCUxzAAIJDFsAAgjkuwAB/+sAA7DmDfAEAAWrAAIJFYAPAAPyXwAGvkgDAAPyvgQYBAAGAwACCVcB3YqMAwAD8sEAhFsAAgmcuwAB/88AA7DHAAIJmwACCcAA9HMAAgncuwACAKAAAAADAAOxiPR7AAIKiwADvMwMAAy4WwACCvBbAAIKyLsAAfcPAAOw3wAB1McAA0ISBwACCxsB3YrgABsAA7GKCjMAAgtjAAILdwACEhwAAwACAKAAAAAEDwACC8sAAhIcAAAAAAAAAXAE+A0AhFsAAgwMuuZPAAOwwwACDAsAAgwsAScAAgxIcwACDIBbAAIMWLsAAfcPAAOw3SAEAASsAwAD98T4BPRfAAIMxLsAAfcMewACDQcAA0H4BAAEWwACDUC7AAIBOwADsWQDAAOw3P0nAAINmIRrAAINrwADsQz4DPR7AAIONwADKZAIAAifAAIBYasAAg9xhAwJbW10DwAC5aAFgA8AAym7AAbA0AD0ewACD88AAymQCAAInwACAWWrAAIRAYQMCYAPAAP5+XQPAAP1tAmADwAD+fmADwAD+fl0DwAC5aAFgA8AAym7AAbA5AD0bwACEXsAA7EMpPwbAAOxjgozAAISMwACEkcAAhWkAAMAAgFAAAAABA8AAhKvAAIVpAAAAAAAAAFwBPgRAIRzAAITFFsAAhLsuwAB9w8AA7DdIAQABKwDAAP3xwACEu8AAhMwAPRzAAITdFsAAhNMuwAB9w8AA7DeCjAAAAADAANCCPRfAAITqLsAAfcMrwADsNz0XwACFWS6pTivAAOxFBsAA7GSCjMAAhbTAAIXAwACGHgABwACAWgAAAAEDwACFz8AAhh4AAAABAQHAAIXQAAAAg1dbAABgA8AA+tEBPgFKwACF4AEiJcAAhfCAwACF58B3ZVhdA8AA/TsBWwAhHMAAhgccwACGAxTAAIX7wHdlWAABXQPAAP07AVtLAQABkwDAAP1KSAEAAWrAAIYKYAPAAPyXCQDAAP3xBsAA7GWCjMAAhnvAAIaCwACJZgABwACAWwAAAAEDwACGjcAAiWYAAAAEAgTAAIaOAAAAgcdbAMAAhpwAAAAiYAPAAP5+AMAAhrwAAADAAHWnYAPAAPSJAWoAYAPAAP2hecAAhskAAACWiWADwAD8lwFqAGADwAD9oXkAWwE+AUnAAIbWJcAAhuCAwACG2sB3ZfRgA8AA7iY+AUrAAIb0AR/AAIb/wAD1bQQAAYHAAIcPwHdl/wODTRTAAIcrwHdl9AABYAPAAO4mwAB1p4LAAIc7wHdmDpaJg8AAh0rAd2YpScAAh1wlwACHZoDAAIdgwHdl9F0DwAD9OwFbPgJAHsAAh37AAOxkAQABFMAAh47Ad2X0AAFdA8AA/TsBWwDAAId+wACHlABHwACHnRzAAIeqFMAAh6XAd2X0AAFdA8AA/TsBW0sBAAGTAMAA/UoDAcAAh75qwACHvmADwAD8lxUAPgFKwACH4gEfwACH7cAA+8oAAAAAAcAAiAtqwACIC2ADwAD8lyEAPgFKwACIJwEfwACIMsAA9W0EAAGBwACIQsB3Zf8Dg00fwACIZsAA7i4CAAImwACIcwEcwACIcxTAAIhuwHdl9AABXQPAAP07AVtLAQABlQDAAP1KYAPAAP5+JsAAiH0BHMAAiH0UwACIeMB3ZfQAAV0DwAD9OwFbSwEAAZQAwAD9SmADwAD8lwDAAHWngsAAiJrAd2YOlomDwACIt8B3ZikAAT4BSsAAiNkBHsAAiOTAAPxiAQABJ8AAgFwAPgFKwACJGwEfwACJJsAA9W0DAAGBwACJNsB3Zf8CwAB1p4LAAIlIwHdmDpaJg8AAiVfAd2YpBsAA7GaCjMAAiWvAAIlwwACKnQAApZQAAAABA8AAiXvAAIqdAAAAAwMDwACJfAAAAIHHWwDAAImOAAAApDRgA8AA/lIAwACJmQAAACJgA8AA/n4AAFwBPgNOwACJrMAAia4AAINTWwEewACJsMAA7GUEAASAwACJvMB3aG6CwACJw8B3aIkWwACJzC7AAHWnwADskBbAAInVLsAAf/vAAOw6AEnAAIoNIRzAAIorHMAAih4WwACKES7AAH/4wADsNksBAAFqwACKH2ADwAD8lyEAwAD9SkgBAAErAMAA/fE+AT0cwACKVRzAAIpJFsAAijwuwAB/+MAA7DZLAQABasAAikpgA8AA/JchAMAA/UogAgACg8AAilbAd2iegcAAilnAd2h5AAA/PRzAAIqSLoKMAAAAAMAA7F0GwADsZ4KMwACKosAAiqLAAIuKAADAAIBdAAAAAQPAAIqrwACLigAAAAEBAcAAirkAAACDK2ADwAD0zAAAWwE+BEnAAIrHHMAAitKAwACKy8B3aapIAQABKwDAAP3xPTDAAIrbH8AAiuXAAPvMAQABJ4MrAD9OwACLDsAAixUAAIF2WwEcwACLFy7AAIBeAgACJsAAiy4BFsAAiy6AwACLJ8B3aaqXOMAA6sDAAPTVYAPAAPyXFsAAi0MWwACLPhbAAIs2LsAAdafAAOyQgpTAAPSTlzjAAOrAwAD0fgDAAOx+ScAAi1AlwACLW4HAAItUwHdp9GADwADuJj0wwACLZxTAAIttwHdp9AEBYAPAAO4mP0rAAIt5AYHAAIuAwHdp9AbAAOxogozAAIuPwACLlMAAjIUAAMAAgF8AAAABA8AAi53AAIyFAAAAAgICwACLqwAAAIMrYAPAAPTMAMAAi7MAAACAllsAAGADwAD60QE+BEnAAIvAHMAAi8uAwACLxMB3asxIAQABKwDAAP3xPTDAAIvUH8AAi97AAPvMAQABJ4MrAD9OwACMB8AAjA4AAIF2YAPAAO4mARzAAIwQLsAAgGADAAMmwACMJwEWwACMJ4DAAIwgwHdqzJc4wADqwMAA9NVgA8AA/JcWwACMPBbAAIw3FsAAjC8uwAB1p8AA7JCClMAA9JOXOMAA6sDAAPR+gcAAjETAd2rcAMAA7IBJwACMUCEcwACMW4LAAIxUwHdrJkgBAAErAMAA/fE9MMAAjGSCwACMasB3ayY/SsAAjHYBKQbAAOxpgozAAIyKwACMlMAAjd8AAMAAgGEAAAABA8AAjKDAAI3fAAAAAQEBwACMsQAAAIMrYAPAAPTqAABgA8AA47oBPgVJwACMvxzAAIzKgMAAjMPAd2wBSAEAASsAwAD98T0wwACM0x/AAIzdwAD7zAEAASeDKwA/ScAAjQIcwACNExbAAI0NgMAAjQbAd2wBgJbAAPTwSAEAASsAwAD98T0wwACNHB/AAI0mwAD7zAEAASfAAIBiAD9OwACNVsAAjV0AAIF2YAPAAO4mARzAAI1fLsAAgGMDAAMWwACNeYDAAI1ywHdsAYTawAD07hbAAI2HgMAAjYDAd2wBgyvAAPTvFsAAjZaAwACNj8B3bAGAlsAA9PAAwADsf0nAAI2iIRzAAI2tgcAAjabAd2yRSAEAASsAwAD98T0wwACNtoHAAI28wHdskT9KwACNyAEWwACN1oDAAI3PwHdsAYCWwAD08AbAAOxqgozAAI3kwACN6cAAjxsAAMAAgGQAAAABA8AAjfXAAI8bAAAAAQEBwACOBgAAAIMrYAPAAPTqAABcAT4EScAAjhQcwACOH4DAAI4YwHdtZkgBAAErAMAA/fE9MMAAjigfwACOMsAA+8wBAAEngysAP0nAAI5XHMAAjmgWwACOYoDAAI5bwHdtZoCWwAD08EgBAAErAMAA/fE9MMAAjnEfwACOe8AA+8wBAAEnwACAYgA/TsAAjqvAAI6yAACBdmADwADuJgEcwACOtC7AAIBlAwADFsAAjs6AwACOx8B3bWaE2sAA9O4WwACO3IDAAI7VwHdtZoMrwAD07xbAAI7rgMAAjuTAd21mgJbAAPTwAMAA7IFJwACO9yEcwACPAoHAAI77wHdt8UgBAAErAMAA/fE9MMAAjwuBwACPEcB3bfE/BsAA7GuCjMAAjyDAAI8wwACSugAAwACAZgAAAAEDwACPQMAAkroAAAACAgLAAI9YAAAAwACAC2ADwAD0iQDAAI9vAAAAnXNgA8AA9KEAAGADwAD0iQE+AUnAAJAWIhrAAJAjwADyawAcwACQOBbAAJAzgMAAkC7Ad26sgpTAAPSTSAEAAWrAAJBPYAPAAPR1wAGp+QDAAP3xPgFJwACQXSEcwACQa4HAAJBhwHduvkgBAAErAMAA/fE+AkXAAJB+AcAAkIfAAJCJAABiYAPAAPyXAZMBHMAAkJCCwACQjsB3b0FjAQABFsAAkKYWwACQnIHAAJCSwHduvsAAfPHAAPSpYcAA/WsAwAD9xQGKwACQrsB3b0EcwACQr4LAAJCuwHdvQWQBAAGUAMAA/b0+AUnAAJC/HMAAkN8WwACQ2hzAAJDWFsAAkM2BwACQw8B3br7AAHzxwAD0qUsBAAGCwACQ18B3b0EAwAD9SoKUwAD0k0gBAAFqwACQ9mADwAD0dcABqfkAwAD98T4BSsAAkQoBHMAAkSQWwACRG4HAAJERwHduvsAAfPHAAPSpSwEAAYLAAJElwHdvQQDAAP1KPz0wwACReh/AAJGEwAD1bQEAASQAAifAAIBnJ8AAgGgAPgFKwACSagEawACSgcAA9I8+AUrAAJKlASsGwADsbIKMwACSv8AAksTAAJQ3AADAAIBpAAAAAQPAAJLRwACUNwAAAAICAsAAkuIAAADAAIALYAPAAPSJAMAAkvkAAACdc2ADwAD0oQAAXAE+BE7AAJMbwACTKQAAwACAamADwADrxgEmwACTGwEcwACTKy7AAIBmAgACgMAAkzzAd3CmgcAAk0LAd3C4AMAA7GtgA8AA68ZOwACTVsAAk2UAAMAAgGtgA8AA/JcBIxzAAJNxgcAAk2fAd3C4SAEAASsAwAD98ZMWwACTiYHAAJN/wHdwuCfAAPSoAWADwAD8l07AAJOYwACTnwAAgXZgA8AA7iYBHMAAk6EuwACAbAMAAxbAAJPQJsAAk7sAgMAAk7bAd3CmYAPAAOvGwAB/tcAA6sDAAOvQNQAAAAEAYAPAAOvGAYLAAJPiwHdwziMcwACT8YQAwHdxpUgBAAErAAArFsAAk/GEAMB3caXAAH+1wADqwMAA69ABYAPAAOO6g8AAk/vAd3EUAMAA7IJJwACUECXAAJQbhMAAlBTAd3FeYAPAAO4mPTDAAJQnFMAAlC3Ad3FeBAFgA8AA7iY/BsAA7G2CjMAAlDzAAJRBwACVtgAAwACAbQAAAAEDwACUT8AAlbYAAAACAgLAAJRgAAAAwACAC2ADwAD0iQDAAJR3AAAAnXNgA8AA9KEAAFwBPgROwACUmcAAlKcAAMAAgGpgA8AA68YBJsAAlJkBHMAAlKkuwACAZgIAAoDAAJS6wHdyV4HAAJTAwHdyaQDAAOxrYAPAAOvGTsAAlNTAAJTjAADAAIBrYAPAAPyXASMcwACU74HAAJTlwHdyaUgBAAErAMAA/fGTFsAAlQeBwACU/cB3cmknwAD0qAFgA8AA/JdOwACVFsAAlR0AAIF2YAPAAPrRARzAAJUfLsAAgG4DAAMWwACVTybAAJU6AIDAAJU1wHdyV2ADwADrxsAAf7XAAOrAwADr0DUAAAABAGADwADrxgGCwACVYcB3cn8jHMAAlXCEAMB3c1ZIAQABKwAAKxbAAJVwhADAd3NWwAB/tcAA6sDAAOvQAWADwADjuoPAAJV6wHdyxQDAAOyDScAAlY8lwACVmoTAAJWTwHdzD2ADwADuJj0wwACVpoTAAJWswHdzDz8GwADsboKMwACVu8AAlcDAAJYEAATAAIAHAWoAYAPAAMvNwAGwQwAAAQPAAJXRwACWBAAAAAICAsAAldYAAAC0EmADwAD8lwDAAJXeAAAAwAB/+mADwAD8lwAAXAAGwADsb4KMwACWCMAAlgjAAJYzAATAAIA+AWoAYAPAAMvNwAGwVwAAAQPAAJYXwACWMwAAAAAAAABbAAbAAOxwgozAAJY3wACWN8AAll8ABMAAgDcBagBgA8AAy83AAbBrAAABA8AAlkHAAJZfAAAAAQEBwACWRgAAAJeYYAPAAPyXAABbAAbAAOxxgozAAJZjwACWY8AAlowABMAAgDwBagBgA8AAy83AAbB/AAABA8AAlnHAAJaMAAAAAAAAAFsABsAA7HKCjMAAlpDAAJaQwACW5AAEwACAQQFqAGADwADLzcABsJMAAAEDwACWm8AAluQAAAADAwPAAJamAAAAgo9dA8AA/TsBYAPAAPyXAMAAlrIAAACDYmADwAD8lwDAAJa+AAAAhDlgA8AA/JcAAFsABsAA7HOCjMAAlujAAJbowACXVwAEwACARAFqAGADwADLzcABsKcAAAEDwACW9MAAl1cAAAAFBQXAAJb/AAAAgo9dA8AA/TsBYAPAAPyXAMAAlwsAAACDYmADwAD8lwDAAJcXAAAAhDlgA8AA/JcAwACXKAAAAMAAdadgA8AA47oAwACXOwAAAJaJYAPAAPyXAABbAAbAAOx0gozAAJdbwACXW8AAl6YABMAAgBUBagBgA8AAy83AAbC7AAABA8AAl27AAJemAAAAAgICwACXeQAAAMAAgAtgA8AA47oAwACXgwAAAJaJYAPAAPyXAABbAAbAAOx1gozAAJeqwACXqsAAmBkABMAAgBYBagBgA8AAy83AAbDPAAABA8AAl8HAAJgZAAAAAwMDwACXzAAAAMAAgAtgA8AA47oAwACX1gAAAJaJYAPAAPyXAMAAl+YAAADAAIB3YAPAAOO6AABbAAbAAOx2gozAAJgdwACYIsAAmF4ABMAAgBcBagBgA8AAy83AAbDjAAABA8AAmC3AAJheAAAAAQEBwACYMgAAAMAAgHlgA8AA/JcAAGADwAD60QAGwADsd4KMwACYYsAAmGLAAJjmAATAAIAmAWoAYAPAAMvNwAGw9wAAAQPAAJh4wACY5gAAAAUFBcAAmIMAAADAAIALYAPAAOO6AMAAmI0AAACWiWADwAD8lwDAAJiXAAAAwACAI2ADwAD8lwDAAJilAAAAwACAJGADwAD60QDAAJi4AAAAwACAJWADwAD60QAAWwAGwADseIKMwACY6sAAmOrAAJlxAATAAIAuAWoAYAPAAMvNwAGxCwAAAQPAAJkCwACZcQAAAAUFBcAAmQ0AAADAAIALYAPAAOO6AMAAmRcAAACWiWADwAD8lwDAAJkiAAAAwACAK2ADwAD60QDAAJk7AAAAwACALGADwAD60QDAAJlKAAAAwACALWADwAD8lwAAWwAGwADseYKMwACZdcAAmXXAAJm0AATAAIBHAWoAYAPAAMvNwAGxHwAAAQPAAJmBwACZtAAAAAEBAcAAmZAAAADAAHyjYAPAAOwGAABbAAbAAOx6gozAAJm4wACZvMAAmeMABMAAgEoBagBgA8AAy83AAbEzAAABA8AAmcnAAJnjAAAAAAAAAGADwAD8lwAGwADse4KMwACZ58AAmezAAJofAATAAIBLAWoAYAPAAMvNwAGxRwAAAQPAAJn/wACaHwAAAAAAAABdA8AA/TsBWwAGwADsfIKMwACaI8AAmifAAJpWAATAAIB/AWoAYAPAAMvNwAGxWwAAAQPAAJo4wACaVgAAAAAAAABgA8AA/JcABsAA7H2CjMAAmlrAAJpiwACaiwAEwACAGwFqAGADwADLzcABsW8AAAEDwACacMAAmosAAAAAAAAAYAPAAO4mAAbAAOx+gozAAJqPwACaj8AAmtIABMAAgF4BagBgA8AAy83AAbGDAAABA8AAmp7AAJrSAAAAAgICwACaowAAAIMrYAPAAPyXAMAAmq8AAADAAICDYAPAAPyXAABbAAbAAOx/gozAAJrWwACa3sAAmzoABMAAgGMBagBgA8AAy83AAbGXAAABA8AAmvDAAJs6AAAAAwMDwACa9QAAAITaYAPAAPyXAMAAmwAAAACDK2ADwAD8lwDAAJsSAAAAEmADwADjugAAYAPAAO4mAAbAAOyAgozAAJs+wACbRsAAm5YABMAAgGABagBgA8AAy83AAbGrAAABA8AAm1XAAJuWAAAAAwMDwACbWgAAAIMrYAPAAPyXAMAAm2YAAADAAICDYAPAAPyXAMAAm3AAAACAllsAAGADwADuJgAGwADsgYKMwACbmsAAm6LAAJv+AATAAIBlAWoAYAPAAMvNwAGxvwAAAQPAAJu0wACb/gAAAAMDA8AAm7kAAACE2mADwAD8lwDAAJvEAAAAgytgA8AA/JcAwACb1gAAABJgA8AA47oAAGADwADuJgAGwADsgoKMwACcAsAAnArAAJx+AATAAIBsAWoAYAPAAMvNwAGx0wAAAQPAAJwdwACcfgAAAAMDA8AAnCgAAADAAIALYAPAAOO6AMAAnDgAAADAAIBqYAPAAOO6AMAAnFEAAADAAIBrYAPAAPyXAABgA8AA7iYABsAA7IOCjMAAnILAAJyHwACc/QAEwACAbgFqAGADwADLzcABsecAAAEDwACcm8AAnP0AAAADAwPAAJymAAAAwACAC2ADwADjugDAAJy2AAAAwACAamADwADjugDAAJzPAAAAwACAa2ADwAD8lwAAYAPAAPrRAAAAdxTZAHcW7AB3GBgAdxuhAHcoOgB3KjEAdy0kAHcxVAB3McQAdzXXAHc2TQB3NsMAdzc5AHc3rwB3OCUAdzibAHc4/gB3OU4AdzmeAHc9nAB3QHkAd0ZKAHdJZAB3S8cAd0zWAHdNvAB3TgQAd0+BAHdSBQB3U90Ad1n2AHdbTgB3XOcAd18XAHdf0gB3YPkAd2G4AHdidwB3Y3AAd2SXAHdlLAB3ZcgAd2hEAHdpfgB3aqAAd2vVAHdtOgB3boAAd3B6AHdyKwB3c9QAd3QxAHd0bAB3dLcAd3TyAHd1ZAB3dfgAd3ZVAHd2xAB3dxYAd3epAHd4PAB3eIkAd3jJAHd5CwB3eUsAd3mLAHd56AB3elcAd3rEAHd7MwB3e6kAd3wfAAAASALAAOybgozAAJ0CwACdCMAApvMDwACAiQAAAV0BwAC6HAFgA8AA9R0AAWABwAD0rQQEwADsnoKMwACdZsAAnW0JwACAisAA6sAAYAPAAOwGAATAAOyfgozAAJ2NwACdmBjAAG/awADqwABdA8AAuqQBYAPAAPUdASsEwADsoIKMwACdqMAAnbYYwACAi8AA6sAAYAPAANBzASsEwADsoYKMwACdv8AAncYYwACAjMAA6sAAYAPAAPrRAAEFwADssoKMwACfJsAAnybAAJ9SAAAAA8AAnzbAAJ9SAAAAAgICwACfPAAABMAAgIpgA8AA7AYAwACfSgAABMAAgIxgA8AA+tEAAGADwADsmwE/AwgBwADsnoAAwHd+KAgBwADsoYEAwHd+OgkBwACfJsAAulIAAAAACgbAAOyjgozAAJ3LwACd68AAnyEAAZ60AAAAAQPAAJ3vwACfIQAAAAUFBcAAnfcAAADAAHWnWwDAAJ4EAAAAlolgA8AA/JcAwACeDgAAAMAAgCNgA8AA/JcAwACeHAAAAMAAgCRgA8AA+tEAwACeKQAAAMAAgCVgA8AA+tEAAF0DwAC5aAFgA8AA7JsBPgM9HsAAnjfAAOruAQABgcAAnkfAd360AEnAAJ5SHMAAnl6CwACeVsB3fsRjAQABkwDAAP3FPTDAAJ5jH8AAnm3AAPvKAQABJMAAnpUCJ8AAgI2CwACejcB3fsQAP0rAAJ6cARzAAJ7nHsAAnrHAAOxPBQAFgMAAnrbAd36ngcAAnr/Ad360gsAAnsXAd37Eg8AAns7Ad37WhMAAntbAd37oAIGvAQFgA8AA7JsBNMAAnuwDwACe7MAAnxwAAAABAQHAAJ7tAAAAwAB8o2ADwADsBgAAYAPAAOybAUrAAJ74AR/AAJ78wADssgIAAoXAAJ8NwHd/y4PAAJ8VwHd+1gAAwAC5ewbAAOykgozAAJ9XwACfdcAAo+MAAIH6AAAAAQPAAJ97wACj4wAAAAQBAcAAn4EAAADAAG+9YQMBYAPAAPUdXAADwACfqgAAAIGsYAPAAPyNAWoAYAPAAP2hecAAn7gAAACDjmEDAFwBagBgA8AA/aF5wACfxwAAAMAAb4VgA8AA+tEBagBgA8AA/aF5XQPAALpVAWADwAD1HQE+BUnAAJ/dIRzAAJ/tFsAAn+EuwABv2sAA6sDAAOyfSAEAASsAwAD98T4BPTDAAJ/+H8AAoAjAAPw3AQABJ8AAgI4AP07AAKBEwACgSQAApLhgA8AAvaUBGsAAoFDAAL2rPRfAAKBdLsAAb9rAAOrAHsAAoG/AALqwBQFgA8AA9R0ABZnfKcAAb6YWwACgpy7AAICPwADqwMAA7KnAAG+oFsAAoNUuwACAj8AA6sDAAOypwABvzhbAAKECLsAAgJDAAOrAwADsqsAAb6cWwAChKS7AAICQwADqwMAA7KrAAOyfPRzAAKFLFsAAoUMuwACAisAA6sDAAOyewACAGgMAAAOerxzAAKFihMAAoV3Ad4DuwABxQQEAATTAAKF2A8AAoXbAAKJUAAAAAAAAAGADwAD9oQE+AUPAAKGBHMAAoZoWwAChkBbAAKGILsAAgIrAAOrAwADsnsAAf/3AAOw8gJcBAAGTAMAA/cc+BE7AAKGtwAChtAAAwAB8o2ADwADsBgEcwAChvhbAAKG2LsAAgIrAAOrAwADsnoRSAAAAAMAA7FZJwACh0BzAAKHbhcAAodTAd4IXSAEAASsAwAD98UrAAKHkAD89HMAAogAWwACh9C7AAG/awADqwMAA7J9WAQABH8AAogjAAOzdAQABhcAAohPAd4IXAADAALq4ScAAoiUWwACiNRbAAKIpLsAAb9rAAOrAwADsn8AAb6zAALqtSsAAoj8APwDAAL2+gcccwACiY4TAAKJewHeA7sAAcVUBAltbATTAAKJ9A8AAon3AAKLKAAAAAgICwACifgAAAINTWwDAAKKBAAAApDRbAABgA8AA/aEBPgI9HMAAopkWwACijS7AAG/awADqwMAA7J+cRwIAAoXAAKKiwHeDBSbAAKKlAYbAAKKlwHeDEGADwAD+UgDAALq5PRzAAKK8FsAAorAuwABv2sAA6sDAAOyfgowAAAAAwAC6ugDAAL3AwACAUzTAAKLYA8AAotjAAKNoAAAAAAAAAGADwAD9oQE+Aj0cwACi7xbAAKLjLsAAb9rAAOrAwADsn4KMAAAAAMAAurpJwACi/iEcwACjERbAAKMCLsAAgIvAAOrAwADsoEgBAAErAMAA/fE+Aj0cwACjMxbAAKMkLsAAgIvAAOrAwADsoIKMAAAAAMAA0Hk9F8AAo0QuwACAi8AA6sArwADsoD/AAOxbSsAAo28BHMAAo4kWwACjghbAAKN2LsAAb9rAAOrAwADsn4H2wAC6poH6BAABgMAAo5DAd4A5A4GsgcAAo6nAd4BQg46CwACjusB3gGnAAG+Fg8AAo9HAd4CAwAC6LAbAAOysgozAAKPowACj8MAApAQBAJaJAAAAAQPAAKP1wACkBAAAAAAAAABgA8AA/JcBSsAAo/gBFsAApAAWwACj+C7AAICKwADqwMAA7J6WicAA7I4GwADsrYKMwACkCcAApB3AAKQ3AQDAAHWnAAAAAQPAAKQlwACkNwAAAAAAAABgA8AA9IkBSsAApCgBFsAApDAWwACkKC7AAICKwADqwMAA7J7AAHWnwADskAbAAOylgozAAKQ8wACkVMAApR0AAIKMAAAAAQPAAKRZwAClHQAAAAAAAABdA8AAuWgBYAPAAPStAT4BSsAApGIBHMAApHkcwACkcRbAAKRpLsAAgIrAAOrAwADsnoKMAAAAAMAA7F2BrwEBYAPAAPStATTAAKSPA8AApI/AAKUYAAAAAQEBwACkkAAAAIC1WwAAYAPAAOybAT4CScAApJshHMAApK4WwACkny7AAICLwADqwMAA7KBIAQABKwDAAP3xPgI9HMAApNAWwACkwS7AAICLwADqwMAA7KCCjAAAAADAANB5PRfAAKThLsAAgIvAAOrAK8AA7KA/SsAApQYBLgDAALl7BsAA7KeCjMAApSLAAKUnwAClaQAAwAB31MAA6sAAAAABA8AApS3AAKVpAAAAAAAAAFwBPgE9HMAApT4WwAClNi7AAICKwADqwMAA7J7AAIAcAgAAAp6vKoKOKsAA7FwGwADsqIKMwAClbsAApXPAAKW1AADAAICRwADqwAAAAAEDwAClesAApbUAAAAAAAAAXAE+AT0cwAClixbAAKWDLsAAgIrAAOrAwADsnsAAgBwCAAACnq8pgo4qwADsXAbAAOypgozAAKW6wAClv8AApj4AAMAAgI/AAOrAAAAAAQPAAKXZwACmPgAAAAAAAABcAT4BScAApeIWwACl8hbAAKXmLsAAb9rAAOrAwADsn8AAb6/AALquPgE9HMAApgcuwACAkcAA6sAAAAAAwADsqD4BPRzAAKYtFsAApiUuwACAisAA6sDAAOyegowAAAAAwADsXQbAAOyqgozAAKZDwACmSMAAprYAAMAAgJDAAOrAAAAAAQPAAKZbwACmtgAAAAAAAABcAT4BScAApmQWwACmdBbAAKZoLsAAb9rAAOrAwADsn8AAb6zAALqtPgE9HMAApoYuwAB3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d7H7wADxcAbAAO0YgozAANBTwADQWMAA0H0AAIKOAAAAAQPAANBdwADQfQAAAAEBAcAA0GUAAADAAGVtYAPAAP3kAABcAUrAANBtARzAANBzFsAA0G0ul2jAAOrAwADtBoKOAQABgMAA0HnAd7JhAMAA8XUGwADtGYKMwADQgsAA0IfAANC3AACCAwAAAAEDwADQjsAA0LcAAAABAAHAANCXAAAAwABlbWADwAD95AFqwADQnWADwAD+foQoAFwBSsAA0KUBHMAA0KsWwADQpS6XaMAA6sDAAO0GggMBAAGAwADQs8B3ss4AwADxdwbAAO0agozAANC8wADQwcAA0P0AAIQWAAAAAQPAANDOwADQ/QAAAAEBAcAA0NMAAADAAGHuYAPAAPyXAABcAUrAANDgARzAANDmFsAA0OAul2jAAOrAwADtBoQWAQABgMAA0PTAd7NIAMAA8XgGwADtG4KMwADRAsAA0QfAANFNAACf+gAAAAEDwADRD8AA0U0AAAACAQLAANEZAAAAwABDxF0DwAD8+QFbAMAA0SMAAADAAICsYAPAAP5+AWrAANEpYAPAAP5+hCgAXAFKwADRMQEcwADRNxbAANExLpdowADqwMAA7Qaf+gIAAoDAANFAwHeztYHAANFJwHezyQDAAPF2BsAA7RyCjMAA0VLAANFXwADRfwAAVgAAAAEDwADRWsAA0X8AAAABAQHAANFlAAAghDldA8AA/TsBYAPAAPyXAABcAUrAANFvARzAANF1FsAA0W8ul2jAAOrAwADtBlYBAAGAwADRecB3tEsAwADxdAbAAO0dgozAANGEwADRicAA0f4AAJxHAAAAAQPAANGRwADR/gAAAAIBAsAA0ZkAAACBx2ADwAD95ADAANGsAAAAhlRgA8AA/lIBagBgA8AA/aF5AFwBPgE9MMAA0b8fwADRycAA/CkBAAEnwACArQAGwADtHoKMwADSA8AA0grAANJWAACcSQAAAAEDwADSE8AA0lYAAAABAQHAANImAAAggfZdA8AAuhwBXQPAAP07AWADwAD8lwAAXQPAALloAVsBPgFKwADSNAEcwADSQRbAANI7LpdowADqwMAA7QacSQEAAYDAANJLwHe1LADAAPF6BsAA7R+CjMAA0lvAANJiwADSegAAhEYAAAABA8AA0mfAANJ6AAAAAAAAAF0DwAC5aAFbAUrAANJtARzAANJzFsAA0m0ul2jAAOrAwADtBoRGAAAAAMAA8XsGwADtIIKMwADSf8AA0obAANKeAACCjAAAAAEDwADSi8AA0p4AAAAAAAAAXQPAALloAVsBSsAA0pEBHMAA0pcWwADSkS6XaMAA6sDAAO0GgowAAAAAwADxfAbAAO0RgozAANKjwADSrsAA0sABAJ/OAAAAAQPAANKzwADSwAAAAAAAAABdA8AAuWgBWwFKwADStgEWwADSvBbAANK2LpdowADqwMAA7QafzsAA8X4GwADtIYKMwADSxcAA0srAANOWAADAAH+cAAAAAQPAANLRwADTlgAAAAAAAABcAT4FScAA0xYcwADTHxbAANMaLogIwADqwMAA7QFIAQABKwDAAP3xSsAA0ygAPz0cwADTPhbAANM0LsAAgKrAAOrAwADtBaSuAAAAAMAA7Ps9HMAA00ouwACArsAA6sAAAAAAwADtKD0XwADTYS7AAICpwADqwCnAAO0EPRzAANOLFsAA038uwABv2sAA6sDAAO0DgowAAAAAwAC6ugbAAO0igozAANObwADToMAA1CEAAMAAgF8AAAABA8AA06nAANQhAAAAAgICwADTtwAAAIMrYAPAAPTMAMAA08QAAADAAICeYAPAAPrRAABgA8AA+tEBPgJJwADT0xzAANPcFsAA09cuiAjAAOrAwADtAUgBAAErAMAA/fFKwADT5QEqP0rAANP3ARzAANQDFsAA0/4uiAjAAOrAwADtAcAAgF8CAAKAwADUDcB3t4KBwADUFcB3t5IAwAD1KQbAAO0jgozAANQmwADUMMAA1KIAAMAAgGEAAAABA8AA1DzAANSiAAAAAQEBwADUTQAAAIMrYAPAAPTqAABgA8AA47oBPgJJwADUWxzAANRkFsAA1F8uiAjAAOrAwADtAUgBAAErAMAA/fFKwADUbQErP0rAANR+ARzAANSKFsAA1IUuiAjAAOrAwADtAcAAgGEBAAGAwADUl8B3uD8AwAD1KgbAAO0kgozAANSnwADUrMAA1PUAAMAAgGQAAAABA8AA1LjAANT1AAAAAQEBwADUyQAAAIMrYAPAAPTqAABcAT4BPTUAAAABAGADwAD1HQEWwADU1y6ICMAA6sDAAO0BIxzAANTdgQDAd7j4SAEAASsAACscwADU3YEAwHe4+MAAgGQBAAGAwADU6sB3uOEAwAD1KwFcBsAA7RKCjMAA1PrAANUCwADVYwEAlokAAAABA8AA1QfAANVjAAAAAAAAAGADwAD8lwE+A0nAANUNHMAA1RYWwADVES6ICMAA6sDAAO0BSAEAASsAwAD98T0wwADVH2rAANUrYAPAAPVkwAGv8j8/SsAA1U8BFsAA1VsWwADVVi6ICMAA6sDAAO0BlonAAPUtBsAA7ROCjMAA1WjAANV8wADV4wEAwAB1pwAAAAEDwADVhMAA1eMAAAAAAAAAYAPAAPSJAT4DScAA1YocwADVkxbAANWOLogIwADqwMAA7QFIAQABKwDAAP3xPTDAANWcasAA1ahgA8AA9WTAAa/yPz9KwADVzAEWwADV2BbAANXTLogIwADqwMAA7QHAAHWnwAD1LwbAAO0UgozAANXowADV8MAA1l0BAJ58AAAAAQPAANX7wADWXQAAAAAAAABgA8AA/JcBPgNJwADWARzAANYKFsAA1gUuiAjAAOrAwADtAUgBAAErAMAA/fE9MMAA1hNqwADWH2ADwAD1ZMABr/I/P0rAANZDARbAANZPFsAA1kouiAjAAOrAwADtAZ58wAD1LgbAAO0VgozAANZiwADWdsAA1ukBAJ57AAAAAQPAANaEwADW6QAAAAAAAABgA8AA9IkBPgNJwADWihzAANaTFsAA1o4uiAjAAOrAwADtAUgBAAErAMAA/fE9MMAA1pxqwADWqGADwAD1ZMABr/I/P0rAANbMARbAANbYFsAA1tMuiAjAAOrAwADtAZ57wAD1MAbAAO0mgozAANbuwADW9cAA1+MAAMAAgK/AAOrAAAAAAQPAANb/wADX4wAAAAAAAABdA8AAuWgBWwE+Az0XwADXCC7AAICrwADqwB7AANcbwAC5igABWwAAwADtCD0cwADXMhbAANcsLpdowADqwMAA7QaCjAAAAADAAPF8SsAA1z8BJsAA1z8BHMAA11oWwADXUxbAANdGLsAAgKvAAOrAwADtCIHeAIGvAQABNMAA118DwADXX8AA194AAAABAQHAANdgAAAAgLVbAABdA8AA/TsBWwE+BEAcwADXgxbAANd8FsAA13IuwACAqsAA6sDAAO0Fgo/AAOzzSAEAASsAwAD9ZcAA13LAANeKAE7AANeXwADXmwAAn+NgA8AA9R0BFsAA150uiAjAAOrAwADtAT0XwADXqS6ICMAA6sArwADtAUrAANe8ATHAANfDWwKBwADXxMB3vJ0WwADXyS6chMAA6sDAAO0HAABdA8AAuWgBWwbAAO0ngozAANiTwADYmMAA2WEAAMAAgKPAAOrAAAAAAQPAANi0wADZYQAAAAAAAABcAT4BScAA2L0iHMAA2M8WwADYwS6chMAA6sDAAO0HSAEAASsAwAD98QAhHMAA2N8WwADY2i6ICMAA6sDAAO0BSAEAASsAwAD98T4BPRfAANjwLpyEwADqwBzAANkFFsAA2QAuiAjAAOrAwADtAYH6BAABFsAA2QwuwABwzsAA6sDAAO0rA4GsFsAA2SguwABwK8AA6sDAAO0tg44WwADZOi7AAHDPwADqwMAA7SzAAG+FKcAAuizAAO0HPwbAAO0ogozAANlmwADZZsAA2cYAAMAAgK7AAOrAAAAAAQPAANl1wADZxgAAAAAAAABbAT4ETsAA2YLAANmGAACgBGADwAD1HQEWwADZiC6ICMAA6sDAAO0BPRfAANmSLogIwADqwCvAAO0BPRfAANmjLrxfwADqwCnAAO0CPRzAANm7gMAA2bfAd74lgowAAAAAwAD1JwbAAO0pgozAANnLwADZ0MAA20gAAMAAgI/AAOrAAAAAAQPAANnqwADbSAAAAAAAAABcAT4BScAA2fMWwADaAxbAANn3LsAAb9rAAOrAwADtA8AAb6/AALquPgI9HMAA2hguwACAo8AA6sAAAAAAwADtJ0nAANp+IRzAANqHFsAA2oIuiAjAAOrAwADtAUgBAAErAMAA/fE+AT0XwADanxbAANqaLogIwADqwMAA7QHAAICdKcAA9R8/PgI9F8AA2tQuwACAqcAA6sApwADtBEnAANr0IRzAANr9FsAA2vguiAjAAOrAwADtAUgBAAErAMAA/fE+AT0cwADbFRbAANsQLogIwADqwMAA7QHAAHEHAQABasAA2y5gA8AA9L/AAbAQAMAA9Sg/BsAA7SqCjMAA203AANtSwADbwAAAwACAkMAA6sAAAAABA8AA22XAANvAAAAAAAAAAFwBPgFJwADbbiEcwADbdxbAANtyLogIwADqwMAA7QFIAQABKwDAAP3xPgE9F8AA240WwADbiC6ICMAA6sDAAO0BwACAnSEWwADbrhbAANuiLsAAb9rAAOrAwADtA8AAb6zA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wABMogAAAICWYAPAAPyXAABbAAbAAPAagprAAEyswABMrMAATNsAAsAAfysAAAABA8AATLXAAEzbAAAAAwMDwABMwAAAAIKPXQPAAP07AWADwAD8lwDAAEzMAAAAamADwAD8lwDAAEzXAAAAgpBgA8AA/JcAAFsABsAA8BuCmsAATN/AAEzfwABM6QACgbMAAAABA8AATOfAAEzpAAAAAAAAAFsABsAA8ByCmsAATO3AAEztwABNBgACwAB/LgAAAAEDwABM+MAATQYAAAABAQHAAEz9AAAAgbNgA8AA/JcAAFsABsAA8B2CmsAATQrAAE0KwABNHgACrQsAAAABA8AATRLAAE0eAAAAAQEBwABNFwAAAGFgA8AA/JcAAFsABsAA8B6CmsAATSLAAE0iwABNKgACYQAAAAEDwABNKMAATSoAAAAAAAAAWwAGwADwH4KawABNLsAATS7AAE01AAKERgAAAAEDwABNM8AATTUAAAAAAAAAWwAGwADwIIKawABNOcAATTnAAE1bAALAAH8zAAAAAQPAAE09wABNWwAAAAMDA8AATUIAAADAAH8zYAPAAPyXAMAATUwAAABqYAPAAPyXAMAATVcAAACCkGADwAD8lwAAWwAAAHjbTQB426UAeNvZAHjcCwB43DgAeNx1AHjc2gB43RcAeN18AHjdqQB43egAeN4kAHjeUAB43n0AeN7dAAAADgLAAPAhgprAAE1gwABNZsAAgBoDwACCSAAAAWABwAD95AABYAHAAO99CATAAPAkgprAAE2kwABNxQTAAIJJwADqwABgA8AA+tEBKgTAAPApgprAAE3XwABN2wlOAGADwAD+fgAEwADwJYKawABN5cAATf0YwACCSsAA6sAAYAPAAPrRASoEwADwJoKawABOCsAAThYYwACCS8AA6sAAYAPAANBrASsEwADwJ4KawABOLcAATjoYwAB/bcAA6sAAYAPAAPE3ASsEwADwKIKawABOU8AATlcYwACBu8AA6sAAYAPAAPAQASsEwADwKoKawAByn8AAcq0GwACCTABgA8AA/JcBasAAcqxgA8AA/JcJBMAA8CuCmsAAe0nAAHtXGMAARzQAYAPAAPrRASoBBcAA8FGCmsAATlzAAE5cwABPBQAAAAPAAE5twABPBQAAAAICAsAATnIAAACc7WADwAD8lwDAAE6AAAAE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TsAAR4fAAEeTAAHAAIKUYAPAAP5+AR7AAEeVwADwsgEAARbAAEexLk7AAPCLAE7AAEfOwABH2AABwACBeWADwADyHQEawABH5sAA8iJJwABH8xzAAEgBg8AAR/fAeScHSAEAASsAwAD98T4BSsAASBIBHsAASCzAAPEOAwADgsAASDPAeSbZgMAASEDAeSaLgcAASEjAeSaqAD9KwABIXgEcwABIb4PAAEhlwHknB8AAgpUDAAOCwABId8B5JtmAwABIhMB5JouBwABIjMB5JqoAwADyMwbAAPChgpvAAEifwABIuMAASNgAAsAAgajAAOrAAAAAAQPAAEi/wABI2AAAAAEAAAHAAEjGAAAAwABtn2ADwAD60QFqwABI0WADwAD60QBdA8AAuWgBYAPAAPCDAAbAAPCigpvAAEjcwABI4cAASQUAAsAAgarAAOrAAAAAAQPAAEjswABJBQAAAAEAAAHAAEjzAAAAwABtn2ADwAD60QFqwABI/mADwAD60QBcAAbAAPCjgpvAAEkKwABJHsAASoIAAcAAgpbAAOrAAAAAAQPAAEkowABKggAAAAICAsAASTAAAADAAIKXYAPAAP5+AMAAST4AAADAAIKYYAPAAP5+AABdA8AAuWgBYAPAAPrRAT4BSsAASUsBHMAASagewABJWMAA79YCAAJqwABJg2ADwAD8l8AAaiAxwABJklsDK4DAAEmZwHkojIHAAEmgwHkongCBrwEBYAPAAPrRATTAAEmtA8AASa3AAEp9AAAAAQEBwABJrgAAAINXWwAAXQPAALlkAWADwAD60QE+AknAAEnAHsAAScTAAOrzAQABgsAASdXAeSkhAD4BPTDAAEnqHsAASfDAAOr0AwADgsAASgfAeSkhJMAASlIFJ8AAgpmAwABKQ8B5KIwngYuBwABKS8B5KJ4ngyYnAAA/SsAASmcBJsAASmcBgsAASm7AeSkhXQPAALlkAWADwAD60QDAALl7BsAA8LSCm8AATMnAAEzdwABNswABnGcAAAABA8AATObAAE2zAAAAAgICwABM7gAAAMAAgpdgA8AA/n4AwABM/AAAAMAAgphgA8AA/n4AAF0DwAC5aAFgA8AA+tEBPgNOwABNFcAATR8AAMAAgXlgA8AA8h0BGsAATS3AAPIiScAATTocwABNSILAAE0+wHkqI0gBAAErAMAA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WF5gA8AA8wjAAb7IBMAA8yyCpsAAWKnAAFi6BsAAg+8BasAAWGpgA8AA+oTAAcFqYAPAAPMIAWrAAFizYAPAAPMIwAG+4gTAAPMtgqbAAFj9wABZDAbAAIPxAWrAAFi/YAPAAPqEwAHBfmADwADzCAFqwABZBmADwADzCMABvvwEwADzLoKmwABZT8AAWV4GwACD8wFqwABZEWADwAD6hMABwZJgA8AA8wgBasAAWVhgA8AA8wjAAb8WBMAA8y+CpsAAWaLAAFmzBsAAg/UBasAAWWNgA8AA+oTAAcGmYAPAAPMIAWrAAFmsYAPAAPMIwAG/MATAAPMwgqbAAFn3wABaCAbAAIPNAWrAAFm4YAPAAPqEwAHBumADwADzCAFqwABaAWADwADzCMABvY0EwADzMYKmwABaTMAAWl0GwACD+AFqwABaDWADwAD6hMABwc5gA8AA8wgBasAAWlZgA8AA8wjAAb9KBMAA8zKCpsAAWqHAAFqyBsAAg84BasAAWmJgA8AA+oTAAcHiYAPAAPMIAWrAAFqrYAPAAPMIwAG9pwTAAPMzgqbAAFr2wABbBwbAAIP7AWrAAFq3YAPAAPqEwAHB9mADwADzCAFqwABbAGADwADzCMABv2YEwADzNIKmwABbS8AAW1wGwACD/QFqwABbDGADwAD6hMABwgpgA8AA8wgBasAAW1VgA8AA8wjAAb+ABMAA8zWCpsAAW6DAAFuxBsAAf6YBasAAW2FgA8AA+oTAAcIeYAPAAPMIAWrAAFuqYAPAAPMIwAGvVQTAAPM2gqbAAFv1wABcBgbAAIQAAWrAAFu2YAPAAPqEwAHCMmADwADzCAFqwABb/2ADwADzCMABv5wEwADzN4KmwABcSsAAXFsGwACEAgFqwABcC2ADwAD6hMABwkZgA8AA8wgBasAAXFRgA8AA8wjAAb+4BMAA8ziCpsAAXJ/AAFywBsAAhAQBasAAXGBgA8AA+oTAAcJaYAPAAPMIAWrAAFypYAPAAPMIwAG/1ATAAPM5gqbAAFz0wABdBQbAAIQGAWrAAFy1YAPAAPqEwAHCbmADwADzCAFqwABc/mADwADzCMABv/AEwADzOoKmwABdScAAXVoGwACECAFqwABdCmADwAD6hMABwoJgA8AA8wgBasAAXVNgA8AA8wjAAcAMBMAA8zuCpsAAXZ7AAF2vBsAA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/JcBasAAQ7VgA8AA/JfAAYvpBMAA88CCqMAAQ83AAEPfBsAAhFcAYAPAAPyXAWrAAEPcYAPAAPyXwAGL7QTAAPPBgqjAAERRwABEZAbAAIRYAGADwAD8lwFqwABEY2ADwAD8lwkEwADzwoKowABEecAARI0GwACEWQBgA8AA/JcBasAARIxgA8AA/JcVBMAA88OCqMAARKLAAES1BsAAhFoAYAPAAPyXAWrAAES0YAPAAPyXIQTAAPPEgqjAAETKwABE3gbAAIRbAGADwAD8lwFqwABE3WADwAD8l1MEwADzxYKowABE88AARQIGwACEXABgA8AA/JcBasAARQFgA8AA/JeBVwTAAPPHgqjAAEWgwABFpxjAAICKwADqwABgA8AA9R0ABMAA88iCqMAARc3AAEYJCcAAhF3AAOrAAF0DwAC5iAFgA8AA87wBHsAARezAALmKAAFgA8AA87wAAATAAPPJgqjAAEYuwABGORjAAG/awADqwABdA8AAuqQBYAPAAPUCASsEwADzyoKowABGVMAARlsYwABwkMAA6sAAXQPAALocAWADwAD1AgErBMAA88uCqMAARoLAAEaVGMAAhF7AAOrAAF0DwAC6VQFgA8AA9QIABMAA88yCqMAARqPAAEawGMAAhF/AAOrAAF0DwAD9OwFgA8AA/JcABMAA882CqMAARrjAAEbOGMAAhGDAAOrAAGADwAD8lwGTBMAA896CqMAARujAAEbvCcAAdacAYAPAAPSJAATAAPPfgqjAAEb+wABHBwnAAIDDAGADwAD60QAEwADz4IKowABHG8AARyIYglcAYAPAAPRSAATAAPPhgqjAAEcxwABHSQnAAIC4AGADwAD60QAEwADz4oKowABHWMAAR3AJwACAuQBgA8AA+tEABMAA8+OCqMAAR4PAAEeTCcAAhEYAYAPAAPyNAATAAPPOgqjAAEecwABHtRjAAIRhwADqwABgA8AA/JcBasAAR6ZgA8AA/JfAAYvlBMAA88+CqMAAR77AAEfYGMAAgJTAAOrAAGADwAD60QEpBMAA89CCqMAAR+HAAEf6GMAAgJPAAOrAAGADwAD60QEpBMAA89GCqMAASALAAEgRGMAAhGLAAOrAAGADwAD8lwGTBMAA89KCqMAASBrAAEgzGMAAhGPAAOrAAGADwAD60QEqBMAA89OCqMAASDzA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AGNrAAAAwABwDWADwAD7bQFqAGADwAD9oXldA8AAuWgBYAPAAPUzAT4DTsAAY43AAGOXAAHAAIF5YAPAAPIdARrAAGOlwADyIknAAGOyHMAAY8CEwABjtsB60+tIAQABKwDAAP3xPgFKwABj0QEewABj38AA9TgEAAKAwABj6MB6042BwABj7sB605gCwACAEoLAAGQNwHrTqcAAcA2DwABkJcB6078/SsAAZDkBHMAAZEqEwABkQMB60+vAAIN8BAACgMAAZFjAetONgcAAZF7AetOYAsAAgBKCwABke8B606nAAHANg8AAZJPAetO/wADyNgbAAPU2gqrAAGU/wABlZcAAZp8AAcAAgBEAAAABA8AAZXHAAGafAAAAAwICwABlcgAAAJaIWwDAAGV8AAAAlolgA8AA/JcAAcAAZYkAAADAAIASWwFqAGADwAD9oXldA8AAuWgBXQPAAPUTAWADwAD1MwE+A07AAGWxwABluwABwACBeWADwADyHQEawABlycAA8iJJwABl1hzAAGXkg8AAZdrAetUqSAEAASsAwAD98T4BSsAAZfUBHsAAZgPAAPU5AwACgMAAZhHAetTggcAAZhfAetTrAcAAgBKCwABmLMB61Pw/SsAAZkYBHMAAZleDwABmTcB61SrAAIN9AwACgMAAZmrAetTggcAAZnDAetTrAcAAgBKCwABmjcB61PzAAPI3BsAA9TiCjMAAvynAAL9IwADAIwABwACFBcAA6sABasAAv0hgA8AAy7/AAX+2AAABA8AAv1DAAMAjAAAABAICwAC/UQAAAJaIWwDAAL9bAAAAlolgA8AA/JcAAsAAv2gAAADAAIASWwFqAGADwAD9oXnAAL+AAAAAwABwDWADwAD7bQFqAGADwAD9oXldA8AAuWgBYAPAAPUzAT4BSsAAv5ABHMAAv/oewAC/ocAA9SIEAAKAwAC/qcB61hiBwAC/r8B61iMCwACAEoLAAL/QwHrWNMAAcA2DwAC/6MB61kqBrwEBYAPAAPUzATTAAL//A8AAv//AAMAeAAAAAQEBwADAAAAAAMAAfKNgA8AA9R0AAGADwADs/gFKwADACwEfwADAD8AA7TcBAAGEwADAF8B61tgAAMAAuXsGwAD1OYKMwADAKMAAwFfAAMHFAAHAAIUGwADqwAFqwADAV2ADwADLv8ABf7YAAAED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7IKLwABDdsAAQ4zAAEkJAAHAAIV+wADqwAAAAAEDwABDpcAASQkAAAAICAjAAEOyAAAATmADwAD+fgDAAEPJAAAAW10DwAD9OwFgA8AA/n4AwABD3wAAAMAAfHRgA8AA/n4AwABECQAAAICJXQPAAP1tAmADwAD+fmADwAD+fgDAAEQfAAAAwAB/eGADwAD60QDAAERCAAAAwAB/eWADwAD60QDAAERbAAAAwAB/n2ADwADIJgDAAER4AAAAwAB/oGADwADIJgAAXQPAALloAWADwADzAAE+AUrAAESvARzAAEWOHsAARL7AAPL5BgACgMAARMTAex3AgcAARMrAex3PBMAAfHSCwABE8cB7HeWAiYPAAEUawHsd98AAf3iEwABFS8B7HhTAAH95hcAARXvAex4mga8BAWADwADzAAE0wABFkwPAAEWTwABJBgAAAAEBAcAARZwAAACA1GADwADy8QAAXQPAALloAWADwADzAAE+Bk7AAEWpwABFrQAAwAB/qGADwAD8lwEWwABFsRTAAEWvwHse6AgAwAB/qMAA8vc9HMAARfEWwABF6xTAAEXpwHse6AgACsAA8vaCjAAAAADAAPF8T8AARijAAEYvAAABwACFf2EDAl0DwAC6HAFdA8AA/TsBYAPAAPyXYAPAAMgmXQPAALloAVsAA8AARjnAAEf4AAAAAgICwABGTAAAAIH2XQPAALocAV0DwAD9OwFgA8AA/JcAwABGXQAAAMAAUf1gA8AAyCYAAF0DwAC5aAFbAT4BScAARm8cwABGfBTAAEZzwHsfvwwASAEAASsAwAD98T4BSsAARo8BHMAARvccwABGqhTAAEaWwHsfoQsAg18CAVsCHsAARrPAAO3vAAAAADTAAEbDA8AARsPAAEboAAAAAgICwABGxAAAAIQmWwDAAEbNAAAAEl0DwAD9OwFgA8AA/JcAAFsBSsAARtYBNcAARtYAAAEAWwEUwABG1sB7IEANADUAAAABAFsBHMAARt8UwABG3cB7IGsPAFYBAAEUwABG48B7IEsOAAAAFADAeyBrDwAAwAC6NoGvAQFbATTAAEb8A8AARvzAAEccAAAAAQEBwABG/QAAAIQmWwAAWwFKwABHCQEcwABHERTAAEcJwHsg0A0Al4oAAAAAAADAALl7PgFKwABHNgEcwABHzxzAAEdgHMAAR0QU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wAD98T4BScABEjMUwAESN8B8PtIUAD4BPR7AARJSwAD29wUABSbAARJaARTAARJawHw+lRAAYAPAAOPoFMABEmPAfD4ADQCDwAESbcB8NrOHwAESdsB8N3MmwAESfwEUwAESf8B8PpUQAGADwADj6ABJwAESmiIhHMABErAcwAESphTAARKfwHw+lRAASwEAAYfAARKnwHw3cwAASAEAAZMAwAD98QEcwAES+x7AARLIwAD29gQABCbAARLXARTAARLXwHw+lRAAYAPAAOPoh8ABEuDAfDdzg8ABEunAfDazh8ABEvLAfDdzAICXAQABkwDAAP3HPgE9HsABEw/AAPb4BQAFJsABExcBFMABExfAfD6VEABgA8AA4+gUwAETIMB8PgANAIPAARMqwHw2s4fAARMzwHw3cybAARM8ARTAARM8wHw+lRAAYAPAAOPoAD4CPR7AARNlwAD2+AUABYPAARNtwHw2s4fAARN2wHw3cybAARN/ARTAARN/wHw+lRAAYAPAAOPoh8ABE4jAfDdzJsABE5EBFMABE5HAfD6VEABgA8AA4+gAPRXAAROnwHw+0hQpPz0ewAET2cAA9vMEAAQmwAET3gEUwAET3sB8PpUQAGADwADj6BTAARPnwHw+AA0AlCbAARP0ARTAARP0wHw+lRAAYAPAAOPoAEPAARQMHMABFCQcwAEUHxzAARQbFMABFBTAfD1jCwBLAQABkwDAAP1Kg3wBAAGUAMAA/K9IAQABkwDAAP27PgM9HsABFDTAAPbzBAAEFMABFDnAfD1jCwCHwAEUQsB8N3OUFMABFE7AfD1jCwAAScABFGAUwAEUZMB8PbMMAD4CScABFHQiHMABFIocwAEUhRzAARSBFMABFHrAfD6jEQBLAQABkwAAg3wBAAGUAABIAQABlADAAP3xARzAARSlHMABFKAcwAEUnBTAARSVwHw+sRIASwEAAZMAAIN8AQABlAAASAEAAZQAwAD98T4CScABFNAUwAEU1MB8PuUVAD4BScABFPEiIRzAARUHHMABFP0UwAEU9sB8PqMRAEsBAAGHwAEU/sB8N3MAAEgBAAGTAMAA/fEBHMABFVYewAEVI8AA9vYEAAQmwAEVMgEUwAEVMsB8PqMRAGADwADj6IfAARU7wHw3c4TAARVEwHw244fAARVNwHw3cwCAlwEAAZMAwAD9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XGADwAD+fgEewAEiFcAA/5ADAAOAwAEiJsCAYmSFwAEiLMCAYs4pAEnAASJCIhzAASJSFMABIkbAgGOJCABIAQABKwDAAP6NAIbAASJdwIBi6j4CPY3AASJ3wIBizhzAASJ9hcABInfAgGLOZAEAAZYAwAD9vULAASKNAD89IxzAASKwg8ABIqnAgGKeSAEAASsAwAD98YvAASKpwIBinh/AASK0wAD+5wAAAAArAWADwAD+yE7AASLTwAEi2QAAwACKRGADwAD+fgEcwAEi4IDAASLbwIBiZIC+AgAChMABIurAgGKvhcABIvjAgGLOAMAA/pRJwAEjCCGGwAEjDcCAYuo9FcABIxvAgGRKCRzAASMpFMABIyPAgGRKCQCWhQAAAADAAP6jPz0cwAEjR4PAASNAwIBinoKOAQABFMABI03AgGRKCQAAwAD+3E7AASNhwAEjbgAAwACGAGADwAD8lwGWScABI3scwAEjixTAASN/wIBjiQgASAEAASsAwAD+jT4BPRXAASOgwIBjiQgcwAEjs4DAASOuwIBiZIC+AgAChcABI73AgGLOHMABI8qFwAEjxMCAYs5kAQABlgDAAP29AMAA/pRJwAEj3xzAASPvFMABI+PAgGOJCABIAQABJ5XgAMAA/o0+Aj0VwAEkA8CAY4kIJ8AAi249FcABJCLAgGTjCpQ/PRzAASRNg8ABJEbAgGKego4BAAEUwAEkU8CAY4kIAADAAP7cPY3AASRpwIBizhzAASRvhcABJGnAgGLOZAEAARTAASRywIBk4woAAMAA/b09jMABJIjAgGKvhcABJJfAgGLOPY7AASSmwIBi6ilJwAEkyB7AASTMwAD/hwEAAYfAASTbwIBjJwA+AknAASTsIiKGwAEk8MCAYuoAHMABJQ5qwAElAGADwAD8l8AAX7yBawEAAYfAASURwIBjJwDAAP3GABzAASUnasABJRlgA8AA/JfAAJrwgW0BAAGHwAElKsCAYycAwAD9yD4DPSMcwAElkIPAASWJwIBinkgBAAErAMAA/fGLwAElicCAYp4fwAEllMAA/ucAAAAAKwFgA8AA/shJwAElrhzAASW/hMABJbLAgGKvYwEAAYXAASXBwIBizgDAAP3FPgI9HMABJd2DwAEl1sCAYp6CjgEAARzAASXogMABJePAgGJkgL4CAAKEwAEl8sCAYq+FwAEmAMCAYs4AwAD+lADAAP7cPYzAASYVwIBir4XAASYkwIBizj89jsABJkHAgGLqKj89jcABJmnAgGLOHMABJm6FwAEmacCAYs5kAQABlADAAP29ScABJn8ewAEmg8AA/5UBAAGHwAEml8CAYycAPgE9HsABJqjAAP97AwADgMABJq7AgGJkhcABJrTAgGLOJ8AAdAsAPglOwAEm7MABJvkAAMAAhgBgA8AA/JcBlEnAAScGIhzAAScaHMABJxCHwAEnC8CAYyeDfAEAATfAAPwAAMAA/K9IAQABN8AA2AAAwAD9uwAcwAEnMxzAAScuhcABJyjAgGLOZAEAAZQAwAD9vWMBAAGCwAEnNcCAYoMAwAD9xT4CTsABJ0rAASdPAACD8GADwAD8lwEcwAEnVoDAASdRwIBiZIQQAQABHMABJ2eFwAEnYcCAYs5kAQABlADAAP29AMAA/oxJwAEndxzAASeLHMABJ4EUwAEnfMCAaDMJAIN8AQABN8AA/AAAwAD8r0gBAAE3wADcAADAAP27PgI9j8ABJ6TAgGMnHMABJ8wcwAEnszfAAQAAgQYBAAEcwAEnxRzAASe8h8ABJ7fAgGMng3wBAAE3g/8AwAD8r4O/AQABNwoAwAD8swDAAPywgQYBAAEcwAEn1BTAASfPwIBoMwkAg3wBAAE3g/8AwAD8rwDAAPywPRXAASfqwIBntAiVPz89IxzAASghg8ABKBrAgGKeSAEAASsAwAD98YvAASgawIBinh/AASglwAD+5wAAAAArAWADwAD+yE7AAShEwAEoSgAAwACKRGADwAD+fgEcwAEoUYDAAShMwIBiZIC+AgAChMABKFvAgGKvhcABKGnAgGLOAMAA/pRJwAEoeSGGwAEofsCAYuo9FcABKIzAgGlsCRzAASiaFMABKJTAgGlsCQCWhQAAAADAAP6jPz0cwAEouIPAASixwIBinoKOAQABFMABKL7AgGlsCQAAwAD+3D0cwAEo1YPAASjOwIBinoKOAQABHsABKNvAAP+RAQABh8ABKOfAgGMnAADAAP7cPY3AASj3wIBizhzAASj9hcABKPfAgGLOZAEAARTAASkAwIBntAgAAMAA/b09jMABKRbAgGKvhcABKSXAgGLOScABKT4cwAEpSYPAASlCwIBinkgBAAErAMAA/fFKwAEpUgEcwAEpXoDAASlZwIBiZIC+AgACgcABKWjAgGJ0gsABKW/AgGKDAMAA/pQ/ScABKXkcwAEpioTAASl9wIBir2MBAAGCwAEpjMCAYoMAwAD9xT4DTsABKaDAASmmAADAAIpEYAPAAP5+ARzAASmtgMABKajAgGJkgL4CAAKEwAEpt8CAYq+CwAEpxcCAYoMAwAD+lEnAASnRIYbAASnWwIBi6j2PwAEp5MCAaugcwAEp8ofAASnswIBq6JaFAAAAAMAA/qM/PRzAASoOg8ABKgfAgGKego4BAAGHwAEqFMCAaugAwAD+3D9KwAEqJgEcwAEqNIPAASotwIBiniMAAAAAwAD+4QbAAP+Jgu3AASrdwAEq68ABLeMAAcAAi3bAAPY6AAAAAQPAASr2wAEt4wAAAAMDA8ABKv4AAACBvGADwAD+fgDAASsKAAAAamADwAD8lwDAASsVAAAAgpBgA8AA/JcAAGADwAD+fgE+CEnAASsgHMABKyqBwAErJMCAa9lIAQABgsABKy3AgGvoAMAA/btKwAErMgEnAD9OwAErS8ABK1kAAcAAi3dgA8AA/JcBHMABK2KAwAErW8CAa8mEEAEAAYHAASttwIBr2QDAAP6MScABK3khHsABK37AAP+kAQABg8ABK5XAgGwxAD4BPR7AASutwAD/ewMAA4DAASuzwIBryYHAASu7wIBr2SfAAIt4AD9OwAEsA8ABLBUAAMAAi3lgA8AA+tEBKkXAASwiAcABLCvAASwtAABiYAPAAPyXAYHAASwvwIBr2QEcwAEsOIXAASw2wIBsyGMBAAGCwAEsOsCAa+gAwAD9xQGNwAEsP8CAbMgcwAEsQIXAASw/wIBsyGQBAAGUAMAA/b0+A07AASxWwAEsXwABmGJgA8AA/JcBHMABLGiAwAEsYcCAa8mEEAEAAYXAASxzwIBsyADAAP6MScABLH0hHsABLILAAP+UAQABhsABLJXAgG0pAD4BPR7AASyqwAD/ewMAA4DAASywwIBryYXAASy4wIBsyCfAAIt6AD9JwAEs5iIcwAEs+GrAASzqYAPAAPyXwABfvIFrAQABhsABLPvAgG0pAMAA/cYAHMABLRCGwAEtB8CAbSmBawEAAWrAAS0TYAPAAPyXwACa8ADAAP3GPgE9jMABLSzAgGysKT89iMABLVjAgGvJHMABLWiAwAEtYcCAa8mAvgIAAoHAAS1ywIBr2YLAAS15wIBr6ADAAP6UScABLYOEwAEth8CAbKw9iMABLZrAgGvJHMABLaqAwAEto8CAa8mWhQAAAADAAP6jP0rAAS29AR7AAS3EwAD/igEAAYDAAS3YwIBryQAGwAD/ioLtwAEuXcABLmvAAS9RAAHAAIt7wAD2OgAAAAEDwAEufsABL1EAAAABAQHAAS6GAAAAgbxgA8AA/n4AAGADwAD+fgE+BUnAAS6UHMABLp+AwAEumMCAbrVIAQABJ4NEAMAA/o1KwAEuqgEng0Q/ScABLr0cwAEuyIDAAS7BwIButUgBAAEngb0AwAD+jUrAAS7TASeBvT9JwAEu5hzAAS7xgMABLurAgG61SAEAASeDRQDAAP6NSsABLv0BJ4NFP0nAAS8RHMABLxyAwAEvFcCAbrVIAQABJ4HbAMAA/o1KwAEvKgEngds/SsABL0ABgMABL0fAgG61BsAA/4uC7cABL1bAAS9kwAEwCAABwACLfMAA9joAAAABA8ABL3HAATAIAAAAAwMDwAEveQAAAJaHYAPAAP5+AMABL4cAAABqYAPAAPyXAMABL5IAAACCkGADwAD8lwAAYAPAAP5+AT4CScABL50cwAEvqoDAAS+hwIBvskgBAAErAMAA/o1KwAEvswEnAD9KwAEvwgEewAEvycAA/5IEAASAwAEv38CAb7KBwAEv6cCAb8KCwAEv8MCAb9FqwAEv9V0DwAD9OwFgA8AA/JfAAeOaAAbAAP+Mgu3AATANwAEwG8ABM7oAAcAAi33AAPY6AAAAAQPAATAkwAEzugAAAAYGBsABMCwAAABOYAPAAP5+AMABMDYAAABqYAPAAPyXAMABMEEAAACCkGADwAD8lwDAATBdAAAAgx1dA8AA/PkBYAPAAP5+AMABMHIAAACBvGADwAD+fgDAATB/AAAAnLNgA8AA+tEAAGADwAD+fgE+CU7AATCYwAEwnwAAwACCqWADwAD60QEcwAEwqYTAATCiwIBwykgBAAEngb0AwAD+jU7AATC+wAEw0QAAwACLfmADwAD60QEihsABMNPAgHD1AYXAATDdwIBw2knAATDvIhzAATD4gMABMPPAgHCFSAEAASsAwAD+jQAcwAExEIPAATEDwIBws0gBAAErAMAA/fFKwAExGQEjhsABMSDAgHD1J1AnAAFgA8AA/n4/ScABMTciIRzAATFAgMABMTvAgHCFSAEAASsAwAD+jQAhHMABMViDwAExS8CAcLNIAQABKwDAAP3xPgE9MMABMWkfwAExb8AA+8oBAAEnwACLfwA/TsABMbcAAACBdmADwAD+fgBJwAExwyEcwAExzIDAATHHwIBwhUgBAAErAMAA/o0+AT0VwAEx3cCAcfYIHsABMebAAP+SBQAEgMABMfzAgHCFgcABMgLAgHCUgsABMgnAgHCjasABMg5dA8AA/TsBYAPAAPyXwAHkDAHAAIuAKT4BPRXAATJbwIBx9ggcwAEyvhzAATJ8g8ABMmTAgHCzgKsBAWADwAD+fgE0wAEygAPAATKAwAEysQAAAAEBAcABMoEAAACIbGADwAD+fgAAYAPAAP5+AUrAATKHAR7AATKHwAD/oQQABGrAATKSXQPAAP07AWADwAD8l8AB4+QUwAEyosCAcrMJAGrAATKlYAPAAMnsgYkqAADAAP0EWAEAASdQAMAA/Q1JwAEy0xbAATLeFMABMtfAgHH2CACBVcAA/oQ+AUnAATLvhsABMvPAgHD1SsABMvsBJ1A/ScABMxIih8ABMxbAgHElACEcwAEzNBTAATMtwIBx9ggAgdgBAAEnUADAAP6QPgE9FcABM03AgHH2CBzAATNaJ1BkAQABFMABM1zAgHH2CAAAwAD+kz89FcABM27AgHH2CB7AATN3wAD/jQMAAxTAATOGwIBx9ggAhMABM47AgHDKhcABM5bAgHDaAErAATOpARTAATOwwIBx9ggABsAA/42C7cABNN7AATTswAE16wABwACLgcAA9joAAAABA8ABNPrAATXrAAAAAwMDwAE1AgAAAE5gA8AA/n4AwAE1DwAAAIG8YAPAAP5+AMABNRwAAACcs2ADwAD60QAAYAPAAP5+AT4CScABNTAiIhbAATU7gcABNTTAgHQsgVXAAP6EACGCwAE1R8CAdDwAIRzAATVdgMABNVjAgHQdgdgBAAEnUADAAP6QPgFKwAE1dgEewAE1fcAA/5kCAAKAwAE1lMCAdB0iFsABNaGBwAE1msCAdCyDt8AA/oUBgsABNa/AgHQ8AD9KwAE1yAEewAE1z8AA/5gBAAGAwAE14sCAdB0ABsAA/46C7cABNfDAATX+wAE6PwABwACLgsAA9joAAAABA8ABNgjAATo/AAAABAQEwAE2EAAAAJaKYAPAAP5+AMABNhsAAABqYAPAAPyXAMABNiYAAACCkGADwAD8lwDAATZjAAAAwAB87F0DwAD9bQJgA8AA/n5bAABgA8AA/n4BPgdJwAE2eiEcwAE2hIDAATZ+wIB1IkgBAAErAMAA/o0+AknAATaVIRzAATapg8ABNpnAgHVRSAEAASsAwAD98T4BPTDAATa8H8ABNsLAAPvKAQABJ8AAi4MAP0rAATcLAR7AATcSwAD/kgUABIDAATcowIB1IoHAATcvwIB1MoLAATc2wIB1QWrAATc7XQPAAP07AWADwAD8l8AB5C4BwACLgCk/ScABN3kcwAE3jYPAATd9wIB1UUgBAAErAMAA/fFKwAE3lgErP07AATeswAE3swAAgXZgA8AA/sgBH8ABN7XAAP7nAAAAAE7AATfNwAE31wAAgbFgA8AA/n4BJwBPwAE34sABN+cAAAHAAIuEYQMCYAPAAP5+YAPAAP5+XAADwAE39cABOQgAAAACAgLAATf9AAAAg9ZgA8AA/n4AwAE4CQAAAICWYAPAAP5+AABcAT4EPRzAATgfhMABOBjAgHY+go4BAAGFwAE4JcCAdl8AwAD+3D2NwAE4N8CAdl8ng3w9HMABOFWEwAE4TsCAdj6CjgEAAR7AAThfwAD/MAEAAYfAATh0wIB2pAAAwAD+3EnAATiBIiEcwAE4ixTAATiFwIB2tAgASAEAASsAwAD+jQAWwAE4nBTAATiWwIB2tAgAg7fAAP6FPgI9HMABOLmEwAE4ssCAdj6CjgEAASeAvADAAP7cPRzAATjUhMABOM3AgHY+go4BAAEewAE43sAA/zABAAEUwAE488CAdrQIAAAAwAD+3D89HMABOR+DwAE5D8CAdVGD/QEAATTAATknA8ABOSfAATocAAAAAgICwAE5KAAAAIPWYAPAAP5+AMABOS0AAACAllsAAGADwAD9oQE+AUnAATk8IhzAATlGFMABOUDAgHfnCABIAQABKwDAAP3xASXAATlXFMABOVHAgHfnCABgA8AA/n4+AT0cwAE5eobAATlswIB2eSACAAKHwAE5e8CAd9cmwAE5gAEUwAE5gMCAd+cIAGADwAD+fgAAPgJOwAE5qMABOa8AACldA8AA/PkBWwEmwAE5qAEUwAE5scCAd+cIAF0DwAD8+QFbRsABOcDAATndAAAAAQBbABTAATnVwIB4bQkAPgJOwAE5zAAAAICWYAPAAP5+ASbAATnAARTAATnMwIB4owoAYAPAAP5+PRzAATn3hsABOenAgHZ5IAIAAofAATn4wIB31xTAATn9wIB4uAsAAAAAwAD9jErAATojARzAAToxhMABOirAgHY+IwAAAADAAP7hBsAA/4+C7cABOkTAATpSwAE7GQABwACLhcAA9joAAAABA8ABOl/AATsZAAAAAwMDwAE6ZwAAAJaLYAPAAP5+AMABOnUAAABqYAPAAPyXAMABOoAAAACCkGADwAD8lwAAYAPAAP5+AT4CScABOoscwAE6mIDAATqPwIB5WkgBAAErAMAA/o1KwAE6oQErP0rAATqyAR7AATq5wAD/kgUABIDAATrPwIB5WoHAATrZwIB5aoLAATrgwIB5eWrAATrlXQPAAP07AWADwAD8l8AB5C4BwACLgCkGwAD/kILtwAE9c8ABPYHAAUHDAAHAAIuGwAD2OgAAAAEDwAE9kcABQcMAAAADAwPAAT2ZAAAAg0pgA8AA/n4AwAE9pQAAACdgA8AA/JcAwAE9sQAAAMAAi4dgA8AA+tEAAGADwAD+fgE+C0AcwAE94hzAAT3QgMABPcnAgHoxhBABAAGBwAE928CAekEAwAD+jEgBAAFqwAE95WADwAD8l8AAYfYAwAD9u8ABPcnAAT3tAEnAAT30HMABPgIcwAE9/oHAAT34wIB6QWQBAAGVAMAA/b2BbQEAARbAAT4MgMABPgXAgHoxYcAA/oIAwAD9yD4BSsABPhwBJ5XgP07AAT5WwAE+YQAAwABvImADwAD8lwEcwAE+aoDAAT5jwIB6MYQQAQABHMABPnuBwAE+dcCAekFkAQABlADAAP29AMAA/oxOwAE+icABPpUAAMAAbyNgA8AA/JcBHMABPp6AwAE+l8CAejGEEAEAARzAAT6vgcABPqnAgHpBZAEAAZUAwAD9vQDAAP6MTsABPr3AAT7NAADAAIuIYAPAAPyXAR7AAT7PwADLkwEAAYPAAT7dwIB7AABOwAE+8sABPwMAAMAAi4lgA8AA/JcBHsABPwXAAMuTAQABhMABPxPAgHtGAEnAAT8lIhzAAT85hcABPynAgHuMYwEAAZMAwAD9xQEcwAE/UYbAAT9AwIB7uGMBAAGTAMAA/cU+AUrAAT9eASeV4D9OwAE/mMABP54AAICWYAPAAPyXARzAAT+1HMABP7CFwAE/oMCAe4yDjQEAATcQAMAA/b9kAQABhsABP7fAgHu4AMAA/b1JwAE/zR7AAT/RwAD/pQEAAYfAAT/jwIB8JwA+AknAAT/zIiKCwAE/98CAelAAHMABQBJqwAFABGADwAD8l8AAX7yBawEAAYfAAUAVwIB8JwDAAP3GABzAAUAsasABQB5gA8AA/JfAAJrwgW0BAAGHwAFAL8CAfCcAwAD9yD4BPY/AAUBAwIB8JxzAAUBGh8ABQEDAgHwngQYBAAE3IADAAPywP0rAAUBdAR7AAUBrwAD+pwEAAYfAAUB4wIB8JwA/ScABQIoiHMABQJmDwAFAjsCAewCBbQEAAWrAAUCcYAPAAPyXwACbAgDAAP3IARzAAUC5hMABQK3AgHtGgW0BAAFqwAFAvGADwAD8l8AAmwIAwAD9yD4BSsABQPgBHMABQSIcwAFBBoDAAUD/wIB6MYC+AgACgcABQRDAgHpBHMABQR2BwAFBF8CAekFkAQABlgDAAP29AMAA/pSSbwAAAADAAP6kP0rAAUG0ASsGwAD/kYLtwAFByMABQdbAAUZ7AAHAAIuKwAD2OgAAAAEDwAFB4cABRnsAAAABAQHAAUHmAAAAnKFgA8AA/JcAAGADwAD+fgE+BEAcwAFB/oDAAUH5wIB+CYFrAQABN8AQ//8AwAD9xsABQfnAAUIJAE7AAUI+AAAAn/NdA8AA/TsBYAPAAPyXAEnAAUJNHMABQlaAwAFCUcCAfgljAQABN4CAAMAA/cU+BD2JwAFCmcCAfksewAFCpcAA9pIBAWADwAD8lwGWAD0cwAFCvYHAAUK0wIB+S4C/AgACk2rAAULDYAPAAPyXwABh9gDAAP1LPRzAAULcgcABQtPAgH5LgL8CAAKUHMABQu1qwAFC4mADwAD+fsAB5GmEEAEAARzAAUL9gMABQvjAgH4Jg8EBAAGXAMAA/LQAwAD+jADAAP1LPRzAAUMTgcABQwrAgH5LgL8CAAKVHMABQyRqwAFDGWADwAD+fsAB5GmEEAEAARzAAUM0gMABQy/AgH4Jg3wBAAE3DwDAAPyvAMAA/owAwAD9Sz4GTsABQ5fAAUOcAACDMGADwAD8lwE3gMBOwAFD4sABQ+8AAMAAi4xgA8AA/JcBlUnAAUP6HMABRAOAwAFD/sCAfgmAlwEAATeH/wDAAP3HPgM9isABRBbAgH9wN4DgPYvAAUQrwIB/h5ZJwAFERRzAAUROgMABREnAgH4JgJcBAAE3wAD//wDAAP3HPgI9i8ABRGTAgH+Hlz2KwAFEgMCAf3A3gPA/Pz2JwAFEpcCAfksewAFEscAA9pIBAWADwAD8lwEcwAFEuJaDjQEAAYPAAUS6wIB/hwDAAP2/AE7AAUTTwAFE2QAAJ2ADwAD8lwGTQ8ABROQcwAFE+ovAAUTtwIB/hxzAAUTrg8ABRO3AgH+HgY0BAAGUAMAA/b6BbQEAAZMAwAD9yD4GTsABRQ7AAUUTAACHAWADwAD8lwEcwAFFOxzAAUUzHMABRRyAwAFFF8CAfgmDwQEAARzAAUUiNwaDjQEAAYPAAUUkwIB/hwDAAP2/AMAA/LSDfAEAATc/AMAA/K+BBgEAAYLAAUU9wIB/cADAAPywPRzAAUVUgcABRUvAgH5LgL8CAAKEwAFFVcCAgExqwAFFXmADwAD8l8AAYfYAwAD9Sz0cwAFFeYHAAUVwwIB+S4C/AgACHMABRYCEwAFFesCAgExkAQABlADAAP29HMABRZJqwAFFh2ADwAD+fsAB5GmEEAEAARzAAUWihcABRZ3AgICZg8EBAAGXAMAA/LQAwAD+jADAAP1LPRzAAUW6gcABRbHAgH5LgL8CAAIcwAFFwYTAAUW7wICATGQBAAGVAMAA/b0cwAFF02rAAUXIYAPAAP5+wAHkaYQQAQABHMABReOFwAFF3sCAgJmDfAEAATcPAMAA/K8AwAD+jADAAP1LPYzAAUXzwICATBzAAUX5hMABRfPAgIBMZAEAAZYAwAD9vT2KwAFGB8CAf3A3gIBKwAFGUQEewAFGX8AA/qYBAAGBwAFGbcCAfksABsAA/5KC7cABR3LAAUeAwAFIlwABwACLjcAA9joAAAABA8ABR5XAAUiXAAAABQQEwAFHpAAAAIJZYAPAAP5+AMABR7MAAABqYAPAAPyXAMABR74AAACCkGADwAD8lwDAAUfNAAAAwACLjl0DwAD9OwFgA8AA/JcAAcABR+QAAADAAIuAYAPAAPrRAWrAAUf3YAPAAPrRAGADwAD+fgE+AUrAAUgFATUAAAABAGADwAD+fgEewAFIDMAA/5MFAASAwAFIF8CAgoSBwAFIIsCAgpSCwAFIKcCAgqODwAFILsCAgrMBwACLgITAAUhXwICCzSMcwAFIaYUAwICC+0gBAAErAAAcwAFIfoDAAUh0wICChIC+AgACgcABSIjAgIKUgsABSI/AgIKjAMAA/pSFAMCAgvsBYAPAAP5+BsAA/5OC7cABSjDAAUo+wAFSGgABwACGEMAA9joAAAABA8ABSkjAAVIaAAAABQQEwAFKVwAAAIJZYAPAAP5+AMABSmYAAABqYAPAAPyXAMABSnEAAACCkGADwAD8lwDAAUqAAAAAwACLjl0DwAD9OwFgA8AA/JcAAcABSpcAAADAAIuAYAPAAPrRAWrAAUqqYAPAAPrRAGADwAD+fgE+B07AAUrFAAAAgo9gA8AA/sgATsABStXAAUriAADAAItyYAPAAPyXAYHAAUrkwICDz07AAUrzwAFK+QAAJ2ADwAD8lwGBwAFK+8CAg89DwAFLURzAAUteh8ABS1jAgIRgYwEAAYLAAUtgwICD3gDAAP3FQT4CTsABS3HAAUt2AACcoWADwAD8lwEcwAFLgoDAAUt4wICDv4QQAQABh8ABS43AgIRgAMAA/oxJwAFLmyIcwAFLpBTAAUufwICEpAgAYwEAATd/AMAA/cUAIRzAAUvbHMABS8McwAFLt4PAAUuuwICD7ksBAAEcwAFLvRTAAUu4wICEpAgAg8EBAAGXAMAA/LQAwAD9SoN8AQABHMABS8iUg78BAAEcwAFL0RTAAUvMwICEpAgAg3wBAAE3DwDAAPyvAMAA/LMAwAD8r0gBAAGTAMAA/bs+AT2PwAFL68CAhGAcwAFL8IfAAUvrwICEYGQBAAGUAMAA/b0+CE7AAUwSAAAAhFxgA8AA/n4ATsABTCsAAADAAIYAYAPAAPyXAEnAAUxBHMABTEoUwAFMRcCAhKQIAEgBAAFqwAFMTWADwAD8l8AAYfYAwAD9uz4DPRXAAUxjwICFngkewAFMccAA/5ADAAOAwAFMgsCAg7+HwAFMjcCAhGAqAEnAAUznHMABTPcUwAFM68CAhZ4JAEgBAAErAMAA/o0+Aj2PwAFNDsCAhGAcwAFNFIfAAU0OwICEYGQBAAGWAMAA/b1CwAFNJgA/ScABTYkcwAFNkSeV4EgBAAEUwAFNlMCAhZ4JAADAAP6NPgI9FcABTa/AgIWeCSfAAItuPRXAAU3QwICFrwqUPgE9FcABTgHAgIWvCpZJwAFOLiIhhMABTjPAgIQIAB7AAU5HwAD/lQEAARTAAU5bwICEpAgAAD4BPR7AAU5uwAD/ewMAA4DAAU50wICDv4fAAU5/wICEYCfAAHQLAD4DPRXAAU63wICFrwqUScABTtMcwAFO5xzAAU7dFMABTtjAgISkCACDfAEAATfAAPwAAMAA/K9IAQABN8AA2AAAwAD9uz4BScABTygcwAFPNhzAAU8yh8ABTyzAgIRgZAEAAZQAwAD9vWMBAAGCwAFPOMCAg94AwAD9xT4CTsABT1HAAU9WAACD8GADwAD8lwEcwAFPYoDAAU9YwICDv4QQAQABHMABT3OHwAFPbcCAhGBkAQABlADAAP29AMAA/oxJwAFPhxzAAU+bHMABT5EUwAFPjMCAh4ALAIN8AQABN8AA/AAAwAD8r0gBAAE3wADcAADAAP27PgI9FcABT9vAgIWvCpU9FcABT/3AgISkCBzAAVAlHMABUAw3wAEAAIEGAQABHMABUB4cwAFQFRTAAVAQwICEpAgAg3wBAAE3g/8AwAD8r4O/AQABNwoAwAD8swDAAPywgQYBAAEcwAFQLRTAAVAowICHgAsAg3wBAAE3g/8AwAD8rwDAAPywPz8/PRXAAVBrwICFngkewAFQecAA/5EBAAEUwAFQhcCAhKQIAAA9IxzAAVClhcABUJ7AgIQwSAEAASsAwAD98Y3AAVCewICEMB/AAVCpwAD+5wAAAAArAWADwAD+yD0cwAFQyIXAAVDBwICEMIKOAQABHMABUNiAwAFQzsCAg7+AvgIAAobAAVDiwICEQYfAAVDwwICEYADAAP6UAMAA/tw9HMABUQiFwAFRAcCAhDCCjgEAARTAAVEOwICFngkAAMAA/tw9j8ABUSTAgIRgHMABUSqHwAFRJMCAhGBkAQABFMABUS3AgIWvCgAAwAD9vT2OwAFRQ8CAhEGHwAFRUsCAhGBJwAFRaxzAAVF2hcABUW/AgIQwSAEAASsAwAD98T4BSsABUYcBKz9JwAFRnhzAAVGvhsABUaLAgIRBYwEAAYLAAVGxwICD3gDAAP3FPgE9HMABUcWFwAFRvsCAhDCCjgEAARzAAVHVgMABUcvAgIO/gL4CAAKGwAFR38CAhEGCwAFR7cCAg94AwAD+lADAAP7cP0rAAVH+ARzAAVIMhcABUgXAgIQwIwAAAADAAP7hBsAA/5SC7cABUh/AAVIrwAFSlgABwACLj8AA9joAAAABA8ABUj3AAVKWAAAAAQEBwAFSQgAAAMAAQt9gA8AA/JcAAGADwAD60QE+AUrAAVJMASIcwAFSVoDAAVJTwICKZGMBAAE3gIAAwAD9xQAhHMABUo0cwAFSdxzAAVJtasABUmFdA8AA/TsBYAPAAPyXwAHjA0sBAAEcwAFScYDAAVJuwICKZIPBAQABlwDAAPy0AMAA/UqDfAEAARzAAVJ8lIO/AQABHMABUoOAwAFSgMCAimSDfAEAATcPAMAA/K8AwAD8swDAAPyvSAEAAZMAwAD9uwbAAP+Vgu3AAVKbwAFSp8ABUy4AAcAAi5DAAPY6AAAAAQPAAVK6wAFTLgAAAAEBAcABUr8AAADAAELfYAPAAPyXAABgA8AA+tEBPgFKwAFSyQEiHMABUtOAwAFS0MCAi1iBawEAAWrAAVLWYAPAAPyXwACa9gDAAP3GACEcwAFTJRzAAVMPHMABUwVqwAFS8l0DwAD9OwFgA8AA/JfAAeN9SwEAARzAAVMJgMABUwbAgItYg8EBAAGXAMAA/LQAwAD9SoN8AQABHMABUxSUg78BAAEcwAFTG4DAAVMYwICLWIN8AQABNw8AwAD8rwDAAPyzAMAA/K9IAQABkwDAAP27BsAA/2WC7cABU2nAAVNywAFTngEAg0EAAAABA8ABU33AAVOeAAAAAAAAAGADwAD60QFKwAFTgAEiIRzAAVOHFsABU4AugbzAAP9VSAEAAScAAMAA/o0AHMABU5kWwAFTkC6Wi8AA/2FIAQABJwAAwAD+jQbAAP+Wgu3AAVOjwAFTqsABWAAAAMAAi5HAAPY6AAAAAQPAAVO1wAFYAAAAAAICAsABU70AAACWg2ADwAD+fgDAAVPKAAAAhGNgA8AA/n4AAGADwAD+fgE+Bk7AAVQswAFUNgAAwACLkmADwAD8lwGTTsABVEPAAVRMAADAAIuTYAPAAPyXAZNDwAFUjRzAAVSegcABVJTAgIzcgdgCAAInlbKDwAFUsMCAjQ4AwAD+kD4CPYvAAVTDwICNDhzAAVTMg8ABVMPAgI0OZAEAAZYAwAD9vT2KwAFU2MCAjPccwAFU4YLAAVTYwICM92QBAAGUAMAA/b1OwAFVMsABVToAAMAAi5RgA8AA/JcBHMABVUGAwAFVPMCAjMyWjAEAASdQAMAA/pJBQ8ABVZciHMABVaaEwAFVnsCAjZSAlwEAAZMAwAD9xwAcwAFVt4LAAVWtwICM94CXAQABkwDAAP3HPgZOwAFVyMABVc8AAMAAdBBgA8AA/JcBHMABVdaAwAFV0cCAjMyWjAIAAidQHMABVe+EwAFV58CAjZSBjQEAAZQAwAD9vgDAAP6SScABVfscwAFWBoXAAVX/wICOAGMBAAGTAMAA/cU+AULAAVYVAD9OwAFWLsABVjQAAJtiYAPAAPyXARzAAVY+hMABVjbAgI2UgY0BAAGFwAFWQMCAjgAAwAD9vknAAVa5IiIiHMABVsSGwAFWvsCAjm9IAQABlQDAAP27ARzAAVbShsABVszAgI5vSAEAAZYAwAD9uwAcwAFXARzAAVbqgMABVuXAgIzMhBABAAEcwAFW/IXAAVb1wICOAGQBAAGUAMAA/b0AwAD+jEgBAAFqwAFXBGADwAD8l7LbAMAA/bsAIhzAAVcdhsABVxfAgI5vSAEAAZUAwAD9uwEcwAFXQRzAAVcqgMABVyXAgIzMhBABAAEcwAFXPIXAAVc1wICOAGQBAAGVAMAA/b0AwAD+jEgBAAFqwAFXRGADwAD8l7LbAMAA/bs+AULAAVdVAD89jMABV2rAgI2UhcABV3TAgI4APYrAAVeCwICM9xzAAVeLgsABV4LAgIz3gY0BAAGUAMAA/b5KwAFXmQEcwAFXpYDAAVegwICMzKAMAwADHMABV8OEwAFXu8CAjZRkAQABlADAAP29KxzAAVfYgcABV87AgIzcgL4BAAEcwAFX64PAAVfiwICNDoGNAQABHMABV++Wg40BAAGCwAFX8cCAjPcAwAD9vwDAAP2+AMAA/pQAwAD+oAbAAP+Xgu3AAVj0wAFZAMABWY8AAcAAi5XAAPY6AAAAAQPAAVkWwAFZjwAAAAEBAcABWR4AAABOYAPAAP5+AABgA8AA+tEBPgNJwAFZKhzAAVkzgMABWS7AgJB9gdgBAAEngWoAwAD+kErAAVlEASk/TsABWVnAAVlfAAAnYAPAAPyXARzAAVlmgMABWWHAgJB9gLsBAAEnwACLlgDAAP6RSsABWXkBIRzAAVmGgcABWYDAgJC/SAEAARzAAVmJlIHGAAAAAMAA/LoAwAD9uwbAAP+Ygu3AAVqXwAFapcABXVMAAcAAi5fAAPY6AAAAAQPAAVq3wAFdUwAAAAEBAcABWr8AAABOYAPAAP5+AABgA8AA/n4BPgdJwAFayyEewAFa0MAA/5cBAAGAwAFa58CAkUwASsABWu4BgMABWvXAgJFMP0AWwAFbC4DAAVsGwICRTIO3wAD+hcABWwbAAVsVAE7AAVtXwAFbXgAAgZNdA8AA/TsBYAPAAP5+ATHAAVtgYAPAAP5+AE7AAVttwAFbeQAAgu1gA8AA+tEBKkbAAVuGwAFbrsABW5IAAADAAGMNYAPAAP5+ABzAAVuigMABW53AgJFMgKYBAAEnUADAAP6hPgI9isABW7bAgJHXKknAAVvRHMABW92DwAFb1cCAkfRIAQABJ4hlAMAA/o0+AknAAVvwFsABW/uBwAFb9MCAkbCDt8AA/R4+Aj0cwAFcGoHAAVwTwICRsIYmAAAAAMAA/VpJwAFcMhbAAVw9gcABXDbAgJGwgVXAAP0dPgE9HMABXFuBwAFcVMCAkbBWAQABJwAAwAD9TD8/PYrAAVyCwICR1ylJwAFcoxzAAVyrJ4FqSAEAAYPAAVyuwICR9ADAAP6NPgE9isABXMHAgJHXKT4BPRzAAVzzgcABXOzAgJGwVgEAAYPAAVz3wICR9ADAAP1MScABXROCwAFdF8CAkdc9HMABXSuBwAFdJMCAkbBWAQABJwAAwAD9TD9KwAFdOAEcwAFdRoHAAV0/wICRsFgBAAEnUADAAP0NBsAA/5mC7cABX5zAAV+qwAFjqQABwACLmMAA9joAAAABA8ABX8DAAWOpAAAAAgICwAFfyAAAAE5gA8AA/n4AwAFf0wAAAMAAi0JgA8AA+tEAAGADwAD+fgE+CkAhHMABX/OAwAFf7sCAk4uB2AEAASdQAMAA/pDAAV/twAFgAgBJwAFgMCEewAFgNcAA/5cBAAGAwAFgTMCAk4sAPgJJwAFgWyGBwAFgYMCAk5o9iMABYG3AgJOLHsABYHTAAP+aAQABgMABYILAgJOLAD9KwAFgjwGAwAFglsCAk4s/QBbAAWCygMABYK3AgJOLg7fAAP6FwAFgrcABYLwATsABYP7AAWEFAACBk10DwAD9OwFgA8AA/n4BMcABYQdgA8AA/n4ATsABYRTAAWEgAACC7WADwAD60QEqRsABYS3AAWFVwAFhOQAAAMAAYw1gA8AA/n4AHMABYUmAwAFhRMCAk4uApgEAASdQAMAA/qE+Aj2LwAFhXcCAlH8qScABYXgcwAFhgSeIZUgBAAGEwAFhhMCAlJwAwAD+jT4BScABYZciIRbAAWGjgsABYZzAgJRYgVXAAP0dACEcwAFhuhbAAWG1gsABYa7AgJRYgerAAP0gSAEAASeIZQDAAP6NPgI9HMABYdaCwAFhz8CAlFiGJgAAAADAAP1aPYvAAWHuwICUfyk+AT0cwAFiJILAAWIdwICUWFYBAAEniGUAwAD9TEnAAWJGHMABYk4ngWpIAQABhMABYlHAgJScAMAA/o0+AT2LwAFiZMCAlH8pPgE9HMABYpaCwAFij8CAlFhWAQABhMABYprAgJScAMAA/UxJwAFitiIWwAFiwYLAAWK6wICUWIFVwAD9HQEiHMABYtsWwAFi1ILAAWLNwICUWGHAAP1rSAEAAZQAwAD9uwAWwAFi7RzAAWLpgsABYuPAgJRYSwEAAZMAwAD9SoFVwAD+hD4BSsABYv8BJ5y1P0nAAWMWIoPAAWMawICUfwEcwAFjNRbAAWMwgsABYynAgJRYgerAAP0gSAEAASeIZQDAAP6NPRzAAWNFgsABYz7AgJRYVgEAAScAAMAA/Uw/ScABY1IhgcABY1fAgJOaPRzAAWNqgsABY2TAgJRYgL8CAAKTHsABY3DAAP+aAQABHMABY4SCwAFjfsCAlFhLAQABkwDAAP1KAADAAP1LP0rAAWOOARzAAWOcgsABY5XAgJRYWAEAASdQAMAA/Q0GwAD/moLtwAFj7sABY/zAAWXEAAHAAIuZwAD2OgAAAAEDwAFkCcABZcQAAAABAQHAAWQRAAAATmADwAD+fgAAYAPAAP5+AT4CScABZB0iHMABZC0WwAFkJoDAAWQhwICXJmHAAP6CgW0BAAGVAMAA/cgAHsABZDXAAP+kAQABHMABZFGAwAFkTMCAlyaEEAEAAZMAwAD+jAA+AUFFwAFkaQHAAWRywAFkdAAAYmADwAD8lwGUARzAAWR7gcABZHnAgJeYYwEAARbAAWSCgMABZH3AgJcmYcAA/oIAwAD9xQGJwAFkisCAl5gcwAFki4HAAWSKwICXmGQBAAGUAMAA/b0+A07AAWSdwAFkogAAnKFgA8AA/JcBHMABZKmAwAFkpMCAlyaEEAEAAYHAAWS0wICXmADAAP6MScABZMAcwAFkyYLAAWTEwICX+0gBAAFqwAFkzGADwAD8l5bTAMAA/bs+AUrAAWTgASTAAWUbAxzAAWTvgMABZOrAgJcmgL4CAAKTgcABZPzAgJeYAMAA/pQnwACLmhzAAWUJgMABZQTAgJcmgL4BAAEcwAFlFYHAAWUTwICXmGQBAAGUAMAA/b0AwAD+lD9JwAFlLyIcwAFlOILAAWUzwICX+4CXAQABN38AwAD9xwEcwAFlfxzAAWVnHMABZVtqwAFlT10DwAD9OwFgA8AA/JfAAeMDSwEAARzAAWVhgsABZVzAgJf7g8EBAAGXAMAA/LQAwAD9SoN8AQABHMABZWyUg78BAAEcwAFldYLAAWVwwICX+4N8AQABNw8AwAD8rwDAAPyzAMAA/K9IAQABkwDAAP27PgFCwAFlkgA/P0rAAWW1AYDAAWW8wICXJgbAAP+qgu3AAWXJwAFlzcABZhgAAGwAAAABA8ABZdTAAWYYAAAAAQEBwAFl3AAAAIRjYAPAAP5+AABgA8AA/v8BPgFKwAFl7QEcwAFl9C6DQgEAAR7AAWYDwAD/LQEAAYDAAWYJwICZpgAAwAD/qwbAAP+rgu3AAWYdwAFmIcABck4AAINCAAAAAQPAAWYrwAFyTgAAAAEBAcABZjAAAACEY2ADwAD+/wAAYAPAAP7/AT4JTsABZl4AAADAAIubYAPAAP5+AE7AAWZ3wAFmhgAAwACLnGADwAD+fgEnAE7AAWaXAAAAwACLnWADwAD+fgBOwAFmqwAAAMAAi55gA8AA/JcATsABZsIAAADAAIufYAPAAP5+AE7AAWbZAAAAwACLoGADwAD+fgBJwAFm6hbAAWb/FsABZviAwAFm7sCAmhaBvMAA/wWDt8AA/oU+BD2JwAFnE8CAmjEWwAFnLIDAAWciwICaFoG8wAD/BUnAAWc6FsABZ0iAwAFnPsCAmhacs8AA/xI+Az2KwAFnYMCAmkQWwAFne4DAAWdxwICaFpaHwAD/Bz2LwAFnjcCAmlwWwAFnpIDAAWeawICaFpaIwAD/CD2MwAFnssCAmm8jFsABZ8mAwAFnv8CAmhbAAIr2wAD/ExbAAWfdgMABZ9PAgJoWlonAAP8JKwFgA8AA/Jc/PY3AAWf4wICagh7AAWgFwAD/mAEAARbAAWgigMABaBjAgJoWTsAA/woAScABaC8WwAFoPYDAAWgzwICaFpyxwAD/FD4BPY7AAWhRwICalRbAAWhpgMABaF/AgJoWlorAAP8LPz4CPYnAAWiLwICaMRbAAWifLoG8wAD/VUnAAWitFsABaLuAwAFoscCAmhacs8AA/xI+BT2KwAFo08CAmkQWwAFo7oDAAWjkwICaFpaHwAD/Bz2LwAFpAMCAmlwWwAFpF4DAAWkNwICaFpaIwAD/CD2MwAFpJcCAmm8ewAFpPsAA/4ICAAIjFsABaVKAwAFpSMCAmhbAAIr2wAD/ExbAAWlmgMABaVzAgJoWlonAAP8JKwFgA8AA/JeBwAFpc8CAmjEAPY3AAWmKwICagh7AAWmXwAD/mAEAARbAAWm0gMABaarAgJoWTsAA/woAScABacMWwAFp0YDAAWnHwICaFpyxwAD/FD2OwAFp28CAmpUWwAFp84DAAWnpwICaFpaKwAD/Cz8+BD2KwAFqEcCAmkQWwAFqJy7AAIsowAD2OsAA/z49i8ABajrAgJpcFsABakwuwAB/tMAA9jrAAP8/PYzAAWpbwICabxbAAWptLsAAfMLAAPY6wAD/QEnAAWp8HMABao8WwAFqioDAAWqAwICaFk7AAP8KSAEAAScAAMAA/o0+Aj2NwAFqosCAmoIWwAFqtC5OwAD/VknAAWrEFsABatKAwAFqyMCAmhacscAA/xQ+AT2OwAFq6sCAmpUWwAFrAoDAAWr4wICaFpaKwAD/Cz4BPY7AAWsowICalRbAAWs7LsAAiynAAPY6wAD/QT4CScABa2oWwAFreIDAAWtuwICaFsAAivfAAP8XPgE9jcABa5fAgJqCHsABa6TAAP+YAQABFsABa8GAwAFrt8CAmhZOwAD/CgA+AUnAAWwhFsABbCoumXTAAP9rPgFJwAFsSCEWwAFsUi6cs8AA/2c+AUnAAWxyIRbAAWx8LqnswAD/Zj4BPY3AAWziwICaghbAAWz5gMABbO/AgJoWTsAA/wo+AT2NwAFtlcCAmoIewAFtosAA/5gBAAEWwAFtv4DAAW21wICaFk7AAP8KAD4BPY3AAW5IwICagh7AAW5VwAD/mAEAARzAAW5sJ1BkAQABFsABbniAwAFubsCAmhZOwAD/CgDAAP6TAD4CTsABbrbAAW7BAADAAIuhYAPAAP5+ARzAAW7DLsAAi5HAAPY6AgACFsABbtQuTsAA/1YWwAFu5IDAAW7awICaFk7AAP8KAMAA/5ZJwAFu+SIiFsABbwIuqezAAP9mARbAAW8ULpyzwAD/ZwEWwAFvKS7AAIr3wAD/bD4BPY3AAW9MwICagh7AAW9ZwAD/mAEAAYfAAW9swICfAgA+AT2NwAFwmcCAmoIewAFwpsAA/5kCAAKHwAFw0sCAnwIiFsABcOMuqezAAP9mARbAAXD1LpyzwAD/ZwBJwAFxOBbAAXFGgMABcTzAgJoWnLHAAP8UPY7AAXFQwICalRbAAXFogMABcV7AgJoWlorAAP8LP07AAXGSwAFxmwAAlotgA8AA/n4BIxbAAXGngMABcZ3AgJoWnLLAAP8VFsABcb+AwAFxtcCAmhaWi8AA/wwrAWADwAD+fkrAAXHUAR/AAXHgwAD/sQcAB4HAAXHqwICaMYLAAXH4wICaRIPAAXIIwICaXITAAXIUwICab4XAAXIowICagobAAXI0wICalYfAAXJBwICgEQAGwAD/ZoLtwAFyU8ABclzAAXJ6AQCp7AAAAAEDwAFyZsABcnoAAAAAAAAAYAPAAPrRAUrAAXJpARbAAXJwFsABcmkugbzAAP9Vg7fAAP6FBsAA/2eC7cABcn/AAXKIwAFypQEAnLMAAAABA8ABcpXAAXKlAAAAAAAAAGADwAD60QFKwAFymAEhHMABcp4WwAFymC7AAH+0wAD2OsAA/z9IAQABKwDAAP6NBsAA/2iC7cABcqrAAXKzwAFyywEAwACK9gAAAAEDwAFyu8ABcssAAAAAAAAAYAPAAPrRAUrAAXK+ASEcwAFyxBbAAXK+LsAAfMLAAPY6wAD/QEgBAAErAMAA/bsGwAD/aYLtwAFy0MABctnAAXLzAQCcsQAAAAEDwAFy4sABcvMAAAAAAAAAYAPAAPrRAUrAAXLlASEcwAFy7BbAAXLlLsAAiynAAPY6wAD/QUgBAAErAMAA/o0GwAD/aoLtwAFy+MABcwHAAXMhAQCcsgAAAAEDwAFzDcABcyEAAAAAAAAAYAPAAPrRAUrAAXMQASEcwAFzGhbAAXMQLsAAiyrAAPY6wAD/QkgBAAErAMAA/o0GwAD/a4LtwAFzJsABcy/AAXNLAQCZdAAAAAEDwAFzPMABc0sAAAAAAAAAYAPAAPrRAUrAAXM/ARbAAXNEFsABcz8uTsAA/1aBVcAA/oQGwAD/bILtwAFzUMABc1nAAXOAAQDAAIr3AAAAAQPAAXNpwAFzgAAAAAAAAABgA8AA+tEBSsABc2wBHMABc3EWwAFzbC5OwAD/VoHYAQABJ1AAwAD+kAbAAP9tgu3AAXOFwAFzkMABdXcBAJ6OAAAAAQPAAXOXwAF1dwAAAAAAAABgA8AA/n4BPgVJwAFznRzAAXOoFsABc6EugbzAAP9VSAEAAScAAMAA/o0+AT0wwAFztx/AAXO9wAD8NwEAASTAAXPzAifAAIuiLgA/ScABdAAiIRzAAXQLFsABdAQugbzAAP9VSAEAASeDRADAAP6NACEcwAF0HxbAAXQYLoG8wAD/VUgBAAEng0UAwAD+jT4BPTDAAXQzH8ABdDnAAPw3AQABJMABdIgCJ8AAi6MuAD9JwAF0lSIcwAF0nxbAAXSZLsAAf7TAAPY6wAD/P0gBAAErAMAA/o0BHMABdLAWwAF0qi7AAH+0wAD2OsAA/z9IAQABJwAAwAD+jT4BPTDAAXS/H8ABdMXAAPw3AQABJMABdRQEJ5NXFsABdN8ugbzAAP9VJ8AAi6QuAD9JwAF1IRzAAXUrFsABdSUuwAB8wsAA9jrAAP9ASAEAASsAwAD9u0rAAXU0ASTAAXVNAxbAAXU9LoG8wAD/VSfAAIulFsABdUcuwAB/tMAA9jrAAP8/P0rAAXVTASTAAXVzBRbAAXVcLoG8wAD/VSfAAIulFsABdWYuwAB/tMAA9jrAAP8/J4LqFsABdW0uwAB8wsAA9jrAAP9ABsAA/6yC7cABdXzAAXWDwAF3kAAAgb8AAAABA8ABdY3AAXeQAAAAAQAAAcABdZQAAACB/mADwAD60QFqAGADwAD9oXlgA8AA/n4BPgVJwAF1pCIhHMABda8WwAF1qC6BvMAA/1VIAQABJwAAwAD+jQAhHMABdb8WwAF1uC6BvMAA/1VIAQABJ4G9AMAA/o0+AT0wwAF10h/AAXXYwAD8KQEAASTAAXYYAyfAAIumFsABdg0ugbzAAP9VJ8AAi6cAP0nAAXYlIRzAAXYvFsABdikulorAAP9gSAEAAScAAMAA/o0+AT0wwAF2Ph/AAXZEwAD8KQEAASfAAIuoAD9JwAF2qyEcwAF2uBbAAXavLpaLwAD/YUgBAAEnAADAAP6NPgE9MMABdscfwAF2zcAA/CkBAAEnwACLqQA/PSMcwAF3P4DAAXc3wIClIEgBAAErAMAA/fGIwAF3N8CApSAawAF3Q8AA/1orAWADwAD60UrAAXdTASOAwAF3WsCApSAewAF3ZMAA/5wBAAEuABzAAXd/LsAAi6rAAPY6AAAAAMAA/5sBYAPAAP5+BsAA/5uC7cABd5XAAXecwAF5kgAAwACLqsAA9joAAAABA8ABd6fAAXmSAAAAAAAAAGADwAD+fgE+B0nAAXewIhbAAXe0LpyzwAD/ZwAhHMABd8kWwAF3xC6WiMAA/15IAQABJwAAwAD+jT4BPTDAAXfYH8ABd97AAPwpAQABJAACJ8AAi6snwACLrAA/TsABeJrAAXinAACDHV0DwAD9OwFgA8AA/n4BFsABeK4ugx3AAP9iPR7AAXjAwAD/fQIAAoDAAXjnwICnLSoATsABeQXAAXkMAACBdmADwAD+yAEfwAF5DsAA/ucAAAAAScABeSIWwAF5Ji7AAIr3wAD/bD0cwAF5PoHAAXk3wICnbIKOAQABJ1AAwAD+3D89HMABeVWBwAF5TsCAp2yf+gIAAoDAAXlewICnLSdQAMAA/t5KwAF5dgEcwAF5hIHAAXl9wICnbCMAAAAAwAD+4QbAAP+cgu3AAXmXwAF5pcABfQ4AAcAAi63AAPY6AAAAAQPAAXm3wAF9DgAAAAEBAcABebwAAACArGADwAD+/wAAYAPAAP5+AT4JTsABeczAAXnbAADAAIuuYAPAAPrRASpOwAF57MABefUAAMAAi1JdA8AA/TsBYAPAAP5+ARbAAXn7gMABeffAgKgsgx3AAP8NScABeg0iIhzAAXohFsABehqCwAF6EcCAqF5hwAD9a4CXAQABkwDAAP3HABzAAXpDFsABejwcwAF6OILAAXowwICoXksBAAGTAMAA/UphwAD+gkgBAAGVAMAA/bsAHMABem0cwAF6XxzAAXpbgsABelPAgKheSwEAAZMAwAD9SoQQAQABlADAAP6MSAEAAWrAAXpwYAPAAPyXltMAwAD9uz4DPR7AAXqAwAD/fwIAAhzAAXqlHMABeqGCwAF6mcCAqF5LAQABkwDAAP1KhBABAAGTAMAA/owqAD0ewAF6wsAA/34DAAOCwAF65sCAqF4qlAA9icABewHAgKhHKT4BPR7AAXsrwAD/fgMAA4LAAXtPwICoXiqTAE7AAXtywAF7eQAAgXZgA8AA/sgBH8ABe3vAAP7nAAAAAEnAAXuPIhbAAXuXgMABe5PAgKgswACK98AA/xcAIYHAAXurwICoRz0cwAF7woPAAXu7wICpp4KOAQABJ4LpAMAA/tw/ScABe9MWwAF724DAAXvXwICoLJyzwAD/Ej4CTsABe/XAAXv6AACWiGADwAD+fgEWwAF8AIDAAXv8wICoLJaIwAD/CEnAAXwMFsABfBWEwAF8EMCAqieDt8AA/oU+Az0cwAF8MoPAAXwrwICpp4KOAQABJ4LpAMAA/tw9HMABfE6DwAF8R8CAqaeCjgEAAYTAAXxUwICqJwDAAP7cPRzAAXxqg8ABfGPAgKmngo4BAAEngukAwAD+3D8/PRzAAXyQg8ABfInAgKmnn/oCAAKCwAF8mcCAqF4ngukAwAD+3knAAXyuIoHAAXyywICoRwAcwAF81BbAAXzNgsABfMTAgKheYcAA/WtIAQABlADAAP27PRzAAXzhg8ABfNrAgKmngo4BAAEngukAwAD+3D9KwAF88gEcwAF9AIPAAXz5wICppyMAAAAAwAD+4QbAAP9bgu3AAX0TwAF9HMABfWEBAMAAi6/AAPY6AAAAAQPAAX0swAF9YQAAAAAAAABgA8AA+tEBPgFKwAF9MgEiIRzAAX0+FsABfTkuTsAA/1ZIAQABKwDAAP6NABzAAX1OFsABfUkuTsAA/1aB2AEAASdQAMAA/pAGwAD/nYLtwAF9ZsABfWvAAX5XAADAAItDwAD2OgAAAAEDwAF9esABflcAAAABAQHAAX2GAAAAwACLsGADwAD+6AAAXAE+A0nAAX2QFsABfZ4WwAF9lC7AAIsowAD2OsAA/z6Dt8AA/oU+Aj0cwAF9tYDAAX2ywICr/4KOAQABFsABfbsuwACLKMAA9jrAAP8+AMAA/uo9HMABfdCAwAF9zcCAq/+CjgEAASeDhADAAP7qP0nAAX3mIRzAAX3wFsABfeouwAB/tMAA9jrAAP8/SAEAASsAwAD+jT0cwAF9/IDAAX35wICr/4KOAQABFsABfgIuwAB/tMAA9jrAAP8/AMAA/uo/ScABfg4hHMABfhgWwAF+Ei7AAHzCwAD2OsAA/0BIAQABKwDAAP27PgI9HMABfiyAwAF+KcCAq/+CjgEAASeC6gDAAP7qPRzAAX5BgMABfj7AgKv/go4BAAEWwAF+Ry7AAHzCwAD2OsAA/0AAwAD+6j8GwAD/boLtwAF/TcABf1nAAX+SAQASAAAAAQPAAX9ewAF/kgAAAAAAAABgA8AA/7IBSsABf2EBIxzAAX9pFsABf2IugbzAAP9VSAEAAScSAMAA/o0ewAF/fsAA/8ABAAEuACsBYAPAAP+yBsAA/62C7cABf5fAAX+ewAF/1QAAIwAAAAEDwAF/psABf9UAAAAAAAAAYAPAAP5+AT4BSsABf68BNQAAAAEAYAPAAP5+ARbAAX+2LrThwAD2OsAA/0QjHMABf7yAAMCArepIAQABKwDAAP6NF8ABf7YutOHAAPY6HMABf8AuwACLscAA9joAAAAAwAD/nsAA/0SAAMCAreoBYAPAAP5+BsAA/56C7cABf9rAAX/hwAGB5gAAwACLscAA9joAAAABA8ABf/DAAYHmAAAAAAAAAGADwAD+fgE+CEAcwAGABhbAAYAALrThwAD2OsAA/0RIAQABKwDAAP6NwAGAAMABgA0ATsABgCHAAYAkAACD6WADwAD+yAEfwAGAJsAA/ucAAAAAScABgDoWwAGARRbAAYA+LoG8wAD/VYO3wAD+hT01wAGAUQAAAQBgA8AA/sgBgMABgFHAgK6zNQAAAAEAWwEcwAGAVYHAAYBTwICu8YKOAQABFsABgFsugbzAAP9VAMAA/tw1AAAAAQBbARzAAYBkgcABgGLAgK7xgo4BAAEnguoAwAD+3IEAwICu8T9JwAGAdCIWwAGAeC6cs8AA/2cBHMABgJAWwAGAiS6BvMAA/1VIAQABJ4G9AMAA/o0+Aj0cwAGBFIDAAYERwICus4KOAQABJ5miAMAA/tw9HMABgScuwACLQ8AA9joBAAGAwAGBN8CArrMAwAD/nT89HMABgUmAwAGBRsCArrOCjgEAARbAAYFPLk7AAP9WAMAA/txJwAGBWiEcwAGBZRbAAYFeLsAAiynAAPY6wAD/QUgBAAErAMAA/o09NcABgW4AAAEAYAPAAP7IAYDAAYFuwICuszUAAAABAFsBHMABgXKBwAGBcMCAsBuCjgEAASeA9ADAAP7cNQAAAAEAWwEcwAGBfoHAAYF8wICwG4KOAQABFsABgYQuwACLKcAA9jrAAP9BAMAA/tyBAMCAsBs/ScABgZEhHMABgZ8WwAGBlS7AAIsqwAD2OsAA/0JIAQABKwDAAP6NPTXAAYGoAAABAGADwAD+yAGAwAGBqMCArrM1AAAAAQBbARzAAYGsgcABgarAgLC4go4BAAEnhsYAwAD+3DUAAAABAFsBHMABgbiBwAGBtsCAsLiCjgEAARbAAYG+LsAAiyrAAPY6wAD/QgDAAP7cgQDAgLC4P0rAAYHOARzAAYHYgMABgdXAgK6zIwAAAADAAP7hBsAA/66C7cABgevAAYH5wAGDvAMASAAAAAEDwAGB+8ABg7wAAAABAQHAAYIDAAAAg9tgA8AA/eQAAGADwAD60QE+AknAAYIQHsABghTAAPZ4AgACLoDAAYIkwICxcgBKwAGCLAEpP0rAAYI9ASIiIiIiIiIiIiIlwAGCSoDAAYJEwICxcmADwAD+/wAcwAGCYxbAAYJcLoG8wAD/VUgBAAEWwAGCbBTAAYJmwICxcgABYAPAAP7/gbzAAP8FAMAA/o0AHMABgosWwAGCfi6cs8AA/2dIAQABFsABgpQUwAGCjsCAsXIAAWADwAD+/5yzwAD/EgDAAP3xABzAAYK1FsABgqwulofAAP9dSAEAARbAAYK+FMABgrjAgLFyAAFgA8AA/v+Wh8AA/wcAwAD+jQAcwAGC1xbAAYLSLpaIwAD/XkgBAAEWwAGC4BTAAYLawICxcgABYAPAAP7/lojAAP8IAMAA/o0AHMABgvUWwAGC8C6WicAA/19IAQABFsABgv4UwAGC+MCAsXIAAWADwAD+/5aJwAD/CQDAAP27ABzAAYMTFsABgw4uTsAA/1ZIAQABFsABgxwUwAGDFsCAsXIAAWADwAD+/07AAP8KAMAA/o0AHMABgzUWwAGDLC6cscAA/2lIAQABFsABgz4UwAGDOMCAsXIAAWADwAD+/5yxwAD/FADAAP3xABzAAYNYFsABg1IulorAAP9gSAEAARbAAYNhFMABg1vAgLFyAAFgA8AA/v+WisAA/wsAwAD+jQAcwAGDfhbAAYNyLpyywAD/akgBAAEWwAGDhxTAAYOBwICxcgABYAPAAP7/nLLAAP8VAMAA/fEAHMABg6cWwAGDni6Wi8AA/2FIAQABFsABg7AUwAGDqsCAsXIAAWADwAD+/5aLwAD/DADAAP6NBsAA/2+C7cABg8HAAYPJwAGECQEAg8YAAAABA8ABg9LAAYQJAAAAAAAAAGADwAD8lwE+AUrAAYPYATUAAAABAGADwAD8lwEWwAGD3y7AAIsswAD2OsAA/0UjHMABg+6AAMCAtDNIAQABKwDAAP27F8ABg98uwACLLMAA9joWwAGD/RzAAYPyLiMAAAAAwAD/rYPGwAD+g8AA/0WAAMCAtDMBYAPAAPyXBsAA/5+C7cABhA7AAYQiwAGEPQABwAB5fcAA9joAAAABA8ABhC3AAYQ9AAAAAAAAAF0DwAD9OwFgA8AA/n4BSsABhDMBMcABhDtgA8AA/n4ABsAA/6CC7cABhELAAYRjwAGISQABwACLssAA9joAAAABA8ABhHfAAYhJAAAAAgEBwAGEfwAAAJaKYAPAAP5+AAHAAYSWAAAAwABR/WADwADIJgFqwAGEoWADwADJ7IGJXQPAAP1tAmADwAD+fl0DwAD9OwFgA8AA/n4BPghOwAGEssABhLkAAIF2XQPAAP1tAmADwAD+fl0DwAD9OwFgA8AA/n4BMsABhNFgA8AA/n5dA8AA/TsBYAPAAP5+AE7AAYTdwAGE3wAAYmADwAD8lwGTTsABhOzAAYTyAABqYAPAAPyXAZNOwAGE/8ABhQsAAMAAg7tgA8AA/JcBHMABhQ2UgcYAAAAAwAD8uk/AAYUWwAGFGwAAAcAAi7NhAwNgA8AA/JdgA8AA/JdgA8AA/JdcAAPAAYUkwAGG4AAAAAMDA8ABhSkAAABqYAPAAPyXAMABhTQAAADAAIO7YAPAAPyXAMABhUUAAACCkGADwAD8lwAAXAE+BU7AAYVZAAAAg9ZgA8AA/n4ATsABhWsAAACAlmADwAD+fgBJwAGFeBzAAYWCh8ABhXzAgLYzSAEAARTAAYWFwIC2VAkAAMAA/btKwAGFigA/ScABhZgcwAGFqBTAAYWcwIC2QggAYwEAAZMAwAD9xT4CPRXAAYW3wIC2agoewAGFvcAA/6MFAAWAwAGFyMCAtSGHwAGFz8CAtjMUwAGF1sCAtlQJAIHAAYXbwIC1MikAPRXAAYX0wIC2ewsnAD4CPRXAAYYXwIC2agoewAGGHcAA/6MFAAWAwAGGKMCAtSGHwAGGL8CAtjMUwAGGNsCAtkIIAIHAAYZDwIC1MikAPRXAAYZcwIC2ewsewAGGZMAA/6MFAAWAwAGGb8CAtSEcwAGGghTAAYZ2wIC2QggAZAEAAZQAwAD9vRTAAYaHwIC2VAkAgcABhozAgLUyKQA9HMABhtAcwAGGsoLAAYarwIC1b5lKAgACFMABhr7AgLZqCgBqwAGGw2EDAF0DwAD9OwFgA8AA/n7AAeRuAMAA/YhWAQABFMABhtTAgLZ7CwAAwAD9TEPAAYbnHMABhvCDwAGG7sCAtbBjAQABFsABhviAwAGG8sCAtSFhwAD+ggDAAP3FPgNOwAGHDMABhxEAAJyhYAPAAPyXARzAAYcZgMABhxPAgLUhhBABAAGDwAGHJMCAtbAAwAD+jEnAAYcuHMABhzeHwAGHMsCAuD9IAQABasABhzpgA8AA/JfAAJYGAMAA/bs+AUnAAYdNHMABh12FwAGHUcCAtdhjAQABkwDAAP3FPY3AAYdiwIC12IPAAYdwwIC1sD9JwAGHgBzAAYeJh8ABh4TAgLg/SAEAAWrAAYeMYAPAAPyXwABf6QDAAP27PgM9HMABh6uGwAGHosCAtgIgAwADhMABh6zAgLXEhcABh7PAgLXYg8ABh8DAgLWwAAA9jMABh8zAgLXEHMABh9aDwAGH1MCAtbBkAQABlADAAP29PY3AAYfjwIC12BzAAYfxlIHGAAAAAMAA/Lo/PYvAAYgDwIC1sBzAAYgEg8ABiAPAgLWwZAEAAZQAwAD9vT0cwAGIG4bAAYgSwIC2AiADAAOEwAGIHMCAtcSFwAGII8CAtdiDwAGIMMCAtbAAAErAAYg4AYLAAYg/wIC1bwbAAP+hgu6DZ4N+iaYAAcAAi7TAAPY6AWqDfmADwADLv8ABf7YAAAEDg4iJpgAAAAQEBIOTAAAAwACLtV0DwAD9OwFgA8AA/JcAg6oAAACBsmADwAD+fgCDvwAAAMAAUf1gA8AAyCYAg84AAADAAIu2YAPAAPrRAABgA8AA/n4BPghOhCGEIwAAYmADwAD8lwGTSYQsIiIehDDAAPZ4AgACgoQ6wIC6JGqERGADwADJ7IGJAAEehFXAAPZ4AgACgoRfwIC6JGqEaWADwADJMMABhxwAAR6EfMAA9ngCAAKChIbAgLokaoSQYAPAAMbfwAGHKAA+AUFFhQ0AARyFFoSFFMCAuk9jAQABFoUdgYUYwIC6FmHAAP6CAMAA/cUBjIUlwIC6TxyFJoSFJcCAuk9kAQABlADAAP29PgJOhTiFPQAAnKFgA8AA/JcBHIVEgYU/wIC6FoQQAQABhIVPwIC6TwDAAP6MSYVbIhyFZIWFX8CAuwmBbQEAATeAgADAAP3IARyFqxyFlByFiICFesCAuf9LAQABHIWOhYWJwIC7CYPBAQABlwDAAPy0AMAA/UqDfAEAARyFmZSDvwEAARyFooWFncCAuwmDfAEAATcPAMAA/K8AwAD8swDAAPyvSAEAAZMAwAD9uz4BQoW9AD8/SYXgHIXmhIXkwIC6T0gBAAEWhe6BhenAgLoWYcAA/oIAwAD9u0qF9gGBhf3AgLoWP06Gh4aOAACBdmADwAD+yAEfhpTAAP7nAAAAAEWGqAGGsYazAACX0mADwAD8lwGTARyGuoaGuMCAvA1jAQABhIa8wIC6TwDAAP3FAY6Gv8CAvA0chsCGhr/AgLwNZAEAAZQAwAD9vT4BPRyG04WGzMCAu++EFgEAARyG5oGG4cCAuhaEEAEAAYaG8cCAvA0AwAD+jADAAP7dTodQh1YAAIQ5XQPAAP07AWADwAD8lwEch2GCh1jAgLoklXoBAAGBh2jAgLoWAMAAx/VFh3MAARyHfISHesCAuk9jAQABFoeEhod+wIC8h2HAAP1rAMAA/cUBjIeMwIC6TxyHjYSHjMCAuk9kAQABlADAAP29PgJOh52HogAAhwFgA8AA/JcBHIephoekwIC8h0sBAAGEh6rAgLpPAMAA/UpJh7QiHIe9h4e4wIC8/mMBAAE3gIAAwAD9xQAhHIgEHIfsHIfggIfSwIC5/0sBAAEch+aHh+HAgLz+g8EBAAGXAMAA/LQAwAD9SoN8AQABHIfxlIO/AQABHIf6h4f1wIC8/oN8AQABNw8AwAD8rwDAAPyzAMAA/K9IAQABkwDAAP27PgE9HIgchYgVwIC774QWAQABh4gqwIC8/gDAAP7dSYg+IoOIQsCAujQAHIhWh4hRwIC8/kgBAAFqiFlgA8AA/JeDSgDAAP27PgE9HIhyhYhrwIC774QWAQABaoiAYAPAAPyXwABGmgDAAP7dPgE9NYjUAAABAGADwAD+yAGFiNTAgLvvNQAAAAEAWwEciOcUiOXAgL4ZCACEFgEAAWqI9WADwAD8l8AAYfYAwAD+3TUAAAABAFsBHIkLFIkJwIC+GQgAhBYBAAEciSNqiRlgA8AA/n7AAeRphBABAAEciTOHiS7AgLz+g8EBAAGXAMAA/LQAwAD+jADAAP7dNQAAAAEAWwEciUYUiUTAgL4ZCACEFgEAARyJXmqJVGADwAD+fsAB5GmEEAEAARyJboeJacCAvP6DfAEAATcPAMAA/K8AwAD+jADAAP7dFADAgL4ZCABKiYoBHImYhYmRwIC77yMAAAAAwAD+4QbAAP+igu3AAYlEwAGJT8ABi3AAAcAAi7fAAPY6AAAAAQPAAYlhwAGLcAAAAAICAsABiWkAAACIbGADwAD+fgDAAYlwAAAAoAJgA8AA/JcAAGADwAD8lwE+A07AAYl/wAGJhAAAhwFgA8AA/JcBk0XAAYmNAcABiZbAAYmYAABiYAPAAPyXAZMBHMABiZ+DwAGJncCAv4djAQABlQDAAP3FAYvAAYmkwIC/hxzAAYmlg8ABiaTAgL+HZAEAAZQAwAD9vT4CTsABibXAAYm+AADAAGHuYAPAAPyXARzAAYnCgMABicDAgL9ChBABAAEcwAGJ0YHAAYnNwIC/UmQBAAGDwAGJ08CAv4cAwAD9vQDAAP6MScABid0iHMABieY3MIFrAQABhMABienAgL/YAMAA/cYAHMABif6EwAGJ9cCAv9iBawEAATc5AMAA/cY+AT2KwAGKEcCAv20cwAGKLRzAAYoiHMABih2CwAGKGMCAv22DjQEAATcQAMAA/b9kAQABhMABiiTAgL/YAMAA/b2BjQEAATcwAMAA/b4+Aj2MwAGKicCAv9gcwAGKkoTAAYqJwIC/2IEGAQABNyAAwAD8sEnAAYqjIhzAAYqsN2GBawEAAYTAAYqvwIC/2ADAAP3GABzAAYrEhMABirvAgL/YgWsBAAE3ZgDAAP3GPgE9isABitnAgL9tHMABivUcwAGK6hzAAYrlgsABiuDAgL9tg40BAAE3EADAAP2/ZAEAAYTAAYrswIC/2ADAAP29gY0BAAE3VwDAAP2+PgE9MMABixgfwAGLHsAA+8oBAAEnwACLuABKwAGLYQGCwAGLaMCAv20GwAD/o4LtwAGNMsABjUDAAZLAAAHAAIu5wAD2OgAAAAEDwAGNSsABksAAAAAFBQXAAY1ZAAAAgbJgA8AA/n4AwAGNYwAAAGpgA8AA/JcAwAGNbgAAAIKQYAPAAPyXAMABjXwAAADAAFH9YAPAAMgmAMABjYsAAADAAIu6YAPAAPrRAABgA8AA/n4BPglAHMABjaeTgWsBAAGBwAGNqsCAwcYAwAD9xsABjaXAAY2vAEAcwAGNw4HAAY29wIDBxoFrAQABgsABjcbAgMHVAMAA/cbAAY29wAGNyQBAHMABjduCwAGN18CAwdWBawEAARbAAY3jgMABjd7AgMG2YcAA/oIAwAD9xsABjdfAAY3pAEAhHMABjgCDwAGN98CAweVIAQABKwDAAP3xwAGN98ABjgcATsABjmPAAY5qAADAAGqQYAPAAPrRASlBRcABjnYBwAGOf8ABjoEAAGJgA8AA/JcBgcABjoPAgMHGARzAAY6MhsABjorAgMLXYwEAAYLAAY6OwIDB1QDAAP3FAY7AAY6TwIDC1xzAAY6UhsABjpPAgMLXZAEAAZQAwAD9vT4CTsABjqTAAY6tAACYYmADwAD8lwEcwAGOtIDAAY6vwIDBtoQQAQABhsABjr/AgMLXAMAA/oxJwAGOySIiHMABjtaHwAGOzcCAwziAlwEAATd/AMAA/ccBHMABjvKHwAGO6cCAwzhIAQABasABjvVgA8AA/JfAAGH2AMAA/bsBIoTAAY8MwIDB9wAcwAGPJIfAAY8bwIDDOEgBAAFqwAGPJ2ADwAD8l8AARpoAwAD9uz4CPY3AAY85wIDCuipCwAGPUQA/TsABj3QAAACEOV0DwAD9OwFgA8AA/JcAScABj3+FwAGPg8CAwro+AUnAAY+TIiIcwAGPnGrAAY+XYAPAAMnsgYlIAQABg8ABj5/AgMHlAMAA/fEBHMABj7JqwAGPq2ADwADJMMABhxxIAQABg8ABj7XAgMHlAMAA/fEBHMABj8dqwAGPwWADwADG38ABhyhIAQABg8ABj8rAgMHlAMAA/fE+AUrAAY/eARzAAY/qgMABj+XAgMG2gL4CAAKBwAGP9MCAwcaCwAGP+8CAwdUAwAD+lD4BPY7AAZAYwIDD+xbAAZA7HMABkCWAwAGQIMCAwbaAvgIAAoHAAZAvwIDBxoLAAZA2wIDB1QDAAP6Un/PAAP6GPgI9jsABkGHAgMP7HsABkGnAAPg1AQFgA8AA/JcBkwBFwAGQdwHAAZCAwAGQggAAYmADwAD8lwGBwAGQhMCAwcYBHMABkI2HwAGQi8CAxTRjAQABgsABkI/AgMHVAMAA/cUBj8ABkJTAgMU0HMABkJWHwAGQlMCAxTRkAQABlADAAP29PgNOwAGQp8ABkLAAAJhiYAPAAPyXARzAAZC3gMABkLLAgMG2hBABAAGHwAGQwsCAxTQAwAD+jEnAAZDOHMABkNsUwAGQ0sCAxZUIAICXAQABN38AwAD9xz4BPTDAAZDuH8ABkPTAAPvKAQABJ8AAi7sAP0nAAZE4HMABkUUUwAGRPMCAxZUIAEgBAAFqwAGRSGADwAD8l8AAYfYAwAD9uz4DScABkV4cwAGRaBzAAZFkh8ABkWLAgMU0ZAEAAZYAwAD9vYCXAQABFsABkW+AwAGRasCAwbZhwAD+ggDAAP3HPgE9MMABkYUfwAGRi8AA+8oBAAEnwACLvAA/PRzAAZHHhsABkcHAgMP7VgEAAR7AAZHLwAD/ogIAAoDAAZHewIDBthzAAZHmh8ABkeTAgMU0ZAEAAZQAwAD9vQAAwAD9TD2PwAGR98CAxTQcwAGR+YfAAZH3wIDFNGQBAAGVAMAA/b1JwAGSDiKEwAGSEsCAwfcAHMABkioUwAGSIcCAxZUIAEgBAAFqwAGSLWADwAD8l8AARpoAwAD9uz4BPRzAAZJGhsABkkDAgMP7VgEAAWrAAZJKYAPAAPyXg0oAwAD9TD4BPRzAAZJ0hsABkm7AgMP7VgEAARTAAZJ4wIDFlQgAAMAA/UxKwAGSnwEcwAGSr4PAAZKmwIDB5YchAQABhsABkrbAgMP7AMAAx/YGwAD/pILtwAGSxcABktHAAZNmAAHAAIu9wAD2OgAAAAEDwAGS58ABk2YAAAABAQHAAZLsAAAAmGJgA8AA/JcAAGADwAD60QE+Ak7AAZMAwAGTCgAAwACLh2ADwAD8lwEcwAGTFYDAAZMMwIDH0YEGAQABNyAAwAD8sErAAZMhASIcwAGTN2rAAZMpYAPAAPyXwACbAoFrAQABgcABkzrAgMfsAMAA/cYAHMABk1GBwAGTR8CAx+yBawEAAWrAAZNUYAPAAPyXwACbTQDAAP3GBsAA/6WC7cABk2vAAZN3wAGT9QABwACLvsAA9joAAAABA8ABk4jAAZP1AAAAAQEBwAGTjQAAAJyhYAPAAPyXAABgA8AA+tEBPgFKwAGTmQEiHMABk6WAwAGToMCAyKFjAQABN38AwAD9xQAhHMABk+wcwAGT1BzAAZPIasABk7hdA8AA/TsBYAPAAPyXwAHirUsBAAEcwAGTzoDAAZPJwIDIoYPBAQABlwDAAPy0AMAA/UqDfAEAARzAAZPZlIO/AQABHMABk+KAwAGT3cCAyKGDfAEAATcPAMAA/K8AwAD8swDAAPyvSAEAAZMAwAD9uwAAgBdSAIAXjACAHVYAgCKLAIAjSACAJAUAgCS0AIAk/gCAJfkAgCaLAIAnLQCAJ6YAgCgfAIApJACAK1UAgCvkAIAz2ACANLwAgDWiAIA16ACANxMAgDhSAIA55QCAO1IAgEK6AIBJWwCAShwAgEwQAIBM5wCATm0AgE8yAIBP8ACAVjwAgFdSAIBYQwCAYUMAgGI0AIBrmQCAboUAgG+CAIBwVQCAc+0AgHTyAIB5KgCAegEAgH3ZAICCVACAg48AgIo0AICLKACAjCkAgIycAICQTQCAkRwAgJNbAICW9gCAmX0AgJnsAICgpwCAoPYAgKFQAIChrACAogYAgKJgAICirgCAowQAgKT1AICmnwCAp/wAgKtWAICrzwCArUYAgK2wAICuTwCAsUkAgLP4AIC0oACAtPEAgLnMAIC/EgCAwYYAgMehAIDIcQCAyWIAAABTAsAA/7KC7cABwfHAAcH3wAIWBAPAAIu/AAABYAHAAP3kAAAIBMAA/7WC7cABwhTAAcIiBsAAi8DAAPY6AGADwAD8lwFqwAHCIGADwAD8l4GeBMAA/7aC7cABwzzAAcNBCbThwAD2OgBgA8AA/n4ABMAA/7eC7cABxfzAAcYNCcAAi8HAAPY6AF0DwAD9OwFgA8AA/JcABMAA/7iC7cABxk7AAcZXGMAAi8LAAPY6AGADwAD+/wAEwAD/uYLtwAHG2cABxukGwACLw8AA9joAYAPAAMcpAWrAAcbjYAPAAMcpwAF3XQTAAP+6gu3AAg4fwAIRDwbAAIvEwAD2OgBdA8AA/TsBYAPAAPyXAWrAAg4xXQPAAP07AWADwAD8l8AB5IUEwAD/u4LtwAISnMACEr0GwACLxcAA9joAXQPAAP07AWADwAD8lwFqwAISrl0DwAD9OwFgA8AA/JfAAeQuBMAA/7yC7cACEx3AAhYCBsAAi8bAAPY6AF0DwAD9OwFgA8AA/JcBasACEyxdA8AA/TsBYAPAAPyXwAHkrQEFwAD/1ILtwAHGXMABxlzAAcaZAIC1wAD2OgADwAHGZcABxpkAAAADAwPAAcZrAAAEtOFgA8AA/n4AwAHGdwAABMAAi8FdA8AA/TsBYAPAAPyXAMABxo8AAATAAIvCYAPAAP7/AABgA8AA/7IBPwQIAcAA/7aAAMCAzH4IAcAA/7eBAMCAzI4IAcAA/7iCAMCAzKcJAcABxlzAAP36AAAAABEGwAD/voLtwAHHscABx7nAAcvXBAGdIAAAAAEDwAHHy8ABy9cAAAAFAQHAAcfTAAAAlxxgA8AA/n4ABMABx+oAAADAAHzrYAPAAP5+AWoAYAPAAP2hecAByAMAAADAAFH9YAPAAMgmAWoAYAPAAP2hecAByCcAAACau10DwAD9bQJgA8AA/n5gA8AA/n4BagBgA8AA/aF5wAHIPgAAAMAAdNxgA8AA+tEBasAByEdgA8AA+tEAYAPAAP+yAT4LTsAByGLAAchpAACCj2ADwAD+yAEfwAHIa8AA/ucAAAAATsAByInAAciRAADAAGv3XQPAAP07AWADwAD8lwExwAHIk2ADwAD8lwFqwAHIlGADwAD8l4GeTsAByKsAAADAAIvHYAPAAP5+AE7AAcjDAAAAwACLyGADwAD+fgBJwAHI1SEcwAHI5IPAAcjZwIDNZ0gBAAErAMAA/fE9j8AByO3AgM4MHMAByQWDwAHI+8CAzWdLAQABJ8AAfLgAwAD9gT9JwAHJFhzAAckjgsAByRrAgM1MSAEAASsAwAD98T4BScAByTQhHMAByUSHwAHJOMCAzgxIAQABKwDAAP6NPgE9isAByVfAgM1MHsAByWvAAMgwAQABh8AByXXAgM4MAD9JwAHJlhzAAcmmh8AByZrAgM4MSAEAASsAwAD+jT4BPRXAAcn4wIDOHwgWwAHKEILAAcoHwIDNTIC9wADILT89IxzAAcopgsAByiDAgM1MSAEAASsAwAD98YrAAcogwIDNTGrAAcotYAPAAMbfwAGHKCsBYAPAAMgmPR7AAco4wAD/wwUABYHAAcpCwIDNMRTAAcpMwIDOHwgAg8ABylrAgM1nhcABymbAgM21hsABym7AgM3WAD0cwAHKhIbAAcp8wIDN1lYBAAEWwAHKj4XAAcqIwIDNtWHAAP7jAMAA/UxJwAHKnITAAcqgwIDNjT4DPRzAAcq3hcAByrDAgM21go4BAAEnwACLyQDAAP7cPRzAAcrYhsABytDAgM3WVgEAARzAAcrqFsAByuOFwAHK3MCAzbVhwAD+44GNAQABlADAAP2+AMAA/Uw9HMAByv2FwAHK9sCAzbWCjgEAARzAAcsaHMABywyCwAHLA8CAzUzAAHQlAQFgA8AA/n4BasAByxFgA8AAxynAAXddAMAAx/eVegEAAYDAAcshwIDNIADAAMf1AMAA/tw+Aj0cwAHLRoXAAcs/wIDNtYKOAQABJ4CnAMAA/tw9HsABy1jAAP/GAwADasABy2hdA8AA/TsBYAPAAPyXwAHkLhzAAct9gsABy3TAgM1MlXoBAAGAwAHLhMCAzSAAwADH9YXAAcuOwIDNtQBKwAHLoQEfwAHLsMAA/9QDAAMcwAHLuYXAAcuywIDNtSMAAAAAwAD+4YbAAcvFwIDN1isABsAA/7+C7cABzKDAAcyowAHPfAQBwACLygAAAAEDwAHMucABz3wAAAAEAQHAAczEAAAAhDldA8AA/TsBYAPAAPyXAAPAAczSAAAAwAB861sBasABzN1gA8AA/n7AAeJowAHNEwAAAJq7XQPAAP1tAmADwAD+fmADwAD+fgFqAGADwAD9oXnAAc0lAAAAwACK9FsBasABzTZgA8AA+tEAYAPAAP+yAT4GTsABzVHAAc1YAACCj2ADwAD+yAEfwAHNWsAA/ucAAAAATsABzXjAAc2AAADAAGv3XQPAAP07AWADwAD8lwExwAHNgmADwAD8lwFqwAHNg2ADwAD8l4GePR7AAc2TwAD/wwUABSbAAc2dAYHAAc2dwIDRZGADwAD+fiuCwAHNrcCA0YCEwAHNucCA0cmFwAHNwcCA0eoAPRzAAc3XhcABzc/AgNHqVgEAARbAAc3ihMABzdvAgNHJYcAA/uMAwAD9TEnAAc3vJsABzfMBg8ABzfPAgNGmYAPAAPrRPgI9HMABzhKEwAHOC8CA0cmCjgEAASeApwDAAP7cPR7AAc4kwAD/xgMAA2rAAc40XQPAAP07AWADwAD8l8AB5C6AwAHOQMCA0UyEwAHOR8CA0ckAPgM9HMABzmqEwAHOY8CA0cmCjgEAASfAAIvJAMAA/tw9HMABzouFwAHOg8CA0epWAQABHMABzp0WwAHOloTAAc6PwIDRyWHAAP7jgY0BAAGUAMAA/b4AwAD9TD0cwAHPExzAAc7EFsABzrFqwAHOqWADwADHKcABd12I4sAAxy606wEAAR/AAc7wwADJvwEBYAPAAP7oAYTAAc7/wIDRyQAAwADHPsAAbkkEAASAwAHPHMCA0UyTFsABzyyAwAHPJsCA0UxhwAD9aykAwADHskrAAc9GAR/AAc9VwAD/1AMAAxzAAc9ehMABz1fAgNHJIwAAAADAAP7hhcABz2rAgNHqKwAGwAD/wILtwAHQrcAB0LXAAdLTBAGXHwAAAAEDwAHQxMAB0tMAAAABAQHAAdDJAAAAgKxgA8AA/v8AAGADwAD/sgE+BUnAAdDUIRzAAdDjFsAB0NyAwAHQ2MCA1CWBvMAA/wVIAQABJxIAwAD+jT4BPTDAAdD2H8AB0QrAAPvLAwADgMAB0RDAgNQlJ4CsJ8AAi8sAP0nAAdFAFsAB0UiAwAHRRMCA1CWcs8AA/xI+AT0wwAHRXh/AAdFywAD7ywMAA4DAAdF4wIDUJSeArCfAAIvMAD9JwAHRsxbAAdG7gMAB0bfAgNQlnLLAAP8VPgE9MMAB0dAfwAHR5MAA+8sDAAOAwAHR9cCA1CUngKwnwACLzQA/ScAB0jYhFsAB0j+AwAHSO8CA1CWcscAA/xQ+AUrAAdJRAR7AAdJYwAD/xQMAAxbAAdJjgMAB0l/AgNQlTsAA/wqTgMAB0mzAgNQlAD9KwAHSsgEewAHSucAA/8UDAAMkwAHSxgGAwAHSwsCA1CU3BYDAAdLLwIDUJQAGwAD/w4LtwAHT2MAB0+TAAdqWAAHAAETgwAD2OgAAAAEDwAHT7cAB2pYAAAAFBQXAAdP1AAAAwAB862ADwAD+fgDAAdQGAAAAwACLx2ADwAD+fgDAAdQtAAAAmrtdA8AA/W0CYAPAAP5+YAPAAP5+AMAB1EYAAACCj2ADwAD+yADAAdRTAAAAwABr910DwAD9OwFbAABcAT4EScAB1GIiHMAB1G+AwAHUZsCA1bpIAQABKwDAAP6NARzAAdSDgMAB1HrAgNW6SAEAASfAAH0zAMAA/o0+AT2IwAHUnMCA1bonAD9JwAHUtSIWwAHUwoDAAdS5wIDVuoFVwAD+hAEewAHUzcAA9ngCAAKAwAHU18CA1bonwACK8wA+AT0cwAHVDYPAAdUGwIDV+4KOAQABgMAB1RPAgNW6AMAA/tw+BU7AAdVXwAHVYgAAwACLzmADwAD8lwEewAHVZMAA/8QBAAGAwAHVdsCA1boAScAB1YccwAHVloXAAdWLwIDWy2MBAAGTAMAA/cU+AT0wwAHVpR/AAdW5wAD7ywMAA4DAAdW/wIDVuifAAHzrJ8AAi88APz0cwAHWAIPAAdX5wIDV+4KOAQABHsAB1gvAAP+hBAAEasAB1iFdA8AA/TsBYAPAAPyXwAHkhRzAAdY7gMAB1jLAgNW6gL4CAAKThcAB1kjAgNbLAMAA/pRqwAHWVWADwADJ7IGJKgAAwAD+3D0cwAHWcYPAAdZqwIDV+4KOAQABJ1AAwAD+3D0cwAHWioPAAdaDwIDV+4KOAQABHsAB1pXAAP+hBAAEasAB1qtdA8AA/TsBYAPAAPyXwAHkhRzAAdbFgMAB1rzAgNW6gL4BAAEcwAHW2oXAAdbPwIDWy2QBAAGUAMAA/b0AwAD+lGrAAdbgYAPAAMnsgYkqAADAAP7cScAB1vkhHMAB1wmBwAHW/cCA1cxIAQABKwDAAP6NPgNJwAHXGiEcwAHXJoTAAdcewIDWC0gBAAErAMAA/WU+AT01wAHXOQAAAQBdA8AA/TsBWwGEwAHXOcCA1gs1AAAAAQBbARzAAddChcAB10DAgNh/VgEAARbAAddNg8AB10bAgNX7YcAA/uMAwAD9TDUAAAABAFsBHMAB11aFwAHXVMCA2H9WAQABHMAB12gWwAHXYYPAAddawIDV+2HAAP7jZAEAATcIAMAA/b0AwAD9TIUAwIDYfz89HMAB14ODwAHXfMCA1fuCjgEAASfAAIvQAMAA/tw9HMAB16SDwAHXncCA1fuCjgEAAR7AAdevwAD/oQQABGrAAde6XQPAAP07AWADwAD8l8AB5IWBwAHXy8CA1cxqwAHX2GADwADJ7IGJKgAAwAD+3D89NQAAAAEAXQPAAP1tAmADwAD+fmADwAD+fgGCwAHX8cCA1d4jHMAB1/2FAMCA2YhIAQABKwAAKxzAAdf9hQDAgNmIg/0BAAE0wAHYBQPAAdgFwAHakQAAAAICAsAB2AYAAACD1mADwAD+fgDAAdgLAAAAgJZgA8AA/n4AAGADwAD9oQE+CEnAAdgaFsAB2CKGwAHYHsCA2eKBVcAA/oQ+AT0wwAHYNR/AAdhJwAD7ywIAAicAJ8AAi9EAP0nAAdiHFsAB2JGHwAHYi8CA2fKBVcAA/oQ+AT0wwAHYpB/AAdi4wAD7ywMAAycAJ8AAi9IkwAHZCQMnwACL04bAAdkDwIDZ4ifAAGVPAD9JwAHZGiEcwAHZJoTAAdkewIDWC0gBAAErAMAA/WU9HMAB2TeEwAHZL8CA1gtWAQABFsAB2UKDwAHZO8CA1fthwAD+4wDAAP1MPz0cwAHZWIPAAdlRwIDV+4KOAQABJ5bQAMAA/tw9HMAB2beDwAHZsMCA1fuCjgEAAR7AAdnCwAD/oQQABGrAAdnNXQPAAP07AWADwAD8l8AB5IWGwAHZ3sCA2eJqwAHZ42ADwADJ7IGJKgAAwAD+3EnAAdn4IRzAAdoEhMAB2fzAgNYLSAEAASsAwAD9ZT0cwAHaFYTAAdoNwIDWC1YBAAEWwAHaIIPAAdoZwIDV+2HAAP7jAMAA/Uw/PRzAAdo2g8AB2i/AgNX7go4BAAEngLwAwAD+3D0cwAHaT4PAAdpIwIDV+4KOAQABHsAB2lrAAP+hBAAEasAB2mVdA8AA/TsBYAPAAPyXwAHkhYfAAdp2wIDZ8mrAAdp9YAPAAMnsgYkqAADAAP7cAMAA/YwBXAbAAP/Egu3AAduywAHbvcAB3PYAAcAAi9TAAPY6AAAAAQPAAdvOwAHc9gAAAAEBAcAB29YAAADAAHzrYAPAAP5+AABgA8AA/JcBPgNOwAHb6sAB2/UAAMAAi85gA8AA/JcBHMAB2/eUgcYAAAAAwAD8ukXAAdv/AcAB3AjAAdwKAABiYAPAAPyXAZMBHMAB3BGCwAHcD8CA3IJjAQABFsAB3ByAwAHcE8CA3DphwAD+ggDAAP3FAYrAAdwkwIDcghzAAdwlgsAB3CTAgNyCZAEAAZQAwAD9vUE+BE7AAdw1wAHcOgAAnKFgA8AA/JcBHMAB3EWAwAHcPMCA3DqEEAEAAYLAAdxQwIDcggDAAP6MScAB3FohHMAB3GODwAHcXsCA3OZIAQABasAB3GZgA8AA/JfAAF9PAMAA/btCwAHcbgA/ScAB3H4cwAHcjYHAAdyCwIDcV2MBAAGTAMAA/cU+Aj2JwAHcnMCA3FeCwAHcqcCA3IJCwAHctAA/SsAB3MwBHMAB3NOUgcYAAAAAwAD8ukrAAdzhAYHAAdzowIDcVwbAAP/Hgu3AAeGgwAHhr8AB46UAAYMLAAAAAQPAAeG0wAHjpQAAAAEBAcAB4bwAAACArGADwAD+fgAAYAPAAP+yAT4CScAB4cccwAHh1hbAAeHPgMAB4cvAgN3VYcAA/oKBbQEAATcFAMAA/cg+A07AAeHowAHh8gAAwACK+GADwAD8lwEewAHh9MAA9nYCAAKAwAHiBMCA3dWTAEnAAeITHMAB4iGBwAHiF8CA3htIAQABkwDAAP27PgFKwAHiVAEewAHiW8AA/8UDAAOAwAHiYsCA3dU3BSsAP0nAAeJ/HMAB4o2BwAHig8CA3htIAQABNyAAwAD9uz4BSsAB4ykBHsAB4zDAAP/FAwADHMAB4zuAwAHjN8CA3dWAvgEAATcFAMAA/pSTKwA/Pz0wwAHjZR/AAeNrwAD8cgMAAyfAAIvVgMAB45rAgN3VkwAGwAD/zILtwAHkS8AB5FPAAeZ+AQCArAAAAAEDwAHkV8AB5n4AAAAAAAAAYAPAAP7/AT4KScAB5F0hHMAB5GsWwAHkYS7AAIvCwAD2OsAA/7hIAQABKwDAAP8mSsAB5HQBFsAB5HsuwACLwsAA9jrAAP+4P07AAeSRwAHklgAATmADwAD+fgEWwAHkmC604cAA9jrAAP+2TsAB5KoAAACWimADwAD+fgBOwAHkucAB5MQAAMAAi9ZgA8AA/JcBHMAB5NcWwAHkxi7AAIvBwAD2OsAA/7dLAQABkwDAAP1KTsAB5OTAAeTvAADAAIvXYAPAAPyXARzAAeT3FsAB5PEutOHAAPY6wAD/toC7AgACJ4D0HMAB5Q+CwAHlBMCA36JkAQABlADAAP29AMAA/pFOwAHlHcAB5SEAAIKQYAPAAPyXARbAAeUpFsAB5SMutOHAAPY6wAD/tmHAAP6CScAB5TUcwAHlRIPAAeU5wIDf2YFtAQABkwDAAP3IPgI9icAB5VLAgN+RHsAB5V/AAP+SBAAEFsAB5YAutOHAAPY6wAD/thzAAeWSg8AB5YfAgN/ZZAEAAZQAwAD9vYTAAeWXwIDgKWrAAeWhXQPAAP07AWADwAD8l8AB5C4APYzAAeW5wIDgKYPAAeW/wIDf2T89iMAB5dXAgN9uHsAB5eHAAP+SBAAEFsAB5gAutOHAAPY6wAD/thzAAeYSgsAB5gfAgN+iZAEAAZQAwAD9vYTAAeYXwIDgKWrAAeYhXQPAAP07AWADwAD8l8AB5AwAPRfAAeY9LsAAi8LAAPY6H8AB5knAAQAXAwADLoDAAeZYwIDfboHAAeZewIDfkQDAAP+4SsAB5moBFsAB5nEuwACLwsAA9jrAAP+4BsAA/82C7cAB6abAAemxwAHqcwEAwAB86wAAAAEDwAHpusAB6nMAAAAAAAAAYAPAAP5+AT4ETsAB6cTAAenKAABqYAPAAPyXARzAAenhHMAB6d0WwAHpzC7AAIvBwAD2OsAA/7dLAQABkwDAAP1KZAEAAZQAwAD9vU7AAenuwAHp8gAAgpBgA8AA/JcBHMAB6gUWwAHp9C7AAIvBwAD2OsAA/7dLAQABlADAAP1KScAB6g4cwAHqGIDAAeoSwIDhyEgBAAGBwAHqG8CA4gsAwAD9u0rAAeogASfAAH0zP0rAAeo5AR7AAepFwAD/owUABRbAAepQLrThwAD2OsAA/7aAwAHqV8CA4ciBwAHqXsCA4gtqwAHqY2ADwADJ7IGJKgAGwAD/zoLtwAHsQ8AB7E7AAe6zAQDAAHy4AAAAAQPAAexWwAHuswAAAAAAAABgA8AA/n4BPgVOwAHsYMAB7G8AAMAAi9hgA8AA/JcBlE7AAex8wAHsiQAAwACL2WADwAD8lwEcwAHspBbAAeydFsAB7IsuwACLwcAA9jrAAP+3YcAA/WuBjQEAAZQAwAD9vknAAezFFsAB7MkuwACL2sAA/88+AT2JwAHtJsCA4wEcwAHtM4HAAe0mwIDjAYGNAQABlADAAP2+P0XAAe1DAcAB7UzAAe1OAABiYAPAAPyXAYDAAe1QwIDi6gEcwAHtYoLAAe1gwIDjgWMBAAGBwAHtZMCA4wEAwAD9xQGKwAHtcsCA44EcwAHtdILAAe1ywIDjgWQBAAGVAMAA/b0+A07AAe2GwAHtjwAAwACL22ADwAD8lwEcwAHtphzAAe2iFsAB7ZEuwACLwcAA9jrAAP+3SwEAAYLAAe2jwIDjgQDAAP1KZAEAAZQAwAD9vU7AAe21wAHtvAAAwACL3GADwAD8lwEcwAHtzxbAAe2+LsAAi8HAAPY6wAD/t0sBAAEcwAHt0oLAAe3QwIDjgWQBAAGUAMAA/b0AwAD9SknAAe3eIhzAAe3phMAB7eLAgOQwSAEAARzAAe31g8AB7ezAgOPiZAEAATcHAMAA/b0AwAD9uwAcwAHuAhbAAe38LrThwAD2OsAA/7aB2AIAAifAAHy4g8AB7hjAgOPiAMAA/pA+AUrAAe4tAR7AAe45wAD/owUABRbAAe5RLrThwAD2OsAA/7YcwAHuX4TAAe5YwIDkMGQBAAGUAMAA/b0cwAHudRbAAe5kLsAAi8HAAPY6wAD/t0sBAAEcwAHueILAAe52wIDjgWQBAAGVAMAA/b0AwAD9SmrAAe5+YAPAAMnsgYkqAD9KwAHungEnwAB9NQbAAP/Pgu3AAe70wAHu/cAB7ycBAMAAi9oAAAABA8AB7wbAAe8nAAAAAAAAAGADwAD60QFKwAHvCQEWwAHvIhbAAe8bFsAB7wkuwACLwcAA9jrAAP+3YcAA/Wu+bcAA/MwGwAD/0ILtwAHvsMAB77vAAe/1AQDAAIvdAAAAAQPAAe/HwAHv9QAAAAAAAABgA8AA/n4BSsAB78oBHMAB79AWwAHvyi604cAA9jrAAP+2gL4BAAEcwAHv8RbAAe/sFsAB79ouwACLwcAA9jrAAP+3gerAAP0gZAEAAZQAwAD9vQDAAP6UBsAA/8iC7cAB8VLAAfFcwAH2KQAAlagAAAABA8AB8WrAAfYpAAAAAAAAAGADwADjugE+C07AAfF6wAHxfwAAgbJgA8AA/n4BFsAB8YEutOHAAPY6wAD/tk7AAfGQwAHxlgAAamADwAD8lwEcwAHxrxbAAfGqFsAB8ZguwACLwcAA9jrAAP+3gerAAP0gZAEAAZQAwAD9vUnAAfG4FsAB8bwuwACL2sAA/88+AUrAAfHOARzAAfHkFsAB8dxqwAHx1WADwADHKcABd12B+MAAxy+I4wIAAoDAAfHswIDmi4HAAfHywIDmrwDAAMd9P07AAfKKwAHykQAAYWADwAD8lwEcwAHynxbAAfKYgMAB8pPAgOaLYcAA/oKBjQEAAYHAAfKhwIDmrwDAAP2+RcAB8qwBwAHytcAB8rcAAGJgA8AA/JcBgcAB8rnAgOavARzAAfLCg8AB8sDAgOeIYwEAARbAAfLJgMAB8sTAgOaLYcAA/oIAwAD9xQGLwAHy0cCA54gcwAHy0oPAAfLRwIDniGQBAAGUAMAA/b0+Ak7AAfLiwAHy6wAAmGJgA8AA/JcBHMAB8vKAwAHy7cCA5ouEEAEAAYPAAfL9wIDniADAAP6MScAB8wccwAHzFITAAfMLwIDn80gBAAFqwAHzF2ADwAD8l8AAYfYAwAD9uz4CPYvAAfMqwIDniBzAAfMsg8AB8yrAgOeIZAEAAZUAwAD9vT2KwAHzOsCA50UcwAHzQYLAAfM6wIDnRYGNAQABlQDAAP2+P07AAfN9wAHzhAAAgXZgA8AA47oBHsAB84bAAOO+AQABgsAB85DAgOdFAEnAAfOdHMAB86iCwAHzocCA50VIAQABFsAB87CAwAHzq8CA5othwAD+ggDAAP27PgI9HMAB88eDwAHzwMCA6JuDZAQABJOCwAHz08CA50UWwAHz4IDAAfPbwIDmi5/zwAD+hoHAAfPrwIDmrwDAAP1gSsAB8/kBg8AB9ADAgOibP07AAfQWwAH0HAAAJ2ADwAD8lwGTRcAB9CUBwAH0LsAB9DAAAGJgA8AA/JcBgcAB9DLAgOavARzAAfQ7hcAB9DnAgOlfYwEAARbAAfRCgMAB9D3AgOaLYcAA/oIAwAD9xQGNwAH0SsCA6V8cwAH0S4XAAfRKwIDpX2QBAAGUAMAA/b1BPgJOwAH0W8AB9GQAAJhiYAPAAPyXARzAAfRrgMAB9GbAgOaLhBABAAGFwAH0dsCA6V8AwAD+jEnAAfSAIRzAAfSNhsAB9ITAgOnLSAEAAWrAAfSQYAPAAPyXwABh9gDAAP27PgE9HMAB9KmDwAH0o8CA6JuAvwIAAjUAAAABAGADwAD8lwGEwAH0qsCA6UY1AAAAAQBgA8AA/JcBjMAB9KrAgOlGHMAB9K+HAMCA6kJkAQABlADAAP29hwDAgOpChsAB9LXAgOnLAMAA/Us+AknAAfTWHMAB9OAcwAH03IXAAfTawIDpX2QBAAGVAMAA/b1jAQABFsAB9OeAwAH04sCA5othwAD+ggDAAP3FPgJOwAH0/8AB9QQAAIcBYAPAAPyXAR7AAfUGwADLlAIAAoDAAfUTwIDmixzAAfUbhcAB9RnAgOlfZAEAAZQAwAD9vQBJwAH1KxzAAfU0h8AB9S/AgOrZgW0BAAGTAMAA/cg+Az0cwAH1ToPAAfVIwIDom4C/AgACNQAAAAEAYAPAAPyXAYTAAfVPwIDpRjUAAAABAGADwAD8lwGMwAH1T8CA6UYcwAH1VBQAwIDrTwgAZAEAAZQAwAD9vRQAwIDrTwgAh8AB9VrAgOrZAMAA/Us9jcAB9WzAgOlfHMAB9W6FwAH1bMCA6V9kAQABlQDAAP29QsAB9YAAPz89MMAB9agfwAH1rsAA/HIDAAMnwACL3oDAAfXYwIDmi4XAAfXewIDpXwBAHMAB9gGEwAH1+8CA6UZIAQABFsAB9guDwAH2BMCA6JthwAD9awDAAP27wAH1+8AB9hEASsAB9hgBg8AB9h/AgOibBsAA/8mC7cAB+LHAAfi4wAH69gAAlakAAAABA8AB+MfAAfr2AAAAAQAAAcAB+NIAAADAAFH9YAPAAMgmAWoAYAPAAP2heWADwAD+fgE+BUnAAfjjHMAB+PCAwAH458CA7GlIAQABKwDAAP3xPgNOwAH5BcAB+Q0AAMAAfLhgA8AA/n4BFsAB+RQuwAB8uMAA/849iMAB+UnAgOxpHsAB+V3AAMgwAQABgcAB+WfAgOytAEnAAfl3HMAB+YSAwAH5e8CA7GlIAQABKwDAAP3xPgE9MMAB+ZcfwAH5ncAA/CkBAAEkwAH5yQInwACL34HAAfnBwIDsrQA/P07AAfnlwAH56gAAgbJgA8AA/n4BFsAB+ewutOHAAPY6wAD/tk7AAfn7wAH6AQAAamADwAD8lwEcwAH6GhbAAfoVFsAB+gMuwACLwcAA9jrAAP+3gerAAP0gZAEAAZQAwAD9vUnAAfojFsAB+icuwACL2sAA/88+Ak7AAfo9wAH6RwAAwABYaF0DwADIEgJgA8AA/n5gA8AA/n4BHMAB+lgWwAH6UGrAAfpJYAPAAMcpwAF3XYH4wADHL8AAdCUBAWADwAD+fgEWwAH6ZoDAAfpdwIDsaYH4wADILADAAMgWSsAB+nYBHMAB+oeDwAH6fcCA7bGI4wEAARzAAfqUgcAB+o/AgO05gL4BAAGCwAH6nsCA7V0AwAD+lADAAMgVP0rAAfqxAR7AAfq9wAD/owUABYHAAfrIwIDtOYLAAfrOwIDtXRbAAfragcAB+tXAgO05YcAA/oKAwAH64sCA7GkqAAbAAP/Rgu3AAf16wAH9ksAB/0sBAJq7AAAAAQPAAf2dwAH/SwAAAAAAAABdA8AA/W0CYAPAAP5+YAPAAP5+AT4DTsAB/afAAf2uAACBdl0DwAD9bQJgA8AA/n5gA8AA/n4BMsAB/cBgA8AA/n5gA8AA/n4ARcAB/cgBwAH90cAB/dMAAGJgA8AA/JcBlgEcwAH92oHAAf3YwIDvFGMBAAEWwAH97hbAAf3cLsAAi8HAAPY6wAD/t2HAAP1rAMAA/cUBicAB/fbAgO8UHMAB/fiBwAH99sCA7xRkAQABlQDAAP29PgZOwAH+CsAB/hAAAGpgA8AA/JcBHMAB/iscwAH+IxbAAf4SLsAAi8HAAPY6wAD/t0sBAAEcwAH+JoHAAf4kwIDvFIGNAQABlQDAAP2+AMAA/UpkAQABlADAAP29TsAB/jrAAf5BAACV0mADwAD8lwEcwAH+VBbAAf5DLsAAi8HAAPY6wAD/t0sBAAEcwAH+V4HAAf5VwIDvFIGNAQABlADAAP2+AMAA/UpOwAH+Z8AB/msAAIKQYAPAAPyXARzAAf5+FsAB/m0uwACLwcAA9jrAAP+3SwEAAYHAAf5/wIDvFADAAP1KTsAB/pDAAf6UAACD1mADwAD+fgEewAH+m8AA/6MFAAUWwAH+pi604cAA9jrAAP+2gsAB/q3AgO+Ag8AB/rTAgO/basAB/rxgA8AAyeyBiSoATsAB/tfAAf7dAACAlmADwAD+fgEewAH+5MAA/6MFAAUWwAH+7y604cAA9jrAAP+2HMAB/v2DwAH+9sCA79tkAQABlADAAP29hMAB/wLAgPAoasAB/wdgA8AAyeyBiSoAPRzAAf8hgMAB/xvAgO7cgL8CAAKFwAH/IsCA8GWGwAH/KcCA8LYAwAD9gkrAAf86AYDAAf9BwIDu3AbAAP/Fgu3AAf9QwAH/X8ACCEAAAcAAf7/AAPY6AAAAAQPAAf9lwAIIQAAAAAMDA8AB/20AAACBsmADwAD+fgDAAf93AAAAamADwAD8lwDAAf+CAAAAt5tgA8AA/v8AAGADwAD/sgE+DUAiHMAB/6CBwAH/msCA8Y9IAQABkwDAAP27ARzAAf+ugcAB/6jAgPGPSAEAATcFAMAA/bvAAf+awAH/sgBAHMAB/80cwAH/x4HAAf/BwIDxj0gBAAE3BQDAAP27SAEAARzAAf/VgMAB/9DAgPF/gdgBAAEnwACDqgDAAP6QAMAA/fHAAf/AwAH/6ABOwAIAiMACAJAAAMAAa/ddA8AA/TsBYAPAAPyXATHAAgCSYAPAAPyXARzAAgCZgcACAJPAgPGPgY0BAAGUAMAA/b5OwAIAp8ACALIAAMAAi85gA8AA/JcBHMACALSUgcYAAAAAwAD8uk7AAgDAAAAAnKFbAE7AAgDOwAIA0AAAYmADwAD8lwGBwAIA0sCA8Y9BRcACAN0AARzAAgDmhsACAOTAgPK4YwEAARbAAgDtgMACAOjAgPF/YcAA/oIAwAD9xQGOwAIA9cCA8rgcwAIA9obAAgD1wIDyuGQBAAGUAMAA/b1BPgM9jcACAQLAgPKsHMACAQ6AwAIBCcCA8X+EEAEAAYbAAgEZwIDyuADAAP6MScACASMiHMACASyFwAIBJ8CA8qxIAQABasACAS9gA8AA/JfAAEZnAMAA/fEBHMACAT2FwAIBOMCA8qxIAQABasACAUBgA8AA/JeURADAAP3xQsACAUsAP0nAAgFYHMACAWGFwAIBXMCA8qxIAQABasACAWRgA8AA/JfAAF9PAMAA/fE+AknAAgF1HMACAYSEwAIBecCA8oZjAQABkwDAAP3FPgI9jMACAZXAgPKGhsACAaLAgPK4QsACAa8BPz0wwAIByx/AAgHRwAD8cgMAAyfAAIvPgMACAfbAgPF/hsACAfzAgPK4AD9JwAICEiIcwAICIYTAAgIWwIDyhmMBAAGTAMAA/cUAHMACAiqGwAICKMCA8riAlwEAAYHAAgIswIDxjwDAAP3HPgE9MMACAqAfwAICpsAA/HIDAAMnwACLz4DAAgLLwIDxf4bAAgLRwIDyuAA/QUPAAgLfIRzAAgLrhcACAubAgPKsSAEAAWrAAgLuYAPAAPyXwABGZwDAAP3xPgU9HMACAzCDwAIDKMCA8kRWAQABhsACAzTAgPK4AMAA/Uw9jsACAz7AgPK4HMACAz+GwAIDPsCA8rhkAQABlADAAP29TsACA03AAgNZAADAAIO7YAPAAPyXARzAAgNblIHGAAAAAMAA/LpBRcACA2UAARzAAgNuhsACA2zAgPK4YwEAARbAAgN1gMACA3DAgPF/YcAA/oIAwAD9xQGOwAIDfcCA8rgcwAIDfobAAgN9wIDyuGQBAAGUAMAA/b0+Aj2NwAIDjMCA8qwcwAIDmIDAAgOTwIDxf4QQAQABhsACA6PAgPK4AMAA/oxJwAIDrxzAAgO4hcACA7PAgPKsSAEAAWrAAgO7YAPAAPyXwACWBgDAAP3xPgFJwAIDzxzAAgPfh8ACA9PAgPUeYwEAAZMAwAD9xT2PwAID5MCA9R6GwAID8sCA8rg/ScACBAQiHMACBA2FwAIECMCA8qxIAQABasACBBBgA8AA/JeURADAAP3xARzAAgQihcACBB3AgPKsSAEAAWrAAgQlYAPAAPyXwABGZwDAAP3xPgFCwAIEOAE/ScACBFccwAIEZ4fAAgRbwID1HoFtAQABkwDAAP3IPgE9HMACBH+DwAIEd8CA8kRWAQABh8ACBIPAgPUeAMAA/Uw+A07AAgTSwAIE4AAAwACL4GADwAD8lwEWwAIE6oPAAgTiwIDyRIHqwAD9IEnAAgT4IiIhHMACBQGFwAIE/MCA8qxIAQABasACBQRgA8AA/JfAAEZnAMAA/fEBIRzAAgUbhsACBRnAgPK4SAEAARzAAgUsFMACBR7AgPbACABkAQABNwcAwAD9vQDAAP27ASEcwAIFXIDAAgVXwIDxf4HYAgACJ8AAdNwcwAIFfxTAAgVxwID2wAgAZAEAAZQAwAD9vQDAAP6QPgE9MMACBZEfwAIFl8AA/HIDAAMnwACL4YDAAgW4wIDxf4bAAgW+wIDyuAA/QsACBdQAPRzAAgX1g8ACBe3AgPJEVgEAAYbAAgX5wIDyuADAAP1MTsACBgbAAgYPAADAAIvaYAPAAPrRARbAAgYgFsACBhmDwAIGEcCA8kRhwAD9a75twAD8zEnAAgYrh8ACBi/AgPfZPgE9iMACBkHAgPF/HMACBk9qwAIGSGADwADHKcABd12WhgMAA4DAAgZZwIDxfxzAAgZhhsACBl/AgPK4ZAEAAZQAwAD9vRbAAgZrgMACBmbAgPF/YcAA/oIAwADHMj4CTsACB0rAAgdPAAASYAPAAP5+AR7AAgdWwAD/kwUABIDAAgdhwIDxfxzAAgdphsACB2fAgPK4ZAEAAZQAwAD9vRbAAgdzgMACB27AgPF/YcAA/oJqwAIHe10DwAD9OwFgA8AA/JfAAeQuAcAAi4ApScACB7AhHMACB7kUwAIHtMCA+HsIAEgBAAErAMAA/o0+AT2IwAIHzMCA8X8cwAIH2IDAAgfTwIDxf6AMAwADHMACB+eGwAIH5cCA8rhkAQABlADAAP29FsACB/GAwAIH7MCA8X9hwAD+ghTAAgf5wID4ewgAAMAA/qA/SsACCBIBH8ACCCHAAP/UAwADgMACCCPAgPF/g8ACCCnAgPJEgsACCDLAgPGeAAbAAP/Ggu3AAgjcwAII6MACDFcAAcAAi+LAAPY6AAAAAQPAAgj3wAIMVwAAAAMDA8ACCQkAAADAAIu1XQPAAP07AWADwAD8lwDAAgkjAAAAhDldA8AA/TsBYAPAAPyXAMACCTUAAACCj2ADwAD+6AAAXAE+A07AAgm5wAIJwAAAwABvDmADwAD8lwGTRcACCckBwAIJ0sACCdQAAGJgA8AA/JcBkwEcwAIJ24TAAgnZwID6JGMBAAEWwAIJ44HAAgndwID522HAAP1rAMAA/cUBjMACCevAgPokHMACCeyEwAIJ68CA+iRkAQABlADAAP29PgNOwAIJ/MACCgEAAIcBYAPAAPyXARzAAgoIgcACCgPAgPnbSwEAAYTAAgoJwID6JADAAP1KPYvAAgoTwID6CBzAAgoag8ACChPAgPoIgQYBAAGFwAIKHcCA+ocAwAD8sEnAAgopIhzAAgoyhcACCi3AgPqHYwEAATeAgADAAP3FACEcwAIKeRzAAgphHMACClWAwAIKR8CA+cJLAQABHMACCluFwAIKVsCA+oeDwQEAAZcAwAD8tADAAP1Kg3wBAAEcwAIKZpSDvwEAARzAAgpvhcACCmrAgPqHg3wBAAE3DwDAAPyvAMAA/LMAwAD8r0gBAAGTAMAA/bs+AT0cwAIKkYLAAgqKwID58oQWAQABhcACCp/AgPqHAMAA/u0+Az0cwAIKxILAAgq9wID58oQWAQABasACCtJgA8AA/JfAAGH2AMAA/u09HMACCuyCwAIK5cCA+fKEFgEAARzAAgsFasACCvpgA8AA/n7AAeRphBABAAEcwAILFYXAAgsQwID6h4PBAQABlwDAAPy0AMAA/owAwAD+7T0cwAILLILAAgslwID58oQWAQABHMACC0VqwAILOmADwAD+fsAB5GmEEAEAARzAAgtVhcACC1DAgPqHg3wBAAE3DwDAAPyvAMAA/owAwAD+7UnAAgtxIRzAAguGHMACC32DwAILdsCA+giDfAEAARzAAgt/N4D/hJIAAAAAwAD8sgDAAPyvSAEAAZMAwAD9uz4BRcACC5QBwAILncACC58AAGJgA8AA/JcBkwEcwAILpoTAAgukwID8tWMBAAEWwAILroHAAguowID522HAAP1rAMAA/cUBjMACC7bAgPy1HMACC7eEwAILtsCA/LVkAQABlADAAP29PgJOwAILycACC84AAIcBYAPAAPyXARzAAgvVgcACC9DAgPnbSwEAAYTAAgvWwID8tQDAAP1KScACC+IiHMACC+uFwAIL5sCA/RhjAQABkwDAAP3FARzAAgv3hcACC/LAgP0YgJcBAAE3gP8AwAD9xz4BPTDAAgwKH8ACDB7AAPvLAgAChcACDCTAgP0YJ8AAi+MAPz8GwAD/yoLtwAIMXMACDGPAAgyyAAAjAAAAAQPAAgxrwAIMsgAAAAAAAABgA8AA/n4BSsACDHcBIxzAAgyNHMACDIkWwAIMeC7AAIvBwAD2OsAA/7dLAQABkwDAAP1KSAEAAWrAAgyQYAPAAPyXgZ4AwAD9uyTAAgyrAifAAIOqFsACDKQutOHAAPY6wAD/thbAAgytLrThwAD2OsAA/7YBYAPAAP5+AACAzPYAgNEgAIDT+wCA1YoAgNwKAIDdqwCA3vkAgOGRAIDiswCA5XAAgOXRAIDmVgCA7D4AgO6aAIDxTwCA+ZIAgP2qAID+UAAAABECwAD/1YLtwAJSx8ACUs3AAo/TA8AAi+QAAAFgAcAA/eQAAWABwAD+/wkEwAD/2ILtwAJS+MACUvwJrm3AAPY6AGADwAD+fgAEwAD/2YLtwAJTCsACUxQJwACL5cAA9joAYAPAAPyXAATAAP/agu3AAlMiwAJTLAnAAIvmwAD2OgBgA8AA/JcABMAA/9uC7cACUzrAAlNECcAAi+fAAPY6AGADwAD8lwAEwAD/3ILtwAJTUsACU1wJwACL6MAA9joAYAPAAPyXAATAAP/dgu3AAlNqwAJTdQnAAIvpwAD2OgBgA8AA/JcABMAA/96C7cACU4PAAlORCcAAi+rAAPY6AGADwAD8lwAEwAD/34LtwAJUOcACVEUYwACL68AA9joAYAPAAP5+AATAAP/ggu3AAlRNwAJUWxjAAIsswAD2OgBgA8AA/JcBKwEFwAEAD4LtwAJUYMACVGDAAlUkAAAAA8ACVGrAAlUkAAAACAgIwAJUdwAABK5tYAPAAP5+AMACVIgAAATAAIvlYAPAAPyXAMACVJ8AAATAAIvmYAPAAPyXAMACVLYAAATAAIvnYAPAAPyXAMACVM0AAATAAIvoYAPAAPyXAMACVOQAAATAAIvpYAPAAPyXAMACVPwAAATAAIvqYAPAAPyXAMACVRcAAATAAIvrYAPAAP5+AABgA8AA/9UBPwkIAcAA/9iAAMCBAAwIAcAA/9mBAMCBABwIAcAA/9qCAMCBAC4IAcAA/9uDAMCBAEAIAcAA/9yEAMCBAFIIAcAA/92FAMCBAGQIAcAA/96GAMCBAHYIAcAA/9+HAMCBAIgJAcACVGDAAP36AAAAACkGwAD/4oLtwAJVKcACVTLAAlVNAQCp7AAAAAEDwAJVPMACVU0AAAAAAAAAYAPAAPrRAUrAAlU/ARzAAlVKFsACVT8uwACL5cAA9jrAAP/ZgJcBAAGTAMAA/ccGwAD/44LtwAJVUcACVVrAAlV4AQCcswAAAAEDwAJVZ8ACVXgAAAAAAAAAYAPAAPrRAUrAAlVqARzAAlV1FsACVWouwACL5sAA9jrAAP/agJcBAAGTAMAA/ccGwAD/5ILtwAJVfMACVYXAAlWvAQDAAItLAAAAAQPAAlWRwAJVrwAAAAAAAABgA8AA+tEBSsACVZQBHMACVZ8WwAJVlC7AAIvmwAD2OsAA/9qAlwEAARzAAlWsFsACVaEuwACL5cAA9jrAAP/ZZAEAAZcAwAD9vQDAAP3HBsAA/+WC7cACVbPAAlW8wAJV9AEAwACK9gAAAAEDwAJVxMACVfQAAAAAAAAAYAPAAPrRAUrAAlXHASIcwAJV0hbAAlXHLsAAi+bAAPY6wAD/2oCXAQABkwDAAP3HABzAAlXoHMACVeQWwAJV2S7AAIvnwAD2OsAA/9tkAQABlADAAP29YwEAARbAAlXqLsAAi+jAAPY6wAD/3ADAAP3FBsAA/+aC7cACVfjAAlYBwAJWKQEAnLEAAAABA8ACVgrAAlYpAAAAAAAAAGADwAD60QFKwAJWDQEcwAJWGRbAAlYNLsAAi+nAAPY6wAD/3WMBAAEWwAJWGy7AAIvqwAD2OsAA/94AwAD9xQbAAP/ngu3AAlYtwAJWNsACVmEBAJyyAAAAAQPAAlZCwAJWYQAAAAAAAABgA8AA+tEBSsACVkUBHMACVlQWwAJWRS7AAIvqwAD2OsAA/95jAQABFsACVlsWwAJWVi6ubcAA9jrAAP/YYcAA/oIAwAD9xQbAAP/pgu3AAlZmwAJWb8ACVqQBAMAAi+zAAPY6AAAAAQPAAlZ3wAJWpAAAAAAAAABgA8AA+tEBSsACVnoBIhzAAlaFFsACVnouwACL5cAA9jrAAP/ZSAEAAZcAwAD9uwAcwAJWkhbAAlaNLq5twAD2OsAA/9iB2AEAASeBvQDAAP6QBsAA/+qC7cACVqjAAlaxwAJW5gEAwACL7cAA9joAAAABA8ACVrnAAlbmAAAAAAAAAGADwAD60QFKwAJWvAEiHMACVscWwAJWvC7AAIvlwAD2OsAA/9lIAQABlwDAAP27ABzAAlbUFsACVs8urm3AAPY6wAD/2IHYAQABJ4NEAMAA/pAGwAD/64LtwAJW6sACVvPAAlcqAQDAAIvuwAD2OgAAAAEDwAJW/MACVyoAAAAAAAAAYAPAAPrRAUrAAlb/ASIcwAJXChbAAlb/LsAAi+XAAPY6wAD/2UgBAAE3BQDAAP27ABzAAlcXFsACVxIurm3AAPY6wAD/2IHYAQABJ4NFAMAA/pAGwAD/7ILtwAJXLsACVzfAAldyAQDAAIvvwAD2OgAAAAEDwAJXQsACV3IAAAAAAAAAYAPAAPrRAUrAAldFASIcwAJXUBbAAldFLsAAi+XAAPY6wAD/2UgBAAE3BwDAAP27ABzAAlddFsACV1gurm3AAPY6wAD/2IHYAQABJ4HbAMAA/pAGwAEAAILtwAJXucACV77AAlgWAADAAIvwwAD2OgAAAAEDwAJXx8ACWBYAAAABAQHAAlfPAAAAgbxgA8AA/n4AAGADwAD60QFKwAJX4AEiHMACV+sWwAJX4C7AAIvlwAD2OsAA/9lIAQABFsACV/WAwAJX7sCBBfxhwAD+ggDAAP27ABzAAlgEFsACV/8urm3AAPY6wAD/2IHYAQABgMACWA/AgQX8AMAA/pAGwAD/7YLtwAJYG8ACWCTAAlhXAQDAAIr3AAAAAQPAAlg0wAJYVwAAAAAAAABgA8AA+tEBSsACWDcBHMACWDwWwAJYNy6ubcAA9jrAAP/YgdgCAAInUBbAAlhMLsAAi+jAAPY6wAD/3ADAAP6QBsAA/+6C7cACWFvAAlhkwAJYjQEAmXQAAAABA8ACWHHAAliNAAAAAAAAAGADwAD60QFKwAJYdAEcwAJYfxbAAlh0LsAAi+jAAPY6wAD/3EgBAAEWwAJYgi7AAIvpwAD2OsAA/90AwAD9uwbAAP/vgu3AAliSwAJYm8ACWMIBAINBAAAAAQPAAlimwAJYwgAAAAAAAABgA8AA+tEBSsACWKkBIhbAAlipLqnswAD/4gAhFsACWLcunLLAAP/nBsABAAWC7cACWMfAAljMwAJZigAAgdoAAAABA8ACWNTAAlmKAAAAAQEBwAJY3AAAAIG8YAPAAP5+AABgA8AA+tEBPgNJwAJY6iIcwAJY9YDAAljuwIEHy0gBAAErAMAA/o0BFsACWQeAwAJZAMCBB8uBVcAA/oRKwAJZEAEcwAJZIhbAAlkXLsAAi+XAAPY6wAD/2WMBAAGTAMAA/cU/ScACWSshHMACWT0WwAJZNoDAAlkvwIEHy2HAAP6CSAEAARbAAllALsAAi+XAAPY6wAD/2QDAAP27SsACWUwBKj9KwAJZXgEewAJZasAA/3oCAAKAwAJZecCBB8sWwAJZgS6ubcAA9jrAAP/YAAbAAP/wgu3AAlmPwAJZmsACWzkBAIG8AAAAAQPAAlmhwAJbOQAAAAAAAABgA8AA/n4BPgRJwAJZpxzAAlm2FsACWasuwACL5cAA9jrAAP/ZgWsBAAGTAMAA/cZKwAJZvAEnAD9JwAJZyyEcwAJZ3BbAAlnPLsAAi+vAAPY6wAD/30gBAAErAMAA/o1KwAJZ5QEWwAJZ7C7AAIvrwAD2OsAA/98/ScACWf4WwAJaAi7AAIvtwAD2OsAA/+o+AT0XwAJaEy7AAIvrwAD2OieDRMAA/99JwAJaNRbAAlo5LsAAi+7AAPY6wAD/6z4BPRfAAlpLLsAAi+vAAPY6J4NFwAD/30nAAlpuFsACWnIuwACL7MAA9jrAAP/pPgE9F8ACWoMuwACL68AA9jongb3AAP/fScACWqUWwAJaqS7AAIvvwAD2OsAA/+w+AT0XwAJavS7AAIvrwAD2OieB28AA/98+AT0XwAJa6i7AAIvrwAD2OhzAAlr+FsACWvkurm3AAPY6wAD/2IC+AgACkxbAAlsLLsAAi+XAAPY6wAD/2QDAAP6UwAD/30rAAlsiARbAAlspLsAAi+vAAPY6wAD/3wbAAP/xgu3AAls+wAJbScACW5wBAMAAiu8AAAABA8ACW1PAAlucAAAAAAAAAGADwAD+fgFKwAJbXAEjHMACW2cWwAJbXC7AAIvmwAD2OsAA/9qAlwEAAZMAwAD9xxzAAltyFsACW20urm3AAPY6wAD/2IC+AgACHMACW4cWwAJbfC7AAIvlwAD2OsAA/9lkAQABlgDAAP29FsACW4wuwACL6MAA9jrAAP/cAMAA/pQnAAFgA8AA/n4GwAD/8oLtwAJboMACW6vAAlwWAQCWhwAAAAEDwAJbtMACXBYAAAAAAAAAYAPAAP5+AUrAAlu3ASMcwAJbwxbAAlu4LsAAi+bAAPY6wAD/2oCXAQABHMACW9AWwAJbxS7AAIvlwAD2OsAA/9lkAQABlgDAAP29AMAA/cccwAJb4hbAAlvdLq5twAD2OsAA/9iAvgIAAhzAAlv3FsACW+wuwACL5cAA9jrAAP/ZZAEAAZYAwAD9vRzAAlwHFsACW/wuwACL5sAA9jrAAP/agY0BAAGUAMAA/b4AwAD+lCcAAWADwAD+fgbAAP/zgu3AAlwawAJcJcACXG8BAJaIAAAAAQPAAlwqwAJcbwAAAAAAAABgA8AA/n4BSsACXDMBIxzAAlw+FsACXDMuwACL5sAA9jrAAP/agJcBAAGTAMAA/cccwAJcSRbAAlxELq5twAD2OsAA/9iAvgIAAhbAAlxTLsAAi+bAAPY6wAD/2hbAAlxfLsAAi+fAAPY6wAD/2wDAAP6UJwABYAPAAP5+BsAA//SC7cACXHPAAlx7wAJdGwEAlokAAAABA8ACXIDAAl0bAAAAAAAAAGADwAD8lwE+BEnAAlyGFsACXIouwACK9sAA/+VKwAJckwEewAJcnsAA/MYBAAEcwAJcqRbAAlykLq5twAD2OsAA/9iAvgIAAhzAAly+FsACXLMuwACL58AA9jrAAP/bZAEAAZQAwAD9vRbAAlzDLsAAi+jAAPY6wAD/3ADAAP6UAD9JwAJc1RbAAlzZLsAAi+3AAPY6wAD/6krAAlziATdQP0nAAlzxFsACXPUuwACL7sAA9jrAAP/rSsACXP8BN4G7P0rAAl0PAZMGwAD/9YLtwAJdIMACXSvAAl1aAQBOAAAAAQPAAl0wwAJdWgAAAAAAAABgA8AA/n4BSsACXTMBHMACXTgWwAJdMy6ubcAA9jrAAP/YgL4CAAIWwAJdQi7AAIvowAD2OsAA/9wWwAJdTi7AAIvpwAD2OsAA/90AwAD+lAbAAP/2gu3AAl1ewAJdacACXdMBAJaKAAAAAQPAAl1vwAJd0wAAAAAAAABgA8AA/n4BSsACXXIBIxzAAl1/FsACXXMuwACL6cAA9jrAAP/dYwEAARbAAl2BLsAAi+rAAPY6wAD/3gDAAP3FHMACXZ4WwAJdmS6ubcAA9jrAAP/YgL4CAAIcwAJdtBbAAl2oLsAAi+nAAPY6wAD/3WQBAAGUAMAA/b0WwAJduS7AAIvqwAD2OsAA/94AwAD+lCcAAWADwAD+fgbAAP/3gu3AAl3XwAJd4sACXjwBAJaLAAAAAQPAAl3rwAJePAAAAAAAAABgA8AA/n4BSsACXfQBIxzAAl4EFsACXfUuwACL6sAA9jrAAP/eYwEAARbAAl4LFsACXgYurm3AAPY6wAD/2GHAAP6CAMAA/cUcwAJeGhbAAl4VLq5twAD2OsAA/9iAvgEAARzAAl4zFsACXiQuwACL6sAA9jrAAP/eZAEAAZQAwAD9vQDAAP6UJwABYAPAAP5+BsAA//iC7cACXkHAAl5MwAJg/AEAno4AAAABA8ACXlPAAmD8AAAAAAAAAGADwAD+fgE+Bk7AAl6SwAJemQAAwACL8WADwAD60QEWwAJemy7AAIvtwAD2OsAA/+pJwAJeqBzAAl63FsACXqwuwACL5cAA9jrAAP/ZYwEAAZMAwAD9xT4BPTDAAl7EH8ACXsrAAPw3AQABJMACXwACJ8AAi6IuAD9JwAJfDSIhgMACXxLAgQ/XACEWwAJfHS7AAIvuwAD2OsAA/+s+AT0wwAJfLx/AAl81wAD8NwEAASTAAl+HAifAAIvyLgA/ScACX5QcwAJfoxbAAl+YLsAAi+bAAPY6wAD/2kgBAAEWwAJfpi7AAIvnwAD2OsAA/9sAwAD9uz4BPTDAAl+6H8ACX8DAAPw3AQABJMACYA8EJ5NXFsACX9ougbzAAP/wJ8AAi6QuAD9JwAJgHBzAAmArFsACYCAuwACL5sAA9jrAAP/aSAEAARzAAmA5FsACYC4uwACL5cAA9jrAAP/ZZAEAAZYAwAD9vQDAAP27PgFKwAJgRgEcwAJgUhbAAmBNLq5twAD2OsAA/9iAvgIAApMWwAJgXy7AAIvowAD2OsAA/9wAwAD+lD9KwAJgnwEcwAJgyBzAAmCrFsACYKYurm3AAPY6wAD/2IC+AgACkxzAAmDDFsACYLguwACL5cAA9jrAAP/ZZAEAAZYAwAD9vQDAAP6UZAEAARzAAmDXFsACYNIurm3AAPY6wAD/2IC+AgACFsACYOEuwACL5sAA9jrAAP/aFsACYO0uwACL6MAA9jrAAP/cAMAA/pQAwAD+kwbAAP/5gu3AAmEBwAJhEsACYucBAIMdAAAAAQPAAmEfwAJi5wAAAAAAAABdA8AA/TsBYAPAAP5+AT4ITsACYSnAAmEvAABqYAPAAPyXARbAAmExLsAAi+jAAPY6wAD/3E7AAmFFwAJhSQAAgpBgA8AA/JcBFsACYUsuwACL6cAA9jrAAP/dScACYVwcwAJhZRbAAmFgLq5twAD2OsAA/9iB2AIAAidQgMACYXXAgRJJAMAA/pA9iMACYX3AgRJJHMACYYKAwAJhfcCBEklkAQABlADAAP29P0nAAmGKHMACYZSAwAJhjsCBEklIAQABgcACYZfAgRJuAMAA/btKwAJhnAFqwAJho10DwAD9OwFgA8AA/n6DOT9OwAJhxsACYcwAAISGXQPAAP07AWADwAD+fgExwAJhzmADwAD+fgBFwAJh1gHAAmHfwAJh4QAAYmADwAD8lwGAwAJh48CBEkkBHMACYeyDwAJh6sCBE1JjAQABgcACYe7AgRJuAMAA/cUBi8ACYfPAgRNSHMACYfSDwAJh88CBE1JkAQABlADAAP29PgJOwAJiBMACYgkAAJyhYAPAAPyXARzAAmIQFsACYgsurm3AAPY6wAD/2IQQAQABg8ACYhvAgRNSAMAA/oxJwAJiJRzAAmIuhMACYinAgROzSAEAAWrAAmIxYAPAAPyXwABfTwDAAP27PgI9HMACYkmCwAJiQ8CBEyZWAQABHMACYlIWwAJiTS6ubcAA9jrAAP/YgL4CAAKAwAJiXMCBEkmDwAJiY8CBE1IAwAD+lADAAP1MPYjAAmJwwIESSRzAAmJ6g8ACYnjAgRNSZAEAAZQAwAD9vT89HMACYpeCwAJikcCBEyZWAQABHMACYqAWwAJimy6ubcAA9jrAAP/YgL4CAAKAwAJiqsCBEkmBwAJiscCBEm4AwAD+lADAAP1MSsACYrwBHsACYrzAAP1EAQFgA8AA/n4BgsACYt3AgRMmAAbAAP/6gu3AAmLswAJjBMACY5kBAMAAfOwAAAABA8ACYxTAAmOZAAAAAAAAAF0DwAD9bQJgA8AA/n5gA8AA/n4BPgJJwAJjGiEWwAJjHy6cscAA/+ZKwAJjKQFqwAJjMF0DwAD9bQJgA8AA/n5gA8AA/n6CaT9KwAJjTgEfwAJjVcAAwvkBAmADwAD+fmADwAD+fgEewAJjfcAA/zUBAAEWwAJjji6WisAA//YAAAbAAP/7gu3AAmOewAJjvMACZSsBAMAAivUAAAABA8ACY8/AAmUrAAAAAAAAAF0DwAD9bQJgA8AA/n5dA8AA/TsBYAPAAP5+AT4EScACY9UhFsACY9ounLHAAP/mSsACY+QBasACY+tdA8AA/W0CYAPAAP5+XQPAAP07AWADwAD+fsAB5M8/TsACZBPAAmQnAADAAItnXQPAAP1tAltbAR7AAmQuwAD/oAEAARbAAmRDLpaKwAD/9gBGwAJkT8ACZHnAAmRYAAAAg9ZbABbAAmRzgMACZF/AgRYng2jAAP2PPgE9HMACZJSAwAJkgcCBFieAvwIAAoHAAmSVwIEWYR7AAmSawAD9RAEBYAPAAP5+ASbAAmTTARzAAmTTgMACZMDAgRYnSwEAAYHAAmTUwIEWYQDAAP2BXQPAAPz5AVsAAMAA/YJKwAJk5QEewAJk5cAA/XcBAmADwAD+fl0DwAD9OwFgA8AA/n4BgMACZRPAgRYnAAbAAQABgu3AAmUwwAJlNcACZd8AAMAAi/PAAPY6AAAAAQPAAmU8wAJl3wAAAAEBAcACZUQAAACWiWADwAD+fgAAYAPAAPrRAT4CTsACZVTAAmVjAADAAIv0YAPAAPyXARzAAmVwFsACZWUuwACL58AA9jrAAP/bZAEAAZQAwAD9vUrAAmV5ASIcwAJlnRzAAmWPgcACZYDAgRdfZAEAARbAAmWWgMACZZHAgRdEYcAA/oIAwAD9vUgBAAEWwAJloC7AAIvowAD2OsAA/9wAwAD9uwAcwAJluxbAAmW2Lq5twAD2OsAA/9iB2AIAAoDAAmXGwIEXRIHAAmXMwIEXXwDAAP6QBsABAAaC7cACZeTAAmXowAJl/wAAnLQAAAABA8ACZfXAAmX/AAAAAAAAAGADwAD+/wFKwAJl+wEuBsABAAeC7cACZgTAAmYIwAJm3QAAnqwAAAABA8ACZhbAAmbdAAAAAAAAAGADwAD+/wE+AknAAmYfIRbAAmYkLpyywAD/50rAAmYxAS4/SsACZkIBH8ACZknAAQAPCAAIHMACZlkWwAJmVC6ubcAA9jrAAP/YgL4CAAKTFsACZmYuwACL6sAA9jrAAP/eAMAA/pQWwAJmdy7AAIvlwAD2OsAA/9kWwAJmgy7AAIvmwAD2OsAA/9oWwAJmly7AAIvnwAD2OsAA/9sWwAJmoy7AAIvowAD2OsAA/9wWwAJmry7AAIvpwAD2OsAA/90WwAJmvC7AAIvqwAD2OsAA/94WwAJmzC7AAIvrwAD2OsAA/98ABsABAAiC7cACZuLAAmbmwAJvfwAAiGYAAAABA8ACZu3AAm9/AAAACQAACcACZv0AAACBvGADwAD+fgFqAGADwAD9oXnAAmcSAAAAlodgA8AA/n4BagBgA8AA/aF5wAJnKQAAAJaIYAPAAP5+AWoAYAPAAP2hecACZzkAAACWiWADwAD8lwFqAGADwAD9oXnAAmdMAAAATmADwAD+fgFqAGADwAD9oXnAAmdpAAAAgx1dA8AA/PkBYAPAAP5+AWoAYAPAAP2hecACZ4QAAACWimADwAD+fgFqAGADwAD9oXnAAmfDAAAAwAB87F0DwAD9bQJgA8AA/n5bAWoAYAPAAP2hecACZ+EAAACWi2ADwAD+fgFqAGADwAD9oXlgA8AA/v8BPgtOwAJn98ACaAUAAMAAi2VgA8AA+tEBKknAAmgSIRzAAmgdgMACaBbAgRmNSAEAASsAwAD+jT4CPYjAAmguwIEZjR7AAmg8wAD/iQMAA4DAAmhIwIEZjZMWwAJoWoDAAmhTwIEZjWHAAP6CAD0VwAJoacCBGogJIRzAAmh6LsAAi/DAAPY6AQABgMACaITAgRmNAMABAAA+AT2IwAJooMCBGY0WwAJori6BvMAA//BOwAJoxcACaMwAAMAAgqlgA8AA+tEBHMACaNaAwAJoz8CBGY1IAQABJ4G9AMAA/o1JwAJo5iEcwAJo84HAAmjqwIEZpkgBAAErAMAA/o0+AT2JwAJpBMCBGaYewAJpFMAA/4sDAAOBwAJpIsCBGaaTFsACaTiBwAJpL8CBGaZhwAD+ggBJwAJpTBzAAmlbFsACaVAuwACL5sAA9jrAAP/agJcBAAGTAMAA/cc+AT2JwAJpaMCBGaYcwAJpeBbAAmlzLq5twAD2OsAA/9iAvgIAAhzAAmmNFsACaYIuwACL5cAA9jrAAP/ZZAEAAZYAwAD9vRbAAmmSLsAAi+bAAPY6wAD/2gDAAP6UPgE9icACabLAgRmmJwBJwAJpyyEcwAJp1IPAAmnPwIEZ2EgBAAErAMAA/bs+AT2LwAJp5cCBGdgewAJp8cAA/4ICAAKDwAJp+8CBGdiAwAJqAcCBGY0APgI9i8ACah3AgRnYIxbAAmopLsAAivbAAP/lFsACajgulonAAP/0KwFgA8AA/JdJwAJqSxTAAmpPwIEaiAkAPgE9i8ACapjAgRnYHsACaqTAAP+CAgACg8ACaq7AgRnYgMACarTAgRmNAD9JwAJqzyEcwAJq2ILAAmrTwIEZv0gBAAErAMAA/o0+AT2KwAJq6cCBGb8ewAJq9cAA/4MEAASCwAJq/8CBGb+TFsACaw2CwAJrCMCBGb9hwAD+gioAScACaygcwAJrNxbAAmssLsAAi+bAAPY6wAD/2oCXAQABkwDAAP3HPgE9isACa0TAgRm/HMACa1AWwAJrSy6ubcAA9jrAAP/YgL4CAAIWwAJrWi7AAIvmwAD2OsAA/9oWwAJrZi7AAIvnwAD2OsAA/9sAwAD+lEnAAmt+IiIWwAJri4HAAmuCwIEZpoO3wAD+hQEhHMACa56DwAJrmcCBGdhIAQABKwDAAP27ARTAAmupwIEbNgoAPgE9isACa7nAgRm/JwA/TsACa9TAAmvhAACcs2ADwAD60QEhHMACa+iCwAJr48CBGb9IAQABKwDAAP6NScACa/UiIRzAAmv+hMACa/nAgRnxSAEAASsAwAD+jQEhHMACbBaFwAJsCcCBGglIAQABKwDAAP3xPgE9jMACbCfAgRnxHsACbDPAAP+MBgAGhMACbD3AgRnxkx7AAmxGwAD2dwEAAYTAAmxawIEZ8QCFwAJsYcCBGgmAwAJsecCBGY0UwAJsgcCBHhwLAAA+Aj2MwAJso8CBGfEcwAJsrxbAAmyqLq5twAD2OsAA/9iAvgIAAhbAAmy5LsAAi+jAAPY6wAD/3BbAAmzFLsAAi+nAAPY6wAD/3QDAAP6UScACbNkiIhTAAmzewIEbNgoAASIUwAJs6cCBHhwLAAAhFsACbP+EwAJs+sCBGfGBVcAA/oQAIRzAAm0chMACbRfAgRnxgdgBAAEnUADAAP6QPgE9jMACbTfAgRnxHMACbUInUGQBAAGEwAJtRMCBGfEAwAD+kz9JwAJtXSIhHMACbWeGwAJtYcCBGilIAQABKwDAAP6NASEcwAJtgofAAm1ywIEaQkgBAAErAMAA/fE+AT2OwAJtk8CBGikewAJtoMAA/44EAASGwAJttsCBGimTHsACbcDAAPZ3AQABhsACbdTAgRopAIfAAm3cwIEaQgBJwAJt+RzAAm4JFsACbf0uwACL6cAA9jrAAP/dYwEAARbAAm4LLsAAi+rAAPY6wAD/3gDAAP3FPgE9jsACbiPAgRopHMACbjAWwAJuKy6ubcAA9jrAAP/YgL4CAAIcwAJuRhbAAm46LsAAi+nAAPY6wAD/3WQBAAGUAMAA/b0WwAJuSy7AAIvqwAD2OsAA/94AwAD+lD9JwAJuZyEcwAJudBTAAm5rwIEaZQgASAEAASsAwAD+jT4BPRXAAm6FwIEaZQgewAJulcAA/48DAAMUwAJuo8CBGmUIAJMWwAJuuRTAAm6wwIEaZQgAYcAA/oIAScACbs0cwAJu4BbAAm7RLsAAi+rAAPY6wAD/3mMBAAEWwAJu5xbAAm7iLq5twAD2OsAA/9hhwAD+ggDAAP3FPgE9FcACbvfAgRplCBzAAm8HFsACbwIurm3AAPY6wAD/2IC+AQABHMACbyAWwAJvES7AAIvqwAD2OsAA/95kAQABlADAAP29AMAA/pQ/SsACbzEBH8ACbz3AAP+xBwAHgMACb0fAgRmNgcACb0/AgRmmgsACb1nAgRm/g8ACb1/AgRnYhMACb2XAgRnxhsACb2vAgRopFMACb3LAgRplCAAABsABAAmC7cACb4TAAm+IwAJv0wAAbAAAAAEDwAJvj8ACb9MAAAABAQHAAm+XAAAAhGNgA8AA/n4AAGADwAD+/wE+AUrAAm+oARzAAm+vLoNCAQABHsACb77AAP8tAQABgMACb8TAgSITAADAAQAKBsABAAqC7cACb9jAAm/cwAJwgAAAg0IAAAABA8ACb+bAAnCAAAAAAQEBwAJv6wAAAIRjYAPAAP7/AABgA8AA/v8BPgJJwAJv/CXAAnAKgMACcADAgSKDYAPAAP/VPgFKwAJwIQEcwAJwKC7AAIv1wAD2OgIAAi4UwAJwO8CBIoMAAWADwAD/1QDAAQACP0rAAnBRARzAAnBnHMACcFguwACL9sAA9joAAAAAwAEABINCAQABgMACcHLAgSKDAMAA/ysGwAEAAoLtwAJxwcACccXAAooxAADAAIv1wAD2OgAAAAEDwAJx0cACijEAAAACAgLAAnHdAAAAloNgA8AA/9UAwAJx7gAAAJfpYAPAAP/VAABgA8AA/v8BPhRJwAJx+RbAAnIBgcACcf3AgSNbqezAAP/iSsACcgwBgcACchPAgSNbP0nAAnIcFsACciSBwAJyIMCBI1ucs8AA/+M+BEnAAnI6IRbAAnJEgMACcj/AgSNLqezAAP/iSsACck8BgcACclbAgSNbP07AAnJmwAJybwAAwACK/2ADwAD60QEpScACcn0WwAJyhoDAAnKBwIEjS8AAi+zAAPY6wAD/6T4BPYrAAnKZwIEj5CEWwAJyqYHAAnKlwIEjW5l0wAD/7knAAnLEFsACcs2AwAJyyMCBI0vAAIvtwAD2OsAA/+o+AT2KwAJy4MCBI+QhHMACcvCBwAJy7MCBI1vAAIvzwAD2OgEAASfAAIgaAMABAAFJwAJzDBbAAnMVgMACcxDAgSNLwACL7sAA9jrAAP/rPgE9isACcynAgSPkIRzAAnM5gcACczXAgSNbwACL88AA9joBAAEnwACLBADAAQABP0nAAnNXgsACc1vAgSPkPgNOwAJzc8ACc3kAAJtiYAPAAPyXARzAAnOLFsACc4CAwAJze8CBI0vAAIvlwAD2OsAA/9lkAQABlADAAP29TsACc5zAAnOjAADAAIv3YAPAAP5+ARzAAnPRHMACc68WwAJzqoDAAnOlwIEjS65twAD2OsAA/9iAvgIAApMcwAJzzBbAAnPBgMACc7zAgSNLwACL5cAA9jrAAP/ZZAEAAZQAwAD9vQDAAP6UZAEAARzAAnPoFsACc+OBwAJz38CBI1uubcAA9jrAAP/YgL4BAAEcwAJ0ARbAAnP2gcACc/LAgSNbwACL5cAA9jrAAP/ZZAEAAZQAwAD9vQDAAP6UAMAA/pNKwAJ0DwEfwAJ0FsABAA8IAAiEwAJ0LsCBJScWwAJ0R4DAAnRCwIEjS8AAi+XAAPY6wAD/2RzAAnRuFsACdGOBwAJ0X8CBI1vAAIvmwAD2OsAA/9pkAQABg8ACdHDAgSTqAMAA/b0cwAJ0khbAAnSHgcACdIPAgSNbwACL58AA9jrAAP/bZAEAAYPAAnSUwIEk6gDAAP29HMACdLYWwAJ0q4HAAnSnwIEjW8AAi+jAAPY6wAD/3GQBAAGDwAJ0uMCBJOoAwAD9vRzAAnTbFsACdM+BwAJ0y8CBI1vAAIvpwAD2OsAA/91kAQABg8ACdN3AgSTqAMAA/b0cwAJ1AxbAAnT0gcACdPDAgSNbwACL6sAA9jrAAP/eZAEAAYPAAnUFwIEk6gDAAP29FsACdR2AwAJ1GMCBI0vAAIvrwAD2OsAA/98APgFKwAJ1jwEcwAJ1pRzAAnWWLsAAi/bAAPY6AAAAAMABAASDQgEAAYHAAnWwwIEjWwDAAP8rP0nAAnXIFsACddCBwAJ1zMCBI1uZdMAA/+4+A0nAAnXmFsACde6BwAJ16sCBI1ucscAA/+Y+A07AAnYGwAJ2DAAAm2JgA8AA/JcBHMACdh8WwAJ2E4DAAnYOwIEjS8AAi+nAAPY6wAD/3YGNAQABFsACdiWBwAJ2IcCBI1vAAIvpwAD2OsAA/90AwAD9vk7AAnY+wAJ2RQAAwACL92ADwAD+fgEcwAJ2cBzAAnZRFsACdkyAwAJ2R8CBI0uubcAA9jrAAP/YgL4CAAKTFsACdmOAwAJ2XsCBI0vAAIvpwAD2OsAA/90AwAD+lGQBAAEcwAJ2hxbAAnaCgcACdn7AgSNbrm3AAPY6wAD/2IC+AQABFsACdpWBwAJ2kcCBI1vAAIvpwAD2OsAA/90AwAD+lADAAP6TSsACdqsBH8ACdrLAAQAPCAAIg8ACdsrAgSf1FsACduOAwAJ23sCBI0vAAIvlwAD2OsAA/9kWwAJ3AIDAAnb7wIEjS8AAi+bAAPY6wAD/2hbAAncdgMACdxjAgSNLwACL58AA9jrAAP/bFsACdzqAwAJ3NcCBI0vAAIvowAD2OsAA/9wcwAJ3YhbAAndWgcACd1LAgSNbwACL6cAA9jrAAP/dZAEAAYLAAndkwIEnngDAAP29HMACd4oWwAJ3e4HAAnd3wIEjW8AAi+rAAPY6wAD/3mQBAAGCwAJ3jMCBJ54AwAD9vRbAAnekgMACd5/AgSNLwACL68AA9jrAAP/fAD9JwAJ3wRbAAnfJgcACd8XAgSNbnLLAAP/nPgNOwAJ35MACd+oAAJtiYAPAAPyXARzAAngAFsACd/GAwAJ37MCBI0vAAIvqwAD2OsAA/96BjQEAARbAAngGgcACeALAgSNbwACL6sAA9jrAAP/eAMAA/b5OwAJ4IsACeCkAAMAAi/dgA8AA/n4BHMACeFccwAJ4NRbAAngwgMACeCvAgSNLrm3AAPY6wAD/2IC+AgACkxbAAnhHgMACeELAgSNLwACL6sAA9jrAAP/eAMAA/pRkAQABHMACeG4WwAJ4aYHAAnhlwIEjW65twAD2OsAA/9iAvgEAARbAAnh8gcACeHjAgSNbwACL6sAA9jrAAP/eAMAA/pQAwAD+k0rAAniVAR/AAnicwAEADwgACIPAAni0wIEqDxbAAnjNgMACeMjAgSNLwACL5cAA9jrAAP/ZFsACeOqAwAJ45cCBI0vAAIvmwAD2OsAA/9oWwAJ5B4DAAnkCwIEjS8AAi+fAAPY6wAD/2xbAAnkkgMACeR/AgSNLwACL6MAA9jrAAP/cFsACeUGAwAJ5PMCBI0vAAIvpwAD2OsAA/90cwAJ5bRbAAnlegcACeVrAgSNbwACL6sAA9jrAAP/eZAEAAYLAAnlvwIEpuADAAP29FsACeYeAwAJ5gsCBI0vAAIvrwAD2OsAA/98AP0rAAnmkARzAAnmwgMACeavAgSNLnqwAAAAAwAEABz9JwAJ5zBbAAnnUgcACedDAgSNbwACK98AA/+0+A07AAnnxwAJ59wAAm2JgA8AA/JcBHMACegkWwAJ5/oDAAnn5wIEjS8AAi+jAAPY6wAD/3IGNAQABFsACeg+BwAJ6C8CBI1vAAIvowAD2OsAA/9wAwAD9vk7AAnolwAJ6LAAAwACL92ADwAD+fgEcwAJ6VhzAAno4FsACejOAwAJ6LsCBI0uubcAA9jrAAP/YgL4CAAKTFsACekqAwAJ6RcCBI0vAAIvowAD2OsAA/9wAwAD+lGQBAAEcwAJ6axbAAnpmgcACemLAgSNbrm3AAPY6wAD/2IC+AQABFsACenmBwAJ6dcCBI1vAAIvowAD2OsAA/9wAwAD+lADAAP6TSsACeowBH8ACepPAAQAPCAAIg8ACeqnAgSwzFsACesCAwAJ6u8CBI0vAAIvlwAD2OsAA/9kWwAJ624DAAnrWwIEjS8AAi+bAAPY6wAD/2hbAAnr2gMACevHAgSNLwACL58AA9jrAAP/bFsACexGAwAJ7DMCBI0vAAIvowAD2OsAA/9wcwAJ7NxbAAnsrgcACeyfAgSNbwACL6cAA9jrAAP/dZAEAAYLAAns5wIEr3ADAAP29HMACe10WwAJ7ToHAAntKwIEjW8AAi+rAAPY6wAD/3mQBAAGCwAJ7X8CBK9wAwAD9vRbAAnt1gMACe3DAgSNLwACL68AA9jrAAP/fAD9JwAJ7jiIWwAJ7l4DAAnuSwIEjS5l0wAD/7gAWwAJ7rIDAAnunwIEjS5yzwAD/4z4FTsACfD3AAnxGAADAAIuTYAPAAPyXARbAAnxMgcACfEjAgSNbwACL6MAA9jrAAP/cQ8ACfF4cwAJ8bhbAAnxpgcACfGXAgSNbrm3AAPY6wAD/2IHYAgACJ5WygsACfIDAgS4MAMAA/pA+AT2KwAJ8lcCBLgwcwAJ8noLAAnyVwIEuDGQBAAGWAMAA/b1OwAJ8tsACfLwAAJtiYAPAAPyXARzAAnzZHMACfM4WwAJ8w4DAAny+wIEjS8AAi+jAAPY6wAD/3IGNAQABgsACfNDAgS4MAMAA/b5kAQABlADAAP29TsACfOjAAnzvAADAAIv3YAPAAP5+ASQAAxzAAnz+FsACfPmAwAJ89MCBI0uubcAA9jrAAP/YgL4CAAKTFsACfRCAwAJ9C8CBI0vAAIvowAD2OsAA/9wAwAD+lCdQHMACfTUWwAJ9MIHAAn0swIEjW65twAD2OsAA/9iAvgEAAYLAAn0/wIEuDADAAP6USsACfVIBH8ACfVnAAQAPCAAIhMACfW/AgS7tFsACfYaAwAJ9gcCBI0vAAIvlwAD2OsAA/9kWwAJ9oYDAAn2cwIEjS8AAi+bAAPY6wAD/2hbAAn28gMACfbfAgSNLwACL58AA9jrAAP/bFsACfdeAwAJ90sCBI0vAAIvowAD2OsAA/9wcwAJ9/RbAAn3xgcACfe3AgSNbwACL6cAA9jrAAP/dZAEAAYPAAn3/wIEumADAAP29HMACfiMWwAJ+FIHAAn4QwIEjW8AAi+rAAPY6wAD/3mQBAAGDwAJ+JcCBLpgAwAD9vRbAAn47gMACfjbAgSNLwACL68AA9jrAAP/fAD9OwAKAX8ACgGcAAIiTYAPAAP5+ARbAAoBugMACgGnAgSNLrm3AAPY6wAD/2E7AAoB/wAKAhgAAwACL+GADwAD+fgEWwAKAjIHAAoCIwIEjW65twAD2OsAA/9hOwAKAmsACgKQAAMAAi/lgA8AA/JcBFsACgKuAwAKApsCBI0vAAIvowAD2OsAA/9xOwAKAv8ACgMcAAMAAi5RgA8AA/JcBFsACgM6AwAKAycCBI0vAAIvpwAD2OsAA/91DwAKA3xzAAoDugsACgObAgTB7gdgCAAInlbKEwAKBAMCBMNUAwAD+kD2MwAKBDMCBMNUcwAKBFoTAAoEMwIEw1WQBAAGWAMAA/b1OwAKBJMACgS0AAMAAi5NgA8AA/JcBFsACgTOBwAKBL8CBI1vAAIvowAD2OsAA/9xOwAKBR8ACgU4AAMAAi/pgA8AA/JcBFsACgVSBwAKBUMCBI1vAAIvpwAD2OsAA/91OwAKCNcACgj8AAMAAi5JgA8AA/JcBk0PAAoKUIhzAAoKoHMACgqSGwAKCm8CBMYBkAQABlgDAAP29gWsBAAGHwAKCq8CBMbAAwAD9xgAcwAKCvIPAAoK1wIEwp4HYAgACJ5WyhsACgs7AgTGAAMAA/pA+Aj2OwAKC4cCBMYAcwAKC6obAAoLhwIExgGQBAAGWAMAA/b09FcACgvbAgTHgCBzAAoMAFMACgvbAgTHgCABkAQABlADAAP29TsAChBPAAoQaAACfDmADwAD+fgEnAEFDwAKFCxzAAoUahcAChRLAgTEFgJcBAAGEwAKFHMCBMNUAwAD9xz4DPY3AAoUvwIExBRzAAoU2hcAChS/AgTEFgY0BAAGUAMAA/b5OwAKFRMAChUkAAJyhYAPAAPyXARzAAoVTgsAChUvAgTB7hBABAAGFwAKFXsCBMQUAwAD+jEnAAoVuHMAChXcUwAKFcsCBMv0KAEgBAAFqwAKFemADwAD8l8AAX08AwAD9uz4DPRXAAoWMwIEymwknUEnAAoWiHMAChbAUwAKFpsCBMeAIAEgBAAGTAMAA/btCwAKFtgA/PRXAAoXFwIEx4AgcwAKFzhTAAoXFwIEx4AgAgY0BAAGUAMAA/b4/ScACheUiIhzAAoXxhcAChenAgTEFSAEAAYTAAoX0wIEw1QDAAP27ACEWwAKGB4DAAoYCwIEjS6nswAD/4gAhFsAChhqAwAKGFcCBI0vAAIr3wAD/7T4CPRXAAoffwIEymwknAD2OwAKIhMCBMYAcwAKIjYbAAoiEwIExgIGNAQABHMACiJoUwAKIkMCBMeAIAIONAQABlgDAAP2/AMAA/b4/TsACiK7AAoi0AACbYmADwAD8lwEcwAKIyRzAAoi+hcACiLbAgTEFgY0BAAGGwAKIwMCBMYAAwAD9vmQBAAEWwAKI0hTAAojLwIEymwkAYcAA/oIAwAD9vU7AAojiwAKI6QAAwACL92ADwAD+fgEkAAMcwAKI+BbAAojzgMACiO7AgSNLrm3AAPY6wAD/2IC+AgACk4XAAokFwIExBQDAAP6UFMACiQ/AgTKbCQAcwAKJKxbAAokmgcACiSLAgSNbrm3AAPY6wAD/2IC+AQABhsACiTXAgTGAAMAA/pRKwAKJRwEfwAKJTsABAA8IAAgUwAKJYsCBNLULABbAAol3gMACiXLAgSNLwACL5cAA9jrAAP/ZFsACiZCAwAKJi8CBI0vAAIvmwAD2OsAA/9oWwAKJqYDAAomkwIEjS8AAi+fAAPY6wAD/2xbAAonCgMACib3AgSNLwACL6MAA9jrAAP/cHMACieYWwAKJ2oHAAonWwIEjW8AAi+nAAPY6wAD/3WQBAAEUwAKJ6MCBNF0KAADAAP29HMACigoWwAKJ+4HAAon3wIEjW8AAi+rAAPY6wAD/3mQBAAEUwAKKDMCBNF0KAADAAP29FsACiiCAwAKKG8CBI0vAAIvrwAD2OsAA/98ABsABAAuC7cACijbAAoo9wAKMcwAAgb8AAAABA8ACikfAAoxzAAAAAQAAAcACik4AAACB/mADwAD60QFqAGADwAD9oXlgA8AA/n4BPgRJwAKKXiIcwAKKbRbAAopiLsAAi+XAAPY6wAD/2YFtAQABkwDAAP3IACEWwAKKdi7AAIvswAD2OsAA/+k+AT0wwAKKhx/AAoqNwAD8KQEAASTAAorNAyfAAIumFsACisIugbzAAP/wJ8AAi6cAP0nAAoraHMACiuoWwAKK3i7AAIvpwAD2OsAA/91jAQABFsACivEWwAKK7C6ubcAA9jrAAP/YYcAA/oIAwAD9xT4CScACiwEcwAKLERbAAosFLsAAi+nAAPY6wAD/3WMBAAEWwAKLEy7AAIvqwAD2OsAA/94AwAD9xT4BPTDAAostH8ACizPAAPwpAQABJ8AAi6gAPz0wwAKLoB/AAoumwAD8KQEAASfAAIupAD89IxzAAowYgMACjBDAgTZqSAEAASsAwAD98YjAAowQwIE2ahrAAowhwAD/WisBYAPAAPrRSsACjDEBI4DAAow4wIE2ah7AAoxHwAD/nAEAAS4AHMACjGIuwACLqsAA9joAAAAAwAEAAwFgA8AA/n4GwAEAA4LtwAKMeMACjH/AAo19AADAAIuqwAD2OgAAAAEDwAKMisACjX0AAAAAAAAAYAPAAP5+AT4CScACjJMcwAKMohbAAoyXLsAAi+bAAPY6wAD/2mMBAAEWwAKMpC7AAIvnwAD2OsAA/9sAwAD9xT4BPTDAAozjH8ACjOnAAPwpAQABJAACJ8AAi6snwACLrAA/SsACjWkBFsACjXUuTsAA//UGwAD//ILtwAKNgsACjY7AAo3GAQASAAAAAQPAAo2TwAKNxgAAAAAAAABgA8AA/7IBPgJAIRzAAo2nFsACjaAugbzAAP/wSAEAAScSAMAA/o3AAo2gwAKNsABKwAKNtwErBsAA//2C7cACjcvAAo3TwAKN/wEAg8YAAAABA8ACjdzAAo3/AAAAAAAAAGADwAD8lwFKwAKN3wE1AAAAAQBgA8AA/JcBFsACjd8uwACLLMAA9jrAAP/gIxzAAo3ugADAgTlUSAEAASsAwAD9uxfAAo3fLsAAiyzAAPY6FsACjfcWwAKN8i6ubcAA9jrAAP/Yg8bAAP6DwAD/4IAAwIE5VAFgA8AA/JcGwAEADILtwAKOBMACjhLAAo6JAwBIAAAAAQPAAo4UwAKOiQAAAAEBAcACjhwAAACD22ADwAD95AAAYAPAAPrRAT4CScACjikewAKOLcAA9ngCAAIugMACjj3AgTnrAErAAo5FASk/SsACjlYBIiXAAo5jgMACjl3AgTnrYAPAAP7/ABzAAo5yFsACjm0urm3AAPY6wAD/2EgBAAEcwAKOexTAAo51wIE56wABYAPAAP7/IwAAAADAAP8nAMAA/o0GwAEABILtwAKOjsACjpLAAo+zAADAAIv2wAD2OgAAAAEDwAKOnsACj7MAAAAAAAAAYAPAAP7/AT4BSsACjqcBH8ACjrPAAP+xBwAHFsACjssugbzAAP/wFsACjuAulofAAP/yIxbAAo73LpyzwAD/4xbAAo8LLpaIwAD/8ysBYAPAAP5+IxbAAo8lLsAAivbAAP/lFsACjzQulonAAP/0KwFgA8AA/JcWwAKPTi5OwAD/9SMWwAKPYS6cscAA/+YWwAKPcS6WisAA//YrAWADwAD+fiMWwAKPjC6cssAA/+cWwAKPny6Wi8AA//crAWADwAD+fgAGwAEADYLtwAKPuMACj7/AAo/RAAAjAAAAAQPAAo/HwAKP0QAAAAAAAABgA8AA/n4BSsACj80BFsACj80urm3AAPY6wAD/2AAAgQETAIEBbQCBAccAgQJDAIEC4gCBA0wAgQO+AIEEQQCBBMQAgQVIAIEFzACBBncAgQbkAIEHTgCBB6EAgQitAIEKbACBCyQAgQwKAIEMsQCBDaYAgQ4gAIEO5gCBD6IAgRINAIEU8gCBFaAAgRcUAIEYGACBGFEAgRliAIEh6gCBIlkAgSMbAIE2PwCBOBUAgTi6AIE5GwCBOcIAgTqCAIE7eACBO78AAAApAsABABCC7cACkA3AApATwAKQ2QPAAIv7AAABYAHAAP86AAABBMABABOC7cACkDvAApBACbdVwAD2OgBgA8AA/7IAAQXAAQAXgu3AApBFwAKQRcACkLkAAAADwAKQTcACkLkAAAADAwPAApBTAAAEt1VgA8AA/7IAwAKQYQAAAE5gA8AA/n4AwAKQbgAAAJaKYAPAAP5+AABgA8ABABABPwIIAcABABOAAMCBPNQJAMACkIPAAP+xBwAHJxIrKyuBwAKQp8CBPOSCwAKQrcCBPPMrAAEGwAEAFYLtwAKQvsACkMrAApDXAQASAAAAAQPAApDPwAKQ1wAAAAAAAABgA8AA/7IBSsACkNIBFsACkNIut1XAAPY6wAEAEwAAgT1AAIE9hwAAAAEmBMAA9kKCvobehwkEwACL/MAA9joAXQPAAP07AV0DwAD9OwFbAR6G/cAA+DUBAV0DwAD9OwFbAZMABMAA9kOCwYEDgRMGwACL/cAA9joAYAPAAPyXAWqBD2ADwAD8l4QaBMAA9kSCwYEfgTAGwACL/sAA9joAYAPAAPyXAWqBLGADwAD8l8ABhxgEwAD2RYLBgTyBTgbAAIv/wAD2OgBgA8AA/JcBaoFIYAPAAPyXwAGGjgTAAPZGgsGBWoFwBsAAjADAAPY6AGADwAD8lwFqgWhgA8AA/JfAAJtsBMAA9keC7oICgicEwACFesAA9joBaoHZYAPAAPqYwAF/ll4DAAAAAAABVwPAAPY9AGADwAD+/wFqghRhAwBgA8AA/v/AAeTvBMAA9mSCxI0YjT8GoecAYAPAAPqEAWqNJWADwAD6hIX/BMAA9mWCxJIUkioGwAB5YgBgA8AA/eQBapIfYAPAAPqNAgTAAPZmgsSTgpOUBsAAjAEBapNsYAPAAPqEhf9gA8AA/aEBapOQYAPAAP2heQTAAPZngsSct5zHBsAAjAIBapyfYAPAAPqEhf9gA8AA/eQBapy/YAPAAPqVwAHk9ATAAPZIgu2BHIEpBsAAfQ7AAPY6AGADwAD8lwFqgSVgA8AA/JeDSgTAAPZJgu2BNYFEBsAAjAPAAPY6AGADwAD8lwFqgUBgA8AA/JfAAGH2BMAA9kqC7YFQgWEGwACMBMAA9joAYAPAAPyXAWqBXWADwAD8l8AAX+kEwAD2S4LtgW2BeQbAAIwFwAD2OgBgA8AA/JcBaoF1YAPAAPyXwABGmgTAAPZMgu2BhYGQBsAAfRDAAPY6AGADwAD8lwFqgYxgA8AA/Jey2wTAAPZNgu2BnIGpBsAAjAbAAPY6AGADwAD8lwFqgaVgA8AA/JfAAF9PBMAA9k6C7YG1gcIGwAB9EcAA9joAYAPAAPyXAWqBvmADwAD8l5bTBMAA9k+C7YHOgdwGwACMB8AA9joAYAPAAPyXAWqB2GADwAD8l8AAlgYEwAD2UILtgeiB/AbAAIwIwAD2OgBgA8AA/JcBaoH4YAPAAPyXwABfvATAAPZRgu2CCIIcBsAAjAnAAPY6AGADwAD8lwFqghhgA8AA/JfAAJrwBMAA9lKC7YIogjwGwACMCsAA9joAYAPAAPyXAWqCOGADwAD8l8AAmvMEwAD2U4LtgkiCWQbAAIwLwAD2OgBgA8AA/JcBaoJVYAPAAPyXhCUEwAD2VILtgmWCegbAAIwMwAD2OgBgA8AA/JcBaoJ2YAPAAPyXwACa9gTAAPZVgu2ChoKaBsAAjA3AAPY6AGADwAD8lwFqgpZgA8AA/JfAAJsCBMAA9laC7YKmgroGwACMDsAA9joAYAPAAPyXAWqCtmADwAD8l8AAmxEEwAD2V4LtgsaC2gbAAIwPwAD2OgBgA8AA/JcBaoLWYAPAAPyXwACbTQTAAPZYgu2C6oMJBsAAjBDAAPY6AGADwAD+fgFqgvdgA8AA/n7AAeRpBMAA9lmC7cACF1rAAhdtBsAAjBHAAPY6AGADwAD8lwFqwAIXbGADwAD8lxUEwAD2WoLtwAIXwMACF9MGwACMEsAA9joAYAPAAPyXAWrAAhfSYAPAAPyXIQTAAPZbgu3AAhgawAIYLQbAAIwTwAD2OgBgA8AA/JcBasACGCxgA8AA/JdTBMAA9lyC7cACGHbAAhiJBsAAjBTAAPY6AGADwAD8lwFqwAIYiGADwAD8l4FXBMAA9l2C7cACGMvAAhjfBsAAjBXAAPY6AGADwAD8lwFqwAIY3mADwAD8l4I/BMAA9l6C7cACGSTAAhk7BsAAjBbAAPY6AGADwAD8lwFqwAIZOmADwAD8l4LhBMAA9l+C7cACGZHAAhmkBsAAjBfAAPY6AGADwAD8lwFqwAIZo2ADwAD8l4UHBMAA9mCC7cACGc/AAhndBsAAjBjAAPY6AGADwAD8lwFqwAIZ22ADwAD8lwkEwAD2YYLtwAIaRMACGlwGwACMGcAA9joAYAPAAPyXAWrAAhpaYAPAAPyXwACNGATAAPZigu3AAhqRwAIaogbAAIwawAD2OgBgA8AA/JcBasACGqBgA8AA/JfAAHGKBMAA9mOC7cACH+HAAiABBcAAjBvAAPY6AF0DwAD9OwFgA8AA47oBHsACH/LAAPZ0AAAAABEGwAD2aoK3iS6JMolVAAHAAIwcwAD2OgAAAAEDiTaJVQAAAAICAok7AAAAgddgA8AA/JcAiUIAAACCTmADwAD8lwAAYAPAAPyXAUqJSAEjHIlKgIlIwIFEJoCXAQABgYlMwIFENADAAP3HgIlQwIFEJoGJVMCBRDQBYAPAAPyXBsAA9muCt4lXiVuJfgABwACMHcAA9joAAAABA4lfiX4AAAACAgKJZAAAAIHXYAPAAPyXAIlrAAAAgk5gA8AA/JcAAGADwAD8lwFKiXEBIxyJc4CJccCBRKVjAQABgYl1wIFEswDAAP3FgIl5wIFEpYGJfcCBRLMBYAPAAPyXBsAA9myCt4mwibuJ+gABwACMHsAA9joAAAABA4nFifoAAAABAQGJygAAAGFgA8AA/JcAAGADwADj6AFKidUBHonZwADj7AEAARyJ64CJ5MCBRSNkAQABHIn1gInuwIFFI4N8AQABlADAAPyvAMAA/b0ABsAA9m2CvodRh3OMHQABwACMH8AA9joBaodSYAPAAPqYwAGDHwAAAQOHiYwdAAAAAAAAAFsBPgROiIyIqQAAwACMIF0DwAD9OwFdA8AA/TsBWwEeiK/AAPg1AQFdA8AA/TsBWwGTAE6Jl4mrAADAAIwhXQPAAP07AV0DwAD9OwFbARyJxhqJrcAA9kKArQAAAADAAP0PRYnSAYnbid0AAGJgA8AA/JcBkwEcieSCieLAgUYJYwEAARaJ+oGJ5sCBRddhwAD9awDAAP3FAYqKAsCBRgkcigOCigLAgUYJZAEAAZQAwAD9vUE+BU6KEYoYAACDKVsBHIowHIotgYoawIFF10sBAAGCii7AgUYJAMAA/UpLAQABkwDAAP1KToo9ikcAAMAAXqRbARyKXxyKXIGKScCBRddLAQABgopdwIFGCQDAAP1KSwEAAZQAwAD9Sk6KbIpyAACBx1sBHIp7g4p0wIFGW8AAiGvAAPY6AAAAAABJio0mipsBFoqbhIqRwIFGjcAAb54AYAPAAPrRPgFCitIAP0mK5iEcivCFiurAgUbBSAEAASsAwAD98T4BPRyLC4SLAcCBRo2B3QEAAYWLGcCBRsEAAEmLLCaLNwEcizeDizDAgUZbwACIacAA9joAAAAAAGADwAD60T4CPRyLT4OLSMCBRlvAAIhuwAD2OgAAAAAAPRyLe4SLccCBRo3AAG+ZAQABKQAAPgE9HIu7gIuewIFFqFYBAAEci9KBi7/AgUXXSwEAAYKL08CBRgkAwAD9SgDAAP1MPRuL5MAA9kKAi//AgUWoBsAA9m6C34D5gS+BVAAFwACMIsAA9joCaoD6YAPAAPqYwAGEOmoAYAPAAMvNwAHlAAAAAQOBN4FUAAAAAQEBgTgAAADAAGVtWwAAYAPAAPyXAAbAAPZvgt+BVoFbgYYABcAAjCTAAPY6AWoAYAPAAMvNwAHlFAAAAQOBY4GGAAAAAgICgWQAAADAAGVtWwCBaQAAAIPNWwAAXAAGwAD2cILugRmBHYFyAAHAAIwmwAD2OgAAAAEDgTCBcgAAAAAAAABgA8AA/v8BPgE9MIE3H4FBwAD8KQEAASfAAIwnAAbAAPZ4gu+A+YErgWYABZxnA2qBK2ADwADLv8ABf7ZqgStgA8AA+pjAAZBjaoErYAPAAMvNwAHlKAAAAQOBNIFmAAAAAgICgTwAAACB12ADwAD95ACBRgAAAIJOYAPAAP3kAABgA8AA+tEABsAA9nmC74FpgZaB0QABwACMKQNqgZZgA8AAy7/AAX+2aoGWYAPAAPqYwAGDH2qBlmADwAD6mMABf5YAAAEDgaaB0QAAAAEBAYGuAAAAg8VgA8AA/eQAAGADwAD8lwFKgbkBFoHAgIG5wIFJXcAAhsrAAPY6wAD99gbAAPZ6gvCBL4E0gcMAAcAAR3YAAAABA4E5gcMAAAABAQGBQQAAAIPFYAPAAP3kAABcAT4CToFUgVkAAIH7YAPAAP5+ASSBZAGAgV3AgUmvSYFoHIF4GoFswADLiEgBAAErAMAA/fE+AT0egYfAAMuYAQABgYGWwIFJwwA+AT0cgbcagazAAMuIIAEAAYGBuMCBScMAAAbAAPZxgufAAFy2wABcu8AAXPIAAcAAdPDAAPY6AAAAAQPAAFzLwABc8gAAAAEBAcAAXNAAAACCl2ADwAD8lwAAYAPAAPrRAUrAAFzZARzAAFzpHMAAXN+AwABc2sCBSlODfAEAATfAAPwAAMAA/K9IAQABN8AA2AAAwAD9uwbAAPZygufAAF07wABdQMAAXXgAAcAAiJ3AAPY6AAAAAQPAAF1RwABdeAAAAAEBAcAAXVYAAACCl2ADwAD8lwAAYAPAAPrRAUrAAF1fARzAAF1vHMAAXWWAwABdYMCBStGDfAEAATfAAPwAAMAA/K9IAQABN8AA3AAAwAD9uwbAAPZzgufAAF3DwABdx8AAXi8AAcAAdPLAAPY6AAAAAQPAAF3cwABeLwAAAAICAsAAXeEAAABqYAPAAPyXAMAAXewAAACCkGADwAD8lwAAYAPAAPyXAT4BSsAAXfUBHMAAXh4cwABeBDfAAQAAZAEAARzAAF4XHMAAXg6AwABeCMCBS0+DfAEAATeD/wDAAPyvg78BAAE3CgDAAPyzAMAA/b1kAQABHMAAXiWBwABeIcCBS16DfAEAATeD/wDAAPyvAMAA/b0GwAD2dILtwAIvR8ACL1fAAk97AAHAAIwqwAD2OgAAAAEDwAIvZMACT3sAAAAAAAAAXQPAAP07AWADwADjugE+gIBOwAI198ACNf4AAMAAjCtdA8AA/TsBYAPAAOO6AR7AAjX+wAD9QwIBYAPAAOO6AmrAAjYZYAPAAPyXwAB9lzTAAjYlA8ACNiXAAjY5AAAAAQEBwAI2JgAAAIC1YAPAAPyXAABgA8AA47oBSsACNiwBHsACNizAAOO+AQABN2AAAE/AAjaxwAI2uwAAAaLbYQMCW1tgA8AA47oAA8ACNsDAAjcWAAAAAgICwAI2wQAAAIJSWwDAAjbIAAAAwACMLFsAAGADwADjugFKwAI25AE1wAI26gAAAQBgA8AA47oBHMACNuqAwAI25MCBTClLAQABJsACNusBgsACNuvAgUzRYAPAAPyXAMAA/Uo1AAAAAQBbARzAAjbzhMACNvHAgUz4m+MDAAOTN2AmwAI3BAGDwAI3BMCBTNxgA8AA/JcAwAD9YoQAwIFM+E/AAjftwAI38gAAAcAAjC1hAwNgA8AA47pgA8AA/n5gA8AA/JdcAAPAAjf6wAI4sAAAAAMDA8ACOAUAAACCSWADwADjugDAAjgUAAAAwABzXmADwAD+fgDAAjgfAAAAwACMLmADwAD8lwAAXAE+AUXAAjgxAcACODrAAjg8AABiYAPAAPyXAZMBHMACOEOGwAI4QcCBTeZjAQABFsACOEuEwAI4RcCBTbdhwAD+ggDAAP3FAY7AAjhTwIFN5hzAAjhUhsACOFPAgU3mZAEAAZQAwAD9vT4CTsACOGTAAjhpAACcoWADwAD8lwEcwAI4cYTAAjhrwIFNt4QQAQABhsACOHzAgU3mAMAA/ow9HMACOIyDwAI4hsCBTaeAvwIAAhzAAjiSh8ACOI3AgU5Jg8ABAAE3YADAAPyxhcACOJzAgU3JAMAA/UtPwAI6EsACOhcAAAGDZGEDA2ADwADjumADwAD+fmADwAD8l1wAA8ACOh/AAjrNAAAAAwMDwAI6KgAAAIJJYAPAAOO6AMACOjkAAADAAGrOYAPAAP5+AMACOkQAAADAAIwuYAPAAPyXAABcAT4BRcACOlYCwAI6X8ACOmEAAGJgA8AA/JcBHMACOmmFwAI6Y8CBTv2EEAEAAZMAwAD+jMACOnjAAjp6AACDqGADwAD8lwEcwAI6goXAAjp8wIFO/YQQAQABlADAAP6MARzAAjqTh8ACOpHAgU8sgWsBAAEUwAI6lsCBT1cIAADAAP3GAY/AAjqZwIFPLBzAAjqah8ACOpnAgU8sZAEAAZQAwAD9vT4BPRzAAjqshMACOqbAgU7tgL8CAAIcwAI6r4fAAjqtwIFPLIPAAQABN2AAwAD8sYbAAjq5wIFPDwDAAP1LTsACOwIAAACCTlsAPYzAAjtGwIFQCBzAAjtPgcACO0rAgUytIAIAAmrAAjtQYAPAAPyXCRzAAjtoasACO1tgA8AA/JcVgQYBAAFqwAI7amADwAD8l8ABpxoAwAD8sAAAPRzAAjuAgsACO3jAgU12IAMAAybAAjuBAYTAAjuBwIFQCGADwADjumrAAjuEYAPAAP5+wAHlN2rAAjuLYAPAAPyXFQAAPRzAAjukgsACO5zAgU12IAMAAybAAjulAYTAAjulwIFQCGADwADjuieBamrAAjutYAPAAPyXwACNGAAAPRzAAjvJgsACO8HAgU12IAMAAybAAjvKAYTAAjvKwIFQCGADwADjuieC6hzAAjvdasACO9JgA8AA/JchgQYBAAFqwAI732ADwAD8l4NKAMAA/LAAAD0cwAI8BoLAAjv+wIFNdiADAAMmwAI8BwGEwAI8B8CBUAhgA8AA47onUGrAAjwPYAPAAPyXUwAAPRzAAjwrgsACPCPAgU12IAMAAybAAjwsAYTAAjwswIFQCGADwADjuieA9BzAAjw6asACPDRgA8AA/JfAAJY2gQYBAAFqwAI8PGADwAD8l8AAm1wAwAD8sAAAPRzAAjxTgsACPEvAgU12IAMAAybAAjxUAYTAAjxUwIFQCGADwADjuieGxhzAAjxlasACPFxgA8AA/JeEF4EGAQABasACPGdgA8AA/JfAAYaUAMAA/LAAAD2MwAI8esCBUAgcwAI8g4HAAjx+wIFMrSACAAJqwAI8hGADwAD8l8AAjRgcwAI8omrAAjyVYAPAAPyXFYEGAQABasACPKRgA8AA/JfAAacaAMAA/LAAAD0cwAI8uoLAAjyywIFNdiADAAMmwAI8uwGEwAI8u8CBUAhgA8AA47pqwAI8vmADwAD+fsAB5TdqwAI8xWADwAD8lxUAAD0cwAI83oLAAjzWwIFNdiADAAMmwAI83wGEwAI838CBUAhgA8AA47ongWpqwAI852ADwAD8l8AAiqgAAD0cwAI9BILAAjz8wIFNdiADAAMmwAI9BQGEwAI9BcCBUAhgA8AA47onguocwAI9GGrAAj0NYAPAAPyXIYEGAQABasACPRpgA8AA/JeDSgDAAPywAAA9HMACPTCCwAI9KMCBTXYgAwADJsACPTEBhMACPTHAgVAIYAPAAOO6J1AcwAI9QWrAAj05YAPAAPyXhBSBBgEAAWrAAj1DYAPAAPyXwAGnGgDAAPywAAA9HMACPVmCwAI9UcCBTXYgAwADJsACPVoBhMACPVrAgVAIYAPAAOO6J4D0HMACPWhqwAI9YmADwAD8l8AAljaBBgEAAWrAAj1qYAPAAPyXwACbXADAAPywAAA9HMACPYGCwAI9ecCBTXYgAwADJsACPYIBhMACPYLAgVAIYAPAAOO6J4bGHMACPZNqwAI9imADwAD8l4QXgQYBAAFqwAI9lWADwAD8l8ABhpQAwAD8sAAAPYzAAj2owIFQCBzAAj2xgcACPazAgUytIAIAAmrAAj2yYAPAAPyXwACKqBzAAj3RasACPcRgA8AA/JcVgQYBAAFqwAI902ADwAD8l8ABpxoAwAD8sAAAPRzAAj3pgsACPeHAgU12IAMAAybAAj3qAYTAAj3qwIFQCGADwADjumrAAj3tYAPAAP5+wAHlN2rAAj30YAPAAPyXFQAAPRzAAj4NgsACPgXAgU12IAMAAybAAj4OAYTAAj4OwIFQCGADwADjuieV4BzAAj4jasACPhZgA8AA/JcVgQYBAAFqwAI+JWADwAD8l8ABpxoAwAD8sAAAPRzAAj47gsACPjPAgU12IAMAAybAAj48AYTAAj48wIFQCGADwADjuieC6hzAAj5PasACPkRgA8AA/JchgQYBAAFqwAI+UWADwAD8l4NKAMAA/LAAAD0cwAI+Z4LAAj5fwIFNdiADAAMmwAI+aAGEwAI+aMCBUAhgA8AA47onUGrAAj5wYAPAAPyXhBEAAD0cwAI+h4LAAj5/wIFNdiADAAMmwAI+iAGEwAI+iMCBUAhgA8AA47ongPQcwAI+lmrAAj6QYAPAAPyXwACWNoEGAQABasACPphgA8AA/JfAAJtcAMAA/LAAAD0cwAI+r4LAAj6nwIFNdiADAAMmwAI+sAGEwAI+sMCBUAhgA8AA47onhsYcwAI+wWrAAj64YAPAAPyXhBeBBgEAAWrAAj7DYAPAAPyXwAGGlADAAPywAAA9jMACPtbAgVAIHMACPt+BwAI+2sCBTK0gAgACasACPuBgA8AA/JcVHMACPvtqwAI+7mADwAD8lxWBBgEAAWrAAj79YAPAAPyXwAGnGgDAAPywAAA9HMACPxOCwAI/C8CBTXYgAwADJsACPxQBhMACPxTAgVAIYAPAAOO6asACPxdgA8AA/n7AAeU3asACPx5gA8AA/JcVAAA9HMACPzeCwAI/L8CBTXYgAwADJsACPzgBhMACPzjAgVAIYAPAAOO6J4LqHMACP0tqwAI/QGADwAD8lyGBBgEAAWrAAj9NYAPAAPyXg0oAwAD8sAAAPRzAAj9jgsACP1vAgU12IAMAAybAAj9kAYTAAj9kwIFQCGADwADjuidQasACP2xgA8AA/JeEFAAAPRzAAj+AgsACP3jAgU12IAMAAybAAj+BAYTAAj+BwIFQCGADwADjuieA9BzAAj+PasACP4lgA8AA/JfAAJY2gQYBAAFqwAI/kWADwAD8l8AAm1wAwAD8sAAAPRzAAj+ogsACP6DAgU12IAMAAybAAj+pAYTAAj+pwIFQCGADwADjuieGxhzAAj+6asACP7FgA8AA/JeEF4EGAQABasACP7xgA8AA/JfAAYaUAMAA/LAAAD2MwAI/z8CBUAgcwAI/2IHAAj/TwIFMrSACAAJqwAI/2WADwAD8lyEcwAI/6mrAAj/lYAPAAPyXwACXCIEGAQABasACP+xgA8AA/JfAAacaAMAA/LAAAD0cwAJAAoLAAj/6wIFNdiADAAMmwAJAAwGEwAJAA8CBUAhgA8AA47pqwAJABmADwAD+fsAB5TccwAJAEmrAAkANYAPAAPyXwACXCIEGAQABasACQBRgA8AA/JeEswDAAPywAAA9HMACQCqCwAJAIsCBTXYgAwADJsACQCsBhMACQCvAgVAIYAPAAOO6J1AcwAJAQ2rAAkAzYAPAAPyXU4EGAQABasACQEVgA8AA/JeEswDAAPywAAA9HMACQFuCwAJAU8CBTXYgAwADJsACQFwBhMACQFzAgVAIYAPAAOO6J4FqHMACQG9qwAJAZGADwAD8l8AAhkaBBgEAAWrAAkBxYAPAAPyXhLMAwAD8sAAAPRzAAkCHgsACQH/AgU12IAMAAybAAkCIAYTAAkCIwIFQCGADwADjuieA9BzAAkCWasACQJBgA8AA/JfAAJY2gQYBAAFqwAJAmGADwAD8l8AAm1wAwAD8sAAAPRzAAkCvgsACQKfAgU12IAMAAybAAkCwAYTAAkCwwIFQCGADwADjuieGxhzAAkDBasACQLhgA8AA/JeEF4EGAQABasACQMNgA8AA/JfAAYaUAMAA/LAAAD2MwAJA1sCBUAgcwAJA34HAAkDawIFMrSACAAJqwAJA4GADwAD8l1McwAJA9mrAAkDxYAPAAPyXwACXCIEGAQABasACQPhgA8AA/JfAAacaAMAA/LAAAD0cwAJBDoLAAkEGwIFNdiADAAMmwAJBDwGEwAJBD8CBUAhgA8AA47pqwAJBEmADwAD+fsAB5TdqwAJBGWADwAD8l8AAlwgAAD0cwAJBKoLAAkEiwIFNdiADAAMmwAJBKwGEwAJBK8CBUAhgA8AA47onUBzAAkFAasACQTNgA8AA/JeBV4EGAQABasACQUJgA8AA/JeEjADAAPywAAA9HMACQViCwAJBUMCBTXYgAwADJsACQVkBhMACQVnAgVAIYAPAAOO6J4FqasACQWFgA8AA/JfAAIZGAAA9HMACQXiCwAJBcMCBTXYgAwADJsACQXkBhMACQXnAgVAIYAPAAOO6J4D0HMACQYdqwAJBgWADwAD8l8AAljaBBgEAAWrAAkGJYAPAAPyXwACbXADAAPywAAA9HMACQaCCwAJBmMCBTXYgAwADJsACQaEBhMACQaHAgVAIYAPAAOO6J4bGHMACQbJqwAJBqWADwAD8l4QXgQYBAAFqwAJBtGADwAD8l8ABhpQAwAD8sAAAPYzAAkHHwIFQCBzAAkHQgcACQcvAgUytIAIAAmrAAkHRYAPAAPyXgVccwAJB62rAAkHfYAPAAPyXgj+BBgEAAWrAAkHtYAPAAPyXwAGnGgDAAPywAAA9HMACQgOCwAJB+8CBTXYgAwADJsACQgQBhMACQgTAgVAIYAPAAOO6asACQgdgA8AA/n7AAeU3asACQg5gA8AA/JeCPwAAPRzAAkImg8ACQh7AgU6+IAMAAybAAkInAYTAAkInwIFQCGADwADjuifAAIwwHMACQjxqwAJCMGADwAD8l4I/gQYBAAFqwAJCPmADwAD8l8ABpxoAwAD8sAAAPRzAAkJUgsACQkzAgU12IAMAAybAAkJVAYTAAkJVwIFQCGADwADjuieC6hzAAkJqasACQl1gA8AA/JeC4YEGAQABasACQmxgA8AA/JfAAJr/AMAA/LAAAD0cwAJCgoLAAkJ6wIFNdiADAAMmwAJCgwGEwAJCg8CBUAhgA8AA47ong4QcwAJCmGrAAkKLYAPAAPyXgVeBBgEAAWrAAkKaYAPAAPyXhIwAwAD8sAAAPRzAAkKwgsACQqjAgU12IAMAAybAAkKxAYTAAkKxwIFQCGADwADjuieZxhzAAkLCasACQrlgA8AA/JeDXYEGAQABasACQsRgA8AA/JfAAacaAMAA/LAAAD0cwAJC2oLAAkLSwIFNdiADAAMmwAJC2wGEwAJC28CBUAhgA8AA47onUBzAAkLrasACQuNgA8AA/JeEFIEGAQABasACQu1gA8AA/JeEswDAAPywAAA9HMACQwOCwAJC+8CBTXYgAwADJsACQwQBhMACQwTAgVAIYAPAAOO6J4D0HMACQxJqwAJDDGADwAD8l8AAljaBBgEAAWrAAkMUYAPAAPyXwACbXADAAPywAAA9HMACQyuCwAJDI8CBTXYgAwADJsACQywBhMACQyzAgVAIYAPAAOO6J4bGHMACQz1qwAJDNGADwAD8l4QXgQYBAAFqwAJDP2ADwAD8l8ABhpQAwAD8sAAAPYzAAkNSwIFQCBzAAkNbgcACQ1bAgUytIAIAAmrAAkNcYAPAAPyXgj8cwAJDdWrAAkNpYAPAAPyXgj+BBgEAAWrAAkN3YAPAAPyXwAGnGgDAAPywAAA9HMACQ42CwAJDhcCBTXYgAwADJsACQ44BhMACQ47AgVAIYAPAAOO6asACQ5FgA8AA/n7AAeU3asACQ5hgA8AA/JeCPwAAPRzAAkOwg8ACQ6jAgU6+IAMAAybAAkOxAYTAAkOxwIFQCGADwADjuifAAIwwHMACQ8ZqwAJDumADwAD8l4I/gQYBAAFqwAJDyGADwAD8l8ABpxoAwAD8sAAAPRzAAkPegsACQ9bAgU12IAMAAybAAkPfAYTAAkPfwIFQCGADwADjuieC6hzAAkP0asACQ+dgA8AA/JeC4YEGAQABasACQ/ZgA8AA/JfAAJr/AMAA/LAAAD0cwAJEDILAAkQEwIFNdiADAAMmwAJEDQGEwAJEDcCBUAhgA8AA47ong4QcwAJEImrAAkQVYAPAAPyXgVeBBgEAAWrAAkQkYAPAAPyXhIwAwAD8sAAAPRzAAkQ6gsACRDLAgU12IAMAAybAAkQ7AYTAAkQ7wIFQCGADwADjuidQHMACREtqwAJEQ2ADwAD8l4QUgQYBAAFqwAJETWADwAD8l4SzAMAA/LAAAD0cwAJEY4LAAkRbwIFNdiADAAMmwAJEZAGEwAJEZMCBUAhgA8AA47ongPQcwAJEcmrAAkRsYAPAAPyXwACWNoEGAQABasACRHRgA8AA/JfAAJtcAMAA/LAAAD0cwAJEi4LAAkSDwIFNdiADAAMmwAJEjAGEwAJEjMCBUAhgA8AA47onhsYcwAJEnWrAAkSUYAPAAPyXhBeBBgEAAWrAAkSfYAPAAPyXwAGGlADAAPywAAA9jMACRLLAgVAIHMACRLuBwAJEtsCBTK0gAgACasACRLxgA8AA/JeC4RzAAkTWasACRMpgA8AA/JeFB4EGAQABasACRNhgA8AA/JfAAacaAMAA/LAAAD0cwAJE7oPAAkTmwIFOviADAAMmwAJE7wGEwAJE78CBUAhgA8AA47onwACH3WrAAkT4YAPAAPyXhQcAAD0cwAJFEILAAkUIwIFNdiADAAMmwAJFEQGEwAJFEcCBUAhgA8AA47ong4QcwAJFJmrAAkUZYAPAAPyXgVeBBgEAAWrAAkUoYAPAAPyXhIwAwAD8sAAAPRzAAkU+gsACRTbAgU12IAMAAybAAkU/AYTAAkU/wIFQCGADwADjuidQHMACRU9qwAJFR2ADwAD8l4QUgQYBAAFqwAJFUWADwAD8l4SzAMAA/LAAAD0cwAJFZ4LAAkVfwIFNdiADAAMmwAJFaAGEwAJFaMCBUAhgA8AA47ongPQcwAJFdmrAAkVwYAPAAPyXwACWNoEGAQABasACRXhgA8AA/JfAAJtcAMAA/LAAAD0cwAJFj4LAAkWHwIFNdiADAAMmwAJFkAGEwAJFkMCBUAhgA8AA47onhsYcwAJFoWrAAkWYYAPAAPyXhBeBBgEAAWrAAkWjYAPAAPyXwAGGlADAAPywAAA9jMACRbbAgVAIHMACRb+BwAJFusCBTK0gAgACasACRcBgA8AA/JeFBxzAAkXZasACRc1gA8AA/JeFB4EGAQABasACRdtgA8AA/JfAAacaAMAA/LAAAD0cwAJF8YPAAkXpwIFOviADAAMmwAJF8gGEwAJF8sCBUAhgA8AA47onwACMMWrAAkX7YAPAAPyXhQcAAD0cwAJGE4LAAkYLwIFNdiADAAMmwAJGFAGEwAJGFMCBUAhgA8AA47ong4QcwAJGKWrAAkYcYAPAAPyXgVeBBgEAAWrAAkYrYAPAAPyXhIwAwAD8sAAAPRzAAkZBgsACRjnAgU12IAMAAybAAkZCAYTAAkZCwIFQCGADwADjuidQHMACRlJqwAJGSmADwAD8l4QUgQYBAAFqwAJGVGADwAD8l4SzAMAA/LAAAD0cwAJGaoLAAkZiwIFNdiADAAMmwAJGawGEwAJGa8CBUAhgA8AA47ongPQcwAJGeWrAAkZzYAPAAPyXwACWNoEGAQABasACRntgA8AA/JfAAJtcAMAA/LAAAD0cwAJGkoLAAkaKwIFNdiADAAMmwAJGkwGEwAJGk8CBUAhgA8AA47onhsYcwAJGpGrAAkabYAPAAPyXhBeBBgEAAWrAAkamYAPAAPyXwAGGlADAAPywAAA9jMACRrnAgVAIHMACRsKBwAJGvcCBTK0gAgACasACRsNgA8AA/JeDXWrAAkbNYAPAAPyXg10AAD0cwAJG4oLAAkbawIFNdiADAAMmwAJG4wGEwAJG48CBUAhgA8AA47onmcdqwAJG62ADwAD8l4I/AAA9jMACRvzAgVAIHMACRwWBwAJHAMCBTK0gAgACasACRwZgA8AA/JeEERzAAkcXasACRxJgA8AA/JfAAJcIgQYBAAFqwAJHGWADwAD8l8ABpxoAwAD8sAAAPRzAAkcvgsACRyfAgU12IAMAAybAAkcwAYTAAkcwwIFQCGADwADjumrAAkczYAPAAP5+wAHlN2rAAkc6YAPAAPyXwACXCAAAPRzAAkdLgsACR0PAgU12IAMAAybAAkdMAYTAAkdMwIFQCGADwADjuieBamrAAkdUYAPAAPyXg3AAAD0cwAJHboLAAkdmwIFNdiADAAMmwAJHbwGEwAJHb8CBUAhgA8AA47onUBzAAkd/asACR3dgA8AA/JeEFIEGAQABasACR4FgA8AA/JfAAacaAMAA/LAAAD0cwAJHl4LAAkePwIFNdiADAAMmwAJHmAGEwAJHmMCBUAhgA8AA47ongPQcwAJHpmrAAkegYAPAAPyXwACWNoEGAQABasACR6hgA8AA/JfAAJtcAMAA/LAAAD0cwAJHv4LAAke3wIFNdiADAAMmwAJHwAGEwAJHwMCBUAhgA8AA47onhsYcwAJH0WrAAkfIYAPAAPyXhBeBBgEAAWrAAkfTYAPAAPyXwAGGlADAAPywAAA9jMACR+bAgVAIHMACR++BwAJH6sCBTK0gAgACasACR/BgA8AA/JeDcBzAAkgEasACR/9gA8AA/JfAAJcIgQYBAAFqwAJIBmADwAD8l8ABpxoAwAD8sAAAPRzAAkgcgsACSBTAgU12IAMAAybAAkgdAYTAAkgdwIFQCGADwADjumrAAkggYAPAAP5+wAHlN2rAAkgnYAPAAPyXwACXCAAAPRzAAkg4gsACSDDAgU12IAMAAybAAkg5AYTAAkg5wIFQCGADwADjuieBamrAAkhBYAPAAPyXwACFbgAAPRzAAkhcgsACSFTAgU12IAMAAybAAkhdAYTAAkhdwIFQCGADwADjuidQHMACSG1qwAJIZWADwAD8l4QUgQYBAAFqwAJIb2ADwAD8l8ABpxoAwAD8sAAAPRzAAkiFgsACSH3AgU12IAMAAybAAkiGAYTAAkiGwIFQCGADwADjuieA9BzAAkiUasACSI5gA8AA/JfAAJY2gQYBAAFqwAJIlmADwAD8l8AAm1wAwAD8sAAAPRzAAkitgsACSKXAgU12IAMAAybAAkiuAYTAAkiuwIFQCGADwADjuieGxhzAAki/asACSLZgA8AA/JeEF4EGAQABasACSMFgA8AA/JfAAYaUAMAA/LAAAD2MwAJI1MCBUAgcwAJI3YHAAkjYwIFMrSACAAJqwAJI3mADwAD8l8AAhW4cwAJI82rAAkjuYAPAAPyXwACXCIEGAQABasACSPVgA8AA/JfAAacaAMAA/LAAAD0cwAJJC4LAAkkDwIFNdiADAAMmwAJJDAGEwAJJDMCBUAhgA8AA47pqwAJJD2ADwAD+fsAB5TdqwAJJFmADwAD8l8AAlwgAAD0cwAJJJ4LAAkkfwIFNdiADAAMmwAJJKAGEwAJJKMCBUAhgA8AA47onUGrAAkkwYAPAAPyXhBEAAD0cwAJJR4LAAkk/wIFNdiADAAMmwAJJSAGEwAJJSMCBUAhgA8AA47ongPQcwAJJVmrAAklQYAPAAPyXwACWNoEGAQABasACSVhgA8AA/JfAAJtcAMAA/LAAAD0cwAJJjYLAAkmFwIFNdiADAAMmwAJJjgGEwAJJjsCBUAhgA8AA47onhsYcwAJJn2rAAkmWYAPAAPyXhBeBBgEAAWrAAkmhYAPAAPyXwAGGlADAAPywAAA9jMACSdLAgVAIHMACSduBwAJJ1sCBTK0gAgACasACSdxgA8AA/JeEFBzAAknqasACSeVgA8AA/JfAAJcIgQYBAAFqwAJJ7GADwAD8l8ABpxoAwAD8sAAAPRzAAkoCgsACSfrAgU12IAMAAybAAkoDAYTAAkoDwIFQCGADwADjumrAAkoGYAPAAP5+wAHlN2rAAkoNYAPAAPyXwACXCAAAPRzAAkoegsACShbAgU12IAMAAybAAkofAYTAAkofwIFQCGADwADjuieBamrAAkonYAPAAPyXwACGRgAAPRzAAko+gsACSjbAgU12IAMAAybAAko/AYTAAko/wIFQCGADwADjuidQHMACSk9qwAJKR2ADwAD8l4QUgQYBAAFqwAJKUWADwAD8l8ABpxoAwAD8sAAAPRzAAkpngsACSl/AgU12IAMAAybAAkpoAYTAAkpowIFQCGADwADjuieA9BzAAkp2asACSnBgA8AA/JfAAJY2gQYBAAFqwAJKeGADwAD8l8AAm1wAwAD8sAAAPRzAAkqPgsACSofAgU12IAMAAybAAkqQAYTAAkqQwIFQCGADwADjuieGxhzAAkqhasACSphgA8AA/JeEF4EGAQABasACSqNgA8AA/JfAAYaUAMAA/LAAAD2MwAJKtsCBUAgcwAJKv4HAAkq6wIFMrSACAAJqwAJKwGADwAD8l8AAhkYcwAJK0WrAAkrMYAPAAPyXwACXCIEGAQABasACStNgA8AA/JfAAacaAMAA/LAAAD0cwAJK6YLAAkrhwIFNdiADAAMmwAJK6gGEwAJK6sCBUAhgA8AA47pqwAJK7WADwAD+fsAB5TdqwAJK9GADwAD8l8AAlwgAAD0cwAJLBYLAAkr9wIFNdiADAAMmwAJLBgGEwAJLBsCBUAhgA8AA47ongWpqwAJLDmADwAD8l8AAhK4AAD0cwAJLJoLAAksewIFNdiADAAMmwAJLJwGEwAJLJ8CBUAhgA8AA47onUBzAAks3asACSy9gA8AA/JeEFIEGAQABasACSzlgA8AA/JfAAacaAMAA/LAAAD0cwAJLT4LAAktHwIFNdiADAAMmwAJLUAGEwAJLUMCBUAhgA8AA47ongPQcwAJLXmrAAktYYAPAAPyXwACWNoEGAQABasACS2BgA8AA/JfAAJtcAMAA/LAAAD0cwAJLd4LAAktvwIFNdiADAAMmwAJLeAGEwAJLeMCBUAhgA8AA47onhsYcwAJLiWrAAkuAYAPAAPyXhBeBBgEAAWrAAkuLYAPAAPyXwAGGlADAAPywAAA9jMACS57AgVAIHMACS6eBwAJLosCBTK0gAgACasACS6hgA8AA/JfAAISuHMACS7pqwAJLtWADwAD8l8AAlwiBBgEAAWrAAku8YAPAAPyXwAGnGgDAAPywAAA9HMACS9KCwAJLysCBTXYgAwADJsACS9MBhMACS9PAgVAIYAPAAOO6asACS9ZgA8AA/n7AAeU3asACS91gA8AA/JfAAJcIAAA9HMACS+6CwAJL5sCBTXYgAwADJsACS+8BhMACS+/AgVAIYAPAAOO6J1AcwAJL/2rAAkv3YAPAAPyXhBSBBgEAAWrAAkwBYAPAAPyXwAGnGgDAAPywAAA9HMACTBeCwAJMD8CBTXYgAwADJsACTBgBhMACTBjAgVAIYAPAAOO6J4D0HMACTCZqwAJMIGADwAD8l8AAljaBBgEAAWrAAkwoYAPAAPyXwACbXADAAPywAAA9HMACTD+CwAJMN8CBTXYgAwADJsACTEABhMACTEDAgVAIYAPAAOO6J4bGHMACTFFqwAJMSGADwAD8l4QXgQYBAAFqwAJMU2ADwAD8l8ABhpQAwAD8sAAAPYzAAkxmwIFQCBzAAkxvgcACTGrAgUytIAIAAmrAAkxwYAPAAPyXwACXCBzAAkx7asACTHZgA8AA/JfAAJcIgQYBAAFqwAJMfWADwAD8l8ABpxoAwAD8sAAAPRzAAkyTgsACTIvAgU12IAMAAybAAkyUAYTAAkyUwIFQCGADwADjumrAAkyXYAPAAP5+wAHlN2rAAkyeYAPAAPyXwACXCAAAPRzAAkyvgsACTKfAgU12IAMAAybAAkywAYTAAkywwIFQCGADwADjuidQasACTLhgA8AA/JeEFAAAPRzAAkzMgsACTMTAgU12IAMAAybAAkzNAYTAAkzNwIFQCGADwADjuieA9BzAAkzbasACTNVgA8AA/JfAAJY2gQYBAAFqwAJM3WADwAD8l8AAm1wAwAD8sAAAPRzAAkz0gsACTOzAgU12IAMAAybAAkz1AYTAAkz1wIFQCGADwADjuieGxhzAAk0GasACTP1gA8AA/JeEF4EGAQABasACTQhgA8AA/JfAAYaUAMAA/LAAAD2MwAJNG8CBUAgcwAJNJIHAAk0fwIFMrSACAAJqwAJNJWADwAD8l8AAljYcwAJNMmrAAk0sYAPAAPyXwACWNoEGAQABasACTTRgA8AA/JfAAacaAMAA/LAAAD0cwAJNSoLAAk1CwIFNdiADAAMmwAJNSwGEwAJNS8CBUAhgA8AA47pqwAJNTmADwAD+fsAB5TdqwAJNVWADwAD8l8AAljYAAD0cwAJNZ4LAAk1fwIFNdiADAAMmwAJNaAGEwAJNaMCBUAhgA8AA47ongPRqwAJNcGADwAD8l8AAljYAAD0cwAJNgoLAAk16wIFNdiADAAMmwAJNgwGEwAJNg8CBUAhgA8AA47onhsYcwAJNlGrAAk2LYAPAAPyXhBeBBgEAAWrAAk2WYAPAAPyXwAGGlADAAPywAAA9jMACTanAgVAIHMACTbKBwAJNrcCBTK0gAgACasACTbNgA8AA/JeEFxzAAk3GasACTb1gA8AA/JeEF4EGAQABasACTchgA8AA/JfAAacaAMAA/LAAAD0cwAJN3oLAAk3WwIFNdiADAAMmwAJN3wGEwAJN38CBUAhgA8AA47pqwAJN4mADwAD+fsAB5TdqwAJN6WADwAD8l4QXAAA9HMACTf6CwAJN9sCBTXYgAwADJsACTf8BhMACTf/AgVAIYAPAAOO6J4D0asACTgdgA8AA/JeEFwAAPYzAAk6iwIFQCBzAAk6rgcACTqbAgUytIAIAAmrAAk6sYAPAAPyXwABxihzAAk68asACTrVgA8AA/JfAAH4qgQYBAAFqwAJOvmADwAD8l8ABpxoAwAD8sAAAPRzAAk7Ug8ACTszAgU6+IAMAAybAAk7VAYTAAk7VwIFQCGADwADjuifAAIwyasACTt5gA8AA/JfAAH4qAAA9jMACTurAgVAIHMACTvOBwAJO7sCBTK0gAgACasACTvRgA8AA/JfAAH4qHMACTwNqwAJO/GADwAD8l8AAfiqBBgEAAWrAAk8FYAPAAPyXwAGnGgDAAPywAAA9HMACTxuDwAJPE8CBTr4gAwADJsACTxwBhMACTxzAgVAIYAPAAOO6J8AAjDJqwAJPJWADwAD8l8AAfioAAD0cwAJPOIPAAk8wwIFOviADAAMmwAJPOQGEwAJPOcCBUAhgA8AA47onwACMMWrAAk9CYAPAAPyXwAB+KgAAPRzAAk9VgsACT03AgU12IAMAAybAAk9WAYTAAk9WwIFQCGADwADjuifAAIwzasACT2BgA8AA/JfAAH4qAABKwAJPbAGAwAJPc8CBTCkGwAD2dYLtwAJQucACUL3AAlLEAAHAAIw0wAD2OgAAAAEDwAJQwsACUsQAAAAFBQXAAlDKAAAAgKxgA8AA/n4AwAJQ0wAAAGpgA8AA/JcAwAJQ3gAAAIKQYAPAAPyXAMACUOcAAACCUmADwAD8lwDAAlD4AAAAwABr910DwAD9OwFgA8AA/JcAAGADwAD8lwE+BE7AAlEJwAJREAAAwACMK10DwAD9OwFgA8AA47oBGsACURLAAPZjQBzAAlEvgsACUSvAgXbRgWsBAAEWwAJRNoDAAlEywIF2smHAAP6CAMAA/cbAAlErwAJRPABFwAJRQQHAAlFKwAJRTAAAYmADwAD8lwGBwAJRTsCBdsIBHMACUVeGwAJRVcCBd3VjAQABgsACUVnAgXbRAMAA/cUBjsACUV7AgXd1HMACUV+GwAJRXsCBd3VkAQABlADAAP29PgZOwAJRbcACUXMAAJiTYAPAAOO6ARzAAlF7hcACUXXAgXcVSwEAAYPAAlF8wIF24QDAAP1KTsACUcjAAlHNAACcoWADwAD8lwEcwAJR4RzAAlHTgMACUc/AgXayhBABAAGGwAJR3sCBd3UAwAD+jIPAAQABN2AAwAD8sUnAAlIvHMACUjgUwAJSM8CBeAoIAICXAQABN18AwAD9xz0VwAJSQMCBeAoINx8/TsACUlXAAlJgAADAAIwuYAPAAPyXARzAAlJnh8ACUmLAgXfWSwEAARTAAlJowIF4CggAAMAA/Uo9i8ACUnPAgXbhHMACUoYUwAJSe8CBeH8JAIN8AQABNx8AwAD8rz0cwAJSmYTAAlKSwIF28YC/AgACHMACUqUUwAJSmsCBeH8JAIPBAQABNwUAwAD8tIbAAlKtwIF3dQDAAP1LSsACUrYBg8ACUr3AgXbhBsAA9naC7cACkmvAApJvwAKT9gABwACMNcAA9joAAAABA8ACkn7AApP2AAAAAgICwAKShgAAAIGyYAPAAP5+AMACkpAAAABqYAPAAPyXAABgA8AA/JcBPgZOwAKS58ACku0AAJtiYAPAAPyXARzAApMVHMACkwscwAKS9YDAApLwwIF5WYQQAQABHMACkwaBwAKTAMCBeWlkAQABlwDAAP29AMAA/oyDwAEAAWrAApMNYAPAAPyXltMAwAD8sYONAQABlgDAAP2/PYrAApMcwIF5gxzAApMigsACkxzAgXmDgQYBAAEcwAKTPBzAApMqgMACkyXAgXlZhBABAAGBwAKTNcCBeWkAwAD+jIPAAQABN2QAwAD8sQDAAPywPYrAApNMwIF5gxzAApNSgsACk0zAgXmDgQYBAAEcwAKTcBzAApNagMACk1XAgXlZhBABAAEcwAKTa4HAApNlwIF5aWQBAAGUAMAA/b0AwAD+jIPAAQABN2EAwAD8sQDAAPywPYrAApOAwIF5gxzAApOGgsACk4DAgXmDgQYBAAEcwAKTpBzAApOOgMACk4nAgXlZhBABAAEcwAKTn4HAApOZwIF5aWQBAAGVAMAA/b0AwAD+jIPAAQABN3QAwAD8sQDAAPywPYrAApO0wIF5gxzAApO6gsACk7TAgXmDgQYBAAEcwAKT2BzAApPCgMACk73AgXlZhBABAAEcwAKT04HAApPNwIF5aWQBAAGWAMAA/b0AwAD+jIPAAQABN2EAwAD8sQDAAPywSsACk+gBgsACk+/AgXmDBsAA9neC7cAClELAApRGwAKUgQABwACMNsAA9joAAAABA8AClFnAApSBAAAAAQEBwAKUYQAAAIhsYAPAAP5+AABgA8AA/JcBSsAClGcBIxzAApRqgMAClGjAgXuuSAEAASsAwAD+jZMWwAKUe4DAApR5wIF7rmHAAP6CAWADwAD8l0CCKIKygrOCtIK1graCt4K4grmCuoK7gryCvYK+gr+CwILBgsKCw4LEgsWCxoLHgsiCyYLKgsuCzILNgs6Cz4LQgtGC0oLTgtSC1YLWgteC2ILZgtqC24Lcgt2C3oLfguCC4YLiguOC5ILlguaC54LogumC6oLrguyC7YLugu+C8ACBfAAAe0HgAHtDaAB7RpAAe1YFAHteMQB7YKUAfHxSAHx+rQB8mecAfKccAHzFuQB8y4kAfM0OAHzOnwB8z4kAfNCNAHzRiQB81GEAfPl9AH0FoAB9BuIAfQgkAH0JkAB9C8EAfQ3/AH0QxwB9QCcAfVQ0AH1WUAB9bHcAfXAhAH1zBAB9c8IAfXtJAH2GtgB9iCoAfY2hAH2OBQB97ckAfhL8AH4VPgB+FvMAfhioAH4cTQB+HvsAfiMeAH4jrgB+JGQAfiTXAH4lSgB+J6sAfii8AH4pFgB+KcEAfiobAH4rbAB+NYoAfjg9AH45QgB+e00AfovjAH6b0AB+nl4Afp8jAH6fdAB+n8UAfqBgAH6k8AB+rp0AfrGSAH6ziAB+tdsAftjMAH7aTAB+23QAftxlAH7dpwB+3/wAfuJRAH7j9gB+5HEAfuVkAH7ueQB+7xoAfvu1AH8ACwB/IwQAfycXAH8uvAB/RCsAf0Z+AH9HKwB/R+EAf18rAH9ruQB/bZIAf28QAH97cgB/gQwAf4IKAH+D+wB/jWYAf449AH+U0wB/lY8Af5bRAH+XqAB/oK8Af66gAH+xbQB/vWYAf8y+AH/OEwB/z0oAf8+bAIARLgCAyrcAgP6dAIE8bACBPZQAAAB3AIFEAACBRH8AgUT9AIFFbwCBR8oAgUgcAIFIZQCBSKkAgUkUAIFJjQCBSiMAgUqhAIFLHwCBS+YAgXaCAIF5KQCBe34AgXwAAAAAEQACBMABABjAAIw3gvEAAAiA7wAAwAC4RwAAgQQAAMAAvlsAAQEHwABHD8AAckWfQsAAcoXAAHJRwAByWpy3gbQAAMAAxYcAAIHLAADAAMpAAAEAAZakge0AAMAAy3wAAQECwABvXsAAdgSCHQAAwADQnAAAgjEAAMAA6sAAAIJDAADAANQ9AAAACQDAAIw4AMAAjDkAwACMOgDAAIw7AMAAjDwAwACMPQDAAH8RAMAAjD4AwACMPwPAAQAagvKL2cAAjEAAAF4DAAEBAV0DwAD9OwFgA8AA/JcAAVcDwAEAGgBcAAGL8gAAAIQ5XQPAAP07AWADwAD8lwAAwAEAG4LywAD42cAAjEEAAF4DAAMDA2ADwADzpWADwAD+fmADwAD8lwABVwPAAQAbAGADwAD60QADwAD5AAAAAMAAjEJgA8AA86UAwAD5CwAAAJaIYAPAAP5+AMAA+RUAAACWiWADwAD8lwAAwAEAHILzsX3AAIxDAABeAwABAQFdA8AA/TsBYAPAAP5+AAFXA8ABABwAWwABsZwAAADAAIDEXQPAAP07AWADwAD+fgAAYALAAQAwgvGRaZF4rz8HwACMRAAAAWABwAD95AABXQHAALocAWADwAEBAAMEwAEAMoLxkrKSvhjAAIxFAGADwAD+fgErBMABADOC8ZY4lkQYwACMRgBgA8AA+tEBKwTAAQA0gvGX25fmGMAAjEcAYAPAAPttASsACQbAAQA2gvGUgJSQlKYBAsAAjEgAAAABA5SmlKYAAAAAAAAAYAPAAQBKAAbAAQA6gvGfSZ9joAAAAZ60AAAAAQOfZ6AAAAAABQICn2gAAADAAHWnWwCfdQAAAJaJYAPAAPyXAAOfigAAAMAAgCNgA8AA/JcBap+TYAPAAPyXCZ+bAAAAwACAJGADwAD60QFqn6NgA8AA+tEAn68AAADAAIAlYAPAAPrRAWqft2ADwAD60QBdA8AAuWgBYAPAAQAwAUqfyAEen9TAAQSDBQAFgJ/ZwIGBJIGf4sCBgS+Cn+jAgYE+g5/xwIGBWISf+cCBgXIABsABADuC8afcp/apNAABwACMSQAAAAEDqACpNAAAAAcDA6gMAAAAwAB1p1sAqBkAAACWiWADwAD8lwCoLwAAAIJXYAPAAPRSAASoRwAAAMAAgCNgA8AA/JcBaqhQYAPAAPyXCahiAAAAwACAJGADwAD60QFqqGpgA8AA+tEAqIAAAADAAIC4YAPAAPrRAWqommADwAD60QCosAAAAMAAgCVgA8AA+tEBaqi4YAPAAPrRAF0DwAC5aAFgA8ABADABSqjJAR6o1cABBIQHAAeAqODAgYHugajpwIGB+YKo78CBggeDqPjAgYIWhKkBwIGCMIWpE8CBgkqGqS3AgYJkAAbAAQA/gvGqE6obqnkEAcAAjEoAAAABA6ouqnkAAAABAQGqPAAAAMAAhEBgA8AA9LYAAGADwAEAMAFKqlMBH6pXwAEEngEAAYCqbMCBgu4ABsABADyC8awcrCOsPQACgowAAAABA6worD0AAAABAAABrC8AAACedmADwAD60QFqrDZgA8AA+tEAXQPAALloAVsABsABADeC8a0MrRStGAEClokAAAABA60YrRgAAAAAAAAAYAPAAPyXAAbAAQA4gvGt163rrfIBAsAAdacAAAABA63yrfIAAAAAAAAAYAPAAPSJAAbAAQBBgvGuca51rpACAsAAjEsAAAABA66DrpAAAAABAQGuiAAAAMAAcA1gA8AA/JcAAFwABsABAD2C8a8YryyvPQACwACMTAAAAAEDrzuvPQAAAAAAAABgA8ABAEIAAACBgNoAgYEEAIGBzACBgswAgYMcAIGDXgCBg4YAgYOwAIGD5QCBhA8AAAAJAsABAEKC8a+Tr5mxwgPAAIxNAAABYAHAAP3kAAAEBMABAESC8a/qr/MYpKkAYAPAAPyXAZMEwAEARYLxsGOwbRjAAFDlAGADwAD8lwGTBMABAEaC8bDNsNUYwACMTgBgA8AA/JcBkwTAAQBHgvGxtbHAGLTjAGADwAD8lwGTAQXAAQBJAAAAAAQAAAMAAAAAAAAAAABgA8ABAEIBPwEJAQDAAP36AAAAAAAAAIGE5gAAAAACwAEASoLxtbS1w8AAZHoHwACMTwAAAWABwAD95AAAcwTAAQBMgvG14LX3BsAAjFAAYAPAAP5+AWq172ADwAD+fsAB5TwEwAEATYLxtgi2LgbAAIxRAGADwAD+fgFqth5gA8AA/n7AAeU/BMABAE6C8bY/tmcGwACMUwBgA8AA/n4BarZWYAPAAP5+wAHlRATAAQBPgvG2eLagBsAAjFUAYAPAAP5+AWq2j2ADwAD+fsAB5UkEwAEAUILxtrG21QbAAIxXAGADwAD+fgFqtsZgA8AA/n7AAeVOBMABAFGC8bbmtvcGwACMWQBgA8AA/n4BarbyYAPAAP5+wAHlUwTAAQBSgvG3CLcdBsAAjFsAYAPAAP5+AWq3FmADwAD+fsAB5VgEwAEAU4Lxty63UwbAAIxdAGADwAD+fgFqt0RgA8AA/n7AAeVdBMABAFSC8bdkt4gGwACMXwBgA8AA/n4Bard5YAPAAP5+wAHlYgTAAQBVgvG3mbe4BsAAjGEAYAPAAP5+AWq3rGADwAD+fsAB5WcEwAEAVoLxt8m38wbAAIxiAGADwAD+fgFqt+FgA8AA/n7AAeVsBMABAFeC8bgEuC4GwACMZABgA8AA/n4BargcYAPAAP5+wAHlcQTAAQBYgvG4P7hlBsAAjGYAYAPAAP5+AWq4VWADwAD+fsAB5XYEwAEAWYLxuHa4oAbAAIxoAGADwAD+fgFquI5gA8AA/n7AAeV7BMABAFqC8bixuNEGwACMagBgA8AA/n4BarjEYAPAAP5+wAHlgATAAQBbgvG44rkGBsAAjGwAYAPAAP5+AWq492ADwAD+fsAB5YUEwAEAXILxuRe5OQbAAIxuAGADwAD+fgFquStgA8AA/n7AAeWKBMABAF2C8blKuV0GwACMcABgA8AA/n4BarlXYAPAAP5+wAHljwTAAQBegvG5brmBBsAAjHEAYAPAAP5+AWq5e2ADwAD+fsAB5ZQEwAEAX4LxuZK5qQbAAIxzAGADwAD+fgFquaFgA8AA/n7AAeWZBMABAGCC8bm6udMGwACMdQBgA8AA/n4BarnKYAPAAP5+wAHlngTAAQBhgvG55Ln3BsAAjHYAYAPAAP5+AWq58WADwAD+fsAB5aMEwAEAYoLxugi6GwbAAIx3AGADwAD+fgFquhVgA8AA/n7AATM1BMABAGOC8bosukYGwACMeABgA8AA/n4Baro8YAPAAP5+wAHlpgTAAQBkgvG6V7qCBsAAjHoAYAPAAP5+AWq6b2ADwAD+fsAB5asEwAEAZYLxupO6tgbAAIx8AGADwAD+fgFquqdgA8AA/n7AAeWwBMABAGaC8brHuuEGwACMfgBgA8AA/n4BarrXYAPAAP5+wAHltQTAAQBngvG68rshBsAAjIAAYAPAAP5+AWq7DGADwAD+fsAB5boEwAEAaILxuzK7VgbAAIyCAGADwAD+fgFqu0dgA8AA/n7AAeW/BMABAGmC8btnu4IGwACMhABgA8AA/n4Bart4YAPAAP5+wAEj6ATAAQBqgvG7k7u1BsAAjIUAYAPAAP5+AWq7p2ADwAD+fsAB5cQEwAEAa4Lxu8a73QbAAIyHAGADwAD+fgFqu9VgA8AA/n7AAeXJBMABAGyC8bvuvBwGwACMiABgA8AA/n4BarwIYAPAAP5+wAHlzATAAQBtgvG8LbxdBsAAjIoAYAPAAP5+AWq8SGADwAD+fsAB5dEEwAEAboLxvG68gwbAAIyMAGADwAD+fgFqvHxgA8AA/n7AAeXWBMABAG+C8byUvK0GwACMjQBgA8AA/n4BarykYAPAAP5+wAHl2wTAAQBwgvG8vrzeBsAAjI8AYAPAAP5+AWq80WADwAD+fsAB5eAEwAEAcYLxvO+9BgbAAIxFAGADwAD+fgFqvP5gA8AA/n7AAeXlBMABAHKC8b0XvSYGwACMkQBgA8AA/n4Bar0iYAPAAP5+wAHl6gTAAQBzgvG9N71QBsAAjJMAYAPAAP5+AWq9R2ADwAD+fsAB5e8EwAEAdILxvWG9jQbAAIyVAGADwAD+fgFqvXpgA8AA/n7AAeX0BMABAHWC8b2evbcGwACMlwBgA8AA/n4Bar2uYAPAAP5+wAHl+QTAAQB2gvG9yL3mBsAAjJkAYAPAAP5+AWq92mADwAD+fsAB5f4EwAEAd4Lxvfe+CgbAAIybAGADwAD+fgFqvgRgA8AA/n7AAeYDBMABAHiC8b4bviwGwACMnQBgA8AA/n4Bar4nYAPAAP5+wAHmCATAAQB5gvG+Pb5WBsAAjJ4AYAPAAP5+AWq+TWADwAD+foODBMABAHqC8b5nvpEGwACMnwBgA8AA/n4Bar5/YAPAAP5+wAHmDQTAAQB7gvG+zb7iBsAAjKEBar6XYAPAAPqEwAHmF2ADwAD+fgFqvtZgA8AA/n7AAeU8BMABAHyC8b8kv0gGwACMowFqvudgA8AA+oTAAeYrYAPAAP5+AWq/NWADwAD+fsAB5T8EwAEAfYLxv4u/sQbAAIylAWq/TWADwAD6hMAB5j9gA8AA/n4Bar+dYAPAAP5+wAHlRATAAQB+gvG/9MAAQBoGwACMpwFqv7ZgA8AA+oTAAeZTYAPAAP5+AWrAAEAGYAPAAP5+wAHlSQTAAQB/gvHAAEBbwABAfQbAAIypAWrAAEAfYAPAAPqEwAHmZ2ADwAD+fgFqwABAa2ADwAD+fsAB5U4EwAEAgILxwABAtcAAQMQGwACMqwFqwABAgmADwAD6hMAB5ntgA8AA/n4BasAAQLtgA8AA/n7AAeVTBMABAIGC8cAAQP7AAEERBsAAjK0BasAAQMlgA8AA+oTAAeaPYAPAAP5+AWrAAEEGYAPAAP5+wAHlWATAAQCCgvHAAEFTwABBdgbAAIyvAWrAAEEWYAPAAPqEwAHmo2ADwAD+fgFqwABBY2ADwAD+fsAB5V0EwAEAg4LxwABBt8AAQdkGwACMsQFqwABBe2ADwAD6hMAB5rdgA8AA/n4BasAAQcdgA8AA/n7AAeViBMABAISC8cAAQhjAAEI1BsAAjLMBasAAQd5gA8AA+oTAAebLYAPAAP5+AWrAAEIlYAPAAP5+wAHlZwTAAQCFgvHAAEJ5wABCoQbAAIy1AWrAAEI6YAPAAPqEwAHm32ADwAD+fgFqwABCjGADwAD+fsAB5WwEwAEAhoLxwABC5cAAQw0GwACMtwFqwABCpmADwAD6hMAB5vNgA8AA/n4BasAAQvhgA8AA/n7AAeVxBMABAIeC8cAAQ0/AAENzBsAAjLkBasAAQxJgA8AA+oTAAecHYAPAAP5+AWrAAENgYAPAAP5+wAHldgTAAQCIgvHAAEO3wABD3wbAAIy7AWrAAEN4YAPAAPqEwAHnG2ADwAD+fgFqwABDymADwAD+fsAB5XsEwAEAiYLxwABEHsAARDwGwACMvQFqwABD5GADwAD6hMAB5y9gA8AA/n4BasAARCxgA8AA/n7AAeWABMABAIqC8cAARH3AAESfBsAAjL8BasAAREFgA8AA+oTAAedDYAPAAP5+AWrAAESNYAPAAP5+wAHlhQTAAQCLgvHAAETfwABE/wbAAIzBAWrAAESkYAPAAPqEwAHnV2ADwAD+fgFqwABE7mADwAD+fsAB5YoEwAEAjILxwABFOMAARUkGwACMwwFqwABFBGADwAD6hMAB52tgA8AA/n4BasAART9gA8AA/n7AAeWPBMABAI2C8cAARYLAAEWTBsAAjMUBasAARU5gA8AA+oTAAed/YAPAAP5+AWrAAEWJYAPAAP5+wAHllATAAQCOgvHAAEXOwABF4wbAAIzHAWrAAEWYYAPAAPqEwAHnk2ADwAD+fgFqwABF12ADwAD+fsAB5ZkEwAEAj4LxwABGH8AARjYGwACMyQFqwABF6GADwAD6hMAB56dgA8AA/n4BasAARilgA8AA/n7AAeWeBMABAJCC8cAARm/AAEaABsAAjMsBasAARjtgA8AA+oTAAee7YAPAAP5+AWrAAEZ2YAPAAP5+wAHlowTAAQCRgvHAAEa5wABGygbAAIzNAWrAAEaFYAPAAPqEwAHnz2ADwAD+fgFqwABGwGADwAD+fsABMzUEwAEAkoLxwABHBsAARx4GwACMzwFqwABGz2ADwAD6hMAB5+NgA8AA/n4BasAARxFgA8AA/n7AAeWmBMABAJOC8cAAR2LAAEeLBsAAjNEBasAARyNgA8AA+oTAAef3YAPAAP5+AWrAAEd2YAPAAP5+wAHlqwTAAQCUgvHAAEfLwABH7AbAAIzTAWrAAEeQYAPAAPqEwAHoC2ADwAD+fgFqwABH22ADwAD+fsAB5bAEwAEAlYLxwABIKMAASEAGwACM1QFqwABH8WADwAD6hMAB6B9gA8AA/n4BasAASDNgA8AA/n7AAeW1BMABAJaC8cAASIbAAEizBsAAjNcBasAASEVgA8AA+oTAAegzYAPAAP5+AWrAAEicYAPAAP5+wAHlugTAAQCXgvHAAEj0wABJFgbAAIzZAWrAAEi4YAPAAPqEwAHoR2ADwAD+fgFqwABJBGADwAD+fsAB5b8EwAEAmILxwABJU8AASWwGwACM2wFqwABJG2ADwAD6hMAB6FtgA8AA/n4BasAASV5gA8AA/n7AASPoBMABAJmC8cAASazAAEnMBsAAjN0BasAASXFgA8AA+oTAAehvYAPAAP5+AWrAAEm7YAPAAP5+wAHlxATAAQCagvHAAEoHwABKHAbAAIzfAWrAAEnRYAPAAPqEwAHog2ADwAD+fgFqwABKEGADwAD+fsAB5ckEwAEAm4LxwABKYsAASo4GwACM4QFqwABKIWADwAD6hMAB6JdgA8AA/n4BasAASndgA8AA/n7AAeXMBMABAJyC8cAAStXAAEsDBsAAjOMBasAASpNgA8AA+oTAAeirYAPAAP5+AWrAAErrYAPAAP5+wAHl0QTAAQCdgvHAAEs9wABLUAbAAIzlAWrAAEsIYAPAAPqEwAHov2ADwAD+fgFqwABLRWADwAD+fsAB5dYEwAEAnoLxwABLjMAAS6MGwACM5wFqwABLVWADwAD6hMAB6NNgA8AA/n4BasAAS5ZgA8AA/n7AAeXbBMABAJ+C8cAAS+LAAEwABsAAjOkBasAAS6hgA8AA+oTAAejnYAPAAP5+AWrAAEvwYAPAAP5+wAHl4ATAAQCggvHAAEw7wABMUAbAAIzrAWrAAEwFYAPAAPqEwAHo+2ADwAD+fgFqwABMRGADwAD+fsAB5eUEwAEAoYLxwABMh8AATJQGwACM7QFqwABMVWADwAD6hMAB6Q9gA8AA/n4BasAATIxgA8AA/n7AAeXqBMABAKKC8cAATNDAAEznBsAAjO8BasAATJlgA8AA+oTAAekjYAPAAP5+AWrAAEzaYAPAAP5+wAHl7wTAAQCjgvHAAE0swABNVgbAAIzxAWrAAEzsYAPAAPqEwAHpN2ADwAD+fgFqwABNQGADwAD+fsAB5fQEwAEApILxwABNksAATakGwACM8wFqwABNW2ADwAD6hMAB6UtgA8AA/n4BasAATZxgA8AA/n7AAeX5BMABAKWC8cAATefAAE4DBsAAjPUBasAATa5gA8AA+oTAAelfYAPAAP5+AWrAAE30YAPAAP5+wAHl/gTAAQCmgvHAAE48wABOTQbAAIz3AWrAAE4IYAPAAPqEwAHpc2ADwAD+fgFqwABOQ2ADwAD+fsAB5gMEwAEAp4LxwABOhcAATpQGwACM+QFqwABOUmADwAD6hMAB6YdgA8AA/n4BasAATotgA8AA/n7AAeYIBMABAKiC8cAATtDAAE7nBpUtAWrAAE6ZYAPAAPqEwAHpm2ADwAD+fgFqwABO2mADwAD+foODBMABAKmC8cAATyvAAE9TBsAAjPwBasAATuxgA8AA+oTAAemvYAPAAP5+AWrAAE8+YAPAAP5+wAHmDQTAAQCqgvHAAE+IwABPnwbAAIz+AGADwAD+fgFqwABPl2ADwAD+fsAB6b4EwAEAq4LxwABPsMAAT84GwACNAABgA8AA/n4BasAAT8JgA8AA/n7AAenDBMABAKyC8cAAUArAAFAfBsAAjQIBasAAT9RgA8AA+oTAAenNYAPAAP5+AWrAAFATYAPAAP5+wAHpvgTAAQCtgvHAAFBdwABQeQbAAI0EAWrAAFAkYAPAAPqEwAHp4WADwAD+fgFqwABQamADwAD+fsAB6cMEwAEAroLxwABQi8AAUVoGwACNBgBdA8AA/TsBYAPAAP5+AWrAAFCcXQPAAP07AWADwAD+fsAB6fAEwAEAr4LxwABRmMAAUbgGwACNBwFqwABRYGADwAD6hMAB6h9dA8AA/TsBYAPAAP5+AWrAAFGqXQPAAP07AWADwAD+fsAB6fAEwAEAsILxwABRysAAUs8GwACNCQBdA8AA/TsBYAPAAP5+AWrAAFHaXQPAAP07AWADwAD+fsAB6i4EwAEAsYLxwABTDMAAUyoGwACNCgFqwABS1WADwAD6hMAB6mNdA8AA/TsBYAPAAP5+AWrAAFMdXQPAAP07AWADwAD+fsAB6i4EwAEAsoLxwABTPMAAVBMGwACNDABdA8AA/TsBYAPAAP5+AWrAAFNOXQPAAP07AWADwAD+fsAB6nIEwAEAs4LxwABUUsAAVHQGwACNDQFqwABUGWADwAD6hMAB6qNdA8AA/TsBYAPAAP5+AWrAAFRlXQPAAP07AWADwAD+fsAB6nIEwAEAtILxwABUhsAAVjwGwACNDwBdA8AA/TsBYAPAAP5+AWrAAFSXXQPAAP07AWADwAD+fsAB6rIEwAEAtYLxwABWesAAVpoGwACNEAFqwABWQmADwAD6hMAB6wtdA8AA/TsBYAPAAP5+AWrAAFaMXQPAAP07AWADwAD+fsAB6rIEwAEAtoLxwABXEcAAVxUYwABNYwBgA8AA+uMBKwTAAQC3gvHAAFeWwABXnRjAAIkNAGADwAD64wErBMABALiC8cAAWDXAAFhEGMAAjRIAYAPAAPrjASsEwAEAuYLxwABYq8AAWK8YlogAYAPAAP5+ASsEwAEAuoLxwABZE8AAWRcYlokAYAPAAPyXASsEwAEAu4LxwABZ/sAAWgkYnn4AYAPAAQDeASsEwAEAvILxwABaUsAAWl8YwACNEwBgA8AA/JcBKwTAAQC9gvHAAFqwwABaxBieeABgA8AA+tEBKwTAAQC+gvHAAFsZwABbMBjAAI0UAGADwAD60QErAQXAAQDKAAAAAAQAAAMAAAAAAAAAAABgA8ABAEoBPwEJAQDAAP36AAAAAAkGwAEAwILxwABbzMAAW+LAAFvxAwJLAAAAAQPAAFvkwABb8QAAAAEBAcAAW+wAAACAvWADwAD+fgAAXQPAAP07AWADwAD+fgAGwAEAwYLxwABc2sAAXOHAAFzzAAKAlgAAAAEDwABc5sAAXPMAAAABAQHAAFzuAAAAgL1gA8AA/n4AAGADwAD+fgAGwAEAwoLxwABewMAAXsXAAF7jAAJWAAAAAQPAAF7IwABe4wAAAAICAsAAXtAAAACAvWADwAD+fgDAAF7dAAAAgJZgA8AA/eQAAFwABsABAMOC8cAAX3bAAF97wABfmQACl1AAAAABA8AAX37AAF+ZAAAAAgICwABfhgAAAIC9YAPAAP5+AMAAX5MAAACAlmADwAD95AAAXAAGwAEAxILxwABgd8AAYHzAAGCdAAKEXgAAAAEDwABggsAAYJ0AAAACAgLAAGCKAAAAgL1gA8AA/n4AwABglwAAAICWYAPAAP3kAABcAAbAAQDFgvHAAGGGwABhi8AAYaEAApcpAAAAAQPAAGGUwABhoQAAAAEBAcAAYZwAAACAvWADwAD+fgAAXAAGwAEAxoLxwABiPsAAYkPAAGJ0AAKD/QAAAAEDwABiSsAAYnQAAAABAQHAAGJQAAAAgaZhAwJgA8AA/n5dA8AA/TsBYAPAAP5+XAAAXAAGwAEAx4LxwABji8AAY5DAAGOmAALAAI0VAAAAAQPAAGOZwABjpgAAAAEBAcAAY6EAAACAvWADwAD+fgAAXAAGwAEAyILxwABkbMAAZHHAAGR4AAKCRgAAAAEDwABkdsAAZHgAAAAAAAAAXAAAAIGaVQCBmp0AgZrfAIGbKwCBm3gAgZvFAIGcAgCBnFAAgZyPAIGcvAAAAAkCwAEAy4LxwABoDMAAaBvAAGx3B8AAjRYAAAFgAcAA/eQAAAAABQbAAQDNgvHAAGiAwABoiMAAaP0EAQAAAAABA8AAaJPAAGj9AAAAAgACwABonAAAAICWYAPAAP5+AWrAAGikYAPAAP5+hCjAAGi8AAAAmrtdA8AA/W0CYAPAAP5+YAPAAP5+AWoAYAPAAP2heQBgA8ABAMsBPgFKwABozwEfwABo2sABAkUCAAKAwABo58CBnTiBwABo7sCBnVUABsABAM+C8cAAaYbAAGmZwABqzQABgwsAAAABA8AAaZ7AAGrNAAAABAEBwABppgAAAICWYAPAAP5+AAPAAGm7AAAAwACNF2ADwAD+fgFqwABpz2ADwAD+fsAAuyjAAGnhAAAAwACNGGADwAD+fgFqwABp8WADwAD9oXnAAGoCAAAAwACNGWADwAD60QFqwABqFWADwAD60QBgA8ABAMsBPgFKwABqIwEewABqN8ABAjwEAAGAwABqPcCBndQDwACNF4HAAGpgwIGd5cAAjRiCwABqjMCBngbAAI0Zg8AAarfAgZ4kBsABANKC8cAAavrAAGsFwABrCgECgJYAAAABA8AAawrAAGsKAAAAAAAAAGADwAD+fgAGwAEA04LxwABrucAAa9HAAGvbAQKauwAAAAEDwABr28AAa9sAAAAAAAAAXQPAAP1tAmADwAD+fmADwAD+fgAGwAEA0ILxwABsZMAAbGvAAGx1AAIjAAAAAQPAAGxzwABsdQAAAAAAAABgA8AA/n4AAACBnQ8AgZ2qAIGejgCBnsAAgZ7/AIGfMAAAAAUCwAEA1ILxwABsesAAbInAAG51B8AAjRoAAAFgAcAA/eQAAV0BwAD9bQJbWwABBcABAN0AAAAABAAAAwAAAAAAAAAAAGADwAEA1AE/AQkBAMAA/foAAAAABAbAAQDWgvHAAGzewABs6cAAbOsBArQSAAAAAQPAAGzrwABs6wAAAAAAAABgA8AA/n4ABsABANmC8cAAbYnAAG2OwABtlwACwAB/nAAAAAEDwABtlcAAbZcAAAAAAAAAXAAGwAEA24LxwABt8MAAbfnAAG4TAgLAAHAPAAAAAQPAAG4CwABuEwAAAAEBAcAAbggAAACZ8WEDAFwAAFwABsABANeC8cAAbmXAAG5uwABucwECuZEAAAABA8AAbnPAAG5zAAAAAAAAAGADwAD60QAAAIGfpgCBn9gAgaAHAIGgRACBoHYAAAAEAsABAN6C8cAAbtPAAG7iwAB4oAeeYwAAAWABwAD95AABYAHAAQDLCATAAQDggvHAAG+BwABvugWBsgBgA8ABAN4BHsAAb4zAAQDpAwACJ4GyJ8AAjRsBwAB8uCfAAHRDBMABAOGC8cAAb+3AAG/4BcAAjRwBasAAb79gA8AA+oTAAesfYAPAAQDeARrAAG/0wAEA4ATAAQDigvHAAHBvwABwpwWxVABgA8ABAN4BHsAAcHrAAQDpAwACJ4GyJ7FUAcAAfLgnwAB0QwTAAQDjgvHAAHDawABw5QXAAI0eAWrAAHCsYAPAAPqEwAHrM2ADwAEA3gEawABw4cABAOIEwAEA5ILxwABxY8AAcaIFgmQAYAPAAQDeAR7AAHFuwAEA6QMAAiepZSeCZAHAAHy4J8AAdEMEwAEA5YLxwABx1cAAceAFwACNIAFqwABxp2ADwAD6hMAB60dgA8ABAN4BGsAAcdzAAQDkBMABAOaC8cAAcknAAHKABYJ4AGADwAEA3gEewAByVsABAOkCAAInqWUnwACNIgAEwAEA54LxwABytcAAcsQFvNEBasAAcoVgA8AA+oTAAetbYAPAAQDeARrAAHK+wAEA5gAGBsABAOmC8cAAdMHAAHTJwAB1fQQBAAAAAAEDwAB01MAAdX0AAAAEAgLAAHTcAAAAwACNJGADwAD+fgDAAHTwAAAAwACNJWADwAD+fgACwAB1BwAAAMAAfLhgA8AA/n4BagBgA8AA/aF5wAB1JAAAAJq7XQPAAP1tAmADwAD+fmADwAD+fgFqAGADwAD9oXlgA8ABAN4BPgFKwAB1NwEfwAB1QsABAlMEAASAwAB1T8CBooOBwAB1XMCBopWCwAB1ZcCBoqiDwAB1bsCBosMABsABAOuC8cAAdzrAAHdNwAB3iwABgwsAAAABA8AAd1LAAHeLAAAAAQEBwAB3WgAAAICWYAPAAP5+AABgA8ABAN4BPgFKwAB3ZwEewAB3e8ABAkwBAAGAwAB3gcCBo1MABsABAO2C8cAAd83AAHfYwAB34AECwAB86wAAAAEDwAB34MAAd+AAAAAAAAAAYAPAAP5+AAbAAQDugvHAAHgNwAB4GMAAeCMBAsAAjSQAAAABA8AAeCPAAHgjAAAAAAAAAGADwAD+fgAGwAEA74LxwAB4TMAAeFfAAHheAQLAAI0lAAAAAQPAAHhewAB4XgAAAAAAAABgA8AA/n4ABsABAPCC8cAAeIzAAHiXwAB4ngECwAB8uAAAAAEDwAB4nsAAeJ4AAAAAAAAAYAPAAP5+AAAAgaJaAIGjKQCBo4kAgaO9AIGj8QCBpCUAgaRZAAAABgLAAQDxgvHAAHnYwAB558AAgfEHwACNJgAAAWABwAD95AAACATAAQDzgvHAAHtUwAB7WBiAvQBgA8AA/n4BKwTAAQD0gvHAAHzSwAB81xiAlgBgA8AA/n4BKwTAAQD1gvHAAH0cwAB9IxjAAIkNAGADwAD64wErBMABAPaC8cAAfanAAH2vGMAAjScAYAPAAPyXASsEwAEA94LxwAB97sAAffQYt1wAYAPAAP5+ASsEwAEA+ILxwAB+RcAAfkkYTgBgA8AA/n4BKwTAAQD5gvHAAH6cwAB+ohjAAHgYAGADwAD60QErBMABAPqC8cAAfyjAAH8wGMAAjSgAYAPAAPrRASsAAwbAAQD8gvHAAIAZwACAIcAAgF4EAQAAAAABA8AAgCfAAIBeAAAAAgICwACALwAAAIC9YAPAAP5+AMAAgDwAAACAlmADwAD+fgAAYAPAAQDxAUrAAIBGAR/AAIBKwAECbgIAAoDAAIBSwIGlqIHAAIBYwIGluAAGwAEA/YLxwACAxMAAgMzAAIEqBAHAAI0pAAAAAQPAAIDlwACBKgAAAAEBAcAAgO0AAACAlmADwAD+fgAAYAPAAQDxAT4BSsAAgPoBH8AAgQXAAQJvAQABgMAAgSDAgaYhAAbAAQD/gvHAAIHewACB5cAAge8AAiMAAAABA8AAge3AAIHvAAAAAAAAAGADwAD+fgAAAIGlfwCBpfUAgaZXAIGmiAAAAAMCwAEBAILxwACJK8AAiTrAAJKEB8AAjSoAAAFgAcAA/eQAAV0BwAC6HAFgA8AA47oAAQXAAQEPAAAAAAQAAAMAAAAAAAAAAABgA8ABAQABPwEJAQDAAP36AAAAAAwGwAEBAoLxwACJ+sAAigLAAIoPAQLAAI0TAAAAAQPAAIoPwACKDwAAAAAAAABgA8AA/JcABsABAQOC8cAAilvAAIpmwACKbAEClnMAAAABA8AAimzAAIpsAAAAAAAAAGADwAD+fgAGwAEBBILxwACK7cAAivXAAIr4AQKArAAAAAEDwACK+MAAivgAAAAAAAAAYAPAAP7/AAbAAQEFgvHAAIyuwACMtsAAjMIBAsAAjSsAAAABA8AAjMLAAIzCAAAAAAAAAGADwAD+/wAGwAEBBoLxwACNIcAAjTHAAI04AQKefQAAAAEDwACNOMAAjTgAAAAAAAAAYAPAAQBKAAbAAQEHgvHAAI2DwACNlMAAjZsBAsAAjSwAAAABA8AAjZvAAI2bAAAAAAAAAF0DwAD9OwFgA8ABAPEABsABAQiC8cAAjenAAI3ywACOBgECnngAAAABA8AAjgbAAI4GAAAAAAAAAGADwAD60QAGwAEBCYLxwACPFMAAjyjAAI8zAQLAAISDAAAAAQPAAI8zwACPMwAAAAAAAABgA8AA86UABsABAQqC8cAAkCXAAJA1wACQPAECwACNLQAAAAEDwACQPMAAkDwAAAAAAAAAYAPAAQDUAAbAAQELgvHAAJCdwACQqMAAkLcBAsAAjS4AAAABA8AAkLfAAJC3AAAAAAAAAGADwAD+fgAGwAEBDILxwACRMcAAkUjAAJFWAQKeegAAAAEDwACRVsAAkVYAAAAAAAAAYAPAAQGAAAbAAQENgvHAAJJpwACSesAAkoIBAoNXAAAAAQPAAJKCwACSggAAAAAAAABgA8ABARAAAACBpvoAgacuAIGnYACBp5IAgafGAIGn+ACBqDMAgahlAIGomQCBqM0AgakBAIGpMwCBqWUAAAAMAsABARCC8cAAmazAAJm7wACnvgfAAI0vAAABYAHAAP3kAAFgAcAA8W4GBMABARKC8cAAmvXAAJsCGMAAjRMAYAPAAPyXASsEwAEBE4LxwACcusAAnMQYg1gAYAPAAPyXASsEwAEBFILxwACeE8AAnh8Yg1wAYAPAAP5+ASsEwAEBFYLxwACey8AAnt8YnngAYAPAAPrRASsEwAEBFoLxwACgacAAoHEYwACNMABgA8AA+20BKwTAAQEXgvHAAKFowAChdBieeQBgA8AA+tEBKwEFwAEBIAAAAAAEAAADAAAAAAAAAAAAYAPAAQEQAT8BCQEAwAD9+gAAAAAFBsABARmC8cAAoi/AAKI/wACiRgECnn0AAAABA8AAokbAAKJGAAAAAAAAAGADwAEASgAGwAEBGoLxwACil8AAoqjAAKKvAQLAAI0sAAAAAQPAAKKvwACirwAAAAAAAABdA8AA/TsBYAPAAQDxAAbAAQEdgvHAAKR1wACkfMAApL0AAsAAQFUAAAABA8AApITAAKS9AAAAAgEBwACkiQAAAIRgYAPAAP7/AAHAAKSYAAAAuYlgA8AA/JcBasAApKtgA8AA/JfAAYwRXQPAALloAVsABsABAR6C8cAApufAAKb2wACnHQACwACNMQAAAAEDwACnAsAApx0AAAABAAABwACnCQAAAMAAjTJgA8AA+tEBasAApxdgA8AA+tF3XQPAALloAWADwAD1MwAGwAEBG4LxwACnl8AAp67AAKe8AQKeegAAAAEDwACnvMAAp7wAAAAAAAAAYAPAAQGAAAAAgaqaAIGqzACBqwcAgatsAIGrxQCBq/cAAAAFAsABASGC8cAAthvAALYqwADvsQeeZAAAAWABwAD95AAACQTAAQEjgvHAALZKwAC2XgbAAI0zAGADwAD8lwFqwAC2XGADwAD8l746BMABASSC8cAAtqDAALbDBsAAjTQBasAAtmNgA8AA+oTAAetvYAPAAPyXAWrAALa0YAPAAPyXvjoEwAEBJYLxwAC22cAAtu8GwACNNgBgA8AA/JcBasAAtuxgA8AA/JfAAet+BMABASaC8cAAtzLAALdXBsAAjTcBasAAtvRgA8AA+oTAAeuHYAPAAPyXAWrAALdHYAPAAPyXwAHrfgTAAQEngvHAALfwwAC3+xjAAIxHAGADwAD7bQErBMABASiC8cAAuUrAALlbGMAAjTkAYAPAAPttASsEwAEBKYLxwAC6YsAAuncYwAB9LQBgA8AA/JcBKwTAAQEqgvHAAL6QwAC+nhjAAI06AGADwAD60QErBMABASuC8cAAv9LAAL/bGMAAjTsAYAPAAP5+ASsAFwbAAQEtgvHAAL/gwAC/6MAAwMEEAQAAAAABA8AAv/LAAMDBAAAAAQAAAcAAwAQAAACCV2ADwAD0UgFqAGADwAD9oXlgA8ABASEBPgNOwADAIsAAwCwAAMAAgXlgA8ABBiUBGsAAwDzAAQYqScAAwEkcwADAV4HAAMBNwIGt3EgBAAErAMAA/fE+AUrAAMBoAR/AAMBzwAEELgEAAYDAAMB/wIGtuQA/SsAAwJMBHMAAwKSBwADAmsCBrdzAAI08AQABgMAAwLXAga25AMABBjAGwAEBL4LxwADDwsAAw9zAAMQaAAKlbQAAAAEDwADD4MAAxBoAAAAEBATAAMPvAAAAlnNgA8AA/n4AwADD/gAAAJaIYAPAAP5+AMAAxAgAAACWiWADwAD8lwDAAMQVAAAATmADwAD+fgAAXQPAALloAWADwAEBRgAGwAEBMILxwADGhsAAxqDAAMa/AALAAI09AAAAAQPAAManwADGvwAAAAICAsAAxq8AAACWc2ADwAD+fgDAAMa7AAAAwABJkGADwAD+/wAAXQPAALloAWADwAEBRgAGwAEBMYLxwADHr8AAx8nAAMfwAAKafAAAAAEDwADHzMAAx/AAAAADAwPAAMfUAAAAlohgA8AA/n4AwADH3gAAAJaJYAPAAPyXAMAAx+sAAABOYAPAAP5+AABdA8AAuWgBYAPAAQFGAAbAAQEygvHAAMiJwADIo8AAyLIAAoNVAAAAAQPAAMipwADIsgAAAAEBAcAAyK4AAADAAEmQYAPAAP7/AABdA8AAuWgBYAPAAQFGAAbAAQEzgvHAAMmjwADJvcAAyeUAAsAAfLEAAAABA8AAycHAAMnlAAAAAwMDwADJyQAAAJaIYAPAAP5+AMAAydMAAACWiWADwAD8lwDAAMngAAAATmADwAD+fgAAXQPAALloAWADwAEBRgAGwAEBNILxwADKf8AAypnAAMqpAAKedQAAAAEDwADKoMAAyqkAAAABAQHAAMqlAAAAwABJkGADwAD+/wAAXQPAALloAWADwAEBRgAGwAEBNYLxwADLlMAAy67AAMvVAAKXhQAAAAEDwADLscAAy9UAAAADAwPAAMu5AAAAlohgA8AA/n4AwADLwwAAAJaJYAPAAPyXAMAAy9AAAABOYAPAAP5+AABdA8AAuWgBYAPAAQFGAAbAAQE2gvHAAMxuwADMiMAAzJcAAsAAjT4AAAABA8AAzI7AAMyXAAAAAQEBwADMkwAAAMAASZBgA8AA/v8AAF0DwAC5aAFgA8ABAUYABsABATeC8cAAzYXAAM2fwADNyQACwABHGgAAAAEDwADNpcAAzckAAAADAwPAAM2tAAAAlohgA8AA/n4AwADNtwAAAJaJYAPAAPyXAMAAzcQAAABOYAPAAP5+AABdA8AAuWgBYAPAAQFGAAbAAQE4gvHAAM5lwADOf8AAzpEAAsAAjT8AAAABA8AAzojAAM6RAAAAAQEBwADOjQAAAMAASZBgA8AA/v8AAF0DwAC5aAFgA8ABAUYABsABATmC8cAAz37AAM+YwADPwQACnYEAAAABA8AAz53AAM/BAAAAAwMDwADPpQAAAJaIYAPAAP5+AMAAz68AAACWiWADwAD8lwDAAM+8AAAATmADwAD+fgAAXQPAALloAWADwAEBRgAGwAEBOoLxwADQXMAA0HbAANCHAALAAI1AAAAAAQPAANB+wADQhwAAAAEBAcAA0IMAAADAAEmQYAPAAP7/AABdA8AAuWgBYAPAAQFGAAbAAQE7gvHAANFzwADRjcAA0bUAAoPvAAAAAQPAANGRwADRtQAAAAMDA8AA0ZkAAACWiGADwAD+fgDAANGjAAAAlolgA8AA/JcAwADRsAAAAE5gA8AA/n4AAF0DwAC5aAFgA8ABAUYABsABATyC8cAA0k/AANJpwADSeQACwACNQQAAAAEDwADScMAA0nkAAAABAQHAANJ1AAAAwABJkGADwAD+/wAAXQPAALloAWADwAEBRgAGwAEBQoLxwADW58AA1uvAANctAgLAAI1CAAAAAQPAANb3wADXLQAAAAEBAcAA1wUAAACBpmEDA2ADwAD+/2ADwAD+fmADwAD+fl0DwAC5aAFgA8AA+tEAAFwABsABAT2C8cAA133AANeCwADXygACwACNQwAAAAEDwADXkMAA18oAAAADAwPAANeVAAAAwABJkGADwAD+/wDAANehAAAAwACNRGADwAD+fgDAANe+AAAAwACNRWADwAEBdwAAXAAGwAEBQ4LxwADbCcAA2w3AANspAgLAAI1GAAAAAQPAANsWwADbKQAAAAEBAcAA2x4AAACBpmEDAWADwAD+/2ADwAD+fgAAXAAGwAEBPoLxwADjYcAA42/AAOSdAAHAAI1HAAAAAQPAAOOHwADknQAAAAIBAcAA44wAAADAAEmQYAPAAP7/AAHAAOOsAAAAgIldA8AA/W0CYAPAAP5+YAPAAP5+AWoAYAPAAP2heWADwAD+fgE+A07AAOPOwADj2AAAwACBeWADwAEGJQEawADj6MABBipJwADj9RzAAOQDgsAA4/nAgbTpSAEAASsAwAD98T4BSsAA5BQBHsAA5CfAAQQsAgACgMAA5EHAgbSmgcAA5EbAgbS5AD9KwADkXgEcwADkb4LAAORlwIG06cAAjUcCAAKAwADkiMCBtKaBwADkjcCBtLkAwAEGMQbAAQFEgvHAAOehwADnpcAA6AECAsAAjUgAAAABA8AA57bAAOgBAAAAAQEBwADnywAAAIGmYQMEYAPAAP5+YAPAAPyXYAPAAP5+YAPAAP5+XQPAALloAWADwAD60QAAXAAGwAEBP4LxwADoUMAA6FXAAOi3AALAAI1JAAAAAQPAAOhowADotwAAAAQEBMAA6HcAAACWiGADwAD+fgDAAOiBAAAAlolgA8AA/JcAwADojgAAAMAAjURgA8AA/n4AwADoqwAAAMAAjUVgA8ABAXcAAFwABsABAUWC8cAA7VDAAO1UwADtrQICwACNSgAAAAEDwADtasAA7a0AAAABAQHAAO13AAAAmfFhAwNgA8AA86VgA8AA/n5gA8AA/JdgA8AA+tEAAFwABsABAUCC8cAA75DAAO+VwADvrwACgowAAAABA8AA75rAAO+vAAAAAQAAAcAA76EAAACedmADwAD60QFqwADvqGADwAD60QBcAAAAga2PAIGuXwCBrtcAga80AIGvnACBr+cAgbBRAIGwnACBsQQAgbFRAIGxuwCBsggAgbJwAIGyvQCBsyUAgbNyAIGzzQCBtDIAgbR6AIG1fgCBtd8AgbZSAIG2pgCBtu8AAAAXAsABAUaC8cAA9KvAAPS6wAD/ageeZQAAAWABwAD95AABYAHAAPFuBQTAAQFIgvHAAPVawAD1bhieeABgA8AA+tEBKwTAAQFJgvHAAPi0wAD4wxjAAI1LAGADwAD60QErBMABAUqC8cAA+b7AAPnKGMAAjUwAYAPAAPyXASsEwAEBS4LxwAD6/8AA+wwYwACNEwBgA8AA/JcBKwTAAQFMgvHAAPwIwAD8FBieeQBgA8AA+tEBKwEFwAEBVwAAAAAEAAADAAAAAAAAAAAAYAPAAQFGAT8BCQEAwAD9+gAAAAAHBsABAU6C8cAA+fvAAPoGwAD6DAEClnMAAAABA8AA+gzAAPoMAAAAAAAAAGADwAD+fgAGwAEBT4LxwAD6OsAA+kLAAPpFAQKArAAAAAEDwAD6RcAA+kUAAAAAAAAAYAPAAP7/AAbAAQFQgvHAAPzmwAD89sAA/P0BAp59AAAAAQPAAPz9wAD8/QAAAAAAAABgA8ABAEoABsABAVGC8cAA/U7AAP1fwAD9ZgECwACNLAAAAAEDwAD9ZsAA/WYAAAAAAAAAXQPAAP07AWADwAEA8QAGwAEBUoLxwAD+OMAA/lfAAP5bAQKfzgAAAAEDwAD+W8AA/lsAAAAAAAAAXQPAALloAWADwAEBWAAGwAEBVYLxwAD+q8AA/sbAAP7NAAKCjAAAAAEDwAD+y8AA/s0AAAAAAAAAXQPAALloAWADwAEBWAAGwAEBU4LxwAD/Q8AA/1rAAP9oAQKeegAAAAEDwAD/aMAA/2gAAAAAAAAAYAPAAQGAAAAAgbg1AIG4ZwCBuJkAgbjLAIG5BgCBuT8Agbl4AIG5qgAAAAcCwAEBWILxwAEBicABAZjAARDcB8AAjU0AAAFgAcAA/eQAAV0BwAC6HAFdA8AA/TsBYAPAAPyXAAEFwAEBaQAAAAAEAAADAAAAAAAAAAAAYAPAAQFYAT8BCQEAwAD9+gAAAAANBsABAVqC8cABApLAAQKawAECpAECg1gAAAABA8ABAqTAAQKkAAAAAAAAAGADwAD8lwAGwAEBW4LxwAEDlcABA6DAAQOsAQKDXAAAAAEDwAEDrMABA6wAAAAAAAAAYAPAAP5+AAbAAQFcgvHAAQT2wAEE/sABBQsBAsAAjRMAAAABA8ABBQvAAQULAAAAAAAAAGADwAD8lwAGwAEBXYLxwAEGKsABBmHAAQZxAQLAAI1OAWrAAQYrYAPAAMvSwAHh8QAAAQPAAQZxwAEGcQAAAAAAAABgA8ABAWoABsABAV6C8cABB5fAAQegwAEHtAECnngAAAABA8ABB7TAAQe0AAAAAAAAAGADwAD60QAGwAEBX4LxwAEIqcABCLLAAQi8AQLAAI1PAAAAAQPAAQi8wAEIvAAAAAAAAABgA8AA+tEABsABAWCC8cABCajAAQm/wAEJyAECwACNUAAAAAEDwAEJyMABCcgAAAAAAAAAXQPAAP07AWADwAEBhwAGwAEBZoLxwAEM4cABDPzAAQ03AALAAEBVAAAAAQPAAQ0EwAENNwAAAAMAA8ABDRQAAACWc2ADwAD+fgFqAGADwAD9oXnAAQ0gAAAAwABJkGADwAD+/wFqAGADwAD9oXnAAQ0qAAAAwACNUWADwAD60QFqAGADwAD9oXkAXQPAALloAWADwAEBWAAGwAEBYYLxwAENp8ABDbfAAQ2+AQKefQAAAAEDwAENvsABDb4AAAAAAAAAYAPAAQBKAAbAAQFngvHAAQ7ywAEPAcABDw8AAsAAjTEAAAABA8ABDw3AAQ8PAAAAAAAAAF0DwAC5aAFgA8AA9TMABsABAWKC8cABD1/AAQ9wwAEPdwECwACNLAAAAAEDwAEPd8ABD3cAAAAAAAAAXQPAAP07AWADwAEA8QAGwAEBY4LxwAEQHMABEDDAARA7AQLAAISDAAAAAQPAARA7wAEQOwAAAAAAAABgA8AA86UABsABAWSC8cABELXAARDMwAEQ2gECnnoAAAABA8ABENrAARDaAAAAAAAAAGADwAEBgAAAAIG6MwCBumUAgbqXAIG6ywCBuw4AgbtAAIG7dACBu68Agbw5AIG8awCBvKYAgbzhAIG9FQCBvUcAAAANAsABAWqC8cABErDAARLDwAEYSQvAAI1SAWrAARKxYAPAAMvSwAHh8QABYAHAAP3kAAAGBMABAWyC8cABEsPAARLDCScAYAPAAPyXAATAAQFugvHAARLDwAESwwkowAEAGABgA8AA/n4ABMABAW+C8cABEsPAARLDBikAXQPAAP07AWADwAEBagFqAF0DwAD9OwFgA8ABAWrAAevhBMABAXCC8cABFAPAARQDBsAAjVYAYAPAAQFqAWoAYAPAAQFqwAHrmwTAAQFxgvHAARYLwAEWCwbAAI1XAGADwAEBagFqAGADwAEBasAB67QEwAEBcoLxwAEYPcABGD0GwACNWABgA8ABAWoBagBgA8ABAWrAAevNAQXAAQF2gvHAARLDwAESw8ABGEkBAAADwAESw8ABGEkAAAACAgLAARLDAAAEJ2ADwAD8lwDAARLDAAAEKGADwAD+fgAAYAPAAQFqAT8DCADAAQFsgADAgb6+CADAAQFugQDAgb7NCQAAwAD9+gAAAAABBsABAXSC8cABEsPAARLDwAEYSQAAIwAAAAEDwAESw8ABGEkAAAAAAAAAYAPAAP5+AUoAAQ8ALsABAW4AAIG/CgCBv0UAAAABAsABAXeC8cABGEzAARhbwAEYcgfAAI1ZAAABYAHAAP3kAAAAAQXAAQF5AAAAAAQAAAMAAAAAAAAAAABgA8ABAXcBPwEJAQDAAP36AAAAAAAAAIG/ogAAAAACwAEBeoLxwAEYscABGMDAARmAB8AAjVoAAAFgAcABAXcAAAAAAQbAAQF8gvHAARj9wAEZBcABGX4EAQAAAAABA8ABGR/AARl+AAAAAgICwAEZJwAAAMAAjVtgA8AA/n4AwAEZOAAAAMAAgN1gA8AA/n4AAGADwAEBegFKwAEZSwEfwAEZT8ABBR4CAAKAwAEZa8CBv/qBwAEZdcCBwAwAAACBv9EAgcBLAAAAAQLAAQF9gvHAARpRwAEaYMABGyMHwACNXAAAAWABwAEBdwAAAAABBsABAX+C8cABGp7AARqmwAEbIQQBAAAAAAEDwAEawcABGyEAAAACAgLAARrJAAAAwACNW2ADwAD+fgDAARraAAAAwACA3WADwAD+fgAAYAPAAQF9AUrAARrtAR/AARrxwAEFKgIAAoDAARsOwIHAp4HAARsYwIHAuQAAAIHAfgCBwPgAAAABAsABAYCC8cABG6HAARuwwAEcFQfAAI1dAAABYAHAAP3kAAAAAQXAAQGGAAAAAAQAAAMAAAAAAAAAAABgA8ABAYABPwEJAQDAAP36AAAAAAMGwAEBgoLxwAEbx8ABG9vAARvoAQKeewAAAAEDwAEb6MABG+gAAAAAAAAAYAPAAPSJAAbAAQGDgvHAARvswAEb9MABG/4BAp58AAAAAQPAARv+wAEb/gAAAAAAAABgA8AA/JcABsABAYSC8cABHALAARwKwAEcEwECwAB/+wAAAAEDwAEcE8ABHBMAAAAAAAAAYAPAAPyXAAAAgcFVAIHBhwCBwbkAgcHtAAAAAwLAAQGHgvHAARw5wAEcSMABHUsHwACNXgAAAWABwAD95AAAAAEFwAEBjQAAAAAEAAADAAAAAAAAAAAAYAPAAQGHAT8BCQEAwAD9+gAAAAADBsABAYmC8cABHJnAARyhwAEcqwECg1gAAAABA8ABHKvAARyrAAAAAAAAAGADwAD8lwAGwAEBioLxwAEc68ABHPbAARz8AQKWcwAAAAEDwAEc/MABHPwAAAAAAAAAYAPAAP5+AAbAAQGLgvHAAR05wAEdQcABHUkBAoRgAAAAAQPAAR1JwAEdSQAAAAAAAABgA8AA/v8AAACBwlIAgcKEAIHCtgCBwugAAAADAsABAY6C8cABHm3AAR58wAEewAfAAI1fAAABYAHAAP3kAAAAAQXAAQGTAAAAAAQAAAMAAAAAAAAAAABgA8ABAY4BPwEJAQDAAP36AAAAAAIGwAEBkILxwAEej8ABHprAAR6gAQLAAHyjAAAAAQPAAR6gwAEeoAAAAAAAAABgA8AA9TMABsABAZGC8cABHqTAAR6ywAEevgECwACNYAAAAAEDwAEevsABHr4AAAAAAAAAXQPAAP07AWADwAD8lwAAAIHDTQCBw4EAgcO8AAAAAgLAAQGUgvHAAR7DwAEeycABIAUDwACNYQAAAWABwAD95AABYAHAAO4hAgTAAQGWgvHAAR7/wAEfBgkiAGADwAD+fgAEwAEBl4LxwAEfFMABHxcJgKwAYAPAAP7/AAEFwAEBm4LxwAEfHMABHyLAAR9JAQAAA8ABHy/AAR9JAAAAAgEBwAEfNQAABCJgA8AA/n4AAcABH0QAAASArGADwAD+/wFqAGADwAD9oXlgA8ABAZQBPwMIAcABAZaAAMCBxFAIAcABAZeBAMCBxGAJAcABHyLAAP36AAAAAAEGwAEBmYLxwAEfTsABH1XAASADAAAjAAAAAQPAAR9dwAEgAwAAAAAAAABgA8AA/n4BPgNOwAEfasABH2wAAIJOYAPAAP7IATXAAR9yAAABAGADwAD+yAEfwAEfcsAA/ucAAAAANQAAAAEAWwEcwAEfgoDAAR+AwIHE8YKOAQABJ8AAjWIAwAD+3DUAAAABAFsBHMABH5yAwAEfmsCBxPGCjgEAARbAAR+iLiLAAQGWAMAA/tyAAMCBxPFJwAEfsCEcwAEfuBbAAR+0LoCswAEBl0gBAAErAMAA/yY+AT0cwAEfy4DAAR/JwIHE3YKOAQABJMABH98CJ8AAjWMWwAEf2y6ArMABAZcAwAD+3D9KwAEf7AEcwAEf9YDAAR/zwIHE3SMAAAAAwAD+4QAAgcSpAIHF1AAAAAECwAEBnILxwAEgCMABIA7AASEVA8AAjWQAAAFgAcAA/eQAAWABwAEBlAIEwAEBnoLxwAEgSsABIFEJIgBgA8AA/n4ABMABAZ+C8cABIG7AASB3CcAAjVAAXQPAAP07AWADwAEBhwABBcABAaWC8cABIHzAASCCwAEgsQEAAAPAASCTwAEgsQAAAAICAsABIJkAAAQiYAPAAP5+AMABIKcAAATAAI1QXQPAAP07AWADwAEBhwAAYAPAAQGcAT8DCAHAAQGegADAgcZtCAHAAQGfgQDAgcZ8CQHAASCCwAD9+gAAAAACBsABAaGC8cABILbAASC9wAEg6AAAIwAAAAEDwAEgxcABIOgAAAAAAAAAYAPAAP5+AUrAASDLASTAASDoAifAAI1lFsABIOAuIsABAZ4GwAEBo4LxwAEg7cABIPXAASETAQCArAAAAAEDwAEg+cABIRMAAAAAAAAAYAPAAP7/AUrAASD8ARbAASELFsABIQYWwAEg/C7AAI1QwAEBn4HqwAD9IIRgwAEBiwAAgcbGAIHHEwCBx28AAAACAsABAaaC9IDvgPWXrQPAAI1mAAABYAHAAP3kAAAIBMABAaiC9IEXgR8GwACNZwBgA8AA/JcBaoEdYAPAAPyXwACWBgTAAQGpgvSBO4FCBsAAjWgAYAPAAPyXAWqBQGADwAD8l4QXBMABAaqC9IFfgWYGwACNaQBgA8AA/JcBaoFkYAPAAPyXhBQEwAEBq4L0gYOBkwbAAI1qAGADwAD8lwFqgZFgA8AA/Je5LgTAAQGtgvSBrIIDBsAAjWvAAQAYAGADwAD+fgFqgcFgA8AA/n7AAXdsBMABAa6C9IIcgnoGwACNbMABABgAYAPAAP5+AWqCOGADwAD+fsABhxMEwAEBr4L0g22H8wbAAI1twAEAGABdA8AA/TsBYAPAAPyXAWqDfF0DwAD9OwFgA8AA/JfAAev1BMABAbCC9IgGiCAEwACNbsABABgAYAPAAND/AR6IEcAA0QIAAAAAAQXAAQG3AAAAAAQAAAMAAAAAAAAAAABgA8ABAaYBPwEJAQDAAP36AAAAAAQGwAEBsoL0iCWINojsAAHAAIE/AAAAAQOIRIjsAAAAAQEBiEkAAACA7mADwAD8lwAAYAPAAOO6AT4DTohmiG0AAYF2YAPAAOO6AR6Ic8AA474BAAGAiH3AgckqAEWIiQGIkoiUAABiYAPAAPyXAZMBHIibgoiZwIHJaGMBAAGAiJ3AgckqAMAA/cUBioikwIHJaByIpYKIpMCByWhkAQABlADAAP29PgE9HIi3gYixwIHJQ4C/AgACgoi4wIHJaByIwhqIvcABAbCgAwEAATeA/wDAANEEAMAA/UtKiNsBgYjiwIHJQwbAAQGzgvSI8Yj/ic4AAcAAjW8AAAABA4kJic4AAAABAQGJFAAAAIQ5XQPAAP07AWADwAD8lwAAYAPAAP5+AT4DTokliSwAAIF2YAPAAP7IAR+JMsAA/ucAAAAARolGiV6JTwAAAJolYAPAAPyXAICJV8CByhA+AT0ciW2BiWbAgcowgo4BAAEkiaUCIxyJe4KJdsCByk9jAQABNxAAwAD9xSeEDScAAWADwAD+fhyJkoKJjcCByk+EDgEAATcQAMAA/MUAwAD+3EqJsgEcicCBibnAgcowIwAAAADAAP7hBsABAbSC9InTieGRKQABwACNcAAAAAEDie6RKQAAAAMBA4n5AAAAhDldA8AA/TsBYAPAAPyXAIoMAAAAwABzzGADwAD60QFqihZgA8AA+tEAiiIAAADAAI1xYAPAAPrRAWqKNWADwAD60QAAYAPAAP5+AT4OTopHiksAAJeYYAPAAPyXARaKU4CKTcCByvBhwAD9a0mKXxyKZ4OKY8CBy0RIAQABkwDAAP27PgFKinUBJwA/ToqXip4AAZcoYAPAAP5+ASOBiqDAgcsFaoqqYAPAAP5+wAGHE2qKwGADwAD+fsABd2wBYAPAAP5+Tor6iwoAAcAAdA5gA8AA/JcBJor6ARyLEIOLDMCBy0SYXQEAAZYAwAD9xGADwAD8l06LLIs4AAHAAI1yYAPAAPyXARyLPoOLOsCBy0SBjQEAAYWLQMCBy7wAwAD9vk6LdYt/AADAAI1zYAPAAPyXARyLkhyLjRyLh4OLg8CBy0SGlwEAAZYAwAD9woONAQABlwDAAP2/ZAEAASMci6aFi5bAgcu8gJcBAAGTAMAA/ceXkwFgA8AA/JcAwAD9vUmL34KL48CByx8+AT2Pi/3AgcwaHIwHh4v9wIHMGmQBAAEcjCscjBscjBaHjAzAgcwagY0BAAGUAMAA/b6GlwEAAWqMHmADwAD8l7kuAMAA/cKDvwEAAZQAwAD8swDAAP29P06MRYxJAABvXQPAAP07AWADwAD8lwEejE/AAPaSAQFgA8AA/JcBh4xZwIHMGgBOjIuMjQAAl9JgA8AA/JcBk06MkoyUAABiYAPAAPyXAZNOjJmMmwAAgPVgA8AA/JcBk0OMpByMrRSMq8CBzRwKAGMBAAGGjK/AgcvtAMAA/cU+Bk6MyIzKAACDgGADwAD8lwEcjRccjOwcjOAcjNkcjNOAjM7AgcrwSwEAATUAAAABAGADwAD8lwEUjNTAgc0cCgA1AAAAAQBgA8AA/JcBFYzUwIHNHAocjNUUAMCBzYgMAGQBAAGUAMAA/b0UAMCBzYgMAADAAP1Kg78BAAE3EADAAPyzg3wBAAE3wP///wDAAPyvgQYBAAEcjQscjQUcjP+AjPrAgcrwSwEAATUAAAABAGADwAD8lwEUjQDAgc0cCgA1AAAAAQBgA8AA/JcBFY0AwIHNHAocjQEUAMCBzgkMAGQBAAGUAMAA/b0UAMCBzgkMAADAAP1Kg78BAAE3CADAAPyzg3wBAAE3wP///wDAAPyvAMAA/LCBBgEAARyNKICNI8CByvBLAQABNQAAAAEAYAPAAPyXARSNKcCBzRwKADUAAAABAGADwAD8lwEVjSnAgc0cChyNKhQAwIHOiQwAZAEAAZQAwAD9vRQAwIHOiQwAAMAA/UoAwAD8sD0cjTgUjTXAgczdCACAvwIAAjUAAAABAGADwAD8lwEUjTnAgc0LCQA1AAAAAQBgA8AA/JcBFY05wIHNCwkcjToUAMCBzu0NAGQBAAGUAMAA/b0UAMCBzu0NAByNR4SNQMCBy4OEEAEAARyNVBSNUsCBzV4MAIPBAQABNxIAwAD8tADAAP6MAMAA/Us9HI1lFI1iwIHM3QgAgL8CAAI1AAAAAQBgA8AA/JcBFI1mwIHNCwkANQAAAAEAYAPAAPyXARWNZsCBzQsJHI1nFADAgc94DQBkAQABlADAAP29FADAgc94DQAcjXSEjW3AgcuDhBABAAEcjYkcjYIUjYDAgc1eDACDwQEAATcMAMAA/LSDfAEAATc/AMAA/K8AwAD+jADAAP1LPRyNmxSNmMCBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSNnMCBzQsJADUAAAABAGADwAD8lwEVjZzAgc0LCRyNnRQAwIHQEg0AZAEAAZQAwAD9vRQAwIHQEg0AHI2qhI2jwIHLg4QQAQABHI2+HI24FI22wIHNXgwAg8EBAAE3BgDAAPy0g3wBAAE3PwDAAPyvAMAA/owAwAD9Sz0cjdAUjc3AgczdCACAvwIAAjUAAAABAGADwAD8lwEUjdHAgc0LCQA1AAAAAQBgA8AA/JcBFY3RwIHNCwkcjdIUAMCB0KwNAGQBAAGUAMAA/b0UAMCB0KwNAByN34SN2MCBy4OEEAEAARyN7BSN6sCBzV4MAIN8AQABNz8AwAD8rwDAAP6MAMAA/UtJjjkiIoKOPcCByx8AHI5VFY5TwIHNLAscjlEUjlPAgc0sCwBkAQABlADAAP29SAEAATcTAMAA/bsAHI5gFI5ewIHNCwkAYwEAARyObIeOYsCBzBqBjQEAAZUAwAD9vgDAAP3FPgM9HI5+FI57wIHM3QgAgL8CAAI1AAAAAQBgA8AA/JcBFI5/wIHNCwkANQAAAAEAYAPAAPyXARWOf8CBzQsJHI6AFADAgdGdDQBkAQABlADAAP29FADAgdGdDQBqjoZgA8AA/JeEFwDAAP1LPRyOlRSOksCBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSOlsCBzQsJADUAAAABAGADwAD8lwEVjpbAgc0LCRyOlxQAwIHSBw0AZAEAAZQAwAD9vRQAwIHSBw0Aao6dYAPAAPyXhBQAwAD9Sz0VjqnAgc0sC5M/SY8hHI81hY8lwIHLvEgBAAGUAMAA/bs+BU6PR49JAACDgGADwAD8lwEcj1CAj0vAgcrwSwEAARSPUcCBzRwKAADAAP1KPRyPXhSPW8CBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSPX8CBzQsJADUAAAABAGADwAD8lwEVj1/Agc0LCRyPYBQAwIHSwQ0AZAEAAZQAwAD9vRQAwIHSwQ0AHI9thI9mwIHLg4QQAQABHI96FI94wIHSgwwAg8EBAAGVAMAA/LQAwAD+jADAAP1LPRyPihSPh8CBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSPi8CBzQsJADUAAAABAGADwAD8lwEVj4vAgc0LCRyPjBQAwIHTSw0AZAEAAZQAwAD9vRQAwIHTSw0AHI+ZhI+SwIHLg4QQAQABHI+tHI+nFI+lwIHSgwwAg78BAAGXAMAA/LODfAEAATc/AMAA/K8AwAD+jADAAP1LPRyPvxSPvMCBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSPwMCBzQsJADUAAAABAGADwAD8lwEVj8DAgc0LCRyPwRQAwIHT5A0AZAEAAZQAwAD9vRQAwIHT5A0Aao/HYAPAAPyXwACWBgDAAP1LPRyP1RSP0sCBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSP1sCBzQsJADUAAAABAGADwAD8lwEVj9bAgc0LCRyP1xQAwIHUUA0AZAEAAZQAwAD9vRQAwIHUUA0Aao/dYAPAAPyXwACWBgDAAP1LSY/tHJABhY/xwIHLvEgBAAGVAMAA/bs+Bk6QE5AVAACDgGADwAD8lwEckByAkBfAgcrwSwEAARSQHcCBzRwKAADAAP1KTpArkC0AALyvYAPAAPyXARyQNICQL8CByvBLAQABHJA3FJA1wIHNHAoAZAEAAZQAwAD9vQDAAP1KPRyQRhSQQ8CBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSQR8CBzQsJADUAAAABAGADwAD8lwEVkEfAgc0LCRyQSBQAwIHVOg4AZAEAAZQAwAD9vRQAwIHVOg4AHJBVhJBOwIHLg4QQAQABHJBiFJBgwIHUwwwAg8EBAAGVAMAA/LQAwAD+jADAAP1LPRyQchSQb8CBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSQc8CBzQsJADUAAAABAGADwAD8lwEVkHPAgc0LCRyQdBQAwIHVxA4AZAEAAZQAwAD9vRQAwIHVxA4AHJCBhJB6wIHLg4QQAQABHJCiHJCWHJCQFJCOwIHUwwwAg78BAAGXAMAA/LOBBgEAARyQmxSQmcCB1O8NAIPBAQABlwDAAPy0AMAA/LCDfAEAATc/AMAA/K8AwAD+jADAAP1LPRyQtBSQscCBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSQtcCBzQsJADUAAAABAGADwAD8lwEVkLXAgc0LCRyQthQAwIHWgQ4AZAEAAZQAwAD9vRQAwIHWgQ4AHJDDhJC8wIHLg4QQAQABHJDXHJDRFJDPwIHU7w0Ag78BAAGVAMAA/LODfAEAATc/AMAA/K8AwAD+jADAAP1LPRyQ6RSQ5sCBzN0IAIC/AgACNQAAAAEAYAPAAPyXARSQ6sCBzQsJADUAAAABAGADwAD8lwEVkOrAgc0LCRyQ6xQAwIHXGg4AZAEAAZQAwAD9vRQAwIHXGg4AapDxYAPAAPyXwACWBgDAAP1LP0qRAQEekQzAAP6mAQABFJEhwIHM3QgAAAbAAQG1gvSRLpE/l6sAAcAAjXQAAAABA5FSl6sAAAACAQKRWgAAAIF7YAPAAP5+AJFtAAAAwACNdWADwAD60QFqkYdgA8AA+tF3AF0DwAD9OwFgA8AA/JcBPgtOkZiRnAAAl5hgA8AA/JcBFpGkgJGewIHXrmHAAP6CSZGwHJG4gpG0wIHX6EgBAAGTAMAA/bs+AUqRxgEekdHAAPaSAQFgA8AA/JcBkwA/TpJ4koIAAMAAjXZgA8AA/JcBk0WSiwGSlJKWAABiYAPAAPyXAZMBHJKdhJKbwIHYTWMBAAGCkp/AgdfoAMAA/cUBjJKkwIHYTRySpYSSpMCB2E1kAQABlADAAP29PgJOkrWStwAAgPVgA8AA/JcBHJLFapK5XQPAAP07AWADwAD8l8AB6/VLAQABHJLMgJLGwIHXroQQAQABhJLXwIHYTQDAAP6MAMAA/UpJkuIckuiFkubAgdiWYwEAAZMAwAD9xT4CPYuS98CB2DcckwCDkvfAgdg3ZAEAAZQAwAD9vUmTDCIckxKFkxDAgdiWSAEAARyTFZWBxgAAAADAAPy6AMAA/bsAIYGTHMCB17w+AT0wk0Efk0vAAPxyAQABJJN7AifAAI13HJN2gJNxwIHXrksBAAGEk3fAgdhNAMAA/osAPz9Jk5shHJO1HJOxHJOkgpOgwIHX6IGNAQABg5OmwIHYNwDAAP2+leABAAGXAMAA/cBIAQABkwDAAP27PgE9MJPDH5PNwAD8cgEAASSUNwInwACNeICUL8CB164AP06UjJSWAADAAIjvYAPAAPyXAZNBRZSfAZSolKoAAGJgA8AA/JcBHJSwgpSswIHX6IGNAQABlADAAP2+ARyUt4WUtcCB2e2BbQEAAZMAwAD9yAGNlL3AgdntHJS+hZS9wIHZ7YGNAQABlADAAP2+PgNOlM6U3gAAwACNeWADwAD8lwEclOaAlODAgdeuhBABAAGFlPHAgdntAMAA/oxJlPsclR0clQtqlP9dA8AA/TsBYAPAAPyXwAHr9UsBAAGGlQzAgdpGAMAA/UqAlwEAAZMAwAD9x0KVIgA/SZUvHJVDhpUzwIHaRkgBAAFqlUZgA8AA/JfAAJYGAMAA/bs9jJVLwIHZ1hyVVISVS8CB2dZkAQABlADAAP29P06VZpVwAADAAI1zYAPAAPyXARyVkRyVixyVhhyVeYKVdcCB1+iBjQEAAYOVe8CB2DcAwAD9voONAQABNwYAwAD9v4PBAQABlgDAAPy0gY0BAAGElZPAgdnWAMAA/b5OlayVsAAAb10DwAD9OwFgA8AA/JcBHpW2wAD2kgEBYAPAAPyXAYWVwMCB2vAARZXRApXaldwAAGJgA8AA/JcBk5XhleMAAK7lYAPAAPyXAZMBHJXqFJXowIHbjggAYwEAAYWV7MCB2vAAwAD9xQA+BE6WRpZIAACDgGADwAD8lwGTRZZTAZZcll4AAJfSYAPAAPyXAZcBHJZlFJZjwIHb0woAgJcBAAGTAMAA/ccAPgJOlnmWewAAgPVgA8AA/JcBHJaJapZ9XQPAAP07AWADwAD8l8AB6/VLAQABHJaQgJaKwIHXroQQAQABNQAAAAEAYAPAAPyXAYeWm8CB2381AAAAAQBgA8AA/JcBj5abwIHbfxyWnBQAwIHcOQsAZAEAAZQAwAD9vRQAwIHcOQsAAMAA/owAwAD9SkmWqhyWsBSWrsCB2/8LAIFtAQABkwDAAP3IPgI9FZbCwIHbvwkcltwcltAclsoUlsjAgdu/CQCDvwEAATcGAMAA/LODfAEAATfA////AMAA/K+BBgEAARSW3sCB2/8LAADAAPywPRWW68CB29MKHJbsFJbrwIHb0woAgY0BAAGUAMAA/b4/PRyXC4aXCMCB206AvwIAAjUAAAABAGADwAD8lwEUlwzAgduOCAA1AAAAAQBgA8AA/JcBFZcMwIHbjggclw0UAMCB3R4KAGQBAAGUAMAA/b0UAMCB3R4KAByXFRSXE8CB278JAIPBAQABNxAAwAD8tADAAP1LSZciHJcoFJcmwIHbjggAYwEAAYWXKsCB2vAAwAD9xT4CPRyXQoaXP8CB206AvwIAAjUAAAABAGADwAD8lwEUl0PAgduOCAA1AAAAAQBgA8AA/JcBFZdDwIHbjggcl0QUAMCB3bQKAGQBAAGUAMAA/b0UAMCB3bQKAByXUxyXTRSXS8CB278JAIPBAQABNwgAwAD8tIN8AQABN4D/AMAA/K8AwAD9S0mXYxyXaRSXZ8CB244IAGMBAAGFl2vAgdrwAMAA/cU9HJd5hpd2wIHbToC/AgACNQAAAAEAYAPAAPyXARSXesCB244IADUAAAABAGADwAD8lwEVl3rAgduOCByXexQAwIHeWAoAZAEAAZQAwAD9vRQAwIHeWAoAHJeDFJeBwIHbvwkAg3wBAAE3gP8AwAD8rwDAAP1LPz9Kl50BhpekwIHbTgAAgckIAIHJ7gCBys4AgdeMAIHeygAAAAQCwAEBuIL0mHiYh6lyB8AAcf8AAAFgAcAA/eQAAAgEwAEBu4L0mLKYwwnAAI16wAEAGABgA8AA/JcABMABAbyC9JjRmOMJwACNe8ABABgAYAPAAPyXAATAAQG9gvSY8pkBCcAAjXzAAQAYAGADwAD60QAEwAEBvoL0mQmZGxjAAG7fwAEAGABgA8AA/JcBkwTAAQG/gvSZKZk1GMAAbuDAAQAYAF0DwAD9OwFgA8AA/JcABMABAcCC9JlDmVAYwABu3MABABgAXQPAAP07AWADwAD8lwErBMABAcGC9JlemWAYwACNfcABABgAXQPAAP07AWADwAD8lwErBMABAcKC9JlpmX4YwACNfsABABgAYAPAAPrRASoBBcABAdSC9JmDmYOaUQAAAAOZjJpRAAAAAwMDmZkAAATAAI16YAPAAPyXAJmxAAAEwACNe2ADwAD8lwCZygAABMAAjXxgA8AA+tEAAGADwAEBuAE+Aj0XmfsuwABu3MABABgemg/AAPaSAQFgA8AA/JcBFpoULsAAjXrAAQAYwAEBuwDAAQHAPReaLC7AAI19wAEAGB6aNcAA9pIBAWADwAD8lwEWmjouwACNe8ABABjAAQG8AMABAcEFCAHAAQG7gADAgeAWCAHAAQG8gQDAgeAmCAHAAQG9ggDAgeA2CADAAQG/MZnyYAPAAPyXAAkBmYPAAP36AAAAAA0GwAEBxIL0mn2afZtlAABWAAAAAQOagJtlAAAAAQEBmosAAAASXQPAAP07AWADwAD8lwAAWwE+BEmalxaamy7AAI1+wAEAGMABAcI+AT0wmrIfmrzAAPw3AQABJ8AAjX8APz0XmxUuwABu38ABABgcmyQWmxUuwABu38ABABjAAQG+ZAEAARabLICbJ8CB4RVhwAD9awDAAP29wAEBvj0cm0UWmzguwABu4MABABjAAQG/gKUBAAGAm0zAgeEVAMAA/U09HJtXLsAAbuPAAQAYAAAAAMABAc8GwAEBxYL0m6mbs5x/AACCjAAAAAEDm7icfwAAAAAAAABdA8AA/TsBYAPAAPyXAT4GSZvBFpvFLsAAjX7AAQAYwAEBwj4BSpvcARyb4y7AAI2AwAEAGAAAAADAAQHMPz0Xm/8uwACNfsABABgpwAEBwj0cnBkuwABu5MABABgAAAAAwAEB0D0cnC4uwABu48ABABgAAAAAwAEBz0AcnFkWnFIWnEUuwABu4MABABjAAQG/YcAA/WtIAQABkwDAAP27nEWcXQBKnGQBHJxrLsAAjYDAAQAYAAAAAMABAcwGwAEB0oL0nLacvpz8AQDAAG4/AAAAAQOcyJz8AAAAAAAAAGADwAD8lwE+AUqczgEcnOcWnNUuwACNesABABjAAQG7g40BAAFqnOlgA8AA/JeBVwDAAP2/BsABAcaC9J0snSydOQACwABVNwAAAAEDnTedOQAAAAAAAABbAAbAAQHIgvSdZp1mnX4AAsAAjYHAAQAYAAAAAQOdcZ1+AAAAAQEBnXwAAABFXQPAAP07AWADwAD8lwAAWwAGwAEByYL0nZidmJ26AADAAI2CwAEAGAAAAAEDnZ6dugAAAAICAp2fAAAAg4BbAJ2iAAAAvK9bAABbAUqdqAEcnbAcnauAnanAgeOMZAEAAYGdrcCB45UAAIN8AQABap2yYAPAAPyXwAF5dgAABsABAcqC9J2+nb6d5AAAwABu8MABABgAAAABA53GneQAAAACAgKdxwAAAMAAScxbAJ3MAAAAg6hbAABbAUqd0gEcneAcndscndeAndPAgeP5ZAEAAYGd2cCB5AQAAIGNAQABlAAAg3wBAAEcneKBnePAgeQEgcYAAAAAAAAABsABAcuC9J4eniKevwAAwACNg8ABABgAAAABA54pnr8AAAACAgKeLgAAAMAAScxgA8AA/JcAnjcAAAC9W2ADwAD8lwAAYAPAAPyXAT4CTp5InlIAAMAAjYRgA8AA/JcBHJ5agZ5UwIHkh4N8AQABNx8AwAD8r0qeZAEcnoscnn8cnnGAnm3AgeR3g78BAAGCnnTAgeSgAMAA/LODfAEAAWqegWADwAD8l8ABeXYAwAD8r4EGAQABHJ6nHJ6bgJ6XwIHkd4N8AQABap6dYAPAAPyXwAF5dgDAAPyvg8EBAAEcnq43IIGNAQABgp6wwIHkoADAAP2+AMAA/LQAwAD8sAbAAQHMgvSfCp8Un7AAAMAAjYDAAQAYAAAAAQOfIp+wAAAAAAAAAF0DwAD9OwFgA8AA/JcBPgNOny+fNgAAgXZdA8AA/TsBYAPAAPyXATGfPWADwAD8lwBFn0UBn06fUAAAYmADwAD8lwGTARyfV4GfVcCB5a1jAQABFp9cFp9ZLsAAjX3AAQAYwAEBwWHAAP1rAMAA/cUBiZ9kwIHlrRyfZYGfZMCB5a1kAQABlADAAP29PgE9HJ94gJ9xwIHliYClAQABHJ9/LsAAjYXAAQAYAQABHJ+OFp+MLsAAjX3AAQAYwAEBwUsBAAGBn4/AgeWtAMAA/UoAwAEBzgDAAP1NSp+fAYCfpsCB5YkGwAEBzYL0n++f76KvAADAAI2GwAEAGAAAAAEDn/yirwAAAAICAqAHAAAAEl0DwAD9OwFgA8AA/JcAoBEAAADAAI2HYAPAAPyXAABbAT4CQBygQxygNhagL4CgKsCB5oNhwAD9a4GNAQABgaA4wIHmlwDAAP2+gW0BAAEcoFkWoEcuwACNesABABjAAQG7g40BAAFqoFtgA8AA/JeBVwDAAP2/AMAA/cigKaBrAEWgcwGgfKCGAADAAI2IYAPAAPyXAZMBHKCVgqCLwIHnDmMBAAEWoJcuwACNesABABjAAQG7AMAA/cUBiqCqwIHnDhygs4KgqsCB5w5kAQABlADAAP29PgpOoMOgxgAAwACNiWADwAD8lwEjFqDILsAAjXzAAQAYwAEBvRyg3oCg2sCB5oNLAQABgaDfwIHmlwDAAP1KHKDwgKDswIHmg0sBAAEcoPuBoPHAgeaXZAEAAZYAwAD9vQDAAP1KAWADwAD8l06hC6EOAADAAI2KYAPAAPyXASMWoRAuwACNfMABABjAAQG9HKEmgKEiwIHmg0sBAAEcoTGBoSfAgeaXZAEAAZQAwAD9vQDAAP1KHKE8gKE4wIHmg0sBAAEcoUeBoT3AgeaXZAEAAZUAwAD9vQDAAP1KAWADwAD8l06hV6FaAADAAI2LYAPAAPyXASMWoVwuwACNfMABABjAAQG9HKFygKFuwIHmg0sBAAEcoX2BoXPAgeaXZAEAAZUAwAD9vQDAAP1KHKGIgKGEwIHmg0sBAAEcoZOBoYnAgeaXZAEAAZQAwAD9vQDAAP1KAWADwAD8l06ho6GmAADAAI2MYAPAAPyXASMWoaguwACNfMABABjAAQG9HKG+gKG6wIHmg0sBAAEcocmBob/AgeaXZAEAAZYAwAD9vQDAAP1KHKHUgKHQwIHmg0sBAAGBodXAgeaXAMAA/UoBYAPAAPyXPYmh58CB5pccofGBoefAgeaXZAEAAZcAwAD9vU6iAaIGAADAAI2NYAPAAPyXARyiFByiDIOiCcCB52ODfAEAATeA/wDAAPyvg78BAAE3GADAAPyzPY+iIcCB6UUcoiaHoiHAgelFgQYBAAEcojgcoi2EoirAgefOg3wBAAFqoi9gA8AA/JfAAYcYAMAA/K+DvwEAATcQAMAA/LMAwAD8sD2PokXAgelFHKJKh6JFwIHpRYEGAQABHKJcHKJRhaJOwIHoRoN8AQABaqJTYAPAAPyXwAGHGADAAPyvg78BAAE3CADAAPyzAMAA/LA9j6JowIHpRRyibYeiaMCB6UWBBgEAARyidIaiccCB6L6DfAEAAWqidmADwAD8l8ABhxgAwAD8rwDAAPywPRyikxaihi7AAG7cwAEAGMABAcCAvwIAAoKilMCB5w6HoqHAgelFAMAA/UsGwAEBzoL0ot6i6KRCAADAAI2FwAEAGAAAAAEDovSkQgAAAAEBAaL5AAAAwACNjWADwAD8lwAAXQPAAP07AWADwAD8lwE+Bk6jD6MVAACEOV0DwAD9OwFgA8AA/JcBHqMbwAD2kgEBYAPAAPyXAWqjIGADwAD8l4FXAD0cozuBozbAgerFgL8CAAKTHKNmHKNHgKNCwIHqo4PBAQABIxajSy7AAI18wAEAGMABAb03GJMBYAPAAPyXAMAA/LSDfAEAAWqjaGADwAD8l8ABhxgAwAD8rwDAAP1LPRyjeoGjdcCB6sWAvwIAApQco6Uco4aAo4HAgeqjg8EBAAEjFqOKLsAAjXzAAQAYwAEBvTcQNwgBYAPAAPyXAMAA/LSDfAEAAWqjp2ADwAD8l8ABhxgAwAD8rwDAAP1LPRyjuYGjtMCB6sWAvwIAApUco+Qco8WAo8DAgeqjg8EBAAEjFqPJLsAAjXzAAQAYwAEBvTcINxABYAPAAPyXAMAA/LSDfAEAAWqj5mADwAD8l8ABhxgAwAD8rwDAAP1LPRyj+IGj88CB6sWAvwIAApYcpCMcpASAo//Ageqjg8EBAAEjFqQILsAAjXzAAQAYwAEBvZM3GAFgA8AA/JcAwAD8tIN8AQABaqQlYAPAAPyXwAGHGADAAPyvAMAA/UtKpDIBgaQ5wIHqxQbAAQHPgvSklKSUpiAAAMAAbuPAAQAYAAAAAQOknKYgAAAAAAAAAFsBPgNOpKmkrQAAl5hgA8AA/JcBFqS8FqSvLsAAbuDAAQAYwAEBv2HAAP1rTqTMpN0AAMAAjY5gA8AA/JcBHKTxFqTfLsAAjXrAAQAYwAEBu4ONAQABaqTzYAPAAPyXgVcAwAD9v0mlCBylEIClDMCB7KyBbQEAAYGlE8CB7NQAwAD9yD4DTqUxpTcAACdgA8AA/JcBk0WlQgABHKVXHKVOgKVKwIHsrIGNAQABgqVQwIHtLgDAAP2+gW0BAAGBpVrAgezUAMAA/cgBiqVswIHtLhylcoKlbMCB7S5kAQABgaV1wIHs1ADAAP29PgI9HKWRLsAAjYbAAQAYAgACFqWfLsAAbuDAAQAYwAEBv4KlrcCB7S4AwAEBzT0cpb0uwACNgcABABgBAAEWpckuwABu3MABABjAAQHAAMABAcg9F6XnLsAAbuDAAQAYHKYDFqX2LsAAbuDAAQAYwAEBv4FYAgACgqYLwIHtLoCmEsCB7KwAwAD9XsABAb8/BsABAdCC9Kafpp+pcAAAwABu5MABABgAAAABA6asqXAAAAAAAAAAWwE+CT0cpsIWprUuwABu4MABABjAAQG/VgEAATeAgADAAP1MTqbVpuQAAMAAbu5gA8AA/JcBHKb1FqbmLsAAbt/AAQAYwAEBvmQBAAE3CQDAAP29TqcCpxMAAMAAjY5gA8AA/JcBHKcnFqcVLsAAjXrAAQAYwAEBu4ONAQABaqcpYAPAAPyXgVcAwAD9v06nQqdSAADAAG7vWwEcp1QuwABu8MABABgCAAKAp13Age5vgadtwIHunwDAAQHKTqeIp5QAAMAAjY9bARynpoKnlsCB7tmBjQEAAYCnqMCB7m8AAEWnvAGnxafHAABiYAPAAPyXAZMBHKfOhKfMwIHvMGMBAAEmp9ABg6fQwIHvCGADwAD9rgDAAP3FAYyn3cCB7zAcp96Ep93Age8wZAEAAZQAwAD9vT4BPRyn9xan6i7AAG7gwAEAGMABAb9WAQABkwDAAP1MTqgNqBoAAMAAbvJgA8AA/JcBHKgrFqgcLsAAbt/AAQAYwAEBvoONAQABaqgtYAPAAPyXg10AwAD9v0AcqFWEqEjAge+hYwEAAR6oV8AA0LkCAAKVNyAAAMAA/cWoSKhhAEmoaBaobC7AAI18wAEAGMABAb0+Aj0cqJIWqIUuwABu4MABABjAAQG/gKUBAAEcqJkuwACNhcABABgBAAGTAMABAc4AwAD9TT0cqL4WqLEuwABu4MABABjAAQG/gKUBAAEcqMUuwACNhcABABgBAAEcqN+EqNLAge+hg3wBAAFqqOFgA8AA/JfAAXl2AMAA/K8AwAEBzgDAAP1NPgI9HKkNFqkALsAAbuDAAQAYwAEBv4ClAQABHKkULsAAjYXAAQAYAQABHKkuhKkhwIHvoYN8AQABaqkwYAPAAPyXwAF5dgDAAPyvAMABAc4AwAD9TT0cqU8WqUIuwABu4MABABjAAQG/gKUBAAEcqVYuwACNhcABABgBAAGTAMABAc4AwAD9TQAAgeD2AIHhzgCB4qwAgeMEAIHjKQCB42YAgePTAIHkUQCB5VEAgeZdAIHqfQCB7IAAge4jAIHxJAAAAA0CwAEB1YL0qbGpt7LsA8AAjZAAAAFgAcABAbgAAAIEwAEB2IL0qsKuGwbAAI2RwAEAGABdA8AA/TsBYAPAAPyXAWqqx10DwAD9OwFgA8AA/JfAAXr8BMABAdmC9K4tr0EGwACNksABABgAXQPAAP07AWADwAD8lwFqrjJdA8AA/TsBYAPAAPyXwAF8BAEFwAEB34L0qdKp0qpTAAAAA6nWqlMAAAAAAAAAYAPAAQHVAT4EPRyp9xap9S7AAI19wAEAGMABAcGAvwIAApM5wABuTQDAAP1LPRyqDxaqDS7AAI19wAEAGMABAcGAvwIAApQ5wABuTgDAAP1LPRyqJxaqJS7AAI19wAEAGMABAcGAvwIAApU5wABuTwDAAP1LPRyqPxaqPS7AAI19wAEAGMABAcGAvwIAApY30DJUdgDAAP1LAQkAqdvAAQHUAwADNxCXKgACBsABAduC9KqCqoeqsAAAwABVNwAAAAEDqpKqsAAAAAAAAABgA8ABAdUBPgFKqpsBH6qmwAEB3wAAAAAGwAEB3YL0r52vorLqAADAAI2BwAEAGAAAAAEDr62y6gAAAAEBAa+4AAAARV0DwAD9OwFgA8AA/JcAAFwBPgxAHK/RFq/KgK/IwIHzFmHAAP1rSAEAATcQAMAA/buvyK/WAE6v4q/kAACB12ADwAD8lwEcr+gWr+YuwACNfcABABjAAQHBSwEAAZMAwAD9Sk6v9a/3AACCTmADwAD8lwEcr/sWr/kuwACNfcABABjAAQHBSwEAAZQAwAD9Sk6wCLAKAACA9WADwAD8lwEcsA4WsAwuwACNfcABABjAAQHBSwEAAZUAwAD9Sk6wG7AdAACWyGADwAD8lwEcsCEWsB8uwACNfcABABjAAQHBSwEAAZYAwAD9Sk6wLwAAAMAAavBbAE6wOwAAAMAAjZNbAEWwRAGwTbBPAABiYAPAAPyXAZMBHLBWh7BUwIH0ImMBAAE3QADAAP3FAY+wXMCB9CIcsF2HsFzAgfQiZAEAAZQAwAD9vT4GSbBpHLBvh7BtwIH0ImMBAAE3EADAAP3FPgI9jbB/wIH0BxywjBywh4KwhcCB84CDfAEAAYOwicCB860AwAD8r4EGAQABHLCfHLCTHLCQgrCRwIHzgISSAAAAAMAA/LKDfAEAAWqwlWADwAD8l8ABeXYAwAD8r4N8AQABhLChwIHz2gDAAPyvAMAA/LA9jrCtwIH0E4ewssCB9CJJsMIcsMiHsMbAgfQiYwEAATcgAMAA/cU+Aj2NsNjAgfQHHLDlHLDghLDewIHz2oN8AQABgrDiwIHzgADAAPyvgQYBAAEcsPgcsOwcsOmEsOrAgfPahJIAAAAAwAD8soN8AQABarDuYAPAAPyXwAF5dgDAAPyvg3wBAAGDsPrAgfOtAMAA/K8AwAD8sD2OsQbAgfQTHLEZHLEUHLEPNwWDjQEAAYexEcCB9CIAwAD9v2QBAAGUAMAA/b2V4AEAATcQAMAA/cBJsSwcsTKHsTDAgfQiYwEAATcwAMAA/cU+Aj2NsULAgfQHHLFNHLFJgrFHwIHzgIPAAQABg7FLwIHzrQDAAPyxg8ABAAGEsU/AgfPaAMAA/LE9jrFawIH0ExyxbRyxaByxY5aDjQEAAYexZcCB9CIAwAD9v2QBAAE3BQDAAP29leABAAE3EADAAP3APgI9jbGKwIH0BxyxkYOxj8CB862DwAEAARyxloKxlMCB84CBBgEAARyxnByxmYSxmsCB89qEkgAAAADAAPyyg3wBAAFqsZ5gA8AA/JfAAXl2AMAA/K8AwAD8sADAAPyxPY6xssCB9BMcsb8csbo3B4ONAQABh7G8wIH0IgDAAP2/leABAAE3EADAAP3ATrHYsd0AAL8WYAPAAPyXAYSx38CB89o9jLHowIHz2oOx7MCB8609i7H1wIHzrYKx+cCB84A9irICwIHzgCayAgEcsgYuwACNgsABABgCAAKCshjAgfOAHLIbLsAAjYPAAQAYAgACJrIjARyyIy7AAI2CwAEAGAIAAhyyKi7AAI2CwAEAGAIAAoGyMcCB81OFsjTAgfQHAMABAckcsjkuwACNgsABABgCAAIcskJqskBdA8AA/TsBYAPAAPyXwAF6/EsBAAGHskPAgfQiAMAA/UocskiAskfAgfMWSwEAASaySQGGsknAgfQTYAPAAPyXAMAA/UoAwAEByQDAAQHJYAPAAPyXHLJSarJQXQPAAP07AWADwAD8l8ABfARLAQABh7JTwIH0IgDAAP1KAMABAcsAwAEByWADwAD8lz2Jsl/AgfNTFLJjwIH23wgAPRyydhaydC7AAI19wAEAGMABAcGAvwIAApMmsnYBHLJ8LsAAjYLAAQAYAgACgbKDwIHzUxyyiBayhi7AAI19wAEAGMABAcFLAQABkwDAAP1KAMABAclgA8AA/JcAwAD9Sz0cspQWspIuwACNfcABABjAAQHBgL8CAAKUJrKUARyymi7AAI2CwAEAGAIAAoKyocCB84AcsqYWsqQuwACNfcABABjAAQHBSwEAAZQAwAD9SgDAAQHJYAPAAPyXAMAA/Us9HLKyFrKwLsAAjX3AAQAYwAEBwYC/AgAClSaysgEcsrguwACNgsABABgCAAKDsr/AgfOtHLLEFrLCLsAAjX3AAQAYwAEBwUsBAAGVAMAA/UoAwAEByWADwAD8lwDAAP1LPRyy0Bayzi7AAI19wAEAGMABAcGAvwIAApYmstABHLLWLsAAjYLAAQAYAgAChLLdwIHz2hyy4hay4C7AAI19wAEAGMABAcFLAQABlgDAAP1KAMABAclgA8AA/JcAwAD9SwAAgfK1AIHy8ACB+a8AAAACAsABAeCC9LMtszO45APAAI2UAAABYAHAAQG4AAABBMABAeOC9LjguOIYwACNlcABABgAXQPAAP07AWADwAD8lwABBcABAemC9LN0s3S0LgAAAAOzebQuAAAAAAAAAGADwAEB4AE+BT0cs7oWs7guwACNfcABABjAAQHBgL8CAAKTOcAAbk0AwAD9Sz0cs9IWs9AuwACNfcABABjAAQHBgL8CAAKUOcAAbk4AwAD9Sz0cs+oWs+guwACNfcABABjAAQHBgL8CAAKVOcAAbk8AwAD9Sz0ctAIWtAAuwACNfcABABjAAQHBgL8CAAKWN9AyVHYAwAD9Sz0ctBoWtBguwACNfcABABjAAQHBgL8CAAKXOcAAbpAAwAD9SwIIAMABAeMes43AAPaSAQFgA8AA/JcBN1AACQCzn8ABAdQDAAM3EDcFKQACBsABAeWC9LRdtGO0jQAAwABVNwAAAAEDtG60jQAAAAAAAABgA8ABAeABPgFKtHcBH7SCwAEB6QAAAAAGwAEB54L0tOq077jRAADAAI2BwAEAGAAAAAEDtPq40QAAAAEBAbUFAAAARV0DwAD9OwFgA8AA/JcAAFwBPgxAHLUeFrUXgLUVwIH7aGHAAP1rSAEAATcQAMAA/bu1FbUjAE61L7UxAACB12ADwAD8lwEctTUWtTMuwACNfcABABjAAQHBSwEAAZMAwAD9Sk61QrVEAACCTmADwAD8lwEctUgWtUYuwACNfcABABjAAQHBSwEAAZQAwAD9Sk61VbVXAACA9WADwAD8lwEctVsWtVkuwACNfcABABjAAQHBSwEAAZUAwAD9Sk61aLVqAACWyGADwAD8lwEctW4WtWwuwACNfcABABjAAQHBSwEAAZYAwAD9Sk61e7V9AACDU2ADwAD8lwEctYEWtX8uwACNfcABABjAAQHBSwEAAZcAwAD9SkW1iwG1lLWWAABiYAPAAPyXAZMBHLWdhrWbwIH8iWMBAAE3UADAAP3FAY61o8CB/IkctaSGtaPAgfyJZAEAAZQAwAD9vT4ISbWwHLW2hrW0wIH8iWMBAAE3EADAAP3FPgE9HLXIFrXGLsAAjZXAAQAYwAEB44C/AgAChrXJwIH8iRy1z4C1zsCB+2hLAQABhrXQwIH8iQDAAP1KAMAA/Us+Ak6177XxAACDqGADwAD8lwEcthYctgkctf0ctfUWtfMuwACNlcABABjAAQHjSwEAARy1+Ia19sCB/ImBjQEAAZYAwAD9vgDAAP1Kg8ABAAEctgEWtf8uwACNlcABABjAAQHjSwEAARy2BIa2AsCB/ImBjQEAATcIAMAA/b4AwAD9SgDAAPyxg8ABAAEctg0WtgsuwACNlcABABjAAQHjSwEAARy2EIa2DsCB/ImBjQEAATcOAMAA/b4AwAD9SgDAAPyxg8ABAAEcthoWthguwACNlcABABjAAQHjSwEAARy2HYa2G8CB/ImBjQEAATcQAMAA/b4AwAD9SgDAAPyxPRy2Lha2LC7AAI2VwAEAGMABAeOAvwIAAoa2L8CB/IkctjQuwACNg8ABABgCAAKHtjzAgf0olADAAQHLAMAA/UtOtlW2VwAAg6tbARy2WS7AAI2CwAEAGAIAAhy2YC7AAI2CwAEAGAIAAhy2Zy7AAI2DwAEAGAIAAoG2b8CB+6U3BQDAAQHLhbZ2wIH8WQDAAQHJHLZ8FrZ6LsAAjZXAAQAYwAEB40sBAAGGtn3AgfyJAMAA/UoAwAEByUm2iBy2joa2jMCB/IljAQABNxQAwAD9xT4BPY+2nsCB/mcctqIuwACNgsABABgCAAIctqkuwACNgsABABgCAAKHtrDAgf5nHLa7HLa2gra0wIH70oN8AQABg7a4wIH7/wDAAPyvgQYBAAEctsEctr6Ctr/AgfvShJIAAAAAwAD8soN8AQABhLbDwIH8LADAAPyvAMAA/LAAwAEByTnAAG6SAMABAclJtuIctuiGtubAgfyJYwEAATcoAMAA/cU+AT2PtvjAgf5nHLb8LsAAjYLAAQAYAgACHLcDLsAAjYLAAQAYAgACh7cKwIH+Zxy3FBy3EIK3DsCB+9KDwAEAAYO3EsCB+/8AwAD8sYPAAQABhLcWwIH8LADAAPyxAMABAck5wABukwDAAQHJSbc1HLc7hrc5wIH8iWMBAAE3PADAAP3FPgE9j7dLwIH+Zxy3Ty7AAI2CwAEAGAIAAhy3Vi7AAI2CwAEAGAIAAoe3XcCB/mcct3Ict2gct2OCt2HAgfvSg3wBAAGDt2XAgfv/AMAA/K+BBgEAARy3bYK3a8CB+9KDfAEAAYS3b8CB/CwAwAD8rwDAAPywgQYBAAEct3eDt3XAgfv/g3wBAAGEt3nAgfwsAMAA/K8AwAD8sADAAQHJOcAAbpQAwAEByT4BPY+3osCB/mcct6YuwACNgsABABgCAAIct60uwACNgsABABgCAAKHt7TAgf5nHLe9HLe5gre3wIH70oPAAQABg7e7wIH7/wDAAPyxg8ABAAGEt7/AgfwsAMAA/LEAwAEByTnAAG6VAMABAck9jbffwIH8WYS348CB/Cw9jLfswIH8LIO38MCB+/89i7f5wIH7/xy3/S7AAI2DwAEAGAIAAoK4BcCB+9I3HgDAAQHLPYq4E8CB+9KBuBfAgfulPYm4IMCB+6UmuCABHLgmh7gkwIH+Z4N8AQABargoYAPAAPyXwAF5dgAAYAPAAPyXPRy4Pxa4PS7AAI19wAEAGMABAcGAvwIAApMmuD8BHLhFLsAAjYLAAQAYAgACgbhMwIH7pRy4URa4Ty7AAI19wAEAGMABAcFLAQABkwDAAP1KAMABAclgA8AA/JcAwAD9Sz0cuF0WuFsuwACNfcABABjAAQHBgL8CAAKUJrhdARy4Yy7AAI2CwAEAGAIAAoK4asCB+9IcuG8WuG0uwACNfcABABjAAQHBSwEAAZQAwAD9SgDAAQHJYAPAAPyXAMAA/Us9HLh7Frh5LsAAjX3AAQAYwAEBwYC/AgAClSa4ewEcuIEuwACNgsABABgCAAKDuIjAgfv/HLiNFriLLsAAjX3AAQAYwAEBwUsBAAGVAMAA/UoAwAEByWADwAD8lwDAAP1LPRy4mRa4ly7AAI19wAEAGMABAcGAvwIAApYmuJkBHLifLsAAjYLAAQAYAgAChLimwIH8LBy4qxa4qS7AAI19wAEAGMABAcFLAQABlgDAAP1KAMABAclgA8AA/JcAwAD9Sz0cuLcWuLUuwACNfcABABjAAQHBgL8CAAKXJri3ARy4vS7AAI2CwAEAGAIAAoW4xMCB/FkcuMkWuMcuwACNfcABABjAAQHBSwEAAZcAwAD9SgDAAQHJYAPAAPyXAMAA/UsAAIH7BwCB+0IAggOgAAAAAgLAAQHqgvWBR4FNqgEDwACNlgAAAWABwAD95AAAAAEFwAEB8QAAAAAEAAADAAAAAAAAAAAAYAPAAQHqAT8BCQEAwAD9+gAAAAADBsABAeyC9YY5hkeJtQABiB0AAAABA4ZNibUAAAABAQGGVwAAAMAATWNgA8AA+uMAAGADwAD+fgE+A06HfoeAAACWyGADwAD64wEch4eAh4LAggQbwACJhwAAAADAAPsnToehh6QAAIPpYAPAAP7IATWHqgAAAQBgA8AA/sgBH4eqwAD+5wAAAAA1AAAAAQBbARyHwYKHv8CCBGyCjgEAARyHzGqHx10DwAD9OwFbwAHv0ksBAAEch9cWh8+Bh83AggQ2wACJl8AA+z6BjQEAAZQAwAD9vgDAAP1KAMAA/tw1AAAAAQBbARyH5YKH48CCBGyCjgEAASeBiwDAAP7cNQAAAAEAWwEch/mCh/fAggRsgo4BAAEjHIgFFogBgYf/wIIENsAAiT7AAPs4gWsBAAE3CQDAAP3GJ4QNJwABYAPAAP5+AMAA/tw1AAAAAQBbARyIHoKIHMCCBGyCjgEAARyIKhaIJoGIJMCCBDbAAIk+wAD7OCMAAAAAwAD8xADAAP7cNQAAAAEAWwEciD6CiDzAggRsgo4BAAEngNkAwAD+3DUAAAABAFsBHIhRgohPwIIEbIKOAQABHIhcaohXXQPAAP07AVvAAfAtSwEAARyIZRaIX4GIXcCCBDbAAIk9wAD7N4GNAQABlADAAP2+AMAA/UoAwAD+3DUAAAABAFsBHIhzgohxwIIEbIKOAQABJ4DZAMAA/tw1AAAAAQBbARyIhoKIhMCCBGyCjgEAARyIkxaIjoGIjMCCBDbAAIk8wAD7NiMAAAAAwAD8xADAAP7cNQAAAAEAWwEciKeCiKXAggRsgo4BAAEjHIi0FoivgYitwIIENsAAiT/AAPs5gWsBAAE3CQDAAP3GJ8AAjaongNkBYAPAAP5+AMAA/tw1AAAAAQBbARyIz4KIzcCCBGyCjgEAARyI3BaI14GI1cCCBDbAAIk/wAD7OSMAAAAAwAD8xADAAP7cNQAAAAEAWwEciPCCiO7AggRsgo4BAAEjHIj/Foj4gYj2wIIENsAAiUDAAPs6gWsBAAE3CQDAAP3GJ8AAjasnguoBYAPAAP5+AMAA/tw1AAAAAQBbARyJGoKJGMCCBGyCjgEAARyJKRaJIoGJIMCCBDbAAIlAwAD7OiMAAAAAwAD8xADAAP7cNQAAAAEAWwEciT2CiTvAggRsgo4BAAEjHIlMFolFgYlDwIIENpq+wAD7O4FrAQABNwkAwAD9xifAAI2rJ4LqAWADwAD+fgDAAP7cNQAAAAEAWwEciWeCiWXAggRsgo4BAAEciXYWiW+BiW3AggQ2mr7AAPs7IwAAAADAAPzEAMAA/tw1AAAAAQBbARyJioKJiMCCBGyCjgEAASfAAI2sAMAA/tyCAMCCBGxKiZ0BHImngomkwIIEXCMAAAAAwAD+4QbAAQHtgvWLwIvQnA8AAYMLAAAAAQOL1ZwPAAAAAQEBi90AAADAAE1jYAPAAP5+AABgA8AA+uMBPhZOi/OL9gABwACNrWADwAD8lwE3IE6PvI/KAAHAAI2uYAPAAPyXAZNOj92P6gABwACNr2ADwAD8lwGUTo/9kAsAAcAAjbBgA8AA/JcBlU6QGZAfAAAnYAPAAPyXAZNOkC8AAACgBGADwAD+fgBOkDwAAACIHWADwAD8lwBPkEmQTgAAAcAAjHRhAwFgA8AA/n5cAAOQVJGEAAAAAQEBkFwAAACIbGADwAD+fgAAXAE+BEmQZxyQfxyQdxaQcICQa8CCCDxhwAD+goGNAQABhZB5wIIIpADAAP2+YwEAARaQgxSQgcCCCPMJAGHAAP6CAMAA/cU+AT0wkJUfkJ/AAQGbAQABJJDGAifAAI2xgJDBwIIIPAA/TpDekOIAAKAEYAPAAP5+ARyQ6YCQ5MCCCDyAvgIAAoWQ88CCCKQckQCFkPrAggikZAEAARaRBBSRAsCCCPMJAGHAAP6CAMAA/b0AwAD+lEmREyEckRsUkRfAgglsCgBIAQABFJEewIII8wkAAMAA/o0+AT0wkSsfkTXAAQGbAQABJJFcAifAAI2xgJFXwIIIPAA/PY2RbcCCCKQckXOFkW3AggikZAEAARaReBSRdsCCCPMJAGHAAP6CAMAA/b1PkYuRjwAAAcAAjbJhAwBgA8AA/JcAA5GclTQAAAAAAAAAYAPAAPyXAT4ETpGrAAAAwACJl2ADwAD8lwBOkgySEAAAoAJgA8AA/JcBHJIXgJISwIIIPIC7AgACJ4CnhZIkwIIIpADAAP6RSZIyHJI6FJI2wIIKZwsASAEAARySPZSBxgAAAADAAPy6AMAA/bs+Bk6ST5JTAACgAmADwAD8lwEcklqAklXAggg8gLsCAAIngNmFkmfAggikAMAA/pFJkncckn8UknvAggq9DABIAQABHJKClIHGAAAAAMAA/LoAwAD9uz0wkoYfkpDAAQGbAQABJJK3AifAAI2xgJKywIIIPAA/PY6SwsCCCLQcks2AksjAggg8gL4CAAKFktfAggikFJLewIIKvQwAAMAA/pQ9jZLswIIIpByS+BSS9MCCCr0MAGQBAAGUAMAA/b09FZMFwIIKVgockxZqkw9dA8AA/TsBW8AB79KAuwEAAYaTHsCCCLQAwAD9UEmTLCEckzgUkzDAggpWCgBIAQABHJM7lIHGAAAAAMAA/LoAwAD9uz4CPY+TS8CCCMOEk1TAggiRSpNtARSTdMCCClYKAD8+Bj2Ok57Aggi0HJOpgJOkwIIIPIC+AgAChZOzwIIIpBSTusCCCmcLAADAAP6UPY2TyMCCCKQck9QUk9DAggpnCwBkAQABlADAAP29PRWT4cCCClYKHJPyapPrXQPAAP07AVvAAe/SgLsBAAGGk/rAggi0AMAA/VBJlAghHJQUFJQMwIIKVgoASAEAARyUF5SBxgAAAADAAPy6AMAA/bs+Aj2PlCfAggjDgpQwwIIIa0qUSQEUlFDAggpWCgA/PRWUa8CCClYKHJR+apR1XQPAAP07AVvAAfCDgLsBAAGGlIbAggi0AMAA/VBJlJQhHJSgFJSYwIIKVgoASAEAARyUo5SBxgAAAADAAPy6AMAA/bs+Aj2PlLPAggjDg5S8wIIIfkqU1AEUlNvAggpWCgA/PTCU/B+VBsABAZsBAAEklS0CJ8AAjbGAlSjAggg8AE+VO5U/AAABwACNumEDAWADwAD+fmADwAD8lwADlUqWqAAAAAEBAZVSAAAAgbFgA8AA/n4AAGADwAD8lwE+B06VaZVtAACgAmADwAD8lwEclXSAlW/Aggg8gLsCAAIUlXzAgg1iCwCFlYfAggikAMAA/pFJlZUhHJWlHJWdFJWZwIINewwAgY0BAAGFlZ/AggikAMAA/b5IAQABlgDAAP27PTCVqx+VtcABAZsBAAEkldwCJ8AAjbGAldfAggg8AD89jpXlwIIItByV8ICV68CCCDyAvgIAAoWV+sCCCKQUlgHAgg17DAAAwAD+lD2Nlg3AggikHJYZFJYVwIINewwAZAEAAZQAwAD9vU6WKJYuAADAAIk9YAPAAPyXARyWN2qWMF0DwAD9OwFbwAHwLYC7AQABhpY/wIIItADAAP1QSZZLIRyWVRSWT8CCDkcNAEgBAAEclliUgcYAAAAAwAD8ugDAAP27SpZcARSWY8CCDkcNAD89MJZwH5Z6wAEBmwEAASSWoQInwACNsYCWnMCCCDwAT5avlrMAAAHAAI27YQMBYAPAAP5+YAPAAPyXAAOWvJhsAAAAAQEBlsQAAACBsWADwAD+fgAAYAPAAPyXAT4FTpbbAAAAoAJgA8AA/JcASZbmHJb7Fpb0FJbqwIIO9gwAYcAA/oKAlwEAAZMAwAD9xz4BPRWXCsCCDw8NHJcVgJcQwIIIPIC7AgACFJcdwIIO9gwAhZcowIIIpADAAP6RPgE9FZdHwIIPDw0Wl1KAl03Aggg8YcAA/oJOl2+XcwAAoARgA8AA/n4BHJd6gJd1wIIIPIC+AgAChZeEwIIIpBSXi8CCDw8NAADAAP6UPY2Xl8CCCKQcl6MUl5/Agg8PDQBkAQABFpevFJelwIIO9gwAYcAA/oIAwAD9vUs+Ak6Xz5fVAACAlmADwAD8lwEel9vAAPzGAQABFJfhwIIPiQ4AAEqX7wEUl/bAgg/uDwAAAZgFYAPAAPxqAZgfAAABg1NgA8AA/GoAAD4BPTCYLB+YNsABAZsBAAEkmF0CJ8AAjbGAmFjAggg8AE+Yc5h4AAABwACNvGEDAFwAA5iBmPAAAAAAAAAAXAE+AUmYjCEcmJaFmJDAggikSAEAARaYnoCYmcCCCDxhwAD+ggDAAP27PgE9MJiwH5i6wAEBmwEAASSY4QInwACNsYCY3MCCCDwAP06Y+5kDAADAAImXYAPAAPyXARyZEhSZBcCCCi0JACAAAAAAAE6ZHgAAAMAAiT5gA8AA/JcATpkrAAAAwACJPWADwAD8lwBOmToAAADAAIk8YAPAAPyXAE6ZSAAAAMAATTRgA8AA/JcATplXAAAAwABNNWADwAD8lwBOmWgAAACBt2ADwAD8lwBJmXUcmYCHmXnAggjDSAEAAYSZg8CCCJEAwAD9uz4HPRWZmsCCEPgPHJmtFJmiwIINPgoAIAEAASeA2QAASZm6HJnVHJnDgJm+wIIIPIQQAQABhZnOwIIIpADAAP6MSAEAAYGZ2MCCCFcAwAD9uz2NmdzAggikHJnhhZncwIIIpGQBAAGUAMAA/b0/PRWZ68CCEOcOHJn6FJnxwIIO0gsAIAEAASeA2QAAPRWaB8CCERoRHJoYFJoPwIIO0gsAIAEAASeC6gAAPRWaJcCCESsSHJo4FJovwIIO0gsAIAEAASeC6gAAPRWaRcCCETwTHJpYFJpPwIIO0gsAIAEAASeA2QAAPRWaZcCCEQkQHJp1FJpswIIO0gsAIAEAAScAAAA+CD0cmpQUmo7AggjUCAAgAQABJ4DZAAA9FZqhwIIQ5w4cmrAUmqfAgg7SCwAgAQABIxyauIeascCCCMNIAQABgpq7wIIIawDAAP27J4DZJ4GNAWADwAD+fgAAPRWa3cCCEPgPHJrwFJrlwIINPgoAIAEAASMcmviHmvHAggjDSAEAAYKa+8CCCGsAwAD9uyeA2SeBjQFgA8AA/n4AAD0Vmx3AghEJEBybLRSbJMCCDtILACABAAEngNkAAD0VmzrAghEaERybSxSbQsCCDtILACABAAEnguoAAD0Vm1jAghErEhybaxSbYsCCDtILACABAAEnguoAAD0Vm3jAghE8ExybixSbgsCCDtILACABAAEngNkAAD0cm54Um5jAggjUCAAgAQABJ8AAjb0AAD0cm7oUm7HAghBcDAAgAAAAAABKm8IBH5vNwAD7QQcABxSb2sCCEQkQAByb5hSb4MCCEPgPAGQBAAGUAMAA/b0Um+vAghDnDgAUm/DAghEaEQAUm/fAghErEgAUnADAghE8EwCTAAbAAQHvgvWcNZxFqf8AAcAAjb7AAQAYAAAAAQOcVan/AAAAAQEBnF0AAADAAE1jYAPAAP5+AABgA8AA+uMBPh9OnTmdQgAAgbNgA8AA/JcBk0+dTJ1RAAABgcdhAwBcAAOdVp2bAAAAAAAAAFwBPgE9MJ1hH51rwAEBmwEAASSdlAInwACNv4Cdj8CCFCQAT52inacAAAHAAI3AYQMAYAPAAPrRAAOdrJ3JAAAAAAAAAGADwAD60QFKnbIBHJ27gZ2ywIIUP0gBAAEWncOAnb7AghQkYcAA/oIAwAD9u0+d0J3VAAABwACNwWEDAWADwAD+fmADwAD60QADneCfIAAAAAEBAZ3oAAAAiGxgA8AA/n4AAGADwAD60QE+B06d9538AACcoWADwAD8lwEcngCFnf7AghUDhBABAAGTAMAA/oxJnhUcnh6GnhnAghUcSAEAATcJAMAA/btKnicBKT9JnjoiHJ5Dhp4+wIIVHIFtAQABNyAAwAD9yAAcnlOGnk7AghUcgWsBAAE3LwDAAP3GSp5cASk/SZ5vIhyeeIaec8CCFRyBbQEAATc7AMAA/cgAHJ6Ihp6DwIIVHIFrAQABN0AAwAD9xkqekQEpP0mepCIcnq2GnqjAghUcgW0BAAE3WwDAAP3IAByevYaeuMCCFRyBawEAATdgAMAA/cZKnsYBKT9JntkiHJ7ihp7dwIIVHIFtAQABN3sAwAD9yAAcnvKGnu3AghUcgWsBAAE3fgDAAP3GSp77ASk/Sp8OASpPnyefLAAAAcAAjcJhAwFgA8AA/n5gA8AA+tEAA586oQ8AAAABAQGfQgAAAIhsYAPAAP5+AABgA8AA+tEBPglOn1GfVgAAnKFgA8AA/JcBHJ9ahp9YwIIWZoQQAQABkwDAAP6MSZ9vIhyfeIefc8CCFn+BbQEAAZMAwAD9yAAcn4iHn4PAghZ/gWsBAAE3CADAAP3GSp+RASk/SZ+kIhyfrYefqMCCFn+BbQEAATcKAMAA/cgAHJ+9h5+4wIIWf4FrAQABNx8AwAD9xkqfxgEpP0mf2SIcn+KHn93AghZ/gW0BAAE3MADAAP3IAByf8oef7cCCFn+BawEAATc5AMAA/cZKn/sBKT9JoBccoCCHoBvAghZ/SAEAATc6AMAA/btKoCkBKT9JoEMiHKBMh6BHwIIWf4FtAQABN0EAwAD9yAAcoFyHoFfAghZ/gWsBAAE3WgDAAP3GSqBlASk/SaCBIhygioeghcCCFn+BbQEAATdhAMAA/cgAHKCah6CVwIIWf4FrAQABN3oAwAD9xkqgowEpP0mgvyIcoMiHoMPAghZ/gW0BAAE3fwDAAP3IAByg2Ieg08CCFn+BawEAATeA/wDAAP3GSqDhASk/SqD9ASpPoRahGwAAAZZFYQMBYAPAAP5+YAPAAPrRAAOhIqGcAAAAAQEBoSoAAACIbGADwAD+fgAAYAPAAPrRAT4DTqE5oT4AAJyhYAPAAPyXARyhQoehQMCCGDWEEAEAAZMAwAD+jEmhVyIcoWAUoVvAghhOCACAlwEAATcvAMAA/ccAHKFvFKFqwIIYTggAYwEAATc6AMAA/cVKoXcBKT9KoYoBKk+ho6GnAAABwACNw2EDAWADwAD+fmADwAD8lwADoa+iKAAAAAEBAaG3AAAAwACJPWADwAD+fgAAYAPAAPyXAT4CSaHGHKHXFqHQFKHKwIIY2AgAYcAA/oJjAQABlgDAAP3FSqHcARyh45SBxgAAAADAAPy6P0qh7QEcogRqofRdA8AA/TsBW8AB8NmAuwEAARyiEhSiDMCCGNgIAIC+AgACk5YAwAD+lADAAP1QT6IvojMAAAGqvGEDAWADwAD+fmADwAD8lwADojiiywAAAAEBAaJAAAAAiGxgA8AA/n4AAGADwAD8lwE+A06iT6JVAAAnYAPAAPyXAZNFomAAASIcom0UomfAghmcCgBjAQABFqJxFKJvwIIZgwkAYcAA/oIAwAD9xQAcooKGonvAghgTIAEAARyihBSig8CCGYMJAEsBAAEUooXAghmcCgAAwAD+iwAAARWijsCCGZwKHKKTFKKOwIIZnAoAZAEAAZQAwAD9vT9Kop4BHqKpwAD8xgEAARyisRSir8CCGYMJAIC+AgACkxSivsCCGZwKAADAAP6UAE6i1qLdAACVal0DwAD9OwFbATGi31sAQ6LnIRyi9IOi78CCFJAgAAAAAAA+BUOjACIhHKMNg6MIwIIUkCAAAAAAAAAcox6EoxPAghTfIAEAARyjI4CjH8CCFCRLAQABgaMkwIIUPwDAAP6LAAA9iaMwwIIUPxyjOIGjMMCCFD9kAQABlADAAP29TqNGo0wAAGpgA8AA/JcBgaNOwIIUP0OjXiIhHKNrg6NmwIIUkCAAAAAAAAAco3+Fo3HAghZCIAEAARyjhICjgMCCFCRLAQABgaOFwIIUPwDAAP6LAAA9iaORwIIUPxyjmYGjkcCCFD9kAQABlADAAP29PRyjqhSjo8CCGlYJAFYBAAEco84co7OAo67AghQkgL4CAAIUo73AghrfCgCBo8TAghQ/AMAA/pSWhQAAAADAAP6jAMAA/UxDo+QiIRyj8YOj7MCCFJAgAAAAAAAAHKQChKP3wIIU3yABAAEcpAeApAPAghQkSwEAAYGkCMCCFD8AwAD+iwAAPYmkFMCCFD8cpByBpBTAghQ/ZAEAAZQAwAD9vU6kMgAAAMAAjc5gA8AA/n4ATqRGAAAAwACNz2ADwAD+fgBOpGAAAADAAI3QYAPAAP5+AE6kdQAAAMAAjdFgA8AA/n4ARqSDAKSMAAAAkoVbABSklcCCGlYJAEE+AkmkpSaktgEcpLYWpK8UpKnAghw7DgBhAGMBAAGUAABgA8AA+tFCpLsAP0mkyyIiIhyk1xSkz8CCG/QKAEgBAAErAMAA/o0AJqT5ARyk+Rak8hSk7MCCHDsOAGEAgW0BAAE3BQAAYAPAAPrRABylEoalC8CCGBMgAQABJqUYARylGBSlE8CCHDsOAEsBAAGTAABgA8AA/n4AAAAiHKU0HKUwFKUrwIIcOw4ASwEAAZQAAEgBAAEnguoAwAD98QEiHKVGhqU/wIIYEyABAAEmpUwBHKVMFKVHwIIcOw4ASwEAAZQAAGADwAD+fgAAABylXRylWRSlVMCCHDsOAEsBAAGVAABIAQABJ4LqAMAA/fE+AT0VpXHAghv0CialcQEUpXvAghw7DgBgA8AA/n5JpY8iHKWhFKWTwIIcBQsASAEAASsAwAD+jQAcpbOGpazAghgTIAEAASaluQEcpbkUpbTAghw7DgBLAQABkwAAYAPAAP5+AAA+AT0VpcnAghwFCyalyQEUpdnAghw7DgBgA8AA/n5Jpe0iHKX6FKXxwIIcFgwASAEAASsAwAD+jQAcphUcpg2HpgXAghi0IAEAASamDgEUpg7Aghw7DgBgA8AA/n4AAIFtAQABkwDAAP3IPgE9FaYlwIIcFgwmpiUBFKYwwIIcOw4AYAPAAP5+SaZEIiIiHKZQFKZIwIIcJw0ASAEAASsAwAD+jQAmpnIBHKZyFqZrFKZlwIIcOw4AYQCBbQEAAZUAAGADwAD60QAcpouGpoTAghgTIAEAASamkQEcppEUpozAghw7DgBLAQABkwAAYAPAAP5+AAAAHKaqhqajwIIYEyABAAEmprABHKawFKarwIIcOw4ASwEAAZQAAGADwAD+fgAAPgE9FabAwIIcJw0mpsABFKbKwIIcOw4AYAPAAP5+P0mm5CIiIhym8BSm6MCCG/QKAEgBAAErAMAA/o0BHKcRFKcDwIIcBQsASAEAASsAwAD+jQEcpy0UpyTAghwWDABIAQABKwDAAP6NARynSBSnQMCCHCcNAEgBAAErAMAA/o0+AT0cp16Cp1nAghRSIAAAAAAAP06ncad2AADAAIk8YAPAAPyXARynfRSneMCCGWEIACABAAEUp37AghwnDQAAAEmnjCIcp5UUp5DAgh9+DgCBbQEAATdGAMAA/cgAHKejFKeewIIffg4AgWsBAAE3YwDAAP3GPRWnsMCCH34OHKe1FKewwIIffg4AZAEAATeHbADAAP29SafHIhyn0BSny8CCH34OAIFtAQABkwDAAP3IAByn3RSn2MCCH34OAIFrAQABN0UAwAD9xj0Vp+TAgh9+Dhyn6RSn5MCCH34OAGQBAAE3h9AAwAD9vT9Jp/Ycp/8Up/rAgh9+DgBjAQABN4ZBAMAA/cU9HKgMgqgHwIIUUiAAAAAAAD9OqBmoJAAAwACN0mADwAD8lwEcqCsUqCbAghlhCAAgAQABFKgswIIcBQsAAABJqEAiHKhPFKhEwIIghA8AYwEAAZQAwAD9xQEcqGEUqFbAgiCEDwCAlwEAATcfAMAA/cc9HKhsgqhnwIIUUiAAAAAAAD9OqHmofwAAwACJPWADwAD8lwEcqJQcqImHqIHAghi0IAEAARSoisCCHBYMAAAAZAEAAZQAwAD9vU6ooqirAADAAI3TXQPAAP07AWADwAD+fgEcqLUUqK3Aghv0CgCApgEAASeC6gDAAP6hSajFIRyo2Rao0hSoycCCIS4RAGHAAP1rSAEAAZYAwAD9uz0cqOSCqN/AghRSIAAAAAAAP06o8Kj1AADAAIk/YAPAAPyXARyo/BSo98CCGWEIACABAAEcqQUUqP3AgiEuEQBLAQABkwDAAP1KAABOqROpGgAAwACJQGADwAD8lwEcqSEUqRzAghlhCAAgAQABHKkqFKkiwIIhLhEASwEAAZQAwAD9SgAATqk4qT8AAJq+YAPAAPyXARypRhSpQcCCGWEIACABAAEcqU8UqUfAgiEuEQBLAQABlQDAAP1KAABJqVkcqWIUqV3AgiGUEgCAlwEAATcXAMAA/cc9HKltgqlowIIUUiAAAAAAAD9JqXUcqYAUqXnAgiHOEwCAlwEAATc7AMAA/cc9HKmLgqmGwIIUUiAAAAAAAD9JqZMcqZ4UqZfAgiIIFACAlwEAATc7AMAA/cc9HKmpgqmkwIIUUiAAAAAAAD9KqbIBH6m9wAD7QQcABxSpysCCH34OABSp0MCCIPYQABSp18CCIIQPABSp48CCIZQSABSp6cCCIc4TABSp8cCCIggUAJMAAACCA/sAgggcAIIT/gCCIwwAAAADAsABAfKC9oDvgPXAAEHBA8AAjdQAAAFgAcAA/eQAAWABwAEASgoEwAEB9YL2gT2BRQnAAI3VwAEAGABdA8AA/W0CYAPAAP5+XQPAAP07AWADwAD+fgAEwAEB/oL2gVaBZQnAAI0uAGADwAD+fgAEwAEB9oL2gW+BfhjAAI3WwAEAGABgA8AA+tEBKQTAAQH3gvaBtYHGGMAAjdfAAQAYAF0DwAD9OwFgA8AA/n4BKwTAAQH4gvaBz4HiGMAAjdjAAQAYAGADwAD8lwEcgeCUgcYAAAAAwAD8ugTAAQH5gvaB64IHGMAAjdnAAQAYAGADwAD60QEpBMABAfqC9oIQgjAYwACN2sABABgAYAPAAPrRASoEwAEB+4L2gjuCQBjAAH+0wAEAGABgA8AA/n4BKwTAAQH8gvaCSIJNGMAAfMLAAQAYAGADwAD8lwErBMABAf2C9oJcgnEJwACN28ABABgAYAPAAPyXAAEFwAECNIL2gnaCdoVmAAAAA4KChWYAAAADAQGCiAAABMAAjS5gA8AA/n4AAoKkAAAAwACN3GADwAD8lwFqgsVgA8AA/Je+OoLpAAAAwACN3WADwAEB8gFqAGADwAD9oXlgA8ABAfIBPgJJg20hHIOAgoNxwIIk0kgBAAErAMAA/fE+Bj0cg6kWg6CCg5HAgiTSwACN1cABABjAAQH1g/0BAAE0g7EDg7GD2AAAAAICAoOyAAAAgL1gA8AA/n4Ag7gAAACAll0DwAD9OwFgA8AA/n4AAF0DwAD9OwFgA8AA/n4BSoPCATUAAAABAF0DwAD9bQJgA8AA/n5dA8AA/TsBYAPAAP5+ARaDwi7AAI3VwAEAGMABAfU1AAAAAQBgA8AA/n4Bg4PLwIIlOzUAAAABAF0DwAD9OwFgA8AA/n4BhIPTwIIlSTUAAAABAFwBHIPKhYPKwIIlcoC/AgAChoPKwIIlo4cAwIIltwDAAP2ChwDAgiW3AMAA/Yw9F4PhLsAAjdjAAQAYFoQBgoPywIIk0sAAjdjAAQAYwAEB+MABAfg9F4QXLsAAjdnAAQAYFoQ+goQvwIIk0sAAjdnAAQAYwAEB+cABAfk9F4RbLsAAjdrAAQAYFoSFgoR2wIIk0sAAjdrAAQAYwAEB+sABAfo9F4SlLsAAf7TAAQAYFoS8goStwIIk0sAAf7TAAQAYwAEB+8ABAfs9F4TJLsAAfMLAAQAYFoTggoTRwIIk0sAAfMLAAQAYwAEB/MABAfw/SYTxHIUFFoT1LsAAjS7AAQH+SAEAASfAAEZeAMAA/o0+Aj0XhRcuwACN2cABABgqwAEB+T0XhTwuwACN2sABABgqwAEB+j8ECAHAAQH+gADAgiSmCADAAQH1HoMRwADBUwACYAPAAP5+XQPAAP07AWADwAD+fgAACADAAQH9gYNSwIIktwkBgnbAAP36AAAAADAGwAECAIL2hWuFgYWwAwBLAAAAAQOFg4WwAAAAAQEBhYsAAACAvWADwAD+fgAAXQPAAP07AWADwAD+fgFKhZQBHIWcFoWULsAAjdXAAQAYwAEB9UsBAAEchaKAhZ3Agid6loUAAAAAwAD+owDAAP2BBsABAgGC9oW1hbyGwQAAgJYAAAABA4XBhsEAAAABAQGFyQAAAIC9YAPAAP5+AABgA8AA/n4BPgU9iIXVwIIn6xyF4YCF3MCCJ+uWhQAAAADAAP6jToYBhggAACldA8AA/TsBYAPAAP5+ARyGEhaGCi7AAI3VwAEAGMABAfVLAQABgIYTwIIn6wDAAP2BSYYeHIYpgYYiwIIoIEgBAAErAMAA/WVKhjIBKz9JhkMchlUWhk6BhkfAgiggYcAA/WuAlwEAAZQAwAD9xz4BPTCGYh+GbMABAZsBAAEkhqACJ8AAjd6AhpvAgifrAD9Khq0BHIa6gYa0wIIoIEsBAAGTAMAA/UoGwAECAoL2hsaGy4cmAABWAAAAAQOGzocmAAAAAgIChtYAAACAvWADwAD+fgCG3AAAAICWYAPAAP3kAABcAT4CPRyG6S7AAI3fwAEAGAAAAADAAQIQPRyG/i7AAG86wAEAGAIAAh6HBsABAhYBAAGAhxXAgijuAIGHHMCCKPwAwAECBAbAAQIEgvaHK4cwiB8AAMAAbzrAAQAYAAAAAQOHN4gfAAAAAgIChz8AAACAvWADwAD+fgCHRQAAAICWWwAAXAE+AkAch16Ah1nAgil4SAEAAR6HYcABAhYBAAGAh3DAgil4AADAAP6Nh1mHdQBJh3wlh4aBh4DAgimGXQPAAPz5AVs+AUaHm4ewh6QAAACA8lsAFIepwIIphgEBXQPAAPz5AVs+AT0ch7outCvAAQAYAgACgIe/wIIpeB6HxcABAhcBAAGCh9TAginbAADAAQIFPgE9HIf0LrQrwAEAGAIAAoCH+cCCKXgeh//AAQIXAQABgYgOwIIphgAAwAECBQbAAQIYgvaIJIgpiRsAAJdQAAAAAQOILIkbAAAAAgICiDQAAACAvWADwAD+fgCIQQAAAICWYAPAAP3kAABcAT4FPRyITi7AAI3fwAEAGAAAAADAAQIQPYiIY8CCKnEeiGrAAQIWAQABgIh5wIIqcQA9HIiNFoiELsAAjdXAAQAYwAEB9YReAQABgIiUwIIqcQDAAP2KSYifHIiogIijwIIqcUgBAAFqiLdgA8AA/n7AAeX0AMAA/o0+AT0XiNcuwACN2sABABgqwAEB+j89HIkDLsAAbzrAAQAYAgACgIkLwIIqcYGJEcCCKn8AwAECBAbAAQIZgvaJIIklixUAAIReAAAAAQOJK4sVAAAAAgICiTMAAACAvWADwAD+fgCJQAAAAICWYAPAAP3kAABcAT4GPRyJTS7AAI3fwAEAGAAAAADAAQIQPYiJYsCCK2EeiWnAAQIWAQABgIl4wIIrYQA9iYmDwIIrbx6Ji8ABAhcBAAGBiZrAgitvAE6Js4m6AAApXQPAAP07AWADwAD+fgEcicQWibwuwACN1cABABjAAQH1SwEAAYCJxcCCK2EAwAD9gUmJ0CEciduCidTAgivMSAEAASsAwAD9ZT4DTonwifYAACdgA8AA/JcBHIn/gon4wIIrzIC7AQABJooHAYGKB8CCK29gA8AA/n4AwAD9UEmKFSEcih+DihnAgiwfSAEAARyKIpSBxgAAAADAAPy6AMAA/bs+AT0cijeCijDAgivMoAcCAAKDikPAgiwfHIpQg4pKwIIsH2QBAAGUAMAA/b0AwAD9YT9JimQcinYWim+CimjAgivMYcAA/WtIAQABkwDAAP27PRyKhRaKfC7AAI3VwAEAGMABAfWEXgEAAYCKjMCCK2EAwAD9ij8/SYqdIhyKpoCKocCCK2FIAQABaoq1YAPAAP5+wAHl9ADAAP6NAByK1YGKz8CCK29IAQABJ8AAjeAAwAD98T4BPReK6y7AAI3awAEAGCrAAQH6PwbAAQIagvaLGosfi4sAAJcpAAAAAQOLKIuLAAAAAQEBizAAAACAvWADwAD+fgAAXAE+Az0cizwuwACN38ABABgAAAAAwAECED2Ii1HAgi1iHotYwAECFgEAAYCLZ8CCLWIAPRyLexaLci7AAI3VwAEAGMABAfWEXgEAAYCLgsCCLWIAwAD9igbAAQIbgvaLkIuVi+QAAIP9AAAAAQOLnIvkAAAAAQEBi6IAAACBpmEDAmADwAD+fl0DwAD9OwFgA8AA/n5cAABcAT4BPRyL1haLzS7AAI3VwAEAGMABAfWD/QEAAYCL3sCCLekAwAD9jAbAAQIcgvaL6YvujHUAAMAAjRUAAAABA4v3jHUAAAABAQGL/wAAAIC9YAPAAP5+AABcAT4CSYwLHIwhFowPLsAAjdfAAQAYwAEB90gBAAErAMAA/WU9F4wqLsAAjdfAAQAYHoxCwAD4NQEBYAPAAP5+AZMAwAEB9z89HIxoFoxWLsAAjdfAAQAYwAEB91YBAAGAjGzAgi5UAMAA/UwGwAECIIL2jHqMg4ywAQCeeAAAAAEDjJiMsAAAAAAAAABgA8AA+tEBSoybARaMmy7AAI3ZwAEAGMABAfkGwAECKoL2jLWMvo/KAgCeeAAAAAEDjNKPygAAAAEBAYzYAAAAnnhgA8AA+tEAAFwBPgQ9HIz0LsAAjd/AAQAYAAAAAMABAhBJjQkcjSKAjQ3Agi8rSAEAARaNJS7AAI3ZwAEAGMABAfkAwAD98UqNPAA/SY1IgI1MwIIvKz4BSY1qHI1+Fo1uLsAAjS7AAQH+SAEAASfAAI3hAMAA/o0+AT0cjZIuhF4CAAJqjaVgA8AA/n7AAeVnJ4KMAMABAhk+AkmN2ByN6xaN3C7AAI3YwAEAGMABAfhIAQABHI3ulIHGAAAAAMAA/LoAwAD9uz4BPTCN/h+OCMABAZsBAAEkAAInwACN4ifAAI3jAD89HI6dLlYCAAJqjq1gA8AA/n7AAeVnJ8AAjeQAwAECAj4BSY7pHI79Fo7tLsAAjS7AAQH+SAEAASfAAI3hAMAA/o0+AT0cjxEuVgIAAmqPIWADwAD+fsAB5WcngowAwAECAj4BPRyPVC6EXgIAAmqPZ2ADwAD+fsAB5WcnwACN5ADAAQIZPRePmi7AAI3ZwAEAGICPssCCLyvAAQH5BsABAiGC9o/Pj9eP9gEAwACNEwAAAAEDj+WP9gAAAAAAAABgA8AA/JcBSo/oARaP6C7AAI3YwAEAGMABAfgGwAECK4L2j/uQBJLPAgDAAI0TAAAAAQOQEZLPAAAAAQEBkBYAAADAAI0TYAPAAPyXAABcAT4FPRyQKy7AAI3fwAEAGAAAAADAAQIQSZBAIiIckFQWkEQuwACNLsABAf5IAQABJ8AARl4AwAD+jQAWkGgunnjAAQIgAByQloCQiMCCMRZIAQABHJCZlIHGAAAAAMAA/LoAwAD9uz4BPTCQpR+Qr8ABAZsBAAEkAAInwACN5SfAAI3mAD9JkTcckUoWkTsuwACN2MABABjAAQH4SAEAAYCRTcCCMRYAwAD9u0qRXAA/PReRaC7AAI3YwAEAGICRecCCMRbAAQH4SZGMHJGfFpGQLsAAjdjAAQAYwAEB+IFtAQABkwDAAP3IPgJJka0WkbEuwACNFMABAiI9F5HKLsAAjRQqwAECLD89HJHxLsAAbDLAAQAYAgACapICYAPAAP5+wAHldhySJYCSF8CCMRYjAAAAAMAA/MQAwAECDz4CPRySRS6XKQEAAWqSW2ADwAD+fsAB5XYAwAECGkmSdxySixaSey7AAI0uwAEB/kgBAAEnwACN4QDAAP6NPgE9F5KfLsAAjRQpwAECLD8GwAECIoL2ktSS3ZMQAQDAAI0UAAAAAQOS9ZMQAAAAAAAAAGADwAD60QFKkvgBFpL4LsAAjdrAAQAYwAEB+gbAAQIsgvaTFZMeloMCAMAAjRQAAAABA5M1loMAAAABAQGTOwAAAMAAjRRgA8AA+tEAAFwBPgU9HJNaLsAAjd/AAQAYAAAAAMABAhBJk28igJNzwIIzFgAck54Wk44uwACNLsABAf5IAQABJ8AARl4AwAD+jT4BPTCTsB+TusABAZsBAAEnwACN5wA/SZQgHJQ8gJQkwIIzFkgBAAEWlD8uwACN2sABABjAAQH6AMAA/fFKlFkAP0mUZYCUacCCMxY+A06Ul5SeAAApXQPAAP07AWADwAD+fgEclKgWlKAuwACN1cABABjAAQH1SwEAAWqUtWADwAD+fsAB5fQAwAD9gUmU1CIclOCBlNnAgjO4SAEAASsAwAD9ZQEhHJT3FpTygZTrwIIzuIHqwAD9IEgBAAEnwACN4ADAAP6NPgE9HJVWLsAAjejAAQAYAgACapVsYAPAAP5+wAHl9CfAAI3gAMABAg4/PReVni7AAI0THJWulIHGAAAAAMAA/LrAAQIrPgE9HJYMLoReAgACapYfYAPAAP5+wAHl9CfAAI3gAMABAhk9F5ZNLsAAjdrAAQAYgJZowIIzFsABAfoGwAECI4L2loiWk5agAQCWiAAAAAEDlpiWoAAAAAAAAABgA8AA/n4BSpabARaWmy7AAH+0wAEAGMABAfsGwAECLYL2lqWWrpcEAgCWiAAAAAEDlrKXBAAAAAEBAZa6AAAAlohgA8AA/n4AAFwBPgM9HJbGLsAAjd/AAQAYAAAAAMABAhA9F5bbLsAAf7TAAQAYgJbjwII1DcABAfs9HJbtLsAAjenAAQAYAAAAAMABAhEGwAECJIL2lwmXEZceAQCWiQAAAAEDlxaXHgAAAAAAAABgA8AA/JcBSpcZARaXGS7AAHzCwAEAGMABAfwGwAECLoL2lyOXLJd/AgCWiQAAAAEDlzCXfwAAAAEBAZc1AAAAlolgA8AA/JcAAFwBPgM9HJdBLsAAjd/AAQAYAAAAAMABAhA9F5dWLsAAfMLAAQAYgJdewII1vsABAfw9HJdoLsAAjenAAQAYAAAAAMABAhEGwAECJYL2l4SXkZiRAQDAAI0SAAAAAQOXoZiRAAAAAAAAAGADwAD64wE+A06XtJe7AAApXQPAAP07AWADwAD+fgEcl8UWl70uwACN1cABABjAAQH1SwEAAWqX0mADwAD+fsAB5asAwAD9gUmX7iEcl/mAl/LAgjZASAEAASsAwAD9ZT4BSz4BSpgYAR6YKMABAe0BAAEcmDSAmC7AgjZASwEAAZMAwAD9SgAAAZhCYAPAAPxgAZhWAAABg1NgA8AA/GAAAD4BSphjASs/SpiCASsGwAECL4L2mJaYn5mqAgDAAI0SAAAAAQOYrpmqAAAAAQEBmLgAAADAAI0SYAPAAPrjAABcAT4DPRyYzy7AAI3fwAEAGAAAAADAAQIQTpk6mUQAAIgeYAPAAP5+AR6ZT8ABAewBAAEcmWaAmVbAgjcHwACJhwAAAADAAPsnAD0cmXQuwABsMsABABgCAAJqmYVgA8AA/n7AAeWrgZmcwII3MgDAAQIPBsABAiaC9pmvmbyapgEAwABNYwAAAAEDmcGapgAAAAAAAABgA8AA+uMBPgNOmdSZ2wAAKV0DwAD9OwFgA8AA/n4BHJnlFpndLsAAjdXAAQAYwAEB9UsBAAFqmfJgA8AA/n7AAeWPAMAA/YFJmgMhHJoOgJoHwII3uEgBAAErAMAA/WU+AUs+AUqaLQEemj3AAQHtAQABHJpJgJpDwII3uEsBAAGTAMAA/UoAAAGaV2ADwAD8YAGaawAAAYNTYAPAAPxgAAA+AUqaeAErP0qalwErBsABAjCC9pqrmrSbfAIAwABNYwAAAAEDmribfAAAAAEBAZrCAAAAwABNY2ADwAD64wAAXAE+Az0cms4uwACN38ABABgAAAAAwAECEE6bMps8AACIHmADwAD+fgEem0fAAQHsAQABHJtTgJtOwII4f8AAiYcAAAAAwAD7JwA9HJthLsAAbDLAAQAYAgACJ8AATWOBm27AgjiqAMABAg8GwAECJ4L2m4Gbjpx+AQDAAIkNAAAAAQOblpx+AAAAAAAAAGADwAD64wE+A06bqZuwAAApXQPAAP07AWADwAD+fgEcm7oWm7IuwACN1cABABjAAQH1SwEAAWqbx2ADwAD+fsAB5Z4AwAD9gUmb2yEcm+aAm9/AgjkoSAEAASsAwAD9ZT4BSz4BSpwFAR6cFcABAe0BAAEcnCGAnBvAgjkoSwEAAZMAwAD9SgAAAZwvYAPAAPxgAZxDAAABg1NgA8AA/GAAAD4BSpxQASs/SpxvASsGwAECMYL2nIOcjJ1vAgDAAIkNAAAAAQOck51vAAAAAQEBnJ0AAADAAIkNYAPAAPrjAABcAT4DPRycrC7AAI3fwAEAGAAAAADAAQIQTp0PnRkAAIgeYAPAAP5+AR6dJMABAewBAAEcnTOAnSvAgjnvwACJhwAAAADAAPsnAD0cnUEuwABsMsABABgCAAJqnVJgA8AA/n7AAeWegZ1hwII6GgDAAQIPBsABAiiC9p10nYSeKgEAnn4AAAABA52QnioAAAAAAAAAYAPAAQDeAT4CTp2anaEAACldA8AA/TsBYAPAAP5+ARydqxadoy7AAI3VwAEAGMABAfVLAQABJ8AAjG8AwAD9gUmdwSEcncyAncXAgjqeSAEAASsAwAD9ZT4BSp3dAR6d8MABAOsBAAEcnfyAnfbAgjqeSwEAAZMAwAD9SgA+AUqeFQErBsABAjKC9p4vnjietwIAnn4AAAABA55DnrcAAAABAQGeUAAAAJ5+YAPAAQDeAABcAT4CPRyeYy7AAI3fwAEAGAAAAADAAQIQPRyeeC7AAGwywAEAGAIAAmqeiWADwAD+fsAB5YocnqiAnpzAgjs4IwAAAADAAP3yAMABAg8GwAECHYL2nryewZ99AACCRgAAAAEDnsaffQAAAAAAAABcAT4HPRyezy7AAI3fwAEAGAAAAADAAQIQPRye7Rae5C7AAI3VwAEAGMABAfWCRgAAAADAAP2LPRee+i7AAI3YwAEAGByfC5SBxgAAAADAAPy6wAEB+D0XnxMuwACN2cABABgpwAEB+T0XnzUuwACN2sABABgqwAEB+j0Xn1suwAB/tMABABgrwAEB+z0Xn20uwAB8wsABABgrwAEB/AbAAQIFgvafuJ+9pSMAALQrwAEAGAAAAAEDn8GlIwAAAAICAp/JAAAAgL1gA8AA/n4An88AAACAllsAAFwBPgNAHJ/ogJ/jwII8eEgBAAEen+vAAQIWAQABgJ/6wII8eAAAwAD+jZ/jn/8AQUegjRagmoCglcCCPHhhwAD+ggYBoK9qoK9gA8AA/JeBVwA+A0mguhyg1WqgymADwAD+fsAB5Y9IAQABgKDYwII8eADAAP6NPgI9HKDqLsAAjerAAQAYAgACgKDzwII8eIGg+cCCPIYAwAECCEqhCwA/SaElHKFAaqE1YAPAAP5+wAEzNUgBAAGAoUPAgjx4AMAA/o0+Aj0coVUuwACN68ABABgCAAKAoV7Agjx4gaFkwII8hgDAAQILSqF2AD9CoZAAAaGiaqGiYAPAAPyXhQcAPgJJoa0coctqob1gA8AA/n7AAeWeSAEAAYChzsCCPHgAwAD+jT4CPRyh4C7AAI3swAEAGAIAAoCh7MCCPHiBofLAgjyGAMABAglKogQAP0KiHgABojBqojBgA8AA/JeEFAA+AkmiPByiXWqiTGADwAD+fsAB5WdIAQABgKJgwII8eADAAP6NPgI9HKJyLsAAje3AAQAYAgACgKKBwII8eIGih8CCPIYAwAECDEqimQA/QqKzAAGixWqixWADwAD8l8AAljYAPgJJotEcovNqouFgA8AA/n7AAeWKSAEAAYCi9sCCPHgAwAD+jT4CPRyjCC7AAI3uwAEAGAIAAoCjGMCCPHiBox7AgjyGAMABAg1KozAAP0KjSgABo1xqo1xgA8AA/JfAAI0YAD4CSaNoHKOMaqN4YAPAAP5+wAHldkgBAAGAo4/Agjx4AMAA/o0+Aj0co6EuwACN78ABABgCAAKAo7PAgjx4gaO5wII8hgDAAQIGSqPLAD9Co+UAAaP3aqP3YAPAAPyXwACFbgA+AkmkAxykKmqkE2ADwAD+fsAB5fRIAQABgKQtwII8eADAAP6NPgI9HKQ/LsAAjfDAAQAYAgACgKRUwII8eIGkWsCCPIYAwAECB0qkbAA/SaSGHKSsaqSWYAPAAP5+wAHlq0gBAAGApK/Agjx4AMAA/o0+Aj0cpMEuwACN8cABABgCAAKApNXAgjx4gaTbwII8hgDAAQIKSqTtAD89HKUJLsAAjejAAQAYAgACgKUTwII8eIGlGcCCPIYAwAECDgbAAQIGgvalKKUtpjIAAMAAje/AAQAYAAAAAQOlPqYyAAAAAgICpUYAAACAvWADwAD+fgClTAAAAICWWwAAXAE+AUmlWSWlY4GlXcCCQBJgA8AA/Jc+AT0XpXMuwACNExSlg8CCQBIBAWADwAD8l8ABAitJpZUlpZ+BpZnAgkASYAPAAP5+PgE9F6WyLsAAjRMepcbAAPzGAQABFKXMwIJAEgEBYAPAAP5+AMABAis+AT0wpecfpfHAAQGbAQABJKYnAifAAI3ygKYiwIJABAAGwAECB4L2pjemPKb8AADAAI3wwAEAGAAAAAEDplCm/AAAAAICAqZYAAAAgL1gA8AA/n4Apl4AAACAllsAAFwBPgFJpmscpnWBpm/AgkDiSAEAASfAAI3gAMAA/fE+AT0XposuwACNFCnAAQIsPgE9HKa+LsAAjejAAQAYAgACaqbUYAPAAP5+wAHl9IGm7MCCQOIAwAECDgbAAQIIgvanAacGqAEAAMAAjerAAQAYAAAAAQOnDqgBAAAAAgICpxYAAACAvWADwAD+fgCnHAAAAICWWwAAXAE+AUmnKSWnM4GnLcCCQXpgA8AA+uM+AT0Xp0guwABNYxSnT8CCQXoBAWADwAD648ABAjBJp2Elp2uBp2XAgkF6YAPAAP5+PgE9HKd+LsAAbDLAAQAYAgACaqePYAPAAP5+wAHljxSnm8CCQXoBAWADwAD+fgDAAQIPPgE9MKe2H6fAwAEBmwEAASSn9gInwACN8oCn8cCCQWwABsABAgmC9qgGqAupDwAAwACN7MABABgAAAABA6gWqQ8AAAACAgKoHgAAAIC9YAPAAP5+AKgkAAAAgJZbAABcAT4BSagxJag7gag1wIJCVGADwAD64z4BPReoUC7AAIkNFKhawIJCVAEBYAPAAPrjwAECMUmobCWodoGocMCCQlRgA8AA/n4+AT0cqIkuwABsMsABABgCAAJqqJpgA8AA/n7AAeWeFKipwIJCVAEBYAPAAP5+AMABAg8+AT0wqMQfqM7AAQGbAQABJKkEAifAAI3ygKj/wIJCRgAGwAECCoL2qRSpGao1AADAAI3xwAEAGAAAAAEDqSyqNQAAAAICAqk0AAAAgL1gA8AA/n4AqToAAACAllsAAFwBPgFJqUclqVGBqUvAgkMuYAPAAPrjPgE9F6lmLsAAjRIUqXjAgkMuAQFgA8AA+uPAAQIvSamKJamUgamOwIJDLmADwAD+fj4BPRyppy7AAGwywAEAGAIAAmqpuGADwAD+fsAB5asUqc/AgkMuAQFgA8AA/n4AwAECDz4BPTCp6h+p9MABAZsBAAEkqioCJ8AAjfKAqiXAgkMgAAbAAQILgvaqOqo/rRYAAMAAjevAAQAYAAAAAQOqR60WAAAAAgICqk8AAACAvWADwAD+fgCqVQAAAICWWwAAXAE+AUmqYiWqbIGqZsCCRAhgA8AA/n4+A06qg6qHAACgAmADwAD8lwEcqo8UqonAgkQIAQFgA8AA/n6AuwEAASeC6gDAAP6RSaqjHKqrgqqnwIJELEgBAAEcqq6UgcYAAAAAwAD8ugDAAP27PgI9F6q8LsAAf7TAAQAYFKrEwIJECAEBYAPAAP5+wAEB+z0XqtMuwAB8wsABABhqquZgA8AA/Je+OsABAfw+AkmrDhyrFoKrEsCCRCyAlwEAAZMAwAD9xz4BPRerJy7AAH+0wAEAGByrNRSrL8CCRAgBAWADwAD+foC+AgACk4KrQsCCRCwAwAD+lMABAfs+AT0Xq2MuwAB/tMABABgrwAEB+0mrgxyrjxyri4Krh8CCRCxkAQABlADAAP29SAEAARarmBSrksCCRAgBAWADwAD+fmHAAP6CAMAA/bs+AT0Xq6wuwAB8wsABABhqq79gA8AA/Je+OsABAfw+AUs+AT0Xq/0uwAB8wsABABgerAnAAPzGAQABHKwVFKwPwIJECAEBYAPAAP5+gL4BAAEcrCOCrB/AgkQsZAEAAZQAwAD9vQDAAP6UAMABAfwAAaw2YAPAAPxqAaxQAAABg1NgA8AA/GoAAD4BPResYS7AAHzCwAEAGCvAAQH8PRysky7AAGwywAEAGAIAAmqspGADwAD+fsABMzUUrLDAgkQIAQFgA8AA/n4AwAECDz4BPTCsyx+s1cABAZsBAAEkrQsCJ8AAjfKArQbAgkP6AAbAAQIMgvatG60grjYAAMAAje3AAQAYAAAAAQOtLq42AAAAAgICrTYAAACAvWADwAD+fgCtPAAAAICWWwAAXAE+A06tTa1cAADAAI3zWwEcrWSBrV7AgkZ+loUAAAAAAEmtdxytioKte8CCRo1IAQABJ4KMAMAA/fE+AT0XrZ4uwACN2cABABgqwAEB+UmtyByt24KtzMCCRo1IAQABJ8AAjeQAwAD98T4BPRet9C7AAI3ZwAEAGCnAAQH5Pz0crhwuwACN6MABABgCAAKAribAgkZwga4swIJGfgDAAQIOBsABAg2C9q47rkCumAAAwACN7sABABgAAAABA65PrpgAAAACAgKuVwAAAIC9YAPAAP5+AK5dAAAAgJZbAABcAT4BPRyuai7AAGwywAEAGAIAAmque2ADwAD+fsAB5Yomro4Bga6OwIJHXmADwAD+fgDAAQIPBsABAg6C9q6drqKwIAAAwACN6MABABgAAAABA66rsCAAAAACAgKuswAAAIC9YAPAAP5+AK7AAAAAgJZgA8AA/eQAAFwBPgNOrtqu4QAAKV0DwAD9OwFgA8AA/n4BHK7rFq7jLsAAjdXAAQAYwAEB9UsBAAGAruzAgkfFAMAA/YFJrvccrwKCrvvAgkfnSAEAASsAwAD9ZT4CPYqvE8CCR+ceryDAAPg1AQFgA8AA/n4BkwA9HK8+Fq82LsAAjdXAAQAYwAEB9YC/AgACgK8/wIJHxYKvR8CCR+cAwAD9gj9Jr1klr2OBr13AgkfTYAPAAPrjPgE9HK9/gq94wIJH51YBAAEer4zAAQHsAQABFK+TwIJH0wEBYAPAAPrjAADAAP1MSa+nJa+xga+rwIJH02ADwAD+fj4BPRyvy4KvxMCCR+dWAQABFK/PwIJH0wEBYAPAAP5+AMAA/Uw+AT0cr/GCr+rAgkfnVgEAASav9QEer/XAAQIXAQABHLAKgbAEwIJH0yMAAAAAwAD98gBgA8AA/n4AwAD9TAbAAQIPgvawJbAqsNoAAMAAbDLAAQAYAAAAAQOwLrDaAAAAAgICsDYAAACAvWADwAD+fgCwQwAAAICWYAPAAP5+AABcAT4EQBywXICwV8CCSV5IAQABHrBfwAECFgEAAYCwbsCCSV4AAMAA/o2wV7BzAE6wh7COAAApXQPAAP07AWADwAD+fgEesJTAAPg1AQFgA8AA/n4BkwA9HLCwFrCoLsAAjdXAAQAYwAEB9YC/AgACgLCxwIJJXoKwucCCSasAwAD9gj0csMyCsMXAgkmrVgEAAYGw0MCCSWwAwAD9TAbAAQIQgvaw37DfsT8AAMAAjd/AAQAYAAAAAQOw7LE/AAAAAAAAAFsBPgFJsPUhFrD6LsAAjdbAAQAYwAEB9j0wsQQfsQ7AAQGbAQABJ8AAjfQAPwbAAQIRgvaxRLFEsdsAAMAAjenAAQAYAAAAAQOxVbHbAAAAAAAAAFsBPgJOsWOxbwAAwACN9WADwAD60QEiHLF3FrFxLsAAfMLAAQAYwAEB/EgBAAErAMAA/bsBHLGIFrGCLsAAfMLAAQAYwAEB/EgBAAEWsYsuwACN28ABABjAAQH9AMAA/bs9HLGmLsAAbDLAAQAYAgACJ5aII4Cxs8CCSpkWscEulojAAQIjJLHWAxaxyi6WiMABAiMnguoWsdAuwAB8wsABABjAAQH8AWADwAD+fgDAAQIPBsABAhKC9rHgseCypwAAwACN9sABABgAAAABA7HrsqcAAAABAQGx8wAAAIC9YAPAAP5+AABbAT4CSbH/IhyyCICyA8CCS21IAQABarIXYAPAAP5+wAHpwwDAAP6NASIhHLJFFrIzLsAAjdfAAQAYwAEB90gBAAErAMAA/WUAIRyycByyYhayUC7AAI3XwAEAGMABAfeAuwEAAYCyasCCS20AwAD9UEgBAAEcsnOUgcYAAAAAwAD8ugDAAP27PgFKsoABKj9KspgBKQbAAQITgvayrLKxstcAAMAAg2nAAQAYAAAAAQOyurLXAAAAAAAAAFwBPgE9F7LDLsAAjdbAAQAYKsABAfYGwAECFIL2styy4bY8AADAAGz5wAEAGAAAAAEDsue2PAAAAAEBAbL1AAAAhCZgA8AA7e0AAFwBPgFGswSzJ7MQAAAAgL1gA8AA/n4AFrMhFrMYLsAAjdXAAQAYwAEB9YNowAD9jz4JTrM8s0MAACldA8AA/TsBYAPAAP5+ARyzTRazRS7AAI3VwAEAGMABAfVLAQABgbNOwIJMjADAAP2BTrNgs2UAAINfYAPAAPrRASazYAEcs2cuwACN9sABABgBAAGBs3PAgkyMAMABAhJgA8AA+tFOs4SzjQAAwACN910DwAD9OwFgA8AA/JcBFrOUgbOPwIJMjJ/zwAD+hj0cs62As6XAgkx0VgEAAYSzscCCTSQAwADt8T0cs8qAs8LAgkx0l3kBAAFqs9xgA8AA/JeW0wDAAO3yPRyz8oCz6sCCTHSXeQEAAWq0BGADwAD8l4NKAMAA7fJFtA8BtBi0GgAAYmADwAD8lwGTARy0IYW0H8CCTatjAQABFrQqgrQjwIJMtmHAAP1rAMAA/cUBjbQywIJNqxy0M4W0MsCCTatkAQABlADAAP29PgJJtEEctEeFtEXAgk2rgJcBAAGTAMAA/cc+AUm0WIO0XMCCTO8+Aj0ctHiAtHDAgkx0l3kBAAFqtIpgA8AA/JfAAEZnAMAA7fI9HLSmgLSewIJMdJd5AQABarS4YAPAAPyXg0oAwADt8j4FPRy05IC03MCCTHSXeQEAAWq09mADwAD8l4QXAMAA7fI9HLUPgLUHwIJMdJd5AQABarUhYAPAAPyXhBQAwADt8j0ctTqAtTLAgkx0VgEAAYS1PsCCTSQAwADt8T0ctV2AtVXAgkx0l3kBAAFqtW9gA8AA/JeW0wDAAO3yPRy1i4C1g8CCTHSXeQEAAWq1nWADwAD8l4NKAMAA7fI/PRy1yIC1wMCCTHRWAQABFrXWHLXSgrXMwIJMtksBAAGFtdPAgk2rAMAA/Uqf88AA/oYAwADt8T0ctfiAtfDAgkx0l3kBAAFqtgpgA8AA/JeEFwDAAO3yPRy2HYC2FcCCTHSXeQEAAWq2L2ADwAD8l4QUAMAA7fIGwAECHoL2tkG2SLg4AAAjAAAAAQO2ULg4AAAAAAAAAGADwAD+fgE+A062ZrZpAACD6WADwAD+yAEftm/AAP7nAAAAAD0ctowWtoMuwACN1cABABjAAQH1g/0BAAE0tpQDtpS4GQAAAAICAracAAAAgL1gA8AA/n4Atq8AAAApXQPAAP07AWADwAD+fgAAYAPAAP2hAT4EPTW2vwAAAQBgA8AA/sgBgLa/wIJPojUAAAABAFsBHLbDg7bBwIJQEYKOAQABgbbJwIJP4wDAAP7cNQAAAAEAWwEcttCDts7AglARgo4BAAEng1sAwAD+3IMAwIJQEU626LbtAACDX2ADwAD60QEmtugBHLbvLsAAjfbAAQAYAQABgbb7wIJP4wDAAQISYAPAAPrRRbcIAbcRtxMAAGJgA8AA/JcBkwEctxqEtxjAglCmYwEAARa3I4K3HMCCT/FhwAD9awDAAP3FAYy3K8CCUKYctyyEtyvAglCmZAEAAZQAwAD9vT4CSbc6HLdAhLc+wIJQpoCXAQABkwDAAP3HPgFJt1GDt1XAglBuPgE9HLdsgLdpwIJPooKOAQABJ4GLAMAA/tw+AT01t5gAAAEAYAPAAP7IAYC3mMCCT6I1AAAAAQBbARy3nIW3msCCUTiCjgEAASeArwDAAP7cNQAAAAEAWwEct6mFt6fAglE4go4BAAGBt6/Agk/jAMAA/tw1AAAAAQBbARy3toW3tMCCUTiCjgEAASeDWwDAAP7chQDAglE4Pz0ct+SAt+HAgk+igo4BAAEct/CCt+rAgk/xSwEAAYS38cCCUKYAwAD9SgDAAP7cPRy4B4C4BMCCT6KCjgEAASeArwDAAP7cAMAA/YxKuCABHLgqgLgnwIJPoiMAAAAAwAD+4QbAAQIVgva4PbhKv0oAAMAAjfjAAQAYAAAAAQO4V79KAAAAAAAAAF0DwAD9OwFgA8ABAPEBPgVOuKu4swAAwACNLF0DwAD9OwFgA8ABAPEBHri5wAD4NQEBYAPAAQDxAZMAT7jNuNIAAAHAAI35YQMBYAPAAP5+XAADuOO+jAAAAAEBAbjrAAAAiGxgA8AA/n4AAFwBPgdOuPq5AAAAJ2ADwAD8lwGTT7kMuREAAAGfzmEDAGADwAD60QADuRW5OwAAAAAAAABgA8AA+tEBSrkbASIcuSGDuRvAglKvSAEAARy5JJSBxgAAAADAAPy6AMAA/bsBHLkwg7kqwIJSr0gBAAEWuTWCuTPAglKbYcAA/oIAwAD9u0+5RLlJAAABwACN+mEDAFwAA7lPucwAAAAAAAAAXAE+AUO5XCEcuWiEuWTAglLBIAAAAAAAPgJJuXgiIRy5hRy5fYK5fMCCUptLAQABg7l+wIJSrwDAAP6LSAEAASeA2QDAAP6NACEcuZgcuZCCuY/AglKbSwEAAYO5kcCCUq8AwAD+i0gBAAEng6wAwAD+jUq5oQA/PYu5s8CCUq8cubiDubPAglKvZAEAAZQAwAD9vU+51bncAAABwACN+2EDAGADwAD+fgADueW6uQAAAAAAAABgA8AA/n4BPgNOufa5/AAAamADwAD8lwGDuf7AglKvQUO6DSEcuhmEuhXAglLBIAAAAAAAPgJJuikiIhy6Nhy6LoK6LcCCUptLAQABg7ovwIJSrwDAAP6LSAEAASeA2QDAAP6NARy6SRy6QYK6QMCCUptLAQABg7pCwIJSrwDAAP6LSAEAASeDrADAAP6NARy6XRy6VYK6VMCCUptLAQABg7pWwIJSrwDAAP6LSAEAASeAvADAAP6NQrplAD89i7p2wIJSrxy6e4O6dsCCUq9kAQABlADAAP29SrqRARy6moK6mMCCUpuAvgIAAoe6pMCCVAuDuqvAglKvAMAA/pRPusK6yQAAAcAAjfxhAwBgA8AA/n4AA7rTu6cAAAAAAAAAYAPAAP5+AT4DTrrkuuoAAGpgA8AA/JcBg7rswIJSr0FDuvshHLsHhLsDwIJSwSAAAAAAAD4CSbsXIiIcuyQcuxyCuxvAglKbSwEAAYO7HcCCUq8AwAD+i0gBAAEngNkAwAD+jQEcuzccuy+Cuy7AglKbSwEAAYO7MMCCUq8AwAD+i0gBAAEng6wAwAD+jQEcu0scu0OCu0LAglKbSwEAAYO7RMCCUq8AwAD+i0gBAAEnltAAwAD+jUK7UwA/PYu7ZMCCUq8cu2mDu2TAglKvZAEAAZQAwAD9vUq7fwEcu4iCu4bAglKbgL4CAAIUu5LAglUsCACDu5nAglKvAMAA/pRPu7C7tQAAAcAAjHRhAwFgA8AA/n5gA8AA+tEAA7u7vE0AAAABAQG7wwAAAJz6YAPAAP5+AABgA8AA+tEBPgRJu9ccu9+Eu9vAglLBIAAAAAAASrvjASo/Sbv5IRy8Bhy7/oK7/cCCUptLAQABg7v/wIJSrwDAAP6LSAEAARS8CcCCVkoJAADAAP6NSrwTASo/PYu8KcCCUq8cvC6DvCnAglKvZAEAAZQAwAD9vUq8OgEpQ7xWIRy8YoS8XsCCUsEgAAAAAABBPgs9HLx2hbxwwIJTMSAAAAAAAEm8ghy8ioS8hsCCUsEgAAAAAABKvI4AP068pbyqAACAvWADwAD+fgEcvLWGvKzAglPiIAAAAAAAPRy8x4W8wcCCUzEgAAAAAABJvNMhHLzeFLzYwIJWJggAIAEAASeAvAAAPgI9i7zxwIJSrxy8+4K8+cCCUpuAuwIAAieW0IO9CMCCUq8AwAD+kUK9GgA/PRy9PIW9NsCCUzEgAAAAAABOvU+9VQAAgJZgA8AA/n4BHL1hh71XwIJVAyAAAAAAAEs+AT0cvYWAvX3AglJPVgEAAR+9jcABAm4CAAIUvZXAglcWCQAUvZvAgleeCgAAAMAA/UwAAb2uWwG9tQAAAYC1WwAAPgA9HL39hb33wIJTMSAAAAAAAEm+CRy+EYS+DcCCUsEgAAAAAABKvhUAP0m+JSEcvjAUvirAglYmCAAgAQABJ5bQAAA+Aj2LvkPAglKvHL5Ngr5LwIJSm4C7AgACJ5bQg75awIJSrwDAAP6RQr5sAD9OvqC+pwAAKV0DwAD9OwFgA8AA/n4BHL6xFr6pLsAAjdXAAQAYwAEB9UsBAAFqvr5gA8AA/n7AAem+AMAA/YFJvtEhHL7cgr7VwIJYc0gBAAErAMAA/WU+AT0cvvSCvu3Aglhzg/0BAAE0vvwDvvy/KwAAAAEBAb79AAAAwACN/WADwAD+fgAAXAFKvw0BHL8egb8NwIJSfCABAAGDvx/AgljpAAAAwAD9CT9KvzgBgL8/wIJSTwbAAQIWgva/T79dwABAfgABwACN/sABABgAAAABA79rwABAfgAAAAEBAb9zAAAAhJtgA8AA/n4AAGADwAD+fgE+AkW/gAG/ib+LAABiYAPAAPyXAZMBHL+Sgb+QwIJZbmMBAAEWv5qAv5TAgllSYcAA/oIAwAD9xQGJv6LAglluHL+jgb+iwIJZbmQBAAGUAMAA/b0+AUm/ryEev8DAAQXIAQABHL/TgL/NwIJZUoQQAQABgb/ewIJZbgDAAP6MAD4BPTC/7R+/98AA/HIBAAEkwABASwInwACN/xzAAEA8asAAQDdgA8AAyGeIxZV6AQABgMAAQEPAgllSAMAAyG4AP0rAAEBgARzAAEBtgMAAQGfAgllSloUAAAAAwAD+owbAAQIXgvbAAECDwABAisAAQb8AAcAAjgDAAQAYAAAAAQPAAECYwABBvwAAAAEBAcAAQJkAAACAllsAAFsBPgNJwABApiElwABAsIDAAECqwIJaeGADwAD+fkrAAEC8AYDAAEDDwIJaeD9FwABAzgHAAEDXwABA2QAAYmADwAD8lwGTARzAAEDggcAAQN7Aglq4YwEAASbAAEDoARbAAEDogMAAQOLAglp4YQBgA8AA/a4AwAD9xQGJwABA8MCCWrgcwABA8YHAAEDwwIJauGQBAAGUAMAA/b0+AUnAAED9IR7AAEEOwAEFyQEAASbAAEEhARzAAEEhgMAAQRvAglp4hBABAAGBwABBLMCCWrgAAGADwAD8lwA+AT0wwABBOx/AAEFFwAD8cgEAASTAAEGaAifAAI4BHMAAQYtqwABBhmADwADIZ4jFlXoBAAGAwABBksCCWngAwADIbgA/SsAAQa8BgMAAQbbAglp4AACCJ1sAgifLAIIozwCCKVIAgipRAIIrQQCCLUIAgi3JAIIuMgCCLs8Agi8LAIIwtgCCMPQAgjK2AIIy9ACCNLEAgjTtAII1YgCCNZ4AgjYTAII25QCCN4sAgjhdAII4+wCCOc0AgjpzAII7GACCO5UAgjxUAII/3gCCQK4AgkFGAIJCIACCQvoAgkPUAIJGSgCCRyoAgkefAIJJOACCShkAgkptAIJLRwCCTBEAgkxOAIJPeACCUhcAglkoAIJaSACCW7UAAAAwAsABAjWC9sAAQcTAAEHKwABTcAPAAI4CAAABYAHAAP3kAAFgAcABAMsDBMABAjiC9sAAQfnAAEH/GJc4wAEAGABgA8AA/n4ABMABAjmC9sAAQhfAAEIiGMAAeNXAAQAYAF0DwAD9bQJgA8AA/n5gA8AA/n4BKwTAAQI6gvbAAEI6wABCURjAAI4DwAEAGABdA8AA/W0CYAPAAP5+YAPAAP5+ASsBBcABAkWC9sAAQlbAAEJWwABDAQAAAAPAAEJiwABDAQAAAAIAAsAAQmkAAASXOGADwAD+fgFqwABCcmADwAD+foQowABCigAAAJq7XQPAAP1tAmADwAD+fmADwAD+fgFqAGADwAD9oXkAYAPAAQI1AT4BScAAQp0hHMAAQqyBwABCocCCXWVIAQABKwDAAP3xPgE9F8AAQr0uwAB41cABABgewABCz8AAwVUBAmADwAD+fmADwAD+fgGBwABC7MCCXWUAwAECOT8CCAHAAQI4gADAgl1ICQHAAEJWwAD9+gAAAAAGBsABAjyC9sAAQwbAAEMawABEMQABgwsAAAABA8AAQx/AAEQxAAAABAEBwABDJwAAAICWYAPAAP5+AAPAAEM1AAAAwACNF1sBasAAQ0lgA8AA/n7AALsowABDVAAAAMAAjRhbAWrAAENkYAPAAP2hecAAQ3AAAADAAI0ZWwFqwABDg2ADwAD60QBgA8ABAjUBPgNOwABDrsAAQ7UAAIF2YAPAAQI1AR/AAEO7wAECRQAAAAA9HMAAQ9aEwABDz8CCXprAAH+/wAEAGAQABIDAAEPdwIJeMSbAAEPkAYHAAEPkwIJeQmADwAD+fibAAEP4AYLAAEP4wIJeXmADwAD+fibAAEQIAYPAAEQIwIJed2ADwAD60QDAAQI/SsAARCABhMAARCfAgl6aBsABAkKC9sAARDbAAERBwABEUAEAgJYAAAABA8AAREfAAERQAAAAAAAAAGADwAD+fgFKwABESgEWwABESi6XOMABABjAAQI4BsABAj6C9sAARFXAAERawABEygAAwACOBMABABgAAAABA8AARGvAAETKAAAAAAAAAFwBPgFJwABEdBzAAESEFsAARHguwAB41cABABjAAQI5SAEAASsAwAD98T4BPRfAAESVLsAAeNXAAQAYHsAARKfAAMFTAAJgA8AA/n5gA8AA/n4AAMABAjk/BsABAkOC9sAARM/AAETnwABFqgEAmrsAAAABA8AARPLAAEWqAAAAAAAAAF0DwAD9bQJgA8AA/n5gA8AA/n4BPgM9HMAARPguwACOBMABABgAAAAAwAECPknAAEURHMAARS0WwABFFS7AAI4DwAEAGMABAjpIAQABKwDAAP3xPgE9F8AART4uwACOA8ABABgfwABFXMAAwvkBAmADwAD+fmADwAD+fgEWwABFcC7AAHjVwAEAGMABAjkAwAECOj9KwABFiAEWwABFjy7AAI4DwAEAGMABAjoGwAECQIL2wABFr8AARbbAAEbeAAAjAAAAAQPAAEW+wABG3gAAAAAAAABgA8AA/n4BPgROwABF1MAARdcAAIPpYAPAAP7IAR/AAEXdwAD+5wAAAAA9HMAARfSAwABF8cCCYQ2CjgEAARbAAEX6Lpc4wAEAGMABAjgAwAD+3EnA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jwGAiZbAgplHBsABAo6C8omlia+KQgAAwACBLwAAAAEDibaKQgAAAAAAAABgA8AA47oBPgJJib8cicsWicMunS/AAQAYwAEChUgBAAGTAMAA/btKidEBGonYwAEChD9KiegBHonzwADjvwEAAR6KE8AA48ADAAMWiioWiiIumFPAAQAYwAEChoKPwADjf5MWijUunS/AAQAYwAEChQAABsABApGC8opHik+KYAEAYQAAAAEDilaKYAAAAAAAAABgA8AA/JcBSopZARaKWS6dL8ABABjAAQKFBsABApKC8oplim6KhQEAgVUAAAABA4p2ioUAAAAAAAAAYAPAAPrRAUqKeQEcioEWinkunS/AAQAYwAEChUgBAAGTAMAA/bsGwAECk4LyioqKk4qtAQCDtwAAAAEDip6KrQAAAAAAAABgA8AA+tEBSoqhASEciqkWiqEunS/AAQAYwAEChUgBAAGTAMAA/bsGwAECj4LyirKKt4ruAACCRgAAAAEDiryK7gAAAAAAAABcAT4CPReKxS6dL8ABABiTwAEChT0XitYumFPAAQAYGorgwAEChMABAoYGwAECjILyivOK/ouaAAHAAIEzwAEAGAAAAAEDiwqLmgAAAAEBAYsPAAAAg4BgA8AA/JcAAGADwAD8lwE+CEAciyGAix/AgptwgJcBAAGTAMAA/ceLH4skAD2Iiy3AgptwHIsrgIstwIKbcIGNAQABlADAAP2+PYiLNMCCm3AcizaAizTAgptwgQYBAAEcizuAiznAgptwg8EBAAGUAMAA/LQAwAD8sD2Ii0XAgptwHItHgItFwIKbcIEGAQABHItMgItKwIKbcIPBAQABlQDAAPy0AMAA/LA9iItWwIKbcByLWICLVsCCm3CBBgEAARyLXYCLW8CCm3CDwQEAAZcAwAD8tADAAPywPYiLZ8CCm3Aci2mAi2fAgptwgQYBAAEci26Ai2zAgptwg8EBAAE3CADAAPy0AMAA/LA9iIt4wIKbcByLeoCLeMCCm3CBBgEAARyLf4CLfcCCm3CDwQEAATcQAMAA/LQAwAD8sEqLigEci5OAi5HAgptwZAEAAZQAwAD9vQAAgpR8AIKWrACCl8oAgpjyAIKZoQCCmjcAgppwAIKatwCCmv8AgptKAIKczwAAAAoCwAECloLyi/uMAZExA8AAjiAAAAFdAcAAuhwB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RAcBH8AARA7AAQMBAQABgMAARCfAgsqeAAAAgsoPAILKdACCyukAAAACAsABAvmC8sAARDXAAEQ7wABFOwPAAI5gAAABYAHAAP3kAAFdAcAA/kwBXQPAAP07AWADwAD8lwEEwAEC/ILywABEusAARMEJiBXAAQAYAF0DwAD+TAFgA8AA47oAAQXAAQMBgvLAAERzwABEecAARJ8BAAADwABEkcAARJ8AAAABAQHAAESXAAAEiBVdA8AA/kwBYAPAAOO6AABgA8ABAvkBPwIIAcABAvyAAMCCy30JAcAARHnAAP36AAAAAAIGwAEC/oLywABExsAARMvAAEUOAABWAAAAAQPAAETOwABFDgAAAAEBAcAARNkAACASXQPAAP07AWADwAD8lwAAXAE+AT0cwABE7RbAAETlLogVwAEAGMABAvxWAQABHsAARPvAAOO/AQABgMAARQTAgsviAADAAP5OBsABAv+C8sAARRPAAEUYwABFOQAAgowAAAABA8AARR3AAEU5AAAAAAAAAFwBPgE9HMAARS4WwABFJi6IFcABABjAAQL8gowAAAAAwAD+TwAAgsu5AILMMgCCzIEAAAACAsABAwKC8sAART7AAEVEwABTjwPAAIMrAAEAAIJ6YAPAAP3kAVsBYAHAAP3kAAFdAcAAunoBXwMAAAcEwAEDBYLywABFjMAARZMJiBXAAQAYAF0DwAC6dAFfAwAAAATAAQMGgvLAAEWnwABFxwnAAIMswAEAGABdA8AAuYgBWwEewABFvMAAuYoAAVsAAATAAQMHgvLAAEXfwABF8ljAAIMtwAEAGABdA8AAuqQBXwMAAAErBMABAwiC8sAARgDAAEYUGMAAgy7AAQAYAF0DwAC5iAFbASsEwAEDCYLywABGHcAARi4YwABuR8ABABgAYAPAAPrRASoEwAEDCoLywABGN8AARkcYwACDL8ABABgAYAPAAPrRASoEwAEDC4LywABGUMAARmEYwABwQ8ABABgAYAPAAPrRASoBBcABAxuC8sAARmbAAEZmwABGgwAAAAPAAEZ1wABGgwAAAAEBAcAARnsAAASIFV0DwAC6dAFfAwAAAABdA8ABAwIBXwMAAAE/AggBwAEDBYAAwILN8gkBwABGZsAA/foAAAAACgbAAQMNgvLAAEaIwABGjcAARwMAAFYAAAABA8AARpDAAEcD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yATAAQNKgvLAAGAZwABgJhjAAI5uwAEAGABgA8AA/n4BKwTAAQNLgvLAAGA3wABgPxjAAI4qwAEAGABdA8AA/TsBYAPAAQDxASsEwAEDTILywABgUMAAYFwYwACOPsABABgAYAPAAQLGASsEwAEDTYLywABgacAAYHIYwACOb8ABABgAYAPAAPttASsEwAEDToLywABgfMAAYIoYwACOcMABABgAYAPAAL1NASsBBcABA2KC8sAAYI/AAGCPwABhogAAAAPAAGCcwABhogAAAAUFBcAAYKEAAACArGADwAD+/wDAAGCtAAAAwACNLmADwAD+fgDAAGDMAAAAwACOZmADwAEDjADAAGDoAAAAwACOcWADwAEASgDAAGD/AAAAwACMRWADwAD+fgAAYAPAAQNGAT4BScAAYWEhHMAAYXKEwABhZcCC6AlIAQABKwDAAP6NPRzAAGGDFsAAYXsunn3AAQMzl1ACAAInwAB9CITAAGGRwILoCQDAAQIYPwEJAMAAYRXAAQNFBAADgMAAYRvAgufDgcAAYSDAgufTgsAAYTHAguflAcAAjd0mwABhSwGDwABhS8CC5/dgA8ABAfINBsABA1GC8sAAYafAAGGwwABh7gEAwACOa8ABABgAAAABA8AAYcTAAGHuAAAAAAAAAGADwAD60QFKwABhxwEWwABh5BbAAGHUFsAAYccuwACOPsABABjAAQNMwACOLsABABjAAQLLwACOcsABABjAAQRaBsABA1KC8sAAYfPAAGIEwABiXgEAwACNLAAAAAEDwABiDMAAYl4AAAAAAAAAXQPAAP07AWADwAEA8QE+AknAAGISHMAAYh8WwABiFi7AAI4qwAEAGMABA0tIAQABKwDAAP1lPRfAAGIoLsAAjirAAQAYHsAAYjfAAPg1AQFgA8ABAPEBkwDAAQNLP0rAAGJLARbAAGJSLsAAjirAAQAYwAEDSwbAAQNTgvLAAGJjwABia8AAYoQBAINYAAAAAQPAAGJ2wABihAAAAAAAAABgA8AA/JcBSsAAYnkBFsAAYnkuwACObcABABjAAQNJBsABA1iC8sAAYojAAGKRwABjHQIAg1gAAAABA8AAYpvAAGMdAAAAAQEBwABioAAAAINYYAPAAPyXAABcAT4CScAAYrIWwABiwBbAAGK2LsAAjmXAAQAYwAEDMsAAjmjAAQOf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wABxW2ADwAD8l8ABi+0APgFKwABxgAEnwACOfgHAAHG+asAAcb5gA8AA/JfAAYvxAD4BSsAAcdEBJ8AAjn8BwABx/GrAAHH8YAPAAPyXwAGL9QA+AUrAAHISASfAAI6AAcAAckBqwAByQGADwAD8l8ABi/kAPgFKwAByWAEnwACOgQHAAHKIasAAcohgA8AA/JfAAYwJAD4BSsAAcqEBJ8AAjoIBwABy0mrAAHLSYAPAAPyXwAGMDQA+AUrAAHLsASfAAI6DAcAAcx5qwABzHmADwAD8l8ABjBEAPgFKwABzLQEnwACOhAHAAHNTasAAc1NgA8AA/JfAAYwVAD4BSsAAc2UBJ8AAjoUBwABzj2rAAHOPYAPAAPyXwAGMGQA+AUrAAHOkASfAAI6GAcAAc9FqwABz0WADwAD8l8ABjB0APgFKwABz4wEnwACOhwHAAHQNasAAdA1gA8AA/JfAAYwhAD4BSsAAdCgBJ8AAjogBwAB0W2rAAHRbYAPAAPyXwAGMKQA+AUrAAHRvASfAAI6JAcAAdJtqwAB0m2ADwAD8l8ABjC0APgFKwAB0sQEnwACOigHAAHTeasAAdN5gA8AA/JfAAYwxAD4BSsAAdPcBJ8AAjosBwAB1KGrAAHUoYAPAAPyXwAGMNQA+AUrAAHU7ASfAAI6MAcAAdWVqwAB1ZWADwAD8l8ABjDkAPgFKwAB1dwEnwACOjQHAAHWhasAAdaFgA8AA/JfAAYw9AD4BSsAAdbsBJ8AAjo4BwAB17mrAAHXuYAPAAPyXwAGMQQA+AUrAAHYFASfAAI6PAcAAdjRqwAB2NGADwAD8l8ABjEUAPgFKwAB2WQEnwACOkAHAAHaXasAAdpdgA8AA/JfAAYxJAD4BSsAAdq8BJ8AAjpEBwAB24GrAAHbgYAPAAPyXwAGMTQA+AUrAAHbyASfAAI6SAcAAdxtqwAB3G2ADwAD8l8ABjFEAPgFKwAB3KQEnwACOkwHAAHdOasAAd05gA8AA/JfAAYxVAD4BSsAAd2YBJ8AAjpQBwAB3lmrAAHeWYAPAAPyXwAGMWQA+AUrAAHeyASfAAI6VAcAAd+ZqwAB35mADwAD8l8ABjF0APgFKwAB4BQEnwACOlgHAAHg+asAAeD5gA8AA/JfAAYxhAD4BSsAAeFkBJ8AAjpcBwAB4jmrAAHiOYAPAAPyXwAGMZQA+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LsAAjt8AAAAAwAEDy0rAANLrAD9JwADTCRbAANMNLsAARzTAAQPCSsAA0xUAP0nAANMnIiIiISbAANMrARTAANMswINI/QsAYAPAAPrRACEWwADTRi7AAI7OwAEAGMABA70AFsAA03EWwADTaRTAANNgwINIlQoAnn3AAQKdnnjAAQIgABbAANOfh8AA05fAg0JsnnjAAQM2PgI9HMAA1AIWwADT9i7AAH0NwAEAGMABA7zAAI7gwAEAGAEAAS4AwAEEIj0cwADUNRbAANQnLpyEwAEAGMABA7uCBQAAAADAALpcPgE9HMAA1F4uwAB/nAAAAADAAQPGAMAAuXtJwADVKSIhHMAA1TiEwADVLcCDQhFIAQABKwDAAP3xABzAANVhFsAA1VqEwADVT8CDQhGBvMABBPVIAQABasAA1XpgA8ABBN3AAfFqAMAA/fE+Ak7AANWSwADVmwAAwACO4V0DwAD9OwFgA8AA/n4BHMAA1a0WwADVphTAANWdwINIlQoAnn3AAQKdSwEAASfAAI7iAMABAgBJwADV1iIhHMAA1eMUwADV2sCDSrILAEgBAAErAMAA/WUAHMAA1f4WwADV9xTAANXuwINKsgsAYcAA/WtIAQABlADAAP27PgNOwADWFsAA1h0AAJmgYAPAAQI1AR7AANY8wAECPAIAARzAANZKFMAA1kLAg0qyCwBLAQABkwDAAP1KAcAAjRcngKdOwADWecAA1oMAAMAAjuNgA8AA/n4BHMAA1pYWwADWjBTAANaFwINLQAwAmrvAAQJDSwEAASfAAI7jAMAA/YFJwADWsSEcwADWvxTAANa1wINLgg0ASAEAASsAwAD+jT0XwADW04TAANbIwINCEcAAjloUwADW28CDS4INAMABBPA/Pz9JwADXeCIhHMAA14KFwADXfMCDQiRIAQABKwDAAP3xABzAANeaFsAA15OFwADXjcCDQiSBvMABBPVIAQABasAA17NgA8ABBN3AAfFqAMAA/fE+Ak7AANfLwADX1AAAwACO4V0DwAD9OwFgA8AA/n4BHMAA1+YWwADX3xTAANfWwINIlQoAnn3AAQKdSwEAASfAAI7kAMABAgBJwADYCSIhHMAA2BYUwADYDcCDTFkLAEgBAAErAMAA/WUAHMAA2DEWwADYKhTAANghwINMWQsAYcAA/WtIAQABlADAAP27PgNOwADYScAA2FAAAJmgYAPAAQI1AR7AANhvwAECPAIAARzAANh9FMAA2HXAg0xZCwBLAQABkwDAAP1KAcAAjRcngKdOwADYrMAA2LYAAMAAjuNgA8AA/n4BHMAA2MkWwADYvxTAANi4wINM5wwAmrvAAQJDSwEAASfAAI7jAMAA/YFJwADY5CEcwADY8hTAANjowINNKQ0ASAEAASsAwAD+jT0XwADZAYXAANj7wINCJMAAjloUwADZCcCDTSkNAMABBPA/Pz89HMAA2TqHwADZMsCDQmzAAI6owAEAGAEAARTAANlGwINIlQoAAMABA3kAwAC5e4HyAgABNMAA2ckDwADZycAA2j8AAAABAQHAANnKAAAAgcdbAABgA8AA/aEBPgE9MMAA2dsfwADZ5cABAZsCAAEnwACO5QGArIDAANoywINBTwGXKzTAANpHA8AA2kfAANplAAAAAQEBwADaSAAAAIHHYAPAAP3kAABgA8AA+tEBSsAA2lIBJcAA2lgUwADaUsCDTkMKAGADwAD8McAAuXyB8gEAATTAANpyA8AA2nLAANr3AAAAAgICwADacwAAAIHHWwDAANp6AAAAhlRbAABgA8AA/aEBPgI9HMAA2rguwAB/nAAAAADAAQPGPRzAANrTh8AA2svAg0JswABwK8ABABgCAAIUwADa3MCDTpQKACbAANrjARTAANrjwINOnwsAYAPAAP5SAMABA3oAwAC5fD0cwADbQRbAANszLpyEwAEAGMABA7uCBQAAAADAALpcSsAA21EBFMAA21jAg0gOCQABgaw0wADbawPAANtrwADbhwAAAAEBAcAA22wAAACDU1sAAGADwAD9oQE+AT0cwADbdy7AAH+cAAAAAMABA8bAALl7wAEDwUrAANuOAYfAANuVwINCbAbAAQPFgvLAANulwADbtMAA3DIAAMAAjTEAAAABA8AA28DAANwyAAAAAAAAAF0DwAC5aAFgA8AA9TMBPgFKwADbyQEcwADb3hbAANvQLsAAjtLAAQAYwAEDwYGvAQFgA8AA9TMBNMAA2+wDwADb7MAA3C0AAAABAQHAANvtAAAAgLVgA8AA9TMAAGADwAEEvAFKwADb8wEfwADb98ABBNwCAAIWwADcBy7AAICKwAEAGMABA7ccwADcHBbAANwQLsAAjs3AAQAYwAEDusAAjuYAAAAA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AAErAMAA/fE+Aj0cwADjRRbAAOM6LsAAjs/AAQAYwAEDvpyGAAAAAMAAvVM9F8AA41UuwACOz8ABABgrwAEDvj8GwAEDy4LywADjdcAA43rAAOQUAADAAI7fAAAAAQPAAOOEwADkFAAAAAAAAABcAT4CQBzAAOOfFsAA45QuwACOz8ABABjAAQO+SAEAASsAwAD98cAA45TAAOOmAD0XwADjrS7AAI7PwAEAGB7AAOO+wAC9TwIAAhbAAOPQFsAA48QuwAB9DcABABjAAQO8wACMR8ABBAY0wADj3QPAAOPdwADkDwAAAAAAAABgA8AA/aEBPgI9F8AA4+guwACOz8ABABgrwAEDvj0cwADkAS6CjAAAAADAAQPHAMABA74AAINBJQCDT5QAg1ByAINRAACDUgsAg1YUAINWawCDVyAAg1exAINYjwAAAAkCwAED0ILywADkGcAA5B/AAOSiA8AAju0AAAFgAcAA/eQAAAIEwAED0oLywADkT8AA5FkJwACEQwBgA8ABA7MABMABA9OC8sAA5GrAAORvCcAAjAIAYAPAAQSnAAEFwAED1YLywADkdMAA5HTAAOSgAAAAA8AA5IPAAOSgAAAAAgICwADkiQAABMAAhENgA8ABA7MAwADkmgAABMAAjAJgA8ABBKcAAGADwAED0AE/AwgBwAED0oAAwINZPggBwAED04EAwINZUAkBwADkdMAA/foAAAAAAAAAg1mTAAAAAALAAQPWgvLAAOSlwADkq8AA+MkDwACO7gAAAWABwAD95AAACgTAAQPYgvLAAOT6wADk/QmD1gBgA8AA/n4ABMABA9mC8sAA5Q7AAOUSCZaIAGADwAD+fgAEwAED2oLywADlIMAA5SQJlokAYAPAAPyXAATAAQPbgvLAAOUzwADlOwnAAI7qAGADwAD60QAEwAED3ILywADlVcAA5VwJglcAYAPAAPRSAATAAQPegvLAAOWBwADllgnAAI7vwAEAGABdA8AA/i8BYAPAAQOzAR7AAOWNwADBXAABYAPAAQOzAAAEwAED34LywADlu8AA5dIJwACO8MABABgAXQPAAP4vAWADwAEDswEewADlycAAwVwAAWADwAEDswAABMABA+CC8sAA5fDAAOYMCcAAjvHAAQAYAF0DwAD+LwFdA8AA9RMBWwEewADmA8AAwVwAAV0DwAD1EwFb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AWADwAEDYwE0wAERQAPAARFAwAETcwAAAAEBAcABEVQAAACDVmADwAEDYwAAYAPAAQNjAT4DPTXAARFlAAABAGADwAEDYwGEwAERZcCDiMQ1AAAAAQBbARfAARGwhcABEa7Ag4jgwACNSxbAARHLgsABEcLAg4gRwACNS8ABA3TAAQN/NQAAAAEAWwEXwAESEIXAARIOwIOI4MAAjUwWwAESKILAARIfwIOIEcAAjUzAAQNzwAEDfoUAwIOI4EbAARJTwAEShsABElwAAACZoGADwAD+fgAWwAESgBbAARJ3FsABEm+CwAESZsCDiBGefcABAzPAAI3VwAEAGMABAfWDaMAA/Y8+AUnAARKQHMABEqwcwAESoxbAARKchMABEpTAg4jEnn3AAQMzSwEAAYXAARKkwIOJbwDAAQIASAEAASsAwAD9ZT4BPRzAARLRFsABEsmEwAESwcCDiMSefcABAzOXUAIAAoXAARLVwIOJbxzAARLtFsABEuaCwAES3cCDiBGefcABAzNLAQABhcABEu7Ag4lvAMABAgAAwAECGD9KwAETEAE1wAETFwAAAQBgA8ABA2MBhMABExfAg4jENQAAAAEAWwEXwAETMRbAARMphcABEyfAg4pSnn3AAQMzwACNFCrAAQIsNQAAAAEAWwEXwAETW4XAARNZwIOKUsAAjROTwAEDPIUAwIOKUgDAALl7BsABBCKC8sABE63AAROywAEUSgAAwACO4MABABgAAAABA8ABE8PAARRKAAAAAQEBwAET2gAAAMAAhENgA8ABA7MAAFwBPgI9HMABFA8cwAET/hbAARPsLsAAjwfAAQAYwAED90sBAAEWwAEUCoDAARP/wIOK7oPWwAEDtQDAAP2BwACO+AEAAYDAARQgwIOK7gDAAQPsPRzAARQxLsAAjvzAAQAYAAAAAMABBCQGwAEEI4LywAEUhMABFInAARX5AADAAI5IwAEAGAAAAAEDwAEUmsABFfkAAAABAQHAARSxAAAAwACEQ2ADwAEDswAAXAE+Az0cwAEUzoDAARTDwIOLm8AAjuwAAAAAwAEDyk7AARTjwAEU9AAAwACPFGADwAED1gEcwAEVCBbAART2LsAAjwfAAQAYwAED90sBAAEWwAEVFIDAARUJwIOLm4PWwAEDtQDAAP2BScABFR4hHMABFTOBwAEVIsCDi85I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HAAAAAICAsABKm8AAATAAICKWwDAASp9AAAEwACOLWADwAEEcgAAYAPAAQQ/AT4DPRzAASrSGsABKsbAAQRGgL8CAAIWwAEq0y7AAH/GwAEAGMABAnYuAMAA/YI9HMABKvcWwAEq6y7AAI7NwAEAGMABBEnAAI7TAQABJsABKwYBFsABKwYuwACAisABABjAAQRHXQPAALocAWADwADjugDAAQW/PRfAASsULpyEwAEAGBzAASswFsABKyQuwACOzcABABjAAQRJgfoDAAE0wAErNwPAASs3wAExegAAAAEBAcABKzgAAADAAI6pYAPAAQKWAABgA8AA/aEBPgs9HMABK1YWwAErSi7AAI4twAEAGMABBEjAAI8uwAEAGAEAAS4AwAEEiz0cwAErvBbAASuzgsABK6rAg6WqwACOJ8ABAqaBrwEBWwE0wAErwQPAASvBwAEr9AAAAAEBAcABK8IAAAC041sAAGADwAD9oQE+AUnAASvVJsABK9kBg8ABK9nAg6YlYAPAAPrRPRzAASviLsAAf5wAAAAAwAEEUD8AwAC5ez0cwAEsgxbAASx1LpyEwAEAGMABBEuB/AAAAADAALpbPRfAASySLsAAZDDAAQAYasABLJtgA8AA/JcJwAEESk7AASyuwAEstwAAwACOZmADwAEDjAEfwAEsvcABA7IBAAEmwAEsywEWwAEsyy7AAICKwAEAGMABBEdgA8AA9TMATsABLN/AASzoAACDV2ADwAEDRgEfwAEs7sABA2IFAAUWwAEtEILAAS0HwIOlqoCswAECohbAAS0wFsABLSiCwAEtH8CDpaqefcABAp3AAI0uwAEB/oPAAS1LwIOmrRbAAS1rFsABLV8uwACOLcABABjAAQRIwACMSMABBH8WwAEtmRbAAS2NLsAAji3AAQAYwAEESMAAjEXAAQR+AE7AAS2ywAEtugAAg1ZgA8ABAsYBH8ABLcDAAQLYBAAEhMABLc3Ag6bugsABLdfAg6WqFsABLeEuwACOLcABABjAAQRILgA9F8ABLfsuwACO0sABABgcwAEuGRbAAS4Ug8ABLgvAg6atn87AAQOuga8CAVsBNMABLh4DwAEuHsABML8AAAABAQHAAS4fAAAAgLVgA8AA9TMAAGADwAD9oQE+Az0XwAEuNYTAAS4swIOm7sAAjTArwAEDWknAAS5OHMABLlkWwAEuUi7AAGQwwAEAGMABBEpIAQABasABLlxgA8AA/JdTAMAA/btKwAEuZwA/ScABLnciIiIiFsABLoSEwAEue8CDpu6eeMABAzYAFsABLrCFwAEuqMCDp4ueeMABAsMAFsABLt2CwAEu1MCDparAAI4jwAECnAAhFsABLwYWwAEu+i7AAI7NwAEAGMABBEnAAIyYwAEF2QAhFsABLyoWwAEvHi7AAI4twAEAGMABBEjAAEc0wAEEgT4EPRfAAS8+LsAAZDDAAQAYasABL0dgA8AA/JcVwAEESj0XwAEvWC7AAI8twAEAGCrAAQRMPRzAAS+BFsABL3UuwACOLcABABjAAQRIwACPL8ABABgBAAEuAMABBIo9HMABMBMWwAEwBS6chMABABjAAQRLggUAAAAAwAC6XD4BPRzAATCjLsAAf5wAAAAAwAEEUAGBrDTAATDKA8ABMMrAATDqAAAAAQEBwAEwywAAAIC1WwAAYAPAAP2hAT4BPRzAATDYLsAAf5wAAAAAwAEEUMAAuXvAAQRNPRfAATD8g8ABMPPAg6atwACOtRzAATEYFsABMRGFwAExCcCDp4uWc8ABAtNIAQABJ8AAjkMAwAD+jcABA549F8ABMTKEwAExKcCDpu7AAI4+wAEAGIXAATFBwIOni8ABA0w9HMABMVwWwAExUC7AAI4twAEAGMABBEjAAI8wwAEAGAEAAYXAATFrwIOniwDAAQSIAoOONMABMYQDwAExhMABMZ8AAAAAAAAAYAPAAP2hAT4BPRzAATGPLsAAf5wAAAAAwAEEUIGsNMABMaoDwAExqsABMhcAAAABAQHAATGrAAAAgcdbAABgA8AA/aEBPgE9HMABMgcuwAB/nAAAAADAAQRQwAEFvsABBEsECAHAAQRHgADAg6TPCAHAAQRIgQDAg6TcCADAAQRJHsABKqTAAQW7AAAAAAkBwAEqWsABBDEAAAAADAbAAQRPgvLAATIhwAEyJsABMksAAMAAjzEAAAABA8ABMi7AATJLAAAAAAAAAFwBPgE9F8ABMjcuwACPLcABABgpwAEETAbAAQRVgvLAATJQwAEyWcABMnIBAMAAjzIAAAABA8ABMmbAATJyAAAAAAAAAGADwAD60QFKwAEyaQEWwAEyaS7AAI8twAEAGMABBEwGwAEEUILywAEyd8ABMnzAATNBAADAAH+cAAAAAQPAATKDwAEzQQAAAAAAAABcAT4FScABMowiHMABMpcWwAEykC7AAGQwwAEAGMABBEpIAQABasABMppgA8AA/JchAMAA/bsBHMABMq0WwAEypi7AAGQwwAEAGMABBEpIAQABasABMrBgA8AA/JdTAMAA/btKwAEyuwA/PRfAATLHLsAAZDDAAQAYasABMtBgA8AA/JchwAEESj0cwAEy5hbAATLeLsAAgIrAAQAYwAEER8AAf5wAAAAAAD0cwAEzARbAATL1LsAAji3AAQAYwAEESMAAjkjAAQAYAQABLgDAAQSJPRzAATMrGsABMx7AAQRGhF4BAAEWwAEzMi7AAH/GwAEAGMABAnYAwAD9igbAAQRRgvLAATNGwAEzVcABNKwAAMAAjTEAAAABA8ABM2HAATSsAAAAAAAAAF0DwAC5aAFgA8AA9TMBPgQ9F8ABM2ouwABkMMABABhqwAEzc2ADwAD8l1PAAQRKPRzAATO0FsABM6guwACOLcABABjAAQRIwACOSMABABgBAAEuAMABBIlOwAEz6MABM/kAAMAAjzNgA8ABBZQBHMABNAcWwAEz+y7AAI7NwAEAGMABBEnAAI7mAAAAAMABBdNKwAE0HgEcwAE0MxbAATQlLsAAjtLAAQAYwAEETYGvAQFgA8AA9TMBNMABNDgDwAE0OMABNKcAAAABAQHAATQ5AAAAgLVbAABgA8ABBLwBPgI9HMABNFEawAE0RMABBEaEXgEAARbAATRYLsAAf8bAAQAYwAECdgDAAP2KSsABNGsBH8ABNHbAAQTcAgACJsABNIYBFsABNIYuwACAisABABjAAQRHYAPAAPUzgMABNI/Ag61rAADAALl7BsABBFaC8sABNLHAATTIwAE0/QEAnnoAAAABA8ABNNfAATT9AAAAAAAAAGADwAEBgAFKwAE02gEewAE07sABBLkBAAEmwAE09QEWwAE09S7AAICKwAEAGMABBEdgA8AA9TMABsABBFiC8sABNQLAATULwAE1KQEAwACPNMABABgAAAABA8ABNRXAATUpAAAAAAAAAGADwAD60QFKwAE1GAEcwAE1HxbAATUYLsAAZDDAAQAYwAEESkgBAAFqwAE1ImADwAD8lwkAwAD9uwbAAQRZgvLAATUtwAE1NsABNVABAMAAjzXAAQAYAAAAAQPAATU+wAE1UAAAAAAAAABgA8AA+tEBSsABNUEBHMABNUgWwAE1QS7AAGQwwAEAGMABBEpIAQABasABNUtgA8AA/JcVAMAA/bsGwAEEWoLywAE1VMABNV3AATV9AQDAAI5ywAEAGAAAAAEDwAE1aMABNX0AAAAAAAAAYAPAAPrRAUrAATVrARzAATVyFsABNWsuwABkMMABABjAAQRKSAEAAWrAATV1YAPAAPyXIQDAAP27BsABBFuC8sABNYHAATWKwAE1rAEAwACPNsABABgAAAABA8ABNZbAATWsAAAAAAAAAGADwAD60QFKwAE1mQEcwAE1oBbAATWZLsAAZDDAAQAYwAEESkgBAAFqwAE1o2ADwAD8l1MAwAD9uwbAAQRcgvLAATWxwAE1vMABNesBAMAAf8jAAQAYAAAAAQPAATXNwAE16wAAAAAAAABgA8AA/n4BSsABNdABJ8AAjzcGwAEEXYLywAE178ABNfrAATYkAQDAAH/JwAEAGAAAAAEDwAE2C8ABNiQAAAAAAAAAYAPAAP5+AUrAATYOASfAAI84BsABBFOC8sABNinAATYtwAE59gAAwAB1G8ABABgAAAABA8ABNjTAATn2AAAAAQEBwAE2OgAAAJfpYAPAAPrRAABdA8AA/W0CW1sBPgdOwAE2ScABNk4AAIC9YAPAAP5+ASQABxbAATZjFsABNlsWwAE2Uy7AAICKwAEAGMABBEfAAHWnAJaIACeC6hbAATZzFsABNmsuwACAisABABjAAQRHlokAJ8AAjzkWwAE2oBbAATaSFsABNoouwACAisABABjAAQRHnnsAlogAJ4LqFsABNrAWwAE2qC7AAICKwAEAGMABBEeefABOwAE2xsABNsgAAIOpXQPAAP1tAmADwAD+flsBMsABNttgA8AA/n5bBCe0EhbAATbpLsAAf8fAAQAYwAECdyeClBzAATcFLsAAf8rAAQAYAQABgMABNxLAg7EfAMABAn0ngL2BwAE3JsCDsT0nwACPOoHAATc/wIOxPUnAATdQgMABN1TAg7EfPgFKwAE3YQGCwAE3aMCDsdk/PRzAATd2gsABN3XAg7HZgL8CAAInwAB9CBzAATePFsABN4MuwACOLcABABjAAQRIwAB1G8ABABgBAAEpAMABBIwAwAD9gks+AT0cwAE3r4LAATeuwIOx2YC/AgACJ8AAfKMcwAE3xBbAATe8LsAAgIrAAQAYwAEER8AAdRvAAQAYAQABKQAAAMAA/YIAAcABN9lbAcABN+AAAAGAtVsAAD4BPRzAATfsgsABN+vAg7HZgL8CAAInwAB8ozLAATf5YAPAAP5+YAPAAP5+BCe0EhbAATgJLsAAf8fAAQAYwAECdyeClCfAAI87J4C9J8AAjzwnwACPOifAAI88AMAA/YJBR8ABOIYWwAE4ji7AAGQwwAEAGMABBEoFAcABOKNqwAE4o2ADwAD8lwkAPgI9HMABOLWCwAE4tMCDsdmAvwIAAieCUifAAI89AMAA/YJCwAE40wABwAE45WrAATjlYAPAAPyXFQA+Aj0cwAE49YLAATj0wIOx2YC/AgACJ4JSJ8AAjz4AwAD9gkLAATkRAAHAATkjasABOSNgA8AA/JchAD4CPRzAATk2gsABOTXAg7HZgL8CAAInglInwACPPwDAAP2CQsABOVUAAcABOWdqwAE5Z2ADwAD8l1MAPgI9HMABOXuCwAE5esCDsdmAvwIAAieCUifAAI9AAMAA/YJCwAE5mwAAAT4CPRzAATm6gsABObnAg7HZgL8CAAInglInwABcFgDAAP2CQsABOdkASsABOeoBgsABOfHAg7HZAACDqykAg6tuAIOrugCDrOUAg65eAIOuwQCDrysAg6+VAIOv/wCDsGkAg7CsAIOw7wCDtLIAAAAMAsABBGCC8sABOirAATowwAFWuDfAAI9BAAABXQHAALocAWADwAEBAAABYAHAAQJwAQTAAQRngvKBZ4F2GMAAf8XAAQAYAGADwAD8lwGTAgXAAQRiAAAAAAQAAAMAAAAAAAAAAABgA8ABBGABPwEJAADAALpSAAAAAAXAAQRkAAAAAASGa8AAuEcAAwAAAAAAAAAAAGADwAEEYAE/AQkAAMAAulQAAAAABgbAAQRqgvKBeoGCgeMBAMAAf8bAAQAYAAAAAQOBjYHjAAAAAAAAAGADwAD8lwE+AkmBkxyBoxaBly7AAH/FwAEAGMABAnNIAQABkwDAAP27PReBqS7AAH/FwAEAGDUAAAABAGADwAD8lwEagbfAAQAjNQAAAAEAYAPAAPyXARuBt8ABACMcgcWAAMCDtfJkAQABlADAAP29gADAg7XywAECcz9Kgc0BFoHULsAAf8XAAQAYwAECcwbAAQRwgvKB6IHsgf0AAsAAdRvAAQAYAAAAAQOB84H9AAAAAQEBgfkAAACX6WADwAD60QAAXQPAAP1tAltbAAbAAQRrgvKCAoINgjwBAMAAf8fAAQAYAAAAAQOCGoI8AAAAAAAAAGADwAD+fgFKgh0BJII8AxaCHy7AAH/IwAEAGMABAngnUBaCMS7AAH/GwAEAGMABAnYGwAEEbILygkGCTIJcAQLAAH/IwAEAGAAAAAEDglyCXAAAAAAAAABgA8AA/n4ABsABBG2C8oJhgmyCfAECwAB/ycABABgAAAABA4J8gnwAAAAAAAAAYAPAAP5+AAbAAQRxgvKCgYKIguoAAMAAf8rAAQAYAAAAAQOClILqAAAAAQEBgpoAAACX6WADwAD60QAAYAPAAP5+AT4CSYKlgIKpwIO3ZEqCrgEkgskCJ4OEFoK4LsAAf8nAAQAYwAECeT9Kgs8BFoLWLsAAf8nAAQAYwAECeQAAg7WUAIO2SwCDtooAg7biAIO3EACDtz4Ag7e2AAAABgLAAQRygvLAAToqwAE6MMABVrgDwACPQgAAAWABwAEEYAABYAHAAQAwDQTAAQR1gvLAATrSwAE6+ATAAI9DwAEAGABdA8AA/W0CYAPAAPyXYAPAAQRyAR7AATrhwAD9dAACYAPAAPyXYAPAAQRyAAAEwAEEfoLywAE7BMABOxAYwACMRQBgA8AA/n4BKwTAAQR/gvLAATsmwAE7XAnAAIxIAGADwAEASgEewAE7P8ABBIYAAAAABMABBICC8sABO2XAATt5GMAAjEYAYAPAAPrRASoEwAEEdoLywAE7h8ABO5MYwACPCsABABgAYAPAAPttASsEwAEEd4LywAE7ncABO6cYwACOz8ABABgAYAPAAL1NASsEwAEEeILywAFUecABVJAYwACOMcABABgAYAPAAQYNASsEwAEEgYLywAFUzcABVNsYwABHNABgA8AA+tEBKgTAAQR5gvLAAVV1wAFVggnAAI9EwAEAGABbAATAAQR6gvLAAVWRwAFVnQnAAI9FwAEAGABgA8AA+tEABMABBHuC8sABVe3AAVYpCcAAj0bAAQAYAF0DwADBrgFgA8ABBD8BH8ABVgzAAMHGAAFgA8ABBD8AAATAAQR8gvLAAVZPwAFWiQnAAI9HwAEAGABdA8AAwa4BYAPAAQQ/AR/AAVZswADBxgABYAPAAQQ/AAAEwAEEfYLywAFWq8ABVrYYwABv2sABABgAXQPAALqkAWADwAEBAAErAgXAAQSdgvLAAT7RwAE+0cABP7UAgLXAAQAYAAPAAT7ewAE/tQAAAAICAsABPuQAAATAAI9EWwDAAT74AAAEwACPRWADwAD60QAAYAPAAQRyAT4DPRfAAT8MLsAAb9rAAQAYHsABPybAALqwAgFgA8ABAQAAApnfKcAAb6gWwAE/Wi6CjMABBI7AAQR9PRfAAT9mLsAAjEdqwAE/emADwAD7bcAB8lvAAQSZPRzAAT+eGsABP5bAAQR1gL8CAAIWwAE/ny7AAH/GwAEAGMABAnYuAMAA/YIDCAHAAQR5gADAg7osCAHAAQR6gQDAg7o5CQHAAT7RwAEEYgAAAAAFwAEEnoLywAE/usABP7rAAUCpAMAAjEoAA8ABP87AAUCpAAAAAQEBwAE/1AAABMAAj0RbAABgA8ABBHIBPgM9F8ABQAAuwABv2sABABgewAFAGsAAurACAWADwAEBAAACmd8pwABvqBbAAUBOLoKMwAEEjsABBH09F8ABQFouwACMR2rAAUBuYAPAAPttwAHyW8ABBJk9HMABQJIawAFAisABBHWAvwIAAhbAAUCTLsAAf8bAAQAYwAECdi4AwAD9ggMIAcABBHmAAMCDuycIAMABBHoqCQHAAT+6wAEEYgAAAAAUBsABBIOC8sABO6zAATvGwAE81QABnrQAAAABA8ABO8rAATzVAAAABQUFwAE70gAAAMAAdadbAMABO98AAACWiWADwAD8lwDAATvpAAAAwACAI2ADwAD8lwDAATv3AAAAwACAJGADwAD60QDAATwEAAAAwACAJWADwAD60QAAXQPAALloAWADwAEAMAE+AUrAATwSARzAATyBHsABPCbAAPS4BQACgMABPCvAg7wOgcABPDTAg7wbA8AAgCOCwAE8T8CDvCvAAIAkg8ABPGDAg7w9wACAJYTAATxwwIO8T4GvAQFgA8ABADABNMABPJIDwAE8ksABPNAAAAABAQHAATyTAAAAwAB8o2ADwAD0tgAAYAPAAQRyAT4BSsABPKMBH8ABPK7AAQSdAgAChcABPLzAg7ziKQAAwAC5ewbAAQSEgvLAATzawAE89MABPswAAcAAjEkAAAABA8ABPP7AAT7MAAAABwcHwAE9BgAAAMAAdadbAMABPRkAAACWiWADwAD8lwDAAT01AAAAgldgA8AA9FIAwAE9SAAAAMAAgCNgA8AA/JcAwAE9XAAAAMAAgCRgA8AA+tEAwAE9bwAAAMAAgLhgA8AA+tEAwAE9lAAAAMAAgCVgA8AA+tEAAF0DwAC5aAFgA8ABADABPgFKwAE9ogEcwAE+eB7AAT28wADzZAcAA4DAAT3BwIO9TIHAAT3KwIO9WYLAAT3QwIO9aQTAAIAjg8ABPe7Ag715wACAJITAAT4LwIO9i8AAgLiFwAE+OcCDvZ3AAIAlhsABPmfAg72vga8BAWADwAEAMAE0wAE+iQPAAT6JwAE+xwAAAAEBAcABPooAAADAAHyjYAPAAPNfAABgA8ABBHIBPgFKwAE+mgEfwAE+pcABBJ0CAAKHwAE+s8CDvlgpAADAALl7BsABBIaC8sABQK7AAUDBwAFCRgABwACPSMABABgAAAABA8ABQNzAAUJGAAAAAAAAAGADwAEASgE+Bk7AAUDpwAFBAAAAwACMSGADwAEB8gEfwAFBBsABAjQBAAEnwACN4QA9F8ABQTaAwAFBH8CDvtGefhrAAUFQwAEA4MABAjI9HMABQXGAwAFBWsCDvtGXUAIAAifAAI9JJ8AAj0oAwAECGD0cwAFBsoDAAUGbwIO+0ZdQAgACJ8AAj0snwACPTADAAQIYPRzAAUH3gMABQeDAg77Rl1ACAAInwACPTSfAAI9OAMABAhhKwAFCJQGAwAFCLMCDvtEGwAEEkYLywAFCS8ABQljAAUJzAQDAAIxHAAAAAQPAAUJkwAFCcwAAAAAAAABgA8AA+20BSsABQmcBFsABQmcuwACPCsABABjAAQR2BsABBJmC8sABQnjAAUKBwAFEPgIAwACMRwAAAAEDwAFCjMABRD4AAAABAQHAAUKWAAAAgbVgA8AA+20AAFwBPgNJwAFCpiEcwAFCtRbAAUKqLsAAjs/AAQAYwAEEd0gBAAErAMAA/fE+Aj0cwAFC0RbAAULGLsAAjs/AAQAYwAEEd5yGAAAAAMAAvVM9F8ABQuEuwACOz8ABABgrwAEEdz89F8ABQv4uwACPCsABABiAwAFDDcCDwAbAAQR2ScABQxshHMABQywWwAFDHy7AAI8KwAEAGMABBHZIAQABKwDAAPuKPgE9F8ABQz0uwACOz8ABABgewAFDTsAAvVACAAIWwAFDXS7AAI8KwAEAGMABBHY0wAFDawPAAUNrwAFEMwAAAAEBAcABQ2wAAACAtWADwAC9TQAAYAPAAP2hAT4BRsABQ3nAAUOlwAFDggAAAMAAjE5gA8ABBD8AHMABQ5sWwAFDii7AAI9HwAEAGMABBHyArQAAAADAAP0PPgFJwAFDsRbAAUO6gsABQ7XAg8EkwACPMsABBFU+AT0cwAFD24LAAUPWwIPBJMAAf5wAAAAAwAEEUD4BPRzAAUQKgsABRAXAg8EkwACPMQAAAADAAQRPAMABBHc/BsABBI2C8sABREPAAURjwAFHWgAAgfoAAAABA8ABRGnAAUdaAAAABAEBwAFEbwAAAMAAb71hAwFgA8ABAQBcAAPAAUSaAAAAgaxgA8AA/I0BagBgA8AA/aF5wAFEqAAAAIOOYQMAXAFqAGADwAD9oXnAAUS3AAAAwABvhWADwAD60QFqAGADwAD9oXldA8AAulUBYAPAAQEAAT4CPRzAAUTbFsABRM0uwACPRMABABjAAQR5gfoDAAE0wAFE4gPAAUTiwAFFxQAAAAEBAcABROoAAADAAHyjYAPAAPUzAABgA8AA/aEBPgM9HMABRQGEwAFE+sCDwoHAAIBfAgACasABRRhgA8AA9MzAAcQhKQDAAPU7TsABRWjAAUVzAADAAIRDYAPAAQQ/AR/AAUV5wAEEXwIAAoTAAUWJwIPCgS4APRzAAUWvFsABRZ4uwACPR8ABABjAAQR8VgEAAYXAAUWzwIPCyQDAAMG2AoGsNMABRdADwAFF0MABRsQAAAACAgLAAUXRAAAAgcdbAMABRdgAAACGVFsAAGADwAD9oQE+AUnAAUZiISXAAUZshMABRmbAg8M2YAPAAPRMPgE9HMABRpoWwAFGji7AAG/awAEAGMABBH2cRwIAAoTAAUajwIPDNibAAUaqAYXAAUaqwIPDQWADwAD+UgDAALq5P4OOFsABRtoWwAFGzi7AAG/awAEAGMABBH2CjMAAuroASsABRuYBHMABRwAWwAFG+RbAAUbtLsAAb9rAAQAYwAEEfYH2wAC6poH6BAABgMABRwfAg8HeA4GsgcABRyDAg8H1g46CwAFHMcCDwg7AAG+Fg8ABR0jAg8IlwAC6LAbAAQSOgvLAAUdfwAFHZsABSVgAAIKMAAAAAQPAAUdrwAFJWAAAAAEAAAHAAUdyAAAAnnZgA8AA+tEBasABR3lgA8AA+tEAXQPAALloAVsBPgg9F8ABR4cuwABHNCnAAQSBTsABR6EAAACBdl0DwAC5aAFbAEnAAUetIiEcwAFHvxbAAUexLsAAj0TAAQAYwAEEeUgBAAErAMAA/fEAFsABR8ouwACPRcABABjAAQR6PgE9icABR+DAg8SUJsABR+ABHMABR/cWwAFH6S7AAI9EwAEAGMABBHmCjAAAAAAAXQPAALloAVs+AT2JwAFIE8CDxJQewAFIIMAAuXEAAVsAAD0XwAFIOi7AAIxHK8ABBJlJwAFIUoDAAUhWwIPEXD4CRsABSGXAAUiQwAFIbgAAAID1YAPAAQQ/ABzAAUiGFsABSHMuwACPRsABABjAAQR7gK0AAAAAwAD9Dz4BPRzAAUicgsABSJrAg8VcwAB/nAAAAADAAQRQQBbAAUjPFsABSLwuwACPRsABABjAAQR7gVXAAMHEwAFIvMABSNYAP0bAAUjjwAFJDMABSOwAAACA9WADwAEEPwAcwAFJAhbAAUjxLsAAj0fAAQAYwAEEfICtAAAAAMAA/Q8+AT0cwAFJFoLAAUkUwIPF28AAf5wAAAAAwAEEUD0cwAFJKy7AAIJOwAEAGAAAAADAAQSHSsABSUcBgcABSU7Ag8SUBsABBIeC8sABSV3AAUliwAFKegAAwACCTsABABgAAAABA8ABSXbAAUp6AAAAAAAAAFwBPgFJwAFJfyIiIhbAAUmDLsAARzTAAQSBABbAAUmmFsABSZUuwACPR8ABABjAAQR8gVXAAMHEABbAAUnMFsABSbkuwACPRsABABjAAQR7gVXAAMHEACEcwAFJ9xbAAUnfLsAAjjHAAQAYwAEEeEgBAAErAMAA/fE+Az0cwAFKIBbAAUoILsAAjjHAAQAYwAEEeIKMAAAAAMABBhk9F8ABSi8uwACOMcABABgrwAEEeD0cwAFKXhrAAUpVwAEEdYReAQABFsABSmUuwAB/xsABABjAAQJ2AMAA/Yo/BsABBJKC8sABSn/AAUqHwAFK/wEAlokAAAABA8ABSozAAUr/AAAAAAAAAGADwAD8lwE+AknAAUqSFsABSpYuwABHNMABBIE9MMABSp4fwAFKqMABAZsBAAEnwACPTwA/SsABSuIBJsABSuIBFsABSvcWwAFK6S7AAI9EwAEAGMABBHmWiQBgA8AA/JcGwAEEk4LywAFLBMABSxjAAUuWAQDAAHWnAAAAAQPAAUsgwAFLlgAAAAAAAABgA8AA9IkBPgJJwAFLJhbAAUsqLsAARzTAAQSBPTDAAUsyH8ABSzzAAQGbAQABJ8AAj08AP0rAAUt2ASbAAUt2ARbAAUuLFsABS30uwACPRMABABjAAQR5wAB1pwBgA8AA9IkGwAEEmoLywAFLm8ABS5/AAUvtAgDAAIxLAAAAAQPAAUutwAFL7QAAAAEBAcABS7IAAADAAHANYAPAAPyXAABcAT4BPRfAAUvRFsABS8EuwACONcABABjAAQSVwACMS4DAAUviwIPIpcABBiIGwAEEiILywAFL8sABS/fAAUyPAADAAI8wwAEAGAAAAAEDwAFMBcABTI8AAAABAQHAAUwTAAAAg1ZgA8ABAsYAAFwBPgFJwAFMIiEWwAFMJy7AAEc0wAEEgT4BPRzAAUxDFsABTDcuwABv2sABABjAAQR9VgEAAYDAAUxHwIPJFQDAALq4PgE9HMABTHwWwAFMbIDAAUxkwIPJFcAAji7AAQAYwAECy8AAf5wAAAAAwAEEUAbAAQSJgvLAAUyUwAFMmcABTT0AAMAAjkjAAQAYAAAAAQPAAUyqwAFNPQAAAAEBAcABTLsAAADAAIRDYAPAAQQ/AABcAT4CPRzAAU0VgMABTQrAg8nIwAByWwAAAADAAMHgPRzAAU0jLsAAgk7AAQAYAAAAAMABBIcGwAEEioLywAFNQsABTUfAAU3CAADAAI8vwAEAGAAAAAEDwAFNUMABTcIAAAABAQHAAU1hAAAAwACEQ2ADwAEEPwAAXAE+Aj0cwAFNhhbAAU1zLsAAj0bAAQAYwAEEe4ReAQABgMABTY3Ag8pBAMAAwbg9HMABTa8WwAFNni7AAI9HwAEAGMABBHxWAQABgMABTbPAg8pBAMAAwbYGwAEEi4LywAFNx8ABTczAAU5JAADAAI8uwAEAGAAAAAEDwAFN18ABTkkAAAABAQHAAU3oAAAAwACEQ2ADwAEEPwAAXAE+Aj0cwAFOCxbAAU36LsAAj0fAAQAYwAEEfIReAQABgMABThLAg8rdAMAAwbg9HMABTjYWwAFOIy7AAI9GwAEAGMABBHtWAQABgMABTjrAg8rdAMAAwbYGwAEElYLywAFOTsABTmbAAU8cAQDAAI41wAEAGAAAAAEDwAFOdsABTxwAAAAAAAAAYAPAAQYNAT4CScABTo4cwAFOqhbAAU6SLsAAjjHAAQAYwAEEeEgBAAErAMAA/fE+AT0XwAFOuy7AAI4xwAEAGB/AAU7ZwAEGJAAAAADAAQR4P0rAAU76ARbAAU8BLsAAjjHAAQAYwAEEeAbAAQSPgvLAAU8hwAFPNcABURgAAMAAjEwAAAABA8ABT0TAAVEYAAAAAAAAAGADwAEAQgE+BU7AAU9hwAFPaAAAgXZgA8ABAEIBH8ABT27AAQBJAAAAAD0XwAFPkIDAAU+JwIPMG6SpHMABT7IWwAFPqxbAAU+YLsAAj0bAAQAYwAEEe2HAAMHAZAEAARbAAU/FFsABT7QuwACPR8ABABjAAQR8YcAAwcAAwAD9vcABAEQ9HMABT+QWwAFP0S7AAI9GwAEAGMABBHuD/QEAATTAAU/sA8ABT+zAAVCRAAAAAQEBwAFP/QAAAMAAj1BgA8ABBD8AAGADwAD9oQE+AUnAAVALFsABUBSBwAFQD8CDzMfAAI80wAEAGMABBFg+AT01AAAAAQBgA8ABAEIBgMABUCnAg8wbF8ABUDCCwAFQMMCDzQbAAFDlHMABUDYWwAFQMILAAVAwwIPNBsAAUOXAAQBFZAEAAZQAwAD9vcABAEU+AkAWwAFQXYHAAVBYwIPMx8AAjnLAAQAYwAEEWsABUFjAAVBnAD01AAAAAQBgA8ABAEIBgMABUHLAg8wbF8ABUHmCwAFQecCDzX604xzAAVCAFsABUHmCwAFQecCDzX6048ABAEdkAQABlADAAP29wAEARwDAAMG6PRzAAVCpFsABUJguwACPR8ABABjAAQR8g/0BAAE0wAFQsQPAAVCxwAFRAAAAAAEBAcABUMIAAADAAI9QYAPAAQQ/AABgA8AA/aEBPgI9NQAAAAEAYAPAAQBCAYDAAVDQwIPMGxfAAVDXgsABUNfAg84ewACMThzAAVDbFsABUNeCwAFQ18CDzh7AAIxOwAEARmQBAAGUAMAA/b3AAQBGQBbAAVDxgcABUOzAg84AwACPNcABABjAAQRZwAFQ7MABUPgAAMAAwbpKwAFRBwGAwAFRDsCDzBsGwAEEloLywAFRHcABUSjAAVFNAQDAAH/IwAEAGAAAAAEDwAFROcABUU0AAAAAAAAAYAPAAP5+AUrAAVE8ASfAAI9RBsABBJeC8sABUVHAAVFcwAFRfAEAwAB/ycABABgAAAABA8ABUW3AAVF8AAAAAAAAAGADwAD+fgFKwAFRcAEnwACMRAbAAQSMgvLAAVGBwAFRlsABVGAAAMAAdRvAAQAYAAAAAQPAAVGdwAFUYAAAAAEBAcABUaMAAACX6WADwAD60QAAXQPAAP1tAmADwAD+flsBPglOwAFRssABUbQAAIOpXQPAAP1tAmADwAD+flsBMsABUcdgA8AA/n5bBCe0EhbAAVHVLsAAf8fAAQAYwAECdyeClBzAAVHxLsAAf8rAAQAYAQABgMABUf7Ag89cAMABAn0ngL0kwAFSKQMWwAFSHRbAAVIVLsAAdafAAQSTlojAAPSVJ4LqFsABUiQulonAAQSSJ8AAjzokwAFSVQMWwAFSSRbAAVJBLsAAdafAAQSTlojAAPSVJ4LqFsABUlAulonAAQSSScABUmKAwAFSZsCDz1w+AUrAAVJzAYHAAVJ6wIPPfz9LPgE9HMABUpSBwAFSk8CDz3+AvwIAAifAAHyjHMABUq8WwAFSoS7AAI9EwAEAGMABBHnAAHUbwAEAGAEAASkAAADAAP2CAAHAAVLEWwHAAVLLAAABgLVbAAA+AT0cwAFS14HAAVLWwIPPf4C/AgACJ8AAfKMywAFS5GADwAD+fmADwAD+fgQntBIWwAFS9C7AAH/HwAEAGMABAncngpQnwACPOyeAvSfAAI88J8AAjzonwACPPADAAP2CPRzAAVNygcABU3HAg89/gL8CAAInlokWwAFTfS6WicABBJIAwAD9gj0cwAFTiIHAAVOHwIPPf4C/AgACJ8AAdacWwAFTnhbAAVOWLsAAdafAAQSTlojAAPSVAMAA/YI9HMABU6mBwAFTqMCDz3+AvwIAAifAAFDlHMABU+UcwAFTyRbAAVO2LsAAj0bAAQAYwAEEe4CrAQFdA8AA/W0CW1sBNMABU80DwAFTzcABU+MAAAABAQHAAVPOAAAAgPVgA8ABBD8AAF0DwAD9bQJbWwFKwAFT1AEcwAFT1oLAAVPUwIPR08AAdRvAAQAYAQABKQDAAQRTAMAA/QSArQAAAADAAP0PAMAA/YI9HMABU/SBwAFT88CDz3+AvwIAAifAAIxOHMABVCwcwAFUEBbAAVP/LsAAj0fAAQAYwAEEfICrAQFdA8AA/W0CW1sBNMABVBQDwAFUFMABVCoAAAABAQHAAVQVAAAAgPVgA8ABBD8AAF0DwAD9bQJbWwFKwAFUGwEcwAFUHYLAAVQbwIPSfsAAdRvAAQAYAQABKQDAAQRTAMAA/QSArQAAAADAAP0PAMAA/YI9HMABVDuBwAFUOsCDz3+AvwIAAifAAEc0FsABVEguwABHNMABBIEAwAD9gkrAAVRUAYHAAVRbwIPPfwAAg7vkAIO9IACDvpYAg7+OAIO/2gCDwbQAg8QxAIPGTwCDx10Ag8fpAIPIeQCDyOUAg8mYAIPKEQCDyq0Ag8tJAIPL5ACDzqYAg87pAIPPLACD0w0AAAAUAsABBJ+C8sABVrvAAVbBwAFgVgPAAI9SAAABYAHAAP3kAAADBMABBKGC8sABVu3AAVcEBsAAj1MAYAPAAP5+AWrAAVb8YAPAAP5+wAHyagTAAQSigvLAAVccwAFXNAbAAI9UAGADwAD+fgFqwAFXLGADwAD+fsAB8m8EwAEEo4LywAFgTcABYFQJwACPFQBdA8AA/TsBYAPAAQSnAAIFwAEEpYLywAFXOcABVznAAV/kAAAAA8ABV0zAAV/kAAAAAQEBwAFXVAAAAJVtYAPAAP5+AABgA8ABBJ8BPgNJwAFXiBzAAVeagMABV4zAg9QpSAEAASsAwAD+jT4BPTDAAVerH8ABV7XAAQGbAQABJMABV+8CJ8AAj1WAwAFX4cCD1CkAP07AAVgJwAFYDgAAg2FdA8AA/TsBYAPAAP5+ARzAAVgegMABWBDAg9QpgKYBAAEnltAAwAD+oT0cwAFYM4HAAVguwIPUi4P9AQABNMABWDsDwAFYO8ABX98AAAABAQHAAVhDAAAAwACMAmADwAD+fgAAYAPAAP2hAT4CPYrAAVhSwIPU6BzAAVhggsABWFrAg9TogeMAAAAAwAD+lUnAAVhuIRbAAVh5gsABWHPAg9TogVXAAP6EPgFJwAFYjBzAAViWgsABWJDAg9TogdgBAAFqwAFYoWADwAD+fsAB8moAwAD+kD4NTsABWMMAAADAAI1bYAPAAP5+AE7AAVjeAAAAwACA3WADwAD+fgA9isABWRnAg9ToHMABWUYcwAFZJ4LAAVkhwIPU6IC+AQABFsABWT5qwAFZMWADwAD+fsAB8mphwAD+ggDAAP6UgeMAAAAAwAD+lU7AAVmIwAFZiwAAwABq0WADwAD8lwEcwAFZk4LAAVmNwIPU6IC7AQABJ4OEAMAA/pFJwAFZqyEcwAFZsoXAAVmvwIPV4UgBAAEcwAFZtZSBxgAAAADAAPy6AMAA/bs+Bk7AAVnOwAFZ1wAAwACPVmADwAD+fgEcwAFZ8BzAAVnfgsABWdnAg9TogL4CAAKThcABWezAg9XhAMAA/pSB4wAAAADAAP6VPYrAAVoEwIPU6BzAAVokHMABWhKCwAFaDMCD1OiAvgEAARzAAVofhcABWhzAg9XhZAEAAZQAwAD9vQDAAP6UgeMAAAAAwAD+lU7AAVo8wAFaQgAAocJgA8AA/JcBHMABWk2GwAFaRMCD1kGAuwEAASeC6gDAAP6RScABWmciIhzAAVpxh8ABWmvAg9bRSAEAARzAAVp0lIHGAAAAAMAA/LoAwAD9uwEcwAFagIfAAVp6wIPW0UgBAAGTAMAA/bsBHMABWo6HwAFaiMCD1tFIAQABHMABWp4WwAFal4LAAVqRwIPU6GHAAP6CgY0BAAGUAMAA/b4AwAD9uz4BPTDAAVqzH8ABWr3AAQGbAQABJMABWwoCJ8AAj1WAwAFa/MCD1CkAPz2LwAFbJ8CD1XEcwAFbTxzAAVs7hsABWzLAg9ZBgL4CAAKTh8ABW0jAg9bRAMAA/pSB4wAAAADAAP6VPYzAAVtjwIPVhBzAAVuMHMABW3eGwAFbbsCD1kGAvgEAARzAAVuHh8ABW4HAg9bRZAEAAZQAwAD9vQDAAP6UgeMAAAAAwAD+lT9OwAFb2cABW98AAKHCYAPAAPyXARzAAVvngsABW+HAg9TolowBAAEnguoAwAD+kknAAVwDIiIcwAFcDYbAAVwHwIPYMUgBAAEcwAFcEJSBxgAAAADAAPy6AMAA/bsBHMABXByGwAFcFsCD2DFIAQABkwDAAP27ARzAAVwqhsABXCTAg9gxSAEAARzAAVw6FsABXDOCwAFcLcCD1OhhwAD+goGNAQABlADAAP2+AMAA/bs+AT0wwAFcTR/AAVxXwAEBmwEAASTAAVyiAifAAI9VgMABXJTAg9QpAD9OwAFcwsABXMcAAJaIYAPAAP5+ARzAAVzjHMABXM+CwAFcycCD1OiAvgIAApOGwAFc3MCD2DEAwAD+lIHjAAAAAMAA/pVJwAFc9SIcwAFc/ofAAVz5wIPZDIHYAQABJ5nGAMAA/pAAHMABXRaHwAFdEcCD2QxPAQABJ5nHAMAA/o8+AT2PwAFdM8CD2QwcwAFdP4fAAV06wIPZDIC+AgAClBzAAV1YFsABXVGHwAFdTMCD2QxhwAD+goGNAQABlADAAP2+AMAA/pQ/TsABXXvAAV2GAADAAItQYAPAAP5+ARzAAV2jHMABXY6CwAFdiMCD1OiAvgEAARzAAV2ehsABXZjAg9gxZAEAAZQAwAD9vQDAAP6UgeMAAAAAwAD+lU7AAV25AAAAlolgA8AA/JcASz4BPRXAAV3bwIPaKwkewAFd5sAA/MYBAAEUwAFd7MCD2dYIAAAAAcABXgVgA8AA/GoBwAFeHwAAAYNTYAPAAPxqAAA+AT0wwAFeMB/AAV46wAEBmwEAASQABifAAI9VgMABXnfAg9QpJ4GLJ8AAj1cUwAFeqMCD2dYIACeDSAA9HMABXtUWwAFezS7AAI8VwAEEo1YBAAEfwAFe3cABBLEEAASHwAFe5MCD2QwUwAFe6sCD2isJAIPAAV7wwIPVcYTAAV76wIPVhAAAwAD9TEnAAV8VHMABXyYcwAFfH4LAAV8ZwIPU6IHjAAAAAMAA/pVIAQABasABXylgA8AA/n7AAfJvAMAA/o0+AT0cwAFfTBbAAV9ELsAAjxXAAQSjVgEAAR/AAV9UwAEEsgAAAAAAwAD9TD4BPTDAAV+BH8ABX4vAAQGbAQABJMABX8UCJ8AAj1WAwAFft8CD1CkAPwDAAP0JAggAwAEEox7AAVdzwAD4NQEBYAPAAQSnAZMACQHAAVc5wAD9+gAAAAAFwAEEpoLywAFf6cABX+/AAWA1AbsGAAPAAWAJwAFgNQAAAAAAAABgA8ABBJ8BPwIIAMABBKNqwAFgGF0DwAD9OwFgA8ABBKfAAfI6CQHAAV/vwAD9+gAAAAAAAACD3CQAAAAAAsABBKeC8sABYFnAAWBfwAFh9APAAIkSAAABYAHAAP3kAAAFBMABBKmC8sABYHfAAWB7CZaIAGADwAD+fgAEwAEEqoLywAFgicABYI0JlokAYAPAAPyXAATAAQSrgvLAAWCewAFgpgnAAI1bAGADwAD+fgAEwAEErILywAFgt8ABYL8JwACA3QBgA8AA/n4ABMABBK2C8sABYM7AAWDWCcAAjq0AYAPAAPrRAAIFwAEEsYLywAFg28ABYOHAAWE0AQAAA8ABYOfAAWE0AAAABAQEwAFg7QAABJaIYAPAAP5+AMABYPgAAASWiWADwAD8lwDAAWEDAAAEwACNW2ADwAD+fgDAAWESAAAEwACA3WADwAD+fgAAYAPAAQSnAT8GCAHAAQSpgADAg9z/CAHAAQSqgQDAg90PCAHAAQSrggDAg90fCAHAAQSsgwDAg90xCADAAQStKgkBwAFg4cAA/foAAAAABcABBLKC8sABYTjAAWE+wAFhwQG7BgADwAFhS8ABYcEAAAAAAAAAYAPAAQSnAT8GCADAAQSpKwgAwAEEqisIAMABBKsrCADAAQSsKwgAwAEErSkJAcABYT7AAP36AAAAAAEGwAEEr4LywAFhxsABYc/AAWHyAQDAAI7ZAAAAAQPAAWHfwAFh8gAAAAAAAABgA8AA+tEBSsABYeIBIRzAAWHrFsABYeIuwACNW8ABBKtIAQABKwDAAP6NAACD3fQAg95MAAAAAQLAAQSzgvLAAWH3wAFh/cABY8sDwACPWAAAAWABwAD95AABYAHAAQGAAwTAAQS1gvLAAWJDwAFiUBieewBgA8AA9IkBKwTAAQS2gvLAAWJYwAFiYhiefABgA8AA/JcBKwTAAQS3gvLAAWJqwAFicxjAAH/7AGADwAD8lwErAQXAAQS7AAAAAAQAAAMAAAAAAAAAAABgA8ABBLMBPwEJAQDAAP36AAAAAAEGwAEEuYLywAFieMABYpPAAWPJAAHAAHxXAAAAAQPAAWKZwAFjyQAAAAEBAcABYqEAAADAAHyjYAPAAPUzAABgA8ABBLMBPgNJwAFirxzAAWK6gMABYrPAg98uSAEAASsAwAD98UrAAWLDASs/Sz4CTsABYvTAAWL5AACBVGADwAEEswEfwAFi/8ABBLsAAAAASsABYxwBNcABYyMAAAEAYAPAAQSzAYHAAWMjwIPfczUAAAABAFsBF8ABYzKCwAFjMMCD35qeexbAAWNJgMABY0LAg98unnvAAPVDwAEEtTUAAAABAFsBF8ABY2GCwAFjX8CD35qefBbAAWN1gMABY27Ag98unnzAAPVBwAEEtjUAAAABAFsBF8ABY4qCwAFjiMCD35rAAH/7FsABY52AwAFjlsCD3y6WicAA9UDAAQS3ggDAg9+aAAHAAWOpWwHAAWOwAAABg1NbAAA+AErAAWO6ASsAAIPfAgCD4GcAAAABAsABBLyC8sABY87AAWPUwAFq5APAAI9ZAAABXQHAALocAWADwADjugABYAHAAPUzAgTAAQS/gvLAAWQswAFkNQnAAI4pwAEAGABdA8AAuhwBYAPAAOO6AATAAQTAgvLAAWRGwAFkTQnAAICKwAEAGABgA8AA9TMAAQXAAQTcgvLAAWRSwAFkUsABZH8AAAADwAFkYcABZH8AAAACAgLAAWRnAAAEwACAimADwAD1MwDAAWR1AAAEwACOKV0DwAC6HAFgA8AA47oAAGADwAEEvAE/AwgBwAEEwIAAwIPhEggBwAEEv4EAwIPhJAkBwAFkUsAAulIAAAAAFgbAAQTCgvLAAWSEwAFkosABZXUAAIH6AAAAAQPAAWSowAFldQAAAAQBAcABZK4AAADAAG+9YQMBYAPAAOO6XAADwAFk1wAAAIGsYAPAAPyNAWoAYAPAAP2hecABZOUAAACDjmEDAFwBagBgA8AA/aF5wAFk9AAAAMAAb4VgA8AA+tEBagBgA8AA/aF5XQPAALpVAWADwADjugE+AUrAAWUKARzAAWUbFsABZREuwACOKcABABjAAQS/gfoEAAGAwAFlIsCD4ZgDgayBwAFlO8CD4a+DjoLAAWVMwIPhyMAAb4WDwAFlY8CD4d/AALosBsABBNOC8sABZXrAAWWHwAFlowEAwABR/QAAAAEDwAFlkMABZaMAAAAAAAAAYAPAAMgmAUrAAWWTARbAAWWbFsABZZMuwACAisABABjAAQTAwABR/cAA8XAGwAEE2oLywAFlqMABZbHAAWXsAgDAAFH9AAAAAQPAAWW5wAFl7AAAAAEBAcABZcMAAACAlmADwADIJgAAXAE+AT0XwAFl2BbAAWXQLsAAgIrAAQAYwAEEwMAAUf2AwAFl48CD4uLAAPFwBsABBMOC8sABZfHAAWX2wAFmJAAAgo4AAAABA8ABZfvAAWYkAAAAAQEBwAFmAwAAAMAAZW1gA8AA/eQAAFwBPgE9HMABZhYWwAFmDi7AAICKwAEAGMABBMCCjgEAAYDAAWYcwIPjSgDAAPF1BsABBMSC8sABZinAAWYuwAFmZwAAggMAAAABA8ABZjXAAWZnAAAAAQABwAFmPgAAAMAAZW1gA8AA/eQBasABZkRgA8AA/n6EKABcAT4BPRzAAWZXFsABZk8uwACAisABABjAAQTAggMBAAGAwAFmX8CD47YAwADxdwbAAQTFgvLAAWZswAFmccABZrYAAIQWAAAAAQPAAWZ+wAFmtgAAAAEBAcABZoMAAADAAGHuYAPAAPyXAABcAT4BPRzAAWabFsABZpMuwACAisABABjAAQTAhBYBAAGAwAFmqcCD5C8AwADxeAbAAQTGgvLAAWa7wAFmwMABZyIAAJ/6AAAAAQPAAWbIwAFnIgAAAAIBAsABZtIAAADAAEPEXQPAAPz5AVsAwAFm4wAAAIGxYAPAAP5+AWrAAWbvYAPAAP5+hCgAXAE+AT0cwAFnAhbAAWb6LsAAgIrAAQAYwAEEwJ/6AgACgMABZwvAg+SbgcABZxTAg+SvAMAA8XYGwAEEx4LywAFnJ8ABZyzAAWddAABWAAAAAQPAAWcvwAFnXQAAAAEBAcABZzoAACCEOV0DwAD9OwFgA8AA/JcAAFwBPgE9HMABZ08WwAFnRy7AAICKwAEAGMABBMBWAQABgMABZ1PAg+UuAMAA8XQGwAEEyILywAFnYsABZ2fAAWe8AACcRwAAAAEDwAFnb8ABZ7wAAAACAQLAAWdwAAAAgcdgA8AA/eQAwAFngwAAAIZUYAPAAP5SAWoAYAPAAP2heQBcAUrAAWeZARzAAWehFsABZ5kuwACAisABABjAAQTAnEcCAAKAwAFnqsCD5Z6BwAFnscCD5a4AwADxeQbAAQTJgvLAAWfBwAFnyMABaBYAAJxJAAAAAQPAAWfRwAFoFgAAAAEBAcABZ+QAACCB9l0DwAC6HAFdA8AA/TsBYAPAAPyXAABdA8AAuWgBWwE+AUrAAWfyARzAAWgBFsABZ/kuwACAisABABjAAQTAnEkBAAGAwAFoC8CD5i0AwADxegbAAQTKgvLAAWgbwAFoIMABaEUAAMAAf5wAAAABA8ABaCfAAWhFAAAAAAAAAFwBPgE9HMABaDgWwAFoMC7AAICKwAEAGMABBMDAAH+cAAAAAMAA9ToGwAEEy4LywAFoSsABaFHAAWhrAACERgAAAAEDwAFoVsABaGsAAAAAAAAAXQPAALloAVsBSsABaFwBHMABaGQWwAFoXC7AAICKwAEAGMABBMCERgAAAADAAPF7BsABBMyC8sABaHDAAWh3wAFokQAAgowAAAABA8ABaHzAAWiRAAAAAAAAAF0DwAC5aAFbAUrAAWiCARzAAWiKFsABaIIuwACAisABABjAAQTAgowAAAAAwAD1PgbAAQTUgvLAAWiWwAFoocABaLUBAJ/OAAAAAQPAAWimwAFotQAAAAAAAABdA8AAuWgBWwFKwAFoqQEWwAFosRbAAWipLsAAgIrAAQAYwAEEwJ/OwAD1RAbAAQTVgvLAAWi6wAFowsABaNYBAJaJAAAAAQPAAWjHwAFo1gAAAAAAAABgA8AA/JcBSsABaMoBFsABaNIWwAFoyi7AAICKwAEAGMABBMCWicAA9UAGwAEE1oLywAFo28ABaO/AAWkJAQDAAHWnAAAAAQPAAWj3wAFpCQAAAAAAAABgA8AA9IkBSsABaPoBFsABaQIWwAFo+i7AAICKwAEAGMABBMDAAHWnwAD1QgbAAQTXgvLAAWkOwAFpIsABaUgBAJ57AAAAAQPAAWkwwAFpSAAAAAAAAABgA8AA9IkBSsABaTMBFsABaTsWwAFpMy7AAICKwAEAGMABBMCee8AA9UMGwAEE2ILywAFpTcABaVXAAWl1AQCefAAAAAEDwAFpYMABaXUAAAAAAAAAYAPAAPyXAUrAAWljARbAAWlrFsABaWMuwACAisABABjAAQTAnnzAAPVBBsABBM2C8sABaXrAAWl/wAFp3wAAwACAXwAAAAEDwAFpiMABad8AAAACAgLAAWmWAAAAgytgA8AA9MwAwAFpowAAAMAAgJ5gA8AA+tEAAGADwAD60QE+AUrAAWmyARzAAWnBFsABabkuwACAisABABjAAQTAwACAXwIAAoDAAWnLwIPpbYHAAWnTwIPpfQDAAPU7BsABBM6C8sABaeTAAWnuwAFqQAAAwACAYQAAAAEDwAFp+sABakAAAAABAQHAAWoLAAAAgytgA8AA9OoAAGADwADjugE+AUrAAWoZARzAAWooFsABaiAuwACAisABABjAAQTAwACAYQEAAYDAAWo1wIPqAADAAPU8BsABBM+C8sABakXAAWpKwAFqlQAAwACAZAAAAAEDwAFqVsABapUAAAABAQHAAWpnAAAAgytgA8AA9OoAAFwBPgE9HMABan0WwAFqdS7AAICKwAEAGMABBMDAAIBkAQABgMABaorAg+p4AMAA9T0GwAEE0YLywAFqmsABap7AAWriAADAAHUbwAEAGAAAAAEDwAFqpcABauIAAAABAQHAAWqrAAAAl+lgA8AA+tEAAF0DwAD9bQJbWwE+AUrAAWq2ASbAAWq2ARzAAWrSJsABasYAFsABar4uwACAisABABjAAQTAW8AAdRvAAQAYAQABgMABatrAg+rqAABdA8AA/W0CW1sAAIPhbgCD4l0Ag+K2AIPjIACD44wAg+QFAIPkcQCD5QUAg+V0AIPmAwCD5ocAg+bcAIPnNwCD55IAg+fpAIPoPgCD6JcAg+jsAIPpQQCD6dQAg+pMAIPqugCD61AAAAAWAsABBN2C8sABaufAAWrtwAFtOAPAAI9aAAABYAHAAP3kAAAEBMABBOCC8sABaxHAAWsYCcAAj1vAAQAYAGADwAD8lwAEwAEE4YLywAFrKsABa1MGwACPXABgA8ABBN0BasABazpgA8ABBN3AAfJ0BMABBOKC8sABa2TAAWuKBsAAj10AYAPAAQTdAWrAAWtyYAPAAQTdwAHxXgTAAQTjgvLAAWubwAFrwgbAAI9eAGADwAEE3QFqwAFrqmADwAEE3cAB8WoBBcABBOmC8sABa8fAAWvNwAFr8AEAAAPAAWviwAFr8AAAAAEBAcABa+gAAATAAI9bYAPAAPyXAABgA8ABBN0BPwIIAcABBOCAAMCD7JwJAcABa83AAP36AAAAAAIGwAEE5YLywAFr9cABa/3AAWy1BAGdIAAAAAEDwAFsHcABbLUAAAABAQHAAWwlAAAAgbxgA8AA/n4AAGADwAEE3QE+A0nAAWwzHMABbEwcwAFsPoDAAWw3wIPs/ZaFAAAAAMAA/qNIAQABJ8AAj18AwAD+jUrAAWxYAWrAAWxfYAPAAQTdwAHxXj9JwAFsahzAAWyDHMABbHWAwAFsbsCD7P2WhQAAAADAAP6jSAEAASeVnwDAAP6NSsABbJABasABbJdgA8ABBN3AAfFqP0rAAWyjAWrAAWyqYAPAAQTdwAHydAbAAQTngvLAAWy6wAFswcABbTYAACMAAAABA8ABbMnAAW02AAAAAAAAAGADwAD+fgE+A0nAAWzSHMABbNsuSAEAAWrAAWzeYAPAAQTdwAHxXgDAAP3xSsABbOUBJ8AAj2A/ScABbPkcwAFtAi5IAQABasABbQVgA8ABBN3AAfFqAMAA/fFKwAFtDQEnwABuPT9KwAFtIgEnwABcFgAAg+zTAIPttgCD7lIAAAACAsABBOqC8sABbTvAAW1KwAFxuwfAAI9hAAABYAHAAP3kAAAIBMABBOyC8sABbXLAAW19GMAAjUUAYAPAAQULAATAAQTtgvLAAW2IwAFtjRjAAI1EAGADwAD+fgAEwAEE7oLywAFtlsABbaIYm4cAYAPAAPrRASoEwAEE74LywAFty8ABbc4YwACPYgBgA8AA/n4BKwTAAQTwgvLAAW3ZwAFt3hjAAI5aAGADwAD+fgErBMABBPGC8sABbenAAW3yGMAAjlkAYAPAAP5+ASsEwAEE8oLywAFt/cABbgAYwACOWwBgA8AA/n4BKwTAAQTzgvLAAW4IwAFuEhjAAI5cAGADwAD8lwErAQXAAQT5gvLAAW4XwAFuF8ABcVAAAAADwAFuI8ABcVAAAAACAgLAAW4pAAAEwACNRWADwAEFCwDAAW47AAAEwACNRGADwAD+fgAAYAPAAQTqAT4BScABbkgcwAFuXxbAAW5YFsABbkwuwACNRcABBOyBvMABBQ1IAQABasABbnhgA8ABBN3AAfFqAMAA/fE+A07AAXAowAFwLgAAwACO2GADwAEFHwEmwAFwKAEWwAFwMC7AAI1FwAEE7GADwAEFH07AAXBHwAFwTgAAwABpmmADwAEB1QE1wAFwVAAAAQBgA8ABAdUBH8ABcFTAAQHfAAAAADUAAAABAFsBHMABcGWDwAFwY8CD8ENWAQABHMABcG5qwAFwaWADwADJ7IGJlXoBAAEWwAFwe4LAAXB1wIPv/cAAjVvAAQUhAMAAx/UAwAEBxDUAAAABAFsBHMABcJCDwAFwjsCD8ENWAQABMcABcJRgA8AA/JcBasABcJ9gA8AA/JeW0wDAAQHENQAAAAEAWwEcwAFwsYPAAXCvwIPwQ1YBAAEWwAFwuxbAAXC1LsAAjUTAAQTtn/PAAP6GAMABAcQ1AAAAAQBbARzAAXDQg8ABcM7Ag/BDVgEAATHAAXDUYAPAAPyXAWrAAXDfYAPAAPyXltMAwAEBxDUAAAABAFsBHMABcPGDwAFw78CD8ENWAQABHMABcPpqwAFw9WADwADJ7IGJlXoBAAEWwAFxB4LAAXEBwIPv/cAAgN3AAQUiAMAAx/UAwAEBxIMAwIPwQz0XwAFxGS7AAI9iHsABcSzAAQGzAQABHMABcT6DwAFxN8CD8C2CjAAAAADAAQHFAMABBO8/AwgBwAEE7IAAwIPvkQgBwAEE7YEAwIPvowkBwAFuF8AA/foAAAAAAgbAAQT1gvLAAXFVwAFxb8ABcYsBAIG8AAAAAQPAAXF2wAFxiwAAAAAAAABgA8ABBN0BSsABcXkBFsABcYUWwAFxeS7AAI1FwAEE7IG8wAEFDQbAAQT3gvLAAXGQwAFxlcABcbkAAsAAjt0AAAABA8ABcZ7AAXG5AAAAAQEBwAFxsQAAAINWYAPAAQFGAABcAAAAg/IMAIPyXQCD8pwAAAACAsABBPqC8sABcb7AAXHEwAF1MAPAAI9jAAABYAHAAQTqAAABBMABBPyC8sABcfLAAXH1GICsAGADwAD+/wABBcABBQGC8sABcfrAAXH6wAFyVQAAAAPAAXIKwAFyVQAAAAMDA8ABchAAAASArGADwAD+/wDAAXIVAAAAwACNRFsAwAFyMwAAAMAAjthgA8ABBQsAAGADwAEE+gE/AggBwAEE/IAAwIPzEQkAwAFyQsABBPkCAAKCwAFySMCD8y4mwAFyTwGBwAFyT8CD8yFgA8AA/n4AAgbAAQT+gvLAAXJawAFyX8ABdAwAALMYAAAAAQPAAXJmwAF0DAAAAAICAsABcmsAAACArGADwAD+/wDAAXKGAAAAgbxgA8ABBN0AAGADwAD60QE+BknAAXKUIiEcwAFyn4HAAXKYwIPzvUgBAAErAMAA/fEAIRzAAXK9FsABcrYWwAFyqi7AAI1FwAEE7IG8wAEFDUgBAAGBwAFywMCD870AwAD98UrAAXLIASo/ScABctohHMABcucWwAFy4oDAAXLewIPzrZaIwAD/CEgBAAEWwAFy8xbAAXLvLoCswAEE/JaIwAD/CADAAP6NSsABcvkBKj9OwAFzD8ABcxgAAMAAj2RgA8AA/JcBIxzAAXMwFsABcysWwAFzJy6ArMABBPyWicAA/wlIAQABkwDAAP27asABc0JgA8AA/Je+OhbAAXNdFsABc1kugKzAAQT8lonAAP8JAWADwAD8l07AAXNrwAFzdQAAwACPZWADwAD8lwEjHMABc4AWwAFze4DAAXN3wIPzrZaJwAD/CUgBAAGTAMAA/btqwAFzkmADwAD8l746FsABc6iAwAFzpMCD862WicAA/wkBYAPAAPyXScABc7IhHMABc8CDwAFztsCD9OBIAQABgsABc8PAg/R4AMAA/btKwAFzzQEqP0rAAXPfARzAAXPvFsABc+qAwAFz5sCD861OwAD/CoHYAQABFsABdAMWwAFz/y6ArMABBPxOwAD/CgDAAP6QBsABBP+C8sABdBHAAXQWwAF1LgAAwACO3QAAAAEDwAF0H8ABdS4AAAABAQHAAXQyAAAAg1ZgA8ABAUYAAFwBPgNJwAF0kiIcwAF0qRbAAXSiFsABdJYuwACNRcABBOyBvMABBQ1IAQABasABdMJgA8ABBN3AAfFqAMAA/fEAHMABdNIWwAF0zC7AAI5awAEE8EgBAAErAMAA/o0+AUrAAXTjAD89HMABdQEWwAF09S7AAI1FwAEE7MAAjt0CAAIugMABdRHAg/XZAMABBQ89F8ABdR8um4cpwAEE7gAAg/ODAIP1rQCD9okAAAACAsABBQKC8sABdTPAAXU5wAF3vQPAAI9mAAABYAHAAQTqAAACBMABBQSC8sABdWvAAXVvGJaIAGADwAD+fgAEwAEFBYLywAF1d8ABdXsYlokAYAPAAPyXAAEFwAEFCoLywAF1gMABdYDAAXXoAAAAA8ABdZHAAXXoAAAABAQEwAF1lwAABJaIYAPAAP5+AMABdaIAAASWiWADwAD8lwDAAXWoAAAAwACNRFsAwAF1xgAAAMAAjthgA8ABBQsAAGADwAEFAgE/AwgBwAEFBIAAwIP3GAgBwAEFBYEAwIP3KAkAwAF11cABBPkCAAKDwAF128CD90UmwAF14gGCwAF14sCD9zhgA8AA/n4AAgbAAQUHgvLAAXXtwAF18sABdqUAALMYAAAAAQPAAXX5wAF2pQAAAAICAsABdgEAAADAAIwCYAPAAQSnAMABdh4AAACBvGADwAEE3QAAYAPAAPrRAT4CScABdiwiIRzAAXY3gcABdjDAg/fiSAEAASsAwAD98QAhHMABdlUWwAF2ThbAAXZCLsAAjUXAAQTsgbzAAQUNSAEAAYHAAXZYwIP34gDAAP3xSsABdmABKj9KwAF2cgEiHMABdoQWwAF2f4DAAXZ5wIP30JaIwAEEqUgBAAEWwAF2hy6WiMABBQQAwAD+jQAcwAF2mhbAAXaVgMABdo/Ag/fQlonAAQSqSAEAARbAAXadLpaJwAEFBQDAAP27BsABBQiC8sABdqrAAXavwAF3uwAAwACO3QAAAAEDwAF2uMABd7sAAAABAQHAAXbLAAAAg1ZgA8ABAUYAAFwBPgJJwAF3KyIcwAF3QhbAAXc7FsABdy8uwACNRcABBOyBvMABBQ1IAQABasABd1tgA8ABBN3AAfFqAMAA/fEAHMABd2sWwAF3ZS7AAI5awAEE8EgBAAErAMAA/o0+AUrAAXd8AD89HMABd5oWwAF3ji7AAI1FwAEE7MAAj2cCAAIugMABd6/Ag/jlAMABBRAAAIP3pgCD+LkAg/mHAAAAAgLAAQULgvLAAXfAwAF3z8ABeMUHwACPaAAAAWABwAD95AABYAHAAQF3AAEFwAEFEgAAAAAEAAADAAAAAAAAAAAAYAPAAQULAT8BCQEAwAD9+gAAAAADBsABBQ2C8sABeAvAAXglwAF4KwECgbwAAAABA8ABeCvAAXgrAAAAAAAAAGADwAEE3QAGwAEFD4LywAF4L8ABeDTAAXhyAALAAI7dAAAAAQPAAXg9wAF4cgAAAAICAsABeEsAAADAAI1FYAPAAQTqAMABeGoAAACDVmADwAEBRgAAXAAGwAEFEILywAF4dsABeHvAAXjDAALAAI9nAAAAAQPAAXiJwAF4wwAAAAICAsABeJwAAADAAI1FYAPAAQUCAMABeLsAAACDVmADwAEBRgAAXAAAAIP57gCD+iAAg/pxAIP6wgAAAAMCwAEFE4LywAF4yMABeM7AAXzzA8AAj2kAAAFgAcABBQsAAWABwAEBegIEwAEFFYLywAF5PsABeUYYwACNWwBgA8AA/n4ABMABBRaC8sABeVHAAXlZGMAAgN0AYAPAAP5+AAEFwAEFHoLywAF5XsABeV7AAXmXAAAAA8ABeXnAAXmXAAAAAgICwAF5fwAABMAAjVtgA8AA/n4AwAF5jgAABMAAgN1gA8AA/n4AAGADwAEFEwE/AwgBwAEFFYAAwIP7XwgBwAEFFoEAwIP7cQkBwAF5XsABBRIAAAAABAbAAQUYgvLAAXmcwAF5tsABedsBAIG8AAAAAQPAAXm9wAF52wAAAAAAAABgA8ABBN0BSsABecABasABedZgA8ABBN3AAfFeBsABBRqC8sABeeDAAXnnwAF7xgAAwACMXgAAAAEDwAF59MABe8YAAAAAAAAAYAPAAP5+AT4CTsABe1vAAXtgAADAAI7aYAPAAP5+AR7AAXt3wAEBtAEAARzAAXuKasABe4VgA8AAyeyBiZV6AQABJMABe6YDFsABe5MuwACNW8ABBRUnguoWwAF7nS7AAIDdwAEFFgDAAMf1AErAAXuuASTAAXvCAifAAI7bgMABe73Ag/wyBsABBRuC8sABe8vAAXvQwAF8VAAAwACO3QAAAAEDwAF72cABfFQAAAACAgLAAXvnAAAAgLVgA8ABBOoAwAF7/AAAAINWYAPAAQFGAABcAT4BPRzAAXwbFsABfBOBwAF8C8CD/OuefcABAVCXUAIAAmrAAXwrYAPAAP5+wAHlXRzAAXxALsAAjF4AAAAAwAEFGgDAAQDDBsABBRyC8sABfFnAAXxewAF88QAAwACPZwAAAAEDwAF8bMABfPEAAAACAgLAAXx/AAAAgLVgA8ABBQIAwAF8lAAAAINWYAPAAQFGAABcAT4BPRzAAXyzFsABfKuBwAF8o8CD/YGefcABAVCXUAIAAmrAAXzDYAPAAP5+wAHl0RzAAXzdLsAAjF4AAAAAwAEFGgDAAQDDAACD+7QAg/v7AIP8rwCD/UUAg/3bAAAABALAAQUfgvLAAXz2wAF8/MABhoIDwACPagAAAWABwAEFCwABYAHAAQF9AgTAAQUhgvLAAX1uwAF9dhjAAI1bAGADwAD+fgAEwAEFIoLywAF9gcABfYkYwACA3QBgA8AA/n4AAQXAAQUqgvLAAX2OwAF9jsABfcgAAAADwAF9qsABfcgAAAACAgLAAX2wAAAEwACNW2ADwAD+fgDAAX2/AAAEwACA3WADwAD+fgAAYAPAAQUfAT8DCAHAAQUhgADAg/58CAHAAQUigQDAg/6OCQHAAX2OwAEFEgAAAAAEBsABBSSC8sABfc3AAX3nwAF+DQEAgbwAAAABA8ABfe7AAX4NAAAAAAAAAGADwAEE3QFKwAF98QFqwAF+B2ADwAEE3cAB8WoGwAEFJoLywAF+EsABfhnAAYUBAADAAIxeAAAAAQPAAX4mwAGFAQAAAAICAsABfjQAAADAAI1FYAPAAQTqAMABflQAAACDVmADwAEDYwAAYAPAAP5+AT4OTsABfmrAAX51AADAAHzSYAPAAP5+ARzAAX5/gcABfnfAg/9WwACOq8ABABgAAAAAwAEDe07AAX6XwAF+ngAAwABpmmADwAEB1QE1wAF+pAAAAQBgA8ABAdUBH8ABfqTAAQHfAAAAADUAAAABAFsBHMABfrODwAF+scCD/7tWAQABFsABfsYWwAF+v4HAAX63wIP/VpZzwAEDZZ/zwAD+hgDAAQHENQAAAAEAWwEcwAF+2YPAAX7XwIP/u1YBAAExwAF+3WADwAD8lwFqwAF+6GADwAD8l5bTAMABAcQ1AAAAAQBbARzAAX74g8ABfvbAg/+7VgEAARbAAX8HgsABfvzAg/9xn/PAAP6GAMABAcSDAMCD/7tOwAF/G8ABfx8AAMAAj2tgA8AA/n4BHsABfy7AAQGzAQABHMABf0CDwAF/OcCD/6WCjAAAAADAAQHFAE7AAX9WAAAAwACOW2ADwAD+fgBOwAF/ZgAAAMAAj2xgA8AA/n4ATsABf3kAAADAAI9tYAPAAP5+AE7AAX+FAAAAg4BbAD2LwAF/jMCD/6U1wAF/mQAAAQBgA8ABAdUBH8ABf5nAAQHfAAAAADUAAAABAFsBHMABf6EUwAF/n8CEAREJAFYBAAEWwAF/tRbAAX+xgMABf6XAg/9EwACPYsABBO+f88AA/oYAwAEBxDUAAAABAFsBHMABf8EUwAF/v8CEAREJAFYBAAExwAF/xWADwAD8lwFqwAF/0GADwAD8l5bTAMABAcQUAMCEAREJAEnAAX/dHMABf/EWwAF/7YDAAX/hwIP/RMAAjlvAAQTySAEAASfAAI7aAMAA/o0+Bj2NwAGABMCEAMIWwAGAFoDAAYAKwIP/RMAAjlvAAQTyPY7AAYAhwIQA1R7AAYA3wAEBswEAAR7AAYBPwAEBsgEAAZcAAD01AAAAAQBgA8ABBOoBgMABgGvAg/9EF8ABgHcUwAGAd8CEAigJAMAAjlwcwAGAaRbAAYB3FMABgHfAhAIoCQDAAI5cwAEE82QBAAGUAMAA/b3AAQTzPY/AAYCJwIQA6BzAAYClFsABgJqAwAGAjsCD/0TAAI5cwAEE84QOAQABNxAAwAD8xT2PwAGAvsCEAOgcwAGA7hzAAYDOJ8AAhp+AvgIAApMcwAGA6RzAAYDdNwiBjQEAARbAAYDih8ABgN/AhADoYcAA/oIAwAD9vmQBAAGUAMAA/b0AwAD+lGQBAAGHwAGA8MCEAOgAwAD+kz01wAGA+gAAAQBgA8ABAdUBg8ABgPrAg/+lNQAAAAEAWwEcwAGBCxTAAYEJwIQDGAkAVgEAARbAAYEhFsABgRuAwAGBD8CD/0TAAI5awAEE8J/zwAD+hgDAAQHENQAAAAEAWwEcwAGBNhTAAYE0wIQDGAkAVgEAATHAAYE6YAPAAPyXAWrAAYFFYAPAAPyXltMAwAEBxDUAAAABAFsBHMABgVcUwAGBVcCEAxgJAFYBAAEWwAGBXofAAYFbwIQA6J/zwAD+hgDAAQHENQAAAAEAWwEcwAGBcxTAAYFxwIQDGAkAVgEAATHAAYF3YAPAAPyXAWrAAYGCYAPAAPyXltMAwAEBxDUAAAABAFsBHMABgZQUwAGBksCEAxgJAFYBAAEWwAGBn4bAAYGYwIQA1Z/zwAD+hgDAAQHENQAAAAEAWwEcwAGBtBTAAYGywIQDGAkAVgEAATHAAYG4YAPAAPyXAWrAAYHDYAPAAPyXltMAwAEBxDUAAAABAFsBHMABgdUUwAGB08CEAxgJAFYBAAEWwAGB6RbAAYHlgMABgdnAg/9EwACOW8ABBPKf88AA/oYAwAEBxDUAAAABAFsBHMABgf4UwAGB/MCEAxgJAFYBAAExwAGCAmADwAD8lwFqwAGCDWADwAD8l5bTAMABAcQ1AAAAAQBbARzAAYIfFMABgh3AhAMYCQBWAQABFsABgieEwAGCI8CEAIef88AA/oYAwAEBxBQAwIQDGAkAPgE9NcABgkYAAAEAYAPAAQHVAYPAAYJGwIP/pTUAAAABAFsBHMABglcUwAGCVcCEBUcJAFYBAAEWwAGCbRbAAYJngMABglvAg/9EwACOWsABBPCf88AA/oYAwAEBxDUAAAABAFsBHMABgoIUwAGCgMCEBUcJAFYBAAExwAGChmADwAD8lwFqwAGCkWADwAD8l5bTAMABAcQ1AAAAAQBbARzAAYKjFMABgqHAhAVHCQBWAQABFsABgquEwAGCp8CEAIef88AA/oYAwAEBxBQAwIQFRwkATsABgsXAAYLOAACDV2ADwAD+fgEewAGC3cABAbMBAAEcwAGC74PAAYLowIP/pYKMAAAAAMABAcUATsABgwvAAYMSAACCj2ADwAD+yAE1wAGDGAAAAQBgA8AA/sgBH8ABgxjAAP7nAAAAADUAAAABAFsBHMABgy8UwAGDLcCEBmYKAIKOAQABJ8AAj24AwAD+3DUAAAABAFsBHMABg0gUwAGDRsCEBmYKAIKOAQABJMABg2QDJ8AAj28WwAGDWi7AAI1bwAEFISeDswDAAP7cNQAAAAEAWwEcwAGDbhTAAYNswIQGZgoAgo4BAAEkwAGDlAMnwACPcBbAAYOMgMABg4DAg/9EwACNRMABBO0ng7MAwAD+3DUAAAABAFsBHMABg54UwAGDnMCEBmYKAIKOAQABJMABg8QDJ8AAj3EWwAGDvIDAAYOwwIP/RMAAjlrAAQTwJ4OzAMAA/tw1AAAAAQBbARzAAYPOFMABg8zAhAZmCgCCjgEAASTAAYPpAyfAAI9ygsABg93Ag/9xJ4OzAMAA/tw1AAAAAQBbARzAAYPzFMABg/HAhAZmCgCCjgEAASTAAYQhAyfAAI9zFsABhBWAwAGECcCD/0TAAI5ZwAEE8SeDswDAAP7cFADAhAZmCgBJwAGEKBzAAYQwhcABhCzAhADCSAEAASfAAI7aAMAA/o0+AT01wAGEQwAAAQBgA8AA/sgBFMABhEPAhAZSCgA1AAAAAQBbARzAAYRUFMABhFLAhAgfCwCCjgEAASTAAYRoAyfAAI90hcABhGPAhADCJ4OzAMAA/tw1AAAAAQBbARzAAYR0FMABhHLAhAgfCwCCjgEAASTAAYSOAyfAAI91hsABhIbAhADVJ4OzAMAA/tw1AAAAAQBbARzAAYSaFMABhJjAhAgfCwCCjgEAASTAAYSsAyfAAI92h8ABhKjAhADoJ4OzAMAA/twUAMCECB8LAD89HMABhMAUwAGEucCEBlIKAIKOAQABJMABhN4DJ8AAj3cUwAGE1MCEBhkJACeDswDAAP7cSsABhOUBHMABhPMUwAGE7MCEBlIKACMAAAAAwAD+4QbAAQUngvLAAYUGwAGFC8ABhbYAAMAAjt0AAAABA8ABhRTAAYW2AAAAAgICwAGFIgAAAMAAjUVgA8ABBOoAwAGFQQAAAINWYAPAAQFGAABcAT4BPRzAAYVgFsABhViBwAGFUMCECX6efcABAVCXUAIAAmrAAYV5YAPAAP5+wAHlXRzAAYWOLsAAjF4CAAKAwAGFnMCECWwmwAGFqQGBwAGFqcCECX5gA8ABA2MAwAEFJgDAAQDDBsABBSiC8sABhbvAAYXAwAGGgAAAwACPZwAAAAEDwAGFzsABhoAAAAACAgLAAYXoAAAAwACNRWADwAEFAgDAAYYHAAAAg1ZgA8ABAUYAAFwBPgE9HMABhiYWwAGGHoHAAYYWwIQKNJ59wAEBUJdQAgACasABhjZgA8AA/n7AAeXRHMABhlguwACMXgIAAoDAAYZmwIQKIibAAYZzAYHAAYZzwIQKNGADwAEDYwDAAQUmAMABAMMAAIP+0QCD/xgAhAlAAIQJ9gCECqwAAAAEAsABBSuC8sABhoXAAYaLwAGHPAPAAI94AAABYAHAAP3kAAFgAcABAYcDBMABBS2C8sABhr/AAYbJCYNYAGADwAD8lwAEwAEFLoLywAGG2sABhuAJlnMAYAPAAP5+AATAAQUvgvLAAYbuwAGG9gmEYABgA8AA/v8AAQXAAQUxgvLAAYb6wAGHAMABhzoBAAADwAGHDcABhzoAAAADAwPAAYcTAAAEg1hgA8AA/JcAwAGHJAAABJZzYAPAAP5+AMABhzEAAASEYGADwAD+/wAAYAPAAQUrAT8ECAHAAQUtgADAhAtjCAHAAQUugQDAhAtzCAHAAQUvggDAhAuDCQHAAYcAwAD9+gAAAAAAAACEC9AAAAAAAsABBTKC94EEgQqGYAPAAI95AAABYAHAAP3kAAAHBMABBTSC94E5gVYGwACPegBdA8AA/TsBYAPAAPyXAWqBQF0DwAD9OwFgA8AA/JfAAfKBBMABBTWC94GBga4GwACPewBdA8AA/TsBYAPAAPyXAWqBjF0DwAD9OwFgA8AA/JfAAfKRBMABBTaC94HaggkGwACPfABdA8AA/TsBYAPAAPyXAWqB410DwAD9OwFgA8AA/JfAAfGQBMABBTeC94I1gmQGwACPfQBdA8AA/TsBYAPAAPyXAWqCPl0DwAD9OwFgA8AA/JfAAfF2BMABBTiC94J7goMGgnoAYAPAAPrRAWqCf2ADwAD60XcEwAEFOYL3gpmCogbAAEgFAGADwAD60QFqgp1gA8AA+tEABMABBTqC94L6hl4GwACPfgBdA8AA/TsBYAPAAPrRAWqDCl0DwAD9OwFgA8AA+tHAAfKpAQXAAQU8AAAAAAQAAAMAAAAAAAAAAABgA8ABBTIBPwEJAQDAAP36AAAAAAAAAIQNZAAAAAACwAEFPYL3hoeGjYgkA8AAj38AAAFgAcAA/eQAAA0EwAEFP4L3hqyGsgbAAI+AAGADwAD8lwFqhrFgA8AA/JeEEQTAAQVAgveGx4bOBsAAjWkAYAPAAPyXAWqGzGADwAD8l4QUBMABBUGC94bjhuoGwACNaABgA8AA/JcBaoboYAPAAPyXhBcEwAEFQoL3hv+HBgbAAI2tAGADwAD8lwFqhwRgA8AA/JeDSgTAAQVDgveHG4cpBp3PAGADwAD8lwFqhydgA8AA/JfAAF/pBMABBUSC94c+h0gGneEAYAPAAPyXAWqHRmADwAD8l8AARmcEwAEFRYL3h12HZgbAAI+BAGADwAD8lwFqh2RgA8AA/JfAAEPNBMABBUaC94d7h4UGnhEAYAPAAPyXAWqHg2ADwAD8l8AAX08EwAEFR4L3h5qHowbAAEnEAGADwAD8lwFqh6FgA8AA/Je2SgTAAQVIgveHuIfABsAASYkAYAPAAPyXAWqHvmADwAD8l7kHBMABBUmC94fVh98GneAAYAPAAPyXAWqH3WADwAD8l5bTBMABBUqC94f0iAMGwACPggBgA8AA/JcBaogBYAPAAPyXlEQEwAEFS4L3iBiIIgbAAI+DAGADwAD8lwFqiCBgA8AA/JfAAJYGAQXAAQVNAAAAAAQAAAMAAAAAAAAAAABgA8ABBT0BPwEJAQDAAP36AAAAAAAAAIQPgAAAAAACwAEFToL3iFOIWY1VA8AAj4QAAAFgAcAA/eQAAB0EwAEFUIL3iHWIfgbAAFCHAGADwAD8lwFqiH1gA8AA/JcJBMABBVGC94iTiLYGwACPhQBgA8AA/JcBaoi1YAPAAPyXFQTAAQVSgveIy4jkBsAAj4YAYAPAAPyXAWqI42ADwAD8lyEEwAEFU4L3iPmJEAbAAI+HAGADwAD8lwFqiQ9gA8AA/JdTBMABBVSC94kliTkGwACPiABgA8AA/JcBaok4YAPAAPyXgVcEwAEFVYL3iU6JawbAAI+JAGADwAD8lwFqiWpgA8AA/JeCPwTAAQVWgveJgImXBsAAj4oAYAPAAPyXAWqJlmADwAD8l4LhBMABBVeC94msickGwACPiwBgA8AA/JcBaonIYAPAAPyXhQcEwAEFWIL3id6J/QbAAI+MAGADwAD8lwFqifxgA8AA/JeDXQTAAQVZgveKEooqBsAAj40AYAPAAPyXAWqKKWADwAD8l4QRBMABBVqC94o/ilAGwACPjgBgA8AA/JcBaopOYAPAAPyXhBQEwAEFW4L3imWKdgbAAI+PAGADwAD8lwFqinRgA8AA/JfAAJcIBMABBVyC94qLiqIGwACPkABgA8AA/JcBaoqgYAPAAPyXwACWNgTAAQVdgveKt4rIBsAAj5EAYAPAAPyXAWqKxmADwAD8l4QXBMABBV6C94rdiwAGwACPkgBgA8AA/JcBaor+YAPAAPyXwACNGATAAQVfgveLFYsyBsAAj5MAYAPAAPyXAWqLMGADwAD8l8AAiqgEwAEFYIL3i0eLWQbAAI+UAGADwAD8lwFqi1dgA8AA/JeDcATAAQVhgveLb4uKBsAAj5UAYAPAAPyXAWqLiGADwAD8l8AAhW4EwAEFYoL3i5+LugbAAI+WAGADwAD8lwFqi7hgA8AA/JfAAIZGBMABBWOC94vPi94GwACPlwBgA8AA/JcBaovcYAPAAPyXwACErgTAAQVkgveL84wMBsAAj5gAYAPAAPyXAWqMCmADwAD8l8AAcYoEwAEFZYL3jCGMNwbAAI+ZAGADwAD8lwFqjDVgA8AA/JfAAH4qBMABBWaC94xMjGUGwACPmgBgA8AA/JcBaoxjYAPAAPyXwAB9lwTAAQVngveMeoyTBsAAj5sAYAPAAPyXAWqMkWADwAD8l8AAa7kEwAEFaIL3jKiMsQbAAI+cAGADwAD8lwFqjK9gA8AA/JfAAGr5BMABBWmC94zGjNEGwACE/ABgA8AA/JcBaozPYAPAAPyXwAB5MgTAAQVqgveM5ozzBsAAj50AYAPAAPyXAWqM8WADwAD8l8AAasYEwAEFa4L3jQiNFAbAAI+eAGADwAD8lwFqjRJgA8AA/JfAAGqTBMABBWyC940qjVMGwACPnwBgA8AA/JcBao09YAPAAPyXwACFbgEFwAEFbgAAAAAEAAADAAAAAAAAAAAAYAPAAQVOAT8BCQEAwAD9+gAAAAAAAACEE+YAAAAAAsABBW+C942RjZeOCQPAAI+gAAABYAHAAP3kAAADBMABBXGC9425jckGwACPoQBgA8AA/JcBao3IYAPAAPyXCQTAAQVygveN3o3oBsAAj3wAYAPAAPyXAWqN52ADwAD8lxUEwAEFc4L3jf2OBwbAAI99AGADwAD8lwFqjgZgA8AA/JchAQXAAQV1AAAAAAQAAAMAAAAAAAAAAABgA8ABBW8BPwEJAQDAAP36AAAAAAAAAIQUnwAAAAACwAEFdoL3jjiOPo6zA8AAj6IAAAFgAcAA/eQAAAMEwAEFeIL3jmCOcAbAAI+hAGADwAD8lwFqjm9gA8AA/JcJBMABBXmC946FjpAGwACPowBgA8AA/JcBao6PYAPAAPyXFQTAAQV6gveOpY6xBsAAj6QAYAPAAPyXAWqOsGADwAD8lwkBBcABBXwAAAAABAAAAwAAAAAAAAAAAGADwAEFdgE/AQkBAMAA/foAAAAAAAAAhBVYAAAAAALAAQV9gveQKZAvlzkDwACPpQAAAWABwAD95AABXQHAALpVAWADwADjugYEwAEFgIL3kJqQpxichMABABgAXQPAALpVAWADwADjugAEwAEFgYL3kLWQwBjAAI+mwAEAGABgA8AA47oABMABBYKC95DJkNwYwABwrMABABgAYAPAAPrRASoEwAEFg4L3kOSQ8xjAAIRiwAEAGABgA8AA/JcBlATAAQWEgveRAJELGMAAj6fAAQAYAGADwAD8jQAEwAEFhYL3kRSRJhjAAI+owAEAGABgA8AA+tEBKgEFwAEFk4L3kSuRK5GJAAAAA5FKkYkAAAADAwORVwAABJyEXQPAALpVAWADwADjugCRawAABMAAj6ZgA8AA47oAkX0AAATAAI+nYAPAAPyNAABgA8ABBX0BPwQIAcABBYCAAMCEFlgIAcABBYGBAMCEFm0IAcABBYSCAMCEFn0JAZErwAD9+gAAAAAJBsABBYeC95GOkZeRuQEAwABvrAAAAAEDkaCRuQAAAAAAAABgA8AA+tEBSpGjARaRsRaRoy6chMABABjAAQWAwABvrMAAul8GwAEFiYL3kb6RyJIUAADAAHCDAAAAAQOR05IUAAABAACCemADwAD95AFbAQABkdcAAADAAHCCXwMAAAFqAGADwAD9oXkAXQPAALloAV8DAAABSpHuARyR/BaR7i6chMABABjAAQWAwABwgwEBXwMAAAGAkgjAhBc9AMAAul0GwAEFioL3khmSIJKAAACchgAAAAEDkiaSgAAAAAAAAABdA8AAuWgBWwE+Az0Xki8uwABwrMABABgpwAEFgj0XkkcuwACPpsABABgrwAEFgUqSXwEcknQWkmYunITAAQAYwAEFgJyGAAAAAMAAulcGwAEFi4L3koWSipL6AADAAG+9AAAAAQOSkJL6AAAAAQEBkpYAAADAAHCMYQMBYAPAAOO6XAAAXAE+Aj0XkrguwACPp8ABABiAksbAhBgewAEFhD0ckuQWktYunITAAQAYwAEFgMAAb70BAAGAkuvAhBgeAMAAulgGwAEFjIL3kv+TBJNIAACDjgAAAAEDkwqTSAAAAAEBAZMQAAAAwABwjWEDAFwAAFwBPgE9HJMyFpMkLpyEwAEAGMABBYCDjgEAAYCTOcCEGJQAwAC6WgbAAQWNgveTTZNSk5wAAIGsAAAAAQOTWZOcAAAAAQEBk2MAAADAAHACYAPAAPyNAABcAT4BPRyThBaTdi6chMABABjAAQWAgawBAAGAk4zAhBjqAMAAulkGwAEFjoL3k6GTppSMAACB/AAAAAEDk6uUjAAAAAEAAZO0AAAAwABwjl0DwAC5aAFbAWoAYAPAAP2heQBcAT4BSZPJHJPZFpPNLsAAj6bAAQAYwAEFgUgBAAErAMAA/fE+AT0ck/gWk+ounITAAQAYwAEFgIH8AQABgJP+wIQZQgDAALpbPgI9F5QgLsAAhGLAAQAYHJQrFpQgLsAAhGLAAQAYwAEFg2QBAAGUAMAA/b3AAQWDSZQ1IRyURoCUOcCEGUJIAQABKwDAAP3xPgE9HJRmgJRZwIQZQoH/AQABFpRzLoIFwAEFjwDAALl9PwbAAQWPgveUkZSWlSQAAIIFAAAAAQOUnJUkAAAAAAAAAFwBPgFJlKUclLUWlKkuwACPpsABABjAAQWBSAEAASsAwAD98T4BPRyU1BaUxi6chMABABjAAQWAggUAAAAAwAC6XD4CPReU8S7AAIRiwAEAGByU/BaU8S7AAIRiwAEAGMABBYOBjQEAAZQAwAD9vsABBYM9HJUGLsAAj6nAAQAYAAAAAMABBZEGwAEFkYL3lSmVLpc3AADAAI+pwAEAGAAAAAEDlUCXNwAAAAAAAABcAT4ESZVJFpVNLsAAj6jAAQAYwAEFhUqVWQA/SZVlIRyVdRaVaS7AAIRiwAEAGMABBYNIAQABkwDAAP27SpV7AD89F5WHLsAAj6jAAQAYKcABBYU9HpWewAC4rAEAATSVsAOVsJcyAAAAAAAAAGADwAD9oQE+Bj0XlbsuwACPqMABABgqwAEFhUmV1SIcleUWldkuwACEYsABABjAAQWDgJcBAAGTAMAA/ccBFpXsLsAAcKzAAQAYwAEFgkqV+QA/TpYLlhAAABJgA8AA47oBFpYSLsAAj6bAAQAYwAEFgT0XliUuwACPpsABABgrwAEFgT0clt8WltEunITAAQAYwAEFgIIFAAAAAMAAulxJlu8hHJb/FpbzLsAAj6fAAQAYwAEFhEgBAAErAMAA/JI+AT0clxIuwACPp8ABABgBAAGAlx7AhBujAMABBYQ/AAAAhBbIAIQXDwCEF40AhBf8AIQYdACEGMoAhBkiAIQaEQCEGroAhBwwAAAACQLAAQWUgveXPJdCmrQDwACPqgAAAV0BwAC6HAFgA8AA47oAAAIEwAEFloL3l5qXpgmB+QBdA8AAulUBYAPAAOO6AATAAQWXgveXupfGCcAAhEoAYAPAAOO6AAEFwAEFm4L3l8uXy5gGAAAAA5fgmAYAAAACAgKX5gAABIH5XQPAALpVAWADwADjugCX+QAABMAAhEpgA8AA47oAAGADwAEFlAE/AwgBwAEFloAAwIQc0wgBwAEFl4EAwIQc6AkBl8vAALpSAAAAAAEGwAEFmYL3mAuYKZqyAACB+gAAAAEDmC+asgAAAAQBAZg1AAAAwABvvWEDAWADwADjulwAA5heAAAAgaxgA8AA/I0BagBgA8AA/aF5mGwAAACDjmEDAFwBagBgA8AA/aF5mHsAAADAAG+FYAPAAPrRAWoAYAPAAP2heV0DwAC6VQFgA8AA47oBPgFJmJEhHJiiFpiVLoH5wAEFlkgBAAErAMAA/fE+Az01mLMAAAEAXQPAALpVAWADwADjugEWmLMugfnAAQWWNQAAAAEAWwEcmMqEmMjAhB3QwABvvQEAAYCY0cCEHUcAwAC6WDUAAAABAFsBHJjjhJjhwIQd0IGsAQABgZjrwIQdXADAALpZNQAAAAEAWwEcmP6EmPzAhB3Qg44BAAGCmQXAhB1zAMAAulqEAMCEHdBJmRQcmSUWmRguwACESsABBZdIAQABKwDAAP3xPgFKmTgBNZk/AAABAF0DwAC6VQFgA8AA47oBFpk/LoH5wAEFljUAAAABAFsBHJlNhJlLwIQegoIFAAAAAMAAulyEAMCEHoI/SpllATWZcAAAAQBgA8ABBX0BH5lwwAEFkwMAAxaZmy6B+cABBZYWmakuwACESsABBZeAmbfAhB1HADUAAAABAFsBHJnJhJnHwIQeyIIFAAAAAMABBY+EAMCEHsg+AUqaFgEcmlAemiHAALomAQFgA8AA47oBMZpAYAPAAOO6ARaaQS7AAIRKwAEFlwCB+gQAAYCaV8CEHUcDgayBmnLAhB1cg46CmoPAhB1zwABvhYOamsCEHYjAALosAACEHScAhB99AAAAAQLAAQWcgveerZ6zwACFxAPAAI+rAAABXQHAALocAWADwAEClgAAGwTAAQWfgvee8p8HGMAAj6zAAQAYAGADwAD60QEqBMABBaCC959En0sYmFPAAQAYAGADwADjugErBMABBaGC959Tn1kYl0jAAQAYAGADwAD8lwErBMABBaKC959pn3cJwACPrcABABgAYAPAAPrRAATAAQWjgveff5+FGMAAZDDAAQAYAGADwAD8lwErBMABBaSC95+Nn54YwACPrsABABgAYAPAAPyXASsEwAEFpYL3n6afshjAAI+vwAEAGABgA8AA/JcBKwTAAQWmgvefup/JGMAAjm3AAQAYAGADwAD8lwGTBMABBaeC95/Rn+YYwACPsMABABgAYAPAAPyXAZMEwAEFqIL3n/qgBgnAAGONwAEAGABdA8AA/TsBYAPAAPyXATGgBGADwAD8lwAEwAEFqYL3oBqgNAnAAI+xwAEAGABdA8AA/TsBYAPAAPyXATGgMmADwAD8lwAEwAEFqoL3oEigWQnAAI+ywAEAGABdA8AA/TsBYAPAAPyXATGgV2ADwAD8lwAEwAEFq4L3oG2gfgnAAI+zwAEAGABdA8AA/TsBYAPAAPyXATGgfGADwAD8lwAEwAEFrIL3oIegkxjAAI+0wAEAGABgA8AA/JcBKwTAAQWtgvegm6CvGMAAjiHAAQAYAGADwAD8lwEcoK2UgcYAAAAAwAD8ugTAAQWugveguKDNGMAAjdnAAQAYAGADwAD60QErBMABBa+C96DWoOgYwACPtcABABgAYAPAAPrRASsEwAEFsIL3oPGg+RjAAI+2wAEAGABgA8AA+tEBKwTAAQWxgvehA6EZGMAAj7fAAQAYAGADwAD60QEqBMABBbKC96EhoTcYwACPuMABABgAYAPAAPyXARyhNZSBxgAAAADAAPy6BMABBbOC96FJoVEYwACN1cABABgAYAPAAQHyASsEwAEFtIL3oYqhkxjAAI4pwAEAGABgA8ABApYBKwTAAQW1gvehtaHIGMAAhF7AAQAYAF0DwAC6VQFgA8AA47oBKwTAAQW2gveh0aHfGMAAj7nAAQAYAGADwAD60QEpBMABBbeC96HoofsYwACPusABABgAYAPAAPrRASoEwAEFuIL3oh+iKhjAAG/awAEAGABdA8AAuqQBYAPAAQKWASsEwAEFuYL3okqiWRjAAI+7wAEAGABdA8AAuqQBYAPAAOO6ASsBBcABBd+C96MCowKk/QCAtcABABgAA6MPpP0AAAABAQGjFQAABMAAj61gA8AA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AEPcFsAAQ8YuwACPscABABjAAQWpVgEAAYDAAEPgwIQunQDAAP1MQsAAQ/0AAcAARBlqwABEGWADwAD8l4I/AD4CScAARD4cwABEVBbAAERCLsAAj67AAQAYwAEFpGMBAAEWwABEZmrAAERdXQPAAP07AWADwAD8l8AB8pFhwAD9awDAAP3FPgI9HMAARHwuwACPycABABgCAAKAwABEhMCELp0cwABEl2rAAESRXQPAAP07AWADwAD8l8AB8XZLAQABFsAARJguwACPrsABABjAAQWkAMAA/UoAwAEFzT0XwABEuS7AAI+uwAEAGBzAAETKFsAARLkuwACPrsABABjAAQWkZAEAAZQAwAD9vcABBaRJwABE3xzAAET1FsAAROMuwACPrsABABjAAQWkSAEAARbAAEUIasAARP9dA8AA/TsBYAPAAPyXwAHykWHAAP1rAMAA/bs+AUnAAEUeHMAARSeAwABFIsCELp1IAQABasAARTRgA8AA/Je5BwDAAP27PgM9F8AARWsuwACPtMABABhqwABFh2ADwAD8lyHAAQWsPRfAAEWdLsAAjdnAAQAYKcABBa49F8AARckuwACPrsABABgcwABF2hbAAEXJLsAAj67AAQAYwAEFpGQBAAGUAMAA/b3AAQWkScAARfEcwABF+oDAAEX1wIQunUgBAAFqwABGB2ADwAD8l7ZKAMAA/bs+Az0XwABGPy7AAI+0wAEAGGrAAEZbYAPAAPyXFcABBaw9F8AARnEuwACN2cABABgqwAEFrj0XwABGni7AAI+uwAEAGBzAAEavFsAARp4uwACPrsABABjAAQWkZAEAAZQAwAD9vcABBaQ+AT0wwABG1h/AAEbgwAEBmwEAASfAAI/HAD4BScAARzUcwABHPoDAAEc5wIQunUgBAAFqwABHS2ADwAD8l4QXAMAA/bs+AT0XwABHXy7AAGQwwAEAGGrAAEdvYAPAAPyXguHAAQWjPgM9HMAAR6cuwACPycABABgCAAKAwABHr8CELp1qwABHv2ADwAD8l4QUAMABBc09F8AAR9IuwACPr8ABABhqwABH7mADwAD8lxXAAQWlPRfAAEgFLsAAZDDAAQAYasAASBVgA8AA/JeEFMABBaNCwABIRwABwABIY2rAAEhjYAPAAPyXguEAPgQ9HMAASIIuwACPycABABgCAAKAwABI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/n4AAGADwAD9oQE+AUnAAEVcHMAARXQcwABFZoLAAEVgwITdn5aFAAAAAMAA/qNIAQABJ8AAjJgAwAD+jT2JwABFgsCE3TkpPwDAAP0JScAARaAhgcAARaXAhN05SsAARbABKj9OwABFycAARdEAAMAAjJhgA8AA/n4BHMAAReMWwABF24DAAEXTwITcmp59wAEBBoCWAQABasAARfVgA8AA/n7AAeX5AMABAMFJwABGCSIcwABGFYLAAEYNwITeEkgBAAErAMAA/o0BIRzAAEY2HMAARiiCwABGIMCE3hKWhQAAAADAAP6jSAEAASfAAJCMAMAA/o0+AUrAAEZOASo/TsAARm3AAEZ1AACB5WADwAD+fgEcwABGhxbAAEZ/gMAARnfAhNyann3AAQEGgJYBAAEnwACQmADAAQDBScAARqsiHMAARreDwABGr8CE3q9IAQABKwDAAP6NASEcwABGyoPAAEbCwITer0gBAAEnwACH1wDAAP6NPgFKwABG2wEqP07AAEb6wABG/gAAg9ZgA8AA/n4BHMAARxAWwABHCIDAAEcAwITcmp59wAEBBoCWAQABJ8AAkI0AwAEAwUnAAEcwHMAARziEwABHNMCE3zFIAQABKwDAAP6NPgFKwABHSQEqP0rAAEdhASkAAITPXQCE0OIAhNLsAITZVACE3GoAhN+aAAAABQLAAQcMgvPAAEd1wABHe8AAUjkDwACQmQAAAWABwAD95AAABwTAAQcOgvPAAEegwABHtxjAAJAjAGADwAD60QAEwAEHD4LzwABHwMAAR9cYwACQIgBgA8AA+tEABMABBxCC88AAR9/AAEfyGMAAkCQAYAPAAPyXAATAAQcRgvPAAEf6wABIDRjAAJAlAGADwAD8lwAEwAEHEoLzwABIFsAASCAYwACQQgBgA8AA+tEABMABBxOC88AASDPAAEg6GIH4AGADwADukgErBMABBxSC88AASEzAAEhTGIjiAGADwADukgErAQXAAQccgvPAAEhYwABIWMAASXIAAAADwABIc8AASXIAAAAFAAAFwABIgQAABMAAkCRgA8AA/JcBasAASKVgA8AA/JfAAIqowABIxQAABMAAkCVgA8AA/JcBasAASOlgA8AA/JfAAIqowABJCQAABMAAkCNgA8AA+tEBasAASSJgA8AA+tEAwABJNAAABMAAkCJgA8AA+tEBasAASU1gA8AA+tEAwABJXwAABMAAkEJgA8AA+tEBasAASWtgA8AA+tEAYAPAAQcMAT8GCAHAAQcQgADAhODECAHAAQcRgQDAhODlCAHAAQcOggDAhOEGCAHAAQcPgwDAhOEkCAHAAQcShADAhOFCCQHAAEhYwAD9+gAAAAAEBsABBxeC88AASXfAAEl8wABKRwAAwACQmsABABgAAAABA8AASYrAAEpHAAAAAAAAAFwBPgFJwABJkxzAAEmfFsAASZcugfjAAQcTSAEAASsAwAD98T4BPRfAAEmwLoH4HsAASb7AAO6VAgAAAsAAf0YjFsAASfEuwACQQsABBxIWwABJ/i7AAJAkwAEHEBbAAEoULsAAkCXAAQcRAWADwAD8l5/jKcABBxM/BsABBxiC88AASkzAAEpRwABLHAAAwACQm8ABABgAAAABA8AASl/AAEscAAAAAAAAAFwBPgFJwABKaBzAAEp0FsAASmwuiOLAAQcUSAEAASsAwAD98T4BPRfAAEqFLojiHsAASpPAAO6UAgAAAsAAf0YjFsAASsYuwACQQsABBxIWwABK0y7AAJAlwAEHERbAAErpLsAAkCTAAQcQAWADwAD8l5/jKcABBxQ/BsABBxmC88AASyHAAEsrwABNJwAAwACQgwAAAAEDwABLQcAATScAAAABAQHAAEtMAAAAg1ldA8AA/TsBYAPAAPyXAABgA8AA47oBPgo9HMAAS1cuwACQmsABABgAAAAAwAEHF07AAEtywABLdwAAEl0DwAD9OwFgA8AA/JcBMcAAS35gA8AA/JcAPRzAAEuLgcAAS4bAhONvgKUBAAGAwABLksCE4zYAwAD9TT0cwABLoYHAAEucwITjb4ClAQABasAAS6hdA8AA/TsBYAPAAPyXwAH1lwDAAP1NPRzAAEvWFsAAS84ugfjAAQcTwABHCQMAA4HAAEvewITjb5MWwABL7IHAAEvnwITjb2HAAP1rAMAA7pdOwABL/cAATAQAAIF2XQPAAP07AWADwAD8lwExwABMC2ADwAD8lwBOwABMHQAAAG9dA8AA/TsBYAPAAPyXAEPAAEwnIRzAAExKi8AATC/AhORIHMAATD0WwABMNS6B+MABBxPAAH9DAAAAAMAA7phIAQABKwDAAP1lPgE9HMAATGKCwABMW8CE5CGApQEAAYPAAExpwITkSADAAP1NScAATHoiIhbAAEx/LsAAkELAAQcSABbAAEyNLsAAkCLAAQcPASIhFsAATLMuwACQQsABBxIAFsAATMEuwACQI8ABBw4+AT0XwABM4y6B+CvAAQcTP0rAAEz+AR7AAE0JwADjvwEAAYLAAE0cwITkIQAGwAEHGoLzwABNLMAATTbAAFI3AADAAJCcAAAAAQPAAE1MwABSNwAAAAEBAcAATVcAAACDWV0DwAD9OwFgA8AA/JcAAF0DwAD9OwFgA8AA/JcBPgs9HMAATWIuwACQm8ABABgAAAAAwAEHGE7AAE18wABNgwAAgXZdA8AA/TsBYAPAAPyXATHAAE2KYAPAAPyXAE7AAE2cAAAAgo9gA8AA47oAScAATakhJcAATbGAwABNrcCE5VpgA8AA47o+AkXAAE3IAcAATdHAAE3TAABiYAPAAPyXAZMBHMAATdqDwABN2MCE5fNjAQABFsAATeCAwABN3MCE5VphwAD9awDAAP3FAYvAAE3owITl8xzAAE3pg8AATejAhOXzZAEAAZQAwAD9vT4BScAATfciHMAATgIcwABN/oDAAE37wITlWksBAAGDwABN/8CE5fMAwAD9SmMBAAGTAMAA/cUBHMAATg03gP9jAQABHMAAThKAwABOD8CE5VpLAQABg8AAThPAhOXzAMAA/UoAwAD9xT4BPTDAAE4jH8AATi3AAPvKAQABJAAGJ8AAkJ0nwACQnhzAAE56gMAATnfAhOVaSwEAAYPAAE57wITl8wDAAP1KJ8AAkJ+DwABOicCE5fMngyYAPz2KwABOp8CE5cEewABOtMAA478BAAGAwABOx8CE5VoAPgE9isAATuDAhOXBJsAATuABgMAATunAhOVaYAPAAOO6PRzAAE8BFsAATvkuiOLAAQcUwABHCQMAA4LAAE8JwITlwZMWwABPG4LAAE8UwITlwWHAAP1rAMAA7pdOwABPMwAAAG9dA8AA/TsBYAPAAPyXAEPAAE88IRzAAE9fi8AAT0TAhOeNHMAAT1IWwABPSi6I4sABBxTAAH9DAAAAAMAA7phIAQABKwDAAP1lPgE9HMAAT3eBwABPcMCE5ZqApQEAAYPAAE9+wITnjQDAAP1NScAAT48iIiEWwABPlS7AAJBCwAEHEgAWwABPoy7AAJAiwAEHDwEiFsAAT8guwACQQsABBxIAFsAAT9YuwACQI8ABBw4+AT0XwABP+C6I4ivAAQcUP0nAAFATHMAAUCUWwABQHoHAAFAXwITlmmHAAP1rgJcBAAGXAMAA/cc+AT2JwABQMsCE5ZocwABQQoHAAFA7wITlmoFYAgACkxzAAFBbFsAAUFSBwABQTcCE5ZphwAD9a4GNAQABlwDAAP2+AMAA/V4/ScAAUewcwABR/hbAAFH3gcAAUfDAhOWaYcAA/WtIAQABkwDAAP27PgFKwABSDAExwABSE2ADwAD8lwGTP0rAAFImAYHAAFItwITlmgAAhOG0AITiXwCE4woAhOUuAITpFAAAAAQCwAEHHYLzwABSb8AAUnXAAGcmA8AAkKAAAAFdAcAAuo0CW10DwAD9OwFgA8AA/JcAAV0BwAC6YgFbAwTAAQcfgvPAAFL3wABTAAnAAHzoAGADwAEHVwAEwAEHIYLzwABTGcAAUyMYwAB0IsABABgAXQPAALpiAV0DwAD9OwFgA8AA/JcBKwTAAQcigvPAAFNEwABTUhjAAJChwAEAGABgA8ABBwwBKwEFwAEHK4LzwABTV8AAU1fAAFOyAAAAA8AAU3TAAFOyAAAAAQEBwABTegAABMAAfOhgA8ABB1cAAGADwAEHHQE+AT0XwABTiy7AAJChwAEAGBbAAFOmFsAAU5wuwAB86MABBx/AAJBxwAEAGMABB2rAAQciAggBwAEHH4AAwITp+gkBwABTV8AAupEAAAAABgbAAQckgvPAAFO3wABTycAAVOsAAJ60AAAAAQPAAFPNwABU6wAAAAEBAcAAU9UAACCB9l0DwAC6HAFbAABdA8AAuhwBXQPAAP07AWADwAD8lwE+AUrAAFPjAR7AAFPuwAC6KAIBXQPAAP07AWADwAD8lwKAwABUEcCE6o40wABUIQPAAFQhwABU5gAAAAEBAcAAVDcAAADAAHEyXQPAALpiAV0DwAD9OwFgA8AA/JcAAGADwAEHHQE+A0nAAFRKIRzAAFRZFsAAVE4uwAB0IsABABjAAQchSAEAASsAwAD98T4BPTDAAFRsH8AAVHbAAPw3AQABJ8AAkKIAPz0XwABUti7AAHQiwAEAGIHAAFTDwITq9MABByFKwABU1AEuAAbAAQclgvPAAFTwwABU9cAAWHEAAFYAAAABA8AAVPjAAFhxAAAAAQEBwABU+QAAICJbAABcAT4GScAAVQglwABVFIDAAFUMwITrrWADwAEG+D4CPRzAAFUvLsAAkKMCAAJqwABVSWADwAD8l4QUFsAAVVcUwABVT8CE660AAWADwAEG+Kf3wAEG+gDAAQcoSsAAVWcAP0nAAFV5JcAAVYWAwABVfcCE661gA8ABBvM+Aj0cwABVoC7AAJCjAgACasAAVbpgA8AA/JeEERbAAFXIFMAAVcDAhOutAAFgA8ABBvOn98ABBvUAwAEHKErAAFXYAD9OwABV9AAAABJdA8AA/TsBYAPAAPyXAE7AAFYCAAAAwABlsGADwAD8lwBJwABWDiEcwABWGoDAAFYSwITrrUgBAAErAMAA/fE+AknAAFYrJcAAVjeAwABWL8CE661gA8AA/n4+Aj2KwABWTMCE7JBqwABWZmADwAD8lxU9icAAVnTAhOx5HMAAVoBqwABWe2ADwADJ7IGJlXoBAAEUwABWh8CE660AAWADwAD+fgDAAMf1ScAAVp4lwABWqoDAAFaiwITrrV0DwAD9OwFgA8AA/Jc+Aj2KwABWwsCE7JBqwABW3GADwAD8lyE9icAAVuzAhOx5FMAAVvPAhOutAAFdA8AA/TsBYAPAAPyXScAAVwklwABXFYDAAFcNwITrrWADwAEGtT4CPYrAAFcywITskGrAAFdMYAPAAPyXFT2JwABXWsCE7HkWwABXaRTAAFdhwITrrQABYAPAAQa1hDnAAQa3PgE9MMAAV4cfwABXkcAA+8oBAAGAwABXn8CE660AScAAV7ghHMAAV8sWwABXvC7AAJChwAEAGMABByJIAQABKwDAAP3xPgE9icAAV97AhOx5HMAAV/QWwABX5S7AAJChwAEAGMABByLAAJCcAQABgcAAWAvAhOx5AMABBxo/PgE9isAAWC3AhOyQasAAWEdgA8AA/JcVPRzAAFhXLsAAkKMCAAKCwABYYMCE7JCBwABYaMCE7HkAwAEHKAbAAQcmgvPAAFh2wABYe8AAWNsAAJxHAAAAAQPAAFiDwABY2wAAAAIBAsAAWIsAAACBx2ADwAD95ADAAFieAAAAhlRgA8AA/lIBagBgA8AA/aF5AFwBPgE9HMAAWLwWwABYsS7AAHQiwAEAGMABByGcRwIAAoDAAFjFwITuwIHAAFjMwITu0ADAALplBsABByeC88AAWODAAFjlwABaawAAgowAAAABA8AAWOrAAFprAAAAAAAAAFwBPgZOwABY98AAWPwAAIKXYAPAAPyXARbAAFkIFsAAWP4uwAB86MABBx/AAJCkwAEAGMABB2dOwABZIsAAWSkAAKWmYAPAAP5+ARbAAFk1FsAAWSsuwAB86MABBx/AAJClwAEAGMABB2hOwABZVAAAABJdA8AA/TsBYAPAAPyXAEnAAFleIRzAAFlngMAAWWLAhO9SSAEAASsAwAD9uz4EPYrAAFl4wITvuB7AAFmDwAD4NQEBYAPAAPyXAZMAPRzAAFmbgsAAWZbAhO+4VgEAARzAAFmrHMAAWaWAwABZoMCE71KDwQEAATcIAMAA/LSDfAEAATeA/wDAAPyvAMAA/Uw9HMAAWb+CwABZusCE77hWAQABHMAAWciAwABZw8CE71KDfAEAATeA/wDAAPyvAMAA/UxJwABZ1yEcwABZ4oHAAFnbwITvhUgBAAErAMAA/o0+AT0cwABZ+oLAAFn1wITvuIClAQABHMAAWgZqwABaAWADwADJ7IGJlXoBAAGBwABaDcCE74UAwADH9QDAAP1NPz89HMAAWikuwACQowIAAmrAAFpDYAPAAPyXg12CwABaSsCE77gAwAEHKD0cwABaYBbAAFpVLsAAdCLAAQAYwAEHIYKMAAAAAMAAumYGwAEHKILzwABacMAAWnXAAFvCAADAAJCjAAAAAQPAAFp9wABbwgAAAAICAsAAWoIAAADAAGWwYAPAAPyXAMAAWpQAAAASXQPAAP07AWADwAD8lwAAXAE+AT0cwABbkR7AAFqgwAEHKQQABIDAAFq5wITxWoHAAFrNwITxbBbAAFrpFsAAWt8uwAB86MABBx/AAJBuwAEAGMABB18iIRzAAFsRFsAAWwIuwACQocABABjAAQciSAEAASsAwAD98QAiHMAAWzSAwABbLcCE8VpIAQABasAAW0hgA8AA/JcVAMAA/bsBHMAAW2uAwABbZMCE8VpIAQABasAAW39gA8AA/JchAMAA/bsAg/0BAAE0wABbmQPAAFuZwABbvQAAAAEBAcAAW5oAAACDU10DwAD9OwFgA8AA/JcAAGADwAD9oQE+AT0cwABbsBbAAFulLsAAdCLAAQAYwAEHIVYBAAGCwABbtMCE8lAAwAC6ZADAAP0JBsABBymC88AAW8fAAFviwABnJAABwACQpgAAAAEDwABb7cAAZyQAAAAEBATAAFv5AAAAwABlsGADwAD8lwDAAFwLAAAAEl0DwAD9OwFgA8AA/JcAwABcFgAAAMAAkEJgA8AA+tEAwABcJwAAAMAAjVhgA8AA+tEAAF0DwAD8+QFdA8AA/TsBYAPAAPyXAT4OTsAAXD7AAFxDAACtLGADwAD60QEhgsAAXEbAhPL0TsAAXIHAAFyMAADAAJCnYAPAAPyXASMcwABck4HAAFyOwITy3kgBAAErAMAA/WWTFsAAXKaBwABcocCE8t5hwAD9awFgA8AA/JdOwABc2MAAXOMAAMAAkKhgA8AA/JcBI4TAAFzmwITzMTcGlQFgA8AA/JdJwABc+RzAAF0IhcAAXP3AhPNPgJcBAAE3wAD//wDAAP3HPgE9jsAAXRnAhPOZHMAAXSSGwABdGcCE85lkAQABNwgAwAD9vUnAAF01HMAAXUSFwABdOcCE80+AlwEAATd9AMAA/cc+AT2OwABdU8CE85kcwABdXobAAF1TwITzmWQBAAGVAMAA/b0/TsAAXXjAAF1/AACZoGADwADjugEewABdhcAA474BAAGGwABdj8CE85kATsAAXaTAAF2qAAAnYAPAAPyXAZNOwABd08AAXdcAAMAAkKlgA8AA/JcBHMAAXjscwABd+2rAAF33YAPAAPyXhLOBBgEAASODwABeBsCE8wZqwABeMWADwAD8l4SMkwFgA8AA/JcAwAD8sIEGAQABHMAAXk2AwABeRsCE8syDfAEAAWrAAF5tYAPAAPyXwACKqADAAPyvAMAA/LA9HMAAXoGHwABee8CE9E6AvwIAAjUAAAABAGADwAD8lwEUwABegsCE9HgIADUAAAABAGADwAD8lwEVwABegsCE9HgIHMAAXocUAMCE9ScKAGQBAAGUAMAA/b0UAMCE9ScKABTAAF6NwIT0jAkAAMAA/UtOwABezsAAXtoAAMAAkKpgA8AA/JcBlEnAAF7jHMAAXvKFwABe58CE80+AlwEAATfAAP//AMAA/cc+Aj0cwABfCYfAAF8DwIT0ToC/AgACNQAAAAEAYAPAAPyXARTAAF8KwIT0eAgANQAAAAEAYAPAAPyXARXAAF8KwIT0eAgcwABfDxQAwIT11AsAZAEAAZQAwAD9vRQAwIT11AsAN38AwAD9Sz0VwABfIMCE9YUKNwhJwABfPBzAAF9LhcAAX0DAhPNPgJcBAAE3fQDAAP3HPgI9HMAAX2CHwABfWsCE9E6AvwIAAjUAAAABAGADwAD8lwEUwABfYcCE9HgIADUAAAABAGADwAD8lwEVwABfYcCE9HgIHMAAX2YUAMCE9msLAGQBAAGUAMAA/b0UAMCE9msLADd+AMAA/Us9FcAAX3fAhPWFCpU/RcAAX9EBwABf2sAAX9wAAGJgA8AA/JcBkwEcwABf4xTAAF/hwIT20gsAYwEAARTAAF/lwIT1hQoAAMAA/cUBFcAAX/LAhPbSCxzAAF/zFMAAX/LAhPbSCwBkAQABlADAAP29PgE9HMAAYAWHwABf/8CE9E6AvwIAAjUAAAABAGADwAD8lwEUwABgBsCE9HgIADUAAAABAGADwAD8lwEVwABgBsCE9HgIHMAAYAsUAMCE90YMAGQBAAGUAMAA/b0UAMCE90YMABzAAGA9HMAAYByFwABgEcCE80+DwQEAARzAAGA4HMAAYDMcwABgLhTAAGAiwIT1hQoAgY0BAAGUAMAA/b6BjQEAARTAAGA1wIT20gsAAMAA/b6DjQEAATcIAMAA/b8AwAD8tIN8AQABN4D/AMAA/K8AwAD9S0nAAGBPhMAAYFPAhPMxPgU9NQAAAAEAYAPAAOO6AYfAAGBhwIT0TjUAAAABAGADwAD8lwGUHMAAYGcUwABgZ8CE+BoLAIC/AgACFMAAYGfAhPgwDAAcwABgaxzAAGBnFMAAYGfAhPgaCwBLAQABFMAAYGfAhPgwDAAAwAD9SoEGAQABHMAAYHCUg78BAAE3BwDAAPyzAMAA/LAAwAD9S07AAGCAwABgigAAwACQq2ADwADjugEewABgmcABAbIBAAGXAD0cwABguYfAAGCywIT0ToNkAwADFMAAYMLAhPR4CAAcwABgzxTAAGDJwIT0eAgAZAEAAZcAwAD9vRTAAGDUwIT4qAsAAMAA/WA9FcAAYObAhPR4CBzAAGDsFMAAYObAhPR4CABkAQABlwDAAP29ScAAYPghHMAAYQGBwABg/MCE8t5IAQABKwDAAP1lPgZOwABhHgAAAINhYAPAAOO6AEnAAGGJIhzAAGGUgMAAYY3AhPLMSAEAAWrAAGGoYAPAAPyXFQDAAP27ACXAAGG1gcAAYbDAhPLeYAPAAOO6PgE9FcAAYc/AhPlaDBTAAGHWwITy3gEBYAPAAOO6PgFJwABh9yXAAGIAgcAAYfvAhPLeYAPAAOO6PgE9FcAAYhzAhPlaDB7AAGInwADjvwEAARTAAGI6wITy3gEBYAPAAOO6AD4CPRXAAGJgwIT5WgwewABia8AA474BAAEWwABieoHAAGJ1wITy3mHAAP1rAEXAAGKPAcAAYpjAAGKaAABiYAPAAPyXAZMBHMAAYqEUwABin8CE+j8NAGMBAAEWwABiqIHAAGKjwITy3mHAAP1rAMAA/cUBFcAAYrDAhPo/DRzAAGKxFMAAYrDAhPo/DQBkAQABlADAAP29PgJJwABixSIcwABi0RzAAGLNgcAAYsnAhPLeSwEAARTAAGLOwIT6Pw0AAMAA/UpjAQABkwDAAP3FARzAAGLcN4D/YwEAARzAAGLigcAAYt7AhPLeSwEAARTAAGLjwIT6Pw0AAMAA/UoAwAD9xT4BPTDAAGL5H8AAYwPAAPvKAQABJAAGJ8AAkJ0nwACQnhzAAGNXgcAAY1PAhPLeSwEAARTAAGNYwIT6Pw0AAMAA/UonwACQnxTAAGNmwIT6Pw0AJ4MmAD89HMAAY44UwABjisCE+VoMAIC/AgACFMAAY4/AhPo/DQAcwABjmIHAAGOUwITy3ksBAAEUwABjmcCE+j8NAADAAP1KAMAA/UtOwABj8MAAY/sAAMAAkHxgA8AA/JcBHMAAZAkWwABkAhTAAGP9wIT5WgwAYcAA/WuGlwEAAWrAAGQMYAPAAPyXg3AAwAD9wknAAGQgHMAAZC8UwABkJMCE+7INAICXAQABkwDAAP3HPgVOwABkZMAAZGkAAK0sYAPAAPyXAZNFwABkeAHAAGSBwABkgwAAYmADwAD8lwGWARzAAGSKFMAAZIjAhPw1DwCBbQEAAZMAwAD9yAEVwABkkMCE/DUPHMAAZJEUwABkkMCE/DUPAIGNAQABlADAAP2+PgE9FcAAZKPAhPwbDhzAAGS2HMAAZLAUwABkq8CE/BsOAIO/AQABNwgAwAD8s4EGAQABHMAAZMEUwABkuMCE+KgLAEsBAAEUwABkwsCE/DUPAADAAP1KAMAA/LBOwABk5MAAZO4AAMAAkH1gA8AA5VsBHsAAZPTAAOZeBAAEFMAAZPzAhPwbDgAUwABlAsCE/BsOABTAAGUIwIT8Gw4AFMAAZQ7AhPwbDgAATsAAZSvAAGU3AADAAJB+YAPAAOQfAR7AAGVLwADkJQMAAxbAAGVhFMAAZVzAhPlaDACCj8AA43+TFMAAZWzAhPuyDQAARcAAZYMBwABljMAAZY4AAGJgA8AA/JcBkwEcwABllRTAAGWTwIT9gBEAYwEAARbAAGWjFMAAZZfAhP02EABhwAD9awDAAP3FARXAAGWrwIT9gBEcwABlrBTAAGWrwIT9gBEAZAEAAZQAwAD9vT4BPTUAAAABAGADwADkHwEUwABlvsCE/TYQADUAAAABAGADwAD8lwEUwABlysCE/YARABzAAGXJFMAAZcnAhP3rEgCAvwIAAhTAAGXJwIT+AxMAHMAAZc0cwABlyRTAAGXJwIT96xIASwEAARTAAGXJwIT+AxMAAMAA/UqDwAEAARTAAGXQwIT85w8AAMAA5mQAwAD9Sz9FwABmEAHAAGYZwABmGwAAYmADwAD8lwEcwABmKBTAAGYdwIT7sg0Ag40BAAFqwABmKmADwAD8l4NwAMAA/b8BHMAAZjgUwABmNsCE/oQOAGMBAAEWwABmPxTAAGY6wIT5WgwAYcAA/WsAwAD9xQEVwABmR8CE/oQOHMAAZkgUwABmR8CE/oQOAGQBAAGUAMAA/b0+AT01AAAAAQBgA8AA47oBFMAAZljAhPlaDAA1AAAAAQBgA8AA/JcBFMAAZl3AhP6EDgAcwABmXBTAAGZcwIT/FQ8AgL8CAAIUwABmXMCE/y0QABzAAGZgHMAAZlwUwABmXMCE/xUPAEsBAAEUwABmXMCE/y0QAADAAP1Kg8ABAAEcwABmbBTAAGZjwIT4qAsASwEAARzAAGZvFMAAZm3AhP6EDgCDfAEAAZYAwAD8rwDAAP1KAMAA/LEAwAD9Sz2JwABmh8CE8t4UwABmjsCE+VoMAD8/QBzAAGazFMAAZq3AhPR4CABIAQABhsAAZrbAhPOZAMAA/bvAAGatwABmwABJwABmxxzAAGbQgcAAZsvAhPLeSAEAASsAwAD9ZT4BSsAAZuEBMcAAZuhdA8AA/TsBYAPAAPyXAYfAAGbpwIT0Tj4BSsAAZwUBMcAAZwxdA8AA/TsBYAPAAPyXAofAAGcNwIT0ToHAAGcVwITy3gAAhOpkAITrhACE7pYAhO8iAITxLgCE8qAAhQCBAAAABgLAAQcsgvPAAGcpwABnL8AAcosDwACQrAAAAWABwAD95AABXQHAALp0AVsIBMABBy6C88AAZ3XAAGd+CcAAfOgAYAPAAQdXAATAAQcvgvPAAGePwABnlQnAAHyjAGADwAD1MwAEwAEHMYLzwABnqsAAZ7UYwABv2sABABgAXQPAALqkAVsBKwTAAQcygvPAAGfMwABn2RichMABABgAXQPAALpVAVsBKwTAAQczgvPAAGfiwABn9hjAAJCtwAEAGABgA8AA+tEBKgTAAQc0gvPAAGf/wABoDhi8X8ABABgAYAPAAPrRASoEwAEHNYLzwABoHMAAaEgYwACB/8ABABgAXQPAALmIAVsBHsAAaDLAALmKAAFgA8ABBnUAAATAAQc2gvPAAGhWwABoYBjAAH5iwAEAGABdA8AAuYgBWwErAQXAAQdEgvPAAGhlwABoZcAAaJQAAAADwABod8AAaJQAAAACAgLAAGh9AAAEwAB86GADwAEHVwDAAGiNAAAEwAB8o2ADwAD1MwAAYAPAAQcsAT8DCAHAAQcugADAhQIICAHAAQcvgQDAhQIaCQHAAGhlwAD9+gAAAAAKBsABBzmC88AAaJnAAGiewABo8wAAwABw6cABABgAAAABA8AAaKfAAGjzAAAAAAAAAFwBPgFJwABosCEcwABowhbAAGi0LpyEwAEAGMABBzJIAQABKwDAAP3xPgE9HMAAaOEWwABo0y6chMABABjAAQcynIYAAAAAwAC6Vz8GwAEHOoLzwABo+MAAaP3AAGl4AADAAG/EwAEAGAAAAAEDwABpBcAAaXgAAAAAAAAAXAE+AUnAAGkOIRzAAGkgFsAAaRIunITAAQAYwAEHMkgBAAErAMAA/fE+AT0cwABpPxbAAGkxLpyEwAEAGMABBzKB/AAAAADAALpbPgE9F8AAaVsuwACQrcABABgpwAEHMwbAAQc7gvPAAGl9wABpgsAAagAAAMAAb8XAAQAYAAAAAQPAAGmLwABqAAAAAAAAAABcAT4BScAAaZQhHMAAaaYWwABpmC6chMABABjAAQcySAEAASsAwAD98T4BPRzAAGnFFsAAabcunITAAQAYwAEHMoIFAAAAAMAAulw+AT0XwABp4i7AAJCtwAEAGCrAAQczBsABBzyC88AAagXAAGoKwABqoAAAwABw3MABABgAAAABA8AAahHAAGqgAAAAAAAAAFwBPgFJwABqGiEcwABqLBbAAGoeLpyEwAEAGMABBzJIAQABKwDAAP3xPgNOwABqQcAAak4AAIH5XQPAALpVAVsBFsAAalAunITAAQAYwAEHMj0XwABqZS6chMABABgrwAEHMj0cwABqjoDAAGqBwIUEW5yGAAAAAMAAulc/BsABBz2C88AAaqXAAGqlwABthAAAwACQrsABABgAAAABA8AAarbAAG2EAAAAAAAAAFsBPgRJwABqvyEcwABqzxbAAGrDLsAAb9rAAQAYwAEHMUgBAAErAMAA/fFKwABq2AA/PRfAAGrkLsAAb9rAAQAYHsAAavbAALqwBAFbAASZ3ynAAG/OFsAAay0uwABvxMABABjAAQc6wABvpxbAAGtJLsAAb8XAAQAYwAEHO8AAb6gWwABrZi7AAHDpwAEAGMABBznAAQcxTsAAa3rAAGuBAACB9l0DwAC6HAFdA8AA/TsBYAPAAPyXARzAAGufFsAAa48WwABrgy7AAG/awAEAGMABBzGB9sAAuqaB9wEBXQPAAP07AWADwAD8lwEfwABrrcABBysBAAEWwABryy7AAHzowAEHLgAAwAC6ND0cwABr9RzAAGvjFsAAa9wuwAB8o8ABBy+cSQEAAYDAAGvtwIUFdgDAAPF6ga8CAVsBNMAAa/oDwABr+sAAbD8AAAABAQHAAGv7AAAAgLVbAABgA8AA/aEBPgI9HMAAbAYuwACQr8ABABgAAAAAwAEHPj0cwABsJRbAAGwVLsAAgf/AAQAYwAEHNcAAb5kBAAEWwABsLi7AAHzowAEHLgDAALmQAYGsNMAAbEoDwABsSsAAbX8AAAACAgLAAGxLAAAAgcdbAMAAbF0AAACGVGADwAD+UgAAYAPAAP2hAT4DPRfAAGxxLrxfwAEAGCnAAQc0PRzAAGyHLsAAcNzAAQAYAAAAAMABBzxJwABsmCXAAGyigcAAbJzAhQamYAPAAPu7PgFJwABsviEcwABswy7AAJCvwAEAGAIAAhTAAGzJwIUGpgEBYAPAAPu7gsAAbNDAhQaxAMABBz4+AT0cwABs+RbAAGzpLsAAgf/AAQAYwAEHNYHdAgACFMAAbQfAhQamAQFgA8AA+7uCwABtDsCFBrEAwAC5kT8+Aj0cwABtPC7AAJCvwAEAGAAAAADAAQc+PRzAAG1dFsAAbU0uwACB/8ABABjAAQc1wABvmQEAARbAAG1mLsAAfOjAAQcuAMAAuZDAALl7BsABBz6C88AAbYnAAG2OwABujwAAwACQr8ABABgAAAABA8AAbZPAAG6PAAAAAgACwABtlQAAAIHHWwFqAGADwAD9oXnAAG2nAAAAhlRgA8AA/lIBagBgA8AA/aF5AGADwAD60QE+BEnAAG26HMAAbckWwABtvi7AAH5iwAEAGMABBzZIAQABKwDAAP3xSsAAbdIBKj9JwABt5CEcwABt7oDAAG3owIUIA0gBAAErAMAA/fE+AT0cwABuChbAAG3/LsAAfmLAAQAYwAEHNoHdAgACgMAAbhjAhQgDgcAAbh/AhQgXAMAAuZE+AT0cwABuShbAAG4/LsAAfmLAAQAYwAEHNsAAb5kBAAEWwABuUy7AAHzowAEHLgDAALmQPRfAAG5pLsAAfmLAAQAYK8ABBzZKwABugAEpBsABBz+C88AAbpTAAG6bwABwUAAAnEkAAAABA8AAbqTAAHBQAAAAAQEBwABuqQAAIIH2XQPAALocAVsAAF0DwAC5aAFbAT4GScAAbrcWwABuuy68X8ABABjAAQc0PgI9HMAAbuAcwABu04DAAG7MwIUJNYH6AQABKwDAALosnIYAAAAAwAC6V0rAAG7wAR7AAG77wAC5cQEBWwEWwABvCC7AAHzowAEHLgA/PRzAAG8eLsAAkK7AAQAYAAAAAMABBz09F8AAbzcuwAB+YsABABgewABvSMAAuYoAAVsAAMABBzY9F8AAb1kunITAAQAYHMAAb3CAwABvacCFCTWB+gQAATTAAG93A8AAb3fAAG+iAAAAAQEBwABveAAAABJbAABgA8AA/aEBPgE9HMAAb5IWwABvhi7AAG/awAEAGMABBzFWAQABgcAAb5bAhQoiAMAAurgDg44WwABvrC7AAJCvwAEAGMABBz6BrBbAAG+8LsAAkK/AAQAYwAEHPsAAb4UpwAC6LMABBzJJwABv3RbAAG/hLsAAkK3AAQAYwAEHMz4CPRzAAHAFFsAAb/cunITAAQAYwAEHMoH8AAAAAMAAuls9F8AAcBQuwACQrcABABgqwAEHMz9KwABwNAEWwABwRhbAAHA7LsAAfmLAAQAYwAEHNoHewAC5jQbAAQdAgvPAAHBVwABwXMAAcUEAAIKMAAAAAQPAAHBhwABxQQAAAAAAAABdA8AAuWgBWwE+BD0cwABwai7AAJCuwAEAGAAAAADAAQc9T8AAcIPAAHCKAAABwACQsGEDAF0DwAC5aAFbAAPAAHCVwABw5QAAAAAAAABdA8AAuWgBWwE+AUrAAHCgARzAAHDJHMAAcLYcwABwrhbAAHCnLsAAfKPAAQcvgowAAAAAwAD1PoHyAQABNMAAcMEDwABwwcAAcMcAAAABAQHAAHDCAAAAgLVbAABgA8AA/aEBPgAAwAC5fIGvAQFbATTAAHDOA8AAcM7AAHDeAAAAAQEBwABwzwAAAIC1WwAAYAPAAQdXAUrAAHDVARbAAHDVLsAAfOjAAQcuAMAAuXs9HMAAcPgWwABw7C7AAG/awAEAGMABBzGCjAAAAADAALq6SsAAcQUBHMAAcSMWwABxHBbAAHEMLsAAgf/AAQAYwAEHNYHewAC5jYGvAQFbATTAAHEoA8AAcSjAAHE8AAAAAQEBwABxKQAAAIC1WwAAXQPAALloAVsBSsAAcS8BHMAAcTqAwABxL8CFC1kgAAAAAAAAwAC5ewbAAQdBgvPAAHFGwABxS8AAcj0AAFYAAAABA8AAcU7AAHI9AAAAAQEBwABxTwAAABJbAABcAT4EScAAcVsWwABxXy68X8ABABjAAQc0SsAAcWgAPz0cwABxdC7AAJCuwAEAGAAAAADAAQc9ScAAcf4WwAByDhbAAHICLsAAb9rAAQAYwAEHMbmTwAC6rErAAHIYAD89HMAAcjAWwAByJC7AAG/awAEAGMABBzFWAQABgMAAcjTAhQzyAMAAurgGwAEHQoLzwAByQsAAckfAAHKJAADAAJCwAAAAAQPAAHJSwAByiQAAAAAAAABcAT4DPRfAAHJbLrxfwAEAGCnAAQc0PRzAAHJvLsAAcNzAAQAYAAAAAMABBzw9HMAAcn4ugowAAAAAwAEHQAAAhQJdAIUC2gCFA2wAhQP+AIUErACFB9MAhQkLAIULBwCFDMkAhQ2HAIUN8gAAAAoCwAEHRYLzwAByjsAAcpTAAKCUN8AAkLEAAAFdAcAAuhwBWwABYAHAAQJwAQTAAQdMgvKBZ4F2GMAAf8XAAQAYAGADwAD8lwGTAgXAAQdHAAAAAAQAAAMAAAAAAAAAAABgA8ABB0UBPwEJAADAALpSAAAAAAXAAQdJAAAAAASGa8AAuEcAAwAAAAAAAAAAAGADwAEHRQE/AQkAAMAAulQAAAAABgbAAQdPgvKBeoGCgeMBAMAAf8bAAQAYAAAAAQOBjYHjAAAAAAAAAGADwAD8lwE+AkmBkxyBoxaBly7AAH/FwAEAGMABAnNIAQABkwDAAP27PReBqS7AAH/FwAEAGDUAAAABAGADwAD8lwEagbfAAQAjNQAAAAEAYAPAAPyXARuBt8ABACMcgcWAAMCFDyVkAQABlADAAP29gADAhQ8lwAECcz9Kgc0BFoHULsAAf8XAAQAYwAECcwbAAQdVgvKB6IHsgf0AAsAAdRvAAQAYAAAAAQOB84H9AAAAAQEBgfkAAACX6WADwAD60QAAXQPAAP1tAltbAAbAAQdQgvKCAoINgjwBAMAAf8fAAQAYAAAAAQOCGoI8AAAAAAAAAGADwAD+fgFKgh0BJII8AxaCHy7AAH/IwAEAGMABAngnUBaCMS7AAH/GwAEAGMABAnYGwAEHUYLygkGCTIJcAQLAAH/IwAEAGAAAAAEDglyCXAAAAAAAAABgA8AA/n4ABsABB1KC8oJhgmyCfAECwAB/ycABABgAAAABA4J8gnwAAAAAAAAAYAPAAP5+AAbAAQdWgvKCgYKIguoAAMAAf8rAAQAYAAAAAQOClILqAAAAAQEBgpoAAACX6WADwAD60QAAYAPAAP5+AT4CSYKlgIKpwIUQl0qCrgEkgskCJ4OEFoK4LsAAf8nAAQAYwAECeT9Kgs8BFoLWLsAAf8nAAQAYwAECeQAAhQ7HAIUPfgCFD70AhRAVAIUQQwCFEHEAhRDpAAAABgLAAQdXgvPAAHKOwABylMAAoJQDwACQsgAAAWABwAEHRQABYAHAAQZ1FQTAAQdagvPAAHMmwABzUgTAAJCzwAEAGABdA8AA/W0CYAPAAPyXYAPAAQdXAR7AAHM4wAD9dAACYAPAAPyXYAPAAQdXAAAEwAEHbILzwABzZ8AAc38GwACBSQBgA8AA/JcBasAAc31gA8AA/JfAAIqoBMABB22C88AAc5fAAHPBBsAAkLQAYAPAAP5+AWrAAHOtYAPAAP5+wAH1MwTAAQdugvPAAHPTwABz2wnAAICDAGADwAD+fgAEwAEHW4LzwABz8cAAc/wYwABv2sABABgAXQPAALqkAVsBKwTAAQdcgvPAAHQTwAB0IBichMABABgAXQPAALpVAVsBKwTAAQddgvPAAHQvwAB0NBiXaMABABgAXQPAALp6AVsBKwTAAQdegvPAAHQ/wAB0RgnAAICKwAEAGABbAATAAQdfgvPAAHRVwAB0YAnAAJBuwAEAGABgA8AA+tEABMABB2CC88AAdGjAAHSKGMAAkLXAAQAYAGADwAD8lwFqwAB0gGADwAD8lwkEwAEHYYLzwAB0k8AAdKcYwACQtsABABgAYAPAAPrRASoEwAEHYoLzwAB0r8AAdLkYwACQt8ABABgAYAPAAPyXASsEwAEHY4LzwAB0xMAAdNAYwACQuMABABgAYAPAAP5+ASsEwAEHZILzwAB03cAAdOoYwACQucABABgAYAPAAPttASsEwAEHZYLzwAB09MAAdP4YwACQusABABgAYAPAAL1NASsEwAEHZoLzwAB1FcAAdR4YwACAqsABABgAYAPAAQcsASsEwAEHZ4LzwAB1J8AAdTQYwACQpMABABgAYAPAAPyXASsEwAEHaILzwAB1P8AAdU4YwACQpcABABgAYAPAAP5+ASsEwAEHaYLzwAB1WMAAdWMYwACQu8ABABgAYAPAAL1NASsEwAEHaoLzwAB1g8AAdYsYwACQccABABgAYAPAAQcMASsEwAEHa4LzwAB1qMAAdcYFwAB9DcABABgAYAPAAQEhAR7AAHW6wAEBLQAAAAABBcABB4yC88AAiMbAAIjGwACREADAAJC8wAEAGAADwACI4MAAkRAAAAAFAwXAAIjtAAAEwACAilsAwACI+wAABMAAgINgA8AA/n4AwACJGAAAAMAAkDhgA8ABBl0AwACJMQAABMAAkG5gA8AA+tEBasAAiT9gA8AA+tEAwACJYgAAAMAAkJFgA8ABBwwBagBgA8AA/aF5AGADwAEHVwE+CT0XwACJci7AAICqwAEAGB/AAImCwAEHRAIAAi4mwACJmwEWwACJmy7AAICKwAEAGMABB15gA8AA9TMAwAEHZj0XwACJqS6XaMABABgfwACJtcABAxsBAVsBFsAAicUuwACAqsABABjAAQdmAMABB109F8AAidUuwACQtcABABhqwACJ7WADwAD8lxXAAQdgPRfAAIn3LsAAkHHAAQAYhMAAigLAhRSrwAEHak7AAIoUwACKIAAAqktgA8ABBsIBH8AAiibAAQbyAgACFsAAikQuwACQbsABABjAAQdfFsAAilEuwACQccABABjAAQdqAD0XwACKYC6chMABABgcwACKihzAAIp8hcAAinDAhRV8nrQBAAEmwACKgQEWwACKgS7AAICKwAEAGMABB15dA8AAuhwBXQPAAP07AWADwAD8lwDAAQbkgfoEAAE0wACKkQPAAIqRwACL1gAAAAEBAcAAipIAAAASWwAAYAPAAP2hAT4BScAAiqAlwACKqYbAAIqkwIUWL2ADwAEG8z4BScAAisYhFsAAissuwACQtsABABjAAQdhPRzAAIrjFsAAitkuwACAqsABABjAAQdmVgEAAR/AAIrrwAEG/AEAARbAAIr/FMAAivrAhRYvBgFgA8ABBvOn98ABBvUAAMABB0E/ScAAixclwACLIIbAAIsbwIUWL2ADwAEG+D4BPRfAAIt9LsAAkD8WwACLjC7AAJC5wAEAGMABB2TAAQeIPgE9HMAAi74WwACLsi7AAG/awAEAGMABB1tWAQABhsAAi8LAhRYvAMAAurgDgaw0wACL4QPAAIvhwACNdwAAAAICAsAAi+IAAACBx1sAwACL6QAAAIZUWwAAYAPAAP2hAT4FScAAi/0hHMAAjA0WwACMAS7AAJC7wAEAGMABB2lIAQABKwDAAP3xPRzAAIwiFsAAjBYuwACQu8ABABjAAQdpnIYAAAAAwAC9Uz9JwACMMiXAAIw8hsAAjDbAhRdAYAPAAPxqPgE9HMAAjFouwABvF8ABABgBAAFqwACMcWADwAD8l8AB874AwAEHeT4BPRzAAIylLsAAbxfAAQAYAQABasAAjLxgA8AA/JfAAavCAMABB3k9F8AAjRUuwACQt8ABABgWwACNIi7AAJCkwAEAGMABB2fAAQdiPRfAAI03LsAAkLjAAQAYFsAAjUYuwACQpcABABjAAQdowAEHYz0cwACNaRbAAI1dLsAAb9rAAQAYwAEHW4KMAAAAAMAAurqDjjTAAI2BA8AAjYHAAI+fAAAAAAAAAGADwAD9oQE+BUnAAI2MIRzAAI2cFsAAjZAuwACQu8ABABjAAQdpSAEAASsAwAD98T0cwACNsRbAAI2lLsAAkLvAAQAYwAEHaZyGAAAAAMAAvVM/ScAAjcEcwACN0RbAAI3FLsAAkLXAAQAYwAEHYEgBAAFqwACN3mADwAD8lxUAwAD9uz4DPRfAAI3uLsAAkLXAAQAYasAAjgZgA8AA/JchwAEHYEnAAI4XIR7AAI4cwAEHewEAARbAAI4+hcAAjjLAhRV8wACQRsABBuEAPgE9HMAAjlYuwABvF8ABABgCAAIWwACOaYXAAI5dwIUVfMAAkEbAAQbhFsAAjoCFwACOdMCFFXzAAJBHwAEG4gDAAQd5PgE9HMAAjqkuwABvF8ABABgAAAAAwAEHeT0XwACOxS7AAJC1wAEAGGrAAI7dYAPAAPyXU8ABB2A/PRfAAI8tLsAAkLfAAQAYFsAAj0aFwACPOsCFFXzAAJBGwAEG4cABB2I9F8AAj1cuwACQuMABABgWwACPcoXAAI9mwIUVfMAAkEfAAQbiwAEHYz0cwACPkRbAAI+FLsAAb9rAAQAYwAEHW4KMAAAAAMAAurrAAG+FKcAAuizAAQdcPRzAAI/JFsAAj7sunITAAQAYwAEHXIH8AAAAAMAAuls9F8AAj9YuwABv2sABABgewACP6MAAurAFAVsABZnfKcAAb6YWwACQLhbAAJAgLpyEwAEAGMABB1yCBcAAulzAAG+oNMAAkEgDwACQSMAAkJgAAAAAAAAAYAPAAP2hAT4CPRzAAJBlFsAAkFcunITAAQAYwAEHXJyGAAAAAMAAulc9F8AAkHkunITAAQAYK8ABB1zAAG/OFsAAkLkWwACQqy6chMABABjAAQdcgfzAALpbwABvpxbAAJDgFsAAkNIunITAAQAYwAEHXIIFwAC6XMABB1s9HMAAkPkawACQ7sABB1qAvwIAAhbAAJD6LsAAf8bAAQAYwAECdi4AwAD9ggQIAcABB16AAMCFFFwIAcABB26BAMCFFGkIAcABB1+DAMCFFI0JAcAAiMbAAQdHAAAAABYGwAEHcILzwAB1y8AAdeTAAIQmAAHAAIAfAAAAAQPAAHXrwACEJgAAAAQDA8AAdfoAAADAAEmQYAPAAP5+AMAAdhAAAADAAIDEXQPAAPz5AWADwAD+fgDAAHYwAAAAnn1dA8AA/W0CYAPAAP5+WwABwAB2UwAAAMAAkDhgA8ABBl0BasAAdnNgA8ABBl3AAfTGXQPAALloAWADwAEGdQE+CE7AAHaSwAB2lgAAgKxgA8AA/v8BHsAAdpzAAP8tAQABgMAAdqLAhRvkAEnAAHasIiEcwAB2uxbAAHa0hMAAdrDAhRxagbzAAP8FSAEAASfAAJC9AMAA/o0AIRzAAHbRFsAAdsqEwAB2xsCFHFqBvMAA/wVIAQABJ8AAkL4AwAD+jT4BPTDAAHbjH8AAdu3AAQaZAQABJMAAdygDJ8AAkL8WwAB3H4TAAHcbwIUcWoG8wAD/BSeDSAA/TsAAdz3AAHdEAACgAWADwADQ/wEewAB3SsAA0QEAAAAATsAAd4PAAHeNAADAAJDAYAPAAOO6AR7AAHeTwADjvgEAATcQAEXAAHemAcAAd6/AAHexAABiYAPAAPyXAZMBHMAAd7iHwAB3tsCFHV5jAQABNxAAwAD9xQGPwAB3vsCFHV4cwAB3v4fAAHe+wIUdXmQBAAGUAMAA/b0+AT0cwAB31IbAAHfLwIUdNIC/AgACh8AAd9XAhR1eHMAAd+GFwAB32sCFHROgAwEAATeBAADAANEEAMAA/UtOwAB4AMAAeAYAAMAAjlpgA8AA/n4BHsAAeBXAAQG0AQABhsAAeCPAhR00AD2MwAB4NMCFHFoewAB4PsAA/3IHAAAHgbwjHMAAeF4WwAB4V4TAAHhTwIUcWoG8wAD/BUgBAAEnwACQvgDAAP6NJ4NFJ4NEAWADwAD+fpaHFsAAeJGEwAB4jcCFHFqWh8AA/weWiBbAAHithMAAeKnAhRxalojAAP8IlokWwAB4xYTAAHjBwIUcWpaJwAD/CU4WwAB43YTAAHjZwIUcWk7AAP8KlooWwAB49oTAAHjywIUcWpaKwAD/C5aLFsAAeROEwAB5D8CFHFqWi8AA/wxKwAB5IgEcwAB9WBzAAHlJHMAAeTUawAB5KcABB2vAAI09AgACJ51shMAAeUTAhRxaAMABATCBrwEBYAPAAQFYATTAAHlOA8AAeU7AAH1WAAAAAQEBwAB5TwAAAINWYAPAAQFGAABdA8AAuWgBYAPAAQFYAT4GScAAeWAiIRzAAHlxFsAAeWiEwAB5ZMCFHFqWh8AA/wdIAQABKwDAAP6NACEWwAB5ihbAAHmBhMAAeX3AhRxalofAAP8HgVXAAP6EPgJOwAB6AcAAegYAAMAAjtpgA8AA/n4BHsAAehXAAQG0AQABHMAAeihqwAB6I2ADwADJ7IGJlXoBAAEWwAB6M4TAAHovwIUcWpaHwAD/BwDAAMf1AD0cwAB6VxbAAHpPFMAAekfAhR89CACefcABAVCXUAIAAmrAAHpnYAPAAP5+wAHlXSTAAHqJAifAAI7bFMAAeoTAhR+sCQAAwAEAwz9JwAB6miEcwAB6poLAAHqewIUcD0gBAAErAMAA/fE+AT0cwAB6wYLAAHq5wIUcD4P9AQABNMAAeskDwAB6ycAAevwAAAACAgLAAHrKAAAAhJtgA8AA/n4AwAB60QAAAICWWwAAXAFKwAB62wEcwAB66xbAAHrjFMAAetvAhR89CACefcABAVBWAgACFMAAeu/AhSCSCQAUwAB69sCFIKIKAADAAQDCAMAA/Yw/PTXAAHs7AAABAGADwAEASgEWwAB7OxTAAHszwIUfPQgAnn3AAQFQNQAAAAEAWwEcwAB7TRTAAHtLwIUg+AkAl1ACAAJqwAB7XWADwAD+fsAB5WcnwACQiwDAAQDDNQAAAAEAWwEcwAB7hBTAAHuCwIUg+AkAl1ACAAJqwAB7lGADwAD+fsAB5fknwACQjADAAQDDNQAAAAEAWwEcwAB7uhTAAHu4wIUg+AkAl1ACAAInwACQjYfAAHvTwIUd7QDAAQDDNQAAAAEAWwEcwAB75BTAAHviwIUg+AkAl1ACAAInwACQwSfAAJDCAMABAMM1AAAAAQBbARzAAHwPFMAAfA3AhSD4CQCXUAIAAifAAJCYJ8AAh9cAwAEAwxQAwIUg+AkAScAAfDkhHMAAfEeBwAB8PcCFG/ZIAQABKwDAAP3xPgE9HMAAfGoWwAB8YhTAAHxawIUfPQgAnn3AAQFQVgIAAifAAJCQHMAAfJKBwAB8iMCFG/aArQAAAADAAP0PAMABAMI/ScAAfKwWwAB8vIPAAHywwIUcKMAAgJ7AAQZnPgE9HMAAfOwWwAB81xTAAHzPwIUfPQgAnn3AAQFQVgIAAifAAJCVHMAAfRiDwAB9DMCFHCjAAJAvwAEAGAAAAADAAQZsAMABAMI/SsAAfTkBHMAAfUgUwAB9QMCFHz0IAIKMAAAAAMABAVUAwAC5e4GvAQFgA8ABBnUBNMAAfV0DwAB9XcAAhCEAAAABAQHAAH1eAAAAg1dgA8ABAVgAAF0DwAC5aAFgA8ABBnUBPg1PwAB9cMAAfXUAAAGBx2EDAWADwAD+flwAA8AAfXrAAH4xAAAAAQEBwAB9ggAAACJgA8AA/n4AAFwBPgI9HMAAfcQcwAB9tRTAAH2swIUjJggAwACNMQAAAADAAQFnga8BAVsBNMAAfckDwAB9ycAAffkAAAABAQHAAH3KAAAAwAB8o2ADwAD1MwAAYAPAAP2hAT4BPRzAAH3lFMAAfd7AhSO/CwDAAH+cAAAAAMAA9ToAwAC5ez0wwAB+BB/AAH4OwAEGmQEAARTAAH4hwIUjbwoAAEnAAH46IiIiIRzAAH5SFsAAfkcUwAB+PsCFIyYIAINYwAEBWkgBAAFqwAB+YGADwAD8l8AAmw4AwAD9uwEcwAB+rxzAAH6QFsAAfokUwAB+gMCFIyYIAJ59wAEBYUsBAAFqwAB+nWADwAD+fsAB5WcAwAEAwEgBAAErAMAA/WUBIRzAAH8DHMAAftUWwAB+zhTAAH7FwIUjJggAnn3AAQFhSwEAAWrAAH7iYAPAAP5+wAHlZwDAAQDAgdYBAAE0wAB/BwPAAH8HwAB/MgAAAAEBAcAAfwgAAACAlmADwAD+fgAAYAPAAPrRAUrAAH8SARzAAH8mHMAAfxgUwAB/EsCFJO0KAJaFAAAAAMAA/qNIAQABJ8AAjJgAwAD+jQDAAP0OASEcwAB/gRzAAH9zHMAAf1IWwAB/ShTAAH9BwIUjJggAnn3AAQFhgJYBAAFqwAB/ZGADwAD+fsAB5fkAwAEAwZaFAAAAAMAA/qNIAQABJ8AAkIwAwAD+jT4BPRzAAH+uFMAAf6nAhSNMCQAgAQABJMAAf+MDJ8AAkMOEwAB/wMCFHFonwACQxAAAP07AAH/7wACAAgAAhFJgA8AA/n4BHMAAgBUWwACADRTAAIAEwIUjJggAnn3AAQFhgJYBAAEnwACQjwDAAQDBScAAgDocwACARRTAAIA+wIUlyQoASAEAASsAwAD+jT4BPRzAAIBdFMAAgFjAhSNMCQAgAQABJ8AAkMUAAD9OwACAr8AAgLQAAMAAbpZgA8ABAeABH8AAgLrAAQHpAAAAAD0cwACAzhTAAIDJwIUmRQsAVgEAARbAAIDqJMAAgOkCh8AAgNTAhR3tasAAgNpgA8AA/n7AAfWSn/PAAP6GAMABAcROwACBBsAAgRUAAMAAkMZdA8AA/TsBYAPAAPyXARzAAIEcFMAAgRfAhSZFCwCCjAAAAADAAQHFTsAAgTXAAIFEAADAAJDHXQPAAP07AWADwAD8lwEewACBU8ABAbUBAAEUwACBZ8CFJckKAABJwACBdiEcwACBkBbAAIGJFMAAgXrAhSarDABhwAD9a0gBAAEWwACBohTAAIGTwIUm4g0AYcAA/WsAwAD9uz4BPRzAAIG5FMAAgbTAhSNMCQAgAQABJ8AAkMgAAD9FwACCBwHAAIIQwACCEgAAYmADwAD8lwGTARzAAIIZFMAAghfAhSd5DgBjAQABFsAAgioUwACCG8CFJqsMAGHAAP1rAMAA/cUBFcAAgjLAhSd5DhzAAIIzFMAAgjLAhSd5DgBkAQABlADAAP29PgFJwACCQSEcwACCVxzAAIJTFMAAgkXAhSarDABLAQABFMAAglTAhSd5DgAAwAD9SkgBAAEcwACCaBTAAIJawIUm4g0ASwEAARTAAIJpwIUneQ4AAMAA/UoAwAD9uz4BPRzAAIJ+FMAAgnnAhSNMCQAgAQABJ8AAkMkAAD9OwACCysAAgtMAAMAAgINgA8AA/n4BHMAAguYWwACC3hTAAILVwIUjJggAnn3AAQFhgJYBAAEnwACQkADAAQDBTsAAgyrAAIMyAADAAJCRYAPAAQcMAR7AAIM+wAEHcQIAAhTAAINZwIUjJggAg8AAg2PAhRwoAErAAIN4ARzAAIOXHMAAg4gUwACDf8CFIyYIAMAAjTEAAAAAwAEBZ4GvAQFgA8ABBnUBNMAAg6cDwACDp8AAhBkAAAABAQHAAIOoAAAAwAB8o2ADwAD1MwAAYAPAAQdXAUrAAIO9AR/AAIPBwAEHjAUABRTAAIPrwIUpGhAAFMAAg/PAhSheDgCDwACD/cCFHCgqFMAAhBHAhSieDwAAAMAAuXsAwAC5ewbAAQdxgvPAAIQrwACETsAAiMEAAcAAkMoAAAABA8AAhGjAAIjBAAAAAgICwACEgwAAAINXYAPAAQFYAMAAhKAAAADAAJA4YAPAAQZdAABgA8ABBwwBPgVOwACEusAAhMoAAMAAkJRgA8AA/n4BHMAAhN0WwACE1YDAAITMwIUpqJ59wAEBYYCWAQABJ8AAkJUAwAEAwUnAAIUFHMAAhRmCwACFCcCFKdVIAQABKwDAAP6NPgE9isAAhSrAhSnVJwA/TsAAhU/AAIVSAADAAJCWYAPAAQDLAR7AAIVgwAEAzwIAAYLAAIVmwIUp1QHAAI0YJ4CnScAAhZIiFsAAhaKBwACFlsCFKbjAAICewAEGZwAcwACFthbAAIWwg8AAha3AhSo/gJbAAQDSSAEAAWrAAIW5YAPAAP5+wAH1MwDAAP6NPgROwACF2sAAhfIAAMAAkCNgA8AA+tEBHMAAhgwWwACGAYPAAIX+wIUqP5q7wAEA04dYAQABasAAhhhgA8AA/n7AAfU9AMAA/YBOwACGPcAAhlUAAMAAkCJgA8AA+tEBHMAAhm8WwACGZIPAAIZhwIUqP5q7wAEA04dYAQABasAAhntgA8AA/n7AAfU4AMAA/YBPwACGncAAhqEAAAHAAJDLYQMBYAPAAP5+YAPAAPyXAAPAAIauwACHdQAAAAEBAcAAhrYAAACClGADwAD+fgAAYAPAAPyXAT4DTsAAhsrAAIbMAACu5WADwAD+fgEcwACG2xbAAIbRg8AAhs7AhSo/mrvAAQDTSwEAAYfAAIbcwIUrgADAAP2BScAAhuscwACG8RTAAIbvwIUrmwgASAEAASsAwAD+jT4BSsAAhwYBasAAhw1gA8AA/JfAAIqoP0rAAIc1AR7AAIdAwAD8xgIAARTAAIdGwIUrmwgAAYGsNMAAh1IDwACHUsAAh2wAAAABAQHAAIdTAAAAiGxgA8AA/n4AAGADwAD8lwFKwACHWQFqwACHWWADwAD8l8AAiqhKwACHfgEfwACHicABBxwEAAAEwACQJBzAAIfShsAAh8XAhStWIAEAAWrAAIfTYAPAAP5+wAH1qQAAwACQJRzAAIgWhsAAiAnAhStWIAEAAWrAAIgXYAPAAP5+wAH1LgAAwACQIoXAAIhRwIUrCsAAkCOEwACIjcCFKsI/SsAAiLIBKwbAAQdygvPAAJEVwACRKMAAkfwAAIH6AAAAAQPAAJEuwACR/AAAAAQBAcAAkTQAAADAAG+9YQMBW1wAA8AAkVUAAACBrGADwAD8jQFqAGADwAD9oXnAAJFjAAAAg45hAwBcAWoAYAPAAP2hecAAkXIAAADAAG+FYAPAAPrRAWoAYAPAAP2heV0DwAC6VQFbAT4BSsAAkYgBHMAAkaIWwACRmxbAAJGPLsAAb9rAAQAYwAEHW4H2wAC6poH6BAABgMAAkanAhS0eA4GsgcAAkcLAhS0wg46CwACR08CFLUnAAG+Fg8AAkerAhS1gwAC6LAbAAQd9gvPAAJIBwACSDsAAkisBAMAAkD8AAAABA8AAkhvAAJIrAAAAAAAAAGADwAD7bQFKwACSHgEWwACSHi7AAJC5wAEAGMABB2QGwAEHiILzwACSMMAAkjnAAJP5AgDAAJA/AAAAAQPAAJJFwACT+QAAAAEBAcAAkk8AAADAAGrPYAPAAPttAABcAT4FScAAkl8WwACSYy7AAJC2wAEAGMABB2FKwACScQA/ScAAkn0hHMAAkowWwACSgS7AAJC6wAEAGMABB2VIAQABKwDAAP3xPRzAAJKgFsAAkpUuwACQusABABjAAQdlnIYAAAAAwAC9Uz89F8AAkq4uwACQucABABiAwACSvsCFLlzAAQdkScAAks0cwACS3xbAAJLRLsAAkLnAAQAYwAEHZEgBAAErAMAA+4pKwACS6AA/PRfAAJL1LsAAkLrAAQAYHsAAkwbAAL1PAgACFsAAkwwuwACQucABABjAAQdkNMAAkxsDwACTG8AAk/QAAAAAAAAAYAPAAP2hAT4DScAAkyYWwACTKi7AAJC2wAEAGMABB2FKwACTOAA/PRzAAJNQFsAAk0YuwACAqsABABjAAQdmVgEAAR/AAJNYwAEG9wAAAAAAwAEHQT0XwACTcS7AAJC6wAEAGB7AAJOCwAC9TwIAAhbAAJOILsAAkLnAAQAYwAEHZDTAAJOXA8AAk5fAAJPsAAAAAAAAAGADwAD9oQE+AT0cwACTwS7AAG8XwAEAGAEAAWrAAJPYYAPAAPyXwAGrvgDAAQd5AMABB2UAwAEHZQbAAQd+gvPAAJP+wACUBsAAlB8BAMAAkEUAAAABA8AAlBHAAJQfAAAAAAAAAGADwAD8lwFKwACUFAEWwACUFC7AAJC1wAEAGMABB2AGwAEHf4LzwACUJMAAlC/AAJRBAQCEiQAAAAEDwACUOsAAlEEAAAAAAAAAYAPAAP5+AUrAAJQ9ASsGwAEHgILzwACURcAAlE3AAJRkAQDAAJBGAAAAAQPAAJRXwACUZAAAAAAAAABgA8AA/JcBSsAAlFoBFsAAlFouwACQt8ABABjAAQdiBsABB4GC88AAlGjAAJRzwACUjgEAwACQRwAAAAEDwACUf8AAlI4AAAAAAAAAYAPAAP5+AUrAAJSCARbAAJSCLsAAkLjAAQAYwAEHYwbAAQdzgvPAAJSTwACUmMAAlLsAAFYAAAABA8AAlJvAAJS7AAAAAQEBwACUnAAAIBJbAABcAT4BPRzAAJSuFsAAlKgul2jAAQAYwAEHXVYBAAGAwACUssCFMXwAwAC6ZAbAAQd0gvPAAJTAwACUxcAAlUAAAMAAfLUAAAABA8AAlNDAAJVAAAAAAQEBwACU2wAAAIQ5XQPAAP07AWADwAD8lwAAXAE+Aj0ewACU9sAA+8MCAAKAwACVA8CFMd8nhDkAPRzAAJUeFsAAlRgul2jAAQAYwAEHXVYBAAEfwACVJsABBrkBAAGAwACVNcCFMd8AAMAAumQGwAEHdYLzwACVRcAAlUrAAJWeAACcRwAAAAEDwACVUsAAlZ4AAAACAQLAAJVTAAAAgcdgA8AA/eQAwACVZgAAAIZUYAPAAP5SAWoAYAPAAP2heQBcAT4BPRzAAJV/FsAAlXkul2jAAQAYwAEHXZxHAgACgMAAlYjAhTJ0gcAAlY/AhTKEAMAAumUGwAEHdoLzwACVo8AAlarAAJXdAACcSQAAAAEDwACVs8AAld0AAAABAQHAAJW7AAAggfZdA8AAuhwBWwAAXQPAALloAVsBSsAAlcYBHMAAlcwWwACVxi6XaMABABjAAQddnEkBAAGAwACV1sCFMv4AwAC6dgbAAQeCgvPAAJXhwACV7MAAlf4BAJ/OAAAAAQPAAJXxwACV/gAAAAAAAABdA8AAuWgBWwFKwACV9AEWwACV+hbAAJX0LpdowAEAGMABB12fzsAAun4GwAEHd4LzwACWA8AAlgrAAJqjAACCjAAAAAEDwACWD8AAmqMAAAACAALAAJYVAAAAgpdgA8AA/JcBagBgA8AA/aF5wACWIgAAAKWmYAPAAP5+AWoAYAPAAP2heQBdA8AAuWgBWwE+BEnAAJYxHsAAljXAAQd7AQABgMAAlkvAhTPHAD4BPTDAAJZaH8AAlmTAAQaZAQABJMAAlpMCJ8AAkM2AwACWjsCFM8cAP0nAAJagHMAAlrIWwACWpC7AAJCkwAEAGMABB2dIAQABKwDAAP27PgI9F8AAlsMuwACQpMABABiAwACW08CFM8fAAQdnPRfAAJbfLsAAkKXAAQAYgcAAlvHAhTPgwAEHaD9JwACXAyEWwACXFBbAAJcILsAAb9rAAQAYwAEHW7mTwAC6rD4CScAAmD8iIRbAAJhQFsAAmEQuwABv2sABABjAAQdbwABvr8AAuq4AIRzAAJhtFsAAmF8unITAAQAYwAEHXEgBAAErAMAA/fE+AT0cwACYmxzAAJiTFsAAmIwWwACYgC7AAG/awAEAGMABB1uB9sAAuqbAAHCBAAFbAADAALo/gfIBAAE0wACYpgPAAJimwACYrwAAAAEBAcAAmKcAAACAtVsAAF0DwAD9bQJbWwFKwACYrQEywACYrVtbAADAALl8P0nAAJjAHMAAmNAWwACYxC7AAJC7wAEAGMABB2lIAQABKwDAAP3xPgE9F8AAmSUuwACQu8ABABgewACZN8AAvU8CAAJqwACZQ2ADwAD7bcAB9bQ0wACZWQPAAJlZwACadgAAAAAAAABgA8AA/aEBPgU9F8AAmaEuwACQt8ABABgWwACZri7AAJCkwAEAGMABB2fAAQdiPRfAAJnHLsAAkLjAAQAYFsAAmdYuwACQpcABABjAAQdowAEHY0nAAJnxIRzAAJoDFsAAmfUunITAAQAYwAEHXEgBAAErAMAA/fE9HMAAmhoWwACaDC6chMABABjAAQdcnIYAAAAAwAC6Vz89HMAAmjoWwACaLi7AAG/awAEAGMABB1uCjAAAAADAALq6PRzAAJpZGsAAmk3AAQdahF4BAAEWwACaYC7AAH/GwAEAGMABAnYAwAD9igDAAQdpPz9KwACaiwEcwACamBbAAJqSLpdowAEAGMABB12CjAAAAADAALp8BsABB4OC88AAmqjAAJq6wACa3AEBwACNOwAAAAEDwACaxMAAmtwAAAAAAAAAYAPAAP5+AUrAAJrHARbAAJrTGsAAmsfAAQdrwACNO8ABASsGwAEHiYLzwACa4cAAmuzAAJszAgHAAI07AAAAAQPAAJr1wACbMwAAAAEBAcAAmv0AAADAAI07YAPAAP5+AABcAT4BPRfAAJsaGsAAmw7AAQdrwACNO4DAAJsmwIU3hsABASsGwAEHeYLzwACbOMAAmz3AAJw+AADAAG8XwAEAGAAAAAEDwACbQ8AAnD4AAAACAALAAJtJAAAAgpdgA8AA/JcBagBgA8AA/aF5wACbVgAAAKWmYAPAAP5+AWoAYAPAAP2heQBcAT4FScAAm2UWwACbaS7AAJC2wAEAGMABB2FKwACbdwA/ScAAm4McwACblRbAAJuHLsAAkKTAAQAYwAEHZ0gBAAErAMAA/bs+Aj0XwACbpi7AAJCkwAEAGIDAAJu2wIU37cABB2c9F8AAm8IuwACQpcABABiBwACb1MCFOAbAAQdoPz0XwACb5i7AAJC2wAEAGCnAAQdhPRzAAJwJFsAAm/8uwACAqsABABjAAQdmwACQsAAAAADAAQdCPRzAAJwoGsAAnBzAAQdahF4BAAEWwACcLy7AAH/GwAEAGMABAnYAwAD9igbAAQeFgvPAAJxDwACcTsAAnHEBAMAAf8jAAQAYAAAAAQPAAJxfwACccQAAAAAAAABgA8AA/n4BSsAAnGIBJ8AAkM4GwAEHhoLzwACcdcAAnIDAAJyfAQDAAH/JwAEAGAAAAAEDwACckcAAnJ8AAAAAAAAAYAPAAP5+AUrAAJyUASfAAJA6BsABB3qC88AAnKTAAJy5wACergAAwAB1G8ABABgAAAABA8AAnMDAAJ6uAAAAAQEBwACcxgAAAJfpYAPAAPrRAABdA8AA/W0CYAPAAP5+WwE+BU7AAJzVwACc2gAAgL1gA8AA/n4BJMAAnQUDFsAAnO8WwACc5xbAAJzfLsAAgIrAAQAYwAEHXsAAdacAlogAJ4LqFsAAnP8WwACc9y7AAICKwAEAGMABB16WiQBOwACdD8AAnREAAIOpXQPAAP1tAmADwAD+flsBMsAAnSRgA8AA/n5bBCe0EhbAAJ0yLsAAf8fAAQAYwAECdyeClBzAAJ1OLsAAf8rAAQAYAQABgMAAnVvAhTm8AMABAn0ngL2BwACdb8CFOd8nwACPOoHAAJ2IwIU530nAAJ2ZgMAAnZ3AhTm8PgFKwACdqgGCwACdscCFOjo/Sz4BPRzAAJ3LgsAAncrAhTo6gL8CAAInwAB8oxzAAJ3gFsAAndguwACAisABABjAAQdewAB1G8ABABgBAAEpAAAAwAD9ggABwACd9VsBwACd/AAAAYC1WwAAPgE9HMAAngiCwACeB8CFOjqAvwIAAifAAHyjMsAAnhVgA8AA/n5gA8AA/n4EJ7QSFsAAniUuwAB/x8ABABjAAQJ3J4KUJ8AAjzsngL0nwACPPCfAAI86J8AAjzwAwAD9gkrAAJ6iAYLAAJ6pwIU6OgbAAQd7gvPAAJ6zwACev8AAoJIAAcAAkM/AAQAYAAAAAQPAAJ7UwACgkgAAAAEBAcAAntkAAACCl2ADwAD8lwAAYAPAAPrRAT4BSsAAnuUBIiEcwACe8YDAAJ7swIU7zUgBAAErAMAA/bsAIiIiIiIcwACfCoDAAJ8FwIU7zWMBAAFqwACfHGADwAD8l8AAv6sAwAD9xQEcwACfP4DAAJ86wIU7zUgBAAFqwACfUmADwAD8l8AB87IAwAD9uwEcwACfdIDAAJ9vwIU7zUgBAAFqwACfh2ADwAD8l8AB87YAwAD9uwEcwACfroDAAJ+pwIU7zUgBAAFqwACfwWADwAD8l8AB87oAwAD9uwEiHMAAn+eAwACf4sCFO82AlwEAAWrAAJ/5YAPAAPyXwAHzzgDAAP3HABzAAKAngMAAoCLAhTvNYwEAAWrAAKA5YAPAAPyXwAHz0gDAAP3FASIcwACgXYDAAKBYwIU7zYFtAQABasAAoHBgA8AA/JfAAfPSAMAA/cgAHMAAoIaAwACggcCFO81jAQABN4u4AMAA/cUAAIUbuACFKXwAhSz0AIUt5ACFLjAAhTA2AIUwggCFMLsAhTEHAIUxUwCFMbMAhTJKAIUy1ACFM0gAhTOdAIU3CgCFN1oAhTe9AIU5BgCFOUkAhTmMAIU7nQCFPTwAAAAWDgTAAQAfgvSXxJfSBsAAkNDAAQAYAGADwAD8lwFql85gA8AA/JfAAYcYBMABACCC9Jfal+8GwACQ0cABABgAYAPAAPyXAWqX5WADwAD8l8ABeXYEwAEAIYL0l/eYCQbAAJDSwAEAGABgA8AA/JcBapgIYAPAAPyXg10EwAEAIoL0mBGYJAbAAJDTwAEAGABgA8AA/JcBapgjYAPAAPyXgVcEwAEAI4LygPOBBQTAAIVuwAEAGABgA8AA/JcBlATAAQAkgvKLqYvJBsAAkNTAAQAYAGADwAD8lwFqi8NgA8AA/JfAAMEuBMABACWC+ID8gRsGwACQ1cABABgAYAPAAP5+AWqBD2ADwAD+fsAB8VIEwAEAJoL5gPWBFwXAAJDWwAEAGABgA8AA/eQBH4EPwAD9+gAAAAAEwAEAJ4L5gSCBOQbAAIVtwAEAGABeAwEAAJclYAPAAP3kAVsBBAFhAwBfAwAAA4GsYAPAAPyNAKSyYAPAAL1uAIjNXQPAAP1tAltbAABfAwAAAWqBMV4DAQAAlyVgA8AA/eQBWwEEAWEDAF8DAAADgaxgA8AA/I0ApLJgA8AAvW4AiM1dA8AA/W0CW1sAAF8DAADAAbvpBMABACiC84D8gTMGwACQ18ABABgAYAPAAP5+AWqBDWADwAD+fsAB9ZIEwAEAKYLzgUKBeQbAAJDYwAEAGABgA8AA/n4BaoFdYAPAAP5+wAH1OATAAQAqgvOBiIG/BsAAkNnAAQAYAGADwAD+fgFqgaNgA8AA/n7AAfU9BMABACuC84HOgf0GwACQ2sABABgAYAPAAP5+AWqB5WADwAD+fsAB9akEwAEALILzggyCOwbAAJDbwAEAGABgA8AA/n4BaoIjYAPAAP5+wAH1LgEGwAEAL4LywAGHP8ABh0bAAYg6AAHAAJDcwAEAGAAAAAEDwAGHVcABiDoAAAAAAAAAYAPAAP5+AT4ETsABh2DAAYdoAACB5WADwAD+fgEawAGHc8AA8n5OwAGHtcABh7sAACdgA8AA/JcBHMABh8WAwAGHvcCFQHSAuwIAAieBahzAAYfnHMABh9qAwAGH0sCFQHSAuwEAASeBagDAAP6RZAEAAZQAwAD9vQDAAP6RPYjAAYfvwIVAdBzAAYgBgMABh/nAhUB0gL4CAAKTgcABiA7AhUCRAMAA/pRKwAGIGAEkwAGIOAMnwACQ3YDAAYgmwIVAdCfAAJDeCoLxgvKC84L0gvWC9oL3gviC+YL6AIVBMwCBgGIAgYQ8AIGE7wCBnOkAgZ9NAIGgjwCBpHoAgaadAIGpngCBrBQAgbdUAIG5zwCBvYQAgb9SAIG/qwCBwFgAgcEFAIHCAgCBwv0AgcPNAIHF4QCBx4AAgd7jAIHxYQCB+cAAggOxAIIjIQCCXH4AgnESAIJ47ACCkJQAgpM+AIKdAACCoSsAgqOnAIKmHACCr2AAgsmYAILK+gCCzJIAgtnAAILe5QCC5p0Agv1/AIMPwwCDEpQAgzn8AINYvACDWZwAg249AIOf5gCDoqMAg7TrAIO31wCD02YAg9wtAIPeWQCD4HQAg+uxAIPuYwCD8q0Ag/aaAIP5mACD+tcAg/30AIQKxQCEC9kAhA1tAIQPiQCEE+8AhBSoAIQVYQCEHF0AhB+KAIRwnQCEfC8AhIahAISLKgCEjnUAhJMzAIScWACEnh0AhKSeAISlogCEplkAhKjeAISpdgCEqoUAhMzeAITNgACEziIAhN+3AITpLQCFAKIAhQ4jAIURCgCFPZ0AAABgAIVAOQCFQTMAAAABAAAC+wAAAAAmc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2Jpbi9kYXJ0MmpzLmRhcnSCky8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gRW50cnlwb2ludCB0byBydW4gdGhlIGNvbXBpbGVyLiBUaGlzIGVudHJ5cG9pbnQgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieQovLy8gZGFydDJqcyBkZXZlbG9wZXJzLiBUbyBydW4gdGhlIGNvbXBpbGVyIHlvdSBub3cgY2FuOgovLy8gICAqIGNhbGwgYHB1YiBnZXRgIGluIHRoZSBwa2cvY29tcGlsZXIgZm9sZGVyLgovLy8gICAqIHNpbXBseSBjYWxsIGBkYXJ0IHBhdGgtdG8tcGtnL2NvbXBpbGVyL2Jpbi9kYXJ0MmpzLmRhcnQgZm9vLmRhcnRgCi8vIFRPRE8oc2lnbXVuZCk6IG1vdmUgYG1haW5gIGhlcmUsIGFuZCBjaGFuZ2Ugb3VyIHNkayBidWlsZCB0b29scyB0byBqdXN0IHVzZQovLyB0aGlzIGVudHJ5cG9pbnQgaW5zdGVhZC4KbGlicmFyeSBjb21waWxlci5iaW4uZGFydDJqczsKCmV4cG9ydCAncGFja2FnZTpjb21waWxlci9zcmMvZGFydDJqcy5kYXJ0JzsKDwBOTjwBTjkzSk8cHgEsASZzZGtyb290Oi9wa2cvY29tcGlsZXIvYmluL2RhcnQyanMuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9kYXJ0MmpzLmRhcnTAAKOaLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jbWRsaW5lOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmOCwgTGluZVNwbGl0dGVyOwppbXBvcnQgJ2RhcnQ6aW8nIHNob3cgZXhpdCwgRmlsZSwgRmlsZU1vZGUsIFBsYXRmb3JtLCBzdGRpbiwgc3RkZXJyOwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZScgc2hvdyBJc29sYXRlOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgYXMgZmU7CgppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CmltcG9ydCAnY29tbWFuZGxpbmVfb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICdmaWxlbmFtZXMuZGFydCc7CmltcG9ydCAnb3B0aW9ucy5kYXJ0JyBzaG93IENvbXBpbGVyT3B0aW9uczsKaW1wb3J0ICdzb3VyY2VfZmlsZV9wcm92aWRlci5kYXJ0JzsKaW1wb3J0ICd1dGlsL2NvbW1hbmRfbGluZS5kYXJ0JzsKaW1wb3J0ICd1dGlsL3V0aWwuZGFydCcgc2hvdyBzdGFja1RyYWNlRmlsZVByZWZpeDsKCmNvbnN0IFN0cmluZyBfZGVmYXVsdFNwZWNpZmljYXRpb25VcmkgPSAnLi4vLi4vLi4vLi4vc2RrL2xpYi9saWJyYXJpZXMuanNvbic7CmNvbnN0IFN0cmluZyBPVVRQVVRfTEFOR1VBR0VfREFSVCA9ICdEYXJ0JzsKCi8vLyBBIHN0cmluZyB0byBpZGVudGlmeSB0aGUgcmV2aXNpb24gb3IgYnVpbGQuCi8vLwovLy8gVGhpcyBJRCBpcyBkaXNwbGF5ZWQgaWYgdGhlIGNvbXBpbGVyIGNyYXNoZXMgYW5kIGluIHZlcmJvc2UgbW9kZSwgYW5kIGlzCi8vLyBhbiBhaWQgaW4gcmVwcm9kdWNpbmcgYnVnIHJlcG9ydHMuCi8vLwovLy8gVGhlIGFjdHVhbCBzdHJpbmcgaXMgcmV3cml0dGVuIGJ5IGEgd3JhcHBlciBzY3JpcHQgd2hlbiBpbmNsdWRlZCBpbiB0aGUgc2RrLgpTdHJpbmcgQlVJTERfSUQgPSBudWxsOwoKLy8vIFRoZSBkYXRhIHBhc3NlZCB0byB0aGUgW0hhbmRsZU9wdGlvbl0gY2FsbGJhY2sgaXMgZWl0aGVyIGEgc2luZ2xlCi8vLyBzdHJpbmcgYXJndW1lbnQsIG9yIHRoZSBhcmd1bWVudHMgaXRlcmF0b3IgZm9yIG11bHRpcGxlIGFyZ3VtZW50cwovLy8gaGFuZGxlcnMuCnR5cGVkZWYgdm9pZCBIYW5kbGVPcHRpb24oTnVsbCBkYXRhKTsKCmNsYXNzIE9wdGlvbkhhbmRsZXIgewogIGZpbmFsIFN0cmluZyBwYXR0ZXJuOwogIGZpbmFsIEhhbmRsZU9wdGlvbiBfaGFuZGxlOwogIGZpbmFsIGJvb2wgbXVsdGlwbGVBcmd1bWVudHM7CgogIHZvaWQgaGFuZGxlKGFyZ3VtZW50KSB7CiAgICAoX2hhbmRsZSBhcyBkeW5hbWljKShhcmd1bWVudCk7CiAgfQoKICBPcHRpb25IYW5kbGVyKHRoaXMucGF0dGVybiwgdGhpcy5faGFuZGxlLCB7dGhpcy5tdWx0aXBsZUFyZ3VtZW50czogZmFsc2V9KTsKfQoKLy8vIEV4dHJhY3QgdGhlIHBhcmFtZXRlciBvZiBhbiBvcHRpb24uCi8vLwovLy8gRm9yIGV4YW1wbGUsIGluIFsnLS1vdXQ9Zmlzay5qcyddIGFuZCBbJy1vaGVzdC5qcyddLCB0aGUgcGFyYW1ldGVycwovLy8gYXJlIFsnZmlzay5qcyddIGFuZCBbJ2hlc3QuanMnXSwgcmVzcGVjdGl2ZWx5LgpTdHJpbmcgZXh0cmFjdFBhcmFtZXRlcihTdHJpbmcgYXJndW1lbnQsIHtib29sIGlzT3B0aW9uYWxBcmd1bWVudDogZmFsc2V9KSB7CiAgLy8gbVswXSBpcyB0aGUgZW50aXJlIG1hdGNoICh3aGljaCB3aWxsIGJlIGVxdWFsIHRvIGFyZ3VtZW50KS4gbVsxXQogIC8vIGlzIHNvbWV0aGluZyBsaWtlICItbyIgb3IgIi0tb3V0PSIsIGFuZCBtWzJdIGlzIHRoZSBwYXJhbWV0ZXIuCiAgTWF0Y2ggbSA9IG5ldyBSZWdFeHAoJ14oLVthLXpBLVpdfC0tLis9KSguKiknKS5maXJzdE1hdGNoKGFyZ3VtZW50KTsKICBpZiAobSA9PSBudWxsKSB7CiAgICBpZiAoaXNPcHRpb25hbEFyZ3VtZW50KSByZXR1cm4gbnVsbDsKICAgIGhlbHBBbmRGYWlsKCdVbmtub3duIG9wdGlvbiAiJGFyZ3VtZW50Ii4nKTsKICB9CiAgcmV0dXJuIG1bMl07Cn0KClN0cmluZyBleHRyYWN0UGF0aChTdHJpbmcgYXJndW1lbnQsIHtib29sIGlzRGlyZWN0b3J5OiB0cnVlfSkgewogIFN0cmluZyBwYXRoID0gbmF0aXZlVG9VcmlQYXRoKGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpKTsKICByZXR1cm4gIXBhdGguZW5kc1dpdGgoIi8iKSAmJiBpc0RpcmVjdG9yeSA/ICIkcGF0aC8iIDogcGF0aDsKfQoKdm9pZCBwYXJzZUNvbW1hbmRMaW5lKExpc3Q8T3B0aW9uSGFuZGxlcj4gaGFuZGxlcnMsIExpc3Q8U3RyaW5nPiBhcmd2KSB7CiAgLy8gVE9ETyhhaGUpOiBVc2UgLi4vLi4vYXJncy9hcmdzLmRhcnQgZm9yIHBhcnNpbmcgb3B0aW9ucyBpbnN0ZWFkLgogIHZhciBwYXR0ZXJucyA9IDxTdHJpbmc+W107CiAgZm9yIChPcHRpb25IYW5kbGVyIGhhbmRsZXIgaW4gaGFuZGxlcnMpIHsKICAgIHBhdHRlcm5zLmFkZChoYW5kbGVyLnBhdHRlcm4pOwogIH0KICB2YXIgcGF0dGVybiA9IG5ldyBSZWdFeHAoJ14oJHtwYXR0ZXJucy5qb2luKCIpXCR8XigiKX0pXCQnKTsKCiAgSXRlcmF0b3I8U3RyaW5nPiBhcmd1bWVudHMgPSBhcmd2Lml0ZXJhdG9yOwogIE9VVEVSOgogIHdoaWxlIChhcmd1bWVudHMubW92ZU5leHQoKSkgewogICAgU3RyaW5nIGFyZ3VtZW50ID0gYXJndW1lbnRzLmN1cnJlbnQ7CiAgICBNYXRjaCBtYXRjaCA9IHBhdHRlcm4uZmlyc3RNYXRjaChhcmd1bWVudCk7CiAgICBhc3NlcnQobWF0Y2guZ3JvdXBDb3VudCA9PSBoYW5kbGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7IGkrKykgewogICAgICBpZiAobWF0Y2hbaSArIDFdICE9IG51bGwpIHsKICAgICAgICBPcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBoYW5kbGVyc1tpXTsKICAgICAgICBpZiAoaGFuZGxlci5tdWx0aXBsZUFyZ3VtZW50cykgewogICAgICAgICAgaGFuZGxlci5oYW5kbGUoYXJndW1lbnRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGFuZGxlci5oYW5kbGUoYXJndW1lbnQpOwogICAgICAgIH0KICAgICAgICBjb250aW51ZSBPVVRFUjsKICAgICAgfQogICAgfQogICAgdGhyb3cgJ0ludGVybmFsIGVycm9yOiAiJGFyZ3VtZW50IiBkaWQgbm90IG1hdGNoJzsKICB9Cn0KCkZvcm1hdHRpbmdEaWFnbm9zdGljSGFuZGxlciBkaWFnbm9zdGljSGFuZGxlcjsKCkZ1dHVyZTxhcGkuQ29tcGlsYXRpb25SZXN1bHQ+IGNvbXBpbGUoTGlzdDxTdHJpbmc+IGFyZ3YsCiAgICB7ZmUuSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZX0pIHsKICBTdG9wd2F0Y2ggd2FsbGNsb2NrID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwogIHN0YWNrVHJhY2VGaWxlUHJlZml4ID0gJyRjdXJyZW50RGlyZWN0b3J5JzsKICBVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSA9CiAgICAgIGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnbGliL2xpYnJhcmllcy5qc29uJyk7CiAgYm9vbCBvdXRwdXRTcGVjaWZpZWQgPSBmYWxzZTsKICBVcmkgb3V0OwogIFVyaSBzb3VyY2VNYXBPdXQ7CiAgVXJpIHJlYWREYXRhVXJpOwogIFVyaSB3cml0ZURhdGFVcmk7CiAgVXJpIHJlYWRDb2RlZ2VuVXJpOwogIFVyaSB3cml0ZUNvZGVnZW5Vcmk7CiAgaW50IGNvZGVnZW5TaGFyZDsKICBpbnQgY29kZWdlblNoYXJkczsKICBMaXN0PFN0cmluZz4gYmF6ZWxQYXRoczsKICBVcmkgcGFja2FnZUNvbmZpZyA9IG51bGw7CiAgVXJpIHBhY2thZ2VSb290ID0gbnVsbDsKICBMaXN0PFN0cmluZz4gb3B0aW9ucyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICBib29sIHdhbnRIZWxwID0gZmFsc2U7CiAgYm9vbCB3YW50VmVyc2lvbiA9IGZhbHNlOwogIGJvb2wgdHJ1c3RUeXBlQW5ub3RhdGlvbnMgPSBmYWxzZTsKICBib29sIGNoZWNrZWRNb2RlID0gZmFsc2U7CiAgYm9vbCBzdHJvbmdNb2RlID0gdHJ1ZTsKICBMaXN0PFN0cmluZz4gaGludHMgPSA8U3RyaW5nPltdOwogIGJvb2wgdmVyYm9zZTsKICBib29sIHRocm93T25FcnJvcjsKICBpbnQgdGhyb3dPbkVycm9yQ291bnQ7CiAgYm9vbCBzaG93V2FybmluZ3M7CiAgYm9vbCBzaG93SGludHM7CiAgYm9vbCBlbmFibGVDb2xvcnM7CiAgaW50IG9wdGltaXphdGlvbkxldmVsID0gbnVsbDsKICBVcmkgcGxhdGZvcm1CaW5hcmllczsKICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50ID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICBSZWFkU3RyYXRlZ3kgcmVhZFN0cmF0ZWd5ID0gUmVhZFN0cmF0ZWd5LmZyb21EYXJ0OwogIFdyaXRlU3RyYXRlZ3kgd3JpdGVTdHJhdGVneSA9IFdyaXRlU3RyYXRlZ3kudG9KczsKCiAgdm9pZCBwYXNzVGhyb3VnaChTdHJpbmcgYXJndW1lbnQpID0+IG9wdGlvbnMuYWRkKGFyZ3VtZW50KTsKICB2b2lkIGlnbm9yZU9wdGlvbihTdHJpbmcgYXJndW1lbnQpIHt9CgogIGlmIChCVUlMRF9JRCAhPSBudWxsKSB7CiAgICBwYXNzVGhyb3VnaCgiLS1idWlsZC1pZD0kQlVJTERfSUQiKTsKICB9CgogIHZvaWQgc2V0TGlicmFyeVNwZWNpZmljYXRpb25VcmkoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID0KICAgICAgICBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogIH0KCiAgdm9pZCBzZXRQYWNrYWdlUm9vdChTdHJpbmcgYXJndW1lbnQpIHsKICAgIHBhY2thZ2VSb290ID0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKGV4dHJhY3RQYXRoKGFyZ3VtZW50KSk7CiAgfQoKICB2b2lkIHNldFBhY2thZ2VDb25maWcoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBwYWNrYWdlQ29uZmlnID0KICAgICAgICBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogIH0KCiAgdm9pZCBzZXRPdXRwdXQoSXRlcmF0b3I8U3RyaW5nPiBhcmd1bWVudHMpIHsKICAgIG91dHB1dFNwZWNpZmllZCA9IHRydWU7CiAgICBTdHJpbmcgcGF0aDsKICAgIGlmIChhcmd1bWVudHMuY3VycmVudCA9PSAnLW8nKSB7CiAgICAgIGlmICghYXJndW1lbnRzLm1vdmVOZXh0KCkpIHsKICAgICAgICBoZWxwQW5kRmFpbCgnRXJyb3I6IE1pc3NpbmcgZmlsZSBhZnRlciAtbyBvcHRpb24uJyk7CiAgICAgIH0KICAgICAgcGF0aCA9IGFyZ3VtZW50cy5jdXJyZW50OwogICAgfSBlbHNlIHsKICAgICAgcGF0aCA9IGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnRzLmN1cnJlbnQpOwogICAgfQogICAgb3V0ID0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKG5hdGl2ZVRvVXJpUGF0aChwYXRoKSk7CiAgfQoKICB2b2lkIHNldE9wdGltaXphdGlvbkxldmVsKFN0cmluZyBhcmd1bWVudCkgewogICAgaW50IHZhbHVlID0gaW50LnRyeVBhcnNlKGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpKTsKICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDQpIHsKICAgICAgaGVscEFuZEZhaWwoIkVycm9yOiBVbnN1cHBvcnRlZCBvcHRpbWl6YXRpb24gbGV2ZWwgJyRhcmd1bWVudCcsICIKICAgICAgICAgICJzdXBwb3J0ZWQgbGV2ZWxzIGFyZTogMCwgMSwgMiwgMywgNCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBvcHRpbWl6YXRpb25MZXZlbCA9IHZhbHVlOwogIH0KCiAgdm9pZCBzZXRPdXRwdXRUeXBlKFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKGFyZ3VtZW50ID09ICctLW91dHB1dC10eXBlPWRhcnQnIHx8CiAgICAgICAgYXJndW1lbnQgPT0gJy0tb3V0cHV0LXR5cGU9ZGFydC1tdWx0aScpIHsKICAgICAgaGVscEFuZEZhaWwoCiAgICAgICAgICAiLS1vdXRwdXQtdHlwZT1kYXJ0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEl0IHdhcyBkZXByZWNhdGVkICIKICAgICAgICAgICJzaW5jZSBEYXJ0IDEuMTEgYW5kIHJlbW92ZWQgaW4gRGFydCAxLjE5LiIpOwogICAgfQogIH0KCiAgc2V0U3RyaXAoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBoZWxwQW5kRmFpbCgiT3B0aW9uICctLWZvcmNlLXN0cmlwJyBpcyBub3QgaW4gdXNlIG5vdyB0aGF0IgogICAgICAgICItLW91dHB1dC10eXBlPWRhcnQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTsKICB9CgogIHZvaWQgc2V0QmF6ZWxQYXRocyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIFN0cmluZyBwYXRocyA9IGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpOwogICAgYmF6ZWxQYXRocyA9IDxTdHJpbmc+W10uLmFkZEFsbChwYXRocy5zcGxpdCgnLCcpKTsKICB9CgogIFN0cmluZyBnZXREZXBzT3V0cHV0KEl0ZXJhYmxlPFVyaT4gc291cmNlRmlsZXMpIHsKICAgIHZhciBmaWxlbmFtZXMgPSBzb3VyY2VGaWxlcy5tYXAoKHVyaSkgPT4gJyR1cmknKS50b0xpc3QoKTsKICAgIGZpbGVuYW1lcy5zb3J0KCk7CiAgICByZXR1cm4gZmlsZW5hbWVzLmpvaW4oIlxuIik7CiAgfQoKICB2b2lkIHNldEFsbG93TmF0aXZlRXh0ZW5zaW9ucyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIGhlbHBBbmRGYWlsKCJPcHRpb24gJyR7RmxhZ3MuYWxsb3dOYXRpdmVFeHRlbnNpb25zfScgaXMgbm90IHN1cHBvcnRlZC4iKTsKICB9CgogIHZvaWQgc2V0VmVyYm9zZShfKSB7CiAgICB2ZXJib3NlID0gdHJ1ZTsKICAgIHBhc3NUaHJvdWdoKCctLXZlcmJvc2UnKTsKICB9CgogIHZvaWQgc2V0VHJ1c3RUeXBlQW5ub3RhdGlvbnMoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICB0cnVzdFR5cGVBbm5vdGF0aW9ucyA9IHRydWU7CiAgfQoKICB2b2lkIHNldENoZWNrZWRNb2RlKFN0cmluZyBhcmd1bWVudCkgewogICAgY2hlY2tlZE1vZGUgPSB0cnVlOwogICAgcGFzc1Rocm91Z2goYXJndW1lbnQpOwogIH0KCiAgdm9pZCBhZGRJbkVudmlyb25tZW50KFN0cmluZyBhcmd1bWVudCkgewogICAgaW50IGVxSW5kZXggPSBhcmd1bWVudC5pbmRleE9mKCc9Jyk7CiAgICBTdHJpbmcgbmFtZSA9IGFyZ3VtZW50LnN1YnN0cmluZygyLCBlcUluZGV4KTsKICAgIFN0cmluZyB2YWx1ZSA9IGFyZ3VtZW50LnN1YnN0cmluZyhlcUluZGV4ICsgMSk7CiAgICBlbnZpcm9ubWVudFtuYW1lXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBzZXRDYXRlZ29yaWVzKFN0cmluZyBhcmd1bWVudCkgewogICAgTGlzdDxTdHJpbmc+IGNhdGVnb3JpZXMgPSBleHRyYWN0UGFyYW1ldGVyKGFyZ3VtZW50KS5zcGxpdCgnLCcpOwogICAgYm9vbCBpc1NlcnZlck1vZGUgPSBjYXRlZ29yaWVzLmxlbmd0aCA9PSAxICYmIGNhdGVnb3JpZXMuc2luZ2xlID09ICJTZXJ2ZXIiOwogICAgaWYgKGlzU2VydmVyTW9kZSkgewogICAgICBoaW50cy5hZGQoIlRoZSAtLWNhdGVnb3JpZXMgZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIGRlbGV0ZWQgaW4gYSAiCiAgICAgICAgICAiZnV0dXJlIHJlbGVhc2UsIHBsZWFzZSB1c2UgJyR7RmxhZ3Muc2VydmVyTW9kZX0nIGluc3RlYWQgb2YgIgogICAgICAgICAgIictLWNhdGVnb3JpZXM9U2VydmVyJy4iKTsKICAgICAgcGFzc1Rocm91Z2goRmxhZ3Muc2VydmVyTW9kZSk7CiAgICB9IGVsc2UgewogICAgICBoaW50cy5hZGQoCiAgICAgICAgICAiVGhlIC0tY2F0ZWdvcmllcyBmbGFnIGlzIGRlcHJlY2F0ZWQsIHNlZSB0aGUgdXNhZ2UgZm9yIGRldGFpbHMuIik7CiAgICB9CiAgfQoKICB2b2lkIHNldFBsYXRmb3JtQmluYXJpZXMoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBwbGF0Zm9ybUJpbmFyaWVzID0KICAgICAgICBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiB0cnVlKSk7CiAgfQoKICB2b2lkIHNldFJlYWREYXRhKFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKGFyZ3VtZW50ICE9IEZsYWdzLnJlYWREYXRhKSB7CiAgICAgIHJlYWREYXRhVXJpID0gbmF0aXZlVG9VcmkoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogICAgfQogICAgaWYgKHJlYWRTdHJhdGVneSAhPSBSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW4pIHsKICAgICAgcmVhZFN0cmF0ZWd5ID0gUmVhZFN0cmF0ZWd5LmZyb21EYXRhOwogICAgfQogIH0KCiAgdm9pZCBzZXREaWxsRGVwZW5kZW5jaWVzKFN0cmluZyBhcmd1bWVudCkgewogICAgU3RyaW5nIGRlcGVuZGVuY2llcyA9IGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpOwogICAgU3RyaW5nIHVyaURlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcy5zcGxpdE1hcEpvaW4oJywnLAogICAgICAgIG9uTWF0Y2g6IChfKSA9PiAnLCcsIG9uTm9uTWF0Y2g6IChwKSA9PiAnJHtuYXRpdmVUb1VyaShwKX0nKTsKICAgIG9wdGlvbnMuYWRkKCcke0ZsYWdzLmRpbGxEZXBlbmRlbmNpZXN9PSR7dXJpRGVwZW5kZW5jaWVzfScpOwogIH0KCiAgdm9pZCBzZXRDZmVPbmx5KFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0RhdGEpIHsKICAgICAgZmFpbCgiQ2Fubm90IHVzZSAke0ZsYWdzLmNmZU9ubHl9ICIKICAgICAgICAgICJhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LiIpOwogICAgfQogICAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0NvZGVnZW4pIHsKICAgICAgZmFpbCgiQ2Fubm90IHVzZSAke0ZsYWdzLmNmZU9ubHl9ICIKICAgICAgICAgICJhbmQgd3JpdGUgc2VyaWFsaXplZCBjb2RlZ2VuIHNpbXVsdGFuZW91c2x5LiIpOwogICAgfQogICAgd3JpdGVTdHJhdGVneSA9IFdyaXRlU3RyYXRlZ3kudG9LZXJuZWw7CiAgfQoKICB2b2lkIHNldFJlYWRDb2RlZ2VuKFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKGFyZ3VtZW50ICE9IEZsYWdzLnJlYWRDb2RlZ2VuKSB7CiAgICAgIHJlYWRDb2RlZ2VuVXJpID0gbmF0aXZlVG9VcmkoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogICAgfQogICAgcmVhZFN0cmF0ZWd5ID0gUmVhZFN0cmF0ZWd5LmZyb21Db2RlZ2VuOwogIH0KCiAgdm9pZCBzZXRXcml0ZURhdGEoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBpZiAod3JpdGVTdHJhdGVneSA9PSBXcml0ZVN0cmF0ZWd5LnRvS2VybmVsKSB7CiAgICAgIGZhaWwoIkNhbm5vdCB1c2UgJHtGbGFncy5jZmVPbmx5fSAiCiAgICAgICAgICAiYW5kIHdyaXRlIHNlcmlhbGl6ZWQgZGF0YSBzaW11bHRhbmVvdXNseS4iKTsKICAgIH0KICAgIGlmICh3cml0ZVN0cmF0ZWd5ID09IFdyaXRlU3RyYXRlZ3kudG9Db2RlZ2VuKSB7CiAgICAgIGZhaWwoIkNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGRhdGEgYW5kIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuIik7CiAgICB9CiAgICBpZiAoYXJndW1lbnQgIT0gRmxhZ3Mud3JpdGVEYXRhKSB7CiAgICAgIHdyaXRlRGF0YVVyaSA9IG5hdGl2ZVRvVXJpKGV4dHJhY3RQYXRoKGFyZ3VtZW50LCBpc0RpcmVjdG9yeTogZmFsc2UpKTsKICAgIH0KICAgIHdyaXRlU3RyYXRlZ3kgPSBXcml0ZVN0cmF0ZWd5LnRvRGF0YTsKICB9CgogIHZvaWQgc2V0V3JpdGVDb2RlZ2VuKFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0tlcm5lbCkgewogICAgICBmYWlsKCJDYW5ub3QgdXNlICR7RmxhZ3MuY2ZlT25seX0gIgogICAgICAgICAgImFuZCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuIik7CiAgICB9CiAgICBpZiAod3JpdGVTdHJhdGVneSA9PSBXcml0ZVN0cmF0ZWd5LnRvRGF0YSkgewogICAgICBmYWlsKCJDYW5ub3Qgd3JpdGUgc2VyaWFsaXplZCBkYXRhIGFuZCBjb2RlZ2VuIGRhdGEgc2ltdWx0YW5lb3VzbHkuIik7CiAgICB9CiAgICBpZiAoYXJndW1lbnQgIT0gRmxhZ3Mud3JpdGVDb2RlZ2VuKSB7CiAgICAgIHdyaXRlQ29kZWdlblVyaSA9IG5hdGl2ZVRvVXJpKGV4dHJhY3RQYXRoKGFyZ3VtZW50LCBpc0RpcmVjdG9yeTogZmFsc2UpKTsKICAgIH0KICAgIHdyaXRlU3RyYXRlZ3kgPSBXcml0ZVN0cmF0ZWd5LnRvQ29kZWdlbjsKICB9CgogIHZvaWQgc2V0Q29kZWdlblNoYXJkKFN0cmluZyBhcmd1bWVudCkgewogICAgY29kZWdlblNoYXJkID0gaW50LnBhcnNlKGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpKTsKICB9CgogIHZvaWQgc2V0Q29kZWdlblNoYXJkcyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIGNvZGVnZW5TaGFyZHMgPSBpbnQucGFyc2UoZXh0cmFjdFBhcmFtZXRlcihhcmd1bWVudCkpOwogIH0KCiAgdm9pZCBzZXREdW1wSW5mbyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIHBhc3NUaHJvdWdoKEZsYWdzLmR1bXBJbmZvKTsKICAgIGlmIChhcmd1bWVudCA9PSBGbGFncy5kdW1wSW5mbyB8fCBhcmd1bWVudCA9PSAiJHtGbGFncy5kdW1wSW5mb309anNvbiIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGFyZ3VtZW50ID09ICIke0ZsYWdzLmR1bXBJbmZvfT1iaW5hcnkiKSB7CiAgICAgIHBhc3NUaHJvdWdoKGFyZ3VtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaGVscEFuZEZhaWwoIkVycm9yOiBVbnN1cHBvcnRlZCBkdW1wLWluZm8gZm9ybWF0ICckYXJndW1lbnQnLCAiCiAgICAgICAgInN1cHBvcnRlZCBmb3JtYXRzIGFyZToganNvbiBvciBiaW5hcnkiKTsKICB9CgogIHZvaWQgaGFuZGxlVGhyb3dPbkVycm9yKFN0cmluZyBhcmd1bWVudCkgewogICAgdGhyb3dPbkVycm9yID0gdHJ1ZTsKICAgIFN0cmluZyBwYXJhbWV0ZXIgPSBleHRyYWN0UGFyYW1ldGVyKGFyZ3VtZW50LCBpc09wdGlvbmFsQXJndW1lbnQ6IHRydWUpOwogICAgaWYgKHBhcmFtZXRlciAhPSBudWxsKSB7CiAgICAgIHZhciBjb3VudCA9IGludC5wYXJzZShwYXJhbWV0ZXIpOwogICAgICB0aHJvd09uRXJyb3JDb3VudCA9IGNvdW50OwogICAgfQogIH0KCiAgdm9pZCBoYW5kbGVTaG9ydE9wdGlvbnMoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICB2YXIgc2hvcnRPcHRpb25zID0gYXJndW1lbnQuc3Vic3RyaW5nKDEpLnNwbGl0KCIiKTsKICAgIGZvciAodmFyIHNob3J0T3B0aW9uIGluIHNob3J0T3B0aW9ucykgewogICAgICBzd2l0Y2ggKHNob3J0T3B0aW9uKSB7CiAgICAgICAgY2FzZSAndic6CiAgICAgICAgICBzZXRWZXJib3NlKG51bGwpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaCc6CiAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICB3YW50SGVscCA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdjJzoKICAgICAgICAgIHNldENoZWNrZWRNb2RlKEZsYWdzLmVuYWJsZUNoZWNrZWRNb2RlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ20nOgogICAgICAgICAgcGFzc1Rocm91Z2goRmxhZ3MubWluaWZ5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyAnSW50ZXJuYWwgZXJyb3I6ICIkc2hvcnRPcHRpb24iIGRpZCBub3QgbWF0Y2gnOwogICAgICB9CiAgICB9CiAgfQoKICBMaXN0PFN0cmluZz4gYXJndW1lbnRzID0gPFN0cmluZz5bXTsKICBMaXN0PE9wdGlvbkhhbmRsZXI+IGhhbmRsZXJzID0gPE9wdGlvbkhhbmRsZXI+WwogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy1bY2h2bT9dKycsIGhhbmRsZVNob3J0T3B0aW9ucyksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS10aHJvdy1vbi1lcnJvcig/Oj1bMC05XSspPycsIGhhbmRsZVRocm93T25FcnJvciksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5zdXBwcmVzc1dhcm5pbmdzLCAoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICAgIHNob3dXYXJuaW5ncyA9IGZhbHNlOwogICAgICBwYXNzVGhyb3VnaChhcmd1bWVudCk7CiAgICB9KSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmZhdGFsV2FybmluZ3MsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnN1cHByZXNzSGludHMsIChTdHJpbmcgYXJndW1lbnQpIHsKICAgICAgc2hvd0hpbnRzID0gZmFsc2U7CiAgICAgIHBhc3NUaHJvdWdoKGFyZ3VtZW50KTsKICAgIH0pLAogICAgLy8gVE9ETyhzaWdtdW5kKTogcmVtb3ZlIGVudGlyZWx5IGFmdGVyIERhcnQgMS4yMAogICAgbmV3IE9wdGlvbkhhbmRsZXIoCiAgICAgICAgJy0tb3V0cHV0LXR5cGU9ZGFydHwtLW91dHB1dC10eXBlPWRhcnQtbXVsdGl8LS1vdXRwdXQtdHlwZT1qcycsCiAgICAgICAgc2V0T3V0cHV0VHlwZSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS11c2Uta2VybmVsJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnBsYXRmb3JtQmluYXJpZXMsIHNldFBsYXRmb3JtQmluYXJpZXMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3Mubm9GcmVxdWVuY3lCYXNlZE1pbmlmaWNhdGlvbiwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudmVyYm9zZSwgc2V0VmVyYm9zZSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5wcm9ncmVzcywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudmVyc2lvbiwgKF8pID0+IHdhbnRWZXJzaW9uID0gdHJ1ZSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1saWJyYXJ5LXJvb3Q9LisnLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tbGlicmFyaWVzLXNwZWM9LisnLCBzZXRMaWJyYXJ5U3BlY2lmaWNhdGlvblVyaSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignJHtGbGFncy5kaWxsRGVwZW5kZW5jaWVzfT0uKycsIHNldERpbGxEZXBlbmRlbmNpZXMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJyR7RmxhZ3MucmVhZERhdGF9fCR7RmxhZ3MucmVhZERhdGF9PS4rJywgc2V0UmVhZERhdGEpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJyR7RmxhZ3Mud3JpdGVEYXRhfXwke0ZsYWdzLndyaXRlRGF0YX09LisnLCBzZXRXcml0ZURhdGEpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoCiAgICAgICAgJyR7RmxhZ3MucmVhZENvZGVnZW59fCR7RmxhZ3MucmVhZENvZGVnZW59PS4rJywgc2V0UmVhZENvZGVnZW4pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoCiAgICAgICAgJyR7RmxhZ3Mud3JpdGVDb2RlZ2VufXwke0ZsYWdzLndyaXRlQ29kZWdlbn09LisnLCBzZXRXcml0ZUNvZGVnZW4pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJyR7RmxhZ3MuY29kZWdlblNoYXJkfT0uKycsIHNldENvZGVnZW5TaGFyZCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignJHtGbGFncy5jb2RlZ2VuU2hhcmRzfT0uKycsIHNldENvZGVnZW5TaGFyZHMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuY2ZlT25seSwgc2V0Q2ZlT25seSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5kZWJ1Z0dsb2JhbEluZmVyZW5jZSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tb3V0PS4rfC1vLionLCBzZXRPdXRwdXQsIG11bHRpcGxlQXJndW1lbnRzOiB0cnVlKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctTy4qJywgc2V0T3B0aW1pemF0aW9uTGV2ZWwpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuYWxsb3dNb2NrQ29tcGlsYXRpb24sIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5mYXN0U3RhcnR1cCwgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmdlbmVyaWNNZXRob2RTeW50YXgsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5pbml0aWFsaXppbmdGb3JtYWxBY2Nlc3MsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5taW5pZnksIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLm5vTWluaWZ5LCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5wcmVzZXJ2ZVVyaXMsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1mb3JjZS1zdHJpcD0uKicsIHNldFN0cmlwKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmRpc2FibGVEaWFnbm9zdGljQ29sb3JzLCAoXykgewogICAgICBlbmFibGVDb2xvcnMgPSBmYWxzZTsKICAgIH0pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZW5hYmxlRGlhZ25vc3RpY0NvbG9ycywgKF8pIHsKICAgICAgZW5hYmxlQ29sb3JzID0gdHJ1ZTsKICAgIH0pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tZW5hYmxlW18tXWNoZWNrZWRbXy1dbW9kZXwtLWNoZWNrZWQnLAogICAgICAgIChfKSA9PiBzZXRDaGVja2VkTW9kZShGbGFncy5lbmFibGVDaGVja2VkTW9kZSkpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZW5hYmxlQXNzZXJ0cywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudHJ1c3RUeXBlQW5ub3RhdGlvbnMsIHNldFRydXN0VHlwZUFubm90YXRpb25zKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnRydXN0UHJpbWl0aXZlcywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKHInLS1oZWxwfC9cP3wvaCcsIChfKSA9PiB3YW50SGVscCA9IHRydWUpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tcGFja2FnZXM9LisnLCBzZXRQYWNrYWdlQ29uZmlnKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLXBhY2thZ2Utcm9vdD0uK3wtcC4rJywgc2V0UGFja2FnZVJvb3QpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3Mubm9Tb3VyY2VNYXBzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihPcHRpb24ucmVzb2x1dGlvbklucHV0LCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoT3B0aW9uLmJhemVsUGF0aHMsIHNldEJhemVsUGF0aHMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MucmVzb2x2ZU9ubHksIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5kaXNhYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpcywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tY2F0ZWdvcmllcz0uKicsIHNldENhdGVnb3JpZXMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3Muc2VydmVyTW9kZSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZGlzYWJsZUlubGluaW5nLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5kaXNhYmxlUHJvZ3JhbVNwbGl0LCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5kaXNhYmxlVHlwZUluZmVyZW5jZSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudXNlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4sIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmRpc2FibGVSdGlPcHRpbWl6YXRpb24sIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnRlcnNlLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1kZWZlcnJlZC1tYXA9LisnLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5uZXdEZWZlcnJlZFNwbGl0LCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5yZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignJHtGbGFncy5kdW1wSW5mb318JHtGbGFncy5kdW1wSW5mb309LisnLCBzZXREdW1wSW5mbyksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1kaXNhbGxvdy11bnNhZmUtZXZhbCcsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihPcHRpb24uc2hvd1BhY2thZ2VXYXJuaW5ncywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoT3B0aW9uLmVuYWJsZUxhbmd1YWdlRXhwZXJpbWVudHMsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tZW5hYmxlLWV4cGVyaW1lbnRhbC1taXJyb3JzJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmVuYWJsZUFzc2VydE1lc3NhZ2UsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLXN0cm9uZycsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5wcmV2aWV3RGFydDIsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5vbWl0SW1wbGljaXRDaGVja3MsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLm9taXRBc0Nhc3RzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5sYXhSdW50aW1lVHlwZVRvU3RyaW5nLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5iZW5jaG1hcmtpbmdQcm9kdWN0aW9uLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5iZW5jaG1hcmtpbmdFeHBlcmltZW50LCBwYXNzVGhyb3VnaCksCgogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHJlbW92ZSBjb25kaXRpb25hbCBkaXJlY3RpdmVzIGZsYWcuCiAgICAvLyBXZSBkb24ndCBwcm92aWRlIHRoZSBpbmZvLW1lc3NhZ2UgeWV0LCBzaW5jZSB3ZSBoYXZlbid0IHB1YmxpY2x5CiAgICAvLyBsYXVuY2hlZCB0aGUgZmVhdHVyZSB5ZXQuCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5jb25kaXRpb25hbERpcmVjdGl2ZXMsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1lbmFibGUtYXN5bmMnLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tZW5hYmxlLW51bGwtYXdhcmUtb3BlcmF0b3JzJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLWVuYWJsZS1lbnVtJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmFsbG93TmF0aXZlRXh0ZW5zaW9ucywgc2V0QWxsb3dOYXRpdmVFeHRlbnNpb25zKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmdlbmVyYXRlQ29kZVdpdGhDb21waWxlVGltZUVycm9ycywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnVzZU11bHRpU291cmNlSW5mbywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudXNlTmV3U291cmNlSW5mbywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudGVzdE1vZGUsIHBhc3NUaHJvdWdoKSwKCiAgICAvLyBFeHBlcmltZW50YWwgZmVhdHVyZXMuCiAgICAvLyBXZSBkb24ndCBwcm92aWRlIGRvY3VtZW50YXRpb24gZm9yIHRoZXNlIHlldC4KICAgIC8vIFRPRE8oMjk1NzQpOiBwcm92aWRlIGRvY3VtZW50YXRpb24gd2hlbiB0aGlzIGZlYXR1cmUgaXMgc3VwcG9ydGVkLgogICAgLy8gVE9ETygyOTU3NCk6IHByb3ZpZGUgYSB3YXJuaW5nL2hpbnQvZXJyb3IsIHdoZW4gcHJvZmlsZS1iYXNlZCBkYXRhIGlzCiAgICAvLyB1c2VkIHdpdGhvdXQgYC0tZmFzdC1zdGFydHVwYC4KICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCIke0ZsYWdzLmV4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aH09LisiLCBwYXNzVGhyb3VnaCksCgogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZXhwZXJpbWVudExvY2FsTmFtZXMsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5leHBlcmltZW50U3RhcnR1cEZ1bmN0aW9ucywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZXhwZXJpbWVudFRvQm9vbGVhbiwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZXhwZXJpbWVudENhbGxJbnN0cnVtZW50YXRpb24sIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmV4cGVyaW1lbnROZXdSdGksIHBhc3NUaHJvdWdoKSwKCiAgICAvLyBUaGUgZm9sbG93aW5nIHRocmVlIG9wdGlvbnMgbXVzdCBjb21lIGxhc3QuCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLUQuKz0uKicsIGFkZEluRW52aXJvbm1lbnQpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0uKicsIChTdHJpbmcgYXJndW1lbnQpIHsKICAgICAgaGVscEFuZEZhaWwoIlVua25vd24gb3B0aW9uICckYXJndW1lbnQnLiIpOwogICAgfSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLionLCAoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICAgIGFyZ3VtZW50cy5hZGQobmF0aXZlVG9VcmlQYXRoKGFyZ3VtZW50KSk7CiAgICB9KQogIF07CgogIHBhcnNlQ29tbWFuZExpbmUoaGFuZGxlcnMsIGFyZ3YpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNZWFzdXJlIHRpbWUgZm9yIHJlYWRpbmcgZmlsZXMuCiAgU291cmNlRmlsZVByb3ZpZGVyIGlucHV0UHJvdmlkZXI7CiAgaWYgKGJhemVsUGF0aHMgIT0gbnVsbCkgewogICAgaW5wdXRQcm92aWRlciA9IG5ldyBCYXplbElucHV0UHJvdmlkZXIoYmF6ZWxQYXRocyk7CiAgfSBlbHNlIHsKICAgIGlucHV0UHJvdmlkZXIgPSBuZXcgQ29tcGlsZXJTb3VyY2VGaWxlUHJvdmlkZXIoKTsKICB9CgogIGRpYWdub3N0aWNIYW5kbGVyID0gbmV3IEZvcm1hdHRpbmdEaWFnbm9zdGljSGFuZGxlcihpbnB1dFByb3ZpZGVyKTsKICBpZiAodmVyYm9zZSAhPSBudWxsKSB7CiAgICBkaWFnbm9zdGljSGFuZGxlci52ZXJib3NlID0gdmVyYm9zZTsKICB9CiAgaWYgKHRocm93T25FcnJvciAhPSBudWxsKSB7CiAgICBkaWFnbm9zdGljSGFuZGxlci50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3I7CiAgfQogIGlmICh0aHJvd09uRXJyb3JDb3VudCAhPSBudWxsKSB7CiAgICBkaWFnbm9zdGljSGFuZGxlci50aHJvd09uRXJyb3JDb3VudCA9IHRocm93T25FcnJvckNvdW50OwogIH0KICBpZiAoc2hvd1dhcm5pbmdzICE9IG51bGwpIHsKICAgIGRpYWdub3N0aWNIYW5kbGVyLnNob3dXYXJuaW5ncyA9IHNob3dXYXJuaW5nczsKICB9CiAgaWYgKHNob3dIaW50cyAhPSBudWxsKSB7CiAgICBkaWFnbm9zdGljSGFuZGxlci5zaG93SGludHMgPSBzaG93SGludHM7CiAgfQogIGlmIChlbmFibGVDb2xvcnMgIT0gbnVsbCkgewogICAgZGlhZ25vc3RpY0hhbmRsZXIuZW5hYmxlQ29sb3JzID0gZW5hYmxlQ29sb3JzOwogIH0KCiAgaWYgKGNoZWNrZWRNb2RlICYmIHN0cm9uZ01vZGUpIHsKICAgIGNoZWNrZWRNb2RlID0gZmFsc2U7CiAgICBoaW50cy5hZGQoIk9wdGlvbiAnJHtGbGFncy5lbmFibGVDaGVja2VkTW9kZX0nIGlzIG5vdCBuZWVkZWQgaW4gRGFydCAyLjAuICIKICAgICAgICAiVG8gZW5hYmxlIGFzc2VydGlvbnMgdXNlICcke0ZsYWdzLmVuYWJsZUFzc2VydHN9JyBpbnN0ZWFkLiIpOwogIH0KCiAgaWYgKHRydXN0VHlwZUFubm90YXRpb25zICYmIHN0cm9uZ01vZGUpIHsKICAgIGhpbnRzLmFkZCgiT3B0aW9uICcke0ZsYWdzLnRydXN0VHlwZUFubm90YXRpb25zfScgaXMgbm90IGF2YWlsYWJsZSAiCiAgICAgICAgImluIERhcnQgMi4wLiBUcnkgdXNpbmcgJyR7RmxhZ3Mub21pdEltcGxpY2l0Q2hlY2tzfScgaW5zdGVhZC4iKTsKICB9CgogIGZvciAoU3RyaW5nIGhpbnQgaW4gaGludHMpIHsKICAgIGRpYWdub3N0aWNIYW5kbGVyLmluZm8oaGludCwgYXBpLkRpYWdub3N0aWMuSElOVCk7CiAgfQoKICBpZiAod2FudEhlbHAgfHwgd2FudFZlcnNpb24pIHsKICAgIGhlbHBBbmRFeGl0KHdhbnRIZWxwLCB3YW50VmVyc2lvbiwgZGlhZ25vc3RpY0hhbmRsZXIudmVyYm9zZSk7CiAgfQoKICBpZiAoYXJndW1lbnRzLmlzRW1wdHkpIHsKICAgIGhlbHBBbmRGYWlsKCdObyBEYXJ0IGZpbGUgc3BlY2lmaWVkLicpOwogIH0KICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgIHZhciBleHRyYSA9IGFyZ3VtZW50cy5zdWJsaXN0KDEpOwogICAgaGVscEFuZEZhaWwoJ0V4dHJhIGFyZ3VtZW50czogJHtleHRyYS5qb2luKCIgIil9Jyk7CiAgfQoKICBpZiAodHJ1c3RUeXBlQW5ub3RhdGlvbnMgJiYgY2hlY2tlZE1vZGUpIHsKICAgIGhlbHBBbmRGYWlsKCJPcHRpb24gJyR7RmxhZ3MudHJ1c3RUeXBlQW5ub3RhdGlvbnN9JyBtYXkgbm90IGJlIHVzZWQgaW4gIgogICAgICAgICJjaGVja2VkIG1vZGUuIik7CiAgfQoKICBpZiAocGFja2FnZVJvb3QgIT0gbnVsbCAmJiBwYWNrYWdlQ29uZmlnICE9IG51bGwpIHsKICAgIGhlbHBBbmRGYWlsKCJDYW5ub3Qgc3BlY2lmeSBib3RoICctLXBhY2thZ2Utcm9vdCcgYW5kICctLXBhY2thZ2VzLiIpOwogIH0KCiAgU3RyaW5nIHNjcmlwdE5hbWUgPSBhcmd1bWVudHNbMF07CgogIHN3aXRjaCAod3JpdGVTdHJhdGVneSkgewogICAgY2FzZSBXcml0ZVN0cmF0ZWd5LnRvSnM6CiAgICAgIG91dCA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCdvdXQuanMnKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFdyaXRlU3RyYXRlZ3kudG9LZXJuZWw6CiAgICAgIG91dCA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCdvdXQuZGlsbCcpOwogICAgICBvcHRpb25zLmFkZChGbGFncy5jZmVPbmx5KTsKICAgICAgaWYgKHJlYWRTdHJhdGVneSA9PSBSZWFkU3RyYXRlZ3kuZnJvbURhdGEpIHsKICAgICAgICBmYWlsKCJDYW5ub3QgdXNlICR7RmxhZ3MuY2ZlT25seX0gIgogICAgICAgICAgICAiYW5kIHJlYWQgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LiIpOwogICAgICB9IGVsc2UgaWYgKHJlYWRTdHJhdGVneSA9PSBSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW4pIHsKICAgICAgICBmYWlsKCJDYW5ub3QgdXNlICR7RmxhZ3MuY2ZlT25seX0gIgogICAgICAgICAgICAiYW5kIHJlYWQgc2VyaWFsaXplZCBjb2RlZ2VuIHNpbXVsdGFuZW91c2x5LiIpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBXcml0ZVN0cmF0ZWd5LnRvRGF0YToKICAgICAgb3V0ID8/PSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoJ291dC5kaWxsJyk7CiAgICAgIHdyaXRlRGF0YVVyaSA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCckb3V0LmRhdGEnKTsKICAgICAgb3B0aW9ucy5hZGQoJyR7RmxhZ3Mud3JpdGVEYXRhfT0ke3dyaXRlRGF0YVVyaX0nKTsKICAgICAgaWYgKHJlYWRTdHJhdGVneSA9PSBSZWFkU3RyYXRlZ3kuZnJvbURhdGEpIHsKICAgICAgICBmYWlsKCJDYW5ub3QgcmVhZCBhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LiIpOwogICAgICB9IGVsc2UgaWYgKHJlYWRTdHJhdGVneSA9PSBSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW4pIHsKICAgICAgICBmYWlsKCJDYW5ub3QgcmVhZCBzZXJpYWxpemVkIGNvZGVnZW4gYW5kICIKICAgICAgICAgICAgIndyaXRlIHNlcmlhbGl6ZWQgZGF0YSBzaW11bHRhbmVvdXNseS4iKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgV3JpdGVTdHJhdGVneS50b0NvZGVnZW46CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSBuZWVkIGZvciBhbiBbb3V0XSB2YWx1ZSBpbiB0aGlzIGNhc2Ugb3IKICAgICAgLy8gdXNlIFtvdXRdIHRvIHBhc3MgW3dyaXRlQ29kZWdlblVyaV0uCiAgICAgIG91dCA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCdvdXQnKTsKICAgICAgd3JpdGVDb2RlZ2VuVXJpID8/PSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoJyRvdXQuY29kZScpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy53cml0ZUNvZGVnZW59PSR7d3JpdGVDb2RlZ2VuVXJpfScpOwogICAgICBpZiAocmVhZFN0cmF0ZWd5ID09IFJlYWRTdHJhdGVneS5mcm9tQ29kZWdlbikgewogICAgICAgIGZhaWwoIkNhbm5vdCByZWFkIGFuZCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuIik7CiAgICAgIH0KICAgICAgaWYgKHJlYWRTdHJhdGVneSAhPSBSZWFkU3RyYXRlZ3kuZnJvbURhdGEpIHsKICAgICAgICBmYWlsKCJDYW4gb25seSB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gZnJvbSBzZXJpYWxpemVkIGRhdGEuIik7CiAgICAgIH0KICAgICAgaWYgKGNvZGVnZW5TaGFyZHMgPT0gbnVsbCkgewogICAgICAgIGZhaWwoIkNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gd2l0aG91dCBzZXR0aW5nICIKICAgICAgICAgICAgIiR7RmxhZ3MuY29kZWdlblNoYXJkc30uIik7CiAgICAgIH0gZWxzZSBpZiAoY29kZWdlblNoYXJkcyA8PSAwKSB7CiAgICAgICAgZmFpbCgiJHtGbGFncy5jb2RlZ2VuU2hhcmRzfSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTsKICAgICAgfQogICAgICBpZiAoY29kZWdlblNoYXJkID09IG51bGwpIHsKICAgICAgICBmYWlsKCJDYW5ub3Qgd3JpdGUgc2VyaWFsaXplZCBjb2RlZ2VuIHdpdGhvdXQgc2V0dGluZyAiCiAgICAgICAgICAgICIke0ZsYWdzLmNvZGVnZW5TaGFyZH0uIik7CiAgICAgIH0gZWxzZSBpZiAoY29kZWdlblNoYXJkIDwgMCB8fCBjb2RlZ2VuU2hhcmQgPj0gY29kZWdlblNoYXJkcykgewogICAgICAgIGZhaWwoIiR7RmxhZ3MuY29kZWdlblNoYXJkfSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgIgogICAgICAgICAgICAiJHtGbGFncy5jb2RlZ2VuU2hhcmRzfS4iKTsKICAgICAgfQogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5jb2RlZ2VuU2hhcmR9PSRjb2RlZ2VuU2hhcmQnKTsKICAgICAgb3B0aW9ucy5hZGQoJyR7RmxhZ3MuY29kZWdlblNoYXJkc309JGNvZGVnZW5TaGFyZHMnKTsKICAgICAgYnJlYWs7CiAgfQogIHN3aXRjaCAocmVhZFN0cmF0ZWd5KSB7CiAgICBjYXNlIFJlYWRTdHJhdGVneS5mcm9tRGFydDoKICAgICAgYnJlYWs7CiAgICBjYXNlIFJlYWRTdHJhdGVneS5mcm9tRGF0YToKICAgICAgcmVhZERhdGFVcmkgPz89IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnJHNjcmlwdE5hbWUuZGF0YScpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5yZWFkRGF0YX09JHtyZWFkRGF0YVVyaX0nKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFJlYWRTdHJhdGVneS5mcm9tQ29kZWdlbjoKICAgICAgcmVhZERhdGFVcmkgPz89IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnJHNjcmlwdE5hbWUuZGF0YScpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5yZWFkRGF0YX09JHtyZWFkRGF0YVVyaX0nKTsKICAgICAgcmVhZENvZGVnZW5VcmkgPz89IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnJHNjcmlwdE5hbWUuY29kZScpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5yZWFkQ29kZWdlbn09JHtyZWFkQ29kZWdlblVyaX0nKTsKICAgICAgaWYgKGNvZGVnZW5TaGFyZHMgPT0gbnVsbCkgewogICAgICAgIGZhaWwoIkNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gd2l0aG91dCBzZXR0aW5nICIKICAgICAgICAgICAgIiR7RmxhZ3MuY29kZWdlblNoYXJkc30uIik7CiAgICAgIH0gZWxzZSBpZiAoY29kZWdlblNoYXJkcyA8PSAwKSB7CiAgICAgICAgZmFpbCgiJHtGbGFncy5jb2RlZ2VuU2hhcmRzfSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTsKICAgICAgfQogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5jb2RlZ2VuU2hhcmRzfT0kY29kZWdlblNoYXJkcycpOwogIH0KICBvcHRpb25zLmFkZCgnLS1vdXQ9JG91dCcpOwogIGlmICh3cml0ZVN0cmF0ZWd5ID09IFdyaXRlU3RyYXRlZ3kudG9KcykgewogICAgc291cmNlTWFwT3V0ID0gVXJpLnBhcnNlKCckb3V0Lm1hcCcpOwogICAgb3B0aW9ucy5hZGQoJy0tc291cmNlLW1hcD0ke3NvdXJjZU1hcE91dH0nKTsKICB9CgogIFJhbmRvbUFjY2Vzc0ZpbGVPdXRwdXRQcm92aWRlciBvdXRwdXRQcm92aWRlciA9CiAgICAgIG5ldyBSYW5kb21BY2Nlc3NGaWxlT3V0cHV0UHJvdmlkZXIob3V0LCBzb3VyY2VNYXBPdXQsCiAgICAgICAgICBvbkluZm86IGRpYWdub3N0aWNIYW5kbGVyLmluZm8sIG9uRmFpbHVyZTogZmFpbCk7CgogIGFwaS5Db21waWxhdGlvblJlc3VsdCBjb21waWxhdGlvbkRvbmUoYXBpLkNvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkgewogICAgaWYgKCFyZXN1bHQuaXNTdWNjZXNzKSB7CiAgICAgIGZhaWwoJ0NvbXBpbGF0aW9uIGZhaWxlZC4nKTsKICAgIH0KICAgIHdyaXRlU3RyaW5nKAogICAgICAgIFVyaS5wYXJzZSgnJG91dC5kZXBzJyksIGdldERlcHNPdXRwdXQoaW5wdXRQcm92aWRlci5nZXRTb3VyY2VVcmlzKCkpKTsKCiAgICBTdHJpbmcgaW5wdXQgPSB1cmlQYXRoVG9OYXRpdmUoc2NyaXB0TmFtZSk7CiAgICBpbnQgaW5wdXRTaXplOwogICAgU3RyaW5nIHByb2Nlc3NOYW1lOwogICAgU3RyaW5nIGlucHV0TmFtZTsKCiAgICBpbnQgb3V0cHV0U2l6ZTsKICAgIGludCBwcmltYXJ5T3V0cHV0U2l6ZTsKICAgIFN0cmluZyBvdXRwdXROYW1lOwoKICAgIFN0cmluZyBzdW1tYXJ5OwogICAgc3dpdGNoIChyZWFkU3RyYXRlZ3kpIHsKICAgICAgY2FzZSBSZWFkU3RyYXRlZ3kuZnJvbURhcnQ6CiAgICAgICAgaW5wdXROYW1lID0gJ2NoYXJhY3RlcnMgRGFydCc7CiAgICAgICAgaW5wdXRTaXplID0gaW5wdXRQcm92aWRlci5kYXJ0Q2hhcmFjdGVyc1JlYWQ7CiAgICAgICAgc3VtbWFyeSA9ICdEYXJ0IGZpbGUgJGlucHV0ICc7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUmVhZFN0cmF0ZWd5LmZyb21EYXRhOgogICAgICAgIGlucHV0TmFtZSA9ICdieXRlcyBkYXRhJzsKICAgICAgICBpbnB1dFNpemUgPSBpbnB1dFByb3ZpZGVyLmRhcnRDaGFyYWN0ZXJzUmVhZDsKICAgICAgICBTdHJpbmcgZGF0YUlucHV0ID0KICAgICAgICAgICAgZmUucmVsYXRpdml6ZVVyaShjdXJyZW50RGlyZWN0b3J5LCByZWFkRGF0YVVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBzdW1tYXJ5ID0gJ0RhdGEgZmlsZXMgJGlucHV0IGFuZCAkZGF0YUlucHV0ICc7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUmVhZFN0cmF0ZWd5LmZyb21Db2RlZ2VuOgogICAgICAgIGlucHV0TmFtZSA9ICdieXRlcyBkYXRhJzsKICAgICAgICBpbnB1dFNpemUgPSBpbnB1dFByb3ZpZGVyLmRhcnRDaGFyYWN0ZXJzUmVhZDsKICAgICAgICBTdHJpbmcgZGF0YUlucHV0ID0KICAgICAgICAgICAgZmUucmVsYXRpdml6ZVVyaShjdXJyZW50RGlyZWN0b3J5LCByZWFkRGF0YVVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBTdHJpbmcgY29kZUlucHV0ID0gZmUucmVsYXRpdml6ZVVyaSgKICAgICAgICAgICAgY3VycmVudERpcmVjdG9yeSwgcmVhZENvZGVnZW5VcmksIFBsYXRmb3JtLmlzV2luZG93cyk7CiAgICAgICAgc3VtbWFyeSA9ICdEYXRhIGZpbGVzICRpbnB1dCwgJGRhdGFJbnB1dCBhbmQgJwogICAgICAgICAgICAnJHtjb2RlSW5wdXR9WzAtJHtjb2RlZ2VuU2hhcmRzIC0gMX1dICc7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgc3dpdGNoICh3cml0ZVN0cmF0ZWd5KSB7CiAgICAgIGNhc2UgV3JpdGVTdHJhdGVneS50b0pzOgogICAgICAgIHByb2Nlc3NOYW1lID0gJ0NvbXBpbGVkJzsKICAgICAgICBvdXRwdXROYW1lID0gJ2NoYXJhY3RlcnMgSmF2YVNjcmlwdCc7CiAgICAgICAgb3V0cHV0U2l6ZSA9IG91dHB1dFByb3ZpZGVyLnRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW5KYXZhU2NyaXB0OwogICAgICAgIHByaW1hcnlPdXRwdXRTaXplID0gb3V0cHV0UHJvdmlkZXIudG90YWxDaGFyYWN0ZXJzV3JpdHRlblByaW1hcnk7CiAgICAgICAgU3RyaW5nIG91dHB1dCA9CiAgICAgICAgICAgIGZlLnJlbGF0aXZpemVVcmkoY3VycmVudERpcmVjdG9yeSwgb3V0LCBQbGF0Zm9ybS5pc1dpbmRvd3MpOwogICAgICAgIHN1bW1hcnkgKz0gJ2NvbXBpbGVkIHRvIEphdmFTY3JpcHQ6ICR7b3V0cHV0fSc7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgV3JpdGVTdHJhdGVneS50b0tlcm5lbDoKICAgICAgICBwcm9jZXNzTmFtZSA9ICdDb21waWxlZCc7CiAgICAgICAgb3V0cHV0TmFtZSA9ICdrZXJuZWwgYnl0ZXMnOwogICAgICAgIG91dHB1dFNpemUgPSBvdXRwdXRQcm92aWRlci50b3RhbERhdGFXcml0dGVuOwogICAgICAgIFN0cmluZyBvdXRwdXQgPQogICAgICAgICAgICBmZS5yZWxhdGl2aXplVXJpKGN1cnJlbnREaXJlY3RvcnksIG91dCwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBzdW1tYXJ5ICs9ICdjb21waWxlZCB0byBkaWxsOiAke291dHB1dH0uJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBXcml0ZVN0cmF0ZWd5LnRvRGF0YToKICAgICAgICBwcm9jZXNzTmFtZSA9ICdTZXJpYWxpemVkJzsKICAgICAgICBvdXRwdXROYW1lID0gJ2J5dGVzIGRhdGEnOwogICAgICAgIG91dHB1dFNpemUgPSBvdXRwdXRQcm92aWRlci50b3RhbERhdGFXcml0dGVuOwogICAgICAgIFN0cmluZyBvdXRwdXQgPQogICAgICAgICAgICBmZS5yZWxhdGl2aXplVXJpKGN1cnJlbnREaXJlY3RvcnksIG91dCwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBTdHJpbmcgZGF0YU91dHB1dCA9IGZlLnJlbGF0aXZpemVVcmkoCiAgICAgICAgICAgIGN1cnJlbnREaXJlY3RvcnksIHdyaXRlRGF0YVVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBzdW1tYXJ5ICs9ICdzZXJpYWxpemVkIHRvIGRpbGwgYW5kIGRhdGE6ICR7b3V0cHV0fSBhbmQgJHtkYXRhT3V0cHV0fS4nOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFdyaXRlU3RyYXRlZ3kudG9Db2RlZ2VuOgogICAgICAgIHByb2Nlc3NOYW1lID0gJ1NlcmlhbGl6ZWQnOwogICAgICAgIG91dHB1dE5hbWUgPSAnYnl0ZXMgZGF0YSc7CiAgICAgICAgb3V0cHV0U2l6ZSA9IG91dHB1dFByb3ZpZGVyLnRvdGFsRGF0YVdyaXR0ZW47CiAgICAgICAgU3RyaW5nIGNvZGVPdXRwdXQgPSBmZS5yZWxhdGl2aXplVXJpKAogICAgICAgICAgICBjdXJyZW50RGlyZWN0b3J5LCB3cml0ZUNvZGVnZW5VcmksIFBsYXRmb3JtLmlzV2luZG93cyk7CiAgICAgICAgc3VtbWFyeSArPSAnc2VyaWFsaXplZCB0byBjb2RlZ2VuIGRhdGE6ICcKICAgICAgICAgICAgJyR7Y29kZU91dHB1dH0ke2NvZGVnZW5TaGFyZH0uJzsKICAgICAgICBicmVhazsKICAgIH0KCiAgICBwcmludCgnJHByb2Nlc3NOYW1lICcKICAgICAgICAnJHtfZm9ybWF0Q2hhcmFjdGVyQ291bnQoaW5wdXRTaXplKX0gJGlucHV0TmFtZSB0byAnCiAgICAgICAgJyR7X2Zvcm1hdENoYXJhY3RlckNvdW50KG91dHB1dFNpemUpfSAkb3V0cHV0TmFtZSBpbiAnCiAgICAgICAgJyR7X2Zvcm1hdER1cmF0aW9uQXNTZWNvbmRzKHdhbGxjbG9jay5lbGFwc2VkKX0gc2Vjb25kcycpOwogICAgaWYgKHByaW1hcnlPdXRwdXRTaXplICE9IG51bGwpIHsKICAgICAgZGlhZ25vc3RpY0hhbmRsZXIuaW5mbygKICAgICAgICAgICcke19mb3JtYXRDaGFyYWN0ZXJDb3VudChwcmltYXJ5T3V0cHV0U2l6ZSl9ICRvdXRwdXROYW1lICcKICAgICAgICAgICdpbiAke2ZlLnJlbGF0aXZpemVVcmkoY3VycmVudERpcmVjdG9yeSwgb3V0LCBQbGF0Zm9ybS5pc1dpbmRvd3MpfScpOwogICAgfQogICAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0pzKSB7CiAgICAgIGlmIChvdXRwdXRTcGVjaWZpZWQgfHwgZGlhZ25vc3RpY0hhbmRsZXIudmVyYm9zZSkgewogICAgICAgIHByaW50KHN1bW1hcnkpOwogICAgICAgIGlmIChkaWFnbm9zdGljSGFuZGxlci52ZXJib3NlKSB7CiAgICAgICAgICB2YXIgZmlsZXMgPSBvdXRwdXRQcm92aWRlci5hbGxPdXRwdXRGaWxlczsKICAgICAgICAgIGludCBqc0NvdW50ID0gZmlsZXMud2hlcmUoKGYpID0+IGYuZW5kc1dpdGgoJy5qcycpKS5sZW5ndGg7CiAgICAgICAgICBwcmludCgnRW1pdHRlZCBmaWxlICRqc0NvdW50IEphdmFTY3JpcHQgZmlsZXMuJyk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwcmludChzdW1tYXJ5KTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgVXJpIHNjcmlwdCA9IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZShzY3JpcHROYW1lKTsKCiAgZGlhZ25vc3RpY0hhbmRsZXIuYXV0b1JlYWRGaWxlVXJpID0gdHJ1ZTsKICBDb21waWxlck9wdGlvbnMgY29tcGlsZXJPcHRpb25zID0gQ29tcGlsZXJPcHRpb25zLnBhcnNlKG9wdGlvbnMsCiAgICAgIGxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk6IGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksCiAgICAgIHBsYXRmb3JtQmluYXJpZXM6IHBsYXRmb3JtQmluYXJpZXMsCiAgICAgIG9uRXJyb3I6IChTdHJpbmcgbWVzc2FnZSkgPT4gZmFpbChtZXNzYWdlKSwKICAgICAgb25XYXJuaW5nOiAoU3RyaW5nIG1lc3NhZ2UpID0+IHByaW50KG1lc3NhZ2UpKQogICAgLi5lbnRyeVBvaW50ID0gc2NyaXB0CiAgICAuLnBhY2thZ2VSb290ID0gcGFja2FnZVJvb3QKICAgIC4ucGFja2FnZUNvbmZpZyA9IHBhY2thZ2VDb25maWcKICAgIC4uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudAogICAgLi5rZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUgPSBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUKICAgIC4ub3B0aW1pemF0aW9uTGV2ZWwgPSBvcHRpbWl6YXRpb25MZXZlbDsKICByZXR1cm4gY29tcGlsZUZ1bmMoCiAgICAgICAgICBjb21waWxlck9wdGlvbnMsIGlucHV0UHJvdmlkZXIsIGRpYWdub3N0aWNIYW5kbGVyLCBvdXRwdXRQcm92aWRlcikKICAgICAgLnRoZW4oY29tcGlsYXRpb25Eb25lKTsKfQoKLy8vIFJldHVybnMgdGhlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvcm1hdHRlZCB3aXRoIGEgdGhvdXNhbmRzIHNlcGFyYXRvci4KU3RyaW5nIF9mb3JtYXRDaGFyYWN0ZXJDb3VudChpbnQgdmFsdWUsIFtTdHJpbmcgc2VwYXJhdG9yID0gJywnXSkgewogIFN0cmluZyB0ZXh0ID0gJyR2YWx1ZSc7CiAgLy8gJ0luc2VydCcgc2VwYXJhdG9ycyByaWdodC10by1sZWZ0LiBJbmVmZmljaWVudCwgYnV0IHVzZWQganVzdCBhIGZldyB0aW1lcy4KICBmb3IgKGludCBwb3NpdGlvbiA9IHRleHQubGVuZ3RoIC0gMzsgcG9zaXRpb24gPiAwOyBwb3NpdGlvbiAtPSAzKSB7CiAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgcG9zaXRpb24pICsgc2VwYXJhdG9yICsgdGV4dC5zdWJzdHJpbmcocG9zaXRpb24pOwogIH0KICByZXR1cm4gdGV4dDsKfQoKLy8vIEZvcm1hdHMgW2R1cmF0aW9uXSBpbiBzZWNvbmRzIGluIGZpeGVkLXBvaW50IGZvcm1hdCwgcHJlZmVycmluZyB0byBrZWVwIHRoZQovLy8gcmVzdWx0IGF0IHRvIGJlbG93IFt3aWR0aF0gY2hhcmFjdGVycy4KU3RyaW5nIF9mb3JtYXREdXJhdGlvbkFzU2Vjb25kcyhEdXJhdGlvbiBkdXJhdGlvbiwgW2ludCB3aWR0aCA9IDRdKSB7CiAgbnVtIHNlY29uZHMgPSBkdXJhdGlvbi5pbk1pbGxpc2Vjb25kcyAvIDEwMDAuMDsKICBTdHJpbmcgdGV4dDsKICBmb3IgKGludCBkaWdpdHMgPSAzOyBkaWdpdHMgPj0gMDsgZGlnaXRzLS0pIHsKICAgIHRleHQgPSBzZWNvbmRzLnRvU3RyaW5nQXNGaXhlZChkaWdpdHMpOwogICAgaWYgKHRleHQubGVuZ3RoIDw9IHdpZHRoKSByZXR1cm4gdGV4dDsKICB9CiAgcmV0dXJuIHRleHQ7Cn0KCmNsYXNzIEFib3J0TGVnIHsKICBmaW5hbCBtZXNzYWdlOwogIEFib3J0TGVnKHRoaXMubWVzc2FnZSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnQWJvcnRlZCBkdWUgdG8gLS10aHJvdy1vbi1lcnJvcjogJG1lc3NhZ2UnOwp9Cgp2b2lkIHdyaXRlU3RyaW5nKFVyaSB1cmksIFN0cmluZyB0ZXh0KSB7CiAgaWYgKCFlbmFibGVXcml0ZVN0cmluZykgcmV0dXJuOwogIGlmICh1cmkuc2NoZW1lICE9ICdmaWxlJykgewogICAgZmFpbCgnVW5oYW5kbGVkIHNjaGVtZSAke3VyaS5zY2hlbWV9LicpOwogIH0KICB2YXIgZmlsZSA9IG5ldyBGaWxlKHVyaS50b0ZpbGVQYXRoKCkpLm9wZW5TeW5jKG1vZGU6IEZpbGVNb2RlLndyaXRlKTsKICBmaWxlLndyaXRlU3RyaW5nU3luYyh0ZXh0KTsKICBmaWxlLmNsb3NlU3luYygpOwp9Cgp2b2lkIGZhaWwoU3RyaW5nIG1lc3NhZ2UpIHsKICBpZiAoZGlhZ25vc3RpY0hhbmRsZXIgIT0gbnVsbCkgewogICAgZGlhZ25vc3RpY0hhbmRsZXIucmVwb3J0KG51bGwsIG51bGwsIC0xLCAtMSwgbWVzc2FnZSwgYXBpLkRpYWdub3N0aWMuRVJST1IpOwogIH0gZWxzZSB7CiAgICBwcmludCgnRXJyb3I6ICRtZXNzYWdlJyk7CiAgfQogIGV4aXRGdW5jKDEpOwp9CgpGdXR1cmU8YXBpLkNvbXBpbGF0aW9uUmVzdWx0PiBjb21waWxlck1haW4oTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgIHtmZS5Jbml0aWFsaXplZENvbXBpbGVyU3RhdGUga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlfSkgYXN5bmMgewogIGlmICghYXJndW1lbnRzLmFueSgoYSkgPT4gYS5zdGFydHNXaXRoKCctLWxpYnJhcmllcy1zcGVjPScpKSkgewogICAgVXJpIHNjcmlwdCA9IFBsYXRmb3JtLnNjcmlwdDsKICAgIGlmIChzY3JpcHQuaXNTY2hlbWUoInBhY2thZ2UiKSkgewogICAgICBzY3JpcHQgPSBhd2FpdCBJc29sYXRlLnJlc29sdmVQYWNrYWdlVXJpKHNjcmlwdCk7CiAgICB9CiAgICBVcmkgbGlicmFyaWVzSnNvbiA9IHNjcmlwdC5yZXNvbHZlKF9kZWZhdWx0U3BlY2lmaWNhdGlvblVyaSk7CiAgICBhcmd1bWVudHMgPSA8U3RyaW5nPlsnLS1saWJyYXJpZXMtc3BlYz0ke2xpYnJhcmllc0pzb24udG9GaWxlUGF0aCgpfSddCiAgICAgIC4uYWRkQWxsKGFyZ3VtZW50cyk7CiAgfQogIHJldHVybiBjb21waWxlKGFyZ3VtZW50cywKICAgICAga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOiBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUpOwp9Cgp2b2lkIGhlbHAoKSB7CiAgLy8gVGhpcyBtZXNzYWdlIHNob3VsZCBiZSBubyBsb25nZXIgdGhhbiAyMCBsaW5lcy4gVGhlIGRlZmF1bHQKICAvLyB0ZXJtaW5hbCBzaXplIG5vcm1hbGx5IDgweDI0LiBUd28gbGluZXMgYXJlIHVzZWQgZm9yIHRoZSBwcm9tcHRzCiAgLy8gYmVmb3JlIGFuZCBhZnRlciBydW5uaW5nIHRoZSBjb21waWxlci4gQW5vdGhlciB0d28gbGluZXMgbWF5IGJlCiAgLy8gdXNlZCB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlLgogIHByaW50KCcnJwpVc2FnZTogZGFydDJqcyBbb3B0aW9uc10gZGFydGZpbGUKCkNvbXBpbGVzIERhcnQgdG8gSmF2YVNjcmlwdC4KCkNvbW1vbiBvcHRpb25zOgogIC1vIDxmaWxlPiBHZW5lcmF0ZSB0aGUgb3V0cHV0IGludG8gPGZpbGU+LgogIC1tICAgICAgICBHZW5lcmF0ZSBtaW5pZmllZCBvdXRwdXQuCiAgLWggICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlIChhZGQgLXYgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcHRpb25zKS4nJycpOwp9Cgp2b2lkIHZlcmJvc2VIZWxwKCkgewogIHByaW50KHInJycKVXNhZ2U6IGRhcnQyanMgW29wdGlvbnNdIGRhcnRmaWxlCgpDb21waWxlcyBEYXJ0IHRvIEphdmFTY3JpcHQuCgpTdXBwb3J0ZWQgb3B0aW9uczoKICAtaCwgL2gsIC8/LCAtLWhlbHAKICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlIChhZGQgLXYgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcHRpb25zKS4KCiAgLW8gPGZpbGU+LCAtLW91dD08ZmlsZT4KICAgIEdlbmVyYXRlIHRoZSBvdXRwdXQgaW50byA8ZmlsZT4uCgogIC1tLCAtLW1pbmlmeQogICAgR2VuZXJhdGUgbWluaWZpZWQgb3V0cHV0LgoKICAtLWVuYWJsZS1hc3NlcnRzCiAgICBFbmFibGUgYXNzZXJ0aW9ucy4KCiAgLXYsIC0tdmVyYm9zZQogICAgRGlzcGxheSB2ZXJib3NlIGluZm9ybWF0aW9uLgoKICAtRDxuYW1lPj08dmFsdWU+CiAgICBEZWZpbmUgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCgogIC0tdmVyc2lvbgogICAgRGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKICAtLXBhY2thZ2VzPTxwYXRoPgogICAgUGF0aCB0byB0aGUgcGFja2FnZSByZXNvbHV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggc3VwcGxpZXMgYSBtYXBwaW5nCiAgICBvZiBwYWNrYWdlIG5hbWVzIHRvIHBhdGhzLgoKICAtLXN1cHByZXNzLXdhcm5pbmdzCiAgICBEbyBub3QgZGlzcGxheSBhbnkgd2FybmluZ3MuCgogIC0tZmF0YWwtd2FybmluZ3MKICAgIFRyZWF0IHdhcm5pbmdzIGFzIGNvbXBpbGF0aW9uIGVycm9ycy4KCiAgLS1zdXBwcmVzcy1oaW50cwogICAgRG8gbm90IGRpc3BsYXkgYW55IGhpbnRzLgoKICAtLWVuYWJsZS1kaWFnbm9zdGljLWNvbG9ycwogICAgQWRkIGNvbG9ycyB0byBkaWFnbm9zdGljIG1lc3NhZ2VzLgoKICAtLXRlcnNlCiAgICBFbWl0IGRpYWdub3N0aWNzIHdpdGhvdXQgc3VnZ2VzdGlvbnMgZm9yIGhvdyB0byBnZXQgcmlkIG9mIHRoZSBkaWFnbm9zZWQKICAgIHByb2JsZW1zLgoKICAtLXNob3ctcGFja2FnZS13YXJuaW5ncwogICAgU2hvdyB3YXJuaW5ncyBhbmQgaGludHMgZ2VuZXJhdGVkIGZyb20gcGFja2FnZXMuCgogIC0tY3NwCiAgICBEaXNhYmxlIGR5bmFtaWMgZ2VuZXJhdGlvbiBvZiBjb2RlIGluIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LiBUaGlzIGlzCiAgICBuZWNlc3NhcnkgdG8gc2F0aXNmeSBDU1AgcmVzdHJpY3Rpb25zIChzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NQLykuCgogIC0tbm8tc291cmNlLW1hcHMKICAgIERvIG5vdCBnZW5lcmF0ZSBhIHNvdXJjZSBtYXAgZmlsZS4KCiAgLU88MCwxLDIsMyw0PgogICAgQ29udHJvbHMgb3B0aW1pemF0aW9ucyB0aGF0IGNhbiBoZWxwIHJlZHVjZSBjb2RlLXNpemUgYW5kIGltcHJvdmUKICAgIHBlcmZvcm1hbmNlIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgZGVwbG95bWVudC4KCiAgICAtTzAKICAgICAgIERpc2FibGVzIGFsbCBvcHRpbWl6YXRpb25zLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlCiAgICAgICBleHRyYSBmbGFnczoKICAgICAgICAtLWRpc2FibGUtaW5saW5pbmcKICAgICAgICAtLWRpc2FibGUtdHlwZS1pbmZlcmVuY2UKICAgICAgICAtLWRpc2FibGUtcnRpLW9wdGltaXphdGlvbnMKCgogICAgICAgU29tZSBvcHRpbWl6YXRpb25zIGNhbm5vdCBiZSBkaXNzYWJsZWQgYXQgdGhpcyB0aW1lLCBhcyB3ZSBhZGQgdGhlIG9wdGlvbgogICAgICAgdG8gZGlzYWJsZSB0aGVtLCB0aGV5IHdpbGwgYmUgYWRkZWQgaGVyZSBhcyB3ZWxsLgoKICAgIC1PMQogICAgICAgRW5hYmxlcyBkZWZhdWx0IG9wdGltaXphdGlvbnMuIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggbm8KICAgICAgIGV4dHJhIGZsYWdzLgoKICAgIC1PMgogICAgICAgRW5hYmxlcyBvcHRpbWl6YXRpb25zIHRoYXQgcmVzcGVjdCB0aGUgbGFuZ3VhZ2Ugc2VtYW50aWNzIGFuZCBhcmUgc2FmZQogICAgICAgZm9yIGFsbCBwcm9ncmFtcy4gSXQgaG93ZXZlciBjaGFuZ2VzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdHlwZXMsCiAgICAgICB3aGljaCB3aWxsIG5vIGxvbmdlciBiZSBjb25zaXN0ZW50IHdpdGggdGhlIERhcnQgVk0gb3IgRERDLgoKICAgICAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggdGhlc2UgZXh0cmEgZmxhZ3M6CiAgICAgICAgLS1taW5pZnkKICAgICAgICAtLWxheC1ydW50aW1lLXR5cGUtdG8tc3RyaW5nCgogICAgLU8zCiAgICAgICBFbmFibGVzIG9wdGltaXphdGlvbnMgdGhhdCByZXNwZWN0IHRoZSBsYW5ndWFnZSBzZW1hbnRpY3Mgb25seSBvbgogICAgICAgcHJvZ3JhbXMgdGhhdCBkb24ndCBldmVyIHRocm93IGFueSBzdWJ0eXBlIG9mIGBFcnJvcmAuICBUaGVzZQogICAgICAgb3B0aW1pemF0aW9ucyBpbXByb3ZlIHRoZSBnZW5lcmF0ZWQgY29kZSwgYnV0IHRoZXkgbWF5IGNhdXNlIHByb2dyYW1zIHRvCiAgICAgICBiZWhhdmUgdW5leHBlY3RlZGx5IGlmIHRoaXMgYXNzdW1wdGlvbiBpcyBub3QgbWV0LiAgVG8gdXNlIHRoaXMKICAgICAgIG9wdGlvbiwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHByb3Blcmx5IHRlc3QgeW91ciBhcHBsaWNhdGlvbiBmaXJzdAogICAgICAgd2l0aG91dCBpdCwgYW5kIGVuc3VyZSB0aGF0IG5vIHN1YnR5cGUgb2YgYEVycm9yYCAoc3VjaCBhcyBgVHlwZUVycm9yYCkKICAgICAgIGlzIGV2ZXIgdGhyb3duLgoKICAgICAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggdGhlc2UgZXh0cmEgZmxhZ3M6CiAgICAgICAgIC1PMgogICAgICAgICAtLW9taXQtaW1wbGljaXQtY2hlY2tzCgogICAgLU80CiAgICAgICBFbmFibGVzIG1vcmUgYWdncmVzc2l2ZSBvcHRpbWl6YXRpb25zIHRoYW4gLU8zLCBidXQgd2l0aCB0aGUgc2FtZQogICAgICAgYXNzdW1wdGlvbnMuIFRoZXNlIG9wdGltaXphdGlvbnMgYXJlIG9uIGEgc2VwYXJhdGUgZ3JvdXAgYmVjYXVzZSB0aGV5CiAgICAgICBhcmUgbW9yZSBzdXNjZXB0aWJsZSB0byB2YXJpYXRpb25zIGluIGlucHV0IGRhdGEuIFRvIHVzZSB0aGlzIG9wdGlvbiB3ZQogICAgICAgcmVjb21tZW5kIHRvIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byB0ZXN0IGVkZ2UgY2FzZXMgaW4gdXNlciBpbnB1dC4KCiAgICAgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlIGV4dHJhIGZsYWdzOgogICAgICAgICAtTzMKICAgICAgICAgLS10cnVzdC1wcmltaXRpdmVzCgogICAgV2hpbGUgc29tZSBvZiB0aGUgaW5kaXZpZHVhbCBvcHRpbWl6YXRpb25zIGFuZCBmbGFncyBtYXkgY2hhbmdlIHdpdGggdGltZSwKICAgIHdlIGludGVuZCB0byBrZWVwIHRoZSAtTyogZmxhZ3Mgc3RhYmxlLiBOZXcgc2FmZSBvcHRpbWl6YXRpb25zIG1heSBiZSBhZGRlZAogICAgb24gYW55IGxldmVsLCBhbmQgb3B0aW1pemF0aW9ucyB0aGF0IG9ubHkgd29yayBvbiBzb21lIHByb2dyYW1zIG1heSBtb3ZlIHVwCiAgICBmcm9tIG9uZSBsZXZlbCB0byB0aGUgbmV4dCAoZm9yIGluc3RhbmNlLCBvbmNlIGFsdGVybmF0aXZlIHNhZmUKICAgIG9wdGltaXphdGlvbnMgYXJlIGltcGxlbWVudGVkLCBgb21pdC1pbXBsaWNpdC1jaGVja3NgIG1heSBiZSByZW1vdmVkIG9yIG1heQogICAgbW92ZSB0byB0aGUgTzQgbGV2ZWwpLgoKVGhlIGZvbGxvd2luZyBpbmRpdmlkdWFsIG9wdGlvbnMgYXJlIGluY2x1ZGVkIGluIHNvbWUgb2YgdGhlIC1PIG9wdGltaXphdGlvbgpsZXZlbHMgYWJvdmUuIFRoZXkgaGVscCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBjb2RlLCBidXQgdGhleSBtYXkKY2F1c2UgcHJvZ3JhbXMgdG8gYmVoYXZlIHVuZXhwZWN0ZWRseSBpZiBhc3N1bXB0aW9ucyBhcmUgbm90IG1ldC4gT25seSB0dXJuIG9uCnRoZXNlIGZsYWdzIGlmIHlvdSBoYXZlIGVub3VnaCB0ZXN0IGNvdmVyYWdlIHRvIGVuc3VyZSB0aGV5IGFyZSBzYWZlIHRvIHVzZToKCiAgLS1vbWl0LWltcGxpY2l0LWNoZWNrcwogICAgT21pdCBpbXBsaWNpdCBydW50aW1lIGNoZWNrcywgc3VjaCBhcyBwYXJhbWV0ZXIgY2hlY2tzIGFuZCBpbXBsaWNpdAogICAgZG93bmNhc3RzLiBUaGVzZSBjaGVja3MgYXJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQgaW4gRGFydCAyLjAuIEJ5CiAgICB1c2luZyB0aGlzIGZsYWcgdGhlIGNoZWNrcyBhcmUgcmVtb3ZlZCwgaG93ZXZlciB0aGUgY29tcGlsZXIgd2lsbCBhc3N1bWUKICAgIHRoYXQgYWxsIHN1Y2ggY2hlY2tzIHdlcmUgdmFsaWQgYW5kIG1heSB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IKICAgIG9wdGltaXphdGlvbnMuIFVzZSB0aGlzIG9wdGlvbiBvbmx5IGlmIHlvdSBoYXZlIGVub3VnaCB0ZXN0aW5nIHRvIGVuc3VyZQogICAgdGhhdCB5b3VyIHByb2dyYW0gd29ya3Mgd2l0aCB0aGUgY2hlY2tzLgoKICAtLXRydXN0LXByaW1pdGl2ZXMKICAgIEFzc3VtZSB0aGF0IG9wZXJhdGlvbnMgb24gbnVtYmVycywgc3RyaW5ncywgYW5kIGxpc3RzIGhhdmUgdmFsaWQgaW5wdXRzLgogICAgVGhpcyBvcHRpb24gYWxsb3dzIHRoZSBjb21waWxlciB0byBkcm9wIHJ1bnRpbWUgY2hlY2tzIGZvciB0aG9zZSBvcGVyYXRpb25zLgogICAgTm90ZTogYSB3ZWxsLXR5cGVkIHByb2dyYW0gaXMgbm90IGd1YXJhbnRlZWQgdG8gaGF2ZSB2YWxpZCBpbnB1dHMuIEZvcgogICAgZXhhbXBsZSwgYW4gaW50IGluZGV4IGFyZ3VtZW50IG1heSBiZSBudWxsIG9yIG91dCBvZiByYW5nZS4KCiAgLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZwogICAgT21pdHMgcmVpZmllZCBjbGFzcyB0eXBlIGFyZ3VtZW50cyB3aGVuIHRoZXNlIGFyZSBvbmx5IG5lZWRlZCBmb3IgYHRvU3RyaW5nYAogICAgb24gYHJ1bnRpbWVUeXBlYC4gVGhpcyBpcyB1c2VmdWwgaWYgYHJ1bnRpbWVUeXBlLnRvU3RyaW5nKClgIGlzIG9ubHkgdXNlZAogICAgZm9yIGRlYnVnZ2luZy4gTm90ZSB0aGF0IHNlbWFudGljcyBvZiBvdGhlciB1c2VzIG9mIGAucnVudGltZVR5cGVgLCBmb3IKICAgIGluc3RhbmNlIGBhLnJ1bnRpbWVUeXBlID09IGIucnVudGltZVR5cGVgLCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcyBmbGFnLgoKVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBvbmx5IHVzZWQgZm9yIGNvbXBpbGVyIGRldmVsb3BtZW50IGFuZCBtYXkKYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uOgoKICAtLXRocm93LW9uLWVycm9yCiAgICBUaHJvdyBhbiBleGNlcHRpb24gaWYgYSBjb21waWxlLXRpbWUgZXJyb3IgaXMgZGV0ZWN0ZWQuCgogIC0tbGlicmFyaWVzLXNwZWM9PGZpbGU+CiAgICBBIC5qc29uIGZpbGUgY29udGFpbmluZyB0aGUgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gZm9yIGRhcnQyanMuCgogIC0tYWxsb3ctbW9jay1jb21waWxhdGlvbgogICAgRG8gbm90IGdlbmVyYXRlIGEgY2FsbCB0byBtYWluIGlmIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nCiAgICBsaWJyYXJpZXMgYXJlIHVzZWQ6IGRhcnQ6ZG9tLCBkYXJ0Omh0bWwgZGFydDppby4KCiAgLS1kaXNhYmxlLW5hdGl2ZS1saXZlLXR5cGUtYW5hbHlzaXMKICAgIERpc2FibGUgdGhlIG9wdGltaXphdGlvbiB0aGF0IHJlbW92ZXMgdW51c2VkIG5hdGl2ZSB0eXBlcyBmcm9tIGRhcnQ6aHRtbAogICAgYW5kIHJlbGF0ZWQgbGlicmFyaWVzLgoKICAtLXNlcnZlci1tb2RlCiAgICBDb21waWxlIHdpdGggc2VydmVyIHN1cHBvcnQuIFRoZSBjb21waWxlciB3aWxsIHVzZSBhIGxpYnJhcnkgc3BlY2lmaWNhdGlvbgogICAgdGhhdCBkaXNhYmxlcyBkYXJ0Omh0bWwgYnV0IHN1cHBvcnRzIGRhcnQ6anMgaW4gY29uZGl0aW9uYWwgaW1wb3J0cy4KCiAgLS1jYXRlZ29yaWVzPTxjYXRlZ29yaWVzPgogICAgKGRlcHJlY2F0ZWQpCiAgICBVc2UgJy0tc2VydmVyLW1vZGUnIGluc3RlYWQgb2YgJy0tY2F0ZWdvcmllcz1TZXJ2ZXInLiBBbGwgb3RoZXIgY2F0ZWdvcnkKICAgIHZhbHVlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgY29tcGlsZXIgYmVoYXZpb3IuCgogIC0tZGVmZXJyZWQtbWFwPTxmaWxlPgogICAgR2VuZXJhdGVzIGEganNvbiBmaWxlIHdpdGggYSBtYXBwaW5nIGZyb20gZWFjaCBkZWZlcnJlZCBpbXBvcnQgdG8gYSBsaXN0IG9mCiAgICB0aGUgcGFydC5qcyBmaWxlcyB0aGF0IHdpbGwgYmUgbG9hZGVkLgoKICAtLWR1bXAtaW5mb1s9PGZvcm1hdD5dCiAgICBHZW5lcmF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdlbmVyYXRlZCBjb2RlLiAnZm9ybWF0JyBjYW4gYmUgZWl0aGVyCiAgICAnanNvbicgb3IgJ2JpbmFyeScuCiAgICBZb3UgY2FuIGluc3BlY3QgdGhlIGdlbmVyYXRlZCBkYXRhIHVzaW5nIHRvb2xzIGZyb20gJ3BhY2thZ2U6ZGFydDJqc19pbmZvJy4KCiAgLS1nZW5lcmF0ZS1jb2RlLXdpdGgtY29tcGlsZS10aW1lLWVycm9ycwogICAgR2VuZXJhdGVzIG91dHB1dCBldmVuIGlmIHRoZSBwcm9ncmFtIGNvbnRhaW5zIGNvbXBpbGUtdGltZSBlcnJvcnMuIFVzZSB0aGUKICAgIGV4aXQgY29kZSB0byBkZXRlcm1pbmUgaWYgY29tcGlsYXRpb24gZmFpbGVkLgoKICAtLW5vLWZyZXF1ZW5jeS1iYXNlZC1taW5pZmljYXRpb24KICAgIEV4cGVyaW1lbnRhbC4gIERpc2FibGVkIHRoZSBuZXcgZnJlcXVlbmN5IGJhc2VkIG1pbmlmeWluZyBuYW1lciBhbmQgdXNlIHRoZQogICAgb2xkIG5hbWVyIGluc3RlYWQuCicnJwogICAgICAudHJpbSgpKTsKfQoKdm9pZCBoZWxwQW5kRXhpdChib29sIHdhbnRIZWxwLCBib29sIHdhbnRWZXJzaW9uLCBib29sIHZlcmJvc2UpIHsKICBpZiAod2FudFZlcnNpb24pIHsKICAgIHZhciB2ZXJzaW9uID0gKEJVSUxEX0lEID09IG51bGwpID8gJzxub24tU0RLIGJ1aWxkPicgOiBCVUlMRF9JRDsKICAgIHByaW50KCdEYXJ0LXRvLUphdmFTY3JpcHQgY29tcGlsZXIgKGRhcnQyanMpIHZlcnNpb246ICR2ZXJzaW9uJyk7CiAgfQogIGlmICh3YW50SGVscCkgewogICAgaWYgKHZlcmJvc2UpIHsKICAgICAgdmVyYm9zZUhlbHAoKTsKICAgIH0gZWxzZSB7CiAgICAgIGhlbHAoKTsKICAgIH0KICB9CiAgZXhpdEZ1bmMoMCk7Cn0KCnZvaWQgaGVscEFuZEZhaWwoU3RyaW5nIG1lc3NhZ2UpIHsKICBoZWxwKCk7CiAgcHJpbnQoJycpOwogIGZhaWwobWVzc2FnZSk7Cn0KCnZvaWQgbWFpbihMaXN0PFN0cmluZz4gYXJndW1lbnRzKSB7CiAgLy8gU2luY2UgdGhlIHNkay9iaW4vZGFydDJqcyBzY3JpcHQgYWRkcyBpdHMgb3duIGFyZ3VtZW50cyBpbiBmcm9udCBvZgogIC8vIHVzZXItc3VwcGxpZWQgYXJndW1lbnRzIHdlIHNlYXJjaCBmb3IgJy0tYmF0Y2gnIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50cy5sYXN0ID09ICItLWJhdGNoIikgewogICAgYmF0Y2hNYWluKGFyZ3VtZW50cy5zdWJsaXN0KDAsIGFyZ3VtZW50cy5sZW5ndGggLSAxKSk7CiAgICByZXR1cm47CiAgfQogIGludGVybmFsTWFpbihhcmd1bWVudHMpOwp9Cgp0eXBlZGVmIHZvaWQgRXhpdEZ1bmMoaW50IGV4aXRDb2RlKTsKdHlwZWRlZiBGdXR1cmU8YXBpLkNvbXBpbGF0aW9uUmVzdWx0PiBDb21waWxlRnVuYygKICAgIENvbXBpbGVyT3B0aW9ucyBjb21waWxlck9wdGlvbnMsCiAgICBhcGkuQ29tcGlsZXJJbnB1dCBjb21waWxlcklucHV0LAogICAgYXBpLkNvbXBpbGVyRGlhZ25vc3RpY3MgY29tcGlsZXJEaWFnbm9zdGljcywKICAgIGFwaS5Db21waWxlck91dHB1dCBjb21waWxlck91dHB1dCk7CgpFeGl0RnVuYyBleGl0RnVuYyA9IGV4aXQ7CkNvbXBpbGVGdW5jIGNvbXBpbGVGdW5jID0gYXBpLmNvbXBpbGU7CgovLy8gSWYgYHRydWVgIGEgJy5kZXBzJyBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGFmdGVyIGNvbXBpbGF0aW9uLgovLy8KLy8vIFNldCB0aGlzIHRvIGBmYWxzZWAgaW4gZW5kLXRvLWVuZCB0ZXN0cyB0byBhdm9pZCBnZW5lcmF0aW5nICcuZGVwcycgZmlsZXMuCmJvb2wgZW5hYmxlV3JpdGVTdHJpbmcgPSB0cnVlOwoKRnV0dXJlPGFwaS5Db21waWxhdGlvblJlc3VsdD4gaW50ZXJuYWxNYWluKExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICB7ZmUuSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZX0pIHsKICBGdXR1cmU8YXBpLkNvbXBpbGF0aW9uUmVzdWx0PiBvbkVycm9yKGV4Y2VwdGlvbiwgdHJhY2UpIHsKICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IHRyeWluZyB0byBleGl0LCBqdXN0IGNvbnRpbnVlIGV4aXRpbmcuCiAgICBpZiAoZXhjZXB0aW9uID09IF9FWElUX1NJR05BTCkgdGhyb3cgZXhjZXB0aW9uOwoKICAgIHRyeSB7CiAgICAgIHByaW50KCdUaGUgY29tcGlsZXIgY3Jhc2hlZDogJGV4Y2VwdGlvbicpOwogICAgfSBjYXRjaCAoaWdub3JlZCkgewogICAgICBwcmludCgnVGhlIGNvbXBpbGVyIGNyYXNoZWQ6IGVycm9yIHdoaWxlIHByaW50aW5nIGV4Y2VwdGlvbicpOwogICAgfQoKICAgIHRyeSB7CiAgICAgIGlmICh0cmFjZSAhPSBudWxsKSB7CiAgICAgICAgcHJpbnQodHJhY2UpOwogICAgICB9CiAgICB9IGZpbmFsbHkgewogICAgICBleGl0RnVuYygyNTMpOyAvLyAyNTMgaXMgcmVjb2duaXplZCBhcyBhIGNyYXNoIGJ5IG91ciB0ZXN0IHNjcmlwdHMuCiAgICB9CiAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihleGNlcHRpb24sIHRyYWNlKTsKICB9CgogIHRyeSB7CiAgICByZXR1cm4gY29tcGlsZXJNYWluKGFyZ3VtZW50cywKICAgICAgICAgICAga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOiBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUpCiAgICAgICAgLmNhdGNoRXJyb3Iob25FcnJvcik7CiAgfSBjYXRjaCAoZXhjZXB0aW9uLCB0cmFjZSkgewogICAgcmV0dXJuIG9uRXJyb3IoZXhjZXB0aW9uLCB0cmFjZSk7CiAgfQp9CgpjbGFzcyBfRXhpdFNpZ25hbCB7CiAgY29uc3QgX0V4aXRTaWduYWwoKTsKfQoKY29uc3QgX0VYSVRfU0lHTkFMID0gY29uc3QgX0V4aXRTaWduYWwoKTsKCnZvaWQgYmF0Y2hNYWluKExpc3Q8U3RyaW5nPiBiYXRjaEFyZ3VtZW50cykgewogIGludCBleGl0Q29kZTsKICBleGl0RnVuYyA9IChlcnJvckNvZGUpIHsKICAgIC8vIFNpbmNlIHdlIG9ubHkgdGhyb3cgYW5vdGhlciBwYXJ0IG9mIHRoZSBjb21waWxlciBtaWdodCBpbnRlcmNlcHQgb3VyCiAgICAvLyBleGNlcHRpb24gYW5kIHRyeSB0byBleGl0IHdpdGggYSBkaWZmZXJlbnQgY29kZS4KICAgIGlmIChleGl0Q29kZSA9PSAwKSB7CiAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlOwogICAgfQogICAgdGhyb3cgX0VYSVRfU0lHTkFMOwogIH07CgogIHZhciBzdHJlYW0gPSBzdGRpbi50cmFuc2Zvcm0odXRmOC5kZWNvZGVyKS50cmFuc2Zvcm0obmV3IExpbmVTcGxpdHRlcigpKTsKICB2YXIgc3Vic2NyaXB0aW9uOwogIGZlLkluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGU7CiAgc3Vic2NyaXB0aW9uID0gc3RyZWFtLmxpc3RlbigobGluZSkgewogICAgbmV3IEZ1dHVyZS5zeW5jKCgpIHsKICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgIGV4aXRDb2RlID0gMDsKICAgICAgaWYgKGxpbmUgPT0gbnVsbCkgZXhpdCgwKTsKICAgICAgTGlzdDxTdHJpbmc+IGFyZ3MgPSA8U3RyaW5nPltdOwogICAgICBhcmdzLmFkZEFsbChiYXRjaEFyZ3VtZW50cyk7CiAgICAgIGFyZ3MuYWRkQWxsKHNwbGl0TGluZShsaW5lLCB3aW5kb3dzOiBQbGF0Zm9ybS5pc1dpbmRvd3MpKTsKICAgICAgcmV0dXJuIGludGVybmFsTWFpbihhcmdzLAogICAgICAgICAga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOiBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUpOwogICAgfSkuY2F0Y2hFcnJvcigoZXhjZXB0aW9uLCB0cmFjZSkgewogICAgICBpZiAoIWlkZW50aWNhbChleGNlcHRpb24sIF9FWElUX1NJR05BTCkpIHsKICAgICAgICBleGl0Q29kZSA9IDI1MzsKICAgICAgfQogICAgfSkudGhlbigoYXBpLkNvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkgewogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgICBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUgPSByZXN1bHQua2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOwogICAgICB9CiAgICB9KS53aGVuQ29tcGxldGUoKCkgewogICAgICAvLyBUaGUgdGVzdGluZyBmcmFtZXdvcmsgd2FpdHMgZm9yIGEgc3RhdHVzIGxpbmUgb24gc3Rkb3V0IGFuZAogICAgICAvLyBzdGRlcnIgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCB0ZXN0LgogICAgICBpZiAoZXhpdENvZGUgPT0gMCkgewogICAgICAgIHByaW50KCI+Pj4gVEVTVCBPSyIpOwogICAgICB9IGVsc2UgaWYgKGV4aXRDb2RlID09IDI1MykgewogICAgICAgIHByaW50KCI+Pj4gVEVTVCBDUkFTSCIpOwogICAgICB9IGVsc2UgewogICAgICAgIHByaW50KCI+Pj4gVEVTVCBGQUlMIik7CiAgICAgIH0KICAgICAgc3RkZXJyLndyaXRlbG4oIj4+PiBFT0YgU1RERVJSIik7CiAgICAgIHN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgIH0pOwogIH0pOwp9CgplbnVtIFJlYWRTdHJhdGVneSB7IGZyb21EYXJ0LCBmcm9tRGF0YSwgZnJvbUNvZGVnZW4gfQplbnVtIFdyaXRlU3RyYXRlZ3kgeyB0b0tlcm5lbCwgdG9EYXRhLCB0b0NvZGVnZW4sIHRvSnMgfQqElwBOTjwBGQEhL0UkAUABJiMZLCQhMwFOLAEwBE0nBFEYAUZGDiYBFhgeIAEaJAQBTgIBKARIM01GREcTKTAEDwIBQD0/AgFJRh0sIwQ/AS4JISkwMTAiLSklESQKGAgGNwQCAS8BOUQyLiI2IAsUExQWFxQVGxwaLRkcJRwaIxAVGRUSFSAYPzU0AT4oARopBAE1IE0EASlDBAErFE0EAS8cESUjPQggDTIGOwQBLzozSDIOBh8EASgsMhNKOAYEAR5ANwQBKC83BAE0PxYhBAEzTgQBFxQeBAEyIQQBKRgbBAErKTI0HwQBKEVRGFBJJSUNEU4GBAEuF0wEASYmTAY0LAYEAS42PEZBBAElMSo4BjQqOwYsBAEpKU8GLQQBJzMqOAY0SAYnTQYqBAEqMyo7BjFNBipQBi0EASo6BAErOwQBJiFODgYyHQ4GRDIEAS0ZTR0oIQYEAS04LB0SHBESEhsREjMREiUREUAIBgQBJzI4S0IcHQg5PxkdCDYXSBg1REgyNEE6SkxOURdJF0xERjJATDVBOEBFMjQ5NTscCDobCD85OUw7SUE6QTg9OThJOTY7P0BJQjE5PE5OP0BGREY/MTk+N0JCQgE7SCFCN0Y2Tk4+PDQBHjVKTSZITwFBRj9JPAEzNDEyCDAwBwUBJAE6JBw4CzYEAUYZKQQeMwQjPQQeMwQbLQQeMwQBIxlQRwQBLElKBAEfNwQBIUMEARssBB4mOAQBLU0aBAE2SgQBJAEbHTINITQiMyw5PSw8CA0fND45M0c9MzYIDSJQLi9BPzZKCDNJCCNAKCdECCJAJ0Y8KAg6PA0EGiANIEQ3DSNEN0c9I0AoJ0QIPAQdLSoxBAEyPDwBSB0jBhFPATATGBYBFBsXARQcIic2Jw8iIjYbUTcPJSI2G1EtQzc1DwYBHR8iLkZKGEk4DyMiJTYYSTMPISQjNhhJLkFQDyQkIzYuRDItDwYBGj0/QyUeRVAGLzoYKTVGPAoIDRYGARMEATUBLEM8KjI1GiAkIEYtFk0eAgFLRBpQRk8EDwIBUCtGMg8wLCsEDwIBEREaDD0CASkiHi0ESB4UAgEcI1ELHgQPAgFDSkIiJjgGQksbBBxHAgEOQUZFJQwiAR0BEC0mUgIBFQ0iAR0BExVFARolAQ8eARMXARAhARMkAQwhARRQHwEWIQETKgETHgEdJwEKTQ4BGjUBCEhLARMnARBGNgEITBQbISQBAVE5AQhMFAEITlBDAT0RJQEISUVQR0pPFwE9DSABCElNT0wBPQ0cAU9QUERQGwFNTE9NARlIRE1FTS0BFU1RS0ABH1FOTE0BRSABEzwBGkUBGz41ASZNGwEQT0kBHBFNNAEYUCsBGUsYUAErTzIBJFAXBBACAUIVRUYEEhMVDQ4GBA8CASMKDRECASRJTT07DAQbAgElMyUlMSgBGicBQgRPHwFDRDxANAEKMRhFBgEKGxYIEEoGLwQBCCNMHh8mBAIBFBcCASoBLhAbTDgZHAYYBQFMFD4oGRwUISYjQSBLJzEYCC0cUAgZRTAbHiQhDyAIKB0IBgIBNjkBIXBhY2thZ2U6Y29tcGlsZXIvc3JjL2RhcnQyanMuZGFydDhzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydJ3OLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JyBzaG93IENvbXBvbmVudCwgU3RhdGVtZW50OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnQnIHNob3cgVGFyZ2V0OwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2NvbXBpbGVyX29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZGlhZ25vc3RpY19tZXNzYWdlLmRhcnQnIHNob3cgRGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JyBzaG93IEV4cGVyaW1lbnRhbEZsYWc7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2tlcm5lbF9nZW5lcmF0b3IuZGFydCcgc2hvdyBDb21waWxlclJlc3VsdDsKCmltcG9ydCAnLi4vYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JyBzaG93IFByb2Nlc3NlZE9wdGlvbnM7CgppbXBvcnQgJy4uL2Jhc2UvbGlicmFyaWVzX3NwZWNpZmljYXRpb24uZGFydCcgc2hvdyBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uOwoKaW1wb3J0ICcuLi9mYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKaW1wb3J0ICcuLi9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IG1lc3NhZ2VNaXNzaW5nTWFpbjsKCmltcG9ydCAnLi4vZmFzdGEvc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmltcG9ydCAnLi4va2VybmVsX2dlbmVyYXRvcl9pbXBsLmRhcnQnIHNob3cgZ2VuZXJhdGVLZXJuZWxJbnRlcm5hbDsKCmltcG9ydCAnLi4vZmFzdGEvc2Nhbm5lci5kYXJ0JyBzaG93IEVycm9yVG9rZW4sIFN0cmluZ1Rva2VuLCBUb2tlbjsKCmltcG9ydCAnLi4vZmFzdGEva2VybmVsL3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JyBhcyByZWRpcmVjdGluZzsKCmltcG9ydCAnY29tcGlsZXJfc3RhdGUuZGFydCcgc2hvdyBJbml0aWFsaXplZENvbXBpbGVyU3RhdGU7CgppbXBvcnQgJ3V0aWwuZGFydCcgc2hvdyBlcXVhbExpc3RzLCBlcXVhbE1hcHM7CgpleHBvcnQgJy4uL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0JwogICAgc2hvdyBDb21waWxlck9wdGlvbnMsIHBhcnNlRXhwZXJpbWVudGFsRmxhZ3MsIHBhcnNlRXhwZXJpbWVudGFsQXJndW1lbnRzOwoKZXhwb3J0ICcuLi9hcGlfcHJvdG90eXBlL2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0JwogICAgc2hvdwogICAgICAgIERpYWdub3N0aWNNZXNzYWdlLAogICAgICAgIGdldE1lc3NhZ2VDaGFyT2Zmc2V0LAogICAgICAgIGdldE1lc3NhZ2VIZWFkZXJUZXh0LAogICAgICAgIGdldE1lc3NhZ2VMZW5ndGgsCiAgICAgICAgZ2V0TWVzc2FnZVJlbGF0ZWRJbmZvcm1hdGlvbiwKICAgICAgICBnZXRNZXNzYWdlVXJpOwoKZXhwb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JwogICAgc2hvdyBkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MsIEV4cGVyaW1lbnRhbEZsYWc7CgpleHBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcKICAgIHNob3cgRmlsZVN5c3RlbSwgRmlsZVN5c3RlbUVudGl0eSwgRmlsZVN5c3RlbUV4Y2VwdGlvbjsKCmV4cG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9rZXJuZWxfZ2VuZXJhdG9yLmRhcnQnIHNob3cga2VybmVsRm9yUHJvZ3JhbTsKCmV4cG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9zdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0JyBzaG93IERhdGFGaWxlU3lzdGVtRW50aXR5OwoKZXhwb3J0ICcuLi9jb21wdXRlX3BsYXRmb3JtX2JpbmFyaWVzX2xvY2F0aW9uLmRhcnQnCiAgICBzaG93IGNvbXB1dGVQbGF0Zm9ybUJpbmFyaWVzTG9jYXRpb247CgpleHBvcnQgJy4uL2Zhc3RhL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTG9jYXRlZE1lc3NhZ2U7CgpleHBvcnQgJy4uL2Zhc3RhL29wZXJhdG9yLmRhcnQnIHNob3cgb3BlcmF0b3JGcm9tU3RyaW5nOwoKZXhwb3J0ICcuLi9mYXN0YS9wYXJzZXIvYXN5bmNfbW9kaWZpZXIuZGFydCcgc2hvdyBBc3luY01vZGlmaWVyOwoKZXhwb3J0ICcuLi9mYXN0YS9zY2FubmVyLmRhcnQnIHNob3cgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3IsIGlzTWludXNPcGVyYXRvcjsKCmV4cG9ydCAnLi4vZmFzdGEvc2Nhbm5lci9jaGFyYWN0ZXJzLmRhcnQnCiAgICBzaG93CiAgICAgICAgJCQsCiAgICAgICAgJDAsCiAgICAgICAgJDksCiAgICAgICAgJEEsCiAgICAgICAgJEJBQ0tTTEFTSCwKICAgICAgICAkQ1IsCiAgICAgICAgJERFTCwKICAgICAgICAkRFEsCiAgICAgICAgJEhBU0gsCiAgICAgICAgJExGLAogICAgICAgICRMUywKICAgICAgICAkUFMsCiAgICAgICAgJFRBQiwKICAgICAgICAkWiwKICAgICAgICAkXywKICAgICAgICAkYSwKICAgICAgICAkZywKICAgICAgICAkcywKICAgICAgICAkejsKCmV4cG9ydCAnLi4vZmFzdGEvc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmV4cG9ydCAnLi4vZmFzdGEvdXRpbC9saW5rLmRhcnQnIHNob3cgTGluaywgTGlua0J1aWxkZXI7CgpleHBvcnQgJy4uL2Zhc3RhL3V0aWwvbGlua19pbXBsZW1lbnRhdGlvbi5kYXJ0JyBzaG93IExpbmtFbnRyeTsKCmV4cG9ydCAnLi4vZmFzdGEvdXRpbC9yZWxhdGl2aXplLmRhcnQnIHNob3cgcmVsYXRpdml6ZVVyaTsKCmV4cG9ydCAnY29tcGlsZXJfc3RhdGUuZGFydCcgc2hvdyBJbml0aWFsaXplZENvbXBpbGVyU3RhdGU7Cgp2b2lkIGNsZWFyU3RyaW5nVG9rZW5DYW5vbmljYWxpemVyKCkgewogIC8vIFRPRE8oYWhlKTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMuIEZhc3RhIHNob3VsZCB0YWtlIGNhcmUgb2YKICAvLyBjbGVhcmluZyB0aGUgY2FjaGUgd2hlbi4KICBTdHJpbmdUb2tlbi5jYW5vbmljYWxpemVyLmNsZWFyKCk7Cn0KCkluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSBpbml0aWFsaXplQ29tcGlsZXIoCiAgICBJbml0aWFsaXplZENvbXBpbGVyU3RhdGUgb2xkU3RhdGUsCiAgICBUYXJnZXQgdGFyZ2V0LAogICAgVXJpIGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksCiAgICBMaXN0PFVyaT4gbGlua2VkRGVwZW5kZW5jaWVzLAogICAgVXJpIHBhY2thZ2VzRmlsZVVyaSwKICAgIHtMaXN0PFVyaT4gZGVwZW5kZW5jaWVzLAogICAgTWFwPEV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGV4cGVyaW1lbnRhbEZsYWdzLAogICAgYm9vbCB2ZXJpZnk6IGZhbHNlfSkgewogIGxpbmtlZERlcGVuZGVuY2llcy5zb3J0KChhLCBiKSA9PiBhLnRvU3RyaW5nKCkuY29tcGFyZVRvKGIudG9TdHJpbmcoKSkpOwoKICBpZiAob2xkU3RhdGUgIT0gbnVsbCAmJgogICAgICBvbGRTdGF0ZS5vcHRpb25zLnBhY2thZ2VzRmlsZVVyaSA9PSBwYWNrYWdlc0ZpbGVVcmkgJiYKICAgICAgb2xkU3RhdGUub3B0aW9ucy5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID09IGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgJiYKICAgICAgZXF1YWxMaXN0cyhvbGRTdGF0ZS5vcHRpb25zLmxpbmtlZERlcGVuZGVuY2llcywgbGlua2VkRGVwZW5kZW5jaWVzKSAmJgogICAgICBlcXVhbE1hcHMob2xkU3RhdGUub3B0aW9ucy5leHBlcmltZW50YWxGbGFncywgZXhwZXJpbWVudGFsRmxhZ3MpKSB7CiAgICByZXR1cm4gb2xkU3RhdGU7CiAgfQoKICBDb21waWxlck9wdGlvbnMgb3B0aW9ucyA9IG5ldyBDb21waWxlck9wdGlvbnMoKQogICAgLi50YXJnZXQgPSB0YXJnZXQKICAgIC4ubGVnYWN5TW9kZSA9IHRhcmdldC5sZWdhY3lNb2RlCiAgICAuLmxpbmtlZERlcGVuZGVuY2llcyA9IGxpbmtlZERlcGVuZGVuY2llcwogICAgLi5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID0gbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaQogICAgLi5wYWNrYWdlc0ZpbGVVcmkgPSBwYWNrYWdlc0ZpbGVVcmkKICAgIC4uZXhwZXJpbWVudGFsRmxhZ3MgPSBleHBlcmltZW50YWxGbGFncwogICAgLi52ZXJpZnkgPSB2ZXJpZnk7CgogIFByb2Nlc3NlZE9wdGlvbnMgcHJvY2Vzc2VkT3B0cyA9IG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMpOwoKICByZXR1cm4gbmV3IEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZShvcHRpb25zLCBwcm9jZXNzZWRPcHRzKTsKfQoKRnV0dXJlPENvbXBvbmVudD4gY29tcGlsZSgKICAgIEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSBzdGF0ZSwKICAgIGJvb2wgdmVyYm9zZSwKICAgIEZpbGVTeXN0ZW0gZmlsZVN5c3RlbSwKICAgIERpYWdub3N0aWNNZXNzYWdlSGFuZGxlciBvbkRpYWdub3N0aWMsCiAgICBVcmkgaW5wdXQpIGFzeW5jIHsKICBDb21waWxlck9wdGlvbnMgb3B0aW9ucyA9IHN0YXRlLm9wdGlvbnM7CiAgb3B0aW9ucwogICAgLi5vbkRpYWdub3N0aWMgPSBvbkRpYWdub3N0aWMKICAgIC4udmVyYm9zZSA9IHZlcmJvc2UKICAgIC4uZmlsZVN5c3RlbSA9IGZpbGVTeXN0ZW07CgogIFByb2Nlc3NlZE9wdGlvbnMgcHJvY2Vzc2VkT3B0cyA9IHN0YXRlLnByb2Nlc3NlZE9wdHM7CiAgcHJvY2Vzc2VkT3B0cy5pbnB1dHMuY2xlYXIoKTsKICBwcm9jZXNzZWRPcHRzLmlucHV0cy5hZGQoaW5wdXQpOwogIHByb2Nlc3NlZE9wdHMuY2xlYXJGaWxlU3lzdGVtQ2FjaGUoKTsKCiAgQ29tcGlsZXJSZXN1bHQgY29tcGlsZXJSZXN1bHQgPSBhd2FpdCBDb21waWxlckNvbnRleHQucnVuV2l0aE9wdGlvbnMoCiAgICAgIHByb2Nlc3NlZE9wdHMsIChDb21waWxlckNvbnRleHQgY29udGV4dCkgYXN5bmMgewogICAgQ29tcGlsZXJSZXN1bHQgY29tcGlsZXJSZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZUtlcm5lbEludGVybmFsKCk7CiAgICBDb21wb25lbnQgY29tcG9uZW50ID0gY29tcGlsZXJSZXN1bHQ/LmNvbXBvbmVudDsKICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoY29tcG9uZW50Lm1haW5NZXRob2QgPT0gbnVsbCkgewogICAgICBjb250ZXh0Lm9wdGlvbnMucmVwb3J0KAogICAgICAgICAgbWVzc2FnZU1pc3NpbmdNYWluLndpdGhMb2NhdGlvbihpbnB1dCwgLTEsIDApLCBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGNvbXBpbGVyUmVzdWx0OwogIH0pOwoKICAvLyBSZW1vdmUgdGhlc2UgcGFyYW1ldGVycyBmcm9tIFtvcHRpb25zXSAtIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQgYW5kCiAgLy8gcmV0YWluIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIGNvbXBpbGUuIChodHRwOi8vZGFydGJ1Zy5jb20vMzM3MDgpCiAgb3B0aW9ucy5vbkRpYWdub3N0aWMgPSBudWxsOwogIG9wdGlvbnMuZmlsZVN5c3RlbSA9IG51bGw7CiAgcmV0dXJuIGNvbXBpbGVyUmVzdWx0Py5jb21wb25lbnQ7Cn0KCk9iamVjdCB0b2tlblRvU3RyaW5nKE9iamVjdCB2YWx1ZSkgewogIC8vIFRPRE8oYWhlKTogVGhpcyBtZXRob2QgaXMgbW9zdCBsaWtlbHkgdW5uZWNlc3NhcnkuIERhcnQyanMgZG9lc24ndCBzZWUKICAvLyB0b2tlbnMgYW55bW9yZS4KICBpZiAodmFsdWUgaXMgRXJyb3JUb2tlbikgewogICAgLy8gU2hvdWxkbid0IGhhcHBlbi4KICAgIHJldHVybiB2YWx1ZS5hc3NlcnRpb25NZXNzYWdlLm1lc3NhZ2U7CiAgfSBlbHNlIGlmICh2YWx1ZSBpcyBUb2tlbikgewogICAgcmV0dXJuIHZhbHVlLmxleGVtZTsKICB9IGVsc2UgewogICAgcmV0dXJuIHZhbHVlOwogIH0KfQoKLy8vIFJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IFt0YXJnZXRdIGFjY29yZGluZwovLy8gdG8gdGhlIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIFtqc29uXSBmaWxlLgovLy8KLy8vIERhcnQyanMgdXNlcyB0aGVzZSBuYW1lcyB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIGxpYnJhcnkgZW52aXJvbm1lbnQKLy8vIGNvbnN0YW50cywgc3VjaCBhcyBgY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQubGlicmFyeS5pbyIpYC4KLy8gVE9ETyhzaWdtdW5kKTogcmVmYWN0b3IgZGFydDJqcyBzbyB0aGF0IHdlIGNhbiByZXRyaWV2ZSB0aGlzIGRhdGEgbGF0ZXIgaW4KLy8gdGhlIGNvbXBpbGF0aW9uIHBpcGVsaW5lLiBBdCB0aGF0IHBvaW50IHdlIGNhbiBnZXQgaXQgZnJvbSB0aGUgQ0ZFCi8vIHJlc3VsdHMgZGlyZWN0bHkgYW5kIGNvbXBsZXRlbHkgaGlkZSB0aGUgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gZmlsZSBmcm9tCi8vIGRhcnQyanMuCi8vIFRPRE8oc2lnbXVuZCk6IGRlbGV0ZSBhZnRlciBhbGwgY29uc3RhbnQgZXZhbHVhdGlvbiBpcyBkb25lIGluIHRoZSBDRkUsIGFzCi8vIHRoaXMgZGF0YSB3aWxsIG5vIGxvbmdlciBiZSBuZWVkZWQgb24gdGhlIGRhcnQyanMgc2lkZS4KSXRlcmFibGU8U3RyaW5nPiBnZXRTdXBwb3J0ZWRMaWJyYXJ5TmFtZXMoCiAgICBVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSwgU3RyaW5nIGpzb24sIFN0cmluZyB0YXJnZXQpIHsKICByZXR1cm4gTGlicmFyaWVzU3BlY2lmaWNhdGlvbi5wYXJzZShsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpLCBqc29uKQogICAgICAuc3BlY2lmaWNhdGlvbkZvcih0YXJnZXQpCiAgICAgIC5hbGxMaWJyYXJpZXMKICAgICAgLndoZXJlKChsKSA9PiBsLmlzU3VwcG9ydGVkKQogICAgICAubWFwKChsKSA9PiBsLm5hbWUpOwp9CgovLy8gRGVzdWdhciBBUEkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgW21lbWJlcl0gaXMgYSByZWRpcmVjdGluZyBmYWN0b3J5Ci8vLyBjb25zdHJ1Y3Rvci4KLy8gVE9ETyhzaWdtdW5kKTogRGVsZXRlIHRoaXMgQVBJIG9uY2UgYG1lbWJlci5pc1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yYAovLyBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgZm9yIHBhdGNoIGZpbGVzIChJc3N1ZSAjMzM0OTUpLgpib29sIGlzUmVkaXJlY3RpbmdGYWN0b3J5KGlyLlByb2NlZHVyZSBtZW1iZXIpIHsKICBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICBTdGF0ZW1lbnQgYm9keSA9IG1lbWJlci5mdW5jdGlvbi5ib2R5OwogICAgaWYgKGJvZHkgaXMgcmVkaXJlY3RpbmcuUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSkgcmV0dXJuIHRydWU7CiAgICBpZiAoYm9keSBpcyBpci5FeHByZXNzaW9uU3RhdGVtZW50KSB7CiAgICAgIGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IGJvZHkuZXhwcmVzc2lvbjsKICAgICAgaWYgKGV4cHJlc3Npb24gaXMgaXIuTGV0KSB7CiAgICAgICAgaWYgKGV4cHJlc3Npb24udmFyaWFibGUubmFtZSA9PSByZWRpcmVjdGluZy5sZXROYW1lKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CoDtAE5OPAEhAT8BKAE5AUYBUQFJATwBRQE/AUsBPgE8AS8BRAFEAUcBPAEvATBOATIJGx4eGiYXATI1ASs8AUcBTwE0KgE4ATkBQQFOASoJDAwMDBQNDg0PDQ0NDgwMDAwMDAEvATkBQAE7ATwBJ0weJQIBLScTIyIZHTMbSwEaPVFNShUEATIWJS48KCwXAUsBPwIBGyQSGysXKwoiGB8BOCAjKAFIN0Q1KCgeShMGGwYBTEgfHSQCASVMFR0ZKx8ZCxIEAgFQMARLSE5GTgxOOytBRyAUIxsCAUcRUDwxMStBKjIiPxcKCAYEEAIBL3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0K3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvY29tcGlsZXJfbmV3LmRhcnSa4i8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTmV3IENvbXBpbGVyIEFQSS4gVGhpcyBBUEkgaXMgdW5kZXIgY29uc3RydWN0aW9uLCB1c2Ugb25seSBpbnRlcm5hbGx5IG9yCi8vLyBpbiB1bml0dGVzdHMuCgpsaWJyYXJ5IGNvbXBpbGVyX25ldzsKCmltcG9ydCAnZGFydDphc3luYyc7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKCmltcG9ydCAnY29tcGlsZXIuZGFydCcgc2hvdyBEaWFnbm9zdGljOwppbXBvcnQgJ3NyYy9hcGlpbXBsLmRhcnQnOwppbXBvcnQgJ3NyYy9vcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zOwoKZXhwb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IERpYWdub3N0aWM7CgovLyBVbmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLCBwYXNzaW5nIGBudWxsYCBmb3IgYW55IGFyZ3VtZW50IHRvIHRoZQovLyBtZXRob2RzIG9mIGxpYnJhcnkgd2lsbCByZXN1bHQgaW4gYW4gRXJyb3IgYmVpbmcgdGhyb3duLgoKLy8vIElucHV0IGtpbmRzIHVzZWQgYnkgW0NvbXBpbGVySW5wdXQucmVhZEZyb21VcmldLgplbnVtIElucHV0S2luZCB7CiAgLy8vIERhdGEgaXMgcmVhZCBhcyBVVEY4IGVpdGhlciBhcyBhIFtTdHJpbmddIG9yIGEgemVyby10ZXJtaW5hdGVkCiAgLy8vIGBMaXN0PGludD5gLgogIFVURjgsCgogIC8vLyBEYXRhIGlzIHJlYWQgYXMgYnl0ZXMgaW4gYSBgTGlzdDxpbnQ+YC4KICBiaW5hcnksCn0KCi8vLyBJbnRlcmZhY2UgZm9yIGRhdGEgcmVhZCB0aHJvdWdoIFtDb21waWxlcklucHV0LnJlYWRGcm9tVXJpXS4KYWJzdHJhY3QgY2xhc3MgSW5wdXQ8VD4gewogIC8vLyBUaGUgVVJJIGZyb20gd2hpY2ggZGF0YSB3YXMgcmVhZC4KICBVcmkgZ2V0IHVyaTsKCiAgLy8vIFRoZSBmb3JtYXQgb2YgdGhlIHJlYWQgW2RhdGFdLgogIElucHV0S2luZCBnZXQgaW5wdXRLaW5kOwoKICAvLy8gVGhlIHJhdyBkYXRhIHJlYWQgZnJvbSBbdXJpXS4KICBUIGdldCBkYXRhOwp9CgovLy8gSW50ZXJmYWNlIGZvciBwcm92aWRpbmcgdGhlIGNvbXBpbGVyIHdpdGggaW5wdXQuIFRoYXQgaXMsIERhcnQgc291cmNlIGZpbGVzLAovLy8gcGFja2FnZSBjb25maWcgZmlsZXMsIGV0Yy4KYWJzdHJhY3QgY2xhc3MgQ29tcGlsZXJJbnB1dCB7CiAgLy8vIFJldHVybnMgYSBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgdG8gdGhlIHNvdXJjZSBjb3JyZXNwb25kaW5nIHRvIFt1cmldLgogIC8vLyBJZiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoaXMgZXhjZXB0aW9uLgogIC8vLwogIC8vLyBJZiBbaW5wdXRLaW5kXSBpcyBgSW5wdXRLaW5kLlVURjhgIHRoZSBzb3VyY2UgY2FuIGJlIHJlcHJlc2VudGVkIGVpdGhlciBhcwogIC8vLyBhIHplcm8tdGVybWluYXRlZCBgTGlzdDxpbnQ+YCBvZiBVVEYtOCBieXRlcyBvciBhcyBhIFtTdHJpbmddLiBJZgogIC8vLyBbaW5wdXRLaW5kXSBpcyBgSW5wdXRLaW5kLmJpbmFyeWAgdGhlIHNvdXJjZSBpcyBhIHJlYWQgYSBgTGlzdDxpbnQ+YC4KICAvLy8KICAvLy8gVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgLy8vCiAgLy8vIEl0IGlzIHJlY29tbWVuZGVkIHRvIHJldHVybiBhIFVURi04IGVuY29kZWQgbGlzdCBvZiBieXRlcyBiZWNhdXNlIHRoZQogIC8vLyBzY2FubmVyIGlzIG1vcmUgZWZmaWNpZW50IGluIHRoaXMgY2FzZS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBkYXRhIHN0cnVjdHVyZQogIC8vLyBpcyBleHBlY3RlZCB0byBob2xkIGEgemVybyBlbGVtZW50IGF0IHRoZSBsYXN0IHBvc2l0aW9uLiBJZiB0aGlzIGlzIG5vdAogIC8vLyB0aGUgY2FzZSwgdGhlIGVudGlyZSBkYXRhIHN0cnVjdHVyZSBpcyBjb3BpZWQgYmVmb3JlIHNjYW5uaW5nLgogIEZ1dHVyZTxJbnB1dD4gcmVhZEZyb21VcmkoVXJpIHVyaSwge0lucHV0S2luZCBpbnB1dEtpbmQ6IElucHV0S2luZC5VVEY4fSk7Cn0KCi8vLyBPdXRwdXQgdHlwZXMgdXNlZCBpbiBgQ29tcGlsZXJPdXRwdXQuY3JlYXRlT3V0cHV0U2lua2AuCmVudW0gT3V0cHV0VHlwZSB7CiAgLy8vIFRoZSBtYWluIEphdmFTY3JpcHQgb3V0cHV0LgogIGpzLAoKICAvLy8gQSBkZWZlcnJlZCBKYXZhU2NyaXB0IG91dHB1dCBwYXJ0LgogIGpzUGFydCwKCiAgLy8vIEEgc291cmNlIG1hcCBmb3IgYSBKYXZhU2NyaXB0IG91dHB1dC4KICBzb3VyY2VNYXAsCgogIC8vLyBEdW1wIGluZm8gb3V0cHV0LgogIGR1bXBJbmZvLAoKICAvLy8gRGVmZXJyZWQgbWFwIG91dHB1dC4KICBkZWZlcnJlZE1hcCwKCiAgLy8vIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIG91dHB1dCB1c2VkIGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyLgogIGRlYnVnLAp9CgovLy8gU2luayBpbnRlcmZhY2UgdXNlZCBmb3IgZ2VuZXJhdGluZyBvdXRwdXQgZnJvbSB0aGUgY29tcGlsZXIuCmFic3RyYWN0IGNsYXNzIE91dHB1dFNpbmsgewogIC8vLyBBZGRzIFt0ZXh0XSB0byB0aGUgc2luay4KICB2b2lkIGFkZChTdHJpbmcgdGV4dCk7CgogIC8vLyBDbG9zZXMgdGhlIHNpbmsuCiAgdm9pZCBjbG9zZSgpOwp9CgovLy8gU2luayBpbnRlcmZhY2UgdXNlZCBmb3IgZ2VuZXJhdGluZyBiaW5hcnkgZGF0YSBmcm9tIHRoZSBjb21waWxlci4KYWJzdHJhY3QgY2xhc3MgQmluYXJ5T3V0cHV0U2luayB7CiAgLy8vIFdyaXRlcyBpbmRpY2VzIFtzdGFydF0gdG8gW2VuZF0gb2YgW2J1ZmZlcl0gdG8gdGhlIHNpbmsuCiAgdm9pZCB3cml0ZShMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvLy8gQ2xvc2VzIHRoZSBzaW5rLgogIHZvaWQgY2xvc2UoKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgcHJvZHVjaW5nIG91dHB1dCBmcm9tIHRoZSBjb21waWxlci4gVGhhdCBpcywgSmF2YVNjcmlwdCB0YXJnZXQKLy8vIGZpbGVzLCBzb3VyY2UgbWFwIGZpbGVzLCBkdW1wIGluZm8gZmlsZXMsIGV0Yy4KYWJzdHJhY3QgY2xhc3MgQ29tcGlsZXJPdXRwdXQgewogIC8vLyBSZXR1cm5zIGFuIFtPdXRwdXRTaW5rXSB0aGF0IHdpbGwgc2VydmUgYXMgY29tcGlsZXIgb3V0cHV0IGZvciB0aGUgZ2l2ZW4KICAvLy8gY29tcG9uZW50LgogIC8vLwogIC8vLyBDb21wb25lbnRzIGFyZSBpZGVudGlmaWVkIGJ5IFtuYW1lXSwgW2V4dGVuc2lvbl0sIGFuZCBbdHlwZV0uIEJ5CiAgLy8vIGNvbnZlbnRpb24sIHRoZSBlbXB0eSBzdHJpbmcgYCIiYCB3aWxsIHJlcHJlc2VudCB0aGUgbWFpbiBvdXRwdXQgb2YgdGhlCiAgLy8vIHByb3ZpZGVkIFt0eXBlXS4gW25hbWVdIGFuZCBbZXh0ZW5zaW9uXSBhcmUgb3RoZXJ3aXNlIHN1Z2dlc3RpdmUuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwbGFjZSBbbmFtZV0gYW5kIFtleHRlbnNpb25dIHdpdGggc29tZXRoaW5nIGxpa2UKICAvLyBbaWRdIGFuZCBbdXJpXS4KICBPdXRwdXRTaW5rIGNyZWF0ZU91dHB1dFNpbmsoU3RyaW5nIG5hbWUsIFN0cmluZyBleHRlbnNpb24sIE91dHB1dFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtCaW5hcnlPdXRwdXRTaW5rXSB0aGF0IHdpbGwgc2VydmUgYXMgY29tcGlsZXIgb3V0cHV0IGZvciB0aGUKICAvLy8gZ2l2ZW4gVVJJLgogIEJpbmFyeU91dHB1dFNpbmsgY3JlYXRlQmluYXJ5U2luayhVcmkgdXJpKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgcmVjZWl2aW5nIGRpYWdub3N0aWMgbWVzc2FnZSBmcm9tIHRoZSBjb21waWxlci4gVGhhdCBpcywKLy8vIGVycm9ycywgd2FybmluZ3MsIGhpbnRzLCBldGMuCmFic3RyYWN0IGNsYXNzIENvbXBpbGVyRGlhZ25vc3RpY3MgewogIC8vLyBJbnZva2VkIGJ5IHRoZSBjb21waWxlciB0byByZXBvcnQgZGlhZ25vc3RpY3MuIElmIFt1cmldIGlzIGBudWxsYCwgc28gYXJlCiAgLy8vIFtiZWdpbl0gYW5kIFtlbmRdLiBObyBvdGhlciBhcmd1bWVudHMgbWF5IGJlIGBudWxsYC4gSWYgW3VyaV0gaXMgbm90CiAgLy8vIGBudWxsYCwgbmVpdGhlciBhcmUgW2JlZ2luXSBhbmQgW2VuZF0uIFt1cmldIGluZGljYXRlcyB0aGUgY29tcGlsYXRpb24KICAvLy8gdW5pdCBmcm9tIHdoZXJlIHRoZSBkaWFnbm9zdGljIG9yaWdpbmF0ZXMuIFtiZWdpbl0gYW5kIFtlbmRdIGFyZQogIC8vLyB6ZXJvLWJhc2VkIGNoYXJhY3RlciBvZmZzZXRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tcGlsYXRpb24gdW5pdC4KICAvLy8gW21lc3NhZ2VdIGlzIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2UsIGFuZCBba2luZF0gaW5kaWNhdGVzIGluZGljYXRlcyB3aGF0CiAgLy8vIGtpbmQgb2YgZGlhZ25vc3RpYyBpdCBpcy4KICAvLy8KICAvLy8gRXhwZXJpbWVudGFsOiBbY29kZV0gZ2l2ZXMgYWNjZXNzIHRvIGFuIGlkIGZvciB0aGUgbWVzc2FnZXMuIEN1cnJlbnRseSBpdAogIC8vLyBpcyB0aGUgW01lc3NhZ2VdIHVzZWQgdG8gY3JlYXRlIHRoZSBkaWFnbm9zdGljLCBpZiBhdmFpbGFibGUsIGZyb20gd2hpY2gKICAvLy8gdGhlIFtNZXNzYWdlS2luZF0gaXMgYWNjZXNzaWJsZS4KICB2b2lkIHJlcG9ydCgKICAgICAgdmFyIGNvZGUsIFVyaSB1cmksIGludCBiZWdpbiwgaW50IGVuZCwgU3RyaW5nIHRleHQsIERpYWdub3N0aWMga2luZCk7Cn0KCi8vLyBJbmZvcm1hdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24uCmNsYXNzIENvbXBpbGF0aW9uUmVzdWx0IHsKICAvLy8gYHRydWVgIGlmIHRoZSBjb21waWxhdGlvbiBzdWNjZWVkZWQsIHRoYXQgaXMsIGNvbXBpbGF0aW9uIGRpZG4ndCBmYWlsIGR1ZQogIC8vLyB0byBjb21waWxlLXRpbWUgZXJyb3JzIGFuZC9vciBpbnRlcm5hbCBlcnJvcnMuCiAgZmluYWwgYm9vbCBpc1N1Y2Nlc3M7CgogIC8vLyBUaGUgY29tcGlsZXIgb2JqZWN0IHVzZWQgZm9yIHRoZSBjb21waWxhdGlvbi4KICAvLy8KICAvLy8gTm90ZTogVGhlIHR5cGUgb2YgW2NvbXBpbGVyXSBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYW5kIG1heSB2YXJ5LgogIC8vLyBVc2Ugb25seSBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nLgogIGZpbmFsIGNvbXBpbGVyOwoKICAvLy8gU2hhcmVkIHN0YXRlIGJldHdlZW4gY29tcGlsYXRpb25zLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gc3BlZWQgdXAgYmF0Y2ggbW9kZS4KICBmaW5hbCBmZS5Jbml0aWFsaXplZENvbXBpbGVyU3RhdGUga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOwoKICBDb21waWxhdGlvblJlc3VsdCh0aGlzLmNvbXBpbGVyLAogICAgICB7dGhpcy5pc1N1Y2Nlc3M6IHRydWUsIHRoaXMua2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOiBudWxsfSk7Cn0KCi8vLyBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHRvIGEgW0NvbXBpbGF0aW9uUmVzdWx0XSB3aGVuIHRoZSBEYXJ0Ci8vLyBzb3VyY2VzIGluIFtvcHRpb25zXSBoYXZlIGJlZW4gY29tcGlsZWQuCi8vLwovLy8gVGhlIGdlbmVyYXRlZCBjb21waWxlciBvdXRwdXQgaXMgb2J0YWluZWQgYnkgcHJvdmlkaW5nIGEgW2NvbXBpbGVyT3V0cHV0XS4KLy8vCi8vLyBJZiB0aGUgY29tcGlsYXRpb24gZmFpbHMsIHRoZSBmdXR1cmUncyBgQ29tcGlsYXRpb25SZXN1bHQuaXNTdWNjZXNzYCBpcwovLy8gYGZhbHNlYCBhbmQgW0NvbXBpbGVyRGlhZ25vc3RpY3MucmVwb3J0XSBvbiBbY29tcGlsZXJEaWFnbm9zdGljc10KLy8vIGlzIGludm9rZWQgYXQgbGVhc3Qgb25jZSB3aXRoIGBraW5kID09IERpYWdub3N0aWMuRVJST1JgIG9yCi8vLyBga2luZCA9PSBEaWFnbm9zdGljLkNSQVNIYC4KRnV0dXJlPENvbXBpbGF0aW9uUmVzdWx0PiBjb21waWxlKAogICAgQ29tcGlsZXJPcHRpb25zIGNvbXBpbGVyT3B0aW9ucywKICAgIENvbXBpbGVySW5wdXQgY29tcGlsZXJJbnB1dCwKICAgIENvbXBpbGVyRGlhZ25vc3RpY3MgY29tcGlsZXJEaWFnbm9zdGljcywKICAgIENvbXBpbGVyT3V0cHV0IGNvbXBpbGVyT3V0cHV0KSB7CiAgaWYgKGNvbXBpbGVyT3B0aW9ucyA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiY29tcGlsZXJPcHRpb25zIG11c3QgYmUgbm9uLW51bGwiKTsKICB9CiAgaWYgKGNvbXBpbGVySW5wdXQgPT0gbnVsbCkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoImNvbXBpbGVySW5wdXQgbXVzdCBiZSBub24tbnVsbCIpOwogIH0KICBpZiAoY29tcGlsZXJEaWFnbm9zdGljcyA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiY29tcGlsZXJEaWFnbm9zdGljcyBtdXN0IGJlIG5vbi1udWxsIik7CiAgfQogIGlmIChjb21waWxlck91dHB1dCA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiY29tcGlsZXJPdXRwdXQgbXVzdCBiZSBub24tbnVsbCIpOwogIH0KCiAgQ29tcGlsZXJJbXBsIGNvbXBpbGVyID0gbmV3IENvbXBpbGVySW1wbCgKICAgICAgY29tcGlsZXJJbnB1dCwgY29tcGlsZXJPdXRwdXQsIGNvbXBpbGVyRGlhZ25vc3RpY3MsIGNvbXBpbGVyT3B0aW9ucyk7CiAgcmV0dXJuIGNvbXBpbGVyLnJ1bihjb21waWxlck9wdGlvbnMuZW50cnlQb2ludCkudGhlbigoYm9vbCBzdWNjZXNzKSB7CiAgICByZXR1cm4gbmV3IENvbXBpbGF0aW9uUmVzdWx0KGNvbXBpbGVyLAogICAgICAgIGlzU3VjY2Vzczogc3VjY2VzcywKICAgICAgICBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGU6CiAgICAgICAgICAgIGNvbXBpbGVyLmtlcm5lbExvYWRlci5pbml0aWFsaXplZENvbXBpbGVyU3RhdGUpOwogIH0pOwp9CoDFAE5OPAFNEgEWARUBQAEoGzABKAFFPAE1EUUTCAEuCgIBQRooDwElGwEkDgIBUR8fTEgGUUhMBisGTFFORU0CATwSIgYBKQoBLA0BGAwBGw8BRgkCAUEcHxkBFxACAUYiPzoBFxACAVEzIE8RBkdOSE0VTwFPES4CAUsiJVBLTUdPTyAGUE8nD0wCATAaUDUYATQGTSoSASkGK0QBI0oCAUstBE8ETEZAICMlIS0lIUEEHz8EJUUEIEAEASxMSCscKD0GAgEicGFja2FnZTpjb21waWxlci9jb21waWxlcl9uZXcuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tYW5kbGluZV9vcHRpb25zLmRhcnScWS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY21kbGluZS5vcHRpb25zOwoKLy8vIENvbW1hbmRsaW5lIGZsYWdzIHVzZWQgaW4gYGRhcnQyanMuZGFydGAgYW5kL29yIGBhcGlpbXBsLmRhcnRgLgpjbGFzcyBGbGFncyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhbGxvd01vY2tDb21waWxhdGlvbiA9ICctLWFsbG93LW1vY2stY29tcGlsYXRpb24nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgYWxsb3dOYXRpdmVFeHRlbnNpb25zID0gJy0tYWxsb3ctbmF0aXZlLWV4dGVuc2lvbnMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGlzYWJsZUlubGluaW5nID0gJy0tZGlzYWJsZS1pbmxpbmluZyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaXNhYmxlUHJvZ3JhbVNwbGl0ID0gJy0tZGlzYWJsZS1wcm9ncmFtLXNwbGl0JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGRpc2FibGVEaWFnbm9zdGljQ29sb3JzID0gJy0tZGlzYWJsZS1kaWFnbm9zdGljLWNvbG9ycyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaXNhYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpcyA9CiAgICAgICctLWRpc2FibGUtbmF0aXZlLWxpdmUtdHlwZS1hbmFseXNpcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB1c2VUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbiA9CiAgICAgICctLXVzZS10cml2aWFsLWFic3RyYWN0LXZhbHVlLWRvbWFpbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaXNhYmxlVHlwZUluZmVyZW5jZSA9ICctLWRpc2FibGUtdHlwZS1pbmZlcmVuY2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGlzYWJsZVJ0aU9wdGltaXphdGlvbiA9ICctLWRpc2FibGUtcnRpLW9wdGltaXphdGlvbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkdW1wSW5mbyA9ICctLWR1bXAtaW5mbyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmFibGVBc3NlcnRNZXNzYWdlID0gJy0tYXNzZXJ0LW1lc3NhZ2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZW5hYmxlQ2hlY2tlZE1vZGUgPSAnLS1lbmFibGUtY2hlY2tlZC1tb2RlJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuYWJsZUFzc2VydHMgPSAnLS1lbmFibGUtYXNzZXJ0cyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmFibGVEaWFnbm9zdGljQ29sb3JzID0gJy0tZW5hYmxlLWRpYWdub3N0aWMtY29sb3JzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMgPQogICAgICAnLS1leHBlcmltZW50YWwtdHJhY2stYWxsb2NhdGlvbnMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZXhwZXJpbWVudGFsQWxsb2NhdGlvbnNQYXRoID0KICAgICAgJy0tZXhwZXJpbWVudGFsLWFsbG9jYXRpb25zLXBhdGgnOwoKICAvLyBUZW1wb3JhcnkgZXhwZXJpbWVudCBmb3IgY29kZSBnZW5lcmF0aW9uIG9mIGxvY2FscyBmb3IgZnJlcXVlbnRseSB1c2VkCiAgLy8gJ3RoaXMnIGFuZCBjb25zdGFudHMuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBleHBlcmltZW50TG9jYWxOYW1lcyA9ICctLWV4cGVyaW1lbnQtY29kZS0xJzsKCiAgLy8gRXhwZXJpbWVudGFsbHkgdHJ5IHRvIGZvcmNlIHBhcnQtZmlsZSBmdW5jdGlvbnMgdG8gYmUgc2VlbiBhcyBJSUZFcy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zID0gJy0tZXhwZXJpbWVudC1jb2RlLTInOwoKICAvLyBFeHBlcmltZW50YWxseSByZWx5IG9uIEphdmFTY3JpcHQgVG9Cb29sZWFuIGNvbnZlcnNpb25zLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgZXhwZXJpbWVudFRvQm9vbGVhbiA9ICctLWV4cGVyaW1lbnQtY29kZS0zJzsKCiAgLy8gQWRkIGluc3RydW1lbnRhdGlvbiB0byBsb2cgZXZlcnkgbWV0aG9kIGNhbGwuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBleHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbiA9CiAgICAgICctLWV4cGVyaW1lbnQtY2FsbC1pbnN0cnVtZW50YXRpb24nOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4cGVyaW1lbnROZXdSdGkgPSAnLS1leHBlcmltZW50LW5ldy1ydGknOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuYWJsZUxhbmd1YWdlRXhwZXJpbWVudHMgPSAnLS1lbmFibGUtZXhwZXJpbWVudCc7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgZmFzdFN0YXJ0dXAgPSAnLS1mYXN0LXN0YXJ0dXAnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZmF0YWxXYXJuaW5ncyA9ICctLWZhdGFsLXdhcm5pbmdzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGdlbmVyYXRlQ29kZVdpdGhDb21waWxlVGltZUVycm9ycyA9CiAgICAgICctLWdlbmVyYXRlLWNvZGUtd2l0aC1jb21waWxlLXRpbWUtZXJyb3JzJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBwcmV2aWV3RGFydDIgPSAnLS1wcmV2aWV3LWRhcnQtMic7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgb21pdEltcGxpY2l0Q2hlY2tzID0gJy0tb21pdC1pbXBsaWNpdC1jaGVja3MnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgb21pdEFzQ2FzdHMgPSAnLS1vbWl0LWFzLWNhc3RzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGxheFJ1bnRpbWVUeXBlVG9TdHJpbmcgPSAnLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZyc7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcGxhdGZvcm1CaW5hcmllcyA9ICctLXBsYXRmb3JtLWJpbmFyaWVzPS4rJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBtaW5pZnkgPSAnLS1taW5pZnknOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbm9GcmVxdWVuY3lCYXNlZE1pbmlmaWNhdGlvbiA9CiAgICAgICctLW5vLWZyZXF1ZW5jeS1iYXNlZC1taW5pZmljYXRpb24nOwogIC8vIERpc2FibGVzIG1pbmlmaWNhdGlvbiBldmVuIGlmIGVuYWJsZWQgYnkgb3RoZXIgb3B0aW9ucywgZS5nLiAnLU8yJy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIG5vTWluaWZ5ID0gJy0tbm8tbWluaWZ5JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5vU291cmNlTWFwcyA9ICctLW5vLXNvdXJjZS1tYXBzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHByZXNlcnZlVXJpcyA9ICctLXByZXNlcnZlLXVyaXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc2hvd1BhY2thZ2VXYXJuaW5ncyA9ICctLXNob3ctcGFja2FnZS13YXJuaW5ncyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdXBwcmVzc0hpbnRzID0gJy0tc3VwcHJlc3MtaGludHMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3VwcHJlc3NXYXJuaW5ncyA9ICctLXN1cHByZXNzLXdhcm5pbmdzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRlcnNlID0gJy0tdGVyc2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGVzdE1vZGUgPSAnLS10ZXN0LW1vZGUnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHJ1c3RQcmltaXRpdmVzID0gJy0tdHJ1c3QtcHJpbWl0aXZlcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0cnVzdFR5cGVBbm5vdGF0aW9ucyA9ICctLXRydXN0LXR5cGUtYW5ub3RhdGlvbnMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgPQogICAgICAnLS1leHBlcmltZW50YWwtdHJ1c3QtanMtaW50ZXJvcC10eXBlLWFubm90YXRpb25zJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9ICctLWNzcCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB1c2VNdWx0aVNvdXJjZUluZm8gPSAnLS11c2UtbXVsdGktc291cmNlLWluZm8nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdXNlTmV3U291cmNlSW5mbyA9ICctLXVzZS1uZXctc291cmNlLWluZm8nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdmVyYm9zZSA9ICctLXZlcmJvc2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcHJvZ3Jlc3MgPSAnLS1zaG93LWludGVybmFsLXByb2dyZXNzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHZlcnNpb24gPSAnLS12ZXJzaW9uJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaWxsRGVwZW5kZW5jaWVzID0gJy0tZGlsbC1kZXBlbmRlbmNpZXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcmVhZERhdGEgPSAnLS1yZWFkLWRhdGEnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgd3JpdGVEYXRhID0gJy0td3JpdGUtZGF0YSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyByZWFkQ29kZWdlbiA9ICctLXJlYWQtY29kZWdlbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB3cml0ZUNvZGVnZW4gPSAnLS13cml0ZS1jb2RlZ2VuJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNvZGVnZW5TaGFyZCA9ICctLWNvZGVnZW4tc2hhcmQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY29kZWdlblNoYXJkcyA9ICctLWNvZGVnZW4tc2hhcmRzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNmZU9ubHkgPSAnLS1jZmUtb25seSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkZWJ1Z0dsb2JhbEluZmVyZW5jZSA9ICctLWRlYnVnLWdsb2JhbC1pbmZlcmVuY2UnOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIHNlcnZlck1vZGUgPSAnLS1zZXJ2ZXItbW9kZSc7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgbmV3RGVmZXJyZWRTcGxpdCA9ICctLW5ldy1kZWZlcnJlZC1zcGxpdCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyByZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzID0KICAgICAgJy0tcmVwb3J0LWludmFsaWQtZGVmZXJyZWQtdHlwZXMnOwoKICAvLy8gRmxhZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgJ3Byb2R1Y3Rpb24nIG1vZGUuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBiZW5jaG1hcmtpbmdQcm9kdWN0aW9uID0gJy0tYmVuY2htYXJraW5nLXByb2R1Y3Rpb24nOwoKICAvLy8gRmxhZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgYmVuY2htYXJraW5nICdleHBlcmltZW50JyBtb2RlLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgYmVuY2htYXJraW5nRXhwZXJpbWVudCA9ICctLWJlbmNobWFya2luZy14JzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBjb25kaXRpb25hbERpcmVjdGl2ZXMgPSAnLS1jb25kaXRpb25hbC1kaXJlY3RpdmVzJzsKCiAgLy8gVGhlIHN5bnRheC1vbmx5IGxldmVsIG9mIHN1cHBvcnQgZm9yIGdlbmVyaWMgbWV0aG9kcyBpcyBpbmNsdWRlZCBpbiB0aGUKICAvLyAxLjUwIG1pbGVzdG9uZSBmb3IgRGFydC4gSXQgaXMgbm90IGV4cGVyaW1lbnRhbCwgYnV0IGFsc28gbm90IHBlcm1hbmVudDoKICAvLyBhIGZ1bGwgaW1wbGVtZW50YXRpb24gaXMgZXhwZWN0ZWQgaW4gdGhlIGZ1dHVyZS4gSGVuY2UsIHRoZQogIC8vICdHRU5FUklDX01FVEhPRFMnIGNvbW1lbnRzIHdoaWNoIHdlcmUgYWRkZWQgd2hlbiB0aGlzIGZlYXR1cmUgd2FzCiAgLy8gZXhwZXJpbWVudGFsIGhhdmUgYmVlbiBwcmVzZXJ2ZWQsIHN1Y2ggdGhhdCBpdCB3aWxsIGJlIGVhc3kgdG8gZmluZCB0aGUKICAvLyByZWxldmFudCBsb2NhdGlvbnMgdG8gdXBkYXRlIHdoZW4gZ2VuZXJpYyBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBmdWxseS4KICAvLwogIC8vIFRoZSBvcHRpb24gaXMgc3RpbGwgYWNjZXB0ZWQsIGJ1dCBpdCBoYXMgbm8gZWZmZWN0OiBUaGUgZmVhdHVyZSBpcyBlbmFibGVkCiAgLy8gYnkgZGVmYXVsdCBhbmQgaXQgY2Fubm90IGJlIGRpc2FibGVkLgogIC8vCiAgLy8gVGhlIGFwcHJvYWNoIHRha2VuIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB0byBwYXJzZSBnZW5lcmljIG1ldGhvZHMsCiAgLy8gaW50cm9kdWNlIEFTVCBub2RlcyBmb3IgdGhlbSwgZ2VuZXJhdGUgY29ycmVzcG9uZGluZyB0eXBlcyAoc3VjaCB0aGF0CiAgLy8gZnJvbnQgZW5kIHRyZWF0bWVudCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGNvZGUgdGhhdCBwcm9ncmFtbWVycyB3cm90ZSksCiAgLy8gYnV0IGNvbnNpZGVyaW5nIGFsbCBtZXRob2QgdHlwZSB2YXJpYWJsZXMgdG8gaGF2ZSBib3VuZCBgZHluYW1pY2Agbm8KICAvLyBtYXR0ZXIgd2hpY2ggYm91bmQgdGhleSBoYXZlIHN5bnRhY3RpY2FsbHkgKHN1Y2ggdGhhdCB0aGVpciB2YWx1ZSBhcyB0eXBlcwogIC8vIGlzIHVuY2hlY2tlZCksIGFuZCB0aGVuIHJlcGxhY2luZyBtZXRob2QgdHlwZSB2YXJpYWJsZXMgYnkgYSBgRHluYW1pY1R5cGVgCiAgLy8gKHN1Y2ggdGhhdCB0aGUgYmFja2VuZCBkb2VzIG5vdCBuZWVkIHRvIHRha2UgbWV0aG9kIHR5cGUgYXJndW1lbnRzIGludG8KICAvLyBhY2NvdW50KS4KICAvLwogIC8vIFRoZSBmZWF0dXJlIGhhcyBhbiBpbmZvcm1hbCBzcGVjaWZpY2F0aW9uIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAogIC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2Vlcm5zdGcvNDM1M2Q3YjRmNjY5NzQ1YmVkM2E1NDIzZTA0YTQ1M2MuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBnZW5lcmljTWV0aG9kU3ludGF4ID0gJy0tZ2VuZXJpYy1tZXRob2Qtc3ludGF4JzsKCiAgLy8gSW5pdGlhbGl6aW5nLWZvcm1hbCBhY2Nlc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFuZCBjYW5ub3QgYmUgZGlzYWJsZWQuCiAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdGhlIG9wdGlvbiBpcyBzdGlsbCBhY2NlcHRlZCwgYnV0IGl0IGlzIGlnbm9yZWQuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBpbml0aWFsaXppbmdGb3JtYWxBY2Nlc3MgPSAnLS1pbml0aWFsaXppbmctZm9ybWFsLWFjY2Vzcyc7CgogIC8vIEV4cGVyaW1lbnRhbCBmbGFncy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHJlc29sdmVPbmx5ID0gJy0tcmVzb2x2ZS1vbmx5JzsKfQoKY2xhc3MgT3B0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHNob3dQYWNrYWdlV2FybmluZ3MgPQogICAgICAnJHtGbGFncy5zaG93UGFja2FnZVdhcm5pbmdzfXwke0ZsYWdzLnNob3dQYWNrYWdlV2FybmluZ3N9PS4qJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmFibGVMYW5ndWFnZUV4cGVyaW1lbnRzID0KICAgICAgJyR7RmxhZ3MuZW5hYmxlTGFuZ3VhZ2VFeHBlcmltZW50c318JwogICAgICAnJHtGbGFncy5lbmFibGVMYW5ndWFnZUV4cGVyaW1lbnRzfT0uKic7CgogIC8vIEV4cGVyaW1lbnRhbCBvcHRpb25zLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcmVzb2x1dGlvbklucHV0ID0gJy0tcmVzb2x1dGlvbi1pbnB1dD0uKyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBiYXplbFBhdGhzID0gJy0tYmF6ZWwtcGF0aHM9LisnOwp9CoCYAE5OPAEhAUQOSUs+R082LTYtSU0wQEM6TTUqNCkBTBtEAUpKAT5DATM2KwFBAUkBNjo6MgE5AUU3TwFDASs1K0kwOThHOkApMD5JNjo6RkItPS0BQDAyNjg4Oi5JATQBQTspAT1MAUpDAUoBTU5BR01OBVArBUtLTkpQUE0PBUVHRwFOUVEBGTYCAQ8sRgEyLC8BG0E3AgEtcGFja2FnZTpjb21waWxlci9zcmMvY29tbWFuZGxpbmVfb3B0aW9ucy5kYXJ0LHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2ZpbGVuYW1lcy5kYXJ0hNIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmaWxlbmFtZXM7CgppbXBvcnQgJ2RhcnQ6aW8nIHNob3cgUGxhdGZvcm07CgovLyBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGNvbnZlcnQgV2luZG93cyBmaWxlIG5hbWVzIHRvIFVSSXM6Ci8vIGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9iL2llL2FyY2hpdmUvMjAwNi8xMi8wNi9maWxlLXVyaXMtaW4td2luZG93cy5hc3B4CgpTdHJpbmcgbmF0aXZlVG9VcmlQYXRoKFN0cmluZyBmaWxlbmFtZSkgewogIC8vIFRPRE8oYWhlKTogSXQgd291bGQgYmUgbmljZSB0byB1c2UgYSBEYXJ0IGxpYnJhcnkgaW5zdGVhZC4KICBpZiAoIVBsYXRmb3JtLmlzV2luZG93cykgcmV0dXJuIGZpbGVuYW1lOwogIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZUFsbCgnXFwnLCAnLycpOwogIGlmIChmaWxlbmFtZS5sZW5ndGggPiAyICYmIGZpbGVuYW1lWzFdID09ICc6JykgewogICAgZmlsZW5hbWUgPSAiLyRmaWxlbmFtZSI7CiAgfQogIHJldHVybiBmaWxlbmFtZTsKfQoKU3RyaW5nIHVyaVBhdGhUb05hdGl2ZShTdHJpbmcgcGF0aCkgewogIC8vIFRPRE8oYWhlKTogSXQgd291bGQgYmUgbmljZSB0byB1c2UgYSBEYXJ0IGxpYnJhcnkgaW5zdGVhZC4KICBpZiAoIVBsYXRmb3JtLmlzV2luZG93cykgcmV0dXJuIHBhdGg7CiAgaWYgKHBhdGgubGVuZ3RoID4gMyAmJiBwYXRoWzBdID09ICcvJyAmJiBwYXRoWzJdID09ICc6JykgewogICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDEpLnJlcGxhY2VBbGwoJy8nLCAnXFwnKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHBhdGgucmVwbGFjZUFsbCgnLycsICdcXCcpOwogIH0KfQoKZmluYWwgVXJpIGN1cnJlbnREaXJlY3RvcnkgPSBVcmkuYmFzZTsKClVyaSBuYXRpdmVUb1VyaShTdHJpbmcgZmlsZW5hbWUpID0+CiAgICBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUobmF0aXZlVG9VcmlQYXRoKGZpbGVuYW1lKSk7CgpTdHJpbmcgYXBwZW5kU2xhc2goU3RyaW5nIHBhdGgpID0+IHBhdGguZW5kc1dpdGgoJy8nKSA/IHBhdGggOiAnJHBhdGgvJzsKJwBOTjwBEwEgAURLASpALC0zHQQTAgEmQCg9NAsnBAIBJwEkOQFJASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9maWxlbmFtZXMuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9vcHRpb25zLmRhcnTAAF35Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5zcmMub3B0aW9uczsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGZlOwoKaW1wb3J0ICdjb21tYW5kbGluZV9vcHRpb25zLmRhcnQnIHNob3cgRmxhZ3M7CmltcG9ydCAndXRpbC91dGlsLmRhcnQnOwoKLy8vIE9wdGlvbnMgdXNlZCBmb3IgY29udHJvbGxpbmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4KYWJzdHJhY3QgY2xhc3MgRGlhZ25vc3RpY09wdGlvbnMgewogIGNvbnN0IERpYWdub3N0aWNPcHRpb25zKCk7CgogIC8vLyBJZiBgdHJ1ZWAsIHdhcm5pbmdzIGNhdXNlIHRoZSBjb21waWxhdGlvbiB0byBmYWlsLgogIGJvb2wgZ2V0IGZhdGFsV2FybmluZ3M7CgogIC8vLyBFbWl0IHRlcnNlIGRpYWdub3N0aWNzIHdpdGhvdXQgaG93VG9GaXguCiAgYm9vbCBnZXQgdGVyc2VEaWFnbm9zdGljczsKCiAgLy8vIElmIGB0cnVlYCwgd2FybmluZ3MgYXJlIG5vdCByZXBvcnRlZC4KICBib29sIGdldCBzdXBwcmVzc1dhcm5pbmdzOwoKICAvLy8gSWYgYHRydWVgLCBoaW50cyBhcmUgbm90IHJlcG9ydGVkLgogIGJvb2wgZ2V0IHN1cHByZXNzSGludHM7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB3YXJuaW5ncyBhbmQgaGludHMgYXJlIHNob3duIGZvciBhbGwgcGFja2FnZXMuCiAgYm9vbCBnZXQgc2hvd0FsbFBhY2thZ2VXYXJuaW5nczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHdhcm5pbmdzIGFuZCBoaW50cyBhcmUgaGlkZGVuIGZvciBhbGwgcGFja2FnZXMuCiAgYm9vbCBnZXQgaGlkZVBhY2thZ2VXYXJuaW5nczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHdhcm5pbmdzIHNob3VsZCBiZSBzaG91bGQgZm9yIFt1cmldLgogIGJvb2wgc2hvd1BhY2thZ2VXYXJuaW5nc0ZvcihVcmkgdXJpKTsKfQoKLy8vIE9iamVjdCBmb3IgcGFzc2luZyBvcHRpb25zIHRvIHRoZSBjb21waWxlci4gU3VwZXJjbGFzc2VzIGFyZSB1c2VkIHRvIHNlbGVjdAovLy8gc3Vic2V0cyBvZiB0aGVzZSBvcHRpb25zLCBlbmFibGluZyBlYWNoIHBhcnQgb2YgdGhlIGNvbXBpbGVyIHRvIGRlcGVuZCBvbgovLy8gYXMgZmV3IGFzIHBvc3NpYmxlLgpjbGFzcyBDb21waWxlck9wdGlvbnMgaW1wbGVtZW50cyBEaWFnbm9zdGljT3B0aW9ucyB7CiAgLy8vIFRoZSBlbnRyeSBwb2ludCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCBpcyBiZWluZyBjb21waWxlZC4KICBVcmkgZW50cnlQb2ludDsKCiAgLy8vIFBhY2thZ2Ugcm9vdCBsb2NhdGlvbi4KICAvLy8KICAvLy8gSWYgbm90IG51bGwgdGhlbiBbcGFja2FnZUNvbmZpZ10gc2hvdWxkIGJlIG51bGwuCiAgVXJpIHBhY2thZ2VSb290OwoKICAvLy8gTG9jYXRpb24gb2YgdGhlIHBhY2thZ2UgY29uZmlndXJhdGlvbiBmaWxlLgogIC8vLwogIC8vLyBJZiBub3QgbnVsbCB0aGVuIFtwYWNrYWdlUm9vdF0gc2hvdWxkIGJlIG51bGwuCiAgVXJpIHBhY2thZ2VDb25maWc7CgogIC8vLyBMaXN0IG9mIGtlcm5lbCBmaWxlcyB0byBsb2FkLgogIC8vLwogIC8vLyBXaGVuIGNvbXBpbGluZyBtb2R1bGFybHksIHRoaXMgY29udGFpbnMga2VybmVsIGZpbGVzIHRoYXQgYXJlIG5lZWRlZAogIC8vLyB0byBjb21waWxlIGEgc2luZ2xlIG1vZHVsZS4KICAvLy8KICAvLy8gV2hlbiBsaW5raW5nLCB0aGlzIGNvbnRhaW5zIGFsbCBrZXJuZWwgZmlsZXMgdGhhdCBmb3JtIHBhcnQgb2YgdGhlIGZpbmFsCiAgLy8vIHByb2dyYW0uCiAgLy8vCiAgLy8vIEF0IHRoaXMgdGltZSwgdGhpcyBsaXN0IHBvaW50cyB0byBmdWxsIGtlcm5lbCBmaWxlcy4gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5CiAgLy8vIHVzZSBhIGxpc3Qgb2Ygb3V0bGluZSBmaWxlcyBmb3IgbW9kdWxhciBjb21waWxlcywgYW5kIG9ubHkgdXNlIGZ1bGwga2VybmVsCiAgLy8vIGZpbGVzIGZvciBsaW5raW5nLgogIExpc3Q8VXJpPiBkaWxsRGVwZW5kZW5jaWVzOwoKICAvLy8gTG9jYXRpb24gZnJvbSB3aGljaCBzZXJpYWxpemVkIGluZmVyZW5jZSBkYXRhIGlzIHJlYWQuCiAgLy8vCiAgLy8vIElmIHRoaXMgaXMgc2V0LCB0aGUgW2VudHJ5UG9pbnRdIGlzIGV4cGVjdGVkIHRvIGJlIGEgLmRpbGwgZmlsZSBhbmQgdGhlCiAgLy8vIGZyb250ZW5kIHdvcmsgaXMgc2tpcHBlZC4KICBVcmkgcmVhZERhdGFVcmk7CgogIC8vLyBMb2NhdGlvbiB0byB3aGljaCBpbmZlcmVuY2UgZGF0YSBpcyBzZXJpYWxpemVkLgogIC8vLwogIC8vLyBJZiB0aGlzIGlzIHNldCwgdGhlIGNvbXBpbGF0aW9uIHN0b3BzIGFmdGVyIHR5cGUgaW5mZXJlbmNlLgogIFVyaSB3cml0ZURhdGFVcmk7CgogIC8vLyBMb2NhdGlvbiBmcm9tIHdoaWNoIGNvZGVnZW4gZGF0YSBpcyByZWFkLgogIC8vLwogIC8vLyBJZiB0aGlzIGlzIHNldCwgdGhlIGNvbXBpbGF0aW9uIHN0YXJ0cyBhdCBjb2RlZ2VuIGVucXVldWVpbmcuCiAgVXJpIHJlYWRDb2RlZ2VuVXJpOwoKICAvLy8gTG9jYXRpb24gdG8gd2hpY2ggY29kZWdlbiBkYXRhIGlzIHNlcmlhbGl6ZWQuCiAgLy8vCiAgLy8vIElmIHRoaXMgaXMgc2V0LCB0aGUgY29tcGlsYXRpb24gc3RvcHMgYWZ0ZXIgY29kZSBnZW5lcmF0aW9uLgogIFVyaSB3cml0ZUNvZGVnZW5Vcmk7CgogIC8vLyBXaGV0aGVyIHRvIHJ1biBvbmx5IHRoZSBDRkUgYW5kIGVtaXQgdGhlIGdlbmVyYXRlZCBrZXJuZWwgZmlsZSBpbgogIC8vLyBbb3V0cHV0VXJpXS4KICBib29sIGNmZU9ubHkgPSBmYWxzZTsKCiAgLy8vIEZsYWcgb25seSBtZWFudCBmb3IgZGFydDJqcyBkZXZlbG9wZXJzIHRvIGl0ZXJhdGUgb24gZ2xvYmFsIGluZmVyZW5jZQogIC8vLyBjaGFuZ2VzLgogIC8vLwogIC8vLyBXaGVuIHdvcmtpbmcgb24gbGFyZ2UgYXBwcyB0aGlzIGZsYWcgYWxsb3dzIHRvIGxvYWQgc2VyaWFsaXplZCBkYXRhIGZvcgogIC8vLyB0aGUgYXBwICh2aWEgLS1yZWFkLWRhdGEpLCByZXVzZSBpdHMgY2xvc2VkIHdvcmxkLCBhbmQgcmVydW4gdGhlIGdsb2JhbAogIC8vLyBpbmZlcmVuY2UgcGhhc2UgKGV2ZW4gdGhvdWdoIHRoZSBzZXJpYWxpemVkIGRhdGEgYWxyZWFkeSBjb250YWlucyBhIGdsb2JhbAogIC8vLyBpbmZlcmVuY2UgcmVzdWx0KS4KICBib29sIGRlYnVnR2xvYmFsSW5mZXJlbmNlID0gZmFsc2U7CgogIC8vLyBSZXNvbHZlZCBjb25zdGFudCAiZW52aXJvbm1lbnQiIHZhbHVlcyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIHZpYSB0aGUgYC1EYAogIC8vLyBmbGFncy4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50ID0gY29uc3QgPFN0cmluZywgU3RyaW5nPnt9OwoKICAvLy8gRmxhZ3MgZW5hYmxpbmcgbGFuZ3VhZ2UgZXhwZXJpbWVudHMuCiAgTWFwPGZlLkV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGxhbmd1YWdlRXhwZXJpbWVudHMgPSB7fTsKCiAgLy8vIGB0cnVlYCBpZiBDRkUgcGVyZm9ybXMgY29uc3RhbnQgZXZhbHVhdGlvbi4KICBib29sIGdldCB1c2VDRkVDb25zdGFudHMgPT4KICAgICAgbGFuZ3VhZ2VFeHBlcmltZW50c1tmZS5FeHBlcmltZW50YWxGbGFnLmNvbnN0YW50VXBkYXRlMjAxOF07CgogIC8vLyBBIHBvc3NpYmx5IG51bGwgc3RhdGUgb2JqZWN0IGZvciBrZXJuZWwgY29tcGlsYXRpb24uCiAgZmUuSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZTsKCiAgLy8vIFdoZXRoZXIgd2UgYWxsb3cgbW9ja2luZyBjb21waWxhdGlvbiBvZiBsaWJyYXJpZXMgc3VjaCBhcyBkYXJ0OmlvIGFuZAogIC8vLyBkYXJ0Omh0bWwgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3Nlcy4KICBib29sIGFsbG93TW9ja0NvbXBpbGF0aW9uID0gZmFsc2U7CgogIC8vLyBTZXRzIGEgY29tYmluYXRpb24gb2YgZmxhZ3MgZm9yIGJlbmNobWFya2luZyAncHJvZHVjdGlvbicgbW9kZS4KICBib29sIGJlbmNobWFya2luZ1Byb2R1Y3Rpb24gPSBmYWxzZTsKCiAgLy8vIFNldHMgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgYmVuY2htYXJraW5nICdleHBlcmltZW50JyBtb2RlLgogIGJvb2wgYmVuY2htYXJraW5nRXhwZXJpbWVudCA9IGZhbHNlOwoKICAvLy8gSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2RrIGJ1aWxkLgogIFN0cmluZyBidWlsZElkID0gX1VOREVURVJNSU5FRF9CVUlMRF9JRDsKCiAgLy8vIFdoZXRoZXIgdGhlcmUgaXMgYSBidWlsZC1pZCBhdmFpbGFibGUgc28gd2UgY2FuIHVzZSBpdCBvbiBlcnJvciBtZXNzYWdlcwogIC8vLyBhbmQgaW4gdGhlIGVtaXR0ZWQgb3V0cHV0IG9mIHRoZSBjb21waWxlci4KICBib29sIGdldCBoYXNCdWlsZElkID0+IGJ1aWxkSWQgIT0gX1VOREVURVJNSU5FRF9CVUlMRF9JRDsKCiAgLy8vIFdoZXRoZXIgdG8gY29tcGlsZSBmb3IgdGhlIHNlcnZlciBjYXRlZ29yeS4gVGhpcyBpcyB1c2VkIHRvIGNvbXBpbGUgdG8gSlMKICAvLy8gdGhhdCBpcyBpbnRlbmRlZCB0byBiZSBydW4gb24gc2VydmVyLXNpZGUgVk1zIGxpa2Ugbm9kZWpzLgogIGJvb2wgY29tcGlsZUZvclNlcnZlciA9IGZhbHNlOwoKICAvLy8gTG9jYXRpb24gd2hlcmUgdG8gZ2VuZXJhdGUgYSBtYXAgY29udGFpbmluZyBkZXRhaWxzIG9mIGhvdyBkZWZlcnJlZAogIC8vLyBsaWJyYXJpZXMgYXJlIHN1YmRpdmlkZWQuCiAgVXJpIGRlZmVycmVkTWFwVXJpOwoKICAvLy8gV2hldGhlciB0byBhcHBseSB0aGUgbmV3IGRlZmVycmVkIHNwbGl0IGZpeGVzLiBUaGUgZml4ZXMgaW1wcm92ZSBvbgogIC8vLyBwZXJmb3JtYW5jZSBhbmQgZml4IGEgc291bmRuZXNzIGlzc3VlIHdpdGggaW5mZXJyZWQgdHlwZXMuIFRoZSBsYXR0ZXIgd2lsbAogIC8vLyBtb3ZlIG1vcmUgY29kZSB0byB0aGUgbWFpbiBvdXRwdXQgdW5pdCwgYmVjYXVzZSBvZiB0aGF0IHdlIGFyZSBub3QKICAvLy8gZW5hYmxpbmcgdGhlIGZlYXR1cmUgYnkgZGVmYXVsdCByaWdodCBhd2F5LgogIC8vLwogIC8vLyBXaGVuIFtyZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzXSBzaG93cyBubyBlcnJvcnMsIHdlIGV4cGVjdCB0aGlzCiAgLy8vIGZsYWcgdG8gcHJvZHVjZSB0aGUgc2FtZSBvciBiZXR0ZXIgcmVzdWx0cyB0aGFuIHRoZSBjdXJyZW50IHVuc291bmQKICAvLy8gaW1wbGVtZW50YXRpb24uCiAgYm9vbCBuZXdEZWZlcnJlZFNwbGl0ID0gZmFsc2U7CgogIC8vLyBTaG93IGVycm9ycyB3aGVuIGEgZGVmZXJyZWQgdHlwZSBpcyBpbmZlcnJlZCBhcyBhIHJldHVybiB0eXBlIG9mIGEgY2xvc3VyZQogIC8vLyBvciBpbiBhIHR5cGUgcGFyYW1ldGVyLiBUaG9zZSBjYXNlcyBjYXVzZSB0aGUgY29tcGlsZXIgdG9kYXkgdG8gYmVoYXZlCiAgLy8vIHVuc291bmRseSBieSBwdXR0aW5nIHRoZSBjb2RlIGluIGEgZGVmZXJyZWQgb3V0cHV0IHVuaXQuIEluIHRoZSBmdXR1cmUKICAvLy8gd2hlbiBbbmV3RGVmZXJyZWRTcGxpdF0gaXMgb24gYnkgZGVmYXVsdCwgdGhvc2UgY2FzZXMgd2lsbCBiZSB0cmVhdGVkCiAgLy8vIHNvdW5kbHkgYW5kIHdpbGwgY2F1c2UgbW9yZSBjb2RlIHRvIGJlIG1vdmVkIHRvIHRoZSBtYWluIG91dHB1dCB1bml0LgogIC8vLwogIC8vLyBUaGlzIGZsYWcgaXMgcHJlc2VudGVkIHRvIGhlbHAgZGV2ZWxvcGVycyBmaW5kIGFuZCBmaXggdGhlIGFmZmVjdGVkIGNvZGUuCiAgYm9vbCByZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIGRpc2FibGUgaW5saW5pbmcgZHVyaW5nIHRoZSBiYWNrZW5kIG9wdGltaXphdGlvbnMuCiAgLy8gVE9ETyhzaWdtdW5kKTogbmVnYXRlLCBzbyBhbGwgZmxhZ3MgYXJlIHBvc2l0aXZlCiAgYm9vbCBkaXNhYmxlSW5saW5pbmcgPSBmYWxzZTsKCiAgLy8vIERpc2FibGUgZGVmZXJyZWQgbG9hZGluZywgaW5zdGVhZCBnZW5lcmF0ZSBldmVyeXRoaW5nIGluIG9uZSBvdXRwdXQgdW5pdC4KICAvLy8gTm90ZTogdGhlIHJlc3VsdGluZyBwcm9ncmFtIHN0aWxsIGNvcnJlY3RseSBjaGVja3MgdGhhdCBsb2FkTGlicmFyeSAmCiAgLy8vIGNoZWNrTGlicmFyeSBjYWxscyBhcmUgY29ycmVjdC4KICBib29sIGRpc2FibGVQcm9ncmFtU3BsaXQgPSBmYWxzZTsKCiAgLy8vIERpYWdub3N0aWMgb3B0aW9uOiBJZiBgdHJ1ZWAsIHdhcm5pbmdzIGNhdXNlIHRoZSBjb21waWxhdGlvbiB0byBmYWlsLgogIEBvdmVycmlkZQogIGJvb2wgZmF0YWxXYXJuaW5ncyA9IGZhbHNlOwoKICAvLy8gRGlhZ25vc3RpYyBvcHRpb246IEVtaXQgdGVyc2UgZGlhZ25vc3RpY3Mgd2l0aG91dCBob3dUb0ZpeC4KICBAb3ZlcnJpZGUKICBib29sIHRlcnNlRGlhZ25vc3RpY3MgPSBmYWxzZTsKCiAgLy8vIERpYWdub3N0aWMgb3B0aW9uOiBJZiBgdHJ1ZWAsIHdhcm5pbmdzIGFyZSBub3QgcmVwb3J0ZWQuCiAgQG92ZXJyaWRlCiAgYm9vbCBzdXBwcmVzc1dhcm5pbmdzID0gZmFsc2U7CgogIC8vLyBEaWFnbm9zdGljIG9wdGlvbjogSWYgYHRydWVgLCBoaW50cyBhcmUgbm90IHJlcG9ydGVkLgogIEBvdmVycmlkZQogIGJvb2wgc3VwcHJlc3NIaW50cyA9IGZhbHNlOwoKICAvLy8gRGlhZ25vc3RpYyBvcHRpb246IExpc3Qgb2YgcGFja2FnZXMgZm9yIHdoaWNoIHdhcm5pbmdzIGFuZCBoaW50cyBhcmUKICAvLy8gcmVwb3J0ZWQuIElmIGBudWxsYCwgbm8gcGFja2FnZSB3YXJuaW5ncyBvciBoaW50cyBhcmUgcmVwb3J0ZWQuIElmCiAgLy8vIGVtcHR5LCBhbGwgd2FybmluZ3MgYW5kIGhpbnRzIGFyZSByZXBvcnRlZC4KICBMaXN0PFN0cmluZz4gc2hvd25QYWNrYWdlV2FybmluZ3M7IC8vICYmJiYmCgogIC8vLyBXaGV0aGVyIHRvIGRpc2FibGUgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlLgogIGJvb2wgZGlzYWJsZVR5cGVJbmZlcmVuY2UgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gdXNlIHRoZSB0cml2aWFsIGFic3RyYWN0IHZhbHVlIGRvbWFpbi4KICBib29sIHVzZVRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIGRpc2FibGUgb3B0aW1pemF0aW9uIGZvciBuZWVkIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbi4KICBib29sIGRpc2FibGVSdGlPcHRpbWl6YXRpb24gPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZW1pdCBhIHN1bW1hcnkgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgYnkgdGhlIGNvbXBpbGVyIGR1cmluZwogIC8vLyBvcHRpbWl6YXRpb24uIFRoaXMgaW5jbHVkZXMgcmVzb2x1dGlvbiBkZXRhaWxzLCBkZXBlbmRlbmNpZXMgYmV0d2VlbgogIC8vLyBlbGVtZW50cywgcmVzdWx0cyBvZiB0eXBlIGluZmVyZW5jZSwgYW5kIGRhdGEgYWJvdXQgZ2VuZXJhdGVkIGNvZGUuCiAgYm9vbCBkdW1wSW5mbyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byB1c2UgdGhlIG5ldyBkdW1wLWluZm8gYmluYXJ5IGZvcm1hdC4gVGhpcyB3aWxsIGJlIHRoZSBkZWZhdWx0CiAgLy8vIGFmdGVyIGEgdHJhbnNpdGlvbmFsIHBlcmlvZC4KICBib29sIHVzZUR1bXBJbmZvQmluYXJ5Rm9ybWF0ID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHdlIGFsbG93IHBhc3NpbmcgYW4gZXh0cmEgYXJndW1lbnQgdG8gYGFzc2VydGAsIGNvbnRhaW5pbmcgYQogIC8vLyByZWFzb24gZm9yIHdoeSBhbiBhc3NlcnRpb24gZmFpbHMuIChleHBlcmltZW50YWwpCiAgLy8vCiAgLy8vIFRoaXMgaXMgb25seSBpbmNsdWRlZCBzbyB0aGF0IHRlc3RzIGNhbiBwYXNzIHRoZSAtLWFzc2VydC1tZXNzYWdlIGZsYWcKICAvLy8gd2l0aG91dCBjYXVzaW5nIGRhcnQyanMgdG8gY3Jhc2guIFRoZSBmbGFnIGhhcyBubyBlZmZlY3QuCiAgYm9vbCBlbmFibGVBc3NlcnRNZXNzYWdlID0gdHJ1ZTsKCiAgLy8vIFdoZXRoZXIgdG8gZW5hYmxlIG1pbmlmaWNhdGlvbgogIC8vIFRPRE8oc2lnbXVuZCk6IHJlbmFtZSB0byBtaW5pZnkKICBib29sIGVuYWJsZU1pbmlmaWNhdGlvbiA9IGZhbHNlOwoKICAvLy8gRmxhZyB0byB0dXJuIG9mZiBtaW5pZmljYXRpb24gZXZlbiBpZiBlbmFibGVkIGVsc2V3aGVyZSwgZS5nLiB2aWEKICAvLy8gLU8yLiBCb3RoIFtlbmFibGVNaW5pZmljYXRpb25dIGFuZCBbX2Rpc2FibGVNaW5pZmljYXRpb25dIGNhbiBiZSB0cnVlLCBpbgogIC8vLyB3aGljaCBjYXNlIFtfZGlzYWJsZU1pbmlmaWNhdGlvbl0gd2lucy4KICBib29sIF9kaXNhYmxlTWluaWZpY2F0aW9uID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIG1vZGVsIHdoaWNoIG5hdGl2ZSBjbGFzc2VzIGFyZSBsaXZlIGJhc2VkIG9uIGFubm90YXRpb25zIG9uIHRoZQogIC8vLyBjb3JlIGxpYnJhcmllcy4gSWYgZmFsc2UsIGFsbCBuYXRpdmUgY2xhc3NlcyB3aWxsIGJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQuCiAgYm9vbCBlbmFibGVOYXRpdmVMaXZlVHlwZUFuYWx5c2lzID0gdHJ1ZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgY29kZSBjb250YWluaW5nIHVzZXIncyBgYXNzZXJ0YCBzdGF0ZW1lbnRzLgogIGJvb2wgZW5hYmxlVXNlckFzc2VydGlvbnMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgYSBzb3VyY2UtbWFwIGZpbGUgdG9nZXRoZXIgd2l0aCB0aGUgb3V0cHV0IHByb2dyYW0uCiAgYm9vbCBnZW5lcmF0ZVNvdXJjZU1hcCA9IHRydWU7CgogIC8vLyBVUkkgb2YgdGhlIG1haW4gb3V0cHV0IG9mIHRoZSBjb21waWxlci4KICBVcmkgb3V0cHV0VXJpOwoKICAvLy8gTG9jYXRpb24gb2YgdGhlIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIGZpbGUuCiAgVXJpIGxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk7CgogIC8vLyBMb2NhdGlvbiBvZiB0aGUga2VybmVsIHBsYXRmb3JtIGAuZGlsbGAgZmlsZXMuCiAgVXJpIHBsYXRmb3JtQmluYXJpZXM7CgogIC8vLyBVUkkgd2hlcmUgdGhlIGNvbXBpbGVyIHNob3VsZCBnZW5lcmF0ZSB0aGUgb3V0cHV0IHNvdXJjZSBtYXAgZmlsZS4KICBVcmkgc291cmNlTWFwVXJpOwoKICAvLy8gVGhlIGNvbXBpbGVyIGlzIHJ1biBmcm9tIHRoZSBidWlsZCBib3QuCiAgYm9vbCB0ZXN0TW9kZSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byB0cnVzdCBKUy1pbnRlcm9wIGFubm90YXRpb25zLiAoZXhwZXJpbWVudGFsKQogIGJvb2wgdHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gdHJ1c3QgcHJpbWl0aXZlIHR5cGVzIGR1cmluZyBpbmZlcmVuY2UgYW5kIG9wdGltaXphdGlvbnMuCiAgYm9vbCB0cnVzdFByaW1pdGl2ZXMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gb21pdCBpbXBsaWNpdCBzdHJvbmcgbW9kZSBjaGVja3MuCiAgYm9vbCBvbWl0SW1wbGljaXRDaGVja3MgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gb21pdCBhcyBjYXN0cyBieSBkZWZhdWx0LgogIGJvb2wgb21pdEFzQ2FzdHMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gb21pdCBjbGFzcyB0eXBlIGFyZ3VtZW50cyBvbmx5IG5lZWRlZCBmb3IgYHRvU3RyaW5nYCBvbgogIC8vLyBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4KICBib29sIGxheFJ1bnRpbWVUeXBlVG9TdHJpbmcgPSBmYWxzZTsKCiAgLy8vIFdoYXQgc2hvdWxkIHRoZSBjb21waWxlciBkbyB3aXRoIHBhcmFtZXRlciB0eXBlIGFzc2VydGlvbnMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBvcHRpb24gZGVyaXZlZCBmcm9tIG90aGVyIGZsYWdzLgogIENoZWNrUG9saWN5IGRlZmF1bHRQYXJhbWV0ZXJDaGVja1BvbGljeTsKCiAgLy8vIFdoYXQgc2hvdWxkIHRoZSBjb21waWxlciBkbyB3aXRoIGltcGxpY2l0IGRvd25jYXN0cy4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9wdGlvbiBkZXJpdmVkIGZyb20gb3RoZXIgZmxhZ3MuCiAgQ2hlY2tQb2xpY3kgZGVmYXVsdEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeTsKCiAgLy8vIFdoYXQgdGhlIGNvbXBpbGVyIHNob3VsZCBkbyB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBpbiBhIGNvbmRpdGlvbiBjb250ZXh0CiAgLy8vIHdoZW4gdGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gc2F5cyBpdCBpcyBhIHJ1bnRpbWUgZXJyb3IgZm9yIGl0IHRvIGJlCiAgLy8vIG51bGwuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBvcHRpb24gZGVyaXZlZCBmcm9tIG90aGVyIGZsYWdzLgogIENoZWNrUG9saWN5IGRlZmF1bHRDb25kaXRpb25DaGVja1BvbGljeTsKCiAgLy8vIFdoYXQgc2hvdWxkIHRoZSBjb21waWxlciBkbyB3aXRoIGV4cGxpY2l0IGNhc3RzLgogIC8vLwogIC8vLyBUaGlzIGlzIGFuIGludGVybmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRlcml2ZWQgZnJvbSBvdGhlciBmbGFncy4KICBDaGVja1BvbGljeSBkZWZhdWx0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3k7CgogIC8vLyBXaGV0aGVyIHRvIGdlbmVyYXRlIGNvZGUgY29tcGxpYW50IHdpdGggY29udGVudCBzZWN1cml0eSBwb2xpY3kgKENTUCkuCiAgYm9vbCB1c2VDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZTsKCiAgLy8vIFdoZW4gb2JmdXNjYXRpbmcgZm9yIG1pbmlmaWNhdGlvbiwgd2hldGhlciB0byB1c2UgdGhlIGZyZXF1ZW5jeSBvZiBhIG5hbWUKICAvLy8gYXMgYW4gaGV1cmlzdGljIHRvIHBpY2sgc2hvcnRlciBuYW1lcy4KICBib29sIHVzZUZyZXF1ZW5jeU5hbWVyID0gdHJ1ZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgc291cmNlLWluZm9ybWF0aW9uIGZyb20gYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3CiAgLy8vIHNvdXJjZS1pbmZvcm1hdGlvbiBlbmdpbmVzLiAoZXhwZXJpbWVudGFsKQogIGJvb2wgdXNlTXVsdGlTb3VyY2VJbmZvID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIHVzZSB0aGUgbmV3IHNvdXJjZS1pbmZvcm1hdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3Igc291cmNlLW1hcHMuCiAgLy8vIChleHBlcmltZW50YWwpCiAgYm9vbCB1c2VOZXdTb3VyY2VJbmZvID0gZmFsc2U7CgogIC8vLyBFbmFibGUgdmVyYm9zZSBwcmludGluZyBkdXJpbmcgY29tcGlsYXRpb24uIEluY2x1ZGVzIGEgdGltZS1icmVha2Rvd24KICAvLy8gYmV0d2VlbiBwaGFzZXMgYXQgdGhlIGVuZC4KICBib29sIHZlcmJvc2UgPSBmYWxzZTsKCiAgLy8vIE9uIHRvcCBvZiAtLXZlcmJvc2UsIGVuYWJsZSBtb3JlIHZlcmJvc2UgcHJpbnRpbmcsIGxpa2UgcHJvZ3Jlc3MgbWVzc2FnZXMKICAvLy8gZHVyaW5nIGVhY2ggcGhhc2Ugb2YgY29tcGlsYXRpb24uCiAgYm9vbCBzaG93SW50ZXJuYWxQcm9ncmVzcyA9IGZhbHNlOwoKICAvLy8gVHJhY2sgYWxsb2NhdGlvbnMgaW4gdGhlIEpTIG91dHB1dC4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4KICBib29sIGV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMgPSBmYWxzZTsKCiAgLy8vIEV4cGVyaW1lbnRhbCBwYXJ0IGZpbGUgZnVuY3Rpb24gZ2VuZXJhdGlvbi4KICBib29sIGV4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zID0gZmFsc2U7CgogIC8vLyBFeHBlcmltZW50YWwgcmVsaWFuY2Ugb24gSmF2YVNjcmlwdCBUb0Jvb2xlYW4gY29udmVyc2lvbnMuCiAgYm9vbCBleHBlcmltZW50VG9Cb29sZWFuID0gZmFsc2U7CgogIC8vLyBFeHBlcmltZW50YWwgaW5zdHJ1bWVudGF0aW9uIHRvIGludmVzdGlnYXRlIGNvZGUgYmxvYXQuCiAgLy8vCiAgLy8vIElmIFt0cnVlXSwgdGhlIGNvbXBpbGVyIHdpbGwgZW1pdCBjb2RlIHRoYXQgbG9ncyB3aGVuZXZlciBhIG1ldGhvZCBpcwogIC8vLyBjYWxsZWQuCiAgYm9vbCBleHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbiA9IGZhbHNlOwoKICAvLy8gRXhwZXJpbWVudGFsIHVzZSBvZiB0aGUgbmV3IChRMiAyMDE5KSBSVEkgc3lzdGVtLgogIGJvb2wgZXhwZXJpbWVudE5ld1J0aSA9IGZhbHNlOwoKICAvLy8gVGhlIHBhdGggdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgcHJvZmlsZWQgYWxsb2NhdGlvbnMuCiAgLy8vCiAgLy8vIFRoZSBmaWxlIG11c3QgY29udGFpbiB0aGUgTWFwIHRoYXQgd2FzIHByb2R1Y2VkIGJ5IHVzaW5nCiAgLy8vIFtleHBlcmltZW50YWxUcmFja0FsbG9jYXRpb25zXSBlbmNvZGVkIGFzIGEgSlNPTiBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUuCiAgU3RyaW5nIGV4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aDsKCiAgLy8vIElmIHNwZWNpZmllZCwgYSBidW5kbGUgb2Ygb3B0aW1pemF0aW9ucyB0byBlbmFibGUgKG9yIGRpc2FibGUpLgogIGludCBvcHRpbWl6YXRpb25MZXZlbCA9IG51bGw7CgogIC8vLyBUaGUgc2hhcmQgdG8gc2VyaWFsaXplIHdoZW4gdXNpbmcgW3dyaXRlQ29kZWdlblVyaV0uCiAgaW50IGNvZGVnZW5TaGFyZDsKCiAgLy8vIFRoZSBudW1iZXIgb2Ygc2hhcmRzIHRvIHNlcmlhbGl6ZSB3aGVuIHVzaW5nIFt3cml0ZUNvZGVnZW5VcmldIG9yIHRvCiAgLy8vIGRlc2VyaWFsaXplIHdoZW4gdXNpbmcgW3JlYWRDb2RlZ2VuVXJpXS4KICBpbnQgY29kZWdlblNoYXJkczsKCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIE9wdGlvbnMgZm9yIGRlcHJlY2F0ZWQgZmVhdHVyZXMKICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogIC8vLyBDcmVhdGUgYW4gb3B0aW9ucyBvYmplY3QgYnkgcGFyc2luZyBmbGFncyBmcm9tIFtvcHRpb25zXS4KICBzdGF0aWMgQ29tcGlsZXJPcHRpb25zIHBhcnNlKExpc3Q8U3RyaW5nPiBvcHRpb25zLAogICAgICB7VXJpIGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksCiAgICAgIFVyaSBwbGF0Zm9ybUJpbmFyaWVzLAogICAgICB2b2lkIEZ1bmN0aW9uKFN0cmluZykgb25FcnJvciwKICAgICAgdm9pZCBGdW5jdGlvbihTdHJpbmcpIG9uV2FybmluZ30pIHsKICAgIE1hcDxmZS5FeHBlcmltZW50YWxGbGFnLCBib29sPiBsYW5ndWFnZUV4cGVyaW1lbnRzID0KICAgICAgICBfZXh0cmFjdEV4cGVyaW1lbnRzKG9wdGlvbnMsIG9uRXJyb3I6IG9uRXJyb3IsIG9uV2FybmluZzogb25XYXJuaW5nKTsKICAgIGlmIChlcXVhbE1hcHMobGFuZ3VhZ2VFeHBlcmltZW50cywgZmUuZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzKSkgewogICAgICBwbGF0Zm9ybUJpbmFyaWVzID8/PSBmZS5jb21wdXRlUGxhdGZvcm1CaW5hcmllc0xvY2F0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gbmV3IENvbXBpbGVyT3B0aW9ucygpCiAgICAgIC4ubGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSA9IGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkKICAgICAgLi5hbGxvd01vY2tDb21waWxhdGlvbiA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuYWxsb3dNb2NrQ29tcGlsYXRpb24pCiAgICAgIC4uYmVuY2htYXJraW5nUHJvZHVjdGlvbiA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmJlbmNobWFya2luZ1Byb2R1Y3Rpb24pCiAgICAgIC4uYmVuY2htYXJraW5nRXhwZXJpbWVudCA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmJlbmNobWFya2luZ0V4cGVyaW1lbnQpCiAgICAgIC4uYnVpbGRJZCA9CiAgICAgICAgICBfZXh0cmFjdFN0cmluZ09wdGlvbihvcHRpb25zLCAnLS1idWlsZC1pZD0nLCBfVU5ERVRFUk1JTkVEX0JVSUxEX0lEKQogICAgICAuLmNvbXBpbGVGb3JTZXJ2ZXIgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnNlcnZlck1vZGUpCiAgICAgIC4uZGVmZXJyZWRNYXBVcmkgPSBfZXh0cmFjdFVyaU9wdGlvbihvcHRpb25zLCAnLS1kZWZlcnJlZC1tYXA9JykKICAgICAgLi5uZXdEZWZlcnJlZFNwbGl0ID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5uZXdEZWZlcnJlZFNwbGl0KQogICAgICAuLnJlcG9ydEludmFsaWRJbmZlcnJlZERlZmVycmVkVHlwZXMgPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5yZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzKQogICAgICAuLmZhdGFsV2FybmluZ3MgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmZhdGFsV2FybmluZ3MpCiAgICAgIC4udGVyc2VEaWFnbm9zdGljcyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MudGVyc2UpCiAgICAgIC4uc3VwcHJlc3NXYXJuaW5ncyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3Muc3VwcHJlc3NXYXJuaW5ncykKICAgICAgLi5zdXBwcmVzc0hpbnRzID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5zdXBwcmVzc0hpbnRzKQogICAgICAuLnNob3duUGFja2FnZVdhcm5pbmdzID0KICAgICAgICAgIF9leHRyYWN0T3B0aW9uYWxDc3ZPcHRpb24ob3B0aW9ucywgRmxhZ3Muc2hvd1BhY2thZ2VXYXJuaW5ncykKICAgICAgLi5sYW5ndWFnZUV4cGVyaW1lbnRzID0gbGFuZ3VhZ2VFeHBlcmltZW50cwogICAgICAuLmRpc2FibGVJbmxpbmluZyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZGlzYWJsZUlubGluaW5nKQogICAgICAuLmRpc2FibGVQcm9ncmFtU3BsaXQgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmRpc2FibGVQcm9ncmFtU3BsaXQpCiAgICAgIC4uZGlzYWJsZVR5cGVJbmZlcmVuY2UgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmRpc2FibGVUeXBlSW5mZXJlbmNlKQogICAgICAuLnVzZVRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MudXNlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgIC4uZGlzYWJsZVJ0aU9wdGltaXphdGlvbiA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmRpc2FibGVSdGlPcHRpbWl6YXRpb24pCiAgICAgIC4uZHVtcEluZm8gPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmR1bXBJbmZvKQogICAgICAuLnVzZUR1bXBJbmZvQmluYXJ5Rm9ybWF0ID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgIiR7RmxhZ3MuZHVtcEluZm99PWJpbmFyeSIpCiAgICAgIC4uZW5hYmxlTWluaWZpY2F0aW9uID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5taW5pZnkpCiAgICAgIC4uX2Rpc2FibGVNaW5pZmljYXRpb24gPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLm5vTWluaWZ5KQogICAgICAuLmVuYWJsZU5hdGl2ZUxpdmVUeXBlQW5hbHlzaXMgPQogICAgICAgICAgIV9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZGlzYWJsZU5hdGl2ZUxpdmVUeXBlQW5hbHlzaXMpCiAgICAgIC4uZW5hYmxlVXNlckFzc2VydGlvbnMgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmVuYWJsZUNoZWNrZWRNb2RlKSB8fAogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5lbmFibGVBc3NlcnRzKQogICAgICAuLmV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMgPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5leHBlcmltZW50YWxUcmFja0FsbG9jYXRpb25zKQogICAgICAuLmV4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aCA9IF9leHRyYWN0U3RyaW5nT3B0aW9uKAogICAgICAgICAgb3B0aW9ucywgIiR7RmxhZ3MuZXhwZXJpbWVudGFsQWxsb2NhdGlvbnNQYXRofT0iLCBudWxsKQogICAgICAuLmV4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZXhwZXJpbWVudFN0YXJ0dXBGdW5jdGlvbnMpCiAgICAgIC4uZXhwZXJpbWVudFRvQm9vbGVhbiA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZXhwZXJpbWVudFRvQm9vbGVhbikKICAgICAgLi5leHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbiA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uKQogICAgICAuLmV4cGVyaW1lbnROZXdSdGkgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmV4cGVyaW1lbnROZXdSdGkpCiAgICAgIC4uZ2VuZXJhdGVTb3VyY2VNYXAgPSAhX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5ub1NvdXJjZU1hcHMpCiAgICAgIC4ub3V0cHV0VXJpID0gX2V4dHJhY3RVcmlPcHRpb24ob3B0aW9ucywgJy0tb3V0PScpCiAgICAgIC4ucGxhdGZvcm1CaW5hcmllcyA9CiAgICAgICAgICBwbGF0Zm9ybUJpbmFyaWVzID8/IF9leHRyYWN0VXJpT3B0aW9uKG9wdGlvbnMsICctLXBsYXRmb3JtLWJpbmFyaWVzPScpCiAgICAgIC4uc291cmNlTWFwVXJpID0gX2V4dHJhY3RVcmlPcHRpb24ob3B0aW9ucywgJy0tc291cmNlLW1hcD0nKQogICAgICAuLm9taXRJbXBsaWNpdENoZWNrcyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3Mub21pdEltcGxpY2l0Q2hlY2tzKQogICAgICAuLm9taXRBc0Nhc3RzID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5vbWl0QXNDYXN0cykKICAgICAgLi5sYXhSdW50aW1lVHlwZVRvU3RyaW5nID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MubGF4UnVudGltZVR5cGVUb1N0cmluZykKICAgICAgLi50ZXN0TW9kZSA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MudGVzdE1vZGUpCiAgICAgIC4udHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy50cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucykKICAgICAgLi50cnVzdFByaW1pdGl2ZXMgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnRydXN0UHJpbWl0aXZlcykKICAgICAgLi51c2VDb250ZW50U2VjdXJpdHlQb2xpY3kgPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy51c2VDb250ZW50U2VjdXJpdHlQb2xpY3kpCiAgICAgIC4udXNlRnJlcXVlbmN5TmFtZXIgPQogICAgICAgICAgIV9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3Mubm9GcmVxdWVuY3lCYXNlZE1pbmlmaWNhdGlvbikKICAgICAgLi51c2VNdWx0aVNvdXJjZUluZm8gPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnVzZU11bHRpU291cmNlSW5mbykKICAgICAgLi51c2VOZXdTb3VyY2VJbmZvID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy51c2VOZXdTb3VyY2VJbmZvKQogICAgICAuLnZlcmJvc2UgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnZlcmJvc2UpCiAgICAgIC4uc2hvd0ludGVybmFsUHJvZ3Jlc3MgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnByb2dyZXNzKQogICAgICAuLmRpbGxEZXBlbmRlbmNpZXMgPQogICAgICAgICAgX2V4dHJhY3RVcmlMaXN0T3B0aW9uKG9wdGlvbnMsICcke0ZsYWdzLmRpbGxEZXBlbmRlbmNpZXN9JykKICAgICAgLi5yZWFkRGF0YVVyaSA9IF9leHRyYWN0VXJpT3B0aW9uKG9wdGlvbnMsICcke0ZsYWdzLnJlYWREYXRhfT0nKQogICAgICAuLndyaXRlRGF0YVVyaSA9IF9leHRyYWN0VXJpT3B0aW9uKG9wdGlvbnMsICcke0ZsYWdzLndyaXRlRGF0YX09JykKICAgICAgLi5yZWFkQ29kZWdlblVyaSA9IF9leHRyYWN0VXJpT3B0aW9uKG9wdGlvbnMsICcke0ZsYWdzLnJlYWRDb2RlZ2VufT0nKQogICAgICAuLndyaXRlQ29kZWdlblVyaSA9IF9leHRyYWN0VXJpT3B0aW9uKG9wdGlvbnMsICcke0ZsYWdzLndyaXRlQ29kZWdlbn09JykKICAgICAgLi5jb2RlZ2VuU2hhcmQgPSBfZXh0cmFjdEludE9wdGlvbihvcHRpb25zLCAnJHtGbGFncy5jb2RlZ2VuU2hhcmR9PScpCiAgICAgIC4uY29kZWdlblNoYXJkcyA9IF9leHRyYWN0SW50T3B0aW9uKG9wdGlvbnMsICcke0ZsYWdzLmNvZGVnZW5TaGFyZHN9PScpCiAgICAgIC4uY2ZlT25seSA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuY2ZlT25seSkKICAgICAgLi5kZWJ1Z0dsb2JhbEluZmVyZW5jZSA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZGVidWdHbG9iYWxJbmZlcmVuY2UpOwogIH0KCiAgdm9pZCB2YWxpZGF0ZSgpIHsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHNob3VsZCBlbnRyeXBvaW50IGJlIGhlcmU/IHNob3VsZCB3ZSB2YWxpZGF0ZSBpdCBpcyBub3QKICAgIC8vIG51bGw/IEluIHVuaXR0ZXN0cyB3ZSB1c2UgdGhlIHNhbWUgY29tcGlsZXIgdG8gYW5hbHl6ZSBvciBidWlsZCBtdWx0aXBsZQogICAgLy8gZW50cnlwb2ludHMuCiAgICBpZiAobGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJbbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaV0gaXMgbnVsbC4iKTsKICAgIH0KICAgIGlmIChsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpLnBhdGguZW5kc1dpdGgoJy8nKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICJbbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaV0gc2hvdWxkIGJlIGEgZmlsZTogJGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkiKTsKICAgIH0KICAgIGlmIChwYWNrYWdlUm9vdCAhPSBudWxsICYmIHBhY2thZ2VDb25maWcgIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiT25seSBvbmUgb2YgW3BhY2thZ2VSb290XSBvciBbcGFja2FnZUNvbmZpZ10gIgogICAgICAgICAgIm1heSBiZSBnaXZlbi4iKTsKICAgIH0KICAgIGlmIChwYWNrYWdlUm9vdCAhPSBudWxsICYmICFwYWNrYWdlUm9vdC5wYXRoLmVuZHNXaXRoKCIvIikpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIltwYWNrYWdlUm9vdF0gbXVzdCBlbmQgd2l0aCBhIC8iKTsKICAgIH0KICAgIGlmIChwbGF0Zm9ybUJpbmFyaWVzID09IG51bGwgJiYKICAgICAgICBlcXVhbE1hcHMobGFuZ3VhZ2VFeHBlcmltZW50cywgZmUuZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiTWlzc2luZyByZXF1aXJlZCAke0ZsYWdzLnBsYXRmb3JtQmluYXJpZXN9Iik7CiAgICB9CiAgfQoKICB2b2lkIGRlcml2ZU9wdGlvbnMoKSB7CiAgICBpZiAoYmVuY2htYXJraW5nUHJvZHVjdGlvbikgewogICAgICB0cnVzdFByaW1pdGl2ZXMgPSB0cnVlOwogICAgICBvbWl0SW1wbGljaXRDaGVja3MgPSB0cnVlOwogICAgfQoKICAgIGlmIChiZW5jaG1hcmtpbmdFeHBlcmltZW50KSB7CiAgICAgIC8vIFRPRE8oc3JhKTogU2V0IGZsYWdzIGltcGxpZWQgYnkgJy0tYmVuY2htYXJraW5nLXgnLiBJbml0aWFsbHkgdGhpcyB3aWxsCiAgICAgIC8vIGJlIC0tZXhwZXJpbWVudC1uZXctcnRpLCBhbmQgbGF0ZXIgTk5CRC4KICAgICAgZXhwZXJpbWVudE5ld1J0aSA9IHRydWU7CiAgICB9CgogICAgaWYgKG9wdGltaXphdGlvbkxldmVsICE9IG51bGwpIHsKICAgICAgaWYgKG9wdGltaXphdGlvbkxldmVsID09IDApIHsKICAgICAgICBkaXNhYmxlSW5saW5pbmcgPSB0cnVlOwogICAgICAgIGRpc2FibGVUeXBlSW5mZXJlbmNlID0gdHJ1ZTsKICAgICAgICBkaXNhYmxlUnRpT3B0aW1pemF0aW9uID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikgewogICAgICAgIGVuYWJsZU1pbmlmaWNhdGlvbiA9IHRydWU7CiAgICAgICAgbGF4UnVudGltZVR5cGVUb1N0cmluZyA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKG9wdGltaXphdGlvbkxldmVsID49IDMpIHsKICAgICAgICBvbWl0SW1wbGljaXRDaGVja3MgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA9PSA0KSB7CiAgICAgICAgdHJ1c3RQcmltaXRpdmVzID0gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIC8vIFN0cm9uZyBtb2RlIGFsd2F5cyB0cnVzdHMgdHlwZSBhbm5vdGF0aW9ucyAoaW5mZXJyZWQgb3IgZXhwbGljaXQpLCBzbwogICAgLy8gYXNzaWdubWVudHMgY2hlY2tzIHNob3VsZCBiZSB0cnVzdGVkLgogICAgaWYgKG9taXRJbXBsaWNpdENoZWNrcykgewogICAgICBkZWZhdWx0UGFyYW1ldGVyQ2hlY2tQb2xpY3kgPSBDaGVja1BvbGljeS50cnVzdGVkOwogICAgICBkZWZhdWx0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5ID0gQ2hlY2tQb2xpY3kudHJ1c3RlZDsKICAgICAgZGVmYXVsdENvbmRpdGlvbkNoZWNrUG9saWN5ID0gQ2hlY2tQb2xpY3kudHJ1c3RlZDsKICAgIH0gZWxzZSB7CiAgICAgIGRlZmF1bHRQYXJhbWV0ZXJDaGVja1BvbGljeSA9IENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICAgIGRlZmF1bHRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3kgPSBDaGVja1BvbGljeS5jaGVja2VkOwogICAgICBkZWZhdWx0Q29uZGl0aW9uQ2hlY2tQb2xpY3kgPSBDaGVja1BvbGljeS5jaGVja2VkOwogICAgfQogICAgaWYgKG9taXRBc0Nhc3RzKSB7CiAgICAgIGRlZmF1bHRFeHBsaWNpdENhc3RDaGVja1BvbGljeSA9IENoZWNrUG9saWN5LnRydXN0ZWQ7CiAgICB9IGVsc2UgewogICAgICBkZWZhdWx0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3kgPSBDaGVja1BvbGljeS5jaGVja2VkOwogICAgfQoKICAgIGlmIChfZGlzYWJsZU1pbmlmaWNhdGlvbikgewogICAgICBlbmFibGVNaW5pZmljYXRpb24gPSBmYWxzZTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB3YXJuaW5ncyBhbmQgaGludHMgYXJlIHNob3duIGZvciBhbGwgcGFja2FnZXMuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgc2hvd0FsbFBhY2thZ2VXYXJuaW5ncyB7CiAgICByZXR1cm4gc2hvd25QYWNrYWdlV2FybmluZ3MgIT0gbnVsbCAmJiBzaG93blBhY2thZ2VXYXJuaW5ncy5pc0VtcHR5OwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHdhcm5pbmdzIGFuZCBoaW50cyBhcmUgaGlkZGVuIGZvciBhbGwgcGFja2FnZXMuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaGlkZVBhY2thZ2VXYXJuaW5ncyA9PiBzaG93blBhY2thZ2VXYXJuaW5ncyA9PSBudWxsOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgd2FybmluZ3Mgc2hvdWxkIGJlIHNob3VsZCBmb3IgW3VyaV0uCiAgQG92ZXJyaWRlCiAgYm9vbCBzaG93UGFja2FnZVdhcm5pbmdzRm9yKFVyaSB1cmkpIHsKICAgIGlmIChzaG93QWxsUGFja2FnZVdhcm5pbmdzKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHNob3duUGFja2FnZVdhcm5pbmdzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHVyaS5zY2hlbWUgPT0gJ3BhY2thZ2UnICYmCiAgICAgICAgICBzaG93blBhY2thZ2VXYXJuaW5ncy5jb250YWlucyh1cmkucGF0aFNlZ21lbnRzLmZpcnN0KTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCi8vLyBQb2xpY3kgZm9yIHdoYXQgdG8gZG8gd2l0aCBhIHR5cGUgYXNzZXJ0aW9uIGNoZWNrLgovLy8KLy8vIFRoaXMgZW51bS1saWtlIGNsYXNzIGlzIHVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29tcGlsZXIgdHJlYXRzIHR5cGUKLy8vIGFzc2VydGlvbnMgZHVyaW5nIGdsb2JhbCB0eXBlIGluZmVyZW5jZSBhbmQgY29kZWdlbi4KY2xhc3MgQ2hlY2tQb2xpY3kgewogIC8vLyBXaGV0aGVyIHRoZSB0eXBlIGFzc2VydGlvbiBzaG91bGQgYmUgdHJ1c3RlZC4KICBmaW5hbCBib29sIGlzVHJ1c3RlZDsKCiAgLy8vIFdoZXRoZXIgdGhlIHR5cGUgYXNzZXJ0aW9uIHNob3VsZCBiZSBlbWl0dGVkIGFuZCBjaGVja2VkLgogIGZpbmFsIGJvb2wgaXNFbWl0dGVkOwoKICBjb25zdCBDaGVja1BvbGljeSh7dGhpcy5pc1RydXN0ZWQ6IGZhbHNlLCB0aGlzLmlzRW1pdHRlZDogZmFsc2V9KTsKCiAgc3RhdGljIGNvbnN0IHRydXN0ZWQgPSBjb25zdCBDaGVja1BvbGljeShpc1RydXN0ZWQ6IHRydWUpOwogIHN0YXRpYyBjb25zdCBjaGVja2VkID0gY29uc3QgQ2hlY2tQb2xpY3koaXNFbWl0dGVkOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0NoZWNrUG9saWN5KGlzVHJ1c3RlZD0kaXNUcnVzdGVkLCcKICAgICAgJ2lzRW1pdHRlZD0kaXNFbWl0dGVkKSc7Cn0KClN0cmluZyBfZXh0cmFjdFN0cmluZ09wdGlvbigKICAgIExpc3Q8U3RyaW5nPiBvcHRpb25zLCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgZGVmYXVsdFZhbHVlKSB7CiAgZm9yIChTdHJpbmcgb3B0aW9uIGluIG9wdGlvbnMpIHsKICAgIGlmIChvcHRpb24uc3RhcnRzV2l0aChwcmVmaXgpKSB7CiAgICAgIHJldHVybiBvcHRpb24uc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpOwogICAgfQogIH0KICByZXR1cm4gZGVmYXVsdFZhbHVlOwp9CgpVcmkgX2V4dHJhY3RVcmlPcHRpb24oTGlzdDxTdHJpbmc+IG9wdGlvbnMsIFN0cmluZyBwcmVmaXgpIHsKICBTdHJpbmcgb3B0aW9uID0gX2V4dHJhY3RTdHJpbmdPcHRpb24ob3B0aW9ucywgcHJlZml4LCBudWxsKTsKICByZXR1cm4gKG9wdGlvbiA9PSBudWxsKSA/IG51bGwgOiBVcmkucGFyc2Uob3B0aW9uKTsKfQoKaW50IF9leHRyYWN0SW50T3B0aW9uKExpc3Q8U3RyaW5nPiBvcHRpb25zLCBTdHJpbmcgcHJlZml4KSB7CiAgU3RyaW5nIG9wdGlvbiA9IF9leHRyYWN0U3RyaW5nT3B0aW9uKG9wdGlvbnMsIHByZWZpeCwgbnVsbCk7CiAgcmV0dXJuIChvcHRpb24gPT0gbnVsbCkgPyBudWxsIDogaW50LnBhcnNlKG9wdGlvbik7Cn0KCmJvb2wgX2hhc09wdGlvbihMaXN0PFN0cmluZz4gb3B0aW9ucywgU3RyaW5nIG9wdGlvbikgewogIHJldHVybiBvcHRpb25zLmluZGV4T2Yob3B0aW9uKSA+PSAwOwp9CgovLy8gRXh0cmFjdCBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgcHJvdmlkZWQgZm9yIFtmbGFnXS4gUmV0dXJucyBhbgovLy8gZW1wdHkgbGlzdCBpZiBbb3B0aW9uXSBjb250YWluIFtmbGFnXSB3aXRob3V0IGFyZ3VtZW50cy4gUmV0dXJucyBgbnVsbGAgaWYKLy8vIFtvcHRpb25dIGRvZXNuJ3QgY29udGFpbiBbZmxhZ10gd2l0aCBvciB3aXRob3V0IGFyZ3VtZW50cy4KTGlzdDxTdHJpbmc+IF9leHRyYWN0T3B0aW9uYWxDc3ZPcHRpb24oTGlzdDxTdHJpbmc+IG9wdGlvbnMsIFN0cmluZyBmbGFnKSB7CiAgU3RyaW5nIHByZWZpeCA9ICckZmxhZz0nOwogIGZvciAoU3RyaW5nIG9wdGlvbiBpbiBvcHRpb25zKSB7CiAgICBpZiAob3B0aW9uID09IGZsYWcpIHsKICAgICAgcmV0dXJuIGNvbnN0IDxTdHJpbmc+W107CiAgICB9CiAgICBpZiAob3B0aW9uLnN0YXJ0c1dpdGgoZmxhZykpIHsKICAgICAgcmV0dXJuIG9wdGlvbi5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkuc3BsaXQoJywnKTsKICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCi8vLyBFeHRyYWN0IGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIFVyaXMgcHJvdmlkZWQgZm9yIFtmbGFnXS4gUmV0dXJucyBhbgovLy8gZW1wdHkgbGlzdCBpZiBbb3B0aW9uXSBjb250YWluIFtmbGFnXSB3aXRob3V0IGFyZ3VtZW50cy4gUmV0dXJucyBgbnVsbGAgaWYKLy8vIFtvcHRpb25dIGRvZXNuJ3QgY29udGFpbiBbZmxhZ10gd2l0aCBvciB3aXRob3V0IGFyZ3VtZW50cy4KTGlzdDxVcmk+IF9leHRyYWN0VXJpTGlzdE9wdGlvbihMaXN0PFN0cmluZz4gb3B0aW9ucywgU3RyaW5nIGZsYWcpIHsKICBMaXN0PFN0cmluZz4gc3RyaW5nVXJpcyA9IF9leHRyYWN0T3B0aW9uYWxDc3ZPcHRpb24ob3B0aW9ucywgZmxhZyk7CiAgaWYgKHN0cmluZ1VyaXMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIHN0cmluZ1VyaXMubWFwKFVyaS5wYXJzZSkudG9MaXN0KCk7Cn0KCk1hcDxmZS5FeHBlcmltZW50YWxGbGFnLCBib29sPiBfZXh0cmFjdEV4cGVyaW1lbnRzKExpc3Q8U3RyaW5nPiBvcHRpb25zLAogICAge3ZvaWQgRnVuY3Rpb24oU3RyaW5nKSBvbkVycm9yLCB2b2lkIEZ1bmN0aW9uKFN0cmluZykgb25XYXJuaW5nfSkgewogIExpc3Q8U3RyaW5nPiBleHBlcmltZW50cyA9CiAgICAgIF9leHRyYWN0T3B0aW9uYWxDc3ZPcHRpb24ob3B0aW9ucywgRmxhZ3MuZW5hYmxlTGFuZ3VhZ2VFeHBlcmltZW50cyk7CiAgb25FcnJvciA/Pz0gKFN0cmluZyBlcnJvcikgPT4gdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoZXJyb3IpOwogIG9uV2FybmluZyA/Pz0gKFN0cmluZyB3YXJuaW5nKSA9PiBwcmludCh3YXJuaW5nKTsKICByZXR1cm4gZmUucGFyc2VFeHBlcmltZW50YWxGbGFncyhmZS5wYXJzZUV4cGVyaW1lbnRhbEFyZ3VtZW50cyhleHBlcmltZW50cyksCiAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uV2FybmluZzogb25XYXJuaW5nKTsKfQoKY29uc3QgU3RyaW5nIF9VTkRFVEVSTUlORURfQlVJTERfSUQgPSAiYnVpbGQgbnVtYmVyIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkIjsKgnEATk48AR0BQAEuGQE2Ix0BORoBLx0BLB0BKRoBRyMBSCABPSgCAVBOGDVBEgEdBjcTATIGNRUBJAZLIgZPDwZRURkeAT0GTiATATYGQhQBMAZEFgE0BkMXAUgTGAFMDwZOTlEZJQFRDT4BKzsBMh5DATs+AUwrJQFGJwFGJwEpKwFPMTwBUEEhAUogFgFKUUkyBlBKFiEBUU1NTEwGUDMBRDYgAVBMJiQBTAweAUIMIQE/DCEBPAweAUtJMi4BMCUBOC4BSScBT0tKGQFPIygBSzgGTUAjASUlIwFIUC4lAVFQLAFGJQFOIQEuEQE0IQE1GAFJFAEuGQE+LgFLIAEzIwErHAFJHCcBQgZJKwE7BkkyAU5ODAZJKwE3BkkuAU0pAVAtIQFLMSMBUBUhAUwhGAFQKCUBKgYnLQEyKwFBJAE+BkwOLgE4IQFDBj88BicmAUYgATsUAUsvFQE3JTcBQDUmHCUqOU5HQQYhPk8hPCE8Ek9BR0ctSEE8R0EfSDJFTU8oQyE8NyI6P0MnRE8zJ0I8QiVATShDR0U5G1FDSz0hPDcoQ0UjPhxDS0c1QxtGR0lNT0xONVAEARROUBQtRwY4H1cGOE4cBkJCBiRHTQYEARkiHiEGASJRMh8GASUkICUnCCQjJwgkIwgkIAgGAU0tHjlAOQ05QDkGFzwNPAYBICIGBAFHDCRJBAFIDEABPQwpIhMGKChBBhIEAgE3BEs5FDQYAUAYAUUBPT0BDDsfAgEdQCMlLgYEFwIBPT82AgE9PzYCATcnAgFLTz9MHCMaHwYjOQYEDwIBSU8/RUYnLQIBSUgdS0A0Ty8CAU4BIXBhY2thZ2U6Y29tcGlsZXIvc3JjL29wdGlvbnMuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zb3VyY2VfZmlsZV9wcm92aWRlci5kYXJ0wABIbS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHNvdXJjZV9maWxlX3Byb3ZpZGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdkYXJ0Om1hdGgnIGFzIG1hdGg7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGZlOwoKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JyBhcyBhcGkgc2hvdyBEaWFnbm9zdGljOwppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CmltcG9ydCAnLi4vY29tcGlsZXJfbmV3LmRhcnQnOwppbXBvcnQgJ2NvbG9ycy5kYXJ0JyBhcyBjb2xvcnM7CmltcG9ydCAnZGFydDJqcy5kYXJ0JyBzaG93IEFib3J0TGVnOwppbXBvcnQgJ2ZpbGVuYW1lcy5kYXJ0JzsKaW1wb3J0ICdpby9zb3VyY2VfZmlsZS5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIFNvdXJjZUZpbGVQcm92aWRlciBpbXBsZW1lbnRzIENvbXBpbGVySW5wdXQgewogIGJvb2wgaXNXaW5kb3dzID0gKFBsYXRmb3JtLm9wZXJhdGluZ1N5c3RlbSA9PSAnd2luZG93cycpOwogIFVyaSBjd2QgPSBjdXJyZW50RGlyZWN0b3J5OwogIE1hcDxVcmksIGFwaS5JbnB1dD4gdXRmOFNvdXJjZUZpbGVzID0gPFVyaSwgYXBpLklucHV0Pnt9OwogIE1hcDxVcmksIGFwaS5JbnB1dD4gYmluYXJ5U291cmNlRmlsZXMgPSA8VXJpLCBhcGkuSW5wdXQ+e307CiAgaW50IGRhcnRDaGFyYWN0ZXJzUmVhZCA9IDA7CgogIEZ1dHVyZTxhcGkuSW5wdXQ8TGlzdDxpbnQ+Pj4gcmVhZEJ5dGVzRnJvbVVyaSgKICAgICAgVXJpIHJlc291cmNlVXJpLCBhcGkuSW5wdXRLaW5kIGlucHV0S2luZCkgewogICAgaWYgKCFyZXNvdXJjZVVyaS5pc0Fic29sdXRlKSB7CiAgICAgIHJlc291cmNlVXJpID0gY3dkLnJlc29sdmVVcmkocmVzb3VyY2VVcmkpOwogICAgfQogICAgYXBpLklucHV0PExpc3Q8aW50Pj4gaW5wdXQ7CiAgICBzd2l0Y2ggKGlucHV0S2luZCkgewogICAgICBjYXNlIGFwaS5JbnB1dEtpbmQuVVRGODoKICAgICAgICBpbnB1dCA9IHV0ZjhTb3VyY2VGaWxlc1tyZXNvdXJjZVVyaV07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgYXBpLklucHV0S2luZC5iaW5hcnk6CiAgICAgICAgaW5wdXQgPSBiaW5hcnlTb3VyY2VGaWxlc1tyZXNvdXJjZVVyaV07CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaW5wdXQgIT0gbnVsbCkgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoaW5wdXQpOwoKICAgIGlmIChyZXNvdXJjZVVyaS5zY2hlbWUgPT0gJ2ZpbGUnKSB7CiAgICAgIHJldHVybiBfcmVhZEZyb21GaWxlKHJlc291cmNlVXJpLCBpbnB1dEtpbmQpOwogICAgfSBlbHNlIGlmIChyZXNvdXJjZVVyaS5zY2hlbWUgPT0gJ2h0dHAnIHx8IHJlc291cmNlVXJpLnNjaGVtZSA9PSAnaHR0cHMnKSB7CiAgICAgIHJldHVybiBfcmVhZEZyb21IdHRwKHJlc291cmNlVXJpLCBpbnB1dEtpbmQpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlVua25vd24gc2NoZW1lIGluIHVyaSAnJHJlc291cmNlVXJpJyIpOwogICAgfQogIH0KCiAgYXBpLklucHV0IF9yZWFkRnJvbUZpbGVTeW5jKFVyaSByZXNvdXJjZVVyaSwgYXBpLklucHV0S2luZCBpbnB1dEtpbmQpIHsKICAgIGFzc2VydChyZXNvdXJjZVVyaS5zY2hlbWUgPT0gJ2ZpbGUnKTsKICAgIExpc3Q8aW50PiBzb3VyY2U7CiAgICB0cnkgewogICAgICBzb3VyY2UgPSByZWFkQWxsKHJlc291cmNlVXJpLnRvRmlsZVBhdGgoKSwKICAgICAgICAgIHplcm9UZXJtaW5hdGVkOiBpbnB1dEtpbmQgPT0gYXBpLklucHV0S2luZC5VVEY4KTsKICAgIH0gb24gRmlsZVN5c3RlbUV4Y2VwdGlvbiBjYXRjaCAoZXgpIHsKICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBleC5vc0Vycm9yPy5tZXNzYWdlOwogICAgICBTdHJpbmcgZGV0YWlsID0gbWVzc2FnZSAhPSBudWxsID8gJyAoJG1lc3NhZ2UpJyA6ICcnOwogICAgICB0aHJvdyAiRXJyb3IgcmVhZGluZyAnJHtyZWxhdGl2aXplVXJpKHJlc291cmNlVXJpKX0nICRkZXRhaWwiOwogICAgfQogICAgZGFydENoYXJhY3RlcnNSZWFkICs9IHNvdXJjZS5sZW5ndGg7CiAgICBhcGkuSW5wdXQgaW5wdXQ7CiAgICBzd2l0Y2ggKGlucHV0S2luZCkgewogICAgICBjYXNlIGFwaS5JbnB1dEtpbmQuVVRGODoKICAgICAgICBpbnB1dCA9IHV0ZjhTb3VyY2VGaWxlc1tyZXNvdXJjZVVyaV0gPSBuZXcgQ2FjaGluZ1V0ZjhCeXRlc1NvdXJjZUZpbGUoCiAgICAgICAgICAgIHJlc291cmNlVXJpLCByZWxhdGl2aXplVXJpKHJlc291cmNlVXJpKSwgc291cmNlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBhcGkuSW5wdXRLaW5kLmJpbmFyeToKICAgICAgICBpbnB1dCA9CiAgICAgICAgICAgIGJpbmFyeVNvdXJjZUZpbGVzW3Jlc291cmNlVXJpXSA9IG5ldyBCaW5hcnkocmVzb3VyY2VVcmksIHNvdXJjZSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gaW5wdXQ7CiAgfQoKICAvLy8gUmVhZCBbcmVzb3VyY2VVcmldIGRpcmVjdGx5IGFzIGEgVVRGLTggZmlsZS4gSWYgcmVhZGluZyBmYWlscywgYG51bGxgIGlzCiAgLy8vIHJldHVybmVkLgogIGFwaS5JbnB1dCBhdXRvUmVhZEZyb21GaWxlKFVyaSByZXNvdXJjZVVyaSkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIF9yZWFkRnJvbUZpbGVTeW5jKHJlc291cmNlVXJpLCBJbnB1dEtpbmQuVVRGOCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIC8vIFNpbGVuY2UgdGhlIGVycm9yLiBUaGUgW3Jlc291cmNlVXJpXSB3YXMgbm90IHJlcXVlc3RlZCBieSB0aGUgdXNlciBhbmQKICAgICAgLy8gd2FzIG9ubHkgbmVlZGVkIHRvIGdpdmUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLgogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBGdXR1cmU8YXBpLklucHV0PExpc3Q8aW50Pj4+IF9yZWFkRnJvbUZpbGUoCiAgICAgIFVyaSByZXNvdXJjZVVyaSwgYXBpLklucHV0S2luZCBpbnB1dEtpbmQpIHsKICAgIGFwaS5JbnB1dDxMaXN0PGludD4+IGlucHV0OwogICAgdHJ5IHsKICAgICAgaW5wdXQgPSBfcmVhZEZyb21GaWxlU3luYyhyZXNvdXJjZVVyaSwgaW5wdXRLaW5kKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShpbnB1dCk7CiAgfQoKICBGdXR1cmU8YXBpLklucHV0PExpc3Q8aW50Pj4+IF9yZWFkRnJvbUh0dHAoCiAgICAgIFVyaSByZXNvdXJjZVVyaSwgYXBpLklucHV0S2luZCBpbnB1dEtpbmQpIHsKICAgIGFzc2VydChyZXNvdXJjZVVyaS5zY2hlbWUgPT0gJ2h0dHAnKTsKICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgIHJldHVybiBjbGllbnQKICAgICAgICAuZ2V0VXJsKHJlc291cmNlVXJpKQogICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSA9PiByZXF1ZXN0LmNsb3NlKCkpCiAgICAgICAgLnRoZW4oKEh0dHBDbGllbnRSZXNwb25zZSByZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPSBIdHRwU3RhdHVzLm9rKSB7CiAgICAgICAgU3RyaW5nIG1zZyA9ICdGYWlsdXJlIGdldHRpbmcgJHJlc291cmNlVXJpOiAnCiAgICAgICAgICAgICcke3Jlc3BvbnNlLnN0YXR1c0NvZGV9ICR7cmVzcG9uc2UucmVhc29uUGhyYXNlfSc7CiAgICAgICAgdGhyb3cgbXNnOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZS50b0xpc3QoKTsKICAgIH0pLnRoZW4oKExpc3Q8TGlzdDxpbnQ+PiBzcGxpdENvbnRlbnQpIHsKICAgICAgaW50IHRvdGFsTGVuZ3RoID0gc3BsaXRDb250ZW50LmZvbGQoMCwgKGludCBvbGQsIExpc3QgbGlzdCkgewogICAgICAgIHJldHVybiBvbGQgKyBsaXN0Lmxlbmd0aDsKICAgICAgfSk7CiAgICAgIFVpbnQ4TGlzdCByZXN1bHQgPSBuZXcgVWludDhMaXN0KHRvdGFsTGVuZ3RoKTsKICAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgIGZvciAoTGlzdDxpbnQ+IGNvbnRlbnRQYXJ0IGluIHNwbGl0Q29udGVudCkgewogICAgICAgIHJlc3VsdC5zZXRSYW5nZShvZmZzZXQsIG9mZnNldCArIGNvbnRlbnRQYXJ0Lmxlbmd0aCwgY29udGVudFBhcnQpOwogICAgICAgIG9mZnNldCArPSBjb250ZW50UGFydC5sZW5ndGg7CiAgICAgIH0KICAgICAgZGFydENoYXJhY3RlcnNSZWFkICs9IHRvdGFsTGVuZ3RoOwogICAgICBhcGkuSW5wdXQ8TGlzdDxpbnQ+PiBpbnB1dDsKICAgICAgc3dpdGNoIChpbnB1dEtpbmQpIHsKICAgICAgICBjYXNlIGFwaS5JbnB1dEtpbmQuVVRGODoKICAgICAgICAgIGlucHV0ID0gdXRmOFNvdXJjZUZpbGVzW3Jlc291cmNlVXJpXSA9IG5ldyBDYWNoaW5nVXRmOEJ5dGVzU291cmNlRmlsZSgKICAgICAgICAgICAgICByZXNvdXJjZVVyaSwgcmVzb3VyY2VVcmkudG9TdHJpbmcoKSwgcmVzdWx0KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgYXBpLklucHV0S2luZC5iaW5hcnk6CiAgICAgICAgICBpbnB1dCA9CiAgICAgICAgICAgICAgYmluYXJ5U291cmNlRmlsZXNbcmVzb3VyY2VVcmldID0gbmV3IEJpbmFyeShyZXNvdXJjZVVyaSwgcmVzdWx0KTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBpbnB1dDsKICAgIH0pOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBubyBsb25nZXIgbmVlZGVkIGZvciB0aGUgb2xkIGNvbXBpbGVyCiAgLy8gQVBJLgogIEZ1dHVyZSAvKiA8TGlzdDxpbnQ+IHwgU3RyaW5nPiAqLyBjYWxsKFVyaSByZXNvdXJjZVVyaSkgewogICAgdGhyb3cgInVuaW1wbGVtZW50ZWQiOwogIH0KCiAgcmVsYXRpdml6ZVVyaShVcmkgdXJpKSA9PiBmZS5yZWxhdGl2aXplVXJpKGN3ZCwgdXJpLCBpc1dpbmRvd3MpOwoKICBTb3VyY2VGaWxlPExpc3Q8aW50Pj4gZ2V0VXRmOFNvdXJjZUZpbGUoVXJpIHJlc291cmNlVXJpKSB7CiAgICByZXR1cm4gdXRmOFNvdXJjZUZpbGVzW3Jlc291cmNlVXJpXTsKICB9CgogIEl0ZXJhYmxlPFVyaT4gZ2V0U291cmNlVXJpcygpIHsKICAgIFNldDxVcmk+IHVyaXMgPSBuZXcgU2V0PFVyaT4oKTsKICAgIHVyaXMuYWRkQWxsKHV0ZjhTb3VyY2VGaWxlcy5rZXlzKTsKICAgIHVyaXMuYWRkQWxsKGJpbmFyeVNvdXJjZUZpbGVzLmtleXMpOwogICAgcmV0dXJuIHVyaXM7CiAgfQp9CgpMaXN0PGludD4gcmVhZEFsbChTdHJpbmcgZmlsZW5hbWUsIHtib29sIHplcm9UZXJtaW5hdGVkOiB0cnVlfSkgewogIFJhbmRvbUFjY2Vzc0ZpbGUgZmlsZSA9IChuZXcgRmlsZShmaWxlbmFtZSkpLm9wZW5TeW5jKCk7CiAgaW50IGxlbmd0aCA9IGZpbGUubGVuZ3RoU3luYygpOwogIGludCBidWZmZXJMZW5ndGggPSBsZW5ndGg7CiAgaWYgKHplcm9UZXJtaW5hdGVkKSB7CiAgICAvLyArMSB0byBoYXZlIGEgMCB0ZXJtaW5hdGVkIGxpc3QsIHNlZSBbU2Nhbm5lcl0uCiAgICBidWZmZXJMZW5ndGgrKzsKICB9CiAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QoYnVmZmVyTGVuZ3RoKTsKICBmaWxlLnJlYWRJbnRvU3luYyhidWZmZXIsIDAsIGxlbmd0aCk7CiAgZmlsZS5jbG9zZVN5bmMoKTsKICByZXR1cm4gYnVmZmVyOwp9CgpjbGFzcyBDb21waWxlclNvdXJjZUZpbGVQcm92aWRlciBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlciB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBubyBsb25nZXIgbmVlZGVkIGZvciB0aGUgb2xkIGNvbXBpbGVyCiAgLy8gQVBJLgogIEBvdmVycmlkZQogIEZ1dHVyZTxMaXN0PGludD4+IGNhbGwoVXJpIHJlc291cmNlVXJpKSA9PgogICAgICByZWFkRnJvbVVyaShyZXNvdXJjZVVyaSkudGhlbigoaW5wdXQpID0+IGlucHV0LmRhdGEpOwoKICBAb3ZlcnJpZGUKICBGdXR1cmU8YXBpLklucHV0PExpc3Q8aW50Pj4+IHJlYWRGcm9tVXJpKFVyaSB1cmksCiAgICAgICAgICB7SW5wdXRLaW5kIGlucHV0S2luZDogSW5wdXRLaW5kLlVURjh9KSA9PgogICAgICByZWFkQnl0ZXNGcm9tVXJpKHVyaSwgaW5wdXRLaW5kKTsKfQoKY2xhc3MgRm9ybWF0dGluZ0RpYWdub3N0aWNIYW5kbGVyIGltcGxlbWVudHMgQ29tcGlsZXJEaWFnbm9zdGljcyB7CiAgZmluYWwgU291cmNlRmlsZVByb3ZpZGVyIHByb3ZpZGVyOwogIGJvb2wgc2hvd1dhcm5pbmdzID0gdHJ1ZTsKICBib29sIHNob3dIaW50cyA9IHRydWU7CiAgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgYm9vbCBpc0Fib3J0aW5nID0gZmFsc2U7CiAgYm9vbCBlbmFibGVDb2xvcnMgPSBmYWxzZTsKICBib29sIHRocm93T25FcnJvciA9IGZhbHNlOwogIGJvb2wgYXV0b1JlYWRGaWxlVXJpID0gZmFsc2U7CiAgaW50IHRocm93T25FcnJvckNvdW50ID0gMDsKICBhcGkuRGlhZ25vc3RpYyBsYXN0S2luZCA9IG51bGw7CiAgaW50IGZhdGFsQ291bnQgPSAwOwoKICBmaW5hbCBpbnQgRkFUQUwgPSBhcGkuRGlhZ25vc3RpYy5DUkFTSC5vcmRpbmFsIHwgYXBpLkRpYWdub3N0aWMuRVJST1Iub3JkaW5hbDsKICBmaW5hbCBpbnQgSU5GTyA9CiAgICAgIGFwaS5EaWFnbm9zdGljLklORk8ub3JkaW5hbCB8IGFwaS5EaWFnbm9zdGljLlZFUkJPU0VfSU5GTy5vcmRpbmFsOwoKICBGb3JtYXR0aW5nRGlhZ25vc3RpY0hhbmRsZXIoW1NvdXJjZUZpbGVQcm92aWRlciBwcm92aWRlcl0pCiAgICAgIDogdGhpcy5wcm92aWRlciA9CiAgICAgICAgICAgIChwcm92aWRlciA9PSBudWxsKSA/IG5ldyBDb21waWxlclNvdXJjZUZpbGVQcm92aWRlcigpIDogcHJvdmlkZXI7CgogIHZvaWQgaW5mbyh2YXIgbWVzc2FnZSwgW2FwaS5EaWFnbm9zdGljIGtpbmQgPSBhcGkuRGlhZ25vc3RpYy5WRVJCT1NFX0lORk9dKSB7CiAgICBpZiAoIXZlcmJvc2UgJiYga2luZCA9PSBhcGkuRGlhZ25vc3RpYy5WRVJCT1NFX0lORk8pIHJldHVybjsKICAgIGlmIChlbmFibGVDb2xvcnMpIHsKICAgICAgcHJpbnQoJyR7Y29sb3JzLmdyZWVuKCJJbmZvOiIpfSAkbWVzc2FnZScpOwogICAgfSBlbHNlIHsKICAgICAgcHJpbnQoJ0luZm86ICRtZXNzYWdlJyk7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBba2luZF0gc3BlY2lmaWMgcHJlZml4IHRvIFttZXNzYWdlXS4KICBTdHJpbmcgcHJlZml4TWVzc2FnZShTdHJpbmcgbWVzc2FnZSwgYXBpLkRpYWdub3N0aWMga2luZCkgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgYXBpLkRpYWdub3N0aWMuRVJST1I6CiAgICAgICAgcmV0dXJuICdFcnJvcjogJG1lc3NhZ2UnOwogICAgICBjYXNlIGFwaS5EaWFnbm9zdGljLldBUk5JTkc6CiAgICAgICAgcmV0dXJuICdXYXJuaW5nOiAkbWVzc2FnZSc7CiAgICAgIGNhc2UgYXBpLkRpYWdub3N0aWMuSElOVDoKICAgICAgICByZXR1cm4gJ0hpbnQ6ICRtZXNzYWdlJzsKICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5DUkFTSDoKICAgICAgICByZXR1cm4gJ0ludGVybmFsIEVycm9yOiAkbWVzc2FnZSc7CiAgICAgIGNhc2UgYXBpLkRpYWdub3N0aWMuSU5GTzoKICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5WRVJCT1NFX0lORk86CiAgICAgICAgcmV0dXJuICdJbmZvOiAkbWVzc2FnZSc7CiAgICB9CiAgICB0aHJvdyAnVW5leHBlY3RlZCBkaWFnbm9zdGljIGtpbmQ6ICRraW5kICgke2tpbmQub3JkaW5hbH0pJzsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0KHZhciBjb2RlLCBVcmkgdXJpLCBpbnQgYmVnaW4sIGludCBlbmQsIFN0cmluZyBtZXNzYWdlLAogICAgICBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBpZiAoaXNBYm9ydGluZykgcmV0dXJuOwogICAgaXNBYm9ydGluZyA9IChraW5kID09IGFwaS5EaWFnbm9zdGljLkNSQVNIKTsKCiAgICBib29sIGZhdGFsID0gKGtpbmQub3JkaW5hbCAmIEZBVEFMKSAhPSAwOwogICAgYm9vbCBpc0luZm8gPSAoa2luZC5vcmRpbmFsICYgSU5GTykgIT0gMDsKICAgIGlmIChpc0luZm8gJiYgdXJpID09IG51bGwgJiYga2luZCAhPSBhcGkuRGlhZ25vc3RpYy5JTkZPKSB7CiAgICAgIGluZm8obWVzc2FnZSwga2luZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBtZXNzYWdlID0gcHJlZml4TWVzc2FnZShtZXNzYWdlLCBraW5kKTsKCiAgICAvLyBbbGFzdEtpbmRdIHJlY29yZHMgdGhlIHByZXZpb3VzIG5vbi1JTkZPIGtpbmQgd2Ugc2F3LgogICAgLy8gVGhpcyBpcyB1c2VkIHRvIHN1cHByZXNzIGluZm8gYWJvdXQgYSB3YXJuaW5nIHdoZW4gd2FybmluZ3MgYXJlCiAgICAvLyBzdXBwcmVzc2VkLCBhbmQgc2ltaWxhciBmb3IgaGludHMuCiAgICBpZiAoa2luZCAhPSBhcGkuRGlhZ25vc3RpYy5JTkZPKSB7CiAgICAgIGxhc3RLaW5kID0ga2luZDsKICAgIH0KICAgIHZhciBjb2xvcjsKICAgIGlmIChraW5kID09IGFwaS5EaWFnbm9zdGljLkVSUk9SKSB7CiAgICAgIGNvbG9yID0gY29sb3JzLnJlZDsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HKSB7CiAgICAgIGlmICghc2hvd1dhcm5pbmdzKSByZXR1cm47CiAgICAgIGNvbG9yID0gY29sb3JzLm1hZ2VudGE7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gYXBpLkRpYWdub3N0aWMuSElOVCkgewogICAgICBpZiAoIXNob3dIaW50cykgcmV0dXJuOwogICAgICBjb2xvciA9IGNvbG9ycy5jeWFuOwogICAgfSBlbHNlIGlmIChraW5kID09IGFwaS5EaWFnbm9zdGljLkNSQVNIKSB7CiAgICAgIGNvbG9yID0gY29sb3JzLnJlZDsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBhcGkuRGlhZ25vc3RpYy5JTkZPKSB7CiAgICAgIGlmIChsYXN0S2luZCA9PSBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HICYmICFzaG93V2FybmluZ3MpIHJldHVybjsKICAgICAgaWYgKGxhc3RLaW5kID09IGFwaS5EaWFnbm9zdGljLkhJTlQgJiYgIXNob3dIaW50cykgcmV0dXJuOwogICAgICBjb2xvciA9IGNvbG9ycy5ncmVlbjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICdVbmtub3duIGtpbmQ6ICRraW5kICgke2tpbmQub3JkaW5hbH0pJzsKICAgIH0KICAgIGlmICghZW5hYmxlQ29sb3JzKSB7CiAgICAgIGNvbG9yID0gKFN0cmluZyB4KSA9PiB4OwogICAgfQogICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgIHByaW50KCcke2NvbG9yKG1lc3NhZ2UpfScpOwogICAgfSBlbHNlIHsKICAgICAgYXBpLklucHV0IGZpbGUgPSBwcm92aWRlci5nZXRVdGY4U291cmNlRmlsZSh1cmkpOwogICAgICBpZiAoZmlsZSA9PSBudWxsICYmCiAgICAgICAgICBhdXRvUmVhZEZpbGVVcmkgJiYKICAgICAgICAgICh1cmkuc2NoZW1lID09ICdmaWxlJyB8fCAhdXJpLmlzQWJzb2x1dGUpICYmCiAgICAgICAgICB1cmkucGF0aC5lbmRzV2l0aCgnLmRhcnQnKSkgewogICAgICAgIGlmICghdXJpLmlzQWJzb2x1dGUpIHsKICAgICAgICAgIHVyaSA9IHByb3ZpZGVyLmN3ZC5yZXNvbHZlVXJpKHVyaSk7CiAgICAgICAgfQogICAgICAgIC8vIFdoZW4gcmVhZGluZyBmcm9tIC5kaWxsIGZpbGVzLCB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzIGhhdmVuJ3QgYmVlbgogICAgICAgIC8vIGxvYWRlZC4gTG9hZCB0aGUgZmlsZSBpZiBwb3NzaWJsZSB0byBwcm92aWRlIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UuCiAgICAgICAgZmlsZSA9IHByb3ZpZGVyLmF1dG9SZWFkRnJvbUZpbGUodXJpKTsKICAgICAgfQogICAgICBpZiAoZmlsZSBpcyBTb3VyY2VGaWxlKSB7CiAgICAgICAgcHJpbnQoZmlsZS5nZXRMb2NhdGlvbk1lc3NhZ2UoY29sb3IobWVzc2FnZSksIGJlZ2luLCBlbmQsCiAgICAgICAgICAgIGNvbG9yaXplOiBjb2xvcikpOwogICAgICB9IGVsc2UgewogICAgICAgIFN0cmluZyBwb3NpdGlvbiA9IGVuZCAtIGJlZ2luID4gMCA/ICdAJGJlZ2luKyR7ZW5kIC0gYmVnaW59JyA6ICcnOwogICAgICAgIHByaW50KCcke3Byb3ZpZGVyLnJlbGF0aXZpemVVcmkodXJpKX0kcG9zaXRpb246XG4nCiAgICAgICAgICAgICcke2NvbG9yKG1lc3NhZ2UpfScpOwogICAgICB9CiAgICB9CiAgICBpZiAoZmF0YWwgJiYgKytmYXRhbENvdW50ID49IHRocm93T25FcnJvckNvdW50ICYmIHRocm93T25FcnJvcikgewogICAgICBpc0Fib3J0aW5nID0gdHJ1ZTsKICAgICAgdGhyb3cgbmV3IEFib3J0TGVnKG1lc3NhZ2UpOwogICAgfQogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBubyBsb25nZXIgbmVlZGVkIGZvciB0aGUgb2xkIGNvbXBpbGVyCiAgLy8gQVBJLgogIHZvaWQgY2FsbChVcmkgdXJpLCBpbnQgYmVnaW4sIGludCBlbmQsIFN0cmluZyBtZXNzYWdlLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICByZXR1cm4gcmVwb3J0KG51bGwsIHVyaSwgYmVnaW4sIGVuZCwgbWVzc2FnZSwga2luZCk7CiAgfQp9Cgp0eXBlZGVmIHZvaWQgTWVzc2FnZUNhbGxiYWNrKFN0cmluZyBtZXNzYWdlKTsKCmNsYXNzIFJhbmRvbUFjY2Vzc0ZpbGVPdXRwdXRQcm92aWRlciBpbXBsZW1lbnRzIENvbXBpbGVyT3V0cHV0IHsKICBmaW5hbCBVcmkgb3V0OwogIGZpbmFsIFVyaSBzb3VyY2VNYXBPdXQ7CiAgZmluYWwgTWVzc2FnZUNhbGxiYWNrIG9uSW5mbzsKICBmaW5hbCBNZXNzYWdlQ2FsbGJhY2sgb25GYWlsdXJlOwoKICBpbnQgdG90YWxDaGFyYWN0ZXJzV3JpdHRlbiA9IDA7CiAgaW50IHRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW5QcmltYXJ5ID0gMDsKICBpbnQgdG90YWxDaGFyYWN0ZXJzV3JpdHRlbkphdmFTY3JpcHQgPSAwOwogIGludCB0b3RhbERhdGFXcml0dGVuID0gMDsKCiAgTGlzdDxTdHJpbmc+IGFsbE91dHB1dEZpbGVzID0gPFN0cmluZz5bXTsKCiAgUmFuZG9tQWNjZXNzRmlsZU91dHB1dFByb3ZpZGVyKHRoaXMub3V0LCB0aGlzLnNvdXJjZU1hcE91dCwKICAgICAge3RoaXMub25JbmZvLCB0aGlzLm9uRmFpbHVyZX0pOwoKICBVcmkgY3JlYXRlVXJpKFN0cmluZyBuYW1lLCBTdHJpbmcgZXh0ZW5zaW9uLCBPdXRwdXRUeXBlIHR5cGUpIHsKICAgIFVyaSB1cmk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVbmlmeSBoYW5kbGUgb2YgW25hbWVdIGFuZCBbZXh0ZW5zaW9uXSB0byBwcmVwYXJlCiAgICAvLyBmb3IgdXNpbmcgYSBzaW5nbGUsIHBvc3NpYmx5IHJlbGF0aXZlLCBbdXJpXSBhcyBpbnB1dC4KICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlIE91dHB1dFR5cGUuanM6CiAgICAgICAgaWYgKG5hbWUgPT0gJycpIHsKICAgICAgICAgIHVyaSA9IG91dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdXJpID0gb3V0LnJlc29sdmUoJyRuYW1lLiRleHRlbnNpb24nKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgT3V0cHV0VHlwZS5zb3VyY2VNYXA6CiAgICAgICAgaWYgKG5hbWUgPT0gJycpIHsKICAgICAgICAgIHVyaSA9IHNvdXJjZU1hcE91dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdXJpID0gb3V0LnJlc29sdmUoJyRuYW1lLiRleHRlbnNpb24nKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgT3V0cHV0VHlwZS5qc1BhcnQ6CiAgICAgICAgdXJpID0gb3V0LnJlc29sdmUoJyRuYW1lLiRleHRlbnNpb24nKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBPdXRwdXRUeXBlLmR1bXBJbmZvOgogICAgICBjYXNlIE91dHB1dFR5cGUuZGVmZXJyZWRNYXA6CiAgICAgICAgaWYgKG5hbWUgPT0gJycpIHsKICAgICAgICAgIG5hbWUgPSBvdXQucGF0aFNlZ21lbnRzLmxhc3Q7CiAgICAgICAgfQogICAgICAgIGlmIChleHRlbnNpb24gPT0gJycpIHsKICAgICAgICAgIHVyaSA9IG91dC5yZXNvbHZlKG5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1cmkgPSBvdXQucmVzb2x2ZSgnJG5hbWUuJGV4dGVuc2lvbicpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBPdXRwdXRUeXBlLmRlYnVnOgogICAgICAgIHVyaSA9IG91dC5yZXNvbHZlKCckbmFtZS4kZXh0ZW5zaW9uJyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgb25GYWlsdXJlKCdVbmtub3duIG91dHB1dCB0eXBlOiAkdHlwZScpOwogICAgfQogICAgcmV0dXJuIHVyaTsKICB9CgogIEBvdmVycmlkZQogIE91dHB1dFNpbmsgY3JlYXRlT3V0cHV0U2luayhTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbiwgT3V0cHV0VHlwZSB0eXBlKSB7CiAgICBVcmkgdXJpID0gY3JlYXRlVXJpKG5hbWUsIGV4dGVuc2lvbiwgdHlwZSk7CiAgICBib29sIGlzUHJpbWFyeU91dHB1dCA9IHVyaSA9PSBvdXQ7CgogICAgaWYgKHVyaS5zY2hlbWUgIT0gJ2ZpbGUnKSB7CiAgICAgIG9uRmFpbHVyZSgnVW5oYW5kbGVkIHNjaGVtZSAke3VyaS5zY2hlbWV9IGluICR1cmkuJyk7CiAgICB9CgogICAgUmFuZG9tQWNjZXNzRmlsZSBvdXRwdXQ7CiAgICB0cnkgewogICAgICBvdXRwdXQgPSBuZXcgRmlsZSh1cmkudG9GaWxlUGF0aCgpKS5vcGVuU3luYyhtb2RlOiBGaWxlTW9kZS53cml0ZSk7CiAgICB9IG9uIEZpbGVTeXN0ZW1FeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgb25GYWlsdXJlKCckZScpOwogICAgfQoKICAgIGFsbE91dHB1dEZpbGVzCiAgICAgICAgLmFkZChmZS5yZWxhdGl2aXplVXJpKGN1cnJlbnREaXJlY3RvcnksIHVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKSk7CgogICAgaW50IGNoYXJhY3RlcnNXcml0dGVuID0gMDsKCiAgICB2b2lkIHdyaXRlU3RyaW5nU3luYyhTdHJpbmcgZGF0YSkgewogICAgICAvLyBXcml0ZSB0aGUgZGF0YSBpbiBjaHVua3Mgb2YgOGtiLCBvdGhlcndpc2Ugd2UgcmlzayBydW5uaW5nIE9PTS4KICAgICAgaW50IGNodW5rU2l6ZSA9IDggKiAxMDI0OwoKICAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgIHdoaWxlIChvZmZzZXQgPCBkYXRhLmxlbmd0aCkgewogICAgICAgIG91dHB1dC53cml0ZVN0cmluZ1N5bmMoCiAgICAgICAgICAgIGRhdGEuc3Vic3RyaW5nKG9mZnNldCwgbWF0aC5taW4ob2Zmc2V0ICsgY2h1bmtTaXplLCBkYXRhLmxlbmd0aCkpKTsKICAgICAgICBvZmZzZXQgKz0gY2h1bmtTaXplOwogICAgICB9CiAgICAgIGNoYXJhY3RlcnNXcml0dGVuICs9IGRhdGEubGVuZ3RoOwogICAgfQoKICAgIHZvaWQgb25Eb25lKCkgewogICAgICBvdXRwdXQuY2xvc2VTeW5jKCk7CiAgICAgIHRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW4gKz0gY2hhcmFjdGVyc1dyaXR0ZW47CiAgICAgIGlmIChpc1ByaW1hcnlPdXRwdXQpIHsKICAgICAgICB0b3RhbENoYXJhY3RlcnNXcml0dGVuUHJpbWFyeSArPSBjaGFyYWN0ZXJzV3JpdHRlbjsKICAgICAgfQogICAgICBpZiAodHlwZSA9PSBPdXRwdXRUeXBlLmpzIHx8IHR5cGUgPT0gT3V0cHV0VHlwZS5qc1BhcnQpIHsKICAgICAgICB0b3RhbENoYXJhY3RlcnNXcml0dGVuSmF2YVNjcmlwdCArPSBjaGFyYWN0ZXJzV3JpdHRlbjsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBuZXcgX091dHB1dFNpbmtXcmFwcGVyKHdyaXRlU3RyaW5nU3luYywgb25Eb25lKTsKICB9CgogIEBvdmVycmlkZQogIEJpbmFyeU91dHB1dFNpbmsgY3JlYXRlQmluYXJ5U2luayhVcmkgdXJpKSB7CiAgICB1cmkgPSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmVVcmkodXJpKTsKCiAgICBhbGxPdXRwdXRGaWxlcwogICAgICAgIC5hZGQoZmUucmVsYXRpdml6ZVVyaShjdXJyZW50RGlyZWN0b3J5LCB1cmksIFBsYXRmb3JtLmlzV2luZG93cykpOwoKICAgIGlmICh1cmkuc2NoZW1lICE9ICdmaWxlJykgewogICAgICBvbkZhaWx1cmUoJ1VuaGFuZGxlZCBzY2hlbWUgJHt1cmkuc2NoZW1lfSBpbiAkdXJpLicpOwogICAgfQoKICAgIFJhbmRvbUFjY2Vzc0ZpbGUgb3V0cHV0OwogICAgdHJ5IHsKICAgICAgb3V0cHV0ID0gbmV3IEZpbGUodXJpLnRvRmlsZVBhdGgoKSkub3BlblN5bmMobW9kZTogRmlsZU1vZGUud3JpdGUpOwogICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgIG9uRmFpbHVyZSgnJGUnKTsKICAgIH0KCiAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKCiAgICB2b2lkIHdyaXRlQnl0ZXNTeW5jKExpc3Q8aW50PiBkYXRhLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgICAgb3V0cHV0LndyaXRlRnJvbVN5bmMoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICAgIGJ5dGVzV3JpdHRlbiArPSAoZW5kID8/IGRhdGEubGVuZ3RoKSAtIHN0YXJ0OwogICAgfQoKICAgIHZvaWQgb25Eb25lKCkgewogICAgICBvdXRwdXQuY2xvc2VTeW5jKCk7CiAgICAgIHRvdGFsRGF0YVdyaXR0ZW4gKz0gYnl0ZXNXcml0dGVuOwogICAgfQoKICAgIHJldHVybiBuZXcgX0JpbmFyeU91dHB1dFNpbmtXcmFwcGVyKHdyaXRlQnl0ZXNTeW5jLCBvbkRvbmUpOwogIH0KfQoKY2xhc3MgUmFuZG9tQWNjZXNzQmluYXJ5T3V0cHV0U2luayBpbXBsZW1lbnRzIGFwaS5CaW5hcnlPdXRwdXRTaW5rIHsKICBmaW5hbCBSYW5kb21BY2Nlc3NGaWxlIG91dHB1dDsKCiAgUmFuZG9tQWNjZXNzQmluYXJ5T3V0cHV0U2luayhVcmkgdXJpKQogICAgICA6IG91dHB1dCA9IG5ldyBGaWxlLmZyb21VcmkodXJpKS5vcGVuU3luYyhtb2RlOiBGaWxlTW9kZS53cml0ZSk7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBvdXRwdXQud3JpdGVGcm9tU3luYyhidWZmZXIsIHN0YXJ0LCBlbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIG91dHB1dC5jbG9zZVN5bmMoKTsKICB9Cn0KCmNsYXNzIF9PdXRwdXRTaW5rV3JhcHBlciBleHRlbmRzIE91dHB1dFNpbmsgewogIHZvaWQgRnVuY3Rpb24oU3RyaW5nKSBvbkFkZDsKICB2b2lkIEZ1bmN0aW9uKCkgb25DbG9zZTsKCiAgX091dHB1dFNpbmtXcmFwcGVyKHRoaXMub25BZGQsIHRoaXMub25DbG9zZSk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkKFN0cmluZyBkYXRhKSA9PiBvbkFkZChkYXRhKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpID0+IG9uQ2xvc2UoKTsKfQoKY2xhc3MgX0JpbmFyeU91dHB1dFNpbmtXcmFwcGVyIGV4dGVuZHMgQmluYXJ5T3V0cHV0U2luayB7CiAgdm9pZCBGdW5jdGlvbihMaXN0PGludD4sIFtpbnQsIGludF0pIG9uV3JpdGU7CiAgdm9pZCBGdW5jdGlvbigpIG9uQ2xvc2U7CgogIF9CaW5hcnlPdXRwdXRTaW5rV3JhcHBlcih0aGlzLm9uV3JpdGUsIHRoaXMub25DbG9zZSk7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGUoTGlzdDxpbnQ+IGRhdGEsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgPT4KICAgICAgb25Xcml0ZShkYXRhLCBzdGFydCwgZW5kKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpID0+IG9uQ2xvc2UoKTsKfQoKLy8vIEFkYXB0ZXIgdG8gaW50ZWdyYXRlIGRhcnQyanMgaW4gYmF6ZWwuCi8vLwovLy8gVG8gaGFuZGxlIGJhemVsJ3Mgc3BlY2lhbCBsYXlvdXQ6Ci8vLwovLy8gICogV2Ugc3BlY2lmeSBhIC5wYWNrYWdlcyBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBleHBhbmRzIHBhY2thZ2VzIHRvIHRoZWlyCi8vLyAgICBjb3JyZXNwb25kaW5nIGJhemVsIGxvY2F0aW9uLiBUaGlzIHdheSB0aGVyZSBpcyBubyBuZWVkIHRvIGNyZWF0ZSBhIHB1YgovLy8gICAgY2FjaGUgcHJpb3IgdG8gaW52b2tpbmcgZGFydDJqcy4KLy8vCi8vLyAgKiBXZSBwcm92aWRlIGFuIGltcGxpY2l0IG1hcHBpbmcgdGhhdCBjYW4gbWFrZSBhbGwgdXJscyByZWxhdGl2ZSB0byB0aGUKLy8vICBiYXplbCByb290LgovLy8gICAgVG8gdGhlIGNvbXBpbGVyLCBVUklzIGxvb2sgbGlrZToKLy8vICAgICAgZmlsZTovLy9iYXplbC1yb290L2EvYi9jLmRhcnQKLy8vCi8vLyAgICBldmVuIHRob3VnaCBpbiB0aGUgZmlsZSBzeXN0ZW0gdGhlIGZpbGUgaXMgbG9jYXRlZCBhdDoKLy8vICAgICAgZmlsZTovLy9wYXRoL3RvL3RoZS9hY3R1YWwvYmF6ZWwvcm9vdC9hL2IvYy5kYXJ0Ci8vLwovLy8gICAgVGhpcyBtYXBwaW5nIHNlcnZlcyB0d28gcHVycG9zZXM6Ci8vLyAgICAgIC0gSXQgbWFrZXMgY29tcGlsZXIgcmVzdWx0cyBpbmRlcGVuZGVudCBvZiB0aGUgbWFjaGluZSBsYXlvdXQsIHdoaWNoCi8vLyAgICAgICAgZW5hYmxlcyB1cyB0byBzaGFyZSByZXN1bHRzIGFjcm9zcyBiYXplbCBydW5zIGFuZCBhY3Jvc3MgbWFjaGluZXMuCi8vLwovLy8gICAgICAtIEl0IGhpZGVzIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGdlbmVyYXRlZCBhbmQgc291cmNlIGZpbGVzLiBUaGF0IHdheQovLy8gICAgICB3ZSBjYW4gdXNlIHRoZSBzdGFuZGFyZCBwYWNrYWdlLXJlc29sdXRpb24gbWVjaGFuaXNtIGFuZCBpZ25vcmUgdGhlCi8vLyAgICAgIGludGVybmFscyBvZiBob3cgZmlsZXMgYXJlIG9yZ2FuaXplZCB3aXRoaW4gYmF6ZWwuCi8vLwovLy8gV2hlbiBpbnZva2luZyB0aGUgY29tcGlsZXIsIGJhemVsIHdpbGwgdXNlIGBwYWNrYWdlOmAgYW5kCi8vLyBgZmlsZTovLy9iYXplbC1yb290L2AgVVJJcyB0byBzcGVjaWZ5IGVudHJ5cG9pbnRzLgovLy8KLy8vIFRoZSBtYXBwaW5nIGlzIHNwZWNpZmllZCB1c2luZyBzZWFyY2ggcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKLy8vIGRpcmVjdG9yeS4gV2hlbiB0aGlzIHByb3ZpZGVyIGxvb2tzIHVwIGEgZmlsZSwgdGhlIGJhemVsLXJvb3QgZm9sZGVyIGlzCi8vLyByZXBsYWNlZCBieSB0aGUgZmlyc3QgZGlyZWN0b3J5IGluIHRoZSBzZWFyY2ggcGF0aCBjb250YWluaW5nIHRoZSBmaWxlLCBpZgovLy8gYW55LiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIHNlYXJjaCBwYXRoICIuLGJhemVsLWJpbi8iLCBhbmQgYSBVUkwKLy8vIG9mIHRoZSBmb3JtIGBmaWxlOi8vL2JhemVsLXJvb3QvYS9iLmRhcnRgLCB0aGlzIHByb3ZpZGVyIHdpbGwgY2hlY2sgaWYgdGhlCi8vLyBmaWxlIGV4aXN0cyB1bmRlciAiLi9hL2IuZGFydCIsIHRoZW4gY2hlY2sgdW5kZXIgImJhemVsLWJpbi9hL2IuZGFydCIuICBJZgovLy8gbm9uZSBvZiB0aGUgcGF0aHMgbWF0Y2hlcywgaXQgd2lsbCBhdHRlbXB0IHRvIGxvYWQgdGhlIGZpbGUgZnJvbQovLy8gYC9iYXplbC1yb290L2EvYi5kYXJ0YCB3aGljaCB3aWxsIGxpa2VseSBmYWlsLgpjbGFzcyBCYXplbElucHV0UHJvdmlkZXIgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXIgewogIGZpbmFsIExpc3Q8VXJpPiBkaXJzOwoKICBCYXplbElucHV0UHJvdmlkZXIoTGlzdDxTdHJpbmc+IHNlYXJjaFBhdGhzKQogICAgICA6IGRpcnMgPSBzZWFyY2hQYXRocy5tYXAoX3Jlc29sdmUpLnRvTGlzdCgpOwoKICBzdGF0aWMgVXJpIF9yZXNvbHZlKFN0cmluZyBwYXRoKSA9PiBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUocGF0aCk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxhcGkuSW5wdXQ8TGlzdDxpbnQ+Pj4gcmVhZEZyb21VcmkoVXJpIHVyaSwKICAgICAge0lucHV0S2luZCBpbnB1dEtpbmQ6IElucHV0S2luZC5VVEY4fSkgYXN5bmMgewogICAgdmFyIHJlc29sdmVkVXJpID0gdXJpOwogICAgdmFyIHBhdGggPSB1cmkucGF0aDsKICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy9iYXplbC1yb290JykpIHsKICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKCcvYmF6ZWwtcm9vdC8nLmxlbmd0aCk7CiAgICAgIGZvciAodmFyIGRpciBpbiBkaXJzKSB7CiAgICAgICAgdmFyIGZpbGUgPSBkaXIucmVzb2x2ZShwYXRoKTsKICAgICAgICBpZiAoYXdhaXQgbmV3IEZpbGUuZnJvbVVyaShmaWxlKS5leGlzdHMoKSkgewogICAgICAgICAgcmVzb2x2ZWRVcmkgPSBmaWxlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhcGkuSW5wdXQ8TGlzdDxpbnQ+PiByZXN1bHQgPQogICAgICAgIGF3YWl0IHJlYWRCeXRlc0Zyb21VcmkocmVzb2x2ZWRVcmksIGlucHV0S2luZCk7CiAgICBzd2l0Y2ggKGlucHV0S2luZCkgewogICAgICBjYXNlIElucHV0S2luZC5VVEY4OgogICAgICAgIHV0ZjhTb3VyY2VGaWxlc1t1cmldID0gdXRmOFNvdXJjZUZpbGVzW3Jlc29sdmVkVXJpXTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBJbnB1dEtpbmQuYmluYXJ5OgogICAgICAgIGJpbmFyeVNvdXJjZUZpbGVzW3VyaV0gPSBiaW5hcnlTb3VyY2VGaWxlc1tyZXNvbHZlZFVyaV07CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgYXBpLklucHV0IGF1dG9SZWFkRnJvbUZpbGUoVXJpIHJlc291cmNlVXJpKSB7CiAgICB2YXIgcGF0aCA9IHJlc291cmNlVXJpLnBhdGg7CiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvYmF6ZWwtcm9vdCcpKSB7CiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygnL2JhemVsLXJvb3QvJy5sZW5ndGgpOwogICAgICBmb3IgKHZhciBkaXIgaW4gZGlycykgewogICAgICAgIHZhciBmaWxlID0gZGlyLnJlc29sdmUocGF0aCk7CiAgICAgICAgaWYgKG5ldyBGaWxlLmZyb21VcmkoZmlsZSkuZXhpc3RzU3luYygpKSB7CiAgICAgICAgICByZXR1cm4gc3VwZXIuYXV0b1JlYWRGcm9tRmlsZShmaWxlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQqCTgBOTjwBHgEVEhwaAUABMiYfICUZHgE9PB48Ph4BMTIjMQYgGR8uDyEwDwY3ASg0UDQNRwYEAUoqFgoxPCosPEUGKRUZH08+DyEQTg8GEgQBTxAwCj0SUDgGEQQBLjIgCjkSIgYkBAEuMioqEh0+LjI2PxMIIC1EIgo1FjRLJggpIhshUTwRIxJQEQgUCAQBUQo8GwQBQwE9KQQBIiQnKREEAgFCOyIdGDYUBCwoFBECAT5RCgwtPAEMNDQoAgFDJRwZGBsdHSAdIhYBURNJAT0YTgFQQRgyDR8GBAEwPhQhIiMkICEhKyAoIQZBBAEMRR0cMQEuLkAbDgYBLAE9RyonFwYPKBoxIR4uHhsvGi5HQRwNNQYZHwYXIg04Gh03KB8uClFQLwggQh8PSzsiCAZGGSMGBAFRClA5BAIBLgFBERogIwEiKSwcASwBPiYBQg1OPhQaGhURMQoPIRoeETEKDx4vDyAjGigKHyMRMQoPHS8PDzEGEAQBDFAwJwEgPAYBHQpKKRcGARNLAR8BKEkgARYlIFAdCCgGARQaMx08CEA/CAYBPAQBDC8sARNLASA8BgEdCkopFwYBGgFELjQGARQaKAYBQQQCAUUhAShHAQw7LgQBDBEYBAIBLh8bATABDCgBDB0CATowGwE4AQw6IQEMHQIBKwQmBFBPKARNESgnBD46BClOTgRRTTwEPjcESExPRk9PRTM2GAEvMwFGAQw0NRsZKjQeJjUeEQoIBiI4GRs9Dx1BDwYTBAEMMCEqNB4mMy8KCAYRBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL3NvdXJjZV9maWxlX3Byb3ZpZGVyLmRhcnQ0c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdXRpbC9jb21tYW5kX2xpbmUuZGFydIg/Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy51dGlsLmNvbW1hbmRfbGluZTsKCi8vLyBUaGUgYWNjZXB0ZWQgZXNjYXBlcyBpbiB0aGUgaW5wdXQgb2YgdGhlIC0tYmF0Y2ggcHJvY2Vzc29yLgovLy8KLy8vIENvbnRyYXJ5IHRvIERhcnQgc3RyaW5ncyBpdCBkb2VzIG5vdCBjb250YWluIGhleCBlc2NhcGVzIChcdSBvciBceCkuCk1hcDxTdHJpbmcsIFN0cmluZz4gRVNDQVBFX01BUFBJTkcgPSBjb25zdCB7CiAgIm4iOiAiXG4iLAogICJyIjogIlxyIiwKICAidCI6ICJcdCIsCiAgImIiOiAiXGIiLAogICJmIjogIlxmIiwKICAidiI6ICJcdiIsCiAgIlxcIjogIlxcIiwKfTsKCi8vLyBTcGxpdHMgdGhlIGxpbmUgc2ltaWxhciB0byBob3cgYSBzaGVsbCB3b3VsZCBzcGxpdCBhcmd1bWVudHMuIElmIFt3aW5kb3dzXQovLy8gaXMgYHRydWVgIGVzY2FwZXMgd2lsbCBiZSBoYW5kbGVkIGxpa2Ugb24gdGhlIFdpbmRvd3MgY29tbWFuZC1saW5lLgovLy8KLy8vIEV4YW1wbGU6Ci8vLwovLy8gICAgIHNwbGl0bGluZSgiIiItLWFyZ3MgImFiImMgJ3dpdGggIiBcJ3NwYWNlcyciIiIpLmZvckVhY2gocHJpbnQpOwovLy8gICAgIC8vIC0tYXJncwovLy8gICAgIC8vIGFiYwovLy8gICAgIC8vIHdpdGggIiAnc3BhY2VzCkxpc3Q8U3RyaW5nPiBzcGxpdExpbmUoU3RyaW5nIGxpbmUsIHtib29sIHdpbmRvd3M6IGZhbHNlfSkgewogIExpc3Q8U3RyaW5nPiByZXN1bHQgPSA8U3RyaW5nPltdOwogIGJvb2wgaW5RdW90ZXMgPSBmYWxzZTsKICBTdHJpbmcgb3BlbmluZ1F1b3RlOwogIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7CiAgICBTdHJpbmcgYyA9IGxpbmVbaV07CiAgICBpZiAoaW5RdW90ZXMgJiYgYyA9PSBvcGVuaW5nUXVvdGUpIHsKICAgICAgaW5RdW90ZXMgPSBmYWxzZTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoIWluUXVvdGVzICYmIChjID09ICciJyB8fCAoYyA9PSAiJyIgJiYgIXdpbmRvd3MpKSkgewogICAgICBpblF1b3RlcyA9IHRydWU7CiAgICAgIG9wZW5pbmdRdW90ZSA9IGM7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGMgPT0gJ1xcJykgewogICAgICBpZiAoaSA9PSBsaW5lLmxlbmd0aCAtIDEpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJVbmZpbmlzaGVkIGVzY2FwZTogJGxpbmUiKTsKICAgICAgfQogICAgICBpZiAod2luZG93cykgewogICAgICAgIFN0cmluZyBuZXh0ID0gbGluZVtpICsgMV07CiAgICAgICAgaWYgKG5leHQgPT0gJyInIHx8IG5leHQgPT0gcidcJykgewogICAgICAgICAgYnVmZmVyLndyaXRlKG5leHQpOwogICAgICAgICAgaSsrOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGkrKzsKCiAgICAgICAgYyA9IGxpbmVbaV07CiAgICAgICAgU3RyaW5nIG1hcHBlZCA9IEVTQ0FQRV9NQVBQSU5HW2NdOwogICAgICAgIGlmIChtYXBwZWQgPT0gbnVsbCkgbWFwcGVkID0gYzsKICAgICAgICBidWZmZXIud3JpdGUobWFwcGVkKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgfQogICAgaWYgKCFpblF1b3RlcyAmJiBjID09ICIgIikgewogICAgICBpZiAoYnVmZmVyLmlzTm90RW1wdHkpIHJlc3VsdC5hZGQoYnVmZmVyLnRvU3RyaW5nKCkpOwogICAgICBidWZmZXIuY2xlYXIoKTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBidWZmZXIud3JpdGUoYyk7CiAgfQogIGlmIChpblF1b3RlcykgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiVW5jbG9zZWQgcXVvdGVzOiAkbGluZSIpOwogIGlmIChidWZmZXIuaXNOb3RFbXB0eSkgcmVzdWx0LmFkZChidWZmZXIudG9TdHJpbmcoKSk7CiAgcmV0dXJuIHJlc3VsdDsKfQpOAE5OPAEjAUAESS0NDQ0NDQ0OAwFPSAQNBEgSDxo9JBkXLCoYKRgQBj0XGBAGFSI/CBUjKx4PFAoPDQEVKygeEggGITwWEAYVBEU4EQIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvY29tbWFuZF9saW5lLmRhcnQsc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdXRpbC91dGlsLmRhcnSjUS8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMudXRpbDsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnCiAgICBzaG93ICRCQUNLU0xBU0gsICRDUiwgJERFTCwgJERRLCAkTEYsICRMUywgJFBTLCAkVEFCLCBMaW5rLCBMaW5rQnVpbGRlcjsKCmV4cG9ydCAnZW1wdHlzZXQuZGFydCc7CmV4cG9ydCAnbWFwbGV0LmRhcnQnOwpleHBvcnQgJ3NldGxldC5kYXJ0JzsKCnBhcnQgJ2luZGVudGF0aW9uLmRhcnQnOwoKLy8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGhhc2ggY29kZXMuCmNsYXNzIEhhc2hpbmcgewogIC8vLyBJZiBhbiBpbnRlZ2VyIGlzIG1hc2tlZCBieSB0aGlzIGNvbnN0YW50LCB0aGUgcmVzdWx0IGlzIGd1YXJhbnRlZWQgdG8gYmUKICAvLy8gaW4gU21pIHJhbmdlLgogIHN0YXRpYyBjb25zdCBpbnQgU01JX01BU0sgPSAweDNmZmZmZmZmOwoKICAvLy8gTWl4IHRoZSBiaXRzIG9mIFt2YWx1ZV0gYW5kIG1lcmdlIHRoZW0gd2l0aCBbZXhpc3RpbmddLgogIHN0YXRpYyBpbnQgbWl4SGFzaENvZGVCaXRzKGludCBleGlzdGluZywgaW50IHZhbHVlKSB7CiAgICAvLyBTcHJlYWQgdGhlIGJpdHMgb2YgdmFsdWUuIFRyeSB0byBzdGF5IGluIHRoZSAzMC1iaXQgcmFuZ2UgdG8KICAgIC8vIGF2b2lkIG92ZXJmbG93aW5nIGludG8gYSBtb3JlIGV4cGVuc2l2ZSBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uLgogICAgaW50IGggPSB2YWx1ZSAmIDB4MWZmZmZmZmY7CiAgICBoICs9ICgoaCAmIDB4M2ZmZikgPDwgMTUpIF4gMHgxZmZmY2Q3ZDsKICAgIGggXj0gKGggPj4gMTApOwogICAgaCArPSAoKGggJiAweDNmZmZmZmYpIDw8IDMpOwogICAgaCBePSAoaCA+PiA2KTsKICAgIGggKz0gKChoICYgMHg3ZmZmZmZmKSA8PCAyKSArICgoaCAmIDB4N2ZmZikgPDwgMTQpOwogICAgaCBePSAoaCA+PiAxNik7CiAgICAvLyBDb21iaW5lIHRoZSB0d28gaGFzaCB2YWx1ZXMuCiAgICBpbnQgaGlnaCA9IGV4aXN0aW5nID4+IDE1OwogICAgaW50IGxvdyA9IGV4aXN0aW5nICYgMHg3ZmZmOwogICAgcmV0dXJuICgoaGlnaCAqIDEzKSBeIChsb3cgKiA5OTcpIF4gaCkgJiBTTUlfTUFTSzsKICB9CgogIC8vLyBNaXggdGhlIGJpdHMgb2YgYG9iamVjdC5oYXNoQ29kZWAgd2l0aCBbZXhpc3RpbmddLgogIHN0YXRpYyBpbnQgb2JqZWN0SGFzaChPYmplY3Qgb2JqZWN0LCBbaW50IGV4aXN0aW5nID0gMF0pIHsKICAgIHJldHVybiBtaXhIYXNoQ29kZUJpdHMoZXhpc3RpbmcsIG9iamVjdC5oYXNoQ29kZSk7CiAgfQoKICAvLy8gTWl4IHRoZSBiaXRzIG9mIGAuaGFzaENvZGVgIGFsbCBub24tbnVsbCBvYmplY3RzLgogIHN0YXRpYyBpbnQgb2JqZWN0c0hhc2goT2JqZWN0IG9iajEsCiAgICAgIFtPYmplY3Qgb2JqMiwgT2JqZWN0IG9iajMsIE9iamVjdCBvYmo0LCBPYmplY3Qgb2JqNV0pIHsKICAgIGludCBoYXNoID0gMDsKICAgIGlmIChvYmo1ICE9IG51bGwpIGhhc2ggPSBvYmplY3RIYXNoKG9iajUsIGhhc2gpOwogICAgaWYgKG9iajQgIT0gbnVsbCkgaGFzaCA9IG9iamVjdEhhc2gob2JqNCwgaGFzaCk7CiAgICBpZiAob2JqMyAhPSBudWxsKSBoYXNoID0gb2JqZWN0SGFzaChvYmozLCBoYXNoKTsKICAgIGlmIChvYmoyICE9IG51bGwpIGhhc2ggPSBvYmplY3RIYXNoKG9iajIsIGhhc2gpOwogICAgcmV0dXJuIG9iamVjdEhhc2gob2JqMSwgaGFzaCk7CiAgfQoKICAvLy8gTWl4IHRoZSBiaXRzIG9mIHRoZSBlbGVtZW50IGhhc2ggY29kZXMgb2YgW2xpc3RdIHdpdGggW2V4aXN0aW5nXS4KICBzdGF0aWMgaW50IGxpc3RIYXNoKExpc3QgbGlzdCwgW2ludCBleGlzdGluZyA9IDBdKSB7CiAgICBpbnQgaCA9IGV4aXN0aW5nOwogICAgaWYgKGxpc3QgIT0gbnVsbCkgewogICAgICBpbnQgbGVuZ3RoID0gbGlzdC5sZW5ndGg7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBoID0gbWl4SGFzaENvZGVCaXRzKGgsIGxpc3RbaV0uaGFzaENvZGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaDsKICB9CgogIC8vLyBNaXggdGhlIGJpdHMgb2YgdGhlIGVsZW1lbnQgaGFzaCBjb2RlcyBvZiBbaXRlcmFibGVdIHdpdGggW2V4aXN0aW5nXS4KICBzdGF0aWMgaW50IHNldEhhc2g8RT4oSXRlcmFibGU8RT4gaXRlcmFibGUsIFtpbnQgZXhpc3RpbmcgPSAwXSkgewogICAgaW50IGggPSBleGlzdGluZzsKICAgIGlmIChpdGVyYWJsZSAhPSBudWxsKSB7CiAgICAgIGZvciAoRSBlIGluIGl0ZXJhYmxlKSB7CiAgICAgICAgaCArPSBvYmplY3RzSGFzaChlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGggJiBTTUlfTUFTSzsKICB9CgogIC8vLyBNaXggdGhlIGJpdHMgb2YgdGhlIGhhc2ggY29kZXMgb2YgdGhlIHVub3JkZXJlZCBrZXkvdmFsdWUgZnJvbSBbbWFwXSB3aXRoCiAgLy8vIFtleGlzdGluZ10uCiAgc3RhdGljIGludCB1bm9yZGVyZWRNYXBIYXNoKE1hcCBtYXAsIFtpbnQgZXhpc3RpbmcgPSAwXSkgewogICAgaWYgKG1hcC5sZW5ndGggPT0gMCkgcmV0dXJuIGV4aXN0aW5nOwogICAgTGlzdDxpbnQ+IGhhc2hDb2RlcyA9IExpc3QobWFwLmxlbmd0aCk7CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKHZhciBlbnRyeSBpbiBtYXAuZW50cmllcykgewogICAgICBoYXNoQ29kZXNbaSsrXSA9IG9iamVjdEhhc2goZW50cnkua2V5LCBvYmplY3RIYXNoKGVudHJ5LnZhbHVlKSk7CiAgICB9CiAgICBoYXNoQ29kZXMuc29ydCgpOwogICAgaW50IGggPSBleGlzdGluZzsKICAgIGZvciAoaW50IGhhc2hDb2RlIGluIGhhc2hDb2RlcykgewogICAgICBoID0gbWl4SGFzaENvZGVCaXRzKGgsIGhhc2hDb2RlKTsKICAgIH0KICAgIHJldHVybiBoOwogIH0KCiAgLy8vIE1peCB0aGUgYml0cyBvZiB0aGUga2V5L3ZhbHVlIGhhc2ggY29kZXMgZnJvbSBbbWFwXSB3aXRoIFtleGlzdGluZ10uCiAgc3RhdGljIGludCBtYXBIYXNoKE1hcCBtYXAsIFtpbnQgZXhpc3RpbmcgPSAwXSkgewogICAgaW50IGggPSBleGlzdGluZzsKICAgIGZvciAodmFyIGtleSBpbiBtYXAua2V5cykgewogICAgICBoID0gbWl4SGFzaENvZGVCaXRzKGgsIGtleS5oYXNoQ29kZSk7CiAgICAgIGggPSBtaXhIYXNoQ29kZUJpdHMoaCwgbWFwW2tleV0uaGFzaENvZGUpOwogICAgfQogICAgcmV0dXJuIGg7CiAgfQp9Cgpib29sIGVxdWFsRWxlbWVudHM8RT4oTGlzdDxFPiBhLCBMaXN0PEU+IGIpIHsKICBpZiAoaWRlbnRpY2FsKGEsIGIpKSByZXR1cm4gdHJ1ZTsKICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhLmxlbmd0aDsgaW5kZXgrKykgewogICAgaWYgKGFbaW5kZXhdICE9IGJbaW5kZXhdKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgZXF1YWxTZXRzPEU+KFNldDxFPiBhLCBTZXQ8RT4gYikgewogIGlmIChpZGVudGljYWwoYSwgYikpIHJldHVybiB0cnVlOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIGEubGVuZ3RoID09IGIubGVuZ3RoICYmIGEuY29udGFpbnNBbGwoYikgJiYgYi5jb250YWluc0FsbChhKTsKfQoKYm9vbCBlcXVhbE1hcHM8SywgVj4oTWFwPEssIFY+IGEsIE1hcDxLLCBWPiBiKSB7CiAgaWYgKGlkZW50aWNhbChhLCBiKSkgcmV0dXJuIHRydWU7CiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTsKICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICBmb3IgKEsga2V5IGluIGEua2V5cykgewogICAgaWYgKGFba2V5XSAhPSBiW2tleV0pIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCi8vLyBGaWxlIG5hbWUgcHJlZml4IHVzZWQgdG8gc2hvcnRlbiB0aGUgZmlsZSBuYW1lIGluIHN0YWNrIHRyYWNlcyBwcmludGVkIGJ5Ci8vLyBbdHJhY2VdLgpTdHJpbmcgc3RhY2tUcmFjZUZpbGVQcmVmaXggPSBudWxsOwoKLy8vIFdyaXRlcyB0aGUgY2hhcmFjdGVycyBvZiBbc3RyaW5nXSBvbiBbYnVmZmVyXS4gIFRoZSBjaGFyYWN0ZXJzCi8vLyBhcmUgZXNjYXBlZCBhcyBzdWl0YWJsZSBmb3IgSmF2YVNjcmlwdCBhbmQgSlNPTi4gIFtidWZmZXJdIGlzCi8vLyBhbnl0aGluZyB3aGljaCBzdXBwb3J0cyBbOndyaXRlOl0gYW5kIFs6d3JpdGVDaGFyQ29kZTpdLCBmb3IgZXhhbXBsZSwKLy8vIFtTdHJpbmdCdWZmZXJdLiAgTm90ZSB0aGF0IEpTIHN1cHBvcnRzIFx4bm4gYW5kIFx1bm5ubiB3aGVyZWFzIEpTT04gb25seQovLy8gc3VwcG9ydHMgdGhlIFx1bm5ubiBub3RhdGlvbi4gIFRoZXJlZm9yZSB3ZSB1c2UgdGhlIFx1bm5ubiBub3RhdGlvbi4Kdm9pZCB3cml0ZUpzb25Fc2NhcGVkQ2hhcnNPbihTdHJpbmcgc3RyaW5nLCBidWZmZXIpIHsKICB2b2lkIGFkZENvZGVVbml0RXNjYXBlZCh2YXIgYnVmZmVyLCBpbnQgY29kZSkgewogICAgYXNzZXJ0KGNvZGUgPCAweDEwMDAwKTsKICAgIGJ1ZmZlci53cml0ZShyJ1x1Jyk7CiAgICBpZiAoY29kZSA8IDB4MTAwMCkgewogICAgICBidWZmZXIud3JpdGUoJzAnKTsKICAgICAgaWYgKGNvZGUgPCAweDEwMCkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnMCcpOwogICAgICAgIGlmIChjb2RlIDwgMHgxMCkgewogICAgICAgICAgYnVmZmVyLndyaXRlKCcwJyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBidWZmZXIud3JpdGUoY29kZS50b1JhZGl4U3RyaW5nKDE2KSk7CiAgfQoKICB2b2lkIHdyaXRlRXNjYXBlZE9uKFN0cmluZyBzdHJpbmcsIHZhciBidWZmZXIpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgIGludCBjb2RlID0gc3RyaW5nLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjb2RlID09ICREUSkgewogICAgICAgIGJ1ZmZlci53cml0ZShyJ1wiJyk7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkVEFCKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHInXHQnKTsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRMRikgewogICAgICAgIGJ1ZmZlci53cml0ZShyJ1xuJyk7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkQ1IpIHsKICAgICAgICBidWZmZXIud3JpdGUocidccicpOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJERFTCkgewogICAgICAgIGFkZENvZGVVbml0RXNjYXBlZChidWZmZXIsICRERUwpOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJExTKSB7CiAgICAgICAgLy8gVGhpcyBVbmljb2RlIGxpbmUgdGVybWluYXRvciBhbmQgJFBTIGFyZSBpbnZhbGlkIGluIEpTIHN0cmluZwogICAgICAgIC8vIGxpdGVyYWxzLgogICAgICAgIGFkZENvZGVVbml0RXNjYXBlZChidWZmZXIsICRMUyk7IC8vIDB4MjAyOC4KICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRQUykgewogICAgICAgIGFkZENvZGVVbml0RXNjYXBlZChidWZmZXIsICRQUyk7IC8vIDB4MjAyOS4KICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRCQUNLU0xBU0gpIHsKICAgICAgICBidWZmZXIud3JpdGUocidcXCcpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChjb2RlIDwgMHgyMCkgewogICAgICAgICAgYWRkQ29kZVVuaXRFc2NhcGVkKGJ1ZmZlciwgY29kZSk7CiAgICAgICAgICAvLyBXZSBlbWl0IERFTCAoQVNDSUkgMHg3ZikgYXMgYW4gZXNjYXBlIGJlY2F1c2UgaXQgd291bGQgYmUgY29uZnVzaW5nCiAgICAgICAgICAvLyB0byBoYXZlIGl0IHVuZXNjYXBlZCBpbiBhIHN0cmluZyBsaXRlcmFsLiAgV2UgYWxzbyBlc2NhcGUKICAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgYWJvdmUgMHg3ZiBiZWNhdXNlIHRoYXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQogICAgICAgICAgLy8gYWJvdXQgd2hldGhlciB0aGUgd2ViIHNlcnZlciBzZXJ2ZXMgaXQgdXAgYXMgTGF0aW4xIG9yIFVURi04LgogICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4N2YpIHsKICAgICAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKGNvZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBUaGlzIHdpbGwgb3V0cHV0IHN1cnJvZ2F0ZSBwYWlycyBpbiB0aGUgZm9ybSBcdWR4eHhcdWR5eXksIHJhdGhlcgogICAgICAgICAgLy8gdGhhbiB0aGUgbW9yZSBsb2dpY2FsIFx1e3p6enp6en0uICBUaGlzIHNob3VsZCB3b3JrIGluIEphdmFTY3JpcHQKICAgICAgICAgIC8vIChlc3BlY2lhbGx5IG9sZCBVQ1MtMiBiYXNlZCBpbXBsZW1lbnRhdGlvbnMpIGFuZCBpcyB0aGUgb25seQogICAgICAgICAgLy8gZm9ybWF0IHRoYXQgaXMgYWxsb3dlZCBpbiBKU09OLgogICAgICAgICAgYWRkQ29kZVVuaXRFc2NhcGVkKGJ1ZmZlciwgY29kZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykgewogICAgaW50IGNvZGUgPSBzdHJpbmcuY29kZVVuaXRBdChpKTsKICAgIGlmIChjb2RlIDwgMHgyMCB8fAogICAgICAgIGNvZGUgPT0gJERFTCB8fAogICAgICAgIGNvZGUgPT0gJERRIHx8CiAgICAgICAgY29kZSA9PSAkTFMgfHwKICAgICAgICBjb2RlID09ICRQUyB8fAogICAgICAgIGNvZGUgPT0gJEJBQ0tTTEFTSCB8fAogICAgICAgIGNvZGUgPj0gMHg4MCkgewogICAgICB3cml0ZUVzY2FwZWRPbihzdHJpbmcsIGJ1ZmZlcik7CiAgICAgIHJldHVybjsKICAgIH0KICB9CiAgYnVmZmVyLndyaXRlKHN0cmluZyk7Cn0KCmludCBjb21wdXRlSGFzaENvZGUocGFydDEsIFtwYXJ0MiwgcGFydDMsIHBhcnQ0LCBwYXJ0NV0pIHsKICByZXR1cm4gKHBhcnQxLmhhc2hDb2RlIF4KICAgICAgICAgIHBhcnQyLmhhc2hDb2RlIF4KICAgICAgICAgIHBhcnQzLmhhc2hDb2RlIF4KICAgICAgICAgIHBhcnQ0Lmhhc2hDb2RlIF4KICAgICAgICAgIHBhcnQ1Lmhhc2hDb2RlKSAmCiAgICAgIDB4M2ZmZmZmZmY7Cn0KClN0cmluZyBtb2RpZmllcnNUb1N0cmluZygKICAgIHtib29sIGlzU3RhdGljOiBmYWxzZSwKICAgIGJvb2wgaXNBYnN0cmFjdDogZmFsc2UsCiAgICBib29sIGlzRmluYWw6IGZhbHNlLAogICAgYm9vbCBpc1ZhcjogZmFsc2UsCiAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgYm9vbCBpc0ZhY3Rvcnk6IGZhbHNlLAogICAgYm9vbCBpc0V4dGVybmFsOiBmYWxzZSwKICAgIGJvb2wgaXNDb3ZhcmlhbnQ6IGZhbHNlfSkgewogIExpbmtCdWlsZGVyPFN0cmluZz4gYnVpbGRlciA9IG5ldyBMaW5rQnVpbGRlcjxTdHJpbmc+KCk7CiAgaWYgKGlzU3RhdGljKSBidWlsZGVyLmFkZExhc3QoJ3N0YXRpYycpOwogIGlmIChpc0Fic3RyYWN0KSBidWlsZGVyLmFkZExhc3QoJ2Fic3RyYWN0Jyk7CiAgaWYgKGlzRmluYWwpIGJ1aWxkZXIuYWRkTGFzdCgnZmluYWwnKTsKICBpZiAoaXNWYXIpIGJ1aWxkZXIuYWRkTGFzdCgndmFyJyk7CiAgaWYgKGlzQ29uc3QpIGJ1aWxkZXIuYWRkTGFzdCgnY29uc3QnKTsKICBpZiAoaXNGYWN0b3J5KSBidWlsZGVyLmFkZExhc3QoJ2ZhY3RvcnknKTsKICBpZiAoaXNFeHRlcm5hbCkgYnVpbGRlci5hZGRMYXN0KCdleHRlcm5hbCcpOwogIGlmIChpc0NvdmFyaWFudCkgYnVpbGRlci5hZGRMYXN0KCdjb3ZhcmlhbnQnKTsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIGJ1aWxkZXIudG9MaW5rKGNvbnN0IExpbms8U3RyaW5nPigpKS5wcmludE9uKGJ1ZmZlciwgJywgJyk7CiAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwp9CgpjbGFzcyBQYWlyPEEsIEI+IHsKICBmaW5hbCBBIGE7CiAgZmluYWwgQiBiOwoKICBQYWlyKHRoaXMuYSwgdGhpcy5iKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiAxMyAqIGEuaGFzaENvZGUgKyAxNyAqIGIuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFBhaXIpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBhID09IG90aGVyLmEgJiYgYiA9PSBvdGhlci5iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJygkYSwkYiknOwp9CgppbnQgbG9uZ2VzdENvbW1vblByZWZpeExlbmd0aChMaXN0IGEsIExpc3QgYikgewogIGludCBpbmRleCA9IDA7CiAgZm9yICg7IGluZGV4IDwgYS5sZW5ndGggJiYgaW5kZXggPCBiLmxlbmd0aDsgaW5kZXgrKykgewogICAgaWYgKGFbaW5kZXhdICE9IGJbaW5kZXhdKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gaW5kZXg7Cn0KCi8vLyBSZXR1cm5zIFtzdWdnZXN0ZWROYW1lXSBpZiBpdCBpcyBub3QgaW4gW3VzZWROYW1lc10uIE90aGVyd2lzZSBjb25jYXRlbmF0ZXMKLy8vIHRoZSBzbWFsbGVzdCBudW1iZXIgdGhhdCBtYWtlcyBpdCBub3QgYXBwZWFyIGluIFt1c2VkTmFtZXNdLgovLy8KLy8vIEFkZHMgdGhlIHJlc3VsdCB0byBbdXNlZE5hbWVzXS4KU3RyaW5nIG1ha2VVbmlxdWUoU3RyaW5nIHN1Z2dlc3RlZE5hbWUsIFNldDxTdHJpbmc+IHVzZWROYW1lcywKICAgIFtTdHJpbmcgc2VwYXJhdG9yID0gJyddKSB7CiAgU3RyaW5nIHJlc3VsdCA9IHN1Z2dlc3RlZE5hbWU7CiAgaWYgKHVzZWROYW1lcy5jb250YWlucyhzdWdnZXN0ZWROYW1lKSkgewogICAgaW50IGNvdW50ZXIgPSAwOwogICAgd2hpbGUgKHVzZWROYW1lcy5jb250YWlucyhyZXN1bHQpKSB7CiAgICAgIGNvdW50ZXIrKzsKICAgICAgcmVzdWx0ID0gIiRzdWdnZXN0ZWROYW1lJHNlcGFyYXRvciRjb3VudGVyIjsKICAgIH0KICB9CiAgdXNlZE5hbWVzLmFkZChyZXN1bHQpOwogIHJldHVybiByZXN1bHQ7Cn0KgSgATk48ARYBOU0BGBYWARkBLhBPFCoBPjhERyAsFCETOBQkHyE3BAE5PTcEATgmPhI1NTU1IwQBSDcWGCApMggGDgQBTEQWHB4dCAYZBAFQEj0qLA8lRwYWFiYoBg4EAUs0FiAsMQYOBAIBLiQsKjMgFAYEDwIBKCQsRwIBMSQsKhooBA8CAU4NJAFDQkpNSTYyHBkZGRobGx0KCAYqBAEzLicZHSEdIB0gHSEqIEkVNCA0Jx0PGyxRR01LIiYRT09KLSwKCAYEASwlFxgXFxceGCYOBgQYAgE7GxsbGxwSAgEaGxwZFxkbHCA7Ky8pJSktLzEsPhwCARMNDQEYAQw5AQwgLSYpBAEMIgIBMBE6IA0GBBACAVBBBCQ/HyErFSkRMwYEGRECASNwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL3V0aWwuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91dGlsL2luZGVudGF0aW9uLmRhcnSOdC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQyanMudXRpbDsKCi8vLyBJbmRlbnRhdGlvbiB1dGlsaXR5IGNsYXNzLiBTaG91bGQgYmUgdXNlZCBhcyBhIG1peGluIGluIG1vc3QgY2FzZXMuCmNsYXNzIEluZGVudGF0aW9uIHsKICAvLy8gVGhlIGN1cnJlbnQgaW5kZW50YXRpb24gc3RyaW5nLgogIFN0cmluZyBnZXQgaW5kZW50YXRpb24gewogICAgLy8gTGF6aWx5IGFkZCBuZXcgaW5kZW50YXRpb24gc3RyaW5ncyBhcyByZXF1aXJlZC4KICAgIGZvciAoaW50IGkgPSBfaW5kZW50TGlzdC5sZW5ndGg7IGkgPD0gX2luZGVudExldmVsOyBpKyspIHsKICAgICAgX2luZGVudExpc3QuYWRkKF9pbmRlbnRMaXN0W2kgLSAxXSArIGluZGVudGF0aW9uVW5pdCk7CiAgICB9CiAgICByZXR1cm4gX2luZGVudExpc3RbX2luZGVudExldmVsXTsKICB9CgogIC8vLyBUaGUgY3VycmVudCBpbmRlbnRhdGlvbiBsZXZlbC4KICBpbnQgX2luZGVudExldmVsID0gMDsKCiAgLy8vIEEgY2FjaGUgb2YgYWxsIGluZGVudGF0aW9uIHN0cmluZ3MgdXNlZCBzbyBmYXIuCiAgLy8vIEFsd2F5cyBhdCBsZWFzdCBvZiBsZW5ndGggMS4KICBMaXN0PFN0cmluZz4gX2luZGVudExpc3QgPSA8U3RyaW5nPlsiIl07CgogIC8vLyBUaGUgaW5kZW50YXRpb24gdW5pdCwgZGVmYXVsdGluZyB0byB0d28gc3BhY2VzLiBNYXkgYmUgb3ZlcndyaXR0ZW4uCiAgU3RyaW5nIF9pbmRlbnRhdGlvblVuaXQgPSAiICAiOwogIFN0cmluZyBnZXQgaW5kZW50YXRpb25Vbml0ID0+IF9pbmRlbnRhdGlvblVuaXQ7CiAgc2V0IGluZGVudGF0aW9uVW5pdChTdHJpbmcgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBfaW5kZW50YXRpb25Vbml0KSB7CiAgICAgIF9pbmRlbnRhdGlvblVuaXQgPSB2YWx1ZTsKICAgICAgX2luZGVudExpc3QgPSA8U3RyaW5nPlsiIl07CiAgICB9CiAgfQoKICAvLy8gSW5jcmVhc2VzIHRoZSBjdXJyZW50IGxldmVsIG9mIGluZGVudGF0aW9uLgogIHZvaWQgaW5kZW50TW9yZSgpIHsKICAgIF9pbmRlbnRMZXZlbCsrOwogIH0KCiAgLy8vIERlY3JlYXNlcyB0aGUgY3VycmVudCBsZXZlbCBvZiBpbmRlbnRhdGlvbi4KICB2b2lkIGluZGVudExlc3MoKSB7CiAgICBfaW5kZW50TGV2ZWwtLTsKICB9CgogIC8vLyBDYWxscyBbZl0gd2l0aCBvbmUgbW9yZSBpbmRlbnRhdGlvbiBsZXZlbCwgcmVzdG9yaW5nIGluZGVudGF0aW9uIGNvbnRleHQKICAvLy8gdXBvbiByZXR1cm4gb2YgW2ZdIGFuZCByZXR1cm5pbmcgaXRzIHJlc3VsdC4KICBpbmRlbnRCbG9jayhGdW5jdGlvbiBmKSB7CiAgICBpbmRlbnRNb3JlKCk7CiAgICB2YXIgcmVzdWx0ID0gZigpOwogICAgaW5kZW50TGVzcygpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFRhZ2dpbmc8Tj4gaW1wbGVtZW50cyBJbmRlbnRhdGlvbiB7CiAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIExpbms8U3RyaW5nPiB0YWdTdGFjayA9IGNvbnN0IExpbms8U3RyaW5nPigpOwoKICB2b2lkIHB1c2hUYWcoU3RyaW5nIHRhZykgewogICAgdGFnU3RhY2sgPSB0YWdTdGFjay5wcmVwZW5kKHRhZyk7CiAgICBpbmRlbnRNb3JlKCk7CiAgfQoKICBTdHJpbmcgcG9wVGFnKCkgewogICAgYXNzZXJ0KCF0YWdTdGFjay5pc0VtcHR5KTsKICAgIFN0cmluZyB0YWcgPSB0YWdTdGFjay5oZWFkOwogICAgdGFnU3RhY2sgPSB0YWdTdGFjay50YWlsOwogICAgaW5kZW50TGVzcygpOwogICAgcmV0dXJuIHRhZzsKICB9CgogIC8vLyBBZGRzIGdpdmVuIHN0cmluZyB0byByZXN1bHQgc3RyaW5nLgogIHZvaWQgYWRkKFN0cmluZyBzdHJpbmcpIHsKICAgIHNiLndyaXRlKHN0cmluZyk7CiAgfQoKICAvLy8gQWRkcyBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIFtub2RlXSBpbnRvIFtwYXJhbXNdLgogIHZvaWQgYWRkRGVmYXVsdFBhcmFtZXRlcnMoTiBub2RlLCBNYXAgcGFyYW1zKSB7fQoKICAvLy8gQWRkcyBnaXZlbiBub2RlIHR5cGUgdG8gcmVzdWx0IHN0cmluZy4KICAvLy8gVGhlIG1ldGhvZCAib3BlbnMiIHRoZSBub2RlLCBtZWFuaW5nIHRoYXQgYWxsIG91dHB1dCBhZnRlciBjYWxsaW5nCiAgLy8vIHRoaXMgbWV0aG9kIGFuZCBiZWZvcmUgY2FsbGluZyBjbG9zZU5vZGUoKSB3aWxsIHJlcHJlc2VudCBjb250ZW50cwogIC8vLyBvZiBnaXZlbiBub2RlLgogIHZvaWQgb3Blbk5vZGUoTiBub2RlLCBTdHJpbmcgdHlwZSwgW01hcCBwYXJhbXNdKSB7CiAgICBpZiAocGFyYW1zID09IG51bGwpIHBhcmFtcyA9IG5ldyBNYXAoKTsKICAgIGFkZEN1cnJlbnRJbmRlbnQoKTsKICAgIHNiLndyaXRlKCI8Iik7CiAgICBhZGREZWZhdWx0UGFyYW1ldGVycyhub2RlLCBwYXJhbXMpOwogICAgYWRkVHlwZVdpdGhQYXJhbXModHlwZSwgcGFyYW1zKTsKICAgIHNiLndyaXRlKCI+XG4iKTsKICAgIHB1c2hUYWcodHlwZSk7CiAgfQoKICAvLy8gQWRkcyBnaXZlbiBub2RlIHRvIHJlc3VsdCBzdHJpbmcuCiAgdm9pZCBvcGVuQW5kQ2xvc2VOb2RlKE4gbm9kZSwgU3RyaW5nIHR5cGUsIFtNYXAgcGFyYW1zXSkgewogICAgaWYgKHBhcmFtcyA9PSBudWxsKSBwYXJhbXMgPSB7fTsKICAgIGFkZEN1cnJlbnRJbmRlbnQoKTsKICAgIHNiLndyaXRlKCI8Iik7CiAgICBhZGREZWZhdWx0UGFyYW1ldGVycyhub2RlLCBwYXJhbXMpOwogICAgYWRkVHlwZVdpdGhQYXJhbXModHlwZSwgcGFyYW1zKTsKICAgIHNiLndyaXRlKCIvPlxuIik7CiAgfQoKICAvLy8gQ2xvc2VzIGN1cnJlbnQgbm9kZSB0eXBlLgogIHZvaWQgY2xvc2VOb2RlKCkgewogICAgU3RyaW5nIHRhZyA9IHBvcFRhZygpOwogICAgYWRkQ3VycmVudEluZGVudCgpOwogICAgc2Iud3JpdGUoIjwvIik7CiAgICBhZGRUeXBlV2l0aFBhcmFtcyh0YWcpOwogICAgc2Iud3JpdGUoIj5cbiIpOwogIH0KCiAgdm9pZCBhZGRUeXBlV2l0aFBhcmFtcyhTdHJpbmcgdHlwZSwgW01hcCBwYXJhbXNdKSB7CiAgICBpZiAocGFyYW1zID09IG51bGwpIHBhcmFtcyA9IG5ldyBNYXAoKTsKICAgIHNiLndyaXRlKCIke3R5cGV9Iik7CiAgICBwYXJhbXMuZm9yRWFjaCgoaywgdikgewogICAgICBTdHJpbmcgdmFsdWU7CiAgICAgIGlmICh2ICE9IG51bGwpIHsKICAgICAgICBTdHJpbmcgc3RyID0gdmFsdWVUb1N0cmluZyh2KTsKICAgICAgICB2YWx1ZSA9IHN0cgogICAgICAgICAgICAucmVwbGFjZUFsbCgiPCIsICImbHQ7IikKICAgICAgICAgICAgLnJlcGxhY2VBbGwoIj4iLCAiJmd0OyIpCiAgICAgICAgICAgIC5yZXBsYWNlQWxsKCciJywgIiciKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YWx1ZSA9ICJbbnVsbF0iOwogICAgICB9CiAgICAgIHNiLndyaXRlKCcgJGs9IiR2YWx1ZSInKTsKICAgIH0pOwogIH0KCiAgdm9pZCBhZGRDdXJyZW50SW5kZW50KCkgewogICAgc2Iud3JpdGUoaW5kZW50YXRpb24pOwogIH0KCiAgLy8vIENvbnZlcnRzIGEgcGFyYW1ldGVyIHZhbHVlIGludG8gYSBzdHJpbmcuCiAgU3RyaW5nIHZhbHVlVG9TdHJpbmcodmFyIHZhbHVlKSA9PiB2YWx1ZTsKfQqAiwBOTjwBFgFIFCYbNz89BiYEASUYATYjKwFKIjImJSAiBgQBMhYUBAEyFhQEAU8zHBIWEhMEAgEzKDABHSYSBAEUHyAeEhAEASocFgQBODMBLUlJFTUsGBMoJRUTBAEoPSUYEyglFgQBIBUbGBQcFQQBNiwZHBQXJxQlJSMPGgggCAQBHBsEATAsAgEqcGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9pbmRlbnRhdGlvbi5kYXJ0I3Nka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2tlcm5lbC5kYXJ0ikAvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIENvbnZlbnRpb25zIGZvciBwYXRoczoKLy8vCi8vLyAtIFVzZSB0aGUgW1VyaV0gY2xhc3MgZm9yIHBhdGhzIHRoYXQgbWF5IGhhdmUgdGhlIGBmaWxlYCwgYGRhcnRgIG9yCi8vLyAgIGBwYWNrYWdlYCBzY2hlbWUuICBOZXZlciB1c2UgW1VyaV0gZm9yIHJlbGF0aXZlIHBhdGhzLgovLy8gLSBVc2UgW1N0cmluZ11zIGZvciBhbGwgZmlsZW5hbWVzIGFuZCBwYXRocyB0aGF0IGhhdmUgbm8gc2NoZW1lIHByZWZpeC4KLy8vIC0gTmV2ZXIgdHJhbnNsYXRlIGEgYGRhcnQ6YCBvciBgcGFja2FnZTpgIFVSSSBpbnRvIGEgYGZpbGU6YCBVUkksIGluc3RlYWQKLy8vICAgdHJhbnNsYXRlIGl0IHRvIGEgW1N0cmluZ10gaWYgdGhlIGZpbGUgc3lzdGVtIHBhdGggaXMgbmVlZGVkLgovLy8gLSBPbmx5IHVzZSBbRmlsZV0gZnJvbSBkYXJ0OmlvIGF0IHRoZSBsYXN0IG1vbWVudCB3aGVuIGl0IGlzIG5lZWRlZC4KLy8vCmxpYnJhcnkga2VybmVsOwoKaW1wb3J0ICdhc3QuZGFydCc7CmltcG9ydCAnYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydCc7CmltcG9ydCAnYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JzsKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICd0ZXh0L2FzdF90b190ZXh0LmRhcnQnOwoKZXhwb3J0ICdhc3QuZGFydCc7CgpDb21wb25lbnQgbG9hZENvbXBvbmVudEZyb21CaW5hcnkoU3RyaW5nIHBhdGgsIFtDb21wb25lbnQgY29tcG9uZW50XSkgewogIExpc3Q8aW50PiBieXRlcyA9IG5ldyBGaWxlKHBhdGgpLnJlYWRBc0J5dGVzU3luYygpOwogIHJldHVybiBsb2FkQ29tcG9uZW50RnJvbUJ5dGVzKGJ5dGVzLCBjb21wb25lbnQpOwp9CgpDb21wb25lbnQgbG9hZENvbXBvbmVudEZyb21CeXRlcyhMaXN0PGludD4gYnl0ZXMsIFtDb21wb25lbnQgY29tcG9uZW50XSkgewogIGNvbXBvbmVudCA/Pz0gbmV3IENvbXBvbmVudCgpOwogIG5ldyBCaW5hcnlCdWlsZGVyKGJ5dGVzKS5yZWFkQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgcmV0dXJuIGNvbXBvbmVudDsKfQoKQ29tcG9uZW50IGxvYWRDb21wb25lbnRTb3VyY2VGcm9tQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzLCBbQ29tcG9uZW50IGNvbXBvbmVudF0pIHsKICBjb21wb25lbnQgPz89IG5ldyBDb21wb25lbnQoKTsKICBuZXcgQmluYXJ5QnVpbGRlcihieXRlcykucmVhZENvbXBvbmVudFNvdXJjZShjb21wb25lbnQpOwogIHJldHVybiBjb21wb25lbnQ7Cn0KCkZ1dHVyZSB3cml0ZUNvbXBvbmVudFRvQmluYXJ5KENvbXBvbmVudCBjb21wb25lbnQsIFN0cmluZyBwYXRoKSB7CiAgdmFyIHNpbms7CiAgaWYgKHBhdGggPT0gJ251bGwnIHx8IHBhdGggPT0gJ3N0ZG91dCcpIHsKICAgIHNpbmsgPSBzdGRvdXQubm9uQmxvY2tpbmc7CiAgfSBlbHNlIHsKICAgIHNpbmsgPSBuZXcgRmlsZShwYXRoKS5vcGVuV3JpdGUoKTsKICB9CgogIHZhciBmdXR1cmU7CiAgdHJ5IHsKICAgIG5ldyBCaW5hcnlQcmludGVyKHNpbmspLndyaXRlQ29tcG9uZW50RmlsZShjb21wb25lbnQpOwogIH0gZmluYWxseSB7CiAgICBpZiAoc2luayA9PSBzdGRvdXQubm9uQmxvY2tpbmcpIHsKICAgICAgZnV0dXJlID0gc2luay5mbHVzaCgpOwogICAgfSBlbHNlIHsKICAgICAgZnV0dXJlID0gc2luay5jbG9zZSgpOwogICAgfQogIH0KCiAgcmV0dXJuIGZ1dHVyZTsKfQoKdm9pZCB3cml0ZUxpYnJhcnlUb1RleHQoTGlicmFyeSBsaWJyYXJ5LCB7U3RyaW5nIHBhdGh9KSB7CiAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBuZXcgUHJpbnRlcihidWZmZXIpLndyaXRlTGlicmFyeUZpbGUobGlicmFyeSk7CiAgaWYgKHBhdGggPT0gbnVsbCkgewogICAgcHJpbnQoYnVmZmVyKTsKICB9IGVsc2UgewogICAgbmV3IEZpbGUocGF0aCkud3JpdGVBc1N0cmluZ1N5bmMoJyRidWZmZXInKTsKICB9Cn0KCnZvaWQgd3JpdGVDb21wb25lbnRUb1RleHQoQ29tcG9uZW50IGNvbXBvbmVudCwKICAgIHtTdHJpbmcgcGF0aCwKICAgIGJvb2wgc2hvd0V4dGVybmFsOiBmYWxzZSwKICAgIGJvb2wgc2hvd09mZnNldHM6IGZhbHNlLAogICAgYm9vbCBzaG93TWV0YWRhdGE6IGZhbHNlfSkgewogIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgbmV3IFByaW50ZXIoYnVmZmVyLAogICAgICAgICAgc2hvd0V4dGVybmFsOiBzaG93RXh0ZXJuYWwsCiAgICAgICAgICBzaG93T2Zmc2V0czogc2hvd09mZnNldHMsCiAgICAgICAgICBzaG93TWV0YWRhdGE6IHNob3dNZXRhZGF0YSkKICAgICAgLndyaXRlQ29tcG9uZW50RmlsZShjb21wb25lbnQpOwogIGlmIChwYXRoID09IG51bGwpIHsKICAgIHByaW50KGJ1ZmZlcik7CiAgfSBlbHNlIHsKICAgIG5ldyBGaWxlKHBhdGgpLndyaXRlQXNTdHJpbmdTeW5jKCckYnVmZmVyJyk7CiAgfQp9ClwATk48ARsESD1MTkRJBBABEyQmFRIgARMBSDYzAgFLITUUAgFRITsUAgFCDCwfCycEAQ4IOw4mHQ0dBgQBEQIBOiwxFhMLMQQCAS8SHh0hLBYmJCYmFhMLMQQCARpwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCBzZGtyb290Oi9wa2cva2VybmVsL2xpYi9hc3QuZGFydMADIEsvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFTiBDSEFOR0lORyBUSElTIEZJTEU6Ci8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8KLy8vIElmIHlvdSBhcmUgYWRkaW5nL3JlbW92aW5nL21vZGlmeWluZyBmaWVsZHMvY2xhc3NlcyBvZiB0aGUgQVNULCB5b3UgbXVzdAovLy8gYWxzbyB1cGRhdGUgdGhlIGZvbGxvd2luZyBmaWxlczoKLy8vCi8vLyAgIC0gYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydAovLy8gICAtIGJpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydAovLy8gICAtIHRleHQvYXN0X3RvX3RleHQuZGFydAovLy8gICAtIGNsb25lLmRhcnQKLy8vICAgLSBiaW5hcnkubWQKLy8vICAgLSB0eXBlX2NoZWNrZXIuZGFydCAoaWYgcmVsZXZhbnQpCi8vLwovLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1IgSEFORExJTkcKLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLwovLy8gQXMgYSBydWxlIG9mIHRodW1iLCBlcnJvcnMgdGhhdCBjYW4gYmUgZGV0ZWN0ZWQgc3RhdGljYWxseSBhcmUgaGFuZGxlZCBieQovLy8gdGhlIGZyb250ZW5kLCB0eXBpY2FsbHkgYnkgdHJhbnNsYXRpbmcgdGhlIGVycm9uZW91cyBjb2RlIGludG8gYSAndGhyb3cnIG9yCi8vLyBhIGNhbGwgdG8gJ25vU3VjaE1ldGhvZCcuCi8vLwovLy8gRm9yIGV4YW1wbGUsIHRoZXJlIGFyZSBubyBhcml0eSBtaXNtYXRjaGVzIGluIHN0YXRpYyBpbnZvY2F0aW9ucywgYW5kCi8vLyB0aGVyZSBhcmUgbm8gZGlyZWN0IGludm9jYXRpb25zIG9mIGEgY29uc3RydWN0b3Igb24gYSBhYnN0cmFjdCBjbGFzcy4KLy8vCi8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFUSUMgdnMgVE9QLUxFVkVMCi8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8KLy8vIFRoZSB0ZXJtIGBzdGF0aWNgIGluY2x1ZGVzIGJvdGggc3RhdGljIGNsYXNzIG1lbWJlcnMgYW5kIHRvcC1sZXZlbCBtZW1iZXJzLgovLy8KLy8vICJTdGF0aWMgY2xhc3MgbWVtYmVyIiBpcyB0aGUgcHJlZmVycmVkIHRlcm0gZm9yIG5vbi10b3AgbGV2ZWwgc3RhdGljcy4KLy8vCi8vLyBTdGF0aWMgY2xhc3MgbWVtYmVycyBhcmUgbm90IGxpZnRlZCB0byB0aGUgbGlicmFyeSBsZXZlbCBiZWNhdXNlIG1pcnJvcnMKLy8vIGFuZCBzdGFjayB0cmFjZXMgY2FuIG9ic2VydmUgdGhhdCB0aGV5IGFyZSBjbGFzcyBtZW1iZXJzLgovLy8KLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST0NFRFVSRVMKLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLwovLy8gIlByb2NlZHVyZSIgaXMgYW4gdW1icmVsbGEgdGVybSBmb3IgbWV0aG9kLCBnZXR0ZXIsIHNldHRlciwgaW5kZXgtZ2V0dGVyLAovLy8gaW5kZXgtc2V0dGVyLCBvcGVyYXRvciBvdmVybG9hZGVyLCBhbmQgZmFjdG9yeSBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBHZW5lcmF0aXZlIGNvbnN0cnVjdG9ycywgZmllbGQgaW5pdGlhbGl6ZXJzLCBsb2NhbCBmdW5jdGlvbnMgYXJlIE5PVAovLy8gcHJvY2VkdXJlcy4KLy8vCi8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBTlNGT1JNQVRJT05TCi8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8KLy8vIEFTVCB0cmFuc2Zvcm1hdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB1c2luZyBbVHJlZU5vZGUucmVwbGFjZVdpdGhdIG9yIHRoZQovLy8gW1RyYW5zZm9ybWVyXSB2aXNpdG9yIGNsYXNzLgovLy8KLy8vIFVzZSBbVHJhbnNmb3JtZXJdIGZvciBidWxrIHRyYW5zZm9ybWF0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gdHJhbnNmb3JtIGxvdHMKLy8vIG9mIG5vZGVzLCBhbmQgW1RyZWVOb2RlLnJlcGxhY2VXaXRoXSBmb3Igc3BhcnNlIHRyYW5zZm9ybWF0aW9ucyB0aGF0IG11dGF0ZQovLy8gcmVsYXRpdmVseSBmZXcgbm9kZXMuICBPciB1c2Ugd2hpY2hldmVyIGlzIG1vcmUgY29udmVuaWVudC4KLy8vCi8vLyBUaGUgQVNUIGNhbiBhbHNvIGJlIG11dGF0ZWQgYnkgZGlyZWN0IGZpZWxkIG1hbmlwdWxhdGlvbiwgYnV0IHRoZSB1c2VyIHRoZW4KLy8vIGhhcyB0byB1cGRhdGUgcGFyZW50IHBvaW50ZXJzIG1hbnVhbGx5LgovLy8KbGlicmFyeSBrZXJuZWwuYXN0OwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmODsKCmltcG9ydCAndmlzaXRvci5kYXJ0JzsKZXhwb3J0ICd2aXNpdG9yLmRhcnQnOwoKaW1wb3J0ICdjYW5vbmljYWxfbmFtZS5kYXJ0JyBzaG93IENhbm9uaWNhbE5hbWU7CmV4cG9ydCAnY2Fub25pY2FsX25hbWUuZGFydCcgc2hvdyBDYW5vbmljYWxOYW1lOwoKaW1wb3J0ICd0cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCc7CmltcG9ydCAndGV4dC9hc3RfdG9fdGV4dC5kYXJ0JzsKaW1wb3J0ICd0eXBlX2FsZ2VicmEuZGFydCc7CmltcG9ydCAndHlwZV9lbnZpcm9ubWVudC5kYXJ0JzsKaW1wb3J0ICdjb3FfYW5ub3QuZGFydCc7CgovLy8gQW55IHR5cGUgb2Ygbm9kZSBpbiB0aGUgSVIuCmFic3RyYWN0IGNsYXNzIE5vZGUgewogIGNvbnN0IE5vZGUoKTsKCiAgYWNjZXB0KFZpc2l0b3Igdik7CiAgdm9pZCB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdik7CgogIC8vLyBSZXR1cm5zIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgbm9kZSBmb3IgdXNlIGluIGRlYnVnZ2luZy4KICAvLy8KICAvLy8gW3RvU3RyaW5nXSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgYW5kIHNob3J0LXJ1bm5pbmcgdGVzdCB0b29scwogIC8vLyBhcyBpdCBjYW4gY2F1c2Ugc2VyaW91cyBtZW1vcnkgbGVha3MuCiAgLy8vCiAgLy8vIFN5bnRoZXRpYyBuYW1lcyBhcmUgY2FjaGVkIGdsb2JhbGx5IHRvIHJldGFpbiBjb25zaXN0ZW5jeSBhY3Jvc3MgZGlmZmVyZW50CiAgLy8vIFt0b1N0cmluZ10gY2FsbHMgKGhlbmNlIHRoZSBtZW1vcnkgbGVhaykuCiAgLy8vCiAgLy8vIE5vZGVzIHRoYXQgYXJlIG5hbWVkLCBzdWNoIGFzIFtDbGFzc10gYW5kIFtNZW1iZXJdLCByZXR1cm4gdGhlaXIKICAvLy8gKHBvc3NpYmx5IHN5bnRoZXNpemVkKSBuYW1lLCB3aGVyZWFzIG90aGVyIEFTVCBub2RlcyByZXR1cm4gdGhlIGNvbXBsZXRlCiAgLy8vIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlaXIgc3VidHJlZS4KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBkZWJ1Z05vZGVUb1N0cmluZyh0aGlzKTsKfQoKLy8vIEEgbXV0YWJsZSBBU1Qgbm9kZSB3aXRoIGEgcGFyZW50IHBvaW50ZXIuCi8vLwovLy8gVGhpcyBpcyBhbnl0aGluZyBvdGhlciB0aGFuIFtOYW1lXSBhbmQgW0RhcnRUeXBlXSBub2Rlcy4KYWJzdHJhY3QgY2xhc3MgVHJlZU5vZGUgZXh0ZW5kcyBOb2RlIHsKICBzdGF0aWMgaW50IF9oYXNoQ291bnRlciA9IDA7CiAgZmluYWwgaW50IGhhc2hDb2RlID0gX2hhc2hDb3VudGVyID0gKF9oYXNoQ291bnRlciArIDEpICYgMHgzZmZmZmZmZjsKICBzdGF0aWMgY29uc3QgaW50IG5vT2Zmc2V0ID0gLTE7CgogIFRyZWVOb2RlIHBhcmVudDsKCiAgLy8vIE9mZnNldCBpbiB0aGUgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4KICAvLy8KICAvLy8gVmFsaWQgdmFsdWVzIGFyZSBmcm9tIDAgYW5kIHVwLCBvciAtMSAoW25vT2Zmc2V0XSkgaWYgdGhlIGZpbGUgb2Zmc2V0IGlzCiAgLy8vIG5vdCBhdmFpbGFibGUgKHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgbm9uZSBpcyBzcGVjaWZpY2FsbHkgc2V0KS4KICBpbnQgZmlsZU9mZnNldCA9IG5vT2Zmc2V0OwoKICBhY2NlcHQoVHJlZVZpc2l0b3Igdik7CiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpOwogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpOwoKICAvLy8gUmVwbGFjZXMgW2NoaWxkXSB3aXRoIFtyZXBsYWNlbWVudF0uCiAgLy8vCiAgLy8vIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIEFTVCByZW1haW5zIGEgdHJlZS4gIEluCiAgLy8vIHBhcnRpY3VsYXIsIFtyZXBsYWNlbWVudF0gc2hvdWxkIGJlIGFuIG9ycGhhbiBvciBiZSBwYXJ0IG9mIGFuIG9ycGhhbmVkCiAgLy8vIHN1YnRyZWUuCiAgLy8vCiAgLy8vIEhhcyBubyBlZmZlY3QgaWYgW2NoaWxkXSBpcyBub3QgYWN0dWFsbHkgYSBjaGlsZCBvZiB0aGlzIG5vZGUuCiAgLy8vCiAgLy8vIElmIFtyZXBsYWNlbWVudF0gaXMgYG51bGxgLCB0aGlzIHdpbGwgW3JlbW92ZV0gdGhlIFtjaGlsZF0gbm9kZS4KICB2b2lkIHJlcGxhY2VDaGlsZChUcmVlTm9kZSBjaGlsZCwgVHJlZU5vZGUgcmVwbGFjZW1lbnQpIHsKICAgIHRyYW5zZm9ybUNoaWxkcmVuKG5ldyBfQ2hpbGRSZXBsYWNlcihjaGlsZCwgcmVwbGFjZW1lbnQpKTsKICB9CgogIC8vLyBJbnNlcnRzIGFub3RoZXIgbm9kZSBpbiBwbGFjZSBvZiB0aGlzIG9uZS4KICAvLy8KICAvLy8gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgQVNUIHJlbWFpbnMgYSB0cmVlLiAgSW4KICAvLy8gcGFydGljdWxhciwgW3JlcGxhY2VtZW50XSBzaG91bGQgYmUgYW4gb3JwaGFuIG9yIGJlIHBhcnQgb2YgYW4gb3JwaGFuZWQKICAvLy8gc3VidHJlZS4KICAvLy8KICAvLy8gSWYgW3JlcGxhY2VtZW50XSBpcyBgbnVsbGAsIHRoaXMgd2lsbCBbcmVtb3ZlXSB0aGUgbm9kZS4KICB2b2lkIHJlcGxhY2VXaXRoKFRyZWVOb2RlIHJlcGxhY2VtZW50KSB7CiAgICBwYXJlbnQucmVwbGFjZUNoaWxkKHRoaXMsIHJlcGxhY2VtZW50KTsKICAgIHBhcmVudCA9IG51bGw7CiAgfQoKICAvLy8gUmVtb3ZlcyB0aGlzIG5vZGUgZnJvbSB0aGUgW0xpc3RdIGl0IGlzIGN1cnJlbnRseSBzdG9yZWQgaW4sIG9yIGFzc2lnbnMKICAvLy8gYG51bGxgIHRvIHRoZSBmaWVsZCBvbiB0aGUgcGFyZW50IGN1cnJlbnRseSBwb2ludGluZyB0byB0aGUgbm9kZS4KICAvLy8KICAvLy8gSGFzIG5vIGVmZmVjdCBpZiB0aGUgbm9kZSBpcyBvcnBoYW5lZCBvciBpZiB0aGUgcGFyZW50IHBvaW50ZXIgaXMgc3RhbGUuCiAgdm9pZCByZW1vdmUoKSB7CiAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZCh0aGlzLCBudWxsKTsKICAgIHBhcmVudCA9IG51bGw7CiAgfQoKICBDb21wb25lbnQgZ2V0IGVuY2xvc2luZ0NvbXBvbmVudCA9PiBwYXJlbnQ/LmVuY2xvc2luZ0NvbXBvbmVudDsKCiAgLy8vIFJldHVybnMgdGhlIGJlc3Qga25vd24gc291cmNlIGxvY2F0aW9uIG9mIHRoZSBnaXZlbiBBU1Qgbm9kZSwgb3IgYG51bGxgIGlmCiAgLy8vIHRoZSBub2RlIGlzIG9ycGhhbmVkLgogIC8vLwogIC8vLyBUaGlzIGdldHRlciBpcyBpbnRlbmRlZCBmb3IgZGlhZ25vc3RpY3MgYW5kIGRlYnVnZ2luZywgYW5kIHNob3VsZCBiZQogIC8vLyBhdm9pZGVkIGluIHByb2R1Y3Rpb24gY29kZS4KICBMb2NhdGlvbiBnZXQgbG9jYXRpb24gewogICAgaWYgKGZpbGVPZmZzZXQgPT0gbm9PZmZzZXQpIHJldHVybiBwYXJlbnQ/LmxvY2F0aW9uOwogICAgcmV0dXJuIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShmaWxlT2Zmc2V0KTsKICB9CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gcGFyZW50Py5fZ2V0TG9jYXRpb25JbkVuY2xvc2luZ0ZpbGUob2Zmc2V0KTsKICB9Cn0KCi8vLyBBbiBBU1Qgbm9kZSB0aGF0IGNhbiBiZSByZWZlcmVuY2VkIGJ5IG90aGVyIG5vZGVzLgovLy8KLy8vIFRoZXJlIGlzIGEgc2luZ2xlIFtyZWZlcmVuY2VdIGJlbG9uZ2luZyB0byB0aGlzIG5vZGUsIHByb3ZpZGluZyBhIGxldmVsIG9mCi8vLyBpbmRpcmVjdGlvbiB0aGF0IGlzIG5lZWRlZCBkdXJpbmcgc2VyaWFsaXphdGlvbi4KQGNvcQphYnN0cmFjdCBjbGFzcyBOYW1lZE5vZGUgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgQGNvcWRlZgogIGZpbmFsIFJlZmVyZW5jZSByZWZlcmVuY2U7CgogIE5hbWVkTm9kZShSZWZlcmVuY2UgcmVmZXJlbmNlKQogICAgICA6IHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlID8/IG5ldyBSZWZlcmVuY2UoKSB7CiAgICB0aGlzLnJlZmVyZW5jZS5ub2RlID0gdGhpczsKICB9CgogIENhbm9uaWNhbE5hbWUgZ2V0IGNhbm9uaWNhbE5hbWUgPT4gcmVmZXJlbmNlPy5jYW5vbmljYWxOYW1lOwp9CgphYnN0cmFjdCBjbGFzcyBGaWxlVXJpTm9kZSBleHRlbmRzIFRyZWVOb2RlIHsKICAvLy8gVGhlIFVSSSBvZiB0aGUgc291cmNlIGZpbGUgdGhpcyBub2RlIHdhcyBsb2FkZWQgZnJvbS4KICBVcmkgZ2V0IGZpbGVVcmk7Cn0KCmFic3RyYWN0IGNsYXNzIEFubm90YXRhYmxlIHsKICBMaXN0PEV4cHJlc3Npb24+IGdldCBhbm5vdGF0aW9uczsKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBub2RlKTsKfQoKLy8vIEluZGlyZWN0aW9uIGJldHdlZW4gYSByZWZlcmVuY2UgYW5kIGl0cyBkZWZpbml0aW9uLgovLy8KLy8vIFRoZXJlIGlzIG9ubHkgb25lIHJlZmVyZW5jZSBvYmplY3QgcGVyIFtOYW1lZE5vZGVdLgpAY29xcmVmCmNsYXNzIFJlZmVyZW5jZSB7CiAgQ2Fub25pY2FsTmFtZSBjYW5vbmljYWxOYW1lOwoKICBAbm9jb3EKICBOYW1lZE5vZGUgbm9kZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKGNhbm9uaWNhbE5hbWUgIT0gbnVsbCkgewogICAgICByZXR1cm4gJ1JlZmVyZW5jZSB0byAkY2Fub25pY2FsTmFtZSc7CiAgICB9CiAgICBpZiAobm9kZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiAnUmVmZXJlbmNlIHRvICRub2RlJzsKICAgIH0KICAgIHJldHVybiAnVW5ib3VuZCByZWZlcmVuY2UnOwogIH0KCiAgTGlicmFyeSBnZXQgYXNMaWJyYXJ5IHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgdGhyb3cgJyR0aGlzIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBsaWJyYXJ5IHdhcyBleHBlY3RlZCc7CiAgICB9CiAgICByZXR1cm4gbm9kZSBhcyBMaWJyYXJ5OwogIH0KCiAgQ2xhc3MgZ2V0IGFzQ2xhc3MgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIGNsYXNzIHdhcyBleHBlY3RlZCc7CiAgICB9CiAgICByZXR1cm4gbm9kZSBhcyBDbGFzczsKICB9CgogIE1lbWJlciBnZXQgYXNNZW1iZXIgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIG1lbWJlciB3YXMgZXhwZWN0ZWQnOwogICAgfQogICAgcmV0dXJuIG5vZGUgYXMgTWVtYmVyOwogIH0KCiAgRmllbGQgZ2V0IGFzRmllbGQgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIGZpZWxkIHdhcyBleHBlY3RlZCc7CiAgICB9CiAgICByZXR1cm4gbm9kZSBhcyBGaWVsZDsKICB9CgogIENvbnN0cnVjdG9yIGdldCBhc0NvbnN0cnVjdG9yIHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgdGhyb3cgJyR0aGlzIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBjb25zdHJ1Y3RvciB3YXMgZXhwZWN0ZWQnOwogICAgfQogICAgcmV0dXJuIG5vZGUgYXMgQ29uc3RydWN0b3I7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IGFzUHJvY2VkdXJlIHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgdGhyb3cgJyR0aGlzIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBwcm9jZWR1cmUgd2FzIGV4cGVjdGVkJzsKICAgIH0KICAgIHJldHVybiBub2RlIGFzIFByb2NlZHVyZTsKICB9CgogIFR5cGVkZWYgZ2V0IGFzVHlwZWRlZiB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHRocm93ICckdGhpcyBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgdHlwZWRlZiB3YXMgZXhwZWN0ZWQnOwogICAgfQogICAgcmV0dXJuIG5vZGUgYXMgVHlwZWRlZjsKICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgICBMSUJSQVJJRVMgYW5kIENMQVNTRVMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpAY29xCmNsYXNzIExpYnJhcnkgZXh0ZW5kcyBOYW1lZE5vZGUKICAgIGltcGxlbWVudHMgQW5ub3RhdGFibGUsIENvbXBhcmFibGU8TGlicmFyeT4sIEZpbGVVcmlOb2RlIHsKICAvLy8gQW4gaW1wb3J0IHBhdGggdG8gdGhpcyBsaWJyYXJ5LgogIC8vLwogIC8vLyBUaGUgW1VyaV0gc2hvdWxkIGhhdmUgdGhlIGBkYXJ0YCwgYHBhY2thZ2VgLCBgYXBwYCwgb3IgYGZpbGVgIHNjaGVtZS4KICAvLy8KICAvLy8gSWYgdGhlIFVSSSBoYXMgdGhlIGBhcHBgIHNjaGVtZSwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIGFwcGxpY2F0aW9uIHJvb3QuCiAgVXJpIGltcG9ydFVyaTsKCiAgLy8vIFRoZSBVUkkgb2YgdGhlIHNvdXJjZSBmaWxlIHRoaXMgbGlicmFyeSB3YXMgbG9hZGVkIGZyb20uCiAgVXJpIGZpbGVVcmk7CgogIC8vIFRPRE8oamVuc2opOiBEbyB3ZSBoYXZlIGEgYmV0dGVyIG9wdGlvbiB0aGFuIHRoaXM/CiAgc3RhdGljIGludCBkZWZhdWx0TGFuZ2F1Z2VWZXJzaW9uTWFqb3IgPSAyOwogIHN0YXRpYyBpbnQgZGVmYXVsdExhbmdhdWdlVmVyc2lvbk1pbm9yID0gNDsKCiAgaW50IF9sYW5ndWFnZVZlcnNpb25NYWpvcjsKICBpbnQgX2xhbmd1YWdlVmVyc2lvbk1pbm9yOwogIGludCBnZXQgbGFuZ3VhZ2VWZXJzaW9uTWFqb3IgPT4KICAgICAgX2xhbmd1YWdlVmVyc2lvbk1ham9yID8/IGRlZmF1bHRMYW5nYXVnZVZlcnNpb25NYWpvcjsKICBpbnQgZ2V0IGxhbmd1YWdlVmVyc2lvbk1pbm9yID0+CiAgICAgIF9sYW5ndWFnZVZlcnNpb25NaW5vciA/PyBkZWZhdWx0TGFuZ2F1Z2VWZXJzaW9uTWlub3I7CiAgdm9pZCBzZXRMYW5ndWFnZVZlcnNpb24oaW50IGxhbmd1YWdlVmVyc2lvbk1ham9yLCBpbnQgbGFuZ3VhZ2VWZXJzaW9uTWlub3IpIHsKICAgIGlmIChsYW5ndWFnZVZlcnNpb25NYWpvciA9PSBudWxsIHx8IGxhbmd1YWdlVmVyc2lvbk1pbm9yID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlRyeWluZyB0byBzZXQgbGFuZ2F1Z2UgdmVyc2lvbiAnbnVsbCciKTsKICAgIH0KICAgIF9sYW5ndWFnZVZlcnNpb25NYWpvciA9IGxhbmd1YWdlVmVyc2lvbk1ham9yOwogICAgX2xhbmd1YWdlVmVyc2lvbk1pbm9yID0gbGFuZ3VhZ2VWZXJzaW9uTWlub3I7CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IEV4dGVybmFsRmxhZyA9IDEgPDwgMDsKICBzdGF0aWMgY29uc3QgaW50IFN5bnRoZXRpY0ZsYWcgPSAxIDw8IDE7CgogIGludCBmbGFncyA9IDA7CgogIC8vLyBJZiB0cnVlLCB0aGUgbGlicmFyeSBpcyBwYXJ0IG9mIGFub3RoZXIgYnVpbGQgdW5pdCBhbmQgaXRzIGNvbnRlbnRzCiAgLy8vIGFyZSBvbmx5IHBhcnRpYWxseSBsb2FkZWQuCiAgLy8vCiAgLy8vIENsYXNzZXMgb2YgYW4gZXh0ZXJuYWwgbGlicmFyeSBhcmUgbG9hZGVkIGF0IG9uZSBvZiB0aGUgW0NsYXNzTGV2ZWxdcwogIC8vLyBvdGhlciB0aGFuIFtDbGFzc0xldmVsLkJvZHldLiAgTWVtYmVycyBpbiBhbiBleHRlcm5hbCBsaWJyYXJ5IGhhdmUgbm8KICAvLy8gYm9keSwgYnV0IGhhdmUgdGhlaXIgdHlwZWQgaW50ZXJmYWNlIHByZXNlbnQuCiAgLy8vCiAgLy8vIElmIHRoZSBsaWJyYXJ5IGlzIG5vbi1leHRlcm5hbCwgdGhlbiBpdHMgY2xhc3NlcyBhcmUgYXQgW0NsYXNzTGV2ZWwuQm9keV0KICAvLy8gYW5kIGFsbCBtZW1iZXJzIGFyZSBsb2FkZWQuCiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiAoZmxhZ3MgJiBFeHRlcm5hbEZsYWcpICE9IDA7CiAgdm9pZCBzZXQgaXNFeHRlcm5hbChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRXh0ZXJuYWxGbGFnKSA6IChmbGFncyAmIH5FeHRlcm5hbEZsYWcpOwogIH0KCiAgLy8vIElmIHRydWUsIHRoZSBsaWJyYXJ5IGlzIHN5bnRoZXRpYywgZm9yIGluc3RhbmNlIGxpYnJhcnkgdGhhdCBkb2Vzbid0CiAgLy8vIHJlcHJlc2VudHMgYW4gYWN0dWFsIGZpbGUgYW5kIGlzIGNyZWF0ZWQgYXMgdGhlIHJlc3VsdCBvZiBlcnJvciByZWNvdmVyeS4KICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiBmbGFncyAmIFN5bnRoZXRpY0ZsYWcgIT0gMDsKICB2b2lkIHNldCBpc1N5bnRoZXRpYyhib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgU3ludGhldGljRmxhZykgOiAoZmxhZ3MgJiB+U3ludGhldGljRmxhZyk7CiAgfQoKICBTdHJpbmcgbmFtZTsKCiAgLy8vIFByb2JsZW1zIGluIHRoaXMgW0xpYnJhcnldIGVuY29kZWQgYXMganNvbiBvYmplY3RzLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBmaWVsZCBjYW4gYmUgbnVsbCwgYW5kIGJ5IGNvbnZlbnRpb24gc2hvdWxkIGJlIG51bGwgaWYgdGhlCiAgLy8vIGxpc3QgaXMgZW1wdHkuCiAgTGlzdDxTdHJpbmc+IHByb2JsZW1zQXNKc29uOwoKICBAbm9jb3EKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zOwoKICBmaW5hbCBMaXN0PExpYnJhcnlEZXBlbmRlbmN5PiBkZXBlbmRlbmNpZXM7CgogIC8vLyBSZWZlcmVuY2VzIHRvIG5vZGVzIGV4cG9ydGVkIGJ5IGBleHBvcnRgIGRlY2xhcmF0aW9ucyB0aGF0OgogIC8vLyAtIGFyZW4ndCBhbWJpZ3VvdXMsIG9yCiAgLy8vIC0gYXJlbid0IGhpZGRlbiBieSBsb2NhbCBkZWNsYXJhdGlvbnMuCiAgQG5vY29xCiAgZmluYWwgTGlzdDxSZWZlcmVuY2U+IGFkZGl0aW9uYWxFeHBvcnRzID0gPFJlZmVyZW5jZT5bXTsKCiAgQGluZm9ybWF0aXZlCiAgZmluYWwgTGlzdDxMaWJyYXJ5UGFydD4gcGFydHM7CgogIGZpbmFsIExpc3Q8VHlwZWRlZj4gdHlwZWRlZnM7CiAgZmluYWwgTGlzdDxDbGFzcz4gY2xhc3NlczsKICBmaW5hbCBMaXN0PEV4dGVuc2lvbj4gZXh0ZW5zaW9uczsKICBmaW5hbCBMaXN0PFByb2NlZHVyZT4gcHJvY2VkdXJlczsKICBmaW5hbCBMaXN0PEZpZWxkPiBmaWVsZHM7CgogIExpYnJhcnkodGhpcy5pbXBvcnRVcmksCiAgICAgIHt0aGlzLm5hbWUsCiAgICAgIGJvb2wgaXNFeHRlcm5hbDogZmFsc2UsCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMsCiAgICAgIExpc3Q8TGlicmFyeURlcGVuZGVuY3k+IGRlcGVuZGVuY2llcywKICAgICAgTGlzdDxMaWJyYXJ5UGFydD4gcGFydHMsCiAgICAgIExpc3Q8VHlwZWRlZj4gdHlwZWRlZnMsCiAgICAgIExpc3Q8Q2xhc3M+IGNsYXNzZXMsCiAgICAgIExpc3Q8RXh0ZW5zaW9uPiBleHRlbnNpb25zLAogICAgICBMaXN0PFByb2NlZHVyZT4gcHJvY2VkdXJlcywKICAgICAgTGlzdDxGaWVsZD4gZmllbGRzLAogICAgICB0aGlzLmZpbGVVcmksCiAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2V9KQogICAgICA6IHRoaXMuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucyA/PyA8RXhwcmVzc2lvbj5bXSwKICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcyA/PyA8TGlicmFyeURlcGVuZGVuY3k+W10sCiAgICAgICAgdGhpcy5wYXJ0cyA9IHBhcnRzID8/IDxMaWJyYXJ5UGFydD5bXSwKICAgICAgICB0aGlzLnR5cGVkZWZzID0gdHlwZWRlZnMgPz8gPFR5cGVkZWY+W10sCiAgICAgICAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyA/PyA8Q2xhc3M+W10sCiAgICAgICAgdGhpcy5leHRlbnNpb25zID0gZXh0ZW5zaW9ucyA/PyA8RXh0ZW5zaW9uPltdLAogICAgICAgIHRoaXMucHJvY2VkdXJlcyA9IHByb2NlZHVyZXMgPz8gPFByb2NlZHVyZT5bXSwKICAgICAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcyA/PyA8RmllbGQ+W10sCiAgICAgICAgc3VwZXIocmVmZXJlbmNlKSB7CiAgICB0aGlzLmlzRXh0ZXJuYWwgPSBpc0V4dGVybmFsOwogICAgc2V0UGFyZW50cyh0aGlzLmRlcGVuZGVuY2llcywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMucGFydHMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLnR5cGVkZWZzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5jbGFzc2VzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5leHRlbnNpb25zLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5wcm9jZWR1cmVzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5maWVsZHMsIHRoaXMpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHRvcC1sZXZlbCBmaWVsZHMgYW5kIHByb2NlZHVyZXMgZGVmaW5lZCBpbiB0aGlzIGxpYnJhcnkuCiAgLy8vCiAgLy8vIFRoaXMgZ2V0dGVyIGlzIGZvciBjb252ZW5pZW5jZSwgbm90IGVmZmljaWVuY3kuICBDb25zaWRlciBtYW51YWxseQogIC8vLyBpdGVyYXRpbmcgdGhlIG1lbWJlcnMgdG8gc3BlZWQgdXAgY29kZSBpbiBwcm9kdWN0aW9uLgogIEl0ZXJhYmxlPE1lbWJlcj4gZ2V0IG1lbWJlcnMgPT4KICAgICAgPEl0ZXJhYmxlPE1lbWJlcj4+W2ZpZWxkcywgcHJvY2VkdXJlc10uZXhwYW5kKCh4KSA9PiB4KTsKCiAgdm9pZCBhZGRNZW1iZXIoTWVtYmVyIG1lbWJlcikgewogICAgbWVtYmVyLnBhcmVudCA9IHRoaXM7CiAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZSkgewogICAgICBwcm9jZWR1cmVzLmFkZChtZW1iZXIpOwogICAgfSBlbHNlIGlmIChtZW1iZXIgaXMgRmllbGQpIHsKICAgICAgZmllbGRzLmFkZChtZW1iZXIpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IobWVtYmVyKTsKICAgIH0KICB9CgogIHZvaWQgYWRkQW5ub3RhdGlvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIG5vZGUucGFyZW50ID0gdGhpczsKICAgIGFubm90YXRpb25zLmFkZChub2RlKTsKICB9CgogIHZvaWQgYWRkQ2xhc3MoQ2xhc3MgY2xhc3NfKSB7CiAgICBjbGFzc18ucGFyZW50ID0gdGhpczsKICAgIGNsYXNzZXMuYWRkKGNsYXNzXyk7CiAgfQoKICB2b2lkIGFkZEV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSB7CiAgICBleHRlbnNpb24ucGFyZW50ID0gdGhpczsKICAgIGV4dGVuc2lvbnMuYWRkKGV4dGVuc2lvbik7CiAgfQoKICB2b2lkIGFkZEZpZWxkKEZpZWxkIGZpZWxkKSB7CiAgICBmaWVsZC5wYXJlbnQgPSB0aGlzOwogICAgZmllbGRzLmFkZChmaWVsZCk7CiAgfQoKICB2b2lkIGFkZFByb2NlZHVyZShQcm9jZWR1cmUgcHJvY2VkdXJlKSB7CiAgICBwcm9jZWR1cmUucGFyZW50ID0gdGhpczsKICAgIHByb2NlZHVyZXMuYWRkKHByb2NlZHVyZSk7CiAgfQoKICB2b2lkIGFkZFR5cGVkZWYoVHlwZWRlZiB0eXBlZGVmXykgewogICAgdHlwZWRlZl8ucGFyZW50ID0gdGhpczsKICAgIHR5cGVkZWZzLmFkZCh0eXBlZGVmXyk7CiAgfQoKICB2b2lkIGNvbXB1dGVDYW5vbmljYWxOYW1lcygpIHsKICAgIGFzc2VydChjYW5vbmljYWxOYW1lICE9IG51bGwpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlZGVmcy5sZW5ndGg7ICsraSkgewogICAgICBUeXBlZGVmIHR5cGVkZWZfID0gdHlwZWRlZnNbaV07CiAgICAgIGNhbm9uaWNhbE5hbWUuZ2V0Q2hpbGRGcm9tVHlwZWRlZih0eXBlZGVmXykuYmluZFRvKHR5cGVkZWZfLnJlZmVyZW5jZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7ICsraSkgewogICAgICBGaWVsZCBmaWVsZCA9IGZpZWxkc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZEZyb21NZW1iZXIoZmllbGQpLmJpbmRUbyhmaWVsZC5yZWZlcmVuY2UpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZWR1cmVzLmxlbmd0aDsgKytpKSB7CiAgICAgIFByb2NlZHVyZSBtZW1iZXIgPSBwcm9jZWR1cmVzW2ldOwogICAgICBjYW5vbmljYWxOYW1lLmdldENoaWxkRnJvbU1lbWJlcihtZW1iZXIpLmJpbmRUbyhtZW1iZXIucmVmZXJlbmNlKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7ICsraSkgewogICAgICBDbGFzcyBjbGFzc18gPSBjbGFzc2VzW2ldOwogICAgICBjYW5vbmljYWxOYW1lLmdldENoaWxkKGNsYXNzXy5uYW1lKS5iaW5kVG8oY2xhc3NfLnJlZmVyZW5jZSk7CiAgICAgIGNsYXNzXy5jb21wdXRlQ2Fub25pY2FsTmFtZXMoKTsKICAgIH0KICB9CgogIHZvaWQgYWRkRGVwZW5kZW5jeShMaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICBkZXBlbmRlbmNpZXMuYWRkKG5vZGUuLnBhcmVudCA9IHRoaXMpOwogIH0KCiAgdm9pZCBhZGRQYXJ0KExpYnJhcnlQYXJ0IG5vZGUpIHsKICAgIHBhcnRzLmFkZChub2RlLi5wYXJlbnQgPSB0aGlzKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0TGlicmFyeSh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICB2aXNpdExpc3QoZGVwZW5kZW5jaWVzLCB2KTsKICAgIHZpc2l0TGlzdChwYXJ0cywgdik7CiAgICB2aXNpdExpc3QodHlwZWRlZnMsIHYpOwogICAgdmlzaXRMaXN0KGNsYXNzZXMsIHYpOwogICAgdmlzaXRMaXN0KHByb2NlZHVyZXMsIHYpOwogICAgdmlzaXRMaXN0KGZpZWxkcywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoZGVwZW5kZW5jaWVzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QocGFydHMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdCh0eXBlZGVmcywgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1MaXN0KGNsYXNzZXMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChwcm9jZWR1cmVzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoZmllbGRzLCB2LCB0aGlzKTsKICB9CgogIHN0YXRpYyBpbnQgX2xpYnJhcnlJZENvdW50ZXIgPSAwOwogIGludCBfbGlicmFyeUlkID0gKytfbGlicmFyeUlkQ291bnRlcjsKCiAgaW50IGNvbXBhcmVUbyhMaWJyYXJ5IG90aGVyKSA9PiBfbGlicmFyeUlkIC0gb3RoZXIuX2xpYnJhcnlJZDsKCiAgLy8vIFJldHVybnMgYSBwb3NzaWJseSBzeW50aGVzaXplZCBuYW1lIGZvciB0aGlzIGxpYnJhcnksIGNvbnNpc3RlbnQgd2l0aAogIC8vLyB0aGUgbmFtZXMgYWNyb3NzIGFsbCBbdG9TdHJpbmddIGNhbGxzLgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlYnVnTGlicmFyeU5hbWUodGhpcyk7CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIEFuIGltcG9ydCBvciBleHBvcnQgZGVjbGFyYXRpb24gaW4gYSBsaWJyYXJ5LgovLy8KLy8vIEl0IGNhbiByZXByZXNlbnQgYW55IG9mIHRoZSBmb2xsb3dpbmcgZm9ybXMsCi8vLwovLy8gICAgIGltcG9ydCA8dXJsPjsKLy8vICAgICBpbXBvcnQgPHVybD4gYXMgPG5hbWU+OwovLy8gICAgIGltcG9ydCA8dXJsPiBkZWZlcnJlZCBhcyA8bmFtZT47Ci8vLyAgICAgZXhwb3J0IDx1cmw+OwovLy8KLy8vIG9wdGlvbmFsbHkgd2l0aCBtZXRhZGF0YSBhbmQgW0NvbWJpbmF0b3JzXS4KY2xhc3MgTGlicmFyeURlcGVuZGVuY3kgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgaW50IGZsYWdzOwoKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zOwoKICBSZWZlcmVuY2UgaW1wb3J0ZWRMaWJyYXJ5UmVmZXJlbmNlOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGltcG9ydCBwcmVmaXgsIGlmIGFueSwgb3IgYG51bGxgIGlmIHRoaXMgaXMgbm90IGFuIGltcG9ydAogIC8vLyB3aXRoIGEgcHJlZml4LgogIC8vLwogIC8vLyBNdXN0IGJlIG5vbi1udWxsIGZvciBkZWZlcnJlZCBpbXBvcnRzLCBhbmQgbXVzdCBiZSBudWxsIGZvciBleHBvcnRzLgogIFN0cmluZyBuYW1lOwoKICBmaW5hbCBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzOwoKICBMaWJyYXJ5RGVwZW5kZW5jeShpbnQgZmxhZ3MsIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMsCiAgICAgIExpYnJhcnkgaW1wb3J0ZWRMaWJyYXJ5LCBTdHJpbmcgbmFtZSwgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycykKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICBmbGFncywgYW5ub3RhdGlvbnMsIGltcG9ydGVkTGlicmFyeS5yZWZlcmVuY2UsIG5hbWUsIGNvbWJpbmF0b3JzKTsKCiAgTGlicmFyeURlcGVuZGVuY3kuZGVmZXJyZWRJbXBvcnQoTGlicmFyeSBpbXBvcnRlZExpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7TGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycywgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9uc30pCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShEZWZlcnJlZEZsYWcsIGFubm90YXRpb25zID8/IDxFeHByZXNzaW9uPltdLAogICAgICAgICAgICBpbXBvcnRlZExpYnJhcnkucmVmZXJlbmNlLCBuYW1lLCBjb21iaW5hdG9ycyA/PyA8Q29tYmluYXRvcj5bXSk7CgogIExpYnJhcnlEZXBlbmRlbmN5LmltcG9ydChMaWJyYXJ5IGltcG9ydGVkTGlicmFyeSwKICAgICAge1N0cmluZyBuYW1lLCBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzLCBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zfSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKDAsIGFubm90YXRpb25zID8/IDxFeHByZXNzaW9uPltdLAogICAgICAgICAgICBpbXBvcnRlZExpYnJhcnkucmVmZXJlbmNlLCBuYW1lLCBjb21iaW5hdG9ycyA/PyA8Q29tYmluYXRvcj5bXSk7CgogIExpYnJhcnlEZXBlbmRlbmN5LmV4cG9ydChMaWJyYXJ5IGltcG9ydGVkTGlicmFyeSwKICAgICAge0xpc3Q8Q29tYmluYXRvcj4gY29tYmluYXRvcnMsIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnN9KQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoRXhwb3J0RmxhZywgYW5ub3RhdGlvbnMgPz8gPEV4cHJlc3Npb24+W10sCiAgICAgICAgICAgIGltcG9ydGVkTGlicmFyeS5yZWZlcmVuY2UsIG51bGwsIGNvbWJpbmF0b3JzID8/IDxDb21iaW5hdG9yPltdKTsKCiAgTGlicmFyeURlcGVuZGVuY3kuYnlSZWZlcmVuY2UodGhpcy5mbGFncywgdGhpcy5hbm5vdGF0aW9ucywKICAgICAgdGhpcy5pbXBvcnRlZExpYnJhcnlSZWZlcmVuY2UsIHRoaXMubmFtZSwgdGhpcy5jb21iaW5hdG9ycykgewogICAgc2V0UGFyZW50cyhhbm5vdGF0aW9ucywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKGNvbWJpbmF0b3JzLCB0aGlzKTsKICB9CgogIExpYnJhcnkgZ2V0IGVuY2xvc2luZ0xpYnJhcnkgPT4gcGFyZW50OwogIExpYnJhcnkgZ2V0IHRhcmdldExpYnJhcnkgPT4gaW1wb3J0ZWRMaWJyYXJ5UmVmZXJlbmNlLmFzTGlicmFyeTsKCiAgc3RhdGljIGNvbnN0IGludCBFeHBvcnRGbGFnID0gMSA8PCAwOwogIHN0YXRpYyBjb25zdCBpbnQgRGVmZXJyZWRGbGFnID0gMSA8PCAxOwoKICBib29sIGdldCBpc0V4cG9ydCA9PiBmbGFncyAmIEV4cG9ydEZsYWcgIT0gMDsKICBib29sIGdldCBpc0ltcG9ydCA9PiAhaXNFeHBvcnQ7CiAgYm9vbCBnZXQgaXNEZWZlcnJlZCA9PiBmbGFncyAmIERlZmVycmVkRmxhZyAhPSAwOwoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBhbm5vdGF0aW9uKSB7CiAgICBhbm5vdGF0aW9ucy5hZGQoYW5ub3RhdGlvbi4ucGFyZW50ID0gdGhpcyk7CiAgfQoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdExpYnJhcnlEZXBlbmRlbmN5KHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGFubm90YXRpb25zLCB2KTsKICAgIHZpc2l0TGlzdChjb21iaW5hdG9ycywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoY29tYmluYXRvcnMsIHYsIHRoaXMpOwogIH0KfQoKLy8vIEEgcGFydCBkZWNsYXJhdGlvbiBpbiBhIGxpYnJhcnkuCi8vLwovLy8gICAgIHBhcnQgPHVybD47Ci8vLwovLy8gb3B0aW9uYWxseSB3aXRoIG1ldGFkYXRhLgpjbGFzcyBMaWJyYXJ5UGFydCBleHRlbmRzIFRyZWVOb2RlIHsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zOwogIGZpbmFsIFN0cmluZyBwYXJ0VXJpOwoKICBMaWJyYXJ5UGFydCh0aGlzLmFubm90YXRpb25zLCB0aGlzLnBhcnRVcmkpIHsKICAgIHNldFBhcmVudHMoYW5ub3RhdGlvbnMsIHRoaXMpOwogIH0KCiAgdm9pZCBhZGRBbm5vdGF0aW9uKEV4cHJlc3Npb24gYW5ub3RhdGlvbikgewogICAgYW5ub3RhdGlvbnMuYWRkKGFubm90YXRpb24uLnBhcmVudCA9IHRoaXMpOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRMaWJyYXJ5UGFydCh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICB9Cn0KCi8vLyBBIGBzaG93YCBvciBgaGlkZWAgY2xhdXNlIGZvciBhbiBpbXBvcnQgb3IgZXhwb3J0LgpjbGFzcyBDb21iaW5hdG9yIGV4dGVuZHMgVHJlZU5vZGUgewogIGJvb2wgaXNTaG93OwoKICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZXM7CgogIExpYnJhcnlEZXBlbmRlbmN5IGdldCBkZXBlbmRlbmN5ID0+IHBhcmVudDsKCiAgQ29tYmluYXRvcih0aGlzLmlzU2hvdywgdGhpcy5uYW1lcyk7CiAgQ29tYmluYXRvci5zaG93KHRoaXMubmFtZXMpIDogaXNTaG93ID0gdHJ1ZTsKICBDb21iaW5hdG9yLmhpZGUodGhpcy5uYW1lcykgOiBpc1Nob3cgPSBmYWxzZTsKCiAgYm9vbCBnZXQgaXNIaWRlID0+ICFpc1Nob3c7CgogIEBvdmVycmlkZQogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0Q29tYmluYXRvcih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CgogIEBvdmVycmlkZQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCi8vLyBEZWNsYXJhdGlvbiBvZiBhIHR5cGUgYWxpYXMuCmNsYXNzIFR5cGVkZWYgZXh0ZW5kcyBOYW1lZE5vZGUgaW1wbGVtZW50cyBGaWxlVXJpTm9kZSB7CiAgLy8vIFRoZSBVUkkgb2YgdGhlIHNvdXJjZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIHRoaXMgdHlwZWRlZi4KICBVcmkgZmlsZVVyaTsKICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gY29uc3QgPEV4cHJlc3Npb24+W107CiAgU3RyaW5nIG5hbWU7CiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKICBEYXJ0VHlwZSB0eXBlOwoKICAvLyBUaGUgZm9sbG93aW5nIHR3byBmaWVsZHMgZGVzY3JpYmUgcGFyYW1ldGVycyBvZiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbgogIC8vIHR5cGUuICBUaGV5IGFyZSBuZWVkZWQgdG8ga2VlcCBzdWNoIGF0dHJpYnV0ZXMgYXMgbmFtZXMgYW5kIGFubm90YXRpb25zLgogIGZpbmFsIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZTsKICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogIGZpbmFsIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzOwoKICBUeXBlZGVmKHRoaXMubmFtZSwgdGhpcy50eXBlLAogICAgICB7UmVmZXJlbmNlIHJlZmVyZW5jZSwKICAgICAgdGhpcy5maWxlVXJpLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzT2ZGdW5jdGlvblR5cGUsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzfSkKICAgICAgOiB0aGlzLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnMgPz8gPFR5cGVQYXJhbWV0ZXI+W10sCiAgICAgICAgdGhpcy50eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlID0KICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZSA/PyA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICB0aGlzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID0KICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgdGhpcy5uYW1lZFBhcmFtZXRlcnMgPSBuYW1lZFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgc3VwZXIocmVmZXJlbmNlKSB7CiAgICBzZXRQYXJlbnRzKHRoaXMudHlwZVBhcmFtZXRlcnMsIHRoaXMpOwogIH0KCiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQ7CgogIFR5cGVkZWZUeXBlIGdldCB0aGlzVHlwZSB7CiAgICByZXR1cm4gbmV3IFR5cGVkZWZUeXBlKHRoaXMsIF9nZXRBc1R5cGVBcmd1bWVudHModHlwZVBhcmFtZXRlcnMpKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSB7CiAgICByZXR1cm4gdi52aXNpdFR5cGVkZWYodGhpcyk7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QodHlwZVBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICB0eXBlID0gdi52aXNpdERhcnRUeXBlKHR5cGUpOwogICAgfQogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICB2aXNpdExpc3QodHlwZVBhcmFtZXRlcnMsIHYpOwogICAgdHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdm9pZCBhZGRBbm5vdGF0aW9uKEV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKGFubm90YXRpb25zLmlzRW1wdHkpIHsKICAgICAgYW5ub3RhdGlvbnMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIH0KICAgIGFubm90YXRpb25zLmFkZChub2RlKTsKICAgIG5vZGUucGFyZW50ID0gdGhpczsKICB9CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIFRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGNvbnRlbnRzIG9mIGEgY2xhc3MgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIG1lbW9yeS4KLy8vCi8vLyBFYWNoIGxldmVsIGltcGx5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIHByZXZpb3VzIG9uZXMuCmVudW0gQ2xhc3NMZXZlbCB7CiAgLy8vIFRlbXBvcmFyeSBsb2FkaW5nIGxldmVsIGZvciBpbnRlcm5hbCB1c2UgYnkgSVIgcHJvZHVjZXJzLiAgQ29uc3VtZXJzIG9mCiAgLy8vIGtlcm5lbCBjb2RlIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBjbGFzc2VzIGF0IHRoaXMgbGV2ZWwuCiAgVGVtcG9yYXJ5LAoKICAvLy8gVGhlIGNsYXNzIG1heSBiZSB1c2VkIGFzIGEgdHlwZSwgYW5kIGl0IG1heSBjb250YWluIG1lbWJlcnMgdGhhdCBhcmUKICAvLy8gcmVmZXJlbmNlZCBmcm9tIHRoaXMgYnVpbGQgdW5pdC4KICAvLy8KICAvLy8gVGhlIHR5cGUgcGFyYW1ldGVycyBhbmQgdGhlaXIgYm91bmRzIGFyZSBwcmVzZW50LgogIC8vLwogIC8vLyBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBhbGwgbWVtYmVycyBhcmUgcHJlc2VudC4KICAvLy8KICAvLy8gQWxsIHN1cGVydHlwZXMgb2YgdGhpcyBjbGFzcyBhcmUgYXQgW1R5cGVdIGxldmVsIG9yIGhpZ2hlci4KICBUeXBlLAoKICAvLy8gQWxsIGluc3RhbmNlIG1lbWJlcnMgb2YgdGhlIGNsYXNzIGFyZSBwcmVzZW50LgogIC8vLwogIC8vLyBBbGwgc3VwZXJ0eXBlcyBvZiB0aGlzIGNsYXNzIGFyZSBhdCBbSGllcmFyY2h5XSBsZXZlbCBvciBoaWdoZXIuCiAgLy8vCiAgLy8vIFRoaXMgbGV2ZWwgZXhpc3RzIHNvIHN1cGVydHlwZXMgb2YgYSBmdWxseSBsb2FkZWQgY2xhc3MgY29udGFpbiBhbGwgdGhlCiAgLy8vIG1lbWJlcnMgbmVlZGVkIHRvIGRldGVjdCBvdmVycmlkZSBjb25zdHJhaW50cy4KICBIaWVyYXJjaHksCgogIC8vLyBBbGwgaW5zdGFuY2UgbWVtYmVycyBvZiB0aGUgY2xhc3MgaGF2ZSB0aGVpciBib2R5IGxvYWRlZCwgYW5kIHRoZWlyCiAgLy8vIGFubm90YXRpb25zIGFyZSBwcmVzZW50LgogIC8vLwogIC8vLyBBbGwgc3VwZXJ0eXBlcyBvZiB0aGlzIGNsYXNzIGFyZSBhdCBbSGllcmFyY2h5XSBsZXZlbCBvciBoaWdoZXIuCiAgLy8vCiAgLy8vIElmIHRoaXMgY2xhc3MgaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiwgdGhlbiBpdHMgbWl4aW4gaXMgbG9hZGVkIGF0IFtNaXhpbl0KICAvLy8gbGV2ZWwgb3IgaGlnaGVyLgogIC8vLwogIC8vLyBUaGlzIGxldmVsIGV4aXN0cyBzbyB0aGUgY29udGVudHMgb2YgYSBtaXhpbiBjYW4gYmUgY2xvbmVkIGludG8gYQogIC8vLyBtaXhpbiBhcHBsaWNhdGlvbi4KICBNaXhpbiwKCiAgLy8vIEFsbCBtZW1iZXJzIG9mIHRoZSBjbGFzcyBhcmUgZnVsbHkgbG9hZGVkIGFuZCBhcmUgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCiAgLy8vCiAgLy8vIEFubm90YXRpb25zIGFyZSBwcmVzZW50IG9uIGNsYXNzZXMgYW5kIG1lbWJlcnMuCiAgLy8vCiAgLy8vIEFsbCBzdXBlcnR5cGVzIG9mIHRoaXMgY2xhc3MgYXJlIGF0IFtIaWVyYXJjaHldIGxldmVsIG9yIGhpZ2hlciwKICAvLy8gbm90IG5lY2Vzc2FyaWx5IGF0IFtCb2R5XSBsZXZlbC4KICBCb2R5LAp9CgovLy8gRGVjbGFyYXRpb24gb2YgYSByZWd1bGFyIGNsYXNzIG9yIGEgbWl4aW4gYXBwbGljYXRpb24uCi8vLwovLy8gTWl4aW4gYXBwbGljYXRpb25zIG1heSBub3QgY29udGFpbiBmaWVsZHMgb3IgcHJvY2VkdXJlcywgYXMgdGhleSBpbXBsaWNpdGx5Ci8vLyB1c2UgdGhvc2UgZnJvbSBpdHMgbWl4ZWQtaW4gdHlwZS4gIEhvd2V2ZXIsIHRoZSBJUiBkb2VzIG5vdCBlbmZvcmNlIHRoaXMKLy8vIHJ1bGUgZGlyZWN0bHksIGFzIGRvaW5nIHNvIGNhbiBvYnN0cnVjdCB0cmFuc2Zvcm1hdGlvbnMuICBJdCBpcyBwb3NzaWJsZSB0bwovLy8gdHJhbnNmb3JtIGEgbWl4aW4gYXBwbGljYXRpb24gdG8gYmVjb21lIGEgcmVndWxhciBjbGFzcywgYW5kIHZpY2UgdmVyc2EuCkBjb3EKY2xhc3MgQ2xhc3MgZXh0ZW5kcyBOYW1lZE5vZGUgaW1wbGVtZW50cyBBbm5vdGF0YWJsZSwgRmlsZVVyaU5vZGUgewogIC8vLyBTdGFydCBvZmZzZXQgb2YgdGhlIGNsYXNzIGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyBhbm5vdGF0aW9ucyBpZiBhbnkuCiAgLy8vCiAgLy8vIFZhbGlkIHZhbHVlcyBhcmUgZnJvbSAwIGFuZCB1cCwgb3IgLTEgKFtUcmVlTm9kZS5ub09mZnNldF0pIGlmIHRoZSBmaWxlCiAgLy8vIHN0YXJ0IG9mZnNldCBpcyBub3QgYXZhaWxhYmxlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vbmUgaXMgc3BlY2lmaWNhbGx5CiAgLy8vIHNldCkuCiAgaW50IHN0YXJ0RmlsZU9mZnNldCA9IFRyZWVOb2RlLm5vT2Zmc2V0OwoKICAvLy8gRW5kIG9mZnNldCBpbiB0aGUgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4gVmFsaWQgdmFsdWVzIGFyZSBmcm9tIDAgYW5kCiAgLy8vIHVwLCBvciAtMSAoW1RyZWVOb2RlLm5vT2Zmc2V0XSkgaWYgdGhlIGZpbGUgZW5kIG9mZnNldCBpcyBub3QgYXZhaWxhYmxlCiAgLy8vICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vbmUgaXMgc3BlY2lmaWNhbGx5IHNldCkuCiAgaW50IGZpbGVFbmRPZmZzZXQgPSBUcmVlTm9kZS5ub09mZnNldDsKCiAgLy8vIFRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBjbGFzcyBoYXZlIGJlZW4gbG9hZGVkLgogIENsYXNzTGV2ZWwgbGV2ZWwgPSBDbGFzc0xldmVsLkJvZHk7CgogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGFubm90YXRpb25zIG9uIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gVGhpcyBkZWZhdWx0cyB0byBhbiBpbW11dGFibGUgZW1wdHkgbGlzdC4gVXNlIFthZGRBbm5vdGF0aW9uXSB0byBhZGQKICAvLy8gYW5ub3RhdGlvbnMgaWYgbmVlZGVkLgogIEBub2NvcQogIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSBjb25zdCA8RXhwcmVzc2lvbj5bXTsKCiAgLy8vIE5hbWUgb2YgdGhlIGNsYXNzLgogIC8vLwogIC8vLyBNdXN0IGJlIG5vbi1udWxsIGFuZCBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGxpYnJhcnkuCiAgLy8vCiAgLy8vIFRoZSBuYW1lIG1heSBjb250YWluIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHZhbGlkIGluIGEgRGFydCBpZGVudGlmaWVyLAogIC8vLyBpbiBwYXJ0aWN1bGFyLCB0aGUgc3ltYm9sICcmJyBpcyB1c2VkIGluIGNsYXNzIG5hbWVzIGdlbmVyYXRlZCBmb3IgbWl4aW4KICAvLy8gYXBwbGljYXRpb25zLgogIEBjb3EKICBTdHJpbmcgbmFtZTsKCiAgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBMZXZlbE1hc2sgPSAweDM7IC8vIEJpdHMgMCBhbmQgMS4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdBYnN0cmFjdCA9IDEgPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdFbnVtID0gMSA8PCAzOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0Fub255bW91c01peGluID0gMSA8PCA0OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0VsaW1pbmF0ZWRNaXhpbiA9IDEgPDwgNTsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdNaXhpbkRlY2xhcmF0aW9uID0gMSA8PCA2OwoKICBpbnQgZmxhZ3MgPSAwOwoKICBib29sIGdldCBpc0Fic3RyYWN0ID0+IGZsYWdzICYgRmxhZ0Fic3RyYWN0ICE9IDA7CgogIHZvaWQgc2V0IGlzQWJzdHJhY3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdBYnN0cmFjdCkgOiAoZmxhZ3MgJiB+RmxhZ0Fic3RyYWN0KTsKICB9CgogIC8vLyBXaGV0aGVyIHRoaXMgY2xhc3MgaXMgYW4gZW51bS4KICBib29sIGdldCBpc0VudW0gPT4gZmxhZ3MgJiBGbGFnRW51bSAhPSAwOwoKICB2b2lkIHNldCBpc0VudW0oYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdFbnVtKSA6IChmbGFncyAmIH5GbGFnRW51bSk7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGNsYXNzIGlzIGEgc3ludGhldGljIGltcGxlbWVudGF0aW9uIGNyZWF0ZWQgZm9yIGVhY2gKICAvLy8gbWl4ZWQtaW4gY2xhc3MuIEZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgY29kZToKICAvLy8gY2xhc3MgWiBleHRlbmRzIEEgd2l0aCBCLCBDLCBEIHt9CiAgLy8vIGNsYXNzIEEge30KICAvLy8gY2xhc3MgQiB7fQogIC8vLyBjbGFzcyBDIHt9CiAgLy8vIGNsYXNzIEQge30KICAvLy8gLi4uY3JlYXRlczoKICAvLy8gYWJzdHJhY3QgY2xhc3MgX1omQSZCIGV4dGVuZHMgQSBtaXhlZEluIEIge30KICAvLy8gYWJzdHJhY3QgY2xhc3MgX1omQSZCJkMgZXh0ZW5kcyBBJkIgbWl4ZWRJbiBDIHt9CiAgLy8vIGFic3RyYWN0IGNsYXNzIF9aJkEmQiZDJkQgZXh0ZW5kcyBBJkImQyBtaXhlZEluIEQge30KICAvLy8gY2xhc3MgWiBleHRlbmRzIF9aJkEmQiZDJkQge30KICAvLy8gQWxsIFgmWSBjbGFzc2VzIGFyZSBtYXJrZWQgYXMgc3ludGhldGljLgogIGJvb2wgZ2V0IGlzQW5vbnltb3VzTWl4aW4gPT4gZmxhZ3MgJiBGbGFnQW5vbnltb3VzTWl4aW4gIT0gMDsKCiAgdm9pZCBzZXQgaXNBbm9ueW1vdXNNaXhpbihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9CiAgICAgICAgdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQW5vbnltb3VzTWl4aW4pIDogKGZsYWdzICYgfkZsYWdBbm9ueW1vdXNNaXhpbik7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGNsYXNzIHdhcyB0cmFuc2Zvcm1lZCBmcm9tIGEgbWl4aW4gYXBwbGljYXRpb24uCiAgLy8vIEluIHN1Y2ggY2FzZSwgaXRzIG1peGVkLWluIHR5cGUgd2FzIHB1bGxlZCBpbnRvIHRoZSBlbmQgb2YgaW1wbGVtZW50ZWQKICAvLy8gdHlwZXMgbGlzdC4KICBib29sIGdldCBpc0VsaW1pbmF0ZWRNaXhpbiA9PiBmbGFncyAmIEZsYWdFbGltaW5hdGVkTWl4aW4gIT0gMDsKCiAgdm9pZCBzZXQgaXNFbGltaW5hdGVkTWl4aW4oYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPQogICAgICAgIHZhbHVlID8gKGZsYWdzIHwgRmxhZ0VsaW1pbmF0ZWRNaXhpbikgOiAoZmxhZ3MgJiB+RmxhZ0VsaW1pbmF0ZWRNaXhpbik7CiAgfQoKICAvLy8gVHJ1ZSBpZiB0aGlzIGNsYXNzIHdhcyBhIG1peGluIGRlY2xhcmF0aW9uIGluIERhcnQuCiAgLy8vCiAgLy8vIE1peGlucyBhcmUgZGVjbGFyZWQgaW4gRGFydCB3aXRoIHRoZSBgbWl4aW5gIGtleXdvcmQuICBUaGV5IGFyZSBjb21waWxlZAogIC8vLyB0byBLZXJuZWwgY2xhc3Nlcy4KICBib29sIGdldCBpc01peGluRGVjbGFyYXRpb24gPT4gZmxhZ3MgJiBGbGFnTWl4aW5EZWNsYXJhdGlvbiAhPSAwOwoKICB2b2lkIHNldCBpc01peGluRGVjbGFyYXRpb24oYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ01peGluRGVjbGFyYXRpb24pCiAgICAgICAgOiAoZmxhZ3MgJiB+RmxhZ01peGluRGVjbGFyYXRpb24pOwogIH0KCiAgTGlzdDxTdXBlcnR5cGU+IHN1cGVyY2xhc3NDb25zdHJhaW50cygpIHsKICAgIHZhciBjb25zdHJhaW50cyA9IDxTdXBlcnR5cGU+W107CgogICAgLy8gTm90IGEgbWl4aW4gZGVjbGFyYXRpb24uCiAgICBpZiAoIWlzTWl4aW5EZWNsYXJhdGlvbikgcmV0dXJuIGNvbnN0cmFpbnRzOwoKICAgIC8vIE90aGVyd2lzZSB3ZSBoYXZlIGEgbGVmdC1saW5lYXIgYmluYXJ5IHRyZWUgKHN1YnRyZWVzIGFyZSBzdXBlcnR5cGUgYW5kCiAgICAvLyBtaXhlZEluVHlwZSkgb2YgY29uc3RyYWludHMsIHdoZXJlIGFsbCB0aGUgaW50ZXJpb3Igbm9kZXMgYXJlIGFub255bW91cwogICAgLy8gbWl4aW4gYXBwbGljYXRpb25zLgogICAgU3VwZXJ0eXBlIGN1cnJlbnQgPSBzdXBlcnR5cGU7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsICYmIGN1cnJlbnQuY2xhc3NOb2RlLmlzQW5vbnltb3VzTWl4aW4pIHsKICAgICAgQ2xhc3MgY3VycmVudENsYXNzID0gY3VycmVudC5jbGFzc05vZGU7CiAgICAgIGFzc2VydChjdXJyZW50Q2xhc3MuaW1wbGVtZW50ZWRUeXBlcy5sZW5ndGggPT0gMik7CiAgICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZShjdXJyZW50KTsKICAgICAgY29uc3RyYWludHMuYWRkKAogICAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVTdXBlcnR5cGUoY3VycmVudENsYXNzLmltcGxlbWVudGVkVHlwZXNbMV0pKTsKICAgICAgY3VycmVudCA9CiAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVN1cGVydHlwZShjdXJyZW50Q2xhc3MuaW1wbGVtZW50ZWRUeXBlc1swXSk7CiAgICB9CiAgICByZXR1cm4gY29uc3RyYWludHMuLmFkZChjdXJyZW50KTsKICB9CgogIC8vLyBUaGUgVVJJIG9mIHRoZSBzb3VyY2UgZmlsZSB0aGlzIGNsYXNzIHdhcyBsb2FkZWQgZnJvbS4KICBVcmkgZmlsZVVyaTsKCiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKCiAgLy8vIFRoZSBpbW1lZGlhdGUgc3VwZXIgdHlwZSwgb3IgYG51bGxgIGlmIHRoaXMgaXMgdGhlIHJvb3QgY2xhc3MuCiAgU3VwZXJ0eXBlIHN1cGVydHlwZTsKCiAgLy8vIFRoZSBtaXhlZC1pbiB0eXBlIGlmIHRoaXMgaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiwgb3RoZXJ3aXNlIGBudWxsYC4KICBTdXBlcnR5cGUgbWl4ZWRJblR5cGU7CgogIC8vLyBUaGUgdHlwZXMgZnJvbSB0aGUgYGltcGxlbWVudHNgIGNsYXVzZS4KICBmaW5hbCBMaXN0PFN1cGVydHlwZT4gaW1wbGVtZW50ZWRUeXBlczsKCiAgLy8vIEZpZWxkcyBkZWNsYXJlZCBpbiB0aGUgY2xhc3MuCiAgLy8vCiAgLy8vIEZvciBtaXhpbiBhcHBsaWNhdGlvbnMgdGhpcyBzaG91bGQgYmUgZW1wdHkuCiAgZmluYWwgTGlzdDxGaWVsZD4gZmllbGRzOwoKICAvLy8gQ29uc3RydWN0b3JzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KICBmaW5hbCBMaXN0PENvbnN0cnVjdG9yPiBjb25zdHJ1Y3RvcnM7CgogIC8vLyBQcm9jZWR1cmVzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gRm9yIG1peGluIGFwcGxpY2F0aW9ucyB0aGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gZm9yd2FyZGluZyBzdHVicy4KICBmaW5hbCBMaXN0PFByb2NlZHVyZT4gcHJvY2VkdXJlczsKCiAgLy8vIFJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3JzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gRm9yIG1peGluIGFwcGxpY2F0aW9ucyB0aGlzIHNob3VsZCBiZSBlbXB0eS4KICBmaW5hbCBMaXN0PFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yPiByZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnM7CgogIENsYXNzKAogICAgICB7dGhpcy5uYW1lLAogICAgICBib29sIGlzQWJzdHJhY3Q6IGZhbHNlLAogICAgICBib29sIGlzQW5vbnltb3VzTWl4aW46IGZhbHNlLAogICAgICB0aGlzLnN1cGVydHlwZSwKICAgICAgdGhpcy5taXhlZEluVHlwZSwKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgTGlzdDxTdXBlcnR5cGU+IGltcGxlbWVudGVkVHlwZXMsCiAgICAgIExpc3Q8Q29uc3RydWN0b3I+IGNvbnN0cnVjdG9ycywKICAgICAgTGlzdDxQcm9jZWR1cmU+IHByb2NlZHVyZXMsCiAgICAgIExpc3Q8RmllbGQ+IGZpZWxkcywKICAgICAgTGlzdDxSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcj4gcmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLAogICAgICB0aGlzLmZpbGVVcmksCiAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2V9KQogICAgICA6IHRoaXMudHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycyA/PyA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICB0aGlzLmltcGxlbWVudGVkVHlwZXMgPSBpbXBsZW1lbnRlZFR5cGVzID8/IDxTdXBlcnR5cGU+W10sCiAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHMgPz8gPEZpZWxkPltdLAogICAgICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzID8/IDxDb25zdHJ1Y3Rvcj5bXSwKICAgICAgICB0aGlzLnByb2NlZHVyZXMgPSBwcm9jZWR1cmVzID8/IDxQcm9jZWR1cmU+W10sCiAgICAgICAgdGhpcy5yZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMgPQogICAgICAgICAgICByZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMgPz8gPFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yPltdLAogICAgICAgIHN1cGVyKHJlZmVyZW5jZSkgewogICAgc2V0UGFyZW50cyh0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5jb25zdHJ1Y3RvcnMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLnByb2NlZHVyZXMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLmZpZWxkcywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMucmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLCB0aGlzKTsKICAgIHRoaXMuaXNBYnN0cmFjdCA9IGlzQWJzdHJhY3Q7CiAgICB0aGlzLmlzQW5vbnltb3VzTWl4aW4gPSBpc0Fub255bW91c01peGluOwogIH0KCiAgdm9pZCBjb21wdXRlQ2Fub25pY2FsTmFtZXMoKSB7CiAgICBhc3NlcnQoY2Fub25pY2FsTmFtZSAhPSBudWxsKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgKytpKSB7CiAgICAgIEZpZWxkIG1lbWJlciA9IGZpZWxkc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZEZyb21NZW1iZXIobWVtYmVyKS5iaW5kVG8obWVtYmVyLnJlZmVyZW5jZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2NlZHVyZXMubGVuZ3RoOyArK2kpIHsKICAgICAgUHJvY2VkdXJlIG1lbWJlciA9IHByb2NlZHVyZXNbaV07CiAgICAgIGNhbm9uaWNhbE5hbWUuZ2V0Q2hpbGRGcm9tTWVtYmVyKG1lbWJlcikuYmluZFRvKG1lbWJlci5yZWZlcmVuY2UpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25zdHJ1Y3RvcnMubGVuZ3RoOyArK2kpIHsKICAgICAgQ29uc3RydWN0b3IgbWVtYmVyID0gY29uc3RydWN0b3JzW2ldOwogICAgICBjYW5vbmljYWxOYW1lLmdldENoaWxkRnJvbU1lbWJlcihtZW1iZXIpLmJpbmRUbyhtZW1iZXIucmVmZXJlbmNlKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLmxlbmd0aDsgKytpKSB7CiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG1lbWJlciA9IHJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZEZyb21NZW1iZXIobWVtYmVyKS5iaW5kVG8obWVtYmVyLnJlZmVyZW5jZSk7CiAgICB9CiAgfQoKICAvLy8gVGhlIGltbWVkaWF0ZSBzdXBlciBjbGFzcywgb3IgYG51bGxgIGlmIHRoaXMgaXMgdGhlIHJvb3QgY2xhc3MuCiAgQ2xhc3MgZ2V0IHN1cGVyY2xhc3MgPT4gc3VwZXJ0eXBlPy5jbGFzc05vZGU7CgogIC8vLyBUaGUgbWl4ZWQtaW4gY2xhc3MgaWYgdGhpcyBpcyBhIG1peGluIGFwcGxpY2F0aW9uLCBvdGhlcndpc2UgYG51bGxgLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBtYXkgaXRzZWxmIGJlIGEgbWl4aW4gYXBwbGljYXRpb24uICBVc2UgW21peGluXSB0byBnZXQgdGhlCiAgLy8vIGNsYXNzIHRoYXQgaGFzIHRoZSBmaWVsZHMgYW5kIHByb2NlZHVyZXMuCiAgQ2xhc3MgZ2V0IG1peGVkSW5DbGFzcyA9PiBtaXhlZEluVHlwZT8uY2xhc3NOb2RlOwoKICAvLy8gVGhlIGNsYXNzIHRoYXQgZGVjbGFyZXMgdGhlIGZpZWxkIGFuZCBwcm9jZWR1cmVzIG9mIHRoaXMgY2xhc3MuCiAgQ2xhc3MgZ2V0IG1peGluID0+IG1peGVkSW5DbGFzcz8ubWl4aW4gPz8gdGhpczsKCiAgYm9vbCBnZXQgaXNNaXhpbkFwcGxpY2F0aW9uID0+IG1peGVkSW5UeXBlICE9IG51bGw7CgogIFN0cmluZyBnZXQgZGVtYW5nbGVkTmFtZSB7CiAgICBpZiAoaXNBbm9ueW1vdXNNaXhpbikgcmV0dXJuIG5hbWVBc01peGluQXBwbGljYXRpb247CiAgICBhc3NlcnQoIW5hbWUuY29udGFpbnMoJyYnKSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIFN0cmluZyBnZXQgbmFtZUFzTWl4aW5BcHBsaWNhdGlvbiB7CiAgICBhc3NlcnQoaXNBbm9ueW1vdXNNaXhpbik7CiAgICByZXR1cm4gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICB9CgogIFN0cmluZyBnZXQgbmFtZUFzTWl4aW5BcHBsaWNhdGlvblN1YmNsYXNzIHsKICAgIGFzc2VydChpc0Fub255bW91c01peGluKTsKICAgIHJldHVybiBkZW1hbmdsZU1peGluQXBwbGljYXRpb25TdWJjbGFzc05hbWUobmFtZSk7CiAgfQoKICAvLy8gTWVtYmVycyBkZWNsYXJlZCBpbiB0aGlzIGNsYXNzLgogIC8vLwogIC8vLyBUaGlzIGdldHRlciBpcyBmb3IgY29udmVuaWVuY2UsIG5vdCBlZmZpY2llbmN5LiAgQ29uc2lkZXIgbWFudWFsbHkKICAvLy8gaXRlcmF0aW5nIHRoZSBtZW1iZXJzIHRvIHNwZWVkIHVwIGNvZGUgaW4gcHJvZHVjdGlvbi4KICBJdGVyYWJsZTxNZW1iZXI+IGdldCBtZW1iZXJzID0+IDxJdGVyYWJsZTxNZW1iZXI+PlsKICAgICAgICBmaWVsZHMsCiAgICAgICAgY29uc3RydWN0b3JzLAogICAgICAgIHByb2NlZHVyZXMsCiAgICAgICAgcmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzCiAgICAgIF0uZXhwYW5kKCh4KSA9PiB4KTsKCiAgLy8vIFRoZSBpbW1lZGlhdGVseSBleHRlbmRlZCwgbWl4ZWQtaW4sIGFuZCBpbXBsZW1lbnRlZCB0eXBlcy4KICAvLy8KICAvLy8gVGhpcyBnZXR0ZXIgaXMgZm9yIGNvbnZlbmllbmNlLCBub3QgZWZmaWNpZW5jeS4gIENvbnNpZGVyIG1hbnVhbGx5CiAgLy8vIGl0ZXJhdGluZyB0aGUgc3VwZXIgdHlwZXMgdG8gc3BlZWQgdXAgY29kZSBpbiBwcm9kdWN0aW9uLgogIEl0ZXJhYmxlPFN1cGVydHlwZT4gZ2V0IHN1cGVycyA9PiA8SXRlcmFibGU8U3VwZXJ0eXBlPj5bCiAgICAgICAgc3VwZXJ0eXBlID09IG51bGwgPyBjb25zdCBbXSA6IFtzdXBlcnR5cGVdLAogICAgICAgIG1peGVkSW5UeXBlID09IG51bGwgPyBjb25zdCBbXSA6IFttaXhlZEluVHlwZV0sCiAgICAgICAgaW1wbGVtZW50ZWRUeXBlcwogICAgICBdLmV4cGFuZCgoeCkgPT4geCk7CgogIC8vLyBUaGUgbGlicmFyeSBjb250YWluaW5nIHRoaXMgY2xhc3MuCiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQ7CgogIC8vLyBBZGRzIGEgbWVtYmVyIHRvIHRoaXMgY2xhc3MuCiAgLy8vCiAgLy8vIFRocm93cyBhbiBlcnJvciBpZiBhdHRlbXB0aW5nIHRvIGFkZCBhIGZpZWxkIG9yIHByb2NlZHVyZSB0byBhIG1peGluCiAgLy8vIGFwcGxpY2F0aW9uLgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIG1lbWJlci5wYXJlbnQgPSB0aGlzOwogICAgaWYgKG1lbWJlciBpcyBDb25zdHJ1Y3RvcikgewogICAgICBjb25zdHJ1Y3RvcnMuYWRkKG1lbWJlcik7CiAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgcHJvY2VkdXJlcy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIGZpZWxkcy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKSB7CiAgICAgIHJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKG1lbWJlcik7CiAgICB9CiAgfQoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgewogICAgICBhbm5vdGF0aW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgfQogICAgYW5ub3RhdGlvbnMuYWRkKG5vZGUpOwogICAgbm9kZS5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRDbGFzcyh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0Q2xhc3NSZWZlcmVuY2UodGhpcyk7CgogIC8vLyBJZiB0cnVlLCB0aGUgY2xhc3MgaXMgcGFydCBvZiBhbiBleHRlcm5hbCBsaWJyYXJ5LCB0aGF0IGlzLCBpdCBpcyBkZWZpbmVkCiAgLy8vIGluIGFub3RoZXIgYnVpbGQgdW5pdC4gIE9ubHkgYSBzdWJzZXQgb2YgaXRzIG1lbWJlcnMgYXJlIHByZXNlbnQuCiAgLy8vCiAgLy8vIFRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIGxvYWRlZCBhdCBlaXRoZXIgW0NsYXNzTGV2ZWwuVHlwZV0gb3IKICAvLy8gW0NsYXNzTGV2ZWwuSGllcmFyY2h5XSBsZXZlbC4KICBib29sIGdldCBpc0luRXh0ZXJuYWxMaWJyYXJ5ID0+IGVuY2xvc2luZ0xpYnJhcnkuaXNFeHRlcm5hbDsKCiAgU3VwZXJ0eXBlIGdldCBhc1Jhd1N1cGVydHlwZSB7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZSh0aGlzLAogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQodHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBEeW5hbWljVHlwZSgpKSk7CiAgfQoKICBTdXBlcnR5cGUgZ2V0IGFzVGhpc1N1cGVydHlwZSB7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZSh0aGlzLCBfZ2V0QXNUeXBlQXJndW1lbnRzKHR5cGVQYXJhbWV0ZXJzKSk7CiAgfQoKICBAbm9jb3EKICBJbnRlcmZhY2VUeXBlIF9yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHJhd1R5cGUgPT4gX3Jhd1R5cGUgPz89IG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMpOwoKICBAbm9jb3EKICBJbnRlcmZhY2VUeXBlIF90aGlzVHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCB0aGlzVHlwZSB7CiAgICByZXR1cm4gX3RoaXNUeXBlID8/PQogICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMsIF9nZXRBc1R5cGVBcmd1bWVudHModHlwZVBhcmFtZXRlcnMpKTsKICB9CgogIEBub2NvcQogIEludGVyZmFjZVR5cGUgX2JvdHRvbVR5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgYm90dG9tVHlwZSB7CiAgICByZXR1cm4gX2JvdHRvbVR5cGUgPz89IG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMsCiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCh0eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IEJvdHRvbVR5cGUoKSkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBwb3NzaWJseSBzeW50aGVzaXplZCBuYW1lIGZvciB0aGlzIGNsYXNzLCBjb25zaXN0ZW50IHdpdGgKICAvLy8gdGhlIG5hbWVzIHVzZWQgYWNyb3NzIGFsbCBbdG9TdHJpbmddIGNhbGxzLgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGFubm90YXRpb25zLCB2KTsKICAgIHZpc2l0TGlzdCh0eXBlUGFyYW1ldGVycywgdik7CiAgICBzdXBlcnR5cGU/LmFjY2VwdCh2KTsKICAgIG1peGVkSW5UeXBlPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QoaW1wbGVtZW50ZWRUeXBlcywgdik7CiAgICB2aXNpdExpc3QoY29uc3RydWN0b3JzLCB2KTsKICAgIHZpc2l0TGlzdChwcm9jZWR1cmVzLCB2KTsKICAgIHZpc2l0TGlzdChmaWVsZHMsIHYpOwogICAgdmlzaXRMaXN0KHJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QodHlwZVBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIHN1cGVydHlwZSA9IHYudmlzaXRTdXBlcnR5cGUoc3VwZXJ0eXBlKTsKICAgIH0KICAgIGlmIChtaXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIG1peGVkSW5UeXBlID0gdi52aXNpdFN1cGVydHlwZShtaXhlZEluVHlwZSk7CiAgICB9CiAgICB0cmFuc2Zvcm1TdXBlcnR5cGVMaXN0KGltcGxlbWVudGVkVHlwZXMsIHYpOwogICAgdHJhbnNmb3JtTGlzdChjb25zdHJ1Y3RvcnMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChwcm9jZWR1cmVzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoZmllbGRzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QocmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLCB2LCB0aGlzKTsKICB9CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIERlY2xhcmF0aW9uIG9mIGFuIGV4dGVuc2lvbi4KLy8vCi8vLyBUaGUgbWVtYmVycyBhcmUgY29udmVydGVkIGludG8gdG9wLWxldmVsIHByb2NlZHVyZXMgYW5kIG9ubHkgYWNjZXNzaWJsZQovLy8gYnkgcmVmZXJlbmNlIGluIHRoZSBbRXh0ZW5zaW9uXSBub2RlLgpjbGFzcyBFeHRlbnNpb24gZXh0ZW5kcyBOYW1lZE5vZGUgaW1wbGVtZW50cyBGaWxlVXJpTm9kZSB7CiAgLy8vIE5hbWUgb2YgdGhlIGV4dGVuc2lvbi4KICAvLy8KICAvLy8gSWYgdW5uYW1lZCwgdGhlIGV4dGVuc2lvbiB3aWxsIGJlIGdpdmVuIGEgc3ludGhlc2l6ZWQgbmFtZSBieSB0aGUKICAvLy8gZnJvbnQgZW5kLgogIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIFVSSSBvZiB0aGUgc291cmNlIGZpbGUgdGhpcyBjbGFzcyB3YXMgbG9hZGVkIGZyb20uCiAgVXJpIGZpbGVVcmk7CgogIC8vLyBUeXBlIHBhcmFtZXRlcnMgZGVjbGFyZWQgb24gdGhlIGV4dGVuc2lvbi4KICBmaW5hbCBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzOwoKICAvLy8gVGhlIHR5cGUgaW4gdGhlICdvbiBjbGF1c2UnIG9mIHRoZSBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBBIGluOgogIC8vLwogIC8vLyAgIGNsYXNzIEEge30KICAvLy8gICBleHRlbnNpb24gQiBvbiBBIHt9CiAgLy8vCiAgRGFydFR5cGUgb25UeXBlOwoKICAvLy8gVGhlIG1lbWJlcnMgZGVjbGFyZWQgYnkgdGhlIGV4dGVuc2lvbi4KICAvLy8KICAvLy8gVGhlIG1lbWJlcnMgYXJlIGNvbnZlcnRlZCBpbnRvIHRvcC1sZXZlbCBtZW1iZXJzIGFuZCBvbmx5IGFjY2Vzc2libGUKICAvLy8gYnkgcmVmZXJlbmNlIHRocm91Z2ggW0V4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3JdLgogIGZpbmFsIExpc3Q8RXh0ZW5zaW9uTWVtYmVyRGVzY3JpcHRvcj4gbWVtYmVyczsKCiAgRXh0ZW5zaW9uKAogICAgICB7dGhpcy5uYW1lLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICB0aGlzLm9uVHlwZSwKICAgICAgTGlzdDxSZWZlcmVuY2U+IG1lbWJlcnMsCiAgICAgIHRoaXMuZmlsZVVyaSwKICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZX0pCiAgICAgIDogdGhpcy50eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzID8/IDxUeXBlUGFyYW1ldGVyPltdLAogICAgICAgIHRoaXMubWVtYmVycyA9IG1lbWJlcnMgPz8gPEV4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3I+W10sCiAgICAgICAgc3VwZXIocmVmZXJlbmNlKTsKCiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQ7CgogIEBvdmVycmlkZQogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0RXh0ZW5zaW9uKHRoaXMpOwoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgPT4gdi52aXNpdEV4dGVuc2lvbih0aGlzKTsKfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGFuIG1lbWJlciBkZWNsYXJhdGlvbiBpbiBhbiBleHRlbnNpb24uCmNsYXNzIEV4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3IgewogIC8vLyBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIG1lbWJlci4KICAvLy8KICAvLy8gVGhlIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCB0b3AtbGV2ZWwgbWVtYmVyIGlzIG1hbmdsZWQgdG8gZW5zdXJlCiAgLy8vIHVuaXF1ZW5lc3MuIFRoaXMgbmFtZSBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleHRlbnNpb24gbWV0aG9kIHRoZQogIC8vLyBleHRlbnNpb24gaXRzZWxmLgogIE5hbWUgbmFtZTsKCiAgLy8vIFtQcm9jZWR1cmVLaW5kXSBraW5kIG9mIHRoZSBvcmlnaW5hbCBtZW1iZXIsIGlmIHRoZSBleHRlbnNpb24gaXMgYQogIC8vLyBbUHJvY2VkdXJlXSBhbmQgYG51bGxgIG90aGVyd2lzZS4KICAvLy8KICAvLy8gVGhpcyBjYW4gYmUgZWl0aGVyIGBNZXRob2RgLCBgR2V0dGVyYCwgYFNldHRlcmAsIG9yIGBPcGVyYXRvcmAuCiAgLy8vCiAgLy8vIEFuIGV4dGVuc2lvbiBtZXRob2QgaXMgY29udmVydGVkIGludG8gYSByZWd1bGFyIHRvcC1sZXZlbCBtZXRob2QuIEZvcgogIC8vLyBpbnN0YW5jZToKICAvLy8KICAvLy8gICAgIGNsYXNzIEEgewogIC8vLyAgICAgICB2YXIgZm9vOwogIC8vLyAgICAgfQogIC8vLyAgICAgZXh0ZW5zaW9uIEIgb24gQSB7CiAgLy8vICAgICAgIGdldCBiYXIgPT4gdGhpcy5mb287CiAgLy8vICAgICB9CiAgLy8vCiAgLy8vIHdpbGwgYmUgY29udmVydGVkIGludG8KICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIEJ8Z2V0I2JhcihBICN0aGlzKSA9PiAjdGhpcy5mb287CiAgLy8vCiAgLy8vIHdoZXJlIGBCfGdldCNiYXJgIGlzIHRoZSBzeW50aGVzaXplZCBuYW1lIG9mIHRoZSB0b3AtbGV2ZWwgbWV0aG9kIGFuZAogIC8vLyBgI3RoaXNgIGlzIHRoZSBzeW50aGVzaXplZCBwYXJhbWV0ZXIgdGhhdCBob2xkcyByZXByZXNlbnRzIGB0aGlzYC4KICAvLy8KICBQcm9jZWR1cmVLaW5kIGtpbmQ7CgogIGludCBmbGFncyA9IDA7CgogIC8vLyBSZWZlcmVuY2UgdG8gdGhlIHRvcC1sZXZlbCBtZW1iZXIgY3JlYXRlZCBmb3IgdGhlIGV4dGVuc2lvbiBtZXRob2QuCiAgUmVmZXJlbmNlIG1lbWJlcjsKCiAgRXh0ZW5zaW9uTWVtYmVyRGVzY3JpcHRvcigKICAgICAge3RoaXMubmFtZSwKICAgICAgdGhpcy5raW5kLAogICAgICBib29sIGlzU3RhdGljOiBmYWxzZSwKICAgICAgYm9vbCBpc0V4dGVybmFsOiBmYWxzZSwKICAgICAgdGhpcy5tZW1iZXJ9KSB7CiAgICB0aGlzLmlzU3RhdGljID0gaXNTdGF0aWM7CiAgICB0aGlzLmlzRXh0ZXJuYWwgPSBpc0V4dGVybmFsOwogIH0KCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgdGhlIGV4dGVuc2lvbiBtZXRob2Qgd2FzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLgogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZsYWdzICYgUHJvY2VkdXJlLkZsYWdTdGF0aWMgIT0gMDsKCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgdGhlIGV4dGVuc2lvbiBtZXRob2Qgd2FzIGRlY2xhcmVkIGFzIGBleHRlcm5hbGAuCiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiBmbGFncyAmIFByb2NlZHVyZS5GbGFnRXh0ZXJuYWwgIT0gMDsKCiAgdm9pZCBzZXQgaXNTdGF0aWMoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgUHJvY2VkdXJlLkZsYWdTdGF0aWMpCiAgICAgICAgOiAoZmxhZ3MgJiB+UHJvY2VkdXJlLkZsYWdTdGF0aWMpOwogIH0KCiAgdm9pZCBzZXQgaXNFeHRlcm5hbChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlCiAgICAgICAgPyAoZmxhZ3MgfCBQcm9jZWR1cmUuRmxhZ0V4dGVybmFsKQogICAgICAgIDogKGZsYWdzICYgflByb2NlZHVyZS5GbGFnRXh0ZXJuYWwpOwogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTUJFUlMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpAY29xCmFic3RyYWN0IGNsYXNzIE1lbWJlciBleHRlbmRzIE5hbWVkTm9kZSBpbXBsZW1lbnRzIEFubm90YXRhYmxlLCBGaWxlVXJpTm9kZSB7CiAgLy8vIEVuZCBvZmZzZXQgaW4gdGhlIHNvdXJjZSBmaWxlIGl0IGNvbWVzIGZyb20uCiAgLy8vCiAgLy8vIFZhbGlkIHZhbHVlcyBhcmUgZnJvbSAwIGFuZCB1cCwgb3IgLTEgKFtUcmVlTm9kZS5ub09mZnNldF0pIGlmIHRoZSBmaWxlCiAgLy8vIGVuZCBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseQogIC8vLyBzZXQpLgogIGludCBmaWxlRW5kT2Zmc2V0ID0gVHJlZU5vZGUubm9PZmZzZXQ7CgogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGFubm90YXRpb25zIG9uIHRoZSBtZW1iZXIuCiAgLy8vCiAgLy8vIFRoaXMgZGVmYXVsdHMgdG8gYW4gaW1tdXRhYmxlIGVtcHR5IGxpc3QuIFVzZSBbYWRkQW5ub3RhdGlvbl0gdG8gYWRkCiAgLy8vIGFubm90YXRpb25zIGlmIG5lZWRlZC4KICBAbm9jb3EKICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gY29uc3QgPEV4cHJlc3Npb24+W107CgogIE5hbWUgbmFtZTsKCiAgLy8vIFRoZSBVUkkgb2YgdGhlIHNvdXJjZSBmaWxlIHRoaXMgbWVtYmVyIHdhcyBsb2FkZWQgZnJvbS4KICBVcmkgZmlsZVVyaTsKCiAgLy8vIEZsYWdzIHN1bW1hcml6aW5nIHRoZSBraW5kcyBvZiBBU1Qgbm9kZXMgY29udGFpbmVkIGluIHRoaXMgbWVtYmVyLCBmb3IKICAvLy8gc3BlZWRpbmcgdXAgdHJhbnNmb3JtYXRpb25zIHRoYXQgb25seSBhZmZlY3QgY2VydGFpbiB0eXBlcyBvZiBub2Rlcy4KICAvLy8KICAvLy8gU2VlIFtUcmFuc2Zvcm1lckZsYWddIGZvciB0aGUgbWVhbmluZyBvZiBlYWNoIGJpdC4KICAvLy8KICAvLy8gVGhlc2Ugc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBhbnkgcHVycG9zZSBvdGhlciB0aGFuIHNraXBwaW5nIGNlcnRhaW4KICAvLy8gbWVtYmVycyBpZiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCB0aGF0IG5vIHdvcmsgaXMgbmVlZGVkIGluIHRoZXJlLgogIC8vLwogIC8vLyBJdCBpcyB2YWxpZCBmb3IgdGhlc2UgZmxhZ3MgdG8gYmUgZmFsc2UgcG9zaXRpdmVzIGluIHJhcmUgY2FzZXMsIHNvCiAgLy8vIHRyYW5zZm9ybWVycyBtdXN0IHRvbGVyYXRlIHRoZSBjYXNlIHdoZXJlIGEgZmxhZyBpcyBzcHVyaW91c2x5IHNldC4KICAvLy8KICAvLy8gVGhpcyB2YWx1ZSBpcyBub3Qgc2VyaWFsaXplZDsgaXQgaXMgcG9wdWxhdGVkIGJ5IHRoZSBmcm9udGVuZCBhbmQgdGhlCiAgLy8vIGRlc2VyaWFsaXplci4KICAvLwogIC8vIFRPRE8oYXNnZXJmKTogSXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byBwdXQgdGhpcyBvbiBjbGFzc2VzIGFzIHdlbGwuCiAgaW50IHRyYW5zZm9ybWVyRmxhZ3MgPSAwOwoKICBNZW1iZXIodGhpcy5uYW1lLCB0aGlzLmZpbGVVcmksIFJlZmVyZW5jZSByZWZlcmVuY2UpIDogc3VwZXIocmVmZXJlbmNlKTsKCiAgQ2xhc3MgZ2V0IGVuY2xvc2luZ0NsYXNzID0+IHBhcmVudCBpcyBDbGFzcyA/IHBhcmVudCA6IG51bGw7CiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQgaXMgQ2xhc3MgPyBwYXJlbnQucGFyZW50IDogcGFyZW50OwoKICBhY2NlcHQoTWVtYmVyVmlzaXRvciB2KTsKICBhY2NlcHRSZWZlcmVuY2UoTWVtYmVyUmVmZXJlbmNlVmlzaXRvciB2KTsKCiAgLy8vIElmIHRydWUsIHRoZSBtZW1iZXIgaXMgcGFydCBvZiBhbiBleHRlcm5hbCBsaWJyYXJ5LCB0aGF0IGlzLCBpdCBpcyBkZWZpbmVkCiAgLy8vIGluIGFub3RoZXIgYnVpbGQgdW5pdC4gIFN1Y2ggbWVtYmVycyBoYXZlIG5vIGJvZHkgb3IgaW5pdGlhbGl6ZXIgcHJlc2VudAogIC8vLyBpbiB0aGUgSVIuCiAgYm9vbCBnZXQgaXNJbkV4dGVybmFsTGlicmFyeSA9PiBlbmNsb3NpbmdMaWJyYXJ5LmlzRXh0ZXJuYWw7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhbiBhYnN0cmFjdCBwcm9jZWR1cmUuCiAgYm9vbCBnZXQgaXNBYnN0cmFjdCA9PiBmYWxzZTsKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVtYmVyIGhhcyB0aGUgJ2NvbnN0JyBtb2RpZmllci4KICBib29sIGdldCBpc0NvbnN0OwoKICAvLy8gVHJ1ZSBpZiB0aGlzIGlzIGEgZmllbGQgb3Igbm9uLXNldHRlciBwcm9jZWR1cmUuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBvcGVyYXRvcnMgYW5kIGZhY3RvcmllcyByZXR1cm4gYHRydWVgLCBldmVuIHRob3VnaCB0aGVyZSBhcmUKICAvLy8gbm9ybWFsbHkgbm8gY2FsbHMgdG8gdGhlaXIgZ2V0dGVyLgogIGJvb2wgZ2V0IGhhc0dldHRlcjsKCiAgLy8vIFRydWUgaWYgdGhpcyBpcyBhIHNldHRlciBvciBhIG11dGFibGUgZmllbGQuCiAgYm9vbCBnZXQgaGFzU2V0dGVyOwoKICAvLy8gVHJ1ZSBpZiB0aGlzIGlzIGEgbm9uLXN0YXRpYyBmaWVsZCBvciBwcm9jZWR1cmUuCiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlcjsKCiAgLy8vIFRydWUgaWYgdGhlIG1lbWJlciBoYXMgdGhlIGBleHRlcm5hbGAgbW9kaWZpZXIsIGltcGx5aW5nIHRoYXQgdGhlCiAgLy8vIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kLCBhbmQgaXMgbm90IG5lY2Vzc2FyaWx5IHdyaXR0ZW4KICAvLy8gaW4gRGFydC4KICAvLy8KICAvLy8gTWVtYmVycyBjYW4gaGF2ZSB0aGlzIG1vZGlmaWVyIGluZGVwZW5kZW50bHkgb2Ygd2hldGhlciB0aGUgZW5jbG9zaW5nCiAgLy8vIGxpYnJhcnkgaXMgZXh0ZXJuYWwuCiAgYm9vbCBnZXQgaXNFeHRlcm5hbDsKICB2b2lkIHNldCBpc0V4dGVybmFsKGJvb2wgdmFsdWUpOwoKICAvLy8gSWYgYHRydWVgIHRoaXMgbWVtYmVyIGlzIGNvbXBpbGVkIGZyb20gYSBtZW1iZXIgZGVjbGFyZWQgaW4gYW4gZXh0ZW5zaW9uCiAgLy8vIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYGZpZWxkYCwgYG1ldGhvZDFgIGFuZCBgbWV0aG9kMmAgaW46CiAgLy8vCiAgLy8vICAgICBleHRlbnNpb24gQSBvbiBCIHsKICAvLy8gICAgICAgc3RhdGljIHZhciBmaWVsZDsKICAvLy8gICAgICAgQiBtZXRob2QxKCkgPT4gdGhpczsKICAvLy8gICAgICAgc3RhdGljIEIgbWV0aG9kMigpID0+IG5ldyBCKCk7CiAgLy8vICAgICB9CiAgLy8vCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXI7CgogIC8vLyBUaGUgYm9keSBvZiB0aGUgcHJvY2VkdXJlIG9yIGNvbnN0cnVjdG9yLCBvciBgbnVsbGAgaWYgdGhpcyBpcyBhIGZpZWxkLgogIEZ1bmN0aW9uTm9kZSBnZXQgZnVuY3Rpb24gPT4gbnVsbDsKCiAgLy8vIFJldHVybnMgYSBwb3NzaWJseSBzeW50aGVzaXplZCBuYW1lIGZvciB0aGlzIG1lbWJlciwgY29uc2lzdGVudCB3aXRoCiAgLy8vIHRoZSBuYW1lcyB1c2VkIGFjcm9zcyBhbGwgW3RvU3RyaW5nXSBjYWxscy4KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBkZWJ1Z1F1YWxpZmllZE1lbWJlck5hbWUodGhpcyk7CgogIHZvaWQgYWRkQW5ub3RhdGlvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChhbm5vdGF0aW9ucy5pc0VtcHR5KSB7CiAgICAgIGFubm90YXRpb25zID0gPEV4cHJlc3Npb24+W107CiAgICB9CiAgICBhbm5vdGF0aW9ucy5hZGQobm9kZSk7CiAgICBub2RlLnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXQgZ2V0dGVyVHlwZTsKICBEYXJ0VHlwZSBnZXQgc2V0dGVyVHlwZTsKCiAgYm9vbCBnZXQgY29udGFpbnNTdXBlckNhbGxzIHsKICAgIHJldHVybiB0cmFuc2Zvcm1lckZsYWdzICYgVHJhbnNmb3JtZXJGbGFnLnN1cGVyQ2FsbHMgIT0gMDsKICB9Cn0KCi8vLyBBIGZpZWxkIGRlY2xhcmF0aW9uLgovLy8KLy8vIFRoZSBpbXBsaWVkIGdldHRlciBhbmQgc2V0dGVyIGZvciB0aGUgZmllbGQgYXJlIG5vdCByZXByZXNlbnRlZCBleHBsaWNpdGx5LAovLy8gYnV0IGNhbiBiZSBtYWRlIGV4cGxpY2l0IGlmIG5lZWRlZC4KY2xhc3MgRmllbGQgZXh0ZW5kcyBNZW1iZXIgewogIERhcnRUeXBlIHR5cGU7IC8vIE5vdCBudWxsLiBEZWZhdWx0cyB0byBEeW5hbWljVHlwZS4KICBpbnQgZmxhZ3MgPSAwOwogIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXI7IC8vIE1heSBiZSBudWxsLgoKICBGaWVsZChOYW1lIG5hbWUsCiAgICAgIHt0aGlzLnR5cGU6IGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgIHRoaXMuaW5pdGlhbGl6ZXIsCiAgICAgIGJvb2wgaXNDb3ZhcmlhbnQ6IGZhbHNlLAogICAgICBib29sIGlzRmluYWw6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzU3RhdGljOiBmYWxzZSwKICAgICAgYm9vbCBoYXNJbXBsaWNpdEdldHRlciwKICAgICAgYm9vbCBoYXNJbXBsaWNpdFNldHRlciwKICAgICAgYm9vbCBpc0xhdGU6IGZhbHNlLAogICAgICBpbnQgdHJhbnNmb3JtZXJGbGFnczogMCwKICAgICAgVXJpIGZpbGVVcmksCiAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2V9KQogICAgICA6IHN1cGVyKG5hbWUsIGZpbGVVcmksIHJlZmVyZW5jZSkgewogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCk7CiAgICBpbml0aWFsaXplcj8ucGFyZW50ID0gdGhpczsKICAgIHRoaXMuaXNDb3ZhcmlhbnQgPSBpc0NvdmFyaWFudDsKICAgIHRoaXMuaXNGaW5hbCA9IGlzRmluYWw7CiAgICB0aGlzLmlzQ29uc3QgPSBpc0NvbnN0OwogICAgdGhpcy5pc1N0YXRpYyA9IGlzU3RhdGljOwogICAgdGhpcy5pc0xhdGUgPSBpc0xhdGU7CiAgICB0aGlzLmhhc0ltcGxpY2l0R2V0dGVyID0gaGFzSW1wbGljaXRHZXR0ZXIgPz8gIWlzU3RhdGljOwogICAgdGhpcy5oYXNJbXBsaWNpdFNldHRlciA9IGhhc0ltcGxpY2l0U2V0dGVyID8/ICghaXNTdGF0aWMgJiYgIWlzRmluYWwpOwogICAgdGhpcy50cmFuc2Zvcm1lckZsYWdzID0gdHJhbnNmb3JtZXJGbGFnczsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0ZpbmFsID0gMSA8PCAwOyAvLyBNdXN0IG1hdGNoIHNlcmlhbGl6ZWQgYml0IHBvc2l0aW9ucy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdDb25zdCA9IDEgPDwgMTsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdTdGF0aWMgPSAxIDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnSGFzSW1wbGljaXRHZXR0ZXIgPSAxIDw8IDM7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnSGFzSW1wbGljaXRTZXR0ZXIgPSAxIDw8IDQ7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ292YXJpYW50ID0gMSA8PCA1OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gMSA8PCA2OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0xhdGUgPSAxIDw8IDc7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnRXh0ZW5zaW9uTWVtYmVyID0gMSA8PCA4OwoKICAvLy8gV2hldGhlciB0aGUgZmllbGQgaXMgZGVjbGFyZWQgd2l0aCB0aGUgYGNvdmFyaWFudGAga2V5d29yZC4KICBib29sIGdldCBpc0NvdmFyaWFudCA9PiBmbGFncyAmIEZsYWdDb3ZhcmlhbnQgIT0gMDsKCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiBmbGFncyAmIEZsYWdGaW5hbCAhPSAwOwogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmxhZ3MgJiBGbGFnQ29uc3QgIT0gMDsKICBib29sIGdldCBpc1N0YXRpYyA9PiBmbGFncyAmIEZsYWdTdGF0aWMgIT0gMDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXIgPT4gZmxhZ3MgJiBGbGFnRXh0ZW5zaW9uTWVtYmVyICE9IDA7CgogIC8vLyBJZiB0cnVlLCBhIGdldHRlciBzaG91bGQgYmUgZ2VuZXJhdGVkIGZvciB0aGlzIGZpZWxkLgogIC8vLwogIC8vLyBJZiBmYWxzZSwgdGhlcmUgbWF5IG9yIG1heSBub3QgZXhpc3QgYW4gZXhwbGljaXQgZ2V0dGVyIGluIHRoZSBzYW1lIGNsYXNzCiAgLy8vIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZmllbGQuCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQsIGFsbCBub24tc3RhdGljIGZpZWxkcyBoYXZlIGltcGxpY2l0IGdldHRlcnMuCiAgYm9vbCBnZXQgaGFzSW1wbGljaXRHZXR0ZXIgPT4gZmxhZ3MgJiBGbGFnSGFzSW1wbGljaXRHZXR0ZXIgIT0gMDsKCiAgLy8vIElmIHRydWUsIGEgc2V0dGVyIHNob3VsZCBiZSBnZW5lcmF0ZWQgZm9yIHRoaXMgZmllbGQuCiAgLy8vCiAgLy8vIElmIGZhbHNlLCB0aGVyZSBtYXkgb3IgbWF5IG5vdCBleGlzdCBhbiBleHBsaWNpdCBzZXR0ZXIgaW4gdGhlIHNhbWUgY2xhc3MKICAvLy8gd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBmaWVsZC4KICAvLy8KICAvLy8gRmluYWwgZmllbGRzIG5ldmVyIGhhdmUgaW1wbGljaXQgc2V0dGVycywgYnV0IGEgZmllbGQgd2l0aG91dCBhbiBpbXBsaWNpdAogIC8vLyBzZXR0ZXIgaXMgbm90IG5lY2Vzc2FyaWx5IGZpbmFsLCBhcyBpdCBtYXkgYmUgbXV0YXRlZCBieSBkaXJlY3QgZmllbGQKICAvLy8gYWNjZXNzLgogIC8vLwogIC8vLyBCeSBkZWZhdWx0LCBhbGwgbm9uLXN0YXRpYywgbm9uLWZpbmFsIGZpZWxkcyBoYXZlIGltcGxpY2l0IHNldHRlcnMuCiAgYm9vbCBnZXQgaGFzSW1wbGljaXRTZXR0ZXIgPT4gZmxhZ3MgJiBGbGFnSGFzSW1wbGljaXRTZXR0ZXIgIT0gMDsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbXBsaWNpdCBzZXR0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmllbGQgbmVlZHMgdG8KICAvLy8gY29udGFpbiBhIHJ1bnRpbWUgdHlwZSBjaGVjayB0byBkZWFsIHdpdGggZ2VuZXJpYyBjb3ZhcmlhbmNlLgogIC8vLwogIC8vLyBXaGVuIGB0cnVlYCwgcnVudGltZSBjaGVja3MgbWF5IG5lZWQgdG8gYmUgcGVyZm9ybWVkOyBzZWUKICAvLy8gW0Rpc3BhdGNoQ2F0ZWdvcnldIGZvciBkZXRhaWxzLgogIGJvb2wgZ2V0IGlzR2VuZXJpY0NvdmFyaWFudEltcGwgPT4gZmxhZ3MgJiBGbGFnR2VuZXJpY0NvdmFyaWFudEltcGwgIT0gMDsKCiAgLy8vIFdoZXRoZXIgdGhlIGZpZWxkIGlzIGRlY2xhcmVkIHdpdGggdGhlIGBsYXRlYCBrZXl3b3JkLgogIGJvb2wgZ2V0IGlzTGF0ZSA9PiBmbGFncyAmIEZsYWdMYXRlICE9IDA7CgogIHZvaWQgc2V0IGlzQ292YXJpYW50KGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQ292YXJpYW50KSA6IChmbGFncyAmIH5GbGFnQ292YXJpYW50KTsKICB9CgogIHZvaWQgc2V0IGlzRmluYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdGaW5hbCkgOiAoZmxhZ3MgJiB+RmxhZ0ZpbmFsKTsKICB9CgogIHZvaWQgc2V0IGlzQ29uc3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdDb25zdCkgOiAoZmxhZ3MgJiB+RmxhZ0NvbnN0KTsKICB9CgogIHZvaWQgc2V0IGlzU3RhdGljKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnU3RhdGljKSA6IChmbGFncyAmIH5GbGFnU3RhdGljKTsKICB9CgogIHZvaWQgc2V0IGlzRXh0ZW5zaW9uTWVtYmVyKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0KICAgICAgICB2YWx1ZSA/IChmbGFncyB8IEZsYWdFeHRlbnNpb25NZW1iZXIpIDogKGZsYWdzICYgfkZsYWdFeHRlbnNpb25NZW1iZXIpOwogIH0KCiAgdm9pZCBzZXQgaGFzSW1wbGljaXRHZXR0ZXIoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ0hhc0ltcGxpY2l0R2V0dGVyKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdIYXNJbXBsaWNpdEdldHRlcik7CiAgfQoKICB2b2lkIHNldCBoYXNJbXBsaWNpdFNldHRlcihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlCiAgICAgICAgPyAoZmxhZ3MgfCBGbGFnSGFzSW1wbGljaXRTZXR0ZXIpCiAgICAgICAgOiAoZmxhZ3MgJiB+RmxhZ0hhc0ltcGxpY2l0U2V0dGVyKTsKICB9CgogIHZvaWQgc2V0IGlzR2VuZXJpY0NvdmFyaWFudEltcGwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdHZW5lcmljQ292YXJpYW50SW1wbCk7CiAgfQoKICB2b2lkIHNldCBpc0xhdGUoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdMYXRlKSA6IChmbGFncyAmIH5GbGFnTGF0ZSk7CiAgfQoKICAvLy8gVHJ1ZSBpZiB0aGUgZmllbGQgaXMgbmVpdGhlciBmaW5hbCBub3IgY29uc3QuCiAgYm9vbCBnZXQgaXNNdXRhYmxlID0+IGZsYWdzICYgKEZsYWdGaW5hbCB8IEZsYWdDb25zdCkgPT0gMDsKICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+ICFpc1N0YXRpYzsKICBib29sIGdldCBoYXNHZXR0ZXIgPT4gdHJ1ZTsKICBib29sIGdldCBoYXNTZXR0ZXIgPT4gaXNNdXRhYmxlOwoKICBib29sIGdldCBpc0V4dGVybmFsID0+IGZhbHNlOwogIHZvaWQgc2V0IGlzRXh0ZXJuYWwoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlKSB0aHJvdyAnRmllbGRzIGNhbm5vdCBiZSBleHRlcm5hbCc7CiAgfQoKICBhY2NlcHQoTWVtYmVyVmlzaXRvciB2KSA9PiB2LnZpc2l0RmllbGQodGhpcyk7CgogIGFjY2VwdFJlZmVyZW5jZShNZW1iZXJSZWZlcmVuY2VWaXNpdG9yIHYpID0+IHYudmlzaXRGaWVsZFJlZmVyZW5jZSh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICB0eXBlPy5hY2NlcHQodik7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgICBpbml0aWFsaXplcj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHlwZSA9IHYudmlzaXREYXJ0VHlwZSh0eXBlKTsKICAgIHRyYW5zZm9ybUxpc3QoYW5ub3RhdGlvbnMsIHYsIHRoaXMpOwogICAgaWYgKGluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgaW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplci5hY2NlcHQodik7CiAgICAgIGluaXRpYWxpemVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KCiAgRGFydFR5cGUgZ2V0IGdldHRlclR5cGUgPT4gdHlwZTsKICBEYXJ0VHlwZSBnZXQgc2V0dGVyVHlwZSA9PiBpc011dGFibGUgPyB0eXBlIDogY29uc3QgQm90dG9tVHlwZSgpOwoKICBMb2NhdGlvbiBfZ2V0TG9jYXRpb25JbkVuY2xvc2luZ0ZpbGUoaW50IG9mZnNldCkgewogICAgcmV0dXJuIF9nZXRMb2NhdGlvbkluQ29tcG9uZW50KGVuY2xvc2luZ0NvbXBvbmVudCwgZmlsZVVyaSwgb2Zmc2V0KTsKICB9Cn0KCi8vLyBBIGdlbmVyYXRpdmUgY29uc3RydWN0b3IsIHBvc3NpYmx5IHJlZGlyZWN0aW5nLgovLy8KLy8vIE5vdGUgdGhhdCBmYWN0b3J5IGNvbnN0cnVjdG9ycyBhcmUgdHJlYXRlZCBhcyBbUHJvY2VkdXJlXXMuCi8vLwovLy8gQ29uc3RydWN0b3JzIGRvIG5vdCB0YWtlIHR5cGUgcGFyYW1ldGVycy4gIFR5cGUgYXJndW1lbnRzIGZyb20gYSBjb25zdHJ1Y3RvcgovLy8gaW52b2NhdGlvbiBzaG91bGQgYmUgbWF0Y2hlZCB3aXRoIHRoZSB0eXBlIHBhcmFtZXRlcnMgZGVjbGFyZWQgaW4gdGhlIGNsYXNzLgovLy8KLy8vIEZvciB1bm5hbWVkIGNvbnN0cnVjdG9ycywgdGhlIG5hbWUgaXMgYW4gZW1wdHkgc3RyaW5nIChpbiBhIFtOYW1lXSkuCmNsYXNzIENvbnN0cnVjdG9yIGV4dGVuZHMgTWVtYmVyIHsKICAvLy8gU3RhcnQgb2Zmc2V0IG9mIHRoZSBjb25zdHJ1Y3RvciBpbiB0aGUgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMgYW5ub3RhdGlvbnMgaWYgYW55LgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKSBpZiB0aGUgZmlsZQogIC8vLyBzdGFydCBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseQogIC8vLyBzZXQpLgogIGludCBzdGFydEZpbGVPZmZzZXQgPSBUcmVlTm9kZS5ub09mZnNldDsKCiAgaW50IGZsYWdzID0gMDsKICBGdW5jdGlvbk5vZGUgZnVuY3Rpb247CiAgTGlzdDxJbml0aWFsaXplcj4gaW5pdGlhbGl6ZXJzOwoKICBDb25zdHJ1Y3Rvcih0aGlzLmZ1bmN0aW9uLAogICAgICB7TmFtZSBuYW1lLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgICBib29sIGlzU3ludGhldGljOiBmYWxzZSwKICAgICAgTGlzdDxJbml0aWFsaXplcj4gaW5pdGlhbGl6ZXJzLAogICAgICBpbnQgdHJhbnNmb3JtZXJGbGFnczogMCwKICAgICAgVXJpIGZpbGVVcmksCiAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2V9KQogICAgICA6IHRoaXMuaW5pdGlhbGl6ZXJzID0gaW5pdGlhbGl6ZXJzID8/IDxJbml0aWFsaXplcj5bXSwKICAgICAgICBzdXBlcihuYW1lLCBmaWxlVXJpLCByZWZlcmVuY2UpIHsKICAgIGZ1bmN0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgc2V0UGFyZW50cyh0aGlzLmluaXRpYWxpemVycywgdGhpcyk7CiAgICB0aGlzLmlzQ29uc3QgPSBpc0NvbnN0OwogICAgdGhpcy5pc0V4dGVybmFsID0gaXNFeHRlcm5hbDsKICAgIHRoaXMuaXNTeW50aGV0aWMgPSBpc1N5bnRoZXRpYzsKICAgIHRoaXMudHJhbnNmb3JtZXJGbGFncyA9IHRyYW5zZm9ybWVyRmxhZ3M7CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IEZsYWdDb25zdCA9IDEgPDwgMDsgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnRXh0ZXJuYWwgPSAxIDw8IDE7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnU3ludGhldGljID0gMSA8PCAyOwoKICBib29sIGdldCBpc0NvbnN0ID0+IGZsYWdzICYgRmxhZ0NvbnN0ICE9IDA7CiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiBmbGFncyAmIEZsYWdFeHRlcm5hbCAhPSAwOwoKICAvLy8gVHJ1ZSBpZiB0aGlzIGlzIGEgc3ludGhldGljIGNvbnN0cnVjdG9yIGluc2VydGVkIGluIGEgY2xhc3MgdGhhdAogIC8vLyBkb2VzIG5vdCBvdGhlcndpc2UgZGVjbGFyZSBhbnkgY29uc3RydWN0b3JzLgogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IGZsYWdzICYgRmxhZ1N5bnRoZXRpYyAhPSAwOwoKICB2b2lkIHNldCBpc0NvbnN0KGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQ29uc3QpIDogKGZsYWdzICYgfkZsYWdDb25zdCk7CiAgfQoKICB2b2lkIHNldCBpc0V4dGVybmFsKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnRXh0ZXJuYWwpIDogKGZsYWdzICYgfkZsYWdFeHRlcm5hbCk7CiAgfQoKICB2b2lkIHNldCBpc1N5bnRoZXRpYyhib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ1N5bnRoZXRpYykgOiAoZmxhZ3MgJiB+RmxhZ1N5bnRoZXRpYyk7CiAgfQoKICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+IGZhbHNlOwogIGJvb2wgZ2V0IGhhc0dldHRlciA9PiBmYWxzZTsKICBib29sIGdldCBoYXNTZXR0ZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXh0ZW5zaW9uTWVtYmVyID0+IGZhbHNlOwoKICBhY2NlcHQoTWVtYmVyVmlzaXRvciB2KSA9PiB2LnZpc2l0Q29uc3RydWN0b3IodGhpcyk7CgogIGFjY2VwdFJlZmVyZW5jZShNZW1iZXJSZWZlcmVuY2VWaXNpdG9yIHYpID0+CiAgICAgIHYudmlzaXRDb25zdHJ1Y3RvclJlZmVyZW5jZSh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QoaW5pdGlhbGl6ZXJzLCB2KTsKICAgIGZ1bmN0aW9uPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoaW5pdGlhbGl6ZXJzLCB2LCB0aGlzKTsKICAgIGlmIChmdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIGZ1bmN0aW9uID0gZnVuY3Rpb24uYWNjZXB0KHYpOwogICAgICBmdW5jdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9CgogIERhcnRUeXBlIGdldCBnZXR0ZXJUeXBlID0+IGNvbnN0IEJvdHRvbVR5cGUoKTsKICBEYXJ0VHlwZSBnZXQgc2V0dGVyVHlwZSA9PiBjb25zdCBCb3R0b21UeXBlKCk7CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIFJlc2lkdWUgb2YgYSByZWRpcmVjdGluZyBmYWN0b3J5IGNvbnN0cnVjdG9yIGZvciB0aGUgbGlua2luZyBwaGFzZS4KLy8vCi8vLyBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGBiYXJgIGlzIGEgcmVkaXJlY3RpbmcgZmFjdG9yeSBjb25zdHJ1Y3Rvci4KLy8vCi8vLyAgICAgY2xhc3MgQSB7Ci8vLyAgICAgICBBLmZvbygpOwovLy8gICAgICAgZmFjdG9yeSBBLmJhcigpID0gQS5mb287Ci8vLyAgICAgfQovLy8KLy8vIEFuIGludm9jYXRpb24gb2YgYG5ldyBBLmJhcigpYCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGFuIGludm9jYXRpb24gb2YKLy8vIGBuZXcgQS5mb28oKWAuICBJbiBLZXJuZWwsIHRoZSBpbnZvY2F0aW9ucyBvZiBgYmFyYCBhcmUgcmVwbGFjZWQgd2l0aAovLy8gaW52b2NhdGlvbnMgb2YgYGZvb2AsIGFuZCBhZnRlciBpdCBpcyBkb25lLCB0aGUgcmVkaXJlY3RpbmcgY29uc3RydWN0b3IgY2FuCi8vLyBiZSByZW1vdmVkIGZyb20gdGhlIGNsYXNzLiAgSG93ZXZlciwgaXQgaXMgbmVlZGVkIGR1cmluZyB0aGUgbGlua2luZyBwaGFzZSwKLy8vIGJlY2F1c2Ugb3RoZXIgbW9kdWxlcyBjYW4gcmVmZXIgdG8gdGhhdCBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBbUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JdcyBjb250YWluIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yCi8vLyBsaW5raW5nIGFuZCBhcmUgdHJlYXRlZCBhcyBub24tcnVubmFibGUgbWVtYmVycyBvZiBjbGFzc2VzIHRoYXQgbWVyZWx5IHNlcnZlCi8vLyBhcyBjb250YWluZXJzIGZvciB0aGF0IGluZm9ybWF0aW9uLgovLy8KLy8vIFJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3JzIGNhbiBiZSB1bm5hbWVkLiAgSW4gdGhpcyBjYXNlLCB0aGUgbmFtZSBpcwovLy8gYW4gZW1wdHkgc3RyaW5nIChpbiBhIFtOYW1lXSkuCmNsYXNzIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIGV4dGVuZHMgTWVtYmVyIHsKICBpbnQgZmxhZ3MgPSAwOwoKICAvLy8gW1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yXXMgbWF5IHJlZGlyZWN0IHRvIGNvbnN0cnVjdG9ycyBvciBmYWN0b3JpZXMKICAvLy8gb2YgaW5zdGFudGlhdGVkIGdlbmVyaWMgdHlwZXMsIHRoYXQgaXMsIGdlbmVyaWMgdHlwZXMgd2l0aCBzdXBwbGllZCB0eXBlCiAgLy8vIGFyZ3VtZW50cy4gIFRoZSBzdXBwbGllZCB0eXBlIGFyZ3VtZW50cyBhcmUgc3RvcmVkIGluIHRoaXMgZmllbGQuCiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgLy8vIFJlZmVyZW5jZSB0byB0aGUgY29uc3RydWN0b3Igb3IgdGhlIGZhY3RvcnkgdGhhdCB0aGlzCiAgLy8vIFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl0gcmVkaXJlY3RzIHRvLgogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CgogIC8vLyBbdHlwZVBhcmFtZXRlcnNdIGFyZSBkdXBsaWNhdGVzIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGVuY2xvc2luZwogIC8vLyBjbGFzcy4gIEJlY2F1c2UgW1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yXXMgYXJlbid0IGluc3RhbmNlIG1lbWJlcnMsCiAgLy8vIHJlZmVyZW5jZXMgdG8gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzIGluIHRoZQogIC8vLyByZWRpcmVjdGlvbiB0YXJnZXQgZGVzY3JpcHRpb24gYXJlIGVuY29kZWQgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBlbGVtZW50cwogIC8vLyBvZiBbdHlwZVBhcmFtZXRlcnNdLgogIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnM7CgogIC8vLyBQb3NpdGlvbmFsIHBhcmFtZXRlcnMgb2YgW1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yXXMgc2hvdWxkIGJlCiAgLy8vIGNvbXBhdGlibGUgd2l0aCB0aGF0IG9mIHRoZSB0YXJnZXQgY29uc3RydWN0b3IuCiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVyczsKICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKCiAgLy8vIE5hbWVkIHBhcmFtZXRlcnMgb2YgW1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yXXMgc2hvdWxkIGJlIGNvbXBhdGlibGUKICAvLy8gd2l0aCB0aGF0IG9mIHRoZSB0YXJnZXQgY29uc3RydWN0b3IuCiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnM7CgogIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKHRoaXMudGFyZ2V0UmVmZXJlbmNlLAogICAgICB7TmFtZSBuYW1lLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgICBpbnQgdHJhbnNmb3JtZXJGbGFnczogMCwKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICBVcmkgZmlsZVVyaSwKICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZX0pCiAgICAgIDogdGhpcy50eXBlQXJndW1lbnRzID0gdHlwZUFyZ3VtZW50cyA/PyA8RGFydFR5cGU+W10sCiAgICAgICAgdGhpcy50eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzID8/IDxUeXBlUGFyYW1ldGVyPltdLAogICAgICAgIHRoaXMucG9zaXRpb25hbFBhcmFtZXRlcnMgPQogICAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycyA/PyA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXSwKICAgICAgICB0aGlzLm5hbWVkUGFyYW1ldGVycyA9IG5hbWVkUGFyYW1ldGVycyA/PyA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXSwKICAgICAgICB0aGlzLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPQogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50ID8/IHBvc2l0aW9uYWxQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCwKICAgICAgICBzdXBlcihuYW1lLCBmaWxlVXJpLCByZWZlcmVuY2UpIHsKICAgIHNldFBhcmVudHModGhpcy50eXBlUGFyYW1ldGVycywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMucG9zaXRpb25hbFBhcmFtZXRlcnMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLm5hbWVkUGFyYW1ldGVycywgdGhpcyk7CiAgICB0aGlzLmlzQ29uc3QgPSBpc0NvbnN0OwogICAgdGhpcy5pc0V4dGVybmFsID0gaXNFeHRlcm5hbDsKICAgIHRoaXMudHJhbnNmb3JtZXJGbGFncyA9IHRyYW5zZm9ybWVyRmxhZ3M7CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IEZsYWdDb25zdCA9IDEgPDwgMDsgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnRXh0ZXJuYWwgPSAxIDw8IDE7CgogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmxhZ3MgJiBGbGFnQ29uc3QgIT0gMDsKICBib29sIGdldCBpc0V4dGVybmFsID0+IGZsYWdzICYgRmxhZ0V4dGVybmFsICE9IDA7CgogIHZvaWQgc2V0IGlzQ29uc3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdDb25zdCkgOiAoZmxhZ3MgJiB+RmxhZ0NvbnN0KTsKICB9CgogIHZvaWQgc2V0IGlzRXh0ZXJuYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdFeHRlcm5hbCkgOiAoZmxhZ3MgJiB+RmxhZ0V4dGVybmFsKTsKICB9CgogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaGFzR2V0dGVyID0+IGZhbHNlOwogIGJvb2wgZ2V0IGhhc1NldHRlciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXIgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzVW5yZXNvbHZlZCA9PiB0YXJnZXRSZWZlcmVuY2UgPT0gbnVsbDsKCiAgTWVtYmVyIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgdGFyZ2V0KE1lbWJlciBtZW1iZXIpIHsKICAgIGFzc2VydChtZW1iZXIgaXMgQ29uc3RydWN0b3IgfHwKICAgICAgICAobWVtYmVyIGlzIFByb2NlZHVyZSAmJiBtZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLkZhY3RvcnkpKTsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZShtZW1iZXIpOwogIH0KCiAgYWNjZXB0KE1lbWJlclZpc2l0b3IgdikgPT4gdi52aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKHRoaXMpOwoKICBhY2NlcHRSZWZlcmVuY2UoTWVtYmVyUmVmZXJlbmNlVmlzaXRvciB2KSA9PgogICAgICB2LnZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JSZWZlcmVuY2UodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoYW5ub3RhdGlvbnMsIHYpOwogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB2aXNpdExpc3QodHlwZUFyZ3VtZW50cywgdik7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybVR5cGVMaXN0KHR5cGVBcmd1bWVudHMsIHYpOwogIH0KCiAgRGFydFR5cGUgZ2V0IGdldHRlclR5cGUgPT4gY29uc3QgQm90dG9tVHlwZSgpOwogIERhcnRUeXBlIGdldCBzZXR0ZXJUeXBlID0+IGNvbnN0IEJvdHRvbVR5cGUoKTsKCiAgTG9jYXRpb24gX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlKGludCBvZmZzZXQpIHsKICAgIHJldHVybiBfZ2V0TG9jYXRpb25JbkNvbXBvbmVudChlbmNsb3NpbmdDb21wb25lbnQsIGZpbGVVcmksIG9mZnNldCk7CiAgfQp9CgovLy8gQSBtZXRob2QsIGdldHRlciwgc2V0dGVyLCBpbmRleC1nZXR0ZXIsIGluZGV4LXNldHRlciwgb3BlcmF0b3Igb3ZlcmxvYWRlciwKLy8vIG9yIGZhY3RvcnkuCi8vLwovLy8gUHJvY2VkdXJlcyBjYW4gaGF2ZSB0aGUgc3RhdGljLCBhYnN0cmFjdCwgYW5kL29yIGV4dGVybmFsIG1vZGlmaWVyLCBhbHRob3VnaAovLy8gb25seSB0aGUgc3RhdGljIGFuZCBleHRlcm5hbCBtb2RpZmllcnMgbWF5IGJlIHVzZWQgdG9nZXRoZXIuCi8vLwovLy8gRm9yIG5vbi1zdGF0aWMgcHJvY2VkdXJlcyB0aGUgbmFtZSBpcyByZXF1aXJlZCBmb3IgZHluYW1pYyBkaXNwYXRjaC4KLy8vIEZvciBleHRlcm5hbCBwcm9jZWR1cmVzIHRoZSBuYW1lIGlzIHJlcXVpcmVkIGZvciBpZGVudGlmeWluZyB0aGUgZXh0ZXJuYWwKLy8vIGltcGxlbWVudGF0aW9uLgovLy8KLy8vIEZvciBtZXRob2RzLCBnZXR0ZXJzLCBhbmQgc2V0dGVycyB0aGUgbmFtZSBpcyBqdXN0IGFzIGl0IHdhcyBkZWNsYXJlZC4KLy8vIEZvciBzZXR0ZXJzIHRoaXMgZG9lcyBub3QgaW5jbHVkZSBhIHRyYWlsaW5nIGA9YC4KLy8vIEZvciBpbmRleC1nZXR0ZXJzL3NldHRlcnMsIHRoaXMgaXMgYFtdYCBhbmQgYFtdPWAuCi8vLyBGb3Igb3BlcmF0b3JzLCB0aGlzIGlzIHRoZSB0b2tlbiBmb3IgdGhlIG9wZXJhdG9yLCBlLmcuIGArYCBvciBgPT1gLAovLy8gZXhjZXB0IGZvciB0aGUgdW5hcnkgbWludXMgb3BlcmF0b3IsIHdob3NlIG5hbWUgaXMgYHVuYXJ5LWAuCkBjb3EKY2xhc3MgUHJvY2VkdXJlIGV4dGVuZHMgTWVtYmVyIHsKICAvLy8gU3RhcnQgb2Zmc2V0IG9mIHRoZSBmdW5jdGlvbiBpbiB0aGUgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMgYW5ub3RhdGlvbnMgaWYgYW55LgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKSBpZiB0aGUgZmlsZQogIC8vLyBzdGFydCBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseQogIC8vLyBzZXQpLgogIGludCBzdGFydEZpbGVPZmZzZXQgPSBUcmVlTm9kZS5ub09mZnNldDsKCiAgUHJvY2VkdXJlS2luZCBraW5kOwogIGludCBmbGFncyA9IDA7CiAgLy8gZnVuY3Rpb24gaXMgbnVsbCBpZiBhbmQgb25seSBpZiBhYnN0cmFjdCwgZXh0ZXJuYWwuCiAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uOwoKICAvLyBUaGUgZnVuY3Rpb24gbm9kZSdzIGJvZHkgbWlnaHQgYmUgbGF6aWx5IGxvYWRlZCwgbWVhbmluZyB0aGF0IHRoaXMgdmFsdWUKICAvLyBtaWdodCBub3QgYmUgc2V0IGNvcnJlY3RseSB5ZXQuIE1ha2Ugc3VyZSB0aGUgYm9keSBpcyBsb2FkZWQgYmVmb3JlCiAgLy8gcmV0dXJuaW5nIGFueXRoaW5nLgogIGludCBnZXQgdHJhbnNmb3JtZXJGbGFncyB7CiAgICBmdW5jdGlvbj8uYm9keTsKICAgIHJldHVybiBzdXBlci50cmFuc2Zvcm1lckZsYWdzOwogIH0KCiAgLy8gVGhlIGZ1bmN0aW9uIG5vZGUncyBib2R5IG1pZ2h0IGJlIGxhemlseSBsb2FkZWQsIG1lYW5pbmcgdGhhdCB0aGlzIHZhbHVlCiAgLy8gbWlnaHQgZ2V0IG92ZXJ3cml0dGVuIGxhdGVyICh3aGVuIHRoZSBib2R5IGlzIHJlYWQpLiBUbyBhdm9pZCB0aGF0IHJlYWQgdGhlCiAgLy8gYm9keSBub3cgYW5kIG9ubHkgc2V0IHRoZSB2YWx1ZSBhZnRlcndhcmRzLgogIHZvaWQgc2V0IHRyYW5zZm9ybWVyRmxhZ3MoaW50IG5ld1ZhbHVlKSB7CiAgICBmdW5jdGlvbj8uYm9keTsKICAgIHN1cGVyLnRyYW5zZm9ybWVyRmxhZ3MgPSBuZXdWYWx1ZTsKICB9CgogIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHRyYW5zZm9ybWVyIGZsYWdzIHdpdGhvdXQgbG9hZGluZyB0aGUgYm9keS4KICAvLyBVc2VkIHdoZW4gcmVhZGluZyB0aGUgYmluYXJ5LiBGb3Igb3RoZXIgY2FzZXMgb25lIHNob3VsZCBwcm9iYWJseSB1c2UKICAvLyBgdHJhbnNmb3JtZXJGbGFncyA9IHZhbHVlO2AuCiAgdm9pZCBzZXRUcmFuc2Zvcm1lckZsYWdzV2l0aG91dExhenlMb2FkaW5nKGludCBuZXdWYWx1ZSkgewogICAgc3VwZXIudHJhbnNmb3JtZXJGbGFncyA9IG5ld1ZhbHVlOwogIH0KCiAgUmVmZXJlbmNlIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2U7CiAgUmVmZXJlbmNlIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICBQcm9jZWR1cmUoTmFtZSBuYW1lLCBQcm9jZWR1cmVLaW5kIGtpbmQsIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwKICAgICAge2Jvb2wgaXNBYnN0cmFjdDogZmFsc2UsCiAgICAgIGJvb2wgaXNTdGF0aWM6IGZhbHNlLAogICAgICBib29sIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRm9yd2FyZGluZ1N0dWI6IGZhbHNlLAogICAgICBib29sIGlzRm9yd2FyZGluZ1NlbWlTdHViOiBmYWxzZSwKICAgICAgYm9vbCBpc0V4dGVuc2lvbk1lbWJlcjogZmFsc2UsCiAgICAgIGludCB0cmFuc2Zvcm1lckZsYWdzOiAwLAogICAgICBVcmkgZmlsZVVyaSwKICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZSwKICAgICAgTWVtYmVyIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQsCiAgICAgIE1lbWJlciBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldH0pCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShuYW1lLCBraW5kLCBmdW5jdGlvbiwKICAgICAgICAgICAgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCwKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLAogICAgICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLAogICAgICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgICAgICBpc0ZvcndhcmRpbmdTdHViOiBpc0ZvcndhcmRpbmdTdHViLAogICAgICAgICAgICBpc0ZvcndhcmRpbmdTZW1pU3R1YjogaXNGb3J3YXJkaW5nU2VtaVN0dWIsCiAgICAgICAgICAgIGlzRXh0ZW5zaW9uTWVtYmVyOiBpc0V4dGVuc2lvbk1lbWJlciwKICAgICAgICAgICAgdHJhbnNmb3JtZXJGbGFnczogdHJhbnNmb3JtZXJGbGFncywKICAgICAgICAgICAgZmlsZVVyaTogZmlsZVVyaSwKICAgICAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsCiAgICAgICAgICAgIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2U6CiAgICAgICAgICAgICAgICBnZXRNZW1iZXJSZWZlcmVuY2UoZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCksCiAgICAgICAgICAgIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOgogICAgICAgICAgICAgICAgZ2V0TWVtYmVyUmVmZXJlbmNlKGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0KSk7CgogIFByb2NlZHVyZS5ieVJlZmVyZW5jZShOYW1lIG5hbWUsIHRoaXMua2luZCwgdGhpcy5mdW5jdGlvbiwKICAgICAge2Jvb2wgaXNBYnN0cmFjdDogZmFsc2UsCiAgICAgIGJvb2wgaXNTdGF0aWM6IGZhbHNlLAogICAgICBib29sIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRm9yd2FyZGluZ1N0dWI6IGZhbHNlLAogICAgICBib29sIGlzRm9yd2FyZGluZ1NlbWlTdHViOiBmYWxzZSwKICAgICAgYm9vbCBpc0V4dGVuc2lvbk1lbWJlcjogZmFsc2UsCiAgICAgIGludCB0cmFuc2Zvcm1lckZsYWdzOiAwLAogICAgICBVcmkgZmlsZVVyaSwKICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZSwKICAgICAgdGhpcy5mb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0UmVmZXJlbmNlLAogICAgICB0aGlzLmZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlfSkKICAgICAgOiBzdXBlcihuYW1lLCBmaWxlVXJpLCByZWZlcmVuY2UpIHsKICAgIGZ1bmN0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgdGhpcy5pc0Fic3RyYWN0ID0gaXNBYnN0cmFjdDsKICAgIHRoaXMuaXNTdGF0aWMgPSBpc1N0YXRpYzsKICAgIHRoaXMuaXNFeHRlcm5hbCA9IGlzRXh0ZXJuYWw7CiAgICB0aGlzLmlzQ29uc3QgPSBpc0NvbnN0OwogICAgdGhpcy5pc0ZvcndhcmRpbmdTdHViID0gaXNGb3J3YXJkaW5nU3R1YjsKICAgIHRoaXMuaXNGb3J3YXJkaW5nU2VtaVN0dWIgPSBpc0ZvcndhcmRpbmdTZW1pU3R1YjsKICAgIHRoaXMuaXNFeHRlbnNpb25NZW1iZXIgPSBpc0V4dGVuc2lvbk1lbWJlcjsKICAgIHRoaXMudHJhbnNmb3JtZXJGbGFncyA9IHRyYW5zZm9ybWVyRmxhZ3M7CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IEZsYWdTdGF0aWMgPSAxIDw8IDA7IC8vIE11c3QgbWF0Y2ggc2VyaWFsaXplZCBiaXQgcG9zaXRpb25zLgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0Fic3RyYWN0ID0gMSA8PCAxOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0V4dGVybmFsID0gMSA8PCAyOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0NvbnN0ID0gMSA8PCAzOyAvLyBPbmx5IGZvciBleHRlcm5hbCBjb25zdCBmYWN0b3JpZXMuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnRm9yd2FyZGluZ1N0dWIgPSAxIDw8IDQ7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnRm9yd2FyZGluZ1NlbWlTdHViID0gMSA8PCA1OwogIC8vIFRPRE8oMjk4NDEpOiBSZW1vdmUgdGhpcyBmbGFnIGFmdGVyIHRoZSBpc3N1ZSBpcyByZXNvbHZlZC4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciA9IDEgPDwgNjsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdOb1N1Y2hNZXRob2RGb3J3YXJkZXIgPSAxIDw8IDc7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnRXh0ZW5zaW9uTWVtYmVyID0gMSA8PCA4OwoKICBib29sIGdldCBpc1N0YXRpYyA9PiBmbGFncyAmIEZsYWdTdGF0aWMgIT0gMDsKICBib29sIGdldCBpc0Fic3RyYWN0ID0+IGZsYWdzICYgRmxhZ0Fic3RyYWN0ICE9IDA7CiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiBmbGFncyAmIEZsYWdFeHRlcm5hbCAhPSAwOwoKICAvLy8gVHJ1ZSBpZiB0aGlzIGhhcyB0aGUgYGNvbnN0YCBtb2RpZmllci4gIFRoaXMgaXMgb25seSBwb3NzaWJsZSBmb3IgZXh0ZXJuYWwKICAvLy8gY29uc3RhbnQgZmFjdG9yaWVzLCBzdWNoIGFzIGBTdHJpbmcuZnJvbUVudmlyb25tZW50YC4KICBib29sIGdldCBpc0NvbnN0ID0+IGZsYWdzICYgRmxhZ0NvbnN0ICE9IDA7CgogIC8vLyBJZiBzZXQsIHRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uJ3MgaW1wbGVtZW50YXRpb24gZXhpc3RzCiAgLy8vIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2YgdHlwZSBjaGVja2luZyBhcmd1bWVudHMgYW5kIGZvcndhcmRpbmcgdG8KICAvLy8gW2ZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRdLgogIC8vLwogIC8vLyBOb3RlIHRoYXQganVzdCBiZWNhdXNlIHRoaXMgYml0IGlzIHNldCBkb2Vzbid0IG1lYW4gdGhhdCB0aGUgZnVuY3Rpb24gd2FzCiAgLy8vIG5vdCBkZWNsYXJlZCBpbiB0aGUgc291cmNlOyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBhIGZvcndhcmRpbmcKICAvLy8gc2VtaS1zdHViIChzZWUgaXNGb3J3YXJkaW5nU2VtaVN0dWIpLiAgVG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBmdW5jdGlvbgogIC8vLyB3YXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBjb25zdWx0IFtpc1N5bnRoZXRpY0ZvcndhcmRlcl0uCiAgYm9vbCBnZXQgaXNGb3J3YXJkaW5nU3R1YiA9PiBmbGFncyAmIEZsYWdGb3J3YXJkaW5nU3R1YiAhPSAwOwoKICAvLy8gSWYgc2V0LCB0aGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgYWx0aG91Z2ggdGhpcyBmdW5jdGlvbiBpcyBhIGZvcndhcmRpbmcKICAvLy8gc3R1YiwgaXQgd2FzIHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBhcyBhbiBhYnN0cmFjdCBtZXRob2QuCiAgYm9vbCBnZXQgaXNGb3J3YXJkaW5nU2VtaVN0dWIgPT4gZmxhZ3MgJiBGbGFnRm9yd2FyZGluZ1NlbWlTdHViICE9IDA7CgogIC8vIEluZGljYXRlcyBpZiB0aGlzIFtQcm9jZWR1cmVdIHJlcHJlc2VudHMgYSByZWRpcmVjdGluZyBmYWN0b3J5IGNvbnN0cnVjdG9yCiAgLy8gYW5kIGRvZXNuJ3QgaGF2ZSBhIHJ1bm5hYmxlIGJvZHkuCiAgYm9vbCBnZXQgaXNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gZmxhZ3MgJiBGbGFnUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgIT0gMDsKICB9CgogIC8vLyBJZiBzZXQsIHRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdhcyBub3QgcHJlc2VudCBpbiB0aGUKICAvLy8gc291cmNlLCBhbmQgaXQgZXhpc3RzIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2YgdHlwZSBjaGVja2luZyBhcmd1bWVudHMKICAvLy8gYW5kIGZvcndhcmRpbmcgdG8gW2ZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRdLgogIGJvb2wgZ2V0IGlzU3ludGhldGljRm9yd2FyZGVyID0+IGlzRm9yd2FyZGluZ1N0dWIgJiYgIWlzRm9yd2FyZGluZ1NlbWlTdHViOwoKICBib29sIGdldCBpc05vU3VjaE1ldGhvZEZvcndhcmRlciA9PiBmbGFncyAmIEZsYWdOb1N1Y2hNZXRob2RGb3J3YXJkZXIgIT0gMDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXIgPT4gZmxhZ3MgJiBGbGFnRXh0ZW5zaW9uTWVtYmVyICE9IDA7CgogIHZvaWQgc2V0IGlzU3RhdGljKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnU3RhdGljKSA6IChmbGFncyAmIH5GbGFnU3RhdGljKTsKICB9CgogIHZvaWQgc2V0IGlzQWJzdHJhY3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdBYnN0cmFjdCkgOiAoZmxhZ3MgJiB+RmxhZ0Fic3RyYWN0KTsKICB9CgogIHZvaWQgc2V0IGlzRXh0ZXJuYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdFeHRlcm5hbCkgOiAoZmxhZ3MgJiB+RmxhZ0V4dGVybmFsKTsKICB9CgogIHZvaWQgc2V0IGlzQ29uc3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdDb25zdCkgOiAoZmxhZ3MgJiB+RmxhZ0NvbnN0KTsKICB9CgogIHZvaWQgc2V0IGlzRm9yd2FyZGluZ1N0dWIoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPQogICAgICAgIHZhbHVlID8gKGZsYWdzIHwgRmxhZ0ZvcndhcmRpbmdTdHViKSA6IChmbGFncyAmIH5GbGFnRm9yd2FyZGluZ1N0dWIpOwogIH0KCiAgdm9pZCBzZXQgaXNGb3J3YXJkaW5nU2VtaVN0dWIoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ0ZvcndhcmRpbmdTZW1pU3R1YikKICAgICAgICA6IChmbGFncyAmIH5GbGFnRm9yd2FyZGluZ1NlbWlTdHViKTsKICB9CgogIHZvaWQgc2V0IGlzUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcik7CiAgfQoKICB2b2lkIHNldCBpc05vU3VjaE1ldGhvZEZvcndhcmRlcihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlCiAgICAgICAgPyAoZmxhZ3MgfCBGbGFnTm9TdWNoTWV0aG9kRm9yd2FyZGVyKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdOb1N1Y2hNZXRob2RGb3J3YXJkZXIpOwogIH0KCiAgdm9pZCBzZXQgaXNFeHRlbnNpb25NZW1iZXIoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPQogICAgICAgIHZhbHVlID8gKGZsYWdzIHwgRmxhZ0V4dGVuc2lvbk1lbWJlcikgOiAoZmxhZ3MgJiB+RmxhZ0V4dGVuc2lvbk1lbWJlcik7CiAgfQoKICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+ICFpc1N0YXRpYzsKICBib29sIGdldCBpc0dldHRlciA9PiBraW5kID09IFByb2NlZHVyZUtpbmQuR2V0dGVyOwogIGJvb2wgZ2V0IGlzU2V0dGVyID0+IGtpbmQgPT0gUHJvY2VkdXJlS2luZC5TZXR0ZXI7CiAgYm9vbCBnZXQgaXNBY2Nlc3NvciA9PiBpc0dldHRlciB8fCBpc1NldHRlcjsKICBib29sIGdldCBoYXNHZXR0ZXIgPT4ga2luZCAhPSBQcm9jZWR1cmVLaW5kLlNldHRlcjsKICBib29sIGdldCBoYXNTZXR0ZXIgPT4ga2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcjsKICBib29sIGdldCBpc0ZhY3RvcnkgPT4ga2luZCA9PSBQcm9jZWR1cmVLaW5kLkZhY3Rvcnk7CgogIE1lbWJlciBnZXQgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCA9PgogICAgICBmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldChNZW1iZXIgdGFyZ2V0KSB7CiAgICBmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBNZW1iZXIgZ2V0IGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0ID0+CiAgICAgIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXQoTWVtYmVyIHRhcmdldCkgewogICAgZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIGFjY2VwdChNZW1iZXJWaXNpdG9yIHYpID0+IHYudmlzaXRQcm9jZWR1cmUodGhpcyk7CgogIGFjY2VwdFJlZmVyZW5jZShNZW1iZXJSZWZlcmVuY2VWaXNpdG9yIHYpID0+IHYudmlzaXRQcm9jZWR1cmVSZWZlcmVuY2UodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoYW5ub3RhdGlvbnMsIHYpOwogICAgbmFtZT8uYWNjZXB0KHYpOwogICAgZnVuY3Rpb24/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QoYW5ub3RhdGlvbnMsIHYsIHRoaXMpOwogICAgaWYgKGZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgZnVuY3Rpb24gPSBmdW5jdGlvbi5hY2NlcHQodik7CiAgICAgIGZ1bmN0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KCiAgRGFydFR5cGUgZ2V0IGdldHRlclR5cGUgewogICAgcmV0dXJuIGlzR2V0dGVyID8gZnVuY3Rpb24ucmV0dXJuVHlwZSA6IGZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICB9CgogIERhcnRUeXBlIGdldCBzZXR0ZXJUeXBlIHsKICAgIHJldHVybiBpc1NldHRlcgogICAgICAgID8gZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbMF0udHlwZQogICAgICAgIDogY29uc3QgQm90dG9tVHlwZSgpOwogIH0KCiAgTG9jYXRpb24gX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlKGludCBvZmZzZXQpIHsKICAgIHJldHVybiBfZ2V0TG9jYXRpb25JbkNvbXBvbmVudChlbmNsb3NpbmdDb21wb25lbnQsIGZpbGVVcmksIG9mZnNldCk7CiAgfQp9CgplbnVtIFByb2NlZHVyZUtpbmQgewogIE1ldGhvZCwKICBHZXR0ZXIsCiAgU2V0dGVyLAogIE9wZXJhdG9yLAogIEZhY3RvcnksCn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgIENPTlNUUlVDVE9SIElOSVRJQUxJWkVSUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBQYXJ0IG9mIGFuIGluaXRpYWxpemVyIGxpc3QgaW4gYSBjb25zdHJ1Y3Rvci4KYWJzdHJhY3QgY2xhc3MgSW5pdGlhbGl6ZXIgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgLy8vIFRydWUgaWYgdGhpcyBpcyBhIHN5bnRoZXRpYyBjb25zdHJ1Y3RvciBpbml0aWFsaXplci4KICBAaW5mb3JtYXRpdmUKICBib29sIGlzU3ludGhldGljID0gZmFsc2U7CgogIGFjY2VwdChJbml0aWFsaXplclZpc2l0b3Igdik7Cn0KCi8vLyBBbiBpbml0aWFsaXplciB3aXRoIGEgY29tcGlsZS10aW1lIGVycm9yLgovLy8KLy8vIFNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24gYXQgcnVudGltZS4KLy8KLy8gREVTSUdOIFRPRE86IFRoZSBmcm9udGVuZCBzaG91bGQgdXNlIHRoaXMgaW4gYSBsb3QgbW9yZSBjYXNlcyB0byBjYXRjaAovLyBpbnZhbGlkIGNhc2VzLgpjbGFzcyBJbnZhbGlkSW5pdGlhbGl6ZXIgZXh0ZW5kcyBJbml0aWFsaXplciB7CiAgYWNjZXB0KEluaXRpYWxpemVyVmlzaXRvciB2KSA9PiB2LnZpc2l0SW52YWxpZEluaXRpYWxpemVyKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgovLy8gQSBmaWVsZCBhc3NpZ25tZW50IGBmaWVsZCA9IHZhbHVlYCBvY2N1cnJpbmcgaW4gdGhlIGluaXRpYWxpemVyIGxpc3Qgb2YKLy8vIGEgY29uc3RydWN0b3IuCi8vLwovLy8gVGhpcyBub2RlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggZGVjbGFyYXRpb24tc2l0ZSBmaWVsZCBpbml0aWFsaXplcnM7IHRob3NlCi8vLyBhcmUgW0V4cHJlc3Npb25dcyBzdG9yZWQgaW4gW0ZpZWxkLmluaXRpYWxpemVyXS4KLy8KLy8gVE9ETzogVGhlIGZyb250ZW5kIHNob3VsZCBjaGVjayB0aGF0IGFsbCBmaW5hbCBmaWVsZHMgYXJlIGluaXRpYWxpemVkCi8vICBleGFjdGx5IG9uY2UsIGFuZCB0aGF0IG5vIGZpZWxkcyBhcmUgYXNzaWduZWQgdHdpY2UgaW4gdGhlIGluaXRpYWxpemVyIGxpc3QuCmNsYXNzIEZpZWxkSW5pdGlhbGl6ZXIgZXh0ZW5kcyBJbml0aWFsaXplciB7CiAgLy8vIFJlZmVyZW5jZSB0byB0aGUgZmllbGQgYmVpbmcgaW5pdGlhbGl6ZWQuICBOb3QgbnVsbC4KICBSZWZlcmVuY2UgZmllbGRSZWZlcmVuY2U7CiAgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgRmllbGRJbml0aWFsaXplcihGaWVsZCBmaWVsZCwgRXhwcmVzc2lvbiB2YWx1ZSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGZpZWxkPy5yZWZlcmVuY2UsIHZhbHVlKTsKCiAgRmllbGRJbml0aWFsaXplci5ieVJlZmVyZW5jZSh0aGlzLmZpZWxkUmVmZXJlbmNlLCB0aGlzLnZhbHVlKSB7CiAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICB9CgogIEZpZWxkIGdldCBmaWVsZCA9PiBmaWVsZFJlZmVyZW5jZT8ubm9kZTsKCiAgdm9pZCBzZXQgZmllbGQoRmllbGQgZmllbGQpIHsKICAgIGZpZWxkUmVmZXJlbmNlID0gZmllbGQ/LnJlZmVyZW5jZTsKICB9CgogIGFjY2VwdChJbml0aWFsaXplclZpc2l0b3IgdikgPT4gdi52aXNpdEZpZWxkSW5pdGlhbGl6ZXIodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBmaWVsZD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgdmFsdWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBIHN1cGVyIGNhbGwgYHN1cGVyKHgseSlgIG9jY3VycmluZyBpbiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBvZiBhCi8vLyBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBUaGVyZSBhcmUgbm8gdHlwZSBhcmd1bWVudHMgb24gdGhpcyBjYWxsLgovLwovLyBUT0RPOiBUaGUgZnJvbnRlbmQgc2hvdWxkIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSB0aGFuIG9uZSBzdXBlciBjYWxsLgovLwovLyBERVNJR04gVE9ETzogQ29uc2lkZXIgaWYgdGhlIGZyb250ZW5kIHNob3VsZCBpbnNlcnQgdHlwZSBhcmd1bWVudHMgZGVyaXZlZAovLyBmcm9tIHRoZSBleHRlbmRzIGNsYXVzZS4KY2xhc3MgU3VwZXJJbml0aWFsaXplciBleHRlbmRzIEluaXRpYWxpemVyIHsKICAvLy8gUmVmZXJlbmNlIHRvIHRoZSBjb25zdHJ1Y3RvciBiZWluZyBpbnZva2VkIGluIHRoZSBzdXBlciBjbGFzcy4gTm90IG51bGwuCiAgUmVmZXJlbmNlIHRhcmdldFJlZmVyZW5jZTsKICBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBTdXBlckluaXRpYWxpemVyKENvbnN0cnVjdG9yIHRhcmdldCwgQXJndW1lbnRzIGFyZ3VtZW50cykKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpLCBhcmd1bWVudHMpOwoKICBTdXBlckluaXRpYWxpemVyLmJ5UmVmZXJlbmNlKHRoaXMudGFyZ2V0UmVmZXJlbmNlLCB0aGlzLmFyZ3VtZW50cykgewogICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzQ29uc3RydWN0b3I7CgogIHZvaWQgc2V0IHRhcmdldChDb25zdHJ1Y3RvciB0YXJnZXQpIHsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgYWNjZXB0KEluaXRpYWxpemVyVmlzaXRvciB2KSA9PiB2LnZpc2l0U3VwZXJJbml0aWFsaXplcih0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHRhcmdldD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgYXJndW1lbnRzPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzID0gYXJndW1lbnRzLmFjY2VwdCh2KTsKICAgICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEEgcmVkaXJlY3RpbmcgY2FsbCBgdGhpcyh4LHkpYCBvY2N1cnJpbmcgaW4gdGhlIGluaXRpYWxpemVyIGxpc3Qgb2YKLy8vIGEgY29uc3RydWN0b3IuCi8vCi8vIFRPRE86IFRoZSBmcm9udGVuZCBzaG91bGQgY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IGluaXRpYWxpemVyIGFuZCBpZiB0aGUKLy8gY29uc3RydWN0b3IgaGFzIGEgYm9keSBvciBpZiB0aGVyZSBpcyBhIGN5Y2xlIGluIHRoZSBpbml0aWFsaXplciBjYWxscy4KY2xhc3MgUmVkaXJlY3RpbmdJbml0aWFsaXplciBleHRlbmRzIEluaXRpYWxpemVyIHsKICAvLy8gUmVmZXJlbmNlIHRvIHRoZSBjb25zdHJ1Y3RvciBiZWluZyBpbnZva2VkIGluIHRoZSBzYW1lIGNsYXNzLiBOb3QgbnVsbC4KICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwogIEFyZ3VtZW50cyBhcmd1bWVudHM7CgogIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoQ29uc3RydWN0b3IgdGFyZ2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCksIGFyZ3VtZW50cyk7CgogIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIuYnlSZWZlcmVuY2UodGhpcy50YXJnZXRSZWZlcmVuY2UsIHRoaXMuYXJndW1lbnRzKSB7CiAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNDb25zdHJ1Y3RvcjsKCiAgdm9pZCBzZXQgdGFyZ2V0KENvbnN0cnVjdG9yIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBhY2NlcHQoSW5pdGlhbGl6ZXJWaXNpdG9yIHYpID0+IHYudmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICBhcmd1bWVudHM/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMuYWNjZXB0KHYpOwogICAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQmluZGluZyBvZiBhIHRlbXBvcmFyeSB2YXJpYWJsZSBpbiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBvZiBhIGNvbnN0cnVjdG9yLgovLy8KLy8vIFRoZSB2YXJpYWJsZSBpcyBpbiBzY29wZSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCwgYnV0IGlzCi8vLyBub3QgaW4gc2NvcGUgaW4gdGhlIGNvbnN0cnVjdG9yIGJvZHkuCmNsYXNzIExvY2FsSW5pdGlhbGl6ZXIgZXh0ZW5kcyBJbml0aWFsaXplciB7CiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsKCiAgTG9jYWxJbml0aWFsaXplcih0aGlzLnZhcmlhYmxlKSB7CiAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChJbml0aWFsaXplclZpc2l0b3IgdikgPT4gdi52aXNpdExvY2FsSW5pdGlhbGl6ZXIodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2YXJpYWJsZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5hY2NlcHQodik7CiAgICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgQXNzZXJ0SW5pdGlhbGl6ZXIgZXh0ZW5kcyBJbml0aWFsaXplciB7CiAgQXNzZXJ0U3RhdGVtZW50IHN0YXRlbWVudDsKCiAgQXNzZXJ0SW5pdGlhbGl6ZXIodGhpcy5zdGF0ZW1lbnQpIHsKICAgIHN0YXRlbWVudC5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KEluaXRpYWxpemVyVmlzaXRvciB2KSA9PiB2LnZpc2l0QXNzZXJ0SW5pdGlhbGl6ZXIodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBzdGF0ZW1lbnQuYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LmFjY2VwdCh2KTsKICAgIHN0YXRlbWVudC5wYXJlbnQgPSB0aGlzOwogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBBIGZ1bmN0aW9uIGRlY2xhcmVzIHBhcmFtZXRlcnMgYW5kIGhhcyBhIGJvZHkuCi8vLwovLy8gVGhpcyBtYXkgb2NjdXIgaW4gYSBwcm9jZWR1cmUsIGNvbnN0cnVjdG9yLCBmdW5jdGlvbiBleHByZXNzaW9uLCBvciBsb2NhbAovLy8gZnVuY3Rpb24gZGVjbGFyYXRpb24uCkBjb3EKY2xhc3MgRnVuY3Rpb25Ob2RlIGV4dGVuZHMgVHJlZU5vZGUgewogIC8vLyBFbmQgb2Zmc2V0IGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLiBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQKICAvLy8gdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKSBpZiB0aGUgZmlsZSBlbmQgb2Zmc2V0IGlzIG5vdCBhdmFpbGFibGUKICAvLy8gKHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgbm9uZSBpcyBzcGVjaWZpY2FsbHkgc2V0KS4KICBpbnQgZmlsZUVuZE9mZnNldCA9IFRyZWVOb2RlLm5vT2Zmc2V0OwoKICAvLy8gS2VybmVsIGFzeW5jIG1hcmtlciBmb3IgdGhlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBTZWUgYWxzbyBbZGFydEFzeW5jTWFya2VyXS4KICBBc3luY01hcmtlciBhc3luY01hcmtlcjsKCiAgLy8vIERhcnQgYXN5bmMgbWFya2VyIGZvciB0aGUgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIFNlZSBhbHNvIFthc3luY01hcmtlcl0uCiAgLy8vCiAgLy8vIEEgS2VybmVsIGZ1bmN0aW9uIGNhbiByZXByZXNlbnQgYSBEYXJ0IGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgYXN5bmMKICAvLy8gbWFya2VyLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgd2hlbiBhc3luYy9hd2FpdCBpcyB0cmFuc2xhdGVkIGF3YXksCiAgLy8vIGEgRGFydCBhc3luYyBmdW5jdGlvbiBtaWdodCBiZSByZXByZXNlbnRlZCBieSBhIEtlcm5lbCBzeW5jIGZ1bmN0aW9uLgogIEFzeW5jTWFya2VyIGRhcnRBc3luY01hcmtlcjsKCiAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICBAY29xc2luZ2xlZGVmCiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVyczsKICBAbm9jb3EKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVyczsKICBEYXJ0VHlwZSByZXR1cm5UeXBlOyAvLyBOb3QgbnVsbC4KICBTdGF0ZW1lbnQgX2JvZHk7CgogIHZvaWQgRnVuY3Rpb24oKSBsYXp5QnVpbGRlcjsKCiAgdm9pZCBfYnVpbGRMYXp5KCkgewogICAgaWYgKGxhenlCdWlsZGVyICE9IG51bGwpIHsKICAgICAgdmFyIGxhenlCdWlsZGVyTG9jYWwgPSBsYXp5QnVpbGRlcjsKICAgICAgbGF6eUJ1aWxkZXIgPSBudWxsOwogICAgICBsYXp5QnVpbGRlckxvY2FsKCk7CiAgICB9CiAgfQoKICBTdGF0ZW1lbnQgZ2V0IGJvZHkgewogICAgX2J1aWxkTGF6eSgpOwogICAgcmV0dXJuIF9ib2R5OwogIH0KCiAgdm9pZCBzZXQgYm9keShTdGF0ZW1lbnQgYm9keSkgewogICAgX2J1aWxkTGF6eSgpOwogICAgX2JvZHkgPSBib2R5OwogIH0KCiAgRnVuY3Rpb25Ob2RlKHRoaXMuX2JvZHksCiAgICAgIHtMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycywKICAgICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgIHRoaXMucmV0dXJuVHlwZTogY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgdGhpcy5hc3luY01hcmtlcjogQXN5bmNNYXJrZXIuU3luYywKICAgICAgdGhpcy5kYXJ0QXN5bmNNYXJrZXJ9KQogICAgICA6IHRoaXMucG9zaXRpb25hbFBhcmFtZXRlcnMgPQogICAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycyA/PyA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXSwKICAgICAgICB0aGlzLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPQogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50ID8/IHBvc2l0aW9uYWxQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCwKICAgICAgICB0aGlzLm5hbWVkUGFyYW1ldGVycyA9IG5hbWVkUGFyYW1ldGVycyA/PyA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXSwKICAgICAgICB0aGlzLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnMgPz8gPFR5cGVQYXJhbWV0ZXI+W10gewogICAgYXNzZXJ0KHJldHVyblR5cGUgIT0gbnVsbCk7CiAgICBzZXRQYXJlbnRzKHRoaXMudHlwZVBhcmFtZXRlcnMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5uYW1lZFBhcmFtZXRlcnMsIHRoaXMpOwogICAgX2JvZHk/LnBhcmVudCA9IHRoaXM7CiAgICBkYXJ0QXN5bmNNYXJrZXIgPz89IGFzeW5jTWFya2VyOwogIH0KCiAgc3RhdGljIERhcnRUeXBlIF9nZXRUeXBlT2ZWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpID0+IG5vZGUudHlwZTsKCiAgc3RhdGljIE5hbWVkVHlwZSBfZ2V0TmFtZWRUeXBlT2ZWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTmFtZWRUeXBlKG5vZGUubmFtZSwgbm9kZS50eXBlLCBpc1JlcXVpcmVkOiBub2RlLmlzUmVxdWlyZWQpOwogIH0KCiAgRnVuY3Rpb25UeXBlIGdldCBmdW5jdGlvblR5cGUgewogICAgVHJlZU5vZGUgcGFyZW50ID0gdGhpcy5wYXJlbnQ7CiAgICBMaXN0PE5hbWVkVHlwZT4gbmFtZWQgPQogICAgICAgIG5hbWVkUGFyYW1ldGVycy5tYXAoX2dldE5hbWVkVHlwZU9mVmFyaWFibGUpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgbmFtZWQuc29ydCgpOwogICAgLy8gV2UgbmVlZCBjcmVhdGUgYSBjb3B5IG9mIHRoZSBsaXN0IG9mIHR5cGUgcGFyYW1ldGVycywgb3RoZXJ3aXNlCiAgICAvLyB0cmFuc2Zvcm1hdGlvbnMgbGlrZSBlcmFzdXJlIGRvbid0IHdvcmsuCiAgICB2YXIgdHlwZVBhcmFtZXRlcnNDb3B5ID0gbmV3IExpc3Q8VHlwZVBhcmFtZXRlcj4uZnJvbShwYXJlbnQgaXMgQ29uc3RydWN0b3IKICAgICAgICA/IHBhcmVudC5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycwogICAgICAgIDogdHlwZVBhcmFtZXRlcnMpOwogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUoCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKF9nZXRUeXBlT2ZWYXJpYWJsZSkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSksCiAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVyc0NvcHksCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgfQoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdEZ1bmN0aW9uTm9kZSh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdCh0eXBlUGFyYW1ldGVycywgdik7CiAgICB2aXNpdExpc3QocG9zaXRpb25hbFBhcmFtZXRlcnMsIHYpOwogICAgdmlzaXRMaXN0KG5hbWVkUGFyYW1ldGVycywgdik7CiAgICByZXR1cm5UeXBlPy5hY2NlcHQodik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KHR5cGVQYXJhbWV0ZXJzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QocG9zaXRpb25hbFBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChuYW1lZFBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgcmV0dXJuVHlwZSA9IHYudmlzaXREYXJ0VHlwZShyZXR1cm5UeXBlKTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKZW51bSBBc3luY01hcmtlciB7CiAgLy8gRG8gbm90IGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlc2UsIHRoZSBmcm9udGVuZHMgZGVwZW5kIG9uIGl0LgogIFN5bmMsCiAgU3luY1N0YXIsCiAgQXN5bmMsCiAgQXN5bmNTdGFyLAoKICAvLyBgU3luY1lpZWxkaW5nYCBpcyBhIG1hcmtlciB0aGF0IHRlbGxzIERhcnQgVk0gdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGFuCiAgLy8gYXJ0aWZpY2lhbCBjbG9zdXJlIGludHJvZHVjZWQgYnkgYW4gYXN5bmMgdHJhbnNmb3JtZXIgd2hpY2ggZGVzdWdhcmVkIGFsbAogIC8vIGFzeW5jIHN5bnRheCBpbnRvIGEgY29tYmluYXRpb24gb2YgbmF0aXZlIHlpZWxkcyBhbmQgaGVscGVyIG1ldGhvZCBjYWxscy4KICAvLwogIC8vIE5hdGl2ZSB5aWVsZHMgKGZvcm1hdHRlZCBhcyBgW3lpZWxkXWApIGFyZSBzZW1hbnRpY2FsbHkgY2xvc2UgdG8KICAvLyBgeWllbGQgeGAgc3RhdGVtZW50OiB0aGV5IGRlbm90ZSBhIHlpZWxkL3Jlc3VtZSBwb2ludCB3aXRoaW4gYSBmdW5jdGlvbgogIC8vIGJ1dCBhcmUgY29tcGxldGVseSBkZWNvdXBsZWQgZnJvbSB0aGUgbm90aW9uIG9mIGl0ZXJhdG9ycy4gV2hlbgogIC8vIGV4ZWN1dGlvbiBvZiB0aGUgY2xvc3VyZSByZWFjaGVzIGBbeWllbGRdIHhgIGl0IHN0b3BzIGFuZCByZXR1cm4gdGhlCiAgLy8gdmFsdWUgb2YgYHhgIHRvIHRoZSBjYWxsZXIuIElmIGNsb3N1cmUgaXMgY2FsbGVkIGFnYWluIGl0IGNvbnRpbnVlcwogIC8vIHRvIHRoZSBuZXh0IHN0YXRlbWVudCBhZnRlciB0aGlzIHlpZWxkIGFzIGlmIGl0IHdhcyBzdXNwZW5kZWQgYW5kIHJlc3VtZWQuCiAgLy8KICAvLyBDb25zaWRlciB0aGlzIGV4YW1wbGU6CiAgLy8KICAvLyAgIGcoKSB7CiAgLy8gICAgIHZhciA6YXdhaXRfanVtcF92YXIgPSAwOwogIC8vICAgICB2YXIgOmF3YWl0X2N0eF92YXI7CiAgLy8KICAvLyAgICAgZih4KSB5aWVsZGluZyB7CiAgLy8gICAgICAgW3lpZWxkXSAnJHt4fTowJzsKICAvLyAgICAgICBbeWllbGRdICcke3h9OjEnOwogIC8vICAgICAgIFt5aWVsZF0gJyR7eH06Mic7CiAgLy8gICAgIH0KICAvLwogIC8vICAgICByZXR1cm4gZjsKICAvLyAgIH0KICAvLwogIC8vICAgcHJpbnQoZignYScpKTsgIC8qIHByaW50cyAnYTowJywgOmF3YWl0X2p1bXBfdmFyID0gMSAgKi8KICAvLyAgIHByaW50KGYoJ2InKSk7ICAvKiBwcmludHMgJ2I6MScsIDphd2FpdF9qdW1wX3ZhciA9IDIgICovCiAgLy8gICBwcmludChmKCdjJykpOyAgLyogcHJpbnRzICdjOjInLCA6YXdhaXRfanVtcF92YXIgPSAzICAqLwogIC8vCiAgLy8gTm90ZTogY3VycmVudGx5IERhcnQgVk0gaW1wbGljaXRseSByZWxpZXMgb24gYXN5bmMgdHJhbnNmb3JtZXIgdG8KICAvLyBpbmplY3QgY2VydGFpbiBhcnRpZmljaWFsIHZhcmlhYmxlcyBpbnRvIGcgKGxpa2UgYDphd2FpdF9qdW1wX3ZhcmApLgogIC8vIEFzIHN1Y2ggU3luY1lpZWxkaW5nIGFuZCBuYXRpdmUgeWllbGQgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIG9uIHRoZWlyCiAgLy8gb3duLCBidXQgYXJlIHJhdGhlciBhbiBpbXBsZW1lbnRhdGlvbiBhcnRpZmFjdCBvZiB0aGUgYXN5bmMgdHJhbnNmb3JtZXIKICAvLyBpdHNlbGYuCiAgU3luY1lpZWxkaW5nLAp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUFJFU1NJT05TCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQGNvcQphYnN0cmFjdCBjbGFzcyBFeHByZXNzaW9uIGV4dGVuZHMgVHJlZU5vZGUgewogIC8vLyBSZXR1cm5zIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi4KICAvLy8KICAvLy8gU2hvdWxkbid0IGJlIHVzZWQgb24gY29kZSBjb21waWxlZCBpbiBsZWdhY3kgbW9kZSwgYXMgdGhpcyBtZXRob2QgYXNzdW1lcwogIC8vLyB0aGUgSVIgaXMgc3Ryb25nbHkgdHlwZWQuCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpOwoKICAvLy8gUmV0dXJucyB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gYXMgYW4gaW5zdGFudGlhdGlvbiBvZgogIC8vLyBbc3VwZXJjbGFzc10uCiAgLy8vCiAgLy8vIFNob3VsZG4ndCBiZSB1c2VkIG9uIGNvZGUgY29tcGlsZWQgaW4gbGVnYWN5IG1vZGUsIGFzIHRoaXMgbWV0aG9kIGFzc3VtZXMKICAvLy8gdGhlIElSIGlzIHN0cm9uZ2x5IHR5cGVkLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBmdXJ0aGVybW9yZSBhc3N1bWVzIHRoYXQgdGhlIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gYWN0dWFsbHkKICAvLy8gaXMgYSBzdWJ0eXBlIG9mIChzb21lIGluc3RhbnRpYXRpb24gb2YpIHRoZSBnaXZlbiBbc3VwZXJjbGFzc10uCiAgLy8vIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBlaXRoZXIgYW4gZXhjZXB0aW9uIGlzIHRocm93biBvciB0aGUgcmF3IHR5cGUgb2YKICAvLy8gW3N1cGVyY2xhc3NdIGlzIHJldHVybmVkLgogIEludGVyZmFjZVR5cGUgZ2V0U3RhdGljVHlwZUFzSW5zdGFuY2VPZigKICAgICAgQ2xhc3Mgc3VwZXJjbGFzcywgVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoZSBwcm9ncmFtIGlzIGNvcnJlY3RseSB0eXBlZCwgc28gaWYgdGhlIHN1cGVyY2xhc3MKICAgIC8vIGlzIG5vdCBnZW5lcmljLCB3ZSBjYW4ganVzdCByZXR1cm4gaXRzIHJhdyB0eXBlIHdpdGhvdXQgY29tcHV0aW5nIHRoZQogICAgLy8gdHlwZSBvZiB0aGlzIGV4cHJlc3Npb24uICBJdCBhbHNvIGVuc3VyZXMgdGhhdCBhbGwgdHlwZXMgYXJlIGNvbnNpZGVyZWQKICAgIC8vIHN1YnR5cGVzIG9mIE9iamVjdCAobm90IGp1c3QgaW50ZXJmYWNlIHR5cGVzKSwgYW5kIGZ1bmN0aW9uIHR5cGVzIGFyZQogICAgLy8gY29uc2lkZXJlZCBzdWJ0eXBlcyBvZiBGdW5jdGlvbi4KICAgIGlmIChzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIHN1cGVyY2xhc3MucmF3VHlwZTsKICAgIH0KICAgIHZhciB0eXBlID0gZ2V0U3RhdGljVHlwZSh0eXBlcyk7CiAgICB3aGlsZSAodHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICB0eXBlID0gKHR5cGUgYXMgVHlwZVBhcmFtZXRlclR5cGUpLnBhcmFtZXRlci5ib3VuZDsKICAgIH0KICAgIGlmICh0eXBlID09IHR5cGVzLm51bGxUeXBlKSB7CiAgICAgIHJldHVybiBzdXBlcmNsYXNzLmJvdHRvbVR5cGU7CiAgICB9CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIHZhciB1cGNhc3RUeXBlID0gdHlwZXMuZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlLCBzdXBlcmNsYXNzKTsKICAgICAgaWYgKHVwY2FzdFR5cGUgIT0gbnVsbCkgcmV0dXJuIHVwY2FzdFR5cGU7CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgQm90dG9tVHlwZSkgewogICAgICByZXR1cm4gc3VwZXJjbGFzcy5ib3R0b21UeXBlOwogICAgfQogICAgdHlwZXMudHlwZUVycm9yKHRoaXMsICckdHlwZSBpcyBub3QgYSBzdWJ0eXBlIG9mICRzdXBlcmNsYXNzJyk7CiAgICByZXR1cm4gc3VwZXJjbGFzcy5yYXdUeXBlOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZyk7Cn0KCi8vLyBBbiBleHByZXNzaW9uIGNvbnRhaW5pbmcgY29tcGlsZS10aW1lIGVycm9ycy4KLy8vCi8vLyBTaG91bGQgdGhyb3cgYSBydW50aW1lIGVycm9yIHdoZW4gZXZhbHVhdGVkLgpjbGFzcyBJbnZhbGlkRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIFN0cmluZyBtZXNzYWdlOwoKICBJbnZhbGlkRXhwcmVzc2lvbih0aGlzLm1lc3NhZ2UpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gY29uc3QgQm90dG9tVHlwZSgpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEludmFsaWRFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEludmFsaWRFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCi8vLyBSZWFkIGEgbG9jYWwgdmFyaWFibGUsIGEgbG9jYWwgZnVuY3Rpb24sIG9yIGEgZnVuY3Rpb24gcGFyYW1ldGVyLgpAY29xCmNsYXNzIFZhcmlhYmxlR2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsKICBAbm9jb3EKICBEYXJ0VHlwZSBwcm9tb3RlZFR5cGU7IC8vIE51bGwgaWYgbm90IHByb21vdGVkLgoKICBWYXJpYWJsZUdldCh0aGlzLnZhcmlhYmxlLCBbdGhpcy5wcm9tb3RlZFR5cGVdKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiBwcm9tb3RlZFR5cGUgPz8gdmFyaWFibGUudHlwZTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0VmFyaWFibGVHZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VmFyaWFibGVHZXQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHByb21vdGVkVHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHByb21vdGVkVHlwZSAhPSBudWxsKSB7CiAgICAgIHByb21vdGVkVHlwZSA9IHYudmlzaXREYXJ0VHlwZShwcm9tb3RlZFR5cGUpOwogICAgfQogIH0KfQoKLy8vIEFzc2lnbiBhIGxvY2FsIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIHBhcmFtZXRlci4KLy8vCi8vLyBFdmFsdWF0ZXMgdG8gdGhlIHZhbHVlIG9mIFt2YWx1ZV0uCmNsYXNzIFZhcmlhYmxlU2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsKICBFeHByZXNzaW9uIHZhbHVlOwoKICBWYXJpYWJsZVNldCh0aGlzLnZhcmlhYmxlLCB0aGlzLnZhbHVlKSB7CiAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB2YWx1ZS5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRWYXJpYWJsZVNldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRWYXJpYWJsZVNldCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmFsdWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHguZmllbGRgLgovLy8KLy8vIFRoaXMgbWF5IGludm9rZSBhIGdldHRlciwgcmVhZCBhIGZpZWxkLCBvciB0ZWFyIG9mZiBhIG1ldGhvZC4KQGNvcQpjbGFzcyBQcm9wZXJ0eUdldCBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgQGNvcQogIE5hbWUgbmFtZTsKCiAgQG5vY29xCiAgUmVmZXJlbmNlIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZTsKCiAgUHJvcGVydHlHZXQoRXhwcmVzc2lvbiByZWNlaXZlciwgTmFtZSBuYW1lLCBbTWVtYmVyIGludGVyZmFjZVRhcmdldF0pCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShyZWNlaXZlciwgbmFtZSwgZ2V0TWVtYmVyUmVmZXJlbmNlKGludGVyZmFjZVRhcmdldCkpOwoKICBQcm9wZXJ0eUdldC5ieVJlZmVyZW5jZSgKICAgICAgdGhpcy5yZWNlaXZlciwgdGhpcy5uYW1lLCB0aGlzLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSkgewogICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBNZW1iZXIgZ2V0IGludGVyZmFjZVRhcmdldCA9PiBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCBpbnRlcmZhY2VUYXJnZXQoTWVtYmVyIG1lbWJlcikgewogICAgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKG1lbWJlcik7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgdmFyIGludGVyZmFjZVRhcmdldCA9IHRoaXMuaW50ZXJmYWNlVGFyZ2V0OwogICAgaWYgKGludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIENsYXNzIHN1cGVyY2xhc3MgPSBpbnRlcmZhY2VUYXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIHZhciByZWNlaXZlclR5cGUgPSByZWNlaXZlci5nZXRTdGF0aWNUeXBlQXNJbnN0YW5jZU9mKHN1cGVyY2xhc3MsIHR5cGVzKTsKICAgICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlclR5cGUpCiAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlVGFyZ2V0LmdldHRlclR5cGUpOwogICAgfQogICAgLy8gVHJlYXQgdGhlIHByb3BlcnRpZXMgb2YgT2JqZWN0IHNwZWNpYWxseS4KICAgIFN0cmluZyBuYW1lU3RyaW5nID0gbmFtZS5uYW1lOwogICAgaWYgKG5hbWVTdHJpbmcgPT0gJ2hhc2hDb2RlJykgewogICAgICByZXR1cm4gdHlwZXMuaW50VHlwZTsKICAgIH0gZWxzZSBpZiAobmFtZVN0cmluZyA9PSAncnVudGltZVR5cGUnKSB7CiAgICAgIHJldHVybiB0eXBlcy50eXBlVHlwZTsKICAgIH0KICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRQcm9wZXJ0eUdldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRQcm9wZXJ0eUdldCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgcmVjZWl2ZXI/LmFjY2VwdCh2KTsKICAgIG5hbWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChyZWNlaXZlciAhPSBudWxsKSB7CiAgICAgIHJlY2VpdmVyID0gcmVjZWl2ZXIuYWNjZXB0KHYpOwogICAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHguZmllbGQgPSB2YWx1ZWAuCi8vLwovLy8gVGhpcyBtYXkgaW52b2tlIGEgc2V0dGVyIG9yIGFzc2lnbiBhIGZpZWxkLgovLy8KLy8vIEV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgW3ZhbHVlXS4KY2xhc3MgUHJvcGVydHlTZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIHJlY2VpdmVyOwogIE5hbWUgbmFtZTsKICBFeHByZXNzaW9uIHZhbHVlOwoKICBSZWZlcmVuY2UgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICBQcm9wZXJ0eVNldChFeHByZXNzaW9uIHJlY2VpdmVyLCBOYW1lIG5hbWUsIEV4cHJlc3Npb24gdmFsdWUsCiAgICAgIFtNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0XSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWNlaXZlciwgbmFtZSwgdmFsdWUsIGdldE1lbWJlclJlZmVyZW5jZShpbnRlcmZhY2VUYXJnZXQpKTsKCiAgUHJvcGVydHlTZXQuYnlSZWZlcmVuY2UoCiAgICAgIHRoaXMucmVjZWl2ZXIsIHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgdGhpcy5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpIHsKICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBNZW1iZXIgZ2V0IGludGVyZmFjZVRhcmdldCA9PiBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCBpbnRlcmZhY2VUYXJnZXQoTWVtYmVyIG1lbWJlcikgewogICAgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKG1lbWJlcik7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdmFsdWUuZ2V0U3RhdGljVHlwZSh0eXBlcyk7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0UHJvcGVydHlTZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0UHJvcGVydHlTZXQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHJlY2VpdmVyPy5hY2NlcHQodik7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgICB2YWx1ZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgcmVjZWl2ZXIgPSByZWNlaXZlci5hY2NlcHQodik7CiAgICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgdmFsdWUgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIERpcmVjdGx5IHJlYWQgYSBmaWVsZCwgY2FsbCBhIGdldHRlciwgb3IgdGVhciBvZmYgYSBtZXRob2QuCmNsYXNzIERpcmVjdFByb3BlcnR5R2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiByZWNlaXZlcjsKICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwoKICBEaXJlY3RQcm9wZXJ0eUdldChFeHByZXNzaW9uIHJlY2VpdmVyLCBNZW1iZXIgdGFyZ2V0KQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UocmVjZWl2ZXIsIGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpKTsKCiAgRGlyZWN0UHJvcGVydHlHZXQuYnlSZWZlcmVuY2UodGhpcy5yZWNlaXZlciwgdGhpcy50YXJnZXRSZWZlcmVuY2UpIHsKICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgTWVtYmVyIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgdGFyZ2V0KE1lbWJlciB0YXJnZXQpIHsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHJlY2VpdmVyPy5hY2NlcHQodik7CiAgICB0YXJnZXQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChyZWNlaXZlciAhPSBudWxsKSB7CiAgICAgIHJlY2VpdmVyID0gcmVjZWl2ZXIuYWNjZXB0KHYpOwogICAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0RGlyZWN0UHJvcGVydHlHZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0RGlyZWN0UHJvcGVydHlHZXQodGhpcywgYXJnKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIENsYXNzIHN1cGVyY2xhc3MgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICB2YXIgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIuZ2V0U3RhdGljVHlwZUFzSW5zdGFuY2VPZihzdXBlcmNsYXNzLCB0eXBlcyk7CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHJlY2VpdmVyVHlwZSkKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodGFyZ2V0LmdldHRlclR5cGUpOwogIH0KfQoKLy8vIERpcmVjdGx5IGFzc2lnbiBhIGZpZWxkLCBvciBjYWxsIGEgc2V0dGVyLgovLy8KLy8vIEV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgW3ZhbHVlXS4KY2xhc3MgRGlyZWN0UHJvcGVydHlTZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIHJlY2VpdmVyOwogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CiAgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgRGlyZWN0UHJvcGVydHlTZXQoRXhwcmVzc2lvbiByZWNlaXZlciwgTWVtYmVyIHRhcmdldCwgRXhwcmVzc2lvbiB2YWx1ZSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKHJlY2VpdmVyLCBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KSwgdmFsdWUpOwoKICBEaXJlY3RQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgdGhpcy5yZWNlaXZlciwgdGhpcy50YXJnZXRSZWZlcmVuY2UsIHRoaXMudmFsdWUpIHsKICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBNZW1iZXIgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCB0YXJnZXQoTWVtYmVyIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgcmVjZWl2ZXI/LmFjY2VwdCh2KTsKICAgIHRhcmdldD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgdmFsdWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChyZWNlaXZlciAhPSBudWxsKSB7CiAgICAgIHJlY2VpdmVyID0gcmVjZWl2ZXIuYWNjZXB0KHYpOwogICAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0RGlyZWN0UHJvcGVydHlTZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0RGlyZWN0UHJvcGVydHlTZXQodGhpcywgYXJnKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHZhbHVlLmdldFN0YXRpY1R5cGUodHlwZXMpOwp9CgovLy8gRGlyZWN0bHkgY2FsbCBhbiBpbnN0YW5jZSBtZXRob2QsIGJ5cGFzc2luZyBvcmRpbmFyeSBkaXNwYXRjaC4KY2xhc3MgRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBleHRlbmRzIEludm9jYXRpb25FeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIHJlY2VpdmVyOwogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CiAgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgRGlyZWN0TWV0aG9kSW52b2NhdGlvbigKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgUHJvY2VkdXJlIHRhcmdldCwgQXJndW1lbnRzIGFyZ3VtZW50cykKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKHJlY2VpdmVyLCBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KSwgYXJndW1lbnRzKTsKCiAgRGlyZWN0TWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgdGhpcy5yZWNlaXZlciwgdGhpcy50YXJnZXRSZWZlcmVuY2UsIHRoaXMuYXJndW1lbnRzKSB7CiAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICB9CgogIFByb2NlZHVyZSBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNQcm9jZWR1cmU7CgogIHZvaWQgc2V0IHRhcmdldChQcm9jZWR1cmUgdGFyZ2V0KSB7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIE5hbWUgZ2V0IG5hbWUgPT4gdGFyZ2V0Py5uYW1lOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgcmVjZWl2ZXI/LmFjY2VwdCh2KTsKICAgIHRhcmdldD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgYXJndW1lbnRzPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAocmVjZWl2ZXIgIT0gbnVsbCkgewogICAgICByZWNlaXZlciA9IHJlY2VpdmVyLmFjY2VwdCh2KTsKICAgICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzID0gYXJndW1lbnRzLmFjY2VwdCh2KTsKICAgICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4KICAgICAgdi52aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24odGhpcywgYXJnKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIGlmICh0eXBlcy5pc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IodGFyZ2V0KSkgewogICAgICByZXR1cm4gdHlwZXMuZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMocmVjZWl2ZXIuZ2V0U3RhdGljVHlwZSh0eXBlcyksCiAgICAgICAgICBhcmd1bWVudHMucG9zaXRpb25hbFswXS5nZXRTdGF0aWNUeXBlKHR5cGVzKSk7CiAgICB9CiAgICBDbGFzcyBzdXBlcmNsYXNzID0gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgdmFyIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmdldFN0YXRpY1R5cGVBc0luc3RhbmNlT2Yoc3VwZXJjbGFzcywgdHlwZXMpOwogICAgdmFyIHJldHVyblR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUocmVjZWl2ZXJUeXBlKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0YXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLCBhcmd1bWVudHMudHlwZXMpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHJldHVyblR5cGUpOwogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgc3VwZXIuZmllbGRgLgovLy8KLy8vIFRoaXMgbWF5IGludm9rZSBhIGdldHRlciwgcmVhZCBhIGZpZWxkLCBvciB0ZWFyIG9mZiBhIG1ldGhvZC4KY2xhc3MgU3VwZXJQcm9wZXJ0eUdldCBleHRlbmRzIEV4cHJlc3Npb24gewogIE5hbWUgbmFtZTsKCiAgUmVmZXJlbmNlIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZTsKCiAgU3VwZXJQcm9wZXJ0eUdldChOYW1lIG5hbWUsIFtNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0XSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKG5hbWUsIGdldE1lbWJlclJlZmVyZW5jZShpbnRlcmZhY2VUYXJnZXQpKTsKCiAgU3VwZXJQcm9wZXJ0eUdldC5ieVJlZmVyZW5jZSh0aGlzLm5hbWUsIHRoaXMuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKCiAgTWVtYmVyIGdldCBpbnRlcmZhY2VUYXJnZXQgPT4gaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgaW50ZXJmYWNlVGFyZ2V0KE1lbWJlciBtZW1iZXIpIHsKICAgIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZShtZW1iZXIpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIENsYXNzIGRlY2xhcmluZ0NsYXNzID0gaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKGRlY2xhcmluZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIGludGVyZmFjZVRhcmdldC5nZXR0ZXJUeXBlOwogICAgfQogICAgdmFyIHJlY2VpdmVyID0gdHlwZXMuZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlcy50aGlzVHlwZSwgZGVjbGFyaW5nQ2xhc3MpOwogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlcikKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlVGFyZ2V0LmdldHRlclR5cGUpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTdXBlclByb3BlcnR5R2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN1cGVyUHJvcGVydHlHZXQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIG5hbWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHN1cGVyLmZpZWxkID0gdmFsdWVgLgovLy8KLy8vIFRoaXMgbWF5IGludm9rZSBhIHNldHRlciBvciBhc3NpZ24gYSBmaWVsZC4KLy8vCi8vLyBFdmFsdWF0ZXMgdG8gdGhlIHZhbHVlIG9mIFt2YWx1ZV0uCmNsYXNzIFN1cGVyUHJvcGVydHlTZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBOYW1lIG5hbWU7CiAgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgUmVmZXJlbmNlIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZTsKCiAgU3VwZXJQcm9wZXJ0eVNldChOYW1lIG5hbWUsIEV4cHJlc3Npb24gdmFsdWUsIE1lbWJlciBpbnRlcmZhY2VUYXJnZXQpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShuYW1lLCB2YWx1ZSwgZ2V0TWVtYmVyUmVmZXJlbmNlKGludGVyZmFjZVRhcmdldCkpOwoKICBTdXBlclByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKAogICAgICB0aGlzLm5hbWUsIHRoaXMudmFsdWUsIHRoaXMuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKSB7CiAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICB9CgogIE1lbWJlciBnZXQgaW50ZXJmYWNlVGFyZ2V0ID0+IGludGVyZmFjZVRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IGludGVyZmFjZVRhcmdldChNZW1iZXIgbWVtYmVyKSB7CiAgICBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UobWVtYmVyKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB2YWx1ZS5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTdXBlclByb3BlcnR5U2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN1cGVyUHJvcGVydHlTZXQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIG5hbWU/LmFjY2VwdCh2KTsKICAgIHZhbHVlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB2YWx1ZSA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gUmVhZCBhIHN0YXRpYyBmaWVsZCwgY2FsbCBhIHN0YXRpYyBnZXR0ZXIsIG9yIHRlYXIgb2ZmIGEgc3RhdGljIG1ldGhvZC4KY2xhc3MgU3RhdGljR2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgLy8vIEEgc3RhdGljIGZpZWxkLCBnZXR0ZXIsIG9yIG1ldGhvZCAoZm9yIHRlYXItb2ZmKS4KICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwoKICBTdGF0aWNHZXQoTWVtYmVyIHRhcmdldCkgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpKTsKCiAgU3RhdGljR2V0LmJ5UmVmZXJlbmNlKHRoaXMudGFyZ2V0UmVmZXJlbmNlKTsKCiAgTWVtYmVyIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgdGFyZ2V0KE1lbWJlciB0YXJnZXQpIHsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHRhcmdldC5nZXR0ZXJUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFN0YXRpY0dldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTdGF0aWNHZXQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHRhcmdldD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKLy8vIEFzc2lnbiBhIHN0YXRpYyBmaWVsZCBvciBjYWxsIGEgc3RhdGljIHNldHRlci4KLy8vCi8vLyBFdmFsdWF0ZXMgdG8gdGhlIHZhbHVlIG9mIFt2YWx1ZV0uCmNsYXNzIFN0YXRpY1NldCBleHRlbmRzIEV4cHJlc3Npb24gewogIC8vLyBBIG11dGFibGUgc3RhdGljIGZpZWxkIG9yIGEgc3RhdGljIHNldHRlci4KICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwogIEV4cHJlc3Npb24gdmFsdWU7CgogIFN0YXRpY1NldChNZW1iZXIgdGFyZ2V0LCBFeHByZXNzaW9uIHZhbHVlKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCksIHZhbHVlKTsKCiAgU3RhdGljU2V0LmJ5UmVmZXJlbmNlKHRoaXMudGFyZ2V0UmVmZXJlbmNlLCB0aGlzLnZhbHVlKSB7CiAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICB9CgogIE1lbWJlciBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IHRhcmdldChNZW1iZXIgdGFyZ2V0KSB7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB2YWx1ZS5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTdGF0aWNTZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3RhdGljU2V0KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0YXJnZXQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZhbHVlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB2YWx1ZSA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gVGhlIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uIGNhbGwsIGRpdmlkZWQgaW50byB0eXBlIGFyZ3VtZW50cywKLy8vIHBvc2l0aW9uYWwgYXJndW1lbnRzLCBhbmQgbmFtZWQgYXJndW1lbnRzLgpAY29xCmNsYXNzIEFyZ3VtZW50cyBleHRlbmRzIFRyZWVOb2RlIHsKICBAbm9jb3EKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlczsKICBAY29xc2luZ2xlCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsOwogIExpc3Q8TmFtZWRFeHByZXNzaW9uPiBuYW1lZDsKCiAgQXJndW1lbnRzKHRoaXMucG9zaXRpb25hbCwKICAgICAge0xpc3Q8RGFydFR5cGU+IHR5cGVzLCBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWR9KQogICAgICA6IHRoaXMudHlwZXMgPSB0eXBlcyA/PyA8RGFydFR5cGU+W10sCiAgICAgICAgdGhpcy5uYW1lZCA9IG5hbWVkID8/IDxOYW1lZEV4cHJlc3Npb24+W10gewogICAgc2V0UGFyZW50cyh0aGlzLnBvc2l0aW9uYWwsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLm5hbWVkLCB0aGlzKTsKICB9CgogIEFyZ3VtZW50cy5lbXB0eSgpCiAgICAgIDogdHlwZXMgPSA8RGFydFR5cGU+W10sCiAgICAgICAgcG9zaXRpb25hbCA9IDxFeHByZXNzaW9uPltdLAogICAgICAgIG5hbWVkID0gPE5hbWVkRXhwcmVzc2lvbj5bXTsKCiAgZmFjdG9yeSBBcmd1bWVudHMuZm9yd2FyZGVkKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbikgewogICAgcmV0dXJuIG5ldyBBcmd1bWVudHMoCiAgICAgICAgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKChwKSA9PiBuZXcgVmFyaWFibGVHZXQocCkpLnRvTGlzdCgpLAogICAgICAgIG5hbWVkOiBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMKICAgICAgICAgICAgLm1hcCgocCkgPT4gbmV3IE5hbWVkRXhwcmVzc2lvbihwLm5hbWUsIG5ldyBWYXJpYWJsZUdldChwKSkpCiAgICAgICAgICAgIC50b0xpc3QoKSwKICAgICAgICB0eXBlczogZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMKICAgICAgICAgICAgLm1hcCgocCkgPT4gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHApKQogICAgICAgICAgICAudG9MaXN0KCkpOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRBcmd1bWVudHModGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QodHlwZXMsIHYpOwogICAgdmlzaXRMaXN0KHBvc2l0aW9uYWwsIHYpOwogICAgdmlzaXRMaXN0KG5hbWVkLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybVR5cGVMaXN0KHR5cGVzLCB2KTsKICAgIHRyYW5zZm9ybUxpc3QocG9zaXRpb25hbCwgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1MaXN0KG5hbWVkLCB2LCB0aGlzKTsKICB9Cn0KCi8vLyBBIG5hbWVkIGFyZ3VtZW50LCBgbmFtZTogdmFsdWVgLgpjbGFzcyBOYW1lZEV4cHJlc3Npb24gZXh0ZW5kcyBUcmVlTm9kZSB7CiAgU3RyaW5nIG5hbWU7CiAgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgTmFtZWRFeHByZXNzaW9uKHRoaXMubmFtZSwgdGhpcy52YWx1ZSkgewogICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdE5hbWVkRXhwcmVzc2lvbih0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZhbHVlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB2YWx1ZSA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQ29tbW9uIHN1cGVyIGNsYXNzIGZvciBbRGlyZWN0TWV0aG9kSW52b2NhdGlvbl0sIFtNZXRob2RJbnZvY2F0aW9uXSwKLy8vIFtTdXBlck1ldGhvZEludm9jYXRpb25dLCBbU3RhdGljSW52b2NhdGlvbl0sIGFuZCBbQ29uc3RydWN0b3JJbnZvY2F0aW9uXS4KQGNvcQphYnN0cmFjdCBjbGFzcyBJbnZvY2F0aW9uRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIEFyZ3VtZW50cyBnZXQgYXJndW1lbnRzOwogIHNldCBhcmd1bWVudHMoQXJndW1lbnRzIHZhbHVlKTsKCiAgLy8vIE5hbWUgb2YgdGhlIGludm9rZWQgbWV0aG9kLgogIC8vLwogIC8vLyBNYXkgYmUgYG51bGxgIGlmIHRoZSB0YXJnZXQgaXMgYSBzeW50aGV0aWMgc3RhdGljIG1lbWJlciB3aXRob3V0IGEgbmFtZS4KICBOYW1lIGdldCBuYW1lOwp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGB4LmZvbyh5KWAuCkBjb3EKY2xhc3MgTWV0aG9kSW52b2NhdGlvbiBleHRlbmRzIEludm9jYXRpb25FeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIHJlY2VpdmVyOwogIE5hbWUgbmFtZTsKICBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBSZWZlcmVuY2UgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICBNZXRob2RJbnZvY2F0aW9uKEV4cHJlc3Npb24gcmVjZWl2ZXIsIE5hbWUgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgW01lbWJlciBpbnRlcmZhY2VUYXJnZXRdKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlY2VpdmVyLCBuYW1lLCBhcmd1bWVudHMsIGdldE1lbWJlclJlZmVyZW5jZShpbnRlcmZhY2VUYXJnZXQpKTsKCiAgTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgdGhpcy5yZWNlaXZlciwgdGhpcy5uYW1lLCB0aGlzLmFyZ3VtZW50cywgdGhpcy5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpIHsKICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgTWVtYmVyIGdldCBpbnRlcmZhY2VUYXJnZXQgPT4gaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgaW50ZXJmYWNlVGFyZ2V0KE1lbWJlciB0YXJnZXQpIHsKICAgIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHZhciBpbnRlcmZhY2VUYXJnZXQgPSB0aGlzLmludGVyZmFjZVRhcmdldDsKICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCkgewogICAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0IGlzIFByb2NlZHVyZSAmJgogICAgICAgICAgdHlwZXMuaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKGludGVyZmFjZVRhcmdldCkpIHsKICAgICAgICByZXR1cm4gdHlwZXMuZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMoCiAgICAgICAgICAgIHJlY2VpdmVyLmdldFN0YXRpY1R5cGUodHlwZXMpLAogICAgICAgICAgICBhcmd1bWVudHMucG9zaXRpb25hbFswXS5nZXRTdGF0aWNUeXBlKHR5cGVzKSk7CiAgICAgIH0KICAgICAgQ2xhc3Mgc3VwZXJjbGFzcyA9IGludGVyZmFjZVRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgICAgdmFyIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmdldFN0YXRpY1R5cGVBc0luc3RhbmNlT2Yoc3VwZXJjbGFzcywgdHlwZXMpOwogICAgICB2YXIgZ2V0dGVyVHlwZSA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlclR5cGUpCiAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlVGFyZ2V0LmdldHRlclR5cGUpOwogICAgICBpZiAoZ2V0dGVyVHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICAgIGdldHRlclR5cGUudHlwZVBhcmFtZXRlcnMsIGFyZ3VtZW50cy50eXBlcykKICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGdldHRlclR5cGUucmV0dXJuVHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChuYW1lLm5hbWUgPT0gJ2NhbGwnKSB7CiAgICAgIHZhciByZWNlaXZlclR5cGUgPSByZWNlaXZlci5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKICAgICAgaWYgKHJlY2VpdmVyVHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICBpZiAocmVjZWl2ZXJUeXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSBhcmd1bWVudHMudHlwZXMubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gY29uc3QgQm90dG9tVHlwZSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICAgIHJlY2VpdmVyVHlwZS50eXBlUGFyYW1ldGVycywgYXJndW1lbnRzLnR5cGVzKQogICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUocmVjZWl2ZXJUeXBlLnJldHVyblR5cGUpOwogICAgICB9CiAgICB9CiAgICBpZiAobmFtZS5uYW1lID09ICc9PScpIHsKICAgICAgLy8gV2UgdXNlIHRoaXMgc3BlY2lhbCBjYXNlIHRvIHNpbXBsaWZ5IGdlbmVyYXRpb24gb2YgJz09JyBjaGVja3MuCiAgICAgIHJldHVybiB0eXBlcy5ib29sVHlwZTsKICAgIH0KICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRNZXRob2RJbnZvY2F0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdE1ldGhvZEludm9jYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHJlY2VpdmVyPy5hY2NlcHQodik7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgICBhcmd1bWVudHM/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChyZWNlaXZlciAhPSBudWxsKSB7CiAgICAgIHJlY2VpdmVyID0gcmVjZWl2ZXIuYWNjZXB0KHYpOwogICAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMuYWNjZXB0KHYpOwogICAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGBzdXBlci5mb28oeClgLgovLy8KLy8vIFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbWlnaHQgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXJnZXQuCmNsYXNzIFN1cGVyTWV0aG9kSW52b2NhdGlvbiBleHRlbmRzIEludm9jYXRpb25FeHByZXNzaW9uIHsKICBOYW1lIG5hbWU7CiAgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgUmVmZXJlbmNlIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZTsKCiAgU3VwZXJNZXRob2RJbnZvY2F0aW9uKE5hbWUgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgW1Byb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXRdKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UobmFtZSwgYXJndW1lbnRzLCBnZXRNZW1iZXJSZWZlcmVuY2UoaW50ZXJmYWNlVGFyZ2V0KSk7CgogIFN1cGVyTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgdGhpcy5uYW1lLCB0aGlzLmFyZ3VtZW50cywgdGhpcy5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpIHsKICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICB9CgogIFByb2NlZHVyZSBnZXQgaW50ZXJmYWNlVGFyZ2V0ID0+IGludGVyZmFjZVRhcmdldFJlZmVyZW5jZT8uYXNQcm9jZWR1cmU7CgogIHZvaWQgc2V0IGludGVyZmFjZVRhcmdldChQcm9jZWR1cmUgdGFyZ2V0KSB7CiAgICBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ID09IG51bGwpIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgQ2xhc3Mgc3VwZXJjbGFzcyA9IGludGVyZmFjZVRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIHZhciByZWNlaXZlclR5cGUgPSB0eXBlcy5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGVzLnRoaXNUeXBlLCBzdXBlcmNsYXNzKTsKICAgIHZhciByZXR1cm5UeXBlID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHJlY2VpdmVyVHlwZSkKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGUpOwogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgIGludGVyZmFjZVRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycywgYXJndW1lbnRzLnR5cGVzKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZShyZXR1cm5UeXBlKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgbmFtZT8uYWNjZXB0KHYpOwogICAgYXJndW1lbnRzPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzID0gYXJndW1lbnRzLmFjY2VwdCh2KTsKICAgICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgZm9vKHgpYCwgb3IgYGNvbnN0IGZvbyh4KWAgaWYgdGhlIHRhcmdldCBpcyBhbgovLy8gZXh0ZXJuYWwgY29uc3RhbnQgZmFjdG9yeS4KLy8vCi8vLyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIG1pZ2h0IG5vdCBtYXRjaCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgdGFyZ2V0LgpjbGFzcyBTdGF0aWNJbnZvY2F0aW9uIGV4dGVuZHMgSW52b2NhdGlvbkV4cHJlc3Npb24gewogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CiAgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgLy8vIFRydWUgaWYgdGhpcyBpcyBhIGNvbnN0YW50IGNhbGwgdG8gYW4gZXh0ZXJuYWwgY29uc3RhbnQgZmFjdG9yeS4KICBib29sIGlzQ29uc3Q7CgogIE5hbWUgZ2V0IG5hbWUgPT4gdGFyZ2V0Py5uYW1lOwoKICBTdGF0aWNJbnZvY2F0aW9uKFByb2NlZHVyZSB0YXJnZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMsIHtib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpLCBhcmd1bWVudHMsCiAgICAgICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBTdGF0aWNJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKHRoaXMudGFyZ2V0UmVmZXJlbmNlLCB0aGlzLmFyZ3VtZW50cywKICAgICAge3RoaXMuaXNDb25zdDogZmFsc2V9KSB7CiAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzUHJvY2VkdXJlOwoKICB2b2lkIHNldCB0YXJnZXQoUHJvY2VkdXJlIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgIHRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycywgYXJndW1lbnRzLnR5cGVzKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0YXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFN0YXRpY0ludm9jYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3RhdGljSW52b2NhdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICBhcmd1bWVudHM/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMuYWNjZXB0KHYpOwogICAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGBuZXcgRm9vKHgpYCBvciBgY29uc3QgRm9vKHgpYC4KLy8vCi8vLyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIG1pZ2h0IG5vdCBtYXRjaCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgdGFyZ2V0LgovLwovLyBERVNJR04gVE9ETzogU2hvdWxkIHdlIHBhc3MgdHlwZSBhcmd1bWVudHMgaW4gYSBzZXBhcmF0ZSBmaWVsZAovLyBgY2xhc3NUeXBlQXJndW1lbnRzYD8gVGhleSBhcmUgcXVpdGUgZGlmZmVyZW50IGZyb20gdHlwZSBhcmd1bWVudHMgdG8KLy8gZ2VuZXJpYyBmdW5jdGlvbnMuCkBjb3EKY2xhc3MgQ29uc3RydWN0b3JJbnZvY2F0aW9uIGV4dGVuZHMgSW52b2NhdGlvbkV4cHJlc3Npb24gewogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CiAgQG5vY29xCiAgQXJndW1lbnRzIGFyZ3VtZW50czsKICBib29sIGlzQ29uc3Q7CgogIE5hbWUgZ2V0IG5hbWUgPT4gdGFyZ2V0Py5uYW1lOwoKICBDb25zdHJ1Y3Rvckludm9jYXRpb24oQ29uc3RydWN0b3IgdGFyZ2V0LCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICB7Ym9vbCBpc0NvbnN0OiBmYWxzZX0pCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KSwgYXJndW1lbnRzLAogICAgICAgICAgICBpc0NvbnN0OiBpc0NvbnN0KTsKCiAgQ29uc3RydWN0b3JJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKHRoaXMudGFyZ2V0UmVmZXJlbmNlLCB0aGlzLmFyZ3VtZW50cywKICAgICAge3RoaXMuaXNDb25zdDogZmFsc2V9KSB7CiAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNDb25zdHJ1Y3RvcjsKCiAgdm9pZCBzZXQgdGFyZ2V0KENvbnN0cnVjdG9yIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIGFyZ3VtZW50cy50eXBlcy5pc0VtcHR5CiAgICAgICAgPyB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MucmF3VHlwZQogICAgICAgIDogbmV3IEludGVyZmFjZVR5cGUodGFyZ2V0LmVuY2xvc2luZ0NsYXNzLCBhcmd1bWVudHMudHlwZXMpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0YXJnZXQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIGFyZ3VtZW50cz8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50cyA9IGFyZ3VtZW50cy5hY2NlcHQodik7CiAgICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9CgogIEludGVyZmFjZVR5cGUgZ2V0IGNvbnN0cnVjdGVkVHlwZSB7CiAgICByZXR1cm4gYXJndW1lbnRzLnR5cGVzLmlzRW1wdHkKICAgICAgICA/IHRhcmdldC5lbmNsb3NpbmdDbGFzcy5yYXdUeXBlCiAgICAgICAgOiBuZXcgSW50ZXJmYWNlVHlwZSh0YXJnZXQuZW5jbG9zaW5nQ2xhc3MsIGFyZ3VtZW50cy50eXBlcyk7CiAgfQp9CgovLy8gQW4gZXhwbGljaXQgdHlwZSBpbnN0YW50aWF0aW9uIG9mIGEgZ2VuZXJpYyBmdW5jdGlvbi4KY2xhc3MgSW5zdGFudGlhdGlvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICBJbnN0YW50aWF0aW9uKHRoaXMuZXhwcmVzc2lvbiwgdGhpcy50eXBlQXJndW1lbnRzKSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gZXhwcmVzc2lvbi5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKHR5cGUudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0SW5zdGFudGlhdGlvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRJbnN0YW50aWF0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBleHByZXNzaW9uPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QodHlwZUFyZ3VtZW50cywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmFjY2VwdCh2KTsKICAgICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIHRyYW5zZm9ybVR5cGVMaXN0KHR5cGVBcmd1bWVudHMsIHYpOwogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgIXhgLgovLy8KLy8vIFRoZSBgaXMhYCBhbmQgYCE9YCBvcGVyYXRvcnMgYXJlIGRlc3VnYXJlZCBpbnRvIFtOb3RdIG5vZGVzIHdpdGggYGlzYCBhbmQKLy8vIGA9PWAgZXhwcmVzc2lvbnMgaW5zaWRlLCByZXNwZWN0aXZlbHkuCmNsYXNzIE5vdCBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gb3BlcmFuZDsKCiAgTm90KHRoaXMub3BlcmFuZCkgewogICAgb3BlcmFuZD8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5ib29sVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXROb3QodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Tm90KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBvcGVyYW5kPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAob3BlcmFuZCAhPSBudWxsKSB7CiAgICAgIG9wZXJhbmQgPSBvcGVyYW5kLmFjY2VwdCh2KTsKICAgICAgb3BlcmFuZD8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHggJiYgeWAgb3IgYHggfHwgeWAKY2xhc3MgTG9naWNhbEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIGxlZnQ7CiAgU3RyaW5nIG9wZXJhdG9yOyAvLyAmJiBvciB8fCBvciA/PwogIEV4cHJlc3Npb24gcmlnaHQ7CgogIExvZ2ljYWxFeHByZXNzaW9uKHRoaXMubGVmdCwgdGhpcy5vcGVyYXRvciwgdGhpcy5yaWdodCkgewogICAgbGVmdD8ucGFyZW50ID0gdGhpczsKICAgIHJpZ2h0Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmJvb2xUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdExvZ2ljYWxFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdExvZ2ljYWxFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBsZWZ0Py5hY2NlcHQodik7CiAgICByaWdodD8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGxlZnQgIT0gbnVsbCkgewogICAgICBsZWZ0ID0gbGVmdC5hY2NlcHQodik7CiAgICAgIGxlZnQ/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAocmlnaHQgIT0gbnVsbCkgewogICAgICByaWdodCA9IHJpZ2h0LmFjY2VwdCh2KTsKICAgICAgcmlnaHQ/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGB4ID8geSA6IHpgLgpjbGFzcyBDb25kaXRpb25hbEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICBFeHByZXNzaW9uIHRoZW47CiAgRXhwcmVzc2lvbiBvdGhlcndpc2U7CgogIC8vLyBUaGUgc3RhdGljIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24uIFNob3VsZCBub3QgYmUgYG51bGxgLgogIERhcnRUeXBlIHN0YXRpY1R5cGU7CgogIENvbmRpdGlvbmFsRXhwcmVzc2lvbigKICAgICAgdGhpcy5jb25kaXRpb24sIHRoaXMudGhlbiwgdGhpcy5vdGhlcndpc2UsIHRoaXMuc3RhdGljVHlwZSkgewogICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgdGhlbj8ucGFyZW50ID0gdGhpczsKICAgIG90aGVyd2lzZT8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiBzdGF0aWNUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGNvbmRpdGlvbj8uYWNjZXB0KHYpOwogICAgdGhlbj8uYWNjZXB0KHYpOwogICAgb3RoZXJ3aXNlPy5hY2NlcHQodik7CiAgICBzdGF0aWNUeXBlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHRoZW4gIT0gbnVsbCkgewogICAgICB0aGVuID0gdGhlbi5hY2NlcHQodik7CiAgICAgIHRoZW4/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAob3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgb3RoZXJ3aXNlID0gb3RoZXJ3aXNlLmFjY2VwdCh2KTsKICAgICAgb3RoZXJ3aXNlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHN0YXRpY1R5cGUgIT0gbnVsbCkgewogICAgICBzdGF0aWNUeXBlID0gdi52aXNpdERhcnRUeXBlKHN0YXRpY1R5cGUpOwogICAgfQogIH0KfQoKLy8vIENvbnZlcnQgZXhwcmVzc2lvbnMgdG8gc3RyaW5ncyBhbmQgY29uY2F0ZW5hdGUgdGhlbS4gIFNlbWFudGljYWxseSwgY2FsbHMKLy8vIGB0b1N0cmluZ2Agb24gZXZlcnkgYXJndW1lbnQsIGNoZWNrcyB0aGF0IGEgc3RyaW5nIGlzIHJldHVybmVkLCBhbmQgcmV0dXJucwovLy8gdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBzdHJpbmdzLgovLy8KLy8vIElmIFtleHByZXNzaW9uc10gaXMgZW1wdHkgdGhlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCi8vLwovLy8gVGhlc2UgYXJpc2UgZnJvbSBzdHJpbmcgaW50ZXJwb2xhdGlvbnMgYW5kIGFkamFjZW50IHN0cmluZyBsaXRlcmFscy4KY2xhc3MgU3RyaW5nQ29uY2F0ZW5hdGlvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnM7CgogIFN0cmluZ0NvbmNhdGVuYXRpb24odGhpcy5leHByZXNzaW9ucykgewogICAgc2V0UGFyZW50cyhleHByZXNzaW9ucywgdGhpcyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuc3RyaW5nVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChleHByZXNzaW9ucywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGV4cHJlc3Npb25zLCB2LCB0aGlzKTsKICB9Cn0KCi8vLyBDb25jYXRlbmF0ZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGxpc3QuCi8vLwovLy8gSWYgW2xpc3RzXSBpcyBlbXB0eSB0aGVuIGFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQuCi8vLwovLy8gVGhlc2UgYXJpc2UgZnJvbSBzcHJlYWQgYW5kIGNvbnRyb2wtZmxvdyBlbGVtZW50cyBpbiBjb25zdCBsaXN0IGxpdGVyYWxzLgovLy8gVGhleSBhcmUgb25seSBwcmVzZW50IGJlZm9yZSBjb25zdGFudCBldmFsdWF0aW9uLCBvciB3aXRoaW4gdW5ldmFsdWF0ZWQKLy8vIGNvbnN0YW50cyBpbiBjb25zdGFudCBleHByZXNzaW9ucy4KY2xhc3MgTGlzdENvbmNhdGVuYXRpb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQ7CiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBsaXN0czsKCiAgTGlzdENvbmNhdGVuYXRpb24odGhpcy5saXN0cywge3RoaXMudHlwZUFyZ3VtZW50OiBjb25zdCBEeW5hbWljVHlwZSgpfSkgewogICAgc2V0UGFyZW50cyhsaXN0cywgdGhpcyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmxpdGVyYWxMaXN0VHlwZSh0eXBlQXJndW1lbnQpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRMaXN0Q29uY2F0ZW5hdGlvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRMaXN0Q29uY2F0ZW5hdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdHlwZUFyZ3VtZW50Py5hY2NlcHQodik7CiAgICB2aXNpdExpc3QobGlzdHMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHlwZUFyZ3VtZW50ID0gdi52aXNpdERhcnRUeXBlKHR5cGVBcmd1bWVudCk7CiAgICB0cmFuc2Zvcm1MaXN0KGxpc3RzLCB2LCB0aGlzKTsKICB9Cn0KCi8vLyBDb25jYXRlbmF0ZSBzZXRzIGludG8gYSBzaW5nbGUgc2V0LgovLy8KLy8vIElmIFtzZXRzXSBpcyBlbXB0eSB0aGVuIGFuIGVtcHR5IHNldCBpcyByZXR1cm5lZC4KLy8vCi8vLyBUaGVzZSBhcmlzZSBmcm9tIHNwcmVhZCBhbmQgY29udHJvbC1mbG93IGVsZW1lbnRzIGluIGNvbnN0IHNldCBsaXRlcmFscy4KLy8vIFRoZXkgYXJlIG9ubHkgcHJlc2VudCBiZWZvcmUgY29uc3RhbnQgZXZhbHVhdGlvbiwgb3Igd2l0aGluIHVuZXZhbHVhdGVkCi8vLyBjb25zdGFudHMgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuCi8vLwovLy8gRHVwbGljYXRlZCB2YWx1ZXMgaW4gb3IgYWNyb3NzIHRoZSBzZXRzIHdpbGwgcmVzdWx0IGluIGEgY29tcGlsZS10aW1lIGVycm9yCi8vLyBkdXJpbmcgY29uc3RhbnQgZXZhbHVhdGlvbi4KY2xhc3MgU2V0Q29uY2F0ZW5hdGlvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IHNldHM7CgogIFNldENvbmNhdGVuYXRpb24odGhpcy5zZXRzLCB7dGhpcy50eXBlQXJndW1lbnQ6IGNvbnN0IER5bmFtaWNUeXBlKCl9KSB7CiAgICBzZXRQYXJlbnRzKHNldHMsIHRoaXMpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5saXRlcmFsU2V0VHlwZSh0eXBlQXJndW1lbnQpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTZXRDb25jYXRlbmF0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFNldENvbmNhdGVuYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHR5cGVBcmd1bWVudD8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KHNldHMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHlwZUFyZ3VtZW50ID0gdi52aXNpdERhcnRUeXBlKHR5cGVBcmd1bWVudCk7CiAgICB0cmFuc2Zvcm1MaXN0KHNldHMsIHYsIHRoaXMpOwogIH0KfQoKLy8vIENvbmNhdGVuYXRlIG1hcHMgaW50byBhIHNpbmdsZSBtYXAuCi8vLwovLy8gSWYgW21hcHNdIGlzIGVtcHR5IHRoZW4gYW4gZW1wdHkgbWFwIGlzIHJldHVybmVkLgovLy8KLy8vIFRoZXNlIGFyaXNlIGZyb20gc3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMgaW4gY29uc3QgbWFwIGxpdGVyYWxzLgovLy8gVGhleSBhcmUgb25seSBwcmVzZW50IGJlZm9yZSBjb25zdGFudCBldmFsdWF0aW9uLCBvciB3aXRoaW4gdW5ldmFsdWF0ZWQKLy8vIGNvbnN0YW50cyBpbiBjb25zdGFudCBleHByZXNzaW9ucy4KLy8vCi8vLyBEdXBsaWNhdGVkIGtleXMgaW4gb3IgYWNyb3NzIHRoZSBtYXBzIHdpbGwgcmVzdWx0IGluIGEgY29tcGlsZS10aW1lIGVycm9yCi8vLyBkdXJpbmcgY29uc3RhbnQgZXZhbHVhdGlvbi4KY2xhc3MgTWFwQ29uY2F0ZW5hdGlvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIERhcnRUeXBlIGtleVR5cGU7CiAgRGFydFR5cGUgdmFsdWVUeXBlOwogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gbWFwczsKCiAgTWFwQ29uY2F0ZW5hdGlvbih0aGlzLm1hcHMsCiAgICAgIHt0aGlzLmtleVR5cGU6IGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgIHRoaXMudmFsdWVUeXBlOiBjb25zdCBEeW5hbWljVHlwZSgpfSkgewogICAgc2V0UGFyZW50cyhtYXBzLCB0aGlzKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMubGl0ZXJhbE1hcFR5cGUoa2V5VHlwZSwgdmFsdWVUeXBlKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0TWFwQ29uY2F0ZW5hdGlvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRNYXBDb25jYXRlbmF0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBrZXlUeXBlPy5hY2NlcHQodik7CiAgICB2YWx1ZVR5cGU/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdChtYXBzLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGtleVR5cGUgPSB2LnZpc2l0RGFydFR5cGUoa2V5VHlwZSk7CiAgICB2YWx1ZVR5cGUgPSB2LnZpc2l0RGFydFR5cGUodmFsdWVUeXBlKTsKICAgIHRyYW5zZm9ybUxpc3QobWFwcywgdiwgdGhpcyk7CiAgfQp9CgovLy8gQ3JlYXRlIGFuIGluc3RhbmNlIGRpcmVjdGx5IGZyb20gdGhlIGZpZWxkIHZhbHVlcy4KLy8vCi8vLyBUaGlzIGV4cHJlc3Npb24gYXJpc2VzIGZyb20gY29uc3QgY29uc3RydWN0b3IgY2FsbHMgd2hlbiBvbmUgb3IgbW9yZSBmaWVsZAovLy8gaW5pdGlhbGl6aW5nIGV4cHJlc3Npb25zLCBmaWVsZCBpbml0aWFsaXplcnMsIGFzc2VydCBpbml0aWFsaXplcnMgb3IgdW51c2VkCi8vLyBhcmd1bWVudHMgY29udGFpbiB1bmV2YWx1YXRlZCBleHByZXNzaW9ucy4gVGhleSBvbmx5IGV2ZXIgb2NjdXIgd2l0aGluCi8vLyB1bmV2YWx1YXRlZCBjb25zdGFudHMgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuCmNsYXNzIEluc3RhbmNlQ3JlYXRpb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBSZWZlcmVuY2UgY2xhc3NSZWZlcmVuY2U7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICBmaW5hbCBNYXA8UmVmZXJlbmNlLCBFeHByZXNzaW9uPiBmaWVsZFZhbHVlczsKICBmaW5hbCBMaXN0PEFzc2VydFN0YXRlbWVudD4gYXNzZXJ0czsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IHVudXNlZEFyZ3VtZW50czsKCiAgSW5zdGFuY2VDcmVhdGlvbih0aGlzLmNsYXNzUmVmZXJlbmNlLCB0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMuZmllbGRWYWx1ZXMsCiAgICAgIHRoaXMuYXNzZXJ0cywgdGhpcy51bnVzZWRBcmd1bWVudHMpOwoKICBDbGFzcyBnZXQgY2xhc3NOb2RlID0+IGNsYXNzUmVmZXJlbmNlLmFzQ2xhc3M7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZUFyZ3VtZW50cy5pc0VtcHR5CiAgICAgICAgPyBjbGFzc05vZGUucmF3VHlwZQogICAgICAgIDogbmV3IEludGVyZmFjZVR5cGUoY2xhc3NOb2RlLCB0eXBlQXJndW1lbnRzKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0SW5zdGFuY2VDcmVhdGlvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRJbnN0YW5jZUNyZWF0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBjbGFzc1JlZmVyZW5jZS5hc0NsYXNzLmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICAgIGZvciAoZmluYWwgUmVmZXJlbmNlIHJlZmVyZW5jZSBpbiBmaWVsZFZhbHVlcy5rZXlzKSB7CiAgICAgIHJlZmVyZW5jZS5hc0ZpZWxkLmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIH0KICAgIGZvciAoZmluYWwgRXhwcmVzc2lvbiB2YWx1ZSBpbiBmaWVsZFZhbHVlcy52YWx1ZXMpIHsKICAgICAgdmFsdWUuYWNjZXB0KHYpOwogICAgfQogICAgdmlzaXRMaXN0KGFzc2VydHMsIHYpOwogICAgdmlzaXRMaXN0KHVudXNlZEFyZ3VtZW50cywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBmaWVsZFZhbHVlcy5mb3JFYWNoKChSZWZlcmVuY2UgZmllbGRSZWYsIEV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgRXhwcmVzc2lvbiB0cmFuc2Zvcm1lZCA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgaWYgKHRyYW5zZm9ybWVkICE9IG51bGwgJiYgIWlkZW50aWNhbCh2YWx1ZSwgdHJhbnNmb3JtZWQpKSB7CiAgICAgICAgZmllbGRWYWx1ZXNbZmllbGRSZWZdID0gdHJhbnNmb3JtZWQ7CiAgICAgICAgdHJhbnNmb3JtZWQucGFyZW50ID0gdGhpczsKICAgICAgfQogICAgfSk7CiAgICB0cmFuc2Zvcm1MaXN0KGFzc2VydHMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdCh1bnVzZWRBcmd1bWVudHMsIHYsIHRoaXMpOwogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgeCBpcyBUYC4KY2xhc3MgSXNFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiBvcGVyYW5kOwogIERhcnRUeXBlIHR5cGU7CgogIElzRXhwcmVzc2lvbih0aGlzLm9wZXJhbmQsIHRoaXMudHlwZSkgewogICAgb3BlcmFuZD8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5ib29sVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRJc0V4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SXNFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBvcGVyYW5kPy5hY2NlcHQodik7CiAgICB0eXBlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAob3BlcmFuZCAhPSBudWxsKSB7CiAgICAgIG9wZXJhbmQgPSBvcGVyYW5kLmFjY2VwdCh2KTsKICAgICAgb3BlcmFuZD8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIHR5cGUgPSB2LnZpc2l0RGFydFR5cGUodHlwZSk7CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGB4IGFzIFRgLgpjbGFzcyBBc0V4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBpbnQgZmxhZ3MgPSAwOwogIEV4cHJlc3Npb24gb3BlcmFuZDsKICBEYXJ0VHlwZSB0eXBlOwoKICBBc0V4cHJlc3Npb24odGhpcy5vcGVyYW5kLCB0aGlzLnR5cGUpIHsKICAgIG9wZXJhbmQ/LnBhcmVudCA9IHRoaXM7CiAgfQoKICAvLyBNdXN0IG1hdGNoIHNlcmlhbGl6ZWQgYml0IHBvc2l0aW9ucy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdUeXBlRXJyb3IgPSAxIDw8IDA7CgogIC8vLyBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCBzaG91bGQgYmUgdGhyb3duIGlmIHRoZSBjaGVjayBmYWlscy4KICAvLy8KICAvLy8gYHRydWVgIG1lYW5zIHRoYXQgYSBUeXBlRXJyb3Igc2hvdWxkIGJlIHRocm93bi4gIGBmYWxzZWAgbWVhbnMgdGhhdCBhCiAgLy8vIENhc3RFcnJvciBzaG91bGQgYmUgdGhyb3duLgogIGJvb2wgZ2V0IGlzVHlwZUVycm9yID0+IGZsYWdzICYgRmxhZ1R5cGVFcnJvciAhPSAwOwoKICB2b2lkIHNldCBpc1R5cGVFcnJvcihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ1R5cGVFcnJvcikgOiAoZmxhZ3MgJiB+RmxhZ1R5cGVFcnJvcik7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRBc0V4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0QXNFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBvcGVyYW5kPy5hY2NlcHQodik7CiAgICB0eXBlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAob3BlcmFuZCAhPSBudWxsKSB7CiAgICAgIG9wZXJhbmQgPSBvcGVyYW5kLmFjY2VwdCh2KTsKICAgICAgb3BlcmFuZD8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIHR5cGUgPSB2LnZpc2l0RGFydFR5cGUodHlwZSk7CiAgfQp9CgovLy8gQW4gaW50ZWdlciwgZG91YmxlLCBib29sZWFuLCBzdHJpbmcsIG9yIG51bGwgY29uc3RhbnQuCmFic3RyYWN0IGNsYXNzIEJhc2ljTGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24gewogIE9iamVjdCBnZXQgdmFsdWU7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCmNsYXNzIFN0cmluZ0xpdGVyYWwgZXh0ZW5kcyBCYXNpY0xpdGVyYWwgewogIFN0cmluZyB2YWx1ZTsKCiAgU3RyaW5nTGl0ZXJhbCh0aGlzLnZhbHVlKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLnN0cmluZ1R5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3RyaW5nTGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTdHJpbmdMaXRlcmFsKHRoaXMsIGFyZyk7Cn0KCmNsYXNzIEludExpdGVyYWwgZXh0ZW5kcyBCYXNpY0xpdGVyYWwgewogIC8vLyBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBob2xkcyBhIHVpbnQ2NCB2YWx1ZS4KICAvLy8gRS5nLiAiMHg4MDAwMDAwMDAwMDAwMDAwIiB3aWxsIGJlIHNhdmVkIGFzICItOTIyMzM3MjAzNjg1NDc3NTgwOCIgZGVzcGl0ZQogIC8vLyB0ZWNobmljYWxseSAob24gc29tZSBwbGF0Zm9ybXMsIHBhcnRpY3VsYXJseSBKYXZhc2NyaXB0KSBiZWluZyBwb3NpdGl2ZS4KICAvLy8gSWYgdGhlIG51bWJlciBpcyBtZWFudCB0byBiZSBuZWdhdGl2ZSBpdCB3aWxsIGJlIHdyYXBwZWQgaW4gYSAidW5hcnktIi4KICBpbnQgdmFsdWU7CgogIEludExpdGVyYWwodGhpcy52YWx1ZSk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5pbnRUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEludExpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW50TGl0ZXJhbCh0aGlzLCBhcmcpOwp9CgpjbGFzcyBEb3VibGVMaXRlcmFsIGV4dGVuZHMgQmFzaWNMaXRlcmFsIHsKICBkb3VibGUgdmFsdWU7CgogIERvdWJsZUxpdGVyYWwodGhpcy52YWx1ZSk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5kb3VibGVUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdERvdWJsZUxpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0RG91YmxlTGl0ZXJhbCh0aGlzLCBhcmcpOwp9CgpjbGFzcyBCb29sTGl0ZXJhbCBleHRlbmRzIEJhc2ljTGl0ZXJhbCB7CiAgYm9vbCB2YWx1ZTsKCiAgQm9vbExpdGVyYWwodGhpcy52YWx1ZSk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5ib29sVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRCb29sTGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRCb29sTGl0ZXJhbCh0aGlzLCBhcmcpOwp9CgpjbGFzcyBOdWxsTGl0ZXJhbCBleHRlbmRzIEJhc2ljTGl0ZXJhbCB7CiAgT2JqZWN0IGdldCB2YWx1ZSA9PiBudWxsOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMubnVsbFR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0TnVsbExpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TnVsbExpdGVyYWwodGhpcywgYXJnKTsKfQoKY2xhc3MgU3ltYm9sTGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24gewogIFN0cmluZyB2YWx1ZTsgLy8gRXZlcnl0aGluZyBzdHJpY3RseSBhZnRlciB0aGUgJyMnLgoKICBTeW1ib2xMaXRlcmFsKHRoaXMudmFsdWUpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuc3ltYm9sVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTeW1ib2xMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN5bWJvbExpdGVyYWwodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKY2xhc3MgVHlwZUxpdGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBEYXJ0VHlwZSB0eXBlOwoKICBUeXBlTGl0ZXJhbCh0aGlzLnR5cGUpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMudHlwZVR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0VHlwZUxpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VHlwZUxpdGVyYWwodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHR5cGU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHR5cGUgPSB2LnZpc2l0RGFydFR5cGUodHlwZSk7CiAgfQp9CgpjbGFzcyBUaGlzRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy50aGlzVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRUaGlzRXhwcmVzc2lvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRUaGlzRXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgpjbGFzcyBSZXRocm93IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IGNvbnN0IEJvdHRvbVR5cGUoKTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRSZXRocm93KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFJldGhyb3codGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKY2xhc3MgVGhyb3cgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIFRocm93KHRoaXMuZXhwcmVzc2lvbikgewogICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiBjb25zdCBCb3R0b21UeXBlKCk7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0VGhyb3codGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VGhyb3codGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGV4cHJlc3Npb24/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uYWNjZXB0KHYpOwogICAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgTGlzdExpdGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBib29sIGlzQ29uc3Q7CiAgRGFydFR5cGUgdHlwZUFyZ3VtZW50OyAvLyBOb3QgbnVsbCwgZGVmYXVsdHMgdG8gRHluYW1pY1R5cGUuCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9uczsKCiAgTGlzdExpdGVyYWwodGhpcy5leHByZXNzaW9ucywKICAgICAge3RoaXMudHlwZUFyZ3VtZW50OiBjb25zdCBEeW5hbWljVHlwZSgpLCB0aGlzLmlzQ29uc3Q6IGZhbHNlfSkgewogICAgYXNzZXJ0KHR5cGVBcmd1bWVudCAhPSBudWxsKTsKICAgIHNldFBhcmVudHMoZXhwcmVzc2lvbnMsIHRoaXMpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5saXRlcmFsTGlzdFR5cGUodHlwZUFyZ3VtZW50KTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0TGlzdExpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TGlzdExpdGVyYWwodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHR5cGVBcmd1bWVudD8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KGV4cHJlc3Npb25zLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHR5cGVBcmd1bWVudCA9IHYudmlzaXREYXJ0VHlwZSh0eXBlQXJndW1lbnQpOwogICAgdHJhbnNmb3JtTGlzdChleHByZXNzaW9ucywgdiwgdGhpcyk7CiAgfQp9CgpjbGFzcyBTZXRMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgYm9vbCBpc0NvbnN0OwogIERhcnRUeXBlIHR5cGVBcmd1bWVudDsgLy8gTm90IG51bGwsIGRlZmF1bHRzIHRvIER5bmFtaWNUeXBlLgogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnM7CgogIFNldExpdGVyYWwodGhpcy5leHByZXNzaW9ucywKICAgICAge3RoaXMudHlwZUFyZ3VtZW50OiBjb25zdCBEeW5hbWljVHlwZSgpLCB0aGlzLmlzQ29uc3Q6IGZhbHNlfSkgewogICAgYXNzZXJ0KHR5cGVBcmd1bWVudCAhPSBudWxsKTsKICAgIHNldFBhcmVudHMoZXhwcmVzc2lvbnMsIHRoaXMpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5saXRlcmFsU2V0VHlwZSh0eXBlQXJndW1lbnQpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTZXRMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFNldExpdGVyYWwodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHR5cGVBcmd1bWVudD8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KGV4cHJlc3Npb25zLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHR5cGVBcmd1bWVudCA9IHYudmlzaXREYXJ0VHlwZSh0eXBlQXJndW1lbnQpOwogICAgdHJhbnNmb3JtTGlzdChleHByZXNzaW9ucywgdiwgdGhpcyk7CiAgfQp9CgpjbGFzcyBNYXBMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgYm9vbCBpc0NvbnN0OwogIERhcnRUeXBlIGtleVR5cGU7IC8vIE5vdCBudWxsLCBkZWZhdWx0cyB0byBEeW5hbWljVHlwZS4KICBEYXJ0VHlwZSB2YWx1ZVR5cGU7IC8vIE5vdCBudWxsLCBkZWZhdWx0cyB0byBEeW5hbWljVHlwZS4KICBmaW5hbCBMaXN0PE1hcEVudHJ5PiBlbnRyaWVzOwoKICBNYXBMaXRlcmFsKHRoaXMuZW50cmllcywKICAgICAge3RoaXMua2V5VHlwZTogY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgdGhpcy52YWx1ZVR5cGU6IGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgIHRoaXMuaXNDb25zdDogZmFsc2V9KSB7CiAgICBhc3NlcnQoa2V5VHlwZSAhPSBudWxsKTsKICAgIGFzc2VydCh2YWx1ZVR5cGUgIT0gbnVsbCk7CiAgICBzZXRQYXJlbnRzKGVudHJpZXMsIHRoaXMpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5saXRlcmFsTWFwVHlwZShrZXlUeXBlLCB2YWx1ZVR5cGUpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRNYXBMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdE1hcExpdGVyYWwodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGtleVR5cGU/LmFjY2VwdCh2KTsKICAgIHZhbHVlVHlwZT8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KGVudHJpZXMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAga2V5VHlwZSA9IHYudmlzaXREYXJ0VHlwZShrZXlUeXBlKTsKICAgIHZhbHVlVHlwZSA9IHYudmlzaXREYXJ0VHlwZSh2YWx1ZVR5cGUpOwogICAgdHJhbnNmb3JtTGlzdChlbnRyaWVzLCB2LCB0aGlzKTsKICB9Cn0KCmNsYXNzIE1hcEVudHJ5IGV4dGVuZHMgVHJlZU5vZGUgewogIEV4cHJlc3Npb24ga2V5OwogIEV4cHJlc3Npb24gdmFsdWU7CgogIE1hcEVudHJ5KHRoaXMua2V5LCB0aGlzLnZhbHVlKSB7CiAgICBrZXk/LnBhcmVudCA9IHRoaXM7CiAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0TWFwRW50cnkodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBrZXk/LmFjY2VwdCh2KTsKICAgIHZhbHVlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoa2V5ICE9IG51bGwpIHsKICAgICAga2V5ID0ga2V5LmFjY2VwdCh2KTsKICAgICAga2V5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgdmFsdWUgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgYXdhaXQgeGAuCmNsYXNzIEF3YWl0RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gb3BlcmFuZDsKCiAgQXdhaXRFeHByZXNzaW9uKHRoaXMub3BlcmFuZCkgewogICAgb3BlcmFuZD8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMudW5mdXR1cmVUeXBlKG9wZXJhbmQuZ2V0U3RhdGljVHlwZSh0eXBlcykpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRBd2FpdEV4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0QXdhaXRFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBvcGVyYW5kPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAob3BlcmFuZCAhPSBudWxsKSB7CiAgICAgIG9wZXJhbmQgPSBvcGVyYW5kLmFjY2VwdCh2KTsKICAgICAgb3BlcmFuZD8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBDb21tb24gc3VwZXItaW50ZXJmYWNlIGZvciBbRnVuY3Rpb25FeHByZXNzaW9uXSBhbmQgW0Z1bmN0aW9uRGVjbGFyYXRpb25dLgphYnN0cmFjdCBjbGFzcyBMb2NhbEZ1bmN0aW9uIGltcGxlbWVudHMgVHJlZU5vZGUgewogIEZ1bmN0aW9uTm9kZSBnZXQgZnVuY3Rpb247Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYCh4LHkpID0+IC4uLmAgb3IgYCh4LHkpIHsgLi4uIH1gCi8vLwovLy8gVGhlIGFycm93LWJvZHkgZm9ybSBgPT4gZWAgaXMgZGVzdWdhcmVkIGludG8gYHJldHVybiBlO2AuCmNsYXNzIEZ1bmN0aW9uRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gaW1wbGVtZW50cyBMb2NhbEZ1bmN0aW9uIHsKICBGdW5jdGlvbk5vZGUgZnVuY3Rpb247CgogIEZ1bmN0aW9uRXhwcmVzc2lvbih0aGlzLmZ1bmN0aW9uKSB7CiAgICBmdW5jdGlvbj8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiBmdW5jdGlvbi5mdW5jdGlvblR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZnVuY3Rpb24/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChmdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIGZ1bmN0aW9uID0gZnVuY3Rpb24uYWNjZXB0KHYpOwogICAgICBmdW5jdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCmNsYXNzIENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIENvbnN0YW50IGNvbnN0YW50OwogIERhcnRUeXBlIHR5cGU7CgogIENvbnN0YW50RXhwcmVzc2lvbih0aGlzLmNvbnN0YW50LCBbdGhpcy50eXBlID0gY29uc3QgRHluYW1pY1R5cGUoKV0pIHsKICAgIGFzc2VydChjb25zdGFudCAhPSBudWxsKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdENvbnN0YW50RXhwcmVzc2lvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRDb25zdGFudEV4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGNvbnN0YW50Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB0eXBlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBjb25zdGFudCA9IHYudmlzaXRDb25zdGFudChjb25zdGFudCk7CiAgICB0eXBlID0gdi52aXNpdERhcnRUeXBlKHR5cGUpOwogIH0KfQoKLy8vIFN5bnRoZXRpYyBleHByZXNzaW9uIG9mIGZvcm0gYGxldCB2ID0geCBpbiB5YApjbGFzcyBMZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOyAvLyBNdXN0IGhhdmUgYW4gaW5pdGlhbGl6ZXIuCiAgRXhwcmVzc2lvbiBib2R5OwoKICBMZXQodGhpcy52YXJpYWJsZSwgdGhpcy5ib2R5KSB7CiAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gYm9keS5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRMZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TGV0KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2YXJpYWJsZT8uYWNjZXB0KHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5hY2NlcHQodik7CiAgICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBCbG9ja0V4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBCbG9jayBib2R5OwogIEV4cHJlc3Npb24gdmFsdWU7CgogIEJsb2NrRXhwcmVzc2lvbih0aGlzLmJvZHksIHRoaXMudmFsdWUpIHsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB2YWx1ZS5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRCbG9ja0V4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0QmxvY2tFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBib2R5Py5hY2NlcHQodik7CiAgICB2YWx1ZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB2YWx1ZSA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQXR0ZW1wdCB0byBsb2FkIHRoZSBsaWJyYXJ5IHJlZmVycmVkIHRvIGJ5IGEgZGVmZXJyZWQgaW1wb3J0LgovLy8KLy8vIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgY29uY2VybmVkIHdpdGg6Ci8vLyAtIGtlZXBpbmcgdHJhY2sgd2hldGhlciB0aGUgZGVmZXJyZWQgaW1wb3J0IGlzIG1hcmtlZCBhcyAnbG9hZGVkJwovLy8gLSBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxpYnJhcnkgY29kZSBoYXMgYWxyZWFkeSBiZWVuIGRvd25sb2FkZWQKLy8vIC0gYWN0dWFsbHkgZG93bmxvYWRpbmcgYW5kIGxpbmtpbmcgdGhlIGxpYnJhcnkKLy8vCi8vLyBTaG91bGQgcmV0dXJuIGEgZnV0dXJlLiAgVGhlIHZhbHVlIGluIHRoaXMgZnV0dXJlIHdpbGwgYmUgdGhlIHNhbWUgdmFsdWUKLy8vIHNlZW4gYnkgY2FsbGVycyBvZiBgbG9hZExpYnJhcnlgIGZ1bmN0aW9ucy4KLy8vCi8vLyBPbiBiYWNrZW5kcyB0aGF0IGxpbmsgdGhlIGVudGlyZSBwcm9ncmFtIGVhZ2VybHksIHRoaXMgaW5zdHJ1Y3Rpb24gbmVlZHMKLy8vIHRvIG1hcmsgdGhlIGRlZmVycmVkIGltcG9ydCBhcyAnbG9hZGVkJyBhbmQgcmV0dXJuIGEgZnV0dXJlLgpjbGFzcyBMb2FkTGlicmFyeSBleHRlbmRzIEV4cHJlc3Npb24gewogIC8vLyBSZWZlcmVuY2UgdG8gYSBkZWZlcnJlZCBpbXBvcnQgaW4gdGhlIGVuY2xvc2luZyBsaWJyYXJ5LgogIExpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKCiAgTG9hZExpYnJhcnkodGhpcy5pbXBvcnQpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmZ1dHVyZVR5cGUoY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdExvYWRMaWJyYXJ5KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdExvYWRMaWJyYXJ5KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCi8vLyBDaGVja3MgdGhhdCB0aGUgZ2l2ZW4gZGVmZXJyZWQgaW1wb3J0IGhhcyBiZWVuIG1hcmtlZCBhcyAnbG9hZGVkJy4KY2xhc3MgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAvLy8gUmVmZXJlbmNlIHRvIGEgZGVmZXJyZWQgaW1wb3J0IGluIHRoZSBlbmNsb3NpbmcgbGlicmFyeS4KICBMaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQ7CgogIENoZWNrTGlicmFyeUlzTG9hZGVkKHRoaXMuaW1wb3J0KTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5vYmplY3RUeXBlOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFURU1FTlRTCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQGNvcQphYnN0cmFjdCBjbGFzcyBTdGF0ZW1lbnQgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3Igdik7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpOwp9CgpAY29xCmNsYXNzIEV4cHJlc3Npb25TdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgRXhwcmVzc2lvblN0YXRlbWVudCh0aGlzLmV4cHJlc3Npb24pIHsKICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0RXhwcmVzc2lvblN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGV4cHJlc3Npb24/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uYWNjZXB0KHYpOwogICAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKQGNvcQpjbGFzcyBCbG9jayBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHM7CgogIEJsb2NrKHRoaXMuc3RhdGVtZW50cykgewogICAgLy8gRW5zdXJlIHN0YXRlbWVudHMgaXMgbXV0YWJsZS4KICAgIGFzc2VydCgoc3RhdGVtZW50cwogICAgICAgICAgLi5hZGQobnVsbCkKICAgICAgICAgIC4ucmVtb3ZlTGFzdCgpKSAhPQogICAgICAgIG51bGwpOwogICAgc2V0UGFyZW50cyhzdGF0ZW1lbnRzLCB0aGlzKTsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRCbG9jayh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEJsb2NrKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3Qoc3RhdGVtZW50cywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KHN0YXRlbWVudHMsIHYsIHRoaXMpOwogIH0KCiAgdm9pZCBhZGRTdGF0ZW1lbnQoU3RhdGVtZW50IG5vZGUpIHsKICAgIHN0YXRlbWVudHMuYWRkKG5vZGUpOwogICAgbm9kZS5wYXJlbnQgPSB0aGlzOwogIH0KfQoKLy8vIEEgYmxvY2sgdGhhdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gYXNzZXJ0cyBhcmUgZW5hYmxlZC4KLy8vCi8vLyBTb21ldGltZXMgYXJiaXRyYXJ5IHN0YXRlbWVudHMgbXVzdCBiZSBndWFyZGVkIGJ5IHdoZXRoZXIgYXNzZXJ0cyBhcmUKLy8vIGVuYWJsZWQuICBGb3IgZXhhbXBsZSwgd2hlbiBhIHN1YmV4cHJlc3Npb24gb2YgYW4gYXNzZXJ0IGluIGFzeW5jIGNvZGUgaXMKLy8vIGxpbmVhcml6ZWQgYW5kIG5hbWVkLCBpdCBjYW4gcHJvZHVjZSBzdWNoIGEgYmxvY2sgb2Ygc3RhdGVtZW50cy4KY2xhc3MgQXNzZXJ0QmxvY2sgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzOwoKICBBc3NlcnRCbG9jayh0aGlzLnN0YXRlbWVudHMpIHsKICAgIC8vIEVuc3VyZSBzdGF0ZW1lbnRzIGlzIG11dGFibGUuCiAgICBhc3NlcnQoKHN0YXRlbWVudHMKICAgICAgICAgIC4uYWRkKG51bGwpCiAgICAgICAgICAuLnJlbW92ZUxhc3QoKSkgIT0KICAgICAgICBudWxsKTsKICAgIHNldFBhcmVudHMoc3RhdGVtZW50cywgdGhpcyk7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0QXNzZXJ0QmxvY2sodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRBc3NlcnRCbG9jayh0aGlzLCBhcmcpOwoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KHN0YXRlbWVudHMsIHYsIHRoaXMpOwogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChzdGF0ZW1lbnRzLCB2KTsKICB9CgogIHZvaWQgYWRkU3RhdGVtZW50KFN0YXRlbWVudCBub2RlKSB7CiAgICBzdGF0ZW1lbnRzLmFkZChub2RlKTsKICAgIG5vZGUucGFyZW50ID0gdGhpczsKICB9Cn0KCmNsYXNzIEVtcHR5U3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0RW1wdHlTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRFbXB0eVN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgpjbGFzcyBBc3NlcnRTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIEV4cHJlc3Npb24gY29uZGl0aW9uOwogIEV4cHJlc3Npb24gbWVzc2FnZTsgLy8gTWF5IGJlIG51bGwuCiAgaW50IGNvbmRpdGlvblN0YXJ0T2Zmc2V0OwogIGludCBjb25kaXRpb25FbmRPZmZzZXQ7CgogIEFzc2VydFN0YXRlbWVudCh0aGlzLmNvbmRpdGlvbiwKICAgICAge3RoaXMubWVzc2FnZSwgdGhpcy5jb25kaXRpb25TdGFydE9mZnNldCwgdGhpcy5jb25kaXRpb25FbmRPZmZzZXR9KSB7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICBtZXNzYWdlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdEFzc2VydFN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEFzc2VydFN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgICBtZXNzYWdlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewogICAgICBtZXNzYWdlID0gbWVzc2FnZS5hY2NlcHQodik7CiAgICAgIG1lc3NhZ2U/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQSB0YXJnZXQgb2YgYSBbQnJlYWtdIHN0YXRlbWVudC4KLy8vCi8vLyBUaGUgbGFiZWwgaXRzZWxmIGhhcyBubyBuYW1lOyBicmVha3MgcmVmZXJlbmNlIHRoZSBzdGF0ZW1lbnQgZGlyZWN0bHkuCi8vLwovLy8gVGhlIGZyb250ZW5kIGRvZXMgbm90IGdlbmVyYXRlIGxhYmVsZWQgc3RhdGVtZW50cyB3aXRob3V0IHVzZXMuCmNsYXNzIExhYmVsZWRTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIFN0YXRlbWVudCBib2R5OwoKICBMYWJlbGVkU3RhdGVtZW50KHRoaXMuYm9keSkgewogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRMYWJlbGVkU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TGFiZWxlZFN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgYm9keT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQnJlYWtzIG91dCBvZiBhbiBlbmNsb3NpbmcgW0xhYmVsZWRTdGF0ZW1lbnRdLgovLy8KLy8vIEJvdGggYGJyZWFrYCBhbmQgbG9vcCBgY29udGludWVgIHN0YXRlbWVudHMgYXJlIHRyYW5zbGF0ZWQgaW50byB0aGlzIG5vZGUuCi8vLwovLy8gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbG9vcCB3aXRoIGEgYGNvbnRpbnVlYCB3aWxsIGJlIGRlc3VnYXJlZDoKLy8vCi8vLyAgICAgd2hpbGUoeCkgewovLy8gICAgICAgaWYgKHkpIGNvbnRpbnVlOwovLy8gICAgICAgQk9EWScKLy8vICAgICB9Ci8vLwovLy8gICAgID09PgovLy8KLy8vICAgICB3aGlsZSh4KSB7Ci8vLyAgICAgICBMOiB7Ci8vLyAgICAgICAgIGlmICh5KSBicmVhayBMOwovLy8gICAgICAgICBCT0RZJwovLy8gICAgICAgfQovLy8gICAgIH0KLy8KY2xhc3MgQnJlYWtTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIExhYmVsZWRTdGF0ZW1lbnQgdGFyZ2V0OwoKICBCcmVha1N0YXRlbWVudCh0aGlzLnRhcmdldCk7CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRCcmVha1N0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEJyZWFrU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCmNsYXNzIFdoaWxlU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICBTdGF0ZW1lbnQgYm9keTsKCiAgV2hpbGVTdGF0ZW1lbnQodGhpcy5jb25kaXRpb24sIHRoaXMuYm9keSkgewogICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRXaGlsZVN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFdoaWxlU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYWNjZXB0KHYpOwogICAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCmNsYXNzIERvU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBTdGF0ZW1lbnQgYm9keTsKICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKCiAgRG9TdGF0ZW1lbnQodGhpcy5ib2R5LCB0aGlzLmNvbmRpdGlvbikgewogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXREb1N0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdERvU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBib2R5Py5hY2NlcHQodik7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCmNsYXNzIEZvclN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXM7IC8vIE1heSBiZSBlbXB0eSwgYnV0IG5vdCBudWxsLgogIEV4cHJlc3Npb24gY29uZGl0aW9uOyAvLyBNYXkgYmUgbnVsbC4KICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXM7IC8vIE1heSBiZSBlbXB0eSwgYnV0IG5vdCBudWxsLgogIFN0YXRlbWVudCBib2R5OwoKICBGb3JTdGF0ZW1lbnQodGhpcy52YXJpYWJsZXMsIHRoaXMuY29uZGl0aW9uLCB0aGlzLnVwZGF0ZXMsIHRoaXMuYm9keSkgewogICAgc2V0UGFyZW50cyh2YXJpYWJsZXMsIHRoaXMpOwogICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgc2V0UGFyZW50cyh1cGRhdGVzLCB0aGlzKTsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0Rm9yU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Rm9yU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QodmFyaWFibGVzLCB2KTsKICAgIGNvbmRpdGlvbj8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KHVwZGF0ZXMsIHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdCh2YXJpYWJsZXMsIHYsIHRoaXMpOwogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIHRyYW5zZm9ybUxpc3QodXBkYXRlcywgdiwgdGhpcyk7CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCmNsYXNzIEZvckluU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICAvLy8gT2Zmc2V0IGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKSBpZiB0aGUgZmlsZQogIC8vLyBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseSBzZXQpLgogIGludCBib2R5T2Zmc2V0ID0gVHJlZU5vZGUubm9PZmZzZXQ7CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7IC8vIEhhcyBubyBpbml0aWFsaXplci4KICBFeHByZXNzaW9uIGl0ZXJhYmxlOwogIFN0YXRlbWVudCBib2R5OwogIGJvb2wgaXNBc3luYzsgLy8gVHJ1ZSBpZiB0aGlzIGlzIGFuICdhd2FpdCBmb3InIGxvb3AuCgogIEZvckluU3RhdGVtZW50KHRoaXMudmFyaWFibGUsIHRoaXMuaXRlcmFibGUsIHRoaXMuYm9keSwKICAgICAge3RoaXMuaXNBc3luYzogZmFsc2V9KSB7CiAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIGl0ZXJhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRGb3JJblN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEZvckluU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2YXJpYWJsZT8uYWNjZXB0KHYpOwogICAgaXRlcmFibGU/LmFjY2VwdCh2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUuYWNjZXB0KHYpOwogICAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChpdGVyYWJsZSAhPSBudWxsKSB7CiAgICAgIGl0ZXJhYmxlID0gaXRlcmFibGUuYWNjZXB0KHYpOwogICAgICBpdGVyYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIFN0YXRlbWVudCBvZiBmb3JtIGBzd2l0Y2ggKGUpIHsgY2FzZSB4OiAuLi4gfWAuCi8vLwovLy8gQWRqYWNlbnQgY2FzZSBjbGF1c2VzIGhhdmUgYmVlbiBtZXJnZWQgaW50byBhIHNpbmdsZSBbU3dpdGNoQ2FzZV0uIEEgcnVudGltZQovLy8gZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIGlmIG9uZSBbU3dpdGNoQ2FzZV0gZmFsbHMgdGhyb3VnaCB0byBhbm90aGVyIGNhc2UuCmNsYXNzIFN3aXRjaFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgRXhwcmVzc2lvbiBleHByZXNzaW9uOwogIGZpbmFsIExpc3Q8U3dpdGNoQ2FzZT4gY2FzZXM7CgogIFN3aXRjaFN0YXRlbWVudCh0aGlzLmV4cHJlc3Npb24sIHRoaXMuY2FzZXMpIHsKICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICBzZXRQYXJlbnRzKGNhc2VzLCB0aGlzKTsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRTd2l0Y2hTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTd2l0Y2hTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGV4cHJlc3Npb24/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdChjYXNlcywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmFjY2VwdCh2KTsKICAgICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIHRyYW5zZm9ybUxpc3QoY2FzZXMsIHYsIHRoaXMpOwogIH0KfQoKLy8vIEEgZ3JvdXAgb2YgYGNhc2VgIGNsYXVzZXMgYW5kL29yIGEgYGRlZmF1bHRgIGNsYXVzZS4KLy8vCi8vLyBUaGlzIGlzIGEgcG90ZW50aWFsIHRhcmdldCBvZiBbQ29udGludWVTd2l0Y2hTdGF0ZW1lbnRdLgpjbGFzcyBTd2l0Y2hDYXNlIGV4dGVuZHMgVHJlZU5vZGUgewogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnM7CiAgZmluYWwgTGlzdDxpbnQ+IGV4cHJlc3Npb25PZmZzZXRzOwogIFN0YXRlbWVudCBib2R5OwogIGJvb2wgaXNEZWZhdWx0OwoKICBTd2l0Y2hDYXNlKHRoaXMuZXhwcmVzc2lvbnMsIHRoaXMuZXhwcmVzc2lvbk9mZnNldHMsIHRoaXMuYm9keSwKICAgICAge3RoaXMuaXNEZWZhdWx0OiBmYWxzZX0pIHsKICAgIHNldFBhcmVudHMoZXhwcmVzc2lvbnMsIHRoaXMpOwogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIFN3aXRjaENhc2UuZGVmYXVsdENhc2UodGhpcy5ib2R5KQogICAgICA6IGlzRGVmYXVsdCA9IHRydWUsCiAgICAgICAgZXhwcmVzc2lvbnMgPSA8RXhwcmVzc2lvbj5bXSwKICAgICAgICBleHByZXNzaW9uT2Zmc2V0cyA9IDxpbnQ+W10gewogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIFN3aXRjaENhc2UuZW1wdHkoKQogICAgICA6IGV4cHJlc3Npb25zID0gPEV4cHJlc3Npb24+W10sCiAgICAgICAgZXhwcmVzc2lvbk9mZnNldHMgPSA8aW50PltdLAogICAgICAgIGJvZHkgPSBudWxsLAogICAgICAgIGlzRGVmYXVsdCA9IGZhbHNlOwoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdFN3aXRjaENhc2UodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoZXhwcmVzc2lvbnMsIHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChleHByZXNzaW9ucywgdiwgdGhpcyk7CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBKdW1wIHRvIGEgY2FzZSBpbiBhbiBlbmNsb3Npbmcgc3dpdGNoLgpjbGFzcyBDb250aW51ZVN3aXRjaFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgU3dpdGNoQ2FzZSB0YXJnZXQ7CgogIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KHRoaXMudGFyZ2V0KTsKCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PgogICAgICB2LnZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKY2xhc3MgSWZTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIEV4cHJlc3Npb24gY29uZGl0aW9uOwogIFN0YXRlbWVudCB0aGVuOwogIFN0YXRlbWVudCBvdGhlcndpc2U7CgogIElmU3RhdGVtZW50KHRoaXMuY29uZGl0aW9uLCB0aGlzLnRoZW4sIHRoaXMub3RoZXJ3aXNlKSB7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB0aGVuPy5wYXJlbnQgPSB0aGlzOwogICAgb3RoZXJ3aXNlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdElmU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SWZTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGNvbmRpdGlvbj8uYWNjZXB0KHYpOwogICAgdGhlbj8uYWNjZXB0KHYpOwogICAgb3RoZXJ3aXNlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHRoZW4gIT0gbnVsbCkgewogICAgICB0aGVuID0gdGhlbi5hY2NlcHQodik7CiAgICAgIHRoZW4/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAob3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgb3RoZXJ3aXNlID0gb3RoZXJ3aXNlLmFjY2VwdCh2KTsKICAgICAgb3RoZXJ3aXNlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKQGNvcQpjbGFzcyBSZXR1cm5TdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsgLy8gTWF5IGJlIG51bGwuCgogIFJldHVyblN0YXRlbWVudChbdGhpcy5leHByZXNzaW9uXSkgewogICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRSZXR1cm5TdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRSZXR1cm5TdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGV4cHJlc3Npb24/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uYWNjZXB0KHYpOwogICAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgVHJ5Q2F0Y2ggZXh0ZW5kcyBTdGF0ZW1lbnQgewogIFN0YXRlbWVudCBib2R5OwogIExpc3Q8Q2F0Y2g+IGNhdGNoZXM7CiAgYm9vbCBpc1N5bnRoZXRpYzsKCiAgVHJ5Q2F0Y2godGhpcy5ib2R5LCB0aGlzLmNhdGNoZXMsIHt0aGlzLmlzU3ludGhldGljOiBmYWxzZX0pIHsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICBzZXRQYXJlbnRzKGNhdGNoZXMsIHRoaXMpOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdFRyeUNhdGNoKHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VHJ5Q2F0Y2godGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdChjYXRjaGVzLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdHJhbnNmb3JtTGlzdChjYXRjaGVzLCB2LCB0aGlzKTsKICB9Cn0KCmNsYXNzIENhdGNoIGV4dGVuZHMgVHJlZU5vZGUgewogIERhcnRUeXBlIGd1YXJkOyAvLyBOb3QgbnVsbCwgZGVmYXVsdHMgdG8gZHluYW1pYy4KICBWYXJpYWJsZURlY2xhcmF0aW9uIGV4Y2VwdGlvbjsgLy8gTWF5IGJlIG51bGwuCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBzdGFja1RyYWNlOyAvLyBNYXkgYmUgbnVsbC4KICBTdGF0ZW1lbnQgYm9keTsKCiAgQ2F0Y2godGhpcy5leGNlcHRpb24sIHRoaXMuYm9keSwKICAgICAge3RoaXMuZ3VhcmQ6IGNvbnN0IER5bmFtaWNUeXBlKCksIHRoaXMuc3RhY2tUcmFjZX0pIHsKICAgIGFzc2VydChndWFyZCAhPSBudWxsKTsKICAgIGV4Y2VwdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHN0YWNrVHJhY2U/LnBhcmVudCA9IHRoaXM7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRDYXRjaCh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGd1YXJkPy5hY2NlcHQodik7CiAgICBleGNlcHRpb24/LmFjY2VwdCh2KTsKICAgIHN0YWNrVHJhY2U/LmFjY2VwdCh2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGd1YXJkID0gdi52aXNpdERhcnRUeXBlKGd1YXJkKTsKICAgIGlmIChleGNlcHRpb24gIT0gbnVsbCkgewogICAgICBleGNlcHRpb24gPSBleGNlcHRpb24uYWNjZXB0KHYpOwogICAgICBleGNlcHRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoc3RhY2tUcmFjZSAhPSBudWxsKSB7CiAgICAgIHN0YWNrVHJhY2UgPSBzdGFja1RyYWNlLmFjY2VwdCh2KTsKICAgICAgc3RhY2tUcmFjZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgVHJ5RmluYWxseSBleHRlbmRzIFN0YXRlbWVudCB7CiAgU3RhdGVtZW50IGJvZHk7CiAgU3RhdGVtZW50IGZpbmFsaXplcjsKCiAgVHJ5RmluYWxseSh0aGlzLmJvZHksIHRoaXMuZmluYWxpemVyKSB7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgZmluYWxpemVyPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdFRyeUZpbmFsbHkodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRUcnlGaW5hbGx5KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBib2R5Py5hY2NlcHQodik7CiAgICBmaW5hbGl6ZXI/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGZpbmFsaXplciAhPSBudWxsKSB7CiAgICAgIGZpbmFsaXplciA9IGZpbmFsaXplci5hY2NlcHQodik7CiAgICAgIGZpbmFsaXplcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBTdGF0ZW1lbnQgb2YgZm9ybSBgeWllbGQgeGAgb3IgYHlpZWxkKiB4YC4KLy8vCi8vLyBGb3IgbmF0aXZlIHlpZWxkIHNlbWFudGljcyBzZWUgYEFzeW5jTWFya2VyLlN5bmNZaWVsZGluZ2AuCmNsYXNzIFlpZWxkU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBFeHByZXNzaW9uIGV4cHJlc3Npb247CiAgaW50IGZsYWdzID0gMDsKCiAgWWllbGRTdGF0ZW1lbnQodGhpcy5leHByZXNzaW9uLAogICAgICB7Ym9vbCBpc1lpZWxkU3RhcjogZmFsc2UsIGJvb2wgaXNOYXRpdmU6IGZhbHNlfSkgewogICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICAgIHRoaXMuaXNZaWVsZFN0YXIgPSBpc1lpZWxkU3RhcjsKICAgIHRoaXMuaXNOYXRpdmUgPSBpc05hdGl2ZTsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ1lpZWxkU3RhciA9IDEgPDwgMDsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdOYXRpdmUgPSAxIDw8IDE7CgogIGJvb2wgZ2V0IGlzWWllbGRTdGFyID0+IGZsYWdzICYgRmxhZ1lpZWxkU3RhciAhPSAwOwogIGJvb2wgZ2V0IGlzTmF0aXZlID0+IGZsYWdzICYgRmxhZ05hdGl2ZSAhPSAwOwoKICB2b2lkIHNldCBpc1lpZWxkU3Rhcihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ1lpZWxkU3RhcikgOiAoZmxhZ3MgJiB+RmxhZ1lpZWxkU3Rhcik7CiAgfQoKICB2b2lkIHNldCBpc05hdGl2ZShib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ05hdGl2ZSkgOiAoZmxhZ3MgJiB+RmxhZ05hdGl2ZSk7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0WWllbGRTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRZaWVsZFN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRGVjbGFyYXRpb24gb2YgYSBsb2NhbCB2YXJpYWJsZS4KLy8vCi8vLyBUaGlzIG1heSBvY2N1ciBhcyBhIHN0YXRlbWVudCwgYnV0IGlzIGFsc28gdXNlZCBpbiBzZXZlcmFsIG5vbi1zdGF0ZW1lbnQKLy8vIGNvbnRleHRzLCBzdWNoIGFzIGluIFtGb3JTdGF0ZW1lbnRdLCBbQ2F0Y2hdLCBhbmQgW0Z1bmN0aW9uTm9kZV0uCi8vLwovLy8gV2hlbiB0aGlzIG9jY3VycyBhcyBhIHN0YXRlbWVudCwgaXQgbXVzdCBiZSBhIGRpcmVjdCBjaGlsZCBvZiBhIFtCbG9ja10uCi8vCi8vIERFU0lHTiBUT0RPOiBTaG91bGQgd2UgcmVtb3ZlIHRoZSAnZmluYWwnIG1vZGlmaWVyIGZyb20gdmFyaWFibGVzPwpAY29xcmVmCmNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5kcyBTdGF0ZW1lbnQgewogIC8vLyBPZmZzZXQgb2YgdGhlIGVxdWFscyBzaWduIGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKQogIC8vLyBpZiB0aGUgZXF1YWxzIHNpZ24gb2Zmc2V0IGlzIG5vdCBhdmFpbGFibGUgKGUuZy4gaWYgbm90IGluaXRpYWxpemVkKQogIC8vLyAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseSBzZXQpLgogIGludCBmaWxlRXF1YWxzT2Zmc2V0ID0gVHJlZU5vZGUubm9PZmZzZXQ7CgogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGFubm90YXRpb25zIG9uIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gVGhpcyBkZWZhdWx0cyB0byBhbiBpbW11dGFibGUgZW1wdHkgbGlzdC4gVXNlIFthZGRBbm5vdGF0aW9uXSB0byBhZGQKICAvLy8gYW5ub3RhdGlvbnMgaWYgbmVlZGVkLgogIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSBjb25zdCA8RXhwcmVzc2lvbj5bXTsKCiAgLy8vIEZvciBuYW1lZCBwYXJhbWV0ZXJzLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIE5vIHR3byBuYW1lZAogIC8vLyBwYXJhbWV0ZXJzIChpbiB0aGUgc2FtZSBwYXJhbWV0ZXIgbGlzdCkgY2FuIGhhdmUgdGhlIHNhbWUgbmFtZS4KICAvLy8KICAvLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB0aGUgbmFtZSBpcyBjb3NtZXRpYywgbWF5IGJlIGVtcHR5IG9yIG51bGwsCiAgLy8vIGFuZCBpcyBub3QgbmVjZXNzYXJpbHkgdW5pcXVlLgogIFN0cmluZyBuYW1lOwogIGludCBmbGFncyA9IDA7CiAgRGFydFR5cGUgdHlwZTsgLy8gTm90IG51bGwsIGRlZmF1bHRzIHRvIGR5bmFtaWMuCgogIC8vLyBPZmZzZXQgb2YgdGhlIGRlY2xhcmF0aW9uLCBzZXQgYW5kIHVzZWQgd2hlbiB3cml0aW5nIHRoZSBiaW5hcnkuCiAgaW50IGJpbmFyeU9mZnNldE5vVGFnID0gLTE7CgogIC8vLyBGb3IgbG9jYWxzLCB0aGlzIGlzIHRoZSBpbml0aWFsIHZhbHVlLgogIC8vLyBGb3IgcGFyYW1ldGVycywgdGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KICAvLy8KICAvLy8gU2hvdWxkIGJlIG51bGwgaW4gb3RoZXIgY2FzZXMuCiAgQGNvcW9wdAogIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXI7IC8vIE1heSBiZSBudWxsLgoKICBWYXJpYWJsZURlY2xhcmF0aW9uKHRoaXMubmFtZSwKICAgICAge3RoaXMuaW5pdGlhbGl6ZXIsCiAgICAgIHRoaXMudHlwZTogY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgaW50IGZsYWdzOiAtMSwKICAgICAgYm9vbCBpc0ZpbmFsOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc0ZpZWxkRm9ybWFsOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvdmFyaWFudDogZmFsc2UsCiAgICAgIGJvb2wgaXNMYXRlOiBmYWxzZSwKICAgICAgYm9vbCBpc1JlcXVpcmVkOiBmYWxzZX0pIHsKICAgIGFzc2VydCh0eXBlICE9IG51bGwpOwogICAgaW5pdGlhbGl6ZXI/LnBhcmVudCA9IHRoaXM7CiAgICBpZiAoZmxhZ3MgIT0gLTEpIHsKICAgICAgdGhpcy5mbGFncyA9IGZsYWdzOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5pc0ZpbmFsID0gaXNGaW5hbDsKICAgICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdDsKICAgICAgdGhpcy5pc0ZpZWxkRm9ybWFsID0gaXNGaWVsZEZvcm1hbDsKICAgICAgdGhpcy5pc0NvdmFyaWFudCA9IGlzQ292YXJpYW50OwogICAgICB0aGlzLmlzTGF0ZSA9IGlzTGF0ZTsKICAgICAgdGhpcy5pc1JlcXVpcmVkID0gaXNSZXF1aXJlZDsKICAgIH0KICB9CgogIC8vLyBDcmVhdGVzIGEgc3ludGhldGljIHZhcmlhYmxlIHdpdGggdGhlIGdpdmVuIGV4cHJlc3Npb24gYXMgaW5pdGlhbGl6ZXIuCiAgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSh0aGlzLmluaXRpYWxpemVyLAogICAgICB7Ym9vbCBpc0ZpbmFsOiB0cnVlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRmllbGRGb3JtYWw6IGZhbHNlLAogICAgICBib29sIGlzTGF0ZTogZmFsc2UsCiAgICAgIGJvb2wgaXNSZXF1aXJlZDogZmFsc2UsCiAgICAgIHRoaXMudHlwZTogY29uc3QgRHluYW1pY1R5cGUoKX0pIHsKICAgIGFzc2VydCh0eXBlICE9IG51bGwpOwogICAgaW5pdGlhbGl6ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB0aGlzLmlzRmluYWwgPSBpc0ZpbmFsOwogICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdDsKICAgIHRoaXMuaXNGaWVsZEZvcm1hbCA9IGlzRmllbGRGb3JtYWw7CiAgICB0aGlzLmlzTGF0ZSA9IGlzTGF0ZTsKICAgIHRoaXMuaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQ7CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IEZsYWdGaW5hbCA9IDEgPDwgMDsgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ29uc3QgPSAxIDw8IDE7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnRmllbGRGb3JtYWwgPSAxIDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ292YXJpYW50ID0gMSA8PCAzOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0luU2NvcGUgPSAxIDw8IDQ7IC8vIFRlbXBvcmFyeSBmbGFnIHVzZWQgYnkgdmVyaWZpZXIuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnR2VuZXJpY0NvdmFyaWFudEltcGwgPSAxIDw8IDU7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnTGF0ZSA9IDEgPDwgNjsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdSZXF1aXJlZCA9IDEgPDwgNzsKCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiBmbGFncyAmIEZsYWdGaW5hbCAhPSAwOwogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmxhZ3MgJiBGbGFnQ29uc3QgIT0gMDsKCiAgLy8vIFdoZXRoZXIgdGhlIHBhcmFtZXRlciBpcyBkZWNsYXJlZCB3aXRoIHRoZSBgY292YXJpYW50YCBrZXl3b3JkLgogIGJvb2wgZ2V0IGlzQ292YXJpYW50ID0+IGZsYWdzICYgRmxhZ0NvdmFyaWFudCAhPSAwOwoKICAvLy8gV2hldGhlciB0aGUgdmFyaWFibGUgaXMgZGVjbGFyZWQgYXMgYSBmaWVsZCBmb3JtYWwgcGFyYW1ldGVyIG9mCiAgLy8vIGEgY29uc3RydWN0b3IuCiAgQGluZm9ybWF0aXZlCiAgYm9vbCBnZXQgaXNGaWVsZEZvcm1hbCA9PiBmbGFncyAmIEZsYWdGaWVsZEZvcm1hbCAhPSAwOwoKICAvLy8gSWYgdGhpcyBbVmFyaWFibGVEZWNsYXJhdGlvbl0gaXMgYSBwYXJhbWV0ZXIgb2YgYSBtZXRob2QsIGluZGljYXRlcwogIC8vLyB3aGV0aGVyIHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gY29udGFpbiBhIHJ1bnRpbWUgdHlwZSBjaGVjayB0bwogIC8vLyBkZWFsIHdpdGggZ2VuZXJpYyBjb3ZhcmlhbmNlLgogIC8vLwogIC8vLyBXaGVuIGB0cnVlYCwgcnVudGltZSBjaGVja3MgbWF5IG5lZWQgdG8gYmUgcGVyZm9ybWVkOyBzZWUKICAvLy8gW0Rpc3BhdGNoQ2F0ZWdvcnldIGZvciBkZXRhaWxzLgogIGJvb2wgZ2V0IGlzR2VuZXJpY0NvdmFyaWFudEltcGwgPT4gZmxhZ3MgJiBGbGFnR2VuZXJpY0NvdmFyaWFudEltcGwgIT0gMDsKCiAgLy8vIFdoZXRoZXIgdGhlIHZhcmlhYmxlIGlzIGRlY2xhcmVkIHdpdGggdGhlIGBsYXRlYCBrZXl3b3JkLgogIC8vLwogIC8vLyBUaGUgYGxhdGVgIG1vZGlmaWVyIGlzIG9ubHkgc3VwcG9ydGVkIG9uIGxvY2FsIHZhcmlhYmxlcyBhbmQgbm90IG9uCiAgLy8vIHBhcmFtZXRlcnMuCiAgYm9vbCBnZXQgaXNMYXRlID0+IGZsYWdzICYgRmxhZ0xhdGUgIT0gMDsKCiAgLy8vIFdoZXRoZXIgdGhlIHBhcmFtZXRlciBpcyBkZWNsYXJlZCB3aXRoIHRoZSBgcmVxdWlyZWRgIGtleXdvcmQuCiAgLy8vCiAgLy8vIFRoZSBgcmVxdWlyZWRgIG1vZGlmaWVyIGlzIG9ubHkgc3VwcG9ydGVkIG9uIG5hbWVkIHBhcmFtZXRlcnMgYW5kIG5vdCBvbgogIC8vLyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgYW5kIGxvY2FsIHZhcmlhYmxlcy4KICBib29sIGdldCBpc1JlcXVpcmVkID0+IGZsYWdzICYgRmxhZ1JlcXVpcmVkICE9IDA7CgogIHZvaWQgc2V0IGlzRmluYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdGaW5hbCkgOiAoZmxhZ3MgJiB+RmxhZ0ZpbmFsKTsKICB9CgogIHZvaWQgc2V0IGlzQ29uc3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdDb25zdCkgOiAoZmxhZ3MgJiB+RmxhZ0NvbnN0KTsKICB9CgogIHZvaWQgc2V0IGlzQ292YXJpYW50KGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQ292YXJpYW50KSA6IChmbGFncyAmIH5GbGFnQ292YXJpYW50KTsKICB9CgogIEBpbmZvcm1hdGl2ZQogIHZvaWQgc2V0IGlzRmllbGRGb3JtYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdGaWVsZEZvcm1hbCkgOiAoZmxhZ3MgJiB+RmxhZ0ZpZWxkRm9ybWFsKTsKICB9CgogIHZvaWQgc2V0IGlzR2VuZXJpY0NvdmFyaWFudEltcGwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdHZW5lcmljQ292YXJpYW50SW1wbCk7CiAgfQoKICB2b2lkIHNldCBpc0xhdGUoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdMYXRlKSA6IChmbGFncyAmIH5GbGFnTGF0ZSk7CiAgfQoKICB2b2lkIHNldCBpc1JlcXVpcmVkKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnUmVxdWlyZWQpIDogKGZsYWdzICYgfkZsYWdSZXF1aXJlZCk7CiAgfQoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBhbm5vdGF0aW9uKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgewogICAgICBhbm5vdGF0aW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgfQogICAgYW5ub3RhdGlvbnMuYWRkKGFubm90YXRpb24uLnBhcmVudCA9IHRoaXMpOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24odGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoYW5ub3RhdGlvbnMsIHYpOwogICAgdHlwZT8uYWNjZXB0KHYpOwogICAgaW5pdGlhbGl6ZXI/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QoYW5ub3RhdGlvbnMsIHYsIHRoaXMpOwogICAgdHlwZSA9IHYudmlzaXREYXJ0VHlwZSh0eXBlKTsKICAgIGlmIChpbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgIGluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIuYWNjZXB0KHYpOwogICAgICBpbml0aWFsaXplcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgcG9zc2libHkgc3ludGhlc2l6ZWQgbmFtZSBmb3IgdGhpcyB2YXJpYWJsZSwgY29uc2lzdGVudCB3aXRoCiAgLy8vIHRoZSBuYW1lcyB1c2VkIGFjcm9zcyBhbGwgW3RvU3RyaW5nXSBjYWxscy4KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBkZWJ1Z1ZhcmlhYmxlRGVjbGFyYXRpb25OYW1lKHRoaXMpOwp9CgovLy8gRGVjbGFyYXRpb24gYSBsb2NhbCBmdW5jdGlvbi4KLy8vCi8vLyBUaGUgYm9keSBvZiB0aGUgZnVuY3Rpb24gbWF5IHVzZSBbdmFyaWFibGVdIGFzIGl0cyBzZWxmLXJlZmVyZW5jZS4KY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbiBleHRlbmRzIFN0YXRlbWVudCBpbXBsZW1lbnRzIExvY2FsRnVuY3Rpb24gewogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7IC8vIElzIGZpbmFsIGFuZCBoYXMgbm8gaW5pdGlhbGl6ZXIuCiAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uOwoKICBGdW5jdGlvbkRlY2xhcmF0aW9uKHRoaXMudmFyaWFibGUsIHRoaXMuZnVuY3Rpb24pIHsKICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbih0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZhcmlhYmxlPy5hY2NlcHQodik7CiAgICBmdW5jdGlvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5hY2NlcHQodik7CiAgICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgZnVuY3Rpb24gPSBmdW5jdGlvbi5hY2NlcHQodik7CiAgICAgIGZ1bmN0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBBIHB1YmxpYyBuYW1lLCBvciBhIHByaXZhdGUgbmFtZSBxdWFsaWZpZWQgYnkgYSBsaWJyYXJ5LgovLy8KLy8vIE5hbWVzIGFyZSBvbmx5IHVzZWQgZm9yIGV4cHJlc3Npb25zIHdpdGggZHluYW1pYyBkaXNwYXRjaCwgYXMgYWxsCi8vLyBzdGF0aWNhbGx5IHJlc29sdmVkIHJlZmVyZW5jZXMgYXJlIHJlcHJlc2VudGVkIGluIG5hbWVsZXNzIGZvcm0uCi8vLwovLy8gW05hbWVdcyBhcmUgaW1tdXRhYmxlIGFuZCBjb21wYXJlIGJhc2VkIG9uIHN0cnVjdHVyYWwgZXF1YWxpdHksIGFuZCB0aGV5Ci8vLyBhcmUgbm90IEFTVCBub2Rlcy4KLy8vCi8vLyBUaGUgW3RvU3RyaW5nXSBtZXRob2QgcmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyB0aGF0IGluY2x1ZGVzIHRoZQovLy8gbGlicmFyeSBuYW1lIGZvciBwcml2YXRlIG5hbWVzOyB1bmlxdWVuZXNzIGlzIG5vdCBndWFyYW50ZWVkLgpAY29xCmFic3RyYWN0IGNsYXNzIE5hbWUgaW1wbGVtZW50cyBOb2RlIHsKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgQGNvcQogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBub2NvcQogIFJlZmVyZW5jZSBnZXQgbGlicmFyeU5hbWU7CiAgQG5vY29xCiAgTGlicmFyeSBnZXQgbGlicmFyeTsKICBib29sIGdldCBpc1ByaXZhdGU7CgogIE5hbWUuX2ludGVybmFsKHRoaXMuaGFzaENvZGUsIHRoaXMubmFtZSk7CgogIGZhY3RvcnkgTmFtZShTdHJpbmcgbmFtZSwgW0xpYnJhcnkgbGlicmFyeV0pID0+CiAgICAgIG5ldyBOYW1lLmJ5UmVmZXJlbmNlKG5hbWUsIGxpYnJhcnk/LnJlZmVyZW5jZSk7CgogIGZhY3RvcnkgTmFtZS5ieVJlZmVyZW5jZShTdHJpbmcgbmFtZSwgUmVmZXJlbmNlIGxpYnJhcnlOYW1lKSB7CiAgICAvLy8gVXNlIHNlcGFyYXRlIHN1YmNsYXNzZXMgZm9yIHRoZSBwdWJsaWMgYW5kIHByaXZhdGUgY2FzZSB0byBzYXZlIG1lbW9yeQogICAgLy8vIGZvciBwdWJsaWMgbmFtZXMuCiAgICBpZiAobmFtZS5zdGFydHNXaXRoKCdfJykpIHsKICAgICAgYXNzZXJ0KGxpYnJhcnlOYW1lICE9IG51bGwpOwogICAgICByZXR1cm4gbmV3IF9Qcml2YXRlTmFtZShuYW1lLCBsaWJyYXJ5TmFtZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IF9QdWJsaWNOYW1lKG5hbWUpOwogICAgfQogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIE5hbWUgJiYgbmFtZSA9PSBvdGhlci5uYW1lICYmIGxpYnJhcnkgPT0gb3RoZXIubGlicmFyeTsKICB9CgogIGFjY2VwdChWaXNpdG9yIHYpID0+IHYudmlzaXROYW1lKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgLy8gREVTSUdOIFRPRE86IFNob3VsZCB3ZSB2aXNpdCB0aGUgbGlicmFyeSBhcyBhIGxpYnJhcnkgcmVmZXJlbmNlPwogIH0KfQoKY2xhc3MgX1ByaXZhdGVOYW1lIGV4dGVuZHMgTmFtZSB7CiAgZmluYWwgUmVmZXJlbmNlIGxpYnJhcnlOYW1lOwogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiB0cnVlOwoKICBfUHJpdmF0ZU5hbWUoU3RyaW5nIG5hbWUsIFJlZmVyZW5jZSBsaWJyYXJ5TmFtZSkKICAgICAgOiB0aGlzLmxpYnJhcnlOYW1lID0gbGlicmFyeU5hbWUsCiAgICAgICAgc3VwZXIuX2ludGVybmFsKF9jb21wdXRlSGFzaENvZGUobmFtZSwgbGlicmFyeU5hbWUpLCBuYW1lKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbGlicmFyeSAhPSBudWxsID8gJyRsaWJyYXJ5OjokbmFtZScgOiBuYW1lOwoKICBMaWJyYXJ5IGdldCBsaWJyYXJ5ID0+IGxpYnJhcnlOYW1lLmFzTGlicmFyeTsKCiAgc3RhdGljIGludCBfY29tcHV0ZUhhc2hDb2RlKFN0cmluZyBuYW1lLCBSZWZlcmVuY2UgbGlicmFyeU5hbWUpIHsKICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBGYWN0b3IgaW4gW2xpYnJhcnlOYW1lXSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIHdheSBpbnRvCiAgICAvLyB0aGUgcmVzdWx0LiAgTm90ZSwgdGhlIHByZXZpb3VzIGNvZGUgaGVyZSB3YXMgdGhlIGZvbGxvd2luZzoKICAgIC8vICAgICByZXR1cm4gMTMxICogbmFtZS5oYXNoQ29kZSArIDE3ICogbGlicmFyeU5hbWUuYXNMaWJyYXJ5Ll9saWJyYXJ5SWQ7CiAgICByZXR1cm4gbmFtZS5oYXNoQ29kZTsKICB9Cn0KCmNsYXNzIF9QdWJsaWNOYW1lIGV4dGVuZHMgTmFtZSB7CiAgUmVmZXJlbmNlIGdldCBsaWJyYXJ5TmFtZSA9PiBudWxsOwogIExpYnJhcnkgZ2V0IGxpYnJhcnkgPT4gbnVsbDsKICBib29sIGdldCBpc1ByaXZhdGUgPT4gZmFsc2U7CgogIF9QdWJsaWNOYW1lKFN0cmluZyBuYW1lKSA6IHN1cGVyLl9pbnRlcm5hbChuYW1lLmhhc2hDb2RlLCBuYW1lKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBSZXByZXNlbnRzIG51bGxhYmlsaXR5IG9mIGEgdHlwZS4KZW51bSBOdWxsYWJpbGl0eSB7CiAgLy8vIE51bGxhYmxlIHR5cGVzIGFyZSBtYXJrZWQgd2l0aCB0aGUgJz8nIG1vZGlmaWVyLgogIC8vLwogIC8vLyBOdWxsLCBkeW5hbWljLCBhbmQgdm9pZCBhcmUgbnVsbGFibGUgYnkgZGVmYXVsdC4KICBudWxsYWJsZSwKCiAgLy8vIE5vbi1udWxsYWJsZSB0eXBlcyBhcmUgdHlwZXMgdGhhdCBhcmVuJ3QgbWFya2VkIHdpdGggdGhlICc/JyBtb2RpZmllci4KICAvLy8KICAvLy8gTm90ZSB0aGF0IE51bGwsIGR5bmFtaWMsIGFuZCB2b2lkIHRoYXQgYXJlIG51bGxhYmxlIGJ5IGRlZmF1bHQuICBOb3RlIGFsc28KICAvLy8gdGhhdCBzb21lIHR5cGVzIGRlbm90ZWQgYnkgYSB0eXBlIHBhcmFtZXRlciB3aXRob3V0IHRoZSAnPycgbW9kaWZpZXIgY2FuCiAgLy8vIGJlIHNvbWV0aGluZyBlbHNlIHJhdGhlciB0aGFuIG5vbi1udWxsYWJsZS4KICBub25OdWxsYWJsZSwKCiAgLy8vIE5vbi1sZWdhY3kgdHlwZXMgdGhhdCBhcmUgbmVpdGhlciBudWxsYWJsZSwgbm9yIG5vbi1udWxsYWJsZS4KICAvLy8KICAvLy8gQW4gZXhhbXBsZSBvZiBzdWNoIHR5cGUgaXMgdHlwZSBUIGluIHRoZSBleGFtcGxlIGJlbG93LiAgTm90ZSB0aGF0IGJvdGgKICAvLy8gaW50IGFuZCBpbnQ/IGNhbiBiZSBwYXNzZWQgaW4gZm9yIFQsIHNvIGFuIGF0dGVtcHQgdG8gYXNzaWduIG51bGwgdG8geCBpcwogIC8vLyBhIGNvbXBpbGUtdGltZSBlcnJvciBhcyB3ZWxsIGFzIGFzc2lnbmluZyB4IHRvIHkuCiAgLy8vCiAgLy8vICAgY2xhc3MgQTxUIGV4dGVuZHMgT2JqZWN0Pz4gewogIC8vLyAgICAgZm9vKFQgeCkgewogIC8vLyAgICAgICB4ID0gbnVsbDsgICAgICAvLyBDb21waWxlLXRpbWUgZXJyb3IuCiAgLy8vICAgICAgIE9iamVjdCB5ID0geDsgIC8vIENvbXBpbGUtdGltZSBlcnJvci4KICAvLy8gICAgIH0KICAvLy8gICB9CiAgbmVpdGhlciwKCiAgLy8vIFR5cGVzIGluIG9wdC1vdXQgbGlicmFyaWVzIGFyZSAnbGVnYWN5JyB0eXBlcy4KICAvLy8KICAvLy8gVGhleSBhcmUgYm90aCBzdWJ0eXBlcyBhbmQgc3VwZXJ0eXBlcyBvZiB0aGUgbnVsbGFibGUgYW5kIG5vbi1udWxsYWJsZQogIC8vLyB2ZXJzaW9ucyBvZiB0aGUgdHlwZS4KICBsZWdhY3kKfQoKLy8vIEEgc3ludGF4LWluZGVwZW5kZW50IG5vdGlvbiBvZiBhIHR5cGUuCi8vLwovLy8gW0RhcnRUeXBlXXMgYXJlIG5vdCBBU1Qgbm9kZXMgYW5kIG1heSBiZSBzaGFyZWQgYmV0d2VlbiBkaWZmZXJlbnQgcGFyZW50cy4KLy8vCi8vLyBbRGFydFR5cGVdIG9iamVjdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdW5tb2RpZmlhYmxlIG9iamVjdHMsIGFsdGhvdWdoCi8vLyBpbW11dGFiaWxpdHkgaXMgbm90IGVuZm9yY2VkIGZvciBMaXN0IGZpZWxkcywgYW5kIFtUeXBlUGFyYW1ldGVyXXMgYXJlCi8vLyBjeWNsaWMgc3RydWN0dXJlcyB0aGF0IGFyZSBjb25zdHJ1Y3RlZCBieSBtdXRhdGlvbi4KLy8vCi8vLyBUaGUgYD09YCBvcGVyYXRvciBvbiBbRGFydFR5cGVdcyBjb21wYXJlIGJhc2VkIG9uIHR5cGUgZXF1YWxpdHksIG5vdAovLy8gb2JqZWN0IGlkZW50aXR5LgpAY29xCmFic3RyYWN0IGNsYXNzIERhcnRUeXBlIGV4dGVuZHMgTm9kZSB7CiAgY29uc3QgRGFydFR5cGUoKTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKTsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpOwoKICBOdWxsYWJpbGl0eSBnZXQgbnVsbGFiaWxpdHk7CgogIC8vLyBJZiB0aGlzIGlzIGEgdHlwZWRlZiB0eXBlLCByZXBlYXRlZGx5IHVuZm9sZHMgaXRzIHR5cGUgZGVmaW5pdGlvbiB1bnRpbAogIC8vLyB0aGUgcm9vdCB0ZXJtIGlzIG5vdCBhIHR5cGVkZWYgdHlwZSwgb3RoZXJ3aXNlIHJldHVybnMgdGhlIHR5cGUgaXRzZWxmLgogIC8vLwogIC8vLyBXaWxsIG5ldmVyIHJldHVybiBhIHR5cGVkZWYgdHlwZS4KICBEYXJ0VHlwZSBnZXQgdW5hbGlhcyA9PiB0aGlzOwoKICAvLy8gSWYgdGhpcyBpcyBhIHR5cGVkZWYgdHlwZSwgdW5mb2xkcyBpdHMgdHlwZSBkZWZpbml0aW9uIG9uY2UsIG90aGVyd2lzZQogIC8vLyByZXR1cm5zIHRoZSB0eXBlIGl0c2VsZi4KICBEYXJ0VHlwZSBnZXQgdW5hbGlhc09uY2UgPT4gdGhpczsKfQoKLy8vIFRoZSB0eXBlIGFyaXNpbmcgZnJvbSBpbnZhbGlkIHR5cGUgYW5ub3RhdGlvbnMuCi8vLwovLy8gQ2FuIHVzdWFsbHkgYmUgdHJlYXRlZCBhcyAnZHluYW1pYycsIGJ1dCBzaG91bGQgb2NjYXNpb25hbGx5IGJlIGhhbmRsZWQKLy8vIGRpZmZlcmVudGx5LCBlLmcuIGB4IGlzIEVSUk9SYCBzaG91bGQgZXZhbHVhdGUgdG8gZmFsc2UuCmNsYXNzIEludmFsaWRUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIGludCBoYXNoQ29kZSA9IDEyMzQ1OwoKICBjb25zdCBJbnZhbGlkVHlwZSgpOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRJbnZhbGlkVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW52YWxpZFR5cGUodGhpcywgYXJnKTsKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+IG90aGVyIGlzIEludmFsaWRUeXBlOwoKICBOdWxsYWJpbGl0eSBnZXQgbnVsbGFiaWxpdHkgPT4gdGhyb3cgIkludmFsaWRUeXBlIGRvZXNuJ3QgaGF2ZSBudWxsYWJpbGlpdHkiOwp9CgpjbGFzcyBEeW5hbWljVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBpbnQgaGFzaENvZGUgPSA1NDMyMTsKCiAgY29uc3QgRHluYW1pY1R5cGUoKTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0RHluYW1pY1R5cGUodGhpcyk7CiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdER5bmFtaWNUeXBlKHRoaXMsIGFyZyk7CiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PiBvdGhlciBpcyBEeW5hbWljVHlwZTsKCiAgTnVsbGFiaWxpdHkgZ2V0IG51bGxhYmlsaXR5ID0+IE51bGxhYmlsaXR5Lm51bGxhYmxlOwp9CgpjbGFzcyBWb2lkVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBpbnQgaGFzaENvZGUgPSAxMjMxMjE7CgogIGNvbnN0IFZvaWRUeXBlKCk7CgogIGFjY2VwdChEYXJ0VHlwZVZpc2l0b3IgdikgPT4gdi52aXNpdFZvaWRUeXBlKHRoaXMpOwogIGFjY2VwdDEoRGFydFR5cGVWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRWb2lkVHlwZSh0aGlzLCBhcmcpOwogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4gb3RoZXIgaXMgVm9pZFR5cGU7CgogIE51bGxhYmlsaXR5IGdldCBudWxsYWJpbGl0eSA9PiBOdWxsYWJpbGl0eS5udWxsYWJsZTsKfQoKY2xhc3MgQm90dG9tVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBpbnQgaGFzaENvZGUgPSA1MTQyMTM7CgogIGNvbnN0IEJvdHRvbVR5cGUoKTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0Qm90dG9tVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Qm90dG9tVHlwZSh0aGlzLCBhcmcpOwogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4gb3RoZXIgaXMgQm90dG9tVHlwZTsKCiAgTnVsbGFiaWxpdHkgZ2V0IG51bGxhYmlsaXR5ID0+IE51bGxhYmlsaXR5Lm5vbk51bGxhYmxlOwp9CgpAY29xCmNsYXNzIEludGVyZmFjZVR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgUmVmZXJlbmNlIGNsYXNzTmFtZTsKCiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CgogIEBub2NvcQogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIC8vLyBUaGUgW3R5cGVBcmd1bWVudHNdIGxpc3QgbXVzdCBub3QgYmUgbW9kaWZpZWQgYWZ0ZXIgdGhpcyBjYWxsLiBJZiB0aGUKICAvLy8gbGlzdCBpcyBvbWl0dGVkLCAnZHluYW1pYycgdHlwZSBhcmd1bWVudHMgYXJlIGZpbGxlZCBpbi4KICBJbnRlcmZhY2VUeXBlKENsYXNzIGNsYXNzTm9kZSwKICAgICAgW0xpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldENsYXNzUmVmZXJlbmNlKGNsYXNzTm9kZSksCiAgICAgICAgICAgIHR5cGVBcmd1bWVudHMgPz8gX2RlZmF1bHRUeXBlQXJndW1lbnRzKGNsYXNzTm9kZSksIG51bGxhYmlsaXR5KTsKCiAgSW50ZXJmYWNlVHlwZS5ieVJlZmVyZW5jZSh0aGlzLmNsYXNzTmFtZSwgdGhpcy50eXBlQXJndW1lbnRzLAogICAgICBbdGhpcy5udWxsYWJpbGl0eSA9IE51bGxhYmlsaXR5LmxlZ2FjeV0pOwoKICBDbGFzcyBnZXQgY2xhc3NOb2RlID0+IGNsYXNzTmFtZS5hc0NsYXNzOwoKICBzdGF0aWMgTGlzdDxEYXJ0VHlwZT4gX2RlZmF1bHRUeXBlQXJndW1lbnRzKENsYXNzIGNsYXNzTm9kZSkgewogICAgaWYgKGNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGggPT0gMCkgewogICAgICAvLyBBdm9pZCBhbGxvY2F0aW5nIGEgbGlzdCBpbiB0aGlzIHZlcnkgY29tbW9uIGNhc2UuCiAgICAgIHJldHVybiBjb25zdCA8RGFydFR5cGU+W107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgIGNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgfQogIH0KCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0SW50ZXJmYWNlVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW50ZXJmYWNlVHlwZSh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY2xhc3NOb2RlLmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAoY2xhc3NOYW1lICE9IG90aGVyLmNsYXNzTmFtZSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gb3RoZXIudHlwZUFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHR5cGVBcmd1bWVudHNbaV0gIT0gb3RoZXIudHlwZUFyZ3VtZW50c1tpXSkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgaGFzaCA9IDB4M2ZmZmZmZmYgJiBjbGFzc05hbWUuaGFzaENvZGU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgaGFzaCA9IDB4M2ZmZmZmZmYgJiAoaGFzaCAqIDMxICsgKGhhc2ggXiB0eXBlQXJndW1lbnRzW2ldLmhhc2hDb2RlKSk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9Cn0KCi8vLyBBIHBvc3NpYmx5IGdlbmVyaWMgZnVuY3Rpb24gdHlwZS4KQGNvcQpjbGFzcyBGdW5jdGlvblR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKICBmaW5hbCBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICBAY29xc2luZ2xlCiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gcG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgZmluYWwgTGlzdDxOYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVyczsgLy8gTXVzdCBiZSBzb3J0ZWQuCiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CgogIC8vLyBUaGUgW1R5cGVkZWZdIHRoaXMgZnVuY3Rpb24gdHlwZSBpcyBjcmVhdGVkIGZvci4KICBmaW5hbCBUeXBlZGVmVHlwZSB0eXBlZGVmVHlwZTsKCiAgZmluYWwgRGFydFR5cGUgcmV0dXJuVHlwZTsKICBpbnQgX2hhc2hDb2RlOwoKICBGdW5jdGlvblR5cGUoTGlzdDxEYXJ0VHlwZT4gcG9zaXRpb25hbFBhcmFtZXRlcnMsIHRoaXMucmV0dXJuVHlwZSwKICAgICAge3RoaXMubmFtZWRQYXJhbWV0ZXJzOiBjb25zdCA8TmFtZWRUeXBlPltdLAogICAgICB0aGlzLnR5cGVQYXJhbWV0ZXJzOiBjb25zdCA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgdGhpcy5udWxsYWJpbGl0eTogTnVsbGFiaWxpdHkubGVnYWN5LAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgdGhpcy50eXBlZGVmVHlwZX0pCiAgICAgIDogdGhpcy5wb3NpdGlvbmFsUGFyYW1ldGVycyA9IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIHRoaXMucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9CiAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPz8gcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOwoKICBAbm9jb3EKICBSZWZlcmVuY2UgZ2V0IHR5cGVkZWZSZWZlcmVuY2UgPT4gdHlwZWRlZlR5cGU/LnR5cGVkZWZSZWZlcmVuY2U7CgogIFR5cGVkZWYgZ2V0IHR5cGVkZWYgPT4gdHlwZWRlZlJlZmVyZW5jZT8uYXNUeXBlZGVmOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRGdW5jdGlvblR5cGUodGhpcyk7CiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEZ1bmN0aW9uVHlwZSh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KHR5cGVQYXJhbWV0ZXJzLCB2KTsKICAgIHZpc2l0TGlzdChwb3NpdGlvbmFsUGFyYW1ldGVycywgdik7CiAgICB2aXNpdExpc3QobmFtZWRQYXJhbWV0ZXJzLCB2KTsKICAgIHR5cGVkZWZUeXBlPy5hY2NlcHQodik7CiAgICByZXR1cm5UeXBlLmFjY2VwdCh2KTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICh0eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gb3RoZXIudHlwZVBhcmFtZXRlcnMubGVuZ3RoIHx8CiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9IG90aGVyLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgfHwKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCAhPSBvdGhlci5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggfHwKICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5sZW5ndGggIT0gb3RoZXIubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAodHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGlmIChwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSAhPSBvdGhlci5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBpZiAobmFtZWRQYXJhbWV0ZXJzW2ldICE9IG90aGVyLm5hbWVkUGFyYW1ldGVyc1tpXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR1cm5UeXBlID09IG90aGVyLnJldHVyblR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU3RydWN0dXJhbCBlcXVhbGl0eSBkb2VzIG5vdCB0ZWxsIHVzIGlmIHR3byBnZW5lcmljIGZ1bmN0aW9uIHR5cGVzCiAgICAgICAgLy8gYXJlIHRoZSBzYW1lIHR5cGUuICBJZiB0aGV5IGFyZSB1bmlmaWFibGUgd2l0aG91dCBzdWJzdGl0dXRpbmcgYW55CiAgICAgICAgLy8gdHlwZSB2YXJpYWJsZXMsIHRoZXkgYXJlIGVxdWFsLgogICAgICAgIHJldHVybiB1bmlmeVR5cGVzKHRoaXMsIG90aGVyLCBuZXcgU2V0PFR5cGVQYXJhbWV0ZXI+KCkpICE9IG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgdmFyaWFudCBvZiB0aGlzIGZ1bmN0aW9uIHR5cGUgdGhhdCBkb2VzIG5vdCBkZWNsYXJlIGFueSB0eXBlCiAgLy8vIHBhcmFtZXRlcnMuCiAgLy8vCiAgLy8vIEFueSB1c2VzIG9mIGl0cyB0eXBlIHBhcmFtZXRlcnMgYmVjb21lIGZyZWUgdmFyaWFibGVzIGluIHRoZSByZXR1cm5lZAogIC8vLyB0eXBlLgogIEZ1bmN0aW9uVHlwZSBnZXQgd2l0aG91dFR5cGVQYXJhbWV0ZXJzIHsKICAgIGlmICh0eXBlUGFyYW1ldGVycy5pc0VtcHR5KSByZXR1cm4gdGhpczsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHBvc2l0aW9uYWxQYXJhbWV0ZXJzLCByZXR1cm5UeXBlLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgdHlwZWRlZlR5cGU6IHR5cGVkZWZUeXBlKTsKICB9CgogIC8vLyBMb29rcyB1cCB0aGUgdHlwZSBvZiB0aGUgbmFtZWQgcGFyYW1ldGVyIHdpdGggdGhlIGdpdmVuIG5hbWUuCiAgLy8vCiAgLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZXJlIGlzIG5vIG5hbWVkIHBhcmFtZXRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLgogIERhcnRUeXBlIGdldE5hbWVkUGFyYW1ldGVyKFN0cmluZyBuYW1lKSB7CiAgICBpbnQgbG93ZXIgPSAwOwogICAgaW50IHVwcGVyID0gbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAtIDE7CiAgICB3aGlsZSAobG93ZXIgPD0gdXBwZXIpIHsKICAgICAgaW50IHBpdm90ID0gKGxvd2VyICsgdXBwZXIpIH4vIDI7CiAgICAgIHZhciBuYW1lZFBhcmFtZXRlciA9IG5hbWVkUGFyYW1ldGVyc1twaXZvdF07CiAgICAgIGludCBjb21wYXJpc29uID0gbmFtZS5jb21wYXJlVG8obmFtZWRQYXJhbWV0ZXIubmFtZSk7CiAgICAgIGlmIChjb21wYXJpc29uID09IDApIHsKICAgICAgICByZXR1cm4gbmFtZWRQYXJhbWV0ZXIudHlwZTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uIDwgMCkgewogICAgICAgIHVwcGVyID0gcGl2b3QgLSAxOwogICAgICB9IGVsc2UgewogICAgICAgIGxvd2VyID0gcGl2b3QgKyAxOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gX2hhc2hDb2RlID8/PSBfY29tcHV0ZUhhc2hDb2RlKCk7CgogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgaW50IGhhc2ggPSAxMjM3OwogICAgaGFzaCA9IDB4M2ZmZmZmZmYgJiAoaGFzaCAqIDMxICsgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyID0gdHlwZVBhcmFtZXRlcnNbaV07CiAgICAgIF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlW3BhcmFtZXRlcl0gPSBfdGVtcG9yYXJ5SGFzaENvZGVUYWJsZS5sZW5ndGg7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIHBhcmFtZXRlci5ib3VuZC5oYXNoQ29kZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLmhhc2hDb2RlKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIG5hbWVkUGFyYW1ldGVyc1tpXS5oYXNoQ29kZSk7CiAgICB9CiAgICBoYXNoID0gMHgzZmZmZmZmZiAmIChoYXNoICogMzEgKyByZXR1cm5UeXBlLmhhc2hDb2RlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgLy8gUmVtb3ZlIHRoZSB0eXBlIHBhcmFtZXRlcnMgZnJvbSB0aGUgc2NvcGUgYWdhaW4uCiAgICAgIF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlLnJlbW92ZSh0eXBlUGFyYW1ldGVyc1tpXSk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9Cn0KCi8vLyBBIHVzZSBvZiBhIFtUeXBlZGVmXSBhcyBhIHR5cGUuCi8vLwovLy8gVGhlIHVuZGVybHlpbmcgdHlwZSBjYW4gYmUgZXh0cmFjdGVkIHVzaW5nIFt1bmFsaWFzXS4KY2xhc3MgVHlwZWRlZlR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CiAgZmluYWwgUmVmZXJlbmNlIHR5cGVkZWZSZWZlcmVuY2U7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgVHlwZWRlZlR5cGUoVHlwZWRlZiB0eXBlZGVmTm9kZSwKICAgICAgW0xpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKHR5cGVkZWZOb2RlLnJlZmVyZW5jZSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyA/PyBjb25zdCA8RGFydFR5cGU+W10sIG51bGxhYmlsaXR5KTsKCiAgVHlwZWRlZlR5cGUuYnlSZWZlcmVuY2UodGhpcy50eXBlZGVmUmVmZXJlbmNlLCB0aGlzLnR5cGVBcmd1bWVudHMsCiAgICAgIFt0aGlzLm51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSk7CgogIFR5cGVkZWYgZ2V0IHR5cGVkZWZOb2RlID0+IHR5cGVkZWZSZWZlcmVuY2UuYXNUeXBlZGVmOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRUeXBlZGVmVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VHlwZWRlZlR5cGUodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICAgIHYudmlzaXRUeXBlZGVmUmVmZXJlbmNlKHR5cGVkZWZOb2RlKTsKICB9CgogIERhcnRUeXBlIGdldCB1bmFsaWFzT25jZSB7CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21UeXBlZGVmVHlwZSh0aGlzKS5zdWJzdGl0dXRlVHlwZSh0eXBlZGVmTm9kZS50eXBlKTsKICB9CgogIERhcnRUeXBlIGdldCB1bmFsaWFzIHsKICAgIHJldHVybiB1bmFsaWFzT25jZS51bmFsaWFzOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyBUeXBlZGVmVHlwZSkgewogICAgICBpZiAodHlwZWRlZlJlZmVyZW5jZSAhPSBvdGhlci50eXBlZGVmUmVmZXJlbmNlIHx8CiAgICAgICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBvdGhlci50eXBlQXJndW1lbnRzLmxlbmd0aCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAodHlwZUFyZ3VtZW50c1tpXSAhPSBvdGhlci50eXBlQXJndW1lbnRzW2ldKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gMHgzZmZmZmZmZiAmIHR5cGVkZWZOb2RlLmhhc2hDb2RlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIChoYXNoIF4gdHlwZUFyZ3VtZW50c1tpXS5oYXNoQ29kZSkpOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQp9CgovLy8gQSBuYW1lZCBwYXJhbWV0ZXIgaW4gW0Z1bmN0aW9uVHlwZV0uCmNsYXNzIE5hbWVkVHlwZSBleHRlbmRzIE5vZGUgaW1wbGVtZW50cyBDb21wYXJhYmxlPE5hbWVkVHlwZT4gewogIC8vIEZsYWcgdXNlZCBmb3Igc2VyaWFsaXphdGlvbiBpZiBbaXNSZXF1aXJlZF0uCiAgc3RhdGljIGNvbnN0IGludCBGbGFnUmVxdWlyZWROYW1lZFR5cGUgPSAxIDw8IDA7CgogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIERhcnRUeXBlIHR5cGU7CiAgZmluYWwgYm9vbCBpc1JlcXVpcmVkOwoKICBOYW1lZFR5cGUodGhpcy5uYW1lLCB0aGlzLnR5cGUsIHt0aGlzLmlzUmVxdWlyZWQ6IGZhbHNlfSk7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgTmFtZWRUeXBlICYmCiAgICAgICAgbmFtZSA9PSBvdGhlci5uYW1lICYmCiAgICAgICAgdHlwZSA9PSBvdGhlci50eXBlICYmCiAgICAgICAgaXNSZXF1aXJlZCA9PSBvdGhlci5pc1JlcXVpcmVkOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gbmFtZS5oYXNoQ29kZSAqIDMxICsgdHlwZS5oYXNoQ29kZSAqIDM3ICsgaXNSZXF1aXJlZC5oYXNoQ29kZSAqIDQxOwogIH0KCiAgaW50IGNvbXBhcmVUbyhOYW1lZFR5cGUgb3RoZXIpID0+IG5hbWUuY29tcGFyZVRvKG90aGVyLm5hbWUpOwoKICBhY2NlcHQoVmlzaXRvciB2KSA9PiB2LnZpc2l0TmFtZWRUeXBlKHRoaXMpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlLmFjY2VwdCh2KTsKICB9Cn0KCi8vLyBTdG9yZXMgdGhlIGhhc2ggY29kZSBvZiBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlcnMgd2hpbGUgY29tcHV0aW5nIHRoZSBoYXNoCi8vLyBjb2RlIG9mIGEgW0Z1bmN0aW9uVHlwZV0gb2JqZWN0LgovLy8KLy8vIFRoaXMgZW5zdXJlcyB0aGF0IGRpc3RpbmN0IFtGdW5jdGlvblR5cGVdIG9iamVjdHMgZ2V0IHRoZSBzYW1lIGhhc2ggY29kZQovLy8gaWYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgdHlwZSwgZXZlbiB0aG91Z2ggdGhlaXIgdHlwZSBwYXJhbWV0ZXJzIGFyZQovLy8gcmVwcmVzZW50ZWQgYnkgZGlmZmVyZW50IG9iamVjdHMuCmZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBpbnQ+IF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlID0gPFR5cGVQYXJhbWV0ZXIsIGludD57fTsKCi8vLyBSZWZlcmVuY2UgdG8gYSB0eXBlIHZhcmlhYmxlLgovLy8KLy8vIEEgdHlwZSB2YXJpYWJsZSBoYXMgYW4gb3B0aW9uYWwgYm91bmQgYmVjYXVzZSB0eXBlIHByb21vdGlvbiBjYW4gY2hhbmdlIHRoZQovLy8gYm91bmQuICBBIGJvdW5kIG9mIGBudWxsYCBpbmRpY2F0ZXMgdGhhdCB0aGUgYm91bmQgaGFzIG5vdCBiZWVuIHByb21vdGVkIGFuZAovLy8gaXMgdGhlIHNhbWUgYXMgdGhlIFtUeXBlUGFyYW1ldGVyXSdzIGJvdW5kLiAgVGhpcyBhbGxvd3Mgb25lIHRvIGRldGVjdAovLy8gd2hldGhlciB0aGUgYm91bmQgaGFzIGJlZW4gcHJvbW90ZWQuCmNsYXNzIFR5cGVQYXJhbWV0ZXJUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIC8vLyBEZWNsYXJlZCBieSB0aGUgcHJvZ3JhbW1lciBvbiB0aGUgdHlwZS4KICBmaW5hbCBOdWxsYWJpbGl0eSBkZWNsYXJlZE51bGxhYmlsaXR5OwoKICAvLy8gQWN0dWFsIG51bGxhYmlsaXR5IG9mIHRoZSB0eXBlLCBjYWxjdWxhdGVkIGZyb20gaXRzIHBhcnRzLgogIC8vLwogIC8vLyBbbnVsbGFiaWxpdHldIGlzIGNhbGN1bGF0ZWQgZnJvbSBbZGVjbGFyZWROdWxsYWJpbGl0eV0gYW5kIHRoZQogIC8vLyBudWxsYWJpbGl0aWVzIG9mIFtwcm9tb3RlZEJvdW5kXSBhbmQgdGhlIGJvdW5kIG9mIFtwYXJhbWV0ZXJdLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgaW4gdGhlIGZvbGxvd2luZyBwcm9ncmFtIFtkZWNsYXJlZE51bGxhYmlsaXR5XSBib3RoIGB4YCBhbmQKICAvLy8gYHlgIGlzIFtOdWxsYWJpbGl0eS5udWxsYWJsZV0sIGJlY2F1c2UgaXQncyBjb3BpZWQgZnJvbSB0aGF0IG9mIGBiYXJgLgogIC8vLyBIb3dldmVyLCBkZXNwaXRlIFtudWxsYWJpbGl0eV0gb2YgYHhgIGlzIFtOdWxsYWJpbGl0eS5udWxsYWJsZV0sCiAgLy8vIFtudWxsYWJpbGl0eV0gb2YgYHlgIGlzIFtOdWxsYWJpbGl0eS5ub25OdWxsYWJsZV0gYmVjYXVzZSBvZiBpdHMKICAvLy8gW3Byb21vdGVkQm91bmRdLgogIC8vLwogIC8vLyAgICAgY2xhc3MgQTxUIGV4dGVuZHMgT2JqZWN0Pz4gewogIC8vLyAgICAgICBmb28oVD8gYmFyKSB7CiAgLy8vICAgICAgICAgdmFyIHggPSBiYXI7CiAgLy8vICAgICAgICAgaWYgKGJhciBpcyBpbnQpIHsKICAvLy8gICAgICAgICAgIHZhciB5ID0gYmFyOwogIC8vLyAgICAgICAgIH0KICAvLy8gICAgICAgfQogIC8vLyAgICAgfQogIGZpbmFsIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5OwoKICBUeXBlUGFyYW1ldGVyIHBhcmFtZXRlcjsKCiAgLy8vIEFuIG9wdGlvbmFsIHByb21vdGVkIGJvdW5kIG9uIHRoZSB0eXBlIHBhcmFtZXRlci4KICAvLy8KICAvLy8gJ251bGwnIGluZGljYXRlcyB0aGF0IHRoZSB0eXBlIHBhcmFtZXRlcidzIGJvdW5kIGhhcyBub3QgYmVlbiBwcm9tb3RlZCBhbmQKICAvLy8gaXMgdGhlcmVmb3JlIHRoZSBzYW1lIGFzIHRoZSBib3VuZCBvZiBbcGFyYW1ldGVyXS4KICBEYXJ0VHlwZSBwcm9tb3RlZEJvdW5kOwoKICBUeXBlUGFyYW1ldGVyVHlwZSh0aGlzLnBhcmFtZXRlciwKICAgICAgW3RoaXMucHJvbW90ZWRCb3VuZCwgdGhpcy5kZWNsYXJlZE51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSkKICAgICAgOiB0aGlzLm51bGxhYmlsaXR5ID0KICAgICAgICAgICAgZ2V0TnVsbGFiaWxpdHkocGFyYW1ldGVyLCBwcm9tb3RlZEJvdW5kLCBkZWNsYXJlZE51bGxhYmlsaXR5KTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0VHlwZVBhcmFtZXRlclR5cGUodGhpcyk7CiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmIHBhcmFtZXRlciA9PSBvdGhlci5wYXJhbWV0ZXI7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlW3BhcmFtZXRlcl0gPz8gcGFyYW1ldGVyLmhhc2hDb2RlOwoKICAvLy8gUmV0dXJucyB0aGUgYm91bmQgb2YgdGhlIHR5cGUgcGFyYW1ldGVyLCBhY2NvdW50aW5nIGZvciBwcm9tb3Rpb25zLgogIERhcnRUeXBlIGdldCBib3VuZCA9PiBwcm9tb3RlZEJvdW5kID8/IHBhcmFtZXRlci5ib3VuZDsKCiAgLy8vIEdldCBudWxsYWJpbGl0eSBvZiBbVHlwZVBhcmFtZXRlclR5cGVdIGZyb20gYXJndW1lbnRzIHRvIGl0cyBjb25zdHJ1Y3Rvci4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBvbmx5IGluIHRoZSBjb25zdHJ1Y3RvciBvZgogIC8vLyBbVHlwZVBhcmFtZXRlclR5cGVdIHRvIGNvbXB1dGUgdGhlIHZhbHVlIG9mCiAgLy8vIFtUeXBlUGFyYW1ldGVyVHlwZS5udWxsYWJpbGl0eV0gZnJvbSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCiAgc3RhdGljIE51bGxhYmlsaXR5IGdldE51bGxhYmlsaXR5KFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLAogICAgICBEYXJ0VHlwZSBwcm9tb3RlZEJvdW5kLCBOdWxsYWJpbGl0eSBkZWNsYXJlZE51bGxhYmlsaXR5KSB7CiAgICAvLyBJZiBwcm9tb3RlZEJvdW5kIGlzIG51bGwsIGdldE51bGxhYmlsaXR5IHJldHVybnMgdGhlIG51bGxhYmlsaXR5IG9mCiAgICAvLyBlaXRoZXIgVCBvciBUPyB3aGVyZSBUIGlzIHBhcmFtZXRlciBhbmQgdGhlIHByZXNlbmNlIG9mICc/JyBpcyBkZXRlcm1pbmVkCiAgICAvLyBieSBudWxsYWJpbGl0eS4KCiAgICAvLyBJZiBwcm9tb3RlZEJvdW5kIGlzbid0IG51bGwsIGdldE51bGxhYmlsaXR5IHJldHVybnMgdGhlIG51bGxhYmlsaXR5IG9mIGFuCiAgICAvLyBpbnN0ZXNlY3Rpb24gb2YgdGhlIGxlZnQtaGFuZCBzaWRlIChyZWZlcnJlZCB0byBhcyBMSFMgYmVsb3cpIGFuZCB0aGUKICAgIC8vIHJpZ2h0LWhhbmQgc2lkZSAocmVmZXJyZWQgdG8gYXMgUkhTIGJlbG93KS4gIExIUyBpcyBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkKICAgIC8vIG51bGxhYmlsaXR5LCBhbmQgUkhTIGlzIHByb21vdGVkQm91bmQuICBUaGF0IGlzLCBnZXROdWxsYWJpbGl0eSByZXR1cm5zCiAgICAvLyB0aGUgbnVsbGFiaWxpdHkgb2YgZWl0aGVyIFQgJiBQIG9yIFQ/ICYgUCB3aGVyZSBUIGlzIHBhcmFtZXRlciwgUCBpcwogICAgLy8gcHJvbW90ZWRCb3VuZCwgYW5kIHRoZSBwcmVzZW5jZSBvZiAnPycgaXMgZGV0ZXJtaW5lZCBieSBudWxsYWJpbGl0eS4KICAgIC8vIE5vdGUgdGhhdCBSSFMgaXMgYWx3YXlzIGEgc3VidHlwZSBvZiB0aGUgYm91bmQgb2YgdGhlIHR5cGUgcGFyYW1ldGVyLgoKICAgIE51bGxhYmlsaXR5IGxoc051bGxhYmlsaXR5OwoKICAgIC8vIElmIHRoZSBudWxsYWJpbGl0eSBpcyBleHBsaWNpdGx5IG51bGxhYmxlLCB0aGF0IGlzLCBpZiB0aGUgdHlwZSBwYXJhbWV0ZXIKICAgIC8vIHR5cGUgaXMgZm9sbG93ZWQgYnkgJz8nIGluIHRoZSBjb2RlLCB0aGUgbnVsbGFiaWxpdHkgb2YgdGhlIHR5cGUgaXMKICAgIC8vICdudWxsYWJsZS4nCiAgICBpZiAoZGVjbGFyZWROdWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eS5udWxsYWJsZSkgewogICAgICBsaHNOdWxsYWJpbGl0eSA9IE51bGxhYmlsaXR5Lm51bGxhYmxlOwogICAgfSBlbHNlIHsKICAgICAgLy8gSWYgdGhlIGJvdW5kIGlzIG51bGxhYmxlLCBib3RoIG51bGxhYmxlIGFuZCBub24tbnVsbGFibGUgdHlwZXMgY2FuIGJlCiAgICAgIC8vIHBhc3NlZCBpbiBmb3IgdGhlIHR5cGUgcGFyYW1ldGVyLCBtYWtpbmcgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZQogICAgICAvLyBwYXJhbWV0ZXIgdHlwZXMgJ25laXRoZXIuJyAgT3RoZXJ3aXNlLCB0aGUgbnVsbGFiaWxpdHkgbWF0Y2hlcyB0aGF0IG9mCiAgICAgIC8vIHRoZSBib3VuZC4KICAgICAgRGFydFR5cGUgYm91bmQgPSBwYXJhbWV0ZXIuYm91bmQgPz8gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgTnVsbGFiaWxpdHkgYm91bmROdWxsYWJpbGl0eSA9CiAgICAgICAgICBib3VuZCBpcyBJbnZhbGlkVHlwZSA/IE51bGxhYmlsaXR5Lm5laXRoZXIgOiBib3VuZC5udWxsYWJpbGl0eTsKICAgICAgbGhzTnVsbGFiaWxpdHkgPSBib3VuZE51bGxhYmlsaXR5ID09IE51bGxhYmlsaXR5Lm51bGxhYmxlCiAgICAgICAgICA/IE51bGxhYmlsaXR5Lm5laXRoZXIKICAgICAgICAgIDogYm91bmROdWxsYWJpbGl0eTsKICAgIH0KICAgIGlmIChwcm9tb3RlZEJvdW5kID09IG51bGwpIHsKICAgICAgcmV0dXJuIGxoc051bGxhYmlsaXR5OwogICAgfQoKICAgIC8vIEluIHByYWN0aWNlIGEgdHlwZSBwYXJhbWV0ZXIgb2YgbGVnYWN5IHR5cGUgY2FuIG9ubHkgYmUgdXNlZCBpbiB0eXBlCiAgICAvLyBhbm5vdGF0aW9ucyB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2xhc3MgZGVjbGFyYXRpb24uICBJZiBpdCdzIGxlZ2FjeSwKICAgIC8vIHRoZW4gdGhlIGVudGlyZSBsaWJyYXJ5IGNvbnRhaW5pbmcgdGhlIGNsYXNzIGlzIG9wdC1vdXQsIGFuZCBhbnkgUkhTIGlzCiAgICAvLyBkZWVtZWQgdG8gYmUgbGVnYWN5IHRvby4gIFNvLCBpdCdzIG5lY2Vzc2FyeSB0byBvbmx5IGNoZWNrIExIUyBmb3IgYmVpbmcKICAgIC8vIGxlZ2FjeS4KICAgIGlmIChsaHNOdWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eS5sZWdhY3kpIHsKICAgICAgcmV0dXJuIE51bGxhYmlsaXR5LmxlZ2FjeTsKICAgIH0KCiAgICAvLyBJbnRlcnNlY3Rpb24gaXMgbm9uLW51bGxhYmxlIGlmIGFuZCBvbmx5IGlmIFJIUyBpcyBub24tbnVsbGFibGUuCiAgICAvLwogICAgLy8gVGhlIHByb29mIGlzIGFzIGZvbGxvd3MuICBJbnRlcnNlY3Rpb24gaXMgbm9uLW51bGxhYmxlIGlmIGF0IGxlYXN0IG9uZSBvZgogICAgLy8gTEhTIG9yIFJIUyBpcyBub24tbnVsbGFibGUuICBUaGUgY2FzZSBvZiBub24tbnVsbGFibGUgUkhTIGlzIHRyaXZpYWwuICBJbgogICAgLy8gdGhlIGNhc2Ugb2Ygbm9uLW51bGxhYmxlIExIUywgaXRzIGJvdW5kIHNob3VsZCBiZSBub24tbnVsbGFibGUuICBSSFMgaXMKICAgIC8vIGtub3duIHRvIGFsd2F5cyBiZSBhIHN1YnR5cGUgb2YgdGhlIGJvdW5kIG9mIExIUzsgdGhlcmVmb3JlLCBSSFMgaXMKICAgIC8vIG5vbi1udWxsYWJsZS4KICAgIC8vCiAgICAvLyBOb3RlIHRoYXQgaXQgYWxzbyBmb2xsb3dzIGZyb20gdGhlIGFib3ZlIHRoYXQgbm9uLW51bGxhYmxlIFJIUyBpbXBsaWVzCiAgICAvLyBub24tbnVsbGFibGUgTEhTLCBzbyB0aGUgY2hlY2sgYmVsb3cgY292ZXJzIHRoZSBjYXNlIGxoc051bGxhYmlsaXR5ID09CiAgICAvLyBOdWxsYWJpbGl0eS5ub25OdWxsYWJsZS4KICAgIGlmIChwcm9tb3RlZEJvdW5kLm51bGxhYmlsaXR5ID09IE51bGxhYmlsaXR5Lm5vbk51bGxhYmxlKSB7CiAgICAgIHJldHVybiBOdWxsYWJpbGl0eS5ub25OdWxsYWJsZTsKICAgIH0KCiAgICAvLyBJZiB0aGUgbnVsbGFiaWxpdHkgb2YgTEhTIGlzICduZWl0aGVyLCcgdGhlIG51bGxhYmlsaXR5IG9mIHRoZQogICAgLy8gaW50ZXJzZWN0aW9uIGlzIGFsc28gJ25laXRoZXInIGlmIFJIUyBpcyAnbmVpdGhlcicgb3IgbnVsbGFibGUuCiAgICAvLwogICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgogICAgLy8KICAgIC8vICAgICBjbGFzcyBBPFggZXh0ZW5kcyBPYmplY3Q/LCBZIGV4dGVuZHMgWD4gewogICAgLy8gICAgICAgZm9vKFggeCkgewogICAgLy8gICAgICAgICBpZiAoeCBpcyBZKSB7CiAgICAvLyAgICAgICAgICAgeCA9IG51bGw7ICAgICAvLyBDb21waWxlLXRpbWUgZXJyb3IuICBDb25zaWRlciBYID0gWSA9IGludC4KICAgIC8vICAgICAgICAgICBPYmplY3QgYSA9IHg7IC8vIENvbXBpbGUtdGltZSBlcnJvci4gIENvbnNpZGVyIFggPSBZID0gaW50Py4KICAgIC8vICAgICAgICAgfQogICAgLy8gICAgICAgICBpZiAoeCBpcyBpbnQ/KSB7CiAgICAvLyAgICAgICAgICAgeCA9IG51bGw7ICAgICAvLyBDb21waWxlLXRpbWUgZXJyb3IuICBDb25zaWRlciBYID0gaW50LgogICAgLy8gICAgICAgICAgIE9iamVjdCBiID0geDsgLy8gQ29tcGlsZS10aW1lIGVycm9yLiAgQ29uc2lkZXIgWCA9IGludD8uCiAgICAvLyAgICAgICAgIH0KICAgIC8vICAgICAgIH0KICAgIC8vICAgICB9CiAgICAvLwogICAgLy8gTm90ZSB0aGF0IFJIUyBjYW4ndCBiZSAnbGVnYWN5JyBvciBub24tbnVsbGFibGUgYXQgdGhpcyBwb2ludCBkdWUgdG8gdGhlCiAgICAvLyBjaGVja3MgYWJvdmUuCiAgICBpZiAobGhzTnVsbGFiaWxpdHkgPT0gTnVsbGFiaWxpdHkubmVpdGhlcikgewogICAgICByZXR1cm4gTnVsbGFiaWxpdHkubmVpdGhlcjsKICAgIH0KCiAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBvbmx5IHBvc3NpYmlsaXR5IGZvciBMSFMgaXMgdG8gYmUgbnVsbGFibGUsIGFuZCBmb3IgUkhTCiAgICAvLyBpcyB0byBiZSBlaXRoZXIgbnVsbGFibGUgb3IgbGVnYWN5LiAgQm90aCBjb21iaW5hdGlvbnMgZm9yIExIUyBhbmQgUkhTCiAgICAvLyBzaG91bGQgeWllbGQgdGhlIG51bGxhYmlsaXR5IG9mIFJIUyBhcyB0aGUgbnVsbGFiaWxpdHkgZm9yIHRoZQogICAgLy8gaW50ZXJzZWN0aW9uLiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb2RlIGZvciBjbGFyaWZpY2F0aW9uOgogICAgLy8KICAgIC8vICAgY2xhc3MgQTxYIGV4dGVuZHMgT2JqZWN0PywgWSBleHRlbmRzIFg+IHsKICAgIC8vICAgICBmb28oWD8geCkgewogICAgLy8gICAgICAgaWYgKHggaXMgWSkgewogICAgLy8gICAgICAgICB4ID0gbnVsbDsgICAgIC8vIENvbXBpbGUtdGltZSBlcnJvci4gIENvbnNpZGVyIFggPSBZID0gaW50LgogICAgLy8gICAgICAgICBPYmplY3QgYSA9IHg7IC8vIENvbXBpbGUtdGltZSBlcnJvci4gIENvbnNpZGVyIFggPSBZID0gaW50Py4KICAgIC8vICAgICAgIH0KICAgIC8vICAgICAgIGlmICh4IGlzIGludD8pIHsKICAgIC8vICAgICAgICAgeCA9IG51bGw7ICAgICAvLyBPay4gIEJvdGggWD8gYW5kIGludD8gYXJlIG51bGxhYmxlLgogICAgLy8gICAgICAgfQogICAgLy8gICAgIH0KICAgIC8vICAgfQogICAgcmV0dXJuIHByb21vdGVkQm91bmQubnVsbGFiaWxpdHk7CiAgfQp9CgovLy8gRGVjbGFyYXRpb24gb2YgYSB0eXBlIHZhcmlhYmxlLgovLy8KLy8vIFR5cGUgcGFyYW1ldGVycyBkZWNsYXJlZCBpbiBhIFtDbGFzc10gb3IgW0Z1bmN0aW9uTm9kZV0gYXJlIHBhcnQgb2YgdGhlIEFTVCwKLy8vIGhhdmUgYSBwYXJlbnQgcG9pbnRlciB0byBpdHMgZGVjbGFyaW5nIGNsYXNzIG9yIGZ1bmN0aW9uLCBhbmQgd2lsbCBiZSBzZWVuCi8vLyBieSB0cmVlIHZpc2l0b3JzLgovLy8KLy8vIFR5cGUgcGFyYW1ldGVycyBkZWNsYXJlZCBieSBhIFtGdW5jdGlvblR5cGVdIGFyZSBvcnBoYW5zIGFuZCBoYXZlIGEgYG51bGxgCi8vLyBwYXJlbnQgcG9pbnRlci4gIFtUeXBlUGFyYW1ldGVyXSBvYmplY3RzIHNob3VsZCBub3QgYmUgc2hhcmVkIGJldHdlZW4KLy8vIGRpZmZlcmVudCBbRnVuY3Rpb25UeXBlXSBvYmplY3RzLgpjbGFzcyBUeXBlUGFyYW1ldGVyIGV4dGVuZHMgVHJlZU5vZGUgewogIGludCBmbGFncyA9IDA7CgogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGFubm90YXRpb25zIG9uIHRoZSB0eXBlIHBhcmFtZXRlci4KICAvLy8KICAvLy8gVGhpcyBkZWZhdWx0cyB0byBhbiBpbW11dGFibGUgZW1wdHkgbGlzdC4gVXNlIFthZGRBbm5vdGF0aW9uXSB0byBhZGQKICAvLy8gYW5ub3RhdGlvbnMgaWYgbmVlZGVkLgogIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSBjb25zdCA8RXhwcmVzc2lvbj5bXTsKCiAgU3RyaW5nIG5hbWU7IC8vIENvc21ldGljIG5hbWUuCgogIC8vLyBUaGUgYm91bmQgb24gdGhlIHR5cGUgdmFyaWFibGUuCiAgLy8vCiAgLy8vIFNob3VsZCBub3QgYmUgbnVsbCBleGNlcHQgdGVtcG9yYXJpbHkgZHVyaW5nIElSIGNvbnN0cnVjdGlvbi4gIFNob3VsZAogIC8vLyBiZSBzZXQgdG8gdGhlIHJvb3QgY2xhc3MgZm9yIHR5cGUgcGFyYW1ldGVycyB3aXRob3V0IGFuIGV4cGxpY2l0IGJvdW5kLgogIERhcnRUeXBlIGJvdW5kOwoKICAvLy8gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHR5cGUgdmFyaWFibGUuIEl0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUKICAvLy8gY29ycmVzcG9uZGluZyBtaXNzaW5nIHR5cGUgYXJndW1lbnQgaW4gdHlwZSBhbm5vdGF0aW9ucyBhbmQgYXMgdGhlCiAgLy8vIGZhbGwtYmFjayB0eXBlIHZhbHVlIGluIHR5cGUgaW5mZXJlbmNlIGF0IGNvbXBpbGUgdGltZS4gQXQgcnVuIHRpbWUsCiAgLy8vIFtkZWZhdWx0VHlwZV0gaXMgdXNlZCBieSB0aGUgYmFja2VuZHMgaW4gcGxhY2Ugb2YgdGhlIG1pc3NpbmcgdHlwZQogIC8vLyBhcmd1bWVudCBvZiBhIGR5bmFtaWMgaW52b2NhdGlvbiBvZiBhIGdlbmVyaWMgZnVuY3Rpb24uCiAgRGFydFR5cGUgZGVmYXVsdFR5cGU7CgogIFR5cGVQYXJhbWV0ZXIoW3RoaXMubmFtZSwgdGhpcy5ib3VuZCwgdGhpcy5kZWZhdWx0VHlwZV0pOwoKICAvLyBNdXN0IG1hdGNoIHNlcmlhbGl6ZWQgYml0IHBvc2l0aW9ucy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCA9IDEgPDwgMDsKCiAgLy8vIElmIHRoaXMgW1R5cGVQYXJhbWV0ZXJdIGlzIGEgdHlwZSBwYXJhbWV0ZXIgb2YgYSBnZW5lcmljIG1ldGhvZCwgaW5kaWNhdGVzCiAgLy8vIHdoZXRoZXIgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBjb250YWluIGEgcnVudGltZSB0eXBlIGNoZWNrIHRvCiAgLy8vIGRlYWwgd2l0aCBnZW5lcmljIGNvdmFyaWFuY2UuCiAgLy8vCiAgLy8vIFdoZW4gYHRydWVgLCBydW50aW1lIGNoZWNrcyBtYXkgbmVlZCB0byBiZSBwZXJmb3JtZWQ7IHNlZQogIC8vLyBbRGlzcGF0Y2hDYXRlZ29yeV0gZm9yIGRldGFpbHMuCiAgYm9vbCBnZXQgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9PiBmbGFncyAmIEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCAhPSAwOwoKICB2b2lkIHNldCBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUKICAgICAgICA/IChmbGFncyB8IEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCkKICAgICAgICA6IChmbGFncyAmIH5GbGFnR2VuZXJpY0NvdmFyaWFudEltcGwpOwogIH0KCiAgdm9pZCBhZGRBbm5vdGF0aW9uKEV4cHJlc3Npb24gYW5ub3RhdGlvbikgewogICAgaWYgKGFubm90YXRpb25zLmlzRW1wdHkpIHsKICAgICAgYW5ub3RhdGlvbnMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIH0KICAgIGFubm90YXRpb25zLmFkZChhbm5vdGF0aW9uLi5wYXJlbnQgPSB0aGlzKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0VHlwZVBhcmFtZXRlcih0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICBib3VuZC5hY2NlcHQodik7CiAgICBkZWZhdWx0VHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChhbm5vdGF0aW9ucywgdiwgdGhpcyk7CiAgICBib3VuZCA9IHYudmlzaXREYXJ0VHlwZShib3VuZCk7CiAgICBpZiAoZGVmYXVsdFR5cGUgIT0gbnVsbCkgewogICAgICBkZWZhdWx0VHlwZSA9IHYudmlzaXREYXJ0VHlwZShkZWZhdWx0VHlwZSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIHBvc3NpYmx5IHN5bnRoZXNpemVkIG5hbWUgZm9yIHRoaXMgdHlwZSBwYXJhbWV0ZXIsIGNvbnNpc3RlbnQKICAvLy8gd2l0aCB0aGUgbmFtZXMgdXNlZCBhY3Jvc3MgYWxsIFt0b1N0cmluZ10gY2FsbHMuCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gZGVidWdRdWFsaWZpZWRUeXBlUGFyYW1ldGVyTmFtZSh0aGlzKTsKCiAgYm9vbCBnZXQgaXNGdW5jdGlvblR5cGVUeXBlUGFyYW1ldGVyID0+IHBhcmVudCA9PSBudWxsOwp9CgpjbGFzcyBTdXBlcnR5cGUgZXh0ZW5kcyBOb2RlIHsKICBSZWZlcmVuY2UgY2xhc3NOYW1lOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIFN1cGVydHlwZShDbGFzcyBjbGFzc05vZGUsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShnZXRDbGFzc1JlZmVyZW5jZShjbGFzc05vZGUpLCB0eXBlQXJndW1lbnRzKTsKCiAgU3VwZXJ0eXBlLmJ5UmVmZXJlbmNlKHRoaXMuY2xhc3NOYW1lLCB0aGlzLnR5cGVBcmd1bWVudHMpOwoKICBDbGFzcyBnZXQgY2xhc3NOb2RlID0+IGNsYXNzTmFtZS5hc0NsYXNzOwoKICBhY2NlcHQoVmlzaXRvciB2KSA9PiB2LnZpc2l0U3VwZXJ0eXBlKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY2xhc3NOb2RlLmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICB9CgogIEludGVyZmFjZVR5cGUgZ2V0IGFzSW50ZXJmYWNlVHlwZSB7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY2xhc3NOb2RlLCB0eXBlQXJndW1lbnRzKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMgU3VwZXJ0eXBlKSB7CiAgICAgIGlmIChjbGFzc05hbWUgIT0gb3RoZXIuY2xhc3NOYW1lKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBvdGhlci50eXBlQXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAodHlwZUFyZ3VtZW50c1tpXSAhPSBvdGhlci50eXBlQXJndW1lbnRzW2ldKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gMHgzZmZmZmZmZiAmIGNsYXNzTmFtZS5oYXNoQ29kZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgICBoYXNoID0gMHgzZmZmZmZmZiAmIChoYXNoICogMzEgKyAoaGFzaCBeIHR5cGVBcmd1bWVudHNbaV0uaGFzaENvZGUpKTsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgphYnN0cmFjdCBjbGFzcyBDb25zdGFudCBleHRlbmRzIE5vZGUgewogIC8vLyBDYWxscyB0aGUgYHZpc2l0KkNvbnN0YW50UmVmZXJlbmNlKClgIG1ldGhvZCBvbiB2aXNpdG9yIFt2XSBmb3IgYWxsCiAgLy8vIGNvbnN0YW50cyByZWZlcmVuY2VkIGluIHRoaXMgY29uc3RhbnQuCiAgLy8vCiAgLy8vIChOb3RlIHRoYXQgYSBjb25zdGFudCBjYW4gYmUgc2VlbiBhcyBhIERBRyAoZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaCkgYW5kCiAgLy8vICBub3QgYSB0cmVlISkKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdik7CgogIC8vLyBDYWxscyB0aGUgYHZpc2l0KkNvbnN0YW50KClgIG1ldGhvZCBvbiB0aGUgdmlzaXRvciBbdl0uCiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KTsKCiAgLy8vIENhbGxzIHRoZSBgdmlzaXQqQ29uc3RhbnRSZWZlcmVuY2UoKWAgbWV0aG9kIG9uIHRoZSB2aXNpdG9yIFt2XS4KICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KTsKCiAgLy8vIFRoZSBLZXJuZWwgQVNUIHdpbGwgcmVmZXJlbmNlIFtDb25zdGFudF1zIHZpYSBbQ29uc3RhbnRFeHByZXNzaW9uXXMuICBUaGUKICAvLy8gY29uc3RhbnRzIGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgY2Fub25pY2FsaXplZCwgYnV0IHRoZXkgaGF2ZSB0byBiZSBkZWVwbHkKICAvLy8gY29tcGFyYWJsZSB2aWEgaGFzaENvZGUvPT0hCiAgaW50IGdldCBoYXNoQ29kZTsKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcik7CgogIC8vLyBHZXRzIHRoZSB0eXBlIG9mIHRoaXMgY29uc3RhbnQuCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpOwoKICBFeHByZXNzaW9uIGFzRXhwcmVzc2lvbigpIHsKICAgIHJldHVybiBuZXcgQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgUHJpbWl0aXZlQ29uc3RhbnQ8VD4gZXh0ZW5kcyBDb25zdGFudCB7CiAgZmluYWwgVCB2YWx1ZTsKCiAgUHJpbWl0aXZlQ29uc3RhbnQodGhpcy52YWx1ZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICckdmFsdWUnOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHZhbHVlLmhhc2hDb2RlOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgb3RoZXIgaXMgUHJpbWl0aXZlQ29uc3RhbnQ8VD4gJiYgb3RoZXIudmFsdWUgPT0gdmFsdWU7Cn0KCmNsYXNzIE51bGxDb25zdGFudCBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50PE51bGw+IHsKICBOdWxsQ29uc3RhbnQoKSA6IHN1cGVyKG51bGwpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXROdWxsQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdE51bGxDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLm51bGxUeXBlOwp9CgpjbGFzcyBCb29sQ29uc3RhbnQgZXh0ZW5kcyBQcmltaXRpdmVDb25zdGFudDxib29sPiB7CiAgQm9vbENvbnN0YW50KGJvb2wgdmFsdWUpIDogc3VwZXIodmFsdWUpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRCb29sQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdEJvb2xDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmJvb2xUeXBlOwp9CgpjbGFzcyBJbnRDb25zdGFudCBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50PGludD4gewogIEludENvbnN0YW50KGludCB2YWx1ZSkgOiBzdXBlcih2YWx1ZSk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdEludENvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRJbnRDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmludFR5cGU7Cn0KCmNsYXNzIERvdWJsZUNvbnN0YW50IGV4dGVuZHMgUHJpbWl0aXZlQ29uc3RhbnQ8ZG91YmxlPiB7CiAgRG91YmxlQ29uc3RhbnQoZG91YmxlIHZhbHVlKSA6IHN1cGVyKHZhbHVlKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0RG91YmxlQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdERvdWJsZUNvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHZhbHVlLmlzTmFOID8gMTk5IDogc3VwZXIuaGFzaENvZGU7CiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIERvdWJsZUNvbnN0YW50ICYmIGlkZW50aWNhbCh2YWx1ZSwgb3RoZXIudmFsdWUpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuZG91YmxlVHlwZTsKfQoKY2xhc3MgU3RyaW5nQ29uc3RhbnQgZXh0ZW5kcyBQcmltaXRpdmVDb25zdGFudDxTdHJpbmc+IHsKICBTdHJpbmdDb25zdGFudChTdHJpbmcgdmFsdWUpIDogc3VwZXIodmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICB9CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdFN0cmluZ0NvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRTdHJpbmdDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLnN0cmluZ1R5cGU7Cn0KCmNsYXNzIFN5bWJvbENvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFJlZmVyZW5jZSBsaWJyYXJ5UmVmZXJlbmNlOwoKICBTeW1ib2xDb25zdGFudCh0aGlzLm5hbWUsIHRoaXMubGlicmFyeVJlZmVyZW5jZSk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRTeW1ib2xDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0U3ltYm9sQ29uc3RhbnRSZWZlcmVuY2UodGhpcyk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBsaWJyYXJ5UmVmZXJlbmNlICE9IG51bGwKICAgICAgICA/ICcjJHtsaWJyYXJ5UmVmZXJlbmNlLmFzTGlicmFyeS5pbXBvcnRVcml9OjokbmFtZScKICAgICAgICA6ICcjJG5hbWUnOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfSGFzaC5oYXNoMihuYW1lLCBsaWJyYXJ5UmVmZXJlbmNlKTsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIGlkZW50aWNhbCh0aGlzLCBvdGhlcikgfHwKICAgICAgKG90aGVyIGlzIFN5bWJvbENvbnN0YW50ICYmCiAgICAgICAgICBvdGhlci5uYW1lID09IG5hbWUgJiYKICAgICAgICAgIG90aGVyLmxpYnJhcnlSZWZlcmVuY2UgPT0gbGlicmFyeVJlZmVyZW5jZSk7CgogIERhcnRUeXBlIGdldFR5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5zeW1ib2xUeXBlOwp9CgpjbGFzcyBNYXBDb25zdGFudCBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBEYXJ0VHlwZSBrZXlUeXBlOwogIGZpbmFsIERhcnRUeXBlIHZhbHVlVHlwZTsKICBmaW5hbCBMaXN0PENvbnN0YW50TWFwRW50cnk+IGVudHJpZXM7CgogIE1hcENvbnN0YW50KHRoaXMua2V5VHlwZSwgdGhpcy52YWx1ZVR5cGUsIHRoaXMuZW50cmllcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBrZXlUeXBlLmFjY2VwdCh2KTsKICAgIHZhbHVlVHlwZS5hY2NlcHQodik7CiAgICBmb3IgKGZpbmFsIENvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gZW50cmllcykgewogICAgICBlbnRyeS5rZXkuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgICBlbnRyeS52YWx1ZS5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB9CiAgfQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRNYXBDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0TWFwQ29uc3RhbnRSZWZlcmVuY2UodGhpcyk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICcke3RoaXMucnVudGltZVR5cGV9PCRrZXlUeXBlLCAkdmFsdWVUeXBlPigkZW50cmllcyknOwoKICBpbnQgX2NhY2hlZEhhc2hDb2RlOwogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIF9jYWNoZWRIYXNoQ29kZSA/Pz0gX0hhc2guY29tYmluZTJGaW5pc2goCiAgICAgICAga2V5VHlwZS5oYXNoQ29kZSwgdmFsdWVUeXBlLmhhc2hDb2RlLCBfSGFzaC5jb21iaW5lTGlzdEhhc2goZW50cmllcykpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIGlkZW50aWNhbCh0aGlzLCBvdGhlcikgfHwKICAgICAgKG90aGVyIGlzIE1hcENvbnN0YW50ICYmCiAgICAgICAgICBvdGhlci5rZXlUeXBlID09IGtleVR5cGUgJiYKICAgICAgICAgIG90aGVyLnZhbHVlVHlwZSA9PSB2YWx1ZVR5cGUgJiYKICAgICAgICAgIGxpc3RFcXVhbHMob3RoZXIuZW50cmllcywgZW50cmllcykpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4KICAgICAgdHlwZXMubGl0ZXJhbE1hcFR5cGUoa2V5VHlwZSwgdmFsdWVUeXBlKTsKfQoKY2xhc3MgQ29uc3RhbnRNYXBFbnRyeSB7CiAgZmluYWwgQ29uc3RhbnQga2V5OwogIGZpbmFsIENvbnN0YW50IHZhbHVlOwogIENvbnN0YW50TWFwRW50cnkodGhpcy5rZXksIHRoaXMudmFsdWUpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGtleTogJHZhbHVlJzsKCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfSGFzaC5oYXNoMihrZXksIHZhbHVlKTsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIENvbnN0YW50TWFwRW50cnkgJiYgb3RoZXIua2V5ID09IGtleSAmJiBvdGhlci52YWx1ZSA9PSB2YWx1ZTsKfQoKY2xhc3MgTGlzdENvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKICBmaW5hbCBMaXN0PENvbnN0YW50PiBlbnRyaWVzOwoKICBMaXN0Q29uc3RhbnQodGhpcy50eXBlQXJndW1lbnQsIHRoaXMuZW50cmllcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlQXJndW1lbnQuYWNjZXB0KHYpOwogICAgZm9yIChmaW5hbCBDb25zdGFudCBjb25zdGFudCBpbiBlbnRyaWVzKSB7CiAgICAgIGNvbnN0YW50LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIH0KICB9CgogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdExpc3RDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0TGlzdENvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHt0aGlzLnJ1bnRpbWVUeXBlfTwkdHlwZUFyZ3VtZW50PigkZW50cmllcyknOwoKICBpbnQgX2NhY2hlZEhhc2hDb2RlOwogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIF9jYWNoZWRIYXNoQ29kZSA/Pz0gX0hhc2guY29tYmluZUZpbmlzaCgKICAgICAgICB0eXBlQXJndW1lbnQuaGFzaENvZGUsIF9IYXNoLmNvbWJpbmVMaXN0SGFzaChlbnRyaWVzKSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgaWRlbnRpY2FsKHRoaXMsIG90aGVyKSB8fAogICAgICAob3RoZXIgaXMgTGlzdENvbnN0YW50ICYmCiAgICAgICAgICBvdGhlci50eXBlQXJndW1lbnQgPT0gdHlwZUFyZ3VtZW50ICYmCiAgICAgICAgICBsaXN0RXF1YWxzKG90aGVyLmVudHJpZXMsIGVudHJpZXMpKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+CiAgICAgIHR5cGVzLmxpdGVyYWxMaXN0VHlwZSh0eXBlQXJndW1lbnQpOwp9CgpjbGFzcyBTZXRDb25zdGFudCBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBEYXJ0VHlwZSB0eXBlQXJndW1lbnQ7CiAgZmluYWwgTGlzdDxDb25zdGFudD4gZW50cmllczsKCiAgU2V0Q29uc3RhbnQodGhpcy50eXBlQXJndW1lbnQsIHRoaXMuZW50cmllcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlQXJndW1lbnQuYWNjZXB0KHYpOwogICAgZm9yIChmaW5hbCBDb25zdGFudCBjb25zdGFudCBpbiBlbnRyaWVzKSB7CiAgICAgIGNvbnN0YW50LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIH0KICB9CgogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdFNldENvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRTZXRDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7dGhpcy5ydW50aW1lVHlwZX08JHR5cGVBcmd1bWVudD4oJGVudHJpZXMpJzsKCiAgaW50IF9jYWNoZWRIYXNoQ29kZTsKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBfY2FjaGVkSGFzaENvZGUgPz89IF9IYXNoLmNvbWJpbmVGaW5pc2goCiAgICAgICAgdHlwZUFyZ3VtZW50Lmhhc2hDb2RlLCBfSGFzaC5jb21iaW5lTGlzdEhhc2goZW50cmllcykpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIGlkZW50aWNhbCh0aGlzLCBvdGhlcikgfHwKICAgICAgKG90aGVyIGlzIFNldENvbnN0YW50ICYmCiAgICAgICAgICBvdGhlci50eXBlQXJndW1lbnQgPT0gdHlwZUFyZ3VtZW50ICYmCiAgICAgICAgICBsaXN0RXF1YWxzKG90aGVyLmVudHJpZXMsIGVudHJpZXMpKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmxpdGVyYWxTZXRUeXBlKHR5cGVBcmd1bWVudCk7Cn0KCmNsYXNzIEluc3RhbmNlQ29uc3RhbnQgZXh0ZW5kcyBDb25zdGFudCB7CiAgZmluYWwgUmVmZXJlbmNlIGNsYXNzUmVmZXJlbmNlOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgZmluYWwgTWFwPFJlZmVyZW5jZSwgQ29uc3RhbnQ+IGZpZWxkVmFsdWVzOwoKICBJbnN0YW5jZUNvbnN0YW50KHRoaXMuY2xhc3NSZWZlcmVuY2UsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5maWVsZFZhbHVlcyk7CgogIENsYXNzIGdldCBjbGFzc05vZGUgPT4gY2xhc3NSZWZlcmVuY2UuYXNDbGFzczsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGNsYXNzUmVmZXJlbmNlLmFzQ2xhc3MuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgdmlzaXRMaXN0KHR5cGVBcmd1bWVudHMsIHYpOwogICAgZm9yIChmaW5hbCBSZWZlcmVuY2UgcmVmZXJlbmNlIGluIGZpZWxkVmFsdWVzLmtleXMpIHsKICAgICAgcmVmZXJlbmNlLmFzRmllbGQuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgfQogICAgZm9yIChmaW5hbCBDb25zdGFudCBjb25zdGFudCBpbiBmaWVsZFZhbHVlcy52YWx1ZXMpIHsKICAgICAgY29uc3RhbnQuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgfQogIH0KCiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0SW5zdGFuY2VDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0SW5zdGFuY2VDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgZmluYWwgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnJHtjbGFzc1JlZmVyZW5jZS5hc0NsYXNzfScpOwogICAgaWYgKCFjbGFzc1JlZmVyZW5jZS5hc0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgc2Iud3JpdGUoJzwnKTsKICAgICAgc2Iud3JpdGUodHlwZUFyZ3VtZW50cy5tYXAoKHR5cGUpID0+IHR5cGUudG9TdHJpbmcoKSkuam9pbignLCAnKSk7CiAgICAgIHNiLndyaXRlKCc+Jyk7CiAgICB9CiAgICBzYi53cml0ZSgnIHsnKTsKICAgIGZpZWxkVmFsdWVzLmZvckVhY2goKFJlZmVyZW5jZSBmaWVsZFJlZiwgQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgICAgc2Iud3JpdGUoJyR7ZmllbGRSZWYuYXNGaWVsZC5uYW1lfTogJGNvbnN0YW50LCAnKTsKICAgIH0pOwogICAgc2Iud3JpdGUoJ30nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgaW50IF9jYWNoZWRIYXNoQ29kZTsKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBfY2FjaGVkSGFzaENvZGUgPz89IF9IYXNoLmNvbWJpbmUyRmluaXNoKAogICAgICAgIGNsYXNzUmVmZXJlbmNlLmhhc2hDb2RlLAogICAgICAgIGxpc3RIYXNoQ29kZSh0eXBlQXJndW1lbnRzKSwKICAgICAgICBfSGFzaC5jb21iaW5lTWFwSGFzaFVub3JkZXJlZChmaWVsZFZhbHVlcykpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIHJldHVybiBpZGVudGljYWwodGhpcywgb3RoZXIpIHx8CiAgICAgICAgKG90aGVyIGlzIEluc3RhbmNlQ29uc3RhbnQgJiYKICAgICAgICAgICAgb3RoZXIuY2xhc3NSZWZlcmVuY2UgPT0gY2xhc3NSZWZlcmVuY2UgJiYKICAgICAgICAgICAgbGlzdEVxdWFscyhvdGhlci50eXBlQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSAmJgogICAgICAgICAgICBtYXBFcXVhbHMob3RoZXIuZmllbGRWYWx1ZXMsIGZpZWxkVmFsdWVzKSk7CiAgfQoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4KICAgICAgbmV3IEludGVyZmFjZVR5cGUoY2xhc3NOb2RlLCB0eXBlQXJndW1lbnRzKTsKfQoKY2xhc3MgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBUZWFyT2ZmQ29uc3RhbnQgdGVhck9mZkNvbnN0YW50OwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVzOwoKICBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KHRoaXMudGVhck9mZkNvbnN0YW50LCB0aGlzLnR5cGVzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHRlYXJPZmZDb25zdGFudC5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB2aXNpdExpc3QodHlwZXMsIHYpOwogIH0KCiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PgogICAgICB2LnZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICcke3J1bnRpbWVUeXBlfSgke3RlYXJPZmZDb25zdGFudC5wcm9jZWR1cmV9PCR7dHlwZXMuam9pbignLCAnKX0+KSc7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9IYXNoLmNvbWJpbmVGaW5pc2goCiAgICAgIHRlYXJPZmZDb25zdGFudC5oYXNoQ29kZSwgX0hhc2guY29tYmluZUxpc3RIYXNoKHR5cGVzKSk7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCAmJgogICAgICAgIG90aGVyLnRlYXJPZmZDb25zdGFudCA9PSB0ZWFyT2ZmQ29uc3RhbnQgJiYKICAgICAgICBsaXN0RXF1YWxzKG90aGVyLnR5cGVzLCB0eXBlcyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQpIHsKICAgIGZpbmFsIEZ1bmN0aW9uVHlwZSB0eXBlID0gdGVhck9mZkNvbnN0YW50LmdldFR5cGUodHlwZUVudmlyb25tZW50KTsKICAgIGZpbmFsIG1hcHBpbmcgPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICBmb3IgKGZpbmFsIHBhcmFtZXRlciBpbiB0eXBlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIG1hcHBpbmdbcGFyYW1ldGVyXSA9IHR5cGVzW21hcHBpbmcubGVuZ3RoXTsKICAgIH0KICAgIHJldHVybiBzdWJzdGl0dXRlKHR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzLCBtYXBwaW5nKTsKICB9Cn0KCmNsYXNzIFRlYXJPZmZDb25zdGFudCBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBSZWZlcmVuY2UgcHJvY2VkdXJlUmVmZXJlbmNlOwoKICBUZWFyT2ZmQ29uc3RhbnQoUHJvY2VkdXJlIHByb2NlZHVyZSkKICAgICAgOiBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmUucmVmZXJlbmNlIHsKICAgIGFzc2VydChwcm9jZWR1cmUuaXNTdGF0aWMpOwogIH0KCiAgVGVhck9mZkNvbnN0YW50LmJ5UmVmZXJlbmNlKHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlKTsKCiAgUHJvY2VkdXJlIGdldCBwcm9jZWR1cmUgPT4gcHJvY2VkdXJlUmVmZXJlbmNlPy5hc1Byb2NlZHVyZTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHByb2NlZHVyZVJlZmVyZW5jZS5hc1Byb2NlZHVyZS5hY2NlcHRSZWZlcmVuY2Uodik7CiAgfQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRUZWFyT2ZmQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdFRlYXJPZmZDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICcke3J1bnRpbWVUeXBlfSgke3Byb2NlZHVyZX0pJzsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gcHJvY2VkdXJlLmhhc2hDb2RlOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFRlYXJPZmZDb25zdGFudCAmJiBvdGhlci5wcm9jZWR1cmUgPT0gcHJvY2VkdXJlOwogIH0KCiAgRnVuY3Rpb25UeXBlIGdldFR5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PgogICAgICBwcm9jZWR1cmUuZnVuY3Rpb24uZnVuY3Rpb25UeXBlOwp9CgpjbGFzcyBUeXBlTGl0ZXJhbENvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIERhcnRUeXBlIHR5cGU7CgogIFR5cGVMaXRlcmFsQ29uc3RhbnQodGhpcy50eXBlKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHR5cGUuYWNjZXB0KHYpOwogIH0KCiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0VHlwZUxpdGVyYWxDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0VHlwZUxpdGVyYWxDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7cnVudGltZVR5cGV9KCR7dHlwZX0pJzsKCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0eXBlLmhhc2hDb2RlOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFR5cGVMaXRlcmFsQ29uc3RhbnQgJiYgb3RoZXIudHlwZSA9PSB0eXBlOwogIH0KCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLnR5cGVUeXBlOwp9CgpjbGFzcyBVbmV2YWx1YXRlZENvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgVW5ldmFsdWF0ZWRDb25zdGFudCh0aGlzLmV4cHJlc3Npb24pIHsKICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IG51bGw7CiAgfQoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgfQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRVbmV2YWx1YXRlZENvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gZXhwcmVzc2lvbi5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBhc0V4cHJlc3Npb24oKSA9PiBleHByZXNzaW9uOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBPTkVOVAovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBBIHdheSB0byBidW5kbGUgdXAgbGlicmFyaWVzIGluIGEgY29tcG9uZW50LgpjbGFzcyBDb21wb25lbnQgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgZmluYWwgQ2Fub25pY2FsTmFtZSByb290OwoKICAvLy8gUHJvYmxlbXMgaW4gdGhpcyBbQ29tcG9uZW50XSBlbmNvZGVkIGFzIGpzb24gb2JqZWN0cy4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgZmllbGQgY2FuIGJlIG51bGwsIGFuZCBieSBjb252ZW50aW9uIHNob3VsZCBiZSBudWxsIGlmIHRoZQogIC8vLyBsaXN0IGlzIGVtcHR5LgogIExpc3Q8U3RyaW5nPiBwcm9ibGVtc0FzSnNvbjsKCiAgZmluYWwgTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXM7CgogIC8vLyBNYXAgZnJvbSBhIHNvdXJjZSBmaWxlIFVSSSB0byBhIGxpbmUtc3RhcnRzIHRhYmxlIGFuZCBzb3VyY2UgY29kZS4KICAvLy8gR2l2ZW4gYSBzb3VyY2UgZmlsZSBVUkkgYW5kIGEgb2Zmc2V0IGluIHRoYXQgZmlsZSBvbmUgY2FuIHRyYW5zbGF0ZQogIC8vLyBpdCB0byBhIGxpbmU6Y29sdW1uIHBvc2l0aW9uIGluIHRoYXQgZmlsZS4KICBmaW5hbCBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlOwoKICAvLy8gTWFwcGluZyBiZXR3ZWVuIHN0cmluZyB0YWdzIGFuZCBbTWV0YWRhdGFSZXBvc2l0b3J5XSBjb3JyZXNwb25kaW5nIHRvCiAgLy8vIHRob3NlIHRhZ3MuCiAgZmluYWwgTWFwPFN0cmluZywgTWV0YWRhdGFSZXBvc2l0b3J5PGR5bmFtaWM+PiBtZXRhZGF0YSA9CiAgICAgIDxTdHJpbmcsIE1ldGFkYXRhUmVwb3NpdG9yeTxkeW5hbWljPj57fTsKCiAgLy8vIFJlZmVyZW5jZSB0byB0aGUgbWFpbiBtZXRob2QgaW4gb25lIG9mIHRoZSBsaWJyYXJpZXMuCiAgUmVmZXJlbmNlIG1haW5NZXRob2ROYW1lOwoKICBDb21wb25lbnQoCiAgICAgIHtDYW5vbmljYWxOYW1lIG5hbWVSb290LAogICAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcywKICAgICAgTWFwPFVyaSwgU291cmNlPiB1cmlUb1NvdXJjZX0pCiAgICAgIDogcm9vdCA9IG5hbWVSb290ID8/IG5ldyBDYW5vbmljYWxOYW1lLnJvb3QoKSwKICAgICAgICBsaWJyYXJpZXMgPSBsaWJyYXJpZXMgPz8gPExpYnJhcnk+W10sCiAgICAgICAgdXJpVG9Tb3VyY2UgPSB1cmlUb1NvdXJjZSA/PyA8VXJpLCBTb3VyY2U+e30gewogICAgYWRvcHRDaGlsZHJlbigpOwogIH0KCiAgdm9pZCBhZG9wdENoaWxkcmVuKCkgewogICAgaWYgKGxpYnJhcmllcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlicmFyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgLy8gVGhlIGxpYnJhcmllcyBhcmUgb3duZWQgYnkgdGhpcyBjb21wb25lbnQsIGFuZCBzbyBhcmUgdGhlaXIgY2Fub25pY2FsCiAgICAgICAgLy8gbmFtZXMgaWYgdGhleSBleGlzdC4KICAgICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBsaWJyYXJpZXNbaV07CiAgICAgICAgbGlicmFyeS5wYXJlbnQgPSB0aGlzOwogICAgICAgIENhbm9uaWNhbE5hbWUgbmFtZSA9IGxpYnJhcnkucmVmZXJlbmNlLmNhbm9uaWNhbE5hbWU7CiAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBuYW1lLnBhcmVudCAhPSByb290KSB7CiAgICAgICAgICByb290LmFkb3B0Q2hpbGQobmFtZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNvbXB1dGVDYW5vbmljYWxOYW1lcygpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlicmFyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgIGNvbXB1dGVDYW5vbmljYWxOYW1lc0ZvckxpYnJhcnkobGlicmFyaWVzW2ldKTsKICAgIH0KICB9CgogIHZvaWQgY29tcHV0ZUNhbm9uaWNhbE5hbWVzRm9yTGlicmFyeShMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHJvb3QuZ2V0Q2hpbGRGcm9tVXJpKGxpYnJhcnkuaW1wb3J0VXJpKS5iaW5kVG8obGlicmFyeS5yZWZlcmVuY2UpOwogICAgbGlicmFyeS5jb21wdXRlQ2Fub25pY2FsTmFtZXMoKTsKICB9CgogIHZvaWQgdW5iaW5kQ2Fub25pY2FsTmFtZXMoKSB7CiAgICByb290LnVuYmluZEFsbCgpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBtYWluTWV0aG9kID0+IG1haW5NZXRob2ROYW1lPy5hc1Byb2NlZHVyZTsKCiAgdm9pZCBzZXQgbWFpbk1ldGhvZChQcm9jZWR1cmUgbWFpbikgewogICAgbWFpbk1ldGhvZE5hbWUgPSBnZXRNZW1iZXJSZWZlcmVuY2UobWFpbik7CiAgfQoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdENvbXBvbmVudCh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChsaWJyYXJpZXMsIHYpOwogICAgbWFpbk1ldGhvZD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChsaWJyYXJpZXMsIHYsIHRoaXMpOwogIH0KCiAgQ29tcG9uZW50IGdldCBlbmNsb3NpbmdDb21wb25lbnQgPT4gdGhpczsKCiAgLy8vIFRyYW5zbGF0ZXMgYW4gb2Zmc2V0IHRvIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGluIHRoZSBnaXZlbiBmaWxlLgogIExvY2F0aW9uIGdldExvY2F0aW9uKFVyaSBmaWxlLCBpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gdXJpVG9Tb3VyY2VbZmlsZV0/LmdldExvY2F0aW9uKGZpbGUsIG9mZnNldCk7CiAgfQoKICB2b2lkIGFkZE1ldGFkYXRhUmVwb3NpdG9yeShNZXRhZGF0YVJlcG9zaXRvcnkgcmVwb3NpdG9yeSkgewogICAgbWV0YWRhdGFbcmVwb3NpdG9yeS50YWddID0gcmVwb3NpdG9yeTsKICB9Cn0KCi8vLyBBIHR1cGxlIHdpdGggZmlsZSwgbGluZSwgYW5kIGNvbHVtbiBudW1iZXIsIGZvciBkaXNwbGF5aW5nIGh1bWFuLXJlYWRhYmxlCi8vLyBsb2NhdGlvbnMuCmNsYXNzIExvY2F0aW9uIHsKICBmaW5hbCBVcmkgZmlsZTsKICBmaW5hbCBpbnQgbGluZTsgLy8gMS1iYXNlZC4KICBmaW5hbCBpbnQgY29sdW1uOyAvLyAxLWJhc2VkLgoKICBMb2NhdGlvbih0aGlzLmZpbGUsIHRoaXMubGluZSwgdGhpcy5jb2x1bW4pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGZpbGU6JGxpbmU6JGNvbHVtbic7Cn0KCmFic3RyYWN0IGNsYXNzIE1ldGFkYXRhUmVwb3NpdG9yeTxUPiB7CiAgLy8vIFVuaXF1ZSBzdHJpbmcgdGFnIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcG9zaXRvcnkuCiAgU3RyaW5nIGdldCB0YWc7CgogIC8vLyBNdXRhYmxlIG1hcHBpbmcgYmV0d2VlbiBub2RlcyBhbmQgdGhlaXIgbWV0YWRhdGEuCiAgTWFwPFRyZWVOb2RlLCBUPiBnZXQgbWFwcGluZzsKCiAgLy8vIFdyaXRlIFttZXRhZGF0YV0gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFtOb2RlXSBpbnRvCiAgLy8vIHRoZSBnaXZlbiBbQmluYXJ5U2lua10uCiAgLy8vCiAgLy8vIE1ldGFkYXRhIGlzIHNlcmlhbGl6ZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHNlcmlhbGl6aW5nIFtub2RlXSwKICAvLy8gc28gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgY2FuIHVzZSBzZXJpYWxpemF0aW9uIGNvbnRleHQgb2YKICAvLy8gW25vZGVdJ3MgcGFyZW50cyAoc3VjaCBhcyBkZWNsYXJlZCB0eXBlIHBhcmFtZXRlcnMgYW5kIHZhcmlhYmxlcykuCiAgLy8vIEluIG9yZGVyIHRvIHVzZSBzY29wZSBkZWNsYXJlZCBieSB0aGUgW25vZGVdIGl0c2VsZiwgaW1wbGVtZW50YXRpb24gb2YKICAvLy8gdGhpcyBtZXRob2QgY2FuIHVzZSBbQmluYXJ5U2luay5lbnRlclNjb3BlXSBhbmQgW0JpbmFyeVNpbmsubGVhdmVTY29wZV0KICAvLy8gbWV0aG9kcy4KICAvLy8KICAvLy8gW21ldGFkYXRhXSBtdXN0IGJlIGFuIG9iamVjdCBvd25lZCBieSB0aGlzIHJlcG9zaXRvcnkuCiAgdm9pZCB3cml0ZVRvQmluYXJ5KFQgbWV0YWRhdGEsIE5vZGUgbm9kZSwgQmluYXJ5U2luayBzaW5rKTsKCiAgLy8vIENvbnN0cnVjdCBhIG1ldGFkYXRhIG9iamVjdCBmcm9tIGl0cyBiaW5hcnkgcGF5bG9hZCByZWFkIGZyb20gdGhlCiAgLy8vIGdpdmVuIFtCaW5hcnlTb3VyY2VdLgogIC8vLwogIC8vLyBNZXRhZGF0YSBpcyBkZXNlcmlhbGl6ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVzZXJpYWxpemluZyBbbm9kZV0sCiAgLy8vIHNvIGl0IGNhbiB1c2UgZGVzZXJpYWxpemF0aW9uIGNvbnRleHQgb2YgW25vZGVdJ3MgcGFyZW50cy4KICAvLy8gSW4gb3JkZXIgdG8gdXNlIHNjb3BlIGRlY2xhcmVkIGJ5IHRoZSBbbm9kZV0gaXRzZWxmLCBpbXBsZW1lbnRhdGlvbiBvZgogIC8vLyB0aGlzIG1ldGhvZCBjYW4gdXNlIFtCaW5hcnlTb3VyY2UuZW50ZXJTY29wZV0gYW5kCiAgLy8vIFtCaW5hcnlTb3VyY2UubGVhdmVTY29wZV0gbWV0aG9kcy4KICBUIHJlYWRGcm9tQmluYXJ5KE5vZGUgbm9kZSwgQmluYXJ5U291cmNlIHNvdXJjZSk7CgogIC8vLyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBhIG5vZGUgY2FuIGhhdmUgbWV0YWRhdGEgYXR0YWNoZWQgdG8gaXQKICAvLy8gb3IgcmVmZXJlbmNlZCBmcm9tIHRoZSBtZXRhZGF0YSBwYXlsb2FkLgogIC8vLwogIC8vLyBDdXJyZW50bHkgZHVlIHRvIGJpbmFyeSBmb3JtYXQgc3BlY2lmaWNzIENhdGNoIGFuZCBNYXBFbnRyeSBub2RlcwogIC8vLyBjYW4ndCBoYXZlIG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoZW0uCiAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWQoVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuICEobm9kZSBpcyBNYXBFbnRyeSB8fCBub2RlIGlzIENhdGNoKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEJpbmFyeVNpbmsgewogIGludCBnZXRCdWZmZXJPZmZzZXQoKTsKCiAgdm9pZCB3cml0ZUJ5dGUoaW50IGJ5dGUpOwogIHZvaWQgd3JpdGVCeXRlcyhMaXN0PGludD4gYnl0ZXMpOwogIHZvaWQgd3JpdGVVSW50MzIoaW50IHZhbHVlKTsKICB2b2lkIHdyaXRlVUludDMwKGludCB2YWx1ZSk7CgogIC8vLyBXcml0ZSBMaXN0PEJ5dGU+IGludG8gdGhlIHNpbmsuCiAgdm9pZCB3cml0ZUJ5dGVMaXN0KExpc3Q8aW50PiBieXRlcyk7CgogIHZvaWQgd3JpdGVOdWxsQWxsb3dlZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoQ2Fub25pY2FsTmFtZSBuYW1lKTsKICB2b2lkIHdyaXRlU3RyaW5nUmVmZXJlbmNlKFN0cmluZyBzdHIpOwogIHZvaWQgd3JpdGVOYW1lKE5hbWUgbm9kZSk7CiAgdm9pZCB3cml0ZURhcnRUeXBlKERhcnRUeXBlIHR5cGUpOwogIHZvaWQgd3JpdGVOb2RlKE5vZGUgbm9kZSk7CgogIHZvaWQgZW50ZXJTY29wZSgKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIGJvb2wgbWVtYmVyU2NvcGU6IGZhbHNlLAogICAgICBib29sIHZhcmlhYmxlU2NvcGU6IGZhbHNlfSk7CiAgdm9pZCBsZWF2ZVNjb3BlKAogICAgICB7TGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgYm9vbCBtZW1iZXJTY29wZTogZmFsc2UsCiAgICAgIGJvb2wgdmFyaWFibGVTY29wZTogZmFsc2V9KTsKfQoKYWJzdHJhY3QgY2xhc3MgQmluYXJ5U291cmNlIHsKICBpbnQgZ2V0IGN1cnJlbnRPZmZzZXQ7CiAgTGlzdDxpbnQ+IGdldCBieXRlczsKCiAgaW50IHJlYWRCeXRlKCk7CiAgTGlzdDxpbnQ+IHJlYWRCeXRlcyhpbnQgbGVuZ3RoKTsKICBpbnQgcmVhZFVJbnQoKTsKICBpbnQgcmVhZFVpbnQzMigpOwoKICAvLy8gUmVhZCBMaXN0PEJ5dGU+IGZyb20gdGhlIHNvdXJjZS4KICBMaXN0PGludD4gcmVhZEJ5dGVMaXN0KCk7CgogIENhbm9uaWNhbE5hbWUgcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICBTdHJpbmcgcmVhZFN0cmluZ1JlZmVyZW5jZSgpOwogIE5hbWUgcmVhZE5hbWUoKTsKICBEYXJ0VHlwZSByZWFkRGFydFR5cGUoKTsKICBGdW5jdGlvbk5vZGUgcmVhZEZ1bmN0aW9uTm9kZSgpOwoKICB2b2lkIGVudGVyU2NvcGUoe0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnN9KTsKICB2b2lkIGxlYXZlU2NvcGUoe0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnN9KTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFUk5BTCBGVU5DVElPTlMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp2b2lkIHNldFBhcmVudHMoTGlzdDxUcmVlTm9kZT4gbm9kZXMsIFRyZWVOb2RlIHBhcmVudCkgewogIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKICAgIG5vZGVzW2ldLnBhcmVudCA9IHBhcmVudDsKICB9Cn0KCnZvaWQgdmlzaXRMaXN0KExpc3Q8Tm9kZT4gbm9kZXMsIFZpc2l0b3IgdmlzaXRvcikgewogIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKICAgIG5vZGVzW2ldLmFjY2VwdCh2aXNpdG9yKTsKICB9Cn0KCnZvaWQgdmlzaXRJdGVyYWJsZShJdGVyYWJsZTxOb2RlPiBub2RlcywgVmlzaXRvciB2aXNpdG9yKSB7CiAgZm9yICh2YXIgbm9kZSBpbiBub2RlcykgewogICAgbm9kZS5hY2NlcHQodmlzaXRvcik7CiAgfQp9Cgp2b2lkIHRyYW5zZm9ybVR5cGVMaXN0KExpc3Q8RGFydFR5cGU+IG5vZGVzLCBUcmFuc2Zvcm1lciB2aXNpdG9yKSB7CiAgaW50IHN0b3JlSW5kZXggPSAwOwogIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKICAgIHZhciByZXN1bHQgPSB2aXNpdG9yLnZpc2l0RGFydFR5cGUobm9kZXNbaV0pOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIG5vZGVzW3N0b3JlSW5kZXhdID0gcmVzdWx0OwogICAgICArK3N0b3JlSW5kZXg7CiAgICB9CiAgfQogIGlmIChzdG9yZUluZGV4IDwgbm9kZXMubGVuZ3RoKSB7CiAgICBub2Rlcy5sZW5ndGggPSBzdG9yZUluZGV4OwogIH0KfQoKdm9pZCB0cmFuc2Zvcm1TdXBlcnR5cGVMaXN0KExpc3Q8U3VwZXJ0eXBlPiBub2RlcywgVHJhbnNmb3JtZXIgdmlzaXRvcikgewogIGludCBzdG9yZUluZGV4ID0gMDsKICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7CiAgICB2YXIgcmVzdWx0ID0gdmlzaXRvci52aXNpdFN1cGVydHlwZShub2Rlc1tpXSk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgbm9kZXNbc3RvcmVJbmRleF0gPSByZXN1bHQ7CiAgICAgICsrc3RvcmVJbmRleDsKICAgIH0KICB9CiAgaWYgKHN0b3JlSW5kZXggPCBub2Rlcy5sZW5ndGgpIHsKICAgIG5vZGVzLmxlbmd0aCA9IHN0b3JlSW5kZXg7CiAgfQp9Cgp2b2lkIHRyYW5zZm9ybUxpc3QoTGlzdDxUcmVlTm9kZT4gbm9kZXMsIFRyYW5zZm9ybWVyIHZpc2l0b3IsIFRyZWVOb2RlIHBhcmVudCkgewogIGludCBzdG9yZUluZGV4ID0gMDsKICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7CiAgICB2YXIgcmVzdWx0ID0gbm9kZXNbaV0uYWNjZXB0KHZpc2l0b3IpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIG5vZGVzW3N0b3JlSW5kZXhdID0gcmVzdWx0OwogICAgICByZXN1bHQucGFyZW50ID0gcGFyZW50OwogICAgICArK3N0b3JlSW5kZXg7CiAgICB9CiAgfQogIGlmIChzdG9yZUluZGV4IDwgbm9kZXMubGVuZ3RoKSB7CiAgICBub2Rlcy5sZW5ndGggPSBzdG9yZUluZGV4OwogIH0KfQoKTGlzdDxEYXJ0VHlwZT4gX2dldEFzVHlwZUFyZ3VtZW50cyhMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKSB7CiAgaWYgKHR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBjb25zdCA8RGFydFR5cGU+W107CiAgcmV0dXJuIG5ldyBMaXN0PERhcnRUeXBlPi5nZW5lcmF0ZSgKICAgICAgdHlwZVBhcmFtZXRlcnMubGVuZ3RoLCAoaSkgPT4gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXJzW2ldKSwKICAgICAgZ3Jvd2FibGU6IGZhbHNlKTsKfQoKY2xhc3MgX0NoaWxkUmVwbGFjZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7CiAgZmluYWwgVHJlZU5vZGUgY2hpbGQ7CiAgZmluYWwgVHJlZU5vZGUgcmVwbGFjZW1lbnQ7CgogIF9DaGlsZFJlcGxhY2VyKHRoaXMuY2hpbGQsIHRoaXMucmVwbGFjZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBkZWZhdWx0VHJlZU5vZGUoVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gY2hpbGQpIHsKICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgfQp9CgpjbGFzcyBTb3VyY2UgewogIGZpbmFsIExpc3Q8aW50PiBsaW5lU3RhcnRzOwoKICBmaW5hbCBMaXN0PGludD4gc291cmNlOwoKICBmaW5hbCBVcmkgaW1wb3J0VXJpOwoKICBmaW5hbCBVcmkgZmlsZVVyaTsKCiAgU3RyaW5nIGNhY2hlZFRleHQ7CgogIFNvdXJjZSh0aGlzLmxpbmVTdGFydHMsIHRoaXMuc291cmNlLCB0aGlzLmltcG9ydFVyaSwgdGhpcy5maWxlVXJpKTsKCiAgLy8vIFJldHVybiB0aGUgdGV4dCBjb3JyZXNwb25kaW5nIHRvIFtsaW5lXSB3aGljaCBpcyBhIDEtYmFzZWQgbGluZQogIC8vLyBudW1iZXIuIFRoZSByZXR1cm5lZCBsaW5lIGNvbnRhaW5zIG5vIGxpbmUgc2VwYXJhdG9ycy4KICBTdHJpbmcgZ2V0VGV4dExpbmUoaW50IGxpbmUpIHsKICAgIGlmIChzb3VyY2UgPT0gbnVsbCB8fAogICAgICAgIHNvdXJjZS5pc0VtcHR5IHx8CiAgICAgICAgbGluZVN0YXJ0cyA9PSBudWxsIHx8CiAgICAgICAgbGluZVN0YXJ0cy5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwobGluZSwgMSwgbGluZVN0YXJ0cy5sZW5ndGgsICdsaW5lJyk7CgogICAgY2FjaGVkVGV4dCA/Pz0gdXRmOC5kZWNvZGUoc291cmNlLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSk7CiAgICAvLyAtMSBhcyBsaW5lIG51bWJlcnMgc3RhcnQgYXQgMS4KICAgIGludCBpbmRleCA9IGxpbmUgLSAxOwogICAgaWYgKGluZGV4ICsgMSA9PSBsaW5lU3RhcnRzLmxlbmd0aCkgewogICAgICAvLyBMYXN0IGxpbmUuCiAgICAgIHJldHVybiBjYWNoZWRUZXh0LnN1YnN0cmluZyhsaW5lU3RhcnRzW2luZGV4XSk7CiAgICB9IGVsc2UgaWYgKGluZGV4IDwgbGluZVN0YXJ0cy5sZW5ndGgpIHsKICAgICAgLy8gV2Ugc3VidHJhY3QgMSBmcm9tIHRoZSBuZXh0IGxpbmUgZm9yIHR3byByZWFzb25zOgogICAgICAvLyAxLiBJZiB0aGUgZmlsZSBpc24ndCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSwgdGhhdCBpbmRleCBpcyBpbnZhbGlkLgogICAgICAvLyAyLiBUbyByZW1vdmUgdGhlIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KICAgICAgaW50IGVuZE9mTGluZSA9IGxpbmVTdGFydHNbaW5kZXggKyAxXSAtIDE7CiAgICAgIGlmIChlbmRPZkxpbmUgPiBpbmRleCAmJiBjYWNoZWRUZXh0W2VuZE9mTGluZSAtIDFdID09ICJcciIpIHsKICAgICAgICAtLWVuZE9mTGluZTsgLy8gV2luZG93cyBsaW5lIGVuZGluZ3MuCiAgICAgIH0KICAgICAgcmV0dXJuIGNhY2hlZFRleHQuc3Vic3RyaW5nKGxpbmVTdGFydHNbaW5kZXhdLCBlbmRPZkxpbmUpOwogICAgfQogICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodCBieSB0aGUgcmFuZ2UgY2hlY2sgYWJvdmUuCiAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3IiOwogIH0KCiAgLy8vIFRyYW5zbGF0ZXMgYW4gb2Zmc2V0IHRvIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGluIHRoZSBnaXZlbiBmaWxlLgogIExvY2F0aW9uIGdldExvY2F0aW9uKFVyaSBmaWxlLCBpbnQgb2Zmc2V0KSB7CiAgICBpZiAobGluZVN0YXJ0cyA9PSBudWxsIHx8IGxpbmVTdGFydHMuaXNFbXB0eSkgewogICAgICByZXR1cm4gbmV3IExvY2F0aW9uKGZpbGUsIFRyZWVOb2RlLm5vT2Zmc2V0LCBUcmVlTm9kZS5ub09mZnNldCk7CiAgICB9CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsdWVJbkludGVydmFsKG9mZnNldCwgMCwgbGluZVN0YXJ0cy5sYXN0LCAnb2Zmc2V0Jyk7CiAgICBpbnQgbG93ID0gMCwgaGlnaCA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMTsKICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICAgIGludCBtaWQgPSBoaWdoIC0gKChoaWdoIC0gbG93KSA+PiAxKTsgLy8gR2V0IG1pZGRsZSwgcm91bmRpbmcgdXAuCiAgICAgIGludCBwaXZvdCA9IGxpbmVTdGFydHNbbWlkXTsKICAgICAgaWYgKHBpdm90IDw9IG9mZnNldCkgewogICAgICAgIGxvdyA9IG1pZDsKICAgICAgfSBlbHNlIHsKICAgICAgICBoaWdoID0gbWlkIC0gMTsKICAgICAgfQogICAgfQogICAgaW50IGxpbmVJbmRleCA9IGxvdzsKICAgIGludCBsaW5lU3RhcnQgPSBsaW5lU3RhcnRzW2xpbmVJbmRleF07CiAgICBpbnQgbGluZU51bWJlciA9IDEgKyBsaW5lSW5kZXg7CiAgICBpbnQgY29sdW1uTnVtYmVyID0gMSArIG9mZnNldCAtIGxpbmVTdGFydDsKICAgIHJldHVybiBuZXcgTG9jYXRpb24oZmlsZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKICB9Cn0KCi8vLyBSZXR1cm5zIHRoZSBbUmVmZXJlbmNlXSBvYmplY3QgZm9yIHRoZSBnaXZlbiBtZW1iZXIuCi8vLwovLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlIG1lbWJlciBpcyBgbnVsbGAuClJlZmVyZW5jZSBnZXRNZW1iZXJSZWZlcmVuY2UoTWVtYmVyIG1lbWJlcikgewogIHJldHVybiBtZW1iZXI/LnJlZmVyZW5jZTsKfQoKLy8vIFJldHVybnMgdGhlIFtSZWZlcmVuY2VdIG9iamVjdCBmb3IgdGhlIGdpdmVuIGNsYXNzLgovLy8KLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZSBjbGFzcyBpcyBgbnVsbGAuClJlZmVyZW5jZSBnZXRDbGFzc1JlZmVyZW5jZShDbGFzcyBjbGFzc18pIHsKICByZXR1cm4gY2xhc3NfPy5yZWZlcmVuY2U7Cn0KCi8vLyBSZXR1cm5zIHRoZSBjYW5vbmljYWwgbmFtZSBvZiBbbWVtYmVyXSwgb3IgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUKLy8vIG1lbWJlciBoYXMgbm90IGJlZW4gYXNzaWduZWQgYSBjYW5vbmljYWwgbmFtZSB5ZXQuCi8vLwovLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlIG1lbWJlciBpcyBgbnVsbGAuCkNhbm9uaWNhbE5hbWUgZ2V0Q2Fub25pY2FsTmFtZU9mTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICBpZiAobWVtYmVyID09IG51bGwpIHJldHVybiBudWxsOwogIGlmIChtZW1iZXIuY2Fub25pY2FsTmFtZSA9PSBudWxsKSB7CiAgICB0aHJvdyAnJG1lbWJlciBoYXMgbm8gY2Fub25pY2FsIG5hbWUnOwogIH0KICByZXR1cm4gbWVtYmVyLmNhbm9uaWNhbE5hbWU7Cn0KCi8vLyBSZXR1cm5zIHRoZSBjYW5vbmljYWwgbmFtZSBvZiBbY2xhc3NfXSwgb3IgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUKLy8vIGNsYXNzIGhhcyBub3QgYmVlbiBhc3NpZ25lZCBhIGNhbm9uaWNhbCBuYW1lIHlldC4KLy8vCi8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGUgY2xhc3MgaXMgYG51bGxgLgpDYW5vbmljYWxOYW1lIGdldENhbm9uaWNhbE5hbWVPZkNsYXNzKENsYXNzIGNsYXNzXykgewogIGlmIChjbGFzc18gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgaWYgKGNsYXNzXy5jYW5vbmljYWxOYW1lID09IG51bGwpIHsKICAgIHRocm93ICckY2xhc3NfIGhhcyBubyBjYW5vbmljYWwgbmFtZSc7CiAgfQogIHJldHVybiBjbGFzc18uY2Fub25pY2FsTmFtZTsKfQoKLy8vIFJldHVybnMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIFtsaWJyYXJ5XSwgb3IgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUKLy8vIGxpYnJhcnkgaGFzIG5vdCBiZWVuIGFzc2lnbmVkIGEgY2Fub25pY2FsIG5hbWUgeWV0LgovLy8KLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZSBsaWJyYXJ5IGlzIGBudWxsYC4KQ2Fub25pY2FsTmFtZSBnZXRDYW5vbmljYWxOYW1lT2ZMaWJyYXJ5KExpYnJhcnkgbGlicmFyeSkgewogIGlmIChsaWJyYXJ5ID09IG51bGwpIHJldHVybiBudWxsOwogIGlmIChsaWJyYXJ5LmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgdGhyb3cgJyRsaWJyYXJ5IGhhcyBubyBjYW5vbmljYWwgbmFtZSc7CiAgfQogIHJldHVybiBsaWJyYXJ5LmNhbm9uaWNhbE5hbWU7Cn0KCi8vLyBNdXJtdXItaW5zcGlyZWQgaGFzaGluZywgd2l0aCBhIGZhbGwtYmFjayB0byBKZW5raW5zLWluc3BpcmVkIGhhc2hpbmcgd2hlbgovLy8gY29tcGlsZWQgdG8gSmF2YVNjcmlwdC4KLy8vCi8vLyBBIGhhc2ggZnVuY3Rpb24gc2hvdWxkIGJlIGNvbnN0cnVjdGVkIG9mIHNldmVyYWwgW2NvbWJpbmVdIGNhbGxzIGZvbGxvd2VkIGJ5Ci8vLyBhIFtmaW5pc2hdIGNhbGwuCmNsYXNzIF9IYXNoIHsKICBzdGF0aWMgY29uc3QgaW50IE0gPSAweDlkZGZlYTA4ZWIzODIwMDAgKyAweGQ2OTsKICBzdGF0aWMgY29uc3QgYm9vbCBpbnRJczY0Qml0ID0gKDEgPDwgNjMpICE9IDA7CgogIC8vLyBQcmltaXRpdmUgaGFzaCBjb21iaW5pbmcgc3RlcC4KICBzdGF0aWMgaW50IGNvbWJpbmUoaW50IHZhbHVlLCBpbnQgaGFzaCkgewogICAgaWYgKGludElzNjRCaXQpIHsKICAgICAgdmFsdWUgKj0gTTsKICAgICAgdmFsdWUgXj0gX3NocnUodmFsdWUsIDQ3KTsKICAgICAgdmFsdWUgKj0gTTsKICAgICAgaGFzaCBePSB2YWx1ZTsKICAgICAgaGFzaCAqPSBNOwogICAgfSBlbHNlIHsKICAgICAgLy8gRmFsbCBiYWNrIHRvIEplbmtpbnMtaW5zcGlyZWQgaGFzaGluZyBvbiBKYXZhU2NyaXB0IHBsYXRmb3Jtcy4KICAgICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArIHZhbHVlKTsKICAgICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwMDA3ZmZmZiAmIGhhc2gpIDw8IDEwKSk7CiAgICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4gNik7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9CgogIC8vLyBQcmltaXRpdmUgaGFzaCBmaW5hbGl6YXRpb24gc3RlcC4KICBzdGF0aWMgaW50IGZpbmlzaChpbnQgaGFzaCkgewogICAgaWYgKGludElzNjRCaXQpIHsKICAgICAgaGFzaCBePSBfc2hydShoYXNoLCA0NCk7CiAgICAgIGhhc2ggKj0gTTsKICAgICAgaGFzaCBePSBfc2hydShoYXNoLCA0MSk7CiAgICB9IGVsc2UgewogICAgICAvLyBGYWxsIGJhY2sgdG8gSmVua2lucy1pbnNwaXJlZCBoYXNoaW5nIG9uIEphdmFTY3JpcHQgcGxhdGZvcm1zLgogICAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAzZmZmZmZmICYgaGFzaCkgPDwgMykpOwogICAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+IDExKTsKICAgICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwMDAwM2ZmZiAmIGhhc2gpIDw8IDE1KSk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9CgogIHN0YXRpYyBpbnQgY29tYmluZUZpbmlzaChpbnQgdmFsdWUsIGludCBoYXNoKSB7CiAgICByZXR1cm4gZmluaXNoKGNvbWJpbmUodmFsdWUsIGhhc2gpKTsKICB9CgogIHN0YXRpYyBpbnQgY29tYmluZTIoaW50IHZhbHVlMSwgaW50IHZhbHVlMiwgaW50IGhhc2gpIHsKICAgIHJldHVybiBjb21iaW5lKHZhbHVlMiwgY29tYmluZSh2YWx1ZTEsIGhhc2gpKTsKICB9CgogIHN0YXRpYyBpbnQgY29tYmluZTJGaW5pc2goaW50IHZhbHVlMSwgaW50IHZhbHVlMiwgaW50IGhhc2gpIHsKICAgIHJldHVybiBmaW5pc2goY29tYmluZTIodmFsdWUxLCB2YWx1ZTIsIGhhc2gpKTsKICB9CgogIHN0YXRpYyBpbnQgaGFzaDIoT2JqZWN0IG9iamVjdDEsIE9iamVjdCBvYmplY3QyKSB7CiAgICByZXR1cm4gY29tYmluZTJGaW5pc2gob2JqZWN0Mi5oYXNoQ29kZSwgb2JqZWN0Mi5oYXNoQ29kZSwgMCk7CiAgfQoKICBzdGF0aWMgaW50IGNvbWJpbmVMaXN0SGFzaChMaXN0IGxpc3QsIFtpbnQgaGFzaCA9IDFdKSB7CiAgICBmb3IgKHZhciBpdGVtIGluIGxpc3QpIHsKICAgICAgaGFzaCA9IF9IYXNoLmNvbWJpbmUoaXRlbS5oYXNoQ29kZSwgaGFzaCk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9CgogIHN0YXRpYyBpbnQgY29tYmluZUxpc3QoTGlzdDxpbnQ+IGhhc2hlcywgaW50IGhhc2gpIHsKICAgIGZvciAodmFyIGl0ZW0gaW4gaGFzaGVzKSB7CiAgICAgIGhhc2ggPSBjb21iaW5lKGl0ZW0sIGhhc2gpOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBzdGF0aWMgaW50IGNvbWJpbmVNYXBIYXNoVW5vcmRlcmVkKE1hcCBtYXAsIFtpbnQgaGFzaCA9IDJdKSB7CiAgICBpZiAobWFwID09IG51bGwgfHwgbWFwLmlzRW1wdHkpIHJldHVybiBoYXNoOwogICAgTGlzdDxpbnQ+IGVudHJ5SGFzaGVzID0gTGlzdChtYXAubGVuZ3RoKTsKICAgIGludCBpID0gMDsKICAgIGZvciAodmFyIGVudHJ5IGluIG1hcC5lbnRyaWVzKSB7CiAgICAgIGVudHJ5SGFzaGVzW2krK10gPSBjb21iaW5lKGVudHJ5LmtleS5oYXNoQ29kZSwgZW50cnkudmFsdWUuaGFzaENvZGUpOwogICAgfQogICAgZW50cnlIYXNoZXMuc29ydCgpOwogICAgcmV0dXJuIGNvbWJpbmVMaXN0KGVudHJ5SGFzaGVzLCBoYXNoKTsKICB9CgogIC8vIFRPRE8oc3JhKTogUmVwbGFjZSB3aXRoICc+Pj4nLgogIHN0YXRpYyBpbnQgX3NocnUoaW50IHYsIGludCBuKSB7CiAgICBhc3NlcnQobiA+PSAxKTsKICAgIGFzc2VydChpbnRJczY0Qml0KTsKICAgIHJldHVybiAoKHYgPj4gMSkgJiAoMHg3ZmZmRkZGRmZmZmZGMDAwICsgMHhGRkYpKSA+PiAobiAtIDEpOwogIH0KfQoKaW50IGxpc3RIYXNoQ29kZShMaXN0IGxpc3QpIHsKICByZXR1cm4gX0hhc2guZmluaXNoKF9IYXNoLmNvbWJpbmVMaXN0SGFzaChsaXN0KSk7Cn0KCmludCBtYXBIYXNoQ29kZShNYXAgbWFwKSB7CiAgcmV0dXJuIG1hcEhhc2hDb2RlVW5vcmRlcmVkKG1hcCk7Cn0KCmludCBtYXBIYXNoQ29kZU9yZGVyZWQoTWFwIG1hcCwgW2ludCBoYXNoID0gMl0pIHsKICBmb3IgKGZpbmFsIE9iamVjdCB4IGluIG1hcC5rZXlzKSBoYXNoID0gX0hhc2guY29tYmluZSh4Lmhhc2hDb2RlLCBoYXNoKTsKICBmb3IgKGZpbmFsIE9iamVjdCB4IGluIG1hcC52YWx1ZXMpIGhhc2ggPSBfSGFzaC5jb21iaW5lKHguaGFzaENvZGUsIGhhc2gpOwogIHJldHVybiBfSGFzaC5maW5pc2goaGFzaCk7Cn0KCmludCBtYXBIYXNoQ29kZVVub3JkZXJlZChNYXAgbWFwKSB7CiAgcmV0dXJuIF9IYXNoLmZpbmlzaChfSGFzaC5jb21iaW5lTWFwSGFzaFVub3JkZXJlZChtYXApKTsKfQoKYm9vbCBsaXN0RXF1YWxzKExpc3QgYSwgTGlzdCBiKSB7CiAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CiAgICBpZiAoYVtpXSAhPSBiW2ldKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9Cgpib29sIG1hcEVxdWFscyhNYXAgYSwgTWFwIGIpIHsKICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICBmb3IgKGZpbmFsIE9iamVjdCBrZXkgaW4gYS5rZXlzKSB7CiAgICBpZiAoIWIuY29udGFpbnNLZXkoa2V5KSB8fCBhW2tleV0gIT0gYltrZXldKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CgovLy8gUmV0dXJucyB0aGUgY2Fub25pY2FsIG5hbWUgb2YgW3R5cGVkZWZfXSwgb3IgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUKLy8vIHR5cGVkZWYgaGFzIG5vdCBiZWVuIGFzc2lnbmVkIGEgY2Fub25pY2FsIG5hbWUgeWV0LgovLy8KLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZSB0eXBlZGVmIGlzIGBudWxsYC4KQ2Fub25pY2FsTmFtZSBnZXRDYW5vbmljYWxOYW1lT2ZUeXBlZGVmKFR5cGVkZWYgdHlwZWRlZl8pIHsKICBpZiAodHlwZWRlZl8gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgaWYgKHR5cGVkZWZfLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgdGhyb3cgJyR0eXBlZGVmXyBoYXMgbm8gY2Fub25pY2FsIG5hbWUnOwogIH0KICByZXR1cm4gdHlwZWRlZl8uY2Fub25pY2FsTmFtZTsKfQoKLy8vIEFubm90YXRpb24gZGVzY3JpYmluZyBpbmZvcm1hdGlvbiB3aGljaCBpcyBub3QgcGFydCBvZiBEYXJ0IHNlbWFudGljczsgaW4KLy8vIG90aGVyIHdvcmRzLCBpZiB0aGlzIGluZm9ybWF0aW9uIChvciBhbnkgaW5mb3JtYXRpb24gaXQgcmVmZXJzIHRvKSBjaGFuZ2VzLAovLy8gc3RhdGljIGFuYWx5c2lzIGFuZCBydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBsaWJyYXJ5IGFyZSB1bmFmZmVjdGVkLgpjb25zdCBpbmZvcm1hdGl2ZSA9IG51bGw7CgpMb2NhdGlvbiBfZ2V0TG9jYXRpb25JbkNvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50LCBVcmkgZmlsZVVyaSwgaW50IG9mZnNldCkgewogIGlmIChjb21wb25lbnQgIT0gbnVsbCkgewogICAgcmV0dXJuIGNvbXBvbmVudC5nZXRMb2NhdGlvbihmaWxlVXJpLCBvZmZzZXQpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbmV3IExvY2F0aW9uKGZpbGVVcmksIFRyZWVOb2RlLm5vT2Zmc2V0LCBUcmVlTm9kZS5ub09mZnNldCk7CiAgfQp9CgovLy8gQ29udmVydCB0aGUgc3ludGhldGljIG5hbWUgb2YgYW4gaW1wbGljaXQgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MKLy8vIGludG8gYSBuYW1lIHN1aXRhYmxlIGZvciB1c2VyLWZhY2VkIHN0cmluZ3MuCi8vLwovLy8gRm9yIGV4YW1wbGUsIHdoZW4gY29tcGlsaW5nICJjbGFzcyBBIGV4dGVuZHMgUyB3aXRoIE0xLCBNMiIsIHRoZQovLy8gdHdvIHN5bnRoZXRpYyBjbGFzc2VzIHdpbGwgYmUgbmFtZWQgIl9BJlMmTTEiIGFuZCAiX0EmUyZNMSZNMiIuCi8vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuICJTIHdpdGggTTEiIGFuZCAiUyB3aXRoIE0xLCBNMiIsIHJlc3BlY3RpdmVseS4KU3RyaW5nIGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUoU3RyaW5nIG5hbWUpIHsKICBMaXN0PFN0cmluZz4gbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnJicpOwogIGlmIChuYW1lUGFydHMubGVuZ3RoIDwgMiB8fCBuYW1lID09ICImIikgcmV0dXJuIG5hbWU7CiAgU3RyaW5nIGRlbWFuZ2xlZE5hbWUgPSBuYW1lUGFydHNbMV07CiAgZm9yIChpbnQgaSA9IDI7IGkgPCBuYW1lUGFydHMubGVuZ3RoOyBpKyspIHsKICAgIGRlbWFuZ2xlZE5hbWUgKz0gKGkgPT0gMiA/ICIgd2l0aCAiIDogIiwgIikgKyBuYW1lUGFydHNbaV07CiAgfQogIHJldHVybiBkZW1hbmdsZWROYW1lOwp9CgovLy8gRXh0cmFjdCBmcm9tIHRoZSBzeW50aGV0aWMgbmFtZSBvZiBhbiBpbXBsaWNpdCBtaXhpbiBhcHBsaWNhdGlvbiBjbGFzcwovLy8gdGhlIG5hbWUgb2YgdGhlIGZpbmFsIHN1YmNsYXNzIG9mIHRoZSBtaXhpbiBhcHBsaWNhdGlvbi4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgd2hlbiBjb21waWxpbmcgImNsYXNzIEEgZXh0ZW5kcyBTIHdpdGggTTEsIE0yIiwgdGhlCi8vLyB0d28gc3ludGhldGljIGNsYXNzZXMgd2lsbCBiZSBuYW1lZCAiX0EmUyZNMSIgYW5kICJfQSZTJk0xJk0yIi4KLy8vIFRo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dmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLnRhcmdldC50YXJnZXRzOwoKaW1wb3J0ICcuLi9hc3QuZGFydCc7CmltcG9ydCAnLi4vY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJy4uL2NvcmVfdHlwZXMuZGFydCc7CgpmaW5hbCBMaXN0PFN0cmluZz4gdGFyZ2V0TmFtZXMgPSB0YXJnZXRzLmtleXMudG9MaXN0KCk7CgpjbGFzcyBUYXJnZXRGbGFncyB7CiAgZmluYWwgYm9vbCBsZWdhY3lNb2RlOwogIGZpbmFsIGJvb2wgdHJhY2tXaWRnZXRDcmVhdGlvbjsKCiAgVGFyZ2V0RmxhZ3Moe3RoaXMubGVnYWN5TW9kZSA9IGZhbHNlLCB0aGlzLnRyYWNrV2lkZ2V0Q3JlYXRpb24gPSBmYWxzZX0pOwp9Cgp0eXBlZGVmIFRhcmdldCBfVGFyZ2V0QnVpbGRlcihUYXJnZXRGbGFncyBmbGFncyk7CgpmaW5hbCBNYXA8U3RyaW5nLCBfVGFyZ2V0QnVpbGRlcj4gdGFyZ2V0cyA9IDxTdHJpbmcsIF9UYXJnZXRCdWlsZGVyPnsKICAnbm9uZSc6IChUYXJnZXRGbGFncyBmbGFncykgPT4gbmV3IE5vbmVUYXJnZXQoZmxhZ3MpLAp9OwoKVGFyZ2V0IGdldFRhcmdldChTdHJpbmcgbmFtZSwgVGFyZ2V0RmxhZ3MgZmxhZ3MpIHsKICB2YXIgYnVpbGRlciA9IHRhcmdldHNbbmFtZV07CiAgaWYgKGJ1aWxkZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIGJ1aWxkZXIoZmxhZ3MpOwp9CgphYnN0cmFjdCBjbGFzcyBEaWFnbm9zdGljUmVwb3J0ZXI8TSwgQz4gewogIHZvaWQgcmVwb3J0KE0gbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsIFVyaSBmaWxlVXJpLAogICAgICB7TGlzdDxDPiBjb250ZXh0fSk7Cn0KCi8vLyBUaGUgZGlmZmVyZW50IGtpbmRzIG9mIG51bWJlciBzZW1hbnRpY3Mgc3VwcG9ydGVkIGJ5IHRoZSBjb25zdGFudCBldmFsdWF0b3IuCmVudW0gTnVtYmVyU2VtYW50aWNzIHsKICAvLy8gRGFydCBWTSBudW1iZXIgc2VtYW50aWNzLgogIHZtLAoKICAvLy8gSmF2YVNjcmlwdCAoRGFydDJqcyBhbmQgRERDKSBudW1iZXIgc2VtYW50aWNzLgogIGpzLAp9CgovLyBCYWNrZW5kIHNwZWNpZmljIGNvbnN0YW50IGV2YWx1YXRpb24gYmVoYXZpb3IKY2xhc3MgQ29uc3RhbnRzQmFja2VuZCB7CiAgY29uc3QgQ29uc3RhbnRzQmFja2VuZCgpOwoKICAvLy8gTG93ZXJpbmcgb2YgYSBsaXN0IGNvbnN0YW50IHRvIGEgYmFja2VuZC1zcGVjaWZpYyByZXByZXNlbnRhdGlvbi4KICBDb25zdGFudCBsb3dlckxpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgY29uc3RhbnQpID0+IGNvbnN0YW50OwoKICAvLy8gTG93ZXJpbmcgb2YgYSBzZXQgY29uc3RhbnQgdG8gYSBiYWNrZW5kLXNwZWNpZmljIHJlcHJlc2VudGF0aW9uLgogIENvbnN0YW50IGxvd2VyU2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgY29uc3RhbnQpID0+IGNvbnN0YW50OwoKICAvLy8gTG93ZXJpbmcgb2YgYSBtYXAgY29uc3RhbnQgdG8gYSBiYWNrZW5kLXNwZWNpZmljIHJlcHJlc2VudGF0aW9uLgogIENvbnN0YW50IGxvd2VyTWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgY29uc3RhbnQpID0+IGNvbnN0YW50OwoKICAvLy8gTnVtYmVyIHNlbWFudGljcyB0byB1c2UgZm9yIHRoaXMgYmFja2VuZC4KICBOdW1iZXJTZW1hbnRpY3MgZ2V0IG51bWJlclNlbWFudGljcyA9PiBOdW1iZXJTZW1hbnRpY3Mudm07CgogIC8vLyBJbmxpbmUgY29udHJvbCBvZiBjb25zdGFudCB2YXJpYWJsZXMuIFRoZSBnaXZlbiBjb25zdGFudCBleHByZXNzaW9uCiAgLy8vIGlzIHRoZSBpbml0aWFsaXplciBvZiBhIFtGaWVsZF0gb3IgW1ZhcmlhYmxlRGVjbGFyYXRpb25dIG5vZGUuCiAgLy8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgLCB0aGUgdmFyaWFibGUgd2lsbCBiZSBpbmxpbmVkIGF0IGFsbAogIC8vLyBwb2ludHMgb2YgcmVmZXJlbmNlIGFuZCB0aGUgdmFyaWFibGUgaXRzZWxmIHJlbW92ZWQgKHVubGVzcyBvdmVycmlkZGVuCiAgLy8vIGJ5IHRoZSBga2VlcEZpZWxkc2Agb3IgYGtlZXBWYXJpYWJsZXNgIGZsYWcgdG8gdGhlIGNvbnN0YW50IHRyYW5zZm9ybWVyKS4KICAvLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBkZXRlcm1pbmlzdGljLCBpLmUuIGl0IG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZQogIC8vLyB2YWx1ZSBmb3IgdGhlIHNhbWUgY29uc3RhbnQgdmFsdWUgYW5kIHBsYWNlIGluIHRoZSBBU1QuCiAgYm9vbCBzaG91bGRJbmxpbmVDb25zdGFudChDb25zdGFudEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIpID0+IHRydWU7CgogIC8vLyBXaGV0aGVyIHRoaXMgdGFyZ2V0IHN1cHBvcnRzIHVuZXZhbHVhdGVkIGNvbnN0YW50cy4KICAvLy8KICAvLy8gSWYgbm90LCB0aGVuIHRyeWluZyB0byBwZXJmb3JtIGNvbnN0YW50IGV2YWx1YXRpb24gd2l0aG91dCBhbiBlbnZpcm9ubWVudAogIC8vLyByYWlzZXMgYW4gZXhjZXB0aW9uLgogIC8vLwogIC8vLyBUaGlzIGRlZmF1bHRzIHRvIGBmYWxzZWAgc2luY2UgaXQgcmVxdWlyZXMgYWRkaXRpb25hbCB3b3JrIGZvciBhIGJhY2tlbmQKICAvLy8gdG8gc3VwcG9ydCB1bmV2YWx1YXRlZCBjb25zdGFudHMuCiAgYm9vbCBnZXQgc3VwcG9ydHNVbmV2YWx1YXRlZENvbnN0YW50cyA9PiBmYWxzZTsKfQoKLy8vIEEgdGFyZ2V0IHByb3ZpZGVzIGJhY2tlbmQtc3BlY2lmaWMgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyBrZXJuZWwgSVIuCmFic3RyYWN0IGNsYXNzIFRhcmdldCB7CiAgU3RyaW5nIGdldCBuYW1lOwoKICAvLy8gQSBsaXN0IG9mIFVSSXMgb2YgcmVxdWlyZWQgbGlicmFyaWVzLCBub3QgaW5jbHVkaW5nIGRhcnQ6Y29yZS4KICAvLy8KICAvLy8gTGlicmFyaWVzIHdpbGwgYmUgbG9hZGVkIGluIG9yZGVyLgogIExpc3Q8U3RyaW5nPiBnZXQgZXh0cmFSZXF1aXJlZExpYnJhcmllcyA9PiA8U3RyaW5nPltdOwoKICAvLy8gQWRkaXRpb25hbCBkZWNsYXJlZCB2YXJpYWJsZXMgaW1wbGllZCBieSB0aGlzIHRhcmdldC4KICAvLy8KICAvLy8gVGhlc2UgY2FuIGFsc28gYmUgcGFzc2VkIG9uIHRoZSBjb21tYW5kLWxpbmUgb2YgZm9ybSBgLUQ8bmFtZT49PHZhbHVlPmAsCiAgLy8vIGFuZCB0aG9zZSBwcm92aWRlZCBvbiB0aGUgY29tbWFuZC1saW5lIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRob3NlIGRlZmluZWQKICAvLy8gYnkgdGhlIHRhcmdldC4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBleHRyYURlY2xhcmVkVmFyaWFibGVzID0+IGNvbnN0IDxTdHJpbmcsIFN0cmluZz57fTsKCiAgLy8vIENsYXNzZXMgZnJvbSB0aGUgU0RLIHdob3NlIGludGVyZmFjZSBpcyByZXF1aXJlZCBmb3IgdGhlIG1vZHVsYXIKICAvLy8gdHJhbnNmb3JtYXRpb25zLgogIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gZ2V0IHJlcXVpcmVkU2RrQ2xhc3NlcyA9PiBDb3JlVHlwZXMucmVxdWlyZWRDbGFzc2VzOwoKICBib29sIGdldCBsZWdhY3lNb2RlOwoKICAvLy8gQSBkZXJpdmVkIGNsYXNzIG1heSBjaGFuZ2UgdGhpcyB0byBgdHJ1ZWAgdG8gZW5hYmxlIGZvcndhcmRlcnMgdG8KICAvLy8gdXNlci1kZWZpbmVkIGBub1N1Y2hNZXRob2RgIHRoYXQgYXJlIGdlbmVyYXRlZCBmb3IgZWFjaCBhYnN0cmFjdCBtZW1iZXIKICAvLy8gaWYgc3VjaCBgbm9TdWNoTWV0aG9kYCBpcyBwcmVzZW50LgogIC8vLwogIC8vLyBUaGUgZm9yd2FyZGVycyBhcmUgYWJzdHJhY3QgW1Byb2NlZHVyZV1zIHdpdGggW2lzTm9TdWNoTWV0aG9kRm9yd2FyZGVyXQogIC8vLyBiaXQgc2V0LiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBiZWhhdmlvciBvZiBzdWNoIGZvcndhcmRlcnMgaXMgdXAKICAvLy8gZm9yIHRoZSB0YXJnZXQgYmFja2VuZC4KICBib29sIGdldCBlbmFibGVOb1N1Y2hNZXRob2RGb3J3YXJkZXJzID0+IGZhbHNlOwoKICAvLy8gQSBkZXJpdmVkIGNsYXNzIG1heSBjaGFuZ2UgdGhpcyB0byBgdHJ1ZWAgdG8gZW5hYmxlIEZsdXR0ZXIgc3BlY2lmaWMKICAvLy8gInN1cGVyLW1peGlucyIgc2VtYW50aWNzLgogIC8vLwogIC8vLyBUaGlzIHNlbWFudGljcyByZWxheGVzIGEgbnVtYmVyIG9mIGNvbnN0cmFpbnQgcHJldmlvdXNseSBpbXBvc2VkIG9uCiAgLy8vIG1peGlucy4gSW1wb3J0YW50bHkgaXQgaW1wb3NlcyB0aGUgZm9sbG93aW5nIGNoYW5nZToKICAvLy8KICAvLy8gICAgIEFuIGFic3RyYWN0IGNsYXNzIG1heSBjb250YWluIGEgbWVtYmVyIHdpdGggYSBzdXBlci1pbnZvY2F0aW9uIHRoYXQKICAvLy8gICAgIGNvcnJlc3BvbmRzIHRvIGEgbWVtYmVyIG9mIHRoZSBzdXBlcmNsYXNzIGludGVyZmFjZSwgYnV0IHdoZXJlIHRoZQogIC8vLyAgICAgYWN0dWFsIHN1cGVyY2xhc3MgZG9lcyBub3QgZGVjbGFyZSBvciBpbmhlcml0IGEgbWF0Y2hpbmcgbWV0aG9kLgogIC8vLyAgICAgU2luY2Ugbm8gYW1vdW50IG9mIG92ZXJyaWRpbmcgY2FuIGNoYW5nZSB0aGlzIHByb3BlcnR5LCBzdWNoIGEgY2xhc3MKICAvLy8gICAgIGNhbm5vdCBiZSBleHRlbmRlZCB0byBhIGNsYXNzIHRoYXQgaXMgbm90IGFic3RyYWN0LCBpdCBjYW4gb25seSBiZQogIC8vLyAgICAgdXNlZCB0byBkZXJpdmUgYSBtaXhpbiBmcm9tLgogIC8vLwogIC8vLyBTZWUgZGFydGJ1Zy5jb20vMzE1NDIgZm9yIGRldGFpbHMgb2YgdGhlIHNlbWFudGljcy4KICBib29sIGdldCBlbmFibGVTdXBlck1peGlucyA9PiBmYWxzZTsKCiAgLy8vIFBlcmZvcm0gdGFyZ2V0LXNwZWNpZmljIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgb3V0bGluZXMgc3RvcmVkIGluCiAgLy8vIFtDb21wb25lbnRdIHdoZW4gZ2VuZXJhdGluZyBzdW1tYXJpZXMuCiAgLy8vCiAgLy8vIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZCB0byBhZGQgbWV0YWRhdGEgb24gb3V0bGluZXMgYW5kIHRvIGZpbHRlcgogIC8vLyB1bm5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBiZWZvcmUgZ2VuZXJhdGluZyBwcm9ncmFtIHN1bW1hcmllcy4gVGhpcwogIC8vLyB0cmFuc2Zvcm1hdGlvbiBpcyBub3QgYXBwbGllZCB3aGVuIGNvbXBpbGluZyBmdWxsIGtlcm5lbCBwcm9ncmFtcyB0bwogIC8vLyBwcmV2ZW50IGFmZmVjdGluZyB0aGUgaW50ZXJuYWwgaW52YXJpYW50cyBvZiB0aGUgY29tcGlsZXIgYW5kIGFjY2lkZW50YWxseQogIC8vLyBzbG93aW5nIGRvd24gY29tcGlsYXRpb24uCiAgdm9pZCBwZXJmb3JtT3V0bGluZVRyYW5zZm9ybWF0aW9ucyhDb21wb25lbnQgY29tcG9uZW50KSB7fQoKICAvLy8gUGVyZm9ybSB0YXJnZXQtc3BlY2lmaWMgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBnaXZlbiBsaWJyYXJpZXMgdGhhdCBtdXN0CiAgLy8vIHJ1biBiZWZvcmUgY29uc3RhbnQgZXZhbHVhdGlvbi4KICB2b2lkIHBlcmZvcm1QcmVDb25zdGFudEV2YWx1YXRpb25UcmFuc2Zvcm1hdGlvbnMoCiAgICAgIENvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIENvcmVUeXBlcyBjb3JlVHlwZXMsCiAgICAgIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgZGlhZ25vc3RpY1JlcG9ydGVyLAogICAgICB7dm9pZCBsb2dnZXIoU3RyaW5nIG1zZyl9KSB7fQoKICAvLy8gUGVyZm9ybSB0YXJnZXQtc3BlY2lmaWMgbW9kdWxhciB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGdpdmVuIGxpYnJhcmllcy4KICB2b2lkIHBlcmZvcm1Nb2R1bGFyVHJhbnNmb3JtYXRpb25zT25MaWJyYXJpZXMoCiAgICAgIENvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIENvcmVUeXBlcyBjb3JlVHlwZXMsCiAgICAgIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwKICAgICAgTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXMsCiAgICAgIC8vIFRPRE8oYXNrZXNjKTogQ29uc2lkZXIgaG93IHRvIGdlbmVyYWxseSBwYXNzIGNvbXBpbGVyIG9wdGlvbnMgdG8KICAgICAgLy8gdHJhbnNmb3JtYXRpb25zLgogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcywKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIGRpYWdub3N0aWNSZXBvcnRlciwKICAgICAge3ZvaWQgbG9nZ2VyKFN0cmluZyBtc2cpfSk7CgogIC8vLyBQZXJmb3JtIHRhcmdldC1zcGVjaWZpYyBtb2R1bGFyIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgZ2l2ZW4gcHJvZ3JhbS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIHdoZW4gYW4gaW5kaXZpZHVhbCBleHByZXNzaW9uIGlzIGNvbXBpbGVkLCBlLmcuIGZvciBkZWJ1Z2dpbmcKICAvLy8gcHVycG9zZXMuIEl0IGlzIGlsbGVnYWwgdG8gbW9kaWZ5IGFueSBvZiB0aGUgZW5jbG9zaW5nIG5vZGVzIG9mIHRoZQogIC8vLyBwcm9jZWR1cmUuCiAgdm9pZCBwZXJmb3JtVHJhbnNmb3JtYXRpb25zT25Qcm9jZWR1cmUoCiAgICAgIENvcmVUeXBlcyBjb3JlVHlwZXMsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwgUHJvY2VkdXJlIHByb2NlZHVyZSwKICAgICAge3ZvaWQgbG9nZ2VyKFN0cmluZyBtc2cpfSkge30KCiAgLy8vIFdoZXRoZXIgYSBwbGF0Zm9ybSBsaWJyYXJ5IG1heSBkZWZpbmUgYSByZXN0cmljdGVkIHR5cGUsIHN1Y2ggYXMgYGJvb2xgLAogIC8vLyBgaW50YCwgYGRvdWJsZWAsIGBudW1gLCBhbmQgYFN0cmluZ2AuCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQgb25seSBgZGFydDpjb3JlYCBtYXkgZGVmaW5lIHJlc3RyaWN0ZWQgdHlwZXMsIGJ1dCBzb21lIHRhcmdldAogIC8vLyBpbXBsZW1lbnRhdGlvbnMgb3ZlcnJpZGUgdGhpcy4KICBib29sIG1heURlZmluZVJlc3RyaWN0ZWRUeXBlKFVyaSB1cmkpID0+CiAgICAgIHVyaS5zY2hlbWUgPT0gJ2RhcnQnICYmIHVyaS5wYXRoID09ICdjb3JlJzsKCiAgLy8vIFdoZXRoZXIgYSBsaWJyYXJ5IGlzIGFsbG93ZWQgdG8gaW1wb3J0IGEgcGxhdGZvcm0gcHJpdmF0ZSBsaWJyYXJ5LgogIC8vLwogIC8vLyBCeSBkZWZhdWx0IG9ubHkgYGRhcnQ6KmAgbGlicmFyaWVzIGFyZSBhbGxvd2VkLiBNYXkgYmUgb3ZlcnJpZGRlbiBmb3IKICAvLy8gdGVzdGluZyBwdXJwb3Nlcy4KICBib29sIGFsbG93UGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2VzcyhVcmkgaW1wb3J0ZXIsIFVyaSBpbXBvcnRlZCkgPT4KICAgICAgaW1wb3J0ZWQuc2NoZW1lICE9ICJkYXJ0IiB8fAogICAgICAhaW1wb3J0ZWQucGF0aC5zdGFydHNXaXRoKCJfIikgfHwKICAgICAgaW1wb3J0ZXIuc2NoZW1lID09ICJkYXJ0IiB8fAogICAgICAoaW1wb3J0ZXIuc2NoZW1lID09ICJwYWNrYWdlIiAmJgogICAgICAgICAgaW1wb3J0ZXIucGF0aC5zdGFydHNXaXRoKCJkYXJ0X2ludGVybmFsLyIpKTsKCiAgLy8vIFdoZXRoZXIgdGhlIGBuYXRpdmVgIGxhbmd1YWdlIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgd2l0aGluIFtsaWJyYXJ5XS4KICAvLy8KICAvLy8gVGhlIGBuYXRpdmVgIGxhbmd1YWdlIGV4dGVuc2lvbiBpcyBub3QgcGFydCBvZiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiwKICAvLy8gaXQgbWVhbnMgc29tZXRoaW5nIGVsc2UgdG8gZWFjaCB0YXJnZXQsIGFuZCBpdCBpcyBlbmFibGVkIHVuZGVyIGRpZmZlcmVudAogIC8vLyBjaXJjdW1zdGFuY2VzIGZvciBlYWNoIHRhcmdldCBpbXBsZW1lbnRhdGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBWTSB0YXJnZXQKICAvLy8gZW5hYmxlcyBpdCBldmVyeXdoZXJlIGJlY2F1c2Ugb2YgZXhpc3Rpbmcgc3VwcG9ydCBmb3IgImRhcnQtZXh0OiIgbmF0aXZlCiAgLy8vIGV4dGVuc2lvbnMsIGJ1dCB0YXJnZXRzIGxpa2UgZGFydDJqcyBvbmx5IGVuYWJsZSBpdCBvbiB0aGUgY29yZSBsaWJyYXJpZXMuCiAgYm9vbCBlbmFibGVOYXRpdmUoVXJpIHVyaSkgPT4gZmFsc2U7CgogIC8vLyBUaGVyZSBhcmUgdHdvIHZhcmlhbnRzIG9mIHRoZSBgbmF0aXZlYCBsYW5ndWFnZSBleHRlbnNpb24uIFRoZSBWTSBleHBlY3RzCiAgLy8vIHRoZSBuYXRpdmUgdG9rZW4gdG8gYmUgZm9sbG93ZWQgYnkgc3RyaW5nLCB3aGVyZWFzIGRhcnQyanMgYW5kIEREQyBkbyBub3QuCiAgLy8gVE9ETyhzaWdtdW5kLCBhaGUpOiBpZGVhbGx5IHdlIHNob3VsZCByZW1vdmUgdGhlIGBuYXRpdmVgIHN5bnRheCwgaWYgbm90LAogIC8vIHdlIHNob3VsZCBhdCBsZWFzdCB1bmlmeSB0aGUgVk0gYW5kIG5vbi1WTSB2YXJpYW50cy4KICBib29sIGdldCBuYXRpdmVFeHRlbnNpb25FeHBlY3RzU3RyaW5nID0+IGZhbHNlOwoKICAvLy8gV2hldGhlciBpbnRlZ2VyIGxpdGVyYWxzIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgb24gdGhlIHdlYgogIC8vLyAoaS5lLiBpbiBKYXZhc2NyaXB0KSBzaG91bGQgY2F1c2UgYW4gZXJyb3IgdG8gYmUgaXNzdWVkLgogIC8vLyBBbiBleGFtcGxlIG9mIHN1Y2ggYSBudW1iZXIgaXMgYDJeNTMgKyAxYCB3aGVyZSBpbiBKYXZhc2NyaXB0IC0gYmVjYXVzZQogIC8vLyBpbnRlZ2VycyBhcmUgcmVwcmVzZW50ZWQgYXMgZG91YmxlcwogIC8vLyBgTWF0aC5wb3coMiwgNTMpID0gTWF0aC5wb3coMiwgNTMpICsgMWAuCiAgYm9vbCBnZXQgZXJyb3JPblVuZXhhY3RXZWJJbnRMaXRlcmFscyA9PiBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgc2V0IGxpdGVyYWxzIGFyZSBuYXRpdmVseSBzdXBwb3J0ZWQgYnkgdGhpcyB0YXJnZXQuIElmIHNldAogIC8vLyBsaXRlcmFscyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGFyZ2V0LCB0aGV5IHdpbGwgYmUgZGVzdWdhcmVkIGludG8KICAvLy8gZXhwbGljaXQgYFNldGAgY3JlYXRpb24gKGZvciBub24tY29uc3Qgc2V0IGxpdGVyYWxzKSBvciB3cmFwcGVkIG1hcAogIC8vLyBsaXRlcmFscyAoZm9yIGNvbnN0IHNldCBsaXRlcmFscykuCiAgYm9vbCBnZXQgc3VwcG9ydHNTZXRMaXRlcmFscyA9PiB0cnVlOwoKICAvLy8gQnVpbGRzIGFuIGV4cHJlc3Npb24gdGhhdCBpbnN0YW50aWF0ZXMgYW4gW0ludm9jYXRpb25dIHRoYXQgY2FuIGJlIHBhc3NlZAogIC8vLyB0byBbbm9TdWNoTWV0aG9kXS4KICBFeHByZXNzaW9uIGluc3RhbnRpYXRlSW52b2NhdGlvbihDb3JlVHlwZXMgY29yZVR5cGVzLCBFeHByZXNzaW9uIHJlY2VpdmVyLAogICAgICBTdHJpbmcgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwgYm9vbCBpc1N1cGVyKTsKCiAgRXhwcmVzc2lvbiBpbnN0YW50aWF0ZU5vU3VjaE1ldGhvZEVycm9yKENvcmVUeXBlcyBjb3JlVHlwZXMsCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIFN0cmluZyBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpc01ldGhvZDogZmFsc2UsCiAgICAgIGJvb2wgaXNHZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzU2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc0ZpZWxkOiBmYWxzZSwKICAgICAgYm9vbCBpc0xvY2FsVmFyaWFibGU6IGZhbHNlLAogICAgICBib29sIGlzRHluYW1pYzogZmFsc2UsCiAgICAgIGJvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNTdGF0aWM6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3RydWN0b3I6IGZhbHNlLAogICAgICBib29sIGlzVG9wTGV2ZWw6IGZhbHNlfSk7CgogIC8vLyBDb25maWd1cmUgdGhlIGdpdmVuIFtDb21wb25lbnRdIGluIGEgdGFyZ2V0IHNwZWNpZmljIHdheS4KICAvLy8gUmV0dXJucyB0aGUgY29uZmlndXJlZCBjb21wb25lbnQuCiAgQ29tcG9uZW50IGNvbmZpZ3VyZUNvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50KSA9PiBjb21wb25lbnQ7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICdUYXJnZXQoJG5hbWUpJzsKCiAgQ2xhc3MgY29uY3JldGVMaXN0TGl0ZXJhbENsYXNzKENvcmVUeXBlcyBjb3JlVHlwZXMpID0+IG51bGw7CiAgQ2xhc3MgY29uY3JldGVDb25zdExpc3RMaXRlcmFsQ2xhc3MoQ29yZVR5cGVzIGNvcmVUeXBlcykgPT4gbnVsbDsKCiAgQ2xhc3MgY29uY3JldGVNYXBMaXRlcmFsQ2xhc3MoQ29yZVR5cGVzIGNvcmVUeXBlcykgPT4gbnVsbDsKICBDbGFzcyBjb25jcmV0ZUNvbnN0TWFwTGl0ZXJhbENsYXNzKENvcmVUeXBlcyBjb3JlVHlwZXMpID0+IG51bGw7CgogIENsYXNzIGNvbmNyZXRlSW50TGl0ZXJhbENsYXNzKENvcmVUeXBlcyBjb3JlVHlwZXMsIGludCB2YWx1ZSkgPT4gbnVsbDsKICBDbGFzcyBjb25jcmV0ZVN0cmluZ0xpdGVyYWxDbGFzcyhDb3JlVHlwZXMgY29yZVR5cGVzLCBTdHJpbmcgdmFsdWUpID0+IG51bGw7CgogIENvbnN0YW50c0JhY2tlbmQgY29uc3RhbnRzQmFja2VuZChDb3JlVHlwZXMgY29yZVR5cGVzKTsKfQoKY2xhc3MgTm9uZUNvbnN0YW50c0JhY2tlbmQgZXh0ZW5kcyBDb25zdGFudHNCYWNrZW5kIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIHN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHM7CgogIGNvbnN0IE5vbmVDb25zdGFudHNCYWNrZW5kKHt0aGlzLnN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHN9KTsKfQoKY2xhc3MgTm9uZVRhcmdldCBleHRlbmRzIFRhcmdldCB7CiAgZmluYWwgVGFyZ2V0RmxhZ3MgZmxhZ3M7CgogIE5vbmVUYXJnZXQodGhpcy5mbGFncyk7CgogIGJvb2wgZ2V0IGxlZ2FjeU1vZGUgPT4gZmxhZ3MubGVnYWN5TW9kZTsKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ25vbmUnOwogIExpc3Q8U3RyaW5nPiBnZXQgZXh0cmFSZXF1aXJlZExpYnJhcmllcyA9PiA8U3RyaW5nPltdOwogIHZvaWQgcGVyZm9ybU1vZHVsYXJUcmFuc2Zvcm1hdGlvbnNPbkxpYnJhcmllcygKICAgICAgQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAgQ29yZVR5cGVzIGNvcmVUeXBlcywKICAgICAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LAogICAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcywKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudERlZmluZXMsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciBkaWFnbm9zdGljUmVwb3J0ZXIsCiAgICAgIHt2b2lkIGxvZ2dlcihTdHJpbmcgbXNnKX0pIHt9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gaW5zdGFudGlhdGVJbnZvY2F0aW9uKENvcmVUeXBlcyBjb3JlVHlwZXMsIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIFN0cmluZyBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LCBib29sIGlzU3VwZXIpIHsKICAgIHJldHVybiBuZXcgSW52YWxpZEV4cHJlc3Npb24obnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGluc3RhbnRpYXRlTm9TdWNoTWV0aG9kRXJyb3IoQ29yZVR5cGVzIGNvcmVUeXBlcywKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgU3RyaW5nIG5hbWUsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQsCiAgICAgIHtib29sIGlzTWV0aG9kOiBmYWxzZSwKICAgICAgYm9vbCBpc0dldHRlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNTZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzRmllbGQ6IGZhbHNlLAogICAgICBib29sIGlzTG9jYWxWYXJpYWJsZTogZmFsc2UsCiAgICAgIGJvb2wgaXNEeW5hbWljOiBmYWxzZSwKICAgICAgYm9vbCBpc1N1cGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcjogZmFsc2UsCiAgICAgIGJvb2wgaXNUb3BMZXZlbDogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRFeHByZXNzaW9uKG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRzQmFja2VuZCBjb25zdGFudHNCYWNrZW5kKENvcmVUeXBlcyBjb3JlVHlwZXMpID0+CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCB0aGlzIHZhcnkgd2l0aCB0aGUgdXNlIGNhc2U/CiAgICAgIGNvbnN0IE5vbmVDb25zdGFudHNCYWNrZW5kKHN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHM6IHRydWUpOwp9CoEuAE5OPB8BFiIdATgBFBkiAUwCATIBRjgDATMfJBkCASpCGgIBURcgBgE1BgIBMRkcAUhBAUc/AUc/ATA9AUpFSU1QTT5FAToGUBsGTygyAgFJGBMBRQYpOQE8Bk9QFU4BRxdRARcBSE4pBk5MHjIBSyAGSjsGTk1LT00nBjonAUgtBkxIS1EgPQFPJjQbGx8tJAFOMRsbIB9KGi4tIgFMBlFKESpKJAFPLAZPJSsyAUkGTBhIIygjJzcBTQZRUE9PUScBUFFPOjIBTT9OKi8yAUlMSikoAVAZTUMBP0kdHBwbIx0bHCEgAUAoQgEoAT9EAT5DAUlPAToCATYMKwFDAgEiGwEaASsdOTEbGyAfLi0kAQxNRCgEAQw/SR0cHBsjHRscISEoBAEMPEJGAgEicGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydEJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9jb21waWxlcl9vcHRpb25zLmRhcnSuLC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5jb21waWxlcl9vcHRpb25zOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0JyBzaG93IFRhcmdldDsKCmltcG9ydCAnZGlhZ25vc3RpY19tZXNzYWdlLmRhcnQnIHNob3cgRGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyOwoKaW1wb3J0ICdleHBlcmltZW50YWxfZmxhZ3MuZGFydCcKICAgIHNob3cKICAgICAgICBkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MsCiAgICAgICAgRXhwZXJpbWVudGFsRmxhZywKICAgICAgICBleHBpcmVkRXhwZXJpbWVudGFsRmxhZ3MsCiAgICAgICAgcGFyc2VFeHBlcmltZW50YWxGbGFnOwoKaW1wb3J0ICdmaWxlX3N5c3RlbS5kYXJ0JyBzaG93IEZpbGVTeXN0ZW07CgppbXBvcnQgJ3N0YW5kYXJkX2ZpbGVfc3lzdGVtLmRhcnQnIHNob3cgU3RhbmRhcmRGaWxlU3lzdGVtOwoKZXhwb3J0ICdkaWFnbm9zdGljX21lc3NhZ2UuZGFydCcgc2hvdyBEaWFnbm9zdGljTWVzc2FnZTsKCi8vLyBGcm9udC1lbmQgb3B0aW9ucyByZWxldmFudCB0byBjb21waWxlciBiYWNrIGVuZHMuCi8vLwovLy8gTm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIG9yIGV4dGVuZGVkIGJ5IGNsaWVudHMuCmNsYXNzIENvbXBpbGVyT3B0aW9ucyB7CiAgLy8vIFRoZSBVUkkgb2YgdGhlIHJvb3Qgb2YgdGhlIERhcnQgU0RLICh0eXBpY2FsbHkgYSAiZmlsZToiIFVSSSkuCiAgLy8vCiAgLy8vIElmIGBudWxsYCwgdGhlIFNESyB3aWxsIGJlIHNlYXJjaGVkIGZvciB1c2luZwogIC8vLyBbUGxhdGZvcm0ucmVzb2x2ZWRFeGVjdXRhYmxlXSBhcyBhIHN0YXJ0aW5nIHBvaW50LgogIFVyaSBzZGtSb290OwoKICAvLy8gVXJpIHRvIGEgcGxhdGZvcm0gbGlicmFyaWVzIHNwZWNpZmljYXRpb24gZmlsZS4KICAvLy8KICAvLy8gQSBsaWJyYXJpZXMgc3BlY2lmaWNhdGlvbiBmaWxlIGlzIGEgSlNPTiBmaWxlIHRoYXQgZGVzY3JpYmVzIGhvdyB0byBtYXAKICAvLy8gYGRhcnQ6KmAgbGlicmFyaWVzIHRvIFVSSXMgaW4gdGhlIHVuZGVybHlpbmcgW2ZpbGVTeXN0ZW1dLiAgU2VlCiAgLy8vIGBwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9saWJyYXJpZXNfc3BlY2lmaWNhdGlvbi5kYXJ0YCBmb3IgZGV0YWlscyBvbgogIC8vLyB0aGUgZm9ybWF0LgogIC8vLwogIC8vLyBJZiBhIHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQgYW5kIGBjb21waWxlU2RrID0gdHJ1ZWAsIHRoZSBjb21waWxlciB3aWxsCiAgLy8vIGluZmVyIGF0IGEgZGVmYXVsdCBsb2NhdGlvbiB1bmRlciBbc2RrUm9vdF0sIHR5cGljYWxseSB1bmRlcgogIC8vLyBgbGliL2xpYnJhcmllcy5qc29uYC4KICBVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTsKCiAgRGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyIG9uRGlhZ25vc3RpYzsKCiAgLy8vIFVSSSBvZiB0aGUgIi5wYWNrYWdlcyIgZmlsZSAodHlwaWNhbGx5IGEgImZpbGU6IiBVUkkpLgogIC8vLwogIC8vLyBJZiBgbnVsbGAsIHRoZSAiLnBhY2thZ2VzIiBmaWxlIHdpbGwgYmUgZm91bmQgdmlhIHRoZSBzdGFuZGFyZAogIC8vLyBwYWNrYWdlX2NvbmZpZyBzZWFyY2ggYWxnb3JpdGhtLgogIC8vLwogIC8vLyBJZiB0aGUgVVJJJ3MgcGF0aCBjb21wb25lbnQgaXMgZW1wdHkgKGUuZy4gYG5ldyBVcmkoKWApLCBubyBwYWNrYWdlcyBmaWxlCiAgLy8vIHdpbGwgYmUgdXNlZC4KICBVcmkgcGFja2FnZXNGaWxlVXJpOwoKICAvLy8gVVJJcyBvZiBpbnB1dCBzdW1tYXJ5IGZpbGVzIChleGNsdWRpbmcgdGhlIFNESyBzdW1tYXJ5OyB0eXBpY2FsbHkgdGhlc2UKICAvLy8gd2lsbCBiZSAiZmlsZToiIFVSSXMpLgogIC8vLwogIC8vLyBUaGVzZSBmaWxlcyBzaG91bGQgYmUgc3VtbWFyeSBmaWxlcyBnZW5lcmF0ZWQgYnkgdGhpcyBwYWNrYWdlIChhbmQgbm90IHRoZQogIC8vLyBzaW1pbGFybHkgbmFtZWQgc3VtbWFyeSBmaWxlcyBmcm9tIGBwYWNrYWdlOmFuYWx5emVyYC4pCiAgLy8vCiAgLy8vIFN1bW1hcmllcyBtYXkgYmUgcHJvdmlkZWQgaW4gYW55IG9yZGVyLCBidXQgdGhleSBzaG91bGQgYmUgYWN5Y2xpYyBhbmQKICAvLy8gY2xvc2VkOiBhbnkgbGlicmFyaWVzIHRoYXQgdGhleSByZWZlcmVuY2Ugc2hvdWxkIGJlIGRlZmluZWQgaW4gZWl0aGVyIG9uZQogIC8vLyBvZiBbaW5wdXRTdW1tYXJpZXNdIG9yIFtzZGtTdW1tYXJ5XS4KICBMaXN0PFVyaT4gaW5wdXRTdW1tYXJpZXMgPSBbXTsKCiAgLy8vIFVSSXMgb2Ygb3RoZXIga2VybmVsIGNvbXBvbmVudHMgdG8gbGluay4KICAvLy8KICAvLy8gQ29tbW9ubHkgdXNlZCB0byBsaW5rIHRoZSBjb2RlIGZvciB0aGUgU0RLIGxpYnJhcmllcyB0aGF0IHdhcyBjb21waWxlZAogIC8vLyBzZXBhcmF0ZWx5LiBGb3IgZXhhbXBsZSwgZGFydDJqcyBuZWVkcyB0byBsaW5rIHRoZSBTREsgc28gaXQgY2FuCiAgLy8vIG9wdGltaXplIGFuZCB0cmVlLXNoYWtlIHRoZSBjb2RlIGZvciB0aGUgYXBwbGljYXRpb24sIHdoZXJlYXMgdGhlIFZNCiAgLy8vIGFsd2F5cyBlbWJlZHMgdGhlIFNESyBpbnRlcm5hbGx5IGFuZCBkb2Vzbid0IG5lZWQgaXQgYXMgcGFydCBvZiB0aGUKICAvLy8gcHJvZ3JhbS4KICAvLy8KICAvLy8gVGhlIGNvbXBvbmVudHMgcHJvdmlkZWQgaGVyZSBzaG91bGQgYmUgY2xvc2VkIGFuZCBhY3ljbGljOiBhbnkgbGlicmFyaWVzCiAgLy8vIHRoYXQgdGhleSByZWZlcmVuY2Ugc2hvdWxkIGJlIGRlZmluZWQgaW4gYSBjb21wb25lbnQgaW4KICAvLy8gW2xpbmtlZERlcGVuZGVuY2llc10gb3IgYW55IG9mIHRoZSBbaW5wdXRTdW1tYXJpZXNdIG9yIFtzZGtTdW1tYXJ5XS4KICBMaXN0PFVyaT4gbGlua2VkRGVwZW5kZW5jaWVzID0gW107CgogIC8vLyBVUkkgb2YgdGhlIFNESyBzdW1tYXJ5IGZpbGUgKHR5cGljYWxseSBhICJmaWxlOiIgVVJJKS4KICAvLy8KICAvLy8gVGhpcyBzaG91bGQgc2hvdWxkIGJlIGEgc3VtbWFyeSBwcmV2aW91c2x5IGdlbmVyYXRlZCBieSB0aGlzIHBhY2thZ2UgKGFuZAogIC8vLyBub3QgdGhlIHNpbWlsYXJseSBuYW1lZCBzdW1tYXJ5IGZpbGVzIGZyb20gYHBhY2thZ2U6YW5hbHl6ZXJgLikKICAvLy8KICAvLy8gSWYgYG51bGxgIGFuZCBbY29tcGlsZVNka10gaXMgZmFsc2UsIHRoZSBTREsgc3VtbWFyeSB3aWxsIGJlIHNlYXJjaGVkIGZvcgogIC8vLyBhdCBhIGRlZmF1bHQgbG9jYXRpb24gd2l0aGluIFtzZGtSb290XS4KICBVcmkgc2RrU3VtbWFyeTsKCiAgLy8vIFRoZSBkZWNsYXJlZCB2YXJpYWJsZXMgZm9yIHVzZSBieSBjb25maWd1cmFibGUgaW1wb3J0cyBhbmQgY29uc3RhbnQKICAvLy8gZXZhbHVhdGlvbi4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGRlY2xhcmVkVmFyaWFibGVzOwoKICAvLy8gVGhlIFtGaWxlU3lzdGVtXSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB0aGUgZnJvbnQgZW5kIHRvIGFjY2VzcyBmaWxlcy4KICAvLy8KICAvLy8gQWxsIGZpbGUgc3lzdGVtIGFjY2VzcyBwZXJmb3JtZWQgYnkgdGhlIGZyb250IGVuZCBnb2VzIHRocm91Z2ggdGhpcwogIC8vLyBtZWNoYW5pc20sIHdpdGggb25lIGV4Y2VwdGlvbjogaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkIGZvcgogIC8vLyBbcGFja2FnZXNGaWxlVXJpXSwgdGhlIHBhY2thZ2VzIGZpbGUgaXMgbG9jYXRlZCB1c2luZyB0aGUgYWN0dWFsIHBoeXNpY2FsCiAgLy8vIGZpbGUgc3lzdGVtLiAgVE9ETyhwYXVsYmVycnkpOiBmaXggdGhpcy4KICBGaWxlU3lzdGVtIGZpbGVTeXN0ZW0gPSBTdGFuZGFyZEZpbGVTeXN0ZW0uaW5zdGFuY2U7CgogIC8vLyBXaGV0aGVyIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHRoZSBTREsuCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQgdGhlIGZyb250IGVuZCByZXNvbHZlcyBjb21wb25lbnRzIHVzaW5nIGEgcHJlYnVpbHQgU0RLIHN1bW1hcnkuCiAgLy8vIFdoZW4gdGhpcyBvcHRpb24gaXMgYHRydWVgLCBbc2RrU3VtbWFyeV0gbXVzdCBiZSBudWxsLgogIGJvb2wgY29tcGlsZVNkayA9IGZhbHNlOwoKICBAZGVwcmVjYXRlZAogIGJvb2wgY2hhc2VEZXBlbmRlbmNpZXM7CgogIC8vLyBUcnVlIGlmIGVuYWJsaW5nIGxlZ2FjeSBtb2RlIChEYXJ0IDEgY29tcGF0aWJpbGl0eSkuCiAgYm9vbCBsZWdhY3lNb2RlID0gZmFsc2U7CgogIC8vLyBQYXRjaCBmaWxlcyB0byBhcHBseSBvbiB0aGUgY29yZSBsaWJyYXJpZXMgZm9yIGEgc3BlY2lmaWMgdGFyZ2V0IHBsYXRmb3JtLgogIC8vLwogIC8vLyBLZXlzIGluIHRoZSBtYXAgYXJlIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdpdGggbm8gYGRhcnQ6YCBwcmVmaXgsIGZvcgogIC8vLyBleGFtcGxlOgogIC8vLwogIC8vLyAgICAgIHsnY29yZSc6IFsKICAvLy8gICAgICAgICAnZmlsZTovLy9sb2NhdGlvbi9vZi9jb3JlL3BhdGNoX2ZpbGUxLmRhcnQnLAogIC8vLyAgICAgICAgICdmaWxlOi8vL2xvY2F0aW9uL29mL2NvcmUvcGF0Y2hfZmlsZTIuZGFydCcsCiAgLy8vICAgICAgICAgXX0KICAvLy8KICAvLy8gVGhlIHZhbHVlcyBjYW4gYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlIFVSSXMuIEFic29sdXRlIFVSSXMgYXJlIHJlYWQKICAvLy8gZGlyZWN0bHksIHdoaWxlIHJlbGF0aXZlIFVSSXMgYXJlIHJlc29sdmVkIGZyb20gdGhlIFtzZGtSb290XS4KICAvLyBUT0RPKHNpZ211bmQpOiBwcm92aWRlIGFsc28gYSBmbGFnIHRvIGxvYWQgdGhpcyBkYXRhIGZyb20gYSBmaWxlIChsaWtlCiAgLy8gbGlicmFyaWVzLmpzb24pCiAgTWFwPFN0cmluZywgTGlzdDxVcmk+PiB0YXJnZXRQYXRjaGVzID0gPFN0cmluZywgTGlzdDxVcmk+Pnt9OwoKICAvLy8gRW5hYmxlIG9yIGRpc2FibGUgZXhwZXJpbWVudGFsIGZlYXR1cmVzLiBGZWF0dXJlcyBtYXBwaW5nIHRvIGB0cnVlYCBhcmUKICAvLy8gZXhwbGljaXRseSBlbmFibGVkLiBGZWF0dXJlcyBtYXBwaW5nIHRvIGBmYWxzZWAgYXJlIGV4cGxpY2l0bHkgZGlzYWJsZWQuCiAgLy8vIEZlYXR1cmVzIG5vdCBtZW50aW9uZWQgaW4gdGhlIG1hcCB3aWxsIGhhdmUgdGhlaXIgZGVmYXVsdCB2YWx1ZS4KICBNYXA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD4gZXhwZXJpbWVudGFsRmxhZ3MgPSA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD57fTsKCiAgLy8vIEVudmlyb25tZW50IG1hcCB1c2VkIHdoZW4gZXZhbHVhdGluZyBgYm9vbC5mcm9tRW52aXJvbm1lbnRgLAogIC8vLyBgaW50LmZyb21FbnZpcm9ubWVudGAgYW5kIGBTdHJpbmcuZnJvbUVudmlyb25tZW50YCBkdXJpbmcgY29uc3RhbnQKICAvLy8gZXZhbHVhdGlvbi4gSWYgdGhlIG1hcCBpcyBgbnVsbGAsIGFsbCBlbnZpcm9ubWVudCBjb25zdGFudHMgd2lsbCBiZSBsZWZ0CiAgLy8vIHVuZXZhbHVhdGVkIGFuZCBjYW4gYmUgZXZhbHVhdGVkIGJ5IGEgY29uc3RhbnQgZXZhbHVhdG9yIGxhdGVyLgogIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnREZWZpbmVzID0gbnVsbDsKCiAgLy8vIFJlcG9ydCBhbiBlcnJvciBpZiBhIGNvbnN0YW50IGNvdWxkIG5vdCBiZSBldmFsdWF0ZWQgKGVpdGhlciBiZWNhdXNlIGl0CiAgLy8vIGlzIGFuIGVudmlyb25tZW50IGNvbnN0YW50IGFuZCBubyBlbnZpcm9ubWVudCB3YXMgc3BlY2lmaWVkLCBvciBiZWNhdXNlCiAgLy8vIGl0IHJlZmVycyB0byBhIGNvbnN0cnVjdG9yIG9yIHZhcmlhYmxlIGluaXRpYWxpemVyIHRoYXQgaXMgbm90IGF2YWlsYWJsZSkuCiAgYm9vbCBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudCA9IGZhbHNlOwoKICAvLy8gVGhlIHRhcmdldCBwbGF0Zm9ybSB0aGF0IHdpbGwgY29uc3VtZSB0aGUgY29tcGlsZWQgY29kZS4KICAvLy8KICAvLy8gVXNlZCB0byBwcm92aWRlIHBsYXRmb3JtLXNwZWNpZmljIGRldGFpbHMgdG8gdGhlIGNvbXBpbGVyIGxpa2U6CiAgLy8vICAgKiB0aGUgc2V0IG9mIGxpYnJhcmllcyBhcmUgcGFydCBvZiBhIHBsYXRmb3JtJ3MgU0RLIChlLmcuIGRhcnQ6aHRtbCBmb3IKICAvLy8gICAgIGRhcnQyanMsIGRhcnQ6dWkgZm9yIGZsdXR0ZXIpLgogIC8vLwogIC8vLyAgICogd2hhdCBrZXJuZWwgdHJhbnNmb3JtYXRpb25zIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQKICAvLy8gICAgIChhc3luYy9hd2FpdCwgbWl4aW4gaW5saW5pbmcsIGV0YykuCiAgLy8vCiAgLy8vICAgKiBob3cgdG8gZGVhbCB3aXRoIG5vbi1zdGFuZGFyZCBmZWF0dXJlcyBsaWtlIGBuYXRpdmVgIGV4dGVuc2lvbnMuCiAgLy8vCiAgLy8vIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHRhcmdldCBpcyB0aGUgVk0uCiAgVGFyZ2V0IHRhcmdldDsKCiAgLy8vIERlcHJlY2F0ZWQuIEhhcyBubyBhZmZlY3Qgb24gZnJvbnQtZW5kLgogIC8vIFRPRE8oZGFydGJ1Zy5jb20vMzc1MTQpIFJlbW92ZSB0aGlzIGZpZWxkIG9uY2UgRERLIHJlbW92ZXMgaXRzIHVzZXMgb2YgaXQuCiAgYm9vbCBlbmFibGVBc3NlcnRzID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIHNob3cgdmVyYm9zZSBtZXNzYWdlcyAobWFpbmx5IGZvciBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlCiAgLy8vIHRyYWNraW5nKS4KICAvLy8KICAvLy8gTWVzc2FnZXMgYXJlIHByaW50ZWQgb24gc3Rkb3V0LgogIC8vIFRPRE8oc2lnbXVuZCk6IGltcHJvdmUgdGhlIGRpYWdub3N0aWNzIEFQSSB0byBwcm92aWRlIG1lY2hhbmlzbSB0bwogIC8vIGludGVyY2VwdCB2ZXJib3NlIGRhdGEgKElzc3VlICMzMDA1NikKICBib29sIHZlcmJvc2UgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gcnVuIGV4dHJhIHZlcmlmaWNhdGlvbiBzdGVwcyB0byB2YWxpZGF0ZSB0aGF0IGNvbXBpbGVkCiAgLy8vIGNvbXBvbmVudHMgYXJlIHdlbGwgZm9ybWVkLgogIC8vLwogIC8vLyBFcnJvcnMgYXJlIHJlcG9ydGVkIHZpYSB0aGUgW29uRGlhZ25vc3RpY10gY2FsbGJhY2suCiAgYm9vbCB2ZXJpZnkgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZHVtcCBnZW5lcmF0ZWQgY29tcG9uZW50cyBpbiBhIHRleHQgZm9ybWF0IChhbHNvIG1haW5seSBmb3IKICAvLy8gZGVidWdnaW5nKS4KICAvLy8KICAvLy8gRHVtcGVkIGRhdGEgaXMgcHJpbnRlZCBpbiBzdGRvdXQuCiAgYm9vbCBkZWJ1Z0R1bXAgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gb21pdCB0aGUgcGxhdGZvcm0gd2hlbiBzZXJpYWxpemluZyB0aGUgcmVzdWx0IGZyb20gYSBgZmFzdGEKICAvLy8gY29tcGlsZWAgcnVuLgogIGJvb2wgb21pdFBsYXRmb3JtID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIHNldCB0aGUgZXhpdCBjb2RlIHRvIG5vbi16ZXJvIGlmIGFueSBwcm9ibGVtIChpbmNsdWRpbmcKICAvLy8gd2FybmluZywgZXRjLikgaXMgZW5jb3VudGVyZWQgZHVyaW5nIGNvbXBpbGF0aW9uLgogIGJvb2wgc2V0RXhpdENvZGVPblByb2JsZW0gPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZW1iZWQgdGhlIGlucHV0IHNvdXJjZXMgaW4gZ2VuZXJhdGVkIGtlcm5lbCBjb21wb25lbnRzLgogIC8vLwogIC8vLyBUaGUga2VybmVsIGBDb21wb25lbnRgIEFQSSBpbmNsdWRlcyBhIGB1cmlUb1NvdXJjZWAgbWFwIGZpZWxkIHRoYXQgaXMgdXNlZAogIC8vLyB0byBlbWJlZCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UgZmlsZXMuIFRoaXMgcGFydCBvZiB0aGUga2VybmVsCiAgLy8vIEFQSSBpcyBpbiBmbHV4IGFuZCBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciBzb21lIHRvb2xzLiBUb2RheSBpdCBpcyB1c2VkCiAgLy8vIGZvciB0cmFuc2xhdGluZyBlcnJvciBsb2NhdGlvbnMgYW5kIHN0YWNrIHRyYWNlcyBpbiB0aGUgVk0uCiAgLy8gVE9ETyhzaWdtdW5kKTogY2hhbmdlIHRoZSBkZWZhdWx0LgogIGJvb2wgZW1iZWRTb3VyY2VUZXh0ID0gdHJ1ZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGNvbXBpbGVyIHNob3VsZCB0aHJvdyBhcyBzb29uIGFzIGl0IGVuY291bnRlcnMgYQogIC8vLyBjb21waWxhdGlvbiBlcnJvci4KICAvLy8KICAvLy8gVHlwaWNhbGx5IHVzZWQgYnkgZGV2ZWxvcGVycyB0byBkZWJ1ZyBpbnRlcm5hbHMgb2YgdGhlIGNvbXBpbGVyLgogIGJvb2wgdGhyb3dPbkVycm9yc0ZvckRlYnVnZ2luZyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGUgY29tcGlsZXIgc2hvdWxkIHRocm93IGFzIHNvb24gYXMgaXQgZW5jb3VudGVycyBhCiAgLy8vIGNvbXBpbGF0aW9uIHdhcm5pbmcuCiAgLy8vCiAgLy8vIFR5cGljYWxseSB1c2VkIGJ5IGRldmVsb3BlcnMgdG8gZGVidWcgaW50ZXJuYWxzIG9mIHRoZSBjb21waWxlci4KICBib29sIHRocm93T25XYXJuaW5nc0ZvckRlYnVnZ2luZyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byBnZW5lcmF0ZSBieXRlY29kZS4KICBib29sIGJ5dGVjb2RlID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIHdyaXRlIGEgZmlsZSAoZS5nLiBhIGRpbGwgZmlsZSkgd2hlbiByZXBvcnRpbmcgYSBjcmFzaC4KICBib29sIHdyaXRlRmlsZU9uQ3Jhc2hSZXBvcnQgPSB0cnVlOwp9CgovLy8gUGFyc2UgZXhwZXJpbWVudGFsIGZsYWcgYXJndW1lbnRzIG9mIHRoZSBmb3JtICdmbGFnJyBvciAnbm8tZmxhZycgaW50byBhIG1hcAovLy8gZnJvbSAnZmxhZycgdG8gYHRydWVgIG9yIGBmYWxzZWAsIHJlc3BlY3RpdmVseS4KTWFwPFN0cmluZywgYm9vbD4gcGFyc2VFeHBlcmltZW50YWxBcmd1bWVudHMoTGlzdDxTdHJpbmc+IGFyZ3VtZW50cykgewogIE1hcDxTdHJpbmcsIGJvb2w+IHJlc3VsdCA9IHt9OwogIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgZm9yIChTdHJpbmcgYXJndW1lbnQgaW4gYXJndW1lbnRzKSB7CiAgICAgIGZvciAoU3RyaW5nIGZlYXR1cmUgaW4gYXJndW1lbnQuc3BsaXQoJywnKSkgewogICAgICAgIGlmIChmZWF0dXJlLnN0YXJ0c1dpdGgoJ25vLScpKSB7CiAgICAgICAgICByZXN1bHRbZmVhdHVyZS5zdWJzdHJpbmcoMyldID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdFtmZWF0dXJlXSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCi8vLyBQYXJzZSBhIG1hcCBvZiBleHBlcmltZW50YWwgZmxhZ3MgdG8gdmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0bwovLy8gW0NvbXBpbGVyT3B0aW9ucy5leHBlcmltZW50YWxGbGFnc10uCi8vLyBUaGUgcmV0dXJuZWQgbWFwIGlzIG5vcm1hbGl6ZWQgdG8gY29udGFpbiBkZWZhdWx0IHZhbHVlcyBmb3IgdW5tZW50aW9uZWQKLy8vIGZsYWdzLgovLy8KLy8vIElmIGFuIHVua25vd24gZmxhZyBpcyBtZW50aW9uZWQsIG9yIGEgZmxhZyBpcyBtZW50aW9uZWQgbW9yZSB0aGFuIG9uY2UsCi8vLyB0aGUgc3VwcGxpZWQgZXJyb3IgaGFuZGxlciBpcyBjYWxsZWQgd2l0aCBhbiBlcnJvciBtZXNzYWdlLgovLy8KLy8vIElmIGFuIGV4cGlyZWQgZmxhZyBpcyBzZXQgdG8gaXRzIG5vbi1kZWZhdWx0IHZhbHVlIHRoZSBzdXBwbGllZCBlcnJvcgovLy8gaGFuZGxlciBpcyBjYWxsZWQgd2l0aCBhbiBlcnJvciBtZXNzYWdlLgovLy8KLy8vIElmIGFuIGV4cGlyZWQgZmxhZyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUgdGhlIHN1cHBsaWVkIHdhcm5pbmcKLy8vIGhhbmRsZXIgaXMgY2FsbGVkIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuCk1hcDxFeHBlcmltZW50YWxGbGFnLCBib29sPiBwYXJzZUV4cGVyaW1lbnRhbEZsYWdzKAogICAgTWFwPFN0cmluZywgYm9vbD4gZXhwZXJpbWVudHMsCiAgICB7dm9pZCBvbkVycm9yKFN0cmluZyBtZXNzYWdlKSwKICAgIHZvaWQgb25XYXJuaW5nKFN0cmluZyBtZXNzYWdlKX0pIHsKICBNYXA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD4gZmxhZ3MgPSA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD57fTsKICBpZiAoZXhwZXJpbWVudHMgIT0gbnVsbCkgewogICAgZm9yIChTdHJpbmcgZXhwZXJpbWVudCBpbiBleHBlcmltZW50cy5rZXlzKSB7CiAgICAgIGJvb2wgdmFsdWUgPSBleHBlcmltZW50c1tleHBlcmltZW50XTsKICAgICAgRXhwZXJpbWVudGFsRmxhZyBmbGFnID0gcGFyc2VFeHBlcmltZW50YWxGbGFnKGV4cGVyaW1lbnQpOwogICAgICBpZiAoZmxhZyA9PSBudWxsKSB7CiAgICAgICAgb25FcnJvcigiVW5rbm93biBleHBlcmltZW50OiAiICsgZXhwZXJpbWVudCk7CiAgICAgIH0gZWxzZSBpZiAoZmxhZ3MuY29udGFpbnNLZXkoZmxhZykpIHsKICAgICAgICBpZiAoZmxhZ3NbZmxhZ10gIT0gdmFsdWUpIHsKICAgICAgICAgIG9uRXJyb3IoCiAgICAgICAgICAgICAgIkV4cGVyaW1lbnQgc3BlY2lmaWVkIHdpdGggY29uZmxpY3RpbmcgdmFsdWVzOiAiICsgZXhwZXJpbWVudCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChleHBpcmVkRXhwZXJpbWVudGFsRmxhZ3NbZmxhZ10pIHsKICAgICAgICAgIGlmICh2YWx1ZSAhPSBkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3NbZmxhZ10pIHsKICAgICAgICAgICAgLy8vIFByb2R1Y2UgYW4gZXJyb3Igd2hlbiB0aGUgdmFsdWUgaXMgbm90IHRoZSBkZWZhdWx0IHZhbHVlLgogICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgICBvbkVycm9yKCJFbmFibGluZyBleHBlcmltZW50ICIgKwogICAgICAgICAgICAgICAgICBleHBlcmltZW50ICsKICAgICAgICAgICAgICAgICAgIiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG9uRXJyb3IoIkRpc2FibGluZyBleHBlcmltZW50ICIgKwogICAgICAgICAgICAgICAgICBleHBlcmltZW50ICsKICAgICAgICAgICAgICAgICAgIiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzW2ZsYWddOwogICAgICAgICAgfSBlbHNlIGlmIChvbldhcm5pbmcgIT0gbnVsbCkgewogICAgICAgICAgICAvLy8gUHJvZHVjZSBhIHdhcm5pbmcgd2hlbiB0aGUgdmFsdWUgaXMgdGhlIGRlZmF1bHQgdmFsdWUuCiAgICAgICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgIG9uV2FybmluZygiRXhwZXJpbWVudCAiICsKICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudCArCiAgICAgICAgICAgICAgICAgICIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAiCiAgICAgICAgICAgICAgICAgICAgICAiVGhlIHVzZSBvZiB0aGUgZmxhZyBpcyBkZXByZWNhdGVkLiIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG9uV2FybmluZygiRXhwZXJpbWVudCAiICsKICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudCArCiAgICAgICAgICAgICAgICAgICIgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIgogICAgICAgICAgICAgICAgICAgICAgIlRoZSB1c2Ugb2YgdGhlIGZsYWcgaXMgZGVwcmVjYXRlZC4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZmxhZ3NbZmxhZ10gPSB2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmxhZ3NbZmxhZ10gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgZm9yIChFeHBlcmltZW50YWxGbGFnIGZsYWcgaW4gRXhwZXJpbWVudGFsRmxhZy52YWx1ZXMpIHsKICAgIGFzc2VydChkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MuY29udGFpbnNLZXkoZmxhZyksCiAgICAgICAgIk5vIGRlZmF1bHQgdmFsdWUgZm9yICRmbGFnLiIpOwogICAgZmxhZ3NbZmxhZ10gPz89IGRlZmF1bHRFeHBlcmltZW50YWxGbGFnc1tmbGFnXTsKICB9CiAgcmV0dXJuIGZsYWdzOwp9CoE2AE5OPAEkATkBQAEhCSIaIh8BKwE8ATkBNgQ7GEUGNDkPATYGTkZPEgZNQxwhASkBPQZFJwZQFBcBTh0GUT4GTVArIQEvBk1HS0oPBk8+SyUBPQZQRgZQLhIBShIpAU4GSkJQLzcBLAZRPRsBDhoBOxsBUQZODwYWOzsRBlFFTBVAAU5PR04BQ0lPRjEBTk5RKwE/BkZQKQZJLgZLBjYRAS5QHgFNEQYmSCsYAUgiBjsXAU0SBigaAU0UHQFJOCUBSQZRUE5CKB8BQxkGRyoBQxsGRywBJBkBSSYCAVE0RyEbKTQpMBEiCggGBBECAUYpTQsETEAESi0ESC40IyMnQh0yLEEaNiwkE04KDy45ShkvHy8VMB8vDjQqRxkoHy09FSgfLj0ODB8RHwoIBgQ7Nyg0BBACATlwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9jb21waWxlcl9vcHRpb25zLmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvZGlhZ25vc3RpY19tZXNzYWdlLmRhcnSK3C8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5kaWFnbm9zdGljX21lc3NhZ2U7CgppbXBvcnQgJy4uL2Zhc3RhL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93IENvZGUsIERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24sIEZvcm1hdHRlZE1lc3NhZ2U7CgppbXBvcnQgJy4uL2Zhc3RhL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgovLy8gVGhlIHR5cGUgb2YgYSBkaWFnbm9zdGljIG1lc3NhZ2UgY2FsbGJhY2suIEZvciBleGFtcGxlOgovLy8KLy8vICAgIHZvaWQgaGFuZGxlcihEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7Ci8vLyAgICAgIGlmIChlbmFibGVUZXJtaW5hbENvbG9ycykgeyAvLyBTZWUgW3Rlcm1pbmFsX2NvbG9yX3N1cHBvcnQuZGFydF0uCi8vLyAgICAgICAgbWVzc2FnZS5hbnNpRm9ybWF0dGVkLmZvckVhY2goc3RkZXJyLndyaXRlbG4pOwovLy8gICAgICB9IGVsc2UgewovLy8gICAgICAgIG1lc3NhZ2UucGxhaW5UZXh0Rm9ybWF0dGVkLmZvckVhY2goc3RkZXJyLndyaXRlbG4pOwovLy8gICAgICB9Ci8vLyAgICB9CnR5cGVkZWYgRGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyID0gdm9pZCBGdW5jdGlvbihEaWFnbm9zdGljTWVzc2FnZSk7CgovLy8gUmVwcmVzZW50cyBhIGRpYWdub3N0aWMgbWVzc2FnZSB0aGF0IGNhbiBiZSByZXBvcnRlZCBmcm9tIGEgdG9vbCwgZm9yCi8vLyBleGFtcGxlLCBhIGNvbXBpbGVyLgovLy8KLy8vIFRoZSB3b3JkICpkaWFnbm9zdGljKiBpcyB1c2VkIGxvb3NlbHkgaGVyZSwgYXMgYSB0b29sIG1heSBhbHNvIHVzZSB0aGlzIGZvcgovLy8gcmVwb3J0aW5nIGFueSBraW5kIG9mIG1lc3NhZ2UsIGluY2x1ZGluZyBub24tZGlhZ25vc3RpYyBtZXNzYWdlcyBzdWNoIGFzCi8vLyBsaWNlbnNpbmcsIGluZm9ybWFsLCBvciBsb2dnaW5nIGluZm9ybWF0aW9uLiBUaGlzIGFsbG93cyBhIHdlbGwtYmVoYXZlZAovLy8gdG9vbCB0byBuZXZlciBkaXJlY3RseSB3cml0ZSB0byBzdGRvdXQgb3Igc3RkZXJyLgphYnN0cmFjdCBjbGFzcyBEaWFnbm9zdGljTWVzc2FnZSB7CiAgRGlhZ25vc3RpY01lc3NhZ2UuXygpOyAvLyBQcmV2ZW50IHN1YmNsYXNzaW5nLgoKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBhbnNpRm9ybWF0dGVkOwoKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBwbGFpblRleHRGb3JtYXR0ZWQ7CgogIFNldmVyaXR5IGdldCBzZXZlcml0eTsKfQoKLy8vIFRoaXMgbWV0aG9kIGlzIHN1YmplY3QgdG8gY2hhbmdlLgpVcmkgZ2V0TWVzc2FnZVVyaShEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgcmV0dXJuIG1lc3NhZ2UgaXMgRm9ybWF0dGVkTWVzc2FnZQogICAgICA/IG1lc3NhZ2UudXJpCiAgICAgIDogbWVzc2FnZSBpcyBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uID8gbWVzc2FnZS51cmkgOiBudWxsOwp9CgovLy8gVGhpcyBtZXRob2QgaXMgc3ViamVjdCB0byBjaGFuZ2UuCmludCBnZXRNZXNzYWdlQ2hhck9mZnNldChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgcmV0dXJuIG1lc3NhZ2UgaXMgRm9ybWF0dGVkTWVzc2FnZSA/IG1lc3NhZ2UuY2hhck9mZnNldCA6IG51bGw7Cn0KCi8vLyBUaGlzIG1ldGhvZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KaW50IGdldE1lc3NhZ2VMZW5ndGgoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlIGlzIEZvcm1hdHRlZE1lc3NhZ2UgPyBtZXNzYWdlLmxlbmd0aCA6IG51bGw7Cn0KCi8vLyBUaGlzIG1ldGhvZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KQ29kZSBnZXRNZXNzYWdlQ29kZU9iamVjdChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgcmV0dXJuIG1lc3NhZ2UgaXMgRm9ybWF0dGVkTWVzc2FnZSA/IG1lc3NhZ2UuY29kZSA6IG51bGw7Cn0KCi8vLyBUaGlzIG1ldGhvZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KU3RyaW5nIGdldE1lc3NhZ2VIZWFkZXJUZXh0KERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gbWVzc2FnZSBpcyBGb3JtYXR0ZWRNZXNzYWdlID8gbWVzc2FnZS5tZXNzYWdlIDogbnVsbDsKfQoKLy8vIFRoaXMgbWV0aG9kIGlzIHN1YmplY3QgdG8gY2hhbmdlLgppbnQgZ2V0TWVzc2FnZUNvZGUoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlIGlzIEZvcm1hdHRlZE1lc3NhZ2UgPyBtZXNzYWdlLmNvZGUuaW5kZXggOiAtMTsKfQoKLy8vIFRoaXMgbWV0aG9kIGlzIHN1YmplY3QgdG8gY2hhbmdlLgpNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXRNZXNzYWdlQXJndW1lbnRzKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gbWVzc2FnZSBpcyBGb3JtYXR0ZWRNZXNzYWdlID8gbWVzc2FnZS5hcmd1bWVudHMgOiBudWxsOwp9CgovLy8gVGhpcyBtZXRob2QgaXMgc3ViamVjdCB0byBjaGFuZ2UuCkl0ZXJhYmxlPERpYWdub3N0aWNNZXNzYWdlPiBnZXRNZXNzYWdlUmVsYXRlZEluZm9ybWF0aW9uKAogICAgRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlIGlzIEZvcm1hdHRlZE1lc3NhZ2UgPyBtZXNzYWdlLnJlbGF0ZWRJbmZvcm1hdGlvbiA6IG51bGw7Cn0KUwBOTjwBJgEjPAEvATwEMUs6Ej8LCUUBShkEUE1MNiMxASYBKwEZAgEmLyUUQwIBJjZCAgEmMj4CASY3PAIBJjk/AgEmMEACASZGQQIBJjohSgIBO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0RHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0h38vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gTk9URTogVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gRE8gTk9UIEVESVQuCi8vCi8vIEluc3RlYWQgbW9kaWZ5ICd0b29scy9leHBlcmltZW50YWxfZmVhdHVyZXMueWFtbCcgYW5kIHJ1bgovLyAncGtnL2Zyb250X2VuZC90b29sL2Zhc3RhIGdlbmVyYXRlLWV4cGVyaW1lbnRhbC1mbGFncycgdG8gdXBkYXRlLgoKZW51bSBFeHBlcmltZW50YWxGbGFnIHsKICBjb25zdGFudFVwZGF0ZTIwMTgsCiAgY29udHJvbEZsb3dDb2xsZWN0aW9ucywKICBleHRlbnNpb25NZXRob2RzLAogIG5vbk51bGxhYmxlLAogIHNldExpdGVyYWxzLAogIHNwcmVhZENvbGxlY3Rpb25zLAogIHRyaXBsZVNoaWZ0LAp9CgpFeHBlcmltZW50YWxGbGFnIHBhcnNlRXhwZXJpbWVudGFsRmxhZyhTdHJpbmcgZmxhZykgewogIHN3aXRjaCAoZmxhZykgewogICAgY2FzZSAiY29uc3RhbnQtdXBkYXRlLTIwMTgiOgogICAgICByZXR1cm4gRXhwZXJpbWVudGFsRmxhZy5jb25zdGFudFVwZGF0ZTIwMTg7CiAgICBjYXNlICJjb250cm9sLWZsb3ctY29sbGVjdGlvbnMiOgogICAgICByZXR1cm4gRXhwZXJpbWVudGFsRmxhZy5jb250cm9sRmxvd0NvbGxlY3Rpb25zOwogICAgY2FzZSAiZXh0ZW5zaW9uLW1ldGhvZHMiOgogICAgICByZXR1cm4gRXhwZXJpbWVudGFsRmxhZy5leHRlbnNpb25NZXRob2RzOwogICAgY2FzZSAibm9uLW51bGxhYmxlIjoKICAgICAgcmV0dXJuIEV4cGVyaW1lbnRhbEZsYWcubm9uTnVsbGFibGU7CiAgICBjYXNlICJzZXQtbGl0ZXJhbHMiOgogICAgICByZXR1cm4gRXhwZXJpbWVudGFsRmxhZy5zZXRMaXRlcmFsczsKICAgIGNhc2UgInNwcmVhZC1jb2xsZWN0aW9ucyI6CiAgICAgIHJldHVybiBFeHBlcmltZW50YWxGbGFnLnNwcmVhZENvbGxlY3Rpb25zOwogICAgY2FzZSAidHJpcGxlLXNoaWZ0IjoKICAgICAgcmV0dXJuIEV4cGVyaW1lbnRhbEZsYWcudHJpcGxlU2hpZnQ7CiAgfQogIHJldHVybiBudWxsOwp9Cgpjb25zdCBNYXA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD4gZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzID0gewogIEV4cGVyaW1lbnRhbEZsYWcuY29uc3RhbnRVcGRhdGUyMDE4OiB0cnVlLAogIEV4cGVyaW1lbnRhbEZsYWcuY29udHJvbEZsb3dDb2xsZWN0aW9uczogdHJ1ZSwKICBFeHBlcmltZW50YWxGbGFnLmV4dGVuc2lvbk1ldGhvZHM6IGZhbHNlLAogIEV4cGVyaW1lbnRhbEZsYWcubm9uTnVsbGFibGU6IGZhbHNlLAogIEV4cGVyaW1lbnRhbEZsYWcuc2V0TGl0ZXJhbHM6IHRydWUsCiAgRXhwZXJpbWVudGFsRmxhZy5zcHJlYWRDb2xsZWN0aW9uczogdHJ1ZSwKICBFeHBlcmltZW50YWxGbGFnLnRyaXBsZVNoaWZ0OiBmYWxzZSwKfTsKCmNvbnN0IE1hcDxFeHBlcmltZW50YWxGbGFnLCBib29sPiBleHBpcmVkRXhwZXJpbWVudGFsRmxhZ3MgPSB7CiAgRXhwZXJpbWVudGFsRmxhZy5jb25zdGFudFVwZGF0ZTIwMTg6IHRydWUsCiAgRXhwZXJpbWVudGFsRmxhZy5jb250cm9sRmxvd0NvbGxlY3Rpb25zOiBmYWxzZSwKICBFeHBlcmltZW50YWxGbGFnLmV4dGVuc2lvbk1ldGhvZHM6IGZhbHNlLAogIEV4cGVyaW1lbnRhbEZsYWcubm9uTnVsbGFibGU6IGZhbHNlLAogIEV4cGVyaW1lbnRhbEZsYWcuc2V0TGl0ZXJhbHM6IHRydWUsCiAgRXhwZXJpbWVudGFsRmxhZy5zcHJlYWRDb2xsZWN0aW9uczogZmFsc2UsCiAgRXhwZXJpbWVudGFsRmxhZy50cmlwbGVTaGlmdDogZmFsc2UsCn07CjwATk48AS4DPUUBGBYaFA8PFQ8CATYSITIlNh4wGSsZKx8xGSsEDwIBPy0xLCcmLCcDAT8tMiwnJi0nAwE7cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvZXhwZXJpbWVudGFsX2ZsYWdzLmRhcnQ9c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydIpjLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZnJvbnRfZW5kLmZpbGVfc3lzdGVtOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKCi8vLyBBYnN0cmFjdCBpbnRlcmZhY2UgdG8gZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4KLy8vCi8vLyBBbGwgZnJvbnQgZW5kIGludGVyYWN0aW9uIHdpdGggdGhlIGZpbGUgc3lzdGVtIGdvZXMgdGhyb3VnaCB0aGlzIGludGVyZmFjZTsKLy8vIHRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIGNsaWVudHMgdG8gdXNlIHRoZSBmcm9udCBlbmQgaW4gYSB3YXkgdGhhdAovLy8gZG9lc24ndCByZXF1aXJlIGZpbGUgc3lzdGVtIGFjY2VzcyAoZS5nLiB0byBydW4gdW5pdCB0ZXN0cywgb3IgdG8gcnVuCi8vLyBpbnNpZGUgYSBicm93c2VyKS4KLy8vCi8vLyBOb3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgb3IgZXh0ZW5kZWQgYnkgY2xpZW50cy4KYWJzdHJhY3QgY2xhc3MgRmlsZVN5c3RlbSB7CiAgLy8vIFJldHVybnMgYSBbRmlsZVN5c3RlbUVudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gW3VyaV0uCiAgLy8vCiAgLy8vIFVzZXMgb2YgYC4uYCBhbmQgYC5gIGluIHRoZSBVUkkgYXJlIG5vcm1hbGl6ZWQgYmVmb3JlIHJldHVybmluZy4KICAvLy8KICAvLy8gSWYgdGhlIFVSSSBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGZpbGUgc3lzdGVtLCBhbiBbRXJyb3JdIHdpbGwgYmUKICAvLy8gdGhyb3duLgogIC8vLwogIC8vLyBEb2VzIG5vdCBjaGVjayB3aGV0aGVyIGEgZmlsZSBvciBmb2xkZXIgZXhpc3RzIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi4KICBGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKTsKfQoKLy8vIEFic3RyYWN0IHJlcHJlc2VudGF0aW9uIG9mIGEgZmlsZSBzeXN0ZW0gZW50aXR5IHRoYXQgbWF5IG9yIG1heSBub3QgZXhpc3QuCi8vLwovLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgaGF2ZSBzdWl0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2YgZXF1YWxpdHkgdGVzdHMgYW5kCi8vLyBoYXNoQ29kZS4KLy8vCi8vLyBOb3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgb3IgZXh0ZW5kZWQgYnkgY2xpZW50cy4KYWJzdHJhY3QgY2xhc3MgRmlsZVN5c3RlbUVudGl0eSB7CiAgLy8vIFRoZSBhYnNvbHV0ZSBub3JtYWxpemVkIFVSSSByZXByZXNlbnRlZCBieSB0aGlzIGZpbGUgc3lzdGVtIGVudGl0eS4KICAvLy8KICAvLy8gTm90ZTogdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIFVSSSB0aGF0IHdhcyBwYXNzZWQgdG8KICAvLy8gW0ZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpXSwgc2luY2UgdGhlIFVSSSBtaWdodCBoYXZlIGJlZW4gbm9ybWFsaXplZC4KICBVcmkgZ2V0IHVyaTsKCiAgLy8vIFdoZXRoZXIgdGhpcyBmaWxlIHN5c3RlbSBlbnRpdHkgZXhpc3RzLgogIEZ1dHVyZTxib29sPiBleGlzdHMoKTsKCiAgLy8vIEF0dGVtcHRzIHRvIGFjY2VzcyB0aGlzIGZpbGUgc3lzdGVtIGVudGl0eSBhcyBhIGZpbGUgYW5kIHJlYWQgaXRzIGNvbnRlbnRzCiAgLy8vIGFzIHJhdyBieXRlcy4KICAvLy8KICAvLy8gSWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgZmlsZSAoZS5nLiBiZWNhdXNlIG5vIHN1Y2gKICAvLy8gZmlsZSBleGlzdHMsIG9yIHRoZSBlbnRpdHkgaXMgYSBkaXJlY3RvcnkpLCB0aGUgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoCiAgLy8vIFtGaWxlU3lzdGVtRXhjZXB0aW9uXS4KICBGdXR1cmU8TGlzdDxpbnQ+PiByZWFkQXNCeXRlcygpOwoKICAvLy8gQXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5IGFzIGEgZmlsZSBhbmQgcmVhZCBpdHMgY29udGVudHMKICAvLy8gYXMgYSBzdHJpbmcuCiAgLy8vCiAgLy8vIFRoZSBmaWxlIGlzIGFzc3VtZWQgdG8gYmUgVVRGLTggZW5jb2RlZC4KICAvLy8KICAvLy8gSWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgZmlsZSAoZS5nLiBiZWNhdXNlIG5vIHN1Y2gKICAvLy8gZmlsZSBleGlzdHMsIHRoZSBlbnRpdHkgaXMgYSBkaXJlY3RvcnksIG9yIHRoZSBmaWxlIGlzIG5vdCB2YWxpZCBVVEYtOCksCiAgLy8vIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggW0ZpbGVTeXN0ZW1FeGNlcHRpb25dLgogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZygpOwp9CgovKioKICogQmFzZSBjbGFzcyBmb3IgYWxsIGZpbGUgc3lzdGVtIGV4Y2VwdGlvbnMuCiAqLwpjbGFzcyBGaWxlU3lzdGVtRXhjZXB0aW9uIGltcGxlbWVudHMgRXhjZXB0aW9uIHsKICBmaW5hbCBVcmkgdXJpOwogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICBGaWxlU3lzdGVtRXhjZXB0aW9uKHRoaXMudXJpLCB0aGlzLm1lc3NhZ2UpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRmlsZVN5c3RlbUV4Y2VwdGlvbih1cmk9JHVyaTsgbWVzc2FnZT0kbWVzc2FnZSknOwp9Ck0ATk48AR8BFQEyBFBKShcEOxxFBkcGUQ4GTCoCAU8EUA4EOyJKBktLDwEuGQFRFAZRTx0jAVETBi8GUU86IQIBBC4EMREYAS8BDEoCATRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9maWxlX3N5c3RlbS5kYXJ0QnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfcHJvdG90eXBlL2tlcm5lbF9nZW5lcmF0b3IuZGFydJMOLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBEZWZpbmVzIHRoZSBmcm9udC1lbmQgQVBJIGZvciBjb252ZXJ0aW5nIHNvdXJjZSBjb2RlIHRvIERhcnQgS2VybmVsIG9iamVjdHMuCmxpYnJhcnkgZnJvbnRfZW5kLmtlcm5lbF9nZW5lcmF0b3I7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBDb21wb25lbnQ7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICcuLi9iYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnQnIHNob3cgUHJvY2Vzc2VkT3B0aW9uczsKCmltcG9ydCAnLi4vZmFzdGEvY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnLi4vZmFzdGEvZmFzdGFfY29kZXMuZGFydCcgc2hvdyBtZXNzYWdlTWlzc2luZ01haW4sIG5vTGVuZ3RoOwoKaW1wb3J0ICcuLi9mYXN0YS9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICcuLi9rZXJuZWxfZ2VuZXJhdG9yX2ltcGwuZGFydCcKICAgIHNob3cgZ2VuZXJhdGVLZXJuZWwsIGdlbmVyYXRlS2VybmVsSW50ZXJuYWw7CgppbXBvcnQgJ2NvbXBpbGVyX29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgovLy8gR2VuZXJhdGVzIGEga2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9ncmFtIHdob3NlIG1haW4gbGlicmFyeSBpcyBpbgovLy8gdGhlIGdpdmVuIFtzb3VyY2VdLgovLy8KLy8vIEludGVuZGVkIGZvciB3aG9sZS1wcm9ncmFtIChub24tbW9kdWxhcikgY29tcGlsYXRpb24uCi8vLwovLy8gR2l2ZW4gdGhlIFVyaSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHByb2dyYW0ncyBgbWFpbmAgbWV0aG9kLCB0aGlzIGZ1bmN0aW9uCi8vLyBmb2xsb3dzIGBpbXBvcnRgLCBgZXhwb3J0YCwgYW5kIGBwYXJ0YCBkZWNsYXJhdGlvbnMgdG8gZGlzY292ZXIgdGhlIHdob2xlCi8vLyBwcm9ncmFtLCBhbmQgY29udmVydHMgdGhlIHJlc3VsdCB0byBEYXJ0IEtlcm5lbCBmb3JtYXQuCi8vLwovLy8gSWYgYGNvbXBpbGVTZGtgIGluIFtvcHRpb25zXSBpcyB0cnVlLCB0aGUgZ2VuZXJhdGVkIFtDb21waWxlclJlc3VsdF0gd2lsbAovLy8gaW5jbHVkZSBjb2RlIGZvciB0aGUgU0RLLgovLy8KLy8vIElmIHN1bW1hcmllcyBhcmUgcHJvdmlkZWQgaW4gW29wdGlvbnNdLCB0aGUgY29tcGlsZXIgd2lsbCB1c2UgdGhlbSBpbnN0ZWFkCi8vLyBvZiBjb21waWxpbmcgdGhlIGxpYnJhcmllcyBjb250YWluZWQgaW4gdGhvc2Ugc3VtbWFyaWVzLiBUaGlzIGlzIHVzZWZ1bCwgZm9yCi8vLyBleGFtcGxlLCB3aGVuIGNvbXBpbGluZyBmb3IgcGxhdGZvcm1zIHRoYXQgYWxyZWFkeSBlbWJlZCB0aG9zZSBzb3VyY2VzIChsaWtlCi8vLyB0aGUgc2RrIGluIHRoZSBzdGFuZGFsb25lIFZNKS4KLy8vCi8vLyBUaGUgaW5wdXQgW3NvdXJjZV0gaXMgZXhwZWN0ZWQgdG8gYmUgYSBzY3JpcHQgd2l0aCBhIG1haW4gbWV0aG9kLCBvdGhlcndpc2UKLy8vIGFuIGVycm9yIGlzIHJlcG9ydGVkLgovLyBUT0RPKHNpZ211bmQpOiByZW5hbWUgdG8ga2VybmVsRm9yU2NyaXB0PwpGdXR1cmU8Q29tcGlsZXJSZXN1bHQ+IGtlcm5lbEZvclByb2dyYW0oCiAgICBVcmkgc291cmNlLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucykgYXN5bmMgewogIHJldHVybiAoYXdhaXQga2VybmVsRm9yUHJvZ3JhbUludGVybmFsKHNvdXJjZSwgb3B0aW9ucykpOwp9CgpGdXR1cmU8Q29tcGlsZXJSZXN1bHQ+IGtlcm5lbEZvclByb2dyYW1JbnRlcm5hbCgKICAgIFVyaSBzb3VyY2UsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAge2Jvb2wgcmV0YWluRGF0YUZvclRlc3Rpbmc6IGZhbHNlfSkgYXN5bmMgewogIFByb2Nlc3NlZE9wdGlvbnMgcE9wdGlvbnMgPQogICAgICBuZXcgUHJvY2Vzc2VkT3B0aW9ucyhvcHRpb25zOiBvcHRpb25zLCBpbnB1dHM6IFtzb3VyY2VdKTsKICByZXR1cm4gYXdhaXQgQ29tcGlsZXJDb250ZXh0LnJ1bldpdGhPcHRpb25zKHBPcHRpb25zLCAoY29udGV4dCkgYXN5bmMgewogICAgQ29tcGlsZXJSZXN1bHQgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVLZXJuZWxJbnRlcm5hbCgKICAgICAgICBpbmNsdWRlSGllcmFyY2h5QW5kQ29yZVR5cGVzOiB0cnVlLAogICAgICAgIHJldGFpbkRhdGFGb3JUZXN0aW5nOiByZXRhaW5EYXRhRm9yVGVzdGluZyk7CiAgICBDb21wb25lbnQgY29tcG9uZW50ID0gcmVzdWx0Py5jb21wb25lbnQ7CiAgICBpZiAoY29tcG9uZW50ID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIGlmIChjb21wb25lbnQubWFpbk1ldGhvZCA9PSBudWxsKSB7CiAgICAgIGNvbnRleHQub3B0aW9ucy5yZXBvcnQoCiAgICAgICAgICBtZXNzYWdlTWlzc2luZ01haW4ud2l0aExvY2F0aW9uKHNvdXJjZSwgLTEsIG5vTGVuZ3RoKSwKICAgICAgICAgIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0pOwp9CgovLy8gR2VuZXJhdGVzIGEga2VybmVsIHJlcHJlc2VudGF0aW9uIGZvciBhIG1vZHVsZSBjb250YWluaW5nIFtzb3VyY2VzXS4KLy8vCi8vLyBBIG1vZHVsZSBpcyBhIGNvbGxlY3Rpb24gb2YgbGlicmFyaWVzIHRoYXQgYXJlIGNvbXBpbGVkIHRvZ2V0aGVyLiBMaWJyYXJpZXMKLy8vIGluIHRoZSBtb2R1bGUgbWF5IGRlcGVuZCBvbiBlYWNoIG90aGVyIGFuZCBtYXkgaGF2ZSBkZXBlbmRlbmNpZXMgdG8KLy8vIGxpYnJhcmllcyBpbiBvdGhlciBtb2R1bGVzLiBVbmxpa2UgbGlicmFyeSBkZXBlbmRlbmNpZXMsIG1vZHVsZSBkZXBlbmRlbmNpZXMKLy8vIG11c3QgYmUgYWN5Y2xpYy4KLy8vCi8vLyBUaGlzIEFQSSBpcyBpbnRlbmRlZCBmb3IgbW9kdWxhciBjb21waWxhdGlvbi4gRGVwZW5kZW5jaWVzIHRvIG90aGVyIG1vZHVsZXMKLy8vIGFyZSBzcGVjaWZpZWQgdXNpbmcgW0NvbXBpbGVyT3B0aW9ucy5pbnB1dFN1bW1hcmllc10uIEFueSBkZXBlbmRlbmN5Ci8vLyBvZiBbc291cmNlc10gdGhhdCBpcyBub3QgbGlzdGVkIGluIFtDb21waWxlck9wdGlvbnMuaW5wdXRTdW1tYXJpZXNdIGFuZAovLy8gW0NvbXBpbGVyT3B0aW9ucy5zZGtTdW1tYXJ5XSBpcyB0cmVhdGVkIGFzIGFuIGFkZGl0aW9uYWwgc291cmNlIGZpbGUgZm9yIHRoZQovLy8gbW9kdWxlLgovLy8KLy8vIEFueSBgcGFydGAgZGVjbGFyYXRpb25zIGZvdW5kIGluIFtzb3VyY2VzXSBtdXN0IHJlZmVyIHRvIHBhcnQgZmlsZXMgd2hpY2gKLy8vIGFyZSBhbHNvIGxpc3RlZCBpbiB0aGUgbW9kdWxlIHNvdXJjZXMsIG90aGVyd2lzZSBhbiBlcnJvciByZXN1bHRzLiAgKEl0Ci8vLyBpcyBub3QgcGVybWl0dGVkIHRvIHJlZmVyIHRvIGEgcGFydCBmaWxlIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlKS4KLy8vCi8vLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgW0NvbXBpbGVyUmVzdWx0XSBvYmplY3Qgd2l0aCBubyBtYWluIG1ldGhvZCBzZXQgaW4KLy8vIHRoZSBbQ29tcG9uZW50XSBvZiBpdHMgYGNvbXBvbmVudGAgcHJvcGVydHkuIFRoZSBbQ29tcG9uZW50XSBpbmNsdWRlcwovLy8gZXh0ZXJuYWwgbGlicmFyaWVzIGZvciB0aG9zZSBsaWJyYXJpZXMgbG9hZGVkIHRocm91Z2ggc3VtbWFyaWVzLgpGdXR1cmU8Q29tcGlsZXJSZXN1bHQ+IGtlcm5lbEZvck1vZHVsZSgKICAgIExpc3Q8VXJpPiBzb3VyY2VzLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucykgYXN5bmMgewogIHJldHVybiAoYXdhaXQgZ2VuZXJhdGVLZXJuZWwoCiAgICAgIG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMsIGlucHV0czogc291cmNlcyksCiAgICAgIGluY2x1ZGVIaWVyYXJjaHlBbmRDb3JlVHlwZXM6IHRydWUpKTsKfQoKLy8vIFJlc3VsdCBvYmplY3QgZm9yIFtrZXJuZWxGb3JQcm9ncmFtXSBhbmQgW2tlcm5lbEZvck1vZHVsZV0uCmFic3RyYWN0IGNsYXNzIENvbXBpbGVyUmVzdWx0IHsKICAvLy8gVGhlIGdlbmVyYXRlZCBzdW1tYXJ5IGJ5dGVzLCBpZiBpdCB3YXMgcmVxdWVzdGVkLgogIExpc3Q8aW50PiBnZXQgc3VtbWFyeTsKCiAgLy8vIFRoZSBnZW5lcmF0ZWQgY29tcG9uZW50LCBpZiBpdCB3YXMgcmVxdWVzdGVkLgogIENvbXBvbmVudCBnZXQgY29tcG9uZW50OwoKICAvLy8gRGVwZW5kZW5jaWVzIHRyYXZlcnNlZCBieSB0aGUgY29tcGlsZXIuIFVzZWQgb25seSBmb3IgZ2VuZXJhdGluZwogIC8vLyBkZXBlbmRlbmN5IC5HTiBmaWxlcyBpbiB0aGUgZGFydC1zZGsgYnVpbGQgc3lzdGVtLgogIC8vLyBOb3RlIHRoaXMgbWlnaHQgYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byBjb21wdXRlIGRlcGVuZGVuY2llcyB3aXRob3V0CiAgLy8vIHVzaW5nIHRoZSBjb21waWxlciBpdHNlbGYuCiAgTGlzdDxVcmk+IGdldCBkZXBzOwoKICAvLy8gVGhlIFtDbGFzc0hpZXJhcmNoeV0gZm9yIHRoZSBjb21waWxlZCBbY29tcG9uZW50XSwgaWYgaXQgd2FzIHJlcXVlc3RlZC4KICBDbGFzc0hpZXJhcmNoeSBnZXQgY2xhc3NIaWVyYXJjaHk7CgogIC8vLyBUaGUgW0NvcmVUeXBlc10gb2JqZWN0IGZvciB0aGUgY29tcGlsZWQgW2NvbXBvbmVudF0sIGlmIGl0IHdhcyByZXF1ZXN0ZWQuCiAgQ29yZVR5cGVzIGdldCBjb3JlVHlwZXM7Cn0KfABOTjwBUSQBIQExAUIBOAE/AT4BRgEvAScxATUBThgEOgRQTjwETh4ET1FRIwRQGi0pMTwCATEpMB5ASjosNS0oASgeQRsTBhMGAgFJBFBIURUEUElMUQwETkxKBE1KRSg4ID8sAgFAIDgZATQbAUc5UCEWAU4lAVAbAgE5cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUva2VybmVsX2dlbmVyYXRvci5kYXJ0OnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9iYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnTAAGEpLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDppbycgc2hvdyBleGl0Q29kZTsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YScgc2hvdyBVaW50OExpc3Q7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydCcgc2hvdyBCaW5hcnlCdWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcgc2hvdyBDYW5vbmljYWxOYW1lLCBDb21wb25lbnQsIExvY2F0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0JwogICAgc2hvdyBOb25lVGFyZ2V0LCBUYXJnZXQsIFRhcmdldEZsYWdzOwoKaW1wb3J0ICdwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3BhY2thZ2VzLmRhcnQnIHNob3cgUGFja2FnZXM7CgppbXBvcnQgJ3BhY2thZ2U6cGFja2FnZV9jb25maWcvcGFja2FnZXNfZmlsZS5kYXJ0JyBhcyBwYWNrYWdlX2NvbmZpZzsKCmltcG9ydCAncGFja2FnZTpwYWNrYWdlX2NvbmZpZy9zcmMvcGFja2FnZXNfaW1wbC5kYXJ0JyBzaG93IE1hcFBhY2thZ2VzOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2NvbXBpbGVyX29wdGlvbnMuZGFydCcKICAgIHNob3cgQ29tcGlsZXJPcHRpb25zLCBEaWFnbm9zdGljTWVzc2FnZTsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9leHBlcmltZW50YWxfZmxhZ3MuZGFydCcKICAgIHNob3cgZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzLCBFeHBlcmltZW50YWxGbGFnLCBleHBpcmVkRXhwZXJpbWVudGFsRmxhZ3M7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcKICAgIHNob3cgRmlsZVN5c3RlbSwgRmlsZVN5c3RlbUVudGl0eSwgRmlsZVN5c3RlbUV4Y2VwdGlvbjsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS90ZXJtaW5hbF9jb2xvcl9zdXBwb3J0LmRhcnQnCiAgICBzaG93IHByaW50RGlhZ25vc3RpY01lc3NhZ2U7CgppbXBvcnQgJy4uL2Zhc3RhL2NvbW1hbmRfbGluZV9yZXBvcnRpbmcuZGFydCcgYXMgY29tbWFuZF9saW5lX3JlcG9ydGluZzsKCmltcG9ydCAnLi4vZmFzdGEvY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnLi4vZmFzdGEvZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBGb3JtYXR0ZWRNZXNzYWdlLAogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHMsCiAgICAgICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbVBhY2thZ2VVcmksCiAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5LAogICAgICAgIG1lc3NhZ2VNaXNzaW5nSW5wdXQsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbiwKICAgICAgICB0ZW1wbGF0ZUNhbnRSZWFkRmlsZSwKICAgICAgICB0ZW1wbGF0ZUlucHV0RmlsZU5vdEZvdW5kLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQsCiAgICAgICAgdGVtcGxhdGVQYWNrYWdlc0ZpbGVGb3JtYXQsCiAgICAgICAgdGVtcGxhdGVTZGtSb290Tm90Rm91bmQsCiAgICAgICAgdGVtcGxhdGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQsCiAgICAgICAgdGVtcGxhdGVTZGtTdW1tYXJ5Tm90Rm91bmQ7CgppbXBvcnQgJy4uL2Zhc3RhL21lc3NhZ2VzLmRhcnQnIHNob3cgZ2V0TG9jYXRpb247CgppbXBvcnQgJy4uL2Zhc3RhL3Byb2JsZW1zLmRhcnQnIHNob3cgRGVidWdBYm9ydCwgdW5pbXBsZW1lbnRlZDsKCmltcG9ydCAnLi4vZmFzdGEvc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmltcG9ydCAnLi4vZmFzdGEvdGlja2VyLmRhcnQnIHNob3cgVGlja2VyOwoKaW1wb3J0ICcuLi9mYXN0YS91cmlfdHJhbnNsYXRvci5kYXJ0JyBzaG93IFVyaVRyYW5zbGF0b3I7CgppbXBvcnQgJ2xpYnJhcmllc19zcGVjaWZpY2F0aW9uLmRhcnQnCiAgICBzaG93CiAgICAgICAgTGlicmFyaWVzU3BlY2lmaWNhdGlvbiwKICAgICAgICBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uRXhjZXB0aW9uLAogICAgICAgIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb247CgovLy8gQWxsIG9wdGlvbnMgbmVlZGVkIGZvciB0aGUgZnJvbnQgZW5kIGltcGxlbWVudGF0aW9uLgovLy8KLy8vIFRoaXMgaW5jbHVkZXM6IGFsbCBvZiBbQ29tcGlsZXJPcHRpb25zXSBpbiBhIGZvcm0gdXNlZnVsIHRvIHRoZQovLy8gaW1wbGVtZW50YXRpb24sIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zIHRoYXQgd2VyZSBub3QgcHJvdmlkZWQsCi8vLyBhbmQgaW5mb3JtYXRpb24gZGVyaXZlZCBmcm9tIGhvdyB0aGUgY29tcGlsZXIgd2FzIGludm9rZWQgKGxpa2UgdGhlCi8vLyBlbnRyeS1wb2ludHMgZ2l2ZW4gdG8gdGhlIGNvbXBpbGVyIGFuZCB3aGV0aGVyIGEgbW9kdWxhciBvciB3aG9sZS1wcm9ncmFtCi8vLyBBUEkgd2FzIHVzZWQpLgovLy8KLy8vIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGUgZnJvbnQgZW5kIHNob3VsZCBpbW1lZGlhdGVseSB3cmFwIGFueSBpbmNvbWluZwovLy8gW0NvbXBpbGVyT3B0aW9uc10gb2JqZWN0IGluIHRoaXMgY2xhc3MgYmVmb3JlIGRvaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZywgYW5kCi8vLyBzaG91bGQgdGhlcmVhZnRlciBhY2Nlc3MgYWxsIG9wdGlvbnMgdmlhIHRoZSB3cmFwcGVyLiAgVGhpcyBlbnN1cmVzIHRoYXQKLy8vIG9wdGlvbnMgYXJlIGludGVycHJldGVkIGluIGEgY29uc2lzdGVudCB3YXkgYW5kIHRoYXQgZGF0YSBkZXJpdmVkIGZyb20KLy8vIG9wdGlvbnMgaXMgbm90IHVubmVjZXNzYXJpbHkgcmVjb21wdXRlZC4KY2xhc3MgUHJvY2Vzc2VkT3B0aW9ucyB7CiAgLy8vIFRoZSByYXcgW0NvbXBpbGVyT3B0aW9uc10gd2hpY2ggdGhpcyBjbGFzcyB3cmFwcy4KICBmaW5hbCBDb21waWxlck9wdGlvbnMgX3JhdzsKCiAgLy8vIFRoZSBwYWNrYWdlIG1hcCBkZXJpdmVkIGZyb20gdGhlIG9wdGlvbnMsIG9yIGBudWxsYCBpZiB0aGUgcGFja2FnZSBtYXAgaGFzCiAgLy8vIG5vdCBiZWVuIGNvbXB1dGVkIHlldC4KICBQYWNrYWdlcyBfcGFja2FnZXM7CgogIC8vLyBUaGUgdXJpIGZvciAucGFja2FnZXMgZGVyaXZlZCBmcm9tIHRoZSBvcHRpb25zLCBvciBgbnVsbGAgaWYgdGhlIHBhY2thZ2UKICAvLy8gbWFwIGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQgb3IgdGhlcmUgaXMgbm8gLnBhY2thZ2VzIGluIGVmZmVjdC4KICBVcmkgX3BhY2thZ2VzVXJpOwogIFVyaSBnZXQgcGFja2FnZXNVcmkgPT4gX3BhY2thZ2VzVXJpOwoKICAvLy8gVGhlIG9iamVjdCB0aGF0IGtub3dzIGhvdyB0byByZXNvbHZlICJwYWNrYWdlOiIgYW5kICJkYXJ0OiIgVVJJcywKICAvLy8gb3IgYG51bGxgIGlmIGl0IGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQuCiAgVXJpVHJhbnNsYXRvciBfdXJpVHJhbnNsYXRvcjsKCiAgLy8vIFRoZSBTREsgc3VtbWFyeSwgb3IgYG51bGxgIGlmIGl0IGhhcyBub3QgYmVlbiByZWFkIHlldC4KICAvLy8KICAvLy8gQSBzdW1tYXJ5LCBhbHNvIHJlZmVycmVkIHRvIGFzICJvdXRsaW5lIiBpbnRlcm5hbGx5LCBpcyBhIFtDb21wb25lbnRdCiAgLy8vIHdoZXJlIGFsbCBtZXRob2QgYm9kaWVzIGFyZSBsZWZ0IG91dC4gSW4gZXNzZW5jZSwgaXQgY29udGFpbnMganVzdCBBUEkKICAvLy8gc2lnbmF0dXJlcyBhbmQgY29uc3RhbnRzLiBUaGUgc3VtbWFyeSBzaG91bGQgaW5jbHVkZSBpbmZlcnJlZCB0b3AtbGV2ZWwKICAvLy8gdHlwZXMgdW5sZXNzIGxlZ2FjeSBtb2RlIGlzIGVuYWJsZWQuCiAgQ29tcG9uZW50IF9zZGtTdW1tYXJ5Q29tcG9uZW50OwoKICAvLy8gVGhlIHN1bW1hcnkgZm9yIGVhY2ggdXJpIGluIGBvcHRpb25zLmlucHV0U3VtbWFyaWVzYC4KICAvLy8KICAvLy8gQSBzdW1tYXJ5LCBhbHNvIHJlZmVycmVkIHRvIGFzICJvdXRsaW5lIiBpbnRlcm5hbGx5LCBpcyBhIFtDb21wb25lbnRdCiAgLy8vIHdoZXJlIGFsbCBtZXRob2QgYm9kaWVzIGFyZSBsZWZ0IG91dC4gSW4gZXNzZW5jZSwgaXQgY29udGFpbnMganVzdCBBUEkKICAvLy8gc2lnbmF0dXJlcyBhbmQgY29uc3RhbnRzLiBUaGUgc3VtbWFyaWVzIHNob3VsZCBpbmNsdWRlIGluZmVycmVkIHRvcC1sZXZlbAogIC8vLyB0eXBlcyB1bmxlc3MgbGVnYWN5IG1vZGUgaXMgZW5hYmxlZC4KICBMaXN0PENvbXBvbmVudD4gX2lucHV0U3VtbWFyaWVzQ29tcG9uZW50czsKCiAgLy8vIE90aGVyIGNvbXBvbmVudHMgdGhhdCBhcmUgbWVhbnQgdG8gYmUgbGlua2VkIGFuZCBjb21waWxlZCB3aXRoIHRoZSBpbnB1dAogIC8vLyBzb3VyY2VzLgogIExpc3Q8Q29tcG9uZW50PiBfbGlua2VkRGVwZW5kZW5jaWVzOwoKICAvLy8gVGhlIGxvY2F0aW9uIG9mIHRoZSBTREssIG9yIGBudWxsYCBpZiB0aGUgbG9jYXRpb24gaGFzbid0IGJlZW4gZGV0ZXJtaW5lZAogIC8vLyB5ZXQuCiAgVXJpIF9zZGtSb290OwogIFVyaSBnZXQgc2RrUm9vdCB7CiAgICBfZW5zdXJlU2RrRGVmYXVsdHMoKTsKICAgIHJldHVybiBfc2RrUm9vdDsKICB9CgogIFVyaSBfc2RrU3VtbWFyeTsKICBVcmkgZ2V0IHNka1N1bW1hcnkgewogICAgX2Vuc3VyZVNka0RlZmF1bHRzKCk7CiAgICByZXR1cm4gX3Nka1N1bW1hcnk7CiAgfQoKICBMaXN0PGludD4gX3Nka1N1bW1hcnlCeXRlczsKCiAgLy8vIEdldCB0aGUgYnl0ZXMgb2YgdGhlIFNESyBvdXRsaW5lLCBpZiBhbnkuCiAgRnV0dXJlPExpc3Q8aW50Pj4gbG9hZFNka1N1bW1hcnlCeXRlcygpIGFzeW5jIHsKICAgIGlmIChfc2RrU3VtbWFyeUJ5dGVzID09IG51bGwpIHsKICAgICAgaWYgKHNka1N1bW1hcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIEZpbGVTeXN0ZW1FbnRpdHkgZW50cnkgPSBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShzZGtTdW1tYXJ5KTsKICAgICAgX3Nka1N1bW1hcnlCeXRlcyA9IGF3YWl0IF9yZWFkQXNCeXRlcyhlbnRyeSk7CiAgICB9CiAgICByZXR1cm4gX3Nka1N1bW1hcnlCeXRlczsKICB9CgogIFVyaSBfbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTsKICBVcmkgZ2V0IGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgewogICAgX2Vuc3VyZVNka0RlZmF1bHRzKCk7CiAgICByZXR1cm4gX2xpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk7CiAgfQoKICBUaWNrZXIgdGlja2VyOwoKICBVcmkgZ2V0IHBhY2thZ2VzVXJpUmF3ID0+IF9yYXcucGFja2FnZXNGaWxlVXJpOwoKICBib29sIGdldCB2ZXJib3NlID0+IF9yYXcudmVyYm9zZTsKCiAgYm9vbCBnZXQgdmVyaWZ5ID0+IF9yYXcudmVyaWZ5OwoKICBib29sIGdldCBkZWJ1Z0R1bXAgPT4gX3Jhdy5kZWJ1Z0R1bXA7CgogIGJvb2wgZ2V0IG9taXRQbGF0Zm9ybSA9PiBfcmF3Lm9taXRQbGF0Zm9ybTsKCiAgYm9vbCBnZXQgc2V0RXhpdENvZGVPblByb2JsZW0gPT4gX3Jhdy5zZXRFeGl0Q29kZU9uUHJvYmxlbTsKCiAgYm9vbCBnZXQgZW1iZWRTb3VyY2VUZXh0ID0+IF9yYXcuZW1iZWRTb3VyY2VUZXh0OwoKICBib29sIGdldCB0aHJvd09uRXJyb3JzRm9yRGVidWdnaW5nID0+IF9yYXcudGhyb3dPbkVycm9yc0ZvckRlYnVnZ2luZzsKCiAgYm9vbCBnZXQgdGhyb3dPbldhcm5pbmdzRm9yRGVidWdnaW5nID0+IF9yYXcudGhyb3dPbldhcm5pbmdzRm9yRGVidWdnaW5nOwoKICAvLy8gVGhlIGVudHJ5LXBvaW50cyBwcm92aWRlZCB0byB0aGUgY29tcGlsZXIuCiAgZmluYWwgTGlzdDxVcmk+IGlucHV0czsKCiAgLy8vIFRoZSBVcmkgd2hlcmUgb3V0cHV0IGlzIGdlbmVyYXRlZCwgbWF5IGJlIG51bGwuCiAgZmluYWwgVXJpIG91dHB1dDsKCiAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudERlZmluZXM7CgogIGJvb2wgZ2V0IGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50ID0+IF9yYXcuZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQ7CgogIC8vLyBJbml0aWFsaXplcyBhIFtQcm9jZXNzZWRPcHRpb25zXSBvYmplY3Qgd3JhcHBpbmcgdGhlIGdpdmVuIFtyYXdPcHRpb25zXS4KICBQcm9jZXNzZWRPcHRpb25zKHtDb21waWxlck9wdGlvbnMgb3B0aW9ucywgTGlzdDxVcmk+IGlucHV0cywgdGhpcy5vdXRwdXR9KQogICAgICA6IHRoaXMuX3JhdyA9IG9wdGlvbnMgPz8gbmV3IENvbXBpbGVyT3B0aW9ucygpLAogICAgICAgIHRoaXMuaW5wdXRzID0gaW5wdXRzID8/IDxVcmk+W10sCiAgICAgICAgLy8gVE9ETyhhc2tlc2MpOiBDb3B5IHRoZSBtYXAgd2hlbiBrZXJuZWxfc2VydmljZSBzdXBwb3J0cyB0aGF0LgogICAgICAgIHRoaXMuZW52aXJvbm1lbnREZWZpbmVzID0gb3B0aW9ucz8uZW52aXJvbm1lbnREZWZpbmVzLAogICAgICAgIC8vIFRPRE8oc2lnbXVuZCwgYWhlKTogY3JlYXRlIHRpY2tlciBldmVuIGVhcmxpZXIgb3IgcGFzcyBpbiBhIHN0b3B3YXRjaAogICAgICAgIC8vIGNvbGxlY3RpbmcgdGltZSBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlIFZNLgogICAgICAgIHRoaXMudGlja2VyID0gbmV3IFRpY2tlcihpc1ZlcmJvc2U6IG9wdGlvbnM/LnZlcmJvc2UgPz8gZmFsc2UpOwoKICBGb3JtYXR0ZWRNZXNzYWdlIGZvcm1hdCgKICAgICAgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgU2V2ZXJpdHkgc2V2ZXJpdHksIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpIHsKICAgIGludCBvZmZzZXQgPSBtZXNzYWdlLmNoYXJPZmZzZXQ7CiAgICBVcmkgdXJpID0gbWVzc2FnZS51cmk7CiAgICBMb2NhdGlvbiBsb2NhdGlvbiA9IG9mZnNldCA9PSAtMSA/IG51bGwgOiBnZXRMb2NhdGlvbih1cmksIG9mZnNldCk7CiAgICBTdHJpbmcgZm9ybWF0dGVkID0KICAgICAgICBjb21tYW5kX2xpbmVfcmVwb3J0aW5nLmZvcm1hdChtZXNzYWdlLCBzZXZlcml0eSwgbG9jYXRpb246IGxvY2F0aW9uKTsKICAgIExpc3Q8Rm9ybWF0dGVkTWVzc2FnZT4gZm9ybWF0dGVkQ29udGV4dDsKICAgIGlmIChjb250ZXh0ICE9IG51bGwgJiYgY29udGV4dC5pc05vdEVtcHR5KSB7CiAgICAgIGZvcm1hdHRlZENvbnRleHQgPSBuZXcgTGlzdDxGb3JtYXR0ZWRNZXNzYWdlPihjb250ZXh0Lmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgIGZvcm1hdHRlZENvbnRleHRbaV0gPSBmb3JtYXQoY29udGV4dFtpXSwgU2V2ZXJpdHkuY29udGV4dCwgbnVsbCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBtZXNzYWdlLndpdGhGb3JtYXR0aW5nKGZvcm1hdHRlZCwgbG9jYXRpb24/LmxpbmUgPz8gLTEsCiAgICAgICAgbG9jYXRpb24/LmNvbHVtbiA/PyAtMSwgc2V2ZXJpdHksIGZvcm1hdHRlZENvbnRleHQpOwogIH0KCiAgdm9pZCByZXBvcnQoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgaWYgKGNvbW1hbmRfbGluZV9yZXBvcnRpbmcuaXNIaWRkZW4oc2V2ZXJpdHkpKSByZXR1cm47CiAgICBpZiAoY29tbWFuZF9saW5lX3JlcG9ydGluZy5pc0NvbXBpbGVUaW1lRXJyb3Ioc2V2ZXJpdHkpKSB7CiAgICAgIENvbXBpbGVyQ29udGV4dC5jdXJyZW50LmxvZ0Vycm9yKG1lc3NhZ2UsIHNldmVyaXR5KTsKICAgIH0KICAgIGlmIChDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zLnNldEV4aXRDb2RlT25Qcm9ibGVtKSB7CiAgICAgIGV4aXRDb2RlID0gMTsKICAgIH0KICAgIHJlcG9ydERpYWdub3N0aWNNZXNzYWdlKGZvcm1hdChtZXNzYWdlLCBzZXZlcml0eSwgY29udGV4dCkpOwogICAgaWYgKGNvbW1hbmRfbGluZV9yZXBvcnRpbmcuc2hvdWxkVGhyb3dPbihzZXZlcml0eSkpIHsKICAgICAgdGhyb3cgbmV3IERlYnVnQWJvcnQoCiAgICAgICAgICBtZXNzYWdlLnVyaSwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBzZXZlcml0eSwgU3RhY2tUcmFjZS5jdXJyZW50KTsKICAgIH0KICB9CgogIHZvaWQgcmVwb3J0RGlhZ25vc3RpY01lc3NhZ2UoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogICAgKF9yYXcub25EaWFnbm9zdGljID8/IF9kZWZhdWx0RGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyKShtZXNzYWdlKTsKICB9CgogIHZvaWQgX2RlZmF1bHREaWFnbm9zdGljTWVzc2FnZUhhbmRsZXIoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogICAgcHJpbnREaWFnbm9zdGljTWVzc2FnZShtZXNzYWdlLCBwcmludCk7CiAgfQoKICAvLyBUT0RPKGFza2VzYyk6IFJlbW92ZSB0aGlzIGFuZCBkaXJlY3QgY2FsbGVycyBkaXJlY3RseSB0byByZXBvcnQuCiAgdm9pZCByZXBvcnRXaXRob3V0TG9jYXRpb24oTWVzc2FnZSBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSkgewogICAgcmVwb3J0KG1lc3NhZ2Uud2l0aG91dExvY2F0aW9uKCksIHNldmVyaXR5KTsKICB9CgogIC8vLyBSdW5zIHZhcmlvdXMgdmFsaWRhdGlvbnMgY2hlY2tzIG9uIHRoZSBpbnB1dCBvcHRpb25zLiBGb3IgaW5zdGFuY2UsCiAgLy8vIGlmIGFuIG9wdGlvbiBpcyBhIHBhdGggdG8gYSBmaWxlLCBpdCBjaGVja3MgdGhhdCB0aGUgZmlsZSBleGlzdHMuCiAgRnV0dXJlPGJvb2w+IHZhbGlkYXRlT3B0aW9ucyh7Ym9vbCBlcnJvck9uTWlzc2luZ0lucHV0OiB0cnVlfSkgYXN5bmMgewogICAgaWYgKHZlcmJvc2UpIHByaW50KGRlYnVnU3RyaW5nKCkpOwoKICAgIGlmIChlcnJvck9uTWlzc2luZ0lucHV0ICYmIGlucHV0cy5pc0VtcHR5KSB7CiAgICAgIHJlcG9ydFdpdGhvdXRMb2NhdGlvbihtZXNzYWdlTWlzc2luZ0lucHV0LCBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoX3Jhdy5zZGtSb290ICE9IG51bGwgJiYKICAgICAgICAhYXdhaXQgZmlsZVN5c3RlbS5lbnRpdHlGb3JVcmkoc2RrUm9vdCkuZXhpc3RzKCkpIHsKICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgdGVtcGxhdGVTZGtSb290Tm90Rm91bmQud2l0aEFyZ3VtZW50cyhzZGtSb290KSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgVXJpIHN1bW1hcnkgPSBzZGtTdW1tYXJ5OwogICAgaWYgKHN1bW1hcnkgIT0gbnVsbCAmJiAhYXdhaXQgZmlsZVN5c3RlbS5lbnRpdHlGb3JVcmkoc3VtbWFyeSkuZXhpc3RzKCkpIHsKICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgdGVtcGxhdGVTZGtTdW1tYXJ5Tm90Rm91bmQud2l0aEFyZ3VtZW50cyhzdW1tYXJ5KSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKGNvbXBpbGVTZGsgJiYgc3VtbWFyeSAhPSBudWxsKSB7CiAgICAgIHJlcG9ydFdpdGhvdXRMb2NhdGlvbigKICAgICAgICAgIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1Qcm92aWRlZEJvdGhDb21waWxlU2RrQW5kU2RrU3VtbWFyeSwKICAgICAgICAgIFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBmb3IgKFVyaSBzb3VyY2UgaW4gX3Jhdy5saW5rZWREZXBlbmRlbmNpZXMpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBjaGVjaywgdGhlIGNvbXBpbGVyIGl0c2VsZiBzaG91bGQgaGFuZGxlIGFuZAogICAgICAvLyByZWNvdmVyIGZyb20gdGhpcy4KICAgICAgaWYgKCFhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShzb3VyY2UpLmV4aXN0cygpKSB7CiAgICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgICB0ZW1wbGF0ZUlucHV0RmlsZU5vdEZvdW5kLndpdGhBcmd1bWVudHMoc291cmNlKSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIFNESyB3aGVuIGNvbXBpbGluZyBhCiAgLy8vIHdob2xlLXByb2dyYW0uCiAgYm9vbCBnZXQgY29tcGlsZVNkayA9PiBfcmF3LmNvbXBpbGVTZGs7CgogIEZpbGVTeXN0ZW0gX2ZpbGVTeXN0ZW07CgogIC8vLyBHZXQgdGhlIFtGaWxlU3lzdGVtXSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB0aGUgZnJvbnQgZW5kIHRvIGFjY2VzcwogIC8vLyBmaWxlcy4KICBGaWxlU3lzdGVtIGdldCBmaWxlU3lzdGVtID0+IF9maWxlU3lzdGVtID8/PSBfY3JlYXRlRmlsZVN5c3RlbSgpOwoKICAvLy8gQ2xlYXIgdGhlIGZpbGUgc3lzdGVtIHNvIGFueSBDb21waWxlck9wdGlvbnMgZmlsZVN5c3RlbSBjaGFuZ2Ugd2lsbCBoYXZlCiAgLy8vIGVmZmVjdC4KICB2b2lkIGNsZWFyRmlsZVN5c3RlbUNhY2hlKCkgPT4gX2ZpbGVTeXN0ZW0gPSBudWxsOwoKICBib29sIGdldCBsZWdhY3lNb2RlID0+IF9yYXcubGVnYWN5TW9kZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgYnl0ZWNvZGUuCiAgYm9vbCBnZXQgYnl0ZWNvZGUgPT4gX3Jhdy5ieXRlY29kZTsKCiAgLy8vIFdoZXRoZXIgdG8gd3JpdGUgYSBmaWxlIChlLmcuIGEgZGlsbCBmaWxlKSB3aGVuIHJlcG9ydGluZyBhIGNyYXNoLgogIGJvb2wgZ2V0IHdyaXRlRmlsZU9uQ3Jhc2hSZXBvcnQgPT4gX3Jhdy53cml0ZUZpbGVPbkNyYXNoUmVwb3J0OwoKICBUYXJnZXQgX3RhcmdldDsKICBUYXJnZXQgZ2V0IHRhcmdldCA9PiBfdGFyZ2V0ID8/PQogICAgICBfcmF3LnRhcmdldCA/PyBuZXcgTm9uZVRhcmdldChuZXcgVGFyZ2V0RmxhZ3MobGVnYWN5TW9kZTogbGVnYWN5TW9kZSkpOwoKICBib29sIGlzRXhwZXJpbWVudEVuYWJsZWQoRXhwZXJpbWVudGFsRmxhZyBmbGFnKSB7CiAgICBhc3NlcnQoZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzLmNvbnRhaW5zS2V5KGZsYWcpLAogICAgICAgICJObyBkZWZhdWx0IHZhbHVlIGZvciAkZmxhZy4iKTsKICAgIGFzc2VydChleHBpcmVkRXhwZXJpbWVudGFsRmxhZ3MuY29udGFpbnNLZXkoZmxhZyksCiAgICAgICAgIk5vIGV4cGlyZWQgdmFsdWUgZm9yICRmbGFnLiIpOwogICAgaWYgKGV4cGlyZWRFeHBlcmltZW50YWxGbGFnc1tmbGFnXSkgewogICAgICByZXR1cm4gZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzW2ZsYWddOwogICAgfQogICAgcmV0dXJuIF9yYXcuZXhwZXJpbWVudGFsRmxhZ3NbZmxhZ10gPz8gZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzW2ZsYWddOwogIH0KCiAgLy8vIEdldCBhbiBvdXRsaW5lIGNvbXBvbmVudCB0aGF0IHN1bW1hcml6ZXMgdGhlIFNESywgaWYgYW55LgogIC8vIFRPRE8oc2lnbXVuZCk6IG1vdmUsIHRoaXMgZG9lc24ndCBmZWVsIGxpa2UgYW4gIm9wdGlvbiIuCiAgRnV0dXJlPENvbXBvbmVudD4gbG9hZFNka1N1bW1hcnkoQ2Fub25pY2FsTmFtZSBuYW1lUm9vdCkgYXN5bmMgewogICAgaWYgKF9zZGtTdW1tYXJ5Q29tcG9uZW50ID09IG51bGwpIHsKICAgICAgaWYgKHNka1N1bW1hcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIExpc3Q8aW50PiBieXRlcyA9IGF3YWl0IGxvYWRTZGtTdW1tYXJ5Qnl0ZXMoKTsKICAgICAgaWYgKGJ5dGVzICE9IG51bGwgJiYgYnl0ZXMuaXNOb3RFbXB0eSkgewogICAgICAgIF9zZGtTdW1tYXJ5Q29tcG9uZW50ID0gbG9hZENvbXBvbmVudChieXRlcywgbmFtZVJvb3QpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX3Nka1N1bW1hcnlDb21wb25lbnQ7CiAgfQoKICB2b2lkIHNldCBzZGtTdW1tYXJ5Q29tcG9uZW50KENvbXBvbmVudCBwbGF0Zm9ybSkgewogICAgaWYgKF9zZGtTdW1tYXJ5Q29tcG9uZW50ICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoInNka1N1bW1hcnkgYWxyZWFkeSBsb2FkZWQuIik7CiAgICB9CiAgICBfc2RrU3VtbWFyeUNvbXBvbmVudCA9IHBsYXRmb3JtOwogIH0KCiAgLy8vIEdldCB0aGUgc3VtbWFyeSBwcm9ncmFtcyBmb3IgZWFjaCBvZiB0aGUgdW5kZXJseWluZyBgaW5wdXRTdW1tYXJpZXNgCiAgLy8vIHByb3ZpZGVkIHZpYSBbQ29tcGlsZXJPcHRpb25zXS4KICAvLyBUT0RPKHNpZ211bmQpOiBtb3ZlLCB0aGlzIGRvZXNuJ3QgZmVlbCBsaWtlIGFuICJvcHRpb24iLgogIEZ1dHVyZTxMaXN0PENvbXBvbmVudD4+IGxvYWRJbnB1dFN1bW1hcmllcyhDYW5vbmljYWxOYW1lIG5hbWVSb290KSBhc3luYyB7CiAgICBpZiAoX2lucHV0U3VtbWFyaWVzQ29tcG9uZW50cyA9PSBudWxsKSB7CiAgICAgIExpc3Q8VXJpPiB1cmlzID0gX3Jhdy5pbnB1dFN1bW1hcmllczsKICAgICAgaWYgKHVyaXMgPT0gbnVsbCB8fCB1cmlzLmlzRW1wdHkpIHJldHVybiBjb25zdCA8Q29tcG9uZW50PltdOwogICAgICAvLyBUT0RPKHNpZ211bmQpOiB0aHJvdHRsZSAjIG9mIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4KICAgICAgTGlzdDxMaXN0PGludD4+IGFsbEJ5dGVzID0gYXdhaXQgRnV0dXJlLndhaXQoCiAgICAgICAgICB1cmlzLm1hcCgodXJpKSA9PiBfcmVhZEFzQnl0ZXMoZmlsZVN5c3RlbS5lbnRpdHlGb3JVcmkodXJpKSkpKTsKICAgICAgX2lucHV0U3VtbWFyaWVzQ29tcG9uZW50cyA9CiAgICAgICAgICBhbGxCeXRlcy5tYXAoKGJ5dGVzKSA9PiBsb2FkQ29tcG9uZW50KGJ5dGVzLCBuYW1lUm9vdCkpLnRvTGlzdCgpOwogICAgfQogICAgcmV0dXJuIF9pbnB1dFN1bW1hcmllc0NvbXBvbmVudHM7CiAgfQoKICB2b2lkIHNldCBpbnB1dFN1bW1hcmllc0NvbXBvbmVudHMoTGlzdDxDb21wb25lbnQ+IGNvbXBvbmVudHMpIHsKICAgIGlmIChfaW5wdXRTdW1tYXJpZXNDb21wb25lbnRzICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoImlucHV0U3VtbWFyaWVzQ29tcG9uZW50cyBhbHJlYWR5IGxvYWRlZC4iKTsKICAgIH0KICAgIF9pbnB1dFN1bW1hcmllc0NvbXBvbmVudHMgPSBjb21wb25lbnRzOwogIH0KCiAgLy8vIExvYWQgZWFjaCBvZiB0aGUgW0NvbXBpbGVyT3B0aW9ucy5saW5rZWREZXBlbmRlbmNpZXNdIGNvbXBvbmVudHMuCiAgLy8gVE9ETyhzaWdtdW5kKTogbW92ZSwgdGhpcyBkb2Vzbid0IGZlZWwgbGlrZSBhbiAib3B0aW9uIi4KICBGdXR1cmU8TGlzdDxDb21wb25lbnQ+PiBsb2FkTGlua0RlcGVuZGVuY2llcyhDYW5vbmljYWxOYW1lIG5hbWVSb290KSBhc3luYyB7CiAgICBpZiAoX2xpbmtlZERlcGVuZGVuY2llcyA9PSBudWxsKSB7CiAgICAgIExpc3Q8VXJpPiB1cmlzID0gX3Jhdy5saW5rZWREZXBlbmRlbmNpZXM7CiAgICAgIGlmICh1cmlzID09IG51bGwgfHwgdXJpcy5pc0VtcHR5KSByZXR1cm4gY29uc3QgPENvbXBvbmVudD5bXTsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogdGhyb3R0bGUgIyBvZiBjb25jdXJyZW50IG9wZXJhdGlvbnMuCiAgICAgIExpc3Q8TGlzdDxpbnQ+PiBhbGxCeXRlcyA9IGF3YWl0IEZ1dHVyZS53YWl0KAogICAgICAgICAgdXJpcy5tYXAoKHVyaSkgPT4gX3JlYWRBc0J5dGVzKGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHVyaSkpKSk7CiAgICAgIF9saW5rZWREZXBlbmRlbmNpZXMgPQogICAgICAgICAgYWxsQnl0ZXMubWFwKChieXRlcykgPT4gbG9hZENvbXBvbmVudChieXRlcywgbmFtZVJvb3QpKS50b0xpc3QoKTsKICAgIH0KICAgIHJldHVybiBfbGlua2VkRGVwZW5kZW5jaWVzOwogIH0KCiAgLy8vIEhlbHBlciB0byBsb2FkIGEgLmRpbGwgZmlsZSBmcm9tIFt1cmldIHVzaW5nIHRoZSBleGlzdGluZyBbbmFtZVJvb3RdLgogIENvbXBvbmVudCBsb2FkQ29tcG9uZW50KExpc3Q8aW50PiBieXRlcywgQ2Fub25pY2FsTmFtZSBuYW1lUm9vdCwKICAgICAge2Jvb2wgYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2Rlc30pIHsKICAgIENvbXBvbmVudCBjb21wb25lbnQgPQogICAgICAgIHRhcmdldC5jb25maWd1cmVDb21wb25lbnQobmV3IENvbXBvbmVudChuYW1lUm9vdDogbmFtZVJvb3QpKTsKICAgIC8vIFRPRE8oYWhlKTogUGFzcyBmaWxlIG5hbWUgdG8gQmluYXJ5QnVpbGRlci4KICAgIC8vIFRPRE8oYWhlKTogQ29udHJvbCBsYXp5IGxvYWRpbmcgdmlhIGFuIG9wdGlvbi4KICAgIG5ldyBCaW5hcnlCdWlsZGVyKGJ5dGVzLAogICAgICAgICAgICBmaWxlbmFtZTogbnVsbCwKICAgICAgICAgICAgZGlzYWJsZUxhenlSZWFkaW5nOiBmYWxzZSwKICAgICAgICAgICAgYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlczogYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykKICAgICAgICAucmVhZENvbXBvbmVudChjb21wb25lbnQpOwogICAgcmV0dXJuIGNvbXBvbmVudDsKICB9CgogIC8vLyBHZXQgdGhlIFtVcmlUcmFuc2xhdG9yXSB3aGljaCByZXNvbHZlcyAicGFja2FnZToiIGFuZCAiZGFydDoiIFVSSXMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIG1ldGhvZCBzaW5jZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIG1heSBiZQogIC8vLyByZXF1aXJlZCB0byBsb2NhdGUvcmVhZCB0aGUgcGFja2FnZXMgZmlsZSBhcyB3ZWxsIGFzIFNESyBtZXRhZGF0YS4KICBGdXR1cmU8VXJpVHJhbnNsYXRvcj4gZ2V0VXJpVHJhbnNsYXRvcih7Ym9vbCBieXBhc3NDYWNoZTogZmFsc2V9KSBhc3luYyB7CiAgICBpZiAoYnlwYXNzQ2FjaGUpIHsKICAgICAgX3VyaVRyYW5zbGF0b3IgPSBudWxsOwogICAgICBfcGFja2FnZXMgPSBudWxsOwogICAgfQogICAgaWYgKF91cmlUcmFuc2xhdG9yID09IG51bGwpIHsKICAgICAgdGlja2VyLmxvZ01zKCJTdGFydGVkIGJ1aWxkaW5nIFVyaVRyYW5zbGF0b3IiKTsKICAgICAgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbiBsaWJyYXJpZXMgPQogICAgICAgICAgYXdhaXQgX2NvbXB1dGVMaWJyYXJ5U3BlY2lmaWNhdGlvbigpOwogICAgICB0aWNrZXIubG9nTXMoIlJlYWQgbGlicmFyaWVzIGZpbGUiKTsKICAgICAgUGFja2FnZXMgcGFja2FnZXMgPSBhd2FpdCBfZ2V0UGFja2FnZXMoKTsKICAgICAgdGlja2VyLmxvZ01zKCJSZWFkIHBhY2thZ2VzIGZpbGUiKTsKICAgICAgX3VyaVRyYW5zbGF0b3IgPSBuZXcgVXJpVHJhbnNsYXRvcihsaWJyYXJpZXMsIHBhY2thZ2VzKTsKICAgIH0KICAgIHJldHVybiBfdXJpVHJhbnNsYXRvcjsKICB9CgogIEZ1dHVyZTxUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uPiBfY29tcHV0ZUxpYnJhcnlTcGVjaWZpY2F0aW9uKCkgYXN5bmMgewogICAgU3RyaW5nIG5hbWUgPSB0YXJnZXQubmFtZTsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IEVlayEgV2Ugc2hvdWxkIGdldCB0byB0aGUgcG9pbnQgd2hlcmUgdGhlcmUgaXMgbm8KICAgIC8vIGZhc3RhLXNwZWNpZmljIHRhcmdldHMgYW5kIHRoZSB0YXJnZXQgbmFtZXMgYXJlIG1lYW5pbmdmdWwuCiAgICBpZiAobmFtZS5lbmRzV2l0aCgnX2Zhc3RhJykpIG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDYpOwoKICAgIGlmIChsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID09IG51bGwgfHwKICAgICAgICAhYXdhaXQgZmlsZVN5c3RlbS5lbnRpdHlGb3JVcmkobGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSkuZXhpc3RzKCkpIHsKICAgICAgaWYgKGNvbXBpbGVTZGspIHsKICAgICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICAgIHRlbXBsYXRlU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpKSwKICAgICAgICAgICAgU2V2ZXJpdHkuZXJyb3IpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbihuYW1lKTsKICAgIH0KCiAgICBTdHJpbmcganNvbiA9CiAgICAgICAgYXdhaXQgZmlsZVN5c3RlbS5lbnRpdHlGb3JVcmkobGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSkucmVhZEFzU3RyaW5nKCk7CiAgICB0cnkgewogICAgICBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uIHNwZWMgPQogICAgICAgICAgYXdhaXQgTGlicmFyaWVzU3BlY2lmaWNhdGlvbi5wYXJzZShsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpLCBqc29uKTsKICAgICAgcmV0dXJuIHNwZWMuc3BlY2lmaWNhdGlvbkZvcihuYW1lKTsKICAgIH0gb24gTGlicmFyaWVzU3BlY2lmaWNhdGlvbkV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICB0ZW1wbGF0ZUNhbm5vdFJlYWRTZGtTcGVjaWZpY2F0aW9uLndpdGhBcmd1bWVudHMoJyR7ZS5lcnJvcn0nKSwKICAgICAgICAgIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIG5ldyBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uKG5hbWUpOwogICAgfQogIH0KCiAgLy8vIEdldCB0aGUgcGFja2FnZSBtYXAgd2hpY2ggbWFwcyBwYWNrYWdlIG5hbWVzIHRvIFVSSXMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGdldHRlciBzaW5jZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIG1heSBiZQogIC8vLyByZXF1aXJlZCB0byBsb2NhdGUvcmVhZCB0aGUgcGFja2FnZXMgZmlsZS4KICBGdXR1cmU8UGFja2FnZXM+IF9nZXRQYWNrYWdlcygpIGFzeW5jIHsKICAgIGlmIChfcGFja2FnZXMgIT0gbnVsbCkgcmV0dXJuIF9wYWNrYWdlczsKICAgIF9wYWNrYWdlc1VyaSA9IG51bGw7CiAgICBpZiAoX3Jhdy5wYWNrYWdlc0ZpbGVVcmkgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3BhY2thZ2VzID0gYXdhaXQgY3JlYXRlUGFja2FnZXNGcm9tRmlsZShfcmF3LnBhY2thZ2VzRmlsZVVyaSk7CiAgICB9CgogICAgaWYgKGlucHV0cy5sZW5ndGggPiAxKSB7CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNvbnNpZGVyIG5vdCByZXBvcnRpbmcgYW4gZXJyb3IgaWYgd2Ugd291bGQgaW5mZXIKICAgICAgLy8gdGhlIHNhbWUgLnBhY2thZ2VzIGZpbGUgZnJvbSBhbGwgb2YgdGhlIGlucHV0cy4KICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHMsIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIF9wYWNrYWdlcyA9IFBhY2thZ2VzLm5vUGFja2FnZXM7CiAgICB9CgogICAgVXJpIGlucHV0ID0gaW5wdXRzLmZpcnN0OwoKICAgIC8vIFdoZW4gY29tcGlsaW5nIHRoZSBTREsgdGhlIGlucHV0IGZpbGVzIGFyZSBub3JtYWxseSBgZGFydDpgIFVSSXMuCiAgICBpZiAoaW5wdXQuc2NoZW1lID09ICdkYXJ0JykgcmV0dXJuIF9wYWNrYWdlcyA9IFBhY2thZ2VzLm5vUGFja2FnZXM7CgogICAgaWYgKGlucHV0LnNjaGVtZSA9PSAncGFja2FnZXMnKSB7CiAgICAgIHJlcG9ydCgKICAgICAgICAgIG1lc3NhZ2VDYW50SW5mZXJQYWNrYWdlc0Zyb21QYWNrYWdlVXJpLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICBpbnB1dCwgLTEsIG5vTGVuZ3RoKSwKICAgICAgICAgIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIF9wYWNrYWdlcyA9IFBhY2thZ2VzLm5vUGFja2FnZXM7CiAgICB9CgogICAgcmV0dXJuIF9wYWNrYWdlcyA9IGF3YWl0IF9maW5kUGFja2FnZXMoaW5wdXRzLmZpcnN0KTsKICB9CgogIC8vLyBDcmVhdGUgYSBbUGFja2FnZXNdIGdpdmVuIHRoZSBVcmkgdG8gYSBgLnBhY2thZ2VzYCBmaWxlLgogIEZ1dHVyZTxQYWNrYWdlcz4gY3JlYXRlUGFja2FnZXNGcm9tRmlsZShVcmkgZmlsZSkgYXN5bmMgewogICAgTGlzdDxpbnQ+IGNvbnRlbnRzOwogICAgdHJ5IHsKICAgICAgLy8gVE9ETyhhaGUpOiBXZSBuZWVkIHRvIGNvbXB1dGUgbGluZSBlbmRpbmdzIGZvciB0aGlzIGZpbGUuCiAgICAgIGNvbnRlbnRzID0gYXdhaXQgZmlsZVN5c3RlbS5lbnRpdHlGb3JVcmkoZmlsZSkucmVhZEFzQnl0ZXMoKTsKICAgIH0gb24gRmlsZVN5c3RlbUV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICB0ZW1wbGF0ZUNhbnRSZWFkRmlsZS53aXRoQXJndW1lbnRzKGZpbGUsIGUubWVzc2FnZSksIFNldmVyaXR5LmVycm9yKTsKICAgIH0KICAgIGlmIChjb250ZW50cyAhPSBudWxsKSB7CiAgICAgIF9wYWNrYWdlc1VyaSA9IGZpbGU7CiAgICAgIHRyeSB7CiAgICAgICAgTWFwPFN0cmluZywgVXJpPiBtYXAgPSBwYWNrYWdlX2NvbmZpZy5wYXJzZShjb250ZW50cywgZmlsZSk7CiAgICAgICAgcmV0dXJuIG5ldyBNYXBQYWNrYWdlcyhtYXApOwogICAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICAgIHJlcG9ydCgKICAgICAgICAgICAgdGVtcGxhdGVQYWNrYWdlc0ZpbGVGb3JtYXQKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGUubWVzc2FnZSkKICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oZmlsZSwgZS5vZmZzZXQsIG5vTGVuZ3RoKSwKICAgICAgICAgICAgU2V2ZXJpdHkuZXJyb3IpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgICB0ZW1wbGF0ZUNhbnRSZWFkRmlsZS53aXRoQXJndW1lbnRzKGZpbGUsICIkZSIpLCBTZXZlcml0eS5lcnJvcik7CiAgICAgIH0KICAgIH0KICAgIF9wYWNrYWdlc1VyaSA9IG51bGw7CiAgICByZXR1cm4gUGFja2FnZXMubm9QYWNrYWdlczsKICB9CgogIC8vLyBGaW5kcyBhIHBhY2thZ2UgcmVzb2x1dGlvbiBzdHJhdGVneSB1c2luZyBhIFtGaWxlU3lzdGVtXS4KICAvLy8KICAvLy8gVGhlIFtzY3JpcHRVcmldIHBvaW50cyB0byBhIERhcnQgc2NyaXB0IHdpdGggYSB2YWxpZCBzY2hlbWUgYWNjZXB0ZWQgYnkKICAvLy8gdGhlIFtGaWxlU3lzdGVtXS4KICAvLy8KICAvLy8gVGhpcyBmdW5jdGlvbiBmaXJzdCB0cmllcyB0byBsb2NhdGUgYSBgLnBhY2thZ2VzYCBmaWxlIGluIHRoZSBgc2NyaXB0VXJpYAogIC8vLyBkaXJlY3RvcnkuIElmIHRoYXQgaXMgbm90IGZvdW5kLCBpdCBzdGFydHMgY2hlY2tpbmcgcGFyZW50IGRpcmVjdG9yaWVzIGZvcgogIC8vLyBhIGAucGFja2FnZXNgIGZpbGUsIGFuZCBzdG9wcyBpZiBpdCBmaW5kcyBpdC4gT3RoZXJ3aXNlIGl0IGdpdmVzIHVwIGFuZAogIC8vLyByZXR1cm5zIFtQYWNrYWdlcy5ub1BhY2thZ2VzXS4KICAvLy8KICAvLy8gTm90ZTogdGhpcyBpcyBhIGZvcmsgZnJvbSBgcGFja2FnZTpwYWNrYWdlX2NvbmZpZy9kaXNjb3ZlcnkuZGFydGAgdG8gYWRhcHQKICAvLy8gaXQgdG8gdXNlIFtGaWxlU3lzdGVtXS4gVGhlIGxvZ2ljIGhlcmUgaXMgYSBtaXggb2YgdGhlIGxvZ2ljIGluIHRoZQogIC8vLyBgZmluZFBhY2thZ2VzRnJvbUZpbGVgIGFuZCBgZmluZFBhY2thZ2VzRnJvbU5vbkZpbGVgOgogIC8vLwogIC8vLyAgICAqIExpa2UgYGZpbmRQYWNrYWdlc0Zyb21GaWxlYCByZXNvbHV0aW9uIHNlYXJjaGVzIGZvciBwYXJlbnQKICAvLy8gICAgZGlyZWN0b3JpZXMKICAvLy8KICAvLy8gICAgKiBVbmxpa2UgcGFja2FnZTpwYWNrYWdlX2NvbmZpZywgaXQgZG9lcyBub3QgbG9vayBmb3IgYSBgcGFja2FnZXMvYAogIC8vLyAgICBkaXJlY3RvcnksIGFzIHRoYXQgd29uJ3QgYmUgc3VwcG9ydGVkIGluIERhcnQgMi4KICBGdXR1cmU8UGFja2FnZXM+IF9maW5kUGFja2FnZXMoVXJpIHNjcmlwdFVyaSkgYXN5bmMgewogICAgVXJpIGRpciA9IHNjcmlwdFVyaS5yZXNvbHZlKCcuJyk7CiAgICBpZiAoIWRpci5pc0Fic29sdXRlKSB7CiAgICAgIHJlcG9ydFdpdGhvdXRMb2NhdGlvbigKICAgICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cygiRXhwZWN0ZWQgaW5wdXQgVXJpIHRvIGJlIGFic29sdXRlOiAkc2NyaXB0VXJpLiIpLAogICAgICAgICAgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKICAgICAgcmV0dXJuIFBhY2thZ2VzLm5vUGFja2FnZXM7CiAgICB9CgogICAgRnV0dXJlPFVyaT4gY2hlY2tJbkRpcihVcmkgZGlyKSBhc3luYyB7CiAgICAgIFVyaSBjYW5kaWRhdGUgPSBkaXIucmVzb2x2ZSgnLnBhY2thZ2VzJyk7CiAgICAgIGlmIChhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShjYW5kaWRhdGUpLmV4aXN0cygpKSByZXR1cm4gY2FuZGlkYXRlOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgJGN3ZC8ucGFja2FnZXMKICAgIFVyaSBjYW5kaWRhdGUgPSBhd2FpdCBjaGVja0luRGlyKGRpcik7CiAgICBpZiAoY2FuZGlkYXRlICE9IG51bGwpIHJldHVybiBjcmVhdGVQYWNrYWdlc0Zyb21GaWxlKGNhbmRpZGF0ZSk7CgogICAgLy8gQ2hlY2sgZm9yIGN3ZCgvLi4pKy8ucGFja2FnZXMKICAgIFVyaSBwYXJlbnREaXIgPSBkaXIucmVzb2x2ZSgnLi4nKTsKICAgIHdoaWxlIChwYXJlbnREaXIucGF0aCAhPSBkaXIucGF0aCkgewogICAgICBjYW5kaWRhdGUgPSBhd2FpdCBjaGVja0luRGlyKHBhcmVudERpcik7CiAgICAgIGlmIChjYW5kaWRhdGUgIT0gbnVsbCkgYnJlYWs7CiAgICAgIGRpciA9IHBhcmVudERpcjsKICAgICAgcGFyZW50RGlyID0gZGlyLnJlc29sdmUoJy4uJyk7CiAgICB9CgogICAgaWYgKGNhbmRpZGF0ZSAhPSBudWxsKSByZXR1cm4gY3JlYXRlUGFja2FnZXNGcm9tRmlsZShjYW5kaWRhdGUpOwogICAgcmV0dXJuIFBhY2thZ2VzLm5vUGFja2FnZXM7CiAgfQoKICBib29sIF9jb21wdXRlZFNka0RlZmF1bHRzID0gZmFsc2U7CgogIC8vLyBFbnN1cmUgW19zZGtSb290XSwgW19zZGtTdW1tYXJ5XSBhbmQgW19saWJyYXJ5U3BlY1VyaV0gYXJlIGluaXRpYWxpemVkLgogIC8vLwogIC8vLyBJZiB0aGV5IGFyZSBub3Qgc2V0IGV4cGxpY2l0bHksIHRoZXkgYXJlIGluZmVycmVkIGJhc2VkIG9uIHRoZSBkZWZhdWx0CiAgLy8vIGJlaGF2aW9yIGRlc2NyaWJlZCBpbiBbQ29tcGlsZXJPcHRpb25zXS4KICB2b2lkIF9lbnN1cmVTZGtEZWZhdWx0cygpIHsKICAgIGlmIChfY29tcHV0ZWRTZGtEZWZhdWx0cykgcmV0dXJuOwogICAgX2NvbXB1dGVkU2RrRGVmYXVsdHMgPSB0cnVlOwogICAgVXJpIHJvb3QgPSBfcmF3LnNka1Jvb3Q7CiAgICBpZiAocm9vdCAhPSBudWxsKSB7CiAgICAgIC8vIE5vcm1hbGl6ZSB0byBhbHdheXMgZW5kIGluICcvJwogICAgICBpZiAoIXJvb3QucGF0aC5lbmRzV2l0aCgnLycpKSB7CiAgICAgICAgcm9vdCA9IHJvb3QucmVwbGFjZShwYXRoOiByb290LnBhdGggKyAnLycpOwogICAgICB9CiAgICAgIF9zZGtSb290ID0gcm9vdDsKICAgIH0gZWxzZSBpZiAoY29tcGlsZVNkaykgewogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGltcGxlbWVudCB0aGUgYWxnb3JpdGhtIGZvciBmaW5kaW5nIHRoZSBTREsKICAgICAgLy8gYXV0b21hZ2ljYWxseS4KICAgICAgdW5pbXBsZW1lbnRlZCgnaW5mZXIgdGhlIGRlZmF1bHQgc2RrIGxvY2F0aW9uJywgLTEsIG51bGwpOwogICAgfQoKICAgIGlmIChfcmF3LnNka1N1bW1hcnkgIT0gbnVsbCkgewogICAgICBfc2RrU3VtbWFyeSA9IF9yYXcuc2RrU3VtbWFyeTsKICAgIH0gZWxzZSBpZiAoIWNvbXBpbGVTZGspIHsKICAgICAgLy8gSW5mZXIgYmFzZWQgb24gdGhlIHNka1Jvb3QsIGJ1dCBvbmx5IHdoZW4gYGNvbXBpbGVTZGtgIGlzIGZhbHNlLAogICAgICAvLyBvdGhlcndpc2UgdGhlIGRlZmF1bHQgaW50ZW50IHdhcyB0byBjb21waWxlIHRoZSBzZGsgZnJvbSBzb3VyY2VzIGFuZAogICAgICAvLyBub3QgdG8gbG9hZCBhbiBzZGsgc3VtbWFyeSBmaWxlLgogICAgICBfc2RrU3VtbWFyeSA9IHJvb3Q/LnJlc29sdmUoInZtX3BsYXRmb3JtX3N0cm9uZy5kaWxsIik7CiAgICB9CgogICAgaWYgKF9yYXcubGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSAhPSBudWxsKSB7CiAgICAgIF9saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID0gX3Jhdy5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpOwogICAgfSBlbHNlIGlmIChjb21waWxlU2RrKSB7CiAgICAgIF9saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID0gc2RrUm9vdC5yZXNvbHZlKCdsaWIvbGlicmFyaWVzLmpzb24nKTsKICAgIH0KICB9CgogIC8vLyBDcmVhdGUgYSBbRmlsZVN5c3RlbV0gc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucy4KICBGaWxlU3lzdGVtIF9jcmVhdGVGaWxlU3lzdGVtKCkgewogICAgcmV0dXJuIF9yYXcuZmlsZVN5c3RlbTsKICB9CgogIFN0cmluZyBkZWJ1Z1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHdyaXRlTGlzdChTdHJpbmcgbmFtZSwgTGlzdCBlbGVtZW50cykgewogICAgICBpZiAoZWxlbWVudHMuaXNFbXB0eSkgewogICAgICAgIHNiLndyaXRlbG4oJyRuYW1lOiA8ZW1wdHk+Jyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHNiLndyaXRlbG4oJyRuYW1lOicpOwogICAgICBlbGVtZW50cy5mb3JFYWNoKChzKSB7CiAgICAgICAgc2Iud3JpdGVsbignICAtICRzJyk7CiAgICAgIH0pOwogICAgfQoKICAgIHNiLndyaXRlbG4oJ0lucHV0czogJHtpbnB1dHN9Jyk7CiAgICBzYi53cml0ZWxuKCdPdXRwdXQ6ICR7b3V0cHV0fScpOwoKICAgIHNiLndyaXRlbG4oJ1dhcyBkaWFnbm9zdGljIG1lc3NhZ2UgaGFuZGxlciBwcm92aWRlZDogJwogICAgICAgICcke19yYXcub25EaWFnbm9zdGljID09IG51bGwgPyAibm8iIDogInllcyJ9Jyk7CgogICAgc2Iud3JpdGVsbignRmlsZVN5c3RlbTogJHtfZmlsZVN5c3RlbS5ydW50aW1lVHlwZX0gJwogICAgICAgICcocHJvdmlkZWQ6ICR7X3Jhdy5maWxlU3lzdGVtLnJ1bnRpbWVUeXBlfSknKTsKCiAgICB3cml0ZUxpc3QoJ0lucHV0IFN1bW1hcmllcycsIF9yYXcuaW5wdXRTdW1tYXJpZXMpOwogICAgd3JpdGVMaXN0KCdMaW5rZWQgRGVwZW5kZW5jaWVzJywgX3Jhdy5saW5rZWREZXBlbmRlbmNpZXMpOwoKICAgIHNiLndyaXRlbG4oJ1BhY2thZ2VzIHVyaTogJHtfcmF3LnBhY2thZ2VzRmlsZVVyaX0nKTsKICAgIHNiLndyaXRlbG4oJ1BhY2thZ2VzOiAke19wYWNrYWdlc30nKTsKCiAgICBzYi53cml0ZWxuKCdDb21waWxlIFNESzogJHtjb21waWxlU2RrfScpOwogICAgc2Iud3JpdGVsbignU0RLIHJvb3Q6ICR7X3Nka1Jvb3R9IChwcm92aWRlZDogJHtfcmF3LnNka1Jvb3R9KScpOwogICAgc2Iud3JpdGVsbignU0RLIHNwZWNpZmljYXRpb246ICR7X2xpYnJhcmllc1NwZWNpZmljYXRpb25Vcml9ICcKICAgICAgICAnKHByb3ZpZGVkOiAke19yYXcubGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaX0pJyk7CiAgICBzYi53cml0ZWxuKCdTREsgc3VtbWFyeTogJHtfc2RrU3VtbWFyeX0gKHByb3ZpZGVkOiAke19yYXcuc2RrU3VtbWFyeX0pJyk7CgogICAgc2Iud3JpdGVsbignTGVnYWN5IG1vZGU6ICR7bGVnYWN5TW9kZX0nKTsKICAgIHNiLndyaXRlbG4oJ1RhcmdldDogJHtfdGFyZ2V0Py5uYW1lfSAocHJvdmlkZWQ6ICR7X3Jhdy50YXJnZXQ/Lm5hbWV9KScpOwoKICAgIHNiLndyaXRlbG4oJ3Rocm93T25FcnJvcnNGb3JEZWJ1Z2dpbmc6ICR7dGhyb3dPbkVycm9yc0ZvckRlYnVnZ2luZ30nKTsKICAgIHNiLndyaXRlbG4oJ3Rocm93T25XYXJuaW5nc0ZvckRlYnVnZ2luZzogJHt0aHJvd09uV2FybmluZ3NGb3JEZWJ1Z2dpbmd9Jyk7CiAgICBzYi53cml0ZWxuKCdleGl0IG9uIHByb2JsZW06ICR7c2V0RXhpdENvZGVPblByb2JsZW19Jyk7CiAgICBzYi53cml0ZWxuKCdFbWJlZCBzb3VyY2VzOiAke2VtYmVkU291cmNlVGV4dH0nKTsKICAgIHNiLndyaXRlbG4oJ2RlYnVnRHVtcDogJHtkZWJ1Z0R1bXB9Jyk7CiAgICBzYi53cml0ZWxuKCd2ZXJib3NlOiAke3ZlcmJvc2V9Jyk7CiAgICBzYi53cml0ZWxuKCd2ZXJpZnk6ICR7dmVyaWZ5fScpOwogICAgcmV0dXJuICckc2InOwogIH0KCiAgRnV0dXJlPExpc3Q8aW50Pj4gX3JlYWRBc0J5dGVzKEZpbGVTeXN0ZW1FbnRpdHkgZmlsZSkgYXN5bmMgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIGF3YWl0IGZpbGUucmVhZEFzQnl0ZXMoKTsKICAgIH0gb24gRmlsZVN5c3RlbUV4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgICAgcmVwb3J0KAogICAgICAgICAgdGVtcGxhdGVDYW50UmVhZEZpbGUKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhlcnJvci51cmksIGVycm9yLm1lc3NhZ2UpCiAgICAgICAgICAgICAgLndpdGhvdXRMb2NhdGlvbigpLAogICAgICAgICAgU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdCgwKTsKICAgIH0KICB9Cn0KCi8vLyBBIFtGaWxlU3lzdGVtXSB0aGF0IG9ubHkgYWxsb3dzIGFjY2VzcyB0byBmaWxlcyB0aGF0IGhhdmUgYmVlbiBleHBsaWNpdGx5Ci8vLyB3aGl0ZWxpc3RlZC4KY2xhc3MgSGVybWV0aWNGaWxlU3lzdGVtIGltcGxlbWVudHMgRmlsZVN5c3RlbSB7CiAgZmluYWwgU2V0PFVyaT4gaW5jbHVkZWRGaWxlczsKICBmaW5hbCBGaWxlU3lzdGVtIF9yZWFsRmlsZVN5c3RlbTsKCiAgSGVybWV0aWNGaWxlU3lzdGVtKHRoaXMuaW5jbHVkZWRGaWxlcywgdGhpcy5fcmVhbEZpbGVTeXN0ZW0pOwoKICBGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSB7CiAgICBpZiAoaW5jbHVkZWRGaWxlcy5jb250YWlucyh1cmkpKSByZXR1cm4gX3JlYWxGaWxlU3lzdGVtLmVudGl0eUZvclVyaSh1cmkpOwogICAgdGhyb3cgbmV3IEhlcm1ldGljQWNjZXNzRXhjZXB0aW9uKHVyaSk7CiAgfQp9CgpjbGFzcyBIZXJtZXRpY0FjY2Vzc0V4Y2VwdGlvbiBleHRlbmRzIEZpbGVTeXN0ZW1FeGNlcHRpb24gewogIEhlcm1ldGljQWNjZXNzRXhjZXB0aW9uKFVyaSB1cmkpCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIHVyaSwKICAgICAgICAgICAgJ0ludmFsaWQgYWNjZXNzIHRvICR1cmk6ICcKICAgICAgICAgICAgJ3RoZSBmaWxlIGlzIGFjY2Vzc2VkIGluIGEgbW9kdWxhciBoZXJtZXRpYyBidWlsZCwgJwogICAgICAgICAgICAnYnV0IGl0IHdhcyBub3QgZXhwbGljaXRseSBsaXN0ZWQgYXMgYW4gaW5wdXQuJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG1lc3NhZ2U7Cn0KgrgATk48ASABIQEpAUgBTQEsKgE9AUYBSQEwLQEyTwErPAE2IQFJAT4BIwkaGBEwMEMdEiweIywkISokATIBQAEvASsBOgEmCSApJgE5BERHSE4TBEpQTUstGTgeAVEdFgFPSBQnAUgxIAE+BkxNTisiATwGTE1QKy0BTw8nAVALEBQaFQQBExcaGAQBHgEwMiQrRDQGHQQBIiYaJwQBEQEyASQBIgEoAS4BPgE0AUgBTAExGgE2FAEwAUoBT002KUk/UTZIARtRJRtIF04tMUUxSggGQz0EATkoOz87BkAUBkE6HEoGBAE8RgQBRSwEAUZDMQQBSkhJJwExQhQGASA8HUsUBgEeTx1OFAYBKR1FJRQGATJNHD0fThYIBhEEAUYVKgEaAUsNRAFPDjUBKgEkJgFJQgESI04BNDcoNygqLQZLBAFAPkMoKzUvPwgGIQQBNSg6BiUEAUsmPk0tLEQ9NEoiTAYmBAFCLUgGLAQBSD5PJzBEPTRKHEwGIAQBTEMqGkYzNh0cJ0IjFgQBSgZJSUwXHRgGIjYvMCswKj8GGwQBTh9IQ0wBLU4YHy07HQg1BgESUQokTyo1HUobNQYEATwGSTEqLRkoTQYBHUo5HUMuBgEeAUlIASYOPyQbLgYBOgQBPzwYCkNEKR1QBhwbDEUlJxAnKjkdFB9NCAYZIAQBQAZOGAZQUU4lBlFKPAZGFQZNOjgmGx0tUCUiBgEsME8TBgEgK0UBJScpLyQXJQYBRSAEASUBTgZNLx4mIR0YKCY0CBcdRhhBBgEjJR5KTio+BgEyQx1KBgQBPSMcBAEZKiweJhAIHB0eCgYBJSUBOzgBOTcBNz8BOSoBLkVDOk4BLk0BS088NSsnJRIEAUAKJy0OHzciGx8GBAIBThExICQBQAErTywEAgE8Iw8RJ0E+AQwgAgExcGFja2FnZTpmcm9udF9lbmQvc3JjL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydEBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYmFzZS9saWJyYXJpZXNfc3BlY2lmaWNhdGlvbi5kYXJ0qAMvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIExpYnJhcnkgc3BlY2lmaWNhdGlvbiBpbi1tZW1vcnkgcmVwcmVzZW50YXRpb24uCi8vLwovLy8gTWFueSBkYXJ0IHRvb2xzIGFyZSBjb25maWd1cmFibGUgdG8gc3VwcG9ydCBkaWZmZXJlbnQgdGFyZ2V0IHBsYXRmb3Jtcy4gIEZvcgovLy8gYSBnaXZlbiB0YXJnZXQsIHRoZXkgbmVlZCB0byBrbm93IHdoYXQgbGlicmFyaWVzIGFyZSBhdmFpbGFibGUgYW5kIHdoZXJlIGFyZQovLy8gdGhlIHNvdXJjZXMgYW5kIHRhcmdldC1zcGVjaWZpYyBwYXRjaGVzLgovLy8KLy8vIEhlcmUgd2UgZGVmaW5lIEFQSXMgdG8gcmVwcmVzZW50IHRoaXMgc3BlY2lmaWNhdGlvbiBhbmQgaW1wbGVtZW50Ci8vLyBzZXJpYWxpemF0aW9uIHRvIChhbmQgZGVzZXJpYWxpemF0aW9uIGZyb20pIGEgSlNPTiBmaWxlLgovLy8KLy8vIEhlcmUgaXMgYW4gZXhhbXBsZSBzcGVjaWZpY2F0aW9uIEpTT04gZmlsZToKLy8vCi8vLyAgICAgewovLy8gICAgICAgInZtIjogewovLy8gICAgICAgICAibGlicmFyaWVzIjogewovLy8gICAgICAgICAgICAgImNvcmUiOiB7Ci8vLyAgICAgICAgICAgICAgICAidXJpIjogImFzeW5jL2NvcmUuZGFydCIsCi8vLyAgICAgICAgICAgICAgICAicGF0Y2hlcyI6IFsKLy8vICAgICAgICAgICAgICAgICAgICAicGF0aC90by9jb3JlX3BhdGNoLmRhcnQiLAovLy8gICAgICAgICAgICAgICAgICAgICJwYXRoL3RvL2xpc3RfcGF0Y2guZGFydCIKLy8vICAgICAgICAgICAgICAgIF0KLy8vICAgICAgICAgICAgIH0KLy8vICAgICAgICAgICAgICJhc3luYyI6IHsKLy8vICAgICAgICAgICAgICAgICJ1cmkiOiAiYXN5bmMvYXN5bmMuZGFydCIsCi8vLyAgICAgICAgICAgICAgICAicGF0Y2hlcyI6ICJwYXRoL3RvL2FzeW5jX3BhdGNoLmRhcnQiCi8vLyAgICAgICAgICAgICB9Ci8vLyAgICAgICAgICAgICAiY29udmVydCI6IHsKLy8vICAgICAgICAgICAgICAgICJ1cmkiOiAiY29udmVydC9jb252ZXJ0LmRhcnQiLAovLy8gICAgICAgICAgICAgfQovLy8gICAgICAgICAgICAgIm1pcnJvcnMiOiB7Ci8vLyAgICAgICAgICAgICAgICAidXJpIjogIm1pcnJvcnMvbWlycm9ycy5kYXJ0IiwKLy8vICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQiOiBmYWxzZQovLy8gICAgICAgICAgICAgfQovLy8gICAgICAgICB9Ci8vLyAgICAgICB9Ci8vLyAgICAgfQovLy8KLy8vIFRoZSBmb3JtYXQgY29udGFpbnM6Ci8vLyAgIC0gYSB0b3AgbGV2ZWwgZW50cnkgZm9yIGVhY2ggdGFyZ2V0LiBLZXlzIGFyZSB0YXJnZXQgbmFtZXMgKGUuZy4gInZtIgovLy8gICAgIGFib3ZlKSwgYW5kIHZhbHVlcyBjb250YWluIHRoZSBlbnRpcmUgc3BlY2lmaWNhdGlvbiBvZiBhIHRhcmdldC4KLy8vCi8vLyAgIC0gZWFjaCB0YXJnZXQgc3BlY2lmaWNhdGlvbiBpcyBhIG1hcC4gVG9kYXksIG9ubHkgb25lIGtleSBpcyBzdXBwb3J0ZWQgb24KLy8vICAgICB0aGlzIG1hcDogImxpYnJhcmllcyIuCi8vLwovLy8gICAtIFRoZSAibGlicmFyaWVzIiBlbnRyeSBjb250YWlucyBkZXRhaWxzIGZvciBob3cgZWFjaCBwbGF0Zm9ybSBsaWJyYXJ5IGlzCi8vLyAgICAgaW1wbGVtZW50ZWQuIFRoZSBlbnRyeSBpcyBhIG1hcCwgd2hlcmUga2V5cyBhcmUgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtCi8vLyAgICAgbGlicmFyeSBhbmQgdmFsdWVzIGNvbnRhaW4gZGV0YWlscyBmb3Igd2hlcmUgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24KLy8vICAgICBmbyB0aGF0IGxpYnJhcnkuCi8vLwovLy8gICAtIFRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IGlzIGEgc2luZ2xlIHRva2VuIChlLmcuICJjb3JlIikgdGhhdCBtYXRjaGVzIHRoZQovLy8gICAgIFVyaSBwYXRoIHVzZWQgYWZ0ZXIgYGRhcnQ6YCAoZS5nLiAiZGFydDpjb3JlIikuCi8vLwovLy8gICAtIFRoZSAidXJpIiBlbnRyeSBvbiB0aGUgbGlicmFyeSBpbmZvcm1hdGlvbiBpcyBtYW5kYXRvcnkuIFRoZSB2YWx1ZSBpcyBhCi8vLyAgICAgc3RyaW5nIFVSSSByZWZlcmVuY2UuIFRoZSAicGF0Y2hlcyIgZW50cnkgaXMgb3B0aW9uYWwgYW5kIG1heSBoYXZlIGFzIGEKLy8vICAgICB2YWx1ZSBhIHN0cmluZyBVUkkgcmVmZXJlbmNlIG9yIGEgbGlzdCBvZiBVUkkgcmVmZXJlbmNlcy4KLy8vCi8vLyAgICAgQWxsIFVSSSByZWZlcmVuY2VzIGNhbiBlaXRoZXIgYmUgYSBmaWxlIFVSSSBvciBhIHJlbGF0aXZlIFVSSSBwYXRoLAovLy8gICAgIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5Ci8vLyAgICAgc3BlY2lmaWNhdGlvbiBmaWxlLgovLy8KLy8vICAgLSBUaGUgInN1cHBvcnRlZCIgZW50cnkgb24gdGhlIGxpYnJhcnkgaW5mb3JtYXRpb24gaXMgb3B0aW9uYWwuIFRoZSB2YWx1ZQovLy8gICAgIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgc3VwcG9ydGVkIGluIHRoZQovLy8gICAgIHVuZGVybHlpbmcgdGFyZ2V0LiAgSG93ZXZlciwgc2luY2UgdGhlIGxpYnJhcmllcyBhcmUgYXNzdW1lZCB0byBiZQovLy8gICAgIHN1cHBvcnRlZCBieSBkZWZhdWx0LCB3ZSBvbmx5IGV4cGVjdCB1c2VycyB0byB1c2UgYGZhbHNlYC4KLy8vCi8vLyAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB2YWx1ZSBpcyB0byBjb25maWd1cmUgY29uZGl0aW9uYWwgaW1wb3J0cyBhbmQKLy8vICAgICBlbnZpcm9ubWVudCBjb25zdGFudHMuIEJ5IGRlZmF1bHQgZXZlcnkgcGxhdGZvcm0gbGlicmFyeSB0aGF0IGlzCi8vLyAgICAgYXZhaWxhYmxlIGluIHRoZSAibGlicmFyaWVzIiBzZWN0aW9uIGltcGxpY2l0bHkgZGVmaW5lcyBhbiBlbnZpcm9ubWVudAovLy8gICAgIHZhcmlhYmxlIGBkYXJ0LmxpYnJhcnkubmFtZWAgYXMgYCJ0cnVlImAsIHRvIGluZGljYXRlIHRoYXQgdGhlIGxpYnJhcnkKLy8vICAgICBpcyBzdXBwb3J0ZWQuICBTb21lIGJhY2tlbmRzIGFsbG93IGltcG9ydHMgdG8gYW4gdW5zdXBwb3J0ZWQgcGxhdGZvcm0KLy8vICAgICBsaWJyYXJ5ICh0dXJuaW5nIGEgc3RhdGljIGVycm9yIGludG8gYSBydW50aW1lIGVycm9yIHdoZW4gdGhlIGxpYnJhcnkgaXMKLy8vICAgICBldmVudHVhbGx5IGFjY2Vzc2VkKS4gVGhlc2UgYmFja2VuZHMgY2FuIHVzZSBgc3VwcG9ydGVkOiBmYWxzZWAgdG8KLy8vICAgICByZXBvcnQgdGhhdCBzdWNoIGxpYnJhcnkgaXMgc3RpbGwgbm90IHN1cHBvcnRlZCBpbiBjb25kaXRpb25hbCBpbXBvcnRzCi8vLyAgICAgYW5kIGNvbnN0IGBmcm9tRW52aXJvbm1lbnRgIGV4cHJlc3Npb25zLgovLy8KLy8vCi8vLyBOb3RlOiB3ZSBjdXJyZW50bHkgaGF2ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgdXBkYXRlZAovLy8gd2hlbiBjaGFuZ2luZyBsaWJyYXJpZXMsIHNvdXJjZXMsIGFuZCBwYXRjaCBmaWxlczoKLy8vICAgICogLnBsYXRmb3JtIGZpbGVzIChmb3IgZGFydDJqcykKLy8vICAgICogLmd5cGkgZmlsZXMgKGZvciB2bSkKLy8vICAgICogc2RrX2xpYnJhcnlfbWV0YWRhdGEvbGliL2xpYnJhcmllcy5kYXJ0IChmb3IgYW5hbHl6ZXIsIGRkYykKLy8vCi8vLyB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgdW5pZnlpbmcgdGhlbSBhbGwgdW5kZXIgdGhpcyBmb3JtYXQgKHNlZQovLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzI4ODM2KSwgYnV0IGZvciBub3cgd2UgbmVlZCB0byBwYXkKLy8vIGNsb3NlIGF0dGVudGlvbiB0byBjaGFuZ2UgdGhlbSBjb25zaXN0ZW50bHkuCgovLyBUT0RPKHNpZ211bmQpOiBtb3ZlIHRoaXMgZmlsZSB0byBhIHNoYXJlZCBwYWNrYWdlLgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBqc29uRGVjb2RlLCBqc29uRW5jb2RlOwoKaW1wb3J0ICcuLi9mYXN0YS91dGlsL3JlbGF0aXZpemUuZGFydCcgc2hvdyByZWxhdGl2aXplVXJpOwppbXBvcnQgJy4uL2Zhc3RhL3Jlc29sdmVfaW5wdXRfdXJpLmRhcnQnIHNob3cgaXNXaW5kb3dzOwoKLy8vIENvbnRlbnRzIGZyb20gYSBzaW5nbGUgbGlicmFyeSBzcGVjaWZpY2F0aW9uIGZpbGUuCi8vLwovLy8gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGxpYnJhcmllcyBvbiBhbGwgdGFyZ2V0IHBsYXRmb3JtcyBkZWZpbmVkIGluCi8vLyB0aGF0IGZpbGUuCmNsYXNzIExpYnJhcmllc1NwZWNpZmljYXRpb24gewogIGZpbmFsIE1hcDxTdHJpbmcsIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24+IF90YXJnZXRzOwoKICBjb25zdCBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uKAogICAgICBbdGhpcy5fdGFyZ2V0cyA9IGNvbnN0IDxTdHJpbmcsIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24+e31dKTsKCiAgLy8vIFRoZSBsaWJyYXJ5IHNwZWNpZmljYXRpb24gZm9yIGEgZ2l2ZW4gW3RhcmdldF0sIG9yIHRocm93cyBpZiBub25lIGlzCiAgLy8vIGF2YWlsYWJsZS4KICBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb25Gb3IoU3RyaW5nIHRhcmdldCkgewogICAgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbiB0YXJnZXRTcGVjID0gX3RhcmdldHNbdGFyZ2V0XTsKICAgIGlmICh0YXJnZXRTcGVjID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IExpYnJhcmllc1NwZWNpZmljYXRpb25FeGNlcHRpb24oCiAgICAgICAgICAnTm8gbGlicmFyeSBzcGVjaWZpY2F0aW9uIGZvciB0YXJnZXQgIiR0YXJnZXQiJyk7CiAgICB9CiAgICByZXR1cm4gdGFyZ2V0U3BlYzsKICB9CgogIC8vLyBQYXJzZSB0aGUgZ2l2ZW4gW2pzb25dIGFzIGEgbGlicmFyeSBzcGVjaWZpY2F0aW9uLCByZXNvbHZpbmcgYW55IHJlbGF0aXZlCiAgLy8vIHBhdGhzIGZyb20gW2Jhc2VVcmldLgogIC8vLwogIC8vLyBNYXkgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIFtqc29uXSBpcyBub3QgcHJvcGVybHkgZm9ybWF0dGVkIG9yIGNvbnRhaW5zCiAgLy8vIGludmFsaWQgdmFsdWVzLgogIHN0YXRpYyBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uIHBhcnNlKFVyaSBiYXNlVXJpLCBTdHJpbmcganNvbikgewogICAgaWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGNvbnN0IExpYnJhcmllc1NwZWNpZmljYXRpb24oKTsKICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGpzb25EYXRhOwogICAgdHJ5IHsKICAgICAgZHluYW1pYyBkYXRhID0ganNvbkRlY29kZShqc29uKTsKICAgICAgaWYgKGRhdGEgaXMhIE1hcCkgewogICAgICAgIHJldHVybiBfcmVwb3J0RXJyb3IoJ3RvcC1sZXZlbCBzcGVjaWZpY2F0aW9uIGlzIG5vdCBhIG1hcCcpOwogICAgICB9CiAgICAgIGpzb25EYXRhID0gZGF0YSBhcyBNYXA7CiAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICB0aHJvdyBuZXcgTGlicmFyaWVzU3BlY2lmaWNhdGlvbkV4Y2VwdGlvbihlKTsKICAgIH0KICAgIE1hcDxTdHJpbmcsIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24+IHRhcmdldHMgPQogICAgICAgIDxTdHJpbmcsIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24+e307CiAgICBqc29uRGF0YS5mb3JFYWNoKChTdHJpbmcgdGFyZ2V0TmFtZSwgdGFyZ2V0RGF0YSkgewogICAgICBpZiAodGFyZ2V0TmFtZS5zdGFydHNXaXRoKCJjb21tZW50OiIpKSByZXR1cm4gbnVsbDsKICAgICAgTWFwPFN0cmluZywgTGlicmFyeUluZm8+IGxpYnJhcmllcyA9IDxTdHJpbmcsIExpYnJhcnlJbmZvPnt9OwogICAgICBpZiAodGFyZ2V0RGF0YSBpcyEgTWFwKSB7CiAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigKICAgICAgICAgICAgInRhcmdldCBzcGVjaWZpY2F0aW9uIGZvciAnJHRhcmdldE5hbWUnIGlzIG5vdCBhIG1hcCIpOwogICAgICB9CiAgICAgIGlmICghdGFyZ2V0RGF0YS5jb250YWluc0tleSgibGlicmFyaWVzIikpIHsKICAgICAgICByZXR1cm4gX3JlcG9ydEVycm9yKCJ0YXJnZXQgc3BlY2lmaWNhdGlvbiAiCiAgICAgICAgICAgICJmb3IgJyR0YXJnZXROYW1lJyBkb2Vzbid0IGhhdmUgYSBsaWJyYXJpZXMgZW50cnkiKTsKICAgICAgfQogICAgICBkeW5hbWljIGxpYnJhcmllc0RhdGEgPSB0YXJnZXREYXRhWyJsaWJyYXJpZXMiXTsKICAgICAgaWYgKGxpYnJhcmllc0RhdGEgaXMhIE1hcCkgewogICAgICAgIHJldHVybiBfcmVwb3J0RXJyb3IoImxpYnJhcmllcyBlbnRyeSBmb3IgJyR0YXJnZXROYW1lJyBpcyBub3QgYSBtYXAiKTsKICAgICAgfQogICAgICBsaWJyYXJpZXNEYXRhLmZvckVhY2goKFN0cmluZyBuYW1lLCBkYXRhKSB7CiAgICAgICAgaWYgKGRhdGEgaXMhIE1hcCkgewogICAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigKICAgICAgICAgICAgICAibGlicmFyeSBkYXRhIGZvciAnJG5hbWUnIGluIHRhcmdldCAnJHRhcmdldE5hbWUnIGlzIG5vdCBhIG1hcCIpOwogICAgICAgIH0KICAgICAgICBVcmkgY2hlY2tBbmRSZXNvbHZlKHVyaVN0cmluZykgewogICAgICAgICAgaWYgKHVyaVN0cmluZyBpcyEgU3RyaW5nKSB7CiAgICAgICAgICAgIHJldHVybiBfcmVwb3J0RXJyb3IoInVyaSB2YWx1ZSAnJHVyaVN0cmluZycgaXMgbm90IGEgc3RyaW5nIgogICAgICAgICAgICAgICAgIihmcm9tIGxpYnJhcnkgJyRuYW1lJyBpbiB0YXJnZXQgJyR0YXJnZXROYW1lJykiKTsKICAgICAgICAgIH0KICAgICAgICAgIFVyaSB1cmkgPSBVcmkucGFyc2UodXJpU3RyaW5nKTsKICAgICAgICAgIGlmICh1cmkuc2NoZW1lICE9ICcnICYmIHVyaS5zY2hlbWUgIT0gJ2ZpbGUnKSB7CiAgICAgICAgICAgIHJldHVybiBfcmVwb3J0RXJyb3IoInVyaSBzY2hlbWUgaW4gJyR1cmlTdHJpbmcnIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYmFzZVVyaS5yZXNvbHZlVXJpKHVyaSk7CiAgICAgICAgfQoKICAgICAgICBVcmkgdXJpID0gY2hlY2tBbmRSZXNvbHZlKGRhdGFbJ3VyaSddKTsKICAgICAgICBMaXN0PFVyaT4gcGF0Y2hlczsKICAgICAgICBpZiAoZGF0YVsncGF0Y2hlcyddIGlzIExpc3QpIHsKICAgICAgICAgIHBhdGNoZXMgPQogICAgICAgICAgICAgIGRhdGFbJ3BhdGNoZXMnXS5tYXA8VXJpPigocykgPT4gYmFzZVVyaS5yZXNvbHZlKHMpKS50b0xpc3QoKTsKICAgICAgICB9IGVsc2UgaWYgKGRhdGFbJ3BhdGNoZXMnXSBpcyBTdHJpbmcpIHsKICAgICAgICAgIHBhdGNoZXMgPSBbY2hlY2tBbmRSZXNvbHZlKGRhdGFbJ3BhdGNoZXMnXSldOwogICAgICAgIH0gZWxzZSBpZiAoZGF0YVsncGF0Y2hlcyddID09IG51bGwpIHsKICAgICAgICAgIHBhdGNoZXMgPSBjb25zdCBbXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigKICAgICAgICAgICAgICAicGF0Y2hlcyBlbnRyeSBmb3IgJyRuYW1lJyBpcyBub3QgYSBsaXN0IG9yIGEgc3RyaW5nIik7CiAgICAgICAgfQoKICAgICAgICBkeW5hbWljIHN1cHBvcnRlZCA9IGRhdGFbJ3N1cHBvcnRlZCddID8/IHRydWU7CiAgICAgICAgaWYgKHN1cHBvcnRlZCBpcyEgYm9vbCkgewogICAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigiXCJzdXBwb3J0ZWRcIiBlbnRyeTogZXhwZWN0ZWQgYSAnYm9vbCcgYnV0ICIKICAgICAgICAgICAgICAiZ290IGEgJyR7c3VwcG9ydGVkLnJ1bnRpbWVUeXBlfScgKCckc3VwcG9ydGVkJykiKTsKICAgICAgICB9CiAgICAgICAgbGlicmFyaWVzW25hbWVdID0KICAgICAgICAgICAgbmV3IExpYnJhcnlJbmZvKG5hbWUsIHVyaSwgcGF0Y2hlcywgaXNTdXBwb3J0ZWQ6IHN1cHBvcnRlZCk7CiAgICAgIH0pOwogICAgICB0YXJnZXRzW3RhcmdldE5hbWVdID0KICAgICAgICAgIG5ldyBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uKHRhcmdldE5hbWUsIGxpYnJhcmllcyk7CiAgICB9KTsKICAgIHJldHVybiBuZXcgTGlicmFyaWVzU3BlY2lmaWNhdGlvbih0YXJnZXRzKTsKICB9CgogIHN0YXRpYyBfcmVwb3J0RXJyb3IoU3RyaW5nIGVycm9yKSA9PgogICAgICB0aHJvdyBuZXcgTGlicmFyaWVzU3BlY2lmaWNhdGlvbkV4Y2VwdGlvbihlcnJvcik7CgogIC8vLyBTZXJpYWxpemUgdGhpcyBzcGVjaWZpY2F0aW9uIHRvIGpzb24uCiAgLy8vCiAgLy8vIElmIHBvc3NpYmxlIHNlcmlhbGl6ZXMgcGF0aHMgcmVsYXRpdmUgdG8gW291dHB1dFVyaV0uCiAgU3RyaW5nIHRvSnNvblN0cmluZyhVcmkgb3V0cHV0VXJpKSA9PiBqc29uRW5jb2RlKHRvSnNvbk1hcChvdXRwdXRVcmkpKTsKCiAgTWFwIHRvSnNvbk1hcChVcmkgb3V0cHV0VXJpKSB7CiAgICBNYXAgcmVzdWx0ID0ge307CiAgICBVcmkgZGlyID0gb3V0cHV0VXJpLnJlc29sdmUoJy4nKTsKICAgIFN0cmluZyBwYXRoRm9yKFVyaSB1cmkpID0+IHJlbGF0aXZpemVVcmkoZGlyLCB1cmksIGlzV2luZG93cyk7CiAgICBfdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXROYW1lLCB0YXJnZXQpIHsKICAgICAgTWFwIGxpYnJhcmllcyA9IHt9OwogICAgICB0YXJnZXQuX2xpYnJhcmllcy5mb3JFYWNoKChuYW1lLCBsaWIpIHsKICAgICAgICBsaWJyYXJpZXNbbmFtZV0gPSB7CiAgICAgICAgICAndXJpJzogcGF0aEZvcihsaWIudXJpKSwKICAgICAgICAgICdwYXRjaGVzJzogbGliLnBhdGNoZXMubWFwKHBhdGhGb3IpLnRvTGlzdCgpLAogICAgICAgIH07CiAgICAgICAgaWYgKCFsaWIuaXNTdXBwb3J0ZWQpIHsKICAgICAgICAgIGxpYnJhcmllc1tuYW1lXVsnc3VwcG9ydGVkJ10gPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXN1bHRbdGFyZ2V0TmFtZV0gPSB7J2xpYnJhcmllcyc6IGxpYnJhcmllc307CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgovLy8gU3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBsaWJyYXJpZXMgc3VwcG9ydGVkIGJ5IGEgZ2l2ZW4gdGFyZ2V0LgpjbGFzcyBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uIHsKICAvLy8gTmFtZSBvZiB0aGUgdGFyZ2V0IHBsYXRmb3JtLgogIGZpbmFsIFN0cmluZyB0YXJnZXROYW1lOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBMaWJyYXJ5SW5mbz4gX2xpYnJhcmllczsKCiAgY29uc3QgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbih0aGlzLnRhcmdldE5hbWUsCiAgICAgIFt0aGlzLl9saWJyYXJpZXMgPSBjb25zdCA8U3RyaW5nLCBMaWJyYXJ5SW5mbz57fV0pOwoKICAvLy8gRGV0YWlscyBhYm91dCBhIGxpYnJhcnkgd2hvc2UgaW1wb3J0IGlzIGBkYXJ0OiRuYW1lYC4KICBMaWJyYXJ5SW5mbyBsaWJyYXJ5SW5mb0ZvcihTdHJpbmcgbmFtZSkgPT4gX2xpYnJhcmllc1tuYW1lXTsKCiAgSXRlcmFibGU8TGlicmFyeUluZm8+IGdldCBhbGxMaWJyYXJpZXMgPT4gX2xpYnJhcmllcy52YWx1ZXM7Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBhIGBkYXJ0OmAgbGlicmFyeSBpbiBhIHNwZWNpZmljIHRhcmdldCBwbGF0Zm9ybS4KY2xhc3MgTGlicmFyeUluZm8gewogIC8vLyBUaGUgbmFtZSBvZiB0aGUgbGlicmFyeSwgd2hpY2ggaXMgdGhlIHBhdGggZGV2ZWxvcGVycyB1c2UgdG8gaW1wb3J0IHRoaXMKICAvLy8gbGlicmFyeSAoYXMgYGRhcnQ6JG5hbWVgKS4KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFRoZSBmaWxlIGRlZmluaW5nIHRoZSBtYWluIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgogIGZpbmFsIFVyaSB1cmk7CgogIC8vLyBQYXRjaCBmaWxlcyB1c2VkIGZvciB0aGlzIGxpYnJhcnkgaW4gdGhlIHRhcmdldCBwbGF0Zm9ybSwgaWYgYW55LgogIGZpbmFsIExpc3Q8VXJpPiBwYXRjaGVzOwoKICAvLy8gV2hldGhlciB0aGUgbGlicmFyeSBpcyBzdXBwb3J0ZWQgYW5kIHRodXMgYGRhcnQubGlicmFyeS5uYW1lYCBpcyAidHJ1ZSIKICAvLy8gZm9yIGNvbmRpdGlvbmFsIGltcG9ydHMgYW5kIGZyb21FbnZpcm9ubWVudCBjb25zdGFudHMuCiAgZmluYWwgYm9vbCBpc1N1cHBvcnRlZDsKCiAgY29uc3QgTGlicmFyeUluZm8odGhpcy5uYW1lLCB0aGlzLnVyaSwgdGhpcy5wYXRjaGVzLAogICAgICB7dGhpcy5pc1N1cHBvcnRlZDogdHJ1ZX0pOwp9CgpjbGFzcyBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uRXhjZXB0aW9uIHsKICBPYmplY3QgZXJyb3I7CiAgTGlicmFyaWVzU3BlY2lmaWNhdGlvbkV4Y2VwdGlvbih0aGlzLmVycm9yKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRlcnJvcic7Cn0KgQwATk48ATQEUVEtBEY9BDAEChIbGi0gMjEVEhsuORIdMhIdMiYSDgwKBBlMSQRQHwRQUVAZBFE4BFBQQgRMRxwEUEhLQwRKSU9PTlFLTzEEBEw3Jx5FBEZPMQE2MwE7OQE3BFAPHzwBIEkBSxFBQB4xPAYXBAFQHAZNFkI9IwonGkUIHiU0BjgyNzpEIB1ECDI0QQg3I08IMhwfUAopJklDDCo6UQwqCgEwGycUTDA4Lh4RH0YKATciTEIKGkkKHEMIMAQBJzgBLAY8SgEhFSZDLBouHCM4CyAwCgo1CBMEAgFLJSMbAS0BNjoBPD8BPwIBRxRPIRUBQBEBSBsBTj0aATchAgEoEC8BIQIBN3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9iYXNlL2xpYnJhcmllc19zcGVjaWZpY2F0aW9uLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydJQtLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29tcGlsZXJfY29udGV4dDsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmUsIFpvbmUsIHJ1blpvbmVkOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBTb3VyY2U7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKaW1wb3J0ICcuLi9iYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnQnIHNob3cgUHJvY2Vzc2VkT3B0aW9uczsKCmltcG9ydCAnc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFN0cmluZ1Rva2VuOwoKaW1wb3J0ICdjb21tYW5kX2xpbmVfcmVwb3J0aW5nLmRhcnQnIGFzIGNvbW1hbmRfbGluZV9yZXBvcnRpbmc7CgppbXBvcnQgJ2NvbG9ycy5kYXJ0JyBzaG93IGNvbXB1dGVFbmFibGVDb2xvcnM7CgppbXBvcnQgJ2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93IExvY2F0ZWRNZXNzYWdlLCBNZXNzYWdlLCBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQ7CgppbXBvcnQgJ3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgpmaW5hbCBPYmplY3QgY29tcGlsZXJDb250ZXh0S2V5ID0gbmV3IE9iamVjdCgpOwoKLy8vIFNoYXJlZCBjb250ZXh0IHVzZWQgdGhyb3VnaG91dCB0aGUgY29tcGlsZXIuCi8vLwovLy8gVGhlIGNvbXBpbGVyIHdvcmtzIHdpdGggYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4gVG8gYXZvaWQKLy8vIHBhc3NpbmcgaXQgYXJvdW5kIGFzIGFuIGFyZ3VtZW50IGV2ZXJ5d2hlcmUsIGl0IGlzIHN0b3JlZCBhcyBhIHpvbmUtdmFsdWUuCi8vLwovLy8gRm9yIGNvbnZlbmllbmNlIHRoZSBzdGF0aWMgZ2V0dGVyIFtDb21waWxlckNvbnRleHQuY3VycmVudF0gcmV0cmlldmVzIHRoZQovLy8gY29udGV4dCBzdG9yZWQgaW4gdGhlIGN1cnJlbnQgem9uZS4KY2xhc3MgQ29tcGlsZXJDb250ZXh0IHsKICAvLyBUT0RPKHNpZ211bmQpOiBNb3ZlIGhlcmUgYW55IG1ldGhvZCBpbiBQcm9jZXNzZWRPcHRpb25zIHRoYXQgZG9lc24ndCBzZWVtCiAgLy8gYXBwcm9wcmlhdGUgYXMgYW4gIm9wdGlvbiIsIG9yIGNvbnNpZGVyIG1lcmdpbmcgUHJvY2Vzc2VkT3B0aW9ucyBlbnRpcmVseQogIC8vIHdpdGhpbiB0aGlzIGNsYXNzLCBhbmQgZGVwZW5kIG9ubHkgb24gdGhlIHJhdyBvcHRpb25zIGhlcmUuCiAgZmluYWwgUHJvY2Vzc2VkT3B0aW9ucyBvcHRpb25zOwoKICAvLy8gU291cmNlcyBzZWVuIGJ5IHRoZSBjb21waWxlci4KICAvLy8KICAvLy8gVGhpcyBpcyBwb3B1bGF0ZWQgYXMgdGhlIGNvbXBpbGVyIHJlYWRzIGZpbGVzLCBhbmQgaXQgaXMgdXNlZCBmb3IgZXJyb3IKICAvLy8gcmVwb3J0aW5nIGFuZCB0byBnZW5lcmF0ZSBzb3VyY2UgbG9jYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlIGNvbXBpbGVkCiAgLy8vIHByb2dyYW1zLgogIGZpbmFsIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSA8VXJpLCBTb3VyY2U+e307CgogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMuCiAgZmluYWwgTGlzdDxPYmplY3Q+IGVycm9ycyA9IDxPYmplY3Q+W107CgogIGZpbmFsIExpc3Q8VXJpPiBkZXBlbmRlbmNpZXMgPSA8VXJpPltdOwoKICBGaWxlU3lzdGVtIGdldCBmaWxlU3lzdGVtID0+IG9wdGlvbnMuZmlsZVN5c3RlbTsKCiAgYm9vbCBlbmFibGVDb2xvcnNDYWNoZWQgPSBudWxsOwoKICBVcmkgY2FjaGVkU2RrUm9vdCA9IG51bGw7CgogIENvbXBpbGVyQ29udGV4dCh0aGlzLm9wdGlvbnMpOwoKICB2b2lkIGRpc2FibGVDb2xvcnMoKSB7CiAgICBlbmFibGVDb2xvcnNDYWNoZWQgPSBmYWxzZTsKICB9CgogIC8vLyBSZXBvcnQgW21lc3NhZ2VdLCBmb3IgZXhhbXBsZSwgYnkgcHJpbnRpbmcgaXQuCiAgdm9pZCByZXBvcnQoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgb3B0aW9ucy5yZXBvcnQobWVzc2FnZSwgc2V2ZXJpdHksIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgLy8vIFJlcG9ydCBbbWVzc2FnZV0sIGZvciBleGFtcGxlLCBieSBwcmludGluZyBpdC4KICAvLyBUT0RPKGFza2VzYyk6IFJlbW92ZSB0aGlzIGFuZCBkaXJlY3QgY2FsbGVycyBkaXJlY3RseSB0byByZXBvcnQuCiAgdm9pZCByZXBvcnRXaXRob3V0TG9jYXRpb24oTWVzc2FnZSBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSkgewogICAgb3B0aW9ucy5yZXBvcnRXaXRob3V0TG9jYXRpb24obWVzc2FnZSwgc2V2ZXJpdHkpOwogIH0KCiAgLy8vIEZvcm1hdCBbbWVzc2FnZV0gYXMgYSB0ZXh0IHN0cmluZyB0aGF0IGNhbiBiZSBpbmNsdWRlZCBpbiBnZW5lcmF0ZWQgY29kZS4KICBTdHJpbmcgZm9ybWF0KExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICByZXR1cm4gY29tbWFuZF9saW5lX3JlcG9ydGluZy5mb3JtYXQobWVzc2FnZSwgc2V2ZXJpdHkpOwogIH0KCiAgLy8vIEZvcm1hdCBbbWVzc2FnZV0gYXMgYSB0ZXh0IHN0cmluZyB0aGF0IGNhbiBiZSBpbmNsdWRlZCBpbiBnZW5lcmF0ZWQgY29kZS4KICAvLyBUT0RPKGFza2VzYyk6IFJlbW92ZSB0aGlzIGFuZCBkaXJlY3QgY2FsbGVycyBkaXJlY3RseSB0byBmb3JtYXQuCiAgU3RyaW5nIGZvcm1hdFdpdGhvdXRMb2NhdGlvbihNZXNzYWdlIG1lc3NhZ2UsIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICByZXR1cm4gY29tbWFuZF9saW5lX3JlcG9ydGluZy5mb3JtYXQobWVzc2FnZS53aXRob3V0TG9jYXRpb24oKSwgc2V2ZXJpdHkpOwogIH0KCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcy4KICB2b2lkIGxvZ0Vycm9yKE9iamVjdCBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSkgewogICAgZXJyb3JzLmFkZChtZXNzYWdlKTsKICAgIGVycm9ycy5hZGQoc2V2ZXJpdHkpOwogIH0KCiAgc3RhdGljIHZvaWQgcmVjb3JkRGVwZW5kZW5jeShVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSAhPSAiZmlsZSIpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkV4cGVjdGVkIGEgZmlsZS1VUkksIGJ1dCBnb3Q6ICckdXJpJy4iKTsKICAgIH0KICAgIENvbXBpbGVyQ29udGV4dCBjb250ZXh0ID0gWm9uZS5jdXJyZW50W2NvbXBpbGVyQ29udGV4dEtleV07CiAgICBpZiAoY29udGV4dCAhPSBudWxsKSB7CiAgICAgIGNvbnRleHQuZGVwZW5kZW5jaWVzLmFkZCh1cmkpOwogICAgfQogIH0KCiAgc3RhdGljIENvbXBpbGVyQ29udGV4dCBnZXQgY3VycmVudCB7CiAgICBDb21waWxlckNvbnRleHQgY29udGV4dCA9IFpvbmUuY3VycmVudFtjb21waWxlckNvbnRleHRLZXldOwogICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgewogICAgICAvLyBOb3RlOiB3ZSB0aHJvdyBkaXJlY3RseSBhbmQgZG9uJ3QgdXNlIGludGVybmFsUHJvYmxlbSwgYmVjYXVzZQogICAgICAvLyBpbnRlcm5hbFByb2JsZW0gZGVwZW5kcyBvbiBoYXZpbmcgYSBjb21waWxlciBjb250ZXh0IGF2YWlsYWJsZS4KICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQubWVzc2FnZTsKICAgICAgU3RyaW5nIHRpcCA9IG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dC50aXA7CiAgICAgIHRocm93ICJJbnRlcm5hbCBwcm9ibGVtOiAkbWVzc2FnZVxuVGlwOiAkdGlwIjsKICAgIH0KICAgIHJldHVybiBjb250ZXh0OwogIH0KCiAgc3RhdGljIGJvb2wgZ2V0IGlzQWN0aXZlID0+IFpvbmUuY3VycmVudFtjb21waWxlckNvbnRleHRLZXldICE9IG51bGw7CgogIC8vLyBQZXJmb3JtIFthY3Rpb25dIGluIGEgW1pvbmVdIHdoZXJlIFt0aGlzXSB3aWxsIGJlIGF2YWlsYWJsZSBhcwogIC8vLyBgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnRgLgogIEZ1dHVyZTxUPiBydW5JbkNvbnRleHQ8VD4oRnV0dXJlPFQ+IGFjdGlvbihDb21waWxlckNvbnRleHQgYykpIHsKICAgIHJldHVybiBydW5ab25lZCgKICAgICAgICAoKSA9PiBuZXcgRnV0dXJlPFQ+LnN5bmMoKCkgPT4gYWN0aW9uKHRoaXMpKS53aGVuQ29tcGxldGUoY2xlYXIpLAogICAgICAgIHpvbmVWYWx1ZXM6IHtjb21waWxlckNvbnRleHRLZXk6IHRoaXN9KTsKICB9CgogIC8vLyBQZXJmb3JtIFthY3Rpb25dIGluIGEgW1pvbmVdIHdoZXJlIFtvcHRpb25zXSB3aWxsIGJlIGF2YWlsYWJsZSBhcwogIC8vLyBgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9uc2AuCiAgc3RhdGljIEZ1dHVyZTxUPiBydW5XaXRoT3B0aW9uczxUPigKICAgICAgUHJvY2Vzc2VkT3B0aW9ucyBvcHRpb25zLCBGdXR1cmU8VD4gYWN0aW9uKENvbXBpbGVyQ29udGV4dCBjKSwKICAgICAge2Jvb2wgZXJyb3JPbk1pc3NpbmdJbnB1dDogdHJ1ZX0pIHsKICAgIHJldHVybiBuZXcgQ29tcGlsZXJDb250ZXh0KG9wdGlvbnMpCiAgICAgICAgLnJ1bkluQ29udGV4dDxUPigoQ29tcGlsZXJDb250ZXh0IGMpIGFzeW5jIHsKICAgICAgYXdhaXQgb3B0aW9ucy52YWxpZGF0ZU9wdGlvbnMoZXJyb3JPbk1pc3NpbmdJbnB1dDogZXJyb3JPbk1pc3NpbmdJbnB1dCk7CiAgICAgIHJldHVybiBhY3Rpb24oYyk7CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8VD4gcnVuV2l0aERlZmF1bHRPcHRpb25zPFQ+KAogICAgICBGdXR1cmU8VD4gYWN0aW9uKENvbXBpbGVyQ29udGV4dCBjKSkgewogICAgcmV0dXJuIG5ldyBDb21waWxlckNvbnRleHQobmV3IFByb2Nlc3NlZE9wdGlvbnMoKSkucnVuSW5Db250ZXh0PFQ+KGFjdGlvbik7CiAgfQoKICBzdGF0aWMgYm9vbCBnZXQgZW5hYmxlQ29sb3JzIHsKICAgIHJldHVybiBjdXJyZW50LmVuYWJsZUNvbG9yc0NhY2hlZCA/Pz0gY29tcHV0ZUVuYWJsZUNvbG9ycyhjdXJyZW50KTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBTdHJpbmdUb2tlbi5jYW5vbmljYWxpemVyLmNsZWFyKCk7CiAgICBlcnJvcnMuY2xlYXIoKTsKICAgIGRlcGVuZGVuY2llcy5jbGVhcigpOwogIH0KfQqAmgBOTjwBIAExAS4BPAE/AS4BQAEvARpIASYBMAExBEZPBE4oGE9PQSIBJAZOTBA4AR0qASoBMwEiARwBIQEZIAQBNTkoOQQBNUZDNgQBUD09BAFQRkVPBAEdNRkaBAEqIEgGQBslBgQBJ0AbSElFPTUGFAQBSAFFIUMVSjEEAUgpJkUqKDVPGAgEAS0tUAQBIUgEAREnFBoEAgExcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydDVzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZmFzdGFfY29kZXMuZGFydJubLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29kZXM7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBKc29uRW5jb2RlciwganNvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IENvbnN0YW50LCBEYXJ0VHlwZSwgZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZTsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9kaWFnbm9zdGljX21lc3NhZ2UuZGFydCcgc2hvdyBEaWFnbm9zdGljTWVzc2FnZTsKCmltcG9ydCAnLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICdrZXJuZWwvdHlwZV9sYWJlbGVyLmRhcnQnOwoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICdyZXNvbHZlX2lucHV0X3VyaS5kYXJ0JyBzaG93IGlzV2luZG93czsKCmltcG9ydCAndXRpbC9yZWxhdGl2aXplLmRhcnQnIGFzIHV0aWwgc2hvdyByZWxhdGl2aXplVXJpOwoKcGFydCAnZmFzdGFfY29kZXNfZ2VuZXJhdGVkLmRhcnQnOwoKY29uc3QgaW50IG5vTGVuZ3RoID0gMTsKCmNsYXNzIENvZGU8VD4gewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIHVuaXF1ZSBwb3NpdGl2ZSBpbnRlZ2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUsCiAgLy8vIG9yIGAtMWAgaWYgbm9uZS4gVGhpcyBpbmRleCBpcyB1c2VkIHdoZW4gdHJhbnNsYXRpbmcKICAvLy8gdGhpcyBlcnJvciB0byBpdHMgY29ycmVzcG9uZGluZyBBbmFseXplciBlcnJvci4KICBmaW5hbCBpbnQgaW5kZXg7CgogIGZpbmFsIFRlbXBsYXRlPFQ+IHRlbXBsYXRlOwoKICBmaW5hbCBMaXN0PFN0cmluZz4gYW5hbHl6ZXJDb2RlczsKCiAgZmluYWwgU2V2ZXJpdHkgc2V2ZXJpdHk7CgogIGNvbnN0IENvZGUodGhpcy5uYW1lLCB0aGlzLnRlbXBsYXRlLAogICAgICB7aW50IGluZGV4LCB0aGlzLmFuYWx5emVyQ29kZXMsIHRoaXMuc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yfSkKICAgICAgOiB0aGlzLmluZGV4ID0gaW5kZXggPz8gLTE7CgogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7Cn0KCmNsYXNzIE1lc3NhZ2UgewogIGZpbmFsIENvZGU8ZHluYW1pYz4gY29kZTsKCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIGZpbmFsIFN0cmluZyB0aXA7CgogIGZpbmFsIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGFyZ3VtZW50czsKCiAgY29uc3QgTWVzc2FnZSh0aGlzLmNvZGUsIHt0aGlzLm1lc3NhZ2UsIHRoaXMudGlwLCB0aGlzLmFyZ3VtZW50c30pOwoKICBMb2NhdGVkTWVzc2FnZSB3aXRoTG9jYXRpb24oVXJpIHVyaSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgTG9jYXRlZE1lc3NhZ2UodXJpLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIHRoaXMpOwogIH0KCiAgTG9jYXRlZE1lc3NhZ2Ugd2l0aG91dExvY2F0aW9uKCkgewogICAgcmV0dXJuIG5ldyBMb2NhdGVkTWVzc2FnZShudWxsLCAtMSwgbm9MZW5ndGgsIHRoaXMpOwogIH0KfQoKY2xhc3MgTWVzc2FnZUNvZGUgZXh0ZW5kcyBDb2RlPE51bGw+IGltcGxlbWVudHMgTWVzc2FnZSB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIGZpbmFsIFN0cmluZyB0aXA7CgogIGNvbnN0IE1lc3NhZ2VDb2RlKFN0cmluZyBuYW1lLAogICAgICB7aW50IGluZGV4LAogICAgICBMaXN0PFN0cmluZz4gYW5hbHl6ZXJDb2RlcywKICAgICAgU2V2ZXJpdHkgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yLAogICAgICB0aGlzLm1lc3NhZ2UsCiAgICAgIHRoaXMudGlwfSkKICAgICAgOiBzdXBlcihuYW1lLCBudWxsLAogICAgICAgICAgICBpbmRleDogaW5kZXgsIGFuYWx5emVyQ29kZXM6IGFuYWx5emVyQ29kZXMsIHNldmVyaXR5OiBzZXZlcml0eSk7CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldCBhcmd1bWVudHMgPT4gY29uc3QgPFN0cmluZywgZHluYW1pYz57fTsKCiAgQ29kZTxkeW5hbWljPiBnZXQgY29kZSA9PiB0aGlzOwoKICBAb3ZlcnJpZGUKICBMb2NhdGVkTWVzc2FnZSB3aXRoTG9jYXRpb24oVXJpIHVyaSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgTG9jYXRlZE1lc3NhZ2UodXJpLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIHRoaXMpOwogIH0KCiAgTG9jYXRlZE1lc3NhZ2Ugd2l0aG91dExvY2F0aW9uKCkgewogICAgcmV0dXJuIG5ldyBMb2NhdGVkTWVzc2FnZShudWxsLCAtMSwgbm9MZW5ndGgsIHRoaXMpOwogIH0KfQoKY2xhc3MgVGVtcGxhdGU8VD4gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlVGVtcGxhdGU7CgogIGZpbmFsIFN0cmluZyB0aXBUZW1wbGF0ZTsKCiAgZmluYWwgVCB3aXRoQXJndW1lbnRzOwoKICBjb25zdCBUZW1wbGF0ZSh7dGhpcy5tZXNzYWdlVGVtcGxhdGUsIHRoaXMudGlwVGVtcGxhdGUsIHRoaXMud2l0aEFyZ3VtZW50c30pOwp9CgpjbGFzcyBMb2NhdGVkTWVzc2FnZSBpbXBsZW1lbnRzIENvbXBhcmFibGU8TG9jYXRlZE1lc3NhZ2U+IHsKICBmaW5hbCBVcmkgdXJpOwoKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgZmluYWwgaW50IGxlbmd0aDsKCiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlT2JqZWN0OwoKICBjb25zdCBMb2NhdGVkTWVzc2FnZSgKICAgICAgdGhpcy51cmksIHRoaXMuY2hhck9mZnNldCwgdGhpcy5sZW5ndGgsIHRoaXMubWVzc2FnZU9iamVjdCk7CgogIENvZGU8ZHluYW1pYz4gZ2V0IGNvZGUgPT4gbWVzc2FnZU9iamVjdC5jb2RlOwoKICBTdHJpbmcgZ2V0IG1lc3NhZ2UgPT4gbWVzc2FnZU9iamVjdC5tZXNzYWdlOwoKICBTdHJpbmcgZ2V0IHRpcCA9PiBtZXNzYWdlT2JqZWN0LnRpcDsKCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IGFyZ3VtZW50cyA9PiBtZXNzYWdlT2JqZWN0LmFyZ3VtZW50czsKCiAgaW50IGNvbXBhcmVUbyhMb2NhdGVkTWVzc2FnZSBvdGhlcikgewogICAgaW50IHJlc3VsdCA9ICIke3VyaX0iLmNvbXBhcmVUbygiJHtvdGhlci51cml9Iik7CiAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7CiAgICByZXN1bHQgPSBjaGFyT2Zmc2V0LmNvbXBhcmVUbyhvdGhlci5jaGFyT2Zmc2V0KTsKICAgIGlmIChyZXN1bHQgIT0gMCkgcmV0dXJuIHJlc3VsdDsKICAgIHJldHVybiBtZXNzYWdlLmNvbXBhcmVUbyhtZXNzYWdlKTsKICB9CgogIEZvcm1hdHRlZE1lc3NhZ2Ugd2l0aEZvcm1hdHRpbmcoU3RyaW5nIGZvcm1hdHRlZCwgaW50IGxpbmUsIGludCBjb2x1bW4sCiAgICAgIFNldmVyaXR5IHNldmVyaXR5LCBMaXN0PEZvcm1hdHRlZE1lc3NhZ2U+IHJlbGF0ZWRJbmZvcm1hdGlvbikgewogICAgcmV0dXJuIG5ldyBGb3JtYXR0ZWRNZXNzYWdlKAogICAgICAgIHRoaXMsIGZvcm1hdHRlZCwgbGluZSwgY29sdW1uLCBzZXZlcml0eSwgcmVsYXRlZEluZm9ybWF0aW9uKTsKICB9Cn0KCmNsYXNzIEZvcm1hdHRlZE1lc3NhZ2UgaW1wbGVtZW50cyBEaWFnbm9zdGljTWVzc2FnZSB7CiAgZmluYWwgTG9jYXRlZE1lc3NhZ2UgbG9jYXRlZE1lc3NhZ2U7CgogIGZpbmFsIFN0cmluZyBmb3JtYXR0ZWQ7CgogIGZpbmFsIGludCBsaW5lOwoKICBmaW5hbCBpbnQgY29sdW1uOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXZlcml0eSBzZXZlcml0eTsKCiAgZmluYWwgTGlzdDxGb3JtYXR0ZWRNZXNzYWdlPiByZWxhdGVkSW5mb3JtYXRpb247CgogIGNvbnN0IEZvcm1hdHRlZE1lc3NhZ2UodGhpcy5sb2NhdGVkTWVzc2FnZSwgdGhpcy5mb3JtYXR0ZWQsIHRoaXMubGluZSwKICAgICAgdGhpcy5jb2x1bW4sIHRoaXMuc2V2ZXJpdHksIHRoaXMucmVsYXRlZEluZm9ybWF0aW9uKTsKCiAgQ29kZTxkeW5hbWljPiBnZXQgY29kZSA9PiBsb2NhdGVkTWVzc2FnZS5jb2RlOwoKICBTdHJpbmcgZ2V0IG1lc3NhZ2UgPT4gbG9jYXRlZE1lc3NhZ2UubWVzc2FnZTsKCiAgU3RyaW5nIGdldCB0aXAgPT4gbG9jYXRlZE1lc3NhZ2UudGlwOwoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgYXJndW1lbnRzID0+IGxvY2F0ZWRNZXNzYWdlLmFyZ3VtZW50czsKCiAgVXJpIGdldCB1cmkgPT4gbG9jYXRlZE1lc3NhZ2UudXJpOwoKICBpbnQgZ2V0IGNoYXJPZmZzZXQgPT4gbG9jYXRlZE1lc3NhZ2UuY2hhck9mZnNldDsKCiAgaW50IGdldCBsZW5ndGggPT4gbG9jYXRlZE1lc3NhZ2UubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBhbnNpRm9ybWF0dGVkIHN5bmMqIHsKICAgIHlpZWxkIGZvcm1hdHRlZDsKICAgIGlmIChyZWxhdGVkSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hdHRlZE1lc3NhZ2UgbSBpbiByZWxhdGVkSW5mb3JtYXRpb24pIHsKICAgICAgICB5aWVsZCBtLmZvcm1hdHRlZDsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGxhaW5UZXh0Rm9ybWF0dGVkIHsKICAgIC8vIFRPRE8oYWhlKTogSW1wbGVtZW50IHRoaXMgY29ycmVjdGx5LgogICAgcmV0dXJuIGFuc2lGb3JtYXR0ZWQ7CiAgfQoKICBNYXA8U3RyaW5nLCBPYmplY3Q+IHRvSnNvbigpIHsKICAgIC8vIFRoaXMgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHBhY2thZ2U6a2VybmVsL3Byb2JsZW1zLm1kCiAgICByZXR1cm4gPFN0cmluZywgT2JqZWN0PnsKICAgICAgImFuc2lGb3JtYXR0ZWQiOiBhbnNpRm9ybWF0dGVkLnRvTGlzdCgpLAogICAgICAicGxhaW5UZXh0Rm9ybWF0dGVkIjogcGxhaW5UZXh0Rm9ybWF0dGVkLnRvTGlzdCgpLAogICAgICAic2V2ZXJpdHkiOiBzZXZlcml0eS5pbmRleCwKICAgICAgInVyaSI6IHVyaS50b1N0cmluZygpLAogICAgfTsKICB9CgogIFN0cmluZyB0b0pzb25TdHJpbmcoKSB7CiAgICBKc29uRW5jb2RlciBlbmNvZGVyID0gbmV3IEpzb25FbmNvZGVyLndpdGhJbmRlbnQoIiAgIik7CiAgICByZXR1cm4gZW5jb2Rlci5jb252ZXJ0KHRoaXMpOwogIH0KfQoKY2xhc3MgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiBpbXBsZW1lbnRzIERpYWdub3N0aWNNZXNzYWdlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxTdHJpbmc+IGFuc2lGb3JtYXR0ZWQ7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPFN0cmluZz4gcGxhaW5UZXh0Rm9ybWF0dGVkOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXZlcml0eSBzZXZlcml0eTsKCiAgZmluYWwgVXJpIHVyaTsKCiAgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbigKICAgICAgdGhpcy5hbnNpRm9ybWF0dGVkLCB0aGlzLnBsYWluVGV4dEZvcm1hdHRlZCwgdGhpcy5zZXZlcml0eSwgdGhpcy51cmkpOwoKICBmYWN0b3J5IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24uZnJvbUpzb24oU3RyaW5nIGpzb25TdHJpbmcpIHsKICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZGVjb2RlZCA9IGpzb24uZGVjb2RlKGpzb25TdHJpbmcpOwogICAgTGlzdDxTdHJpbmc+IGFuc2lGb3JtYXR0ZWQgPQogICAgICAgIG5ldyBMaXN0PFN0cmluZz4uZnJvbShkZWNvZGVkWyJhbnNpRm9ybWF0dGVkIl0pOwogICAgTGlzdDxTdHJpbmc+IHBsYWluVGV4dEZvcm1hdHRlZCA9CiAgICAgICAgbmV3IExpc3Q8U3RyaW5nPi5mcm9tKGRlY29kZWRbInBsYWluVGV4dEZvcm1hdHRlZCJdKTsKICAgIFNldmVyaXR5IHNldmVyaXR5ID0gU2V2ZXJpdHkudmFsdWVzW2RlY29kZWRbInNldmVyaXR5Il1dOwogICAgVXJpIHVyaSA9IFVyaS5wYXJzZShkZWNvZGVkWyJ1cmkiXSk7CgogICAgcmV0dXJuIG5ldyBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uKAogICAgICAgIGFuc2lGb3JtYXR0ZWQsIHBsYWluVGV4dEZvcm1hdHRlZCwgc2V2ZXJpdHksIHVyaSk7CiAgfQoKICBNYXA8U3RyaW5nLCBPYmplY3Q+IHRvSnNvbigpIHsKICAgIC8vIFRoaXMgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHBhY2thZ2U6a2VybmVsL3Byb2JsZW1zLm1kCiAgICByZXR1cm4gPFN0cmluZywgT2JqZWN0PnsKICAgICAgImFuc2lGb3JtYXR0ZWQiOiBhbnNpRm9ybWF0dGVkLnRvTGlzdCgpLAogICAgICAicGxhaW5UZXh0Rm9ybWF0dGVkIjogcGxhaW5UZXh0Rm9ybWF0dGVkLnRvTGlzdCgpLAogICAgICAic2V2ZXJpdHkiOiBzZXZlcml0eS5pbmRleCwKICAgICAgInVyaSI6IHVyaS50b1N0cmluZygpLAogICAgfTsKICB9CgogIFN0cmluZyB0b0pzb25TdHJpbmcoKSB7CiAgICBKc29uRW5jb2RlciBlbmNvZGVyID0gbmV3IEpzb25FbmNvZGVyLndpdGhJbmRlbnQoIiAgIik7CiAgICByZXR1cm4gZW5jb2Rlci5jb252ZXJ0KHRoaXMpOwogIH0KfQoKU3RyaW5nIHJlbGF0aXZpemVVcmkoVXJpIHVyaSkgewogIC8vIFdlIGhhdmUgdGhpcyBtZXRob2QgaGVyZSBmb3IgdHdvIHJlYXNvbnM6CiAgLy8KICAvLyAxLiBJdCBhbGxvd3MgdXMgdG8gaW1wbGVtZW50ICN1cmkgbWVzc2FnZSBhcmd1bWVudCB3aXRob3V0IHVzaW5nIGl0CiAgLy8gKG90aGVyd2lzZSwgd2UgbWlnaHQgZ2V0IGFuIGBVTlVTRURfSU1QT1JUYCB3YXJuaW5nKS4KICAvLwogIC8vIDIuIFdlIGNhbiBjaGFuZ2UgYGJhc2VgIGFyZ3VtZW50IGhlcmUgaWYgbmVlZGVkLgogIHJldHVybiB1cmkgPT0gbnVsbCA/IG51bGwgOiB1dGlsLnJlbGF0aXZpemVVcmkoVXJpLmJhc2UsIHVyaSwgaXNXaW5kb3dzKTsKfQoKdHlwZWRlZiBTdW1tYXJ5VGVtcGxhdGUgPSBNZXNzYWdlIEZ1bmN0aW9uKGludCwgaW50LCBudW0sIG51bSwgbnVtKTsKClN0cmluZyBpdGVtaXplTmFtZXMoTGlzdDxTdHJpbmc+IG5hbWVzKSB7CiAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aCAtIDE7IGkrKykgewogICAgYnVmZmVyLndyaXRlKCIgLSAiKTsKICAgIGJ1ZmZlci53cml0ZWxuKG5hbWVzW2ldKTsKICB9CiAgYnVmZmVyLndyaXRlKCIgLSAiKTsKICBidWZmZXIud3JpdGUobmFtZXMubGFzdCk7CiAgcmV0dXJuICIkYnVmZmVyIjsKfQqBEABOTjwBFQEuASE7AUoBKwEjASYBMAE6ASMBGAEQFQE9OzYTAR4BJAEbASdGIgEdAgEQHAEYARQBKAFGAUU+BAElOQQCAToYARQBIRIiKRQRGk0BQwEiAQxFPgQBJTkEAgEUIAEcARkBUAIBPREBGAEUAR8BGEMBMAEvAScBQQEoNSQ1JCcEAUpGIUYEAgE2JwEaARIBFAEMGwEzAUk8ATEBMAEoAUIBJQEzASsBDC0VJjcbCAYEAQwsLBoEASFDHS85Ih0HBAEaPCIEAgE/DCgBDC0BDBsBEQEdTQFCOyE5Jj4+KQEqOwQBIUMdLzkiHQcEARo8IgQCASAvBUk7BTZMAgFFASosLxkeBBccFAIBLHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9mYXN0YV9jb2Rlc19nZW5lcmF0ZWQuZGFydMAGzEsvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gTk9URTogVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gRE8gTk9UIEVESVQuCi8vCi8vIEluc3RlYWQgbW9kaWZ5ICdwa2cvZnJvbnRfZW5kL21lc3NhZ2VzLnlhbWwnIGFuZCBydW4KLy8gJ3BrZy9mcm9udF9lbmQvdG9vbC9mYXN0YSBnZW5lcmF0ZS1tZXNzYWdlcycgdG8gdXBkYXRlLgoKLy8gaWdub3JlX2Zvcl9maWxlOiBsaW5lc19sb25nZXJfdGhhbl84MF9jaGFycwoKcGFydCBvZiBmYXN0YS5jb2RlczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVGhlIGNsYXNzICcjbmFtZScgaXMgYWJzdHJhY3QgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uIiwgdGVtcGxhdGVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTkVXX1dJVEhfQUJTVFJBQ1RfQ0xBU1MiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uLAogICAgICBtZXNzYWdlOiAiIiJUaGUgY2xhc3MgJyR7bmFtZX0nIGlzIGFic3RyYWN0IGFuZCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQWJzdHJhY3RDbGFzc01lbWJlciA9IG1lc3NhZ2VBYnN0cmFjdENsYXNzTWVtYmVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUFic3RyYWN0Q2xhc3NNZW1iZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJBYnN0cmFjdENsYXNzTWVtYmVyIiwKICAgIGluZGV4OiA1MSwKICAgIG1lc3NhZ2U6IHIiIiJNZW1iZXJzIG9mIGNsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2Fic3RyYWN0Jy4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgJ2Fic3RyYWN0JyBrZXl3b3JkLiBZb3UgY2FuIGFkZCB0aGUgJ2Fic3RyYWN0JyBrZXl3b3JkIGJlZm9yZSB0aGUgY2xhc3MgZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUFic3RyYWN0Tm90U3luYyA9IG1lc3NhZ2VBYnN0cmFjdE5vdFN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQWJzdHJhY3ROb3RTeW5jID0gY29uc3QgTWVzc2FnZUNvZGUoIkFic3RyYWN0Tm90U3luYyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9OX1NZTkNfQUJTVFJBQ1RfTUVUSE9EIl0sCiAgICBtZXNzYWdlOiByIiIiQWJzdHJhY3QgbWV0aG9kcyBjYW4ndCB1c2UgJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJGYWN0b3J5IHJlZGlyZWN0cyB0byBjbGFzcyAnI25hbWUnLCB3aGljaCBpcyBhYnN0cmFjdCBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb24iLAogICAgICAgIHRlbXBsYXRlQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGQUNUT1JZX1JFRElSRUNUU19UT19BQlNUUkFDVF9DTEFTUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0Fic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUFic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkZhY3RvcnkgcmVkaXJlY3RzIHRvIGNsYXNzICcke25hbWV9Jywgd2hpY2ggaXMgYWJzdHJhY3QgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVBY2Nlc3NFcnJvciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQWNjZXNzIGVycm9yOiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0FjY2Vzc0Vycm9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVBY2Nlc3NFcnJvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiQWNjZXNzRXJyb3IiLAogIHRlbXBsYXRlQWNjZXNzRXJyb3IsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQWNjZXNzRXJyb3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVBY2Nlc3NFcnJvciwKICAgICAgbWVzc2FnZTogIiIiQWNjZXNzIGVycm9yOiAnJHtuYW1lfScuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICB0ZW1wbGF0ZUFtYmlndW91c1N1cGVydHlwZXMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgY2FuJ3QgaW1wbGVtZW50IGJvdGggJyN0eXBlJyBhbmQgJyN0eXBlMiciIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNBbWJpZ3VvdXNTdXBlcnR5cGVzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlQW1iaWd1b3VzU3VwZXJ0eXBlcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiQW1iaWd1b3VzU3VwZXJ0eXBlcyIsIHRlbXBsYXRlQW1iaWd1b3VzU3VwZXJ0eXBlcywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQU1CSUdVT1VTX1NVUEVSVFlQRVMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQW1iaWd1b3VzU3VwZXJ0eXBlcygKICAgIFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVBbWJpZ3VvdXNTdXBlcnR5cGVzLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgY2FuJ3QgaW1wbGVtZW50IGJvdGggJyR7dHlwZX0nIGFuZCAnJHt0eXBlMn0nIiIiICsKICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUFub255bW91c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIG1lc3NhZ2VBbm9ueW1vdXNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VBbm9ueW1vdXNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbiA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiQW5vbnltb3VzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24iLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJMQUJFTF9JTl9PVVRFUl9TQ09QRSJdLAogICAgICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBicmVhayB0byBhIHRhcmdldCBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQW5vbnltb3VzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24gPQogICAgbWVzc2FnZUFub255bW91c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUFub255bW91c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJBbm9ueW1vdXNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbiIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkxBQkVMX0lOX09VVEVSX1NDT1BFIl0sCiAgICAgICAgbWVzc2FnZTogciIiIkNhbid0IGNvbnRpbnVlIGF0IGEgdGFyZ2V0IGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBhcmd1bWVudCB0eXBlICcjdHlwZScgY2FuJ3QgYmUgYXNzaWduZWQgdG8gdGhlIHBhcmFtZXRlciB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciwgb3IgY2FzdGluZyB0aGUgYXJndW1lbnQgdG8gJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUiLCB0ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFSR1VNRU5UX1RZUEVfTk9UX0FTU0lHTkFCTEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBhcmd1bWVudCB0eXBlICcke3R5cGV9JyBjYW4ndCBiZSBhc3NpZ25lZCB0byB0aGUgcGFyYW1ldGVyIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIsIG9yIGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvICcke3R5cGUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIGludAogICAgICAgICAgICBjb2RlUG9pbnQpPiB0ZW1wbGF0ZUFzY2lpQ29udHJvbENoYXJhY3RlciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvZGVQb2ludCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgY29udHJvbCBjaGFyYWN0ZXIgI3VuaWNvZGUgY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0FzY2lpQ29udHJvbENoYXJhY3Rlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvZGVQb2ludCk+IGNvZGVBc2NpaUNvbnRyb2xDaGFyYWN0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb2RlUG9pbnQpPigKICAgICAgICAiQXNjaWlDb250cm9sQ2hhcmFjdGVyIiwgdGVtcGxhdGVBc2NpaUNvbnRyb2xDaGFyYWN0ZXIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfQ0hBUkFDVEVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0FzY2lpQ29udHJvbENoYXJhY3RlcihpbnQgY29kZVBvaW50KSB7CiAgU3RyaW5nIHVuaWNvZGUgPQogICAgICAiVSske2NvZGVQb2ludC50b1JhZGl4U3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnBhZExlZnQoNCwgJzAnKX0iOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQXNjaWlDb250cm9sQ2hhcmFjdGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGNvbnRyb2wgY2hhcmFjdGVyICR7dW5pY29kZX0gY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjb2RlUG9pbnQnOiBjb2RlUG9pbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQXNzZXJ0QXNFeHByZXNzaW9uID0gbWVzc2FnZUFzc2VydEFzRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VBc3NlcnRBc0V4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJBc3NlcnRBc0V4cHJlc3Npb24iLAogICAgbWVzc2FnZTogciIiImBhc3NlcnRgIGNhbid0IGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQXNzZXJ0RXh0cmFuZW91c0FyZ3VtZW50ID0gbWVzc2FnZUFzc2VydEV4dHJhbmVvdXNBcmd1bWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VBc3NlcnRFeHRyYW5lb3VzQXJndW1lbnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJBc3NlcnRFeHRyYW5lb3VzQXJndW1lbnQiLAogICAgbWVzc2FnZTogciIiImBhc3NlcnRgIGNhbid0IGhhdmUgbW9yZSB0aGFuIHR3byBhcmd1bWVudHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUF3YWl0QXNJZGVudGlmaWVyID0gbWVzc2FnZUF3YWl0QXNJZGVudGlmaWVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUF3YWl0QXNJZGVudGlmaWVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQXdhaXRBc0lkZW50aWZpZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFTWU5DX0tFWVdPUkRfVVNFRF9BU19JREVOVElGSUVSIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiInYXdhaXQnIGNhbid0IGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllciBpbiAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJyBtZXRob2RzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVBd2FpdEZvck5vdEFzeW5jID0gbWVzc2FnZUF3YWl0Rm9yTm90QXN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQXdhaXRGb3JOb3RBc3luYyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkF3YWl0Rm9yTm90QXN5bmMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFTWU5DX0ZPUl9JTl9XUk9OR19DT05URVhUIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgYXN5bmNocm9ub3VzIGZvci1pbiBjYW4gb25seSBiZSB1c2VkIGluIGZ1bmN0aW9ucyBtYXJrZWQgd2l0aCAnYXN5bmMnIG9yICdhc3luYyonLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IG1hcmtpbmcgdGhlIGZ1bmN0aW9uIGJvZHkgd2l0aCBlaXRoZXIgJ2FzeW5jJyBvciAnYXN5bmMqJywgb3IgcmVtb3ZpbmcgdGhlICdhd2FpdCcgYmVmb3JlIHRoZSBmb3IgbG9vcC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQXdhaXROb3RBc3luYyA9IG1lc3NhZ2VBd2FpdE5vdEFzeW5jOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUF3YWl0Tm90QXN5bmMgPSBjb25zdCBNZXNzYWdlQ29kZSgiQXdhaXROb3RBc3luYyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQVdBSVRfSU5fV1JPTkdfQ09OVEVYVCJdLAogICAgbWVzc2FnZTogciIiIidhd2FpdCcgY2FuIG9ubHkgYmUgdXNlZCBpbiAnYXN5bmMnIG9yICdhc3luYyonIG1ldGhvZHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICB0ZW1wbGF0ZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkZvdW5kIHVuc3VwcG9ydGVkIHVzZXMgb2YgJyNuYW1lJyBpbiBzdXBlcnR5cGUgJyNuYW1lMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgIkJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlIiwKICB0ZW1wbGF0ZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0JhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGb3VuZCB1bnN1cHBvcnRlZCB1c2VzIG9mICcke25hbWV9JyBpbiBzdXBlcnR5cGUgJyR7bmFtZTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJHZW5lcmljIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gdGhlIGJvdW5kcyBvZiBpdHMgb3duIHR5cGUgdmFyaWFibGVzLiBJdCBpcyByZWZlcmVuY2VkIGluZGlyZWN0bHkgdGhyb3VnaCAnI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnI25hbWUyJyBoZXJlIG9yIHRvIHNvbWUgb3RoZXIgcmF3IHR5cGVzIGluIHRoZSBib3VuZHMgYWxvbmcgdGhlIHJlZmVyZW5jZSBjaGFpbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eSIsCiAgICAgICAgdGVtcGxhdGVCb3VuZElzc3VlVmlhQ3ljbGVOb25TaW1wbGljaXR5LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfSU5TVEFOVElBVEVEX0JPVU5EIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHkoCiAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHksCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJHZW5lcmljIHR5cGUgJyR7bmFtZX0nIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiB0aGUgYm91bmRzIG9mIGl0cyBvd24gdHlwZSB2YXJpYWJsZXMuIEl0IGlzIHJlZmVyZW5jZWQgaW5kaXJlY3RseSB0aHJvdWdoICcke25hbWUyfScuIiIiLAogICAgICB0aXA6ICIiIlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyR7bmFtZTJ9JyBoZXJlIG9yIHRvIHNvbWUgb3RoZXIgcmF3IHR5cGVzIGluIHRoZSBib3VuZHMgYWxvbmcgdGhlIHJlZmVyZW5jZSBjaGFpbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkdlbmVyaWMgdHlwZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiB0aGUgYm91bmRzIG9mIGl0cyBvd24gdHlwZSB2YXJpYWJsZXMuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcHJvdmlkaW5nIHR5cGUgYXJndW1lbnRzIHRvICcjbmFtZScgaGVyZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFMb29wTm9uU2ltcGxpY2l0eSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHkiLAogICAgICAgIHRlbXBsYXRlQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfSU5TVEFOVElBVEVEX0JPVU5EIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFMb29wTm9uU2ltcGxpY2l0eShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUJvdW5kSXNzdWVWaWFMb29wTm9uU2ltcGxpY2l0eSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkdlbmVyaWMgdHlwZSAnJHtuYW1lfScgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIHRoZSBib3VuZHMgb2YgaXRzIG93biB0eXBlIHZhcmlhYmxlcy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnJHtuYW1lfScgaGVyZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJHZW5lcmljIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gYSB0eXBlIHZhcmlhYmxlIGJvdW5kLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyNuYW1lJyBoZXJlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUJvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzIiwKICAgICAgICB0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kcywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0lOU1RBTlRJQVRFRF9CT1VORCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJHZW5lcmljIHR5cGUgJyR7bmFtZX0nIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiBhIHR5cGUgdmFyaWFibGUgYm91bmQuIiIiLAogICAgICB0aXA6ICIiIlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyR7bmFtZX0nIGhlcmUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQnJlYWtPdXRzaWRlT2ZMb29wID0gbWVzc2FnZUJyZWFrT3V0c2lkZU9mTG9vcDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VCcmVha091dHNpZGVPZkxvb3AgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJCcmVha091dHNpZGVPZkxvb3AiLAogICAgaW5kZXg6IDUyLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBicmVhayBzdGF0ZW1lbnQgY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIG9mIGEgbG9vcCBvciBzd2l0Y2ggc3RhdGVtZW50LiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgYnJlYWsgc3RhdGVtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNhbid0IGJyZWFrIHRvICcjbmFtZScgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUJyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbiIsIHRlbXBsYXRlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkxBQkVMX0lOX09VVEVSX1NDT1BFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24sCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGJyZWFrIHRvICcke25hbWV9JyBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckFzVHlwZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVGhlIGJ1aWx0LWluIGlkZW50aWZpZXIgJyNsZXhlbWUnIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIG1hdGNoIGFuIGV4aXN0aW5nIHR5cGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQnVpbHRJbklkZW50aWZpZXJBc1R5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUJ1aWx0SW5JZGVudGlmaWVyQXNUeXBlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJCdWlsdEluSWRlbnRpZmllckFzVHlwZSIsIHRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJBc1R5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkJVSUxUX0lOX0lERU5USUZJRVJfQVNfVFlQRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNCdWlsdEluSWRlbnRpZmllckFzVHlwZShUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVCdWlsdEluSWRlbnRpZmllckFzVHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBidWlsdC1pbiBpZGVudGlmaWVyICcke2xleGVtZX0nIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byBtYXRjaCBhbiBleGlzdGluZyB0eXBlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+CiAgICB0ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgdXNlICcjbGV4ZW1lJyBhcyBhIG5hbWUgaGVyZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigiQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uIiwKICAgICAgICB0ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQlVJTFRfSU5fSURFTlRJRklFUl9JTl9ERUNMQVJBVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCB1c2UgJyR7bGV4ZW1lfScgYXMgYSBuYW1lIGhlcmUuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVCeXRlY29kZUxpbWl0RXhjZWVkZWRUb29NYW55QXJndW1lbnRzID0KICAgIG1lc3NhZ2VCeXRlY29kZUxpbWl0RXhjZWVkZWRUb29NYW55QXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUJ5dGVjb2RlTGltaXRFeGNlZWRlZFRvb01hbnlBcmd1bWVudHMgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkJ5dGVjb2RlTGltaXRFeGNlZWRlZFRvb01hbnlBcmd1bWVudHMiLAogICAgICAgIG1lc3NhZ2U6IHIiIiJEYXJ0IGJ5dGVjb2RlIGxpbWl0IGV4Y2VlZGVkOiB0b28gbWFueSBhcmd1bWVudHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNhbmRpZGF0ZUZvdW5kID0gbWVzc2FnZUNhbmRpZGF0ZUZvdW5kOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbmRpZGF0ZUZvdW5kID0gY29uc3QgTWVzc2FnZUNvZGUoIkNhbmRpZGF0ZUZvdW5kIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIkZvdW5kIHRoaXMgY2FuZGlkYXRlLCBidXQgdGhlIGFyZ3VtZW50cyBkb24ndCBtYXRjaC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRoZSBjbGFzcyAnI25hbWUnIGhhcyBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yIiwKICAgICAgICB0ZW1wbGF0ZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGNsYXNzICcke25hbWV9JyBoYXMgYSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDYW5ub3RBc3NpZ25Ub1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uID0KICAgIG1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb24gPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb24iLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJBU1NJR05NRU5UX1RPX1BBUkVOVEhFU0laRURfRVhQUkVTU0lPTiJdLAogICAgICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBhc3NpZ24gdG8gYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNhbm5vdEFzc2lnblRvU3VwZXIgPSBtZXNzYWdlQ2Fubm90QXNzaWduVG9TdXBlcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1N1cGVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2Fubm90QXNzaWduVG9TdXBlciIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0FOX0xWQUxVRSJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGFzc2lnbiB0byBzdXBlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIHRlbXBsYXRlQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVW5hYmxlIHRvIHJlYWQgdGhlICdsaWJyYXJpZXMuanNvbicgc3BlY2lmaWNhdGlvbiBmaWxlOgogICNzdHJpbmcuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAiQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24iLAogIHRlbXBsYXRlQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24sCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24oU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbiwKICAgICAgbWVzc2FnZTogIiIiVW5hYmxlIHRvIHJlYWQgdGhlICdsaWJyYXJpZXMuanNvbicgc3BlY2lmaWNhdGlvbiBmaWxlOgogICR7c3RyaW5nfS4iIiIsIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uID0KICAgIG1lc3NhZ2VDYW50RGlzYW1iaWd1YXRlQW1iaWd1b3VzSW5mb3JtYXRpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uIiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkJvdGggSXRlcmFibGUgYW5kIE1hcCBzcHJlYWQgZWxlbWVudHMgZW5jb3VudGVyZWQgaW4gYW1iaWd1b3VzIGxpdGVyYWwuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbiA9CiAgICBtZXNzYWdlQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbiIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJOb3QgZW5vdWdoIHR5cGUgaW5mb3JtYXRpb24gdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gbGl0ZXJhbCBzZXQgYW5kIGxpdGVyYWwgbWFwLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyBmb3IgdGhlIGxpdGVyYWwgZXhwbGljaXRseSB0byBkaXNhbWJpZ3VhdGUgaXQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHMgPQogICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tTWFueUlucHV0cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHMiLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ2FuJ3QgaW5mZXIgYSAucGFja2FnZXMgZmlsZSB3aGVuIGNvbXBpbGluZyBtdWx0aXBsZSBpbnB1dHMuIiIiLAogICAgdGlwOiByIiIiVHJ5IHNwZWNpZnlpbmcgdGhlIGZpbGUgZXhwbGljaXRseSB3aXRoIHRoZSAtLXBhY2thZ2VzIG9wdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaSA9CiAgICBtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDYW50SW5mZXJQYWNrYWdlc0Zyb21QYWNrYWdlVXJpID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaSIsCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgaW5mZXIgYSAucGFja2FnZXMgZmlsZSBmcm9tIGFuIGlucHV0ICdwYWNrYWdlOionIFVSSS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgc3BlY2lmeWluZyB0aGUgZmlsZSBleHBsaWNpdGx5IHdpdGggdGhlIC0tcGFja2FnZXMgb3B0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDYW4ndCBpbmZlciBhIHJldHVybiB0eXBlIGZvciAnI25hbWUnIGFzIHNvbWUgb2YgdGhlIGluaGVyaXRlZCBtZW1iZXJzIGhhdmUgZGlmZmVyZW50IHR5cGVzLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBhZGRpbmcgYW4gZXhwbGljaXQgdHlwZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czoKICAgICAgICAgICAgX3dpdGhBcmd1bWVudHNDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcyIsCiAgICAgICAgdGVtcGxhdGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfTUVUSE9EX09WRVJSSURFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcygKICAgIFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgaW5mZXIgYSByZXR1cm4gdHlwZSBmb3IgJyR7bmFtZX0nIGFzIHNvbWUgb2YgdGhlIGluaGVyaXRlZCBtZW1iZXJzIGhhdmUgZGlmZmVyZW50IHR5cGVzLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgYWRkaW5nIGFuIGV4cGxpY2l0IHR5cGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcpPiB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IGluZmVyIHRoZSB0eXBlIG9mICcjc3RyaW5nJzogY2lyY3VsYXJpdHkgZm91bmQgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiU3BlY2lmeSB0aGUgdHlwZSBleHBsaWNpdGx5LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHkiLCB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRUNVUlNJVkVfQ09NUElMRV9USU1FX0NPTlNUQU5UIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5KFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHksCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBpbmZlciB0aGUgdHlwZSBvZiAnJHtzdHJpbmd9JzogY2lyY3VsYXJpdHkgZm91bmQgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLiIiIiwKICAgICAgdGlwOiAiIiJTcGVjaWZ5IHRoZSB0eXBlIGV4cGxpY2l0bHkuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGluZmVyIGEgdHlwZSBmb3IgJyNuYW1lJyBhcyBzb21lIG9mIHRoZSBpbmhlcml0ZWQgbWVtYmVycyBoYXZlIGRpZmZlcmVudCB0eXBlcy4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgYWRkaW5nIGFuIGV4cGxpY2l0IHR5cGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMiLAogICAgICAgIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX01FVEhPRF9PVkVSUklERSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBpbmZlciBhIHR5cGUgZm9yICcke25hbWV9JyBhcyBzb21lIG9mIHRoZSBpbmhlcml0ZWQgbWVtYmVycyBoYXZlIGRpZmZlcmVudCB0eXBlcy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IGFkZGluZyBhbiBleHBsaWNpdCB0eXBlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBzdHJpbmcpPiB0ZW1wbGF0ZUNhbnRSZWFkRmlsZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXJyb3Igd2hlbiByZWFkaW5nICcjdXJpJzogI3N0cmluZyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NhbnRSZWFkRmlsZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBzdHJpbmcpPiBjb2RlQ2FudFJlYWRGaWxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJDYW50UmVhZEZpbGUiLCB0ZW1wbGF0ZUNhbnRSZWFkRmlsZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVVJJX0RPRVNfTk9UX0VYSVNUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRSZWFkRmlsZShVcmkgdXJpXywgU3RyaW5nIHN0cmluZykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW50UmVhZEZpbGUsCiAgICAgIG1lc3NhZ2U6ICIiIkVycm9yIHdoZW4gcmVhZGluZyAnJHt1cml9JzogJHtzdHJpbmd9IiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpXywgJ3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4KICAgIHRlbXBsYXRlQ2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI2xleGVtZScgaXMgbm90IHN1cHBvcnRlZCBpbiBjb25zdGFudCBleHByZXNzaW9ucy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4KICAgIGNvZGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudCIsCiAgICAgICAgdGVtcGxhdGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9DT05TVEFOVF9FWFBSRVNTSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudChUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQsCiAgICAgIG1lc3NhZ2U6ICIiIicke2xleGVtZX0nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgVG9rZW4KICAgICAgICAgICAgdG9rZW4pPiB0ZW1wbGF0ZUNhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIicjbGV4ZW1lJyBjYW4ndCBiZSB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiZWNhdXNlIGl0J3MgbWFya2VkIGFzICdkZWZlcnJlZCcgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgYXZhaWxhYmxlIHVudGlsIGxvYWRlZC4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IG1vdmluZyB0aGUgY29uc3RhbnQgZnJvbSB0aGUgZGVmZXJyZWQgbGlicmFyeSwgb3IgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQuCiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigiQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCIsCiAgICAgICAgdGVtcGxhdGVDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9ERUZFUlJFRF9DTEFTUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50KFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtsZXhlbWV9JyBjYW4ndCBiZSB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiZWNhdXNlIGl0J3MgbWFya2VkIGFzICdkZWZlcnJlZCcgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgYXZhaWxhYmxlIHVudGlsIGxvYWRlZC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IG1vdmluZyB0aGUgY29uc3RhbnQgZnJvbSB0aGUgZGVmZXJyZWQgbGlicmFyeSwgb3IgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQuCiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbiA9CiAgICBtZXNzYWdlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDYW50VXNlUHJlZml4QXNFeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUFJFRklYX0lERU5USUZJRVJfTk9UX0ZPTExPV0VEX0JZX0RPVCJdLAogICAgbWVzc2FnZTogciIiIkEgcHJlZml4IGNhbid0IGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmUgPQogICAgbWVzc2FnZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlBSRUZJWF9JREVOVElGSUVSX05PVF9GT0xMT1dFRF9CWV9ET1QiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIHByZWZpeCBjYW4ndCBiZSB1c2VkIHdpdGggbnVsbC1hd2FyZSBvcGVyYXRvcnMuIiIiLAogICAgdGlwOiByIiIiSXQgc2hvdWxkIGJlIHNhZmUgdG8gcmVtb3ZlIHRoZSAnPycgYXMgYSBwcmVmaXggaXMgbmV2ZXIgbnVsbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2F0Y2hTeW50YXggPSBtZXNzYWdlQ2F0Y2hTeW50YXg7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2F0Y2hTeW50YXggPSBjb25zdCBNZXNzYWdlQ29kZSgiQ2F0Y2hTeW50YXgiLAogICAgaW5kZXg6IDg0LAogICAgbWVzc2FnZToKICAgICAgICByIiIiJ2NhdGNoJyBtdXN0IGJlIGZvbGxvd2VkIGJ5ICcoaWRlbnRpZmllciknIG9yICcoaWRlbnRpZmllciwgaWRlbnRpZmllciknLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiTm8gdHlwZXMgYXJlIG5lZWRlZCwgdGhlIGZpcnN0IGlzIGdpdmVuIGJ5ICdvbicsIHRoZSBzZWNvbmQgaXMgYWx3YXlzICdTdGFja1RyYWNlJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnMgPQogICAgbWVzc2FnZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnMiLAogICAgaW5kZXg6IDgzLAogICAgbWVzc2FnZToKICAgICAgICByIiIiJ2NhdGNoJyBtdXN0IGJlIGZvbGxvd2VkIGJ5ICcoaWRlbnRpZmllciknIG9yICcoaWRlbnRpZmllciwgaWRlbnRpZmllciknLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiTm8gdHlwZXMgYXJlIG5lZWRlZCwgdGhlIGZpcnN0IGlzIGdpdmVuIGJ5ICdvbicsIHRoZSBzZWNvbmQgaXMgYWx3YXlzICdTdGFja1RyYWNlJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2xhc3NJbkNsYXNzID0gbWVzc2FnZUNsYXNzSW5DbGFzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDbGFzc0luQ2xhc3MgPSBjb25zdCBNZXNzYWdlQ29kZSgiQ2xhc3NJbkNsYXNzIiwKICAgIGluZGV4OiA1MywKICAgIG1lc3NhZ2U6IHIiIiJDbGFzc2VzIGNhbid0IGJlIGRlY2xhcmVkIGluc2lkZSBvdGhlciBjbGFzc2VzLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIGNsYXNzIHRvIHRoZSB0b3AtbGV2ZWwuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbG9uSW5QbGFjZU9mSW4gPSBtZXNzYWdlQ29sb25JblBsYWNlT2ZJbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb2xvbkluUGxhY2VPZkluID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29sb25JblBsYWNlT2ZJbiIsCiAgICBpbmRleDogNTQsCiAgICBtZXNzYWdlOiByIiIiRm9yLWluIGxvb3BzIHVzZSAnaW4nIHJhdGhlciB0aGFuIGEgY29sb24uIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlcGxhY2luZyB0aGUgY29sb24gd2l0aCB0aGUga2V5d29yZCAnaW4nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDbGFzcyAnI25hbWUnIGluaGVyaXRzIG11bHRpcGxlIG1lbWJlcnMgbmFtZWQgJyNuYW1lMicgd2l0aCBpbmNvbXBhdGlibGUgc2lnbmF0dXJlcy4iIiIsCiAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBhZGRpbmcgYSBkZWNsYXJhdGlvbiBvZiAnI25hbWUyJyB0byAnI25hbWUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZUNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkIiwgdGVtcGxhdGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5DT05TSVNURU5UX0lOSEVSSVRBTkNFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDbGFzcyAnJHtuYW1lfScgaW5oZXJpdHMgbXVsdGlwbGUgbWVtYmVycyBuYW1lZCAnJHtuYW1lMn0nIHdpdGggaW5jb21wYXRpYmxlIHNpZ25hdHVyZXMuIiIiLAogICAgICB0aXA6ICIiIlRyeSBhZGRpbmcgYSBkZWNsYXJhdGlvbiBvZiAnJHtuYW1lMn0nIHRvICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZzIpPiB0ZW1wbGF0ZUNvbmZsaWN0aW5nTW9kaWZpZXJzID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJyNzdHJpbmcnIGFuZCAnI3N0cmluZzInLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUga2V5d29yZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25mbGljdGluZ01vZGlmaWVycyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZUNvbmZsaWN0aW5nTW9kaWZpZXJzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgICJDb25mbGljdGluZ01vZGlmaWVycyIsIHRlbXBsYXRlQ29uZmxpY3RpbmdNb2RpZmllcnMsCiAgICAgICAgaW5kZXg6IDU5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25mbGljdGluZ01vZGlmaWVycyhTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMikgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgaWYgKHN0cmluZzIuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdGluZ01vZGlmaWVycywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIk1lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnJHtzdHJpbmd9JyBhbmQgJyR7c3RyaW5nMn0nLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3Zpbmcgb25lIG9mIHRoZSBrZXl3b3Jkcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3IgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvbmZsaWN0cyB3aXRoIGNvbnN0cnVjdG9yICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aENvbnN0cnVjdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3IgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvciIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aENvbnN0cnVjdG9yLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVFNfV0lUSF9DT05TVFJVQ1RPUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoQ29uc3RydWN0b3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIGNvbnN0cnVjdG9yICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVDb25mbGljdHNXaXRoRmFjdG9yeSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggZmFjdG9yeSAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhGYWN0b3J5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25mbGljdHNXaXRoRmFjdG9yeSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiQ29uZmxpY3RzV2l0aEZhY3RvcnkiLAogIHRlbXBsYXRlQ29uZmxpY3RzV2l0aEZhY3RvcnksCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aEZhY3RvcnkoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoRmFjdG9yeSwKICAgICAgbWVzc2FnZTogIiIiQ29uZmxpY3RzIHdpdGggZmFjdG9yeSAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggbWVtYmVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aE1lbWJlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uZmxpY3RzV2l0aE1lbWJlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uZmxpY3RzV2l0aE1lbWJlciIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09ORkxJQ1RTX1dJVEhfTUVNQkVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhNZW1iZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoTWVtYmVyLAogICAgICBtZXNzYWdlOiAiIiJDb25mbGljdHMgd2l0aCBtZW1iZXIgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggbWVtYmVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZyIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkZMSUNUU19XSVRIX01FTUJFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIG1lbWJlciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggc2V0dGVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFNldHRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uZmxpY3RzV2l0aFNldHRlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uZmxpY3RzV2l0aFNldHRlciIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09ORkxJQ1RTX1dJVEhfTUVNQkVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhTZXR0ZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoU2V0dGVyLAogICAgICBtZXNzYWdlOiAiIiJDb25mbGljdHMgd2l0aCBzZXR0ZXIgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggc2V0dGVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZyIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkZMSUNUU19XSVRIX01FTUJFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIHNldHRlciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvbmZsaWN0cyB3aXRoIHR5cGUgdmFyaWFibGUgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlIiwgdGVtcGxhdGVDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVElOR19UWVBFX1ZBUklBQkxFX0FORF9NRU1CRVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZSA9CiAgICBtZXNzYWdlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGlzIHRoZSB0eXBlIHZhcmlhYmxlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEFuZEZpbmFsID0gbWVzc2FnZUNvbnN0QW5kRmluYWw7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RBbmRGaW5hbCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJDb25zdEFuZEZpbmFsIiwKICAgIGluZGV4OiA1OCwKICAgIG1lc3NhZ2U6IHIiIiJNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJ2NvbnN0JyBhbmQgJ2ZpbmFsJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnY29uc3QnIG9yICdmaW5hbCcga2V5d29yZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RDbGFzcyA9IG1lc3NhZ2VDb25zdENsYXNzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0Q2xhc3MgPSBjb25zdCBNZXNzYWdlQ29kZSgiQ29uc3RDbGFzcyIsCiAgICBpbmRleDogNjAsCiAgICBtZXNzYWdlOiByIiIiQ2xhc3NlcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnY29uc3QnLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQuIElmIHlvdSdyZSB0cnlpbmcgdG8gaW5kaWNhdGUgdGhhdCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIGNhbiBiZSBjb25zdGFudHMsIHBsYWNlIHRoZSAnY29uc3QnIGtleXdvcmQgb24gIHRoZSBjbGFzcycgY29uc3RydWN0b3IocykuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkID0KICAgIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9DT05TVFJVQ1RPUl9XSVRIX05PTl9GSU5BTF9GSUVMRCJdLAogICAgbWVzc2FnZTogciIiIkNvbnN0cnVjdG9yIGlzIG1hcmtlZCAnY29uc3QnIHNvIGFsbCBmaWVsZHMgbXVzdCBiZSBmaW5hbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZSA9CiAgICBtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJGaWVsZCBpc24ndCBmaW5hbCwgYnV0IGNvbnN0cnVjdG9yIGlzICdjb25zdCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3QgPQogICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdCIsCiAgICAgICAgbWVzc2FnZToKICAgICAgICAgICAgciIiIkEgY29uc3RhbnQgY29uc3RydWN0b3IgY2FuJ3QgY2FsbCBhIG5vbi1jb25zdGFudCBjb25zdHJ1Y3Rvci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RDb25zdHJ1Y3RvcldpdGhCb2R5ID0gbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoQm9keTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yV2l0aEJvZHkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdENvbnN0cnVjdG9yV2l0aEJvZHkiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0NPTlNUUlVDVE9SX1dJVEhfQk9EWSJdLAogICAgbWVzc2FnZTogciIiIkEgY29uc3QgY29uc3RydWN0b3IgY2FuJ3QgaGF2ZSBhIGJvZHkuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIGVpdGhlciB0aGUgJ2NvbnN0JyBrZXl3b3JkIG9yIHRoZSBib2R5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXIgPQogICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoTm9uQ29uc3RTdXBlcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0NPTlNUUlVDVE9SX1dJVEhfTk9OX0NPTlNUX1NVUEVSIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDb25zdGFudCBjb25zdHJ1Y3RvciBjYW4ndCBjYWxsIG5vbi1jb25zdGFudCBzdXBlciBjb25zdHJ1Y3RvcnMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RXZhbENpcmN1bGFyaXR5ID0gbWVzc2FnZUNvbnN0RXZhbENpcmN1bGFyaXR5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0RXZhbENpcmN1bGFyaXR5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RFdmFsQ2lyY3VsYXJpdHkiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFQ1VSU0lWRV9DT01QSUxFX1RJTUVfQ09OU1RBTlQiXSwKICAgIG1lc3NhZ2U6IHIiIiJDb25zdGFudCBleHByZXNzaW9uIGRlcGVuZHMgb24gaXRzZWxmLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEV2YWxDb250ZXh0ID0gbWVzc2FnZUNvbnN0RXZhbENvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RFdmFsQ29udGV4dCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiQ29uc3RFdmFsQ29udGV4dCIsIG1lc3NhZ2U6IHIiIiJXaGlsZSBhbmFseXppbmc6IiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiInI25hbWUnIGNhbid0IGJlIHVzZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgJ2RlZmVycmVkJyB3aGljaCBtZWFucyBpdCBpc24ndCBhdmFpbGFibGUgdW50aWwgbG9hZGVkLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgbW92aW5nIHRoZSBjb25zdGFudCBmcm9tIHRoZSBkZWZlcnJlZCBsaWJyYXJ5LCBvciByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydC4KIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEZWZlcnJlZExpYnJhcnkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbnN0RXZhbERlZmVycmVkTGlicmFyeSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5IiwgdGVtcGxhdGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bCiAgICAgICJOT05fQ09OU1RBTlRfREVGQVVMVF9WQUxVRV9GUk9NX0RFRkVSUkVEX0xJQlJBUlkiCiAgICBdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEZWZlcnJlZExpYnJhcnkoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnksCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtuYW1lfScgY2FuJ3QgYmUgdXNlZCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24gYmVjYXVzZSBpdCdzIG1hcmtlZCBhcyAnZGVmZXJyZWQnIHdoaWNoIG1lYW5zIGl0IGlzbid0IGF2YWlsYWJsZSB1bnRpbCBsb2FkZWQuIiIiLAogICAgICB0aXA6ICIiIlRyeSBtb3ZpbmcgdGhlIGNvbnN0YW50IGZyb20gdGhlIGRlZmVycmVkIGxpYnJhcnksIG9yIHJlbW92aW5nICdkZWZlcnJlZCcgZnJvbSB0aGUgaW1wb3J0LgoiIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgX2NvbnN0YW50KT4gdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGVsZW1lbnQgJyNjb25zdGFudCcgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleGlzdGluZyBlbGVtZW50IGluIHRoZSBzZXQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPiBjb2RlQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50KT4oCiAgICAgICAgIkNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnQiLCB0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVRVUFMX0VMRU1FTlRTX0lOX0NPTlNUX1NFVCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50KENvbnN0YW50IF9jb25zdGFudCkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gY29uc3RhbnRQYXJ0cyA9IGxhYmVsZXIubGFiZWxDb25zdGFudChfY29uc3RhbnQpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBlbGVtZW50ICcke2NvbnN0YW50fScgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleGlzdGluZyBlbGVtZW50IGluIHRoZSBzZXQuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIENvbnN0YW50CiAgICAgICAgICAgIF9jb25zdGFudCk+IHRlbXBsYXRlQ29uc3RFdmFsRHVwbGljYXRlS2V5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGtleSAnI2NvbnN0YW50JyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGtleSBpbiB0aGUgbWFwLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRHVwbGljYXRlS2V5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPiBjb2RlQ29uc3RFdmFsRHVwbGljYXRlS2V5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsRHVwbGljYXRlS2V5IiwgdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVLZXksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVRVUFMX0tFWVNfSU5fQ09OU1RfTUFQIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbER1cGxpY2F0ZUtleShDb25zdGFudCBfY29uc3RhbnQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbER1cGxpY2F0ZUtleSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBrZXkgJyR7Y29uc3RhbnR9JyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGtleSBpbiB0aGUgbWFwLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J2NvbnN0YW50JzogX2NvbnN0YW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBDb25zdGFudAogICAgICAgICAgICBfY29uc3RhbnQpPiB0ZW1wbGF0ZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgZWxlbWVudCAnI2NvbnN0YW50JyBkb2VzIG5vdCBoYXZlIGEgcHJpbWl0aXZlIG9wZXJhdG9yICc9PScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPgogICAgY29kZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgICJDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsIiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX1NFVF9FTEVNRU5UX1RZUEVfSU1QTEVNRU5UU19FUVVBTFMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbChDb25zdGFudCBfY29uc3RhbnQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgZWxlbWVudCAnJHtjb25zdGFudH0nIGRvZXMgbm90IGhhdmUgYSBwcmltaXRpdmUgb3BlcmF0b3IgJz09Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydjb25zdGFudCc6IF9jb25zdGFudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb24gPSBtZXNzYWdlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfRVZBTF9USFJPV1NfRVhDRVBUSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiVGhpcyBhc3NlcnRpb24gZmFpbGVkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGlzIGFzc2VydGlvbiBmYWlsZWQgd2l0aCBtZXNzYWdlOiAjc3RyaW5nIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgY29kZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlIiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9FVkFMX1RIUk9XU19FWENFUFRJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2UoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZSwKICAgICAgbWVzc2FnZTogIiIiVGhpcyBhc3NlcnRpb24gZmFpbGVkIHdpdGggbWVzc2FnZTogJHtzdHJpbmd9IiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSB0eXBlICcjdHlwZScgaXMgbm90IGEgY29uc3RhbnQgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgdHlwZSBwYXJhbWV0ZXIsIG9ubHkgaW5zdGFudGlhdGVkIHR5cGVzIGFyZSBhbGxvd2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gY29kZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICJDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlciIsCiAgdGVtcGxhdGVDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlciwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlcihEYXJ0VHlwZSBfdHlwZSkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBhIGNvbnN0YW50IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIHR5cGUgcGFyYW1ldGVyLCBvbmx5IGluc3RhbnRpYXRlZCB0eXBlcyBhcmUgYWxsb3dlZC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgQ29uc3RhbnQgX2NvbnN0YW50LAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQmluYXJ5IG9wZXJhdG9yICcjc3RyaW5nJyBvbiAnI2NvbnN0YW50JyByZXF1aXJlcyBvcGVyYW5kIG9mIHR5cGUgJyN0eXBlJywgYnV0IHdhcyBvZiB0eXBlICcjdHlwZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyKT4gY29kZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZSA9IGNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICJDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUiLAogIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZSgKICAgIFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIGNvbnN0YW50ID0gY29uc3RhbnRQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQmluYXJ5IG9wZXJhdG9yICcke3N0cmluZ30nIG9uICcke2NvbnN0YW50fScgcmVxdWlyZXMgb3BlcmFuZCBvZiB0eXBlICcke3R5cGV9JywgYnV0IHdhcyBvZiB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAnc3RyaW5nJzogc3RyaW5nLAogICAgICAgICdjb25zdGFudCc6IF9jb25zdGFudCwKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMgogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIENvbnN0YW50IF9jb25zdGFudCwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkJpbmFyeSBvcGVyYXRvciAnPT0nIHJlcXVpcmVzIHJlY2VpdmVyIGNvbnN0YW50ICcjY29uc3RhbnQnIG9mIHR5cGUgJ051bGwnLCAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgb3IgJ1N0cmluZycsIGJ1dCB3YXMgb2YgdHlwZSAnI3R5cGUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlKT4KICAgIGNvZGVDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUpPigKICAiQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlIiwKICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUoCiAgICBDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCaW5hcnkgb3BlcmF0b3IgJz09JyByZXF1aXJlcyByZWNlaXZlciBjb25zdGFudCAnJHtjb25zdGFudH0nIG9mIHR5cGUgJ051bGwnLCAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgb3IgJ1N0cmluZycsIGJ1dCB3YXMgb2YgdHlwZSAnJHt0eXBlfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnQsICd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgX2NvbnN0YW50KT4gdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbiA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgQ29uc3RhbnQgX2NvbnN0YW50KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtZXRob2QgJyNzdHJpbmcnIGNhbid0IGJlIGludm9rZWQgb24gJyNjb25zdGFudCcgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQpPgogICAgY29kZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb24iLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVOREVGSU5FRF9PUEVSQVRPUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbigKICAgIFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCkgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgU3RyaW5nIGNvbnN0YW50ID0gY29uc3RhbnRQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtZXRob2QgJyR7c3RyaW5nfScgY2FuJ3QgYmUgaW52b2tlZCBvbiAnJHtjb25zdGFudH0nIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgX2NvbnN0YW50KT4gdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgcHJvcGVydHkgJyNzdHJpbmcnIGNhbid0IGJlIGFjY2Vzc2VkIG9uICcjY29uc3RhbnQnIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCk+CiAgICBjb2RlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0IiwgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0VWQUxfVEhST1dTX0VYQ0VQVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQoCiAgICBTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gY29uc3RhbnRQYXJ0cyA9IGxhYmVsZXIubGFiZWxDb25zdGFudChfY29uc3RhbnQpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHByb3BlcnR5ICcke3N0cmluZ30nIGNhbid0IGJlIGFjY2Vzc2VkIG9uICcke2NvbnN0YW50fScgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdjb25zdGFudCc6IF9jb25zdGFudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgaW52b2NhdGlvbiBvZiAnI25hbWUnIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uIiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9JTklUSUFMSVpFRF9XSVRIX05PTl9DT05TVEFOVF9WQUxVRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGludm9jYXRpb24gb2YgJyR7bmFtZX0nIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPgogICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUgJyNjb25zdGFudCcgY2FuJ3QgYmUgdXNlZCBhcyBwYXJ0IG9mIGEgc3RyaW5nIGludGVycG9sYXRpb24gd2l0aGluIGEgY29uc3QgY29udGV4dCwgb25seSB2YWx1ZXMgb2YgdHlwZSAnbnVsbCcsICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJyBjYW4gYmUgdXNlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czoKICAgICAgICAgICAgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+CiAgICBjb2RlQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kIiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfRVZBTF9UWVBFX0JPT0xfTlVNX1NUUklORyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQoCiAgICBDb25zdGFudCBfY29uc3RhbnQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSAnJHtjb25zdGFudH0nIGNhbid0IGJlIHVzZWQgYXMgcGFydCBvZiBhIHN0cmluZyBpbnRlcnBvbGF0aW9uIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQsIG9ubHkgdmFsdWVzIG9mIHR5cGUgJ251bGwnLCAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgb3IgJ1N0cmluZycgY2FuIGJlIHVzZWQuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIENvbnN0YW50CiAgICAgICAgICAgIF9jb25zdGFudCk+IHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgc3ltYm9sIG5hbWUgbXVzdCBiZSBhIHZhbGlkIHB1YmxpYyBEYXJ0IG1lbWJlciBuYW1lLCBwdWJsaWMgY29uc3RydWN0b3IgbmFtZSwgb3IgbGlicmFyeSBuYW1lLCBvcHRpb25hbGx5IHF1YWxpZmllZCwgYnV0IHdhcyAnI2NvbnN0YW50Jy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPgogICAgY29kZUNvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUiLCB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9FVkFMX1RIUk9XU19FWENFUFRJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUoQ29uc3RhbnQgX2NvbnN0YW50KSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgU3RyaW5nIGNvbnN0YW50ID0gY29uc3RhbnRQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBzeW1ib2wgbmFtZSBtdXN0IGJlIGEgdmFsaWQgcHVibGljIERhcnQgbWVtYmVyIG5hbWUsIHB1YmxpYyBjb25zdHJ1Y3RvciBuYW1lLCBvciBsaWJyYXJ5IG5hbWUsIG9wdGlvbmFsbHkgcXVhbGlmaWVkLCBidXQgd2FzICcke2NvbnN0YW50fScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIENvbnN0YW50IF9jb25zdGFudCwKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRUeXBlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRXhwZWN0ZWQgY29uc3RhbnQgJyNjb25zdGFudCcgdG8gYmUgb2YgdHlwZSAnI3R5cGUnLCBidXQgd2FzIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50LCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVDb25zdEV2YWxJbnZhbGlkVHlwZSA9IGNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAiQ29uc3RFdmFsSW52YWxpZFR5cGUiLAogIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFR5cGUsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFR5cGUoCiAgICBDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkVHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkV4cGVjdGVkIGNvbnN0YW50ICcke2NvbnN0YW50fScgdG8gYmUgb2YgdHlwZSAnJHt0eXBlfScsIGJ1dCB3YXMgb2YgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J2NvbnN0YW50JzogX2NvbnN0YW50LCAndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPgogICAgdGVtcGxhdGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUga2V5ICcjY29uc3RhbnQnIGRvZXMgbm90IGhhdmUgYSBwcmltaXRpdmUgb3BlcmF0b3IgJz09Jy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+CiAgICBjb2RlQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsIiwgdGVtcGxhdGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bCiAgICAgICJDT05TVF9NQVBfS0VZX0VYUFJFU1NJT05fVFlQRV9JTVBMRU1FTlRTX0VRVUFMUyIKICAgIF0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbChDb25zdGFudCBfY29uc3RhbnQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBrZXkgJyR7Y29uc3RhbnR9JyBkb2VzIG5vdCBoYXZlIGEgcHJpbWl0aXZlIG9wZXJhdG9yICc9PScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgU3RyaW5nIHN0cmluZzIsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZzMpPiB0ZW1wbGF0ZUNvbnN0RXZhbE5lZ2F0aXZlU2hpZnQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyLCBTdHJpbmcgc3RyaW5nMyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJCaW5hcnkgb3BlcmF0b3IgJyNzdHJpbmcnIG9uICcjc3RyaW5nMicgcmVxdWlyZXMgbm9uLW5lZ2F0aXZlIG9wZXJhbmQsIGJ1dCB3YXMgJyNzdHJpbmczJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5lZ2F0aXZlU2hpZnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyLCBTdHJpbmcgc3RyaW5nMyk+CiAgICBjb2RlQ29uc3RFdmFsTmVnYXRpdmVTaGlmdCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKT4oCiAgIkNvbnN0RXZhbE5lZ2F0aXZlU2hpZnQiLAogIHRlbXBsYXRlQ29uc3RFdmFsTmVnYXRpdmVTaGlmdCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0KAogICAgU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbE5lZ2F0aXZlU2hpZnQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCaW5hcnkgb3BlcmF0b3IgJyR7c3RyaW5nfScgb24gJyR7c3RyaW5nMn0nIHJlcXVpcmVzIG5vbi1uZWdhdGl2ZSBvcGVyYW5kLCBidXQgd2FzICcke3N0cmluZzN9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMiwgJ3N0cmluZzMnOiBzdHJpbmczfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgc3RyaW5nKT4gdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQ2FuJ3QgaGF2ZSBhIG5vbi1jb25zdGFudCAjc3RyaW5nIGxpdGVyYWwgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsIiwgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PTl9DT05TVEFOVF9ERUZBVUxUX1ZBTFVFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbChTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGhhdmUgYSBub24tY29uc3RhbnQgJHtzdHJpbmd9IGxpdGVyYWwgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcpPiB0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHZhcmlhYmxlICcjc3RyaW5nJyBpcyBub3QgYSBjb25zdGFudCwgb25seSBjb25zdGFudCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldCIsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT05fQ09OU1RBTlRfVkFMVUVfSU5fSU5JVElBTElaRVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldChTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgdmFyaWFibGUgJyR7c3RyaW5nfScgaXMgbm90IGEgY29uc3RhbnQsIG9ubHkgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkID0KICAgIG1lc3NhZ2VDb25zdEV2YWxOb3RMaXN0T3JTZXRJblNwcmVhZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEV2YWxOb3RMaXN0T3JTZXRJblNwcmVhZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9TUFJFQURfRVhQRUNURURfTElTVF9PUl9TRVQiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIk9ubHkgbGlzdHMgYW5kIHNldHMgY2FuIGJlIHVzZWQgaW4gc3ByZWFkcyBpbiBjb25zdGFudCBsaXN0cyBhbmQgc2V0cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQgPSBtZXNzYWdlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdEV2YWxOb3RNYXBJblNwcmVhZCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfU1BSRUFEX0VYUEVDVEVEX01BUCJdLAogICAgbWVzc2FnZTogciIiIk9ubHkgbWFwcyBjYW4gYmUgdXNlZCBpbiBzcHJlYWRzIGluIGNvbnN0YW50IG1hcHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RXZhbE51bGxWYWx1ZSA9IG1lc3NhZ2VDb25zdEV2YWxOdWxsVmFsdWU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RFdmFsTnVsbFZhbHVlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9FVkFMX1RIUk9XU19FWENFUFRJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJOdWxsIHZhbHVlIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEV2YWxVbmV2YWx1YXRlZCA9IG1lc3NhZ2VDb25zdEV2YWxVbmV2YWx1YXRlZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEV2YWxVbmV2YWx1YXRlZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0RXZhbFVuZXZhbHVhdGVkIiwKICAgIG1lc3NhZ2U6IHIiIiJDb3VsZCBub3QgZXZhbHVhdGUgY29uc3RhbnQgZXhwcmVzc2lvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZzIpPiB0ZW1wbGF0ZUNvbnN0RXZhbFplcm9EaXZpc29yID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJCaW5hcnkgb3BlcmF0b3IgJyNzdHJpbmcnIG9uICcjc3RyaW5nMicgcmVxdWlyZXMgbm9uLXplcm8gZGl2aXNvciwgYnV0IGRpdmlzb3Igd2FzICcwJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbFplcm9EaXZpc29yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlQ29uc3RFdmFsWmVyb0Rpdmlzb3IgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICAgICAgIkNvbnN0RXZhbFplcm9EaXZpc29yIiwgdGVtcGxhdGVDb25zdEV2YWxaZXJvRGl2aXNvciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfRVZBTF9USFJPV1NfSURCWkUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsWmVyb0Rpdmlzb3IoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsWmVyb0Rpdmlzb3IsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCaW5hcnkgb3BlcmF0b3IgJyR7c3RyaW5nfScgb24gJyR7c3RyaW5nMn0nIHJlcXVpcmVzIG5vbi16ZXJvIGRpdmlzb3IsIGJ1dCBkaXZpc29yIHdhcyAnMCcuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnc3RyaW5nMic6IHN0cmluZzJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RGYWN0b3J5ID0gbWVzc2FnZUNvbnN0RmFjdG9yeTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEZhY3RvcnkgPSBjb25zdCBNZXNzYWdlQ29kZSgiQ29uc3RGYWN0b3J5IiwKICAgIGluZGV4OiA2MiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIk9ubHkgcmVkaXJlY3RpbmcgZmFjdG9yeSBjb25zdHJ1Y3RvcnMgY2FuIGJlIGRlY2xhcmVkIHRvIGJlICdjb25zdCcuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcga2V5d29yZCwgb3IgcmVwbGFjaW5nIHRoZSBib2R5IHdpdGggJz0nIGZvbGxvd2VkIGJ5IGEgdmFsaWQgdGFyZ2V0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3QgPQogICAgbWVzc2FnZUNvbnN0RmFjdG9yeVJlZGlyZWN0aW9uVG9Ob25Db25zdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3QiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFRElSRUNUX1RPX05PTl9DT05TVF9DT05TVFJVQ1RPUiJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ29uc3RhbnQgZmFjdG9yeSBjb25zdHJ1Y3RvciBjYW4ndCBkZWxlZ2F0ZSB0byBhIG5vbi1jb25zdGFudCBjb25zdHJ1Y3Rvci4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZWRpcmVjdGluZyB0byBhIGRpZmZlcmVudCBjb25zdHJ1Y3RvciBvciBtYXJraW5nIHRoZSB0YXJnZXQgY29uc3RydWN0b3IgJ2NvbnN0Jy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlIGNvbnN0IHZhcmlhYmxlICcjbmFtZScgbXVzdCBiZSBpbml0aWFsaXplZC4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGFkZGluZyBhbiBpbml0aWFsaXplciAoJz0gPGV4cHJlc3Npb24+JykgdG8gdGhlIGRlY2xhcmF0aW9uLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplciIsIHRlbXBsYXRlQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfTk9UX0lOSVRJQUxJWkVEIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyLAogICAgICBtZXNzYWdlOiAiIiJUaGUgY29uc3QgdmFyaWFibGUgJyR7bmFtZX0nIG11c3QgYmUgaW5pdGlhbGl6ZWQuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgYWRkaW5nIGFuIGluaXRpYWxpemVyICgnPSA8ZXhwcmVzc2lvbj4nKSB0byB0aGUgZGVjbGFyYXRpb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RJbnN0YW5jZUZpZWxkID0gbWVzc2FnZUNvbnN0SW5zdGFuY2VGaWVsZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEluc3RhbmNlRmllbGQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdEluc3RhbmNlRmllbGQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0lOU1RBTkNFX0ZJRUxEIl0sCiAgICBtZXNzYWdlOiByIiIiT25seSBzdGF0aWMgZmllbGRzIGNhbiBiZSBkZWNsYXJlZCBhcyBjb25zdC4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSB1c2luZyAnZmluYWwnIGluc3RlYWQgb2YgJ2NvbnN0Jywgb3IgYWRkaW5nIHRoZSBrZXl3b3JkICdzdGF0aWMnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdE1ldGhvZCA9IG1lc3NhZ2VDb25zdE1ldGhvZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdE1ldGhvZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJDb25zdE1ldGhvZCIsCiAgICBpbmRleDogNjMsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJHZXR0ZXJzLCBzZXR0ZXJzIGFuZCBtZXRob2RzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdjb25zdCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0cnVjdG9yQ3ljbGljID0gbWVzc2FnZUNvbnN0cnVjdG9yQ3ljbGljOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0cnVjdG9yQ3ljbGljID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RydWN0b3JDeWNsaWMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFQ1VSU0lWRV9DT05TVFJVQ1RPUl9SRURJUkVDVCJdLAogICAgbWVzc2FnZTogciIiIlJlZGlyZWN0aW5nIGNvbnN0cnVjdG9ycyBjYW4ndCBiZSBjeWNsaWMuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgdG8gaGF2ZSBhbGwgY29uc3RydWN0b3JzIGV2ZW50dWFsbHkgcmVkaXJlY3QgdG8gYSBub24tcmVkaXJlY3RpbmcgY29uc3RydWN0b3IuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUNvbnN0cnVjdG9yTm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvdWxkbid0IGZpbmQgY29uc3RydWN0b3IgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdHJ1Y3Rvck5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25zdHJ1Y3Rvck5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25zdHJ1Y3Rvck5vdEZvdW5kIiwgdGVtcGxhdGVDb25zdHJ1Y3Rvck5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVFJVQ1RPUl9OT1RfRk9VTkQiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdHJ1Y3Rvck5vdEZvdW5kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RydWN0b3JOb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiQ291bGRuJ3QgZmluZCBjb25zdHJ1Y3RvciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RydWN0b3JOb3RTeW5jID0gbWVzc2FnZUNvbnN0cnVjdG9yTm90U3luYzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdHJ1Y3Rvck5vdFN5bmMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdHJ1Y3Rvck5vdFN5bmMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PTl9TWU5DX0NPTlNUUlVDVE9SIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDb25zdHJ1Y3RvciBib2RpZXMgY2FuJ3QgdXNlICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlID0KICAgIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFJldHVyblR5cGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlIiwKICAgIGluZGV4OiA1NSwKICAgIG1lc3NhZ2U6IHIiIiJDb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIHJldHVybiB0eXBlLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgcmV0dXJuIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMgPQogICAgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RydWN0b3JXaXRoVHlwZUFyZ3VtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIldST05HX05VTUJFUl9PRl9UWVBFX0FSR1VNRU5UU19DT05TVFJVQ1RPUiJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGNhbid0IGhhdmUgdHlwZSBhcmd1bWVudHMgb24gdGhlIGNvbnN0cnVjdG9yIG5hbWUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHRvIHBsYWNlIHRoZSB0eXBlIGFyZ3VtZW50cyBvbiB0aGUgY2xhc3MgbmFtZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RydWN0b3JXaXRoVHlwZVBhcmFtZXRlcnMgPQogICAgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RydWN0b3JXaXRoVHlwZVBhcmFtZXRlcnMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfUEFSQU1FVEVSX09OX0NPTlNUUlVDVE9SIl0sCiAgICBtZXNzYWdlOiByIiIiQ29uc3RydWN0b3JzIGNhbid0IGhhdmUgdHlwZSBwYXJhbWV0ZXJzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWUgPSBtZXNzYWdlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DT05TVFJVQ1RPUl9OQU1FIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgbmFtZSBvZiBhIGNvbnN0cnVjdG9yIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2YgdGhlIGVuY2xvc2luZyBjbGFzcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3MgaXMgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0IiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0LAogICAgICBtZXNzYWdlOiAiIiJUaGUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzIGlzICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb250aW51ZUxhYmVsTm90VGFyZ2V0ID0gbWVzc2FnZUNvbnRpbnVlTGFiZWxOb3RUYXJnZXQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29udGludWVMYWJlbE5vdFRhcmdldCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnRpbnVlTGFiZWxOb3RUYXJnZXQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkxBQkVMX1VOREVGSU5FRCJdLAogICAgbWVzc2FnZTogciIiIlRhcmdldCBvZiBjb250aW51ZSBtdXN0IGJlIGEgbGFiZWwuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnRpbnVlT3V0c2lkZU9mTG9vcCA9IG1lc3NhZ2VDb250aW51ZU91dHNpZGVPZkxvb3A7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29udGludWVPdXRzaWRlT2ZMb29wID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29udGludWVPdXRzaWRlT2ZMb29wIiwKICAgIGluZGV4OiAyLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBjb250aW51ZSBzdGF0ZW1lbnQgY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIG9mIGEgbG9vcCBvciBzd2l0Y2ggc3RhdGVtZW50LiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgY29udGludWUgc3RhdGVtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGNvbnRpbnVlIGF0ICcjbmFtZScgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbiIsIHRlbXBsYXRlQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkxBQkVMX0lOX09VVEVSX1NDT1BFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24sCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGNvbnRpbnVlIGF0ICcke25hbWV9JyBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZSA9CiAgICBtZXNzYWdlQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2U7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2UgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZSIsCiAgICBpbmRleDogNjQsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIGNvbnRpbnVlIHN0YXRlbWVudCBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgbXVzdCBoYXZlIGEgbGFiZWwgYXMgYSB0YXJnZXQuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgYWRkaW5nIGEgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIG9uZSBvZiB0aGUgY2FzZSBjbGF1c2VzIHRvIHRoZSBjb250aW51ZSBzdGF0ZW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgdGVtcGxhdGVDb3VsZE5vdFBhcnNlVXJpID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb3VsZG4ndCBwYXJzZSBVUkkgJyNzdHJpbmcnOgogICNzdHJpbmcyLiIiIiwgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb3VsZE5vdFBhcnNlVXJpKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlQ291bGROb3RQYXJzZVVyaSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAiQ291bGROb3RQYXJzZVVyaSIsCiAgdGVtcGxhdGVDb3VsZE5vdFBhcnNlVXJpLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvdWxkTm90UGFyc2VVcmkoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ291bGROb3RQYXJzZVVyaSwKICAgICAgbWVzc2FnZTogIiIiQ291bGRuJ3QgcGFyc2UgVVJJICcke3N0cmluZ30nOgogICR7c3RyaW5nMn0uIiIiLCBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnc3RyaW5nMic6IHN0cmluZzJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ292YXJpYW50QW5kU3RhdGljID0gbWVzc2FnZUNvdmFyaWFudEFuZFN0YXRpYzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb3ZhcmlhbnRBbmRTdGF0aWMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb3ZhcmlhbnRBbmRTdGF0aWMiLAogICAgaW5kZXg6IDY2LAogICAgbWVzc2FnZToKICAgICAgICByIiIiTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdjb3ZhcmlhbnQnIGFuZCAnc3RhdGljJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnY292YXJpYW50JyBvciAnc3RhdGljJyBrZXl3b3JkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb3ZhcmlhbnRNZW1iZXIgPSBtZXNzYWdlQ292YXJpYW50TWVtYmVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvdmFyaWFudE1lbWJlciA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJDb3ZhcmlhbnRNZW1iZXIiLAogICAgaW5kZXg6IDY3LAogICAgbWVzc2FnZToKICAgICAgICByIiIiR2V0dGVycywgc2V0dGVycyBhbmQgbWV0aG9kcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnY292YXJpYW50Jy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdjb3ZhcmlhbnQnIGtleXdvcmQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgc3RyaW5nKT4gdGVtcGxhdGVDeWNsZUluVHlwZVZhcmlhYmxlcyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlR5cGUgJyNuYW1lJyBpcyBhIGJvdW5kIG9mIGl0c2VsZiB2aWEgJyNzdHJpbmcnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgYnJlYWtpbmcgdGhlIGN5Y2xlIGJ5IHJlbW92aW5nIGF0IGxlYXN0IG9uIG9mIHRoZSAnZXh0ZW5kcycgY2xhdXNlcyBpbiB0aGUgY3ljbGUuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDeWNsZUluVHlwZVZhcmlhYmxlcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPgogICAgY29kZUN5Y2xlSW5UeXBlVmFyaWFibGVzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJDeWNsZUluVHlwZVZhcmlhYmxlcyIsIHRlbXBsYXRlQ3ljbGVJblR5cGVWYXJpYWJsZXMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfUEFSQU1FVEVSX1NVUEVSVFlQRV9PRl9JVFNfQk9VTkQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ3ljbGVJblR5cGVWYXJpYWJsZXMoU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUN5Y2xlSW5UeXBlVmFyaWFibGVzLAogICAgICBtZXNzYWdlOiAiIiJUeXBlICcke25hbWV9JyBpcyBhIGJvdW5kIG9mIGl0c2VsZiB2aWEgJyR7c3RyaW5nfScuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgYnJlYWtpbmcgdGhlIGN5Y2xlIGJ5IHJlbW92aW5nIGF0IGxlYXN0IG9uIG9mIHRoZSAnZXh0ZW5kcycgY2xhdXNlcyBpbiB0aGUgY3ljbGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICdzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlQ3ljbGljQ2xhc3NIaWVyYXJjaHkgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgYSBzdXBlcnR5cGUgb2YgaXRzZWxmLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0N5Y2xpY0NsYXNzSGllcmFyY2h5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDeWNsaWNDbGFzc0hpZXJhcmNoeSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ3ljbGljQ2xhc3NIaWVyYXJjaHkiLCB0ZW1wbGF0ZUN5Y2xpY0NsYXNzSGllcmFyY2h5LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRUNVUlNJVkVfSU5URVJGQUNFX0lOSEVSSVRBTkNFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0N5Y2xpY0NsYXNzSGllcmFyY2h5KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ3ljbGljQ2xhc3NIaWVyYXJjaHksCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBhIHN1cGVydHlwZSBvZiBpdHNlbGYuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ3ljbGljIGRlZmluaXRpb24gb2YgZmFjdG9yeSAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0N5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzIiwKICAgICAgICB0ZW1wbGF0ZUN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVDVVJTSVZFX0ZBQ1RPUllfUkVESVJFQ1QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLAogICAgICBtZXNzYWdlOiAiIiJDeWNsaWMgZGVmaW5pdGlvbiBvZiBmYWN0b3J5ICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVDeWNsaWNUeXBlZGVmID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgdHlwZWRlZiAnI25hbWUnIGhhcyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ3ljbGljVHlwZWRlZik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ3ljbGljVHlwZWRlZiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ3ljbGljVHlwZWRlZiIsIHRlbXBsYXRlQ3ljbGljVHlwZWRlZiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BTElBU19DQU5OT1RfUkVGRVJFTkNFX0lUU0VMRiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDeWNsaWNUeXBlZGVmKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ3ljbGljVHlwZWRlZiwKICAgICAgbWVzc2FnZTogIiIiVGhlIHR5cGVkZWYgJyR7bmFtZX0nIGhhcyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyID0KICAgIG1lc3NhZ2VEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXIiLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJERUNMQVJFRF9NRU1CRVJfQ09ORkxJQ1RTX1dJVEhfSU5IRVJJVEVEIl0sCiAgICAgICAgbWVzc2FnZToKICAgICAgICAgICAgciIiIkNhbid0IGRlY2xhcmUgYSBtZW1iZXIgdGhhdCBjb25mbGljdHMgd2l0aCBhbiBpbmhlcml0ZWQgb25lLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYXVzZSA9CiAgICBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2U7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2UgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkRlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckNhdXNlIiwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgICAgICBtZXNzYWdlOiByIiIiVGhpcyBpcyB0aGUgaW5oZXJpdGVkIG1lbWJlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZURlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGhlcmUgYmVjYXVzZSBhbnkgZGVmYXVsdCB2YWx1ZXMgb2YgJyNuYW1lJyB3b3VsZCBiZSB1c2VkIGluc3RlYWQuIiIiLAogICAgICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBkZWZhdWx0IHZhbHVlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOgogICAgICAgICAgICBfd2l0aEFyZ3VtZW50c0RlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIiwKICAgICAgICB0ZW1wbGF0ZURlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bCiAgICAgICJERUZBVUxUX1ZBTFVFX0lOX1JFRElSRUNUSU5HX0ZBQ1RPUllfQ09OU1RSVUNUT1IiCiAgICBdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGhlcmUgYmVjYXVzZSBhbnkgZGVmYXVsdCB2YWx1ZXMgb2YgJyR7bmFtZX0nIHdvdWxkIGJlIHVzZWQgaW5zdGVhZC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHJlbW92aW5nIHRoZSBkZWZhdWx0IHZhbHVlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZURlZmVycmVkQWZ0ZXJQcmVmaXggPSBtZXNzYWdlRGVmZXJyZWRBZnRlclByZWZpeDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VEZWZlcnJlZEFmdGVyUHJlZml4ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRGVmZXJyZWRBZnRlclByZWZpeCIsCiAgICBpbmRleDogNjgsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgZGVmZXJyZWQga2V5d29yZCBzaG91bGQgY29tZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIHByZWZpeCAoJ2FzJyBjbGF1c2UpLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIGRlZmVycmVkIGtleXdvcmQgYmVmb3JlIHRoZSBwcmVmaXguIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW4ndCB1c2UgdGhlIG5hbWUgJyNuYW1lJyBmb3IgYSBkZWZlcnJlZCBsaWJyYXJ5LCBhcyB0aGUgbmFtZSBpcyB1c2VkIGVsc2V3aGVyZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0RlZmVycmVkUHJlZml4RHVwbGljYXRlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQiLCB0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiU0hBUkVEX0RFRkVSUkVEX1BSRUZJWCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCB1c2UgdGhlIG5hbWUgJyR7bmFtZX0nIGZvciBhIGRlZmVycmVkIGxpYnJhcnksIGFzIHRoZSBuYW1lIGlzIHVzZWQgZWxzZXdoZXJlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyB1c2VkIGhlcmUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZSIsIHRlbXBsYXRlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0RlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyB1c2VkIGhlcmUuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHR5cGUgJyN0eXBlJyBpcyBkZWZlcnJlZCBsb2FkZWQgdmlhIHByZWZpeCAnI25hbWUnIGFuZCBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBhbm5vdGF0aW9uLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQgb2YgJyNuYW1lJyBvciB1c2UgYSBzdXBlcnR5cGUgb2YgJyN0eXBlJyB0aGF0IGlzbid0IGRlZmVycmVkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRGVmZXJyZWRUeXBlQW5ub3RhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKT4KICAgIGNvZGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpPigKICAgICAgICAiRGVmZXJyZWRUeXBlQW5ub3RhdGlvbiIsIHRlbXBsYXRlRGVmZXJyZWRUeXBlQW5ub3RhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BTk5PVEFUSU9OX0RFRkVSUkVEX0NMQVNTIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRGVmZXJyZWRUeXBlQW5ub3RhdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRGVmZXJyZWRUeXBlQW5ub3RhdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSB0eXBlICcke3R5cGV9JyBpcyBkZWZlcnJlZCBsb2FkZWQgdmlhIHByZWZpeCAnJHtuYW1lfScgYW5kIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGFubm90YXRpb24uIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydCBvZiAnJHtuYW1lfScgb3IgdXNlIGEgc3VwZXJ0eXBlIG9mICcke3R5cGV9JyB0aGF0IGlzbid0IGRlZmVycmVkLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMyk+CiAgICB0ZW1wbGF0ZURpbGxPdXRsaW5lU3VtbWFyeSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgY291bnQyLCBudW0gX251bTEsIG51bSBfbnVtMiwgbnVtIF9udW0zKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiSW5kZXhlZCAjY291bnQgbGlicmFyaWVzICgjY291bnQyIGJ5dGVzKSBpbiAjbnVtMSUuM21zLCB0aGF0IGlzLAojbnVtMiUxMi4zIGJ5dGVzL21zLCBhbmQKI251bTMlMTIuMyBtcy9saWJyYXJpZXMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRGlsbE91dGxpbmVTdW1tYXJ5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsCiAgICAgICAgbnVtIF9udW0zKT4gY29kZURpbGxPdXRsaW5lU3VtbWFyeSA9IGNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMyk+KAogICJEaWxsT3V0bGluZVN1bW1hcnkiLAogIHRlbXBsYXRlRGlsbE91dGxpbmVTdW1tYXJ5LAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0RpbGxPdXRsaW5lU3VtbWFyeSgKICAgIGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMykgewogIGlmIChjb3VudCA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIGlmIChjb3VudDIgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoX251bTEgPT0gbnVsbCkgdGhyb3cgJ05vIG51bWJlciBwcm92aWRlZCc7CiAgU3RyaW5nIG51bTEgPSBfbnVtMS50b1N0cmluZ0FzRml4ZWQoMyk7CiAgaWYgKF9udW0yID09IG51bGwpIHRocm93ICdObyBudW1iZXIgcHJvdmlkZWQnOwogIFN0cmluZyBudW0yID0gX251bTIudG9TdHJpbmdBc0ZpeGVkKDMpLnBhZExlZnQoMTIpOwogIGlmIChfbnVtMyA9PSBudWxsKSB0aHJvdyAnTm8gbnVtYmVyIHByb3ZpZGVkJzsKICBTdHJpbmcgbnVtMyA9IF9udW0zLnRvU3RyaW5nQXNGaXhlZCgzKS5wYWRMZWZ0KDEyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZURpbGxPdXRsaW5lU3VtbWFyeSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkluZGV4ZWQgJHtjb3VudH0gbGlicmFyaWVzICgke2NvdW50Mn0gYnl0ZXMpIGluICR7bnVtMX1tcywgdGhhdCBpcywKJHtudW0yfSBieXRlcy9tcywgYW5kCiR7bnVtM30gbXMvbGlicmFyaWVzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ2NvdW50JzogY291bnQsCiAgICAgICAgJ2NvdW50Mic6IGNvdW50MiwKICAgICAgICAnbnVtMSc6IF9udW0xLAogICAgICAgICdudW0yJzogX251bTIsCiAgICAgICAgJ251bTMnOiBfbnVtMwogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlR5cGUgJyNuYW1lJyBjYW4ndCB1c2UgaXRzZWxmIGFzIGEgYm91bmQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBicmVha2luZyB0aGUgY3ljbGUgYnkgcmVtb3ZpbmcgYXQgbGVhc3Qgb24gb2YgdGhlICdleHRlbmRzJyBjbGF1c2VzIGluIHRoZSBjeWNsZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0RpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXMiLCB0ZW1wbGF0ZURpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX1BBUkFNRVRFUl9TVVBFUlRZUEVfT0ZfSVRTX0JPVU5EIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0RpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXMsCiAgICAgIG1lc3NhZ2U6ICIiIlR5cGUgJyR7bmFtZX0nIGNhbid0IHVzZSBpdHNlbGYgYXMgYSBib3VuZC4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSBicmVha2luZyB0aGUgY3ljbGUgYnkgcmVtb3ZpbmcgYXQgbGVhc3Qgb24gb2YgdGhlICdleHRlbmRzJyBjbGF1c2VzIGluIHRoZSBjeWNsZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uID0KICAgIG1lc3NhZ2VEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZURpcmVjdGl2ZUFmdGVyRGVjbGFyYXRpb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uIiwKICAgIGluZGV4OiA2OSwKICAgIG1lc3NhZ2U6IHIiIiJEaXJlY3RpdmVzIG11c3QgYXBwZWFyIGJlZm9yZSBhbnkgZGVjbGFyYXRpb25zLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIGRpcmVjdGl2ZSBiZWZvcmUgYW55IGRlY2xhcmF0aW9ucy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRHVwbGljYXRlRGVmZXJyZWQgPSBtZXNzYWdlRHVwbGljYXRlRGVmZXJyZWQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRHVwbGljYXRlRGVmZXJyZWQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJEdXBsaWNhdGVEZWZlcnJlZCIsCiAgICBpbmRleDogNzEsCiAgICBtZXNzYWdlOiByIiIiQW4gaW1wb3J0IGRpcmVjdGl2ZSBjYW4gb25seSBoYXZlIG9uZSAnZGVmZXJyZWQnIGtleXdvcmQuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIGFsbCBidXQgb25lICdkZWZlcnJlZCcga2V5d29yZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRoZSBsYWJlbCAnI25hbWUnIHdhcyBhbHJlYWR5IHVzZWQgaW4gdGhpcyBzd2l0Y2ggc3RhdGVtZW50LiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBjaG9vc2luZyBhIGRpZmZlcmVudCBuYW1lIGZvciB0aGlzIGxhYmVsLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIkR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQiLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlTGFiZWxJblN3aXRjaFN0YXRlbWVudCwKICAgICAgICBpbmRleDogNzIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGxhYmVsICcke25hbWV9JyB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IGNob29zaW5nIGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoaXMgbGFiZWwuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRHVwbGljYXRlUHJlZml4ID0gbWVzc2FnZUR1cGxpY2F0ZVByZWZpeDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VEdXBsaWNhdGVQcmVmaXggPSBjb25zdCBNZXNzYWdlQ29kZSgiRHVwbGljYXRlUHJlZml4IiwKICAgIGluZGV4OiA3MywKICAgIG1lc3NhZ2U6IHIiIiJBbiBpbXBvcnQgZGlyZWN0aXZlIGNhbiBvbmx5IGhhdmUgb25lIHByZWZpeCAoJ2FzJyBjbGF1c2UpLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBwcmVmaXguIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkR1cGxpY2F0ZWREZWNsYXJhdGlvbiIsIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJEVVBMSUNBVEVfREVGSU5JVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb24oU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb24sCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJQcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlLAogICAgICBtZXNzYWdlOiAiIiJQcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiUHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJyNuYW1lJyBpcyBpbXBsaWVkIGJ5IHRoaXMgZGVmaW5pdGlvbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlIiwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiUHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJyR7bmFtZX0nIGlzIGltcGxpZWQgYnkgdGhpcyBkZWZpbml0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQ2FuJ3QgdXNlICcjbmFtZScgYmVjYXVzZSBpdCBpcyBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlIiwKICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IHVzZSAnJHtuYW1lfScgYmVjYXVzZSBpdCBpcyBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiJyNuYW1lJyBpcyBleHBvcnRlZCBmcm9tIGJvdGggJyN1cmknIGFuZCAnI3VyaTInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRFeHBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIGNvZGVEdXBsaWNhdGVkRXhwb3J0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICAgICAgICJEdXBsaWNhdGVkRXhwb3J0IiwgdGVtcGxhdGVEdXBsaWNhdGVkRXhwb3J0LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJBTUJJR1VPVVNfRVhQT1JUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRFeHBvcnQoU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRFeHBvcnQsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBleHBvcnRlZCBmcm9tIGJvdGggJyR7dXJpfScgYW5kICcke3VyaTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV8sICd1cmkyJzogdXJpMl99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXMgZXhwb3J0ZWQgZnJvbSBib3RoICcjdXJpJyBhbmQgJyN1cmkyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRXhwb3J0SW5UeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlRHVwbGljYXRlZEV4cG9ydEluVHlwZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICAiRHVwbGljYXRlZEV4cG9ydEluVHlwZSIsIHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydEluVHlwZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRXhwb3J0SW5UeXBlKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkRXhwb3J0SW5UeXBlLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgZXhwb3J0ZWQgZnJvbSBib3RoICcke3VyaX0nIGFuZCAnJHt1cmkyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgdGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI25hbWUnIGlzIGltcG9ydGVkIGZyb20gYm90aCAnI3VyaScgYW5kICcjdXJpMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZEltcG9ydCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgY29kZUR1cGxpY2F0ZWRJbXBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgIkR1cGxpY2F0ZWRJbXBvcnQiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWRJbXBvcnQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lmlnbm9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRJbXBvcnQoU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRJbXBvcnQsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBpbXBvcnRlZCBmcm9tIGJvdGggJyR7dXJpfScgYW5kICcke3VyaTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV8sICd1cmkyJzogdXJpMl99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRJbXBvcnRJblR5cGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXMgaW1wb3J0ZWQgZnJvbSBib3RoICcjdXJpJyBhbmQgJyN1cmkyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkSW1wb3J0SW5UeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlRHVwbGljYXRlZEltcG9ydEluVHlwZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICAiRHVwbGljYXRlZEltcG9ydEluVHlwZSIsIHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydEluVHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQU1CSUdVT1VTX0lNUE9SVCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRJbXBvcnRJblR5cGUoU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRJbXBvcnRJblR5cGUsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBpbXBvcnRlZCBmcm9tIGJvdGggJyR7dXJpfScgYW5kICcke3VyaTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV8sICd1cmkyJzogdXJpMl99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkEgbGlicmFyeSB3aXRoIG5hbWUgJyNuYW1lJyBpcyBleHBvcnRlZCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUV4cG9ydCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRHVwbGljYXRlZExpYnJhcnlFeHBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0IiwgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhQT1JUX0RVUExJQ0FURURfTElCUkFSWV9OQU1FRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUV4cG9ydChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0LAogICAgICBtZXNzYWdlOiAiIiJBIGxpYnJhcnkgd2l0aCBuYW1lICcke25hbWV9JyBpcyBleHBvcnRlZCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI25hbWUnIGlzIGFsc28gZXhwb3J0ZWQgaGVyZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUV4cG9ydENvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigiRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0IiwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0LAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgYWxzbyBleHBvcnRlZCBoZXJlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJBIGxpYnJhcnkgd2l0aCBuYW1lICcjbmFtZScgaXMgaW1wb3J0ZWQgbW9yZSB0aGFuIG9uY2UuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlJbXBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkTGlicmFyeUltcG9ydCIsIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklNUE9SVF9EVVBMSUNBVEVEX0xJQlJBUllfTkFNRUQiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkud2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlJbXBvcnQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydCwKICAgICAgbWVzc2FnZTogIiIiQSBsaWJyYXJ5IHdpdGggbmFtZSAnJHtuYW1lfScgaXMgaW1wb3J0ZWQgbW9yZSB0aGFuIG9uY2UuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyBhbHNvIGltcG9ydGVkIGhlcmUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIkR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCIsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIGlzIGFsc28gaW1wb3J0ZWQgaGVyZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSBtb2RpZmllciAnI2xleGVtZScgd2FzIGFscmVhZHkgc3BlY2lmaWVkLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBvY2N1cnJlbmNlIG9mIHRoZSBtb2RpZmllci4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTW9kaWZpZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUR1cGxpY2F0ZWRNb2RpZmllciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiRHVwbGljYXRlZE1vZGlmaWVyIiwgdGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIsCiAgICAgICAgaW5kZXg6IDcwKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTW9kaWZpZXIoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZE1vZGlmaWVyLAogICAgICBtZXNzYWdlOiAiIiJUaGUgbW9kaWZpZXIgJyR7bGV4ZW1lfScgd2FzIGFscmVhZHkgc3BlY2lmaWVkLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgb2NjdXJyZW5jZSBvZiB0aGUgbW9kaWZpZXIuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IGRlY2xhcmUgJyNuYW1lJyBiZWNhdXNlIGl0IHdhcyBhbHJlYWR5IHVzZWQgaW4gdGhpcyBzY29wZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWQiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFRkVSRU5DRURfQkVGT1JFX0RFQ0xBUkFUSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgZGVjbGFyZSAnJHtuYW1lfScgYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc2NvcGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiUHJldmlvdXMgdXNlIG9mICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2F1c2UiLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2F1c2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2F1c2UsCiAgICAgIG1lc3NhZ2U6ICIiIlByZXZpb3VzIHVzZSBvZiAnJHtuYW1lfScuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRHVwbGljYXRlZE5hbWVkQXJndW1lbnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkR1cGxpY2F0ZWQgbmFtZWQgYXJndW1lbnQgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTmFtZWRBcmd1bWVudCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRHVwbGljYXRlZE5hbWVkQXJndW1lbnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50IiwgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZWRBcmd1bWVudCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRFVQTElDQVRFX05BTUVEX0FSR1VNRU5UIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWROYW1lZEFyZ3VtZW50KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZE5hbWVkQXJndW1lbnQsCiAgICAgIG1lc3NhZ2U6ICIiIkR1cGxpY2F0ZWQgbmFtZWQgYXJndW1lbnQgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJEdXBsaWNhdGVkIHBhcmFtZXRlciBuYW1lICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZFBhcmFtZXRlck5hbWUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZSIsIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkRVUExJQ0FURV9ERUZJTklUSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZFBhcmFtZXRlck5hbWUsCiAgICAgIG1lc3NhZ2U6ICIiIkR1cGxpY2F0ZWQgcGFyYW1ldGVyIG5hbWUgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJPdGhlciBwYXJhbWV0ZXIgbmFtZWQgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlIiwgdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZSwKICAgICAgbWVzc2FnZTogIiIiT3RoZXIgcGFyYW1ldGVyIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFbXB0eU5hbWVkUGFyYW1ldGVyTGlzdCA9IG1lc3NhZ2VFbXB0eU5hbWVkUGFyYW1ldGVyTGlzdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFbXB0eU5hbWVkUGFyYW1ldGVyTGlzdCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkVtcHR5TmFtZWRQYXJhbWV0ZXJMaXN0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX0lERU5USUZJRVIiXSwKICAgIG1lc3NhZ2U6IHIiIiJOYW1lZCBwYXJhbWV0ZXIgbGlzdHMgY2Fubm90IGJlIGVtcHR5LiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgYSBuYW1lZCBwYXJhbWV0ZXIgdG8gdGhlIGxpc3QuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUVtcHR5T3B0aW9uYWxQYXJhbWV0ZXJMaXN0ID0KICAgIG1lc3NhZ2VFbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkVtcHR5T3B0aW9uYWxQYXJhbWV0ZXJMaXN0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX0lERU5USUZJRVIiXSwKICAgIG1lc3NhZ2U6IHIiIiJPcHRpb25hbCBwYXJhbWV0ZXIgbGlzdHMgY2Fubm90IGJlIGVtcHR5LiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHRoZSBsaXN0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFbmNvZGluZyA9IG1lc3NhZ2VFbmNvZGluZzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFbmNvZGluZyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFbmNvZGluZyIsCiAgICBtZXNzYWdlOiByIiIiVW5hYmxlIHRvIGRlY29kZSBieXRlcyBhcyBVVEYtOC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJOYW1lIG9mIGVudW0gY29uc3RhbnQgJyNuYW1lJyBjYW4ndCBiZSB0aGUgc2FtZSBhcyB0aGUgZW51bSdzIG93biBuYW1lLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigiRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZyIsCiAgICAgICAgdGVtcGxhdGVFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFTlVNX0NPTlNUQU5UX1dJVEhfRU5VTV9OQU1FIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0VudW1Db25zdGFudFNhbWVOYW1lQXNFbmNsb3NpbmcoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiTmFtZSBvZiBlbnVtIGNvbnN0YW50ICcke25hbWV9JyBjYW4ndCBiZSB0aGUgc2FtZSBhcyB0aGUgZW51bSdzIG93biBuYW1lLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUVudW1EZWNsYXJhdGlvbkVtcHR5ID0gbWVzc2FnZUVudW1EZWNsYXJhdGlvbkVtcHR5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUVudW1EZWNsYXJhdGlvbkVtcHR5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRW51bURlY2xhcmF0aW9uRW1wdHkiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVNUFRZX0VOVU1fQk9EWSJdLAogICAgbWVzc2FnZTogciIiIkFuIGVudW0gZGVjbGFyYXRpb24gY2FuJ3QgYmUgZW1wdHkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUVudW1JbkNsYXNzID0gbWVzc2FnZUVudW1JbkNsYXNzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUVudW1JbkNsYXNzID0gY29uc3QgTWVzc2FnZUNvZGUoIkVudW1JbkNsYXNzIiwKICAgIGluZGV4OiA3NCwKICAgIG1lc3NhZ2U6IHIiIiJFbnVtcyBjYW4ndCBiZSBkZWNsYXJlZCBpbnNpZGUgY2xhc3Nlcy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBlbnVtIHRvIHRoZSB0b3AtbGV2ZWwuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUVudW1JbnN0YW50aWF0aW9uID0gbWVzc2FnZUVudW1JbnN0YW50aWF0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUVudW1JbnN0YW50aWF0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRW51bUluc3RhbnRpYXRpb24iLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOU1RBTlRJQVRFX0VOVU0iXSwKICAgIG1lc3NhZ2U6IHIiIiJFbnVtcyBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUVxdWFsaXR5Q2Fubm90QmVFcXVhbGl0eU9wZXJhbmQgPQogICAgbWVzc2FnZUVxdWFsaXR5Q2Fubm90QmVFcXVhbGl0eU9wZXJhbmQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXF1YWxpdHlDYW5ub3RCZUVxdWFsaXR5T3BlcmFuZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkVxdWFsaXR5Q2Fubm90QmVFcXVhbGl0eU9wZXJhbmQiLAogICAgaW5kZXg6IDEsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBbiBlcXVhbGl0eSBleHByZXNzaW9uIGNhbid0IGJlIGFuIG9wZXJhbmQgb2YgYW5vdGhlciBlcXVhbGl0eSBleHByZXNzaW9uLiIiIiwKICAgIHRpcDogciIiIlRyeSByZS13cml0aW5nIHRoZSBleHByZXNzaW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiB0ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3QgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXhwZWN0ZWQgJyNzdHJpbmcnIGFmdGVyIHRoaXMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWRBZnRlckJ1dEdvdCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVFeHBlY3RlZEFmdGVyQnV0R290ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkV4cGVjdGVkQWZ0ZXJCdXRHb3QiLCB0ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUEVDVEVEX1RPS0VOIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkQWZ0ZXJCdXRHb3QoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZEFmdGVyQnV0R290LAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCAnJHtzdHJpbmd9JyBhZnRlciB0aGlzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBlY3RlZEFuSW5pdGlhbGl6ZXIgPSBtZXNzYWdlRXhwZWN0ZWRBbkluaXRpYWxpemVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cGVjdGVkQW5Jbml0aWFsaXplciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkV4cGVjdGVkQW5Jbml0aWFsaXplciIsCiAgICBpbmRleDogMzYsCiAgICBtZXNzYWdlOiByIiIiRXhwZWN0ZWQgYW4gaW5pdGlhbGl6ZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4cGVjdGVkQmxvY2sgPSBtZXNzYWdlRXhwZWN0ZWRCbG9jazsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHBlY3RlZEJsb2NrID0gY29uc3QgTWVzc2FnZUNvZGUoIkV4cGVjdGVkQmxvY2siLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUEVDVEVEX1RPS0VOIl0sCiAgICBtZXNzYWdlOiByIiIiRXhwZWN0ZWQgYSBibG9jay4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIHt9LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBlY3RlZEJsb2NrVG9Ta2lwID0gbWVzc2FnZUV4cGVjdGVkQmxvY2tUb1NraXA7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwZWN0ZWRCbG9ja1RvU2tpcCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkV4cGVjdGVkQmxvY2tUb1NraXAiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfRlVOQ1RJT05fQk9EWSJdLAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIGEgZnVuY3Rpb24gYm9keSBvciAnPT4nLiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcge30uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4cGVjdGVkQm9keSA9IG1lc3NhZ2VFeHBlY3RlZEJvZHk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwZWN0ZWRCb2R5ID0gY29uc3QgTWVzc2FnZUNvZGUoIkV4cGVjdGVkQm9keSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19GVU5DVElPTl9CT0RZIl0sCiAgICBtZXNzYWdlOiByIiIiRXhwZWN0ZWQgYSBmdW5jdGlvbiBib2R5IG9yICc9PicuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyB7fS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gdGVtcGxhdGVFeHBlY3RlZEJ1dEdvdCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJFeHBlY3RlZCAnI3N0cmluZycgYmVmb3JlIHRoaXMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWRCdXRHb3QpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlRXhwZWN0ZWRCdXRHb3QgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiRXhwZWN0ZWRCdXRHb3QiLCB0ZW1wbGF0ZUV4cGVjdGVkQnV0R290LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9UT0tFTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlY3RlZEJ1dEdvdChTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cGVjdGVkQnV0R290LAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCAnJHtzdHJpbmd9JyBiZWZvcmUgdGhpcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlRXhwZWN0ZWRDbGFzc01lbWJlciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXhwZWN0ZWQgYSBjbGFzcyBtZW1iZXIsIGJ1dCBnb3QgJyNsZXhlbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkQ2xhc3NNZW1iZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUV4cGVjdGVkQ2xhc3NNZW1iZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkV4cGVjdGVkQ2xhc3NNZW1iZXIiLCB0ZW1wbGF0ZUV4cGVjdGVkQ2xhc3NNZW1iZXIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUEVDVEVEX0NMQVNTX01FTUJFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlY3RlZENsYXNzTWVtYmVyKFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cGVjdGVkQ2xhc3NNZW1iZXIsCiAgICAgIG1lc3NhZ2U6ICIiIkV4cGVjdGVkIGEgY2xhc3MgbWVtYmVyLCBidXQgZ290ICcke2xleGVtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIHRlbXBsYXRlRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkEgI3N0cmluZyBtdXN0IGhhdmUgYSBib2R5LCBldmVuIGlmIGl0IGlzIGVtcHR5LiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBhZGRpbmcgYW4gZW1wdHkgYm9keS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkV4cGVjdGVkQ2xhc3NPck1peGluQm9keSIsIHRlbXBsYXRlRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5LAogICAgICAgIGluZGV4OiA4KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHkoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHksCiAgICAgIG1lc3NhZ2U6ICIiIkEgJHtzdHJpbmd9IG11c3QgaGF2ZSBhIGJvZHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkuIiIiLAogICAgICB0aXA6ICIiIlRyeSBhZGRpbmcgYW4gZW1wdHkgYm9keS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlRXhwZWN0ZWREZWNsYXJhdGlvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXhwZWN0ZWQgYSBkZWNsYXJhdGlvbiwgYnV0IGdvdCAnI2xleGVtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWREZWNsYXJhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlRXhwZWN0ZWREZWNsYXJhdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiRXhwZWN0ZWREZWNsYXJhdGlvbiIsIHRlbXBsYXRlRXhwZWN0ZWREZWNsYXJhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhQRUNURURfRVhFQ1VUQUJMRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlY3RlZERlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cGVjdGVkRGVjbGFyYXRpb24sCiAgICAgIG1lc3NhZ2U6ICIiIkV4cGVjdGVkIGEgZGVjbGFyYXRpb24sIGJ1dCBnb3QgJyR7bGV4ZW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBlY3RlZEVsc2VPckNvbW1hID0gbWVzc2FnZUV4cGVjdGVkRWxzZU9yQ29tbWE7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwZWN0ZWRFbHNlT3JDb21tYSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkV4cGVjdGVkRWxzZU9yQ29tbWEiLAogICAgaW5kZXg6IDQ2LAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkICdlbHNlJyBvciBjb21tYS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVFeHBlY3RlZEVudW1Cb2R5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXhwZWN0ZWQgYSBlbnVtIGJvZHksIGJ1dCBnb3QgJyNsZXhlbWUnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJBbiBlbnVtIGRlZmluaXRpb24gbXVzdCBoYXZlIGEgYm9keSB3aXRoIGF0IGxlYXN0IG9uZSBjb25zdGFudCBuYW1lLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWRFbnVtQm9keSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlRXhwZWN0ZWRFbnVtQm9keSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiRXhwZWN0ZWRFbnVtQm9keSIsIHRlbXBsYXRlRXhwZWN0ZWRFbnVtQm9keSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19FTlVNX0JPRFkiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwZWN0ZWRFbnVtQm9keShUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZEVudW1Cb2R5LAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCBhIGVudW0gYm9keSwgYnV0IGdvdCAnJHtsZXhlbWV9Jy4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIkFuIGVudW0gZGVmaW5pdGlvbiBtdXN0IGhhdmUgYSBib2R5IHdpdGggYXQgbGVhc3Qgb25lIGNvbnN0YW50IG5hbWUuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVFeHBlY3RlZEZ1bmN0aW9uQm9keSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXhwZWN0ZWQgYSBmdW5jdGlvbiBib2R5LCBidXQgZ290ICcjbGV4ZW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNFeHBlY3RlZEZ1bmN0aW9uQm9keSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlRXhwZWN0ZWRGdW5jdGlvbkJvZHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkV4cGVjdGVkRnVuY3Rpb25Cb2R5IiwgdGVtcGxhdGVFeHBlY3RlZEZ1bmN0aW9uQm9keSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19GVU5DVElPTl9CT0RZIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cGVjdGVkRnVuY3Rpb25Cb2R5LAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCBhIGZ1bmN0aW9uIGJvZHksIGJ1dCBnb3QgJyR7bGV4ZW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBlY3RlZEhleERpZ2l0ID0gbWVzc2FnZUV4cGVjdGVkSGV4RGlnaXQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwZWN0ZWRIZXhEaWdpdCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkV4cGVjdGVkSGV4RGlnaXQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfSEVYX0RJR0lUIl0sCiAgICBtZXNzYWdlOiByIiIiQSBoZXggZGlnaXQgKDAtOSBvciBBLUYpIG11c3QgZm9sbG93ICcweCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciwgYnV0IGdvdCAnI2xleGVtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWRJZGVudGlmaWVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVFeHBlY3RlZElkZW50aWZpZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkV4cGVjdGVkSWRlbnRpZmllciIsIHRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX0lERU5USUZJRVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwZWN0ZWRJZGVudGlmaWVyKFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cGVjdGVkSWRlbnRpZmllciwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciwgYnV0IGdvdCAnJHtsZXhlbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IHRlbXBsYXRlRXhwZWN0ZWRJbnN0ZWFkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkICcjc3RyaW5nJyBpbnN0ZWFkIG9mIHRoaXMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWRJbnN0ZWFkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZUV4cGVjdGVkSW5zdGVhZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJFeHBlY3RlZEluc3RlYWQiLCB0ZW1wbGF0ZUV4cGVjdGVkSW5zdGVhZCwKICAgICAgICBpbmRleDogNDEpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkSW5zdGVhZChTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cGVjdGVkSW5zdGVhZCwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgJyR7c3RyaW5nfScgaW5zdGVhZCBvZiB0aGlzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBlY3RlZE5hbWVkQXJndW1lbnQgPSBtZXNzYWdlRXhwZWN0ZWROYW1lZEFyZ3VtZW50OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cGVjdGVkTmFtZWRBcmd1bWVudCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkV4cGVjdGVkTmFtZWRBcmd1bWVudCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhUUkFfUE9TSVRJT05BTF9BUkdVTUVOVFMiXSwKICAgIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCBuYW1lZCBhcmd1bWVudC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXhwZWN0ZWRPbmVFeHByZXNzaW9uID0gbWVzc2FnZUV4cGVjdGVkT25lRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHBlY3RlZE9uZUV4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHBlY3RlZE9uZUV4cHJlc3Npb24iLAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIG9uZSBleHByZXNzaW9uLCBidXQgZm91bmQgYWRkaXRpb25hbCBpbnB1dC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXhwZWN0ZWRPcGVuUGFyZW5zID0gbWVzc2FnZUV4cGVjdGVkT3BlblBhcmVuczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHBlY3RlZE9wZW5QYXJlbnMgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkV4cGVjdGVkT3BlblBhcmVucyIsIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCAnKCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4cGVjdGVkU3RhdGVtZW50ID0gbWVzc2FnZUV4cGVjdGVkU3RhdGVtZW50OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cGVjdGVkU3RhdGVtZW50ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRXhwZWN0ZWRTdGF0ZW1lbnQiLAogICAgaW5kZXg6IDI5LAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIGEgc3RhdGVtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVFeHBlY3RlZFN0cmluZyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXhwZWN0ZWQgYSBTdHJpbmcsIGJ1dCBnb3QgJyNsZXhlbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkU3RyaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVFeHBlY3RlZFN0cmluZyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiRXhwZWN0ZWRTdHJpbmciLCB0ZW1wbGF0ZUV4cGVjdGVkU3RyaW5nLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9TVFJJTkdfTElURVJBTCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlY3RlZFN0cmluZyhUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZFN0cmluZywKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgYSBTdHJpbmcsIGJ1dCBnb3QgJyR7bGV4ZW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiB0ZW1wbGF0ZUV4cGVjdGVkVG9rZW4gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXhwZWN0ZWQgdG8gZmluZCAnI3N0cmluZycuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWRUb2tlbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVFeHBlY3RlZFRva2VuID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkV4cGVjdGVkVG9rZW4iLCB0ZW1wbGF0ZUV4cGVjdGVkVG9rZW4sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUEVDVEVEX1RPS0VOIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkVG9rZW4oU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZFRva2VuLAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCB0byBmaW5kICcke3N0cmluZ30nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVFeHBlY3RlZFR5cGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIGEgdHlwZSwgYnV0IGdvdCAnI2xleGVtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWRUeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVFeHBlY3RlZFR5cGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkV4cGVjdGVkVHlwZSIsIHRlbXBsYXRlRXhwZWN0ZWRUeXBlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9UWVBFX05BTUUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwZWN0ZWRUeXBlKFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cGVjdGVkVHlwZSwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgYSB0eXBlLCBidXQgZ290ICcke2xleGVtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXhwZWN0ZWRVcmkgPSBtZXNzYWdlRXhwZWN0ZWRVcmk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwZWN0ZWRVcmkgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkV4cGVjdGVkVXJpIiwgbWVzc2FnZTogciIiIkV4cGVjdGVkIGEgVVJJLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZyk+IHRlbXBsYXRlRXhwZXJpbWVudE5vdEVuYWJsZWQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhpcyByZXF1aXJlcyB0aGUgJyNzdHJpbmcnIGV4cGVyaW1lbnQgdG8gYmUgZW5hYmxlZC4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGVuYWJsaW5nIHRoaXMgZXhwZXJpbWVudCBieSBhZGRpbmcgaXQgdG8gdGhlIGNvbW1hbmQgbGluZSB3aGVuIGNvbXBpbGluZyBhbmQgcnVubmluZy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVyaW1lbnROb3RFbmFibGVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZUV4cGVyaW1lbnROb3RFbmFibGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkV4cGVyaW1lbnROb3RFbmFibGVkIiwgdGVtcGxhdGVFeHBlcmltZW50Tm90RW5hYmxlZCwKICAgICAgICBpbmRleDogNDgpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4cGVyaW1lbnROb3RFbmFibGVkKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRXhwZXJpbWVudE5vdEVuYWJsZWQsCiAgICAgIG1lc3NhZ2U6ICIiIlRoaXMgcmVxdWlyZXMgdGhlICcke3N0cmluZ30nIGV4cGVyaW1lbnQgdG8gYmUgZW5hYmxlZC4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSBlbmFibGluZyB0aGlzIGV4cGVyaW1lbnQgYnkgYWRkaW5nIGl0IHRvIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBjb21waWxpbmcgYW5kIHJ1bm5pbmcuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4cG9ydEFmdGVyUGFydCA9IG1lc3NhZ2VFeHBvcnRBZnRlclBhcnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwb3J0QWZ0ZXJQYXJ0ID0gY29uc3QgTWVzc2FnZUNvZGUoIkV4cG9ydEFmdGVyUGFydCIsCiAgICBpbmRleDogNzUsCiAgICBtZXNzYWdlOiByIiIiRXhwb3J0IGRpcmVjdGl2ZXMgbXVzdCBwcmVjZWRlIHBhcnQgZGlyZWN0aXZlcy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBleHBvcnQgZGlyZWN0aXZlcyBiZWZvcmUgdGhlIHBhcnQgZGlyZWN0aXZlcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZUV4cG9ydEhpZGVzRXhwb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJFeHBvcnQgb2YgJyNuYW1lJyAoZnJvbSAnI3VyaScpIGhpZGVzIGV4cG9ydCBmcm9tICcjdXJpMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwb3J0SGlkZXNFeHBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIGNvZGVFeHBvcnRIaWRlc0V4cG9ydCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICAiRXhwb3J0SGlkZXNFeHBvcnQiLCB0ZW1wbGF0ZUV4cG9ydEhpZGVzRXhwb3J0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pZ25vcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBvcnRIaWRlc0V4cG9ydChTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICBTdHJpbmcgdXJpMiA9IHJlbGF0aXZpemVVcmkodXJpMl8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRXhwb3J0SGlkZXNFeHBvcnQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJFeHBvcnQgb2YgJyR7bmFtZX0nIChmcm9tICcke3VyaX0nKSBoaWRlcyBleHBvcnQgZnJvbSAnJHt1cmkyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4cHJlc3Npb25Ob3RNZXRhZGF0YSA9IG1lc3NhZ2VFeHByZXNzaW9uTm90TWV0YWRhdGE7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwcmVzc2lvbk5vdE1ldGFkYXRhID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRXhwcmVzc2lvbk5vdE1ldGFkYXRhIiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlRoaXMgY2FuJ3QgYmUgdXNlZCBhcyBtZXRhZGF0YTsgbWV0YWRhdGEgc2hvdWxkIGJlIGEgcmVmZXJlbmNlIHRvIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IHZhcmlhYmxlLCBvciBhIGNhbGwgdG8gYSBjb25zdGFudCBjb25zdHJ1Y3Rvci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRXh0ZW5kaW5nRW51bSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiJyNuYW1lJyBpcyBhbiBlbnVtIGFuZCBjYW4ndCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNFeHRlbmRpbmdFbnVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVFeHRlbmRpbmdFbnVtID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJFeHRlbmRpbmdFbnVtIiwgdGVtcGxhdGVFeHRlbmRpbmdFbnVtLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFRFTkRTX0VOVU0iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXh0ZW5kaW5nRW51bShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4dGVuZGluZ0VudW0sCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBhbiBlbnVtIGFuZCBjYW4ndCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVFeHRlbmRpbmdSZXN0cmljdGVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI25hbWUnIGlzIHJlc3RyaWN0ZWQgYW5kIGNhbid0IGJlIGV4dGVuZGVkIG9yIGltcGxlbWVudGVkLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4dGVuZGluZ1Jlc3RyaWN0ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUV4dGVuZGluZ1Jlc3RyaWN0ZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkV4dGVuZGluZ1Jlc3RyaWN0ZWQiLCB0ZW1wbGF0ZUV4dGVuZGluZ1Jlc3RyaWN0ZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYVEVORFNfRElTQUxMT1dFRF9DTEFTUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHRlbmRpbmdSZXN0cmljdGVkKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRXh0ZW5kaW5nUmVzdHJpY3RlZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIicke25hbWV9JyBpcyByZXN0cmljdGVkIGFuZCBjYW4ndCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbENsYXNzID0gbWVzc2FnZUV4dGVybmFsQ2xhc3M7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxDbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHRlcm5hbENsYXNzIiwKICAgIGluZGV4OiAzLAogICAgbWVzc2FnZTogciIiIkNsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2V4dGVybmFsJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5ID0KICAgIG1lc3NhZ2VFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEJvZHk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5IiwKICAgIGluZGV4OiA4NywKICAgIG1lc3NhZ2U6IHIiIiJFeHRlcm5hbCBjb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIGJvZHkuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGJvZHkgb2YgdGhlIGNvbnN0cnVjdG9yLCBvciByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzID0KICAgIG1lc3NhZ2VFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXplcnMgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkV4dGVybmFsQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXplcnMiLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFRFUk5BTF9DT05TVFJVQ1RPUl9XSVRIX0ZJRUxEX0lOSVRJQUxJWkVSUyJdLAogICAgICAgIG1lc3NhZ2U6IHIiIiJBbiBleHRlcm5hbCBjb25zdHJ1Y3RvciBjYW4ndCBpbml0aWFsaXplIGZpZWxkcy4iIiIsCiAgICAgICAgdGlwOgogICAgICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSBmaWVsZCBpbml0aWFsaXplcnMsIG9yIHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4dGVybmFsRW51bSA9IG1lc3NhZ2VFeHRlcm5hbEVudW07CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxFbnVtID0gY29uc3QgTWVzc2FnZUNvZGUoIkV4dGVybmFsRW51bSIsCiAgICBpbmRleDogNSwKICAgIG1lc3NhZ2U6IHIiIiJFbnVtcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnZXh0ZXJuYWwnLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbEZhY3RvcnlSZWRpcmVjdGlvbiA9CiAgICBtZXNzYWdlRXh0ZXJuYWxGYWN0b3J5UmVkaXJlY3Rpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxGYWN0b3J5UmVkaXJlY3Rpb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHRlcm5hbEZhY3RvcnlSZWRpcmVjdGlvbiIsCiAgICBpbmRleDogODUsCiAgICBtZXNzYWdlOiByIiIiQSByZWRpcmVjdGluZyBmYWN0b3J5IGNhbid0IGJlIGV4dGVybmFsLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgJ2V4dGVybmFsJyBtb2RpZmllci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHkgPSBtZXNzYWdlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHRlcm5hbEZhY3RvcnlXaXRoQm9keSIsCiAgICBpbmRleDogODYsCiAgICBtZXNzYWdlOiByIiIiRXh0ZXJuYWwgZmFjdG9yaWVzIGNhbid0IGhhdmUgYSBib2R5LiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSBib2R5IG9mIHRoZSBmYWN0b3J5LCBvciByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbEZpZWxkID0gbWVzc2FnZUV4dGVybmFsRmllbGQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxGaWVsZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHRlcm5hbEZpZWxkIiwKICAgIGluZGV4OiA1MCwKICAgIG1lc3NhZ2U6IHIiIiJGaWVsZHMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2V4dGVybmFsJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxNZXRob2RXaXRoQm9keSA9IG1lc3NhZ2VFeHRlcm5hbE1ldGhvZFdpdGhCb2R5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsTWV0aG9kV2l0aEJvZHkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHRlcm5hbE1ldGhvZFdpdGhCb2R5IiwKICAgIGluZGV4OiA0OSwKICAgIG1lc3NhZ2U6IHIiIiJBbiBleHRlcm5hbCBvciBuYXRpdmUgbWV0aG9kIGNhbid0IGhhdmUgYSBib2R5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbFR5cGVkZWYgPSBtZXNzYWdlRXh0ZXJuYWxUeXBlZGVmOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsVHlwZWRlZiA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHRlcm5hbFR5cGVkZWYiLAogICAgaW5kZXg6IDc2LAogICAgbWVzc2FnZTogciIiIlR5cGVkZWZzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdleHRlcm5hbCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgaGF2ZSBtb2RpZmllciAnI2xleGVtZScgaGVyZS4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcmVtb3ZpbmcgJyNsZXhlbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4dHJhbmVvdXNNb2RpZmllcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlRXh0cmFuZW91c01vZGlmaWVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJFeHRyYW5lb3VzTW9kaWZpZXIiLCB0ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllciwKICAgICAgICBpbmRleDogNzcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4dHJhbmVvdXNNb2RpZmllcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHRyYW5lb3VzTW9kaWZpZXIsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGhhdmUgbW9kaWZpZXIgJyR7bGV4ZW1lfScgaGVyZS4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHJlbW92aW5nICcke2xleGVtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmFjdG9yeU5vdFN5bmMgPSBtZXNzYWdlRmFjdG9yeU5vdFN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmFjdG9yeU5vdFN5bmMgPSBjb25zdCBNZXNzYWdlQ29kZSgiRmFjdG9yeU5vdFN5bmMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PTl9TWU5DX0ZBQ1RPUlkiXSwKICAgIG1lc3NhZ2U6IHIiIiJGYWN0b3J5IGJvZGllcyBjYW4ndCB1c2UgJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZhY3RvcnlUb3BMZXZlbERlY2xhcmF0aW9uID0KICAgIG1lc3NhZ2VGYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZhY3RvcnlUb3BMZXZlbERlY2xhcmF0aW9uIiwKICAgIGluZGV4OiA3OCwKICAgIG1lc3NhZ2U6IHIiIiJUb3AtbGV2ZWwgZGVjbGFyYXRpb25zIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdmYWN0b3J5Jy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2ZhY3RvcnknLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIHZhbHVlIGFmdGVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkZhc3RhQ0xJQXJndW1lbnRSZXF1aXJlZCIsCiAgdGVtcGxhdGVGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkLAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCB2YWx1ZSBhZnRlciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmFzdGFVc2FnZUxvbmcgPSBtZXNzYWdlRmFzdGFVc2FnZUxvbmc7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmFzdGFVc2FnZUxvbmcgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkZhc3RhVXNhZ2VMb25nIiwgbWVzc2FnZTogciIiIlN1cHBvcnRlZCBvcHRpb25zOgoKICAtbyA8ZmlsZT4sIC0tb3V0cHV0PTxmaWxlPgogICAgR2VuZXJhdGUgdGhlIG91dHB1dCBpbnRvIDxmaWxlPi4KCiAgLWgsIC9oLCAvPywgLS1oZWxwCiAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAoYWRkIC12IGZvciBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3B0aW9ucykuCgogIC12LCAtLXZlcmJvc2UKICAgIERpc3BsYXkgdmVyYm9zZSBpbmZvcm1hdGlvbi4KCiAgLURuYW1lCiAgLURuYW1lPXZhbHVlCiAgICBEZWZpbmUgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gdGhlIGNvbXBpbGUtdGltZSBlbnZpcm9ubWVudC4KCiAgLS1uby1kZWZpbmVzCiAgICBJZ25vcmUgYWxsIC1EIG9wdGlvbnMgYW5kIGxlYXZlIGVudmlyb25tZW50IGNvbnN0YW50cyB1bmV2YWx1YXRlZC4KCiAgLS0KICAgIFN0b3Agb3B0aW9uIHBhcnNpbmcsIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgaXMgYXNzdW1lZCB0byBiZQogICAgZmlsZSBuYW1lcyBvciBhcmd1bWVudHMgdG8gdGhlIERhcnQgcHJvZ3JhbS4KCiAgLS1wYWNrYWdlcz08ZmlsZT4KICAgIFVzZSBwYWNrYWdlIHJlc29sdXRpb24gY29uZmlndXJhdGlvbiA8ZmlsZT4sIHdoaWNoIHNob3VsZCBjb250YWluIGEgbWFwcGluZwogICAgb2YgcGFja2FnZSBuYW1lcyB0byBwYXRocy4KCiAgLS1wbGF0Zm9ybT08ZmlsZT4KICAgIFJlYWQgdGhlIFNESyBwbGF0Zm9ybSBmcm9tIDxmaWxlPiwgd2hpY2ggc2hvdWxkIGJlIGluIERpbGwvS2VybmVsIElSIGZvcm1hdAogICAgYW5kIGNvbnRhaW4gdGhlIERhcnQgU0RLLgoKICAtLXRhcmdldD1kYXJ0MmpzfGRhcnQyanNfc2VydmVyfGRhcnRfcnVubmVyfGRhcnRkZXZjfGZsdXR0ZXJ8Zmx1dHRlcl9ydW5uZXJ8bm9uZXx2bQogICAgU3BlY2lmeSB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uCgogIC0tZW5hYmxlLWFzc2VydHMKICAgIENoZWNrIGFzc2VydHMgaW4gaW5pdGlhbGl6ZXJzIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLgoKICAtLXZlcmlmeQogICAgQ2hlY2sgdGhhdCB0aGUgZ2VuZXJhdGVkIG91dHB1dCBpcyBmcmVlIG9mIHZhcmlvdXMgcHJvYmxlbXMuIFRoaXMgaXMgbW9zdGx5CiAgICB1c2VmdWwgZm9yIGRldmVsb3BlcnMgb2YgdGhpcyBjb21waWxlciBvciBLZXJuZWwgdHJhbnNmb3JtYXRpb25zLgoKICAtLWR1bXAtaXIKICAgIFByaW50IGNvbXBpbGVkIGxpYnJhcmllcyBpbiBLZXJuZWwgc291cmNlIG5vdGF0aW9uLgoKICAtLW9taXQtcGxhdGZvcm0KICAgIEV4Y2x1ZGUgdGhlIHBsYXRmb3JtIGZyb20gdGhlIHNlcmlhbGl6ZWQgZGlsbCBmaWxlLgoKICAtLWJ5dGVjb2RlCiAgICBHZW5lcmF0ZSBieXRlY29kZS4gU3VwcG9ydGVkIG9ubHkgZm9yIFNESyBwbGF0Zm9ybSBjb21waWxhdGlvbi4KCiAgLS1leGNsdWRlLXNvdXJjZQogICAgRG8gbm90IGluY2x1ZGUgc291cmNlIGNvZGUgaW4gdGhlIGRpbGwgZmlsZS4KCiAgLS1jb21waWxlLXNkaz08c2RrPgogICAgQ29tcGlsZSB0aGUgU0RLIGZyb20gc2NyYXRjaCBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZnJvbSBhIC5kaWxsIGZpbGUKICAgIChzZWUgLS1wbGF0Zm9ybSkuCgogIC0tc2RrPTxzZGs+CiAgICBMb2NhdGlvbiBvZiB0aGUgU0RLIHNvdXJjZXMgZm9yIHVzZSB3aGVuIGNvbXBpbGluZyBhZGRpdGlvbmFsIHBsYXRmb3JtCiAgICBsaWJyYXJpZXMuCgogIC0tc3VwZXJtaXhpbgogICAgSWdub3JlZCBmb3Igbm93LgoKICAtLXNpbmdsZS1yb290LXNjaGVtZT1TdHJpbmcKICAtLXNpbmdsZS1yb290LWJhc2U9PGRpcj4KICAgIFNwZWNpZnkgYSBjdXN0b20gVVJJIHNjaGVtZSBhbmQgYSBsb2NhdGlvbiBvbiBkaXNrIHdoZXJlIHN1Y2ggVVJJcyBhcmUKICAgIG1hcHBlZCB0by4KCiAgICBXaGVuIHNwZWNpZmllZCwgdGhlIGNvbXBpbGVyIGNhbiBiZSBpbnZva2VkIHdpdGggaW5wdXRzIHVzaW5nIHRoZSBjdXN0b20KICAgIFVSSSBzY2hlbWUuIFRoZSBjb21waWxlciBjYW4gaWdub3JlIHRoZSBleGFjdCBsb2NhdGlvbiBvZiBmaWxlcyBvbiBkaXNrCiAgICBhbmQgYXMgYSByZXN1bHQgdG8gcHJvZHVjZSBvdXRwdXQgdGhhdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgYWJzb2x1dGUKICAgIGxvY2F0aW9uIG9mIGZpbGVzIG9uIGRpc2suIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgaW50ZWdyYXRpbmcgd2l0aAogICAgYnVpbGQgc3lzdGVtcy4KCiAgLS1mYXRhbD1lcnJvcnMKICAtLWZhdGFsPXdhcm5pbmdzCiAgICBNYWtlcyBtZXNzYWdlcyBvZiB0aGUgZ2l2ZW4ga2luZHMgZmF0YWwsIHRoYXQgaXMsIGltbWVkaWF0ZWx5IHN0b3AgdGhlCiAgICBjb21waWxlciB3aXRoIGEgbm9uLXplcm8gZXhpdC1jb2RlLiBJbiAtLXZlcmJvc2UgbW9kZSwgYWxzbyBkaXNwbGF5IGFuCiAgICBpbnRlcm5hbCBzdGFjayB0cmFjZSBmcm9tIHRoZSBjb21waWxlci4gTXVsdGlwbGUga2luZHMgY2FuIGJlIHNlcGFyYXRlZCBieQogICAgY29tbWFzLCBmb3IgZXhhbXBsZSwgLS1mYXRhbD1lcnJvcnMsd2FybmluZ3MuCgogIC0tZW5hYmxlLWV4cGVyaW1lbnQ9PGZsYWc+CiAgICBFbmFibGUgb3IgZGlzYWJsZSBhbiBleHBlcmltZW50YWwgZmxhZywgdXNlZCB0byBndWFyZCBmZWF0dXJlcyBjdXJyZW50bHkKICAgIGluIGRldmVsb3BtZW50LiBQcmVmaXggYW4gZXhwZXJpbWVudCBuYW1lIHdpdGggJ25vLScgdG8gZGlzYWJsZSBpdC4KICAgIE11bHRpcGxlIGV4cGVyaW1lbnRzIGNhbiBiZSBzZXBhcmF0ZWQgYnkgY29tbWFzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGYXN0YVVzYWdlU2hvcnQgPSBtZXNzYWdlRmFzdGFVc2FnZVNob3J0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUZhc3RhVXNhZ2VTaG9ydCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiRmFzdGFVc2FnZVNob3J0IiwgbWVzc2FnZTogciIiIkZyZXF1ZW50bHkgdXNlZCBvcHRpb25zOgoKICAtbyA8ZmlsZT4gR2VuZXJhdGUgdGhlIG91dHB1dCBpbnRvIDxmaWxlPi4KICAtaCAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgKGFkZCAtdiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9wdGlvbnMpLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgdGVtcGxhdGVGZmlEYXJ0VHlwZU1pc21hdGNoID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkICcjdHlwZScgdG8gYmUgYSBzdWJ0eXBlIG9mICcjdHlwZTInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZmaURhcnRUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUZmaURhcnRUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAiRmZpRGFydFR5cGVNaXNtYXRjaCIsCiAgdGVtcGxhdGVGZmlEYXJ0VHlwZU1pc21hdGNoLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaURhcnRUeXBlTWlzbWF0Y2goRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlEYXJ0VHlwZU1pc21hdGNoLAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCAnJHt0eXBlfScgdG8gYmUgYSBzdWJ0eXBlIG9mICcke3R5cGUyfScuIiIiICsKICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDbGFzcyAnI25hbWUnIGNhbm5vdCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3MpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3MgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkZmaUV4dGVuZHNPckltcGxlbWVudHNTZWFsZWRDbGFzcyIsCiAgdGVtcGxhdGVGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3MsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzLAogICAgICBtZXNzYWdlOiAiIiJDbGFzcyAnJHtuYW1lfScgY2Fubm90IGJlIGV4dGVuZGVkIG9yIGltcGxlbWVudGVkLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRmZpRmllbGRBbm5vdGF0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJGaWVsZCAnI25hbWUnIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFubm90YXRpb24gdG8gZGVjbGFyZSBpdHMgQysrIHR5cGUsIHdoaWNoIGNhbm5vdCBiZSBWb2lkLiBkYXJ0OmZmaSBTdHJ1Y3RzIGNhbm5vdCBoYXZlIHJlZ3VsYXIgRGFydCBmaWVsZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlGaWVsZEFubm90YXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUZmaUZpZWxkQW5ub3RhdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRmZpRmllbGRBbm5vdGF0aW9uIiwKICB0ZW1wbGF0ZUZmaUZpZWxkQW5ub3RhdGlvbiwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlGaWVsZEFubm90YXRpb24oU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlGaWVsZEFubm90YXRpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGaWVsZCAnJHtuYW1lfScgcmVxdWlyZXMgZXhhY3RseSBvbmUgYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgd2hpY2ggY2Fubm90IGJlIFZvaWQuIGRhcnQ6ZmZpIFN0cnVjdHMgY2Fubm90IGhhdmUgcmVndWxhciBEYXJ0IGZpZWxkcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUZmaUZpZWxkSW5pdGlhbGl6ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkZpZWxkICcjbmFtZScgaXMgYSBkYXJ0OmZmaSBQb2ludGVyIHRvIGEgc3RydWN0IGZpZWxkIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdHJ1Y3RvciBleGVjdXRpb24uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlGaWVsZEluaXRpYWxpemVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVGZmlGaWVsZEluaXRpYWxpemVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICJGZmlGaWVsZEluaXRpYWxpemVyIiwKICB0ZW1wbGF0ZUZmaUZpZWxkSW5pdGlhbGl6ZXIsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmZpRmllbGRJbml0aWFsaXplcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZmaUZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGaWVsZCAnJHtuYW1lfScgaXMgYSBkYXJ0OmZmaSBQb2ludGVyIHRvIGEgc3RydWN0IGZpZWxkIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdHJ1Y3RvciBleGVjdXRpb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVGZmlGaWVsZE5vQW5ub3RhdGlvbiA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRmllbGQgJyNuYW1lJyByZXF1aXJlcyBubyBhbm5vdGF0aW9uIHRvIGRlY2xhcmUgaXRzIEMrKyB0eXBlLCBpdCBpcyBhIFBvaW50ZXIgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHNhbWUgdHlwZSBpbiBEYXJ0IGFuZCBDKysuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlGaWVsZE5vQW5ub3RhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRmZpRmllbGROb0Fubm90YXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkZmaUZpZWxkTm9Bbm5vdGF0aW9uIiwKICB0ZW1wbGF0ZUZmaUZpZWxkTm9Bbm5vdGF0aW9uLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaUZpZWxkTm9Bbm5vdGF0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpRmllbGROb0Fubm90YXRpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGaWVsZCAnJHtuYW1lfScgcmVxdWlyZXMgbm8gYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgaXQgaXMgYSBQb2ludGVyIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIHR5cGUgaW4gRGFydCBhbmQgQysrLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRmZpTm90U3RhdGljID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiIjbmFtZSBleHBlY3RzIGEgc3RhdGljIGZ1bmN0aW9uIGFzIHBhcmFtZXRlci4gZGFydDpmZmkgb25seSBzdXBwb3J0cyBjYWxsaW5nIHN0YXRpYyBEYXJ0IGZ1bmN0aW9ucyBmcm9tIGMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlOb3RTdGF0aWMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUZmaU5vdFN0YXRpYyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRmZpTm90U3RhdGljIiwKICB0ZW1wbGF0ZUZmaU5vdFN0YXRpYywKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlOb3RTdGF0aWMoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlOb3RTdGF0aWMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiIke25hbWV9IGV4cGVjdHMgYSBzdGF0aWMgZnVuY3Rpb24gYXMgcGFyYW1ldGVyLiBkYXJ0OmZmaSBvbmx5IHN1cHBvcnRzIGNhbGxpbmcgc3RhdGljIERhcnQgZnVuY3Rpb25zIGZyb20gYy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVGZmlTdHJ1Y3RHZW5lcmljID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJTdHJ1Y3QgJyNuYW1lJyBzaG91bGQgbm90IGJlIGdlbmVyaWMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpU3RydWN0R2VuZXJpYyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRmZpU3RydWN0R2VuZXJpYyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRmZpU3RydWN0R2VuZXJpYyIsCiAgdGVtcGxhdGVGZmlTdHJ1Y3RHZW5lcmljLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaVN0cnVjdEdlbmVyaWMoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlTdHJ1Y3RHZW5lcmljLAogICAgICBtZXNzYWdlOiAiIiJTdHJ1Y3QgJyR7bmFtZX0nIHNob3VsZCBub3QgYmUgZ2VuZXJpYy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPiB0ZW1wbGF0ZUZmaVR5cGVJbnZhbGlkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJFeHBlY3RlZCB0eXBlICcjdHlwZScgdG8gYmUgYSB2YWxpZCBhbmQgaW5zdGFudGlhdGVkIHN1YnR5cGUgb2YgJ05hdGl2ZVR5cGUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpVHlwZUludmFsaWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gY29kZUZmaVR5cGVJbnZhbGlkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICJGZmlUeXBlSW52YWxpZCIsCiAgdGVtcGxhdGVGZmlUeXBlSW52YWxpZCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlUeXBlSW52YWxpZChEYXJ0VHlwZSBfdHlwZSkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZmaVR5cGVJbnZhbGlkLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRXhwZWN0ZWQgdHlwZSAnJHt0eXBlfScgdG8gYmUgYSB2YWxpZCBhbmQgaW5zdGFudGlhdGVkIHN1YnR5cGUgb2YgJ05hdGl2ZVR5cGUnLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMyk+IHRlbXBsYXRlRmZpVHlwZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBEYXJ0VHlwZSBfdHlwZTMpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRXhwZWN0ZWQgdHlwZSAnI3R5cGUnIHRvIGJlICcjdHlwZTInLCB3aGljaCBpcyB0aGUgRGFydCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gJyN0eXBlMycuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+CiAgICBjb2RlRmZpVHlwZU1pc21hdGNoID0gY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+KAogICJGZmlUeXBlTWlzbWF0Y2giLAogIHRlbXBsYXRlRmZpVHlwZU1pc21hdGNoLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaVR5cGVNaXNtYXRjaCgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMykgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBMaXN0PE9iamVjdD4gdHlwZTNQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMyk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMyA9IHR5cGUzUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpVHlwZU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRXhwZWN0ZWQgdHlwZSAnJHt0eXBlfScgdG8gYmUgJyR7dHlwZTJ9Jywgd2hpY2ggaXMgdGhlIERhcnQgdHlwZSBjb3JyZXNwb25kaW5nIHRvICcke3R5cGUzfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTIsICd0eXBlMyc6IF90eXBlM30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZUZmaVR5cGVVbnNpemVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiTWV0aG9kICcjbmFtZScgY2Fubm90IGJlIGNhbGxlZCBvbiBzb21ldGhpbmcgb2YgdHlwZSAnI3R5cGUnIGFzIHRoaXMgdHlwZSBpcyB1bnNpemVkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpVHlwZVVuc2l6ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+IGNvZGVGZmlUeXBlVW5zaXplZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4oCiAgIkZmaVR5cGVVbnNpemVkIiwKICB0ZW1wbGF0ZUZmaVR5cGVVbnNpemVkLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaVR5cGVVbnNpemVkKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlUeXBlVW5zaXplZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIk1ldGhvZCAnJHtuYW1lfScgY2Fubm90IGJlIGNhbGxlZCBvbiBzb21ldGhpbmcgb2YgdHlwZSAnJHt0eXBlfScgYXMgdGhpcyB0eXBlIGlzIHVuc2l6ZWQuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlN0cnVjdCAnI25hbWUnIG11c3QgaW5oZXJpdCBmcm9tICdTdHJ1Y3Q8I25hbWU+Jy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICJGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlIiwKICB0ZW1wbGF0ZUZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2UsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2UsCiAgICAgIG1lc3NhZ2U6ICIiIlN0cnVjdCAnJHtuYW1lfScgbXVzdCBpbmhlcml0IGZyb20gJ1N0cnVjdDwke25hbWV9PicuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzcyA9CiAgICBtZXNzYWdlRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGaWVsZEluaXRpYWxpemVkT3V0c2lkZURlY2xhcmluZ0NsYXNzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzcyIsCiAgICBpbmRleDogODgsCiAgICBtZXNzYWdlOiByIiIiQSBmaWVsZCBjYW4gb25seSBiZSBpbml0aWFsaXplZCBpbiBpdCdzIGRlY2xhcmluZyBjbGFzcyIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHBhc3NpbmcgYSB2YWx1ZSBpbnRvIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yLCBvciBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uIGludG8gdGhlIGNvbnN0cnVjdG9yIGJvZHkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IgPQogICAgbWVzc2FnZUZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmllbGRJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IiLAogICAgaW5kZXg6IDc5LAogICAgbWVzc2FnZTogciIiIkZpZWxkIGZvcm1hbCBwYXJhbWV0ZXJzIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBjb25zdHJ1Y3Rvci4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgJ3RoaXMuJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmluYWxBbmRDb3ZhcmlhbnQgPSBtZXNzYWdlRmluYWxBbmRDb3ZhcmlhbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmluYWxBbmRDb3ZhcmlhbnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJGaW5hbEFuZENvdmFyaWFudCIsCiAgICBpbmRleDogODAsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJ2ZpbmFsJyBhbmQgJ2NvdmFyaWFudCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIGVpdGhlciB0aGUgJ2ZpbmFsJyBvciAnY292YXJpYW50JyBrZXl3b3JkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGaW5hbEFuZFZhciA9IG1lc3NhZ2VGaW5hbEFuZFZhcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGaW5hbEFuZFZhciA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJGaW5hbEFuZFZhciIsCiAgICBpbmRleDogODEsCiAgICBtZXNzYWdlOiByIiIiTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdmaW5hbCcgYW5kICd2YXInLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAndmFyJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJGaW5hbCBmaWVsZCAnI25hbWUnIGlzIG5vdCBpbml0aWFsaXplZC4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHRvIGluaXRpYWxpemUgdGhlIGZpZWxkIGluIHRoZSBkZWNsYXJhdGlvbiBvciBpbiBldmVyeSBjb25zdHJ1Y3Rvci4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQiLCB0ZW1wbGF0ZUZpbmFsRmllbGROb3RJbml0aWFsaXplZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRklOQUxfTk9UX0lOSVRJQUxJWkVEIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZpbmFsRmllbGROb3RJbml0aWFsaXplZCwKICAgICAgbWVzc2FnZTogIiIiRmluYWwgZmllbGQgJyR7bmFtZX0nIGlzIG5vdCBpbml0aWFsaXplZC4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSB0byBpbml0aWFsaXplIHRoZSBmaWVsZCBpbiB0aGUgZGVjbGFyYXRpb24gb3IgaW4gZXZlcnkgY29uc3RydWN0b3IuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJGaW5hbCBmaWVsZCAnI25hbWUnIGlzIG5vdCBpbml0aWFsaXplZCBieSB0aGlzIGNvbnN0cnVjdG9yLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQgdXNpbmcgYW4gaW5pdGlhbGl6aW5nIGZvcm1hbCBvciBhIGZpZWxkIGluaXRpYWxpemVyLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3Rvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IiLAogICAgICAgIHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRklOQUxfTk9UX0lOSVRJQUxJWkVEX0NPTlNUUlVDVE9SXzEiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGaW5hbCBmaWVsZCAnJHtuYW1lfScgaXMgbm90IGluaXRpYWxpemVkIGJ5IHRoaXMgY29uc3RydWN0b3IuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQgdXNpbmcgYW4gaW5pdGlhbGl6aW5nIGZvcm1hbCBvciBhIGZpZWxkIGluaXRpYWxpemVyLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSBmaW5hbCB2YXJpYWJsZSAnI25hbWUnIG11c3QgYmUgaW5pdGlhbGl6ZWQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBhZGRpbmcgYW4gaW5pdGlhbGl6ZXIgKCc9IDxleHByZXNzaW9uPicpIHRvIHRoZSBkZWNsYXJhdGlvbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIiLCB0ZW1wbGF0ZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZJTkFMX05PVF9JTklUSUFMSVpFRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplciwKICAgICAgbWVzc2FnZTogIiIiVGhlIGZpbmFsIHZhcmlhYmxlICcke25hbWV9JyBtdXN0IGJlIGluaXRpYWxpemVkLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGFkZGluZyBhbiBpbml0aWFsaXplciAoJz0gPGV4cHJlc3Npb24+JykgdG8gdGhlIGRlY2xhcmF0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXMgYSBmaW5hbCBpbnN0YW5jZSB2YXJpYWJsZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQiLAogICAgICAgIHRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGSU5BTF9JTklUSUFMSVpFRF9NVUxUSVBMRV9USU1FUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIicke25hbWV9JyBpcyBhIGZpbmFsIGluc3RhbmNlIHZhcmlhYmxlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgd2FzIGluaXRpYWxpemVkIGhlcmUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6CiAgICAgICAgICAgIF93aXRoQXJndW1lbnRzRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UiLAogICAgICAgIHRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlKAogICAgU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZSwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIHdhcyBpbml0aWFsaXplZCBoZXJlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJBIHZhbHVlIG9mIHR5cGUgJyN0eXBlJyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlIiwKICAgICAgICB0ZW1wbGF0ZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRk9SX0lOX09GX0lOVkFMSURfRUxFTUVOVF9UWVBFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQSB2YWx1ZSBvZiB0eXBlICcke3R5cGV9JyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGUgPQogICAgbWVzc2FnZUZvckluTG9vcEV4YWN0bHlPbmVWYXJpYWJsZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGUiLAogICAgbWVzc2FnZTogciIiIkEgZm9yLWluIGxvb3AgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIGxvb3AgdmFyaWFibGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZvckluTG9vcE5vdEFzc2lnbmFibGUgPSBtZXNzYWdlRm9ySW5Mb29wTm90QXNzaWduYWJsZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGb3JJbkxvb3BOb3RBc3NpZ25hYmxlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRm9ySW5Mb29wTm90QXNzaWduYWJsZSIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW4ndCBhc3NpZ24gdG8gdGhpcywgc28gaXQgY2FuJ3QgYmUgdXNlZCBpbiBhIGZvci1pbiBsb29wLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHR5cGUgJyN0eXBlJyB1c2VkIGluIHRoZSAnZm9yJyBsb29wIG11c3QgaW1wbGVtZW50ICcjdHlwZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlIiwgdGVtcGxhdGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZPUl9JTl9PRl9JTlZBTElEX1RZUEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgdHlwZSAnJHt0eXBlfScgdXNlZCBpbiB0aGUgJ2ZvcicgbG9vcCBtdXN0IGltcGxlbWVudCAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZvckluTG9vcFdpdGhDb25zdFZhcmlhYmxlID0KICAgIG1lc3NhZ2VGb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZvckluTG9vcFdpdGhDb25zdFZhcmlhYmxlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGT1JfSU5fV0lUSF9DT05TVF9WQVJJQUJMRSJdLAogICAgbWVzc2FnZTogciIiIkEgZm9yLWluIGxvb3AtdmFyaWFibGUgY2FuJ3QgYmUgJ2NvbnN0Jy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcgbW9kaWZpZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZ1bmN0aW9uVHlwZURlZmF1bHRWYWx1ZSA9IG1lc3NhZ2VGdW5jdGlvblR5cGVEZWZhdWx0VmFsdWU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRnVuY3Rpb25UeXBlRGVmYXVsdFZhbHVlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRnVuY3Rpb25UeXBlRGVmYXVsdFZhbHVlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJERUZBVUxUX1ZBTFVFX0lOX0ZVTkNUSU9OX1RZUEUiXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBpbiBhIGZ1bmN0aW9uIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXIgPQogICAgbWVzc2FnZUZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRnVuY3Rpb25UeXBlZFBhcmFtZXRlclZhciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZVTkNUSU9OX1RZUEVEX1BBUkFNRVRFUl9WQVIiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkZ1bmN0aW9uLXR5cGVkIHBhcmFtZXRlcnMgY2FuJ3Qgc3BlY2lmeSAnY29uc3QnLCAnZmluYWwnIG9yICd2YXInIGluIHBsYWNlIG9mIGEgcmV0dXJuIHR5cGUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlcGxhY2luZyB0aGUga2V5d29yZCB3aXRoIGEgcmV0dXJuIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUdlbmVyYXRvclJldHVybnNWYWx1ZSA9IG1lc3NhZ2VHZW5lcmF0b3JSZXR1cm5zVmFsdWU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlR2VuZXJhdG9yUmV0dXJuc1ZhbHVlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiR2VuZXJhdG9yUmV0dXJuc1ZhbHVlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRVRVUk5fSU5fR0VORVJBVE9SIl0sCiAgICBtZXNzYWdlOiByIiIiJ3N5bmMqJyBhbmQgJ2FzeW5jKicgY2FuJ3QgcmV0dXJuIGEgdmFsdWUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUdlbmVyaWNGdW5jdGlvblR5cGVJbkJvdW5kID0KICAgIG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkdlbmVyaWNGdW5jdGlvblR5cGVJbkJvdW5kIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJHRU5FUklDX0ZVTkNUSU9OX1RZUEVfQ0FOTk9UX0JFX0JPVU5EIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUeXBlIHZhcmlhYmxlcyBjYW4ndCBoYXZlIGdlbmVyaWMgZnVuY3Rpb24gdHlwZXMgaW4gdGhlaXIgYm91bmRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4KICAgIHRlbXBsYXRlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlVuZXhwZWN0ZWQgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlICcjdHlwZScgaW5mZXJyZWQgYXMgYSB0eXBlIGFyZ3VtZW50LiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRyeSBwcm92aWRpbmcgYSBub24tZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGV4cGxpY2l0bHkuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6CiAgICAgICAgICAgIF93aXRoQXJndW1lbnRzR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4KICAgIGNvZGVHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAgICAgICAiR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQiLAogICAgICAgIHRlbXBsYXRlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkdFTkVSSUNfRlVOQ1RJT05fQ0FOTk9UX0JFX1RZUEVfQVJHVU1FTlQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQoCiAgICBEYXJ0VHlwZSBfdHlwZSkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVW5leHBlY3RlZCBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgJyR7dHlwZX0nIGluZmVycmVkIGFzIGEgdHlwZSBhcmd1bWVudC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IHByb3ZpZGluZyBhIG5vbi1nZW5lcmljIGZ1bmN0aW9uIHR5cGUgZXhwbGljaXRseS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudCA9CiAgICBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50ID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50IiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiR0VORVJJQ19GVU5DVElPTl9DQU5OT1RfQkVfVFlQRV9BUkdVTUVOVCJdLAogICAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAgIHIiIiJVbmV4cGVjdGVkIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSBmb3VuZCBpbiBhIHR5cGUgYXJndW1lbnQuIiIiLAogICAgICAgIHRpcDogciIiIlRyeSB1c2luZyBhIG5vbi1nZW5lcmljIGZ1bmN0aW9uIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUdldHRlck5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJHZXR0ZXIgbm90IGZvdW5kOiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0dldHRlck5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVHZXR0ZXJOb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiR2V0dGVyTm90Rm91bmQiLCB0ZW1wbGF0ZUdldHRlck5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfR0VUVEVSIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzR2V0dGVyTm90Rm91bmQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVHZXR0ZXJOb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiR2V0dGVyIG5vdCBmb3VuZDogJyR7bmFtZX0nLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUdldHRlcldpdGhGb3JtYWxzID0gbWVzc2FnZUdldHRlcldpdGhGb3JtYWxzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUdldHRlcldpdGhGb3JtYWxzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiR2V0dGVyV2l0aEZvcm1hbHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkdFVFRFUl9XSVRIX1BBUkFNRVRFUlMiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIGdldHRlciBjYW4ndCBoYXZlIGZvcm1hbCBwYXJhbWV0ZXJzLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyAnKC4uLiknLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbGxlZ2FsQXNzaWdubWVudFRvTm9uQXNzaWduYWJsZSA9CiAgICBtZXNzYWdlSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbGxlZ2FsQXNzaWdubWVudFRvTm9uQXNzaWduYWJsZSIsCiAgICBpbmRleDogNDUsCiAgICBtZXNzYWdlOiByIiIiSWxsZWdhbCBhc3NpZ25tZW50IHRvIG5vbi1hc3NpZ25hYmxlIGV4cHJlc3Npb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUlsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGUgPQogICAgbWVzc2FnZUlsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbEFzeW5jR2VuZXJhdG9yUmV0dXJuVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIklsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfQVNZTkNfR0VORVJBVE9SX1JFVFVSTl9UWVBFIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJGdW5jdGlvbnMgbWFya2VkICdhc3luYyonIG11c3QgaGF2ZSBhIHJldHVybiB0eXBlIGFzc2lnbmFibGUgdG8gJ1N0cmVhbScuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUlsbGVnYWxBc3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlID0KICAgIG1lc3NhZ2VJbGxlZ2FsQXN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbGxlZ2FsQXN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZSA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiSWxsZWdhbEFzeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGUiLAogICAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAgIHIiIiJGdW5jdGlvbnMgbWFya2VkICdhc3luYyonIGNhbid0IGhhdmUgcmV0dXJuIHR5cGUgJ3ZvaWQnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbGxlZ2FsQXN5bmNSZXR1cm5UeXBlID0gbWVzc2FnZUlsbGVnYWxBc3luY1JldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbEFzeW5jUmV0dXJuVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIklsbGVnYWxBc3luY1JldHVyblR5cGUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfQVNZTkNfUkVUVVJOX1RZUEUiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkZ1bmN0aW9ucyBtYXJrZWQgJ2FzeW5jJyBtdXN0IGhhdmUgYSByZXR1cm4gdHlwZSBhc3NpZ25hYmxlIHRvICdGdXR1cmUnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVJbGxlZ2FsTWl4aW4gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSB0eXBlICcjbmFtZScgY2FuJ3QgYmUgbWl4ZWQgaW4uIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSWxsZWdhbE1peGluKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbGxlZ2FsTWl4aW4gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIklsbGVnYWxNaXhpbiIsIHRlbXBsYXRlSWxsZWdhbE1peGluLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTExFR0FMX01JWElOIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0lsbGVnYWxNaXhpbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUlsbGVnYWxNaXhpbiwKICAgICAgbWVzc2FnZTogIiIiVGhlIHR5cGUgJyR7bmFtZX0nIGNhbid0IGJlIG1peGVkIGluLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQ2FuJ3QgdXNlICcjbmFtZScgYXMgYSBtaXhpbiBiZWNhdXNlIGl0IGhhcyBjb25zdHJ1Y3RvcnMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycyIsIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JWElOX0RFQ0xBUkVTX0NPTlNUUlVDVE9SIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0lsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCB1c2UgJyR7bmFtZX0nIGFzIGEgbWl4aW4gYmVjYXVzZSBpdCBoYXMgY29uc3RydWN0b3JzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGlzIGNvbnN0cnVjdG9yIHByZXZlbnRzIHVzaW5nICcjbmFtZScgYXMgYSBtaXhpbi4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSIsCiAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSwKICAgICAgbWVzc2FnZTogIiIiVGhpcyBjb25zdHJ1Y3RvciBwcmV2ZW50cyB1c2luZyAnJHtuYW1lfScgYXMgYSBtaXhpbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gdGVtcGxhdGVJbGxlZ2FsUmVjdXJzaXZlVHlwZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiSWxsZWdhbCByZWN1cnNpdmUgdHlwZSAnI3R5cGUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0lsbGVnYWxSZWN1cnNpdmVUeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+IGNvZGVJbGxlZ2FsUmVjdXJzaXZlVHlwZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAiSWxsZWdhbFJlY3Vyc2l2ZVR5cGUiLAogIHRlbXBsYXRlSWxsZWdhbFJlY3Vyc2l2ZVR5cGUsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSWxsZWdhbFJlY3Vyc2l2ZVR5cGUoRGFydFR5cGUgX3R5cGUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbGxlZ2FsUmVjdXJzaXZlVHlwZSwKICAgICAgbWVzc2FnZTogIiIiSWxsZWdhbCByZWN1cnNpdmUgdHlwZSAnJHt0eXBlfScuIiIiICsgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGUgPQogICAgbWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yUmV0dXJuVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfU1lOQ19HRU5FUkFUT1JfUkVUVVJOX1RZUEUiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkZ1bmN0aW9ucyBtYXJrZWQgJ3N5bmMqJyBtdXN0IGhhdmUgYSByZXR1cm4gdHlwZSBhc3NpZ25hYmxlIHRvICdJdGVyYWJsZScuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUlsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGUgPQogICAgbWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbFN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIklsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGUiLAogICAgbWVzc2FnZTogciIiIkZ1bmN0aW9ucyBtYXJrZWQgJ3N5bmMqJyBjYW4ndCBoYXZlIHJldHVybiB0eXBlICd2b2lkJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHMgPSBtZXNzYWdlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbXBsZW1lbnRzQmVmb3JlRXh0ZW5kcyIsCiAgICBpbmRleDogNDQsCiAgICBtZXNzYWdlOiByIiIiVGhlIGV4dGVuZHMgY2xhdXNlIG11c3QgYmUgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBleHRlbmRzIGNsYXVzZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbXBsZW1lbnRzQmVmb3JlT24gPSBtZXNzYWdlSW1wbGVtZW50c0JlZm9yZU9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUltcGxlbWVudHNCZWZvcmVPbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkltcGxlbWVudHNCZWZvcmVPbiIsCiAgICBpbmRleDogNDMsCiAgICBtZXNzYWdlOiByIiIiVGhlIG9uIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgb24gY2xhdXNlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUltcGxlbWVudHNCZWZvcmVXaXRoID0gbWVzc2FnZUltcGxlbWVudHNCZWZvcmVXaXRoOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUltcGxlbWVudHNCZWZvcmVXaXRoID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW1wbGVtZW50c0JlZm9yZVdpdGgiLAogICAgaW5kZXg6IDQyLAogICAgbWVzc2FnZTogciIiIlRoZSB3aXRoIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgd2l0aCBjbGF1c2UgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW1wbGVtZW50c0Z1dHVyZU9yID0gbWVzc2FnZUltcGxlbWVudHNGdXR1cmVPcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbXBsZW1lbnRzRnV0dXJlT3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbXBsZW1lbnRzRnV0dXJlT3IiLAogICAgbWVzc2FnZTogciIiIidGdXR1cmVPcicgY2FuJ3QgYmUgdXNlZCBpbiBhbiAnaW1wbGVtZW50cycgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBpbnQgY291bnQpPgogICAgdGVtcGxhdGVJbXBsZW1lbnRzUmVwZWF0ZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgaW50IGNvdW50KT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBvbmNlLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSByZW1vdmluZyAjY291bnQgb2YgdGhlIG9jY3VycmVuY2VzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ltcGxlbWVudHNSZXBlYXRlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIGludCBjb3VudCk+IGNvZGVJbXBsZW1lbnRzUmVwZWF0ZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBpbnQgY291bnQpPigKICAgICAgICAiSW1wbGVtZW50c1JlcGVhdGVkIiwgdGVtcGxhdGVJbXBsZW1lbnRzUmVwZWF0ZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklNUExFTUVOVFNfUkVQRUFURUQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW1wbGVtZW50c1JlcGVhdGVkKFN0cmluZyBuYW1lLCBpbnQgY291bnQpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKGNvdW50ID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbXBsZW1lbnRzUmVwZWF0ZWQsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBvbmNlLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3ZpbmcgJHtjb3VudH0gb2YgdGhlIG9jY3VycmVuY2VzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnY291bnQnOiBjb3VudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUltcGxlbWVudHNTdXBlckNsYXNzID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiInI25hbWUnIGNhbid0IGJlIHVzZWQgaW4gYm90aCAnZXh0ZW5kcycgYW5kICdpbXBsZW1lbnRzJyBjbGF1c2VzLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUgb2NjdXJyZW5jZXMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbXBsZW1lbnRzU3VwZXJDbGFzcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlSW1wbGVtZW50c1N1cGVyQ2xhc3MgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkltcGxlbWVudHNTdXBlckNsYXNzIiwgdGVtcGxhdGVJbXBsZW1lbnRzU3VwZXJDbGFzcywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU1QTEVNRU5UU19TVVBFUl9DTEFTUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbXBsZW1lbnRzU3VwZXJDbGFzcyhTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUltcGxlbWVudHNTdXBlckNsYXNzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiJyR7bmFtZX0nIGNhbid0IGJlIHVzZWQgaW4gYm90aCAnZXh0ZW5kcycgYW5kICdpbXBsZW1lbnRzJyBjbGF1c2VzLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3Zpbmcgb25lIG9mIHRoZSBvY2N1cnJlbmNlcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW5ub3QgaW52b2tlIGFuIGluc3RhbmNlIG9mICcjdHlwZScgYmVjYXVzZSBpdCBkZWNsYXJlcyAnY2FsbCcgdG8gYmUgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBtZXRob2QuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyAnY2FsbCcgdG8gYSBtZXRob2Qgb3IgZXhwbGljaXRseSBpbnZva2UgJ2NhbGwnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW1wbGljaXRDYWxsT2ZOb25NZXRob2QpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gY29kZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgICJJbXBsaWNpdENhbGxPZk5vbk1ldGhvZCIsIHRlbXBsYXRlSW1wbGljaXRDYWxsT2ZOb25NZXRob2QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklNUExJQ0lUX0NBTExfT0ZfTk9OX01FVEhPRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbXBsaWNpdENhbGxPZk5vbk1ldGhvZChEYXJ0VHlwZSBfdHlwZSkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2Fubm90IGludm9rZSBhbiBpbnN0YW5jZSBvZiAnJHt0eXBlfScgYmVjYXVzZSBpdCBkZWNsYXJlcyAnY2FsbCcgdG8gYmUgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBtZXRob2QuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyAnY2FsbCcgdG8gYSBtZXRob2Qgb3IgZXhwbGljaXRseSBpbnZva2UgJ2NhbGwnLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIk92ZXJyaWRlIHdhcyBpbnRyb2R1Y2VkIHdoZW4gdGhlIG1peGluICcjbmFtZScgd2FzIGFwcGxpZWQgdG8gJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHQiLCB0ZW1wbGF0ZUltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHQoU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiT3ZlcnJpZGUgd2FzIGludHJvZHVjZWQgd2hlbiB0aGUgbWl4aW4gJyR7bmFtZX0nIHdhcyBhcHBsaWVkIHRvICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUltcG9ydEFmdGVyUGFydCA9IG1lc3NhZ2VJbXBvcnRBZnRlclBhcnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW1wb3J0QWZ0ZXJQYXJ0ID0gY29uc3QgTWVzc2FnZUNvZGUoIkltcG9ydEFmdGVyUGFydCIsCiAgICBpbmRleDogMTAsCiAgICBtZXNzYWdlOiByIiIiSW1wb3J0IGRpcmVjdGl2ZXMgbXVzdCBwcmVjZWRlIHBhcnQgZGlyZWN0aXZlcy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBpbXBvcnQgZGlyZWN0aXZlcyBiZWZvcmUgdGhlIHBhcnQgZGlyZWN0aXZlcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZUltcG9ydEhpZGVzSW1wb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJJbXBvcnQgb2YgJyNuYW1lJyAoZnJvbSAnI3VyaScpIGhpZGVzIGltcG9ydCBmcm9tICcjdXJpMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW1wb3J0SGlkZXNJbXBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIGNvZGVJbXBvcnRIaWRlc0ltcG9ydCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICAiSW1wb3J0SGlkZXNJbXBvcnQiLCB0ZW1wbGF0ZUltcG9ydEhpZGVzSW1wb3J0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pZ25vcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbXBvcnRIaWRlc0ltcG9ydChTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICBTdHJpbmcgdXJpMiA9IHJlbGF0aXZpemVVcmkodXJpMl8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW1wb3J0SGlkZXNJbXBvcnQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJJbXBvcnQgb2YgJyR7bmFtZX0nIChmcm9tICcke3VyaX0nKSBoaWRlcyBpbXBvcnQgZnJvbSAnJHt1cmkyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHR5cGUgJyN0eXBlJyBpc24ndCBhIHN1YnR5cGUgb2YgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGUiLAogICAgICAgIHRlbXBsYXRlSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVESVJFQ1RfVE9fSU5WQUxJRF9UWVBFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGUoCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdHlwZSAnJHt0eXBlfScgaXNuJ3QgYSBzdWJ0eXBlIG9mICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHR5cGUgYXJndW1lbnRzIHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnQgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnQiLCB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudCgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke25hbWUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICduYW1lMic6IG5hbWUyCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUeXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjbmFtZTInIGluIHRoZSByZXR1cm4gdHlwZS4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHR5cGUgYXJndW1lbnRzIHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGUgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGUiLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX0FSR1VNRU5UX05PVF9NQVRDSElOR19CT1VORFMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlR5cGUgYXJndW1lbnQgJyR7dHlwZX0nIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyR7dHlwZTJ9JyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnJHtuYW1lfScgb24gJyR7bmFtZTJ9JyBpbiB0aGUgcmV0dXJuIHR5cGUuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICduYW1lMic6IG5hbWUyCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZyBuYW1lMiwKICAgICAgICBTdHJpbmcgbmFtZTMsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWU0KT4gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzLCBTdHJpbmcgbmFtZTQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJyBpbiB0aGUgc3VwZXJ0eXBlICcjbmFtZTMnIG9mIGNsYXNzICcjbmFtZTQnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY2hhbmdpbmcgdHlwZSBhcmd1bWVudHMgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgU3RyaW5nIG5hbWUyLCBTdHJpbmcgbmFtZTMsIFN0cmluZyBuYW1lNCk+CiAgICBjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUyLCBTdHJpbmcgbmFtZTMsIFN0cmluZyBuYW1lNCk+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZSIsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlKERhcnRUeXBlIF90eXBlLAogICAgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyLCBTdHJpbmcgbmFtZTMsIFN0cmluZyBuYW1lNCkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIGlmIChuYW1lMy5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTMgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUzKTsKICBpZiAobmFtZTQuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWU0ID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lNCk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke25hbWUyfScgaW4gdGhlIHN1cGVydHlwZSAnJHtuYW1lM30nIG9mIGNsYXNzICcke25hbWU0fScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgY2hhbmdpbmcgdHlwZSBhcmd1bWVudHMgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICd0eXBlJzogX3R5cGUsCiAgICAgICAgJ3R5cGUyJzogX3R5cGUyLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAnbmFtZTInOiBuYW1lMiwKICAgICAgICAnbmFtZTMnOiBuYW1lMywKICAgICAgICAnbmFtZTQnOiBuYW1lNAogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcgbmFtZTIsCiAgICAgICAgU3RyaW5nIG5hbWUzLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lNCk+IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgICAgICBTdHJpbmcgbmFtZTIsCiAgICAgICAgICAgIFN0cmluZyBuYW1lMywKICAgICAgICAgICAgU3RyaW5nCiAgICAgICAgICAgICAgICBuYW1lNCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjbmFtZTInIGluIHRoZSBzdXBlcnR5cGUgJyNuYW1lMycgb2YgY2xhc3MgJyNuYW1lNCcuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBzcGVjaWZ5aW5nIHR5cGUgYXJndW1lbnRzIGV4cGxpY2l0bHkgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMywgU3RyaW5nIG5hbWU0KT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkID0gY29uc3QgQ29kZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzLCBTdHJpbmcgbmFtZTQpPigKICAgICAgICAiSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZCIsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX0FSR1VNRU5UX05PVF9NQVRDSElOR19CT1VORFMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZChEYXJ0VHlwZSBfdHlwZSwKICAgIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzLCBTdHJpbmcgbmFtZTQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBpZiAobmFtZTMuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUzID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMyk7CiAgaWYgKG5hbWU0LmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lNCA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTQpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke25hbWUyfScgaW4gdGhlIHN1cGVydHlwZSAnJHtuYW1lM30nIG9mIGNsYXNzICcke25hbWU0fScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgc3BlY2lmeWluZyB0eXBlIGFyZ3VtZW50cyBleHBsaWNpdGx5IHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMiwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ25hbWUyJzogbmFtZTIsCiAgICAgICAgJ25hbWUzJzogbmFtZTMsCiAgICAgICAgJ25hbWU0JzogbmFtZTQKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHNwZWNpZnlpbmcgdHlwZSBhcmd1bWVudHMgZXhwbGljaXRseSBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCA9IGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkluY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkIiwgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnJHt0eXBlfScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnJHt0eXBlMn0nIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcke25hbWV9JyBvbiAnJHtuYW1lMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgc3BlY2lmeWluZyB0eXBlIGFyZ3VtZW50cyBleHBsaWNpdGx5IHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMiwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ25hbWUyJzogbmFtZTIKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUzLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMywKICAgICAgICAgICAgU3RyaW5nCiAgICAgICAgICAgICAgICBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUeXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjdHlwZTMuI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHR5cGUgYXJndW1lbnRzIHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsIFN0cmluZyBuYW1lMik+IGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQgPQogICAgY29uc3QgQ29kZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMywgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZCIsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfQVJHVU1FTlRfTk9UX01BVENISU5HX0JPVU5EUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQoRGFydFR5cGUgX3R5cGUsCiAgICBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZTMsIFN0cmluZyBuYW1lMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUzUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTMpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUzID0gdHlwZTNQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke3R5cGUzfS4ke25hbWUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICd0eXBlMyc6IF90eXBlMywKICAgICAgICAnbmFtZTInOiBuYW1lMgogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMywgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkluZmVycmVkIHR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyN0eXBlMy4jbmFtZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgc3BlY2lmeWluZyB0eXBlIGFyZ3VtZW50cyBleHBsaWNpdGx5IHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMywgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCA9IGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCIsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluZmVycmVkKERhcnRUeXBlIF90eXBlLAogICAgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUzLCBTdHJpbmcgbmFtZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIExpc3Q8T2JqZWN0PiB0eXBlM1BhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUzKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMyA9IHR5cGUzUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke3R5cGUzfS4ke25hbWUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBzcGVjaWZ5aW5nIHR5cGUgYXJndW1lbnRzIGV4cGxpY2l0bHkgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICd0eXBlJzogX3R5cGUsCiAgICAgICAgJ3R5cGUyJzogX3R5cGUyLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAndHlwZTMnOiBfdHlwZTMsCiAgICAgICAgJ25hbWUyJzogbmFtZTIKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUluY29ycmVjdFR5cGVBcmd1bWVudFZhcmlhYmxlID0KICAgIG1lc3NhZ2VJbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkluY29ycmVjdFR5cGVBcmd1bWVudFZhcmlhYmxlIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIHR5cGUgdmFyaWFibGUgd2hvc2UgYm91bmQgaXNuJ3QgY29uZm9ybWVkIHRvLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVJbmZlcnJlZFBhY2thZ2VVcmkgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkludGVycHJldGluZyB0aGlzIGFzIHBhY2thZ2UgVVJJLCAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5mZXJyZWRQYWNrYWdlVXJpKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVJbmZlcnJlZFBhY2thZ2VVcmkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgIkluZmVycmVkUGFja2FnZVVyaSIsIHRlbXBsYXRlSW5mZXJyZWRQYWNrYWdlVXJpLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbmZlcnJlZFBhY2thZ2VVcmkoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluZmVycmVkUGFja2FnZVVyaSwKICAgICAgbWVzc2FnZTogIiIiSW50ZXJwcmV0aW5nIHRoaXMgYXMgcGFja2FnZSBVUkksICcke3VyaX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0ID0gbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3QiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkZMSUNUU19XSVRIX0lOSEVSSVRFRF9NRU1CRVIiXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBpbmhlcml0IG1lbWJlcnMgdGhhdCBjb25mbGljdCB3aXRoIGVhY2ggb3RoZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMSA9CiAgICBtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UxOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGlzIG9uZSBpbmhlcml0ZWQgbWVtYmVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTIgPQogICAgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTIiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiVGhpcyBpcyB0aGUgb3RoZXIgaW5oZXJpdGVkIG1lbWJlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgVXJpCiAgICAgICAgICAgIHVyaV8pPiB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFVyaSB1cmlfKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgjc3RyaW5nKSwgYnV0IHRoZSBmaWxlIHdhcyBub3Qgc2VsZi1jb250YWluZWQuIFRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuCklmIHlvdSBhcmUgY29tZm9ydGFibGUgd2l0aCBpdCwgaXQgd291bGQgaW1wcm92ZSB0aGUgY2hhbmNlcyBvZiBmaXhpbmcgYW55IGJ1ZyBpZiB5b3UgaW5jbHVkZWQgdGhlIGZpbGUgI3VyaSBpbiB5b3VyIGVycm9yIHJlcG9ydCwgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBmaWxlIGluY2x1ZGVzIHlvdXIgc291cmNlIGNvZGUuCkVpdGhlciB3YXksIHlvdSBzaG91bGQgcHJvYmFibHkgZGVsZXRlIHRoZSBmaWxlIHNvIGl0IGRvZXNuJ3QgdXNlIHVubmVjZXNzYXJ5IGRpc2sgc3BhY2UuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBVcmkgdXJpXyk+CiAgICBjb2RlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgVXJpIHVyaV8pPigKICAgICAgICAiSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCIsCiAgICAgICAgdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkKAogICAgU3RyaW5nIHN0cmluZywgVXJpIHVyaV8pIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgke3N0cmluZ30pLCBidXQgdGhlIGZpbGUgd2FzIG5vdCBzZWxmLWNvbnRhaW5lZC4gVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KSWYgeW91IGFyZSBjb21mb3J0YWJsZSB3aXRoIGl0LCBpdCB3b3VsZCBpbXByb3ZlIHRoZSBjaGFuY2VzIG9mIGZpeGluZyBhbnkgYnVnIGlmIHlvdSBpbmNsdWRlZCB0aGUgZmlsZSAke3VyaX0gaW4geW91ciBlcnJvciByZXBvcnQsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgZmlsZSBpbmNsdWRlcyB5b3VyIHNvdXJjZSBjb2RlLgpFaXRoZXIgd2F5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRlbGV0ZSB0aGUgZmlsZSBzbyBpdCBkb2Vzbid0IHVzZSB1bm5lY2Vzc2FyeSBkaXNrIHNwYWNlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCB0aGUgZmlsZSB3YXMgbm90IHNlbGYtY29udGFpbmVkLiBUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXApOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgY29kZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXAgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCIsCiAgICAgICAgdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgke3N0cmluZ30pLCBidXQgdGhlIGZpbGUgd2FzIG5vdCBzZWxmLWNvbnRhaW5lZC4gVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgU3RyaW5nIHN0cmluZzIsCiAgICAgICAgU3RyaW5nIHN0cmluZzMsCiAgICAgICAgVXJpCiAgICAgICAgICAgIHVyaV8pPiB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczLCBVcmkgdXJpXyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJyNzdHJpbmcyJy4KU3RhY2t0cmFjZSBpbmNsdWRlZCAnI3N0cmluZzMnLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlICN1cmkgaW4geW91ciBlcnJvciByZXBvcnQsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgZmlsZSBpbmNsdWRlcyB5b3VyIHNvdXJjZSBjb2RlLgpFaXRoZXIgd2F5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRlbGV0ZSB0aGUgZmlsZSBzbyBpdCBkb2Vzbid0IHVzZSB1bm5lY2Vzc2FyeSBkaXNrIHNwYWNlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMsIFVyaSB1cmlfKT4KICAgIGNvZGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSA9IGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMsIFVyaSB1cmlfKT4oCiAgICAgICAgIkluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtIiwKICAgICAgICB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSgKICAgIFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyLCBTdHJpbmcgc3RyaW5nMywgVXJpIHVyaV8pIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmczLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW0sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoJHtzdHJpbmd9KSwgYnV0IGNvdWxkbid0LgpFcnJvciBtZXNzYWdlIHdhcyAnJHtzdHJpbmcyfScuClN0YWNrdHJhY2UgaW5jbHVkZWQgJyR7c3RyaW5nM30nLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlICR7dXJpfSBpbiB5b3VyIGVycm9yIHJlcG9ydCwgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBmaWxlIGluY2x1ZGVzIHlvdXIgc291cmNlIGNvZGUuCkVpdGhlciB3YXksIHlvdSBzaG91bGQgcHJvYmFibHkgZGVsZXRlIHRoZSBmaWxlIHNvIGl0IGRvZXNuJ3QgdXNlIHVubmVjZXNzYXJ5IGRpc2sgc3BhY2UuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAnc3RyaW5nJzogc3RyaW5nLAogICAgICAgICdzdHJpbmcyJzogc3RyaW5nMiwKICAgICAgICAnc3RyaW5nMyc6IHN0cmluZzMsCiAgICAgICAgJ3VyaSc6IHVyaV8KICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKT4KICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXAgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJyNzdHJpbmcyJy4KU3RhY2t0cmFjZSBpbmNsdWRlZCAnI3N0cmluZzMnLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMpPgogICAgY29kZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMpPigKICAgICAgICAiSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXAiLAogICAgICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXAsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lndhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wKAogICAgU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCR7c3RyaW5nfSksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJyR7c3RyaW5nMn0nLgpTdGFja3RyYWNlIGluY2x1ZGVkICcke3N0cmluZzN9Jy4KVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMiwgJ3N0cmluZzMnOiBzdHJpbmczfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2ggPQogICAgbWVzc2FnZUluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2g7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW5pdGlhbGl6ZWRWYXJpYWJsZUluRm9yRWFjaCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2giLAogICAgaW5kZXg6IDgyLAogICAgbWVzc2FnZTogciIiIlRoZSBsb29wIHZhcmlhYmxlIGluIGEgZm9yLWVhY2ggbG9vcCBjYW4ndCBiZSBpbml0aWFsaXplZC4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgaW5pdGlhbGl6ZXIsIG9yIHVzaW5nIGEgZGlmZmVyZW50IGtpbmQgb2YgbG9vcC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUluaXRpYWxpemVyRm9yU3RhdGljRmllbGQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXNuJ3QgYW4gaW5zdGFuY2UgZmllbGQgb2YgdGhpcyBjbGFzcy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkIiwgdGVtcGxhdGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTklUSUFMSVpFUl9GT1JfU1RBVElDX0ZJRUxEIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVyRm9yU3RhdGljRmllbGQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXNuJ3QgYW4gaW5zdGFuY2UgZmllbGQgb2YgdGhpcyBjbGFzcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJPbmx5IGNvbnN0cnVjdG9ycyBjYW4gaGF2ZSBpbml0aWFsaXplcnMsIGFuZCAnI25hbWUnIGlzIG5vdCBhIGNvbnN0cnVjdG9yLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvciIsIHRlbXBsYXRlSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOSVRJQUxJWkVSX09VVFNJREVfQ09OU1RSVUNUT1IiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIk9ubHkgY29uc3RydWN0b3JzIGNhbiBoYXZlIGluaXRpYWxpemVycywgYW5kICcke25hbWV9JyBpcyBub3QgYSBjb25zdHJ1Y3Rvci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSB0eXBlIG9mIHBhcmFtZXRlciAnI25hbWUnLCAnI3R5cGUnIGlzIG5vdCBhIHN1YnR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQncyB0eXBlLCAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHBhcmFtZXRlciAnI25hbWUnIHRvIGEgc3VidHlwZSBvZiAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoIiwKICAgICAgICB0ZW1wbGF0ZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9QQVJBTUVURVJfREVDTEFSQVRJT04iXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2goCiAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHR5cGUgb2YgcGFyYW1ldGVyICcke25hbWV9JywgJyR7dHlwZX0nIGlzIG5vdCBhIHN1YnR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQncyB0eXBlLCAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgcGFyYW1ldGVyICcke25hbWV9JyB0byBhIHN1YnR5cGUgb2YgJyR7dHlwZTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaEZpZWxkID0KICAgIG1lc3NhZ2VJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hGaWVsZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hGaWVsZCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoRmllbGQiLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgICAgIG1lc3NhZ2U6IHIiIiJUaGUgZmllbGQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcGFyYW1ldGVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVJbnB1dEZpbGVOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiSW5wdXQgZmlsZSBub3QgZm91bmQ6ICN1cmkuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5wdXRGaWxlTm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gY29kZUlucHV0RmlsZU5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICJJbnB1dEZpbGVOb3RGb3VuZCIsCiAgdGVtcGxhdGVJbnB1dEZpbGVOb3RGb3VuZCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnB1dEZpbGVOb3RGb3VuZChVcmkgdXJpXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5wdXRGaWxlTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIklucHV0IGZpbGUgbm90IGZvdW5kOiAke3VyaX0uIiIiLCBhcmd1bWVudHM6IHsndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZyk+IHRlbXBsYXRlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGludGVnZXIgbGl0ZXJhbCAjc3RyaW5nIGNhbid0IGJlIHJlcHJlc2VudGVkIGluIDY0IGJpdHMuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSB1c2luZyB0aGUgQmlnSW50IGNsYXNzIGlmIHlvdSBuZWVkIGFuIGludGVnZXIgbGFyZ2VyIHRoYW4gOSwyMjMsMzcyLDAzNiw4NTQsNzc1LDgwNyBvciBsZXNzIHRoYW4gLTksMjIzLDM3MiwwMzYsODU0LDc3NSw4MDguIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSIsIHRlbXBsYXRlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVEVHRVJfTElURVJBTF9PVVRfT0ZfUkFOR0UiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBpbnRlZ2VyIGxpdGVyYWwgJHtzdHJpbmd9IGNhbid0IGJlIHJlcHJlc2VudGVkIGluIDY0IGJpdHMuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgdXNpbmcgdGhlIEJpZ0ludCBjbGFzcyBpZiB5b3UgbmVlZCBhbiBpbnRlZ2VyIGxhcmdlciB0aGFuIDksMjIzLDM3MiwwMzYsODU0LDc3NSw4MDcgb3IgbGVzcyB0aGFuIC05LDIyMywzNzIsMDM2LDg1NCw3NzUsODA4LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUludGVyZmFjZUNoZWNrQ29udGV4dCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQm90aCBtZW1iZXJzIGFyZSBpbmhlcml0ZWQgYnkgdGhlIG5vbi1hYnN0cmFjdCBjbGFzcyAnI25hbWUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJmYWNlQ2hlY2tDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbnRlcmZhY2VDaGVja0NvbnRleHQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkludGVyZmFjZUNoZWNrQ29udGV4dCIsIHRlbXBsYXRlSW50ZXJmYWNlQ2hlY2tDb250ZXh0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcmZhY2VDaGVja0NvbnRleHQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcmZhY2VDaGVja0NvbnRleHQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCb3RoIG1lbWJlcnMgYXJlIGluaGVyaXRlZCBieSB0aGUgbm9uLWFic3RyYWN0IGNsYXNzICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWQgPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUFscmVhZHlJbml0aWFsaXplZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWQiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgIG1lc3NhZ2U6IHIiIiJBdHRlbXB0IHRvIHNldCBpbml0aWFsaXplciBvbiBmaWVsZCB3aXRob3V0IGluaXRpYWxpemVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcm5hbFByb2JsZW1Cb2R5T25BYnN0cmFjdE1ldGhvZCA9CiAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQm9keU9uQWJzdHJhY3RNZXRob2Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQm9keU9uQWJzdHJhY3RNZXRob2QgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkludGVybmFsUHJvYmxlbUJvZHlPbkFic3RyYWN0TWV0aG9kIiwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtLAogICAgICAgIG1lc3NhZ2U6IHIiIiJBdHRlbXB0aW5nIHRvIHNldCBib2R5IG9uIGFic3RyYWN0IG1ldGhvZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiTm8gY29uc3RydWN0b3IgbmFtZWQgJyNuYW1lJyBpbiAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCIsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbUNvbnN0cnVjdG9yTm90Rm91bmQoCiAgICBTdHJpbmcgbmFtZSwgVXJpIHVyaV8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kLAogICAgICBtZXNzYWdlOiAiIiJObyBjb25zdHJ1Y3RvciBuYW1lZCAnJHtuYW1lfScgaW4gJyR7dXJpfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJOb24tY29udGV4dCBtZXNzYWdlIGhhcyBjb250ZXh0IHNldmVyaXR5OiAjc3RyaW5nIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtQ29udGV4dFNldmVyaXR5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHkiLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29udGV4dFNldmVyaXR5LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eShTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSwKICAgICAgbWVzc2FnZTogIiIiTm9uLWNvbnRleHQgbWVzc2FnZSBoYXMgY29udGV4dCBzZXZlcml0eTogJHtzdHJpbmd9IiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb21waWxhdGlvbiBhYm9ydGVkIGR1ZSB0byBmYXRhbCAnI25hbWUnIGF0Ogojc3RyaW5nIiIiLCB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbURlYnVnQWJvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0IiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbURlYnVnQWJvcnQoU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbURlYnVnQWJvcnQsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbXBpbGF0aW9uIGFib3J0ZWQgZHVlIHRvIGZhdGFsICcke25hbWV9JyBhdDoKJHtzdHJpbmd9IiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICdzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW50ZXJuYWxQcm9ibGVtRXh0ZW5kaW5nVW5tb2RpZmlhYmxlU2NvcGUgPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJJbnRlcm5hbFByb2JsZW1FeHRlbmRpbmdVbm1vZGlmaWFibGVTY29wZSIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgICAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgZXh0ZW5kIGFuIHVubW9kaWZpYWJsZSBzY29wZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW50ZXJuYWxQcm9ibGVtTGFiZWxVc2FnZUluVmFyaWFibGVzRGVjbGFyYXRpb24gPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUxhYmVsVXNhZ2VJblZhcmlhYmxlc0RlY2xhcmF0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVybmFsUHJvYmxlbUxhYmVsVXNhZ2VJblZhcmlhYmxlc0RlY2xhcmF0aW9uID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJJbnRlcm5hbFByb2JsZW1MYWJlbFVzYWdlSW5WYXJpYWJsZXNEZWNsYXJhdGlvbiIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgICAgICBtZXNzYWdlOgogICAgICAgICAgICByIiIiVW5leHBlY3RlZCB1c2FnZSBvZiBsYWJlbCBpbnNpZGUgZGVjbGFyYXRpb24gb2YgdmFyaWFibGVzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dCA9CiAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dCIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtLAogICAgbWVzc2FnZTogciIiIkNvbXBpbGVyIGNhbm5vdCBydW4gd2l0aG91dCBhIGNvbXBpbGVyIGNvbnRleHQuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJBcmUgY2FsbHMgdG8gdGhlIGNvbXBpbGVyIHdyYXBwZWQgaW4gQ29tcGlsZXJDb250ZXh0LnJ1bkluQ29udGV4dD8iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGVyZSdzIG5vIGluZmVycmVkIHR5cGUgZm9yICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQiLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZCwKICAgICAgbWVzc2FnZTogIiIiVGhlcmUncyBubyBpbmZlcnJlZCB0eXBlIGZvciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvdWxkbid0IGZpbmQgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbU5vdEZvdW5kIiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbU5vdEZvdW5kLAogICAgICBtZXNzYWdlOiAiIiJDb3VsZG4ndCBmaW5kICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvdWxkbid0IGZpbmQgJyNuYW1lJyBpbiAnI25hbWUyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4iLCB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4sCiAgICAgIG1lc3NhZ2U6ICIiIkNvdWxkbid0IGZpbmQgJyR7bmFtZX0nIGluICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludGVybmFsUHJvYmxlbVByZXZpb3VzVG9rZW5Ob3RGb3VuZCA9CiAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtUHJldmlvdXNUb2tlbk5vdEZvdW5kOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVybmFsUHJvYmxlbVByZXZpb3VzVG9rZW5Ob3RGb3VuZCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiSW50ZXJuYWxQcm9ibGVtUHJldmlvdXNUb2tlbk5vdEZvdW5kIiwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtLAogICAgICAgIG1lc3NhZ2U6IHIiIiJDb3VsZG4ndCBmaW5kIHByZXZpb3VzIHRva2VuLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCBhY2Nlc3MgcHJpdmF0ZSBjb25zdHJ1Y3RvciAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2Vzcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2VzcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzIiwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2VzcywKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3MoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3MsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGFjY2VzcyBwcml2YXRlIGNvbnN0cnVjdG9yICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcm5hbFByb2JsZW1Qcm92aWRlZEJvdGhDb21waWxlU2RrQW5kU2RrU3VtbWFyeSA9CiAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtUHJvdmlkZWRCb3RoQ29tcGlsZVNka0FuZFNka1N1bW1hcnk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtUHJvdmlkZWRCb3RoQ29tcGlsZVNka0FuZFNka1N1bW1hcnkgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5IiwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtLAogICAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAgIHIiIiJUaGUgY29tcGlsZVNkayBhbmQgc2RrU3VtbWFyeSBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIiNuYW1lLnN0YWNrIGlzbid0IGVtcHR5OgogICNzdHJpbmciIiIsIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPgogICAgY29kZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkiLCB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHksCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eShTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eSwKICAgICAgbWVzc2FnZTogIiIiJHtuYW1lfS5zdGFjayBpc24ndCBlbXB0eToKICAke3N0cmluZ30iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGVyZSdzIGFscmVhZHkgYW4gaW5mZXJyZWQgdHlwZSwgJyN0eXBlJywgZm9yICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6CiAgICAgICAgICAgIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlcyIsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXMoCiAgICBEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlcywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZXJlJ3MgYWxyZWFkeSBhbiBpbmZlcnJlZCB0eXBlLCAnJHt0eXBlfScsIGZvciAnJHtuYW1lfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkICcjc3RyaW5nJywgYnV0IGdvdCAnI3N0cmluZzInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkIiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWQoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZCwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgJyR7c3RyaW5nfScsIGJ1dCBnb3QgJyR7c3RyaW5nMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlVuaGFuZGxlZCAjc3RyaW5nIGluICNzdHJpbmcyLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuaGFuZGxlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZUludGVybmFsUHJvYmxlbVVuaGFuZGxlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkIiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbVVuaGFuZGxlZCwKICAgICAgbWVzc2FnZTogIiIiVW5oYW5kbGVkICR7c3RyaW5nfSBpbiAke3N0cmluZzJ9LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVW5pbXBsZW1lbnRlZCAjc3RyaW5nLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkIiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWQoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkLAogICAgICBtZXNzYWdlOiAiIiJVbmltcGxlbWVudGVkICR7c3RyaW5nfS4iIiIsIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJVbnN1cHBvcnRlZCBvcGVyYXRpb246ICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZCIsIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZCwKICAgICAgbWVzc2FnZTogIiIiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSBVUkkgJyN1cmknIGhhcyBubyBzY2hlbWUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigiSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZSIsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSBVUkkgJyR7dXJpfScgaGFzIG5vIHNjaGVtZS4iIiIsIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlZlcmlmaWNhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHByb2dyYW0gZmFpbGVkOgojc3RyaW5nIiIiLCB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvciIsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvciwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvcihTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yLAogICAgICBtZXNzYWdlOiAiIiJWZXJpZmljYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBwcm9ncmFtIGZhaWxlZDoKJHtzdHJpbmd9IiIiLCBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludGVycG9sYXRpb25JblVyaSA9IG1lc3NhZ2VJbnRlcnBvbGF0aW9uSW5Vcmk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW50ZXJwb2xhdGlvbkluVXJpID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW50ZXJwb2xhdGlvbkluVXJpIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0xJVEVSQUxfSU5fQ09ORklHVVJBVElPTiJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IHVzZSBzdHJpbmcgaW50ZXJwb2xhdGlvbiBpbiBhIFVSSS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW4ndCBpbmZlciBhIHR5cGUgZm9yICcjbmFtZScsIGl0IGNhbiBiZSBlaXRoZXIgJyN0eXBlJyBvciAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGFkZGluZyBhIHR5cGUgYXJndW1lbnQgc2VsZWN0aW5nIG9uZSBvZiB0aGUgb3B0aW9ucy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAiSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50IiwKICB0ZW1wbGF0ZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQoCiAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgaW5mZXIgYSB0eXBlIGZvciAnJHtuYW1lfScsIGl0IGNhbiBiZSBlaXRoZXIgJyR7dHlwZX0nIG9yICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBhZGRpbmcgYSB0eXBlIGFyZ3VtZW50IHNlbGVjdGluZyBvbmUgb2YgdGhlIG9wdGlvbnMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQXNzaWdubWVudCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJBIHZhbHVlIG9mIHR5cGUgJyN0eXBlJyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgbGVmdCBoYW5kIHNpZGUsIG9yIGNhc3RpbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZSB0byAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludmFsaWRBc3NpZ25tZW50KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQXNzaWdubWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQXNzaWdubWVudCIsIHRlbXBsYXRlSW52YWxpZEFzc2lnbm1lbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQVNTSUdOTUVOVCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQXNzaWdubWVudChEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRBc3NpZ25tZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQSB2YWx1ZSBvZiB0eXBlICcke3R5cGV9JyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSBsZWZ0IGhhbmQgc2lkZSwgb3IgY2FzdGluZyB0aGUgcmlnaHQgaGFuZCBzaWRlIHRvICcke3R5cGUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZEF3YWl0Rm9yID0gbWVzc2FnZUludmFsaWRBd2FpdEZvcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkQXdhaXRGb3IgPSBjb25zdCBNZXNzYWdlQ29kZSgiSW52YWxpZEF3YWl0Rm9yIiwKICAgIGluZGV4OiA5LAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIGtleXdvcmQgJ2F3YWl0JyBpc24ndCBhbGxvd2VkIGZvciBhIG5vcm1hbCAnZm9yJyBzdGF0ZW1lbnQuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkLCBvciB1c2UgYSBmb3ItZWFjaCBzdGF0ZW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUludmFsaWRCcmVha1RhcmdldCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgYnJlYWsgdG8gJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQnJlYWtUYXJnZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUludmFsaWRCcmVha1RhcmdldCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiSW52YWxpZEJyZWFrVGFyZ2V0IiwKICB0ZW1wbGF0ZUludmFsaWRCcmVha1RhcmdldCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQnJlYWtUYXJnZXQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQnJlYWtUYXJnZXQsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGJyZWFrIHRvICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB0eXBlICcjdHlwZScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlSW52YWxpZENhc3RGdW5jdGlvbkV4cHIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3RGdW5jdGlvbkV4cHIiLCB0ZW1wbGF0ZUludmFsaWRDYXN0RnVuY3Rpb25FeHByLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0NBU1RfRlVOQ1RJT05fRVhQUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwcihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0RnVuY3Rpb25FeHByLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gdHlwZSAnJHt0eXBlfScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBsaXN0IGxpdGVyYWwgdHlwZSAnI3R5cGUnIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbGlzdCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxMaXN0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkludmFsaWRDYXN0TGl0ZXJhbExpc3QiLCB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbExpc3QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9MSVRFUkFMX0xJU1QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RMaXRlcmFsTGlzdChEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0TGl0ZXJhbExpc3QsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbGlzdCBsaXRlcmFsIHR5cGUgJyR7dHlwZX0nIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBsaXN0IGxpdGVyYWwgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxNYXAgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG1hcCBsaXRlcmFsIHR5cGUgJyN0eXBlJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIG1hcCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxNYXApOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUludmFsaWRDYXN0TGl0ZXJhbE1hcCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQ2FzdExpdGVyYWxNYXAiLCB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbE1hcCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DQVNUX0xJVEVSQUxfTUFQIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TGl0ZXJhbE1hcChEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0TGl0ZXJhbE1hcCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtYXAgbGl0ZXJhbCB0eXBlICcke3R5cGV9JyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbWFwIGxpdGVyYWwgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxTZXQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHNldCBsaXRlcmFsIHR5cGUgJyN0eXBlJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIHNldCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxTZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUludmFsaWRDYXN0TGl0ZXJhbFNldCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQ2FzdExpdGVyYWxTZXQiLCB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbFNldCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DQVNUX0xJVEVSQUxfU0VUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TGl0ZXJhbFNldChEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0TGl0ZXJhbFNldCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBzZXQgbGl0ZXJhbCB0eXBlICcke3R5cGV9JyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgc2V0IGxpdGVyYWwgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24gPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGxvY2FsIGZ1bmN0aW9uIGhhcyB0eXBlICcjdHlwZScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24iLCB0ZW1wbGF0ZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DQVNUX0ZVTkNUSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TG9jYWxGdW5jdGlvbigKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52YWxpZENhc3RMb2NhbEZ1bmN0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGxvY2FsIGZ1bmN0aW9uIGhhcyB0eXBlICcke3R5cGV9JyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUludmFsaWRDYXN0TmV3RXhwciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgY29uc3RydWN0b3IgcmV0dXJucyB0eXBlICcjdHlwZScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBjb25zdHJ1Y3RlZCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENhc3ROZXdFeHByKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdE5ld0V4cHIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3ROZXdFeHByIiwgdGVtcGxhdGVJbnZhbGlkQ2FzdE5ld0V4cHIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9ORVdfRVhQUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdE5ld0V4cHIoRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ2FzdE5ld0V4cHIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgY29uc3RydWN0b3IgcmV0dXJucyB0eXBlICcke3R5cGV9JyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgY29uc3RydWN0ZWQgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgc3RhdGljIG1ldGhvZCBoYXMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBtZXRob2Qgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0U3RhdGljTWV0aG9kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCIsIHRlbXBsYXRlSW52YWxpZENhc3RTdGF0aWNNZXRob2QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9NRVRIT0QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RTdGF0aWNNZXRob2QoRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBzdGF0aWMgbWV0aG9kIGhhcyB0eXBlICcke3R5cGV9JyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBtZXRob2Qgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb24gPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHRvcCBsZXZlbCBmdW5jdGlvbiBoYXMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uIiwgdGVtcGxhdGVJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9GVU5DVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb24oCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSB0b3AgbGV2ZWwgZnVuY3Rpb24gaGFzIHR5cGUgJyR7dHlwZX0nIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZENhdGNoQXJndW1lbnRzID0gbWVzc2FnZUludmFsaWRDYXRjaEFyZ3VtZW50czsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkQ2F0Y2hBcmd1bWVudHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkQ2F0Y2hBcmd1bWVudHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FUQ0hfQVJHVU1FTlRTIl0sCiAgICBtZXNzYWdlOiByIiIiSW52YWxpZCBjYXRjaCBhcmd1bWVudHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRDb2RlUG9pbnQgPSBtZXNzYWdlSW52YWxpZENvZGVQb2ludDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkQ29kZVBvaW50ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZENvZGVQb2ludCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DT0RFX1BPSU5UIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgZXNjYXBlIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggJ1x1JyBpc24ndCBhIHZhbGlkIGNvZGUgcG9pbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUludmFsaWRDb250aW51ZVRhcmdldCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgY29udGludWUgYXQgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ29udGludWVUYXJnZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUludmFsaWRDb250aW51ZVRhcmdldCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiSW52YWxpZENvbnRpbnVlVGFyZ2V0IiwKICB0ZW1wbGF0ZUludmFsaWRDb250aW51ZVRhcmdldCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ29udGludWVUYXJnZXQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ29udGludWVUYXJnZXQsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGNvbnRpbnVlIGF0ICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkSGV4RXNjYXBlID0gbWVzc2FnZUludmFsaWRIZXhFc2NhcGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZEhleEVzY2FwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkludmFsaWRIZXhFc2NhcGUiLAogICAgaW5kZXg6IDQwLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQW4gZXNjYXBlIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggJ1x4JyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDIgaGV4YWRlY2ltYWwgZGlnaXRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkSW5pdGlhbGl6ZXIgPSBtZXNzYWdlSW52YWxpZEluaXRpYWxpemVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRJbml0aWFsaXplciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkludmFsaWRJbml0aWFsaXplciIsCiAgICBtZXNzYWdlOiByIiIiTm90IGEgdmFsaWQgaW5pdGlhbGl6ZXIuIiIiLAogICAgdGlwOiByIiIiVG8gaW5pdGlhbGl6ZSBhIGZpZWxkLCB1c2UgdGhlIHN5bnRheCAnbmFtZSA9IHZhbHVlJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZSA9CiAgICBtZXNzYWdlSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkSW5saW5lRnVuY3Rpb25UeXBlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9JTkxJTkVfRlVOQ1RJT05fVFlQRSJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiSW5saW5lIGZ1bmN0aW9uIHR5cGVzIGNhbm5vdCBiZSB1c2VkIGZvciBwYXJhbWV0ZXJzIGluIGEgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHRoZSBpbmxpbmUgZnVuY3Rpb24gdHlwZSAoYXMgaW4gJ2ludCBmKCknKSB0byBhIHByZWZpeGVkIGZ1bmN0aW9uIHR5cGUgdXNpbmcgdGhlIGBGdW5jdGlvbmAga2V5d29yZCAoYXMgaW4gJ2ludCBGdW5jdGlvbigpIGYnKS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlSW52YWxpZE9wZXJhdG9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUgc3RyaW5nICcjbGV4ZW1lJyBpc24ndCBhIHVzZXItZGVmaW5hYmxlIG9wZXJhdG9yLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludmFsaWRPcGVyYXRvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlSW52YWxpZE9wZXJhdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJJbnZhbGlkT3BlcmF0b3IiLCB0ZW1wbGF0ZUludmFsaWRPcGVyYXRvciwKICAgICAgICBpbmRleDogMzkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRPcGVyYXRvcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkT3BlcmF0b3IsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSBzdHJpbmcgJyR7bGV4ZW1lfScgaXNuJ3QgYSB1c2VyLWRlZmluYWJsZSBvcGVyYXRvci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVJbnZhbGlkUGFja2FnZVVyaSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiSW52YWxpZCBwYWNrYWdlIFVSSSAnI3VyaSc6CiAgI3N0cmluZy4iIiIsIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZFBhY2thZ2VVcmkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgc3RyaW5nKT4gY29kZUludmFsaWRQYWNrYWdlVXJpID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIHN0cmluZyk+KAogICJJbnZhbGlkUGFja2FnZVVyaSIsCiAgdGVtcGxhdGVJbnZhbGlkUGFja2FnZVVyaSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkUGFja2FnZVVyaShVcmkgdXJpXywgU3RyaW5nIHN0cmluZykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkUGFja2FnZVVyaSwKICAgICAgbWVzc2FnZTogIiIiSW52YWxpZCBwYWNrYWdlIFVSSSAnJHt1cml9JzoKICAke3N0cmluZ30uIiIiLCBhcmd1bWVudHM6IHsndXJpJzogdXJpXywgJ3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVyID0KICAgIG1lc3NhZ2VJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRTdXBlckluSW5pdGlhbGl6ZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVyIiwKICAgIGluZGV4OiA0NywKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkNhbiBvbmx5IHVzZSAnc3VwZXInIGluIGFuIGluaXRpYWxpemVyIGZvciBjYWxsaW5nIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yIChlLmcuICdzdXBlcigpJyBvciAnc3VwZXIubmFtZWRDb25zdHJ1Y3RvcigpJykiIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZFN5bmNNb2RpZmllciA9IG1lc3NhZ2VJbnZhbGlkU3luY01vZGlmaWVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRTeW5jTW9kaWZpZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkU3luY01vZGlmaWVyIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX1NUQVJfQUZURVJfU1lOQyJdLAogICAgbWVzc2FnZTogciIiIkludmFsaWQgbW9kaWZpZXIgJ3N5bmMnLiIiIiwKICAgIHRpcDogciIiIlRyeSByZXBsYWNpbmcgJ3N5bmMnIHdpdGggJ3N5bmMqJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZFRoaXNJbkluaXRpYWxpemVyID0gbWVzc2FnZUludmFsaWRUaGlzSW5Jbml0aWFsaXplcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkVGhpc0luSW5pdGlhbGl6ZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkVGhpc0luSW5pdGlhbGl6ZXIiLAogICAgaW5kZXg6IDY1LAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ2FuIG9ubHkgdXNlICd0aGlzJyBpbiBhbiBpbml0aWFsaXplciBmb3IgZmllbGQgaW5pdGlhbGl6YXRpb24gKGUuZy4gJ3RoaXMueCA9IHNvbWV0aGluZycpIGFuZCBjb25zdHJ1Y3RvciByZWRpcmVjdGlvbiAoZS5nLiAndGhpcygpJyBvciAndGhpcy5uYW1lZENvbnN0cnVjdG9yKCkpIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRVbmljb2RlRXNjYXBlID0gbWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZFVuaWNvZGVFc2NhcGUiLAogICAgaW5kZXg6IDM4LAogICAgbWVzc2FnZToKICAgICAgICByIiIiQW4gZXNjYXBlIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggJ1x1JyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDQgaGV4YWRlY2ltYWwgZGlnaXRzIG9yIGZyb20gMSB0byA2IGRpZ2l0cyBiZXR3ZWVuICd7JyBhbmQgJ30nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3MgPQogICAgbWVzc2FnZUludmFsaWRVc2VPZk51bGxBd2FyZUFjY2VzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3MgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3MiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfVVNFX09GX05VTExfQVdBUkVfQUNDRVNTIl0sCiAgICBtZXNzYWdlOiByIiIiQ2Fubm90IHVzZSAnPy4nIGhlcmUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHVzaW5nICcuJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZFZvaWQgPSBtZXNzYWdlSW52YWxpZFZvaWQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZFZvaWQgPSBjb25zdCBNZXNzYWdlQ29kZSgiSW52YWxpZFZvaWQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUEVDVEVEX1RZUEVfTkFNRSJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiVHlwZSAndm9pZCcgY2FuJ3QgYmUgdXNlZCBoZXJlIGJlY2F1c2UgaXQgaXNuJ3QgYSByZXR1cm4gdHlwZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyAndm9pZCcga2V5d29yZCBvciByZXBsYWNlIGl0IHdpdGggJ3ZhcicsICdmaW5hbCcsIG9yIGEgdHlwZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlSW52b2tlTm9uRnVuY3Rpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXNuJ3QgYSBmdW5jdGlvbiBvciBtZXRob2QgYW5kIGNhbid0IGJlIGludm9rZWQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52b2tlTm9uRnVuY3Rpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUludm9rZU5vbkZ1bmN0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbnZva2VOb25GdW5jdGlvbiIsIHRlbXBsYXRlSW52b2tlTm9uRnVuY3Rpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVk9DQVRJT05fT0ZfTk9OX0ZVTkNUSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludm9rZU5vbkZ1bmN0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52b2tlTm9uRnVuY3Rpb24sCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpc24ndCBhIGZ1bmN0aW9uIG9yIG1ldGhvZCBhbmQgY2FuJ3QgYmUgaW52b2tlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUxhYmVsTm90Rm91bmQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCBmaW5kIGxhYmVsICcjbmFtZScuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBkZWZpbmluZyB0aGUgbGFiZWwsIG9yIGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gbWF0Y2ggYW4gZXhpc3RpbmcgbGFiZWwuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNMYWJlbE5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVMYWJlbE5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJMYWJlbE5vdEZvdW5kIiwgdGVtcGxhdGVMYWJlbE5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJMQUJFTF9VTkRFRklORUQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTGFiZWxOb3RGb3VuZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUxhYmVsTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGZpbmQgbGFiZWwgJyR7bmFtZX0nLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGRlZmluaW5nIHRoZSBsYWJlbCwgb3IgY29ycmVjdGluZyB0aGUgbmFtZSB0byBtYXRjaCBhbiBleGlzdGluZyBsYWJlbC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVMYW5ndWFnZVZlcnNpb25JbnZhbGlkSW5Eb3RQYWNrYWdlcyA9CiAgICBtZXNzYWdlTGFuZ3VhZ2VWZXJzaW9uSW52YWxpZEluRG90UGFja2FnZXM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTGFuZ3VhZ2VWZXJzaW9uSW52YWxpZEluRG90UGFja2FnZXMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJMYW5ndWFnZVZlcnNpb25JbnZhbGlkSW5Eb3RQYWNrYWdlcyIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgbGFuZ3VhZ2UgdmVyc2lvbiBpcyBub3Qgc3BlY2lmaWVkIGNvcnJlY3RseSBpbiB0aGUgLnBhY2thZ2VzIGZpbGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUxhbmd1YWdlVmVyc2lvbk1pc21hdGNoSW5QYXJ0ID0KICAgIG1lc3NhZ2VMYW5ndWFnZVZlcnNpb25NaXNtYXRjaEluUGFydDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VMYW5ndWFnZVZlcnNpb25NaXNtYXRjaEluUGFydCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkxhbmd1YWdlVmVyc2lvbk1pc21hdGNoSW5QYXJ0IiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlRoZSBsYW5ndWFnZSB2ZXJzaW9uIG92ZXJyaWRlIGhhcyB0byBiZSB0aGUgc2FtZSBpbiB0aGUgbGlicmFyeSBhbmQgaXRzIHBhcnQocykuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBpbnQgY291bnQsCiAgICAgICAgaW50CiAgICAgICAgICAgIGNvdW50Mik+IHRlbXBsYXRlTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgdmVyc2lvbiBpcyB0b28gaGlnaC4gVGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGxhbmd1YWdlIHZlcnNpb24gaXMgI2NvdW50LiNjb3VudDIuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNMYW5ndWFnZVZlcnNpb25Ub29IaWdoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIpPiBjb2RlTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4oCiAgIkxhbmd1YWdlVmVyc2lvblRvb0hpZ2giLAogIHRlbXBsYXRlTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNMYW5ndWFnZVZlcnNpb25Ub29IaWdoKGludCBjb3VudCwgaW50IGNvdW50MikgewogIGlmIChjb3VudCA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIGlmIChjb3VudDIgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUxhbmd1YWdlVmVyc2lvblRvb0hpZ2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgc3BlY2lmaWVkIGxhbmd1YWdlIHZlcnNpb24gaXMgdG9vIGhpZ2guIFRoZSBoaWdoZXN0IHN1cHBvcnRlZCBsYW5ndWFnZSB2ZXJzaW9uIGlzICR7Y291bnR9LiR7Y291bnQyfS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjb3VudCc6IGNvdW50LCAnY291bnQyJzogY291bnQyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUxpYnJhcnlEaXJlY3RpdmVOb3RGaXJzdCA9IG1lc3NhZ2VMaWJyYXJ5RGlyZWN0aXZlTm90Rmlyc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0IiwKICAgIGluZGV4OiAzNywKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlRoZSBsaWJyYXJ5IGRpcmVjdGl2ZSBtdXN0IGFwcGVhciBiZWZvcmUgYWxsIG90aGVyIGRpcmVjdGl2ZXMuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgbGlicmFyeSBkaXJlY3RpdmUgYmVmb3JlIGFueSBvdGhlciBkaXJlY3RpdmVzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzID0KICAgIG1lc3NhZ2VMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUxpc3RMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9PTkVfTElTVF9UWVBFX0FSR1VNRU5UUyJdLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiJMaXN0IGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHlwZSBhcmd1bWVudC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbGlicmFyeSAnI3VyaScgZGVmaW5lcyBhIHRvcC1sZXZlbCBtZW1iZXIgbmFtZWQgJ2xvYWRMaWJyYXJ5Jy4gVGhpcyBtZW1iZXIgaXMgaGlkZGVuIGJ5IHRoZSBzcGVjaWFsIG1lbWJlciAnbG9hZExpYnJhcnknIHRoYXQgdGhlIGxhbmd1YWdlIGFkZHMgdG8gc3VwcG9ydCBkZWZlcnJlZCBsb2FkaW5nLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHRvIHJlbmFtZSBvciBoaWRlIHRoZSBtZW1iZXIuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNMb2FkTGlicmFyeUhpZGVzTWVtYmVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgICJMb2FkTGlicmFyeUhpZGVzTWVtYmVyIiwgdGVtcGxhdGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pZ25vcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNMb2FkTGlicmFyeUhpZGVzTWVtYmVyKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGxpYnJhcnkgJyR7dXJpfScgZGVmaW5lcyBhIHRvcC1sZXZlbCBtZW1iZXIgbmFtZWQgJ2xvYWRMaWJyYXJ5Jy4gVGhpcyBtZW1iZXIgaXMgaGlkZGVuIGJ5IHRoZSBzcGVjaWFsIG1lbWJlciAnbG9hZExpYnJhcnknIHRoYXQgdGhlIGxhbmd1YWdlIGFkZHMgdG8gc3VwcG9ydCBkZWZlcnJlZCBsb2FkaW5nLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgdG8gcmVuYW1lIG9yIGhpZGUgdGhlIG1lbWJlci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cyA9CiAgICBtZXNzYWdlTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTE9BRF9MSUJSQVJZX1RBS0VTX05PX0FSR1VNRU5UUyJdLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiInbG9hZExpYnJhcnknIHRha2VzIG5vIGFyZ3VtZW50cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPgogICAgdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkxvY2FsIGRlZmluaXRpb24gb2YgJyNuYW1lJyBoaWRlcyBleHBvcnQgZnJvbSAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+CiAgICBjb2RlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgICJMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydCIsIHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lmlnbm9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0xvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0KFN0cmluZyBuYW1lLCBVcmkgdXJpXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUxvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0LAogICAgICBtZXNzYWdlOiAiIiJMb2NhbCBkZWZpbml0aW9uIG9mICcke25hbWV9JyBoaWRlcyBleHBvcnQgZnJvbSAnJHt1cml9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPgogICAgdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkxvY2FsIGRlZmluaXRpb24gb2YgJyNuYW1lJyBoaWRlcyBpbXBvcnQgZnJvbSAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+CiAgICBjb2RlTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgICJMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCIsIHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lmlnbm9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0xvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0KFN0cmluZyBuYW1lLCBVcmkgdXJpXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUxvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0LAogICAgICBtZXNzYWdlOiAiIiJMb2NhbCBkZWZpbml0aW9uIG9mICcke25hbWV9JyBoaWRlcyBpbXBvcnQgZnJvbSAnJHt1cml9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWFwTGl0ZXJhbFR5cGVBcmd1bWVudE1pc21hdGNoID0KICAgIG1lc3NhZ2VNYXBMaXRlcmFsVHlwZUFyZ3VtZW50TWlzbWF0Y2g7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWFwTGl0ZXJhbFR5cGVBcmd1bWVudE1pc21hdGNoID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWFwTGl0ZXJhbFR5cGVBcmd1bWVudE1pc21hdGNoIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9UV09fTUFQX1RZUEVfQVJHVU1FTlRTIl0sCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIkEgbWFwIGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSB0d28gdHlwZSBhcmd1bWVudHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3MgPQogICAgbWVzc2FnZU1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3M7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3MiLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBjbGFzcyBtZW1iZXIgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBlbmNsb3NpbmcgY2xhc3MuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1ldGFkYXRhVHlwZUFyZ3VtZW50cyA9IG1lc3NhZ2VNZXRhZGF0YVR5cGVBcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWV0YWRhdGFUeXBlQXJndW1lbnRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWV0YWRhdGFUeXBlQXJndW1lbnRzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJBTk5PVEFUSU9OX1dJVEhfVFlQRV9BUkdVTUVOVFMiXSwKICAgIG1lc3NhZ2U6IHIiIiJBbiBhbm5vdGF0aW9uIChtZXRhZGF0YSkgY2FuJ3QgdXNlIHR5cGUgYXJndW1lbnRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVNZXRob2ROb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiTWV0aG9kIG5vdCBmb3VuZDogJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNZXRob2ROb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTWV0aG9kTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk1ldGhvZE5vdEZvdW5kIiwgdGVtcGxhdGVNZXRob2ROb3RGb3VuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX01FVEhPRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c01ldGhvZE5vdEZvdW5kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWV0aG9kTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIk1ldGhvZCBub3QgZm91bmQ6ICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nQXJndW1lbnRMaXN0ID0gbWVzc2FnZU1pc3NpbmdBcmd1bWVudExpc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0FyZ3VtZW50TGlzdCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdBcmd1bWVudExpc3QiLAogICAgbWVzc2FnZTogciIiIkNvbnN0cnVjdG9yIGludm9jYXRpb25zIG11c3QgaGF2ZSBhbiBhcmd1bWVudCBsaXN0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nQXNzaWduYWJsZVNlbGVjdG9yID0KICAgIG1lc3NhZ2VNaXNzaW5nQXNzaWduYWJsZVNlbGVjdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU1pc3NpbmdBc3NpZ25hYmxlU2VsZWN0b3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nQXNzaWduYWJsZVNlbGVjdG9yIiwKICAgIGluZGV4OiAzNSwKICAgIG1lc3NhZ2U6IHIiIiJNaXNzaW5nIHNlbGVjdG9yIHN1Y2ggYXMgJy48aWRlbnRpZmllcj4nIG9yICdbMF0nLiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgYSBzZWxlY3Rvci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVyID0KICAgIG1lc3NhZ2VNaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVyIiwKICAgIGluZGV4OiAzNCwKICAgIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCBhbiBhc3NpZ25tZW50IGFmdGVyIHRoZSBmaWVsZCBuYW1lLiIiIiwKICAgIHRpcDogciIiIlRvIGluaXRpYWxpemUgYSBmaWVsZCwgdXNlIHRoZSBzeW50YXggJ25hbWUgPSB2YWx1ZScuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBlID0KICAgIG1lc3NhZ2VNaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBlIiwKICAgIGluZGV4OiAzMywKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlZhcmlhYmxlcyBtdXN0IGJlIGRlY2xhcmVkIHVzaW5nIHRoZSBrZXl3b3JkcyAnY29uc3QnLCAnZmluYWwnLCAndmFyJyBvciBhIHR5cGUgbmFtZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSBhZGRpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlIG9yIHRoZSBrZXl3b3JkICd2YXInLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+CiAgICB0ZW1wbGF0ZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJObyB0eXBlIGFyZ3VtZW50cyBwcm92aWRlZCwgI2NvdW50IHBvc3NpYmxlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c01pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+IGNvZGVNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQpPigKICAgICAgICAiTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cyIsIHRlbXBsYXRlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cywKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaWdub3JlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cyhpbnQgY291bnQpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMsCiAgICAgIG1lc3NhZ2U6ICIiIk5vIHR5cGUgYXJndW1lbnRzIHByb3ZpZGVkLCAke2NvdW50fSBwb3NzaWJsZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjb3VudCc6IGNvdW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdFeHBvbmVudCA9IG1lc3NhZ2VNaXNzaW5nRXhwb25lbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0V4cG9uZW50ID0gY29uc3QgTWVzc2FnZUNvZGUoIk1pc3NpbmdFeHBvbmVudCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19ESUdJVCJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiTnVtYmVycyBpbiBleHBvbmVudGlhbCBub3RhdGlvbiBzaG91bGQgYWx3YXlzIGNvbnRhaW4gYW4gZXhwb25lbnQgKGFuIGludGVnZXIgbnVtYmVyIHdpdGggYW4gb3B0aW9uYWwgc2lnbikuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJNYWtlIHN1cmUgdGhlcmUgaXMgYW4gZXhwb25lbnQsIGFuZCByZW1vdmUgYW55IHdoaXRlc3BhY2UgYmVmb3JlIGl0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nRXhwcmVzc2lvbkluVGhyb3cgPSBtZXNzYWdlTWlzc2luZ0V4cHJlc3Npb25JblRocm93OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU1pc3NpbmdFeHByZXNzaW9uSW5UaHJvdyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdFeHByZXNzaW9uSW5UaHJvdyIsCiAgICBpbmRleDogMzIsCiAgICBtZXNzYWdlOiByIiIiTWlzc2luZyBleHByZXNzaW9uIGFmdGVyICd0aHJvdycuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJBZGQgYW4gZXhwcmVzc2lvbiBhZnRlciAndGhyb3cnIG9yIHVzZSAncmV0aHJvdycgdG8gdGhyb3cgYSBjYXVnaHQgZXhjZXB0aW9uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnMgPQogICAgbWVzc2FnZU1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0Z1bmN0aW9uUGFyYW1ldGVycyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfRlVOQ1RJT05fUEFSQU1FVEVSUyJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBuZWVkcyBhbiBleHBsaWNpdCBsaXN0IG9mIHBhcmFtZXRlcnMuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyBhIHBhcmFtZXRlciBsaXN0IHRvIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI25hbWUnIGlzIGRlZmluZWQgaGVyZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlIiwgdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZSwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIGlzIGRlZmluZWQgaGVyZS4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgTGlzdDxTdHJpbmc+CiAgICAgICAgICAgIF9uYW1lcyk+IHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBMaXN0PFN0cmluZz4gX25hbWVzKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBub24tYWJzdHJhY3QgY2xhc3MgJyNuYW1lJyBpcyBtaXNzaW5nIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlc2UgbWVtYmVyczoKI25hbWVzIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgdG8gZWl0aGVyCiAtIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24sCiAtIGluaGVyaXQgYW4gaW1wbGVtZW50YXRpb24gZnJvbSBhIHN1cGVyY2xhc3Mgb3IgbWl4aW4sCiAtIG1hcmsgdGhlIGNsYXNzIGFzIGFic3RyYWN0LCBvcgogLSBwcm92aWRlIGEgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24uCiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBMaXN0PFN0cmluZz4gX25hbWVzKT4KICAgIGNvZGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiBfbmFtZXMpPigKICAgICAgICAiTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QiLAogICAgICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkNSRVRFX0NMQVNTX1dJVEhfQUJTVFJBQ1RfTUVNQkVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c01pc3NpbmdJbXBsZW1lbnRhdGlvbk5vdEFic3RyYWN0KAogICAgU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiBfbmFtZXMpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKF9uYW1lcy5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZXMgcHJvdmlkZWQnOwogIFN0cmluZyBuYW1lcyA9IGl0ZW1pemVOYW1lcyhfbmFtZXMpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbm9uLWFic3RyYWN0IGNsYXNzICcke25hbWV9JyBpcyBtaXNzaW5nIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlc2UgbWVtYmVyczoKJHtuYW1lc30iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHRvIGVpdGhlcgogLSBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uLAogLSBpbmhlcml0IGFuIGltcGxlbWVudGF0aW9uIGZyb20gYSBzdXBlcmNsYXNzIG9yIG1peGluLAogLSBtYXJrIHRoZSBjbGFzcyBhcyBhYnN0cmFjdCwgb3IKIC0gcHJvdmlkZSBhICdub1N1Y2hNZXRob2QnIGltcGxlbWVudGF0aW9uLgoiIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWVzJzogX25hbWVzfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdJbnB1dCA9IG1lc3NhZ2VNaXNzaW5nSW5wdXQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0lucHV0ID0gY29uc3QgTWVzc2FnZUNvZGUoIk1pc3NpbmdJbnB1dCIsCiAgICBtZXNzYWdlOiByIiIiTm8gaW5wdXQgZmlsZSBwcm92aWRlZCB0byB0aGUgY29tcGlsZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdNYWluID0gbWVzc2FnZU1pc3NpbmdNYWluOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU1pc3NpbmdNYWluID0gY29uc3QgTWVzc2FnZUNvZGUoIk1pc3NpbmdNYWluIiwKICAgIG1lc3NhZ2U6IHIiIiJObyAnbWFpbicgbWV0aG9kIGZvdW5kLiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgYSBtZXRob2QgbmFtZWQgJ21haW4nIHRvIHlvdXIgcHJvZ3JhbS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnMgPSBtZXNzYWdlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nTWV0aG9kUGFyYW1ldGVycyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19NRVRIT0RfUEFSQU1FVEVSUyJdLAogICAgbWVzc2FnZTogciIiIkEgbWV0aG9kIGRlY2xhcmF0aW9uIG5lZWRzIGFuIGV4cGxpY2l0IGxpc3Qgb2YgcGFyYW1ldGVycy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIGEgcGFyYW1ldGVyIGxpc3QgdG8gdGhlIG1ldGhvZCBkZWNsYXJhdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ09wZXJhdG9yS2V5d29yZCA9IG1lc3NhZ2VNaXNzaW5nT3BlcmF0b3JLZXl3b3JkOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU1pc3NpbmdPcGVyYXRvcktleXdvcmQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nT3BlcmF0b3JLZXl3b3JkIiwKICAgIGluZGV4OiAzMSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIk9wZXJhdG9yIGRlY2xhcmF0aW9ucyBtdXN0IGJlIHByZWNlZGVkIGJ5IHRoZSBrZXl3b3JkICdvcGVyYXRvcicuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyB0aGUga2V5d29yZCAnb3BlcmF0b3InLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiB0ZW1wbGF0ZU1pc3NpbmdQYXJ0T2YgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IHVzZSAnI3VyaScgYXMgYSBwYXJ0LCBiZWNhdXNlIGl0IGhhcyBubyAncGFydCBvZicgZGVjbGFyYXRpb24uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNaXNzaW5nUGFydE9mKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVNaXNzaW5nUGFydE9mID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgICJNaXNzaW5nUGFydE9mIiwgdGVtcGxhdGVNaXNzaW5nUGFydE9mLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQQVJUX09GX05PTl9QQVJUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c01pc3NpbmdQYXJ0T2YoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU1pc3NpbmdQYXJ0T2YsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCB1c2UgJyR7dXJpfScgYXMgYSBwYXJ0LCBiZWNhdXNlIGl0IGhhcyBubyAncGFydCBvZicgZGVjbGFyYXRpb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydCA9CiAgICBtZXNzYWdlTWlzc2luZ1ByZWZpeEluRGVmZXJyZWRJbXBvcnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ1ByZWZpeEluRGVmZXJyZWRJbXBvcnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydCIsCiAgICBpbmRleDogMzAsCiAgICBtZXNzYWdlOiByIiIiRGVmZXJyZWQgaW1wb3J0cyBzaG91bGQgaGF2ZSBhIHByZWZpeC4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIGEgcHJlZml4IHRvIHRoZSBpbXBvcnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdUeXBlZGVmUGFyYW1ldGVycyA9IG1lc3NhZ2VNaXNzaW5nVHlwZWRlZlBhcmFtZXRlcnM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ1R5cGVkZWZQYXJhbWV0ZXJzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWlzc2luZ1R5cGVkZWZQYXJhbWV0ZXJzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX1RZUEVERUZfUEFSQU1FVEVSUyJdLAogICAgbWVzc2FnZTogciIiIkEgdHlwZWRlZiBuZWVkcyBhbiBleHBsaWNpdCBsaXN0IG9mIHBhcmFtZXRlcnMuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyBhIHBhcmFtZXRlciBsaXN0IHRvIHRoZSB0eXBlZGVmLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+CiAgICB0ZW1wbGF0ZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBEYXJ0VHlwZSBfdHlwZTMpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI3R5cGUnIGRvZXNuJ3QgaW1wbGVtZW50ICcjdHlwZTInIHNvIGl0IGNhbid0IGJlIHVzZWQgd2l0aCAnI3R5cGUzJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBEYXJ0VHlwZSBfdHlwZTMpPgogICAgY29kZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+KAogICAgICAgICJNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlIiwKICAgICAgICB0ZW1wbGF0ZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JWElOX0FQUExJQ0FUSU9OX05PVF9JTVBMRU1FTlRFRF9JTlRFUkZBQ0UiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMykgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBMaXN0PE9iamVjdD4gdHlwZTNQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMyk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMyA9IHR5cGUzUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIicke3R5cGV9JyBkb2Vzbid0IGltcGxlbWVudCAnJHt0eXBlMn0nIHNvIGl0IGNhbid0IGJlIHVzZWQgd2l0aCAnJHt0eXBlM30nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyLCAndHlwZTMnOiBfdHlwZTN9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZyBuYW1lMiwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlR5cGUgcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgaW5mZXJyZWQgZm9yIHRoZSBtaXhpbiAnI25hbWUnIGJlY2F1c2UgJyNuYW1lMicgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBtaXhpbidzIHN1cGVydHlwZSBjb25zdHJhaW50ICcjdHlwZScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgRGFydFR5cGUgX3R5cGUpPgogICAgY29kZU1peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyLCBEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgICJNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzcyIsIHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JWElOX0lORkVSRU5DRV9OT19QT1NTSUJMRV9TVUJTVElUVVRJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MoCiAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyLCBEYXJ0VHlwZSBfdHlwZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlIHBhcmFtZXRlcnMgY291bGQgbm90IGJlIGluZmVycmVkIGZvciB0aGUgbWl4aW4gJyR7bmFtZX0nIGJlY2F1c2UgJyR7bmFtZTJ9JyBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG1peGluJ3Mgc3VwZXJ0eXBlIGNvbnN0cmFpbnQgJyR7dHlwZX0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMiwgJ3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIHN0cmluZywKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgc3RyaW5nMik+IHRlbXBsYXRlTW9kaWZpZXJPdXRPZk9yZGVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbW9kaWZpZXIgJyNzdHJpbmcnIHNob3VsZCBiZSBiZWZvcmUgdGhlIG1vZGlmaWVyICcjc3RyaW5nMicuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcmUtb3JkZXJpbmcgdGhlIG1vZGlmaWVycy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c01vZGlmaWVyT3V0T2ZPcmRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZU1vZGlmaWVyT3V0T2ZPcmRlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICAiTW9kaWZpZXJPdXRPZk9yZGVyIiwgdGVtcGxhdGVNb2RpZmllck91dE9mT3JkZXIsCiAgICAgICAgaW5kZXg6IDU2KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNNb2RpZmllck91dE9mT3JkZXIoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTW9kaWZpZXJPdXRPZk9yZGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIG1vZGlmaWVyICcke3N0cmluZ30nIHNob3VsZCBiZSBiZWZvcmUgdGhlIG1vZGlmaWVyICcke3N0cmluZzJ9Jy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHJlLW9yZGVyaW5nIHRoZSBtb2RpZmllcnMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnc3RyaW5nMic6IHN0cmluZzJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTW9yZVRoYW5PbmVTdXBlck9yVGhpc0luaXRpYWxpemVyID0KICAgIG1lc3NhZ2VNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTW9yZVRoYW5PbmVTdXBlck9yVGhpc0luaXRpYWxpemVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTW9yZVRoYW5PbmVTdXBlck9yVGhpc0luaXRpYWxpemVyIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJTVVBFUl9JTl9SRURJUkVDVElOR19DT05TVFJVQ1RPUiJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSAnc3VwZXInIG9yICd0aGlzJyBpbml0aWFsaXplci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTXVsdGlwbGVFeHRlbmRzID0gbWVzc2FnZU11bHRpcGxlRXh0ZW5kczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNdWx0aXBsZUV4dGVuZHMgPSBjb25zdCBNZXNzYWdlQ29kZSgiTXVsdGlwbGVFeHRlbmRzIiwKICAgIGluZGV4OiAyOCwKICAgIG1lc3NhZ2U6IHIiIiJFYWNoIGNsYXNzIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgZXh0ZW5kcyBjbGF1c2UuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgY2hvb3Npbmcgb25lIHN1cGVyY2xhc3MgYW5kIGRlZmluZSB5b3VyIGNsYXNzIHRvIGltcGxlbWVudCAob3IgbWl4IGluKSB0aGUgb3RoZXJzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNdWx0aXBsZUltcGxlbWVudHMgPSBtZXNzYWdlTXVsdGlwbGVJbXBsZW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU11bHRpcGxlSW1wbGVtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk11bHRpcGxlSW1wbGVtZW50cyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTVVMVElQTEVfSU1QTEVNRU5UU19DTEFVU0VTIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJFYWNoIGNsYXNzIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgaW1wbGVtZW50cyBjbGF1c2UuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgY29tYmluaW5nIGFsbCBvZiB0aGUgaW1wbGVtZW50cyBjbGF1c2VzIGludG8gYSBzaW5nbGUgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzID0KICAgIG1lc3NhZ2VNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU11bHRpcGxlTGlicmFyeURpcmVjdGl2ZXMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzIiwKICAgIGluZGV4OiAyNywKICAgIG1lc3NhZ2U6IHIiIiJPbmx5IG9uZSBsaWJyYXJ5IGRpcmVjdGl2ZSBtYXkgYmUgZGVjbGFyZWQgaW4gYSBmaWxlLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBvZiB0aGUgbGlicmFyeSBkaXJlY3RpdmVzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNdWx0aXBsZU9uQ2xhdXNlcyA9IG1lc3NhZ2VNdWx0aXBsZU9uQ2xhdXNlczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNdWx0aXBsZU9uQ2xhdXNlcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk11bHRpcGxlT25DbGF1c2VzIiwKICAgIGluZGV4OiAyNiwKICAgIG1lc3NhZ2U6IHIiIiJFYWNoIG1peGluIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgb24gY2xhdXNlLiIiIiwKICAgIHRpcDogciIiIlRyeSBjb21iaW5pbmcgYWxsIG9mIHRoZSBvbiBjbGF1c2VzIGludG8gYSBzaW5nbGUgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNdWx0aXBsZVdpdGggPSBtZXNzYWdlTXVsdGlwbGVXaXRoOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU11bHRpcGxlV2l0aCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJNdWx0aXBsZVdpdGgiLAogICAgaW5kZXg6IDI0LAogICAgbWVzc2FnZTogciIiIkVhY2ggY2xhc3MgZGVmaW5pdGlvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSB3aXRoIGNsYXVzZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgY29tYmluaW5nIGFsbCBvZiB0aGUgd2l0aCBjbGF1c2VzIGludG8gYSBzaW5nbGUgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbiA9IG1lc3NhZ2VOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOQU1FRF9GVU5DVElPTl9FWFBSRVNTSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiQSBmdW5jdGlvbiBleHByZXNzaW9uIGNhbid0IGhhdmUgYSBuYW1lLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZU5hbWVkTWl4aW5PdmVycmlkZUNvbnRleHQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIk92ZXJyaWRlIHdhcyBpbnRyb2R1Y2VkIGluIHRoZSBtaXhpbiBhcHBsaWNhdGlvbiBjbGFzcyAnI25hbWUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCIsIHRlbXBsYXRlTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5hbWVkTWl4aW5PdmVycmlkZUNvbnRleHQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJPdmVycmlkZSB3YXMgaW50cm9kdWNlZCBpbiB0aGUgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbiA9CiAgICBtZXNzYWdlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbiIsCiAgICBpbmRleDogMjMsCiAgICBtZXNzYWdlOiByIiIiTmF0aXZlIGNsYXVzZSBpbiB0aGlzIGZvcm0gaXMgZGVwcmVjYXRlZC4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGlzIG5hdGl2ZSBjbGF1c2UgYW5kIGFkZGluZyBAbmF0aXZlKCkgb3IgQG5hdGl2ZSgnbmF0aXZlLW5hbWUnKSBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZU5vRm9ybWFscyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkEgZnVuY3Rpb24gc2hvdWxkIGhhdmUgZm9ybWFsIHBhcmFtZXRlcnMuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBhZGRpbmcgJygpJyBhZnRlciAnI2xleGVtZScsIG9yIGFkZCAnZ2V0JyBiZWZvcmUgJyNsZXhlbWUnIHRvIGRlY2xhcmUgYSBnZXR0ZXIuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNOb0Zvcm1hbHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZU5vRm9ybWFscyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigiTm9Gb3JtYWxzIiwgdGVtcGxhdGVOb0Zvcm1hbHMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfRlVOQ1RJT05fUEFSQU1FVEVSUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNOb0Zvcm1hbHMoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm9Gb3JtYWxzLAogICAgICBtZXNzYWdlOiAiIiJBIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGZvcm1hbCBwYXJhbWV0ZXJzLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGFkZGluZyAnKCknIGFmdGVyICcke2xleGVtZX0nLCBvciBhZGQgJ2dldCcgYmVmb3JlICcke2xleGVtZX0nIHRvIGRlY2xhcmUgYSBnZXR0ZXIuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVOb1N1Y2hOYW1lZFBhcmFtZXRlciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiTm8gbmFtZWQgcGFyYW1ldGVyIHdpdGggdGhlIG5hbWUgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNOb1N1Y2hOYW1lZFBhcmFtZXRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTm9TdWNoTmFtZWRQYXJhbWV0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk5vU3VjaE5hbWVkUGFyYW1ldGVyIiwgdGVtcGxhdGVOb1N1Y2hOYW1lZFBhcmFtZXRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX05BTUVEX1BBUkFNRVRFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vU3VjaE5hbWVkUGFyYW1ldGVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm9TdWNoTmFtZWRQYXJhbWV0ZXIsCiAgICAgIG1lc3NhZ2U6ICIiIk5vIG5hbWVkIHBhcmFtZXRlciB3aXRoIHRoZSBuYW1lICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0ID0KICAgIG1lc3NhZ2VOb1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJOb1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0IiwKICAgIG1lc3NhZ2U6IHIiIiInT2JqZWN0JyBoYXMgbm8gdW5uYW1lZCBjb25zdHJ1Y3Rvci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBjaGFyYWN0ZXIsCiAgICAgICAgaW50CiAgICAgICAgICAgIGNvZGVQb2ludCk+IHRlbXBsYXRlTm9uQXNjaWlJZGVudGlmaWVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgY2hhcmFjdGVyLCBpbnQgY29kZVBvaW50KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBub24tQVNDSUkgY2hhcmFjdGVyICcjY2hhcmFjdGVyJyAoI3VuaWNvZGUpIGNhbid0IGJlIHVzZWQgaW4gaWRlbnRpZmllcnMsIG9ubHkgaW4gc3RyaW5ncyBhbmQgY29tbWVudHMuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSB1c2luZyBhbiBVUy1BU0NJSSBsZXR0ZXIsIGEgZGlnaXQsICdfJyAoYW4gdW5kZXJzY29yZSksIG9yICckJyAoYSBkb2xsYXIgc2lnbikuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNOb25Bc2NpaUlkZW50aWZpZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBjaGFyYWN0ZXIsIGludCBjb2RlUG9pbnQpPgogICAgY29kZU5vbkFzY2lpSWRlbnRpZmllciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIGNoYXJhY3RlciwgaW50IGNvZGVQb2ludCk+KAogICAgICAgICJOb25Bc2NpaUlkZW50aWZpZXIiLCB0ZW1wbGF0ZU5vbkFzY2lpSWRlbnRpZmllciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSUxMRUdBTF9DSEFSQUNURVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTm9uQXNjaWlJZGVudGlmaWVyKFN0cmluZyBjaGFyYWN0ZXIsIGludCBjb2RlUG9pbnQpIHsKICBpZiAoY2hhcmFjdGVyLnJ1bmVzLmxlbmd0aCAhPSAxKSB0aHJvdyAiTm90IGEgY2hhcmFjdGVyICcke2NoYXJhY3Rlcn0nIjsKICBTdHJpbmcgdW5pY29kZSA9CiAgICAgICJVKyR7Y29kZVBvaW50LnRvUmFkaXhTdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkucGFkTGVmdCg0LCAnMCcpfSI7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVOb25Bc2NpaUlkZW50aWZpZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbm9uLUFTQ0lJIGNoYXJhY3RlciAnJHtjaGFyYWN0ZXJ9JyAoJHt1bmljb2RlfSkgY2FuJ3QgYmUgdXNlZCBpbiBpZGVudGlmaWVycywgb25seSBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHVzaW5nIGFuIFVTLUFTQ0lJIGxldHRlciwgYSBkaWdpdCwgJ18nIChhbiB1bmRlcnNjb3JlKSwgb3IgJ1wkJyAoYSBkb2xsYXIgc2lnbikuIiIiLAogICAgICBhcmd1bWVudHM6IHsnY2hhcmFjdGVyJzogY2hhcmFjdGVyLCAnY29kZVBvaW50JzogY29kZVBvaW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBpbnQKICAgICAgICAgICAgY29kZVBvaW50KT4gdGVtcGxhdGVOb25Bc2NpaVdoaXRlc3BhY2UgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb2RlUG9pbnQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG5vbi1BU0NJSSBzcGFjZSBjaGFyYWN0ZXIgI3VuaWNvZGUgY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vbkFzY2lpV2hpdGVzcGFjZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvZGVQb2ludCk+IGNvZGVOb25Bc2NpaVdoaXRlc3BhY2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb2RlUG9pbnQpPigKICAgICAgICAiTm9uQXNjaWlXaGl0ZXNwYWNlIiwgdGVtcGxhdGVOb25Bc2NpaVdoaXRlc3BhY2UsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfQ0hBUkFDVEVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vbkFzY2lpV2hpdGVzcGFjZShpbnQgY29kZVBvaW50KSB7CiAgU3RyaW5nIHVuaWNvZGUgPQogICAgICAiVSske2NvZGVQb2ludC50b1JhZGl4U3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnBhZExlZnQoNCwgJzAnKX0iOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm9uQXNjaWlXaGl0ZXNwYWNlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIG5vbi1BU0NJSSBzcGFjZSBjaGFyYWN0ZXIgJHt1bmljb2RlfSBjYW4gb25seSBiZSB1c2VkIGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J2NvZGVQb2ludCc6IGNvZGVQb2ludH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb25Db25zdENvbnN0cnVjdG9yID0gbWVzc2FnZU5vbkNvbnN0Q29uc3RydWN0b3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTm9uQ29uc3RDb25zdHJ1Y3RvciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5vbkNvbnN0Q29uc3RydWN0b3IiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9DT05TVEFOVF9FWFBSRVNTSU9OIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW5ub3QgaW52b2tlIGEgbm9uLSdjb25zdCcgY29uc3RydWN0b3Igd2hlcmUgYSBjb25zdCBleHByZXNzaW9uIGlzIGV4cGVjdGVkLiIiIiwKICAgIHRpcDogciIiIlRyeSB1c2luZyBhIGNvbnN0cnVjdG9yIG9yIGZhY3RvcnkgdGhhdCBpcyAnY29uc3QnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb25Db25zdEZhY3RvcnkgPSBtZXNzYWdlTm9uQ29uc3RGYWN0b3J5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5vbkNvbnN0RmFjdG9yeSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJOb25Db25zdEZhY3RvcnkiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9DT05TVEFOVF9FWFBSRVNTSU9OIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW5ub3QgaW52b2tlIGEgbm9uLSdjb25zdCcgZmFjdG9yeSB3aGVyZSBhIGNvbnN0IGV4cHJlc3Npb24gaXMgZXhwZWN0ZWQuIiIiLAogICAgdGlwOiByIiIiVHJ5IHVzaW5nIGEgY29uc3RydWN0b3Igb3IgZmFjdG9yeSB0aGF0IGlzICdjb25zdCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlID0KICAgIG1lc3NhZ2VOb25JbnN0YW5jZVR5cGVWYXJpYWJsZVVzZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb25JbnN0YW5jZVR5cGVWYXJpYWJsZVVzZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX1BBUkFNRVRFUl9SRUZFUkVOQ0VEX0JZX1NUQVRJQyJdLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiJDYW4gb25seSB1c2UgdHlwZSB2YXJpYWJsZXMgaW4gaW5zdGFuY2UgbWV0aG9kcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsID0gbWVzc2FnZU5vbk51bGxBd2FyZVNwcmVhZElzTnVsbDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb25OdWxsQXdhcmVTcHJlYWRJc051bGwgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJOb25OdWxsQXdhcmVTcHJlYWRJc051bGwiLAogICAgbWVzc2FnZTogciIiIkNhbid0IHNwcmVhZCBhIHZhbHVlIHdpdGggc3RhdGljIHR5cGUgTnVsbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0ID0gbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PTl9QQVJUX09GX0RJUkVDVElWRV9JTl9QQVJUIl0sCiAgICBtZXNzYWdlOiByIiIiVGhlIHBhcnQtb2YgZGlyZWN0aXZlIG11c3QgYmUgdGhlIG9ubHkgZGlyZWN0aXZlIGluIGEgcGFydC4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgb3RoZXIgZGlyZWN0aXZlcywgb3IgbW92aW5nIHRoZW0gdG8gdGhlIGxpYnJhcnkgZm9yIHdoaWNoIHRoaXMgaXMgYSBwYXJ0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkJvdW5kIG9mIHRoaXMgdmFyaWFibGUgcmVmZXJlbmNlcyByYXcgdHlwZSAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UiLCB0ZW1wbGF0ZU5vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlLAogICAgICBtZXNzYWdlOiAiIiJCb3VuZCBvZiB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZXMgcmF3IHR5cGUgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHZhcmlhYmxlICcjbmFtZScgZnJvbSB0aGUgc2FtZSBkZWNsYXJhdGlvbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUiLCB0ZW1wbGF0ZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHZhcmlhYmxlICcke25hbWV9JyBmcm9tIHRoZSBzYW1lIGRlY2xhcmF0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vdEFDb25zdGFudEV4cHJlc3Npb24gPSBtZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTm90QUNvbnN0YW50RXhwcmVzc2lvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0NPTlNUQU5UX0VYUFJFU1NJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJOb3QgYSBjb25zdGFudCBleHByZXNzaW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbiA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiInI25hbWUuI25hbWUyJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBiZWNhdXNlICcjbmFtZScgZG9lc24ndCByZWZlciB0byBhbiBpbXBvcnQgcHJlZml4LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTm90QVByZWZpeEluVHlwZUFubm90YXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIk5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uIiwgdGVtcGxhdGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0FfVFlQRSJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm90QVByZWZpeEluVHlwZUFubm90YXRpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtuYW1lfS4ke25hbWUyfScgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYmVjYXVzZSAnJHtuYW1lfScgZG9lc24ndCByZWZlciB0byBhbiBpbXBvcnQgcHJlZml4LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVOb3RBVHlwZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpc24ndCBhIHR5cGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTm90QVR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZU5vdEFUeXBlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJOb3RBVHlwZSIsIHRlbXBsYXRlTm90QVR5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9BX1RZUEUiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNOb3RBVHlwZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5vdEFUeXBlLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXNuJ3QgYSB0eXBlLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vdEFUeXBlQ29udGV4dCA9IG1lc3NhZ2VOb3RBVHlwZUNvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTm90QVR5cGVDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoIk5vdEFUeXBlQ29udGV4dCIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwgbWVzc2FnZTogciIiIlRoaXMgaXNuJ3QgYSB0eXBlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb3RBbkx2YWx1ZSA9IG1lc3NhZ2VOb3RBbkx2YWx1ZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb3RBbkx2YWx1ZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJOb3RBbkx2YWx1ZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0FOX0xWQUxVRSJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGFzc2lnbiB0byB0aGlzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVOb3RCaW5hcnlPcGVyYXRvciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNsZXhlbWUnIGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vdEJpbmFyeU9wZXJhdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVOb3RCaW5hcnlPcGVyYXRvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAiTm90QmluYXJ5T3BlcmF0b3IiLAogIHRlbXBsYXRlTm90QmluYXJ5T3BlcmF0b3IsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTm90QmluYXJ5T3BlcmF0b3IoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm90QmluYXJ5T3BlcmF0b3IsCiAgICAgIG1lc3NhZ2U6ICIiIicke2xleGVtZX0nIGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gdGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiI3N0cmluZyBpcyBub3QgYSBjb25zdGFudCBleHByZXNzaW9uLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vdENvbnN0YW50RXhwcmVzc2lvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVOb3RDb25zdGFudEV4cHJlc3Npb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiTm90Q29uc3RhbnRFeHByZXNzaW9uIiwgdGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9DT05TVEFOVF9FWFBSRVNTSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vdENvbnN0YW50RXhwcmVzc2lvbihTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5vdENvbnN0YW50RXhwcmVzc2lvbiwKICAgICAgbWVzc2FnZTogIiIiJHtzdHJpbmd9IGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU9iamVjdEV4dGVuZHMgPSBtZXNzYWdlT2JqZWN0RXh0ZW5kczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VPYmplY3RFeHRlbmRzID0gY29uc3QgTWVzc2FnZUNvZGUoIk9iamVjdEV4dGVuZHMiLAogICAgbWVzc2FnZTogciIiIlRoZSBjbGFzcyAnT2JqZWN0JyBjYW4ndCBoYXZlIGEgc3VwZXJjbGFzcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlT2JqZWN0SW1wbGVtZW50cyA9IG1lc3NhZ2VPYmplY3RJbXBsZW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU9iamVjdEltcGxlbWVudHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJPYmplY3RJbXBsZW1lbnRzIiwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgY2xhc3MgJ09iamVjdCcgY2FuJ3QgaW1wbGVtZW50IGFueXRoaW5nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVPYmplY3RNaXhlc0luID0gbWVzc2FnZU9iamVjdE1peGVzSW47CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlT2JqZWN0TWl4ZXNJbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJPYmplY3RNaXhlc0luIiwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgY2xhc3MgJ09iamVjdCcgY2FuJ3QgdXNlIG1peGlucy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlT25seVRyeSA9IG1lc3NhZ2VPbmx5VHJ5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU9ubHlUcnkgPSBjb25zdCBNZXNzYWdlQ29kZSgiT25seVRyeSIsCiAgICBpbmRleDogMjAsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIHRyeSBibG9jayBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFuICdvbicsICdjYXRjaCcsIG9yICdmaW5hbGx5JyBjbGF1c2UuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgYWRkaW5nIGVpdGhlciBhIGNhdGNoIG9yIGZpbmFsbHkgY2xhdXNlLCBvciByZW1vdmUgdGhlIHRyeSBzdGF0ZW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiT3BlcmF0b3IgJyNuYW1lJyBzaG91bGQgaGF2ZSB6ZXJvIG9yIG9uZSBwYXJhbWV0ZXIuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIldpdGggemVybyBwYXJhbWV0ZXJzLCBpdCBoYXMgdGhlIHN5bnRhY3RpYyBmb3JtICctYScsIGZvcm1hbGx5IGtub3duIGFzICd1bmFyeS0nLiBXaXRoIG9uZSBwYXJhbWV0ZXIsIGl0IGhhcyB0aGUgc3ludGFjdGljIGZvcm0gJ2EgLSBiJywgZm9ybWFsbHkga25vd24gYXMgJy0nLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIk9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaCIsCiAgICAgICAgdGVtcGxhdGVPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2gsIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WwogICJXUk9OR19OVU1CRVJfT0ZfUEFSQU1FVEVSU19GT1JfT1BFUkFUT1JfTUlOVVMiCl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c09wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaCwKICAgICAgbWVzc2FnZTogIiIiT3BlcmF0b3IgJyR7bmFtZX0nIHNob3VsZCBoYXZlIHplcm8gb3Igb25lIHBhcmFtZXRlci4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIldpdGggemVybyBwYXJhbWV0ZXJzLCBpdCBoYXMgdGhlIHN5bnRhY3RpYyBmb3JtICctYScsIGZvcm1hbGx5IGtub3duIGFzICd1bmFyeS0nLiBXaXRoIG9uZSBwYXJhbWV0ZXIsIGl0IGhhcyB0aGUgc3ludGFjdGljIGZvcm0gJ2EgLSBiJywgZm9ybWFsbHkga25vd24gYXMgJy0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiT3BlcmF0b3IgJyNuYW1lJyBzaG91bGRuJ3QgaGF2ZSBhbnkgcGFyYW1ldGVycy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDAgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIk9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwIiwKICB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDAsCiAgICAgIG1lc3NhZ2U6ICIiIk9wZXJhdG9yICcke25hbWV9JyBzaG91bGRuJ3QgaGF2ZSBhbnkgcGFyYW1ldGVycy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIk9wZXJhdG9yICcjbmFtZScgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEiLCB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJXUk9OR19OVU1CRVJfT0ZfUEFSQU1FVEVSU19GT1JfT1BFUkFUT1IiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMSwKICAgICAgbWVzc2FnZTogIiIiT3BlcmF0b3IgJyR7bmFtZX0nIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtZXRlci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIk9wZXJhdG9yICcjbmFtZScgc2hvdWxkIGhhdmUgZXhhY3RseSB0d28gcGFyYW1ldGVycy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyIiwgdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiV1JPTkdfTlVNQkVSX09GX1BBUkFNRVRFUlNfRk9SX09QRVJBVE9SIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDIsCiAgICAgIG1lc3NhZ2U6ICIiIk9wZXJhdG9yICcke25hbWV9JyBzaG91bGQgaGF2ZSBleGFjdGx5IHR3byBwYXJhbWV0ZXJzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU9wZXJhdG9yV2l0aE9wdGlvbmFsRm9ybWFscyA9CiAgICBtZXNzYWdlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU9wZXJhdG9yV2l0aE9wdGlvbmFsRm9ybWFscyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk9wZXJhdG9yV2l0aE9wdGlvbmFsRm9ybWFscyIsCiAgICBtZXNzYWdlOiByIiIiQW4gb3BlcmF0b3IgY2FuJ3QgaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoaXMgaXMgdGhlIG92ZXJyaWRkZW4gbWV0aG9kICgnI25hbWUnKS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZGVuTWV0aG9kQ2F1c2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZU92ZXJyaWRkZW5NZXRob2RDYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiT3ZlcnJpZGRlbk1ldGhvZENhdXNlIiwgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRkZW5NZXRob2RDYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU92ZXJyaWRkZW5NZXRob2RDYXVzZSwKICAgICAgbWVzc2FnZTogIiIiVGhpcyBpcyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QgKCcke25hbWV9JykuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtZXRob2QgJyNuYW1lJyBoYXMgZmV3ZXIgbmFtZWQgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHMiLCB0ZW1wbGF0ZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9PVkVSUklERV9OQU1FRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cyhTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtZXRob2QgJyR7bmFtZX0nIGhhcyBmZXdlciBuYW1lZCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnJHtuYW1lMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbWV0aG9kICcjbmFtZScgaGFzIGZld2VyIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMiLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfT1ZFUlJJREVfUE9TSVRJT05BTCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlRmV3ZXJQb3NpdGlvbmFsQXJndW1lbnRzKAogICAgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtZXRob2QgJyR7bmFtZX0nIGhhcyBmZXdlciBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcgbmFtZTIsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUzKT4gdGVtcGxhdGVPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbWV0aG9kICcjbmFtZScgZG9lc24ndCBoYXZlIHRoZSBuYW1lZCBwYXJhbWV0ZXIgJyNuYW1lMicgb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMycuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMyk+CiAgICBjb2RlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyLCBTdHJpbmcgbmFtZTMpPigKICAgICAgICAiT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyIiwKICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9PVkVSUklERV9OQU1FRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlcigKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgaWYgKG5hbWUzLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMyA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTMpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIG1ldGhvZCAnJHtuYW1lfScgZG9lc24ndCBoYXZlIHRoZSBuYW1lZCBwYXJhbWV0ZXIgJyR7bmFtZTJ9JyBvZiBvdmVycmlkZGVuIG1ldGhvZCAnJHtuYW1lM30nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMiwgJ25hbWUzJzogbmFtZTN9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG1ldGhvZCAnI25hbWUnIGhhcyBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcjbmFtZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZU92ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIk92ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzIiwgdGVtcGxhdGVPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50cywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9PVkVSUklERV9SRVFVSVJFRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbWV0aG9kICcke25hbWV9JyBoYXMgbW9yZSByZXF1aXJlZCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnJHtuYW1lMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nIG5hbWUyLAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTMpPiB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIFN0cmluZyBuYW1lMiwKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICAgICAgU3RyaW5nCiAgICAgICAgICAgICAgICBuYW1lMyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgcGFyYW1ldGVyICcjbmFtZScgb2YgdGhlIG1ldGhvZCAnI25hbWUyJyBoYXMgdHlwZSAnI3R5cGUnLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyB0eXBlLCAnI3R5cGUyJywgaW4gdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnI25hbWUzJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRvIGEgc3VwZXJ0eXBlIG9mICcjdHlwZTInLCBvciwgZm9yIGEgY292YXJpYW50IHBhcmFtZXRlciwgYSBzdWJ0eXBlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lMyk+IGNvZGVPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlciA9CiAgICBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZTMpPigKICAgICAgICAiT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXIiLCB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX01FVEhPRF9PVkVSUklERSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlcigKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lMykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIGlmIChuYW1lMy5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTMgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUzKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBwYXJhbWV0ZXIgJyR7bmFtZX0nIG9mIHRoZSBtZXRob2QgJyR7bmFtZTJ9JyBoYXMgdHlwZSAnJHt0eXBlfScsIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUsICcke3R5cGUyfScsIGluIHRoZSBvdmVycmlkZGVuIG1ldGhvZCwgJyR7bmFtZTN9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRvIGEgc3VwZXJ0eXBlIG9mICcke3R5cGUyfScsIG9yLCBmb3IgYSBjb3ZhcmlhbnQgcGFyYW1ldGVyLCBhIHN1YnR5cGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ25hbWUyJzogbmFtZTIsCiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUzJzogbmFtZTMKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSByZXR1cm4gdHlwZSBvZiB0aGUgbWV0aG9kICcjbmFtZScgaXMgJyN0eXBlJywgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIHJldHVybiB0eXBlLCAnI3R5cGUyJywgb2YgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZTogciIiIkNoYW5nZSB0byBhIHN1YnR5cGUgb2YgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUiLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX01FVEhPRF9PVkVSUklERSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUoCiAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHJldHVybiB0eXBlIG9mIHRoZSBtZXRob2QgJyR7bmFtZX0nIGlzICcke3R5cGV9Jywgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIHJldHVybiB0eXBlLCAnJHt0eXBlMn0nLCBvZiB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsICcke25hbWUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0byBhIHN1YnR5cGUgb2YgJyR7dHlwZTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMiwKICAgICAgICAnbmFtZTInOiBuYW1lMgogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRGVjbGFyZWQgdHlwZSB2YXJpYWJsZXMgb2YgJyNuYW1lJyBkb2Vzbid0IG1hdGNoIHRob3NlIG9uIG92ZXJyaWRkZW4gbWV0aG9kICcjbmFtZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZU92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIk92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoIiwgdGVtcGxhdGVPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9NRVRIT0RfT1ZFUlJJREVfVFlQRV9QQVJBTUVURVJTIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2goU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkRlY2xhcmVkIHR5cGUgdmFyaWFibGVzIG9mICcke25hbWV9JyBkb2Vzbid0IG1hdGNoIHRob3NlIG9uIG92ZXJyaWRkZW4gbWV0aG9kICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4gdGVtcGxhdGVQYWNrYWdlTm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgcGFja2FnZSAnI25hbWUnIGluICcjdXJpJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYWNrYWdlTm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+IGNvZGVQYWNrYWdlTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICJQYWNrYWdlTm90Rm91bmQiLAogIHRlbXBsYXRlUGFja2FnZU5vdEZvdW5kLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhY2thZ2VOb3RGb3VuZChTdHJpbmcgbmFtZSwgVXJpIHVyaV8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYWNrYWdlTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIkNvdWxkIG5vdCByZXNvbHZlIHRoZSBwYWNrYWdlICcke25hbWV9JyBpbiAnJHt1cml9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gdGVtcGxhdGVQYWNrYWdlc0ZpbGVGb3JtYXQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiUHJvYmxlbSBpbiBwYWNrYWdlcyBjb25maWd1cmF0aW9uIGZpbGU6ICNzdHJpbmciIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYWNrYWdlc0ZpbGVGb3JtYXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlUGFja2FnZXNGaWxlRm9ybWF0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgIlBhY2thZ2VzRmlsZUZvcm1hdCIsCiAgdGVtcGxhdGVQYWNrYWdlc0ZpbGVGb3JtYXQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUGFja2FnZXNGaWxlRm9ybWF0KFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUGFja2FnZXNGaWxlRm9ybWF0LAogICAgICBtZXNzYWdlOiAiIiJQcm9ibGVtIGluIHBhY2thZ2VzIGNvbmZpZ3VyYXRpb24gZmlsZTogJHtzdHJpbmd9IiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhcnRFeHBvcnQgPSBtZXNzYWdlUGFydEV4cG9ydDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXJ0RXhwb3J0ID0gY29uc3QgTWVzc2FnZUNvZGUoIlBhcnRFeHBvcnQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUE9SVF9PRl9OT05fTElCUkFSWSJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ2FuJ3QgZXhwb3J0IHRoaXMgZmlsZSBiZWNhdXNlIGl0IGNvbnRhaW5zIGEgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0RXhwb3J0Q29udGV4dCA9IG1lc3NhZ2VQYXJ0RXhwb3J0Q29udGV4dDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXJ0RXhwb3J0Q29udGV4dCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBhcnRFeHBvcnRDb250ZXh0IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIGZpbGUgdGhhdCBjYW4ndCBiZSBleHBvcnRlZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydEluUGFydCA9IG1lc3NhZ2VQYXJ0SW5QYXJ0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRJblBhcnQgPSBjb25zdCBNZXNzYWdlQ29kZSgiUGFydEluUGFydCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9OX1BBUlRfT0ZfRElSRUNUSVZFX0lOX1BBUlQiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIGZpbGUgdGhhdCdzIGEgcGFydCBvZiBhIGxpYnJhcnkgY2FuJ3QgaGF2ZSBwYXJ0cyBpdHNlbGYuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgJ3BhcnQnIGRlY2xhcmF0aW9uIHRvIHRoZSBjb250YWluaW5nIGxpYnJhcnkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhcnRJblBhcnRMaWJyYXJ5Q29udGV4dCA9IG1lc3NhZ2VQYXJ0SW5QYXJ0TGlicmFyeUNvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGFydEluUGFydExpYnJhcnlDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUGFydEluUGFydExpYnJhcnlDb250ZXh0IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIGNvbnRhaW5pbmcgbGlicmFyeS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVQYXJ0T2ZJbkxpYnJhcnkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IGltcG9ydCAnI3VyaScsIGJlY2F1c2UgaXQgaGFzIGEgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiwgb3IgdXNpbmcgJyN1cmknIGFzIGEgcGFydC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhcnRPZkluTGlicmFyeSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlUGFydE9mSW5MaWJyYXJ5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgICJQYXJ0T2ZJbkxpYnJhcnkiLCB0ZW1wbGF0ZVBhcnRPZkluTGlicmFyeSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU1QT1JUX09GX05PTl9MSUJSQVJZIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRPZkluTGlicmFyeShVcmkgdXJpXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUGFydE9mSW5MaWJyYXJ5LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgaW1wb3J0ICcke3VyaX0nLCBiZWNhdXNlIGl0IGhhcyBhICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSByZW1vdmluZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLCBvciB1c2luZyAnJHt1cml9JyBhcyBhIHBhcnQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgVXJpIHVyaV8sCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJVc2luZyAnI3VyaScgYXMgcGFydCBvZiAnI25hbWUnIGJ1dCBpdHMgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHNheXMgJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaCIsIHRlbXBsYXRlUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUEFSVF9PRl9ESUZGRVJFTlRfTElCUkFSWSJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2goCiAgICBVcmkgdXJpXywgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVXNpbmcgJyR7dXJpfScgYXMgcGFydCBvZiAnJHtuYW1lfScgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnJHtuYW1lMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV8sICduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydE9mU2VsZiA9IG1lc3NhZ2VQYXJ0T2ZTZWxmOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRPZlNlbGYgPSBjb25zdCBNZXNzYWdlQ29kZSgiUGFydE9mU2VsZiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUEFSVF9PRl9OT05fUEFSVCJdLAogICAgbWVzc2FnZTogciIiIkEgZmlsZSBjYW4ndCBiZSBhIHBhcnQgb2YgaXRzZWxmLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0T2ZUd2ljZSA9IG1lc3NhZ2VQYXJ0T2ZUd2ljZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXJ0T2ZUd2ljZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJQYXJ0T2ZUd2ljZSIsCiAgICBpbmRleDogMjUsCiAgICBtZXNzYWdlOiByIiIiT25seSBvbmUgcGFydC1vZiBkaXJlY3RpdmUgbWF5IGJlIGRlY2xhcmVkIGluIGEgZmlsZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgb2YgdGhlIHBhcnQtb2YgZGlyZWN0aXZlcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydE9mVHdvTGlicmFyaWVzID0gbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXJ0T2ZUd29MaWJyYXJpZXMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlBBUlRfT0ZfRElGRkVSRU5UX0xJQlJBUlkiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIGZpbGUgY2FuJ3QgYmUgcGFydCBvZiBtb3JlIHRoYW4gb25lIGxpYnJhcnkuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgbW92aW5nIHRoZSBzaGFyZWQgZGVjbGFyYXRpb25zIGludG8gdGhlIGxpYnJhcmllcywgb3IgaW50byBhIG5ldyBsaWJyYXJ5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0ID0KICAgIG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlVzZWQgYXMgYSBwYXJ0IGluIHRoaXMgbGlicmFyeS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFVyaSB1cmlfLAogICAgICAgIFVyaSB1cmkyXywKICAgICAgICBVcmkKICAgICAgICAgICAgdXJpM18pPiB0ZW1wbGF0ZVBhcnRPZlVyaU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgVXJpIHVyaTJfLCBVcmkgdXJpM18pPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVXNpbmcgJyN1cmknIGFzIHBhcnQgb2YgJyN1cmkyJyBidXQgaXRzICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiBzYXlzICcjdXJpMycuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYXJ0T2ZVcmlNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFVyaSB1cmkyXywgVXJpIHVyaTNfKT4KICAgIGNvZGVQYXJ0T2ZVcmlNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFVyaSB1cmkyXywgVXJpIHVyaTNfKT4oCiAgICAgICAgIlBhcnRPZlVyaU1pc21hdGNoIiwgdGVtcGxhdGVQYXJ0T2ZVcmlNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUEFSVF9PRl9ESUZGRVJFTlRfTElCUkFSWSJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRPZlVyaU1pc21hdGNoKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFVyaSB1cmkzXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgU3RyaW5nIHVyaTMgPSByZWxhdGl2aXplVXJpKHVyaTNfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVBhcnRPZlVyaU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVXNpbmcgJyR7dXJpfScgYXMgcGFydCBvZiAnJHt1cmkyfScgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnJHt1cmkzfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpXywgJ3VyaTInOiB1cmkyXywgJ3VyaTMnOiB1cmkzX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgVXJpIHVyaV8sCiAgICAgICAgVXJpIHVyaTJfLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVQYXJ0T2ZVc2VVcmkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlVzaW5nICcjdXJpJyBhcyBwYXJ0IG9mICcjdXJpMicgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnI25hbWUnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY2hhbmdpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiB0byB1c2UgYSByZWxhdGl2ZSBmaWxlIG5hbWUuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYXJ0T2ZVc2VVcmkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFN0cmluZyBuYW1lKT4KICAgIGNvZGVQYXJ0T2ZVc2VVcmkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlBhcnRPZlVzZVVyaSIsIHRlbXBsYXRlUGFydE9mVXNlVXJpLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQQVJUX09GX1VOTkFNRURfTElCUkFSWSJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRPZlVzZVVyaShVcmkgdXJpXywgVXJpIHVyaTJfLCBTdHJpbmcgbmFtZSkgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUGFydE9mVXNlVXJpLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVXNpbmcgJyR7dXJpfScgYXMgcGFydCBvZiAnJHt1cmkyfScgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnJHtuYW1lfScuIiIiLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHRvIHVzZSBhIHJlbGF0aXZlIGZpbGUgbmFtZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJfLCAnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydE9ycGhhbiA9IG1lc3NhZ2VQYXJ0T3JwaGFuOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRPcnBoYW4gPSBjb25zdCBNZXNzYWdlQ29kZSgiUGFydE9ycGhhbiIsCiAgICBtZXNzYWdlOiByIiIiVGhpcyBwYXJ0IGRvZXNuJ3QgaGF2ZSBhIGNvbnRhaW5pbmcgbGlicmFyeS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IHRlbXBsYXRlUGFydFR3aWNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCB1c2UgJyN1cmknIGFzIGEgcGFydCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYXJ0VHdpY2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gY29kZVBhcnRUd2ljZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigiUGFydFR3aWNlIiwgdGVtcGxhdGVQYXJ0VHdpY2UsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkRVUExJQ0FURV9QQVJUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRUd2ljZShVcmkgdXJpXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUGFydFR3aWNlLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCB1c2UgJyR7dXJpfScgYXMgYSBwYXJ0IG1vcmUgdGhhbiBvbmNlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGF0Y2hDbGFzc09yaWdpbiA9IG1lc3NhZ2VQYXRjaENsYXNzT3JpZ2luOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhdGNoQ2xhc3NPcmlnaW4gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXRjaENsYXNzT3JpZ2luIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIG9yaWdpbiBjbGFzcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaCA9CiAgICBtZXNzYWdlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXRjaENsYXNzVHlwZVZhcmlhYmxlc01pc21hdGNoID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaCIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIHBhdGNoIGNsYXNzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgdHlwZSB2YXJpYWJsZXMgYXMgaXRzIG9yaWdpbiBjbGFzcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoID0gbWVzc2FnZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2ggPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2giLAogICAgbWVzc2FnZTogciIiIlRoaXMgcGF0Y2ggZG9lc24ndCBtYXRjaCBvcmlnaW4gZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhdGNoRGVjbGFyYXRpb25PcmlnaW4gPSBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2luID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbiIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGlzIHRoZSBvcmlnaW4gZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4KICAgIHRlbXBsYXRlUGF0Y2hJbmplY3Rpb25GYWlsZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCBpbmplY3QgJyNuYW1lJyBpbnRvICcjdXJpJy4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgYWRkaW5nICdAcGF0Y2gnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhdGNoSW5qZWN0aW9uRmFpbGVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPiBjb2RlUGF0Y2hJbmplY3Rpb25GYWlsZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICJQYXRjaEluamVjdGlvbkZhaWxlZCIsCiAgdGVtcGxhdGVQYXRjaEluamVjdGlvbkZhaWxlZCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNQYXRjaEluamVjdGlvbkZhaWxlZChTdHJpbmcgbmFtZSwgVXJpIHVyaV8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYXRjaEluamVjdGlvbkZhaWxlZCwKICAgICAgbWVzc2FnZTogIiIiQ2FuJ3QgaW5qZWN0ICcke25hbWV9JyBpbnRvICcke3VyaX0nLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgYWRkaW5nICdAcGF0Y2gnLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXRjaE5vbkV4dGVybmFsID0gbWVzc2FnZVBhdGNoTm9uRXh0ZXJuYWw7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGF0Y2hOb25FeHRlcm5hbCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBhdGNoTm9uRXh0ZXJuYWwiLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ2FuJ3QgYXBwbHkgdGhpcyBwYXRjaCBhcyBpdHMgb3JpZ2luIGRlY2xhcmF0aW9uIGlzbid0IGV4dGVybmFsLiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgJ2V4dGVybmFsJyB0byB0aGUgb3JpZ2luIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzID0KICAgIG1lc3NhZ2VQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTVBPUlRfSU5URVJOQUxfTElCUkFSWSJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGFjY2VzcyBwbGF0Zm9ybSBwcml2YXRlIGxpYnJhcnkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBvc2l0aW9uYWxBZnRlck5hbWVkQXJndW1lbnQgPQogICAgbWVzc2FnZVBvc2l0aW9uYWxBZnRlck5hbWVkQXJndW1lbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUG9zaXRpb25hbEFmdGVyTmFtZWRBcmd1bWVudCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBvc2l0aW9uYWxBZnRlck5hbWVkQXJndW1lbnQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlBPU0lUSU9OQUxfQUZURVJfTkFNRURfQVJHVU1FTlQiXSwKICAgIG1lc3NhZ2U6IHIiIiJQbGFjZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgbmFtZWQgYXJndW1lbnRzLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IG1vdmluZyB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBiZWZvcmUgdGhlIG5hbWVkIGFyZ3VtZW50cywgb3IgYWRkIGEgbmFtZSB0byB0aGUgYXJndW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzID0KICAgIG1lc3NhZ2VQb3NpdGlvbmFsUGFyYW1ldGVyV2l0aEVxdWFsczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQb3NpdGlvbmFsUGFyYW1ldGVyV2l0aEVxdWFscyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJXUk9OR19TRVBBUkFUT1JfRk9SX1BPU0lUSU9OQUxfUEFSQU1FVEVSIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJQb3NpdGlvbmFsIG9wdGlvbmFsIHBhcmFtZXRlcnMgY2FuJ3QgdXNlICc6JyB0byBzcGVjaWZ5IGEgZGVmYXVsdCB2YWx1ZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVwbGFjaW5nICc6JyB3aXRoICc9Jy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUHJlZml4QWZ0ZXJDb21iaW5hdG9yID0gbWVzc2FnZVByZWZpeEFmdGVyQ29tYmluYXRvcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQcmVmaXhBZnRlckNvbWJpbmF0b3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQcmVmaXhBZnRlckNvbWJpbmF0b3IiLAogICAgaW5kZXg6IDYsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgcHJlZml4ICgnYXMnIGNsYXVzZSkgc2hvdWxkIGNvbWUgYmVmb3JlIGFueSBzaG93L2hpZGUgY29tYmluYXRvcnMuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgcHJlZml4IGJlZm9yZSB0aGUgY29tYmluYXRvcnMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVByaXZhdGVOYW1lZFBhcmFtZXRlciA9IG1lc3NhZ2VQcml2YXRlTmFtZWRQYXJhbWV0ZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUHJpdmF0ZU5hbWVkUGFyYW1ldGVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUHJpdmF0ZU5hbWVkUGFyYW1ldGVyIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQUklWQVRFX09QVElPTkFMX1BBUkFNRVRFUiJdLAogICAgbWVzc2FnZTogciIiIkFuIG9wdGlvbmFsIG5hbWVkIHBhcmFtZXRlciBjYW4ndCBzdGFydCB3aXRoICdfJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcldpdGhCb2R5ID0KICAgIG1lc3NhZ2VSZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcldpdGhCb2R5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcldpdGhCb2R5IiwKICAgIGluZGV4OiAyMiwKICAgIG1lc3NhZ2U6IHIiIiJSZWRpcmVjdGluZyBjb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIGJvZHkuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGJvZHksIG9yIG5vdCBtYWtpbmcgdGhpcyBhIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgdGVtcGxhdGVSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlIHR5cGUgJyN0eXBlJyBkb2Vzbid0IGV4dGVuZCAnI3R5cGUyJy4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgdXNpbmcgYSBkaWZmZXJlbnQgdHlwZSBhcyBhcmd1bWVudC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czoKICAgICAgICAgICAgX3dpdGhBcmd1bWVudHNSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZVJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQiLAogICAgICAgIHRlbXBsYXRlUmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX0FSR1VNRU5UX05PVF9NQVRDSElOR19CT1VORFMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50KAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSB0eXBlICcke3R5cGV9JyBkb2Vzbid0IGV4dGVuZCAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSB1c2luZyBhIGRpZmZlcmVudCB0eXBlIGFzIGFyZ3VtZW50LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5ID0gbWVzc2FnZVJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmVkaXJlY3Rpb25Jbk5vbkZhY3RvcnkiLAogICAgaW5kZXg6IDIxLAogICAgbWVzc2FnZTogciIiIk9ubHkgZmFjdG9yeSBjb25zdHJ1Y3RvciBjYW4gc3BlY2lmeSAnPScgcmVkaXJlY3Rpb24uIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgbWFraW5nIHRoaXMgYSBmYWN0b3J5IGNvbnN0cnVjdG9yLCBvciByZW1vdmUgdGhlIHJlZGlyZWN0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiUmVkaXJlY3Rpb24gY29uc3RydWN0b3IgdGFyZ2V0IG5vdCBmb3VuZDogJyNuYW1lJyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1JlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQiLCB0ZW1wbGF0ZVJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFRElSRUNUX1RPX01JU1NJTkdfQ09OU1RSVUNUT1IiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiUmVkaXJlY3Rpb24gY29uc3RydWN0b3IgdGFyZ2V0IG5vdCBmb3VuZDogJyR7bmFtZX0nIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdCA9CiAgICBtZXNzYWdlUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VSZXF1aXJlZFBhcmFtZXRlcldpdGhEZWZhdWx0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTkFNRURfUEFSQU1FVEVSX09VVFNJREVfR1JPVVAiXSwKICAgIG1lc3NhZ2U6IHIiIiJOb24tb3B0aW9uYWwgcGFyYW1ldGVycyBjYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgZGVmYXVsdCB2YWx1ZSBvciBtYWtpbmcgdGhlIHBhcmFtZXRlciBvcHRpb25hbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmV0aHJvd05vdENhdGNoID0gbWVzc2FnZVJldGhyb3dOb3RDYXRjaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VSZXRocm93Tm90Q2F0Y2ggPSBjb25zdCBNZXNzYWdlQ29kZSgiUmV0aHJvd05vdENhdGNoIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRVRIUk9XX09VVFNJREVfQ0FUQ0giXSwKICAgIG1lc3NhZ2U6IHIiIiIncmV0aHJvdycgY2FuIG9ubHkgYmUgdXNlZCBpbiBjYXRjaCBjbGF1c2VzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVSZXR1cm5Gcm9tVm9pZEZ1bmN0aW9uID0gbWVzc2FnZVJldHVybkZyb21Wb2lkRnVuY3Rpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUmV0dXJuRnJvbVZvaWRGdW5jdGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlJldHVybkZyb21Wb2lkRnVuY3Rpb24iLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFVFVSTl9PRl9JTlZBTElEX1RZUEUiXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgdm9pZCBmdW5jdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmV0dXJuVHlwZUZ1bmN0aW9uRXhwcmVzc2lvbiA9CiAgICBtZXNzYWdlUmV0dXJuVHlwZUZ1bmN0aW9uRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VSZXR1cm5UeXBlRnVuY3Rpb25FeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmV0dXJuVHlwZUZ1bmN0aW9uRXhwcmVzc2lvbiIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIkEgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYW4ndCBoYXZlIGEgcmV0dXJuIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVJldHVybldpdGhvdXRFeHByZXNzaW9uID0gbWVzc2FnZVJldHVybldpdGhvdXRFeHByZXNzaW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVJldHVybldpdGhvdXRFeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmV0dXJuV2l0aG91dEV4cHJlc3Npb24iLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFVFVSTl9XSVRIT1VUX1ZBTFVFIl0sCiAgICBzZXZlcml0eTogU2V2ZXJpdHkud2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiJNdXN0IGV4cGxpY2l0bHkgcmV0dXJuIGEgdmFsdWUgZnJvbSBhIG5vbi12b2lkIGZ1bmN0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVTZGtSb290Tm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlNESyByb290IGRpcmVjdG9yeSBub3QgZm91bmQ6ICN1cmkuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU2RrUm9vdE5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVTZGtSb290Tm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgIlNka1Jvb3ROb3RGb3VuZCIsCiAgdGVtcGxhdGVTZGtSb290Tm90Rm91bmQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU2RrUm9vdE5vdEZvdW5kKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTZGtSb290Tm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIlNESyByb290IGRpcmVjdG9yeSBub3QgZm91bmQ6ICR7dXJpfS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBVcmkKICAgICAgICAgICAgdXJpXyk+IHRlbXBsYXRlU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU0RLIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIG5vdCBmb3VuZDogI3VyaS4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiTm9ybWFsbHksIHRoZSBzcGVjaWZpY2F0aW9uIGlzIGEgZmlsZSBuYW1lZCAnbGlicmFyaWVzLmpzb24nIGluIHRoZSBEYXJ0IFNESyBpbnN0YWxsIGxvY2F0aW9uLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgIlNka1NwZWNpZmljYXRpb25Ob3RGb3VuZCIsCiAgdGVtcGxhdGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIlNESyBsaWJyYXJpZXMgc3BlY2lmaWNhdGlvbiBub3QgZm91bmQ6ICR7dXJpfS4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIk5vcm1hbGx5LCB0aGUgc3BlY2lmaWNhdGlvbiBpcyBhIGZpbGUgbmFtZWQgJ2xpYnJhcmllcy5qc29uJyBpbiB0aGUgRGFydCBTREsgaW5zdGFsbCBsb2NhdGlvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiB0ZW1wbGF0ZVNka1N1bW1hcnlOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU0RLIHN1bW1hcnkgbm90IGZvdW5kOiAjdXJpLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1Nka1N1bW1hcnlOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlU2RrU3VtbWFyeU5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICJTZGtTdW1tYXJ5Tm90Rm91bmQiLAogIHRlbXBsYXRlU2RrU3VtbWFyeU5vdEZvdW5kLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1Nka1N1bW1hcnlOb3RGb3VuZChVcmkgdXJpXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU2RrU3VtbWFyeU5vdEZvdW5kLAogICAgICBtZXNzYWdlOiAiIiJTREsgc3VtbWFyeSBub3QgZm91bmQ6ICR7dXJpfS4iIiIsIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVNldExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cyA9CiAgICBtZXNzYWdlU2V0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVNldExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlNldExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cyIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIkEgc2V0IGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHlwZSBhcmd1bWVudC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMgPQogICAgbWVzc2FnZVNldE9yTWFwTGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVNldE9yTWFwTGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkEgc2V0IG9yIG1hcCBsaXRlcmFsIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9yIHR3byB0eXBlIGFyZ3VtZW50cywgcmVzcGVjdGl2ZWx5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVTZXR0ZXJOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU2V0dGVyIG5vdCBmb3VuZDogJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTZXR0ZXJOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU2V0dGVyTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlNldHRlck5vdEZvdW5kIiwgdGVtcGxhdGVTZXR0ZXJOb3RGb3VuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX1NFVFRFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1NldHRlck5vdEZvdW5kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU2V0dGVyTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIlNldHRlciBub3QgZm91bmQ6ICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTZXR0ZXJOb3RTeW5jID0gbWVzc2FnZVNldHRlck5vdFN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU2V0dGVyTm90U3luYyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJTZXR0ZXJOb3RTeW5jIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX01PRElGSUVSX09OX1NFVFRFUiJdLAogICAgbWVzc2FnZTogciIiIlNldHRlcnMgY2FuJ3QgdXNlICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHMgPQogICAgbWVzc2FnZVNldHRlcldpdGhXcm9uZ051bWJlck9mRm9ybWFsczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIldST05HX05VTUJFUl9PRl9QQVJBTUVURVJTX0ZPUl9TRVRURVIiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIHNldHRlciBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBmb3JtYWwgcGFyYW1ldGVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgaW50IGNvdW50LAogICAgICAgIGludCBjb3VudDIsCiAgICAgICAgbnVtIF9udW0xLAogICAgICAgIG51bSBfbnVtMiwKICAgICAgICBudW0KICAgICAgICAgICAgX251bTMpPiB0ZW1wbGF0ZVNvdXJjZUJvZHlTdW1tYXJ5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgY291bnQyLCBudW0gX251bTEsIG51bSBfbnVtMiwgbnVtIF9udW0zKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkJ1aWx0IGJvZGllcyBmb3IgI2NvdW50IGNvbXBpbGF0aW9uIHVuaXRzICgjY291bnQyIGJ5dGVzKSBpbiAjbnVtMSUuM21zLCB0aGF0IGlzLAojbnVtMiUxMi4zIGJ5dGVzL21zLCBhbmQKI251bTMlMTIuMyBtcy9jb21waWxhdGlvbiB1bml0LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU291cmNlQm9keVN1bW1hcnkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyLCBudW0gX251bTEsIG51bSBfbnVtMiwKICAgICAgICBudW0gX251bTMpPiBjb2RlU291cmNlQm9keVN1bW1hcnkgPSBjb25zdCBDb2RlPAogICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpPigKICAiU291cmNlQm9keVN1bW1hcnkiLAogIHRlbXBsYXRlU291cmNlQm9keVN1bW1hcnksCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU291cmNlQm9keVN1bW1hcnkoCiAgICBpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoY291bnQyID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgaWYgKF9udW0xID09IG51bGwpIHRocm93ICdObyBudW1iZXIgcHJvdmlkZWQnOwogIFN0cmluZyBudW0xID0gX251bTEudG9TdHJpbmdBc0ZpeGVkKDMpOwogIGlmIChfbnVtMiA9PSBudWxsKSB0aHJvdyAnTm8gbnVtYmVyIHByb3ZpZGVkJzsKICBTdHJpbmcgbnVtMiA9IF9udW0yLnRvU3RyaW5nQXNGaXhlZCgzKS5wYWRMZWZ0KDEyKTsKICBpZiAoX251bTMgPT0gbnVsbCkgdGhyb3cgJ05vIG51bWJlciBwcm92aWRlZCc7CiAgU3RyaW5nIG51bTMgPSBfbnVtMy50b1N0cmluZ0FzRml4ZWQoMykucGFkTGVmdCgxMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTb3VyY2VCb2R5U3VtbWFyeSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkJ1aWx0IGJvZGllcyBmb3IgJHtjb3VudH0gY29tcGlsYXRpb24gdW5pdHMgKCR7Y291bnQyfSBieXRlcykgaW4gJHtudW0xfW1zLCB0aGF0IGlzLAoke251bTJ9IGJ5dGVzL21zLCBhbmQKJHtudW0zfSBtcy9jb21waWxhdGlvbiB1bml0LiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ2NvdW50JzogY291bnQsCiAgICAgICAgJ2NvdW50Mic6IGNvdW50MiwKICAgICAgICAnbnVtMSc6IF9udW0xLAogICAgICAgICdudW0yJzogX251bTIsCiAgICAgICAgJ251bTMnOiBfbnVtMwogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIGludCBjb3VudCwKICAgICAgICBpbnQgY291bnQyLAogICAgICAgIG51bSBfbnVtMSwKICAgICAgICBudW0gX251bTIsCiAgICAgICAgbnVtCiAgICAgICAgICAgIF9udW0zKT4gdGVtcGxhdGVTb3VyY2VPdXRsaW5lU3VtbWFyeSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJCdWlsdCBvdXRsaW5lcyBmb3IgI2NvdW50IGNvbXBpbGF0aW9uIHVuaXRzICgjY291bnQyIGJ5dGVzKSBpbiAjbnVtMSUuM21zLCB0aGF0IGlzLAojbnVtMiUxMi4zIGJ5dGVzL21zLCBhbmQKI251bTMlMTIuMyBtcy9jb21waWxhdGlvbiB1bml0LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU291cmNlT3V0bGluZVN1bW1hcnkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyLCBudW0gX251bTEsIG51bSBfbnVtMiwKICAgICAgICBudW0gX251bTMpPiBjb2RlU291cmNlT3V0bGluZVN1bW1hcnkgPSBjb25zdCBDb2RlPAogICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpPigKICAiU291cmNlT3V0bGluZVN1bW1hcnkiLAogIHRlbXBsYXRlU291cmNlT3V0bGluZVN1bW1hcnksCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU291cmNlT3V0bGluZVN1bW1hcnkoCiAgICBpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoY291bnQyID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgaWYgKF9udW0xID09IG51bGwpIHRocm93ICdObyBudW1iZXIgcHJvdmlkZWQnOwogIFN0cmluZyBudW0xID0gX251bTEudG9TdHJpbmdBc0ZpeGVkKDMpOwogIGlmIChfbnVtMiA9PSBudWxsKSB0aHJvdyAnTm8gbnVtYmVyIHByb3ZpZGVkJzsKICBTdHJpbmcgbnVtMiA9IF9udW0yLnRvU3RyaW5nQXNGaXhlZCgzKS5wYWRMZWZ0KDEyKTsKICBpZiAoX251bTMgPT0gbnVsbCkgdGhyb3cgJ05vIG51bWJlciBwcm92aWRlZCc7CiAgU3RyaW5nIG51bTMgPSBfbnVtMy50b1N0cmluZ0FzRml4ZWQoMykucGFkTGVmdCgxMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTb3VyY2VPdXRsaW5lU3VtbWFyeSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkJ1aWx0IG91dGxpbmVzIGZvciAke2NvdW50fSBjb21waWxhdGlvbiB1bml0cyAoJHtjb3VudDJ9IGJ5dGVzKSBpbiAke251bTF9bXMsIHRoYXQgaXMsCiR7bnVtMn0gYnl0ZXMvbXMsIGFuZAoke251bTN9IG1zL2NvbXBpbGF0aW9uIHVuaXQuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAnY291bnQnOiBjb3VudCwKICAgICAgICAnY291bnQyJzogY291bnQyLAogICAgICAgICdudW0xJzogX251bTEsCiAgICAgICAgJ251bTInOiBfbnVtMiwKICAgICAgICAnbnVtMyc6IF9udW0zCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTcHJlYWRFbGVtZW50ID0gbWVzc2FnZVNwcmVhZEVsZW1lbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3ByZWFkRWxlbWVudCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJTcHJlYWRFbGVtZW50IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LCBtZXNzYWdlOiByIiIiSXRlcmFibGUgc3ByZWFkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IGFzc2lnbiBzcHJlYWQgZWxlbWVudHMgb2YgdHlwZSAnI3R5cGUnIHRvIGNvbGxlY3Rpb24gZWxlbWVudHMgb2YgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1NwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZVNwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCIsIHRlbXBsYXRlU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTElTVF9FTEVNRU5UX1RZUEVfTk9UX0FTU0lHTkFCTEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGFzc2lnbiBzcHJlYWQgZWxlbWVudHMgb2YgdHlwZSAnJHt0eXBlfScgdG8gY29sbGVjdGlvbiBlbGVtZW50cyBvZiB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3ByZWFkTWFwRWxlbWVudCA9IG1lc3NhZ2VTcHJlYWRNYXBFbGVtZW50OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVNwcmVhZE1hcEVsZW1lbnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTcHJlYWRNYXBFbGVtZW50IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIk1hcCBzcHJlYWQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW4ndCBhc3NpZ24gc3ByZWFkIGVudHJ5IGtleXMgb2YgdHlwZSAnI3R5cGUnIHRvIG1hcCBlbnRyeSBrZXlzIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZVNwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2giLAogICAgICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNQVBfS0VZX1RZUEVfTk9UX0FTU0lHTkFCTEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBhc3NpZ24gc3ByZWFkIGVudHJ5IGtleXMgb2YgdHlwZSAnJHt0eXBlfScgdG8gbWFwIGVudHJ5IGtleXMgb2YgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGFzc2lnbiBzcHJlYWQgZW50cnkgdmFsdWVzIG9mIHR5cGUgJyN0eXBlJyB0byBtYXAgZW50cnkgdmFsdWVzIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZVNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIlNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoIiwKICAgICAgICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNQVBfVkFMVUVfVFlQRV9OT1RfQVNTSUdOQUJMRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaCgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBhc3NpZ24gc3ByZWFkIGVudHJ5IHZhbHVlcyBvZiB0eXBlICcke3R5cGV9JyB0byBtYXAgZW50cnkgdmFsdWVzIG9mIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJVbmV4cGVjdGVkIHR5cGUgJyN0eXBlJyBvZiBhIG1hcCBzcHJlYWQgZW50cnkuICBFeHBlY3RlZCAnZHluYW1pYycgb3IgYSBNYXAuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeVR5cGVNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPiBjb2RlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgIlNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoIiwKICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1NwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoKERhcnRUeXBlIF90eXBlKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJVbmV4cGVjdGVkIHR5cGUgJyR7dHlwZX0nIG9mIGEgbWFwIHNwcmVhZCBlbnRyeS4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhIE1hcC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVTcHJlYWRUeXBlTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlVuZXhwZWN0ZWQgdHlwZSAnI3R5cGUnIG9mIGEgc3ByZWFkLiAgRXhwZWN0ZWQgJ2R5bmFtaWMnIG9yIGFuIEl0ZXJhYmxlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3ByZWFkVHlwZU1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+IGNvZGVTcHJlYWRUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgIlNwcmVhZFR5cGVNaXNtYXRjaCIsCiAgdGVtcGxhdGVTcHJlYWRUeXBlTWlzbWF0Y2gsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3ByZWFkVHlwZU1pc21hdGNoKERhcnRUeXBlIF90eXBlKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3ByZWFkVHlwZU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVW5leHBlY3RlZCB0eXBlICcke3R5cGV9JyBvZiBhIHNwcmVhZC4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhbiBJdGVyYWJsZS4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3RhY2tPdmVyZmxvdyA9IG1lc3NhZ2VTdGFja092ZXJmbG93OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN0YWNrT3ZlcmZsb3cgPSBjb25zdCBNZXNzYWdlQ29kZSgiU3RhY2tPdmVyZmxvdyIsCiAgICBpbmRleDogMTksCiAgICBtZXNzYWdlOiByIiIiVGhlIGZpbGUgaGFzIHRvbyBtYW55IG5lc3RlZCBleHByZXNzaW9ucyBvciBzdGF0ZW1lbnRzLiIiIiwKICAgIHRpcDogciIiIlRyeSBzaW1wbGlmeWluZyB0aGUgY29kZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdCA9CiAgICBtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09ORkxJQ1RJTkdfU1RBVElDX0FORF9JTlNUQU5DRSJdLAogICAgbWVzc2FnZTogciIiIlRoaXMgc3RhdGljIG1lbWJlciBjb25mbGljdHMgd2l0aCBhbiBpbnN0YW5jZSBtZW1iZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZSA9CiAgICBtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGlzIHRoZSBpbnN0YW5jZSBtZW1iZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN0YXRpY0NvbnN0cnVjdG9yID0gbWVzc2FnZVN0YXRpY0NvbnN0cnVjdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN0YXRpY0NvbnN0cnVjdG9yID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3RhdGljQ29uc3RydWN0b3IiLAogICAgaW5kZXg6IDQsCiAgICBtZXNzYWdlOiByIiIiQ29uc3RydWN0b3JzIGNhbid0IGJlIHN0YXRpYy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ3N0YXRpYycuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN0YXRpY09wZXJhdG9yID0gbWVzc2FnZVN0YXRpY09wZXJhdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN0YXRpY09wZXJhdG9yID0gY29uc3QgTWVzc2FnZUNvZGUoIlN0YXRpY09wZXJhdG9yIiwKICAgIGluZGV4OiAxNywKICAgIG1lc3NhZ2U6IHIiIiJPcGVyYXRvcnMgY2FuJ3QgYmUgc3RhdGljLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAnc3RhdGljJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3VwZXJBc0V4cHJlc3Npb24gPSBtZXNzYWdlU3VwZXJBc0V4cHJlc3Npb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3VwZXJBc0V4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTdXBlckFzRXhwcmVzc2lvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiU1VQRVJfQVNfRVhQUkVTU0lPTiJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IHVzZSAnc3VwZXInIGFzIGFuIGV4cHJlc3Npb24uIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUbyBkZWxlZ2F0ZSBhIGNvbnN0cnVjdG9yIHRvIGEgc3VwZXIgY29uc3RydWN0b3IsIHB1dCB0aGUgc3VwZXIgY2FsbCBhcyBhbiBpbml0aWFsaXplci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3VwZXJBc0lkZW50aWZpZXIgPSBtZXNzYWdlU3VwZXJBc0lkZW50aWZpZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3VwZXJBc0lkZW50aWZpZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTdXBlckFzSWRlbnRpZmllciIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiU1VQRVJfQVNfRVhQUkVTU0lPTiJdLAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIGlkZW50aWZpZXIsIGJ1dCBnb3QgJ3N1cGVyJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3VwZXJJbml0aWFsaXplck5vdExhc3QgPSBtZXNzYWdlU3VwZXJJbml0aWFsaXplck5vdExhc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3VwZXJJbml0aWFsaXplck5vdExhc3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTdXBlckluaXRpYWxpemVyTm90TGFzdCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9TVVBFUl9JTlZPQ0FUSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgaGF2ZSBpbml0aWFsaXplcnMgYWZ0ZXIgJ3N1cGVyJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3VwZXJOdWxsQXdhcmUgPSBtZXNzYWdlU3VwZXJOdWxsQXdhcmU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3VwZXJOdWxsQXdhcmUgPSBjb25zdCBNZXNzYWdlQ29kZSgiU3VwZXJOdWxsQXdhcmUiLAogICAgaW5kZXg6IDE4LAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIG9wZXJhdG9yICc/LicgY2Fubm90IGJlIHVzZWQgd2l0aCAnc3VwZXInIGJlY2F1c2UgJ3N1cGVyJyBjYW5ub3QgYmUgbnVsbC4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVwbGFjaW5nICc/Licgd2l0aCAnLiciIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJTdXBlcmNsYXNzIGhhcyBubyBjb25zdHJ1Y3RvciBuYW1lZCAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3IiLCB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WwogICAgICAgICAgIlVOREVGSU5FRF9DT05TVFJVQ1RPUl9JTl9JTklUSUFMSVpFUiIsCiAgICAgICAgICAiVU5ERUZJTkVEX0NPTlNUUlVDVE9SX0lOX0lOSVRJQUxJWkVSX0RFRkFVTFQiCiAgICAgICAgXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yLAogICAgICBtZXNzYWdlOiAiIiJTdXBlcmNsYXNzIGhhcyBubyBjb25zdHJ1Y3RvciBuYW1lZCAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3IgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBzdXBlcmNsYXNzLCAnI25hbWUnLCBoYXMgbm8gdW5uYW1lZCBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3Rvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yIiwKICAgICAgICB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9fREVGQVVMVF9TVVBFUl9DT05TVFJVQ1RPUl9JTVBMSUNJVCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgc3VwZXJjbGFzcywgJyR7bmFtZX0nLCBoYXMgbm8gdW5uYW1lZCBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9HZXR0ZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlN1cGVyY2xhc3MgaGFzIG5vIGdldHRlciBuYW1lZCAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0dldHRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU3VwZXJjbGFzc0hhc05vR2V0dGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzSGFzTm9HZXR0ZXIiLCB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0dldHRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX1NVUEVSX0dFVFRFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0dldHRlcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NIYXNOb0dldHRlciwKICAgICAgbWVzc2FnZTogIiIiU3VwZXJjbGFzcyBoYXMgbm8gZ2V0dGVyIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9NZXRob2QgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlN1cGVyY2xhc3MgaGFzIG5vIG1ldGhvZCBuYW1lZCAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb01ldGhvZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU3VwZXJjbGFzc0hhc05vTWV0aG9kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzSGFzTm9NZXRob2QiLCB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb01ldGhvZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX1NVUEVSX01FVEhPRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb01ldGhvZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NIYXNOb01ldGhvZCwKICAgICAgbWVzc2FnZTogIiIiU3VwZXJjbGFzcyBoYXMgbm8gbWV0aG9kIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9TZXR0ZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlN1cGVyY2xhc3MgaGFzIG5vIHNldHRlciBuYW1lZCAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb1NldHRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU3VwZXJjbGFzc0hhc05vU2V0dGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzSGFzTm9TZXR0ZXIiLCB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb1NldHRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX1NVUEVSX1NFVFRFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb1NldHRlcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NIYXNOb1NldHRlciwKICAgICAgbWVzc2FnZTogIiIiU3VwZXJjbGFzcyBoYXMgbm8gc2V0dGVyIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJTdXBlcmNsYXNzIGRvZXNuJ3QgaGF2ZSBhIG1ldGhvZCBuYW1lZCAnI25hbWUnIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc01ldGhvZEFyZ3VtZW50TWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaCIsCiAgICAgICAgdGVtcGxhdGVTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiU3VwZXJjbGFzcyBkb2Vzbid0IGhhdmUgYSBtZXRob2QgbmFtZWQgJyR7bmFtZX0nIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN1cGVydHlwZUlzRnVuY3Rpb24gPSBtZXNzYWdlU3VwZXJ0eXBlSXNGdW5jdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTdXBlcnR5cGVJc0Z1bmN0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3VwZXJ0eXBlSXNGdW5jdGlvbiIsCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgdXNlIGEgZnVuY3Rpb24gdHlwZSBhcyBzdXBlcnR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIGFzIHN1cGVydHlwZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTdXBlcnR5cGVJc0lsbGVnYWwpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVN1cGVydHlwZUlzSWxsZWdhbCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiU3VwZXJ0eXBlSXNJbGxlZ2FsIiwgdGVtcGxhdGVTdXBlcnR5cGVJc0lsbGVnYWwsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYVEVORFNfTk9OX0NMQVNTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVydHlwZUlzSWxsZWdhbChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVydHlwZUlzSWxsZWdhbCwKICAgICAgbWVzc2FnZTogIiIiVGhlIHR5cGUgJyR7bmFtZX0nIGNhbid0IGJlIHVzZWQgYXMgc3VwZXJ0eXBlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgYXMgc3VwZXJ0eXBlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVydHlwZUlzVHlwZVZhcmlhYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGUiLCB0ZW1wbGF0ZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFRFTkRTX05PTl9DTEFTUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlLAogICAgICBtZXNzYWdlOiAiIiJUaGUgdHlwZSB2YXJpYWJsZSAnJHtuYW1lfScgY2FuJ3QgYmUgdXNlZCBhcyBzdXBlcnR5cGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3dpdGNoQ2FzZUZhbGxUaHJvdWdoID0gbWVzc2FnZVN3aXRjaENhc2VGYWxsVGhyb3VnaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTd2l0Y2hDYXNlRmFsbFRocm91Z2ggPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTd2l0Y2hDYXNlRmFsbFRocm91Z2giLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNBU0VfQkxPQ0tfTk9UX1RFUk1JTkFURUQiXSwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcsCiAgICBtZXNzYWdlOiByIiIiU3dpdGNoIGNhc2UgbWF5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUeXBlICcjdHlwZScgb2YgdGhlIHN3aXRjaCBleHByZXNzaW9uIGlzbid0IGFzc2lnbmFibGUgdG8gdGhlIHR5cGUgJyN0eXBlMicgb2YgdGhpcyBjYXNlIGV4cHJlc3Npb24uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUiLCB0ZW1wbGF0ZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJTV0lUQ0hfRVhQUkVTU0lPTl9OT1RfQVNTSUdOQUJMRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlICcke3R5cGV9JyBvZiB0aGUgc3dpdGNoIGV4cHJlc3Npb24gaXNuJ3QgYXNzaWduYWJsZSB0byB0aGUgdHlwZSAnJHt0eXBlMn0nIG9mIHRoaXMgY2FzZSBleHByZXNzaW9uLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2UgPQogICAgbWVzc2FnZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2U7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2UiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiVGhlIHN3aXRjaCBleHByZXNzaW9uIGlzIGhlcmUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN3aXRjaEhhc0Nhc2VBZnRlckRlZmF1bHQgPQogICAgbWVzc2FnZVN3aXRjaEhhc0Nhc2VBZnRlckRlZmF1bHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN3aXRjaEhhc0Nhc2VBZnRlckRlZmF1bHQiLAogICAgaW5kZXg6IDE2LAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIGRlZmF1bHQgY2FzZSBzaG91bGQgYmUgdGhlIGxhc3QgY2FzZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgZGVmYXVsdCBjYXNlIGFmdGVyIHRoZSBvdGhlciBjYXNlIGNsYXVzZXMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN3aXRjaEhhc011bHRpcGxlRGVmYXVsdHMgPQogICAgbWVzc2FnZVN3aXRjaEhhc011bHRpcGxlRGVmYXVsdHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN3aXRjaEhhc011bHRpcGxlRGVmYXVsdHMiLAogICAgaW5kZXg6IDE1LAogICAgbWVzc2FnZTogciIiIlRoZSAnZGVmYXVsdCcgY2FzZSBjYW4gb25seSBiZSBkZWNsYXJlZCBvbmNlLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBkZWZhdWx0IGNhc2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN5bnRoZXRpY1Rva2VuID0gbWVzc2FnZVN5bnRoZXRpY1Rva2VuOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN5bnRoZXRpY1Rva2VuID0gY29uc3QgTWVzc2FnZUNvZGUoIlN5bnRoZXRpY1Rva2VuIiwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGNvdWxkbid0IGJlIHBhcnNlZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZVRoaXNBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGFjY2VzcyAndGhpcycgaW4gYSBmaWVsZCBpbml0aWFsaXplciB0byByZWFkICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplciIsIHRlbXBsYXRlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVEhJU19BQ0NFU1NfRlJPTV9GSUVMRF9JTklUSUFMSVpFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGFjY2VzcyAndGhpcycgaW4gYSBmaWVsZCBpbml0aWFsaXplciB0byByZWFkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUaGlzQXNJZGVudGlmaWVyID0gbWVzc2FnZVRoaXNBc0lkZW50aWZpZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVGhpc0FzSWRlbnRpZmllciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlRoaXNBc0lkZW50aWZpZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfUkVGRVJFTkNFX1RPX1RISVMiXSwKICAgIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCBpZGVudGlmaWVyLCBidXQgZ290ICd0aGlzJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVGhpc0luaXRpYWxpemVyTm90QWxvbmUgPSBtZXNzYWdlVGhpc0luaXRpYWxpemVyTm90QWxvbmU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVGhpc0luaXRpYWxpemVyTm90QWxvbmUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRklFTERfSU5JVElBTElaRVJfUkVESVJFQ1RJTkdfQ09OU1RSVUNUT1IiXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBoYXZlIG90aGVyIGluaXRpYWxpemVycyB0b2dldGhlciB3aXRoICd0aGlzJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIHRlbXBsYXRlVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgYWNjZXNzICcjc3RyaW5nJyBpbiBhIGZpZWxkIGluaXRpYWxpemVyLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1RoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIGNvZGVUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplciIsCiAgICAgICAgdGVtcGxhdGVUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVEhJU19BQ0NFU1NfRlJPTV9JTklUSUFMSVpFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplcihTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVRoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBhY2Nlc3MgJyR7c3RyaW5nfScgaW4gYSBmaWVsZCBpbml0aWFsaXplci4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIGludCBjb3VudCwKICAgICAgICBpbnQKICAgICAgICAgICAgY291bnQyKT4gdGVtcGxhdGVUb29GZXdBcmd1bWVudHMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50Mik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUb28gZmV3IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAjY291bnQgcmVxdWlyZWQsICNjb3VudDIgZ2l2ZW4uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUb29GZXdBcmd1bWVudHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50Mik+IGNvZGVUb29GZXdBcmd1bWVudHMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50Mik+KAogICAgICAgICJUb29GZXdBcmd1bWVudHMiLCB0ZW1wbGF0ZVRvb0Zld0FyZ3VtZW50cywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0VOT1VHSF9SRVFVSVJFRF9BUkdVTUVOVFMiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUb29GZXdBcmd1bWVudHMoaW50IGNvdW50LCBpbnQgY291bnQyKSB7CiAgaWYgKGNvdW50ID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgaWYgKGNvdW50MiA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVG9vRmV3QXJndW1lbnRzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVG9vIGZldyBwb3NpdGlvbmFsIGFyZ3VtZW50czogJHtjb3VudH0gcmVxdWlyZWQsICR7Y291bnQyfSBnaXZlbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjb3VudCc6IGNvdW50LCAnY291bnQyJzogY291bnQyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBpbnQgY291bnQsCiAgICAgICAgaW50CiAgICAgICAgICAgIGNvdW50Mik+IHRlbXBsYXRlVG9vTWFueUFyZ3VtZW50cyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAjY291bnQgYWxsb3dlZCwgYnV0ICNjb3VudDIgZm91bmQuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGV4dHJhIHBvc2l0aW9uYWwgYXJndW1lbnRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVG9vTWFueUFyZ3VtZW50cyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4gY29kZVRvb01hbnlBcmd1bWVudHMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50Mik+KAogICAgICAgICJUb29NYW55QXJndW1lbnRzIiwgdGVtcGxhdGVUb29NYW55QXJndW1lbnRzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFRSQV9QT1NJVElPTkFMX0FSR1VNRU5UUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1Rvb01hbnlBcmd1bWVudHMoaW50IGNvdW50LCBpbnQgY291bnQyKSB7CiAgaWYgKGNvdW50ID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgaWYgKGNvdW50MiA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVG9vTWFueUFyZ3VtZW50cywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAke2NvdW50fSBhbGxvd2VkLCBidXQgJHtjb3VudDJ9IGZvdW5kLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3ZpbmcgdGhlIGV4dHJhIHBvc2l0aW9uYWwgYXJndW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J2NvdW50JzogY291bnQsICdjb3VudDInOiBjb3VudDJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVG9wTGV2ZWxPcGVyYXRvciA9IG1lc3NhZ2VUb3BMZXZlbE9wZXJhdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVRvcExldmVsT3BlcmF0b3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUb3BMZXZlbE9wZXJhdG9yIiwKICAgIGluZGV4OiAxNCwKICAgIG1lc3NhZ2U6IHIiIiJPcGVyYXRvcnMgbXVzdCBiZSBkZWNsYXJlZCB3aXRoaW4gYSBjbGFzcy4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgb3BlcmF0b3IsIG1vdmluZyBpdCB0byBhIGNsYXNzLCBvciBjb252ZXJ0aW5nIGl0IHRvIGJlIGEgZnVuY3Rpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVR5cGVBZnRlclZhciA9IG1lc3NhZ2VUeXBlQWZ0ZXJWYXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZUFmdGVyVmFyID0gY29uc3QgTWVzc2FnZUNvZGUoIlR5cGVBZnRlclZhciIsCiAgICBpbmRleDogODksCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJWYXJpYWJsZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdXNpbmcgYm90aCAndmFyJyBhbmQgYSB0eXBlIG5hbWUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nICd2YXIuJyIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+IHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2ggPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJFeHBlY3RlZCAjY291bnQgdHlwZSBhcmd1bWVudHMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVHlwZUFyZ3VtZW50TWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+IGNvZGVUeXBlQXJndW1lbnRNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50KT4oCiAgICAgICAgIlR5cGVBcmd1bWVudE1pc21hdGNoIiwgdGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiV1JPTkdfTlVNQkVSX09GX1RZUEVfQVJHVU1FTlRTIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVHlwZUFyZ3VtZW50TWlzbWF0Y2goaW50IGNvdW50KSB7CiAgaWYgKGNvdW50ID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlQXJndW1lbnRNaXNtYXRjaCwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgJHtjb3VudH0gdHlwZSBhcmd1bWVudHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnY291bnQnOiBjb3VudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDYW4ndCB1c2UgdHlwZSBhcmd1bWVudHMgd2l0aCB0eXBlIHZhcmlhYmxlICcjbmFtZScuIiIiLAogICAgICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHJlbW92aW5nIHRoZSB0eXBlIGFyZ3VtZW50cy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVR5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlIiwgdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUsCiAgICAgICAgaW5kZXg6IDEzLCBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IHVzZSB0eXBlIGFyZ3VtZW50cyB3aXRoIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3ZpbmcgdGhlIHR5cGUgYXJndW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVR5cGVCZWZvcmVGYWN0b3J5ID0gbWVzc2FnZVR5cGVCZWZvcmVGYWN0b3J5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVR5cGVCZWZvcmVGYWN0b3J5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZUJlZm9yZUZhY3RvcnkiLAogICAgaW5kZXg6IDU3LAogICAgbWVzc2FnZTogciIiIkZhY3RvcnkgY29uc3RydWN0b3JzIGNhbm5vdCBoYXZlIGEgcmV0dXJuIHR5cGUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSB0eXBlIGFwcGVhcmluZyBiZWZvcmUgJ2ZhY3RvcnknLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVUeXBlTm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlR5cGUgJyNuYW1lJyBub3QgZm91bmQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVHlwZU5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVUeXBlTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlR5cGVOb3RGb3VuZCIsIHRlbXBsYXRlVHlwZU5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfQ0xBU1MiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUeXBlTm90Rm91bmQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIlR5cGUgJyR7bmFtZX0nIG5vdCBmb3VuZC4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+IHRlbXBsYXRlVHlwZU9yaWdpbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgZnJvbSAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVHlwZU9yaWdpbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4gY29kZVR5cGVPcmlnaW4gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICJUeXBlT3JpZ2luIiwKICB0ZW1wbGF0ZVR5cGVPcmlnaW4sCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVHlwZU9yaWdpbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlT3JpZ2luLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgZnJvbSAnJHt1cml9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZVR5cGVPcmlnaW5XaXRoRmlsZVVyaSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyBmcm9tICcjdXJpJyAoJyN1cmkyJykuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVHlwZU9yaWdpbldpdGhGaWxlVXJpKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlVHlwZU9yaWdpbldpdGhGaWxlVXJpID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICJUeXBlT3JpZ2luV2l0aEZpbGVVcmkiLAogIHRlbXBsYXRlVHlwZU9yaWdpbldpdGhGaWxlVXJpLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1R5cGVPcmlnaW5XaXRoRmlsZVVyaShTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICBTdHJpbmcgdXJpMiA9IHJlbGF0aXZpemVVcmkodXJpMl8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVHlwZU9yaWdpbldpdGhGaWxlVXJpLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgZnJvbSAnJHt1cml9JyAoJyR7dXJpMn0nKS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV8sICd1cmkyJzogdXJpMl99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWUgPQogICAgbWVzc2FnZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkRVUExJQ0FURV9ERUZJTklUSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiQSB0eXBlIHZhcmlhYmxlIGNhbid0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhbm90aGVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlIG90aGVyIHR5cGUgdmFyaWFibGUgbmFtZWQgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlIiwKICAgICAgICB0ZW1wbGF0ZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2UsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1R5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlLAogICAgICBtZXNzYWdlOiAiIiJUaGUgb3RoZXIgdHlwZSB2YXJpYWJsZSBuYW1lZCAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHQgPQogICAgbWVzc2FnZVR5cGVWYXJpYWJsZUluQ29uc3RhbnRDb250ZXh0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVR5cGVWYXJpYWJsZUluQ29uc3RhbnRDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfUEFSQU1FVEVSX0lOX0NPTlNUX0VYUFJFU1NJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJUeXBlIHZhcmlhYmxlcyBjYW4ndCBiZSB1c2VkIGFzIGNvbnN0YW50cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0ID0KICAgIG1lc3NhZ2VUeXBlVmFyaWFibGVJblN0YXRpY0NvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX1BBUkFNRVRFUl9SRUZFUkVOQ0VEX0JZX1NUQVRJQyJdLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiJUeXBlIHZhcmlhYmxlcyBjYW4ndCBiZSB1c2VkIGluIHN0YXRpYyBtZW1iZXJzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nID0KICAgIG1lc3NhZ2VUeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmcgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVElOR19UWVBFX1ZBUklBQkxFX0FORF9DTEFTUyJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSB0eXBlIHZhcmlhYmxlIGNhbid0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBpdHMgZW5jbG9zaW5nIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUeXBlZGVmSW5DbGFzcyA9IG1lc3NhZ2VUeXBlZGVmSW5DbGFzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VUeXBlZGVmSW5DbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJUeXBlZGVmSW5DbGFzcyIsCiAgICBpbmRleDogNywKICAgIG1lc3NhZ2U6IHIiIiJUeXBlZGVmcyBjYW4ndCBiZSBkZWNsYXJlZCBpbnNpZGUgY2xhc3Nlcy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSB0eXBlZGVmIHRvIHRoZSB0b3AtbGV2ZWwuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVR5cGVkZWZOb3RGdW5jdGlvbiA9IG1lc3NhZ2VUeXBlZGVmTm90RnVuY3Rpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZWRlZk5vdEZ1bmN0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZWRlZk5vdEZ1bmN0aW9uIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0dFTkVSSUNfRlVOQ1RJT05fVFlQRSJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGNyZWF0ZSB0eXBlZGVmIGZyb20gbm9uLWZ1bmN0aW9uIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlVW5kZWZpbmVkR2V0dGVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGdldHRlciAnI25hbWUnIGlzbid0IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3R5cGUnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBnZXR0ZXIsIG9yIGRlZmluaW5nIGEgZ2V0dGVyIG9yIGZpZWxkIG5hbWVkICcjbmFtZScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbmRlZmluZWRHZXR0ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+IGNvZGVVbmRlZmluZWRHZXR0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgICJVbmRlZmluZWRHZXR0ZXIiLCB0ZW1wbGF0ZVVuZGVmaW5lZEdldHRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX0dFVFRFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVbmRlZmluZWRHZXR0ZXIoU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVVuZGVmaW5lZEdldHRlciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBnZXR0ZXIgJyR7bmFtZX0nIGlzbid0IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnJHt0eXBlfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBnZXR0ZXIsIG9yIGRlZmluaW5nIGEgZ2V0dGVyIG9yIGZpZWxkIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZVVuZGVmaW5lZE1ldGhvZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtZXRob2QgJyNuYW1lJyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN0eXBlJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgbWV0aG9kLCBvciBkZWZpbmluZyBhIG1ldGhvZCBuYW1lZCAnI25hbWUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5kZWZpbmVkTWV0aG9kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPiBjb2RlVW5kZWZpbmVkTWV0aG9kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPigKICAgICAgICAiVW5kZWZpbmVkTWV0aG9kIiwgdGVtcGxhdGVVbmRlZmluZWRNZXRob2QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVOREVGSU5FRF9NRVRIT0QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5kZWZpbmVkTWV0aG9kKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbmRlZmluZWRNZXRob2QsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbWV0aG9kICcke25hbWV9JyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyR7dHlwZX0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgbWV0aG9kLCBvciBkZWZpbmluZyBhIG1ldGhvZCBuYW1lZCAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVVbmRlZmluZWRTZXR0ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgc2V0dGVyICcjbmFtZScgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcjdHlwZScuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIHNldHRlciwgb3IgZGVmaW5pbmcgYSBzZXR0ZXIgb3IgZmllbGQgbmFtZWQgJyNuYW1lJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZFNldHRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4gY29kZVVuZGVmaW5lZFNldHRlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4oCiAgICAgICAgIlVuZGVmaW5lZFNldHRlciIsIHRlbXBsYXRlVW5kZWZpbmVkU2V0dGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfU0VUVEVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZFNldHRlcihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVW5kZWZpbmVkU2V0dGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHNldHRlciAnJHtuYW1lfScgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcke3R5cGV9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIHNldHRlciwgb3IgZGVmaW5pbmcgYSBzZXR0ZXIgb3IgZmllbGQgbmFtZWQgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndHlwZSc6IF90eXBlfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVVuZXhwZWN0ZWREb2xsYXJJblN0cmluZyA9IG1lc3NhZ2VVbmV4cGVjdGVkRG9sbGFySW5TdHJpbmc7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVW5leHBlY3RlZERvbGxhckluU3RyaW5nID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVW5leHBlY3RlZERvbGxhckluU3RyaW5nIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkVYUEVDVEVEX0RPTExBUl9JTl9TVFJJTkciXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkEgJyQnIGhhcyBzcGVjaWFsIG1lYW5pbmcgaW5zaWRlIGEgc3RyaW5nLCBhbmQgbXVzdCBiZSBmb2xsb3dlZCBieSBhbiBpZGVudGlmaWVyIG9yIGFuIGV4cHJlc3Npb24gaW4gY3VybHkgYnJhY2VzICh7fSkuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyBhIGJhY2tzbGFzaCAoXCkgdG8gZXNjYXBlIHRoZSAnJCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVW5leHBlY3RlZCB0b2tlbiAnI2xleGVtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5leHBlY3RlZFRva2VuKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVVbmV4cGVjdGVkVG9rZW4gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIlVuZXhwZWN0ZWRUb2tlbiIsIHRlbXBsYXRlVW5leHBlY3RlZFRva2VuLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkVYUEVDVEVEX1RPS0VOIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1VuZXhwZWN0ZWRUb2tlbihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbmV4cGVjdGVkVG9rZW4sCiAgICAgIG1lc3NhZ2U6ICIiIlVuZXhwZWN0ZWQgdG9rZW4gJyR7bGV4ZW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFRva2VuIHRva2VuKT4KICAgIHRlbXBsYXRlVW5tYXRjaGVkVG9rZW4gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNhbid0IGZpbmQgJyNzdHJpbmcnIHRvIG1hdGNoICcjbGV4ZW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbm1hdGNoZWRUb2tlbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgVG9rZW4gdG9rZW4pPiBjb2RlVW5tYXRjaGVkVG9rZW4gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFRva2VuIHRva2VuKT4oCiAgICAgICAgIlVubWF0Y2hlZFRva2VuIiwgdGVtcGxhdGVVbm1hdGNoZWRUb2tlbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhQRUNURURfVE9LRU4iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5tYXRjaGVkVG9rZW4oU3RyaW5nIHN0cmluZywgVG9rZW4gdG9rZW4pIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbm1hdGNoZWRUb2tlbiwKICAgICAgbWVzc2FnZTogIiIiQ2FuJ3QgZmluZCAnJHtzdHJpbmd9JyB0byBtYXRjaCAnJHtsZXhlbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIicjbmFtZS4jbmFtZTInIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGJlY2F1c2UgJyNuYW1lJyBpc24ndCBkZWZpbmVkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIlVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uIiwKICAgICAgICB0ZW1wbGF0ZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfQV9UWVBFIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24oCiAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiJyR7bmFtZX0uJHtuYW1lMn0nIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGJlY2F1c2UgJyR7bmFtZX0nIGlzbid0IGRlZmluZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IHRlbXBsYXRlVW5zcGVjaWZpZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiI3N0cmluZyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1Vuc3BlY2lmaWVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZVVuc3BlY2lmaWVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgIlVuc3BlY2lmaWVkIiwKICB0ZW1wbGF0ZVVuc3BlY2lmaWVkLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1Vuc3BlY2lmaWVkKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVW5zcGVjaWZpZWQsCiAgICAgIG1lc3NhZ2U6ICIiIiR7c3RyaW5nfSIiIiwgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVVbnN1cHBvcnRlZE9wZXJhdG9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgJyNsZXhlbWUnIG9wZXJhdG9yIGlzIG5vdCBzdXBwb3J0ZWQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5zdXBwb3J0ZWRPcGVyYXRvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlVW5zdXBwb3J0ZWRPcGVyYXRvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiVW5zdXBwb3J0ZWRPcGVyYXRvciIsIHRlbXBsYXRlVW5zdXBwb3J0ZWRPcGVyYXRvciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5TVVBQT1JURURfT1BFUkFUT1IiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5zdXBwb3J0ZWRPcGVyYXRvcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbnN1cHBvcnRlZE9wZXJhdG9yLAogICAgICBtZXNzYWdlOiAiIiJUaGUgJyR7bGV4ZW1lfScgb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVVuc3VwcG9ydGVkUHJlZml4UGx1cyA9IG1lc3NhZ2VVbnN1cHBvcnRlZFByZWZpeFBsdXM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVW5zdXBwb3J0ZWRQcmVmaXhQbHVzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVW5zdXBwb3J0ZWRQcmVmaXhQbHVzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX0lERU5USUZJRVIiXSwKICAgIG1lc3NhZ2U6IHIiIiInKycgaXMgbm90IGEgcHJlZml4IG9wZXJhdG9yLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyAnKycuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVVudGVybWluYXRlZENvbW1lbnQgPSBtZXNzYWdlVW50ZXJtaW5hdGVkQ29tbWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VVbnRlcm1pbmF0ZWRDb21tZW50ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVW50ZXJtaW5hdGVkQ29tbWVudCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5URVJNSU5BVEVEX01VTFRJX0xJTkVfQ09NTUVOVCJdLAogICAgbWVzc2FnZTogciIiIkNvbW1lbnQgc3RhcnRpbmcgd2l0aCAnLyonIG11c3QgZW5kIHdpdGggJyovJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICB0ZW1wbGF0ZVVudGVybWluYXRlZFN0cmluZyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiU3RyaW5nIHN0YXJ0aW5nIHdpdGggI3N0cmluZyBtdXN0IGVuZCB3aXRoICNzdHJpbmcyLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1VudGVybWluYXRlZFN0cmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZVVudGVybWluYXRlZFN0cmluZyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICAiVW50ZXJtaW5hdGVkU3RyaW5nIiwgdGVtcGxhdGVVbnRlcm1pbmF0ZWRTdHJpbmcsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVOVEVSTUlOQVRFRF9TVFJJTkdfTElURVJBTCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVbnRlcm1pbmF0ZWRTdHJpbmcoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVW50ZXJtaW5hdGVkU3RyaW5nLAogICAgICBtZXNzYWdlOiAiIiJTdHJpbmcgc3RhcnRpbmcgd2l0aCAke3N0cmluZ30gbXVzdCBlbmQgd2l0aCAke3N0cmluZzJ9LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVVudGVybWluYXRlZFRva2VuID0gbWVzc2FnZVVudGVybWluYXRlZFRva2VuOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVVudGVybWluYXRlZFRva2VuID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJVbnRlcm1pbmF0ZWRUb2tlbiIsIG1lc3NhZ2U6IHIiIiJJbmNvbXBsZXRlIHRva2VuLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVVbnRyYW5zbGF0YWJsZVVyaSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiTm90IGZvdW5kOiAnI3VyaSciIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbnRyYW5zbGF0YWJsZVVyaSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlVW50cmFuc2xhdGFibGVVcmkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgIlVudHJhbnNsYXRhYmxlVXJpIiwgdGVtcGxhdGVVbnRyYW5zbGF0YWJsZVVyaSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVVJJX0RPRVNfTk9UX0VYSVNUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1VudHJhbnNsYXRhYmxlVXJpKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbnRyYW5zbGF0YWJsZVVyaSwKICAgICAgbWVzc2FnZTogIiIiTm90IGZvdW5kOiAnJHt1cml9JyIiIiwgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZVVzZU9mRGVwcmVjYXRlZElkZW50aWZpZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgZGVwcmVjYXRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyIiwgdGVtcGxhdGVVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pZ25vcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllciwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIGlzIGRlcHJlY2F0ZWQuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVmFyQXNUeXBlTmFtZSA9IG1lc3NhZ2VWYXJBc1R5cGVOYW1lOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVZhckFzVHlwZU5hbWUgPSBjb25zdCBNZXNzYWdlQ29kZSgiVmFyQXNUeXBlTmFtZSIsCiAgICBpbmRleDogNjEsIG1lc3NhZ2U6IHIiIiJUaGUga2V5d29yZCAndmFyJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBuYW1lLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVWYXJSZXR1cm5UeXBlID0gbWVzc2FnZVZhclJldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVmFyUmV0dXJuVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJWYXJSZXR1cm5UeXBlIiwKICAgIGluZGV4OiAxMiwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgcmV0dXJuIHR5cGUgY2FuJ3QgYmUgJ3ZhcicuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ3ZhcicsIG9yIHJlcGxhY2luZyBpdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSByZXR1cm4gdHlwZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVm9pZEV4cHJlc3Npb24gPSBtZXNzYWdlVm9pZEV4cHJlc3Npb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVm9pZEV4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgiVm9pZEV4cHJlc3Npb24iLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVTRV9PRl9WT0lEX1JFU1VMVCJdLAogICAgbWVzc2FnZTogciIiIlRoaXMgZXhwcmVzc2lvbiBoYXMgdHlwZSAndm9pZCcgYW5kIGNhbid0IGJlIHVzZWQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgc3RyaW5nLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcyKT4gdGVtcGxhdGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBpbnRlZ2VyIGxpdGVyYWwgI3N0cmluZyBjYW4ndCBiZSByZXByZXNlbnRlZCBleGFjdGx5IGluIEphdmFTY3JpcHQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0aGUgbGl0ZXJhbCB0byBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gSmF2YXNjcmlwdC4gSW4gSmF2YXNjcmlwdCAjc3RyaW5nMiBpcyB0aGUgbmVhcmVzdCB2YWx1ZSB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICJXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHkiLAogIHRlbXBsYXRlV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5LAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1dlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseSgKICAgIFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVdlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBpbnRlZ2VyIGxpdGVyYWwgJHtzdHJpbmd9IGNhbid0IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgaW4gSmF2YVNjcmlwdC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSBsaXRlcmFsIHRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiBKYXZhc2NyaXB0LiBJbiBKYXZhc2NyaXB0ICR7c3RyaW5nMn0gaXMgdGhlIG5lYXJlc3QgdmFsdWUgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVXaXRoQmVmb3JlRXh0ZW5kcyA9IG1lc3NhZ2VXaXRoQmVmb3JlRXh0ZW5kczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VXaXRoQmVmb3JlRXh0ZW5kcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIldpdGhCZWZvcmVFeHRlbmRzIiwKICAgIGluZGV4OiAxMSwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgZXh0ZW5kcyBjbGF1c2UgbXVzdCBiZSBiZWZvcmUgdGhlIHdpdGggY2xhdXNlLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIGV4dGVuZHMgY2xhdXNlIGJlZm9yZSB0aGUgd2l0aCBjbGF1c2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVlpZWxkQXNJZGVudGlmaWVyID0gbWVzc2FnZVlpZWxkQXNJZGVudGlmaWVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVlpZWxkQXNJZGVudGlmaWVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiWWllbGRBc0lkZW50aWZpZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFTWU5DX0tFWVdPUkRfVVNFRF9BU19JREVOVElGSUVSIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiIneWllbGQnIGNhbid0IGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllciBpbiAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJyBtZXRob2RzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVZaWVsZE5vdEdlbmVyYXRvciA9IG1lc3NhZ2VZaWVsZE5vdEdlbmVyYXRvcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VZaWVsZE5vdEdlbmVyYXRvciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIllpZWxkTm90R2VuZXJhdG9yIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJZSUVMRF9JTl9OT05fR0VORVJBVE9SIl0sCiAgICBtZXNzYWdlOiByIiIiJ3lpZWxkJyBjYW4gb25seSBiZSB1c2VkIGluICdzeW5jKicgb3IgJ2FzeW5jKicgbWV0aG9kcy4iIiIpOwqnSwBOTjwBLgM4OwEvARUBOS4pMxlNQgE5Sy9KPDABOUAuLTVRIgIBOUcBOUIbD0wJdwE5PwE5UDlQATkQFg9SKBVhSAE5Ki8vMDZIMAE5Si4tPw9kIgIBOUQzODMBOTwvERcDATkxLi0mSwIBOU8yTRlGOwE5Sx5QPDoBOSs0Li0rNTciJC5PIkICATk7MAE5Pz05SwE5PjMBOUJAOU4BORAWGBFJKR8VXBFdPQE5PiRDSEIBOTEnKzU3IiQ0D2ImYTQCATkQFgxIKhVZOQE5SDFANwE5PRNIMA9cLAIBOUUBOUEaPwE5UQE5RyBDATlDATlAGUENYgE5QQE5Pxg7DWcJfQE5OwE5TDdPATk8KUEZTUIBOTglPSAmAwE5Ti4tLy81D04yAgE5EBYVD04mHBWAoRGAgkMBOTgqPSsxPAE5NyEuLS8vOg+ApoCGMgIBORAWD0woFXNHQgE5T1AwPAE5RC4tOQ92QiICATkuNjMZaEtPATkqMi8zOTwBOU0uLUIPZ0IiAgE5RQE5QRoPDVc0ATkuKTNRQgE5Sy9KOgE5QC4tNUgiAgE5UDMZT1A/ATlIL0RBATk9IDIPTkUkAgE5Li0zRUYBOU9QMEgBOUQgOTwkAgE5PTIBOUE/TAE5PQE5TiBLATkuMTMZUUoBOSotLy40JQE5SC4tPQ9QIgIBOT0yATlBP0tGATlHATlCGy4tATkwKTUZSA9CATlNMSAmAwE5QjI1SjECATk8MQE5UywNWQE5PDEBOVMsDWEJXQE5NywBOU4nDU1RATk3LAE5TidRUQE5LjwzGXE6F0oBOSo4Lzk/PQE5RRMuLUgPcC8iAgE5EBYPTSoVXDZBATlQMVBFATlFMjgPXy8mAgE5LjYzGWo6TwE5KjIvMzk9ATlNLi1CD2kvIgIBOVE/RDQBOUk7LjgBOT4kMic9MwIBOS4zMxlITAE5Ki8vMDY9ATlKID9MJAIBORAWDk4oFYCQEWcFQwE5UFExOgE5RSA6D4CTaQUkAgE5MSYBOUghRj8BOTInATlJIkZHUQE5NwE5SA8NWgllATkyJwE5SSIPDVoJZQE5OQE5Sg9FOQE5QQE5PxgPQEEBORAWFQ9MNhVlSkEBOTgoPVA+ATlRLi0vLzgPakcyAgE5EBYXD0U6FU87OAE5PB9BPhQBOUwyMy8PVDQ6AgE5UTNFQAE5SS9GQAE5Pi4tMzwiAgE5TTNBPAE5RS8aIAMBOTouLS84IgIBOUwzQDsBOUQvPDsBOTkuLS43IgIBOS4pM0BCATlLL0o6MAE5QC4tNTciAgE5TDNAOwE5RC88OwE5OS4tLjciAgE5LikzQEIBOUsvSjowATlALi01NyICATkuKDNHQQE5Si9ISgE5Py4tND4iAgE5NisBOU0mIDEBOTsBOUwPT0YBOTUBOUYPPgmAtwE5NSoBOUwlR1EBOTovATlRKiBFATk9MgE5QT8RUwE5UQE5RyA8PEcBOTkuATlQKUcNUgE5SQE5QxxAPQE5QQE5LE0BORAWD0YoFYCOEWcFPAE5SS9GITkIATk+Li0zD4CRaQUiAgE5EBYRTC8VXD0BOVE2SEEBOUYrQSo0D2AmKwIBORAWEUgvFVQ5ATlNNkA9ATlCK0EqMA9YJisCATkQFhFSLxVRQwE5MSo2KzFOATlMK0EqOg9VJisCATlRATlHIDwtATkwMjVNSwE5LC4xLzVBATlLMj5EJgIBORAWEUkrFYCAPgE5TjIgJgMBOUMrNSI1D4CEJiMCATkQFhccGBFRTB8VdUUBOQxIThZOJy0DATk5SjIrQTU3KiIkPA9/JhMaHxcYCgIBORAWHBFQPxWAm0UBOUEsRictAwE5OSorQTUqIjwPgKEmOgIBORAWFxFTPhVdRAE5QCtFLDI4ATk4KTIrQSo7D2MmPQIBORAWFxFOPhVgPwE5QCZFTEEBOTMpMitBKjYPZiY9AgE5EBYPTigVUUQBOVEvLDJPATlGLi07D1QiAgE5NTk6GYC6F0cBOTE1NjY8RQE5QhorQSpFD4C6JisCATkQFhFNLxWAnj4BOTElNkpBATlHK0EqNQ+AoiYrAgE5EBYcGBFEUBVfOAE5DE8rUBogAwE5LDsrQTU3KiIkLw9nJksCATk1KjoZUUMBOTEmNkwhOAgBOUgrQSo2D1EmKwIBORAWFxgPR0oVazoBOUwhURwiAwE5LjUyMzMxD3JOAgE5EBYPSyoVUj8BOU4xTEABOUMyNg9VJgIBORAWD08qFWFDATksKjErMUcBOUcyOg9kJgIBOTUqATlMJUINWAE5TwE5Rh86SQE5RQE5QRo8PQE5SQE5Qxw+ATkQFhcPRToVaDgBOTwfQT49ATlMMjMvD206AgE5OQE5Sg8NVQluATk5LgE5UClCDVsJZwE5EBYPSihNEVFAATlNL047ATlCLi03SAtSIgIBOUUBOUEaNUIJVwE5NwE5SA8NTjQBOUMBOUAZPz8JZAE5TDNEOwE5RC88OjABOTkuLS47IgIBOUUBOUEaNQ1NATkxJgE5SCEPPDABOTQpATlLJEsNXEUBOTUqATlMJT4/ATlRATlHIDkNVwE5Li4zTUcBOVBRMSUBOUUuLTpEIgIBOU0BOUUeMDoBOUsBOUQdDg1aNwE5LiwzGUdFATlOL1A6ATlDLi04SyICATkyJwE5SSIPDVoJZwE5QB9FO0ABOTwbQRYcAwE5SDIzKzJGAgE5RQE5QRoPDU9LATk/ATlQDw1SOAE5EBYVD0Q3ThFmOAE5OR8+PksBOUkuLTIvSwtnNAIBOU0zQzwBOUUvPkUBOTouLS86IgIBOS4zM0dMATkqLy8wNkABOUouLT8+IgIBOUYzUDUBOT4vMEgBOTMuLShHIgIBOUI3ATlGRE0RUgE5RzwBOUtJJDgBOS46MxlxPRdIATkqNi83PSE5CAE5US4tRg9wMiICATlHATlCGw8NXkUBORAWD0YoFWI8ATlJL0Y8ATk+Li0zD2UiAgE5LiwzN0UBOU4vUCUBOUMuLThKAgE5EBYYD0Q4FW8RdjoBOTohP0JDMAE5TCs1Li0iMQ91JnwxAgE5EBpFMR5KGVEZHToBOQxCOU8YHgMBOSo+MDExKjE2MTYtD1EWGhMYGhcXFgoCATkQFg9IKEcRZj4BOUsvSksBOUAuLTVCC2ciAgE5MSYBOUghD0VEATlDATlAGQ9PPwE5Li4zGVFLRwE5UFExFAE5RS4tOg9QQCICATk/ATlQD1EzATlOM0w9ATlGL0A6ATk7Li0wQyICATkuKTNCQgE5Sy9KJQE5QC4tNTkiAgE5EBYPUSgVT0cBOSouLy81JQE5SS4tPg9SIgIBOVEzGU1AATlJLx4kAwE5Pi4tM1EiAgE5Qx9IGUY4ATk/G0Q2NgE5Sy4tJCYrTj4CATlDJUgZRj4BOT8hREIwATlRLi0kJjFOPgIBOUMfSBlGOAE5PxtENiUBOUsuLSQmK04+AgE5QyVIGUY+ATk/IURCNTABOVEuLSQmMU4+AgE5UDMZTD8BOUgvREUBOT0uLTJQIgIBOS4tM0BGATlPUDAlATlELi05NyICATlQMxlMPwE5SC9ERCUBOT0uLTJQIgIBOS4tM0BGATlPUDAlATlELi05NyICATlLM08VSToBOUMvOhQBOTggLUZHJAIBORAWD0ooFVFAATlNL05DATlCLi03D1QiAgE5LjAzOkkBOSosLy0zJQE5Ry4tPE0CATlQM0Q/ATlIL0Q+ATk9Li0yOyICATlQM0Q/ATlIL0Q6ATk9Li0yOyICATkuKzNARAE5TS9OJQE5Qi4tNzciAgE5TwE5Rh8zPDwBOTInATlJIjM/QAE5MQE5QjcBORAWD00oFVhDATlQUTFCATlFLi06D1siAgE5SQE5QxwwOgE5NwE5SA89OAE5QwE5QBkxMwE5NywBOU4nDg1bMQE5TjVAOwE5RjE8NAE5OzIuNyYCATlLATlEHQ8vATk7ATlMLychATlHATlCGzY3IQE5OQE5SjY3IQE5STVBNgE5QTEyNAE5NjIpOCYCATlMM007ATlELzw7ATk5IC5EJAIBOTAnNRlFN0ABOUsxRhMBOUAyM0ksJgIBOUwzTDsBOUQvPDkBOTkgLkMkAgE5RwE5QhsPMAE5EE4oRhFVNAE5QS82NwE5NiArQQtWJAIBOU0zTjwBOUUvPjsBOTogL0UkAgE5QQE5PxgyQQE5SzNMOgE5Qy86OAE5OCAtQyQCATlKNUU3ATlCMTQUATk3Mio8JgIBOUsBOUQdOy8BOUsBOUQdSwE5RQE5LkwBOUMBOUAZDywBOUczRzYBOT8vMj0BOTQgKT4kAgE5SDU9NQE5QDEwNAE5NTIoNCYCATlFM0U0ATk9Ly44ATkyICc8JAIBOTcBOSdHATkQFg9EKhVGEWo4ATlHMT4UATk8Mi9OC2smAgE5PwE5UA9FTwE5QyBIGU85ATk/HEQ4JQE5TC4tJCYsD1I+AgE5SwE5RB0NgJoBOUYzGU01ATk+LzAyATkzLi0oUSICATlMMxlQOwE5RC88PgE5OS4tLg9PIgIBOTsBOUwOQTcBOTMoATlKIw8+CV8BOUA1ATlEQlFKDV4BOTkBOUoOPzcBOTInATlJIg8+OAE5TwE5Rh8POwlbATk7ATlMD0A3ATlNATlFHg9GATk/ATlQD0I3ATlLM0U1OgE5Qy86FAE5OCAtPCwkAgE5PQE5TjFOATkyJwE5SSIPTzYBOVEzP0ABOUkvHiQDATk+Li0zNiICATk9ATkqSAEdJQEVRQEQIQEJD0QBD0cBBUcxARRQHwEUUB4BViYBEz4BC1BGAQw4ARI4AQ1EARMxARZJFgEOSw8BDxUBHhtLDwFNTEpKEwERE0tLTzIBHU1IOgE5PwE5K08BLVIBOUIiR087ATk+HkMZHwMBOU0rNTciJC5JIjQCATkuMDMZRUkBOSosLyctAwE5Ry4tPEkiAgE5EFAoFYCfNgE5Qy8YHgMBOTguLS0PgKIiAgE5EFEoFYCINwE5RC8ZHwMBOTkuLS4PgIsiAgE5EBYPQigVgJU4ATlFLxogAwE5Oi4tLw+AmCICATkQSigVezABOT0vEhgDATkyLi0nD34iAgE5STNHOAE5QS8WHAMBOTYuLSs+IgIBORBPKxVeMgE5QjIUGgMBOTcrNSIpD2ImIwIBORAWGBkRP00VaDMBOU8mTRUbAwE5JzgrNTc3IiQkKg9wJkUCATkQFhURPTgVZjIBOU8/FBoDATlELi0rNSIpD2wmMQIBOS4oMxlGQQE5Si8fJQMBOT8uLTRMIgIBOT0yATlULQ9NCX4BOTovATlRKg9QKAE5QwE5QBkPDU5KATk3ATlID00yATkQFg9GKEURWDwBOUkvRjsBOT4uLTNAC1kiAgE5EBYPUygVTBFhSQE5KjAvMTdJATlLLi1AD08LYiICATkQFg9KKE0RUUABOU0vTjsBOUIuLTdIC1IiAgE5LjYzGVxPATkqMi8zOUUwATlNLi1CD1siAgE5LjszPxdJATkqNy84PiUBOUQTLi1HNiICATkQFhgRUTwVWkBFATk+LEMtM0QBOTknKzU3IiQ8D2AmOTQCATkzKAE5SiNMATlNATlFHg1NATkQFhgRSDwVUTwBOT4jQ0Y8ATkwJys1NyIkMw9XJjQCATkyJwE5SSI7PjUBOVEBOUcgP0UBOTEmATlIIT0NbUABOUsBOUQdNEEBOTInATlJIkYNUwE5MT42GVoVShdMATktOjI7QU4BOUcWKzUiSg9aJkgjAgE5QzgBOUdFTRFPPQE5RzM8NgE5Py8yNTABOTQuLSlPAgE5QwE5QBk3PCgBOTgtATlPKA9HATk3LAE5TidEDVsBOTswATk/PRFOATlNATlFHjoNWgE5RTNFNAE5PS8uMwE5Mi4tJzwiAgE5LiwzGU5FATlOL1BAATlDLi04D00iAgE5LjEzGUhKATkqLS8uNCUBOUguLT1MIgIBOVA2QTwBOUgyGiADATk9KzUiL1EjAgE5NisBOU0mQw1cATk6LwE5USpOATlPATlGHw9OTgE5RQE5QRoPSUkBOUkBOUMcD0tLATlFATlBGkoBOTkhPkdFOgE5Tjo6OQE5Qy4tMC0+PDICATkQFg9CKBVSPjgBOUUvPjwBOTouLS8PVTciAgE5EBYRRisVdRFNOwE5SzJEQQE5QCs1IjIPeSZPIwIBORAWFQ9LNhVYQAE5OCc9TiUBOVAuLS8vNw9dMgIBOT8BOVAPRU8BOUMgSBlPOQE5PxxEOCUBOUwuLSQmLA9SPgIBORAWGBFSPBVTRgE5Pi1DLjQ+ATk6Jys1NyIkPQ9ZJjQCATkQFhgZFQ9EGkoVdhFQOQE5DBpJLB5OQEcBOS1CKzU3Li0vLyIkMA+AgCZSExcZFhcKAgE5EBYYGRUPUBpKFYCJEVBFATkMGkk4Hk4tM0cBOTlCKzU3Li0vLyIkPA+AkyZSExcZFhcKAgE5EBYYGRUWFg9PRzgVgKIRUEQBOQxHNzdLPCwyRwE5R04rNTcuLS8vLy8vLyIkOw+AsCYLURMXGRYYGBcKAgE5EBYYGRUWFg9XGhwdGRoaExkVgKsRXUwBOQxHNz9LPDQ6RwE5T04rNTcuLS8vLy8vLyIkQw+AuSYLXhMXGRYYGBcKAgE5EBYYGRUPTBpKFX8RXUEBOQwaSTQeTlBHATk1Qis1Ny4tLy8iJDgPgIkmXxMXGRYXCgIBORAWGBkVGQ9NGhwdGR0TGRV9EVBCATkMR1EQSzEqMEcBOUVDKzU3Li03Ly8iJCQ5D4CJJlITFxkWGRcKAgE5EBYYGRUZD1VHLRWAhhFdSgE5DEcsPUsxMjhHATlNQys1Ny4tNy8vIiQkQQ+AkiZfExcZFhkXCgIBOTUqATlMJSBQATlIMEs6ATlALDolATk1JC1CIQIBOVEBOUcgQEsBOTYrATlNJiA0ATk2KwE5TSYgOgE5EBYXDFA0FYCBAXeAul5GATk2LTsuNCUBOTofMiQ9D4CEAXeAvF4zAgE5MDc1GYCFAXtQATksMzE0OiUBOVAyQw+AhAF7JgIBORAWFxgYDE4aRxVVHiAVAXeAul5EATkMGkY3HkssMiUBOTg/MjMzJDsPWCAiFQF3gLxeExocHBQKAgE5UEVOGVkeIBUBe04BOUwxUTI4JQE5PjUyMzNBD1ggIhUBe04CATk0KQE5SyQPUAlSATkuKDNQQQE5Si9IQgE5Py4tNEciAgE5EBYPSygVW0EBOU4vUEUBOUMuLTgPXiICATkQFhUYEU5JFXURVUIBOUspUCowQjABOTY0Li0rNTciJDkPfSZbQgIBOTswATk/PSRHATlHMD05ATk/LBcdAwE5NCQsTwIBORAWD0oqFU0RgJE+ATlNMUpCATlCMjUPUAuAkiYCATkQFg9DKBVOOQE5Ri9AJQE5Oy4tMA9RIgIBOTkuATlQKShPATk7MAE5Pz0sRQE5ODE9SUoBOTQtOS40LQE5Oh0uLSQ9Qi8CATkwLTUZRkYBOVExKjAtATlGMjlKJgIBOT0oQkpFATk5JD5ILQE5Ti4tMjRBPAIBOUE2ATlFQyw+ATlHPAE5S0ksEVABOTUqATlMJShFCVQBOS4yM0dLATkqLi8vNS0BOUkuLT4+IgIBOVAzOD8BOUgvRC0BOT0uLTJLAgE5PChBREEBOTgkPUgtATlNLi0vLzQ9MgIBOTwxATlAPiw4ATkuNjNLTwE5KjIvMzktATlNLi1CQiICATlKPwE5TkwsEVIBOT0rQjZKATk5Jz5OLQE5US4tMjctPgIBOT46QxlMF0gBOTo2Pzc9LQE5QyMrNS4tIkYPTiYxAgE5QChFSUEBOTwkQUgtATlRMjM0QjoCATlAJ0VAQAE5PCNBRi0BOVAyMzM5OgIBOTArNThEATlPMU4tATlEMjdPAgE5LikzQUIBOUsvSi0BOUAuLTU4IgIBOSsuMD9HATlNTjEtATlCJDpRAgE5MC81S0wBOSwrMSwyLQE5SDI7QC4CATlFATlBGkE/ATkQFhUYEU5JFVYRSUIBOUspUCQqAwE5NjQuLSs1NyIkOQ9eJktCAgE5EBYYEUE8FVoRaTUBOT4cQzg4ATlLKzU3IiQsD2AmbTQCATk/ATlQDg1QSQE5SzM5OgE5Qy8YHgMBOTguLS1MAgE5EBYYEUc8FVYRXzsBOT4iQ0RAATlRKzU3IiQyD1wmYTQCATkQFhgRRjwVTxFYOgE5PiFDQj8BOVArNTciJDEPVSZaNAIBORAWGBFFPBVOEVc5ATk+IENAPgE5Tys1NyIkMA9UJlk0AgE5EBYYEUU8FU4RVzkBOT4gQ0A+ATlPKzU3IiQwD1QmWTQCATkQFhgRSDwVWhFUPAE5PiNDRjsBOTAnKzU3IiQzD2AmVjQCATkQFhgRQjwVWxFkNgE5Ph1DOjsBOUwrNTciJC0PYSZmNAIBORAWGBFHPBVZEVI7ATk+IkNEOQE5USs1NyIkMg9fJlQ0AgE5EBYYEUs8FV4RVD8BOT4mQ0w7ATkzJys1NyIkNg9kJlY0AgE5SwE5RB04LwE5QQE5PxgzDVIBOU4zPD0BOUYvGyEDATk7Li0wTwIBOUEBOT8YDw1hATlFATlBGi5IATkxJgE5SCE9DWAJgJ4BOUgzGUo3ATlALzQUATk1ICpOJAIBOTogPzlAATlOOxcdAwE5QyQyLDA+AgE5MSYBOUghDw2AjgE5RwE5Qhs4LjUBOVEBOUcgDw2AtAE5SQE5QxwPDYCLATkzKAE5SiNBKyEBOTcBOUgzDU8JWwE5SjMZTTkBOUIvOEABOTcuLSxRIgIBORBLKDcRWzEBOT4vMDUBOTMuLSgyC1wiAgE5OzABOVIrDVgBOTUqATlMJQ1iATkQFhMMRjIVdjoBOVE5HCIDATlGMDExD3s2AgE5UQE5RyAPDU9QATk3LAE5TidBK0cBORBRJRWAwTs6ATlELEIlATk5JDEPgMQ0IQIBOTMoATlKI0ArOAE5OCk9GUpCATk0JTlKJQE5Si4tJDVQLwIBOTgpPRlKQgE5NCU5SiUBOUouLSQ1UC8CATk2KwE5TSZAK0kBOTEmATlIIQ1RATlLATlEHT9JATlHMzw2ATk/LzI1MAE5NC4tKU8CATlHATlCG0oBOTEmATlIIQ9IKQE5NisBOU0mD0JIATkyJwE5SSIPDWYJVwE5LCsxTkQBOUstTiUBOUAwN0UkAgE5PwE5UC4NfQlWATlRATlHIA83CV4BOTEmATlIITwNTUsBOS4pMzpCATlLL0olATlALi01TQIBORAWFRVQPRVZCyMeOSIsBUQBOT8rRCwySQE5OCguLTEnOw9cDRweOSIsBTMCATk5ATlKPgE5NwE5SC1EATlPATlGHzpQSQE5TQE5RR4PDVI1ATkQSCUVVTEBOTssMDYBOTAkKA9YIQIBOTUqATlMJQ88NQE5UQE5RyA7RT4BORBMRFEZWk0BOU88UTE3UQE5PTgrNTc3IiQkQA9eJkUCATkQFhUWEUxGFYCaQQE5SChNUE4BOTUxLi0vLys1IjgPgKImQQIBORAWFw9DOhVRODYBOTwdQToUATlKMjMtD1YxOgIBOTkuATlQKUFOATk/ATlQD1AJaAE5RQE5QRo8DU4JUwE5MSYBOUghD0tGATlDATlAGQ9LTAE5OQE5Sg9NTgE5TwE5Rh86PwE5EBYPRygVUD0BOUovSCUBOT8uLTQPUyICATk2KwE5TSYPPwl4ATkQRyhHEWQtATk6TkEBOS8gJEALaSQCATlNM0s8ATlFLz4+MAE5Oi4tL0IiAgE5NCkBOUskOwE5EBYaDEU8FXwRZDYBOT4dQzo3ATlMSxNILQ+AgWdEAgE5EBYMRSoVYTYBOUUxOjcBOToTSC0PZCwCATlHATlCGzgNXkYBOT8BOVA4DVpGATkyJwE5SSJEK0cBOVEBOUcgQgE5UQE5RyA+UQlsATkuKTMZSEIBOUsvSiUBOUAuLTVMIgIBORAWD0coFV49ATlKL0glATk/Li00D2EiAgE5TQE5RR44MQE5EBYVD0k2FWo+ATk4JT1KLzABOU4uLS8vNQ9xMgIBOUEzNzABOTlMLzABOS4uLSNKAgE5PwE5UEUBOTcBOUguLAE5SjNEOQE5Qi8XHQMBOTcgLDskAgE5UDVHPQE5SDFAPQE5PTIwPiYCATk7ATlMQgE5QQE5PxhDATk7ATlMOwE5LwE5QA8NVwlbATkQFg9MKFERgLBCATlPUEkyBAE5RC4tOUwLgLEiAgE5LikzUUIBOUsvICYDATlALi01SCICATkuKTMZSEIBOUsvSk0BOUAuLTVMIgIBOS4pMxlJQgE5Sy9KTQE5QC4tNU0iAgE5MygBOUojQgE5TjNKPQE5Ri9AJQE5Oy4tMEEiAgE5EBYVD0o2FWc/ATk4Jj1MOzABOU8uLS8vNg9sMgIBORAWFQ9PNhVsRAE5OCs9LDJAMAE5OCEuLS8vOw9xMgIBORAWFRYPTUQVbEIBOUYpSyowOzABOTYvLi0vLy8vOQ9zQgIBORAWFQ9MNhVpQQE5OCg9UD4wATlRLi0vLzgPbjICATkQFhUWGBkPTBoZGhwdExkVgKoRXUEBOQxEUBBIMVA9ATk1UC4tLy8rNTcvLyIkOA+AtiZhExYYFxkXCgIBORAWFRgZD00aShWAljpCATkMGkk1Hk4qMD0BOTZCLi0rNTcvLyIkOQ+AoCY1ExYXGRcKAgE5EBYVD0w2FWZBATk4KD1QTDABOVEuLS8vOA9rMgIBORBLPRlFNwE5SjkVGwMBOT8uLSQqSy8CATlNNVE6ATlFMRgeAwE5OjItSCYCATk1ATlGNg1VATlDATlAGSA/ATk1ATlGPlBPATlRATlHICA2ATkQSiUVTRFTMwE5PSw0OwE5MiQqD1ALViECATkQFhIVD0hAFV09ATlCJEdIPjABOTErJC4tLy80D2Q/AgE5NQE5RjE4ATk3ATlID0tGATlFATlBGjpECV8BOTEmATlIISA2ATkQFhITDEA7FVw1ATk9HEI4PjABOUokJiYsD2M/AgE5EBYSEw86PRVcEVQwATk/F0QuPDABOUckJi4tJw9jVj4CATk1ATlGQjoBOT8wTDEBOTdLNAE5LCQkQyECATlBATk/GCAwATk3LAE5TicNYAE5UQE5RyBDATlNATlFHiA2ATk4Iz1DMjwBOU85GiADATlELi0kLzwnLwIBOUEBOT8YDVFDATk0KQE5SyQ4PQE5NCkBOUskQEgJbwE5NSoBOUwlSQ1ZLgE5SwE5RB0ODVdAATlLATlEHTtIATk2KwE5TSYPQQlWATlCOUdLRRdHATk+NUM2PEcBOUInKzU3IiRFRSI6NAIBOU8BOUYfD0sJUwE5LigzGUZBATlKL0hEMAE5Py4tNEoiAgE5NCkBOUskPkkJUgE5PwE5UDZDATlNATlFHjdBATk0KQE5SyQrRgE5TwE5Rh81IE8BOUUwRTcBOT0sFRsDATkyJCo8IQIBORAWDEYlShFvPAE5RiweJAMBOTskM0ULcCECATlIMD46ATlALBgeAwE5NSQtUAIBOTYrATlNJitIATk7MAE5UisrDWABOUczPDYBOT8vMjUwATk0Li0pTwIBOTsBOUw7RwE5NisBOU0mRkkBORAWExQTEwxAGkYVXhkkNQE5DEI4TxcdAwE5KT4wMTEqMTYxNiwPYhYhExgaFxcWCgIBORAWExQTEwxDGkYVYBkkOAE5DEI7TxogAwE5LD4wMTEqMTYxNi8PZBYhExgaFxcWCgIBOTsBOUxDATkQFhgRSTwVZj0BOT4kQ0hGATkxJys1NyIkNA9sJjQCATlBATk/GCAiATkQFhgRVDwVY0gBOT4vQzA2QQE5PCcrNTciJD8PaSY0AgE5QjVHGWtOATk+MUMyOEMBOT4nKzU3IiRBD20mNAIBORAWEUkrFV0+ATlOMiAmAwE5Qys1IjUPYSYjAgE5EBYRQSsVWTYBOUYyGB4DATk7KzUiLQ9dJiMCATk7ATlMD00sATkxJgE5SCFATAE5NisBOU0mIDMBOUMBOUAZDjM1ATk9ATlODzA1ATlDATlAGTQ5CWkBOUMBOUAZNDwBOU8BOUYfOT0BOT0BOU4PDV4uATkuKTNOQgE5Sy9KITI5CzABOUAuLTVFIgIBORAWD08oFV1FATkqLC8tM0sBOUcuLTwPYCICATlOM0k9ATlGL0A7MAE5Oy4tMEAiAgE5TjNJPQE5Ri9AOzABOTsuLTBAIgIBOU4zST0BOUYvQDswATk7Li0wQCICATkQFg9OKBVYRAE5US8sMjABOUYuLTsPWyICATlHATlCGz4BOUszTjoBOUMvOjcBOTguLS1FIgIBOVAzGUo/ATlIL0Q3ATk9Li0yTiICATlLATlEHTorRQE5EBYYEU08FXVBATk+KENQRgE5NScrNTciJDgPeyY0AgE5Oi8BOVEqIDUBOTEmATlIIQ8NUEwBOTEmATlIIQ9DOQE5PQE5Ti8BOS4rMxlQRAE5TS9OSAE5Qi4tNw9PIgIBOUEBOT8YOjsBOU8BOUYfSkoBOTAyNVBLATksLjEvNUIBOUsyPkcmAgE5EBYTDD8yFU4zATlKOTRCMAE5PzAxKg9TNgIBORAWEwxAMhVSRjQBOUs5Nj8wATlAMDErD1c/NgIBOUEBOT8YD0AJZQE5OQE5Sg8NTiYBOUsxQTwBOUMtPkMwATk4MC84JAIBOS4qMxlJPkMBOUwvTDsBOUEuLTZNMyICATlDATlAGQ9FRAE5RTM5NAE5PS8uNDABOTIuLSdMAgE5TT05MgE5RTkQFgMBOTouLSQlMi8CATlDJEhDPQE5PyBEGyEDATlQLi0kJjA+PgIBOTInATlJIjVLATkuLjNIRwE5UFExJQE5RS4tOj8iAgE5NSoBOUwlQ0EBOTMoATlKI0QrRgE5NywBOU4nRA1YATk9ATlODkA7ATlFATlBGj5DATkQFhURPjgVSBF4MwE5UD80NgE5RS4tKzUiKg9OJgt7MQIBORAWFRE+OBVIEW8zATlQPzQ2ATlFLi0rNSIqD04mC3IxAgE5EBYVET44FUgReDMBOVA/NDYBOUUuLSs1IioPTiYLezECATlRATlHIDwNgIhAATlIMz03ATlALzQ2ATk1ICo0JAIBOT0dQko2ATlOPjI0ATlDMiApQzYCATkQFhUPTzYVVkQBOTgrPSwyLzABOTghLi0vLzsPXTICATlGNSkzATk+MREXAwE5MzImQAIBOUwzSjsBOUQvPDoBOTkgLkEkAgE5SwE5RB0zMyQBOUcBOUIbQEUBOUAhRRlJOgE5PB1BOkEBOUoyMy1POgIBOUMBOS1PATlHMDM5ATk/LDg4ATk0JCxFAgE5LigzOEEBOUovSCUBOT8uLTRLAgE5OwE5TFEBOTsBOUwPNQljATk9ATlOM0kBORAWFw9VOhVYEYCqSAE5PC9BKjADATk8JTIzPw9bgK46AgE5QwE5QBkPSEgBOUMBOUAZQQ1iATlDATlAGTdPATZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZmFzdGFfY29kZXNfZ2VuZXJhdGVkLmRhcnQyc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NldmVyaXR5LmRhcnSFLS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNldmVyaXR5OwoKZW51bSBTZXZlcml0eSB7CiAgY29udGV4dCwKICBlcnJvciwKICBlcnJvckxlZ2FjeVdhcm5pbmcsCiAgaWdub3JlZCwKICBpbnRlcm5hbFByb2JsZW0sCiAgd2FybmluZywKfQoKY29uc3QgTWFwPFN0cmluZywgU3RyaW5nPiBzZXZlcml0eUVudW1OYW1lcyA9IGNvbnN0IDxTdHJpbmcsIFN0cmluZz57CiAgJ0NPTlRFWFQnOiAnY29udGV4dCcsCiAgJ0VSUk9SJzogJ2Vycm9yJywKICAnRVJST1JfTEVHQUNZX1dBUk5JTkcnOiAnZXJyb3JMZWdhY3lXYXJuaW5nJywKICAnSUdOT1JFRCc6ICdpZ25vcmVkJywKICAnSU5URVJOQUxfUFJPQkxFTSc6ICdpbnRlcm5hbFByb2JsZW0nLAogICdXQVJOSU5HJzogJ3dhcm5pbmcnLAp9OwoKY29uc3QgTWFwPFN0cmluZywgU2V2ZXJpdHk+IHNldmVyaXR5RW51bVZhbHVlcyA9IGNvbnN0IDxTdHJpbmcsIFNldmVyaXR5PnsKICAnQ09OVEVYVCc6IFNldmVyaXR5LmNvbnRleHQsCiAgJ0VSUk9SJzogU2V2ZXJpdHkuZXJyb3IsCiAgJ0VSUk9SX0xFR0FDWV9XQVJOSU5HJzogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICdJR05PUkVEJzogU2V2ZXJpdHkuaWdub3JlZCwKICAnSU5URVJOQUxfUFJPQkxFTSc6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAnV0FSTklORyc6IFNldmVyaXR5Lndhcm5pbmcsCn07Cgpjb25zdCBNYXA8U2V2ZXJpdHksIFN0cmluZz4gc2V2ZXJpdHlQcmVmaXhlcyA9IGNvbnN0IDxTZXZlcml0eSwgU3RyaW5nPnsKICBTZXZlcml0eS5lcnJvcjogIkVycm9yIiwKICBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW06ICJJbnRlcm5hbCBwcm9ibGVtIiwKICBTZXZlcml0eS53YXJuaW5nOiAiV2FybmluZyIsCiAgU2V2ZXJpdHkuY29udGV4dDogIkNvbnRleHQiLAp9OwoKY29uc3QgTWFwPFNldmVyaXR5LCBTdHJpbmc+IHNldmVyaXR5VGV4dHMgPSBjb25zdCA8U2V2ZXJpdHksIFN0cmluZz57CiAgU2V2ZXJpdHkuZXJyb3I6ICJlcnJvciIsCiAgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtOiAiaW50ZXJuYWwgcHJvYmxlbSIsCiAgU2V2ZXJpdHkud2FybmluZzogIndhcm5pbmciLAogIFNldmVyaXR5LmNvbnRleHQ6ICJjb250ZXh0IiwKfTsKMABOTjwBGAEQCwkWCxMLAgFGGBQwGCkYAwFLHxs3HzAfAwFJGzAfHwMBRhswHx8DASlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2V2ZXJpdHkuZGFydDlzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMva2VybmVsX2dlbmVyYXRvcl9pbXBsLmRhcnSfbC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gRGVmaW5lcyB0aGUgZnJvbnQtZW5kIEFQSSBmb3IgY29udmVydGluZyBzb3VyY2UgY29kZSB0byBEYXJ0IEtlcm5lbCBvYmplY3RzLgpsaWJyYXJ5IGZyb250X2VuZC5rZXJuZWxfZ2VuZXJhdG9yX2ltcGw7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9hcGkuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnIHNob3cgQ29tcG9uZW50LCBDYW5vbmljYWxOYW1lOwoKaW1wb3J0ICdiYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnQnIHNob3cgUHJvY2Vzc2VkT3B0aW9uczsKCmltcG9ydCAnZmFzdGEvY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnZmFzdGEvY3Jhc2guZGFydCcgc2hvdyB3aXRoQ3Jhc2hSZXBvcnRpbmc7CgppbXBvcnQgJ2Zhc3RhL2RpbGwvZGlsbF90YXJnZXQuZGFydCcgc2hvdyBEaWxsVGFyZ2V0OwoKaW1wb3J0ICdmYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICdmYXN0YS9rZXJuZWwva2VybmVsX3RhcmdldC5kYXJ0JyBzaG93IEtlcm5lbFRhcmdldDsKCmltcG9ydCAnZmFzdGEva2VybmVsL3V0aWxzLmRhcnQnIHNob3cgcHJpbnRDb21wb25lbnRUZXh0LCBzZXJpYWxpemVDb21wb25lbnQ7CgppbXBvcnQgJ2Zhc3RhL2tlcm5lbC92ZXJpZmllci5kYXJ0JyBzaG93IHZlcmlmeUNvbXBvbmVudDsKCmltcG9ydCAnZmFzdGEvbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICdmYXN0YS9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICdmYXN0YS91cmlfdHJhbnNsYXRvci5kYXJ0JyBzaG93IFVyaVRyYW5zbGF0b3I7CgppbXBvcnQgJ2FwaV9wcm90b3R5cGUvZnJvbnRfZW5kLmRhcnQnIHNob3cgQ29tcGlsZXJSZXN1bHQ7CgppbXBvcnQgJ2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKLy8vIEltcGxlbWVudGF0aW9uIGZvciB0aGUKLy8vIGBwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9rZXJuZWxfZ2VuZXJhdG9yLmRhcnRgIGFuZAovLy8gYHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL3N1bW1hcnlfZ2VuZXJhdG9yLmRhcnRgIEFQSXMuCkZ1dHVyZTxDb21waWxlclJlc3VsdD4gZ2VuZXJhdGVLZXJuZWwoUHJvY2Vzc2VkT3B0aW9ucyBvcHRpb25zLAogICAge2Jvb2wgYnVpbGRTdW1tYXJ5OiBmYWxzZSwKICAgIGJvb2wgYnVpbGRDb21wb25lbnQ6IHRydWUsCiAgICBib29sIHRydW5jYXRlU3VtbWFyeTogZmFsc2UsCiAgICBib29sIGluY2x1ZGVPZmZzZXRzOiB0cnVlLAogICAgYm9vbCBpbmNsdWRlSGllcmFyY2h5QW5kQ29yZVR5cGVzOiBmYWxzZX0pIGFzeW5jIHsKICByZXR1cm4gYXdhaXQgQ29tcGlsZXJDb250ZXh0LnJ1bldpdGhPcHRpb25zKG9wdGlvbnMsIChfKSBhc3luYyB7CiAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVLZXJuZWxJbnRlcm5hbCgKICAgICAgICBidWlsZFN1bW1hcnk6IGJ1aWxkU3VtbWFyeSwKICAgICAgICBidWlsZENvbXBvbmVudDogYnVpbGRDb21wb25lbnQsCiAgICAgICAgdHJ1bmNhdGVTdW1tYXJ5OiB0cnVuY2F0ZVN1bW1hcnksCiAgICAgICAgaW5jbHVkZU9mZnNldHM6IGluY2x1ZGVPZmZzZXRzLAogICAgICAgIGluY2x1ZGVIaWVyYXJjaHlBbmRDb3JlVHlwZXM6IGluY2x1ZGVIaWVyYXJjaHlBbmRDb3JlVHlwZXMpOwogIH0pOwp9CgpGdXR1cmU8Q29tcGlsZXJSZXN1bHQ+IGdlbmVyYXRlS2VybmVsSW50ZXJuYWwoCiAgICB7Ym9vbCBidWlsZFN1bW1hcnk6IGZhbHNlLAogICAgYm9vbCBidWlsZENvbXBvbmVudDogdHJ1ZSwKICAgIGJvb2wgdHJ1bmNhdGVTdW1tYXJ5OiBmYWxzZSwKICAgIGJvb2wgaW5jbHVkZU9mZnNldHM6IHRydWUsCiAgICBib29sIHJldGFpbkRhdGFGb3JUZXN0aW5nOiBmYWxzZSwKICAgIGJvb2wgaW5jbHVkZUhpZXJhcmNoeUFuZENvcmVUeXBlczogZmFsc2V9KSBhc3luYyB7CiAgUHJvY2Vzc2VkT3B0aW9ucyBvcHRpb25zID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9uczsKICBGaWxlU3lzdGVtIGZzID0gb3B0aW9ucy5maWxlU3lzdGVtOwoKICBMb2FkZXIgc291cmNlTG9hZGVyOwogIHJldHVybiB3aXRoQ3Jhc2hSZXBvcnRpbmc8Q29tcGlsZXJSZXN1bHQ+KCgpIGFzeW5jIHsKICAgIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciA9IGF3YWl0IG9wdGlvbnMuZ2V0VXJpVHJhbnNsYXRvcigpOwoKICAgIERpbGxUYXJnZXQgZGlsbFRhcmdldCA9CiAgICAgICAgbmV3IERpbGxUYXJnZXQob3B0aW9ucy50aWNrZXIsIHVyaVRyYW5zbGF0b3IsIG9wdGlvbnMudGFyZ2V0KTsKCiAgICBTZXQ8VXJpPiBleHRlcm5hbExpYnMoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgICByZXR1cm4gY29tcG9uZW50LmxpYnJhcmllcwogICAgICAgICAgLndoZXJlKChsaWIpID0+IGxpYi5pc0V4dGVybmFsKQogICAgICAgICAgLm1hcCgobGliKSA9PiBsaWIuaW1wb3J0VXJpKQogICAgICAgICAgLnRvU2V0KCk7CiAgICB9CgogICAgQ29tcG9uZW50IHNka1N1bW1hcnkgPSBhd2FpdCBvcHRpb25zLmxvYWRTZGtTdW1tYXJ5KG51bGwpOwogICAgLy8gQnkgdXNpbmcgdGhlIG5hbWVSb290IG9mIHRoZSB0aGUgc3VtbWFyeSwgd2UgZW5hYmxlIHNoYXJpbmcgdGhlCiAgICAvLyBzZGtTdW1tYXJ5IGJldHdlZW4gbXVsdGlwbGUgaW52b2NhdGlvbnMuCiAgICBDYW5vbmljYWxOYW1lIG5hbWVSb290ID0gc2RrU3VtbWFyeT8ucm9vdCA/PyBuZXcgQ2Fub25pY2FsTmFtZS5yb290KCk7CiAgICBpZiAoc2RrU3VtbWFyeSAhPSBudWxsKSB7CiAgICAgIFNldDxVcmk+IGV4Y2x1ZGVkID0gZXh0ZXJuYWxMaWJzKHNka1N1bW1hcnkpOwogICAgICBkaWxsVGFyZ2V0LmxvYWRlci5hcHBlbmRMaWJyYXJpZXMoc2RrU3VtbWFyeSwKICAgICAgICAgIGZpbHRlcjogKHVyaSkgPT4gIWV4Y2x1ZGVkLmNvbnRhaW5zKHVyaSkpOwogICAgfQoKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHByb3ZpZGUgYmV0dGVyIGVycm9yIHJlcG9ydGluZyBpZiBpbnB1dCBzdW1tYXJpZXMgb3IKICAgIC8vIGxpbmtlZCBkZXBlbmRlbmNpZXMgd2VyZSBsaXN0ZWQgb3V0IG9mIG9yZGVyIChvciBwcm92aWRlIG1lY2hhbmlzbSB0bwogICAgLy8gc29ydCB0aGVtKS4KICAgIGZvciAoQ29tcG9uZW50IGlucHV0U3VtbWFyeSBpbiBhd2FpdCBvcHRpb25zLmxvYWRJbnB1dFN1bW1hcmllcyhuYW1lUm9vdCkpIHsKICAgICAgU2V0PFVyaT4gZXhjbHVkZWQgPSBleHRlcm5hbExpYnMoaW5wdXRTdW1tYXJ5KTsKICAgICAgZGlsbFRhcmdldC5sb2FkZXIuYXBwZW5kTGlicmFyaWVzKGlucHV0U3VtbWFyeSwKICAgICAgICAgIGZpbHRlcjogKHVyaSkgPT4gIWV4Y2x1ZGVkLmNvbnRhaW5zKHVyaSkpOwogICAgfQoKICAgIC8vIEFsbCBzdW1tYXJpZXMgYXJlIGNvbnNpZGVyZWQgZXh0ZXJuYWwgYW5kIHNob3VsZG4ndCBpbmNsdWRlIHNvdXJjZS1pbmZvLgogICAgZGlsbFRhcmdldC5sb2FkZXIubGlicmFyaWVzLmZvckVhY2goKGxpYikgewogICAgICAvLyBUT0RPKGFoZSk6IERvbid0IGRvIHRoaXMsIGFuZCByZW1vdmUgW2V4dGVybmFsX3N0YXRlX3NuYXBzaG90LmRhcnRdLgogICAgICBsaWIuaXNFeHRlcm5hbCA9IHRydWU7CiAgICB9KTsKCiAgICAvLyBMaW5rZWQgZGVwZW5kZW5jaWVzIGFyZSBtZWFudCB0byBiZSBwYXJ0IG9mIHRoZSBjb21wb25lbnQgc28gdGhleSBhcmUgbm90CiAgICAvLyBtYXJrZWQgZXh0ZXJuYWwuCiAgICBmb3IgKENvbXBvbmVudCBkZXBlbmRlbmN5IGluIGF3YWl0IG9wdGlvbnMubG9hZExpbmtEZXBlbmRlbmNpZXMobmFtZVJvb3QpKSB7CiAgICAgIFNldDxVcmk+IGV4Y2x1ZGVkID0gZXh0ZXJuYWxMaWJzKGRlcGVuZGVuY3kpOwogICAgICBkaWxsVGFyZ2V0LmxvYWRlci5hcHBlbmRMaWJyYXJpZXMoZGVwZW5kZW5jeSwKICAgICAgICAgIGZpbHRlcjogKHVyaSkgPT4gIWV4Y2x1ZGVkLmNvbnRhaW5zKHVyaSkpOwogICAgfQoKICAgIGF3YWl0IGRpbGxUYXJnZXQuYnVpbGRPdXRsaW5lcygpOwoKICAgIEtlcm5lbFRhcmdldCBrZXJuZWxUYXJnZXQgPQogICAgICAgIG5ldyBLZXJuZWxUYXJnZXQoZnMsIGZhbHNlLCBkaWxsVGFyZ2V0LCB1cmlUcmFuc2xhdG9yKTsKICAgIHNvdXJjZUxvYWRlciA9IGtlcm5lbFRhcmdldC5sb2FkZXI7CiAgICBrZXJuZWxUYXJnZXQuc2V0RW50cnlQb2ludHMob3B0aW9ucy5pbnB1dHMpOwogICAgQ29tcG9uZW50IHN1bW1hcnlDb21wb25lbnQgPQogICAgICAgIGF3YWl0IGtlcm5lbFRhcmdldC5idWlsZE91dGxpbmVzKG5hbWVSb290OiBuYW1lUm9vdCk7CiAgICBMaXN0PGludD4gc3VtbWFyeSA9IG51bGw7CiAgICBpZiAoYnVpbGRTdW1tYXJ5KSB7CiAgICAgIGlmIChvcHRpb25zLnZlcmlmeSkgewogICAgICAgIGZvciAoTG9jYXRlZE1lc3NhZ2UgZXJyb3IgaW4gdmVyaWZ5Q29tcG9uZW50KHN1bW1hcnlDb21wb25lbnQpKSB7CiAgICAgICAgICBvcHRpb25zLnJlcG9ydChlcnJvciwgU2V2ZXJpdHkuZXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAob3B0aW9ucy5kZWJ1Z0R1bXApIHsKICAgICAgICBwcmludENvbXBvbmVudFRleHQoc3VtbWFyeUNvbXBvbmVudCwKICAgICAgICAgICAgbGlicmFyeUZpbHRlcjoga2VybmVsVGFyZ2V0LmlzU291cmNlTGlicmFyeSk7CiAgICAgIH0KCiAgICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdGVkIGNvbXBvbmVudCAoInRydW5jYXRpbmciIG9yIG5vdCkuCiAgICAgIC8vCiAgICAgIC8vIE5vdGU6IHdlIGRvbid0IHBhc3MgdGhlIGxpYnJhcnkgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yIHRvCiAgICAgIC8vIHByZXNlcnZlIHRoZSB0aGUgbGlicmFyaWVzIHBhcmVudCBwb2ludGVyIChpdCBzaG91bGQgY29udGludWUgdG8gcG9pbnQKICAgICAgLy8gdG8gdGhlIGNvbXBvbmVudCB3aXRoaW4gS2VybmVsVGFyZ2V0KS4KICAgICAgQ29tcG9uZW50IHRyaW1tZWRTdW1tYXJ5Q29tcG9uZW50ID0KICAgICAgICAgIG5ldyBDb21wb25lbnQobmFtZVJvb3Q6IHN1bW1hcnlDb21wb25lbnQucm9vdCkKICAgICAgICAgICAgLi5saWJyYXJpZXMuYWRkQWxsKHRydW5jYXRlU3VtbWFyeQogICAgICAgICAgICAgICAgPyBrZXJuZWxUYXJnZXQubG9hZGVyLmxpYnJhcmllcwogICAgICAgICAgICAgICAgOiBzdW1tYXJ5Q29tcG9uZW50LmxpYnJhcmllcyk7CiAgICAgIHRyaW1tZWRTdW1tYXJ5Q29tcG9uZW50Lm1ldGFkYXRhLmFkZEFsbChzdW1tYXJ5Q29tcG9uZW50Lm1ldGFkYXRhKTsKICAgICAgdHJpbW1lZFN1bW1hcnlDb21wb25lbnQudXJpVG9Tb3VyY2UuYWRkQWxsKHN1bW1hcnlDb21wb25lbnQudXJpVG9Tb3VyY2UpOwoKICAgICAgLy8gQXMgZG9jdW1lbnRlZCwgd2Ugb25seSBydW4gb3V0bGluZSB0cmFuc2Zvcm1hdGlvbnMgd2hlbiB3ZSBhcmUgYnVpbGRpbmcKICAgICAgLy8gc3VtbWFyaWVzIHdpdGhvdXQgYnVpbGRpbmcgYSBmdWxsIGNvbXBvbmVudCAoYXQgdGhpcyB0aW1lLCB0aGF0J3MKICAgICAgLy8gdGhlIG9ubHkgbmVlZCB3ZSBoYXZlIGZvciB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMpLgogICAgICBpZiAoIWJ1aWxkQ29tcG9uZW50KSB7CiAgICAgICAgb3B0aW9ucy50YXJnZXQucGVyZm9ybU91dGxpbmVUcmFuc2Zvcm1hdGlvbnModHJpbW1lZFN1bW1hcnlDb21wb25lbnQpOwogICAgICAgIG9wdGlvbnMudGlja2VyLmxvZ01zKCJUcmFuc2Zvcm1lZCBvdXRsaW5lIik7CiAgICAgIH0KICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBzb3VyY2UgKGJ1dCBkbyBhZGQgaXQgYWJvdmUgdG8gaW5jbHVkZSBpbXBvcnRVcmlzKS4KICAgICAgc3VtbWFyeSA9IHNlcmlhbGl6ZUNvbXBvbmVudCh0cmltbWVkU3VtbWFyeUNvbXBvbmVudCwKICAgICAgICAgIGluY2x1ZGVTb3VyY2VzOiBmYWxzZSwgaW5jbHVkZU9mZnNldHM6IGluY2x1ZGVPZmZzZXRzKTsKICAgICAgb3B0aW9ucy50aWNrZXIubG9nTXMoIkdlbmVyYXRlZCBvdXRsaW5lIik7CiAgICB9CgogICAgQ29tcG9uZW50IGNvbXBvbmVudDsKICAgIGlmIChidWlsZENvbXBvbmVudCkgewogICAgICBjb21wb25lbnQgPSBhd2FpdCBrZXJuZWxUYXJnZXQuYnVpbGRDb21wb25lbnQodmVyaWZ5OiBvcHRpb25zLnZlcmlmeSk7CiAgICAgIGlmIChvcHRpb25zLmRlYnVnRHVtcCkgewogICAgICAgIHByaW50Q29tcG9uZW50VGV4dChjb21wb25lbnQsCiAgICAgICAgICAgIGxpYnJhcnlGaWx0ZXI6IGtlcm5lbFRhcmdldC5pc1NvdXJjZUxpYnJhcnkpOwogICAgICB9CiAgICAgIG9wdGlvbnMudGlja2VyLmxvZ01zKCJHZW5lcmF0ZWQgY29tcG9uZW50Iik7CiAgICB9CgogICAgcmV0dXJuIG5ldyBJbnRlcm5hbENvbXBpbGVyUmVzdWx0KAogICAgICAgIHN1bW1hcnk6IHN1bW1hcnksCiAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsCiAgICAgICAgY2xhc3NIaWVyYXJjaHk6CiAgICAgICAgICAgIGluY2x1ZGVIaWVyYXJjaHlBbmRDb3JlVHlwZXMgPyBrZXJuZWxUYXJnZXQubG9hZGVyLmhpZXJhcmNoeSA6IG51bGwsCiAgICAgICAgY29yZVR5cGVzOgogICAgICAgICAgICBpbmNsdWRlSGllcmFyY2h5QW5kQ29yZVR5cGVzID8ga2VybmVsVGFyZ2V0LmxvYWRlci5jb3JlVHlwZXMgOiBudWxsLAogICAgICAgIGRlcHM6IG5ldyBMaXN0PFVyaT4uZnJvbShDb21waWxlckNvbnRleHQuY3VycmVudC5kZXBlbmRlbmNpZXMpLAogICAgICAgIGtlcm5lbFRhcmdldEZvclRlc3Rpbmc6IHJldGFpbkRhdGFGb3JUZXN0aW5nID8ga2VybmVsVGFyZ2V0IDogbnVsbCk7CiAgfSwgKCkgPT4gc291cmNlTG9hZGVyPy5jdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmcgPz8gb3B0aW9ucy5pbnB1dHMuZmlyc3QpOwp9CgovLy8gUmVzdWx0IG9iamVjdCBvZiBbZ2VuZXJhdGVLZXJuZWxdLgpjbGFzcyBJbnRlcm5hbENvbXBpbGVyUmVzdWx0IGltcGxlbWVudHMgQ29tcGlsZXJSZXN1bHQgewogIC8vLyBUaGUgZ2VuZXJhdGVkIHN1bW1hcnkgYnl0ZXMsIGlmIGl0IHdhcyByZXF1ZXN0ZWQuCiAgZmluYWwgTGlzdDxpbnQ+IHN1bW1hcnk7CgogIC8vLyBUaGUgZ2VuZXJhdGVkIGNvbXBvbmVudCwgaWYgaXQgd2FzIHJlcXVlc3RlZC4KICBmaW5hbCBDb21wb25lbnQgY29tcG9uZW50OwoKICAvLy8gRGVwZW5kZW5jaWVzIHRyYXZlcnNlZCBieSB0aGUgY29tcGlsZXIuIFVzZWQgb25seSBmb3IgZ2VuZXJhdGluZwogIC8vLyBkZXBlbmRlbmN5IC5HTiBmaWxlcyBpbiB0aGUgZGFydC1zZGsgYnVpbGQgc3lzdGVtLgogIC8vLyBOb3RlIHRoaXMgbWlnaHQgYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byBjb21wdXRlIGRlcGVuZGVuY2llcyB3aXRob3V0CiAgLy8vIHVzaW5nIHRoZSBjb21waWxlciBpdHNlbGYuCiAgZmluYWwgTGlzdDxVcmk+IGRlcHM7CgogIGZpbmFsIENsYXNzSGllcmFyY2h5IGNsYXNzSGllcmFyY2h5OwoKICBmaW5hbCBDb3JlVHlwZXMgY29yZVR5cGVzOwoKICAvLy8gVGhlIFtLZXJuZWxUYXJnZXRdIHVzZWQgdG8gZ2VuZXJhdGVkIHRoZSBjb21wb25lbnQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgb25seSBwcm92aWRlZCBmb3IgdXNlIGluIHRlc3RpbmcuCiAgZmluYWwgS2VybmVsVGFyZ2V0IGtlcm5lbFRhcmdldEZvclRlc3Rpbmc7CgogIEludGVybmFsQ29tcGlsZXJSZXN1bHQoCiAgICAgIHt0aGlzLnN1bW1hcnksCiAgICAgIHRoaXMuY29tcG9uZW50LAogICAgICB0aGlzLmRlcHMsCiAgICAgIHRoaXMuY2xhc3NIaWVyYXJjaHksCiAgICAgIHRoaXMuY29yZVR5cGVzLAogICAgICB0aGlzLmtlcm5lbFRhcmdldEZvclRlc3Rpbmd9KTsKfQqA1wBOTjwBUSkBIQE9QwE8ATsBMwE2ATUBPAFOAToBKAEsATcBOwE5ARtER0AfHyEfN0MpJCgqKEUGAgEvHx8hHyY3PiYBFzdEARxHATEhKicUBgE/RzBLHjQ0NQYBS00TUTY2NQYBUDBOHQgBURhRNDQ1BgEmASBAKDEhPh4YHEoxCggfLToIAT8JSFAwKjkvMC9KUAFRSzsdTzUISzxCMQYBGRpNHyY6CDMGAScaHhhRE1FITU8CASc5OBsBNB0BRzlQIRgBJwEdAToGMC0BGhUWERsWJQIBMHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9rZXJuZWxfZ2VuZXJhdG9yX2ltcGwuZGFydDFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci5kYXJ0jNAvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjYW5uZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lLCB1dGY4OwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJ3NjYW5uZXIvYWJzdHJhY3Rfc2Nhbm5lci5kYXJ0JwogICAgc2hvdyBMYW5ndWFnZVZlcnNpb25DaGFuZ2VkLCBTY2FubmVyQ29uZmlndXJhdGlvbjsKCmltcG9ydCAnc2Nhbm5lci9zdHJpbmdfc2Nhbm5lci5kYXJ0JyBzaG93IFN0cmluZ1NjYW5uZXI7CgppbXBvcnQgJ3NjYW5uZXIvdXRmOF9ieXRlc19zY2FubmVyLmRhcnQnIHNob3cgVXRmOEJ5dGVzU2Nhbm5lcjsKCmltcG9ydCAnc2Nhbm5lci9yZWNvdmVyLmRhcnQnIHNob3cgc2Nhbm5lclJlY292ZXJ5OwoKZXhwb3J0ICdzY2FubmVyL2Fic3RyYWN0X3NjYW5uZXIuZGFydCcKICAgIHNob3cgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCwgU2Nhbm5lckNvbmZpZ3VyYXRpb247CgpleHBvcnQgJ3NjYW5uZXIvdG9rZW4uZGFydCcKICAgIHNob3cKICAgICAgICBMYW5ndWFnZVZlcnNpb25Ub2tlbiwKICAgICAgICBTdHJpbmdUb2tlbiwKICAgICAgICBpc0JpbmFyeU9wZXJhdG9yLAogICAgICAgIGlzTWludXNPcGVyYXRvciwKICAgICAgICBpc1Rlcm5hcnlPcGVyYXRvciwKICAgICAgICBpc1VuYXJ5T3BlcmF0b3IsCiAgICAgICAgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I7CgpleHBvcnQgJ3NjYW5uZXIvZXJyb3JfdG9rZW4uZGFydCcKICAgIHNob3cgRXJyb3JUb2tlbiwgYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyVG9rZW47CgpleHBvcnQgJ3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBMYW5ndWFnZVZlcnNpb25Ub2tlbjsKCmV4cG9ydCAnc2Nhbm5lci90b2tlbl9jb25zdGFudHMuZGFydCcgc2hvdyBFT0ZfVE9LRU47CgpleHBvcnQgJ3NjYW5uZXIvdXRmOF9ieXRlc19zY2FubmVyLmRhcnQnIHNob3cgVXRmOEJ5dGVzU2Nhbm5lcjsKCmV4cG9ydCAnc2Nhbm5lci9zdHJpbmdfc2Nhbm5lci5kYXJ0JyBzaG93IFN0cmluZ1NjYW5uZXI7CgpleHBvcnQgJy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBLZXl3b3JkLCBUb2tlbjsKCmNvbnN0IGludCB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIgPSB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lOwoKdHlwZWRlZiBUb2tlbiBSZWNvdmVyKExpc3Q8aW50PiBieXRlcywgVG9rZW4gdG9rZW5zLCBMaXN0PGludD4gbGluZVN0YXJ0cyk7CgphYnN0cmFjdCBjbGFzcyBTY2FubmVyIHsKICAvLy8gUmV0dXJucyB0cnVlIGlmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBbdG9rZW5pemVdLgogIGJvb2wgZ2V0IGhhc0Vycm9yczsKCiAgTGlzdDxpbnQ+IGdldCBsaW5lU3RhcnRzOwoKICAvLy8gQ29uZmlndXJlIHdoaWNoIHRva2VucyBhcmUgcHJvZHVjZWQuCiAgc2V0IGNvbmZpZ3VyYXRpb24oU2Nhbm5lckNvbmZpZ3VyYXRpb24gY29uZmlnKTsKCiAgVG9rZW4gdG9rZW5pemUoKTsKfQoKY2xhc3MgU2Nhbm5lclJlc3VsdCB7CiAgZmluYWwgVG9rZW4gdG9rZW5zOwogIGZpbmFsIExpc3Q8aW50PiBsaW5lU3RhcnRzOwogIGZpbmFsIGJvb2wgaGFzRXJyb3JzOwoKICBTY2FubmVyUmVzdWx0KHRoaXMudG9rZW5zLCB0aGlzLmxpbmVTdGFydHMsIHRoaXMuaGFzRXJyb3JzKTsKfQoKLy8vIFNjYW4vdG9rZW5pemUgdGhlIGdpdmVuIFVURjggW2J5dGVzXS4KU2Nhbm5lclJlc3VsdCBzY2FuKExpc3Q8aW50PiBieXRlcywKICAgIHtTY2FubmVyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLAogICAgYm9vbCBpbmNsdWRlQ29tbWVudHM6IGZhbHNlLAogICAgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkfSkgewogIGlmIChieXRlcy5sYXN0ICE9IDApIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJbYnl0ZXNdOiB0aGUgbGFzdCBieXRlIG11c3QgYmUgbnVsbC4iKTsKICB9CiAgU2Nhbm5lciBzY2FubmVyID0gbmV3IFV0ZjhCeXRlc1NjYW5uZXIoYnl0ZXMsCiAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sCiAgICAgIGluY2x1ZGVDb21tZW50czogaW5jbHVkZUNvbW1lbnRzLAogICAgICBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkOiBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkKTsKICByZXR1cm4gX3Rva2VuaXplQW5kUmVjb3ZlcihzY2FubmVyLCBieXRlczogYnl0ZXMpOwp9CgovLy8gU2Nhbi90b2tlbml6ZSB0aGUgZ2l2ZW4gW3NvdXJjZV0uClNjYW5uZXJSZXN1bHQgc2NhblN0cmluZyhTdHJpbmcgc291cmNlLAogICAge1NjYW5uZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sCiAgICBib29sIGluY2x1ZGVDb21tZW50czogZmFsc2UsCiAgICBMYW5ndWFnZVZlcnNpb25DaGFuZ2VkIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWR9KSB7CiAgYXNzZXJ0KHNvdXJjZSAhPSBudWxsLCAnc291cmNlIG11c3Qgbm90IGJlIG51bGwnKTsKICBTdHJpbmdTY2FubmVyIHNjYW5uZXIgPSBuZXcgU3RyaW5nU2Nhbm5lcihzb3VyY2UsCiAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sCiAgICAgIGluY2x1ZGVDb21tZW50czogaW5jbHVkZUNvbW1lbnRzLAogICAgICBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkOiBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkKTsKICByZXR1cm4gX3Rva2VuaXplQW5kUmVjb3ZlcihzY2FubmVyLCBzb3VyY2U6IHNvdXJjZSk7Cn0KClNjYW5uZXJSZXN1bHQgX3Rva2VuaXplQW5kUmVjb3ZlcihTY2FubmVyIHNjYW5uZXIsCiAgICB7TGlzdDxpbnQ+IGJ5dGVzLCBTdHJpbmcgc291cmNlfSkgewogIFRva2VuIHRva2VucyA9IHNjYW5uZXIudG9rZW5pemUoKTsKICBpZiAoc2Nhbm5lci5oYXNFcnJvcnMpIHsKICAgIGlmIChieXRlcyA9PSBudWxsKSBieXRlcyA9IHV0ZjguZW5jb2RlKHNvdXJjZSk7CiAgICB0b2tlbnMgPSBzY2FubmVyUmVjb3ZlcnkoYnl0ZXMsIHRva2Vucywgc2Nhbm5lci5saW5lU3RhcnRzKTsKICB9CiAgcmV0dXJuIG5ldyBTY2FubmVyUmVzdWx0KHRva2Vucywgc2Nhbm5lci5saW5lU3RhcnRzLCBzY2FubmVyLmhhc0Vycm9ycyk7Cn0KbABNTj8BFwFCASsBJzcBOQFAATQBJzcBHAkeFRoZGxkhASI0ATcBNgFAATkBNAFJAUwBGTsWARwBKzIBFAIBFhYeGAE/AgEqJCkhNhlFBDAkKDc1AgEmKCkhNjU0JCg3NwIBMyglGzRBBEsCAShwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci5kYXJ0SXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnSYhC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnJlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50LAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbnZhbGlkRXhwcmVzc2lvbiwKICAgICAgICBMZXQsCiAgICAgICAgTWVtYmVyLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgU3RyaW5nTGl0ZXJhbCwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBTdWJzdGl0dXRpb247CgppbXBvcnQgJ2JvZHlfYnVpbGRlci5kYXJ0JyBzaG93IEVuc3VyZUxvYWRlZDsKCmNvbnN0IFN0cmluZyBsZXROYW1lID0gIiNyZWRpcmVjdGluZ19mYWN0b3J5IjsKCmNsYXNzIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgZXh0ZW5kcyBFeHByZXNzaW9uU3RhdGVtZW50IHsKICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LmludGVybmFsKEV4cHJlc3Npb24gdmFsdWUsCiAgICAgIFtMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzXSkKICAgICAgOiBzdXBlcihuZXcgTGV0KG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGxldE5hbWUsIGluaXRpYWxpemVyOiB2YWx1ZSksCiAgICAgICAgICAgIGVuY29kZVR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cykpKTsKCiAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShNZW1iZXIgdGFyZ2V0LCBbTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50c10pCiAgICAgIDogdGhpcy5pbnRlcm5hbChuZXcgU3RhdGljR2V0KHRhcmdldCksIHR5cGVBcmd1bWVudHMpOwoKICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LnVucmVzb2x2ZWQoU3RyaW5nIG5hbWUpCiAgICAgIDogdGhpcy5pbnRlcm5hbChuZXcgU3RyaW5nTGl0ZXJhbChuYW1lKSk7CgogIE1lbWJlciBnZXQgdGFyZ2V0IHsKICAgIHZhciB2YWx1ZSA9IGdldFZhbHVlKGV4cHJlc3Npb24pOwogICAgcmV0dXJuIHZhbHVlIGlzIFN0YXRpY0dldCA/IHZhbHVlLnRhcmdldCA6IG51bGw7CiAgfQoKICBTdHJpbmcgZ2V0IHVucmVzb2x2ZWROYW1lIHsKICAgIHZhciB2YWx1ZSA9IGdldFZhbHVlKGV4cHJlc3Npb24pOwogICAgcmV0dXJuIHZhbHVlIGlzIFN0cmluZ0xpdGVyYWwgPyB2YWx1ZS52YWx1ZSA6IG51bGw7CiAgfQoKICBib29sIGdldCBpc1VucmVzb2x2ZWQgPT4gdW5yZXNvbHZlZE5hbWUgIT0gbnVsbDsKCiAgTGlzdDxEYXJ0VHlwZT4gZ2V0IHR5cGVBcmd1bWVudHMgewogICAgaWYgKGV4cHJlc3Npb24gaXMgTGV0KSB7CiAgICAgIExldCBib2R5RXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CiAgICAgIGlmIChib2R5RXhwcmVzc2lvbi52YXJpYWJsZS5uYW1lID09IGxldE5hbWUpIHsKICAgICAgICByZXR1cm4gZGVjb2RlVHlwZUFyZ3VtZW50cyhib2R5RXhwcmVzc2lvbi5ib2R5KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgZ2V0VmFsdWUoRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBMZXQpIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IGV4cHJlc3Npb24udmFyaWFibGU7CiAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09IGxldE5hbWUpIHsKICAgICAgICByZXR1cm4gdmFyaWFibGUuaW5pdGlhbGl6ZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgc3RhdGljIHZvaWQgcmVzdG9yZUZyb21EaWxsKFByb2NlZHVyZSBmYWN0b3J5KSB7CiAgICAvLyBUaGlzIGlzIGEgaGFjayAvIHdvcmsgYXJvdW5kIGZvciBzdG9yaW5nIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9ycyBpbgogICAgLy8gZGlsbCBmaWxlcy4gU2VlIGBDbGFzc0J1aWxkZXIuYWRkUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcmAgaW4KICAgIC8vIFtrZXJuZWxfY2xhc3NfYnVpbGRlci5kYXJ0XShrZXJuZWxfY2xhc3NfYnVpbGRlci5kYXJ0KS4KICAgIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IGZhY3RvcnkuZnVuY3Rpb247CiAgICBFeHByZXNzaW9uU3RhdGVtZW50IHN0YXRlbWVudCA9IGZ1bmN0aW9uLmJvZHk7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwogICAgaWYgKHN0YXRlbWVudC5leHByZXNzaW9uIGlzIExldCkgewogICAgICBMZXQgZXhwcmVzc2lvbiA9IHN0YXRlbWVudC5leHByZXNzaW9uOwogICAgICB0eXBlQXJndW1lbnRzID0gZGVjb2RlVHlwZUFyZ3VtZW50cyhleHByZXNzaW9uLmJvZHkpOwogICAgfQogICAgZnVuY3Rpb24uYm9keSA9IG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LmludGVybmFsKAogICAgICAgIGdldFZhbHVlKHN0YXRlbWVudC5leHByZXNzaW9uKSwgdHlwZUFyZ3VtZW50cykKICAgICAgLi5wYXJlbnQgPSBmdW5jdGlvbjsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIGVuY29kZVR5cGVBcmd1bWVudHMoTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgU3RyaW5nIHZhck5hbWVQcmVmaXggPSAiI3R5cGVBcmciOwogICAgRXhwcmVzc2lvbiByZXN1bHQgPSBuZXcgSW52YWxpZEV4cHJlc3Npb24obnVsbCk7CiAgICBpZiAodHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmb3IgKGludCBpID0gdHlwZUFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXN1bHQgPSBuZXcgTGV0KAogICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oIiR2YXJOYW1lUHJlZml4JGkiLAogICAgICAgICAgICAgIHR5cGU6IHR5cGVBcmd1bWVudHNbaV0sIGluaXRpYWxpemVyOiBuZXcgTnVsbExpdGVyYWwoKSksCiAgICAgICAgICByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBMaXN0PERhcnRUeXBlPiBkZWNvZGVUeXBlQXJndW1lbnRzKEV4cHJlc3Npb24gZW5jb2RlZCkgewogICAgaWYgKGVuY29kZWQgaXMgSW52YWxpZEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPSA8RGFydFR5cGU+W107CiAgICB3aGlsZSAoZW5jb2RlZCBpcyBMZXQpIHsKICAgICAgTGV0IGhlYWQgPSBlbmNvZGVkOwogICAgICByZXN1bHQuYWRkKGhlYWQudmFyaWFibGUudHlwZSk7CiAgICAgIGVuY29kZWQgPSBoZWFkLmJvZHk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKYm9vbCBpc1JlZGlyZWN0aW5nRmFjdG9yeShNZW1iZXIgbWVtYmVyLCB7RW5zdXJlTG9hZGVkIGhlbHBlcn0pIHsKICBhc3NlcnQoaGVscGVyID09IG51bGwgfHwgaGVscGVyLmlzTG9hZGVkKG1lbWJlcikpOwogIHJldHVybiBtZW1iZXIgaXMgUHJvY2VkdXJlICYmIG1lbWJlci5mdW5jdGlvbi5ib2R5IGlzIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHk7Cn0KClJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keShNZW1iZXIgbWVtYmVyKSB7CiAgcmV0dXJuIGlzUmVkaXJlY3RpbmdGYWN0b3J5KG1lbWJlcikgPyBtZW1iZXIuZnVuY3Rpb24uYm9keSA6IG51bGw7Cn0KCmNsYXNzIFJlZGlyZWN0aW9uVGFyZ2V0IHsKICBmaW5hbCBNZW1iZXIgdGFyZ2V0OwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIFJlZGlyZWN0aW9uVGFyZ2V0KHRoaXMudGFyZ2V0LCB0aGlzLnR5cGVBcmd1bWVudHMpOwp9CgpSZWRpcmVjdGlvblRhcmdldCBnZXRSZWRpcmVjdGlvblRhcmdldChQcm9jZWR1cmUgbWVtYmVyLCBFbnN1cmVMb2FkZWQgaGVscGVyLAogICAge2Jvb2wgbGVnYWN5TW9kZX0pIHsKICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gPERhcnRUeXBlPltdLi5sZW5ndGggPQogICAgICBtZW1iZXIuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOwogIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgdHlwZUFyZ3VtZW50c1tpXSA9IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShtZW1iZXIuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV0pOwogIH0KCiAgLy8gV2UgdXNlIHRoZSBbdG9ydG9pc2UgYW5kIGhhcmUgYWxnb3JpdGhtXQogIC8vIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DeWNsZV9kZXRlY3Rpb24jVG9ydG9pc2VfYW5kX2hhcmUpIHRvCiAgLy8gaGFuZGxlIGN5Y2xlcy4KICBNZW1iZXIgdG9ydG9pc2UgPSBtZW1iZXI7CiAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSB0b3J0b2lzZUJvZHkgPSBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRvcnRvaXNlKTsKICBNZW1iZXIgaGFyZSA9IHRvcnRvaXNlQm9keT8udGFyZ2V0OwogIGhlbHBlci5lbnN1cmVMb2FkZWQoaGFyZSk7CiAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSBoYXJlQm9keSA9IGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoaGFyZSk7CiAgd2hpbGUgKHRvcnRvaXNlICE9IGhhcmUpIHsKICAgIGlmICh0b3J0b2lzZUJvZHk/LmlzVW5yZXNvbHZlZCA/PyB0cnVlKSB7CiAgICAgIHJldHVybiBuZXcgUmVkaXJlY3Rpb25UYXJnZXQodG9ydG9pc2UsIHR5cGVBcmd1bWVudHMpOwogICAgfQogICAgTWVtYmVyIG5leHRUb3J0b2lzZSA9IHRvcnRvaXNlQm9keS50YXJnZXQ7CiAgICBoZWxwZXIuZW5zdXJlTG9hZGVkKG5leHRUb3J0b2lzZSk7CiAgICBMaXN0PERhcnRUeXBlPiBuZXh0VHlwZUFyZ3VtZW50cyA9IHRvcnRvaXNlQm9keS50eXBlQXJndW1lbnRzOwogICAgaWYgKCFsZWdhY3lNb2RlICYmIG5leHRUeXBlQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgbmV4dFR5cGVBcmd1bWVudHMgPSA8RGFydFR5cGU+W107CiAgICB9CgogICAgaWYgKCFsZWdhY3lNb2RlIHx8IG5leHRUeXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgU3Vic3RpdHV0aW9uIHN1YiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICB0b3J0b2lzZS5mdW5jdGlvbi50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CiAgICAgIHR5cGVBcmd1bWVudHMgPSA8RGFydFR5cGU+W10uLmxlbmd0aCA9IG5leHRUeXBlQXJndW1lbnRzLmxlbmd0aDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdHlwZUFyZ3VtZW50c1tpXSA9IHN1Yi5zdWJzdGl0dXRlVHlwZShuZXh0VHlwZUFyZ3VtZW50c1tpXSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIEluIERhcnQgMSwgd2UgbmVlZCB0byB0aHJvdyBhd2F5IHRoZSBleHRyYSB0eXBlIGFyZ3VtZW50cyBhbmQgdXNlCiAgICAgIC8vIGBkeW5hbWljYCBpbiBwbGFjZSBvZiB0aGUgbWlzc2luZyBvbmVzLgogICAgICBpbnQgdHlwZUFyZ3VtZW50Q291bnQgPSB0eXBlQXJndW1lbnRzLmxlbmd0aDsKICAgICAgaW50IG5leHRUeXBlQXJndW1lbnRDb3VudCA9CiAgICAgICAgICBuZXh0VG9ydG9pc2UuZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMubGVuZ3RoOwogICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCA9IG5leHRUeXBlQXJndW1lbnRDb3VudDsKICAgICAgZm9yIChpbnQgaSA9IHR5cGVBcmd1bWVudENvdW50OyBpIDwgbmV4dFR5cGVBcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgICB0eXBlQXJndW1lbnRzW2ldID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgfQogICAgfQoKICAgIHRvcnRvaXNlID0gbmV4dFRvcnRvaXNlOwogICAgdG9ydG9pc2VCb2R5ID0gZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keSh0b3J0b2lzZSk7CiAgICBoZWxwZXIuZW5zdXJlTG9hZGVkKGhhcmVCb2R5Py50YXJnZXQpOwogICAgaGFyZSA9IGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoaGFyZUJvZHk/LnRhcmdldCk/LnRhcmdldDsKICAgIGhlbHBlci5lbnN1cmVMb2FkZWQoaGFyZSk7CiAgICBoYXJlQm9keSA9IGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoaGFyZSk7CiAgfQogIHJldHVybiBudWxsOwp9CoC/AE5OPAEoASEJEhUUHRYbDRAVExMXGx0BPQEuAS8BOzQmTDIBSD0BMTABFiY1BAEeJjgEATMBJR0nNTkIBhEEASsdOiYlCAYRBAEzTEM/LjMiJy08Bjk3GwQBSCc1IRUGOhg2RxMGEwQBQigTBiodGiYbBhMEAgFCNVACAUJFAgEaFyYBNgIBThk4LTNRBAEuShQcTSYdRR0uPQYvJ0M0KAYBNDE8RzdFCA1LMTQiPTRIMAgGAR04K0AfMAQPAgFAcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9yZWRpcmVjdGluZ19mYWN0b3J5X2JvZHkuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Vuc3RhYmxlL2NvbXBpbGVyX3N0YXRlLmRhcnSGbS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0JyBzaG93IENvbXBpbGVyT3B0aW9uczsKCmltcG9ydCAnLi4vYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JyBzaG93IFByb2Nlc3NlZE9wdGlvbnM7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pbmNyZW1lbnRhbF9jb21waWxlci5kYXJ0JwogICAgc2hvdyBJbmNyZW1lbnRhbENvbXBpbGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcgc2hvdyBDb21wb25lbnQ7CgpjbGFzcyBJbml0aWFsaXplZENvbXBpbGVyU3RhdGUgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zOwogIGZpbmFsIFByb2Nlc3NlZE9wdGlvbnMgcHJvY2Vzc2VkT3B0czsKICBmaW5hbCBNYXA8VXJpLCBXb3JrZXJJbnB1dENvbXBvbmVudD4gd29ya2VySW5wdXRDYWNoZTsKICBmaW5hbCBJbmNyZW1lbnRhbENvbXBpbGVyIGluY3JlbWVudGFsQ29tcGlsZXI7CiAgZmluYWwgTWFwPFVyaSwgVXJpPiBsaWJyYXJ5VG9JbnB1dERpbGw7CgogIEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSh0aGlzLm9wdGlvbnMsIHRoaXMucHJvY2Vzc2VkT3B0cywKICAgICAge3RoaXMud29ya2VySW5wdXRDYWNoZSwKICAgICAgdGhpcy5pbmNyZW1lbnRhbENvbXBpbGVyLAogICAgICB0aGlzLmxpYnJhcnlUb0lucHV0RGlsbH0pOwp9CgovLy8gQSBjYWNoZWQgW0NvbXBvbmVudF0gZm9yIGEgc3VtbWFyeSBpbnB1dCBmaWxlLgovLy8KLy8vIFRyYWNrcyB0aGUgb3JpZ2luYWxseSBtYXJrZWQgImV4dGVybmFsIiBsaWJzIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVzdG9yZWQsCi8vLyBzaW5jZSB0aGUga2VybmVsIGdlbmVyYXRvciBtdXRhdGVzIHRoZSBzdGF0ZS4KY2xhc3MgV29ya2VySW5wdXRDb21wb25lbnQgewogIGZpbmFsIExpc3Q8aW50PiBkaWdlc3Q7CiAgZmluYWwgQ29tcG9uZW50IGNvbXBvbmVudDsKICBmaW5hbCBTZXQ8VXJpPiBleHRlcm5hbExpYnM7CiAgV29ya2VySW5wdXRDb21wb25lbnQodGhpcy5kaWdlc3QsIHRoaXMuY29tcG9uZW50KQogICAgICA6IGV4dGVybmFsTGlicyA9IGNvbXBvbmVudC5saWJyYXJpZXMKICAgICAgICAgICAgLndoZXJlKChsaWIpID0+IGxpYi5pc0V4dGVybmFsKQogICAgICAgICAgICAubWFwKChsaWIpID0+IGxpYi5pbXBvcnRVcmkpCiAgICAgICAgICAgIC50b1NldCgpOwp9Cgpib29sIGRpZ2VzdHNFcXVhbChMaXN0PGludD4gYSwgTGlzdDxpbnQ+IGIpIHsKICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgaWYgKGFbaV0gIT0gYltpXSkgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQozAE5OPAFGAT8BPx4BNAEhISg5MSoBPR4gIQIBMwRPMh0aHR80KywpFgIBLiwqJyQEDwIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvY29tcGlsZXJfc3RhdGUuZGFydDVzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Vuc3RhYmxlL3V0aWwuZGFydIL4Ly8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmJvb2wgZXF1YWxMaXN0czxUPihMaXN0PFQ+IGEsIExpc3Q8VD4gYikgewogIGlmIChpZGVudGljYWwoYSwgYikpIHJldHVybiB0cnVlOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7CiAgICBpZiAoYVtpXSAhPSBiW2ldKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9Cgpib29sIGVxdWFsTWFwczxLLCBWPihNYXA8SywgVj4gYSwgTWFwPEssIFY+IGIpIHsKICBpZiAoaWRlbnRpY2FsKGEsIGIpKSByZXR1cm4gdHJ1ZTsKICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoSyBrZXkgaW4gYS5rZXlzKSB7CiAgICBpZiAoIWIuY29udGFpbnNLZXkoa2V5KSB8fCBhW2tleV0gIT0gYltrZXldKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9ChkATk48ASskLConJAQPAgExJCwqGj8EDwIBLHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvdXRpbC5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfcHJvdG90eXBlL3N0YW5kYXJkX2ZpbGVfc3lzdGVtLmRhcnSNFy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5zdGFuZGFyZF9maWxlX3N5c3RlbTsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDppbycgYXMgaW87CgppbXBvcnQgJ2ZpbGVfc3lzdGVtLmRhcnQnOwoKaW1wb3J0ICcuLi9mYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtGaWxlU3lzdGVtXSBoYW5kbGluZyBzdGFuZGFyZCBVUkkgc2NoZW1lcy4KLy8vCi8vLyBmaWxlOiBVUklzIGFyZSBoYW5kbGVkIHVzaW5nIGZpbGUgSS9PLgovLy8gZGF0YTogVVJJcyByZXR1cm4gdGhlaXIgZGF0YSBjb250ZW50cy4KLy8vCi8vLyBOb3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgb3IgZXh0ZW5kZWQgYnkgY2xpZW50cy4KY2xhc3MgU3RhbmRhcmRGaWxlU3lzdGVtIGltcGxlbWVudHMgRmlsZVN5c3RlbSB7CiAgc3RhdGljIGZpbmFsIFN0YW5kYXJkRmlsZVN5c3RlbSBpbnN0YW5jZSA9IG5ldyBTdGFuZGFyZEZpbGVTeXN0ZW0uXygpOwoKICBTdGFuZGFyZEZpbGVTeXN0ZW0uXygpOwoKICBAb3ZlcnJpZGUKICBGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSA9PSAnZmlsZScgfHwgdXJpLnNjaGVtZSA9PSAnJykgewogICAgICAvLyBUT0RPKGFza2VzYyk6IEVtcHR5IHNjaGVtZXMgc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGVsc2V3aGVyZS4KICAgICAgcmV0dXJuIG5ldyBfSW9GaWxlU3lzdGVtRW50aXR5KFVyaS5iYXNlLnJlc29sdmVVcmkodXJpKSk7CiAgICB9IGVsc2UgaWYgKHVyaS5zY2hlbWUgPT0gJ2RhdGEnKSB7CiAgICAgIHJldHVybiBuZXcgRGF0YUZpbGVTeXN0ZW1FbnRpdHkoVXJpLmJhc2UucmVzb2x2ZVVyaSh1cmkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgdXJpLCAnU3RhbmRhcmRGaWxlU3lzdGVtIG9ubHkgc3VwcG9ydHMgZmlsZToqIGFuZCBkYXRhOiogVVJJcycpOwogICAgfQogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtGaWxlU3lzdGVtRW50aXR5XSBmb3IgZmlsZTogVVJJcy4KY2xhc3MgX0lvRmlsZVN5c3RlbUVudGl0eSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW1FbnRpdHkgewogIEBvdmVycmlkZQogIGZpbmFsIFVyaSB1cmk7CgogIF9Jb0ZpbGVTeXN0ZW1FbnRpdHkodGhpcy51cmkpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHVyaS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIF9Jb0ZpbGVTeXN0ZW1FbnRpdHkgJiYgb3RoZXIudXJpID09IHVyaTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpIGFzeW5jIHsKICAgIGlmIChhd2FpdCBpby5GaWxlU3lzdGVtRW50aXR5LmlzRGlyZWN0b3J5KHVyaS50b0ZpbGVQYXRoKCkpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBpby5GaWxlLmZyb21VcmkodXJpKS5leGlzdHMoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxMaXN0PGludD4+IHJlYWRBc0J5dGVzKCkgYXN5bmMgewogICAgdHJ5IHsKICAgICAgQ29tcGlsZXJDb250ZXh0LnJlY29yZERlcGVuZGVuY3kodXJpKTsKICAgICAgcmV0dXJuIG5ldyBpby5GaWxlLmZyb21VcmkodXJpKS5yZWFkQXNCeXRlc1N5bmMoKTsKICAgIH0gb24gaW8uRmlsZVN5c3RlbUV4Y2VwdGlvbiBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgIHRocm93IF90b0ZpbGVTeXN0ZW1FeGNlcHRpb24oZXhjZXB0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZygpIGFzeW5jIHsKICAgIHRyeSB7CiAgICAgIENvbXBpbGVyQ29udGV4dC5yZWNvcmREZXBlbmRlbmN5KHVyaSk7CiAgICAgIHJldHVybiBhd2FpdCBuZXcgaW8uRmlsZS5mcm9tVXJpKHVyaSkucmVhZEFzU3RyaW5nKCk7CiAgICB9IG9uIGlvLkZpbGVTeXN0ZW1FeGNlcHRpb24gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgICB0aHJvdyBfdG9GaWxlU3lzdGVtRXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm4gdGhlIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBmb3IgdGhlIGdpdmVuIEkvTyBleGNlcHRpb24uCiAgICovCiAgRmlsZVN5c3RlbUV4Y2VwdGlvbiBfdG9GaWxlU3lzdGVtRXhjZXB0aW9uKGlvLkZpbGVTeXN0ZW1FeGNlcHRpb24gZXhjZXB0aW9uKSB7CiAgICBTdHJpbmcgbWVzc2FnZSA9IGV4Y2VwdGlvbi5tZXNzYWdlOwogICAgU3RyaW5nIG9zTWVzc2FnZSA9IGV4Y2VwdGlvbi5vc0Vycm9yPy5tZXNzYWdlOwogICAgaWYgKG9zTWVzc2FnZSAhPSBudWxsICYmIG9zTWVzc2FnZS5pc05vdEVtcHR5KSB7CiAgICAgIG1lc3NhZ2UgPSBvc01lc3NhZ2U7CiAgICB9CiAgICByZXR1cm4gbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24odXJpLCBtZXNzYWdlKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBbRmlsZVN5c3RlbUVudGl0eV0gZm9yIGRhdGE6IFVSSXMuCmNsYXNzIERhdGFGaWxlU3lzdGVtRW50aXR5IGltcGxlbWVudHMgRmlsZVN5c3RlbUVudGl0eSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHVyaTsKCiAgRGF0YUZpbGVTeXN0ZW1FbnRpdHkodGhpcy51cmkpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHVyaS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIERhdGFGaWxlU3lzdGVtRW50aXR5ICYmIG90aGVyLnVyaSA9PSB1cmk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxib29sPiBleGlzdHMoKSBhc3luYyB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxMaXN0PGludD4+IHJlYWRBc0J5dGVzKCkgYXN5bmMgewogICAgcmV0dXJuIHVyaS5kYXRhLmNvbnRlbnRBc0J5dGVzKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8U3RyaW5nPiByZWFkQXNTdHJpbmcoKSBhc3luYyB7CiAgICByZXR1cm4gdXJpLmRhdGEuY29udGVudEFzU3RyaW5nKCk7CiAgfQp9Cn0ATk48ASgBFRgBGwE+AUsEKysEOzFJARoBDCs0SUAnQQ0lSwYEAgFCOAwRASEBDCQBDCQ4AQwgQxMNMAYEAQwqCi05NC8GBAEMKAotPDQvBgQBBkMGUSgzNRsGMgQCAUI5DBEBIgEMJAEMJDkBDCARBAEMKiYEAQwoJwQCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9zdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9jb21wdXRlX3BsYXRmb3JtX2JpbmFyaWVzX2xvY2F0aW9uLmRhcnSM0i8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgImRhcnQ6aW8iIHNob3cgRmlsZSwgUGxhdGZvcm07CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IFNvdXJjZTsKCmltcG9ydCAnYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JyBzaG93IFByb2Nlc3NlZE9wdGlvbnM7CgppbXBvcnQgJ2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgovLy8gQ29tcHV0ZXMgdGhlIGxvY2F0aW9uIG9mIHBsYXRmb3JtIGJpbmFyaWVzLCB0aGF0IGlzLCBjb21waWxlZCBgLmRpbGxgIGZpbGVzCi8vLyBvZiB0aGUgcGxhdGZvcm0gbGlicmFyaWVzIHRoYXQgYXJlIHVzZWQgdG8gYXZvaWQgcmVjb21waWxpbmcgdGhvc2UKLy8vIGxpYnJhcmllcy4KVXJpIGNvbXB1dGVQbGF0Zm9ybUJpbmFyaWVzTG9jYXRpb24oe2Jvb2wgZm9yY2VCdWlsZERpcjogZmFsc2V9KSB7CiAgLy8gVGhlIGRpcmVjdG9yeSBvZiB0aGUgRGFydCBWTSBleGVjdXRhYmxlLgogIFVyaSB2bURpcmVjdG9yeSA9IFVyaS5iYXNlCiAgICAgIC5yZXNvbHZlVXJpKG5ldyBVcmkuZmlsZShQbGF0Zm9ybS5yZXNvbHZlZEV4ZWN1dGFibGUpKQogICAgICAucmVzb2x2ZSgiLiIpOwogIGlmICh2bURpcmVjdG9yeS5wYXRoLmVuZHNXaXRoKCIvYmluLyIpKSB7CiAgICAvLyBMb29rcyBsaWtlIHRoZSBWTSBpcyBpbiBhIGAvYmluL2AgZGlyZWN0b3J5LCBzbyB0aGlzIGlzIHJ1bm5pbmcgZnJvbSBhCiAgICAvLyBidWlsdCBTREsuCiAgICByZXR1cm4gdm1EaXJlY3RvcnkucmVzb2x2ZShmb3JjZUJ1aWxkRGlyID8gIi4uLy4uLyIgOiAiLi4vbGliL19pbnRlcm5hbC8iKTsKICB9IGVsc2UgewogICAgLy8gV2UgYXNzdW1lIHRoaXMgaXMgcnVubmluZyBmcm9tIGEgYnVpbGQgZGlyZWN0b3J5IChmb3IgZXhhbXBsZSwKICAgIC8vIGBvdXQvUmVsZWFzZVg2NGAgb3IgYHhjb2RlYnVpbGQvUmVsZWFzZVg2NGApLgogICAgcmV0dXJuIHZtRGlyZWN0b3J5OwogIH0KfQoKLy8vIFRyYW5zbGF0ZXMgYW4gU0RLIFVSSSAoIm9yZy1kYXJ0bGFuZy1zZGs6Ly8vLi4uIikgdG8gYSBmaWxlIFVSSS4KVXJpIHRyYW5zbGF0ZVNkayhVcmkgdXJpKSB7CiAgaWYgKENvbXBpbGVyQ29udGV4dC5pc0FjdGl2ZSkgewogICAgaWYgKHVyaS5zY2hlbWUgPT0gIm9yZy1kYXJ0bGFuZy1zZGsiKSB7CiAgICAgIFN0cmluZyBwYXRoID0gdXJpLnBhdGg7CiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoIi9zZGsvIikpIHsKICAgICAgICBDb21waWxlckNvbnRleHQgY29udGV4dCA9IENvbXBpbGVyQ29udGV4dC5jdXJyZW50OwogICAgICAgIFVyaSBzZGtSb290ID0gY29udGV4dC5jYWNoZWRTZGtSb290OwogICAgICAgIGlmIChzZGtSb290ID09IG51bGwpIHsKICAgICAgICAgIFByb2Nlc3NlZE9wdGlvbnMgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uczsKICAgICAgICAgIHNka1Jvb3QgPSBvcHRpb25zLnNka1Jvb3Q7CiAgICAgICAgICBpZiAoc2RrUm9vdCA9PSBudWxsKSB7CiAgICAgICAgICAgIHNka1Jvb3QgPSBvcHRpb25zLmxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk/LnJlc29sdmUoIi4uLyIpOwogICAgICAgICAgICBpZiAoc2RrUm9vdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKCFpc0V4aXN0aW5nRmlsZShzZGtSb290LnJlc29sdmUoImxpYi9saWJyYXJpZXMuanNvbiIpKSkgewogICAgICAgICAgICAgICAgc2RrUm9vdCA9IG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc2RrUm9vdCA9PSBudWxsKSB7CiAgICAgICAgICAgIHNka1Jvb3QgPSAob3B0aW9ucy5zZGtTdW1tYXJ5ID8/IGNvbXB1dGVQbGF0Zm9ybUJpbmFyaWVzTG9jYXRpb24oKSkKICAgICAgICAgICAgICAgIC5yZXNvbHZlKCIuLi8uLi8iKTsKICAgICAgICAgICAgaWYgKHNka1Jvb3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGlmICghaXNFeGlzdGluZ0ZpbGUoc2RrUm9vdC5yZXNvbHZlKCJsaWIvbGlicmFyaWVzLmpzb24iKSkpIHsKICAgICAgICAgICAgICAgIGlmIChpc0V4aXN0aW5nRmlsZShzZGtSb290LnJlc29sdmUoInNkay9saWIvbGlicmFyaWVzLmpzb24iKSkpIHsKICAgICAgICAgICAgICAgICAgc2RrUm9vdCA9IHNka1Jvb3QucmVzb2x2ZSgic2RrLyIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc2RrUm9vdCA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzZGtSb290ID8/PSBVcmkucGFyc2UoIm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrLyIpOwogICAgICAgICAgY29udGV4dC5jYWNoZWRTZGtSb290ID0gc2RrUm9vdDsKICAgICAgICB9CiAgICAgICAgVXJpIGNhbmRpZGF0ZSA9IHNka1Jvb3QucmVzb2x2ZShwYXRoLnN1YnN0cmluZyg1KSk7CiAgICAgICAgaWYgKGlzRXhpc3RpbmdGaWxlKGNhbmRpZGF0ZSkpIHsKICAgICAgICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSBDb21waWxlckNvbnRleHQuY3VycmVudC51cmlUb1NvdXJjZTsKICAgICAgICAgIFNvdXJjZSBzb3VyY2UgPSB1cmlUb1NvdXJjZVt1cmldOwogICAgICAgICAgaWYgKHNvdXJjZS5zb3VyY2UuaXNFbXB0eSkgewogICAgICAgICAgICB1cmlUb1NvdXJjZVt1cmldID0gbmV3IFNvdXJjZSgKICAgICAgICAgICAgICAgIHNvdXJjZS5saW5lU3RhcnRzLAogICAgICAgICAgICAgICAgbmV3IEZpbGUuZnJvbVVyaShjYW5kaWRhdGUpLnJlYWRBc0J5dGVzU3luYygpLAogICAgICAgICAgICAgICAgc291cmNlLmltcG9ydFVyaSwKICAgICAgICAgICAgICAgIHNvdXJjZS5maWxlVXJpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gdXJpOwp9Cgpib29sIGlzRXhpc3RpbmdGaWxlKFVyaSB1cmkpIHsKICBpZiAodXJpLnNjaGVtZSA9PSAiZmlsZSIpIHsKICAgIHJldHVybiBuZXcgRmlsZS5mcm9tVXJpKHVyaSkuZXhpc3RzU3luYygpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9Cl4ATk48ASYBLgE8ATsBUEcPQy4dPRUsThJQC0Y1GAQCAUUcIiweJjstHzYlIUkjTCAQDgwhUCQjTFE1GSISEA4MPSsKPClOLCcrIz8iIQwKGggGBA4CAR8eLwsSBAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9jb21wdXRlX3BsYXRmb3JtX2JpbmFyaWVzX2xvY2F0aW9uLmRhcnQyc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL29wZXJhdG9yLmRhcnSO5y8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLm9wZXJhdG9yczsKCi8vLyBUaGUgdXNlci1kZWZpbmFibGUgb3BlcmF0b3JzIGluIERhcnQuCi8vLwovLy8gVGhlIG5hbWVzIGhhdmUgYmVlbiBjaG9zZW4gdG8gcmVwcmVzZW50IHRoZWlyIG5vcm1hbCBzZW1hbnRpYyBtZWFuaW5nLgplbnVtIE9wZXJhdG9yIHsKICBhZGQsCiAgYml0d2lzZUFuZCwKICBiaXR3aXNlTm90LAogIGJpdHdpc2VPciwKICBiaXR3aXNlWG9yLAogIGRpdmlkZSwKICBlcXVhbHMsCiAgZ3JlYXRlclRoYW4sCiAgZ3JlYXRlclRoYW5FcXVhbHMsCiAgaW5kZXhHZXQsCiAgaW5kZXhTZXQsCiAgbGVmdFNoaWZ0LAogIGxlc3NUaGFuLAogIGxlc3NUaGFuRXF1YWxzLAogIG1vZHVsbywKICBtdWx0aXBseSwKICByaWdodFNoaWZ0LAogIHRyaXBsZVNoaWZ0LAogIHN1YnRyYWN0LAogIHRydW5jYXRpbmdEaXZpZGUsCiAgdW5hcnlNaW51cywKfQoKT3BlcmF0b3Igb3BlcmF0b3JGcm9tU3RyaW5nKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoaWRlbnRpY2FsKCIrIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmFkZDsKICBpZiAoaWRlbnRpY2FsKCImIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmJpdHdpc2VBbmQ7CiAgaWYgKGlkZW50aWNhbCgifiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5iaXR3aXNlTm90OwogIGlmIChpZGVudGljYWwoInwiLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuYml0d2lzZU9yOwogIGlmIChpZGVudGljYWwoIl4iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuYml0d2lzZVhvcjsKICBpZiAoaWRlbnRpY2FsKCIvIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmRpdmlkZTsKICBpZiAoaWRlbnRpY2FsKCI9PSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5lcXVhbHM7CiAgaWYgKGlkZW50aWNhbCgiPiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5ncmVhdGVyVGhhbjsKICBpZiAoaWRlbnRpY2FsKCI+PSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsczsKICBpZiAoaWRlbnRpY2FsKCJbXSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5pbmRleEdldDsKICBpZiAoaWRlbnRpY2FsKCJbXT0iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuaW5kZXhTZXQ7CiAgaWYgKGlkZW50aWNhbCgiPDwiLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IubGVmdFNoaWZ0OwogIGlmIChpZGVudGljYWwoIjwiLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IubGVzc1RoYW47CiAgaWYgKGlkZW50aWNhbCgiPD0iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IubGVzc1RoYW5FcXVhbHM7CiAgaWYgKGlkZW50aWNhbCgiJSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5tb2R1bG87CiAgaWYgKGlkZW50aWNhbCgiKiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5tdWx0aXBseTsKICBpZiAoaWRlbnRpY2FsKCI+PiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5yaWdodFNoaWZ0OwogIGlmIChpZGVudGljYWwoIj4+PiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci50cmlwbGVTaGlmdDsKICBpZiAoaWRlbnRpY2FsKCItIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLnN1YnRyYWN0OwogIGlmIChpZGVudGljYWwoIn4vIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLnRydW5jYXRpbmdEaXZpZGU7CiAgaWYgKGlkZW50aWNhbCgidW5hcnktIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLnVuYXJ5TWludXM7CiAgcmV0dXJuIG51bGw7Cn0KClN0cmluZyBvcGVyYXRvclRvU3RyaW5nKE9wZXJhdG9yIG9wZXJhdG9yKSB7CiAgc3dpdGNoIChvcGVyYXRvcikgewogICAgY2FzZSBPcGVyYXRvci5hZGQ6CiAgICAgIHJldHVybiAiKyI7CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VBbmQ6CiAgICAgIHJldHVybiAiJiI7CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VOb3Q6CiAgICAgIHJldHVybiAifiI7CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VPcjoKICAgICAgcmV0dXJuICJ8IjsKICAgIGNhc2UgT3BlcmF0b3IuYml0d2lzZVhvcjoKICAgICAgcmV0dXJuICJeIjsKICAgIGNhc2UgT3BlcmF0b3IuZGl2aWRlOgogICAgICByZXR1cm4gIi8iOwogICAgY2FzZSBPcGVyYXRvci5lcXVhbHM6CiAgICAgIHJldHVybiAiPT0iOwogICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyVGhhbjoKICAgICAgcmV0dXJuICI+IjsKICAgIGNhc2UgT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbHM6CiAgICAgIHJldHVybiAiPj0iOwogICAgY2FzZSBPcGVyYXRvci5pbmRleEdldDoKICAgICAgcmV0dXJuICJbXSI7CiAgICBjYXNlIE9wZXJhdG9yLmluZGV4U2V0OgogICAgICByZXR1cm4gIltdPSI7CiAgICBjYXNlIE9wZXJhdG9yLmxlZnRTaGlmdDoKICAgICAgcmV0dXJuICI8PCI7CiAgICBjYXNlIE9wZXJhdG9yLmxlc3NUaGFuOgogICAgICByZXR1cm4gIjwiOwogICAgY2FzZSBPcGVyYXRvci5sZXNzVGhhbkVxdWFsczoKICAgICAgcmV0dXJuICI8PSI7CiAgICBjYXNlIE9wZXJhdG9yLm1vZHVsbzoKICAgICAgcmV0dXJuICIlIjsKICAgIGNhc2UgT3BlcmF0b3IubXVsdGlwbHk6CiAgICAgIHJldHVybiAiKiI7CiAgICBjYXNlIE9wZXJhdG9yLnJpZ2h0U2hpZnQ6CiAgICAgIHJldHVybiAiPj4iOwogICAgY2FzZSBPcGVyYXRvci50cmlwbGVTaGlmdDoKICAgICAgcmV0dXJuICI+Pj4iOwogICAgY2FzZSBPcGVyYXRvci5zdWJ0cmFjdDoKICAgICAgcmV0dXJuICItIjsKICAgIGNhc2UgT3BlcmF0b3IudHJ1bmNhdGluZ0RpdmlkZToKICAgICAgcmV0dXJuICJ+LyI7CiAgICBjYXNlIE9wZXJhdG9yLnVuYXJ5TWludXM6CiAgICAgIHJldHVybiAidW5hcnktIjsKICB9CiAgcmV0dXJuIG51bGw7Cn0KCmludCBvcGVyYXRvclJlcXVpcmVkQXJndW1lbnRDb3VudChPcGVyYXRvciBvcGVyYXRvcikgewogIHN3aXRjaCAob3BlcmF0b3IpIHsKICAgIGNhc2UgT3BlcmF0b3IuYml0d2lzZU5vdDoKICAgIGNhc2UgT3BlcmF0b3IudW5hcnlNaW51czoKICAgICAgcmV0dXJuIDA7CgogICAgY2FzZSBPcGVyYXRvci5hZGQ6CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VBbmQ6CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VPcjoKICAgIGNhc2UgT3BlcmF0b3IuYml0d2lzZVhvcjoKICAgIGNhc2UgT3BlcmF0b3IuZGl2aWRlOgogICAgY2FzZSBPcGVyYXRvci5lcXVhbHM6CiAgICBjYXNlIE9wZXJhdG9yLmdyZWF0ZXJUaGFuOgogICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsczoKICAgIGNhc2UgT3BlcmF0b3IuaW5kZXhHZXQ6CiAgICBjYXNlIE9wZXJhdG9yLmxlZnRTaGlmdDoKICAgIGNhc2UgT3BlcmF0b3IubGVzc1RoYW46CiAgICBjYXNlIE9wZXJhdG9yLmxlc3NUaGFuRXF1YWxzOgogICAgY2FzZSBPcGVyYXRvci5tb2R1bG86CiAgICBjYXNlIE9wZXJhdG9yLm11bHRpcGx5OgogICAgY2FzZSBPcGVyYXRvci5yaWdodFNoaWZ0OgogICAgY2FzZSBPcGVyYXRvci50cmlwbGVTaGlmdDoKICAgIGNhc2UgT3BlcmF0b3Iuc3VidHJhY3Q6CiAgICBjYXNlIE9wZXJhdG9yLnRydW5jYXRpbmdEaXZpZGU6CiAgICAgIHJldHVybiAxOwoKICAgIGNhc2UgT3BlcmF0b3IuaW5kZXhTZXQ6CiAgICAgIHJldHVybiAyOwogIH0KICByZXR1cm4gLTE7Cn0KgIsATk48ARkBKgRLEAcODg0OCgoPFQwMDQwSCgwODwwUDgIBLTM6Ojk6Njc7Qjk6Ojg/Njg7PThBPw8CAS0WFxIeEh4SHRIeEhoSGhMfEiUTHBMcFB0THBIiExoSHBIeEx8UHBIkEx4XBA8CATcWHh4QARceHR4aGh8lHB0cIhocHh8cJBABHBAEDQIBKXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9vcGVyYXRvci5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvYXN5bmNfbW9kaWZpZXIuZGFydIFALy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLmFzeW5jX21vZGlmaWVyOwoKZW51bSBBc3luY01vZGlmaWVyIHsKICBTeW5jLAogIFN5bmNTdGFyLAogIEFzeW5jLAogIEFzeW5jU3RhciwKfQoOAE5OPAElARUIDAkNAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9hc3luY19tb2RpZmllci5kYXJ0PHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL2NoYXJhY3RlcnMuZGFydI1uLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci5jaGFyYWN0ZXJzOwoKY29uc3QgaW50ICRFT0YgPSAwOwpjb25zdCBpbnQgJFNUWCA9IDI7CmNvbnN0IGludCAkQlMgPSA4Owpjb25zdCBpbnQgJFRBQiA9IDk7CmNvbnN0IGludCAkTEYgPSAxMDsKY29uc3QgaW50ICRWVEFCID0gMTE7CmNvbnN0IGludCAkRkYgPSAxMjsKY29uc3QgaW50ICRDUiA9IDEzOwpjb25zdCBpbnQgJFNQQUNFID0gMzI7CmNvbnN0IGludCAkQkFORyA9IDMzOwpjb25zdCBpbnQgJERRID0gMzQ7CmNvbnN0IGludCAkSEFTSCA9IDM1Owpjb25zdCBpbnQgJCQgPSAzNjsKY29uc3QgaW50ICRQRVJDRU5UID0gMzc7CmNvbnN0IGludCAkQU1QRVJTQU5EID0gMzg7CmNvbnN0IGludCAkU1EgPSAzOTsKY29uc3QgaW50ICRPUEVOX1BBUkVOID0gNDA7CmNvbnN0IGludCAkQ0xPU0VfUEFSRU4gPSA0MTsKY29uc3QgaW50ICRTVEFSID0gNDI7CmNvbnN0IGludCAkUExVUyA9IDQzOwpjb25zdCBpbnQgJENPTU1BID0gNDQ7CmNvbnN0IGludCAkTUlOVVMgPSA0NTsKY29uc3QgaW50ICRQRVJJT0QgPSA0NjsKY29uc3QgaW50ICRTTEFTSCA9IDQ3Owpjb25zdCBpbnQgJDAgPSA0ODsKY29uc3QgaW50ICQxID0gNDk7CmNvbnN0IGludCAkMiA9IDUwOwpjb25zdCBpbnQgJDMgPSA1MTsKY29uc3QgaW50ICQ0ID0gNTI7CmNvbnN0IGludCAkNSA9IDUzOwpjb25zdCBpbnQgJDYgPSA1NDsKY29uc3QgaW50ICQ3ID0gNTU7CmNvbnN0IGludCAkOCA9IDU2Owpjb25zdCBpbnQgJDkgPSA1NzsKY29uc3QgaW50ICRDT0xPTiA9IDU4Owpjb25zdCBpbnQgJFNFTUlDT0xPTiA9IDU5Owpjb25zdCBpbnQgJExUID0gNjA7CmNvbnN0IGludCAkRVEgPSA2MTsKY29uc3QgaW50ICRHVCA9IDYyOwpjb25zdCBpbnQgJFFVRVNUSU9OID0gNjM7CmNvbnN0IGludCAkQVQgPSA2NDsKY29uc3QgaW50ICRBID0gNjU7CmNvbnN0IGludCAkQiA9IDY2Owpjb25zdCBpbnQgJEMgPSA2NzsKY29uc3QgaW50ICREID0gNjg7CmNvbnN0IGludCAkRSA9IDY5Owpjb25zdCBpbnQgJEYgPSA3MDsKY29uc3QgaW50ICRHID0gNzE7CmNvbnN0IGludCAkSCA9IDcyOwpjb25zdCBpbnQgJEkgPSA3MzsKY29uc3QgaW50ICRKID0gNzQ7CmNvbnN0IGludCAkSyA9IDc1Owpjb25zdCBpbnQgJEwgPSA3NjsKY29uc3QgaW50ICRNID0gNzc7CmNvbnN0IGludCAkTiA9IDc4Owpjb25zdCBpbnQgJE8gPSA3OTsKY29uc3QgaW50ICRQID0gODA7CmNvbnN0IGludCAkUSA9IDgxOwpjb25zdCBpbnQgJFIgPSA4MjsKY29uc3QgaW50ICRTID0gODM7CmNvbnN0IGludCAkVCA9IDg0Owpjb25zdCBpbnQgJFUgPSA4NTsKY29uc3QgaW50ICRWID0gODY7CmNvbnN0IGludCAkVyA9IDg3Owpjb25zdCBpbnQgJFggPSA4ODsKY29uc3QgaW50ICRZID0gODk7CmNvbnN0IGludCAkWiA9IDkwOwpjb25zdCBpbnQgJE9QRU5fU1FVQVJFX0JSQUNLRVQgPSA5MTsKY29uc3QgaW50ICRCQUNLU0xBU0ggPSA5MjsKY29uc3QgaW50ICRDTE9TRV9TUVVBUkVfQlJBQ0tFVCA9IDkzOwpjb25zdCBpbnQgJENBUkVUID0gOTQ7CmNvbnN0IGludCAkXyA9IDk1Owpjb25zdCBpbnQgJEJBQ0tQSU5HID0gOTY7CmNvbnN0IGludCAkYSA9IDk3Owpjb25zdCBpbnQgJGIgPSA5ODsKY29uc3QgaW50ICRjID0gOTk7CmNvbnN0IGludCAkZCA9IDEwMDsKY29uc3QgaW50ICRlID0gMTAxOwpjb25zdCBpbnQgJGYgPSAxMDI7CmNvbnN0IGludCAkZyA9IDEwMzsKY29uc3QgaW50ICRoID0gMTA0Owpjb25zdCBpbnQgJGkgPSAxMDU7CmNvbnN0IGludCAkaiA9IDEwNjsKY29uc3QgaW50ICRrID0gMTA3Owpjb25zdCBpbnQgJGwgPSAxMDg7CmNvbnN0IGludCAkbSA9IDEwOTsKY29uc3QgaW50ICRuID0gMTEwOwpjb25zdCBpbnQgJG8gPSAxMTE7CmNvbnN0IGludCAkcCA9IDExMjsKY29uc3QgaW50ICRxID0gMTEzOwpjb25zdCBpbnQgJHIgPSAxMTQ7CmNvbnN0IGludCAkcyA9IDExNTsKY29uc3QgaW50ICR0ID0gMTE2Owpjb25zdCBpbnQgJHUgPSAxMTc7CmNvbnN0IGludCAkdiA9IDExODsKY29uc3QgaW50ICR3ID0gMTE5Owpjb25zdCBpbnQgJHggPSAxMjA7CmNvbnN0IGludCAkeSA9IDEyMTsKY29uc3QgaW50ICR6ID0gMTIyOwpjb25zdCBpbnQgJE9QRU5fQ1VSTFlfQlJBQ0tFVCA9IDEyMzsKY29uc3QgaW50ICRCQVIgPSAxMjQ7CmNvbnN0IGludCAkQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9IDEyNTsKY29uc3QgaW50ICRUSUxERSA9IDEyNjsKY29uc3QgaW50ICRERUwgPSAxMjc7CmNvbnN0IGludCAkTkJTUCA9IDE2MDsKY29uc3QgaW50ICRMUyA9IDB4MjAyODsKY29uc3QgaW50ICRQUyA9IDB4MjAyOTsKCmNvbnN0IGludCAkRklSU1RfU1VSUk9HQVRFID0gMHhkODAwOwpjb25zdCBpbnQgJExBU1RfU1VSUk9HQVRFID0gMHhkZmZmOwpjb25zdCBpbnQgJExBU1RfQ09ERV9QT0lOVCA9IDB4MTBmZmZmOwoKYm9vbCBpc0RpZ2l0KGludCBjaGFyYWN0ZXJDb2RlKSB7CiAgcmV0dXJuICQwIDw9IGNoYXJhY3RlckNvZGUgJiYgY2hhcmFjdGVyQ29kZSA8PSAkOTsKfQoKYm9vbCBpc0hleERpZ2l0KGludCBjaGFyYWN0ZXJDb2RlKSB7CiAgaWYgKGNoYXJhY3RlckNvZGUgPD0gJDkpIHJldHVybiAkMCA8PSBjaGFyYWN0ZXJDb2RlOwogIGNoYXJhY3RlckNvZGUgfD0gJGEgXiAkQTsKICByZXR1cm4gKCRhIDw9IGNoYXJhY3RlckNvZGUgJiYgY2hhcmFjdGVyQ29kZSA8PSAkZik7Cn0KCmludCBoZXhEaWdpdFZhbHVlKGludCBoZXhEaWdpdCkgewogIGFzc2VydChpc0hleERpZ2l0KGhleERpZ2l0KSk7CiAgLy8gaGV4RGlnaXQgaXMgb25lIG9mICcwJy4uJzknLCAnQScuLidGJyBhbmQgJ2EnLi4nZicuCiAgaWYgKGhleERpZ2l0IDw9ICQ5KSByZXR1cm4gaGV4RGlnaXQgLSAkMDsKICByZXR1cm4gKGhleERpZ2l0IHwgKCRhIF4gJEEpKSAtICgkYSAtIDEwKTsKfQoKYm9vbCBpc1VuaWNvZGVTY2FsYXJWYWx1ZShpbnQgdmFsdWUpIHsKICByZXR1cm4gdmFsdWUgPCAkRklSU1RfU1VSUk9HQVRFIHx8CiAgICAgICh2YWx1ZSA+ICRMQVNUX1NVUlJPR0FURSAmJiB2YWx1ZSA8PSAkTEFTVF9DT0RFX1BPSU5UKTsKfQoKYm9vbCBpc1V0ZjE2TGVhZFN1cnJvZ2F0ZShpbnQgdmFsdWUpIHsKICByZXR1cm4gdmFsdWUgPj0gMHhkODAwICYmIHZhbHVlIDw9IDB4ZGJmZjsKfQoKYm9vbCBpc1V0ZjE2VHJhaWxTdXJyb2dhdGUoaW50IHZhbHVlKSB7CiAgcmV0dXJuIHZhbHVlID49IDB4ZGMwMCAmJiB2YWx1ZSA8PSAweGRmZmY7Cn0KgJUATk48ASIBFBQTFBQWFBQXFhQWExkbFBwdFhYXFxgXExMTExMTExMTExcbFBQUGhQTExMTExMTExMTExMTExMTExMTExMTExMTEyUbJhcTGhMTExQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRYmGBYXGBgBJSQnASI1AgElNxw3AgEiIDksLQIBJyU+AgEnLQIBKC0CATNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9jaGFyYWN0ZXJzLmRhcnQzc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3V0aWwvbGluay5kYXJ0lOMvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS51dGlsLmxpbms7CgppbXBvcnQgJ2xpbmtfaW1wbGVtZW50YXRpb24uZGFydCcKICAgIHNob3cgTGlua0J1aWxkZXJJbXBsZW1lbnRhdGlvbiwgTGlua0VudHJ5LCBMaW5rSXRlcmF0b3IsIE1hcHBlZExpbmtJdGVyYWJsZTsKCmNsYXNzIExpbms8VD4gaW1wbGVtZW50cyBJdGVyYWJsZTxUPiB7CiAgVCBnZXQgaGVhZCA9PiB0aHJvdyBuZXcgU3RhdGVFcnJvcigibm8gZWxlbWVudHMiKTsKICBMaW5rPFQ+IGdldCB0YWlsID0+IG51bGw7CgogIGNvbnN0IExpbmsoKTsKCiAgTGluazxUPiBwcmVwZW5kKFQgZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBMaW5rRW50cnk8VD4oZWxlbWVudCwgdGhpcyk7CiAgfQoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IExpbmtJdGVyYXRvcjxUPih0aGlzKTsKCiAgdm9pZCBwcmludE9uKFN0cmluZ0J1ZmZlciBidWZmZXIsIFtzZXBhcmF0ZWRCeV0pIHt9CgogIExpc3Q8VD4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgTGlzdDxUPiByZXN1bHQ7CiAgICBpZiAoIWdyb3dhYmxlKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBMaXN0PFQ+KHNsb3dMZW5ndGgoKSk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBuZXcgTGlzdDxUPigpOwogICAgICByZXN1bHQubGVuZ3RoID0gc2xvd0xlbmd0aCgpOwogICAgfQogICAgaW50IGkgPSAwOwogICAgZm9yIChMaW5rPFQ+IGxpbmsgPSB0aGlzOyAhbGluay5pc0VtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIHJlc3VsdFtpKytdID0gbGluay5oZWFkOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBMYXppbHkgbWFwcyBvdmVyIHRoaXMgbGlua2VkIGxpc3QsIHJldHVybmluZyBhbiBbSXRlcmFibGVdLgogIEl0ZXJhYmxlPEs+IG1hcDxLPihLIGZuKFQgaXRlbSkpIHsKICAgIHJldHVybiBuZXcgTWFwcGVkTGlua0l0ZXJhYmxlPFQsIEs+KHRoaXMsIGZuKTsKICB9CgogIC8vLyBJbnZva2VzIGBmbmAgZm9yIGV2ZXJ5IGl0ZW0gaW4gdGhlIGxpbmtlZCBsaXN0IGFuZCByZXR1cm5zIHRoZSByZXN1bHRzCiAgLy8vIGluIGEgW0xpc3RdLgogIExpc3Q8RT4gbWFwVG9MaXN0PEU+KEUgZm4oVCBpdGVtKSwge2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBMaXN0PEU+IHJlc3VsdDsKICAgIGlmICghZ3Jvd2FibGUpIHsKICAgICAgcmVzdWx0ID0gbmV3IExpc3Q8RT4oc2xvd0xlbmd0aCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IG5ldyBMaXN0PEU+KCk7CiAgICAgIHJlc3VsdC5sZW5ndGggPSBzbG93TGVuZ3RoKCk7CiAgICB9CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKExpbms8VD4gbGluayA9IHRoaXM7ICFsaW5rLmlzRW1wdHk7IGxpbmsgPSBsaW5rLnRhaWwpIHsKICAgICAgcmVzdWx0W2krK10gPSBmbihsaW5rLmhlYWQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gdHJ1ZTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IGZhbHNlOwoKICBMaW5rPFQ+IHJldmVyc2UoTGluazxUPiB0YWlsKSA9PiB0aGlzOwoKICBMaW5rPFQ+IHJldmVyc2VQcmVwZW5kQWxsKExpbms8VD4gZnJvbSkgewogICAgaWYgKGZyb20uaXNFbXB0eSkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gdGhpcy5wcmVwZW5kKGZyb20uaGVhZCkucmV2ZXJzZVByZXBlbmRBbGwoZnJvbS50YWlsKTsKICB9CgogIExpbms8VD4gc2tpcChpbnQgbikgewogICAgaWYgKG4gPT0gMCkgcmV0dXJuIHRoaXM7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggJG4gb3V0IG9mIHJhbmdlJyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKFQgZWxlbWVudCkpIHt9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgTGluazxUPikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG90aGVyLmlzRW1wdHk7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdMaW5rLmhhc2hDb2RlJyk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJbXSI7CgogIGdldCBsZW5ndGggewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ2dldDpsZW5ndGgnKTsKICB9CgogIGludCBzbG93TGVuZ3RoKCkgPT4gMDsKCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBtZXRob2Q/CiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgZm9yIChMaW5rPFQ+IGxpbmsgPSB0aGlzOyAhbGluay5pc0VtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIGlmIChsaW5rLmhlYWQgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzIG1ldGhvZD8KICBUIGdldCBzaW5nbGUgewogICAgaWYgKGlzRW1wdHkpIHRocm93IG5ldyBTdGF0ZUVycm9yKCdObyBlbGVtZW50cycpOwogICAgaWYgKCF0YWlsLmlzRW1wdHkpIHRocm93IG5ldyBTdGF0ZUVycm9yKCdNb3JlIHRoYW4gb25lIGVsZW1lbnQnKTsKICAgIHJldHVybiBoZWFkOwogIH0KCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBtZXRob2Q/CiAgVCBnZXQgZmlyc3QgewogICAgaWYgKGlzRW1wdHkpIHRocm93IG5ldyBTdGF0ZUVycm9yKCdObyBlbGVtZW50cycpOwogICAgcmV0dXJuIGhlYWQ7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIGYgcmV0dXJucyB0cnVlIGZvciBhbGwgZWxlbWVudHMgb2YgdGhpcyBsaXN0LgogIC8vLwogIC8vLyBSZXR1cm5zIHRydWUgZm9yIHRoZSBlbXB0eSBsaXN0LgogIGJvb2wgZXZlcnkoYm9vbCBmKFQgZSkpIHsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGhpczsgIWxpbmsuaXNFbXB0eTsgbGluayA9IGxpbmsudGFpbCkgewogICAgICBpZiAoIWYobGluay5oZWFkKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLwogIC8vIFVuc3VwcG9ydGVkIEl0ZXJhYmxlPFQ+IG1ldGhvZHMuCiAgLy8KICBib29sIGFueShib29sIGYoVCBlKSkgPT4gX3Vuc3VwcG9ydGVkKCdhbnknKTsKICBJdGVyYWJsZTxUPiBjYXN0PFQ+KCkgPT4gX3Vuc3VwcG9ydGVkKCdjYXN0Jyk7CiAgVCBlbGVtZW50QXQoaW50IGkpID0+IF91bnN1cHBvcnRlZCgnZWxlbWVudEF0Jyk7CiAgSXRlcmFibGU8Sz4gZXhwYW5kPEs+KEl0ZXJhYmxlPEs+IGYoVCBlKSkgPT4gX3Vuc3VwcG9ydGVkKCdleHBhbmQnKTsKICBUIGZpcnN0V2hlcmUoYm9vbCBmKFQgZSksIHtUIG9yRWxzZSgpfSkgPT4gX3Vuc3VwcG9ydGVkKCdmaXJzdFdoZXJlJyk7CiAgSyBmb2xkPEs+KEsgaW5pdGlhbFZhbHVlLCBLIGNvbWJpbmUoSyB2YWx1ZSwgVCBlbGVtZW50KSkgewogICAgcmV0dXJuIF91bnN1cHBvcnRlZCgnZm9sZCcpOwogIH0KCiAgSXRlcmFibGU8VD4gZm9sbG93ZWRCeShJdGVyYWJsZTxUPiBvdGhlcikgPT4gX3Vuc3VwcG9ydGVkKCdmb2xsb3dlZEJ5Jyk7CiAgVCBnZXQgbGFzdCA9PiBfdW5zdXBwb3J0ZWQoJ2dldDpsYXN0Jyk7CiAgVCBsYXN0V2hlcmUoYm9vbCBmKFQgZSksIHtUIG9yRWxzZSgpfSkgPT4gX3Vuc3VwcG9ydGVkKCdsYXN0V2hlcmUnKTsKICBTdHJpbmcgam9pbihbc2VwYXJhdG9yID0gJyddKSA9PiBfdW5zdXBwb3J0ZWQoJ2pvaW4nKTsKICBUIHJlZHVjZShUIGNvbWJpbmUoVCBhLCBUIGIpKSA9PiBfdW5zdXBwb3J0ZWQoJ3JlZHVjZScpOwogIEl0ZXJhYmxlPFQ+IHJldHlwZTxUPigpID0+IF91bnN1cHBvcnRlZCgncmV0eXBlJyk7CiAgVCBzaW5nbGVXaGVyZShib29sIGYoVCBlKSwge1Qgb3JFbHNlKCl9KSA9PiBfdW5zdXBwb3J0ZWQoJ3NpbmdsZVdoZXJlJyk7CiAgSXRlcmFibGU8VD4gc2tpcFdoaWxlKGJvb2wgZihUIGUpKSA9PiBfdW5zdXBwb3J0ZWQoJ3NraXBXaGlsZScpOwogIEl0ZXJhYmxlPFQ+IHRha2UoaW50IG4pID0+IF91bnN1cHBvcnRlZCgndGFrZScpOwogIEl0ZXJhYmxlPFQ+IHRha2VXaGlsZShib29sIGYoVCBlKSkgPT4gX3Vuc3VwcG9ydGVkKCd0YWtlV2hpbGUnKTsKICBTZXQ8VD4gdG9TZXQoKSA9PiBfdW5zdXBwb3J0ZWQoJ3RvU2V0Jyk7CiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gX3Vuc3VwcG9ydGVkKCd3aGVyZVR5cGUnKTsKICBJdGVyYWJsZTxUPiB3aGVyZShib29sIGYoVCBlKSkgPT4gX3Vuc3VwcG9ydGVkKCd3aGVyZScpOwoKICBfdW5zdXBwb3J0ZWQoU3RyaW5nIG1ldGhvZCkgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IobWV0aG9kKTsKfQoKLy8vIEJ1aWxkZXIgb2JqZWN0IGZvciBjcmVhdGluZyBsaW5rZWQgbGlzdHMgdXNpbmcgW0xpbmtdIG9yIGZpeGVkLWxlbmd0aCBbTGlzdF0KLy8vIG9iamVjdHMuCmFic3RyYWN0IGNsYXNzIExpbmtCdWlsZGVyPFQ+IHsKICBmYWN0b3J5IExpbmtCdWlsZGVyKCkgPSBMaW5rQnVpbGRlckltcGxlbWVudGF0aW9uPFQ+OwoKICAvLy8gUHJlcGVuZHMgYWxsIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBidWlsZGVyIHRvIFt0YWlsXS4gVGhlIHJlc3VsdGluZyBsaXN0CiAgLy8vIGlzIHJldHVybmVkIGFuZCB0aGUgYnVpbGRlciBpcyBjbGVhcmVkLgogIExpbms8VD4gdG9MaW5rKExpbms8VD4gdGFpbCk7CgogIC8vLyBDcmVhdGVzIGEgbmV3IGZpeGVkIGxlbmd0aCBjb250YWluaW5nIGFsbCBhZGRlZCBlbGVtZW50cy4gVGhlCiAgLy8vIHJlc3VsdGluZyBsaXN0IGlzIHJldHVybmVkIGFuZCB0aGUgYnVpbGRlciBpcyBjbGVhcmVkLgogIExpc3Q8VD4gdG9MaXN0KCk7CgogIC8vLyBBZGRzIHRoZSBlbGVtZW50IFt0XSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGJlaW5nIGJ1aWx0LgogIExpbms8VD4gYWRkTGFzdChUIHQpOwoKICAvLy8gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgbGlzdCBiZWluZyBidWlsdC4KICBUIGdldCBmaXJzdDsKCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBiZWluZyBidWlsdC4KICBmaW5hbCBpbnQgbGVuZ3RoOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGxpc3QgYmVpbmcgYnVpbHQgaXMgZW1wdHkuCiAgZmluYWwgYm9vbCBpc0VtcHR5OwoKICAvLy8gUmVtb3ZlcyBhbGwgYWRkZWQgZWxlbWVudHMgYW5kIHJlc2V0cyB0aGUgYnVpbGRlci4KICB2b2lkIGNsZWFyKCk7Cn0KgLYATk48ARkBIlEBJzUcARABHywEATkBNgEqFBUqDR4kBg9BHwYTBAFCJTMEAU0TPhQVKg0eJAYPQSMGEwQBHCABKQEsI0EEARgdMwQBJQEcKRoEAUMBHQEPLgQBGQEkIkEtBhIEASQRNkYRBAEkEDYRBAFEBiccQScGEQQBBSYFMDEzR0k9IQQBSypHOTs1S0MzQys7OwFFAgFRDSA4AU8uIAFEPRQBPxgBOQ8BPhQBNxYBORACASpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9saW5rLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3V0aWwvbGlua19pbXBsZW1lbnRhdGlvbi5kYXJ0klkvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS51dGlsLmxpbmtfaW1wbGVtZW50YXRpb247CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBJdGVyYWJsZUJhc2U7CgppbXBvcnQgJ2xpbmsuZGFydCcgc2hvdyBMaW5rLCBMaW5rQnVpbGRlcjsKCmNsYXNzIExpbmtJdGVyYXRvcjxUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBUIF9jdXJyZW50OwogIExpbms8VD4gX2xpbms7CgogIExpbmtJdGVyYXRvcih0aGlzLl9saW5rKTsKCiAgVCBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfbGluay5pc0VtcHR5KSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfbGluay5oZWFkOwogICAgX2xpbmsgPSBfbGluay50YWlsOwogICAgcmV0dXJuIHRydWU7CiAgfQp9Cgp0eXBlZGVmIFQgVHJhbnNmb3JtYXRpb248UywgVD4oUyBpbnB1dCk7CgpjbGFzcyBNYXBwZWRMaW5rSXRlcmF0b3I8UywgVD4gZXh0ZW5kcyBJdGVyYXRvcjxUPiB7CiAgVHJhbnNmb3JtYXRpb248UywgVD4gX3RyYW5zZm9ybWF0aW9uOwogIExpbms8Uz4gX2xpbms7CiAgVCBfY3VycmVudDsKCiAgTWFwcGVkTGlua0l0ZXJhdG9yKHRoaXMuX2xpbmssIHRoaXMuX3RyYW5zZm9ybWF0aW9uKTsKCiAgVCBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfbGluay5pc0VtcHR5KSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfdHJhbnNmb3JtYXRpb24oX2xpbmsuaGVhZCk7CiAgICBfbGluayA9IF9saW5rLnRhaWw7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCmNsYXNzIE1hcHBlZExpbmtJdGVyYWJsZTxTLCBUPiBleHRlbmRzIEl0ZXJhYmxlQmFzZTxUPiB7CiAgVHJhbnNmb3JtYXRpb248UywgVD4gX3RyYW5zZm9ybWF0aW9uOwogIExpbms8Uz4gX2xpbms7CgogIE1hcHBlZExpbmtJdGVyYWJsZSh0aGlzLl9saW5rLCB0aGlzLl90cmFuc2Zvcm1hdGlvbik7CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IE1hcHBlZExpbmtJdGVyYXRvcjxTLCBUPihfbGluaywgX3RyYW5zZm9ybWF0aW9uKTsKICB9Cn0KCmNsYXNzIExpbmtFbnRyeTxUPiBleHRlbmRzIExpbms8VD4gewogIGZpbmFsIFQgaGVhZDsKICBMaW5rPFQ+IHRhaWw7CgogIExpbmtFbnRyeSh0aGlzLmhlYWQsIFtMaW5rPFQ+IHRhaWxdKSA6IHRhaWwgPSB0YWlsID8/IGNvbnN0IExpbms8TnVsbD4oKTsKCiAgTGluazxUPiBwcmVwZW5kKFQgZWxlbWVudCkgewogICAgLy8gVE9ETyhhaGUpOiBVc2UgbmV3IExpbms8VD4sIGJ1dCB0aGlzIGNvc3QgOCUgcGVyZm9ybWFuY2Ugb24gVk0uCiAgICByZXR1cm4gbmV3IExpbmtFbnRyeTxUPihlbGVtZW50LCB0aGlzKTsKICB9CgogIHZvaWQgcHJpbnRPbihTdHJpbmdCdWZmZXIgYnVmZmVyLCBbc2VwYXJhdGVkQnldKSB7CiAgICBidWZmZXIud3JpdGUoaGVhZCk7CiAgICBpZiAoc2VwYXJhdGVkQnkgPT0gbnVsbCkgc2VwYXJhdGVkQnkgPSAnJzsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGFpbDsgbGluay5pc05vdEVtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0ZWRCeSk7CiAgICAgIGJ1ZmZlci53cml0ZShsaW5rLmhlYWQpOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZSgnWyAnKTsKICAgIHByaW50T24oYnVmZmVyLCAnLCAnKTsKICAgIGJ1ZmZlci53cml0ZSgnIF0nKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIExpbms8VD4gcmV2ZXJzZShMaW5rPFQ+IHRhaWwpIHsKICAgIExpbms8VD4gcmVzdWx0ID0gdGFpbDsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGhpczsgbGluay5pc05vdEVtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC5wcmVwZW5kKGxpbmsuaGVhZCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGluazxUPiByZXZlcnNlUHJlcGVuZEFsbChMaW5rPFQ+IGZyb20pIHsKICAgIExpbms8VD4gcmVzdWx0OwogICAgZm9yIChyZXN1bHQgPSB0aGlzOyBmcm9tLmlzTm90RW1wdHk7IGZyb20gPSBmcm9tLnRhaWwpIHsKICAgICAgcmVzdWx0ID0gcmVzdWx0LnByZXBlbmQoZnJvbS5oZWFkKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaW5rPFQ+IHNraXAoaW50IG4pIHsKICAgIExpbms8VD4gbGluayA9IHRoaXM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICBpZiAobGluay5pc0VtcHR5KSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4ICRuIG91dCBvZiByYW5nZScpOwogICAgICB9CiAgICAgIGxpbmsgPSBsaW5rLnRhaWw7CiAgICB9CiAgICByZXR1cm4gbGluazsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiB0cnVlOwoKICB2b2lkIGZvckVhY2godm9pZCBmKFQgZWxlbWVudCkpIHsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGhpczsgbGluay5pc05vdEVtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIGYobGluay5oZWFkKTsKICAgIH0KICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgTGluazxUPikgcmV0dXJuIGZhbHNlOwogICAgTGluazxUPiBteUVsZW1lbnRzID0gdGhpczsKICAgIHdoaWxlIChteUVsZW1lbnRzLmlzTm90RW1wdHkgJiYgb3RoZXIuaXNOb3RFbXB0eSkgewogICAgICBpZiAobXlFbGVtZW50cy5oZWFkICE9IG90aGVyLmhlYWQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgbXlFbGVtZW50cyA9IG15RWxlbWVudHMudGFpbDsKICAgICAgb3RoZXIgPSBvdGhlci50YWlsOwogICAgfQogICAgcmV0dXJuIG15RWxlbWVudHMuaXNFbXB0eSAmJiBvdGhlci5pc0VtcHR5OwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignTGlua0VudHJ5Lmhhc2hDb2RlJyk7CgogIGludCBzbG93TGVuZ3RoKCkgewogICAgaW50IGxlbmd0aCA9IDA7CiAgICBmb3IgKExpbms8VD4gY3VycmVudCA9IHRoaXM7IGN1cnJlbnQuaXNOb3RFbXB0eTsgY3VycmVudCA9IGN1cnJlbnQudGFpbCkgewogICAgICArK2xlbmd0aDsKICAgIH0KICAgIHJldHVybiBsZW5ndGg7CiAgfQp9CgpjbGFzcyBMaW5rQnVpbGRlckltcGxlbWVudGF0aW9uPFQ+IGltcGxlbWVudHMgTGlua0J1aWxkZXI8VD4gewogIExpbmtFbnRyeTxUPiBoZWFkID0gbnVsbDsKICBMaW5rRW50cnk8VD4gbGFzdExpbmsgPSBudWxsOwogIGludCBsZW5ndGggPSAwOwoKICBMaW5rQnVpbGRlckltcGxlbWVudGF0aW9uKCk7CgogIEBvdmVycmlkZQogIExpbms8VD4gdG9MaW5rKExpbms8VD4gdGFpbCkgewogICAgaWYgKGhlYWQgPT0gbnVsbCkgcmV0dXJuIHRhaWw7CiAgICBsYXN0TGluay50YWlsID0gdGFpbDsKICAgIExpbms8VD4gbGluayA9IGhlYWQ7CiAgICBsYXN0TGluayA9IG51bGw7CiAgICBoZWFkID0gbnVsbDsKICAgIGxlbmd0aCA9IDA7CiAgICByZXR1cm4gbGluazsKICB9CgogIExpc3Q8VD4gdG9MaXN0KCkgewogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gbmV3IExpc3Q8VD4oMCk7CiAgICBMaXN0PFQ+IGxpc3QgPSBuZXcgTGlzdDxUPihsZW5ndGgpOwogICAgaW50IGluZGV4ID0gMDsKICAgIExpbms8VD4gbGluayA9IGhlYWQ7CiAgICB3aGlsZSAobGluay5pc05vdEVtcHR5KSB7CiAgICAgIGxpc3RbaW5kZXhdID0gbGluay5oZWFkOwogICAgICBsaW5rID0gbGluay50YWlsOwogICAgICBpbmRleCsrOwogICAgfQogICAgbGFzdExpbmsgPSBudWxsOwogICAgaGVhZCA9IG51bGw7CiAgICBsZW5ndGggPSAwOwogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBMaW5rPFQ+IGFkZExhc3QoVCB0KSB7CiAgICBsZW5ndGgrKzsKICAgIExpbmtFbnRyeTxUPiBlbnRyeSA9IG5ldyBMaW5rRW50cnk8VD4odCwgbnVsbCk7CiAgICBpZiAoaGVhZCA9PSBudWxsKSB7CiAgICAgIGhlYWQgPSBlbnRyeTsKICAgIH0gZWxzZSB7CiAgICAgIGxhc3RMaW5rLnRhaWwgPSBlbnRyeTsKICAgIH0KICAgIGxhc3RMaW5rID0gZW50cnk7CiAgICByZXR1cm4gZW50cnk7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICBUIGdldCBmaXJzdCB7CiAgICBpZiAoaGVhZCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBoZWFkLmhlYWQ7CiAgICB9CiAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigibm8gZWxlbWVudHMiKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBoZWFkID0gbnVsbDsKICAgIGxhc3RMaW5rID0gbnVsbDsKICAgIGxlbmd0aCA9IDA7CiAgfQp9CoDWAE5OPAEoASwBKwEvDhEBHAEdARQZFxQGGxgRBAIBKQE1KBEOATgBHQEUGRcUBiwYEQQCATkoEQE4AR1BBAIBJRAQAUwBH0csBAE1GC9DIR8GBAEWLhgbGB4EAQwiG0MqBhMEASwUPSoGEwQBGBkiGjcIGAYRBAEdHwEkQxQGBAEcKR84KxYIJBoGMAQBSAEVFE8QBhMEAgE/HCASAR8BDCEjGhkVERARBAEVLCgTGR4fGA8GFREQEQQBGQ40GBQNHQYWEgQBIwEQGBgGKQQBEREVEAQCATlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9saW5rX2ltcGxlbWVudGF0aW9uLmRhcnQ5c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3V0aWwvcmVsYXRpdml6ZS5kYXJ0iIEvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS51dGlsLnJlbGF0aXZpemU7CgppbXBvcnQgJ2RhcnQ6bWF0aCc7CgpTdHJpbmcgcmVsYXRpdml6ZVVyaShVcmkgYmFzZSwgVXJpIHVyaSwgYm9vbCBpc1dpbmRvd3MpIHsKICBib29sIGVxdWFsc05DUyhTdHJpbmcgYSwgU3RyaW5nIGIpIHsKICAgIHJldHVybiBhLnRvTG93ZXJDYXNlKCkgPT0gYi50b0xvd2VyQ2FzZSgpOwogIH0KCiAgaWYgKCFlcXVhbHNOQ1MoYmFzZS5zY2hlbWUsIHVyaS5zY2hlbWUpIHx8CiAgICAgIGVxdWFsc05DUyhiYXNlLnNjaGVtZSwgJ2RhcnQnKSB8fAogICAgICBlcXVhbHNOQ1MoYmFzZS5zY2hlbWUsICdwYWNrYWdlJykpIHsKICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTsKICB9CgogIGlmICghZXF1YWxzTkNTKGJhc2Uuc2NoZW1lLCAnZmlsZScpKSB7CiAgICBpc1dpbmRvd3MgPSBmYWxzZTsKICB9CgogIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChpc1dpbmRvd3MpIHsKICAgICAgcmV0dXJuIHBhdGgudG9Mb3dlckNhc2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXRoOwogICAgfQogIH0KCiAgaWYgKGJhc2UudXNlckluZm8gPT0gdXJpLnVzZXJJbmZvICYmCiAgICAgIGVxdWFsc05DUyhiYXNlLmhvc3QsIHVyaS5ob3N0KSAmJgogICAgICBiYXNlLnBvcnQgPT0gdXJpLnBvcnQgJiYKICAgICAgdXJpLnF1ZXJ5ID09ICIiICYmCiAgICAgIHVyaS5mcmFnbWVudCA9PSAiIikgewogICAgaWYgKG5vcm1hbGl6ZSh1cmkucGF0aCkuc3RhcnRzV2l0aChub3JtYWxpemUoYmFzZS5wYXRoKSkpIHsKICAgICAgcmV0dXJuIHVyaS5wYXRoLnN1YnN0cmluZyhiYXNlLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpOwogICAgfQoKICAgIGlmICghYmFzZS5wYXRoLnN0YXJ0c1dpdGgoJy8nKSB8fCAhdXJpLnBhdGguc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTsKICAgIH0KCiAgICBMaXN0PFN0cmluZz4gdXJpUGFydHMgPSB1cmkucGF0aC5zcGxpdCgnLycpOwogICAgTGlzdDxTdHJpbmc+IGJhc2VQYXJ0cyA9IGJhc2UucGF0aC5zcGxpdCgnLycpOwogICAgaW50IGNvbW1vbiA9IDA7CiAgICBpbnQgbGVuZ3RoID0gbWluKHVyaVBhcnRzLmxlbmd0aCwgYmFzZVBhcnRzLmxlbmd0aCk7CiAgICB3aGlsZSAoY29tbW9uIDwgbGVuZ3RoICYmCiAgICAgICAgbm9ybWFsaXplKHVyaVBhcnRzW2NvbW1vbl0pID09IG5vcm1hbGl6ZShiYXNlUGFydHNbY29tbW9uXSkpIHsKICAgICAgY29tbW9uKys7CiAgICB9CiAgICBpZiAoY29tbW9uID09IDEgfHwgKGlzV2luZG93cyAmJiBjb21tb24gPT0gMikpIHsKICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgd2lsbCBhbHdheXMgYmUgYW4gZW1wdHkgc3RyaW5nIGJlY2F1c2UgdGhlCiAgICAgIC8vIHBhdGhzIGFyZSBhYnNvbHV0ZS4gT24gV2luZG93cywgd2UgbXVzdCBhbHNvIGNvbnNpZGVyIGRyaXZlCiAgICAgIC8vIGxldHRlcnMgb3IgaG9zdG5hbWVzLgogICAgICBpZiAoYmFzZVBhcnRzLmxlbmd0aCA+IGNvbW1vbiArIDEpIHsKICAgICAgICAvLyBBdm9pZCB1c2luZyAnLi4nIHRvIGdvIHRvIHRoZSByb290LCB1bmxlc3Mgd2UgYXJlIGFscmVhZHkgdGhlcmUuCiAgICAgICAgcmV0dXJuIHVyaS5wYXRoOwogICAgICB9CiAgICB9CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGludCBpID0gY29tbW9uICsgMTsgaSA8IGJhc2VQYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICBzYi53cml0ZSgnLi4vJyk7CiAgICB9CiAgICBmb3IgKGludCBpID0gY29tbW9uOyBpIDwgdXJpUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIHNiLndyaXRlKCcke3VyaVBhcnRzW2ldfS8nKTsKICAgIH0KICAgIHNiLndyaXRlKCcke3VyaVBhcnRzLmxhc3R9Jyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CiAgcmV0dXJuIHVyaS50b1N0cmluZygpOwp9CksATk48AR8BFAE6Jy8EAS0oKxsEASkXBAEiFSENEwYEAScoHxkcQEEGAUMdBgExMxQ5HkcQBjVDRR8rTBkIBio6FwY5IwYiGgQZAgEwcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3V0aWwvcmVsYXRpdml6ZS5kYXJ0J3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvY29tcGlsZXIuZGFydJsTLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29tcGlsZXI7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwoKaW1wb3J0ICdjb21waWxlcl9uZXcuZGFydCcgYXMgbmV3X2FwaTsKaW1wb3J0ICdzcmMvb2xkX3RvX25ld19hcGkuZGFydCc7CmltcG9ydCAnc3JjL29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgovLyBVbmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLCBwYXNzaW5nIFs6bnVsbDpdIGZvciBhbnkgYXJndW1lbnQgdG8gdGhlCi8vIG1ldGhvZHMgb2YgbGlicmFyeSB3aWxsIHJlc3VsdCBpbiBhbiBFcnJvciBiZWluZyB0aHJvd24uCgovLy8gUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB0byB0aGUgc291cmNlIGNvcnJlc3BvbmRpbmcgdG8gW3VyaV0uCi8vLyBJZiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoaXMgZXhjZXB0aW9uLgovLy8KLy8vIFRoZSBzb3VyY2UgY2FuIGJlIHJlcHJlc2VudGVkIGVpdGhlciBhcyBhIFs6TGlzdDxpbnQ+Ol0gb2YgVVRGLTggYnl0ZXMgb3IgYXMKLy8vIGEgW1N0cmluZ10uCi8vLwovLy8gVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6Ci8vLwovLy8gSXQgaXMgcmVjb21tZW5kZWQgdG8gcmV0dXJuIGEgVVRGLTggZW5jb2RlZCBsaXN0IG9mIGJ5dGVzIGJlY2F1c2UgdGhlCi8vLyBzY2FubmVyIGlzIG1vcmUgZWZmaWNpZW50IGluIHRoaXMgY2FzZS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBkYXRhIHN0cnVjdHVyZQovLy8gaXMgZXhwZWN0ZWQgdG8gaG9sZCBhIHplcm8gZWxlbWVudCBhdCB0aGUgbGFzdCBwb3NpdGlvbi4gSWYgdGhpcyBpcyBub3QgdGhlCi8vLyBjYXNlLCB0aGUgZW50aXJlIGRhdGEgc3RydWN0dXJlIGlzIGNvcGllZCBiZWZvcmUgc2Nhbm5pbmcuCnR5cGVkZWYgRnV0dXJlIC8qIDxTdHJpbmcgfCBMaXN0PGludD4+ICovIENvbXBpbGVySW5wdXRQcm92aWRlcihVcmkgdXJpKTsKCi8vLyBEZXByZWNhdGVkLCBwbGVhc2UgdXNlIFtDb21waWxlcklucHV0UHJvdmlkZXJdIGluc3RlYWQuCnR5cGVkZWYgRnV0dXJlPFN0cmluZz4gUmVhZFN0cmluZ0Zyb21VcmkoVXJpIHVyaSk7CgovLy8gUmV0dXJucyBhbiBbRXZlbnRTaW5rXSB0aGF0IHdpbGwgc2VydmUgYXMgY29tcGlsZXIgb3V0cHV0IGZvciB0aGUgZ2l2ZW4KLy8vIGNvbXBvbmVudC4KLy8vCi8vLyBDb21wb25lbnRzIGFyZSBpZGVudGlmaWVkIGJ5IFtuYW1lXSBhbmQgW2V4dGVuc2lvbl0uIEJ5IGNvbnZlbnRpb24sCi8vLyB0aGUgZW1wdHkgc3RyaW5nIFs6IiI6XSB3aWxsIHJlcHJlc2VudCB0aGUgbWFpbiBzY3JpcHQKLy8vIChjb3JyZXNwb25kaW5nIHRvIHRoZSBzY3JpcHQgcGFyYW1ldGVyIG9mIFtjb21waWxlXSkgZXZlbiBpZiB0aGUKLy8vIG1haW4gc2NyaXB0IGlzIGEgbGlicmFyeS4gRm9yIGxpYnJhcmllcyB0aGF0IGFyZSBjb21waWxlZAovLy8gc2VwYXJhdGVseSwgdGhlIGxpYnJhcnkgbmFtZSBpcyB1c2VkLgovLy8KLy8vIEF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9ucyBjYW4gYmUgZXhwZWN0ZWQ6Ci8vLwovLy8gKiAianMiIGZvciBKYXZhU2NyaXB0IG91dHB1dC4KLy8vICogImpzLm1hcCIgZm9yIHNvdXJjZSBtYXBzLgovLy8gKiAiZGFydCIgZm9yIERhcnQgb3V0cHV0LgovLy8gKiAiZGFydC5tYXAiIGZvciBzb3VyY2UgbWFwcy4KLy8vCi8vLyBBcyBtb3JlIGZlYXR1cmVzIGFyZSBhZGRlZCB0byB0aGUgY29tcGlsZXIsIG5ldyBuYW1lcyBhbmQKLy8vIGV4dGVuc2lvbnMgbWF5IGJlIGludHJvZHVjZWQuCnR5cGVkZWYgRXZlbnRTaW5rPFN0cmluZz4gQ29tcGlsZXJPdXRwdXRQcm92aWRlcihTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbik7CgovLy8gSW52b2tlZCBieSB0aGUgY29tcGlsZXIgdG8gcmVwb3J0IGRpYWdub3N0aWNzLiBJZiBbdXJpXSBpcwovLy8gWzpudWxsOl0sIHNvIGFyZSBbYmVnaW5dIGFuZCBbZW5kXS4gTm8gb3RoZXIgYXJndW1lbnRzIG1heSBiZQovLy8gWzpudWxsOl0uIElmIFt1cmldIGlzIG5vdCBbOm51bGw6XSwgbmVpdGhlciBhcmUgW2JlZ2luXSBhbmQKLy8vIFtlbmRdLiBbdXJpXSBpbmRpY2F0ZXMgdGhlIGNvbXBpbGF0aW9uIHVuaXQgZnJvbSB3aGVyZSB0aGUKLy8vIGRpYWdub3N0aWMgb3JpZ2luYXRlcy4gW2JlZ2luXSBhbmQgW2VuZF0gYXJlIHplcm8tYmFzZWQgY2hhcmFjdGVyCi8vLyBvZmZzZXRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tcGlsYXRpb24gdW5pdC4gW21lc3NhZ2VdIGlzIHRoZQovLy8gZGlhZ25vc3RpYyBtZXNzYWdlLCBhbmQgW2tpbmRdIGluZGljYXRlcyBpbmRpY2F0ZXMgd2hhdCBraW5kIG9mCi8vLyBkaWFnbm9zdGljIGl0IGlzLgp0eXBlZGVmIHZvaWQgRGlhZ25vc3RpY0hhbmRsZXIoCiAgICBVcmkgdXJpLCBpbnQgYmVnaW4sIGludCBlbmQsIFN0cmluZyBtZXNzYWdlLCBEaWFnbm9zdGljIGtpbmQpOwoKLy8vIEluZm9ybWF0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbi4KY2xhc3MgQ29tcGlsYXRpb25SZXN1bHQgewogIC8vLyBgdHJ1ZWAgaWYgdGhlIGNvbXBpbGF0aW9uIHN1Y2NlZWRlZCwgdGhhdCBpcywgY29tcGlsYXRpb24gZGlkbid0IGZhaWwgZHVlCiAgLy8vIHRvIGNvbXBpbGUtdGltZSBlcnJvcnMgYW5kL29yIGludGVybmFsIGVycm9ycy4KICBmaW5hbCBib29sIGlzU3VjY2VzczsKCiAgLy8vIFRoZSBjb21waWxlciBvYmplY3QgdXNlZCBmb3IgdGhlIGNvbXBpbGF0aW9uLgogIC8vLwogIC8vLyBOb3RlOiBUaGUgdHlwZSBvZiBbY29tcGlsZXJdIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBhbmQgbWF5IHZhcnkuCiAgLy8vIFVzZSBvbmx5IGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmcuCiAgZmluYWwgY29tcGlsZXI7CgogIENvbXBpbGF0aW9uUmVzdWx0KHRoaXMuY29tcGlsZXIsIHt0aGlzLmlzU3VjY2VzczogdHJ1ZX0pOwp9CgovLy8gUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB0byBhIG5vbi1udWxsIFN0cmluZyB3aGVuIFtzY3JpcHRdCi8vLyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGlsZWQuCi8vLwovLy8gVGhlIGNvbXBpbGVyIG91dHB1dCBpcyBvYnRhaW5lZCBieSBwcm92aWRpbmcgYW4gW291dHB1dFByb3ZpZGVyXS4KLy8vCi8vLyBJZiB0aGUgY29tcGlsYXRpb24gZmFpbHMsIHRoZSBmdXR1cmUncyB2YWx1ZSB3aWxsIGJlIFs6bnVsbDpdIGFuZAovLy8gW2hhbmRsZXJdIHdpbGwgaGF2ZSBiZWVuIGludm9rZWQgYXQgbGVhc3Qgb25jZSB3aXRoIFs6a2luZCA9PQovLy8gRGlhZ25vc3RpYy5FUlJPUjpdIG9yIFs6a2luZCA9PSBEaWFnbm9zdGljLkNSQVNIOl0uCi8vLwovLy8gRGVwcmVjYXRlZDogaWYgbm8gW291dHB1dFByb3ZpZGVyXSBpcyBnaXZlbiwgdGhlIGZ1dHVyZSBjb21wbGV0ZXMKLy8vIHRvIHRoZSBjb21waWxlZCBzY3JpcHQuIFRoaXMgYmVoYXZpb3Igd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUKLy8vIGFzIHRoZSBjb21waWxlciBtYXkgY3JlYXRlIG11bHRpcGxlIGZpbGVzIHRvIHN1cHBvcnQgbGF6eSBsb2FkaW5nCi8vLyBvZiBsaWJyYXJpZXMuCkZ1dHVyZTxDb21waWxhdGlvblJlc3VsdD4gY29tcGlsZSgKICAgIFVyaSBzY3JpcHQsCiAgICBVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSwKICAgIFVyaSBwYWNrYWdlUm9vdCwKICAgIENvbXBpbGVySW5wdXRQcm92aWRlciBpbnB1dFByb3ZpZGVyLAogICAgRGlhZ25vc3RpY0hhbmRsZXIgaGFuZGxlciwKICAgIFtMaXN0PFN0cmluZz4gb3B0aW9ucyA9IGNvbnN0IFtdLAogICAgQ29tcGlsZXJPdXRwdXRQcm92aWRlciBvdXRwdXRQcm92aWRlciwKICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQgPSBjb25zdCB7fSwKICAgIFVyaSBwYWNrYWdlQ29uZmlnXSkgewogIENvbXBpbGVyT3B0aW9ucyBjb21waWxlck9wdGlvbnMgPSBDb21waWxlck9wdGlvbnMucGFyc2Uob3B0aW9ucywKICAgICAgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTogbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSkKICAgIC4uZW50cnlQb2ludCA9IHNjcmlwdAogICAgLi5wYWNrYWdlUm9vdCA9IHBhY2thZ2VSb290CiAgICAuLnBhY2thZ2VDb25maWcgPSBwYWNrYWdlQ29uZmlnCiAgICAuLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7CgogIG5ld19hcGkuQ29tcGlsZXJJbnB1dCBjb21waWxlcklucHV0ID0gbmV3IExlZ2FjeUNvbXBpbGVySW5wdXQoaW5wdXRQcm92aWRlcik7CiAgbmV3X2FwaS5Db21waWxlckRpYWdub3N0aWNzIGNvbXBpbGVyRGlhZ25vc3RpY3MgPQogICAgICBuZXcgTGVnYWN5Q29tcGlsZXJEaWFnbm9zdGljcyhoYW5kbGVyKTsKICBuZXdfYXBpLkNvbXBpbGVyT3V0cHV0IGNvbXBpbGVyT3V0cHV0ID0KICAgICAgbmV3IExlZ2FjeUNvbXBpbGVyT3V0cHV0KG91dHB1dFByb3ZpZGVyKTsKCiAgcmV0dXJuIG5ld19hcGkKICAgICAgLmNvbXBpbGUoCiAgICAgICAgICBjb21waWxlck9wdGlvbnMsIGNvbXBpbGVySW5wdXQsIGNvbXBpbGVyRGlhZ25vc3RpY3MsIGNvbXBpbGVyT3V0cHV0KQogICAgICAudGhlbigobmV3X2FwaS5Db21waWxhdGlvblJlc3VsdCByZXN1bHQpIHsKICAgIHJldHVybiBuZXcgQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0LmNvbXBpbGVyLCBpc1N1Y2Nlc3M6IHJlc3VsdC5pc1N1Y2Nlc3MpOwogIH0pOwp9CgovLy8gS2luZCBvZiBkaWFnbm9zdGljcyB0aGF0IHRoZSBjb21waWxlciBjYW4gcmVwb3J0LgpjbGFzcyBEaWFnbm9zdGljIHsKICAvLy8gQW4gZXJyb3IgYXMgaWRlbnRpZmllZCBieSB0aGUgIkRhcnQgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UKICAvLy8gU3BlY2lmaWNhdGlvbiIgW2h0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3Mvc3BlYy9dLgogIC8vLwogIC8vLyBOb3RlOiB0aGUgY29tcGlsZXIgbWF5IHN0aWxsIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSByZXN1bHQgYWZ0ZXIKICAvLy8gcmVwb3J0aW5nIGEgY29tcGlsYXRpb24gZXJyb3IuIFRoZSBzcGVjaWZpY2F0aW9uIHNheXM6CiAgLy8vCiAgLy8vICJBIGNvbXBpbGUtdGltZSBlcnJvciBtdXN0IGJlIHJlcG9ydGVkIGJ5IGEgRGFydCBjb21waWxlciBiZWZvcmUKICAvLy8gdGhlIGVycm9uZW91cyBjb2RlIGlzIGV4ZWN1dGVkLiIgYW5kICJJZiBhIGNvbXBpbGUtdGltZSBlcnJvcgogIC8vLyBvY2N1cnMgd2l0aGluIHRoZSBjb2RlIG9mIGEgcnVubmluZyBpc29sYXRlIEEsIEEgaXMgaW1tZWRpYXRlbHkKICAvLy8gc3VzcGVuZGVkLiIKICAvLy8KICAvLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBjb21waWxlciBjYW4gZ2VuZXJhdGUgY29kZSB0aGF0IHdoZW4gZXhlY3V0ZWQKICAvLy8gdGVybWluYXRlcyBleGVjdXRpb24uCiAgc3RhdGljIGNvbnN0IERpYWdub3N0aWMgRVJST1IgPSBjb25zdCBEaWFnbm9zdGljKDEsICdlcnJvcicpOwoKICAvLy8gQSB3YXJuaW5nIGFzIGlkZW50aWZpZWQgYnkgdGhlICJEYXJ0IFByb2dyYW1taW5nIExhbmd1YWdlCiAgLy8vIFNwZWNpZmljYXRpb24iIFtodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL3NwZWMvXS4KICBzdGF0aWMgY29uc3QgRGlhZ25vc3RpYyBXQVJOSU5HID0gY29uc3QgRGlhZ25vc3RpYygyLCAnd2FybmluZycpOwoKICAvLy8gQW55IG90aGVyIHdhcm5pbmcgdGhhdCBpcyBub3QgY292ZXJlZCBieSBbV0FSTklOR10uCiAgc3RhdGljIGNvbnN0IERpYWdub3N0aWMgSElOVCA9IGNvbnN0IERpYWdub3N0aWMoNCwgJ2hpbnQnKTsKCiAgLy8vIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZWNlZGluZyBub24taW5mbyBkaWFnbm9zdGljIGZyb20gdGhlCiAgLy8vIGNvbXBpbGVyLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBkdXBsaWNhdGVkIGRlZmluaXRpb24uIFRoZSBjb21waWxlciBmaXJzdCBlbWl0cyBhCiAgLy8vIG1lc3NhZ2UgYWJvdXQgdGhlIGR1cGxpY2F0ZWQgZGVmaW5pdGlvbiwgdGhlbiBlbWl0cyBhbiBpbmZvIG1lc3NhZ2UgYWJvdXQKICAvLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBleGlzdGluZyBkZWZpbml0aW9uLgogIHN0YXRpYyBjb25zdCBEaWFnbm9zdGljIElORk8gPSBjb25zdCBEaWFnbm9zdGljKDgsICdpbmZvJyk7CgogIC8vLyBJbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIHRoYXQgc2hvdWxkbid0IGJlIHByaW50ZWQgdW5sZXNzCiAgLy8vIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyIG9mIGEgY29tcGlsZXIuCiAgc3RhdGljIGNvbnN0IERpYWdub3N0aWMgVkVSQk9TRV9JTkZPID0gY29uc3QgRGlhZ25vc3RpYygxNiwgJ3ZlcmJvc2UgaW5mbycpOwoKICAvLy8gQW4gaW50ZXJuYWwgZXJyb3IgaW4gdGhlIGNvbXBpbGVyLgogIHN0YXRpYyBjb25zdCBEaWFnbm9zdGljIENSQVNIID0gY29uc3QgRGlhZ25vc3RpYygzMiwgJ2NyYXNoJyk7CgogIC8vLyBBbiBbaW50XSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGtpbmQuIFRoZSBvcmRpbmFscyBhcmUgZGVzaWduZWQKICAvLy8gdG8gYmUgdXNlZCBhcyBiaXRzZXRzLgogIGZpbmFsIGludCBvcmRpbmFsOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBraW5kLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBub3QgcHJpdmF0ZSB0byBzdXBwb3J0IHVzZXItZGVmaW5lZAogIC8vLyBkaWFnbm9zdGljIGtpbmRzLgogIGNvbnN0IERpYWdub3N0aWModGhpcy5vcmRpbmFsLCB0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwp9CoCxAE5OPAESARUBJyIwAUc8AUpGBFEQBCkESk9QP0oBPDMBTA8ESDtFPioENwQiIB4iBD4iUQE/QkA/RklEFiBDATAaUDUYATQGTSoSATwCAUckBEYERkI4BEZIRhIjECMVKR8mKzAaQzwaICQhAVA0LiowAREQTzFQBgIBNhM/OwZGPQZHREYSBkgcQAFAO0QBOj4BThAGUFAvPgE+Nk8BKUEBRh0VAR0VAT4YLQEMHQIBHnBhY2thZ2U6Y29tcGlsZXIvY29tcGlsZXIuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9hcGlpbXBsLmRhcnSi3y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGxlZ19hcGlpbXBsOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmODsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnCiAgICBzaG93IGdldFN1cHBvcnRlZExpYnJhcnlOYW1lczsKCmltcG9ydCAnLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKaW1wb3J0ICdjb21tb24vdGFza3MuZGFydCcgc2hvdyBHZW5lcmljVGFzaywgTWVhc3VyZXI7CmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbXBpbGVyLmRhcnQnOwppbXBvcnQgJ2RpYWdub3N0aWNzL21lc3NhZ2VzLmRhcnQnIHNob3cgTWVzc2FnZTsKaW1wb3J0ICdlbnZpcm9ubWVudC5kYXJ0JzsKaW1wb3J0ICdpby9zb3VyY2VfZmlsZS5kYXJ0JzsKaW1wb3J0ICdvcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zOwoKLy8vIEltcGxlbWVudHMgdGhlIFtDb21waWxlcl0gdXNpbmcgYSBbYXBpLkNvbXBpbGVySW5wdXRdIGZvciBzdXBwbHlpbmcgdGhlCi8vLyBzb3VyY2VzLgpjbGFzcyBDb21waWxlckltcGwgZXh0ZW5kcyBDb21waWxlciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVhc3VyZXIgbWVhc3VyZXI7CiAgQG92ZXJyaWRlCiAgYXBpLkNvbXBpbGVySW5wdXQgcHJvdmlkZXI7CiAgYXBpLkNvbXBpbGVyRGlhZ25vc3RpY3MgaGFuZGxlcjsKCiAgR2VuZXJpY1Rhc2sgdXNlckhhbmRsZXJUYXNrOwogIEdlbmVyaWNUYXNrIHVzZXJQcm92aWRlclRhc2s7CgogIENvbXBpbGVySW1wbCh0aGlzLnByb3ZpZGVyLCBhcGkuQ29tcGlsZXJPdXRwdXQgb3V0cHV0UHJvdmlkZXIsIHRoaXMuaGFuZGxlciwKICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIHtNYWtlUmVwb3J0ZXJGdW5jdGlvbiBtYWtlUmVwb3J0ZXJ9KQogICAgICAvLyBOT1RFOiBhbGxvY2F0aW5nIG1lYXN1cmVyIGlzIGRvbmUgdXBmcm9udCB0byBlbnN1cmUgdGhlIHdhbGxjbG9jayBpcwogICAgICAvLyBzdGFydGVkIGJlZm9yZSBvdGhlciBjb21wdXRhdGlvbnMuCiAgICAgIDogbWVhc3VyZXIgPSBuZXcgTWVhc3VyZXIoZW5hYmxlVGFza01lYXN1cmVtZW50czogb3B0aW9ucy52ZXJib3NlKSwKICAgICAgICBzdXBlcigKICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucywKICAgICAgICAgICAgb3V0cHV0UHJvdmlkZXI6IG91dHB1dFByb3ZpZGVyLAogICAgICAgICAgICBlbnZpcm9ubWVudDogbmV3IF9FbnZpcm9ubWVudChvcHRpb25zLmVudmlyb25tZW50KSwKICAgICAgICAgICAgbWFrZVJlcG9ydGVyOiBtYWtlUmVwb3J0ZXIpIHsKICAgIHRhc2tzLmFkZEFsbChbCiAgICAgIHVzZXJIYW5kbGVyVGFzayA9IG5ldyBHZW5lcmljVGFzaygnRGlhZ25vc3RpYyBoYW5kbGVyJywgbWVhc3VyZXIpLAogICAgICB1c2VyUHJvdmlkZXJUYXNrID0gbmV3IEdlbmVyaWNUYXNrKCdJbnB1dCBwcm92aWRlcicsIG1lYXN1cmVyKSwKICAgIF0pOwogIH0KCiAgdm9pZCBsb2cobWVzc2FnZSkgewogICAgY2FsbFVzZXJIYW5kbGVyKAogICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG1lc3NhZ2UsIGFwaS5EaWFnbm9zdGljLlZFUkJPU0VfSU5GTyk7CiAgfQoKICBGdXR1cmUgc2V0dXBTZGsoKSB7CiAgICB2YXIgZnV0dXJlID0gbmV3IEZ1dHVyZS52YWx1ZShudWxsKTsKICAgIF9FbnZpcm9ubWVudCBlbnYgPSBlbnZpcm9ubWVudDsKICAgIGlmIChlbnYuc3VwcG9ydGVkTGlicmFyaWVzID09IG51bGwpIHsKICAgICAgZnV0dXJlID0gZnV0dXJlLnRoZW4oKF8pIHsKICAgICAgICBVcmkgc3BlY2lmaWNhdGlvblVyaSA9IG9wdGlvbnMubGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTsKICAgICAgICByZXR1cm4gcHJvdmlkZXIucmVhZEZyb21Vcmkoc3BlY2lmaWNhdGlvblVyaSkudGhlbigoYXBpLklucHV0IHNwZWMpIHsKICAgICAgICAgIFN0cmluZyBqc29uID0gbnVsbDsKICAgICAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IHNpbXBsaWZ5IHRoaXMsIHdlIGhhdmUgc29tZSBBUEkgaW5jb25zaXN0ZW5jaWVzIHdoZW4KICAgICAgICAgIC8vIG91ciBpbnRlcm5hbCBpbnB1dCBhZGRzIGEgdGVybWluYXRpbmcgemVyby4KICAgICAgICAgIGlmIChzcGVjIGlzIFNvdXJjZUZpbGUpIHsKICAgICAgICAgICAganNvbiA9IHNwZWMuc2xvd1RleHQoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3BlYyBpcyBCaW5hcnkpIHsKICAgICAgICAgICAganNvbiA9IHV0ZjguZGVjb2RlKHNwZWMuZGF0YSk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVE9ETyhzaWdtdW5kKTogd291bGQgYmUgbmljZSB0byBmcm9udC1sb2FkIHNvbWUgb2YgdGhlIENGRSBvcHRpb24KICAgICAgICAgIC8vIHByb2Nlc3NpbmcgYW5kIHBhcnNlIHRoaXMgLmpzb24gZmlsZSBvbmx5IG9uY2UuCiAgICAgICAgICBlbnYuc3VwcG9ydGVkTGlicmFyaWVzID0gZ2V0U3VwcG9ydGVkTGlicmFyeU5hbWVzKHNwZWNpZmljYXRpb25VcmksCiAgICAgICAgICAgICAgICAgIGpzb24sIG9wdGlvbnMuY29tcGlsZUZvclNlcnZlciA/ICJkYXJ0MmpzX3NlcnZlciIgOiAiZGFydDJqcyIpCiAgICAgICAgICAgICAgLnRvU2V0KCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBkb2VzIG5vdCBhcHBseSBhbnltb3JlLgogICAgLy8gVGhlIGluY3JlbWVudGFsIGNvbXBpbGVyIHNldHMgdXAgdGhlIHNkayBiZWZvcmUgcnVuLgogICAgLy8gVGhlcmVmb3JlIHRoaXMgd2lsbCBiZSBjYWxsZWQgYSBzZWNvbmQgdGltZS4KICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gcnVuKFVyaSB1cmkpIHsKICAgIER1cmF0aW9uIHNldHVwRHVyYXRpb24gPSBtZWFzdXJlci5lbGFwc2VkV2FsbENsb2NrOwogICAgcmV0dXJuIHNlbGZUYXNrLm1lYXN1cmVTdWJ0YXNrKCJpbXBsLnJ1biIsICgpIHsKICAgICAgcmV0dXJuIHNldHVwU2RrKCkudGhlbigoXykgewogICAgICAgIHJldHVybiBzdXBlci5ydW4odXJpKTsKICAgICAgfSkudGhlbigoYm9vbCBzdWNjZXNzKSB7CiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkgewogICAgICAgICAgU3RyaW5nQnVmZmVyIHRpbWluZ3MgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICBjb21wdXRlVGltaW5ncyhzZXR1cER1cmF0aW9uLCB0aW1pbmdzKTsKICAgICAgICAgIGxvZygiJHRpbWluZ3MiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBTdHJpbmcgX2Zvcm1hdE1zKGludCBtcykgewogICAgcmV0dXJuIChtcyAvIDEwMDApLnRvU3RyaW5nQXNGaXhlZCgzKSArICdzJzsKICB9CgogIHZvaWQgY29tcHV0ZVRpbWluZ3MoRHVyYXRpb24gc2V0dXBEdXJhdGlvbiwgU3RyaW5nQnVmZmVyIHRpbWluZ3MpIHsKICAgIHRpbWluZ3Mud3JpdGVsbigiVGltaW5nczoiKTsKICAgIER1cmF0aW9uIHRvdGFsRHVyYXRpb24gPSBtZWFzdXJlci5lbGFwc2VkV2FsbENsb2NrOwogICAgRHVyYXRpb24gYXN5bmNEdXJhdGlvbiA9IG1lYXN1cmVyLmVsYXBzZWRBc3luY1dhbGxDbG9jazsKICAgIER1cmF0aW9uIGN1bXVsYXRlZER1cmF0aW9uID0gRHVyYXRpb24uemVybzsKICAgIExpc3Q8X1RpbWluZ0RhdGE+IHRpbWluZ0RhdGEgPSBbXTsKICAgIGZvciAoZmluYWwgdGFzayBpbiB0YXNrcykgewogICAgICBTdHJpbmcgcnVubmluZyA9IHRhc2suaXNSdW5uaW5nID8gIioiIDogIiAiOwogICAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IHRhc2suZHVyYXRpb247CiAgICAgIGlmIChkdXJhdGlvbiAhPSBEdXJhdGlvbi56ZXJvKSB7CiAgICAgICAgY3VtdWxhdGVkRHVyYXRpb24gKz0gZHVyYXRpb247CiAgICAgICAgaW50IG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogICAgICAgIHRpbWluZ0RhdGEuYWRkKF9UaW1pbmdEYXRhKCcgICAkcnVubmluZyR7dGFzay5uYW1lfTonLCBtaWxsaXNlY29uZHMsCiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyAqIDEwMCAvIHRvdGFsRHVyYXRpb24uaW5NaWxsaXNlY29uZHMpKTsKICAgICAgICBmb3IgKFN0cmluZyBzdWJ0YXNrIGluIHRhc2suc3VidGFza3MpIHsKICAgICAgICAgIGludCBzdWJ0aW1lID0gdGFzay5nZXRTdWJ0YXNrVGltZShzdWJ0YXNrKTsKICAgICAgICAgIFN0cmluZyBydW5uaW5nID0gdGFzay5nZXRTdWJ0YXNrSXNSdW5uaW5nKHN1YnRhc2spID8gIioiIDogIiAiOwogICAgICAgICAgdGltaW5nRGF0YS5hZGQoX1RpbWluZ0RhdGEoJyAgICRydW5uaW5nJHt0YXNrLm5hbWV9ID4gJHN1YnRhc2s6JywKICAgICAgICAgICAgICBzdWJ0aW1lLCBzdWJ0aW1lICogMTAwIC8gdG90YWxEdXJhdGlvbi5pbk1pbGxpc2Vjb25kcykpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaW50IGxvbmdlc3REZXNjcmlwdGlvbiA9IHRpbWluZ0RhdGEKICAgICAgICAubWFwKChkKSA9PiBkLmRlc2NyaXB0aW9uLmxlbmd0aCkKICAgICAgICAuZm9sZCgwLCAoYSwgYikgPT4gYSA8IGIgPyBiIDogYSk7CiAgICBmb3IgKHZhciBkYXRhIGluIHRpbWluZ0RhdGEpIHsKICAgICAgdmFyIG1zID0gX2Zvcm1hdE1zKGRhdGEubWlsbGlzZWNvbmRzKTsKICAgICAgdmFyIHBhZGRpbmcgPQogICAgICAgICAgIiAiICogKGxvbmdlc3REZXNjcmlwdGlvbiArIDEwIC0gZGF0YS5kZXNjcmlwdGlvbi5sZW5ndGggLSBtcy5sZW5ndGgpOwogICAgICB2YXIgcGVyY2VudFBhZGRpbmcgPSBkYXRhLnBlcmNlbnQgPCAxMCA/ICIgIiA6ICIiOwogICAgICB0aW1pbmdzLndyaXRlbG4oJyR7ZGF0YS5kZXNjcmlwdGlvbn0kcGFkZGluZyAkbXMgJwogICAgICAgICAgJyRwZXJjZW50UGFkZGluZygke2RhdGEucGVyY2VudC50b1N0cmluZ0FzRml4ZWQoMSl9JSknKTsKICAgIH0KICAgIER1cmF0aW9uIHVuYWNjb3VudGVkRHVyYXRpb24gPQogICAgICAgIHRvdGFsRHVyYXRpb24gLSBjdW11bGF0ZWREdXJhdGlvbiAtIHNldHVwRHVyYXRpb24gLSBhc3luY0R1cmF0aW9uOwogICAgZG91YmxlIHBlcmNlbnQgPQogICAgICAgIHVuYWNjb3VudGVkRHVyYXRpb24uaW5NaWxsaXNlY29uZHMgKiAxMDAgLyB0b3RhbER1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogICAgdGltaW5ncy53cml0ZSgKICAgICAgICAnICAgIFRvdGFsIGNvbXBpbGUtdGltZSAke19mb3JtYXRNcyh0b3RhbER1cmF0aW9uLmluTWlsbGlzZWNvbmRzKX07JwogICAgICAgICcgc2V0dXAgJHtfZm9ybWF0TXMoc2V0dXBEdXJhdGlvbi5pbk1pbGxpc2Vjb25kcyl9OycKICAgICAgICAnIGFzeW5jICR7X2Zvcm1hdE1zKGFzeW5jRHVyYXRpb24uaW5NaWxsaXNlY29uZHMpfTsnCiAgICAgICAgJyB1bmFjY291bnRlZCAke19mb3JtYXRNcyh1bmFjY291bnRlZER1cmF0aW9uLmluTWlsbGlzZWNvbmRzKX0nCiAgICAgICAgJyAoJHtwZXJjZW50LnRvU3RyaW5nQXNGaXhlZCgyKX0lKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnREaWFnbm9zdGljKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBfcmVwb3J0RGlhZ25vc3RpY01lc3NhZ2UobWVzc2FnZSwga2luZCk7CiAgICBmb3IgKERpYWdub3N0aWNNZXNzYWdlIGluZm8gaW4gaW5mb3MpIHsKICAgICAgX3JlcG9ydERpYWdub3N0aWNNZXNzYWdlKGluZm8sIGFwaS5EaWFnbm9zdGljLklORk8pOwogICAgfQogIH0KCiAgdm9pZCBfcmVwb3J0RGlhZ25vc3RpY01lc3NhZ2UoCiAgICAgIERpYWdub3N0aWNNZXNzYWdlIGRpYWdub3N0aWNNZXNzYWdlLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICAvLyBbOnNwYW4udXJpOl0gbWlnaHQgYmUgWzpudWxsOl0gaW4gY2FzZSBvZiBhIFtTY3JpcHRdIHdpdGggbm8gW3VyaV0uIEZvcgogICAgLy8gaW5zdGFuY2UgaW4gdGhlIFtUeXBlc10gY29uc3RydWN0b3IgaW4gdHlwZWNoZWNrZXIuZGFydC4KICAgIFNvdXJjZVNwYW4gc3BhbiA9IGRpYWdub3N0aWNNZXNzYWdlLnNvdXJjZVNwYW47CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBkaWFnbm9zdGljTWVzc2FnZS5tZXNzYWdlOwogICAgaWYgKHNwYW4gPT0gbnVsbCB8fCBzcGFuLnVyaSA9PSBudWxsKSB7CiAgICAgIGNhbGxVc2VySGFuZGxlcihtZXNzYWdlLCBudWxsLCBudWxsLCBudWxsLCAnJG1lc3NhZ2UnLCBraW5kKTsKICAgIH0gZWxzZSB7CiAgICAgIGNhbGxVc2VySGFuZGxlcigKICAgICAgICAgIG1lc3NhZ2UsIHNwYW4udXJpLCBzcGFuLmJlZ2luLCBzcGFuLmVuZCwgJyRtZXNzYWdlJywga2luZCk7CiAgICB9CiAgfQoKICB2b2lkIGNhbGxVc2VySGFuZGxlcihNZXNzYWdlIG1lc3NhZ2UsIFVyaSB1cmksIGludCBiZWdpbiwgaW50IGVuZCwKICAgICAgU3RyaW5nIHRleHQsIGFwaS5EaWFnbm9zdGljIGtpbmQpIHsKICAgIHRyeSB7CiAgICAgIHVzZXJIYW5kbGVyVGFzay5tZWFzdXJlKCgpIHsKICAgICAgICBoYW5kbGVyLnJlcG9ydChtZXNzYWdlLCB1cmksIGJlZ2luLCBlbmQsIHRleHQsIGtpbmQpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGV4LCBzKSB7CiAgICAgIHJlcG9ydENyYXNoSW5Vc2VyQ29kZSgnVW5jYXVnaHQgZXhjZXB0aW9uIGluIGRpYWdub3N0aWMgaGFuZGxlcicsIGV4LCBzKTsKICAgICAgcmV0aHJvdzsKICAgIH0KICB9CgogIEZ1dHVyZTxhcGkuSW5wdXQ+IGNhbGxVc2VyUHJvdmlkZXIoVXJpIHVyaSwgYXBpLklucHV0S2luZCBpbnB1dEtpbmQpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB1c2VyUHJvdmlkZXJUYXNrCiAgICAgICAgICAubWVhc3VyZUlvKCgpID0+IHByb3ZpZGVyLnJlYWRGcm9tVXJpKHVyaSwgaW5wdXRLaW5kOiBpbnB1dEtpbmQpKTsKICAgIH0gY2F0Y2ggKGV4LCBzKSB7CiAgICAgIHJlcG9ydENyYXNoSW5Vc2VyQ29kZSgnVW5jYXVnaHQgZXhjZXB0aW9uIGluIGlucHV0IHByb3ZpZGVyJywgZXgsIHMpOwogICAgICByZXRocm93OwogICAgfQogIH0KfQoKY2xhc3MgX0Vudmlyb25tZW50IGltcGxlbWVudHMgRW52aXJvbm1lbnQgewogIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGVmaW5pdGlvbnM7CiAgTWFwPFN0cmluZywgU3RyaW5nPiBfY29tcGxldGVNYXA7CiAgU2V0PFN0cmluZz4gc3VwcG9ydGVkTGlicmFyaWVzOwoKICBfRW52aXJvbm1lbnQodGhpcy5kZWZpbml0aW9ucyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2YWx1ZU9mKFN0cmluZyBuYW1lKSB7CiAgICBpZiAoX2NvbXBsZXRlTWFwICE9IG51bGwpIHJldHVybiBfY29tcGxldGVNYXBbbmFtZV07CiAgICB2YXIgcmVzdWx0ID0gZGVmaW5pdGlvbnNbbmFtZV07CiAgICBpZiAocmVzdWx0ICE9IG51bGwgfHwgZGVmaW5pdGlvbnMuY29udGFpbnNLZXkobmFtZSkpIHJldHVybiByZXN1bHQ7CiAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChfZGFydExpYnJhcnlFbnZpcm9ubWVudFByZWZpeCkpIHJldHVybiBudWxsOwoKICAgIFN0cmluZyBsaWJyYXJ5TmFtZSA9IG5hbWUuc3Vic3RyaW5nKF9kYXJ0TGlicmFyeUVudmlyb25tZW50UHJlZml4Lmxlbmd0aCk7CgogICAgLy8gUHJpdmF0ZSBsaWJyYXJpZXMgYXJlIG5vdCBleHBvc2VkIHRvIHRoZSB1c2Vycy4KICAgIGlmIChsaWJyYXJ5TmFtZS5zdGFydHNXaXRoKCJfIikpIHJldHVybiBudWxsOwogICAgaWYgKHN1cHBvcnRlZExpYnJhcmllcy5jb250YWlucyhsaWJyYXJ5TmFtZSkpIHJldHVybiAidHJ1ZSI7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxTdHJpbmcsIFN0cmluZz4gdG9NYXAoKSB7CiAgICBpZiAoX2NvbXBsZXRlTWFwID09IG51bGwpIHsKICAgICAgX2NvbXBsZXRlTWFwID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4uZnJvbShkZWZpbml0aW9ucyk7CiAgICAgIGZvciAoU3RyaW5nIGxpYnJhcnlOYW1lIGluIHN1cHBvcnRlZExpYnJhcmllcykgewogICAgICAgIGlmICghbGlicmFyeU5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgICAgICBTdHJpbmcga2V5ID0gJyR7X2RhcnRMaWJyYXJ5RW52aXJvbm1lbnRQcmVmaXh9JHtsaWJyYXJ5TmFtZX0nOwogICAgICAgICAgaWYgKCFkZWZpbml0aW9ucy5jb250YWluc0tleShrZXkpKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZU1hcFtrZXldID0gInRydWUiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jb21wbGV0ZU1hcDsKICB9Cn0KCi8vLyBGb3IgZXZlcnkgJ2RhcnQ6JyBsaWJyYXJ5LCBhIGNvcnJlc3BvbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0Ci8vLyB0byAidHJ1ZSIuIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSdzIG5hbWUgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YKLy8vIHRoaXMgcHJlZml4IGFuZCB0aGUgbmFtZSAod2l0aG91dCB0aGUgJ2RhcnQ6Jy4KLy8vCi8vLyBGb3IgZXhhbXBsZSAnZGFydDpodG1sJyBoYXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdkYXJ0LmxpYnJhcnkuaHRtbCcgc2V0Ci8vLyB0byAidHJ1ZSIuCmNvbnN0IFN0cmluZyBfZGFydExpYnJhcnlFbnZpcm9ubWVudFByZWZpeCA9ICdkYXJ0LmxpYnJhcnkuJzsKCmNsYXNzIF9UaW1pbmdEYXRhIHsKICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247CiAgZmluYWwgaW50IG1pbGxpc2Vjb25kczsKICBmaW5hbCBkb3VibGUgcGVyY2VudDsKCiAgX1RpbWluZ0RhdGEodGhpcy5kZXNjcmlwdGlvbiwgdGhpcy5taWxsaXNlY29uZHMsIHRoaXMucGVyY2VudCk7Cn0KgP0ATk48ARUBFSEBOSMBJjcWGDEbHiwBTA0mDBsMHiMBHyABTx8rTixKDx4sQCoTSUYIBAEWFUcEARYpJCohQk4eUTkkJCcrDAFPPU5RGAwKBjk8NBMEAQweODQjHx8fNTIbChgKCAQBHTEEAUYhOD0wJyAzKScnNE1BMDZKTEcKCAYoKisjLRRROTlDBiNLFVETTT09SC4EAQwzPC0sOwYEASFCT0A0MSxEDRdGBgQBRSoKIz4KFlAPBgQBSQoeTRZMDwYEAgEsKSQiASIBDCA5JEhGAU8BNzJBEQQBDCAgQDcsSS8oDAoIBhkEAgFLRzMEUQ8+ARQcGhgBQgIBIXBhY2thZ2U6Y29tcGlsZXIvc3JjL2FwaWltcGwuZGFydClzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb2xvcnMuZGFydITuLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb2xvcnM7CgovLyBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI0NTSV9jb2Rlcwpjb25zdCBTdHJpbmcgUkVTRVQgPSAnXHUwMDFiWzBtJzsKCi8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjQ29sb3JzCmNvbnN0IFN0cmluZyBCTEFDS19DT0xPUiA9ICdcdTAwMWJbMzBtJzsKY29uc3QgU3RyaW5nIFJFRF9DT0xPUiA9ICdcdTAwMWJbMzFtJzsKY29uc3QgU3RyaW5nIEdSRUVOX0NPTE9SID0gJ1x1MDAxYlszMm0nOwpjb25zdCBTdHJpbmcgWUVMTE9XX0NPTE9SID0gJ1x1MDAxYlszM20nOwpjb25zdCBTdHJpbmcgQkxVRV9DT0xPUiA9ICdcdTAwMWJbMzRtJzsKY29uc3QgU3RyaW5nIE1BR0VOVEFfQ09MT1IgPSAnXHUwMDFiWzM1bSc7CmNvbnN0IFN0cmluZyBDWUFOX0NPTE9SID0gJ1x1MDAxYlszNm0nOwpjb25zdCBTdHJpbmcgV0hJVEVfQ09MT1IgPSAnXHUwMDFiWzM3bSc7CgpTdHJpbmcgd3JhcChTdHJpbmcgc3RyaW5nLCBTdHJpbmcgY29sb3IpID0+ICIke2NvbG9yfSRzdHJpbmcke1JFU0VUfSI7CgpTdHJpbmcgYmxhY2soU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIEJMQUNLX0NPTE9SKTsKU3RyaW5nIHJlZChTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgUkVEX0NPTE9SKTsKU3RyaW5nIGdyZWVuKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBHUkVFTl9DT0xPUik7ClN0cmluZyB5ZWxsb3coU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIFlFTExPV19DT0xPUik7ClN0cmluZyBibHVlKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBCTFVFX0NPTE9SKTsKU3RyaW5nIG1hZ2VudGEoU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIE1BR0VOVEFfQ09MT1IpOwpTdHJpbmcgY3lhbihTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgQ1lBTl9DT0xPUik7ClN0cmluZyB3aGl0ZShTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgV0hJVEVfQ09MT1IpOwofAE5OPAEYAT8iATwpJykqKCsoKQFHATo2Ojw4Pjg6ASBwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb2xvcnMuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pby9zb3VyY2VfZmlsZS5kYXJ0oscvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmlvLnNvdXJjZV9maWxlOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmODsKaW1wb3J0ICdkYXJ0Om1hdGgnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YScgc2hvdyBVaW50OExpc3Q7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBrZXJuZWwgc2hvdyBMb2NhdGlvbiwgU291cmNlOwoKaW1wb3J0ICdsb2NhdGlvbl9wcm92aWRlci5kYXJ0JyBzaG93IExvY2F0aW9uUHJvdmlkZXI7CmltcG9ydCAnLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnOwoKLy8vIFJlcHJlc2VudHMgYSBmaWxlIG9mIHNvdXJjZSBjb2RlLiBUaGUgY29udGVudCBjYW4gYmUgZWl0aGVyIGEgW1N0cmluZ10gb3IKLy8vIGEgVVRGLTggZW5jb2RlZCBbTGlzdDxpbnQ+XSBvZiBieXRlcy4KYWJzdHJhY3QgY2xhc3MgU291cmNlRmlsZTxUPiBpbXBsZW1lbnRzIElucHV0PFQ+LCBMb2NhdGlvblByb3ZpZGVyIHsKICAvLy8gVGhlIGFic29sdXRlIFVSSSBvZiB0aGUgc291cmNlIGZpbGUuCiAgQG92ZXJyaWRlCiAgVXJpIGdldCB1cmk7CgogIEBvdmVycmlkZQogIElucHV0S2luZCBnZXQgaW5wdXRLaW5kID0+IElucHV0S2luZC5VVEY4OwoKICBrZXJuZWwuU291cmNlIGNhY2hlZEtlcm5lbFNvdXJjZTsKCiAga2VybmVsLlNvdXJjZSBnZXQga2VybmVsU291cmNlIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgU291cmNlIG9iamVjdCwKICAgIC8vIHdlIHNob3VsZCB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZnJvbnQtZW5kLgogICAgcmV0dXJuIGNhY2hlZEtlcm5lbFNvdXJjZSA/Pz0gbmV3IGtlcm5lbC5Tb3VyY2UoCiAgICAgICAgbGluZVN0YXJ0cywKICAgICAgICBzbG93VXRmOFplcm9UZXJtaW5hdGVkQnl0ZXMoKSwKICAgICAgICB1cmkgLyogVE9ETyhqZW5zaik6IFdoYXQgaXMgdGhlIGltcG9ydCBVUkk/ICovLAogICAgICAgIHVyaSkKICAgICAgLi5jYWNoZWRUZXh0ID0gc2xvd1RleHQoKTsKICB9CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgZmlsZS4KICAvLy8KICAvLy8gVGhpcyBpcyBbdXJpXSwgbWF5YmUgcmVsYXRpdml6ZWQgdG8gYSBtb3JlIGh1bWFuLXJlYWRhYmxlIGZvcm0uCiAgU3RyaW5nIGdldCBmaWxlbmFtZSA9PiB1cmkudG9TdHJpbmcoKTsKCiAgLy8vIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpbGUgcmVwcmVzZW50ZWQgYXMgYSBTdHJpbmcKICBTdHJpbmcgc2xvd1RleHQoKTsKCiAgLy8vIFRoZSBjb250ZW50IG9mIHRoZSBmaWxlIHJlcHJlc2VudGVkIGFzIGEgVVRGLTggZW5jb2RlZCBbTGlzdDxpbnQ+XSwKICAvLy8gdGVybWluYXRlZCB3aXRoIGEgdHJhaWxpbmcgMCBieXRlLgogIExpc3Q8aW50PiBzbG93VXRmOFplcm9UZXJtaW5hdGVkQnl0ZXMoKTsKCiAgLy8vIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBmaWxlLCBpLmUuLAogIC8vLyBlcXVpdmFsZW50IHRvIFs6c2xvd1RleHQoKS5sZW5ndGg6XSwgYnV0IGZhc3Rlci4KICBpbnQgZ2V0IGxlbmd0aDsKCiAgLy8vIFNldHMgdGhlIHN0cmluZyBsZW5ndGggb2YgdGhpcyBzb3VyY2UgZmlsZS4gRm9yIHNvdXJjZSBmaWxlcyBiYXNlZCBvbgogIC8vLyBVVEYtOCBieXRlIGFycmF5cywgdGhlIHN0cmluZyBsZW5ndGggaXMgY29tcHV0ZWQgYW5kIGFzc2lnbmVkIGJ5IHRoZQogIC8vLyBzY2FubmVyLgogIHNldCBsZW5ndGgoaW50IHYpOwoKICAvLy8gQSBtYXAgZnJvbSBsaW5lIG51bWJlcnMgdG8gb2Zmc2V0cyBpbiB0aGUgc3RyaW5nIHRleHQgcmVwcmVzZW50YXRpb24gb2YKICAvLy8gdGhpcyBzb3VyY2UgZmlsZS4KICBMaXN0PGludD4gZ2V0IGxpbmVTdGFydHMgewogICAgaWYgKGxpbmVTdGFydHNDYWNoZSA9PSBudWxsKSB7CiAgICAgIC8vIFdoZW4gcmVwb3J0aW5nIGVycm9ycyBkdXJpbmcgc2Nhbm5pbmcsIHRoZSBsaW5lIG51bWJlcnMgYXJlIG5vdCB5ZXQKICAgICAgLy8gYXZhaWxhYmxlIGFuZCBuZWVkIHRvIGJlIGNvbXB1dGVkIHVzaW5nIHRoaXMgc2xvdyBwYXRoLgogICAgICBsaW5lU3RhcnRzQ2FjaGUgPSBsaW5lU3RhcnRzRnJvbVN0cmluZyhzbG93VGV4dCgpKTsKICAgIH0KICAgIHJldHVybiBsaW5lU3RhcnRzQ2FjaGU7CiAgfQoKICAvLy8gU2V0cyB0aGUgbGluZSBudW1iZXJzIG1hcCBmb3IgdGhpcyBzb3VyY2UgZmlsZS4gVGhpcyBtYXAgaXMgY29tcHV0ZWQgYW5kCiAgLy8vIGFzc2lnbmVkIGJ5IHRoZSBzY2FubmVyLCBhdm9pZGluZyBhIHNlcGFyYXRlIHRyYXZlcnNhbCBvZiB0aGUgc291cmNlIGZpbGUuCiAgLy8vCiAgLy8vIFRoZSBtYXAgY29udGFpbnMgb25lIGFkZGl0aW9uYWwgZW50cnkgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgYXMgaWYgdGhlCiAgLy8vIHNvdXJjZSBmaWxlIGhhZCBvbmUgbW9yZSBlbXB0eSBsaW5lIGF0IHRoZSBlbmQuIFRoaXMgc2ltcGxpZmllcyB0aGUgYmluYXJ5CiAgLy8vIHNlYXJjaCBpbiBbZ2V0TG9jYXRpb25dLgogIHNldCBsaW5lU3RhcnRzKExpc3Q8aW50PiB2KSA9PiBsaW5lU3RhcnRzQ2FjaGUgPSB2OwoKICBMaXN0PGludD4gbGluZVN0YXJ0c0NhY2hlOwoKICBMaXN0PGludD4gbGluZVN0YXJ0c0Zyb21TdHJpbmcoU3RyaW5nIHRleHQpIHsKICAgIHZhciBzdGFydHMgPSBbMF07CiAgICB2YXIgaW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGgpIHsKICAgICAgaW5kZXggPSB0ZXh0LmluZGV4T2YoJ1xuJywgaW5kZXgpICsgMTsKICAgICAgaWYgKGluZGV4IDw9IDApIGJyZWFrOwogICAgICBzdGFydHMuYWRkKGluZGV4KTsKICAgIH0KICAgIHN0YXJ0cy5hZGQodGV4dC5sZW5ndGggKyAxKTsgLy8gT25lIGFkZGl0aW9uYWwgbGluZSBzdGFydCBhdCB0aGUgZW5kLgogICAgcmV0dXJuIHN0YXJ0czsKICB9CgogIEBvdmVycmlkZQogIGtlcm5lbC5Mb2NhdGlvbiBnZXRMb2NhdGlvbihpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4ga2VybmVsU291cmNlLmdldExvY2F0aW9uKG51bGwsIG9mZnNldCk7CiAgfQoKICBTdHJpbmcgc2xvd1N1YnN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvLy8gQ3JlYXRlIGEgcHJldHR5IHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgW21lc3NhZ2VdIGZyb20gYSBjaGFyYWN0ZXIKICAvLy8gcmFuZ2UgYFtzdGFydCwgZW5kXWAgaW4gdGhpcyBmaWxlLgogIC8vLwogIC8vLyBJZiBbaW5jbHVkZVNvdXJjZUxpbmVdIGlzIGB0cnVlYCB0aGUgZmlyc3Qgc291cmNlIGxpbmUgY29kZSBsaW5lIHRoYXQKICAvLy8gY29udGFpbnMgdGhlIHJhbmdlIHdpbGwgYmUgaW5jbHVkZWQgYXMgd2VsbCBhcyBtYXJrZXIgY2hhcmFjdGVycyAoJ14nKQogIC8vLyB1bmRlcmxpbmluZyB0aGUgcmFuZ2UuCiAgLy8vCiAgLy8vIFVzZSBbY29sb3JpemVdIHRvIHdyYXAgc291cmNlIGNvZGUgdGV4dCBhbmQgbWFya2VyIGNoYXJhY3RlcnMgaW4gY29sb3IKICAvLy8gZXNjYXBlIGNvZGVzLgogIFN0cmluZyBnZXRMb2NhdGlvbk1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAge2Jvb2wgaW5jbHVkZVNvdXJjZUxpbmU6IHRydWUsIFN0cmluZyBjb2xvcml6ZShTdHJpbmcgdGV4dCl9KSB7CiAgICBpZiAoY29sb3JpemUgPT0gbnVsbCkgewogICAgICBjb2xvcml6ZSA9ICh0ZXh0KSA9PiB0ZXh0OwogICAgfQoKICAgIGtlcm5lbC5Mb2NhdGlvbiBzdGFydExvY2F0aW9uID0ga2VybmVsU291cmNlLmdldExvY2F0aW9uKG51bGwsIHN0YXJ0KTsKICAgIGtlcm5lbC5Mb2NhdGlvbiBlbmRMb2NhdGlvbiA9IGtlcm5lbFNvdXJjZS5nZXRMb2NhdGlvbihudWxsLCBlbmQpOwogICAgaW50IGxpbmVTdGFydCA9IHN0YXJ0TG9jYXRpb24ubGluZSAtIDE7CiAgICBpbnQgY29sdW1uU3RhcnQgPSBzdGFydExvY2F0aW9uLmNvbHVtbiAtIDE7CiAgICBpbnQgbGluZUVuZCA9IGVuZExvY2F0aW9uLmxpbmUgLSAxOwogICAgaW50IGNvbHVtbkVuZCA9IGVuZExvY2F0aW9uLmNvbHVtbiAtIDE7CgogICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoJyR7ZmlsZW5hbWV9OicpOwogICAgaWYgKHN0YXJ0ICE9IGVuZCB8fCBzdGFydCAhPSAwKSB7CiAgICAgIC8vIExpbmUvY29sdW1uIGluZm8gaXMgcmVsZXZhbnQuCiAgICAgIGJ1Zi53cml0ZSgnJHtsaW5lU3RhcnQgKyAxfToke2NvbHVtblN0YXJ0ICsgMX06Jyk7CiAgICB9CiAgICBidWYud3JpdGUoJ1xuJG1lc3NhZ2VcbicpOwoKICAgIGlmIChzdGFydCAhPSBlbmQgJiYgaW5jbHVkZVNvdXJjZUxpbmUpIHsKICAgICAgaWYgKGxpbmVTdGFydCA9PSBsaW5lRW5kKSB7CiAgICAgICAgU3RyaW5nIHRleHRMaW5lID0ga2VybmVsU291cmNlLmdldFRleHRMaW5lKHN0YXJ0TG9jYXRpb24ubGluZSk7CgogICAgICAgIGludCB0b0NvbHVtbiA9IG1pbihjb2x1bW5TdGFydCArIChlbmQgLSBzdGFydCksIHRleHRMaW5lLmxlbmd0aCk7CiAgICAgICAgYnVmLndyaXRlKHRleHRMaW5lLnN1YnN0cmluZygwLCBjb2x1bW5TdGFydCkpOwogICAgICAgIGJ1Zi53cml0ZShjb2xvcml6ZSh0ZXh0TGluZS5zdWJzdHJpbmcoY29sdW1uU3RhcnQsIHRvQ29sdW1uKSkpOwogICAgICAgIGJ1Zi53cml0ZWxuKHRleHRMaW5lLnN1YnN0cmluZyh0b0NvbHVtbikpOwoKICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgZm9yICg7IGkgPCBjb2x1bW5TdGFydDsgaSsrKSB7CiAgICAgICAgICBidWYud3JpdGUoJyAnKTsKICAgICAgICB9CgogICAgICAgIGZvciAoOyBpIDwgdG9Db2x1bW47IGkrKykgewogICAgICAgICAgYnVmLndyaXRlKGNvbG9yaXplKCdeJykpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGludCBsaW5lID0gbGluZVN0YXJ0OyBsaW5lIDw9IGxpbmVFbmQ7IGxpbmUrKykgewogICAgICAgICAgU3RyaW5nIHRleHRMaW5lID0ga2VybmVsU291cmNlLmdldFRleHRMaW5lKGxpbmUgKyAxKTsKICAgICAgICAgIGlmIChsaW5lID09IGxpbmVTdGFydCkgewogICAgICAgICAgICBpZiAoY29sdW1uU3RhcnQgPiB0ZXh0TGluZS5sZW5ndGgpIHsKICAgICAgICAgICAgICBjb2x1bW5TdGFydCA9IHRleHRMaW5lLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBidWYud3JpdGUodGV4dExpbmUuc3Vic3RyaW5nKDAsIGNvbHVtblN0YXJ0KSk7CiAgICAgICAgICAgIGJ1Zi53cml0ZWxuKGNvbG9yaXplKHRleHRMaW5lLnN1YnN0cmluZyhjb2x1bW5TdGFydCkpKTsKICAgICAgICAgIH0gZWxzZSBpZiAobGluZSA9PSBsaW5lRW5kKSB7CiAgICAgICAgICAgIGlmIChjb2x1bW5FbmQgPiB0ZXh0TGluZS5sZW5ndGgpIHsKICAgICAgICAgICAgICBjb2x1bW5FbmQgPSB0ZXh0TGluZS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnVmLndyaXRlKGNvbG9yaXplKHRleHRMaW5lLnN1YnN0cmluZygwLCBjb2x1bW5FbmQpKSk7CiAgICAgICAgICAgIGJ1Zi53cml0ZWxuKHRleHRMaW5lLnN1YnN0cmluZyhjb2x1bW5FbmQpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJ1Zi53cml0ZWxuKGNvbG9yaXplKHRleHRMaW5lKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwogIH0KCiAgaW50IGdldCBsaW5lcyA9PiBsaW5lU3RhcnRzLmxlbmd0aCAtIDE7Cn0KCkxpc3Q8aW50PiBfemVyb1Rlcm1pbmF0ZUlmTmVjZXNzYXJ5KExpc3Q8aW50PiBieXRlcykgewogIGlmIChieXRlcy5sZW5ndGggPiAwICYmIGJ5dGVzLmxhc3QgPT0gMCkgcmV0dXJuIGJ5dGVzOwogIExpc3Q8aW50PiByZXN1bHQgPSBuZXcgVWludDhMaXN0KGJ5dGVzLmxlbmd0aCArIDEpOwogIHJlc3VsdC5zZXRSYW5nZSgwLCBieXRlcy5sZW5ndGgsIGJ5dGVzKTsKICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0gMDsKICByZXR1cm4gcmVzdWx0Owp9CgpjbGFzcyBVdGY4Qnl0ZXNTb3VyY2VGaWxlIGV4dGVuZHMgU291cmNlRmlsZTxMaXN0PGludD4+IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwoKICAvLy8gVGhlIFVURi04IGVuY29kZWQgY29udGVudCBvZiB0aGUgc291cmNlIGZpbGUuCiAgZmluYWwgTGlzdDxpbnQ+IHplcm9UZXJtaW5hdGVkQ29udGVudDsKCiAgLy8vIENyZWF0ZXMgYSBVdGY4Qnl0ZXNTb3VyY2VGaWxlLgogIC8vLwogIC8vLyBJZiBwb3NzaWJsZSwgdGhlIGdpdmVuIFtjb250ZW50XSBzaG91bGQgYmUgemVyby10ZXJtaW5hdGVkLiBJZiBpdCBpc24ndCwKICAvLy8gdGhlIGNvbnN0cnVjdG9yIGNsb25lcyB0aGUgY29udGVudCBhbmQgYWRkcyBhIHRyYWlsaW5nIDAuCiAgVXRmOEJ5dGVzU291cmNlRmlsZSh0aGlzLnVyaSwgTGlzdDxpbnQ+IGNvbnRlbnQpCiAgICAgIDogdGhpcy56ZXJvVGVybWluYXRlZENvbnRlbnQgPSBfemVyb1Rlcm1pbmF0ZUlmTmVjZXNzYXJ5KGNvbnRlbnQpOwoKICBAb3ZlcnJpZGUKICBMaXN0PGludD4gZ2V0IGRhdGEgPT4gemVyb1Rlcm1pbmF0ZWRDb250ZW50OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgc2xvd1RleHQoKSB7CiAgICAvLyBEb24ndCBjb252ZXJ0IHRoZSB0cmFpbGluZyB6ZXJvIGJ5dGUuCiAgICByZXR1cm4gdXRmOC5kZWNvZGVyCiAgICAgICAgLmNvbnZlcnQoemVyb1Rlcm1pbmF0ZWRDb250ZW50LCAwLCB6ZXJvVGVybWluYXRlZENvbnRlbnQubGVuZ3RoIC0gMSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PGludD4gc2xvd1V0ZjhaZXJvVGVybWluYXRlZEJ5dGVzKCkgPT4gemVyb1Rlcm1pbmF0ZWRDb250ZW50OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgc2xvd1N1YnN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIFRPRE8obHJ5KTogdG8gbWFrZSB0aGlzIGZhc3RlciwgdGhlIHNjYW5uZXIgY291bGQgcmVjb3JkIHRoZSBVVEYtOCBzbGFjawogICAgLy8gZm9yIGFsbCBwb3NpdGlvbnMgb2YgdGhlIHNvdXJjZSB0ZXh0LiBXZSBjb3VsZCB1c2UgWzpjb250ZW50LnN1Ymxpc3Q6XS4KICAgIHJldHVybiBzbG93VGV4dCgpLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoIHsKICAgIGlmIChsZW5ndGhDYWNoZSA9PSAtMSkgewogICAgICAvLyBEdXJpbmcgc2Nhbm5pbmcgdGhlIGxlbmd0aCBpcyBub3QgeWV0IGFzc2lnbmVkLCBzbyB3ZSB1c2UgYSBzbG93IHBhdGguCiAgICAgIGxlbmd0aENhY2hlID0gc2xvd1RleHQoKS5sZW5ndGg7CiAgICB9CiAgICByZXR1cm4gbGVuZ3RoQ2FjaGU7CiAgfQoKICBAb3ZlcnJpZGUKICBzZXQgbGVuZ3RoKGludCB2KSA9PiBsZW5ndGhDYWNoZSA9IHY7CiAgaW50IGxlbmd0aENhY2hlID0gLTE7Cn0KCmNsYXNzIENhY2hpbmdVdGY4Qnl0ZXNTb3VyY2VGaWxlIGV4dGVuZHMgVXRmOEJ5dGVzU291cmNlRmlsZSB7CiAgU3RyaW5nIGNhY2hlZFRleHQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIGZpbGVuYW1lOwoKICBDYWNoaW5nVXRmOEJ5dGVzU291cmNlRmlsZShVcmkgdXJpLCB0aGlzLmZpbGVuYW1lLCBMaXN0PGludD4gY29udGVudCkKICAgICAgOiBzdXBlcih1cmksIGNvbnRlbnQpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgc2xvd1RleHQoKSB7CiAgICBpZiAoY2FjaGVkVGV4dCA9PSBudWxsKSB7CiAgICAgIGNhY2hlZFRleHQgPSBzdXBlci5zbG93VGV4dCgpOwogICAgfQogICAgcmV0dXJuIGNhY2hlZFRleHQ7CiAgfQp9CgpjbGFzcyBTdHJpbmdTb3VyY2VGaWxlIGV4dGVuZHMgU291cmNlRmlsZTxMaXN0PGludD4+IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBmaWxlbmFtZTsKICBmaW5hbCBTdHJpbmcgdGV4dDsKCiAgU3RyaW5nU291cmNlRmlsZSh0aGlzLnVyaSwgdGhpcy5maWxlbmFtZSwgdGhpcy50ZXh0KTsKCiAgU3RyaW5nU291cmNlRmlsZS5mcm9tVXJpKFVyaSB1cmksIFN0cmluZyB0ZXh0KQogICAgICA6IHRoaXModXJpLCB1cmkudG9TdHJpbmcoKSwgdGV4dCk7CgogIFN0cmluZ1NvdXJjZUZpbGUuZnJvbU5hbWUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGV4dCkKICAgICAgOiB0aGlzKG5ldyBVcmkocGF0aDogZmlsZW5hbWUpLCBmaWxlbmFtZSwgdGV4dCk7CgogIEBvdmVycmlkZQogIExpc3Q8aW50PiBnZXQgZGF0YSA9PiB1dGY4LmVuY29kZSh0ZXh0KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gdGV4dC5sZW5ndGg7CiAgQG92ZXJyaWRlCiAgc2V0IGxlbmd0aChpbnQgdikge30KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHNsb3dUZXh0KCkgPT4gdGV4dDsKCiAgQG92ZXJyaWRlCiAgTGlzdDxpbnQ+IHNsb3dVdGY4WmVyb1Rlcm1pbmF0ZWRCeXRlcygpIHsKICAgIHJldHVybiBfemVyb1Rlcm1pbmF0ZUlmTmVjZXNzYXJ5KHV0ZjguZW5jb2RlKHRleHQpKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBzbG93U3Vic3RyaW5nKGludCBzdGFydCwgaW50IGVuZCkgPT4gdGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7Cn0KCi8vLyBCaW5hcnkgaW5wdXQgZGF0YS4KY2xhc3MgQmluYXJ5IGltcGxlbWVudHMgSW5wdXQ8TGlzdDxpbnQ+PiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHVyaTsKICBAb3ZlcnJpZGUKICBmaW5hbCBMaXN0PGludD4gZGF0YTsKCiAgQmluYXJ5KHRoaXMudXJpLCB0aGlzLmRhdGEpOwoKICBAb3ZlcnJpZGUKICBJbnB1dEtpbmQgZ2V0IGlucHV0S2luZCA9PiBJbnB1dEtpbmQuYmluYXJ5Owp9CoEnAE5OPAEgASEUKQFCATciAU4qRSsMDwEMLQEkASNFODUUJzgNIQQBHAZGKQE7FQFKKSsBSTcSAUxLDxUBThgdI01BOgYcBAFPUQZOUR82AR0BMBYTIi0dGQZKEwQBDCwzBAEsAUspBkxNHQZNFEBGHCEGAUtHLDAoLAE5Jic5Bh8BLSJIAUo3SDMBEycaCgEkJAoPPkAjMS0OO0QoLysOQzgTLQwKCAYBGwQBKgIBNzk2KyERAgE6DBEBNCkBJQZPQDNJAQwvAQwWLRhOBAEMRAEMLVBPLQQBDBMdUCcGGAQBDCgYAgE/FQwZAUgdAQwWHiUGFwQCATcMEQwZFQE4ATEpATo3AQwrAQwhDBcBDB0BDCw5BAEMSgIBFysMEQwYAR8BDC8CAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9zb3VyY2VfZmlsZS5kYXJ0MHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3V0aWwvZW1wdHlzZXQuZGFydIbHLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy51dGlsLmVtcHR5c2V0OwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgSXRlcmFibGVCYXNlOwoKY2xhc3MgSW1tdXRhYmxlRW1wdHlTZXQ8RT4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIGNvbnN0IEltbXV0YWJsZUVtcHR5U2V0KCk7CgogIEBvdmVycmlkZQogIFNldDxSPiBjYXN0PFI+KCkgPT4gbmV3IEltbXV0YWJsZUVtcHR5U2V0PFI+KCk7CiAgQG92ZXJyaWRlCiAgZ2V0IGl0ZXJhdG9yID0+IGNvbnN0IF9FbXB0eVNldEl0ZXJhdG9yKCk7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gMDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IHRydWU7CgogIGdldCBfaW1tdXRhYmxlRXJyb3IgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkVtcHR5U2V0IGlzIGltbXV0YWJsZSIpOwoKICBAb3ZlcnJpZGUKICBib29sIGFkZChFIGVsZW1lbnQpID0+IF9pbW11dGFibGVFcnJvcjsKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4gX2ltbXV0YWJsZUVycm9yOwoKICBAb3ZlcnJpZGUKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCkgPT4gbnVsbDsKICBAb3ZlcnJpZGUKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykge30KICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7fQogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkge30KICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oRSBlbGVtZW50KSkge30KICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkge30KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSA9PiBvdGhlci5pc0VtcHR5OwoKICBAb3ZlcnJpZGUKICBTZXQ8RT4gdW5pb24oU2V0PEU+IG90aGVyKSA9PiBuZXcgU2V0LmZyb20ob3RoZXIpOwogIEBvdmVycmlkZQogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgU2V0PEU+IHRvU2V0KCkgPT4gbmV3IFNldDxFPigpOwp9CgpjbGFzcyBfRW1wdHlTZXRJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPE51bGw+IHsKICBjb25zdCBfRW1wdHlTZXRJdGVyYXRvcigpOwoKICBAb3ZlcnJpZGUKICBOdWxsIGdldCBjdXJyZW50ID0+IG51bGw7CiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpID0+IGZhbHNlOwp9CkUATk48AR8BLAFHHQEMMgwtDBcMHAFOAQwqDDgBDCQMKAwvDCwMLwwsDCoMEgEMKgw9AQw1DDIMMAwiAgE0HQEMHAwcAgEncGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9lbXB0eXNldC5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3V0aWwvbWFwbGV0LmRhcnSeHS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMudXRpbC5tYXBsZXQ7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBNYXBCYXNlLCBJdGVyYWJsZUJhc2U7CgpjbGFzcyBNYXBsZXQ8SywgVj4gZXh0ZW5kcyBNYXBCYXNlPEssIFY+IHsKICBzdGF0aWMgY29uc3QgX01hcGxldE1hcmtlciBfTUFSS0VSID0gY29uc3QgX01hcGxldE1hcmtlcigpOwogIHN0YXRpYyBjb25zdCBpbnQgQ0FQQUNJVFkgPSA4OwoKLy8gVGhlIG1hcGxldCBjYW4gYmUgaW4gb25lIG9mIGZvdXIgc3RhdGVzOgogIC8vCiAgLy8gICAqIEVtcHR5ICAgICAgICAgIChleHRyYTogbnVsbCwgICBrZXk6IG1hcmtlciwgdmFsdWU6IG51bGwpCiAgLy8gICAqIFNpbmdsZSBlbGVtZW50IChleHRyYTogbnVsbCwgICBrZXk6IGtleSwgICAgdmFsdWU6IHZhbHVlKQogIC8vICAgKiBMaXN0LWJhY2tlZCAgICAoZXh0cmE6IGxlbmd0aCwga2V5OiBsaXN0LCAgIHZhbHVlOiBudWxsKQogIC8vICAgKiBNYXAtYmFja2VkICAgICAoZXh0cmE6IG1hcmtlciwga2V5OiBtYXAsICAgIHZhbHVlOiBudWxsKQogIC8vCiAgLy8gV2hlbiB0aGUgbWFwbGV0IGlzIGxpc3QtYmFja2VkLCB0aGUgbGlzdCBoYXMgdHdvIHNlY3Rpb25zOiBPbmUKICAvLyBmb3Iga2V5cyBhbmQgb25lIGZvciB2YWx1ZXMuIFRoZSBmaXJzdCBbQ0FQQUNJVFldIGVudHJpZXMgYXJlCiAgLy8gdGhlIGtleXMgYW5kIHRoZXkgbWF5IGNvbnRhaW4gbWFya2VycyBmb3IgZGVsZXRlZCBlbGVtZW50cy4gQWZ0ZXIKICAvLyB0aGUga2V5cyB0aGVyZSBhcmUgW0NBUEFDSVRZXSBlbnRyaWVzIGZvciB0aGUgdmFsdWVzLgoKICBkeW5hbWljIF9rZXkgPSBfTUFSS0VSOwogIHZhciBfdmFsdWU7CiAgdmFyIF9leHRyYTsKCiAgTWFwbGV0KCk7CgogIE1hcGxldC5mcm9tKE1hcGxldDxLLCBWPiBvdGhlcikgewogICAgb3RoZXIuZm9yRWFjaCgoSyBrZXksIFYgdmFsdWUpIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfTUFSS0VSID09IF9rZXk7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfa2V5LmlzRW1wdHk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2V4dHJhID09IDA7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIChfTUFSS0VSID09IF9rZXkpID8gMCA6IDE7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfa2V5Lmxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfZXh0cmE7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2tleSA9PSBrZXk7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfa2V5LmNvbnRhaW5zS2V5KGtleSk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCByZW1haW5pbmcgPSBfZXh0cmEsIGkgPSAwOyByZW1haW5pbmcgPiAwICYmIGkgPCBDQVBBQ0lUWTsgaSsrKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9rZXlbaV07CiAgICAgICAgaWYgKF9NQVJLRVIgPT0gY2FuZGlkYXRlKSBjb250aW51ZTsKICAgICAgICBpZiAoY2FuZGlkYXRlID09IGtleSkgcmV0dXJuIHRydWU7CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIChfa2V5ID09IGtleSkgPyBfdmFsdWUgOiBudWxsOwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2tleVtrZXldOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBjYW5kaWRhdGUgPSBfa2V5W2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBrZXkpIHJldHVybiBfa2V5W2kgKyBDQVBBQ0lUWV07CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIGlmIChfTUFSS0VSID09IF9rZXkpIHsKICAgICAgICBfa2V5ID0ga2V5OwogICAgICAgIF92YWx1ZSA9IHZhbHVlOwogICAgICB9IGVsc2UgaWYgKF9rZXkgPT0ga2V5KSB7CiAgICAgICAgX3ZhbHVlID0gdmFsdWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTGlzdCBsaXN0ID0gbmV3IExpc3QoQ0FQQUNJVFkgKiAyKTsKICAgICAgICBsaXN0WzBdID0gX2tleTsKICAgICAgICBsaXN0WzFdID0ga2V5OwogICAgICAgIGxpc3RbQ0FQQUNJVFldID0gX3ZhbHVlOwogICAgICAgIGxpc3RbQ0FQQUNJVFkgKyAxXSA9IHZhbHVlOwogICAgICAgIF9rZXkgPSBsaXN0OwogICAgICAgIF92YWx1ZSA9IG51bGw7CiAgICAgICAgX2V4dHJhID0gMjsgLy8gVHdvIGVsZW1lbnRzLgogICAgICB9CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIF9rZXlba2V5XSA9IHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgaW50IHJlbWFpbmluZyA9IF9leHRyYTsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgaW50IGNvcHlUbywgY29weUZyb207CiAgICAgIHdoaWxlIChyZW1haW5pbmcgPiAwICYmIGluZGV4IDwgQ0FQQUNJVFkpIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2tleVtpbmRleF07CiAgICAgICAgaWYgKF9NQVJLRVIgPT0gY2FuZGlkYXRlKSB7CiAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IHJhbmdlIG9mIGVtcHR5IHNsb3RzIGluIHRoZQogICAgICAgICAgLy8gbGlzdC4gV2hlbiB3ZSdyZSBkb25lIHdlJ2xsIG1vdmUgYWxsIHRoZSBlbGVtZW50cwogICAgICAgICAgLy8gYWZ0ZXIgdGhvc2UgZW1wdHkgc2xvdHMgZG93biwgc28gdGhhdCBhZGRpbmcgYW4gZWxlbWVudAogICAgICAgICAgLy8gYWZ0ZXIgdGhhdCB3aWxsIHByZXNlcnZlIHRoZSBpbnNlcnRpb24gb3JkZXIuCiAgICAgICAgICBpZiAoY29weUZyb20gPT0gaW5kZXgpIHsKICAgICAgICAgICAgY29weUZyb20rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvcHlUbyA9IGluZGV4OwogICAgICAgICAgICBjb3B5RnJvbSA9IGluZGV4ICsgMTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNhbmRpZGF0ZSA9PSBrZXkpIHsKICAgICAgICAgIF9rZXlbQ0FQQUNJVFkgKyBpbmRleF0gPSB2YWx1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gU2tpcHBlZCBhbiBlbGVtZW50IHRoYXQgZGlkbid0IG1hdGNoLgogICAgICAgICAgcmVtYWluaW5nLS07CiAgICAgICAgfQogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgICAgaWYgKGluZGV4IDwgQ0FQQUNJVFkpIHsKICAgICAgICBfa2V5W2luZGV4XSA9IGtleTsKICAgICAgICBfa2V5W0NBUEFDSVRZICsgaW5kZXhdID0gdmFsdWU7CiAgICAgICAgX2V4dHJhKys7CiAgICAgIH0gZWxzZSBpZiAoX2V4dHJhIDwgQ0FQQUNJVFkpIHsKICAgICAgICAvLyBNb3ZlIHRoZSBsYXN0IGVsZW1lbnRzIGRvd24gaW50byB0aGUgbGFzdCBlbXB0eSBzbG90cwogICAgICAgIC8vIHNvIHRoYXQgd2UgaGF2ZSBlbXB0eSBzbG90cyBhZnRlciB0aGUgbGFzdCBlbGVtZW50LgogICAgICAgIHdoaWxlIChjb3B5RnJvbSA8IENBUEFDSVRZKSB7CiAgICAgICAgICBfa2V5W2NvcHlUb10gPSBfa2V5W2NvcHlGcm9tXTsKICAgICAgICAgIF9rZXlbQ0FQQUNJVFkgKyBjb3B5VG9dID0gX2tleVtDQVBBQ0lUWSArIGNvcHlGcm9tXTsKICAgICAgICAgIGNvcHlUbysrOwogICAgICAgICAgY29weUZyb20rKzsKICAgICAgICB9CiAgICAgICAgLy8gSW5zZXJ0IHRoZSBuZXcgZWxlbWVudCBhcyB0aGUgbGFzdCBlbGVtZW50LgogICAgICAgIF9rZXlbY29weVRvXSA9IGtleTsKICAgICAgICBfa2V5W0NBUEFDSVRZICsgY29weVRvXSA9IHZhbHVlOwogICAgICAgIGNvcHlUbysrOwogICAgICAgIC8vIEFkZCBvbmUgdG8gdGhlIGxlbmd0aCBlbmNvZGVkIGluIHRoZSBleHRyYSBmaWVsZC4KICAgICAgICBfZXh0cmErKzsKICAgICAgICAvLyBDbGVhciBhbGwgZWxlbWVudHMgYWZ0ZXIgdGhlIG5ldyBsYXN0IGVsZW1lbnRzIHRvCiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgZXh0cmEgc3R1ZmYgYWxpdmUuCiAgICAgICAgd2hpbGUgKGNvcHlUbyA8IENBUEFDSVRZKSB7CiAgICAgICAgICBfa2V5W2NvcHlUb10gPSBfa2V5W0NBUEFDSVRZICsgY29weVRvXSA9IG51bGw7CiAgICAgICAgICBjb3B5VG8rKzsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXA8SywgVj4oKTsKICAgICAgICBmb3JFYWNoKChlYWNoS2V5LCBlYWNoVmFsdWUpID0+IG1hcFtlYWNoS2V5XSA9IGVhY2hWYWx1ZSk7CiAgICAgICAgbWFwW2tleV0gPSB2YWx1ZTsKICAgICAgICBfa2V5ID0gbWFwOwogICAgICAgIF9leHRyYSA9IF9NQVJLRVI7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX2tleSAhPSBrZXkpIHJldHVybiBudWxsOwogICAgICBfa2V5ID0gX01BUktFUjsKICAgICAgViByZXN1bHQgPSBfdmFsdWU7CiAgICAgIF92YWx1ZSA9IG51bGw7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfa2V5LnJlbW92ZShrZXkpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBjYW5kaWRhdGUgPSBfa2V5W2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBrZXkpIHsKICAgICAgICAgIGludCB2YWx1ZUluZGV4ID0gQ0FQQUNJVFkgKyBpOwogICAgICAgICAgdmFyIHJlc3VsdCA9IF9rZXlbdmFsdWVJbmRleF07CiAgICAgICAgICBfa2V5W2ldID0gX01BUktFUjsKICAgICAgICAgIF9rZXlbdmFsdWVJbmRleF0gPSBudWxsOwogICAgICAgICAgX2V4dHJhLS07CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICByZW1haW5pbmctLTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX01BUktFUiAhPSBfa2V5KSBhY3Rpb24oX2tleSwgX3ZhbHVlKTsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgX2tleS5mb3JFYWNoKGFjdGlvbik7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCByZW1haW5pbmcgPSBfZXh0cmEsIGkgPSAwOyByZW1haW5pbmcgPiAwICYmIGkgPCBDQVBBQ0lUWTsgaSsrKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9rZXlbaV07CiAgICAgICAgaWYgKF9NQVJLRVIgPT0gY2FuZGlkYXRlKSBjb250aW51ZTsKICAgICAgICBhY3Rpb24oY2FuZGlkYXRlLCBfa2V5W0NBUEFDSVRZICsgaV0pOwogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgX2tleSA9IF9NQVJLRVI7CiAgICBfdmFsdWUgPSBfZXh0cmEgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gbmV3IF9NYXBsZXRLZXlJdGVyYWJsZTxLPih0aGlzKTsKfQoKY2xhc3MgX01hcGxldE1hcmtlciB7CiAgY29uc3QgX01hcGxldE1hcmtlcigpOwp9CgpjbGFzcyBfTWFwbGV0S2V5SXRlcmFibGU8Sz4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8Sz4gewogIGZpbmFsIE1hcGxldDxLLCBkeW5hbWljPiBtYXBsZXQ7CgogIF9NYXBsZXRLZXlJdGVyYWJsZSh0aGlzLm1hcGxldCk7CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPEs+IGdldCBpdGVyYXRvciB7CiAgICBpZiAobWFwbGV0Ll9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgX01hcGxldFNpbmdsZUl0ZXJhdG9yPEs+KG1hcGxldC5fa2V5KTsKICAgIH0gZWxzZSBpZiAoTWFwbGV0Ll9NQVJLRVIgPT0gbWFwbGV0Ll9leHRyYSkgewogICAgICByZXR1cm4gbWFwbGV0Ll9rZXkua2V5cy5pdGVyYXRvcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgX01hcGxldExpc3RJdGVyYXRvcjxLPihtYXBsZXQuX2tleSwgbWFwbGV0Ll9leHRyYSk7CiAgICB9CiAgfQp9CgpjbGFzcyBfTWFwbGV0U2luZ2xlSXRlcmF0b3I8Sz4gaW1wbGVtZW50cyBJdGVyYXRvcjxLPiB7CiAgdmFyIF9lbGVtZW50OwogIEsgX2N1cnJlbnQ7CgogIF9NYXBsZXRTaW5nbGVJdGVyYXRvcih0aGlzLl9lbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgSyBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChNYXBsZXQuX01BUktFUiA9PSBfZWxlbWVudCkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9jdXJyZW50ID0gX2VsZW1lbnQ7CiAgICBfZWxlbWVudCA9IE1hcGxldC5fTUFSS0VSOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBfTWFwbGV0TGlzdEl0ZXJhdG9yPEs+IGltcGxlbWVudHMgSXRlcmF0b3I8Sz4gewogIGZpbmFsIExpc3QgX2xpc3Q7CiAgaW50IF9yZW1haW5pbmc7CiAgaW50IF9pbmRleCA9IDA7CiAgSyBfY3VycmVudDsKCiAgX01hcGxldExpc3RJdGVyYXRvcih0aGlzLl9saXN0LCB0aGlzLl9yZW1haW5pbmcpOwoKICBAb3ZlcnJpZGUKICBLIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBAb3ZlcnJpZGUKICBib29sIG1vdmVOZXh0KCkgewogICAgd2hpbGUgKF9yZW1haW5pbmcgPiAwKSB7CiAgICAgIHZhciBjYW5kaWRhdGUgPSBfbGlzdFtfaW5kZXgrK107CiAgICAgIGlmIChNYXBsZXQuX01BUktFUiAhPSBjYW5kaWRhdGUpIHsKICAgICAgICBfY3VycmVudCA9IGNhbmRpZGF0ZTsKICAgICAgICBfcmVtYWluaW5nLS07CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KgSgATk48AR0BNQErPiEBLAVCQ0JCBURDRzsBGg4OAQwBJCUZCAQBDBUaHiQbDRoGBAEMExooJBoNFQYEAQwhGhokJA1QISwrFQgUBgQBDB4aLCQYDVAhLDkVCBMGBAEMJhodFBggGA8sGBchJBUXJQgkGQ0eFRwyJSRAP0U7IxgTHCIMJyoSETMXChEIHhsoEiZBPyYpPxQWCjccKRI9Ej02JDkUCg8jQxoUGggGBAEMGRokFhkVFSQfDVAhLCApKR0jFBkKFQgTBgQBDC4aMSQcDVAhLC8VCAYEAQwRFBwEAQw7AgEWGQIBNiMBIwEMHSE4MigNRQYEAgE4EA4BKAEMHQEMFCYXFAYZHxEEAgE2FBISDgE0AQwdAQwUHScpHhYVCAYVEgQCASVwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL21hcGxldC5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3V0aWwvc2V0bGV0LmRhcnSiOC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMudXRpbC5zZXRsZXQ7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBTZXRCYXNlOwoKY2xhc3MgU2V0bGV0PEU+IGV4dGVuZHMgU2V0QmFzZTxFPiB7CiAgc3RhdGljIGNvbnN0IF9TZXRsZXRNYXJrZXIgX01BUktFUiA9IGNvbnN0IF9TZXRsZXRNYXJrZXIoKTsKICBzdGF0aWMgY29uc3QgaW50IENBUEFDSVRZID0gODsKCiAgLy8gVGhlIHNldGxldCBjYW4gYmUgaW4gb25lIG9mIGZvdXIgc3RhdGVzOgogIC8vCiAgLy8gICAqIEVtcHR5ICAgICAgICAgIChleHRyYTogbnVsbCwgICBjb250ZW50czogbWFya2VyKQogIC8vICAgKiBTaW5nbGUgZWxlbWVudCAoZXh0cmE6IG51bGwsICAgY29udGVudHM6IGVsZW1lbnQpCiAgLy8gICAqIExpc3QtYmFja2VkICAgIChleHRyYTogbGVuZ3RoLCBjb250ZW50czogbGlzdCkKICAvLyAgICogU2V0LWJhY2tlZCAgICAgKGV4dHJhOiBtYXJrZXIsIGNvbnRlbnRzOiBzZXQpCiAgLy8KICAvLyBXaGVuIHRoZSBzZXRsZXQgaXMgbGlzdC1iYWNrZWQsIHRoZSBsaXN0IGluIHRoZSBjb250ZW50cyBmaWVsZAogIC8vIG1heSBoYXZlIGVtcHR5IHNsb3RzIGZpbGxlZCB3aXRoIHRoZSBtYXJrZXIgdmFsdWUuCiAgZHluYW1pYyBfY29udGVudHMgPSBfTUFSS0VSOwogIHZhciBfZXh0cmE7CgogIFNldGxldCgpOwogIFNldGxldC5mcm9tKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBhZGRBbGwoZWxlbWVudHMpOwogIH0KCiAgc3RhdGljIFNldDxSPiBfbmV3U2V0PFI+KCkgPT4gbmV3IFNldGxldDxSPigpOwoKICBAb3ZlcnJpZGUKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzLCBuZXdTZXQ6IF9uZXdTZXQpOwogIEBvdmVycmlkZQogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBfU2V0bGV0U2luZ2xlSXRlcmF0b3I8RT4oX2NvbnRlbnRzKTsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cy5pdGVyYXRvcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgX1NldGxldExpc3RJdGVyYXRvcjxFPihfY29udGVudHMsIF9leHRyYSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIChfTUFSS0VSID09IF9jb250ZW50cykgPyAwIDogMTsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cy5sZW5ndGg7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2V4dHJhOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9NQVJLRVIgPT0gX2NvbnRlbnRzOwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLmlzRW1wdHk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2V4dHJhID09IDA7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cyA9PSBlbGVtZW50OwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLmNvbnRhaW5zKGVsZW1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBjYW5kaWRhdGUgPSBfY29udGVudHNbaV07CiAgICAgICAgaWYgKF9NQVJLRVIgPT0gY2FuZGlkYXRlKSBjb250aW51ZTsKICAgICAgICBpZiAoY2FuZGlkYXRlID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWRkKEUgZWxlbWVudCkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIGlmIChfTUFSS0VSID09IF9jb250ZW50cykgewogICAgICAgIF9jb250ZW50cyA9IGVsZW1lbnQ7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSBpZiAoX2NvbnRlbnRzID09IGVsZW1lbnQpIHsKICAgICAgICAvLyBEbyBub3RoaW5nLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBMaXN0IGxpc3QgPSBuZXcgTGlzdChDQVBBQ0lUWSk7CiAgICAgICAgbGlzdFswXSA9IF9jb250ZW50czsKICAgICAgICBsaXN0WzFdID0gZWxlbWVudDsKICAgICAgICBfY29udGVudHMgPSBsaXN0OwogICAgICAgIF9leHRyYSA9IDI7IC8vIFR3byBlbGVtZW50cy4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLmFkZChlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGludCByZW1haW5pbmcgPSBfZXh0cmE7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIGludCBjb3B5VG8sIGNvcHlGcm9tOwogICAgICB3aGlsZSAocmVtYWluaW5nID4gMCAmJiBpbmRleCA8IENBUEFDSVRZKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9jb250ZW50c1tpbmRleCsrXTsKICAgICAgICBpZiAoX01BUktFUiA9PSBjYW5kaWRhdGUpIHsKICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgcmFuZ2Ugb2YgZW1wdHkgc2xvdHMgaW4gdGhlCiAgICAgICAgICAvLyBsaXN0LiBXaGVuIHdlJ3JlIGRvbmUgd2UnbGwgbW92ZSBhbGwgdGhlIGVsZW1lbnRzCiAgICAgICAgICAvLyBhZnRlciB0aG9zZSBlbXB0eSBzbG90cyBkb3duLCBzbyB0aGF0IGFkZGluZyBhbiBlbGVtZW50CiAgICAgICAgICAvLyBhZnRlciB0aGF0IHdpbGwgcHJlc2VydmUgdGhlIGluc2VydGlvbiBvcmRlci4KICAgICAgICAgIGlmIChjb3B5RnJvbSA9PSBpbmRleCAtIDEpIHsKICAgICAgICAgICAgY29weUZyb20rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvcHlUbyA9IGluZGV4IC0gMTsKICAgICAgICAgICAgY29weUZyb20gPSBpbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0gZWxzZSBpZiAoY2FuZGlkYXRlID09IGVsZW1lbnQpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgICAgaWYgKGluZGV4IDwgQ0FQQUNJVFkpIHsKICAgICAgICBfY29udGVudHNbaW5kZXhdID0gZWxlbWVudDsKICAgICAgICBfZXh0cmErKzsKICAgICAgfSBlbHNlIGlmIChfZXh0cmEgPCBDQVBBQ0lUWSkgewogICAgICAgIC8vIE1vdmUgdGhlIGxhc3QgZWxlbWVudHMgZG93biBpbnRvIHRoZSBsYXN0IGVtcHR5IHNsb3RzCiAgICAgICAgLy8gc28gdGhhdCB3ZSBoYXZlIGVtcHR5IHNsb3RzIGFmdGVyIHRoZSBsYXN0IGVsZW1lbnQuCiAgICAgICAgd2hpbGUgKGNvcHlGcm9tIDwgQ0FQQUNJVFkpIHsKICAgICAgICAgIF9jb250ZW50c1tjb3B5VG8rK10gPSBfY29udGVudHNbY29weUZyb20rK107CiAgICAgICAgfQogICAgICAgIC8vIEluc2VydCB0aGUgbmV3IGVsZW1lbnQgYXMgdGhlIGxhc3QgZWxlbWVudC4KICAgICAgICBfY29udGVudHNbY29weVRvKytdID0gZWxlbWVudDsKICAgICAgICBfZXh0cmErKzsKICAgICAgICAvLyBDbGVhciBhbGwgZWxlbWVudHMgYWZ0ZXIgdGhlIG5ldyBsYXN0IGVsZW1lbnRzIHRvCiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgZXh0cmEgc3R1ZmYgYWxpdmUuCiAgICAgICAgd2hpbGUgKGNvcHlUbyA8IENBUEFDSVRZKSBfY29udGVudHNbY29weVRvKytdID0gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY29udGVudHMgPSBuZXcgU2V0PEU+KCkKICAgICAgICAgIC4uYWRkQWxsKChfY29udGVudHMgYXMgTGlzdCkuY2FzdDxFPigpKQogICAgICAgICAgLi5hZGQoZWxlbWVudCk7CiAgICAgICAgX2V4dHJhID0gX01BUktFUjsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBlbGVtZW50cy5mb3JFYWNoKChlYWNoKSA9PiBhZGQoZWFjaCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSBsb29rdXAoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2NvbnRlbnRzID09IGVsZW1lbnQgPyBfY29udGVudHMgOiBudWxsOwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLmxvb2t1cChlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2NvbnRlbnRzW2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBlbGVtZW50KSByZXR1cm4gY2FuZGlkYXRlOwogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX2NvbnRlbnRzID09IGVsZW1lbnQpIHsKICAgICAgICBfY29udGVudHMgPSBfTUFSS0VSOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLnJlbW92ZShlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2NvbnRlbnRzW2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBlbGVtZW50KSB7CiAgICAgICAgICBfY29udGVudHNbaV0gPSBfTUFSS0VSOwogICAgICAgICAgX2V4dHJhLS07CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgewogICAgb3RoZXIuZm9yRWFjaChyZW1vdmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIGlmICh0ZXN0KF9jb250ZW50cykpIHsKICAgICAgICBfY29udGVudHMgPSBfTUFSS0VSOwogICAgICB9CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIF9jb250ZW50cy5yZW1vdmVXaGVyZSh0ZXN0KTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2NvbnRlbnRzW2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKHRlc3QoY2FuZGlkYXRlKSkgewogICAgICAgICAgX2NvbnRlbnRzW2ldID0gX01BUktFUjsKICAgICAgICAgIF9leHRyYS0tOwogICAgICAgIH0KICAgICAgICByZW1haW5pbmctLTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgcmVtb3ZlV2hlcmUoKEUgZWxlbWVudCkgPT4gIXRlc3QoZWxlbWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgU2V0IHNldCA9IGVsZW1lbnRzIGlzIFNldCA/IGVsZW1lbnRzIDogZWxlbWVudHMudG9TZXQoKTsKICAgIHJlbW92ZVdoZXJlKChFIGVsZW1lbnQpID0+ICFzZXQuY29udGFpbnMoZWxlbWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX01BUktFUiAhPSBfY29udGVudHMpIGFjdGlvbihfY29udGVudHMpOwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICBfY29udGVudHMuZm9yRWFjaChhY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBlbGVtZW50ID0gX2NvbnRlbnRzW2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGVsZW1lbnQpIGNvbnRpbnVlOwogICAgICAgIGFjdGlvbihlbGVtZW50KTsKICAgICAgICByZW1haW5pbmctLTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSB7CiAgICBmb3IgKEUgZSBpbiBvdGhlcikgewogICAgICBpZiAoIXRoaXMuY29udGFpbnMoZSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgY2xlYXIoKSB7CiAgICBfY29udGVudHMgPSBfTUFSS0VSOwogICAgX2V4dHJhID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpID0+IG5ldyBTZXQ8RT4uZnJvbSh0aGlzKS4uYWRkQWxsKG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgU2V0bGV0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgPT4KICAgICAgbmV3IFNldGxldDxFPi5mcm9tKHRoaXMud2hlcmUoKGUpID0+IG90aGVyLmNvbnRhaW5zKGUpKSk7CgogIEBvdmVycmlkZQogIFNldGxldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PgogICAgICBuZXcgU2V0bGV0PEU+LmZyb20odGhpcy53aGVyZSgoZSkgPT4gIW90aGVyLmNvbnRhaW5zKGUpKSk7CgogIEBvdmVycmlkZQogIFNldGxldDxFPiB0b1NldCgpIHsKICAgIFNldGxldDxFPiByZXN1bHQgPSBuZXcgU2V0bGV0PEU+KCk7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmVzdWx0Ll9jb250ZW50cyA9IF9jb250ZW50czsKICAgIH0gZWxzZSBpZiAoX2V4dHJhID09IF9NQVJLRVIpIHsKICAgICAgcmVzdWx0Ll9leHRyYSA9IF9NQVJLRVI7CiAgICAgIHJlc3VsdC5fY29udGVudHMgPSBfY29udGVudHMudG9TZXQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdC5fZXh0cmEgPSBfZXh0cmE7CiAgICAgIHJlc3VsdC5fY29udGVudHMgPSBfY29udGVudHMudG9MaXN0KCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKY2xhc3MgX1NldGxldE1hcmtlciB7CiAgY29uc3QgX1NldGxldE1hcmtlcigpOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gIi0iOwp9CgpjbGFzcyBfU2V0bGV0U2luZ2xlSXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgdmFyIF9lbGVtZW50OwogIEUgX2N1cnJlbnQ7CiAgX1NldGxldFNpbmdsZUl0ZXJhdG9yKHRoaXMuX2VsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBAb3ZlcnJpZGUKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKFNldGxldC5fTUFSS0VSID09IF9lbGVtZW50KSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfZWxlbWVudDsKICAgIF9lbGVtZW50ID0gU2V0bGV0Ll9NQVJLRVI7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCmNsYXNzIF9TZXRsZXRMaXN0SXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgTGlzdCBfbGlzdDsKICBpbnQgX3JlbWFpbmluZzsKICBpbnQgX2luZGV4ID0gMDsKICBFIF9jdXJyZW50OwogIF9TZXRsZXRMaXN0SXRlcmF0b3IodGhpcy5fbGlzdCwgdGhpcy5fcmVtYWluaW5nKTsKCiAgQG92ZXJyaWRlCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIHdoaWxlIChfcmVtYWluaW5nID4gMCkgewogICAgICB2YXIgY2FuZGlkYXRlID0gX2xpc3RbX2luZGV4KytdOwogICAgICBpZiAoU2V0bGV0Ll9NQVJLRVIgIT0gY2FuZGlkYXRlKSB7CiAgICAgICAgX2N1cnJlbnQgPSBjYW5kaWRhdGU7CiAgICAgICAgX3JlbWFpbmluZy0tOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBfY3VycmVudCA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CoFYAE5OPAEdAScBJT4hAS4FOjs4NwVEOB8OAQwmFgQBMQEMQQwdGjYkIQ08BgQBDBMaLSQfDRUGBAEMFRojJCANGgYEAQwiGiMkKg1QJiwvFQgUBgQBDBgaIh0VKRcWDygdGxolFQgkJQ0eFRwyLCRAP0U7JxgTIB4MFCsYChUIHiQSJkE/JjcKNycSPTY+DyEyGhoIEwYEAQwmKwQBDB0aNiQoDVAmLDQVCBMGBAEMIBoiHRUPFggkKA1QJiwkIhQXChUIFAYEAQwrGwQBDCsaHR0IJCMNUCYsHyIUChUIBgQBDCswBAEMLj04BAEMKRozJCENUCQqGRUIBgQBDC0ZKwYRBAEMDBkTBAEMRgEML0ABDC1BAQwWKBokJB8sDR4tBhMEAgEWGQwVAgE4EA4oAQwdAQwUJhcUBhkfEQQCATYUEhIONAEMHQEMFB0nKR4WFQgGFRIEAgElcGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9zZXRsZXQuZGFydDFzZGtyb290Oi9wa2cva2VybmVsL2xpYi9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0wAE6By8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmFzdF90b19iaW5hcnk7CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmODsKCmltcG9ydCAnLi4vYXN0LmRhcnQnOwppbXBvcnQgJ3RhZy5kYXJ0JzsKaW1wb3J0ICdkYXJ0OmlvJyBzaG93IEJ5dGVzQnVpbGRlcjsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKLy8vIFdyaXRlcyB0byBhIGJpbmFyeSBmaWxlLgovLy8KLy8vIEEgW0JpbmFyeVByaW50ZXJdIGNhbiBiZSB1c2VkIHRvIHdyaXRlIG9uZSBmaWxlIGFuZCBtdXN0IHRoZW4gYmUKLy8vIGRpc2NhcmRlZC4KY2xhc3MgQmluYXJ5UHJpbnRlciBpbXBsZW1lbnRzIFZpc2l0b3I8dm9pZD4sIEJpbmFyeVNpbmsgewogIFZhcmlhYmxlSW5kZXhlciBfdmFyaWFibGVJbmRleGVyOwogIExhYmVsSW5kZXhlciBfbGFiZWxJbmRleGVyOwogIFN3aXRjaENhc2VJbmRleGVyIF9zd2l0Y2hDYXNlSW5kZXhlcjsKICBmaW5hbCBUeXBlUGFyYW1ldGVySW5kZXhlciBfdHlwZVBhcmFtZXRlckluZGV4ZXIgPSBuZXcgVHlwZVBhcmFtZXRlckluZGV4ZXIoKTsKICBmaW5hbCBTdHJpbmdJbmRleGVyIHN0cmluZ0luZGV4ZXI7CiAgQ29uc3RhbnRJbmRleGVyIF9jb25zdGFudEluZGV4ZXI7CiAgZmluYWwgVXJpSW5kZXhlciBfc291cmNlVXJpSW5kZXhlciA9IG5ldyBVcmlJbmRleGVyKCk7CiAgYm9vbCBfY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvbiA9IGZhbHNlOwogIGZpbmFsIExpc3Q8Ym9vbD4gX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uID0gbmV3IExpc3Q8Ym9vbD4oKTsKICBmaW5hbCBMaXN0PGJvb2w+IF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeSA9IG5ldyBMaXN0PGJvb2w+KCk7CiAgTWFwPExpYnJhcnlEZXBlbmRlbmN5LCBpbnQ+IF9saWJyYXJ5RGVwZW5kZW5jeUluZGV4ID0KICAgICAgPExpYnJhcnlEZXBlbmRlbmN5LCBpbnQ+e307CgogIExpc3Q8X01ldGFkYXRhU3Vic2VjdGlvbj4gX21ldGFkYXRhU3Vic2VjdGlvbnM7CgogIGZpbmFsIEJ1ZmZlcmVkU2luayBfbWFpblNpbms7CiAgZmluYWwgQnVmZmVyZWRTaW5rIF9tZXRhZGF0YVNpbms7CiAgZmluYWwgQnl0ZXNTaW5rIF9jb25zdGFudHNCeXRlc1Npbms7CiAgQnVmZmVyZWRTaW5rIF9jb25zdGFudHNTaW5rOwogIEJ1ZmZlcmVkU2luayBfc2luazsKICBib29sIGluY2x1ZGVTb3VyY2VzOwogIGJvb2wgaW5jbHVkZU9mZnNldHM7CgogIExpc3Q8aW50PiBsaWJyYXJ5T2Zmc2V0czsKICBMaXN0PGludD4gY2xhc3NPZmZzZXRzOwogIExpc3Q8aW50PiBwcm9jZWR1cmVPZmZzZXRzOwogIGludCBfYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGUgPSAtMTsKICBpbnQgX2JpbmFyeU9mZnNldEZvckxpbmtUYWJsZSA9IC0xOwogIGludCBfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2FkcyA9IC0xOwogIGludCBfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5ncyA9IC0xOwogIGludCBfYmluYXJ5T2Zmc2V0Rm9yU3RyaW5nVGFibGUgPSAtMTsKICBpbnQgX2JpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGUgPSAtMTsKCiAgTGlzdDxDYW5vbmljYWxOYW1lPiBfY2Fub25pY2FsTmFtZUxpc3Q7CiAgU2V0PENhbm9uaWNhbE5hbWU+IF9rbm93bkNhbm9uaWNhbE5hbWVOb25Sb290VG9wcyA9IG5ldyBTZXQ8Q2Fub25pY2FsTmFtZT4oKTsKICBTZXQ8Q2Fub25pY2FsTmFtZT4gX3JlaW5kZXhlZENhbm9uaWNhbE5hbWVzID0gbmV3IFNldDxDYW5vbmljYWxOYW1lPigpOwoKICAvLy8gQ3JlYXRlIGEgcHJpbnRlciB0aGF0IHdyaXRlcyB0byB0aGUgZ2l2ZW4gW3NpbmtdLgogIC8vLwogIC8vLyBUaGUgQmluYXJ5UHJpbnRlciB3aWxsIHVzZSBpdHMgb3duIGJ1ZmZlciwgc28gdGhlIFtzaW5rXSBkb2VzIG5vdCBuZWVkCiAgLy8vIG9uZS4KICBCaW5hcnlQcmludGVyKFNpbms8TGlzdDxpbnQ+PiBzaW5rLAogICAgICB7U3RyaW5nSW5kZXhlciBzdHJpbmdJbmRleGVyLAogICAgICB0aGlzLmluY2x1ZGVTb3VyY2VzID0gdHJ1ZSwKICAgICAgdGhpcy5pbmNsdWRlT2Zmc2V0cyA9IHRydWV9KQogICAgICA6IF9tYWluU2luayA9IG5ldyBCdWZmZXJlZFNpbmsoc2luayksCiAgICAgICAgX21ldGFkYXRhU2luayA9IG5ldyBCdWZmZXJlZFNpbmsobmV3IEJ5dGVzU2luaygpKSwKICAgICAgICBfY29uc3RhbnRzQnl0ZXNTaW5rID0gbmV3IEJ5dGVzU2luaygpLAogICAgICAgIHN0cmluZ0luZGV4ZXIgPSBzdHJpbmdJbmRleGVyID8/IG5ldyBTdHJpbmdJbmRleGVyKCkgewogICAgX2NvbnN0YW50c1NpbmsgPSBuZXcgQnVmZmVyZWRTaW5rKF9jb25zdGFudHNCeXRlc1NpbmspOwogICAgX2NvbnN0YW50SW5kZXhlciA9IG5ldyBDb25zdGFudEluZGV4ZXIodGhpcy5zdHJpbmdJbmRleGVyLCB0aGlzKTsKICAgIF9zaW5rID0gX21haW5TaW5rOwogIH0KCiAgdm9pZCBfZmx1c2goKSB7CiAgICBfc2luay5mbHVzaEFuZERlc3Ryb3koKTsKICB9CgogIHZvaWQgd3JpdGVCeXRlKGludCBieXRlKSB7CiAgICBhc3NlcnQoKGJ5dGUgJiAweEZGKSA9PSBieXRlKTsKICAgIF9zaW5rLmFkZEJ5dGUoYnl0ZSk7CiAgfQoKICB2b2lkIHdyaXRlQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBfc2luay5hZGRCeXRlcyhieXRlcyk7CiAgfQoKICB2b2lkIHdyaXRlVUludDMwKGludCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlID49IDAgJiYgdmFsdWUgPj4gMzAgPT0gMCk7CiAgICBpZiAodmFsdWUgPCAweDgwKSB7CiAgICAgIF9zaW5rLmFkZEJ5dGUodmFsdWUpOwogICAgfSBlbHNlIGlmICh2YWx1ZSA8IDB4NDAwMCkgewogICAgICBfc2luay5hZGRCeXRlMigodmFsdWUgPj4gOCkgfCAweDgwLCB2YWx1ZSAmIDB4RkYpOwogICAgfSBlbHNlIHsKICAgICAgX3NpbmsuYWRkQnl0ZTQoKHZhbHVlID4+IDI0KSB8IDB4QzAsICh2YWx1ZSA+PiAxNikgJiAweEZGLAogICAgICAgICAgKHZhbHVlID4+IDgpICYgMHhGRiwgdmFsdWUgJiAweEZGKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVVSW50MzIoaW50IHZhbHVlKSB7CiAgICBfc2luay5hZGRCeXRlNCgodmFsdWUgPj4gMjQpICYgMHhGRiwgKHZhbHVlID4+IDE2KSAmIDB4RkYsCiAgICAgICAgKHZhbHVlID4+IDgpICYgMHhGRiwgdmFsdWUgJiAweEZGKTsKICB9CgogIHZvaWQgd3JpdGVCeXRlTGlzdChMaXN0PGludD4gdXRmOEJ5dGVzKSB7CiAgICB3cml0ZVVJbnQzMCh1dGY4Qnl0ZXMubGVuZ3RoKTsKICAgIHdyaXRlQnl0ZXModXRmOEJ5dGVzKTsKICB9CgogIGludCBnZXRCdWZmZXJPZmZzZXQoKSB7CiAgICByZXR1cm4gX3Npbmsub2Zmc2V0OwogIH0KCiAgdm9pZCB3cml0ZVN0cmluZ1RhYmxlKFN0cmluZ0luZGV4ZXIgaW5kZXhlcikgewogICAgX2JpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CgogICAgLy8gQ29udGFpbmVycyBmb3IgdGhlIHV0ZjggZW5jb2RlZCBzdHJpbmdzLgogICAgZmluYWwgTGlzdDxVaW50OExpc3Q+IGRhdGEgPSBuZXcgTGlzdDxVaW50OExpc3Q+KCk7CiAgICBpbnQgdG90YWxMZW5ndGggPSAwOwogICAgY29uc3QgaW50IG1pbkxlbmd0aCA9IDEgPDwgMTY7CiAgICBVaW50OExpc3QgYnVmZmVyOwogICAgaW50IGluZGV4ID0gMDsKCiAgICAvLyBXcml0ZSB0aGUgZW5kIG9mZnNldHMuCiAgICB3cml0ZVVJbnQzMChpbmRleGVyLmluZGV4Lmxlbmd0aCk7CiAgICBmb3IgKFN0cmluZyBrZXkgaW4gaW5kZXhlci5pbmRleC5rZXlzKSB7CiAgICAgIGlmIChrZXkuaXNOb3RFbXB0eSkgewogICAgICAgIGludCByZXF1aXJlZE1pbkxlbmd0aCA9IGtleS5sZW5ndGg7CiAgICAgICAgaW50IGFsbG9jYXRlTWluTGVuZ3RoID0gcmVxdWlyZWRNaW5MZW5ndGggKiAzOwogICAgICAgIGludCBuZXdJbmRleDsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgaWYgKGJ1ZmZlciA9PSBudWxsIHx8IGluZGV4ICsgcmVxdWlyZWRNaW5MZW5ndGggPj0gYnVmZmVyLmxlbmd0aCkgewogICAgICAgICAgICBpbnQgbmV3TGVuZ3RoID0gbWluTGVuZ3RoOwogICAgICAgICAgICBpZiAoYWxsb2NhdGVNaW5MZW5ndGggPiBuZXdMZW5ndGgpIG5ld0xlbmd0aCA9IGFsbG9jYXRlTWluTGVuZ3RoOwogICAgICAgICAgICBpZiAoYnVmZmVyICE9IG51bGwgJiYgaW5kZXggPiAwKSB7CiAgICAgICAgICAgICAgZGF0YS5hZGQobmV3IFVpbnQ4TGlzdC52aWV3KGJ1ZmZlci5idWZmZXIsIDAsIGluZGV4KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5kZXggPSAwOwogICAgICAgICAgICBidWZmZXIgPSBuZXcgVWludDhMaXN0KG5ld0xlbmd0aCk7CiAgICAgICAgICB9CiAgICAgICAgICBuZXdJbmRleCA9IE5vdFF1aXRlU3RyaW5nLndyaXRlVXRmOChidWZmZXIsIGluZGV4LCBrZXkpOwogICAgICAgICAgaWYgKG5ld0luZGV4ICE9IC0xKSBicmVhazsKICAgICAgICAgIHJlcXVpcmVkTWluTGVuZ3RoID0gYWxsb2NhdGVNaW5MZW5ndGg7CiAgICAgICAgfQogICAgICAgIGlmIChuZXdJbmRleCA8IDApIHsKICAgICAgICAgIC8vIFV0ZjggZW5jb2RpbmcgZmFpbGVkLgogICAgICAgICAgaWYgKGJ1ZmZlciAhPSBudWxsICYmIGluZGV4ID4gMCkgewogICAgICAgICAgICBkYXRhLmFkZChuZXcgVWludDhMaXN0LnZpZXcoYnVmZmVyLmJ1ZmZlciwgMCwgaW5kZXgpKTsKICAgICAgICAgICAgYnVmZmVyID0gbnVsbDsKICAgICAgICAgICAgaW5kZXggPSAwOwogICAgICAgICAgfQogICAgICAgICAgTGlzdDxpbnQ+IGNvbnZlcnRlZCA9IHV0ZjguZW5jb2Rlci5jb252ZXJ0KGtleSk7CiAgICAgICAgICBkYXRhLmFkZChjb252ZXJ0ZWQpOwogICAgICAgICAgdG90YWxMZW5ndGggKz0gY29udmVydGVkLmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdG90YWxMZW5ndGggKz0gbmV3SW5kZXggLSBpbmRleDsKICAgICAgICAgIGluZGV4ID0gbmV3SW5kZXg7CiAgICAgICAgfQogICAgICB9CiAgICAgIHdyaXRlVUludDMwKHRvdGFsTGVuZ3RoKTsKICAgIH0KICAgIGlmIChidWZmZXIgIT0gbnVsbCAmJiBpbmRleCA+IDApIHsKICAgICAgZGF0YS5hZGQoVWludDhMaXN0LnZpZXcoYnVmZmVyLmJ1ZmZlciwgMCwgaW5kZXgpKTsKICAgIH0KCiAgICAvLyBXcml0ZSB0aGUgVVRGLTggZW5jb2RlZCBzdHJpbmdzLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7CiAgICAgIHdyaXRlQnl0ZXMoZGF0YVtpXSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nUmVmZXJlbmNlKFN0cmluZyBzdHJpbmcpIHsKICAgIHdyaXRlVUludDMwKHN0cmluZ0luZGV4ZXIucHV0KHN0cmluZykpOwogIH0KCiAgdm9pZCB3cml0ZVN0cmluZ1JlZmVyZW5jZUxpc3QoTGlzdDxTdHJpbmc+IHN0cmluZ3MpIHsKICAgIHdyaXRlTGlzdChzdHJpbmdzLCB3cml0ZVN0cmluZ1JlZmVyZW5jZSk7CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIHdyaXRlVUludDMwKF9jb25zdGFudEluZGV4ZXIucHV0KGNvbnN0YW50KSk7CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RhbnRUYWJsZShDb25zdGFudEluZGV4ZXIgaW5kZXhlcikgewogICAgX2JpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGUgPSBnZXRCdWZmZXJPZmZzZXQoKTsKCiAgICB3cml0ZVVJbnQzMChpbmRleGVyLmVudHJpZXMubGVuZ3RoKTsKICAgIGFzc2VydChpZGVudGljYWwoX3NpbmssIF9tYWluU2luaykpOwogICAgX2NvbnN0YW50c1NpbmsuZmx1c2hBbmREZXN0cm95KCk7CiAgICB3cml0ZUJ5dGVzKF9jb25zdGFudHNCeXRlc1NpbmsuYnVpbGRlci50YWtlQnl0ZXMoKSk7CiAgfQoKICBpbnQgd3JpdGVDb25zdGFudFRhYmxlRW50cnkoQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIEJ1ZmZlcmVkU2luayBvbGRTaW5rID0gX3Npbms7CiAgICBfc2luayA9IF9jb25zdGFudHNTaW5rOwogICAgaW50IGluaXRpYWxPZmZzZXQgPSBfc2luay5vZmZzZXQ7CiAgICBpZiAoY29uc3RhbnQgaXMgTnVsbENvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5OdWxsQ29uc3RhbnQpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLkJvb2xDb25zdGFudCk7CiAgICAgIHdyaXRlQnl0ZShjb25zdGFudC52YWx1ZSA/IDEgOiAwKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgSW50Q29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLkludENvbnN0YW50KTsKICAgICAgd3JpdGVJbnRlZ2VyKGNvbnN0YW50LnZhbHVlKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLkRvdWJsZUNvbnN0YW50KTsKICAgICAgd3JpdGVEb3VibGUoY29uc3RhbnQudmFsdWUpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBTdHJpbmdDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuU3RyaW5nQ29uc3RhbnQpOwogICAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShjb25zdGFudC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIFN5bWJvbENvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5TeW1ib2xDb25zdGFudCk7CiAgICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2UoY29uc3RhbnQubGlicmFyeVJlZmVyZW5jZSk7CiAgICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKGNvbnN0YW50Lm5hbWUpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBNYXBDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuTWFwQ29uc3RhbnQpOwogICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LmtleVR5cGUpOwogICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnZhbHVlVHlwZSk7CiAgICAgIHdyaXRlVUludDMwKGNvbnN0YW50LmVudHJpZXMubGVuZ3RoKTsKICAgICAgZm9yIChmaW5hbCBDb25zdGFudE1hcEVudHJ5IGVudHJ5IGluIGNvbnN0YW50LmVudHJpZXMpIHsKICAgICAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKGVudHJ5LmtleSk7CiAgICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShlbnRyeS52YWx1ZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgTGlzdENvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5MaXN0Q29uc3RhbnQpOwogICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGVBcmd1bWVudCk7CiAgICAgIHdyaXRlVUludDMwKGNvbnN0YW50LmVudHJpZXMubGVuZ3RoKTsKICAgICAgY29uc3RhbnQuZW50cmllcy5mb3JFYWNoKHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBTZXRDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuU2V0Q29uc3RhbnQpOwogICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGVBcmd1bWVudCk7CiAgICAgIHdyaXRlVUludDMwKGNvbnN0YW50LmVudHJpZXMubGVuZ3RoKTsKICAgICAgY29uc3RhbnQuZW50cmllcy5mb3JFYWNoKHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBJbnN0YW5jZUNvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5JbnN0YW5jZUNvbnN0YW50KTsKICAgICAgd3JpdGVDbGFzc1JlZmVyZW5jZShjb25zdGFudC5jbGFzc05vZGUpOwogICAgICB3cml0ZVVJbnQzMChjb25zdGFudC50eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICAgIGNvbnN0YW50LnR5cGVBcmd1bWVudHMuZm9yRWFjaCh3cml0ZURhcnRUeXBlKTsKICAgICAgd3JpdGVVSW50MzAoY29uc3RhbnQuZmllbGRWYWx1ZXMubGVuZ3RoKTsKICAgICAgY29uc3RhbnQuZmllbGRWYWx1ZXMuZm9yRWFjaCgoUmVmZXJlbmNlIGZpZWxkUmVmLCBDb25zdGFudCB2YWx1ZSkgewogICAgICAgIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoZmllbGRSZWYuY2Fub25pY2FsTmFtZSk7CiAgICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZSh2YWx1ZSk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KTsKICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShjb25zdGFudC50ZWFyT2ZmQ29uc3RhbnQpOwogICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gY29uc3RhbnQudHlwZXMubGVuZ3RoOwogICAgICB3cml0ZVVJbnQzMChsZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC50eXBlc1tpXSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgVGVhck9mZkNvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5UZWFyT2ZmQ29uc3RhbnQpOwogICAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGNvbnN0YW50LnByb2NlZHVyZS5jYW5vbmljYWxOYW1lKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgVHlwZUxpdGVyYWxDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuVHlwZUxpdGVyYWxDb25zdGFudCk7CiAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLlVuZXZhbHVhdGVkQ29uc3RhbnQpOwogICAgICB3cml0ZU5vZGUoY29uc3RhbnQuZXhwcmVzc2lvbik7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignVW5zdXBwb3J0ZWQgY29uc3RhbnQgJGNvbnN0YW50Jyk7CiAgICB9CiAgICBfc2luayA9IG9sZFNpbms7CiAgICByZXR1cm4gX2NvbnN0YW50c1Npbmsub2Zmc2V0IC0gaW5pdGlhbE9mZnNldDsKICB9CgogIHZvaWQgd3JpdGVEYXJ0VHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICB0eXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIC8vIFJldHVybnMgdGhlIG5ldyBhY3RpdmUgZmlsZSB1cmkuCiAgdm9pZCB3cml0ZVVyaVJlZmVyZW5jZShVcmkgdXJpKSB7CiAgICBmaW5hbCBpbnQgaW5kZXggPSBfc291cmNlVXJpSW5kZXhlci5wdXQodXJpKTsKICAgIHdyaXRlVUludDMwKGluZGV4KTsKICAgIGlmICghX2N1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb24pIHsKICAgICAgaWYgKF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeS5sZW5ndGggPD0gaW5kZXgpIHsKICAgICAgICBfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25JbkxpYnJhcnkubGVuZ3RoID0gaW5kZXggKyAxOwogICAgICB9CiAgICAgIF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeVtpbmRleF0gPSB0cnVlOwogICAgICBpZiAoX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uLmxlbmd0aCA8PSBpbmRleCkgewogICAgICAgIF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbi5sZW5ndGggPSBpbmRleCArIDE7CiAgICAgIH0KICAgICAgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uW2luZGV4XSA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTGlzdDxUPihMaXN0PFQ+IGl0ZW1zLCB2b2lkIHdyaXRlSXRlbShUIHgpKSB7CiAgICB3cml0ZVVJbnQzMChpdGVtcy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkgewogICAgICB3cml0ZUl0ZW0oaXRlbXNbaV0pOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZU5vZGVMaXN0KExpc3Q8Tm9kZT4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVOb2RlKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZVByb2NlZHVyZU5vZGVMaXN0KExpc3Q8UHJvY2VkdXJlPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZVByb2NlZHVyZU5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlRmllbGROb2RlTGlzdChMaXN0PEZpZWxkPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZUZpZWxkTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVDbGFzc05vZGVMaXN0KExpc3Q8Q2xhc3M+IG5vZGVzKSB7CiAgICBmaW5hbCBsZW4gPSBub2Rlcy5sZW5ndGg7CiAgICB3cml0ZVVJbnQzMChsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmaW5hbCBub2RlID0gbm9kZXNbaV07CiAgICAgIHdyaXRlQ2xhc3NOb2RlKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNvbnN0cnVjdG9yTm9kZUxpc3QoTGlzdDxDb25zdHJ1Y3Rvcj4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVDb25zdHJ1Y3Rvck5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JOb2RlTGlzdCgKICAgICAgTGlzdDxSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcj4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvck5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlU3dpdGNoQ2FzZU5vZGVMaXN0KExpc3Q8U3dpdGNoQ2FzZT4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVTd2l0Y2hDYXNlTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVDYXRjaE5vZGVMaXN0KExpc3Q8Q2F0Y2g+IG5vZGVzKSB7CiAgICBmaW5hbCBsZW4gPSBub2Rlcy5sZW5ndGg7CiAgICB3cml0ZVVJbnQzMChsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmaW5hbCBub2RlID0gbm9kZXNbaV07CiAgICAgIHdyaXRlQ2F0Y2hOb2RlKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZVR5cGVkZWZOb2RlTGlzdChMaXN0PFR5cGVkZWY+IG5vZGVzKSB7CiAgICBmaW5hbCBsZW4gPSBub2Rlcy5sZW5ndGg7CiAgICB3cml0ZVVJbnQzMChsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmaW5hbCBub2RlID0gbm9kZXNbaV07CiAgICAgIHdyaXRlVHlwZWRlZk5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTm9kZShOb2RlIG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZUZ1bmN0aW9uTm9kZShGdW5jdGlvbk5vZGUgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlQXJndW1lbnRzTm9kZShBcmd1bWVudHMgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyeU5vZGUoTGlicmFyeSBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVQcm9jZWR1cmVOb2RlKFByb2NlZHVyZSBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVGaWVsZE5vZGUoRmllbGQgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlQ2xhc3NOb2RlKENsYXNzIG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZUNvbnN0cnVjdG9yTm9kZShDb25zdHJ1Y3RvciBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvck5vZGUoCiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZVN3aXRjaENhc2VOb2RlKFN3aXRjaENhc2Ugbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlQ2F0Y2hOb2RlKENhdGNoIG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZVR5cGVkZWZOb2RlKFR5cGVkZWYgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlT3B0aW9uYWxOb2RlKE5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB3cml0ZUJ5dGUoVGFnLk5vdGhpbmcpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCeXRlKFRhZy5Tb21ldGhpbmcpOwogICAgICB3cml0ZU5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlT3B0aW9uYWxGdW5jdGlvbk5vZGUoRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgd3JpdGVCeXRlKFRhZy5Ob3RoaW5nKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuU29tZXRoaW5nKTsKICAgICAgd3JpdGVGdW5jdGlvbk5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTGlua1RhYmxlKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIF9iaW5hcnlPZmZzZXRGb3JMaW5rVGFibGUgPSBnZXRCdWZmZXJPZmZzZXQoKTsKICAgIHdyaXRlTGlzdChfY2Fub25pY2FsTmFtZUxpc3QsIHdyaXRlQ2Fub25pY2FsTmFtZUVudHJ5KTsKICB9CgogIHZvaWQgaW5kZXhMaW5rVGFibGUoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgX2Nhbm9uaWNhbE5hbWVMaXN0ID0gPENhbm9uaWNhbE5hbWU+W107CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBvbmVudC5saWJyYXJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgTGlicmFyeSBsaWJyYXJ5ID0gY29tcG9uZW50LmxpYnJhcmllc1tpXTsKICAgICAgaWYgKCFzaG91bGRXcml0ZUxpYnJhcnlDYW5vbmljYWxOYW1lcyhsaWJyYXJ5KSkgY29udGludWU7CiAgICAgIF9pbmRleExpbmtUYWJsZUludGVybmFsKGxpYnJhcnkuY2Fub25pY2FsTmFtZSk7CiAgICAgIF9rbm93bkNhbm9uaWNhbE5hbWVOb25Sb290VG9wcy5hZGQobGlicmFyeS5jYW5vbmljYWxOYW1lKTsKICAgIH0KICB9CgogIHZvaWQgX2luZGV4TGlua1RhYmxlSW50ZXJuYWwoQ2Fub25pY2FsTmFtZSBub2RlKSB7CiAgICBub2RlLmluZGV4ID0gX2Nhbm9uaWNhbE5hbWVMaXN0Lmxlbmd0aDsKICAgIF9jYW5vbmljYWxOYW1lTGlzdC5hZGQobm9kZSk7CiAgICBJdGVyYWJsZTxDYW5vbmljYWxOYW1lPiBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW5Pck51bGw7CiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkgewogICAgICBmb3IgKENhbm9uaWNhbE5hbWUgY2hpbGQgaW4gY2hpbGRyZW4pIHsKICAgICAgICBfaW5kZXhMaW5rVGFibGVJbnRlcm5hbChjaGlsZCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBDb21wdXRlIGNhbm9uaWNhbCBuYW1lcyBmb3IgdGhlIHdob2xlIGNvbXBvbmVudCBvciBwYXJ0cyBvZiBpdC4KICB2b2lkIGNvbXB1dGVDYW5vbmljYWxOYW1lcyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBjb21wb25lbnQuY29tcHV0ZUNhbm9uaWNhbE5hbWVzKCk7CiAgfQoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBhbGwgY2Fub25pY2FsIG5hbWVzIG9mIHRoZSBbbGlicmFyeV0gc2hvdWxkIGJlIHdyaXR0ZW4KICAvLy8gaW50byB0aGUgbGluayB0YWJsZS4gIElmIHNvbWUgbGlicmFyaWVzIG9mIHRoZSBjb21wb25lbnQgYXJlIHNraXBwZWQsCiAgLy8vIHRoZW4gYWxsIHRoZSBhZGRpdGlvbmFsIG5hbWVzIHJlZmVyZW5jZWQgYnkgdGhlIGxpYnJhcmllcyB0aGF0IGFyZSB3cml0dGVuCiAgLy8vIGJ5IFt3cml0ZUxpYnJhcmllc10gYXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQuCiAgYm9vbCBzaG91bGRXcml0ZUxpYnJhcnlDYW5vbmljYWxOYW1lcyhMaWJyYXJ5IGxpYnJhcnkpID0+IHRydWU7CgogIHZvaWQgd3JpdGVDYW5vbmljYWxOYW1lRW50cnkoQ2Fub25pY2FsTmFtZSBub2RlKSB7CiAgICBDYW5vbmljYWxOYW1lIHBhcmVudCA9IG5vZGUucGFyZW50OwogICAgaWYgKHBhcmVudC5pc1Jvb3QpIHsKICAgICAgd3JpdGVVSW50MzAoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZVVJbnQzMChwYXJlbnQuaW5kZXggKyAxKTsKICAgIH0KICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSk7CiAgfQoKICB2b2lkIHdyaXRlQ29tcG9uZW50RmlsZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBjb21wdXRlQ2Fub25pY2FsTmFtZXMoY29tcG9uZW50KTsKICAgIGZpbmFsIGNvbXBvbmVudE9mZnNldCA9IGdldEJ1ZmZlck9mZnNldCgpOwogICAgd3JpdGVVSW50MzIoVGFnLkNvbXBvbmVudEZpbGUpOwogICAgd3JpdGVVSW50MzIoVGFnLkJpbmFyeUZvcm1hdFZlcnNpb24pOwogICAgd3JpdGVMaXN0T2ZTdHJpbmdzKGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbik7CiAgICBpbmRleExpbmtUYWJsZShjb21wb25lbnQpOwogICAgX2NvbGxlY3RNZXRhZGF0YShjb21wb25lbnQpOwogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhSW1wbChjb21wb25lbnQsIGNvbXBvbmVudE9mZnNldCk7CiAgICB9CiAgICBsaWJyYXJ5T2Zmc2V0cyA9IDxpbnQ+W107CiAgICBDYW5vbmljYWxOYW1lIG1haW4gPSBnZXRDYW5vbmljYWxOYW1lT2ZNZW1iZXIoY29tcG9uZW50Lm1haW5NZXRob2QpOwogICAgaWYgKG1haW4gIT0gbnVsbCkgewogICAgICBjaGVja0Nhbm9uaWNhbE5hbWUobWFpbik7CiAgICB9CiAgICB3cml0ZUxpYnJhcmllcyhjb21wb25lbnQpOwogICAgd3JpdGVVcmlUb1NvdXJjZShjb21wb25lbnQudXJpVG9Tb3VyY2UpOwogICAgd3JpdGVMaW5rVGFibGUoY29tcG9uZW50KTsKICAgIF93cml0ZU1ldGFkYXRhU2VjdGlvbihjb21wb25lbnQpOwogICAgd3JpdGVTdHJpbmdUYWJsZShzdHJpbmdJbmRleGVyKTsKICAgIHdyaXRlQ29uc3RhbnRUYWJsZShfY29uc3RhbnRJbmRleGVyKTsKICAgIHdyaXRlQ29tcG9uZW50SW5kZXgoY29tcG9uZW50LCBjb21wb25lbnQubGlicmFyaWVzKTsKCiAgICBfZmx1c2goKTsKICB9CgogIHZvaWQgd3JpdGVMaXN0T2ZTdHJpbmdzKExpc3Q8U3RyaW5nPiBzdHJpbmdzKSB7CiAgICB3cml0ZVVJbnQzMChzdHJpbmdzPy5sZW5ndGggPz8gMCk7CiAgICBpZiAoc3RyaW5ncyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykgewogICAgICAgIFN0cmluZyBzID0gc3RyaW5nc1tpXTsKICAgICAgICAvLyBUaGlzIGlzIHNsb3csIGJ1dCB3ZSBleHBlY3QgdGhlcmUgdG8gaW4gZ2VuZXJhbCBiZSBubyBwcm9ibGVtcy4gSWYgdGhpcwogICAgICAgIC8vIHR1cm5zIG91dCB0byBiZSB3cm9uZyB3ZSBjYW4gb3B0aW1pemUgaXQgYXMgd2UgZG8gVVJMcyBmb3IgaW5zdGFuY2UuCiAgICAgICAgd3JpdGVCeXRlTGlzdCh1dGY4LmVuY29kZXIuY29udmVydChzKSk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBDb2xsZWN0IG5vbi1lbXB0eSBtZXRhZGF0YSByZXBvc2l0b3JpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wb25lbnQuCiAgdm9pZCBfY29sbGVjdE1ldGFkYXRhKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGNvbXBvbmVudC5tZXRhZGF0YS5mb3JFYWNoKCh0YWcsIHJlcG9zaXRvcnkpIHsKICAgICAgaWYgKHJlcG9zaXRvcnkubWFwcGluZy5pc0VtcHR5KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBfbWV0YWRhdGFTdWJzZWN0aW9ucyA/Pz0gPF9NZXRhZGF0YVN1YnNlY3Rpb24+W107CiAgICAgIF9tZXRhZGF0YVN1YnNlY3Rpb25zLmFkZChuZXcgX01ldGFkYXRhU3Vic2VjdGlvbihyZXBvc2l0b3J5KSk7CiAgICB9KTsKICB9CgogIC8vLyBXcml0ZXMgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBbTm9kZV0uCiAgdm9pZCBfd3JpdGVOb2RlTWV0YWRhdGEoTm9kZSBub2RlKSB7CiAgICBfd3JpdGVOb2RlTWV0YWRhdGFJbXBsKG5vZGUsIGdldEJ1ZmZlck9mZnNldCgpKTsKICB9CgogIHZvaWQgX3dyaXRlTm9kZU1ldGFkYXRhSW1wbChOb2RlIG5vZGUsIGludCBub2RlT2Zmc2V0KSB7CiAgICBmb3IgKF9NZXRhZGF0YVN1YnNlY3Rpb24gc3Vic2VjdGlvbiBpbiBfbWV0YWRhdGFTdWJzZWN0aW9ucykgewogICAgICBmaW5hbCByZXBvc2l0b3J5ID0gc3Vic2VjdGlvbi5yZXBvc2l0b3J5OwogICAgICBmaW5hbCB2YWx1ZSA9IHJlcG9zaXRvcnkubWFwcGluZ1tub2RlXTsKICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgaWYgKCFNZXRhZGF0YVJlcG9zaXRvcnkuaXNTdXBwb3J0ZWQobm9kZSkpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgIk5vZGVzIG9mIHR5cGUgJHtub2RlLnJ1bnRpbWVUeXBlfSBjYW4ndCBoYXZlIG1ldGFkYXRhLiIpOwogICAgICB9CgogICAgICBpZiAoIWlkZW50aWNhbChfc2luaywgX21haW5TaW5rKSkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAiTm9kZSB3cml0dGVuIGludG8gbWV0YWRhdGEgY2FuJ3QgaGF2ZSBtZXRhZGF0YSAiCiAgICAgICAgICAgICIobWV0YWRhdGE6ICR7cmVwb3NpdG9yeS50YWd9LCBub2RlOiAke25vZGUucnVudGltZVR5cGV9ICRub2RlKSIpOwogICAgICB9CgogICAgICBfc2luayA9IF9tZXRhZGF0YVNpbms7CiAgICAgIHN1YnNlY3Rpb24ubWV0YWRhdGFNYXBwaW5nLmFkZChub2RlT2Zmc2V0KTsKICAgICAgc3Vic2VjdGlvbi5tZXRhZGF0YU1hcHBpbmcuYWRkKGdldEJ1ZmZlck9mZnNldCgpKTsKICAgICAgcmVwb3NpdG9yeS53cml0ZVRvQmluYXJ5KHZhbHVlLCBub2RlLCB0aGlzKTsKICAgICAgX3NpbmsgPSBfbWFpblNpbms7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyU2NvcGUoCiAgICAgIHtMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBib29sIG1lbWJlclNjb3BlOiBmYWxzZSwKICAgICAgYm9vbCB2YXJpYWJsZVNjb3BlOiBmYWxzZX0pIHsKICAgIGlmICh0eXBlUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIF90eXBlUGFyYW1ldGVySW5kZXhlci5lbnRlcih0eXBlUGFyYW1ldGVycyk7CiAgICB9CiAgICBpZiAobWVtYmVyU2NvcGUpIHsKICAgICAgX3ZhcmlhYmxlSW5kZXhlciA9IG51bGw7CiAgICB9CiAgICBpZiAodmFyaWFibGVTY29wZSkgewogICAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICAgIF92YXJpYWJsZUluZGV4ZXIucHVzaFNjb3BlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxlYXZlU2NvcGUoCiAgICAgIHtMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBib29sIG1lbWJlclNjb3BlOiBmYWxzZSwKICAgICAgYm9vbCB2YXJpYWJsZVNjb3BlOiBmYWxzZX0pIHsKICAgIGlmICh2YXJpYWJsZVNjb3BlKSB7CiAgICAgIF92YXJpYWJsZUluZGV4ZXIucG9wU2NvcGUoKTsKICAgIH0KICAgIGlmIChtZW1iZXJTY29wZSkgewogICAgICBfdmFyaWFibGVJbmRleGVyID0gbnVsbDsKICAgIH0KICAgIGlmICh0eXBlUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIF90eXBlUGFyYW1ldGVySW5kZXhlci5leGl0KHR5cGVQYXJhbWV0ZXJzKTsKICAgIH0KICB9CgogIHZvaWQgX3dyaXRlTWV0YWRhdGFTZWN0aW9uKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIC8vIE1ha2Ugc3VyZSBtZXRhZGF0YSBwYXlsb2FkcyBzZWN0aW9uIGlzIDgtYnl0ZSBhbGlnbmVkLAogICAgLy8gc28gY2VydGFpbiBraW5kcyBvZiBtZXRhZGF0YSBjYW4gY29udGFpbiBhbGlnbmVkIGRhdGEuCiAgICBjb25zdCBpbnQgbWV0YWRhdGFQYXlsb2Fkc0FsaWdubWVudCA9IDg7CiAgICBpbnQgcGFkZGluZyA9ICgoZ2V0QnVmZmVyT2Zmc2V0KCkgKyBtZXRhZGF0YVBheWxvYWRzQWxpZ25tZW50IC0gMSkgJgogICAgICAgICAgICAtbWV0YWRhdGFQYXlsb2Fkc0FsaWdubWVudCkgLQogICAgICAgIGdldEJ1ZmZlck9mZnNldCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWRkaW5nOyArK2kpIHsKICAgICAgd3JpdGVCeXRlKDApOwogICAgfQoKICAgIF9iaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CgogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zID09IG51bGwpIHsKICAgICAgX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3MgPSBnZXRCdWZmZXJPZmZzZXQoKTsKICAgICAgd3JpdGVVSW50MzIoMCk7IC8vIEVtcHR5IHNlY3Rpb24uCiAgICAgIHJldHVybjsKICAgIH0KCiAgICBhc3NlcnQoaWRlbnRpY2FsKF9zaW5rLCBfbWFpblNpbmspKTsKICAgIF9tZXRhZGF0YVNpbmsuZmx1c2hBbmREZXN0cm95KCk7CiAgICB3cml0ZUJ5dGVzKChfbWV0YWRhdGFTaW5rLl9zaW5rIGFzIEJ5dGVzU2luaykuYnVpbGRlci50YWtlQnl0ZXMoKSk7CgogICAgLy8gUkxpc3Q8TWV0YWRhdGFNYXBwaW5nPiBtZXRhZGF0YU1hcHBpbmdzCiAgICBfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5ncyA9IGdldEJ1ZmZlck9mZnNldCgpOwogICAgZm9yIChfTWV0YWRhdGFTdWJzZWN0aW9uIHN1YnNlY3Rpb24gaW4gX21ldGFkYXRhU3Vic2VjdGlvbnMpIHsKICAgICAgLy8gVUludDMyIHRhZwogICAgICB3cml0ZVVJbnQzMihzdHJpbmdJbmRleGVyLnB1dChzdWJzZWN0aW9uLnJlcG9zaXRvcnkudGFnKSk7CgogICAgICAvLyBSTGlzdDxQYWlyPFVJbnQzMiwgVUludDMyPj4gbm9kZU9mZnNldFRvTWV0YWRhdGFPZmZzZXQKICAgICAgZmluYWwgbWFwcGluZ0xlbmd0aCA9IHN1YnNlY3Rpb24ubWV0YWRhdGFNYXBwaW5nLmxlbmd0aDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXBwaW5nTGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICB3cml0ZVVJbnQzMihzdWJzZWN0aW9uLm1ldGFkYXRhTWFwcGluZ1tpXSk7IC8vIG5vZGUgb2Zmc2V0CiAgICAgICAgd3JpdGVVSW50MzIoc3Vic2VjdGlvbi5tZXRhZGF0YU1hcHBpbmdbaSArIDFdKTsgLy8gbWV0YWRhdGEgb2Zmc2V0CiAgICAgIH0KICAgICAgd3JpdGVVSW50MzIobWFwcGluZ0xlbmd0aCB+LyAyKTsKICAgIH0KICAgIHdyaXRlVUludDMyKF9tZXRhZGF0YVN1YnNlY3Rpb25zLmxlbmd0aCk7CiAgfQoKICAvLy8gV3JpdGUgYWxsIG9mIHNvbWUgb2YgdGhlIGxpYnJhcmllcyBvZiB0aGUgW2NvbXBvbmVudF0uCiAgdm9pZCB3cml0ZUxpYnJhcmllcyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBvbmVudC5saWJyYXJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgd3JpdGVMaWJyYXJ5Tm9kZShjb21wb25lbnQubGlicmFyaWVzW2ldKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVDb21wb25lbnRJbmRleChDb21wb25lbnQgY29tcG9uZW50LCBMaXN0PExpYnJhcnk+IGxpYnJhcmllcykgewogICAgLy8gSXQgaXMgYWxsb3dlZCB0byBjb25jYXRlbmF0ZSBzZXZlcmFsIGtlcm5lbCBiaW5hcmllcyB0byBjcmVhdGUgYQogICAgLy8gbXVsdGktY29tcG9uZW50IGtlcm5lbCBmaWxlLiBJbiBvcmRlciB0byBtYWludGFpbiBhbGlnbm1lbnQgb2YKICAgIC8vIG1ldGFkYXRhIHNlY3Rpb25zIHdpdGhpbiBrZXJuZWwgYmluYXJpZXMgYWZ0ZXIgY29uY2F0ZW5hdGlvbiwKICAgIC8vIHNpemUgb2YgZWFjaCBrZXJuZWwgYmluYXJ5IHNob3VsZCBiZSBhbGlnbmVkLgogICAgLy8gQ29tcG9uZW50IGluZGV4IGlzIGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiBhIGtlcm5lbCBiaW5hcnksIHNvIHBhZGRpbmcKICAgIC8vIGlzIGFkZGVkIGJlZm9yZSBjb21wb25lbnQgaW5kZXguCiAgICBjb25zdCBpbnQga2VybmVsRmlsZUFsaWdubWVudCA9IDg7CgogICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBudW1iZXIgb2Ygd3JpdGVVSW50MzIgYmVsb3cuCiAgICBpbnQgbnVtQ29tcG9uZW50SW5kZXhFbnRyaWVzID0gNyArIGxpYnJhcnlPZmZzZXRzLmxlbmd0aCArIDM7CgogICAgaW50IHVuYWxpZ25lZFNpemUgPSBnZXRCdWZmZXJPZmZzZXQoKSArIG51bUNvbXBvbmVudEluZGV4RW50cmllcyAqIDQ7CiAgICBpbnQgcGFkZGluZyA9CiAgICAgICAgKCh1bmFsaWduZWRTaXplICsga2VybmVsRmlsZUFsaWdubWVudCAtIDEpICYgLWtlcm5lbEZpbGVBbGlnbm1lbnQpIC0KICAgICAgICAgICAgdW5hbGlnbmVkU2l6ZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFkZGluZzsgKytpKSB7CiAgICAgIHdyaXRlQnl0ZSgwKTsKICAgIH0KCiAgICAvLyBGaXhlZC1zaXplIGludHMgYXQgdGhlIGVuZCB1c2VkIGFzIGFuIGluZGV4LgogICAgYXNzZXJ0KF9iaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZSA+PSAwKTsKICAgIHdyaXRlVUludDMyKF9iaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZSk7CiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvckxpbmtUYWJsZSA+PSAwKTsKICAgIHdyaXRlVUludDMyKF9iaW5hcnlPZmZzZXRGb3JMaW5rVGFibGUpOwogICAgYXNzZXJ0KF9iaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzID49IDApOwogICAgd3JpdGVVSW50MzIoX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMpOwogICAgYXNzZXJ0KF9iaW5hcnlPZmZzZXRGb3JNZXRhZGF0YU1hcHBpbmdzID49IDApOwogICAgd3JpdGVVSW50MzIoX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3MpOwogICAgYXNzZXJ0KF9iaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZSA+PSAwKTsKICAgIHdyaXRlVUludDMyKF9iaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZSk7CiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGUgPj0gMCk7CiAgICB3cml0ZVVJbnQzMihfYmluYXJ5T2Zmc2V0Rm9yQ29uc3RhbnRUYWJsZSk7CgogICAgQ2Fub25pY2FsTmFtZSBtYWluID0gZ2V0Q2Fub25pY2FsTmFtZU9mTWVtYmVyKGNvbXBvbmVudC5tYWluTWV0aG9kKTsKICAgIGlmIChtYWluID09IG51bGwpIHsKICAgICAgd3JpdGVVSW50MzIoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZVVJbnQzMihtYWluLmluZGV4ICsgMSk7CiAgICB9CgogICAgYXNzZXJ0KGxpYnJhcnlPZmZzZXRzLmxlbmd0aCA9PSBsaWJyYXJpZXMubGVuZ3RoKTsKICAgIGZvciAoaW50IG9mZnNldCBpbiBsaWJyYXJ5T2Zmc2V0cykgewogICAgICB3cml0ZVVJbnQzMihvZmZzZXQpOwogICAgfQogICAgd3JpdGVVSW50MzIoX2JpbmFyeU9mZnNldEZvclNvdXJjZVRhYmxlKTsgLy8gZW5kIG9mIGxhc3QgbGlicmFyeS4KICAgIHdyaXRlVUludDMyKGxpYnJhcmllcy5sZW5ndGgpOwoKICAgIHdyaXRlVUludDMyKGdldEJ1ZmZlck9mZnNldCgpICsgNCk7IC8vIHRvdGFsIHNpemUuCiAgfQoKICB2b2lkIHdyaXRlVXJpVG9Tb3VyY2UoTWFwPFVyaSwgU291cmNlPiB1cmlUb1NvdXJjZSkgewogICAgX2JpbmFyeU9mZnNldEZvclNvdXJjZVRhYmxlID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CgogICAgaW50IGxlbmd0aCA9IF9zb3VyY2VVcmlJbmRleGVyLmluZGV4Lmxlbmd0aDsKICAgIHdyaXRlVUludDMyKGxlbmd0aCk7CiAgICBMaXN0PGludD4gaW5kZXggPSBuZXcgTGlzdDxpbnQ+KGxlbmd0aCk7CgogICAgLy8gV3JpdGUgZGF0YS4KICAgIGludCBpID0gMDsKICAgIFVpbnQ4TGlzdCBidWZmZXIgPSBuZXcgVWludDhMaXN0KDEgPDwgMTYpOwogICAgZm9yIChVcmkgdXJpIGluIF9zb3VyY2VVcmlJbmRleGVyLmluZGV4LmtleXMpIHsKICAgICAgaW5kZXhbaV0gPSBnZXRCdWZmZXJPZmZzZXQoKTsKICAgICAgU291cmNlIHNvdXJjZSA9IHVyaVRvU291cmNlW3VyaV07CiAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCB8fAogICAgICAgICAgIShpbmNsdWRlU291cmNlcyAmJgogICAgICAgICAgICAgIF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbi5sZW5ndGggPiBpICYmCiAgICAgICAgICAgICAgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uW2ldID09IHRydWUpKSB7CiAgICAgICAgc291cmNlID0gbmV3IFNvdXJjZSgKICAgICAgICAgICAgPGludD5bXSwgY29uc3QgPGludD5bXSwgc291cmNlPy5pbXBvcnRVcmksIHNvdXJjZT8uZmlsZVVyaSk7CiAgICAgIH0KCiAgICAgIFN0cmluZyB1cmlBc1N0cmluZyA9IHVyaSA9PSBudWxsID8gIiIgOiAiJHVyaSI7CiAgICAgIG91dHB1dFN0cmluZ1ZpYUJ1ZmZlcih1cmlBc1N0cmluZywgYnVmZmVyKTsKCiAgICAgIHdyaXRlQnl0ZUxpc3Qoc291cmNlLnNvdXJjZSk7CgogICAgICBMaXN0PGludD4gbGluZVN0YXJ0cyA9IHNvdXJjZS5saW5lU3RhcnRzOwogICAgICB3cml0ZVVJbnQzMChsaW5lU3RhcnRzLmxlbmd0aCk7CiAgICAgIGludCBwcmV2aW91c0xpbmVTdGFydCA9IDA7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGluZVN0YXJ0cy5sZW5ndGg7ICsraikgewogICAgICAgIGludCBsaW5lU3RhcnQgPSBsaW5lU3RhcnRzW2pdOwogICAgICAgIHdyaXRlVUludDMwKGxpbmVTdGFydCAtIHByZXZpb3VzTGluZVN0YXJ0KTsKICAgICAgICBwcmV2aW91c0xpbmVTdGFydCA9IGxpbmVTdGFydDsKICAgICAgfQoKICAgICAgU3RyaW5nIGltcG9ydFVyaUFzU3RyaW5nID0KICAgICAgICAgIHNvdXJjZS5pbXBvcnRVcmkgPT0gbnVsbCA/ICIiIDogIiR7c291cmNlLmltcG9ydFVyaX0iOwogICAgICBvdXRwdXRTdHJpbmdWaWFCdWZmZXIoaW1wb3J0VXJpQXNTdHJpbmcsIGJ1ZmZlcik7CgogICAgICBpKys7CiAgICB9CgogICAgLy8gV3JpdGUgaW5kZXggZm9yIHJhbmRvbSBhY2Nlc3MuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZGV4Lmxlbmd0aDsgKytpKSB7CiAgICAgIHdyaXRlVUludDMyKGluZGV4W2ldKTsKICAgIH0KICB9CgogIHZvaWQgb3V0cHV0U3RyaW5nVmlhQnVmZmVyKFN0cmluZyB1cmlBc1N0cmluZywgVWludDhMaXN0IGJ1ZmZlcikgewogICAgaWYgKHVyaUFzU3RyaW5nLmxlbmd0aCAqIDMgPCBidWZmZXIubGVuZ3RoKSB7CiAgICAgIGludCBsZW5ndGggPSBOb3RRdWl0ZVN0cmluZy53cml0ZVV0ZjgoYnVmZmVyLCAwLCB1cmlBc1N0cmluZyk7CiAgICAgIGlmIChsZW5ndGggPCAwKSB7CiAgICAgICAgLy8gVXRmOCBlbmNvZGluZyBmYWlsZWQuCiAgICAgICAgd3JpdGVCeXRlTGlzdCh1dGY4LmVuY29kZXIuY29udmVydCh1cmlBc1N0cmluZykpOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlVUludDMwKGxlbmd0aCk7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsZW5ndGg7IGorKykgewogICAgICAgICAgd3JpdGVCeXRlKGJ1ZmZlcltqXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBVbmNvbW1vbiBjYXNlIHdpdGggdmVyeSBsb25nIHVybC4KICAgICAgd3JpdGVCeXRlTGlzdCh1dGY4LmVuY29kZXIuY29udmVydCh1cmlBc1N0cmluZykpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlKExpYnJhcnlEZXBlbmRlbmN5IG5vZGUpIHsKICAgIGludCBpbmRleCA9IF9saWJyYXJ5RGVwZW5kZW5jeUluZGV4W25vZGVdOwogICAgaWYgKGluZGV4ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnUmVmZXJlbmNlIHRvIGxpYnJhcnkgZGVwZW5kZW5jeSAkbm9kZSBvdXQgb2Ygc2NvcGUnKTsKICAgIH0KICAgIHdyaXRlVUludDMwKGluZGV4KTsKICB9CgogIHZvaWQgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7CiAgICBpZiAocmVmZXJlbmNlID09IG51bGwpIHsKICAgICAgd3JpdGVVSW50MzAoMCk7CiAgICB9IGVsc2UgewogICAgICBDYW5vbmljYWxOYW1lIG5hbWUgPSByZWZlcmVuY2UuY2Fub25pY2FsTmFtZTsKICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdNaXNzaW5nIGNhbm9uaWNhbCBuYW1lIGZvciAkcmVmZXJlbmNlJyk7CiAgICAgIH0KICAgICAgY2hlY2tDYW5vbmljYWxOYW1lKG5hbWUpOwogICAgICB3cml0ZVVJbnQzMChuYW1lLmluZGV4ICsgMSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7CiAgICBpZiAocmVmZXJlbmNlID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ0dvdCBudWxsIHJlZmVyZW5jZScpOwogICAgfSBlbHNlIHsKICAgICAgQ2Fub25pY2FsTmFtZSBuYW1lID0gcmVmZXJlbmNlLmNhbm9uaWNhbE5hbWU7CiAgICAgIGlmIChuYW1lID09IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3IgJHJlZmVyZW5jZScpOwogICAgICB9CiAgICAgIGNoZWNrQ2Fub25pY2FsTmFtZShuYW1lKTsKICAgICAgd3JpdGVVSW50MzAobmFtZS5pbmRleCArIDEpOwogICAgfQogIH0KCiAgdm9pZCBjaGVja0Nhbm9uaWNhbE5hbWUoQ2Fub25pY2FsTmFtZSBub2RlKSB7CiAgICBpZiAoX2tub3duQ2Fub25pY2FsTmFtZU5vblJvb3RUb3BzLmNvbnRhaW5zKG5vZGUubm9uUm9vdFRvcCkpIHJldHVybjsKICAgIGlmIChub2RlID09IG51bGwgfHwgbm9kZS5pc1Jvb3QpIHJldHVybjsKICAgIGlmIChfcmVpbmRleGVkQ2Fub25pY2FsTmFtZXMuY29udGFpbnMobm9kZSkpIHJldHVybjsKCiAgICBjaGVja0Nhbm9uaWNhbE5hbWUobm9kZS5wYXJlbnQpOwogICAgbm9kZS5pbmRleCA9IF9jYW5vbmljYWxOYW1lTGlzdC5sZW5ndGg7CiAgICBfY2Fub25pY2FsTmFtZUxpc3QuYWRkKG5vZGUpOwogICAgX3JlaW5kZXhlZENhbm9uaWNhbE5hbWVzLmFkZChub2RlKTsKICB9CgogIHZvaWQgd3JpdGVOdWxsQWxsb3dlZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoQ2Fub25pY2FsTmFtZSBuYW1lKSB7CiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlVUludDMwKDApOwogICAgfSBlbHNlIHsKICAgICAgY2hlY2tDYW5vbmljYWxOYW1lKG5hbWUpOwogICAgICB3cml0ZVVJbnQzMChuYW1lLmluZGV4ICsgMSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoQ2Fub25pY2FsTmFtZSBuYW1lKSB7CiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgJ0V4cGVjdGVkIGEgY2Fub25pY2FsIG5hbWUgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJyk7CiAgICB9IGVsc2UgewogICAgICBjaGVja0Nhbm9uaWNhbE5hbWUobmFtZSk7CiAgICAgIHdyaXRlVUludDMwKG5hbWUuaW5kZXggKyAxKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVMaWJyYXJ5UmVmZXJlbmNlKExpYnJhcnkgbm9kZSwge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChub2RlLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCAmJiAhYWxsb3dOdWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgJ0V4cGVjdGVkIGEgbGlicmFyeSByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJyk7CiAgICB9CiAgICB3cml0ZU51bGxBbGxvd2VkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShub2RlLmNhbm9uaWNhbE5hbWUpOwogIH0KCiAgd3JpdGVPZmZzZXQoaW50IG9mZnNldCkgewogICAgLy8gVE9ETyhqZW5zaik6IERlbHRhLWVuY29kaW5nLgogICAgLy8gRmlsZSBvZmZzZXQgcmFuZ2VzIGZyb20gLTEgYW5kIHVwLAogICAgLy8gYnV0IGlzIGhlcmUgc2F2ZWQgYXMgdW5zaWduZWQgKHRodXMgdGhlICsxKQogICAgaWYgKCFpbmNsdWRlT2Zmc2V0cykgewogICAgICB3cml0ZVVJbnQzMCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlVUludDMwKG9mZnNldCArIDEpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNsYXNzUmVmZXJlbmNlKENsYXNzIGNsYXNzXykgewogICAgaWYgKGNsYXNzXyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgJ0V4cGVjdGVkIGEgY2xhc3MgcmVmZXJlbmNlIHRvIGJlIHZhbGlkIGJ1dCB3YXMgYG51bGxgLicpOwogICAgfQogICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShnZXRDYW5vbmljYWxOYW1lT2ZDbGFzcyhjbGFzc18pKTsKICB9CgogIHZvaWQgd3JpdGVOYW1lKE5hbWUgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lKTsKICAgIC8vIFRPRE86IENvbnNpZGVyIGEgbW9yZSBjb21wcmVzc2VkIGZvcm1hdCBmb3IgcHJpdmF0ZSBuYW1lcyB3aXRoaW4gdGhlCiAgICAvLyBlbmNsb3NpbmcgbGlicmFyeS4KICAgIGlmIChub2RlLmlzUHJpdmF0ZSkgewogICAgICB3cml0ZUxpYnJhcnlSZWZlcmVuY2Uobm9kZS5saWJyYXJ5KTsKICAgIH0KICB9CgogIGJvb2wgaW5zaWRlRXh0ZXJuYWxMaWJyYXJ5ID0gZmFsc2U7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaWJyYXJ5KExpYnJhcnkgbm9kZSkgewogICAgaW5zaWRlRXh0ZXJuYWxMaWJyYXJ5ID0gbm9kZS5pc0V4dGVybmFsOwogICAgbGlicmFyeU9mZnNldHMuYWRkKGdldEJ1ZmZlck9mZnNldCgpKTsKICAgIHdyaXRlQnl0ZShub2RlLmZsYWdzKTsKCiAgICB3cml0ZVVJbnQzMChub2RlLmxhbmd1YWdlVmVyc2lvbk1ham9yKTsKICAgIHdyaXRlVUludDMwKG5vZGUubGFuZ3VhZ2VWZXJzaW9uTWlub3IpOwoKICAgIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoZ2V0Q2Fub25pY2FsTmFtZU9mTGlicmFyeShub2RlKSk7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLm5hbWUgPz8gJycpOwogICAgd3JpdGVVcmlSZWZlcmVuY2Uobm9kZS5maWxlVXJpKTsKICAgIHdyaXRlTGlzdE9mU3RyaW5ncyhub2RlLnByb2JsZW1zQXNKc29uKTsKICAgIGVudGVyU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlTGlicmFyeURlcGVuZGVuY2llcyhub2RlKTsKICAgIHdyaXRlQWRkaXRpb25hbEV4cG9ydHMobm9kZS5hZGRpdGlvbmFsRXhwb3J0cyk7CiAgICB3cml0ZUxpYnJhcnlQYXJ0cyhub2RlKTsKICAgIGxlYXZlU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwoKICAgIHdyaXRlVHlwZWRlZk5vZGVMaXN0KG5vZGUudHlwZWRlZnMpOwogICAgY2xhc3NPZmZzZXRzID0gbmV3IExpc3Q8aW50PigpOwogICAgd3JpdGVDbGFzc05vZGVMaXN0KG5vZGUuY2xhc3Nlcyk7CiAgICBjbGFzc09mZnNldHMuYWRkKGdldEJ1ZmZlck9mZnNldCgpKTsKICAgIHdyaXRlRmllbGROb2RlTGlzdChub2RlLmZpZWxkcyk7CiAgICBwcm9jZWR1cmVPZmZzZXRzID0gbmV3IExpc3Q8aW50PigpOwogICAgd3JpdGVQcm9jZWR1cmVOb2RlTGlzdChub2RlLnByb2NlZHVyZXMpOwogICAgcHJvY2VkdXJlT2Zmc2V0cy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwoKICAgIC8vIER1bXAgYWxsIHNvdXJjZS1yZWZlcmVuY2VzIHVzZWQgaW4gdGhpcyBsaWJyYXJ5OyB1c2VkIGJ5IHRoZSBWTS4KICAgIGludCBzb3VyY2VSZWZlcmVuY2VzT2Zmc2V0ID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CiAgICBpbnQgc291cmNlUmVmZXJlbmNlc0NvdW50ID0gMDsKICAgIC8vIE5vdGU6IFdlIHN0YXJ0IGF0IDEgYmVjYXVzZSAwIGlzIHRoZSBudWxsLWVudHJ5IGFuZCB3ZSBkb24ndCB3YW50IHRvCiAgICAvLyBpbmNsdWRlIHRoYXQuCiAgICBmb3IgKGludCBpID0gMTsgaSA8IF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeS5sZW5ndGg7IGkrKykgewogICAgICBpZiAoX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uSW5MaWJyYXJ5W2ldID09IHRydWUpIHsKICAgICAgICBzb3VyY2VSZWZlcmVuY2VzQ291bnQrKzsKICAgICAgfQogICAgfQogICAgd3JpdGVVSW50MzAoc291cmNlUmVmZXJlbmNlc0NvdW50KTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uSW5MaWJyYXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25JbkxpYnJhcnlbaV0gPT0gdHJ1ZSkgewogICAgICAgIHdyaXRlVUludDMwKGkpOwogICAgICAgIF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeVtpXSA9IGZhbHNlOwogICAgICB9CiAgICB9CgogICAgLy8gRml4ZWQtc2l6ZSBpbnRzIGF0IHRoZSBlbmQgdXNlZCBhcyBhbiBpbmRleC4KICAgIHdyaXRlVUludDMyKHNvdXJjZVJlZmVyZW5jZXNPZmZzZXQpOwogICAgYXNzZXJ0KGNsYXNzT2Zmc2V0cy5sZW5ndGggPiAwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3NPZmZzZXRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGludCBvZmZzZXQgPSBjbGFzc09mZnNldHNbaV07CiAgICAgIHdyaXRlVUludDMyKG9mZnNldCk7CiAgICB9CiAgICB3cml0ZVVJbnQzMihjbGFzc09mZnNldHMubGVuZ3RoIC0gMSk7CgogICAgYXNzZXJ0KHByb2NlZHVyZU9mZnNldHMubGVuZ3RoID4gMCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2NlZHVyZU9mZnNldHMubGVuZ3RoOyArK2kpIHsKICAgICAgaW50IG9mZnNldCA9IHByb2NlZHVyZU9mZnNldHNbaV07CiAgICAgIHdyaXRlVUludDMyKG9mZnNldCk7CiAgICB9CiAgICB3cml0ZVVJbnQzMihwcm9jZWR1cmVPZmZzZXRzLmxlbmd0aCAtIDEpOwogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlEZXBlbmRlbmNpZXMoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBfbGlicmFyeURlcGVuZGVuY3lJbmRleCA9IGxpYnJhcnkuZGVwZW5kZW5jaWVzLmlzRW1wdHkKICAgICAgICA/IGNvbnN0IDxMaWJyYXJ5RGVwZW5kZW5jeSwgaW50Pnt9CiAgICAgICAgOiA8TGlicmFyeURlcGVuZGVuY3ksIGludD57fTsKICAgIHdyaXRlVUludDMwKGxpYnJhcnkuZGVwZW5kZW5jaWVzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpYnJhcnkuZGVwZW5kZW5jaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgIExpYnJhcnlEZXBlbmRlbmN5IGltcG9ydE5vZGUgPSBsaWJyYXJ5LmRlcGVuZGVuY2llc1tpXTsKICAgICAgX2xpYnJhcnlEZXBlbmRlbmN5SW5kZXhbaW1wb3J0Tm9kZV0gPSBpOwogICAgICB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5KGltcG9ydE5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUFkZGl0aW9uYWxFeHBvcnRzKExpc3Q8UmVmZXJlbmNlPiBhZGRpdGlvbmFsRXhwb3J0cykgewogICAgd3JpdGVVSW50MzAoYWRkaXRpb25hbEV4cG9ydHMubGVuZ3RoKTsKICAgIGZvciAoUmVmZXJlbmNlIHJlZiBpbiBhZGRpdGlvbmFsRXhwb3J0cykgewogICAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2UocmVmKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeShMaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlTGlicmFyeVJlZmVyZW5jZShub2RlLnRhcmdldExpYnJhcnksIGFsbG93TnVsbDogdHJ1ZSk7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLm5hbWUgPz8gJycpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmNvbWJpbmF0b3JzKTsKICB9CgogIHZvaWQgdmlzaXRDb21iaW5hdG9yKENvbWJpbmF0b3Igbm9kZSkgewogICAgd3JpdGVCeXRlKG5vZGUuaXNTaG93ID8gMSA6IDApOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2VMaXN0KG5vZGUubmFtZXMpOwogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlQYXJ0cyhMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHdyaXRlVUludDMwKGxpYnJhcnkucGFydHMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlicmFyeS5wYXJ0cy5sZW5ndGg7ICsraSkgewogICAgICBMaWJyYXJ5UGFydCBwYXJ0Tm9kZSA9IGxpYnJhcnkucGFydHNbaV07CiAgICAgIHdyaXRlTGlicmFyeVBhcnQocGFydE5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlQYXJ0KExpYnJhcnlQYXJ0IG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLnBhcnRVcmkpOwogIH0KCiAgdm9pZCB2aXNpdFR5cGVkZWYoVHlwZWRlZiBub2RlKSB7CiAgICBlbnRlclNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICAgIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoZ2V0Q2Fub25pY2FsTmFtZU9mVHlwZWRlZihub2RlKSk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwoKICAgIGVudGVyU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMsIHZhcmlhYmxlU2NvcGU6IHRydWUpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGUpOwoKICAgIGVudGVyU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZSk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZSk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChub2RlLm5hbWVkUGFyYW1ldGVycyk7CgogICAgbGVhdmVTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlKTsKICAgIGxlYXZlU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMsIHZhcmlhYmxlU2NvcGU6IHRydWUpOwogICAgbGVhdmVTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CiAgfQoKICB2b2lkIHdyaXRlQW5ub3RhdGlvbihFeHByZXNzaW9uIGFubm90YXRpb24pIHsKICAgIHdyaXRlTm9kZShhbm5vdGF0aW9uKTsKICB9CgogIHZvaWQgd3JpdGVBbm5vdGF0aW9uTGlzdChMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zKSB7CiAgICBmaW5hbCBsZW4gPSBhbm5vdGF0aW9ucy5sZW5ndGg7CiAgICB3cml0ZVVJbnQzMChsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmaW5hbCBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaV07CiAgICAgIHdyaXRlQW5ub3RhdGlvbihhbm5vdGF0aW9uKTsKICAgIH0KICB9CgogIGludCBfZW5jb2RlQ2xhc3NGbGFncyhpbnQgZmxhZ3MsIENsYXNzTGV2ZWwgbGV2ZWwpIHsKICAgIGFzc2VydCgoZmxhZ3MgJiBDbGFzcy5MZXZlbE1hc2spID09IDApOwogICAgZmluYWwgbGV2ZWxJbmRleCA9IGxldmVsLmluZGV4IC0gMTsKICAgIGFzc2VydCgobGV2ZWxJbmRleCAmIENsYXNzLkxldmVsTWFzaykgPT0gbGV2ZWxJbmRleCk7CiAgICByZXR1cm4gZmxhZ3MgfCBsZXZlbEluZGV4OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENsYXNzKENsYXNzIG5vZGUpIHsKICAgIGNsYXNzT2Zmc2V0cy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwoKICAgIGlmIChub2RlLmlzQW5vbnltb3VzTWl4aW4pIF9jdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uID0gdHJ1ZTsKCiAgICBpbnQgZmxhZ3MgPSBfZW5jb2RlQ2xhc3NGbGFncyhub2RlLmZsYWdzLCBub2RlLmxldmVsKTsKICAgIGlmIChub2RlLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3IgJG5vZGUnKTsKICAgIH0KICAgIHdyaXRlQnl0ZShUYWcuQ2xhc3MpOwogICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShnZXRDYW5vbmljYWxOYW1lT2ZDbGFzcyhub2RlKSk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVPZmZzZXQobm9kZS5zdGFydEZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCk7CgogICAgd3JpdGVCeXRlKGZsYWdzKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSA/PyAnJyk7CgogICAgZW50ZXJTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgbGVhdmVTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CiAgICBlbnRlclNjb3BlKHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLnN1cGVydHlwZSk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLm1peGVkSW5UeXBlKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5pbXBsZW1lbnRlZFR5cGVzKTsKICAgIHdyaXRlRmllbGROb2RlTGlzdChub2RlLmZpZWxkcyk7CiAgICB3cml0ZUNvbnN0cnVjdG9yTm9kZUxpc3Qobm9kZS5jb25zdHJ1Y3RvcnMpOwogICAgcHJvY2VkdXJlT2Zmc2V0cyA9IDxpbnQ+W107CiAgICB3cml0ZVByb2NlZHVyZU5vZGVMaXN0KG5vZGUucHJvY2VkdXJlcyk7CiAgICBwcm9jZWR1cmVPZmZzZXRzLmFkZChnZXRCdWZmZXJPZmZzZXQoKSk7CiAgICB3cml0ZVJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yTm9kZUxpc3QoCiAgICAgICAgbm9kZS5yZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMpOwogICAgbGVhdmVTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycyk7CgogICAgYXNzZXJ0KHByb2NlZHVyZU9mZnNldHMubGVuZ3RoID4gMCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2NlZHVyZU9mZnNldHMubGVuZ3RoOyArK2kpIHsKICAgICAgaW50IG9mZnNldCA9IHByb2NlZHVyZU9mZnNldHNbaV07CiAgICAgIHdyaXRlVUludDMyKG9mZnNldCk7CiAgICB9CiAgICB3cml0ZVVJbnQzMihwcm9jZWR1cmVPZmZzZXRzLmxlbmd0aCAtIDEpOwogICAgX2N1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb24gPSBmYWxzZTsKICB9CgogIHN0YXRpYyBmaW5hbCBOYW1lIF9lbXB0eU5hbWUgPSBuZXcgTmFtZSgnJyk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBub2RlKSB7CiAgICBpZiAobm9kZS5jYW5vbmljYWxOYW1lID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ01pc3NpbmcgY2Fub25pY2FsIG5hbWUgZm9yICRub2RlJyk7CiAgICB9CiAgICBlbnRlclNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICAgIHdyaXRlQnl0ZShUYWcuQ29uc3RydWN0b3IpOwogICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShnZXRDYW5vbmljYWxOYW1lT2ZNZW1iZXIobm9kZSkpOwogICAgd3JpdGVVcmlSZWZlcmVuY2Uobm9kZS5maWxlVXJpKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuc3RhcnRGaWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVFbmRPZmZzZXQpOwoKICAgIHdyaXRlQnl0ZShub2RlLmZsYWdzKTsKICAgIHdyaXRlTmFtZShub2RlLm5hbWUgPz8gX2VtcHR5TmFtZSk7CgogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIGFzc2VydChub2RlLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpOwogICAgd3JpdGVGdW5jdGlvbk5vZGUobm9kZS5mdW5jdGlvbik7CiAgICAvLyBQYXJhbWV0ZXJzIGFyZSBpbiBzY29wZSBpbiB0aGUgaW5pdGlhbGl6ZXJzLgogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5yZXN0b3JlU2NvcGUobm9kZS5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggKwogICAgICAgIG5vZGUuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuaW5pdGlhbGl6ZXJzKTsKCiAgICBsZWF2ZVNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcm9jZWR1cmUoUHJvY2VkdXJlIG5vZGUpIHsKICAgIHByb2NlZHVyZU9mZnNldHMuYWRkKGdldEJ1ZmZlck9mZnNldCgpKTsKCiAgICBpZiAobm9kZS5jYW5vbmljYWxOYW1lID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ01pc3NpbmcgY2Fub25pY2FsIG5hbWUgZm9yICRub2RlJyk7CiAgICB9CgogICAgZmluYWwgYm9vbCBjdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uU2F2ZWQgPQogICAgICAgIF9jdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uOwogICAgaWYgKG5vZGUuaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXIgfHwgbm9kZS5pc1N5bnRoZXRpY0ZvcndhcmRlcikgewogICAgICBfY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvbiA9IHRydWU7CiAgICB9CgogICAgZW50ZXJTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CiAgICB3cml0ZUJ5dGUoVGFnLlByb2NlZHVyZSk7CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZk1lbWJlcihub2RlKSk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVPZmZzZXQobm9kZS5zdGFydEZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCk7CiAgICB3cml0ZUJ5dGUobm9kZS5raW5kLmluZGV4KTsKICAgIHdyaXRlVUludDMwKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSA/PyBfZW1wdHlOYW1lKTsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVPcHRpb25hbEZ1bmN0aW9uTm9kZShub2RlLmZ1bmN0aW9uKTsKICAgIGxlYXZlU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwoKICAgIF9jdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uID0gY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvblNhdmVkOwogICAgYXNzZXJ0KChub2RlLmZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQgIT0gbnVsbCkgfHwKICAgICAgICAhKG5vZGUuaXNGb3J3YXJkaW5nU3R1YiAmJiBub2RlLmZ1bmN0aW9uLmJvZHkgIT0gbnVsbCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZpZWxkKEZpZWxkIG5vZGUpIHsKICAgIGlmIChub2RlLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3IgJG5vZGUnKTsKICAgIH0KICAgIGVudGVyU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogICAgd3JpdGVCeXRlKFRhZy5GaWVsZCk7CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZk1lbWJlcihub2RlKSk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCk7CiAgICB3cml0ZVVJbnQzMChub2RlLmZsYWdzKTsKICAgIHdyaXRlTmFtZShub2RlLm5hbWUpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGUpOwogICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS5pbml0aWFsaXplcik7CiAgICBsZWF2ZVNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcihSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciBub2RlKSB7CiAgICBpZiAobm9kZS5jYW5vbmljYWxOYW1lID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ01pc3NpbmcgY2Fub25pY2FsIG5hbWUgZm9yICRub2RlJyk7CiAgICB9CiAgICB3cml0ZUJ5dGUoVGFnLlJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKTsKICAgIGVudGVyU2NvcGUoCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgbWVtYmVyU2NvcGU6IHRydWUsCiAgICAgICAgdmFyaWFibGVTY29wZTogdHJ1ZSk7CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZk1lbWJlcihub2RlKSk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCk7CiAgICB3cml0ZUJ5dGUobm9kZS5mbGFncyk7CiAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKCiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICB3cml0ZVVJbnQzMChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCArIG5vZGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICB3cml0ZVVJbnQzMChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qobm9kZS5uYW1lZFBhcmFtZXRlcnMpOwoKICAgIGxlYXZlU2NvcGUoCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgbWVtYmVyU2NvcGU6IHRydWUsCiAgICAgICAgdmFyaWFibGVTY29wZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52YWxpZEluaXRpYWxpemVyKEludmFsaWRJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkludmFsaWRJbml0aWFsaXplcik7CiAgICB3cml0ZUJ5dGUobm9kZS5pc1N5bnRoZXRpYyA/IDEgOiAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGaWVsZEluaXRpYWxpemVyKEZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5GaWVsZEluaXRpYWxpemVyKTsKICAgIHdyaXRlQnl0ZShub2RlLmlzU3ludGhldGljID8gMSA6IDApOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUuZmllbGRSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN1cGVySW5pdGlhbGl6ZXIoU3VwZXJJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlN1cGVySW5pdGlhbGl6ZXIpOwogICAgd3JpdGVCeXRlKG5vZGUuaXNTeW50aGV0aWMgPyAxIDogMCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlQXJndW1lbnRzTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UmVkaXJlY3RpbmdJbml0aWFsaXplcihSZWRpcmVjdGluZ0luaXRpYWxpemVyIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuUmVkaXJlY3RpbmdJbml0aWFsaXplcik7CiAgICB3cml0ZUJ5dGUobm9kZS5pc1N5bnRoZXRpYyA/IDEgOiAwKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVBcmd1bWVudHNOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMb2NhbEluaXRpYWxpemVyKExvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Mb2NhbEluaXRpYWxpemVyKTsKICAgIHdyaXRlQnl0ZShub2RlLmlzU3ludGhldGljID8gMSA6IDApOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUudmFyaWFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzc2VydEluaXRpYWxpemVyKEFzc2VydEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQXNzZXJ0SW5pdGlhbGl6ZXIpOwogICAgd3JpdGVCeXRlKG5vZGUuaXNTeW50aGV0aWMgPyAxIDogMCk7CiAgICB3cml0ZU5vZGUobm9kZS5zdGF0ZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uTm9kZShGdW5jdGlvbk5vZGUgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5GdW5jdGlvbk5vZGUpOwogICAgZW50ZXJTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywgdmFyaWFibGVTY29wZTogdHJ1ZSk7CiAgICBMYWJlbEluZGV4ZXIgb2xkTGFiZWxzID0gX2xhYmVsSW5kZXhlcjsKICAgIF9sYWJlbEluZGV4ZXIgPSBudWxsOwogICAgU3dpdGNoQ2FzZUluZGV4ZXIgb2xkQ2FzZXMgPSBfc3dpdGNoQ2FzZUluZGV4ZXI7CiAgICBfc3dpdGNoQ2FzZUluZGV4ZXIgPSBudWxsOwogICAgLy8gTm90ZTogRnVuY3Rpb25Ob2RlIGhhcyBubyB0YWcuCiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKICAgIHdyaXRlQnl0ZShub2RlLmFzeW5jTWFya2VyLmluZGV4KTsKICAgIHdyaXRlQnl0ZShub2RlLmRhcnRBc3luY01hcmtlci5pbmRleCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVVSW50MzAobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggKyBub2RlLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpOwogICAgd3JpdGVVSW50MzAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycyk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzKTsKICAgIHdyaXRlTm9kZShub2RlLnJldHVyblR5cGUpOwogICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS5ib2R5KTsKICAgIF9sYWJlbEluZGV4ZXIgPSBvbGRMYWJlbHM7CiAgICBfc3dpdGNoQ2FzZUluZGV4ZXIgPSBvbGRDYXNlczsKICAgIGxlYXZlU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMsIHZhcmlhYmxlU2NvcGU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuSW52YWxpZEV4cHJlc3Npb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubWVzc2FnZSA/PyAnJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVHZXQoVmFyaWFibGVHZXQgbm9kZSkgewogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgaW50IGluZGV4ID0gX3ZhcmlhYmxlSW5kZXhlcltub2RlLnZhcmlhYmxlXTsKICAgIGFzc2VydChpbmRleCAhPSBudWxsKTsKICAgIGlmIChpbmRleCAmIFRhZy5TcGVjaWFsaXplZFBheWxvYWRNYXNrID09IGluZGV4ICYmCiAgICAgICAgbm9kZS5wcm9tb3RlZFR5cGUgPT0gbnVsbCkgewogICAgICB3cml0ZUJ5dGUoVGFnLlNwZWNpYWxpemVkVmFyaWFibGVHZXQgKyBpbmRleCk7CiAgICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICAgIHdyaXRlVUludDMwKG5vZGUudmFyaWFibGUuYmluYXJ5T2Zmc2V0Tm9UYWcpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCeXRlKFRhZy5WYXJpYWJsZUdldCk7CiAgICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICAgIHdyaXRlVUludDMwKG5vZGUudmFyaWFibGUuYmluYXJ5T2Zmc2V0Tm9UYWcpOwogICAgICB3cml0ZVVJbnQzMChpbmRleCk7CiAgICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUucHJvbW90ZWRUeXBlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZVNldChWYXJpYWJsZVNldCBub2RlKSB7CiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBpbnQgaW5kZXggPSBfdmFyaWFibGVJbmRleGVyW25vZGUudmFyaWFibGVdOwogICAgYXNzZXJ0KGluZGV4ICE9IG51bGwpOwogICAgaWYgKGluZGV4ICYgVGFnLlNwZWNpYWxpemVkUGF5bG9hZE1hc2sgPT0gaW5kZXgpIHsKICAgICAgd3JpdGVCeXRlKFRhZy5TcGVjaWFsaXplZFZhcmlhYmxlU2V0ICsgaW5kZXgpOwogICAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgICB3cml0ZVVJbnQzMChub2RlLnZhcmlhYmxlLmJpbmFyeU9mZnNldE5vVGFnKTsKICAgICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCeXRlKFRhZy5WYXJpYWJsZVNldCk7CiAgICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICAgIHdyaXRlVUludDMwKG5vZGUudmFyaWFibGUuYmluYXJ5T2Zmc2V0Tm9UYWcpOwogICAgICB3cml0ZVVJbnQzMChpbmRleCk7CiAgICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlByb3BlcnR5R2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5yZWNlaXZlcik7CiAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2Uobm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb3BlcnR5U2V0KFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuUHJvcGVydHlTZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHdyaXRlTmFtZShub2RlLm5hbWUpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogICAgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU3VwZXJQcm9wZXJ0eUdldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdXBlclByb3BlcnR5U2V0KFN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TdXBlclByb3BlcnR5U2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2Uobm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERpcmVjdFByb3BlcnR5R2V0KERpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRGlyZWN0UHJvcGVydHlHZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5EaXJlY3RQcm9wZXJ0eVNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU3RhdGljR2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY1NldChTdGF0aWNTZXQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TdGF0aWNTZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWV0aG9kSW52b2NhdGlvbihNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuTWV0aG9kSW52b2NhdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSk7CiAgICB3cml0ZUFyZ3VtZW50c05vZGUobm9kZS5hcmd1bWVudHMpOwogICAgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKFN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlN1cGVyTWV0aG9kSW52b2NhdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSk7CiAgICB3cml0ZUFyZ3VtZW50c05vZGUobm9kZS5hcmd1bWVudHMpOwogICAgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihEaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRGlyZWN0TWV0aG9kSW52b2NhdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlQXJndW1lbnRzTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShub2RlLmlzQ29uc3QgPyBUYWcuQ29uc3RTdGF0aWNJbnZvY2F0aW9uIDogVGFnLlN0YXRpY0ludm9jYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZUFyZ3VtZW50c05vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKG5vZGUuaXNDb25zdAogICAgICAgID8gVGFnLkNvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uCiAgICAgICAgOiBUYWcuQ29uc3RydWN0b3JJbnZvY2F0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVBcmd1bWVudHNOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBcmd1bWVudHMoQXJndW1lbnRzIG5vZGUpIHsKICAgIHdyaXRlVUludDMwKG5vZGUucG9zaXRpb25hbC5sZW5ndGggKyBub2RlLm5hbWVkLmxlbmd0aCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZXMpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnBvc2l0aW9uYWwpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLm5hbWVkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROYW1lZEV4cHJlc3Npb24oTmFtZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Tm90KE5vdCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLk5vdCk7CiAgICB3cml0ZU5vZGUobm9kZS5vcGVyYW5kKTsKICB9CgogIGludCBsb2dpY2FsT3BlcmF0b3JJbmRleChTdHJpbmcgb3BlcmF0b3IpIHsKICAgIHN3aXRjaCAob3BlcmF0b3IpIHsKICAgICAgY2FzZSAnJiYnOgogICAgICAgIHJldHVybiAwOwogICAgICBjYXNlICd8fCc6CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTm90IGEgbG9naWNhbCBvcGVyYXRvcjogJG9wZXJhdG9yJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oTG9naWNhbEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Mb2dpY2FsRXhwcmVzc2lvbik7CiAgICB3cml0ZU5vZGUobm9kZS5sZWZ0KTsKICAgIHdyaXRlQnl0ZShsb2dpY2FsT3BlcmF0b3JJbmRleChub2RlLm9wZXJhdG9yKSk7CiAgICB3cml0ZU5vZGUobm9kZS5yaWdodCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKENvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkNvbmRpdGlvbmFsRXhwcmVzc2lvbik7CiAgICB3cml0ZU5vZGUobm9kZS5jb25kaXRpb24pOwogICAgd3JpdGVOb2RlKG5vZGUudGhlbik7CiAgICB3cml0ZU5vZGUobm9kZS5vdGhlcndpc2UpOwogICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS5zdGF0aWNUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TdHJpbmdDb25jYXRlbmF0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RDb25jYXRlbmF0aW9uKExpc3RDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuTGlzdENvbmNhdGVuYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUubGlzdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldENvbmNhdGVuYXRpb24oU2V0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlNldENvbmNhdGVuYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuc2V0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwQ29uY2F0ZW5hdGlvbihNYXBDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuTWFwQ29uY2F0ZW5hdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUua2V5VHlwZSk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZVR5cGUpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLm1hcHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbmNlQ3JlYXRpb24oSW5zdGFuY2VDcmVhdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkluc3RhbmNlQ3JlYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLmNsYXNzUmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzKTsKICAgIHdyaXRlVUludDMwKG5vZGUuZmllbGRWYWx1ZXMubGVuZ3RoKTsKICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoUmVmZXJlbmNlIGZpZWxkUmVmLCBFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShmaWVsZFJlZik7CiAgICAgIHdyaXRlTm9kZSh2YWx1ZSk7CiAgICB9KTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5hc3NlcnRzKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS51bnVzZWRBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElzRXhwcmVzc2lvbihJc0V4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Jc0V4cHJlc3Npb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLm9wZXJhbmQpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNFeHByZXNzaW9uKEFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkFzRXhwcmVzc2lvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVOb2RlKG5vZGUub3BlcmFuZCk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdMaXRlcmFsKFN0cmluZ0xpdGVyYWwgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TdHJpbmdMaXRlcmFsKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludExpdGVyYWwoSW50TGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUludGVnZXIobm9kZS52YWx1ZSk7CiAgfQoKICB3cml0ZUludGVnZXIoaW50IHZhbHVlKSB7CiAgICBpbnQgYmlhc2VkVmFsdWUgPSB2YWx1ZSArIFRhZy5TcGVjaWFsaXplZEludExpdGVyYWxCaWFzOwogICAgaWYgKGJpYXNlZFZhbHVlID49IDAgJiYKICAgICAgICBiaWFzZWRWYWx1ZSAmIFRhZy5TcGVjaWFsaXplZFBheWxvYWRNYXNrID09IGJpYXNlZFZhbHVlKSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuU3BlY2lhbGl6ZWRJbnRMaXRlcmFsICsgYmlhc2VkVmFsdWUpOwogICAgfSBlbHNlIGlmICh2YWx1ZS5hYnMoKSA+PiAzMCA9PSAwKSB7CiAgICAgIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICB3cml0ZUJ5dGUoVGFnLk5lZ2F0aXZlSW50TGl0ZXJhbCk7CiAgICAgICAgd3JpdGVVSW50MzAoLXZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cml0ZUJ5dGUoVGFnLlBvc2l0aXZlSW50TGl0ZXJhbCk7CiAgICAgICAgd3JpdGVVSW50MzAodmFsdWUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPOiBQaWNrIGEgYmV0dGVyIGZvcm1hdCBmb3IgYmlnIGludCBsaXRlcmFscy4KICAgICAgd3JpdGVCeXRlKFRhZy5CaWdJbnRMaXRlcmFsKTsKICAgICAgd3JpdGVTdHJpbmdSZWZlcmVuY2UoJyR2YWx1ZScpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkRvdWJsZUxpdGVyYWwpOwogICAgd3JpdGVEb3VibGUobm9kZS52YWx1ZSk7CiAgfQoKICB3cml0ZURvdWJsZShkb3VibGUgdmFsdWUpIHsKICAgIF9zaW5rLmFkZERvdWJsZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVCeXRlKG5vZGUudmFsdWUgPyBUYWcuVHJ1ZUxpdGVyYWwgOiBUYWcuRmFsc2VMaXRlcmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLk51bGxMaXRlcmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TeW1ib2xMaXRlcmFsKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVMaXRlcmFsKFR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuVHlwZUxpdGVyYWwpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhpc0V4cHJlc3Npb24oVGhpc0V4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5UaGlzRXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UmV0aHJvdyhSZXRocm93IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuUmV0aHJvdyk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRocm93KFRocm93IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuVGhyb3cpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLmV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RMaXRlcmFsKExpc3RMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShub2RlLmlzQ29uc3QgPyBUYWcuQ29uc3RMaXN0TGl0ZXJhbCA6IFRhZy5MaXN0TGl0ZXJhbCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZUFyZ3VtZW50KTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5leHByZXNzaW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0TGl0ZXJhbChTZXRMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShub2RlLmlzQ29uc3QgPyBUYWcuQ29uc3RTZXRMaXRlcmFsIDogVGFnLlNldExpdGVyYWwpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS5pc0NvbnN0ID8gVGFnLkNvbnN0TWFwTGl0ZXJhbCA6IFRhZy5NYXBMaXRlcmFsKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5rZXlUeXBlKTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlVHlwZSk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuZW50cmllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwRW50cnkoTWFwRW50cnkgbm9kZSkgewogICAgLy8gTm90ZTogdGhlcmUgaXMgbm8gdGFnIG9uIE1hcEVudHJ5CiAgICB3cml0ZU5vZGUobm9kZS5rZXkpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEF3YWl0RXhwcmVzc2lvbihBd2FpdEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Bd2FpdEV4cHJlc3Npb24pOwogICAgd3JpdGVOb2RlKG5vZGUub3BlcmFuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkZ1bmN0aW9uRXhwcmVzc2lvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVGdW5jdGlvbk5vZGUobm9kZS5mdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGV0KExldCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkxldCk7CiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLnB1c2hTY29wZSgpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUudmFyaWFibGUpOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgICBfdmFyaWFibGVJbmRleGVyLnBvcFNjb3BlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmxvY2tFeHByZXNzaW9uKEJsb2NrRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkJsb2NrRXhwcmVzc2lvbik7CiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLnB1c2hTY29wZSgpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmJvZHkuc3RhdGVtZW50cyk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgICBfdmFyaWFibGVJbmRleGVyLnBvcFNjb3BlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuSW5zdGFudGlhdGlvbik7CiAgICB3cml0ZU5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMb2FkTGlicmFyeShMb2FkTGlicmFyeSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkxvYWRMaWJyYXJ5KTsKICAgIHdyaXRlTGlicmFyeURlcGVuZGVuY3lSZWZlcmVuY2Uobm9kZS5pbXBvcnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKENoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQ2hlY2tMaWJyYXJ5SXNMb2FkZWQpOwogICAgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeVJlZmVyZW5jZShub2RlLmltcG9ydCk7CiAgfQoKICB3cml0ZVN0YXRlbWVudE9yRW1wdHkoU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgd3JpdGVCeXRlKFRhZy5FbXB0eVN0YXRlbWVudCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZU5vZGUobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRXhwcmVzc2lvblN0YXRlbWVudCk7CiAgICB3cml0ZU5vZGUobm9kZS5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCbG9jayhCbG9jayBub2RlKSB7CiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLnB1c2hTY29wZSgpOwogICAgd3JpdGVCeXRlKFRhZy5CbG9jayk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuc3RhdGVtZW50cyk7CiAgICBfdmFyaWFibGVJbmRleGVyLnBvcFNjb3BlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNzZXJ0QmxvY2soQXNzZXJ0QmxvY2sgbm9kZSkgewogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wdXNoU2NvcGUoKTsKICAgIHdyaXRlQnl0ZShUYWcuQXNzZXJ0QmxvY2spOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnN0YXRlbWVudHMpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wb3BTY29wZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRW1wdHlTdGF0ZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Bc3NlcnRTdGF0ZW1lbnQpOwogICAgd3JpdGVOb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuY29uZGl0aW9uU3RhcnRPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5jb25kaXRpb25FbmRPZmZzZXQpOwogICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS5tZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKF9sYWJlbEluZGV4ZXIgPT0gbnVsbCkgewogICAgICBfbGFiZWxJbmRleGVyID0gbmV3IExhYmVsSW5kZXhlcigpOwogICAgfQogICAgX2xhYmVsSW5kZXhlci5lbnRlcihub2RlKTsKICAgIHdyaXRlQnl0ZShUYWcuTGFiZWxlZFN0YXRlbWVudCk7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIF9sYWJlbEluZGV4ZXIuZXhpdCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Db25zdGFudEV4cHJlc3Npb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlRGFydFR5cGUobm9kZS50eXBlKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZS5jb25zdGFudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QnJlYWtTdGF0ZW1lbnQoQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5CcmVha1N0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVVSW50MzAoX2xhYmVsSW5kZXhlcltub2RlLnRhcmdldF0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFdoaWxlU3RhdGVtZW50KFdoaWxlU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuV2hpbGVTdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLmNvbmRpdGlvbik7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb1N0YXRlbWVudChEb1N0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkRvU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIHdyaXRlTm9kZShub2RlLmNvbmRpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Rm9yU3RhdGVtZW50KEZvclN0YXRlbWVudCBub2RlKSB7CiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLnB1c2hTY29wZSgpOwogICAgd3JpdGVCeXRlKFRhZy5Gb3JTdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qobm9kZS52YXJpYWJsZXMpOwogICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS5jb25kaXRpb24pOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnVwZGF0ZXMpOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgICBfdmFyaWFibGVJbmRleGVyLnBvcFNjb3BlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wdXNoU2NvcGUoKTsKICAgIHdyaXRlQnl0ZShub2RlLmlzQXN5bmMgPyBUYWcuQXN5bmNGb3JJblN0YXRlbWVudCA6IFRhZy5Gb3JJblN0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5ib2R5T2Zmc2V0KTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLnZhcmlhYmxlKTsKICAgIHdyaXRlTm9kZShub2RlLml0ZXJhYmxlKTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wb3BTY29wZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaFN0YXRlbWVudChTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKF9zd2l0Y2hDYXNlSW5kZXhlciA9PSBudWxsKSB7CiAgICAgIF9zd2l0Y2hDYXNlSW5kZXhlciA9IG5ldyBTd2l0Y2hDYXNlSW5kZXhlcigpOwogICAgfQogICAgX3N3aXRjaENhc2VJbmRleGVyLmVudGVyKG5vZGUpOwogICAgd3JpdGVCeXRlKFRhZy5Td2l0Y2hTdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgd3JpdGVTd2l0Y2hDYXNlTm9kZUxpc3Qobm9kZS5jYXNlcyk7CiAgICBfc3dpdGNoQ2FzZUluZGV4ZXIuZXhpdChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTd2l0Y2hDYXNlKFN3aXRjaENhc2Ugbm9kZSkgewogICAgLy8gTm90ZTogdGhlcmUgaXMgbm8gdGFnIG9uIFN3aXRjaENhc2UuCiAgICBpbnQgbGVuZ3RoID0gbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7CiAgICB3cml0ZVVJbnQzMChsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICB3cml0ZU9mZnNldChub2RlLmV4cHJlc3Npb25PZmZzZXRzW2ldKTsKICAgICAgd3JpdGVOb2RlKG5vZGUuZXhwcmVzc2lvbnNbaV0pOwogICAgfQogICAgd3JpdGVCeXRlKG5vZGUuaXNEZWZhdWx0ID8gMSA6IDApOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQoQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Db250aW51ZVN3aXRjaFN0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVVSW50MzAoX3N3aXRjaENhc2VJbmRleGVyW25vZGUudGFyZ2V0XSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SWZTdGF0ZW1lbnQoSWZTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5JZlN0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgIHdyaXRlTm9kZShub2RlLnRoZW4pOwogICAgd3JpdGVTdGF0ZW1lbnRPckVtcHR5KG5vZGUub3RoZXJ3aXNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoUmV0dXJuU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuUmV0dXJuU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLmV4cHJlc3Npb24pOwogIH0KCiAgaW50IF9lbmNvZGVUcnlDYXRjaEZsYWdzKGJvb2wgbmVlZHNTdGFja1RyYWNlLCBib29sIGlzU3ludGhldGljKSB7CiAgICByZXR1cm4gKG5lZWRzU3RhY2tUcmFjZSA/IDEgOiAwKSB8IChpc1N5bnRoZXRpYyA/IDIgOiAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUcnlDYXRjaChUcnlDYXRjaCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlRyeUNhdGNoKTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogICAgYm9vbCBuZWVkc1N0YWNrVHJhY2UgPSBub2RlLmNhdGNoZXMuYW55KChDYXRjaCBjKSA9PiBjLnN0YWNrVHJhY2UgIT0gbnVsbCk7CiAgICB3cml0ZUJ5dGUoX2VuY29kZVRyeUNhdGNoRmxhZ3MobmVlZHNTdGFja1RyYWNlLCBub2RlLmlzU3ludGhldGljKSk7CiAgICB3cml0ZUNhdGNoTm9kZUxpc3Qobm9kZS5jYXRjaGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYXRjaChDYXRjaCBub2RlKSB7CiAgICAvLyBOb3RlOiB0aGVyZSBpcyBubyB0YWcgb24gQ2F0Y2guCiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLnB1c2hTY29wZSgpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLmd1YXJkKTsKICAgIHdyaXRlT3B0aW9uYWxWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUuZXhjZXB0aW9uKTsKICAgIHdyaXRlT3B0aW9uYWxWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUuc3RhY2tUcmFjZSk7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIF92YXJpYWJsZUluZGV4ZXIucG9wU2NvcGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUcnlGaW5hbGx5KFRyeUZpbmFsbHkgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5UcnlGaW5hbGx5KTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogICAgd3JpdGVOb2RlKG5vZGUuZmluYWxpemVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRZaWVsZFN0YXRlbWVudChZaWVsZFN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLllpZWxkU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZUJ5dGUobm9kZS5mbGFncyk7CiAgICB3cml0ZU5vZGUobm9kZS5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5WYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKTsKICB9CgogIHZvaWQgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5iaW5hcnlPZmZzZXROb1RhZyA9IGdldEJ1ZmZlck9mZnNldCgpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZUVxdWFsc09mZnNldCk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lID8/ICcnKTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGUpOwogICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS5pbml0aWFsaXplcik7CiAgICAvLyBEZWNsYXJlIHRoZSB2YXJpYWJsZSBhZnRlciBpdHMgaW5pdGlhbGl6ZXIuIEl0IGlzIG5vdCBpbiBzY29wZSBpbiBpdHMKICAgIC8vIG93biBpbml0aWFsaXplci4KICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIF92YXJpYWJsZUluZGV4ZXIuZGVjbGFyZShub2RlKTsKICB9CgogIHZvaWQgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG5vZGVzKSB7CiAgICB3cml0ZUxpc3Qobm9kZXMsIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgfQoKICB2b2lkIHdyaXRlT3B0aW9uYWxWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB3cml0ZUJ5dGUoVGFnLk5vdGhpbmcpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCeXRlKFRhZy5Tb21ldGhpbmcpOwogICAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUudmFyaWFibGUpOwogICAgd3JpdGVGdW5jdGlvbk5vZGUobm9kZS5mdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm90dG9tVHlwZShCb3R0b21UeXBlIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQm90dG9tVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5JbnZhbGlkVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5EeW5hbWljVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Wb2lkVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICB3cml0ZUJ5dGUoVGFnLlNpbXBsZUludGVyZmFjZVR5cGUpOwogICAgICB3cml0ZUJ5dGUobm9kZS5udWxsYWJpbGl0eS5pbmRleCk7CiAgICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLmNsYXNzTmFtZSk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUJ5dGUoVGFnLkludGVyZmFjZVR5cGUpOwogICAgICB3cml0ZUJ5dGUobm9kZS5udWxsYWJpbGl0eS5pbmRleCk7CiAgICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLmNsYXNzTmFtZSk7CiAgICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdXBlcnR5cGUoU3VwZXJ0eXBlIG5vZGUpIHsKICAgIC8vIFdyaXRpbmcgbnVsbGFiaWxpdHkgYmVsb3cgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZQogICAgLy8gQmluYXJ5QnVpbGRlci5yZWFkU3VwZXJ0eXBlIHJlYWRzIHRoZSBzdXBlcnR5cGUgYXMgYW4gSW50ZXJmYWNlVHlwZSBhbmQKICAgIC8vIGJyZWFrcyBpdCBpbnRvIGNvbXBvbmVudHMgYWZ0ZXJ3YXJkcywgYW5kIHJlYWRpbmcgYW4gSW50ZXJmYWNlVHlwZQogICAgLy8gcmVxdWlyZXMgdGhlIG51bGxhYmlsaXR5IGJ5dGUuCiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmlzRW1wdHkpIHsKICAgICAgd3JpdGVCeXRlKFRhZy5TaW1wbGVJbnRlcmZhY2VUeXBlKTsKICAgICAgd3JpdGVCeXRlKE51bGxhYmlsaXR5Lm5vbk51bGxhYmxlLmluZGV4KTsKICAgICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUuY2xhc3NOYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuSW50ZXJmYWNlVHlwZSk7CiAgICAgIHdyaXRlQnl0ZShOdWxsYWJpbGl0eS5ub25OdWxsYWJsZS5pbmRleCk7CiAgICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLmNsYXNzTmFtZSk7CiAgICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGlmIChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPT0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggJiYKICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkgJiYKICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5ICYmCiAgICAgICAgbm9kZS50eXBlZGVmVHlwZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuU2ltcGxlRnVuY3Rpb25UeXBlKTsKICAgICAgd3JpdGVCeXRlKG5vZGUubnVsbGFiaWxpdHkuaW5kZXgpOwogICAgICB3cml0ZU5vZGVMaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgICB3cml0ZU5vZGUobm9kZS5yZXR1cm5UeXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuRnVuY3Rpb25UeXBlKTsKICAgICAgd3JpdGVCeXRlKG5vZGUubnVsbGFiaWxpdHkuaW5kZXgpOwogICAgICBlbnRlclNjb3BlKHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgICAgd3JpdGVVSW50MzAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgICAgd3JpdGVVSW50MzAoCiAgICAgICAgICBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCArIG5vZGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycyk7CiAgICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5uYW1lZFBhcmFtZXRlcnMpOwogICAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLnR5cGVkZWZUeXBlKTsKICAgICAgd3JpdGVOb2RlKG5vZGUucmV0dXJuVHlwZSk7CiAgICAgIGxlYXZlU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWVkVHlwZShOYW1lZFR5cGUgbm9kZSkgewogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lKTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGUpOwogICAgaW50IGZsYWdzID0gKG5vZGUuaXNSZXF1aXJlZCA/IE5hbWVkVHlwZS5GbGFnUmVxdWlyZWROYW1lZFR5cGUgOiAwKTsKICAgIHdyaXRlQnl0ZShmbGFncyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5UeXBlUGFyYW1ldGVyVHlwZSk7CiAgICB3cml0ZUJ5dGUobm9kZS5kZWNsYXJlZE51bGxhYmlsaXR5LmluZGV4KTsKICAgIHdyaXRlVUludDMwKF90eXBlUGFyYW1ldGVySW5kZXhlcltub2RlLnBhcmFtZXRlcl0pOwogICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS5wcm9tb3RlZEJvdW5kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlR5cGVkZWZUeXBlKTsKICAgIHdyaXRlQnl0ZShub2RlLm51bGxhYmlsaXR5LmluZGV4KTsKICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2Uobm9kZS50eXBlZGVmUmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSA/PyAnJyk7CiAgICB3cml0ZU5vZGUobm9kZS5ib3VuZCk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLmRlZmF1bHRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFeHRlbnNpb24oRXh0ZW5zaW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgc2VyaWFsaXphdGlvbiBvZiBleHRlbnNpb24gbm9kZXMuCiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBleHRlbnNpb24gbm9kZXMnKTsKICB9CgogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBUaGVzZSBhcmUgbm9kZXMgdGhhdCBhcmUgbmV2ZXIgc2VyaWFsaXplZCBkaXJlY3RseS4gIFJlYWNoaW5nIG9uZQogIC8vIGR1cmluZyBzZXJpYWxpemF0aW9uIGlzIGFuIGVycm9yLgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdE5vZGUoTm9kZSBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIE5vZGVzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIENvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0QmFzaWNMaXRlcmFsKEJhc2ljTGl0ZXJhbCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIEJhc2ljTGl0ZXJhbHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBEYXJ0VHlwZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIEV4cHJlc3Npb25zJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRJbml0aWFsaXplcihJbml0aWFsaXplciBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIEluaXRpYWxpemVycycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0TWVtYmVyKE1lbWJlciBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIE1lbWJlcnMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdE1lbWJlclJlZmVyZW5jZShNZW1iZXIgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBNZW1iZXIgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0U3RhdGVtZW50KFN0YXRlbWVudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIFN0YXRlbWVudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdFRyZWVOb2RlKFRyZWVOb2RlIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgVHJlZU5vZGVzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbENvbnN0YW50KEJvb2xDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBCb29sQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbENvbnN0YW50UmVmZXJlbmNlKEJvb2xDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBCb29sQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENsYXNzUmVmZXJlbmNlKENsYXNzIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIENsYXNzIHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdHJ1Y3RvclJlZmVyZW5jZShDb25zdHJ1Y3RvciBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBDb25zdHJ1Y3RvciByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG91YmxlQ29uc3RhbnQoRG91YmxlQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgRG91YmxlQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG91YmxlQ29uc3RhbnRSZWZlcmVuY2UoRG91YmxlQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgRG91YmxlQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZpZWxkUmVmZXJlbmNlKEZpZWxkIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIEZpZWxkIHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0YW5jZUNvbnN0YW50KEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgSW5zdGFuY2VDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0YW5jZUNvbnN0YW50UmVmZXJlbmNlKEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgSW5zdGFuY2VDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50Q29uc3RhbnQoSW50Q29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgSW50Q29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50Q29uc3RhbnRSZWZlcmVuY2UoSW50Q29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgSW50Q29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpYnJhcnlEZXBlbmRlbmN5KExpYnJhcnlEZXBlbmRlbmN5IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIExpYnJhcnlEZXBlbmRlbmN5cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpYnJhcnlQYXJ0KExpYnJhcnlQYXJ0IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIExpYnJhcnlQYXJ0cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTGlzdENvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RDb25zdGFudFJlZmVyZW5jZShMaXN0Q29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTGlzdENvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTZXRDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRDb25zdGFudFJlZmVyZW5jZShTZXRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTZXRDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTWFwQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwQ29uc3RhbnRSZWZlcmVuY2UoTWFwQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTWFwQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWUoTmFtZSBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBOYW1lcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxDb25zdGFudChOdWxsQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTnVsbENvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxDb25zdGFudFJlZmVyZW5jZShOdWxsQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTnVsbENvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcm9jZWR1cmVSZWZlcmVuY2UoUHJvY2VkdXJlIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFByb2NlZHVyZSByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29tcG9uZW50KENvbXBvbmVudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBDb21wb25lbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdzZXJpYWxpemF0aW9uIG9mIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTdHJpbmdDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25zdGFudFJlZmVyZW5jZShTdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTdHJpbmdDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3ltYm9sQ29uc3RhbnQoU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgU3ltYm9sQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3ltYm9sQ29uc3RhbnRSZWZlcmVuY2UoU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgU3ltYm9sQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAnc2VyaWFsaXphdGlvbiBvZiBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50cyAnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50UmVmZXJlbmNlKAogICAgICBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdzZXJpYWxpemF0aW9uIG9mIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRlYXJPZmZDb25zdGFudChUZWFyT2ZmQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgVGVhck9mZkNvbnN0YW50cyAnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUZWFyT2ZmQ29uc3RhbnRSZWZlcmVuY2UoVGVhck9mZkNvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFRlYXJPZmZDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFR5cGVMaXRlcmFsQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudFJlZmVyZW5jZShUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdzZXJpYWxpemF0aW9uIG9mIFR5cGVMaXRlcmFsQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVkZWZSZWZlcmVuY2UoVHlwZWRlZiBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBUeXBlZGVmIHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgVW5ldmFsdWF0ZWRDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50UmVmZXJlbmNlKFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgJ3NlcmlhbGl6YXRpb24gb2YgVW5ldmFsdWF0ZWRDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQp9Cgp0eXBlZGVmIGJvb2wgTGlicmFyeUZpbHRlcihMaWJyYXJ5IF8pOwoKY2xhc3MgVmFyaWFibGVJbmRleGVyIHsKICBNYXA8VmFyaWFibGVEZWNsYXJhdGlvbiwgaW50PiBpbmRleDsKICBMaXN0PGludD4gc2NvcGVzOwogIGludCBzdGFja0hlaWdodCA9IDA7CgogIHZvaWQgZGVjbGFyZShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIGluZGV4ID8/PSA8VmFyaWFibGVEZWNsYXJhdGlvbiwgaW50Pnt9OwogICAgaW5kZXhbbm9kZV0gPSBzdGFja0hlaWdodCsrOwogIH0KCiAgdm9pZCBwdXNoU2NvcGUoKSB7CiAgICBzY29wZXMgPz89IG5ldyBMaXN0PGludD4oKTsKICAgIHNjb3Blcy5hZGQoc3RhY2tIZWlnaHQpOwogIH0KCiAgdm9pZCBwb3BTY29wZSgpIHsKICAgIHN0YWNrSGVpZ2h0ID0gc2NvcGVzLnJlbW92ZUxhc3QoKTsKICB9CgogIHZvaWQgcmVzdG9yZVNjb3BlKGludCBudW1iZXJPZlZhcmlhYmxlcykgewogICAgc3RhY2tIZWlnaHQgKz0gbnVtYmVyT2ZWYXJpYWJsZXM7CiAgfQoKICBpbnQgb3BlcmF0b3IgW10oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gaW5kZXggPT0gbnVsbCA/IG51bGwgOiBpbmRleFtub2RlXTsKICB9Cn0KCmNsYXNzIExhYmVsSW5kZXhlciB7CiAgZmluYWwgTWFwPExhYmVsZWRTdGF0ZW1lbnQsIGludD4gaW5kZXggPSA8TGFiZWxlZFN0YXRlbWVudCwgaW50Pnt9OwogIGludCBzdGFja0hlaWdodCA9IDA7CgogIHZvaWQgZW50ZXIoTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICBpbmRleFtub2RlXSA9IHN0YWNrSGVpZ2h0Kys7CiAgfQoKICB2b2lkIGV4aXQoKSB7CiAgICAtLXN0YWNrSGVpZ2h0OwogIH0KCiAgaW50IG9wZXJhdG9yIFtdKExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgPT4gaW5kZXhbbm9kZV07Cn0KCmNsYXNzIFN3aXRjaENhc2VJbmRleGVyIHsKICBmaW5hbCBNYXA8U3dpdGNoQ2FzZSwgaW50PiBpbmRleCA9IDxTd2l0Y2hDYXNlLCBpbnQ+e307CiAgaW50IHN0YWNrSGVpZ2h0ID0gMDsKCiAgdm9pZCBlbnRlcihTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgZm9yIChTd2l0Y2hDYXNlIGNhc2VOb2RlIGluIG5vZGUuY2FzZXMpIHsKICAgICAgaW5kZXhbY2FzZU5vZGVdID0gc3RhY2tIZWlnaHQrKzsKICAgIH0KICB9CgogIHZvaWQgZXhpdChTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgc3RhY2tIZWlnaHQgLT0gbm9kZS5jYXNlcy5sZW5ndGg7CiAgfQoKICBpbnQgb3BlcmF0b3IgW10oU3dpdGNoQ2FzZSBub2RlKSA9PiBpbmRleFtub2RlXTsKfQoKY2xhc3MgQ29uc3RhbnRJbmRleGVyIGV4dGVuZHMgUmVjdXJzaXZlVmlzaXRvciB7CiAgZmluYWwgU3RyaW5nSW5kZXhlciBzdHJpbmdJbmRleGVyOwoKICBmaW5hbCBMaXN0PENvbnN0YW50PiBlbnRyaWVzID0gPENvbnN0YW50PltdOwogIGZpbmFsIE1hcDxDb25zdGFudCwgaW50PiBvZmZzZXRzID0gPENvbnN0YW50LCBpbnQ+e307CiAgaW50IG5leHRPZmZzZXQgPSAwOwoKICBmaW5hbCBCaW5hcnlQcmludGVyIF9wcmludGVyOwoKICBDb25zdGFudEluZGV4ZXIodGhpcy5zdHJpbmdJbmRleGVyLCB0aGlzLl9wcmludGVyKTsKCiAgaW50IHB1dChDb25zdGFudCBjb25zdGFudCkgewogICAgZmluYWwgaW50IG9sZE9mZnNldCA9IG9mZnNldHNbY29uc3RhbnRdOwogICAgaWYgKG9sZE9mZnNldCAhPSBudWxsKSByZXR1cm4gb2xkT2Zmc2V0OwoKICAgIC8vIFRyYXZlcnNlIERBRyBpbiBwb3N0LW9yZGVyIHRvIGVuc3VyZSBjaGlsZHJlbiBoYXZlIHRoZWlyIG9mZnNldHMgYXNzaWduZWQKICAgIC8vIGJlZm9yZSB0aGUgcGFyZW50LgogICAgY29uc3RhbnQudmlzaXRDaGlsZHJlbih0aGlzKTsKCiAgICBpZiAoY29uc3RhbnQgaXMgU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgc3RyaW5nSW5kZXhlci5wdXQoY29uc3RhbnQudmFsdWUpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBTeW1ib2xDb25zdGFudCkgewogICAgICBzdHJpbmdJbmRleGVyLnB1dChjb25zdGFudC5uYW1lKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgc3RyaW5nSW5kZXhlci5wdXQoJyR7Y29uc3RhbnQudmFsdWV9Jyk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIEludENvbnN0YW50KSB7CiAgICAgIGZpbmFsIGludCB2YWx1ZSA9IGNvbnN0YW50LnZhbHVlOwogICAgICBpZiAoKHZhbHVlLmFicygpID4+IDMwKSAhPSAwKSB7CiAgICAgICAgc3RyaW5nSW5kZXhlci5wdXQoJyR2YWx1ZScpOwogICAgICB9CiAgICB9CgogICAgZmluYWwgaW50IG5ld09mZnNldCA9IG5leHRPZmZzZXQ7CiAgICBlbnRyaWVzLmFkZChjb25zdGFudCk7CiAgICBuZXh0T2Zmc2V0ICs9IF9wcmludGVyLndyaXRlQ29uc3RhbnRUYWJsZUVudHJ5KGNvbnN0YW50KTsKICAgIHJldHVybiBvZmZzZXRzW2NvbnN0YW50XSA9IG5ld09mZnNldDsKICB9CgogIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShDb25zdGFudCBub2RlKSB7CiAgICBwdXQobm9kZSk7CiAgfQoKICBpbnQgb3BlcmF0b3IgW10oQ29uc3RhbnQgbm9kZSkgPT4gb2Zmc2V0c1tub2RlXTsKfQoKY2xhc3MgVHlwZVBhcmFtZXRlckluZGV4ZXIgewogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBpbnQ+IGluZGV4ID0gPFR5cGVQYXJhbWV0ZXIsIGludD57fTsKICBpbnQgc3RhY2tIZWlnaHQgPSAwOwoKICB2b2lkIGVudGVyKExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgaW5kZXhbcGFyYW1ldGVyXSA9IHN0YWNrSGVpZ2h0OwogICAgICArK3N0YWNrSGVpZ2h0OwogICAgfQogIH0KCiAgdm9pZCBleGl0KExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpIHsKICAgIHN0YWNrSGVpZ2h0IC09IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgaW5kZXgucmVtb3ZlKHR5cGVQYXJhbWV0ZXJzW2ldKTsKICAgIH0KICB9CgogIGludCBvcGVyYXRvciBbXShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlcikgPT4KICAgICAgaW5kZXhbcGFyYW1ldGVyXSA/PwogICAgICAodGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ1R5cGUgcGFyYW1ldGVyICRwYXJhbWV0ZXIgaXMgbm90IGluZGV4ZWQnKSk7Cn0KCmNsYXNzIFN0cmluZ0luZGV4ZXIgewogIC8vIE5vdGUgdGhhdCB0aGUgaXRlcmF0aW9uIG9yZGVyIGlzIGltcG9ydGFudC4KICBmaW5hbCBNYXA8U3RyaW5nLCBpbnQ+IGluZGV4ID0gbmV3IE1hcDxTdHJpbmcsIGludD4oKTsKCiAgU3RyaW5nSW5kZXhlcigpIHsKICAgIHB1dCgnJyk7CiAgfQoKICBpbnQgcHV0KFN0cmluZyBzdHJpbmcpIHsKICAgIGludCByZXN1bHQgPSBpbmRleFtzdHJpbmddOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IGluZGV4Lmxlbmd0aDsKICAgICAgaW5kZXhbc3RyaW5nXSA9IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgb3BlcmF0b3IgW10oU3RyaW5nIHN0cmluZykgPT4gaW5kZXhbc3RyaW5nXTsKfQoKY2xhc3MgVXJpSW5kZXhlciB7CiAgLy8gTm90ZSB0aGF0IHRoZSBpdGVyYXRpb24gb3JkZXIgaXMgaW1wb3J0YW50LgogIGZpbmFsIE1hcDxVcmksIGludD4gaW5kZXggPSBuZXcgTWFwPFVyaSwgaW50PigpOwoKICBVcmlJbmRleGVyKCkgewogICAgcHV0KG51bGwpOwogIH0KCiAgaW50IHB1dChVcmkgdXJpKSB7CiAgICBpbnQgcmVzdWx0ID0gaW5kZXhbdXJpXTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICByZXN1bHQgPSBpbmRleC5sZW5ndGg7CiAgICAgIGluZGV4W3VyaV0gPSByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLy8vIFB1dHMgYSBidWZmZXIgaW4gZnJvbnQgb2YgYSBbU2luazxMaXN0PGludD4+XS4KY2xhc3MgQnVmZmVyZWRTaW5rIHsKICBzdGF0aWMgY29uc3QgaW50IFNJWkUgPSAxMDAwMDA7CiAgc3RhdGljIGNvbnN0IGludCBTQUZFX1NJWkUgPSBTSVpFIC0gNTsKICBzdGF0aWMgY29uc3QgaW50IFNNQUxMID0gMTAwMDA7CiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwogIFVpbnQ4TGlzdCBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChTSVpFKTsKICBpbnQgbGVuZ3RoID0gMDsKICBpbnQgZmx1c2hlZExlbmd0aCA9IDA7CgogIEZsb2F0NjRMaXN0IF9kb3VibGVCdWZmZXIgPSBuZXcgRmxvYXQ2NExpc3QoMSk7CiAgVWludDhMaXN0IF9kb3VibGVCdWZmZXJVaW50ODsKCiAgaW50IGdldCBvZmZzZXQgPT4gbGVuZ3RoICsgZmx1c2hlZExlbmd0aDsKCiAgQnVmZmVyZWRTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZERvdWJsZShkb3VibGUgZCkgewogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4ID8/PSBfZG91YmxlQnVmZmVyLmJ1ZmZlci5hc1VpbnQ4TGlzdCgpOwogICAgX2RvdWJsZUJ1ZmZlclswXSA9IGQ7CiAgICBhZGRCeXRlNChfZG91YmxlQnVmZmVyVWludDhbMF0sIF9kb3VibGVCdWZmZXJVaW50OFsxXSwKICAgICAgICBfZG91YmxlQnVmZmVyVWludDhbMl0sIF9kb3VibGVCdWZmZXJVaW50OFszXSk7CiAgICBhZGRCeXRlNChfZG91YmxlQnVmZmVyVWludDhbNF0sIF9kb3VibGVCdWZmZXJVaW50OFs1XSwKICAgICAgICBfZG91YmxlQnVmZmVyVWludDhbNl0sIF9kb3VibGVCdWZmZXJVaW50OFs3XSk7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTsKICAgIGlmIChsZW5ndGggPT0gU0laRSkgewogICAgICBfc2luay5hZGQoX2J1ZmZlcik7CiAgICAgIF9idWZmZXIgPSBuZXcgVWludDhMaXN0KFNJWkUpOwogICAgICBsZW5ndGggPSAwOwogICAgICBmbHVzaGVkTGVuZ3RoICs9IFNJWkU7CiAgICB9CiAgfQoKICB2b2lkIGFkZEJ5dGUyKGludCBieXRlMSwgaW50IGJ5dGUyKSB7CiAgICBpZiAobGVuZ3RoIDwgU0FGRV9TSVpFKSB7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTE7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTI7CiAgICB9IGVsc2UgewogICAgICBhZGRCeXRlKGJ5dGUxKTsKICAgICAgYWRkQnl0ZShieXRlMik7CiAgICB9CiAgfQoKICB2b2lkIGFkZEJ5dGU0KGludCBieXRlMSwgaW50IGJ5dGUyLCBpbnQgYnl0ZTMsIGludCBieXRlNCkgewogICAgaWYgKGxlbmd0aCA8IFNBRkVfU0laRSkgewogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUxOwogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUyOwogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUzOwogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGU0OwogICAgfSBlbHNlIHsKICAgICAgYWRkQnl0ZShieXRlMSk7CiAgICAgIGFkZEJ5dGUoYnl0ZTIpOwogICAgICBhZGRCeXRlKGJ5dGUzKTsKICAgICAgYWRkQnl0ZShieXRlNCk7CiAgICB9CiAgfQoKICB2b2lkIGFkZEJ5dGVzKExpc3Q8aW50PiBieXRlcykgewogICAgLy8gQXZvaWQgY29weWluZyBhIGxhcmdlIGJ1ZmZlciBpbnRvIHRoZSBhbm90aGVyIGxhcmdlIGJ1ZmZlci4gQWxzbywgaWYKICAgIC8vIHRoZSBieXRlcyBidWZmZXIgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBvdXIgb3duIGJ1ZmZlciwganVzdCBlbWl0IGJvdGguCiAgICBpZiAobGVuZ3RoICsgYnl0ZXMubGVuZ3RoIDwgU0laRSAmJgogICAgICAgIChieXRlcy5sZW5ndGggPCBTTUFMTCB8fCBsZW5ndGggPCBTTUFMTCkpIHsKICAgICAgX2J1ZmZlci5zZXRSYW5nZShsZW5ndGgsIGxlbmd0aCArIGJ5dGVzLmxlbmd0aCwgYnl0ZXMpOwogICAgICBsZW5ndGggKz0gYnl0ZXMubGVuZ3RoOwogICAgfSBlbHNlIGlmIChieXRlcy5sZW5ndGggPCBTTUFMTCkgewogICAgICAvLyBGbHVzaCBhcyBtdWNoIGFzIHdlIGNhbiBpbiB0aGUgY3VycmVudCBidWZmZXIuCiAgICAgIF9idWZmZXIuc2V0UmFuZ2UobGVuZ3RoLCBTSVpFLCBieXRlcyk7CiAgICAgIF9zaW5rLmFkZChfYnVmZmVyKTsKICAgICAgLy8gQ29weSBvdmVyIHRoZSByZW1haW5kZXIgaW50byBhIG5ldyBidWZmZXIuIEl0IGlzIGd1YXJhbnRlZWQgdG8gZml0CiAgICAgIC8vIGJlY2F1c2UgdGhlIGlucHV0IGJ5dGUgYXJyYXkgaXMgc21hbGwuCiAgICAgIGludCBhbHJlYWR5RW1pdHRlZCA9IFNJWkUgLSBsZW5ndGg7CiAgICAgIGludCByZW1haW5kZXIgPSBieXRlcy5sZW5ndGggLSBhbHJlYWR5RW1pdHRlZDsKICAgICAgX2J1ZmZlciA9IG5ldyBVaW50OExpc3QoU0laRSk7CiAgICAgIF9idWZmZXIuc2V0UmFuZ2UoMCwgcmVtYWluZGVyLCBieXRlcywgYWxyZWFkeUVtaXR0ZWQpOwogICAgICBsZW5ndGggPSByZW1haW5kZXI7CiAgICAgIGZsdXNoZWRMZW5ndGggKz0gU0laRTsKICAgIH0gZWxzZSB7CiAgICAgIGZsdXNoKCk7CiAgICAgIF9zaW5rLmFkZChieXRlcyk7CiAgICAgIGZsdXNoZWRMZW5ndGggKz0gYnl0ZXMubGVuZ3RoOwogICAgfQogIH0KCiAgdm9pZCBmbHVzaCgpIHsKICAgIF9zaW5rLmFkZChfYnVmZmVyLnN1Ymxpc3QoMCwgbGVuZ3RoKSk7CiAgICBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChTSVpFKTsKICAgIGZsdXNoZWRMZW5ndGggKz0gbGVuZ3RoOwogICAgbGVuZ3RoID0gMDsKICB9CgogIHZvaWQgZmx1c2hBbmREZXN0cm95KCkgewogICAgX3NpbmsuYWRkKF9idWZmZXIuc3VibGlzdCgwLCBsZW5ndGgpKTsKICB9Cn0KCi8vLyBOb24tZW1wdHkgbWV0YWRhdGEgc3Vic2VjdGlvbi4KY2xhc3MgX01ldGFkYXRhU3Vic2VjdGlvbiB7CiAgZmluYWwgTWV0YWRhdGFSZXBvc2l0b3J5PE9iamVjdD4gcmVwb3NpdG9yeTsKCiAgLy8vIExpc3Qgb2YgKG5vZGVPZmZzZXQsIG1ldGFkYXRhT2Zmc2V0KSBwYWlycy4KICAvLy8gR3JhZHVhbGx5IGZpbGxlZCBieSB0aGUgd3JpdGVyIGFzIHdyaXRpbmcgcHJvZ3Jlc3Nlcywgd2hpY2ggYnkKICAvLy8gY29uc3RydWN0aW9uIGd1YXJhbnRlZXMgdGhhdCBwYWlycyBhcmUgc29ydGVkIGJ5IGZpcnN0IGNvbXBvbmVudAogIC8vLyAobm9kZU9mZnNldCkgaW4gYXNjZW5kaW5nIG9yZGVyLgogIGZpbmFsIExpc3Q8aW50PiBtZXRhZGF0YU1hcHBpbmcgPSA8aW50PltdOwoKICBfTWV0YWRhdGFTdWJzZWN0aW9uKHRoaXMucmVwb3NpdG9yeSk7Cn0KCi8vLyBBIFtTaW5rXSB0aGF0IGRpcmVjdGx5IHdyaXRlcyBkYXRhIGludG8gYSBieXRlIGJ1aWxkZXIuCi8vIFRPRE8oZGFydGJ1Zy5jb20vMjgzMTYpOiBSZW1vdmUgdGhpcyB3cmFwcGVyIGNsYXNzLgpjbGFzcyBCeXRlc1NpbmsgaW1wbGVtZW50cyBTaW5rPExpc3Q8aW50Pj4gewogIGZpbmFsIEJ5dGVzQnVpbGRlciBidWlsZGVyID0gbmV3IEJ5dGVzQnVpbGRlcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgYnVpbGRlci5hZGQoZGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgLy8gTm90aGluZyB0byBkby4KICB9Cn0KCmNsYXNzIE5vdFF1aXRlU3RyaW5nIHsKICAvKioKICAgKiBXcml0ZSBbc291cmNlXSBzdHJpbmcgaW50byBbdGFyZ2V0XSBzdGFydGluZyBhdCBpbmRleCBbaW5kZXhdLgogICAqCiAgICogT3B0aW9uYWxseSBvbmx5IHdyaXRlIHBhcnQgb2YgdGhlIGlucHV0IFtzb3VyY2VdIHN0YXJ0aW5nIGF0IFtzdGFydF0gYW5kCiAgICogZW5kaW5nIGF0IFtlbmRdLgogICAqCiAgICogVGhlIG91dHB1dCBzcGFjZSBuZWVkZWQgaXMgYXQgbW9zdCBbc291cmNlLmxlbmd0aF0gKiAzLgogICAqCiAgICogUmV0dXJucwogICAqICAqIE5vbi1uZWdhdGl2ZSBvbiBzdWNjZXNzICh0aGUgbmV3IGluZGV4IGluIFt0YXJnZXRdKS4KICAgKiAgKiAtMSB3aGVuIFt0YXJnZXRdIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UuIE5vdGUgdGhhdCBbdGFyZ2V0XSBjYW4gYmUKICAgKiAgICBwb2x1dGVkIHN0YXJ0aW5nIGF0IFtpbmRleF0uCiAgICogICogLTIgb24gaW5wdXQgZXJyb3IsIGkuZS4gYW4gdW5wYWlyZWQgbGVhZCBvciB0YWlsIHN1cnJvZ2F0ZS4KICAgKi8KICBzdGF0aWMgaW50IHdyaXRlVXRmOChMaXN0PGludD4gdGFyZ2V0LCBpbnQgaW5kZXgsIFN0cmluZyBzb3VyY2UsCiAgICAgIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkSW5kZXgoaW5kZXgsIHRhcmdldCwgbnVsbCwgdGFyZ2V0Lmxlbmd0aCk7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiBpbmRleDsKICAgIGludCBpID0gc3RhcnQ7CiAgICBpbnQgbGVuZ3RoID0gdGFyZ2V0Lmxlbmd0aDsKICAgIGRvIHsKICAgICAgaW50IGNvZGVVbml0ID0gc291cmNlLmNvZGVVbml0QXQoaSsrKTsKICAgICAgd2hpbGUgKGNvZGVVbml0IDwgMTI4KSB7CiAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgcmV0dXJuIC0xOwogICAgICAgIHRhcmdldFtpbmRleCsrXSA9IGNvZGVVbml0OwogICAgICAgIGlmIChpID49IGVuZCkgcmV0dXJuIGluZGV4OwogICAgICAgIGNvZGVVbml0ID0gc291cmNlLmNvZGVVbml0QXQoaSsrKTsKICAgICAgfQogICAgICBpZiAoY29kZVVuaXQgPCAweDgwMCkgewogICAgICAgIGluZGV4ICs9IDI7CiAgICAgICAgaWYgKGluZGV4ID4gbGVuZ3RoKSByZXR1cm4gLTE7CiAgICAgICAgdGFyZ2V0W2luZGV4IC0gMl0gPSAweEMwIHwgKGNvZGVVbml0ID4+IDYpOwogICAgICAgIHRhcmdldFtpbmRleCAtIDFdID0gMHg4MCB8IChjb2RlVW5pdCAmIDB4M2YpOwogICAgICB9IGVsc2UgaWYgKGNvZGVVbml0ICYgMHhGODAwICE9IDB4RDgwMCkgewogICAgICAgIC8vIE5vdCBhIHN1cnJvZ2F0ZS4KICAgICAgICBpbmRleCArPSAzOwogICAgICAgIGlmIChpbmRleCA+IGxlbmd0aCkgcmV0dXJuIC0xOwogICAgICAgIHRhcmdldFtpbmRleCAtIDNdID0gMHhFMCB8IChjb2RlVW5pdCA+PiAxMik7CiAgICAgICAgdGFyZ2V0W2luZGV4IC0gMl0gPSAweDgwIHwgKChjb2RlVW5pdCA+PiA2KSAmIDB4M2YpOwogICAgICAgIHRhcmdldFtpbmRleCAtIDFdID0gMHg4MCB8IChjb2RlVW5pdCAmIDB4M2YpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChjb2RlVW5pdCA+PSAweERDMDApIHJldHVybiAtMjsgLy8gVW5wYWlyZWQgdGFpbCBzdXJyb2dhdGUuCiAgICAgICAgaWYgKGkgPj0gZW5kKSByZXR1cm4gLTI7IC8vIFVucGFpcmVkIGxlYWQgc3Vycm9nYXRlLgogICAgICAgIGludCBuZXh0Q2hhciA9IHNvdXJjZS5jb2RlVW5pdEF0KGkrKyk7CiAgICAgICAgaWYgKG5leHRDaGFyICYgMHhGQzAwICE9IDB4REMwMCkgcmV0dXJuIC0yOyAvLyBVbnBhaXJlZCBsZWFkIHN1cnJvZ2F0ZS4KICAgICAgICBpbmRleCArPSA0OwogICAgICAgIGlmIChpbmRleCA+IGxlbmd0aCkgcmV0dXJuIC0xOwogICAgICAgIGNvZGVVbml0ID0gKGNvZGVVbml0ICYgMHgzRkYpICsgMHg0MDsKICAgICAgICB0YXJnZXRbaW5kZXggLSA0XSA9IDB4RjAgfCAoY29kZVVuaXQgPj4gOCk7CiAgICAgICAgdGFyZ2V0W2luZGV4IC0gM10gPSAweDgwIHwgKChjb2RlVW5pdCA+PiAyKSAmIDB4M0YpOwogICAgICAgIHRhcmdldFtpbmRleCAtIDJdID0KICAgICAgICAgICAgMHg4MCB8ICgoKGNvZGVVbml0ICYgMykgPDwgNCkgfCAoKG5leHRDaGFyICYgMHgzRkYpID4+IDYpKTsKICAgICAgICB0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GkwwKjUlPRodDQ8YJQYEARErIx0QBAEbKwQCASMcLwEyRUcnLQEoAgE8Ny0zAQwdFwQBDBEWBAIBFwZEBU4WBT0FDT1OJUQGQyJEQSQTIAktHygkJCsIHhQnNDYwHBQnNT02D0c9L1AUJy40PRxINggXEgQCAShwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0M3Nka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydMABRcwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5hc3RfZnJvbV9iaW5hcnk7CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgppbXBvcnQgJy4uL2FzdC5kYXJ0JzsKaW1wb3J0ICcuLi90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCc7CmltcG9ydCAndGFnLmRhcnQnOwoKY2xhc3MgUGFyc2VFcnJvciB7CiAgU3RyaW5nIGZpbGVuYW1lOwogIGludCBieXRlSW5kZXg7CiAgU3RyaW5nIG1lc3NhZ2U7CiAgU3RyaW5nIHBhdGg7CgogIFBhcnNlRXJyb3IodGhpcy5tZXNzYWdlLCB7dGhpcy5maWxlbmFtZSwgdGhpcy5ieXRlSW5kZXgsIHRoaXMucGF0aH0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGZpbGVuYW1lOiRieXRlSW5kZXg6ICRtZXNzYWdlIGF0ICRwYXRoJzsKfQoKY2xhc3MgSW52YWxpZEtlcm5lbFZlcnNpb25FcnJvciB7CiAgZmluYWwgaW50IHZlcnNpb247CgogIEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3IodGhpcy52ZXJzaW9uKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdVbmV4cGVjdGVkIEtlcm5lbCB2ZXJzaW9uICR7dmVyc2lvbn0gJwogICAgICAgICcoZXhwZWN0ZWQgJHtUYWcuQmluYXJ5Rm9ybWF0VmVyc2lvbn0pLic7CiAgfQp9CgpjbGFzcyBDYW5vbmljYWxOYW1lRXJyb3IgewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICBDYW5vbmljYWxOYW1lRXJyb3IodGhpcy5tZXNzYWdlKTsKfQoKY2xhc3MgQ2Fub25pY2FsTmFtZVNka0Vycm9yIGV4dGVuZHMgQ2Fub25pY2FsTmFtZUVycm9yIHsKICBDYW5vbmljYWxOYW1lU2RrRXJyb3IoU3RyaW5nIG1lc3NhZ2UpIDogc3VwZXIobWVzc2FnZSk7Cn0KCmNsYXNzIF9Db21wb25lbnRJbmRleCB7CiAgc3RhdGljIGNvbnN0IG51bWJlck9mRml4ZWRGaWVsZHMgPSA5OwoKICBpbnQgYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGU7CiAgaW50IGJpbmFyeU9mZnNldEZvckNhbm9uaWNhbE5hbWVzOwogIGludCBiaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzOwogIGludCBiaW5hcnlPZmZzZXRGb3JNZXRhZGF0YU1hcHBpbmdzOwogIGludCBiaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZTsKICBpbnQgYmluYXJ5T2Zmc2V0Rm9yQ29uc3RhbnRUYWJsZTsKICBpbnQgbWFpbk1ldGhvZFJlZmVyZW5jZTsKICBMaXN0PGludD4gbGlicmFyeU9mZnNldHM7CiAgaW50IGxpYnJhcnlDb3VudDsKICBpbnQgY29tcG9uZW50RmlsZVNpemVJbkJ5dGVzOwp9CgpjbGFzcyBCaW5hcnlCdWlsZGVyIHsKICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlU3RhY2sgPSA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKICBmaW5hbCBMaXN0PExhYmVsZWRTdGF0ZW1lbnQ+IGxhYmVsU3RhY2sgPSA8TGFiZWxlZFN0YXRlbWVudD5bXTsKICBpbnQgbGFiZWxTdGFja0Jhc2UgPSAwOwogIGZpbmFsIExpc3Q8U3dpdGNoQ2FzZT4gc3dpdGNoQ2FzZVN0YWNrID0gPFN3aXRjaENhc2U+W107CiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyU3RhY2sgPSA8VHlwZVBhcmFtZXRlcj5bXTsKICBmaW5hbCBTdHJpbmcgZmlsZW5hbWU7CiAgZmluYWwgTGlzdDxpbnQ+IF9ieXRlczsKICBpbnQgX2J5dGVPZmZzZXQgPSAwOwogIGZpbmFsIExpc3Q8U3RyaW5nPiBfc3RyaW5nVGFibGUgPSA8U3RyaW5nPltdOwogIGZpbmFsIExpc3Q8VXJpPiBfc291cmNlVXJpVGFibGUgPSA8VXJpPltdOwogIE1hcDxpbnQsIENvbnN0YW50PiBfY29uc3RhbnRUYWJsZSA9IDxpbnQsIENvbnN0YW50Pnt9OwogIExpc3Q8Q2Fub25pY2FsTmFtZT4gX2xpbmtUYWJsZTsKICBpbnQgX3RyYW5zZm9ybWVyRmxhZ3MgPSAwOwogIExpYnJhcnkgX2N1cnJlbnRMaWJyYXJ5OwogIGludCBfY29tcG9uZW50U3RhcnRPZmZzZXQgPSAwOwoKICAvLyBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgdGhpcyBsaXN0IHNob3VsZCBpbmRpY2F0ZSB3aGF0IGxpYnJhcnksCiAgLy8gY2xhc3MsIGFuZCBtZW1iZXIgd2FzIGJlaW5nIGJ1aWx0LgogIExpc3Q8U3RyaW5nPiBkZWJ1Z1BhdGggPSA8U3RyaW5nPltdOwoKICBib29sIF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb24gPSBmYWxzZTsKICBmaW5hbCBib29sIGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXM7CgogIC8vLyBJZiBiaW5hcnkgY29udGFpbnMgbWV0YWRhdGEgc2VjdGlvbiB3aXRoIHBheWxvYWRzIHJlZmVyZW5jaW5nIG90aGVyIG5vZGVzCiAgLy8vIHN1Y2ggS2VybmVsIGJpbmFyeSBjYW4ndCBiZSByZWFkIGxhemlseSBiZWNhdXNlIG1ldGFkYXRhIGNyb3NzIHJlZmVyZW5jZXMKICAvLy8gd2lsbCBub3QgYmUgcmVzb2x2ZWQgY29ycmVjdGx5LgogIGJvb2wgX2Rpc2FibGVMYXp5UmVhZGluZyA9IGZhbHNlOwoKICBCaW5hcnlCdWlsZGVyKHRoaXMuX2J5dGVzLAogICAgICB7dGhpcy5maWxlbmFtZSwKICAgICAgYm9vbCBkaXNhYmxlTGF6eVJlYWRpbmcgPSBmYWxzZSwKICAgICAgYm9vbCBhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzfSkKICAgICAgOiBfZGlzYWJsZUxhenlSZWFkaW5nID0gZGlzYWJsZUxhenlSZWFkaW5nLAogICAgICAgIHRoaXMuYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcyA9IGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXMgPz8gZmFsc2U7CgogIGZhaWwoU3RyaW5nIG1lc3NhZ2UpIHsKICAgIHRocm93IFBhcnNlRXJyb3IobWVzc2FnZSwKICAgICAgICBieXRlSW5kZXg6IF9ieXRlT2Zmc2V0LCBmaWxlbmFtZTogZmlsZW5hbWUsIHBhdGg6IGRlYnVnUGF0aC5qb2luKCc6OicpKTsKICB9CgogIGludCBnZXQgYnl0ZU9mZnNldCA9PiBfYnl0ZU9mZnNldDsKCiAgaW50IHJlYWRCeXRlKCkgPT4gX2J5dGVzW19ieXRlT2Zmc2V0KytdOwoKICBpbnQgcmVhZFVJbnQoKSB7CiAgICB2YXIgYnl0ZSA9IHJlYWRCeXRlKCk7CiAgICBpZiAoYnl0ZSAmIDB4ODAgPT0gMCkgewogICAgICAvLyAweHh4eHh4eAogICAgICByZXR1cm4gYnl0ZTsKICAgIH0gZWxzZSBpZiAoYnl0ZSAmIDB4NDAgPT0gMCkgewogICAgICAvLyAxMHh4eHh4eAogICAgICByZXR1cm4gKChieXRlICYgMHgzRikgPDwgOCkgfCByZWFkQnl0ZSgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gMTF4eHh4eHgKICAgICAgcmV0dXJuICgoYnl0ZSAmIDB4M0YpIDw8IDI0KSB8CiAgICAgICAgICAocmVhZEJ5dGUoKSA8PCAxNikgfAogICAgICAgICAgKHJlYWRCeXRlKCkgPDwgOCkgfAogICAgICAgICAgcmVhZEJ5dGUoKTsKICAgIH0KICB9CgogIGludCByZWFkVWludDMyKCkgewogICAgcmV0dXJuIChyZWFkQnl0ZSgpIDw8IDI0KSB8CiAgICAgICAgKHJlYWRCeXRlKCkgPDwgMTYpIHwKICAgICAgICAocmVhZEJ5dGUoKSA8PCA4KSB8CiAgICAgICAgcmVhZEJ5dGUoKTsKICB9CgogIGZpbmFsIEZsb2F0NjRMaXN0IF9kb3VibGVCdWZmZXIgPSBuZXcgRmxvYXQ2NExpc3QoMSk7CiAgVWludDhMaXN0IF9kb3VibGVCdWZmZXJVaW50ODsKCiAgZG91YmxlIHJlYWREb3VibGUoKSB7CiAgICBfZG91YmxlQnVmZmVyVWludDggPz89IF9kb3VibGVCdWZmZXIuYnVmZmVyLmFzVWludDhMaXN0KCk7CiAgICBfZG91YmxlQnVmZmVyVWludDhbMF0gPSByZWFkQnl0ZSgpOwogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzFdID0gcmVhZEJ5dGUoKTsKICAgIF9kb3VibGVCdWZmZXJVaW50OFsyXSA9IHJlYWRCeXRlKCk7CiAgICBfZG91YmxlQnVmZmVyVWludDhbM10gPSByZWFkQnl0ZSgpOwogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzRdID0gcmVhZEJ5dGUoKTsKICAgIF9kb3VibGVCdWZmZXJVaW50OFs1XSA9IHJlYWRCeXRlKCk7CiAgICBfZG91YmxlQnVmZmVyVWludDhbNl0gPSByZWFkQnl0ZSgpOwogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzddID0gcmVhZEJ5dGUoKTsKICAgIHJldHVybiBfZG91YmxlQnVmZmVyWzBdOwogIH0KCiAgTGlzdDxpbnQ+IHJlYWRCeXRlcyhpbnQgbGVuZ3RoKSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgICBieXRlcy5zZXRSYW5nZSgwLCBieXRlcy5sZW5ndGgsIF9ieXRlcywgX2J5dGVPZmZzZXQpOwogICAgX2J5dGVPZmZzZXQgKz0gYnl0ZXMubGVuZ3RoOwogICAgcmV0dXJuIGJ5dGVzOwogIH0KCiAgTGlzdDxpbnQ+IHJlYWRCeXRlTGlzdCgpIHsKICAgIHJldHVybiByZWFkQnl0ZXMocmVhZFVJbnQoKSk7CiAgfQoKICBTdHJpbmcgcmVhZFN0cmluZ0VudHJ5KGludCBudW1CeXRlcykgewogICAgLy8gVXRmOERlY29kZXIgd2lsbCBza2lwIGxlYWRpbmcgQk9NIGNoYXJhY3RlcnMsIGJ1dCB3ZSBtdXN0IHByZXNlcnZlIHRoZW0uCiAgICAvLyBDb2xsZWN0IGxlYWRpbmcgQk9NcyBiZWZvcmUgcGFzc2luZyB0aGUgYnl0ZXMgb250byBVdGY4RGVjb2Rlci4KICAgIGludCBudW1CeXRlT3JkZXJNYXJrcyA9IDA7CiAgICB3aGlsZSAoX2J5dGVPZmZzZXQgKyAyIDwgX2J5dGVzLmxlbmd0aCAmJgogICAgICAgIF9ieXRlc1tfYnl0ZU9mZnNldF0gPT0gMHhlZiAmJgogICAgICAgIF9ieXRlc1tfYnl0ZU9mZnNldCArIDFdID09IDB4YmIgJiYKICAgICAgICBfYnl0ZXNbX2J5dGVPZmZzZXQgKyAyXSA9PSAweGJmKSB7CiAgICAgICsrbnVtQnl0ZU9yZGVyTWFya3M7CiAgICAgIF9ieXRlT2Zmc2V0ICs9IDM7CiAgICAgIG51bUJ5dGVzIC09IDM7CiAgICB9CiAgICBTdHJpbmcgc3RyaW5nID0gY29uc3QgVXRmOERlY29kZXIoKQogICAgICAgIC5jb252ZXJ0KF9ieXRlcywgX2J5dGVPZmZzZXQsIF9ieXRlT2Zmc2V0ICsgbnVtQnl0ZXMpOwogICAgX2J5dGVPZmZzZXQgKz0gbnVtQnl0ZXM7CiAgICBpZiAobnVtQnl0ZU9yZGVyTWFya3MgPiAwKSB7CiAgICAgIHJldHVybiAnXHVmZWZmJyAqIG51bUJ5dGVPcmRlck1hcmtzICsgc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHN0cmluZzsKICB9CgogIC8vLyBSZWFkIG1ldGFkYXRhTWFwcGluZ3Mgc2VjdGlvbiBmcm9tIHRoZSBiaW5hcnkuCiAgdm9pZCBfcmVhZE1ldGFkYXRhTWFwcGluZ3MoCiAgICAgIENvbXBvbmVudCBjb21wb25lbnQsIGludCBiaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzKSB7CiAgICAvLyBEZWZhdWx0IHJlYWRlciBpZ25vcmVzIG1ldGFkYXRhIHNlY3Rpb24gZW50aXJlbHkuCiAgfQoKICAvLy8gUmVhZHMgbWV0YWRhdGEgZm9yIHRoZSBnaXZlbiBbbm9kZV0uCiAgTm9kZSBfYXNzb2NpYXRlTWV0YWRhdGEoTm9kZSBub2RlLCBpbnQgbm9kZU9mZnNldCkgewogICAgLy8gRGVmYXVsdCByZWFkZXIgaWdub3JlcyBtZXRhZGF0YSBzZWN0aW9uIGVudGlyZWx5LgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2b2lkIHJlYWRTdHJpbmdUYWJsZShMaXN0PFN0cmluZz4gdGFibGUpIHsKICAgIC8vIFJlYWQgdGhlIHRhYmxlIG9mIGVuZCBvZmZzZXRzLgogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PGludD4gZW5kT2Zmc2V0cyA9IG5ldyBMaXN0PGludD4obGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgZW5kT2Zmc2V0c1tpXSA9IHJlYWRVSW50KCk7CiAgICB9CiAgICAvLyBSZWFkIHRoZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MuCiAgICB0YWJsZS5sZW5ndGggPSBsZW5ndGg7CiAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICB0YWJsZVtpXSA9IHJlYWRTdHJpbmdFbnRyeShlbmRPZmZzZXRzW2ldIC0gc3RhcnRPZmZzZXQpOwogICAgICBzdGFydE9mZnNldCA9IGVuZE9mZnNldHNbaV07CiAgICB9CiAgfQoKICB2b2lkIHJlYWRDb25zdGFudFRhYmxlKCkgewogICAgZmluYWwgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBmaW5hbCBpbnQgc3RhcnRPZmZzZXQgPSBieXRlT2Zmc2V0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBfY29uc3RhbnRUYWJsZVtieXRlT2Zmc2V0IC0gc3RhcnRPZmZzZXRdID0gcmVhZENvbnN0YW50VGFibGVFbnRyeSgpOwogICAgfQogIH0KCiAgQ29uc3RhbnQgcmVhZENvbnN0YW50VGFibGVFbnRyeSgpIHsKICAgIGZpbmFsIGludCBjb25zdGFudFRhZyA9IHJlYWRCeXRlKCk7CiAgICBzd2l0Y2ggKGNvbnN0YW50VGFnKSB7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuTnVsbENvbnN0YW50OgogICAgICAgIHJldHVybiBuZXcgTnVsbENvbnN0YW50KCk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuQm9vbENvbnN0YW50OgogICAgICAgIHJldHVybiBuZXcgQm9vbENvbnN0YW50KHJlYWRCeXRlKCkgPT0gMSk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuSW50Q29uc3RhbnQ6CiAgICAgICAgcmV0dXJuIG5ldyBJbnRDb25zdGFudCgocmVhZEV4cHJlc3Npb24oKSBhcyBJbnRMaXRlcmFsKS52YWx1ZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuRG91YmxlQ29uc3RhbnQ6CiAgICAgICAgcmV0dXJuIG5ldyBEb3VibGVDb25zdGFudChyZWFkRG91YmxlKCkpOwogICAgICBjYXNlIENvbnN0YW50VGFnLlN0cmluZ0NvbnN0YW50OgogICAgICAgIHJldHVybiBuZXcgU3RyaW5nQ29uc3RhbnQocmVhZFN0cmluZ1JlZmVyZW5jZSgpKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5TeW1ib2xDb25zdGFudDoKICAgICAgICBSZWZlcmVuY2UgbGlicmFyeVJlZmVyZW5jZSA9IHJlYWRMaWJyYXJ5UmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xDb25zdGFudChyZWFkU3RyaW5nUmVmZXJlbmNlKCksIGxpYnJhcnlSZWZlcmVuY2UpOwogICAgICBjYXNlIENvbnN0YW50VGFnLk1hcENvbnN0YW50OgogICAgICAgIGZpbmFsIERhcnRUeXBlIGtleVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBmaW5hbCBEYXJ0VHlwZSB2YWx1ZVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgICAgICBmaW5hbCBMaXN0PENvbnN0YW50TWFwRW50cnk+IGVudHJpZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxDb25zdGFudE1hcEVudHJ5Pi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgZmluYWwgQ29uc3RhbnQga2V5ID0gcmVhZENvbnN0YW50UmVmZXJlbmNlKCk7CiAgICAgICAgICBmaW5hbCBDb25zdGFudCB2YWx1ZSA9IHJlYWRDb25zdGFudFJlZmVyZW5jZSgpOwogICAgICAgICAgZW50cmllc1tpXSA9IG5ldyBDb25zdGFudE1hcEVudHJ5KGtleSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IE1hcENvbnN0YW50KGtleVR5cGUsIHZhbHVlVHlwZSwgZW50cmllcyk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuTGlzdENvbnN0YW50OgogICAgICAgIGZpbmFsIERhcnRUeXBlIHR5cGVBcmd1bWVudCA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIGZpbmFsIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgICAgIGZpbmFsIExpc3Q8Q29uc3RhbnQ+IGVudHJpZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxDb25zdGFudD4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGVudHJpZXNbaV0gPSByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBMaXN0Q29uc3RhbnQodHlwZUFyZ3VtZW50LCBlbnRyaWVzKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5TZXRDb25zdGFudDoKICAgICAgICBmaW5hbCBEYXJ0VHlwZSB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgICAgICBmaW5hbCBMaXN0PENvbnN0YW50PiBlbnRyaWVzID0KICAgICAgICAgICAgbmV3IExpc3Q8Q29uc3RhbnQ+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBlbnRyaWVzW2ldID0gcmVhZENvbnN0YW50UmVmZXJlbmNlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU2V0Q29uc3RhbnQodHlwZUFyZ3VtZW50LCBlbnRyaWVzKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5JbnN0YW5jZUNvbnN0YW50OgogICAgICAgIGZpbmFsIFJlZmVyZW5jZSBjbGFzc1JlZmVyZW5jZSA9IHJlYWRDbGFzc1JlZmVyZW5jZSgpOwogICAgICAgIGZpbmFsIGludCB0eXBlQXJndW1lbnRDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQodHlwZUFyZ3VtZW50Q291bnQsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgICAgIHR5cGVBcmd1bWVudHNbaV0gPSByZWFkRGFydFR5cGUoKTsKICAgICAgICB9CiAgICAgICAgZmluYWwgaW50IGZpZWxkVmFsdWVDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgZmluYWwgTWFwPFJlZmVyZW5jZSwgQ29uc3RhbnQ+IGZpZWxkVmFsdWVzID0gPFJlZmVyZW5jZSwgQ29uc3RhbnQ+e307CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZFZhbHVlQ291bnQ7IGkrKykgewogICAgICAgICAgZmluYWwgUmVmZXJlbmNlIGZpZWxkUmVmID0KICAgICAgICAgICAgICByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpLmdldFJlZmVyZW5jZSgpOwogICAgICAgICAgZmluYWwgQ29uc3RhbnQgY29uc3RhbnQgPSByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKTsKICAgICAgICAgIGZpZWxkVmFsdWVzW2ZpZWxkUmVmXSA9IGNvbnN0YW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IEluc3RhbmNlQ29uc3RhbnQoY2xhc3NSZWZlcmVuY2UsIHR5cGVBcmd1bWVudHMsIGZpZWxkVmFsdWVzKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50OgogICAgICAgIGZpbmFsIHRlYXJPZmZDb25zdGFudCA9IHJlYWRDb25zdGFudFJlZmVyZW5jZSgpIGFzIFRlYXJPZmZDb25zdGFudDsKICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgICAgICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlcyA9IG5ldyBMaXN0PERhcnRUeXBlPihsZW5ndGgpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHR5cGVzW2ldID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCh0ZWFyT2ZmQ29uc3RhbnQsIHR5cGVzKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5UZWFyT2ZmQ29uc3RhbnQ6CiAgICAgICAgZmluYWwgUmVmZXJlbmNlIHJlZmVyZW5jZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCkuZ2V0UmVmZXJlbmNlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBUZWFyT2ZmQ29uc3RhbnQuYnlSZWZlcmVuY2UocmVmZXJlbmNlKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5UeXBlTGl0ZXJhbENvbnN0YW50OgogICAgICAgIGZpbmFsIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IFR5cGVMaXRlcmFsQ29uc3RhbnQodHlwZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuVW5ldmFsdWF0ZWRDb25zdGFudDoKICAgICAgICBmaW5hbCBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSByZWFkRXhwcmVzc2lvbigpOwogICAgICAgIHJldHVybiBuZXcgVW5ldmFsdWF0ZWRDb25zdGFudChleHByZXNzaW9uKTsKICAgIH0KCiAgICB0aHJvdyBmYWlsKCd1bmV4cGVjdGVkIGNvbnN0YW50IHRhZzogJGNvbnN0YW50VGFnJyk7CiAgfQoKICBDb25zdGFudCByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKSB7CiAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gcmVhZFVJbnQoKTsKICAgIENvbnN0YW50IGNvbnN0YW50ID0gX2NvbnN0YW50VGFibGVbb2Zmc2V0XTsKICAgIGFzc2VydChjb25zdGFudCAhPSBudWxsKTsKICAgIHJldHVybiBjb25zdGFudDsKICB9CgogIFVyaSByZWFkVXJpUmVmZXJlbmNlKCkgewogICAgcmV0dXJuIF9zb3VyY2VVcmlUYWJsZVtyZWFkVUludCgpXTsKICB9CgogIFN0cmluZyByZWFkU3RyaW5nUmVmZXJlbmNlKCkgewogICAgcmV0dXJuIF9zdHJpbmdUYWJsZVtyZWFkVUludCgpXTsKICB9CgogIExpc3Q8U3RyaW5nPiByZWFkU3RyaW5nUmVmZXJlbmNlTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBMaXN0PFN0cmluZz4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkU3RyaW5nUmVmZXJlbmNlKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIHJlYWRTdHJpbmdPck51bGxJZkVtcHR5KCkgewogICAgdmFyIHN0cmluZyA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgIHJldHVybiBzdHJpbmcuaXNFbXB0eSA/IG51bGwgOiBzdHJpbmc7CiAgfQoKICBib29sIHJlYWRBbmRDaGVja09wdGlvblRhZygpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgaWYgKHRhZyA9PSBUYWcuTm90aGluZykgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgaWYgKHRhZyA9PSBUYWcuU29tZXRoaW5nKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBvcHRpb24gdGFnOiAkdGFnJyk7CiAgICB9CiAgfQoKICBMaXN0PEV4cHJlc3Npb24+IHJlYWRBbm5vdGF0aW9uTGlzdChUcmVlTm9kZSBwYXJlbnQpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gY29uc3QgPEV4cHJlc3Npb24+W107CiAgICBMaXN0PEV4cHJlc3Npb24+IGxpc3QgPQogICAgICAgIG5ldyBMaXN0PEV4cHJlc3Npb24+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgbGlzdFtpXSA9IHJlYWRFeHByZXNzaW9uKCkuLnBhcmVudCA9IHBhcmVudDsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgdm9pZCBfZmlsbFRyZWVOb2RlTGlzdCgKICAgICAgTGlzdDxUcmVlTm9kZT4gbGlzdCwgVHJlZU5vZGUgYnVpbGRPYmplY3QoaW50IGluZGV4KSwgVHJlZU5vZGUgcGFyZW50KSB7CiAgICB2YXIgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGxpc3QubGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBUcmVlTm9kZSBvYmplY3QgPSBidWlsZE9iamVjdChpKTsKICAgICAgbGlzdFtpXSA9IG9iamVjdC4ucGFyZW50ID0gcGFyZW50OwogICAgfQogIH0KCiAgdm9pZCBfZmlsbE5vblRyZWVOb2RlTGlzdChMaXN0PE5vZGU+IGxpc3QsIE5vZGUgYnVpbGRPYmplY3QoKSkgewogICAgdmFyIGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBsaXN0Lmxlbmd0aCA9IGxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgTm9kZSBvYmplY3QgPSBidWlsZE9iamVjdCgpOwogICAgICBsaXN0W2ldID0gb2JqZWN0OwogICAgfQogIH0KCiAgdm9pZCBfc2tpcE5vZGVMaXN0KE5vZGUgc2tpcE9iamVjdCgpKSB7CiAgICB2YXIgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgc2tpcE9iamVjdCgpOwogICAgfQogIH0KCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiBuYW1lZCBub2RlcywgcmV1c2luZyBhbnkgZXhpc3Rpbmcgb2JqZWN0cyBhbHJlYWR5IGluIHRoZQogIC8vLyBsaW5raW5nIHRyZWUuIFRoZSBub2RlcyBhcmUgbWVyZ2VkIGludG8gW2xpc3RdLCBhbmQgaWYgcmVhZGluZyB0aGUgbGlicmFyeQogIC8vLyBpbXBsZW1lbnRhdGlvbiwgdGhlIG9yZGVyIGlzIGNvcnJlY3RlZC4KICAvLy8KICAvLy8gW3JlYWRPYmplY3RdIHNob3VsZCByZWFkIHRoZSBvYmplY3QgZGVmaW5pdGlvbiBhbmQgaXRzIGNhbm9uaWNhbCBuYW1lLgogIC8vLyBJZiBhbiBleGlzdGluZyBvYmplY3QgaXMgYm91bmQgdG8gdGhlIGNhbm9uaWNhbCBuYW1lLCB0aGUgZXhpc3Rpbmcgb2JqZWN0CiAgLy8vIG11c3QgYmUgcmV1c2VkIGFuZCByZXR1cm5lZC4KICB2b2lkIF9tZXJnZU5hbWVkTm9kZUxpc3QoCiAgICAgIExpc3Q8TmFtZWROb2RlPiBsaXN0LCBOYW1lZE5vZGUgcmVhZE9iamVjdChpbnQgaW5kZXgpLCBUcmVlTm9kZSBwYXJlbnQpIHsKICAgIGlmIChfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uKSB7CiAgICAgIC8vIFdoZW4gcmVhZGluZyB0aGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiwgb3ZlcndyaXRlIHRoZSB3aG9sZSBsaXN0CiAgICAgIC8vIHdpdGggdGhlIG5ldyBvbmUuCiAgICAgIF9maWxsVHJlZU5vZGVMaXN0KGxpc3QsIHJlYWRPYmplY3QsIHBhcmVudCk7CiAgICB9IGVsc2UgewogICAgICAvLyBXaGVuIHJlYWRpbmcgYW4gZXh0ZXJuYWwgbGlicmFyeSwgdGhlIHJlc3VsdHMgc2hvdWxkIGVpdGhlciBiZToKICAgICAgLy8gLSBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgZXh0ZXJuYWwgbGlicmFyeSBkZWZpbml0aW9uIChpZiBhbnkpCiAgICAgIC8vIC0gaWdub3JlZCBpZiB0aGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpcyBhbHJlYWR5IGluIG1lbW9yeQogICAgICBpbnQgbnVtYmVyT2ZOb2RlcyA9IHJlYWRVSW50KCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZOb2RlczsgKytpKSB7CiAgICAgICAgdmFyIHZhbHVlID0gcmVhZE9iamVjdChpKTsKICAgICAgICAvLyBXZSB1c2UgdGhlIHBhcmVudCBwb2ludGVyIG9mIGEgbm9kZSB0byBkZXRlcm1pbmUgaWYgaXQgYWxyZWFkeSBpcyBpbgogICAgICAgIC8vIHRoZSBBU1QgYW5kIGhlbmNlIHNob3VsZCBub3QgYmUgYWRkZWQgYWdhaW4uCiAgICAgICAgaWYgKHZhbHVlLnBhcmVudCA9PSBudWxsKSB7CiAgICAgICAgICBsaXN0LmFkZCh2YWx1ZS4ucGFyZW50ID0gcGFyZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVhZExpbmtUYWJsZShDYW5vbmljYWxOYW1lIGxpbmtSb290KSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIF9saW5rVGFibGUgPSBuZXcgTGlzdDxDYW5vbmljYWxOYW1lPihsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBpbnQgYmlhc2VkUGFyZW50SW5kZXggPSByZWFkVUludCgpOwogICAgICBTdHJpbmcgbmFtZSA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgICAgdmFyIHBhcmVudCA9CiAgICAgICAgICBiaWFzZWRQYXJlbnRJbmRleCA9PSAwID8gbGlua1Jvb3QgOiBfbGlua1RhYmxlW2JpYXNlZFBhcmVudEluZGV4IC0gMV07CiAgICAgIF9saW5rVGFibGVbaV0gPSBwYXJlbnQuZ2V0Q2hpbGQobmFtZSk7CiAgICB9CiAgfQoKICBMaXN0PGludD4gX2luZGV4Q29tcG9uZW50cygpIHsKICAgIGludCBzYXZlZEJ5dGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIF9ieXRlT2Zmc2V0ID0gX2J5dGVzLmxlbmd0aCAtIDQ7CiAgICBMaXN0PGludD4gaW5kZXggPSA8aW50PltdOwogICAgd2hpbGUgKF9ieXRlT2Zmc2V0ID4gMCkgewogICAgICBpbnQgc2l6ZSA9IHJlYWRVaW50MzIoKTsKICAgICAgaW50IHN0YXJ0ID0gX2J5dGVPZmZzZXQgLSBzaXplOwogICAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgICAgdGhyb3cgZmFpbCgiaW5kaWNhdGVkIHNpemUgZG9lcyBub3QgbWF0Y2ggZmlsZSBzaXplIik7CiAgICAgIH0KICAgICAgaW5kZXguYWRkKHNpemUpOwogICAgICBfYnl0ZU9mZnNldCA9IHN0YXJ0IC0gNDsKICAgIH0KICAgIF9ieXRlT2Zmc2V0ID0gc2F2ZWRCeXRlT2Zmc2V0OwogICAgcmV0dXJuIG5ldyBMaXN0LmZyb20oaW5kZXgucmV2ZXJzZWQpOwogIH0KCiAgLy8vIERlc2VyaWFsaXplcyBhIGtlcm5lbCBjb21wb25lbnQgYW5kIHN0b3JlcyBpdCBpbiBbY29tcG9uZW50XS4KICAvLy8KICAvLy8gV2hlbiBsaW5raW5nIHdpdGggYSBub24tZW1wdHkgY29tcG9uZW50LCBjYW5vbmljYWwgbmFtZXMgbXVzdCBoYXZlIGJlZW4KICAvLy8gY29tcHV0ZWQgYWhlYWQgb2YgdGltZS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGJ5dGVzIG1heSBjb250YWluIG11bHRpcGxlIGZpbGVzIGNvbmNhdGVuYXRlZC4KICB2b2lkIHJlYWRDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCwge2Jvb2wgY2hlY2tDYW5vbmljYWxOYW1lczogZmFsc2V9KSB7CiAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgYSAuZGlsbCBmaWxlIGFuZCBpdCBoYXMgdGhlIGNvcnJlY3QgdmVyc2lvbiBiZWZvcmUgd2UKICAgIC8vIHN0YXJ0IGRlY29kaW5nIGl0LiAgT3RoZXJ3aXNlIHdlIHdpbGwgZmFpbCBmb3IgY3J5cHRpYyByZWFzb25zLgogICAgaW50IG9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgaW50IG1hZ2ljID0gcmVhZFVpbnQzMigpOwogICAgaWYgKG1hZ2ljICE9IFRhZy5Db21wb25lbnRGaWxlKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ05vdCBhIC5kaWxsIGZpbGUgKHdyb25nIG1hZ2ljIG51bWJlcikuJyk7CiAgICB9CiAgICBpbnQgdmVyc2lvbiA9IHJlYWRVaW50MzIoKTsKICAgIGlmICh2ZXJzaW9uICE9IFRhZy5CaW5hcnlGb3JtYXRWZXJzaW9uKSB7CiAgICAgIHRocm93IEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3IodmVyc2lvbik7CiAgICB9CiAgICBfYnl0ZU9mZnNldCA9IG9mZnNldDsKICAgIExpc3Q8aW50PiBjb21wb25lbnRGaWxlU2l6ZXMgPSBfaW5kZXhDb21wb25lbnRzKCk7CiAgICBpZiAoY29tcG9uZW50RmlsZVNpemVzLmxlbmd0aCA+IDEpIHsKICAgICAgX2Rpc2FibGVMYXp5UmVhZGluZyA9IHRydWU7CiAgICB9CiAgICBpbnQgY29tcG9uZW50RmlsZUluZGV4ID0gMDsKICAgIHdoaWxlIChfYnl0ZU9mZnNldCA8IF9ieXRlcy5sZW5ndGgpIHsKICAgICAgX3JlYWRPbmVDb21wb25lbnQoY29tcG9uZW50LCBjb21wb25lbnRGaWxlU2l6ZXNbY29tcG9uZW50RmlsZUluZGV4XSk7CiAgICAgICsrY29tcG9uZW50RmlsZUluZGV4OwogICAgfQoKICAgIGlmIChjaGVja0Nhbm9uaWNhbE5hbWVzKSB7CiAgICAgIF9jaGVja0Nhbm9uaWNhbE5hbWVDaGlsZHJlbihjb21wb25lbnQucm9vdCk7CiAgICB9CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIHRoZSBzb3VyY2UgYW5kIHN0b3JlcyBpdCBpbiBbY29tcG9uZW50XS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGJ5dGVzIG1heSBjb250YWluIG11bHRpcGxlIGZpbGVzIGNvbmNhdGVuYXRlZC4KICB2b2lkIHJlYWRDb21wb25lbnRTb3VyY2UoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgTGlzdDxpbnQ+IGNvbXBvbmVudEZpbGVTaXplcyA9IF9pbmRleENvbXBvbmVudHMoKTsKICAgIGlmIChjb21wb25lbnRGaWxlU2l6ZXMubGVuZ3RoID4gMSkgewogICAgICBfZGlzYWJsZUxhenlSZWFkaW5nID0gdHJ1ZTsKICAgIH0KICAgIGludCBjb21wb25lbnRGaWxlSW5kZXggPSAwOwogICAgd2hpbGUgKF9ieXRlT2Zmc2V0IDwgX2J5dGVzLmxlbmd0aCkgewogICAgICBfcmVhZE9uZUNvbXBvbmVudFNvdXJjZSgKICAgICAgICAgIGNvbXBvbmVudCwgY29tcG9uZW50RmlsZVNpemVzW2NvbXBvbmVudEZpbGVJbmRleF0pOwogICAgICArK2NvbXBvbmVudEZpbGVJbmRleDsKICAgIH0KICB9CgogIC8vLyBSZWFkcyBhIHNpbmdsZSBjb21wb25lbnQgZmlsZSBmcm9tIHRoZSBpbnB1dCBhbmQgbG9hZHMgaXQgaW50byBbY29tcG9uZW50XSwKICAvLy8gb3ZlcndyaXRpbmcgYW5kIHJldXNpbmcgYW55IGV4aXN0aW5nIGRhdGEgaW4gdGhlIGNvbXBvbmVudC4KICAvLy8KICAvLy8gV2hlbiBsaW5raW5nIHdpdGggYSBub24tZW1wdHkgY29tcG9uZW50LCBjYW5vbmljYWwgbmFtZXMgbXVzdCBoYXZlIGJlZW4KICAvLy8gY29tcHV0ZWQgYWhlYWQgb2YgdGltZS4KICAvLy8KICAvLy8gVGhpcyBzaG91bGQgKm9ubHkqIGJlIHVzZWQgd2hlbiB0aGVyZSBpcyBhIHJlYXNvbiB0byBub3QgYWxsb3cKICAvLy8gY29uY2F0ZW5hdGVkIGZpbGVzLgogIHZvaWQgcmVhZFNpbmdsZUZpbGVDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAge2Jvb2wgY2hlY2tDYW5vbmljYWxOYW1lczogZmFsc2V9KSB7CiAgICBMaXN0PGludD4gY29tcG9uZW50RmlsZVNpemVzID0gX2luZGV4Q29tcG9uZW50cygpOwogICAgaWYgKGNvbXBvbmVudEZpbGVTaXplcy5pc0VtcHR5KSB0aHJvdyBmYWlsKCJpbnZhbGlkIGNvbXBvbmVudCBkYXRhIik7CiAgICBfcmVhZE9uZUNvbXBvbmVudChjb21wb25lbnQsIGNvbXBvbmVudEZpbGVTaXplc1swXSk7CiAgICBpZiAoX2J5dGVPZmZzZXQgPCBfYnl0ZXMubGVuZ3RoKSB7CiAgICAgIGlmIChfYnl0ZU9mZnNldCArIDMgPCBfYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgaW50IG1hZ2ljID0gcmVhZFVpbnQzMigpOwogICAgICAgIGlmIChtYWdpYyA9PSBUYWcuQ29tcG9uZW50RmlsZSkgewogICAgICAgICAgdGhyb3cgJ0NvbmNhdGVuYXRlZCBjb21wb25lbnQgZmlsZSBnaXZlbiB3aGVuIGEgc2luZ2xlIGNvbXBvbmVudCAnCiAgICAgICAgICAgICAgJ3dhcyBleHBlY3RlZC4nOwogICAgICAgIH0KICAgICAgfQogICAgICB0aHJvdyAnVW5yZWNvZ25pemVkIGJ5dGVzIGZvbGxvd2luZyBjb21wb25lbnQgZGF0YSc7CiAgICB9CgogICAgaWYgKGNoZWNrQ2Fub25pY2FsTmFtZXMpIHsKICAgICAgX2NoZWNrQ2Fub25pY2FsTmFtZUNoaWxkcmVuKGNvbXBvbmVudC5yb290KTsKICAgIH0KICB9CgogIHZvaWQgX2NoZWNrQ2Fub25pY2FsTmFtZUNoaWxkcmVuKENhbm9uaWNhbE5hbWUgcGFyZW50KSB7CiAgICBJdGVyYWJsZTxDYW5vbmljYWxOYW1lPiBwYXJlbnRDaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbk9yTnVsbDsKICAgIGlmIChwYXJlbnRDaGlsZHJlbiAhPSBudWxsKSB7CiAgICAgIGZvciAoQ2Fub25pY2FsTmFtZSBjaGlsZCBpbiBwYXJlbnRDaGlsZHJlbikgewogICAgICAgIGlmIChjaGlsZC5uYW1lICE9ICdAbWV0aG9kcycgJiYKICAgICAgICAgICAgY2hpbGQubmFtZSAhPSAnQHR5cGVkZWZzJyAmJgogICAgICAgICAgICBjaGlsZC5uYW1lICE9ICdAZmllbGRzJyAmJgogICAgICAgICAgICBjaGlsZC5uYW1lICE9ICdAZ2V0dGVycycgJiYKICAgICAgICAgICAgY2hpbGQubmFtZSAhPSAnQHNldHRlcnMnICYmCiAgICAgICAgICAgIGNoaWxkLm5hbWUgIT0gJ0BmYWN0b3JpZXMnICYmCiAgICAgICAgICAgIGNoaWxkLm5hbWUgIT0gJ0Bjb25zdHJ1Y3RvcnMnKSB7CiAgICAgICAgICBib29sIGNoZWNrUmVmZXJlbmNlTm9kZSA9IHRydWU7CiAgICAgICAgICBpZiAoY2hpbGQucmVmZXJlbmNlID09IG51bGwpIHsKICAgICAgICAgICAgLy8gT0sgZm9yICJpZiBwcml2YXRlOiBVUkkgb2YgbGlicmFyeSIgcGFydCBvZiAiUXVhbGlmaWVkIG5hbWUiLi4uCiAgICAgICAgICAgIEl0ZXJhYmxlPENhbm9uaWNhbE5hbWU+IGNoaWxkcmVuID0gY2hpbGQuY2hpbGRyZW5Pck51bGw7CiAgICAgICAgICAgIGlmIChwYXJlbnQucGFyZW50ICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIGNoaWxkcmVuICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIGNoaWxkcmVuLmlzTm90RW1wdHkgJiYKICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZpcnN0Lm5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgICAgICAgICAgLy8gT0sgdGhlbi4KICAgICAgICAgICAgICBjaGVja1JlZmVyZW5jZU5vZGUgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBidWlsZENhbm9uaWNhbE5hbWVFcnJvcigKICAgICAgICAgICAgICAgICAgIk51bGwgcmVmZXJlbmNlICgke2NoaWxkLm5hbWV9KSAoJGNoaWxkKS4iLCBjaGlsZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaGVja1JlZmVyZW5jZU5vZGUpIHsKICAgICAgICAgICAgaWYgKGNoaWxkLnJlZmVyZW5jZS5jYW5vbmljYWxOYW1lICE9IGNoaWxkKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IENhbm9uaWNhbE5hbWVFcnJvcigKICAgICAgICAgICAgICAgICAgIkNhbm9uaWNhbCBuYW1lIGFuZCByZWZlcmVuY2UgZG9lc24ndCBhZ3JlZS4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2hpbGQucmVmZXJlbmNlLm5vZGUgPT0gbnVsbCkgewogICAgICAgICAgICAgIHRocm93IGJ1aWxkQ2Fub25pY2FsTmFtZUVycm9yKAogICAgICAgICAgICAgICAgICAiUmVmZXJlbmNlIGlzIG51bGwgKCR7Y2hpbGQubmFtZX0pICgkY2hpbGQpLiIsIGNoaWxkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfY2hlY2tDYW5vbmljYWxOYW1lQ2hpbGRyZW4oY2hpbGQpOwogICAgICB9CiAgICB9CiAgfQoKICBDYW5vbmljYWxOYW1lRXJyb3IgYnVpbGRDYW5vbmljYWxOYW1lRXJyb3IoCiAgICAgIFN0cmluZyBtZXNzYWdlLCBDYW5vbmljYWxOYW1lIHByb2JsZW1Ob2RlKSB7CiAgICAvLyBTcGVjaWFsLWNhc2UgbWlzc2luZyBzZGsgZW50cmllcyBhcyB0aGF0IGlzIHByb2JhYmx5IGEgY2hhbmdlIHRvIHRoZQogICAgLy8gcGxhdGZvcm0gLSB0aGF0J3Mgc29tZXRoaW5nIHdlIG1pZ2h0IHdhbnQgdG8gcmVhY3QgZGlmZmVyZW50bHkgdG8uCiAgICBTdHJpbmcgbGlicmFyeVVyaSA9IHByb2JsZW1Ob2RlPy5ub25Sb290VG9wPy5uYW1lID8/ICIiOwogICAgaWYgKGxpYnJhcnlVcmkuc3RhcnRzV2l0aCgiZGFydDoiKSkgewogICAgICByZXR1cm4gbmV3IENhbm9uaWNhbE5hbWVTZGtFcnJvcihtZXNzYWdlKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ2Fub25pY2FsTmFtZUVycm9yKG1lc3NhZ2UpOwogIH0KCiAgX0NvbXBvbmVudEluZGV4IF9yZWFkQ29tcG9uZW50SW5kZXgoaW50IGNvbXBvbmVudEZpbGVTaXplKSB7CiAgICBpbnQgc2F2ZWRCeXRlSW5kZXggPSBfYnl0ZU9mZnNldDsKCiAgICBfQ29tcG9uZW50SW5kZXggcmVzdWx0ID0gbmV3IF9Db21wb25lbnRJbmRleCgpOwoKICAgIC8vIFRoZXJlIGFyZSB0d28gZmllbGRzOiBmaWxlIHNpemUgYW5kIGxpYnJhcnkgY291bnQuCiAgICBfYnl0ZU9mZnNldCA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIGNvbXBvbmVudEZpbGVTaXplIC0gKDIpICogNDsKICAgIHJlc3VsdC5saWJyYXJ5Q291bnQgPSByZWFkVWludDMyKCk7CiAgICAvLyBMaWJyYXJ5IG9mZnNldHMgYXJlIHVzZWQgZm9yIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cywgc28gdGhlcmUgaXMgb25lIGV4dHJhCiAgICAvLyBlbGVtZW50IHRoYXQgdGhpcyB0aGUgZW5kIG9mZnNldCBvZiB0aGUgbGFzdCBsaWJyYXJ5CiAgICByZXN1bHQubGlicmFyeU9mZnNldHMgPSBuZXcgTGlzdDxpbnQ+KHJlc3VsdC5saWJyYXJ5Q291bnQgKyAxKTsKICAgIHJlc3VsdC5jb21wb25lbnRGaWxlU2l6ZUluQnl0ZXMgPSByZWFkVWludDMyKCk7CiAgICBpZiAocmVzdWx0LmNvbXBvbmVudEZpbGVTaXplSW5CeXRlcyAhPSBjb21wb25lbnRGaWxlU2l6ZSkgewogICAgICB0aHJvdyAnTWFsZm9ybWVkIGJpbmFyeTogVGhpcyBjb21wb25lbnQgZmlsZVwncyBjb21wb25lbnQgaW5kZXggaW5kaWNhdGVzIHRoYXQnCiAgICAgICAgICAnIHRoZSBmaWxlc2l6ZSBzaG91bGQgYmUgJGNvbXBvbmVudEZpbGVTaXplIGJ1dCBvdGhlciBjb21wb25lbnQgaW5kZXhlcycKICAgICAgICAgICcgaGFzIGluZGljYXRlZCB0aGF0IHRoZSBzaXplIHNob3VsZCBiZSAnCiAgICAgICAgICAnJHtyZXN1bHQuY29tcG9uZW50RmlsZVNpemVJbkJ5dGVzfS4nOwogICAgfQoKICAgIC8vIFNraXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBpbmRleC4KICAgIF9ieXRlT2Zmc2V0IC09CiAgICAgICAgKChyZXN1bHQubGlicmFyeUNvdW50ICsgMSkgKyBfQ29tcG9uZW50SW5kZXgubnVtYmVyT2ZGaXhlZEZpZWxkcykgKiA0OwoKICAgIC8vIE5vdyByZWFkIHRoZSBjb21wb25lbnQgaW5kZXguCiAgICByZXN1bHQuYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGUgPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICByZXN1bHQuYmluYXJ5T2Zmc2V0Rm9yQ2Fub25pY2FsTmFtZXMgPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICByZXN1bHQuYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2FkcyA9CiAgICAgICAgX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgcmVzdWx0LmJpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3MgPQogICAgICAgIF9jb21wb25lbnRTdGFydE9mZnNldCArIHJlYWRVaW50MzIoKTsKICAgIHJlc3VsdC5iaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZSA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIHJlYWRVaW50MzIoKTsKICAgIHJlc3VsdC5iaW5hcnlPZmZzZXRGb3JDb25zdGFudFRhYmxlID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgcmVzdWx0Lm1haW5NZXRob2RSZWZlcmVuY2UgPSByZWFkVWludDMyKCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5saWJyYXJ5Q291bnQgKyAxOyArK2kpIHsKICAgICAgcmVzdWx0LmxpYnJhcnlPZmZzZXRzW2ldID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgfQoKICAgIF9ieXRlT2Zmc2V0ID0gc2F2ZWRCeXRlSW5kZXg7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3JlYWRPbmVDb21wb25lbnRTb3VyY2UoQ29tcG9uZW50IGNvbXBvbmVudCwgaW50IGNvbXBvbmVudEZpbGVTaXplKSB7CiAgICBfY29tcG9uZW50U3RhcnRPZmZzZXQgPSBfYnl0ZU9mZnNldDsKCiAgICBmaW5hbCBpbnQgbWFnaWMgPSByZWFkVWludDMyKCk7CiAgICBpZiAobWFnaWMgIT0gVGFnLkNvbXBvbmVudEZpbGUpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignTm90IGEgLmRpbGwgZmlsZSAod3JvbmcgbWFnaWMgbnVtYmVyKS4nKTsKICAgIH0KCiAgICBmaW5hbCBpbnQgZm9ybWF0VmVyc2lvbiA9IHJlYWRVaW50MzIoKTsKICAgIGlmIChmb3JtYXRWZXJzaW9uICE9IFRhZy5CaW5hcnlGb3JtYXRWZXJzaW9uKSB7CiAgICAgIHRocm93IEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3IoZm9ybWF0VmVyc2lvbik7CiAgICB9CgogICAgLy8gUmVhZCBjb21wb25lbnQgaW5kZXggZnJvbSB0aGUgZW5kIG9mIHRoaXMgQ29tcG9uZW50RmlsZXMgc2VyaWFsaXplZCBkYXRhLgogICAgX0NvbXBvbmVudEluZGV4IGluZGV4ID0gX3JlYWRDb21wb25lbnRJbmRleChjb21wb25lbnRGaWxlU2l6ZSk7CgogICAgX2J5dGVPZmZzZXQgPSBpbmRleC5iaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZTsKICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSByZWFkVXJpVG9Tb3VyY2UoKTsKICAgIGNvbXBvbmVudC51cmlUb1NvdXJjZS5hZGRBbGwodXJpVG9Tb3VyY2UpOwoKICAgIF9ieXRlT2Zmc2V0ID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgY29tcG9uZW50RmlsZVNpemU7CiAgfQoKICB2b2lkIF9yZWFkT25lQ29tcG9uZW50KENvbXBvbmVudCBjb21wb25lbnQsIGludCBjb21wb25lbnRGaWxlU2l6ZSkgewogICAgX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CgogICAgZmluYWwgaW50IG1hZ2ljID0gcmVhZFVpbnQzMigpOwogICAgaWYgKG1hZ2ljICE9IFRhZy5Db21wb25lbnRGaWxlKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ05vdCBhIC5kaWxsIGZpbGUgKHdyb25nIG1hZ2ljIG51bWJlcikuJyk7CiAgICB9CgogICAgZmluYWwgaW50IGZvcm1hdFZlcnNpb24gPSByZWFkVWludDMyKCk7CiAgICBpZiAoZm9ybWF0VmVyc2lvbiAhPSBUYWcuQmluYXJ5Rm9ybWF0VmVyc2lvbikgewogICAgICB0aHJvdyBJbnZhbGlkS2VybmVsVmVyc2lvbkVycm9yKGZvcm1hdFZlcnNpb24pOwogICAgfQoKICAgIExpc3Q8U3RyaW5nPiBwcm9ibGVtc0FzSnNvbiA9IHJlYWRMaXN0T2ZTdHJpbmdzKCk7CiAgICBpZiAocHJvYmxlbXNBc0pzb24gIT0gbnVsbCkgewogICAgICBjb21wb25lbnQucHJvYmxlbXNBc0pzb24gPz89IDxTdHJpbmc+W107CiAgICAgIGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbi5hZGRBbGwocHJvYmxlbXNBc0pzb24pOwogICAgfQoKICAgIC8vIFJlYWQgY29tcG9uZW50IGluZGV4IGZyb20gdGhlIGVuZCBvZiB0aGlzIENvbXBvbmVudEZpbGVzIHNlcmlhbGl6ZWQgZGF0YS4KICAgIF9Db21wb25lbnRJbmRleCBpbmRleCA9IF9yZWFkQ29tcG9uZW50SW5kZXgoY29tcG9uZW50RmlsZVNpemUpOwoKICAgIF9ieXRlT2Zmc2V0ID0gaW5kZXguYmluYXJ5T2Zmc2V0Rm9yU3RyaW5nVGFibGU7CiAgICByZWFkU3RyaW5nVGFibGUoX3N0cmluZ1RhYmxlKTsKCiAgICBfYnl0ZU9mZnNldCA9IGluZGV4LmJpbmFyeU9mZnNldEZvckNhbm9uaWNhbE5hbWVzOwogICAgcmVhZExpbmtUYWJsZShjb21wb25lbnQucm9vdCk7CgogICAgLy8gVE9ETyhhbGV4bWFya292KTogcmV2ZXJzZSBtZXRhZGF0YSBtYXBwaW5ncyBhbmQgcmVhZCBmb3J3YXJkcwogICAgX2J5dGVPZmZzZXQgPSBpbmRleC5iaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZTsgLy8gUmVhZCBiYWNrd2FyZHMuCiAgICBfcmVhZE1ldGFkYXRhTWFwcGluZ3MoY29tcG9uZW50LCBpbmRleC5iaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzKTsKCiAgICBfYXNzb2NpYXRlTWV0YWRhdGEoY29tcG9uZW50LCBfY29tcG9uZW50U3RhcnRPZmZzZXQpOwoKICAgIF9ieXRlT2Zmc2V0ID0gaW5kZXguYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGU7CiAgICBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gcmVhZFVyaVRvU291cmNlKCk7CiAgICBjb21wb25lbnQudXJpVG9Tb3VyY2UuYWRkQWxsKHVyaVRvU291cmNlKTsKCiAgICBfYnl0ZU9mZnNldCA9IGluZGV4LmJpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGU7CiAgICByZWFkQ29uc3RhbnRUYWJsZSgpOwoKICAgIGludCBudW1iZXJPZkxpYnJhcmllcyA9IGluZGV4LmxpYnJhcnlDb3VudDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZMaWJyYXJpZXM7ICsraSkgewogICAgICBfYnl0ZU9mZnNldCA9IGluZGV4LmxpYnJhcnlPZmZzZXRzW2ldOwogICAgICByZWFkTGlicmFyeShjb21wb25lbnQsIGluZGV4LmxpYnJhcnlPZmZzZXRzW2kgKyAxXSk7CiAgICB9CgogICAgdmFyIG1haW5NZXRob2QgPQogICAgICAgIGdldE1lbWJlclJlZmVyZW5jZUZyb21JbnQoaW5kZXgubWFpbk1ldGhvZFJlZmVyZW5jZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIGNvbXBvbmVudC5tYWluTWV0aG9kTmFtZSA/Pz0gbWFpbk1ldGhvZDsKCiAgICBfYnl0ZU9mZnNldCA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIGNvbXBvbmVudEZpbGVTaXplOwogIH0KCiAgLy8vIFJlYWQgYSBsaXN0IG9mIHN0cmluZ3MuIElmIHRoZSBsaXN0IGlzIGVtcHR5LCBbbnVsbF0gaXMgcmV0dXJuZWQuCiAgTGlzdDxTdHJpbmc+IHJlYWRMaXN0T2ZTdHJpbmdzKCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiBudWxsOwogICAgTGlzdDxTdHJpbmc+IHN0cmluZ3MgPQogICAgICAgIG5ldyBMaXN0PFN0cmluZz4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBTdHJpbmcgcyA9IGNvbnN0IFV0ZjhEZWNvZGVyKCkuY29udmVydChyZWFkQnl0ZUxpc3QoKSk7CiAgICAgIHN0cmluZ3NbaV0gPSBzOwogICAgfQogICAgcmV0dXJuIHN0cmluZ3M7CiAgfQoKICBNYXA8VXJpLCBTb3VyY2U+IHJlYWRVcmlUb1NvdXJjZSgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVWludDMyKCk7CgogICAgLy8gUmVhZCBkYXRhLgogICAgX3NvdXJjZVVyaVRhYmxlLmxlbmd0aCA9IGxlbmd0aDsKICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSA8VXJpLCBTb3VyY2U+e307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIExpc3Q8aW50PiB1cmlCeXRlcyA9IHJlYWRCeXRlTGlzdCgpOwogICAgICBVcmkgdXJpID0gdXJpQnl0ZXMuaXNFbXB0eQogICAgICAgICAgPyBudWxsCiAgICAgICAgICA6IFVyaS5wYXJzZShjb25zdCBVdGY4RGVjb2RlcigpLmNvbnZlcnQodXJpQnl0ZXMpKTsKICAgICAgX3NvdXJjZVVyaVRhYmxlW2ldID0gdXJpOwogICAgICBMaXN0PGludD4gc291cmNlQ29kZSA9IHJlYWRCeXRlTGlzdCgpOwogICAgICBpbnQgbGluZUNvdW50ID0gcmVhZFVJbnQoKTsKICAgICAgTGlzdDxpbnQ+IGxpbmVTdGFydHMgPSBuZXcgTGlzdDxpbnQ+KGxpbmVDb3VudCk7CiAgICAgIGludCBwcmV2aW91c0xpbmVTdGFydCA9IDA7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGluZUNvdW50OyArK2opIHsKICAgICAgICBpbnQgbGluZVN0YXJ0ID0gcmVhZFVJbnQoKSArIHByZXZpb3VzTGluZVN0YXJ0OwogICAgICAgIGxpbmVTdGFydHNbal0gPSBsaW5lU3RhcnQ7CiAgICAgICAgcHJldmlvdXNMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7CiAgICAgIH0KICAgICAgTGlzdDxpbnQ+IGltcG9ydFVyaUJ5dGVzID0gcmVhZEJ5dGVMaXN0KCk7CiAgICAgIFVyaSBpbXBvcnRVcmkgPSBpbXBvcnRVcmlCeXRlcy5pc0VtcHR5CiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogVXJpLnBhcnNlKGNvbnN0IFV0ZjhEZWNvZGVyKCkuY29udmVydChpbXBvcnRVcmlCeXRlcykpOwogICAgICB1cmlUb1NvdXJjZVt1cmldID0gbmV3IFNvdXJjZShsaW5lU3RhcnRzLCBzb3VyY2VDb2RlLCBpbXBvcnRVcmksIHVyaSk7CiAgICB9CgogICAgLy8gUmVhZCBpbmRleC4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgcmVhZFVpbnQzMigpOwogICAgfQogICAgcmV0dXJuIHVyaVRvU291cmNlOwogIH0KCiAgQ2Fub25pY2FsTmFtZSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpIHsKICAgIHZhciBpbmRleCA9IHJlYWRVSW50KCk7CiAgICBpZiAoaW5kZXggPT0gMCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2xpbmtUYWJsZVtpbmRleCAtIDFdOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXRDYW5vbmljYWxOYW1lUmVmZXJlbmNlRnJvbUludChpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA9PSAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfbGlua1RhYmxlW2luZGV4IC0gMV07CiAgfQoKICBSZWZlcmVuY2UgcmVhZExpYnJhcnlSZWZlcmVuY2Uoe2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIENhbm9uaWNhbE5hbWUgY2Fub25pY2FsTmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICBpZiAoY2Fub25pY2FsTmFtZSAhPSBudWxsKSByZXR1cm4gY2Fub25pY2FsTmFtZS5nZXRSZWZlcmVuY2UoKTsKICAgIGlmIChhbGxvd051bGwpIHJldHVybiBudWxsOwogICAgdGhyb3cgJ0V4cGVjdGVkIGEgbGlicmFyeSByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJzsKICB9CgogIExpYnJhcnlEZXBlbmRlbmN5IHJlYWRMaWJyYXJ5RGVwZW5kZW5jeVJlZmVyZW5jZSgpIHsKICAgIGludCBpbmRleCA9IHJlYWRVSW50KCk7CiAgICByZXR1cm4gX2N1cnJlbnRMaWJyYXJ5LmRlcGVuZGVuY2llc1tpbmRleF07CiAgfQoKICBSZWZlcmVuY2UgcmVhZENsYXNzUmVmZXJlbmNlKHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICB2YXIgbmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICBpZiAobmFtZSA9PSBudWxsICYmICFhbGxvd051bGwpIHsKICAgICAgdGhyb3cgJ0V4cGVjdGVkIGEgY2xhc3MgcmVmZXJlbmNlIHRvIGJlIHZhbGlkIGJ1dCB3YXMgYG51bGxgLic7CiAgICB9CiAgICByZXR1cm4gbmFtZT8uZ2V0UmVmZXJlbmNlKCk7CiAgfQoKICBSZWZlcmVuY2UgcmVhZE1lbWJlclJlZmVyZW5jZSh7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgdmFyIG5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgaWYgKG5hbWUgPT0gbnVsbCAmJiAhYWxsb3dOdWxsKSB7CiAgICAgIHRocm93ICdFeHBlY3RlZCBhIG1lbWJlciByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJzsKICAgIH0KICAgIHJldHVybiBuYW1lPy5nZXRSZWZlcmVuY2UoKTsKICB9CgogIFJlZmVyZW5jZSBnZXRNZW1iZXJSZWZlcmVuY2VGcm9tSW50KGludCBpbmRleCwge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIHZhciBuYW1lID0gZ2V0Q2Fub25pY2FsTmFtZVJlZmVyZW5jZUZyb21JbnQoaW5kZXgpOwogICAgaWYgKG5hbWUgPT0gbnVsbCAmJiAhYWxsb3dOdWxsKSB7CiAgICAgIHRocm93ICdFeHBlY3RlZCBhIG1lbWJlciByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJzsKICAgIH0KICAgIHJldHVybiBuYW1lPy5nZXRSZWZlcmVuY2UoKTsKICB9CgogIFJlZmVyZW5jZSByZWFkVHlwZWRlZlJlZmVyZW5jZSgpIHsKICAgIHJldHVybiByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpPy5nZXRSZWZlcmVuY2UoKTsKICB9CgogIE5hbWUgcmVhZE5hbWUoKSB7CiAgICBTdHJpbmcgdGV4dCA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgIGlmICh0ZXh0LmlzTm90RW1wdHkgJiYgdGV4dFswXSA9PSAnXycpIHsKICAgICAgcmV0dXJuIG5ldyBOYW1lLmJ5UmVmZXJlbmNlKHRleHQsIHJlYWRMaWJyYXJ5UmVmZXJlbmNlKCkpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBOYW1lKHRleHQpOwogICAgfQogIH0KCiAgTGlicmFyeSByZWFkTGlicmFyeShDb21wb25lbnQgY29tcG9uZW50LCBpbnQgZW5kT2Zmc2V0KSB7CiAgICAvLyBSZWFkIGluZGV4LgogICAgaW50IHNhdmVkQnl0ZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwoKICAgIC8vIFRoZXJlIGlzIGEgZmllbGQgZm9yIHRoZSBwcm9jZWR1cmUgY291bnQuCiAgICBfYnl0ZU9mZnNldCA9IGVuZE9mZnNldCAtICgxKSAqIDQ7CiAgICBpbnQgcHJvY2VkdXJlQ291bnQgPSByZWFkVWludDMyKCk7CiAgICBMaXN0PGludD4gcHJvY2VkdXJlT2Zmc2V0cyA9IG5ldyBMaXN0PGludD4ocHJvY2VkdXJlQ291bnQgKyAxKTsKCiAgICAvLyBUaGVyZSBpcyBhIGZpZWxkIGZvciB0aGUgcHJvY2VkdXJlIGNvdW50LCB0aGF0IG51bWJlciArIDEgKGZvciB0aGUgZW5kKQogICAgLy8gb2Zmc2V0cywgYW5kIHRoZW4gdGhlIGNsYXNzIGNvdW50IChpLmUuIHByb2NlZHVyZSBjb3VudCArIDMgZmllbGRzKS4KICAgIF9ieXRlT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gKHByb2NlZHVyZUNvdW50ICsgMykgKiA0OwogICAgaW50IGNsYXNzQ291bnQgPSByZWFkVWludDMyKCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2NlZHVyZUNvdW50ICsgMTsgaSsrKSB7CiAgICAgIHByb2NlZHVyZU9mZnNldHNbaV0gPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICB9CiAgICBMaXN0PGludD4gY2xhc3NPZmZzZXRzID0gbmV3IExpc3Q8aW50PihjbGFzc0NvdW50ICsgMSk7CgogICAgLy8gVGhlcmUgaXMgYSBmaWVsZCBmb3IgdGhlIHByb2NlZHVyZSBjb3VudCwgdGhhdCBudW1iZXIgKyAxIChmb3IgdGhlIGVuZCkKICAgIC8vIG9mZnNldHMsIHRoZW4gdGhlIGNsYXNzIGNvdW50IGFuZCB0aGF0IG51bWJlciArIDEgKGZvciB0aGUgZW5kKSBvZmZzZXRzLgogICAgLy8gKGkuZS4gcHJvY2VkdXJlIGNvdW50ICsgY2xhc3MgY291bnQgKyA0IGZpZWxkcykuCiAgICBfYnl0ZU9mZnNldCA9IGVuZE9mZnNldCAtIChwcm9jZWR1cmVDb3VudCArIGNsYXNzQ291bnQgKyA0KSAqIDQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzQ291bnQgKyAxOyBpKyspIHsKICAgICAgY2xhc3NPZmZzZXRzW2ldID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgfQogICAgX2J5dGVPZmZzZXQgPSBzYXZlZEJ5dGVPZmZzZXQ7CgogICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IChmbGFncyAmIExpYnJhcnkuRXh0ZXJuYWxGbGFnKSAhPSAwOwogICAgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbiA9ICFpc0V4dGVybmFsOwoKICAgIGludCBsYW5ndWFnZVZlcnNpb25NYWpvciA9IHJlYWRVSW50KCk7CiAgICBpbnQgbGFuZ3VhZ2VWZXJzaW9uTWlub3IgPSByZWFkVUludCgpOwoKICAgIHZhciBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIFJlZmVyZW5jZSByZWZlcmVuY2UgPSBjYW5vbmljYWxOYW1lLmdldFJlZmVyZW5jZSgpOwogICAgTGlicmFyeSBsaWJyYXJ5ID0gcmVmZXJlbmNlLm5vZGU7CiAgICBpZiAoYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykgewogICAgICBsaWJyYXJ5ID0gbnVsbDsKICAgIH0KICAgIGJvb2wgc2hvdWxkV3JpdGVEYXRhID0gbGlicmFyeSA9PSBudWxsIHx8IF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb247CiAgICBpZiAobGlicmFyeSA9PSBudWxsKSB7CiAgICAgIGxpYnJhcnkgPQogICAgICAgICAgbmV3IExpYnJhcnkoVXJpLnBhcnNlKGNhbm9uaWNhbE5hbWUubmFtZSksIHJlZmVyZW5jZTogcmVmZXJlbmNlKTsKICAgICAgY29tcG9uZW50LmxpYnJhcmllcy5hZGQobGlicmFyeS4ucGFyZW50ID0gY29tcG9uZW50KTsKICAgIH0KICAgIF9jdXJyZW50TGlicmFyeSA9IGxpYnJhcnk7CiAgICBTdHJpbmcgbmFtZSA9IHJlYWRTdHJpbmdPck51bGxJZkVtcHR5KCk7CgogICAgLy8gVE9ETyhqZW5zaik6IFdlIGN1cnJlbnRseSBzYXZlIChhbG1vc3QgdGhlIHNhbWUpIHVyaSB0d2ljZS4KICAgIFVyaSBmaWxlVXJpID0gcmVhZFVyaVJlZmVyZW5jZSgpOwoKICAgIExpc3Q8U3RyaW5nPiBwcm9ibGVtc0FzSnNvbiA9IHJlYWRMaXN0T2ZTdHJpbmdzKCk7CgogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBsaWJyYXJ5LmZsYWdzID0gZmxhZ3M7CiAgICAgIGxpYnJhcnkuc2V0TGFuZ3VhZ2VWZXJzaW9uKGxhbmd1YWdlVmVyc2lvbk1ham9yLCBsYW5ndWFnZVZlcnNpb25NaW5vcik7CiAgICAgIGxpYnJhcnkubmFtZSA9IG5hbWU7CiAgICAgIGxpYnJhcnkuZmlsZVVyaSA9IGZpbGVVcmk7CiAgICAgIGxpYnJhcnkucHJvYmxlbXNBc0pzb24gPSBwcm9ibGVtc0FzSnNvbjsKICAgIH0KCiAgICBhc3NlcnQoKCkgewogICAgICBkZWJ1Z1BhdGguYWRkKGxpYnJhcnkubmFtZSA/PyBsaWJyYXJ5LmltcG9ydFVyaT8udG9TdHJpbmcoKSA/PyAnbGlicmFyeScpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CgogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBfZmlsbFRyZWVOb2RlTGlzdCgKICAgICAgICAgIGxpYnJhcnkuYW5ub3RhdGlvbnMsIChpbmRleCkgPT4gcmVhZEV4cHJlc3Npb24oKSwgbGlicmFyeSk7CiAgICB9IGVsc2UgewogICAgICBfc2tpcE5vZGVMaXN0KHJlYWRFeHByZXNzaW9uKTsKICAgIH0KICAgIF9yZWFkTGlicmFyeURlcGVuZGVuY2llcyhsaWJyYXJ5KTsKICAgIF9yZWFkQWRkaXRpb25hbEV4cG9ydHMobGlicmFyeSk7CiAgICBfcmVhZExpYnJhcnlQYXJ0cyhsaWJyYXJ5KTsKICAgIF9tZXJnZU5hbWVkTm9kZUxpc3QobGlicmFyeS50eXBlZGVmcywgKGluZGV4KSA9PiByZWFkVHlwZWRlZigpLCBsaWJyYXJ5KTsKCiAgICBfbWVyZ2VOYW1lZE5vZGVMaXN0KGxpYnJhcnkuY2xhc3NlcywgKGluZGV4KSB7CiAgICAgIF9ieXRlT2Zmc2V0ID0gY2xhc3NPZmZzZXRzW2luZGV4XTsKICAgICAgcmV0dXJuIHJlYWRDbGFzcyhjbGFzc09mZnNldHNbaW5kZXggKyAxXSk7CiAgICB9LCBsaWJyYXJ5KTsKICAgIF9ieXRlT2Zmc2V0ID0gY2xhc3NPZmZzZXRzLmxhc3Q7CiAgICBfbWVyZ2VOYW1lZE5vZGVMaXN0KGxpYnJhcnkuZmllbGRzLCAoaW5kZXgpID0+IHJlYWRGaWVsZCgpLCBsaWJyYXJ5KTsKICAgIF9tZXJnZU5hbWVkTm9kZUxpc3QobGlicmFyeS5wcm9jZWR1cmVzLCAoaW5kZXgpIHsKICAgICAgX2J5dGVPZmZzZXQgPSBwcm9jZWR1cmVPZmZzZXRzW2luZGV4XTsKICAgICAgcmV0dXJuIHJlYWRQcm9jZWR1cmUocHJvY2VkdXJlT2Zmc2V0c1tpbmRleCArIDFdKTsKICAgIH0sIGxpYnJhcnkpOwogICAgX2J5dGVPZmZzZXQgPSBwcm9jZWR1cmVPZmZzZXRzLmxhc3Q7CgogICAgYXNzZXJ0KCgoXykgPT4gdHJ1ZSkoZGVidWdQYXRoLnJlbW92ZUxhc3QoKSkpOwogICAgX2N1cnJlbnRMaWJyYXJ5ID0gbnVsbDsKICAgIHJldHVybiBsaWJyYXJ5OwogIH0KCiAgdm9pZCBfcmVhZExpYnJhcnlEZXBlbmRlbmNpZXMoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGxpYnJhcnkuZGVwZW5kZW5jaWVzLmxlbmd0aCA9IGxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgbGlicmFyeS5kZXBlbmRlbmNpZXNbaV0gPSByZWFkTGlicmFyeURlcGVuZGVuY3kobGlicmFyeSk7CiAgICB9CiAgfQoKICBMaWJyYXJ5RGVwZW5kZW5jeSByZWFkTGlicmFyeURlcGVuZGVuY3koTGlicmFyeSBsaWJyYXJ5KSB7CiAgICB2YXIgZmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIHZhciBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICB2YXIgYW5ub3RhdGlvbnMgPSByZWFkRXhwcmVzc2lvbkxpc3QoKTsKICAgIHZhciB0YXJnZXRMaWJyYXJ5ID0gcmVhZExpYnJhcnlSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKTsKICAgIHZhciBwcmVmaXhOYW1lID0gcmVhZFN0cmluZ09yTnVsbElmRW1wdHkoKTsKICAgIHZhciBuYW1lcyA9IHJlYWRDb21iaW5hdG9yTGlzdCgpOwogICAgcmV0dXJuIG5ldyBMaWJyYXJ5RGVwZW5kZW5jeS5ieVJlZmVyZW5jZSgKICAgICAgICBmbGFncywgYW5ub3RhdGlvbnMsIHRhcmdldExpYnJhcnksIHByZWZpeE5hbWUsIG5hbWVzKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0CiAgICAgIC4ucGFyZW50ID0gbGlicmFyeTsKICB9CgogIHZvaWQgX3JlYWRBZGRpdGlvbmFsRXhwb3J0cyhMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGludCBudW1FeHBvcnRlZFJlZmVyZW5jZSA9IHJlYWRVSW50KCk7CiAgICBpZiAobnVtRXhwb3J0ZWRSZWZlcmVuY2UgIT0gMCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUV4cG9ydGVkUmVmZXJlbmNlOyBpKyspIHsKICAgICAgICBDYW5vbmljYWxOYW1lIGV4cG9ydGVkTmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZSA9IGV4cG9ydGVkTmFtZS5nZXRSZWZlcmVuY2UoKTsKICAgICAgICBsaWJyYXJ5LmFkZGl0aW9uYWxFeHBvcnRzLmFkZChyZWZlcmVuY2UpOwogICAgICB9CiAgICB9CiAgfQoKICBDb21iaW5hdG9yIHJlYWRDb21iaW5hdG9yKCkgewogICAgdmFyIGlzU2hvdyA9IHJlYWRCeXRlKCkgPT0gMTsKICAgIHZhciBuYW1lcyA9IHJlYWRTdHJpbmdSZWZlcmVuY2VMaXN0KCk7CiAgICByZXR1cm4gbmV3IENvbWJpbmF0b3IoaXNTaG93LCBuYW1lcyk7CiAgfQoKICBMaXN0PENvbWJpbmF0b3I+IHJlYWRDb21iaW5hdG9yTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxDb21iaW5hdG9yPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PENvbWJpbmF0b3I+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gcmVhZENvbWJpbmF0b3IoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9yZWFkTGlicmFyeVBhcnRzKExpYnJhcnkgbGlicmFyeSkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBsaWJyYXJ5LnBhcnRzLmxlbmd0aCA9IGxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgbGlicmFyeS5wYXJ0c1tpXSA9IHJlYWRMaWJyYXJ5UGFydChsaWJyYXJ5KTsKICAgIH0KICB9CgogIExpYnJhcnlQYXJ0IHJlYWRMaWJyYXJ5UGFydChMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSByZWFkRXhwcmVzc2lvbkxpc3QoKTsKICAgIFN0cmluZyBwYXJ0VXJpID0gcmVhZFN0cmluZ1JlZmVyZW5jZSgpOwogICAgcmV0dXJuIG5ldyBMaWJyYXJ5UGFydChhbm5vdGF0aW9ucywgcGFydFVyaSkuLnBhcmVudCA9IGxpYnJhcnk7CiAgfQoKICBUeXBlZGVmIHJlYWRUeXBlZGVmKCkgewogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgdmFyIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBUeXBlZGVmIG5vZGUgPSByZWZlcmVuY2Uubm9kZTsKICAgIGlmIChhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzKSB7CiAgICAgIG5vZGUgPSBudWxsOwogICAgfQogICAgYm9vbCBzaG91bGRXcml0ZURhdGEgPSBub2RlID09IG51bGwgfHwgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbjsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgbm9kZSA9IG5ldyBUeXBlZGVmKG51bGwsIG51bGwsIHJlZmVyZW5jZTogcmVmZXJlbmNlKTsKICAgIH0KICAgIFVyaSBmaWxlVXJpID0gcmVhZFVyaVJlZmVyZW5jZSgpOwogICAgaW50IGZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBTdHJpbmcgbmFtZSA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgIG5vZGUuYW5ub3RhdGlvbnMgPSByZWFkQW5ub3RhdGlvbkxpc3Qobm9kZSk7CiAgICByZWFkQW5kUHVzaFR5cGVQYXJhbWV0ZXJMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMsIG5vZGUpOwogICAgdmFyIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgIHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3Qobm9kZS50eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlLCBub2RlKTsKICAgIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMuYWRkQWxsKHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKSk7CiAgICBub2RlLm5hbWVkUGFyYW1ldGVycy5hZGRBbGwocmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpKTsKICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGggPSAwOwogICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSAwOwogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBub2RlLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICBub2RlLm5hbWUgPSBuYW1lOwogICAgICBub2RlLmZpbGVVcmkgPSBmaWxlVXJpOwogICAgICBub2RlLnR5cGUgPSB0eXBlOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBDbGFzcyByZWFkQ2xhc3MoaW50IGVuZE9mZnNldCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBhc3NlcnQodGFnID09IFRhZy5DbGFzcyk7CgogICAgLy8gUmVhZCBpbmRleC4KICAgIGludCBzYXZlZEJ5dGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIC8vIFRoZXJlIGlzIGEgZmllbGQgZm9yIHRoZSBwcm9jZWR1cmUgY291bnQuCiAgICBfYnl0ZU9mZnNldCA9IGVuZE9mZnNldCAtICgxKSAqIDQ7CiAgICBpbnQgcHJvY2VkdXJlQ291bnQgPSByZWFkVWludDMyKCk7CiAgICBMaXN0PGludD4gcHJvY2VkdXJlT2Zmc2V0cyA9IG5ldyBMaXN0PGludD4ocHJvY2VkdXJlQ291bnQgKyAxKTsKICAgIC8vIFRoZXJlIGlzIGEgZmllbGQgZm9yIHRoZSBwcm9jZWR1cmUgY291bnQsIHRoYXQgbnVtYmVyICsgMSAoZm9yIHRoZSBlbmQpCiAgICAvLyBvZmZzZXRzIChpLmUuIHByb2NlZHVyZSBjb3VudCArIDIgZmllbGRzKS4KICAgIF9ieXRlT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gKHByb2NlZHVyZUNvdW50ICsgMikgKiA0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZWR1cmVDb3VudCArIDE7IGkrKykgewogICAgICBwcm9jZWR1cmVPZmZzZXRzW2ldID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgfQogICAgX2J5dGVPZmZzZXQgPSBzYXZlZEJ5dGVPZmZzZXQ7CgogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgdmFyIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBDbGFzcyBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICBpZiAoYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykgewogICAgICBub2RlID0gbnVsbDsKICAgIH0KICAgIGJvb2wgc2hvdWxkV3JpdGVEYXRhID0gbm9kZSA9PSBudWxsIHx8IF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb247CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIG5vZGUgPSBuZXcgQ2xhc3MocmVmZXJlbmNlOiByZWZlcmVuY2UpLi5sZXZlbCA9IENsYXNzTGV2ZWwuVGVtcG9yYXJ5OwogICAgfQoKICAgIHZhciBmaWxlVXJpID0gcmVhZFVyaVJlZmVyZW5jZSgpOwogICAgbm9kZS5zdGFydEZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBub2RlLmZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBub2RlLmZpbGVFbmRPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBpbnQgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgbm9kZS5mbGFncyA9IGZsYWdzICYgfkNsYXNzLkxldmVsTWFzazsKICAgIGludCBsZXZlbEluZGV4ID0gZmxhZ3MgJiBDbGFzcy5MZXZlbE1hc2s7CiAgICB2YXIgbGV2ZWwgPSBDbGFzc0xldmVsLnZhbHVlc1tsZXZlbEluZGV4ICsgMV07CiAgICBpZiAobGV2ZWwuaW5kZXggPj0gbm9kZS5sZXZlbC5pbmRleCkgewogICAgICBub2RlLmxldmVsID0gbGV2ZWw7CiAgICB9CiAgICB2YXIgbmFtZSA9IHJlYWRTdHJpbmdPck51bGxJZkVtcHR5KCk7CiAgICB2YXIgYW5ub3RhdGlvbnMgPSByZWFkQW5ub3RhdGlvbkxpc3Qobm9kZSk7CiAgICBhc3NlcnQoKCkgewogICAgICBkZWJ1Z1BhdGguYWRkKG5vZGUubmFtZSA/PyAnbm9ybWFsLWNsYXNzJyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSgpKTsKICAgIHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3Qobm9kZS50eXBlUGFyYW1ldGVycywgbm9kZSk7CiAgICB2YXIgc3VwZXJ0eXBlID0gcmVhZFN1cGVydHlwZU9wdGlvbigpOwogICAgdmFyIG1peGVkSW5UeXBlID0gcmVhZFN1cGVydHlwZU9wdGlvbigpOwogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBfZmlsbE5vblRyZWVOb2RlTGlzdChub2RlLmltcGxlbWVudGVkVHlwZXMsIHJlYWRTdXBlcnR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgX3NraXBOb2RlTGlzdChyZWFkU3VwZXJ0eXBlKTsKICAgIH0KICAgIF9tZXJnZU5hbWVkTm9kZUxpc3Qobm9kZS5maWVsZHMsIChpbmRleCkgPT4gcmVhZEZpZWxkKCksIG5vZGUpOwogICAgX21lcmdlTmFtZWROb2RlTGlzdChub2RlLmNvbnN0cnVjdG9ycywgKGluZGV4KSA9PiByZWFkQ29uc3RydWN0b3IoKSwgbm9kZSk7CgogICAgX21lcmdlTmFtZWROb2RlTGlzdChub2RlLnByb2NlZHVyZXMsIChpbmRleCkgewogICAgICBfYnl0ZU9mZnNldCA9IHByb2NlZHVyZU9mZnNldHNbaW5kZXhdOwogICAgICByZXR1cm4gcmVhZFByb2NlZHVyZShwcm9jZWR1cmVPZmZzZXRzW2luZGV4ICsgMV0pOwogICAgfSwgbm9kZSk7CiAgICBfYnl0ZU9mZnNldCA9IHByb2NlZHVyZU9mZnNldHMubGFzdDsKICAgIF9tZXJnZU5hbWVkTm9kZUxpc3Qobm9kZS5yZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMsCiAgICAgICAgKGluZGV4KSA9PiByZWFkUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoKSwgbm9kZSk7CiAgICB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoID0gMDsKICAgIGFzc2VydChkZWJ1Z1BhdGgucmVtb3ZlTGFzdCgpICE9IG51bGwpOwogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBub2RlLm5hbWUgPSBuYW1lOwogICAgICBub2RlLmZpbGVVcmkgPSBmaWxlVXJpOwogICAgICBub2RlLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CiAgICAgIG5vZGUuc3VwZXJ0eXBlID0gc3VwZXJ0eXBlOwogICAgICBub2RlLm1peGVkSW5UeXBlID0gbWl4ZWRJblR5cGU7CiAgICB9CgogICAgX2J5dGVPZmZzZXQgPSBlbmRPZmZzZXQ7CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBpbnQgZ2V0QW5kUmVzZXRUcmFuc2Zvcm1lckZsYWdzKCkgewogICAgaW50IGZsYWdzID0gX3RyYW5zZm9ybWVyRmxhZ3M7CiAgICBfdHJhbnNmb3JtZXJGbGFncyA9IDA7CiAgICByZXR1cm4gZmxhZ3M7CiAgfQoKICAvLy8gQWRkcyB0aGUgZ2l2ZW4gZmxhZyB0byB0aGUgY3VycmVudCBbTWVtYmVyLnRyYW5zZm9ybWVyRmxhZ3NdLgogIHZvaWQgYWRkVHJhbnNmb3JtZXJGbGFnKGludCBmbGFncykgewogICAgX3RyYW5zZm9ybWVyRmxhZ3MgfD0gZmxhZ3M7CiAgfQoKICBGaWVsZCByZWFkRmllbGQoKSB7CiAgICBpbnQgdGFnID0gcmVhZEJ5dGUoKTsKICAgIGFzc2VydCh0YWcgPT0gVGFnLkZpZWxkKTsKICAgIHZhciBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIHZhciByZWZlcmVuY2UgPSBjYW5vbmljYWxOYW1lLmdldFJlZmVyZW5jZSgpOwogICAgRmllbGQgbm9kZSA9IHJlZmVyZW5jZS5ub2RlOwogICAgaWYgKGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXMpIHsKICAgICAgbm9kZSA9IG51bGw7CiAgICB9CiAgICBib29sIHNob3VsZFdyaXRlRGF0YSA9IG5vZGUgPT0gbnVsbCB8fCBfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uOwogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICBub2RlID0gbmV3IEZpZWxkKG51bGwsIHJlZmVyZW5jZTogcmVmZXJlbmNlKTsKICAgIH0KICAgIHZhciBmaWxlVXJpID0gcmVhZFVyaVJlZmVyZW5jZSgpOwogICAgaW50IGZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBpbnQgZmlsZUVuZE9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIGludCBmbGFncyA9IHJlYWRVSW50KCk7CiAgICB2YXIgbmFtZSA9IHJlYWROYW1lKCk7CiAgICB2YXIgYW5ub3RhdGlvbnMgPSByZWFkQW5ub3RhdGlvbkxpc3Qobm9kZSk7CiAgICBhc3NlcnQoKCkgewogICAgICBkZWJ1Z1BhdGguYWRkKG5vZGUubmFtZT8ubmFtZSA/PyAnZmllbGQnKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogICAgdmFyIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgIHZhciBpbml0aWFsaXplciA9IHJlYWRFeHByZXNzaW9uT3B0aW9uKCk7CiAgICBpbnQgdHJhbnNmb3JtZXJGbGFncyA9IGdldEFuZFJlc2V0VHJhbnNmb3JtZXJGbGFncygpOwogICAgYXNzZXJ0KCgoXykgPT4gdHJ1ZSkoZGVidWdQYXRoLnJlbW92ZUxhc3QoKSkpOwogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBub2RlLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICBub2RlLmZpbGVFbmRPZmZzZXQgPSBmaWxlRW5kT2Zmc2V0OwogICAgICBub2RlLmZsYWdzID0gZmxhZ3M7CiAgICAgIG5vZGUubmFtZSA9IG5hbWU7CiAgICAgIG5vZGUuZmlsZVVyaSA9IGZpbGVVcmk7CiAgICAgIG5vZGUuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uczsKICAgICAgbm9kZS50eXBlID0gdHlwZTsKICAgICAgbm9kZS5pbml0aWFsaXplciA9IGluaXRpYWxpemVyOwogICAgICBub2RlLmluaXRpYWxpemVyPy5wYXJlbnQgPSBub2RlOwogICAgICBub2RlLnRyYW5zZm9ybWVyRmxhZ3MgPSB0cmFuc2Zvcm1lckZsYWdzOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBDb25zdHJ1Y3RvciByZWFkQ29uc3RydWN0b3IoKSB7CiAgICBpbnQgdGFnID0gcmVhZEJ5dGUoKTsKICAgIGFzc2VydCh0YWcgPT0gVGFnLkNvbnN0cnVjdG9yKTsKICAgIHZhciBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIHZhciByZWZlcmVuY2UgPSBjYW5vbmljYWxOYW1lLmdldFJlZmVyZW5jZSgpOwogICAgQ29uc3RydWN0b3Igbm9kZSA9IHJlZmVyZW5jZS5ub2RlOwogICAgaWYgKGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXMpIHsKICAgICAgbm9kZSA9IG51bGw7CiAgICB9CiAgICBib29sIHNob3VsZFdyaXRlRGF0YSA9IG5vZGUgPT0gbnVsbCB8fCBfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uOwogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICBub2RlID0gbmV3IENvbnN0cnVjdG9yKG51bGwsIHJlZmVyZW5jZTogcmVmZXJlbmNlKTsKICAgIH0KICAgIHZhciBmaWxlVXJpID0gcmVhZFVyaVJlZmVyZW5jZSgpOwogICAgdmFyIHN0YXJ0RmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIHZhciBmaWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGZpbGVFbmRPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICB2YXIgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgdmFyIG5hbWUgPSByZWFkTmFtZSgpOwogICAgdmFyIGFubm90YXRpb25zID0gcmVhZEFubm90YXRpb25MaXN0KG5vZGUpOwogICAgYXNzZXJ0KCgpIHsKICAgICAgZGVidWdQYXRoLmFkZChub2RlLm5hbWU/Lm5hbWUgPz8gJ2NvbnN0cnVjdG9yJyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSgpKTsKICAgIHZhciBmdW5jdGlvbiA9IHJlYWRGdW5jdGlvbk5vZGUoKTsKICAgIHB1c2hWYXJpYWJsZURlY2xhcmF0aW9ucyhmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycyk7CiAgICBwdXNoVmFyaWFibGVEZWNsYXJhdGlvbnMoZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKTsKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgX2ZpbGxUcmVlTm9kZUxpc3Qobm9kZS5pbml0aWFsaXplcnMsIChpbmRleCkgPT4gcmVhZEluaXRpYWxpemVyKCksIG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgX3NraXBOb2RlTGlzdChyZWFkSW5pdGlhbGl6ZXIpOwogICAgfQogICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSAwOwogICAgdmFyIHRyYW5zZm9ybWVyRmxhZ3MgPSBnZXRBbmRSZXNldFRyYW5zZm9ybWVyRmxhZ3MoKTsKICAgIGFzc2VydCgoKF8pID0+IHRydWUpKGRlYnVnUGF0aC5yZW1vdmVMYXN0KCkpKTsKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgbm9kZS5zdGFydEZpbGVPZmZzZXQgPSBzdGFydEZpbGVPZmZzZXQ7CiAgICAgIG5vZGUuZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgIG5vZGUuZmlsZUVuZE9mZnNldCA9IGZpbGVFbmRPZmZzZXQ7CiAgICAgIG5vZGUuZmxhZ3MgPSBmbGFnczsKICAgICAgbm9kZS5uYW1lID0gbmFtZTsKICAgICAgbm9kZS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbm9kZS5hbm5vdGF0aW9ucyA9IGFubm90YXRpb25zOwogICAgICBub2RlLmZ1bmN0aW9uID0gZnVuY3Rpb24uLnBhcmVudCA9IG5vZGU7CiAgICAgIG5vZGUudHJhbnNmb3JtZXJGbGFncyA9IHRyYW5zZm9ybWVyRmxhZ3M7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIFByb2NlZHVyZSByZWFkUHJvY2VkdXJlKGludCBlbmRPZmZzZXQpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgYXNzZXJ0KHRhZyA9PSBUYWcuUHJvY2VkdXJlKTsKICAgIHZhciBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIHZhciByZWZlcmVuY2UgPSBjYW5vbmljYWxOYW1lLmdldFJlZmVyZW5jZSgpOwogICAgUHJvY2VkdXJlIG5vZGUgPSByZWZlcmVuY2Uubm9kZTsKICAgIGlmIChhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzKSB7CiAgICAgIG5vZGUgPSBudWxsOwogICAgfQogICAgYm9vbCBzaG91bGRXcml0ZURhdGEgPSBub2RlID09IG51bGwgfHwgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbjsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgbm9kZSA9IG5ldyBQcm9jZWR1cmUobnVsbCwgbnVsbCwgbnVsbCwgcmVmZXJlbmNlOiByZWZlcmVuY2UpOwogICAgfQogICAgdmFyIGZpbGVVcmkgPSByZWFkVXJpUmVmZXJlbmNlKCk7CiAgICB2YXIgc3RhcnRGaWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICB2YXIgZmlsZUVuZE9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIGludCBraW5kSW5kZXggPSByZWFkQnl0ZSgpOwogICAgdmFyIGtpbmQgPSBQcm9jZWR1cmVLaW5kLnZhbHVlc1traW5kSW5kZXhdOwogICAgdmFyIGZsYWdzID0gcmVhZFVJbnQoKTsKICAgIHZhciBuYW1lID0gcmVhZE5hbWUoKTsKICAgIHZhciBhbm5vdGF0aW9ucyA9IHJlYWRBbm5vdGF0aW9uTGlzdChub2RlKTsKICAgIGFzc2VydCgoKSB7CiAgICAgIGRlYnVnUGF0aC5hZGQobm9kZS5uYW1lPy5uYW1lID8/ICdwcm9jZWR1cmUnKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogICAgaW50IGZ1bmN0aW9uTm9kZVNpemUgPSBlbmRPZmZzZXQgLSBfYnl0ZU9mZnNldDsKICAgIC8vIFJlYWQgc21hbGwgZmFjdG9yaWVzIHVwIGZyb250LiBQb3N0cG9uZSBldmVyeXRoaW5nIGVsc2UuCiAgICBib29sIHJlYWRGdW5jdGlvbk5vZGVOb3cgPQogICAgICAgIChraW5kID09IFByb2NlZHVyZUtpbmQuRmFjdG9yeSAmJiBmdW5jdGlvbk5vZGVTaXplIDw9IDUwKSB8fAogICAgICAgICAgICBfZGlzYWJsZUxhenlSZWFkaW5nOwogICAgdmFyIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2UgPQogICAgICAgIHJlYWRNZW1iZXJSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKTsKICAgIHZhciBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9CiAgICAgICAgcmVhZE1lbWJlclJlZmVyZW5jZShhbGxvd051bGw6IHRydWUpOwogICAgdmFyIGZ1bmN0aW9uID0gcmVhZEZ1bmN0aW9uTm9kZU9wdGlvbighcmVhZEZ1bmN0aW9uTm9kZU5vdywgZW5kT2Zmc2V0KTsKICAgIHZhciB0cmFuc2Zvcm1lckZsYWdzID0gZ2V0QW5kUmVzZXRUcmFuc2Zvcm1lckZsYWdzKCk7CiAgICBhc3NlcnQoKChfKSA9PiB0cnVlKShkZWJ1Z1BhdGgucmVtb3ZlTGFzdCgpKSk7CiAgICBpZiAoc2hvdWxkV3JpdGVEYXRhKSB7CiAgICAgIG5vZGUuc3RhcnRGaWxlT2Zmc2V0ID0gc3RhcnRGaWxlT2Zmc2V0OwogICAgICBub2RlLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICBub2RlLmZpbGVFbmRPZmZzZXQgPSBmaWxlRW5kT2Zmc2V0OwogICAgICBub2RlLmtpbmQgPSBraW5kOwogICAgICBub2RlLmZsYWdzID0gZmxhZ3M7CiAgICAgIG5vZGUubmFtZSA9IG5hbWU7CiAgICAgIG5vZGUuZmlsZVVyaSA9IGZpbGVVcmk7CiAgICAgIG5vZGUuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uczsKICAgICAgbm9kZS5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogICAgICBmdW5jdGlvbj8ucGFyZW50ID0gbm9kZTsKICAgICAgbm9kZS5zZXRUcmFuc2Zvcm1lckZsYWdzV2l0aG91dExhenlMb2FkaW5nKHRyYW5zZm9ybWVyRmxhZ3MpOwogICAgICBub2RlLmZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2UgPQogICAgICAgICAgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZTsKICAgICAgbm9kZS5mb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9CiAgICAgICAgICBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldFJlZmVyZW5jZTsKCiAgICAgIGFzc2VydCgobm9kZS5mb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0UmVmZXJlbmNlICE9IG51bGwpIHx8CiAgICAgICAgICAhKG5vZGUuaXNGb3J3YXJkaW5nU3R1YiAmJiBub2RlLmZ1bmN0aW9uLmJvZHkgIT0gbnVsbCkpOwogICAgfQogICAgX2J5dGVPZmZzZXQgPSBlbmRPZmZzZXQ7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIHJlYWRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcigpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgYXNzZXJ0KHRhZyA9PSBUYWcuUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IpOwogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgdmFyIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICBpZiAoYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykgewogICAgICBub2RlID0gbnVsbDsKICAgIH0KICAgIGJvb2wgc2hvdWxkV3JpdGVEYXRhID0gbm9kZSA9PSBudWxsIHx8IF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb247CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIG5vZGUgPSBuZXcgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IobnVsbCwgcmVmZXJlbmNlOiByZWZlcmVuY2UpOwogICAgfQogICAgdmFyIGZpbGVVcmkgPSByZWFkVXJpUmVmZXJlbmNlKCk7CiAgICB2YXIgZmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIHZhciBmaWxlRW5kT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgIHZhciBuYW1lID0gcmVhZE5hbWUoKTsKICAgIHZhciBhbm5vdGF0aW9ucyA9IHJlYWRBbm5vdGF0aW9uTGlzdChub2RlKTsKICAgIGFzc2VydCgoKSB7CiAgICAgIGRlYnVnUGF0aC5hZGQobm9kZS5uYW1lPy5uYW1lID8/ICdyZWRpcmVjdGluZy1mYWN0b3J5LWNvbnN0cnVjdG9yJyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSgpKTsKICAgIHZhciB0YXJnZXRSZWZlcmVuY2UgPSByZWFkTWVtYmVyUmVmZXJlbmNlKCk7CiAgICB2YXIgdHlwZUFyZ3VtZW50cyA9IHJlYWREYXJ0VHlwZUxpc3QoKTsKICAgIGludCB0eXBlUGFyYW1ldGVyU3RhY2tIZWlnaHQgPSB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoOwogICAgdmFyIHR5cGVQYXJhbWV0ZXJzID0gcmVhZEFuZFB1c2hUeXBlUGFyYW1ldGVyTGlzdCgpOwogICAgcmVhZFVJbnQoKTsgLy8gVG90YWwgcGFyYW1ldGVyIGNvdW50LgogICAgdmFyIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSByZWFkVUludCgpOwogICAgaW50IHZhcmlhYmxlU3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgIHZhciBwb3NpdGlvbmFsID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwogICAgdmFyIG5hbWVkID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwogICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSB2YXJpYWJsZVN0YWNrSGVpZ2h0OwogICAgdHlwZVBhcmFtZXRlclN0YWNrLmxlbmd0aCA9IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodDsKICAgIGRlYnVnUGF0aC5yZW1vdmVMYXN0KCk7CiAgICBpZiAoc2hvdWxkV3JpdGVEYXRhKSB7CiAgICAgIG5vZGUuZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgIG5vZGUuZmlsZUVuZE9mZnNldCA9IGZpbGVFbmRPZmZzZXQ7CiAgICAgIG5vZGUuZmxhZ3MgPSBmbGFnczsKICAgICAgbm9kZS5uYW1lID0gbmFtZTsKICAgICAgbm9kZS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbm9kZS5hbm5vdGF0aW9ucyA9IGFubm90YXRpb25zOwogICAgICBub2RlLnRhcmdldFJlZmVyZW5jZSA9IHRhcmdldFJlZmVyZW5jZTsKICAgICAgbm9kZS50eXBlQXJndW1lbnRzLmFkZEFsbCh0eXBlQXJndW1lbnRzKTsKICAgICAgbm9kZS50eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzOwogICAgICBub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSByZXF1aXJlZFBhcmFtZXRlckNvdW50OwogICAgICBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gcG9zaXRpb25hbDsKICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMgPSBuYW1lZDsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgSW5pdGlhbGl6ZXIgcmVhZEluaXRpYWxpemVyKCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBib29sIGlzU3ludGhldGljID0gcmVhZEJ5dGUoKSA9PSAxOwogICAgc3dpdGNoICh0YWcpIHsKICAgICAgY2FzZSBUYWcuSW52YWxpZEluaXRpYWxpemVyOgogICAgICAgIHJldHVybiBuZXcgSW52YWxpZEluaXRpYWxpemVyKCk7CiAgICAgIGNhc2UgVGFnLkZpZWxkSW5pdGlhbGl6ZXI6CiAgICAgICAgdmFyIHJlZmVyZW5jZSA9IHJlYWRNZW1iZXJSZWZlcmVuY2UoKTsKICAgICAgICB2YXIgdmFsdWUgPSByZWFkRXhwcmVzc2lvbigpOwogICAgICAgIHJldHVybiBuZXcgRmllbGRJbml0aWFsaXplci5ieVJlZmVyZW5jZShyZWZlcmVuY2UsIHZhbHVlKQogICAgICAgICAgLi5pc1N5bnRoZXRpYyA9IGlzU3ludGhldGljOwogICAgICBjYXNlIFRhZy5TdXBlckluaXRpYWxpemVyOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIHJlZmVyZW5jZSA9IHJlYWRNZW1iZXJSZWZlcmVuY2UoKTsKICAgICAgICB2YXIgYXJndW1lbnRzID0gcmVhZEFyZ3VtZW50cygpOwogICAgICAgIHJldHVybiBuZXcgU3VwZXJJbml0aWFsaXplci5ieVJlZmVyZW5jZShyZWZlcmVuY2UsIGFyZ3VtZW50cykKICAgICAgICAgIC4uaXNTeW50aGV0aWMgPSBpc1N5bnRoZXRpYwogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5SZWRpcmVjdGluZ0luaXRpYWxpemVyOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBSZWRpcmVjdGluZ0luaXRpYWxpemVyLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRBcmd1bWVudHMoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuTG9jYWxJbml0aWFsaXplcjoKICAgICAgICByZXR1cm4gbmV3IExvY2FsSW5pdGlhbGl6ZXIocmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uKCkpOwogICAgICBjYXNlIFRhZy5Bc3NlcnRJbml0aWFsaXplcjoKICAgICAgICByZXR1cm4gbmV3IEFzc2VydEluaXRpYWxpemVyKHJlYWRTdGF0ZW1lbnQoKSk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBpbml0aWFsaXplciB0YWc6ICR0YWcnKTsKICAgIH0KICB9CgogIEZ1bmN0aW9uTm9kZSByZWFkRnVuY3Rpb25Ob2RlT3B0aW9uKGJvb2wgbGF6eUxvYWRCb2R5LCBpbnQgb3V0ZXJFbmRPZmZzZXQpIHsKICAgIHJldHVybiByZWFkQW5kQ2hlY2tPcHRpb25UYWcoKQogICAgICAgID8gcmVhZEZ1bmN0aW9uTm9kZSgKICAgICAgICAgICAgbGF6eUxvYWRCb2R5OiBsYXp5TG9hZEJvZHksIG91dGVyRW5kT2Zmc2V0OiBvdXRlckVuZE9mZnNldCkKICAgICAgICA6IG51bGw7CiAgfQoKICBGdW5jdGlvbk5vZGUgcmVhZEZ1bmN0aW9uTm9kZSgKICAgICAge2Jvb2wgbGF6eUxvYWRCb2R5OiBmYWxzZSwgaW50IG91dGVyRW5kT2Zmc2V0OiAtMX0pIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgYXNzZXJ0KHRhZyA9PSBUYWcuRnVuY3Rpb25Ob2RlKTsKICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBpbnQgZW5kT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIgPSBBc3luY01hcmtlci52YWx1ZXNbcmVhZEJ5dGUoKV07CiAgICBBc3luY01hcmtlciBkYXJ0QXN5bmNNYXJrZXIgPSBBc3luY01hcmtlci52YWx1ZXNbcmVhZEJ5dGUoKV07CiAgICBpbnQgdHlwZVBhcmFtZXRlclN0YWNrSGVpZ2h0ID0gdHlwZVBhcmFtZXRlclN0YWNrLmxlbmd0aDsKICAgIHZhciB0eXBlUGFyYW1ldGVycyA9IHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3QoKTsKICAgIHJlYWRVSW50KCk7IC8vIHRvdGFsIHBhcmFtZXRlciBjb3VudC4KICAgIHZhciByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcmVhZFVJbnQoKTsKICAgIGludCB2YXJpYWJsZVN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICB2YXIgcG9zaXRpb25hbCA9IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKICAgIHZhciBuYW1lZCA9IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKICAgIHZhciByZXR1cm5UeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICBpbnQgb2xkTGFiZWxTdGFja0Jhc2UgPSBsYWJlbFN0YWNrQmFzZTsKCiAgICBpZiAobGF6eUxvYWRCb2R5ICYmIG91dGVyRW5kT2Zmc2V0ID4gMCkgewogICAgICBsYXp5TG9hZEJvZHkgPSBvdXRlckVuZE9mZnNldCAtIF9ieXRlT2Zmc2V0ID4KICAgICAgICAgIDI7IC8vIGUuZy4gb3V0bGluZSBoYXMgVGFnLlNvbWV0aGluZyBhbmQgVGFnLkVtcHR5U3RhdGVtZW50CiAgICB9CgogICAgdmFyIGJvZHk7CiAgICBpZiAoIWxhenlMb2FkQm9keSkgewogICAgICBsYWJlbFN0YWNrQmFzZSA9IGxhYmVsU3RhY2subGVuZ3RoOwogICAgICBib2R5ID0gcmVhZFN0YXRlbWVudE9wdGlvbigpOwogICAgfQoKICAgIEZ1bmN0aW9uTm9kZSByZXN1bHQgPSBuZXcgRnVuY3Rpb25Ob2RlKGJvZHksCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJzLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWwsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZCwKICAgICAgICByZXR1cm5UeXBlOiByZXR1cm5UeXBlLAogICAgICAgIGFzeW5jTWFya2VyOiBhc3luY01hcmtlciwKICAgICAgICBkYXJ0QXN5bmNNYXJrZXI6IGRhcnRBc3luY01hcmtlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0CiAgICAgIC4uZmlsZUVuZE9mZnNldCA9IGVuZE9mZnNldDsKCiAgICBpZiAobGF6eUxvYWRCb2R5KSB7CiAgICAgIF9zZXRMYXp5TG9hZEZ1bmN0aW9uKHJlc3VsdCwgb2xkTGFiZWxTdGFja0Jhc2UsIHZhcmlhYmxlU3RhY2tIZWlnaHQsCiAgICAgICAgICB0eXBlUGFyYW1ldGVyU3RhY2tIZWlnaHQpOwogICAgfQoKICAgIGxhYmVsU3RhY2tCYXNlID0gb2xkTGFiZWxTdGFja0Jhc2U7CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoID0gdHlwZVBhcmFtZXRlclN0YWNrSGVpZ2h0OwoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9zZXRMYXp5TG9hZEZ1bmN0aW9uKEZ1bmN0aW9uTm9kZSByZXN1bHQsIGludCBvbGRMYWJlbFN0YWNrQmFzZSwKICAgICAgaW50IHZhcmlhYmxlU3RhY2tIZWlnaHQsIGludCB0eXBlUGFyYW1ldGVyU3RhY2tIZWlnaHQpIHsKICAgIGZpbmFsIGludCBzYXZlZEJ5dGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIGludCBjb21wb25lbnRTdGFydE9mZnNldCA9IF9jb21wb25lbnRTdGFydE9mZnNldDsKICAgIGZpbmFsIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVyU3RhY2sudG9MaXN0KCk7CiAgICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcyA9IHZhcmlhYmxlU3RhY2sudG9MaXN0KCk7CiAgICBmaW5hbCBMaWJyYXJ5IGN1cnJlbnRMaWJyYXJ5ID0gX2N1cnJlbnRMaWJyYXJ5OwogICAgcmVzdWx0LmxhenlCdWlsZGVyID0gKCkgewogICAgICBfYnl0ZU9mZnNldCA9IHNhdmVkQnl0ZU9mZnNldDsKICAgICAgX2N1cnJlbnRMaWJyYXJ5ID0gY3VycmVudExpYnJhcnk7CiAgICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5jbGVhcigpOwogICAgICB0eXBlUGFyYW1ldGVyU3RhY2suYWRkQWxsKHR5cGVQYXJhbWV0ZXJzKTsKICAgICAgdmFyaWFibGVTdGFjay5jbGVhcigpOwogICAgICB2YXJpYWJsZVN0YWNrLmFkZEFsbCh2YXJpYWJsZXMpOwogICAgICBfY29tcG9uZW50U3RhcnRPZmZzZXQgPSBjb21wb25lbnRTdGFydE9mZnNldDsKCiAgICAgIHJlc3VsdC5ib2R5ID0gcmVhZFN0YXRlbWVudE9wdGlvbigpOwogICAgICByZXN1bHQuYm9keT8ucGFyZW50ID0gcmVzdWx0OwogICAgICBsYWJlbFN0YWNrQmFzZSA9IG9sZExhYmVsU3RhY2tCYXNlOwogICAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGggPSB0eXBlUGFyYW1ldGVyU3RhY2tIZWlnaHQ7CiAgICAgIGlmIChyZXN1bHQucGFyZW50IGlzIFByb2NlZHVyZSkgewogICAgICAgIFByb2NlZHVyZSBwYXJlbnQgPSByZXN1bHQucGFyZW50OwogICAgICAgIHBhcmVudC50cmFuc2Zvcm1lckZsYWdzIHw9IGdldEFuZFJlc2V0VHJhbnNmb3JtZXJGbGFncygpOwogICAgICB9CiAgICB9OwogIH0KCiAgdm9pZCBwdXNoVmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICB2YXJpYWJsZVN0YWNrLmFkZCh2YXJpYWJsZSk7CiAgfQoKICB2b2lkIHB1c2hWYXJpYWJsZURlY2xhcmF0aW9ucyhMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcykgewogICAgdmFyaWFibGVTdGFjay5hZGRBbGwodmFyaWFibGVzKTsKICB9CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVhZFZhcmlhYmxlUmVmZXJlbmNlKCkgewogICAgaW50IGluZGV4ID0gcmVhZFVJbnQoKTsKICAgIGlmIChpbmRleCA+PSB2YXJpYWJsZVN0YWNrLmxlbmd0aCkgewogICAgICB0aHJvdyBmYWlsKCd1bmV4cGVjdGVkIHZhcmlhYmxlIGluZGV4OiAkaW5kZXgnKTsKICAgIH0KICAgIHJldHVybiB2YXJpYWJsZVN0YWNrW2luZGV4XTsKICB9CgogIFN0cmluZyBsb2dpY2FsT3BlcmF0b3JUb1N0cmluZyhpbnQgaW5kZXgpIHsKICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICAgY2FzZSAwOgogICAgICAgIHJldHVybiAnJiYnOwogICAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuICd8fCc7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBsb2dpY2FsIG9wZXJhdG9yIGluZGV4OiAkaW5kZXgnKTsKICAgIH0KICB9CgogIExpc3Q8RXhwcmVzc2lvbj4gcmVhZEV4cHJlc3Npb25MaXN0KCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PEV4cHJlc3Npb24+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8RXhwcmVzc2lvbj4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkRXhwcmVzc2lvbigpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEV4cHJlc3Npb24gcmVhZEV4cHJlc3Npb25PcHRpb24oKSB7CiAgICByZXR1cm4gcmVhZEFuZENoZWNrT3B0aW9uVGFnKCkgPyByZWFkRXhwcmVzc2lvbigpIDogbnVsbDsKICB9CgogIEV4cHJlc3Npb24gcmVhZEV4cHJlc3Npb24oKSB7CiAgICBpbnQgdGFnQnl0ZSA9IHJlYWRCeXRlKCk7CiAgICBpbnQgdGFnID0gdGFnQnl0ZSAmIFRhZy5TcGVjaWFsaXplZFRhZ0hpZ2hCaXQgPT0gMAogICAgICAgID8gdGFnQnl0ZQogICAgICAgIDogKHRhZ0J5dGUgJiBUYWcuU3BlY2lhbGl6ZWRUYWdNYXNrKTsKICAgIHN3aXRjaCAodGFnKSB7CiAgICAgIGNhc2UgVGFnLkxvYWRMaWJyYXJ5OgogICAgICAgIHJldHVybiBuZXcgTG9hZExpYnJhcnkocmVhZExpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlKCkpOwogICAgICBjYXNlIFRhZy5DaGVja0xpYnJhcnlJc0xvYWRlZDoKICAgICAgICByZXR1cm4gbmV3IENoZWNrTGlicmFyeUlzTG9hZGVkKHJlYWRMaWJyYXJ5RGVwZW5kZW5jeVJlZmVyZW5jZSgpKTsKICAgICAgY2FzZSBUYWcuSW52YWxpZEV4cHJlc3Npb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IEludmFsaWRFeHByZXNzaW9uKHJlYWRTdHJpbmdPck51bGxJZkVtcHR5KCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlZhcmlhYmxlR2V0OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmVhZFVJbnQoKTsgLy8gb2Zmc2V0IG9mIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbiB0aGUgYmluYXJ5LgogICAgICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQocmVhZFZhcmlhYmxlUmVmZXJlbmNlKCksIHJlYWREYXJ0VHlwZU9wdGlvbigpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5TcGVjaWFsaXplZFZhcmlhYmxlR2V0OgogICAgICAgIGludCBpbmRleCA9IHRhZ0J5dGUgJiBUYWcuU3BlY2lhbGl6ZWRQYXlsb2FkTWFzazsKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJlYWRVSW50KCk7IC8vIG9mZnNldCBvZiB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gdGhlIGJpbmFyeS4KICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlR2V0KHZhcmlhYmxlU3RhY2tbaW5kZXhdKS4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuVmFyaWFibGVTZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZWFkVUludCgpOyAvLyBvZmZzZXQgb2YgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIHRoZSBiaW5hcnkuCiAgICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZVNldChyZWFkVmFyaWFibGVSZWZlcmVuY2UoKSwgcmVhZEV4cHJlc3Npb24oKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU3BlY2lhbGl6ZWRWYXJpYWJsZVNldDoKICAgICAgICBpbnQgaW5kZXggPSB0YWdCeXRlICYgVGFnLlNwZWNpYWxpemVkUGF5bG9hZE1hc2s7CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZWFkVUludCgpOyAvLyBvZmZzZXQgb2YgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIHRoZSBiaW5hcnkuCiAgICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZVNldCh2YXJpYWJsZVN0YWNrW2luZGV4XSwgcmVhZEV4cHJlc3Npb24oKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuUHJvcGVydHlHZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkRXhwcmVzc2lvbigpLCByZWFkTmFtZSgpLCByZWFkTWVtYmVyUmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlByb3BlcnR5U2V0OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZShyZWFkRXhwcmVzc2lvbigpLCByZWFkTmFtZSgpLAogICAgICAgICAgICByZWFkRXhwcmVzc2lvbigpLCByZWFkTWVtYmVyUmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlN1cGVyUHJvcGVydHlHZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICBhZGRUcmFuc2Zvcm1lckZsYWcoVHJhbnNmb3JtZXJGbGFnLnN1cGVyQ2FsbHMpOwogICAgICAgIHJldHVybiBuZXcgU3VwZXJQcm9wZXJ0eUdldC5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZE5hbWUoKSwgcmVhZE1lbWJlclJlZmVyZW5jZShhbGxvd051bGw6IHRydWUpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5TdXBlclByb3BlcnR5U2V0OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgYWRkVHJhbnNmb3JtZXJGbGFnKFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzKTsKICAgICAgICByZXR1cm4gbmV3IFN1cGVyUHJvcGVydHlTZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWROYW1lKCksIHJlYWRFeHByZXNzaW9uKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuRGlyZWN0UHJvcGVydHlHZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IERpcmVjdFByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkRXhwcmVzc2lvbigpLCByZWFkTWVtYmVyUmVmZXJlbmNlKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkRpcmVjdFByb3BlcnR5U2V0OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBEaXJlY3RQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZEV4cHJlc3Npb24oKSwgcmVhZE1lbWJlclJlZmVyZW5jZSgpLCByZWFkRXhwcmVzc2lvbigpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5TdGF0aWNHZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFN0YXRpY0dldC5ieVJlZmVyZW5jZShyZWFkTWVtYmVyUmVmZXJlbmNlKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlN0YXRpY1NldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgU3RhdGljU2V0LmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRFeHByZXNzaW9uKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLk1ldGhvZEludm9jYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IE1ldGhvZEludm9jYXRpb24uYnlSZWZlcmVuY2UocmVhZEV4cHJlc3Npb24oKSwgcmVhZE5hbWUoKSwKICAgICAgICAgICAgcmVhZEFyZ3VtZW50cygpLCByZWFkTWVtYmVyUmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlN1cGVyTWV0aG9kSW52b2NhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIGFkZFRyYW5zZm9ybWVyRmxhZyhUcmFuc2Zvcm1lckZsYWcuc3VwZXJDYWxscyk7CiAgICAgICAgcmV0dXJuIG5ldyBTdXBlck1ldGhvZEludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWROYW1lKCksIHJlYWRBcmd1bWVudHMoKSwgcmVhZE1lbWJlclJlZmVyZW5jZShhbGxvd051bGw6IHRydWUpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5EaXJlY3RNZXRob2RJbnZvY2F0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBEaXJlY3RNZXRob2RJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkRXhwcmVzc2lvbigpLCByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRBcmd1bWVudHMoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU3RhdGljSW52b2NhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgU3RhdGljSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZE1lbWJlclJlZmVyZW5jZSgpLCByZWFkQXJndW1lbnRzKCksCiAgICAgICAgICAgIGlzQ29uc3Q6IGZhbHNlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Db25zdFN0YXRpY0ludm9jYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFN0YXRpY0ludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSwgcmVhZEFyZ3VtZW50cygpLAogICAgICAgICAgICBpc0NvbnN0OiB0cnVlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Db25zdHJ1Y3Rvckludm9jYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZE1lbWJlclJlZmVyZW5jZSgpLCByZWFkQXJndW1lbnRzKCksCiAgICAgICAgICAgIGlzQ29uc3Q6IGZhbHNlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Db25zdENvbnN0cnVjdG9ySW52b2NhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3JJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRBcmd1bWVudHMoKSwKICAgICAgICAgICAgaXNDb25zdDogdHJ1ZSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuTm90OgogICAgICAgIHJldHVybiBuZXcgTm90KHJlYWRFeHByZXNzaW9uKCkpOwogICAgICBjYXNlIFRhZy5Mb2dpY2FsRXhwcmVzc2lvbjoKICAgICAgICByZXR1cm4gbmV3IExvZ2ljYWxFeHByZXNzaW9uKHJlYWRFeHByZXNzaW9uKCksCiAgICAgICAgICAgIGxvZ2ljYWxPcGVyYXRvclRvU3RyaW5nKHJlYWRCeXRlKCkpLCByZWFkRXhwcmVzc2lvbigpKTsKICAgICAgY2FzZSBUYWcuQ29uZGl0aW9uYWxFeHByZXNzaW9uOgogICAgICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxFeHByZXNzaW9uKHJlYWRFeHByZXNzaW9uKCksIHJlYWRFeHByZXNzaW9uKCksCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWREYXJ0VHlwZU9wdGlvbigpKTsKICAgICAgY2FzZSBUYWcuU3RyaW5nQ29uY2F0ZW5hdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgU3RyaW5nQ29uY2F0ZW5hdGlvbihyZWFkRXhwcmVzc2lvbkxpc3QoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuTGlzdENvbmNhdGVuYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdHlwZUFyZ3VtZW50ID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBMaXN0Q29uY2F0ZW5hdGlvbihyZWFkRXhwcmVzc2lvbkxpc3QoKSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50OiB0eXBlQXJndW1lbnQpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlNldENvbmNhdGVuYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdHlwZUFyZ3VtZW50ID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBTZXRDb25jYXRlbmF0aW9uKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuTWFwQ29uY2F0ZW5hdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciBrZXlUeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgdmFyIHZhbHVlVHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHJldHVybiBuZXcgTWFwQ29uY2F0ZW5hdGlvbihyZWFkRXhwcmVzc2lvbkxpc3QoKSwKICAgICAgICAgICAga2V5VHlwZToga2V5VHlwZSwgdmFsdWVUeXBlOiB2YWx1ZVR5cGUpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkluc3RhbmNlQ3JlYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICBSZWZlcmVuY2UgY2xhc3NSZWZlcmVuY2UgPSByZWFkQ2xhc3NSZWZlcmVuY2UoKTsKICAgICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gcmVhZERhcnRUeXBlTGlzdCgpOwogICAgICAgIGludCBmaWVsZFZhbHVlQ291bnQgPSByZWFkVUludCgpOwogICAgICAgIE1hcDxSZWZlcmVuY2UsIEV4cHJlc3Npb24+IGZpZWxkVmFsdWVzID0gPFJlZmVyZW5jZSwgRXhwcmVzc2lvbj57fTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkVmFsdWVDb3VudDsgaSsrKSB7CiAgICAgICAgICBmaW5hbCBSZWZlcmVuY2UgZmllbGRSZWYgPQogICAgICAgICAgICAgIHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCkuZ2V0UmVmZXJlbmNlKCk7CiAgICAgICAgICBmaW5hbCBFeHByZXNzaW9uIHZhbHVlID0gcmVhZEV4cHJlc3Npb24oKTsKICAgICAgICAgIGZpZWxkVmFsdWVzW2ZpZWxkUmVmXSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgICBpbnQgYXNzZXJ0Q291bnQgPSByZWFkVUludCgpOwogICAgICAgIExpc3Q8QXNzZXJ0U3RhdGVtZW50PiBhc3NlcnRzID0gbmV3IExpc3Q8QXNzZXJ0U3RhdGVtZW50Pihhc3NlcnRDb3VudCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhc3NlcnRDb3VudDsgaSsrKSB7CiAgICAgICAgICBhc3NlcnRzW2ldID0gcmVhZFN0YXRlbWVudCgpOwogICAgICAgIH0KICAgICAgICBMaXN0PEV4cHJlc3Npb24+IHVudXNlZEFyZ3VtZW50cyA9IHJlYWRFeHByZXNzaW9uTGlzdCgpOwogICAgICAgIHJldHVybiBuZXcgSW5zdGFuY2VDcmVhdGlvbihjbGFzc1JlZmVyZW5jZSwgdHlwZUFyZ3VtZW50cywgZmllbGRWYWx1ZXMsCiAgICAgICAgICAgIGFzc2VydHMsIHVudXNlZEFyZ3VtZW50cykKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuSXNFeHByZXNzaW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJc0V4cHJlc3Npb24ocmVhZEV4cHJlc3Npb24oKSwgcmVhZERhcnRUeXBlKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkFzRXhwcmVzc2lvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIGludCBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBBc0V4cHJlc3Npb24ocmVhZEV4cHJlc3Npb24oKSwgcmVhZERhcnRUeXBlKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQKICAgICAgICAgIC4uZmxhZ3MgPSBmbGFnczsKICAgICAgY2FzZSBUYWcuU3RyaW5nTGl0ZXJhbDoKICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0xpdGVyYWwocmVhZFN0cmluZ1JlZmVyZW5jZSgpKTsKICAgICAgY2FzZSBUYWcuU3BlY2lhbGl6ZWRJbnRMaXRlcmFsOgogICAgICAgIGludCBiaWFzZWRWYWx1ZSA9IHRhZ0J5dGUgJiBUYWcuU3BlY2lhbGl6ZWRQYXlsb2FkTWFzazsKICAgICAgICByZXR1cm4gbmV3IEludExpdGVyYWwoYmlhc2VkVmFsdWUgLSBUYWcuU3BlY2lhbGl6ZWRJbnRMaXRlcmFsQmlhcyk7CiAgICAgIGNhc2UgVGFnLlBvc2l0aXZlSW50TGl0ZXJhbDoKICAgICAgICByZXR1cm4gbmV3IEludExpdGVyYWwocmVhZFVJbnQoKSk7CiAgICAgIGNhc2UgVGFnLk5lZ2F0aXZlSW50TGl0ZXJhbDoKICAgICAgICByZXR1cm4gbmV3IEludExpdGVyYWwoLXJlYWRVSW50KCkpOwogICAgICBjYXNlIFRhZy5CaWdJbnRMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbChpbnQucGFyc2UocmVhZFN0cmluZ1JlZmVyZW5jZSgpKSk7CiAgICAgIGNhc2UgVGFnLkRvdWJsZUxpdGVyYWw6CiAgICAgICAgcmV0dXJuIG5ldyBEb3VibGVMaXRlcmFsKHJlYWREb3VibGUoKSk7CiAgICAgIGNhc2UgVGFnLlRydWVMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgQm9vbExpdGVyYWwodHJ1ZSk7CiAgICAgIGNhc2UgVGFnLkZhbHNlTGl0ZXJhbDoKICAgICAgICByZXR1cm4gbmV3IEJvb2xMaXRlcmFsKGZhbHNlKTsKICAgICAgY2FzZSBUYWcuTnVsbExpdGVyYWw6CiAgICAgICAgcmV0dXJuIG5ldyBOdWxsTGl0ZXJhbCgpOwogICAgICBjYXNlIFRhZy5TeW1ib2xMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgU3ltYm9sTGl0ZXJhbChyZWFkU3RyaW5nUmVmZXJlbmNlKCkpOwogICAgICBjYXNlIFRhZy5UeXBlTGl0ZXJhbDoKICAgICAgICByZXR1cm4gbmV3IFR5cGVMaXRlcmFsKHJlYWREYXJ0VHlwZSgpKTsKICAgICAgY2FzZSBUYWcuVGhpc0V4cHJlc3Npb246CiAgICAgICAgcmV0dXJuIG5ldyBUaGlzRXhwcmVzc2lvbigpOwogICAgICBjYXNlIFRhZy5SZXRocm93OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBSZXRocm93KCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlRocm93OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBUaHJvdyhyZWFkRXhwcmVzc2lvbigpKS4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuTGlzdExpdGVyYWw6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdHlwZUFyZ3VtZW50ID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBMaXN0TGl0ZXJhbChyZWFkRXhwcmVzc2lvbkxpc3QoKSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50OiB0eXBlQXJndW1lbnQsIGlzQ29uc3Q6IGZhbHNlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Db25zdExpc3RMaXRlcmFsOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIHR5cGVBcmd1bWVudCA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHJldHVybiBuZXcgTGlzdExpdGVyYWwocmVhZEV4cHJlc3Npb25MaXN0KCksCiAgICAgICAgICAgIHR5cGVBcmd1bWVudDogdHlwZUFyZ3VtZW50LCBpc0NvbnN0OiB0cnVlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5TZXRMaXRlcmFsOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIHR5cGVBcmd1bWVudCA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHJldHVybiBuZXcgU2V0TGl0ZXJhbChyZWFkRXhwcmVzc2lvbkxpc3QoKSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50OiB0eXBlQXJndW1lbnQsIGlzQ29uc3Q6IGZhbHNlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Db25zdFNldExpdGVyYWw6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdHlwZUFyZ3VtZW50ID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBTZXRMaXRlcmFsKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogdHJ1ZSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuTWFwTGl0ZXJhbDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciBrZXlUeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgdmFyIHZhbHVlVHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHJldHVybiBuZXcgTWFwTGl0ZXJhbChyZWFkTWFwRW50cnlMaXN0KCksCiAgICAgICAgICAgIGtleVR5cGU6IGtleVR5cGUsIHZhbHVlVHlwZTogdmFsdWVUeXBlLCBpc0NvbnN0OiBmYWxzZSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuQ29uc3RNYXBMaXRlcmFsOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIGtleVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICB2YXIgdmFsdWVUeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBNYXBMaXRlcmFsKHJlYWRNYXBFbnRyeUxpc3QoKSwKICAgICAgICAgICAga2V5VHlwZToga2V5VHlwZSwgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsIGlzQ29uc3Q6IHRydWUpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkF3YWl0RXhwcmVzc2lvbjoKICAgICAgICByZXR1cm4gbmV3IEF3YWl0RXhwcmVzc2lvbihyZWFkRXhwcmVzc2lvbigpKTsKICAgICAgY2FzZSBUYWcuRnVuY3Rpb25FeHByZXNzaW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkV4cHJlc3Npb24ocmVhZEZ1bmN0aW9uTm9kZSgpKS4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuTGV0OgogICAgICAgIHZhciB2YXJpYWJsZSA9IHJlYWRWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICAgICAgaW50IHN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICAgICAgcHVzaFZhcmlhYmxlRGVjbGFyYXRpb24odmFyaWFibGUpOwogICAgICAgIHZhciBib2R5ID0gcmVhZEV4cHJlc3Npb24oKTsKICAgICAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHN0YWNrSGVpZ2h0OwogICAgICAgIHJldHVybiBuZXcgTGV0KHZhcmlhYmxlLCBib2R5KTsKICAgICAgY2FzZSBUYWcuQmxvY2tFeHByZXNzaW9uOgogICAgICAgIGludCBzdGFja0hlaWdodCA9IHZhcmlhYmxlU3RhY2subGVuZ3RoOwogICAgICAgIHZhciBzdGF0ZW1lbnRzID0gcmVhZFN0YXRlbWVudExpc3QoKTsKICAgICAgICB2YXIgdmFsdWUgPSByZWFkRXhwcmVzc2lvbigpOwogICAgICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gc3RhY2tIZWlnaHQ7CiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0V4cHJlc3Npb24obmV3IEJsb2NrKHN0YXRlbWVudHMpLCB2YWx1ZSk7CiAgICAgIGNhc2UgVGFnLkluc3RhbnRpYXRpb246CiAgICAgICAgdmFyIGV4cHJlc3Npb24gPSByZWFkRXhwcmVzc2lvbigpOwogICAgICAgIHZhciB0eXBlQXJndW1lbnRzID0gcmVhZERhcnRUeXBlTGlzdCgpOwogICAgICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbihleHByZXNzaW9uLCB0eXBlQXJndW1lbnRzKTsKICAgICAgY2FzZSBUYWcuQ29uc3RhbnRFeHByZXNzaW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIENvbnN0YW50IGNvbnN0YW50ID0gcmVhZENvbnN0YW50UmVmZXJlbmNlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudEV4cHJlc3Npb24oY29uc3RhbnQsIHR5cGUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IGZhaWwoJ3VuZXhwZWN0ZWQgZXhwcmVzc2lvbiB0YWc6ICR0YWcnKTsKICAgIH0KICB9CgogIExpc3Q8TWFwRW50cnk+IHJlYWRNYXBFbnRyeUxpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8TWFwRW50cnk+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8TWFwRW50cnk+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gcmVhZE1hcEVudHJ5KCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTWFwRW50cnkgcmVhZE1hcEVudHJ5KCkgewogICAgcmV0dXJuIG5ldyBNYXBFbnRyeShyZWFkRXhwcmVzc2lvbigpLCByZWFkRXhwcmVzc2lvbigpKTsKICB9CgogIExpc3Q8U3RhdGVtZW50PiByZWFkU3RhdGVtZW50TGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxTdGF0ZW1lbnQ+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8U3RhdGVtZW50Pi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRTdGF0ZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdGF0ZW1lbnQgcmVhZFN0YXRlbWVudE9yTnVsbElmRW1wdHkoKSB7CiAgICB2YXIgbm9kZSA9IHJlYWRTdGF0ZW1lbnQoKTsKICAgIGlmIChub2RlIGlzIEVtcHR5U3RhdGVtZW50KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgfQoKICBTdGF0ZW1lbnQgcmVhZFN0YXRlbWVudE9wdGlvbigpIHsKICAgIHJldHVybiByZWFkQW5kQ2hlY2tPcHRpb25UYWcoKSA/IHJlYWRTdGF0ZW1lbnQoKSA6IG51bGw7CiAgfQoKICBTdGF0ZW1lbnQgcmVhZFN0YXRlbWVudCgpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgc3dpdGNoICh0YWcpIHsKICAgICAgY2FzZSBUYWcuRXhwcmVzc2lvblN0YXRlbWVudDoKICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQocmVhZEV4cHJlc3Npb24oKSk7CiAgICAgIGNhc2UgVGFnLkJsb2NrOgogICAgICAgIHJldHVybiByZWFkQmxvY2soKTsKICAgICAgY2FzZSBUYWcuQXNzZXJ0QmxvY2s6CiAgICAgICAgcmV0dXJuIHJlYWRBc3NlcnRCbG9jaygpOwogICAgICBjYXNlIFRhZy5FbXB0eVN0YXRlbWVudDoKICAgICAgICByZXR1cm4gbmV3IEVtcHR5U3RhdGVtZW50KCk7CiAgICAgIGNhc2UgVGFnLkFzc2VydFN0YXRlbWVudDoKICAgICAgICByZXR1cm4gbmV3IEFzc2VydFN0YXRlbWVudChyZWFkRXhwcmVzc2lvbigpLAogICAgICAgICAgICBjb25kaXRpb25TdGFydE9mZnNldDogcmVhZE9mZnNldCgpLAogICAgICAgICAgICBjb25kaXRpb25FbmRPZmZzZXQ6IHJlYWRPZmZzZXQoKSwKICAgICAgICAgICAgbWVzc2FnZTogcmVhZEV4cHJlc3Npb25PcHRpb24oKSk7CiAgICAgIGNhc2UgVGFnLkxhYmVsZWRTdGF0ZW1lbnQ6CiAgICAgICAgdmFyIGxhYmVsID0gbmV3IExhYmVsZWRTdGF0ZW1lbnQobnVsbCk7CiAgICAgICAgbGFiZWxTdGFjay5hZGQobGFiZWwpOwogICAgICAgIGxhYmVsLmJvZHkgPSByZWFkU3RhdGVtZW50KCkuLnBhcmVudCA9IGxhYmVsOwogICAgICAgIGxhYmVsU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgIHJldHVybiBsYWJlbDsKICAgICAgY2FzZSBUYWcuQnJlYWtTdGF0ZW1lbnQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICBpbnQgaW5kZXggPSByZWFkVUludCgpOwogICAgICAgIHJldHVybiBuZXcgQnJlYWtTdGF0ZW1lbnQobGFiZWxTdGFja1tsYWJlbFN0YWNrQmFzZSArIGluZGV4XSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuV2hpbGVTdGF0ZW1lbnQ6CiAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFdoaWxlU3RhdGVtZW50KHJlYWRFeHByZXNzaW9uKCksIHJlYWRTdGF0ZW1lbnQoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuRG9TdGF0ZW1lbnQ6CiAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IERvU3RhdGVtZW50KHJlYWRTdGF0ZW1lbnQoKSwgcmVhZEV4cHJlc3Npb24oKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuRm9yU3RhdGVtZW50OgogICAgICAgIGludCB2YXJpYWJsZVN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdmFyaWFibGVzID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwogICAgICAgIHZhciBjb25kaXRpb24gPSByZWFkRXhwcmVzc2lvbk9wdGlvbigpOwogICAgICAgIHZhciB1cGRhdGVzID0gcmVhZEV4cHJlc3Npb25MaXN0KCk7CiAgICAgICAgdmFyIGJvZHkgPSByZWFkU3RhdGVtZW50KCk7CiAgICAgICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSB2YXJpYWJsZVN0YWNrSGVpZ2h0OwogICAgICAgIHJldHVybiBuZXcgRm9yU3RhdGVtZW50KHZhcmlhYmxlcywgY29uZGl0aW9uLCB1cGRhdGVzLCBib2R5KQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Gb3JJblN0YXRlbWVudDoKICAgICAgY2FzZSBUYWcuQXN5bmNGb3JJblN0YXRlbWVudDoKICAgICAgICBib29sIGlzQXN5bmMgPSB0YWcgPT0gVGFnLkFzeW5jRm9ySW5TdGF0ZW1lbnQ7CiAgICAgICAgaW50IHZhcmlhYmxlU3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciBib2R5T2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB2YXJpYWJsZSA9IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgICAgIHZhciBpdGVyYWJsZSA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICAgICAgdmFyIGJvZHkgPSByZWFkU3RhdGVtZW50KCk7CiAgICAgICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSB2YXJpYWJsZVN0YWNrSGVpZ2h0OwogICAgICAgIHJldHVybiBuZXcgRm9ySW5TdGF0ZW1lbnQodmFyaWFibGUsIGl0ZXJhYmxlLCBib2R5LCBpc0FzeW5jOiBpc0FzeW5jKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0CiAgICAgICAgICAuLmJvZHlPZmZzZXQgPSBib2R5T2Zmc2V0OwogICAgICBjYXNlIFRhZy5Td2l0Y2hTdGF0ZW1lbnQ6CiAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICAgICAgaW50IGNvdW50ID0gcmVhZFVJbnQoKTsKICAgICAgICBMaXN0PFN3aXRjaENhc2U+IGNhc2VzID0KICAgICAgICAgICAgbmV3IExpc3Q8U3dpdGNoQ2FzZT4uZmlsbGVkKGNvdW50LCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICBjYXNlc1tpXSA9IG5ldyBTd2l0Y2hDYXNlLmVtcHR5KCk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaENhc2VTdGFjay5hZGRBbGwoY2FzZXMpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FzZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHJlYWRTd2l0Y2hDYXNlSW50byhjYXNlc1tpXSk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaENhc2VTdGFjay5sZW5ndGggLT0gY291bnQ7CiAgICAgICAgcmV0dXJuIG5ldyBTd2l0Y2hTdGF0ZW1lbnQoZXhwcmVzc2lvbiwgY2FzZXMpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Db250aW51ZVN3aXRjaFN0YXRlbWVudDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIGludCBpbmRleCA9IHJlYWRVSW50KCk7CiAgICAgICAgcmV0dXJuIG5ldyBDb250aW51ZVN3aXRjaFN0YXRlbWVudChzd2l0Y2hDYXNlU3RhY2tbaW5kZXhdKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5JZlN0YXRlbWVudDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnQoCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWRTdGF0ZW1lbnQoKSwgcmVhZFN0YXRlbWVudE9yTnVsbElmRW1wdHkoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuUmV0dXJuU3RhdGVtZW50OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm5TdGF0ZW1lbnQocmVhZEV4cHJlc3Npb25PcHRpb24oKSkuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlRyeUNhdGNoOgogICAgICAgIFN0YXRlbWVudCBib2R5ID0gcmVhZFN0YXRlbWVudCgpOwogICAgICAgIGludCBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBUcnlDYXRjaChib2R5LCByZWFkQ2F0Y2hMaXN0KCksIGlzU3ludGhldGljOiBmbGFncyAmIDIgPT0gMik7CiAgICAgIGNhc2UgVGFnLlRyeUZpbmFsbHk6CiAgICAgICAgcmV0dXJuIG5ldyBUcnlGaW5hbGx5KHJlYWRTdGF0ZW1lbnQoKSwgcmVhZFN0YXRlbWVudCgpKTsKICAgICAgY2FzZSBUYWcuWWllbGRTdGF0ZW1lbnQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICBpbnQgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgICAgIHJldHVybiBuZXcgWWllbGRTdGF0ZW1lbnQocmVhZEV4cHJlc3Npb24oKSwKICAgICAgICAgICAgaXNZaWVsZFN0YXI6IGZsYWdzICYgWWllbGRTdGF0ZW1lbnQuRmxhZ1lpZWxkU3RhciAhPSAwLAogICAgICAgICAgICBpc05hdGl2ZTogZmxhZ3MgJiBZaWVsZFN0YXRlbWVudC5GbGFnTmF0aXZlICE9IDApCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlZhcmlhYmxlRGVjbGFyYXRpb246CiAgICAgICAgdmFyIHZhcmlhYmxlID0gcmVhZFZhcmlhYmxlRGVjbGFyYXRpb24oKTsKICAgICAgICB2YXJpYWJsZVN0YWNrLmFkZCh2YXJpYWJsZSk7IC8vIFdpbGwgYmUgcG9wcGVkIGJ5IHRoZSBlbmNsb3Npbmcgc2NvcGUuCiAgICAgICAgcmV0dXJuIHZhcmlhYmxlOwogICAgICBjYXNlIFRhZy5GdW5jdGlvbkRlY2xhcmF0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIHZhcmlhYmxlID0gcmVhZFZhcmlhYmxlRGVjbGFyYXRpb24oKTsKICAgICAgICB2YXJpYWJsZVN0YWNrLmFkZCh2YXJpYWJsZSk7IC8vIFdpbGwgYmUgcG9wcGVkIGJ5IHRoZSBlbmNsb3Npbmcgc2NvcGUuCiAgICAgICAgdmFyIGZ1bmN0aW9uID0gcmVhZEZ1bmN0aW9uTm9kZSgpOwogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25EZWNsYXJhdGlvbih2YXJpYWJsZSwgZnVuY3Rpb24pLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IGZhaWwoJ3VuZXhwZWN0ZWQgc3RhdGVtZW50IHRhZzogJHRhZycpOwogICAgfQogIH0KCiAgdm9pZCByZWFkU3dpdGNoQ2FzZUludG8oU3dpdGNoQ2FzZSBjYXNlTm9kZSkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBjYXNlTm9kZS5leHByZXNzaW9ucy5sZW5ndGggPSBsZW5ndGg7CiAgICBjYXNlTm9kZS5leHByZXNzaW9uT2Zmc2V0cy5sZW5ndGggPSBsZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIGNhc2VOb2RlLmV4cHJlc3Npb25PZmZzZXRzW2ldID0gcmVhZE9mZnNldCgpOwogICAgICBjYXNlTm9kZS5leHByZXNzaW9uc1tpXSA9IHJlYWRFeHByZXNzaW9uKCkuLnBhcmVudCA9IGNhc2VOb2RlOwogICAgfQogICAgY2FzZU5vZGUuaXNEZWZhdWx0ID0gcmVhZEJ5dGUoKSA9PSAxOwogICAgY2FzZU5vZGUuYm9keSA9IHJlYWRTdGF0ZW1lbnQoKS4ucGFyZW50ID0gY2FzZU5vZGU7CiAgfQoKICBMaXN0PENhdGNoPiByZWFkQ2F0Y2hMaXN0KCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PENhdGNoPiByZXN1bHQgPSBuZXcgTGlzdDxDYXRjaD4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkQ2F0Y2goKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBDYXRjaCByZWFkQ2F0Y2goKSB7CiAgICBpbnQgdmFyaWFibGVTdGFja0hlaWdodCA9IHZhcmlhYmxlU3RhY2subGVuZ3RoOwogICAgdmFyIG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIHZhciBndWFyZCA9IHJlYWREYXJ0VHlwZSgpOwogICAgdmFyIGV4Y2VwdGlvbiA9IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbk9wdGlvbigpOwogICAgdmFyIHN0YWNrVHJhY2UgPSByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25PcHRpb24oKTsKICAgIHZhciBib2R5ID0gcmVhZFN0YXRlbWVudCgpOwogICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSB2YXJpYWJsZVN0YWNrSGVpZ2h0OwogICAgcmV0dXJuIG5ldyBDYXRjaChleGNlcHRpb24sIGJvZHksIGd1YXJkOiBndWFyZCwgc3RhY2tUcmFjZTogc3RhY2tUcmFjZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogIH0KCiAgQmxvY2sgcmVhZEJsb2NrKCkgewogICAgaW50IHN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICB2YXIgYm9keSA9IHJlYWRTdGF0ZW1lbnRMaXN0KCk7CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHN0YWNrSGVpZ2h0OwogICAgcmV0dXJuIG5ldyBCbG9jayhib2R5KTsKICB9CgogIEFzc2VydEJsb2NrIHJlYWRBc3NlcnRCbG9jaygpIHsKICAgIGludCBzdGFja0hlaWdodCA9IHZhcmlhYmxlU3RhY2subGVuZ3RoOwogICAgdmFyIGJvZHkgPSByZWFkU3RhdGVtZW50TGlzdCgpOwogICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSBzdGFja0hlaWdodDsKICAgIHJldHVybiBuZXcgQXNzZXJ0QmxvY2soYm9keSk7CiAgfQoKICBTdXBlcnR5cGUgcmVhZFN1cGVydHlwZSgpIHsKICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgcmV0dXJuIG5ldyBTdXBlcnR5cGUuYnlSZWZlcmVuY2UodHlwZS5jbGFzc05hbWUsIHR5cGUudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBTdXBlcnR5cGUgcmVhZFN1cGVydHlwZU9wdGlvbigpIHsKICAgIHJldHVybiByZWFkQW5kQ2hlY2tPcHRpb25UYWcoKSA/IHJlYWRTdXBlcnR5cGUoKSA6IG51bGw7CiAgfQoKICBMaXN0PFN1cGVydHlwZT4gcmVhZFN1cGVydHlwZUxpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8U3VwZXJ0eXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PFN1cGVydHlwZT4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkU3VwZXJ0eXBlKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlzdDxEYXJ0VHlwZT4gcmVhZERhcnRUeXBlTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkRGFydFR5cGUoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PE5hbWVkVHlwZT4gcmVhZE5hbWVkVHlwZUxpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8TmFtZWRUeXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PE5hbWVkVHlwZT4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkTmFtZWRUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTmFtZWRUeXBlIHJlYWROYW1lZFR5cGUoKSB7CiAgICBTdHJpbmcgbmFtZSA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgIGludCBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZShuYW1lLCB0eXBlLAogICAgICAgIGlzUmVxdWlyZWQ6IChmbGFncyAmIE5hbWVkVHlwZS5GbGFnUmVxdWlyZWROYW1lZFR5cGUpICE9IDApOwogIH0KCiAgRGFydFR5cGUgcmVhZERhcnRUeXBlT3B0aW9uKCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpID8gcmVhZERhcnRUeXBlKCkgOiBudWxsOwogIH0KCiAgRGFydFR5cGUgcmVhZERhcnRUeXBlKCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBzd2l0Y2ggKHRhZykgewogICAgICBjYXNlIFRhZy5UeXBlZGVmVHlwZToKICAgICAgICBpbnQgbnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBUeXBlZGVmVHlwZS5ieVJlZmVyZW5jZShyZWFkVHlwZWRlZlJlZmVyZW5jZSgpLAogICAgICAgICAgICByZWFkRGFydFR5cGVMaXN0KCksIE51bGxhYmlsaXR5LnZhbHVlc1tudWxsYWJpbGl0eUluZGV4XSk7CiAgICAgIGNhc2UgVGFnLkJvdHRvbVR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgY2FzZSBUYWcuSW52YWxpZFR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgIGNhc2UgVGFnLkR5bmFtaWNUeXBlOgogICAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICBjYXNlIFRhZy5Wb2lkVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgVm9pZFR5cGUoKTsKICAgICAgY2FzZSBUYWcuSW50ZXJmYWNlVHlwZToKICAgICAgICBpbnQgbnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlLmJ5UmVmZXJlbmNlKHJlYWRDbGFzc1JlZmVyZW5jZSgpLAogICAgICAgICAgICByZWFkRGFydFR5cGVMaXN0KCksIE51bGxhYmlsaXR5LnZhbHVlc1tudWxsYWJpbGl0eUluZGV4XSk7CiAgICAgIGNhc2UgVGFnLlNpbXBsZUludGVyZmFjZVR5cGU6CiAgICAgICAgaW50IG51bGxhYmlsaXR5SW5kZXggPSByZWFkQnl0ZSgpOwogICAgICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZS5ieVJlZmVyZW5jZShyZWFkQ2xhc3NSZWZlcmVuY2UoKSwKICAgICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLCBOdWxsYWJpbGl0eS52YWx1ZXNbbnVsbGFiaWxpdHlJbmRleF0pOwogICAgICBjYXNlIFRhZy5GdW5jdGlvblR5cGU6CiAgICAgICAgaW50IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodCA9IHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGg7CiAgICAgICAgaW50IG51bGxhYmlsaXR5SW5kZXggPSByZWFkQnl0ZSgpOwogICAgICAgIHZhciB0eXBlUGFyYW1ldGVycyA9IHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3QoKTsKICAgICAgICB2YXIgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgdmFyIHRvdGFsUGFyYW1ldGVyQ291bnQgPSByZWFkVUludCgpOwogICAgICAgIHZhciBwb3NpdGlvbmFsID0gcmVhZERhcnRUeXBlTGlzdCgpOwogICAgICAgIHZhciBuYW1lZCA9IHJlYWROYW1lZFR5cGVMaXN0KCk7CiAgICAgICAgdmFyIHR5cGVkZWZUeXBlID0gcmVhZERhcnRUeXBlT3B0aW9uKCk7CiAgICAgICAgYXNzZXJ0KHBvc2l0aW9uYWwubGVuZ3RoICsgbmFtZWQubGVuZ3RoID09IHRvdGFsUGFyYW1ldGVyQ291bnQpOwogICAgICAgIHZhciByZXR1cm5UeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgdHlwZVBhcmFtZXRlclN0YWNrLmxlbmd0aCA9IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodDsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsLCByZXR1cm5UeXBlLAogICAgICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWQsCiAgICAgICAgICAgIHR5cGVkZWZUeXBlOiB0eXBlZGVmVHlwZSwKICAgICAgICAgICAgbnVsbGFiaWxpdHk6IE51bGxhYmlsaXR5LnZhbHVlc1tudWxsYWJpbGl0eUluZGV4XSk7CiAgICAgIGNhc2UgVGFnLlNpbXBsZUZ1bmN0aW9uVHlwZToKICAgICAgICBpbnQgbnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgdmFyIHBvc2l0aW9uYWwgPSByZWFkRGFydFR5cGVMaXN0KCk7CiAgICAgICAgdmFyIHJldHVyblR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsLCByZXR1cm5UeXBlLAogICAgICAgICAgICBudWxsYWJpbGl0eTogTnVsbGFiaWxpdHkudmFsdWVzW251bGxhYmlsaXR5SW5kZXhdKTsKICAgICAgY2FzZSBUYWcuVHlwZVBhcmFtZXRlclR5cGU6CiAgICAgICAgaW50IGRlY2xhcmVkTnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgaW50IGluZGV4ID0gcmVhZFVJbnQoKTsKICAgICAgICB2YXIgYm91bmQgPSByZWFkRGFydFR5cGVPcHRpb24oKTsKICAgICAgICByZXR1cm4gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXJTdGFja1tpbmRleF0sIGJvdW5kLAogICAgICAgICAgICBOdWxsYWJpbGl0eS52YWx1ZXNbZGVjbGFyZWROdWxsYWJpbGl0eUluZGV4XSk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBkYXJ0IHR5cGUgdGFnOiAkdGFnJyk7CiAgICB9CiAgfQoKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3QoCiAgICAgIFtMaXN0PFR5cGVQYXJhbWV0ZXI+IGxpc3QsIFRyZWVOb2RlIHBhcmVudF0pIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gbGlzdCA/PyA8VHlwZVBhcmFtZXRlcj5bXTsKICAgIGlmIChsaXN0ID09IG51bGwpIHsKICAgICAgbGlzdCA9IG5ldyBMaXN0PFR5cGVQYXJhbWV0ZXI+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIGxpc3RbaV0gPSBuZXcgVHlwZVBhcmFtZXRlcihudWxsLCBudWxsKS4ucGFyZW50ID0gcGFyZW50OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGxpc3QubGVuZ3RoICE9IGxlbmd0aCkgewogICAgICBsaXN0Lmxlbmd0aCA9IGxlbmd0aDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIGxpc3RbaV0gPSBuZXcgVHlwZVBhcmFtZXRlcihudWxsLCBudWxsKS4ucGFyZW50ID0gcGFyZW50OwogICAgICB9CiAgICB9CiAgICB0eXBlUGFyYW1ldGVyU3RhY2suYWRkQWxsKGxpc3QpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7CiAgICAgIHJlYWRUeXBlUGFyYW1ldGVyKGxpc3RbaV0pOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICB2b2lkIHJlYWRUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgbm9kZS5mbGFncyA9IHJlYWRCeXRlKCk7CiAgICBub2RlLmFubm90YXRpb25zID0gcmVhZEFubm90YXRpb25MaXN0KG5vZGUpOwogICAgbm9kZS5uYW1lID0gcmVhZFN0cmluZ09yTnVsbElmRW1wdHkoKTsKICAgIG5vZGUuYm91bmQgPSByZWFkRGFydFR5cGUoKTsKICAgIG5vZGUuZGVmYXVsdFR5cGUgPSByZWFkRGFydFR5cGVPcHRpb24oKTsKICB9CgogIEFyZ3VtZW50cyByZWFkQXJndW1lbnRzKCkgewogICAgdmFyIG51bUFyZ3VtZW50cyA9IHJlYWRVSW50KCk7CiAgICB2YXIgdHlwZUFyZ3VtZW50cyA9IHJlYWREYXJ0VHlwZUxpc3QoKTsKICAgIHZhciBwb3NpdGlvbmFsID0gcmVhZEV4cHJlc3Npb25MaXN0KCk7CiAgICB2YXIgbmFtZWQgPSByZWFkTmFtZWRFeHByZXNzaW9uTGlzdCgpOwogICAgYXNzZXJ0KG51bUFyZ3VtZW50cyA9PSBwb3NpdGlvbmFsLmxlbmd0aCArIG5hbWVkLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IEFyZ3VtZW50cyhwb3NpdGlvbmFsLCB0eXBlczogdHlwZUFyZ3VtZW50cywgbmFtZWQ6IG5hbWVkKTsKICB9CgogIExpc3Q8TmFtZWRFeHByZXNzaW9uPiByZWFkTmFtZWRFeHByZXNzaW9uTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8TmFtZWRFeHByZXNzaW9uPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWROYW1lZEV4cHJlc3Npb24oKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBOYW1lZEV4cHJlc3Npb24gcmVhZE5hbWVkRXhwcmVzc2lvbigpIHsKICAgIHJldHVybiBuZXcgTmFtZWRFeHByZXNzaW9uKHJlYWRTdHJpbmdSZWZlcmVuY2UoKSwgcmVhZEV4cHJlc3Npb24oKSk7CiAgfQoKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uT3B0aW9uKCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpID8gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uKCkgOiBudWxsOwogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbiByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb24oKSB7CiAgICB2YXIgdmFyaWFibGUgPSByZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgdmFyaWFibGVTdGFjay5hZGQodmFyaWFibGUpOwogICAgcmV0dXJuIHZhcmlhYmxlOwogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbiByZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpIHsKICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBpbnQgZmlsZUVxdWFsc09mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIC8vIFRoZSBbVmFyaWFibGVEZWNsYXJhdGlvbl0gaW5zdGFuY2UgaXMgbm90IGNyZWF0ZWQgYXQgdGhpcyBwb2ludCB5ZXQsCiAgICAvLyBzbyBgbnVsbGAgaXMgdGVtcG9yYXJpbHkgc2V0IGFzIHRoZSBwYXJlbnQgb2YgdGhlIGFubm90YXRpb24gbm9kZXMuCiAgICB2YXIgYW5ub3RhdGlvbnMgPSByZWFkQW5ub3RhdGlvbkxpc3QobnVsbCk7CiAgICBpbnQgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgdmFyIG5vZGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihyZWFkU3RyaW5nT3JOdWxsSWZFbXB0eSgpLAogICAgICAgIHR5cGU6IHJlYWREYXJ0VHlwZSgpLCBpbml0aWFsaXplcjogcmVhZEV4cHJlc3Npb25PcHRpb24oKSwgZmxhZ3M6IGZsYWdzKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQKICAgICAgLi5maWxlRXF1YWxzT2Zmc2V0ID0gZmlsZUVxdWFsc09mZnNldDsKICAgIGlmIChhbm5vdGF0aW9ucy5pc05vdEVtcHR5KSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2ldOwogICAgICAgIGFubm90YXRpb24ucGFyZW50ID0gbm9kZTsKICAgICAgfQogICAgICBub2RlLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIGludCByZWFkT2Zmc2V0KCkgewogICAgLy8gT2Zmc2V0IGlzIHNhdmVkIGFzIHVuc2lnbmVkLAogICAgLy8gYnV0IGFjdHVhbGx5IHJhbmdlcyBmcm9tIC0xIGFuZCB1cCAodGh1cyB0aGUgLTEpCiAgICByZXR1cm4gcmVhZFVJbnQoKSAtIDE7CiAgfQp9CgpjbGFzcyBCaW5hcnlCdWlsZGVyV2l0aE1ldGFkYXRhIGV4dGVuZHMgQmluYXJ5QnVpbGRlciBpbXBsZW1lbnRzIEJpbmFyeVNvdXJjZSB7CiAgLy8vIExpc3Qgb2YgbWV0YWRhdGEgc3Vic2VjdGlvbnMgdGhhdCBoYXZlIGNvcnJlc3BvbmRpbmcgW01ldGFkYXRhUmVwb3NpdG9yeV0KICAvLy8gYW5kIGFyZSBhd2FpdGluZyB0byBiZSBwYXJzZWQgYW5kIGF0dGFjaGVkIHRvIG5vZGVzLgogIExpc3Q8X01ldGFkYXRhU3Vic2VjdGlvbj4gX3N1YnNlY3Rpb25zOwoKICBCaW5hcnlCdWlsZGVyV2l0aE1ldGFkYXRhKGJ5dGVzLCBbZmlsZW5hbWVdKQogICAgICA6IHN1cGVyKGJ5dGVzLCBmaWxlbmFtZTogZmlsZW5hbWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9yZWFkTWV0YWRhdGFNYXBwaW5ncygKICAgICAgQ29tcG9uZW50IGNvbXBvbmVudCwgaW50IGJpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMpIHsKICAgIC8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmdW5jdGlvbiBfYnl0ZU9mZnNldCBwb2ludHMgcmlnaHQgcGFzdAogICAgLy8gbWV0YWRhdGFNYXBwaW5ncyB0byBzdHJpbmcgdGFibGUuCgogICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIG1ldGFkYXRhTWFwcGluZ3MuCiAgICBfYnl0ZU9mZnNldCAtPSA0OwogICAgZmluYWwgc3ViU2VjdGlvbkNvdW50ID0gcmVhZFVpbnQzMigpOwoKICAgIGludCBlbmRPZmZzZXQgPSBfYnl0ZU9mZnNldCAtIDQ7IC8vIEVuZCBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgc3Vic2VjdGlvbi4KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ViU2VjdGlvbkNvdW50OyBpKyspIHsKICAgICAgLy8gUkxpc3Q8UGFpcjxVSW50MzIsIFVJbnQzMj4+IG5vZGVPZmZzZXRUb01ldGFkYXRhT2Zmc2V0CiAgICAgIF9ieXRlT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gNDsKICAgICAgZmluYWwgbWFwcGluZ0xlbmd0aCA9IHJlYWRVaW50MzIoKTsKICAgICAgZmluYWwgbWFwcGluZ1N0YXJ0ID0gKGVuZE9mZnNldCAtIDQpIC0gNCAqIDIgKiBtYXBwaW5nTGVuZ3RoOwogICAgICBfYnl0ZU9mZnNldCA9IG1hcHBpbmdTdGFydCAtIDQ7CgogICAgICAvLyBVSW50MzIgdGFnIChmaXhlZCBzaXplIFN0cmluZ1JlZmVyZW5jZSkKICAgICAgZmluYWwgdGFnID0gX3N0cmluZ1RhYmxlW3JlYWRVaW50MzIoKV07CgogICAgICBmaW5hbCByZXBvc2l0b3J5ID0gY29tcG9uZW50Lm1ldGFkYXRhW3RhZ107CiAgICAgIGlmIChyZXBvc2l0b3J5ICE9IG51bGwpIHsKICAgICAgICAvLyBSZWFkIG5vZGVPZmZzZXRUb01ldGFkYXRhT2Zmc2V0IG1hcHBpbmcuCiAgICAgICAgZmluYWwgbWFwcGluZyA9IDxpbnQsIGludD57fTsKICAgICAgICBfYnl0ZU9mZnNldCA9IG1hcHBpbmdTdGFydDsKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcHBpbmdMZW5ndGg7IGorKykgewogICAgICAgICAgZmluYWwgbm9kZU9mZnNldCA9IHJlYWRVaW50MzIoKTsKICAgICAgICAgIGZpbmFsIG1ldGFkYXRhT2Zmc2V0ID0gYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2FkcyArIHJlYWRVaW50MzIoKTsKICAgICAgICAgIG1hcHBpbmdbbm9kZU9mZnNldF0gPSBtZXRhZGF0YU9mZnNldDsKICAgICAgICB9CgogICAgICAgIF9zdWJzZWN0aW9ucyA/Pz0gPF9NZXRhZGF0YVN1YnNlY3Rpb24+W107CiAgICAgICAgX3N1YnNlY3Rpb25zLmFkZChuZXcgX01ldGFkYXRhU3Vic2VjdGlvbihyZXBvc2l0b3J5LCBtYXBwaW5nKSk7CiAgICAgIH0KCiAgICAgIC8vIFN0YXJ0IG9mIHRoZSBzdWJzZWN0aW9uIGFuZCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBvbmUuCiAgICAgIGVuZE9mZnNldCA9IG1hcHBpbmdTdGFydCAtIDQ7CiAgICB9CiAgfQoKICBPYmplY3QgX3JlYWRNZXRhZGF0YShOb2RlIG5vZGUsIE1ldGFkYXRhUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBpbnQgb2Zmc2V0KSB7CiAgICBmaW5hbCBpbnQgc2F2ZWRPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIF9ieXRlT2Zmc2V0ID0gb2Zmc2V0OwoKICAgIGZpbmFsIG1ldGFkYXRhID0gcmVwb3NpdG9yeS5yZWFkRnJvbUJpbmFyeShub2RlLCB0aGlzKTsKCiAgICBfYnl0ZU9mZnNldCA9IHNhdmVkT2Zmc2V0OwogICAgcmV0dXJuIG1ldGFkYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnRlclNjb3BlKHtMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzfSkgewogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgdHlwZVBhcmFtZXRlclN0YWNrLmFkZEFsbCh0eXBlUGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxlYXZlU2NvcGUoe0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnN9KSB7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoIC09IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIE5vZGUgX2Fzc29jaWF0ZU1ldGFkYXRhKE5vZGUgbm9kZSwgaW50IG5vZGVPZmZzZXQpIHsKICAgIGlmIChfc3Vic2VjdGlvbnMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBmb3IgKHZhciBzdWJzZWN0aW9uIGluIF9zdWJzZWN0aW9ucykgewogICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhbnkgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4KICAgICAgZmluYWwgbWV0YWRhdGFPZmZzZXQgPSBzdWJzZWN0aW9uLm1hcHBpbmdbbm9kZU9mZnNldF07CiAgICAgIGlmIChtZXRhZGF0YU9mZnNldCAhPSBudWxsKSB7CiAgICAgICAgc3Vic2VjdGlvbi5yZXBvc2l0b3J5Lm1hcHBpbmdbbm9kZV0gPQogICAgICAgICAgICBfcmVhZE1ldGFkYXRhKG5vZGUsIHN1YnNlY3Rpb24ucmVwb3NpdG9yeSwgbWV0YWRhdGFPZmZzZXQpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSByZWFkRGFydFR5cGUoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkRGFydFR5cGUoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnkgcmVhZExpYnJhcnkoQ29tcG9uZW50IGNvbXBvbmVudCwgaW50IGVuZE9mZnNldCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZExpYnJhcnkoY29tcG9uZW50LCBlbmRPZmZzZXQpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZWRlZiByZWFkVHlwZWRlZigpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRUeXBlZGVmKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzcyByZWFkQ2xhc3MoaW50IGVuZE9mZnNldCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZENsYXNzKGVuZE9mZnNldCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGaWVsZCByZWFkRmllbGQoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkRmllbGQoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yIHJlYWRDb25zdHJ1Y3RvcigpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRDb25zdHJ1Y3RvcigpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgUHJvY2VkdXJlIHJlYWRQcm9jZWR1cmUoaW50IGVuZE9mZnNldCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZFByb2NlZHVyZShlbmRPZmZzZXQpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgcmVhZFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplciByZWFkSW5pdGlhbGl6ZXIoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkSW5pdGlhbGl6ZXIoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uTm9kZSByZWFkRnVuY3Rpb25Ob2RlKAogICAgICB7Ym9vbCBsYXp5TG9hZEJvZHk6IGZhbHNlLCBpbnQgb3V0ZXJFbmRPZmZzZXQ6IC0xfSkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZEZ1bmN0aW9uTm9kZSgKICAgICAgICBsYXp5TG9hZEJvZHk6IGxhenlMb2FkQm9keSwgb3V0ZXJFbmRPZmZzZXQ6IG91dGVyRW5kT2Zmc2V0KTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gcmVhZEV4cHJlc3Npb24oKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkRXhwcmVzc2lvbigpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQXJndW1lbnRzIHJlYWRBcmd1bWVudHMoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkQXJndW1lbnRzKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYW1lZEV4cHJlc3Npb24gcmVhZE5hbWVkRXhwcmVzc2lvbigpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWROYW1lZEV4cHJlc3Npb24oKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVhZFZhcmlhYmxlRGVjbGFyYXRpb24oKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RhdGVtZW50IHJlYWRTdGF0ZW1lbnQoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkU3RhdGVtZW50KCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21iaW5hdG9yIHJlYWRDb21iaW5hdG9yKCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZENvbWJpbmF0b3IoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlEZXBlbmRlbmN5IHJlYWRMaWJyYXJ5RGVwZW5kZW5jeShMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRMaWJyYXJ5RGVwZW5kZW5jeShsaWJyYXJ5KTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlQYXJ0IHJlYWRMaWJyYXJ5UGFydChMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRMaWJyYXJ5UGFydChsaWJyYXJ5KTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVhZFN3aXRjaENhc2VJbnRvKFN3aXRjaENhc2UgY2FzZU5vZGUpIHsKICAgIF9hc3NvY2lhdGVNZXRhZGF0YShjYXNlTm9kZSwgX2J5dGVPZmZzZXQpOwogICAgc3VwZXIucmVhZFN3aXRjaENhc2VJbnRvKGNhc2VOb2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVhZFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBwYXJhbSkgewogICAgX2Fzc29jaWF0ZU1ldGFkYXRhKHBhcmFtLCBfYnl0ZU9mZnNldCk7CiAgICBzdXBlci5yZWFkVHlwZVBhcmFtZXRlcihwYXJhbSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdXBlcnR5cGUgcmVhZFN1cGVydHlwZSgpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IHN1cGVyLnJlYWREYXJ0VHlwZSgpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YSgKICAgICAgICBuZXcgU3VwZXJ0eXBlLmJ5UmVmZXJlbmNlKHR5cGUuY2xhc3NOYW1lLCB0eXBlLnR5cGVBcmd1bWVudHMpLAogICAgICAgIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTmFtZSByZWFkTmFtZSgpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWROYW1lKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGN1cnJlbnRPZmZzZXQgPT4gX2J5dGVPZmZzZXQ7CgogIEBvdmVycmlkZQogIExpc3Q8aW50PiBnZXQgYnl0ZXMgPT4gX2J5dGVzOwp9CgovLy8gRGVzZXJpYWxpemVkIE1ldGFkYXRhTWFwcGluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBtZXRhZGF0YSByZXBvc2l0b3J5LgpjbGFzcyBfTWV0YWRhdGFTdWJzZWN0aW9uIHsKICAvLy8gW01ldGFkYXRhUmVwb3NpdG9yeV0gdGhhdCBjYW4gcmVhZCB0aGlzIHN1YnNlY3Rpb24uCiAgZmluYWwgTWV0YWRhdGFSZXBvc2l0b3J5IHJlcG9zaXRvcnk7CgogIC8vLyBEZXNlcmlhbGl6ZWQgbWFwcGluZyBmcm9tIG5vZGUgb2Zmc2V0cyB0byBtZXRhZGF0YSBvZmZzZXRzLgogIGZpbmFsIE1hcDxpbnQsIGludD4gbWFwcGluZzsKCiAgX01ldGFkYXRhU3Vic2VjdGlvbih0aGlzLnJlcG9zaXRvcnksIHRoaXMubWFwcGluZyk7Cn0KiVQATk48IAEiFxoBFigTARMTERIPAUgBQgIBIhUBKwEWMzIEAgEbGAEkAgE5OgIBGCgBIiUnJyIkGxwUIAIBFktCGjtEGRoXMC05Ih0bIQFG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cnQnIHNob3cganNvbjsKCmltcG9ydCAnLi4vYXN0LmRhcnQnOwppbXBvcnQgJy4uL2ltcG9ydF90YWJsZS5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIE5hbWVyPFQ+IHsKICBpbnQgaW5kZXggPSAwOwogIGZpbmFsIE1hcDxULCBTdHJpbmc+IG1hcCA9IDxULCBTdHJpbmc+e307CgogIFN0cmluZyBnZXROYW1lKFQga2V5KSA9PiBtYXAucHV0SWZBYnNlbnQoa2V5LCAoKSA9PiAnJHByZWZpeCR7KytpbmRleH0nKTsKCiAgU3RyaW5nIGdldCBwcmVmaXg7Cn0KCmNsYXNzIE5vcm1hbE5hbWVyPFQ+IGV4dGVuZHMgTmFtZXI8VD4gewogIGZpbmFsIFN0cmluZyBwcmVmaXg7CiAgTm9ybWFsTmFtZXIodGhpcy5wcmVmaXgpOwp9CgpjbGFzcyBDb25zdGFudE5hbWVyIGV4dGVuZHMgUmVjdXJzaXZlVmlzaXRvcjxOdWxsPiB3aXRoIE5hbWVyPENvbnN0YW50PiB7CiAgZmluYWwgU3RyaW5nIHByZWZpeDsKICBDb25zdGFudE5hbWVyKHRoaXMucHJlZml4KTsKCiAgU3RyaW5nIGdldE5hbWUoQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIGlmICghbWFwLmNvbnRhaW5zS2V5KGNvbnN0YW50KSkgewogICAgICAvLyBOYW1lIGV2ZXJ5dGhpbmcgaW4gcG9zdC1vcmRlciB2aXNpdCBvZiBEQUcuCiAgICAgIGNvbnN0YW50LnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuZ2V0TmFtZShjb25zdGFudCk7CiAgfQoKICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIGdldE5hbWUoY29uc3RhbnQpOwogIH0KfQoKY2xhc3MgRGlzYW1iaWd1YXRvcjxULCBVPiB7CiAgZmluYWwgTWFwPFQsIFN0cmluZz4gbmFtZXNUID0gPFQsIFN0cmluZz57fTsKICBmaW5hbCBNYXA8VSwgU3RyaW5nPiBuYW1lc1UgPSA8VSwgU3RyaW5nPnt9OwogIGZpbmFsIFNldDxTdHJpbmc+IHVzZWROYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICBTdHJpbmcgZGlzYW1iaWd1YXRlKFQga2V5MSwgVSBrZXkyLCBTdHJpbmcgcHJvcG9zZU5hbWUoKSkgewogICAgZ2V0TmV3TmFtZSgpIHsKICAgICAgdmFyIHByb3Bvc2VkTmFtZSA9IHByb3Bvc2VOYW1lKCk7CiAgICAgIGlmICh1c2VkTmFtZXMuYWRkKHByb3Bvc2VkTmFtZSkpIHJldHVybiBwcm9wb3NlZE5hbWU7CiAgICAgIGludCBpID0gMjsKICAgICAgd2hpbGUgKCF1c2VkTmFtZXMuYWRkKCckcHJvcG9zZWROYW1lJGknKSkgewogICAgICAgICsraTsKICAgICAgfQogICAgICByZXR1cm4gJyRwcm9wb3NlZE5hbWUkaSc7CiAgICB9CgogICAgaWYgKGtleTEgIT0gbnVsbCkgewogICAgICBTdHJpbmcgcmVzdWx0ID0gbmFtZXNUW2tleTFdOwogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJldHVybiByZXN1bHQ7CiAgICAgIHJldHVybiBuYW1lc1Rba2V5MV0gPSBnZXROZXdOYW1lKCk7CiAgICB9CiAgICBpZiAoa2V5MiAhPSBudWxsKSB7CiAgICAgIFN0cmluZyByZXN1bHQgPSBuYW1lc1Vba2V5Ml07CiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgICAgcmV0dXJuIG5hbWVzVVtrZXkyXSA9IGdldE5ld05hbWUoKTsKICAgIH0KICAgIHRocm93ICJDYW5ub3QgZGlzYW1iaWd1YXRlIjsKICB9Cn0KCk5hbWVTeXN0ZW0gZ2xvYmFsRGVidWdnaW5nTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwoKU3RyaW5nIGRlYnVnTGlicmFyeU5hbWUoTGlicmFyeSBub2RlKSB7CiAgcmV0dXJuIG5vZGUgPT0gbnVsbAogICAgICA/ICdudWxsJwogICAgICA6IG5vZGUubmFtZSA/PyBnbG9iYWxEZWJ1Z2dpbmdOYW1lcy5uYW1lTGlicmFyeShub2RlKTsKfQoKU3RyaW5nIGRlYnVnQ2xhc3NOYW1lKENsYXNzIG5vZGUpIHsKICByZXR1cm4gbm9kZSA9PSBudWxsCiAgICAgID8gJ251bGwnCiAgICAgIDogbm9kZS5uYW1lID8/IGdsb2JhbERlYnVnZ2luZ05hbWVzLm5hbWVDbGFzcyhub2RlKTsKfQoKU3RyaW5nIGRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lKENsYXNzIG5vZGUpIHsKICByZXR1cm4gZGVidWdMaWJyYXJ5TmFtZShub2RlLmVuY2xvc2luZ0xpYnJhcnkpICsgJzo6JyArIGRlYnVnQ2xhc3NOYW1lKG5vZGUpOwp9CgpTdHJpbmcgZGVidWdNZW1iZXJOYW1lKE1lbWJlciBub2RlKSB7CiAgcmV0dXJuIG5vZGUubmFtZT8ubmFtZSA/PyBnbG9iYWxEZWJ1Z2dpbmdOYW1lcy5uYW1lTWVtYmVyKG5vZGUpOwp9CgpTdHJpbmcgZGVidWdRdWFsaWZpZWRNZW1iZXJOYW1lKE1lbWJlciBub2RlKSB7CiAgaWYgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgcmV0dXJuIGRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lKG5vZGUuZW5jbG9zaW5nQ2xhc3MpICsKICAgICAgICAnOjonICsKICAgICAgICBkZWJ1Z01lbWJlck5hbWUobm9kZSk7CiAgfSBlbHNlIHsKICAgIHJldHVybiBkZWJ1Z0xpYnJhcnlOYW1lKG5vZGUuZW5jbG9zaW5nTGlicmFyeSkgKwogICAgICAgICc6OicgKwogICAgICAgIGRlYnVnTWVtYmVyTmFtZShub2RlKTsKICB9Cn0KClN0cmluZyBkZWJ1Z1R5cGVQYXJhbWV0ZXJOYW1lKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogIHJldHVybiBub2RlLm5hbWUgPz8gZ2xvYmFsRGVidWdnaW5nTmFtZXMubmFtZVR5cGVQYXJhbWV0ZXIobm9kZSk7Cn0KClN0cmluZyBkZWJ1Z1F1YWxpZmllZFR5cGVQYXJhbWV0ZXJOYW1lKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogIGlmIChub2RlLnBhcmVudCBpcyBDbGFzcykgewogICAgcmV0dXJuIGRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lKG5vZGUucGFyZW50KSArCiAgICAgICAgJzo6JyArCiAgICAgICAgZGVidWdUeXBlUGFyYW1ldGVyTmFtZShub2RlKTsKICB9CiAgaWYgKG5vZGUucGFyZW50IGlzIE1lbWJlcikgewogICAgcmV0dXJuIGRlYnVnUXVhbGlmaWVkTWVtYmVyTmFtZShub2RlLnBhcmVudCkgKwogICAgICAgICc6OicgKwogICAgICAgIGRlYnVnVHlwZVBhcmFtZXRlck5hbWUobm9kZSk7CiAgfQogIHJldHVybiBkZWJ1Z1R5cGVQYXJhbWV0ZXJOYW1lKG5vZGUpOwp9CgpTdHJpbmcgZGVidWdWYXJpYWJsZURlY2xhcmF0aW9uTmFtZShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICByZXR1cm4gbm9kZS5uYW1lID8/IGdsb2JhbERlYnVnZ2luZ05hbWVzLm5hbWVWYXJpYWJsZShub2RlKTsKfQoKU3RyaW5nIGRlYnVnTm9kZVRvU3RyaW5nKE5vZGUgbm9kZSkgewogIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgbmV3IFByaW50ZXIoYnVmZmVyLCBzeW50aGV0aWNOYW1lczogZ2xvYmFsRGVidWdnaW5nTmFtZXMpLndyaXRlTm9kZShub2RlKTsKICByZXR1cm4gJyRidWZmZXInOwp9CgpTdHJpbmcgY29tcG9uZW50VG9TdHJpbmcoQ29tcG9uZW50IG5vZGUpIHsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIG5ldyBQcmludGVyKGJ1ZmZlciwgc3ludGhldGljTmFtZXM6IG5ldyBOYW1lU3lzdGVtKCkpCiAgICAgIC53cml0ZUNvbXBvbmVudEZpbGUobm9kZSk7CiAgcmV0dXJuICckYnVmZmVyJzsKfQoKY2xhc3MgTmFtZVN5c3RlbSB7CiAgZmluYWwgTmFtZXI8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0KICAgICAgbmV3IE5vcm1hbE5hbWVyPFZhcmlhYmxlRGVjbGFyYXRpb24+KCcjdCcpOwogIGZpbmFsIE5hbWVyPE1lbWJlcj4gbWVtYmVycyA9IG5ldyBOb3JtYWxOYW1lcjxNZW1iZXI+KCcjbScpOwogIGZpbmFsIE5hbWVyPENsYXNzPiBjbGFzc2VzID0gbmV3IE5vcm1hbE5hbWVyPENsYXNzPignI2NsYXNzJyk7CiAgZmluYWwgTmFtZXI8RXh0ZW5zaW9uPiBleHRlbnNpb25zID0gbmV3IE5vcm1hbE5hbWVyPEV4dGVuc2lvbj4oJyNleHRlbnNpb24nKTsKICBmaW5hbCBOYW1lcjxMaWJyYXJ5PiBsaWJyYXJpZXMgPSBuZXcgTm9ybWFsTmFtZXI8TGlicmFyeT4oJyNsaWInKTsKICBmaW5hbCBOYW1lcjxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9CiAgICAgIG5ldyBOb3JtYWxOYW1lcjxUeXBlUGFyYW1ldGVyPignI1QnKTsKICBmaW5hbCBOYW1lcjxUcmVlTm9kZT4gbGFiZWxzID0gbmV3IE5vcm1hbE5hbWVyPFRyZWVOb2RlPignI0wnKTsKICBmaW5hbCBOYW1lcjxDb25zdGFudD4gY29uc3RhbnRzID0gbmV3IENvbnN0YW50TmFtZXIoJyNDJyk7CiAgZmluYWwgRGlzYW1iaWd1YXRvcjxSZWZlcmVuY2UsIENhbm9uaWNhbE5hbWU+IHByZWZpeGVzID0KICAgICAgbmV3IERpc2FtYmlndWF0b3I8UmVmZXJlbmNlLCBDYW5vbmljYWxOYW1lPigpOwoKICBuYW1lVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSA9PiB2YXJpYWJsZXMuZ2V0TmFtZShub2RlKTsKICBuYW1lTWVtYmVyKE1lbWJlciBub2RlKSA9PiBtZW1iZXJzLmdldE5hbWUobm9kZSk7CiAgbmFtZUNsYXNzKENsYXNzIG5vZGUpID0+IGNsYXNzZXMuZ2V0TmFtZShub2RlKTsKICBuYW1lRXh0ZW5zaW9uKEV4dGVuc2lvbiBub2RlKSA9PiBleHRlbnNpb25zLmdldE5hbWUobm9kZSk7CiAgbmFtZUxpYnJhcnkoTGlicmFyeSBub2RlKSA9PiBsaWJyYXJpZXMuZ2V0TmFtZShub2RlKTsKICBuYW1lVHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpID0+IHR5cGVQYXJhbWV0ZXJzLmdldE5hbWUobm9kZSk7CiAgbmFtZVN3aXRjaENhc2UoU3dpdGNoQ2FzZSBub2RlKSA9PiBsYWJlbHMuZ2V0TmFtZShub2RlKTsKICBuYW1lTGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpID0+IGxhYmVscy5nZXROYW1lKG5vZGUpOwogIG5hbWVDb25zdGFudChDb25zdGFudCBub2RlKSA9PiBjb25zdGFudHMuZ2V0TmFtZShub2RlKTsKCiAgZmluYWwgUmVnRXhwIHBhdGhTZXBhcmF0b3IgPSBuZXcgUmVnRXhwKCdbXFwvXScpOwoKICBuYW1lTGlicmFyeVByZWZpeChMaWJyYXJ5IG5vZGUsIHtTdHJpbmcgcHJvcG9zZWROYW1lfSkgewogICAgcmV0dXJuIHByZWZpeGVzLmRpc2FtYmlndWF0ZShub2RlLnJlZmVyZW5jZSwgbm9kZS5yZWZlcmVuY2UuY2Fub25pY2FsTmFtZSwKICAgICAgICAoKSB7CiAgICAgIGlmIChwcm9wb3NlZE5hbWUgIT0gbnVsbCkgcmV0dXJuIHByb3Bvc2VkTmFtZTsKICAgICAgaWYgKG5vZGUubmFtZSAhPSBudWxsKSByZXR1cm4gYWJicmV2aWF0ZU5hbWUobm9kZS5uYW1lKTsKICAgICAgaWYgKG5vZGUuaW1wb3J0VXJpICE9IG51bGwpIHsKICAgICAgICB2YXIgcGF0aCA9IG5vZGUuaW1wb3J0VXJpLmhhc0VtcHR5UGF0aAogICAgICAgICAgICA/ICcke25vZGUuaW1wb3J0VXJpfScKICAgICAgICAgICAgOiBub2RlLmltcG9ydFVyaS5wYXRoU2VnbWVudHMubGFzdDsKICAgICAgICBpZiAocGF0aC5lbmRzV2l0aCgnLmRhcnQnKSkgewogICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gJy5kYXJ0Jy5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWJicmV2aWF0ZU5hbWUocGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuICdMJzsKICAgIH0pOwogIH0KCiAgbmFtZUNhbm9uaWNhbE5hbWVBc0xpYnJhcnlQcmVmaXgoUmVmZXJlbmNlIG5vZGUsIENhbm9uaWNhbE5hbWUgbmFtZSwKICAgICAge1N0cmluZyBwcm9wb3NlZE5hbWV9KSB7CiAgICByZXR1cm4gcHJlZml4ZXMuZGlzYW1iaWd1YXRlKG5vZGUsIG5hbWUsICgpIHsKICAgICAgaWYgKHByb3Bvc2VkTmFtZSAhPSBudWxsKSByZXR1cm4gcHJvcG9zZWROYW1lOwogICAgICBDYW5vbmljYWxOYW1lIGNhbm9uaWNhbE5hbWUgPSBuYW1lID8/IG5vZGUuY2Fub25pY2FsTmFtZTsKICAgICAgaWYgKGNhbm9uaWNhbE5hbWU/Lm5hbWUgIT0gbnVsbCkgewogICAgICAgIHZhciBwYXRoID0gY2Fub25pY2FsTmFtZS5uYW1lOwogICAgICAgIGludCBzbGFzaCA9IHBhdGgubGFzdEluZGV4T2YocGF0aFNlcGFyYXRvcik7CiAgICAgICAgaWYgKHNsYXNoID49IDApIHsKICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhzbGFzaCArIDEpOwogICAgICAgIH0KICAgICAgICBpZiAocGF0aC5lbmRzV2l0aCgnLmRhcnQnKSkgewogICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gJy5kYXJ0Jy5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWJicmV2aWF0ZU5hbWUocGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuICdMJzsKICAgIH0pOwogIH0KCiAgZmluYWwgUmVnRXhwIHB1bmN0dWF0aW9uID0gbmV3IFJlZ0V4cCgnWy46XScpOwoKICBTdHJpbmcgYWJicmV2aWF0ZU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIGludCBkb3QgPSBuYW1lLmxhc3RJbmRleE9mKHB1bmN0dWF0aW9uKTsKICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGRvdCArIDEpOwogICAgfQogICAgaWYgKG5hbWUubGVuZ3RoID4gNCkgewogICAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgMyk7CiAgICB9CiAgICByZXR1cm4gbmFtZTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEFubm90YXRvciB7CiAgU3RyaW5nIGFubm90YXRlVmFyaWFibGUoUHJpbnRlciBwcmludGVyLCBWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpOwogIFN0cmluZyBhbm5vdGF0ZVJldHVybihQcmludGVyIHByaW50ZXIsIEZ1bmN0aW9uTm9kZSBub2RlKTsKICBTdHJpbmcgYW5ub3RhdGVGaWVsZChQcmludGVyIHByaW50ZXIsIEZpZWxkIG5vZGUpOwp9CgovLy8gQSBxdWljayBhbmQgZGlydHkgYW1iaWd1b3VzIHRleHQgcHJpbnRlci4KY2xhc3MgUHJpbnRlciBleHRlbmRzIFZpc2l0b3I8TnVsbD4gewogIGZpbmFsIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXM7CiAgZmluYWwgU3RyaW5nU2luayBzaW5rOwogIGZpbmFsIEFubm90YXRvciBhbm5vdGF0b3I7CiAgZmluYWwgTWFwPFN0cmluZywgTWV0YWRhdGFSZXBvc2l0b3J5PE9iamVjdD4+IG1ldGFkYXRhOwogIEltcG9ydFRhYmxlIGltcG9ydFRhYmxlOwogIGludCBpbmRlbnRhdGlvbiA9IDA7CiAgaW50IGNvbHVtbiA9IDA7CiAgYm9vbCBzaG93RXh0ZXJuYWw7CiAgYm9vbCBzaG93T2Zmc2V0czsKICBib29sIHNob3dNZXRhZGF0YTsKCiAgc3RhdGljIGludCBTUEFDRSA9IDA7CiAgc3RhdGljIGludCBXT1JEID0gMTsKICBzdGF0aWMgaW50IFNZTUJPTCA9IDI7CiAgaW50IHN0YXRlID0gU1BBQ0U7CgogIFByaW50ZXIodGhpcy5zaW5rLAogICAgICB7TmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lcywKICAgICAgdGhpcy5zaG93RXh0ZXJuYWwsCiAgICAgIHRoaXMuc2hvd09mZnNldHM6IGZhbHNlLAogICAgICB0aGlzLnNob3dNZXRhZGF0YTogZmFsc2UsCiAgICAgIHRoaXMuaW1wb3J0VGFibGUsCiAgICAgIHRoaXMuYW5ub3RhdG9yLAogICAgICB0aGlzLm1ldGFkYXRhfSkKICAgICAgOiB0aGlzLnN5bnRoZXRpY05hbWVzID0gc3ludGhldGljTmFtZXMgPz8gbmV3IE5hbWVTeXN0ZW0oKTsKCiAgUHJpbnRlciBjcmVhdGVJbm5lcihJbXBvcnRUYWJsZSBpbXBvcnRUYWJsZSwKICAgICAgTWFwPFN0cmluZywgTWV0YWRhdGFSZXBvc2l0b3J5PE9iamVjdD4+IG1ldGFkYXRhKSB7CiAgICByZXR1cm4gbmV3IFByaW50ZXIoc2luaywKICAgICAgICBpbXBvcnRUYWJsZTogaW1wb3J0VGFibGUsCiAgICAgICAgbWV0YWRhdGE6IG1ldGFkYXRhLAogICAgICAgIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcywKICAgICAgICBhbm5vdGF0b3I6IGFubm90YXRvciwKICAgICAgICBzaG93RXh0ZXJuYWw6IHNob3dFeHRlcm5hbCwKICAgICAgICBzaG93T2Zmc2V0czogc2hvd09mZnNldHMsCiAgICAgICAgc2hvd01ldGFkYXRhOiBzaG93TWV0YWRhdGEpOwogIH0KCiAgYm9vbCBzaG91bGRIaWdobGlnaHQoTm9kZSBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIHN0YXJ0SGlnaGxpZ2h0KE5vZGUgbm9kZSkge30KICB2b2lkIGVuZEhpZ2hsaWdodChOb2RlIG5vZGUpIHt9CgogIFN0cmluZyBnZXRMaWJyYXJ5TmFtZShMaWJyYXJ5IG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5hbWUgPz8gc3ludGhldGljTmFtZXMubmFtZUxpYnJhcnkobm9kZSk7CiAgfQoKICBTdHJpbmcgZ2V0TGlicmFyeVJlZmVyZW5jZShMaWJyYXJ5IG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiAnPE5vIExpYnJhcnk+JzsKICAgIGlmIChpbXBvcnRUYWJsZSAhPSBudWxsICYmIGltcG9ydFRhYmxlLmdldEltcG9ydEluZGV4KG5vZGUpICE9IC0xKSB7CiAgICAgIHJldHVybiBzeW50aGV0aWNOYW1lcy5uYW1lTGlicmFyeVByZWZpeChub2RlKTsKICAgIH0KICAgIHJldHVybiBnZXRMaWJyYXJ5TmFtZShub2RlKTsKICB9CgogIFN0cmluZyBnZXRDbGFzc05hbWUoQ2xhc3Mgbm9kZSkgewogICAgcmV0dXJuIG5vZGUubmFtZSA/PyBzeW50aGV0aWNOYW1lcy5uYW1lQ2xhc3Mobm9kZSk7CiAgfQoKICBTdHJpbmcgZ2V0RXh0ZW5zaW9uTmFtZShFeHRlbnNpb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGUubmFtZSA/PyBzeW50aGV0aWNOYW1lcy5uYW1lRXh0ZW5zaW9uKG5vZGUpOwogIH0KCiAgU3RyaW5nIGdldENsYXNzUmVmZXJlbmNlKENsYXNzIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiAnPE5vIENsYXNzPic7CiAgICBTdHJpbmcgbmFtZSA9IGdldENsYXNzTmFtZShub2RlKTsKICAgIFN0cmluZyBsaWJyYXJ5ID0gZ2V0TGlicmFyeVJlZmVyZW5jZShub2RlLmVuY2xvc2luZ0xpYnJhcnkpOwogICAgcmV0dXJuICckbGlicmFyeTo6JG5hbWUnOwogIH0KCiAgU3RyaW5nIGdldFR5cGVkZWZSZWZlcmVuY2UoVHlwZWRlZiBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gJzxObyBUeXBlZGVmPic7CiAgICBTdHJpbmcgbGlicmFyeSA9IGdldExpYnJhcnlSZWZlcmVuY2Uobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgIHJldHVybiAnJGxpYnJhcnk6OiR7bm9kZS5uYW1lfSc7CiAgfQoKICBzdGF0aWMgZmluYWwgU3RyaW5nIGVtcHR5TmFtZVN0cmluZyA9ICfigKInOwogIHN0YXRpYyBmaW5hbCBOYW1lIGVtcHR5TmFtZSA9IG5ldyBOYW1lKGVtcHR5TmFtZVN0cmluZyk7CgogIE5hbWUgZ2V0TWVtYmVyTmFtZShNZW1iZXIgbm9kZSkgewogICAgaWYgKG5vZGUubmFtZT8ubmFtZSA9PSAnJykgcmV0dXJuIGVtcHR5TmFtZTsKICAgIGlmIChub2RlLm5hbWUgIT0gbnVsbCkgcmV0dXJuIG5vZGUubmFtZTsKICAgIHJldHVybiBuZXcgTmFtZShzeW50aGV0aWNOYW1lcy5uYW1lTWVtYmVyKG5vZGUpKTsKICB9CgogIFN0cmluZyBnZXRNZW1iZXJSZWZlcmVuY2UoTWVtYmVyIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiAnPE5vIE1lbWJlcj4nOwogICAgU3RyaW5nIG5hbWUgPSBnZXRNZW1iZXJOYW1lKG5vZGUpLm5hbWU7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgQ2xhc3MpIHsKICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGdldENsYXNzUmVmZXJlbmNlKG5vZGUucGFyZW50KTsKICAgICAgcmV0dXJuICckY2xhc3NOYW1lOjokbmFtZSc7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgbGlicmFyeSA9IGdldExpYnJhcnlSZWZlcmVuY2Uobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgICAgcmV0dXJuICckbGlicmFyeTo6JG5hbWUnOwogICAgfQogIH0KCiAgU3RyaW5nIGdldFZhcmlhYmxlTmFtZShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5hbWUgPz8gc3ludGhldGljTmFtZXMubmFtZVZhcmlhYmxlKG5vZGUpOwogIH0KCiAgU3RyaW5nIGdldFZhcmlhYmxlUmVmZXJlbmNlKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuICc8Tm8gVmFyaWFibGVEZWNsYXJhdGlvbj4nOwogICAgcmV0dXJuIGdldFZhcmlhYmxlTmFtZShub2RlKTsKICB9CgogIFN0cmluZyBnZXRUeXBlUGFyYW1ldGVyTmFtZShUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5hbWUgPz8gc3ludGhldGljTmFtZXMubmFtZVR5cGVQYXJhbWV0ZXIobm9kZSk7CiAgfQoKICBTdHJpbmcgZ2V0VHlwZVBhcmFtZXRlclJlZmVyZW5jZShUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiAnPE5vIFR5cGVQYXJhbWV0ZXI+JzsKICAgIFN0cmluZyBuYW1lID0gZ2V0VHlwZVBhcmFtZXRlck5hbWUobm9kZSk7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgRnVuY3Rpb25Ob2RlICYmIG5vZGUucGFyZW50LnBhcmVudCBpcyBNZW1iZXIpIHsKICAgICAgU3RyaW5nIG1lbWJlciA9IGdldE1lbWJlclJlZmVyZW5jZShub2RlLnBhcmVudC5wYXJlbnQpOwogICAgICByZXR1cm4gJyRtZW1iZXI6OiRuYW1lJzsKICAgIH0gZWxzZSBpZiAobm9kZS5wYXJlbnQgaXMgQ2xhc3MpIHsKICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGdldENsYXNzUmVmZXJlbmNlKG5vZGUucGFyZW50KTsKICAgICAgcmV0dXJuICckY2xhc3NOYW1lOjokbmFtZSc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmFtZTsgLy8gQm91bmQgaW5zaWRlIGEgZnVuY3Rpb24gdHlwZS4KICAgIH0KICB9CgogIHZvaWQgd3JpdGVDb21wb25lbnRQcm9ibGVtcyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICB3cml0ZVByb2JsZW1zQXNKc29uKCJQcm9ibGVtcyBpbiBjb21wb25lbnQiLCBjb21wb25lbnQucHJvYmxlbXNBc0pzb24pOwogIH0KCiAgdm9pZCB3cml0ZVByb2JsZW1zQXNKc29uKFN0cmluZyBoZWFkZXIsIExpc3Q8U3RyaW5nPiBwcm9ibGVtc0FzSnNvbikgewogICAgaWYgKHByb2JsZW1zQXNKc29uPy5pc0VtcHR5ID09IGZhbHNlKSB7CiAgICAgIGVuZExpbmUoIi8vIik7CiAgICAgIHdyaXRlKCIvLyAiKTsKICAgICAgd3JpdGUoaGVhZGVyKTsKICAgICAgZW5kTGluZSgiOiIpOwogICAgICBlbmRMaW5lKCIvLyIpOwogICAgICBmb3IgKFN0cmluZyBzIGluIHByb2JsZW1zQXNKc29uKSB7CiAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBkZWNvZGVkID0ganNvbi5kZWNvZGUocyk7CiAgICAgICAgTGlzdDxPYmplY3Q+IHBsYWluVGV4dEZvcm1hdHRlZCA9IGRlY29kZWRbInBsYWluVGV4dEZvcm1hdHRlZCJdOwogICAgICAgIExpc3Q8U3RyaW5nPiBsaW5lcyA9IHBsYWluVGV4dEZvcm1hdHRlZC5qb2luKCJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHdyaXRlKCIvLyIpOwogICAgICAgICAgU3RyaW5nIHRyaW1tZWQgPSBsaW5lc1tpXS50cmltUmlnaHQoKTsKICAgICAgICAgIGlmICh0cmltbWVkLmlzTm90RW1wdHkpIHdyaXRlKCIgIik7CiAgICAgICAgICBlbmRMaW5lKHRyaW1tZWQpOwogICAgICAgIH0KICAgICAgICBpZiAobGluZXMuaXNOb3RFbXB0eSkgZW5kTGluZSgiLy8iKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlGaWxlKExpYnJhcnkgbGlicmFyeSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChsaWJyYXJ5LmFubm90YXRpb25zKTsKICAgIHdyaXRlV29yZCgnbGlicmFyeScpOwogICAgaWYgKGxpYnJhcnkubmFtZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlV29yZChsaWJyYXJ5Lm5hbWUpOwogICAgfQogICAgZW5kTGluZSgnOycpOwoKICAgIExpYnJhcnlJbXBvcnRUYWJsZSBpbXBvcnRzID0gbmV3IExpYnJhcnlJbXBvcnRUYWJsZShsaWJyYXJ5KTsKICAgIFByaW50ZXIgaW5uZXIgPSBjcmVhdGVJbm5lcihpbXBvcnRzLCBsaWJyYXJ5LmVuY2xvc2luZ0NvbXBvbmVudD8ubWV0YWRhdGEpOwogICAgaW5uZXIud3JpdGVTdGFuZGFyZExpYnJhcnlDb250ZW50KGxpYnJhcnksCiAgICAgICAgb3V0ZXJQcmludGVyOiB0aGlzLCBpbXBvcnRzVG9QcmludDogaW1wb3J0cyk7CiAgfQoKICB2b2lkIHByaW50TGlicmFyeUltcG9ydFRhYmxlKExpYnJhcnlJbXBvcnRUYWJsZSBpbXBvcnRzKSB7CiAgICBmb3IgKHZhciBsaWJyYXJ5IGluIGltcG9ydHMuaW1wb3J0ZWRMaWJyYXJpZXMpIHsKICAgICAgdmFyIGltcG9ydFBhdGggPSBpbXBvcnRzLmdldEltcG9ydFBhdGgobGlicmFyeSk7CiAgICAgIGlmIChpbXBvcnRQYXRoID09ICIiKSB7CiAgICAgICAgdmFyIHByZWZpeCA9CiAgICAgICAgICAgIHN5bnRoZXRpY05hbWVzLm5hbWVMaWJyYXJ5UHJlZml4KGxpYnJhcnksIHByb3Bvc2VkTmFtZTogJ3NlbGYnKTsKICAgICAgICBlbmRMaW5lKCdpbXBvcnQgc2VsZiBhcyAkcHJlZml4OycpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBwcmVmaXggPSBzeW50aGV0aWNOYW1lcy5uYW1lTGlicmFyeVByZWZpeChsaWJyYXJ5KTsKICAgICAgICBlbmRMaW5lKCdpbXBvcnQgIiRpbXBvcnRQYXRoIiBhcyAkcHJlZml4OycpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlU3RhbmRhcmRMaWJyYXJ5Q29udGVudChMaWJyYXJ5IGxpYnJhcnksCiAgICAgIHtQcmludGVyIG91dGVyUHJpbnRlciwgTGlicmFyeUltcG9ydFRhYmxlIGltcG9ydHNUb1ByaW50fSkgewogICAgb3V0ZXJQcmludGVyID8/PSB0aGlzOwogICAgb3V0ZXJQcmludGVyLndyaXRlUHJvYmxlbXNBc0pzb24oCiAgICAgICAgIlByb2JsZW1zIGluIGxpYnJhcnkiLCBsaWJyYXJ5LnByb2JsZW1zQXNKc29uKTsKCiAgICBpZiAoaW1wb3J0c1RvUHJpbnQgIT0gbnVsbCkgewogICAgICBvdXRlclByaW50ZXIucHJpbnRMaWJyYXJ5SW1wb3J0VGFibGUoaW1wb3J0c1RvUHJpbnQpOwogICAgfQoKICAgIHdyaXRlQWRkaXRpb25hbEV4cG9ydHMobGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cyk7CiAgICBlbmRMaW5lKCk7CiAgICBsaWJyYXJ5LmRlcGVuZGVuY2llcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBpZiAobGlicmFyeS5kZXBlbmRlbmNpZXMuaXNOb3RFbXB0eSkgZW5kTGluZSgpOwogICAgbGlicmFyeS5wYXJ0cy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBsaWJyYXJ5LnR5cGVkZWZzLmZvckVhY2god3JpdGVOb2RlKTsKICAgIGxpYnJhcnkuY2xhc3Nlcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBsaWJyYXJ5LmV4dGVuc2lvbnMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbGlicmFyeS5maWVsZHMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbGlicmFyeS5wcm9jZWR1cmVzLmZvckVhY2god3JpdGVOb2RlKTsKICB9CgogIHZvaWQgd3JpdGVBZGRpdGlvbmFsRXhwb3J0cyhMaXN0PFJlZmVyZW5jZT4gYWRkaXRpb25hbEV4cG9ydHMpIHsKICAgIGlmIChhZGRpdGlvbmFsRXhwb3J0cy5pc0VtcHR5KSByZXR1cm47CiAgICB3cml0ZSgnYWRkaXRpb25hbEV4cG9ydHMgPSAoJyk7CiAgICBib29sIGlzRmlyc3QgPSB0cnVlOwogICAgZm9yIChSZWZlcmVuY2UgcmVmZXJlbmNlIGluIGFkZGl0aW9uYWxFeHBvcnRzKSB7CiAgICAgIGlmIChpc0ZpcnN0KSB7CiAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlKCcsICcpOwogICAgICB9CiAgICAgIHZhciBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICAgIGlmIChub2RlIGlzIENsYXNzKSB7CiAgICAgICAgTGlicmFyeSBub2RlTGlicmFyeSA9IG5vZGUuZW5jbG9zaW5nTGlicmFyeTsKICAgICAgICBTdHJpbmcgcHJlZml4ID0gc3ludGhldGljTmFtZXMubmFtZUxpYnJhcnlQcmVmaXgobm9kZUxpYnJhcnkpOwogICAgICAgIHdyaXRlKHByZWZpeCArICc6OicgKyBub2RlLm5hbWUpOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgRmllbGQpIHsKICAgICAgICBMaWJyYXJ5IG5vZGVMaWJyYXJ5ID0gbm9kZS5lbmNsb3NpbmdMaWJyYXJ5OwogICAgICAgIFN0cmluZyBwcmVmaXggPSBzeW50aGV0aWNOYW1lcy5uYW1lTGlicmFyeVByZWZpeChub2RlTGlicmFyeSk7CiAgICAgICAgd3JpdGUocHJlZml4ICsgJzo6JyArIG5vZGUubmFtZS5uYW1lKTsKICAgICAgfSBlbHNlIGlmIChub2RlIGlzIFByb2NlZHVyZSkgewogICAgICAgIExpYnJhcnkgbm9kZUxpYnJhcnkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgICAgU3RyaW5nIHByZWZpeCA9IHN5bnRoZXRpY05hbWVzLm5hbWVMaWJyYXJ5UHJlZml4KG5vZGVMaWJyYXJ5KTsKICAgICAgICB3cml0ZShwcmVmaXggKyAnOjonICsgbm9kZS5uYW1lLm5hbWUpOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgVHlwZWRlZikgewogICAgICAgIExpYnJhcnkgbm9kZUxpYnJhcnkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgICAgU3RyaW5nIHByZWZpeCA9IHN5bnRoZXRpY05hbWVzLm5hbWVMaWJyYXJ5UHJlZml4KG5vZGVMaWJyYXJ5KTsKICAgICAgICB3cml0ZShwcmVmaXggKyAnOjonICsgbm9kZS5uYW1lKTsKICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UuY2Fub25pY2FsTmFtZSAhPSBudWxsKSB7CiAgICAgICAgd3JpdGUocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUudG9TdHJpbmcoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcignJHtub2RlLnJ1bnRpbWVUeXBlfScpOwogICAgICB9CiAgICAgIGVuZExpbmUoJyknKTsKICAgIH0KCiAgICBlbmRMaW5lKCk7CiAgfQoKICB2b2lkIHdyaXRlQ29tcG9uZW50RmlsZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBJbXBvcnRUYWJsZSBpbXBvcnRzID0gbmV3IENvbXBvbmVudEltcG9ydFRhYmxlKGNvbXBvbmVudCk7CiAgICB2YXIgaW5uZXIgPSBjcmVhdGVJbm5lcihpbXBvcnRzLCBjb21wb25lbnQubWV0YWRhdGEpOwogICAgd3JpdGVXb3JkKCdtYWluJyk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgaW5uZXIud3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKGNvbXBvbmVudC5tYWluTWV0aG9kTmFtZSk7CiAgICBlbmRMaW5lKCc7Jyk7CiAgICBpZiAoc2hvd01ldGFkYXRhKSB7CiAgICAgIGlubmVyLndyaXRlTWV0YWRhdGEoY29tcG9uZW50KTsKICAgIH0KICAgIHdyaXRlQ29tcG9uZW50UHJvYmxlbXMoY29tcG9uZW50KTsKICAgIGZvciAodmFyIGxpYnJhcnkgaW4gY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICBpZiAobGlicmFyeS5pc0V4dGVybmFsKSB7CiAgICAgICAgaWYgKCFzaG93RXh0ZXJuYWwpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB3cml0ZVdvcmQoJ2V4dGVybmFsJyk7CiAgICAgIH0KICAgICAgaWYgKHNob3dNZXRhZGF0YSkgewogICAgICAgIGlubmVyLndyaXRlTWV0YWRhdGEobGlicmFyeSk7CiAgICAgIH0KICAgICAgd3JpdGVBbm5vdGF0aW9uTGlzdChsaWJyYXJ5LmFubm90YXRpb25zKTsKICAgICAgd3JpdGVXb3JkKCdsaWJyYXJ5Jyk7CiAgICAgIGlmIChsaWJyYXJ5Lm5hbWUgIT0gbnVsbCkgewogICAgICAgIHdyaXRlV29yZChsaWJyYXJ5Lm5hbWUpOwogICAgICB9CiAgICAgIGlmIChsaWJyYXJ5LmltcG9ydFVyaSAhPSBudWxsKSB7CiAgICAgICAgd3JpdGVTcGFjZWQoJ2Zyb20nKTsKICAgICAgICB3cml0ZVdvcmQoJyIke2xpYnJhcnkuaW1wb3J0VXJpfSInKTsKICAgICAgfQogICAgICB2YXIgcHJlZml4ID0gc3ludGhldGljTmFtZXMubmFtZUxpYnJhcnlQcmVmaXgobGlicmFyeSk7CiAgICAgIHdyaXRlU3BhY2VkKCdhcycpOwogICAgICB3cml0ZVdvcmQocHJlZml4KTsKICAgICAgZW5kTGluZSgnIHsnKTsKICAgICAgKytpbm5lci5pbmRlbnRhdGlvbjsKCiAgICAgIGlubmVyLndyaXRlU3RhbmRhcmRMaWJyYXJ5Q29udGVudChsaWJyYXJ5KTsKICAgICAgLS1pbm5lci5pbmRlbnRhdGlvbjsKICAgICAgZW5kTGluZSgnfScpOwogICAgfQogICAgd3JpdGVDb25zdGFudFRhYmxlKGNvbXBvbmVudCk7CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RhbnRUYWJsZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBpZiAoc3ludGhldGljTmFtZXMuY29uc3RhbnRzLm1hcC5pc0VtcHR5KSByZXR1cm47CiAgICBJbXBvcnRUYWJsZSBpbXBvcnRzID0gbmV3IENvbXBvbmVudEltcG9ydFRhYmxlKGNvbXBvbmVudCk7CiAgICB2YXIgaW5uZXIgPSBjcmVhdGVJbm5lcihpbXBvcnRzLCBjb21wb25lbnQubWV0YWRhdGEpOwogICAgd3JpdGVXb3JkKCdjb25zdGFudHMgJyk7CiAgICBlbmRMaW5lKCcgeycpOwogICAgKytpbm5lci5pbmRlbnRhdGlvbjsKICAgIGZvciAoZmluYWwgQ29uc3RhbnQgY29uc3RhbnQKICAgICAgICBpbiBzeW50aGV0aWNOYW1lcy5jb25zdGFudHMubWFwLmtleXMudG9MaXN0KCkpIHsKICAgICAgaW5uZXIud3JpdGVOb2RlKGNvbnN0YW50KTsKICAgIH0KICAgIC0taW5uZXIuaW5kZW50YXRpb247CiAgICBlbmRMaW5lKCd9Jyk7CiAgfQoKICBpbnQgZ2V0UHJlY2VkZW5jZShUcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gUHJlY2VkZW5jZS5vZihub2RlKTsKICB9CgogIHZvaWQgd3JpdGUoU3RyaW5nIHN0cmluZykgewogICAgc2luay53cml0ZShzdHJpbmcpOwogICAgY29sdW1uICs9IHN0cmluZy5sZW5ndGg7CiAgfQoKICB2b2lkIHdyaXRlU3BhY2UoW1N0cmluZyBzdHJpbmcgPSAnICddKSB7CiAgICB3cml0ZShzdHJpbmcpOwogICAgc3RhdGUgPSBTUEFDRTsKICB9CgogIHZvaWQgZW5zdXJlU3BhY2UoKSB7CiAgICBpZiAoc3RhdGUgIT0gU1BBQ0UpIHdyaXRlU3BhY2UoKTsKICB9CgogIHZvaWQgd3JpdGVTeW1ib2woU3RyaW5nIHN0cmluZykgewogICAgd3JpdGUoc3RyaW5nKTsKICAgIHN0YXRlID0gU1lNQk9MOwogIH0KCiAgdm9pZCB3cml0ZVNwYWNlZChTdHJpbmcgc3RyaW5nKSB7CiAgICBlbnN1cmVTcGFjZSgpOwogICAgd3JpdGUoc3RyaW5nKTsKICAgIHdyaXRlU3BhY2UoKTsKICB9CgogIHZvaWQgd3JpdGVDb21tYShbU3RyaW5nIHN0cmluZyA9ICcsJ10pIHsKICAgIHdyaXRlKHN0cmluZyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgfQoKICB2b2lkIHdyaXRlV29yZChTdHJpbmcgc3RyaW5nKSB7CiAgICBpZiAoc3RyaW5nLmlzRW1wdHkpIHJldHVybjsKICAgIGVuc3VyZVdvcmRCb3VuZGFyeSgpOwogICAgd3JpdGUoc3RyaW5nKTsKICAgIHN0YXRlID0gV09SRDsKICB9CgogIHZvaWQgZW5zdXJlV29yZEJvdW5kYXJ5KCkgewogICAgaWYgKHN0YXRlID09IFdPUkQpIHsKICAgICAgd3JpdGVTcGFjZSgpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUluZGVudGF0aW9uKCkgewogICAgd3JpdGVTcGFjZSgnICAnICogaW5kZW50YXRpb24pOwogIH0KCiAgdm9pZCB3cml0ZU5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCI8TnVsbD4iKTsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsIGhpZ2hsaWdodCA9IHNob3VsZEhpZ2hsaWdodChub2RlKTsKICAgICAgaWYgKGhpZ2hsaWdodCkgewogICAgICAgIHN0YXJ0SGlnaGxpZ2h0KG5vZGUpOwogICAgICB9CgogICAgICBpZiAoc2hvd09mZnNldHMgJiYgbm9kZSBpcyBUcmVlTm9kZSkgewogICAgICAgIHdyaXRlV29yZCgiWyR7bm9kZS5maWxlT2Zmc2V0fV0iKTsKICAgICAgfQogICAgICBpZiAoc2hvd01ldGFkYXRhICYmIG5vZGUgaXMgVHJlZU5vZGUpIHsKICAgICAgICB3cml0ZU1ldGFkYXRhKG5vZGUpOwogICAgICB9CgogICAgICBub2RlLmFjY2VwdCh0aGlzKTsKCiAgICAgIGlmIChoaWdobGlnaHQpIHsKICAgICAgICBlbmRIaWdobGlnaHQobm9kZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbE5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSAhPSBudWxsKSB7CiAgICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZU1ldGFkYXRhKFRyZWVOb2RlIG5vZGUpIHsKICAgIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgIGZvciAodmFyIG1kIGluIG1ldGFkYXRhLnZhbHVlcykgewogICAgICAgIGZpbmFsIG5vZGVNZXRhZGF0YSA9IG1kLm1hcHBpbmdbbm9kZV07CiAgICAgICAgaWYgKG5vZGVNZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgICAgICB3cml0ZVdvcmQoIltAJHttZC50YWd9PSR7bm9kZU1ldGFkYXRhfV0iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVBbm5vdGF0ZWRUeXBlKERhcnRUeXBlIHR5cGUsIFN0cmluZyBhbm5vdGF0aW9uKSB7CiAgICB3cml0ZVR5cGUodHlwZSk7CiAgICBpZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7CiAgICAgIHdyaXRlKCcvJyk7CiAgICAgIHdyaXRlKGFubm90YXRpb24pOwogICAgICBzdGF0ZSA9IFdPUkQ7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlKCc8Tm8gRGFydFR5cGU+Jyk7CiAgICB9IGVsc2UgewogICAgICB0eXBlLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICB0eXBlLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZpc2l0U3VwZXJ0eXBlKFN1cGVydHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlKCc8Tm8gU3VwZXJ0eXBlPicpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2UodHlwZS5jbGFzc05hbWUpOwogICAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICAgIHdyaXRlTGlzdCh0eXBlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgICAgfQogICAgfQogIH0KCiAgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlKSB7CiAgICB3cml0ZVR5cGVkZWZSZWZlcmVuY2UodHlwZS50eXBlZGVmTm9kZSk7CiAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgd3JpdGVTeW1ib2woJzwnKTsKICAgICAgd3JpdGVMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgd3JpdGVUeXBlKTsKICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVNb2RpZmllcihib29sIGlzVGhlcmUsIFN0cmluZyBuYW1lKSB7CiAgICBpZiAoaXNUaGVyZSkgewogICAgICB3cml0ZVdvcmQobmFtZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTmFtZShOYW1lIG5hbWUpIHsKICAgIGlmIChuYW1lPy5uYW1lID09ICcnKSB7CiAgICAgIHdyaXRlV29yZChlbXB0eU5hbWVTdHJpbmcpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVXb3JkKG5hbWU/Lm5hbWUgPz8gJzxhbm9uPicpOyAvLyBUT0RPOiB3cml0ZSBsaWJyYXJ5IG5hbWUKICAgIH0KICB9CgogIHZvaWQgZW5kTGluZShbU3RyaW5nIHN0cmluZ10pIHsKICAgIGlmIChzdHJpbmcgIT0gbnVsbCkgewogICAgICB3cml0ZShzdHJpbmcpOwogICAgfQogICAgd3JpdGUoJ1xuJyk7CiAgICBzdGF0ZSA9IFNQQUNFOwogICAgY29sdW1uID0gMDsKICB9CgogIHZvaWQgd3JpdGVGdW5jdGlvbihGdW5jdGlvbk5vZGUgZnVuY3Rpb24sCiAgICAgIHtuYW1lLCBMaXN0PEluaXRpYWxpemVyPiBpbml0aWFsaXplcnMsIGJvb2wgdGVybWluYXRlTGluZTogdHJ1ZX0pIHsKICAgIGlmIChuYW1lIGlzIFN0cmluZykgewogICAgICB3cml0ZVdvcmQobmFtZSk7CiAgICB9IGVsc2UgaWYgKG5hbWUgaXMgTmFtZSkgewogICAgICB3cml0ZU5hbWUobmFtZSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobmFtZSA9PSBudWxsKTsKICAgIH0KICAgIHdyaXRlVHlwZVBhcmFtZXRlckxpc3QoZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVQYXJhbWV0ZXJMaXN0KGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICB3cml0ZVJldHVyblR5cGUoCiAgICAgICAgZnVuY3Rpb24ucmV0dXJuVHlwZSwgYW5ub3RhdG9yPy5hbm5vdGF0ZVJldHVybih0aGlzLCBmdW5jdGlvbikpOwogICAgaWYgKGluaXRpYWxpemVycyAhPSBudWxsICYmIGluaXRpYWxpemVycy5pc05vdEVtcHR5KSB7CiAgICAgIGVuZExpbmUoKTsKICAgICAgKytpbmRlbnRhdGlvbjsKICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB3cml0ZUNvbW1hKCc6Jyk7CiAgICAgIHdyaXRlTGlzdChpbml0aWFsaXplcnMsIHdyaXRlTm9kZSk7CiAgICAgIC0taW5kZW50YXRpb247CiAgICB9CiAgICBpZiAoZnVuY3Rpb24uYXN5bmNNYXJrZXIgIT0gQXN5bmNNYXJrZXIuU3luYykgewogICAgICB3cml0ZVNwYWNlZChnZXRBc3luY01hcmtlcktleXdvcmQoZnVuY3Rpb24uYXN5bmNNYXJrZXIpKTsKICAgIH0KICAgIGlmIChmdW5jdGlvbi5kYXJ0QXN5bmNNYXJrZXIgIT0gQXN5bmNNYXJrZXIuU3luYyAmJgogICAgICAgIGZ1bmN0aW9uLmRhcnRBc3luY01hcmtlciAhPSBmdW5jdGlvbi5hc3luY01hcmtlcikgewogICAgICB3cml0ZVNwYWNlZCgiLyogb3JpZ2luYWxseSIpOwogICAgICB3cml0ZVNwYWNlZChnZXRBc3luY01hcmtlcktleXdvcmQoZnVuY3Rpb24uZGFydEFzeW5jTWFya2VyKSk7CiAgICAgIHdyaXRlU3BhY2VkKCIqLyIpOwogICAgfQogICAgaWYgKGZ1bmN0aW9uLmJvZHkgIT0gbnVsbCkgewogICAgICB3cml0ZUZ1bmN0aW9uQm9keShmdW5jdGlvbi5ib2R5LCB0ZXJtaW5hdGVMaW5lOiB0ZXJtaW5hdGVMaW5lKTsKICAgIH0gZWxzZSBpZiAodGVybWluYXRlTGluZSkgewogICAgICBlbmRMaW5lKCc7Jyk7CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0QXN5bmNNYXJrZXJLZXl3b3JkKEFzeW5jTWFya2VyIG1hcmtlcikgewogICAgc3dpdGNoIChtYXJrZXIpIHsKICAgICAgY2FzZSBBc3luY01hcmtlci5TeW5jOgogICAgICAgIHJldHVybiAnc3luYyc7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU3luY1N0YXI6CiAgICAgICAgcmV0dXJuICdzeW5jKic7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQXN5bmM6CiAgICAgICAgcmV0dXJuICdhc3luYyc7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQXN5bmNTdGFyOgogICAgICAgIHJldHVybiAnYXN5bmMqJzsKICAgICAgY2FzZSBBc3luY01hcmtlci5TeW5jWWllbGRpbmc6CiAgICAgICAgcmV0dXJuICd5aWVsZGluZyc7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICc8SW52YWxpZCBhc3luYyBtYXJrZXI6ICRtYXJrZXI+JzsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVGdW5jdGlvbkJvZHkoU3RhdGVtZW50IGJvZHksIHtib29sIHRlcm1pbmF0ZUxpbmU6IHRydWV9KSB7CiAgICBpZiAoYm9keSBpcyBCbG9jayAmJiBib2R5LnN0YXRlbWVudHMuaXNFbXB0eSkgewogICAgICBlbnN1cmVTcGFjZSgpOwogICAgICB3cml0ZVN5bWJvbCgne30nKTsKICAgICAgc3RhdGUgPSBXT1JEOwogICAgICBpZiAodGVybWluYXRlTGluZSkgewogICAgICAgIGVuZExpbmUoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChib2R5IGlzIEJsb2NrKSB7CiAgICAgIGVuc3VyZVNwYWNlKCk7CiAgICAgIGVuZExpbmUoJ3snKTsKICAgICAgKytpbmRlbnRhdGlvbjsKICAgICAgYm9keS5zdGF0ZW1lbnRzLmZvckVhY2god3JpdGVOb2RlKTsKICAgICAgLS1pbmRlbnRhdGlvbjsKICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB3cml0ZVN5bWJvbCgnfScpOwogICAgICBzdGF0ZSA9IFdPUkQ7CiAgICAgIGlmICh0ZXJtaW5hdGVMaW5lKSB7CiAgICAgICAgZW5kTGluZSgpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGJvZHkgaXMgUmV0dXJuU3RhdGVtZW50ICYmICF0ZXJtaW5hdGVMaW5lKSB7CiAgICAgIHdyaXRlU3BhY2VkKCc9PicpOwogICAgICB3cml0ZUV4cHJlc3Npb24oYm9keS5leHByZXNzaW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlQm9keShib2R5KTsKICAgIH0KICB9CgogIHdyaXRlRnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlLAogICAgICB7TGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB0eXBlZGVmUG9zaXRpb25hbCwKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB0eXBlZGVmTmFtZWR9KSB7CiAgICBpZiAoc3RhdGUgPT0gV09SRCkgewogICAgICBlbnN1cmVTcGFjZSgpOwogICAgfQogICAgd3JpdGVUeXBlUGFyYW1ldGVyTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICBMaXN0PERhcnRUeXBlPiBwb3NpdGlvbmFsID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyczsKCiAgICBib29sIHBhcmFtZXRlcnNBbm5vdGF0ZWQgPSBmYWxzZTsKICAgIGlmICh0eXBlZGVmUG9zaXRpb25hbCAhPSBudWxsKSB7CiAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwgaW4gdHlwZWRlZlBvc2l0aW9uYWwpIHsKICAgICAgICBwYXJhbWV0ZXJzQW5ub3RhdGVkID0KICAgICAgICAgICAgcGFyYW1ldGVyc0Fubm90YXRlZCB8fCBmb3JtYWwuYW5ub3RhdGlvbnMubGVuZ3RoID4gMDsKICAgICAgfQogICAgfQogICAgaWYgKHR5cGVkZWZOYW1lZCAhPSBudWxsKSB7CiAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwgaW4gdHlwZWRlZk5hbWVkKSB7CiAgICAgICAgcGFyYW1ldGVyc0Fubm90YXRlZCA9CiAgICAgICAgICAgIHBhcmFtZXRlcnNBbm5vdGF0ZWQgfHwgZm9ybWFsLmFubm90YXRpb25zLmxlbmd0aCA+IDA7CiAgICAgIH0KICAgIH0KCiAgICBpZiAocGFyYW1ldGVyc0Fubm90YXRlZCAmJiB0eXBlZGVmUG9zaXRpb25hbCAhPSBudWxsKSB7CiAgICAgIHdyaXRlTGlzdCh0eXBlZGVmUG9zaXRpb25hbC50YWtlKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCksCiAgICAgICAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVMaXN0KHBvc2l0aW9uYWwudGFrZShub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpLCB3cml0ZVR5cGUpOwogICAgfQoKICAgIGlmIChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPCBwb3NpdGlvbmFsLmxlbmd0aCkgewogICAgICBpZiAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID4gMCkgewogICAgICAgIHdyaXRlQ29tbWEoKTsKICAgICAgfQogICAgICB3cml0ZVN5bWJvbCgnWycpOwogICAgICBpZiAocGFyYW1ldGVyc0Fubm90YXRlZCAmJiB0eXBlZGVmUG9zaXRpb25hbCAhPSBudWxsKSB7CiAgICAgICAgd3JpdGVMaXN0KHR5cGVkZWZQb3NpdGlvbmFsLnNraXAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSwKICAgICAgICAgICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cml0ZUxpc3QocG9zaXRpb25hbC5za2lwKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCksIHdyaXRlVHlwZSk7CiAgICAgIH0KICAgICAgd3JpdGVTeW1ib2woJ10nKTsKICAgIH0KICAgIGlmIChub2RlLm5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICB3cml0ZUNvbW1hKCk7CiAgICAgIH0KICAgICAgd3JpdGVTeW1ib2woJ3snKTsKICAgICAgaWYgKHBhcmFtZXRlcnNBbm5vdGF0ZWQgJiYgdHlwZWRlZk5hbWVkICE9IG51bGwpIHsKICAgICAgICB3cml0ZUxpc3QodHlwZWRlZk5hbWVkLCB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlTGlzdChub2RlLm5hbWVkUGFyYW1ldGVycywgdmlzaXROYW1lZFR5cGUpOwogICAgICB9CiAgICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnKScpOwogICAgZW5zdXJlU3BhY2UoKTsKICAgIHdyaXRlKCfihpInKTsKICAgIHdyaXRlTnVsbGFiaWxpdHkobm9kZS5udWxsYWJpbGl0eSk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZVR5cGUobm9kZS5yZXR1cm5UeXBlKTsKICB9CgogIHZvaWQgd3JpdGVCb2R5KFN0YXRlbWVudCBib2R5KSB7CiAgICBpZiAoYm9keSBpcyBCbG9jaykgewogICAgICBlbmRMaW5lKCcgeycpOwogICAgICArK2luZGVudGF0aW9uOwogICAgICBib2R5LnN0YXRlbWVudHMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgICAtLWluZGVudGF0aW9uOwogICAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICAgIGVuZExpbmUoJ30nKTsKICAgIH0gZWxzZSB7CiAgICAgIGVuZExpbmUoKTsKICAgICAgKytpbmRlbnRhdGlvbjsKICAgICAgd3JpdGVOb2RlKGJvZHkpOwogICAgICAtLWluZGVudGF0aW9uOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZVJldHVyblR5cGUoRGFydFR5cGUgdHlwZSwgU3RyaW5nIGFubm90YXRpb24pIHsKICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybjsKICAgIHdyaXRlU3BhY2VkKCfihpInKTsKICAgIHdyaXRlQW5ub3RhdGVkVHlwZSh0eXBlLCBhbm5vdGF0aW9uKTsKICB9CgogIHZvaWQgd3JpdGVUeXBlUGFyYW1ldGVyTGlzdChMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKSB7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuOwogICAgd3JpdGVTeW1ib2woJzwnKTsKICAgIHdyaXRlTGlzdCh0eXBlUGFyYW1ldGVycywgd3JpdGVOb2RlKTsKICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICBzdGF0ZSA9IFdPUkQ7IC8vIEVuc3VyZSBzcGFjZSBpZiBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciBzeW1ib2wuCiAgfQoKICB2b2lkIHdyaXRlUGFyYW1ldGVyTGlzdChMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWwsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWQsIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgd3JpdGVMaXN0KAogICAgICAgIHBvc2l0aW9uYWwudGFrZShyZXF1aXJlZFBhcmFtZXRlckNvdW50KSwgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgIGlmIChyZXF1aXJlZFBhcmFtZXRlckNvdW50IDwgcG9zaXRpb25hbC5sZW5ndGgpIHsKICAgICAgaWYgKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPiAwKSB7CiAgICAgICAgd3JpdGVDb21tYSgpOwogICAgICB9CiAgICAgIHdyaXRlU3ltYm9sKCdbJyk7CiAgICAgIHdyaXRlTGlzdCgKICAgICAgICAgIHBvc2l0aW9uYWwuc2tpcChyZXF1aXJlZFBhcmFtZXRlckNvdW50KSwgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgICAgd3JpdGVTeW1ib2woJ10nKTsKICAgIH0KICAgIGlmIChuYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChwb3NpdGlvbmFsLmlzTm90RW1wdHkpIHsKICAgICAgICB3cml0ZUNvbW1hKCk7CiAgICAgIH0KICAgICAgd3JpdGVTeW1ib2woJ3snKTsKICAgICAgd3JpdGVMaXN0KG5hbWVkLCB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgICB3cml0ZVN5bWJvbCgnfScpOwogICAgfQogICAgd3JpdGVTeW1ib2woJyknKTsKICB9CgogIHZvaWQgd3JpdGVMaXN0PFQ+KEl0ZXJhYmxlPFQ+IG5vZGVzLCB2b2lkIGNhbGxiYWNrKFQgeCksCiAgICAgIHtTdHJpbmcgc2VwYXJhdG9yOiAnLCd9KSB7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGZvciAodmFyIG5vZGUgaW4gbm9kZXMpIHsKICAgICAgaWYgKGZpcnN0KSB7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cml0ZUNvbW1hKHNlcGFyYXRvcik7CiAgICAgIH0KICAgICAgY2FsbGJhY2sobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIHdyaXRlV29yZChnZXRDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2UocmVmZXJlbmNlKSk7CiAgfQoKICBTdHJpbmcgZ2V0Q2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIGlmIChyZWZlcmVuY2UgPT0gbnVsbCkgcmV0dXJuICc8Tm8gQ2xhc3M+JzsKICAgIGlmIChyZWZlcmVuY2Uubm9kZSAhPSBudWxsKSByZXR1cm4gZ2V0Q2xhc3NSZWZlcmVuY2UocmVmZXJlbmNlLmFzQ2xhc3MpOwogICAgaWYgKHJlZmVyZW5jZS5jYW5vbmljYWxOYW1lICE9IG51bGwpCiAgICAgIHJldHVybiBnZXRDYW5vbmljYWxOYW1lU3RyaW5nKHJlZmVyZW5jZS5jYW5vbmljYWxOYW1lKTsKICAgIHRocm93ICJOZWl0aGVyIG5vZGUgbm9yIGNhbm9uaWNhbCBuYW1lIGZvdW5kIjsKICB9CgogIHZvaWQgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIHdyaXRlV29yZChnZXRNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKHJlZmVyZW5jZSkpOwogIH0KCiAgU3RyaW5nIGdldE1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewogICAgaWYgKHJlZmVyZW5jZSA9PSBudWxsKSByZXR1cm4gJzxObyBNZW1iZXI+JzsKICAgIGlmIChyZWZlcmVuY2Uubm9kZSAhPSBudWxsKSByZXR1cm4gZ2V0TWVtYmVyUmVmZXJlbmNlKHJlZmVyZW5jZS5hc01lbWJlcik7CiAgICBpZiAocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUgIT0gbnVsbCkKICAgICAgcmV0dXJuIGdldENhbm9uaWNhbE5hbWVTdHJpbmcocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUpOwogICAgdGhyb3cgIk5laXRoZXIgbm9kZSBub3IgY2Fub25pY2FsIG5hbWUgZm91bmQiOwogIH0KCiAgU3RyaW5nIGdldENhbm9uaWNhbE5hbWVTdHJpbmcoQ2Fub25pY2FsTmFtZSBuYW1lKSB7CiAgICBpZiAobmFtZS5pc1Jvb3QpIHRocm93ICd1bmV4cGVjdGVkIHJvb3QnOwogICAgaWYgKG5hbWUubmFtZS5zdGFydHNXaXRoKCdAJykpIHRocm93ICd1bmV4cGVjdGVkIEAnOwoKICAgIGxpYnJhcnlTdHJpbmcoQ2Fub25pY2FsTmFtZSBsaWIpIHsKICAgICAgaWYgKGxpYi5yZWZlcmVuY2U/Lm5vZGUgIT0gbnVsbCkKICAgICAgICByZXR1cm4gZ2V0TGlicmFyeVJlZmVyZW5jZShsaWIucmVmZXJlbmNlLmFzTGlicmFyeSk7CiAgICAgIHJldHVybiBzeW50aGV0aWNOYW1lcy5uYW1lQ2Fub25pY2FsTmFtZUFzTGlicmFyeVByZWZpeCgKICAgICAgICAgIGxpYi5yZWZlcmVuY2UsIGxpYik7CiAgICB9CgogICAgY2xhc3NTdHJpbmcoQ2Fub25pY2FsTmFtZSBjbHMpID0+CiAgICAgICAgbGlicmFyeVN0cmluZyhjbHMucGFyZW50KSArICc6OicgKyBjbHMubmFtZTsKCiAgICBpZiAobmFtZS5wYXJlbnQuaXNSb290KSByZXR1cm4gbGlicmFyeVN0cmluZyhuYW1lKTsKICAgIGlmIChuYW1lLnBhcmVudC5wYXJlbnQuaXNSb290KSByZXR1cm4gY2xhc3NTdHJpbmcobmFtZSk7CgogICAgQ2Fub25pY2FsTmFtZSBhdE5vZGUgPSBuYW1lLnBhcmVudDsKICAgIHdoaWxlICghYXROb2RlLm5hbWUuc3RhcnRzV2l0aCgnQCcpKSBhdE5vZGUgPSBhdE5vZGUucGFyZW50OwoKICAgIFN0cmluZyBwYXJlbnQgPSAiIjsKICAgIGlmIChhdE5vZGUucGFyZW50LnBhcmVudC5pc1Jvb3QpIHsKICAgICAgcGFyZW50ID0gbGlicmFyeVN0cmluZyhhdE5vZGUucGFyZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcmVudCA9IGNsYXNzU3RyaW5nKGF0Tm9kZS5wYXJlbnQpOwogICAgfQoKICAgIGlmIChuYW1lLm5hbWUgPT0gJycpIHJldHVybiAiJHBhcmVudDo6JGVtcHR5TmFtZVN0cmluZyI7CiAgICByZXR1cm4gIiRwYXJlbnQ6OiR7bmFtZS5uYW1lfSI7CiAgfQoKICB2b2lkIHdyaXRlVHlwZWRlZlJlZmVyZW5jZShUeXBlZGVmIHR5cGVkZWZOb2RlKSB7CiAgICB3cml0ZVdvcmQoZ2V0VHlwZWRlZlJlZmVyZW5jZSh0eXBlZGVmTm9kZSkpOwogIH0KCiAgdm9pZCB3cml0ZVZhcmlhYmxlUmVmZXJlbmNlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIGZpbmFsIGhpZ2hsaWdodCA9IHNob3VsZEhpZ2hsaWdodCh2YXJpYWJsZSk7CiAgICBpZiAoaGlnaGxpZ2h0KSB7CiAgICAgIHN0YXJ0SGlnaGxpZ2h0KHZhcmlhYmxlKTsKICAgIH0KICAgIHdyaXRlV29yZChnZXRWYXJpYWJsZVJlZmVyZW5jZSh2YXJpYWJsZSkpOwogICAgaWYgKGhpZ2hsaWdodCkgewogICAgICBlbmRIaWdobGlnaHQodmFyaWFibGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZVR5cGVQYXJhbWV0ZXJSZWZlcmVuY2UoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICB3cml0ZVdvcmQoZ2V0VHlwZVBhcmFtZXRlclJlZmVyZW5jZShub2RlKSk7CiAgfQoKICB2b2lkIHdyaXRlRXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUsIFtpbnQgbWluaW11bVByZWNlZGVuY2VdKSB7CiAgICBmaW5hbCBoaWdobGlnaHQgPSBzaG91bGRIaWdobGlnaHQobm9kZSk7CiAgICBpZiAoaGlnaGxpZ2h0KSB7CiAgICAgIHN0YXJ0SGlnaGxpZ2h0KG5vZGUpOwogICAgfQogICAgaWYgKHNob3dPZmZzZXRzKSB3cml0ZVdvcmQoIlske25vZGUuZmlsZU9mZnNldH1dIik7CiAgICBib29sIG5lZWRzUGFyZW50ZXNlcyA9IGZhbHNlOwogICAgaWYgKG1pbmltdW1QcmVjZWRlbmNlICE9IG51bGwgJiYgZ2V0UHJlY2VkZW5jZShub2RlKSA8IG1pbmltdW1QcmVjZWRlbmNlKSB7CiAgICAgIG5lZWRzUGFyZW50ZXNlcyA9IHRydWU7CiAgICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB9CiAgICB3cml0ZU5vZGUobm9kZSk7CiAgICBpZiAobmVlZHNQYXJlbnRlc2VzKSB7CiAgICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB9CiAgICBpZiAoaGlnaGxpZ2h0KSB7CiAgICAgIGVuZEhpZ2hsaWdodChub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVBbm5vdGF0aW9uKEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVTeW1ib2woJ0AnKTsKICAgIGlmIChub2RlIGlzIENvbnN0cnVjdG9ySW52b2NhdGlvbikgewogICAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgICB2aXNpdEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQW5ub3RhdGlvbkxpc3QoTGlzdDxFeHByZXNzaW9uPiBub2Rlcywge2Jvb2wgc2VwYXJhdGVMaW5lczogdHJ1ZX0pIHsKICAgIGZvciAoRXhwcmVzc2lvbiBub2RlIGluIG5vZGVzKSB7CiAgICAgIGlmIChzZXBhcmF0ZUxpbmVzKSB7CiAgICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIHdyaXRlQW5ub3RhdGlvbihub2RlKTsKICAgICAgaWYgKHNlcGFyYXRlTGluZXMpIHsKICAgICAgICBlbmRMaW5lKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd3JpdGVTcGFjZSgpOwogICAgICB9CiAgICB9CiAgfQoKICB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSB7fQoKICB2aXNpdEZpZWxkKEZpZWxkIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNMYXRlLCAnbGF0ZScpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzU3RhdGljLCAnc3RhdGljJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNDb3ZhcmlhbnQsICdjb3ZhcmlhbnQnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsLCAnZ2VuZXJpYy1jb3ZhcmlhbnQtaW1wbCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzRmluYWwsICdmaW5hbCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQ29uc3QsICdjb25zdCcpOwogICAgLy8gT25seSBzaG93IGltcGxpY2l0IGdldHRlci9zZXR0ZXIgbW9kaWZpZXJzIGluIGNhc2VzIHdoZXJlIHRoZXkgYXJlCiAgICAvLyBvdXQgb2YgdGhlIG9yZGluYXJ5LgogICAgaWYgKG5vZGUuaXNTdGF0aWMpIHsKICAgICAgd3JpdGVNb2RpZmllcihub2RlLmhhc0ltcGxpY2l0R2V0dGVyLCAnW2dldHRlcl0nKTsKICAgICAgd3JpdGVNb2RpZmllcihub2RlLmhhc0ltcGxpY2l0U2V0dGVyLCAnW3NldHRlcl0nKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlTW9kaWZpZXIoIW5vZGUuaGFzSW1wbGljaXRHZXR0ZXIsICdbbm8tZ2V0dGVyXScpOwogICAgICBpZiAobm9kZS5pc0ZpbmFsKSB7CiAgICAgICAgd3JpdGVNb2RpZmllcihub2RlLmhhc0ltcGxpY2l0U2V0dGVyLCAnW3NldHRlcl0nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cml0ZU1vZGlmaWVyKCFub2RlLmhhc0ltcGxpY2l0U2V0dGVyLCAnW25vLXNldHRlcl0nKTsKICAgICAgfQogICAgfQogICAgd3JpdGVXb3JkKCdmaWVsZCcpOwogICAgd3JpdGVTcGFjZSgpOwogICAgd3JpdGVBbm5vdGF0ZWRUeXBlKG5vZGUudHlwZSwgYW5ub3RhdG9yPy5hbm5vdGF0ZUZpZWxkKHRoaXMsIG5vZGUpKTsKICAgIHdyaXRlTmFtZShnZXRNZW1iZXJOYW1lKG5vZGUpKTsKICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgfQogICAgaWYgKChub2RlLmVuY2xvc2luZ0NsYXNzID09IG51bGwgJiYKICAgICAgICAgICAgbm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmZpbGVVcmkgIT0gbm9kZS5maWxlVXJpKSB8fAogICAgICAgIChub2RlLmVuY2xvc2luZ0NsYXNzICE9IG51bGwgJiYKICAgICAgICAgICAgbm9kZS5lbmNsb3NpbmdDbGFzcy5maWxlVXJpICE9IG5vZGUuZmlsZVVyaSkpIHsKICAgICAgd3JpdGVXb3JkKCIvKiBmcm9tICR7bm9kZS5maWxlVXJpfSAqLyIpOwogICAgfQogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdmlzaXRQcm9jZWR1cmUoUHJvY2VkdXJlIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNFeHRlcm5hbCwgJ2V4dGVybmFsJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNTdGF0aWMsICdzdGF0aWMnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0Fic3RyYWN0LCAnYWJzdHJhY3QnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0ZvcndhcmRpbmdTdHViLCAnZm9yd2FyZGluZy1zdHViJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNGb3J3YXJkaW5nU2VtaVN0dWIsICdmb3J3YXJkaW5nLXNlbWktc3R1YicpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyLCAnbm8tc3VjaC1tZXRob2QtZm9yd2FyZGVyJyk7CiAgICB3cml0ZVdvcmQocHJvY2VkdXJlS2luZFRvU3RyaW5nKG5vZGUua2luZCkpOwogICAgaWYgKChub2RlLmVuY2xvc2luZ0NsYXNzID09IG51bGwgJiYKICAgICAgICAgICAgbm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmZpbGVVcmkgIT0gbm9kZS5maWxlVXJpKSB8fAogICAgICAgIChub2RlLmVuY2xvc2luZ0NsYXNzICE9IG51bGwgJiYKICAgICAgICAgICAgbm9kZS5lbmNsb3NpbmdDbGFzcy5maWxlVXJpICE9IG5vZGUuZmlsZVVyaSkpIHsKICAgICAgd3JpdGVXb3JkKCIvKiBmcm9tICR7bm9kZS5maWxlVXJpfSAqLyIpOwogICAgfQogICAgd3JpdGVGdW5jdGlvbihub2RlLmZ1bmN0aW9uLCBuYW1lOiBnZXRNZW1iZXJOYW1lKG5vZGUpKTsKICB9CgogIHZpc2l0Q29uc3RydWN0b3IoQ29uc3RydWN0b3Igbm9kZSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0V4dGVybmFsLCAnZXh0ZXJuYWwnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0NvbnN0LCAnY29uc3QnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc1N5bnRoZXRpYywgJ3N5bnRoZXRpYycpOwogICAgd3JpdGVXb3JkKCdjb25zdHJ1Y3RvcicpOwogICAgd3JpdGVGdW5jdGlvbihub2RlLmZ1bmN0aW9uLAogICAgICAgIG5hbWU6IG5vZGUubmFtZSwgaW5pdGlhbGl6ZXJzOiBub2RlLmluaXRpYWxpemVycyk7CiAgfQoKICB2aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNFeHRlcm5hbCwgJ2V4dGVybmFsJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNDb25zdCwgJ2NvbnN0Jyk7CiAgICB3cml0ZVdvcmQoJ3JlZGlyZWN0aW5nX2ZhY3RvcnknKTsKCiAgICBpZiAobm9kZS5uYW1lICE9IG51bGwpIHsKICAgICAgd3JpdGVOYW1lKG5vZGUubmFtZSk7CiAgICB9CiAgICB3cml0ZVR5cGVQYXJhbWV0ZXJMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVQYXJhbWV0ZXJMaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMsIG5vZGUubmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICB3cml0ZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzLCB3cml0ZVR5cGUpOwogICAgICB3cml0ZVN5bWJvbCgnPicpOwogICAgfQogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdmlzaXRDbGFzcyhDbGFzcyBub2RlKSB7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQWJzdHJhY3QsICdhYnN0cmFjdCcpOwogICAgd3JpdGVXb3JkKCdjbGFzcycpOwogICAgd3JpdGVXb3JkKGdldENsYXNzTmFtZShub2RlKSk7CiAgICB3cml0ZVR5cGVQYXJhbWV0ZXJMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgaWYgKG5vZGUuaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICAgIHZpc2l0U3VwZXJ0eXBlKG5vZGUuc3VwZXJ0eXBlKTsKICAgICAgd3JpdGVTcGFjZWQoJ3dpdGgnKTsKICAgICAgdmlzaXRTdXBlcnR5cGUobm9kZS5taXhlZEluVHlwZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUuc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgd3JpdGVTcGFjZWQoJ2V4dGVuZHMnKTsKICAgICAgdmlzaXRTdXBlcnR5cGUobm9kZS5zdXBlcnR5cGUpOwogICAgfQogICAgaWYgKG5vZGUuaW1wbGVtZW50ZWRUeXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIHdyaXRlU3BhY2VkKCdpbXBsZW1lbnRzJyk7CiAgICAgIHdyaXRlTGlzdChub2RlLmltcGxlbWVudGVkVHlwZXMsIHZpc2l0U3VwZXJ0eXBlKTsKICAgIH0KICAgIHZhciBlbmRMaW5lU3RyaW5nID0gJyB7JzsKICAgIGlmIChub2RlLmVuY2xvc2luZ0xpYnJhcnkuZmlsZVVyaSAhPSBub2RlLmZpbGVVcmkpIHsKICAgICAgZW5kTGluZVN0cmluZyArPSAnIC8vIGZyb20gJHtub2RlLmZpbGVVcml9JzsKICAgIH0KICAgIGVuZExpbmUoZW5kTGluZVN0cmluZyk7CiAgICArK2luZGVudGF0aW9uOwogICAgbm9kZS5maWVsZHMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbm9kZS5jb25zdHJ1Y3RvcnMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbm9kZS5wcm9jZWR1cmVzLmZvckVhY2god3JpdGVOb2RlKTsKICAgIG5vZGUucmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLmZvckVhY2god3JpdGVOb2RlKTsKICAgIC0taW5kZW50YXRpb247CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBlbmRMaW5lKCd9Jyk7CiAgfQoKICB2aXNpdEV4dGVuc2lvbihFeHRlbnNpb24gbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKCdleHRlbnNpb24nKTsKICAgIHdyaXRlV29yZChnZXRFeHRlbnNpb25OYW1lKG5vZGUpKTsKICAgIHdyaXRlVHlwZVBhcmFtZXRlckxpc3Qobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICB3cml0ZVNwYWNlZCgnb24nKTsKICAgIHdyaXRlVHlwZShub2RlLm9uVHlwZSk7CiAgICB2YXIgZW5kTGluZVN0cmluZyA9ICcgeyc7CiAgICBpZiAobm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmZpbGVVcmkgIT0gbm9kZS5maWxlVXJpKSB7CiAgICAgIGVuZExpbmVTdHJpbmcgKz0gJyAvLyBmcm9tICR7bm9kZS5maWxlVXJpfSc7CiAgICB9CiAgICBlbmRMaW5lKGVuZExpbmVTdHJpbmcpOwogICAgKytpbmRlbnRhdGlvbjsKICAgIG5vZGUubWVtYmVycy5mb3JFYWNoKChFeHRlbnNpb25NZW1iZXJEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB3cml0ZU1vZGlmaWVyKGRlc2NyaXB0b3IuaXNFeHRlcm5hbCwgJ2V4dGVybmFsJyk7CiAgICAgIHdyaXRlTW9kaWZpZXIoZGVzY3JpcHRvci5pc1N0YXRpYywgJ3N0YXRpYycpOwogICAgICBpZiAoZGVzY3JpcHRvci5tZW1iZXIuYXNNZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgd3JpdGVXb3JkKHByb2NlZHVyZUtpbmRUb1N0cmluZyhkZXNjcmlwdG9yLmtpbmQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cml0ZVdvcmQoJ2ZpZWxkJyk7CiAgICAgIH0KICAgICAgd3JpdGVOYW1lKGRlc2NyaXB0b3IubmFtZSk7CiAgICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShkZXNjcmlwdG9yLm1lbWJlcik7CiAgICAgIGVuZExpbmUoJzsnKTsKICAgIH0pOwogICAgLS1pbmRlbnRhdGlvbjsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIGVuZExpbmUoJ30nKTsKICB9CgogIHZpc2l0VHlwZWRlZihUeXBlZGVmIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3R5cGVkZWYnKTsKICAgIHdyaXRlV29yZChub2RlLm5hbWUpOwogICAgd3JpdGVUeXBlUGFyYW1ldGVyTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICBpZiAobm9kZS50eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICB3cml0ZUZ1bmN0aW9uVHlwZShub2RlLnR5cGUsCiAgICAgICAgICB0eXBlZGVmUG9zaXRpb25hbDogbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICAgIHR5cGVkZWZOYW1lZDogbm9kZS5uYW1lZFBhcmFtZXRlcnMpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CiAgICB9CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnaW52YWxpZC1leHByZXNzaW9uJyk7CiAgICBpZiAobm9kZS5tZXNzYWdlICE9IG51bGwpIHsKICAgICAgd3JpdGVXb3JkKCciJHtlc2NhcGVTdHJpbmcobm9kZS5tZXNzYWdlKX0iJyk7CiAgICB9CiAgfQoKICB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5yZWNlaXZlciwgUHJlY2VkZW5jZS5QUklNQVJZKTsKICAgIHdyaXRlU3ltYm9sKCcuJyk7CiAgICB3cml0ZUludGVyZmFjZVRhcmdldChub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5yZWNlaXZlciwgUHJlY2VkZW5jZS5QUklNQVJZKTsKICAgIHdyaXRlU3ltYm9sKCcuez0nKTsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZVN5bWJvbCgnfScpOwogICAgd3JpdGVOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKFN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ3N1cGVyJyk7CiAgICB3cml0ZVN5bWJvbCgnLicpOwogICAgd3JpdGVJbnRlcmZhY2VUYXJnZXQobm9kZS5uYW1lLCBub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQ29uc3QsICdjb25zdCcpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgd3JpdGVXb3JkKG5vZGUuaXNDb25zdCA/ICdjb25zdCcgOiAnbmV3Jyk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIHZpc2l0Tm90KE5vdCBub2RlKSB7CiAgICB3cml0ZVN5bWJvbCgnIScpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUub3BlcmFuZCwgUHJlY2VkZW5jZS5QUkVGSVgpOwogIH0KCiAgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihMb2dpY2FsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpbnQgcHJlY2VkZW5jZSA9IFByZWNlZGVuY2UuYmluYXJ5UHJlY2VkZW5jZVtub2RlLm9wZXJhdG9yXTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmxlZnQsIHByZWNlZGVuY2UpOwogICAgd3JpdGVTcGFjZWQobm9kZS5vcGVyYXRvcik7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5yaWdodCwgcHJlY2VkZW5jZSArIDEpOwogIH0KCiAgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbiwgUHJlY2VkZW5jZS5MT0dJQ0FMX09SKTsKICAgIGVuc3VyZVNwYWNlKCk7CiAgICB3cml0ZSgnPycpOwogICAgd3JpdGVTdGF0aWNUeXBlKG5vZGUuc3RhdGljVHlwZSk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS50aGVuKTsKICAgIHdyaXRlU3BhY2VkKCc6Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5vdGhlcndpc2UpOwogIH0KCiAgU3RyaW5nIGdldEVzY2FwZWRDaGFyYWN0ZXIoaW50IGNvZGVVbml0KSB7CiAgICBzd2l0Y2ggKGNvZGVVbml0KSB7CiAgICAgIGNhc2UgOToKICAgICAgICByZXR1cm4gcidcdCc7CiAgICAgIGNhc2UgMTA6CiAgICAgICAgcmV0dXJuIHInXG4nOwogICAgICBjYXNlIDExOgogICAgICAgIHJldHVybiByJ1x2JzsKICAgICAgY2FzZSAxMjoKICAgICAgICByZXR1cm4gcidcZic7CiAgICAgIGNhc2UgMTM6CiAgICAgICAgcmV0dXJuIHInXHInOwogICAgICBjYXNlIDM0OgogICAgICAgIHJldHVybiByJ1wiJzsKICAgICAgY2FzZSAzNjoKICAgICAgICByZXR1cm4gcidcJCc7CiAgICAgIGNhc2UgOTI6CiAgICAgICAgcmV0dXJuIHInXFwnOwogICAgICBkZWZhdWx0OgogICAgICAgIGlmIChjb2RlVW5pdCA8IDMyIHx8IGNvZGVVbml0ID4gMTI2KSB7CiAgICAgICAgICByZXR1cm4gcidcdScgKyAnJGNvZGVVbml0Jy5wYWRMZWZ0KDQsICcwJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KICB9CgogIFN0cmluZyBlc2NhcGVTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7CiAgICAgIFN0cmluZyBjaGFyYWN0ZXIgPSBnZXRFc2NhcGVkQ2hhcmFjdGVyKHN0cmluZy5jb2RlVW5pdEF0KGkpKTsKICAgICAgaWYgKGNoYXJhY3RlciAhPSBudWxsKSB7CiAgICAgICAgYnVmZmVyID8/PSBuZXcgU3RyaW5nQnVmZmVyKHN0cmluZy5zdWJzdHJpbmcoMCwgaSkpOwogICAgICAgIGJ1ZmZlci53cml0ZShjaGFyYWN0ZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1ZmZlcj8ud3JpdGUoc3RyaW5nW2ldKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ1ZmZlciA9PSBudWxsID8gc3RyaW5nIDogYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBpZiAoc3RhdGUgPT0gV09SRCkgewogICAgICB3cml0ZVNwYWNlKCk7CiAgICB9CiAgICB3cml0ZSgnIicpOwogICAgZm9yICh2YXIgcGFydCBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgIGlmIChwYXJ0IGlzIFN0cmluZ0xpdGVyYWwpIHsKICAgICAgICB3cml0ZVN5bWJvbChlc2NhcGVTdHJpbmcocGFydC52YWx1ZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlU3ltYm9sKHInJHsnKTsKICAgICAgICB3cml0ZUV4cHJlc3Npb24ocGFydCk7CiAgICAgICAgd3JpdGVTeW1ib2woJ30nKTsKICAgICAgfQogICAgfQogICAgd3JpdGUoJyInKTsKICAgIHN0YXRlID0gV09SRDsKICB9CgogIHZpc2l0TGlzdENvbmNhdGVuYXRpb24oTGlzdENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKEV4cHJlc3Npb24gcGFydCBpbiBub2RlLmxpc3RzKSB7CiAgICAgIGlmICghZmlyc3QpIHdyaXRlU3BhY2VkKCcrJyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihwYXJ0KTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICB9CgogIHZpc2l0U2V0Q29uY2F0ZW5hdGlvbihTZXRDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChFeHByZXNzaW9uIHBhcnQgaW4gbm9kZS5zZXRzKSB7CiAgICAgIGlmICghZmlyc3QpIHdyaXRlU3BhY2VkKCcrJyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihwYXJ0KTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICB9CgogIHZpc2l0TWFwQ29uY2F0ZW5hdGlvbihNYXBDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChFeHByZXNzaW9uIHBhcnQgaW4gbm9kZS5tYXBzKSB7CiAgICAgIGlmICghZmlyc3QpIHdyaXRlU3BhY2VkKCcrJyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihwYXJ0KTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICB9CgogIHZpc2l0SW5zdGFuY2VDcmVhdGlvbihJbnN0YW5jZUNyZWF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQ2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUuY2xhc3NSZWZlcmVuY2UpOwogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlTGlzdChub2RlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgneycpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBub2RlLmZpZWxkVmFsdWVzLmZvckVhY2goKFJlZmVyZW5jZSBmaWVsZFJlZiwgRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgd3JpdGVDb21tYSgpOwogICAgICB9CiAgICAgIHdyaXRlV29yZCgnJHtmaWVsZFJlZi5hc0ZpZWxkLm5hbWUubmFtZX0nKTsKICAgICAgd3JpdGVTeW1ib2woJzonKTsKICAgICAgd3JpdGVFeHByZXNzaW9uKHZhbHVlKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0pOwogICAgZm9yIChBc3NlcnRTdGF0ZW1lbnQgYXNzZXJ0XyBpbiBub2RlLmFzc2VydHMpIHsKICAgICAgaWYgKCFmaXJzdCkgewogICAgICAgIHdyaXRlQ29tbWEoKTsKICAgICAgfQogICAgICB3cml0ZSgnYXNzZXJ0KCcpOwogICAgICB3cml0ZUV4cHJlc3Npb24oYXNzZXJ0Xy5jb25kaXRpb24pOwogICAgICBpZiAoYXNzZXJ0Xy5tZXNzYWdlICE9IG51bGwpIHsKICAgICAgICB3cml0ZUNvbW1hKCk7CiAgICAgICAgd3JpdGVFeHByZXNzaW9uKGFzc2VydF8ubWVzc2FnZSk7CiAgICAgIH0KICAgICAgd3JpdGUoJyknKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICAgIGZvciAoRXhwcmVzc2lvbiB1bnVzZWRBcmd1bWVudCBpbiBub2RlLnVudXNlZEFyZ3VtZW50cykgewogICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgd3JpdGVDb21tYSgpOwogICAgICB9CiAgICAgIHdyaXRlRXhwcmVzc2lvbih1bnVzZWRBcmd1bWVudCk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnfScpOwogIH0KCiAgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLm9wZXJhbmQsIFByZWNlZGVuY2UuQklUV0lTRV9PUik7CiAgICB3cml0ZVNwYWNlZCgnaXMnKTsKICAgIHdyaXRlVHlwZShub2RlLnR5cGUpOwogIH0KCiAgdmlzaXRBc0V4cHJlc3Npb24oQXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLm9wZXJhbmQsIFByZWNlZGVuY2UuQklUV0lTRV9PUik7CiAgICB3cml0ZVNwYWNlZChub2RlLmlzVHlwZUVycm9yID8gJ2Fze1R5cGVFcnJvcn0nIDogJ2FzJyk7CiAgICB3cml0ZVR5cGUobm9kZS50eXBlKTsKICB9CgogIHZpc2l0U3ltYm9sTGl0ZXJhbChTeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlU3ltYm9sKCcjJyk7CiAgICB3cml0ZVdvcmQobm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdFR5cGVMaXRlcmFsKFR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlVHlwZShub2RlLnR5cGUpOwogIH0KCiAgdmlzaXRUaGlzRXhwcmVzc2lvbihUaGlzRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ3RoaXMnKTsKICB9CgogIHZpc2l0UmV0aHJvdyhSZXRocm93IG5vZGUpIHsKICAgIHdyaXRlV29yZCgncmV0aHJvdycpOwogIH0KCiAgdmlzaXRUaHJvdyhUaHJvdyBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ3Rocm93Jyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICB9CgogIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICB3cml0ZVdvcmQoJ2NvbnN0Jyk7CiAgICAgIHdyaXRlU3BhY2UoKTsKICAgIH0KICAgIGlmIChub2RlLnR5cGVBcmd1bWVudCAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlVHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnWycpOwogICAgd3JpdGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMsIHdyaXRlTm9kZSk7CiAgICB3cml0ZVN5bWJvbCgnXScpOwogIH0KCiAgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICB3cml0ZVdvcmQoJ2NvbnN0Jyk7CiAgICAgIHdyaXRlU3BhY2UoKTsKICAgIH0KICAgIGlmIChub2RlLnR5cGVBcmd1bWVudCAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlVHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgneycpOwogICAgd3JpdGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMsIHdyaXRlTm9kZSk7CiAgICB3cml0ZVN5bWJvbCgnfScpOwogIH0KCiAgdmlzaXRNYXBMaXRlcmFsKE1hcExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICB3cml0ZVdvcmQoJ2NvbnN0Jyk7CiAgICAgIHdyaXRlU3BhY2UoKTsKICAgIH0KICAgIGlmIChub2RlLmtleVR5cGUgIT0gbnVsbCkgewogICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICB3cml0ZUxpc3QoW25vZGUua2V5VHlwZSwgbm9kZS52YWx1ZVR5cGVdLCB3cml0ZVR5cGUpOwogICAgICB3cml0ZVN5bWJvbCgnPicpOwogICAgfQogICAgd3JpdGVTeW1ib2woJ3snKTsKICAgIHdyaXRlTGlzdChub2RlLmVudHJpZXMsIHdyaXRlTm9kZSk7CiAgICB3cml0ZVN5bWJvbCgnfScpOwogIH0KCiAgdmlzaXRNYXBFbnRyeShNYXBFbnRyeSBub2RlKSB7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5rZXkpOwogICAgd3JpdGVDb21tYSgnOicpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRBd2FpdEV4cHJlc3Npb24oQXdhaXRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnYXdhaXQnKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLm9wZXJhbmQpOwogIH0KCiAgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlRnVuY3Rpb24obm9kZS5mdW5jdGlvbiwgdGVybWluYXRlTGluZTogZmFsc2UpOwogIH0KCiAgdmlzaXRTdHJpbmdMaXRlcmFsKFN0cmluZ0xpdGVyYWwgbm9kZSkgewogICAgd3JpdGVXb3JkKCciJHtlc2NhcGVTdHJpbmcobm9kZS52YWx1ZSl9IicpOwogIH0KCiAgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVXb3JkKCcke25vZGUudmFsdWV9Jyk7CiAgfQoKICB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZVdvcmQoJyR7bm9kZS52YWx1ZX0nKTsKICB9CgogIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVXb3JkKCcke25vZGUudmFsdWV9Jyk7CiAgfQoKICB2aXNpdE51bGxMaXRlcmFsKE51bGxMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnbnVsbCcpOwogIH0KCiAgdmlzaXRMZXQoTGV0IG5vZGUpIHsKICAgIHdyaXRlV29yZCgnbGV0Jyk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS52YXJpYWJsZSk7CiAgICB3cml0ZVNwYWNlZCgnaW4nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmJvZHkpOwogIH0KCiAgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlU3BhY2VkKCdibG9jaycpOwogICAgd3JpdGVCbG9ja0JvZHkobm9kZS5ib2R5LnN0YXRlbWVudHMsIGFzRXhwcmVzc2lvbjogdHJ1ZSk7CiAgICB3cml0ZVN5bWJvbCgnID0+Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzLCB3cml0ZVR5cGUpOwogICAgd3JpdGVTeW1ib2woJz4nKTsKICB9CgogIHZpc2l0TG9hZExpYnJhcnkoTG9hZExpYnJhcnkgbm9kZSkgewogICAgd3JpdGVXb3JkKCdMb2FkTGlicmFyeScpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlV29yZChub2RlLmltcG9ydC5uYW1lKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICBzdGF0ZSA9IFdPUkQ7CiAgfQoKICB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKENoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnQ2hlY2tMaWJyYXJ5SXNMb2FkZWQnKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZVdvcmQobm9kZS5pbXBvcnQubmFtZSk7CiAgICB3cml0ZVN5bWJvbCgnKScpOwogICAgc3RhdGUgPSBXT1JEOwogIH0KCiAgdmlzaXRMaWJyYXJ5UGFydChMaWJyYXJ5UGFydCBub2RlKSB7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKCdwYXJ0Jyk7CiAgICB3cml0ZVdvcmQobm9kZS5wYXJ0VXJpKTsKICAgIGVuZExpbmUoIjsiKTsKICB9CgogIHZpc2l0TGlicmFyeURlcGVuZGVuY3koTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKG5vZGUuaXNJbXBvcnQgPyAnaW1wb3J0JyA6ICdleHBvcnQnKTsKICAgIHZhciB1cmlTdHJpbmc7CiAgICBpZiAobm9kZS5pbXBvcnRlZExpYnJhcnlSZWZlcmVuY2U/Lm5vZGUgIT0gbnVsbCkgewogICAgICB1cmlTdHJpbmcgPSAnJHtub2RlLnRhcmdldExpYnJhcnkuaW1wb3J0VXJpfSc7CiAgICB9IGVsc2UgewogICAgICB1cmlTdHJpbmcgPSAnJHtub2RlLmltcG9ydGVkTGlicmFyeVJlZmVyZW5jZT8uY2Fub25pY2FsTmFtZT8ubmFtZX0nOwogICAgfQogICAgd3JpdGVXb3JkKCciJHVyaVN0cmluZyInKTsKICAgIGlmIChub2RlLmlzRGVmZXJyZWQpIHsKICAgICAgd3JpdGVXb3JkKCdkZWZlcnJlZCcpOwogICAgfQogICAgaWYgKG5vZGUubmFtZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlV29yZCgnYXMnKTsKICAgICAgd3JpdGVXb3JkKG5vZGUubmFtZSk7CiAgICB9CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnJHtub2RlLnJ1bnRpbWVUeXBlfScpOwogIH0KCiAgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlKSB7CiAgICB3cml0ZVZhcmlhYmxlUmVmZXJlbmNlKG5vZGUudmFyaWFibGUpOwogICAgaWYgKG5vZGUucHJvbW90ZWRUeXBlICE9IG51bGwpIHsKICAgICAgd3JpdGVTeW1ib2woJ3snKTsKICAgICAgd3JpdGVOb2RlKG5vZGUucHJvbW90ZWRUeXBlKTsKICAgICAgd3JpdGVTeW1ib2woJ30nKTsKICAgICAgc3RhdGUgPSBXT1JEOwogICAgfQogIH0KCiAgdmlzaXRWYXJpYWJsZVNldChWYXJpYWJsZVNldCBub2RlKSB7CiAgICB3cml0ZVZhcmlhYmxlUmVmZXJlbmNlKG5vZGUudmFyaWFibGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIHZvaWQgd3JpdGVJbnRlcmZhY2VUYXJnZXQoTmFtZSBuYW1lLCBSZWZlcmVuY2UgdGFyZ2V0KSB7CiAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKICAgICAgd3JpdGVTeW1ib2woJ3snKTsKICAgICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKHRhcmdldCk7CiAgICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZU5hbWUobmFtZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlU3RhdGljVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCd7Jyk7CiAgICAgIHdyaXRlVHlwZSh0eXBlKTsKICAgICAgd3JpdGVTeW1ib2woJ30nKTsKICAgIH0KICB9CgogIHZpc2l0UHJvcGVydHlHZXQoUHJvcGVydHlHZXQgbm9kZSkgewogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIFByZWNlZGVuY2UuUFJJTUFSWSk7CiAgICB3cml0ZVN5bWJvbCgnLicpOwogICAgd3JpdGVJbnRlcmZhY2VUYXJnZXQobm9kZS5uYW1lLCBub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICB2aXNpdFByb3BlcnR5U2V0KFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBQcmVjZWRlbmNlLlBSSU1BUlkpOwogICAgd3JpdGVTeW1ib2woJy4nKTsKICAgIHdyaXRlSW50ZXJmYWNlVGFyZ2V0KG5vZGUubmFtZSwgbm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHdyaXRlV29yZCgnc3VwZXInKTsKICAgIHdyaXRlU3ltYm9sKCcuJyk7CiAgICB3cml0ZUludGVyZmFjZVRhcmdldChub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChTdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHdyaXRlV29yZCgnc3VwZXInKTsKICAgIHdyaXRlU3ltYm9sKCcuJyk7CiAgICB3cml0ZUludGVyZmFjZVRhcmdldChub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdERpcmVjdFByb3BlcnR5R2V0KERpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBQcmVjZWRlbmNlLlBSSU1BUlkpOwogICAgd3JpdGVTeW1ib2woJy57PScpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgfQoKICB2aXNpdERpcmVjdFByb3BlcnR5U2V0KERpcmVjdFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBQcmVjZWRlbmNlLlBSSU1BUlkpOwogICAgd3JpdGVTeW1ib2woJy57PScpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpIHsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICB2aXNpdFN0YXRpY1NldChTdGF0aWNTZXQgbm9kZSkgewogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZvaWQgd3JpdGVCbG9ja0JvZHkoTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHMsIHtib29sIGFzRXhwcmVzc2lvbiA9IGZhbHNlfSkgewogICAgaWYgKHN0YXRlbWVudHMuaXNFbXB0eSkgewogICAgICBhc0V4cHJlc3Npb24gPyB3cml0ZVN5bWJvbCgne30nKSA6IGVuZExpbmUoJ3t9Jyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVuZExpbmUoJ3snKTsKICAgICsraW5kZW50YXRpb247CiAgICBzdGF0ZW1lbnRzLmZvckVhY2god3JpdGVOb2RlKTsKICAgIC0taW5kZW50YXRpb247CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBhc0V4cHJlc3Npb24gPyB3cml0ZVN5bWJvbCgnfScpIDogZW5kTGluZSgnfScpOwogIH0KCiAgdmlzaXRCbG9jayhCbG9jayBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUJsb2NrQm9keShub2RlLnN0YXRlbWVudHMpOwogIH0KCiAgdmlzaXRBc3NlcnRCbG9jayhBc3NlcnRCbG9jayBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVNwYWNlZCgnYXNzZXJ0Jyk7CiAgICB3cml0ZUJsb2NrQm9keShub2RlLnN0YXRlbWVudHMpOwogIH0KCiAgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSwge2Jvb2wgYXNFeHByZXNzaW9uID0gZmFsc2V9KSB7CiAgICBpZiAoIWFzRXhwcmVzc2lvbikgewogICAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB9CiAgICB3cml0ZVdvcmQoJ2Fzc2VydCcpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbik7CiAgICBpZiAobm9kZS5tZXNzYWdlICE9IG51bGwpIHsKICAgICAgd3JpdGVDb21tYSgpOwogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5tZXNzYWdlKTsKICAgIH0KICAgIGlmICghYXNFeHByZXNzaW9uKSB7CiAgICAgIGVuZExpbmUoJyk7Jyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZVN5bWJvbCgnKScpOwogICAgfQogIH0KCiAgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKHN5bnRoZXRpY05hbWVzLm5hbWVMYWJlbGVkU3RhdGVtZW50KG5vZGUpKTsKICAgIGVuZExpbmUoJzonKTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogIH0KCiAgdmlzaXRCcmVha1N0YXRlbWVudChCcmVha1N0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2JyZWFrJyk7CiAgICB3cml0ZVdvcmQoc3ludGhldGljTmFtZXMubmFtZUxhYmVsZWRTdGF0ZW1lbnQobm9kZS50YXJnZXQpKTsKICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZpc2l0V2hpbGVTdGF0ZW1lbnQoV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVTcGFjZWQoJ3doaWxlJyk7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICB9CgogIHZpc2l0RG9TdGF0ZW1lbnQoRG9TdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKCdkbycpOwogICAgd3JpdGVCb2R5KG5vZGUuYm9keSk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVNwYWNlZCgnd2hpbGUnKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5jb25kaXRpb24pOwogICAgZW5kTGluZSgnKScpOwogIH0KCiAgdmlzaXRGb3JTdGF0ZW1lbnQoRm9yU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlU3BhY2VkKCdmb3InKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZUxpc3Qobm9kZS52YXJpYWJsZXMsIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICB3cml0ZUNvbW1hKCc7Jyk7CiAgICBpZiAobm9kZS5jb25kaXRpb24gIT0gbnVsbCkgewogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5jb25kaXRpb24pOwogICAgfQogICAgd3JpdGVDb21tYSgnOycpOwogICAgd3JpdGVMaXN0KG5vZGUudXBkYXRlcywgd3JpdGVFeHByZXNzaW9uKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICB9CgogIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgaWYgKG5vZGUuaXNBc3luYykgewogICAgICB3cml0ZVNwYWNlZCgnYXdhaXQnKTsKICAgIH0KICAgIHdyaXRlU3BhY2VkKCdmb3InKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS52YXJpYWJsZSwgdXNlVmFyS2V5d29yZDogdHJ1ZSk7CiAgICB3cml0ZVNwYWNlZCgnaW4nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLml0ZXJhYmxlKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICB9CgogIHZpc2l0U3dpdGNoU3RhdGVtZW50KFN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3N3aXRjaCcpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgZW5kTGluZSgnKSB7Jyk7CiAgICArK2luZGVudGF0aW9uOwogICAgbm9kZS5jYXNlcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICAtLWluZGVudGF0aW9uOwogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgZW5kTGluZSgnfScpOwogIH0KCiAgdmlzaXRTd2l0Y2hDYXNlKFN3aXRjaENhc2Ugbm9kZSkgewogICAgU3RyaW5nIGxhYmVsID0gc3ludGhldGljTmFtZXMubmFtZVN3aXRjaENhc2Uobm9kZSk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQobGFiZWwpOwogICAgZW5kTGluZSgnOicpOwogICAgZm9yICh2YXIgZXhwcmVzc2lvbiBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgICAgd3JpdGVXb3JkKCdjYXNlJyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihleHByZXNzaW9uKTsKICAgICAgZW5kTGluZSgnOicpOwogICAgfQogICAgaWYgKG5vZGUuaXNEZWZhdWx0KSB7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgICAgd3JpdGVXb3JkKCdkZWZhdWx0Jyk7CiAgICAgIGVuZExpbmUoJzonKTsKICAgIH0KICAgICsraW5kZW50YXRpb247CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIC0taW5kZW50YXRpb247CiAgfQoKICB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgnY29udGludWUnKTsKICAgIHdyaXRlV29yZChzeW50aGV0aWNOYW1lcy5uYW1lU3dpdGNoQ2FzZShub2RlLnRhcmdldCkpOwogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdmlzaXRJZlN0YXRlbWVudChJZlN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2lmJyk7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB3cml0ZUJvZHkobm9kZS50aGVuKTsKICAgIGlmIChub2RlLm90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgICAgd3JpdGVXb3JkKCdlbHNlJyk7CiAgICAgIHdyaXRlQm9keShub2RlLm90aGVyd2lzZSk7CiAgICB9CiAgfQoKICB2aXNpdFJldHVyblN0YXRlbWVudChSZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKCdyZXR1cm4nKTsKICAgIGlmIChub2RlLmV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlKCk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgfQogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdmlzaXRUcnlDYXRjaChUcnlDYXRjaCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3RyeScpOwogICAgd3JpdGVCb2R5KG5vZGUuYm9keSk7CiAgICBub2RlLmNhdGNoZXMuZm9yRWFjaCh3cml0ZU5vZGUpOwogIH0KCiAgdmlzaXRDYXRjaChDYXRjaCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBpZiAobm9kZS5ndWFyZCAhPSBudWxsKSB7CiAgICAgIHdyaXRlV29yZCgnb24nKTsKICAgICAgd3JpdGVUeXBlKG5vZGUuZ3VhcmQpOwogICAgICB3cml0ZVNwYWNlKCk7CiAgICB9CiAgICB3cml0ZVdvcmQoJ2NhdGNoJyk7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgaWYgKG5vZGUuZXhjZXB0aW9uICE9IG51bGwpIHsKICAgICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUuZXhjZXB0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlV29yZCgnbm8tZXhjZXB0aW9uLXZhcicpOwogICAgfQogICAgaWYgKG5vZGUuc3RhY2tUcmFjZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlQ29tbWEoKTsKICAgICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUuc3RhY2tUcmFjZSk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnKScpOwogICAgd3JpdGVCb2R5KG5vZGUuYm9keSk7CiAgfQoKICB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3RyeScpOwogICAgd3JpdGVCb2R5KG5vZGUuYm9keSk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2ZpbmFsbHknKTsKICAgIHdyaXRlQm9keShub2RlLmZpbmFsaXplcik7CiAgfQoKICB2aXNpdFlpZWxkU3RhdGVtZW50KFlpZWxkU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIGlmIChub2RlLmlzWWllbGRTdGFyKSB7CiAgICAgIHdyaXRlV29yZCgneWllbGQqJyk7CiAgICB9IGVsc2UgaWYgKG5vZGUuaXNOYXRpdmUpIHsKICAgICAgd3JpdGVXb3JkKCdbeWllbGRdJyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZVdvcmQoJ3lpZWxkJyk7CiAgICB9CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLCB1c2VWYXJLZXl3b3JkOiB0cnVlKTsKICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS52YXJpYWJsZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2Z1bmN0aW9uJyk7CiAgICBpZiAobm9kZS5mdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIHdyaXRlRnVuY3Rpb24obm9kZS5mdW5jdGlvbiwgbmFtZTogZ2V0VmFyaWFibGVOYW1lKG5vZGUudmFyaWFibGUpKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlV29yZChnZXRWYXJpYWJsZU5hbWUobm9kZS52YXJpYWJsZSkpOwogICAgICBlbmRMaW5lKCcuLi47Jyk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsCiAgICAgIHtib29sIHVzZVZhcktleXdvcmQ6IGZhbHNlfSkgewogICAgaWYgKHNob3dPZmZzZXRzKSB3cml0ZVdvcmQoIlske25vZGUuZmlsZU9mZnNldH1dIik7CiAgICBpZiAoc2hvd01ldGFkYXRhKSB3cml0ZU1ldGFkYXRhKG5vZGUpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zLCBzZXBhcmF0ZUxpbmVzOiBmYWxzZSk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNMYXRlLCAnbGF0ZScpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzUmVxdWlyZWQsICdyZXF1aXJlZCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQ292YXJpYW50LCAnY292YXJpYW50Jyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNHZW5lcmljQ292YXJpYW50SW1wbCwgJ2dlbmVyaWMtY292YXJpYW50LWltcGwnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0ZpbmFsLCAnZmluYWwnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0NvbnN0LCAnY29uc3QnKTsKICAgIGlmIChub2RlLnR5cGUgIT0gbnVsbCkgewogICAgICB3cml0ZUFubm90YXRlZFR5cGUobm9kZS50eXBlLCBhbm5vdGF0b3I/LmFubm90YXRlVmFyaWFibGUodGhpcywgbm9kZSkpOwogICAgfQogICAgaWYgKHVzZVZhcktleXdvcmQgJiYgIW5vZGUuaXNGaW5hbCAmJiAhbm9kZS5pc0NvbnN0ICYmIG5vZGUudHlwZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlV29yZCgndmFyJyk7CiAgICB9CiAgICB3cml0ZVdvcmQoZ2V0VmFyaWFibGVOYW1lKG5vZGUpKTsKICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgfQogIH0KCiAgdmlzaXRBcmd1bWVudHMoQXJndW1lbnRzIG5vZGUpIHsKICAgIGlmIChub2RlLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgd3JpdGVTeW1ib2woJzwnKTsKICAgICAgd3JpdGVMaXN0KG5vZGUudHlwZXMsIHdyaXRlVHlwZSk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgdmFyIGFsbEFyZ3MgPQogICAgICAgIDxMaXN0PFRyZWVOb2RlPj5bbm9kZS5wb3NpdGlvbmFsLCBub2RlLm5hbWVkXS5leHBhbmQoKHgpID0+IHgpOwogICAgd3JpdGVMaXN0KGFsbEFyZ3MsIHdyaXRlTm9kZSk7CiAgICB3cml0ZVN5bWJvbCgnKScpOwogIH0KCiAgdmlzaXROYW1lZEV4cHJlc3Npb24oTmFtZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlV29yZChub2RlLm5hbWUpOwogICAgd3JpdGVDb21tYSgnOicpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgZGVmYXVsdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgZW5kTGluZSgnJHtub2RlLnJ1bnRpbWVUeXBlfScpOwogIH0KCiAgdmlzaXRJbnZhbGlkSW5pdGlhbGl6ZXIoSW52YWxpZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnaW52YWxpZC1pbml0aWFsaXplcicpOwogIH0KCiAgdmlzaXRGaWVsZEluaXRpYWxpemVyKEZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUuZmllbGRSZWZlcmVuY2UpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0U3VwZXJJbml0aWFsaXplcihTdXBlckluaXRpYWxpemVyIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnc3VwZXInKTsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyKFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVXb3JkKCd0aGlzJyk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIHZpc2l0TG9jYWxJbml0aWFsaXplcihMb2NhbEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLnZhcmlhYmxlKTsKICB9CgogIHZpc2l0QXNzZXJ0SW5pdGlhbGl6ZXIoQXNzZXJ0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXRBc3NlcnRTdGF0ZW1lbnQobm9kZS5zdGF0ZW1lbnQsIGFzRXhwcmVzc2lvbjogdHJ1ZSk7CiAgfQoKICBkZWZhdWx0SW5pdGlhbGl6ZXIoSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgZW5kTGluZSgnOiAke25vZGUucnVudGltZVR5cGV9Jyk7CiAgfQoKICB3cml0ZU51bGxhYmlsaXR5KE51bGxhYmlsaXR5IG51bGxhYmlsaXR5KSB7CiAgICBzd2l0Y2ggKG51bGxhYmlsaXR5KSB7CiAgICAgIGNhc2UgTnVsbGFiaWxpdHkubGVnYWN5OgogICAgICAgIHdyaXRlU3ltYm9sKCcqJyk7CiAgICAgICAgc3RhdGUgPSBXT1JEOyAvLyBEaXNhbGxvdyBhIHdvcmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICcqJy4KICAgICAgICBicmVhazsKICAgICAgY2FzZSBOdWxsYWJpbGl0eS5udWxsYWJsZToKICAgICAgICB3cml0ZVN5bWJvbCgnPycpOyAvLyBEaXNhbGxvdyBhIHdvcmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICc/Jy4KICAgICAgICBicmVhazsKICAgICAgY2FzZSBOdWxsYWJpbGl0eS5uZWl0aGVyOgogICAgICBjYXNlIE51bGxhYmlsaXR5Lm5vbk51bGxhYmxlOgogICAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICB2aXNpdEludmFsaWRUeXBlKEludmFsaWRUeXBlIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnaW52YWxpZC10eXBlJyk7CiAgfQoKICB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnZHluYW1pYycpOwogIH0KCiAgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ3ZvaWQnKTsKICB9CgogIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIHdyaXRlQ2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUuY2xhc3NOYW1lKTsKICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICB3cml0ZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzLCB3cml0ZVR5cGUpOwogICAgICB3cml0ZVN5bWJvbCgnPicpOwogICAgICBzdGF0ZSA9IFdPUkQ7IC8vIERpc2FsbG93IGEgd29yZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJz4nLgogICAgfQogICAgd3JpdGVOdWxsYWJpbGl0eShub2RlLm51bGxhYmlsaXR5KTsKICB9CgogIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICB3cml0ZUZ1bmN0aW9uVHlwZShub2RlKTsKICB9CgogIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSB7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNSZXF1aXJlZCwgJ3JlcXVpcmVkJyk7CiAgICB3cml0ZVdvcmQobm9kZS5uYW1lKTsKICAgIHdyaXRlU3ltYm9sKCc6Jyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZVR5cGUobm9kZS50eXBlKTsKICB9CgogIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgd3JpdGVUeXBlUGFyYW1ldGVyUmVmZXJlbmNlKG5vZGUucGFyYW1ldGVyKTsKICAgIHdyaXRlTnVsbGFiaWxpdHkobm9kZS5udWxsYWJpbGl0eSk7CiAgICBpZiAobm9kZS5wcm9tb3RlZEJvdW5kICE9IG51bGwpIHsKICAgICAgd3JpdGVTcGFjZSgpOwogICAgICB3cml0ZVdvcmQoJ2V4dGVuZHMnKTsKICAgICAgd3JpdGVTcGFjZSgpOwogICAgICB3cml0ZVR5cGUobm9kZS5wcm9tb3RlZEJvdW5kKTsKICAgIH0KICB9CgogIHZpc2l0VHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsLCAnZ2VuZXJpYy1jb3ZhcmlhbnQtaW1wbCcpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zLCBzZXBhcmF0ZUxpbmVzOiBmYWxzZSk7CiAgICB3cml0ZVdvcmQoZ2V0VHlwZVBhcmFtZXRlck5hbWUobm9kZSkpOwogICAgd3JpdGVTcGFjZWQoJ2V4dGVuZHMnKTsKICAgIHdyaXRlVHlwZShub2RlLmJvdW5kKTsKICAgIGlmIChub2RlLmRlZmF1bHRUeXBlICE9IG51bGwpIHsKICAgICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgICAgd3JpdGVUeXBlKG5vZGUuZGVmYXVsdFR5cGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKENvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlV29yZChzeW50aGV0aWNOYW1lcy5uYW1lQ29uc3RhbnQobm9kZSkpOwogIH0KCiAgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZS5jb25zdGFudCk7CiAgfQoKICBkZWZhdWx0Q29uc3RhbnQoQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICBlbmRMaW5lKCckbm9kZScpOwogIH0KCiAgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVTeW1ib2woJzwnKTsKICAgIHdyaXRlVHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICB3cml0ZVN5bWJvbCgnPlsnKTsKICAgIHdyaXRlTGlzdChub2RlLmVudHJpZXMsIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UpOwogICAgZW5kTGluZSgnXScpOwogIH0KCiAgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICB3cml0ZVR5cGUobm9kZS50eXBlQXJndW1lbnQpOwogICAgd3JpdGVTeW1ib2woJz57Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS5lbnRyaWVzLCB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKTsKICAgIGVuZExpbmUoJ30nKTsKICB9CgogIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgd3JpdGVMaXN0KFtub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlXSwgd3JpdGVUeXBlKTsKICAgIHdyaXRlU3ltYm9sKCc+eycpOwogICAgd3JpdGVMaXN0KG5vZGUuZW50cmllcywgKGVudHJ5KSB7CiAgICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UoZW50cnkua2V5KTsKICAgICAgd3JpdGVTeW1ib2woJzonKTsKICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShlbnRyeS52YWx1ZSk7CiAgICB9KTsKICAgIGVuZExpbmUoJyknKTsKICB9CgogIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS5jbGFzc1JlZmVyZW5jZSk7CiAgICBpZiAoIW5vZGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgd3JpdGVTeW1ib2woJzwnKTsKICAgICAgd3JpdGVMaXN0KG5vZGUudHlwZUFyZ3VtZW50cywgd3JpdGVUeXBlKTsKICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIH0KICAgIHdyaXRlU3ltYm9sKCcgeycpOwogICAgd3JpdGVMaXN0KG5vZGUuZmllbGRWYWx1ZXMuZW50cmllcywgKGVudHJ5KSB7CiAgICAgIHdyaXRlV29yZCgnJHtlbnRyeS5rZXkuYXNGaWVsZC5uYW1lLm5hbWV9Jyk7CiAgICAgIHdyaXRlU3ltYm9sKCc6Jyk7CiAgICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UoZW50cnkudmFsdWUpOwogICAgfSk7CiAgICBlbmRMaW5lKCd9Jyk7CiAgfQoKICB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlV29yZCgncGFydGlhbC1pbnN0YW50aWF0aW9uJyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50ZWFyT2ZmQ29uc3RhbnQucHJvY2VkdXJlUmVmZXJlbmNlKTsKICAgIHdyaXRlU3BhY2UoKTsKICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS50eXBlcywgd3JpdGVUeXBlKTsKICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICBlbmRMaW5lKCk7CiAgfQoKICB2aXNpdFN0cmluZ0NvbnN0YW50KFN0cmluZ0NvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgZW5kTGluZSgnIiR7ZXNjYXBlU3RyaW5nKG5vZGUudmFsdWUpfSInKTsKICB9CgogIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlV29yZCgndGVhcm9mZicpOwogICAgd3JpdGVTcGFjZSgpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUucHJvY2VkdXJlUmVmZXJlbmNlKTsKICAgIGVuZExpbmUoKTsKICB9CgogIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChVbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVTeW1ib2woJ2V2YWwnKTsKICAgIHdyaXRlU3BhY2UoKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgZW5kTGluZSgpOwogIH0KCiAgZGVmYXVsdE5vZGUoTm9kZSBub2RlKSB7CiAgICB3cml0ZSgnPCR7bm9kZS5ydW50aW1lVHlwZX0+Jyk7CiAgfQp9CgpjbGFzcyBQcmVjZWRlbmNlIGV4dGVuZHMgRXhwcmVzc2lvblZpc2l0b3I8aW50PiB7CiAgc3RhdGljIGZpbmFsIFByZWNlZGVuY2UgaW5zdGFuY2UgPSBuZXcgUHJlY2VkZW5jZSgpOwoKICBzdGF0aWMgaW50IG9mKEV4cHJlc3Npb24gbm9kZSkgPT4gbm9kZS5hY2NlcHQoaW5zdGFuY2UpOwoKICBzdGF0aWMgY29uc3QgaW50IEVYUFJFU1NJT04gPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgQ09ORElUSU9OQUwgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgTE9HSUNBTF9OVUxMX0FXQVJFID0gMzsKICBzdGF0aWMgY29uc3QgaW50IExPR0lDQUxfT1IgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgTE9HSUNBTF9BTkQgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgRVFVQUxJVFkgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgUkVMQVRJT05BTCA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBCSVRXSVNFX09SID0gODsKICBzdGF0aWMgY29uc3QgaW50IEJJVFdJU0VfWE9SID0gOTsKICBzdGF0aWMgY29uc3QgaW50IEJJVFdJU0VfQU5EID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBTSElGVCA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgQURESVRJVkUgPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IE1VTFRJUExJQ0FUSVZFID0gMTM7CiAgc3RhdGljIGNvbnN0IGludCBQUkVGSVggPSAxNDsKICBzdGF0aWMgY29uc3QgaW50IFBPU1RGSVggPSAxNTsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfTElURVJBTCA9IDE5OwogIHN0YXRpYyBjb25zdCBpbnQgUFJJTUFSWSA9IDIwOwogIHN0YXRpYyBjb25zdCBpbnQgQ0FMTEVFID0gMjE7CgogIHN0YXRpYyBjb25zdCBNYXA8U3RyaW5nLCBpbnQ+IGJpbmFyeVByZWNlZGVuY2UgPSBjb25zdCB7CiAgICAnJiYnOiBMT0dJQ0FMX0FORCwKICAgICd8fCc6IExPR0lDQUxfT1IsCiAgICAnPz8nOiBMT0dJQ0FMX05VTExfQVdBUkUsCiAgICAnPT0nOiBFUVVBTElUWSwKICAgICchPSc6IEVRVUFMSVRZLAogICAgJz4nOiBSRUxBVElPTkFMLAogICAgJz49JzogUkVMQVRJT05BTCwKICAgICc8JzogUkVMQVRJT05BTCwKICAgICc8PSc6IFJFTEFUSU9OQUwsCiAgICAnfCc6IEJJVFdJU0VfT1IsCiAgICAnXic6IEJJVFdJU0VfWE9SLAogICAgJyYnOiBCSVRXSVNFX0FORCwKICAgICc+Pic6IFNISUZULAogICAgJzw8JzogU0hJRlQsCiAgICAnKyc6IEFERElUSVZFLAogICAgJy0nOiBBRERJVElWRSwKICAgICcqJzogTVVMVElQTElDQVRJVkUsCiAgICAnJSc6IE1VTFRJUExJQ0FUSVZFLAogICAgJy8nOiBNVUxUSVBMSUNBVElWRSwKICAgICd+Lyc6IE1VTFRJUExJQ0FUSVZFLAogICAgbnVsbDogRVhQUkVTU0lPTiwKICB9OwoKICBzdGF0aWMgYm9vbCBpc0Fzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IoaW50IHByZWNlZGVuY2UpIHsKICAgIHJldHVybiBwcmVjZWRlbmNlICE9IEVRVUFMSVRZICYmIHByZWNlZGVuY2UgIT0gUkVMQVRJT05BTDsKICB9CgogIGludCBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpID0+IEVYUFJFU1NJT047CiAgaW50IHZpc2l0SW52YWxpZEV4cHJlc3Npb24oSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKFN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihEaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdE5vdChOb3Qgbm9kZSkgPT4gUFJFRklYOwogIGludCB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHByZXNzaW9uIG5vZGUpID0+CiAgICAgIGJpbmFyeVByZWNlZGVuY2Vbbm9kZS5vcGVyYXRvcl07CiAgaW50IHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKENvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSA9PiBDT05ESVRJT05BTDsKICBpbnQgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUpID0+IFJFTEFUSU9OQUw7CiAgaW50IHZpc2l0QXNFeHByZXNzaW9uKEFzRXhwcmVzc2lvbiBub2RlKSA9PiBSRUxBVElPTkFMOwogIGludCB2aXNpdFN5bWJvbExpdGVyYWwoU3ltYm9sTGl0ZXJhbCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdFR5cGVMaXRlcmFsKFR5cGVMaXRlcmFsIG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0VGhpc0V4cHJlc3Npb24oVGhpc0V4cHJlc3Npb24gbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdFRocm93KFRocm93IG5vZGUpID0+IEVYUFJFU1NJT047CiAgaW50IHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRNYXBMaXRlcmFsKE1hcExpdGVyYWwgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRBd2FpdEV4cHJlc3Npb24oQXdhaXRFeHByZXNzaW9uIG5vZGUpID0+IFBSRUZJWDsKICBpbnQgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpID0+IEVYUFJFU1NJT047CiAgaW50IHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdE51bGxMaXRlcmFsKE51bGxMaXRlcmFsIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdFZhcmlhYmxlU2V0KFZhcmlhYmxlU2V0IG5vZGUpID0+IEVYUFJFU1NJT047CiAgaW50IHZpc2l0UHJvcGVydHlHZXQoUHJvcGVydHlHZXQgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRQcm9wZXJ0eVNldChQcm9wZXJ0eVNldCBub2RlKSA9PiBFWFBSRVNTSU9OOwogIGludCB2aXNpdFN1cGVyUHJvcGVydHlHZXQoU3VwZXJQcm9wZXJ0eUdldCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdFN1cGVyUHJvcGVydHlTZXQoU3VwZXJQcm9wZXJ0eVNldCBub2RlKSA9PiBFWFBSRVNTSU9OOwogIGludCB2aXNpdERpcmVjdFByb3BlcnR5R2V0KERpcmVjdFByb3BlcnR5R2V0IG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgPT4gRVhQUkVTU0lPTjsKICBpbnQgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0U3RhdGljU2V0KFN0YXRpY1NldCBub2RlKSA9PiBFWFBSRVNTSU9OOwogIGludCB2aXNpdExldChMZXQgbm9kZSkgPT4gRVhQUkVTU0lPTjsKfQoKU3RyaW5nIHByb2NlZHVyZUtpbmRUb1N0cmluZyhQcm9jZWR1cmVLaW5kIGtpbmQpIHsKICBzd2l0Y2ggKGtpbmQpIHsKICAgIGNhc2UgUHJvY2VkdXJlS2luZC5NZXRob2Q6CiAgICAgIHJldHVybiAnbWV0aG9kJzsKICAgIGNhc2UgUHJvY2VkdXJlS2luZC5HZXR0ZXI6CiAgICAgIHJldHVybiAnZ2V0JzsKICAgIGNhc2UgUHJvY2VkdXJlS2luZC5TZXR0ZXI6CiAgICAgIHJldHVybiAnc2V0JzsKICAgIGNhc2UgUHJvY2VkdXJlS2luZC5PcGVyYXRvcjoKICAgICAgcmV0dXJuICdvcGVyYXRvcic7CiAgICBjYXNlIFByb2NlZHVyZUtpbmQuRmFjdG9yeToKICAgICAgcmV0dXJuICdmYWN0b3J5JzsKICB9CiAgdGhyb3cgJ2lsbGVnYWwgUHJvY2VkdXJlS2luZDogJGtp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bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5hc3QudmlzaXRvcjsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIEV4cHJlc3Npb25WaXNpdG9yPFI+IHsKICBjb25zdCBFeHByZXNzaW9uVmlzaXRvcigpOwoKICBSIGRlZmF1bHRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSkgPT4gbnVsbDsKICBSIGRlZmF1bHRCYXNpY0xpdGVyYWwoQmFzaWNMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwoKICBSIHZpc2l0SW52YWxpZEV4cHJlc3Npb24oSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRWYXJpYWJsZVNldChWYXJpYWJsZVNldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0UHJvcGVydHlHZXQoUHJvcGVydHlHZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFByb3BlcnR5U2V0KFByb3BlcnR5U2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChEaXJlY3RQcm9wZXJ0eUdldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN1cGVyUHJvcGVydHlHZXQoU3VwZXJQcm9wZXJ0eUdldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChTdXBlclByb3BlcnR5U2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdGF0aWNTZXQoU3RhdGljU2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRNZXRob2RJbnZvY2F0aW9uKE1ldGhvZEludm9jYXRpb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKFN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXROb3QoTm90IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihMb2dpY2FsRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKENvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uY2F0ZW5hdGlvbihMaXN0Q29uY2F0ZW5hdGlvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U2V0Q29uY2F0ZW5hdGlvbihTZXRDb25jYXRlbmF0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRNYXBDb25jYXRlbmF0aW9uKE1hcENvbmNhdGVuYXRpb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdEluc3RhbmNlQ3JlYXRpb24oSW5zdGFuY2VDcmVhdGlvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0SXNFeHByZXNzaW9uKElzRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0QXNFeHByZXNzaW9uKEFzRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3ltYm9sTGl0ZXJhbChTeW1ib2xMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRUeXBlTGl0ZXJhbChUeXBlTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0VGhpc0V4cHJlc3Npb24oVGhpc0V4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0VGhyb3coVGhyb3cgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdExpc3RMaXRlcmFsKExpc3RMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0QXdhaXRFeHByZXNzaW9uKEF3YWl0RXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKENvbnN0YW50RXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSk7CiAgUiB2aXNpdEludExpdGVyYWwoSW50TGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0QmFzaWNMaXRlcmFsKG5vZGUpOwogIFIgdmlzaXREb3VibGVMaXRlcmFsKERvdWJsZUxpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlKTsKICBSIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlKTsKICBSIHZpc2l0TnVsbExpdGVyYWwoTnVsbExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlKTsKICBSIHZpc2l0TGV0KExldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0QmxvY2tFeHByZXNzaW9uKEJsb2NrRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRMb2FkTGlicmFyeShMb2FkTGlicmFyeSBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQoQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSkgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7Cn0KCmFic3RyYWN0IGNsYXNzIFN0YXRlbWVudFZpc2l0b3I8Uj4gewogIGNvbnN0IFN0YXRlbWVudFZpc2l0b3IoKTsKCiAgUiBkZWZhdWx0U3RhdGVtZW50KFN0YXRlbWVudCBub2RlKSA9PiBudWxsOwoKICBSIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEJsb2NrKEJsb2NrIG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEFzc2VydEJsb2NrKEFzc2VydEJsb2NrIG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEJyZWFrU3RhdGVtZW50KEJyZWFrU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFdoaWxlU3RhdGVtZW50KFdoaWxlU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdERvU3RhdGVtZW50KERvU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0U3dpdGNoU3RhdGVtZW50KFN3aXRjaFN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRJZlN0YXRlbWVudChJZlN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoUmV0dXJuU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFRyeUNhdGNoKFRyeUNhdGNoIG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRZaWVsZFN0YXRlbWVudChZaWVsZFN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7Cn0KCmFic3RyYWN0IGNsYXNzIE1lbWJlclZpc2l0b3I8Uj4gewogIGNvbnN0IE1lbWJlclZpc2l0b3IoKTsKCiAgUiBkZWZhdWx0TWVtYmVyKE1lbWJlciBub2RlKSA9PiBudWxsOwoKICBSIHZpc2l0Q29uc3RydWN0b3IoQ29uc3RydWN0b3Igbm9kZSkgPT4gZGVmYXVsdE1lbWJlcihub2RlKTsKICBSIHZpc2l0UHJvY2VkdXJlKFByb2NlZHVyZSBub2RlKSA9PiBkZWZhdWx0TWVtYmVyKG5vZGUpOwogIFIgdmlzaXRGaWVsZChGaWVsZCBub2RlKSA9PiBkZWZhdWx0TWVtYmVyKG5vZGUpOwogIFIgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcihSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdE1lbWJlcihub2RlKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEluaXRpYWxpemVyVmlzaXRvcjxSPiB7CiAgY29uc3QgSW5pdGlhbGl6ZXJWaXNpdG9yKCk7CgogIFIgZGVmYXVsdEluaXRpYWxpemVyKEluaXRpYWxpemVyIG5vZGUpID0+IG51bGw7CgogIFIgdmlzaXRJbnZhbGlkSW5pdGlhbGl6ZXIoSW52YWxpZEluaXRpYWxpemVyIG5vZGUpID0+CiAgICAgIGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0RmllbGRJbml0aWFsaXplcihGaWVsZEluaXRpYWxpemVyIG5vZGUpID0+IGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0U3VwZXJJbml0aWFsaXplcihTdXBlckluaXRpYWxpemVyIG5vZGUpID0+IGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0UmVkaXJlY3RpbmdJbml0aWFsaXplcihSZWRpcmVjdGluZ0luaXRpYWxpemVyIG5vZGUpID0+CiAgICAgIGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0TG9jYWxJbml0aWFsaXplcihMb2NhbEluaXRpYWxpemVyIG5vZGUpID0+IGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0QXNzZXJ0SW5pdGlhbGl6ZXIoQXNzZXJ0SW5pdGlhbGl6ZXIgbm9kZSkgPT4gZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwp9CgpjbGFzcyBUcmVlVmlzaXRvcjxSPgogICAgaW1wbGVtZW50cwogICAgICAgIEV4cHJlc3Npb25WaXNpdG9yPFI+LAogICAgICAgIFN0YXRlbWVudFZpc2l0b3I8Uj4sCiAgICAgICAgTWVtYmVyVmlzaXRvcjxSPiwKICAgICAgICBJbml0aWFsaXplclZpc2l0b3I8Uj4gewogIGNvbnN0IFRyZWVWaXNpdG9yKCk7CgogIFIgZGVmYXVsdFRyZWVOb2RlKFRyZWVOb2RlIG5vZGUpID0+IG51bGw7CgogIC8vIEV4cHJlc3Npb25zCiAgUiBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIGRlZmF1bHRCYXNpY0xpdGVyYWwoQmFzaWNMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0VmFyaWFibGVHZXQoVmFyaWFibGVHZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFZhcmlhYmxlU2V0KFZhcmlhYmxlU2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0UHJvcGVydHlTZXQoUHJvcGVydHlTZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdERpcmVjdFByb3BlcnR5R2V0KERpcmVjdFByb3BlcnR5R2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChEaXJlY3RQcm9wZXJ0eVNldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdXBlclByb3BlcnR5U2V0KFN1cGVyUHJvcGVydHlTZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN0YXRpY0dldChTdGF0aWNHZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN0YXRpY1NldChTdGF0aWNTZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihEaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdE5vdChOb3Qgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdExpc3RDb25jYXRlbmF0aW9uKExpc3RDb25jYXRlbmF0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTZXRDb25jYXRlbmF0aW9uKFNldENvbmNhdGVuYXRpb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdE1hcENvbmNhdGVuYXRpb24oTWFwQ29uY2F0ZW5hdGlvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0SW5zdGFuY2VDcmVhdGlvbihJbnN0YW5jZUNyZWF0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRBc0V4cHJlc3Npb24oQXNFeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFR5cGVMaXRlcmFsKFR5cGVMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRUaGlzRXhwcmVzc2lvbihUaGlzRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0UmV0aHJvdyhSZXRocm93IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRUaHJvdyhUaHJvdyBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFNldExpdGVyYWwoU2V0TGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRBd2FpdEV4cHJlc3Npb24oQXdhaXRFeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdHJpbmdMaXRlcmFsKFN0cmluZ0xpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlKTsKICBSIHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSk7CiAgUiB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0QmFzaWNMaXRlcmFsKG5vZGUpOwogIFIgdmlzaXRCb29sTGl0ZXJhbChCb29sTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0QmFzaWNMaXRlcmFsKG5vZGUpOwogIFIgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0QmFzaWNMaXRlcmFsKG5vZGUpOwogIFIgdmlzaXRMZXQoTGV0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdExvYWRMaWJyYXJ5KExvYWRMaWJyYXJ5IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChDaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKCiAgLy8gU3RhdGVtZW50cwogIFIgZGVmYXVsdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0QmxvY2soQmxvY2sgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0QXNzZXJ0QmxvY2soQXNzZXJ0QmxvY2sgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0QXNzZXJ0U3RhdGVtZW50KEFzc2VydFN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0QnJlYWtTdGF0ZW1lbnQoQnJlYWtTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0V2hpbGVTdGF0ZW1lbnQoV2hpbGVTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0RG9TdGF0ZW1lbnQoRG9TdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0Rm9yU3RhdGVtZW50KEZvclN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRGb3JJblN0YXRlbWVudChGb3JJblN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoU3dpdGNoU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdElmU3RhdGVtZW50KElmU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFJldHVyblN0YXRlbWVudChSZXR1cm5TdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0VHJ5Q2F0Y2goVHJ5Q2F0Y2ggbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0VHJ5RmluYWxseShUcnlGaW5hbGx5IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFlpZWxkU3RhdGVtZW50KFlpZWxkU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlKTsKCiAgLy8gTWVtYmVycwogIFIgZGVmYXVsdE1lbWJlcihNZW1iZXIgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBub2RlKSA9PiBkZWZhdWx0TWVtYmVyKG5vZGUpOwogIFIgdmlzaXRQcm9jZWR1cmUoUHJvY2VkdXJlIG5vZGUpID0+IGRlZmF1bHRNZW1iZXIobm9kZSk7CiAgUiB2aXNpdEZpZWxkKEZpZWxkIG5vZGUpID0+IGRlZmF1bHRNZW1iZXIobm9kZSk7CiAgUiB2aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHJldHVybiBkZWZhdWx0TWVtYmVyKG5vZGUpOwogIH0KCiAgLy8gQ2xhc3NlcwogIFIgdmlzaXRDbGFzcyhDbGFzcyBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdEV4dGVuc2lvbihFeHRlbnNpb24gbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwoKICAvLyBJbml0aWFsaXplcnMKICBSIGRlZmF1bHRJbml0aWFsaXplcihJbml0aWFsaXplciBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdEludmFsaWRJbml0aWFsaXplcihJbnZhbGlkSW5pdGlhbGl6ZXIgbm9kZSkgPT4KICAgICAgZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRGaWVsZEluaXRpYWxpemVyKEZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgPT4gZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRTdXBlckluaXRpYWxpemVyKFN1cGVySW5pdGlhbGl6ZXIgbm9kZSkgPT4gZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyKFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSkgPT4KICAgICAgZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRMb2NhbEluaXRpYWxpemVyKExvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgPT4gZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRBc3NlcnRJbml0aWFsaXplcihBc3NlcnRJbml0aWFsaXplciBub2RlKSA9PiBkZWZhdWx0SW5pdGlhbGl6ZXIobm9kZSk7CgogIC8vIE90aGVyIHRyZWUgbm9kZXMKICBSIHZpc2l0TGlicmFyeShMaWJyYXJ5IG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0TGlicmFyeURlcGVuZGVuY3koTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRDb21iaW5hdG9yKENvbWJpbmF0b3Igbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRMaWJyYXJ5UGFydChMaWJyYXJ5UGFydCBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdFR5cGVkZWYoVHlwZWRlZiBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdEZ1bmN0aW9uTm9kZShGdW5jdGlvbk5vZGUgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRBcmd1bWVudHMoQXJndW1lbnRzIG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0TmFtZWRFeHByZXNzaW9uKE5hbWVkRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdFN3aXRjaENhc2UoU3dpdGNoQ2FzZSBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdENhdGNoKENhdGNoIG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0TWFwRW50cnkoTWFwRW50cnkgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRDb21wb25lbnQoQ29tcG9uZW50IG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKfQoKY2xhc3MgRGFydFR5cGVWaXNpdG9yPFI+IHsKICBjb25zdCBEYXJ0VHlwZVZpc2l0b3IoKTsKCiAgUiBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSkgPT4gbnVsbDsKCiAgUiB2aXNpdEludmFsaWRUeXBlKEludmFsaWRUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdEJvdHRvbVR5cGUoQm90dG9tVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKfQoKY2xhc3MgRGFydFR5cGVWaXNpdG9yMTxSLCBUPiB7CiAgUiBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSwgVCBhcmcpID0+IG51bGw7CgogIFIgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSwgYXJnKTsKICBSIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwogIFIgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwogIFIgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwogIFIgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSwgYXJnKTsKICBSIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwogIFIgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUsIGFyZyk7Cn0KCi8vLyBWaXNpdG9yIGZvciBbQ29uc3RhbnRdIG5vZGVzLgovLy8KLy8vIE5vdGU6IENvbnN0YW50IG5vZGVzIGFyZSBfbm90XyB0cmVlcyBidXQgZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaHMuIFRoaXMKLy8vIG1lYW5zIHRoYXQgdmlzaXRpbmcgYSBjb25zdGFudCBub2RlIHdpdGhvdXQgdHJhY2tpbmcgd2hpY2ggc3Vibm9kZXMgdGhhdAovLy8gaGF2ZSBhbHJlYWR5IGJlZW4gdmlzaXRlZCBtaWdodCBsZWFkIHRvIGV4cG9uZW50aWFsIHJ1bm5pbmcgdGltZXMuCi8vLwovLy8gVXNlIFtDb21wdXRlT25jZUNvbnN0YW50VmlzaXRvcl0gb3IgW1Zpc2l0T25jZUNvbnN0YW50VmlzaXRvcl0gdG8gdmlzaXQKLy8vIGEgY29uc3RhbnQgbm9kZSB3aGlsZSBlbnN1cmluZyBlYWNoIHN1Ym5vZGUgaXMgb25seSB2aXNpdGVkIG9uY2UuCmNsYXNzIENvbnN0YW50VmlzaXRvcjxSPiB7CiAgY29uc3QgQ29uc3RhbnRWaXNpdG9yKCk7CgogIFIgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpID0+IG51bGw7CgogIFIgdmlzaXROdWxsQ29uc3RhbnQoTnVsbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0Qm9vbENvbnN0YW50KEJvb2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdEludENvbnN0YW50KEludENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0RG91YmxlQ29uc3RhbnQoRG91YmxlQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFN5bWJvbENvbnN0YW50KFN5bWJvbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0U2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRJbnN0YW5jZUNvbnN0YW50KEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoVGVhck9mZkNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChVbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKfQoKYWJzdHJhY3QgY2xhc3MgX0NvbnN0YW50Q2FsbGJhY2s8Uj4gewogIFIgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpOwoKICBSIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKTsKICBSIHZpc2l0Qm9vbENvbnN0YW50KEJvb2xDb25zdGFudCBub2RlKTsKICBSIHZpc2l0SW50Q29uc3RhbnQoSW50Q29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKTsKICBSIHZpc2l0U3ltYm9sQ29uc3RhbnQoU3ltYm9sQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKTsKICBSIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdFRlYXJPZmZDb25zdGFudChUZWFyT2ZmQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKTsKICBSIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChVbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpOwp9CgpjbGFzcyBfQ29uc3RhbnRDYWxsYmFja1Zpc2l0b3I8Uj4gaW1wbGVtZW50cyBDb25zdGFudFZpc2l0b3I8Uj4gewogIGZpbmFsIF9Db25zdGFudENhbGxiYWNrIF9jYWxsYmFjazsKCiAgX0NvbnN0YW50Q2FsbGJhY2tWaXNpdG9yKHRoaXMuX2NhbGxiYWNrKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpID0+CiAgICAgIF9jYWxsYmFjay52aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoVGVhck9mZkNvbnN0YW50IG5vZGUpID0+CiAgICAgIF9jYWxsYmFjay52aXNpdFRlYXJPZmZDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpID0+CiAgICAgIF9jYWxsYmFjay52aXNpdEluc3RhbmNlQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKSA9PiBfY2FsbGJhY2sudmlzaXRTZXRDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdExpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgbm9kZSkgPT4gX2NhbGxiYWNrLnZpc2l0TGlzdENvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgPT4gX2NhbGxiYWNrLnZpc2l0TWFwQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRTeW1ib2xDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFN0cmluZ0NvbnN0YW50KFN0cmluZ0NvbnN0YW50IG5vZGUpID0+CiAgICAgIF9jYWxsYmFjay52aXNpdFN0cmluZ0NvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0RG91YmxlQ29uc3RhbnQoRG91YmxlQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgX2NhbGxiYWNrLnZpc2l0RG91YmxlQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSA9PiBfY2FsbGJhY2sudmlzaXRJbnRDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgPT4gX2NhbGxiYWNrLnZpc2l0Qm9vbENvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSA9PiBfY2FsbGJhY2sudmlzaXROdWxsQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpID0+IF9jYWxsYmFjay5kZWZhdWx0Q29uc3RhbnQobm9kZSk7Cn0KCi8vLyBWaXNpdG9yLWxpa2UgY2xhc3MgdXNlZCBmb3IgdmlzaXRpbmcgYSBbQ29uc3RhbnRdIG5vZGUgd2hpbGUgY29tcHV0aW5nIGEKLy8vIHZhbHVlIGZvciBlYWNoIHN1Ym5vZGUuIFRoZSB2aXNpdG9yIGNhY2hlcyB0aGUgY29tcHV0ZWQgdmFsdWVzIGVuc3VyaW5nIHRoYXQKLy8vIGVhY2ggc3Vibm9kZSBpcyBvbmx5IHZpc2l0ZWQgb25jZS4KY2xhc3MgQ29tcHV0ZU9uY2VDb25zdGFudFZpc2l0b3I8Uj4gaW1wbGVtZW50cyBfQ29uc3RhbnRDYWxsYmFjazxSPiB7CiAgX0NvbnN0YW50Q2FsbGJhY2tWaXNpdG9yIF92aXNpdG9yOwogIE1hcDxDb25zdGFudCwgUj4gY2FjaGUgPSBuZXcgTGlua2VkSGFzaE1hcC5pZGVudGl0eSgpOwoKICBDb21wdXRlT25jZUNvbnN0YW50VmlzaXRvcigpIHsKICAgIF92aXNpdG9yID0gbmV3IF9Db25zdGFudENhbGxiYWNrVmlzaXRvcjxSPih0aGlzKTsKICB9CgogIC8vLyBWaXNpdHMgW25vZGVdIGlmIG5vdCBhbHJlYWR5IHZpc2l0ZWQgdG8gY29tcHV0ZSBhIHZhbHVlIGZvciBbbm9kZV0uCiAgLy8vCiAgLy8vIElmIHRoZSB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkIHRoZSBjYWNoZWQgdmFsdWUgaXMgcmV0dXJuZWQgaW1tZWRpYXRlbHkuCiAgLy8vCiAgLy8vIENhbGwgdGhpcyBtZXRob2QgdG8gY29tcHV0ZSB2YWx1ZXMgZm9yIHN1Ym5vZGVzIHJlY3Vyc2l2ZWx5LCB3aGlsZSBvbmx5CiAgLy8vIHZpc2l0aW5nIGVhY2ggc3Vibm9kZSBvbmNlLgogIFIgdmlzaXRDb25zdGFudChDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gY2FjaGVbbm9kZV0gPz89IG5vZGUuYWNjZXB0KF92aXNpdG9yKTsKICB9CgogIFIgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpID0+IG51bGw7CgogIFIgdmlzaXROdWxsQ29uc3RhbnQoTnVsbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0Qm9vbENvbnN0YW50KEJvb2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdEludENvbnN0YW50KEludENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0RG91YmxlQ29uc3RhbnQoRG91YmxlQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFN5bWJvbENvbnN0YW50KFN5bWJvbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0U2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRJbnN0YW5jZUNvbnN0YW50KEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoVGVhck9mZkNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChVbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKfQoKLy8vIFZpc2l0b3ItbGlrZSBjbGFzcyB1c2VkIGZvciB2aXNpdGluZyBlYWNoIHN1Ym5vZGUgb2YgYSBbQ29uc3RhbnRdIG5vZGUgb25jZS4KLy8vCi8vLyBUaGUgdmlzaXRvciByZWNvcmRzIHRoZSB2aXNpdGVkIG5vZGUgdG8gZW5zdXJlIHRoYXQgZWFjaCBzdWJub2RlIGlzIG9ubHkKLy8vIHZpc2l0ZWQgb25jZS4KY2xhc3MgVmlzaXRPbmNlQ29uc3RhbnRWaXNpdG9yIGltcGxlbWVudHMgX0NvbnN0YW50Q2FsbGJhY2s8dm9pZD4gewogIF9Db25zdGFudENhbGxiYWNrVmlzaXRvcjx2b2lkPiBfdmlzaXRvcjsKICBTZXQ8Q29uc3RhbnQ+IGNhY2hlID0gbmV3IExpbmtlZEhhc2hTZXQuaWRlbnRpdHkoKTsKCiAgVmlzaXRPbmNlQ29uc3RhbnRWaXNpdG9yKCkgewogICAgX3Zpc2l0b3IgPSBuZXcgX0NvbnN0YW50Q2FsbGJhY2tWaXNpdG9yPHZvaWQ+KHRoaXMpOwogIH0KCiAgLy8vIFZpc2l0cyBbbm9kZV0gaWYgbm90IGFscmVhZHkgdmlzaXRlZC4KICAvLy8KICAvLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byB2aXNpdCBzdWJub2RlcyByZWN1cnNpdmVseSwgd2hpbGUgb25seSB2aXNpdGluZyBlYWNoCiAgLy8vIHN1Ym5vZGUgb25jZS4KICB2b2lkIHZpc2l0Q29uc3RhbnQoQ29uc3RhbnQgbm9kZSkgewogICAgaWYgKGNhY2hlLmFkZChub2RlKSkgewogICAgICBub2RlLmFjY2VwdChfdmlzaXRvcik7CiAgICB9CiAgfQoKICB2b2lkIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSA9PiBudWxsOwoKICB2b2lkIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0U3RyaW5nQ29uc3RhbnQoU3RyaW5nQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdFNldENvbnN0YW50KFNldENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnQobm9kZSk7Cn0KCmNsYXNzIE1lbWJlclJlZmVyZW5jZVZpc2l0b3I8Uj4gewogIGNvbnN0IE1lbWJlclJlZmVyZW5jZVZpc2l0b3IoKTsKCiAgUiBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSA9PiBudWxsOwoKICBSIHZpc2l0RmllbGRSZWZlcmVuY2UoRmllbGQgbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0Q29uc3RydWN0b3JSZWZlcmVuY2UoQ29uc3RydWN0b3Igbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0UHJvY2VkdXJlUmVmZXJlbmNlKFByb2NlZHVyZSBub2RlKSA9PiBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRNZW1iZXJSZWZlcmVuY2Uobm9kZSk7CiAgfQp9CgpjbGFzcyBWaXNpdG9yPFI+IGV4dGVuZHMgVHJlZVZpc2l0b3I8Uj4KICAgIGltcGxlbWVudHMKICAgICAgICBEYXJ0VHlwZVZpc2l0b3I8Uj4sCiAgICAgICAgQ29uc3RhbnRWaXNpdG9yPFI+LAogICAgICAgIE1lbWJlclJlZmVyZW5jZVZpc2l0b3I8Uj4gewogIGNvbnN0IFZpc2l0b3IoKTsKCiAgLy8vIFRoZSBjYXRjaC1hbGwgY2FzZSwgZXhjZXB0IGZvciByZWZlcmVuY2VzLgogIFIgZGVmYXVsdE5vZGUoTm9kZSBub2RlKSA9PiBudWxsOwogIFIgZGVmYXVsdFRyZWVOb2RlKFRyZWVOb2RlIG5vZGUpID0+IGRlZmF1bHROb2RlKG5vZGUpOwoKICAvLyBEYXJ0VHlwZXMKICBSIGRlZmF1bHREYXJ0VHlwZShEYXJ0VHlwZSBub2RlKSA9PiBkZWZhdWx0Tm9kZShub2RlKTsKICBSIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0Qm90dG9tVHlwZShCb3R0b21UeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwoKICAvLyBDb25zdGFudHMKICBSIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Tm9kZShub2RlKTsKICBSIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0U3RyaW5nQ29uc3RhbnQoU3RyaW5nQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFNldENvbnN0YW50KFNldENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CgogIC8vIENsYXNzIHJlZmVyZW5jZXMKICBSIHZpc2l0Q2xhc3NSZWZlcmVuY2UoQ2xhc3Mgbm9kZSkgPT4gbnVsbDsKICBSIHZpc2l0VHlwZWRlZlJlZmVyZW5jZShUeXBlZGVmIG5vZGUpID0+IG51bGw7CgogIC8vIENvbnN0YW50IHJlZmVyZW5jZXMKICBSIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShDb25zdGFudCBub2RlKSA9PiBudWxsOwogIFIgdmlzaXROdWxsQ29uc3RhbnRSZWZlcmVuY2UoTnVsbENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0Qm9vbENvbnN0YW50UmVmZXJlbmNlKEJvb2xDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdEludENvbnN0YW50UmVmZXJlbmNlKEludENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0RG91YmxlQ29uc3RhbnRSZWZlcmVuY2UoRG91YmxlQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25zdGFudFJlZmVyZW5jZShTdHJpbmdDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdFN5bWJvbENvbnN0YW50UmVmZXJlbmNlKFN5bWJvbENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0TWFwQ29uc3RhbnRSZWZlcmVuY2UoTWFwQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uc3RhbnRSZWZlcmVuY2UoTGlzdENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0U2V0Q29uc3RhbnRSZWZlcmVuY2UoU2V0Q29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRJbnN0YW5jZUNvbnN0YW50UmVmZXJlbmNlKEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50UmVmZXJlbmNlKAogICAgICAgICAgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdFRlYXJPZmZDb25zdGFudFJlZmVyZW5jZShUZWFyT2ZmQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50UmVmZXJlbmNlKFR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50UmVmZXJlbmNlKFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwoKICAvLyBNZW1iZXIgcmVmZXJlbmNlcwogIFIgZGVmYXVsdE1lbWJlclJlZmVyZW5jZShNZW1iZXIgbm9kZSkgPT4gbnVsbDsKICBSIHZpc2l0RmllbGRSZWZlcmVuY2UoRmllbGQgbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0Q29uc3RydWN0b3JSZWZlcmVuY2UoQ29uc3RydWN0b3Igbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0UHJvY2VkdXJlUmVmZXJlbmNlKFByb2NlZHVyZSBub2RlKSA9PiBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRNZW1iZXJSZWZlcmVuY2Uobm9kZSk7CiAgfQoKICBSIHZpc2l0TmFtZShOYW1lIG5vZGUpID0+IGRlZmF1bHROb2RlKG5vZGUpOwogIFIgdmlzaXRTdXBlcnR5cGUoU3VwZXJ0eXBlIG5vZGUpID0+IGRlZmF1bHROb2RlKG5vZGUpOwogIFIgdmlzaXROYW1lZFR5cGUoTmFtZWRUeXBlIG5vZGUpID0+IGRlZmF1bHROb2RlKG5vZGUpOwp9CgpjbGFzcyBSZWN1cnNpdmVWaXNpdG9yPFI+IGV4dGVuZHMgVmlzaXRvcjxSPiB7CiAgY29uc3QgUmVjdXJzaXZlVmlzaXRvcigpOwoKICBSIGRlZmF1bHROb2RlKE5vZGUgbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IHJlY3Vyc2l2ZWx5IHJld3JpdGVzIGVhY2ggbm9kZSBpbiB0cmVlLgovLy8KLy8vIFZpc2l0IG1ldGhvZHMgc2hvdWxkIHJldHVybiBhIG5ldyBub2RlLCBvciB0aGUgdmlzaXRlZCBub2RlIChwb3NzaWJseQovLy8gbXV0YXRlZCksIG9yIGFueSBub2RlIGZyb20gdGhlIHZpc2l0ZWQgbm9kZSdzIHN1YnRyZWUuCi8vLwovLy8gRWFjaCBzdWJjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgQVNUIHJlbWFpbnMgYSB0cmVlLgovLy8KLy8vIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRyYW5zZm9ybWVyIHJlcGxhY2VzIGV2ZXJ5IG9jY3VycmVuY2Ugb2YKLy8vIGAhKHggJiYgeSlgIHdpdGggYCgheCB8fCAheSlgOgovLy8KLy8vICAgICBjbGFzcyBOZWdhdGlvblNpbmtlciBleHRlbmRzIFRyYW5zZm9ybWVyIHsKLy8vICAgICAgIEBvdmVycmlkZQovLy8gICAgICAgTm9kZSB2aXNpdE5vdChOb3Qgbm9kZSkgewovLy8gICAgICAgICB2YXIgb3BlcmFuZCA9IG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7IC8vIFJlbWVtYmVyIHRvIHZpc2l0LgovLy8gICAgICAgICBpZiAob3BlcmFuZCBpcyBMb2dpY2FsRXhwcmVzc2lvbiAmJiBvcGVyYW5kLm9wZXJhdG9yID09ICcmJicpIHsKLy8vICAgICAgICAgICByZXR1cm4gbmV3IExvZ2ljYWxFeHByZXNzaW9uKAovLy8gICAgICAgICAgICAgbmV3IE5vdChvcGVyYW5kLmxlZnQpLAovLy8gICAgICAgICAgICAgJ3x8JywKLy8vICAgICAgICAgICAgIG5ldyBOb3Qob3BlcmFuZC5yaWdodCkpOwovLy8gICAgICAgICB9Ci8vLyAgICAgICAgIHJldHVybiBub2RlOwovLy8gICAgICAgfQovLy8gICAgIH0KLy8vCmNsYXNzIFRyYW5zZm9ybWVyIGV4dGVuZHMgVHJlZVZpc2l0b3I8VHJlZU5vZGU+IHsKICBjb25zdCBUcmFuc2Zvcm1lcigpOwoKICAvLy8gUmVwbGFjZXMgYSB1c2Ugb2YgYSB0eXBlLgogIC8vLwogIC8vLyBCeSBkZWZhdWx0LCByZWN1cnNpb24gc3RvcHMgYXQgdGhpcyBwb2ludC4KICBEYXJ0VHlwZSB2aXNpdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpID0+IG5vZGU7CgogIENvbnN0YW50IHZpc2l0Q29uc3RhbnQoQ29uc3RhbnQgbm9kZSkgPT4gbm9kZTsKCiAgU3VwZXJ0eXBlIHZpc2l0U3VwZXJ0eXBlKFN1cGVydHlwZSBub2RlKSA9PiBub2RlOwoKICBUcmVlTm9kZSBkZWZhdWx0VHJlZU5vZGUoVHJlZU5vZGUgbm9kZSkgewogICAgbm9kZS50cmFuc2Zvcm1DaGlsZHJlbih0aGlzKTsKICAgIHJldHVybiBub2RlOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRXhwcmVzc2lvblZpc2l0b3IxPFIsIFQ+IHsKICBjb25zdCBFeHByZXNzaW9uVmlzaXRvcjEoKTsKCiAgUiBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PiBudWxsOwogIFIgZGVmYXVsdEJhc2ljTGl0ZXJhbChCYXNpY0xpdGVyYWwgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0VmFyaWFibGVTZXQoVmFyaWFibGVTZXQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFByb3BlcnR5R2V0KFByb3BlcnR5R2V0IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRQcm9wZXJ0eVNldChQcm9wZXJ0eVNldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoRGlyZWN0UHJvcGVydHlHZXQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdERpcmVjdFByb3BlcnR5U2V0KERpcmVjdFByb3BlcnR5U2V0IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRTdXBlclByb3BlcnR5R2V0KFN1cGVyUHJvcGVydHlHZXQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN1cGVyUHJvcGVydHlTZXQoU3VwZXJQcm9wZXJ0eVNldCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0U3RhdGljU2V0KFN0YXRpY1NldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TWV0aG9kSW52b2NhdGlvbihNZXRob2RJbnZvY2F0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKERpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihTdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0Tm90KE5vdCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oTG9naWNhbEV4cHJlc3Npb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TGlzdENvbmNhdGVuYXRpb24oTGlzdENvbmNhdGVuYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFNldENvbmNhdGVuYXRpb24oU2V0Q29uY2F0ZW5hdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TWFwQ29uY2F0ZW5hdGlvbihNYXBDb25jYXRlbmF0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRJbnN0YW5jZUNyZWF0aW9uKEluc3RhbmNlQ3JlYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdElzRXhwcmVzc2lvbihJc0V4cHJlc3Npb24gbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN5bWJvbExpdGVyYWwoU3ltYm9sTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0VHlwZUxpdGVyYWwoVHlwZUxpdGVyYWwgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRoaXNFeHByZXNzaW9uKFRoaXNFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUsIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0UmV0aHJvdyhSZXRocm93IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRUaHJvdyhUaHJvdyBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFNldExpdGVyYWwoU2V0TGl0ZXJhbCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRBd2FpdEV4cHJlc3Npb24oQXdhaXRFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSwgYXJnKTsKICBSIHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0QmFzaWNMaXRlcmFsKG5vZGUsIGFyZyk7CiAgUiB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlLCBhcmcpOwogIFIgdmlzaXRCb29sTGl0ZXJhbChCb29sTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlLCBhcmcpOwogIFIgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlLCBhcmcpOwogIFIgdmlzaXRMZXQoTGV0IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExvYWRMaWJyYXJ5KExvYWRMaWJyYXJ5IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChDaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKfQoKYWJzdHJhY3QgY2xhc3MgU3RhdGVtZW50VmlzaXRvcjE8UiwgVD4gewogIGNvbnN0IFN0YXRlbWVudFZpc2l0b3IxKCk7CgogIFIgZGVmYXVsdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+IG51bGw7CgogIFIgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0QmxvY2soQmxvY2sgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0QXNzZXJ0QmxvY2soQXNzZXJ0QmxvY2sgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0QXNzZXJ0U3RhdGVtZW50KEFzc2VydFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0QnJlYWtTdGF0ZW1lbnQoQnJlYWtTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0V2hpbGVTdGF0ZW1lbnQoV2hpbGVTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0RG9TdGF0ZW1lbnQoRG9TdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0Rm9yU3RhdGVtZW50KEZvclN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRGb3JJblN0YXRlbWVudChGb3JJblN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoU3dpdGNoU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdElmU3RhdGVtZW50KElmU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFJldHVyblN0YXRlbWVudChSZXR1cm5TdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0VHJ5Q2F0Y2goVHJ5Q2F0Y2ggbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0VHJ5RmluYWxseShUcnlGaW5hbGx5IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFlpZWxkU3RhdGVtZW50KFlpZWxkU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKfQoKYWJzdHJhY3QgY2xhc3MgQm9keVZpc2l0b3IxPFIsIFQ+IGV4dGVuZHMgRXhwcmVzc2lvblZpc2l0b3IxPFIsIFQ+CiAgICBpbXBsZW1lbnRzIFN0YXRlbWVudFZpc2l0b3IxPFIsIFQ+IHsKICBjb25zdCBCb2R5VmlzaXRvcjEoKTsKCiAgUiBkZWZhdWx0U3RhdGVtZW50KFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4gbnVsbDsKICBSIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEJsb2NrKEJsb2NrIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFzc2VydEJsb2NrKEFzc2VydEJsb2NrIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEJyZWFrU3RhdGVtZW50KEJyZWFrU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFdoaWxlU3RhdGVtZW50KFdoaWxlU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdERvU3RhdGVtZW50KERvU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0U3dpdGNoU3RhdGVtZW50KFN3aXRjaFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRJZlN0YXRlbWVudChJZlN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoUmV0dXJuU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRyeUNhdGNoKFRyeUNhdGNoIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRZaWVsZFN0YXRlbWVudChZaWVsZFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7Cn0KgyMATk48HAEiGgETASYdATBHAU9DQ0NDT09NTT8/TUAfPh9NPh8zTz4fOh9PTU1NRUVHQ0k7N0NBQUtRUUlDSUVFM0tHQzwfAgElHAEuAToeNkJISkxISEJESEpCHkJKPEBIOh46HgIBIhkBKAE/OzNNIAQCASceATIBOCBOTkAgTlACARUPHh0aIBcBLAERQUdPQ0NDQ09PTU0/P01AHz4fTT4fM08+HzofT01NTUVFR0NJOzdDQUFLUVFJQ0lFRTNLR0M8HwEQPzoeNkJISkxISEJESEpCHkJKPEBIOh46HgENOT87M00gBAENNT0BEkM4IE5OQCBOUAEWOU0/QTlFQz1JPzU7PQIBGxsBLAFBQTs/RUNNQQIBHzMBTU1HS1FPPSJNAgEiBEtNRwRMRhsbASwBQ0NBR0dHQUNBS0wdSVFRAgEmJAEqKiguLi4oKigySjA4OAIBQiUBLAEMOjABDDowAQwyLAEMTDkBDDQtAQxMAQxPAQxMAQwwKwEMMCsBDDArAQxMAQxPAQxPAQxHAgFNUSdGJTkBITYEAUoGVwZOIiMyBAEsAUNDQUdHR0FDQUtMHUlRUQIBUQRNEkQrNgEfOQQBLAZPFCYbHQYEAS8BRkZESkpKREZETk8dTD0dPR0CASIiATEBRVFNMSwpBAIBKA8cHCQTATEkOQEPOUFBOz9FQ01BAQ85Q0NBR0dHQUNBS0wdSVFRARYtMQEZNTUmNSYzJjkmOSY5JjMmNSYzJj0mMDAmOyZDJkMmARcxRVFNMSwpBAEvOTkCAS8cAR0eEQQCATkESjsESwRIIwQzFCRLTCwnFikOGQwKBDIXASAGMTEBMQE0ASwiEQQCASoeATc1JD0kT09PTz0kPSQ7JDskS0s7JEckRSQ7JEUkPz0kRSRBJD0kOyQ7JDskUVE1JE83JD0kR0NPTU05JD8kTzUmNSZRUT85JDUkT0MkAgEpHQE1AUEjQk43IzkjOyM3IzcjTlA3IzkjSSNOOSNITDcjQSNBIwIBQykYATVBI0JONyM5IzsjNyM3I05QNyM5I0kjTjkjSEw3I0EjQSMCARtwYWNrYWdlOmtlcm5lbC92aXNpdG9yLmRhcnQrc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvY2Fub25pY2FsX25hbWUuZGFydJj6Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KbGlicmFyeSBrZXJuZWwuY2Fub25pY2FsX25hbWU7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKCi8vLyBBIHN0cmluZyBzZXF1ZW5jZSB0aGF0IGlkZW50aWZpZXMgYSBsaWJyYXJ5LCBjbGFzcywgb3IgbWVtYmVyLgovLy8KLy8vIENhbm9uaWNhbCBuYW1lcyBhcmUgb3JnYW5pemVkIGluIGEgcHJlZml4IHRyZWUuICBFYWNoIG5vZGUga25vd3MgaXRzCi8vLyBwYXJlbnQsIGNoaWxkcmVuLCBhbmQgdGhlIEFTVCBub2RlIGl0IGlzIGN1cnJlbnRseSBib3VuZCB0by4KLy8vCi8vLyBUaGUgZm9sbG93aW5nIHNjaGVtYSBzcGVjaWZpZXMgaG93IHRoZSBjYW5vbmljYWwgbmFtZSBvZiBhIGdpdmVuIG9iamVjdAovLy8gaXMgZGVmaW5lZDoKLy8vCi8vLyAgICAgIExpYnJhcnk6Ci8vLyAgICAgICAgIFVSSSBvZiBsaWJyYXJ5Ci8vLwovLy8gICAgICBDbGFzczoKLy8vICAgICAgICAgQ2Fub25pY2FsIG5hbWUgb2YgZW5jbG9zaW5nIGxpYnJhcnkKLy8vICAgICAgICAgTmFtZSBvZiBjbGFzcwovLy8KLy8vICAgICAgQ29uc3RydWN0b3I6Ci8vLyAgICAgICAgIENhbm9uaWNhbCBuYW1lIG9mIGVuY2xvc2luZyBjbGFzcyBvciBsaWJyYXJ5Ci8vLyAgICAgICAgICJAY29uc3RydWN0b3JzIgovLy8gICAgICAgICBRdWFsaWZpZWQgbmFtZQovLy8KLy8vICAgICAgRmllbGQ6Ci8vLyAgICAgICAgIENhbm9uaWNhbCBuYW1lIG9mIGVuY2xvc2luZyBjbGFzcyBvciBsaWJyYXJ5Ci8vLyAgICAgICAgICJAZmllbGRzIgovLy8gICAgICAgICBRdWFsaWZpZWQgbmFtZQovLy8KLy8vICAgICAgVHlwZWRlZjoKLy8vICAgICAgICAgQ2Fub25pY2FsIG5hbWUgb2YgZW5jbG9zaW5nIGNsYXNzCi8vLyAgICAgICAgICJAdHlwZWRlZnMiCi8vLyAgICAgICAgIE5hbWUgdGV4dAovLy8KLy8vICAgICAgUHJvY2VkdXJlIHRoYXQgaXMgbm90IGFuIGFjY2Vzc29yIG9yIGZhY3Rvcnk6Ci8vLyAgICAgICAgIENhbm9uaWNhbCBuYW1lIG9mIGVuY2xvc2luZyBjbGFzcyBvciBsaWJyYXJ5Ci8vLyAgICAgICAgICJAbWV0aG9kcyIKLy8vICAgICAgICAgUXVhbGlmaWVkIG5hbWUKLy8vCi8vLyAgICAgIFByb2NlZHVyZSB0aGF0IGlzIGEgZ2V0dGVyOgovLy8gICAgICAgICBDYW5vbmljYWwgbmFtZSBvZiBlbmNsb3NpbmcgY2xhc3Mgb3IgbGlicmFyeQovLy8gICAgICAgICAiQGdldHRlcnMiCi8vLyAgICAgICAgIFF1YWxpZmllZCBuYW1lCi8vLwovLy8gICAgICBQcm9jZWR1cmUgdGhhdCBpcyBhIHNldHRlcjoKLy8vICAgICAgICAgQ2Fub25pY2FsIG5hbWUgb2YgZW5jbG9zaW5nIGNsYXNzIG9yIGxpYnJhcnkKLy8vICAgICAgICAgIkBzZXR0ZXJzIgovLy8gICAgICAgICBRdWFsaWZpZWQgbmFtZQovLy8KLy8vICAgICAgUHJvY2VkdXJlIHRoYXQgaXMgYSBmYWN0b3J5OgovLy8gICAgICAgICBDYW5vbmljYWwgbmFtZSBvZiBlbmNsb3NpbmcgY2xhc3MKLy8vICAgICAgICAgIkBmYWN0b3JpZXMiCi8vLyAgICAgICAgIFF1YWxpZmllZCBuYW1lCi8vLwovLy8gICAgICBRdWFsaWZpZWQgbmFtZToKLy8vICAgICAgICAgaWYgcHJpdmF0ZTogVVJJIG9mIGxpYnJhcnkKLy8vICAgICAgICAgTmFtZSB0ZXh0Ci8vLwovLy8gVGhlICJxdWFsaWZpZWQgbmFtZSIgYWxsb3dzIGEgbWVtYmVyIHRvIGhhdmUgYSBuYW1lIHRoYXQgaXMgcHJpdmF0ZSB0bwovLy8gYSBsaWJyYXJ5IG90aGVyIHRoYW4gdGhlIG9uZSBjb250YWluaW5nIHRoYXQgbWVtYmVyLgpjbGFzcyBDYW5vbmljYWxOYW1lIHsKICBDYW5vbmljYWxOYW1lIF9wYXJlbnQ7CgogIENhbm9uaWNhbE5hbWUgZ2V0IHBhcmVudCA9PiBfcGFyZW50OwoKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBDYW5vbmljYWxOYW1lIF9ub25Sb290VG9wOwoKICBNYXA8U3RyaW5nLCBDYW5vbmljYWxOYW1lPiBfY2hpbGRyZW47CgogIC8vLyBUaGUgbGlicmFyeSwgY2xhc3MsIG9yIG1lbWJlciBib3VuZCB0byB0aGlzIG5hbWUuCiAgUmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgLy8vIFRlbXBvcmFyeSBpbmRleCB1c2VkIGR1cmluZyBzZXJpYWxpemF0aW9uLgogIGludCBpbmRleCA9IC0xOwoKICBDYW5vbmljYWxOYW1lLl8odGhpcy5fcGFyZW50LCB0aGlzLm5hbWUpIHsKICAgIGFzc2VydChuYW1lICE9IG51bGwpOwogICAgYXNzZXJ0KHBhcmVudCAhPSBudWxsKTsKICAgIF9ub25Sb290VG9wID0gX3BhcmVudC5pc1Jvb3QgPyB0aGlzIDogX3BhcmVudC5fbm9uUm9vdFRvcDsKICB9CgogIENhbm9uaWNhbE5hbWUucm9vdCgpCiAgICAgIDogX3BhcmVudCA9IG51bGwsCiAgICAgICAgX25vblJvb3RUb3AgPSBudWxsLAogICAgICAgIG5hbWUgPSAnJzsKCiAgYm9vbCBnZXQgaXNSb290ID0+IF9wYXJlbnQgPT0gbnVsbDsKICBDYW5vbmljYWxOYW1lIGdldCBub25Sb290VG9wID0+IF9ub25Sb290VG9wOwoKICBJdGVyYWJsZTxDYW5vbmljYWxOYW1lPiBnZXQgY2hpbGRyZW4gPT4KICAgICAgX2NoaWxkcmVuPy52YWx1ZXMgPz8gY29uc3QgPENhbm9uaWNhbE5hbWU+W107CgogIEl0ZXJhYmxlPENhbm9uaWNhbE5hbWU+IGdldCBjaGlsZHJlbk9yTnVsbCA9PiBfY2hpbGRyZW4/LnZhbHVlczsKCiAgYm9vbCBoYXNDaGlsZChTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIF9jaGlsZHJlbiAhPSBudWxsICYmIF9jaGlsZHJlbi5jb250YWluc0tleShuYW1lKTsKICB9CgogIENhbm9uaWNhbE5hbWUgZ2V0Q2hpbGQoU3RyaW5nIG5hbWUpIHsKICAgIHZhciBtYXAgPSBfY2hpbGRyZW4gPz89IDxTdHJpbmcsIENhbm9uaWNhbE5hbWU+e307CiAgICByZXR1cm4gbWFwW25hbWVdID8/PSBuZXcgQ2Fub25pY2FsTmFtZS5fKHRoaXMsIG5hbWUpOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXRDaGlsZEZyb21VcmkoVXJpIHVyaSkgewogICAgLy8gTm90ZSB0aGF0IHRoZSBVcmkgY2xhc3MgY2FjaGVzIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGFuZCBhbGwgbGlicmFyeQogICAgLy8gVVJJcyB3aWxsIGJlIHN0cmluZ2lmaWVkIGZvciBzZXJpYWxpemF0aW9uIGFueXdheSwgc28gdGhlcmUgaXMgbm8KICAgIC8vIHNpZ25pZmljYW50IGNvc3QgZm9yIGNvbnZlcnRpbmcgdGhlIFVyaSB0byBhIHN0cmluZyBoZXJlLgogICAgcmV0dXJuIGdldENoaWxkKCckdXJpJyk7CiAgfQoKICBDYW5vbmljYWxOYW1lIGdldENoaWxkRnJvbVF1YWxpZmllZE5hbWUoTmFtZSBuYW1lKSB7CiAgICByZXR1cm4gbmFtZS5pc1ByaXZhdGUKICAgICAgICA/IGdldENoaWxkRnJvbVVyaShuYW1lLmxpYnJhcnkuaW1wb3J0VXJpKS5nZXRDaGlsZChuYW1lLm5hbWUpCiAgICAgICAgOiBnZXRDaGlsZChuYW1lLm5hbWUpOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXRDaGlsZEZyb21NZW1iZXIoTWVtYmVyIG1lbWJlcikgewogICAgcmV0dXJuIGdldENoaWxkKGdldE1lbWJlclF1YWxpZmllcihtZW1iZXIpKQogICAgICAgIC5nZXRDaGlsZEZyb21RdWFsaWZpZWROYW1lKG1lbWJlci5uYW1lKTsKICB9CgogIENhbm9uaWNhbE5hbWUgZ2V0Q2hpbGRGcm9tRmllbGRXaXRoTmFtZShOYW1lIG5hbWUpIHsKICAgIHJldHVybiBnZXRDaGlsZCgnQGZpZWxkcycpLmdldENoaWxkRnJvbVF1YWxpZmllZE5hbWUobmFtZSk7CiAgfQoKICBDYW5vbmljYWxOYW1lIGdldENoaWxkRnJvbVR5cGVkZWYoVHlwZWRlZiB0eXBlZGVmXykgewogICAgcmV0dXJuIGdldENoaWxkKCdAdHlwZWRlZnMnKS5nZXRDaGlsZCh0eXBlZGVmXy5uYW1lKTsKICB9CgogIC8vLyBUYWtlIG93bmVyc2hpcCBvZiBhIGNoaWxkIGNhbm9uaWNhbCBuYW1lIGFuZCBpdHMgc3VidHJlZS4KICAvLy8KICAvLy8gVGhlIGNoaWxkIG5hbWUgaXMgcmVtb3ZlZCBhcyBhIGNoaWxkIG9mIGl0cyBjdXJyZW50IHBhcmVudCBhbmQgdGhpcyBuYW1lCiAgLy8vIGJlY29tZXMgdGhlIG5ldyBwYXJlbnQuICBOb3RlIHRoYXQgdGhpcyBtb3ZlcyB0aGUgZW50aXJlIHN1YnRyZWUgcm9vdGVkIGF0CiAgLy8vIHRoZSBjaGlsZC4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gbW92ZSBzdWJ0cmVlcyB3aXRoaW4gYSBjYW5vbmljYWwgbmFtZSB0cmVlIG9yCiAgLy8vIGVsc2UgbW92ZSB0aGVtIGJldHdlZW4gdHJlZXMuICBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGNoaWxkCiAgLy8vIG5hbWUgaXMgYWxyZWFkeSBhIGNoaWxkIG9mIHRoaXMgbmFtZS4KICAvLy8KICAvLy8gVGhlIHByZWNvbmRpdGlvbiBpcyB0aGF0IHRoaXMgbmFtZSBjYW5ub3QgaGF2ZSBhIChkaWZmZXJlbnQpIGNoaWxkIHdpdGgKICAvLy8gdGhlIHNhbWUgbmFtZS4KICB2b2lkIGFkb3B0Q2hpbGQoQ2Fub25pY2FsTmFtZSBjaGlsZCkgewogICAgaWYgKGNoaWxkLl9wYXJlbnQgPT0gdGhpcykgcmV0dXJuOwogICAgaWYgKF9jaGlsZHJlbiAhPSBudWxsICYmIF9jaGlsZHJlbi5jb250YWluc0tleShjaGlsZC5uYW1lKSkgewogICAgICB0aHJvdyAnQ2Fubm90IGFkZCBhIGNoaWxkIHRvICR0aGlzIGJlY2F1c2UgdGhpcyBuYW1lIGFscmVhZHkgaGFzIGEgJwogICAgICAgICAgJ2NoaWxkIG5hbWVkICR7Y2hpbGQubmFtZX0nOwogICAgfQogICAgY2hpbGQuX3BhcmVudC5yZW1vdmVDaGlsZChjaGlsZC5uYW1lKTsKICAgIGNoaWxkLl9wYXJlbnQgPSB0aGlzOwogICAgaWYgKF9jaGlsZHJlbiA9PSBudWxsKSBfY2hpbGRyZW4gPSA8U3RyaW5nLCBDYW5vbmljYWxOYW1lPnt9OwogICAgX2NoaWxkcmVuW2NoaWxkLm5hbWVdID0gY2hpbGQ7CiAgfQoKICB2b2lkIHJlbW92ZUNoaWxkKFN0cmluZyBuYW1lKSB7CiAgICBfY2hpbGRyZW4/LnJlbW92ZShuYW1lKTsKICB9CgogIHZvaWQgYmluZFRvKFJlZmVyZW5jZSB0YXJnZXQpIHsKICAgIGlmIChyZWZlcmVuY2UgPT0gdGFyZ2V0KSByZXR1cm47CiAgICBpZiAocmVmZXJlbmNlICE9IG51bGwpIHsKICAgICAgdGhyb3cgJyR0aGlzIGlzIGFscmVhZHkgYm91bmQnOwogICAgfQogICAgaWYgKHRhcmdldC5jYW5vbmljYWxOYW1lICE9IG51bGwpIHsKICAgICAgdGhyb3cgJ0Nhbm5vdCBiaW5kICR0aGlzIHRvICR7dGFyZ2V0Lm5vZGV9LCB0YXJnZXQgaXMgYWxyZWFkeSBib3VuZCB0byAnCiAgICAgICAgICAnJHt0YXJnZXQuY2Fub25pY2FsTmFtZX0nOwogICAgfQogICAgdGFyZ2V0LmNhbm9uaWNhbE5hbWUgPSB0aGlzOwogICAgdGhpcy5yZWZlcmVuY2UgPSB0YXJnZXQ7CiAgfQoKICB2b2lkIHVuYmluZCgpIHsKICAgIGlmIChyZWZlcmVuY2UgPT0gbnVsbCkgcmV0dXJuOwogICAgYXNzZXJ0KHJlZmVyZW5jZS5jYW5vbmljYWxOYW1lID09IHRoaXMpOwogICAgcmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUgPSBudWxsOwogICAgcmVmZXJlbmNlID0gbnVsbDsKICB9CgogIHZvaWQgdW5iaW5kQWxsKCkgewogICAgdW5iaW5kKCk7CiAgICBJdGVyYWJsZTxDYW5vbmljYWxOYW1lPiBjaGlsZHJlbl8gPSBjaGlsZHJlbk9yTnVsbDsKICAgIGlmIChjaGlsZHJlbl8gIT0gbnVsbCkgewogICAgICBmb3IgKENhbm9uaWNhbE5hbWUgY2hpbGQgaW4gY2hpbGRyZW5fKSB7CiAgICAgICAgY2hpbGQudW5iaW5kQWxsKCk7CiAgICAgIH0KICAgIH0KICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9wYXJlbnQgPT0gbnVsbCA/ICdyb290JyA6ICckcGFyZW50OjokbmFtZSc7CgogIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7CiAgICByZXR1cm4gcmVmZXJlbmNlID8/PSAobmV3IFJlZmVyZW5jZSgpLi5jYW5vbmljYWxOYW1lID0gdGhpcyk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIGdldE1lbWJlclF1YWxpZmllcihNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZSkgewogICAgICBpZiAobWVtYmVyLmlzR2V0dGVyKSByZXR1cm4gJ0BnZXR0ZXJzJzsKICAgICAgaWYgKG1lbWJlci5pc1NldHRlcikgcmV0dXJuICdAc2V0dGVycyc7CiAgICAgIGlmIChtZW1iZXIuaXNGYWN0b3J5KSByZXR1cm4gJ0BmYWN0b3JpZXMnOwogICAgICByZXR1cm4gJ0BtZXRob2RzJzsKICAgIH0KICAgIGlmIChtZW1iZXIgaXMgRmllbGQpIHsKICAgICAgcmV0dXJuICdAZmllbGRzJzsKICAgIH0KICAgIGlmIChtZW1iZXIgaXMgQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuICdAY29uc3RydWN0b3JzJzsKICAgIH0KICAgIGlmIChtZW1iZXIgaXMgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuICdAZmFjdG9yaWVzJzsKICAgIH0KICAgIHRocm93ICdVbmV4cGVjdGVkIG1lbWJlcjogJG1lbWJlcic7CiAgfQp9CoDaAE5OPB8BEwFDBElBBEwQBBIbBBAwGgQWORwbBBA5FhsEEi4YFgQ3ORcbBCU5FxsEJTkXGwQmLhkbBBknFgRLORYZAScBFR0BKAE4FwExEgEtGhw/BAEXGBwTASYvASo0AUMBHz0EASg3OgQBK1FJQR0EATcaRh8EATQwMQQBN0AEATg6BAFABk9REQZPUSwGThUpJ0JLJwYrGkIjBAEiHQQBIiUdJgYoTyUGIR0EARIjLSQWBAEVDjgdLxsIBgQBRAEdQgQBNB8uLjEZBhsYBiEeBjMbBigEAgEicGFja2FnZTprZXJuZWwvY2Fub25pY2FsX25hbWUuZGFydDJzZGtyb290Oi9wa2cva2VybmVsL2xpYi90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydIL1bGlicmFyeSBrZXJuZWwudHJhbnNmb3JtYXRpb25zLmZsYWdzOwoKaW1wb3J0ICcuLi9hc3QuZGFydCc7CgovLy8gRmxhZ3Mgc3VtbWFyaXppbmcgdGhlIGtpbmRzIG9mIEFTVCBub2RlcyBjb250YWluZWQgaW4gYSBnaXZlbiBtZW1iZXIgb3IKLy8vIGNsYXNzLCBmb3Igc3BlZWRpbmcgdXAgdHJhbnNmb3JtYXRpb25zIHRoYXQgb25seSBhZmZlY3QgY2VydGFpbiB0eXBlcyBvZgovLy8gbm9kZXMuCi8vLwovLy8gVGhlc2UgYXJlIHNldCBieSB0aGUgZnJvbnRlbmQgYW5kIHRoZSBkZXNlcmlhbGl6ZXIuCmNsYXNzIFRyYW5zZm9ybWVyRmxhZyB7CiAgLy8vIFRoZSBjbGFzcyBvciBtZW1iZXIgY29udGFpbnMgJ3N1cGVyJyBjYWxscywgdGhhdCBpcywgb25lIG9mIHRoZSBBU1Qgbm9kZXMKICAvLy8gW1N1cGVyUHJvcGVydHlHZXRdLCBbU3VwZXJQcm9wZXJ0eVNldF0sIFtTdXBlck1ldGhvZEludm9jYXRpb25dLgogIHN0YXRpYyBjb25zdCBpbnQgc3VwZXJDYWxscyA9IDEgPDwgMDsKCiAgLy8vIFRlbXBvcmFyeSBmbGFnIHVzZWQgYnkgdGhlIHZlcmlmaWVyIHRvIGluZGljYXRlIHRoYXQgdGhlIGdpdmVuIG1lbWJlcgogIC8vLyBoYXMgYmVlbiBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgc2VlbkJ5VmVyaWZpZXIgPSAxIDw8IDE7CgogIC8vIFRPRE8oYXNnZXJmKTogIFdlIGNvdWxkIGFsc28gYWRkIGEgZmxhZyBmb3IgJ2FzeW5jJyBhbmQgd2lsbCBwcm9iYWJseSBoYXZlCiAgLy8gb25lIGZvciBjbG9zdXJlcyBhcyB3ZWxsLgp9ChcAJgEWAUxNCwQ4GFBHKAFMFSwBUB8CASlwYWNrYWdlOmtlcm5lbC90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydClzZGtyb290Oi9wa2cva2VybmVsL2xpYi90eXBlX2FsZ2VicmEuZGFydMAAbYUvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC50eXBlX2FsZ2VicmE7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKCi8vLyBSZXR1cm5zIGEgdHlwZSB3aGVyZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIGdpdmVuIHR5cGUgcGFyYW1ldGVycyBoYXZlIGJlZW4KLy8vIHJlcGxhY2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdHlwZXMuCi8vLwovLy8gVGhpcyB3aWxsIGNvcHkgb25seSB0aGUgc3VidGVybXMgb2YgW3R5cGVdIHRoYXQgY29udGFpbiBzdWJzdGl0dXRlZAovLy8gdmFyaWFibGVzOyBhbGwgb3RoZXIgW0RhcnRUeXBlXSBvYmplY3RzIHdpbGwgYmUgcmV1c2VkLgovLy8KLy8vIEluIHBhcnRpY3VsYXIsIGlmIG5vIHZhcmlhYmxlcyB3ZXJlIHN1YnN0aXR1dGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8KLy8vIHJldHVybiB0aGUgW3R5cGVdIGluc3RhbmNlIChub3QgYSBjb3B5KSwgc28gdGhlIGNhbGxlciBtYXkgdXNlIFtpZGVudGljYWxdCi8vLyB0byBlZmZpY2llbnRseSBjaGVjayBpZiBhIGRpc3RpbmN0IHR5cGUgd2FzIGNyZWF0ZWQuCkRhcnRUeXBlIHN1YnN0aXR1dGUoRGFydFR5cGUgdHlwZSwgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb24pIHsKICBpZiAoc3Vic3RpdHV0aW9uLmlzRW1wdHkpIHJldHVybiB0eXBlOwogIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbU1hcChzdWJzdGl0dXRpb24pLnN1YnN0aXR1dGVUeXBlKHR5cGUpOwp9CgovLy8gUmV0dXJucyBhIG1hcHBpbmcgZnJvbSB0aGUgdHlwZSBwYXJhbWV0ZXJzIGRlY2xhcmVkIG9uIHRoZSBjbGFzcyBvZiBbdHlwZV0KLy8vIHRvIHRoZSBhY3R1YWwgdHlwZSBhcmd1bWVudHMgcHJvdmlkZWQgaW4gW3R5cGVdLgovLy8KLy8vIFRoaXMgY2FuIGJlIHBhc3NlZCBhcyBhcmd1bWVudCB0byBbc3Vic3RpdHV0ZV0uCk1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gZ2V0U3Vic3RpdHV0aW9uTWFwKFN1cGVydHlwZSB0eXBlKSB7CiAgcmV0dXJuIHR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5CiAgICAgID8gY29uc3QgPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9CiAgICAgIDogbmV3IE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4uZnJvbUl0ZXJhYmxlcygKICAgICAgICAgIHR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlLnR5cGVBcmd1bWVudHMpOwp9CgpNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IGdldFVwcGVyQm91bmRTdWJzdGl0dXRpb25NYXAoQ2xhc3MgaG9zdCkgewogIGlmIChob3N0LnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBjb25zdCA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgdmFyIHJlc3VsdCA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gaG9zdC50eXBlUGFyYW1ldGVycykgewogICAgcmVzdWx0W3BhcmFtZXRlcl0gPSBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gaG9zdC50eXBlUGFyYW1ldGVycykgewogICAgcmVzdWx0W3BhcmFtZXRlcl0gPSBzdWJzdGl0dXRlKHBhcmFtZXRlci5ib3VuZCwgcmVzdWx0KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8vIExpa2UgW3N1YnN0aXR1dGVdLCBleGNlcHQgd2hlbiBhIHR5cGUgaW4gdGhlIFtzdWJzdGl0dXRpb25dIG1hcCByZWZlcmVuY2VzCi8vLyBhbm90aGVyIHN1YnN0aXR1dGVkIHR5cGUgdmFyaWFibGUsIHRoZSBtYXBwaW5nIGZvciB0aGF0IHR5cGUgaXMgcmVjdXJzaXZlbHkKLy8vIGluc2VydGVkLgovLy8KLy8vIEZvciBleGFtcGxlIGBTZXQ8Rz5gIHN1YnN0aXR1dGVkIHdpdGggYHtUIC0+IFN0cmluZywgRyAtPiBMaXN0PFQ+fWAgcmVzdWx0cwovLy8gaW4gYFNldDxMaXN0PFN0cmluZz4+YC4KLy8vCi8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGUgc3Vic3RpdHV0aW9uIG1hcCBjb250YWlucyBhIGN5Y2xlIHJlYWNoYWJsZSBmcm9tIGEKLy8vIHR5cGUgdmFyaWFibGUgaW4gW3R5cGVdICh0aGUgcmVzdWx0aW5nIHR5cGUgd291bGQgYmUgaW5maW5pdGUpLgovLy8KLy8vIFRoZSBbc3Vic3RpdHV0aW9uXSBtYXAgd2lsbCBiZSBtdXRhdGVkIHNvIHRoYXQgdGhlIHJpZ2h0LWhhbmQgc2lkZXMgbWF5Ci8vLyBiZSByZW1hcHBlZCB0byB0aGUgZGVlcGx5IHN1YnN0aXR1dGVkIHR5cGUsIGJ1dCBvbmx5IGZvciB0aGUga2V5cyB0aGF0IGFyZQovLy8gcmVhY2hhYmxlIGZyb20gW3R5cGVdLgovLy8KLy8vIEFzIHdpdGggW3N1YnN0aXR1dGVdLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIHRoZSBzYW1lIGluc3RhbmNlIGlmIG5vCi8vLyBzdWJzdGl0dXRpb24gd2FzIHBlcmZvcm1lZC4KRGFydFR5cGUgc3Vic3RpdHV0ZURlZXAoCiAgICBEYXJ0VHlwZSB0eXBlLCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbikgewogIGlmIChzdWJzdGl0dXRpb24uaXNFbXB0eSkgcmV0dXJuIHR5cGU7CiAgdmFyIHN1YnN0aXR1dG9yID0gbmV3IF9EZWVwVHlwZVN1YnN0aXR1dG9yKHN1YnN0aXR1dGlvbik7CiAgdmFyIHJlc3VsdCA9IHN1YnN0aXR1dG9yLnZpc2l0KHR5cGUpOwogIHJldHVybiBzdWJzdGl0dXRvci5pc0luZmluaXRlID8gbnVsbCA6IHJlc3VsdDsKfQoKLy8vIFJldHVybnMgdHJ1ZSBpZiBbdHlwZV0gY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBnaXZlbiBbdmFyaWFibGVzXS4KLy8vCi8vLyBJdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgd2l0aCBhIFt0eXBlXSB0aGF0IGNvbnRhaW5zIGEgW0Z1bmN0aW9uVHlwZV0KLy8vIHRoYXQgZGVjbGFyZXMgb25lIG9mIHRoZSBwYXJhbWV0ZXJzIGluIFt2YXJpYWJsZXNdLgpib29sIGNvbnRhaW5zVHlwZVZhcmlhYmxlKERhcnRUeXBlIHR5cGUsIFNldDxUeXBlUGFyYW1ldGVyPiB2YXJpYWJsZXMpIHsKICBpZiAodmFyaWFibGVzLmlzRW1wdHkpIHJldHVybiBmYWxzZTsKICByZXR1cm4gbmV3IF9PY2N1cnJlbmNlVmlzaXRvcih2YXJpYWJsZXMpLnZpc2l0KHR5cGUpOwp9CgovLy8gR2l2ZW4gYSBzZXQgb2YgdHlwZSB2YXJpYWJsZXMsIGZpbmRzIGEgc3Vic3RpdHV0aW9uIG9mIHRob3NlIHZhcmlhYmxlcyBzdWNoCi8vLyB0aGF0IHRoZSB0d28gZ2l2ZW4gdHlwZXMgYmVjb21lcyBlcXVhbCwgb3IgcmV0dXJucyBgbnVsbGAgaWYgbm8gc3VjaAovLy8gc3Vic3RpdHV0aW9uIGV4aXN0cy4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgdW5pZnlpbmcgYExpc3Q8VD5gIHdpdGggYExpc3Q8U3RyaW5nPmAsIHdoZXJlIGBUYCBpcyBhCi8vLyBxdWFudGlmaWVkIHZhcmlhYmxlLCB5aWVsZHMgdGhlIHN1YnN0aXR1dGlvbiBgVCA9IFN0cmluZ2AuCi8vLwovLy8gSWYgc3VjY2Vzc2Z1bCwgdGhpcyBlcXVhdGlvbiBob2xkczoKLy8vCi8vLyAgICAgc3Vic3RpdHV0ZSh0eXBlMSwgc3Vic3RpdHV0aW9uKSA9PSBzdWJzdGl0dXRlKHR5cGUyLCBzdWJzdGl0dXRpb24pCi8vLwovLy8gVGhlIHVuaWZpY2F0aW9uIGNhbiBmYWlsIGZvciB0d28gcmVhc29uczoKLy8vIC0gaW5jb21wYXRpYmxlIHR5cGVzLCBlLmcuIGBMaXN0PFQ+YCBjYW5ub3QgYmUgdW5pZmllZCB3aXRoIGBTZXQ8VD5gLgovLy8gLSBpbmZpbml0ZSB0eXBlczogZS5nLiBgVGAgY2Fubm90IGJlIHVuaWZpZWQgd2l0aCBgTGlzdDxUPmAgYmVjYXVzZSBpdAovLy8gICB3b3VsZCBjcmVhdGUgdGhlIGluZmluaXRlIHR5cGUgYExpc3Q8TGlzdDxMaXN0PC4uLj4+PmAuCk1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gdW5pZnlUeXBlcygKICAgIERhcnRUeXBlIHR5cGUxLCBEYXJ0VHlwZSB0eXBlMiwgU2V0PFR5cGVQYXJhbWV0ZXI+IHF1YW50aWZpZWRWYXJpYWJsZXMpIHsKICB2YXIgdW5pZmllciA9IG5ldyBfVHlwZVVuaWZpY2F0aW9uKHR5cGUxLCB0eXBlMiwgcXVhbnRpZmllZFZhcmlhYmxlcyk7CiAgcmV0dXJuIHVuaWZpZXIuc3VjY2VzcyA/IHVuaWZpZXIuc3Vic3RpdHV0aW9uIDogbnVsbDsKfQoKLy8vIEdlbmVyYXRlcyBhIGZyZXNoIGNvcHkgb2YgdGhlIGdpdmVuIHR5cGUgcGFyYW1ldGVycywgd2l0aCB0aGVpciBib3VuZHMKLy8vIHN1YnN0aXR1dGVkIHRvIHJlZmVyZW5jZSB0aGUgbmV3IHBhcmFtZXRlcnMuCi8vLwovLy8gVGhlIHJldHVybmVkIG9iamVjdCBjb250YWlucyB0aGUgZnJlc2ggdHlwZSBwYXJhbWV0ZXIgbGlzdCBhcyB3ZWxsIGFzIGEKLy8vIG1hcHBpbmcgdG8gYmUgdXNlZCBmb3IgcmVwbGFjaW5nIG90aGVyIHR5cGVzIHRvIHVzZSB0aGUgbmV3IHR5cGUgcGFyYW1ldGVycy4KRnJlc2hUeXBlUGFyYW1ldGVycyBnZXRGcmVzaFR5cGVQYXJhbWV0ZXJzKExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpIHsKICB2YXIgZnJlc2hQYXJhbWV0ZXJzID0gbmV3IExpc3Q8VHlwZVBhcmFtZXRlcj4uZ2VuZXJhdGUoCiAgICAgIHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgKGkpID0+IG5ldyBUeXBlUGFyYW1ldGVyKHR5cGVQYXJhbWV0ZXJzW2ldLm5hbWUpLAogICAgICBncm93YWJsZTogdHJ1ZSk7CiAgdmFyIG1hcCA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICBtYXBbdHlwZVBhcmFtZXRlcnNbaV1dID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGZyZXNoUGFyYW1ldGVyc1tpXSk7CiAgfQogIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgIGZyZXNoUGFyYW1ldGVyc1tpXS5ib3VuZCA9IHN1YnN0aXR1dGUodHlwZVBhcmFtZXRlcnNbaV0uYm91bmQsIG1hcCk7CiAgICBmcmVzaFBhcmFtZXRlcnNbaV0uZGVmYXVsdFR5cGUgPSB0eXBlUGFyYW1ldGVyc1tpXS5kZWZhdWx0VHlwZSAhPSBudWxsCiAgICAgICAgPyBzdWJzdGl0dXRlKHR5cGVQYXJhbWV0ZXJzW2ldLmRlZmF1bHRUeXBlLCBtYXApCiAgICAgICAgOiBudWxsOwogIH0KICByZXR1cm4gbmV3IEZyZXNoVHlwZVBhcmFtZXRlcnMoZnJlc2hQYXJhbWV0ZXJzLCBTdWJzdGl0dXRpb24uZnJvbU1hcChtYXApKTsKfQoKY2xhc3MgRnJlc2hUeXBlUGFyYW1ldGVycyB7CiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiBmcmVzaFR5cGVQYXJhbWV0ZXJzOwogIGZpbmFsIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb247CgogIEZyZXNoVHlwZVBhcmFtZXRlcnModGhpcy5mcmVzaFR5cGVQYXJhbWV0ZXJzLCB0aGlzLnN1YnN0aXR1dGlvbik7CgogIEZ1bmN0aW9uVHlwZSBhcHBseVRvRnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlKSA9PiBuZXcgRnVuY3Rpb25UeXBlKAogICAgICB0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLm1hcChzdWJzdGl0dXRlKS50b0xpc3QoKSwKICAgICAgc3Vic3RpdHV0ZSh0eXBlLnJldHVyblR5cGUpLAogICAgICBuYW1lZFBhcmFtZXRlcnM6IHR5cGUubmFtZWRQYXJhbWV0ZXJzLm1hcChzdWJzdGl0dXRlTmFtZWQpLnRvTGlzdCgpLAogICAgICB0eXBlUGFyYW1ldGVyczogZnJlc2hUeXBlUGFyYW1ldGVycywKICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogdHlwZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICB0eXBlZGVmVHlwZToKICAgICAgICAgIHR5cGUudHlwZWRlZlR5cGUgPT0gbnVsbCA/IG51bGwgOiBzdWJzdGl0dXRlKHR5cGUudHlwZWRlZlR5cGUpKTsKCiAgRGFydFR5cGUgc3Vic3RpdHV0ZShEYXJ0VHlwZSB0eXBlKSA9PiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUodHlwZSk7CgogIE5hbWVkVHlwZSBzdWJzdGl0dXRlTmFtZWQoTmFtZWRUeXBlIHR5cGUpID0+CiAgICAgIG5ldyBOYW1lZFR5cGUodHlwZS5uYW1lLCBzdWJzdGl0dXRlKHR5cGUudHlwZSksCiAgICAgICAgICBpc1JlcXVpcmVkOiB0eXBlLmlzUmVxdWlyZWQpOwoKICBTdXBlcnR5cGUgc3Vic3RpdHV0ZVN1cGVyKFN1cGVydHlwZSB0eXBlKSB7CiAgICByZXR1cm4gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVTdXBlcnR5cGUodHlwZSk7CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBMRU1FTlRBVElPTgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFic3RyYWN0IGNsYXNzIFN1YnN0aXR1dGlvbiB7CiAgY29uc3QgU3Vic3RpdHV0aW9uKCk7CgogIHN0YXRpYyBjb25zdCBTdWJzdGl0dXRpb24gZW1wdHkgPSBfTnVsbFN1YnN0aXR1dGlvbi5pbnN0YW5jZTsKCiAgLy8vIFN1YnN0aXR1dGVzIGVhY2ggcGFyYW1ldGVyIHRvIHRoZSB0eXBlIGl0IG1hcHMgdG8gaW4gW21hcF0uCiAgc3RhdGljIFN1YnN0aXR1dGlvbiBmcm9tTWFwKE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gbWFwKSB7CiAgICBpZiAobWFwLmlzRW1wdHkpIHJldHVybiBfTnVsbFN1YnN0aXR1dGlvbi5pbnN0YW5jZTsKICAgIHJldHVybiBuZXcgX01hcFN1YnN0aXR1dGlvbihtYXAsIG1hcCk7CiAgfQoKICBzdGF0aWMgU3Vic3RpdHV0aW9uIGZpbHRlcmVkKFN1YnN0aXR1dGlvbiBzdWIsIFR5cGVQYXJhbWV0ZXJGaWx0ZXIgZmlsdGVyKSB7CiAgICByZXR1cm4gbmV3IF9GaWx0ZXJlZFN1YnN0aXR1dGlvbihzdWIsIGZpbHRlcik7CiAgfQoKICAvLy8gU3Vic3RpdHV0ZXMgYWxsIG9jY3VycmVuY2VzIG9mIHRoZSBnaXZlbiB0eXBlIHBhcmFtZXRlcnMgd2l0aCB0aGUKICAvLy8gY29ycmVzcG9uZGluZyB1cHBlciBvciBsb3dlciBib3VuZCwgZGVwZW5kaW5nIG9uIHRoZSB2YXJpYW5jZSBvZiB0aGUKICAvLy8gY29udGV4dCB3aGVyZSBpdCBvY2N1cnMuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlIHRoZSB0eXBlIGAoVCkgPT4gVGAgd2l0aCB0aGUgYm91bmRzIGBib3R0b20gPDogVCA8OiBudW1gCiAgLy8vIGJlY29tZXMgYChib3R0b20pID0+IG51bWAgKGluIHRoaXMgZXhhbXBsZSwgYG51bWAgaXMgdGhlIHVwcGVyIGJvdW5kLAogIC8vLyBhbmQgYGJvdHRvbWAgaXMgdGhlIGxvd2VyIGJvdW5kKS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIHdheSB0byBvYnRhaW4gYW4gdXBwZXIgYm91bmQgZm9yIGEgdHlwZSB3aGlsZSBlbGltaW5hdGluZyBhbGwKICAvLy8gcmVmZXJlbmNlcyB0byBjZXJ0YWluIHR5cGUgdmFyaWFibGVzLgogIHN0YXRpYyBTdWJzdGl0dXRpb24gZnJvbVVwcGVyQW5kTG93ZXJCb3VuZHMoCiAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gdXBwZXIsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gbG93ZXIpIHsKICAgIGlmICh1cHBlci5pc0VtcHR5ICYmIGxvd2VyLmlzRW1wdHkpIHJldHVybiBfTnVsbFN1YnN0aXR1dGlvbi5pbnN0YW5jZTsKICAgIHJldHVybiBuZXcgX01hcFN1YnN0aXR1dGlvbih1cHBlciwgbG93ZXIpOwogIH0KCiAgLy8vIFN1YnN0aXR1dGVzIHRoZSB0eXBlIHBhcmFtZXRlcnMgb24gdGhlIGNsYXNzIG9mIFtzdXBlcnR5cGVdIHdpdGggdGhlCiAgLy8vIHR5cGUgYXJndW1lbnRzIHByb3ZpZGVkIGluIFtzdXBlcnR5cGVdLgogIHN0YXRpYyBTdWJzdGl0dXRpb24gZnJvbVN1cGVydHlwZShTdXBlcnR5cGUgc3VwZXJ0eXBlKSB7CiAgICBpZiAoc3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgcmV0dXJuIGZyb21NYXAobmV3IE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4uZnJvbUl0ZXJhYmxlcygKICAgICAgICBzdXBlcnR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLCBzdXBlcnR5cGUudHlwZUFyZ3VtZW50cykpOwogIH0KCiAgLy8vIFN1YnN0aXR1dGVzIHRoZSB0eXBlIHBhcmFtZXRlcnMgb24gdGhlIGNsYXNzIG9mIFt0eXBlXSB3aXRoIHRoZQogIC8vLyB0eXBlIGFyZ3VtZW50cyBwcm92aWRlZCBpbiBbdHlwZV0uCiAgc3RhdGljIFN1YnN0aXR1dGlvbiBmcm9tSW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgcmV0dXJuIGZyb21NYXAobmV3IE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4uZnJvbUl0ZXJhYmxlcygKICAgICAgICB0eXBlLmNsYXNzTm9kZS50eXBlUGFyYW1ldGVycywgdHlwZS50eXBlQXJndW1lbnRzKSk7CiAgfQoKICAvLy8gU3Vic3RpdHV0ZXMgdGhlIHR5cGUgcGFyYW1ldGVycyBvbiB0aGUgdHlwZWRlZiBvZiBbdHlwZV0gd2l0aCB0aGUKICAvLy8gdHlwZSBhcmd1bWVudHMgcHJvdmlkZWQgaW4gW3R5cGVdLgogIHN0YXRpYyBTdWJzdGl0dXRpb24gZnJvbVR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgcmV0dXJuIGZyb21NYXAobmV3IE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4uZnJvbUl0ZXJhYmxlcygKICAgICAgICB0eXBlLnR5cGVkZWZOb2RlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlLnR5cGVBcmd1bWVudHMpKTsKICB9CgogIC8vLyBTdWJzdGl0dXRlcyB0aGUgTnRoIHBhcmFtZXRlciBpbiBbcGFyYW1ldGVyc10gd2l0aCB0aGUgTnRoIHR5cGUgaW4KICAvLy8gW3R5cGVzXS4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIGZyb21QYWlycygKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzLCBMaXN0PERhcnRUeXBlPiB0eXBlcykgewogICAgLy8gVE9ETyhhc2dlcmYpOiBJbnZlc3RpZ2F0ZSBpZiBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBpbXBsZW1lbnQKICAgIC8vIHN1YnN0aXR1dGlvbiBiYXNlZCBvbiBwYXJhbGxlbCBwYWlyd2lzZSBsaXN0cyBpbnN0ZWFkIG9mIE1hcHMuCiAgICBhc3NlcnQocGFyYW1ldGVycy5sZW5ndGggPT0gdHlwZXMubGVuZ3RoKTsKICAgIGlmIChwYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBfTnVsbFN1YnN0aXR1dGlvbi5pbnN0YW5jZTsKICAgIHJldHVybiBmcm9tTWFwKAogICAgICAgIG5ldyBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+LmZyb21JdGVyYWJsZXMocGFyYW1ldGVycywgdHlwZXMpKTsKICB9CgogIC8vLyBTdWJzdGl0dXRlcyB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9uIHRoZSBjbGFzcyB3aXRoIGJvdHRvbSBvciBkeW5hbWljLAogIC8vLyBkZXBlbmRpbmcgb24gdGhlIGNvdmFyaWFuY2Ugb2YgaXRzIHVzZS4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIGJvdHRvbUZvckNsYXNzKENsYXNzIGNsYXNzXykgewogICAgaWYgKGNsYXNzXy50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSByZXR1cm4gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2U7CiAgICByZXR1cm4gbmV3IF9DbGFzc0JvdHRvbVN1YnN0aXR1dGlvbihjbGFzc18pOwogIH0KCiAgLy8vIFN1YnN0aXR1dGVzIGNvdmFyaWFudCB1c2VzIG9mIFtjbGFzc19dJ3MgdHlwZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHVwcGVyCiAgLy8vIGJvdW5kIG9mIHRoYXQgdHlwZSBwYXJhbWV0ZXIuICBSZWN1cnNpdmUgcmVmZXJlbmNlcyBpbiB0aGUgYm91bmQgaGF2ZQogIC8vLyBiZWVuIHJlcGxhY2VkIGJ5IGR5bmFtaWMuCiAgc3RhdGljIFN1YnN0aXR1dGlvbiB1cHBlckJvdW5kRm9yQ2xhc3MoQ2xhc3MgY2xhc3NfKSB7CiAgICBpZiAoY2xhc3NfLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBfTnVsbFN1YnN0aXR1dGlvbi5pbnN0YW5jZTsKICAgIHZhciB1cHBlciA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgIGZvciAodmFyIHBhcmFtZXRlciBpbiBjbGFzc18udHlwZVBhcmFtZXRlcnMpIHsKICAgICAgdXBwZXJbcGFyYW1ldGVyXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gY2xhc3NfLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIHVwcGVyW3BhcmFtZXRlcl0gPSBzdWJzdGl0dXRlKHBhcmFtZXRlci5ib3VuZCwgdXBwZXIpOwogICAgfQogICAgcmV0dXJuIGZyb21VcHBlckFuZExvd2VyQm91bmRzKHVwcGVyLCB7fSk7CiAgfQoKICAvLy8gU3Vic3RpdHV0ZXMgYm90aCB2YXJpYWJsZXMgZnJvbSBbZmlyc3RdIGFuZCBbc2Vjb25kXSwgZmF2b3JpbmcgdGhvc2UgZnJvbQogIC8vLyBbZmlyc3RdIGlmIHRoZXkgb3ZlcmxhcC4KICAvLy8KICAvLy8gTmVpdGhlciBzdWJzdGl0dXRpb24gaXMgYXBwbGllZCB0byB0aGUgcmVzdWx0cyBvZiB0aGUgb3RoZXIsIHNvIHRoaXMgZG9lcwogIC8vLyAqbm90KiBjb3JyZXNwb25kIHRvIGEgc2VxdWVuY2Ugb2YgdHdvIHN1YnNpdHV0aW9ucy4gRm9yIGV4YW1wbGUsIGNvbWJpbmluZwogIC8vLyBge1QgLT4gTGlzdDxHPn1gIHdpdGggYHtHIC0+IFN0cmluZ31gIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8KICAvLy8gYHtUIC0+IExpc3Q8U3RyaW5nPn1gIGJlY2F1c2UgdGhlIHJlc3VsdCBmcm9tIHN1YnN0aXR1dGluZyBgVGAgaXMgbm90CiAgLy8vIHNlYXJjaGVkIGZvciBvY2N1cmVuY2VzIG9mIGBHYC4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIGNvbWJpbmUoU3Vic3RpdHV0aW9uIGZpcnN0LCBTdWJzdGl0dXRpb24gc2Vjb25kKSB7CiAgICBpZiAoZmlyc3QgPT0gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2UpIHJldHVybiBzZWNvbmQ7CiAgICBpZiAoc2Vjb25kID09IF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlKSByZXR1cm4gZmlyc3Q7CiAgICByZXR1cm4gbmV3IF9Db21iaW5lZFN1YnN0aXR1dGlvbihmaXJzdCwgc2Vjb25kKTsKICB9CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIGJvb2wgdXBwZXJCb3VuZCk7CgogIERhcnRUeXBlIHN1YnN0aXR1dGVUeXBlKERhcnRUeXBlIG5vZGUsIHtib29sIGNvbnRyYXZhcmlhbnQ6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBfVG9wU3Vic3RpdHV0b3IodGhpcywgY29udHJhdmFyaWFudCkudmlzaXQobm9kZSk7CiAgfQoKICBTdXBlcnR5cGUgc3Vic3RpdHV0ZVN1cGVydHlwZShTdXBlcnR5cGUgbm9kZSkgewogICAgcmV0dXJuIG5ldyBfVG9wU3Vic3RpdHV0b3IodGhpcywgZmFsc2UpLnZpc2l0U3VwZXJ0eXBlKG5vZGUpOwogIH0KfQoKY2xhc3MgX051bGxTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24gewogIHN0YXRpYyBjb25zdCBfTnVsbFN1YnN0aXR1dGlvbiBpbnN0YW5jZSA9IGNvbnN0IF9OdWxsU3Vic3RpdHV0aW9uKCk7CgogIGNvbnN0IF9OdWxsU3Vic3RpdHV0aW9uKCk7CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIGJvb2wgdXBwZXJCb3VuZCkgewogICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVyVHlwZShwYXJhbWV0ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3RpdHV0ZVR5cGUoRGFydFR5cGUgbm9kZSwge2Jvb2wgY29udHJhdmFyaWFudDogZmFsc2V9KSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICBTdXBlcnR5cGUgc3Vic3RpdHV0ZVN1cGVydHlwZShTdXBlcnR5cGUgbm9kZSkgPT4gbm9kZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlN1YnN0aXR1dGlvbi5lbXB0eSI7Cn0KCmNsYXNzIF9NYXBTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24gewogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gdXBwZXI7CiAgZmluYWwgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBsb3dlcjsKCiAgX01hcFN1YnN0aXR1dGlvbih0aGlzLnVwcGVyLCB0aGlzLmxvd2VyKTsKCiAgRGFydFR5cGUgZ2V0U3Vic3RpdHV0ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gdXBwZXJCb3VuZCA/IHVwcGVyW3BhcmFtZXRlcl0gOiBsb3dlcltwYXJhbWV0ZXJdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIl9NYXBTdWJzdGl0dXRpb24oJHVwcGVyLCAkbG93ZXIpIjsKfQoKY2xhc3MgX1RvcFN1YnN0aXR1dG9yIGV4dGVuZHMgX1R5cGVTdWJzdGl0dXRvciB7CiAgZmluYWwgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKCiAgX1RvcFN1YnN0aXR1dG9yKHRoaXMuc3Vic3RpdHV0aW9uLCBib29sIGNvbnRyYXZhcmlhbnQpIDogc3VwZXIobnVsbCkgewogICAgaWYgKGNvbnRyYXZhcmlhbnQpIHsKICAgICAgaW52ZXJ0VmFyaWFuY2UoKTsKICAgIH0KICB9CgogIERhcnRUeXBlIGxvb2t1cChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gc3Vic3RpdHV0aW9uLmdldFN1YnN0aXR1dGUocGFyYW1ldGVyLCB1cHBlckJvdW5kKTsKICB9CgogIFR5cGVQYXJhbWV0ZXIgZnJlc2hUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgdGhyb3cgJ0NyZWF0ZSBhIGZyZXNoIGVudmlyb25tZW50IGZpcnN0JzsKICB9Cn0KCmNsYXNzIF9DbGFzc0JvdHRvbVN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7CiAgZmluYWwgQ2xhc3MgY2xhc3NfOwoKICBfQ2xhc3NCb3R0b21TdWJzdGl0dXRpb24odGhpcy5jbGFzc18pOwoKICBEYXJ0VHlwZSBnZXRTdWJzdGl0dXRlKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpIHsKICAgIGlmIChwYXJhbWV0ZXIucGFyZW50ID09IGNsYXNzXykgewogICAgICByZXR1cm4gdXBwZXJCb3VuZCA/IGNvbnN0IEJvdHRvbVR5cGUoKSA6IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIF9Db21iaW5lZFN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7CiAgZmluYWwgU3Vic3RpdHV0aW9uIGZpcnN0LCBzZWNvbmQ7CgogIF9Db21iaW5lZFN1YnN0aXR1dGlvbih0aGlzLmZpcnN0LCB0aGlzLnNlY29uZCk7CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIGJvb2wgdXBwZXJCb3VuZCkgewogICAgcmV0dXJuIGZpcnN0LmdldFN1YnN0aXR1dGUocGFyYW1ldGVyLCB1cHBlckJvdW5kKSA/PwogICAgICAgIHNlY29uZC5nZXRTdWJzdGl0dXRlKHBhcmFtZXRlciwgdXBwZXJCb3VuZCk7CiAgfQp9Cgp0eXBlZGVmIGJvb2wgVHlwZVBhcmFtZXRlckZpbHRlcihUeXBlUGFyYW1ldGVyIFApOwoKY2xhc3MgX0ZpbHRlcmVkU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHsKICBmaW5hbCBTdWJzdGl0dXRpb24gYmFzZTsKICBmaW5hbCBUeXBlUGFyYW1ldGVyRmlsdGVyIGZpbHRlckZuOwoKICBfRmlsdGVyZWRTdWJzdGl0dXRpb24odGhpcy5iYXNlLCB0aGlzLmZpbHRlckZuKTsKCiAgRGFydFR5cGUgZ2V0U3Vic3RpdHV0ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gZmlsdGVyRm4ocGFyYW1ldGVyKQogICAgICAgID8gYmFzZS5nZXRTdWJzdGl0dXRlKHBhcmFtZXRlciwgdXBwZXJCb3VuZCkKICAgICAgICA6IF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlLmdldFN1YnN0aXR1dGUocGFyYW1ldGVyLCB1cHBlckJvdW5kKTsKICB9Cn0KCmNsYXNzIF9Jbm5lclR5cGVTdWJzdGl0dXRvciBleHRlbmRzIF9UeXBlU3Vic3RpdHV0b3IgewogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwoKICBfSW5uZXJUeXBlU3Vic3RpdHV0b3IoX1R5cGVTdWJzdGl0dXRvciBvdXRlcikgOiBzdXBlcihvdXRlcik7CgogIERhcnRUeXBlIGxvb2t1cChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gc3Vic3RpdHV0aW9uW3BhcmFtZXRlcl07CiAgfQoKICBUeXBlUGFyYW1ldGVyIGZyZXNoVHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIHZhciBmcmVzaCA9IG5ldyBUeXBlUGFyYW1ldGVyKG5vZGUubmFtZSk7CiAgICBzdWJzdGl0dXRpb25bbm9kZV0gPSBuZXcgVHlwZVBhcmFtZXRlclR5cGUoZnJlc2gpOwogICAgZnJlc2guYm91bmQgPSB2aXNpdChub2RlLmJvdW5kKTsKICAgIGlmIChub2RlLmRlZmF1bHRUeXBlICE9IG51bGwpIHsKICAgICAgZnJlc2guZGVmYXVsdFR5cGUgPSB2aXNpdChub2RlLmRlZmF1bHRUeXBlKTsKICAgIH0KICAgIHJldHVybiBmcmVzaDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9UeXBlU3Vic3RpdHV0b3IgZXh0ZW5kcyBEYXJ0VHlwZVZpc2l0b3I8RGFydFR5cGU+IHsKICBmaW5hbCBfVHlwZVN1YnN0aXR1dG9yIG91dGVyOwogIGJvb2wgY292YXJpYW50Q29udGV4dCA9IHRydWU7CgogIF9UeXBlU3Vic3RpdHV0b3IodGhpcy5vdXRlcikgewogICAgY292YXJpYW50Q29udGV4dCA9IG91dGVyID09IG51bGwgPyB0cnVlIDogb3V0ZXIuY292YXJpYW50Q29udGV4dDsKICB9CgogIERhcnRUeXBlIGxvb2t1cChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKTsKCiAgLy8vIFRoZSBudW1iZXIgb2YgdGltZXMgYSB2YXJpYWJsZSBmcm9tIHRoaXMgZW52aXJvbm1lbnQgaGFzIGJlZW4gdXNlZCBpbgogIC8vLyBhIHN1YnN0aXR1dGlvbi4KICAvLy8KICAvLy8gVGhlcmUgaXMgYSBzdHJpY3QgcmVxdWlyZW1lbnQgdGhhdCB3ZSBtdXN0IHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZSBmb3IKICAvLy8gdHlwZXMgdGhhdCB3ZXJlIG5vdCBhbHRlcmVkIGJ5IHRoZSBzdWJzdGl0dXRpb24uICBUaGlzIGNvdW50ZXIgbGV0cyB1cwogIC8vLyBjaGVjayBxdWlja2x5IGlmIGFueXRoaW5nIGhhcHBlbmVkIGluIGEgc3Vic3RpdHV0aW9uLgogIGludCB1c2VDb3VudGVyID0gMDsKCiAgX0lubmVyVHlwZVN1YnN0aXR1dG9yIG5ld0lubmVyRW52aXJvbm1lbnQoKSB7CiAgICByZXR1cm4gbmV3IF9Jbm5lclR5cGVTdWJzdGl0dXRvcih0aGlzKTsKICB9CgogIHZvaWQgaW52ZXJ0VmFyaWFuY2UoKSB7CiAgICBjb3ZhcmlhbnRDb250ZXh0ID0gIWNvdmFyaWFudENvbnRleHQ7CiAgfQoKICBTdXBlcnR5cGUgdmlzaXRTdXBlcnR5cGUoU3VwZXJ0eXBlIG5vZGUpIHsKICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgcmV0dXJuIG5vZGU7CiAgICBpbnQgYmVmb3JlID0gdXNlQ291bnRlcjsKICAgIHZhciB0eXBlQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzLm1hcCh2aXNpdCkudG9MaXN0KCk7CiAgICBpZiAodXNlQ291bnRlciA9PSBiZWZvcmUpIHJldHVybiBub2RlOwogICAgcmV0dXJuIG5ldyBTdXBlcnR5cGUobm9kZS5jbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgTmFtZWRUeXBlIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSB7CiAgICBpbnQgYmVmb3JlID0gdXNlQ291bnRlcjsKICAgIHZhciB0eXBlID0gdmlzaXQobm9kZS50eXBlKTsKICAgIGlmICh1c2VDb3VudGVyID09IGJlZm9yZSkgcmV0dXJuIG5vZGU7CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZShub2RlLm5hbWUsIHR5cGUsIGlzUmVxdWlyZWQ6IG5vZGUuaXNSZXF1aXJlZCk7CiAgfQoKICBEYXJ0VHlwZSB2aXNpdChEYXJ0VHlwZSBub2RlKSA9PiBub2RlLmFjY2VwdCh0aGlzKTsKCiAgRGFydFR5cGUgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBub2RlOwogIERhcnRUeXBlIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gbm9kZTsKICBEYXJ0VHlwZSB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpID0+IG5vZGU7CiAgRGFydFR5cGUgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gbm9kZTsKCiAgRGFydFR5cGUgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gbm9kZTsKICAgIGludCBiZWZvcmUgPSB1c2VDb3VudGVyOwogICAgdmFyIHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHZpc2l0KS50b0xpc3QoKTsKICAgIGlmICh1c2VDb3VudGVyID09IGJlZm9yZSkgcmV0dXJuIG5vZGU7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUobm9kZS5jbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgRGFydFR5cGUgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmlzRW1wdHkpIHJldHVybiBub2RlOwogICAgaW50IGJlZm9yZSA9IHVzZUNvdW50ZXI7CiAgICB2YXIgdHlwZUFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodmlzaXQpLnRvTGlzdCgpOwogICAgaWYgKHVzZUNvdW50ZXIgPT0gYmVmb3JlKSByZXR1cm4gbm9kZTsKICAgIHJldHVybiBuZXcgVHlwZWRlZlR5cGUobm9kZS50eXBlZGVmTm9kZSwgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGZyZXNoVHlwZVBhcmFtZXRlcnMoTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzKSB7CiAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5KSByZXR1cm4gY29uc3QgPFR5cGVQYXJhbWV0ZXI+W107CiAgICByZXR1cm4gcGFyYW1ldGVycy5tYXAoZnJlc2hUeXBlUGFyYW1ldGVyKS50b0xpc3QoKTsKICB9CgogIFR5cGVQYXJhbWV0ZXIgZnJlc2hUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSk7CgogIERhcnRUeXBlIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICAvLyBUaGlzIGlzIGEgYml0IHRyaWNreSBiZWNhdXNlIHdlIGhhdmUgdG8gZ2VuZXJhdGUgZnJlc2ggdHlwZSBwYXJhbWV0ZXJzCiAgICAvLyBpbiBvcmRlciB0byBjaGFuZ2UgdGhlIGJvdW5kcy4gIEF0IHRoZSBzYW1lIHRpbWUsIGlmIHRoZSBmdW5jdGlvbiB0eXBlCiAgICAvLyB3YXMgdW5hbHRlcmVkLCB3ZSBoYXZlIHRvIHJldHVybiB0aGUgW25vZGVdIG9iamVjdCAobm90IGEgY29weSEpLgogICAgLy8gU3Vic3RpdHV0aW5nIGEgdHlwZSBmb3IgYSBmcmVzaCB0eXBlIHZhcmlhYmxlIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aAogICAgLy8gYSAicmVhbCIgc3Vic3RpdHV0aW9uLgogICAgLy8KICAgIC8vIENyZWF0ZSBhbiBpbm5lciBlbnZpcm9ubWVudCB0byBnZW5lcmF0ZSBmcmVzaCB0eXBlIHBhcmFtZXRlcnMuICBUaGUgdXNlCiAgICAvLyBjb3VudGVyIG9uIHRoZSBpbm5lciBlbnZpcm9ubWVudCB0ZWxscyBpZiB0aGUgZnJlc2ggdHlwZSBwYXJhbWV0ZXJzIGhhdmUKICAgIC8vIGFueSB1c2VzLCBidXQgZG9lcyBub3QgdGVsbCBpZiB0aGUgcmVzdWx0aW5nIGZ1bmN0aW9uIHR5cGUgaXMgZGlzdGluY3QuCiAgICAvLyBPdXIgb3duIHVzZSBjb3VudGVyIHdpbGwgZ2V0IGluY3JlbWVudGVkIGlmIHNvbWV0aGluZyBmcm9tIG91cgogICAgLy8gZW52aXJvbm1lbnQgaGFzIGJlZW4gdXNlZCBpbnNpZGUgdGhlIGZ1bmN0aW9uLgogICAgdmFyIGlubmVyID0gbm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5ID8gdGhpcyA6IG5ld0lubmVyRW52aXJvbm1lbnQoKTsKICAgIGludCBiZWZvcmUgPSB0aGlzLnVzZUNvdW50ZXI7CiAgICAvLyBJbnZlcnQgdGhlIHZhcmlhbmNlIHdoZW4gdHJhbnNsYXRpbmcgcGFyYW1ldGVycy4KICAgIGlubmVyLmludmVydFZhcmlhbmNlKCk7CiAgICB2YXIgdHlwZVBhcmFtZXRlcnMgPSBpbm5lci5mcmVzaFR5cGVQYXJhbWV0ZXJzKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgdmFyIHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5pc0VtcHR5CiAgICAgICAgPyBjb25zdCA8RGFydFR5cGU+W10KICAgICAgICA6IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKGlubmVyLnZpc2l0KS50b0xpc3QoKTsKICAgIHZhciBuYW1lZFBhcmFtZXRlcnMgPSBub2RlLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5CiAgICAgICAgPyBjb25zdCA8TmFtZWRUeXBlPltdCiAgICAgICAgOiBub2RlLm5hbWVkUGFyYW1ldGVycy5tYXAoaW5uZXIudmlzaXROYW1lZFR5cGUpLnRvTGlzdCgpOwogICAgaW5uZXIuaW52ZXJ0VmFyaWFuY2UoKTsKICAgIHZhciByZXR1cm5UeXBlID0gaW5uZXIudmlzaXQobm9kZS5yZXR1cm5UeXBlKTsKICAgIERhcnRUeXBlIHR5cGVkZWZUeXBlID0KICAgICAgICBub2RlLnR5cGVkZWZUeXBlID09IG51bGwgPyBudWxsIDogaW5uZXIudmlzaXQobm9kZS50eXBlZGVmVHlwZSk7CiAgICBpZiAodGhpcy51c2VDb3VudGVyID09IGJlZm9yZSkgcmV0dXJuIG5vZGU7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsUGFyYW1ldGVycywgcmV0dXJuVHlwZSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycywKICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgIHR5cGVkZWZUeXBlOiB0eXBlZGVmVHlwZSk7CiAgfQoKICB2b2lkIGJ1bXBDb3VudGVyc1VudGlsKF9UeXBlU3Vic3RpdHV0b3IgdGFyZ2V0KSB7CiAgICB2YXIgbm9kZSA9IHRoaXM7CiAgICB3aGlsZSAobm9kZSAhPSB0YXJnZXQpIHsKICAgICAgKytub2RlLnVzZUNvdW50ZXI7CiAgICAgIG5vZGUgPSBub2RlLm91dGVyOwogICAgfQogICAgKyt0YXJnZXQudXNlQ291bnRlcjsKICB9CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciB2YXJpYWJsZSkgewogICAgdmFyIGVudmlyb25tZW50ID0gdGhpczsKICAgIHdoaWxlIChlbnZpcm9ubWVudCAhPSBudWxsKSB7CiAgICAgIHZhciByZXBsYWNlbWVudCA9IGVudmlyb25tZW50Lmxvb2t1cCh2YXJpYWJsZSwgY292YXJpYW50Q29udGV4dCk7CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgICAgYnVtcENvdW50ZXJzVW50aWwoZW52aXJvbm1lbnQpOwogICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgICAgfQogICAgICBlbnZpcm9ubWVudCA9IGVudmlyb25tZW50Lm91dGVyOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBEYXJ0VHlwZSB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIHJldHVybiBnZXRTdWJzdGl0dXRlKG5vZGUucGFyYW1ldGVyKSA/PyBub2RlOwogIH0KfQoKY2xhc3MgX0RlZXBUeXBlU3Vic3RpdHV0b3IgZXh0ZW5kcyBfSW5uZXJUeXBlU3Vic3RpdHV0b3IgewogIGludCBkZXB0aCA9IDA7CiAgYm9vbCBpc0luZmluaXRlID0gZmFsc2U7CgogIF9EZWVwVHlwZVN1YnN0aXR1dG9yKE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uLAogICAgICBbX0RlZXBUeXBlU3Vic3RpdHV0b3Igb3V0ZXJdKQogICAgICA6IHN1cGVyKG91dGVyKSB7CiAgICB0aGlzLnN1YnN0aXR1dGlvbi5hZGRBbGwoc3Vic3RpdHV0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIF9EZWVwVHlwZVN1YnN0aXR1dG9yIG5ld0lubmVyRW52aXJvbm1lbnQoKSB7CiAgICByZXR1cm4gbmV3IF9EZWVwVHlwZVN1YnN0aXR1dG9yKDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fSwgdGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIERhcnRUeXBlIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0ZShub2RlLnBhcmFtZXRlcik7CiAgICBpZiAocmVwbGFjZW1lbnQgPT0gbnVsbCkgcmV0dXJuIG5vZGU7CiAgICBpZiAoaXNJbmZpbml0ZSkgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgKytkZXB0aDsKICAgIGlmIChkZXB0aCA+IHN1YnN0aXR1dGlvbi5sZW5ndGgpIHsKICAgICAgaXNJbmZpbml0ZSA9IHRydWU7CiAgICAgIC0tZGVwdGg7CiAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgIH0gZWxzZSB7CiAgICAgIHJlcGxhY2VtZW50ID0gdmlzaXQocmVwbGFjZW1lbnQpOwogICAgICAvLyBVcGRhdGUgdHlwZSB0byB0aGUgZnVsbHkgZmxlc2hlZC1vdXQgdHlwZS4KICAgICAgc3Vic3RpdHV0aW9uW25vZGUucGFyYW1ldGVyXSA9IHJlcGxhY2VtZW50OwogICAgICAtLWRlcHRoOwogICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICB9CiAgfQp9CgpjbGFzcyBfVHlwZVVuaWZpY2F0aW9uIHsKICAvLyBBY3ljbGljIGludmFyaWFudDogVGhlcmUgYXJlIG5vIGN5Y2xlcyBpbiB0aGUgbWFwLCB0aGF0IGlzLCBhbGwgdHlwZXMgY2FuCiAgLy8gICBiZSByZXNvbHZlZCB0byBmaW5pdGUgdHlwZXMgYnkgc3Vic3RpdHV0aW5nIGFsbCBjb250YWluZWQgdHlwZSB2YXJpYWJsZXMuCiAgLy8KICAvLyBUaGUgYWN5Y2xpYyBpbnZhcmlhbnQgaG9sZHMgZXZlcnl3aGVyZSBleGNlcHQgZHVyaW5nIGN5Y2xlIGRldGVjdGlvbi4KICAvLwogIC8vIEl0IGlzIG5vdCBjaGVja2VkIHRoYXQgdGhlIHN1YnN0aXR1dGlvbiBzYXRpc2ZpZXMgdGhlIGJvdW5kIG9uIHRoZSB0eXBlCiAgLy8gcGFyYW1ldGVyLgogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwoKICAvLy8gVmFyaWFibGVzIHRoYXQgbWF5IGJlIGFzc2lnbmVkIGZyZWVseSBpbiBvcmRlciB0byBvYnRhaW4gdW5pZmljYXRpb24uCiAgLy8vCiAgLy8vIFRoZXNlIGFyZSBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgZXhpc3RlbnRpYWxseSBxdWFudGlmaWVkIHZhcmlhYmxlcy4KICBmaW5hbCBTZXQ8VHlwZVBhcmFtZXRlcj4gcXVhbnRpZmllZFZhcmlhYmxlczsKCiAgLy8vIFZhcmlhYmxlcyB0aGF0IGFyZSBib3VuZCBieSBhIGZ1bmN0aW9uIHR5cGUgaW5zaWRlIG9uZSBvZiB0aGUgdHlwZXMuCiAgLy8vIFRoZXNlIG1heSBub3Qgb2NjdXIgaW4gYSBzdWJzdGl0dXRpb24sIGJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBub3QgaW4KICAvLy8gc2NvcGUgYXQgdGhlIGV4aXN0ZW50aWFsbHkgcXVhbnRpZmllZCB2YXJpYWJsZXMuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGFyZSB0cnlpbmcgdG8gc2F0aXNmeSB0aGUgZXF1YXRpb246CiAgLy8vCiAgLy8vICAgICDiiINTLiA8RT4oRSwgUykgPT4gRSAgPSAgPEU+KEUsIEUpID0+IEUKICAvLy8KICAvLy8gVGhhdCBpcywgd2UgbXVzdCBjaG9vc2UgYFNgIHN1Y2ggdGhhdCB0aGUgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlCiAgLy8vIGA8RT4oRSwgUykgPT4gRWAgYmVjb21lcyBgPEU+KEUsIEUpID0+IEVgLiAgQ2hvb3NpbmcgYFMgPSBFYCBpcyBub3QgYQogIC8vLyB2YWxpZCBzb2x1dGlvbiwgYmVjYXVzZSBgRWAgaXMgbm90IGluIHNjb3BlIHdoZXJlIGBTYCBpcyBxdWFudGlmaWVkLgogIC8vLyBUaGUgdHdvIGZ1bmN0aW9uIHR5cGVzIGNhbm5vdCBiZSB1bmlmaWVkLgogIGZpbmFsIFNldDxUeXBlUGFyYW1ldGVyPiBfdW5pdmVyc2FsbHlRdWFudGlmaWVkVmFyaWFibGVzID0KICAgICAgbmV3IFNldDxUeXBlUGFyYW1ldGVyPigpOwoKICBib29sIHN1Y2Nlc3MgPSB0cnVlOwoKICBfVHlwZVVuaWZpY2F0aW9uKERhcnRUeXBlIHR5cGUxLCBEYXJ0VHlwZSB0eXBlMiwgdGhpcy5xdWFudGlmaWVkVmFyaWFibGVzKSB7CiAgICBfdW5pZnkodHlwZTEsIHR5cGUyKTsKICAgIGlmIChzdWNjZXNzICYmIHN1YnN0aXR1dGlvbi5sZW5ndGggPj0gMikgewogICAgICBmb3IgKHZhciBrZXkgaW4gc3Vic3RpdHV0aW9uLmtleXMpIHsKICAgICAgICBzdWJzdGl0dXRpb25ba2V5XSA9IHN1YnN0aXR1dGVEZWVwKHN1YnN0aXR1dGlvbltrZXldLCBzdWJzdGl0dXRpb24pOwogICAgICB9CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBfc3Vic3RpdHV0ZUhlYWQoVHlwZVBhcmFtZXRlclR5cGUgdHlwZSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3Vic3RpdHV0aW9uLmxlbmd0aDsgKytpKSB7CiAgICAgIERhcnRUeXBlIG5leHRUeXBlID0gc3Vic3RpdHV0aW9uW3R5cGUucGFyYW1ldGVyXTsKICAgICAgaWYgKG5leHRUeXBlID09IG51bGwpIHJldHVybiB0eXBlOwogICAgICBpZiAobmV4dFR5cGUgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgICB0eXBlID0gbmV4dFR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5leHRUeXBlOwogICAgICB9CiAgICB9CiAgICAvLyBUaGUgY3ljbGUgc2hvdWxkIGhhdmUgYmVlbiBmb3VuZCBieSBfdHJ5U3Vic3RpdHV0aW9uIHdoZW4gdGhlIGN5Y2xlCiAgICAvLyB3YXMgY3JlYXRlZC4KICAgIHRocm93ICdVbmV4cGVjdGVkIGN5Y2xlIGZvdW5kIGR1cmluZyB1bmlmaWNhdGlvbic7CiAgfQoKICBib29sIF91bmlmeShEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIGlmICghc3VjY2VzcykgcmV0dXJuIGZhbHNlOwogICAgdHlwZTEgPSB0eXBlMSBpcyBUeXBlUGFyYW1ldGVyVHlwZSA/IF9zdWJzdGl0dXRlSGVhZCh0eXBlMSkgOiB0eXBlMTsKICAgIHR5cGUyID0gdHlwZTIgaXMgVHlwZVBhcmFtZXRlclR5cGUgPyBfc3Vic3RpdHV0ZUhlYWQodHlwZTIpIDogdHlwZTI7CiAgICBpZiAodHlwZTEgaXMgRHluYW1pY1R5cGUgJiYgdHlwZTIgaXMgRHluYW1pY1R5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUxIGlzIFZvaWRUeXBlICYmIHR5cGUyIGlzIFZvaWRUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmICh0eXBlMSBpcyBJbnZhbGlkVHlwZSAmJiB0eXBlMiBpcyBJbnZhbGlkVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAodHlwZTEgaXMgQm90dG9tVHlwZSAmJiB0eXBlMiBpcyBCb3R0b21UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmICh0eXBlMSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUyIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgaWYgKHR5cGUxLmNsYXNzTm9kZSAhPSB0eXBlMi5jbGFzc05vZGUpIHJldHVybiBfZmFpbCgpOwogICAgICBhc3NlcnQodHlwZTEudHlwZUFyZ3VtZW50cy5sZW5ndGggPT0gdHlwZTIudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUxLnR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAoIV91bmlmeSh0eXBlMS50eXBlQXJndW1lbnRzW2ldLCB0eXBlMi50eXBlQXJndW1lbnRzW2ldKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmICh0eXBlMSBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZTIgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICh0eXBlMS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZTIudHlwZVBhcmFtZXRlcnMubGVuZ3RoIHx8CiAgICAgICAgICB0eXBlMS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggIT0KICAgICAgICAgICAgICB0eXBlMi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggfHwKICAgICAgICAgIHR5cGUxLm5hbWVkUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZTIubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCB8fAogICAgICAgICAgdHlwZTEucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAhPSB0eXBlMi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgcmV0dXJuIF9mYWlsKCk7CiAgICAgIH0KICAgICAgLy8gV2hlbiB1bmlmeWluZyB0d28gZ2VuZXJpYyBmdW5jdGlvbnMsIHRyYW5zZm9ybSB0aGUgZXF1YXRpb24gbGlrZSB0aGlzOgogICAgICAvLwogICAgICAvLyAgICDiiINTLiA8RT4oZm4xKSA9IDxUPihmbjIpCiAgICAgIC8vICAgICAgPT0+CiAgICAgIC8vICAgIOKIg1MuIOKIgEcuIGZuMVtHL0VdID0gZm4yW0cvVF0KICAgICAgLy8KICAgICAgLy8gVGhhdCBpcywgYXNzdW1lIHNvbWUgZml4ZWQgaWRlbnRpY2FsIGNob2ljZSBvZiB0eXBlIHBhcmFtZXRlcnMgZm9yIGJvdGgKICAgICAgLy8gZnVuY3Rpb25zIGFuZCB0cnkgdG8gdW5pZnkgdGhlIGluc3RhbnRpYXRlZCBmdW5jdGlvbiB0eXBlcy4KICAgICAgYXNzZXJ0KCF0eXBlMS50eXBlUGFyYW1ldGVycy5hbnkocXVhbnRpZmllZFZhcmlhYmxlcy5jb250YWlucykpOwogICAgICBhc3NlcnQoIXR5cGUyLnR5cGVQYXJhbWV0ZXJzLmFueShxdWFudGlmaWVkVmFyaWFibGVzLmNvbnRhaW5zKSk7CiAgICAgIHZhciBsZWZ0SW5zdGFuY2UgPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICAgIHZhciByaWdodEluc3RhbmNlID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUxLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGluc3RhbnRpYXRvciA9IG5ldyBUeXBlUGFyYW1ldGVyKHR5cGUxLnR5cGVQYXJhbWV0ZXJzW2ldLm5hbWUpOwogICAgICAgIHZhciBpbnN0YW50aWF0b3JUeXBlID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGluc3RhbnRpYXRvcik7CiAgICAgICAgbGVmdEluc3RhbmNlW3R5cGUxLnR5cGVQYXJhbWV0ZXJzW2ldXSA9IGluc3RhbnRpYXRvclR5cGU7CiAgICAgICAgcmlnaHRJbnN0YW5jZVt0eXBlMi50eXBlUGFyYW1ldGVyc1tpXV0gPSBpbnN0YW50aWF0b3JUeXBlOwogICAgICAgIF91bml2ZXJzYWxseVF1YW50aWZpZWRWYXJpYWJsZXMuYWRkKGluc3RhbnRpYXRvcik7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlMS50eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBsZWZ0ID0gc3Vic3RpdHV0ZSh0eXBlMS50eXBlUGFyYW1ldGVyc1tpXS5ib3VuZCwgbGVmdEluc3RhbmNlKTsKICAgICAgICB2YXIgcmlnaHQgPSBzdWJzdGl0dXRlKHR5cGUyLnR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kLCByaWdodEluc3RhbmNlKTsKICAgICAgICBpZiAoIV91bmlmeShsZWZ0LCByaWdodCkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUxLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGxlZnQgPSBzdWJzdGl0dXRlKHR5cGUxLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLCBsZWZ0SW5zdGFuY2UpOwogICAgICAgIHZhciByaWdodCA9IHN1YnN0aXR1dGUodHlwZTIucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0sIHJpZ2h0SW5zdGFuY2UpOwogICAgICAgIGlmICghX3VuaWZ5KGxlZnQsIHJpZ2h0KSkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZTEubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHR5cGUxLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lICE9IHR5cGUyLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZhciBsZWZ0ID0gc3Vic3RpdHV0ZSh0eXBlMS5uYW1lZFBhcmFtZXRlcnNbaV0udHlwZSwgbGVmdEluc3RhbmNlKTsKICAgICAgICB2YXIgcmlnaHQgPSBzdWJzdGl0dXRlKHR5cGUyLm5hbWVkUGFyYW1ldGVyc1tpXS50eXBlLCByaWdodEluc3RhbmNlKTsKICAgICAgICBpZiAoIV91bmlmeShsZWZ0LCByaWdodCkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgbGVmdFJldHVybiA9IHN1YnN0aXR1dGUodHlwZTEucmV0dXJuVHlwZSwgbGVmdEluc3RhbmNlKTsKICAgICAgdmFyIHJpZ2h0UmV0dXJuID0gc3Vic3RpdHV0ZSh0eXBlMi5yZXR1cm5UeXBlLCByaWdodEluc3RhbmNlKTsKICAgICAgaWYgKCFfdW5pZnkobGVmdFJldHVybiwgcmlnaHRSZXR1cm4pKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHR5cGUxIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgdHlwZTIgaXMgVHlwZVBhcmFtZXRlclR5cGUgJiYKICAgICAgICB0eXBlMS5wYXJhbWV0ZXIgPT0gdHlwZTIucGFyYW1ldGVyKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHR5cGUxIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgcXVhbnRpZmllZFZhcmlhYmxlcy5jb250YWlucyh0eXBlMS5wYXJhbWV0ZXIpKSB7CiAgICAgIHJldHVybiBfdHJ5U3Vic3RpdHV0aW9uKHR5cGUxLnBhcmFtZXRlciwgdHlwZTIpOwogICAgfQogICAgaWYgKHR5cGUyIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgcXVhbnRpZmllZFZhcmlhYmxlcy5jb250YWlucyh0eXBlMi5wYXJhbWV0ZXIpKSB7CiAgICAgIHJldHVybiBfdHJ5U3Vic3RpdHV0aW9uKHR5cGUyLnBhcmFtZXRlciwgdHlwZTEpOwogICAgfQogICAgcmV0dXJuIF9mYWlsKCk7CiAgfQoKICBib29sIF90cnlTdWJzdGl0dXRpb24oVHlwZVBhcmFtZXRlciB2YXJpYWJsZSwgRGFydFR5cGUgdHlwZSkgewogICAgaWYgKGNvbnRhaW5zVHlwZVZhcmlhYmxlKHR5cGUsIF91bml2ZXJzYWxseVF1YW50aWZpZWRWYXJpYWJsZXMpKSB7CiAgICAgIHJldHVybiBfZmFpbCgpOwogICAgfQogICAgLy8gU2V0IHRoZSBwbGFpbiBzdWJzdGl0dXRpb24gZmlyc3QgYW5kIHRoZW4gZ2VuZXJhdGUgdGhlIGRlZXAKICAgIC8vIHN1YnN0aXR1dGlvbiB0byBkZXRlY3QgY3ljbGVzLgogICAgc3Vic3RpdHV0aW9uW3ZhcmlhYmxlXSA9IHR5cGU7CiAgICBEYXJ0VHlwZSBkZWVwU3Vic3RpdHV0ZSA9IHN1YnN0aXR1dGVEZWVwKHR5cGUsIHN1YnN0aXR1dGlvbik7CiAgICBpZiAoZGVlcFN1YnN0aXR1dGUgPT0gbnVsbCkgcmV0dXJuIF9mYWlsKCk7CiAgICBzdWJzdGl0dXRpb25bdmFyaWFibGVdID0gZGVlcFN1YnN0aXR1dGU7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgX2ZhaWwoKSB7CiAgICByZXR1cm4gc3VjY2VzcyA9IGZhbHNlOwogIH0KfQoKY2xhc3MgX09jY3VycmVuY2VWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBmaW5hbCBTZXQ8VHlwZVBhcmFtZXRlcj4gdmFyaWFibGVzOwoKICBfT2NjdXJyZW5jZVZpc2l0b3IodGhpcy52YXJpYWJsZXMpOwoKICBib29sIHZpc2l0KERhcnRUeXBlIG5vZGUpID0+IG5vZGUuYWNjZXB0KHRoaXMpOwoKICBib29sIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSB7CiAgICByZXR1cm4gdmlzaXQobm9kZS50eXBlKTsKICB9CgogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIHJldHVybiBub2RlLnR5cGVBcmd1bWVudHMuYW55KHZpc2l0KTsKICB9CgogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS50eXBlQXJndW1lbnRzLmFueSh2aXNpdCk7CiAgfQoKICBib29sIHZpc2l0RnVuY3Rpb25UeXBl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bnQuZGFydCcKICAgIHNob3cgSGllcmFyY2h5QmFzZWRUeXBlRW52aXJvbm1lbnQ7Cgp0eXBlZGVmIHZvaWQgRXJyb3JIYW5kbGVyKFRyZWVOb2RlIG5vZGUsIFN0cmluZyBtZXNzYWdlKTsKCmFic3RyYWN0IGNsYXNzIFR5cGVFbnZpcm9ubWVudCBleHRlbmRzIFN1YnR5cGVUZXN0ZXIgewogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CgogIEludGVyZmFjZVR5cGUgdGhpc1R5cGU7CgogIERhcnRUeXBlIHJldHVyblR5cGU7CiAgRGFydFR5cGUgeWllbGRUeXBlOwogIEFzeW5jTWFya2VyIGN1cnJlbnRBc3luY01hcmtlciA9IEFzeW5jTWFya2VyLlN5bmM7CgogIC8vLyBBbiBlcnJvciBoYW5kbGVyIGZvciB1c2UgaW4gZGVidWdnaW5nLCBvciBgbnVsbGAgaWYgdHlwZSBlcnJvcnMgc2hvdWxkIG5vdAogIC8vLyBiZSB0b2xlcmF0ZWQuICBTZWUgW3R5cGVFcnJvcl0uCiAgRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlcjsKCiAgVHlwZUVudmlyb25tZW50LmZyb21TdWJjbGFzcyh0aGlzLmNvcmVUeXBlcyk7CgogIGZhY3RvcnkgVHlwZUVudmlyb25tZW50KENvcmVUeXBlcyBjb3JlVHlwZXMsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgcmV0dXJuIG5ldyBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudChjb3JlVHlwZXMsIGhpZXJhcmNoeSk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIGdldCBvYmplY3RUeXBlID0+IGNvcmVUeXBlcy5vYmplY3RDbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IG51bGxUeXBlID0+IGNvcmVUeXBlcy5udWxsQ2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBib29sVHlwZSA9PiBjb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgaW50VHlwZSA9PiBjb3JlVHlwZXMuaW50Q2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBudW1UeXBlID0+IGNvcmVUeXBlcy5udW1DbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IGRvdWJsZVR5cGUgPT4gY29yZVR5cGVzLmRvdWJsZUNsYXNzLnJhd1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgc3RyaW5nVHlwZSA9PiBjb3JlVHlwZXMuc3RyaW5nQ2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBzeW1ib2xUeXBlID0+IGNvcmVUeXBlcy5zeW1ib2xDbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHR5cGVUeXBlID0+IGNvcmVUeXBlcy50eXBlQ2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCByYXdGdW5jdGlvblR5cGUgPT4gY29yZVR5cGVzLmZ1bmN0aW9uQ2xhc3MucmF3VHlwZTsKCiAgQ2xhc3MgZ2V0IGludENsYXNzID0+IGNvcmVUeXBlcy5pbnRDbGFzczsKICBDbGFzcyBnZXQgbnVtQ2xhc3MgPT4gY29yZVR5cGVzLm51bUNsYXNzOwogIENsYXNzIGdldCBmdXR1cmVPckNsYXNzID0+IGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzOwoKICBJbnRlcmZhY2VUeXBlIGxpdGVyYWxMaXN0VHlwZShEYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNvcmVUeXBlcy5saXN0Q2xhc3MsIDxEYXJ0VHlwZT5bZWxlbWVudFR5cGVdKTsKICB9CgogIEludGVyZmFjZVR5cGUgbGl0ZXJhbFNldFR5cGUoRGFydFR5cGUgZWxlbWVudFR5cGUpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMuc2V0Q2xhc3MsIDxEYXJ0VHlwZT5bZWxlbWVudFR5cGVdKTsKICB9CgogIEludGVyZmFjZVR5cGUgbGl0ZXJhbE1hcFR5cGUoRGFydFR5cGUga2V5LCBEYXJ0VHlwZSB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNvcmVUeXBlcy5tYXBDbGFzcywgPERhcnRUeXBlPltrZXksIHZhbHVlXSk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIGl0ZXJhYmxlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MsIDxEYXJ0VHlwZT5bdHlwZV0pOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBzdHJlYW1UeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMuc3RyZWFtQ2xhc3MsIDxEYXJ0VHlwZT5bdHlwZV0pOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMuZnV0dXJlQ2xhc3MsIDxEYXJ0VHlwZT5bdHlwZV0pOwogIH0KCiAgLy8vIFJlbW92ZXMgYSBsZXZlbCBvZiBgRnV0dXJlPD5gIHR5cGVzIHdyYXBwaW5nIGEgdHlwZS4KICAvLy8KICAvLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbiBgZmxhdHRlbmAgZnJvbSB0aGUgc3BlYywgd2hpY2ggdW53cmFwcyBhCiAgLy8vIGxheWVyIG9mIEZ1dHVyZSBvciBGdXR1cmVPciBmcm9tIGEgdHlwZS4KICBEYXJ0VHlwZSB1bmZ1dHVyZVR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAodHlwZS5jbGFzc05vZGUgPT0gY29yZVR5cGVzLmZ1dHVyZU9yQ2xhc3MgfHwKICAgICAgICAgIHR5cGUuY2xhc3NOb2RlID09IGNvcmVUeXBlcy5mdXR1cmVDbGFzcykgewogICAgICAgIHJldHVybiB0eXBlLnR5cGVBcmd1bWVudHNbMF07CiAgICAgIH0KICAgICAgLy8gSXQgaXMgYSBjb21waWxlLXRpbWUgZXJyb3IgdG8gaW1wbGVtZW50LCBleHRlbmQsIG9yIG1peGluIEZ1dHVyZU9yIHNvCiAgICAgIC8vIHdlIGFyZW4ndCBjb25jZXJuZWQgd2l0aCBpdC4gIElmIGEgY2xhc3MgaW1wbGVtZW50cyBtdWx0aXBsZQogICAgICAvLyBpbnN0YW50aWF0aW9ucyBvZiBGdXR1cmUsIGdldFR5cGVBc0luc3RhbmNlT2YgaXMgcmVzcG9uc2libGUgZm9yCiAgICAgIC8vIHBpY2tpbmcgdGhlIGxlYXN0IG9uZSBpbiB0aGUgc2Vuc2UgcmVxdWlyZWQgYnkgdGhlIHNwZWMuCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlID0gZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlLCBjb3JlVHlwZXMuZnV0dXJlQ2xhc3MpOwogICAgICBpZiAoZnV0dXJlICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gZnV0dXJlLnR5cGVBcmd1bWVudHNbMF07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0eXBlOwogIH0KCiAgLy8vIENhbGxlZCBpZiB0aGUgY29tcHV0YXRpb24gb2YgYSBzdGF0aWMgdHlwZSBmYWlsZWQgZHVlIHRvIGEgdHlwZSBlcnJvci4KICAvLy8KICAvLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHByb2R1Y3Rpb24uICBUaGUgZnJvbnRlbmQgc2hvdWxkIHJlcG9ydCB0eXBlCiAgLy8vIGVycm9ycywgYW5kIGVpdGhlciByZWNvdmVyIGZyb20gdGhlIGVycm9yIGR1cmluZyB0cmFuc2xhdGlvbiBvciBhYm9ydAogIC8vLyBjb21waWxhdGlvbiBpZiB1bmFibGUgdG8gcmVjb3Zlci4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCwgdGhpcyB0aHJvd3MgYW4gZXhjZXB0aW9uLCBzaW5jZSBwcm9ncmFtcyBpbiBrZXJuZWwgYXJlIGFzc3VtZWQKICAvLy8gdG8gYmUgY29ycmVjdGx5IHR5cGVkLgogIC8vLwogIC8vLyBBbiBbZXJyb3JIYW5kbGVyXSBtYXkgYmUgcHJvdmlkZWQgaW4gb3JkZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKICAvLy8gYmVoYXZpb3IgYW5kIHRvbGVyYXRlIHRoZSBwcmVzZW5jZSBvZiB0eXBlIGVycm9ycy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IKICAvLy8gZGVidWdnaW5nIElSIHByb2R1Y2VycyB3aGljaCBhcmUgcmVxdWlyZWQgdG8gcHJvZHVjZSBhIHN0cm9uZ2x5IHR5cGVkIElSLgogIHZvaWQgdHlwZUVycm9yKFRyZWVOb2RlIG5vZGUsIFN0cmluZyBtZXNzYWdlKSB7CiAgICBpZiAoZXJyb3JIYW5kbGVyICE9IG51bGwpIHsKICAgICAgZXJyb3JIYW5kbGVyKG5vZGUsIG1lc3NhZ2UpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJyRtZXNzYWdlIGluICRub2RlJzsKICAgIH0KICB9CgogIC8vLyBUcnVlIGlmIFttZW1iZXJdIGlzIGEgYmluYXJ5IG9wZXJhdG9yIHRoYXQgcmV0dXJucyBhbiBgaW50YCBpZiBib3RoCiAgLy8vIG9wZXJhbmRzIGFyZSBgaW50YCwgYW5kIG90aGVyd2lzZSByZXR1cm5zIGBkb3VibGVgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY2FzZSBvZiB0eXBlLWJhc2VkIG92ZXJsb2FkaW5nLCB3aGljaCBpbiBEYXJ0IGlzIG9ubHkgc3VwcG9ydGVkCiAgLy8vIGJ5IGdpdmluZyBzcGVjaWFsIHRyZWF0bWVudCB0byBjZXJ0YWluIGFyaXRobWV0aWMgb3BlcmF0b3JzLgogIGJvb2wgaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKFByb2NlZHVyZSBtZW1iZXIpIHsKICAgIENsYXNzIGNsYXNzXyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgIGlmIChjbGFzc18gPT0gY29yZVR5cGVzLmludENsYXNzIHx8IGNsYXNzXyA9PSBjb3JlVHlwZXMubnVtQ2xhc3MpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBtZW1iZXIubmFtZS5uYW1lOwogICAgICByZXR1cm4gbmFtZSA9PSAnKycgfHwKICAgICAgICAgIG5hbWUgPT0gJy0nIHx8CiAgICAgICAgICBuYW1lID09ICcqJyB8fAogICAgICAgICAgbmFtZSA9PSAncmVtYWluZGVyJyB8fAogICAgICAgICAgbmFtZSA9PSAnJSc7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc3RhdGljIHJldHVybiB0eXBlIG9mIGFuIG92ZXJsb2FkZWQgYXJpdGhtZXRpYyBvcGVyYXRvcgogIC8vLyAoc2VlIFtpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3JdKSBnaXZlbiB0aGUgc3RhdGljIHR5cGUgb2YgdGhlCiAgLy8vIG9wZXJhbmRzLgogIC8vLwogIC8vLyBJZiBib3RoIHR5cGVzIGFyZSBgaW50YCwgdGhlIHJldHVybmVkIHR5cGUgaXMgYGludGAuCiAgLy8vIElmIGVpdGhlciB0eXBlIGlzIGBkb3VibGVgLCB0aGUgcmV0dXJuZWQgdHlwZSBpcyBgZG91YmxlYC4KICAvLy8gSWYgYm90aCB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0eXBlIHZhcmlhYmxlICh0eXBpY2FsbHkgd2l0aCBgbnVtYCBhcwogIC8vLyB0aGUgdXBwZXIgYm91bmQpLCB0aGVuIHRoYXQgdHlwZSB2YXJpYWJsZSBpcyByZXR1cm5lZC4KICAvLy8gT3RoZXJ3aXNlIGBudW1gIGlzIHJldHVybmVkLgogIERhcnRUeXBlIGdldFR5cGVPZk92ZXJsb2FkZWRBcml0aG1ldGljKERhcnRUeXBlIHR5cGUxLCBEYXJ0VHlwZSB0eXBlMikgewogICAgaWYgKHR5cGUxID09IHR5cGUyKSByZXR1cm4gdHlwZTE7CiAgICBpZiAodHlwZTEgPT0gZG91YmxlVHlwZSB8fCB0eXBlMiA9PSBkb3VibGVUeXBlKSByZXR1cm4gZG91YmxlVHlwZTsKICAgIHJldHVybiBudW1UeXBlOwogIH0KfQoKLy8vIFRoZSBwYXJ0IG9mIFtUeXBlRW52aXJvbm1lbnRdIHRoYXQgZGVhbHMgd2l0aCBzdWJ0eXBlIHRlc3RzLgovLy8KLy8vIFRoaXMgbGl2ZXMgaW4gYSBzZXBhcmF0ZSBjbGFzcyBzbyBpdCBjYW4gYmUgdGVzdGVkIGluZGVwZW5kZW50bHkgb2YgdGhlIFNESy4KYWJzdHJhY3QgY2xhc3MgU3VidHlwZVRlc3RlciB7CiAgSW50ZXJmYWNlVHlwZSBnZXQgb2JqZWN0VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBudWxsVHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCByYXdGdW5jdGlvblR5cGU7CiAgQ2xhc3MgZ2V0IGZ1dHVyZU9yQ2xhc3M7CiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKERhcnRUeXBlIHR5cGUpOwoKICBzdGF0aWMgTGlzdDxPYmplY3Q+IHR5cGVDaGVja3M7CgogIEludGVyZmFjZVR5cGUgZ2V0VHlwZUFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpOwoKICAvLy8gRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyBhdCB0aGUgdG9wIG9mIHRoZSB0eXBlIGhpZXJhcmNoeS4gIE1heSBiZQogIC8vLyBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMuCiAgYm9vbCBpc1RvcChEYXJ0VHlwZSB0eXBlKSA9PgogICAgICB0eXBlIGlzIER5bmFtaWNUeXBlIHx8IHR5cGUgaXMgVm9pZFR5cGUgfHwgdHlwZSA9PSBvYmplY3RUeXBlOwoKICAvLy8gQ2FuIGJlIHVzZSB0byBjb2xsZWN0IHR5cGUgY2hlY2tzLiBUbyB1c2U6CiAgLy8vIDEuIFJlbmFtZSBgaXNTdWJ0eXBlT2ZgIHRvIGBfaXNTdWJ0eXBlT2ZgLgogIC8vLyAyLiBSZW5hbWUgYF9jb2xsZWN0X2lzU3VidHlwZU9mYCB0byBgaXNTdWJ0eXBlT2ZgLgogIC8vLyAzLiBDb21tZW50IG91dCB0aGUgY2FsbCB0byBgX2lzU3VidHlwZU9mYCBiZWxvdy4KICAvLyBpZ25vcmU6dW51c2VkX2VsZW1lbnQKICBib29sIF9jb2xsZWN0X2lzU3VidHlwZU9mKERhcnRUeXBlIHN1YnR5cGUsIERhcnRUeXBlIHN1cGVydHlwZSkgewogICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgLy8gcmVzdWx0ID0gX2lzU3VidHlwZU9mKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgICB0eXBlQ2hlY2tzID8/PSA8T2JqZWN0PltdOwogICAgdHlwZUNoZWNrcy5hZGQoW3N1YnR5cGUsIHN1cGVydHlwZSwgcmVzdWx0XSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBbc3VidHlwZV0gaXMgYSBzdWJ0eXBlIG9mIFtzdXBlcnR5cGVdLgogIGJvb2wgaXNTdWJ0eXBlT2YoRGFydFR5cGUgc3VidHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlKSB7CiAgICBzdWJ0eXBlID0gc3VidHlwZS51bmFsaWFzOwogICAgc3VwZXJ0eXBlID0gc3VwZXJ0eXBlLnVuYWxpYXM7CiAgICBpZiAoaWRlbnRpY2FsKHN1YnR5cGUsIHN1cGVydHlwZSkpIHJldHVybiB0cnVlOwogICAgaWYgKHN1YnR5cGUgaXMgQm90dG9tVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAoc3VidHlwZSA9PSBudWxsVHlwZSkgewogICAgICAvLyBTZWUgcnVsZSA0IG9mIHRoZSBzdWJ0eXBlIHJ1bGVzIGZyb20gdGhlIERhcnQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICAgICAgcmV0dXJuIHN1cGVydHlwZSBpcyEgQm90dG9tVHlwZTsKICAgIH0KICAgIGlmIChpc1RvcChzdXBlcnR5cGUpKSByZXR1cm4gdHJ1ZTsKCiAgICAvLyBIYW5kbGUgRnV0dXJlT3I8VD4gdW5pb24gdHlwZS4KICAgIGlmIChzdWJ0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICBpZGVudGljYWwoc3VidHlwZS5jbGFzc05vZGUsIGZ1dHVyZU9yQ2xhc3MpKSB7CiAgICAgIHZhciBzdWJ0eXBlQXJnID0gc3VidHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICBpZiAoc3VwZXJ0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAgIHZhciBzdXBlcnR5cGVBcmcgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgICAvLyBGdXR1cmVPcjxBPiA8OiBGdXR1cmVPcjxCPiBpZmYgQSA8OiBCCiAgICAgICAgcmV0dXJuIGlzU3VidHlwZU9mKHN1YnR5cGVBcmcsIHN1cGVydHlwZUFyZyk7CiAgICAgIH0KCiAgICAgIC8vIGdpdmVuIHQxIGlzIEZ1dHVyZTxBPiB8IEEsIHRoZW46CiAgICAgIC8vIChGdXR1cmU8QT4gfCBBKSA8OiB0MiBpZmYgRnV0dXJlPEE+IDw6IHQyIGFuZCBBIDw6IHQyLgogICAgICB2YXIgc3VidHlwZUZ1dHVyZSA9IGZ1dHVyZVR5cGUoc3VidHlwZUFyZyk7CiAgICAgIHJldHVybiBpc1N1YnR5cGVPZihzdWJ0eXBlRnV0dXJlLCBzdXBlcnR5cGUpICYmCiAgICAgICAgICBpc1N1YnR5cGVPZihzdWJ0eXBlQXJnLCBzdXBlcnR5cGUpOwogICAgfQoKICAgIGlmIChzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAvLyBnaXZlbiB0MiBpcyBGdXR1cmU8QT4gfCBBLCB0aGVuOgogICAgICAvLyB0MSA8OiAoRnV0dXJlPEE+IHwgQSkgaWZmIHQxIDw6IEZ1dHVyZTxBPiBvciB0MSA8OiBBCiAgICAgIHZhciBzdXBlcnR5cGVBcmcgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgdmFyIHN1cGVydHlwZUZ1dHVyZSA9IGZ1dHVyZVR5cGUoc3VwZXJ0eXBlQXJnKTsKICAgICAgcmV0dXJuIGlzU3VidHlwZU9mKHN1YnR5cGUsIHN1cGVydHlwZUZ1dHVyZSkgfHwKICAgICAgICAgIGlzU3VidHlwZU9mKHN1YnR5cGUsIHN1cGVydHlwZUFyZyk7CiAgICB9CgogICAgaWYgKHN1YnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB2YXIgdXBjYXN0VHlwZSA9IGdldFR5cGVBc0luc3RhbmNlT2Yoc3VidHlwZSwgc3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICAgIGlmICh1cGNhc3RUeXBlID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1cGNhc3RUeXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAvLyBUZXJtaW5hdGlvbjogdGhlICdzdXBlcnR5cGUnIHBhcmFtZXRlciBkZWNyZWFzZXMgaW4gc2l6ZS4KICAgICAgICBpZiAoIWlzU3VidHlwZU9mKAogICAgICAgICAgICB1cGNhc3RUeXBlLnR5cGVBcmd1bWVudHNbaV0sIHN1cGVydHlwZS50eXBlQXJndW1lbnRzW2ldKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChzdWJ0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIGlmIChzdXBlcnR5cGUgaXMgVHlwZVBhcmFtZXRlclR5cGUgJiYKICAgICAgICAgIHN1YnR5cGUucGFyYW1ldGVyID09IHN1cGVydHlwZS5wYXJhbWV0ZXIpIHsKICAgICAgICBpZiAoc3VwZXJ0eXBlLnByb21vdGVkQm91bmQgIT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIGlzU3VidHlwZU9mKHN1YnR5cGUuYm91bmQsIHN1cGVydHlwZS5ib3VuZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFByb21vdGVkIGJvdW5kIHNob3VsZCBhbHdheXMgYmUgYSBzdWJ0eXBlIG9mIHRoZSBkZWNsYXJlZCBib3VuZC4KICAgICAgICAgIGFzc2VydChzdWJ0eXBlLnByb21vdGVkQm91bmQgPT0gbnVsbCB8fAogICAgICAgICAgICAgIGlzU3VidHlwZU9mKHN1YnR5cGUuYm91bmQsIHN1cGVydHlwZS5ib3VuZCkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFRlcm1pbmF0aW9uOiBpZiB0aGVyZSBhcmUgbm8gY3ljbGljYWxseSBib3VuZCB0eXBlIHBhcmFtZXRlcnMsIHRoaXMKICAgICAgLy8gcmVjdXJzaXZlIGNhbGwgY2FuIG9ubHkgb2NjdXIgYSBmaW5pdGUgbnVtYmVyIG9mIHRpbWVzLCBiZWZvcmUgcmVhY2hpbmcKICAgICAgLy8gYSBzaHJpbmtpbmcgcmVjdXJzaXZlIGNhbGwgKG9yIHRlcm1pbmF0aW5nKS4KICAgICAgcmV0dXJuIGlzU3VidHlwZU9mKHN1YnR5cGUuYm91bmQsIHN1cGVydHlwZSk7CiAgICB9CiAgICBpZiAoc3VidHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgaWYgKHN1cGVydHlwZSA9PSByYXdGdW5jdGlvblR5cGUpIHJldHVybiB0cnVlOwogICAgICBpZiAoc3VwZXJ0eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgIHJldHVybiBfaXNGdW5jdGlvblN1YnR5cGVPZihzdWJ0eXBlLCBzdXBlcnR5cGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIF9pc0Z1bmN0aW9uU3VidHlwZU9mKEZ1bmN0aW9uVHlwZSBzdWJ0eXBlLCBGdW5jdGlvblR5cGUgc3VwZXJ0eXBlKSB7CiAgICBpZiAoc3VidHlwZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID4gc3VwZXJ0eXBlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHN1YnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoIDwKICAgICAgICBzdXBlcnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzdWJ0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSBzdXBlcnR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzdWJ0eXBlLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgdmFyIHN1YnN0aXR1dGlvbiA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdWJ0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIHN1YlBhcmFtZXRlciA9IHN1YnR5cGUudHlwZVBhcmFtZXRlcnNbaV07CiAgICAgICAgdmFyIHN1cGVyUGFyYW1ldGVyID0gc3VwZXJ0eXBlLnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIHN1YnN0aXR1dGlvbltzdWJQYXJhbWV0ZXJdID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHN1cGVyUGFyYW1ldGVyKTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1YnR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgc3ViUGFyYW1ldGVyID0gc3VidHlwZS50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICB2YXIgc3VwZXJQYXJhbWV0ZXIgPSBzdXBlcnR5cGUudHlwZVBhcmFtZXRlcnNbaV07CiAgICAgICAgdmFyIHN1YkJvdW5kID0gc3Vic3RpdHV0ZShzdWJQYXJhbWV0ZXIuYm91bmQsIHN1YnN0aXR1dGlvbik7CiAgICAgICAgLy8gVGVybWluYXRpb246IGlmIHRoZXJlIGFyZSBubyBjeWNsaWNhbGx5IGJvdW5kIHR5cGUgcGFyYW1ldGVycywgdGhpcwogICAgICAgIC8vIHJlY3Vyc2l2ZSBjYWxsIGNhbiBvbmx5IG9jY3VyIGEgZmluaXRlIG51bWJlciBvZiB0aW1lcyBiZWZvcmUKICAgICAgICAvLyByZWFjaGluZyBhIHNocmlua2luZyByZWN1cnNpdmUgY2FsbCAob3IgdGVybWluYXRpbmcpLgogICAgICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBSZXBsYWNlIGl0IHdpdGggb25lIHJlY3Vyc2l2ZSBkZXNjZW50IGluc3RlYWQgb2YgdHdvLgogICAgICAgIGlmICghaXNTdWJ0eXBlT2Yoc3VwZXJQYXJhbWV0ZXIuYm91bmQsIHN1YkJvdW5kKSB8fAogICAgICAgICAgICAhaXNTdWJ0eXBlT2Yoc3ViQm91bmQsIHN1cGVyUGFyYW1ldGVyLmJvdW5kKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBzdWJ0eXBlID0gc3Vic3RpdHV0ZShzdWJ0eXBlLndpdGhvdXRUeXBlUGFyYW1ldGVycywgc3Vic3RpdHV0aW9uKTsKICAgIH0KICAgIGlmICghaXNTdWJ0eXBlT2Yoc3VidHlwZS5yZXR1cm5UeXBlLCBzdXBlcnR5cGUucmV0dXJuVHlwZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdXBlcnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIHN1cGVydHlwZVBhcmFtZXRlciA9IHN1cGVydHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgdmFyIHN1YnR5cGVQYXJhbWV0ZXIgPSBzdWJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAvLyBUZXJtaW5hdGlvbjogQm90aCB0eXBlcyBzaHJpbmsgaW4gc2l6ZS4KICAgICAgaWYgKCFpc1N1YnR5cGVPZihzdXBlcnR5cGVQYXJhbWV0ZXIsIHN1YnR5cGVQYXJhbWV0ZXIpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpbnQgc3VidHlwZU5hbWVJbmRleCA9IDA7CiAgICBmb3IgKE5hbWVkVHlwZSBzdXBlcnR5cGVQYXJhbWV0ZXIgaW4gc3VwZXJ0eXBlLm5hbWVkUGFyYW1ldGVycykgewogICAgICB3aGlsZSAoc3VidHlwZU5hbWVJbmRleCA8IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAmJgogICAgICAgICAgc3VidHlwZS5uYW1lZFBhcmFtZXRlcnNbc3VidHlwZU5hbWVJbmRleF0ubmFtZSAhPQogICAgICAgICAgICAgIHN1cGVydHlwZVBhcmFtZXRlci5uYW1lKSB7CiAgICAgICAgKytzdWJ0eXBlTmFtZUluZGV4OwogICAgICB9CiAgICAgIGlmIChzdWJ0eXBlTmFtZUluZGV4ID09IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICBOYW1lZFR5cGUgc3VidHlwZVBhcmFtZXRlciA9IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzW3N1YnR5cGVOYW1lSW5kZXhdOwogICAgICAvLyBUZXJtaW5hdGlvbjogQm90aCB0eXBlcyBzaHJpbmsgaW4gc2l6ZS4KICAgICAgaWYgKCFpc1N1YnR5cGVPZihzdXBlcnR5cGVQYXJhbWV0ZXIudHlwZSwgc3VidHlwZVBhcmFtZXRlci50eXBlKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CoFCAE5OPCEBEx8aHAEzKAE6ATcdARoBFxY1AVEmHQEwAUtEBAFBPT07O0FBQT1IASwsNgE4TAQBN0sEAT9KBAEuSQQBLEcEASxHBAE7BkwvKSE3NSYIT0ZKQk8cKAgGEQQBTQZPTCgGUR0GSVFQMiAjDSEGBAFKOgZQQzoqSCYcGRkhFwYSBAFKShAGO0FNPSNLJkcUBAIBQQRRHyAeJRsrASIBSwFQIB9FATExOTcbRBgyHzITBAE9Ox8jNCwfTycGJwEmJDcxKDs3MTYIASpAMjYuBgEmOSo+NTY2LgYBQkosQkUaSBgKCBMGKCw2Lz4RTjI8FwoITVE2NAYjNSc5CAYSBAFMTRQGLjEUBkwUBi02QDY6TAhANjpFT0lBUTw8GAoISQZCFAZGQj4xQBYIBh5GQjwpHAhMTjFKFggGEQQCASRwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQmc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvY29xX2Fubm90LmRhcnSDty8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi8vCi8vIFBsZWFzZSBzZWUgdGhlIGNvbW1lbnRzIGluIGBwa2cva2VybmVsL2xpYi90cmFuc2Zvcm1hdGlvbnMvY29xLmRhcnRgIGZvciBtb3JlCi8vIGluZm8uCgpsaWJyYXJ5IGtlcm5lbC5jb3FfYW5ub3Q7Cgpjb25zdCBjb3EgPSAxOyAvLyBmaWVsZCBvciBjbGFzcwpjb25zdCBjb3FyZWYgPSAyOyAvLyBjbGFzcyBvbmx5CmNvbnN0IG5vY29xID0gMzsgLy8gZmllbGQgb25seQpjb25zdCBjb3FvcHQgPSA0OyAvLyBmaWVsZCBvbmx5CmNvbnN0IGNvcXNpbmdsZSA9IDU7IC8vIHRyZWF0IExpc3Q8QT4gYXMganVzdCBBCmNvbnN0IGNvcWRlZiA9IDY7CmNvbnN0IGNvcXNpbmdsZWRlZiA9IDc7CgovLyBsaWJyYXJ5IG9ubHkKY2xhc3MgQ29xTGliIHsKICBmaW5hbCBTdHJpbmcgZGVzdFBhdGhSZWxhdGl2ZTsKICBjb25zdCBDb3FMaWIodGhpcy5kZXN0UGF0aFJlbGF0aXZlKTsKfQoKLy8gVE9ETygzMDYwOSk6IFNpbmNlIGZhc3RhIGN1cnJlbnRseSB0aHJvd3MgYXdheSBhbm5vdGF0aW9ucyBvbiBFbnVtcywgd2UgdXNlIGEKLy8gbGlzdCB0byBpZGVudGlmeSB3aGljaCBlbnVtcyB0byBjb252ZXJ0LgovLwovLyBXZSdsbCB1bmNvbW1lbnQgdGhlc2UgZW51bXMgb25jZSB0aGUgQ29xIGZvcm1hbGl6YXRpb24gaXMgc3VmZmljaWVudGx5IGNvbXBsZXRlLgp2YXIgY29xRW51bXMgPSBbLyoia2VybmVsLmFzdDo6UHJvY2VkdXJlS2luZCIsICJrZXJuZWwuYXN0OjpBc3luY01hcmtlciIqL107Ch4ATk48A1EJARoBISAfIDASGAEQDyEnAgFRLANUTQEdcGFja2FnZTprZXJuZWwvY29xX2Fubm90LmRhcnQsc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvY2xhc3NfaGllcmFyY2h5LmRhcnTAANKaLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KbGlicmFyeSBrZXJuZWwuY2xhc3NfaGllcmFyY2h5OwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwppbXBvcnQgJ2RhcnQ6bWF0aCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAnYXN0LmRhcnQnOwppbXBvcnQgJ3NyYy9oZWFwLmRhcnQnOwppbXBvcnQgJ3R5cGVfYWxnZWJyYS5kYXJ0JzsKCnR5cGVkZWYgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyA9IHZvaWQgRnVuY3Rpb24oQ2xhc3MsIFN1cGVydHlwZSwgU3VwZXJ0eXBlKTsKCmFic3RyYWN0IGNsYXNzIE1peGluSW5mZXJyZXIgewogIHZvaWQgaW5mZXIoQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LCBDbGFzcyBjbGFzc05vZGUpOwp9CgovLy8gSW50ZXJmYWNlIGZvciBhbnN3ZXJpbmcgdmFyaW91cyBzdWJjbGFzc2luZyBxdWVyaWVzLgphYnN0cmFjdCBjbGFzcyBDbGFzc0hpZXJhcmNoeSB7CiAgZmFjdG9yeSBDbGFzc0hpZXJhcmNoeShDb21wb25lbnQgY29tcG9uZW50LAogICAgICB7SGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBvbkFtYmlndW91c1N1cGVydHlwZXMsCiAgICAgIE1peGluSW5mZXJyZXIgbWl4aW5JbmZlcnJlcn0pIHsKICAgIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcyA/Pz0gKENsYXNzIGNscywgU3VwZXJ0eXBlIGEsIFN1cGVydHlwZSBiKSB7CiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzIwOTEKICAgICAgdGhyb3cgIiRjbHMgY2FuJ3QgaW1wbGVtZW50IGJvdGggJGEgYW5kICRiIjsKICAgIH07CiAgICByZXR1cm4gbmV3IENsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHkuX2ludGVybmFsKAogICAgICAgIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcywgbWl4aW5JbmZlcnJlcikKICAgICAgLi5faW5pdGlhbGl6ZShjb21wb25lbnQubGlicmFyaWVzKTsKICB9CgogIHZvaWQgc2V0IG9uQW1iaWd1b3VzU3VwZXJ0eXBlcygKICAgICAgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBvbkFtYmlndW91c1N1cGVydHlwZXMpOwoKICB2b2lkIHNldCBtaXhpbkluZmVycmVyKE1peGluSW5mZXJyZXIgbWl4aW5JbmZlcnJlcik7CgogIC8vLyBHaXZlbiB0aGUgW3Vub3JkZXJlZF0gY2xhc3NlcywgcmV0dXJuIHRoZW0gaW4gc3VjaCBvcmRlciB0aGF0IGNsYXNzZXMKICAvLy8gb2NjdXIgYWZ0ZXIgdGhlaXIgc3VwZXJjbGFzc2VzLiAgSWYgc29tZSBzdXBlcmNsYXNzZXMgYXJlIG5vdCBpbgogIC8vLyBbdW5vcmRlcmVkXSwgdGhleSBhcmUgbm90IGluY2x1ZGVkLgogIEl0ZXJhYmxlPENsYXNzPiBnZXRPcmRlcmVkQ2xhc3NlcyhJdGVyYWJsZTxDbGFzcz4gdW5vcmRlcmVkKTsKCiAgLy8gUmV0dXJucyB0aGUgaW5zdGFudGl0aW9uIG9mIGVhY2ggZ2VuZXJpYyBzdXBlcnR5cGUgaW1wbGVtZW50ZWQgYnkgdGhpcwogIC8vIGNsYXNzIChlLmcuIGdldENsYXNzQXNJbnN0YW5jZU9mIGFwcGxpZWQgdG8gYWxsIHN1cGVyY2xhc3NlcyBhbmQKICAvLyBpbnRlcmZhY2VzKS4KICBMaXN0PFN1cGVydHlwZT4gZ2VuZXJpY1N1cGVydHlwZXNPZihDbGFzcyBjbGFzc18pOwoKICAvLy8gUmV0dXJucyB0aGUgbGVhc3QgdXBwZXIgYm91bmQgb2YgdHdvIGludGVyZmFjZSB0eXBlcywgYXMgZGVmaW5lZCBieSBEYXJ0CiAgLy8vIDEuMC4KICAvLy8KICAvLy8gR2l2ZW4gdHdvIGludGVyZmFjZXMgSSBhbmQgSiwgbGV0IFNfSSBiZSB0aGUgc2V0IG9mIHN1cGVyaW50ZXJmYWNlcyBvZiBJLAogIC8vLyBsZXQgU19KIGJlIHRoZSBzZXQgb2Ygc3VwZXJpbnRlcmZhY2VzIG9mIEosIGFuZCBsZXQKICAvLy8gUyA9IChJIHVuaW9uIFNfSSkgaW50ZXJzZWN0IChKIHVuaW9uIFNfSikuICBGdXJ0aGVybW9yZSwgd2UgZGVmaW5lCiAgLy8vIFNfbiA9IHtUIHwgVCBpbiBTIGFuZCBkZXB0aChUKSA9IG59IGZvciBhbnkgZmluaXRlIG4gd2hlcmUgZGVwdGgoVCkgaXMKICAvLy8gdGhlIG51bWJlciBvZiBzdGVwcyBpbiB0aGUgbG9uZ2VzdCBpbmhlcml0YW5jZSBwYXRoIGZyb20gVCB0byBPYmplY3QuICBMZXQKICAvLy8gcSBiZSB0aGUgbGFyZ2VzdCBudW1iZXIgc3VjaCB0aGF0IFNfcSBoYXMgY2FyZGluYWxpdHkgb25lLiAgVGhlIGxlYXN0CiAgLy8vIHVwcGVyIGJvdW5kIG9mIEkgYW5kIEogaXMgdGhlIHNvbGUgZWxlbWVudCBvZiBTX3EuCiAgLy8vCiAgLy8vIFRoaXMgaXMgY2FsbGVkIHRoZSAibGVnYWN5IiBsZWFzdCB1cHBlciBib3VuZCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZQogIC8vLyBEYXJ0IDIgbGVhc3QgdXBwZXIgYm91bmQsIHdoaWNoIGhhcyBzcGVjaWFsIGJlaGF2aW9ycyBpbiB0aGUgY2FzZSB3aGVyZQogIC8vLyBvbmUgdHlwZSBpcyBhIHN1YnR5cGUgb2YgdGhlIG90aGVyLCBvciB3aGVyZSBib3RoIHR5cGVzIGFyZSBiYXNlZCBvbiB0aGUKICAvLy8gc2FtZSBjbGFzcy4KICBJbnRlcmZhY2VUeXBlIGdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZCgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlMSwgSW50ZXJmYWNlVHlwZSB0eXBlMik7CgogIC8vLyBSZXR1cm5zIHRoZSBpbnN0YW50aWF0aW9uIG9mIFtzdXBlcmNsYXNzXSB0aGF0IGlzIGltcGxlbWVudGVkIGJ5IFtjbGFzc19dLAogIC8vLyBvciBgbnVsbGAgaWYgW2NsYXNzX10gZG9lcyBub3QgaW1wbGVtZW50IFtzdXBlcmNsYXNzXSBhdCBhbGwuCiAgU3VwZXJ0eXBlIGdldENsYXNzQXNJbnN0YW5jZU9mKENsYXNzIGNsYXNzXywgQ2xhc3Mgc3VwZXJjbGFzcyk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbnN0YW50aWF0aW9uIG9mIFtzdXBlcmNsYXNzXSB0aGF0IGlzIGltcGxlbWVudGVkIGJ5IFt0eXBlXSwKICAvLy8gb3IgYG51bGxgIGlmIFt0eXBlXSBkb2VzIG5vdCBpbXBsZW1lbnQgW3N1cGVyY2xhc3NdIGF0IGFsbC4KICBJbnRlcmZhY2VUeXBlIGdldFR5cGVBc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKTsKCiAgLy8vIFJldHVybnMgdGhlIGluc3RhbnRpYXRpb24gb2YgW3N1cGVyY2xhc3NdIHRoYXQgaXMgaW1wbGVtZW50ZWQgYnkgW3R5cGVdLAogIC8vLyBvciBgbnVsbGAgaWYgW3R5cGVdIGRvZXMgbm90IGltcGxlbWVudCBbc3VwZXJjbGFzc10uICBbc3VwZXJjbGFzc10gbXVzdAogIC8vLyBiZSBhIGdlbmVyaWMgY2xhc3MuCiAgU3VwZXJ0eXBlIGFzSW5zdGFudGlhdGlvbk9mKFN1cGVydHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKTsKCiAgLy8vIFJldHVybnMgdGhlIGluc3RhbmNlIG1lbWJlciB0aGF0IHdvdWxkIHJlc3BvbmQgdG8gYSBkeW5hbWljIGRpc3BhdGNoIG9mCiAgLy8vIFtuYW1lXSB0byBhbiBpbnN0YW5jZSBvZiBbY2xhc3NfXSwgb3IgYG51bGxgIGlmIG5vIHN1Y2ggbWVtYmVyIGV4aXN0cy4KICAvLy8KICAvLy8gSWYgW3NldHRlcl0gaXMgYGZhbHNlYCwgdGhlIG5hbWUgaXMgZGlzcGF0Y2hlZCBhcyBhIGdldHRlciBvciBjYWxsLAogIC8vLyBhbmQgd2lsbCByZXR1cm4gYSBmaWVsZCwgZ2V0dGVyLCBtZXRob2QsIG9yIG9wZXJhdG9yIChvciBudWxsKS4KICAvLy8KICAvLy8gSWYgW3NldHRlcl0gaXMgYHRydWVgLCB0aGUgbmFtZSBpcyBkaXNwYXRjaGVkIGFzIGEgc2V0dGVyLCByb3VnaGx5CiAgLy8vIGNvcnJlc3BvbmRpbmcgdG8gYG5hbWU9YCBpbiB0aGUgRGFydCBzcGVjaWZpY2F0aW9uLCBidXQgbm90ZSB0aGF0IHRoZQogIC8vLyByZXR1cm5lZCBtZW1iZXIgd2lsbCBub3QgaGF2ZSBhIG5hbWUgZW5kaW5nIHdpdGggYD1gLiAgSW4gdGhpcyBjYXNlLAogIC8vLyBhIG5vbi1maW5hbCBmaWVsZCBvciBzZXR0ZXIgKG9yIG51bGwpIHdpbGwgYmUgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIElmIHRoZSBjbGFzcyBpcyBhYnN0cmFjdCwgYWJzdHJhY3QgbWVtYmVycyBhcmUgaWdub3JlZCBhbmQgdGhlIGRpc3BhdGNoCiAgLy8vIGlzIHJlc29sdmVkIGlmIHRoZSBjbGFzcyB3YXMgbm90IGFic3RyYWN0LgogIE1lbWJlciBnZXREaXNwYXRjaFRhcmdldChDbGFzcyBjbGFzc18sIE5hbWUgbmFtZSwge2Jvb2wgc2V0dGVyOiBmYWxzZX0pOwoKICAvLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBwb3RlbnRpYWwgdGFyZ2V0cyBvZiBkeW5hbWljIGRpc3BhdGNoIHRvIGFuIGluc3RhbmNlCiAgLy8vIG9mIFtjbGFzc19dLgogIC8vLwogIC8vLyBJZiBbc2V0dGVyc10gaXMgYGZhbHNlYCwgb25seSBwb3RlbnRpYWwgdGFyZ2V0cyBvZiBhIGdldHRlciBvciBjYWxsCiAgLy8vIGRpc3BhdGNoIGFyZSByZXR1cm5lZC4gIElmIFtzZXR0ZXJzXSBpcyBgdHJ1ZWAsIG9ubHkgcG90ZW50aWFsIHRhcmdldHMKICAvLy8gb2YgYSBzZXR0ZXIgZGlzcGF0Y2ggYXJlIHJldHVybmVkLgogIC8vLwogIC8vLyBTZWUgW2dldERpc3BhdGNoVGFyZ2V0XSBmb3IgbW9yZSBkZXRhaWxzLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgbGlzdCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLgogIExpc3Q8TWVtYmVyPiBnZXREaXNwYXRjaFRhcmdldHMoQ2xhc3MgY2xhc3NfLCB7Ym9vbCBzZXR0ZXJzOiBmYWxzZX0pOwoKICAvLy8gUmV0dXJucyB0aGUgcG9zc2libHkgYWJzdHJhY3QgaW50ZXJmYWNlIG1lbWJlciBvZiBbY2xhc3NfXSB3aXRoIHRoZSBnaXZlbgogIC8vLyBbbmFtZV0uCiAgLy8vCiAgLy8vIElmIFtzZXR0ZXJdIGlzIGBmYWxzZWAsIG9ubHkgZmllbGRzLCBtZXRob2RzLCBhbmQgZ2V0dGVycyB3aXRoIHRoYXQgbmFtZQogIC8vLyB3aWxsIGJlIGZvdW5kLiAgSWYgW3NldHRlcl0gaXMgYHRydWVgLCBvbmx5IG5vbi1maW5hbCBmaWVsZHMgYW5kIHNldHRlcnMKICAvLy8gd2lsbCBiZSBmb3VuZC4KICAvLy8KICAvLy8gSWYgbXVsdGlwbGUgbWVtYmVycyB3aXRoIHRoYXQgbmFtZSBhcmUgaW5oZXJpdGVkIGFuZCBub3Qgb3ZlcnJpZGRlbiwgdGhlCiAgLy8vIG1lbWJlciBmcm9tIHRoZSBmaXJzdCBkZWNsYXJlZCBzdXBlcnR5cGUgaXMgcmV0dXJuZWQuCiAgTWVtYmVyIGdldEludGVyZmFjZU1lbWJlcihDbGFzcyBjbGFzc18sIE5hbWUgbmFtZSwge2Jvb2wgc2V0dGVyOiBmYWxzZX0pOwoKICAvLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBtZW1iZXJzIGRlbm90aW5nIHRoZSBpbnRlcmZhY2UgZm9yIFtjbGFzc19dLCB3aGljaAogIC8vLyBtYXkgaW5jbHVkZSBhYnN0cmFjdCBtZW1iZXJzLgogIC8vLwogIC8vLyBUaGUgbGlzdCBtYXkgY29udGFpbiBtdWx0aXBsZSBtZW1iZXJzIHdpdGggYSBnaXZlbiBuYW1lLiAgVGhpcyBoYXBwZW5zCiAgLy8vIHdoZW4gbWVtYmVycyBhcmUgaW5oZXJpdGVkIHRocm91Z2ggZGlmZmVyZW50IHN1cGVydHlwZXMgYW5kIG5vdCBvdmVycmlkZGVuCiAgLy8vIGluIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gQWxzbyBzZWUgW2dldEludGVyZmFjZU1lbWJlcl0uCiAgTGlzdDxNZW1iZXI+IGdldEludGVyZmFjZU1lbWJlcnMoQ2xhc3MgY2xhc3NfLCB7Ym9vbCBzZXR0ZXJzOiBmYWxzZX0pOwoKICAvLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBtZW1iZXJzIGRlY2xhcmVkIGluIFtjbGFzc19dLCBpbmNsdWRpbmcgYWJzdHJhY3QKICAvLy8gbWVtYmVycy4KICAvLy8KICAvLy8gTWVtYmVycyBhcmUgc29ydGVkIGJ5IG5hbWUgc28gdGhhdCB0aGV5IG1heSBiZSBlZmZpY2llbnRseSBjb21wYXJlZCBhY3Jvc3MKICAvLy8gY2xhc3Nlcy4KICBMaXN0PE1lbWJlcj4gZ2V0RGVjbGFyZWRNZW1iZXJzKENsYXNzIGNsYXNzXywge2Jvb2wgc2V0dGVyczogZmFsc2V9KTsKCiAgLy8vIFRydWUgaWYgW3N1YmNsYXNzXSBpbmhlcml0cyBmcm9tIFtzdXBlcmNsYXNzXSB0aG91Z2ggemVybyBvciBtb3JlCiAgLy8vIGBleHRlbmRzYCByZWxhdGlvbnNoaXBzLgogIGJvb2wgaXNTdWJjbGFzc09mKENsYXNzIHN1YmNsYXNzLCBDbGFzcyBzdXBlcmNsYXNzKTsKCiAgLy8vIFRydWUgaWYgW3N1YnR5cGVdIGluaGVyaXRzIGZyb20gW3N1cGVyY2xhc3NdIHRob3VnaCB6ZXJvIG9yIG1vcmUKICAvLy8gYGV4dGVuZHNgLCBgd2l0aGAsIGFuZCBgaW1wbGVtZW50c2AgcmVsYXRpb25zaGlwcy4KICBib29sIGlzU3VidHlwZU9mKENsYXNzIHN1YnR5cGUsIENsYXNzIHN1cGVyY2xhc3MpOwoKICAvLy8gVHJ1ZSBpZiB0aGUgZ2l2ZW4gY2xhc3MgaXMgdXNlZCBhcyB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIHRvIGEKICAvLy8gbWl4aW4gYXBwbGljYXRpb24gKGkuZS4gW0NsYXNzLm1peGVkSW5UeXBlXSkuCiAgYm9vbCBpc1VzZWRBc01peGluKENsYXNzIGNsYXNzXyk7CgogIC8vLyBJbnZva2VzIFtjYWxsYmFja10gZm9yIGV2ZXJ5IG1lbWJlciBkZWNsYXJlZCBpbiBvciBpbmhlcml0ZWQgYnkgW2NsYXNzX10KICAvLy8gdGhhdCBvdmVycmlkZXMgb3IgaW1wbGVtZW50cyBhIG1lbWJlciBpbiBhIHN1cGVydHlwZSBvZiBbY2xhc3NfXQogIC8vLyAob3IgaW4gcmFyZSBjYXNlcywgb3ZlcnJpZGVzIGEgbWVtYmVyIGRlY2xhcmVkIGluIFtjbGFzc19dKS4KICAvLy8KICAvLy8gV2UgdXNlIHRoZSB0ZXJtICJpbmhlcml0YWJsZSIgZm9yIG1lbWJlcnMgdGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IKICAvLy8gaW5oZXJpdGFuY2UgYnV0IG1heSBoYXZlIGJlZW4gb3ZlcnJpZGRlbi4gIFRoZSAiZGVjbGFyZWQiIG1lbWJlcnMgb2YgYQogIC8vLyBtaXhpbiBhcHBsaWNhdGlvbiBhcmUgdGhvc2UgZGVjbGFyZWQgaW4gdGhlIG1peGVkLWluIHR5cGUuIFRoZSBjYWxsYmFjayBpcwogIC8vLyBpbnZva2VkIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6CiAgLy8vCiAgLy8vIDEuIEEgbWVtYmVyIGRlY2xhcmVkIGluIHRoZSBjbGFzcyBvdmVycmlkZXMgYSBtZW1iZXIgaW5oZXJpdGFibGUgdGhyb3VnaAogIC8vLyBvbmUgb2YgdGhlIHN1cGVydHlwZXMgb2YgdGhlIGNsYXNzLgogIC8vLwogIC8vLyAyLiBBIG5vbi1hYnN0cmFjdCBtZW1iZXIgaXMgaW5oZXJpdGVkIGZyb20gYSBzdXBlcmNsYXNzLCBhbmQgaW4gdGhlCiAgLy8vIGNvbnRleHQgb2YgdGhpcyBjbGFzcywgaXQgb3ZlcnJpZGVzIGFuIGFic3RyYWN0IG1lbWJlciBpbmhlcml0YWJsZSB0aHJvdWdoCiAgLy8vIG9uZSBvZiBpdHMgc3VwZXJpbnRlcmZhY2VzLgogIC8vLwogIC8vLyAzLiBBIG5vbi1hYnN0cmFjdCBtZW1iZXIgaXMgaW5oZXJpdGVkIGZyb20gYSBzdXBlcmNsYXNzLCBhbmQgaXQgb3ZlcnJpZGVzCiAgLy8vIGFuIGFic3RyYWN0IG1lbWJlciBkZWNsYXJlZCBpbiB0aGlzIGNsYXNzLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCB3aWxsIG5vdCByZXBvcnQgdGhhdCBhIG1lbWJlciBvdmVycmlkZXMgaXRzZWxmLiBBIGdpdmVuIHBhaXIKICAvLy8gbWF5IGJlIHJlcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGluaGVyaXRhbmNlIHBhdGhzCiAgLy8vIHRvIHRoZSBvdmVycmlkZGVuIG1lbWJlci4KICAvLy8KICAvLy8gSXQgaXMgcG9zc2libGUgZm9yIHR3byBtZXRob2RzIHRvIG92ZXJyaWRlIG9uZSBhbm90aGVyIGluIGJvdGggZGlyZWN0aW9ucy4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGFyZSBvdmVycmlkZGVuIHNlcGFyYXRlbHkuICBUaGUgW2lzU2V0dGVyXQogIC8vLyBjYWxsYmFjayBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGljaCB0eXBlIG9mIGFjY2VzcyBpcyBiZWluZyBvdmVycmlkZGVuLgogIHZvaWQgZm9yRWFjaE92ZXJyaWRlUGFpcihDbGFzcyBjbGFzc18sCiAgICAgIGNhbGxiYWNrKE1lbWJlciBkZWNsYXJlZE1lbWJlciwgTWVtYmVyIGludGVyZmFjZU1lbWJlciwgYm9vbCBpc1NldHRlcikpOwoKICAvLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCBieSB0aGUgY2xpZW50IGFmdGVyIGEgY2hhbmdlOiByZW1vdmFsLCBhZGRpdGlvbiwKICAvLy8gb3IgbW9kaWZpY2F0aW9uIG9mIGNsYXNzZXMgKHZpYSBsaWJyYXJpZXMpLgogIC8vLwogIC8vLyBGb3IgbW9kaWZpZWQgY2xhc3NlcyBzcGVjaWZ5IGEgY2xhc3MgYXMgYm90aCByZW1vdmVkIGFuZCBhZGRlZDogU29tZSBvZgogIC8vLyB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGlzIGhpZXJhcmNoeSBtaWdodCBoYXZlIGNhY2hlZCwgaXMgbm90IHZhbGlkCiAgLy8vIGFueW1vcmUuCiAgLy8vCiAgLy8vIE5vdGUsIHRoYXQgaXQgaXMgdGhlIGNsaWVudHMgcmVzcG9uc2liaWxpdHkgdG8gbWFyayBhbGwgc3ViY2xhc3NlcyBhcwogIC8vLyBjaGFuZ2VkIHRvby4KICBDbGFzc0hpZXJhcmNoeSBhcHBseVRyZWVDaGFuZ2VzKEl0ZXJhYmxlPExpYnJhcnk+IHJlbW92ZWRMaWJyYXJpZXMsCiAgICAgIEl0ZXJhYmxlPExpYnJhcnk+IGVuc3VyZUtub3duTGlicmFyaWVzLAogICAgICB7Q29tcG9uZW50IHJlaXNzdWVBbWJpZ3VvdXNTdXBlcnR5cGVzRm9yfSk7CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHRoZSBjbGllbnQgYWZ0ZXIgYSBtZW1iZXIgY2hhbmdlIG9uIGNsYXNzZXM6CiAgLy8vIFNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhpcyBoaWVyYXJjaHkgbWlnaHQgaGF2ZSBjYWNoZWQsCiAgLy8vIGlzIG5vdCB2YWxpZCBhbnltb3JlLgogIC8vLyBOb3RlLCB0aGF0IGl0IGlzIHRoZSBjbGllbnRzIHJlc3BvbnNpYmlsaXR5IHRvIG1hcmsgYWxsIHN1YmNsYXNzZXMgYXMKICAvLy8gY2hhbmdlZCB0b28sIG9yIC0gaWYgW2ZpbmREZXNjZW5kYW50c10gaXMgdHJ1ZSwgdGhlIENsYXNzSGllcmFyY2h5IHdpbGwKICAvLy8gc3BlbmQgdGhlIHRpbWUgdG8gZmluZCB0aGVtIGZvciB0aGUgY2FsbGVyLgogIENsYXNzSGllcmFyY2h5IGFwcGx5TWVtYmVyQ2hhbmdlcyhJdGVyYWJsZTxDbGFzcz4gY2xhc3NlcywKICAgICAge2Jvb2wgZmluZERlc2NlbmRhbnRzOiBmYWxzZX0pOwoKICAvLy8gTWVyZ2VzIHR3byBzb3J0ZWQgbGlzdHMuCiAgLy8vCiAgLy8vIElmIGEgZ2l2ZW4gbWVtYmVyIG9jY3VycyBpbiBib3RoIGxpc3RzLCB0aGUgbWVyZ2Ugd2lsbCBhdHRlbXB0IHRvIGV4Y2x1ZGUKICAvLy8gdGhlIGR1cGxpY2F0ZSBtZW1iZXIsIGJ1dCBpcyBub3Qgc3RyaWN0bHkgZ3VhcmFudGVlZCB0byBkbyBzby4KICAvLy8KICAvLy8gVGhlIHNvcnQgaGFzIHRoZSBmb2xsb3dpbmcgc3RhYmlsaXR5IHByb3BlcnRpZXM6CiAgLy8vCiAgLy8vIC0gSWYgYm90aCB4IGFuZCB5IGNhbWUgZnJvbSB0aGUgc2FtZSBpbnB1dCBsaXN0LCBhbmQgeCBwcmVjZWRlZCB5IGluIHRoZQogIC8vLyAgIGlucHV0IGxpc3QsIHggd2lsbCBwcmVjZWRlIHkgaW4gdGhlIG91dHB1dCBsaXN0LiAgVGhpcyBob2xkcyBldmVuIGlmIHgKICAvLy8gICBhbmQgeSBoYXZlIG1hdGNoaW5nIG5hbWVzLgogIC8vLwogIC8vLyAtIElmIG0gaXMgYSBjb250aWd1b3VzIHN1YnNlcXVlbmNlIG9mIHRoZSBvdXRwdXQgbGlzdCBjb250YWluaW5nIGF0IGxlYXN0CiAgLy8vICAgb25lIGVsZW1lbnQgZnJvbSBlYWNoIGlucHV0IGxpc3QsIGFuZCBhbGwgZWxlbWVudHMgb2YgbSBoYXZlIG1hdGNoaW5nCiAgLy8vICAgbmFtZXMsIHRoZW4gdGhlIGVsZW1lbnRzIG9mIG0gZnJvbSBbZmlyc3RdIHdpbGwgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2YKICAvLy8gICBtIGZyb20gW3NlY29uZF0uCiAgc3RhdGljIExpc3Q8TWVtYmVyPiBtZXJnZVNvcnRlZExpc3RzKAogICAgICBMaXN0PE1lbWJlcj4gZmlyc3QsIExpc3Q8TWVtYmVyPiBzZWNvbmQpIHsKICAgIGlmIChmaXJzdC5pc0VtcHR5KSByZXR1cm4gc2Vjb25kOwogICAgaWYgKHNlY29uZC5pc0VtcHR5KSByZXR1cm4gZmlyc3Q7CiAgICBMaXN0PE1lbWJlcj4gcmVzdWx0ID0gPE1lbWJlcj5bXS4ubGVuZ3RoID0gZmlyc3QubGVuZ3RoICsgc2Vjb25kLmxlbmd0aDsKICAgIGludCBzdG9yZUluZGV4ID0gMDsKICAgIGludCBpID0gMCwgaiA9IDA7CiAgICB3aGlsZSAoaSA8IGZpcnN0Lmxlbmd0aCAmJiBqIDwgc2Vjb25kLmxlbmd0aCkgewogICAgICBNZW1iZXIgZmlyc3RNZW1iZXIgPSBmaXJzdFtpXTsKICAgICAgTWVtYmVyIHNlY29uZE1lbWJlciA9IHNlY29uZFtqXTsKICAgICAgaW50IGNvbXBhcmUgPSBDbGFzc0hpZXJhcmNoeS5jb21wYXJlTWVtYmVycyhmaXJzdE1lbWJlciwgc2Vjb25kTWVtYmVyKTsKICAgICAgaWYgKGNvbXBhcmUgPD0gMCkgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gZmlyc3RNZW1iZXI7CiAgICAgICAgKytpOwogICAgICAgIC8vIElmIHRoZSBzYW1lIG1lbWJlciBvY2N1cnMgaW4gYm90aCBsaXN0cywgc2tpcCB0aGUgZHVwbGljYXRlLgogICAgICAgIGlmIChpZGVudGljYWwoZmlyc3RNZW1iZXIsIHNlY29uZE1lbWJlcikpIHsKICAgICAgICAgICsrajsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBzZWNvbmRNZW1iZXI7CiAgICAgICAgKytqOwogICAgICB9CiAgICB9CiAgICB3aGlsZSAoaSA8IGZpcnN0Lmxlbmd0aCkgewogICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGZpcnN0W2krK107CiAgICB9CiAgICB3aGlsZSAoaiA8IHNlY29uZC5sZW5ndGgpIHsKICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBzZWNvbmRbaisrXTsKICAgIH0KICAgIHJlc3VsdC5sZW5ndGggPSBzdG9yZUluZGV4OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDb21wYXJlcyBtZW1iZXJzIGJ5IG5hbWUsIHVzaW5nIHRoZSBzYW1lIHNvcnQgb3JkZXIgYXMKICAvLy8gW2dldERlY2xhcmVkTWVtYmVyc10gYW5kIFtnZXRJbnRlcmZhY2VNZW1iZXJzXS4KICBzdGF0aWMgaW50IGNvbXBhcmVNZW1iZXJzKE1lbWJlciBmaXJzdCwgTWVtYmVyIHNlY29uZCkgewogICAgcmV0dXJuIGNvbXBhcmVOYW1lcyhmaXJzdC5uYW1lLCBzZWNvbmQubmFtZSk7CiAgfQoKICAvLy8gQ29tcGFyZXMgbmFtZXMsIHVzaW5nIHRoZSBzYW1lIHNvcnQgb3JkZXIgYXMgW2dldERlY2xhcmVkTWVtYmVyc10gYW5kCiAgLy8vIFtnZXRJbnRlcmZhY2VNZW1iZXJzXS4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBhcmJpdHJhcnkgYXMtZmFzdC1hcy1wb3NzaWJsZSBzb3J0aW5nIGNyaXRlcmlvbi4KICBzdGF0aWMgaW50IGNvbXBhcmVOYW1lcyhOYW1lIGZpcnN0TmFtZSwgTmFtZSBzZWNvbmROYW1lKSB7CiAgICBpbnQgZmlyc3RIYXNoID0gZmlyc3ROYW1lLmhhc2hDb2RlOwogICAgaW50IHNlY29uZEhhc2ggPSBzZWNvbmROYW1lLmhhc2hDb2RlOwogICAgaWYgKGZpcnN0SGFzaCAhPSBzZWNvbmRIYXNoKSByZXR1cm4gZmlyc3RIYXNoIC0gc2Vjb25kSGFzaDsKICAgIFN0cmluZyBmaXJzdFN0cmluZyA9IGZpcnN0TmFtZS5uYW1lOwogICAgU3RyaW5nIHNlY29uZFN0cmluZyA9IHNlY29uZE5hbWUubmFtZTsKICAgIGludCBmaXJzdExlbmd0aCA9IGZpcnN0U3RyaW5nLmxlbmd0aDsKICAgIGludCBzZWNvbmRMZW5ndGggPSBzZWNvbmRTdHJpbmcubGVuZ3RoOwogICAgaWYgKGZpcnN0TGVuZ3RoICE9IHNlY29uZExlbmd0aCkgewogICAgICByZXR1cm4gZmlyc3RMZW5ndGggLSBzZWNvbmRMZW5ndGg7CiAgICB9CiAgICBMaWJyYXJ5IGZpcnN0TGlicmFyeSA9IGZpcnN0TmFtZS5saWJyYXJ5OwogICAgTGlicmFyeSBzZWNvbmRMaWJyYXJ5ID0gc2Vjb25kTmFtZS5saWJyYXJ5OwogICAgaWYgKGZpcnN0TGlicmFyeSAhPSBzZWNvbmRMaWJyYXJ5KSB7CiAgICAgIGlmIChmaXJzdExpYnJhcnkgPT0gbnVsbCkgcmV0dXJuIC0xOwogICAgICBpZiAoc2Vjb25kTGlicmFyeSA9PSBudWxsKSByZXR1cm4gMTsKICAgICAgcmV0dXJuIGZpcnN0TGlicmFyeS5jb21wYXJlVG8oc2Vjb25kTGlicmFyeSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpcnN0TGVuZ3RoOyArK2kpIHsKICAgICAgaW50IGZpcnN0VW5pdCA9IGZpcnN0U3RyaW5nLmNvZGVVbml0QXQoaSk7CiAgICAgIGludCBzZWNvbmRVbml0ID0gc2Vjb25kU3RyaW5nLmNvZGVVbml0QXQoaSk7CiAgICAgIGludCBkZWx0YSA9IGZpcnN0VW5pdCAtIHNlY29uZFVuaXQ7CiAgICAgIGlmIChkZWx0YSAhPSAwKSByZXR1cm4gZGVsdGE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBtZW1iZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3IgYG51bGxgIGlmIG5vIG1lbWJlciBoYXMgdGhlCiAgLy8vIG5hbWUuICBJbiBjYXNlIHRoZSBsaXN0IGNvbnRhaW5zIG11bHRpcGxlIG1lbWJlcnMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwKICAvLy8gdGhlIG9uZSB0aGF0IG9jY3VycyBmaXJzdCBpbiB0aGUgbGlzdCBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gVGhlIGxpc3QgaXMgYXNzdW1lZCB0byBiZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIFtjb21wYXJlTWVtYmVyc10uCiAgc3RhdGljIE1lbWJlciBmaW5kTWVtYmVyQnlOYW1lKExpc3Q8TWVtYmVyPiBtZW1iZXJzLCBOYW1lIG5hbWUpIHsKICAgIGludCBsb3cgPSAwLCBoaWdoID0gbWVtYmVycy5sZW5ndGggLSAxOwogICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7CiAgICAgIGludCBtaWQgPSBsb3cgKyAoKGhpZ2ggLSBsb3cpID4+IDEpOwogICAgICBNZW1iZXIgcGl2b3QgPSBtZW1iZXJzW21pZF07CiAgICAgIGludCBjb21wYXJpc29uID0gY29tcGFyZU5hbWVzKG5hbWUsIHBpdm90Lm5hbWUpOwogICAgICBpZiAoY29tcGFyaXNvbiA8IDApIHsKICAgICAgICBoaWdoID0gbWlkIC0gMTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uID4gMCkgewogICAgICAgIGxvdyA9IG1pZCArIDE7CiAgICAgIH0gZWxzZSBpZiAoaGlnaCAhPSBtaWQpIHsKICAgICAgICAvLyBFbnN1cmUgd2UgZmluZCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gbmFtZS4KICAgICAgICBoaWdoID0gbWlkOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBwaXZvdDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBDbGFzc0hpZXJhcmNoeVN1YnR5cGVzIHsKICAvLy8gUmV0dXJucyB0aGUgc3VidHlwZXMgb2YgW2NsYXNzX10gYXMgYW4gaW50ZXJ2YWwgbGlzdC4KICBDbGFzc1NldCBnZXRTdWJ0eXBlc09mKENsYXNzIGNsYXNzXyk7CgogIC8vLyBSZXR1cm5zIHRoZSBzaW5nbGUgY29uY3JldGUgdGFyZ2V0IGZvciBpbnZvY2F0aW9uIG9mIHRoZSBnaXZlbiBpbnRlcmZhY2UKICAvLy8gdGFyZ2V0LCBvciBgbnVsbGAgaWYgaXQgY291bGQgbm90IGJlIHJlc29sdmVkIG9yIHRoZXJlIGFyZSBtdWx0aXBsZQogIC8vLyBwb3NzaWJsZSB0YXJnZXRzLgogIE1lbWJlciBnZXRTaW5nbGVUYXJnZXRGb3JJbnRlcmZhY2VJbnZvY2F0aW9uKE1lbWJlciBpbnRlcmZhY2VUYXJnZXQsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KTsKfQoKY2xhc3MgX0NsYXNzSW5mb1N1YnR5cGUgewogIGZpbmFsIF9DbGFzc0luZm8gY2xhc3NJbmZvOwogIGludCB0b3BEb3duSW5kZXggPSAtMTsKCiAgLy8vIFRvcC1kb3duIGluZGljZXMgb2YgYWxsIHN1YmNsYXNzZXMgb2YgdGhpcyBjbGFzcywgcmVwcmVzZW50ZWQgYXMKICAvLy8gaW50ZXJsZWF2ZWQgYmVnaW4vZW5kIGludGVydmFsIGVuZCBwb2ludHMuCiAgVWludDMyTGlzdCBzdWJ0eXBlSW50ZXJ2YWxMaXN0OwoKICBfQ2xhc3NJbmZvU3VidHlwZSh0aGlzLmNsYXNzSW5mbyk7Cn0KCmNsYXNzIF9DbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5U3VidHlwZXMgaW1wbGVtZW50cyBDbGFzc0hpZXJhcmNoeVN1YnR5cGVzIHsKICBmaW5hbCBDbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeTsKICBmaW5hbCBMaXN0PENsYXNzPiBfY2xhc3Nlc0J5VG9wRG93bkluZGV4OwogIGZpbmFsIE1hcDxDbGFzcywgX0NsYXNzSW5mb1N1YnR5cGU+IF9pbmZvTWFwID0gPENsYXNzLCBfQ2xhc3NJbmZvU3VidHlwZT57fTsKICBib29sIGludmFsaWRhdGVkID0gZmFsc2U7CgogIF9DbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5U3VidHlwZXModGhpcy5oaWVyYXJjaHkpCiAgICAgIDogX2NsYXNzZXNCeVRvcERvd25JbmRleCA9IG5ldyBMaXN0PENsYXNzPihoaWVyYXJjaHkuX2luZm9NYXAubGVuZ3RoKSB7CiAgICBoaWVyYXJjaHkuYWxsQmV0c09mZiA9IHRydWU7CiAgICBpZiAoaGllcmFyY2h5Ll9pbmZvTWFwLmlzTm90RW1wdHkpIHsKICAgICAgZm9yIChDbGFzcyBjbGFzc18gaW4gaGllcmFyY2h5Ll9pbmZvTWFwLmtleXMpIHsKICAgICAgICBfaW5mb01hcFtjbGFzc19dID0gbmV3IF9DbGFzc0luZm9TdWJ0eXBlKGhpZXJhcmNoeS5faW5mb01hcFtjbGFzc19dKTsKICAgICAgfQoKICAgICAgX3RvcERvd25Tb3J0VmlzaXQoX2luZm9NYXBbaGllcmFyY2h5Ll9pbmZvTWFwLmtleXMuZmlyc3RdKTsKICAgIH0KICB9CgogIC8vLyBEb3dud2FyZHMgdHJhdmVyc2FsIG9mIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBvcmRlcnMgY2xhc3NlcyBzbyBsb2NhbAogIC8vLyBoaWVyYXJjaGllcyBoYXZlIGNvbnRpZ3VvdXMgaW5kaWNlcy4KICBpbnQgX3RvcERvd25Tb3J0SW5kZXggPSAwOwogIHZvaWQgX3RvcERvd25Tb3J0VmlzaXQoX0NsYXNzSW5mb1N1YnR5cGUgc3ViSW5mbykgewogICAgaWYgKHN1YkluZm8udG9wRG93bkluZGV4ICE9IC0xKSByZXR1cm47CiAgICBpbnQgaW5kZXggPSBfdG9wRG93blNvcnRJbmRleCsrOwogICAgc3ViSW5mby50b3BEb3duSW5kZXggPSBpbmRleDsKICAgIF9jbGFzc2VzQnlUb3BEb3duSW5kZXhbaW5kZXhdID0gc3ViSW5mby5jbGFzc0luZm8uY2xhc3NOb2RlOwogICAgdmFyIHN1YnR5cGVTZXRCdWlsZGVyID0gbmV3IF9JbnRlcnZhbExpc3RCdWlsZGVyKCkuLmFkZFNpbmdsZXRvbihpbmRleCk7CiAgICBmb3IgKF9DbGFzc0luZm8gc3VidHlwZSBpbiBzdWJJbmZvLmNsYXNzSW5mby5kaXJlY3RFeHRlbmRlcnMpIHsKICAgICAgX0NsYXNzSW5mb1N1YnR5cGUgc3VidHlwZUluZm8gPSBfaW5mb01hcFtzdWJ0eXBlLmNsYXNzTm9kZV07CiAgICAgIF90b3BEb3duU29ydFZpc2l0KHN1YnR5cGVJbmZvKTsKICAgICAgc3VidHlwZVNldEJ1aWxkZXIuYWRkSW50ZXJ2YWxMaXN0KHN1YnR5cGVJbmZvLnN1YnR5cGVJbnRlcnZhbExpc3QpOwogICAgfQogICAgZm9yIChfQ2xhc3NJbmZvIHN1YnR5cGUgaW4gc3ViSW5mby5jbGFzc0luZm8uZGlyZWN0TWl4ZXJzKSB7CiAgICAgIF9DbGFzc0luZm9TdWJ0eXBlIHN1YnR5cGVJbmZvID0gX2luZm9NYXBbc3VidHlwZS5jbGFzc05vZGVdOwogICAgICBfdG9wRG93blNvcnRWaXNpdChzdWJ0eXBlSW5mbyk7CiAgICAgIHN1YnR5cGVTZXRCdWlsZGVyLmFkZEludGVydmFsTGlzdChzdWJ0eXBlSW5mby5zdWJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KICAgIGZvciAoX0NsYXNzSW5mbyBzdWJ0eXBlIGluIHN1YkluZm8uY2xhc3NJbmZvLmRpcmVjdEltcGxlbWVudGVycykgewogICAgICBfQ2xhc3NJbmZvU3VidHlwZSBzdWJ0eXBlSW5mbyA9IF9pbmZvTWFwW3N1YnR5cGUuY2xhc3NOb2RlXTsKICAgICAgX3RvcERvd25Tb3J0VmlzaXQoc3VidHlwZUluZm8pOwogICAgICBzdWJ0eXBlU2V0QnVpbGRlci5hZGRJbnRlcnZhbExpc3Qoc3VidHlwZUluZm8uc3VidHlwZUludGVydmFsTGlzdCk7CiAgICB9CiAgICBzdWJJbmZvLnN1YnR5cGVJbnRlcnZhbExpc3QgPSBzdWJ0eXBlU2V0QnVpbGRlci5idWlsZEludGVydmFsTGlzdCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyIGdldFNpbmdsZVRhcmdldEZvckludGVyZmFjZUludm9jYXRpb24oTWVtYmVyIGludGVyZmFjZVRhcmdldCwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIGlmIChpbnZhbGlkYXRlZCkgdGhyb3cgIlRoaXMgZGF0YXN0cnVjdHVyZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCI7CiAgICBOYW1lIG5hbWUgPSBpbnRlcmZhY2VUYXJnZXQubmFtZTsKICAgIE1lbWJlciB0YXJnZXQgPSBudWxsOwogICAgQ2xhc3NTZXQgc3VidHlwZXMgPSBnZXRTdWJ0eXBlc09mKGludGVyZmFjZVRhcmdldC5lbmNsb3NpbmdDbGFzcyk7CiAgICBmb3IgKENsYXNzIGMgaW4gc3VidHlwZXMpIHsKICAgICAgaWYgKCFjLmlzQWJzdHJhY3QpIHsKICAgICAgICBNZW1iZXIgY2FuZGlkYXRlID0gaGllcmFyY2h5LmdldERpc3BhdGNoVGFyZ2V0KGMsIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICAgICAgICBpZiAoKGNhbmRpZGF0ZSAhPSBudWxsKSAmJiAhY2FuZGlkYXRlLmlzQWJzdHJhY3QpIHsKICAgICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICAgICAgICB0YXJnZXQgPSBjYW5kaWRhdGU7CiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCAhPSBjYW5kaWRhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGFyZ2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NTZXQgZ2V0U3VidHlwZXNPZihDbGFzcyBjbGFzc18pIHsKICAgIGlmIChpbnZhbGlkYXRlZCkgdGhyb3cgIlRoaXMgZGF0YXN0cnVjdHVyZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCI7CiAgICBTZXQ8Q2xhc3M+IHJlc3VsdCA9IG5ldyBTZXQ8Q2xhc3M+KCk7CiAgICBVaW50MzJMaXN0IGxpc3QgPSBfaW5mb01hcFtjbGFzc19dLnN1YnR5cGVJbnRlcnZhbExpc3Q7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgaW50IGZyb20gPSBsaXN0W2ldOwogICAgICBpbnQgdG8gPSBsaXN0W2kgKyAxXTsKICAgICAgZm9yIChpbnQgaiA9IGZyb207IGogPCB0bzsgaisrKSB7CiAgICAgICAgcmVzdWx0LmFkZChfY2xhc3Nlc0J5VG9wRG93bkluZGV4W2pdKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBDbGFzc1NldChyZXN1bHQpOwogIH0KfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtDbGFzc0hpZXJhcmNoeV0gZm9yIGNsb3NlZCB3b3JsZC4KY2xhc3MgQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeSBpbXBsZW1lbnRzIENsYXNzSGllcmFyY2h5IHsKICBIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzIF9vbkFtYmlndW91c1N1cGVydHlwZXM7CiAgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBfb25BbWJpZ3VvdXNTdXBlcnR5cGVzTm90V3JhcHBlZDsKICBNaXhpbkluZmVycmVyIG1peGluSW5mZXJyZXI7CgogIHZvaWQgc2V0IG9uQW1iaWd1b3VzU3VwZXJ0eXBlcygKICAgICAgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBvbkFtYmlndW91c1N1cGVydHlwZXMpIHsKICAgIF9vbkFtYmlndW91c1N1cGVydHlwZXNOb3RXcmFwcGVkID0gb25BbWJpZ3VvdXNTdXBlcnR5cGVzOwogICAgX29uQW1iaWd1b3VzU3VwZXJ0eXBlcyA9IChDbGFzcyBjbGFzc18sIFN1cGVydHlwZSBhLCBTdXBlcnR5cGUgYikgewogICAgICBvbkFtYmlndW91c1N1cGVydHlwZXMoY2xhc3NfLCBhLCBiKTsKICAgICAgTGlzdDxTdXBlcnR5cGU+IHJlY29yZGVkID0gX3JlY29yZGVkQW1iaWd1b3VzU3VwZXJ0eXBlc1tjbGFzc19dOwogICAgICBpZiAocmVjb3JkZWQgPT0gbnVsbCkgewogICAgICAgIHJlY29yZGVkID0gbmV3IExpc3Q8U3VwZXJ0eXBlPigpOwogICAgICAgIF9yZWNvcmRlZEFtYmlndW91c1N1cGVydHlwZXNbY2xhc3NfXSA9IHJlY29yZGVkOwogICAgICB9CiAgICAgIHJlY29yZGVkLmFkZChhKTsKICAgICAgcmVjb3JkZWQuYWRkKGIpOwogICAgfTsKICB9CgogIC8vLyBUaGUgaW5zZXJ0IG9yZGVyIGlzIGltcG9ydGFudC4KICBmaW5hbCBNYXA8Q2xhc3MsIF9DbGFzc0luZm8+IF9pbmZvTWFwID0KICAgICAgbmV3IExpbmtlZEhhc2hNYXA8Q2xhc3MsIF9DbGFzc0luZm8+KCk7CgogIF9DbGFzc0luZm8gaW5mb0ZvcihDbGFzcyBjKSB7CiAgICBfQ2xhc3NJbmZvIGluZm8gPSBfaW5mb01hcFtjXTsKICAgIGluZm8/LnVzZWQgPSB0cnVlOwogICAgcmV0dXJuIGluZm87CiAgfQoKICBMaXN0PENsYXNzPiBnZXRVc2VkQ2xhc3NlcygpIHsKICAgIExpc3Q8Q2xhc3M+IHJlc3VsdCA9IG5ldyBMaXN0PENsYXNzPigpOwogICAgZm9yIChfQ2xhc3NJbmZvIGNsYXNzSW5mbyBpbiBfaW5mb01hcC52YWx1ZXMpIHsKICAgICAgaWYgKGNsYXNzSW5mby51c2VkKSB7CiAgICAgICAgcmVzdWx0LmFkZChjbGFzc0luZm8uY2xhc3NOb2RlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgcmVzZXRVc2VkKCkgewogICAgZm9yIChfQ2xhc3NJbmZvIGNsYXNzSW5mbyBpbiBfaW5mb01hcC52YWx1ZXMpIHsKICAgICAgY2xhc3NJbmZvLnVzZWQgPSBmYWxzZTsKICAgIH0KICAgIGFsbEJldHNPZmYgPSBmYWxzZTsKICB9CgogIGZpbmFsIFNldDxMaWJyYXJ5PiBrbm93bkxpYnJhcmllcyA9IG5ldyBTZXQ8TGlicmFyeT4oKTsKICBib29sIGFsbEJldHNPZmYgPSBmYWxzZTsKCiAgLy8vIFJlY29yZGVkIGVycm9ycyBmb3IgY2xhc3NlcyB3ZSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgY2xhc3MgaGllcmFyY2h5CiAgLy8vIGZvciwgYnV0IHdpbGwgaGF2ZSB0byBiZSByZWlzc3VlZCB3aGVuIHJlLXVzaW5nIHRoZSBjYWxjdWxhdGlvbi4KICBmaW5hbCBNYXA8Q2xhc3MsIExpc3Q8U3VwZXJ0eXBlPj4gX3JlY29yZGVkQW1iaWd1b3VzU3VwZXJ0eXBlcyA9CiAgICAgIG5ldyBMaW5rZWRIYXNoTWFwPENsYXNzLCBMaXN0PFN1cGVydHlwZT4+KCk7CgogIEl0ZXJhYmxlPENsYXNzPiBnZXQgY2xhc3NlcyB7CiAgICBhbGxCZXRzT2ZmID0gdHJ1ZTsKICAgIHJldHVybiBfaW5mb01hcC5rZXlzOwogIH0KCiAgaW50IGdldCBudW1iZXJPZkNsYXNzZXMgewogICAgYWxsQmV0c09mZiA9IHRydWU7CiAgICByZXR1cm4gX2luZm9NYXAubGVuZ3RoOwogIH0KCiAgX0Nsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlcyBfY2FjaGVkQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlczsKCiAgQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeS5faW50ZXJuYWwoCiAgICAgIEhhbmRsZUFtYmlndW91c1N1cGVydHlwZXMgb25BbWJpZ3VvdXNTdXBlcnR5cGVzLCB0aGlzLm1peGluSW5mZXJyZXIpIHsKICAgIHRoaXMub25BbWJpZ3VvdXNTdXBlcnR5cGVzID0gb25BbWJpZ3VvdXNTdXBlcnR5cGVzOwogIH0KCiAgQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlcyBjb21wdXRlU3VidHlwZXNJbmZvcm1hdGlvbigpIHsKICAgIF9jYWNoZWRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzID8/PQogICAgICAgIG5ldyBfQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzKHRoaXMpOwogICAgcmV0dXJuIF9jYWNoZWRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3M+IGdldE9yZGVyZWRDbGFzc2VzKEl0ZXJhYmxlPENsYXNzPiB1bm9yZGVyZWQpIHsKICAgIHZhciB1bm9yZGVyZWRTZXQgPSB1bm9yZGVyZWQudG9TZXQoKTsKICAgIGZvciAoQ2xhc3MgYyBpbiB1bm9yZGVyZWQpIF9pbmZvTWFwW2NdPy51c2VkID0gdHJ1ZTsKICAgIHJldHVybiBfaW5mb01hcC5rZXlzLndoZXJlKHVub3JkZXJlZFNldC5jb250YWlucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU3ViY2xhc3NPZihDbGFzcyBzdWJjbGFzcywgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgaWYgKGlkZW50aWNhbChzdWJjbGFzcywgc3VwZXJjbGFzcykpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGluZm9Gb3Ioc3ViY2xhc3MpLmlzU3ViY2xhc3NPZihpbmZvRm9yKHN1cGVyY2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJ0eXBlT2YoQ2xhc3Mgc3VidHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgaWYgKGlkZW50aWNhbChzdWJ0eXBlLCBzdXBlcmNsYXNzKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gaW5mb0ZvcihzdWJ0eXBlKS5pc1N1YnR5cGVPZihpbmZvRm9yKHN1cGVyY2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNVc2VkQXNNaXhpbihDbGFzcyBjbGFzc18pIHsKICAgIHJldHVybiBpbmZvRm9yKGNsYXNzXykuZGlyZWN0TWl4ZXJzLmlzTm90RW1wdHk7CiAgfQoKICBMaXN0PF9DbGFzc0luZm8+IF9nZXRSYW5rZWRTdXBlcmNsYXNzSW5mb3MoX0NsYXNzSW5mbyBpbmZvKSB7CiAgICBpZiAoaW5mby5sZWFzdFVwcGVyQm91bmRJbmZvcyAhPSBudWxsKSByZXR1cm4gaW5mby5sZWFzdFVwcGVyQm91bmRJbmZvczsKICAgIHZhciBoZWFwID0gbmV3IF9MdWJIZWFwKCkuLmFkZChpbmZvKTsKICAgIHZhciBjaGFpbiA9IDxfQ2xhc3NJbmZvPltdOwogICAgaW5mby5sZWFzdFVwcGVyQm91bmRJbmZvcyA9IGNoYWluOwogICAgX0NsYXNzSW5mbyBsYXN0SW5mbyA9IG51bGw7CiAgICB3aGlsZSAoaGVhcC5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBuZXh0SW5mbyA9IGhlYXAucmVtb3ZlKCk7CiAgICAgIGlmIChpZGVudGljYWwobmV4dEluZm8sIGxhc3RJbmZvKSkgY29udGludWU7CiAgICAgIGNoYWluLmFkZChuZXh0SW5mbyk7CiAgICAgIGxhc3RJbmZvID0gbmV4dEluZm87CiAgICAgIHZhciBjbGFzc05vZGUgPSBuZXh0SW5mby5jbGFzc05vZGU7CiAgICAgIHZvaWQgYWRkVG9IZWFwKFN1cGVydHlwZSBzdXBlcnR5cGUpIHsKICAgICAgICBoZWFwLmFkZChpbmZvRm9yKHN1cGVydHlwZS5jbGFzc05vZGUpKTsKICAgICAgfQoKICAgICAgaWYgKGNsYXNzTm9kZS5zdXBlcnR5cGUgIT0gbnVsbCkgYWRkVG9IZWFwKGNsYXNzTm9kZS5zdXBlcnR5cGUpOwogICAgICBpZiAoY2xhc3NOb2RlLm1peGVkSW5UeXBlICE9IG51bGwpIGFkZFRvSGVhcChjbGFzc05vZGUubWl4ZWRJblR5cGUpOwogICAgICBjbGFzc05vZGUuaW1wbGVtZW50ZWRUeXBlcy5mb3JFYWNoKGFkZFRvSGVhcCk7CiAgICB9CiAgICByZXR1cm4gY2hhaW47CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZCgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlMSwgSW50ZXJmYWNlVHlwZSB0eXBlMikgewogICAgLy8gVGhlIGFsZ29yaXRobSBpczogZmlyc3Qgd2UgY29tcHV0ZSBhIGxpc3Qgb2Ygc3VwZXJjbGFzc2VzIGZvciBib3RoIHR5cGVzLAogICAgLy8gb3JkZXJlZCBmcm9tIGdyZWF0ZXN0IHRvIGxlYXN0IGRlcHRoLCBhbmQgb3JkZXJlZCBieSB0b3BvbG9naWNhbCBzb3J0CiAgICAvLyBpbmRleCB3aXRoaW4gZWFjaCBkZXB0aC4gIER1ZSB0byB0aGUgc29ydCBvcmRlciwgd2UgY2FuIGZpbmQgdGhlCiAgICAvLyBpbnRlcnNlY3Rpb24gb2YgdGhlc2UgbGlzdHMgYnkgYSBzaW1wbGUgd2Fsay4KICAgIC8vCiAgICAvLyBUaGVuLCBmb3IgZWFjaCBjbGFzcyBpbiB0aGUgaW50ZXJzZWN0aW9uLCBkZXRlcm1pbmUgdGhlIGV4YWN0IHR5cGUgdGhhdAogICAgLy8gaXMgaW1wbGVtZW50ZWQgYnkgdHlwZTEgYW5kIHR5cGUyLiAgSWYgdGhlIHR5cGVzIG1hdGNoLCB0aGF0IHR5cGUgaXMgYQogICAgLy8gY2FuZGlkYXRlIChpdCdzIGEgbWVtYmVyIG9mIFNfbikuICBBcyBzb29uIGFzIHdlIGZpbmQgYSBjYW5kaWRhdGUgd2hpY2gKICAgIC8vIGlzIHVuaXF1ZSBmb3IgaXRzIGRlcHRoLCB3ZSByZXR1cm4gaXQuCiAgICAvLwogICAgLy8gQXMgYW4gb3B0aW1pemF0aW9uLCBpZiB0aGUgY2xhc3MgZm9yIEkgaXMgYSBzdWJ0eXBlIG9mIHRoZSBjbGFzcyBmb3IgSiwKICAgIC8vIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBsaXN0IG9mIHN1cGVyY2xhc3NlcyBvZiBKIGlzIGEgc3Vic2V0IG9mIHRoZSBsaXN0CiAgICAvLyBvZiBzdXBlcmNsYXNzZXMgZm9yIEk7IHRoZXJlZm9yZSBpdCBpcyBzdWZmaWNpZW50IHRvIGNvbXB1dGUganVzdCB0aGUKICAgIC8vIGxpc3Qgb2Ygc3VwZXJjbGFzc2VzIGZvciBKLiAgVG8gYXZvaWQgY29tcGxpY2F0aW5nIHRoZSBjb2RlIGJlbG93ICh3aGljaAogICAgLy8gaW50ZXJzZWN0cyB0aGUgdHdvIGxpc3RzKSwgd2Ugc2V0IGJvdGggbGlzdHMgZXF1YWwgdG8gdGhlIGxpc3Qgb2YKICAgIC8vIHN1cGVyY2xhc3NlcyBmb3IgSi4gIEFuZCB2aWNlIHZlcnNhIHdpdGggdGhlIHJvbGUgb2YgSSBhbmQgSiBzd2FwcGVkLgoKICAgIC8vIENvbXB1dGUgdGhlIGxpc3Qgb2Ygc3VwZXJjbGFzc2VzIGZvciBib3RoIHR5cGVzLCB3aXRoIHRoZSBhYm92ZQogICAgLy8gb3B0aW1pemF0aW9uLgogICAgX0NsYXNzSW5mbyBpbmZvMSA9IGluZm9Gb3IodHlwZTEuY2xhc3NOb2RlKTsKICAgIF9DbGFzc0luZm8gaW5mbzIgPSBpbmZvRm9yKHR5cGUyLmNsYXNzTm9kZSk7CiAgICBMaXN0PF9DbGFzc0luZm8+IGNsYXNzZXMxOwogICAgTGlzdDxfQ2xhc3NJbmZvPiBjbGFzc2VzMjsKICAgIGlmIChpZGVudGljYWwoaW5mbzEsIGluZm8yKSB8fCBpbmZvMS5pc1N1YnR5cGVPZihpbmZvMikpIHsKICAgICAgY2xhc3NlczEgPSBjbGFzc2VzMiA9IF9nZXRSYW5rZWRTdXBlcmNsYXNzSW5mb3MoaW5mbzIpOwogICAgfSBlbHNlIGlmIChpbmZvMi5pc1N1YnR5cGVPZihpbmZvMSkpIHsKICAgICAgY2xhc3NlczEgPSBjbGFzc2VzMiA9IF9nZXRSYW5rZWRTdXBlcmNsYXNzSW5mb3MoaW5mbzEpOwogICAgfSBlbHNlIHsKICAgICAgY2xhc3NlczEgPSBfZ2V0UmFua2VkU3VwZXJjbGFzc0luZm9zKGluZm8xKTsKICAgICAgY2xhc3NlczIgPSBfZ2V0UmFua2VkU3VwZXJjbGFzc0luZm9zKGluZm8yKTsKICAgIH0KCiAgICAvLyBXYWxrIHRoZSBsaXN0cyBmaW5kaW5nIHRoZWlyIGludGVyc2VjdGlvbiwgbG9va2luZyBmb3IgYSBkZXB0aCB0aGF0IGhhcyBhCiAgICAvLyBzaW5nbGUgY2FuZGlkYXRlLgogICAgaW50IGkxID0gMDsKICAgIGludCBpMiA9IDA7CiAgICBJbnRlcmZhY2VUeXBlIGNhbmRpZGF0ZSA9IG51bGw7CiAgICBpbnQgY3VycmVudERlcHRoID0gLTE7CiAgICBpbnQgbnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRoID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIF9DbGFzc0luZm8gbmV4dCA9IGNsYXNzZXMxW2kxXTsKICAgICAgX0NsYXNzSW5mbyBuZXh0MiA9IGNsYXNzZXMyW2kyXTsKICAgICAgaWYgKCFpZGVudGljYWwobmV4dCwgbmV4dDIpKSB7CiAgICAgICAgaWYgKF9MdWJIZWFwLnNvcnRzQmVmb3JlU3RhdGljKG5leHQsIG5leHQyKSkgewogICAgICAgICAgKytpMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgKytpMjsKICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgKytpMjsKICAgICAgKytpMTsKICAgICAgaWYgKG5leHQuZGVwdGggIT0gY3VycmVudERlcHRoKSB7CiAgICAgICAgaWYgKG51bUNhbmRpZGF0ZXNBdFRoaXNEZXB0aCA9PSAxKSByZXR1cm4gY2FuZGlkYXRlOwogICAgICAgIGN1cnJlbnREZXB0aCA9IG5leHQuZGVwdGg7CiAgICAgICAgbnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRoID0gMDsKICAgICAgICBjYW5kaWRhdGUgPSBudWxsOwogICAgICB9IGVsc2UgaWYgKG51bUNhbmRpZGF0ZXNBdFRoaXNEZXB0aCA+IDEpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgLy8gRm9yIGVhY2ggY2xhc3MgaW4gdGhlIGludGVyc2VjdGlvbiwgZmluZCB0aGUgZXhhY3QgdHlwZSB0aGF0IGlzCiAgICAgIC8vIGltcGxlbWVudGVkIGJ5IHR5cGUxIGFuZCB0eXBlMi4gIElmIHRoZXkgbWF0Y2gsIGl0J3MgYSBjYW5kaWRhdGUuCiAgICAgIC8vCiAgICAgIC8vIFR3byBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnM6CiAgICAgIC8vCiAgICAgIC8vIC0gSWYgdGhpcyBjbGFzcyBsYWNrcyB0eXBlIHBhcmFtZXRlcnMsIHdlIGtub3cgdGhlcmUgaXMgYSBtYXRjaCB3aXRob3V0CiAgICAgIC8vICAgbmVlZGluZyB0byBzdWJzdGl0dXRlLgogICAgICAvLwogICAgICAvLyAtIElmIHRoZSBkZXB0aCBpcyAwLCB3ZSBoYXZlIHJlYWNoZWQgT2JqZWN0LCBzbyB3ZSBjYW4gcmV0dXJuIGl0CiAgICAgIC8vICAgaW1tZWRpYXRlbHkuICBTaW5jZSBhbGwgaW50ZXJmYWNlIHR5cGVzIGFyZSBzdWJ0eXBlcyBvZiBPYmplY3QsIHRoaXMKICAgICAgLy8gICBlbnN1cmVzIHRoZSBsb29wIHRlcm1pbmF0ZXMuCiAgICAgIGlmIChuZXh0LmNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgY2FuZGlkYXRlID0gbmV4dC5jbGFzc05vZGUucmF3VHlwZTsKICAgICAgICBpZiAoY3VycmVudERlcHRoID09IDApIHJldHVybiBjYW5kaWRhdGU7CiAgICAgICAgKytudW1DYW5kaWRhdGVzQXRUaGlzRGVwdGg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHN1cGVyVHlwZTEgPSBpZGVudGljYWwoaW5mbzEsIG5leHQpCiAgICAgICAgICAgID8gdHlwZTEKICAgICAgICAgICAgOiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUodHlwZTEpLnN1YnN0aXR1dGVUeXBlKAogICAgICAgICAgICAgICAgaW5mbzEuZ2VuZXJpY1N1cGVyVHlwZXNbbmV4dC5jbGFzc05vZGVdLmZpcnN0LmFzSW50ZXJmYWNlVHlwZSk7CiAgICAgICAgdmFyIHN1cGVyVHlwZTIgPSBpZGVudGljYWwoaW5mbzIsIG5leHQpCiAgICAgICAgICAgID8gdHlwZTIKICAgICAgICAgICAgOiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUodHlwZTIpLnN1YnN0aXR1dGVUeXBlKAogICAgICAgICAgICAgICAgaW5mbzIuZ2VuZXJpY1N1cGVyVHlwZXNbbmV4dC5jbGFzc05vZGVdLmZpcnN0LmFzSW50ZXJmYWNlVHlwZSk7CiAgICAgICAgaWYgKHN1cGVyVHlwZTEgPT0gc3VwZXJUeXBlMikgewogICAgICAgICAgY2FuZGlkYXRlID0gc3VwZXJUeXBlMTsKICAgICAgICAgICsrbnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRoOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3VwZXJ0eXBlIGdldENsYXNzQXNJbnN0YW5jZU9mKENsYXNzIGNsYXNzXywgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgaWYgKGlkZW50aWNhbChjbGFzc18sIHN1cGVyY2xhc3MpKSByZXR1cm4gY2xhc3NfLmFzVGhpc1N1cGVydHlwZTsKICAgIF9DbGFzc0luZm8gaW5mbyA9IGluZm9Gb3IoY2xhc3NfKTsKICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgdGhyb3cgIiR7Y2xhc3NfLmZpbGVVcml9OiBObyBjbGFzcyBpbmZvIGZvciAke2NsYXNzXy5uYW1lfSI7CiAgICB9CiAgICBfQ2xhc3NJbmZvIHN1cGVySW5mbyA9IGluZm9Gb3Ioc3VwZXJjbGFzcyk7CiAgICBpZiAoc3VwZXJJbmZvID09IG51bGwpIHsKICAgICAgdGhyb3cgIiR7c3VwZXJjbGFzcy5maWxlVXJpfTogTm8gY2xhc3MgaW5mbyBmb3IgJHtzdXBlcmNsYXNzLm5hbWV9IjsKICAgIH0KICAgIGlmICghaW5mby5pc1N1YnR5cGVPZihzdXBlckluZm8pKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBzdXBlcmNsYXNzLmFzUmF3U3VwZXJ0eXBlOwogICAgcmV0dXJuIGluZm8uZ2VuZXJpY1N1cGVyVHlwZXNbc3VwZXJjbGFzc10/LmZpcnN0OwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgU3VwZXJ0eXBlIGNhc3RlZFR5cGUgPSBnZXRDbGFzc0FzSW5zdGFuY2VPZih0eXBlLmNsYXNzTm9kZSwgc3VwZXJjbGFzcyk7CiAgICBpZiAoY2FzdGVkVHlwZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUodHlwZSkKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoY2FzdGVkVHlwZS5hc0ludGVyZmFjZVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyIGdldERpc3BhdGNoVGFyZ2V0KENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgX0NsYXNzSW5mbyBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgTGlzdDxNZW1iZXI+IGxpc3QgPQogICAgICAgIHNldHRlciA/IGluZm8uaW1wbGVtZW50ZWRTZXR0ZXJzIDogaW5mby5pbXBsZW1lbnRlZEdldHRlcnNBbmRDYWxsczsKICAgIHJldHVybiBDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGxpc3QsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxNZW1iZXI+IGdldERpc3BhdGNoVGFyZ2V0cyhDbGFzcyBjbGFzc18sIHtib29sIHNldHRlcnM6IGZhbHNlfSkgewogICAgX0NsYXNzSW5mbyBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgcmV0dXJuIHNldHRlcnMgPyBpbmZvLmltcGxlbWVudGVkU2V0dGVycyA6IGluZm8uaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHM7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXIgZ2V0SW50ZXJmYWNlTWVtYmVyKENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgTGlzdDxNZW1iZXI+IGxpc3QgPSBnZXRJbnRlcmZhY2VNZW1iZXJzKGNsYXNzXywgc2V0dGVyczogc2V0dGVyKTsKICAgIHJldHVybiBDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGxpc3QsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxNZW1iZXI+IGdldEludGVyZmFjZU1lbWJlcnMoQ2xhc3MgY2xhc3NfLCB7Ym9vbCBzZXR0ZXJzOiBmYWxzZX0pIHsKICAgIHJldHVybiBfYnVpbGRJbnRlcmZhY2VNZW1iZXJzKGNsYXNzXywgaW5mb0ZvcihjbGFzc18pLCBzZXR0ZXJzOiBzZXR0ZXJzKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8TWVtYmVyPiBnZXREZWNsYXJlZE1lbWJlcnMoQ2xhc3MgY2xhc3NfLCB7Ym9vbCBzZXR0ZXJzOiBmYWxzZX0pIHsKICAgIHZhciBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgcmV0dXJuIHNldHRlcnMgPyBpbmZvLmRlY2xhcmVkU2V0dGVycyA6IGluZm8uZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hPdmVycmlkZVBhaXIoQ2xhc3MgY2xhc3NfLAogICAgICBjYWxsYmFjayhNZW1iZXIgZGVjbGFyZWRNZW1iZXIsIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIsIGJvb2wgaXNTZXR0ZXIpLAogICAgICB7Ym9vbCBjcm9zc0dldHRlcnNTZXR0ZXJzOiBmYWxzZX0pIHsKICAgIF9DbGFzc0luZm8gaW5mbyA9IGluZm9Gb3IoY2xhc3NfKTsKICAgIGZvciAodmFyIHN1cGVydHlwZSBpbiBjbGFzc18uc3VwZXJzKSB7CiAgICAgIHZhciBzdXBlcmNsYXNzID0gc3VwZXJ0eXBlLmNsYXNzTm9kZTsKICAgICAgdmFyIHN1cGVyR2V0dGVycyA9IGdldEludGVyZmFjZU1lbWJlcnMoc3VwZXJjbGFzcyk7CiAgICAgIHZhciBzdXBlclNldHRlcnMgPSBnZXRJbnRlcmZhY2VNZW1iZXJzKHN1cGVyY2xhc3MsIHNldHRlcnM6IHRydWUpOwogICAgICBfcmVwb3J0T3ZlcnJpZGVzKGluZm8uZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHMsIHN1cGVyR2V0dGVycywgY2FsbGJhY2spOwogICAgICBfcmVwb3J0T3ZlcnJpZGVzKGluZm8uZGVjbGFyZWRTZXR0ZXJzLCBzdXBlclNldHRlcnMsIGNhbGxiYWNrLAogICAgICAgICAgaXNTZXR0ZXI6IHRydWUpOwogICAgfQogIH0KCiAgc3RhdGljIHZvaWQgX3JlcG9ydE92ZXJyaWRlcygKICAgICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkTGlzdCwKICAgICAgTGlzdDxNZW1iZXI+IGluaGVyaXRlZExpc3QsCiAgICAgIGNhbGxiYWNrKE1lbWJlciBkZWNsYXJlZE1lbWJlciwgTWVtYmVyIGludGVyZmFjZU1lbWJlciwgYm9vbCBpc1NldHRlciksCiAgICAgIHtib29sIGlzU2V0dGVyOiBmYWxzZX0pIHsKICAgIGludCBpID0gMCwgaiA9IDA7CiAgICB3aGlsZSAoaSA8IGRlY2xhcmVkTGlzdC5sZW5ndGggJiYgaiA8IGluaGVyaXRlZExpc3QubGVuZ3RoKSB7CiAgICAgIE1lbWJlciBkZWNsYXJlZCA9IGRlY2xhcmVkTGlzdFtpXTsKICAgICAgTWVtYmVyIGluaGVyaXRlZCA9IGluaGVyaXRlZExpc3Rbal07CiAgICAgIGludCBjb21wYXJpc29uID0gQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU1lbWJlcnMoZGVjbGFyZWQsIGluaGVyaXRlZCk7CiAgICAgIGlmIChjb21wYXJpc29uIDwgMCkgewogICAgICAgICsraTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uID4gMCkgewogICAgICAgICsrajsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWlkZW50aWNhbChkZWNsYXJlZCwgaW5oZXJpdGVkKSkgewogICAgICAgICAgY2FsbGJhY2soZGVjbGFyZWQsIGluaGVyaXRlZCwgaXNTZXR0ZXIpOwogICAgICAgIH0KICAgICAgICAvLyBBIGdpdmVuIGRlY2xhcmVkIG1lbWJlciBtYXkgb3ZlcnJpZGUgbXVsdGlwbGUgaW50ZXJmYWNlIG1lbWJlcnMsCiAgICAgICAgLy8gc28gb25seSBtb3ZlIHBhc3QgdGhlIGludGVyZmFjZSBtZW1iZXIuCiAgICAgICAgKytqOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PFN1cGVydHlwZT4gZ2VuZXJpY1N1cGVydHlwZXNPZihDbGFzcyBjbGFzc18pIHsKICAgIGZpbmFsIHN1cGVydHlwZXMgPSBpbmZvRm9yKGNsYXNzXykuZ2VuZXJpY1N1cGVyVHlwZXM7CiAgICBpZiAoc3VwZXJ0eXBlcyA9PSBudWxsKSByZXR1cm4gY29uc3QgPFN1cGVydHlwZT5bXTsKICAgIC8vIE11bHRpcGxlIHN1cGVydHlwZXMgY2FuIGFyaXNlIGZyb20gYW1iaWd1b3VzIHN1cGVydHlwZXMuIFRoZSBmaXJzdAogICAgLy8gc3VwZXJ0eXBlIGlzIHRoZSByZWFsIG9uZTsgdGhlIG90aGVycyBhcmUgcHVyZWx5IGluZm9ybWF0aW9uYWwuCiAgICByZXR1cm4gc3VwZXJ0eXBlcy52YWx1ZXMubWFwKCh2KSA9PiB2LmZpcnN0KS50b0xpc3QoKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzSGllcmFyY2h5IGFwcGx5VHJlZUNoYW5nZXMoSXRlcmFibGU8TGlicmFyeT4gcmVtb3ZlZExpYnJhcmllcywKICAgICAgSXRlcmFibGU8TGlicmFyeT4gZW5zdXJlS25vd25MaWJyYXJpZXMsCiAgICAgIHtDb21wb25lbnQgcmVpc3N1ZUFtYmlndW91c1N1cGVydHlwZXNGb3J9KSB7CiAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHJlbW92ZWQgY2xhc3Nlcy4KICAgIGZvciAoTGlicmFyeSBsaWIgaW4gcmVtb3ZlZExpYnJhcmllcykgewogICAgICBpZiAoIWtub3duTGlicmFyaWVzLmNvbnRhaW5zKGxpYikpIGNvbnRpbnVlOwogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBsaWIuY2xhc3NlcykgewogICAgICAgIF9DbGFzc0luZm8gaW5mbyA9IF9pbmZvTWFwW2NsYXNzX107CiAgICAgICAgaWYgKGNsYXNzXy5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICAgICAgX2luZm9NYXBbY2xhc3NfLnN1cGVydHlwZS5jbGFzc05vZGVdPy5kaXJlY3RFeHRlbmRlcnM/LnJlbW92ZShpbmZvKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNsYXNzXy5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBfaW5mb01hcFtjbGFzc18ubWl4ZWRJblR5cGUuY2xhc3NOb2RlXT8uZGlyZWN0TWl4ZXJzPy5yZW1vdmUoaW5mbyk7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIHN1cGVydHlwZSBpbiBjbGFzc18uaW1wbGVtZW50ZWRUeXBlcykgewogICAgICAgICAgX2luZm9NYXBbc3VwZXJ0eXBlLmNsYXNzTm9kZV0/LmRpcmVjdEltcGxlbWVudGVycz8ucmVtb3ZlKGluZm8pOwogICAgICAgIH0KCiAgICAgICAgX2luZm9NYXAucmVtb3ZlKGNsYXNzXyk7CiAgICAgICAgX3JlY29yZGVkQW1iaWd1b3VzU3VwZXJ0eXBlcy5yZW1vdmUoY2xhc3NfKTsKICAgICAgfQogICAgICBrbm93bkxpYnJhcmllcy5yZW1vdmUobGliKTsKICAgIH0KCiAgICAvLyBJZiB3ZSBoYXZlIGEgY2FjaGVkIGNvbXB1dGF0aW9uIG9mIHN1YnR5cGVzLCBpbnZhbGlkYXRlIGl0IGFuZCBzdG9wCiAgICAvLyBjYWNoaW5nIGl0LgogICAgaWYgKF9jYWNoZWRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzICE9IG51bGwpIHsKICAgICAgX2NhY2hlZENsYXNzSGllcmFyY2h5U3VidHlwZXMuaW52YWxpZGF0ZWQgPSB0cnVlOwogICAgfQoKICAgIGlmIChfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzLmlzTm90RW1wdHkgJiYKICAgICAgICByZWlzc3VlQW1iaWd1b3VzU3VwZXJ0eXBlc0ZvciAhPSBudWxsKSB7CiAgICAgIFNldDxMaWJyYXJ5PiBsaWJzID0KICAgICAgICAgIG5ldyBTZXQ8TGlicmFyeT4uZnJvbShyZWlzc3VlQW1iaWd1b3VzU3VwZXJ0eXBlc0Zvci5saWJyYXJpZXMpOwogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzLmtleXMpIHsKICAgICAgICBpZiAoIWxpYnMuY29udGFpbnMoY2xhc3NfLmVuY2xvc2luZ0xpYnJhcnkpKSBjb250aW51ZTsKICAgICAgICBMaXN0PFN1cGVydHlwZT4gcmVjb3JkZWQgPSBfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzW2NsYXNzX107CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNvcmRlZC5sZW5ndGg7IGkgKz0gMikgewogICAgICAgICAgX29uQW1iaWd1b3VzU3VwZXJ0eXBlc05vdFdyYXBwZWQoCiAgICAgICAgICAgICAgY2xhc3NfLCByZWNvcmRlZFtpXSwgcmVjb3JkZWRbaSArIDFdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBBZGQgdGhlIG5ldyBjbGFzc2VzLgogICAgTGlzdDxDbGFzcz4gYWRkZWRDbGFzc2VzU29ydGVkID0gbmV3IExpc3Q8Q2xhc3M+KCk7CiAgICBpbnQgZXhwZWN0ZWRTdGFydEluZGV4ID0gX3RvcFNvcnRJbmRleDsKICAgIGZvciAoTGlicmFyeSBsaWIgaW4gZW5zdXJlS25vd25MaWJyYXJpZXMpIHsKICAgICAgaWYgKGtub3duTGlicmFyaWVzLmNvbnRhaW5zKGxpYikpIGNvbnRpbnVlOwogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBsaWIuY2xhc3NlcykgewogICAgICAgIF90b3BvbG9naWNhbFNvcnRWaXNpdChjbGFzc18sIG5ldyBTZXQ8Q2xhc3M+KCksCiAgICAgICAgICAgIG9yZGVyZWRMaXN0OiBhZGRlZENsYXNzZXNTb3J0ZWQpOwogICAgICB9CiAgICAgIGtub3duTGlicmFyaWVzLmFkZChsaWIpOwogICAgfQogICAgX2luaXRpYWxpemVUb3BvbG9naWNhbGx5U29ydGVkQ2xhc3NlcygKICAgICAgICBhZGRlZENsYXNzZXNTb3J0ZWQsIGV4cGVjdGVkU3RhcnRJbmRleCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0hpZXJhcmNoeSBhcHBseU1lbWJlckNoYW5nZXMoSXRlcmFibGU8Q2xhc3M+IGNsYXNzZXMsCiAgICAgIHtib29sIGZpbmREZXNjZW5kYW50czogZmFsc2V9KSB7CiAgICBpZiAoY2xhc3Nlcy5pc0VtcHR5KSByZXR1cm4gdGhpczsKCiAgICBMaXN0PF9DbGFzc0luZm8+IGluZm9zID0gbmV3IExpc3Q8X0NsYXNzSW5mbz4oKTsKICAgIGlmIChmaW5kRGVzY2VuZGFudHMpIHsKICAgICAgU2V0PF9DbGFzc0luZm8+IHByb2Nlc3NlZENsYXNzZXMgPSBuZXcgU2V0PF9DbGFzc0luZm8+KCk7CiAgICAgIExpc3Q8X0NsYXNzSW5mbz4gd29ya2xpc3QgPSA8X0NsYXNzSW5mbz5bXTsKICAgICAgZm9yIChDbGFzcyBjbGFzc18gaW4gY2xhc3NlcykgewogICAgICAgIF9DbGFzc0luZm8gaW5mbyA9IGluZm9Gb3IoY2xhc3NfKTsKICAgICAgICB3b3JrbGlzdC5hZGQoaW5mbyk7CiAgICAgIH0KCiAgICAgIHdoaWxlICh3b3JrbGlzdC5pc05vdEVtcHR5KSB7CiAgICAgICAgX0NsYXNzSW5mbyBpbmZvID0gd29ya2xpc3QucmVtb3ZlTGFzdCgpOwogICAgICAgIGlmIChwcm9jZXNzZWRDbGFzc2VzLmFkZChpbmZvKSkgewogICAgICAgICAgd29ya2xpc3QuYWRkQWxsKGluZm8uZGlyZWN0RXh0ZW5kZXJzKTsKICAgICAgICAgIHdvcmtsaXN0LmFkZEFsbChpbmZvLmRpcmVjdEltcGxlbWVudGVycyk7CiAgICAgICAgICB3b3JrbGlzdC5hZGRBbGwoaW5mby5kaXJlY3RNaXhlcnMpOwogICAgICAgIH0KICAgICAgfQogICAgICBpbmZvcy5hZGRBbGwocHJvY2Vzc2VkQ2xhc3Nlcyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBjbGFzc2VzKSB7CiAgICAgICAgX0NsYXNzSW5mbyBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgICAgIGluZm9zLmFkZChpbmZvKTsKICAgICAgfQogICAgfQoKICAgIGluZm9zLnNvcnQoKF9DbGFzc0luZm8gYSwgX0NsYXNzSW5mbyBiKSB7CiAgICAgIHJldHVybiBhLnRvcG9sb2dpY2FsSW5kZXggLSBiLnRvcG9sb2dpY2FsSW5kZXg7CiAgICB9KTsKCiAgICBmb3IgKF9DbGFzc0luZm8gaW5mbyBpbiBpbmZvcykgewogICAgICBDbGFzcyBjbGFzc18gPSBpbmZvLmNsYXNzTm9kZTsKICAgICAgX2J1aWxkRGVjbGFyZWRNZW1iZXJzKGNsYXNzXywgaW5mbyk7CiAgICAgIF9idWlsZEltcGxlbWVudGVkTWVtYmVycyhjbGFzc18sIGluZm8pOwogICAgICBpbmZvLmludGVyZmFjZVNldHRlcnMgPSBudWxsOwogICAgICBpbmZvLmludGVyZmFjZUdldHRlcnNBbmRDYWxscyA9IG51bGw7CiAgICAgIF9idWlsZEludGVyZmFjZU1lbWJlcnMoY2xhc3NfLCBpbmZvLCBzZXR0ZXJzOiB0cnVlKTsKICAgICAgX2J1aWxkSW50ZXJmYWNlTWVtYmVycyhjbGFzc18sIGluZm8sIHNldHRlcnM6IGZhbHNlKTsKICAgIH0KCiAgICBhc3NlcnQoc2FuaXR5Q2hlY2tBbHNvS25vd3NQYXJlbnRBbmRMaWJyYXJ5KCkpOwoKICAgIHJldHVybiB0aGlzOwogIH0KCiAgYm9vbCBzYW5pdHlDaGVja0Fsc29Lbm93c1BhcmVudEFuZExpYnJhcnkoKSB7CiAgICBmb3IgKENsYXNzIGMgaW4gX2luZm9NYXAua2V5cykgewogICAgICBpZiAoIWtub3duTGlicmFyaWVzLmNvbnRhaW5zKGMuZW5jbG9zaW5nTGlicmFyeSkpIHsKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiRGlkbid0IGtub3cgbGlicmFyeSBvZiAkYyAoZnJvbSAke2MuZmlsZVVyaX0pIik7CiAgICAgIH0KICAgICAgaWYgKGMuc3VwZXJ0eXBlICE9IG51bGwgJiYgX2luZm9NYXBbYy5zdXBlcnR5cGUuY2xhc3NOb2RlXSA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkRpZG4ndCBrbm93IHBhcmVudCBvZiAkYyAoZnJvbSAke2MuZmlsZVVyaX0pIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3VwZXJ0eXBlIGFzSW5zdGFudGlhdGlvbk9mKFN1cGVydHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0VHlwZUFzSW5zdGFuY2VPZiwgZXhjZXB0IHRoYXQgaXQgYXNzdW1lcyB0aGF0CiAgICAvLyBzdXBlcmNsYXNzIGlzIGEgZ2VuZXJpYyBjbGFzcy4gIEl0IHRodXMgZG9lcyBub3QgcmVseSBvbiBiZWluZyBhYmxlCiAgICAvLyB0byBhbnN3ZXIgaXNTdWJ0eXBlT2YgcXVlcmllcyBhbmQgc28gY2FuIGJlIHVzZWQgYmVmb3JlIHdlIGhhdmUgYnVpbHQKICAgIC8vIHRoZSBpbnRlcnZhbHMgbmVlZGVkIGZvciB0aG9zZSBxdWVyaWVzLgogICAgYXNzZXJ0KHN1cGVyY2xhc3MudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSk7CiAgICBpZiAodHlwZS5jbGFzc05vZGUgPT0gc3VwZXJjbGFzcykgewogICAgICByZXR1cm4gc3VwZXJjbGFzcy5hc1RoaXNTdXBlcnR5cGU7CiAgICB9CiAgICB2YXIgbWFwID0gaW5mb0Zvcih0eXBlLmNsYXNzTm9kZSk/LmdlbmVyaWNTdXBlclR5cGVzOwogICAgcmV0dXJuIG1hcCA9PSBudWxsID8gbnVsbCA6IG1hcFtzdXBlcmNsYXNzXT8uZmlyc3Q7CiAgfQoKICB2b2lkIF9pbml0aWFsaXplKExpc3Q8TGlicmFyeT4gbGlicmFyaWVzKSB7CiAgICAvLyBCdWlsZCB0aGUgY2xhc3Mgb3JkZXJpbmcgYmFzZWQgb24gYSB0b3BvbG9naWNhbCBzb3J0LgogICAgZm9yICh2YXIgbGlicmFyeSBpbiBsaWJyYXJpZXMpIHsKICAgICAgZm9yICh2YXIgY2xhc3NOb2RlIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIF90b3BvbG9naWNhbFNvcnRWaXNpdChjbGFzc05vZGUsIG5ldyBTZXQ8Q2xhc3M+KCkpOwogICAgICB9CiAgICAgIGtub3duTGlicmFyaWVzLmFkZChsaWJyYXJ5KTsKICAgIH0KCiAgICBfaW5pdGlhbGl6ZVRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzKF9pbmZvTWFwLmtleXMsIDApOwogIH0KCiAgLy8vIC0gQnVpbGQgaW5kZXggb2YgZGlyZWN0IGNoaWxkcmVuLgogIC8vLyAtIEJ1aWxkIGxpc3Qgb2Ygc3VwZXIgY2xhc3NlcyBhbmQgc3VwZXIgdHlwZXMuCiAgLy8vIC0gSW5mZXIgYW5kIHJlY29yZCBzdXBlcnR5cGVzIGZvciB0aGUgY2xhc3Nlcy4KICAvLy8gLSBSZWNvcmQgaW50ZXJmYWNlIG1lbWJlcnMuCiAgLy8vIC0gUGVyZm9ybSBzb21lIHNhbml0eSBjaGVja2luZy4KICAvLy8gRG8gdGhpcyBhZnRlciB0aGUgdG9wb2xvZ2ljYWwgc29ydCBzbyB0aGF0IHN1cGVyIHR5cGVzIGFsd2F5cyBvY2N1cgogIC8vLyBiZWZvcmUgc3VidHlwZXMuCiAgdm9pZCBfaW5pdGlhbGl6ZVRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzKAogICAgICBJdGVyYWJsZTxDbGFzcz4gY2xhc3NlcywgaW50IGV4cGVjdGVkU3RhcnRpbmdUb3BvbG9naWNhbEluZGV4KSB7CiAgICBpbnQgaSA9IGV4cGVjdGVkU3RhcnRpbmdUb3BvbG9naWNhbEluZGV4OwogICAgZm9yIChDbGFzcyBjbGFzc18gaW4gY2xhc3NlcykgewogICAgICBfQ2xhc3NJbmZvIGluZm8gPSBfaW5mb01hcFtjbGFzc19dOwogICAgICBpZiAoY2xhc3NfLnN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgICAgX2luZm9NYXBbY2xhc3NfLnN1cGVydHlwZS5jbGFzc05vZGVdLmRpcmVjdEV4dGVuZGVycy5hZGQoaW5mbyk7CiAgICAgIH0KICAgICAgaWYgKGNsYXNzXy5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgICAgX2luZm9NYXBbY2xhc3NfLm1peGVkSW5UeXBlLmNsYXNzTm9kZV0uZGlyZWN0TWl4ZXJzLmFkZChpbmZvKTsKICAgICAgfQogICAgICBmb3IgKHZhciBzdXBlcnR5cGUgaW4gY2xhc3NfLmltcGxlbWVudGVkVHlwZXMpIHsKICAgICAgICBfaW5mb01hcFtzdXBlcnR5cGUuY2xhc3NOb2RlXS5kaXJlY3RJbXBsZW1lbnRlcnMuYWRkKGluZm8pOwogICAgICB9CiAgICAgIF9jb2xsZWN0U3VwZXJzRm9yQ2xhc3MoY2xhc3NfKTsKCiAgICAgIGlmIChjbGFzc18uc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICBfcmVjb3JkU3VwZXJUeXBlcyhpbmZvLCBjbGFzc18uc3VwZXJ0eXBlKTsKICAgICAgfQogICAgICBpZiAoY2xhc3NfLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICBtaXhpbkluZmVycmVyPy5pbmZlcih0aGlzLCBjbGFzc18pOwogICAgICAgIF9yZWNvcmRTdXBlclR5cGVzKGluZm8sIGNsYXNzXy5taXhlZEluVHlwZSk7CiAgICAgIH0KICAgICAgZm9yIChTdXBlcnR5cGUgc3VwZXJ0eXBlIGluIGNsYXNzXy5pbXBsZW1lbnRlZFR5cGVzKSB7CiAgICAgICAgX3JlY29yZFN1cGVyVHlwZXMoaW5mbywgc3VwZXJ0eXBlKTsKICAgICAgfQoKICAgICAgX2J1aWxkSW50ZXJmYWNlTWVtYmVycyhjbGFzc18sIGluZm8sIHNldHRlcnM6IHRydWUpOwogICAgICBfYnVpbGRJbnRlcmZhY2VNZW1iZXJzKGNsYXNzXywgaW5mbywgc2V0dGVyczogZmFsc2UpOwoKICAgICAgaWYgKGluZm8gPT0gbnVsbCkgewogICAgICAgIHRocm93ICJObyBpbmZvIGZvciAke2NsYXNzXy5uYW1lfSBmcm9tICR7Y2xhc3NfLmZpbGVVcml9LiI7CiAgICAgIH0KICAgICAgaWYgKGluZm8udG9wb2xvZ2ljYWxJbmRleCAhPSBpKSB7CiAgICAgICAgdGhyb3cgIlVuZXhwZWN0ZWQgdG9wb2xvZ2ljYWxJbmRleCAoJHtpbmZvLnRvcG9sb2dpY2FsSW5kZXh9ICE9ICRpKSAiCiAgICAgICAgICAgICJmb3IgJHtjbGFzc18ubmFtZX0gZnJvbSAke2NsYXNzXy5maWxlVXJpfS4iOwogICAgICB9CiAgICAgIGkrKzsKICAgIH0KICB9CgogIC8vLyBVcHdhcmRzIHRyYXZlcnNhbCBvZiB0aGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgb3JkZXJzIGNsYXNzZXMgc28gc3VwZXIKICAvLy8gdHlwZXMgYmVmb3JlIHRoZWlyIHN1YnR5cGVzLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgdmlzaXRlZCBjbGFzcyAodGhlIG51bWJlciBvZiBzdGVwcyBpbiB0aGUgbG9uZ2VzdAogIC8vLyBpbmhlcml0YW5jZSBwYXRoIHRvIHRoZSByb290IGNsYXNzKS4KICBpbnQgX3RvcFNvcnRJbmRleCA9IDA7CiAgaW50IF90b3BvbG9naWNhbFNvcnRWaXNpdChDbGFzcyBjbGFzc05vZGUsIFNldDxDbGFzcz4gYmVpbmdWaXNpdGVkLAogICAgICB7TGlzdDxDbGFzcz4gb3JkZXJlZExpc3R9KSB7CiAgICB2YXIgaW5mbyA9IF9pbmZvTWFwW2NsYXNzTm9kZV07CiAgICBpZiAoaW5mbyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBpbmZvLmRlcHRoOwogICAgfQoKICAgIGlmICghYmVpbmdWaXNpdGVkLmFkZChjbGFzc05vZGUpKSB7CiAgICAgIHRocm93ICdDeWNsaWMgaW5oZXJpdGFuY2UgaW52b2x2aW5nICR7Y2xhc3NOb2RlLm5hbWV9JzsKICAgIH0KCiAgICBpbmZvID0gbmV3IF9DbGFzc0luZm8oY2xhc3NOb2RlKTsKCiAgICBpbnQgc3VwZXJEZXB0aCA9IC0xOwogICAgaWYgKGNsYXNzTm9kZS5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICBzdXBlckRlcHRoID0gbWF4KAogICAgICAgICAgc3VwZXJEZXB0aCwKICAgICAgICAgIF90b3BvbG9naWNhbFNvcnRWaXNpdChjbGFzc05vZGUuc3VwZXJ0eXBlLmNsYXNzTm9kZSwgYmVpbmdWaXNpdGVkLAogICAgICAgICAgICAgIG9yZGVyZWRMaXN0OiBvcmRlcmVkTGlzdCkpOwogICAgfQogICAgaWYgKGNsYXNzTm9kZS5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIHN1cGVyRGVwdGggPSBtYXgoCiAgICAgICAgICBzdXBlckRlcHRoLAogICAgICAgICAgX3RvcG9sb2dpY2FsU29ydFZpc2l0KGNsYXNzTm9kZS5taXhlZEluVHlwZS5jbGFzc05vZGUsIGJlaW5nVmlzaXRlZCwKICAgICAgICAgICAgICBvcmRlcmVkTGlzdDogb3JkZXJlZExpc3QpKTsKICAgIH0KICAgIGZvciAodmFyIHN1cGVydHlwZSBpbiBjbGFzc05vZGUuaW1wbGVtZW50ZWRUeXBlcykgewogICAgICBzdXBlckRlcHRoID0gbWF4KAogICAgICAgICAgc3VwZXJEZXB0aCwKICAgICAgICAgIF90b3BvbG9naWNhbFNvcnRWaXNpdChzdXBlcnR5cGUuY2xhc3NOb2RlLCBiZWluZ1Zpc2l0ZWQsCiAgICAgICAgICAgICAgb3JkZXJlZExpc3Q6IG9yZGVyZWRMaXN0KSk7CiAgICB9CiAgICBfYnVpbGREZWNsYXJlZE1lbWJlcnMoY2xhc3NOb2RlLCBpbmZvKTsKICAgIF9idWlsZEltcGxlbWVudGVkTWVtYmVycyhjbGFzc05vZGUsIGluZm8pOwogICAgaW5mby50b3BvbG9naWNhbEluZGV4ID0gX3RvcFNvcnRJbmRleCsrOwoKICAgIF9pbmZvTWFwW2NsYXNzTm9kZV0gPSBpbmZvOwogICAgb3JkZXJlZExpc3Q/LmFkZChjbGFzc05vZGUpOwogICAgYmVpbmdWaXNpdGVkLnJlbW92ZShjbGFzc05vZGUpOwogICAgcmV0dXJuIGluZm8uZGVwdGggPSBzdXBlckRlcHRoICsgMTsKICB9CgogIHZvaWQgX2J1aWxkRGVjbGFyZWRNZW1iZXJzKENsYXNzIGNsYXNzTm9kZSwgX0NsYXNzSW5mbyBpbmZvKSB7CiAgICBpZiAoY2xhc3NOb2RlLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgX0NsYXNzSW5mbyBtaXhlZEluZm8gPSBfaW5mb01hcFtjbGFzc05vZGUubWl4ZWRJblR5cGUuY2xhc3NOb2RlXTsKCiAgICAgIExpc3Q8TWVtYmVyPiBkZWNsYXJlZEdldHRlcnNBbmRDYWxscyA9IDxNZW1iZXI+W107CiAgICAgIGZvciAoTWVtYmVyIG1peGluTWVtYmVyIGluIG1peGVkSW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxscykgewogICAgICAgIGlmIChtaXhpbk1lbWJlciBpcyEgUHJvY2VkdXJlIHx8CiAgICAgICAgICAgIChtaXhpbk1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgICFtaXhpbk1lbWJlci5pc05vU3VjaE1ldGhvZEZvcndhcmRlcikpIHsKICAgICAgICAgIGRlY2xhcmVkR2V0dGVyc0FuZENhbGxzLmFkZChtaXhpbk1lbWJlcik7CiAgICAgICAgfQogICAgICB9CgogICAgICBMaXN0PE1lbWJlcj4gZGVjbGFyZWRTZXR0ZXJzID0gPE1lbWJlcj5bXTsKICAgICAgZm9yIChNZW1iZXIgbWl4aW5NZW1iZXIgaW4gbWl4ZWRJbmZvLmRlY2xhcmVkU2V0dGVycykgewogICAgICAgIGlmIChtaXhpbk1lbWJlciBpcyEgUHJvY2VkdXJlIHx8CiAgICAgICAgICAgIChtaXhpbk1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgICFtaXhpbk1lbWJlci5pc05vU3VjaE1ldGhvZEZvcndhcmRlcikpIHsKICAgICAgICAgIGRlY2xhcmVkU2V0dGVycy5hZGQobWl4aW5NZW1iZXIpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxscyA9IGRlY2xhcmVkR2V0dGVyc0FuZENhbGxzOwogICAgICBpbmZvLmRlY2xhcmVkU2V0dGVycyA9IGRlY2xhcmVkU2V0dGVyczsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBtZW1iZXJzID0gaW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxscyA9IDxNZW1iZXI+W107CiAgICAgIHZhciBzZXR0ZXJzID0gaW5mby5kZWNsYXJlZFNldHRlcnMgPSA8TWVtYmVyPltdOwogICAgICBmb3IgKFByb2NlZHVyZSBwcm9jZWR1cmUgaW4gY2xhc3NOb2RlLnByb2NlZHVyZXMpIHsKICAgICAgICBpZiAocHJvY2VkdXJlLmlzU3RhdGljKSBjb250aW51ZTsKICAgICAgICBpZiAocHJvY2VkdXJlLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5TZXR0ZXIpIHsKICAgICAgICAgIHNldHRlcnMuYWRkKHByb2NlZHVyZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lbWJlcnMuYWRkKHByb2NlZHVyZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoRmllbGQgZmllbGQgaW4gY2xhc3NOb2RlLmZpZWxkcykgewogICAgICAgIGlmIChmaWVsZC5pc1N0YXRpYykgY29udGludWU7CiAgICAgICAgaWYgKGZpZWxkLmhhc0ltcGxpY2l0R2V0dGVyKSB7CiAgICAgICAgICBtZW1iZXJzLmFkZChmaWVsZCk7CiAgICAgICAgfQogICAgICAgIGlmIChmaWVsZC5oYXNJbXBsaWNpdFNldHRlcikgewogICAgICAgICAgc2V0dGVycy5hZGQoZmllbGQpOwogICAgICAgIH0KICAgICAgfQogICAgICBtZW1iZXJzLnNvcnQoQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU1lbWJlcnMpOwogICAgICBzZXR0ZXJzLnNvcnQoQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU1lbWJlcnMpOwogICAgfQogIH0KCiAgdm9pZCBfYnVpbGRJbXBsZW1lbnRlZE1lbWJlcnMoQ2xhc3MgY2xhc3NOb2RlLCBfQ2xhc3NJbmZvIGluZm8pIHsKICAgIExpc3Q8TWVtYmVyPiBpbmhlcml0ZWRNZW1iZXJzOwogICAgTGlzdDxNZW1iZXI+IGluaGVyaXRlZFNldHRlcnM7CiAgICBpZiAoY2xhc3NOb2RlLnN1cGVydHlwZSA9PSBudWxsKSB7CiAgICAgIGluaGVyaXRlZE1lbWJlcnMgPSBpbmhlcml0ZWRTZXR0ZXJzID0gY29uc3QgPE1lbWJlcj5bXTsKICAgIH0gZWxzZSB7CiAgICAgIF9DbGFzc0luZm8gc3VwZXJJbmZvID0gX2luZm9NYXBbY2xhc3NOb2RlLnN1cGVydHlwZS5jbGFzc05vZGVdOwogICAgICBpbmhlcml0ZWRNZW1iZXJzID0gc3VwZXJJbmZvLmltcGxlbWVudGVkR2V0dGVyc0FuZENhbGxzOwogICAgICBpbmhlcml0ZWRTZXR0ZXJzID0gc3VwZXJJbmZvLmltcGxlbWVudGVkU2V0dGVyczsKICAgIH0KICAgIGluZm8uaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHMgPSBfaW5oZXJpdE1lbWJlcnMoCiAgICAgICAgaW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxscywgaW5oZXJpdGVkTWVtYmVycywKICAgICAgICBza2lwQWJzdHJhY3RNZW1iZXJzOiB0cnVlKTsKICAgIGluZm8uaW1wbGVtZW50ZWRTZXR0ZXJzID0gX2luaGVyaXRNZW1iZXJzKAogICAgICAgIGluZm8uZGVjbGFyZWRTZXR0ZXJzLCBpbmhlcml0ZWRTZXR0ZXJzLAogICAgICAgIHNraXBBYnN0cmFjdE1lbWJlcnM6IHRydWUpOwogIH0KCiAgTGlzdDxNZW1iZXI+IF9idWlsZEludGVyZmFjZU1lbWJlcnMoQ2xhc3MgY2xhc3NOb2RlLCBfQ2xhc3NJbmZvIGluZm8sCiAgICAgIHtib29sIHNldHRlcnN9KSB7CiAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgIHRocm93ICIke2NsYXNzTm9kZS5maWxlVXJpfTogTm8gY2xhc3MgaW5mbyBmb3IgJHtjbGFzc05vZGUubmFtZX0iOwogICAgfQogICAgTGlzdDxNZW1iZXI+IG1lbWJlcnMgPQogICAgICAgIHNldHRlcnMgPyBpbmZvLmludGVyZmFjZVNldHRlcnMgOiBpbmZvLmludGVyZmFjZUdldHRlcnNBbmRDYWxsczsKICAgIGlmIChtZW1iZXJzICE9IG51bGwpIHJldHVybiBtZW1iZXJzOwogICAgTGlzdDxNZW1iZXI+IGFsbEluaGVyaXRlZE1lbWJlcnMgPSA8TWVtYmVyPltdOwogICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkID0KICAgICAgICBzZXR0ZXJzID8gaW5mby5kZWNsYXJlZFNldHRlcnMgOiBpbmZvLmRlY2xhcmVkR2V0dGVyc0FuZENhbGxzOwogICAgdm9pZCBpbmhlcml0RnJvbShTdXBlcnR5cGUgdHlwZSkgewogICAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm47CiAgICAgIExpc3Q8TWVtYmVyPiBpbmhlcml0ZWQgPSBfYnVpbGRJbnRlcmZhY2VNZW1iZXJzKAogICAgICAgICAgdHlwZS5jbGFzc05vZGUsIF9pbmZvTWFwW3R5cGUuY2xhc3NOb2RlXSwKICAgICAgICAgIHNldHRlcnM6IHNldHRlcnMpOwogICAgICBpbmhlcml0ZWQgPSBfZ2V0VW5zaGFkb3dlZEluaGVyaXRlZE1lbWJlcnMoZGVjbGFyZWQsIGluaGVyaXRlZCk7CiAgICAgIGFsbEluaGVyaXRlZE1lbWJlcnMgPQogICAgICAgICAgQ2xhc3NIaWVyYXJjaHkubWVyZ2VTb3J0ZWRMaXN0cyhhbGxJbmhlcml0ZWRNZW1iZXJzLCBpbmhlcml0ZWQpOwogICAgfQoKICAgIGluaGVyaXRGcm9tKGNsYXNzTm9kZS5zdXBlcnR5cGUpOwogICAgaW5oZXJpdEZyb20oY2xhc3NOb2RlLm1peGVkSW5UeXBlKTsKICAgIGNsYXNzTm9kZS5pbXBsZW1lbnRlZFR5cGVzLmZvckVhY2goaW5oZXJpdEZyb20pOwogICAgbWVtYmVycyA9IF9pbmhlcml0TWVtYmVycyhkZWNsYXJlZCwgYWxsSW5oZXJpdGVkTWVtYmVycyk7CiAgICBpZiAoc2V0dGVycykgewogICAgICBpbmZvLmludGVyZmFjZVNldHRlcnMgPSBtZW1iZXJzOwogICAgfSBlbHNlIHsKICAgICAgaW5mby5pbnRlcmZhY2VHZXR0ZXJzQW5kQ2FsbHMgPSBtZW1iZXJzOwogICAgfQogICAgcmV0dXJuIG1lbWJlcnM7CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIGxpc3Qgb2YgaW1wbGVtZW50ZWQgbWVtYmVycywgYmFzZWQgb24gdGhlIGRlY2xhcmVkIGluc3RhbmNlCiAgLy8vIG1lbWJlcnMgYW5kIGluaGVyaXRlZCBpbnN0YW5jZSBtZW1iZXJzLgogIC8vLwogIC8vLyBCb3RoIGxpc3RzIG11c3QgYmUgc29ydGVkIGJ5IG5hbWUgYmVmb3JlaGFuZC4KICBzdGF0aWMgTGlzdDxNZW1iZXI+IF9pbmhlcml0TWVtYmVycygKICAgICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkLCBMaXN0PE1lbWJlcj4gaW5oZXJpdGVkLAogICAgICB7Ym9vbCBza2lwQWJzdHJhY3RNZW1iZXJzOiBmYWxzZX0pIHsKICAgIExpc3Q8TWVtYmVyPiByZXN1bHQgPSA8TWVtYmVyPltdLi5sZW5ndGggPQogICAgICAgIGRlY2xhcmVkLmxlbmd0aCArIGluaGVyaXRlZC5sZW5ndGg7CiAgICAvLyBTaW5jZSBib3RoIGxpc3RzIGFyZSBzb3J0ZWQsIHdlIGNhbiBmdXNlIHRoZW0gbGlrZSBpbiBtZXJnZSBzb3J0LgogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgaW50IGkgPSAwLCBqID0gMDsKICAgIHdoaWxlIChpIDwgZGVjbGFyZWQubGVuZ3RoICYmIGogPCBpbmhlcml0ZWQubGVuZ3RoKSB7CiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciA9IGRlY2xhcmVkW2ldOwogICAgICBNZW1iZXIgaW5oZXJpdGVkTWVtYmVyID0gaW5oZXJpdGVkW2pdOwogICAgICBpZiAoc2tpcEFic3RyYWN0TWVtYmVycyAmJiBkZWNsYXJlZE1lbWJlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgKytpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChza2lwQWJzdHJhY3RNZW1iZXJzICYmIGluaGVyaXRlZE1lbWJlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgKytqOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGludCBjb21wYXJpc29uID0KICAgICAgICAgIENsYXNzSGllcmFyY2h5LmNvbXBhcmVNZW1iZXJzKGRlY2xhcmVkTWVtYmVyLCBpbmhlcml0ZWRNZW1iZXIpOwogICAgICBpZiAoY29tcGFyaXNvbiA8IDApIHsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGRlY2xhcmVkTWVtYmVyOwogICAgICAgICsraTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uID4gMCkgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaW5oZXJpdGVkTWVtYmVyOwogICAgICAgICsrajsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGRlY2xhcmVkTWVtYmVyOwogICAgICAgICsraTsKICAgICAgICArK2o7IC8vIE1vdmUgcGFzdCBvdmVycmlkZGVuIG1lbWJlci4KICAgICAgfQogICAgfQogICAgLy8gT25lIG9mIHRoZSB0d28gbGlzdHMgaXMgbm93IGV4aGF1c3RlZCwgY29weSBvdmVyIHRoZSByZW1haW5zLgogICAgd2hpbGUgKGkgPCBkZWNsYXJlZC5sZW5ndGgpIHsKICAgICAgTWVtYmVyIGRlY2xhcmVkTWVtYmVyID0gZGVjbGFyZWRbaSsrXTsKICAgICAgaWYgKHNraXBBYnN0cmFjdE1lbWJlcnMgJiYgZGVjbGFyZWRNZW1iZXIuaXNBYnN0cmFjdCkgY29udGludWU7CiAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gZGVjbGFyZWRNZW1iZXI7CiAgICB9CiAgICB3aGlsZSAoaiA8IGluaGVyaXRlZC5sZW5ndGgpIHsKICAgICAgTWVtYmVyIGluaGVyaXRlZE1lbWJlciA9IGluaGVyaXRlZFtqKytdOwogICAgICBpZiAoc2tpcEFic3RyYWN0TWVtYmVycyAmJiBpbmhlcml0ZWRNZW1iZXIuaXNBYnN0cmFjdCkgY29udGludWU7CiAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaW5oZXJpdGVkTWVtYmVyOwogICAgfQogICAgcmVzdWx0Lmxlbmd0aCA9IHN0b3JlSW5kZXg7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHN1YnNldCBvZiBtZW1iZXJzIGluIFtpbmhlcml0ZWRdIGZvciB3aGljaCBhIG1lbWJlciB3aXRoIHRoZQogIC8vLyBzYW1lIG5hbWUgZG9lcyBub3Qgb2NjdXIgaW4gW2RlY2xhcmVkXS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGxpc3RzIG11c3QgYmUgc29ydGVkLCBhbmQgdGhlIHJldHVybmVkIGxpc3QgaXMgc29ydGVkLgogIHN0YXRpYyBMaXN0PE1lbWJlcj4gX2dldFVuc2hhZG93ZWRJbmhlcml0ZWRNZW1iZXJzKAogICAgICBMaXN0PE1lbWJlcj4gZGVjbGFyZWQsIExpc3Q8TWVtYmVyPiBpbmhlcml0ZWQpIHsKICAgIExpc3Q8TWVtYmVyPiByZXN1bHQgPSA8TWVtYmVyPltdLi5sZW5ndGggPSBpbmhlcml0ZWQubGVuZ3RoOwogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgaW50IGkgPSAwLCBqID0gMDsKICAgIHdoaWxlIChpIDwgZGVjbGFyZWQubGVuZ3RoICYmIGogPCBpbmhlcml0ZWQubGVuZ3RoKSB7CiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciA9IGRlY2xhcmVkW2ldOwogICAgICBNZW1iZXIgaW5oZXJpdGVkTWVtYmVyID0gaW5oZXJpdGVkW2pdOwogICAgICBpbnQgY29tcGFyaXNvbiA9CiAgICAgICAgICBDbGFzc0hpZXJhcmNoeS5jb21wYXJlTWVtYmVycyhkZWNsYXJlZE1lbWJlciwgaW5oZXJpdGVkTWVtYmVyKTsKICAgICAgaWYgKGNvbXBhcmlzb24gPCAwKSB7CiAgICAgICAgKytpOwogICAgICB9IGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKSB7CiAgICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBpbmhlcml0ZWRNZW1iZXI7CiAgICAgICAgKytqOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIE1vdmUgcGFzdCB0aGUgc2hhZG93ZWQgbWVtYmVyLCBidXQgcmV0YWluIHRoZSBkZWNsYXJlZCBtZW1iZXIsIGFzCiAgICAgICAgLy8gaXQgbWF5IHNoYWRvdyBtdWx0aXBsZSBtZW1iZXJzLgogICAgICAgICsrajsKICAgICAgfQogICAgfQogICAgLy8gSWYgdGhlIGxpc3Qgb2YgZGVjbGFyZWQgbWVtYmVycyBpcyBleGhhdXN0ZWQsIGNvcHkgb3ZlciB0aGUgcmVtYWlucyBvZgogICAgLy8gdGhlIGluaGVyaXRlZCBtZW1iZXJzLgogICAgd2hpbGUgKGogPCBpbmhlcml0ZWQubGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaW5oZXJpdGVkW2orK107CiAgICB9CiAgICByZXN1bHQubGVuZ3RoID0gc3RvcmVJbmRleDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9yZWNvcmRTdXBlclR5cGVzKF9DbGFzc0luZm8gc3ViSW5mbywgU3VwZXJ0eXBlIHN1cGVydHlwZSkgewogICAgX0NsYXNzSW5mbyBzdXBlckluZm8gPSBfaW5mb01hcFtzdXBlcnR5cGUuY2xhc3NOb2RlXTsKICAgIGlmIChzdXBlcnR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIGlmIChzdXBlckluZm8uZ2VuZXJpY1N1cGVyVHlwZXMgPT0gbnVsbCkgcmV0dXJuOwogICAgICAvLyBDb3B5IG92ZXIgdGhlIHN1cGVyIHR5cGUgZW50cmllcy4KICAgICAgc3ViSW5mby5nZW5lcmljU3VwZXJUeXBlcyA/Pz0gPENsYXNzLCBMaXN0PFN1cGVydHlwZT4+e307CiAgICAgIHN1cGVySW5mby5nZW5lcmljU3VwZXJUeXBlcz8uZm9yRWFjaCgoQ2xhc3Mga2V5LCBMaXN0PFN1cGVydHlwZT4gdHlwZXMpIHsKICAgICAgICBmb3IgKFN1cGVydHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgICAgICBzdWJJbmZvLnJlY29yZEdlbmVyaWNTdXBlclR5cGUoa2V5LCB0eXBlLCBfb25BbWJpZ3VvdXNTdXBlcnR5cGVzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgLy8gQ29weSBvdmVyIGFsbCB0cmFuc2l0aXZlIGdlbmVyaWMgc3VwZXIgdHlwZXMsIGFuZCBzdWJzdGl0dXRlIHRoZQogICAgICAvLyBmcmVlIHZhcmlhYmxlcyB3aXRoIHRob3NlIHByb3ZpZGVkIGluIFtzdXBlcnR5cGVdLgogICAgICBDbGFzcyBzdXBlcmNsYXNzID0gc3VwZXJ0eXBlLmNsYXNzTm9kZTsKICAgICAgdmFyIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICBzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLCBzdXBlcnR5cGUudHlwZUFyZ3VtZW50cyk7CiAgICAgIHN1YkluZm8uZ2VuZXJpY1N1cGVyVHlwZXMgPz89IDxDbGFzcywgTGlzdDxTdXBlcnR5cGU+Pnt9OwogICAgICBzdXBlckluZm8uZ2VuZXJpY1N1cGVyVHlwZXM/LmZvckVhY2goKENsYXNzIGtleSwgTGlzdDxTdXBlcnR5cGU+IHR5cGVzKSB7CiAgICAgICAgZm9yIChTdXBlcnR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICAgICAgc3ViSW5mby5yZWNvcmRHZW5lcmljU3VwZXJUeXBlKGtleSwKICAgICAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVN1cGVydHlwZSh0eXBlKSwgX29uQW1iaWd1b3VzU3VwZXJ0eXBlcyk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIHN1YkluZm8ucmVjb3JkR2VuZXJpY1N1cGVyVHlwZSgKICAgICAgICAgIHN1cGVyY2xhc3MsIHN1cGVydHlwZSwgX29uQW1iaWd1b3VzU3VwZXJ0eXBlcyk7CiAgICB9CiAgfQoKICAvLy8gQnVpbGQgbGlzdHMgb2Ygc3VwZXIgdHlwZXMgYW5kIHN1cGVyIGNsYXNzZXMuCiAgLy8vIE5vdGUgdGhhdCB0aGUgc3VwZXIgY2xhc3MgYW5kIHN1cGVyIHR5cGVzIG9mIHRoZSBjbGFzcyBtdXN0IGFscmVhZHkgaGF2ZQogIC8vLyBoYWQgdGhlaXIgc3VwZXJzIGNvbGxlY3RlZC4KICB2b2lkIF9jb2xsZWN0U3VwZXJzRm9yQ2xhc3MoQ2xhc3MgY2xhc3NfKSB7CiAgICBfQ2xhc3NJbmZvIGluZm8gPSBfaW5mb01hcFtjbGFzc19dOwoKICAgIHZhciBzdXBlcmNsYXNzU2V0QnVpbGRlciA9IG5ldyBfSW50ZXJ2YWxMaXN0QnVpbGRlcigpCiAgICAgIC4uYWRkU2luZ2xldG9uKGluZm8udG9wb2xvZ2ljYWxJbmRleCk7CiAgICB2YXIgc3VwZXJ0eXBlU2V0QnVpbGRlciA9IG5ldyBfSW50ZXJ2YWxMaXN0QnVpbGRlcigpCiAgICAgIC4uYWRkU2luZ2xldG9uKGluZm8udG9wb2xvZ2ljYWxJbmRleCk7CgogICAgaWYgKGNsYXNzXy5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICBfQ2xhc3NJbmZvIHN1cGVydHlwZUluZm8gPSBfaW5mb01hcFtjbGFzc18uc3VwZXJ0eXBlLmNsYXNzTm9kZV07CiAgICAgIHN1cGVyY2xhc3NTZXRCdWlsZGVyCiAgICAgICAgICAuYWRkSW50ZXJ2YWxMaXN0KHN1cGVydHlwZUluZm8uc3VwZXJjbGFzc0ludGVydmFsTGlzdCk7CiAgICAgIHN1cGVydHlwZVNldEJ1aWxkZXIuYWRkSW50ZXJ2YWxMaXN0KHN1cGVydHlwZUluZm8uc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KCiAgICBpZiAoY2xhc3NfLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgX0NsYXNzSW5mbyBtaXhlZEluVHlwZUluZm8gPSBfaW5mb01hcFtjbGFzc18ubWl4ZWRJblR5cGUuY2xhc3NOb2RlXTsKICAgICAgc3VwZXJ0eXBlU2V0QnVpbGRlcgogICAgICAgICAgLmFkZEludGVydmFsTGlzdChtaXhlZEluVHlwZUluZm8uc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KCiAgICBmb3IgKFN1cGVydHlwZSBzdXBlcnR5cGUgaW4gY2xhc3NfLmltcGxlbWVudGVkVHlwZXMpIHsKICAgICAgX0NsYXNzSW5mbyBzdXBlcnR5cGVJbmZvID0gX2luZm9NYXBbc3VwZXJ0eXBlLmNsYXNzTm9kZV07CiAgICAgIHN1cGVydHlwZVNldEJ1aWxkZXIuYWRkSW50ZXJ2YWxMaXN0KHN1cGVydHlwZUluZm8uc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KCiAgICBpbmZvLnN1cGVyY2xhc3NJbnRlcnZhbExpc3QgPSBzdXBlcmNsYXNzU2V0QnVpbGRlci5idWlsZEludGVydmFsTGlzdCgpOwogICAgaW5mby5zdXBlcnR5cGVJbnRlcnZhbExpc3QgPSBzdXBlcnR5cGVTZXRCdWlsZGVyLmJ1aWxkSW50ZXJ2YWxMaXN0KCk7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGhpc3RvZ3JhbSBzdWNoIHRoYXQgaW5kZXggYE5gIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgY2xhc3NlcwogIC8vLyB0aGF0IGhhdmUgYE5gIGludGVydmFscyBpbiBpdHMgc3VwZXJ0eXBlIHNldC4KICAvLy8KICAvLy8gVGhlIG1vcmUgbnVtYmVycyBhcmUgY29uZGVuc2VkIG5lYXIgdGhlIGJlZ2lubmluZywgdGhlIG1vcmUgZWZmaWNpZW50IHRoZQogIC8vLyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBpcy4KICBMaXN0PGludD4gZ2V0RXhwZW5zZUhpc3RvZ3JhbSgpIHsKICAgIHZhciByZXN1bHQgPSA8aW50PltdOwogICAgZm9yIChDbGFzcyBjbGFzc18gaW4gX2luZm9NYXAua2V5cykgewogICAgICB2YXIgaW5mbyA9IF9pbmZvTWFwW2NsYXNzX107CiAgICAgIGludCBpbnRlcnZhbHMgPSBpbmZvLnN1cGVydHlwZUludGVydmFsTGlzdC5sZW5ndGggfi8gMjsKICAgICAgaWYgKGludGVydmFscyA+PSByZXN1bHQubGVuZ3RoKSB7CiAgICAgICAgaW50IG9sZExlbmd0aCA9IHJlc3VsdC5sZW5ndGg7CiAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IGludGVydmFscyArIDE7CiAgICAgICAgcmVzdWx0LmZpbGxSYW5nZShvbGRMZW5ndGgsIHJlc3VsdC5sZW5ndGgsIDApOwogICAgICB9CiAgICAgIHJlc3VsdFtpbnRlcnZhbHNdICs9IDE7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGludGVydmFscyBwZXIgc3VwZXJ0eXBlIHJlbGF0aW9uIChsZXNzCiAgLy8vIGlzIGJldHRlciwgMS4wIGlzIGJhZCkuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gZXN0aW1hdGUgb2YgdGhlIG1lbW9yeSB1c2UgY29tcGFyZWQgdG8gYSBkYXRhIHN0cnVjdHVyZSB0aGF0CiAgLy8vIGVudW1lcmF0ZXMgYWxsIHN1cGVyY2xhc3Mvc3VwZXJ0eXBlIHBhaXJzLgogIGRvdWJsZSBnZXRDb21wcmVzc2lvblJhdGlvKCkgewogICAgaW50IGludGVydmFscyA9IDA7CiAgICBpbnQgc2l6ZXMgPSAwOwogICAgZm9yIChDbGFzcyBjbGFzc18gaW4gX2luZm9NYXAua2V5cykgewogICAgICB2YXIgaW5mbyA9IF9pbmZvTWFwW2NsYXNzX107CiAgICAgIGludGVydmFscyArPSAoaW5mby5zdXBlcmNsYXNzSW50ZXJ2YWxMaXN0Lmxlbmd0aCArCiAgICAgICAgICAgICAgaW5mby5zdXBlcnR5cGVJbnRlcnZhbExpc3QubGVuZ3RoKSB+LwogICAgICAgICAgMjsKICAgICAgc2l6ZXMgKz0gX2ludGVydmFsTGlzdFNpemUoaW5mby5zdXBlcmNsYXNzSW50ZXJ2YWxMaXN0KSArCiAgICAgICAgICBfaW50ZXJ2YWxMaXN0U2l6ZShpbmZvLnN1cGVydHlwZUludGVydmFsTGlzdCk7CiAgICB9CgogICAgcmV0dXJuIHNpemVzID09IDAgPyAxLjAgOiBpbnRlcnZhbHMgLyBzaXplczsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBoYXNoIHRhYmxlcyBzdG9yaW5nIGhpZXJhcmNoeSBkYXRhLgogIGludCBnZXRTdXBlclR5cGVIYXNoVGFibGVTaXplKCkgewogICAgaW50IHN1bSA9IDA7CiAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBfaW5mb01hcC5rZXlzKSB7CiAgICAgIHN1bSArPSBfaW5mb01hcFtjbGFzc19dLmdlbmVyaWNTdXBlclR5cGVzPy5sZW5ndGggPz8gMDsKICAgIH0KICAgIHJldHVybiBzdW07CiAgfQp9CgpjbGFzcyBfSW50ZXJ2YWxMaXN0QnVpbGRlciB7CiAgZmluYWwgTGlzdDxpbnQ+IGV2ZW50cyA9IDxpbnQ+W107CgogIHZvaWQgYWRkSW50ZXJ2YWwoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAvLyBBZGQgYW4gZXZlbnQgcG9pbnQgZm9yIGVhY2ggaW50ZXJ2YWwgZW5kIHBvaW50LCB1c2luZyB0aGUgbG93IGJpdCB0bwogICAgLy8gZGlzdGluZ3Vpc2ggb3BlbmluZyBmcm9tIGNsb3NpbmcgZW5kIHBvaW50cy4gQ2xvc2luZyBlbmQgcG9pbnRzIHNob3VsZAogICAgLy8gaGF2ZSB0aGUgaGlnaCBiaXQgdG8gZW5zdXJlIHRoZXkgb2NjdXIgYWZ0ZXIgYW4gb3BlbmluZyBlbmQgcG9pbnQuCiAgICBldmVudHMuYWRkKHN0YXJ0IDw8IDEpOwogICAgZXZlbnRzLmFkZCgoZW5kIDw8IDEpICsgMSk7CiAgfQoKICB2b2lkIGFkZFNpbmdsZXRvbihpbnQgeCkgewogICAgYWRkSW50ZXJ2YWwoeCwgeCArIDEpOwogIH0KCiAgdm9pZCBhZGRJbnRlcnZhbExpc3QoVWludDMyTGlzdCBpbnRlcnZhbHMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJ2YWxzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIGFkZEludGVydmFsKGludGVydmFsc1tpXSwgaW50ZXJ2YWxzW2kgKyAxXSk7CiAgICB9CiAgfQoKICBVaW50MzJMaXN0IGJ1aWxkSW50ZXJ2YWxMaXN0KCkgewogICAgLy8gU29ydCB0aGUgZXZlbnQgcG9pbnRzIGFuZCBzd2VlcCBsZWZ0IHRvIHJpZ2h0IHdoaWxlIHRyYWNraW5nIGhvdyBtYW55CiAgICAvLyBpbnRlcnZhbHMgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUuICBSZWNvcmQgYW4gaW50ZXJ2YWwgZW5kIHBvaW50IHdoZW4gdGhlCiAgICAvLyBudW1iZXIgb2YgaW50ZXJ2YWxzIGRyb3AgdG8gemVybyBvciBpbmNyZWFzZSBmcm9tIHplcm8gdG8gb25lLgogICAgLy8gRXZlbnQgcG9pbnRzIGFyZSBlbmNvZGVkIHNvIHRoYXQgYW4gb3BlbmluZyBlbmQgcG9pbnQgb2NjdXIgYmVmb3JlIGEKICAgIC8vIGNsb3NpbmcgZW5kIHBvaW50IGF0IHRoZSBzYW1lIHZhbHVlLgogICAgZXZlbnRzLnNvcnQoKTsKICAgIGludCBpbnNpZGVDb3VudCA9IDA7IC8vIFRoZSBudW1iZXIgb2YgaW50ZXJ2YWxzIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlLgogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgaW50IGV2ZW50ID0gZXZlbnRzW2ldOwogICAgICBpZiAoZXZlbnQgJiAxID09IDApIHsKICAgICAgICAvLyBTdGFydCBwb2ludAogICAgICAgICsraW5zaWRlQ291bnQ7CiAgICAgICAgaWYgKGluc2lkZUNvdW50ID09IDEpIHsKICAgICAgICAgIC8vIFN0b3JlIHRoZSByZXN1bHRzIHRlbXBvcmFyaWx5IGJhY2sgaW4gdGhlIGV2ZW50IGFycmF5LgogICAgICAgICAgZXZlbnRzW3N0b3JlSW5kZXgrK10gPSBldmVudCA+PiAxOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBFbmQgcG9pbnQKICAgICAgICAtLWluc2lkZUNvdW50OwogICAgICAgIGlmIChpbnNpZGVDb3VudCA9PSAwKSB7CiAgICAgICAgICBldmVudHNbc3RvcmVJbmRleCsrXSA9IGV2ZW50ID4+IDE7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBDb3B5IHRoZSByZXN1bHRzIG92ZXIgdG8gYSB0eXBlZCBhcnJheSBvZiB0aGUgY29ycmVjdCBsZW5ndGguCiAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQzMkxpc3Qoc3RvcmVJbmRleCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0b3JlSW5kZXg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSBldmVudHNbaV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKYm9vbCBfaW50ZXJ2YWxMaXN0Q29udGFpbnMoVWludDMyTGlzdCBpbnRlcnZhbExpc3QsIGludCB4KSB7CiAgaW50IGxvdyA9IDAsIGhpZ2ggPSBpbnRlcnZhbExpc3QubGVuZ3RoIC0gMTsKICBpZiAoaGlnaCA9PSAtMSB8fCB4IDwgaW50ZXJ2YWxMaXN0WzBdIHx8IGludGVydmFsTGlzdFtoaWdoXSA8PSB4KSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIC8vIEZpbmQgdGhlIGxvd2VyIGJvdW5kIG9mIHggaW4gdGhlIGxpc3QuCiAgLy8gSWYgdGhlIGxvd2VyIGJvdW5kIGlzIGF0IGFuIGV2ZW4gaW5kZXgsIHRoZSBsb3dlciBib3VuZCBpcyBhbiBvcGVuaW5nIHBvaW50CiAgLy8gb2YgYW4gaW50ZXJ2YWwgdGhhdCBjb250YWlucyB4LCBvdGhlcndpc2UgaXQgaXMgYSBjbG9zaW5nIHBvaW50IG9mIGFuCiAgLy8gaW50ZXJ2YWwgYmVsb3cgeCBhbmQgdGhlcmUgaXMgbm8gaW50ZXJ2YWwgY29udGFpbmluZyB4LgogIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICBpbnQgbWlkID0gaGlnaCAtICgoaGlnaCAtIGxvdykgPj4gMSk7IC8vIEdldCBtaWRkbGUsIHJvdW5kaW5nIHVwLgogICAgaW50IHBpdm90ID0gaW50ZXJ2YWxMaXN0W21pZF07CiAgICBpZiAocGl2b3QgPD0geCkgewogICAgICBsb3cgPSBtaWQ7CiAgICB9IGVsc2UgewogICAgICBoaWdoID0gbWlkIC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIGxvdyA9PSBoaWdoICYmIChsb3cgJiAxKSA9PSAwOwp9CgppbnQgX2ludGVydmFsTGlzdFNpemUoVWludDMyTGlzdCBpbnRlcnZhbExpc3QpIHsKICBpbnQgc2l6ZSA9IDA7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcnZhbExpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgIHNpemUgKz0gaW50ZXJ2YWxMaXN0W2kgKyAxXSAtIGludGVydmFsTGlzdFtpXTsKICB9CiAgcmV0dXJuIHNpemU7Cn0KCmNsYXNzIF9DbGFzc0luZm8gewogIGJvb2wgdXNlZCA9IGZhbHNlOwogIGZpbmFsIENsYXNzIGNsYXNzTm9kZTsKICBpbnQgdG9wb2xvZ2ljYWxJbmRleCA9IDA7CiAgaW50IGRlcHRoID0gMDsKCiAgLy8gU3VwZXIgdHlwZXMgbXVzdCBhbHdheXMgb2NjdXIgYmVmb3JlIHN1YnR5cGVzIGluIHRoZXNlIGxpc3RzLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gICBjbGFzcyBBIGV4dGVuZHMgT2JqZWN0CiAgLy8gICBjbGFzcyBCIGV4dGVuZHMgT2JqZWN0IGltcGxlbWVudHMgQQogIC8vCiAgLy8gSGVyZSBgQWAgbXVzdCBvY2N1ciBiZWZvcmUgYEJgIGluIHRoZSBsaXN0IG9mIGRpcmVjdCBleHRlbmRlcnMgb2YgT2JqZWN0LAogIC8vIGJlY2F1c2UgYEJgIGlzIGEgc3VidHlwZSBvZiBgQWAuCiAgZmluYWwgU2V0PF9DbGFzc0luZm8+IGRpcmVjdEV4dGVuZGVycyA9IG5ldyBMaW5rZWRIYXNoU2V0PF9DbGFzc0luZm8+KCk7CiAgZmluYWwgU2V0PF9DbGFzc0luZm8+IGRpcmVjdE1peGVycyA9IG5ldyBMaW5rZWRIYXNoU2V0PF9DbGFzc0luZm8+KCk7CiAgZmluYWwgU2V0PF9DbGFzc0luZm8+IGRpcmVjdEltcGxlbWVudGVycyA9IG5ldyBMaW5rZWRIYXNoU2V0PF9DbGFzc0luZm8+KCk7CgogIFVpbnQzMkxpc3Qgc3VwZXJjbGFzc0ludGVydmFsTGlzdDsKICBVaW50MzJMaXN0IHN1cGVydHlwZUludGVydmFsTGlzdDsKCiAgTGlzdDxfQ2xhc3NJbmZvPiBsZWFzdFVwcGVyQm91bmRJbmZvczsKCiAgLy8vIE1hcHMgZ2VuZXJpYyBzdXBlcnR5cGUgY2xhc3NlcyB0byB0aGUgaW5zdGFudGlhdGlvbiBpbXBsZW1lbnRlZCBieSB0aGlzCiAgLy8vIGNsYXNzLgogIC8vLwogIC8vLyBFLmcuIGBMaXN0YCBtYXBzIHRvIGBMaXN0PFN0cmluZz5gIGZvciBhIGNsYXNzIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseQogIC8vLyBpbXBsZW1lbnRzIGBMaXN0PFN0cmluZz5gLgogIE1hcDxDbGFzcywgTGlzdDxTdXBlcnR5cGU+PiBnZW5lcmljU3VwZXJUeXBlczsKCiAgLy8vIEluc3RhbmNlIGZpZWxkcywgZ2V0dGVycywgbWV0aG9kcywgYW5kIG9wZXJhdG9ycyBkZWNsYXJlZCBpbiB0aGlzIGNsYXNzCiAgLy8vIG9yIGl0cyBtaXhlZC1pbiBjbGFzcywgc29ydGVkIGFjY29yZGluZyB0byBbX2NvbXBhcmVNZW1iZXJzXS4KICBMaXN0PE1lbWJlcj4gZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHM7CgogIC8vLyBOb24tZmluYWwgaW5zdGFuY2UgZmllbGRzIGFuZCBzZXR0ZXJzIGRlY2xhcmVkIGluIHRoaXMgY2xhc3Mgb3IgaXRzCiAgLy8vIG1peGVkLWluIGNsYXNzLCBzb3J0ZWQgYWNjb3JkaW5nIHRvIFtfY29tcGFyZU1lbWJlcnNdLgogIExpc3Q8TWVtYmVyPiBkZWNsYXJlZFNldHRlcnM7CgogIC8vLyBJbnN0YW5jZSBmaWVsZHMsIGdldHRlcnMsIG1ldGhvZHMsIGFuZCBvcGVyYXRvcnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBjbGFzcwogIC8vLyAoZGVjbGFyZWQgb3IgaW5oZXJpdGVkKS4KICBMaXN0PE1lbWJlcj4gaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHM7CgogIC8vLyBOb24tZmluYWwgaW5zdGFuY2UgZmllbGRzIGFuZCBzZXR0ZXJzIGltcGxlbWVudGVkIGJ5IHRoaXMgY2xhc3MKICAvLy8gKGRlY2xhcmVkIG9yIGluaGVyaXRlZCkuCiAgTGlzdDxNZW1iZXI+IGltcGxlbWVudGVkU2V0dGVyczsKCiAgTGlzdDxNZW1iZXI+IGludGVyZmFjZUdldHRlcnNBbmRDYWxsczsKICBMaXN0PE1lbWJlcj4gaW50ZXJmYWNlU2V0dGVyczsKCiAgX0NsYXNzSW5mbyh0aGlzLmNsYXNzTm9kZSk7CgogIGJvb2wgaXNTdWJjbGFzc09mKF9DbGFzc0luZm8gb3RoZXIpIHsKICAgIHJldHVybiBfaW50ZXJ2YWxMaXN0Q29udGFpbnMoCiAgICAgICAgc3VwZXJjbGFzc0ludGVydmFsTGlzdCwgb3RoZXIudG9wb2xvZ2ljYWxJbmRleCk7CiAgfQoKICBib29sIGlzU3VidHlwZU9mKF9DbGFzc0luZm8gb3RoZXIpIHsKICAgIHJldHVybiBfaW50ZXJ2YWxMaXN0Q29udGFpbnMoc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0LCBvdGhlci50b3BvbG9naWNhbEluZGV4KTsKICB9CgogIHZvaWQgcmVjb3JkR2VuZXJpY1N1cGVyVHlwZShDbGFzcyBjbHMsIFN1cGVydHlwZSB0eXBlLAogICAgICBIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcykgewogICAgTGlzdDxTdXBlcnR5cGU+IGV4aXN0aW5nID0gZ2VuZXJpY1N1cGVyVHlwZXNbY2xzXTsKICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7CiAgICAgIGdlbmVyaWNTdXBlclR5cGVzW2Nsc10gPSA8U3VwZXJ0eXBlPlt0eXBlXTsKICAgIH0gZWxzZSBpZiAodHlwZSAhPSBleGlzdGluZy5maXJzdCkgewogICAgICBleGlzdGluZy5hZGQodHlwZSk7CiAgICAgIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcyhjbGFzc05vZGUsIGV4aXN0aW5nLmZpcnN0LCB0eXBlKTsKICAgIH0KICB9Cn0KCi8vLyBBbiBpbW11dGFibGUgc2V0IG9mIGNsYXNzZXMuCmNsYXNzIENsYXNzU2V0IGV4dGVuZHMgSXRlcmFibGVCYXNlPENsYXNzPiB7CiAgZmluYWwgU2V0PENsYXNzPiBfY2xhc3NlczsKICBDbGFzc1NldCh0aGlzLl9jbGFzc2VzKTsKCiAgYm9vbCBjb250YWlucyhPYmplY3QgY2xhc3NfKSB7CiAgICByZXR1cm4gX2NsYXNzZXMuY29udGFpbnMoY2xhc3NfKTsKICB9CgogIENsYXNzU2V0IHVuaW9uKENsYXNzU2V0IG90aGVyKSB7CiAgICBTZXQ8Q2xhc3M+IHJlc3VsdCA9IG5ldyBTZXQ8Q2xhc3M+LmZyb20oX2NsYXNzZXMpOwogICAgcmVzdWx0LmFkZEFsbChvdGhlci5fY2xhc3Nlcyk7CiAgICByZXR1cm4gbmV3IENsYXNzU2V0KHJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxDbGFzcz4gZ2V0IGl0ZXJhdG9yID0+IF9jbGFzc2VzLml0ZXJhdG9yOwp9CgovLy8gSGVhcCBmb3IgdXNlIGluIGNvbXB1dGluZyBsZWFzdCB1cHBlciBib3VuZHMuCi8vLwovLy8gVGhlIGhlYXAgaXMgc29ydGVkIHN1Y2ggdGhhdCBjbGFzc2VzIHRoYXQgYXJlIGRlZXBlc3QgaW4gdGhlIGhpZXJhcmNoeQovLy8gYXJlIHJlbW92ZWQgZmlyc3Q7IGluIHRoZSBjYXNlIG9mIHRpZXMsIGNsYXNzZXMgd2l0aCBsb3dlciB0b3BvbG9naWNhbCBzb3J0Ci8vLyBpbmRleCBhcmUgcmVtb3ZlZCBmaXJzdC4KY2xhc3MgX0x1YkhlYXAgZXh0ZW5kcyBIZWFwPF9DbGFzc0luZm8+IHsKICBAb3ZlcnJpZGUKICBib29sIHNvcnRzQmVmb3JlKF9DbGFzc0luZm8gYSwgX0NsYXNzSW5mbyBiKSA9PiBzb3J0c0JlZm9yZVN0YXRpYyhhLCBiKTsKCiAgc3RhdGljIGJvb2wgc29ydHNCZWZvcmVTdGF0aWMoX0NsYXNzSW5mbyBhLCBfQ2xhc3NJbmZvIGIpIHsKICAgIGlmIChhLmRlcHRoID4gYi5kZXB0aCkgcmV0dXJuIHRydWU7CiAgICBpZiAoYS5kZXB0aCA8IGIuZGVwdGgpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBhLnRvcG9sb2dpY2FsSW5kZXggPCBiLnRvcG9sb2dpY2FsSW5kZXg7CiAgfQp9CoXFAE5OPCABGhQaARMYHAFQAR85AgE5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b3J0ICdsaWJyYXJ5X2luZGV4LmRhcnQnOwoKLy8vIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgY2xhc3NlcyBhbmQgbGlicmFyaWVzIGluIHRoZSBjb3JlIGxpYnJhcmllcy4KY2xhc3MgQ29yZVR5cGVzIHsKICBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiByZXF1aXJlZENsYXNzZXMgPSB7CiAgICAnZGFydDpjb3JlJzogWwogICAgICAnT2JqZWN0JywKICAgICAgJ051bGwnLAogICAgICAnYm9vbCcsCiAgICAgICdpbnQnLAogICAgICAnbnVtJywKICAgICAgJ2RvdWJsZScsCiAgICAgICdTdHJpbmcnLAogICAgICAnTGlzdCcsCiAgICAgICdNYXAnLAogICAgICAnSXRlcmFibGUnLAogICAgICAnSXRlcmF0b3InLAogICAgICAnU3ltYm9sJywKICAgICAgJ1R5cGUnLAogICAgICAnRnVuY3Rpb24nLAogICAgICAnSW52b2NhdGlvbicsCiAgICAgICdGYWxsVGhyb3VnaEVycm9yJywKICAgIF0sCiAgICAnZGFydDpfaW50ZXJuYWwnOiBbCiAgICAgICdTeW1ib2wnLAogICAgXSwKICAgICdkYXJ0OmFzeW5jJzogWwogICAgICAnRnV0dXJlJywKICAgICAgJ1N0cmVhbScsCiAgICBdCiAgfTsKCiAgZmluYWwgTGlicmFyeUluZGV4IGluZGV4OwoKICBMaWJyYXJ5IF9jb3JlTGlicmFyeTsKICBDbGFzcyBfb2JqZWN0Q2xhc3M7CiAgQ2xhc3MgX251bGxDbGFzczsKICBDbGFzcyBfYm9vbENsYXNzOwogIENsYXNzIF9pbnRDbGFzczsKICBDbGFzcyBfbnVtQ2xhc3M7CiAgQ2xhc3MgX2RvdWJsZUNsYXNzOwogIENsYXNzIF9zdHJpbmdDbGFzczsKICBDbGFzcyBfbGlzdENsYXNzOwogIENsYXNzIF9zZXRDbGFzczsKICBDbGFzcyBfbWFwQ2xhc3M7CiAgQ2xhc3MgX2l0ZXJhYmxlQ2xhc3M7CiAgQ2xhc3MgX2l0ZXJhdG9yQ2xhc3M7CiAgQ2xhc3MgX3N5bWJvbENsYXNzOwogIENsYXNzIF90eXBlQ2xhc3M7CiAgQ2xhc3MgX2Z1bmN0aW9uQ2xhc3M7CiAgQ2xhc3MgX2ludm9jYXRpb25DbGFzczsKICBDbGFzcyBfaW52b2NhdGlvbk1pcnJvckNsYXNzOwogIENvbnN0cnVjdG9yIF9pbnZvY2F0aW9uTWlycm9yV2l0aFR5cGVDb25zdHJ1Y3RvcjsKICBDb25zdHJ1Y3RvciBfbm9TdWNoTWV0aG9kRXJyb3JEZWZhdWx0Q29uc3RydWN0b3I7CiAgUHJvY2VkdXJlIF9saXN0RnJvbUNvbnN0cnVjdG9yOwogIFByb2NlZHVyZSBfbGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9yOwogIFByb2NlZHVyZSBfaWRlbnRpY2FsUHJvY2VkdXJlOwogIENvbnN0cnVjdG9yIF9mYWxsVGhyb3VnaEVycm9yVXJsQW5kTGluZUNvbnN0cnVjdG9yOwogIFByb2NlZHVyZSBfb2JqZWN0RXF1YWxzOwogIFByb2NlZHVyZSBfbWFwVW5tb2RpZmlhYmxlOwoKICBDbGFzcyBfaW50ZXJuYWxTeW1ib2xDbGFzczsKCiAgTGlicmFyeSBfYXN5bmNMaWJyYXJ5OwogIENsYXNzIF9mdXR1cmVDbGFzczsKICBDbGFzcyBfc3RhY2tUcmFjZUNsYXNzOwogIENsYXNzIF9zdHJlYW1DbGFzczsKICBDbGFzcyBfYXN5bmNBd2FpdENvbXBsZXRlckNsYXNzOwogIENsYXNzIF9mdXR1cmVPckNsYXNzOwogIENvbnN0cnVjdG9yIF9hc3luY0F3YWl0Q29tcGxldGVyQ29uc3RydWN0b3I7CiAgUHJvY2VkdXJlIF9jb21wbGV0ZU9uQXN5bmNSZXR1cm5Qcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9jb21wbGV0ZXJDb21wbGV0ZUVycm9yOwogIENvbnN0cnVjdG9yIF9zeW5jSXRlcmFibGVEZWZhdWx0Q29uc3RydWN0b3I7CiAgQ29uc3RydWN0b3IgX3N0cmVhbUl0ZXJhdG9yRGVmYXVsdENvbnN0cnVjdG9yOwogIENvbnN0cnVjdG9yIF9hc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRGVmYXVsdENvbnN0cnVjdG9yOwogIFByb2NlZHVyZSBfYXN5bmNTdGFyTGlzdGVuSGVscGVyUHJvY2VkdXJlOwogIFByb2NlZHVyZSBfYXN5bmNTdGFyTW92ZU5leHRIZWxwZXJQcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9hc3luY1N0YWNrVHJhY2VIZWxwZXJQcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9hc3luY1RoZW5XcmFwcGVySGVscGVyUHJvY2VkdXJlOwogIFByb2NlZHVyZSBfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJQcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9hd2FpdEhlbHBlclByb2NlZHVyZTsKICBQcm9jZWR1cmUgX2Jvb2xGcm9tRW52aXJvbm1lbnQ7CgogIC8vLyBUaGUgYGRhcnQ6bWlycm9yc2AgbGlicmFyeSwgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgZG9lcyBub3QgdXNlIGl0LgogIExpYnJhcnkgX21pcnJvcnNMaWJyYXJ5OwoKICBDbGFzcyBfcHJhZ21hQ2xhc3M7CiAgRmllbGQgX3ByYWdtYU5hbWU7CiAgRmllbGQgX3ByYWdtYU9wdGlvbnM7CiAgQ29uc3RydWN0b3IgX3ByYWdtYUNvbnN0cnVjdG9yOwoKICBDb3JlVHlwZXMoQ29tcG9uZW50IGNvbXBvbmVudCkKICAgICAgOiBpbmRleCA9IG5ldyBMaWJyYXJ5SW5kZXguY29yZUxpYnJhcmllcyhjb21wb25lbnQpOwoKICBQcm9jZWR1cmUgZ2V0IGFzeW5jRXJyb3JXcmFwcGVySGVscGVyUHJvY2VkdXJlIHsKICAgIHJldHVybiBfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJQcm9jZWR1cmUgPz89CiAgICAgICAgaW5kZXguZ2V0VG9wTGV2ZWxNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX2FzeW5jRXJyb3JXcmFwcGVySGVscGVyJyk7CiAgfQoKICBMaWJyYXJ5IGdldCBhc3luY0xpYnJhcnkgewogICAgcmV0dXJuIF9hc3luY0xpYnJhcnkgPz89IGluZGV4LmdldExpYnJhcnkoJ2RhcnQ6YXN5bmMnKTsKICB9CgogIE1lbWJlciBnZXQgYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckFkZCB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJywgJ2FkZCcpOwogIH0KCiAgTWVtYmVyIGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyQWRkRXJyb3IgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcigKICAgICAgICAnZGFydDphc3luYycsICdfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcicsICdhZGRFcnJvcicpOwogIH0KCiAgTWVtYmVyIGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtIHsKICAgIHJldHVybiBpbmRleC5nZXRNZW1iZXIoCiAgICAgICAgJ2RhcnQ6YXN5bmMnLCAnX0FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXInLCAnYWRkU3RyZWFtJyk7CiAgfQoKICBDbGFzcyBnZXQgYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckNsYXNzIHsKICAgIHJldHVybiBpbmRleC5nZXRDbGFzcygnZGFydDphc3luYycsICdfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcicpOwogIH0KCiAgTWVtYmVyIGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyQ2xvc2UgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcicsICdjbG9zZScpOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IGFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJEZWZhdWx0Q29uc3RydWN0b3IgewogICAgcmV0dXJuIF9hc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRGVmYXVsdENvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcicsICcnKTsKICB9CgogIE1lbWJlciBnZXQgYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlclN0cmVhbSB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKAogICAgICAgICdkYXJ0OmFzeW5jJywgJ19Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJywgJ2dldDpzdHJlYW0nKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXN5bmNTdGFyTGlzdGVuSGVscGVyIHsKICAgIHJldHVybiBfYXN5bmNTdGFyTGlzdGVuSGVscGVyUHJvY2VkdXJlID8/PQogICAgICAgIGluZGV4LmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19hc3luY1N0YXJMaXN0ZW5IZWxwZXInKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXN5bmNTdGFyTW92ZU5leHRIZWxwZXIgewogICAgcmV0dXJuIF9hc3luY1N0YXJNb3ZlTmV4dEhlbHBlclByb2NlZHVyZSA/Pz0KICAgICAgICBpbmRleC5nZXRUb3BMZXZlbE1lbWJlcignZGFydDphc3luYycsICdfYXN5bmNTdGFyTW92ZU5leHRIZWxwZXInKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlIHsKICAgIHJldHVybiBfYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlID8/PQogICAgICAgIGluZGV4LmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19hc3luY1N0YWNrVHJhY2VIZWxwZXInKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXN5bmNUaGVuV3JhcHBlckhlbHBlclByb2NlZHVyZSB7CiAgICByZXR1cm4gX2FzeW5jVGhlbldyYXBwZXJIZWxwZXJQcm9jZWR1cmUgPz89CiAgICAgICAgaW5kZXguZ2V0VG9wTGV2ZWxNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX2FzeW5jVGhlbldyYXBwZXJIZWxwZXInKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXdhaXRIZWxwZXJQcm9jZWR1cmUgewogICAgcmV0dXJuIF9hd2FpdEhlbHBlclByb2NlZHVyZSA/Pz0KICAgICAgICBpbmRleC5nZXRUb3BMZXZlbE1lbWJlcignZGFydDphc3luYycsICdfYXdhaXRIZWxwZXInKTsKICB9CgogIENsYXNzIGdldCBib29sQ2xhc3MgewogICAgcmV0dXJuIF9ib29sQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnYm9vbCcpOwogIH0KCiAgQ2xhc3MgZ2V0IGFzeW5jQXdhaXRDb21wbGV0ZXJDbGFzcyB7CiAgICByZXR1cm4gX2FzeW5jQXdhaXRDb21wbGV0ZXJDbGFzcyA/Pz0KICAgICAgICBpbmRleC5nZXRDbGFzcygnZGFydDphc3luYycsICdfQXN5bmNBd2FpdENvbXBsZXRlcicpOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IGFzeW5jQXdhaXRDb21wbGV0ZXJDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gX2FzeW5jQXdhaXRDb21wbGV0ZXJDb25zdHJ1Y3RvciA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX0FzeW5jQXdhaXRDb21wbGV0ZXInLCAnJyk7CiAgfQoKICBNZW1iZXIgZ2V0IGNvbXBsZXRlT25Bc3luY1JldHVybiB7CiAgICByZXR1cm4gX2NvbXBsZXRlT25Bc3luY1JldHVyblByb2NlZHVyZSA/Pz0KICAgICAgICBpbmRleC5nZXRUb3BMZXZlbE1lbWJlcignZGFydDphc3luYycsICdfY29tcGxldGVPbkFzeW5jUmV0dXJuJyk7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IGNvbXBsZXRlckNvbXBsZXRlRXJyb3IgewogICAgcmV0dXJuIF9jb21wbGV0ZXJDb21wbGV0ZUVycm9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdDb21wbGV0ZXInLCAnY29tcGxldGVFcnJvcicpOwogIH0KCiAgTWVtYmVyIGdldCBjb21wbGV0ZXJGdXR1cmUgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdDb21wbGV0ZXInLCAnZ2V0OmZ1dHVyZScpOwogIH0KCiAgTGlicmFyeSBnZXQgY29yZUxpYnJhcnkgewogICAgcmV0dXJuIF9jb3JlTGlicmFyeSA/Pz0gaW5kZXguZ2V0TGlicmFyeSgnZGFydDpjb3JlJyk7CiAgfQoKICBDbGFzcyBnZXQgZG91YmxlQ2xhc3MgewogICAgcmV0dXJuIF9kb3VibGVDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdkb3VibGUnKTsKICB9CgogIENsYXNzIGdldCBmdW5jdGlvbkNsYXNzIHsKICAgIHJldHVybiBfZnVuY3Rpb25DbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdGdW5jdGlvbicpOwogIH0KCiAgQ2xhc3MgZ2V0IGZ1dHVyZUNsYXNzIHsKICAgIHJldHVybiBfZnV0dXJlQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnRnV0dXJlJyk7CiAgfQoKICBDbGFzcyBnZXQgZnV0dXJlT3JDbGFzcyB7CiAgICByZXR1cm4gX2Z1dHVyZU9yQ2xhc3MgPz89IChpbmRleC50cnlHZXRDbGFzcygnZGFydDpjb3JlJywgJ0Z1dHVyZU9yJykgPz8KICAgICAgICBpbmRleC5nZXRDbGFzcygnZGFydDphc3luYycsICdGdXR1cmVPcicpKTsKICB9CgogIFByb2NlZHVyZSBnZXQgaWRlbnRpY2FsUHJvY2VkdXJlIHsKICAgIHJldHVybiBfaWRlbnRpY2FsUHJvY2VkdXJlID8/PQogICAgICAgIGluZGV4LmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmNvcmUnLCAnaWRlbnRpY2FsJyk7CiAgfQoKICBDbGFzcyBnZXQgaW50Q2xhc3MgewogICAgcmV0dXJuIF9pbnRDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdpbnQnKTsKICB9CgogIENsYXNzIGdldCBpbnRlcm5hbFN5bWJvbENsYXNzIHsKICAgIHJldHVybiBfaW50ZXJuYWxTeW1ib2xDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6X2ludGVybmFsJywgJ1N5bWJvbCcpOwogIH0KCiAgQ2xhc3MgZ2V0IGludm9jYXRpb25DbGFzcyB7CiAgICByZXR1cm4gX2ludm9jYXRpb25DbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdJbnZvY2F0aW9uJyk7CiAgfQoKICBDbGFzcyBnZXQgaW52b2NhdGlvbk1pcnJvckNsYXNzIHsKICAgIHJldHVybiBfaW52b2NhdGlvbk1pcnJvckNsYXNzID8/PQogICAgICAgIGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnX0ludm9jYXRpb25NaXJyb3InKTsKICB9CgogIENvbnN0cnVjdG9yIGdldCBpbnZvY2F0aW9uTWlycm9yV2l0aFR5cGVDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gX2ludm9jYXRpb25NaXJyb3JXaXRoVHlwZUNvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ19JbnZvY2F0aW9uTWlycm9yJywgJ193aXRoVHlwZScpOwogIH0KCiAgQ2xhc3MgZ2V0IGl0ZXJhYmxlQ2xhc3MgewogICAgcmV0dXJuIF9pdGVyYWJsZUNsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ0l0ZXJhYmxlJyk7CiAgfQoKICBDbGFzcyBnZXQgaXRlcmF0b3JDbGFzcyB7CiAgICByZXR1cm4gX2l0ZXJhdG9yQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnSXRlcmF0b3InKTsKICB9CgogIENsYXNzIGdldCBsaXN0Q2xhc3MgewogICAgcmV0dXJuIF9saXN0Q2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnTGlzdCcpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBsaXN0RnJvbUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfbGlzdEZyb21Db25zdHJ1Y3RvciA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdMaXN0JywgJ2Zyb20nKTsKICB9CgogIFByb2NlZHVyZSBnZXQgbGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfbGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ0xpc3QnLCAndW5tb2RpZmlhYmxlJyk7CiAgfQoKICBDbGFzcyBnZXQgc2V0Q2xhc3MgewogICAgcmV0dXJuIF9zZXRDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdTZXQnKTsKICB9CgogIENsYXNzIGdldCBtYXBDbGFzcyB7CiAgICByZXR1cm4gX21hcENsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ01hcCcpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBtYXBVbm1vZGlmaWFibGUgewogICAgcmV0dXJuIF9tYXBVbm1vZGlmaWFibGUgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnTWFwJywgJ3VubW9kaWZpYWJsZScpOwogIH0KCiAgTGlicmFyeSBnZXQgbWlycm9yc0xpYnJhcnkgewogICAgcmV0dXJuIF9taXJyb3JzTGlicmFyeSA/Pz0gaW5kZXgudHJ5R2V0TGlicmFyeSgnZGFydDptaXJyb3JzJyk7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgbm9TdWNoTWV0aG9kRXJyb3JEZWZhdWx0Q29uc3RydWN0b3IgewogICAgcmV0dXJuIF9ub1N1Y2hNZXRob2RFcnJvckRlZmF1bHRDb25zdHJ1Y3RvciA/Pz0KICAgICAgICAvLyBUT0RPKHJlZ2lzKTogUmVwbGFjZSAnd2l0aEludm9jYXRpb24nIHdpdGggJycgYWZ0ZXIgZGFydDJqcyBpcyBmaXhlZC4KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdOb1N1Y2hNZXRob2RFcnJvcicsICd3aXRoSW52b2NhdGlvbicpOwogIH0KCiAgQ2xhc3MgZ2V0IG51bGxDbGFzcyB7CiAgICByZXR1cm4gX251bGxDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdOdWxsJyk7CiAgfQoKICBDbGFzcyBnZXQgbnVtQ2xhc3MgewogICAgcmV0dXJuIF9udW1DbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdudW0nKTsKICB9CgogIENsYXNzIGdldCBvYmplY3RDbGFzcyB7CiAgICByZXR1cm4gX29iamVjdENsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ09iamVjdCcpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBvYmplY3RFcXVhbHMgewogICAgcmV0dXJuIF9vYmplY3RFcXVhbHMgPz89IGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ09iamVjdCcsICc9PScpOwogIH0KCiAgQ2xhc3MgZ2V0IHByYWdtYUNsYXNzIHsKICAgIHJldHVybiBfcHJhZ21hQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAncHJhZ21hJyk7CiAgfQoKICBGaWVsZCBnZXQgcHJhZ21hTmFtZSB7CiAgICByZXR1cm4gX3ByYWdtYU5hbWUgPz89IGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ3ByYWdtYScsICduYW1lJyk7CiAgfQoKICBGaWVsZCBnZXQgcHJhZ21hT3B0aW9ucyB7CiAgICByZXR1cm4gX3ByYWdtYU9wdGlvbnMgPz89IGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ3ByYWdtYScsICdvcHRpb25zJyk7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgcHJhZ21hQ29uc3RydWN0b3IgewogICAgcmV0dXJuIF9wcmFnbWFDb25zdHJ1Y3RvciA/Pz0gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAncHJhZ21hJywgJ18nKTsKICB9CgogIENsYXNzIGdldCBzdGFja1RyYWNlQ2xhc3MgewogICAgcmV0dXJuIF9zdGFja1RyYWNlQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnU3RhY2tUcmFjZScpOwogIH0KCiAgQ2xhc3MgZ2V0IHN0cmVhbUNsYXNzIHsKICAgIHJldHVybiBfc3RyZWFtQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnU3RyZWFtJyk7CiAgfQoKICBNZW1iZXIgZ2V0IHN0cmVhbUl0ZXJhdG9yU3Vic2NyaXB0aW9uIHsKICAgIHJldHVybiBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX1N0cmVhbUl0ZXJhdG9yJywgJ19zdWJzY3JpcHRpb24nKTsKICB9CgogIE1lbWJlciBnZXQgc3RyZWFtSXRlcmF0b3JDYW5jZWwgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfU3RyZWFtSXRlcmF0b3InLCAnY2FuY2VsJyk7CiAgfQoKICBDbGFzcyBnZXQgc3RyZWFtSXRlcmF0b3JDbGFzcyB7CiAgICByZXR1cm4gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6YXN5bmMnLCAnX1N0cmVhbUl0ZXJhdG9yJyk7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgc3RyZWFtSXRlcmF0b3JEZWZhdWx0Q29uc3RydWN0b3IgewogICAgcmV0dXJuIF9zdHJlYW1JdGVyYXRvckRlZmF1bHRDb25zdHJ1Y3RvciA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX1N0cmVhbUl0ZXJhdG9yJywgJycpOwogIH0KCiAgTWVtYmVyIGdldCBzdHJlYW1JdGVyYXRvck1vdmVOZXh0IHsKICAgIHJldHVybiBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX1N0cmVhbUl0ZXJhdG9yJywgJ21vdmVOZXh0Jyk7CiAgfQoKICBNZW1iZXIgZ2V0IHN0cmVhbUl0ZXJhdG9yQ3VycmVudCB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19TdHJlYW1JdGVyYXRvcicsICdnZXQ6Y3VycmVudCcpOwogIH0KCiAgQ2xhc3MgZ2V0IHN0cmluZ0NsYXNzIHsKICAgIHJldHVybiBfc3RyaW5nQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnU3RyaW5nJyk7CiAgfQoKICBDbGFzcyBnZXQgc3ltYm9sQ2xhc3MgewogICAgcmV0dXJuIF9zeW1ib2xDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdTeW1ib2wnKTsKICB9CgogIENvbnN0cnVjdG9yIGdldCBzeW5jSXRlcmFibGVEZWZhdWx0Q29uc3RydWN0b3IgewogICAgcmV0dXJuIF9zeW5jSXRlcmFibGVEZWZhdWx0Q29uc3RydWN0b3IgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnX1N5bmNJdGVyYWJsZScsICcnKTsKICB9CgogIENsYXNzIGdldCBzeW5jSXRlcmF0b3JDbGFzcyB7CiAgICByZXR1cm4gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdfU3luY0l0ZXJhdG9yJyk7CiAgfQoKICBNZW1iZXIgZ2V0IHN5bmNJdGVyYXRvckN1cnJlbnQgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ19TeW5jSXRlcmF0b3InLCAnX2N1cnJlbnQnKTsKICB9CgogIE1lbWJlciBnZXQgc3luY0l0ZXJhdG9yWWllbGRFYWNoSXRlcmFibGUgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ19TeW5jSXRlcmF0b3InLCAnX3lpZWxkRWFjaEl0ZXJhYmxlJyk7CiAgfQoKICBDbGFzcyBnZXQgdHlwZUNsYXNzIHsKICAgIHJldHVybiBfdHlwZUNsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ1R5cGUnKTsKICB9CgogIENvbnN0cnVjdG9yIGdldCBmYWxsVGhyb3VnaEVycm9yVXJsQW5kTGluZUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfZmFsbFRocm91Z2hFcnJvclVybEFuZExpbmVDb25zdHJ1Y3RvciA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdGYWxsVGhyb3VnaEVycm9yJywgJ19jcmVhdGUnKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYm9vbEZyb21FbnZpcm9ubWVudCB7CiAgICByZXR1cm4gX2Jvb2xGcm9tRW52aXJvbm1lbnQgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnYm9vbCcsICdmcm9tRW52aXJvbm1lbnQnKTsKICB9Cn0KgYkATk48GwETHQFIEj0TEA4ODQ0QEA4NEhIQDhIUGgcYEAcUEBAGBQEcARgWFBQTExYWFBMTGBgWFBgaIDQ0IiohNhseAR4BGRYaFiMYLy0lLzE8LS8tLi8jIgFOGwEWFRgiASE7ATMxSwQBHT0EASxPBAExHEEEATIcQgQBLUcEAS5RBAFAPEkEAS8cQwQBKC9JBAEqMUsEATEvSQQBMjBKBAEnJT8EARg/BAEnKT4EATMvQwQBJS9JBAEpJ0UEAR9FBAEcOwQBGkMEARxHBAEaQwQBHE0zBAElIzsEARc9BAEiUAQBHksEASQmOgQBODRIBAEcRwQBHEcEARg/BAEmJDYEAS4sPgQBFz0EARc9BAEiID0EAR9EBAE4NFFNBAEYPwQBFz0EARpDBAEfSwQBGkMEARlLBAEcUQQBJk8EAR5LBAEaQwQBKk4EASRHBAEiPAQBNTE+BAEmSQQBJUwEARpDBAEaQwQBMy87BAEgOQQBI0YEAS1QBAEYPwQBOjZFBAEmJEEEAgEecGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0QHNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZ190ZXN0ZWQvcGFja2FnZV9jb25maWcvbGliL3BhY2thZ2VzLmRhcnSJmS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHBhY2thZ2VfY29uZmlnLnBhY2thZ2VzOwoKaW1wb3J0ICJzcmMvcGFja2FnZXNfaW1wbC5kYXJ0IjsKCi8vLyBBIHBhY2thZ2UgcmVzb2x1dGlvbiBzdHJhdGVneS4KLy8vCi8vLyBBbGxvd3MgY29udmVydGluZyBhIGBwYWNrYWdlOmAgVVJJIHRvIGEgZGlmZmVyZW50IGtpbmQgb2YgVVJJLgovLy8KLy8vIE1heSBhbHNvIGFsbG93IGxpc3RpbmcgdGhlIGF2YWlsYWJsZSBwYWNrYWdlcyBhbmQgY29udmVydGluZwovLy8gdG8gYSBgTWFwPFN0cmluZywgVXJpPmAgdGhhdCBnaXZlcyB0aGUgYmFzZSBsb2NhdGlvbiBvZiBlYWNoIGF2YWlsYWJsZQovLy8gcGFja2FnZS4gSW4gc29tZSBjYXNlcyB0aGVyZSBpcyBubyB3YXkgdG8gZmluZCB0aGUgYXZhaWxhYmxlIHBhY2thZ2VzLAovLy8gaW4gd2hpY2ggY2FzZSBbcGFja2FnZXNdIGFuZCBbYXNNYXBdIHdpbGwgdGhyb3cgaWYgdXNlZC4KLy8vIE9uZSBzdWNoIGNhc2UgaXMgaWYgdGhlIHBhY2thZ2VzIGFyZSByZXNvbHZlZCByZWxhdGl2ZSB0byBhCi8vLyBgcGFja2FnZXMvYCBkaXJlY3RvcnkgYXZhaWxhYmxlIG92ZXIgSFRUUC4KYWJzdHJhY3QgY2xhc3MgUGFja2FnZXMgewogIC8vLyBBIFtQYWNrYWdlc10gcmVzb2x2ZXIgY29udGFpbmluZyBubyBwYWNrYWdlcy4KICAvLy8KICAvLy8gVGhpcyBjb25zdGFudCBvYmplY3QgaXMgcmV0dXJuZWQgYnkgW2ZpbmRdIGFib3ZlIGlmIG5vCiAgLy8vIHBhY2thZ2UgcmVzb2x1dGlvbiBzdHJhdGVneSBpcyBmb3VuZC4KICBzdGF0aWMgY29uc3QgUGFja2FnZXMgbm9QYWNrYWdlcyA9IGNvbnN0IE5vUGFja2FnZXMoKTsKCiAgLy8vIFJlc29sdmUgYSBwYWNrYWdlIFVSSSBpbnRvIGEgbm9uLXBhY2thZ2UgVVJJLgogIC8vLwogIC8vLyBUcmFuc2xhdGVzIGEgYHBhY2thZ2U6YCBVUkksIGFjY29yZGluZyB0byB0aGUgcGFja2FnZSByZXNvbHV0aW9uCiAgLy8vIHN0cmF0ZWd5LCBpbnRvIGEgVVJJIHRoYXQgY2FuIGJlIGxvYWRlZC4KICAvLy8gQnkgZGVmYXVsdCwgb25seSBgZmlsZWAsIGBodHRwYCBhbmQgYGh0dHBzYCBVUklzIGFyZSByZXR1cm5lZC4KICAvLy8gQ3VzdG9tIGBQYWNrYWdlc2Agb2JqZWN0cyBtYXkgcmV0dXJuIG90aGVyIFVSSXMuCiAgLy8vCiAgLy8vIElmIHJlc29sdXRpb24gZmFpbHMgYmVjYXVzZSBhIHBhY2thZ2Ugd2l0aCB0aGUgcmVxdWVzdGVkIHBhY2thZ2UgbmFtZQogIC8vLyBpcyBub3QgYXZhaWxhYmxlLCB0aGUgW25vdEZvdW5kXSBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgLy8vIElmIG5vIGBub3RGb3VuZGAgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIHRocm93aW5nIGFuIGVycm9yLgogIC8vLwogIC8vLyBUaGUgW3BhY2thZ2VVcmldIG11c3QgYmUgYSB2YWxpZCBwYWNrYWdlIFVSSS4KICBVcmkgcmVzb2x2ZShVcmkgcGFja2FnZVVyaSwge1VyaSBub3RGb3VuZChVcmkgcGFja2FnZVVyaSl9KTsKCiAgLy8vIFJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGF2YWlsYWJsZSBwYWNrYWdlcy4KICAvLy8KICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSB0aGF0IGFsbG93cyBpdGVyYXRpbmcgdGhlIG5hbWVzIG9mIGF2YWlsYWJsZSBwYWNrYWdlcy4KICAvLy8KICAvLy8gU29tZSBgUGFja2FnZXNgIG9iamVjdHMgYXJlIHVuYWJsZSB0byBmaW5kIHRoZSBwYWNrYWdlIG5hbWVzLAogIC8vLyBhbmQgZ2V0dGluZyBgcGFja2FnZXNgIGZyb20gc3VjaCBhIGBQYWNrYWdlc2Agb2JqZWN0IHdpbGwgdGhyb3cuCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGFja2FnZXM7CgogIC8vLyBSZXR1cm4gdGhlIG5hbWVzLXRvLWJhc2UtVVJJIG1hcHBpbmcgb2YgdGhlIGF2YWlsYWJsZSBwYWNrYWdlcy4KICAvLy8KICAvLy8gUmV0dXJucyBhIG1hcCBmcm9tIHBhY2thZ2UgbmFtZSB0byBhIGJhc2UgVVJJLgogIC8vLyBUaGUgW3Jlc29sdmVdIG1ldGhvZCB3aWxsIHJlc29sdmUgYSBwYWNrYWdlIFVSSSB3aXRoIGEgc3BlY2lmaWMgcGFja2FnZQogIC8vLyBuYW1lIHRvIGEgcGF0aCBleHRlbmRpbmcgdGhlIGJhc2UgVVJJIHRoYXQgdGhpcyBtYXAgZ2l2ZXMgZm9yIHRoYXQKICAvLy8gcGFja2FnZSBuYW1lLgogIC8vLwogIC8vLyBTb21lIGBQYWNrYWdlc2Agb2JqZWN0cyBhcmUgdW5hYmxlIHRvIGZpbmQgdGhlIHBhY2thZ2UgbmFtZXMsCiAgLy8vIGFuZCBjYWxsaW5nIGBhc01hcGAgb24gc3VjaCBhIGBQYWNrYWdlc2Agb2JqZWN0IHdpbGwgdGhyb3cuCiAgTWFwPFN0cmluZywgVXJpPiBhc01hcCgpOwp9CjwATk48ASEBIQEjBEMEQUtLPUAvGjQGPSw5ATQGRy9FNwZMO08GND8BMgZRBkRHIQFGBjVOSRQGREIcAgEkcGFja2FnZTpwYWNrYWdlX2NvbmZpZy9wYWNrYWdlcy5kYXJ0RXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZ190ZXN0ZWQvcGFja2FnZV9jb25maWcvbGliL3BhY2thZ2VzX2ZpbGUuZGFydJiWLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgcGFja2FnZV9jb25maWcucGFja2FnZXNfZmlsZTsKCmltcG9ydCAicGFja2FnZTpjaGFyY29kZS9hc2NpaS5kYXJ0IjsKCmltcG9ydCAic3JjL3V0aWwuZGFydCIgc2hvdyBpc1ZhbGlkUGFja2FnZU5hbWU7CgovLy8gUGFyc2VzIGEgYC5wYWNrYWdlc2AgZmlsZSBpbnRvIGEgbWFwIGZyb20gcGFja2FnZSBuYW1lIHRvIGJhc2UgVVJJLgovLy8KLy8vIFRoZSBbc291cmNlXSBpcyB0aGUgYnl0ZSBjb250ZW50IG9mIGEgYC5wYWNrYWdlc2AgZmlsZSwgYXNzdW1lZCB0byBiZQovLy8gVVRGLTggZW5jb2RlZC4gSW4gcHJhY3RpY2UsIGFsbCBzaWduaWZpY2FudCBwYXJ0cyBvZiB0aGUgZmlsZSBtdXN0IGJlIEFTQ0lJLAovLy8gc28gTGF0aW4tMSBvciBXaW5kb3dzLTEyNTIgZW5jb2Rpbmcgd2lsbCBhbHNvIHdvcmsgZmluZS4KLy8vCi8vLyBJZiB0aGUgZmlsZSBjb250ZW50IGlzIGF2YWlsYWJsZSBhcyBhIHN0cmluZywgaXRzIFtTdHJpbmcuY29kZVVuaXRzXSBjYW4KLy8vIGJlIHVzZWQgYXMgdGhlIGBzb3VyY2VgIGFyZ3VtZW50IG9mIHRoaXMgZnVuY3Rpb24uCi8vLwovLy8gVGhlIFtiYXNlTG9jYXRpb25dIGlzIHVzZWQgYXMgYSBiYXNlIFVSSSB0byByZXNvbHZlIGFsbCByZWxhdGl2ZQovLy8gVVJJIHJlZmVyZW5jZXMgYWdhaW5zdC4KLy8vIElmIHRoZSBjb250ZW50IHdhcyByZWFkIGZyb20gYSBmaWxlLCBgYmFzZUxvY2F0aW9uYCBzaG91bGQgYmUgdGhlCi8vLyBsb2NhdGlvbiBvZiB0aGF0IGZpbGUuCi8vLwovLy8gUmV0dXJucyBhIHNpbXBsZSBtYXBwaW5nIGZyb20gcGFja2FnZSBuYW1lIHRvIHBhY2thZ2UgbG9jYXRpb24uCk1hcDxTdHJpbmcsIFVyaT4gcGFyc2UoTGlzdDxpbnQ+IHNvdXJjZSwgVXJpIGJhc2VMb2NhdGlvbikgewogIGludCBpbmRleCA9IDA7CiAgTWFwPFN0cmluZywgVXJpPiByZXN1bHQgPSA8U3RyaW5nLCBVcmk+e307CiAgd2hpbGUgKGluZGV4IDwgc291cmNlLmxlbmd0aCkgewogICAgYm9vbCBpc0NvbW1lbnQgPSBmYWxzZTsKICAgIGludCBzdGFydCA9IGluZGV4OwogICAgaW50IHNlcGFyYXRvckluZGV4ID0gLTE7CiAgICBpbnQgZW5kID0gc291cmNlLmxlbmd0aDsKICAgIGludCBjaGFyID0gc291cmNlW2luZGV4KytdOwogICAgaWYgKGNoYXIgPT0gJGNyIHx8IGNoYXIgPT0gJGxmKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGNoYXIgPT0gJGNvbG9uKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oIk1pc3NpbmcgcGFja2FnZSBuYW1lIiwgc291cmNlLCBpbmRleCAtIDEpOwogICAgfQogICAgaXNDb21tZW50ID0gY2hhciA9PSAkaGFzaDsKICAgIHdoaWxlIChpbmRleCA8IHNvdXJjZS5sZW5ndGgpIHsKICAgICAgY2hhciA9IHNvdXJjZVtpbmRleCsrXTsKICAgICAgaWYgKGNoYXIgPT0gJGNvbG9uICYmIHNlcGFyYXRvckluZGV4IDwgMCkgewogICAgICAgIHNlcGFyYXRvckluZGV4ID0gaW5kZXggLSAxOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gJGNyIHx8IGNoYXIgPT0gJGxmKSB7CiAgICAgICAgZW5kID0gaW5kZXggLSAxOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNDb21tZW50KSBjb250aW51ZTsKICAgIGlmIChzZXBhcmF0b3JJbmRleCA8IDApIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiTm8gJzonIG9uIGxpbmUiLCBzb3VyY2UsIGluZGV4IC0gMSk7CiAgICB9CiAgICB2YXIgcGFja2FnZU5hbWUgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoc291cmNlLCBzdGFydCwgc2VwYXJhdG9ySW5kZXgpOwogICAgaWYgKCFpc1ZhbGlkUGFja2FnZU5hbWUocGFja2FnZU5hbWUpKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oIk5vdCBhIHZhbGlkIHBhY2thZ2UgbmFtZSIsIHBhY2thZ2VOYW1lLCAwKTsKICAgIH0KICAgIHZhciBwYWNrYWdlVXJpID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKHNvdXJjZSwgc2VwYXJhdG9ySW5kZXggKyAxLCBlbmQpOwogICAgdmFyIHBhY2thZ2VMb2NhdGlvbiA9IFVyaS5wYXJzZShwYWNrYWdlVXJpKTsKICAgIHBhY2thZ2VMb2NhdGlvbiA9IGJhc2VMb2NhdGlvbi5yZXNvbHZlVXJpKHBhY2thZ2VMb2NhdGlvbik7CiAgICBpZiAoIXBhY2thZ2VMb2NhdGlvbi5wYXRoLmVuZHNXaXRoKCcvJykpIHsKICAgICAgcGFja2FnZUxvY2F0aW9uID0KICAgICAgICAgIHBhY2thZ2VMb2NhdGlvbi5yZXBsYWNlKHBhdGg6IHBhY2thZ2VMb2NhdGlvbi5wYXRoICsgIi8iKTsKICAgIH0KICAgIGlmIChyZXN1bHQuY29udGFpbnNLZXkocGFja2FnZU5hbWUpKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiU2FtZSBwYWNrYWdlIG5hbWUgb2NjdXJlZCB0d2ljZS4iLCBzb3VyY2UsIHN0YXJ0KTsKICAgIH0KICAgIHJlc3VsdFtwYWNrYWdlTmFtZV0gPSBwYWNrYWdlTG9jYXRpb247CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCi8vLyBXcml0ZXMgdGhlIG1hcHBpbmcgdG8gYSBbU3RyaW5nU2lua10uCi8vLwovLy8gSWYgW2NvbW1lbnRdIGlzIHByb3ZpZGVkLCB0aGUgb3V0cHV0IHdpbGwgY29udGFpbiB0aGlzIGNvbW1lbnQKLy8vIHdpdGggYCMgYCBpbiBmcm9udCBvZiBlYWNoIGxpbmUuCi8vLyBMaW5lcyBhcmUgZGVmaW5lZCBhcyBlbmRpbmcgaW4gbGluZSBmZWVkIChgJ1xuJ2ApLiBJZiB0aGUgZmluYWwKLy8vIGxpbmUgb2YgdGhlIGNvbW1lbnQgZG9lc24ndCBlbmQgaW4gYSBsaW5lIGZlZWQsIG9uZSB3aWxsIGJlIGFkZGVkLgovLy8KLy8vIElmIFtiYXNlVXJpXSBpcyBwcm92aWRlZCwgcGFja2FnZSBsb2NhdGlvbnMgd2lsbCBiZSBtYWRlIHJlbGF0aXZlCi8vLyB0byB0aGUgYmFzZSBVUkksIGlmIHBvc3NpYmxlLCBiZWZvcmUgd3JpdGluZy4KLy8vCi8vLyBBbGwgdGhlIGtleXMgb2YgW3BhY2thZ2VNYXBwaW5nXSBtdXN0IGJlIHZhbGlkIHBhY2thZ2UgbmFtZXMsCi8vLyBhbmQgdGhlIHZhbHVlcyBtdXN0IGJlIFVSSXMgdGhhdCBkbyBub3QgaGF2ZSB0aGUgYHBhY2thZ2U6YCBzY2hlbWUuCnZvaWQgd3JpdGUoU3RyaW5nU2luayBvdXRwdXQsIE1hcDxTdHJpbmcsIFVyaT4gcGFja2FnZU1hcHBpbmcsCiAgICB7VXJpIGJhc2VVcmksIFN0cmluZyBjb21tZW50fSkgewogIGlmIChiYXNlVXJpICE9IG51bGwgJiYgIWJhc2VVcmkuaXNBYnNvbHV0ZSkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoYmFzZVVyaSwgImJhc2VVcmkiLCAiTXVzdCBiZSBhYnNvbHV0ZSIpOwogIH0KCiAgaWYgKGNvbW1lbnQgIT0gbnVsbCkgewogICAgdmFyIGxpbmVzID0gY29tbWVudC5zcGxpdCgnXG4nKTsKICAgIGlmIChsaW5lcy5sYXN0LmlzRW1wdHkpIGxpbmVzLnJlbW92ZUxhc3QoKTsKICAgIGZvciAodmFyIGNvbW1lbnRMaW5lIGluIGxpbmVzKSB7CiAgICAgIG91dHB1dC53cml0ZSgnIyAnKTsKICAgICAgb3V0cHV0LndyaXRlbG4oY29tbWVudExpbmUpOwogICAgfQogIH0gZWxzZSB7CiAgICBvdXRwdXQud3JpdGUoIiMgZ2VuZXJhdGVkIGJ5IHBhY2thZ2U6cGFja2FnZV9jb25maWcgYXQgIik7CiAgICBvdXRwdXQud3JpdGUobmV3IERhdGVUaW1lLm5vdygpKTsKICAgIG91dHB1dC53cml0ZWxuKCk7CiAgfQoKICBwYWNrYWdlTWFwcGluZy5mb3JFYWNoKChTdHJpbmcgcGFja2FnZU5hbWUsIFVyaSB1cmkpIHsKICAgIC8vIFZhbGlkYXRlIHBhY2thZ2VOYW1lLgogICAgaWYgKCFpc1ZhbGlkUGFja2FnZU5hbWUocGFja2FnZU5hbWUpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCciJHBhY2thZ2VOYW1lIiBpcyBub3QgYSB2YWxpZCBwYWNrYWdlIG5hbWUnKTsKICAgIH0KICAgIGlmICh1cmkuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgICJQYWNrYWdlIGxvY2F0aW9uIG11c3Qgbm90IGJlIGEgcGFja2FnZTogVVJJIiwgdXJpLnRvU3RyaW5nKCkpOwogICAgfQogICAgb3V0cHV0LndyaXRlKHBhY2thZ2VOYW1lKTsKICAgIG91dHB1dC53cml0ZSgnOicpOwogICAgLy8gSWYgYmFzZVVyaSBwcm92aWRlZCwgbWFrZSB1cmkgcmVsYXRpdmUuCiAgICBpZiAoYmFzZVVyaSAhPSBudWxsKSB7CiAgICAgIHVyaSA9IF9yZWxhdGl2aXplKHVyaSwgYmFzZVVyaSk7CiAgICB9CiAgICBvdXRwdXQud3JpdGUodXJpKTsKICAgIGlmICghdXJpLnBhdGguZW5kc1dpdGgoJy8nKSkgewogICAgICBvdXRwdXQud3JpdGUoJy8nKTsKICAgIH0KICAgIG91dHB1dC53cml0ZWxuKCk7CiAgfSk7Cn0KCi8vLyBBdHRlbXB0cyB0byByZXR1cm4gYSByZWxhdGl2ZSBVUkkgZm9yIFt1cmldLgovLy8KLy8vIFRoZSByZXN1bHQgVVJJIHNhdGlzZmllcyBgYmFzZVVyaS5yZXNvbHZlVXJpKHJlc3VsdCkgPT0gdXJpYCwKLy8vIGJ1dCBtYXkgYmUgcmVsYXRpdmUuCi8vLyBUaGUgYGJhc2VVcmlgIG11c3QgYmUgYWJzb2x1dGUuClVyaSBfcmVsYXRpdml6ZShVcmkgdXJpLCBVcmkgYmFzZVVyaSkgewogIGFzc2VydChiYXNlVXJpLmlzQWJzb2x1dGUpOwogIGlmICh1cmkuaGFzUXVlcnkgfHwgdXJpLmhhc0ZyYWdtZW50KSB7CiAgICB1cmkgPSBuZXcgVXJpKAogICAgICAgIHNjaGVtZTogdXJpLnNjaGVtZSwKICAgICAgICB1c2VySW5mbzogdXJpLmhhc0F1dGhvcml0eSA/IHVyaS51c2VySW5mbyA6IG51bGwsCiAgICAgICAgaG9zdDogdXJpLmhhc0F1dGhvcml0eSA/IHVyaS5ob3N0IDogbnVsbCwKICAgICAgICBwb3J0OiB1cmkuaGFzQXV0aG9yaXR5ID8gdXJpLnBvcnQgOiBudWxsLAogICAgICAgIHBhdGg6IHVyaS5wYXRoKTsKICB9CgogIC8vIEFscmVhZHkgcmVsYXRpdmUuIFdlIGFzc3VtZSB0aGUgY2FsbGVyIGtub3dzIHdoYXQgdGhleSBhcmUgZG9pbmcuCiAgaWYgKCF1cmkuaXNBYnNvbHV0ZSkgcmV0dXJuIHVyaTsKCiAgaWYgKGJhc2VVcmkuc2NoZW1lICE9IHVyaS5zY2hlbWUpIHsKICAgIHJldHVybiB1cmk7CiAgfQoKICAvLyBJZiBhdXRob3JpdHkgZGlmZmVycywgd2UgY291bGQgcmVtb3ZlIHRoZSBzY2hlbWUsIGJ1dCBpdCdzIG5vdCB3b3J0aCBpdC4KICBpZiAodXJpLmhhc0F1dGhvcml0eSAhPSBiYXNlVXJpLmhhc0F1dGhvcml0eSkgcmV0dXJuIHVyaTsKICBpZiAodXJpLmhhc0F1dGhvcml0eSkgewogICAgaWYgKHVyaS51c2VySW5mbyAhPSBiYXNlVXJpLnVzZXJJbmZvIHx8CiAgICAgICAgdXJpLmhvc3QudG9Mb3dlckNhc2UoKSAhPSBiYXNlVXJpLmhvc3QudG9Mb3dlckNhc2UoKSB8fAogICAgICAgIHVyaS5wb3J0ICE9IGJhc2VVcmkucG9ydCkgewogICAgICByZXR1cm4gdXJpOwogICAgfQogIH0KCiAgYmFzZVVyaSA9IGJhc2VVcmkubm9ybWFsaXplUGF0aCgpOwogIExpc3Q8U3RyaW5nPiBiYXNlID0gYmFzZVVyaS5wYXRoU2VnbWVudHMudG9MaXN0KCk7CiAgaWYgKGJhc2UuaXNOb3RFbXB0eSkgewogICAgYmFzZSA9IG5ldyBMaXN0PFN0cmluZz4uZnJvbShiYXNlKS4ucmVtb3ZlTGFzdCgpOwogIH0KICB1cmkgPSB1cmkubm9ybWFsaXplUGF0aCgpOwogIExpc3Q8U3RyaW5nPiB0YXJnZXQgPSB1cmkucGF0aFNlZ21lbnRzLnRvTGlzdCgpOwogIGlmICh0YXJnZXQuaXNOb3RFbXB0eSAmJiB0YXJnZXQubGFzdC5pc0VtcHR5KSB0YXJnZXQucmVtb3ZlTGFzdCgpOwogIGludCBpbmRleCA9IDA7CiAgd2hpbGUgKGluZGV4IDwgYmFzZS5sZW5ndGggJiYgaW5kZXggPCB0YXJnZXQubGVuZ3RoKSB7CiAgICBpZiAoYmFzZVtpbmRleF0gIT0gdGFyZ2V0W2luZGV4XSkgewogICAgICBicmVhazsKICAgIH0KICAgIGluZGV4Kys7CiAgfQogIGlmIChpbmRleCA9PSBiYXNlLmxlbmd0aCkgewogICAgaWYgKGluZGV4ID09IHRhcmdldC5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG5ldyBVcmkocGF0aDogIi4vIik7CiAgICB9CiAgICByZXR1cm4gbmV3IFVyaShwYXRoOiB0YXJnZXQuc2tpcChpbmRleCkuam9pbignLycpKTsKICB9IGVsc2UgaWYgKGluZGV4ID4gMCkgewogICAgcmV0dXJuIG5ldyBVcmkoCiAgICAgICAgcGF0aDogJy4uLycgKiAoYmFzZS5sZW5ndGggLSBpbmRleCkgKyB0YXJnZXQuc2tpcChpbmRleCkuam9pbignLycpKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHVyaTsKICB9Cn0KgL4ATk48ASYBJgEwAUgESlE9BE03BEUcRhsERD0RLSIcFx0dICYQBhpMBh8kHjIkLxkPCAYdHkYGTyxNBlAxQC8YRQYrIT4GKwQRAgEqBEMlREcERjIEQkg/JTBLBAEZJTAlGiMGCz8mFgQBOR0sTQYjJUoGHxcvGycGFyMZBhYGAgExBEIZJCgeKRMcOjIyGQQBRyMBJhAEAU48GixAJBIGBAElNRk2BB0zRRE5KA0GDQQeIiIGOBoUTQsQBAIBKXBhY2thZ2U6cGFja2FnZV9jb25maWcvcGFja2FnZXNfZmlsZS5kYXJ0SXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZ190ZXN0ZWQvcGFja2FnZV9jb25maWcvbGliL3NyYy9wYWNrYWdlc19pbXBsLmRhcnSMTS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gSW1wbGVtZW50YXRpb25zIG9mIFtQYWNrYWdlc10gdGhhdCBtYXkgYmUgdXNlZCBpbiBlaXRoZXIgc2VydmVyIG9yIGJyb3dzZXIKLy8vIGJhc2VkIGFwcGxpY2F0aW9ucy4gRm9yIGltcGxlbWVudGF0aW9ucyB0aGF0IGNhbiBvbmx5IHJ1biBpbiB0aGUgYnJvd3NlciwKLy8vIHNlZSBbcGFja2FnZV9jb25maWcucGFja2FnZXNfaW9faW1wbF0uCmxpYnJhcnkgcGFja2FnZV9jb25maWcucGFja2FnZXNfaW1wbDsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IFVubW9kaWZpYWJsZU1hcFZpZXc7CgppbXBvcnQgIi4uL3BhY2thZ2VzLmRhcnQiOwppbXBvcnQgInV0aWwuZGFydCIgc2hvdyBjaGVja1ZhbGlkUGFja2FnZVVyaTsKCi8vLyBBIFtQYWNrYWdlc10gbnVsbC1vYmplY3QuCmNsYXNzIE5vUGFja2FnZXMgaW1wbGVtZW50cyBQYWNrYWdlcyB7CiAgY29uc3QgTm9QYWNrYWdlcygpOwoKICBVcmkgcmVzb2x2ZShVcmkgcGFja2FnZVVyaSwge1VyaSBub3RGb3VuZChVcmkgcGFja2FnZVVyaSl9KSB7CiAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBjaGVja1ZhbGlkUGFja2FnZVVyaShwYWNrYWdlVXJpKTsKICAgIGlmIChub3RGb3VuZCAhPSBudWxsKSByZXR1cm4gbm90Rm91bmQocGFja2FnZVVyaSk7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICBwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsICdObyBwYWNrYWdlIG5hbWVkICIkcGFja2FnZU5hbWUiJyk7CiAgfQoKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBwYWNrYWdlcyA9PiBuZXcgSXRlcmFibGU8U3RyaW5nPi5lbXB0eSgpOwoKICBNYXA8U3RyaW5nLCBVcmk+IGFzTWFwKCkgPT4gY29uc3QgPFN0cmluZywgVXJpPnt9Owp9CgovLy8gQmFzZSBjbGFzcyBmb3IgW1BhY2thZ2VzXSBpbXBsZW1lbnRhdGlvbnMuCi8vLwovLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBbcmVzb2x2ZV0gbWV0aG9kIGluIHRlcm1zIG9mIGEgcHJpdmF0ZQovLy8gbWVtYmVyCmFic3RyYWN0IGNsYXNzIFBhY2thZ2VzQmFzZSBpbXBsZW1lbnRzIFBhY2thZ2VzIHsKICBVcmkgcmVzb2x2ZShVcmkgcGFja2FnZVVyaSwge1VyaSBub3RGb3VuZChVcmkgcGFja2FnZVVyaSl9KSB7CiAgICBwYWNrYWdlVXJpID0gcGFja2FnZVVyaS5ub3JtYWxpemVQYXRoKCk7CiAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBjaGVja1ZhbGlkUGFja2FnZVVyaShwYWNrYWdlVXJpKTsKICAgIFVyaSBwYWNrYWdlQmFzZSA9IGdldEJhc2UocGFja2FnZU5hbWUpOwogICAgaWYgKHBhY2thZ2VCYXNlID09IG51bGwpIHsKICAgICAgaWYgKG5vdEZvdW5kICE9IG51bGwpIHJldHVybiBub3RGb3VuZChwYWNrYWdlVXJpKTsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgICBwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsICdObyBwYWNrYWdlIG5hbWVkICIkcGFja2FnZU5hbWUiJyk7CiAgICB9CiAgICBTdHJpbmcgcGFja2FnZVBhdGggPSBwYWNrYWdlVXJpLnBhdGguc3Vic3RyaW5nKHBhY2thZ2VOYW1lLmxlbmd0aCArIDEpOwogICAgcmV0dXJuIHBhY2thZ2VCYXNlLnJlc29sdmUocGFja2FnZVBhdGgpOwogIH0KCiAgLy8vIEZpbmQgYSBiYXNlIGxvY2F0aW9uIGZvciBhIHBhY2thZ2UgbmFtZS4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgbm8gcGFja2FnZSBleGlzdHMgd2l0aCB0aGF0IG5hbWUsIGFuZCB0aGF0IGNhbiBiZQogIC8vLyBkZXRlcm1pbmVkLgogIFVyaSBnZXRCYXNlKFN0cmluZyBwYWNrYWdlTmFtZSk7Cn0KCi8vLyBBIFtQYWNrYWdlc10gaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYW4gZXhpc3RpbmcgbWFwLgpjbGFzcyBNYXBQYWNrYWdlcyBleHRlbmRzIFBhY2thZ2VzQmFzZSB7CiAgZmluYWwgTWFwPFN0cmluZywgVXJpPiBfbWFwcGluZzsKICBNYXBQYWNrYWdlcyh0aGlzLl9tYXBwaW5nKTsKCiAgVXJpIGdldEJhc2UoU3RyaW5nIHBhY2thZ2VOYW1lKSA9PiBfbWFwcGluZ1twYWNrYWdlTmFtZV07CgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IHBhY2thZ2VzID0+IF9tYXBwaW5nLmtleXM7CgogIE1hcDxTdHJpbmcsIFVyaT4gYXNNYXAoKSA9PiBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTdHJpbmcsIFVyaT4oX21hcHBpbmcpOwp9CgovLy8gQSBbUGFja2FnZXNdIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGEgcmVtb3RlIChlLmcuLCBIVFRQKSBkaXJlY3RvcnkuCi8vLwovLy8gVGhlcmUgaXMgbm8gd2F5IHRvIGRldGVjdCB3aGljaCBwYWNrYWdlcyBleGlzdCBzaG9ydCBvZiB0cnlpbmcgdG8gdXNlCi8vLyB0aGVtLiBZb3UgY2FuJ3QgbmVjZXNzYXJpbHkgY2hlY2sgd2hldGhlciBhIGRpcmVjdG9yeSBleGlzdHMsCi8vLyBleGNlcHQgYnkgY2hlY2tpbmcgZm9yIGEga25vdyBmaWxlIGluIHRoZSBkaXJlY3RvcnkuCmNsYXNzIE5vbkZpbGVQYWNrYWdlc0RpcmVjdG9yeVBhY2thZ2VzIGV4dGVuZHMgUGFja2FnZXNCYXNlIHsKICBmaW5hbCBVcmkgX3BhY2thZ2VCYXNlOwogIE5vbkZpbGVQYWNrYWdlc0RpcmVjdG9yeVBhY2thZ2VzKHRoaXMuX3BhY2thZ2VCYXNlKTsKCiAgVXJpIGdldEJhc2UoU3RyaW5nIHBhY2thZ2VOYW1lKSA9PiBfcGFja2FnZUJhc2UucmVzb2x2ZSgiJHBhY2thZ2VOYW1lLyIpOwoKICBFcnJvciBfZmFpbExpc3RpbmdQYWNrYWdlcygpIHsKICAgIHJldHVybiBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGxpc3QgcGFja2FnZXMgZm9yIGEgJHtfcGFja2FnZUJhc2Uuc2NoZW1lfTogIgogICAgICAgICJiYXNlZCBwYWNrYWdlIHJvb3QiKTsKICB9CgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IHBhY2thZ2VzIHsKICAgIHRocm93IF9mYWlsTGlzdGluZ1BhY2thZ2VzKCk7CiAgfQoKICBNYXA8U3RyaW5nLCBVcmk+IGFzTWFwKCkgewogICAgdGhyb3cgX2ZhaWxMaXN0aW5nUGFja2FnZXMoKTsKICB9Cn0KXgBOTjwBT04rJgEzARsuAR4nFgFAOzcjRgQBQQE1AgEvBEULMkAtOywfOSVIBkwtBAEvBkoSIwIBOikjHgE8ATIBTgIBSgRKQjk+GjcBTAEhIT4fBAEiIgQBHSIEAgEtcGFja2FnZTpwYWNrYWdlX2NvbmZpZy9zcmMvcGFja2FnZXNfaW1wbC5kYXJ0SHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfcHJvdG90eXBlL3Rlcm1pbmFsX2NvbG9yX3N1cHBvcnQuZGFydI0rLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZnJvbnRfZW5kLnRlcm1pbmFsX2NvbG9yX3N1cHBvcnQ7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBqc29uRW5jb2RlOwoKaW1wb3J0ICdkYXJ0OmlvJyBzaG93IFBsYXRmb3JtLCBQcm9jZXNzLCBQcm9jZXNzUmVzdWx0LCBzdGRlcnIsIHN0ZG91dDsKCmltcG9ydCAnLi4vZmFzdGEvY29sb3JzLmRhcnQnIHNob3cgQUxMX0NPREVTLCBURVJNSU5BTF9DQVBBQklMSVRJRVM7CgppbXBvcnQgJ2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0JyBzaG93IERpYWdub3N0aWNNZXNzYWdlOwoKLy8vIFRydWUgaWYgd2Ugc2hvdWxkIGVuYWJsZSBjb2xvcnMgaW4gb3V0cHV0LgovLy8KLy8vIFdlIGVuYWJsZSBjb2xvcnMgb25seSB3aGVuIGJvdGggW3N0ZG91dF0gYW5kIFtzdGRlcnJdIHN1cHBvcnQgQU5TSSBlc2NhcGVzLgpmaW5hbCBib29sIGVuYWJsZVRlcm1pbmFsQ29sb3JzID0gX2NvbXB1dGVFbmFibGVDb2xvcnMoKTsKCnZvaWQgcHJpbnREaWFnbm9zdGljTWVzc2FnZSgKICAgIERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsIHZvaWQgRnVuY3Rpb24oU3RyaW5nKSBwcmludGxuKSB7CiAgaWYgKGVuYWJsZVRlcm1pbmFsQ29sb3JzKSB7CiAgICBtZXNzYWdlLmFuc2lGb3JtYXR0ZWQuZm9yRWFjaChwcmludGxuKTsKICB9IGVsc2UgewogICAgbWVzc2FnZS5wbGFpblRleHRGb3JtYXR0ZWQuZm9yRWFjaChwcmludGxuKTsKICB9Cn0KCi8vLyBPbiBXaW5kb3dzLCBjb2xvcnMgYXJlIGVuYWJsZWQgaWYgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciBzdXBwb3J0cyBBTlNJCi8vLyBlc2NhcGVzLiAgT24gb3RoZXIgcGxhdGZvcm1zLCB3ZSByZWx5IG9uIHRoZSBleHRlcm5hbCBwcm9ncmFtcyBgdHR5YCBhbmQKLy8vIGB0cHV0YCB0byBjb21wdXRlIGlmIEFOU0kgY29sb3JzIGFyZSBzdXBwb3J0ZWQuCmJvb2wgX2NvbXB1dGVFbmFibGVDb2xvcnMoKSB7CiAgY29uc3QgYm9vbCBkZWJ1ZyA9CiAgICAgIGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJmcm9udF9lbmQuZGVidWdfY29tcHV0ZV9lbmFibGVfY29sb3JzIik7CgogIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgIGlmICghc3Rkb3V0LnN1cHBvcnRzQW5zaUVzY2FwZXMgfHwgIXN0ZGVyci5zdXBwb3J0c0Fuc2lFc2NhcGVzKSB7CiAgICAgIC8vIEluIHRoaXMgY2FzZSwgZWl0aGVyIFtzdGRvdXRdIG9yIFtzdGRlcnJdIGRpZCBub3Qgc3VwcG9ydCB0aGUgcHJvcGVydHkKICAgICAgLy8gYHN1cHBvcnRzQW5zaUVzY2FwZXNgLiBTaW5jZSB3ZSBkbyBub3QgaGF2ZSBhbm90aGVyIHdheSB0byBkZXRlcm1pbmUKICAgICAgLy8gc3VwcG9ydCBmb3IgY29sb3JzLCB3ZSBkaXNhYmxlIHRoZW0uCiAgICAgIGlmIChkZWJ1ZykgewogICAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzIGFzIEFOU0kgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoZGVidWcpIHsKICAgICAgcHJpbnQoIkVuYWJsaW5nIGNvbG9ycyBhcyBPUyBpcyBXaW5kb3dzLiIpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBXZSBoYXZlIHRvIGNoZWNrIGlmIHRoZSB0ZXJtaW5hbCBhY3R1YWxseSBzdXBwb3J0cyBjb2xvcnMuIEN1cnJlbnRseSwgdG8KICAvLyBhdm9pZCBsaW5raW5nIHRoZSBEYXJ0IFZNIHdpdGggbmN1cnNlcywgQU5TSSBlc2NhcGUgc3VwcG9ydCBpcyByZWR1Y2VkIHRvCiAgLy8gYFBsYXRmb3JtLmVudmlyb25tZW50WydURVJNJ10uY29udGFpbnMoInh0ZXJtIilgLgoKICAvLyBDaGVjayBpZiBzdGRpbiBpcyBhIHRlcm1pbmFsIChUVFkpLgogIFByb2Nlc3NSZXN1bHQgcmVzdWx0ID0KICAgICAgUHJvY2Vzcy5ydW5TeW5jKCIvYmluL3NoIiwgWyItYyIsICJ0dHkgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIl0pOwoKICBpZiAocmVzdWx0LmV4aXRDb2RlICE9IDApIHsKICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgc3RkaW4gaXNuJ3QgYSB0ZXJtaW5hbC4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIFRoZSBgLVNgIG9wdGlvbiBvZiBgdHB1dGAgYWxsb3dzIHVzIHRvIHF1ZXJ5IG11bHRpcGxlIGNhcGFiaWxpdGllcyBhdAogIC8vIG9uY2UuCiAgcmVzdWx0ID0gUHJvY2Vzcy5ydW5TeW5jKAogICAgICAiL2Jpbi9zaCIsIFsiLWMiLCAicHJpbnRmICclcycgJyRURVJNSU5BTF9DQVBBQklMSVRJRVMnIHwgdHB1dCAtUyJdKTsKCiAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPSAwKSB7CiAgICBpZiAoZGVidWcpIHsKICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMsIHJ1bm5pbmcgdHB1dCBmYWlsZWQuIik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBMaXN0PFN0cmluZz4gbGluZXMgPSByZXN1bHQuc3Rkb3V0LnNwbGl0KCJcbiIpOwoKICBpZiAobGluZXMubGVuZ3RoICE9IDIpIHsKICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgdW5leHBlY3RlZCBvdXRwdXQgZnJvbSB0cHV0OiAiCiAgICAgICAgICAiJHtqc29uRW5jb2RlKHJlc3VsdC5zdGRvdXQpfS4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFN0cmluZyBudW1iZXJPZkNvbG9ycyA9IGxpbmVzWzBdOwogIGlmICgoaW50LnRyeVBhcnNlKG51bWJlck9mQ29sb3JzKSA/PyAtMSkgPCA4KSB7CiAgICBpZiAoZGVidWcpIHsKICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMsIGxlc3MgdGhhbiA4IGNvbG9ycyBzdXBwb3J0ZWQ6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUobnVtYmVyT2ZDb2xvcnMpfS4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFN0cmluZyBhbGxDb2RlcyA9IGxpbmVzWzFdLnRyaW0oKTsKICBpZiAoQUxMX0NPREVTICE9IGFsbENvZGVzKSB7CiAgICBpZiAoZGVidWcpIHsKICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMsIGNvbG9yIGNvZGVzIGRvbid0IG1hdGNoOiAiCiAgICAgICAgICAiJHtqc29uRW5jb2RlKEFMTF9DT0RFUyl9ICE9ICR7anNvbkVuY29kZShhbGxDb2Rlcyl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaWYgKGRlYnVnKSB7CiAgICBwcmludCgiRW5hYmxpbmcgY29sb3JzLiIpOwogIH0KICByZXR1cm4gdHJ1ZTsKfQpxAE5OPAEqAScBSAFFATkBLwRQOgEdQB4sCzEEAgFLTTQeFUsBHEZQTi4TQAgUBhEyBhEEAU5PNwEpGUoBHhE9BhIEAUsLHEwBHhE6BhIEATIBGxFBLAYSBAEkMhFCLQYSBAElHxE9QwYSBAEPHwQPAgE/cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvdGVybWluYWxfY29sb3Jfc3VwcG9ydC5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9jb21tYW5kX2xpbmVfcmVwb3J0aW5nLmRhcnSYSi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gUHJvdmlkZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSByZXBvcnQgYW5kIGZvcm1hdCBtZXRob2RzIG9mCi8vLyBbQ29tcGlsZXJDb250ZXh0XSB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgY29tbWFuZC1saW5lIHRvb2xzLiBUaGUgbWV0aG9kcyBpbgovLy8gdGhpcyBsaWJyYXJ5IGFyZW4ndCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZGlyZWN0bHksIGluc3RlYWQsIG9uZSBzaG91bGQgdXNlCi8vLyBbQ29tcGlsZXJDb250ZXh0XS4KbGlicmFyeSBmYXN0YS5jb21tYW5kX2xpbmVfcmVwb3J0aW5nOwoKaW1wb3J0ICdkYXJ0Om1hdGgnIHNob3cgbWluOwoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnIHNob3cgVWludDhMaXN0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMb2NhdGlvbiwgVHJlZU5vZGU7CgppbXBvcnQgJy4uL2NvbXB1dGVfcGxhdGZvcm1fYmluYXJpZXNfbG9jYXRpb24uZGFydCcgc2hvdyB0cmFuc2xhdGVTZGs7CgppbXBvcnQgJ2NvbG9ycy5kYXJ0JyBzaG93IGdyZWVuLCBtYWdlbnRhLCByZWQ7CgppbXBvcnQgJ2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgppbXBvcnQgJ2NyYXNoLmRhcnQnIHNob3cgQ3Jhc2gsIHNhZmVUb1N0cmluZzsKCmltcG9ydCAnZmFzdGFfY29kZXMuZGFydCcgc2hvdyBMb2NhdGVkTWVzc2FnZTsKCmltcG9ydCAnbWVzc2FnZXMuZGFydCcgc2hvdyBnZXRMb2NhdGlvbiwgZ2V0U291cmNlTGluZTsKCmltcG9ydCAncHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgJ3Jlc29sdmVfaW5wdXRfdXJpLmRhcnQnIHNob3cgaXNXaW5kb3dzOwoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5LCBzZXZlcml0eVByZWZpeGVzOwoKaW1wb3J0ICdzY2FubmVyL2NoYXJhY3RlcnMuZGFydCcgc2hvdyAkQ0FSRVQsICRTUEFDRSwgJFRBQjsKCmltcG9ydCAndXRpbC9yZWxhdGl2aXplLmRhcnQnIHNob3cgcmVsYXRpdml6ZVVyaTsKCmNvbnN0IGJvb2wgaGlkZVdhcm5pbmdzID0gZmFsc2U7CgovLy8gRm9ybWF0cyBbbWVzc2FnZV0gYXMgYSBzdHJpbmcgdGhhdCBpcyBzdWl0YWJsZSBmb3Igb3V0cHV0IGZyb20gYQovLy8gY29tbWFuZC1saW5lIHRvb2wuIFRoaXMgaW5jbHVkZXMgc291cmNlIHNuaXBwZXRzIGFuZCBkaWZmZXJlbnQgY29sb3JzIGJhc2VkCi8vLyBvbiBbc2V2ZXJpdHldLgpTdHJpbmcgZm9ybWF0KExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIFNldmVyaXR5IHNldmVyaXR5LCB7TG9jYXRpb24gbG9jYXRpb259KSB7CiAgdHJ5IHsKICAgIGludCBsZW5ndGggPSBtZXNzYWdlLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPCAxKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogVGhyb3cgaW4gdGhpcyBzaXR1YXRpb24uIEl0IGlzIG5vcm1hbGx5IGFuIGVycm9yIGNhdXNlZCBieQogICAgICAvLyBlbXB0eSBuYW1lcy4KICAgICAgbGVuZ3RoID0gMTsKICAgIH0KICAgIFN0cmluZyBwcmVmaXggPSBzZXZlcml0eVByZWZpeGVzW3NldmVyaXR5XTsKICAgIFN0cmluZyBtZXNzYWdlVGV4dCA9CiAgICAgICAgcHJlZml4ID09IG51bGwgPyBtZXNzYWdlLm1lc3NhZ2UgOiAiJHByZWZpeDogJHttZXNzYWdlLm1lc3NhZ2V9IjsKICAgIGlmIChtZXNzYWdlLnRpcCAhPSBudWxsKSB7CiAgICAgIG1lc3NhZ2VUZXh0ICs9ICJcbiR7bWVzc2FnZS50aXB9IjsKICAgIH0KICAgIGlmIChDb21waWxlckNvbnRleHQuZW5hYmxlQ29sb3JzKSB7CiAgICAgIHN3aXRjaCAoc2V2ZXJpdHkpIHsKICAgICAgICBjYXNlIFNldmVyaXR5LmVycm9yOgogICAgICAgIGNhc2UgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtOgogICAgICAgICAgbWVzc2FnZVRleHQgPSByZWQobWVzc2FnZVRleHQpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgU2V2ZXJpdHkud2FybmluZzoKICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gbWFnZW50YShtZXNzYWdlVGV4dCk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBTZXZlcml0eS5jb250ZXh0OgogICAgICAgICAgbWVzc2FnZVRleHQgPSBncmVlbihtZXNzYWdlVGV4dCk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiB1bmhhbmRsZWQoIiRzZXZlcml0eSIsICJmb3JtYXQiLCAtMSwgbnVsbCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobWVzc2FnZS51cmkgIT0gbnVsbCkgewogICAgICBTdHJpbmcgcGF0aCA9CiAgICAgICAgICByZWxhdGl2aXplVXJpKFVyaS5iYXNlLCB0cmFuc2xhdGVTZGsobWVzc2FnZS51cmkpLCBpc1dpbmRvd3MpOwogICAgICBpbnQgb2Zmc2V0ID0gbWVzc2FnZS5jaGFyT2Zmc2V0OwogICAgICBsb2NhdGlvbiA/Pz0gKG9mZnNldCA9PSAtMSA/IG51bGwgOiBnZXRMb2NhdGlvbihtZXNzYWdlLnVyaSwgb2Zmc2V0KSk7CiAgICAgIGlmIChsb2NhdGlvbj8ubGluZSA9PSBUcmVlTm9kZS5ub09mZnNldCkgewogICAgICAgIGxvY2F0aW9uID0gbnVsbDsKICAgICAgfQogICAgICBTdHJpbmcgc291cmNlTGluZSA9IGdldFNvdXJjZUxpbmUobG9jYXRpb24pOwogICAgICByZXR1cm4gZm9ybWF0RXJyb3JNZXNzYWdlKAogICAgICAgICAgc291cmNlTGluZSwgbG9jYXRpb24sIGxlbmd0aCwgcGF0aCwgbWVzc2FnZVRleHQpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG1lc3NhZ2VUZXh0OwogICAgfQogIH0gY2F0Y2ggKGVycm9yLCB0cmFjZSkgewogICAgcHJpbnQoIkNyYXNoIHdoZW4gZm9ybWF0dGluZzogIgogICAgICAgICJbJHttZXNzYWdlLmNvZGUubmFtZX1dICR7c2FmZVRvU3RyaW5nKG1lc3NhZ2UubWVzc2FnZSl9XG4iCiAgICAgICAgIiR7c2FmZVRvU3RyaW5nKGVycm9yKX1cbiIKICAgICAgICAiJHRyYWNlIik7CiAgICB0aHJvdyBuZXcgQ3Jhc2gobWVzc2FnZS51cmksIG1lc3NhZ2UuY2hhck9mZnNldCwgZXJyb3IsIHRyYWNlKTsKICB9Cn0KClN0cmluZyBmb3JtYXRFcnJvck1lc3NhZ2UoU3RyaW5nIHNvdXJjZUxpbmUsIExvY2F0aW9uIGxvY2F0aW9uLAogICAgaW50IHNxdWlnZ2x5TGVuZ3RoLCBTdHJpbmcgcGF0aCwgU3RyaW5nIG1lc3NhZ2VUZXh0KSB7CiAgaWYgKHNvdXJjZUxpbmUgPT0gbnVsbCkgewogICAgc291cmNlTGluZSA9ICIiOwogIH0gZWxzZSBpZiAoc291cmNlTGluZS5pc05vdEVtcHR5KSB7CiAgICAvLyBUT0RPKGFza2VzYyk6IE11Y2ggbW9yZSBjb3VsZCBiZSBkb25lIHRvIGluZGVudCBwcm9wZXJseSBpbiB0aGUKICAgIC8vIHByZXNlbmNlIG9mIGFsbCBzb3J0cyBvZiB1bmljb2RlIHdlaXJkbmVzcy4KICAgIC8vIFRoaXMgaGFuZGxpbmcgY292ZXJzIHRoZSBjb21tb24gY2FzZSBvZiBzaW5nbGUtd2lkdGggY2hhcmFjdGVycwogICAgLy8gaW5kZW50ZWQgd2l0aCBzcGFjZXMgYW5kL29yIHRhYnMsIHVzaW5nIG5vIHN1cnJvZ2F0ZXMuCiAgICBpbnQgaW5kZW50TGVuZ3RoID0gbG9jYXRpb24uY29sdW1uIC0gMTsKICAgIFVpbnQ4TGlzdCBpbmRlbnRhdGlvbiA9IG5ldyBVaW50OExpc3QoaW5kZW50TGVuZ3RoICsgc3F1aWdnbHlMZW5ndGgpCiAgICAgIC4uZmlsbFJhbmdlKDAsIGluZGVudExlbmd0aCwgJFNQQUNFKQogICAgICAuLmZpbGxSYW5nZShpbmRlbnRMZW5ndGgsIGluZGVudExlbmd0aCArIHNxdWlnZ2x5TGVuZ3RoLCAkQ0FSRVQpOwogICAgaW50IGxlbmd0aEluU291cmNlTGluZSA9IG1pbihpbmRlbnRhdGlvbi5sZW5ndGgsIHNvdXJjZUxpbmUubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoSW5Tb3VyY2VMaW5lOyBpKyspIHsKICAgICAgaWYgKHNvdXJjZUxpbmUuY29kZVVuaXRBdChpKSA9PSAkVEFCKSB7CiAgICAgICAgaW5kZW50YXRpb25baV0gPSAkVEFCOwogICAgICB9CiAgICB9CiAgICBTdHJpbmcgcG9pbnRlciA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhpbmRlbnRhdGlvbik7CiAgICBpZiAocG9pbnRlci5sZW5ndGggPiBzb3VyY2VMaW5lLmxlbmd0aCkgewogICAgICAvLyBUcnVuY2F0ZSB0aGUgY2FyZXRzIHRvIGhhbmRsZSBtZXNzYWdlcyB0aGF0IHNwYW4gbXVsdGlwbGUgbGluZXMuCiAgICAgIGludCBwb2ludGVyTGVuZ3RoID0gc291cmNlTGluZS5sZW5ndGg7CiAgICAgIC8vIEFkZCBvbmUgdG8gY292ZXIgdGhlIGNhc2Ugb2YgYSBwYXJzZXIgZXJyb3IgcG9pbnRpbmcgdG8gRU9GIHdoZW4KICAgICAgLy8gdGhlIGxhc3QgbGluZSBkb2Vzbid0IGVuZCB3aXRoIGEgbmV3bGluZS4gRm9yIG1lc3NhZ2VzIHNwYW5uaW5nCiAgICAgIC8vIG11bHRpcGxlIGxpbmVzLCB0aGlzIGFsc28gcHJvdmlkZXMgYSBtaW5vciB2aXN1YWwgY2x1ZSB0aGF0IGNhbiBiZQogICAgICAvLyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBGYXN0YS4KICAgICAgcG9pbnRlckxlbmd0aCArPSAxOwogICAgICBwb2ludGVyID0gcG9pbnRlci5zdWJzdHJpbmcoMCwgcG9pbnRlckxlbmd0aCk7CiAgICAgIHBvaW50ZXIgKz0gIi4uLiI7CiAgICB9CiAgICBzb3VyY2VMaW5lID0gIlxuJHNvdXJjZUxpbmVcbiRwb2ludGVyIjsKICB9CiAgU3RyaW5nIHBvc2l0aW9uID0KICAgICAgbG9jYXRpb24gPT0gbnVsbCA/ICIiIDogIjoke2xvY2F0aW9uLmxpbmV9OiR7bG9jYXRpb24uY29sdW1ufSI7CiAgcmV0dXJuICIkcGF0aCRwb3NpdGlvbjogJG1lc3NhZ2VUZXh0JHNvdXJjZUxpbmUiOwp9CgovLy8gQXJlIHByb2JsZW1zIG9mIFtzZXZlcml0eV0gc3VwcHJlc3NlZD8KYm9vbCBpc0hpZGRlbihTZXZlcml0eSBzZXZlcml0eSkgewogIHN3aXRjaCAoc2V2ZXJpdHkpIHsKICAgIGNhc2UgU2V2ZXJpdHkuZXJyb3I6CiAgICBjYXNlIFNldmVyaXR5LmludGVybmFsUHJvYmxlbToKICAgIGNhc2UgU2V2ZXJpdHkuY29udGV4dDoKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGNhc2UgU2V2ZXJpdHkud2FybmluZzoKICAgICAgcmV0dXJuIGhpZGVXYXJuaW5nczsKCiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gdW5oYW5kbGVkKCIkc2V2ZXJpdHkiLCAiaXNIaWRkZW4iLCAtMSwgbnVsbCk7CiAgfQp9CgovLy8gQXJlIHByb2JsZW1zIG9mIFtzZXZlcml0eV0gZmF0YWw/IFRoYXQgaXMsIHNob3VsZCB0aGUgY29tcGlsZXIgdGVybWluYXRlCi8vLyBpbW1lZGlhdGVseT8KYm9vbCBzaG91bGRUaHJvd09uKFNldmVyaXR5IHNldmVyaXR5KSB7CiAgc3dpdGNoIChzZXZlcml0eSkgewogICAgY2FzZSBTZXZlcml0eS5lcnJvcjoKICAgICAgcmV0dXJuIENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMudGhyb3dPbkVycm9yc0ZvckRlYnVnZ2luZzsKCiAgICBjYXNlIFNldmVyaXR5LmludGVybmFsUHJvYmxlbToKICAgICAgcmV0dXJuIHRydWU7CgogICAgY2FzZSBTZXZlcml0eS53YXJuaW5nOgogICAgICByZXR1cm4gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy50aHJvd09uV2FybmluZ3NGb3JEZWJ1Z2dpbmc7CgogICAgY2FzZSBTZXZlcml0eS5jb250ZXh0OgogICAgICByZXR1cm4gZmFsc2U7CgogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgiJHNldmVyaXR5IiwgInNob3VsZFRocm93T24iLCAtMSwgbnVsbCk7CiAgfQp9Cgpib29sIGlzQ29tcGlsZVRpbWVFcnJvcihTZXZlcml0eSBzZXZlcml0eSkgewogIHN3aXRjaCAoc2V2ZXJpdHkpIHsKICAgIGNhc2UgU2V2ZXJpdHkuZXJyb3I6CiAgICBjYXNlIFNldmVyaXR5LmludGVybmFsUHJvYmxlbToKICAgICAgcmV0dXJuIHRydWU7CgogICAgY2FzZSBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmc6CiAgICAgIHJldHVybiAhQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy5sZWdhY3lNb2RlOwoKICAgIGNhc2UgU2V2ZXJpdHkud2FybmluZzoKICAgIGNhc2UgU2V2ZXJpdHkuY29udGV4dDoKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGNhc2UgU2V2ZXJpdHkuaWdub3JlZDoKICAgICAgYnJlYWs7IC8vIEZhbGwtdGhyb3VnaCB0byB1bmhhbmRsZWQgYmVsb3cuCiAgfQogIHJldHVybiB1bmhhbmRsZWQoIiRzZXZlcml0eSIsICJpc0NvbXBpbGVUaW1lRXJyb3IiLCAtMSwgbnVsbCk7Cn0KgMMATk48AUpPUBcmAR0BKQE6AUcBLwE1AS4BLwE4AScBMAE4ATwBMgEhAUVQE1AIIRZPFhIGMBlKHykGKBodJyoRAR8uEQEfLBEBET0IBgEfFEknTTEZCDMhPA0aBhskRCMTRAQCAUA7HBUmRzNHPixJK0hJMy4fCAY8LkotSklMJRo1GAYsBBRGNAIBKyMWGSMbFAEbGwENOwQCAU0RKBYZSAEjEwEbSgEbFAENQAQCAS0WGSMTASY6ARsbFAEbMQRBAgE3cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbW1hbmRfbGluZV9yZXBvcnRpbmcuZGFydDJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvbWVzc2FnZXMuZGFydIY8Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubWVzc2FnZXM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IExpYnJhcnksIExvY2F0aW9uLCBDb21wb25lbnQsIFRyZWVOb2RlOwoKaW1wb3J0ICdjb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKZXhwb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JzsKCmJvb2wgZ2V0IGlzVmVyYm9zZSA9PiBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zLnZlcmJvc2U7CgpMb2NhdGlvbiBnZXRMb2NhdGlvbihVcmkgdXJpLCBpbnQgY2hhck9mZnNldCkgewogIHJldHVybiBDb21waWxlckNvbnRleHQuY3VycmVudC51cmlUb1NvdXJjZVt1cmldPy5nZXRMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQpOwp9CgpMb2NhdGlvbiBnZXRMb2NhdGlvbkZyb21VcmkoVXJpIHVyaSwgaW50IGNoYXJPZmZzZXQpIHsKICBpZiAoY2hhck9mZnNldCA9PSAtMSkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIGdldExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCk7Cn0KClN0cmluZyBnZXRTb3VyY2VMaW5lKExvY2F0aW9uIGxvY2F0aW9uKSB7CiAgaWYgKGxvY2F0aW9uID09IG51bGwpIHJldHVybiBudWxsOwogIHJldHVybiBDb21waWxlckNvbnRleHQuY3VycmVudC51cmlUb1NvdXJjZVtsb2NhdGlvbi5maWxlXQogICAgICA/LmdldFRleHRMaW5lKGxvY2F0aW9uLmxpbmUpOwp9CgpMb2NhdGlvbiBnZXRMb2NhdGlvbkZyb21Ob2RlKFRyZWVOb2RlIG5vZGUpIHsKICBpZiAobm9kZS5lbmNsb3NpbmdDb21wb25lbnQgPT0gbnVsbCkgewogICAgVHJlZU5vZGUgcGFyZW50ID0gbm9kZTsKICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCAmJiBwYXJlbnQgaXMhIExpYnJhcnkpIHsKICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgIH0KICAgIGlmIChwYXJlbnQgaXMgTGlicmFyeSkgewogICAgICBDb21wb25lbnQgY29tcG9uZW50ID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy50YXJnZXQKICAgICAgICAgIC5jb25maWd1cmVDb21wb25lbnQoCiAgICAgICAgICAgICAgbmV3IENvbXBvbmVudCh1cmlUb1NvdXJjZTogQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQudXJpVG9Tb3VyY2UpKTsKICAgICAgY29tcG9uZW50LmxpYnJhcmllcy5hZGQocGFyZW50KTsKICAgICAgcGFyZW50LnBhcmVudCA9IGNvbXBvbmVudDsKICAgICAgTG9jYXRpb24gcmVzdWx0ID0gbm9kZS5sb2NhdGlvbjsKICAgICAgY29tcG9uZW50LmxpYnJhcmllcy5jbGVhcigpOwogICAgICBwYXJlbnQucGFyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0gZWxzZSB7CiAgICByZXR1cm4gbm9kZS5sb2NhdGlvbjsKICB9Cn0KNgBOTjwBGAFOATUBGwE/ATBRAgE3JScCASolPCQCAS4pHDMeBh1DH1AnIScjHBUNEwYLGgQCASlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvbWVzc2FnZXMuZGFydDJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcHJvYmxlbXMuZGFydIqiLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucHJvYmxlbXM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IEZpbGVVcmlOb2RlLCBUcmVlTm9kZTsKCmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnbWVzc2FnZXMuZGFydCcKICAgIHNob3cKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWQsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWQsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQ7CgppbXBvcnQgJ3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHksIHNldmVyaXR5VGV4dHM7CgpjbGFzcyBEZWJ1Z0Fib3J0IHsKICBmaW5hbCBMb2NhdGVkTWVzc2FnZSBtZXNzYWdlOwoKICBEZWJ1Z0Fib3J0KFVyaSB1cmksIGludCBjaGFyT2Zmc2V0LCBTZXZlcml0eSBzZXZlcml0eSwgU3RhY2tUcmFjZSB0cmFjZSkKICAgICAgOiBtZXNzYWdlID0gdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0CiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHNldmVyaXR5VGV4dHNbc2V2ZXJpdHldLCAiJHRyYWNlIikKICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKCiAgdG9TdHJpbmcoKSA9PiAiRGVidWdBYm9ydDogJHttZXNzYWdlLm1lc3NhZ2V9IjsKfQoKLy8vIFVzZWQgdG8gcmVwb3J0IGFuIGludGVybmFsIGVycm9yLgovLy8KLy8vIEludGVybmFsIGVycm9ycyBzaG91bGQgYmUgYXZvaWRlZCBhcyBiZXN0IGFzIHBvc3NpYmxlLCBidXQgYXJlIHByZWZlcnJlZAovLy8gb3ZlciBhc3NlcnRpb24gZmFpbHVyZXMuIFRoZSBtZXNzYWdlIHNob3VsZCBzdGFydCB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyCi8vLyBhbmQgY29udGFpbiBhIHNob3J0IGRlc2NyaXB0aW9uIHRoYXQgbWF5IGhlbHAgYSBkZXZlbG9wZXIgZGVidWcgdGhlIGlzc3VlLgovLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIHVzaW5nIGB0aHJvd2AsIGFzIHRoaXMgYWxsb3dzIHVzIHRvCi8vLyBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gdGhyb3dzIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGViYXNlLgovLy8KLy8vIEJlZm9yZSBwcmludGluZyB0aGUgbWVzc2FnZSwgdGhlIHN0cmluZyBgIkludGVybmFsIGVycm9yOiAiYCBpcyBwcmVwZW5kZWQuCmR5bmFtaWMgaW50ZXJuYWxQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIFVyaSB1cmkpIHsKICB0aHJvdyBDb21waWxlckNvbnRleHQuY3VycmVudC5mb3JtYXQoCiAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCwgbm9MZW5ndGgpLAogICAgICBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwp9CgpkeW5hbWljIHVuaW1wbGVtZW50ZWQoU3RyaW5nIHdoYXQsIGludCBjaGFyT2Zmc2V0LCBVcmkgdXJpKSB7CiAgcmV0dXJuIGludGVybmFsUHJvYmxlbSgKICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkLndpdGhBcmd1bWVudHMod2hhdCksCiAgICAgIGNoYXJPZmZzZXQsCiAgICAgIHVyaSk7Cn0KCmR5bmFtaWMgdW5oYW5kbGVkKFN0cmluZyB3aGF0LCBTdHJpbmcgd2hlcmUsIGludCBjaGFyT2Zmc2V0LCBVcmkgdXJpKSB7CiAgcmV0dXJuIGludGVybmFsUHJvYmxlbSgKICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWQud2l0aEFyZ3VtZW50cyh3aGF0LCB3aGVyZSksCiAgICAgIGNoYXJPZmZzZXQsCiAgICAgIHVyaSk7Cn0KCmR5bmFtaWMgdW5leHBlY3RlZChTdHJpbmcgZXhwZWN0ZWQsIFN0cmluZyBhY3R1YWwsIGludCBjaGFyT2Zmc2V0LCBVcmkgdXJpKSB7CiAgcmV0dXJuIGludGVybmFsUHJvYmxlbSgKICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkLndpdGhBcmd1bWVudHMoZXhwZWN0ZWQsIGFjdHVhbCksCiAgICAgIGNoYXJPZmZzZXQsCiAgICAgIHVyaSk7Cn0KCmR5bmFtaWMgdW5zdXBwb3J0ZWQoU3RyaW5nIG9wZXJhdGlvbiwgaW50IGNoYXJPZmZzZXQsIFVyaSB1cmkpIHsKICByZXR1cm4gaW50ZXJuYWxQcm9ibGVtKAogICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkLndpdGhBcmd1bWVudHMob3BlcmF0aW9uKSwKICAgICAgY2hhck9mZnNldCwKICAgICAgdXJpKTsKfQoKVXJpIGdldEZpbGVVcmkoVHJlZU5vZGUgbm9kZSkgewogIGRvIHsKICAgIGlmIChub2RlIGlzIEZpbGVVcmlOb2RlKSByZXR1cm4gbm9kZS5maWxlVXJpOwogICAgbm9kZSA9IG5vZGUucGFyZW50OwogIH0gd2hpbGUgKG5vZGUgaXMgVHJlZU5vZGUpOwogIHJldHVybiBudWxsOwp9ClYATk48ARgBPQE1ARcJGBESKysqLiwBNQETIAFLND42ATICASYETVBPUEMET0QoNyECAT4aQBIMAgFIGkMSDAIBThpJEgwCAUEaQxIMAgEgBzIYHg8CASlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcHJvYmxlbXMuZGFydDBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdGlja2VyLmRhcnSDbS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnRpY2tlcjsKCmNsYXNzIFRpY2tlciB7CiAgZmluYWwgU3RvcHdhdGNoIHN3ID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwoKICBib29sIGlzVmVyYm9zZTsKCiAgRHVyYXRpb24gcHJldmlvdXNUaWNrOwoKICBUaWNrZXIoe3RoaXMuaXNWZXJib3NlOiB0cnVlfSkgewogICAgcHJldmlvdXNUaWNrID0gc3cuZWxhcHNlZDsKICB9CgogIHZvaWQgbG9nTXMoT2JqZWN0IG1lc3NhZ2UpIHsKICAgIGxvZygoRHVyYXRpb24gZWxhcHNlZCwgRHVyYXRpb24gc2luY2VTdGFydCkgewogICAgICBwcmludCgiJHNpbmNlU3RhcnQ6ICRtZXNzYWdlIGluICR7ZWxhcHNlZC5pbk1pbGxpc2Vjb25kc31tcy4iKTsKICAgIH0pOwogIH0KCiAgdm9pZCBsb2codm9pZCBmKER1cmF0aW9uIGVsYXBzZWQsIER1cmF0aW9uIHNpbmNlU3RhcnQpKSB7CiAgICBEdXJhdGlvbiBlbGFwc2VkID0gc3cuZWxhcHNlZDsKICAgIHRyeSB7CiAgICAgIGlmIChpc1ZlcmJvc2UpIGYoZWxhcHNlZCAtIHByZXZpb3VzVGljaywgZWxhcHNlZCk7CiAgICB9IGZpbmFsbHkgewogICAgICBwcmV2aW91c1RpY2sgPSBzdy5lbGFwc2VkOwogICAgfQogIH0KCiAgdm9pZCByZXNldCgpIHsKICAgIHN3LnJlc2V0KCk7CiAgICBwcmV2aW91c1RpY2sgPSBzdy5lbGFwc2VkOwogIH0KfQonAE5OPAEWAQ8xARIBGQEjHwQBHzJGCAQBPCMKORAhBgQBERAfBAIBJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90aWNrZXIuZGFydDhzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdXJpX3RyYW5zbGF0b3IuZGFydI2jLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudXJpX3RyYW5zbGF0b3I7CgppbXBvcnQgJ3BhY2thZ2U6cGFja2FnZV9jb25maWcvcGFja2FnZXMuZGFydCcgc2hvdyBQYWNrYWdlczsKCmltcG9ydCAnLi4vYmFzZS9saWJyYXJpZXNfc3BlY2lmaWNhdGlvbi5kYXJ0JyBzaG93IFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb247CmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JzsKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKY2xhc3MgVXJpVHJhbnNsYXRvciB7CiAgZmluYWwgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbiBkYXJ0TGlicmFyaWVzOwoKICBmaW5hbCBQYWNrYWdlcyBwYWNrYWdlczsKCiAgVXJpVHJhbnNsYXRvcih0aGlzLmRhcnRMaWJyYXJpZXMsIHRoaXMucGFja2FnZXMpOwoKICBMaXN0PFVyaT4gZ2V0RGFydFBhdGNoZXMoU3RyaW5nIGxpYnJhcnlOYW1lKSA9PgogICAgICBkYXJ0TGlicmFyaWVzLmxpYnJhcnlJbmZvRm9yKGxpYnJhcnlOYW1lKT8ucGF0Y2hlczsKCiAgYm9vbCBpc1BsYXRmb3JtSW1wbGVtZW50YXRpb24oVXJpIHVyaSkgewogICAgaWYgKHVyaS5zY2hlbWUgIT0gImRhcnQiKSByZXR1cm4gZmFsc2U7CiAgICBTdHJpbmcgcGF0aCA9IHVyaS5wYXRoOwogICAgcmV0dXJuIGRhcnRMaWJyYXJpZXMubGlicmFyeUluZm9Gb3IocGF0aCkgPT0gbnVsbCB8fCBwYXRoLnN0YXJ0c1dpdGgoIl8iKTsKICB9CgogIC8vIFRPRE8oc2lnbXVuZCwgYWhlKTogY29uc2lkZXIgZXhwYW5kaW5nIHRoaXMgQVBJIHRvIGluY2x1ZGUgYW4gZXJyb3IKICAvLyBjYWxsYmFjaywgc28gd2UgY2FuIHByb3ZpZGUgYW4gZXJyb3IgbG9jYXRpb24gd2hlbiBvbmUgaXMgYXZhaWxhYmxlLiBGb3IKICAvLyBleGFtcGxlLCBpZiB0aGUgZXJyb3Igb2NjdXJzIGluIGFuIGBpbXBvcnRgLgogIFVyaSB0cmFuc2xhdGUoVXJpIHVyaSwgW2Jvb2wgcmVwb3J0TWVzc2FnZSA9IHRydWVdKSB7CiAgICBpZiAodXJpLnNjaGVtZSA9PSAiZGFydCIpIHJldHVybiBfdHJhbnNsYXRlRGFydFVyaSh1cmkpOwogICAgaWYgKHVyaS5zY2hlbWUgPT0gInBhY2thZ2UiKSB7CiAgICAgIHJldHVybiBfdHJhbnNsYXRlUGFja2FnZVVyaSh1cmksIHJlcG9ydE1lc3NhZ2UpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gRm9yIGEgcGFja2FnZSB1cmksIGdldCB0aGUgZnJhZ21lbnQgb2YgdGhlIHVyaSBzcGVjaWZpZWQgZm9yIHRoYXQgcGFja2FnZS4KICBTdHJpbmcgZ2V0UGFja2FnZUZyYWdtZW50KFVyaSB1cmkpIHsKICAgIGlmIChwYWNrYWdlcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmICh1cmkuc2NoZW1lICE9ICJwYWNrYWdlIikgcmV0dXJuIG51bGw7CiAgICBpbnQgZmlyc3RTbGFzaCA9IHVyaS5wYXRoLmluZGV4T2YoJy8nKTsKICAgIGlmIChmaXJzdFNsYXNoID09IC0xKSByZXR1cm4gbnVsbDsKICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IHVyaS5wYXRoLnN1YnN0cmluZygwLCBmaXJzdFNsYXNoKTsKICAgIFVyaSBwYWNrYWdlQmFzZVVyaSA9IHBhY2thZ2VzLmFzTWFwKClbcGFja2FnZU5hbWVdOwogICAgaWYgKHBhY2thZ2VCYXNlVXJpID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHBhY2thZ2VCYXNlVXJpLmZyYWdtZW50OwogIH0KCiAgYm9vbCBpc0xpYnJhcnlTdXBwb3J0ZWQoU3RyaW5nIGxpYnJhcnlOYW1lKSB7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBjaGFuZ2UgdGhpcyB0byBgPz8gZmFsc2VgIHdoZW4gYWxsIGJhY2tlbmRzIHByb3ZpZGUgdGhlCiAgICAvLyBgbGlicmFyaWVzLmpzb25gIGZpbGUgYnkgZGVmYXVsdCAoSXNzdWUgIzMyNjU3KS4KICAgIHJldHVybiBkYXJ0TGlicmFyaWVzLmxpYnJhcnlJbmZvRm9yKGxpYnJhcnlOYW1lKT8uaXNTdXBwb3J0ZWQgPz8gdHJ1ZTsKICB9CgogIFVyaSBfdHJhbnNsYXRlRGFydFVyaShVcmkgdXJpKSB7CiAgICBpZiAoIXVyaS5pc1NjaGVtZSgnZGFydCcpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBkYXJ0TGlicmFyaWVzLmxpYnJhcnlJbmZvRm9yKHVyaS5wYXRoKT8udXJpOwogIH0KCiAgVXJpIF90cmFuc2xhdGVQYWNrYWdlVXJpKFVyaSB1cmksIGJvb2wgcmVwb3J0TWVzc2FnZSkgewogICAgdHJ5IHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogb25jZSB3ZSByZW1vdmUgdGhlIGBwYXJzZWAgQVBJLCB3ZSBjYW4gZW5zdXJlIHRoYXQKICAgICAgLy8gcGFja2FnZXMgd2lsbCBuZXZlciBiZSBudWxsIGFuZCBnZXQgcmlkIG9mIGA/YCBiZWxvdy4KICAgICAgcmV0dXJuIHBhY2thZ2VzPy5yZXNvbHZlKHVyaSwKICAgICAgICAgIG5vdEZvdW5kOiByZXBvcnRNZXNzYWdlCiAgICAgICAgICAgICAgPyBfcGFja2FnZVVyaU5vdEZvdW5kCiAgICAgICAgICAgICAgOiBfcGFja2FnZVVyaU5vdEZvdW5kTm9SZXBvcnQpOwogICAgfSBvbiBBcmd1bWVudEVycm9yIGNhdGNoIChlKSB7CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNhdGNoIGEgbW9yZSBwcmVjaXNlIGVycm9yIHdoZW4KICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9wYWNrYWdlX2NvbmZpZy9pc3N1ZXMvNDAgaXMgZml4ZWQuCiAgICAgIGlmIChyZXBvcnRNZXNzYWdlKSB7CiAgICAgICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQucmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgICB0ZW1wbGF0ZUludmFsaWRQYWNrYWdlVXJpLndpdGhBcmd1bWVudHModXJpLCAnJGUnKSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgc3RhdGljIFVyaSBfcGFja2FnZVVyaU5vdEZvdW5kKFVyaSB1cmkpIHsKICAgIFN0cmluZyBuYW1lID0gdXJpLnBhdGhTZWdtZW50cy5maXJzdDsKICAgIENvbXBpbGVyQ29udGV4dC5jdXJyZW50LnJlcG9ydFdpdGhvdXRMb2NhdGlvbigKICAgICAgICB0ZW1wbGF0ZVBhY2thZ2VOb3RGb3VuZC53aXRoQXJndW1lbnRzKG5hbWUsIHVyaSksIFNldmVyaXR5LmVycm9yKTsKICAgIC8vIFRPRE8oc2lnbXVuZCwgYWhlKTogZW5zdXJlIHdlIG9ubHkgcmVwb3J0IGFuIGVycm9yIG9uY2UsCiAgICAvLyB0aGlzIG51bGwgcmVzdWx0IHdpbGwgbGlrZWx5IGNhdXNlIGFub3RoZXIgZXJyb3IgZnVydGhlciBkb3duIGluIHRoZQogICAgLy8gY29tcGlsZXIuCiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBVcmkgX3BhY2thZ2VVcmlOb3RGb3VuZE5vUmVwb3J0KFVyaSB1cmkpIHsKICAgIHJldHVybiBudWxsOwogIH0KfQpiAE5OPAEeAT0BUTUbJgEWNAEbATQBMjoBKywcTwQBSU4yOD0jNwYRBAFRJycuLCc8OC0kBAEwTjhLBAEjLDgEAToKSz8kIiQuIzhJGzdRCBMGBAEsKjNLQEwREQQBNBEEAgEvcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3VyaV90cmFuc2xhdG9yLmRhcnQ7c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3Jlc29sdmVfaW5wdXRfdXJpLmRhcnSEdS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gRGV0ZWN0IGlmIHdlJ3JlIG9uIFdpbmRvd3Mgd2l0aG91dCBpbXBvcnRpbmcgYGRhcnQ6aW9gLgpib29sIGlzV2luZG93cyA9IG5ldyBVcmkuZGlyZWN0b3J5KCJDOlxcIikucGF0aCA9PQogICAgbmV3IFVyaS5kaXJlY3RvcnkoIkM6XFwiLCB3aW5kb3dzOiB0cnVlKS5wYXRoOwoKVXJpIHJlc29sdmVJbnB1dFVyaShTdHJpbmcgcGF0aCkgewogIFVyaSB1cmk7CiAgaWYgKHBhdGguaW5kZXhPZigiOiIpID09IC0xKSB7CiAgICB1cmkgPSBuZXcgVXJpLmZpbGUocGF0aCwgd2luZG93czogaXNXaW5kb3dzKTsKICB9IGVsc2UgaWYgKCFpc1dpbmRvd3MpIHsKICAgIHVyaSA9IHBhcnNlVXJpKHBhdGgpOwogIH0gZWxzZSB7CiAgICB1cmkgPSByZXNvbHZlQW1iaWd1b3VzV2luZG93c1BhdGgocGF0aCk7CiAgfQogIHJldHVybiBVcmkuYmFzZS5yZXNvbHZlVXJpKHVyaSk7Cn0KClVyaSBwYXJzZVVyaShTdHJpbmcgcGF0aCkgewogIGlmIChwYXRoLnN0YXJ0c1dpdGgoImZpbGU6IikpIHsKICAgIGlmIChVcmkuYmFzZS5zY2hlbWUgPT0gImZpbGUiKSB7CiAgICAgIC8vIFRoZSBVcmkgY2xhc3MgZG9lc24ndCBoYW5kbGUgcmVsYXRpdmUgZmlsZSBVUklzIGNvcnJlY3RseSwgdGhlCiAgICAgIC8vIGZvbGxvd2luZyB3b3JrcyBhcm91bmQgdGhhdCBpc3N1ZS4KICAgICAgcmV0dXJuIG5ldyBVcmkocGF0aDogVXJpLnBhcnNlKCJ4LSRwYXRoIikucGF0aCk7CiAgICB9CiAgfQogIHJldHVybiBVcmkucGFyc2UocGF0aCk7Cn0KClVyaSByZXNvbHZlQW1iaWd1b3VzV2luZG93c1BhdGgoU3RyaW5nIHBhdGgpIHsKICB0cnkgewogICAgcmV0dXJuIG5ldyBVcmkuZmlsZShwYXRoLCB3aW5kb3dzOiBpc1dpbmRvd3MpOwogIH0gb24gQXJndW1lbnRFcnJvciBjYXRjaCAoXykgewogICAgcmV0dXJuIHBhcnNlVXJpKHBhdGgpOwogIH0KfQooAE5OPAE8MzMBIwshMhsaCy0EIwIBHCIlSCw3BgQaAgEvCDMhGwQCATJwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcmVzb2x2ZV9pbnB1dF91cmkuZGFydDdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci90b2tlbi5kYXJ0rBsvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zY2FubmVyLnRva2VuOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIGFzIGFuYWx5emVyOwppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbiwgVG9rZW5UeXBlOwoKaW1wb3J0ICd0b2tlbl9jb25zdGFudHMuZGFydCcgc2hvdyBJREVOVElGSUVSX1RPS0VOOwoKaW1wb3J0ICdzdHJpbmdfY2Fub25pY2FsaXplci5kYXJ0JzsKCi8qKgogKiBBIFN0cmluZy12YWx1ZWQgdG9rZW4uIFJlcHJlc2VudHMgaWRlbnRpZmllcnMsIHN0cmluZyBsaXRlcmFscywKICogbnVtYmVyIGxpdGVyYWxzLCBjb21tZW50cywgYW5kIGVycm9yIHRva2VucywgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcKICogcHJlY2VkZW5jZSBpbmZvLgogKi8KY2xhc3MgU3RyaW5nVG9rZW4gZXh0ZW5kcyBhbmFseXplci5TaW1wbGVUb2tlbiBpbXBsZW1lbnRzIGFuYWx5emVyLlN0cmluZ1Rva2VuIHsKICAvKioKICAgKiBUaGUgbGVuZ3RoIHRocmVzaG9sZCBhYm92ZSB3aGljaCBzdWJzdHJpbmcgdG9rZW5zIGFyZSBjb21wdXRlZCBsYXppbHkuCiAgICoKICAgKiBGb3Igc3RyaW5nIHRva2VucyB0aGF0IGFyZSBzdWJzdHJpbmdzIG9mIHRoZSBwcm9ncmFtIHNvdXJjZSwgdGhlIGFjdHVhbAogICAqIHN1YnN0cmluZyBleHRyYWN0aW9uIGlzIHBlcmZvcm1lZCBsYXppbHkuIFRoaXMgaXMgYmVuZWZpY2lhbCBiZWNhdXNlCiAgICogbm90IGFsbCBzY2FubmVkIGNvZGUgYXJlIGFjdHVhbGx5IHVzZWQuIEZvciB1bnVzZWQgcGFydHMsIHRoZSBzdWJzdHJpbmdzCiAgICogYXJlIG5ldmVyIGNvbXB1dGVkIGFuZCBhbGxvY2F0ZWQuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBMQVpZX1RIUkVTSE9MRCA9IDQ7CgogIHZhciAvKiBTdHJpbmcgfCBMYXp5U3Vic3RyaW5nICovIHZhbHVlT3JMYXp5U3Vic3RyaW5nOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbm9uLWxhenkgc3RyaW5nIHRva2VuLiBJZiBbY2Fub25pY2FsaXplXSBpcyB0cnVlLCB0aGUgc3RyaW5nCiAgICogaXMgY2Fub25pY2FsaXplZCBiZWZvcmUgdGhlIHRva2VuIGlzIGNyZWF0ZWQuCiAgICovCiAgU3RyaW5nVG9rZW4uZnJvbVN0cmluZyhUb2tlblR5cGUgdHlwZSwgU3RyaW5nIHZhbHVlLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgY2Fub25pY2FsaXplOiBmYWxzZSwgYW5hbHl6ZXIuQ29tbWVudFRva2VuIHByZWNlZGluZ0NvbW1lbnRzfSkKICAgICAgOiB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9CiAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRTdHJpbmcodmFsdWUsIDAsIHZhbHVlLmxlbmd0aCwgY2Fub25pY2FsaXplKSwKICAgICAgICBzdXBlcih0eXBlLCBjaGFyT2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBsYXp5IHN0cmluZyB0b2tlbi4gSWYgW2Nhbm9uaWNhbGl6ZV0gaXMgdHJ1ZSwgdGhlIHN0cmluZwogICAqIGlzIGNhbm9uaWNhbGl6ZWQgYmVmb3JlIHRoZSB0b2tlbiBpcyBjcmVhdGVkLgogICAqLwogIFN0cmluZ1Rva2VuLmZyb21TdWJzdHJpbmcoCiAgICAgIFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgY2Fub25pY2FsaXplOiBmYWxzZSwgYW5hbHl6ZXIuQ29tbWVudFRva2VuIHByZWNlZGluZ0NvbW1lbnRzfSkKICAgICAgOiBzdXBlcih0eXBlLCBjaGFyT2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50cykgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA8PSBMQVpZX1RIUkVTSE9MRCkgewogICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9CiAgICAgICAgICBjYW5vbmljYWxpemVkU3RyaW5nKGRhdGEsIHN0YXJ0LCBlbmQsIGNhbm9uaWNhbGl6ZSk7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9CiAgICAgICAgICBuZXcgX0xhenlTdWJzdHJpbmcoZGF0YSwgc3RhcnQsIGxlbmd0aCwgY2Fub25pY2FsaXplKTsKICAgIH0KICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBsYXp5IHN0cmluZyB0b2tlbi4gSWYgW2FzY2lpT25seV0gaXMgZmFsc2UsIHRoZSBieXRlIGFycmF5CiAgICogaXMgcGFzc2VkIHRocm91Z2ggYSBVVEYtOCBkZWNvZGVyLgogICAqLwogIFN0cmluZ1Rva2VuLmZyb21VdGY4Qnl0ZXMoVG9rZW5UeXBlIHR5cGUsIExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsCiAgICAgIGJvb2wgYXNjaWlPbmx5LCBpbnQgY2hhck9mZnNldCwKICAgICAge2FuYWx5emVyLkNvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50c30pCiAgICAgIDogc3VwZXIodHlwZSwgY2hhck9mZnNldCwgcHJlY2VkaW5nQ29tbWVudHMpIHsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPD0gTEFaWV9USFJFU0hPTEQpIHsKICAgICAgdmFsdWVPckxhenlTdWJzdHJpbmcgPSBkZWNvZGVVdGY4KGRhdGEsIHN0YXJ0LCBlbmQsIGFzY2lpT25seSk7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9IG5ldyBfTGF6eVN1YnN0cmluZyhkYXRhLCBzdGFydCwgbGVuZ3RoLCBhc2NpaU9ubHkpOwogICAgfQogIH0KCiAgU3RyaW5nVG9rZW4uXyhUb2tlblR5cGUgdHlwZSwgdGhpcy52YWx1ZU9yTGF6eVN1YnN0cmluZywgaW50IGNoYXJPZmZzZXQsCiAgICAgIFthbmFseXplci5Db21tZW50VG9rZW4gcHJlY2VkaW5nQ29tbWVudHNdKQogICAgICA6IHN1cGVyKHR5cGUsIGNoYXJPZmZzZXQsIHByZWNlZGluZ0NvbW1lbnRzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBsZXhlbWUgewogICAgaWYgKHZhbHVlT3JMYXp5U3Vic3RyaW5nIGlzIFN0cmluZykgewogICAgICByZXR1cm4gdmFsdWVPckxhenlTdWJzdHJpbmc7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQodmFsdWVPckxhenlTdWJzdHJpbmcgaXMgX0xhenlTdWJzdHJpbmcpOwogICAgICB2YXIgZGF0YSA9IHZhbHVlT3JMYXp5U3Vic3RyaW5nLmRhdGE7CiAgICAgIGludCBzdGFydCA9IHZhbHVlT3JMYXp5U3Vic3RyaW5nLnN0YXJ0OwogICAgICBpbnQgZW5kID0gc3RhcnQgKyB2YWx1ZU9yTGF6eVN1YnN0cmluZy5sZW5ndGg7CiAgICAgIGlmIChkYXRhIGlzIFN0cmluZykgewogICAgICAgIHZhbHVlT3JMYXp5U3Vic3RyaW5nID0gY2Fub25pY2FsaXplZFN0cmluZygKICAgICAgICAgICAgZGF0YSwgc3RhcnQsIGVuZCwgdmFsdWVPckxhenlTdWJzdHJpbmcuYm9vbFZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9CiAgICAgICAgICAgIGRlY29kZVV0ZjgoZGF0YSwgc3RhcnQsIGVuZCwgdmFsdWVPckxhenlTdWJzdHJpbmcuYm9vbFZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWVPckxhenlTdWJzdHJpbmc7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0lkZW50aWZpZXIgPT4gaWRlbnRpY2FsKGtpbmQsIElERU5USUZJRVJfVE9LRU4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBsZXhlbWU7CgogIHN0YXRpYyBmaW5hbCBTdHJpbmdDYW5vbmljYWxpemVyIGNhbm9uaWNhbGl6ZXIgPSBuZXcgU3RyaW5nQ2Fub25pY2FsaXplcigpOwoKICBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZWRTdHJpbmcoCiAgICAgIFN0cmluZyBzLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgY2Fub25pY2FsaXplKSB7CiAgICBpZiAoIWNhbm9uaWNhbGl6ZSkgcmV0dXJuIHM7CiAgICByZXR1cm4gY2Fub25pY2FsaXplci5jYW5vbmljYWxpemUocywgc3RhcnQsIGVuZCwgZmFsc2UpOwogIH0KCiAgc3RhdGljIFN0cmluZyBkZWNvZGVVdGY4KExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgYXNjaWlPbmx5KSB7CiAgICByZXR1cm4gY2Fub25pY2FsaXplci5jYW5vbmljYWxpemUoZGF0YSwgc3RhcnQsIGVuZCwgYXNjaWlPbmx5KTsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PiBuZXcgU3RyaW5nVG9rZW4uXygKICAgICAgdHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGNoYXJPZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmFsdWUoKSA9PiBsZXhlbWU7Cn0KCi8qKgogKiBBIFN0cmluZy12YWx1ZWQgdG9rZW4gdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgb3JpZ2luYWwgc291cmNlLgogKi8KY2xhc3MgU3ludGhldGljU3RyaW5nVG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbgogICAgaW1wbGVtZW50cyBhbmFseXplci5TeW50aGV0aWNTdHJpbmdUb2tlbiB7CiAgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgaW50IG9mZnNldCwKICAgICAgW2FuYWx5emVyLkNvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50c10pCiAgICAgIDogc3VwZXIuXyh0eXBlLCB2YWx1ZSwgb2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50cyk7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IDA7CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PiBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgIHR5cGUsIHZhbHVlT3JMYXp5U3Vic3RyaW5nLCBvZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwp9CgpjbGFzcyBDb21tZW50VG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbiBpbXBsZW1lbnRzIGFuYWx5emVyLkNvbW1lbnRUb2tlbiB7CiAgQG92ZXJyaWRlCiAgYW5hbHl6ZXIuU2ltcGxlVG9rZW4gcGFyZW50OwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGF6eSBjb21tZW50IHRva2VuLiBJZiBbY2Fub25pY2FsaXplXSBpcyB0cnVlLCB0aGUgc3RyaW5nCiAgICogaXMgY2Fub25pY2FsaXplZCBiZWZvcmUgdGhlIHRva2VuIGlzIGNyZWF0ZWQuCiAgICovCiAgQ29tbWVudFRva2VuLmZyb21TdWJzdHJpbmcoCiAgICAgIFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgY2Fub25pY2FsaXplOiBmYWxzZX0pCiAgICAgIDogc3VwZXIuZnJvbVN1YnN0cmluZyh0eXBlLCBkYXRhLCBzdGFydCwgZW5kLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICBjYW5vbmljYWxpemU6IGNhbm9uaWNhbGl6ZSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBub24tbGF6eSBjb21tZW50IHRva2VuLgogICAqLwogIENvbW1lbnRUb2tlbi5mcm9tU3RyaW5nKFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgbGV4ZW1lLCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlci5mcm9tU3RyaW5nKHR5cGUsIGxleGVtZSwgY2hhck9mZnNldCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBsYXp5IHN0cmluZyB0b2tlbi4gSWYgW2FzY2lpT25seV0gaXMgZmFsc2UsIHRoZSBieXRlIGFycmF5CiAgICogaXMgcGFzc2VkIHRocm91Z2ggYSBVVEYtOCBkZWNvZGVyLgogICAqLwogIENvbW1lbnRUb2tlbi5mcm9tVXRmOEJ5dGVzKFRva2VuVHlwZSB0eXBlLCBMaXN0PGludD4gZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLAogICAgICBib29sIGFzY2lpT25seSwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIuZnJvbVV0ZjhCeXRlcyh0eXBlLCBkYXRhLCBzdGFydCwgZW5kLCBhc2NpaU9ubHksIGNoYXJPZmZzZXQpOwoKICBDb21tZW50VG9rZW4uXyhUb2tlblR5cGUgdHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGludCBjaGFyT2Zmc2V0KQogICAgICA6IHN1cGVyLl8odHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGNoYXJPZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBDb21tZW50VG9rZW4gY29weSgpID0+CiAgICAgIG5ldyBDb21tZW50VG9rZW4uXyh0eXBlLCB2YWx1ZU9yTGF6eVN1YnN0cmluZywgY2hhck9mZnNldCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlKCkgewogICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKICAgICAgcHJldmlvdXMuc2V0TmV4dFdpdGhvdXRTZXR0aW5nUHJldmlvdXMobmV4dCk7CiAgICAgIG5leHQ/LnByZXZpb3VzID0gcHJldmlvdXM7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQocGFyZW50LnByZWNlZGluZ0NvbW1lbnRzID09IHRoaXMpOwogICAgICBwYXJlbnQucHJlY2VkaW5nQ29tbWVudHMgPSBuZXh0IGFzIENvbW1lbnRUb2tlbjsKICAgIH0KICB9Cn0KCi8qKgogKiBBIHNwZWNpYWxpemVkIGNvbW1lbnQgdG9rZW4gcmVwcmVzZW50aW5nIGEgbGFuZ3VhZ2UgdmVyc2lvbgogKiAoZS5nLiAnLy8gQGRhcnQgPSAyLjEnKS4KICovCmNsYXNzIExhbmd1YWdlVmVyc2lvblRva2VuIGV4dGVuZHMgQ29tbWVudFRva2VuIHsKICAvKioKICAgKiBUaGUgbWFqb3IgbGFuZ3VhZ2UgdmVyc2lvbi4KICAgKi8KICBpbnQgbWFqb3I7CgogIC8qKgogICAqIFRoZSBtaW5vciBsYW5ndWFnZSB2ZXJzaW9uLgogICAqLwogIGludCBtaW5vcjsKCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4uZnJvbShTdHJpbmcgdGV4dCwgaW50IG9mZnNldCwgdGhpcy5tYWpvciwgdGhpcy5taW5vcikKICAgICAgOiBzdXBlci5mcm9tU3RyaW5nKFRva2VuVHlwZS5TSU5HTEVfTElORV9DT01NRU5ULCB0ZXh0LCBvZmZzZXQpOwoKICBMYW5ndWFnZVZlcnNpb25Ub2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICBTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCB0b2tlblN0YXJ0LCB0aGlzLm1ham9yLCB0aGlzLm1pbm9yLAogICAgICB7Ym9vbCBjYW5vbmljYWxpemV9KQogICAgICA6IHN1cGVyLmZyb21TdWJzdHJpbmcoCiAgICAgICAgICAgIFRva2VuVHlwZS5TSU5HTEVfTElORV9DT01NRU5ULCBzdHJpbmcsIHN0YXJ0LCBlbmQsIHRva2VuU3RhcnQsCiAgICAgICAgICAgIGNhbm9uaWNhbGl6ZTogY2Fub25pY2FsaXplKTsKCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4uZnJvbVV0ZjhCeXRlcyhMaXN0PGludD4gYnl0ZXMsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgaW50IHRva2VuU3RhcnQsIHRoaXMubWFqb3IsIHRoaXMubWlub3IpCiAgICAgIDogc3VwZXIuZnJvbVV0ZjhCeXRlcygKICAgICAgICAgICAgVG9rZW5UeXBlLlNJTkdMRV9MSU5FX0NPTU1FTlQsIGJ5dGVzLCBzdGFydCwgZW5kLCB0cnVlLCB0b2tlblN0YXJ0KTsKCiAgQG92ZXJyaWRlCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4gY29weSgpID0+CiAgICAgIG5ldyBMYW5ndWFnZVZlcnNpb25Ub2tlbi5mcm9tKGxleGVtZSwgb2Zmc2V0LCBtYWpvciwgbWlub3IpOwp9CgpjbGFzcyBEYXJ0RG9jVG9rZW4gZXh0ZW5kcyBDb21tZW50VG9rZW4KICAgIGltcGxlbWVudHMgYW5hbHl6ZXIuRG9jdW1lbnRhdGlvbkNvbW1lbnRUb2tlbiB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIGxhenkgY29tbWVudCB0b2tlbi4gSWYgW2Nhbm9uaWNhbGl6ZV0gaXMgdHJ1ZSwgdGhlIHN0cmluZwogICAqIGlzIGNhbm9uaWNhbGl6ZWQgYmVmb3JlIHRoZSB0b2tlbiBpcyBjcmVhdGVkLgogICAqLwogIERhcnREb2NUb2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICBUb2tlblR5cGUgdHlwZSwgU3RyaW5nIGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtib29sIGNhbm9uaWNhbGl6ZTogZmFsc2V9KQogICAgICA6IHN1cGVyLmZyb21TdWJzdHJpbmcodHlwZSwgZGF0YSwgc3RhcnQsIGVuZCwgY2hhck9mZnNldCwKICAgICAgICAgICAgY2Fub25pY2FsaXplOiBjYW5vbmljYWxpemUpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGF6eSBzdHJpbmcgdG9rZW4uIElmIFthc2NpaU9ubHldIGlzIGZhbHNlLCB0aGUgYnl0ZSBhcnJheQogICAqIGlzIHBhc3NlZCB0aHJvdWdoIGEgVVRGLTggZGVjb2Rlci4KICAgKi8KICBEYXJ0RG9jVG9rZW4uZnJvbVV0ZjhCeXRlcyhUb2tlblR5cGUgdHlwZSwgTGlzdDxpbnQ+IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgYm9vbCBhc2NpaU9ubHksIGludCBjaGFyT2Zmc2V0KQogICAgICA6IHN1cGVyLmZyb21VdGY4Qnl0ZXModHlwZSwgZGF0YSwgc3RhcnQsIGVuZCwgYXNjaWlPbmx5LCBjaGFyT2Zmc2V0KTsKCiAgRGFydERvY1Rva2VuLl8oVG9rZW5UeXBlIHR5cGUsIHZhbHVlT3JMYXp5U3Vic3RyaW5nLCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlci5fKHR5cGUsIHZhbHVlT3JMYXp5U3Vic3RyaW5nLCBjaGFyT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgRGFydERvY1Rva2VuIGNvcHkoKSA9PgogICAgICBuZXcgRGFydERvY1Rva2VuLl8odHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGNoYXJPZmZzZXQpOwp9CgovKioKICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gY29tcHV0ZSBhIHN1YnN0cmluZwogKiBsYXppbHkuIFRoZSBzdWJzdHJpbmcgY2FuIGVpdGhlciBvcmlnaW5hdGUgZnJvbSBhIHN0cmluZyBvciBmcm9tCiAqIGEgWzpMaXN0PGludD46XSBvZiBVVEYtOCBieXRlcy4KICovCmFic3RyYWN0IGNsYXNzIF9MYXp5U3Vic3RyaW5nIHsKICAvKiogVGhlIG9yaWdpbmFsIGRhdGEsIGVpdGhlciBhIHN0cmluZyBvciBhIExpc3Q8aW50PiAqLwogIGdldCBkYXRhOwoKICBpbnQgZ2V0IHN0YXJ0OwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBJZiB0aGlzIHN1YnN0cmluZyBpcyBiYXNlZCBvbiBhIFN0cmluZywgdGhlIFtib29sVmFsdWVdIGluZGljYXRlcyB3aGV0aGVyCiAgICogdGhlIHJlc3VsdGluZyBzdWJzdHJpbmcgc2hvdWxkIGJlIGNhbm9uaWNhbGl6ZWQuCiAgICoKICAgKiBGb3Igc3Vic3RyaW5ncyBiYXNlZCBvbiBhIGJ5dGUgYXJyYXksIHRoZSBbYm9vbFZhbHVlXSBpcyB0cnVlIGlmIHRoZQogICAqIGFycmF5IG9ubHkgaG9sZHMgQVNDSUkgY2hhcmFjdGVycy4gVGhlIHJlc3VsdGluZyBzdWJzdHJpbmcgd2lsbCBiZQogICAqIGNhbm9uaWNhbGl6ZWQgYWZ0ZXIgZGVjb2RpbmcuCiAgICovCiAgYm9vbCBnZXQgYm9vbFZhbHVlOwoKICBfTGF6eVN1YnN0cmluZy5pbnRlcm5hbCgpOwoKICBmYWN0b3J5IF9MYXp5U3Vic3RyaW5nKGRhdGEsIGludCBzdGFydCwgaW50IGxlbmd0aCwgYm9vbCBiKSB7CiAgICAvLyBTZWUgY29tbWVudCBvbiBbQ29tcGFjdExhenlTdWJzdHJpbmddLgogICAgaWYgKHN0YXJ0IDwgMHgxMDAwMDAgJiYgbGVuZ3RoIDwgMHgyMDApIHsKICAgICAgaW50IGZpZWxkcyA9IChzdGFydCA8PCA5KTsKICAgICAgZmllbGRzID0gZmllbGRzIHwgbGVuZ3RoOwogICAgICBmaWVsZHMgPSBmaWVsZHMgPDwgMTsKICAgICAgaWYgKGIpIGZpZWxkcyB8PSAxOwogICAgICByZXR1cm4gbmV3IF9Db21wYWN0TGF6eVN1YnN0cmluZyhkYXRhLCBmaWVsZHMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBfRnVsbExhenlTdWJzdHJpbmcoZGF0YSwgc3RhcnQsIGxlbmd0aCwgYik7CiAgICB9CiAgfQp9CgovKioKICogVGhpcyBjbGFzcyBlbmNvZGVzIFtzdGFydF0sIFtsZW5ndGhdIGFuZCBbYm9vbFZhbHVlXSBpbiBhIHNpbmdsZQogKiAzMCBiaXQgaW50ZWdlci4gSXQgdXNlcyAyMCBiaXRzIGZvciBbc3RhcnRdLCB3aGljaCBjb3ZlcnMgc291cmNlIGZpbGVzCiAqIG9mIDFNQi4gW2xlbmd0aF0gaGFzIDkgYml0cywgd2hpY2ggY292ZXJzIDUxMiBjaGFyYWN0ZXJzLgogKgogKiBUaGUgZmlsZSBodG1sX2RhcnQyanMuZGFydCBpcyBjdXJyZW50bHkgYXJvdW5kIDFNQi4KICovCmNsYXNzIF9Db21wYWN0TGF6eVN1YnN0cmluZyBleHRlbmRzIF9MYXp5U3Vic3RyaW5nIHsKICBmaW5hbCBkYXRhOwogIGZpbmFsIGludCBmaWVsZHM7CgogIF9Db21wYWN0TGF6eVN1YnN0cmluZyh0aGlzLmRhdGEsIHRoaXMuZmllbGRzKSA6IHN1cGVyLmludGVybmFsKCk7CgogIGludCBnZXQgc3RhcnQgPT4gZmllbGRzID4+IDEwOwogIGludCBnZXQgbGVuZ3RoID0+IChmaWVsZHMgPj4gMSkgJiAweDFmZjsKICBib29sIGdldCBib29sVmFsdWUgPT4gKGZpZWxkcyAmIDEpID09IDE7Cn0KCmNsYXNzIF9GdWxsTGF6eVN1YnN0cmluZyBleHRlbmRzIF9MYXp5U3Vic3RyaW5nIHsKICBmaW5hbCBkYXRhOwogIGZpbmFsIGludCBzdGFydDsKICBmaW5hbCBpbnQgbGVuZ3RoOwogIGZpbmFsIGJvb2wgYm9vbFZhbHVlOwogIF9GdWxsTGF6eVN1YnN0cmluZyh0aGlzLmRhdGEsIHRoaXMuc3RhcnQsIHRoaXMubGVuZ3RoLCB0aGlzLmJvb2xWYWx1ZSkKICAgICAgOiBzdXBlci5pbnRlcm5hbCgpOwp9Cgpib29sIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yKFN0cmluZyB2YWx1ZSkgewogIHJldHVybiBpc0JpbmFyeU9wZXJhdG9yKHZhbHVlKSB8fAogICAgICBpc01pbnVzT3BlcmF0b3IodmFsdWUpIHx8CiAgICAgIGlzVGVybmFyeU9wZXJhdG9yKHZhbHVlKSB8fAogICAgICBpc1VuYXJ5T3BlcmF0b3IodmFsdWUpOwp9Cgpib29sIGlzVW5hcnlPcGVyYXRvcihTdHJpbmcgdmFsdWUpID0+IGlkZW50aWNhbCh2YWx1ZSwgIn4iKTsKCmJvb2wgaXNCaW5hcnlPcGVyYXRvcihTdHJpbmcgdmFsdWUpIHsKICByZXR1cm4gaWRlbnRpY2FsKHZhbHVlLCAiPT0iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICJbXSIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIioiKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICIvIikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiJSIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIn4vIikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiKyIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIjw8IikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiPj4iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICI+Pj4iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICI+PSIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIj4iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICI8PSIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIjwiKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICImIikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiXiIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgInwiKTsKfQoKYm9vbCBpc1Rlcm5hcnlPcGVyYXRvcihTdHJpbmcgdmFsdWUpID0+IGlkZW50aWNhbCh2YWx1ZSwgIltdPSIpOwoKYm9vbCBpc01pbnVzT3BlcmF0b3IoU3RyaW5nIHZhbHVlKSA9PiBpZGVudGljYWwodmFsdWUsICItIik7CoFfAE5OPAEdAS85ATUBJAEEQ0gUBFEGTAVNSk4nBicBOQEGTDMGR0sfRzQBBkgzBh1HSzUeJB0/DR1BBgQBBkooBlAmMTUeJEYNUQYEAUsxNAEMFiojDTYsLjUcND8PH0oIIwYEAQw+AQwfAU4BJTkhPQQBUUQEAQwlUAEMHAIBBEUELy9BMTkBDBcBDCxMAgFKDB8BBkkzBh5HIkApAQYnBkk0AQZKKAZRJkwBRzkBDBlCAQwSHDQhDTA3BgQCAQQ/HAQyBiEGDQEGIQYNAU1HASZRGx1LKQFKLh1RAQwhQwIBKDQGSTMGHkciQCkBBkooBlEmTAFHOQEMGUICAQRKRCMEIDsMARESAQZPNgVKSCMGFgEdAUAuLiEgHBo2DT0GBAIBBERKPQM3BDUOFAFEASErKwIBMg4TFBhJGgIBLSQgIh4CAT0BJiMgHx8fIB8gICEgHyAfHx8dAgFBAT0BLnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3Rva2VuLmRhcnQxc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL3NjYW5uZXIvdG9rZW4uZGFydMAAwVkvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoqCiAqIERlZmluZXMgdGhlIHRva2VucyB0aGF0IGFyZSBwcm9kdWNlZCBieSB0aGUgc2Nhbm5lciwgdXNlZCBieSB0aGUgcGFyc2VyLCBhbmQKICogcmVmZXJlbmNlZCBmcm9tIHRoZSBbQVNUIHN0cnVjdHVyZV0oYXN0LmRhcnQpLgogKi8KaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICcuLi9iYXNlL3N5bnRhY3RpY19lbnRpdHkuZGFydCc7CmltcG9ydCAnLi4vZmFzdGEvc2Nhbm5lci90b2tlbl9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnc3RyaW5nX3V0aWxpdGllcy5kYXJ0JzsKCmNvbnN0IGludCBOT19QUkVDRURFTkNFID0gMDsKY29uc3QgaW50IEFTU0lHTk1FTlRfUFJFQ0VERU5DRSA9IDE7CmNvbnN0IGludCBDQVNDQURFX1BSRUNFREVOQ0UgPSAyOwpjb25zdCBpbnQgQ09ORElUSU9OQUxfUFJFQ0VERU5DRSA9IDM7CmNvbnN0IGludCBJRl9OVUxMX1BSRUNFREVOQ0UgPSA0Owpjb25zdCBpbnQgTE9HSUNBTF9PUl9QUkVDRURFTkNFID0gNTsKY29uc3QgaW50IExPR0lDQUxfQU5EX1BSRUNFREVOQ0UgPSA2Owpjb25zdCBpbnQgRVFVQUxJVFlfUFJFQ0VERU5DRSA9IDc7CmNvbnN0IGludCBSRUxBVElPTkFMX1BSRUNFREVOQ0UgPSA4Owpjb25zdCBpbnQgQklUV0lTRV9PUl9QUkVDRURFTkNFID0gOTsKY29uc3QgaW50IEJJVFdJU0VfWE9SX1BSRUNFREVOQ0UgPSAxMDsKY29uc3QgaW50IEJJVFdJU0VfQU5EX1BSRUNFREVOQ0UgPSAxMTsKY29uc3QgaW50IFNISUZUX1BSRUNFREVOQ0UgPSAxMjsKY29uc3QgaW50IEFERElUSVZFX1BSRUNFREVOQ0UgPSAxMzsKY29uc3QgaW50IE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UgPSAxNDsKY29uc3QgaW50IFBSRUZJWF9QUkVDRURFTkNFID0gMTU7CmNvbnN0IGludCBQT1NURklYX1BSRUNFREVOQ0UgPSAxNjsKY29uc3QgaW50IFNFTEVDVE9SX1BSRUNFREVOQ0UgPSAxNzsKCi8qKgogKiBUaGUgb3BlbmluZyBoYWxmIG9mIGEgZ3JvdXBpbmcgcGFpciBvZiB0b2tlbnMuIFRoaXMgaXMgdXNlZCBmb3IgY3VybHkKICogYnJhY2tldHMgKCd7JyksIHBhcmVudGhlc2VzICgnKCcpLCBhbmQgc3F1YXJlIGJyYWNrZXRzICgnWycpLgogKi8KY2xhc3MgQmVnaW5Ub2tlbiBleHRlbmRzIFNpbXBsZVRva2VuIHsKICAvKioKICAgKiBUaGUgdG9rZW4gdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIHRva2VuLgogICAqLwogIFRva2VuIGVuZFRva2VuOwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbdHlwZV0gYXQgdGhlIGdpdmVuCiAgICogW29mZnNldF0uCiAgICovCiAgQmVnaW5Ub2tlbihUb2tlblR5cGUgdHlwZSwgaW50IG9mZnNldCwgW0NvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50XSkKICAgICAgOiBzdXBlcih0eXBlLCBvZmZzZXQsIHByZWNlZGluZ0NvbW1lbnQpIHsKICAgIGFzc2VydCh0eXBlID09IFRva2VuVHlwZS5MVCB8fAogICAgICAgIHR5cGUgPT0gVG9rZW5UeXBlLk9QRU5fQ1VSTFlfQlJBQ0tFVCB8fAogICAgICAgIHR5cGUgPT0gVG9rZW5UeXBlLk9QRU5fUEFSRU4gfHwKICAgICAgICB0eXBlID09IFRva2VuVHlwZS5PUEVOX1NRVUFSRV9CUkFDS0VUIHx8CiAgICAgICAgdHlwZSA9PSBUb2tlblR5cGUuUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVQgfHwKICAgICAgICB0eXBlID09IFRva2VuVHlwZS5TVFJJTkdfSU5URVJQT0xBVElPTl9FWFBSRVNTSU9OKTsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PiBuZXcgQmVnaW5Ub2tlbih0eXBlLCBvZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBnZXQgZW5kR3JvdXAgPT4gZW5kVG9rZW47CgogIC8qKgogICAqIFNldCB0aGUgdG9rZW4gdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIHRva2VuLgogICAqLwogIHNldCBlbmRHcm91cChUb2tlbiB0b2tlbikgewogICAgZW5kVG9rZW4gPSB0b2tlbjsKICB9Cn0KCi8qKgogKiBBIHRva2VuIHJlcHJlc2VudGluZyBhIGNvbW1lbnQuCiAqLwpjbGFzcyBDb21tZW50VG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbiB7CiAgLyoqCiAgICogVGhlIHRva2VuIHRoYXQgY29udGFpbnMgdGhpcyBjb21tZW50LgogICAqLwogIFNpbXBsZVRva2VuIHBhcmVudDsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgdG9rZW4gdG8gcmVwcmVzZW50IGEgdG9rZW4gb2YgdGhlIGdpdmVuIFt0eXBlXQogICAqIHdpdGggdGhlIGdpdmVuIFt2YWx1ZV0gYXQgdGhlIGdpdmVuIFtvZmZzZXRdLgogICAqLwogIENvbW1lbnRUb2tlbihUb2tlblR5cGUgdHlwZSwgU3RyaW5nIHZhbHVlLCBpbnQgb2Zmc2V0KQogICAgICA6IHN1cGVyKHR5cGUsIHZhbHVlLCBvZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBDb21tZW50VG9rZW4gY29weSgpID0+IG5ldyBDb21tZW50VG9rZW4odHlwZSwgX3ZhbHVlLCBvZmZzZXQpOwoKICAvKioKICAgKiBSZW1vdmUgdGhpcyBjb21tZW50IHRva2VuIGZyb20gdGhlIGxpc3QuCiAgICoKICAgKiBUaGlzIGlzIHVzZWQgd2hlbiB3ZSBkZWNpZGUgdG8gaW50ZXJwcmV0IHRoZSBjb21tZW50IGFzIHN5bnRheC4KICAgKi8KICB2b2lkIHJlbW92ZSgpIHsKICAgIGlmIChwcmV2aW91cyAhPSBudWxsKSB7CiAgICAgIHByZXZpb3VzLnNldE5leHRXaXRob3V0U2V0dGluZ1ByZXZpb3VzKG5leHQpOwogICAgICBuZXh0Py5wcmV2aW91cyA9IHByZXZpb3VzOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KHBhcmVudC5wcmVjZWRpbmdDb21tZW50cyA9PSB0aGlzKTsKICAgICAgcGFyZW50LnByZWNlZGluZ0NvbW1lbnRzID0gbmV4dDsKICAgIH0KICB9Cn0KCi8qKgogKiBBIGRvY3VtZW50YXRpb24gY29tbWVudCB0b2tlbi4KICovCmNsYXNzIERvY3VtZW50YXRpb25Db21tZW50VG9rZW4gZXh0ZW5kcyBDb21tZW50VG9rZW4gewogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIHRva2VuIHRvIHJlcHJlc2VudCBhIHRva2VuIG9mIHRoZSBnaXZlbiBbdHlwZV0KICAgKiB3aXRoIHRoZSBnaXZlbiBbdmFsdWVdIGF0IHRoZSBnaXZlbiBbb2Zmc2V0XS4KICAgKi8KICBEb2N1bWVudGF0aW9uQ29tbWVudFRva2VuKFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgdmFsdWUsIGludCBvZmZzZXQpCiAgICAgIDogc3VwZXIodHlwZSwgdmFsdWUsIG9mZnNldCk7CgogIEBvdmVycmlkZQogIENvbW1lbnRUb2tlbiBjb3B5KCkgPT4gbmV3IERvY3VtZW50YXRpb25Db21tZW50VG9rZW4odHlwZSwgX3ZhbHVlLCBvZmZzZXQpOwp9CgovKioKICogVGhlIGtleXdvcmRzIGluIHRoZSBEYXJ0IHByb2dyYW1taW5nIGxhbmd1YWdlLgogKgogKiBDbGllbnRzIG1heSBub3QgZXh0ZW5kLCBpbXBsZW1lbnQgb3IgbWl4LWluIHRoaXMgY2xhc3MuCiAqLwpjbGFzcyBLZXl3b3JkIGV4dGVuZHMgVG9rZW5UeXBlIHsKICBzdGF0aWMgY29uc3QgS2V5d29yZCBBQlNUUkFDVCA9CiAgICAgIGNvbnN0IEtleXdvcmQoImFic3RyYWN0IiwgIkFCU1RSQUNUIiwgaXNCdWlsdEluOiB0cnVlLCBpc01vZGlmaWVyOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQVMgPSBjb25zdCBLZXl3b3JkKCJhcyIsICJBUyIsCiAgICAgIHByZWNlZGVuY2U6IFJFTEFUSU9OQUxfUFJFQ0VERU5DRSwgaXNCdWlsdEluOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQVNTRVJUID0gY29uc3QgS2V5d29yZCgiYXNzZXJ0IiwgIkFTU0VSVCIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBBU1lOQyA9IGNvbnN0IEtleXdvcmQoImFzeW5jIiwgIkFTWU5DIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBBV0FJVCA9IGNvbnN0IEtleXdvcmQoImF3YWl0IiwgIkFXQUlUIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBCUkVBSyA9IGNvbnN0IEtleXdvcmQoImJyZWFrIiwgIkJSRUFLIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIENBU0UgPSBjb25zdCBLZXl3b3JkKCJjYXNlIiwgIkNBU0UiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQ0FUQ0ggPSBjb25zdCBLZXl3b3JkKCJjYXRjaCIsICJDQVRDSCIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBDTEFTUyA9CiAgICAgIGNvbnN0IEtleXdvcmQoImNsYXNzIiwgIkNMQVNTIiwgaXNUb3BMZXZlbEtleXdvcmQ6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBDT05TVCA9CiAgICAgIGNvbnN0IEtleXdvcmQoImNvbnN0IiwgIkNPTlNUIiwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIENPTlRJTlVFID0gY29uc3QgS2V5d29yZCgiY29udGludWUiLCAiQ09OVElOVUUiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQ09WQVJJQU5UID0gY29uc3QgS2V5d29yZCgiY292YXJpYW50IiwgIkNPVkFSSUFOVCIsCiAgICAgIGlzQnVpbHRJbjogdHJ1ZSwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIERFRkFVTFQgPSBjb25zdCBLZXl3b3JkKCJkZWZhdWx0IiwgIkRFRkFVTFQiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgREVGRVJSRUQgPQogICAgICBjb25zdCBLZXl3b3JkKCJkZWZlcnJlZCIsICJERUZFUlJFRCIsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIERPID0gY29uc3QgS2V5d29yZCgiZG8iLCAiRE8iKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRFlOQU1JQyA9CiAgICAgIGNvbnN0IEtleXdvcmQoImR5bmFtaWMiLCAiRFlOQU1JQyIsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEVMU0UgPSBjb25zdCBLZXl3b3JkKCJlbHNlIiwgIkVMU0UiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRU5VTSA9CiAgICAgIGNvbnN0IEtleXdvcmQoImVudW0iLCAiRU5VTSIsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRVhQT1JUID0gY29uc3QgS2V5d29yZCgiZXhwb3J0IiwgIkVYUE9SVCIsCiAgICAgIGlzQnVpbHRJbjogdHJ1ZSwgaXNUb3BMZXZlbEtleXdvcmQ6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBFWFRFTkRTID0gY29uc3QgS2V5d29yZCgiZXh0ZW5kcyIsICJFWFRFTkRTIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEVYVEVOU0lPTiA9IGNvbnN0IEtleXdvcmQoImV4dGVuc2lvbiIsICJFWFRFTlNJT04iLAogICAgICBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRVhURVJOQUwgPQogICAgICBjb25zdCBLZXl3b3JkKCJleHRlcm5hbCIsICJFWFRFUk5BTCIsIGlzQnVpbHRJbjogdHJ1ZSwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEZBQ1RPUlkgPQogICAgICBjb25zdCBLZXl3b3JkKCJmYWN0b3J5IiwgIkZBQ1RPUlkiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBGQUxTRSA9IGNvbnN0IEtleXdvcmQoImZhbHNlIiwgIkZBTFNFIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEZJTkFMID0KICAgICAgY29uc3QgS2V5d29yZCgiZmluYWwiLCAiRklOQUwiLCBpc01vZGlmaWVyOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRklOQUxMWSA9IGNvbnN0IEtleXdvcmQoImZpbmFsbHkiLCAiRklOQUxMWSIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBGT1IgPSBjb25zdCBLZXl3b3JkKCJmb3IiLCAiRk9SIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEZVTkNUSU9OID0KICAgICAgY29uc3QgS2V5d29yZCgiRnVuY3Rpb24iLCAiRlVOQ1RJT04iLCBpc1BzZXVkbzogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEdFVCA9IGNvbnN0IEtleXdvcmQoImdldCIsICJHRVQiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBISURFID0gY29uc3QgS2V5d29yZCgiaGlkZSIsICJISURFIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBJRiA9IGNvbnN0IEtleXdvcmQoImlmIiwgIklGIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIElNUExFTUVOVFMgPQogICAgICBjb25zdCBLZXl3b3JkKCJpbXBsZW1lbnRzIiwgIklNUExFTUVOVFMiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBJTVBPUlQgPSBjb25zdCBLZXl3b3JkKCJpbXBvcnQiLCAiSU1QT1JUIiwKICAgICAgaXNCdWlsdEluOiB0cnVlLCBpc1RvcExldmVsS2V5d29yZDogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIElOID0gY29uc3QgS2V5d29yZCgiaW4iLCAiSU4iKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgSU5URVJGQUNFID0KICAgICAgY29uc3QgS2V5d29yZCgiaW50ZXJmYWNlIiwgIklOVEVSRkFDRSIsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIElTID0KICAgICAgY29uc3QgS2V5d29yZCgiaXMiLCAiSVMiLCBwcmVjZWRlbmNlOiBSRUxBVElPTkFMX1BSRUNFREVOQ0UpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBMQVRFID0gY29uc3QgS2V5d29yZCgibGF0ZSIsICJMQVRFIiwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIExJQlJBUlkgPSBjb25zdCBLZXl3b3JkKCJsaWJyYXJ5IiwgIkxJQlJBUlkiLAogICAgICBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgTUlYSU4gPQogICAgICBjb25zdCBLZXl3b3JkKCJtaXhpbiIsICJNSVhJTiIsIGlzQnVpbHRJbjogdHJ1ZSwgaXNUb3BMZXZlbEtleXdvcmQ6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBOQVRJVkUgPQogICAgICBjb25zdCBLZXl3b3JkKCJuYXRpdmUiLCAiTkFUSVZFIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBORVcgPSBjb25zdCBLZXl3b3JkKCJuZXciLCAiTkVXIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIE5VTEwgPSBjb25zdCBLZXl3b3JkKCJudWxsIiwgIk5VTEwiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgT0YgPSBjb25zdCBLZXl3b3JkKCJvZiIsICJPRiIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgT04gPSBjb25zdCBLZXl3b3JkKCJvbiIsICJPTiIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgT1BFUkFUT1IgPQogICAgICBjb25zdCBLZXl3b3JkKCJvcGVyYXRvciIsICJPUEVSQVRPUiIsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFBBUlQgPQogICAgICBjb25zdCBLZXl3b3JkKCJwYXJ0IiwgIlBBUlQiLCBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgUEFUQ0ggPSBjb25zdCBLZXl3b3JkKCJwYXRjaCIsICJQQVRDSCIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgUkVRVUlSRUQgPQogICAgICBjb25zdCBLZXl3b3JkKCJyZXF1aXJlZCIsICJSRVFVSVJFRCIsIGlzQnVpbHRJbjogdHJ1ZSwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFJFVEhST1cgPSBjb25zdCBLZXl3b3JkKCJyZXRocm93IiwgIlJFVEhST1ciKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgUkVUVVJOID0gY29uc3QgS2V5d29yZCgicmV0dXJuIiwgIlJFVFVSTiIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBTRVQgPSBjb25zdCBLZXl3b3JkKCJzZXQiLCAiU0VUIiwgaXNCdWlsdEluOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU0hPVyA9IGNvbnN0IEtleXdvcmQoInNob3ciLCAiU0hPVyIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU09VUkNFID0KICAgICAgY29uc3QgS2V5d29yZCgic291cmNlIiwgIlNPVVJDRSIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU1RBVElDID0KICAgICAgY29uc3QgS2V5d29yZCgic3RhdGljIiwgIlNUQVRJQyIsIGlzQnVpbHRJbjogdHJ1ZSwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFNVUEVSID0gY29uc3QgS2V5d29yZCgic3VwZXIiLCAiU1VQRVIiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU1dJVENIID0gY29uc3QgS2V5d29yZCgic3dpdGNoIiwgIlNXSVRDSCIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBTWU5DID0gY29uc3QgS2V5d29yZCgic3luYyIsICJTWU5DIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBUSElTID0gY29uc3QgS2V5d29yZCgidGhpcyIsICJUSElTIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFRIUk9XID0gY29uc3QgS2V5d29yZCgidGhyb3ciLCAiVEhST1ciKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgVFJVRSA9IGNvbnN0IEtleXdvcmQoInRydWUiLCAiVFJVRSIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBUUlkgPSBjb25zdCBLZXl3b3JkKCJ0cnkiLCAiVFJZIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFRZUEVERUYgPSBjb25zdCBLZXl3b3JkKCJ0eXBlZGVmIiwgIlRZUEVERUYiLAogICAgICBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgVkFSID0gY29uc3QgS2V5d29yZCgidmFyIiwgIlZBUiIsIGlzTW9kaWZpZXI6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBWT0lEID0gY29uc3QgS2V5d29yZCgidm9pZCIsICJWT0lEIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFdISUxFID0gY29uc3QgS2V5d29yZCgid2hpbGUiLCAiV0hJTEUiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgV0lUSCA9IGNvbnN0IEtleXdvcmQoIndpdGgiLCAiV0lUSCIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBZSUVMRCA9IGNvbnN0IEtleXdvcmQoInlpZWxkIiwgIllJRUxEIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgTGlzdDxLZXl3b3JkPiB2YWx1ZXMgPSBjb25zdCA8S2V5d29yZD5bCiAgICBBQlNUUkFDVCwKICAgIEFTLAogICAgQVNTRVJULAogICAgQVNZTkMsCiAgICBBV0FJVCwKICAgIEJSRUFLLAogICAgQ0FTRSwKICAgIENBVENILAogICAgQ0xBU1MsCiAgICBDT05TVCwKICAgIENPTlRJTlVFLAogICAgQ09WQVJJQU5ULAogICAgREVGQVVMVCwKICAgIERFRkVSUkVELAogICAgRE8sCiAgICBEWU5BTUlDLAogICAgRUxTRSwKICAgIEVOVU0sCiAgICBFWFBPUlQsCiAgICBFWFRFTkRTLAogICAgRVhURU5TSU9OLAogICAgRVhURVJOQUwsCiAgICBGQUNUT1JZLAogICAgRkFMU0UsCiAgICBGSU5BTCwKICAgIEZJTkFMTFksCiAgICBGT1IsCiAgICBGVU5DVElPTiwKICAgIEdFVCwKICAgIEhJREUsCiAgICBJRiwKICAgIElNUExFTUVOVFMsCiAgICBJTVBPUlQsCiAgICBJTiwKICAgIElOVEVSRkFDRSwKICAgIElTLAogICAgTEFURSwKICAgIExJQlJBUlksCiAgICBNSVhJTiwKICAgIE5BVElWRSwKICAgIE5FVywKICAgIE5VTEwsCiAgICBPRiwKICAgIE9OLAogICAgT1BFUkFUT1IsCiAgICBQQVJULAogICAgUEFUQ0gsCiAgICBSRVFVSVJFRCwKICAgIFJFVEhST1csCiAgICBSRVRVUk4sCiAgICBTRVQsCiAgICBTSE9XLAogICAgU09VUkNFLAogICAgU1RBVElDLAogICAgU1VQRVIsCiAgICBTV0lUQ0gsCiAgICBTWU5DLAogICAgVEhJUywKICAgIFRIUk9XLAogICAgVFJVRSwKICAgIFRSWSwKICAgIFRZUEVERUYsCiAgICBWQVIsCiAgICBWT0lELAogICAgV0hJTEUsCiAgICBXSVRILAogICAgWUlFTEQsCiAgXTsKCiAgLyoqCiAgICogQSB0YWJsZSBtYXBwaW5nIHRoZSBsZXhlbWVzIG9mIGtleXdvcmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGtleXdvcmQuCiAgICovCiAgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIEtleXdvcmQ+IGtleXdvcmRzID0gX2NyZWF0ZUtleXdvcmRNYXAoKTsKCiAgLyoqCiAgICogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUga2V5d29yZCBpcyAiYnVpbHQtaW4iIGlkZW50aWZpZXIuCiAgICovCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0J1aWx0SW47CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNQc2V1ZG87CgogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIGtleXdvcmQuCiAgICovCiAgY29uc3QgS2V5d29yZChTdHJpbmcgbGV4ZW1lLCBTdHJpbmcgbmFtZSwKICAgICAge3RoaXMuaXNCdWlsdEluOiBmYWxzZSwKICAgICAgYm9vbCBpc01vZGlmaWVyOiBmYWxzZSwKICAgICAgdGhpcy5pc1BzZXVkbzogZmFsc2UsCiAgICAgIGJvb2wgaXNUb3BMZXZlbEtleXdvcmQ6IGZhbHNlLAogICAgICBpbnQgcHJlY2VkZW5jZTogTk9fUFJFQ0VERU5DRX0pCiAgICAgIDogc3VwZXIobGV4ZW1lLCBuYW1lLCBwcmVjZWRlbmNlLCBLRVlXT1JEX1RPS0VOLAogICAgICAgICAgICBpc01vZGlmaWVyOiBpc01vZGlmaWVyLCBpc1RvcExldmVsS2V5d29yZDogaXNUb3BMZXZlbEtleXdvcmQpOwoKICBib29sIGdldCBpc0J1aWx0SW5PclBzZXVkbyA9PiBpc0J1aWx0SW4gfHwgaXNQc2V1ZG87CgogIC8qKgogICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGtleXdvcmQgaXMgImJ1aWx0LWluIiBpZGVudGlmaWVyLgogICAqIFRoaXMgbWV0aG9kIGV4aXN0cyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgd2lsbCBiZSByZW1vdmVkLgogICAqIFVzZSBbaXNCdWlsdEluXSBpbnN0ZWFkLgogICAqLwogIEBkZXByZWNhdGVkCiAgYm9vbCBnZXQgaXNQc2V1ZG9LZXl3b3JkID0+IGlzQnVpbHRJbjsgLy8gVE9ETyAoZGFucnViZWwpOiByZW1vdmUgdGhpcwoKICAvKioKICAgKiBUaGUgbmFtZSBvZiB0aGUga2V5d29yZCB0eXBlLgogICAqLwogIFN0cmluZyBnZXQgbmFtZSA9PiBsZXhlbWUudG9VcHBlckNhc2UoKTsKCiAgLyoqCiAgICogVGhlIGxleGVtZSBmb3IgdGhlIGtleXdvcmQuCiAgICoKICAgKiBEZXByZWNhdGVkIC0gdXNlIFtsZXhlbWVdIGluc3RlYWQuCiAgICovCiAgQGRlcHJlY2F0ZWQKICBTdHJpbmcgZ2V0IHN5bnRheCA9PiBsZXhlbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7CgogIC8qKgogICAqIENyZWF0ZSBhIHRhYmxlIG1hcHBpbmcgdGhlIGxleGVtZXMgb2Yga2V5d29yZHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcga2V5d29yZAogICAqIGFuZCByZXR1cm4gdGhlIHRhYmxlIHRoYXQgd2FzIGNyZWF0ZWQuCiAgICovCiAgc3RhdGljIE1hcDxTdHJpbmcsIEtleXdvcmQ+IF9jcmVhdGVLZXl3b3JkTWFwKCkgewogICAgTGlua2VkSGFzaE1hcDxTdHJpbmcsIEtleXdvcmQ+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpbmtlZEhhc2hNYXA8U3RyaW5nLCBLZXl3b3JkPigpOwogICAgZm9yIChLZXl3b3JkIGtleXdvcmQgaW4gdmFsdWVzKSB7CiAgICAgIHJlc3VsdFtrZXl3b3JkLmxleGVtZV0gPSBrZXl3b3JkOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8qKgogKiBBIHRva2VuIHJlcHJlc2VudGluZyBhIGtleXdvcmQgaW4gdGhlIGxhbmd1YWdlLgogKi8KY2xhc3MgS2V5d29yZFRva2VuIGV4dGVuZHMgU2ltcGxlVG9rZW4gewogIEBvdmVycmlkZQogIGZpbmFsIEtleXdvcmQga2V5d29yZDsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgdG9rZW4gdG8gcmVwcmVzZW50IHRoZSBnaXZlbiBba2V5d29yZF0gYXQgdGhlCiAgICogZ2l2ZW4gW29mZnNldF0uCiAgICovCiAgS2V5d29yZFRva2VuKHRoaXMua2V5d29yZCwgaW50IG9mZnNldCwgW0NvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50XSkKICAgICAgOiBzdXBlcihrZXl3b3JkLCBvZmZzZXQsIHByZWNlZGluZ0NvbW1lbnQpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4KICAgICAgbmV3IEtleXdvcmRUb2tlbihrZXl3b3JkLCBvZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0lkZW50aWZpZXIgPT4ga2V5d29yZC5pc1BzZXVkbyB8fCBrZXl3b3JkLmlzQnVpbHRJbjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNLZXl3b3JkID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzS2V5d29yZE9ySWRlbnRpZmllciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBPYmplY3QgdmFsdWUoKSA9PiBrZXl3b3JkOwp9CgovKioKICogQSB0b2tlbiB0aGF0IHdhcyBzY2FubmVkIGZyb20gdGhlIGlucHV0LiBFYWNoIHRva2VuIGtub3dzIHdoaWNoIHRva2VucwogKiBwcmVjZWRlIGFuZCBmb2xsb3cgaXQsIGFjdGluZyBhcyBhIGxpbmsgaW4gYSBkb3VibHkgbGlua2VkIGxpc3Qgb2YgdG9rZW5zLgogKi8KY2xhc3MgU2ltcGxlVG9rZW4gaW1wbGVtZW50cyBUb2tlbiB7CiAgLyoqCiAgICogVGhlIHR5cGUgb2YgdGhlIHRva2VuLgogICAqLwogIEBvdmVycmlkZQogIGZpbmFsIFRva2VuVHlwZSB0eXBlOwoKICAvKioKICAgKiBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZQogICAqIHRva2VuLgogICAqLwogIEBvdmVycmlkZQogIGludCBvZmZzZXQgPSAwOwoKICAvKioKICAgKiBUaGUgcHJldmlvdXMgdG9rZW4gaW4gdGhlIHRva2VuIHN0cmVhbS4KICAgKi8KICBAb3ZlcnJpZGUKICBUb2tlbiBwcmV2aW91czsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gbmV4dDsKCiAgLyoqCiAgICogVGhlIGZpcnN0IGNvbW1lbnQgaW4gdGhlIGxpc3Qgb2YgY29tbWVudHMgdGhhdCBwcmVjZWRlIHRoaXMgdG9rZW4uCiAgICovCiAgQ29tbWVudFRva2VuIF9wcmVjZWRpbmdDb21tZW50OwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbdHlwZV0gYW5kIFtvZmZzZXRdLgogICAqLwogIFNpbXBsZVRva2VuKHRoaXMudHlwZSwgdGhpcy5vZmZzZXQsIFt0aGlzLl9wcmVjZWRpbmdDb21tZW50XSkgewogICAgX3NldENvbW1lbnRQYXJlbnQoX3ByZWNlZGluZ0NvbW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjaGFyQ291bnQgPT4gbGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGNoYXJPZmZzZXQgPT4gb2Zmc2V0OwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGNoYXJFbmQgPT4gZW5kOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBnZXQgYmVmb3JlU3ludGhldGljID0+IG51bGw7CgogIEBvdmVycmlkZQogIHNldCBiZWZvcmVTeW50aGV0aWMoVG9rZW4gcHJldmlvdXMpIHsKICAgIC8vIGlnbm9yZWQKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgZW5kID0+IG9mZnNldCArIGxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZ2V0IGVuZEdyb3VwID0+IG51bGw7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW9mID0+IHR5cGUgPT0gVG9rZW5UeXBlLkVPRjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJZGVudGlmaWVyID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0tleXdvcmQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzS2V5d29yZE9ySWRlbnRpZmllciA9PiBpc0lkZW50aWZpZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTW9kaWZpZXIgPT4gdHlwZS5pc01vZGlmaWVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc09wZXJhdG9yID0+IHR5cGUuaXNPcGVyYXRvcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gbGVuZ3RoID09IDA7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVG9wTGV2ZWxLZXl3b3JkID0+IHR5cGUuaXNUb3BMZXZlbEtleXdvcmQ7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVXNlckRlZmluYWJsZU9wZXJhdG9yID0+IHR5cGUuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I7CgogIEBvdmVycmlkZQogIEtleXdvcmQgZ2V0IGtleXdvcmQgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBraW5kID0+IHR5cGUua2luZDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gbGV4ZW1lLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBsZXhlbWUgPT4gdHlwZS5sZXhlbWU7CgogIEBvdmVycmlkZQogIENvbW1lbnRUb2tlbiBnZXQgcHJlY2VkaW5nQ29tbWVudHMgPT4gX3ByZWNlZGluZ0NvbW1lbnQ7CgogIHZvaWQgc2V0IHByZWNlZGluZ0NvbW1lbnRzKENvbW1lbnRUb2tlbiBjb21tZW50KSB7CiAgICBfcHJlY2VkaW5nQ29tbWVudCA9IGNvbW1lbnQ7CiAgICBfc2V0Q29tbWVudFBhcmVudChfcHJlY2VkaW5nQ29tbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHN0cmluZ1ZhbHVlID0+IHR5cGUuc3RyaW5nVmFsdWU7CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PgogICAgICBuZXcgU2ltcGxlVG9rZW4odHlwZSwgb2Zmc2V0LCBjb3B5Q29tbWVudHMocHJlY2VkaW5nQ29tbWVudHMpKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gY29weUNvbW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBpZiAodG9rZW4gPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIFRva2VuIGhlYWQgPSB0b2tlbi5jb3B5KCk7CiAgICBUb2tlbiB0YWlsID0gaGVhZDsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIHdoaWxlICh0b2tlbiAhPSBudWxsKSB7CiAgICAgIHRhaWwgPSB0YWlsLnNldE5leHQodG9rZW4uY29weSgpKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgcmV0dXJuIGhlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG1hdGNoZXNBbnkoTGlzdDxUb2tlblR5cGU+IHR5cGVzKSB7CiAgICBmb3IgKFRva2VuVHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIGlmICh0aGlzLnR5cGUgPT0gdHlwZSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBzZXROZXh0KFRva2VuIHRva2VuKSB7CiAgICBuZXh0ID0gdG9rZW47CiAgICB0b2tlbi5wcmV2aW91cyA9IHRoaXM7CiAgICB0b2tlbi5iZWZvcmVTeW50aGV0aWMgPSB0aGlzOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2V0TmV4dFdpdGhvdXRTZXR0aW5nUHJldmlvdXMoVG9rZW4gdG9rZW4pIHsKICAgIG5leHQgPSB0b2tlbjsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGxleGVtZTsKCiAgQG92ZXJyaWRlCiAgT2JqZWN0IHZhbHVlKCkgPT4gbGV4ZW1lOwoKICAvKioKICAgKiBTZXRzIHRoZSBgcGFyZW50YCBwcm9wZXJ0eSB0byBgdGhpc2AgZm9yIHRoZSBnaXZlbiBbY29tbWVudF0gYW5kIGFsbCB0aGUKICAgKiBuZXh0IHRva2Vucy4KICAgKi8KICB2b2lkIF9zZXRDb21tZW50UGFyZW50KENvbW1lbnRUb2tlbiBjb21tZW50KSB7CiAgICB3aGlsZSAoY29tbWVudCAhPSBudWxsKSB7CiAgICAgIGNvbW1lbnQucGFyZW50ID0gdGhpczsKICAgICAgY29tbWVudCA9IGNvbW1lbnQubmV4dDsKICAgIH0KICB9Cn0KCi8qKgogKiBBIHRva2VuIHdob3NlIHZhbHVlIGlzIGluZGVwZW5kZW50IG9mIGl0J3MgdHlwZS4KICovCmNsYXNzIFN0cmluZ1Rva2VuIGV4dGVuZHMgU2ltcGxlVG9rZW4gewogIC8qKgogICAqIFRoZSBsZXhlbWUgcmVwcmVzZW50ZWQgYnkgdGhpcyB0b2tlbi4KICAgKi8KICBTdHJpbmcgX3ZhbHVlOwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byByZXByZXNlbnQgYSB0b2tlbiBvZiB0aGUgZ2l2ZW4gW3R5cGVdCiAgICogd2l0aCB0aGUgZ2l2ZW4gW3ZhbHVlXSBhdCB0aGUgZ2l2ZW4gW29mZnNldF0uCiAgICovCiAgU3RyaW5nVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgaW50IG9mZnNldCwKICAgICAgW0NvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50XSkKICAgICAgOiBzdXBlcih0eXBlLCBvZmZzZXQsIHByZWNlZGluZ0NvbW1lbnQpIHsKICAgIHRoaXMuX3ZhbHVlID0gU3RyaW5nVXRpbGl0aWVzLmludGVybih2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0lkZW50aWZpZXIgPT4gaWRlbnRpY2FsKGtpbmQsIElERU5USUZJRVJfVE9LRU4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGxleGVtZSA9PiBfdmFsdWU7CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PgogICAgICBuZXcgU3RyaW5nVG9rZW4odHlwZSwgX3ZhbHVlLCBvZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmFsdWUoKSA9PiBfdmFsdWU7Cn0KCi8qKgogKiBBIHN5bnRoZXRpYyBiZWdpbiB0b2tlbi4KICovCmNsYXNzIFN5bnRoZXRpY0JlZ2luVG9rZW4gZXh0ZW5kcyBCZWdpblRva2VuIHsKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbdHlwZV0gYXQgdGhlIGdpdmVuCiAgICogW29mZnNldF0uCiAgICovCiAgU3ludGhldGljQmVnaW5Ub2tlbihUb2tlblR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAgW0NvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50XSkKICAgICAgOiBzdXBlcih0eXBlLCBvZmZzZXQsIHByZWNlZGluZ0NvbW1lbnQpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4KICAgICAgbmV3IFN5bnRoZXRpY0JlZ2luVG9rZW4odHlwZSwgb2Zmc2V0LCBjb3B5Q29tbWVudHMocHJlY2VkaW5nQ29tbWVudHMpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gMDsKfQoKLyoqCiAqIEEgc3ludGhldGljIGtleXdvcmQgdG9rZW4uCiAqLwpjbGFzcyBTeW50aGV0aWNLZXl3b3JkVG9rZW4gZXh0ZW5kcyBLZXl3b3JkVG9rZW4gewogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIHRva2VuIHRvIHJlcHJlc2VudCB0aGUgZ2l2ZW4gW2tleXdvcmRdIGF0IHRoZQogICAqIGdpdmVuIFtvZmZzZXRdLgogICAqLwogIFN5bnRoZXRpY0tleXdvcmRUb2tlbihLZXl3b3JkIGtleXdvcmQsIGludCBvZmZzZXQpIDogc3VwZXIoa2V5d29yZCwgb2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gMDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gY29weSgpID0+IG5ldyBTeW50aGV0aWNLZXl3b3JkVG9rZW4oa2V5d29yZCwgb2Zmc2V0KTsKfQoKLyoqCiAqIEEgdG9rZW4gd2hvc2UgdmFsdWUgaXMgaW5kZXBlbmRlbnQgb2YgaXQncyB0eXBlLgogKi8KY2xhc3MgU3ludGhldGljU3RyaW5nVG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbiB7CiAgZmluYWwgaW50IF9sZW5ndGg7CgogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIHRva2VuIHRvIHJlcHJlc2VudCBhIHRva2VuIG9mIHRoZSBnaXZlbiBbdHlwZV0KICAgKiB3aXRoIHRoZSBnaXZlbiBbdmFsdWVdIGF0IHRoZSBnaXZlbiBbb2Zmc2V0XS4gSWYgdGhlIFtsZW5ndGhdIGlzCiAgICogbm90IHNwZWNpZmllZCwgdGhlbiBpdCBkZWZhdWx0cyB0byB0aGUgbGVuZ3RoIG9mIFt2YWx1ZV0uCiAgICovCiAgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgaW50IG9mZnNldCwgW3RoaXMuX2xlbmd0aF0pCiAgICAgIDogc3VwZXIodHlwZSwgdmFsdWUsIG9mZnNldCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IHRydWU7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGggPz8gc3VwZXIubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4gbmV3IFN5bnRoZXRpY1N0cmluZ1Rva2VuKHR5cGUsIF92YWx1ZSwgb2Zmc2V0LCBfbGVuZ3RoKTsKfQoKLyoqCiAqIEEgc3ludGhldGljIHRva2VuLgogKi8KY2xhc3MgU3ludGhldGljVG9rZW4gZXh0ZW5kcyBTaW1wbGVUb2tlbiB7CiAgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBvZmZzZXQpIDogc3VwZXIodHlwZSwgb2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gYmVmb3JlU3ludGhldGljOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiAwOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4gbmV3IFN5bnRoZXRpY1Rva2VuKHR5cGUsIG9mZnNldCk7Cn0KCi8qKgogKiBBIHRva2VuIHRoYXQgd2FzIHNjYW5uZWQgZnJvbSB0aGUgaW5wdXQuIEVhY2ggdG9rZW4ga25vd3Mgd2hpY2ggdG9rZW5zCiAqIHByZWNlZGUgYW5kIGZvbGxvdyBpdCwgYWN0aW5nIGFzIGEgbGluayBpbiBhIGRvdWJseSBsaW5rZWQgbGlzdCBvZiB0b2tlbnMuCiAqCiAqIENsaWVudHMgbWF5IG5vdCBleHRlbmQsIGltcGxlbWVudCBvciBtaXgtaW4gdGhpcyBjbGFzcy4KICovCmFic3RyYWN0IGNsYXNzIFRva2VuIGltcGxlbWVudHMgU3ludGFjdGljRW50aXR5IHsKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbdHlwZV0gYW5kIFtvZmZzZXRdLgogICAqLwogIGZhY3RvcnkgVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBvZmZzZXQsIFtDb21tZW50VG9rZW4gcHJlY2VlZGluZ0NvbW1lbnRdKSA9CiAgICAgIFNpbXBsZVRva2VuOwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCBlbmQtb2YtZmlsZSB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbb2Zmc2V0XS4KICAgKi8KICBmYWN0b3J5IFRva2VuLmVvZihpbnQgb2Zmc2V0LCBbQ29tbWVudFRva2VuIHByZWNlZGluZ0NvbW1lbnRzXSkgewogICAgVG9rZW4gZW9mID0gbmV3IFNpbXBsZVRva2VuKFRva2VuVHlwZS5FT0YsIG9mZnNldCwgcHJlY2VkaW5nQ29tbWVudHMpOwogICAgLy8gRU9GIHBvaW50cyB0byBpdHNlbGYgc28gdGhlcmUncyBhbHdheXMgaW5maW5pdGUgbG9vay1haGVhZC4KICAgIGVvZi5wcmV2aW91cyA9IGVvZjsKICAgIGVvZi5uZXh0ID0gZW9mOwogICAgcmV0dXJuIGVvZjsKICB9CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwYXJzZWQgYnkgdGhpcyB0b2tlbi4KICAgKi8KICBpbnQgZ2V0IGNoYXJDb3VudDsKCiAgLyoqCiAgICogVGhlIGNoYXJhY3RlciBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoaXMgdG9rZW4gd2l0aGluIHRoZSBzb3VyY2UgdGV4dC4KICAgKi8KICBpbnQgZ2V0IGNoYXJPZmZzZXQ7CgogIC8qKgogICAqIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IG9mIHRoZSBlbmQgb2YgdGhpcyB0b2tlbiB3aXRoaW4gdGhlIHNvdXJjZSB0ZXh0LgogICAqLwogIGludCBnZXQgY2hhckVuZDsKCiAgLyoqCiAgICogVGhlIHRva2VuIGJlZm9yZSB0aGlzIHN5bnRoZXRpYyB0b2tlbiwKICAgKiBvciBgbnVsbGAgaWYgdGhpcyBpcyBub3QgYSBzeW50aGV0aWMgYClgLCBgXWAsIGB9YCwgb3IgYD5gIHRva2VuLgogICAqLwogIFRva2VuIGdldCBiZWZvcmVTeW50aGV0aWM7CgogIC8qKgogICAqIFNldCB0b2tlbiBiZWZvcmUgdGhpcyBzeW50aGV0aWMgYClgLCBgXWAsIGB9YCwgb3IgYD5gIHRva2VuLAogICAqIGFuZCBpZ25vcmVkIG90aGVyd2lzZS4KICAgKi8KICBzZXQgYmVmb3JlU3ludGhldGljKFRva2VuIHByZXZpb3VzKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBlbmQ7CgogIC8qKgogICAqIFRoZSB0b2tlbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgdG9rZW4sIG9yIGBudWxsYCBpZiB0aGlzIHRva2VuIGlzIG5vdAogICAqIHRoZSBmaXJzdCBvZiBhIHBhaXIgb2YgbWF0Y2hpbmcgdG9rZW5zIChzdWNoIGFzIHBhcmVudGhlc2VzKS4KICAgKi8KICBUb2tlbiBnZXQgZW5kR3JvdXAgPT4gbnVsbDsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHRva2VuIHJlcHJlc2VudHMgYW4gZW5kIG9mIGZpbGUuCiAgICovCiAgYm9vbCBnZXQgaXNFb2Y7CgogIC8qKgogICAqIFRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBpZGVudGlmaWVyLiBTb21lIGtleXdvcmRzIGFsbG93ZWQgYXMgaWRlbnRpZmllcnMsCiAgICogc2VlIGltcGxlbWVudGF0aW9uIGluIFtLZXl3b3JkVG9rZW5dLgogICAqLwogIGJvb2wgZ2V0IGlzSWRlbnRpZmllcjsKCiAgLyoqCiAgICogVHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEga2V5d29yZC4gU29tZSBrZXl3b3JkcyBhbGxvd2VkIGFzIGlkZW50aWZpZXJzLAogICAqIHNlZSBpbXBsZW1lbnRhdGlvbiBpbiBbS2V5d29yZFRva2VuXS4KICAgKi8KICBib29sIGdldCBpc0tleXdvcmQ7CgogIC8qKgogICAqIFRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIGtleXdvcmQgb3IgYW4gaWRlbnRpZmllci4KICAgKi8KICBib29sIGdldCBpc0tleXdvcmRPcklkZW50aWZpZXI7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiBpcyBhIG1vZGlmaWVyIHN1Y2ggYXMgYGFic3RyYWN0YCBvciBgY29uc3RgLgogICAqLwogIGJvb2wgZ2V0IGlzTW9kaWZpZXI7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiByZXByZXNlbnRzIGFuIG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzT3BlcmF0b3I7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiBpcyBhIHN5bnRoZXRpYyB0b2tlbi4gQSBzeW50aGV0aWMgdG9rZW4gaXMgYQogICAqIHRva2VuIHRoYXQgd2FzIGludHJvZHVjZWQgYnkgdGhlIHBhcnNlciBpbiBvcmRlciB0byByZWNvdmVyIGZyb20gYW4gZXJyb3IKICAgKiBpbiB0aGUgY29kZS4KICAgKi8KICBib29sIGdldCBpc1N5bnRoZXRpYzsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHRva2VuIGlzIGEga2V5d29yZCBzdGFydGluZyBhIHRvcCBsZXZlbCBkZWNsYXJhdGlvbgogICAqIHN1Y2ggYXMgYGNsYXNzYCwgYGVudW1gLCBgaW1wb3J0YCwgZXRjLgogICAqLwogIGJvb2wgZ2V0IGlzVG9wTGV2ZWxLZXl3b3JkOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdG9rZW4gcmVwcmVzZW50cyBhbiBvcGVyYXRvciB0aGF0IGNhbiBiZSBkZWZpbmVkIGJ5CiAgICogdXNlcnMuCiAgICovCiAgYm9vbCBnZXQgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I7CgogIC8qKgogICAqIFJldHVybiB0aGUga2V5d29yZCwgaWYgYSBrZXl3b3JkIHRva2VuLCBvciBgbnVsbGAgb3RoZXJ3aXNlLgogICAqLwogIEtleXdvcmQgZ2V0IGtleXdvcmQ7CgogIC8qKgogICAqIFRoZSBraW5kIGVudW0gb2YgdGhpcyB0b2tlbiBhcyBkZXRlcm1pbmVkIGJ5IGl0cyBbdHlwZV0uCiAgICovCiAgaW50IGdldCBraW5kOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBsZXhlbWUgdGhhdCByZXByZXNlbnRzIHRoaXMgdG9rZW4uCiAgICoKICAgKiBGb3IgW1N0cmluZ1Rva2VuXXMgdGhlIFtsZXhlbWVdIGluY2x1ZGVzIHRoZSBxdW90ZXMsIGV4cGxpY2l0IGVzY2FwZXMsIGV0Yy4KICAgKi8KICBTdHJpbmcgZ2V0IGxleGVtZTsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBuZXh0IHRva2VuIGluIHRoZSB0b2tlbiBzdHJlYW0uCiAgICovCiAgVG9rZW4gZ2V0IG5leHQ7CgogIC8qKgogICAqIFJldHVybiB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtLgogICAqLwogIHZvaWQgc2V0IG5leHQoVG9rZW4gbmV4dCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgb2Zmc2V0OwoKICAvKioKICAgKiBTZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbgogICAqIHRoZSB0b2tlbiB0byB0aGUgZ2l2ZW4gW29mZnNldF0uCiAgICovCiAgdm9pZCBzZXQgb2Zmc2V0KGludCBvZmZzZXQpOwoKICAvKioKICAgKiBSZXR1cm4gdGhlIGZpcnN0IGNvbW1lbnQgaW4gdGhlIGxpc3Qgb2YgY29tbWVudHMgdGhhdCBwcmVjZWRlIHRoaXMgdG9rZW4sCiAgICogb3IgYG51bGxgIGlmIHRoZXJlIGFyZSBubyBjb21tZW50cyBwcmVjZWRpbmcgdGhpcyB0b2tlbi4gQWRkaXRpb25hbAogICAqIGNvbW1lbnRzIGNhbiBiZSByZWFjaGVkIGJ5IGZvbGxvd2luZyB0aGUgdG9rZW4gc3RyZWFtIHVzaW5nIFtuZXh0XSB1bnRpbAogICAqIGBudWxsYCBpcyByZXR1cm5lZC4KICAgKgogICAqIEZvciBleGFtcGxlLCBpZiB0aGUgb3JpZ2luYWwgY29udGVudHMgd2VyZSBgLyogb25lICovIC8qIHR3byAqLyBpZGAsIHRoZW4KICAgKiB0aGUgZmlyc3QgcHJlY2VkaW5nIGNvbW1lbnQgdG9rZW4gd2lsbCBoYXZlIGEgbGV4ZW1lIG9mIGAvKiBvbmUgKi9gIGFuZAogICAqIHRoZSBuZXh0IGNvbW1lbnQgdG9rZW4gd2lsbCBoYXZlIGEgbGV4ZW1lIG9mIGAvKiB0d28gKi9gLgogICAqLwogIFRva2VuIGdldCBwcmVjZWRpbmdDb21tZW50czsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBwcmV2aW91cyB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtLgogICAqLwogIFRva2VuIGdldCBwcmV2aW91czsKCiAgLyoqCiAgICogU2V0IHRoZSBwcmV2aW91cyB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtIHRvIHRoZSBnaXZlbiBbdG9rZW5dLgogICAqLwogIHZvaWQgc2V0IHByZXZpb3VzKFRva2VuIHRva2VuKTsKCiAgLyoqCiAgICogRm9yIHN5bWJvbCBhbmQga2V5d29yZCB0b2tlbnMsIHJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGlzCiAgICogdG9rZW4uIEZvciBbU3RyaW5nVG9rZW5dcyB0aGlzIG1ldGhvZCByZXR1cm5zIFs6bnVsbDpdLgogICAqCiAgICogRm9yIFtTeW1ib2xUb2tlbl1zIGFuZCBbS2V5d29yZFRva2VuXXMsIHRoZSBzdHJpbmcgdmFsdWUgaXMgYSBjb21waWxlLXRpbWUKICAgKiBjb25zdGFudCBvcmlnaW5hdGluZyBpbiB0aGUgW1Rva2VuVHlwZV0gb3IgaW4gdGhlIFtLZXl3b3JkXSBpbnN0YW5jZS4KICAgKiBUaGlzIGFsbG93cyB0ZXN0aW5nIGZvciBrZXl3b3JkcyBhbmQgc3ltYm9scyB1c2luZyBbOmlkZW50aWNhbDpdLCBlLmcuLAogICAqIFs6aWRlbnRpY2FsKCdjbGFzcycsIHRva2VuLnZhbHVlKTpdLgogICAqCiAgICogTm90ZSB0aGF0IHJldHVybmluZyBbOm51bGw6XSBmb3Igc3RyaW5nIHRva2VucyBpcyBpbXBvcnRhbnQgdG8gaWRlbnRpZnkKICAgKiBzeW1ib2xzIGFuZCBrZXl3b3Jkcywgd2UgY2Fubm90IHVzZSBbbGV4ZW1lXSBpbnN0ZWFkLiBUaGUgc3RyaW5nIGxpdGVyYWwKICAgKiAgICIkYSgkYiIKICAgKiBwcm9kdWNlcyAuLi4sIFN5bWJvbFRva2VuKCQpLCBTdHJpbmdUb2tlbihhKSwgU3RyaW5nVG9rZW4oKCksIC4uLgogICAqCiAgICogQWZ0ZXIgcGFyc2luZyB0aGUgaWRlbnRpZmllciAnYScsIHRoZSBwYXJzZXIgdGVzdHMgZm9yIGEgZnVuY3Rpb24KICAgKiBkZWNsYXJhdGlvbiB1c2luZyBbOmlkZW50aWNhbChuZXh0LnN0cmluZ1ZhbHVlLCAnKCcpOl0sIHdoaWNoIChyaWdodGZ1bGx5KQogICAqIHJldHVybnMgZmFsc2UgYmVjYXVzZSBzdHJpbmdWYWx1ZSByZXR1cm5zIFs6bnVsbDpdLgogICAqLwogIFN0cmluZyBnZXQgc3RyaW5nVmFsdWU7CgogIC8qKgogICAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgdG9rZW4uCiAgICovCiAgVG9rZW5UeXBlIGdldCB0eXBlOwoKICAvKioKICAgKiBSZXR1cm4gYSBuZXdseSBjcmVhdGVkIHRva2VuIHRoYXQgaXMgYSBjb3B5IG9mIHRoaXMgdG9rZW5zCiAgICogaW5jbHVkaW5nIGFueSBbcHJlY2VlZGluZ0NvbW1lbnRdIHRva2VucywKICAgKiBidXQgdGhhdCBpcyBub3QgYSBwYXJ0IG9mIGFueSB0b2tlbiBzdHJlYW0uCiAgICovCiAgVG9rZW4gY29weSgpOwoKICAvKioKICAgKiBDb3B5IGEgbGlua2VkIGxpc3Qgb2YgY29tbWVudCB0b2tlbnMgaWRlbnRpY2FsIHRvIHRoZSBnaXZlbiBjb21tZW50IHRva2Vucy4KICAgKi8KICBUb2tlbiBjb3B5Q29tbWVudHMoVG9rZW4gdG9rZW4pOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdG9rZW4gaGFzIGFueSBvbmUgb2YgdGhlIGdpdmVuIFt0eXBlc10uCiAgICovCiAgYm9vbCBtYXRjaGVzQW55KExpc3Q8VG9rZW5UeXBlPiB0eXBlcyk7CgogIC8qKgogICAqIFNldCB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtIHRvIHRoZSBnaXZlbiBbdG9rZW5dLiBUaGlzIGhhcyB0aGUKICAgKiBzaWRlLWVmZmVjdCBvZiBzZXR0aW5nIHRoaXMgdG9rZW4gdG8gYmUgdGhlIHByZXZpb3VzIHRva2VuIGZvciB0aGUgZ2l2ZW4KICAgKiB0b2tlbi4gUmV0dXJuIHRoZSB0b2tlbiB0aGF0IHdhcyBwYXNzZWQgaW4uCiAgICovCiAgVG9rZW4gc2V0TmV4dChUb2tlbiB0b2tlbik7CgogIC8qKgogICAqIFNldCB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtIHRvIHRoZSBnaXZlbiB0b2tlbiB3aXRob3V0IGNoYW5naW5nCiAgICogd2hpY2ggdG9rZW4gaXMgdGhlIHByZXZpb3VzIHRva2VuIGZvciB0aGUgZ2l2ZW4gdG9rZW4uIFJldHVybiB0aGUgdG9rZW4KICAgKiB0aGF0IHdhcyBwYXNzZWQgaW4uCiAgICovCiAgVG9rZW4gc2V0TmV4dFdpdGhvdXRTZXR0aW5nUHJldmlvdXMoVG9rZW4gdG9rZW4pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRva2VuIHRvIGJlIHVzZWQgZm9yIGRlYnVnZ2luZwogICAqIHB1cnBvc2VzLiBUaGUgcmVzdWx0aW5nIHN0cmluZyBtaWdodCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZQogICAqIHN0cnVjdHVyZSBvZiB0aGUgdG9rZW4sIGZvciBleGFtcGxlICdTdHJpbmdUb2tlbihmb28pJyBmb3IgdGhlIGlkZW50aWZpZXIKICAgKiB0b2tlbiAnZm9vJy4KICAgKgogICAqIFVzZSBbbGV4ZW1lXSBmb3IgdGhlIHRleHQgYWN0dWFsbHkgcGFyc2VkIGJ5IHRoZSB0b2tlbi4KICAgKi8KICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKTsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGlzIHRva2VuLiBGb3Iga2V5d29yZCB0b2tlbnMsIHRoaXMgaXMgdGhlIGtleXdvcmQKICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHRva2VuLCBmb3Igb3RoZXIgdG9rZW5zIGl0IGlzIHRoZSBsZXhlbWUgYXNzb2NpYXRlZAogICAqIHdpdGggdGhlIHRva2VuLgogICAqLwogIE9iamVjdCB2YWx1ZSgpOwoKICAvKioKICAgKiBDb21wYXJlIHRoZSBnaXZlbiBbdG9rZW5zXSB0byBmaW5kIHRoZSB0b2tlbiB0aGF0IGFwcGVhcnMgZmlyc3QgaW4gdGhlCiAgICogc291cmNlIGJlaW5nIHBhcnNlZC4gVGhhdCBpcywgcmV0dXJuIHRoZSBsZWZ0LW1vc3Qgb2YgYWxsIG9mIHRoZSB0b2tlbnMuCiAgICogVGhlIGxpc3QgbXVzdCBiZSBub24tYG51bGxgLCBidXQgdGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0IGFyZSBhbGxvd2VkIHRvIGJlCiAgICogYG51bGxgLiBSZXR1cm4gdGhlIHRva2VuIHdpdGggdGhlIHNtYWxsZXN0IG9mZnNldCwgb3IgYG51bGxgIGlmIHRoZSBsaXN0IGlzCiAgICogZW1wdHkgb3IgaWYgYWxsIG9mIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCBhcmUgYG51bGxgLgogICAqLwogIHN0YXRpYyBUb2tlbiBsZXhpY2FsbHlGaXJzdChMaXN0PFRva2VuPiB0b2tlbnMpIHsKICAgIFRva2VuIGZpcnN0ID0gbnVsbDsKICAgIGludCBvZmZzZXQgPSAtMTsKICAgIGludCBsZW5ndGggPSB0b2tlbnMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBUb2tlbiB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgaWYgKHRva2VuICE9IG51bGwgJiYgKG9mZnNldCA8IDAgfHwgdG9rZW4ub2Zmc2V0IDwgb2Zmc2V0KSkgewogICAgICAgIGZpcnN0ID0gdG9rZW47CiAgICAgICAgb2Zmc2V0ID0gdG9rZW4ub2Zmc2V0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmlyc3Q7CiAgfQp9CgovKioKICogVGhlIGNsYXNzZXMgKG9yIGdyb3Vwcykgb2YgdG9rZW5zIHdpdGggYSBzaW1pbGFyIHVzZS4KICovCmNsYXNzIFRva2VuQ2xhc3MgewogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIG5vdCBwYXJ0IG9mIGFueSBzcGVjaWZpYwogICAqIGNsYXNzIG9mIHRva2VuLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIE5PX0NMQVNTID0gY29uc3QgVG9rZW5DbGFzcygnTk9fQ0xBU1MnKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYW4gYWRkaXRpdmUgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgQURESVRJVkVfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdBRERJVElWRV9PUEVSQVRPUicsIEFERElUSVZFX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIEFTU0lHTk1FTlRfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdBU1NJR05NRU5UX09QRVJBVE9SJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSBiaXR3aXNlLWFuZCBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBCSVRXSVNFX0FORF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ0JJVFdJU0VfQU5EX09QRVJBVE9SJywgQklUV0lTRV9BTkRfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgYml0d2lzZS1vciBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBCSVRXSVNFX09SX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnQklUV0lTRV9PUl9PUEVSQVRPUicsIEJJVFdJU0VfT1JfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgYml0d2lzZS14b3Igb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgQklUV0lTRV9YT1JfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdCSVRXSVNFX1hPUl9PUEVSQVRPUicsIEJJVFdJU0VfWE9SX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIGNhc2NhZGUgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgQ0FTQ0FERV9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ0NBU0NBREVfT1BFUkFUT1InLCBDQVNDQURFX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIGNvbmRpdGlvbmFsIG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIENPTkRJVElPTkFMX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnQ09ORElUSU9OQUxfT1BFUkFUT1InLCBDT05ESVRJT05BTF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYW4gZXF1YWxpdHkgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgRVFVQUxJVFlfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdFUVVBTElUWV9PUEVSQVRPUicsIEVRVUFMSVRZX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhbiBpZi1udWxsIG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIElGX05VTExfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdJRl9OVUxMX09QRVJBVE9SJywgSUZfTlVMTF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSBsb2dpY2FsLWFuZCBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBMT0dJQ0FMX0FORF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ0xPR0lDQUxfQU5EX09QRVJBVE9SJywgTE9HSUNBTF9BTkRfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgbG9naWNhbC1vciBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBMT0dJQ0FMX09SX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnTE9HSUNBTF9PUl9PUEVSQVRPUicsIExPR0lDQUxfT1JfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgbXVsdGlwbGljYXRpdmUgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgTVVMVElQTElDQVRJVkVfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdNVUxUSVBMSUNBVElWRV9PUEVSQVRPUicsIE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIHJlbGF0aW9uYWwgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgUkVMQVRJT05BTF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ1JFTEFUSU9OQUxfT1BFUkFUT1InLCBSRUxBVElPTkFMX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIHNoaWZ0IG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIFNISUZUX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnU0hJRlRfT1BFUkFUT1InLCBTSElGVF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSB1bmFyeSBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBVTkFSWV9QT1NURklYX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnVU5BUllfUE9TVEZJWF9PUEVSQVRPUicsIFBPU1RGSVhfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgdW5hcnkgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgVU5BUllfUFJFRklYX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnVU5BUllfUFJFRklYX09QRVJBVE9SJywgUFJFRklYX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBUaGUgbmFtZSBvZiB0aGUgdG9rZW4gY2xhc3MuCiAgICovCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8qKgogICAqIFRoZSBwcmVjZWRlbmNlIG9mIHRva2VucyBvZiB0aGlzIGNsYXNzLCBvciBgMGAgaWYgdGhlIHN1Y2ggdG9rZW5zIGRvIG5vdAogICAqIHJlcHJlc2VudCBhbiBvcGVyYXRvci4KICAgKi8KICBmaW5hbCBpbnQgcHJlY2VkZW5jZTsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgY2xhc3Mgb2YgdG9rZW5zIHRvIGhhdmUgdGhlIGdpdmVuIFtuYW1lXSBhbmQKICAgKiBbcHJlY2VkZW5jZV0uCiAgICovCiAgY29uc3QgVG9rZW5DbGFzcyh0aGlzLm5hbWUsIFt0aGlzLnByZWNlZGVuY2UgPSBOT19QUkVDRURFTkNFXSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7Cn0KCi8qKgogKiBUaGUgdHlwZXMgb2YgdG9rZW5zIHRoYXQgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBzY2FubmVyLgogKgogKiBDbGllbnRzIG1heSBub3QgZXh0ZW5kLCBpbXBsZW1lbnQgb3IgbWl4LWluIHRoaXMgY2xhc3MuCiAqLwpjbGFzcyBUb2tlblR5cGUgewogIC8qKgogICAqIFRoZSB0eXBlIG9mIHRoZSB0b2tlbiB0aGF0IG1hcmtzIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGlucHV0LgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRU9GID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCcnLCAnRU9GJywgTk9fUFJFQ0VERU5DRSwgRU9GX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBET1VCTEUgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdkb3VibGUnLCAnRE9VQkxFJywgTk9fUFJFQ0VERU5DRSwgRE9VQkxFX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSEVYQURFQ0lNQUwgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdoZXhhZGVjaW1hbCcsICdIRVhBREVDSU1BTCcsIE5PX1BSRUNFREVOQ0UsIEhFWEFERUNJTUFMX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSURFTlRJRklFUiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ2lkZW50aWZpZXInLCAnSURFTlRJRklFUicsIE5PX1BSRUNFREVOQ0UsIElERU5USUZJRVJfVE9LRU4sCiAgICAgIHN0cmluZ1ZhbHVlOiBudWxsKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBJTlQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdpbnQnLCAnSU5UJywgTk9fUFJFQ0VERU5DRSwgSU5UX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgTVVMVElfTElORV9DT01NRU5UID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnY29tbWVudCcsICdNVUxUSV9MSU5FX0NPTU1FTlQnLCBOT19QUkVDRURFTkNFLCBDT01NRU5UX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU0NSSVBUX1RBRyA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnc2NyaXB0JywgJ1NDUklQVF9UQUcnLCBOT19QUkVDRURFTkNFLCBTQ1JJUFRfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNJTkdMRV9MSU5FX0NPTU1FTlQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdjb21tZW50JywgJ1NJTkdMRV9MSU5FX0NPTU1FTlQnLCBOT19QUkVDRURFTkNFLCBDT01NRU5UX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU1RSSU5HID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnc3RyaW5nJywgJ1NUUklORycsIE5PX1BSRUNFREVOQ0UsIFNUUklOR19UT0tFTiwKICAgICAgc3RyaW5nVmFsdWU6IG51bGwpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFNUEVSU0FORCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyYnLCAnQU1QRVJTQU5EJywgQklUV0lTRV9BTkRfUFJFQ0VERU5DRSwgQU1QRVJTQU5EX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQU1QRVJTQU5EX0FNUEVSU0FORCA9IGNvbnN0IFRva2VuVHlwZSgnJiYnLAogICAgICAnQU1QRVJTQU5EX0FNUEVSU0FORCcsIExPR0lDQUxfQU5EX1BSRUNFREVOQ0UsIEFNUEVSU0FORF9BTVBFUlNBTkRfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICAvLyBUaGlzIGlzIG5vdCB5ZXQgcGFydCBvZiB0aGUgbGFuZ3VhZ2UgYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmFzdGEKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFNUEVSU0FORF9BTVBFUlNBTkRfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcmJj0nLAogICAgICAnQU1QRVJTQU5EX0FNUEVSU0FORF9FUScsCiAgICAgIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwKICAgICAgQU1QRVJTQU5EX0FNUEVSU0FORF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQU1QRVJTQU5EX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnJj0nLCAnQU1QRVJTQU5EX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBBTVBFUlNBTkRfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFUID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCdAJywgJ0FUJywgTk9fUFJFQ0VERU5DRSwgQVRfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEJBTkcgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICchJywgJ0JBTkcnLCBQUkVGSVhfUFJFQ0VERU5DRSwgQkFOR19UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFOR19FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyE9JywgJ0JBTkdfRVEnLCBFUVVBTElUWV9QUkVDRURFTkNFLCBCQU5HX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQU5HX0VRX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnIT09JywgJ0JBTkdfRVFfRVEnLCBFUVVBTElUWV9QUkVDRURFTkNFLCBCQU5HX0VRX0VRX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQVIgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd8JywgJ0JBUicsIEJJVFdJU0VfT1JfUFJFQ0VERU5DRSwgQkFSX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFSX0JBUiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ3x8JywgJ0JBUl9CQVInLCBMT0dJQ0FMX09SX1BSRUNFREVOQ0UsIEJBUl9CQVJfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICAvLyBUaGlzIGlzIG5vdCB5ZXQgcGFydCBvZiB0aGUgbGFuZ3VhZ2UgYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmFzdGEKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEJBUl9CQVJfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd8fD0nLCAnQkFSX0JBUl9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgQkFSX0JBUl9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFSX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnfD0nLCAnQkFSX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBCQVJfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIENPTE9OID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCc6JywgJ0NPTE9OJywgTk9fUFJFQ0VERU5DRSwgQ09MT05fVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIENPTU1BID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCcsJywgJ0NPTU1BJywgTk9fUFJFQ0VERU5DRSwgQ09NTUFfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIENBUkVUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnXicsICdDQVJFVCcsIEJJVFdJU0VfWE9SX1BSRUNFREVOQ0UsIENBUkVUX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQ0FSRVRfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdePScsICdDQVJFVF9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgQ0FSRVRfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIENMT1NFX0NVUkxZX0JSQUNLRVQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd9JywgJ0NMT1NFX0NVUkxZX0JSQUNLRVQnLCBOT19QUkVDRURFTkNFLCBDTE9TRV9DVVJMWV9CUkFDS0VUX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBDTE9TRV9QQVJFTiA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnKScsICdDTE9TRV9QQVJFTicsIE5PX1BSRUNFREVOQ0UsIENMT1NFX1BBUkVOX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBDTE9TRV9TUVVBUkVfQlJBQ0tFVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ10nLCAnQ0xPU0VfU1FVQVJFX0JSQUNLRVQnLCBOT19QUkVDRURFTkNFLCBDTE9TRV9TUVVBUkVfQlJBQ0tFVF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc9JywgJ0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBFUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRVFfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc9PScsICdFUV9FUScsIEVRVUFMSVRZX1BSRUNFREVOQ0UsIEVRX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIC8vLyBUaGUgYD09PWAgb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgRGFydCBsYW5ndWFnZQogIC8vLyBidXQgaXMgcGFyc2VkIGFzIHN1Y2ggYnkgdGhlIHNjYW5uZXIgdG8gc3VwcG9ydCBiZXR0ZXIgcmVjb3ZlcnkKICAvLy8gd2hlbiBhIEphdmFTY3JpcHQgY29kZSBzbmlwcGV0IGlzIHBhc3RlZCBpbnRvIGEgRGFydCBmaWxlLgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRVFfRVFfRVEgPQogICAgICBjb25zdCBUb2tlblR5cGUoJz09PScsICdFUV9FUV9FUScsIEVRVUFMSVRZX1BSRUNFREVOQ0UsIEVRX0VRX0VRX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBGVU5DVElPTiA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnPT4nLCAnRlVOQ1RJT04nLCBOT19QUkVDRURFTkNFLCBGVU5DVElPTl9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgR1QgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc+JywgJ0dUJywgUkVMQVRJT05BTF9QUkVDRURFTkNFLCBHVF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEdUX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPj0nLCAnR1RfRVEnLCBSRUxBVElPTkFMX1BSRUNFREVOQ0UsIEdUX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgR1RfR1QgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc+PicsICdHVF9HVCcsIFNISUZUX1BSRUNFREVOQ0UsIEdUX0dUX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgR1RfR1RfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc+Pj0nLCAnR1RfR1RfRVEnLCBBU1NJR05NRU5UX1BSRUNFREVOQ0UsIEdUX0dUX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBHVF9HVF9HVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJz4+PicsICdHVF9HVF9HVCcsIFNISUZUX1BSRUNFREVOQ0UsIEdUX0dUX0dUX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgR1RfR1RfR1RfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc+Pj49JywgJ0dUX0dUX0dUX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBHVF9HVF9HVF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSEFTSCA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnIycsICdIQVNIJywgTk9fUFJFQ0VERU5DRSwgSEFTSF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSU5ERVggPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdbXScsICdJTkRFWCcsIFNFTEVDVE9SX1BSRUNFREVOQ0UsIElOREVYX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSU5ERVhfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdbXT0nLCAnSU5ERVhfRVEnLCBOT19QUkVDRURFTkNFLCBJTkRFWF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIExUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPCcsICdMVCcsIFJFTEFUSU9OQUxfUFJFQ0VERU5DRSwgTFRfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBMVF9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJzw9JywgJ0xUX0VRJywgUkVMQVRJT05BTF9QUkVDRURFTkNFLCBMVF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIExUX0xUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPDwnLCAnTFRfTFQnLCBTSElGVF9QUkVDRURFTkNFLCBMVF9MVF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIExUX0xUX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPDw9JywgJ0xUX0xUX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBMVF9MVF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgTUlOVVMgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICctJywgJ01JTlVTJywgQURESVRJVkVfUFJFQ0VERU5DRSwgTUlOVVNfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBNSU5VU19FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJy09JywgJ01JTlVTX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBNSU5VU19FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgTUlOVVNfTUlOVVMgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICctLScsICdNSU5VU19NSU5VUycsIFBPU1RGSVhfUFJFQ0VERU5DRSwgTUlOVVNfTUlOVVNfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIE9QRU5fQ1VSTFlfQlJBQ0tFVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ3snLCAnT1BFTl9DVVJMWV9CUkFDS0VUJywgTk9fUFJFQ0VERU5DRSwgT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBPUEVOX1BBUkVOID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCcoJywgJ09QRU5fUEFSRU4nLCBTRUxFQ1RPUl9QUkVDRURFTkNFLCBPUEVOX1BBUkVOX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBPUEVOX1NRVUFSRV9CUkFDS0VUID0gY29uc3QgVG9rZW5UeXBlKCdbJywKICAgICAgJ09QRU5fU1FVQVJFX0JSQUNLRVQnLCBTRUxFQ1RPUl9QUkVDRURFTkNFLCBPUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBQRVJDRU5UID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnJScsICdQRVJDRU5UJywgTVVMVElQTElDQVRJVkVfUFJFQ0VERU5DRSwgUEVSQ0VOVF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFBFUkNFTlRfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICclPScsICdQRVJDRU5UX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBQRVJDRU5UX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBQRVJJT0QgPQogICAgICBjb25zdCBUb2tlblR5cGUoJy4nLCAnUEVSSU9EJywgU0VMRUNUT1JfUFJFQ0VERU5DRSwgUEVSSU9EX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBQRVJJT0RfUEVSSU9EID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnLi4nLCAnUEVSSU9EX1BFUklPRCcsIENBU0NBREVfUFJFQ0VERU5DRSwgUEVSSU9EX1BFUklPRF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUExVUyA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJysnLCAnUExVUycsIEFERElUSVZFX1BSRUNFREVOQ0UsIFBMVVNfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBQTFVTX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnKz0nLCAnUExVU19FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgUExVU19FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUExVU19QTFVTID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnKysnLCAnUExVU19QTFVTJywgUE9TVEZJWF9QUkVDRURFTkNFLCBQTFVTX1BMVVNfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFFVRVNUSU9OID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPycsICdRVUVTVElPTicsIENPTkRJVElPTkFMX1BSRUNFREVOQ0UsIFFVRVNUSU9OX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBRVUVTVElPTl9QRVJJT0QgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc/LicsICdRVUVTVElPTl9QRVJJT0QnLCBTRUxFQ1RPUl9QUkVDRURFTkNFLCBRVUVTVElPTl9QRVJJT0RfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFFVRVNUSU9OX1FVRVNUSU9OID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPz8nLCAnUVVFU1RJT05fUVVFU1RJT04nLCBJRl9OVUxMX1BSRUNFREVOQ0UsIFFVRVNUSU9OX1FVRVNUSU9OX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBRVUVTVElPTl9RVUVTVElPTl9FUSA9IGNvbnN0IFRva2VuVHlwZSgnPz89JywKICAgICAgJ1FVRVNUSU9OX1FVRVNUSU9OX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBRVUVTVElPTl9RVUVTVElPTl9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU0VNSUNPTE9OID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCc7JywgJ1NFTUlDT0xPTicsIE5PX1BSRUNFREVOQ0UsIFNFTUlDT0xPTl9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU0xBU0ggPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcvJywgJ1NMQVNIJywgTVVMVElQTElDQVRJVkVfUFJFQ0VERU5DRSwgU0xBU0hfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBTTEFTSF9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJy89JywgJ1NMQVNIX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBTTEFTSF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU1RBUiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyonLCAnU1RBUicsIE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UsIFNUQVJfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBTVEFSX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnKj0nLCAnU1RBUl9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgU1RBUl9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU1RSSU5HX0lOVEVSUE9MQVRJT05fRVhQUkVTU0lPTiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ1wkeycsCiAgICAgICdTVFJJTkdfSU5URVJQT0xBVElPTl9FWFBSRVNTSU9OJywKICAgICAgTk9fUFJFQ0VERU5DRSwKICAgICAgU1RSSU5HX0lOVEVSUE9MQVRJT05fVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNUUklOR19JTlRFUlBPTEFUSU9OX0lERU5USUZJRVIgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdcJCcsCiAgICAgICdTVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSJywKICAgICAgTk9fUFJFQ0VERU5DRSwKICAgICAgU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUl9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgVElMREUgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd+JywgJ1RJTERFJywgUFJFRklYX1BSRUNFREVOQ0UsIFRJTERFX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgVElMREVfU0xBU0ggPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd+LycsICdUSUxERV9TTEFTSCcsIE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UsIFRJTERFX1NMQVNIX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgVElMREVfU0xBU0hfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd+Lz0nLCAnVElMREVfU0xBU0hfRVEnLCBBU1NJR05NRU5UX1BSRUNFREVOQ0UsIFRJTERFX1NMQVNIX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQUNLUElORyA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnYCcsICdCQUNLUElORycsIE5PX1BSRUNFREVOQ0UsIEJBQ0tQSU5HX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQUNLU0xBU0ggPQogICAgICBjb25zdCBUb2tlblR5cGUoJ1xcJywgJ0JBQ0tTTEFTSCcsIE5PX1BSRUNFREVOQ0UsIEJBQ0tTTEFTSF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUEVSSU9EX1BFUklPRF9QRVJJT0QgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcuLi4nLCAnUEVSSU9EX1BFUklPRF9QRVJJT0QnLCBOT19QUkVDRURFTkNFLCBQRVJJT0RfUEVSSU9EX1BFUklPRF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT04gPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcuLi4/JywKICAgICAgJ1BFUklPRF9QRVJJT0RfUEVSSU9EX1FVRVNUSU9OJywKICAgICAgTk9fUFJFQ0VERU5DRSwKICAgICAgUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT05fVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFFVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPy5bJywKICAgICAgJ1FVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUJywKICAgICAgU0VMRUNUT1JfUFJFQ0VERU5DRSwKICAgICAgUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFTID0gS2V5d29yZC5BUzsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBJUyA9IEtleXdvcmQuSVM7CgogIC8qKgogICAqIFRva2VuIHR5cGUgdXNlZCBieSBlcnJvciB0b2tlbnMuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQURfSU5QVVQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdtYWxmb3JtZWQgaW5wdXQnLCAnQkFEX0lOUFVUJywgTk9fUFJFQ0VERU5DRSwgQkFEX0lOUFVUX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIC8qKgogICAqIFRva2VuIHR5cGUgdXNlZCBieSBzeW50aGV0aWMgdG9rZW5zIHRoYXQgYXJlIGNyZWF0ZWQgZHVyaW5nIHBhcnNlcgogICAqIHJlY292ZXJ5IChub24tYW5hbHl6ZXIgdXNlIGNhc2UpLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUkVDT1ZFUlkgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdyZWNvdmVyeScsICdSRUNPVkVSWScsIE5PX1BSRUNFREVOQ0UsIFJFQ09WRVJZX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIC8vIFRPRE8oZGFucnViZWwpOiAiYWxsIiBpcyBtaXNsZWFkaW5nCiAgLy8gYmVjYXVzZSB0aGlzIGxpc3QgZG9lcyBub3QgaW5jbHVkZSBhbGwgVG9rZW5UeXBlIGluc3RhbmNlcy4KICBzdGF0aWMgY29uc3QgTGlzdDxUb2tlblR5cGU+IGFsbCA9IGNvbnN0IDxUb2tlblR5cGU+WwogICAgVG9rZW5UeXBlLkVPRiwKICAgIFRva2VuVHlwZS5ET1VCTEUsCiAgICBUb2tlblR5cGUuSEVYQURFQ0lNQUwsCiAgICBUb2tlblR5cGUuSURFTlRJRklFUiwKICAgIFRva2VuVHlwZS5JTlQsCiAgICBUb2tlblR5cGUuTVVMVElfTElORV9DT01NRU5ULAogICAgVG9rZW5UeXBlLlNDUklQVF9UQUcsCiAgICBUb2tlblR5cGUuU0lOR0xFX0xJTkVfQ09NTUVOVCwKICAgIFRva2VuVHlwZS5TVFJJTkcsCiAgICBUb2tlblR5cGUuQU1QRVJTQU5ELAogICAgVG9rZW5UeXBlLkFNUEVSU0FORF9BTVBFUlNBTkQsCiAgICBUb2tlblR5cGUuQU1QRVJTQU5EX0VRLAogICAgVG9rZW5UeXBlLkFULAogICAgVG9rZW5UeXBlLkJBTkcsCiAgICBUb2tlblR5cGUuQkFOR19FUSwKICAgIFRva2VuVHlwZS5CQVIsCiAgICBUb2tlblR5cGUuQkFSX0JBUiwKICAgIFRva2VuVHlwZS5CQVJfRVEsCiAgICBUb2tlblR5cGUuQ09MT04sCiAgICBUb2tlblR5cGUuQ09NTUEsCiAgICBUb2tlblR5cGUuQ0FSRVQsCiAgICBUb2tlblR5cGUuQ0FSRVRfRVEsCiAgICBUb2tlblR5cGUuQ0xPU0VfQ1VSTFlfQlJBQ0tFVCwKICAgIFRva2VuVHlwZS5DTE9TRV9QQVJFTiwKICAgIFRva2VuVHlwZS5DTE9TRV9TUVVBUkVfQlJBQ0tFVCwKICAgIFRva2VuVHlwZS5FUSwKICAgIFRva2VuVHlwZS5FUV9FUSwKICAgIFRva2VuVHlwZS5GVU5DVElPTiwKICAgIFRva2VuVHlwZS5HVCwKICAgIFRva2VuVHlwZS5HVF9FUSwKICAgIFRva2VuVHlwZS5HVF9HVCwKICAgIFRva2VuVHlwZS5HVF9HVF9FUSwKICAgIFRva2VuVHlwZS5IQVNILAogICAgVG9rZW5UeXBlLklOREVYLAogICAgVG9rZW5UeXBlLklOREVYX0VRLAogICAgVG9rZW5UeXBlLkxULAogICAgVG9rZW5UeXBlLkxUX0VRLAogICAgVG9rZW5UeXBlLkxUX0xULAogICAgVG9rZW5UeXBlLkxUX0xUX0VRLAogICAgVG9rZW5UeXBlLk1JTlVTLAogICAgVG9rZW5UeXBlLk1JTlVTX0VRLAogICAgVG9rZW5UeXBlLk1JTlVTX01JTlVTLAogICAgVG9rZW5UeXBlLk9QRU5fQ1VSTFlfQlJBQ0tFVCwKICAgIFRva2VuVHlwZS5PUEVOX1BBUkVOLAogICAgVG9rZW5UeXBlLk9QRU5fU1FVQVJFX0JSQUNLRVQsCiAgICBUb2tlblR5cGUuUEVSQ0VOVCwKICAgIFRva2VuVHlwZS5QRVJDRU5UX0VRLAogICAgVG9rZW5UeXBlLlBFUklPRCwKICAgIFRva2VuVHlwZS5QRVJJT0RfUEVSSU9ELAogICAgVG9rZW5UeXBlLlBMVVMsCiAgICBUb2tlblR5cGUuUExVU19FUSwKICAgIFRva2VuVHlwZS5QTFVTX1BMVVMsCiAgICBUb2tlblR5cGUuUVVFU1RJT04sCiAgICBUb2tlblR5cGUuUVVFU1RJT05fUEVSSU9ELAogICAgVG9rZW5UeXBlLlFVRVNUSU9OX1FVRVNUSU9OLAogICAgVG9rZW5UeXBlLlFVRVNUSU9OX1FVRVNUSU9OX0VRLAogICAgVG9rZW5UeXBlLlNFTUlDT0xPTiwKICAgIFRva2VuVHlwZS5TTEFTSCwKICAgIFRva2VuVHlwZS5TTEFTSF9FUSwKICAgIFRva2VuVHlwZS5TVEFSLAogICAgVG9rZW5UeXBlLlNUQVJfRVEsCiAgICBUb2tlblR5cGUuU1RSSU5HX0lOVEVSUE9MQVRJT05fRVhQUkVTU0lPTiwKICAgIFRva2VuVHlwZS5TVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSLAogICAgVG9rZW5UeXBlLlRJTERFLAogICAgVG9rZW5UeXBlLlRJTERFX1NMQVNILAogICAgVG9rZW5UeXBlLlRJTERFX1NMQVNIX0VRLAogICAgVG9rZW5UeXBlLkJBQ0tQSU5HLAogICAgVG9rZW5UeXBlLkJBQ0tTTEFTSCwKICAgIFRva2VuVHlwZS5QRVJJT0RfUEVSSU9EX1BFUklPRCwKICAgIFRva2VuVHlwZS5QRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTiwKCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogU2hvdWxkIHRoZXNlIGJlIGFkZGVkIHRvIHRoZSAiYWxsIiBsaXN0PwogICAgLy9Ub2tlblR5cGUuSVMsCiAgICAvL1Rva2VuVHlwZS5BUywKCiAgICAvLyBUaGVzZSBhcmUgbm90IHlldCBwYXJ0IG9mIHRoZSBsYW5ndWFnZSBhbmQgbm90IHN1cHBvcnRlZCBieSBmYXN0YQogICAgLy9Ub2tlblR5cGUuQU1QRVJTQU5EX0FNUEVSU0FORF9FUSwKICAgIC8vVG9rZW5UeXBlLkJBUl9CQVJfRVEsCgogICAgLy8gU3VwcG9ydGVkIGJ5IGZhc3RhIGJ1dCBub3QgcGFydCBvZiB0aGUgbGFuZ3VhZ2UKICAgIC8vVG9rZW5UeXBlLkJBTkdfRVFfRVEsCiAgICAvL1Rva2VuVHlwZS5FUV9FUV9FUSwKCiAgICAvLyBVc2VkIGJ5IHN5bnRoZXRpYyB0b2tlbnMgZ2VuZXJhdGVkIGR1cmluZyByZWNvdmVyeQogICAgLy9Ub2tlblR5cGUuQkFEX0lOUFVULAogICAgLy9Ub2tlblR5cGUuUkVDT1ZFUlksCiAgXTsKCiAgZmluYWwgaW50IGtpbmQ7CgogIC8qKgogICAqIGB0cnVlYCBpZiB0aGlzIHRva2VuIHR5cGUgcmVwcmVzZW50cyBhIG1vZGlmaWVyCiAgICogc3VjaCBhcyBgYWJzdHJhY3RgIG9yIGBjb25zdGAuCiAgICovCiAgZmluYWwgYm9vbCBpc01vZGlmaWVyOwoKICAvKioKICAgKiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiB0eXBlIHJlcHJlc2VudHMgYW4gb3BlcmF0b3IuCiAgICovCiAgZmluYWwgYm9vbCBpc09wZXJhdG9yOwoKICAvKioKICAgKiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiB0eXBlIHJlcHJlc2VudHMgYSBrZXl3b3JkIHN0YXJ0aW5nIGEgdG9wIGxldmVsCiAgICogZGVjbGFyYXRpb24gc3VjaCBhcyBgY2xhc3NgLCBgZW51bWAsIGBpbXBvcnRgLCBldGMuCiAgICovCiAgZmluYWwgYm9vbCBpc1RvcExldmVsS2V5d29yZDsKCiAgLyoqCiAgICogYHRydWVgIGlmIHRoaXMgdG9rZW4gdHlwZSByZXByZXNlbnRzIGFuIG9wZXJhdG9yCiAgICogdGhhdCBjYW4gYmUgZGVmaW5lZCBieSB1c2Vycy4KICAgKi8KICBmaW5hbCBib29sIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOwoKICAvKioKICAgKiBUaGUgbGV4ZW1lIHRoYXQgZGVmaW5lcyB0aGlzIHR5cGUgb2YgdG9rZW4sCiAgICogb3IgYG51bGxgIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcG9zc2libGUgbGV4ZW1lIGZvciB0aGlzIHR5cGUgb2YgdG9rZW4uCiAgICovCiAgZmluYWwgU3RyaW5nIGxleGVtZTsKCiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIHRva2VuIHR5cGUuCiAgICovCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8qKgogICAqIFRoZSBwcmVjZWRlbmNlIG9mIHRoaXMgdHlwZSBvZiB0b2tlbiwKICAgKiBvciBgMGAgaWYgdGhlIHRva2VuIGRvZXMgbm90IHJlcHJlc2VudCBhbiBvcGVyYXRvci4KICAgKi8KICBmaW5hbCBpbnQgcHJlY2VkZW5jZTsKCiAgLyoqCiAgICogU2VlIFtUb2tlbi5zdHJpbmdWYWx1ZV0gZm9yIGFuIGV4cGxhbmF0aW9uLgogICAqLwogIGZpbmFsIFN0cmluZyBzdHJpbmdWYWx1ZTsKCiAgY29uc3QgVG9rZW5UeXBlKHRoaXMubGV4ZW1lLCB0aGlzLm5hbWUsIHRoaXMucHJlY2VkZW5jZSwgdGhpcy5raW5kLAogICAgICB7dGhpcy5pc01vZGlmaWVyOiBmYWxzZSwKICAgICAgdGhpcy5pc09wZXJhdG9yOiBmYWxzZSwKICAgICAgdGhpcy5pc1RvcExldmVsS2V5d29yZDogZmFsc2UsCiAgICAgIHRoaXMuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IGZhbHNlLAogICAgICBTdHJpbmcgc3RyaW5nVmFsdWU6ICd1bnNwZWNpZmllZCd9KQogICAgICA6IHRoaXMuc3RyaW5nVmFsdWUgPSBzdHJpbmdWYWx1ZSA9PSAndW5zcGVjaWZpZWQnID8gbGV4ZW1lIDogc3RyaW5nVmFsdWU7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYW4gYWRkaXRpdmUgb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNBZGRpdGl2ZU9wZXJhdG9yID0+IHByZWNlZGVuY2UgPT0gQURESVRJVkVfUFJFQ0VERU5DRTsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gcmVwcmVzZW50cyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzQXNzaWdubWVudE9wZXJhdG9yID0+IHByZWNlZGVuY2UgPT0gQVNTSUdOTUVOVF9QUkVDRURFTkNFOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGFuIGFzc29jaWF0aXZlIG9wZXJhdG9yLiBBbgogICAqIGFzc29jaWF0aXZlIG9wZXJhdG9yIGlzIGFuIG9wZXJhdG9yIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGVxdWFsaXR5IGlzCiAgICogdHJ1ZTogYChhICogYikgKiBjID09IGEgKiAoYiAqIGMpYC4gSW4gb3RoZXIgd29yZHMsIGlmIHRoZSByZXN1bHQgb2YKICAgKiBhcHBseWluZyB0aGUgb3BlcmF0b3IgdG8gbXVsdGlwbGUgb3BlcmFuZHMgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBvcmRlciBpbgogICAqIHdoaWNoIHRob3NlIGFwcGxpY2F0aW9ucyBvY2N1ci4KICAgKgogICAqIE5vdGU6IFRoaXMgbWV0aG9kIGNvbnNpZGVycyB0aGUgbG9naWNhbC1hbmQgYW5kIGxvZ2ljYWwtb3Igb3BlcmF0b3JzIHRvIGJlCiAgICogYXNzb2NpYXRpdmUsIGV2ZW4gdGhvdWdoIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgYXBwbGljYXRpb24gb2YgdGhvc2UKICAgKiBvcGVyYXRvcnMgY2FuIGhhdmUgYW4gZWZmZWN0IGJlY2F1c2UgZXZhbHVhdGlvbiBvZiB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kCiAgICogaXMgY29uZGl0aW9uYWwuCiAgICovCiAgYm9vbCBnZXQgaXNBc3NvY2lhdGl2ZU9wZXJhdG9yID0+CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkFNUEVSU0FORCB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5BTVBFUlNBTkRfQU1QRVJTQU5EIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkJBUiB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5CQVJfQkFSIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkNBUkVUIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLlBMVVMgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuU1RBUjsKCiAgLyoqCiAgICogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUga2V5d29yZCBpcyBhICJidWlsdC1pbiIgaWRlbnRpZmllci4KICAgKi8KICBib29sIGdldCBpc0J1aWx0SW4gPT4gZmFsc2U7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYW4gZXF1YWxpdHkgb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNFcXVhbGl0eU9wZXJhdG9yID0+CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkJBTkdfRVEgfHwgdGhpcyA9PSBUb2tlblR5cGUuRVFfRVE7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYW4gaW5jcmVtZW50IG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzSW5jcmVtZW50T3BlcmF0b3IgPT4KICAgICAgdGhpcyA9PSBUb2tlblR5cGUuUExVU19QTFVTIHx8IHRoaXMgPT0gVG9rZW5UeXBlLk1JTlVTX01JTlVTOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiBpcyBhIGtleXdvcmQuCiAgICovCiAgYm9vbCBnZXQgaXNLZXl3b3JkID0+IGtpbmQgPT0gS0VZV09SRF9UT0tFTjsKCiAgLyoqCiAgICogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUga2V5d29yZCBjYW4gYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyCiAgICogaW4gc29tZSBzaXR1YXRpb25zLgogICAqLwogIGJvb2wgZ2V0IGlzUHNldWRvID0+IGZhbHNlOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGEgbXVsdGlwbGljYXRpdmUgb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNNdWx0aXBsaWNhdGl2ZU9wZXJhdG9yID0+IHByZWNlZGVuY2UgPT0gTVVMVElQTElDQVRJVkVfUFJFQ0VERU5DRTsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gcmVwcmVzZW50cyBhIHJlbGF0aW9uYWwgb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNSZWxhdGlvbmFsT3BlcmF0b3IgPT4KICAgICAgdGhpcyA9PSBUb2tlblR5cGUuTFQgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuTFRfRVEgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuR1QgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuR1RfRVE7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYSBzaGlmdCBvcGVyYXRvci4KICAgKi8KICBib29sIGdldCBpc1NoaWZ0T3BlcmF0b3IgPT4gcHJlY2VkZW5jZSA9PSBTSElGVF9QUkVDRURFTkNFOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGEgdW5hcnkgcG9zdGZpeCBvcGVyYXRvci4KICAg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ZSBMSUNFTlNFIGZpbGUuCgovLyBUT0RPKGFoZSk6IE9yaWdpbmFsbHkgY29waWVkIGZyb20gc2RrL3BrZy9jb21waWxlci9saWIvc3JjL2NvbG9ycy5kYXJ0LAovLyBtZXJnZSB0aGVzZSB0d28gcGFja2FnZXMuCmxpYnJhcnkgY29sb3JzOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cganNvbkVuY29kZTsKCmltcG9ydCAnZGFydDppbycgc2hvdyBQbGF0Zm9ybSwgUHJvY2VzcywgUHJvY2Vzc1Jlc3VsdCwgc3RkZXJyLCBzdGRvdXQ7CgppbXBvcnQgJ2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIGRlZmF1bHQgY29sb3JzLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBvcGAuCmNvbnN0IFN0cmluZyBERUZBVUxUX0NPTE9SID0gIlx4MWJbMzk7NDltIjsKCi8vLyBBTlNJL3h0ZXJtIHRlcm1jYXAgZm9yIHNldHRpbmcgYmxhY2sgdGV4dCBjb2xvci4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgc2V0YWYgMGAuCmNvbnN0IFN0cmluZyBCTEFDS19DT0xPUiA9ICJceDFiWzMwbSI7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIHJlZCB0ZXh0IGNvbG9yLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBzZXRhZiAxYC4KY29uc3QgU3RyaW5nIFJFRF9DT0xPUiA9ICJceDFiWzMxbSI7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIGdyZWVuIHRleHQgY29sb3IuIE91dHB1dCBmcm9tIFVuaXgKLy8vIGNvbW1hbmQtbGluZSBwcm9ncmFtIGB0cHV0IHNldGFmIDJgLgpjb25zdCBTdHJpbmcgR1JFRU5fQ09MT1IgPSAiXHgxYlszMm0iOwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyB5ZWxsb3cgdGV4dCBjb2xvci4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgc2V0YWYgM2AuCmNvbnN0IFN0cmluZyBZRUxMT1dfQ09MT1IgPSAiXHgxYlszM20iOwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyBibHVlIHRleHQgY29sb3IuIE91dHB1dCBmcm9tIFVuaXgKLy8vIGNvbW1hbmQtbGluZSBwcm9ncmFtIGB0cHV0IHNldGFmIDRgLgpjb25zdCBTdHJpbmcgQkxVRV9DT0xPUiA9ICJceDFiWzM0bSI7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIG1hZ2VudGEgdGV4dCBjb2xvci4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgc2V0YWYgNWAuCmNvbnN0IFN0cmluZyBNQUdFTlRBX0NPTE9SID0gIlx4MWJbMzVtIjsKCi8vLyBBTlNJL3h0ZXJtIHRlcm1jYXAgZm9yIHNldHRpbmcgY3lhbiB0ZXh0IGNvbG9yLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBzZXRhZiA2YC4KY29uc3QgU3RyaW5nIENZQU5fQ09MT1IgPSAiXHgxYlszNm0iOwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyB3aGl0ZSB0ZXh0IGNvbG9yLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBzZXRhZiA3YC4KY29uc3QgU3RyaW5nIFdISVRFX0NPTE9SID0gIlx4MWJbMzdtIjsKCi8vLyBBbGwgdGhlIGFib3ZlIGNvZGVzLiBUaGlzIGlzIHVzZWQgdG8gY29tcGFyZSB0aGUgYWJvdmUgY29kZXMgdG8gdGhlCi8vLyB0ZXJtaW5hbCdzLiBQcmludGluZyB0aGlzIHN0cmluZyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMganVzdAovLy8gcHJpbnRpbmcgW0RFRkFVTFRfQ09MT1JdLgpjb25zdCBTdHJpbmcgQUxMX0NPREVTID0gQkxBQ0tfQ09MT1IgKwogICAgUkVEX0NPTE9SICsKICAgIEdSRUVOX0NPTE9SICsKICAgIFlFTExPV19DT0xPUiArCiAgICBCTFVFX0NPTE9SICsKICAgIE1BR0VOVEFfQ09MT1IgKwogICAgQ1lBTl9DT0xPUiArCiAgICBXSElURV9DT0xPUiArCiAgICBERUZBVUxUX0NPTE9SOwoKY29uc3QgU3RyaW5nIFRFUk1JTkFMX0NBUEFCSUxJVElFUyA9ICIiIgpjb2xvcnMKc2V0YWYgMApzZXRhZiAxCnNldGFmIDIKc2V0YWYgMwpzZXRhZiA0CnNldGFmIDUKc2V0YWYgNgpzZXRhZiA3Cm9wCiIiIjsKClN0cmluZyB3cmFwKFN0cmluZyBzdHJpbmcsIFN0cmluZyBjb2xvcikgewogIHJldHVybiBDb21waWxlckNvbnRleHQuZW5hYmxlQ29sb3JzCiAgICAgID8gIiR7Y29sb3J9JHN0cmluZyR7REVGQVVMVF9DT0xPUn0iCiAgICAgIDogc3RyaW5nOwp9CgpTdHJpbmcgYmxhY2soU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIEJMQUNLX0NPTE9SKTsKU3RyaW5nIHJlZChTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgUkVEX0NPTE9SKTsKU3RyaW5nIGdyZWVuKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBHUkVFTl9DT0xPUik7ClN0cmluZyB5ZWxsb3coU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIFlFTExPV19DT0xPUik7ClN0cmluZyBibHVlKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBCTFVFX0NPTE9SKTsKU3RyaW5nIG1hZ2VudGEoU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIE1BR0VOVEFfQ09MT1IpOwpTdHJpbmcgY3lhbihTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgQ1lBTl9DT0xPUik7ClN0cmluZyB3aGl0ZShTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgV0hJVEVfQ09MT1IpOwoKLy8vIFJldHVybnMgd2hldGhlciBbc2lua10gc3VwcG9ydHMgQU5TSSBlc2NhcGVzIG9yIGBudWxsYCBpZiBpdCBjb3VsZCBub3QgYmUKLy8vIGRldGVybWluZWQuCmJvb2wgX3N1cHBvcnRzQW5zaUVzY2FwZXMoc2luaykgewogIHRyeSB7CiAgICAvLyBpZ25vcmU6IHVuZGVmaW5lZF9nZXR0ZXIKICAgIHJldHVybiBzaW5rLnN1cHBvcnRzQW5zaUVzY2FwZXM7CiAgfSBvbiBOb1N1Y2hNZXRob2RFcnJvciB7CiAgICAvLyBJZ25vcmVkOiBXZSdyZSBydW5uaW5nIG9uIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIERhcnQgVk0gd2hpY2ggZG9lc24ndAogICAgLy8gaW1wbGVtZW50IGBzdXBwb3J0c0Fuc2lFc2NhcGVzYC4KICAgIHJldHVybiBudWxsOwogIH0KfQoKLy8vIFRydWUgaWYgd2Ugc2hvdWxkIGVuYWJsZSBjb2xvcnMgaW4gb3V0cHV0LgovLy8KLy8vIFdlIGVuYWJsZSBjb2xvcnMgd2hlbiBib3RoIGBzdGRvdXRgIGFuZCBgc3RkZXJyYCBzdXBwb3J0IEFOU0kgZXNjYXBlcy4KLy8vCi8vLyBPbiBub24tV2luZG93cyBwbGF0Zm9ybXMsIHRoaXMgZnVuY3Rpb25zIGNoZWNrcyB0aGUgdGVybWluYWwgY2FwYWJpbGl0aWVzLAovLy8gb24gV2luZG93cyB3ZSBvbmx5IGVuYWJsZSBjb2xvcnMgaWYgdGhlIFZNIGdldHRlcnMgYXJlIHByZXNlbnQgYW5kIHJldHVybmVkCi8vLyBgdHJ1ZWAuCi8vLwovLy8gTm90ZTogZG8gbm90IGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHksIGFzIGl0IGlzIGV4cGVuc2l2ZSB0bwovLy8gY29tcHV0ZS4gSW5zdGVhZCwgdXNlIFtDb21waWxlckNvbnRleHQuZW5hYmxlQ29sb3JzXS4KYm9vbCBjb21wdXRlRW5hYmxlQ29sb3JzKENvbXBpbGVyQ29udGV4dCBjb250ZXh0KSB7CiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBtZXRob2QuCgogIGJvb2wgc3RkZXJyU3VwcG9ydHNDb2xvcnMgPSBfc3VwcG9ydHNBbnNpRXNjYXBlcyhzdGRvdXQpOwogIGJvb2wgc3Rkb3V0U3VwcG9ydHNDb2xvcnMgPSBfc3VwcG9ydHNBbnNpRXNjYXBlcyhzdGRlcnIpOwoKICBpZiAoc3Rkb3V0U3VwcG9ydHNDb2xvcnMgPT0gZmFsc2UpIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgc3Rkb3V0IGRvZXMgbm90IHN1cHBvcnQgQU5TSSBjb2xvcnMuIik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmIChzdGRlcnJTdXBwb3J0c0NvbG9ycyA9PSBmYWxzZSkgewogICAgaWYgKGNvbnRleHQub3B0aW9ucy52ZXJib3NlKSB7CiAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzLCBzdGRlcnIgZG9lcyBub3Qgc3VwcG9ydCBBTlNJIGNvbG9ycy4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgIGlmIChzdGRlcnJTdXBwb3J0c0NvbG9ycyAhPSB0cnVlIHx8IHN0ZG91dFN1cHBvcnRzQ29sb3JzICE9IHRydWUpIHsKICAgICAgLy8gSW4gdGhpcyBjYXNlLCBlaXRoZXIgW3N0ZG91dF0gb3IgW3N0ZGVycl0gZGlkIG5vdCBzdXBwb3J0IHRoZQogICAgICAvLyBwcm9wZXJ0eSBgc3VwcG9ydHNBbnNpRXNjYXBlc2AuIFNpbmNlIHdlIGRvIG5vdCBoYXZlIGFub3RoZXIgd2F5CiAgICAgIC8vIHRvIGRldGVybWluZSBzdXBwb3J0IGZvciBjb2xvcnMsIHdlIGRpc2FibGUgdGhlbS4KICAgICAgaWYgKGNvbnRleHQub3B0aW9ucy52ZXJib3NlKSB7CiAgICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMgYXMgQU5TSSBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiRW5hYmxpbmcgY29sb3JzIGFzIE9TIGlzIFdpbmRvd3MuIik7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIFdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRlcm1pbmFsIGFjdHVhbGx5IHN1cHBvcnRzIGNvbG9ycy4gQ3VycmVudGx5LAogIC8vIHRvIGF2b2lkIGxpbmtpbmcgdGhlIERhcnQgVk0gd2l0aCBuY3Vyc2VzLCBBTlNJIGVzY2FwZSBzdXBwb3J0IGlzIHJlZHVjZWQKICAvLyB0byBgUGxhdGZvcm0uZW52aXJvbm1lbnRbJ1RFUk0nXS5jb250YWlucygieHRlcm0iKWAuCgogIC8vIFRoZSBgLVNgIG9wdGlvbiBvZiBgdHB1dGAgYWxsb3dzIHVzIHRvIHF1ZXJ5IG11bHRpcGxlIGNhcGFiaWxpdGllcyBhdAogIC8vIG9uY2UuCiAgUHJvY2Vzc1Jlc3VsdCByZXN1bHQgPSBQcm9jZXNzLnJ1blN5bmMoCiAgICAgICIvYmluL3NoIiwgWyItYyIsICJwcmludGYgJyVzJyAnJFRFUk1JTkFMX0NBUEFCSUxJVElFUycgfCB0cHV0IC1TIl0pOwoKICBpZiAocmVzdWx0LmV4aXRDb2RlICE9IDApIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgcnVubmluZyB0cHV0IGZhaWxlZC4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIExpc3Q8U3RyaW5nPiBsaW5lcyA9IHJlc3VsdC5zdGRvdXQuc3BsaXQoIlxuIik7CgogIGlmIChsaW5lcy5sZW5ndGggIT0gMikgewogICAgaWYgKGNvbnRleHQub3B0aW9ucy52ZXJib3NlKSB7CiAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzLCB1bmV4cGVjdGVkIG91dHB1dCBmcm9tIHRwdXQ6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUocmVzdWx0LnN0ZG91dCl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgU3RyaW5nIG51bWJlck9mQ29sb3JzID0gbGluZXNbMF07CiAgaWYgKChpbnQudHJ5UGFyc2UobnVtYmVyT2ZDb2xvcnMpID8/IC0xKSA8IDgpIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgbGVzcyB0aGFuIDggY29sb3JzIHN1cHBvcnRlZDogIgogICAgICAgICAgIiR7anNvbkVuY29kZShudW1iZXJPZkNvbG9ycyl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgU3RyaW5nIGFsbENvZGVzID0gbGluZXNbMV0udHJpbSgpOwogIGlmIChBTExfQ09ERVMgIT0gYWxsQ29kZXMpIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgY29sb3IgY29kZXMgZG9uJ3QgbWF0Y2g6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUoQUxMX0NPREVTKX0gIT0gJHtqc29uRW5jb2RlKGFsbENvZGVzKX0uIik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoY29udGV4dC5vcHRpb25zLnZlcmJvc2UpIHsKICAgIHByaW50KCJFbmFibGluZyBjb2xvcnMuIik7CiAgfQogIHJldHVybiB0cnVlOwp9CoDIAE5OPAFLHRABJwFIATUBRCQsAUYpJwFEKSUBRiknAUcpKAFFKSYBSCkpAUUpJgFGKScBSEkeJxASExEUERITASkHCAgICAgICAgDBQErJioQAgE6Njo8OD44OgFOECIIICUbTygRBAIBLwRLBE9QDARCOjQkATw8AScjSgYSBCcjSgYSBAEcSEdKOyVACBQGIzIGEQQBS086AUsLKkwBHiM6BhIEATIBGyNBLAYSBAEkMiNCLQYSBAElHyM9QwYSBAEhHwQPAgEncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbG9ycy5kYXJ0PXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdHlwZV9sYWJlbGVyLmRhcnSvky8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBqc29uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBCb29sQ29uc3RhbnQsCiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBDbGFzcywKICAgICAgICBDb25zdGFudCwKICAgICAgICBDb25zdGFudE1hcEVudHJ5LAogICAgICAgIERhcnRUeXBlLAogICAgICAgIERvdWJsZUNvbnN0YW50LAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBJbnN0YW5jZUNvbnN0YW50LAogICAgICAgIEludENvbnN0YW50LAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaXN0Q29uc3RhbnQsCiAgICAgICAgTWFwQ29uc3RhbnQsCiAgICAgICAgTnVsbENvbnN0YW50LAogICAgICAgIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFNldENvbnN0YW50LAogICAgICAgIFN0cmluZ0NvbnN0YW50LAogICAgICAgIFN5bWJvbENvbnN0YW50LAogICAgICAgIFRlYXJPZmZDb25zdGFudCwKICAgICAgICBUcmVlTm9kZSwKICAgICAgICBUeXBlZGVmVHlwZSwKICAgICAgICBUeXBlTGl0ZXJhbENvbnN0YW50LAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVW5ldmFsdWF0ZWRDb25zdGFudCwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdmlzaXRvci5kYXJ0JyBzaG93IENvbnN0YW50VmlzaXRvciwgRGFydFR5cGVWaXNpdG9yOwoKaW1wb3J0ICcuLi9ibGFja2xpc3RlZF9jbGFzc2VzLmRhcnQnIHNob3cgYmxhY2tsaXN0ZWRDb3JlQ2xhc3NlczsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cgTWVzc2FnZSwgdGVtcGxhdGVUeXBlT3JpZ2luLCB0ZW1wbGF0ZVR5cGVPcmlnaW5XaXRoRmlsZVVyaTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bnN1cHBvcnRlZDsKCi8vLyBBIHByZXR0eS1wcmludGVyIGZvciBLZXJuZWwgdHlwZXMgYW5kIGNvbnN0YW50cyB3aXRoIHRoZSBhYmlsaXR5IHRvIGxhYmVsCi8vLyByYXcgdHlwZXMgd2l0aCBudW1lcmljIG1hcmtlcnMgaW4gRGFydCBjb21tZW50cyAoZS5nLiBgLyoxKi9gKSB0bwovLy8gZGlzdGluZ3Vpc2ggZGlmZmVyZW50IHR5cGVzIHdpdGggdGhlIHNhbWUgbmFtZS4gVGhpcyBpcyB1c2VkIGluIGRpYWdub3N0aWMKLy8vIG1lc3NhZ2VzIHRvIGluZGljYXRlIHRoZSBvcmlnaW5zIG9mIHR5cGVzIG9jY3VycmluZyBpbiB0aGUgbWVzc2FnZS4KY2xhc3MgVHlwZUxhYmVsZXIgaW1wbGVtZW50cyBEYXJ0VHlwZVZpc2l0b3I8dm9pZD4sIENvbnN0YW50VmlzaXRvcjx2b2lkPiB7CiAgTGlzdDxMYWJlbGVkTm9kZT4gbmFtZXMgPSA8TGFiZWxlZE5vZGU+W107CiAgTWFwPFN0cmluZywgTGlzdDxMYWJlbGVkTm9kZT4+IG5hbWVNYXAgPSA8U3RyaW5nLCBMaXN0PExhYmVsZWROb2RlPj57fTsKCiAgTGlzdDxPYmplY3Q+IHJlc3VsdDsKCiAgLy8vIFByZXR0eS1wcmludCBhIHR5cGUuCiAgLy8vIFdoZW4gYWxsIHR5cGVzIGFuZCBjb25zdGFudHMgYXBwZWFyaW5nIGluIHRoZSBzYW1lIG1lc3NhZ2UgaGF2ZSBiZWVuCiAgLy8vIHByZXR0eS1wcmludGVkLCB0aGUgcmV0dXJuZWQgbGlzdCBjYW4gYmUgY29udmVydGVkIHRvIGl0cyBzdHJpbmcKICAvLy8gcmVwcmVzZW50YXRpb24gKHdpdGggbGFiZWxzIG9uIGR1cGxpY2F0ZWQgbmFtZXMpIGJ5IHRoZSBgam9pbigpYCBtZXRob2QuCiAgTGlzdDxPYmplY3Q+IGxhYmVsVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICAvLyBUT0RPKGFza2VzYyk6IFJlbW92ZSBudWxsIGNoZWNrIHdoZW4gd2UgYXJlIGNvbXBsZXRlbHkgbnVsbCBjbGVhbiBoZXJlLgogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIFsibnVsbC10eXBlIl07CiAgICByZXN1bHQgPSBbXTsKICAgIHR5cGUuYWNjZXB0KHRoaXMpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBQcmV0dHktcHJpbnQgYSBjb25zdGFudC4KICAvLy8gV2hlbiBhbGwgdHlwZXMgYW5kIGNvbnN0YW50cyBhcHBlYXJpbmcgaW4gdGhlIHNhbWUgbWVzc2FnZSBoYXZlIGJlZW4KICAvLy8gcHJldHR5LXByaW50ZWQsIHRoZSByZXR1cm5lZCBsaXN0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gaXRzIHN0cmluZwogIC8vLyByZXByZXNlbnRhdGlvbiAod2l0aCBsYWJlbHMgb24gZHVwbGljYXRlZCBuYW1lcykgYnkgdGhlIGBqb2luKClgIG1ldGhvZC4KICBMaXN0PE9iamVjdD4gbGFiZWxDb25zdGFudChDb25zdGFudCBjb25zdGFudCkgewogICAgLy8gVE9ETyhhc2tlc2MpOiBSZW1vdmUgbnVsbCBjaGVjayB3aGVuIHdlIGFyZSBjb21wbGV0ZWx5IG51bGwgY2xlYW4gaGVyZS4KICAgIGlmIChjb25zdGFudCA9PSBudWxsKSByZXR1cm4gWyJudWxsLWNvbnN0YW50Il07CiAgICByZXN1bHQgPSBbXTsKICAgIGNvbnN0YW50LmFjY2VwdCh0aGlzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gR2V0IGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgb3JpZ2lucyBvZiB0aGUgcmF3IHR5cGVzIGFwcGVhcmluZyBpbgogIC8vLyB0eXBlcyBhbmQgY29uc3RhbnRzIHRoYXQgaGF2ZSBiZWVuIHByZXR0eS1wcmludGVkIHVzaW5nIHRoaXMgbGFiZWxlci4KICBTdHJpbmcgZ2V0IG9yaWdpbk1lc3NhZ2VzIHsKICAgIFN0cmluZ0J1ZmZlciBtZXNzYWdlcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoTGFiZWxlZE5vZGUgbmFtZSBpbiBuYW1lcykgewogICAgICBtZXNzYWdlcy53cml0ZShuYW1lLm9yaWdpbk1lc3NhZ2UpOwogICAgfQogICAgcmV0dXJuIG1lc3NhZ2VzLnRvU3RyaW5nKCk7CiAgfQoKICAvLyBXZSBkb24ndCBoYXZlIGFjY2VzcyB0byBjb3JlVHlwZXMgaGVyZSwgc28gd2UgaGF2ZSBvdXIgb3duIE9iamVjdCBjaGVjay4KICBzdGF0aWMgYm9vbCBpc09iamVjdChEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUuY2xhc3NOb2RlLm5hbWUgPT0gJ09iamVjdCcpIHsKICAgICAgVXJpIGltcG9ydFVyaSA9IHR5cGUuY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpOwogICAgICByZXR1cm4gaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcgJiYgaW1wb3J0VXJpLnBhdGggPT0gJ2NvcmUnOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgTGFiZWxlZE5vZGUgbmFtZUZvckVudGl0eSgKICAgICAgVHJlZU5vZGUgbm9kZSwgU3RyaW5nIG5vZGVOYW1lLCBVcmkgaW1wb3J0VXJpLCBVcmkgZmlsZVVyaSkgewogICAgTGlzdDxMYWJlbGVkTm9kZT4gbGFiZWxzRm9yTmFtZSA9IG5hbWVNYXBbbm9kZU5hbWVdOwogICAgaWYgKGxhYmVsc0Zvck5hbWUgPT0gbnVsbCkgewogICAgICAvLyBGaXJzdCBlbmNvdW50ZXJlZCBlbnRpdHkgd2l0aCB0aGlzIG5hbWUKICAgICAgTGFiZWxlZE5vZGUgbmFtZSA9CiAgICAgICAgICBuZXcgTGFiZWxlZE5vZGUobm9kZSwgbm9kZU5hbWUsIGltcG9ydFVyaSwgZmlsZVVyaSwgdGhpcyk7CiAgICAgIG5hbWVzLmFkZChuYW1lKTsKICAgICAgbmFtZU1hcFtub2RlTmFtZV0gPSBbbmFtZV07CiAgICAgIHJldHVybiBuYW1lOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChMYWJlbGVkTm9kZSBlbnRpdHlGb3JOYW1lIGluIGxhYmVsc0Zvck5hbWUpIHsKICAgICAgICBpZiAoZW50aXR5Rm9yTmFtZS5ub2RlID09IG5vZGUpIHsKICAgICAgICAgIC8vIFByZXZpb3VzbHkgZW5jb3VudGVyZWQgZW50aXR5CiAgICAgICAgICByZXR1cm4gZW50aXR5Rm9yTmFtZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gTmV3IGVudGl0eSB3aXRoIG5hbWUgdGhhdCB3YXMgcHJldmlvdXNseSBlbmNvdW50ZXJlZAogICAgICBMYWJlbGVkTm9kZSBuYW1lID0KICAgICAgICAgIG5ldyBMYWJlbGVkTm9kZShub2RlLCBub2RlTmFtZSwgaW1wb3J0VXJpLCBmaWxlVXJpLCB0aGlzKTsKICAgICAgbmFtZXMuYWRkKG5hbWUpOwogICAgICBsYWJlbHNGb3JOYW1lLmFkZChuYW1lKTsKICAgICAgcmV0dXJuIG5hbWU7CiAgICB9CiAgfQoKICB2b2lkIGRlZmF1bHREYXJ0VHlwZShEYXJ0VHlwZSB0eXBlKSB7fQogIHZvaWQgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7fQoKICB2b2lkIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSkgewogICAgLy8gVE9ETyhhc2tlc2MpOiBUaHJvdyBpbnRlcm5hbCBlcnJvciBpZiBJbnZhbGlkVHlwZSBhcHBlYXJzIGluIGRpYWdub3N0aWNzLgogICAgcmVzdWx0LmFkZCgiaW52YWxpZC10eXBlIik7CiAgfQoKICB2b2lkIHZpc2l0Qm90dG9tVHlwZShCb3R0b21UeXBlIG5vZGUpIHsKICAgIC8vIFRPRE8oYXNrZXNjKTogVGhyb3cgaW50ZXJuYWwgZXJyb3IgaWYgQm90dG9tVHlwZSBhcHBlYXJzIGluIGRpYWdub3N0aWNzLgogICAgcmVzdWx0LmFkZCgiYm90dG9tLXR5cGUiKTsKICB9CgogIHZvaWQgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlKSB7CiAgICByZXN1bHQuYWRkKCJkeW5hbWljIik7CiAgfQoKICB2b2lkIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSkgewogICAgcmVzdWx0LmFkZCgidm9pZCIpOwogIH0KCiAgdm9pZCB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIFRyZWVOb2RlIHBhcmVudCA9IG5vZGUucGFyYW1ldGVyOwogICAgd2hpbGUgKHBhcmVudCBpcyEgTGlicmFyeSAmJiBwYXJlbnQgIT0gbnVsbCkgewogICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50OwogICAgfQogICAgLy8gTm90ZSB0aGF0IHRoaXMgY2FuIGJlIG51bGwgaWYsIGZvciBpbnN0YW5jZSwgdGhlIGVycm9uZW91cyBjb2RlIGlzIG5vdAogICAgLy8gYWN0dWFsbHkgaW4gdGhlIHRyZWUgLSB0aGVuIHdlIGRvbid0IGtub3cgd2hlcmUgaXQgY29tZXMgZnJvbSEKICAgIExpYnJhcnkgZW5jbG9zaW5nTGlicmFyeSA9IHBhcmVudDsKCiAgICByZXN1bHQuYWRkKG5hbWVGb3JFbnRpdHkoCiAgICAgICAgbm9kZS5wYXJhbWV0ZXIsCiAgICAgICAgbm9kZS5wYXJhbWV0ZXIubmFtZSwKICAgICAgICBlbmNsb3NpbmdMaWJyYXJ5ID09IG51bGwgPyB1bmtub3duVXJpIDogZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmksCiAgICAgICAgZW5jbG9zaW5nTGlicmFyeSA9PSBudWxsID8gdW5rbm93blVyaSA6IGVuY2xvc2luZ0xpYnJhcnkuZmlsZVVyaSkpOwogIH0KCiAgdm9pZCB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgbm9kZSkgewogICAgbm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKTsKICAgIHJlc3VsdC5hZGQoIiBGdW5jdGlvbiIpOwogICAgaWYgKG5vZGUudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICByZXN1bHQuYWRkKCI8Iik7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgcGFyYW0gaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgICAgcmVzdWx0LmFkZChwYXJhbS5uYW1lKTsKICAgICAgICBpZiAoaXNPYmplY3QocGFyYW0uYm91bmQpICYmIHBhcmFtLmRlZmF1bHRUeXBlIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgICAgICAvLyBCb3VuZCB3YXMgbm90IHNwZWNpZmllZCwgYW5kIHRoZXJlZm9yZSBzaG91bGQgbm90IGJlIHByaW50ZWQuCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdC5hZGQoIiBleHRlbmRzICIpOwogICAgICAgICAgcGFyYW0uYm91bmQuYWNjZXB0KHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXN1bHQuYWRkKCI+Iik7CiAgICB9CiAgICByZXN1bHQuYWRkKCIoIik7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50OyBpKyspIHsKICAgICAgaWYgKCFmaXJzdCkgcmVzdWx0LmFkZCgiLCAiKTsKICAgICAgbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXS5hY2NlcHQodGhpcyk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICBpZiAobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggPiBub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgaWYgKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA+IDApIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgIHJlc3VsdC5hZGQoIlsiKTsKICAgICAgZmlyc3QgPSB0cnVlOwogICAgICBmb3IgKGludCBpID0gbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50OwogICAgICAgICAgaSA8IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOwogICAgICAgICAgaSsrKSB7CiAgICAgICAgaWYgKCFmaXJzdCkgcmVzdWx0LmFkZCgiLCAiKTsKICAgICAgICBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB9CiAgICAgIHJlc3VsdC5hZGQoIl0iKTsKICAgIH0KICAgIGlmIChub2RlLm5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgIHJlc3VsdC5hZGQoInsiKTsKICAgICAgZmlyc3QgPSB0cnVlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKCFmaXJzdCkgcmVzdWx0LmFkZCgiLCAiKTsKICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVyc1tpXS50eXBlLmFjY2VwdCh0aGlzKTsKICAgICAgICByZXN1bHQuYWRkKCIgJHtub2RlLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lfSIpOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgcmVzdWx0LmFkZCgifSIpOwogICAgfQogICAgcmVzdWx0LmFkZCgiKSIpOwogIH0KCiAgdm9pZCB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBDbGFzcyBjbGFzc05vZGUgPSBub2RlLmNsYXNzTm9kZTsKICAgIHJlc3VsdC5hZGQobmFtZUZvckVudGl0eSgKICAgICAgICBjbGFzc05vZGUsCiAgICAgICAgY2xhc3NOb2RlLm5hbWUsCiAgICAgICAgY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpLAogICAgICAgIGNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmZpbGVVcmkpKTsKICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICByZXN1bHQuYWRkKCI8Iik7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBmb3IgKERhcnRUeXBlIHR5cGVBcmcgaW4gbm9kZS50eXBlQXJndW1lbnRzKSB7CiAgICAgICAgaWYgKCFmaXJzdCkgcmVzdWx0LmFkZCgiLCAiKTsKICAgICAgICB0eXBlQXJnLmFjY2VwdCh0aGlzKTsKICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB9CiAgICAgIHJlc3VsdC5hZGQoIj4iKTsKICAgIH0KICB9CgogIHZvaWQgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpIHt9CgogIHZvaWQgdmlzaXROdWxsQ29uc3RhbnQoTnVsbENvbnN0YW50IG5vZGUpIHsKICAgIHJlc3VsdC5hZGQobm9kZSk7CiAgfQoKICB2b2lkIHZpc2l0Qm9vbENvbnN0YW50KEJvb2xDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCB2aXNpdEludENvbnN0YW50KEludENvbnN0YW50IG5vZGUpIHsKICAgIHJlc3VsdC5hZGQobm9kZSk7CiAgfQoKICB2b2lkIHZpc2l0RG91YmxlQ29uc3RhbnQoRG91YmxlQ29uc3RhbnQgbm9kZSkgewogICAgcmVzdWx0LmFkZChub2RlKTsKICB9CgogIHZvaWQgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCB2aXNpdFN0cmluZ0NvbnN0YW50KFN0cmluZ0NvbnN0YW50IG5vZGUpIHsKICAgIHJlc3VsdC5hZGQoanNvbi5lbmNvZGUobm9kZS52YWx1ZSkpOwogIH0KCiAgdm9pZCB2aXNpdEluc3RhbmNlQ29uc3RhbnQoSW5zdGFuY2VDb25zdGFudCBub2RlKSB7CiAgICBuZXcgSW50ZXJmYWNlVHlwZShub2RlLmNsYXNzTm9kZSwgbm9kZS50eXBlQXJndW1lbnRzKS5hY2NlcHQodGhpcyk7CiAgICByZXN1bHQuYWRkKCIgeyIpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKEZpZWxkIGZpZWxkIGluIG5vZGUuY2xhc3NOb2RlLmZpZWxkcykgewogICAgICBpZiAoZmllbGQuaXNTdGF0aWMpIGNvbnRpbnVlOwogICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICByZXN1bHQuYWRkKCIke2ZpZWxkLm5hbWV9OiAiKTsKICAgICAgbm9kZS5maWVsZFZhbHVlc1tmaWVsZC5yZWZlcmVuY2VdLmFjY2VwdCh0aGlzKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICAgIHJlc3VsdC5hZGQoIn0iKTsKICB9CgogIHZvaWQgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpIHsKICAgIHJlc3VsdC5hZGQoIjwiKTsKICAgIG5vZGUudHlwZUFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgIHJlc3VsdC5hZGQoIj5bIik7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGZvciAoQ29uc3RhbnQgY29uc3RhbnQgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgIGNvbnN0YW50LmFjY2VwdCh0aGlzKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICAgIHJlc3VsdC5hZGQoIl0iKTsKICB9CgogIHZvaWQgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKCI8Iik7CiAgICBub2RlLnR5cGVBcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICByZXN1bHQuYWRkKCI+eyIpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKENvbnN0YW50IGNvbnN0YW50IGluIG5vZGUuZW50cmllcykgewogICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICBjb25zdGFudC5hY2NlcHQodGhpcyk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICByZXN1bHQuYWRkKCJ9Iik7CiAgfQoKICB2b2lkIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgewogICAgcmVzdWx0LmFkZCgiPCIpOwogICAgbm9kZS5rZXlUeXBlLmFjY2VwdCh0aGlzKTsKICAgIHJlc3VsdC5hZGQoIiwgIik7CiAgICBub2RlLnZhbHVlVHlwZS5hY2NlcHQodGhpcyk7CiAgICByZXN1bHQuYWRkKCI+eyIpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKENvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgIGVudHJ5LmtleS5hY2NlcHQodGhpcyk7CiAgICAgIHJlc3VsdC5hZGQoIjogIik7CiAgICAgIGVudHJ5LnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICAgIHJlc3VsdC5hZGQoIn0iKTsKICB9CgogIHZvaWQgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoVGVhck9mZkNvbnN0YW50IG5vZGUpIHsKICAgIFByb2NlZHVyZSBwcm9jZWR1cmUgPSBub2RlLnByb2NlZHVyZTsKICAgIENsYXNzIGNsYXNzTm9kZSA9IHByb2NlZHVyZS5lbmNsb3NpbmdDbGFzczsKICAgIGlmIChjbGFzc05vZGUgIT0gbnVsbCkgewogICAgICByZXN1bHQuYWRkKG5hbWVGb3JFbnRpdHkoCiAgICAgICAgICBjbGFzc05vZGUsCiAgICAgICAgICBjbGFzc05vZGUubmFtZSwKICAgICAgICAgIGNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSwKICAgICAgICAgIGNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmZpbGVVcmkpKTsKICAgICAgcmVzdWx0LmFkZCgiLiIpOwogICAgfQogICAgcmVzdWx0LmFkZChwcm9jZWR1cmUubmFtZS5uYW1lKTsKICB9CgogIHZvaWQgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgewogICAgbm9kZS50ZWFyT2ZmQ29uc3RhbnQuYWNjZXB0KHRoaXMpOwogICAgaWYgKG5vZGUudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICByZXN1bHQuYWRkKCI8Iik7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBmb3IgKERhcnRUeXBlIHR5cGVBcmcgaW4gbm9kZS50eXBlcykgewogICAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgICAgdHlwZUFyZy5hY2NlcHQodGhpcyk7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICByZXN1bHQuYWRkKCI+Iik7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpIHsKICAgIG5vZGUudHlwZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChVbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpIHsKICAgIHVuc3VwcG9ydGVkKCdwcmludGluZyB1bmV2YWx1YXRlZCBjb25zdGFudHMnLCAtMSwgbnVsbCk7CiAgfQp9CgpmaW5hbCBVcmkgdW5rbm93blVyaSA9IFVyaS5wYXJzZSgidW5rbm93biIpOwoKY2xhc3MgTGFiZWxlZE5vZGUgewogIGZpbmFsIFRyZWVOb2RlIG5vZGU7CiAgZmluYWwgVHlwZUxhYmVsZXIgdHlwZUxhYmVsZXI7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgVXJpIGltcG9ydFVyaTsKICBmaW5hbCBVcmkgZmlsZVVyaTsKCiAgTGFiZWxlZE5vZGUoCiAgICAgIHRoaXMubm9kZSwgdGhpcy5uYW1lLCB0aGlzLmltcG9ydFVyaSwgdGhpcy5maWxlVXJpLCB0aGlzLnR5cGVMYWJlbGVyKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgTGlzdDxMYWJlbGVkTm9kZT4gZW50aXR5Rm9yTmFtZSA9IHR5cGVMYWJlbGVyLm5hbWVNYXBbbmFtZV07CiAgICBpZiAoZW50aXR5Rm9yTmFtZS5sZW5ndGggPT0gMSkgewogICAgICByZXR1cm4gbmFtZTsKICAgIH0KICAgIHJldHVybiAiJG5hbWUvKiR7ZW50aXR5Rm9yTmFtZS5pbmRleE9mKHRoaXMpICsgMX0qLyI7CiAgfQoKICBTdHJpbmcgZ2V0IG9yaWdpbk1lc3NhZ2UgewogICAgaWYgKGltcG9ydFVyaS5zY2hlbWUgPT0gJ2RhcnQnICYmIGltcG9ydFVyaS5wYXRoID09ICdjb3JlJykgewogICAgICBpZiAobm9kZSBpcyBDbGFzcyAmJiBibGFja2xpc3RlZENvcmVDbGFzc2VzLmNvbnRhaW5zKG5hbWUpKSB7CiAgICAgICAgLy8gQmxhY2tsaXN0ZWQgY29yZSBjbGFzcy4gT25seSBwcmludCBpZiBhbWJpZ3VvdXMuCiAgICAgICAgTGlzdDxMYWJlbGVkTm9kZT4gZW50aXR5Rm9yTmFtZSA9IHR5cGVMYWJlbGVyLm5hbWVNYXBbbmFtZV07CiAgICAgICAgaWYgKGVudGl0eUZvck5hbWUubGVuZ3RoID09IDEpIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChpbXBvcnRVcmkgPT0gdW5rbm93blVyaSB8fCBub2RlIGlzISBDbGFzcykgewogICAgICAvLyBXZSBkb24ndCBrbm93IHdoZXJlIGl0IGNvbWVzIGZyb20gYW5kL29yIGl0J3Mgbm90IGEgY2xhc3MuCiAgICAgIC8vIE9ubHkgcHJpbnQgaWYgYW1iaWd1b3VzLgogICAgICBMaXN0PExhYmVsZWROb2RlPiBlbnRpdHlGb3JOYW1lID0gdHlwZUxhYmVsZXIubmFtZU1hcFtuYW1lXTsKICAgICAgaWYgKGVudGl0eUZvck5hbWUubGVuZ3RoID09IDEpIHsKICAgICAgICByZXR1cm4gIiI7CiAgICAgIH0KICAgIH0KICAgIE1lc3NhZ2UgbWVzc2FnZSA9IChpbXBvcnRVcmkgPT0gZmlsZVVyaSB8fCBpbXBvcnRVcmkuc2NoZW1lID09ICdkYXJ0JykKICAgICAgICA/IHRlbXBsYXRlVHlwZU9yaWdpbi53aXRoQXJndW1lbnRzKHRvU3RyaW5nKCksIGltcG9ydFVyaSkKICAgICAgICA6IHRlbXBsYXRlVHlwZU9yaWdpbldpdGhGaWxlVXJpLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgIHRvU3RyaW5nKCksIGltcG9ydFVyaSwgZmlsZVVyaSk7CiAgICByZXR1cm4gIlxuIC0gIiArIG1lc3NhZ2UubWVzc2FnZTsKICB9Cn0KgZQATk48ASEBIQkWFA8SGhIYFQ8WFRoVFxEWFRYmExUYGBkSFR0XGx0SAUwBQgEdRQEsAU5GT0hMLUoBFwEbS0dPKk8sERcTBAEfS0dPMk80ERsTBAFNTB4wJioGIAQBTihEQUUGEgQBHUQ5ITEZRRciEw05KisgCgg+GUUXHxMGBAEpLQEsUSAEASpQHwQBLBsEASYYBAE4JjMeBk5GJwEeGB1MTAQBLiIdKhcZOSYgSUsRIyQKCBcGFRc8JDEVBko9FxQwMBEmMxcIFwYrQhcUPiYzOBcIFwYVBAEwJh4TGC4uKRcZNSYeFwgXBgQBKQEuFgQBLhYEASwWBAEyFgQBMhYEATIpBAE2SBYXMSQkJTYVBhUEAS4VJBYXLiQdFQYVBAEsFSQWFy4kHRUGFQQBLBUfFiEWFzMkHhggFQYVBAE0KjAdIBUaMDAXBiUEAU4nIRcZLSYeFwgXBgQBPBwEATw9BAIBLQEUFyEVFxUBD00BFkElEwY6BAEdQkQ8RSkVCggGNUQiQycTCAZLQjctJgQCATRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVfbGFiZWxlci5kYXJ0O3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FwaS5kYXJ0hswvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIFRoaXMgbGlicmFyeSBleHBvcnRzIGFsbCBBUEkgZnJvbSBLZXJuZWwgdGhhdCBjYW4gYmUgdXNlZCB0aHJvdWdob3V0IGZhc3RhLgpsaWJyYXJ5IGZhc3RhLmtlcm5lbF9hcGk7CgpleHBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IFN1YnN0aXR1dGlvbiwgc3Vic3RpdHV0ZTsKCmV4cG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgpleHBvcnQgJ3BhY2thZ2U6a2VybmVsL2Nsb25lLmRhcnQnIHNob3cgQ2xvbmVWaXNpdG9yOwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCcgc2hvdyBUcmFuc2Zvcm1lckZsYWc7CgpleHBvcnQgJ3BhY2thZ2U6a2VybmVsL3RleHQvYXN0X3RvX3RleHQuZGFydCcgc2hvdyBOYW1lU3lzdGVtOwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0JyBzaG93IGluc3RhbnRpYXRlVG9Cb3VuZHM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RleHQvYXN0X3RvX3RleHQuZGFydCcgc2hvdyBOYW1lU3lzdGVtLCBQcmludGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBDbGFzcywgTWVtYmVyLCBOb2RlOwoKdm9pZCBwcmludE5vZGVPbihOb2RlIG5vZGUsIFN0cmluZ1Npbmsgc2luaywge05hbWVTeXN0ZW0gc3ludGhldGljTmFtZXN9KSB7CiAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgc2luay53cml0ZSgibnVsbCIpOwogIH0gZWxzZSB7CiAgICBzeW50aGV0aWNOYW1lcyA/Pz0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIG5ldyBQcmludGVyKHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcykud3JpdGVOb2RlKG5vZGUpOwogIH0KfQoKdm9pZCBwcmludFF1YWxpZmllZE5hbWVPbihNZW1iZXIgbWVtYmVyLCBTdHJpbmdTaW5rIHNpbmssCiAgICB7TmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lc30pIHsKICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgIHNpbmsud3JpdGUoIm51bGwiKTsKICB9IGVsc2UgewogICAgc3ludGhldGljTmFtZXMgPz89IG5ldyBOYW1lU3lzdGVtKCk7CiAgICBzaW5rLndyaXRlKG1lbWJlci5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSk7CiAgICBzaW5rLndyaXRlKCI6OiIpOwogICAgQ2xhc3MgY2xzID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGUoY2xzLm5hbWUgPz8gc3ludGhldGljTmFtZXMubmFtZUNsYXNzKGNscykpOwogICAgICBzaW5rLndyaXRlKCI6OiIpOwogICAgfQogICAgc2luay53cml0ZShtZW1iZXIubmFtZT8ubmFtZSA/PyBzeW50aGV0aWNOYW1lcy5uYW1lTWVtYmVyKG1lbWJlcikpOwogIH0KfQo2AE5OPAFQGgFJAUIBNgE4AUkBPwFEAUkBSAE7AUwWGAspRwQCATojGBgLKTMWJxc9GAZIBAIBMnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FwaS5kYXJ0L3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9jcmFzaC5kYXJ0jewvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5jcmFzaDsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBqc29uRW5jb2RlOwoKaW1wb3J0ICdkYXJ0OmlvJwogICAgc2hvdyBDb250ZW50VHlwZSwgSHR0cENsaWVudCwgSHR0cENsaWVudFJlcXVlc3QsIFNvY2tldEV4Y2VwdGlvbiwgc3RkZXJyOwoKaW1wb3J0ICdwcm9ibGVtcy5kYXJ0JyBzaG93IERlYnVnQWJvcnQ7Cgpjb25zdCBTdHJpbmcgZGVmYXVsdFNlcnZlckFkZHJlc3MgPSAiaHR0cDovLzEyNy4wLjAuMTo1OTQxMC8iOwoKLy8vIFRyYWNrcyBpZiB0aGVyZSBoYXMgYmVlbiBhIGNyYXNoIHJlcG9ydGVkIHRocm91Z2ggW3JlcG9ydENyYXNoXS4gU2hvdWxkIGJlCi8vLyByZXNldCBiZXR3ZWVuIGVhY2ggY29tcGlsYXRpb24gYnkgY2FsbGluZyBbcmVzZXRDcmFzaFJlcG9ydGluZ10uCmJvb2wgaGFzQ3Jhc2hlZCA9IGZhbHNlOwoKLy8vIFRyYWNrcyB0aGUgZmlyc3Qgc291cmNlIFVSSSB0aGF0IGhhcyBiZWVuIHJlYWQgYW5kIGlzIHVzZWQgYXMgYSBmYWxsLWJhY2sKLy8vIGZvciBbcmVwb3J0Q3Jhc2hdLiBTaG91bGQgYmUgcmVzZXQgYmV0d2VlbiBlYWNoIGNvbXBpbGF0aW9uIGJ5IGNhbGxpbmcKLy8vIFtyZXNldENyYXNoUmVwb3J0aW5nXS4KVXJpIGZpcnN0U291cmNlVXJpOwoKY2xhc3MgQ3Jhc2ggewogIGZpbmFsIFVyaSB1cmk7CgogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBmaW5hbCBPYmplY3QgZXJyb3I7CgogIGZpbmFsIFN0YWNrVHJhY2UgdHJhY2U7CgogIENyYXNoKHRoaXMudXJpLCB0aGlzLmNoYXJPZmZzZXQsIHRoaXMuZXJyb3IsIHRoaXMudHJhY2UpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIiIiCkNyYXNoIHdoZW4gY29tcGlsaW5nICR1cmksCmF0IGNoYXJhY3RlciBvZmZzZXQgJGNoYXJPZmZzZXQ6CiRlcnJvciR7dHJhY2UgPT0gbnVsbCA/ICcnIDogJ1xuJHRyYWNlJ30KIiIiOwogIH0KfQoKdm9pZCByZXNldENyYXNoUmVwb3J0aW5nKCkgewogIGZpcnN0U291cmNlVXJpID0gbnVsbDsKICBoYXNDcmFzaGVkID0gZmFsc2U7Cn0KCkZ1dHVyZTxUPiByZXBvcnRDcmFzaDxUPihlcnJvciwgU3RhY2tUcmFjZSB0cmFjZSwKICAgIFtVcmkgdXJpLCBpbnQgY2hhck9mZnNldF0pIGFzeW5jIHsKICBub3RlKFN0cmluZyBub3RlKSBhc3luYyB7CiAgICBzdGRlcnIud3JpdGUobm90ZSk7CiAgICBhd2FpdCBzdGRlcnIuZmx1c2goKTsKICB9CgogIGlmIChoYXNDcmFzaGVkKSByZXR1cm4gbmV3IEZ1dHVyZTxUPi5lcnJvcihlcnJvciwgdHJhY2UpOwogIGlmIChlcnJvciBpcyBDcmFzaCkgewogICAgdHJhY2UgPSBlcnJvci50cmFjZSA/PyB0cmFjZTsKICAgIHVyaSA9IGVycm9yLnVyaSA/PyB1cmk7CiAgICBjaGFyT2Zmc2V0ID0gZXJyb3IuY2hhck9mZnNldCA/PyBjaGFyT2Zmc2V0OwogICAgZXJyb3IgPSBlcnJvci5lcnJvcjsKICB9CiAgdXJpID8/PSBmaXJzdFNvdXJjZVVyaTsKICBoYXNDcmFzaGVkID0gdHJ1ZTsKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBkYXRhID0gPFN0cmluZywgZHluYW1pYz57fTsKICBkYXRhWyJ0eXBlIl0gPSAiY3Jhc2giOwogIGRhdGFbImNsaWVudCJdID0gInBhY2thZ2U6ZmFzdGEiOwogIGlmICh1cmkgIT0gbnVsbCkgZGF0YVsidXJpIl0gPSAiJHVyaSI7CiAgaWYgKGNoYXJPZmZzZXQgIT0gbnVsbCkgZGF0YVsib2Zmc2V0Il0gPSBjaGFyT2Zmc2V0OwogIGRhdGFbImVycm9yIl0gPSBzYWZlVG9TdHJpbmcoZXJyb3IpOwogIGRhdGFbInRyYWNlIl0gPSAiJHRyYWNlIjsKICBTdHJpbmcganNvbiA9IGpzb25FbmNvZGUoZGF0YSk7CiAgSHR0cENsaWVudCBjbGllbnQgPSBuZXcgSHR0cENsaWVudCgpOwogIHRyeSB7CiAgICBVcmkgc2VydmVyVXJpID0gVXJpLnBhcnNlKGRlZmF1bHRTZXJ2ZXJBZGRyZXNzKTsKICAgIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3Q7CiAgICB0cnkgewogICAgICByZXF1ZXN0ID0gYXdhaXQgY2xpZW50LnBvc3RVcmwoc2VydmVyVXJpKTsKICAgIH0gb24gU29ja2V0RXhjZXB0aW9uIHsKICAgICAgLy8gQXNzdW1lIHRoZSBjcmFzaCBsb2dnZXIgaXNuJ3QgcnVubmluZy4KICAgICAgY2xpZW50LmNsb3NlKGZvcmNlOiB0cnVlKTsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmU8VD4uZXJyb3IoCiAgICAgICAgICBuZXcgQ3Jhc2godXJpLCBjaGFyT2Zmc2V0LCBlcnJvciwgdHJhY2UpLCB0cmFjZSk7CiAgICB9CiAgICBpZiAocmVxdWVzdCAhPSBudWxsKSB7CiAgICAgIGF3YWl0IG5vdGUoIlxuU2VuZGluZyBjcmFzaCByZXBvcnQgZGF0YSIpOwogICAgICByZXF1ZXN0LnBlcnNpc3RlbnRDb25uZWN0aW9uID0gZmFsc2U7CiAgICAgIHJlcXVlc3QuYnVmZmVyT3V0cHV0ID0gZmFsc2U7CiAgICAgIFN0cmluZyBob3N0ID0gcmVxdWVzdD8uY29ubmVjdGlvbkluZm8/LnJlbW90ZUFkZHJlc3M/Lmhvc3Q7CiAgICAgIGludCBwb3J0ID0gcmVxdWVzdD8uY29ubmVjdGlvbkluZm8/LnJlbW90ZVBvcnQ7CiAgICAgIGF3YWl0IG5vdGUoIiB0byAkaG9zdDokcG9ydCIpOwogICAgICBhd2FpdCByZXF1ZXN0CiAgICAgICAgLi5oZWFkZXJzLmNvbnRlbnRUeXBlID0gQ29udGVudFR5cGUuanNvbgogICAgICAgIC4ud3JpdGUoanNvbik7CiAgICAgIGF3YWl0IHJlcXVlc3QuY2xvc2UoKTsKICAgICAgYXdhaXQgbm90ZSgiLiIpOwogICAgfQogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIGF3YWl0IG5vdGUoIlxuJHtzYWZlVG9TdHJpbmcoZSl9XG4kc1xuIik7CiAgICBhd2FpdCBub3RlKCJcblxuXG5GRTo6RVJST1I6OiRqc29uXG5cblxuIik7CiAgfQogIGNsaWVudC5jbG9zZShmb3JjZTogdHJ1ZSk7CiAgYXdhaXQgbm90ZSgiXG4iKTsKICByZXR1cm4gbmV3IEZ1dHVyZTxUPi5lcnJvcihlcnJvciwgdHJhY2UpOwp9CgpTdHJpbmcgc2FmZVRvU3RyaW5nKE9iamVjdCBvYmplY3QpIHsKICB0cnkgewogICAgcmV0dXJuICIkb2JqZWN0IjsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gIkVycm9yIHdoZW4gY29udmVydGluZyAke29iamVjdC5ydW50aW1lVHlwZX0gdG8gc3RyaW5nLiI7CiAgfQp9CgpGdXR1cmU8VD4gd2l0aENyYXNoUmVwb3J0aW5nPFQ+KAogICAgRnV0dXJlPFQ+IEZ1bmN0aW9uKCkgYWN0aW9uLCBVcmkgRnVuY3Rpb24oKSBjdXJyZW50VXJpKSBhc3luYyB7CiAgcmVzZXRDcmFzaFJlcG9ydGluZygpOwogIHRyeSB7CiAgICByZXR1cm4gYXdhaXQgYWN0aW9uKCk7CiAgfSBvbiBDcmFzaCB7CiAgICByZXRocm93OwogIH0gb24gRGVidWdBYm9ydCB7CiAgICByZXRocm93OwogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIHJldHVybiByZXBvcnRDcmFzaChlLCBzLCBjdXJyZW50VXJpKCkpOwogIH0KfQqAhABOTjwBFQEhAScBEU4BKAE/AU9FGQFOSxsUAQ4RARgBFgEaATwBFg8bISkFBAIBHRkWAgEyJxwYGgQBPBgiHDEZBBoVMxokKTcnHCIoCDUfCjEbMCEiPAYbMSwkQjYlFDEXHRcGEy4wBB0ULAIBJQgWEEUEAgEhRBkIGw8NFA0TLAQCASZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvY3Jhc2guZGFydDpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZGlsbC9kaWxsX3RhcmdldC5kYXJ0iB0vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5kaWxsX3RhcmdldDsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IExpYnJhcnk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnQnIHNob3cgVGFyZ2V0OwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBDbGFzc0J1aWxkZXI7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJy4uL3RhcmdldF9pbXBsZW1lbnRhdGlvbi5kYXJ0JyBzaG93IFRhcmdldEltcGxlbWVudGF0aW9uOwoKaW1wb3J0ICcuLi90aWNrZXIuZGFydCcgc2hvdyBUaWNrZXI7CgppbXBvcnQgJy4uL3VyaV90cmFuc2xhdG9yLmRhcnQnIHNob3cgVXJpVHJhbnNsYXRvcjsKCmltcG9ydCAnZGlsbF9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ2RpbGxfbG9hZGVyLmRhcnQnIHNob3cgRGlsbExvYWRlcjsKCmNsYXNzIERpbGxUYXJnZXQgZXh0ZW5kcyBUYXJnZXRJbXBsZW1lbnRhdGlvbiB7CiAgZmluYWwgTWFwPFVyaSwgRGlsbExpYnJhcnlCdWlsZGVyPiBsaWJyYXJ5QnVpbGRlcnMgPQogICAgICA8VXJpLCBEaWxsTGlicmFyeUJ1aWxkZXI+e307CgogIGJvb2wgaXNMb2FkZWQgPSBmYWxzZTsKCiAgRGlsbExvYWRlciBsb2FkZXI7CgogIERpbGxUYXJnZXQoVGlja2VyIHRpY2tlciwgVXJpVHJhbnNsYXRvciB1cmlUcmFuc2xhdG9yLCBUYXJnZXQgYmFja2VuZFRhcmdldCkKICAgICAgOiBzdXBlcih0aWNrZXIsIHVyaVRyYW5zbGF0b3IsIGJhY2tlbmRUYXJnZXQpIHsKICAgIGxvYWRlciA9IG5ldyBEaWxsTG9hZGVyKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgVXJpIGltcG9ydFVyaSwgVXJpIGZpbGVVcmksIExpc3Q8aW50PiBsaW5lU3RhcnRzLCBMaXN0PGludD4gc291cmNlQ29kZSkgewogICAgdW5zdXBwb3J0ZWQoImFkZFNvdXJjZUluZm9ybWF0aW9uIiwgLTEsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPE51bGw+IGJ1aWxkQ29tcG9uZW50KCkgewogICAgcmV0dXJuIG5ldyBGdXR1cmU8TnVsbD4uc3luYygoKSA9PiB1bnN1cHBvcnRlZCgiYnVpbGRDb21wb25lbnQiLCAtMSwgbnVsbCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPE51bGw+IGJ1aWxkT3V0bGluZXMoKSBhc3luYyB7CiAgICBpZiAobG9hZGVyLmxpYnJhcmllcy5pc05vdEVtcHR5KSB7CiAgICAgIGF3YWl0IGxvYWRlci5idWlsZE91dGxpbmVzKCk7CiAgICAgIGxvYWRlci5maW5hbGl6ZUV4cG9ydHMoKTsKICAgIH0KICAgIGlzTG9hZGVkID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIERpbGxMaWJyYXJ5QnVpbGRlciBjcmVhdGVMaWJyYXJ5QnVpbGRlcihVcmkgdXJpLCBVcmkgZmlsZVVyaSwgb3JpZ2luKSB7CiAgICBhc3NlcnQob3JpZ2luID09IG51bGwpOwogICAgRGlsbExpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyID0gbGlicmFyeUJ1aWxkZXJzLnJlbW92ZSh1cmkpOwogICAgYXNzZXJ0KGxpYnJhcnlCdWlsZGVyICE9IG51bGwsICJObyBsaWJyYXJ5IGZvdW5kIGZvciAkdXJpLiIpOwogICAgcmV0dXJuIGxpYnJhcnlCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBicmVha0N5Y2xlKENsYXNzQnVpbGRlciBjbHMpIHt9CgogIHZvaWQgYWRkTGlicmFyeShMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGxpYnJhcnlCdWlsZGVyc1tsaWJyYXJ5LmltcG9ydFVyaV0gPQogICAgICAgIG5ldyBEaWxsTGlicmFyeUJ1aWxkZXIobGlicmFyeSwgbG9hZGVyKTsKICB9Cn0KTQBOTjwBGwEhAS8BOQE6ASwBQgElATQBPAErATA3IwEZARUBTzYjBAEMHVAzBAEMIlEEAQwnJyQgBhUEAQxKHEVCGwQBDCcBJSkxBAIBMXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfdGFyZ2V0LmRhcnQ+c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfdGFyZ2V0LmRhcnTAAH9kLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEua2VybmVsX3RhcmdldDsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDYW5vbmljYWxOYW1lLAogICAgICAgIENsYXNzLAogICAgICAgIENvbXBvbmVudCwKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBFbXB0eVN0YXRlbWVudCwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgRnVuY3Rpb25Ob2RlLAogICAgICAgIEluaXRpYWxpemVyLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZEluaXRpYWxpemVyLAogICAgICAgIExpYnJhcnksCiAgICAgICAgTmFtZSwKICAgICAgICBOYW1lZEV4cHJlc3Npb24sCiAgICAgICAgTnVsbExpdGVyYWwsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIsCiAgICAgICAgU291cmNlLAogICAgICAgIFN1cGVySW5pdGlhbGl6ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZhcmlhYmxlR2V0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0JyBzaG93IENsb25lVmlzaXRvcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgc3Vic3RpdHV0ZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydCcgc2hvdyBEaWFnbm9zdGljUmVwb3J0ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgc2hvdyBUeXBlRW52aXJvbm1lbnQ7CgppbXBvcnQgJy4uLy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKaW1wb3J0ICcuLi9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKaW1wb3J0ICcuLi9jcmFzaC5kYXJ0JyBzaG93IHdpdGhDcmFzaFJlcG9ydGluZzsKCmltcG9ydCAnLi4vZGlsbC9kaWxsX3RhcmdldC5kYXJ0JyBzaG93IERpbGxUYXJnZXQ7CgppbXBvcnQgJy4uL2RpbGwvZGlsbF9tZW1iZXJfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxNZW1iZXJCdWlsZGVyOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IE1lc3NhZ2UsIExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9ybWF0dGVkTWVzc2FnZSwKICAgICAgICBtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGQsCiAgICAgICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkQ2F1c2UsCiAgICAgICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3QsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQsCiAgICAgICAgdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yLAogICAgICAgIHRlbXBsYXRlSW5mZXJyZWRQYWNrYWdlVXJpLAogICAgICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UsCiAgICAgICAgdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3I7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JyBzaG93IEFtYmlndW91c0J1aWxkZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUNsYXNzQnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgppbXBvcnQgJy4uL3RhcmdldF9pbXBsZW1lbnRhdGlvbi5kYXJ0JyBzaG93IFRhcmdldEltcGxlbWVudGF0aW9uOwoKaW1wb3J0ICcuLi91cmlfdHJhbnNsYXRvci5kYXJ0JyBzaG93IFVyaVRyYW5zbGF0b3I7CgppbXBvcnQgJ2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0JyBhcyBjb25zdGFudHMgc2hvdyB0cmFuc2Zvcm1MaWJyYXJpZXM7CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgSW52YWxpZFR5cGVCdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFByb2NlZHVyZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlcjsKCmltcG9ydCAna2VybmVsX2NvbnN0YW50cy5kYXJ0JyBzaG93IEtlcm5lbENvbnN0YW50RXJyb3JSZXBvcnRlcjsKCmltcG9ydCAnbWV0YWRhdGFfY29sbGVjdG9yLmRhcnQnIHNob3cgTWV0YWRhdGFDb2xsZWN0b3I7CgppbXBvcnQgJ3ZlcmlmaWVyLmRhcnQnIHNob3cgdmVyaWZ5Q29tcG9uZW50OwoKY2xhc3MgS2VybmVsVGFyZ2V0IGV4dGVuZHMgVGFyZ2V0SW1wbGVtZW50YXRpb24gewogIC8vLyBUaGUgW0ZpbGVTeXN0ZW1dIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvIGFjY2VzcyBmaWxlcy4KICBmaW5hbCBGaWxlU3lzdGVtIGZpbGVTeXN0ZW07CgogIC8vLyBXaGV0aGVyIGNvbW1lbnRzIHNob3VsZCBiZSBzY2FubmVkIGFuZCBwYXJzZWQuCiAgZmluYWwgYm9vbCBpbmNsdWRlQ29tbWVudHM7CgogIGZpbmFsIERpbGxUYXJnZXQgZGlsbFRhcmdldDsKCiAgLy8vIFRoZSBbTWV0YWRhdGFDb2xsZWN0b3JdIHRvIHdyaXRlIG1ldGFkYXRhIHRvLgogIGZpbmFsIE1ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yOwoKICBTb3VyY2VMb2FkZXIgbG9hZGVyOwoKICBDb21wb25lbnQgY29tcG9uZW50OwoKICBmaW5hbCBUeXBlQnVpbGRlciBkeW5hbWljVHlwZSA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJkeW5hbWljIiwgbnVsbCk7CgogIGZpbmFsIE5hbWVkVHlwZUJ1aWxkZXIgb2JqZWN0VHlwZSA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJPYmplY3QiLCBudWxsKTsKCiAgZmluYWwgVHlwZUJ1aWxkZXIgYm90dG9tVHlwZSA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJOdWxsIiwgbnVsbCk7CgogIGJvb2wgZ2V0IGxlZ2FjeU1vZGUgPT4gYmFja2VuZFRhcmdldC5sZWdhY3lNb2RlOwoKICBmaW5hbCBib29sIGV4Y2x1ZGVTb3VyY2UgPSAhQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy5lbWJlZFNvdXJjZVRleHQ7CgogIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnREZWZpbmVzID0KICAgICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy5lbnZpcm9ubWVudERlZmluZXM7CgogIGZpbmFsIGJvb2wgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQgPQogICAgICBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zLmVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OwoKICBmaW5hbCBMaXN0PE9iamVjdD4gY2xvbmVkRm9ybWFscyA9IDxPYmplY3Q+W107CgogIEtlcm5lbFRhcmdldCh0aGlzLmZpbGVTeXN0ZW0sIHRoaXMuaW5jbHVkZUNvbW1lbnRzLCBEaWxsVGFyZ2V0IGRpbGxUYXJnZXQsCiAgICAgIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciwKICAgICAge01ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yfSkKICAgICAgOiBkaWxsVGFyZ2V0ID0gZGlsbFRhcmdldCwKICAgICAgICBtZXRhZGF0YUNvbGxlY3RvciA9IG1ldGFkYXRhQ29sbGVjdG9yLAogICAgICAgIHN1cGVyKGRpbGxUYXJnZXQudGlja2VyLCB1cmlUcmFuc2xhdG9yLCBkaWxsVGFyZ2V0LmJhY2tlbmRUYXJnZXQpIHsKICAgIGxvYWRlciA9IGNyZWF0ZUxvYWRlcigpOwogIH0KCiAgU291cmNlTG9hZGVyIGNyZWF0ZUxvYWRlcigpID0+CiAgICAgIG5ldyBTb3VyY2VMb2FkZXIoZmlsZVN5c3RlbSwgaW5jbHVkZUNvbW1lbnRzLCB0aGlzKTsKCiAgdm9pZCBhZGRTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgVXJpIGltcG9ydFVyaSwgVXJpIGZpbGVVcmksIExpc3Q8aW50PiBsaW5lU3RhcnRzLCBMaXN0PGludD4gc291cmNlQ29kZSkgewogICAgdXJpVG9Tb3VyY2VbZmlsZVVyaV0gPQogICAgICAgIG5ldyBTb3VyY2UobGluZVN0YXJ0cywgc291cmNlQ29kZSwgaW1wb3J0VXJpLCBmaWxlVXJpKTsKICB9CgogIC8vLyBSZXR1cm4gbGlzdCBvZiBzYW1lIHNpemUgYXMgaW5wdXQgd2l0aCBwb3NzaWJseSB0cmFuc2xhdGVkIHVyaXMuCiAgTGlzdDxVcmk+IHNldEVudHJ5UG9pbnRzKExpc3Q8VXJpPiBlbnRyeVBvaW50cykgewogICAgTWFwPFN0cmluZywgVXJpPiBwYWNrYWdlc01hcDsKICAgIExpc3Q8VXJpPiByZXN1bHQgPSBuZXcgTGlzdDxVcmk+KCk7CiAgICBmb3IgKFVyaSBlbnRyeVBvaW50IGluIGVudHJ5UG9pbnRzKSB7CiAgICAgIFN0cmluZyBzY2hlbWUgPSBlbnRyeVBvaW50LnNjaGVtZTsKICAgICAgVXJpIGZpbGVVcmk7CiAgICAgIHN3aXRjaCAoc2NoZW1lKSB7CiAgICAgICAgY2FzZSAicGFja2FnZSI6CiAgICAgICAgY2FzZSAiZGFydCI6CiAgICAgICAgY2FzZSAiZGF0YSI6CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgLy8gQXR0ZW1wdCB0byByZXZlcnNlLWxvb2t1cCBbZW50cnlQb2ludF0gaW4gcGFja2FnZSBjb25maWcuCiAgICAgICAgICBTdHJpbmcgYXNTdHJpbmcgPSAiJGVudHJ5UG9pbnQiOwogICAgICAgICAgcGFja2FnZXNNYXAgPz89IHVyaVRyYW5zbGF0b3IucGFja2FnZXMuYXNNYXAoKTsKICAgICAgICAgIGZvciAoU3RyaW5nIHBhY2thZ2VOYW1lIGluIHBhY2thZ2VzTWFwLmtleXMpIHsKICAgICAgICAgICAgVXJpIHBhY2thZ2VVcmkgPSBwYWNrYWdlc01hcFtwYWNrYWdlTmFtZV07CiAgICAgICAgICAgIGlmIChwYWNrYWdlVXJpPy5oYXNGcmFnbWVudCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgcGFja2FnZVVyaSA9IHBhY2thZ2VVcmkucmVtb3ZlRnJhZ21lbnQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gIiR7cGFja2FnZVVyaX0iOwogICAgICAgICAgICBpZiAoYXNTdHJpbmcuc3RhcnRzV2l0aChwcmVmaXgpKSB7CiAgICAgICAgICAgICAgVXJpIHJldmVyc2VkID0gVXJpLnBhcnNlKAogICAgICAgICAgICAgICAgICAicGFja2FnZTokcGFja2FnZU5hbWUvJHthc1N0cmluZy5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCl9Iik7CiAgICAgICAgICAgICAgaWYgKGVudHJ5UG9pbnQgPT0gdXJpVHJhbnNsYXRvci50cmFuc2xhdGUocmV2ZXJzZWQpKSB7CiAgICAgICAgICAgICAgICBsb2FkZXIuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUluZmVycmVkUGFja2FnZVVyaS53aXRoQXJndW1lbnRzKHJldmVyc2VkKSwKICAgICAgICAgICAgICAgICAgICAtMSwKICAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgIGVudHJ5UG9pbnQpOwogICAgICAgICAgICAgICAgZmlsZVVyaSA9IGVudHJ5UG9pbnQ7CiAgICAgICAgICAgICAgICBlbnRyeVBvaW50ID0gcmV2ZXJzZWQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogICAgICByZXN1bHQuYWRkKGVudHJ5UG9pbnQpOwogICAgICBsb2FkZXIucmVhZChlbnRyeVBvaW50LCAtMSwgYWNjZXNzb3I6IGxvYWRlci5maXJzdCwgZmlsZVVyaTogZmlsZVVyaSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgTGlicmFyeUJ1aWxkZXIgY3JlYXRlTGlicmFyeUJ1aWxkZXIoCiAgICAgIFVyaSB1cmksIFVyaSBmaWxlVXJpLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBvcmlnaW4pIHsKICAgIGlmIChkaWxsVGFyZ2V0LmlzTG9hZGVkKSB7CiAgICAgIHZhciBidWlsZGVyID0gZGlsbFRhcmdldC5sb2FkZXIuYnVpbGRlcnNbdXJpXTsKICAgICAgaWYgKGJ1aWxkZXIgIT0gbnVsbCkgewogICAgICAgIHJldHVybiBidWlsZGVyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFNvdXJjZUxpYnJhcnlCdWlsZGVyKHVyaSwgZmlsZVVyaSwgbG9hZGVyLCBvcmlnaW4pOwogIH0KCiAgLy8vIFJldHVybnMgY2xhc3NlcyBkZWZpbmVkIGluIGxpYnJhcmllcyBpbiBbbG9hZGVyXS4KICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gY29sbGVjdE15Q2xhc3NlcygpIHsKICAgIExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiByZXN1bHQgPSA8U291cmNlQ2xhc3NCdWlsZGVyPltdOwogICAgbG9hZGVyLmJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IGxvYWRlcikgewogICAgICAgIEl0ZXJhdG9yPEJ1aWxkZXI+IGl0ZXJhdG9yID0gbGlicmFyeS5pdGVyYXRvcjsKICAgICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgICAgQnVpbGRlciBtZW1iZXIgPSBpdGVyYXRvci5jdXJyZW50OwogICAgICAgICAgaWYgKG1lbWJlciBpcyBTb3VyY2VDbGFzc0J1aWxkZXIgJiYgIW1lbWJlci5pc1BhdGNoKSB7CiAgICAgICAgICAgIHJlc3VsdC5hZGQobWVtYmVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgYnJlYWtDeWNsZShDbGFzc0J1aWxkZXIgYnVpbGRlcikgewogICAgQ2xhc3MgY2xzID0gYnVpbGRlci50YXJnZXQ7CiAgICBjbHMuaW1wbGVtZW50ZWRUeXBlcy5jbGVhcigpOwogICAgY2xzLnN1cGVydHlwZSA9IG51bGw7CiAgICBjbHMubWl4ZWRJblR5cGUgPSBudWxsOwogICAgYnVpbGRlci5zdXBlcnR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiT2JqZWN0IiwgbnVsbCkKICAgICAgLi5iaW5kKG9iamVjdENsYXNzQnVpbGRlcik7CiAgICBidWlsZGVyLmludGVyZmFjZXMgPSBudWxsOwogICAgYnVpbGRlci5taXhlZEluVHlwZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Q29tcG9uZW50PiBidWlsZE91dGxpbmVzKHtDYW5vbmljYWxOYW1lIG5hbWVSb290fSkgYXN5bmMgewogICAgaWYgKGxvYWRlci5maXJzdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiB3aXRoQ3Jhc2hSZXBvcnRpbmc8Q29tcG9uZW50PigoKSBhc3luYyB7CiAgICAgIGxvYWRlci5jcmVhdGVUeXBlSW5mZXJlbmNlRW5naW5lKCk7CiAgICAgIGF3YWl0IGxvYWRlci5idWlsZE91dGxpbmVzKCk7CiAgICAgIGxvYWRlci5jb3JlTGlicmFyeS5iZWNvbWVDb3JlTGlicmFyeSgpOwogICAgICBkeW5hbWljVHlwZS5iaW5kKAogICAgICAgICAgbG9hZGVyLmNvcmVMaWJyYXJ5Lmxvb2t1cExvY2FsTWVtYmVyKCJkeW5hbWljIiwgcmVxdWlyZWQ6IHRydWUpKTsKICAgICAgbG9hZGVyLnJlc29sdmVQYXJ0cygpOwogICAgICBsb2FkZXIuY29tcHV0ZUxpYnJhcnlTY29wZXMoKTsKICAgICAgb2JqZWN0VHlwZQogICAgICAgICAgLmJpbmQobG9hZGVyLmNvcmVMaWJyYXJ5Lmxvb2t1cExvY2FsTWVtYmVyKCJPYmplY3QiLCByZXF1aXJlZDogdHJ1ZSkpOwogICAgICBib3R0b21UeXBlCiAgICAgICAgICAuYmluZChsb2FkZXIuY29yZUxpYnJhcnkubG9va3VwTG9jYWxNZW1iZXIoIk51bGwiLCByZXF1aXJlZDogdHJ1ZSkpOwogICAgICBsb2FkZXIucmVzb2x2ZVR5cGVzKCk7CiAgICAgIGxvYWRlci5jb21wdXRlRGVmYXVsdFR5cGVzKGR5bmFtaWNUeXBlLCBib3R0b21UeXBlLCBvYmplY3RDbGFzc0J1aWxkZXIpOwogICAgICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gbXlDbGFzc2VzID0KICAgICAgICAgIGxvYWRlci5jaGVja1NlbWFudGljcyhvYmplY3RDbGFzc0J1aWxkZXIpOwogICAgICBsb2FkZXIuZmluaXNoVHlwZVZhcmlhYmxlcyhvYmplY3RDbGFzc0J1aWxkZXIsIGR5bmFtaWNUeXBlKTsKICAgICAgbG9hZGVyLmJ1aWxkQ29tcG9uZW50KCk7CiAgICAgIGxvYWRlci5maW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbHMoKTsKICAgICAgaW5zdGFsbERlZmF1bHRTdXBlcnR5cGVzKCk7CiAgICAgIGluc3RhbGxTeW50aGV0aWNDb25zdHJ1Y3RvcnMobXlDbGFzc2VzKTsKICAgICAgbG9hZGVyLnJlc29sdmVDb25zdHJ1Y3RvcnMoKTsKICAgICAgY29tcG9uZW50ID0KICAgICAgICAgIGxpbmsobmV3IExpc3Q8TGlicmFyeT4uZnJvbShsb2FkZXIubGlicmFyaWVzKSwgbmFtZVJvb3Q6IG5hbWVSb290KTsKICAgICAgY29tcHV0ZUNvcmVUeXBlcygpOwogICAgICBsb2FkZXIuYnVpbGRDbGFzc0hpZXJhcmNoeShteUNsYXNzZXMsIG9iamVjdENsYXNzQnVpbGRlcik7CiAgICAgIGxvYWRlci5jb21wdXRlSGllcmFyY2h5KCk7CiAgICAgIGxvYWRlci5wZXJmb3JtVG9wTGV2ZWxJbmZlcmVuY2UobXlDbGFzc2VzKTsKICAgICAgbG9hZGVyLmNoZWNrU3VwZXJ0eXBlcyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuY2hlY2tCb3VuZHMoKTsKICAgICAgbG9hZGVyLmNoZWNrT3ZlcnJpZGVzKG15Q2xhc3Nlcyk7CiAgICAgIGxvYWRlci5jaGVja0Fic3RyYWN0TWVtYmVycyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuY2hlY2tSZWRpcmVjdGluZ0ZhY3RvcmllcyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVycyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuY2hlY2tNaXhpbnMobXlDbGFzc2VzKTsKICAgICAgbG9hZGVyLmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKCk7CiAgICAgIGluc3RhbGxBbGxDb21wb25lbnRQcm9ibGVtcyhsb2FkZXIuYWxsQ29tcG9uZW50UHJvYmxlbXMpOwogICAgICBsb2FkZXIuYWxsQ29tcG9uZW50UHJvYmxlbXMuY2xlYXIoKTsKICAgICAgcmV0dXJuIGNvbXBvbmVudDsKICAgIH0sICgpID0+IGxvYWRlcj8uY3VycmVudFVyaUZvckNyYXNoUmVwb3J0aW5nKTsKICB9CgogIC8vLyBCdWlsZCB0aGUga2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wb25lbnQgbG9hZGVkIGJ5IHRoaXMKICAvLy8gdGFyZ2V0LiBUaGUgY29tcG9uZW50IHdpbGwgY29udGFpbiBmdWxsIGJvZGllcyBmb3IgdGhlIGNvZGUgbG9hZGVkIGZyb20KICAvLy8gc291cmNlcywgYW5kIG9ubHkgcmVmZXJlbmNlcyB0byB0aGUgY29kZSBsb2FkZWQgYnkgdGhlIFtEaWxsVGFyZ2V0XSwKICAvLy8gd2hpY2ggbWF5IG9yIG1heSBub3QgaW5jbHVkZSBtZXRob2QgYm9kaWVzIChkZXBlbmRpbmcgb24gd2hhdCB3YXMgbG9hZGVkCiAgLy8vIGludG8gdGhhdCB0YXJnZXQsIGFuIG91dGxpbmUgb3IgYSBmdWxsIGtlcm5lbCBjb21wb25lbnQpLgogIC8vLwogIC8vLyBJZiBbdmVyaWZ5XSwgcnVuIHRoZSBkZWZhdWx0IGtlcm5lbCB2ZXJpZmljYXRpb24gb24gdGhlIHJlc3VsdGluZwogIC8vLyBjb21wb25lbnQuCiAgQG92ZXJyaWRlCiAgRnV0dXJlPENvbXBvbmVudD4gYnVpbGRDb21wb25lbnQoe2Jvb2wgdmVyaWZ5OiBmYWxzZX0pIGFzeW5jIHsKICAgIGlmIChsb2FkZXIuZmlyc3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gd2l0aENyYXNoUmVwb3J0aW5nPENvbXBvbmVudD4oKCkgYXN5bmMgewogICAgICB0aWNrZXIubG9nTXMoIkJ1aWxkaW5nIGNvbXBvbmVudCIpOwogICAgICBhd2FpdCBsb2FkZXIuYnVpbGRCb2RpZXMoKTsKICAgICAgZmluaXNoQ2xvbmVkUGFyYW1ldGVycygpOwogICAgICBsb2FkZXIuZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKTsKICAgICAgbG9hZGVyLmZpbmlzaE5vU3VjaE1ldGhvZEZvcndhcmRlcnMoKTsKICAgICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IG15Q2xhc3NlcyA9IGNvbGxlY3RNeUNsYXNzZXMoKTsKICAgICAgbG9hZGVyLmZpbmlzaE5hdGl2ZU1ldGhvZHMoKTsKICAgICAgbG9hZGVyLmZpbmlzaFBhdGNoTWV0aG9kcygpOwogICAgICBmaW5pc2hBbGxDb25zdHJ1Y3RvcnMobXlDbGFzc2VzKTsKICAgICAgcnVuQnVpbGRUcmFuc2Zvcm1hdGlvbnMoKTsKCiAgICAgIGlmICh2ZXJpZnkpIHRoaXMudmVyaWZ5KCk7CiAgICAgIGluc3RhbGxBbGxDb21wb25lbnRQcm9ibGVtcyhsb2FkZXIuYWxsQ29tcG9uZW50UHJvYmxlbXMpOwogICAgICByZXR1cm4gY29tcG9uZW50OwogICAgfSwgKCkgPT4gbG9hZGVyPy5jdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmcpOwogIH0KCiAgdm9pZCBpbnN0YWxsQWxsQ29tcG9uZW50UHJvYmxlbXMoCiAgICAgIExpc3Q8Rm9ybWF0dGVkTWVzc2FnZT4gYWxsQ29tcG9uZW50UHJvYmxlbXMpIHsKICAgIGlmIChhbGxDb21wb25lbnRQcm9ibGVtcy5pc05vdEVtcHR5KSB7CiAgICAgIGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbiA/Pz0gPFN0cmluZz5bXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsQ29tcG9uZW50UHJvYmxlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgRm9ybWF0dGVkTWVzc2FnZSBmb3JtYXR0ZWRNZXNzYWdlID0gYWxsQ29tcG9uZW50UHJvYmxlbXNbaV07CiAgICAgIGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbi5hZGQoZm9ybWF0dGVkTWVzc2FnZS50b0pzb25TdHJpbmcoKSk7CiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGNvbXBvbmVudCBieSBjb21iaW5pbmcgW2xpYnJhcmllc10gd2l0aCB0aGUgbGlicmFyaWVzIG9mCiAgLy8vIGBkaWxsVGFyZ2V0LmxvYWRlci5jb21wb25lbnRgLgogIENvbXBvbmVudCBsaW5rKExpc3Q8TGlicmFyeT4gbGlicmFyaWVzLCB7Q2Fub25pY2FsTmFtZSBuYW1lUm9vdH0pIHsKICAgIGxpYnJhcmllcy5hZGRBbGwoZGlsbFRhcmdldC5sb2FkZXIubGlicmFyaWVzKTsKCiAgICBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gbmV3IE1hcDxVcmksIFNvdXJjZT4oKTsKICAgIHZvaWQgY29weVNvdXJjZShVcmkgdXJpLCBTb3VyY2Ugc291cmNlKSB7CiAgICAgIHVyaVRvU291cmNlW3VyaV0gPSBleGNsdWRlU291cmNlCiAgICAgICAgICA/IG5ldyBTb3VyY2Uoc291cmNlLmxpbmVTdGFydHMsIGNvbnN0IDxpbnQ+W10sIHNvdXJjZS5pbXBvcnRVcmksCiAgICAgICAgICAgICAgc291cmNlLmZpbGVVcmkpCiAgICAgICAgICA6IHNvdXJjZTsKICAgIH0KCiAgICB0aGlzLnVyaVRvU291cmNlLmZvckVhY2goY29weVNvdXJjZSk7CgogICAgQ29tcG9uZW50IGNvbXBvbmVudCA9IGJhY2tlbmRUYXJnZXQuY29uZmlndXJlQ29tcG9uZW50KG5ldyBDb21wb25lbnQoCiAgICAgICAgbmFtZVJvb3Q6IG5hbWVSb290LCBsaWJyYXJpZXM6IGxpYnJhcmllcywgdXJpVG9Tb3VyY2U6IHVyaVRvU291cmNlKSk7CiAgICBpZiAobG9hZGVyLmZpcnN0ICE9IG51bGwpIHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogZG8gb25seSBmb3IgZnVsbCBwcm9ncmFtCiAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBsb2FkZXIuZmlyc3QuZXhwb3J0U2NvcGUubG9va3VwKCJtYWluIiwgLTEsIG51bGwpOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQW1iaWd1b3VzQnVpbGRlcikgewogICAgICAgIEFtYmlndW91c0J1aWxkZXIgcHJvYmxlbSA9IGRlY2xhcmF0aW9uOwogICAgICAgIGRlY2xhcmF0aW9uID0gcHJvYmxlbS5nZXRGaXJzdERlY2xhcmF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgICBjb21wb25lbnQubWFpbk1ldGhvZCA9IGRlY2xhcmF0aW9uLnByb2NlZHVyZTsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBEaWxsTWVtYmVyQnVpbGRlcikgewogICAgICAgIGlmIChkZWNsYXJhdGlvbi5tZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgICBjb21wb25lbnQubWFpbk1ldGhvZCA9IGRlY2xhcmF0aW9uLm1lbWJlcjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAobWV0YWRhdGFDb2xsZWN0b3IgIT0gbnVsbCkgewogICAgICBjb21wb25lbnQuYWRkTWV0YWRhdGFSZXBvc2l0b3J5KG1ldGFkYXRhQ29sbGVjdG9yLnJlcG9zaXRvcnkpOwogICAgfQoKICAgIHRpY2tlci5sb2dNcygiTGlua2VkIGNvbXBvbmVudCIpOwogICAgcmV0dXJuIGNvbXBvbmVudDsKICB9CgogIHZvaWQgaW5zdGFsbERlZmF1bHRTdXBlcnR5cGVzKCkgewogICAgQ2xhc3Mgb2JqZWN0Q2xhc3MgPSB0aGlzLm9iamVjdENsYXNzOwogICAgbG9hZGVyLmJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IGxvYWRlcikgewogICAgICAgIEl0ZXJhdG9yPEJ1aWxkZXI+IGl0ZXJhdG9yID0gbGlicmFyeS5pdGVyYXRvcjsKICAgICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24gaXMgU291cmNlQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgICAgIENsYXNzIGNscyA9IGRlY2xhcmF0aW9uLnRhcmdldDsKICAgICAgICAgICAgaWYgKGNscyAhPSBvYmplY3RDbGFzcykgewogICAgICAgICAgICAgIGNscy5zdXBlcnR5cGUgPz89IG9iamVjdENsYXNzLmFzUmF3U3VwZXJ0eXBlOwogICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnN1cGVydHlwZSA/Pz0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoIk9iamVjdCIsIG51bGwpCiAgICAgICAgICAgICAgICAuLmJpbmQob2JqZWN0Q2xhc3NCdWlsZGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgICAgICAgY2xzLm1peGVkSW5UeXBlID0gZGVjbGFyYXRpb24ubWl4ZWRJblR5cGUuYnVpbGRNaXhlZEluVHlwZSgKICAgICAgICAgICAgICAgICAgbGlicmFyeSwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgZGVjbGFyYXRpb24uZmlsZVVyaSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJJbnN0YWxsZWQgT2JqZWN0IGFzIGltcGxpY2l0IHN1cGVyY2xhc3MiKTsKICB9CgogIHZvaWQgaW5zdGFsbFN5bnRoZXRpY0NvbnN0cnVjdG9ycyhMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gYnVpbGRlcnMpIHsKICAgIENsYXNzIG9iamVjdENsYXNzID0gdGhpcy5vYmplY3RDbGFzczsKICAgIGZvciAoU291cmNlQ2xhc3NCdWlsZGVyIGJ1aWxkZXIgaW4gYnVpbGRlcnMpIHsKICAgICAgaWYgKGJ1aWxkZXIudGFyZ2V0ICE9IG9iamVjdENsYXNzICYmICFidWlsZGVyLmlzUGF0Y2gpIHsKICAgICAgICBpZiAoYnVpbGRlci5pc1BhdGNoIHx8CiAgICAgICAgICAgIGJ1aWxkZXIuaXNNaXhpbkRlY2xhcmF0aW9uIHx8CiAgICAgICAgICAgIGJ1aWxkZXIuaXNFeHRlbnNpb24pIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoYnVpbGRlci5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgICAgIGluc3RhbGxGb3J3YXJkaW5nQ29uc3RydWN0b3JzKGJ1aWxkZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnN0YWxsRGVmYXVsdENvbnN0cnVjdG9yKGJ1aWxkZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdGlja2VyLmxvZ01zKCJJbnN0YWxsZWQgc3ludGhldGljIGNvbnN0cnVjdG9ycyIpOwogIH0KCiAgQ2xhc3NCdWlsZGVyIGdldCBvYmplY3RDbGFzc0J1aWxkZXIgPT4gb2JqZWN0VHlwZS5kZWNsYXJhdGlvbjsKCiAgQ2xhc3MgZ2V0IG9iamVjdENsYXNzID0+IG9iamVjdENsYXNzQnVpbGRlci5jbHM7CgogIC8vLyBJZiBbYnVpbGRlcl0gZG9lc24ndCBoYXZlIGEgY29uc3RydWN0b3JzLCBpbnN0YWxsIHRoZSBkZWZhdWx0cy4KICB2b2lkIGluc3RhbGxEZWZhdWx0Q29uc3RydWN0b3IoU291cmNlQ2xhc3NCdWlsZGVyIGJ1aWxkZXIpIHsKICAgIGFzc2VydCghYnVpbGRlci5pc01peGluQXBwbGljYXRpb24pOwogICAgYXNzZXJ0KCFidWlsZGVyLmlzRXh0ZW5zaW9uKTsKICAgIC8vIFRPRE8oYXNrZXNjKTogTWFrZSB0aGlzIGNoZWNrIGxpZ2h0LXdlaWdodCBpbiB0aGUgYWJzZW5jZSBvZiBwYXRjaGVzLgogICAgaWYgKGJ1aWxkZXIudGFyZ2V0LmNvbnN0cnVjdG9ycy5pc05vdEVtcHR5KSByZXR1cm47CiAgICBpZiAoYnVpbGRlci50YXJnZXQucmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLmlzTm90RW1wdHkpIHJldHVybjsKICAgIGZvciAoUHJvY2VkdXJlIHByb2MgaW4gYnVpbGRlci50YXJnZXQucHJvY2VkdXJlcykgewogICAgICBpZiAocHJvYy5pc0ZhY3RvcnkpIHJldHVybjsKICAgIH0KCiAgICAvLy8gRnJvbSBbRGFydCBQcm9ncmFtbWluZyBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLCA0dGggRWRpdGlvbl0oCiAgICAvLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9maWxlcy9FQ01BLVNUL0VDTUEtNDA4LnBkZik6CiAgICAvLy8gPklmZiBubyBjb25zdHJ1Y3RvciBpcyBzcGVjaWZpZWQgZm9yIGEgY2xhc3MgQywgaXQgaW1wbGljaXRseSBoYXMgYQogICAgLy8vID5kZWZhdWx0IGNvbnN0cnVjdG9yIEMoKSA6IHN1cGVyKCkge30sIHVubGVzcyBDIGlzIGNsYXNzIE9iamVjdC4KICAgIC8vIFRoZSBzdXBlcmluaXRpYWxpemVyIGlzIGluc3RhbGxlZCBiZWxvdyBpbiBbZmluaXNoQ29uc3RydWN0b3JzXS4KICAgIGJ1aWxkZXIuYWRkU3ludGhldGljQ29uc3RydWN0b3IobWFrZURlZmF1bHRDb25zdHJ1Y3RvcihidWlsZGVyLnRhcmdldCkpOwogIH0KCiAgdm9pZCBpbnN0YWxsRm9yd2FyZGluZ0NvbnN0cnVjdG9ycyhTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlcikgewogICAgYXNzZXJ0KGJ1aWxkZXIuaXNNaXhpbkFwcGxpY2F0aW9uKTsKICAgIGlmIChidWlsZGVyLmxpYnJhcnkubG9hZGVyICE9IGxvYWRlcikgcmV0dXJuOwogICAgaWYgKGJ1aWxkZXIudGFyZ2V0LmNvbnN0cnVjdG9ycy5pc05vdEVtcHR5KSB7CiAgICAgIC8vIFRoZXNlIHdlcmUgaW5zdGFsbGVkIGJ5IGEgc3ViY2xhc3MgaW4gdGhlIHJlY3Vyc2l2ZSBjYWxsIGJlbG93LgogICAgICByZXR1cm47CiAgICB9CgogICAgLy8vIEZyb20gW0RhcnQgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiwgNHRoIEVkaXRpb25dKAogICAgLy8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FQ01BLTQwOC5wZGYpOgogICAgLy8vID5BIG1peGluIGFwcGxpY2F0aW9uIG9mIHRoZSBmb3JtIFMgd2l0aCBNOyBkZWZpbmVzIGEgY2xhc3MgQyB3aXRoCiAgICAvLy8gPnN1cGVyY2xhc3MgUy4KICAgIC8vLyA+Li4uCgogICAgLy8vID5MZXQgTE0gYmUgdGhlIGxpYnJhcnkgaW4gd2hpY2ggTSBpcyBkZWNsYXJlZC4gRm9yIGVhY2ggZ2VuZXJhdGl2ZQogICAgLy8vID5jb25zdHJ1Y3RvciBuYW1lZCBxaShUaTEgYWkxLCAuIC4gLiAsIFRpa2kgYWlraSksIGkgaW4gMS4ubiBvZiBTCiAgICAvLy8gPnRoYXQgaXMgYWNjZXNzaWJsZSB0byBMTSAsIEMgaGFzIGFuIGltcGxpY2l0bHkgZGVjbGFyZWQgY29uc3RydWN0b3IKICAgIC8vLyA+bmFtZWQgcSdpID0gW0MvU11xaSBvZiB0aGUgZm9ybSBxJ2koYWkxLC4uLixhaWtpKSA6CiAgICAvLy8gPnN1cGVyKGFpMSwuLi4sYWlraSk7LgogICAgVHlwZUJ1aWxkZXIgdHlwZSA9IGJ1aWxkZXIuc3VwZXJ0eXBlOwogICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciBzdXBlcnR5cGU7CiAgICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgIHN1cGVydHlwZSA9IHR5cGUuZGVjbGFyYXRpb247CiAgICB9IGVsc2UgewogICAgICB1bmhhbmRsZWQoIiR7dHlwZS5ydW50aW1lVHlwZX0iLCAiaW5zdGFsbEZvcndhcmRpbmdDb25zdHJ1Y3RvcnMiLAogICAgICAgICAgYnVpbGRlci5jaGFyT2Zmc2V0LCBidWlsZGVyLmZpbGVVcmkpOwogICAgfQogICAgaWYgKHN1cGVydHlwZS5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgaW5zdGFsbEZvcndhcmRpbmdDb25zdHJ1Y3RvcnMoc3VwZXJ0eXBlKTsKICAgIH0KICAgIGlmIChzdXBlcnR5cGUgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIGlmIChzdXBlcnR5cGUuY2xzLmNvbnN0cnVjdG9ycy5pc0VtcHR5KSB7CiAgICAgICAgYnVpbGRlci5hZGRTeW50aGV0aWNDb25zdHJ1Y3RvcihtYWtlRGVmYXVsdENvbnN0cnVjdG9yKGJ1aWxkZXIudGFyZ2V0KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb25NYXAgPQogICAgICAgICAgICBidWlsZGVyLmdldFN1YnN0aXR1dGlvbk1hcChzdXBlcnR5cGUudGFyZ2V0KTsKICAgICAgICBmb3IgKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGluIHN1cGVydHlwZS5jbHMuY29uc3RydWN0b3JzKSB7CiAgICAgICAgICBidWlsZGVyLmFkZFN5bnRoZXRpY0NvbnN0cnVjdG9yKG1ha2VNaXhpbkFwcGxpY2F0aW9uQ29uc3RydWN0b3IoCiAgICAgICAgICAgICAgYnVpbGRlci50YXJnZXQsIGJ1aWxkZXIuY2xzLm1peGluLCBjb25zdHJ1Y3Rvciwgc3Vic3RpdHV0aW9uTWFwKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHN1cGVydHlwZSBpcyBJbnZhbGlkVHlwZUJ1aWxkZXIpIHsKICAgICAgYnVpbGRlci5hZGRTeW50aGV0aWNDb25zdHJ1Y3RvcihtYWtlRGVmYXVsdENvbnN0cnVjdG9yKGJ1aWxkZXIudGFyZ2V0KSk7CiAgICB9IGVsc2UgewogICAgICB1bmhhbmRsZWQoIiR7c3VwZXJ0eXBlLnJ1bnRpbWVUeXBlfSIsICJpbnN0YWxsRm9yd2FyZGluZ0NvbnN0cnVjdG9ycyIsCiAgICAgICAgICBidWlsZGVyLmNoYXJPZmZzZXQsIGJ1aWxkZXIuZmlsZVVyaSk7CiAgICB9CiAgfQoKICBDb25zdHJ1Y3RvciBtYWtlTWl4aW5BcHBsaWNhdGlvbkNvbnN0cnVjdG9yKENsYXNzIGNscywgQ2xhc3MgbWl4aW4sCiAgICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbk1hcCkgewogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBjb3B5Rm9ybWFsKFZhcmlhYmxlRGVjbGFyYXRpb24gZm9ybWFsKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogSGFuZGxlIGluaXRpYWxpemVycy4KICAgICAgdmFyIGNvcHkgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihmb3JtYWwubmFtZSwKICAgICAgICAgIGlzRmluYWw6IGZvcm1hbC5pc0ZpbmFsLCBpc0NvbnN0OiBmb3JtYWwuaXNDb25zdCk7CiAgICAgIGlmIChmb3JtYWwudHlwZSAhPSBudWxsKSB7CiAgICAgICAgY29weS50eXBlID0gc3Vic3RpdHV0ZShmb3JtYWwudHlwZSwgc3Vic3RpdHV0aW9uTWFwKTsKICAgICAgfQogICAgICByZXR1cm4gY29weTsKICAgIH0KCiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gPFZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycyA9IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsID0gPEV4cHJlc3Npb24+W107CiAgICBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWQgPSA8TmFtZWRFeHByZXNzaW9uPltdOwogICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbAogICAgICAgIGluIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmFkZChjb3B5Rm9ybWFsKGZvcm1hbCkpOwogICAgICBwb3NpdGlvbmFsLmFkZChuZXcgVmFyaWFibGVHZXQocG9zaXRpb25hbFBhcmFtZXRlcnMubGFzdCkpOwogICAgfQogICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbCBpbiBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBjbG9uZSA9IGNvcHlGb3JtYWwoZm9ybWFsKTsKICAgICAgY2xvbmVkRm9ybWFscy4uYWRkKGZvcm1hbCkuLmFkZChjbG9uZSkuLmFkZChzdWJzdGl0dXRpb25NYXApOwogICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkKGNsb25lKTsKICAgICAgbmFtZWQuYWRkKG5ldyBOYW1lZEV4cHJlc3Npb24oCiAgICAgICAgICBmb3JtYWwubmFtZSwgbmV3IFZhcmlhYmxlR2V0KG5hbWVkUGFyYW1ldGVycy5sYXN0KSkpOwogICAgfQogICAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uTm9kZShuZXcgRW1wdHlTdGF0ZW1lbnQoKSwKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogY29uc3RydWN0b3IuZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICByZXR1cm5UeXBlOiBtYWtlQ29uc3RydWN0b3JSZXR1cm5UeXBlKGNscykpOwogICAgU3VwZXJJbml0aWFsaXplciBpbml0aWFsaXplciA9IG5ldyBTdXBlckluaXRpYWxpemVyKAogICAgICAgIGNvbnN0cnVjdG9yLCBuZXcgQXJndW1lbnRzKHBvc2l0aW9uYWwsIG5hbWVkOiBuYW1lZCkpOwogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiwKICAgICAgICBuYW1lOiBjb25zdHJ1Y3Rvci5uYW1lLAogICAgICAgIGluaXRpYWxpemVyczogPEluaXRpYWxpemVyPltpbml0aWFsaXplcl0sCiAgICAgICAgaXNTeW50aGV0aWM6IHRydWUsCiAgICAgICAgaXNDb25zdDogY29uc3RydWN0b3IuaXNDb25zdCAmJiBtaXhpbi5maWVsZHMuaXNFbXB0eSk7CiAgfQoKICB2b2lkIGZpbmlzaENsb25lZFBhcmFtZXRlcnMoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsb25lZEZvcm1hbHMubGVuZ3RoOyBpICs9IDMpIHsKICAgICAgLy8gTm90ZSB0aGF0IFtvcmlnaW5hbF0gbWF5IGl0c2VsZiBiZSBjbG9uZS4gSWYgc28sIGl0IHdhcyBhZGRlZCB0bwogICAgICAvLyBbY2xvbmVkRm9ybWFsc10gYmVmb3JlIFtjbG9uZV0sIHNvIGl0J3MgaW5pdGlhbGl6ZXJzIGFyZSBhbHJlYWR5IGluCiAgICAgIC8vIHBsYWNlLgogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG9yaWdpbmFsID0gY2xvbmVkRm9ybWFsc1tpXTsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBjbG9uZSA9IGNsb25lZEZvcm1hbHNbaSArIDFdOwogICAgICBpZiAob3JpZ2luYWwuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oYWhlKTogSXQgaXMgdW5jbGVhciBpZiBpdCBpcyBsZWdhbCB0byB1c2UgdHlwZSB2YXJpYWJsZXMgaW4KICAgICAgICAvLyBkZWZhdWx0IHZhbHVlcywgYnV0IEZhc3RhIGlzIGN1cnJlbnRseSBhbGxvd2luZyBpdCwgYW5kIHRoZSBWTQogICAgICAgIC8vIGFjY2VwdHMgaXQuIElmIGl0IGlzbid0IGxlZ2FsLCB0aGUgd2UgY2FuIHNwZWVkIHRoaXMgdXAgYnkgdXNpbmcgYQogICAgICAgIC8vIHNpbmdsZSBjbG9uZXIgd2l0aG91dCBzdWJzdGl0dXRpb24uCiAgICAgICAgQ2xvbmVWaXNpdG9yIGNsb25lciA9CiAgICAgICAgICAgIG5ldyBDbG9uZVZpc2l0b3IodHlwZVN1YnN0aXR1dGlvbjogY2xvbmVkRm9ybWFsc1tpICsgMl0pOwogICAgICAgIGNsb25lLmluaXRpYWxpemVyID0gY2xvbmVyLmNsb25lKG9yaWdpbmFsLmluaXRpYWxpemVyKS4ucGFyZW50ID0gY2xvbmU7CiAgICAgIH0KICAgIH0KICAgIGNsb25lZEZvcm1hbHMuY2xlYXIoKTsKICAgIHRpY2tlci5sb2dNcygiQ2xvbmVkIGRlZmF1bHQgdmFsdWVzIG9mIGZvcm1hbHMiKTsKICB9CgogIENvbnN0cnVjdG9yIG1ha2VEZWZhdWx0Q29uc3RydWN0b3IoQ2xhc3MgZW5jbG9zaW5nQ2xhc3MpIHsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IoCiAgICAgICAgbmV3IEZ1bmN0aW9uTm9kZShuZXcgRW1wdHlTdGF0ZW1lbnQoKSwKICAgICAgICAgICAgcmV0dXJuVHlwZTogbWFrZUNvbnN0cnVjdG9yUmV0dXJuVHlwZShlbmNsb3NpbmdDbGFzcykpLAogICAgICAgIG5hbWU6IG5ldyBOYW1lKCIiKSwKICAgICAgICBpc1N5bnRoZXRpYzogdHJ1ZSk7CiAgfQoKICBEYXJ0VHlwZSBtYWtlQ29uc3RydWN0b3JSZXR1cm5UeXBlKENsYXNzIGVuY2xvc2luZ0NsYXNzKSB7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlUGFyYW1ldGVyVHlwZXMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnNbaV07CiAgICAgIHR5cGVQYXJhbWV0ZXJUeXBlcy5hZGQobmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIpKTsKICAgIH0KICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShlbmNsb3NpbmdDbGFzcywgdHlwZVBhcmFtZXRlclR5cGVzKTsKICB9CgogIHZvaWQgY29tcHV0ZUNvcmVUeXBlcygpIHsKICAgIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzID0gPExpYnJhcnk+W107CiAgICBmb3IgKFN0cmluZyBwbGF0Zm9ybUxpYnJhcnkgaW4gY29uc3QgWwogICAgICAiZGFydDpfaW50ZXJuYWwiLAogICAgICAiZGFydDphc3luYyIsCiAgICAgIC8vIFRPRE8oYXNrZXNjKTogV2hlbiBhbGwgYmFja2VuZHMgc3VwcG9ydCBzZXQgbGl0ZXJhbHMsIHdlIG5vIGxvbmdlcgogICAgICAvLyBuZWVkIHRvIGluZGV4IGRhcnQ6Y29sbGVjdGlvbiwgYXMgaXQgaXMgb25seSBuZWVkZWQgZm9yIGRlc3VnYXJpbmcgb2YKICAgICAgLy8gY29uc3Qgc2V0cy4gV2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoaXMgbGlzdCBhdCB0aGF0IHRpbWUuCiAgICAgICJkYXJ0OmNvbGxlY3Rpb24iLAogICAgICAiZGFydDpjb3JlIiwKICAgICAgImRhcnQ6bWlycm9ycyIKICAgIF0pIHsKICAgICAgVXJpIHVyaSA9IFVyaS5wYXJzZShwbGF0Zm9ybUxpYnJhcnkpOwogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gbG9hZGVyLmJ1aWxkZXJzW3VyaV07CiAgICAgIGlmIChsaWJyYXJ5ID09IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGFoZSk6IFRoaXMgaXMgd29ya2luZyBhcm91bmQgYSBidWcgaW4ga2VybmVsX2RyaXZlcl90ZXN0IG9yCiAgICAgICAgLy8ga2VybmVsX2RyaXZlci4KICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAgZm9yIChMaWJyYXJ5IHRhcmdldCBpbiBkaWxsVGFyZ2V0LmxvYWRlci5saWJyYXJpZXMpIHsKICAgICAgICAgIGlmICh0YXJnZXQuaW1wb3J0VXJpID09IHVyaSkgewogICAgICAgICAgICBsaWJyYXJpZXMuYWRkKHRhcmdldCk7CiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZm91bmQgJiYgdXJpLnBhdGggIT0gIm1pcnJvcnMiKSB7CiAgICAgICAgICAvLyBkYXJ0Om1pcnJvcnMgaXMgb3B0aW9uYWwuCiAgICAgICAgICB0aHJvdyAiQ2FuJ3QgZmluZCAkdXJpIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGlicmFyaWVzLmFkZChsaWJyYXJ5LnRhcmdldCk7CiAgICAgIH0KICAgIH0KICAgIENvbXBvbmVudCBwbGF0Zm9ybUxpYnJhcmllcyA9CiAgICAgICAgYmFja2VuZFRhcmdldC5jb25maWd1cmVDb21wb25lbnQobmV3IENvbXBvbmVudCgpKTsKICAgIC8vIEFkZCBsaWJyYXJpZXMgZGlyZWN0bHkgdG8gcHJldmVudCB0aGF0IHRoZWlyIHBhcmVudHMgYXJlIGNoYW5nZWQuCiAgICBwbGF0Zm9ybUxpYnJhcmllcy5saWJyYXJpZXMuYWRkQWxsKGxpYnJhcmllcyk7CiAgICBsb2FkZXIuY29tcHV0ZUNvcmVUeXBlcyhwbGF0Zm9ybUxpYnJhcmllcyk7CiAgfQoKICB2b2lkIGZpbmlzaEFsbENvbnN0cnVjdG9ycyhMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gYnVpbGRlcnMpIHsKICAgIENsYXNzIG9iamVjdENsYXNzID0gdGhpcy5vYmplY3RDbGFzczsKICAgIGZvciAoU291cmNlQ2xhc3NCdWlsZGVyIGJ1aWxkZXIgaW4gYnVpbGRlcnMpIHsKICAgICAgQ2xhc3MgY2xzID0gYnVpbGRlci50YXJnZXQ7CiAgICAgIGlmIChjbHMgIT0gb2JqZWN0Q2xhc3MpIHsKICAgICAgICBmaW5pc2hDb25zdHJ1Y3RvcnMoYnVpbGRlcik7CiAgICAgIH0KICAgIH0KICAgIHRpY2tlci5sb2dNcygiRmluaXNoZWQgY29uc3RydWN0b3JzIik7CiAgfQoKICAvLy8gRW5zdXJlIGNvbnN0cnVjdG9ycyBvZiBbY2xzXSBoYXZlIHRoZSBjb3JyZWN0IGluaXRpYWxpemVycyBhbmQgb3RoZXIKICAvLy8gcmVxdWlyZW1lbnRzLgogIHZvaWQgZmluaXNoQ29uc3RydWN0b3JzKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyKSB7CiAgICBpZiAoYnVpbGRlci5pc1BhdGNoKSByZXR1cm47CiAgICBDbGFzcyBjbHMgPSBidWlsZGVyLnRhcmdldDsKCiAgICAvLy8gUXVvdGVzIGJlbG93IGFyZSBmcm9tIFtEYXJ0IFByb2dyYW1taW5nIExhbmd1YWdlIFNwZWNpZmljYXRpb24sIDR0aAogICAgLy8vIEVkaXRpb25dKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FQ01BLTQwOC5wZGYpOgogICAgTGlzdDxGaWVsZD4gdW5pbml0aWFsaXplZEZpZWxkcyA9IDxGaWVsZD5bXTsKICAgIExpc3Q8RmllbGQ+IG5vbkZpbmFsRmllbGRzID0gPEZpZWxkPltdOwogICAgZm9yIChGaWVsZCBmaWVsZCBpbiBjbHMuZmllbGRzKSB7CiAgICAgIGlmIChmaWVsZC5pc0luc3RhbmNlTWVtYmVyICYmICFmaWVsZC5pc0ZpbmFsKSB7CiAgICAgICAgbm9uRmluYWxGaWVsZHMuYWRkKGZpZWxkKTsKICAgICAgfQogICAgICBpZiAoZmllbGQuaW5pdGlhbGl6ZXIgPT0gbnVsbCkgewogICAgICAgIHVuaW5pdGlhbGl6ZWRGaWVsZHMuYWRkKGZpZWxkKTsKICAgICAgfQogICAgfQogICAgTWFwPENvbnN0cnVjdG9yLCBTZXQ8RmllbGQ+PiBjb25zdHJ1Y3RvckluaXRpYWxpemVkRmllbGRzID0KICAgICAgICA8Q29uc3RydWN0b3IsIFNldDxGaWVsZD4+e307CiAgICBDb25zdHJ1Y3RvciBzdXBlclRhcmdldDsKICAgIGZvciAoQ29uc3RydWN0b3IgY29uc3RydWN0b3IgaW4gY2xzLmNvbnN0cnVjdG9ycykgewogICAgICBib29sIGlzUmVkaXJlY3RpbmcgPSBmYWxzZTsKICAgICAgZm9yIChJbml0aWFsaXplciBpbml0aWFsaXplciBpbiBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMpIHsKICAgICAgICBpZiAoaW5pdGlhbGl6ZXIgaXMgUmVkaXJlY3RpbmdJbml0aWFsaXplcikgewogICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3QgJiYgIWluaXRpYWxpemVyLnRhcmdldC5pc0NvbnN0KSB7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkUHJvYmxlbShtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdCwKICAgICAgICAgICAgICAgIGluaXRpYWxpemVyLmZpbGVPZmZzZXQsIGluaXRpYWxpemVyLnRhcmdldC5uYW1lLm5hbWUubGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlzUmVkaXJlY3RpbmcgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghaXNSZWRpcmVjdGluZykgewogICAgICAgIC8vLyA+SWYgbm8gc3VwZXJpbml0aWFsaXplciBpcyBwcm92aWRlZCwgYW4gaW1wbGljaXQgc3VwZXJpbml0aWFsaXplcgogICAgICAgIC8vLyA+b2YgdGhlIGZvcm0gc3VwZXIoKSBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIGvigJlzIGluaXRpYWxpemVyIGxpc3QsCiAgICAgICAgLy8vID51bmxlc3MgdGhlIGVuY2xvc2luZyBjbGFzcyBpcyBjbGFzcyBPYmplY3QuCiAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5pc0VtcHR5KSB7CiAgICAgICAgICBzdXBlclRhcmdldCA/Pz0gZGVmYXVsdFN1cGVyQ29uc3RydWN0b3IoY2xzKTsKICAgICAgICAgIEluaXRpYWxpemVyIGluaXRpYWxpemVyOwogICAgICAgICAgaWYgKHN1cGVyVGFyZ2V0ID09IG51bGwpIHsKICAgICAgICAgICAgaW50IG9mZnNldCA9IGNvbnN0cnVjdG9yLmZpbGVPZmZzZXQ7CiAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gLTEgJiYgY29uc3RydWN0b3IuaXNTeW50aGV0aWMpIHsKICAgICAgICAgICAgICBvZmZzZXQgPSBjbHMuZmlsZU9mZnNldDsKICAgICAgICAgICAgfQogICAgICAgICAgICBidWlsZGVyLmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGNscy5zdXBlcmNsYXNzLm5hbWUpLAogICAgICAgICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICAgICAgICBpbml0aWFsaXplciA9IG5ldyBJbnZhbGlkSW5pdGlhbGl6ZXIoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGluaXRpYWxpemVyID0KICAgICAgICAgICAgICAgIG5ldyBTdXBlckluaXRpYWxpemVyKHN1cGVyVGFyZ2V0LCBuZXcgQXJndW1lbnRzLmVtcHR5KCkpCiAgICAgICAgICAgICAgICAgIC4uaXNTeW50aGV0aWMgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmFkZChpbml0aWFsaXplcik7CiAgICAgICAgICBpbml0aWFsaXplci5wYXJlbnQgPSBjb25zdHJ1Y3RvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkgPT0gbnVsbCkgewogICAgICAgICAgLy8vID5JZiBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgYyBpcyBub3QgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3RvcgogICAgICAgICAgLy8vID5hbmQgbm8gYm9keSBpcyBwcm92aWRlZCwgdGhlbiBjIGltcGxpY2l0bHkgaGFzIGFuIGVtcHR5IGJvZHkge30uCiAgICAgICAgICAvLy8gV2UgdXNlIGFuIGVtcHR5IHN0YXRlbWVudCBpbnN0ZWFkLgogICAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24uYm9keSA9IG5ldyBFbXB0eVN0YXRlbWVudCgpOwogICAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24uYm9keS5wYXJlbnQgPSBjb25zdHJ1Y3Rvci5mdW5jdGlvbjsKICAgICAgICB9CgogICAgICAgIFNldDxGaWVsZD4gbXlJbml0aWFsaXplZEZpZWxkcyA9IG5ldyBTZXQ8RmllbGQ+KCk7CiAgICAgICAgZm9yIChJbml0aWFsaXplciBpbml0aWFsaXplciBpbiBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMpIHsKICAgICAgICAgIGlmIChpbml0aWFsaXplciBpcyBGaWVsZEluaXRpYWxpemVyKSB7CiAgICAgICAgICAgIG15SW5pdGlhbGl6ZWRGaWVsZHMuYWRkKGluaXRpYWxpemVyLmZpZWxkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbAogICAgICAgICAgICBpbiBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgICAgaWYgKGZvcm1hbC5pc0ZpZWxkRm9ybWFsKSB7CiAgICAgICAgICAgIEJ1aWxkZXIgZmllbGRCdWlsZGVyID0gYnVpbGRlci5zY29wZS5sb2NhbFtmb3JtYWwubmFtZV0gPz8KICAgICAgICAgICAgICAgIGJ1aWxkZXIub3JpZ2luLnNjb3BlLmxvY2FsW2Zvcm1hbC5uYW1lXTsKICAgICAgICAgICAgaWYgKGZpZWxkQnVpbGRlciBpcyBGaWVsZEJ1aWxkZXIpIHsKICAgICAgICAgICAgICBteUluaXRpYWxpemVkRmllbGRzLmFkZChmaWVsZEJ1aWxkZXIuZmllbGQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZWRGaWVsZHNbY29uc3RydWN0b3JdID0gbXlJbml0aWFsaXplZEZpZWxkczsKICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNDb25zdCAmJiBub25GaW5hbEZpZWxkcy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBidWlsZGVyLmFkZFByb2JsZW0obWVzc2FnZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkLAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmZpbGVPZmZzZXQsIG5vTGVuZ3RoLAogICAgICAgICAgICAgIGNvbnRleHQ6IG5vbkZpbmFsRmllbGRzCiAgICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiBtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZQogICAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihmaWVsZC5maWxlVXJpLCBmaWVsZC5maWxlT2Zmc2V0LCBub0xlbmd0aCkpCiAgICAgICAgICAgICAgICAgIC50b0xpc3QoKSk7CiAgICAgICAgICBub25GaW5hbEZpZWxkcy5jbGVhcigpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgU2V0PEZpZWxkPiBpbml0aWFsaXplZEZpZWxkczsKICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZWRGaWVsZHMKICAgICAgICAuZm9yRWFjaCgoQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIFNldDxGaWVsZD4gZmllbGRzKSB7CiAgICAgIGlmIChpbml0aWFsaXplZEZpZWxkcyA9PSBudWxsKSB7CiAgICAgICAgaW5pdGlhbGl6ZWRGaWVsZHMgPSBuZXcgU2V0PEZpZWxkPi5mcm9tKGZpZWxkcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5pdGlhbGl6ZWRGaWVsZHMuYWRkQWxsKGZpZWxkcyk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFJ1biB0aHJvdWdoIGFsbCBmaWVsZHMgdGhhdCBhcmVuJ3QgaW5pdGlhbGl6ZWQgYnkgYW55IGNvbnN0cnVjdG9yLCBhbmQKICAgIC8vIHNldCB0aGVpciBpbml0aWFsaXplciB0byBgbnVsbGAuCiAgICBmb3IgKEZpZWxkIGZpZWxkIGluIHVuaW5pdGlhbGl6ZWRGaWVsZHMpIHsKICAgICAgaWYgKGluaXRpYWxpemVkRmllbGRzID09IG51bGwgfHwgIWluaXRpYWxpemVkRmllbGRzLmNvbnRhaW5zKGZpZWxkKSkgewogICAgICAgIGZpZWxkLmluaXRpYWxpemVyID0gbmV3IE51bGxMaXRlcmFsKCkuLnBhcmVudCA9IGZpZWxkOwogICAgICAgIGlmIChmaWVsZC5pc0ZpbmFsICYmCiAgICAgICAgICAgIChjbHMuY29uc3RydWN0b3JzLmlzTm90RW1wdHkgfHwgY2xzLmlzTWl4aW5EZWNsYXJhdGlvbikpIHsKICAgICAgICAgIFN0cmluZyB1cmkgPSAnJHtmaWVsZC5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaX0nOwogICAgICAgICAgU3RyaW5nIGZpbGUgPSBmaWVsZC5maWxlVXJpLnBhdGhTZWdtZW50cy5sYXN0OwogICAgICAgICAgaWYgKHVyaSA9PSAnZGFydDpodG1sJyB8fAogICAgICAgICAgICAgIHVyaSA9PSAnZGFydDpzdmcnIHx8CiAgICAgICAgICAgICAgdXJpID09ICdkYXJ0Ol9uYXRpdmVfdHlwZWRfZGF0YScgfHwKICAgICAgICAgICAgICB1cmkgPT0gJ2RhcnQ6X2ludGVyY2VwdG9ycycgJiYgZmlsZSA9PSAnanNfc3RyaW5nLmRhcnQnKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBleHRlcm5hbCBnZXR0ZXJzIGluc3RlYWQgb2YgZmluYWwKICAgICAgICAgICAgLy8gZmllbGRzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzMzNzYyCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWlsZGVyLmxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkLndpdGhBcmd1bWVudHMoZmllbGQubmFtZS5uYW1lKSwKICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICBmaWVsZC5uYW1lLm5hbWUubGVuZ3RoLAogICAgICAgICAgICAgICAgZmllbGQuZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gUnVuIHRocm91Z2ggYWxsIGZpZWxkcyB0aGF0IGFyZSBpbml0aWFsaXplZCBieSBzb21lIGNvbnN0cnVjdG9yLCBhbmQKICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBvdGhlciBjb25zdHJ1Y3RvcnMgYWxzbyBpbml0aWFsaXplIHRoZW0uCiAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVkRmllbGRzCiAgICAgICAgLmZvckVhY2goKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBTZXQ8RmllbGQ+IGZpZWxkcykgewogICAgICBmb3IgKEZpZWxkIGZpZWxkIGluIGluaXRpYWxpemVkRmllbGRzLmRpZmZlcmVuY2UoZmllbGRzKSkgewogICAgICAgIGlmIChmaWVsZC5pbml0aWFsaXplciA9PSBudWxsKSB7CiAgICAgICAgICBGaWVsZEluaXRpYWxpemVyIGluaXRpYWxpemVyID0KICAgICAgICAgICAgICBuZXcgRmllbGRJbml0aWFsaXplcihmaWVsZCwgbmV3IE51bGxMaXRlcmFsKCkpCiAgICAgICAgICAgICAgICAuLmlzU3ludGhldGljID0gdHJ1ZTsKICAgICAgICAgIGluaXRpYWxpemVyLnBhcmVudCA9IGNvbnN0cnVjdG9yOwogICAgICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmluc2VydCgwLCBpbml0aWFsaXplcik7CiAgICAgICAgICBpZiAoZmllbGQuaXNGaW5hbCkgewogICAgICAgICAgICBidWlsZGVyLmxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZpZWxkLm5hbWUubmFtZSksCiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgY29uc3RydWN0b3IubmFtZS5uYW1lLmxlbmd0aCwKICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmZpbGVVcmksCiAgICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UKICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZpZWxkLm5hbWUubmFtZSkKICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oZmllbGQuZmlsZVVyaSwgZmllbGQuZmlsZU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lLm5hbWUubGVuZ3RoKQogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIC8vLyBSdW4gYWxsIHRyYW5zZm9ybWF0aW9ucyB0aGF0IGFyZSBuZWVkZWQgd2hlbiBidWlsZGluZyBhIGJ1bmRsZSBvZgogIC8vLyBsaWJyYXJpZXMgZm9yIHRoZSBmaXJzdCB0aW1lLgogIHZvaWQgcnVuQnVpbGRUcmFuc2Zvcm1hdGlvbnMoKSB7CiAgICBiYWNrZW5kVGFyZ2V0LnBlcmZvcm1QcmVDb25zdGFudEV2YWx1YXRpb25UcmFuc2Zvcm1hdGlvbnMoCiAgICAgICAgY29tcG9uZW50LAogICAgICAgIGxvYWRlci5jb3JlVHlwZXMsCiAgICAgICAgbG9hZGVyLmxpYnJhcmllcywKICAgICAgICBuZXcgS2VybmVsRGlhZ25vc3RpY1JlcG9ydGVyKGxvYWRlciksCiAgICAgICAgbG9nZ2VyOiAoU3RyaW5nIG1zZykgPT4gdGlja2VyLmxvZ01zKG1zZykpOwogICAgaWYgKGxvYWRlci50YXJnZXQuZW5hYmxlQ29uc3RhbnRVcGRhdGUyMDE4KSB7CiAgICAgIFR5cGVFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9CiAgICAgICAgICBuZXcgVHlwZUVudmlyb25tZW50KGxvYWRlci5jb3JlVHlwZXMsIGxvYWRlci5oaWVyYXJjaHkpOwogICAgICBjb25zdGFudHMudHJhbnNmb3JtTGlicmFyaWVzKAogICAgICAgICAgbG9hZGVyLmxpYnJhcmllcywKICAgICAgICAgIGJhY2tlbmRUYXJnZXQuY29uc3RhbnRzQmFja2VuZChsb2FkZXIuY29yZVR5cGVzKSwKICAgICAgICAgIGVudmlyb25tZW50RGVmaW5lcywKICAgICAgICAgIGVudmlyb25tZW50LAogICAgICAgICAgbmV3IEtlcm5lbENvbnN0YW50RXJyb3JSZXBvcnRlcihsb2FkZXIpLAogICAgICAgICAgZGVzdWdhclNldHM6ICFiYWNrZW5kVGFyZ2V0LnN1cHBvcnRzU2V0TGl0ZXJhbHMsCiAgICAgICAgICBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudDogZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQpOwogICAgICB0aWNrZXIubG9nTXMoIkV2YWx1YXRlZCBjb25zdGFudHMiKTsKICAgIH0KICAgIGJhY2tlbmRUYXJnZXQucGVyZm9ybU1vZHVsYXJUcmFuc2Zvcm1hdGlvbnNPbkxpYnJhcmllcygKICAgICAgICBjb21wb25lbnQsCiAgICAgICAgbG9hZGVyLmNvcmVUeXBlcywKICAgICAgICBsb2FkZXIuaGllcmFyY2h5LAogICAgICAgIGxvYWRlci5saWJyYXJpZXMsCiAgICAgICAgZW52aXJvbm1lbnREZWZpbmVzLAogICAgICAgIG5ldyBLZXJuZWxEaWFnbm9zdGljUmVwb3J0ZXIobG9hZGVyKSwKICAgICAgICBsb2dnZXI6IChTdHJpbmcgbXNnKSA9PiB0aWNrZXIubG9nTXMobXNnKSk7CiAgfQoKICB2b2lkIHJ1blByb2NlZHVyZVRyYW5zZm9ybWF0aW9ucyhQcm9jZWR1cmUgcHJvY2VkdXJlKSB7CiAgICBiYWNrZW5kVGFyZ2V0LnBlcmZvcm1UcmFuc2Zvcm1hdGlvbnNPblByb2NlZHVyZSgKICAgICAgICBsb2FkZXIuY29yZVR5cGVzLCBsb2FkZXIuaGllcmFyY2h5LCBwcm9jZWR1cmUsCiAgICAgICAgbG9nZ2VyOiAoU3RyaW5nIG1zZykgPT4gdGlja2VyLmxvZ01zKG1zZykpOwogIH0KCiAgdm9pZCB2ZXJpZnkoKSB7CiAgICAvLyBUT0RPKGFoZSk6IEhvdyB0byBoYW5kbGUgZXJyb3JzLgogICAgdmVyaWZ5Q29tcG9uZW50KGNvbXBvbmVudCk7CiAgICB0aWNrZXIubG9nTXMoIlZlcmlmaWVkIGNvbXBvbmVudCIpOwogIH0KCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgdGhlIGdpdmVuIFtsaWJyYXJ5XSB3YXMgYnVpbHQgYnkgdGhpcyBbS2VybmVsVGFyZ2V0XQogIC8vLyBmcm9tIHNvdXJjZXMsIGFuZCBub3QgbG9hZGVkIGZyb20gYSBbRGlsbFRhcmdldF0uCiAgYm9vbCBpc1NvdXJjZUxpYnJhcnkoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gbG9hZGVyLmxpYnJhcmllcy5jb250YWlucyhsaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVhZFBhdGNoRmlsZXMoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgYXNzZXJ0KGxpYnJhcnkudXJpLnNjaGVtZSA9PSAiZGFydCIpOwogICAgTGlzdDxVcmk+IHBhdGNoZXMgPSB1cmlUcmFuc2xhdG9yLmdldERhcnRQYXRjaGVzKGxpYnJhcnkudXJpLnBhdGgpOwogICAgaWYgKHBhdGNoZXMgIT0gbnVsbCkgewogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBmaXJzdDsKICAgICAgZm9yIChVcmkgcGF0Y2ggaW4gcGF0Y2hlcykgewogICAgICAgIGlmIChmaXJzdCA9PSBudWxsKSB7CiAgICAgICAgICBmaXJzdCA9IGxpYnJhcnkubG9hZGVyLnJlYWQocGF0Y2gsIC0xLAogICAgICAgICAgICAgIGZpbGVVcmk6IHBhdGNoLCBvcmlnaW46IGxpYnJhcnksIGFjY2Vzc29yOiBsaWJyYXJ5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gSWYgdGhlcmUncyBtb3JlIHRoYW4gb25lIHBhdGNoIGZpbGUsIGl0J3MgaW50ZXJwcmV0ZWQgYXMgYSBwYXJ0IG9mCiAgICAgICAgICAvLyB0aGUgcGF0Y2ggbGlicmFyeS4KICAgICAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcnQgPSBsaWJyYXJ5LmxvYWRlci5yZWFkKHBhdGNoLCAtMSwKICAgICAgICAgICAgICBvcmlnaW46IGxpYnJhcnksIGZpbGVVcmk6IHBhdGNoLCBhY2Nlc3NvcjogbGlicmFyeSk7CiAgICAgICAgICBmaXJzdC5wYXJ0cy5hZGQocGFydCk7CiAgICAgICAgICBmaXJzdC5wYXJ0T2Zmc2V0cy5hZGQoLTEpOwogICAgICAgICAgcGFydC5wYXJ0T2ZVcmkgPSBmaXJzdC51cmk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgovLy8gTG9va3MgZm9yIGEgY29uc3RydWN0b3IgY2FsbCB0aGF0IG1hdGNoZXMgYHN1cGVyKClgIGZyb20gYSBjb25zdHJ1Y3RvciBpbgovLy8gW2Nsc10uIFN1Y2ggYSBjb25zdHJ1Y3RvciBtYXkgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMsIGJ1dCBubyByZXF1aXJlZAovLy8gYXJndW1lbnRzLgpDb25zdHJ1Y3RvciBkZWZhdWx0U3VwZXJDb25zdHJ1Y3RvcihDbGFzcyBjbHMpIHsKICBDbGFzcyBzdXBlcmNsYXNzID0gY2xzLnN1cGVyY2xhc3M7CiAgaWYgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgZm9yIChDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiBzdXBlcmNsYXNzLmNvbnN0cnVjdG9ycykgewogICAgICBpZiAoY29uc3RydWN0b3IubmFtZS5uYW1lLmlzRW1wdHkpIHsKICAgICAgICByZXR1cm4gY29uc3RydWN0b3IuZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9PSAwCiAgICAgICAgICAgID8gY29uc3RydWN0b3IKICAgICAgICAgICAgOiBudWxsOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9CgpjbGFzcyBLZXJuZWxEaWFnbm9zdGljUmVwb3J0ZXIKICAgIGV4dGVuZHMgRGlhZ25vc3RpY1JlcG9ydGVyPE1lc3NhZ2UsIExvY2F0ZWRNZXNzYWdlPiB7CiAgZmluYWwgTG9hZGVyIGxvYWRlcjsKCiAgS2VybmVsRGlhZ25vc3RpY1JlcG9ydGVyKHRoaXMubG9hZGVyKTsKCiAgdm9pZCByZXBvcnQoTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwgVXJpIGZpbGVVcmksCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgbG9hZGVyLmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmksIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KfQqDcABOTjwBHQEhASEJExcPExUSGBQPGhYVFxwRDhkVEyAQGhcbHRUBNgE7AUUBRAE/ATgBMAEzAUIBOwElARoJGi4zNhIqNyQsMwEqAS4BRgFKATkBQgE0AUcBHQkWERwWGhoYFSABQQE5AS0BMj0fATUeAR8BNC0BFwEXAUkBTAFFATMBTwExOgEqQgExAU0jLSEvTB0EASE7AR1QG0AEAUc0IigqKRMYGBUVERFHKzo5NzM4Di0vKFBFI0gYFyEmJxcQDgwIHk0GEwQBDCc7HzUdGAgGQwQBODA+QCY3Ji1BIAwKCAgTBAEqICIaHD0iHyAEAQxEKzQqJC4YTB0lEVERTx1PKzVDHywiLyQSThpBITIpHCguMzMlKEArGDMEAUZOS09ABkgRDEErNCoiICstPyQjKCEBIUAYMwQBJDUrLwY8Q0UGBAFJJUYzATsuJ0seFAYBKgFKTiAxTy0wNQgtNjUvNQoIBgElRQYBJhYEASQqQCY3JjIzLCY8TSwOMkpJDgwKCAg9BAFJKjM/HyojFAoqMhEuCggGNgQBQQEzAUY/KSJNOEo4IgYBRVFMSUhNBAFDKDIySQ4GAUVRShcNAUtKTT0fKiYkJA1IMAYoMAYlMFEPNzpGS1EKCDJPDU0wBgQBRk9BKTY9IT4IEwYBTkkyNyQ4NEIGTzZEIiVABkM0Kk01OT8lIDIbPwQBIjhKTRA3OCpMSk4vHkZQCAYbNgQBPRwvRBwcBAE9PkVGRAZCBAEcKysYFExPQxkTFQksNR1MGhw+KSMaEwwKLycjCg8nCAYiO0kzMAQBQiozIiAlCAYrBAFLFDghIAFMXTEsJjYjCCcoCAZAJR04IkI1RE1ODCARCggcTk45MDgjJTE7Jw4gOjkYGzQTGkkoDDUsCjFOUDE8QwoBO0QxOAwKKDwmRzkwOw4MCklAQzAmTFAeIgoIBiIhQCc5DyoICAFOKC9NPx1HPjkkIzJJSkkTKFEiKCAMCggGAUxDIUBCKSk9Jiw7Hyg+NSguJRs1NkUyFAwKCAgEAUgkIz8TGhouNDIkQyQcPB4XMztDKwY8ExoaGhwuNAQBOjU3NAQBEiggKAQBTDgqLwQBDDYqSBsiIx0xQxFQIEVDISUmCggGBAIBTksPMSUcPytAGhQIBgQPAgEfOhcBKQFIKFEEAgE1cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfdGFyZ2V0LmRhcnQ2c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC91dGlscy5kYXJ0kfYvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAnZGFydDppbycgc2hvdyBCeXRlc0J1aWxkZXIsIEZpbGUsIElPU2luazsKCmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJyBzaG93IFVpbnQ4TGlzdDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xvbmUuZGFydCcgc2hvdyBDbG9uZVZpc2l0b3I7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIERhcnRUeXBlLAogICAgICAgIExpYnJhcnksCiAgICAgICAgQ29tcG9uZW50LAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBDbGFzcywKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlLAogICAgICAgIFN1cGVydHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydCcgc2hvdyBCaW5hcnlQcmludGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvbGltaXRlZF9hc3RfdG9fYmluYXJ5LmRhcnQnCiAgICBzaG93IExpbWl0ZWRCaW5hcnlQcmludGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90ZXh0L2FzdF90b190ZXh0LmRhcnQnIHNob3cgUHJpbnRlcjsKCi8vLyBQcmludCB0aGUgZ2l2ZW4gW2NvbXBvbmVudF0uICBEbyBub3RoaW5nIGlmIGl0IGlzIGBudWxsYC4gIElmIHRoZQovLy8gW2xpYnJhcnlGaWx0ZXJdIGlzIHByb3ZpZGVkLCB0aGVuIG9ubHkgbGlicmFyaWVzIHRoYXQgc2F0aXNmeSBpdCBhcmUKLy8vIHByaW50ZWQuCnZvaWQgcHJpbnRDb21wb25lbnRUZXh0KENvbXBvbmVudCBjb21wb25lbnQsCiAgICB7Ym9vbCBsaWJyYXJ5RmlsdGVyKExpYnJhcnkgbGlicmFyeSl9KSB7CiAgaWYgKGNvbXBvbmVudCA9PSBudWxsKSByZXR1cm47CiAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIFByaW50ZXIgcHJpbnRlciA9IG5ldyBQcmludGVyKHNiKTsKICBwcmludGVyLndyaXRlQ29tcG9uZW50UHJvYmxlbXMoY29tcG9uZW50KTsKICBmb3IgKExpYnJhcnkgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICBpZiAobGlicmFyeUZpbHRlciAhPSBudWxsICYmICFsaWJyYXJ5RmlsdGVyKGxpYnJhcnkpKSBjb250aW51ZTsKICAgIHByaW50ZXIud3JpdGVMaWJyYXJ5RmlsZShsaWJyYXJ5KTsKICB9CiAgcHJpbnRlci53cml0ZUNvbnN0YW50VGFibGUoY29tcG9uZW50KTsKICBwcmludChzYik7Cn0KCi8vLyBXcml0ZSBbY29tcG9uZW50XSB0byBmaWxlIG9ubHkgaW5jbHVkaW5nIGxpYnJhcmllcyB0aGF0IG1hdGNoIFtmaWx0ZXJdLgpGdXR1cmU8TnVsbD4gd3JpdGVDb21wb25lbnRUb0ZpbGUoQ29tcG9uZW50IGNvbXBvbmVudCwgVXJpIHVyaSwKICAgIHtib29sIGZpbHRlcihMaWJyYXJ5IGxpYnJhcnkpfSkgYXN5bmMgewogIEZpbGUgb3V0cHV0ID0gbmV3IEZpbGUuZnJvbVVyaSh1cmkpOwogIElPU2luayBzaW5rID0gb3V0cHV0Lm9wZW5Xcml0ZSgpOwogIHRyeSB7CiAgICBCaW5hcnlQcmludGVyIHByaW50ZXIgPSBmaWx0ZXIgPT0gbnVsbAogICAgICAgID8gbmV3IEJpbmFyeVByaW50ZXIoc2luaykKICAgICAgICA6IG5ldyBMaW1pdGVkQmluYXJ5UHJpbnRlcihzaW5rLCBmaWx0ZXIgPz8gKF8pID0+IHRydWUsIGZhbHNlKTsKICAgIHByaW50ZXIud3JpdGVDb21wb25lbnRGaWxlKGNvbXBvbmVudCk7CiAgfSBmaW5hbGx5IHsKICAgIGF3YWl0IHNpbmsuY2xvc2UoKTsKICB9Cn0KCi8vLyBTZXJpYWxpemUgdGhlIGxpYnJhcmllcyBpbiBbY29tcG9uZW50XSB0aGF0IG1hdGNoIFtmaWx0ZXJdLgpVaW50OExpc3Qgc2VyaWFsaXplQ29tcG9uZW50KENvbXBvbmVudCBjb21wb25lbnQsCiAgICB7Ym9vbCBmaWx0ZXIoTGlicmFyeSBsaWJyYXJ5KSwKICAgIGJvb2wgaW5jbHVkZVNvdXJjZXM6IHRydWUsCiAgICBib29sIGluY2x1ZGVPZmZzZXRzOiB0cnVlfSkgewogIEJ5dGVTaW5rIGJ5dGVTaW5rID0gbmV3IEJ5dGVTaW5rKCk7CiAgQmluYXJ5UHJpbnRlciBwcmludGVyID0gZmlsdGVyID09IG51bGwKICAgICAgPyBuZXcgQmluYXJ5UHJpbnRlcihieXRlU2luaywKICAgICAgICAgIGluY2x1ZGVTb3VyY2VzOiBpbmNsdWRlU291cmNlcywgaW5jbHVkZU9mZnNldHM6IGluY2x1ZGVPZmZzZXRzKQogICAgICA6IG5ldyBMaW1pdGVkQmluYXJ5UHJpbnRlcihieXRlU2luaywgZmlsdGVyLCAhaW5jbHVkZVNvdXJjZXMsCiAgICAgICAgICBpbmNsdWRlT2Zmc2V0czogaW5jbHVkZU9mZnNldHMpOwogIHByaW50ZXIud3JpdGVDb21wb25lbnRGaWxlKGNvbXBvbmVudCk7CiAgcmV0dXJuIGJ5dGVTaW5rLmJ1aWxkZXIudGFrZUJ5dGVzKCk7Cn0KCmNvbnN0IFN0cmluZyBrRGVidWdDbGFzc05hbWUgPSAiI0RlYnVnQ2xhc3MiOwoKQ29tcG9uZW50IGNyZWF0ZUV4cHJlc3Npb25FdmFsdWF0aW9uQ29tcG9uZW50KFByb2NlZHVyZSBwcm9jZWR1cmUpIHsKICBMaWJyYXJ5IGZha2VMaWJyYXJ5ID0KICAgICAgbmV3IExpYnJhcnkobmV3IFVyaShzY2hlbWU6ICdldmFsdWF0ZScsIHBhdGg6ICdzb3VyY2UnKSk7CgogIGlmIChwcm9jZWR1cmUucGFyZW50IGlzIENsYXNzKSB7CiAgICBDbGFzcyByZWFsQ2xhc3MgPSBwcm9jZWR1cmUucGFyZW50OwoKICAgIENsYXNzIGZha2VDbGFzcyA9IG5ldyBDbGFzcyhuYW1lOiBrRGVidWdDbGFzc05hbWUpOwogICAgTWFwPFR5cGVQYXJhbWV0ZXIsIFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbXMgPQogICAgICAgIDxUeXBlUGFyYW1ldGVyLCBUeXBlUGFyYW1ldGVyPnt9OwogICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiB0eXBlU3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgZm9yIChUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbSBpbiByZWFsQ2xhc3MudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgdmFyIG5ld05vZGUgPSBuZXcgVHlwZVBhcmFtZXRlcih0eXBlUGFyYW0ubmFtZSk7CiAgICAgIHR5cGVQYXJhbXNbdHlwZVBhcmFtXSA9IG5ld05vZGU7CiAgICAgIHR5cGVTdWJzdGl0dXRpb25bdHlwZVBhcmFtXSA9IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShuZXdOb2RlKTsKICAgIH0KICAgIENsb25lVmlzaXRvciBjbG9uZXIgPSBuZXcgQ2xvbmVWaXNpdG9yKAogICAgICAgIHR5cGVTdWJzdGl0dXRpb246IHR5cGVTdWJzdGl0dXRpb24sIHR5cGVQYXJhbXM6IHR5cGVQYXJhbXMpOwoKICAgIGZvciAoVHlwZVBhcmFtZXRlciB0eXBlUGFyYW0gaW4gcmVhbENsYXNzLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIGZha2VDbGFzcy50eXBlUGFyYW1ldGVycy5hZGQodHlwZVBhcmFtLmFjY2VwdChjbG9uZXIpKTsKICAgIH0KCiAgICBmYWtlQ2xhc3MucGFyZW50ID0gZmFrZUxpYnJhcnk7CiAgICBpZiAocmVhbENsYXNzLnN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIC8vIHN1cGVydHlwZSBpcyBudWxsIGZvciBPYmplY3QuCiAgICAgIGZha2VDbGFzcy5zdXBlcnR5cGUgPSBuZXcgU3VwZXJ0eXBlLmJ5UmVmZXJlbmNlKAogICAgICAgICAgcmVhbENsYXNzLnN1cGVydHlwZS5jbGFzc05hbWUsCiAgICAgICAgICByZWFsQ2xhc3Muc3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMubWFwKGNsb25lci52aXNpdFR5cGUpLnRvTGlzdCgpKTsKICAgIH0KCiAgICAvLyBSZWJpbmQgdGhlIHR5cGUgcGFyYW1ldGVycyBpbiB0aGUgcHJvY2VkdXJlLgogICAgcHJvY2VkdXJlID0gcHJvY2VkdXJlLmFjY2VwdChjbG9uZXIpOwogICAgcHJvY2VkdXJlLnBhcmVudCA9IGZha2VDbGFzczsKICAgIGZha2VDbGFzcy5wcm9jZWR1cmVzLmFkZChwcm9jZWR1cmUpOwogICAgZmFrZUxpYnJhcnkuY2xhc3Nlcy5hZGQoZmFrZUNsYXNzKTsKICB9IGVsc2UgewogICAgZmFrZUxpYnJhcnkucHJvY2VkdXJlcy5hZGQocHJvY2VkdXJlKTsKICAgIHByb2NlZHVyZS5wYXJlbnQgPSBmYWtlTGlicmFyeTsKICB9CgogIC8vIFRPRE8odmVnb3JvdikgZmluZCBhIHdheSB0byBwcmVzZXJ2ZSBtZXRhZGF0YS4KICByZXR1cm4gbmV3IENvbXBvbmVudChsaWJyYXJpZXM6IFtmYWtlTGlicmFyeV0pOwp9CgpMaXN0PGludD4gc2VyaWFsaXplUHJvY2VkdXJlKFByb2NlZHVyZSBwcm9jZWR1cmUpIHsKICByZXR1cm4gc2VyaWFsaXplQ29tcG9uZW50KGNyZWF0ZUV4cHJlc3Npb25FdmFsdWF0aW9uQ29tcG9uZW50KHByb2NlZHVyZSkpOwp9CgovLy8gQSBbU2lua10gdGhhdCBkaXJlY3RseSB3cml0ZXMgZGF0YSBpbnRvIGEgYnl0ZSBidWlsZGVyLgpjbGFzcyBCeXRlU2luayBpbXBsZW1lbnRzIFNpbms8TGlzdDxpbnQ+PiB7CiAgZmluYWwgQnl0ZXNCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQnl0ZXNCdWlsZGVyKCk7CgogIHZvaWQgYWRkKExpc3Q8aW50PiBkYXRhKSB7CiAgICBidWlsZGVyLmFkZChkYXRhKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7fQp9CoCMAE5OPAEhATIBKQE2ASEJEhETEw8XGxMBRgE6HwE8AUZJDS0tISglLTFEJwQpDQIBTEAsJyQIKyJIKw4YBAIBQDIjHyImKSRKRCspJwIBLgFFGEABIygBODMqUUA3J0QGLEUBQD4GASQnJzcpTQYBNCoiKSgLKyQEATQyAgE0TQIBPCwzAR0XBAESAgEtcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC91dGlscy5kYXJ0OXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdmVyaWZpZXIuZGFydJdlLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudmVyaWZpZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFzRXhwcmVzc2lvbiwKICAgICAgICBDbGFzcywKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudCwKICAgICAgICBGaWVsZCwKICAgICAgICBMZXQsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBNZW1iZXIsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFN0YXRpY0ludm9jYXRpb24sCiAgICAgICAgU3VwZXJNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIFN1cGVyUHJvcGVydHlHZXQsCiAgICAgICAgU3VwZXJQcm9wZXJ0eVNldCwKICAgICAgICBUcmVlTm9kZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHJhbnNmb3JtYXRpb25zL2ZsYWdzLmRhcnQnIHNob3cgVHJhbnNmb3JtZXJGbGFnOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC92ZXJpZmllci5kYXJ0JyBzaG93IFZlcmlmeWluZ1Zpc2l0b3I7CgppbXBvcnQgJy4uL2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93IExvY2F0ZWRNZXNzYWdlLCBub0xlbmd0aCwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvcjsKCmltcG9ydCAnLi4vc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWEuZGFydCcgc2hvdyBUeXBlU2NoZW1hVmlzaXRvciwgVW5rbm93blR5cGU7CgppbXBvcnQgJ2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnIHNob3cgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50OwoKaW1wb3J0ICdyZWRpcmVjdGluZ19mYWN0b3J5X2JvZHkuZGFydCcKICAgIHNob3cgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSwgZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keTsKCkxpc3Q8TG9jYXRlZE1lc3NhZ2U+IHZlcmlmeUNvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50LAogICAge2Jvb2wgaXNPdXRsaW5lOiBmYWxzZSwgYm9vbCBza2lwUGxhdGZvcm06IGZhbHNlfSkgewogIEZhc3RhVmVyaWZ5aW5nVmlzaXRvciB2ZXJpZmllciA9CiAgICAgIG5ldyBGYXN0YVZlcmlmeWluZ1Zpc2l0b3IoaXNPdXRsaW5lLCBza2lwUGxhdGZvcm0pOwogIGNvbXBvbmVudC5hY2NlcHQodmVyaWZpZXIpOwogIHJldHVybiB2ZXJpZmllci5lcnJvcnM7Cn0KCmNsYXNzIEZhc3RhVmVyaWZ5aW5nVmlzaXRvciBleHRlbmRzIFZlcmlmeWluZ1Zpc2l0b3IKICAgIGltcGxlbWVudHMgVHlwZVNjaGVtYVZpc2l0b3I8dm9pZD4gewogIGZpbmFsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGVycm9ycyA9IDxMb2NhdGVkTWVzc2FnZT5bXTsKCiAgVXJpIGZpbGVVcmk7CiAgZmluYWwgYm9vbCBza2lwUGxhdGZvcm07CgogIEZhc3RhVmVyaWZ5aW5nVmlzaXRvcihib29sIGlzT3V0bGluZSwgdGhpcy5za2lwUGxhdGZvcm0pIHsKICAgIHRoaXMuaXNPdXRsaW5lID0gaXNPdXRsaW5lOwogIH0KCiAgVXJpIGNoZWNrTG9jYXRpb24oVHJlZU5vZGUgbm9kZSwgU3RyaW5nIG5hbWUsIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUuY29udGFpbnMoIiMiKSkgewogICAgICAvLyBUT0RPKGFoZSk6IEludmVzdGlnYXRlIGlmIHRoZXNlIGNoZWNrcyBjYW4gYmUgZW5hYmxlZDoKICAgICAgLy8gaWYgKG5vZGUuZmlsZVVyaSAhPSBudWxsICYmIG5vZGUgaXMhIExpYnJhcnkpIHsKICAgICAgLy8gICBwcm9ibGVtKG5vZGUsICJBIHN5bnRoZXRpYyBub2RlIHNob3VsZG4ndCBoYXZlIGEgZmlsZVVyaSIsCiAgICAgIC8vICAgICAgIGNvbnRleHQ6IG5vZGUpOwogICAgICAvLyB9CiAgICAgIC8vIGlmIChub2RlLmZpbGVPZmZzZXQgIT0gLTEpIHsKICAgICAgLy8gICBwcm9ibGVtKG5vZGUsICJBIHN5bnRoZXRpYyBub2RlIHNob3VsZG4ndCBoYXZlIGEgZmlsZU9mZnNldCIsCiAgICAgIC8vICAgICAgIGNvbnRleHQ6IG5vZGUpOwogICAgICAvLyB9CiAgICAgIHJldHVybiBmaWxlVXJpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGZpbGVVcmkgPT0gbnVsbCkgewogICAgICAgIHByb2JsZW0obm9kZSwgIickbmFtZScgaGFzIG5vIGZpbGVVcmkiLCBjb250ZXh0OiBub2RlKTsKICAgICAgICByZXR1cm4gZmlsZVVyaTsKICAgICAgfQogICAgICBpZiAobm9kZS5maWxlT2Zmc2V0ID09IC0xICYmIG5vZGUgaXMhIExpYnJhcnkpIHsKICAgICAgICBwcm9ibGVtKG5vZGUsICInJG5hbWUnIGhhcyBubyBmaWxlT2Zmc2V0IiwgY29udGV4dDogbm9kZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZpbGVVcmk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrU3VwZXJJbnZvY2F0aW9uKFRyZWVOb2RlIG5vZGUpIHsKICAgIHZhciBjb250YWluaW5nTWVtYmVyID0gZ2V0Q29udGFpbmluZ01lbWJlcihub2RlKTsKICAgIGlmIChjb250YWluaW5nTWVtYmVyID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAnU3VwZXIgY2FsbCBvdXRzaWRlIG9mIGFueSBtZW1iZXInKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjb250YWluaW5nTWVtYmVyLnRyYW5zZm9ybWVyRmxhZ3MgJiBUcmFuc2Zvcm1lckZsYWcuc3VwZXJDYWxscyA9PSAwKSB7CiAgICAgICAgcHJvYmxlbSgKICAgICAgICAgICAgbm9kZSwgJ1N1cGVyIGNhbGwgaW4gYSBtZW1iZXIgbGFja2luZyBUcmFuc2Zvcm1lckZsYWcuc3VwZXJDYWxscycpOwogICAgICB9CiAgICB9CiAgfQoKICBNZW1iZXIgZ2V0Q29udGFpbmluZ01lbWJlcihUcmVlTm9kZSBub2RlKSB7CiAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7CiAgICAgIGlmIChub2RlIGlzIE1lbWJlcikgcmV0dXJuIG5vZGU7CiAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgcHJvYmxlbShUcmVlTm9kZSBub2RlLCBTdHJpbmcgZGV0YWlscywge1RyZWVOb2RlIGNvbnRleHR9KSB7CiAgICBub2RlID8/PSAoY29udGV4dCA/PyB0aGlzLmNvbnRleHQpOwogICAgaW50IG9mZnNldCA9IG5vZGU/LmZpbGVPZmZzZXQgPz8gLTE7CiAgICBVcmkgZmlsZSA9IG5vZGU/LmxvY2F0aW9uPy5maWxlID8/IGZpbGVVcmk7CiAgICBVcmkgdXJpID0gZmlsZSA9PSBudWxsID8gbnVsbCA6IGZpbGU7CiAgICBMb2NhdGVkTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvcgogICAgICAgIC53aXRoQXJndW1lbnRzKGRldGFpbHMpCiAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIG9mZnNldCwgbm9MZW5ndGgpOwogICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQucmVwb3J0KG1lc3NhZ2UsIFNldmVyaXR5LmVycm9yKTsKICAgIGVycm9ycy5hZGQobWVzc2FnZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgewogICAgc3VwZXIudmlzaXRBc0V4cHJlc3Npb24obm9kZSk7CiAgICBpZiAobm9kZS5maWxlT2Zmc2V0ID09IC0xKSB7CiAgICAgIFRyZWVOb2RlIHBhcmVudCA9IG5vZGUucGFyZW50OwogICAgICB3aGlsZSAocGFyZW50ICE9IG51bGwpIHsKICAgICAgICBpZiAocGFyZW50LmZpbGVPZmZzZXQgIT0gLTEpIGJyZWFrOwogICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7CiAgICAgIH0KICAgICAgcHJvYmxlbShwYXJlbnQsICJObyBvZmZzZXQgZm9yICRub2RlIiwgY29udGV4dDogbm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICAvLyBCeXBhc3MgdmVyaWZpY2F0aW9uIG9mIHRoZSBbU3RhdGljR2V0XSBpbiBbUmVkaXJlY3RpbmdGYWN0b3J5Qm9keV0gYXMKICAgIC8vIHRoaXMgaXMgYSBzdGF0aWMgZ2V0IHdpdGhvdXQgYSBnZXR0ZXIuCiAgICBpZiAobm9kZSBpcyEgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSkgewogICAgICBzdXBlci52aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdExldChMZXQgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgIHByb2JsZW0obm9kZSwgIkxlYWtpbmcgc2hhZG93IG5vZGU6ICR7bm9kZS5ydW50aW1lVHlwZX0iKTsKICAgIH0KICAgIHN1cGVyLnZpc2l0TGV0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMaWJyYXJ5KExpYnJhcnkgbm9kZSkgewogICAgLy8gSXNzdWUoaHR0cDovL2RhcnRidWcuY29tLzMyNTMwKQogICAgaWYgKHNraXBQbGF0Zm9ybSAmJiBub2RlLmltcG9ydFVyaS5zY2hlbWUgPT0gJ2RhcnQnKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGZpbGVVcmkgPSBjaGVja0xvY2F0aW9uKG5vZGUsIG5vZGUubmFtZSwgbm9kZS5maWxlVXJpKTsKICAgIHN1cGVyLnZpc2l0TGlicmFyeShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2xhc3MoQ2xhc3Mgbm9kZSkgewogICAgZmlsZVVyaSA9IGNoZWNrTG9jYXRpb24obm9kZSwgbm9kZS5uYW1lLCBub2RlLmZpbGVVcmkpOwogICAgc3VwZXIudmlzaXRDbGFzcyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RmllbGQoRmllbGQgbm9kZSkgewogICAgZmlsZVVyaSA9IGNoZWNrTG9jYXRpb24obm9kZSwgbm9kZS5uYW1lLm5hbWUsIG5vZGUuZmlsZVVyaSk7CiAgICBzdXBlci52aXNpdEZpZWxkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRQcm9jZWR1cmUoUHJvY2VkdXJlIG5vZGUpIHsKICAgIGZpbGVVcmkgPSBjaGVja0xvY2F0aW9uKG5vZGUsIG5vZGUubmFtZS5uYW1lLCBub2RlLmZpbGVVcmkpOwogICAgc3VwZXIudmlzaXRQcm9jZWR1cmUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFVua25vd25UeXBlKFVua25vd25UeXBlIG5vZGUpIHsKICAgIC8vIE5vdGU6IHdlIGNhbid0IHBhc3MgW25vZGVdIHRvIFtwcm9ibGVtXSBiZWNhdXNlIGl0J3Mgbm90IGEgW1RyZWVOb2RlXS4KICAgIHByb2JsZW0obnVsbCwgIlVuZXhwZWN0ZWQgYXBwZWFyYW5jZSBvZiB0aGUgdW5rbm93biB0eXBlLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGNoZWNrU3VwZXJJbnZvY2F0aW9uKG5vZGUpOwogICAgc3VwZXIudmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN1cGVyUHJvcGVydHlHZXQoU3VwZXJQcm9wZXJ0eUdldCBub2RlKSB7CiAgICBjaGVja1N1cGVySW52b2NhdGlvbihub2RlKTsKICAgIHN1cGVyLnZpc2l0U3VwZXJQcm9wZXJ0eUdldChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChTdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIGNoZWNrU3VwZXJJbnZvY2F0aW9uKG5vZGUpOwogICAgc3VwZXIudmlzaXRTdXBlclByb3BlcnR5U2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgc3VwZXIudmlzaXRTdGF0aWNJbnZvY2F0aW9uKG5vZGUpOwogICAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSBib2R5ID0gZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keShub2RlLnRhcmdldCk7CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIkF0dGVtcHQgdG8gaW52b2tlIHJlZGlyZWN0aW5nIGZhY3RvcnkuIik7CiAgICB9CiAgfQp9CoDSAE5OPAEYASEJFg8THQ8NERATGh8aGhIBSQE9ATgBHU0BKQFRAUIBJzwBOjkjOh4aAgE1KToBDxsBPSAEAT8uQDlGHwsmSR8LFg0dQBgIN0MIFgYEAS02JDkNURFQCAYEAS4bJxoGEQQBDD8oKTAqRiAuPRkEAQwpIyElHywgCD0GBAEMN00uKywGBAEMFy9BBhoEAQwfJzsOBjweBAEMGzwcBAEMG0EcBAEMI0EgBAEMJ05BBAEMOyAsBAEMMSAnBAEMMSAnBAEMMSdKGD8GBAIBMHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdmVyaWZpZXIuZGFydDBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvbG9hZGVyLmRhcnSwGi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmxvYWRlcjsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBRdWV1ZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgQ2xhc3MsIERhcnRUeXBlLCBMaWJyYXJ5OwoKaW1wb3J0ICdidWlsZGVyL2J1aWxkZXIuZGFydCcKICAgIHNob3cgQ2xhc3NCdWlsZGVyLCBCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlciwgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJ2NyYXNoLmRhcnQnIHNob3cgZmlyc3RTb3VyY2VVcmk7CgppbXBvcnQgJ21lc3NhZ2VzLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9ybWF0dGVkTWVzc2FnZSwKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIFN1bW1hcnlUZW1wbGF0ZSwKICAgICAgICBUZW1wbGF0ZSwKICAgICAgICBtZXNzYWdlUGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2VzcywKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSwKICAgICAgICB0ZW1wbGF0ZVNvdXJjZUJvZHlTdW1tYXJ5OwoKaW1wb3J0ICdwcm9ibGVtcy5kYXJ0JyBzaG93IGludGVybmFsUHJvYmxlbSwgdW5oYW5kbGVkOwoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICd0YXJnZXRfaW1wbGVtZW50YXRpb24uZGFydCcgc2hvdyBUYXJnZXRJbXBsZW1lbnRhdGlvbjsKCmltcG9ydCAndGlja2VyLmRhcnQnIHNob3cgVGlja2VyOwoKY29uc3QgU3RyaW5nIHVudHJhbnNsYXRhYmxlVXJpU2NoZW1lID0gIm9yZy1kYXJ0bGFuZy11bnRyYW5zbGF0YWJsZS11cmkiOwoKYWJzdHJhY3QgY2xhc3MgTG9hZGVyIHsKICBmaW5hbCBNYXA8VXJpLCBMaWJyYXJ5QnVpbGRlcj4gYnVpbGRlcnMgPSA8VXJpLCBMaWJyYXJ5QnVpbGRlcj57fTsKCiAgZmluYWwgUXVldWU8TGlicmFyeUJ1aWxkZXI+IHVucGFyc2VkTGlicmFyaWVzID0gbmV3IFF1ZXVlPExpYnJhcnlCdWlsZGVyPigpOwoKICBmaW5hbCBMaXN0PExpYnJhcnk+IGxpYnJhcmllcyA9IDxMaWJyYXJ5PltdOwoKICBmaW5hbCBUYXJnZXRJbXBsZW1lbnRhdGlvbiB0YXJnZXQ7CgogIC8vLyBMaXN0IG9mIGFsbCBoYW5kbGVkIGNvbXBpbGUtdGltZSBlcnJvcnMgc2VlbiBzbyBmYXIgYnkgbGlicmFyaWVzIGxvYWRlZAogIC8vLyBieSB0aGlzIGxvYWRlci4KICAvLy8KICAvLy8gQSBoYW5kbGVkIGVycm9yIGlzIGFuIGVycm9yIHRoYXQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBBU1QKICAvLy8gYWxyZWFkeSwgZm9yIGV4YW1wbGUsIGFzIGEgdGhyb3cgZXhwcmVzc2lvbi4KICBmaW5hbCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBoYW5kbGVkRXJyb3JzID0gPExvY2F0ZWRNZXNzYWdlPltdOwoKICAvLy8gTGlzdCBvZiBhbGwgdW5oYW5kbGVkIGNvbXBpbGUtdGltZSBlcnJvcnMgc2VlbiBzbyBmYXIgYnkgbGlicmFyaWVzIGxvYWRlZAogIC8vLyBieSB0aGlzIGxvYWRlci4KICAvLy8KICAvLy8gQW4gdW5oYW5kbGVkIGVycm9yIGlzIGFuIGVycm9yIHRoYXQgaGFzbid0IGJlZW4gaGFuZGxlZCwgc2VlCiAgLy8vIFtoYW5kbGVkRXJyb3JzXS4KICBmaW5hbCBMaXN0PExvY2F0ZWRNZXNzYWdlPiB1bmhhbmRsZWRFcnJvcnMgPSA8TG9jYXRlZE1lc3NhZ2U+W107CgogIC8vLyBMaXN0IG9mIGFsbCBwcm9ibGVtcyBzZWVuIHNvIGZhciBieSBsaWJyYXJpZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyIHRoYXQKICAvLy8gZG9lcyBub3QgYmVsb25nIGRpcmVjdGx5IHRvIGEgbGlicmFyeS4KICBmaW5hbCBMaXN0PEZvcm1hdHRlZE1lc3NhZ2U+IGFsbENvbXBvbmVudFByb2JsZW1zID0gPEZvcm1hdHRlZE1lc3NhZ2U+W107CgogIGZpbmFsIFNldDxTdHJpbmc+IHNlZW5NZXNzYWdlcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICBMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeTsKCiAgLy8vIFRoZSBmaXJzdCBsaWJyYXJ5IHRoYXQgd2UndmUgYmVlbiBhc2tlZCB0byBjb21waWxlLiBXaGVuIGNvbXBpbGluZyBhCiAgLy8vIHByb2dyYW0gKGFrYSBzY3JpcHQpLCB0aGlzIGlzIHRoZSBsaWJyYXJ5IHRoYXQgc2hvdWxkIGhhdmUgYSBtYWluIG1ldGhvZC4KICBMaWJyYXJ5QnVpbGRlciBmaXJzdDsKCiAgaW50IGJ5dGVDb3VudCA9IDA7CgogIFVyaSBjdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmc7CgogIExvYWRlcih0aGlzLnRhcmdldCk7CgogIFRpY2tlciBnZXQgdGlja2VyID0+IHRhcmdldC50aWNrZXI7CgogIFRlbXBsYXRlPFN1bW1hcnlUZW1wbGF0ZT4gZ2V0IG91dGxpbmVTdW1tYXJ5VGVtcGxhdGU7CgogIGJvb2wgZ2V0IGlzU291cmNlTG9hZGVyID0+IGZhbHNlOwoKICAvLy8gTG9vayB1cCBhIGxpYnJhcnkgYnVpbGRlciBieSB0aGUgbmFtZSBbdXJpXSwgb3IgaWYgc3VjaCBkb2Vzbid0CiAgLy8vIGV4aXN0LCBjcmVhdGUgb25lLiBUaGUgY2Fub25pY2FsIFVSSSBvZiB0aGUgbGlicmFyeSBpcyBbdXJpXSwgYW5kIGl0cwogIC8vLyBhY3R1YWwgbG9jYXRpb24gaXMgW2ZpbGVVcmldLgogIC8vLwogIC8vLyBDYW5vbmljYWwgVVJJcyBoYXZlIHNjaGVtZXMgbGlrZSAiZGFydCIsIG9yICJwYWNrYWdlIiwgYW5kIHRoZSBhY3R1YWwKICAvLy8gbG9jYXRpb24gaXMgb2Z0ZW4gYSBmaWxlIFVSSS4KICAvLy8KICAvLy8gVGhlIFthY2Nlc3Nvcl0gaXMgdGhlIGxpYnJhcnkgdGhhdCdzIHRyeWluZyB0byBpbXBvcnQsIGV4cG9ydCwgb3IgaW5jbHVkZQogIC8vLyBhcyBwYXJ0IFt1cmldLCBhbmQgW2NoYXJPZmZzZXRdIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZwogIC8vLyBkaXJlY3RpdmUuIElmIFthY2Nlc3Nvcl0gaXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MgW3VyaV0sIGl0J3MgYQogIC8vLyBjb21waWxlLXRpbWUgZXJyb3IuCiAgTGlicmFyeUJ1aWxkZXIgcmVhZChVcmkgdXJpLCBpbnQgY2hhck9mZnNldCwKICAgICAge1VyaSBmaWxlVXJpLCBMaWJyYXJ5QnVpbGRlciBhY2Nlc3NvciwgTGlicmFyeUJ1aWxkZXIgb3JpZ2lufSkgewogICAgTGlicmFyeUJ1aWxkZXIgYnVpbGRlciA9IGJ1aWxkZXJzLnB1dElmQWJzZW50KHVyaSwgKCkgewogICAgICBpZiAoZmlsZVVyaSAhPSBudWxsICYmCiAgICAgICAgICAoZmlsZVVyaS5zY2hlbWUgPT0gImRhcnQiIHx8CiAgICAgICAgICAgICAgZmlsZVVyaS5zY2hlbWUgPT0gInBhY2thZ2UiIHx8CiAgICAgICAgICAgICAgZmlsZVVyaS5zY2hlbWUgPT0gImRhcnQtZXh0IikpIHsKICAgICAgICBmaWxlVXJpID0gbnVsbDsKICAgICAgfQogICAgICBTdHJpbmcgcGFja2FnZUZyYWdtZW50OwogICAgICBpZiAoZmlsZVVyaSA9PSBudWxsKSB7CiAgICAgICAgc3dpdGNoICh1cmkuc2NoZW1lKSB7CiAgICAgICAgICBjYXNlICJwYWNrYWdlIjoKICAgICAgICAgIGNhc2UgImRhcnQiOgogICAgICAgICAgICBmaWxlVXJpID0gdGFyZ2V0LnRyYW5zbGF0ZVVyaSh1cmkpID8/CiAgICAgICAgICAgICAgICBuZXcgVXJpKAogICAgICAgICAgICAgICAgICAgIHNjaGVtZTogdW50cmFuc2xhdGFibGVVcmlTY2hlbWUsCiAgICAgICAgICAgICAgICAgICAgcGF0aDogVXJpLmVuY29kZUNvbXBvbmVudCgiJHVyaSIpKTsKICAgICAgICAgICAgcGFja2FnZUZyYWdtZW50ID0gdGFyZ2V0LnVyaVRyYW5zbGF0b3IuZ2V0UGFja2FnZUZyYWdtZW50KHVyaSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGZpbGVVcmkgPSB1cmk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBib29sIGhhc1BhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb24gPSBmYWxzZTsKICAgICAgaW50IHBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NYWpvcjsKICAgICAgaW50IHBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NaW5vcjsKICAgICAgaWYgKHBhY2thZ2VGcmFnbWVudCAhPSBudWxsKSB7CiAgICAgICAgTGlzdDxTdHJpbmc+IHByb3BlcnRpZXMgPSBwYWNrYWdlRnJhZ21lbnQuc3BsaXQoIiYiKTsKICAgICAgICBpbnQgZm91bmRFbnRyaWVzID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIFN0cmluZyBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07CiAgICAgICAgICBpZiAocHJvcGVydHkuc3RhcnRzV2l0aCgiZGFydD0iKSkgewogICAgICAgICAgICBpZiAoKytmb3VuZEVudHJpZXMgPiAxKSB7CiAgICAgICAgICAgICAgLy8gRm9yY2UgZXJyb3IgdG8gYmUgaXNzdWVkIGlmIG1vcmUgdGhhbiBvbmUgImRhcnQ9IiBlbnRyeS4KICAgICAgICAgICAgICAvLyAoVGhlIGVycm9yIHdpbGwgYmUgaXNzdWVkIGluIGxpYnJhcnkuc2V0TGFuZ3VhZ2VWZXJzaW9uIGJlbG93CiAgICAgICAgICAgICAgLy8gd2hlbiBnaXZpbmcgaXQgYG51bGxgIHZlcnNpb24gbnVtYmVycy4pCiAgICAgICAgICAgICAgcGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbk1ham9yID0gbnVsbDsKICAgICAgICAgICAgICBwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWlub3IgPSBudWxsOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBoYXNQYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uID0gdHJ1ZTsKICAgICAgICAgICAgU3RyaW5nIGxhbmdhdWdlVmVyc2lvblN0cmluZyA9IHByb3BlcnR5LnN1YnN0cmluZyg1KTsKCiAgICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB2ZXJzaW9uIGlzIHgueVt3aGF0ZXZlcl0KICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGRvdFNlcGFyYXRlZFBhcnRzID0gbGFuZ2F1Z2VWZXJzaW9uU3RyaW5nLnNwbGl0KCIuIik7CiAgICAgICAgICAgIGlmIChkb3RTZXBhcmF0ZWRQYXJ0cy5sZW5ndGggPj0gMikgewogICAgICAgICAgICAgIHBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NYWpvciA9CiAgICAgICAgICAgICAgICAgIGludC50cnlQYXJzZShkb3RTZXBhcmF0ZWRQYXJ0c1swXSk7CiAgICAgICAgICAgICAgcGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbk1pbm9yID0KICAgICAgICAgICAgICAgICAgaW50LnRyeVBhcnNlKGRvdFNlcGFyYXRlZFBhcnRzWzFdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0KICAgICAgICAgIHRhcmdldC5jcmVhdGVMaWJyYXJ5QnVpbGRlcih1cmksIGZpbGVVcmksIG9yaWdpbik7CiAgICAgIGlmIChoYXNQYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uKSB7CiAgICAgICAgbGlicmFyeS5zZXRMYW5ndWFnZVZlcnNpb24ocGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbk1ham9yLAogICAgICAgICAgICBwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWlub3IsCiAgICAgICAgICAgIGV4cGxpY2l0OiBmYWxzZSk7CiAgICAgIH0KICAgICAgaWYgKHVyaS5zY2hlbWUgPT0gImRhcnQiICYmIHVyaS5wYXRoID09ICJjb3JlIikgewogICAgICAgIGNvcmVMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgfQogICAgICBpZiAobGlicmFyeS5sb2FkZXIgIT0gdGhpcykgewogICAgICAgIGlmIChjb3JlTGlicmFyeSA9PSBsaWJyYXJ5KSB7CiAgICAgICAgICB0YXJnZXQubG9hZEV4dHJhUmVxdWlyZWRMaWJyYXJpZXModGhpcyk7CiAgICAgICAgfQogICAgICAgIC8vIFRoaXMgbGlicmFyeSBpc24ndCBvd25lZCBieSB0aGlzIGxvYWRlciwgc28gbm90IGZ1cnRoZXIgcHJvY2Vzc2luZwogICAgICAgIC8vIHNob3VsZCBiZSBhdHRlbXB0ZWQuCiAgICAgICAgcmV0dXJuIGxpYnJhcnk7CiAgICAgIH0KCiAgICAgIHsKICAgICAgICAvLyBBZGQgYW55IGFkZGl0aW9uYWwgbG9naWMgYWZ0ZXIgdGhpcyBibG9jay4gU2V0dGluZyB0aGUKICAgICAgICAvLyBmaXJzdFNvdXJjZVVyaSBhbmQgZmlyc3QgbGlicmFyeSBzaG91bGQgYmUgZG9uZSBhcyBlYXJseSBhcwogICAgICAgIC8vIHBvc3NpYmxlLgogICAgICAgIGZpcnN0U291cmNlVXJpID8/PSB1cmk7CiAgICAgICAgZmlyc3QgPz89IGxpYnJhcnk7CiAgICAgIH0KICAgICAgaWYgKGNvcmVMaWJyYXJ5ID09IGxpYnJhcnkpIHsKICAgICAgICB0YXJnZXQubG9hZEV4dHJhUmVxdWlyZWRMaWJyYXJpZXModGhpcyk7CiAgICAgIH0KICAgICAgaWYgKHRhcmdldC5iYWNrZW5kVGFyZ2V0Lm1heURlZmluZVJlc3RyaWN0ZWRUeXBlKG9yaWdpbj8udXJpID8/IHVyaSkpIHsKICAgICAgICBsaWJyYXJ5Lm1heUltcGxlbWVudFJlc3RyaWN0ZWRUeXBlcyA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKHVyaS5zY2hlbWUgPT0gImRhcnQiKSB7CiAgICAgICAgdGFyZ2V0LnJlYWRQYXRjaEZpbGVzKGxpYnJhcnkpOwogICAgICB9CiAgICAgIHVucGFyc2VkTGlicmFyaWVzLmFkZExhc3QobGlicmFyeSk7CiAgICAgIHJldHVybiBsaWJyYXJ5OwogICAgfSk7CiAgICBpZiAoYWNjZXNzb3IgPT0gbnVsbCkgewogICAgICBpZiAoYnVpbGRlci5sb2FkZXIgPT0gdGhpcyAmJiBmaXJzdCAhPSBidWlsZGVyICYmIGlzU291cmNlTG9hZGVyKSB7CiAgICAgICAgdW5oYW5kbGVkKCJudWxsIiwgImFjY2Vzc29yIiwgY2hhck9mZnNldCwgdXJpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYnVpbGRlci5yZWNvcmRBY2Nlc3MoY2hhck9mZnNldCwgbm9MZW5ndGgsIGFjY2Vzc29yLmZpbGVVcmkpOwogICAgICBpZiAoIWFjY2Vzc29yLmlzUGF0Y2ggJiYKICAgICAgICAgICFhY2Nlc3Nvci5pc1BhcnQgJiYKICAgICAgICAgICF0YXJnZXQuYmFja2VuZFRhcmdldAogICAgICAgICAgICAgIC5hbGxvd1BsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MoYWNjZXNzb3IudXJpLCB1cmkpKSB7CiAgICAgICAgYWNjZXNzb3IuYWRkUHJvYmxlbShtZXNzYWdlUGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2VzcywgY2hhck9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgsIGFjY2Vzc29yLmZpbGVVcmkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVpbGRlcjsKICB9CgogIHZvaWQgZW5zdXJlQ29yZUxpYnJhcnkoKSB7CiAgICBpZiAoY29yZUxpYnJhcnkgPT0gbnVsbCkgewogICAgICByZWFkKFVyaS5wYXJzZSgiZGFydDpjb3JlIiksIDAsIGFjY2Vzc29yOiBmaXJzdCk7CiAgICAgIC8vIFRPRE8oYXNrZXNjKTogV2hlbiBhbGwgYmFja2VuZHMgc3VwcG9ydCBzZXQgbGl0ZXJhbHMsIHdlIG5vIGxvbmdlcgogICAgICAvLyBuZWVkIHRvIGluZGV4IGRhcnQ6Y29sbGVjdGlvbiwgYXMgaXQgaXMgb25seSBuZWVkZWQgZm9yIGRlc3VnYXJpbmcgb2YKICAgICAgLy8gY29uc3Qgc2V0cy4gV2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoaXMgbGlzdCBhdCB0aGF0IHRpbWUuCiAgICAgIHJlYWQoVXJpLnBhcnNlKCJkYXJ0OmNvbGxlY3Rpb24iKSwgMCwgYWNjZXNzb3I6IGZpcnN0KTsKICAgICAgYXNzZXJ0KGNvcmVMaWJyYXJ5ICE9IG51bGwpOwogICAgfQogIH0KCiAgRnV0dXJlPE51bGw+IGJ1aWxkQm9kaWVzKCkgYXN5bmMgewogICAgYXNzZXJ0KGNvcmVMaWJyYXJ5ICE9IG51bGwpOwogICAgZm9yIChMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5IGluIGJ1aWxkZXJzLnZhbHVlcykgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGN1cnJlbnRVcmlGb3JDcmFzaFJlcG9ydGluZyA9IGxpYnJhcnkudXJpOwogICAgICAgIGF3YWl0IGJ1aWxkQm9keShsaWJyYXJ5KTsKICAgICAgfQogICAgfQogICAgY3VycmVudFVyaUZvckNyYXNoUmVwb3J0aW5nID0gbnVsbDsKICAgIGxvZ1N1bW1hcnkodGVtcGxhdGVTb3VyY2VCb2R5U3VtbWFyeSk7CiAgfQoKICBGdXR1cmU8TnVsbD4gYnVpbGRPdXRsaW5lcygpIGFzeW5jIHsKICAgIGVuc3VyZUNvcmVMaWJyYXJ5KCk7CiAgICB3aGlsZSAodW5wYXJzZWRMaWJyYXJpZXMuaXNOb3RFbXB0eSkgewogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gdW5wYXJzZWRMaWJyYXJpZXMucmVtb3ZlRmlyc3QoKTsKICAgICAgY3VycmVudFVyaUZvckNyYXNoUmVwb3J0aW5nID0gbGlicmFyeS51cmk7CiAgICAgIGF3YWl0IGJ1aWxkT3V0bGluZShsaWJyYXJ5KTsKICAgIH0KICAgIGN1cnJlbnRVcmlGb3JDcmFzaFJlcG9ydGluZyA9IG51bGw7CiAgICBsb2dTdW1tYXJ5KG91dGxpbmVTdW1tYXJ5VGVtcGxhdGUpOwogIH0KCiAgdm9pZCBsb2dTdW1tYXJ5KFRlbXBsYXRlPFN1bW1hcnlUZW1wbGF0ZT4gdGVtcGxhdGUpIHsKICAgIHRpY2tlci5sb2coKER1cmF0aW9uIGVsYXBzZWQsIER1cmF0aW9uIHNpbmNlU3RhcnQpIHsKICAgICAgaW50IGxpYnJhcnlDb3VudCA9IDA7CiAgICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgbGlicmFyeUNvdW50Kys7CiAgICAgIH0pOwogICAgICBkb3VibGUgbXMgPSBlbGFwc2VkLmluTWljcm9zZWNvbmRzIC8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQ7CiAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICBsaWJyYXJ5Q291bnQsIGJ5dGVDb3VudCwgbXMsIGJ5dGVDb3VudCAvIG1zLCBtcyAvIGxpYnJhcnlDb3VudCk7CiAgICAgIHByaW50KCIkc2luY2VTdGFydDogJHttZXNzYWdlLm1lc3NhZ2V9Iik7CiAgICB9KTsKICB9CgogIEZ1dHVyZTxOdWxsPiBidWlsZE91dGxpbmUoY292YXJpYW50IExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpOwoKICAvLy8gQnVpbGRzIGFsbCB0aGUgbWV0aG9kIGJvZGllcyBmb3VuZCBpbiB0aGUgZ2l2ZW4gW2xpYnJhcnldLgogIEZ1dHVyZTxOdWxsPiBidWlsZEJvZHkoY292YXJpYW50IExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpOwoKICAvLy8gUmVnaXN0ZXIgW21lc3NhZ2VdIGFzIGEgcHJvYmxlbSB3aXRoIGEgc2V2ZXJpdHkgZGV0ZXJtaW5lZCBieSB0aGUKICAvLy8gaW50cmluc2ljIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlLgogIEZvcm1hdHRlZE1lc3NhZ2UgYWRkUHJvYmxlbSgKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLAogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0LAogICAgICBTZXZlcml0eSBzZXZlcml0eSwKICAgICAgYm9vbCBwcm9ibGVtT25MaWJyYXJ5OiBmYWxzZX0pIHsKICAgIHJldHVybiBhZGRNZXNzYWdlKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSwgc2V2ZXJpdHksCiAgICAgICAgd2FzSGFuZGxlZDogd2FzSGFuZGxlZCwKICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgIHByb2JsZW1PbkxpYnJhcnk6IHByb2JsZW1PbkxpYnJhcnkpOwogIH0KCiAgLy8vIEFsbCBtZXNzYWdlcyByZXBvcnRlZCBieSB0aGUgY29tcGlsZXIgKGVycm9ycywgd2FybmluZ3MsIGV0Yy4pIGFyZSByb3V0ZWQKICAvLy8gdGhyb3VnaCB0aGlzIG1ldGhvZC4KICAvLy8KICAvLy8gUmV0dXJucyBhIEZvcm1hdHRlZE1lc3NhZ2UgaWYgdGhlIG1lc3NhZ2UgaXMgbmV3LCB0aGF0IGlzLCBub3QgcHJldmlvdXNseQogIC8vLyByZXBvcnRlZC4gVGhpcyBpcyBpbXBvcnRhbnQgYXMgc29tZSBwYXJzZXIgZXJyb3JzIG1heSBiZSByZXBvcnRlZCB1cCB0bwogIC8vLyB0aHJlZSB0aW1lcyBieSBgT3V0bGluZUJ1aWxkZXJgLCBgRGlldExpc3RlbmVyYCwgYW5kIGBCb2R5QnVpbGRlcmAuCiAgLy8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBuZXcsIFtudWxsXSBpcyByZXBvcnRlZC4KICAvLy8KICAvLy8gSWYgW3NldmVyaXR5XSBpcyBgU2V2ZXJpdHkuZXJyb3JgLCB0aGUgbWVzc2FnZSBpcyBhZGRlZCB0bwogIC8vLyBbaGFuZGxlZEVycm9yc10gaWYgW3dhc0hhbmRsZWRdIGlzIHRydWUgb3IgdG8gW3VuaGFuZGxlZEVycm9yc10gaWYKICAvLy8gW3dhc0hhbmRsZWRdIGlzIGZhbHNlLgogIEZvcm1hdHRlZE1lc3NhZ2UgYWRkTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLAogICAgICBVcmkgZmlsZVVyaSwgU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLAogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0LAogICAgICBib29sIHByb2JsZW1PbkxpYnJhcnk6IGZhbHNlfSkgewogICAgc2V2ZXJpdHkgPSB0YXJnZXQuZml4U2V2ZXJpdHkoc2V2ZXJpdHksIG1lc3NhZ2UsIGZpbGVVcmkpOwogICAgaWYgKHNldmVyaXR5ID09IFNldmVyaXR5Lmlnbm9yZWQpIHJldHVybiBudWxsOwogICAgU3RyaW5nIHRyYWNlID0gIiIiCm1lc3NhZ2U6ICR7bWVzc2FnZS5tZXNzYWdlfQpjaGFyT2Zmc2V0OiAkY2hhck9mZnNldApmaWxlVXJpOiAkZmlsZVVyaQpzZXZlcml0eTogJHNldmVyaXR5CiIiIjsKICAgIC8vIFRPRE8oYXNrZXNjKTogU3dhcCBtZXNzYWdlIGFuZCBjb250ZXh0IGFyb3VuZCBmb3IgaW50ZXJmYWNlIGNoZWNrcwogICAgLy8gYW5kIG1peGluIG92ZXJyaWRlcyB0byBtYWtlIGNvbXBhcmluZyBjb250ZXh0IGhlcmUgdW5uZWNlc3NhcnkuCiAgICBpZiAoY29udGV4dCAhPSBudWxsKSB7CiAgICAgIGZvciAoTG9jYXRlZE1lc3NhZ2UgY29udGV4dE1lc3NhZ2UgaW4gY29udGV4dCkgewogICAgICAgIHRyYWNlICs9ICIiIgptZXNzYWdlOiAke2NvbnRleHRNZXNzYWdlLm1lc3NhZ2V9CmNoYXJPZmZzZXQ6ICR7Y29udGV4dE1lc3NhZ2UuY2hhck9mZnNldH0KZmlsZVVyaTogJHtjb250ZXh0TWVzc2FnZS51cml9CiIiIjsKICAgICAgfQogICAgfQogICAgaWYgKCFzZWVuTWVzc2FnZXMuYWRkKHRyYWNlKSkgcmV0dXJuIG51bGw7CiAgICBpZiAobWVzc2FnZS5jb2RlLnNldmVyaXR5ID09IFNldmVyaXR5LmNvbnRleHQpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHkKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhtZXNzYWdlLmNvZGUubmFtZSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgZmlsZVVyaSk7CiAgICB9CiAgICB0YXJnZXQuY29udGV4dC5yZXBvcnQoCiAgICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKSwgc2V2ZXJpdHksCiAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICBpZiAoc2V2ZXJpdHkgPT0gU2V2ZXJpdHkuZXJyb3IpIHsKICAgICAgKHdhc0hhbmRsZWQgPyBoYW5kbGVkRXJyb3JzIDogdW5oYW5kbGVkRXJyb3JzKQogICAgICAgICAgLmFkZChtZXNzYWdlLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBsZW5ndGgpKTsKICAgIH0KICAgIEZvcm1hdHRlZE1lc3NhZ2UgZm9ybWF0dGVkTWVzc2FnZSA9IHRhcmdldC5jcmVhdGVGb3JtYXR0ZWRNZXNzYWdlKAogICAgICAgIG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSwgY29udGV4dCwgc2V2ZXJpdHkpOwogICAgaWYgKCFwcm9ibGVtT25MaWJyYXJ5KSB7CiAgICAgIGFsbENvbXBvbmVudFByb2JsZW1zLmFkZChmb3JtYXR0ZWRNZXNzYWdlKTsKICAgIH0KICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlOwogIH0KCiAgQnVpbGRlciBnZXRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKCkgewogICAgcmV0dXJuIHRhcmdldC5nZXRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKHRoaXMpOwogIH0KCiAgQnVpbGRlciBnZXRDb21waWxlVGltZUVycm9yKCkgPT4gdGFyZ2V0LmdldENvbXBpbGVUaW1lRXJyb3IodGhpcyk7CgogIEJ1aWxkZXIgZ2V0RHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcigpIHsKICAgIHJldHVybiB0YXJnZXQuZ2V0RHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcih0aGlzKTsKICB9CgogIEJ1aWxkZXIgZ2V0TmF0aXZlQW5ub3RhdGlvbigpID0+IHRhcmdldC5nZXROYXRpdmVBbm5vdGF0aW9uKHRoaXMpOwoKICBDbGFzc0J1aWxkZXIgY29tcHV0ZUNsYXNzQnVpbGRlckZyb21UYXJnZXRDbGFzcyhDbGFzcyBjbHMpOwoKICBUeXBlQnVpbGRlciBjb21wdXRlVHlwZUJ1aWxkZXIoRGFydFR5cGUgdHlwZSk7Cn0KgWAATk48ARYBIQElAUABHj0BKQEXCRoYERIZEi0wIwE4ASYBPwEiAUoBGEUBTwEvASUBThYGSzNBAVAWBkMXQwFPLUwBNgEeAUtQGAEVASMBFwEmATgBJAFGTCQGTCQGUEtFGi9HPB0nLS8YCB4dHhoXMhk1OEwTARMbEwoINzAwJT4eNisuJkpPOTs7FQ4BN0IBOE8xNTY1Ng4MCggfPTBJMh4IOB8IJCYzCk4gGAgBCEJHFSAbCCQxCE40CCIoCCoWCBxKOAgNRB8eIEdNKQgGFAQBHR84TE9DPiMGBAElITYkMyIIBigrBAEnGStAMSMGKCgEATg5HDs0ClAwSzAIBAE/AUE8AUgpH0AfJBknRiAaLQQBUBsGUE5KNQZBSR1LJh8kJz8zFxwYEhQFSkcbNxUjKR8FCAYvNRcxMRYUBhtFGyY1QwZHQh0yBh0EATE8BAFFATE8BAFFAT4BMQIBJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9sb2FkZXIuZGFydDtzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9mcm9udF9lbmQuZGFydIJbLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGUgRGFydCBGcm9udCBFbmQgY29udGFpbnMgbG9naWMgdG8gYnVpbGQgc3VtbWFyaWVzIGFuZCBrZXJuZWwgcHJvZ3JhbXMKLy8vIGZyb20gRGFydCBzb3VyY2VzLiBUaGUgQVBJcyBleHBvc2VkIGhlcmUgYXJlIGRlc2lnbmVkIGZvciB0b29scyBpbiB0aGUgRGFydAovLy8gZWNvc3lzdGVtIHRoYXQgbmVlZCB0byBsb2FkIHNvdXJjZXMgYW5kIGNvbnZlcnQgdGhlbSB0byB0aGVzZSBmb3JtYXRzLgpsaWJyYXJ5IGZyb250X2VuZC5mcm9udF9lbmQ7CgpleHBvcnQgJ2NvbXBpbGVyX29wdGlvbnMuZGFydCc7CmV4cG9ydCAna2VybmVsX2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICdzdW1tYXJ5X2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICdmaWxlX3N5c3RlbS5kYXJ0JzsKDwBOTjwBTVBLHQEgICEbATJwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9mcm9udF9lbmQuZGFydEJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci9hYnN0cmFjdF9zY2FubmVyLmRhcnTAAOcCLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci5hYnN0cmFjdF9zY2FubmVyOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgTGlzdE1peGluOwoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnIHNob3cgVWludDE2TGlzdCwgVWludDMyTGlzdDsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JwogICAgc2hvdyBCZWdpblRva2VuLCBLZXl3b3JkLCBLZXl3b3JkVG9rZW4sIFN5bnRoZXRpY1Rva2VuLCBUb2tlbiwgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIGFzIGFuYWx5emVyIHNob3cgU3RyaW5nVG9rZW47CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgbWVzc2FnZUV4cGVjdGVkSGV4RGlnaXQsCiAgICAgICAgbWVzc2FnZU1pc3NpbmdFeHBvbmVudCwKICAgICAgICBtZXNzYWdlVW5leHBlY3RlZERvbGxhckluU3RyaW5nLAogICAgICAgIG1lc3NhZ2VVbnRlcm1pbmF0ZWRDb21tZW50OwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnCiAgICBzaG93IEVycm9yVG9rZW4sIEtleXdvcmQsIFNjYW5uZXIsIGJ1aWxkVW5leHBlY3RlZENoYXJhY3RlclRva2VuOwoKaW1wb3J0ICcuLi91dGlsL2xpbmsuZGFydCcgc2hvdyBMaW5rOwoKaW1wb3J0ICdlcnJvcl90b2tlbi5kYXJ0JwogICAgc2hvdwogICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclRva2VuLAogICAgICAgIFVubWF0Y2hlZFRva2VuLAogICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0b3IsCiAgICAgICAgVW50ZXJtaW5hdGVkU3RyaW5nLAogICAgICAgIFVudGVybWluYXRlZFRva2VuOwoKaW1wb3J0ICdrZXl3b3JkX3N0YXRlLmRhcnQnIHNob3cgS2V5d29yZFN0YXRlOwoKaW1wb3J0ICd0b2tlbi5kYXJ0JwogICAgc2hvdyBDb21tZW50VG9rZW4sIERhcnREb2NUb2tlbiwgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4sIFN0cmluZ1Rva2VuOwoKaW1wb3J0ICd0b2tlbl9jb25zdGFudHMuZGFydCc7CgppbXBvcnQgJ2NoYXJhY3RlcnMuZGFydCc7Cgp0eXBlZGVmIHZvaWQgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCgKICAgIFNjYW5uZXIgc2Nhbm5lciwgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4gbGFuZ3VhZ2VWZXJzaW9uKTsKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2Nhbm5lciBpbXBsZW1lbnRzIFNjYW5uZXIgewogIC8qKgogICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgY2hhcmFjdGVyIHNlcXVlbmNlcyBgJiY9YCBhbmQgYHx8PWAKICAgKiBzaG91bGQgYmUgdG9rZW5pemVkIGFzIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9ycwogICAqIFtBTVBFUlNBTkRfQU1QRVJTQU5EX0VRX1RPS0VOXSBhbmQgW0JBUl9CQVJfRVFfVE9LRU5dIHJlc3BlY3RpdmVseS4KICAgKiBTZWUgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzMwMzQwCiAgICovCiAgc3RhdGljIGNvbnN0IGJvb2wgTEFaWV9BU1NJR05NRU5UX0VOQUJMRUQgPSBmYWxzZTsKCiAgZmluYWwgYm9vbCBpbmNsdWRlQ29tbWVudHM7CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgc2Nhbm5lciBkZXRlY3RzIGEgbGFuZ3VhZ2UgdmVyc2lvbiBjb21tZW50CiAgLy8vIHNvIHRoYXQgdGhlIGxpc3RlbmVyIGNhbiB1cGRhdGUgdGhlIHNjYW5uZXIgY29uZmlndXJhdGlvbgogIC8vLyBiYXNlZCB1cG9uIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgdmVyc2lvbi4KICBmaW5hbCBMYW5ndWFnZVZlcnNpb25DaGFuZ2VkIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQ7CgogIC8vLyBFeHBlcmltZW50YWwgZmxhZyBmb3IgZW5hYmxpbmcgc2Nhbm5pbmcgb2YgdGhlIGBleHRlbnNpb25gIHRva2VuLgogIGJvb2wgX2VuYWJsZUV4dGVuc2lvbk1ldGhvZHMgPSBmYWxzZTsKCiAgLy8vIEV4cGVyaW1lbnRhbCBmbGFnIGZvciBlbmFibGluZyBzY2FubmluZyBvZiBOTkJEIHRva2VucwogIC8vLyBzdWNoIGFzICdyZXF1aXJlZCcgYW5kICdsYXRlJy4KICBib29sIF9lbmFibGVOb25OdWxsYWJsZSA9IGZhbHNlOwoKICAvLy8gRXhwZXJpbWVudGFsIGZsYWcgZm9yIGVuYWJsaW5nIHNjYW5uaW5nIG9mIGA+Pj5gLgogIC8vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9sYW5ndWFnZS9pc3N1ZXMvNjEKICAvLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvbGFuZ3VhZ2UvaXNzdWVzLzYwCiAgYm9vbCBfZW5hYmxlVHJpcGxlU2hpZnQgPSBmYWxzZTsKCiAgLyoqCiAgICogVGhlIHN0cmluZyBvZmZzZXQgZm9yIHRoZSBuZXh0IHRva2VuIHRoYXQgd2lsbCBiZSBjcmVhdGVkLgogICAqCiAgICogTm90ZSB0aGF0IGluIHRoZSBbVXRmOEJ5dGVzU2Nhbm5lcl0sIFtzdHJpbmdPZmZzZXRdIGFuZCBbc2Nhbk9mZnNldF0gdmFsdWVzCiAgICogYXJlIGRpZmZlcmVudC4gT25lIHN0cmluZyBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdXNpbmcgbXVsdGlwbGUgVVRGLTgKICAgKiBieXRlcy4KICAgKi8KICBpbnQgdG9rZW5TdGFydCA9IC0xOwoKICAvKioKICAgKiBBIHBvaW50ZXIgdG8gdGhlIHRva2VuIHN0cmVhbSBjcmVhdGVkIGJ5IHRoaXMgc2Nhbm5lci4gVGhlIGZpcnN0IHRva2VuCiAgICogaXMgYSBzcGVjaWFsIHRva2VuIGFuZCBub3QgcGFydCBvZiB0aGUgc291cmNlIGZpbGUuIFRoaXMgaXMgYW4KICAgKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdG8gYXZvaWRzIHNwZWNpYWwgY2FzZXMgaW4gdGhlIHNjYW5uZXIuIFRoaXMgdG9rZW4KICAgKiBpcyBub3QgZXhwb3NlZCB0byBjbGllbnRzIG9mIHRoZSBzY2FubmVyLCB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gaW52b2tlCiAgICogW2ZpcnN0VG9rZW5dIHRvIGFjY2VzcyB0aGUgdG9rZW4gc3RyZWFtLgogICAqLwogIGZpbmFsIFRva2VuIHRva2VucyA9IG5ldyBUb2tlbi5lb2YoLTEpOwoKICAvKioKICAgKiBBIHBvaW50ZXIgdG8gdGhlIGxhc3Qgc2Nhbm5lZCB0b2tlbi4KICAgKi8KICBUb2tlbiB0YWlsOwoKICAvKioKICAgKiBBIHBvaW50ZXIgdG8gdGhlIGxhc3QgcHJlcGVuZGVkIGVycm9yIHRva2VuLgogICAqLwogIFRva2VuIGVycm9yVGFpbDsKCiAgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKCiAgLyoqCiAgICogQSBwb2ludGVyIHRvIHRoZSBzdHJlYW0gb2YgY29tbWVudCB0b2tlbnMgY3JlYXRlZCBieSB0aGlzIHNjYW5uZXIKICAgKiBiZWZvcmUgdGhleSBhcmUgYXNzaWduZWQgdG8gdGhlIFtUb2tlbl0gcHJlY2VkaW5nQ29tbWVudHMgZmllbGQKICAgKiBvZiBhIG5vbi1jb21tZW50IHRva2VuLiBBIHZhbHVlIG9mIGBudWxsYCBpbmRpY2F0ZXMgbm8gY29tbWVudCB0b2tlbnMuCiAgICovCiAgQ29tbWVudFRva2VuIGNvbW1lbnRzOwoKICAvKioKICAgKiBBIHBvaW50ZXIgdG8gdGhlIGxhc3Qgc2Nhbm5lZCBjb21tZW50IHRva2VuIG9yIGBudWxsYCBpZiBub25lLgogICAqLwogIFRva2VuIGNvbW1lbnRzVGFpbDsKCiAgZmluYWwgTGlzdDxpbnQ+IGxpbmVTdGFydHM7CgogIC8qKgogICAqIFRoZSBzdGFjayBvZiBvcGVuIGdyb3VwcywgZS5nIFs6IHsgLi4uICggLi4gOl0KICAgKiBFYWNoIEJlZ2luVG9rZW4gaGFzIGEgcG9pbnRlciB0byB0aGUgdG9rZW4gd2hlcmUgdGhlIGdyb3VwCiAgICogZW5kcy4gVGhpcyBmaWVsZCBpcyBzZXQgd2hlbiBzY2FubmluZyB0aGUgZW5kIGdyb3VwIHRva2VuLgogICAqLwogIExpbms8QmVnaW5Ub2tlbj4gZ3JvdXBpbmdTdGFjayA9IGNvbnN0IExpbms8QmVnaW5Ub2tlbj4oKTsKCiAgQWJzdHJhY3RTY2FubmVyKFNjYW5uZXJDb25maWd1cmF0aW9uIGNvbmZpZywgdGhpcy5pbmNsdWRlQ29tbWVudHMsCiAgICAgIHRoaXMubGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCwKICAgICAge2ludCBudW1iZXJPZkJ5dGVzSGludH0pCiAgICAgIDogbGluZVN0YXJ0cyA9IG5ldyBMaW5lU3RhcnRzKG51bWJlck9mQnl0ZXNIaW50KSB7CiAgICB0aGlzLnRhaWwgPSB0aGlzLnRva2VuczsKICAgIHRoaXMuZXJyb3JUYWlsID0gdGhpcy50b2tlbnM7CiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWc7CiAgfQoKICBAb3ZlcnJpZGUKICBzZXQgY29uZmlndXJhdGlvbihTY2FubmVyQ29uZmlndXJhdGlvbiBjb25maWcpIHsKICAgIGlmIChjb25maWcgIT0gbnVsbCkgewogICAgICBfZW5hYmxlRXh0ZW5zaW9uTWV0aG9kcyA9IGNvbmZpZy5lbmFibGVFeHRlbnNpb25NZXRob2RzOwogICAgICBfZW5hYmxlTm9uTnVsbGFibGUgPSBjb25maWcuZW5hYmxlTm9uTnVsbGFibGU7CiAgICAgIF9lbmFibGVUcmlwbGVTaGlmdCA9IGNvbmZpZy5lbmFibGVUcmlwbGVTaGlmdDsKICAgIH0KICB9CgogIC8qKgogICAqIEFkdmFuY2VzIGFuZCByZXR1cm5zIHRoZSBuZXh0IGNoYXJhY3Rlci4KICAgKgogICAqIElmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBub24tQVNDSUksIHRoZW4gdGhlIHJldHVybmVkIHZhbHVlIGRlcGVuZHMgb24gdGhlCiAgICogc2Nhbm5lciBpbXBsZW1lbnRhdGlvbi4gVGhlIFtVdGY4Qnl0ZXNTY2FubmVyXSByZXR1cm5zIGEgVVRGLTggYnl0ZSwgd2hpbGUKICAgKiB0aGUgW1N0cmluZ1NjYW5uZXJdIHJldHVybnMgYSBVVEYtMTYgY29kZSB1bml0LgogICAqCiAgICogVGhlIHNjYW5uZXIgZW5zdXJlcyB0aGF0IFthZHZhbmNlXSBpcyBub3QgaW52b2tlZCBhZnRlciBpdCByZXR1cm5lZCBbJEVPRl0uCiAgICogVGhpcyBhbGxvd3MgaW1wbGVtZW50YXRpb25zIHRvIG9taXQgYm91bmQgY2hlY2tzIGlmIHRoZSBkYXRhIHN0cnVjdHVyZSBlbmRzCiAgICogd2l0aCAnMCcuCiAgICovCiAgaW50IGFkdmFuY2UoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY3VycmVudCB1bmljb2RlIGNoYXJhY3Rlci4KICAgKgogICAqIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBBU0NJSSwgdGhlbiBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuCiAgICoKICAgKiBUaGUgW1V0ZjhCeXRlc1NjYW5uZXJdIGRlY29kZXMgdGhlIG5leHQgdW5pY29kZSBjb2RlIHBvaW50IHN0YXJ0aW5nIGF0IHRoZQogICAqIGN1cnJlbnQgcG9zaXRpb24uIE5vdGUgdGhhdCBldmVyeSB1bmljb2RlIGNoYXJhY3RlciBpcyByZXR1cm5lZCBhcyBhIHNpbmdsZQogICAqIGNvZGUgcG9pbnQsIHRoYXQgaXMsIGZvciAnXHV7MWQxMWV9JyBpdCByZXR1cm5zIDExOTA3MCwgYW5kIHRoZSBmb2xsb3dpbmcKICAgKiBbYWR2YW5jZV0gcmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIuCiAgICoKICAgKiBUaGUgW1N0cmluZ1NjYW5uZXJdIHJldHVybnMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIHVuY2hhbmdlZCwgd2hpY2ggbWlnaHQKICAgKiBiZSBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIuIEluIHRoZSBjYXNlIG9mICdcdXsxZDExZX0nLCBpdCByZXR1cm5zIHRoZSBmaXJzdAogICAqIGNvZGUgdW5pdCA1NTM0OCwgYW5kIHRoZSBmb2xsb3dpbmcgW2FkdmFuY2VdIHJldHVybnMgdGhlIHNlY29uZCBjb2RlIHVuaXQKICAgKiA1NjYwNi4KICAgKgogICAqIEludm9raW5nIFtjdXJyZW50QXNVbmljb2RlXSBtdWx0aXBsZSB0aW1lcyBpcyBzYWZlLCBpLmUuLAogICAqIFs6Y3VycmVudEFzVW5pY29kZShuZXh0KSA9PSBjdXJyZW50QXNVbmljb2RlKGN1cnJlbnRBc1VuaWNvZGUobmV4dCkpOl0uCiAgICovCiAgaW50IGN1cnJlbnRBc1VuaWNvZGUoaW50IG5leHQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIG5leHQgcG9zaXRpb24uIExpa2UgaW4gW2FkdmFuY2VdLCB0aGUKICAgKiBbVXRmOEJ5dGVzU2Nhbm5lcl0gcmV0dXJucyBhIFVURi04IGJ5dGUsIHdoaWxlIHRoZSBbU3RyaW5nU2Nhbm5lcl0gcmV0dXJucwogICAqIGEgVVRGLTE2IGNvZGUgdW5pdC4KICAgKi8KICBpbnQgcGVlaygpOwoKICAvKioKICAgKiBOb3RpZmllcyB0aGUgc2Nhbm5lciB0aGF0IHVuaWNvZGUgY2hhcmFjdGVycyB3ZXJlIGRldGVjdGVkIGluIGVpdGhlciBhCiAgICogY29tbWVudCBvciBhIHN0cmluZyBsaXRlcmFsIGJldHdlZW4gW3N0YXJ0U2Nhbk9mZnNldF0gYW5kIHRoZSBjdXJyZW50CiAgICogc2NhbiBvZmZzZXQuCiAgICovCiAgdm9pZCBoYW5kbGVVbmljb2RlKGludCBzdGFydFNjYW5PZmZzZXQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNjYW4gb2Zmc2V0LgogICAqCiAgICogSW4gdGhlIFtVdGY4Qnl0ZXNTY2FubmVyXSB0aGlzIGlzIHRoZSBvZmZzZXQgaW50byB0aGUgYnl0ZSBsaXN0LCBpbiB0aGUKICAgKiBbU3RyaW5nU2Nhbm5lcl0gdGhlIG9mZnNldCBpbiB0aGUgc291cmNlIHN0cmluZy4KICAgKi8KICBpbnQgZ2V0IHNjYW5PZmZzZXQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RyaW5nIG9mZnNldC4KICAgKgogICAqIEluIHRoZSBbU3RyaW5nU2Nhbm5lcl0gdGhpcyBpcyBpZGVudGljYWwgdG8gdGhlIFtzY2FuT2Zmc2V0XS4gSW4gdGhlCiAgICogW1V0ZjhCeXRlc1NjYW5uZXJdIGl0IGlzIGNvbXB1dGVkIGJhc2VkIG9uIGVuY291bnRlcmVkIFVURi04IGNoYXJhY3RlcnMuCiAgICovCiAgaW50IGdldCBzdHJpbmdPZmZzZXQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZpcnN0IHRva2VuIHNjYW5uZWQgYnkgdGhpcyBbU2Nhbm5lcl0uCiAgICovCiAgVG9rZW4gZmlyc3RUb2tlbigpID0+IHRva2Vucy5uZXh0OwoKICAvKioKICAgKiBOb3RpZmllcyB0aGF0IGEgbmV3IHRva2VuIHN0YXJ0cyBhdCBjdXJyZW50IG9mZnNldC4KICAgKi8KICB2b2lkIGJlZ2luVG9rZW4oKSB7CiAgICB0b2tlblN0YXJ0ID0gc3RyaW5nT2Zmc2V0OwogIH0KCiAgLyoqCiAgICogQXBwZW5kcyBhIHN1YnN0cmluZyBmcm9tIHRoZSBzY2FuIG9mZnNldCBbOnN0YXJ0Ol0gdG8gdGhlIGN1cnJlbnQKICAgKiBbOnNjYW5PZmZzZXQ6XSBwbHVzIHRoZSBbOmV4dHJhT2Zmc2V0Ol0uIEZvciBleGFtcGxlLCBpZiB0aGUgY3VycmVudAogICAqIHNjYW5PZmZzZXQgaXMgMTAsIHRoZW4gWzphcHBlbmRTdWJzdHJpbmdUb2tlbig1LCAtMSk6XSB3aWxsIGFwcGVuZCB0aGUKICAgKiBzdWJzdHJpbmcgc3RyaW5nIFs1LDkpLgogICAqCiAgICogTm90ZSB0aGF0IFtleHRyYU9mZnNldF0gY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgY292ZXJlZCBjaGFyYWN0ZXIocykgYXJlCiAgICoga25vd24gdG8gYmUgQVNDSUkuCiAgICovCiAgdm9pZCBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwKICAgICAgW2ludCBleHRyYU9mZnNldCA9IDBdKSB7CiAgICBhcHBlbmRUb2tlbihjcmVhdGVTdWJzdHJpbmdUb2tlbih0eXBlLCBzdGFydCwgYXNjaWlPbmx5LCBleHRyYU9mZnNldCkpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBzdWJzdHJpbmcgZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XSB0byB0aGUgY3VycmVudAogICAqIFtzY2FuT2Zmc2V0XSBwbHVzIHRoZSBbZXh0cmFPZmZzZXRdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQKICAgKiBzY2FuT2Zmc2V0IGlzIDEwLCB0aGVuIFthcHBlbmRTdWJzdHJpbmdUb2tlbig1LCAtMSldIHdpbGwgYXBwZW5kIHRoZQogICAqIHN1YnN0cmluZyBzdHJpbmcgWzUsOSkuCiAgICoKICAgKiBOb3RlIHRoYXQgW2V4dHJhT2Zmc2V0XSBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBjb3ZlcmVkIGNoYXJhY3RlcihzKSBhcmUKICAgKiBrbm93biB0byBiZSBBU0NJSS4KICAgKi8KICBhbmFseXplci5TdHJpbmdUb2tlbiBjcmVhdGVTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSk7CgogIC8qKgogICAqIEFwcGVuZHMgYSBzdWJzdHJpbmcgZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XSB0byB0aGUgY3VycmVudAogICAqIFtzY2FuT2Zmc2V0XSBwbHVzIFtzeW50aGV0aWNDaGFyc10uIFRoZSBhZGRpdGlvbmFsIGNoYXIocykgd2lsbCBiZSBhZGRlZAogICAqIHRvIHRoZSB1bnRlcm1pbmF0ZWQgc3RyaW5nIGxpdGVyYWwncyBsZXhlbWUgYnV0IHRoZSByZXR1cm5lZAogICAqIHRva2VuJ3MgbGVuZ3RoIHdpbGwgKm5vdCogaW5jbHVkZSB0aG9zZSBhZGRpdGlvbmFsIGNoYXIocykKICAgKiBzbyBhcyB0byBiZSB0cnVlIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UuCiAgICovCiAgdm9pZCBhcHBlbmRTeW50aGV0aWNTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksIFN0cmluZyBzeW50aGV0aWNDaGFycykgewogICAgYXBwZW5kVG9rZW4oCiAgICAgICAgY3JlYXRlU3ludGhldGljU3Vic3RyaW5nVG9rZW4odHlwZSwgc3RhcnQsIGFzY2lpT25seSwgc3ludGhldGljQ2hhcnMpKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgc3ludGhldGljIHN1YnN0cmluZyBmcm9tIHRoZSBzY2FuIG9mZnNldCBbc3RhcnRdCiAgICogdG8gdGhlIGN1cnJlbnQgW3NjYW5PZmZzZXRdIHBsdXMgdGhlIFtzeW50aGV0aWNDaGFyc10uCiAgICogVGhlIFtzeW50aGV0aWNDaGFyc10gYXJlIGFwcGVuZGVkIHRvIHRoZSB1bnRlcm1pbmF0ZWQgc3RyaW5nCiAgICogbGl0ZXJhbCdzIGxleGVtZSBidXQgdGhlIHJldHVybmVkIHRva2VuJ3MgbGVuZ3RoIHdpbGwgKm5vdCogaW5jbHVkZQogICAqIHRob3NlIGFkZGl0aW9uYWwgY2hhcmFjdGVycyBzbyBhcyB0byBiZSB0cnVlIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UuCiAgICovCiAgYW5hbHl6ZXIuU3RyaW5nVG9rZW4gY3JlYXRlU3ludGhldGljU3Vic3RyaW5nVG9rZW4oCiAgICAgIFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LCBTdHJpbmcgc3ludGhldGljQ2hhcnMpOwogIC8qKgogICAqIEFwcGVuZHMgYSBmaXhlZCB0b2tlbiB3aG9zZSBraW5kIGFuZCBjb250ZW50IGlzIGRldGVybWluZWQgYnkgW3R5cGVdLgogICAqIEFwcGVuZHMgYW4gKm9wZXJhdG9yKiB0b2tlbiBmcm9tIFt0eXBlXS4KICAgKgogICAqIEFuIG9wZXJhdG9yIHRva2VuIHJlcHJlc2VudCBvcGVyYXRvcnMgbGlrZSAnOicsICcuJywgJzsnLCAnJiYnLCAnPT0nLCAnLS0nLAogICAqICc9PicsIGV0Yy4KICAgKi8KICB2b2lkIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUgdHlwZSkgewogICAgYXBwZW5kVG9rZW4obmV3IFRva2VuKHR5cGUsIHRva2VuU3RhcnQsIGNvbW1lbnRzKSk7CiAgfQoKICAvKioKICAgKiBBcHBlbmRzIGEgZml4ZWQgdG9rZW4gYmFzZWQgb24gd2hldGhlciB0aGUgY3VycmVudCBjaGFyIGlzIFtjaG9pY2VdIG9yIG5vdC4KICAgKiBJZiB0aGUgY3VycmVudCBjaGFyIGlzIFtjaG9pY2VdIGEgZml4ZWQgdG9rZW4gd2hvc2Uga2luZCBhbmQgY29udGVudAogICAqIGlzIGRldGVybWluZWQgYnkgW3llc10gaXMgYXBwZW5kZWQsIG90aGVyd2lzZSBhIGZpeGVkIHRva2VuIHdob3NlIGtpbmQKICAgKiBhbmQgY29udGVudCBpcyBkZXRlcm1pbmVkIGJ5IFtub10gaXMgYXBwZW5kZWQuCiAgICovCiAgaW50IHNlbGVjdChpbnQgY2hvaWNlLCBUb2tlblR5cGUgeWVzLCBUb2tlblR5cGUgbm8pIHsKICAgIGludCBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCBjaG9pY2UpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbih5ZXMpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKG5vKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICAvKioKICAgKiBBcHBlbmRzIGEga2V5d29yZCB0b2tlbiB3aG9zZSBraW5kIGlzIGRldGVybWluZWQgYnkgW2tleXdvcmRdLgogICAqLwogIHZvaWQgYXBwZW5kS2V5d29yZFRva2VuKEtleXdvcmQga2V5d29yZCkgewogICAgU3RyaW5nIHN5bnRheCA9IGtleXdvcmQubGV4ZW1lOwogICAgLy8gVHlwZSBwYXJhbWV0ZXJzIGFuZCBhcmd1bWVudHMgY2Fubm90IGNvbnRhaW4gJ3RoaXMnLgogICAgaWYgKGlkZW50aWNhbChzeW50YXgsICd0aGlzJykpIHsKICAgICAgZGlzY2FyZE9wZW5MdCgpOwogICAgfQogICAgYXBwZW5kVG9rZW4obmV3IEtleXdvcmRUb2tlbihrZXl3b3JkLCB0b2tlblN0YXJ0LCBjb21tZW50cykpOwogIH0KCiAgdm9pZCBhcHBlbmRFb2ZUb2tlbigpIHsKICAgIGJlZ2luVG9rZW4oKTsKICAgIGRpc2NhcmRPcGVuTHQoKTsKICAgIHdoaWxlICghZ3JvdXBpbmdTdGFjay5pc0VtcHR5KSB7CiAgICAgIHVubWF0Y2hlZEJlZ2luR3JvdXAoZ3JvdXBpbmdTdGFjay5oZWFkKTsKICAgICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgIH0KICAgIGFwcGVuZFRva2VuKG5ldyBUb2tlbi5lb2YodG9rZW5TdGFydCwgY29tbWVudHMpKTsKICB9CgogIC8qKgogICAqIE5vdGlmaWVzIHNjYW5uaW5nIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuIE5vdGUgdGhhdCBbYXBwZW5kV2hpdGVTcGFjZV0gaXMKICAgKiBub3QgYWx3YXlzIGludm9rZWQgZm9yIFskU1BBQ0VdIGNoYXJhY3RlcnMuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBzY2FubmVycyB0byB0cmFjayBsaW5lIGJyZWFrcyBhbmQgY3JlYXRlIHRoZQogICAqIFtsaW5lU3RhcnRzXSBtYXAuCiAgICovCiAgdm9pZCBhcHBlbmRXaGl0ZVNwYWNlKGludCBuZXh0KSB7CiAgICBpZiAobmV4dCA9PSAkTEYpIHsKICAgICAgbGluZVN0YXJ0cy5hZGQoc3RyaW5nT2Zmc2V0ICsgMSk7IC8vICsxLCB0aGUgbGluZSBzdGFydHMgYWZ0ZXIgdGhlICRMRi4KICAgIH0KICB9CgogIC8qKgogICAqIE5vdGlmaWVzIG9uIFskTEZdIGNoYXJhY3RlcnMgaW4gbXVsdGktbGluZSBjb21tZW50cyBvciBzdHJpbmdzLgogICAqCiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSB0aGUgc2Nhbm5lcnMgdG8gdHJhY2sgbGluZSBicmVha3MgYW5kIGNyZWF0ZSB0aGUKICAgKiBbbGluZVN0YXJ0c10gbWFwLgogICAqLwogIHZvaWQgbGluZUZlZWRJbk11bHRpbGluZSgpIHsKICAgIGxpbmVTdGFydHMuYWRkKHN0cmluZ09mZnNldCArIDEpOwogIH0KCiAgLyoqCiAgICogQXBwZW5kcyBhIHRva2VuIHRoYXQgYmVnaW5zIGEgbmV3IGdyb3VwLCByZXByZXNlbnRlZCBieSBbdHlwZV0uCiAgICogR3JvdXAgYmVnaW4gdG9rZW5zIGFyZSAneycsICcoJywgJ1snLCAnPCcgYW5kICckeycuCiAgICovCiAgdm9pZCBhcHBlbmRCZWdpbkdyb3VwKFRva2VuVHlwZSB0eXBlKSB7CiAgICBUb2tlbiB0b2tlbiA9IG5ldyBCZWdpblRva2VuKHR5cGUsIHRva2VuU3RhcnQsIGNvbW1lbnRzKTsKICAgIGFwcGVuZFRva2VuKHRva2VuKTsKCiAgICAvLyB7IFsgJHsgY2Fubm90IGFwcGVhciBpbnNpZGUgYSB0eXBlIHBhcmFtZXRlcnMgLyBhcmd1bWVudHMuCiAgICBpZiAoIWlkZW50aWNhbCh0eXBlLmtpbmQsIExUX1RPS0VOKSAmJgogICAgICAgICFpZGVudGljYWwodHlwZS5raW5kLCBPUEVOX1BBUkVOX1RPS0VOKSkgewogICAgICBkaXNjYXJkT3Blbkx0KCk7CiAgICB9CiAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay5wcmVwZW5kKHRva2VuKTsKICB9CgogIC8qKgogICAqIEFwcGVuZHMgYSB0b2tlbiB0aGF0IGJlZ2lucyBhbiBlbmQgZ3JvdXAsIHJlcHJlc2VudGVkIGJ5IFt0eXBlXS4KICAgKiBJdCBoYW5kbGVzIHRoZSBncm91cCBlbmQgdG9rZW5zICd9JywgJyknIGFuZCAnXScuIFRoZSB0b2tlbnMgJz4nIGFuZAogICAqICc+PicgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBieSBbYXBwZW5kR3RdIGFuZCBbYXBwZW5kR3RHdF0uCiAgICovCiAgaW50IGFwcGVuZEVuZEdyb3VwKFRva2VuVHlwZSB0eXBlLCBpbnQgb3BlbktpbmQpIHsKICAgIGFzc2VydCghaWRlbnRpY2FsKG9wZW5LaW5kLCBMVF9UT0tFTikpOyAvLyBvcGVuS2luZCBpcyA8IGZvciA+IGFuZCA+PgogICAgaWYgKCFkaXNjYXJkQmVnaW5Hcm91cFVudGlsKG9wZW5LaW5kKSkgewogICAgICAvLyBObyBiZWdpbiBncm91cCBmb3VuZC4gSnVzdCBjb250aW51ZS4KICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKHR5cGUpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQogICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKHR5cGUpOwogICAgVG9rZW4gY2xvc2UgPSB0YWlsOwogICAgQmVnaW5Ub2tlbiBiZWdpbiA9IGdyb3VwaW5nU3RhY2suaGVhZDsKICAgIGlmICghaWRlbnRpY2FsKGJlZ2luLmtpbmQsIG9wZW5LaW5kKSAmJgogICAgICAgICEoYmVnaW4ua2luZCA9PSBRVUVTVElPTl9QRVJJT0RfT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTiAmJgogICAgICAgICAgICBvcGVuS2luZCA9PSBPUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOKSkgewogICAgICBhc3NlcnQoYmVnaW4ua2luZCA9PSBTVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTiAmJgogICAgICAgICAgb3BlbktpbmQgPT0gT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOKTsKICAgICAgLy8gV2UncmUgZW5kaW5nIGFuIGludGVycG9sYXRlZCBleHByZXNzaW9uLgogICAgICBiZWdpbi5lbmRHcm91cCA9IGNsb3NlOwogICAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay50YWlsOwogICAgICAvLyBVc2luZyAic3RhcnQtb2YtdGV4dCIgdG8gc2lnbmFsIHRoYXQgd2UncmUgYmFjayBpbiBzdHJpbmcKICAgICAgLy8gc2Nhbm5pbmcgbW9kZS4KICAgICAgcmV0dXJuICRTVFg7CiAgICB9CiAgICBiZWdpbi5lbmRHcm91cCA9IGNsb3NlOwogICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgIHJldHVybiBhZHZhbmNlKCk7CiAgfQoKICAvKioKICAgKiBBcHBlbmRzIGEgdG9rZW4gZm9yICc+Jy4KICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBpc3N1ZSB1bm1hdGNoZWQgZXJyb3JzLCBiZWNhdXNlID4gaXMgYWxzbyB0aGUKICAgKiBncmVhdGVyLXRoYW4gb3BlcmF0b3IuIEl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gY2xvc2UgYSBncm91cC4KICAgKi8KICB2b2lkIGFwcGVuZEd0KFRva2VuVHlwZSB0eXBlKSB7CiAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4odHlwZSk7CiAgICBpZiAoZ3JvdXBpbmdTdGFjay5pc0VtcHR5KSByZXR1cm47CiAgICBpZiAoaWRlbnRpY2FsKGdyb3VwaW5nU3RhY2suaGVhZC5raW5kLCBMVF9UT0tFTikpIHsKICAgICAgZ3JvdXBpbmdTdGFjay5oZWFkLmVuZEdyb3VwID0gdGFpbDsKICAgICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgIH0KICB9CgogIC8qKgogICAqIEFwcGVuZHMgYSB0b2tlbiBmb3IgJz4+Jy4KICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBpc3N1ZSB1bm1hdGNoZWQgZXJyb3JzLCBiZWNhdXNlID4+IGlzIGFsc28gdGhlCiAgICogc2hpZnQgb3BlcmF0b3IuIEl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gY2xvc2UgYSBncm91cC4KICAgKi8KICB2b2lkIGFwcGVuZEd0R3QoVG9rZW5UeXBlIHR5cGUpIHsKICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbih0eXBlKTsKICAgIGlmIChncm91cGluZ1N0YWNrLmlzRW1wdHkpIHJldHVybjsKICAgIGlmIChpZGVudGljYWwoZ3JvdXBpbmdTdGFjay5oZWFkLmtpbmQsIExUX1RPS0VOKSkgewogICAgICAvLyBEb24ndCBhc3NpZ24gZW5kR3JvdXA6IGluICJUPFU8Vj4+IiwgdGhlICc+PicgdG9rZW4gY2xvc2VzIHRoZSBvdXRlcgogICAgICAvLyAnPCcsIHRoZSBpbm5lciAnPCcgaXMgbGVmdCB3aXRob3V0IGVuZEdyb3VwLgogICAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay50YWlsOwogICAgfQogICAgaWYgKGdyb3VwaW5nU3RhY2suaXNFbXB0eSkgcmV0dXJuOwogICAgaWYgKGlkZW50aWNhbChncm91cGluZ1N0YWNrLmhlYWQua2luZCwgTFRfVE9LRU4pKSB7CiAgICAgIGdyb3VwaW5nU3RhY2suaGVhZC5lbmRHcm91cCA9IHRhaWw7CiAgICAgIGdyb3VwaW5nU3RhY2sgPSBncm91cGluZ1N0YWNrLnRhaWw7CiAgICB9CiAgfQoKICAvLy8gUHJlcGVuZCBbdG9rZW5dIHRvIHRoZSB0b2tlbiBzdHJlYW0uCiAgdm9pZCBwcmVwZW5kRXJyb3JUb2tlbihFcnJvclRva2VuIHRva2VuKSB7CiAgICBoYXNFcnJvcnMgPSB0cnVlOwogICAgaWYgKGVycm9yVGFpbCA9PSB0YWlsKSB7CiAgICAgIGFwcGVuZFRva2VuKHRva2VuKTsKICAgICAgZXJyb3JUYWlsID0gdGFpbDsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuLm5leHQgPSBlcnJvclRhaWwubmV4dDsKICAgICAgdG9rZW4ubmV4dC5wcmV2aW91cyA9IHRva2VuOwogICAgICBlcnJvclRhaWwubmV4dCA9IHRva2VuOwogICAgICB0b2tlbi5wcmV2aW91cyA9IGVycm9yVGFpbDsKICAgICAgZXJyb3JUYWlsID0gZXJyb3JUYWlsLm5leHQ7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGNvbW1lbnQgZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XSB0byB0aGUgY3VycmVudAogICAqIFtzY2FuT2Zmc2V0XSBwbHVzIHRoZSBbZXh0cmFPZmZzZXRdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQKICAgKiBzY2FuT2Zmc2V0IGlzIDEwLCB0aGVuIFthcHBlbmRTdWJzdHJpbmdUb2tlbig1LCAtMSldIHdpbGwgYXBwZW5kIHRoZQogICAqIHN1YnN0cmluZyBzdHJpbmcgWzUsOSkuCiAgICoKICAgKiBOb3RlIHRoYXQgW2V4dHJhT2Zmc2V0XSBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBjb3ZlcmVkIGNoYXJhY3RlcihzKSBhcmUKICAgKiBrbm93biB0byBiZSBBU0NJSS4KICAgKi8KICBDb21tZW50VG9rZW4gY3JlYXRlQ29tbWVudFRva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGRhcnRkb2MgZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XSB0byB0aGUgY3VycmVudAogICAqIFtzY2FuT2Zmc2V0XSBwbHVzIHRoZSBbZXh0cmFPZmZzZXRdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQKICAgKiBzY2FuT2Zmc2V0IGlzIDEwLCB0aGVuIFthcHBlbmRTdWJzdHJpbmdUb2tlbig1LCAtMSldIHdpbGwgYXBwZW5kIHRoZQogICAqIHN1YnN0cmluZyBzdHJpbmcgWzUsOSkuCiAgICoKICAgKiBOb3RlIHRoYXQgW2V4dHJhT2Zmc2V0XSBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBjb3ZlcmVkIGNoYXJhY3RlcihzKSBhcmUKICAgKiBrbm93biB0byBiZSBBU0NJSS4KICAgKi8KICBEYXJ0RG9jVG9rZW4gY3JlYXRlRGFydERvY1Rva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxhbmd1YWdlIHZlcnNpb24gdG9rZW4gZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XQogICAqIHRvIHRoZSBjdXJyZW50IFtzY2FuT2Zmc2V0XSBzaW1pbGFyIHRvIGNyZWF0ZUNvbW1lbnRUb2tlbi4KICAgKi8KICBMYW5ndWFnZVZlcnNpb25Ub2tlbiBjcmVhdGVMYW5ndWFnZVZlcnNpb25Ub2tlbigKICAgICAgaW50IHN0YXJ0LCBpbnQgbWFqb3IsIGludCBtaW5vcik7CgogIC8qKgogICAqIElmIGEgYmVnaW4gZ3JvdXAgdG9rZW4gbWF0Y2hlcyBbb3BlbktpbmRdLAogICAqIHRoZW4gZGlzY2FyZCBiZWdpbiBncm91cCB0b2tlbnMgdXAgdG8gdGhhdCBtYXRjaCBhbmQgcmV0dXJuIGB0cnVlYCwKICAgKiBvdGhlcndpc2UgcmV0dXJuIGBmYWxzZWAuCiAgICogVGhpcyByZWNvdmVycyBuaWNlbHkgZnJvbSBmcm9tIHNpdHVhdGlvbnMgbGlrZSAie1t9IiBhbmQgIntmb28oKSk7fSIsCiAgICogYnV0IG5vdCAiZm9vKCgpIHtiYXIoKSk7fSk7CiAgICovCiAgYm9vbCBkaXNjYXJkQmVnaW5Hcm91cFVudGlsKGludCBvcGVuS2luZCkgewogICAgTGluazxCZWdpblRva2VuPiBvcmlnaW5hbFN0YWNrID0gZ3JvdXBpbmdTdGFjazsKCiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGRvIHsKICAgICAgLy8gRG9uJ3QgcmVwb3J0IHVubWF0Y2hlZCBlcnJvcnMgZm9yIDw7IGl0IGlzIGFsc28gdGhlIGxlc3MtdGhhbiBvcGVyYXRvci4KICAgICAgZGlzY2FyZE9wZW5MdCgpOwogICAgICBpZiAoZ3JvdXBpbmdTdGFjay5pc0VtcHR5KSBicmVhazsgLy8gcmVjb3ZlcgogICAgICBCZWdpblRva2VuIGJlZ2luID0gZ3JvdXBpbmdTdGFjay5oZWFkOwogICAgICBpZiAob3BlbktpbmQgPT0gYmVnaW4ua2luZCB8fAogICAgICAgICAgKG9wZW5LaW5kID09IE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTiAmJgogICAgICAgICAgICAgIGJlZ2luLmtpbmQgPT0gU1RSSU5HX0lOVEVSUE9MQVRJT05fVE9LRU4pIHx8CiAgICAgICAgICAob3BlbktpbmQgPT0gT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTiAmJgogICAgICAgICAgICAgIGJlZ2luLmtpbmQgPT0gUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4pKSB7CiAgICAgICAgaWYgKGZpcnN0KSB7CiAgICAgICAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgb3BlbmVyIGhhcyBiZWVuIGZvdW5kIG9uIHRoZSBmaXJzdCBwYXNzCiAgICAgICAgICAvLyB0aGVuIG5vIHJlY292ZXJ5IG5lY2Vzc2FyeS4KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBicmVhazsgLy8gcmVjb3ZlcgogICAgICB9CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIGdyb3VwaW5nU3RhY2sgPSBncm91cGluZ1N0YWNrLnRhaWw7CiAgICB9IHdoaWxlICghZ3JvdXBpbmdTdGFjay5pc0VtcHR5KTsKCiAgICAvLyBJZiB0aGUgc3RhY2sgZG9lcyBub3QgaGF2ZSBhbnkgb3BlbmVyIG9mIHRoZSBnaXZlbiB0eXBlLAogICAgLy8gdGhlbiByZXR1cm4gd2l0aG91dCBkaXNjYXJkaW5nIGFueXRoaW5nLgogICAgLy8gVGhpcyByZWNvdmVycyBuaWNlbHkgZnJvbSBmcm9tIHNpdHVhdGlvbnMgbGlrZSAie2ZvbygpKTt9Ii4KICAgIGlmIChncm91cGluZ1N0YWNrLmlzRW1wdHkpIHsKICAgICAgZ3JvdXBpbmdTdGFjayA9IG9yaWdpbmFsU3RhY2s7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBJbnNlcnQgc3ludGhldGljIGNsb3NlcnMgYW5kIHJlcG9ydCBlcnJvcnMgZm9yIGFueSB1bmJhbGFuY2VkIG9wZW5lcnMuCiAgICAvLyBUaGlzIHJlY292ZXJzIG5pY2VseSBmcm9tIGZyb20gc2l0dWF0aW9ucyBsaWtlICJ7W30iLgogICAgd2hpbGUgKCFpZGVudGljYWwob3JpZ2luYWxTdGFjaywgZ3JvdXBpbmdTdGFjaykpIHsKICAgICAgLy8gRG9uJ3QgcmVwb3J0IHVubWF0Y2hlZCBlcnJvcnMgZm9yIDw7IGl0IGlzIGFsc28gdGhlIGxlc3MtdGhhbiBvcGVyYXRvci4KICAgICAgaWYgKCFpZGVudGljYWwoZ3JvdXBpbmdTdGFjay5oZWFkLmtpbmQsIExUX1RPS0VOKSkgewogICAgICAgIHVubWF0Y2hlZEJlZ2luR3JvdXAob3JpZ2luYWxTdGFjay5oZWFkKTsKICAgICAgfQogICAgICBvcmlnaW5hbFN0YWNrID0gb3JpZ2luYWxTdGFjay50YWlsOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvKioKICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGlzY2FyZCAnPCcgZnJvbSB0aGUgImdyb3VwaW5nIiBzdGFjay4KICAgKgogICAqIFtQYXJ0aWFsUGFyc2VyLnNraXBFeHByZXNzaW9uXSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCB3ZSBkbyBub3QKICAgKiBjcmVhdGUgZ3JvdXBzIGZvciBzdHVmZiBsaWtlOgogICAqIFs6YSA9IGIgPCBjLCBkID0gZSA+IGY6XS4KICAgKgogICAqIEluIG90aGVyIHdvcmRzLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgc2Nhbm5lciByZWNvZ25pemVzCiAgICogc29tZXRoaW5nIHdoaWNoIGNhbm5vdCBwb3NzaWJseSBiZSBwYXJ0IG9mIGEgdHlwZSBwYXJhbWV0ZXIvYXJndW1lbnQKICAgKiBsaXN0LCBsaWtlIHRoZSAnPScgaW4gdGhlIGFib3ZlIGV4YW1wbGUuCiAgICovCiAgdm9pZCBkaXNjYXJkT3Blbkx0KCkgewogICAgd2hpbGUgKCFncm91cGluZ1N0YWNrLmlzRW1wdHkgJiYKICAgICAgICBpZGVudGljYWwoZ3JvdXBpbmdTdGFjay5oZWFkLmtpbmQsIExUX1RPS0VOKSkgewogICAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay50YWlsOwogICAgfQogIH0KCiAgLyoqCiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRpc2NhcmQgJyR7JyBmcm9tIHRoZSAiZ3JvdXBpbmciIHN0YWNrLgogICAqCiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHNjYW5uZXIgZmluZHMgYW4gdW50ZXJtaW5hdGVkCiAgICogaW50ZXJwb2xhdGlvbiBleHByZXNzaW9uLgogICAqLwogIHZvaWQgZGlzY2FyZEludGVycG9sYXRpb24oKSB7CiAgICB3aGlsZSAoIWdyb3VwaW5nU3RhY2suaXNFbXB0eSkgewogICAgICBCZWdpblRva2VuIGJlZ2luVG9rZW4gPSBncm91cGluZ1N0YWNrLmhlYWQ7CiAgICAgIHVubWF0Y2hlZEJlZ2luR3JvdXAoYmVnaW5Ub2tlbik7CiAgICAgIGdyb3VwaW5nU3RhY2sgPSBncm91cGluZ1N0YWNrLnRhaWw7CiAgICAgIGlmIChpZGVudGljYWwoYmVnaW5Ub2tlbi5raW5kLCBTVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTikpIGJyZWFrOwogICAgfQogIH0KCiAgdm9pZCB1bm1hdGNoZWRCZWdpbkdyb3VwKEJlZ2luVG9rZW4gYmVnaW4pIHsKICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdW5tYXRjaGVkIEJlZ2luVG9rZW5zIGFyZSByZXBvcnRlZCBhcwogICAgLy8gZXJyb3JzLiAgSG93ZXZlciwgdGhlIGRpZXQgcGFyc2VyIGFzc3VtZXMgdGhhdCBncm91cHMgYXJlIHdlbGwtYmFsYW5jZWQKICAgIC8vIGFuZCB3aWxsIG5ldmVyIGxvb2sgYXQgdGhlIGVuZEdyb3VwIHRva2VuLiAgVGhpcyBpcyBhIG5pY2UgcHJvcGVydHkgdGhhdAogICAgLy8gYWxsb3dzIHVzIHRvIHNraXAgcXVpY2tseSBvdmVyIGNvcnJlY3QgY29kZS4gQnkgaW5zZXJ0aW5nIGFuIGFkZGl0aW9uYWwKICAgIC8vIHN5bnRoZXRpYyB0b2tlbiBpbiB0aGUgc3RyZWFtLCB3ZSBjYW4ga2VlcCBpZ25vcmluZyBlbmRHcm91cCB0b2tlbnMuCiAgICAvLwogICAgLy8gW2JlZ2luXSAtLW5leHQtLT4gW3RhaWxdCiAgICAvLyBbYmVnaW5dIC0tZW5kRy0tPiBbc3ludGhldGljXSAtLW5leHQtLT4gW25leHRdIC0tbmV4dC0tPiBbdGFpbF0KICAgIC8vCiAgICAvLyBUaGlzIGFsbG93cyB0aGUgZGlldCBwYXJzZXIgdG8gc2tpcCBmcm9tIFtiZWdpbl0gdmlhIGVuZEdyb3VwIHRvCiAgICAvLyBbc3ludGhldGljXSBhbmQgaWdub3JlIHRoZSBbc3ludGhldGljXSB0b2tlbiAoYXNzdW1pbmcgaXQncyBjb3JyZWN0KSwKICAgIC8vIHRoZW4gdGhlIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgd2hlbiBwYXJzaW5nIHRoZSBbbmV4dF0gdG9rZW4uCiAgICAvLwogICAgLy8gRm9yIGV4YW1wbGUsIHRva2VuaXplKCJ7WzF9OyIpIHByb2R1Y2VzOgogICAgLy8KICAgIC8vIFN5bWJvbFRva2VuKHspIC0tZW5kR3JvdXAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgIG5leHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyBTeW1ib2xUb2tlbihbKSAtLWVuZEdyb3VwLS0rICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICBuZXh0ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgIHYgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gU3RyaW5nVG9rZW4oMSkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgbmV4dCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgICB2ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vIFN5bWJvbFRva2VuKF0pPC0tLS0tLS0tLS0tLSsgPC0tIFN5bnRoZXRpYyB0b2tlbiB8CiAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgIG5leHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyBVbm1hdGNoZWRUb2tlbihbKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICBuZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gU3ltYm9sVG9rZW4ofSk8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIC8vICAgICAgfAogICAgLy8gICAgIG5leHQKICAgIC8vICAgICAgdgogICAgLy8gU3ltYm9sVG9rZW4oOykKICAgIC8vICAgICAgfAogICAgLy8gICAgIG5leHQKICAgIC8vICAgICAgdgogICAgLy8gICAgIEVPRgogICAgVG9rZW5UeXBlIHR5cGUgPSBjbG9zZUJyYWNlSW5mb0ZvcihiZWdpbik7CiAgICBhcHBlbmRUb2tlbihuZXcgU3ludGhldGljVG9rZW4odHlwZSwgdG9rZW5TdGFydCkuLmJlZm9yZVN5bnRoZXRpYyA9IHRhaWwpOwogICAgYmVnaW4uZW5kR3JvdXAgPSB0YWlsOwogICAgcHJlcGVuZEVycm9yVG9rZW4obmV3IFVubWF0Y2hlZFRva2VuKGJlZ2luKSk7CiAgfQoKICAvLy8gUmV0dXJuIHRydWUgd2hlbiBhdCBFT0YuCiAgYm9vbCBhdEVuZE9mRmlsZSgpOwoKICBUb2tlbiB0b2tlbml6ZSgpIHsKICAgIHdoaWxlICghYXRFbmRPZkZpbGUoKSkgewogICAgICBpbnQgbmV4dCA9IGFkdmFuY2UoKTsKCiAgICAgIC8vIFNjYW4gdGhlIGhlYWRlciBsb29raW5nIGZvciBhIGxhbmd1YWdlIHZlcnNpb24KICAgICAgaWYgKCFpZGVudGljYWwobmV4dCwgJEVPRikpIHsKICAgICAgICBUb2tlbiBvbGRUYWlsID0gdGFpbDsKICAgICAgICBuZXh0ID0gYmlnSGVhZGVyU3dpdGNoKG5leHQpOwogICAgICAgIGlmICghaWRlbnRpY2FsKG5leHQsICRFT0YpICYmIHRhaWwua2luZCA9PSBTQ1JJUFRfVE9LRU4pIHsKICAgICAgICAgIG9sZFRhaWwgPSB0YWlsOwogICAgICAgICAgbmV4dCA9IGJpZ0hlYWRlclN3aXRjaChuZXh0KTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKCFpZGVudGljYWwobmV4dCwgJEVPRikgJiYgdGFpbCA9PSBvbGRUYWlsKSB7CiAgICAgICAgICBuZXh0ID0gYmlnSGVhZGVyU3dpdGNoKG5leHQpOwogICAgICAgIH0KICAgICAgICBuZXh0ID0gbmV4dDsKICAgICAgfQoKICAgICAgd2hpbGUgKCFpZGVudGljYWwobmV4dCwgJEVPRikpIHsKICAgICAgICBuZXh0ID0gYmlnU3dpdGNoKG5leHQpOwogICAgICB9CiAgICAgIGlmIChhdEVuZE9mRmlsZSgpKSB7CiAgICAgICAgYXBwZW5kRW9mVG9rZW4oKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB1bmV4cGVjdGVkKCRFT0YpOwogICAgICB9CiAgICB9CgogICAgLy8gQWx3YXlzIHByZXRlbmQgdGhhdCB0aGVyZSdzIGEgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgogICAgbGluZVN0YXJ0cy5hZGQoc3RyaW5nT2Zmc2V0ICsgMSk7CgogICAgcmV0dXJuIGZpcnN0VG9rZW4oKTsKICB9CgogIGludCBiaWdIZWFkZXJTd2l0Y2goaW50IG5leHQpIHsKICAgIGlmICghaWRlbnRpY2FsKG5leHQsICRTTEFTSCkpIHsKICAgICAgcmV0dXJuIGJpZ1N3aXRjaChuZXh0KTsKICAgIH0KICAgIGJlZ2luVG9rZW4oKTsKICAgIGlmICghaWRlbnRpY2FsKCRTTEFTSCwgcGVlaygpKSkgewogICAgICByZXR1cm4gdG9rZW5pemVTbGFzaE9yQ29tbWVudChuZXh0KTsKICAgIH0KICAgIHJldHVybiB0b2tlbml6ZUxhbmd1YWdlVmVyc2lvbk9yU2luZ2xlTGluZUNvbW1lbnQobmV4dCk7CiAgfQoKICBpbnQgYmlnU3dpdGNoKGludCBuZXh0KSB7CiAgICBiZWdpblRva2VuKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRTUEFDRSkgfHwKICAgICAgICBpZGVudGljYWwobmV4dCwgJFRBQikgfHwKICAgICAgICBpZGVudGljYWwobmV4dCwgJExGKSB8fAogICAgICAgIGlkZW50aWNhbChuZXh0LCAkQ1IpKSB7CiAgICAgIGFwcGVuZFdoaXRlU3BhY2UobmV4dCk7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIC8vIFNlcXVlbmNlcyBvZiBzcGFjZXMgYXJlIGNvbW1vbiwgc28gYWR2YW5jZSB0aHJvdWdoIHRoZW0gZmFzdC4KICAgICAgd2hpbGUgKGlkZW50aWNhbChuZXh0LCAkU1BBQ0UpKSB7CiAgICAgICAgLy8gV2UgZG9uJ3QgaW52b2tlIFs6YXBwZW5kV2hpdGVTcGFjZShuZXh0KTpdIGhlcmUgZm9yIGVmZmljaWVuY3ksCiAgICAgICAgLy8gYXNzdW1pbmcgdGhhdCBpdCBkb2VzIG5vdCBkbyBhbnl0aGluZyBmb3Igc3BhY2UgY2hhcmFjdGVycy4KICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIGludCBuZXh0TG93ZXIgPSBuZXh0IHwgMHgyMDsKCiAgICBpZiAoJGEgPD0gbmV4dExvd2VyICYmIG5leHRMb3dlciA8PSAkeikgewogICAgICBpZiAoaWRlbnRpY2FsKCRyLCBuZXh0KSkgewogICAgICAgIHJldHVybiB0b2tlbml6ZVJhd1N0cmluZ0tleXdvcmRPcklkZW50aWZpZXIobmV4dCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRva2VuaXplS2V5d29yZE9ySWRlbnRpZmllcihuZXh0LCB0cnVlKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRDTE9TRV9QQVJFTikpIHsKICAgICAgcmV0dXJuIGFwcGVuZEVuZEdyb3VwKFRva2VuVHlwZS5DTE9TRV9QQVJFTiwgT1BFTl9QQVJFTl9UT0tFTik7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkT1BFTl9QQVJFTikpIHsKICAgICAgYXBwZW5kQmVnaW5Hcm91cChUb2tlblR5cGUuT1BFTl9QQVJFTik7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkU0VNSUNPTE9OKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlNFTUlDT0xPTik7CiAgICAgIC8vIFR5cGUgcGFyYW1ldGVycyBhbmQgYXJndW1lbnRzIGNhbm5vdCBjb250YWluIHNlbWljb2xvbi4KICAgICAgZGlzY2FyZE9wZW5MdCgpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFBFUklPRCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplRG90c09yTnVtYmVyKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJENPTU1BKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkNPTU1BKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplRXF1YWxzKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJENMT1NFX0NVUkxZX0JSQUNLRVQpKSB7CiAgICAgIHJldHVybiBhcHBlbmRFbmRHcm91cCgKICAgICAgICAgIFRva2VuVHlwZS5DTE9TRV9DVVJMWV9CUkFDS0VULCBPUEVOX0NVUkxZX0JSQUNLRVRfVE9LRU4pOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFNMQVNIKSkgewogICAgICByZXR1cm4gdG9rZW5pemVTbGFzaE9yQ29tbWVudChuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRPUEVOX0NVUkxZX0JSQUNLRVQpKSB7CiAgICAgIGFwcGVuZEJlZ2luR3JvdXAoVG9rZW5UeXBlLk9QRU5fQ1VSTFlfQlJBQ0tFVCk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRFEpIHx8IGlkZW50aWNhbChuZXh0LCAkU1EpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVN0cmluZyhuZXh0LCBzY2FuT2Zmc2V0LCBmYWxzZSk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkXykpIHsKICAgICAgcmV0dXJuIHRva2VuaXplS2V5d29yZE9ySWRlbnRpZmllcihuZXh0LCB0cnVlKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRDT0xPTikpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5DT0xPTik7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkTFQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUxlc3NUaGFuKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEdUKSkgewogICAgICByZXR1cm4gdG9rZW5pemVHcmVhdGVyVGhhbihuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRCQU5HKSkgewogICAgICByZXR1cm4gdG9rZW5pemVFeGNsYW1hdGlvbihuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRPUEVOX1NRVUFSRV9CUkFDS0VUKSkgewogICAgICByZXR1cm4gdG9rZW5pemVPcGVuU3F1YXJlQnJhY2tldChuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRDTE9TRV9TUVVBUkVfQlJBQ0tFVCkpIHsKICAgICAgcmV0dXJuIGFwcGVuZEVuZEdyb3VwKAogICAgICAgICAgVG9rZW5UeXBlLkNMT1NFX1NRVUFSRV9CUkFDS0VULCBPUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRBVCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplQXQobmV4dCk7CiAgICB9CgogICAgaWYgKG5leHQgPj0gJDEgJiYgbmV4dCA8PSAkOSkgewogICAgICByZXR1cm4gdG9rZW5pemVOdW1iZXIobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQU1QRVJTQU5EKSkgewogICAgICByZXR1cm4gdG9rZW5pemVBbXBlcnNhbmQobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkMCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplSGV4T3JOdW1iZXIobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkUVVFU1RJT04pKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVF1ZXN0aW9uKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEJBUikpIHsKICAgICAgcmV0dXJuIHRva2VuaXplQmFyKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFBMVVMpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVBsdXMobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkJCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplS2V5d29yZE9ySWRlbnRpZmllcihuZXh0LCB0cnVlKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRNSU5VUykpIHsKICAgICAgcmV0dXJuIHRva2VuaXplTWludXMobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkU1RBUikpIHsKICAgICAgcmV0dXJuIHRva2VuaXplTXVsdGlwbHkobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQ0FSRVQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUNhcmV0KG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFRJTERFKSkgewogICAgICByZXR1cm4gdG9rZW5pemVUaWxkZShuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRQRVJDRU5UKSkgewogICAgICByZXR1cm4gdG9rZW5pemVQZXJjZW50KG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEJBQ0tQSU5HKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkJBQ0tQSU5HKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRCQUNLU0xBU0gpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQkFDS1NMQVNIKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRIQVNIKSkgewogICAgICByZXR1cm4gdG9rZW5pemVUYWcobmV4dCk7CiAgICB9CgogICAgaWYgKG5leHQgPCAweDFmKSB7CiAgICAgIHJldHVybiB1bmV4cGVjdGVkKG5leHQpOwogICAgfQoKICAgIG5leHQgPSBjdXJyZW50QXNVbmljb2RlKG5leHQpOwoKICAgIHJldHVybiB1bmV4cGVjdGVkKG5leHQpOwogIH0KCiAgaW50IHRva2VuaXplVGFnKGludCBuZXh0KSB7CiAgICAvLyAjIG9yICMhLipbXG5ccl0KICAgIGlmIChzY2FuT2Zmc2V0ID09IDApIHsKICAgICAgaWYgKGlkZW50aWNhbChwZWVrKCksICRCQU5HKSkgewogICAgICAgIGludCBzdGFydCA9IHNjYW5PZmZzZXQ7CiAgICAgICAgYm9vbCBhc2NpaU9ubHkgPSB0cnVlOwogICAgICAgIGRvIHsKICAgICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgICBpZiAobmV4dCA+IDEyNykgYXNjaWlPbmx5ID0gZmFsc2U7CiAgICAgICAgfSB3aGlsZSAoIWlkZW50aWNhbChuZXh0LCAkTEYpICYmCiAgICAgICAgICAgICFpZGVudGljYWwobmV4dCwgJENSKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKG5leHQsICRFT0YpKTsKICAgICAgICBpZiAoIWFzY2lpT25seSkgaGFuZGxlVW5pY29kZShzdGFydCk7CiAgICAgICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNDUklQVF9UQUcsIHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9CiAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkhBU0gpOwogICAgcmV0dXJuIGFkdmFuY2UoKTsKICB9CgogIGludCB0b2tlbml6ZVRpbGRlKGludCBuZXh0KSB7CiAgICAvLyB+IH4vIH4vPQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFNMQVNIKSkgewogICAgICByZXR1cm4gc2VsZWN0KCRFUSwgVG9rZW5UeXBlLlRJTERFX1NMQVNIX0VRLCBUb2tlblR5cGUuVElMREVfU0xBU0gpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5USUxERSk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplT3BlblNxdWFyZUJyYWNrZXQoaW50IG5leHQpIHsKICAgIC8vIFsgW10gW109CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQ0xPU0VfU1FVQVJFX0JSQUNLRVQpKSB7CiAgICAgIHJldHVybiBzZWxlY3QoJEVRLCBUb2tlblR5cGUuSU5ERVhfRVEsIFRva2VuVHlwZS5JTkRFWCk7CiAgICB9CiAgICBhcHBlbmRCZWdpbkdyb3VwKFRva2VuVHlwZS5PUEVOX1NRVUFSRV9CUkFDS0VUKTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHRva2VuaXplQ2FyZXQoaW50IG5leHQpIHsKICAgIC8vIF4gXj0KICAgIHJldHVybiBzZWxlY3QoJEVRLCBUb2tlblR5cGUuQ0FSRVRfRVEsIFRva2VuVHlwZS5DQVJFVCk7CiAgfQoKICBpbnQgdG9rZW5pemVRdWVzdGlvbihpbnQgbmV4dCkgewogICAgLy8gPyA/LiA/PyA/Pz0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRRVUVTVElPTikpIHsKICAgICAgcmV0dXJuIHNlbGVjdCgKICAgICAgICAgICRFUSwgVG9rZW5UeXBlLlFVRVNUSU9OX1FVRVNUSU9OX0VRLCBUb2tlblR5cGUuUVVFU1RJT05fUVVFU1RJT04pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJFBFUklPRCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKF9lbmFibGVOb25OdWxsYWJsZSAmJiBpZGVudGljYWwoJE9QRU5fU1FVQVJFX0JSQUNLRVQsIG5leHQpKSB7CiAgICAgICAgYXBwZW5kQmVnaW5Hcm91cChUb2tlblR5cGUuUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVQpOwogICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgIH0KICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5RVUVTVElPTl9QRVJJT0QpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUVVFU1RJT04pOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZUJhcihpbnQgbmV4dCkgewogICAgLy8gfCB8fCB8PSB8fD0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRCQVIpKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmIChMQVpZX0FTU0lHTk1FTlRfRU5BQkxFRCAmJiBpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQkFSX0JBUl9FUSk7CiAgICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgICAgfQogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkJBUl9CQVIpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5CQVJfRVEpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5CQVIpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZUFtcGVyc2FuZChpbnQgbmV4dCkgewogICAgLy8gJiYgJj0gJiAmJj0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRBTVBFUlNBTkQpKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmIChMQVpZX0FTU0lHTk1FTlRfRU5BQkxFRCAmJiBpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQU1QRVJTQU5EX0FNUEVSU0FORF9FUSk7CiAgICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgICAgfQogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkFNUEVSU0FORF9BTVBFUlNBTkQpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5BTVBFUlNBTkRfRVEpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5BTVBFUlNBTkQpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZVBlcmNlbnQoaW50IG5leHQpIHsKICAgIC8vICUgJT0KICAgIHJldHVybiBzZWxlY3QoJEVRLCBUb2tlblR5cGUuUEVSQ0VOVF9FUSwgVG9rZW5UeXBlLlBFUkNFTlQpOwogIH0KCiAgaW50IHRva2VuaXplTXVsdGlwbHkoaW50IG5leHQpIHsKICAgIC8vICogKj0KICAgIHJldHVybiBzZWxlY3QoJEVRLCBUb2tlblR5cGUuU1RBUl9FUSwgVG9rZW5UeXBlLlNUQVIpOwogIH0KCiAgaW50IHRva2VuaXplTWludXMoaW50IG5leHQpIHsKICAgIC8vIC0gLS0gLT0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRNSU5VUykpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5NSU5VU19NSU5VUyk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuTUlOVVNfRVEpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5NSU5VUyk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplUGx1cyhpbnQgbmV4dCkgewogICAgLy8gKyArKyArPQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwoJFBMVVMsIG5leHQpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUExVU19QTFVTKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRFUSwgbmV4dCkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5QTFVTX0VRKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUExVUyk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplRXhjbGFtYXRpb24oaW50IG5leHQpIHsKICAgIC8vICEgIT0KICAgIC8vICE9PSBpcyBrZXB0IGZvciB1c2VyLWZyaWVuZGx5IGVycm9yIHJlcG9ydGluZy4KCiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgIC8vd2FzIGByZXR1cm4gc2VsZWN0KCRFUSwgVG9rZW5UeXBlLkJBTkdfRVFfRVEsIFRva2VuVHlwZS5CQU5HX0VRKTtgCiAgICAgIGludCBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkJBTkdfRVFfRVEpOwogICAgICAgIHByZXBlbmRFcnJvclRva2VuKG5ldyBVbnN1cHBvcnRlZE9wZXJhdG9yKHRhaWwsIHRva2VuU3RhcnQpKTsKICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQkFOR19FUSk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgIH0KICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQkFORyk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZUVxdWFscyhpbnQgbmV4dCkgewogICAgLy8gPSA9PSA9PgogICAgLy8gPT09IGlzIGtlcHQgZm9yIHVzZXItZnJpZW5kbHkgZXJyb3IgcmVwb3J0aW5nLgoKICAgIC8vIFR5cGUgcGFyYW1ldGVycyBhbmQgYXJndW1lbnRzIGNhbm5vdCBjb250YWluIGFueSB0b2tlbiB0aGF0CiAgICAvLyBzdGFydHMgd2l0aCAnPScuCiAgICBkaXNjYXJkT3Blbkx0KCk7CgogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICAvLyB3YXMgYHJldHVybiBzZWxlY3QoJEVRLCBUb2tlblR5cGUuRVFfRVFfRVEsIFRva2VuVHlwZS5FUV9FUSk7YAogICAgICBpbnQgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5FUV9FUV9FUSk7CiAgICAgICAgcHJlcGVuZEVycm9yVG9rZW4obmV3IFVuc3VwcG9ydGVkT3BlcmF0b3IodGFpbCwgdG9rZW5TdGFydCkpOwogICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5FUV9FUSk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG5leHQsICRHVCkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5GVU5DVElPTik7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9CiAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkVRKTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHRva2VuaXplR3JlYXRlclRoYW4oaW50IG5leHQpIHsKICAgIC8vID4gPj0gPj4gPj49ID4+PiA+Pj49CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbCgkRVEsIG5leHQpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuR1RfRVEpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoJEdULCBuZXh0KSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoaWRlbnRpY2FsKCRFUSwgbmV4dCkpIHsKICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkdUX0dUX0VRKTsKICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgICB9IGVsc2UgaWYgKF9lbmFibGVUcmlwbGVTaGlmdCAmJiBpZGVudGljYWwoJEdULCBuZXh0KSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKF9lbmFibGVUcmlwbGVTaGlmdCAmJiBpZGVudGljYWwoJEVRLCBuZXh0KSkgewogICAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5HVF9HVF9HVF9FUSk7CiAgICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgICAgIH0KICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkdUX0dUX0dUKTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcHBlbmRHdEd0KFRva2VuVHlwZS5HVF9HVCk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZEd0KFRva2VuVHlwZS5HVCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplTGVzc1RoYW4oaW50IG5leHQpIHsKICAgIC8vIDwgPD0gPDwgPDw9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbCgkRVEsIG5leHQpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuTFRfRVEpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoJExULCBuZXh0KSkgewogICAgICByZXR1cm4gc2VsZWN0KCRFUSwgVG9rZW5UeXBlLkxUX0xUX0VRLCBUb2tlblR5cGUuTFRfTFQpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kQmVnaW5Hcm91cChUb2tlblR5cGUuTFQpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZU51bWJlcihpbnQgbmV4dCkgewogICAgaW50IHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmICgkMCA8PSBuZXh0ICYmIG5leHQgPD0gJDkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJGUpIHx8IGlkZW50aWNhbChuZXh0LCAkRSkpIHsKICAgICAgICByZXR1cm4gdG9rZW5pemVGcmFjdGlvblBhcnQobmV4dCwgc3RhcnQpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJFBFUklPRCkpIHsKICAgICAgICAgIGludCBuZXh0bmV4dCA9IHBlZWsoKTsKICAgICAgICAgIGlmICgkMCA8PSBuZXh0bmV4dCAmJiBuZXh0bmV4dCA8PSAkOSkgewogICAgICAgICAgICByZXR1cm4gdG9rZW5pemVGcmFjdGlvblBhcnQoYWR2YW5jZSgpLCBzdGFydCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5JTlQsIHN0YXJ0LCB0cnVlKTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgfQogIH0KCiAgaW50IHRva2VuaXplSGV4T3JOdW1iZXIoaW50IG5leHQpIHsKICAgIGludCB4ID0gcGVlaygpOwogICAgaWYgKGlkZW50aWNhbCh4LCAkeCkgfHwgaWRlbnRpY2FsKHgsICRYKSkgewogICAgICByZXR1cm4gdG9rZW5pemVIZXgobmV4dCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW5pemVOdW1iZXIobmV4dCk7CiAgfQoKICBpbnQgdG9rZW5pemVIZXgoaW50IG5leHQpIHsKICAgIGludCBzdGFydCA9IHNjYW5PZmZzZXQ7CiAgICBuZXh0ID0gYWR2YW5jZSgpOyAvLyBBZHZhbmNlIHBhc3QgdGhlICR4IG9yICRYLgogICAgYm9vbCBoYXNEaWdpdHMgPSBmYWxzZTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmICgoJDAgPD0gbmV4dCAmJiBuZXh0IDw9ICQ5KSB8fAogICAgICAgICAgKCRBIDw9IG5leHQgJiYgbmV4dCA8PSAkRikgfHwKICAgICAgICAgICgkYSA8PSBuZXh0ICYmIG5leHQgPD0gJGYpKSB7CiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWhhc0RpZ2l0cykgewogICAgICAgICAgcHJlcGVuZEVycm9yVG9rZW4obmV3IFVudGVybWluYXRlZFRva2VuKAogICAgICAgICAgICAgIG1lc3NhZ2VFeHBlY3RlZEhleERpZ2l0LCBzdGFydCwgc3RyaW5nT2Zmc2V0KSk7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgYXBwZW5kU3ludGhldGljU3Vic3RyaW5nVG9rZW4oCiAgICAgICAgICAgICAgVG9rZW5UeXBlLkhFWEFERUNJTUFMLCBzdGFydCwgdHJ1ZSwgIjAiKTsKICAgICAgICAgIHJldHVybiBuZXh0OwogICAgICAgIH0KICAgICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuSEVYQURFQ0lNQUwsIHN0YXJ0LCB0cnVlKTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgfQogIH0KCiAgaW50IHRva2VuaXplRG90c09yTnVtYmVyKGludCBuZXh0KSB7CiAgICBpbnQgc3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmICgoJDAgPD0gbmV4dCAmJiBuZXh0IDw9ICQ5KSkgewogICAgICByZXR1cm4gdG9rZW5pemVGcmFjdGlvblBhcnQobmV4dCwgc3RhcnQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoJFBFUklPRCwgbmV4dCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkUEVSSU9EKSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkUVVFU1RJT04pKSB7CiAgICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlBFUklPRF9QRVJJT0RfUEVSSU9EX1FVRVNUSU9OKTsKICAgICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUEVSSU9EX1BFUklPRF9QRVJJT0QpOwogICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUEVSSU9EX1BFUklPRCk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUEVSSU9EKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVGcmFjdGlvblBhcnQoaW50IG5leHQsIGludCBzdGFydCkgewogICAgYm9vbCBkb25lID0gZmFsc2U7CiAgICBib29sIGhhc0RpZ2l0ID0gZmFsc2U7CiAgICBMT09QOgogICAgd2hpbGUgKCFkb25lKSB7CiAgICAgIGlmICgkMCA8PSBuZXh0ICYmIG5leHQgPD0gJDkpIHsKICAgICAgICBoYXNEaWdpdCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRlLCBuZXh0KSB8fCBpZGVudGljYWwoJEUsIG5leHQpKSB7CiAgICAgICAgaGFzRGlnaXQgPSB0cnVlOwogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkUExVUykgfHwgaWRlbnRpY2FsKG5leHQsICRNSU5VUykpIHsKICAgICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgfQogICAgICAgIGJvb2wgaGFzRXhwb25lbnREaWdpdHMgPSBmYWxzZTsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgaWYgKCQwIDw9IG5leHQgJiYgbmV4dCA8PSAkOSkgewogICAgICAgICAgICBoYXNFeHBvbmVudERpZ2l0cyA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWhhc0V4cG9uZW50RGlnaXRzKSB7CiAgICAgICAgICAgICAgYXBwZW5kU3ludGhldGljU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLkRPVUJMRSwgc3RhcnQsIHRydWUsICcwJyk7CiAgICAgICAgICAgICAgcHJlcGVuZEVycm9yVG9rZW4obmV3IFVudGVybWluYXRlZFRva2VuKAogICAgICAgICAgICAgICAgICBtZXNzYWdlTWlzc2luZ0V4cG9uZW50LCB0b2tlblN0YXJ0LCBzdHJpbmdPZmZzZXQpKTsKICAgICAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgfQoKICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICBjb250aW51ZSBMT09QOwogICAgICB9IGVsc2UgewogICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgIGNvbnRpbnVlIExPT1A7CiAgICAgIH0KICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmICghaGFzRGlnaXQpIHsKICAgICAgLy8gUmVkdWNlIG9mZnNldCwgd2UgYWxyZWFkeSBhZHZhbmNlZCB0byB0aGUgdG9rZW4gcGFzdCB0aGUgcGVyaW9kLgogICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuSU5ULCBzdGFydCwgdHJ1ZSwgLTEpOwoKICAgICAgLy8gVE9ETyhhaGUpOiBXcm9uZyBvZmZzZXQgZm9yIHRoZSBwZXJpb2QuIENhbm5vdCBjYWxsIGJlZ2luVG9rZW4gYmVjYXVzZQogICAgICAvLyB0aGUgc2Nhbm5lciBhbHJlYWR5IGFkdmFuY2VkIHBhc3QgdGhlIHBlcmlvZC4KICAgICAgaWYgKGlkZW50aWNhbCgkUEVSSU9ELCBuZXh0KSkgewogICAgICAgIHJldHVybiBzZWxlY3QoCiAgICAgICAgICAgICRQRVJJT0QsIFRva2VuVHlwZS5QRVJJT0RfUEVSSU9EX1BFUklPRCwgVG9rZW5UeXBlLlBFUklPRF9QRVJJT0QpOwogICAgICB9CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUEVSSU9EKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuRE9VQkxFLCBzdGFydCwgdHJ1ZSk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZVNsYXNoT3JDb21tZW50KGludCBuZXh0KSB7CiAgICBpbnQgc3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwoJFNUQVIsIG5leHQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZU11bHRpTGluZUNvbW1lbnQobmV4dCwgc3RhcnQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoJFNMQVNILCBuZXh0KSkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudChuZXh0LCBzdGFydCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgkRVEsIG5leHQpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuU0xBU0hfRVEpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5TTEFTSCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplTGFuZ3VhZ2VWZXJzaW9uT3JTaW5nbGVMaW5lQ29tbWVudChpbnQgbmV4dCkgewogICAgaW50IHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgIG5leHQgPSBhZHZhbmNlKCk7CgogICAgLy8gRGFydCBkb2MKICAgIGlmIChpZGVudGljYWwoJFNMQVNILCBwZWVrKCkpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50KG5leHQsIHN0YXJ0KTsKICAgIH0KCiAgICAvLyAiQGRhcnQiCiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgd2hpbGUgKGlkZW50aWNhbCgkU1BBQ0UsIG5leHQpKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpZiAoIWlkZW50aWNhbCgkQVQsIG5leHQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmICghaWRlbnRpY2FsKCRkLCBuZXh0KSkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoIWlkZW50aWNhbCgkYSwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKCFpZGVudGljYWwoJHIsIG5leHQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmICghaWRlbnRpY2FsKCR0LCBuZXh0KSkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KICAgIG5leHQgPSBhZHZhbmNlKCk7CgogICAgLy8gIj0iCiAgICB3aGlsZSAoaWRlbnRpY2FsKCRTUEFDRSwgbmV4dCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmICghaWRlbnRpY2FsKCRFUSwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwoKICAgIC8vIG1ham9yCiAgICB3aGlsZSAoaWRlbnRpY2FsKCRTUEFDRSwgbmV4dCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGludCBtYWpvciA9IDA7CiAgICBpbnQgbWFqb3JTdGFydCA9IHNjYW5PZmZzZXQ7CiAgICB3aGlsZSAoaXNEaWdpdChuZXh0KSkgewogICAgICBtYWpvciA9IG1ham9yICogMTAgKyBuZXh0IC0gJDA7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpZiAoc2Nhbk9mZnNldCA9PSBtYWpvclN0YXJ0KSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQoKICAgIC8vIG1pbm9yCiAgICBpZiAoIWlkZW50aWNhbCgkUEVSSU9ELCBuZXh0KSkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpbnQgbWlub3IgPSAwOwogICAgaW50IG1pbm9yU3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgd2hpbGUgKGlzRGlnaXQobmV4dCkpIHsKICAgICAgbWlub3IgPSBtaW5vciAqIDEwICsgbmV4dCAtICQwOwogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKHNjYW5PZmZzZXQgPT0gbWlub3JTdGFydCkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KCiAgICAvLyB0cmFpbGluZyBzcGFjZXMKICAgIHdoaWxlIChpZGVudGljYWwoJFNQQUNFLCBuZXh0KSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKG5leHQgIT0gJExGICYmIG5leHQgIT0gJENSICYmIG5leHQgIT0gJEVPRikgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KCiAgICB2YXIgbGFuZ3VhZ2VWZXJzaW9uID0gY3JlYXRlTGFuZ3VhZ2VWZXJzaW9uVG9rZW4oc3RhcnQsIG1ham9yLCBtaW5vcik7CiAgICBpZiAobGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCAhPSBudWxsKSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBtYWtlIHRoaXMgcmVxdWlyZWQgYW5kIHJlbW92ZSB0aGUgbGFuZ3VhZ2VWZXJzaW9uIGZpZWxkCiAgICAgIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQodGhpcywgbGFuZ3VhZ2VWZXJzaW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiByZW1vdmUgdGhpcyBoYWNrIGFuZCByZXF1aXJlIGxpc3RlbmVyIHRvIHVwZGF0ZQogICAgICAvLyB0aGUgc2Nhbm5lcidzIGNvbmZpZ3VyYXRpb24uCiAgICAgIGNvbmZpZ3VyYXRpb24gPSBTY2FubmVyQ29uZmlndXJhdGlvbi5jbGFzc2ljOwogICAgfQogICAgaWYgKGluY2x1ZGVDb21tZW50cykgewogICAgICBfYXBwZW5kVG9Db21tZW50U3RyZWFtKGxhbmd1YWdlVmVyc2lvbik7CiAgICB9CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50KGludCBuZXh0LCBpbnQgc3RhcnQpIHsKICAgIGJvb2wgZGFydGRvYyA9IGlkZW50aWNhbCgkU0xBU0gsIHBlZWsoKSk7CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBkYXJ0ZG9jKTsKICB9CgogIGludCB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChpbnQgbmV4dCwgaW50IHN0YXJ0LCBib29sIGRhcnRkb2MpIHsKICAgIGJvb2wgYXNjaWlPbmx5ID0gdHJ1ZTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChuZXh0ID4gMTI3KSBhc2NpaU9ubHkgPSBmYWxzZTsKICAgICAgaWYgKGlkZW50aWNhbCgkTEYsIG5leHQpIHx8CiAgICAgICAgICBpZGVudGljYWwoJENSLCBuZXh0KSB8fAogICAgICAgICAgaWRlbnRpY2FsKCRFT0YsIG5leHQpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHkpIGhhbmRsZVVuaWNvZGUoc3RhcnQpOwogICAgICAgIGlmIChkYXJ0ZG9jKSB7CiAgICAgICAgICBhcHBlbmREYXJ0RG9jKHN0YXJ0LCBUb2tlblR5cGUuU0lOR0xFX0xJTkVfQ09NTUVOVCwgYXNjaWlPbmx5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXBwZW5kQ29tbWVudChzdGFydCwgVG9rZW5UeXBlLlNJTkdMRV9MSU5FX0NPTU1FTlQsIGFzY2lpT25seSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVNdWx0aUxpbmVDb21tZW50KGludCBuZXh0LCBpbnQgc3RhcnQpIHsKICAgIGJvb2wgYXNjaWlPbmx5Q29tbWVudCA9IHRydWU7IC8vIFRyYWNrIGlmIHRoZSBlbnRpcmUgY29tbWVudCBpcyBBU0NJSS4KICAgIGJvb2wgYXNjaWlPbmx5TGluZXMgPSB0cnVlOyAvLyBUcmFjayBBU0NJSSBzaW5jZSB0aGUgbGFzdCBoYW5kbGVVbmljb2RlLgogICAgaW50IHVuaWNvZGVTdGFydCA9IHN0YXJ0OwogICAgaW50IG5lc3RpbmcgPSAxOwogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGJvb2wgZGFydGRvYyA9IGlkZW50aWNhbCgkU1RBUiwgbmV4dCk7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoaWRlbnRpY2FsKCRFT0YsIG5leHQpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHlMaW5lcykgaGFuZGxlVW5pY29kZSh1bmljb2RlU3RhcnQpOwogICAgICAgIHByZXBlbmRFcnJvclRva2VuKFVudGVybWluYXRlZFRva2VuKAogICAgICAgICAgICBtZXNzYWdlVW50ZXJtaW5hdGVkQ29tbWVudCwgdG9rZW5TdGFydCwgc3RyaW5nT2Zmc2V0KSk7CiAgICAgICAgYWR2YW5jZUFmdGVyRXJyb3IodHJ1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRTVEFSLCBuZXh0KSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKGlkZW50aWNhbCgkU0xBU0gsIG5leHQpKSB7CiAgICAgICAgICAtLW5lc3Rpbmc7CiAgICAgICAgICBpZiAoMCA9PSBuZXN0aW5nKSB7CiAgICAgICAgICAgIGlmICghYXNjaWlPbmx5TGluZXMpIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICAgICAgaWYgKGRhcnRkb2MpIHsKICAgICAgICAgICAgICBhcHBlbmREYXJ0RG9jKAogICAgICAgICAgICAgICAgICBzdGFydCwgVG9rZW5UeXBlLk1VTFRJX0xJTkVfQ09NTUVOVCwgYXNjaWlPbmx5Q29tbWVudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYXBwZW5kQ29tbWVudCgKICAgICAgICAgICAgICAgICAgc3RhcnQsIFRva2VuVHlwZS5NVUxUSV9MSU5FX0NPTU1FTlQsIGFzY2lpT25seUNvbW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRTTEFTSCwgbmV4dCkpIHsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGlmIChpZGVudGljYWwoJFNUQVIsIG5leHQpKSB7CiAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgICAgKytuZXN0aW5nOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJExGKSkgewogICAgICAgIGlmICghYXNjaWlPbmx5TGluZXMpIHsKICAgICAgICAgIC8vIFN5bmNocm9uaXplIHRoZSBzdHJpbmcgb2Zmc2V0IGluIHRoZSB1dGY4IHNjYW5uZXIuCiAgICAgICAgICBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICAgICAgICBhc2NpaU9ubHlMaW5lcyA9IHRydWU7CiAgICAgICAgICB1bmljb2RlU3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgICAgIH0KICAgICAgICBsaW5lRmVlZEluTXVsdGlsaW5lKCk7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAobmV4dCA+IDEyNykgewogICAgICAgICAgYXNjaWlPbmx5TGluZXMgPSBmYWxzZTsKICAgICAgICAgIGFzY2lpT25seUNvbW1lbnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5leHQ7CiAgfQoKICB2b2lkIGFwcGVuZENvbW1lbnQoaW50IHN0YXJ0LCBUb2tlblR5cGUgdHlwZSwgYm9vbCBhc2NpaU9ubHkpIHsKICAgIGlmICghaW5jbHVkZUNvbW1lbnRzKSByZXR1cm47CiAgICBDb21tZW50VG9rZW4gbmV3Q29tbWVudCA9IGNyZWF0ZUNvbW1lbnRUb2tlbih0eXBlLCBzdGFydCwgYXNjaWlPbmx5KTsKICAgIF9hcHBlbmRUb0NvbW1lbnRTdHJlYW0obmV3Q29tbWVudCk7CiAgfQoKICB2b2lkIGFwcGVuZERhcnREb2MoaW50IHN0YXJ0LCBUb2tlblR5cGUgdHlwZSwgYm9vbCBhc2NpaU9ubHkpIHsKICAgIGlmICghaW5jbHVkZUNvbW1lbnRzKSByZXR1cm47CiAgICBUb2tlbiBuZXdDb21tZW50ID0gY3JlYXRlRGFydERvY1Rva2VuKHR5cGUsIHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgX2FwcGVuZFRvQ29tbWVudFN0cmVhbShuZXdDb21tZW50KTsKICB9CgogIC8qKgogICAqIEFwcGVuZCB0aGUgZ2l2ZW4gdG9rZW4gdG8gdGhlIFt0YWlsXSBvZiB0aGUgY3VycmVudCBzdHJlYW0gb2YgdG9rZW5zLgogICAqLwogIHZvaWQgYXBwZW5kVG9rZW4oVG9rZW4gdG9rZW4pIHsKICAgIHRhaWwubmV4dCA9IHRva2VuOwogICAgdG9rZW4ucHJldmlvdXMgPSB0YWlsOwogICAgdGFpbCA9IHRva2VuOwogICAgaWYgKGNvbW1lbnRzICE9IG51bGwgJiYgY29tbWVudHMgPT0gdG9rZW4ucHJlY2VkaW5nQ29tbWVudHMpIHsKICAgICAgY29tbWVudHMgPSBudWxsOwogICAgICBjb21tZW50c1RhaWwgPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgLy8gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gY29uc3RydWN0IHRoZSB0b2tlbgogICAgICAvLyBiZWluZyBhcHBlbmRlZCB3aXRoIHByZWNlZGluZyBjb21tZW50cyBpZiBhbnkKICAgICAgYXNzZXJ0KGNvbW1lbnRzID09IG51bGwgfHwgdG9rZW4uaXNTeW50aGV0aWMgfHwgdG9rZW4gaXMgRXJyb3JUb2tlbik7CiAgICB9CiAgfQoKICB2b2lkIF9hcHBlbmRUb0NvbW1lbnRTdHJlYW0oVG9rZW4gbmV3Q29tbWVudCkgewogICAgaWYgKGNvbW1lbnRzID09IG51bGwpIHsKICAgICAgY29tbWVudHMgPSBuZXdDb21tZW50OwogICAgICBjb21tZW50c1RhaWwgPSBjb21tZW50czsKICAgIH0gZWxzZSB7CiAgICAgIGNvbW1lbnRzVGFpbC5uZXh0ID0gbmV3Q29tbWVudDsKICAgICAgY29tbWVudHNUYWlsLm5leHQucHJldmlvdXMgPSBjb21tZW50c1RhaWw7CiAgICAgIGNvbW1lbnRzVGFpbCA9IGNvbW1lbnRzVGFpbC5uZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplUmF3U3RyaW5nS2V5d29yZE9ySWRlbnRpZmllcihpbnQgbmV4dCkgewogICAgLy8gW25leHRdIGlzICRyLgogICAgaW50IG5leHRuZXh0ID0gcGVlaygpOwogICAgaWYgKGlkZW50aWNhbChuZXh0bmV4dCwgJERRKSB8fCBpZGVudGljYWwobmV4dG5leHQsICRTUSkpIHsKICAgICAgaW50IHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgcmV0dXJuIHRva2VuaXplU3RyaW5nKG5leHQsIHN0YXJ0LCB0cnVlKTsKICAgIH0KICAgIHJldHVybiB0b2tlbml6ZUtleXdvcmRPcklkZW50aWZpZXIobmV4dCwgdHJ1ZSk7CiAgfQoKICBpbnQgdG9rZW5pemVLZXl3b3JkT3JJZGVudGlmaWVyKGludCBuZXh0LCBib29sIGFsbG93RG9sbGFyKSB7CiAgICBLZXl3b3JkU3RhdGUgc3RhdGUgPSBLZXl3b3JkU3RhdGUuS0VZV09SRF9TVEFURTsKICAgIGludCBzdGFydCA9IHNjYW5PZmZzZXQ7CiAgICAvLyBXZSBhbGxvdyBhIGxlYWRpbmcgY2FwaXRhbCBjaGFyYWN0ZXIuCiAgICBpZiAoJEEgPD0gbmV4dCAmJiBuZXh0IDw9ICRaKSB7CiAgICAgIHN0YXRlID0gc3RhdGUubmV4dENhcGl0YWwobmV4dCk7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9IGVsc2UgaWYgKCRhIDw9IG5leHQgJiYgbmV4dCA8PSAkeikgewogICAgICAvLyBEbyB0aGUgZmlyc3QgbmV4dCBjYWxsIG91dHNpZGUgdGhlIGxvb3AgdG8gYXZvaWQgYW4gYWRkaXRpb25hbCB0ZXN0CiAgICAgIC8vIGFuZCB0byBtYWtlIHRoZSBsb29wIG1vbm9tb3JwaGljLgogICAgICBzdGF0ZSA9IHN0YXRlLm5leHQobmV4dCk7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICB3aGlsZSAoc3RhdGUgIT0gbnVsbCAmJiAkYSA8PSBuZXh0ICYmIG5leHQgPD0gJHopIHsKICAgICAgc3RhdGUgPSBzdGF0ZS5uZXh0KG5leHQpOwogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKHN0YXRlID09IG51bGwgfHwgc3RhdGUua2V5d29yZCA9PSBudWxsKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUlkZW50aWZpZXIobmV4dCwgc3RhcnQsIGFsbG93RG9sbGFyKTsKICAgIH0KICAgIGlmICghX2VuYWJsZUV4dGVuc2lvbk1ldGhvZHMgJiYgc3RhdGUua2V5d29yZCA9PSBLZXl3b3JkLkVYVEVOU0lPTikgewogICAgICByZXR1cm4gdG9rZW5pemVJZGVudGlmaWVyKG5leHQsIHN0YXJ0LCBhbGxvd0RvbGxhcik7CiAgICB9CiAgICBpZiAoIV9lbmFibGVOb25OdWxsYWJsZSAmJgogICAgICAgIChzdGF0ZS5rZXl3b3JkID09IEtleXdvcmQuTEFURSB8fCBzdGF0ZS5rZXl3b3JkID09IEtleXdvcmQuUkVRVUlSRUQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUlkZW50aWZpZXIobmV4dCwgc3RhcnQsIGFsbG93RG9sbGFyKTsKICAgIH0KICAgIGlmICgoJEEgPD0gbmV4dCAmJiBuZXh0IDw9ICRaKSB8fAogICAgICAgICgkMCA8PSBuZXh0ICYmIG5leHQgPD0gJDkpIHx8CiAgICAgICAgaWRlbnRpY2FsKG5leHQsICRfKSB8fAogICAgICAgIGlkZW50aWNhbChuZXh0LCAkJCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplSWRlbnRpZmllcihuZXh0LCBzdGFydCwgYWxsb3dEb2xsYXIpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kS2V5d29yZFRva2VuKHN0YXRlLmtleXdvcmQpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIC8qKgogICAqIFthbGxvd0RvbGxhcl0gY2FuIGV4Y2x1ZGUgJyQnLCB3aGljaCBpcyBub3QgYWxsb3dlZCBhcyBwYXJ0IG9mIGEgc3RyaW5nCiAgICogaW50ZXJwb2xhdGlvbiBpZGVudGlmaWVyLgogICAqLwogIGludCB0b2tlbml6ZUlkZW50aWZpZXIoaW50IG5leHQsIGludCBzdGFydCwgYm9vbCBhbGxvd0RvbGxhcikgewogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKF9pc0lkZW50aWZpZXJDaGFyKG5leHQsIGFsbG93RG9sbGFyKSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSWRlbnRpZmllciBlbmRzIGhlcmUuCiAgICAgICAgaWYgKHN0YXJ0ID09IHNjYW5PZmZzZXQpIHsKICAgICAgICAgIHJldHVybiB1bmV4cGVjdGVkKG5leHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuSURFTlRJRklFUiwgc3RhcnQsIHRydWUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVBdChpbnQgbmV4dCkgewogICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5BVCk7CiAgICByZXR1cm4gYWR2YW5jZSgpOwogIH0KCiAgaW50IHRva2VuaXplU3RyaW5nKGludCBuZXh0LCBpbnQgc3RhcnQsIGJvb2wgcmF3KSB7CiAgICBpbnQgcXVvdGVDaGFyID0gbmV4dDsKICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKHF1b3RlQ2hhciwgbmV4dCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKGlkZW50aWNhbChxdW90ZUNoYXIsIG5leHQpKSB7CiAgICAgICAgLy8gTXVsdGlsaW5lIHN0cmluZy4KICAgICAgICByZXR1cm4gdG9rZW5pemVNdWx0aUxpbmVTdHJpbmcocXVvdGVDaGFyLCBzdGFydCwgcmF3KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBFbXB0eSBzdHJpbmcuCiAgICAgICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgc3RhcnQsIHRydWUpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9CiAgICBpZiAocmF3KSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVSYXdTdHJpbmcobmV4dCwgcXVvdGVDaGFyLCBzdGFydCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lU3RyaW5nKG5leHQsIHF1b3RlQ2hhciwgc3RhcnQpOwogICAgfQogIH0KCiAgLyoqCiAgICogW25leHRdIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHF1b3RlLgogICAqIFtxdW90ZVN0YXJ0XSBpcyB0aGUgc2Nhbk9mZnNldCBvZiB0aGUgcXVvdGUuCiAgICoKICAgKiBUaGUgdG9rZW4gY29udGFpbnMgYSBzdWJzdHJpbmcgb2YgdGhlIHNvdXJjZSBmaWxlLCBpbmNsdWRpbmcgdGhlCiAgICogc3RyaW5nIHF1b3RlcywgYmFja3NsYXNoZXMgZm9yIGVzY2FwaW5nLiBGb3IgaW50ZXJwb2xhdGVkIHN0cmluZ3MsCiAgICogdGhlIHBhcnRzIGJlZm9yZSBhbmQgYWZ0ZXIgYXJlIHNlcGFyYXRlIHRva2Vucy4KICAgKgogICAqICAgImEgJGIgYyIKICAgKgogICAqIGdpdmVzIFN0cmluZ1Rva2VuKCJhICQpLCBTdHJpbmdUb2tlbihiKSBhbmQgU3RyaW5nVG9rZW4oIGMiKS4KICAgKi8KICBpbnQgdG9rZW5pemVTaW5nbGVMaW5lU3RyaW5nKGludCBuZXh0LCBpbnQgcXVvdGVDaGFyLCBpbnQgcXVvdGVTdGFydCkgewogICAgaW50IHN0YXJ0ID0gcXVvdGVTdGFydDsKICAgIGJvb2wgYXNjaWlPbmx5ID0gdHJ1ZTsKICAgIHdoaWxlICghaWRlbnRpY2FsKG5leHQsIHF1b3RlQ2hhcikpIHsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQkFDS1NMQVNIKSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG5leHQsICQkKSkgewogICAgICAgIGlmICghYXNjaWlPbmx5KSBoYW5kbGVVbmljb2RlKHN0YXJ0KTsKICAgICAgICBuZXh0ID0gdG9rZW5pemVTdHJpbmdJbnRlcnBvbGF0aW9uKHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgICAgIHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgICAgICBhc2NpaU9ubHkgPSB0cnVlOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChuZXh0IDw9ICRDUiAmJgogICAgICAgICAgKGlkZW50aWNhbChuZXh0LCAkTEYpIHx8CiAgICAgICAgICAgICAgaWRlbnRpY2FsKG5leHQsICRDUikgfHwKICAgICAgICAgICAgICBpZGVudGljYWwobmV4dCwgJEVPRikpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHkpIGhhbmRsZVVuaWNvZGUoc3RhcnQpOwogICAgICAgIHVudGVybWluYXRlZFN0cmluZyhxdW90ZUNoYXIsIHF1b3RlU3RhcnQsIHN0YXJ0LAogICAgICAgICAgICBhc2NpaU9ubHk6IGFzY2lpT25seSwgaXNNdWx0aUxpbmU6IGZhbHNlLCBpc1JhdzogZmFsc2UpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICAgIGlmIChuZXh0ID4gMTI3KSBhc2NpaU9ubHkgPSBmYWxzZTsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmICghYXNjaWlPbmx5KSBoYW5kbGVVbmljb2RlKHN0YXJ0KTsKICAgIC8vIEFkdmFuY2UgcGFzdCB0aGUgcXVvdGUgY2hhcmFjdGVyLgogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsIHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVTdHJpbmdJbnRlcnBvbGF0aW9uKGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHkpIHsKICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsIHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgYmVnaW5Ub2tlbigpOyAvLyAkIHN0YXJ0cyBoZXJlLgogICAgaW50IG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRPUEVOX0NVUkxZX0JSQUNLRVQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUludGVycG9sYXRlZEV4cHJlc3Npb24obmV4dCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdG9rZW5pemVJbnRlcnBvbGF0ZWRJZGVudGlmaWVyKG5leHQpOwogICAgfQogIH0KCiAgaW50IHRva2VuaXplSW50ZXJwb2xhdGVkRXhwcmVzc2lvbihpbnQgbmV4dCkgewogICAgYXBwZW5kQmVnaW5Hcm91cChUb2tlblR5cGUuU1RSSU5HX0lOVEVSUE9MQVRJT05fRVhQUkVTU0lPTik7CiAgICBiZWdpblRva2VuKCk7IC8vIFRoZSBleHByZXNzaW9uIHN0YXJ0cyBoZXJlLgogICAgbmV4dCA9IGFkdmFuY2UoKTsgLy8gTW92ZSBwYXN0IHRoZSBjdXJseSBicmFja2V0LgogICAgd2hpbGUgKCFpZGVudGljYWwobmV4dCwgJEVPRikgJiYgIWlkZW50aWNhbChuZXh0LCAkU1RYKSkgewogICAgICBuZXh0ID0gYmlnU3dpdGNoKG5leHQpOwogICAgfQogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRU9GKSkgewogICAgICBiZWdpblRva2VuKCk7CiAgICAgIGRpc2NhcmRJbnRlcnBvbGF0aW9uKCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogICAgbmV4dCA9IGFkdmFuY2UoKTsgLy8gTW92ZSBwYXN0IHRoZSAkU1RYLgogICAgYmVnaW5Ub2tlbigpOyAvLyBUaGUgc3RyaW5nIGludGVycG9sYXRpb24gc3VmZml4IHN0YXJ0cyBoZXJlLgogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVJbnRlcnBvbGF0ZWRJZGVudGlmaWVyKGludCBuZXh0KSB7CiAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlNUUklOR19JTlRFUlBPTEFUSU9OX0lERU5USUZJRVIpOwoKICAgIGlmICgkYSA8PSBuZXh0ICYmIG5leHQgPD0gJHogfHwKICAgICAgICAkQSA8PSBuZXh0ICYmIG5leHQgPD0gJFogfHwKICAgICAgICBpZGVudGljYWwobmV4dCwgJF8pKSB7CiAgICAgIGJlZ2luVG9rZW4oKTsgLy8gVGhlIGlkZW50aWZpZXIgc3RhcnRzIGhlcmUuCiAgICAgIG5leHQgPSB0b2tlbml6ZUtleXdvcmRPcklkZW50aWZpZXIobmV4dCwgZmFsc2UpOwogICAgfSBlbHNlIHsKICAgICAgYmVnaW5Ub2tlbigpOyAvLyBUaGUgc3ludGhldGljIGlkZW50aWZpZXIgc3RhcnRzIGhlcmUuCiAgICAgIGFwcGVuZFN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5JREVOVElGSUVSLCBzY2FuT2Zmc2V0LCB0cnVlLCAnJyk7CiAgICAgIHByZXBlbmRFcnJvclRva2VuKFVudGVybWluYXRlZFRva2VuKAogICAgICAgICAgbWVzc2FnZVVuZXhwZWN0ZWREb2xsYXJJblN0cmluZywgdG9rZW5TdGFydCwgc3RyaW5nT2Zmc2V0KSk7CiAgICB9CiAgICBiZWdpblRva2VuKCk7IC8vIFRoZSBzdHJpbmcgaW50ZXJwb2xhdGlvbiBzdWZmaXggc3RhcnRzIGhlcmUuCiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZVNpbmdsZUxpbmVSYXdTdHJpbmcoaW50IG5leHQsIGludCBxdW90ZUNoYXIsIGludCBxdW90ZVN0YXJ0KSB7CiAgICBib29sIGFzY2lpT25seSA9IHRydWU7CiAgICB3aGlsZSAobmV4dCAhPSAkRU9GKSB7CiAgICAgIGlmIChpZGVudGljYWwobmV4dCwgcXVvdGVDaGFyKSkgewogICAgICAgIGlmICghYXNjaWlPbmx5KSBoYW5kbGVVbmljb2RlKHF1b3RlU3RhcnQpOwogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgcXVvdGVTdGFydCwgYXNjaWlPbmx5KTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJExGKSB8fCBpZGVudGljYWwobmV4dCwgJENSKSkgewogICAgICAgIGlmICghYXNjaWlPbmx5KSBoYW5kbGVVbmljb2RlKHF1b3RlU3RhcnQpOwogICAgICAgIHVudGVybWluYXRlZFN0cmluZyhxdW90ZUNoYXIsIHF1b3RlU3RhcnQsIHF1b3RlU3RhcnQsCiAgICAgICAgICAgIGFzY2lpT25seTogYXNjaWlPbmx5LCBpc011bHRpTGluZTogZmFsc2UsIGlzUmF3OiB0cnVlKTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfSBlbHNlIGlmIChuZXh0ID4gMTI3KSB7CiAgICAgICAgYXNjaWlPbmx5ID0gZmFsc2U7CiAgICAgIH0KICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmICghYXNjaWlPbmx5KSBoYW5kbGVVbmljb2RlKHF1b3RlU3RhcnQpOwogICAgdW50ZXJtaW5hdGVkU3RyaW5nKHF1b3RlQ2hhciwgcXVvdGVTdGFydCwgcXVvdGVTdGFydCwKICAgICAgICBhc2NpaU9ubHk6IGFzY2lpT25seSwgaXNNdWx0aUxpbmU6IGZhbHNlLCBpc1JhdzogdHJ1ZSk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZU11bHRpTGluZVJhd1N0cmluZyhpbnQgcXVvdGVDaGFyLCBpbnQgcXVvdGVTdGFydCkgewogICAgYm9vbCBhc2NpaU9ubHlTdHJpbmcgPSB0cnVlOwogICAgYm9vbCBhc2NpaU9ubHlMaW5lID0gdHJ1ZTsKICAgIGludCB1bmljb2RlU3RhcnQgPSBxdW90ZVN0YXJ0OwogICAgaW50IG5leHQgPSBhZHZhbmNlKCk7IC8vIEFkdmFuY2UgcGFzdCB0aGUgKGxhc3QpIHF1b3RlIChvZiB0aHJlZSkuCiAgICBvdXRlcjoKICAgIHdoaWxlICghaWRlbnRpY2FsKG5leHQsICRFT0YpKSB7CiAgICAgIHdoaWxlICghaWRlbnRpY2FsKG5leHQsIHF1b3RlQ2hhcikpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRMRikpIHsKICAgICAgICAgIGlmICghYXNjaWlPbmx5TGluZSkgewogICAgICAgICAgICAvLyBTeW5jaHJvbml6ZSB0aGUgc3RyaW5nIG9mZnNldCBpbiB0aGUgdXRmOCBzY2FubmVyLgogICAgICAgICAgICBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICAgICAgICAgIGFzY2lpT25seUxpbmUgPSB0cnVlOwogICAgICAgICAgICB1bmljb2RlU3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgICAgICAgfQogICAgICAgICAgbGluZUZlZWRJbk11bHRpbGluZSgpOwogICAgICAgIH0gZWxzZSBpZiAobmV4dCA+IDEyNykgewogICAgICAgICAgYXNjaWlPbmx5TGluZSA9IGZhbHNlOwogICAgICAgICAgYXNjaWlPbmx5U3RyaW5nID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRU9GKSkgYnJlYWsgb3V0ZXI7CiAgICAgIH0KICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCBxdW90ZUNoYXIpKSB7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHQsIHF1b3RlQ2hhcikpIHsKICAgICAgICAgIGlmICghYXNjaWlPbmx5TGluZSkgaGFuZGxlVW5pY29kZSh1bmljb2RlU3RhcnQpOwogICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsIHF1b3RlU3RhcnQsIGFzY2lpT25seVN0cmluZyk7CiAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICghYXNjaWlPbmx5TGluZSkgaGFuZGxlVW5pY29kZSh1bmljb2RlU3RhcnQpOwogICAgdW50ZXJtaW5hdGVkU3RyaW5nKHF1b3RlQ2hhciwgcXVvdGVTdGFydCwgcXVvdGVTdGFydCwKICAgICAgICBhc2NpaU9ubHk6IGFzY2lpT25seUxpbmUsIGlzTXVsdGlMaW5lOiB0cnVlLCBpc1JhdzogdHJ1ZSk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZU11bHRpTGluZVN0cmluZyhpbnQgcXVvdGVDaGFyLCBpbnQgcXVvdGVTdGFydCwgYm9vbCByYXcpIHsKICAgIGlmIChyYXcpIHJldHVybiB0b2tlbml6ZU11bHRpTGluZVJhd1N0cmluZyhxdW90ZUNoYXIsIHF1b3RlU3RhcnQpOwogICAgaW50IHN0YXJ0ID0gcXVvdGVTdGFydDsKICAgIGJvb2wgYXNjaWlPbmx5U3RyaW5nID0gdHJ1ZTsKICAgIGJvb2wgYXNjaWlPbmx5TGluZSA9IHRydWU7CiAgICBpbnQgdW5pY29kZVN0YXJ0ID0gc3RhcnQ7CiAgICBpbnQgbmV4dCA9IGFkdmFuY2UoKTsgLy8gQWR2YW5jZSBwYXN0IHRoZSAobGFzdCkgcXVvdGUgKG9mIHRocmVlKS4KICAgIHdoaWxlICghaWRlbnRpY2FsKG5leHQsICRFT0YpKSB7CiAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJCQpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHlMaW5lKSBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICAgICAgbmV4dCA9IHRva2VuaXplU3RyaW5nSW50ZXJwb2xhdGlvbihzdGFydCwgYXNjaWlPbmx5U3RyaW5nKTsKICAgICAgICBzdGFydCA9IHNjYW5PZmZzZXQ7CiAgICAgICAgdW5pY29kZVN0YXJ0ID0gc3RhcnQ7CiAgICAgICAgYXNjaWlPbmx5U3RyaW5nID0gdHJ1ZTsgLy8gQSBuZXcgc3RyaW5nIHRva2VuIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN0LgogICAgICAgIGFzY2lpT25seUxpbmUgPSB0cnVlOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChpZGVudGljYWwobmV4dCwgcXVvdGVDaGFyKSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCBxdW90ZUNoYXIpKSB7CiAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCBxdW90ZUNoYXIpKSB7CiAgICAgICAgICAgIGlmICghYXNjaWlPbmx5TGluZSkgaGFuZGxlVW5pY29kZSh1bmljb2RlU3RhcnQpOwogICAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuU1RSSU5HLCBzdGFydCwgYXNjaWlPbmx5U3RyaW5nKTsKICAgICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJEJBQ0tTTEFTSCkpIHsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJEVPRikpIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJExGKSkgewogICAgICAgIGlmICghYXNjaWlPbmx5TGluZSkgewogICAgICAgICAgLy8gU3luY2hyb25pemUgdGhlIHN0cmluZyBvZmZzZXQgaW4gdGhlIHV0Zjggc2Nhbm5lci4KICAgICAgICAgIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgICAgICAgIGFzY2lpT25seUxpbmUgPSB0cnVlOwogICAgICAgICAgdW5pY29kZVN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgICAgICB9CiAgICAgICAgbGluZUZlZWRJbk11bHRpbGluZSgpOwogICAgICB9IGVsc2UgaWYgKG5leHQgPiAxMjcpIHsKICAgICAgICBhc2NpaU9ubHlTdHJpbmcgPSBmYWxzZTsKICAgICAgICBhc2NpaU9ubHlMaW5lID0gZmFsc2U7CiAgICAgIH0KICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmICghYXNjaWlPbmx5TGluZSkgaGFuZGxlVW5pY29kZSh1bmljb2RlU3RhcnQpOwogICAgdW50ZXJtaW5hdGVkU3RyaW5nKHF1b3RlQ2hhciwgcXVvdGVTdGFydCwgc3RhcnQsCiAgICAgICAgYXNjaWlPbmx5OiBhc2NpaU9ubHlTdHJpbmcsIGlzTXVsdGlMaW5lOiB0cnVlLCBpc1JhdzogZmFsc2UpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdW5leHBlY3RlZChpbnQgY2hhcmFjdGVyKSB7CiAgICB2YXIgZXJyb3JUb2tlbiA9IGJ1aWxkVW5leHBlY3RlZENoYXJhY3RlclRva2VuKGNoYXJhY3RlciwgdG9rZW5TdGFydCk7CiAgICBpZiAoZXJyb3JUb2tlbiBpcyBOb25Bc2NpaUlkZW50aWZpZXJUb2tlbikgewogICAgICBpbnQgY2hhck9mZnNldDsKICAgICAgTGlzdDxpbnQ+IGNvZGVVbml0cyA9IDxpbnQ+W107CiAgICAgIGlmICh0YWlsLnR5cGUgPT0gVG9rZW5UeXBlLklERU5USUZJRVIgJiYgdGFpbC5jaGFyRW5kID09IHRva2VuU3RhcnQpIHsKICAgICAgICBjaGFyT2Zmc2V0ID0gdGFpbC5jaGFyT2Zmc2V0OwogICAgICAgIGNvZGVVbml0cy5hZGRBbGwodGFpbC5sZXhlbWUuY29kZVVuaXRzKTsKICAgICAgICB0YWlsID0gdGFpbC5wcmV2aW91czsKICAgICAgfSBlbHNlIHsKICAgICAgICBjaGFyT2Zmc2V0ID0gZXJyb3JUb2tlbi5jaGFyT2Zmc2V0OwogICAgICB9CiAgICAgIGNvZGVVbml0cy5hZGQoZXJyb3JUb2tlbi5jaGFyYWN0ZXIpOwogICAgICBwcmVwZW5kRXJyb3JUb2tlbihlcnJvclRva2VuKTsKICAgICAgaW50IG5leHQgPSBhZHZhbmNlQWZ0ZXJFcnJvcih0cnVlKTsKICAgICAgd2hpbGUgKF9pc0lkZW50aWZpZXJDaGFyKG5leHQsIHRydWUpKSB7CiAgICAgICAgY29kZVVuaXRzLmFkZChuZXh0KTsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICB9CiAgICAgIGFwcGVuZFRva2VuKFN0cmluZ1Rva2VuLmZyb21TdHJpbmcoVG9rZW5UeXBlLklERU5USUZJRVIsCiAgICAgICAgICBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKSwgY2hhck9mZnNldCkpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHByZXBlbmRFcnJvclRva2VuKGVycm9yVG9rZW4pOwogICAgICByZXR1cm4gYWR2YW5jZUFmdGVyRXJyb3IodHJ1ZSk7CiAgICB9CiAgfQoKICB2b2lkIHVudGVybWluYXRlZFN0cmluZyhpbnQgcXVvdGVDaGFyLCBpbnQgcXVvdGVTdGFydCwgaW50IHN0YXJ0LAogICAgICB7Ym9vbCBhc2NpaU9ubHksIGJvb2wgaXNNdWx0aUxpbmUsIGJvb2wgaXNSYXd9KSB7CiAgICBTdHJpbmcgc3VmZml4ID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKAogICAgICAgIGlzTXVsdGlMaW5lID8gW3F1b3RlQ2hhciwgcXVvdGVDaGFyLCBxdW90ZUNoYXJdIDogW3F1b3RlQ2hhcl0pOwogICAgU3RyaW5nIHByZWZpeCA9IGlzUmF3ID8gJ3Ikc3VmZml4JyA6IHN1ZmZpeDsKCiAgICBhcHBlbmRTeW50aGV0aWNTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuU1RSSU5HLCBzdGFydCwgYXNjaWlPbmx5LCBzdWZmaXgpOwogICAgLy8gRW5zdXJlIHRoYXQgdGhlIGVycm9yIGlzIHJlcG9ydGVkIG9uIGEgdmlzaWJsZSB0b2tlbgogICAgaW50IGVycm9yU3RhcnQgPSB0b2tlblN0YXJ0IDwgc3RyaW5nT2Zmc2V0ID8gdG9rZW5TdGFydCA6IHF1b3RlU3RhcnQ7CiAgICBwcmVwZW5kRXJyb3JUb2tlbihuZXcgVW50ZXJtaW5hdGVkU3RyaW5nKHByZWZpeCwgZXJyb3JTdGFydCwgc3RyaW5nT2Zmc2V0KSk7CiAgfQoKICBpbnQgYWR2YW5jZUFmdGVyRXJyb3IoYm9vbCBzaG91bGRBZHZhbmNlKSB7CiAgICBpZiAoYXRFbmRPZkZpbGUoKSkgcmV0dXJuICRFT0Y7CiAgICBpZiAoc2hvdWxkQWR2YW5jZSkgewogICAgICByZXR1cm4gYWR2YW5jZSgpOyAvLyBFbnN1cmUgcHJvZ3Jlc3MuCiAgICB9IGVsc2UgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgfQp9CgpUb2tlblR5cGUgY2xvc2VCcmFjZUluZm9Gb3IoQmVnaW5Ub2tlbiBiZWdpbikgewogIHJldHVybiBjb25zdCB7CiAgICAnKCc6IFRva2VuVHlwZS5DTE9TRV9QQVJFTiwKICAgICdbJzogVG9rZW5UeXBlLkNMT1NFX1NRVUFSRV9CUkFDS0VULAogICAgJ3snOiBUb2tlblR5cGUuQ0xPU0VfQ1VSTFlfQlJBQ0tFVCwKICAgICc8JzogVG9rZW5UeXBlLkdULAogICAgcickeyc6IFRva2VuVHlwZS5DTE9TRV9DVVJMWV9CUkFDS0VULAogICAgJz8uWyc6IFRva2VuVHlwZS5DTE9TRV9TUVVBUkVfQlJBQ0tFVCwKICB9W2JlZ2luLmxleGVtZV07Cn0KCmNsYXNzIExpbmVTdGFydHMgZXh0ZW5kcyBPYmplY3Qgd2l0aCBMaXN0TWl4aW48aW50PiB7CiAgTGlzdDxpbnQ+IGFycmF5OwogIGludCBhcnJheUxlbmd0aCA9IDA7CgogIExpbmVTdGFydHMoaW50IG51bWJlck9mQnl0ZXNIaW50KSB7CiAgICAvLyBMZXQncyBhc3N1bWUgdGhlIGF2ZXJhZ2UgRGFydCBmaWxlIGlzIDMwMCBieXRlcy4KICAgIGlmIChudW1iZXJPZkJ5dGVzSGludCA9PSBudWxsKSBudW1iZXJPZkJ5dGVzSGludCA9IDMwMDsKCiAgICAvLyBMZXQncyBhc3N1bWUgd2UgaGF2ZSBvbiBhdmVyYWdlIDIyIGJ5dGVzIHBlciBsaW5lLgogICAgZmluYWwgaW50IGV4cGVjdGVkTnVtYmVyT2ZMaW5lcyA9IDEgKyAobnVtYmVyT2ZCeXRlc0hpbnQgfi8gMjIpOwoKICAgIGlmIChudW1iZXJPZkJ5dGVzSGludCA+IDY1NTM1KSB7CiAgICAgIGFycmF5ID0gbmV3IFVpbnQzMkxpc3QoZXhwZWN0ZWROdW1iZXJPZkxpbmVzKTsKICAgIH0gZWxzZSB7CiAgICAgIGFycmF5ID0gbmV3IFVpbnQxNkxpc3QoZXhwZWN0ZWROdW1iZXJPZkxpbmVzKTsKICAgIH0KCiAgICAvLyBUaGUgZmlyc3QgbGluZSBzdGFydHMgYXQgY2hhcmFjdGVyIG9mZnNldCAwLgogICAgYWRkKDApOwogIH0KCiAgLy8gSW1wbGVtZW50IGFic3RyYWN0IG1lbWJlcnMgdXNlZCBieSBbTGlzdE1peGluXQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBhcnJheUxlbmd0aDsKCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgYXNzZXJ0KGluZGV4IDwgYXJyYXlMZW5ndGgpOwogICAgcmV0dXJuIGFycmF5W2luZGV4XTsKICB9CgogIHZvaWQgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKSB7CiAgICBpZiAobmV3TGVuZ3RoID4gYXJyYXkubGVuZ3RoKSB7CiAgICAgIGdyb3cobmV3TGVuZ3RoKTsKICAgIH0KICAgIGFycmF5TGVuZ3RoID0gbmV3TGVuZ3RoOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA+IDY1NTM1ICYmIGFycmF5IGlzISBVaW50MzJMaXN0KSB7CiAgICAgIHN3aXRjaFRvVWludDMyKGFycmF5Lmxlbmd0aCk7CiAgICB9CiAgICBhcnJheVtpbmRleF0gPSB2YWx1ZTsKICB9CgogIC8vIFNwZWNpYWxpemUgbWV0aG9kcyBmcm9tIFtMaXN0TWl4aW5dLgogIHZvaWQgYWRkKGludCB2YWx1ZSkgewogICAgaWYgKGFycmF5TGVuZ3RoID49IGFycmF5Lmxlbmd0aCkgewogICAgICBncm93KDApOwogICAgfQogICAgaWYgKHZhbHVlID4gNjU1MzUgJiYgYXJyYXkgaXMhIFVpbnQzMkxpc3QpIHsKICAgICAgc3dpdGNoVG9VaW50MzIoYXJyYXkubGVuZ3RoKTsKICAgIH0KICAgIGFycmF5W2FycmF5TGVuZ3RoKytdID0gdmFsdWU7CiAgfQoKICAvLyBIZWxwZXIgbWV0aG9kcy4KCiAgdm9pZCBncm93KGludCBuZXdMZW5ndGhNaW5pbXVtKSB7CiAgICBpbnQgbmV3TGVuZ3RoID0gYXJyYXkubGVuZ3RoICogMjsKICAgIGlmIChuZXdMZW5ndGggPCBuZXdMZW5ndGhNaW5pbXVtKSBuZXdMZW5ndGggPSBuZXdMZW5ndGhNaW5pbXVtOwoKICAgIGlmIChhcnJheSBpcyBVaW50MTZMaXN0KSB7CiAgICAgIGZpbmFsIG5ld0FycmF5ID0gbmV3IFVpbnQxNkxpc3QobmV3TGVuZ3RoKTsKICAgICAgbmV3QXJyYXkuc2V0UmFuZ2UoMCwgYXJyYXlMZW5ndGgsIGFycmF5KTsKICAgICAgYXJyYXkgPSBuZXdBcnJheTsKICAgIH0gZWxzZSB7CiAgICAgIHN3aXRjaFRvVWludDMyKG5ld0xlbmd0aCk7CiAgICB9CiAgfQoKICB2b2lkIHN3aXRjaFRvVWludDMyKGludCBuZXdMZW5ndGgpIHsKICAgIGZpbmFsIG5ld0FycmF5ID0gbmV3IFVpbnQzMkxpc3QobmV3TGVuZ3RoKTsKICAgIG5ld0FycmF5LnNldFJhbmdlKDAsIGFycmF5TGVuZ3RoLCBhcnJheSk7CiAgICBhcnJheSA9IG5ld0FycmF5OwogIH0KfQoKLy8vIFtTY2FubmVyQ29uZmlndXJhdGlvbl0gY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIGNvbmZpZ3VyaW5nIHdoaWNoIHRva2VucwovLy8gdGhlIHNjYW5uZXIgcHJvZHVjZXMgYmFzZWQgdXBvbiB0aGUgRGFydCBsYW5ndWFnZSBsZXZlbC4KY2xhc3MgU2Nhbm5lckNvbmZpZ3VyYXRpb24gewogIHN0YXRpYyBjb25zdCBjbGFzc2ljID0gU2Nhbm5lckNvbmZpZ3VyYXRpb24oKTsKICBzdGF0aWMgY29uc3Qgbm9uTnVsbGFibGUgPSBTY2FubmVyQ29uZmlndXJhdGlvbihlbmFibGVOb25OdWxsYWJsZTogdHJ1ZSk7CgogIC8vLyBFeHBlcmltZW50YWwgZmxhZyBmb3IgZW5hYmxpbmcgc2Nhbm5pbmcgb2YgdGhlIGBleHRlbnNpb25gIGtleXdvcmQuCiAgZmluYWwgYm9vbCBlbmFibGVFeHRlbnNpb25NZXRob2RzOwoKICAvLy8gRXhwZXJpbWVudGFsIGZsYWcgZm9yIGVuYWJsaW5nIHNjYW5uaW5nIG9mIE5OQkQgdG9rZW5zCiAgLy8vIHN1Y2ggYXMgJ3JlcXVpcmVkJyBhbmQgJ2xhdGUnCiAgZmluYWwgYm9vbCBlbmFibGVOb25OdWxsYWJsZTsKCiAgLy8vIEV4cGVyaW1lbnRhbCBmbGFnIGZvciBlbmFibGluZyBzY2FubmluZyBvZiBgPj4+YC4KICAvLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvbGFuZ3VhZ2UvaXNzdWVzLzYxCiAgLy8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL2xhbmd1YWdlL2lzc3Vlcy82MAogIGZpbmFsIGJvb2wgZW5hYmxlVHJpcGxlU2hpZnQ7CgogIGNvbnN0IFNjYW5uZXJDb25maWd1cmF0aW9uKHsKICAgIGJvb2wgZW5hYmxlRXh0ZW5zaW9uTWV0aG9kcywKICAgIGJvb2wgZW5hYmxlTm9uTnVsbGFibGUs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U0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIGEgbGlzdC4KLy8vCi8vLyBgTGlzdEJhc2VgIGNhbiBiZSB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIHRoZSBgTGlzdGAKLy8vIGludGVyZmFjZS4KLy8vCi8vLyBBbGwgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBgbGVuZ3RoYCwgYG9wZXJhdG9yW11gLAovLy8gYG9wZXJhdG9yW109YCBhbmQgYGxlbmd0aD1gLCB3aGljaCBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgovLy8KLy8vICpOT1RJQ0UqOiBGb3J3YXJkaW5nIGp1c3QgdGhlc2UgZm91ciBvcGVyYXRpb25zIHRvIGEgbm9ybWFsIGdyb3dhYmxlIFtMaXN0XQovLy8gKGFzIGNyZWF0ZWQgYnkgYG5ldyBMaXN0KClgKSB3aWxsIGdpdmUgdmVyeSBiYWQgcGVyZm9ybWFuY2UgZm9yIGBhZGRgIGFuZAovLy8gYGFkZEFsbGAgb3BlcmF0aW9ucyBvZiBgTGlzdEJhc2VgLiBUaGVzZSBvcGVyYXRpb25zIGFyZSBpbXBsZW1lbnRlZCBieQovLy8gaW5jcmVhc2luZyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJ5IG9uZSBmb3IgZWFjaCBgYWRkYCBvcGVyYXRpb24sIGFuZAovLy8gcmVwZWF0ZWRseSBpbmNyZWFzaW5nIHRoZSBsZW5ndGggb2YgYSBncm93YWJsZSBsaXN0IGlzIG5vdCBlZmZpY2llbnQuCi8vLyBUbyBhdm9pZCB0aGlzLCBlaXRoZXIgb3ZlcnJpZGUgJ2FkZCcgYW5kICdhZGRBbGwnIHRvIGFsc28gZm9yd2FyZCBkaXJlY3RseQovLy8gdG8gdGhlIGdyb3dhYmxlIGxpc3QsIG9yLCBwcmVmZXJhYmx5LCB1c2UgYERlbGVnYXRpbmdMaXN0YCBmcm9tCi8vLyAicGFja2FnZTpjb2xsZWN0aW9uL3dyYXBwZXJzLmRhcnQiIGluc3RlYWQuCmFic3RyYWN0IGNsYXNzIExpc3RCYXNlPEU+IGV4dGVuZHMgT2JqZWN0IHdpdGggTGlzdE1peGluPEU+IHsKICAvLy8gQ29udmVydCBhIGBMaXN0YCB0byBhIHN0cmluZyBhcyBgW2VhY2gsIGVsZW1lbnQsIGFzLCBzdHJpbmddYC4KICAvLy8KICAvLy8gSGFuZGxlcyBjaXJjdWxhciByZWZlcmVuY2VzIHdoZXJlIGNvbnZlcnRpbmcgb25lIG9mIHRoZSBlbGVtZW50cwogIC8vLyB0byBhIHN0cmluZyBlbmRzIHVwIGNvbnZlcnRpbmcgW2xpc3RdIHRvIGEgc3RyaW5nIGFnYWluLgogIHN0YXRpYyBTdHJpbmcgbGlzdFRvU3RyaW5nKExpc3QgbGlzdCkgPT4KICAgICAgSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKGxpc3QsICdbJywgJ10nKTsKfQoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgYSBbTGlzdF0gY2xhc3MuCi8vLwovLy8gYExpc3RNaXhpbmAgY2FuIGJlIHVzZWQgYXMgYSBtaXhpbiB0byBtYWtlIGEgY2xhc3MgaW1wbGVtZW50Ci8vLyB0aGUgYExpc3RgIGludGVyZmFjZS4KLy8vCi8vLyBUaGlzIGltcGxlbWVudHMgYWxsIHJlYWQgb3BlcmF0aW9ucyB1c2luZyBvbmx5IHRoZSBgbGVuZ3RoYCBhbmQKLy8vIGBvcGVyYXRvcltdYCBtZW1iZXJzLiBJdCBpbXBsZW1lbnRzIHdyaXRlIG9wZXJhdGlvbnMgdXNpbmcgdGhvc2UgYW5kCi8vLyBgbGVuZ3RoPWAgYW5kIGBvcGVyYXRvcltdPWAKLy8vCi8vLyAqTk9USUNFKjogRm9yd2FyZGluZyBqdXN0IHRoZXNlIGZvdXIgb3BlcmF0aW9ucyB0byBhIG5vcm1hbCBncm93YWJsZSBbTGlzdF0KLy8vIChhcyBjcmVhdGVkIGJ5IGBuZXcgTGlzdCgpYCkgd2lsbCBnaXZlIHZlcnkgYmFkIHBlcmZvcm1hbmNlIGZvciBgYWRkYCBhbmQKLy8vIGBhZGRBbGxgIG9wZXJhdGlvbnMgb2YgYExpc3RCYXNlYC4gVGhlc2Ugb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYnkKLy8vIGluY3JlYXNpbmcgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBieSBvbmUgZm9yIGVhY2ggYGFkZGAgb3BlcmF0aW9uLCBhbmQKLy8vIHJlcGVhdGVkbHkgaW5jcmVhc2luZyB0aGUgbGVuZ3RoIG9mIGEgZ3Jvd2FibGUgbGlzdCBpcyBub3QgZWZmaWNpZW50LgovLy8gVG8gYXZvaWQgdGhpcywgZWl0aGVyIG92ZXJyaWRlICdhZGQnIGFuZCAnYWRkQWxsJyB0byBhbHNvIGZvcndhcmQgZGlyZWN0bHkKLy8vIHRvIHRoZSBncm93YWJsZSBsaXN0LCBvciwgaWYgcG9zc2libGUsIHVzZSBgRGVsZWdhdGluZ0xpc3RgIGZyb20KLy8vICJwYWNrYWdlOmNvbGxlY3Rpb24vd3JhcHBlcnMuZGFydCIgaW5zdGVhZC4KYWJzdHJhY3QgY2xhc3MgTGlzdE1peGluPEU+IGltcGxlbWVudHMgTGlzdDxFPiB7CiAgLy8gSXRlcmFibGUgaW50ZXJmYWNlLgogIC8vIFRPRE8obHJuKTogV2hlbiB3ZSBnZXQgY29tcG9zYWJsZSBtaXhpbnMsIHJldXNlIEl0ZXJhYmxlTWl4aW4gaW5zdGVhZAogIC8vIG9mIHJlZGFjbGF0aW5nIGV2ZXJ5dGhpbmcuCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IExpc3RJdGVyYXRvcjxFPih0aGlzKTsKCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSA9PiB0aGlzW2luZGV4XTsKCiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgPT4KICAgICAgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+LmZpcnN0RWZmaWNpZW50KHRoaXMsIG90aGVyKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgYWN0aW9uKHRoaXNbaV0pOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIHRoaXNbMF07CiAgfQoKICB2b2lkIHNldCBmaXJzdChFIHZhbHVlKSB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhpc1swXSA9IHZhbHVlOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIHRoaXNbbGVuZ3RoIC0gMV07CiAgfQoKICB2b2lkIHNldCBsYXN0KEUgdmFsdWUpIHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aGlzW2xlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIGlmIChsZW5ndGggPiAxKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICByZXR1cm4gdGhpc1swXTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCF0ZXN0KHRoaXNbaV0pKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiB0cnVlOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBFIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgRSBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBFIG1hdGNoOwogICAgYm9vbCBtYXRjaEZvdW5kID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIEUgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKG1hdGNoRm91bmQpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7CiAgICAgICAgbWF0Y2ggPSBlbGVtZW50OwogICAgICB9CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChtYXRjaEZvdW5kKSByZXR1cm4gbWF0Y2g7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuICIiOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpLi53cml0ZUFsbCh0aGlzLCBzZXBhcmF0b3IpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IFdoZXJlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IE1hcHBlZExpc3RJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoRSBlbGVtZW50KSkgPT4KICAgICAgRXhwYW5kSXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIEUgcmVkdWNlKEUgY29tYmluZShFIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBFIHZhbHVlID0gdGhpc1swXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCB0aGlzW2ldKTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSA9PiBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgY291bnQsIG51bGwpOwoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHJldHVybiBTa2lwV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IGNvdW50KSA9PiBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgMCwgY291bnQpOwoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHJldHVybiBUYWtlV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pIHsKICAgIExpc3Q8RT4gcmVzdWx0OwogICAgaWYgKGdyb3dhYmxlKSB7CiAgICAgIHJlc3VsdCA9IDxFPltdLi5sZW5ndGggPSBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBMaXN0PEU+KGxlbmd0aCk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdFtpXSA9IHRoaXNbaV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IHRvU2V0KCkgewogICAgU2V0PEU+IHJlc3VsdCA9IFNldDxFPigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHQuYWRkKHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIExpc3QgaW50ZXJmYWNlLgogIHZvaWQgYWRkKEUgZWxlbWVudCkgewogICAgdGhpc1t0aGlzLmxlbmd0aCsrXSA9IGVsZW1lbnQ7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgaW50IGkgPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoRSBlbGVtZW50IGluIGl0ZXJhYmxlKSB7CiAgICAgIGFzc2VydCh0aGlzLmxlbmd0aCA9PSBpIHx8ICh0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcykpKTsKICAgICAgdGhpcy5sZW5ndGggPSBpICsgMTsKICAgICAgdGhpc1tpXSA9IGVsZW1lbnQ7CiAgICAgIGkrKzsKICAgIH0KICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgewogICAgICAgIHRoaXMuX2Nsb3NlR2FwKGksIGkgKyAxKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFJlbW92ZXMgZWxlbWVudHMgZnJvbSB0aGUgbGlzdCBzdGFydGluZyBhdCBbc3RhcnRdIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAgLy8vIFtlbmRdLiAgQXJndW1lbnRzIGFyZSBwcmUtdmFsaWRhdGVkLgogIHZvaWQgX2Nsb3NlR2FwKGludCBzdGFydCwgaW50IGVuZCkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgYXNzZXJ0KDAgPD0gc3RhcnQpOwogICAgYXNzZXJ0KHN0YXJ0IDwgZW5kKTsKICAgIGFzc2VydChlbmQgPD0gbGVuZ3RoKTsKICAgIGludCBzaXplID0gZW5kIC0gc3RhcnQ7CiAgICBmb3IgKGludCBpID0gZW5kOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdGhpc1tpIC0gc2l6ZV0gPSB0aGlzW2ldOwogICAgfQogICAgdGhpcy5sZW5ndGggPSBsZW5ndGggLSBzaXplOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcih0ZXN0LCBmYWxzZSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfZmlsdGVyKHRlc3QsIHRydWUpOwogIH0KCiAgdm9pZCBfZmlsdGVyKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBib29sIHJldGFpbk1hdGNoaW5nKSB7CiAgICBMaXN0PEU+IHJldGFpbmVkID0gPEU+W107CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkgPT0gcmV0YWluTWF0Y2hpbmcpIHsKICAgICAgICByZXRhaW5lZC5hZGQoZWxlbWVudCk7CiAgICAgIH0KICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgaWYgKHJldGFpbmVkLmxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICB0aGlzLnNldFJhbmdlKDAsIHJldGFpbmVkLmxlbmd0aCwgcmV0YWluZWQpOwogICAgICB0aGlzLmxlbmd0aCA9IHJldGFpbmVkLmxlbmd0aDsKICAgIH0KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICB0aGlzLmxlbmd0aCA9IDA7CiAgfQoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEUgcmVtb3ZlTGFzdCgpIHsKICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgcmVzdWx0ID0gdGhpc1tsZW5ndGggLSAxXTsKICAgIGxlbmd0aC0tOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgc29ydChbaW50IGNvbXBhcmUoRSBhLCBFIGIpXSkgewogICAgU29ydC5zb3J0KHRoaXMsIGNvbXBhcmUgPz8gX2NvbXBhcmVBbnkpOwogIH0KCiAgc3RhdGljIGludCBfY29tcGFyZUFueShhLCBiKSB7CiAgICAvLyBJbiBzdHJvbmcgbW9kZSBDb21wYXJhYmxlLmNvbXBhcmUgcmVxdWlyZXMgYW4gaW1wbGljaXQgY2FzdCB0byBlbnN1cmUKICAgIC8vIGBhYCBhbmQgYGJgIGFyZSBDb21wYXJhYmxlLgogICAgcmV0dXJuIENvbXBhcmFibGUuY29tcGFyZShhLCBiKTsKICB9CgogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIHJhbmRvbSA/Pz0gUmFuZG9tKCk7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICB3aGlsZSAobGVuZ3RoID4gMSkgewogICAgICBpbnQgcG9zID0gcmFuZG9tLm5leHRJbnQobGVuZ3RoKTsKICAgICAgbGVuZ3RoIC09IDE7CiAgICAgIHZhciB0bXAgPSB0aGlzW2xlbmd0aF07CiAgICAgIHRoaXNbbGVuZ3RoXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgTWFwPGludCwgRT4gYXNNYXAoKSB7CiAgICByZXR1cm4gTGlzdE1hcFZpZXc8RT4odGhpcyk7CiAgfQoKICBMaXN0PEU+IG9wZXJhdG9yICsoTGlzdDxFPiBvdGhlcikgewogICAgdmFyIHJlc3VsdCA9IDxFPltdLi5sZW5ndGggPSAodGhpcy5sZW5ndGggKyBvdGhlci5sZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIHRoaXMubGVuZ3RoLCB0aGlzKTsKICAgIHJlc3VsdC5zZXRSYW5nZSh0aGlzLmxlbmd0aCwgcmVzdWx0Lmxlbmd0aCwgb3RoZXIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgaW50IGxpc3RMZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGVuZCA/Pz0gbGlzdExlbmd0aDsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxpc3RMZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgTGlzdDxFPiByZXN1bHQgPSA8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbaV0gPSB0aGlzW3N0YXJ0ICsgaV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSXRlcmFibGU8RT4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gU3ViTGlzdEl0ZXJhYmxlPEU+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGlmIChlbmQgPiBzdGFydCkgewogICAgICBfY2xvc2VHYXAoc3RhcnQsIGVuZCk7CiAgICB9CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtFIGZpbGxdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB0aGlzW2ldID0gZmlsbDsKICAgIH0KICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoc2tpcENvdW50LCAic2tpcENvdW50Iik7CgogICAgTGlzdDxFPiBvdGhlckxpc3Q7CiAgICBpbnQgb3RoZXJTdGFydDsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBNYWtlIHRoaXMgYWNjZXB0IG1vcmUuCiAgICBpZiAoaXRlcmFibGUgaXMgTGlzdDxFPikgewogICAgICBvdGhlckxpc3QgPSBpdGVyYWJsZTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGl0ZXJhYmxlLnNraXAoc2tpcENvdW50KS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgb3RoZXJTdGFydCA9IDA7CiAgICB9CiAgICBpZiAob3RoZXJTdGFydCArIGxlbmd0aCA+IG90aGVyTGlzdC5sZW5ndGgpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CiAgICBpZiAob3RoZXJTdGFydCA8IHN0YXJ0KSB7CiAgICAgIC8vIENvcHkgYmFja3dhcmRzIHRvIGVuc3VyZSBjb3JyZWN0IGNvcHkgaWYgW2Zyb21dIGlzIHRoaXMuCiAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHRoaXNbc3RhcnQgKyBpXSA9IG90aGVyTGlzdFtvdGhlclN0YXJ0ICsgaV07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICB0aGlzW3N0YXJ0ICsgaV0gPSBvdGhlckxpc3Rbb3RoZXJTdGFydCArIGldOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IG5ld0NvbnRlbnRzKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBpZiAobmV3Q29udGVudHMgaXMhIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIG5ld0NvbnRlbnRzID0gbmV3Q29udGVudHMudG9MaXN0KCk7CiAgICB9CiAgICBpbnQgcmVtb3ZlTGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpbnQgaW5zZXJ0TGVuZ3RoID0gbmV3Q29udGVudHMubGVuZ3RoOwogICAgaWYgKHJlbW92ZUxlbmd0aCA+PSBpbnNlcnRMZW5ndGgpIHsKICAgICAgaW50IGluc2VydEVuZCA9IHN0YXJ0ICsgaW5zZXJ0TGVuZ3RoOwogICAgICB0aGlzLnNldFJhbmdlKHN0YXJ0LCBpbnNlcnRFbmQsIG5ld0NvbnRlbnRzKTsKICAgICAgaWYgKHJlbW92ZUxlbmd0aCA+IGluc2VydExlbmd0aCkgewogICAgICAgIF9jbG9zZUdhcChpbnNlcnRFbmQsIGVuZCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGludCBkZWx0YSA9IGluc2VydExlbmd0aCAtIHJlbW92ZUxlbmd0aDsKICAgICAgaW50IG5ld0xlbmd0aCA9IHRoaXMubGVuZ3RoICsgZGVsdGE7CiAgICAgIGludCBpbnNlcnRFbmQgPSBzdGFydCArIGluc2VydExlbmd0aDsgLy8gYWthLiBlbmQgKyBkZWx0YS4KICAgICAgdGhpcy5sZW5ndGggPSBuZXdMZW5ndGg7CiAgICAgIHRoaXMuc2V0UmFuZ2UoaW5zZXJ0RW5kLCBuZXdMZW5ndGgsIHRoaXMsIGVuZCk7CiAgICAgIHRoaXMuc2V0UmFuZ2Uoc3RhcnQsIGluc2VydEVuZCwgbmV3Q29udGVudHMpOwogICAgfQogIH0KCiAgaW50IGluZGV4T2YoT2JqZWN0IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleE9mKE9iamVjdCBlbGVtZW50LCBbaW50IHN0YXJ0XSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHN0YXJ0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBFIGVsZW1lbnQpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGluZGV4LCAiaW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoaW5kZXgsIDAsIGxlbmd0aCwgImluZGV4Iik7CiAgICBpZiAoaW5kZXggPT0gdGhpcy5sZW5ndGgpIHsKICAgICAgYWRkKGVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmxlbmd0aCsrOwogICAgc2V0UmFuZ2UoaW5kZXggKyAxLCB0aGlzLmxlbmd0aCwgdGhpcywgaW5kZXgpOwogICAgdGhpc1tpbmRleF0gPSBlbGVtZW50OwogIH0KCiAgRSByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIEUgcmVzdWx0ID0gdGhpc1tpbmRleF07CiAgICBfY2xvc2VHYXAoaW5kZXgsIGluZGV4ICsgMSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChpbmRleCwgMCwgbGVuZ3RoLCAiaW5kZXgiKTsKICAgIGlmIChpdGVyYWJsZSBpcyEgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUgfHwgaWRlbnRpY2FsKGl0ZXJhYmxlLCB0aGlzKSkgewogICAgICBpdGVyYWJsZSA9IGl0ZXJhYmxlLnRvTGlzdCgpOwogICAgfQogICAgaW50IGluc2VydGlvbkxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aDsKICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGVycm9ycyBhZnRlciB0aGUgbGVuZ3RoIGNoYW5nZSwgaW4gd2hpY2ggY2FzZSB0aGUgbGlzdAogICAgLy8gd2lsbCBlbmQgdXAgYmVpbmcgbW9kaWZpZWQgYnV0IHRoZSBvcGVyYXRpb24gbm90IGNvbXBsZXRlLiBVbmxlc3Mgd2UKICAgIC8vIGFsd2F5cyBnbyB0aHJvdWdoIGEgInRvTGlzdCIgd2UgY2FuJ3QgcmVhbGx5IGF2b2lkIHRoYXQuCiAgICB0aGlzLmxlbmd0aCArPSBpbnNlcnRpb25MZW5ndGg7CiAgICBpZiAoaXRlcmFibGUubGVuZ3RoICE9IGluc2VydGlvbkxlbmd0aCkgewogICAgICAvLyBJZiB0aGUgaXRlcmFibGUncyBsZW5ndGggaXMgbGlua2VkIHRvIHRoaXMgbGlzdCdzIGxlbmd0aCBzb21laG93LAogICAgICAvLyB3ZSBjYW4ndCBpbnNlcnQgb25lIGluIHRoZSBvdGhlci4KICAgICAgdGhpcy5sZW5ndGggLT0gaW5zZXJ0aW9uTGVuZ3RoOwogICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoaXRlcmFibGUpOwogICAgfQogICAgc2V0UmFuZ2UoaW5kZXggKyBpbnNlcnRpb25MZW5ndGgsIHRoaXMubGVuZ3RoLCB0aGlzLCBpbmRleCk7CiAgICBzZXRBbGwoaW5kZXgsIGl0ZXJhYmxlKTsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIGlmIChpdGVyYWJsZSBpcyBMaXN0KSB7CiAgICAgIHNldFJhbmdlKGluZGV4LCBpbmRleCArIGl0ZXJhYmxlLmxlbmd0aCwgaXRlcmFibGUpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChFIGVsZW1lbnQgaW4gaXRlcmFibGUpIHsKICAgICAgICB0aGlzW2luZGV4KytdID0gZWxlbWVudDsKICAgICAgfQogICAgfQogIH0KCiAgSXRlcmFibGU8RT4gZ2V0IHJldmVyc2VkID0+IFJldmVyc2VkTGlzdEl0ZXJhYmxlPEU+KHRoaXMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb0Z1bGxTdHJpbmcodGhpcywgJ1snLCAnXScpOwp9CoIZAE5OPAEZAScERw8EQz8EUE5LS0pPRDA+RQZHPys5AgErBEEaBERJIARQTktLSk9FMDEZSyA1ASkBLzkBKR4nFyMxCAYEAR4jASMBED0UBAEcPRUEAQ89HQQBGz0eBAERPToUBAEiHicrIzEIBhIEASUeJygjMQgGEQQBIx4nJiMxCAYSBAE1HicbKSMxCAYpLAQBNB4sGykjMQgGKSwEATYeDR0nGxsaMAobGQgjMQgGIiksBAEpIEUeBAFLATwBSwE1JQE0Hj0XJycjMQgGEgQBRR4eJycjMQgGEgQBSAEwLQQBRQEwLQQBKxQUJw0gBicbBhMEARMeJxsGEwQBFRgjBAEmGSJNGxkLBgQBICwgIhUIBhIEAVErJx4YGRscKSAGIQQBKxoEASsZBAE8Hh4nHS0fCCMxCAYqMyUGBAERFQQBMhMXLgYhDhMEASctBAEhTSMlBAEiGR4ZKBMeIBcGBAEYIQQBJj8rOBMEASoiGDgeLScjBhMEAS05MQQBKTkXHQYEATE5KBYGBAFROR4dOQEXFC4fHB4NRBYGMisGHkIuNQgNKTUIBgQBQzkzKgYkKygsNCkjCA0vK0EfNjQGBAExHjAoBg8EAToeMCMGDwQBMUgnKAYPBAE6SCcjBg8EASYwQCAUDgYTMxsEARocIRMEATRATSQGK01MQCQuSysmMwZBHQQBMRw6DSQhCAYEAT0BSgIBGWRhcnQ6Y29sbGVjdGlvbi9saXN0LmRhcnRAc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIvc3RyaW5nX3NjYW5uZXIuZGFydIz/Ly8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5zY2FubmVyLnN0cmluZ19zY2FubmVyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW4sIFN5bnRoZXRpY1N0cmluZ1Rva2VuLCBUb2tlblR5cGU7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgYXMgYW5hbHl6ZXIgc2hvdyBTdHJpbmdUb2tlbjsKCmltcG9ydCAnYWJzdHJhY3Rfc2Nhbm5lci5kYXJ0JwogICAgc2hvdyBBYnN0cmFjdFNjYW5uZXIsIExhbmd1YWdlVmVyc2lvbkNoYW5nZWQsIFNjYW5uZXJDb25maWd1cmF0aW9uOwoKaW1wb3J0ICd0b2tlbi5kYXJ0JwogICAgc2hvdyBDb21tZW50VG9rZW4sIERhcnREb2NUb2tlbiwgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4sIFN0cmluZ1Rva2VuOwoKaW1wb3J0ICdlcnJvcl90b2tlbi5kYXJ0JyBzaG93IEVycm9yVG9rZW47CgovKioKICogU2Nhbm5lciB0aGF0IHJlYWRzIGZyb20gYSBTdHJpbmcgYW5kIGNyZWF0ZXMgdG9rZW5zIHRoYXQgcG9pbnRzIHRvCiAqIHN1YnN0cmluZ3MuCiAqLwpjbGFzcyBTdHJpbmdTY2FubmVyIGV4dGVuZHMgQWJzdHJhY3RTY2FubmVyIHsKICAvKiogVGhlIGZpbGUgY29udGVudC4gKi8KICBTdHJpbmcgc3RyaW5nOwoKICAvKiogVGhlIGN1cnJlbnQgb2Zmc2V0IGluIFtzdHJpbmddLiAqLwogIGludCBzY2FuT2Zmc2V0ID0gLTE7CgogIFN0cmluZ1NjYW5uZXIoU3RyaW5nIHN0cmluZywKICAgICAge1NjYW5uZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sCiAgICAgIGJvb2wgaW5jbHVkZUNvbW1lbnRzOiBmYWxzZSwKICAgICAgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkfSkKICAgICAgOiBzdHJpbmcgPSBlbnN1cmVaZXJvVGVybWluYXRpb24oc3RyaW5nKSwKICAgICAgICBzdXBlcihjb25maWd1cmF0aW9uLCBpbmNsdWRlQ29tbWVudHMsIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQpOwoKICBzdGF0aWMgU3RyaW5nIGVuc3VyZVplcm9UZXJtaW5hdGlvbihTdHJpbmcgc3RyaW5nKSB7CiAgICByZXR1cm4gKHN0cmluZy5pc0VtcHR5IHx8IHN0cmluZy5jb2RlVW5pdEF0KHN0cmluZy5sZW5ndGggLSAxKSAhPSAwKQogICAgICAgIC8vIFRPRE8obHJ5KTogYWJvcnQgaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBhcnJheSwgb3Igd2Fybj8KICAgICAgICA/IHN0cmluZyArICdceDAwJwogICAgICAgIDogc3RyaW5nOwogIH0KCiAgc3RhdGljIGJvb2wgaXNMZWdhbElkZW50aWZpZXIoU3RyaW5nIGlkZW50aWZpZXIpIHsKICAgIFN0cmluZ1NjYW5uZXIgc2Nhbm5lciA9IG5ldyBTdHJpbmdTY2FubmVyKGlkZW50aWZpZXIpOwogICAgVG9rZW4gc3RhcnRUb2tlbiA9IHNjYW5uZXIudG9rZW5pemUoKTsKICAgIHJldHVybiBzdGFydFRva2VuIGlzISBFcnJvclRva2VuICYmIHN0YXJ0VG9rZW4ubmV4dC5pc0VvZjsKICB9CgogIGludCBhZHZhbmNlKCkgPT4gc3RyaW5nLmNvZGVVbml0QXQoKytzY2FuT2Zmc2V0KTsKICBpbnQgcGVlaygpID0+IHN0cmluZy5jb2RlVW5pdEF0KHNjYW5PZmZzZXQgKyAxKTsKCiAgaW50IGdldCBzdHJpbmdPZmZzZXQgPT4gc2Nhbk9mZnNldDsKCiAgaW50IGN1cnJlbnRBc1VuaWNvZGUoaW50IG5leHQpID0+IG5leHQ7CgogIHZvaWQgaGFuZGxlVW5pY29kZShpbnQgc3RhcnRTY2FuT2Zmc2V0KSB7fQoKICBAb3ZlcnJpZGUKICBhbmFseXplci5TdHJpbmdUb2tlbiBjcmVhdGVTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSkgewogICAgcmV0dXJuIG5ldyBTdHJpbmdUb2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICAgIHR5cGUsIHN0cmluZywgc3RhcnQsIHNjYW5PZmZzZXQgKyBleHRyYU9mZnNldCwgdG9rZW5TdGFydCwKICAgICAgICBjYW5vbmljYWxpemU6IHRydWUsIHByZWNlZGluZ0NvbW1lbnRzOiBjb21tZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBhbmFseXplci5TdHJpbmdUb2tlbiBjcmVhdGVTeW50aGV0aWNTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksIFN0cmluZyBzeW50aGV0aWNDaGFycykgewogICAgU3RyaW5nIHNvdXJjZSA9IHN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIHNjYW5PZmZzZXQpOwogICAgcmV0dXJuIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbigKICAgICAgICB0eXBlLCBzb3VyY2UgKyBzeW50aGV0aWNDaGFycywgdG9rZW5TdGFydCwgc291cmNlLmxlbmd0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21tZW50VG9rZW4gY3JlYXRlQ29tbWVudFRva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pIHsKICAgIHJldHVybiBuZXcgQ29tbWVudFRva2VuLmZyb21TdWJzdHJpbmcoCiAgICAgICAgdHlwZSwgc3RyaW5nLCBzdGFydCwgc2Nhbk9mZnNldCArIGV4dHJhT2Zmc2V0LCB0b2tlblN0YXJ0LAogICAgICAgIGNhbm9uaWNhbGl6ZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0RG9jVG9rZW4gY3JlYXRlRGFydERvY1Rva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pIHsKICAgIHJldHVybiBuZXcgRGFydERvY1Rva2VuLmZyb21TdWJzdHJpbmcoCiAgICAgICAgdHlwZSwgc3RyaW5nLCBzdGFydCwgc2Nhbk9mZnNldCArIGV4dHJhT2Zmc2V0LCB0b2tlblN0YXJ0LAogICAgICAgIGNhbm9uaWNhbGl6ZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMYW5ndWFnZVZlcnNpb25Ub2tlbiBjcmVhdGVMYW5ndWFnZVZlcnNpb25Ub2tlbigKICAgICAgaW50IHN0YXJ0LCBpbnQgbWFqb3IsIGludCBtaW5vcikgewogICAgcmV0dXJuIG5ldyBMYW5ndWFnZVZlcnNpb25Ub2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICAgIHN0cmluZywgc3RhcnQsIHNjYW5PZmZzZXQsIHRva2VuU3RhcnQsIG1ham9yLCBtaW5vciwKICAgICAgICBjYW5vbmljYWxpemU6IHRydWUpOwogIH0KCiAgYm9vbCBhdEVuZE9mRmlsZSgpID0+IHNjYW5PZmZzZXQgPj0gc3RyaW5nLmxlbmd0aCAtIDE7Cn0KZwBOTjwBKAFPAUABH0gBFEgBKwEERg8ELhsRASkXAR8rIzYwRwE3SUMaEgQBNTsrPwQBNDMBJgEqAS0BDC0xHypDOgQBDDZKOSVDBAEMTR8rQx0EAQxNHytDHQQBDDMpMz0dBAE5AgE3cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvc3RyaW5nX3NjYW5uZXIuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci91dGY4X2J5dGVzX3NjYW5uZXIuZGFydKFGLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci51dGY4X2J5dGVzX3NjYW5uZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyB1bmljb2RlQm9tQ2hhcmFjdGVyUnVuZSwgdXRmODsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFN5bnRoZXRpY1N0cmluZ1Rva2VuLCBUb2tlblR5cGU7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgYXMgYW5hbHl6ZXIgc2hvdyBTdHJpbmdUb2tlbjsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKCmltcG9ydCAnYWJzdHJhY3Rfc2Nhbm5lci5kYXJ0JwogICAgc2hvdyBBYnN0cmFjdFNjYW5uZXIsIExhbmd1YWdlVmVyc2lvbkNoYW5nZWQsIFNjYW5uZXJDb25maWd1cmF0aW9uOwoKaW1wb3J0ICd0b2tlbi5kYXJ0JwogICAgc2hvdyBDb21tZW50VG9rZW4sIERhcnREb2NUb2tlbiwgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4sIFN0cmluZ1Rva2VuOwoKLyoqCiAqIFNjYW5uZXIgdGhhdCByZWFkcyBmcm9tIGEgVVRGLTggZW5jb2RlZCBsaXN0IG9mIGJ5dGVzIGFuZCBjcmVhdGVzIHRva2VucwogKiB0aGF0IHBvaW50cyB0byBzdWJzdHJpbmdzLgogKi8KY2xhc3MgVXRmOEJ5dGVzU2Nhbm5lciBleHRlbmRzIEFic3RyYWN0U2Nhbm5lciB7CiAgLyoqCiAgICogVGhlIGZpbGUgY29udGVudC4KICAgKgogICAqIFRoZSBjb250ZW50IGlzIHplcm8tdGVybWluYXRlZC4KICAgKi8KICBMaXN0PGludD4gYnl0ZXM7CgogIC8qKgogICAqIFBvaW50cyB0byB0aGUgb2Zmc2V0IG9mIHRoZSBsYXN0IGJ5dGUgcmV0dXJuZWQgYnkgW2FkdmFuY2VdLgogICAqCiAgICogQWZ0ZXIgaW52b2tpbmcgW2N1cnJlbnRBc1VuaWNvZGVdLCB0aGUgW2J5dGVPZmZzZXRdIHBvaW50cyB0byB0aGUgbGFzdAogICAqIGJ5dGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSAodW5pY29kZSBvciBBU0NJSSkgY2hhcmFjdGVyLiBUaGF0IHdheSwgW2FkdmFuY2VdCiAgICogY2FuIGFsd2F5cyBpbmNyZWFzZSB0aGUgYnl0ZSBvZmZzZXQgYnkgMS4KICAgKi8KICBpbnQgYnl0ZU9mZnNldCA9IC0xOwoKICAvKioKICAgKiBUaGUgZ2V0dGVyIFtzY2FuT2Zmc2V0XSBpcyBleHBlY3RlZCB0byByZXR1cm4gdGhlIGluZGV4IHdoZXJlIHRoZSBjdXJyZW50CiAgICogY2hhcmFjdGVyICpzdGFydHMqLiBJbiBjYXNlIG9mIGEgbm9uLWFzY2lpIGNoYXJhY3RlciwgYWZ0ZXIgaW52b2tpbmcKICAgKiBbY3VycmVudEFzVW5pY29kZV0sIHRoZSBieXRlIG9mZnNldCBwb2ludHMgdG8gdGhlICpsYXN0KiBieXRlLgogICAqCiAgICogVGhpcyBmaWVsZCBrZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZvciB0aGUgY3VycmVudCB1bmljb2RlCiAgICogY2hhcmFjdGVyLiBGb3IgZXhhbXBsZSwgaWYgYnl0ZXMgNyw4LDkgZW5jb2RlIG9uZSB1bmljb2RlIGNoYXJhY3RlciwgdGhlCiAgICogW2J5dGVPZmZzZXRdIGlzIDkgKGFmdGVyIGludm9raW5nIFtjdXJyZW50QXNVbmljb2RlXSkuIFRoZSBbc2NhblNsYWNrXQogICAqIHdpbGwgYmUgMiwgc28gdGhhdCBbc2Nhbk9mZnNldF0gcmV0dXJucyA3LgogICAqLwogIGludCBzY2FuU2xhY2sgPSAwOwoKICAvKioKICAgKiBIb2xkcyB0aGUgW2J5dGVPZmZzZXRdIHZhbHVlIGZvciB3aGljaCB0aGUgY3VycmVudCBbc2NhblNsYWNrXSBpcyB2YWxpZC4KICAgKi8KICBpbnQgc2NhblNsYWNrT2Zmc2V0ID0gLTE7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBieXRlIHRoYXQgYmVsb25ncyB0byB0aGUgY3VycmVudAogICAqIGNoYXJhY3Rlci4KICAgKi8KICBpbnQgZ2V0IHNjYW5PZmZzZXQgewogICAgaWYgKGJ5dGVPZmZzZXQgPT0gc2NhblNsYWNrT2Zmc2V0KSB7CiAgICAgIHJldHVybiBieXRlT2Zmc2V0IC0gc2NhblNsYWNrOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJ5dGVPZmZzZXQ7CiAgICB9CiAgfQoKICAvKioKICAgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYW5kIHRoZSBudW1iZXIgb2YgY29ycmVzcG9uZGluZwogICAqIHN0cmluZyBjaGFyYWN0ZXJzLCB1cCB0byB0aGUgY3VycmVudCBbYnl0ZU9mZnNldF0uCiAgICovCiAgaW50IHV0ZjhTbGFjayA9IDA7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgVXRmOEJ5dGVzU2Nhbm5lci4gVGhlIHNvdXJjZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlIGEKICAgKiBbVXRmOEJ5dGVzU291cmNlRmlsZV0gdGhhdCBob2xkcyBhIGxpc3Qgb2YgVVRGLTggYnl0ZXMuIE90aGVyd2lzZSB0aGUKICAgKiBzdHJpbmcgdGV4dCBvZiB0aGUgc291cmNlIGZpbGUgaXMgZGVjb2RlZC4KICAgKgogICAqIFRoZSBsaXN0IG9mIFVURi04IGJ5dGVzIFtmaWxlLnNsb3dVdGY4Qnl0ZXMoKV0gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGFuCiAgICogYXJyYXkgd2hvc2UgbGFzdCBlbGVtZW50IGlzICcwJyB0byBzaWduYWwgdGhlIGVuZCBvZiB0aGUgZmlsZS4gSWYgdGhpcwogICAqIGlzIG5vdCB0aGUgY2FzZSwgdGhlIGVudGlyZSBhcnJheSBpcyBjb3BpZWQgYmVmb3JlIHNjYW5uaW5nLgogICAqLwogIFV0ZjhCeXRlc1NjYW5uZXIodGhpcy5ieXRlcywKICAgICAge1NjYW5uZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sCiAgICAgIGJvb2wgaW5jbHVkZUNvbW1lbnRzOiBmYWxzZSwKICAgICAgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkfSkKICAgICAgOiBzdXBlcihjb25maWd1cmF0aW9uLCBpbmNsdWRlQ29tbWVudHMsIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQsCiAgICAgICAgICAgIG51bWJlck9mQnl0ZXNIaW50OiBieXRlcy5sZW5ndGgpIHsKICAgIGFzc2VydChieXRlcy5sYXN0ID09IDApOwogICAgLy8gU2tpcCBhIGxlYWRpbmcgQk9NLgogICAgaWYgKGNvbnRhaW5zQm9tQXQoMCkpIGJ5dGVPZmZzZXQgKz0gMzsKICB9CgogIGJvb2wgY29udGFpbnNCb21BdChpbnQgb2Zmc2V0KSB7CiAgICBjb25zdCBCT01fVVRGOCA9IGNvbnN0IFsweEVGLCAweEJCLCAweEJGXTsKCiAgICByZXR1cm4gb2Zmc2V0ICsgMyA8IGJ5dGVzLmxlbmd0aCAmJgogICAgICAgIGJ5dGVzW29mZnNldF0gPT0gQk9NX1VURjhbMF0gJiYKICAgICAgICBieXRlc1tvZmZzZXQgKyAxXSA9PSBCT01fVVRGOFsxXSAmJgogICAgICAgIGJ5dGVzW29mZnNldCArIDJdID09IEJPTV9VVEY4WzJdOwogIH0KCiAgaW50IGFkdmFuY2UoKSA9PiBieXRlc1srK2J5dGVPZmZzZXRdOwoKICBpbnQgcGVlaygpID0+IGJ5dGVzW2J5dGVPZmZzZXQgKyAxXTsKCiAgLy8vIFJldHVybnMgdGhlIHVuaWNvZGUgY29kZSBwb2ludCBzdGFydGluZyBhdCB0aGUgYnl0ZSBvZmZzZXQgW3N0YXJ0T2Zmc2V0XQogIC8vLyB3aXRoIHRoZSBieXRlIFtuZXh0Qnl0ZV0uCiAgaW50IG5leHRDb2RlUG9pbnQoaW50IHN0YXJ0T2Zmc2V0LCBpbnQgbmV4dEJ5dGUpIHsKICAgIGludCBleHBlY3RlZEhpZ2hCeXRlczsKICAgIGlmIChuZXh0Qnl0ZSA8IDB4QzIpIHsKICAgICAgZXhwZWN0ZWRIaWdoQnl0ZXMgPSAxOyAvLyBCYWQgY29kZSB1bml0LgogICAgfSBlbHNlIGlmIChuZXh0Qnl0ZSA8IDB4RTApIHsKICAgICAgZXhwZWN0ZWRIaWdoQnl0ZXMgPSAyOwogICAgfSBlbHNlIGlmIChuZXh0Qnl0ZSA8IDB4RjApIHsKICAgICAgZXhwZWN0ZWRIaWdoQnl0ZXMgPSAzOwogICAgfSBlbHNlIGlmIChuZXh0Qnl0ZSA8IDB4RjUpIHsKICAgICAgZXhwZWN0ZWRIaWdoQnl0ZXMgPSA0OwogICAgfSBlbHNlIHsKICAgICAgZXhwZWN0ZWRIaWdoQnl0ZXMgPSAxOyAvLyBCYWQgY29kZSB1bml0LgogICAgfQogICAgaW50IG51bUJ5dGVzID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRIaWdoQnl0ZXM7IGkrKykgewogICAgICBpZiAoYnl0ZXNbYnl0ZU9mZnNldCArIGldIDwgMHg4MCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG51bUJ5dGVzKys7CiAgICB9CiAgICBpbnQgZW5kID0gc3RhcnRPZmZzZXQgKyBudW1CeXRlczsKICAgIGJ5dGVPZmZzZXQgPSBlbmQgLSAxOwogICAgaWYgKGV4cGVjdGVkSGlnaEJ5dGVzID09IDEgfHwgbnVtQnl0ZXMgIT0gZXhwZWN0ZWRIaWdoQnl0ZXMpIHsKICAgICAgcmV0dXJuIHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKICAgIH0KICAgIC8vIFRPRE8obHJ5KTogbWVhc3VyYWJseSBzbG93LCBkZWNvZGUgY3JlYXRlcyBmaXJzdCBhIFV0ZjhEZWNvZGVyIGFuZCBhCiAgICAvLyBfVXRmOERlY29kZXIgaW5zdGFuY2UuIEFsc28gdGhlIHN1Ymxpc3QgaXMgZWFnZXJseSBhbGxvY2F0ZWQuCiAgICBTdHJpbmcgY29kZVBvaW50ID0KICAgICAgICB1dGY4LmRlY29kZShieXRlcy5zdWJsaXN0KHN0YXJ0T2Zmc2V0LCBlbmQpLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSk7CiAgICBpZiAoY29kZVBvaW50Lmxlbmd0aCA9PSAwKSB7CiAgICAgIC8vIFRoZSBVVEYtOCBkZWNvZGVyIGRpc2NhcmRzIGxlYWRpbmcgQk9NIGNoYXJhY3RlcnMuCiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBkb24ndCBqdXN0IGFzc3VtZSB0aGF0IHJlbW92ZWQgY2hhcmFjdGVycyB3ZXJlIHRoZQogICAgICAvLyBCT00uCiAgICAgIGFzc2VydChjb250YWluc0JvbUF0KHN0YXJ0T2Zmc2V0KSk7CiAgICAgIGNvZGVQb2ludCA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaWNvZGVCb21DaGFyYWN0ZXJSdW5lKTsKICAgIH0KICAgIGlmIChjb2RlUG9pbnQubGVuZ3RoID09IDEpIHsKICAgICAgdXRmOFNsYWNrICs9IChudW1CeXRlcyAtIDEpOwogICAgICBzY2FuU2xhY2sgPSBudW1CeXRlcyAtIDE7CiAgICAgIHNjYW5TbGFja09mZnNldCA9IGJ5dGVPZmZzZXQ7CiAgICAgIHJldHVybiBjb2RlUG9pbnQuY29kZVVuaXRBdCgwKTsKICAgIH0gZWxzZSBpZiAoY29kZVBvaW50Lmxlbmd0aCA9PSAyKSB7CiAgICAgIHV0ZjhTbGFjayArPSAobnVtQnl0ZXMgLSAyKTsKICAgICAgc2NhblNsYWNrID0gbnVtQnl0ZXMgLSAxOwogICAgICBzY2FuU2xhY2tPZmZzZXQgPSBieXRlT2Zmc2V0OwogICAgICBzdHJpbmdPZmZzZXRTbGFja09mZnNldCA9IGJ5dGVPZmZzZXQ7CiAgICAgIC8vIEluIGNhc2Ugb2YgYSBzdXJyb2dhdGUgcGFpciwgcmV0dXJuIGEgc2luZ2xlIGNvZGUgcG9pbnQuCiAgICAgIC8vIEdyYWNlZnVsbHkgZGVncmFkZSBnaXZlbiBpbnZhbGlkIFVURi04LgogICAgICB2YXIgcnVuZXMgPSBjb2RlUG9pbnQucnVuZXMuaXRlcmF0b3I7CiAgICAgIGlmICghcnVuZXMubW92ZU5leHQoKSkgcmV0dXJuIHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKICAgICAgdmFyIGNvZGVVbml0ID0gcnVuZXMuY3VycmVudDsKICAgICAgcmV0dXJuICFydW5lcy5tb3ZlTmV4dCgpID8gY29kZVVuaXQgOiB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOwogICAgfQogIH0KCiAgaW50IGxhc3RVbmljb2RlT2Zmc2V0ID0gLTE7CiAgaW50IGN1cnJlbnRBc1VuaWNvZGUoaW50IG5leHQpIHsKICAgIGlmIChuZXh0IDwgMTI4KSByZXR1cm4gbmV4dDsKICAgIC8vIENoZWNrIGlmIGN1cnJlbnRBc1VuaWNvZGUgd2FzIGFscmVhZHkgaW52b2tlZC4KICAgIGlmIChieXRlT2Zmc2V0ID09IGxhc3RVbmljb2RlT2Zmc2V0KSByZXR1cm4gbmV4dDsKICAgIGludCByZXMgPSBuZXh0Q29kZVBvaW50KGJ5dGVPZmZzZXQsIG5leHQpOwogICAgbGFzdFVuaWNvZGVPZmZzZXQgPSBieXRlT2Zmc2V0OwogICAgcmV0dXJuIHJlczsKICB9CgogIHZvaWQgaGFuZGxlVW5pY29kZShpbnQgc3RhcnRTY2FuT2Zmc2V0KSB7CiAgICBpbnQgZW5kID0gYnl0ZU9mZnNldDsKICAgIC8vIFRPRE8obHJ5KTogdGhpcyBtZWFzdXJhYmx5IHNsb3dzIGRvd24gdGhlIHNjYW5uZXIgZm9yIGZpbGVzIHdpdGggdW5pY29kZS4KICAgIFN0cmluZyBzID0KICAgICAgICB1dGY4LmRlY29kZShieXRlcy5zdWJsaXN0KHN0YXJ0U2Nhbk9mZnNldCwgZW5kKSwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpOwogICAgdXRmOFNsYWNrICs9IChlbmQgLSBzdGFydFNjYW5PZmZzZXQpIC0gcy5sZW5ndGg7CiAgfQoKICAvKioKICAgKiBUaGlzIGZpZWxkIHJlbWVtYmVycyB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGxhc3QgY2hhcmFjdGVyIGRlY29kZWQgd2l0aAogICAqIFtuZXh0Q29kZVBvaW50XSB0aGF0IHVzZWQgdHdvIGNvZGUgdW5pdHMgaW4gVVRGLTE2LgogICAqCiAgICogW25leHRDb2RlUG9pbnRdIHJldHVybnMgYSBzaW5nbGUgY29kZSBwb2ludCBmb3IgZWFjaCB1bmljb2RlIGNoYXJhY3RlciwKICAgKiBldmVuIGlmIGl0IG5lZWRzIHR3byBjb2RlIHVuaXRzIGluIFVURi0xNi4KICAgKgogICAqIEZvciBleGFtcGxlLCAnXHV7MWQxMWV9JyB1c2VzIDQgYnl0ZXMgaW4gVVRGLTgsIGFuZCB0d28gY29kZSB1bml0cyBpbgogICAqIFVURi0xNi4gVGhlIFt1dGY4U2xhY2tdIGlzIHRoZXJlZm9yZSAyLiBBZnRlciBpbnZva2luZyBbbmV4dENvZGVQb2ludF0sIHRoZQogICAqIFtieXRlT2Zmc2V0XSBwb2ludHMgdG8gdGhlIGxhc3QgKG9mIDQpIGJ5dGVzLiBUaGUgW3N0cmluZ09mZnNldF0gc2hvdWxkCiAgICogcmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IG9uZSwgd2hpY2ggaXMgb25lIHBvc2l0aW9uIG1vcmUgbGVmdCB0aGFuCiAgICogdGhlIFt1dGY4U2xhY2tdLgogICAqLwogIGludCBzdHJpbmdPZmZzZXRTbGFja09mZnNldCA9IC0xOwoKICBpbnQgZ2V0IHN0cmluZ09mZnNldCB7CiAgICBpZiAoc3RyaW5nT2Zmc2V0U2xhY2tPZmZzZXQgPT0gYnl0ZU9mZnNldCkgewogICAgICByZXR1cm4gYnl0ZU9mZnNldCAtIHV0ZjhTbGFjayAtIDE7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gYnl0ZU9mZnNldCAtIHV0ZjhTbGFjazsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGFuYWx5emVyLlN0cmluZ1Rva2VuIGNyZWF0ZVN1YnN0cmluZ1Rva2VuKAogICAgICBUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwKICAgICAgW2ludCBleHRyYU9mZnNldCA9IDBdKSB7CiAgICByZXR1cm4gbmV3IFN0cmluZ1Rva2VuLmZyb21VdGY4Qnl0ZXMoCiAgICAgICAgdHlwZSwgYnl0ZXMsIHN0YXJ0LCBieXRlT2Zmc2V0ICsgZXh0cmFPZmZzZXQsIGFzY2lpT25seSwgdG9rZW5TdGFydCwKICAgICAgICBwcmVjZWRpbmdDb21tZW50czogY29tbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYW5hbHl6ZXIuU3RyaW5nVG9rZW4gY3JlYXRlU3ludGhldGljU3Vic3RyaW5nVG9rZW4oCiAgICAgIFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LCBTdHJpbmcgc3ludGhldGljQ2hhcnMpIHsKICAgIFN0cmluZyBzb3VyY2UgPSBTdHJpbmdUb2tlbi5kZWNvZGVVdGY4KGJ5dGVzLCBzdGFydCwgYnl0ZU9mZnNldCwgYXNjaWlPbmx5KTsKICAgIHJldHVybiBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgICAgdHlwZSwgc291cmNlICsgc3ludGhldGljQ2hhcnMsIHRva2VuU3RhcnQsIHNvdXJjZS5sZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29tbWVudFRva2VuIGNyZWF0ZUNvbW1lbnRUb2tlbihUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwKICAgICAgW2ludCBleHRyYU9mZnNldCA9IDBdKSB7CiAgICByZXR1cm4gbmV3IENvbW1lbnRUb2tlbi5mcm9tVXRmOEJ5dGVzKAogICAgICAgIHR5cGUsIGJ5dGVzLCBzdGFydCwgYnl0ZU9mZnNldCArIGV4dHJhT2Zmc2V0LCBhc2NpaU9ubHksIHRva2VuU3RhcnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydERvY1Rva2VuIGNyZWF0ZURhcnREb2NUb2tlbihUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwKICAgICAgW2ludCBleHRyYU9mZnNldCA9IDBdKSB7CiAgICByZXR1cm4gbmV3IERhcnREb2NUb2tlbi5mcm9tVXRmOEJ5dGVzKAogICAgICAgIHR5cGUsIGJ5dGVzLCBzdGFydCwgYnl0ZU9mZnNldCArIGV4dHJhT2Zmc2V0LCBhc2NpaU9ubHksIHRva2VuU3RhcnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4gY3JlYXRlTGFuZ3VhZ2VWZXJzaW9uVG9rZW4oCiAgICAgIGludCBzdGFydCwgaW50IG1ham9yLCBpbnQgbWlub3IpIHsKICAgIHJldHVybiBuZXcgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4uZnJvbVV0ZjhCeXRlcygKICAgICAgICBieXRlcywgc3RhcnQsIGJ5dGVPZmZzZXQsIHRva2VuU3RhcnQsIG1ham9yLCBtaW5vcik7CiAgfQoKICBib29sIGF0RW5kT2ZGaWxlKCkgPT4gYnl0ZU9mZnNldCA+PSBieXRlcy5sZW5ndGggLSAxOwp9CoD7AE5OPAEqAToBSAFAATsBH0gBFEgBBEweBDEGFwUlBhMBBkIFTFAvBhcBBk9KRAVLTkwwBhUBBk4GHAEGSxAGFyklDRkGBAEGUDgGFQEGSUswBU1MQgYfKyM2Ri8dGysEASMvASgoLCoEASgBJwFPIDUbGy8iHSIdIh0NLwYWMioPCBIGJhpDKgZMRRdMITxMDipEBiEjICQmKCMgJCxCMSxBJEkNKgYEAR4jITY2LyQQBAEsGlEPUDUEAQZNOQVNMAVLUU1OFgYkARkxKQ0lBgQBDC0xHypNJgQBDDZKUSVDBAEMTR8rTgQBDE0fK04EAQwzKTM9BAE4AgE7cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvdXRmOF9ieXRlc19zY2FubmVyLmRhcnQ5c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIvcmVjb3Zlci5kYXJ0iKwvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zY2FubmVyLnJlY292ZXI7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlblR5cGU7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAndG9rZW4uZGFydCcgc2hvdyBTdHJpbmdUb2tlbjsKCmltcG9ydCAnZXJyb3JfdG9rZW4uZGFydCcgc2hvdyBFcnJvclRva2VuOwoKLy8vIFJlY292ZXIgZnJvbSBlcnJvcnMgaW4gW3Rva2Vuc10uIFRoZSBvcmlnaW5hbCBzb3VyY2VzIGFyZSBwcm92aWRlZCBhcwovLy8gW2J5dGVzXS4gW2xpbmVTdGFydHNdIGFyZSB0aGUgYmVnaW5uaW5nIGNoYXJhY3RlciBvZmZzZXRzIG9mIGxpbmVzLCBhbmQKLy8vIG11c3QgYmUgdXBkYXRlZCBpZiByZWNvdmVyeSBpcyBwZXJmb3JtZWQgcmV3cml0aW5nIHRoZSBvcmlnaW5hbCBzb3VyY2UKLy8vIGNvZGUuClRva2VuIHNjYW5uZXJSZWNvdmVyeShMaXN0PGludD4gYnl0ZXMsIFRva2VuIHRva2VucywgTGlzdDxpbnQ+IGxpbmVTdGFydHMpIHsKICAvLyBTYW5pdHkgY2hlY2sgdGhhdCBhbGwgZXJyb3IgdG9rZW5zIGFyZSBwcmVwZW5kZWQuCgogIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBpbiBhIHdoaWxlIGFmdGVyIHRoZSBkdXN0IGhhcyBzZXR0bGVkLgoKICAvLyBTa2lwIG92ZXIgcHJlcGVuZGVkIGVycm9yIHRva2VucwogIHZhciB0b2tlbiA9IHRva2VuczsKICB3aGlsZSAodG9rZW4gaXMgRXJyb3JUb2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogIH0KCiAgLy8gQXNzZXJ0IG5vIGVycm9yIHRva2VucyBpbiB0aGUgcmVtYWluaW5nIHRva2VucwogIHdoaWxlICghdG9rZW4uaXNFb2YpIHsKICAgIGlmICh0b2tlbiBpcyBFcnJvclRva2VuKSB7CiAgICAgIGZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCAzOyArK2NvdW50KSB7CiAgICAgICAgdmFyIHByZXZpb3VzID0gdG9rZW4ucHJldmlvdXM7CiAgICAgICAgaWYgKHByZXZpb3VzLmlzRW9mKSBicmVhazsKICAgICAgICB0b2tlbiA9IHByZXZpb3VzOwogICAgICB9CiAgICAgIHZhciBtc2cgPSBuZXcgU3RyaW5nQnVmZmVyKAogICAgICAgICAgIkludGVybmFsIGVycm9yOiBBbGwgZXJyb3IgdG9rZW5zIHNob3VsZCBoYXZlIGJlZW4gcHJlcGVuZGVkOiIpOwogICAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgNzsgKytjb3VudCkgewogICAgICAgIGlmICh0b2tlbi5pc0VvZikgYnJlYWs7CiAgICAgICAgbXNnLndyaXRlKCcgJHt0b2tlbi5ydW50aW1lVHlwZX0sJyk7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIHRocm93IG1zZy50b1N0cmluZygpOwogICAgfQogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogIH0KCiAgcmV0dXJuIHRva2VuczsKfQoKVG9rZW4gc3ludGhlc2l6ZVRva2VuKGludCBjaGFyT2Zmc2V0LCBTdHJpbmcgdmFsdWUsIFRva2VuVHlwZSB0eXBlKSB7CiAgcmV0dXJuIG5ldyBTdHJpbmdUb2tlbi5mcm9tU3RyaW5nKHR5cGUsIHZhbHVlLCBjaGFyT2Zmc2V0KTsKfQoKVG9rZW4gc2tpcFRvRW9mKFRva2VuIHRva2VuKSB7CiAgd2hpbGUgKCF0b2tlbi5pc0VvZikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogIH0KICByZXR1cm4gdG9rZW47Cn0KClN0cmluZyBjbG9zZUJyYWNlRm9yKFN0cmluZyBvcGVuQnJhY2UpIHsKICByZXR1cm4gY29uc3QgewogICAgJygnOiAnKScsCiAgICAnWyc6ICddJywKICAgICd7JzogJ30nLAogICAgJzwnOiAnPicsCiAgICByJyR7JzogJ30nLAogICAgJz8uWyc6ICddJywKICB9W29wZW5CcmFjZV07Cn0KClN0cmluZyBjbG9zZVF1b3RlRm9yKFN0cmluZyBvcGVuUXVvdGUpIHsKICByZXR1cm4gY29uc3QgewogICAgJyInOiAnIicsCiAgICAiJyI6ICInIiwKICAgICciIiInOiAnIiIiJywKICAgICInJyciOiAiJycnIiwKICAgICdyIic6ICciJywKICAgICJyJyI6ICInIiwKICAgICdyIiIiJzogJyIiIicsCiAgICAicicnJyI6ICInJyciLAogIH1bb3BlblF1b3RlXTsKfQpYAE5OPAEfATIBLgEmASsBSkxLCk03AUgBJhYgGAQBNBkfMCcjGggiSzAgLRwIHAYYBAERAgFGPgIBHxkYBBACASkRDg4ODhAQEAIBKREODhISDw8TExACATBwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9yZWNvdmVyLmRhcnQ9c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIvZXJyb3JfdG9rZW4uZGFydJmpLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydF9zY2FubmVyLmVycm9yX3Rva2VuOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgQmVnaW5Ub2tlbiwgU2ltcGxlVG9rZW4sIFRva2VuVHlwZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBDb2RlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUVuY29kaW5nLAogICAgICAgIHRlbXBsYXRlQXNjaWlDb250cm9sQ2hhcmFjdGVyLAogICAgICAgIHRlbXBsYXRlTm9uQXNjaWlJZGVudGlmaWVyLAogICAgICAgIHRlbXBsYXRlTm9uQXNjaWlXaGl0ZXNwYWNlLAogICAgICAgIHRlbXBsYXRlVW5tYXRjaGVkVG9rZW4sCiAgICAgICAgdGVtcGxhdGVVbnN1cHBvcnRlZE9wZXJhdG9yLAogICAgICAgIHRlbXBsYXRlVW50ZXJtaW5hdGVkU3RyaW5nOwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnIHNob3cgVG9rZW4sIHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKCmltcG9ydCAnLi4vc2Nhbm5lci9yZWNvdmVyLmRhcnQnIHNob3cgY2xvc2VCcmFjZUZvciwgY2xvc2VRdW90ZUZvcjsKCkVycm9yVG9rZW4gYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyVG9rZW4oaW50IGNoYXJhY3RlciwgaW50IGNoYXJPZmZzZXQpIHsKICBpZiAoY2hhcmFjdGVyIDwgMHgxZikgewogICAgcmV0dXJuIG5ldyBBc2NpaUNvbnRyb2xDaGFyYWN0ZXJUb2tlbihjaGFyYWN0ZXIsIGNoYXJPZmZzZXQpOwogIH0KICBzd2l0Y2ggKGNoYXJhY3RlcikgewogICAgY2FzZSB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI6CiAgICAgIHJldHVybiBuZXcgRW5jb2RpbmdFcnJvclRva2VuKGNoYXJPZmZzZXQpOwoKICAgIC8vLyBTZWUgW0dlbmVyYWwgUHVuY3R1YXRpb25dCiAgICAvLy8gKGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2hhcnRzL1BERi9VMjAwMC5wZGYpLgogICAgY2FzZSAweDAwQTA6IC8vIE5vLWJyZWFrIHNwYWNlLgogICAgY2FzZSAweDE2ODA6IC8vIE9naGFtIHNwYWNlIG1hcmsuCiAgICBjYXNlIDB4MTgwRTogLy8gTW9uZ29saWFuIHZvd2VsIHNlcGFyYXRvci4KICAgIGNhc2UgMHgyMDAwOiAvLyBFbiBxdWFkLgogICAgY2FzZSAweDIwMDE6IC8vIEVtIHF1YWQuCiAgICBjYXNlIDB4MjAwMjogLy8gRW4gc3BhY2UuCiAgICBjYXNlIDB4MjAwMzogLy8gRW0gc3BhY2UuCiAgICBjYXNlIDB4MjAwNDogLy8gVGhyZWUtcGVyLWVtIHNwYWNlLgogICAgY2FzZSAweDIwMDU6IC8vIEZvdXItcGVyLWVtIHNwYWNlLgogICAgY2FzZSAweDIwMDY6IC8vIFNpeC1wZXItZW0gc3BhY2UuCiAgICBjYXNlIDB4MjAwNzogLy8gRmlndXJlIHNwYWNlLgogICAgY2FzZSAweDIwMDg6IC8vIFB1bmN0dWF0aW9uIHNwYWNlLgogICAgY2FzZSAweDIwMDk6IC8vIFRoaW4gc3BhY2UuCiAgICBjYXNlIDB4MjAwQTogLy8gSGFpciBzcGFjZS4KICAgIGNhc2UgMHgyMDBCOiAvLyBaZXJvIHdpZHRoIHNwYWNlLgogICAgY2FzZSAweDIwMjg6IC8vIExpbmUgc2VwYXJhdG9yLgogICAgY2FzZSAweDIwMjk6IC8vIFBhcmFncmFwaCBzZXBhcmF0b3IuCiAgICBjYXNlIDB4MjAyRjogLy8gTmFycm93IG5vLWJyZWFrIHNwYWNlLgogICAgY2FzZSAweDIwNUY6IC8vIE1lZGl1bSBtYXRoZW1hdGljYWwgc3BhY2UuCiAgICBjYXNlIDB4MzAwMDogLy8gSWRlb2dyYXBoaWMgc3BhY2UuCiAgICBjYXNlIDB4RkVGRjogLy8gWmVybyB3aWR0aCBuby1icmVhayBzcGFjZS4KICAgICAgcmV0dXJuIG5ldyBOb25Bc2NpaVdoaXRlc3BhY2VUb2tlbihjaGFyYWN0ZXIsIGNoYXJPZmZzZXQpOwoKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBuZXcgTm9uQXNjaWlJZGVudGlmaWVyVG9rZW4oY2hhcmFjdGVyLCBjaGFyT2Zmc2V0KTsKICB9Cn0KCi8vLyBDb21tb24gc3VwZXJjbGFzcyBmb3IgYWxsIGVycm9yIHRva2Vucy4KLy8vCi8vLyBJdCdzIGNvbnNpZGVyZWQgYW4gaW1wbGVtZW50YXRpb24gZXJyb3IgdG8gYWNjZXNzIFtsZXhlbWVdIG9mIGFuCi8vLyBbRXJyb3JUb2tlbl0uCmFic3RyYWN0IGNsYXNzIEVycm9yVG9rZW4gZXh0ZW5kcyBTaW1wbGVUb2tlbiB7CiAgRXJyb3JUb2tlbihpbnQgb2Zmc2V0KSA6IHN1cGVyKFRva2VuVHlwZS5CQURfSU5QVVQsIG9mZnNldCwgbnVsbCk7CgogIC8vLyBUaGlzIGlzIGEgdG9rZW4gdGhhdCB3cmFwcyBhcm91bmQgYW4gZXJyb3IgbWVzc2FnZS4gUmV0dXJuIDEKICAvLy8gaW5zdGVhZCBvZiB0aGUgc2l6ZSBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBlcnJvciBtZXNzYWdlLgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IDE7CgogIFN0cmluZyBnZXQgbGV4ZW1lIHsKICAgIHZhciBlcnJvck1zZyA9IGFzc2VydGlvbk1lc3NhZ2UubWVzc2FnZTsKCiAgICAvLyBBdHRlbXB0IHRvIGluY2x1ZGUgdGhlIGxvY2F0aW9uIHdoaWNoIGlzIGNhbGxpbmcgdGhlIHBhcnNlcgogICAgLy8gaW4gYW4gZWZmb3J0IHRvIGRlYnVnIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zNzUyOAogICAgdmFyIHBhdHRlcm4gPSBSZWdFeHAoJ14jWzAtOV0qICpQYXJzZXInKTsKICAgIHZhciB0cmFjZUxpbmVzID0gU3RhY2tUcmFjZS5jdXJyZW50LnRvU3RyaW5nKCkuc3BsaXQoJ1xuJyk7CiAgICBmb3IgKGludCBpbmRleCA9IHRyYWNlTGluZXMubGVuZ3RoIC0gMjsgaW5kZXggPj0gMDsgLS1pbmRleCkgewogICAgICB2YXIgbGluZSA9IHRyYWNlTGluZXNbaW5kZXhdOwogICAgICBpZiAobGluZS5zdGFydHNXaXRoKHBhdHRlcm4pKSB7CiAgICAgICAgZXJyb3JNc2cgPSAnJGVycm9yTXNnIC0gJHt0cmFjZUxpbmVzW2luZGV4ICsgMV19JzsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIHRocm93IGVycm9yTXNnOwogIH0KCiAgTWVzc2FnZSBnZXQgYXNzZXJ0aW9uTWVzc2FnZTsKCiAgQ29kZTxkeW5hbWljPiBnZXQgZXJyb3JDb2RlID0+IGFzc2VydGlvbk1lc3NhZ2UuY29kZTsKCiAgaW50IGdldCBjaGFyYWN0ZXIgPT4gbnVsbDsKCiAgU3RyaW5nIGdldCBzdGFydCA9PiBudWxsOwoKICBpbnQgZ2V0IGVuZE9mZnNldCA9PiBudWxsOwoKICBCZWdpblRva2VuIGdldCBiZWdpbiA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgewogICAgdGhyb3cgJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7CiAgfQp9CgovLy8gUmVwcmVzZW50cyBhbiBlbmNvZGluZyBlcnJvci4KY2xhc3MgRW5jb2RpbmdFcnJvclRva2VuIGV4dGVuZHMgRXJyb3JUb2tlbiB7CiAgRW5jb2RpbmdFcnJvclRva2VuKGludCBjaGFyT2Zmc2V0KSA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRW5jb2RpbmdFcnJvclRva2VuKCkiOwoKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+IG1lc3NhZ2VFbmNvZGluZzsKfQoKLy8vIFJlcHJlc2VudHMgYSBub24tQVNDSUkgY2hhcmFjdGVyIG91dHNpZGUgYSBzdHJpbmcgb3IgY29tbWVudC4KY2xhc3MgTm9uQXNjaWlJZGVudGlmaWVyVG9rZW4gZXh0ZW5kcyBFcnJvclRva2VuIHsKICBmaW5hbCBpbnQgY2hhcmFjdGVyOwoKICBOb25Bc2NpaUlkZW50aWZpZXJUb2tlbih0aGlzLmNoYXJhY3RlciwgaW50IGNoYXJPZmZzZXQpIDogc3VwZXIoY2hhck9mZnNldCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJOb25Bc2NpaUlkZW50aWZpZXJUb2tlbigkY2hhcmFjdGVyKSI7CgogIE1lc3NhZ2UgZ2V0IGFzc2VydGlvbk1lc3NhZ2UgPT4gdGVtcGxhdGVOb25Bc2NpaUlkZW50aWZpZXIud2l0aEFyZ3VtZW50cygKICAgICAgbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKFtjaGFyYWN0ZXJdKSwgY2hhcmFjdGVyKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBub24tQVNDSUkgd2hpdGVzcGFjZSBvdXRzaWRlIGEgc3RyaW5nIG9yIGNvbW1lbnQuCmNsYXNzIE5vbkFzY2lpV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgRXJyb3JUb2tlbiB7CiAgZmluYWwgaW50IGNoYXJhY3RlcjsKCiAgTm9uQXNjaWlXaGl0ZXNwYWNlVG9rZW4odGhpcy5jaGFyYWN0ZXIsIGludCBjaGFyT2Zmc2V0KSA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiTm9uQXNjaWlXaGl0ZXNwYWNlVG9rZW4oJGNoYXJhY3RlcikiOwoKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+CiAgICAgIHRlbXBsYXRlTm9uQXNjaWlXaGl0ZXNwYWNlLndpdGhBcmd1bWVudHMoY2hhcmFjdGVyKTsKfQoKLy8vIFJlcHJlc2VudHMgYW4gQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgb3V0c2lkZSBhIHN0cmluZyBvciBjb21tZW50LgpjbGFzcyBBc2NpaUNvbnRyb2xDaGFyYWN0ZXJUb2tlbiBleHRlbmRzIEVycm9yVG9rZW4gewogIGZpbmFsIGludCBjaGFyYWN0ZXI7CgogIEFzY2lpQ29udHJvbENoYXJhY3RlclRva2VuKHRoaXMuY2hhcmFjdGVyLCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlcihjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkFzY2lpQ29udHJvbENoYXJhY3RlclRva2VuKCRjaGFyYWN0ZXIpIjsKCiAgTWVzc2FnZSBnZXQgYXNzZXJ0aW9uTWVzc2FnZSA9PgogICAgICB0ZW1wbGF0ZUFzY2lpQ29udHJvbENoYXJhY3Rlci53aXRoQXJndW1lbnRzKGNoYXJhY3Rlcik7Cn0KCi8vLyBEZW5vdGVzIGFuIG9wZXJhdG9yIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgRGFydCBsYW5ndWFnZS4KY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRvciBleHRlbmRzIEVycm9yVG9rZW4gewogIFRva2VuIHRva2VuOwoKICBVbnN1cHBvcnRlZE9wZXJhdG9yKHRoaXMudG9rZW4sIGludCBjaGFyT2Zmc2V0KSA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+CiAgICAgIHRlbXBsYXRlVW5zdXBwb3J0ZWRPcGVyYXRvci53aXRoQXJndW1lbnRzKHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlVuc3VwcG9ydGVkT3BlcmF0b3IoJHt0b2tlbi5sZXhlbWV9KSI7Cn0KCi8vLyBSZXByZXNlbnRzIGFuIHVudGVybWluYXRlZCBzdHJpbmcuCmNsYXNzIFVudGVybWluYXRlZFN0cmluZyBleHRlbmRzIEVycm9yVG9rZW4gewogIGZpbmFsIFN0cmluZyBzdGFydDsKICBmaW5hbCBpbnQgZW5kT2Zmc2V0OwoKICBVbnRlcm1pbmF0ZWRTdHJpbmcodGhpcy5zdGFydCwgaW50IGNoYXJPZmZzZXQsIHRoaXMuZW5kT2Zmc2V0KQogICAgICA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVW50ZXJtaW5hdGVkU3RyaW5nKCRzdGFydCkiOwoKICBpbnQgZ2V0IGNoYXJDb3VudCA9PiBlbmRPZmZzZXQgLSBjaGFyT2Zmc2V0OwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBjaGFyQ291bnQ7CgogIE1lc3NhZ2UgZ2V0IGFzc2VydGlvbk1lc3NhZ2UgPT4KICAgICAgdGVtcGxhdGVVbnRlcm1pbmF0ZWRTdHJpbmcud2l0aEFyZ3VtZW50cyhzdGFydCwgY2xvc2VRdW90ZUZvcihzdGFydCkpOwp9CgovLy8gUmVwcmVzZW50cyBhbiB1bnRlcm1pbmF0ZWQgdG9rZW4uCmNsYXNzIFVudGVybWluYXRlZFRva2VuIGV4dGVuZHMgRXJyb3JUb2tlbiB7CiAgZmluYWwgTWVzc2FnZSBhc3NlcnRpb25NZXNzYWdlOwogIGZpbmFsIGludCBlbmRPZmZzZXQ7CgogIFVudGVybWluYXRlZFRva2VuKHRoaXMuYXNzZXJ0aW9uTWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIHRoaXMuZW5kT2Zmc2V0KQogICAgICA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVW50ZXJtaW5hdGVkVG9rZW4oJHthc3NlcnRpb25NZXNzYWdlLmNvZGUubmFtZX0pIjsKCiAgaW50IGdldCBjaGFyQ291bnQgPT4gZW5kT2Zmc2V0IC0gY2hhck9mZnNldDsKfQoKLy8vIFJlcHJlc2VudHMgYW4gb3BlbiBicmFjZSB3aXRob3V0IGEgbWF0Y2hpbmcgY2xvc2UgYnJhY2UuCi8vLwovLy8gSW4gdGhpcyBjYXNlLCBicmFjZSBtZWFucyBhbnkgb2YgYChgLCBge2AsIGBbYCwgYW5kIGA8YCwgcGFyZW50aGVzaXMsIGN1cmx5Ci8vLyBicmFjZSwgc3F1YXJlIGJyYWNlLCBhbmQgYW5nbGUgYnJhY2UsIHJlc3BlY3RpdmVseS4KY2xhc3MgVW5tYXRjaGVkVG9rZW4gZXh0ZW5kcyBFcnJvclRva2VuIHsKICBmaW5hbCBCZWdpblRva2VuIGJlZ2luOwoKICBVbm1hdGNoZWRUb2tlbihCZWdpblRva2VuIGJlZ2luKQogICAgICA6IHRoaXMuYmVnaW4gPSBiZWdpbiwKICAgICAgICBzdXBlcihiZWdpbi5jaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlVubWF0Y2hlZFRva2VuKCR7YmVnaW4ubGV4ZW1lfSkiOwoKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+CiAgICAgIHRlbXBsYXRlVW5tYXRjaGVkVG9rZW4ud2l0aEFyZ3VtZW50cyhjbG9zZUJyYWNlRm9yKGJlZ2luLmxleGVtZSksIGJlZ2luKTsKfQqA2wBOTjwBIgFLAR0JDhEZJyQkICUkAUIBRAFKGkIEFyYxASI3JCYvHR0eHignJiInICAmJCkrLycvQQENQQQCASwERRIwRQFDPgwXARYtAUNLLkBDJCY7DwgGARQEASABOAEdARwBHQEgAQwRIwQCASIuOgEvATMCAUIzFwFPAT4BTDkCAUMzFwFPAT4BIjsCAUc2FwE9GwFBASI+AgFELw8BRwEMIjgBDD8CAScuFhcBQRsBNQEvAR8BIk0CASYtIhcBSxsBSwEvAgE9BFA4KhoBIxwhAToBIlACATRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9lcnJvcl90b2tlbi5kYXJ0QXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0j4kvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zY2FubmVyLnRva2VuX2NvbnN0YW50czsKCmltcG9ydCAnY2hhcmFjdGVycy5kYXJ0JzsKCmNvbnN0IGludCBFT0ZfVE9LRU4gPSAwOwoKY29uc3QgaW50IEtFWVdPUkRfVE9LRU4gPSAkazsKY29uc3QgaW50IElERU5USUZJRVJfVE9LRU4gPSAkYTsKY29uc3QgaW50IFNDUklQVF9UT0tFTiA9ICRiOwpjb25zdCBpbnQgQkFEX0lOUFVUX1RPS0VOID0gJFg7CmNvbnN0IGludCBET1VCTEVfVE9LRU4gPSAkZDsKY29uc3QgaW50IElOVF9UT0tFTiA9ICRpOwpjb25zdCBpbnQgUkVDT1ZFUllfVE9LRU4gPSAkcjsKY29uc3QgaW50IEhFWEFERUNJTUFMX1RPS0VOID0gJHg7CmNvbnN0IGludCBTVFJJTkdfVE9LRU4gPSAkU1E7Cgpjb25zdCBpbnQgQU1QRVJTQU5EX1RPS0VOID0gJEFNUEVSU0FORDsKY29uc3QgaW50IEJBQ0tQSU5HX1RPS0VOID0gJEJBQ0tQSU5HOwpjb25zdCBpbnQgQkFDS1NMQVNIX1RPS0VOID0gJEJBQ0tTTEFTSDsKY29uc3QgaW50IEJBTkdfVE9LRU4gPSAkQkFORzsKY29uc3QgaW50IEJBUl9UT0tFTiA9ICRCQVI7CmNvbnN0IGludCBDT0xPTl9UT0tFTiA9ICRDT0xPTjsKY29uc3QgaW50IENPTU1BX1RPS0VOID0gJENPTU1BOwpjb25zdCBpbnQgRVFfVE9LRU4gPSAkRVE7CmNvbnN0IGludCBHVF9UT0tFTiA9ICRHVDsKY29uc3QgaW50IEhBU0hfVE9LRU4gPSAkSEFTSDsKY29uc3QgaW50IE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTiA9ICRPUEVOX0NVUkxZX0JSQUNLRVQ7CmNvbnN0IGludCBPUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOID0gJE9QRU5fU1FVQVJFX0JSQUNLRVQ7CmNvbnN0IGludCBPUEVOX1BBUkVOX1RPS0VOID0gJE9QRU5fUEFSRU47CmNvbnN0IGludCBMVF9UT0tFTiA9ICRMVDsKY29uc3QgaW50IE1JTlVTX1RPS0VOID0gJE1JTlVTOwpjb25zdCBpbnQgUEVSSU9EX1RPS0VOID0gJFBFUklPRDsKY29uc3QgaW50IFBMVVNfVE9LRU4gPSAkUExVUzsKY29uc3QgaW50IFFVRVNUSU9OX1RPS0VOID0gJFFVRVNUSU9OOwpjb25zdCBpbnQgQVRfVE9LRU4gPSAkQVQ7CmNvbnN0IGludCBDTE9TRV9DVVJMWV9CUkFDS0VUX1RPS0VOID0gJENMT1NFX0NVUkxZX0JSQUNLRVQ7CmNvbnN0IGludCBDTE9TRV9TUVVBUkVfQlJBQ0tFVF9UT0tFTiA9ICRDTE9TRV9TUVVBUkVfQlJBQ0tFVDsKY29uc3QgaW50IENMT1NFX1BBUkVOX1RPS0VOID0gJENMT1NFX1BBUkVOOwpjb25zdCBpbnQgU0VNSUNPTE9OX1RPS0VOID0gJFNFTUlDT0xPTjsKY29uc3QgaW50IFNMQVNIX1RPS0VOID0gJFNMQVNIOwpjb25zdCBpbnQgVElMREVfVE9LRU4gPSAkVElMREU7CmNvbnN0IGludCBTVEFSX1RPS0VOID0gJFNUQVI7CmNvbnN0IGludCBQRVJDRU5UX1RPS0VOID0gJFBFUkNFTlQ7CmNvbnN0IGludCBDQVJFVF9UT0tFTiA9ICRDQVJFVDsKCmNvbnN0IGludCBTVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTiA9IDEyODsKY29uc3QgaW50IExUX0VRX1RPS0VOID0gU1RSSU5HX0lOVEVSUE9MQVRJT05fVE9LRU4gKyAxOwpjb25zdCBpbnQgRlVOQ1RJT05fVE9LRU4gPSBMVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBTTEFTSF9FUV9UT0tFTiA9IEZVTkNUSU9OX1RPS0VOICsgMTsKY29uc3QgaW50IFBFUklPRF9QRVJJT0RfUEVSSU9EX1RPS0VOID0gU0xBU0hfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgUEVSSU9EX1BFUklPRF9UT0tFTiA9IFBFUklPRF9QRVJJT0RfUEVSSU9EX1RPS0VOICsgMTsKY29uc3QgaW50IEVRX0VRX0VRX1RPS0VOID0gUEVSSU9EX1BFUklPRF9UT0tFTiArIDE7CmNvbnN0IGludCBFUV9FUV9UT0tFTiA9IEVRX0VRX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IExUX0xUX0VRX1RPS0VOID0gRVFfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgTFRfTFRfVE9LRU4gPSBMVF9MVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBHVF9FUV9UT0tFTiA9IExUX0xUX1RPS0VOICsgMTsKY29uc3QgaW50IEdUX0dUX0VRX1RPS0VOID0gR1RfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgSU5ERVhfRVFfVE9LRU4gPSBHVF9HVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBJTkRFWF9UT0tFTiA9IElOREVYX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IEJBTkdfRVFfRVFfVE9LRU4gPSBJTkRFWF9UT0tFTiArIDE7CmNvbnN0IGludCBCQU5HX0VRX1RPS0VOID0gQkFOR19FUV9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBBTVBFUlNBTkRfQU1QRVJTQU5EX1RPS0VOID0gQkFOR19FUV9UT0tFTiArIDE7CmNvbnN0IGludCBBTVBFUlNBTkRfQU1QRVJTQU5EX0VRX1RPS0VOID0gQU1QRVJTQU5EX0FNUEVSU0FORF9UT0tFTiArIDE7CmNvbnN0IGludCBBTVBFUlNBTkRfRVFfVE9LRU4gPSBBTVBFUlNBTkRfQU1QRVJTQU5EX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IEJBUl9CQVJfVE9LRU4gPSBBTVBFUlNBTkRfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgQkFSX0JBUl9FUV9UT0tFTiA9IEJBUl9CQVJfVE9LRU4gKyAxOwpjb25zdCBpbnQgQkFSX0VRX1RPS0VOID0gQkFSX0JBUl9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBTVEFSX0VRX1RPS0VOID0gQkFSX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IFBMVVNfUExVU19UT0tFTiA9IFNUQVJfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgUExVU19FUV9UT0tFTiA9IFBMVVNfUExVU19UT0tFTiArIDE7CmNvbnN0IGludCBNSU5VU19NSU5VU19UT0tFTiA9IFBMVVNfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgTUlOVVNfRVFfVE9LRU4gPSBNSU5VU19NSU5VU19UT0tFTiArIDE7CmNvbnN0IGludCBUSUxERV9TTEFTSF9FUV9UT0tFTiA9IE1JTlVTX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IFRJTERFX1NMQVNIX1RPS0VOID0gVElMREVfU0xBU0hfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgUEVSQ0VOVF9FUV9UT0tFTiA9IFRJTERFX1NMQVNIX1RPS0VOICsgMTsKY29uc3QgaW50IEdUX0dUX1RPS0VOID0gUEVSQ0VOVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBDQVJFVF9FUV9UT0tFTiA9IEdUX0dUX1RPS0VOICsgMTsKY29uc3QgaW50IENPTU1FTlRfVE9LRU4gPSBDQVJFVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBTVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSX1RPS0VOID0gQ09NTUVOVF9UT0tFTiArIDE7CmNvbnN0IGludCBRVUVTVElPTl9QRVJJT0RfVE9LRU4gPSBTVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSX1RPS0VOICsgMTsKY29uc3QgaW50IFFVRVNUSU9OX1FVRVNUSU9OX1RPS0VOID0gUVVFU1RJT05fUEVSSU9EX1RPS0VOICsgMTsKY29uc3QgaW50IFFVRVNUSU9OX1FVRVNUSU9OX0VRX1RPS0VOID0gUVVFU1RJT05fUVVFU1RJT05fVE9LRU4gKyAxOwpjb25zdCBpbnQgR0VORVJJQ19NRVRIT0RfVFlQRV9BU1NJR05fVE9LRU4gPSBRVUVTVElPTl9RVUVTVElPTl9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBHRU5FUklDX01FVEhPRF9UWVBFX0xJU1RfVE9LRU4gPSBHRU5FUklDX01FVEhPRF9UWVBFX0FTU0lHTl9UT0tFTiArIDE7CmNvbnN0IGludCBHVF9HVF9HVF9UT0tFTiA9IEdFTkVSSUNfTUVUSE9EX1RZUEVfTElTVF9UT0tFTiArIDE7CmNvbnN0IGludCBQRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTl9UT0tFTiA9IEdUX0dUX0dUX1RPS0VOICsgMTsKY29uc3QgaW50IEdUX0dUX0dUX0VRX1RPS0VOID0gUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT05fVE9LRU4gKyAxOwpjb25zdCBpbnQgUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4gPSBHVF9HVF9HVF9FUV9UT0tFTiArIDE7Cl4ATk48AScBGgEZAR4hHSAdGh8iHgEoJigeHCAgGhoeOjwqGiAiHiYaPD4sKCAgHiQgASw4LC87QDQsLCwpLC8sLjA5SEEyMC8sLy8xMjU4NC4sLkVNP0RNUT9ER00BOHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0PXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvYm9keV9idWlsZGVyLmRhcnTAAxOzLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuYm9keV9idWlsZGVyOwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJy4uL2J1aWxkZXIvZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAnLi4vY29uc3RhbnRfY29udGV4dC5kYXJ0JyBzaG93IENvbnN0YW50Q29udGV4dDsKCmltcG9ydCAnLi4vZGlsbC9kaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgYXMgZmFzdGE7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTG9jYXRlZE1lc3NhZ2UsIE1lc3NhZ2UsIG5vTGVuZ3RoLCBUZW1wbGF0ZTsKCmltcG9ydCAnLi4vbWVzc2FnZXMuZGFydCcgYXMgbWVzc2FnZXMgc2hvdyBnZXRMb2NhdGlvbkZyb21Vcmk7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnCiAgICBzaG93IE1vZGlmaWVyLCBjb25zdE1hc2ssIGNvdmFyaWFudE1hc2ssIGZpbmFsTWFzaywgbGF0ZU1hc2s7CgppbXBvcnQgJy4uL25hbWVzLmRhcnQnCiAgICBzaG93IGNhbGxOYW1lLCBlbXB0eU5hbWUsIGluZGV4R2V0TmFtZSwgaW5kZXhTZXROYW1lLCBtaW51c05hbWUsIHBsdXNOYW1lOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcKICAgIHNob3cKICAgICAgICBBc3NlcnQsCiAgICAgICAgUGFyc2VyLAogICAgICAgIEZvcm1hbFBhcmFtZXRlcktpbmQsCiAgICAgICAgSWRlbnRpZmllckNvbnRleHQsCiAgICAgICAgTWVtYmVyS2luZCwKICAgICAgICBsZW5ndGhGb3JUb2tlbiwKICAgICAgICBsZW5ndGhPZlNwYW4sCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4sCiAgICAgICAgb3B0aW9uYWw7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnCiAgICBzaG93IGludGVybmFsUHJvYmxlbSwgdW5leHBlY3RlZCwgdW5oYW5kbGVkLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vcXVvdGUuZGFydCcKICAgIHNob3cKICAgICAgICBRdW90ZSwKICAgICAgICBhbmFseXplUXVvdGUsCiAgICAgICAgdW5lc2NhcGUsCiAgICAgICAgdW5lc2NhcGVGaXJzdFN0cmluZ1BhcnQsCiAgICAgICAgdW5lc2NhcGVMYXN0U3RyaW5nUGFydCwKICAgICAgICB1bmVzY2FwZVN0cmluZzsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuLmRhcnQnCiAgICBzaG93IGlzQmluYXJ5T3BlcmF0b3IsIGlzTWludXNPcGVyYXRvciwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I7CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgUHJvYmxlbUJ1aWxkZXI7CgppbXBvcnQgJy4uL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJy4uL3NvdXJjZS9zY29wZV9saXN0ZW5lci5kYXJ0JwogICAgc2hvdwogICAgICAgIEZpeGVkTnVsbGFibGVMaXN0LAogICAgICAgIEdyb3dhYmxlTGlzdCwKICAgICAgICBKdW1wVGFyZ2V0S2luZCwKICAgICAgICBOdWxsVmFsdWUsCiAgICAgICAgUGFyc2VyUmVjb3ZlcnksCiAgICAgICAgU2NvcGVMaXN0ZW5lcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3ZhbHVlX2tpbmRzLmRhcnQnOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQnIHNob3cgVHlwZUluZmVycmVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3Byb21vdGlvbi5kYXJ0JwogICAgc2hvdyBUeXBlUHJvbW90ZXIsIFR5cGVQcm9tb3Rpb25GYWN0LCBUeXBlUHJvbW90aW9uU2NvcGU7CgppbXBvcnQgJ2NvbGxlY3Rpb25zLmRhcnQnCiAgICBzaG93CiAgICAgICAgU3ByZWFkRWxlbWVudCwKICAgICAgICBTcHJlYWRNYXBFbnRyeSwKICAgICAgICBjb252ZXJ0VG9NYXBFbnRyeSwKICAgICAgICBpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeTsKCmltcG9ydCAnY29uc3RuZXNzLmRhcnQnIHNob3cgQ29uc3RuZXNzOwoKaW1wb3J0ICdleHByZXNzaW9uX2dlbmVyYXRvci5kYXJ0JwogICAgc2hvdwogICAgICAgIERlbGF5ZWRBc3NpZ25tZW50LAogICAgICAgIERlbGF5ZWRQb3N0Zml4SW5jcmVtZW50LAogICAgICAgIEdlbmVyYXRvciwKICAgICAgICBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IsCiAgICAgICAgSW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yLAogICAgICAgIEluY29tcGxldGVTZW5kR2VuZXJhdG9yLAogICAgICAgIEluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IsCiAgICAgICAgTG9hZExpYnJhcnlHZW5lcmF0b3IsCiAgICAgICAgUGFyZW50aGVzaXplZEV4cHJlc3Npb25HZW5lcmF0b3IsCiAgICAgICAgUGFyc2VyRXJyb3JHZW5lcmF0b3IsCiAgICAgICAgUHJlZml4VXNlR2VuZXJhdG9yLAogICAgICAgIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yLAogICAgICAgIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yLAogICAgICAgIFNlbmRBY2Nlc3NHZW5lcmF0b3IsCiAgICAgICAgU3RhdGljQWNjZXNzR2VuZXJhdG9yLAogICAgICAgIFN1cGVySW5kZXhlZEFjY2Vzc0dlbmVyYXRvciwKICAgICAgICBUaGlzQWNjZXNzR2VuZXJhdG9yLAogICAgICAgIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciwKICAgICAgICBUeXBlVXNlR2VuZXJhdG9yLAogICAgICAgIFVubGlua2VkR2VuZXJhdG9yLAogICAgICAgIFVucmVzb2x2ZWROYW1lR2VuZXJhdG9yLAogICAgICAgIFZhcmlhYmxlVXNlR2VuZXJhdG9yLAogICAgICAgIGJ1aWxkSXNOdWxsOwoKaW1wb3J0ICdleHByZXNzaW9uX2dlbmVyYXRvcl9oZWxwZXIuZGFydCcgc2hvdyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyOwoKaW1wb3J0ICdmb3Jlc3QuZGFydCcgc2hvdyBGb3Jlc3Q7CgppbXBvcnQgJ2ltcGxpY2l0X3R5cGVfYXJndW1lbnQuZGFydCcgc2hvdyBJbXBsaWNpdFR5cGVBcmd1bWVudDsKCmltcG9ydCAna2VybmVsX3NoYWRvd19hc3QuZGFydCcgYXMgc2hhZG93CiAgICBzaG93IFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCwgU3ludGhldGljV3JhcHBlcjsKCmltcG9ydCAncmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnQnCiAgICBzaG93CiAgICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSwKICAgICAgICBSZWRpcmVjdGlvblRhcmdldCwKICAgICAgICBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LAogICAgICAgIGdldFJlZGlyZWN0aW9uVGFyZ2V0LAogICAgICAgIGlzUmVkaXJlY3RpbmdGYWN0b3J5OwoKaW1wb3J0ICd0eXBlX2FsZ29yaXRobXMuZGFydCcgc2hvdyBjYWxjdWxhdGVCb3VuZHM7CgppbXBvcnQgJ2tlcm5lbF9hcGkuZGFydCc7CgppbXBvcnQgJ2tlcm5lbF9hc3RfYXBpLmRhcnQnOwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JzsKCi8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMgYW5kIGVuc3VyZSBhbGwgbm9kZXMgaGF2ZSBhIGxvY2F0aW9uLgpjb25zdCBub0xvY2F0aW9uID0gbnVsbDsKCi8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBvbmNlIGNvbnRyb2wgZmxvdyBhbmQgc3ByZWFkIGNvbGxlY3Rpb24gc3VwcG9ydAovLyBoYXMgYmVlbiBlbmFibGVkIGJ5IGRlZmF1bHQuCmNvbnN0IGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCA9IGNvbnN0IE9iamVjdCgpOwoKY2xhc3MgQm9keUJ1aWxkZXIgZXh0ZW5kcyBTY29wZUxpc3RlbmVyPEp1bXBUYXJnZXQ+CiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIsIEVuc3VyZUxvYWRlZCB7CiAgZmluYWwgRm9yZXN0IGZvcmVzdDsKCiAgLy8gVE9ETyhhaGUpOiBSZW5hbWUgW2xpYnJhcnldIHRvICdwYXJ0Jy4KICBAb3ZlcnJpZGUKICBmaW5hbCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5OwoKICBmaW5hbCBNb2RpZmllckJ1aWxkZXIgbWVtYmVyOwoKICAvLy8gVGhlIGNsYXNzLCBtaXhpbiBvciBleHRlbnNpb24gZGVjbGFyYXRpb24gaW4gd2hpY2ggW21lbWJlcl0gaXMgZGVjbGFyZWQsCiAgLy8vIGlmIGFueS4KICBmaW5hbCBEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb25CdWlsZGVyOwoKICAvLy8gVGhlIGNsYXNzIG9yIG1peGluIGRlY2xhcmF0aW9uIGluIHdoaWNoIFttZW1iZXJdIGlzIGRlY2xhcmVkLCBpZiBhbnkuCiAgZmluYWwgQ2xhc3NCdWlsZGVyIGNsYXNzQnVpbGRlcjsKCiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBDb3JlVHlwZXMgY29yZVR5cGVzOwoKICBmaW5hbCBib29sIGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlcjsKCiAgZmluYWwgU2NvcGUgZW5jbG9zaW5nU2NvcGU7CgogIGZpbmFsIGJvb2wgZW5hYmxlTmF0aXZlOwoKICBmaW5hbCBib29sIHN0cmluZ0V4cGVjdGVkQWZ0ZXJOYXRpdmU7CgogIC8vLyBXaGV0aGVyIHRvIGlnbm9yZSBhbiB1bnJlc29sdmVkIHJlZmVyZW5jZSB0byBgbWFpbmAgd2l0aGluIHRoZSBib2R5IG9mCiAgLy8vIGBfZ2V0TWFpbkNsb3N1cmVgIHdoZW4gY29tcGlsaW5nIHRoZSBjdXJyZW50IGxpYnJhcnkuCiAgLy8vCiAgLy8vIFRoaXMgYXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC4gVGhlIHN0YW5kYWxvbmUgVk0gYW5kIGZsdXR0ZXIgaGF2ZQogIC8vLyBzcGVjaWFsIGxvZ2ljIHRvIHJlc29sdmUgYG1haW5gIGluIGBfZ2V0TWFpbkNsb3N1cmVgLCB0aGlzIGZsYWcgaXMgdXNlZCB0bwogIC8vLyBpZ25vcmUgdGhhdCByZWZlcmVuY2UgdG8gYG1haW5gLCBidXQgb25seSBvbiBsaWJyYXJpZXMgd2hlcmUgd2UgZXhwZWN0IHRvCiAgLy8vIHNlZSBpdCAodG9kYXkgdGhhdCBpcyBkYXJ0Ol9idWlsdGluIGFuZCBkYXJ0OnVpKS4KICAvLy8KICAvLyBUT0RPKGFoZSxzaWdtdW5kKTogcmVtb3ZlIHdoZW4gdGhlIFZNIGdldHMgcmlkIG9mIHRoZSBzcGVjaWFsIHJ1bGUsIHNlZQogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8yODk4OS4KICBmaW5hbCBib29sIGlnbm9yZU1haW5JbkdldE1haW5DbG9zdXJlOwoKICAvLyBUT0RPKGFoZSk6IENvbnNpZGVyIHJlbmFtaW5nIFt1cmldIHRvICdwYXJ0VXJpJy4KICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwoKICBmaW5hbCBUeXBlSW5mZXJyZXIgdHlwZUluZmVycmVyOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBUeXBlUHJvbW90ZXIgdHlwZVByb21vdGVyOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGxlZ2FjeU1vZGU7CgogIC8vLyBPbmx5IHVzZWQgd2hlbiBbbWVtYmVyXSBpcyBhIGNvbnN0cnVjdG9yLiBJdCB0cmFja3MgaWYgYW4gaW1wbGljaXQgc3VwZXIKICAvLy8gaW5pdGlhbGl6ZXIgaXMgbmVlZGVkLgogIC8vLwogIC8vLyBBbiBpbXBsaWNpdCBzdXBlciBpbml0aWFsaXplciBpc24ndCBuZWVkZWQKICAvLy8KICAvLy8gMS4gaWYgdGhlIGN1cnJlbnQgY2xhc3MgaXMgT2JqZWN0LAogIC8vLyAyLiBpZiB0aGVyZSBpcyBhbiBleHBsaWNpdCBzdXBlciBpbml0aWFsaXplciwKICAvLy8gMy4gaWYgdGhlcmUgaXMgYSByZWRpcmVjdGluZyAodGhpcykgaW5pdGlhbGl6ZXIsIG9yCiAgLy8vIDQuIGlmIGEgY29tcGlsZS10aW1lIGVycm9yIHByZXZlbnRlZCB1cyBmcm9tIGdlbmVyYXRpbmcgY29kZSBmb3IgYW4KICAvLy8gICAgaW5pdGlhbGl6ZXIuIFRoaXMgYXZvaWRzIGNhc2NhZGluZyBlcnJvcnMuCiAgYm9vbCBuZWVkc0ltcGxpY2l0U3VwZXJJbml0aWFsaXplcjsKCiAgU2NvcGUgZm9ybWFsUGFyYW1ldGVyU2NvcGU7CgogIC8vLyBUaGlzIGlzIHNldCB0byB0cnVlIHdoZW4gd2Ugc3RhcnQgcGFyc2luZyBhbiBpbml0aWFsaXplci4gV2UgdXNlIHRoaXMgdG8KICAvLy8gZmluZCB0aGUgY29ycmVjdCBzY29wZSBmb3IgaW5pdGlhbGl6ZXJzIGxpa2UgaW4gdGhpcyBleGFtcGxlOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQyB7CiAgLy8vICAgICAgIGZpbmFsIHg7CiAgLy8vICAgICAgIEMoeCkgOiB4ID0geDsKICAvLy8gICAgIH0KICAvLy8KICAvLy8gV2hlbiBwYXJzaW5nIHRoaXMgaW5pdGlhbGl6ZXIgYHggPSB4YCwgYHhgIG11c3QgYmUgcmVzb2x2ZWQgaW4gdHdvCiAgLy8vIGRpZmZlcmVudCBzY29wZXMuIFRoZSBmaXJzdCBgeGAgbXVzdCBiZSByZXNvbHZlZCBpbiB0aGUgY2xhc3MnIHNjb3BlLCB0aGUKICAvLy8gc2Vjb25kIGluIHRoZSBmb3JtYWwgcGFyYW1ldGVyIHNjb3BlLgogIGJvb2wgaW5Jbml0aWFsaXplciA9IGZhbHNlOwoKICAvLy8gU2V0IHRvIGB0cnVlYCB3aGVuIHdlIGFyZSBwYXJzaW5nIGEgZmllbGQgaW5pdGlhbGl6ZXIgZWl0aGVyIGRpcmVjdGx5CiAgLy8vIG9yIHdpdGhpbiBhbiBpbml0aWFsaXplciBsaXN0LgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgaW4gYDxpbml0PmAgaW4KICAvLy8KICAvLy8gICAgdmFyIGZvbyA9IDxpbml0PjsKICAvLy8gICAgY2xhc3MgQ2xhc3MgewogIC8vLyAgICAgIHZhciBiYXIgPSA8aW5pdD47CiAgLy8vICAgICAgQ2xhc3MoKSA6IDxpbml0PjsKICAvLy8gICAgfQogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaW5zdGFuY2UgcHJvcGVydGllcyBhcmUgYXZhaWxhYmxlLgogIGJvb2wgaW5GaWVsZEluaXRpYWxpemVyID0gZmFsc2U7CgogIGJvb2wgaW5DYXRjaENsYXVzZSA9IGZhbHNlOwoKICBib29sIGluQ2F0Y2hCbG9jayA9IGZhbHNlOwoKICBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPSAwOwoKICAvLyBTZXQgd2hlbiBhIHNwcmVhZCBlbGVtZW50IGlzIGVuY291bnRlcmVkIGluIGEgY29sbGVjdGlvbiBzbyB0aGUgY29sbGVjdGlvbgogIC8vIG5lZWRzIHRvIGJlIGRlc3VnYXJlZCBhZnRlciB0eXBlIGluZmVyZW5jZS4KICBib29sIHRyYW5zZm9ybUNvbGxlY3Rpb25zID0gZmFsc2U7CgogIC8vIFNldCBieSB0eXBlIGluZmVyZW5jZSB3aGVuIGEgc2V0IGxpdGVyYWwgaXMgZW5jb3VudGVyZWQgdGhhdCBuZWVkcyB0byBiZQogIC8vIHRyYW5zZm9ybWVkIGJlY2F1c2UgdGhlIGJhY2tlbmQgdGFyZ2V0IGRvZXMgbm90IHN1cHBvcnQgc2V0IGxpdGVyYWxzLgogIGJvb2wgdHJhbnNmb3JtU2V0TGl0ZXJhbHMgPSBmYWxzZTsKCiAgU3RhdGVtZW50IHByb2JsZW1Jbkxvb3BPclN3aXRjaDsKCiAgU2NvcGUgc3dpdGNoU2NvcGU7CgogIENsb25lVmlzaXRvciBjbG9uZXI7CgogIENvbnN0YW50Q29udGV4dCBjb25zdGFudENvbnRleHQgPSBDb25zdGFudENvbnRleHQubm9uZTsKCiAgVW5yZXNvbHZlZFR5cGUgY3VycmVudExvY2FsVmFyaWFibGVUeXBlOwoKICAvLyBVc2luZyBub24tbnVsbCB2YWx1ZSB0byBpbml0aWFsaXplIHRoaXMgZmllbGQgYmFzZWQgb24gcGVyZm9ybWFuY2UgYWR2aWNlCiAgLy8gZnJvbSBWTSBlbmdpbmVlcnMuIFRPRE8oYWhlKTogRG9lcyB0aGlzIHN0aWxsIGFwcGx5PwogIGludCBjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyA9IC0xOwoKICAvLy8gSWYgbm9uLW51bGwsIHJlY29yZHMgaW5zdGFuY2UgZmllbGRzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkCiAgLy8vIGFuZCB3aGVyZSB0aGF0IHdhcy4KICBNYXA8U3RyaW5nLCBpbnQ+IGluaXRpYWxpemVkRmllbGRzOwoKICAvLy8gTGlzdCBvZiBidWlsdCByZWRpcmVjdGluZyBmYWN0b3J5IGludm9jYXRpb25zLiAgVGhlIHRhcmdldHMgb2YgdGhlCiAgLy8vIGludm9jYXRpb25zIGFyZSB0byBiZSByZXNvbHZlZCBpbiBhIHNlcGFyYXRlIHN0ZXAuCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiByZWRpcmVjdGluZ0ZhY3RvcnlJbnZvY2F0aW9ucyA9IDxFeHByZXNzaW9uPltdOwoKICAvLy8gVmFyaWFibGVzIHdpdGggbWV0YWRhdGEuICBUaGVpciB0eXBlcyBuZWVkIHRvIGJlIGluZmVycmVkIGxhdGUsIGZvcgogIC8vLyBleGFtcGxlLCBpbiBbZmluaXNoRnVuY3Rpb25dLgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzV2l0aE1ldGFkYXRhOwoKICAvLy8gTW9yZSB0aGFuIG9uZSB2YXJpYWJsZSBkZWNsYXJlZCBpbiBhIHNpbmdsZSBzdGF0ZW1lbnQgdGhhdCBoYXMgbWV0YWRhdGEuCiAgLy8vIFRoZWlyIHR5cGVzIG5lZWQgdG8gYmUgaW5mZXJyZWQgbGF0ZSwgZm9yIGV4YW1wbGUsIGluIFtmaW5pc2hGdW5jdGlvbl0uCiAgTGlzdDxMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+PiBtdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YTsKCiAgLy8vIElmIHRoZSBjdXJyZW50IG1lbWJlciBpcyBhbiBpbnN0YW5jZSBtZW1iZXIgaW4gYW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLAogIC8vLyBbZXh0ZW5zaW9uVGhpc10gaG9sZHMgdGhlIHN5bnRoZXRpY2FsbHkgYWRkIHBhcmFtZXRlciBob2xkaW5nIHRoZSB2YWx1ZQogIC8vLyBmb3IgYHRoaXNgLgogIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5zaW9uVGhpczsKCiAgQm9keUJ1aWxkZXIoCiAgICAgIHt0aGlzLmxpYnJhcnksCiAgICAgIHRoaXMubWVtYmVyLAogICAgICB0aGlzLmVuY2xvc2luZ1Njb3BlLAogICAgICB0aGlzLmZvcm1hbFBhcmFtZXRlclNjb3BlLAogICAgICB0aGlzLmhpZXJhcmNoeSwKICAgICAgdGhpcy5jb3JlVHlwZXMsCiAgICAgIHRoaXMuZGVjbGFyYXRpb25CdWlsZGVyLAogICAgICB0aGlzLmlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciwKICAgICAgdGhpcy5leHRlbnNpb25UaGlzLAogICAgICB0aGlzLnVyaSwKICAgICAgdGhpcy50eXBlSW5mZXJyZXJ9KQogICAgICA6IGZvcmVzdCA9IGNvbnN0IEZvcmVzdCgpLAogICAgICAgIGNsYXNzQnVpbGRlciA9CiAgICAgICAgICAgIGRlY2xhcmF0aW9uQnVpbGRlciBpcyBDbGFzc0J1aWxkZXIgPyBkZWNsYXJhdGlvbkJ1aWxkZXIgOiBudWxsLAogICAgICAgIGVuYWJsZU5hdGl2ZSA9CiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5iYWNrZW5kVGFyZ2V0LmVuYWJsZU5hdGl2ZShsaWJyYXJ5LnVyaSksCiAgICAgICAgc3RyaW5nRXhwZWN0ZWRBZnRlck5hdGl2ZSA9CiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5iYWNrZW5kVGFyZ2V0Lm5hdGl2ZUV4dGVuc2lvbkV4cGVjdHNTdHJpbmcsCiAgICAgICAgaWdub3JlTWFpbkluR2V0TWFpbkNsb3N1cmUgPSBsaWJyYXJ5LnVyaS5zY2hlbWUgPT0gJ2RhcnQnICYmCiAgICAgICAgICAgIChsaWJyYXJ5LnVyaS5wYXRoID09ICJfYnVpbHRpbiIgfHwgbGlicmFyeS51cmkucGF0aCA9PSAidWkiKSwKICAgICAgICBuZWVkc0ltcGxpY2l0U3VwZXJJbml0aWFsaXplciA9IGRlY2xhcmF0aW9uQnVpbGRlciBpcyBDbGFzc0J1aWxkZXIgJiYKICAgICAgICAgICAgY29yZVR5cGVzPy5vYmplY3RDbGFzcyAhPSBkZWNsYXJhdGlvbkJ1aWxkZXIuY2xzLAogICAgICAgIHR5cGVQcm9tb3RlciA9IHR5cGVJbmZlcnJlcj8udHlwZVByb21vdGVyLAogICAgICAgIGxlZ2FjeU1vZGUgPSBsaWJyYXJ5LmxlZ2FjeU1vZGUsCiAgICAgICAgc3VwZXIoZW5jbG9zaW5nU2NvcGUpOwoKICBCb2R5QnVpbGRlci53aXRoUGFyZW50cyhGaWVsZEJ1aWxkZXIgZmllbGQsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcnQsCiAgICAgIERlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbkJ1aWxkZXIsIFR5cGVJbmZlcnJlciB0eXBlSW5mZXJyZXIpCiAgICAgIDogdGhpcygKICAgICAgICAgICAgbGlicmFyeTogcGFydCwKICAgICAgICAgICAgbWVtYmVyOiBmaWVsZCwKICAgICAgICAgICAgZW5jbG9zaW5nU2NvcGU6IGRlY2xhcmF0aW9uQnVpbGRlcj8uc2NvcGUgPz8gZmllbGQubGlicmFyeS5zY29wZSwKICAgICAgICAgICAgZm9ybWFsUGFyYW1ldGVyU2NvcGU6IG51bGwsCiAgICAgICAgICAgIGhpZXJhcmNoeTogcGFydC5sb2FkZXIuaGllcmFyY2h5LAogICAgICAgICAgICBjb3JlVHlwZXM6IHBhcnQubG9hZGVyLmNvcmVUeXBlcywKICAgICAgICAgICAgZGVjbGFyYXRpb25CdWlsZGVyOiBkZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgICAgIGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlcjogZmllbGQuaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyLAogICAgICAgICAgICBleHRlbnNpb25UaGlzOiBudWxsLAogICAgICAgICAgICB1cmk6IGZpZWxkLmZpbGVVcmksCiAgICAgICAgICAgIHR5cGVJbmZlcnJlcjogdHlwZUluZmVycmVyKTsKCiAgQm9keUJ1aWxkZXIuZm9yRmllbGQoRmllbGRCdWlsZGVyIGZpZWxkLCBUeXBlSW5mZXJyZXIgdHlwZUluZmVycmVyKQogICAgICA6IHRoaXMud2l0aFBhcmVudHMoCiAgICAgICAgICAgIGZpZWxkLAogICAgICAgICAgICBmaWVsZC5wYXJlbnQgaXMgRGVjbGFyYXRpb25CdWlsZGVyCiAgICAgICAgICAgICAgICA/IGZpZWxkLnBhcmVudC5wYXJlbnQKICAgICAgICAgICAgICAgIDogZmllbGQucGFyZW50LAogICAgICAgICAgICBmaWVsZC5wYXJlbnQgaXMgRGVjbGFyYXRpb25CdWlsZGVyID8gZmllbGQucGFyZW50IDogbnVsbCwKICAgICAgICAgICAgdHlwZUluZmVycmVyKTsKCiAgQm9keUJ1aWxkZXIuZm9yT3V0bGluZUV4cHJlc3Npb24oCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnksCiAgICAgIERlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgIE1vZGlmaWVyQnVpbGRlciBtZW1iZXIsCiAgICAgIFNjb3BlIHNjb3BlLAogICAgICBVcmkgZmlsZVVyaSkKICAgICAgOiB0aGlzKAogICAgICAgICAgICBsaWJyYXJ5OiBsaWJyYXJ5LAogICAgICAgICAgICBtZW1iZXI6IG1lbWJlciwKICAgICAgICAgICAgZW5jbG9zaW5nU2NvcGU6IHNjb3BlLAogICAgICAgICAgICBmb3JtYWxQYXJhbWV0ZXJTY29wZTogbnVsbCwKICAgICAgICAgICAgaGllcmFyY2h5OiBsaWJyYXJ5LmxvYWRlci5oaWVyYXJjaHksCiAgICAgICAgICAgIGNvcmVUeXBlczogbGlicmFyeS5sb2FkZXIuY29yZVR5cGVzLAogICAgICAgICAgICBkZWNsYXJhdGlvbkJ1aWxkZXI6IGRlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICAgICAgaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyOgogICAgICAgICAgICAgICAgbWVtYmVyPy5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIgPz8gZmFsc2UsCiAgICAgICAgICAgIGV4dGVuc2lvblRoaXM6IG51bGwsCiAgICAgICAgICAgIHVyaTogZmlsZVVyaSwKICAgICAgICAgICAgdHlwZUluZmVycmVyOiBsaWJyYXJ5LmxvYWRlci50eXBlSW5mZXJlbmNlRW5naW5lCiAgICAgICAgICAgICAgICA/LmNyZWF0ZUxvY2FsVHlwZUluZmVycmVyKAogICAgICAgICAgICAgICAgICAgIGZpbGVVcmksIGRlY2xhcmF0aW9uQnVpbGRlcj8udGhpc1R5cGUsIGxpYnJhcnkpKTsKCiAgYm9vbCBnZXQgaW5Db25zdHJ1Y3RvciB7CiAgICByZXR1cm4gZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gMCAmJiBtZW1iZXIgaXMgQ29uc3RydWN0b3JCdWlsZGVyOwogIH0KCiAgYm9vbCBnZXQgaXNEZWNsYXJhdGlvbkluc3RhbmNlQ29udGV4dCB7CiAgICByZXR1cm4gaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyIHx8IG1lbWJlciBpcyBDb25zdHJ1Y3RvckJ1aWxkZXI7CiAgfQoKICBUeXBlRW52aXJvbm1lbnQgZ2V0IHR5cGVFbnZpcm9ubWVudCA9PiB0eXBlSW5mZXJyZXI/LnR5cGVTY2hlbWFFbnZpcm9ubWVudDsKCiAgRGFydFR5cGUgZ2V0IGltcGxpY2l0VHlwZUFyZ3VtZW50ID0+CiAgICAgIGxlZ2FjeU1vZGUgPyBjb25zdCBEeW5hbWljVHlwZSgpIDogY29uc3QgSW1wbGljaXRUeXBlQXJndW1lbnQoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwdXNoKE9iamVjdCBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBEYXJ0VHlwZSkgewogICAgICB1bmhhbmRsZWQoIkRhcnRUeXBlIiwgInB1c2giLCAtMSwgdXJpKTsKICAgIH0KICAgIGluSW5pdGlhbGl6ZXIgPSBmYWxzZTsKICAgIHN1cGVyLnB1c2gobm9kZSk7CiAgfQoKICBFeHByZXNzaW9uIHBvcEZvclZhbHVlKCkgPT4gdG9WYWx1ZShwb3AoKSk7CgogIEV4cHJlc3Npb24gcG9wRm9yRWZmZWN0KCkgPT4gdG9FZmZlY3QocG9wKCkpOwoKICBFeHByZXNzaW9uIHBvcEZvclZhbHVlSWZOb3ROdWxsKE9iamVjdCB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyBudWxsIDogcG9wRm9yVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gdG9WYWx1ZShPYmplY3Qgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiBub2RlLmJ1aWxkU2ltcGxlUmVhZCgpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgU3VwZXJJbml0aWFsaXplcikgewogICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEubWVzc2FnZVN1cGVyQXNFeHByZXNzaW9uLCBub2RlLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBQcm9ibGVtQnVpbGRlcikgewogICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKG5vZGUubWVzc2FnZSwgbm9kZS5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdW5oYW5kbGVkKCIke25vZGUucnVudGltZVR5cGV9IiwgInRvVmFsdWUiLCAtMSwgdXJpKTsKICAgIH0KICB9CgogIEV4cHJlc3Npb24gdG9FZmZlY3QoT2JqZWN0IG5vZGUpIHsKICAgIGlmIChub2RlIGlzIEdlbmVyYXRvcikgcmV0dXJuIG5vZGUuYnVpbGRGb3JFZmZlY3QoKTsKICAgIHJldHVybiB0b1ZhbHVlKG5vZGUpOwogIH0KCiAgTGlzdDxFeHByZXNzaW9uPiBwb3BMaXN0Rm9yVmFsdWUoaW50IG4pIHsKICAgIExpc3Q8RXhwcmVzc2lvbj4gbGlzdCA9CiAgICAgICAgbmV3IExpc3Q8RXhwcmVzc2lvbj4uZmlsbGVkKG4sIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgbGlzdFtpXSA9IHBvcEZvclZhbHVlKCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIExpc3Q8RXhwcmVzc2lvbj4gcG9wTGlzdEZvckVmZmVjdChpbnQgbikgewogICAgTGlzdDxFeHByZXNzaW9uPiBsaXN0ID0KICAgICAgICBuZXcgTGlzdDxFeHByZXNzaW9uPi5maWxsZWQobiwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgewogICAgICBsaXN0W2ldID0gcG9wRm9yRWZmZWN0KCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIFN0YXRlbWVudCBwb3BCbG9jayhpbnQgY291bnQsIFRva2VuIG9wZW5CcmFjZSwgVG9rZW4gY2xvc2VCcmFjZSkgewogICAgcmV0dXJuIGZvcmVzdC5jcmVhdGVCbG9jaygKICAgICAgICBvcGVuQnJhY2UsCiAgICAgICAgY29uc3QgR3Jvd2FibGVMaXN0PFN0YXRlbWVudD4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PyA8U3RhdGVtZW50PltdLAogICAgICAgIGNsb3NlQnJhY2UpOwogIH0KCiAgU3RhdGVtZW50IHBvcFN0YXRlbWVudElmTm90TnVsbChPYmplY3QgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IHBvcFN0YXRlbWVudCgpOwogIH0KCiAgU3RhdGVtZW50IHBvcFN0YXRlbWVudCgpID0+IGZvcmVzdC53cmFwVmFyaWFibGVzKHBvcCgpKTsKCiAgdm9pZCBlbnRlclN3aXRjaFNjb3BlKCkgewogICAgcHVzaChzd2l0Y2hTY29wZSA/PyBOdWxsVmFsdWUuU3dpdGNoU2NvcGUpOwogICAgc3dpdGNoU2NvcGUgPSBzY29wZTsKICB9CgogIHZvaWQgZXhpdFN3aXRjaFNjb3BlKCkgewogICAgU2NvcGUgb3V0ZXJTd2l0Y2hTY29wZSA9IHBvcCgpOwogICAgaWYgKHN3aXRjaFNjb3BlLnVuY2xhaW1lZEZvcndhcmREZWNsYXJhdGlvbnMgIT0gbnVsbCkgewogICAgICBzd2l0Y2hTY29wZS51bmNsYWltZWRGb3J3YXJkRGVjbGFyYXRpb25zCiAgICAgICAgICAuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICAgICAgICBpZiAob3V0ZXJTd2l0Y2hTY29wZSA9PSBudWxsKSB7CiAgICAgICAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IGRlY2xhcmF0aW9uOwogICAgICAgICAgZm9yIChTdGF0ZW1lbnQgc3RhdGVtZW50IGluIHRhcmdldC51c2VycykgewogICAgICAgICAgICBzdGF0ZW1lbnQucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgIHN0YXRlbWVudCwKICAgICAgICAgICAgICAgIHdyYXBJblByb2JsZW1TdGF0ZW1lbnQoc3RhdGVtZW50LAogICAgICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlTGFiZWxOb3RGb3VuZC53aXRoQXJndW1lbnRzKG5hbWUpKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG91dGVyU3dpdGNoU2NvcGUuZm9yd2FyZERlY2xhcmVMYWJlbChuYW1lLCBkZWNsYXJhdGlvbik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHN3aXRjaFNjb3BlID0gb3V0ZXJTd2l0Y2hTY29wZTsKICB9CgogIHZvaWQgd3JhcFZhcmlhYmxlSW5pdGlhbGl6ZXJJbkVycm9yKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLAogICAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGUsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpIHsKICAgIFN0cmluZyBuYW1lID0gdmFyaWFibGUubmFtZTsKICAgIGludCBvZmZzZXQgPSB2YXJpYWJsZS5maWxlT2Zmc2V0OwogICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuYW1lKTsKICAgIGlmICh2YXJpYWJsZS5pbml0aWFsaXplciA9PSBudWxsKSB7CiAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyID0KICAgICAgICAgIGJ1aWxkUHJvYmxlbShtZXNzYWdlLCBvZmZzZXQsIG5hbWUubGVuZ3RoLCBjb250ZXh0OiBjb250ZXh0KQogICAgICAgICAgICAuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgfSBlbHNlIHsKICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPSB3cmFwSW5Mb2NhdGVkUHJvYmxlbSgKICAgICAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyLCBtZXNzYWdlLndpdGhMb2NhdGlvbih1cmksIG9mZnNldCwgbmFtZS5sZW5ndGgpLAogICAgICAgICAgY29udGV4dDogY29udGV4dCkKICAgICAgICAuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgfQogIH0KCiAgdm9pZCBkZWNsYXJlVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgU2NvcGUgc2NvcGUpIHsKICAgIFN0cmluZyBuYW1lID0gdmFyaWFibGUubmFtZTsKICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBzY29wZS5sb2NhbFtuYW1lXTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIC8vIFRoaXMgcmVwb3J0cyBhbiBlcnJvciBmb3IgZHVwbGljYXRlZCBkZWNsYXJhdGlvbnMgaW4gdGhlIHNhbWUgc2NvcGU6CiAgICAgIC8vIGB7IHZhciB4OyB2YXIgeDsgfWAKICAgICAgd3JhcFZhcmlhYmxlSW5pdGlhbGl6ZXJJbkVycm9yKAogICAgICAgICAgdmFyaWFibGUsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLCA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UKICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICBdKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgTG9jYXRlZE1lc3NhZ2UgY29udGV4dCA9IHNjb3BlLmRlY2xhcmUoCiAgICAgICAgdmFyaWFibGUubmFtZSwKICAgICAgICBuZXcgVmFyaWFibGVCdWlsZGVyKHZhcmlhYmxlLCBtZW1iZXIgPz8gY2xhc3NCdWlsZGVyID8/IGxpYnJhcnksIHVyaSksCiAgICAgICAgdXJpKTsKICAgIGlmIChjb250ZXh0ICE9IG51bGwpIHsKICAgICAgLy8gVGhpcyBjYXNlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBhYm92ZSBlcnJvci4gSW4gdGhpcyBjYXNlLCB0aGUgcHJvYmxlbQogICAgICAvLyBpcyB1c2luZyBgeGAgYmVmb3JlIGl0J3MgZGVjbGFyZWQ6IGB7IHZhciB4OyB7IHByaW50KHgpOyB2YXIgeDsKICAgICAgLy8gfX1gLiBJbiB0aGlzIGNhc2UsIHdlIHdhbnQgdHdvIGVycm9ycywgdGhlIGB4YCBpbiBgcHJpbnQoeClgIGFuZCB0aGUKICAgICAgLy8gc2Vjb25kIChvciBpbm5lcm1vc3QgZGVjbGFyYXRpb24pIG9mIGB4YC4KICAgICAgd3JhcFZhcmlhYmxlSW5pdGlhbGl6ZXJJbkVycm9yKAogICAgICAgICAgdmFyaWFibGUsCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWQsCiAgICAgICAgICA8TG9jYXRlZE1lc3NhZ2U+W2NvbnRleHRdKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEp1bXBUYXJnZXQgY3JlYXRlSnVtcFRhcmdldChKdW1wVGFyZ2V0S2luZCBraW5kLCBpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIG5ldyBKdW1wVGFyZ2V0KGtpbmQsIGZ1bmN0aW9uTmVzdGluZ0xldmVsLCBtZW1iZXIsIGNoYXJPZmZzZXQpOwogIH0KCiAgdm9pZCBpbmZlckFubm90YXRpb25zKExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgIHR5cGVJbmZlcnJlcj8uaW5mZXJNZXRhZGF0YSh0aGlzLCBhbm5vdGF0aW9ucyk7CiAgICAgIGxpYnJhcnkubG9hZGVyLnRyYW5zZm9ybUxpc3RQb3N0SW5mZXJlbmNlKAogICAgICAgICAgYW5ub3RhdGlvbnMsIHRyYW5zZm9ybVNldExpdGVyYWxzLCB0cmFuc2Zvcm1Db2xsZWN0aW9ucyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWV0YWRhdGEoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTWV0YWRhdGEiKTsKICAgIHN1cGVyLnB1c2goY29uc3RhbnRDb250ZXh0KTsKICAgIGNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGEoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk1ldGFkYXRhIik7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gcG9wKCk7CiAgICBwdXNoUXVhbGlmaWVkUmVmZXJlbmNlKGJlZ2luVG9rZW4ubmV4dCwgcGVyaW9kQmVmb3JlTmFtZSk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgcHVzaChhcmd1bWVudHMpOwogICAgICBfYnVpbGRDb25zdHJ1Y3RvclJlZmVyZW5jZUludm9jYXRpb24oCiAgICAgICAgICBiZWdpblRva2VuLm5leHQsIGJlZ2luVG9rZW4ub2Zmc2V0LCBDb25zdG5lc3MuZXhwbGljaXRDb25zdCk7CiAgICAgIHB1c2gocG9wRm9yVmFsdWUoKSk7CiAgICB9IGVsc2UgewogICAgICBwb3AoKTsgLy8gTmFtZSBsYXN0IGlkZW50aWZpZXIKICAgICAgU3RyaW5nIG5hbWUgPSBwb3AoKTsKICAgICAgcG9wKCk7IC8vIFR5cGUgYXJndW1lbnRzIChpZ25vcmVkLCBhbHJlYWR5IHJlcG9ydGVkIGJ5IHBhcnNlcikuCiAgICAgIE9iamVjdCBleHByZXNzaW9uID0gcG9wKCk7CiAgICAgIGlmIChleHByZXNzaW9uIGlzIElkZW50aWZpZXIpIHsKICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBleHByZXNzaW9uOwogICAgICAgIGV4cHJlc3Npb24gPSBuZXcgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IoCiAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgIGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuKGlkZW50aWZpZXIpLAogICAgICAgICAgICBuZXcgTmFtZShpZGVudGlmaWVyLm5hbWUsIGxpYnJhcnkubmFtZU9yaWdpbikpOwogICAgICB9CiAgICAgIGlmIChuYW1lPy5pc05vdEVtcHR5ID8/IGZhbHNlKSB7CiAgICAgICAgVG9rZW4gcGVyaW9kID0gcGVyaW9kQmVmb3JlTmFtZSA/PyBiZWdpblRva2VuLm5leHQubmV4dDsKICAgICAgICBHZW5lcmF0b3IgZ2VuZXJhdG9yID0gZXhwcmVzc2lvbjsKICAgICAgICBleHByZXNzaW9uID0gZ2VuZXJhdG9yLmJ1aWxkUHJvcGVydHlBY2Nlc3MoCiAgICAgICAgICAgIG5ldyBJbmNvbXBsZXRlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICB0aGlzLCBwZXJpb2QubmV4dCwgbmV3IE5hbWUobmFtZSwgbGlicmFyeS5uYW1lT3JpZ2luKSksCiAgICAgICAgICAgIHBlcmlvZC5uZXh0Lm9mZnNldCwKICAgICAgICAgICAgZmFsc2UpOwogICAgICB9CgogICAgICBDb25zdGFudENvbnRleHQgc2F2ZWRDb25zdGFudENvbnRleHQgPSBwb3AoKTsKICAgICAgaWYgKGV4cHJlc3Npb24gaXMhIFN0YXRpY0FjY2Vzc0dlbmVyYXRvciAmJgogICAgICAgICAgZXhwcmVzc2lvbiBpcyEgVmFyaWFibGVVc2VHZW5lcmF0b3IpIHsKICAgICAgICBwdXNoKHdyYXBJblByb2JsZW0oCiAgICAgICAgICAgIHRvVmFsdWUoZXhwcmVzc2lvbiksIGZhc3RhLm1lc3NhZ2VFeHByZXNzaW9uTm90TWV0YWRhdGEsIG5vTGVuZ3RoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaCh0b1ZhbHVlKGV4cHJlc3Npb24pKTsKICAgICAgfQogICAgICBjb25zdGFudENvbnRleHQgPSBzYXZlZENvbnN0YW50Q29udGV4dDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGFTdGFyKGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiTWV0YWRhdGFTdGFyIik7CiAgICBpZiAoY291bnQgPT0gMCkgewogICAgICBwdXNoKE51bGxWYWx1ZS5NZXRhZGF0YSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGNvbnN0IEdyb3dhYmxlTGlzdDxFeHByZXNzaW9uPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgICBOdWxsVmFsdWUuTWV0YWRhdGEgLyogSWdub3JlIHBhcnNlciByZWNvdmVyeSAqLyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRvcExldmVsRmllbGRzKAogICAgICBUb2tlbiBzdGF0aWNUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sCiAgICAgIFRva2VuIGxhdGVUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LAogICAgICBpbnQgY291bnQsCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sCiAgICAgIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJUb3BMZXZlbEZpZWxkcyIpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKGxhdGVUb2tlbik7CiAgICB9CiAgICBwdXNoKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRmllbGRzKFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZpZWxkcyIpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKGxhdGVUb2tlbik7CiAgICB9CiAgICBwdXNoKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZmluaXNoRmllbGRzKCkgewogICAgZGVidWdFdmVudCgiZmluaXNoRmllbGRzIik7CiAgICBpbnQgY291bnQgPSBwb3AoKTsKICAgIExpc3Q8RmllbGRCdWlsZGVyPiBmaWVsZHMgPSA8RmllbGRCdWlsZGVyPltdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSBwb3AoKTsKICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gcG9wKCk7CiAgICAgIFN0cmluZyBuYW1lID0gaWRlbnRpZmllci5uYW1lOwogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uOwogICAgICBpZiAoZGVjbGFyYXRpb25CdWlsZGVyICE9IG51bGwpIHsKICAgICAgICBkZWNsYXJhdGlvbiA9CiAgICAgICAgICAgIGRlY2xhcmF0aW9uQnVpbGRlci5sb29rdXBMb2NhbE1lbWJlcihuYW1lLCByZXF1aXJlZDogdHJ1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGVjbGFyYXRpb24gPSBsaWJyYXJ5Lmxvb2t1cExvY2FsTWVtYmVyKG5hbWUsIHJlcXVpcmVkOiB0cnVlKTsKICAgICAgfQogICAgICBGaWVsZEJ1aWxkZXIgZmllbGQ7CiAgICAgIGlmIChkZWNsYXJhdGlvbi5pc0ZpZWxkICYmIGRlY2xhcmF0aW9uLm5leHQgPT0gbnVsbCkgewogICAgICAgIGZpZWxkID0gZGVjbGFyYXRpb247CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZmllbGRzLmFkZChmaWVsZCk7CiAgICAgIGlmIChpbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgaWYgKGZpZWxkLm5leHQgIT0gbnVsbCkgewogICAgICAgICAgLy8gRHVwbGljYXRlIGRlZmluaXRpb24uIFRoZSBmaWVsZCBtaWdodCBub3QgYmUgdGhlIGNvcnJlY3Qgb25lLAogICAgICAgICAgLy8gc28gd2Ugc2tpcCBpbmZlcmVuY2Ugb2YgdGhlIGluaXRpYWxpemVyLgogICAgICAgICAgLy8gRXJyb3IgcmVwb3J0aW5nIGFuZCByZWNvdmVyeSBpcyBoYW5kbGVkIGVsc2V3aGVyZS4KICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnRhcmdldC5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICAvLyBUaGUgaW5pdGlhbGl6ZXIgd2FzIGFscmVhZHkgY29tcGlsZWQgKGUuZy4sIGlmIGl0IGFwcGVhciBpbiB0aGUKICAgICAgICAgIC8vIG91dGxpbmUsIGxpa2UgY29uc3RhbnQgZmllbGQgaW5pdGlhbGl6ZXJzKSBzbyB3ZSBkbyBub3QgbmVlZCB0bwogICAgICAgICAgLy8gcGVyZm9ybSB0eXBlIGluZmVyZW5jZSBvciB0cmFuc2Zvcm1hdGlvbnMuCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZpZWxkLmluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXI7CiAgICAgICAgICB0eXBlSW5mZXJyZXI/LmluZmVyRmllbGRJbml0aWFsaXplcigKICAgICAgICAgICAgICB0aGlzLCBmaWVsZC5idWlsdFR5cGUsIGluaXRpYWxpemVyKTsKICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRyYW5zZm9ybVBvc3RJbmZlcmVuY2UoCiAgICAgICAgICAgICAgZmllbGQudGFyZ2V0LCB0cmFuc2Zvcm1TZXRMaXRlcmFscywgdHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgewogICAgICAvLyBUT0RPKGFoZSk6IFRoZSB0eXBlIHdlIGNvbXB1dGUgaGVyZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gd2hhdCBpcwogICAgICAvLyBjb21wdXRlZCBpbiB0aGUgb3V0bGluZSBwaGFzZS4gV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBvdXRsaW5lCiAgICAgIC8vIHBoYXNlIGNvbXB1dGVzIHRoZSBzYW1lIHR5cGUuIFNlZQogICAgICAvLyBwa2cvZnJvbnRfZW5kL3Rlc3RjYXNlcy9yZWdyZXNzL2lzc3VlXzMyMjAwLmRhcnQgZm9yIGFuIGV4YW1wbGUgd2hlcmUKICAgICAgLy8gbm90IGNhbGxpbmcgW2J1aWxkRGFydFR5cGVdIGxlYWRzIHRvIGEgbWlzc2luZyBjb21waWxlLXRpbWUKICAgICAgLy8gZXJyb3IuIEFsc28sIG5vdGljZSB0aGF0IHRoZSB0eXBlIG9mIHRoZSBwcm9ibGVtYXRpYyBmaWVsZCBpc24ndAogICAgICAvLyBgaW52YWxpZC10eXBlYC4KICAgICAgYnVpbGREYXJ0VHlwZShwb3AoKSk7IC8vIFR5cGUuCiAgICB9CiAgICBwb3AoKTsgLy8gQW5ub3RhdGlvbnMuCgogICAgcmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHMoKTsKICAgIGZpbmlzaFZhcmlhYmxlTWV0YWRhdGEoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWVtYmVyKCkgewogICAgZGVidWdFdmVudCgiTWVtYmVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEJsb2NrRnVuY3Rpb25Cb2R5KGludCBjb3VudCwgVG9rZW4gb3BlbkJyYWNlLCBUb2tlbiBjbG9zZUJyYWNlKSB7CiAgICBkZWJ1Z0V2ZW50KCJCbG9ja0Z1bmN0aW9uQm9keSIpOwogICAgaWYgKG9wZW5CcmFjZSA9PSBudWxsKSB7CiAgICAgIGFzc2VydChjb3VudCA9PSAwKTsKICAgICAgcHVzaChOdWxsVmFsdWUuQmxvY2spOwogICAgfSBlbHNlIHsKICAgICAgU3RhdGVtZW50IGJsb2NrID0gcG9wQmxvY2soY291bnQsIG9wZW5CcmFjZSwgY2xvc2VCcmFjZSk7CiAgICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICAgIHB1c2goYmxvY2spOwogICAgfQogIH0KCiAgdm9pZCBwcmVwYXJlSW5pdGlhbGl6ZXJzKCkgewogICAgRnVuY3Rpb25CdWlsZGVyIG1lbWJlciA9IHRoaXMubWVtYmVyOwogICAgc2NvcGUgPSBtZW1iZXIuY29tcHV0ZUZvcm1hbFBhcmFtZXRlckluaXRpYWxpemVyU2NvcGUoc2NvcGUpOwogICAgaWYgKG1lbWJlciBpcyBDb25zdHJ1Y3RvckJ1aWxkZXIpIHsKICAgICAgbWVtYmVyLnByZXBhcmVJbml0aWFsaXplcnMoKTsKICAgICAgaWYgKG1lbWJlci5mb3JtYWxzICE9IG51bGwpIHsKICAgICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIG1lbWJlci5mb3JtYWxzKSB7CiAgICAgICAgICBpZiAoZm9ybWFsLmlzSW5pdGlhbGl6aW5nRm9ybWFsKSB7CiAgICAgICAgICAgIEluaXRpYWxpemVyIGluaXRpYWxpemVyOwogICAgICAgICAgICBpZiAobWVtYmVyLmlzRXh0ZXJuYWwpIHsKICAgICAgICAgICAgICBpbml0aWFsaXplciA9IGJ1aWxkSW52YWxpZEluaXRpYWxpemVyKAogICAgICAgICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhGaWVsZEluaXRpYWxpemVycywKICAgICAgICAgICAgICAgICAgICAgIGZvcm1hbC5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgZm9ybWFsLm5hbWUubGVuZ3RoKSksCiAgICAgICAgICAgICAgICAgIGZvcm1hbC5jaGFyT2Zmc2V0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpbml0aWFsaXplciA9IGJ1aWxkRmllbGRJbml0aWFsaXplcigKICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAgZm9ybWFsLm5hbWUsCiAgICAgICAgICAgICAgICAgIGZvcm1hbC5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgICBmb3JtYWwuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlR2V0KGZvcm1hbC5kZWNsYXJhdGlvbiksCiAgICAgICAgICAgICAgICAgIGZvcm1hbFR5cGU6IGZvcm1hbC5kZWNsYXJhdGlvbi50eXBlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBtZW1iZXIuYWRkSW5pdGlhbGl6ZXIoaW5pdGlhbGl6ZXIsIHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0luaXRpYWxpemVycygpIHsKICAgIGRlYnVnRXZlbnQoIk5vSW5pdGlhbGl6ZXJzIik7CiAgICBpZiAoZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gMCkgewogICAgICBwcmVwYXJlSW5pdGlhbGl6ZXJzKCk7CiAgICAgIHNjb3BlID0gZm9ybWFsUGFyYW1ldGVyU2NvcGU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSW5pdGlhbGl6ZXJzKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkluaXRpYWxpemVycyIpOwogICAgaWYgKGZ1bmN0aW9uTmVzdGluZ0xldmVsID09IDApIHsKICAgICAgcHJlcGFyZUluaXRpYWxpemVycygpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcnMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiSW5pdGlhbGl6ZXJzIik7CiAgICBpZiAoZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gMCkgewogICAgICBzY29wZSA9IGZvcm1hbFBhcmFtZXRlclNjb3BlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkluaXRpYWxpemVyIik7CiAgICBpbkluaXRpYWxpemVyID0gdHJ1ZTsKICAgIGluRmllbGRJbml0aWFsaXplciA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRJbml0aWFsaXplciIpOwogICAgaW5GaWVsZEluaXRpYWxpemVyID0gZmFsc2U7CiAgICBhc3NlcnQoIWluSW5pdGlhbGl6ZXIpOwogICAgZmluYWwgbWVtYmVyID0gdGhpcy5tZW1iZXI7CiAgICBPYmplY3Qgbm9kZSA9IHBvcCgpOwogICAgSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXI7CiAgICBpZiAobm9kZSBpcyBJbml0aWFsaXplcikgewogICAgICBpbml0aWFsaXplciA9IG5vZGU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgR2VuZXJhdG9yKSB7CiAgICAgIGluaXRpYWxpemVyID0gbm9kZS5idWlsZEZpZWxkSW5pdGlhbGl6ZXIoaW5pdGlhbGl6ZWRGaWVsZHMpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIENvbnN0cnVjdG9ySW52b2NhdGlvbikgewogICAgICBpbml0aWFsaXplciA9IGJ1aWxkU3VwZXJJbml0aWFsaXplcigKICAgICAgICAgIGZhbHNlLCBub2RlLnRhcmdldCwgbm9kZS5hcmd1bWVudHMsIHRva2VuLmNoYXJPZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSA9IHRvVmFsdWUobm9kZSk7CiAgICAgIGlmICghZm9yZXN0LmlzVGhyb3cobm9kZSkpIHsKICAgICAgICB2YWx1ZSA9CiAgICAgICAgICAgIHdyYXBJblByb2JsZW0odmFsdWUsIGZhc3RhLm1lc3NhZ2VFeHBlY3RlZEFuSW5pdGlhbGl6ZXIsIG5vTGVuZ3RoKTsKICAgICAgfQogICAgICBpbml0aWFsaXplciA9IGJ1aWxkSW52YWxpZEluaXRpYWxpemVyKG5vZGUsIHRva2VuLmNoYXJPZmZzZXQpOwogICAgfQogICAgdHlwZUluZmVycmVyPy5pbmZlckluaXRpYWxpemVyKHRoaXMsIGluaXRpYWxpemVyKTsKICAgIGlmIChtZW1iZXIgaXMgQ29uc3RydWN0b3JCdWlsZGVyICYmICFtZW1iZXIuaXNFeHRlcm5hbCkgewogICAgICBtZW1iZXIuYWRkSW5pdGlhbGl6ZXIoaW5pdGlhbGl6ZXIsIHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhtZW1iZXIubmFtZSksCiAgICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgbWVtYmVyLm5hbWUubGVuZ3RoKTsKICAgIH0KICB9CgogIERhcnRUeXBlIF9jb21wdXRlUmV0dXJuVHlwZUNvbnRleHQoTWVtYmVyQnVpbGRlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgaXMgUHJvY2VkdXJlQnVpbGRlcikgewogICAgICByZXR1cm4gbWVtYmVyLnByb2NlZHVyZS5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG1lbWJlciBpcyBDb25zdHJ1Y3RvckJ1aWxkZXIpOwogICAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZmluaXNoRnVuY3Rpb24oCiAgICAgIEZvcm1hbFBhcmFtZXRlcnMgZm9ybWFscywgQXN5bmNNYXJrZXIgYXN5bmNNb2RpZmllciwgU3RhdGVtZW50IGJvZHkpIHsKICAgIGRlYnVnRXZlbnQoImZpbmlzaEZ1bmN0aW9uIik7CiAgICB0eXBlUHJvbW90ZXI/LmZpbmlzaGVkKCk7CgogICAgRnVuY3Rpb25CdWlsZGVyIGJ1aWxkZXIgPSBtZW1iZXI7CiAgICBpZiAoZm9ybWFscz8ucGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWFscy5wYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgPSBmb3JtYWxzLnBhcmFtZXRlcnNbaV07CiAgICAgICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IHBhcmFtZXRlci50YXJnZXQuaW5pdGlhbGl6ZXI7CiAgICAgICAgaWYgKHBhcmFtZXRlci5pc09wdGlvbmFsIHx8IGluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVhbFBhcmFtZXRlciA9IGJ1aWxkZXIuZm9ybWFsc1tpXS50YXJnZXQ7CiAgICAgICAgICBpZiAocGFyYW1ldGVyLmlzT3B0aW9uYWwpIHsKICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPz89IGZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbCgKICAgICAgICAgICAgICAgIC8vIFRPRE8oYWhlKTogU2hvdWxkIHN0b3JlOiByZWFsUGFyYW1ldGVyLmZpbGVPZmZzZXQKICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zMjI4OQogICAgICAgICAgICAgICAgbnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICByZWFsUGFyYW1ldGVyLmluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIuLnBhcmVudCA9IHJlYWxQYXJhbWV0ZXI7CiAgICAgICAgICB0eXBlSW5mZXJyZXI/LmluZmVyUGFyYW1ldGVySW5pdGlhbGl6ZXIoCiAgICAgICAgICAgICAgdGhpcywgaW5pdGlhbGl6ZXIsIHJlYWxQYXJhbWV0ZXIudHlwZSk7CiAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50cmFuc2Zvcm1Qb3N0SW5mZXJlbmNlKAogICAgICAgICAgICAgIHJlYWxQYXJhbWV0ZXIsIHRyYW5zZm9ybVNldExpdGVyYWxzLCB0cmFuc2Zvcm1Db2xsZWN0aW9ucyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdHlwZUluZmVycmVyPy5pbmZlckZ1bmN0aW9uQm9keSgKICAgICAgICB0aGlzLCBfY29tcHV0ZVJldHVyblR5cGVDb250ZXh0KG1lbWJlciksIGFzeW5jTW9kaWZpZXIsIGJvZHkpOwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBsaWJyYXJ5LmxvYWRlci50cmFuc2Zvcm1Qb3N0SW5mZXJlbmNlKAogICAgICAgICAgYm9keSwgdHJhbnNmb3JtU2V0TGl0ZXJhbHMsIHRyYW5zZm9ybUNvbGxlY3Rpb25zKTsKICAgIH0KCiAgICAvLyBGb3IgYXN5bmMsIGFzeW5jKiwgYW5kIHN5bmMqIGZ1bmN0aW9ucyB3aXRoIGRlY2xhcmVkIHJldHVybiB0eXBlcywgd2UKICAgIC8vIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhvc2UgdHlwZXMgYXJlIHZhbGlkLgogICAgLy8gVE9ETyhoaWxsZXJzdHJvbSk6IGN1cnJlbnRseSwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIFtsZWdhY3lNb2RlXSBpcwogICAgLy8gZW5hYmxlZCBmb3IgdHdvIHJlYXNvbnM6CiAgICAvLyAxKSB0aGUgW2lzU3VidHlwZU9mXSBwcmVkaWNhdGUgcHJvZHVjZXMgZmFsc2UtbmVnYXRpdmVzIHdoZW4KICAgIC8vIFtsZWdhY3lNb2RlXSBpcyBlbmFibGVkLgogICAgLy8gMikgdGhlIG1lbWJlciBbdHlwZUVudmlyb25tZW50XSBtaWdodCBiZSBudWxsIHdoZW4gW2xlZ2FjeU1vZGVdIGlzCiAgICAvLyBlbmFibGVkLgogICAgLy8gVGhpcyBwYXJ0aWN1bGFyIGJlaGF2aW9yIGNhbiBiZSBvYnNlcnZlZCB3aGVuIHJ1bm5pbmcgdGhlIGZhc3RhIHBlcmYKICAgIC8vIGJlbmNobWFya3MuCiAgICBpZiAoIWxlZ2FjeU1vZGUgJiYgYnVpbGRlci5yZXR1cm5UeXBlICE9IG51bGwpIHsKICAgICAgRGFydFR5cGUgcmV0dXJuVHlwZSA9IGJ1aWxkZXIuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgLy8gV2UgdXNlIHRoZSBzYW1lIHRyaWNrIGluIGVhY2ggY2FzZSBiZWxvdy4gRm9yIGV4YW1wbGUgdG8gZGVjaWRlIHdoZXRoZXIKICAgICAgLy8gRnV0dXJlPFQ+IDw6IFtyZXR1cm5UeXBlXSBmb3IgZXZlcnkgVCwgd2UgcmVseSBvbiBGdXR1cmU8Qm90PiBhbmQKICAgICAgLy8gdHJhbnNpdGl2aXR5IG9mIHRoZSBzdWJ0eXBpbmcgcmVsYXRpb24gYmVjYXVzZSBGdXR1cmU8Qm90PiA8OiBGdXR1cmU8VD4KICAgICAgLy8gZm9yIGV2ZXJ5IFQuCgogICAgICAvLyBXZSB1c2UgW3Byb2JsZW0gPT0gbnVsbF0gdG8gc2lnbmFsIHN1Y2Nlc3MuCiAgICAgIE1lc3NhZ2UgcHJvYmxlbTsKICAgICAgc3dpdGNoIChhc3luY01vZGlmaWVyKSB7CiAgICAgICAgY2FzZSBBc3luY01hcmtlci5Bc3luYzoKICAgICAgICAgIERhcnRUeXBlIGZ1dHVyZUJvdHRvbVR5cGUgPSBsaWJyYXJ5LmxvYWRlci5mdXR1cmVPZkJvdHRvbTsKICAgICAgICAgIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKGZ1dHVyZUJvdHRvbVR5cGUsIHJldHVyblR5cGUpKSB7CiAgICAgICAgICAgIHByb2JsZW0gPSBmYXN0YS5tZXNzYWdlSWxsZWdhbEFzeW5jUmV0dXJuVHlwZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLkFzeW5jU3RhcjoKICAgICAgICAgIERhcnRUeXBlIHN0cmVhbUJvdHRvbVR5cGUgPSBsaWJyYXJ5LmxvYWRlci5zdHJlYW1PZkJvdHRvbTsKICAgICAgICAgIGlmIChyZXR1cm5UeXBlIGlzIFZvaWRUeXBlKSB7CiAgICAgICAgICAgIHByb2JsZW0gPSBmYXN0YS5tZXNzYWdlSWxsZWdhbEFzeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGU7CiAgICAgICAgICB9IGVsc2UgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoCiAgICAgICAgICAgICAgc3RyZWFtQm90dG9tVHlwZSwgcmV0dXJuVHlwZSkpIHsKICAgICAgICAgICAgcHJvYmxlbSA9IGZhc3RhLm1lc3NhZ2VJbGxlZ2FsQXN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU3luY1N0YXI6CiAgICAgICAgICBEYXJ0VHlwZSBpdGVyYWJsZUJvdHRvbVR5cGUgPSBsaWJyYXJ5LmxvYWRlci5pdGVyYWJsZU9mQm90dG9tOwogICAgICAgICAgaWYgKHJldHVyblR5cGUgaXMgVm9pZFR5cGUpIHsKICAgICAgICAgICAgcHJvYmxlbSA9IGZhc3RhLm1lc3NhZ2VJbGxlZ2FsU3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlOwogICAgICAgICAgfSBlbHNlIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKAogICAgICAgICAgICAgIGl0ZXJhYmxlQm90dG9tVHlwZSwgcmV0dXJuVHlwZSkpIHsKICAgICAgICAgICAgcHJvYmxlbSA9IGZhc3RhLm1lc3NhZ2VJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBBc3luY01hcmtlci5TeW5jOgogICAgICAgICAgYnJlYWs7IC8vIHNraXAKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLlN5bmNZaWVsZGluZzoKICAgICAgICAgIHVuZXhwZWN0ZWQoImFzeW5jLCBhc3luYyosIHN5bmMsIG9yIHN5bmMqIiwgIiRhc3luY01vZGlmaWVyIiwKICAgICAgICAgICAgICBtZW1iZXIuY2hhck9mZnNldCwgdXJpKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBpZiAocHJvYmxlbSAhPSBudWxsKSB7CiAgICAgICAgLy8gVE9ETyhoaWxsZXJzdHJvbSk6IG9uY2UgdHlwZXMgZ2V0IGFubm90YXRlZCB3aXRoIGxvY2F0aW9uCiAgICAgICAgLy8gaW5mb3JtYXRpb24sIHdlIGNhbiBpbXByb3ZlIHRoZSBxdWFsaXR5IG9mIHRoZSBlcnJvciBtZXNzYWdlIGJ5CiAgICAgICAgLy8gdXNpbmcgdGhlIG9mZnNldCBvZiBbcmV0dXJuVHlwZV0gKGFuZCB0aGUgbGVuZ3RoIG9mIGl0cyBuYW1lKS4KICAgICAgICBhZGRQcm9ibGVtKHByb2JsZW0sIG1lbWJlci5jaGFyT2Zmc2V0LCBtZW1iZXIubmFtZS5sZW5ndGgpOwogICAgICB9CiAgICB9CgogICAgaWYgKGJ1aWxkZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcikgewogICAgICBpZiAoZm9ybWFscz8ucGFyYW1ldGVycyA9PSBudWxsIHx8CiAgICAgICAgICBmb3JtYWxzLnBhcmFtZXRlcnMubGVuZ3RoICE9IDEgfHwKICAgICAgICAgIGZvcm1hbHMucGFyYW1ldGVycy5zaW5nbGUuaXNPcHRpb25hbCkgewogICAgICAgIGludCBjaGFyT2Zmc2V0ID0gZm9ybWFscz8uY2hhck9mZnNldCA/PwogICAgICAgICAgICBib2R5Py5maWxlT2Zmc2V0ID8/CiAgICAgICAgICAgIGJ1aWxkZXIudGFyZ2V0LmZpbGVPZmZzZXQ7CiAgICAgICAgaWYgKGJvZHkgPT0gbnVsbCkgewogICAgICAgICAgYm9keSA9IG5ldyBFbXB0eVN0YXRlbWVudCgpLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgICAgICB9CiAgICAgICAgaWYgKGJ1aWxkZXIuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgICAgICAvLyBJbGxlZ2FsIHBhcmFtZXRlcnMgd2VyZSByZW1vdmVkIGJ5IHRoZSBmdW5jdGlvbiBidWlsZGVyLgogICAgICAgICAgLy8gQWRkIHRoZW0gYXMgbG9jYWwgdmFyaWFibGUgdG8gcHV0IHRoZW0gaW4gc2NvcGUgb2YgdGhlIGJvZHkuCiAgICAgICAgICBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxTdGF0ZW1lbnQ+W107CiAgICAgICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgcGFyYW1ldGVyIGluIGJ1aWxkZXIuZm9ybWFscykgewogICAgICAgICAgICBzdGF0ZW1lbnRzLmFkZChwYXJhbWV0ZXIudGFyZ2V0KTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXRlbWVudHMuYWRkKGJvZHkpOwogICAgICAgICAgYm9keSA9IGZvcmVzdC5jcmVhdGVCbG9jayhudWxsLCBzdGF0ZW1lbnRzLCBudWxsKQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgICAgIH0KICAgICAgICBib2R5ID0gZm9yZXN0LmNyZWF0ZUJsb2NrKAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICA8U3RhdGVtZW50PlsKICAgICAgICAgICAgICBmb3Jlc3QuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlcnJvciBpcyBhZGRlZCBhZnRlciB0eXBlIGluZmVyZW5jZSBpcyBkb25lLCBzbyB3ZQogICAgICAgICAgICAgICAgICAvLyBkb24ndCBuZWVkIHRvIHdyYXAgZXJyb3JzIGluIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudC4KICAgICAgICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZVNldHRlcldpdGhXcm9uZ051bWJlck9mRm9ybWFscywKICAgICAgICAgICAgICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICBub0xlbmd0aCkpLAogICAgICAgICAgICAgICAgICBudWxsKSwKICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICBdLAogICAgICAgICAgICBudWxsKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgICAgfQogICAgfQogICAgLy8gTm8tc3VjaC1tZXRob2QgZm9yd2FyZGVycyBnZXQgdGhlaXIgYm9kaWVzIGluamVjdGVkIGR1cmluZyBvdXRsaW5lCiAgICAvLyBidWlsZGluZywgc28gd2Ugc2hvdWxkIHNraXAgdGhlbSBoZXJlLgogICAgYm9vbCBpc05vU3VjaE1ldGhvZEZvcndhcmRlciA9IChidWlsZGVyLmZ1bmN0aW9uLnBhcmVudCBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAoYnVpbGRlci5mdW5jdGlvbi5wYXJlbnQgYXMgUHJvY2VkdXJlKS5pc05vU3VjaE1ldGhvZEZvcndhcmRlcik7CiAgICBpZiAoIWJ1aWxkZXIuaXNFeHRlcm5hbCAmJiAhaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXIpIHsKICAgICAgYnVpbGRlci5ib2R5ID0gYm9keTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgICBidWlsZGVyLmJvZHkgPSBuZXcgQmxvY2soPFN0YXRlbWVudD5bCiAgICAgICAgICBuZXcgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICAgIGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlRXh0ZXJuYWxNZXRob2RXaXRoQm9keSwgYm9keS5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICBub0xlbmd0aCkpKQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBib2R5LmZpbGVPZmZzZXQsCiAgICAgICAgICBib2R5LAogICAgICAgIF0pCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBib2R5LmZpbGVPZmZzZXQ7CiAgICAgIH0KICAgIH0KICAgIGlmIChidWlsZGVyIGlzIENvbnN0cnVjdG9yQnVpbGRlcikgewogICAgICBmaW5pc2hDb25zdHJ1Y3RvcihidWlsZGVyLCBhc3luY01vZGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoYnVpbGRlciBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgIGJ1aWxkZXIuYXN5bmNNb2RpZmllciA9IGFzeW5jTW9kaWZpZXI7CiAgICB9IGVsc2UgewogICAgICB1bmhhbmRsZWQoIiR7YnVpbGRlci5ydW50aW1lVHlwZX0iLCAiZmluaXNoRnVuY3Rpb24iLCBidWlsZGVyLmNoYXJPZmZzZXQsCiAgICAgICAgICBidWlsZGVyLmZpbGVVcmkpOwogICAgfQoKICAgIHJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzKCk7CiAgICBmaW5pc2hWYXJpYWJsZU1ldGFkYXRhKCk7CiAgfQoKICAvLy8gRW5zdXJlIHRoYXQgdGhlIGNvbnRhaW5pbmcgbGlicmFyeSBvZiB0aGUgW21lbWJlcl0gaGFzIGJlZW4gbG9hZGVkLgogIC8vLwogIC8vLyBUaGlzIGlzIGZvciBpbnN0YW5jZSBpbXBvcnRhbnQgZm9yIGxhenkgZGlsbCBsaWJyYXJ5IGJ1aWxkZXJzIHdoZXJlIHRoaXMKICAvLy8gbWV0aG9kIGhhcyB0byBiZSBjYWxsZWQgdG8gZW5zdXJlIHRoYXQKICAvLy8gYSkgVGhlIGxpYnJhcnkgaGFzIGJlZW4gZnVsbHkgbG9hZGVkIChhbmQgZm9yIGluc3RhbmNlIGFueSBpbnRlcm5hbAogIC8vLyAgICB0cmFuc2Zvcm1hdGlvbiBuZWVkZWQgaGFzIGJlZW4gcGVyZm9ybWVkKTsgYW5kCiAgLy8vIGIpIFRoZSBsaWJyYXJ5IGlzIGNvcnJlY3RseSBtYXJrZWQgYXMgYmVpbmcgdXNlZCB0byBhbGxvdyBmb3IgcHJvcGVyCiAgLy8vICAgICdkZXBlbmRlbmN5IHBydW5pbmcnLgogIHZvaWQgZW5zdXJlTG9hZGVkKE1lbWJlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgcmV0dXJuOwogICAgTGlicmFyeSBlbnN1cmVMaWJyYXJ5TG9hZGVkID0gbWVtYmVyLmVuY2xvc2luZ0xpYnJhcnk7CiAgICBMaWJyYXJ5QnVpbGRlciBidWlsZGVyID0KICAgICAgICBsaWJyYXJ5LmxvYWRlci5idWlsZGVyc1tlbnN1cmVMaWJyYXJ5TG9hZGVkLmltcG9ydFVyaV0gPz8KICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIudGFyZ2V0LmRpbGxUYXJnZXQubG9hZGVyCiAgICAgICAgICAgICAgICAuYnVpbGRlcnNbZW5zdXJlTGlicmFyeUxvYWRlZC5pbXBvcnRVcmldOwogICAgaWYgKGJ1aWxkZXIgaXMgRGlsbExpYnJhcnlCdWlsZGVyKSB7CiAgICAgIGJ1aWxkZXIuZW5zdXJlTG9hZGVkKCk7CiAgICB9CiAgfQoKICAvLy8gQ2hlY2sgaWYgdGhlIGNvbnRhaW5pbmcgbGlicmFyeSBvZiB0aGUgW21lbWJlcl0gaGFzIGJlZW4gbG9hZGVkLgogIC8vLwogIC8vLyBUaGlzIGlzIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBhc3NlcnRzLgogIC8vLyBTZWUgW2Vuc3VyZUxvYWRlZF0gZm9yIGEgZGVzY3JpcHRpb24gb2Ygd2hhdCAnbG9hZGVkJyBtZWFucyBhbmQgdGhlIGlkZWFzCiAgLy8vIGJlaGluZCB0aGF0LgogIGJvb2wgaXNMb2FkZWQoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgIExpYnJhcnkgZW5zdXJlTGlicmFyeUxvYWRlZCA9IG1lbWJlci5lbmNsb3NpbmdMaWJyYXJ5OwogICAgTGlicmFyeUJ1aWxkZXIgYnVpbGRlciA9CiAgICAgICAgbGlicmFyeS5sb2FkZXIuYnVpbGRlcnNbZW5zdXJlTGlicmFyeUxvYWRlZC5pbXBvcnRVcmldID8/CiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5kaWxsVGFyZ2V0LmxvYWRlcgogICAgICAgICAgICAgICAgLmJ1aWxkZXJzW2Vuc3VyZUxpYnJhcnlMb2FkZWQuaW1wb3J0VXJpXTsKICAgIGlmIChidWlsZGVyIGlzIERpbGxMaWJyYXJ5QnVpbGRlcikgewogICAgICByZXR1cm4gYnVpbGRlci5pc0J1aWx0QW5kTWFya2VkOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIHJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzKCkgewogICAgZm9yIChTdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24gaW4gcmVkaXJlY3RpbmdGYWN0b3J5SW52b2NhdGlvbnMpIHsKICAgICAgLy8gSWYgdGhlIGludm9jYXRpb24gd2FzIGludmFsaWQsIGl0IG9yIGl0cyBwYXJlbnQgaGFzIGFscmVhZHkgYmVlbgogICAgICAvLyBkZXN1Z2FyZWQgaW50byBhbiBleGNlcHRpb24gdGhyb3dpbmcgZXhwcmVzc2lvbi4gIFRoZXJlIGlzIG5vdGhpbmcgdG8KICAgICAgLy8gcmVzb2x2ZSBhbnltb3JlLiAgTm90ZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZSBpbnZvY2F0aW9uJ3MgcGFyZW50CiAgICAgIC8vIHdhcyBpbnZhbGlkLCB0eXBlIGluZmVyZW5jZSB3b24ndCByZWFjaCB0aGUgaW52b2NhdGlvbiBub2RlIGFuZCB3b24ndAogICAgICAvLyBzZXQgaXRzIGluZmVycmVkVHlwZSBmaWVsZC4gIElmIHR5cGUgaW5mZXJlbmNlIGlzIGRpc2FibGVkLCByZWFjaCB0bwogICAgICAvLyB0aGUgb3V0ZXJtb3N0IHBhcmVudCB0byBjaGVjayBpZiB0aGUgbm9kZSBpcyBhIGRlYWQgY29kZS4KICAgICAgaWYgKGludm9jYXRpb24ucGFyZW50ID09IG51bGwpIGNvbnRpbnVlOwogICAgICBpZiAodHlwZUluZmVycmVyICE9IG51bGwpIHsKICAgICAgICBpZiAoaW52b2NhdGlvbiBpcyBGYWN0b3J5Q29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQgJiYKICAgICAgICAgICAgaW52b2NhdGlvbi5pbmZlcnJlZFR5cGUgPT0gbnVsbCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIFRyZWVOb2RlIHBhcmVudCA9IGludm9jYXRpb24ucGFyZW50OwogICAgICAgIHdoaWxlIChwYXJlbnQgaXMhIENvbXBvbmVudCAmJiBwYXJlbnQgIT0gbnVsbCkgewogICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsKSBjb250aW51ZTsKICAgICAgfQoKICAgICAgUHJvY2VkdXJlIGluaXRpYWxUYXJnZXQgPSBpbnZvY2F0aW9uLnRhcmdldDsKICAgICAgRXhwcmVzc2lvbiByZXBsYWNlbWVudE5vZGU7CgogICAgICBSZWRpcmVjdGlvblRhcmdldCByZWRpcmVjdGlvblRhcmdldCA9CiAgICAgICAgICBnZXRSZWRpcmVjdGlvblRhcmdldChpbml0aWFsVGFyZ2V0LCB0aGlzLCBsZWdhY3lNb2RlOiBsZWdhY3lNb2RlKTsKICAgICAgTWVtYmVyIHJlc29sdmVkVGFyZ2V0ID0gcmVkaXJlY3Rpb25UYXJnZXQ/LnRhcmdldDsKCiAgICAgIGlmIChyZXNvbHZlZFRhcmdldCA9PSBudWxsKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBjb25zdHJ1Y3Rvck5hbWVGb3JEaWFnbm9zdGljcyhpbml0aWFsVGFyZ2V0Lm5hbWUubmFtZSwKICAgICAgICAgICAgY2xhc3NOYW1lOiBpbml0aWFsVGFyZ2V0LmVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBSZXBvcnQgdGhpcyBlcnJvciBlYXJsaWVyLgogICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVDeWNsaWNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBpbml0aWFsVGFyZ2V0LmZpbGVPZmZzZXQsCiAgICAgICAgICAgIG5hbWUubGVuZ3RoKSk7CiAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRUYXJnZXQgaXMgQ29uc3RydWN0b3IgJiYKICAgICAgICAgIHJlc29sdmVkVGFyZ2V0LmVuY2xvc2luZ0NsYXNzLmlzQWJzdHJhY3QpIHsKICAgICAgICByZXBsYWNlbWVudE5vZGUgPSBldmFsdWF0ZUFyZ3VtZW50c0JlZm9yZSgKICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLCBudWxsLAogICAgICAgICAgICAgICAgdHlwZXM6IGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgICAgICAgbmFtZWQ6IGludm9jYXRpb24uYXJndW1lbnRzLm5hbWVkKSwKICAgICAgICAgICAgYnVpbGRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb24KICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhyZXNvbHZlZFRhcmdldC5lbmNsb3NpbmdDbGFzcy5uYW1lKSwKICAgICAgICAgICAgICAgIHJlc29sdmVkVGFyZ2V0LmVuY2xvc2luZ0NsYXNzLm5hbWUsCiAgICAgICAgICAgICAgICBpbml0aWFsVGFyZ2V0LmZpbGVPZmZzZXQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5IHJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgPQogICAgICAgICAgICBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHJlc29sdmVkVGFyZ2V0KTsKICAgICAgICBpZiAocmVkaXJlY3RpbmdGYWN0b3J5Qm9keSAhPSBudWxsKSB7CiAgICAgICAgICAvLyBJZiB0aGUgcmVkaXJlY3Rpb24gdGFyZ2V0IGlzIGl0c2VsZiBhIHJlZGlyZWN0aW5nIGZhY3RvcnksIGl0IG1lYW5zCiAgICAgICAgICAvLyB0aGF0IGl0IGlzIHVucmVzb2x2ZWQuCiAgICAgICAgICBhc3NlcnQocmVkaXJlY3RpbmdGYWN0b3J5Qm9keS5pc1VucmVzb2x2ZWQpOwogICAgICAgICAgU3RyaW5nIGVycm9yTmFtZSA9IHJlZGlyZWN0aW5nRmFjdG9yeUJvZHkudW5yZXNvbHZlZE5hbWU7CgogICAgICAgICAgcmVwbGFjZW1lbnROb2RlID0gdGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgICBmb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwobnVsbCkKICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGludm9jYXRpb24uZmlsZU9mZnNldCwKICAgICAgICAgICAgICBlcnJvck5hbWUsCiAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLCBudWxsLAogICAgICAgICAgICAgICAgICB0eXBlczogaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXMsCiAgICAgICAgICAgICAgICAgIG5hbWVkOiBpbnZvY2F0aW9uLmFyZ3VtZW50cy5uYW1lZCksCiAgICAgICAgICAgICAgaW5pdGlhbFRhcmdldC5maWxlT2Zmc2V0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgICAgaW5pdGlhbFRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgICBpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlcyk7CiAgICAgICAgICBpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlcy5jbGVhcigpOwogICAgICAgICAgaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXMubGVuZ3RoID0KICAgICAgICAgICAgICByZWRpcmVjdGlvblRhcmdldC50eXBlQXJndW1lbnRzLmxlbmd0aDsKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXNbaV0gPQogICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHJlZGlyZWN0aW9uVGFyZ2V0LnR5cGVBcmd1bWVudHNbaV0pOwogICAgICAgICAgfQoKICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IGJ1aWxkU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgICByZXNvbHZlZFRhcmdldCwKICAgICAgICAgICAgICBmb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwsIG51bGwsCiAgICAgICAgICAgICAgICAgIHR5cGVzOiBpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgICAgICAgICAgbmFtZWQ6IGludm9jYXRpb24uYXJndW1lbnRzLm5hbWVkKSwKICAgICAgICAgICAgICBjb25zdG5lc3M6IGludm9jYXRpb24uaXNDb25zdAogICAgICAgICAgICAgICAgICA/IENvbnN0bmVzcy5leHBsaWNpdENvbnN0CiAgICAgICAgICAgICAgICAgIDogQ29uc3RuZXNzLmV4cGxpY2l0TmV3LAogICAgICAgICAgICAgIGNoYXJPZmZzZXQ6IGludm9jYXRpb24uZmlsZU9mZnNldCk7CiAgICAgICAgICAvLyBUT0RPKGRtaXRyeWFzKTogRmluZCBhIGJldHRlciB3YXkgdG8gdW53cmFwCiAgICAgICAgICAvLyBbU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50XSBvciBub3QgdG8gYnVpbGQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlCiAgICAgICAgICAvLyB3aGVuIGl0J3Mgbm90IG5lZWRlZC4KICAgICAgICAgIGlmIChyZXBsYWNlbWVudE5vZGUgaXMgc2hhZG93LlN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCkgewogICAgICAgICAgICByZXBsYWNlbWVudE5vZGUgPSBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihyZXBsYWNlbWVudE5vZGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgaW52b2NhdGlvbi5yZXBsYWNlV2l0aChyZXBsYWNlbWVudE5vZGUpOwogICAgfQogICAgcmVkaXJlY3RpbmdGYWN0b3J5SW52b2NhdGlvbnMuY2xlYXIoKTsKICB9CgogIHZvaWQgZmluaXNoVmFyaWFibGVNZXRhZGF0YSgpIHsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzV2l0aE1ldGFkYXRhID0KICAgICAgICB0aGlzLnZhcmlhYmxlc1dpdGhNZXRhZGF0YTsKICAgIHRoaXMudmFyaWFibGVzV2l0aE1ldGFkYXRhID0gbnVsbDsKICAgIExpc3Q8TGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPj4gbXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGEgPQogICAgICAgIHRoaXMubXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGE7CiAgICB0aGlzLm11bHRpVmFyaWFibGVzV2l0aE1ldGFkYXRhID0gbnVsbDsKCiAgICBpZiAodmFyaWFibGVzV2l0aE1ldGFkYXRhICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJpYWJsZXNXaXRoTWV0YWRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICBpbmZlckFubm90YXRpb25zKHZhcmlhYmxlc1dpdGhNZXRhZGF0YVtpXS5hbm5vdGF0aW9ucyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChtdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcyA9IG11bHRpVmFyaWFibGVzV2l0aE1ldGFkYXRhW2ldOwogICAgICAgIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSB2YXJpYWJsZXMuZmlyc3QuYW5ub3RhdGlvbnM7CiAgICAgICAgaW5mZXJBbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCB2YXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNsb25lciA/Pz0gbmV3IENsb25lVmlzaXRvcigpOwogICAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpXTsKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyaWFibGUuYWRkQW5ub3RhdGlvbihjbG9uZXIuY2xvbmUoYW5ub3RhdGlvbnNbaV0pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIExpc3Q8RXhwcmVzc2lvbj4gZmluaXNoTWV0YWRhdGEoVHJlZU5vZGUgcGFyZW50KSB7CiAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zID0gcG9wKCk7CiAgICBpbmZlckFubm90YXRpb25zKGV4cHJlc3Npb25zKTsKCiAgICAvLyBUaGUgaW52b2NhdGlvbiBvZiBbcmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHNdIGJlbG93IG1heSBjaGFuZ2UgdGhlCiAgICAvLyByb290IG5vZGVzIG9mIHRoZSBhbm5vdGF0aW9uIGV4cHJlc3Npb25zLiAgV2UgbmVlZCB0byBoYXZlIGEgcGFyZW50IG9mCiAgICAvLyB0aGUgYW5ub3RhdGlvbiBub2RlcyBiZWZvcmUgdGhlIHJlc29sdXRpb24gaXMgcGVyZm9ybWVkLCB0byBjb2xsZWN0IGFuZAogICAgLy8gcmV0dXJuIHRoZW0gbGF0ZXIuICBJZiBbcGFyZW50XSBpcyBub3QgcHJvdmlkZWQsIFt0ZW1wb3JhcnlQYXJlbnRdIGlzCiAgICAvLyB1c2VkLgogICAgTGlzdExpdGVyYWwgdGVtcG9yYXJ5UGFyZW50OwoKICAgIGlmIChwYXJlbnQgaXMgQ2xhc3MpIHsKICAgICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgICBwYXJlbnQuYWRkQW5ub3RhdGlvbihleHByZXNzaW9uKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXJlbnQgaXMgTGlicmFyeSkgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBMaWJyYXJ5RGVwZW5kZW5jeSkgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBMaWJyYXJ5UGFydCkgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBNZW1iZXIpIHsKICAgICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgICBwYXJlbnQuYWRkQW5ub3RhdGlvbihleHByZXNzaW9uKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXJlbnQgaXMgVHlwZWRlZikgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBUeXBlUGFyYW1ldGVyKSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIFZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgICBwYXJlbnQuYWRkQW5ub3RhdGlvbihleHByZXNzaW9uKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGVtcG9yYXJ5UGFyZW50ID0gbmV3IExpc3RMaXRlcmFsKGV4cHJlc3Npb25zKTsKICAgIH0KICAgIHJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzKCk7CiAgICBmaW5pc2hWYXJpYWJsZU1ldGFkYXRhKCk7CiAgICByZXR1cm4gdGVtcG9yYXJ5UGFyZW50ICE9IG51bGwgPyB0ZW1wb3JhcnlQYXJlbnQuZXhwcmVzc2lvbnMgOiBleHByZXNzaW9uczsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gcGFyc2VTaW5nbGVFeHByZXNzaW9uKAogICAgICBQYXJzZXIgcGFyc2VyLCBUb2tlbiB0b2tlbiwgRnVuY3Rpb25Ob2RlIHBhcmFtZXRlcnMpIHsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlckJ1aWxkZXJzOwogICAgZm9yIChUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gcGFyYW1ldGVycy50eXBlUGFyYW1ldGVycykgewogICAgICB0eXBlUGFyYW1ldGVyQnVpbGRlcnMgPz89IDxUeXBlVmFyaWFibGVCdWlsZGVyPltdOwogICAgICB0eXBlUGFyYW1ldGVyQnVpbGRlcnMKICAgICAgICAgIC5hZGQobmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIuZnJvbUtlcm5lbCh0eXBlUGFyYW1ldGVyLCBsaWJyYXJ5KSk7CiAgICB9CiAgICBlbnRlckZ1bmN0aW9uVHlwZVNjb3BlKHR5cGVQYXJhbWV0ZXJCdWlsZGVycyk7CgogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0KICAgICAgICBwYXJhbWV0ZXJzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCA9PSAwCiAgICAgICAgICAgID8gbnVsbAogICAgICAgICAgICA6IG5ldyBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KAogICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZm9ybWFsID0gcGFyYW1ldGVycy5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgZm9ybWFsc1tpXSA9IG5ldyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyKAogICAgICAgICAgbnVsbCwgMCwgbnVsbCwgZm9ybWFsLm5hbWUsIGxpYnJhcnksIGZvcm1hbC5maWxlT2Zmc2V0KQogICAgICAgIC4uZGVjbGFyYXRpb24gPSBmb3JtYWw7CiAgICB9CiAgICBlbnRlckxvY2FsU2NvcGUoCiAgICAgICAgbnVsbCwKICAgICAgICBuZXcgRm9ybWFsUGFyYW1ldGVycyhmb3JtYWxzLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIG5vTGVuZ3RoLCB1cmkpCiAgICAgICAgICAgIC5jb21wdXRlRm9ybWFsUGFyYW1ldGVyU2NvcGUoc2NvcGUsIG1lbWJlciwgdGhpcykpOwoKICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihwYXJzZXIuc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbikpOwoKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBUb2tlbiBlb2YgPSB0b2tlbi5uZXh0OwoKICAgIGlmICghZW9mLmlzRW9mKSB7CiAgICAgIGV4cHJlc3Npb24gPSB3cmFwSW5Mb2NhdGVkUHJvYmxlbSgKICAgICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgICBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRPbmVFeHByZXNzaW9uCiAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGVvZi5jaGFyT2Zmc2V0LCBlb2YubGVuZ3RoKSk7CiAgICB9CgogICAgUmV0dXJuSnVkZ21lbnQgZmFrZVJldHVybiA9IG5ldyBSZXR1cm5KdWRnbWVudChudWxsLCBleHByZXNzaW9uKTsKCiAgICB0eXBlSW5mZXJyZXI/LmluZmVyRnVuY3Rpb25Cb2R5KAogICAgICAgIHRoaXMsIGNvbnN0IER5bmFtaWNUeXBlKCksIEFzeW5jTWFya2VyLlN5bmMsIGZha2VSZXR1cm4pOwoKICAgIHJldHVybiBmYWtlUmV0dXJuLmV4cHJlc3Npb247CiAgfQoKICB2b2lkIHBhcnNlSW5pdGlhbGl6ZXJzKFRva2VuIHRva2VuKSB7CiAgICBQYXJzZXIgcGFyc2VyID0gbmV3IFBhcnNlcih0aGlzKTsKICAgIGlmICghdG9rZW4uaXNFb2YpIHsKICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VJbml0aWFsaXplcnModG9rZW4pOwogICAgICBjaGVja0VtcHR5KHRva2VuLmNoYXJPZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgaGFuZGxlTm9Jbml0aWFsaXplcnMoKTsKICAgIH0KICAgIC8vIFdlIGFyZSBwYXNzaW5nIFtBc3luY01hcmtlci5TeW5jXSBiZWNhdXNlIHRoZSBlcnJvciB3aWxsIGJlIHJlcG9ydGVkCiAgICAvLyBhbHJlYWR5LgogICAgZmluaXNoQ29uc3RydWN0b3IobWVtYmVyLCBBc3luY01hcmtlci5TeW5jKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VGaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBQYXJzZXIgcGFyc2VyID0gbmV3IFBhcnNlcih0aGlzKTsKICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihwYXJzZXIuc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbikpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIGNoZWNrRW1wdHkodG9rZW4uY2hhck9mZnNldCk7CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VBbm5vdGF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBQYXJzZXIgcGFyc2VyID0gbmV3IFBhcnNlcih0aGlzKTsKICAgIHRva2VuID0gcGFyc2VyLnBhcnNlTWV0YWRhdGEocGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pKTsKICAgIEV4cHJlc3Npb24gYW5ub3RhdGlvbiA9IHBvcCgpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIHJldHVybiBhbm5vdGF0aW9uOwogIH0KCiAgdm9pZCBmaW5pc2hDb25zdHJ1Y3RvcigKICAgICAgQ29uc3RydWN0b3JCdWlsZGVyIGJ1aWxkZXIsIEFzeW5jTWFya2VyIGFzeW5jTW9kaWZpZXIpIHsKICAgIC8vLyBRdW90ZXMgYmVsb3cgYXJlIGZyb20gW0RhcnQgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiwgNHRoCiAgICAvLy8gRWRpdGlvbl0oCiAgICAvLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9maWxlcy9FQ01BLVNUL0VDTUEtNDA4LnBkZikuCiAgICBhc3NlcnQoYnVpbGRlciA9PSBtZW1iZXIpOwogICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBidWlsZGVyLmNvbnN0cnVjdG9yOwogICAgaWYgKGFzeW5jTW9kaWZpZXIgIT0gQXN5bmNNYXJrZXIuU3luYykgewogICAgICAvLyBUT0RPKGFoZSk6IENoYW5nZSB0aGlzIHRvIGEgbnVsbCBjaGVjay4KICAgICAgaW50IG9mZnNldCA9IGJ1aWxkZXIuYm9keT8uZmlsZU9mZnNldCA/PyBidWlsZGVyLmNoYXJPZmZzZXQ7CiAgICAgIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5hZGQoYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgICBidWlsZFByb2JsZW0oZmFzdGEubWVzc2FnZUNvbnN0cnVjdG9yTm90U3luYywgb2Zmc2V0LCBub0xlbmd0aCkpLAogICAgICAgICAgb2Zmc2V0KSk7CiAgICB9CiAgICBpZiAobmVlZHNJbXBsaWNpdFN1cGVySW5pdGlhbGl6ZXIpIHsKICAgICAgLy8vID5JZiBubyBzdXBlcmluaXRpYWxpemVyIGlzIHByb3ZpZGVkLCBhbiBpbXBsaWNpdCBzdXBlcmluaXRpYWxpemVyCiAgICAgIC8vLyA+b2YgdGhlIGZvcm0gc3VwZXIoKSBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIGvigJlzIGluaXRpYWxpemVyIGxpc3QsCiAgICAgIC8vLyA+dW5sZXNzIHRoZSBlbmNsb3NpbmcgY2xhc3MgaXMgY2xhc3MgT2JqZWN0LgogICAgICBDb25zdHJ1Y3RvciBzdXBlclRhcmdldCA9IGxvb2t1cENvbnN0cnVjdG9yKGVtcHR5TmFtZSwgaXNTdXBlcjogdHJ1ZSk7CiAgICAgIEluaXRpYWxpemVyIGluaXRpYWxpemVyOwogICAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gZm9yZXN0LmNyZWF0ZUFyZ3VtZW50c0VtcHR5KG5vTG9jYXRpb24pOwogICAgICBpZiAoc3VwZXJUYXJnZXQgPT0gbnVsbCB8fAogICAgICAgICAgY2hlY2tBcmd1bWVudHNGb3JGdW5jdGlvbihzdXBlclRhcmdldC5mdW5jdGlvbiwgYXJndW1lbnRzLAogICAgICAgICAgICAgICAgICBidWlsZGVyLmNoYXJPZmZzZXQsIGNvbnN0IDxUeXBlUGFyYW1ldGVyPltdKSAhPQogICAgICAgICAgICAgIG51bGwpIHsKICAgICAgICBTdHJpbmcgc3VwZXJjbGFzcyA9IGNsYXNzQnVpbGRlci5zdXBlcnR5cGUuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICAgICAgaW50IGxlbmd0aCA9IGNvbnN0cnVjdG9yLm5hbWUubmFtZS5sZW5ndGg7CiAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgICBsZW5ndGggPSAoY29uc3RydWN0b3IucGFyZW50IGFzIENsYXNzKS5uYW1lLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaW5pdGlhbGl6ZXIgPSBidWlsZEludmFsaWRJbml0aWFsaXplcigKICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3IKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhzdXBlcmNsYXNzKSwKICAgICAgICAgICAgICAgIGJ1aWxkZXIuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGxlbmd0aCkpLAogICAgICAgICAgICBidWlsZGVyLmNoYXJPZmZzZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIGluaXRpYWxpemVyID0gYnVpbGRTdXBlckluaXRpYWxpemVyKAogICAgICAgICAgICB0cnVlLCBzdXBlclRhcmdldCwgYXJndW1lbnRzLCBidWlsZGVyLmNoYXJPZmZzZXQpOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5hZGQoaW5pdGlhbGl6ZXIpOwogICAgfQogICAgc2V0UGFyZW50cyhjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMsIGNvbnN0cnVjdG9yKTsKICAgIGxpYnJhcnkubG9hZGVyLnRyYW5zZm9ybUxpc3RQb3N0SW5mZXJlbmNlKAogICAgICAgIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycywgdHJhbnNmb3JtU2V0TGl0ZXJhbHMsIHRyYW5zZm9ybUNvbGxlY3Rpb25zKTsKICAgIGlmIChjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5ID09IG51bGwpIHsKICAgICAgLy8vID5JZiBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgYyBpcyBub3QgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3RvcgogICAgICAvLy8gPmFuZCBubyBib2R5IGlzIHByb3ZpZGVkLCB0aGVuIGMgaW1wbGljaXRseSBoYXMgYW4gZW1wdHkgYm9keSB7fS4KICAgICAgLy8vIFdlIHVzZSBhbiBlbXB0eSBzdGF0ZW1lbnQgaW5zdGVhZC4KICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24uYm9keSA9IG5ldyBFbXB0eVN0YXRlbWVudCgpOwogICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5LnBhcmVudCA9IGNvbnN0cnVjdG9yLmZ1bmN0aW9uOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFeHByZXNzaW9uU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJFeHByZXNzaW9uU3RhdGVtZW50Iik7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KHBvcEZvckVmZmVjdCgpLCB0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRBcmd1bWVudHMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQXJndW1lbnRzIik7CiAgICBMaXN0PE9iamVjdD4gYXJndW1lbnRzID0gY291bnQgPT0gMAogICAgICAgID8gPE9iamVjdD5bXQogICAgICAgIDogY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8T2JqZWN0PigpLnBvcChzdGFjaywgY291bnQpOwogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KGJlZ2luVG9rZW4uY2hhck9mZnNldCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXggPSBhcmd1bWVudHMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgT2JqZWN0IG5vZGUgPSBhcmd1bWVudHNbaV07CiAgICAgIGlmIChub2RlIGlzIE5hbWVkRXhwcmVzc2lvbikgewogICAgICAgIGZpcnN0TmFtZWRBcmd1bWVudEluZGV4ID0KICAgICAgICAgICAgaSA8IGZpcnN0TmFtZWRBcmd1bWVudEluZGV4ID8gaSA6IGZpcnN0TmFtZWRBcmd1bWVudEluZGV4OwogICAgICB9IGVsc2UgewogICAgICAgIEV4cHJlc3Npb24gYXJndW1lbnQgPSB0b1ZhbHVlKG5vZGUpOwogICAgICAgIGFyZ3VtZW50c1tpXSA9IGFyZ3VtZW50OwogICAgICAgIGlmIChpID4gZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXgpIHsKICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IG5ldyBOYW1lZEV4cHJlc3Npb24oCiAgICAgICAgICAgICAgIiMkaSIsCiAgICAgICAgICAgICAgYnVpbGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VFeHBlY3RlZE5hbWVkQXJndW1lbnQsCiAgICAgICAgICAgICAgICAgIGZvcmVzdC5yZWFkT2Zmc2V0KGFyZ3VtZW50KSwgbm9MZW5ndGgpKQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBiZWdpblRva2VuLmNoYXJPZmZzZXQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXggPCBhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gcG9zaXRpb25hbCA9IG5ldyBMaXN0PEV4cHJlc3Npb24+LmZyb20oCiAgICAgICAgICBhcmd1bWVudHMuZ2V0UmFuZ2UoMCwgZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXgpKTsKICAgICAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkID0gbmV3IExpc3Q8TmFtZWRFeHByZXNzaW9uPi5mcm9tKAogICAgICAgICAgYXJndW1lbnRzLmdldFJhbmdlKGZpcnN0TmFtZWRBcmd1bWVudEluZGV4LCBhcmd1bWVudHMubGVuZ3RoKSk7CiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhwb3NpdGlvbmFsLCBiZWdpblRva2VuLCBuYW1lZDogbmFtZWQpKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oa21pbGxpa2luKTogRmluZCBhIHdheSB0byBhdm9pZCBhbGxvY2F0aW5nIGEgc2Vjb25kIGxpc3QgaW4gdGhlCiAgICAgIC8vIGNhc2Ugd2hlcmUgdGhlcmUgd2VyZSBubyBuYW1lZCBhcmd1bWVudHMsIHdoaWNoIGlzIGEgY29tbW9uIG9uZS4KICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlQXJndW1lbnRzKAogICAgICAgICAgbmV3IExpc3Q8RXhwcmVzc2lvbj4uZnJvbShhcmd1bWVudHMpLCBiZWdpblRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlBhcmVudGhlc2l6ZWRDb25kaXRpb24iKTsKICAgIHB1c2goZm9yZXN0LmNyZWF0ZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oCiAgICAgICAgdG9rZW4sIHBvcEZvclZhbHVlKCksIHRva2VuLmVuZEdyb3VwKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIpOwogICAgRXhwcmVzc2lvbiB2YWx1ZSA9IHBvcEZvclZhbHVlKCk7CiAgICBpZiAodmFsdWUgaXMgU2hhZG93TGFyZ2VJbnRMaXRlcmFsKSB7CiAgICAgIC8vIFdlIG5lZWQgdG8ga25vdyB0aGF0IHRoZSBleHByZXNzaW9uIHdhcyBwYXJlbnRoZXNpemVkIGJlY2F1c2Ugd2Ugd2lsbAogICAgICAvLyB0cmVhdCAtbiBkaWZmZXJlbnRseSBmcm9tIC0obikuICBJZiB0aGUgZXhwcmVzc2lvbiBvY2N1cnMgaW4gYSBkb3VibGUKICAgICAgLy8gY29udGV4dCwgLW4gaXMgYSBkb3VibGUgbGl0ZXJhbCBhbmQgLShuKSBpcyBhbiBhcHBsaWNhdGlvbiBvZiB1bmFyeS0gdG8KICAgICAgLy8gYW4gaW50ZWdlciBsaXRlcmFsLiAgQW5kIGluIGFueSBvdGhlciBjb250ZXh0LCAnLScgaXMgcGFydCBvZiB0aGUKICAgICAgLy8gc3ludGF4IG9mIC1uLCBpLmUuLCAtOTIyMzM3MjAzNjg1NDc3NTgwOCBpcyBPSyBhbmQgaXQgaXMgdGhlIG1pbmltdW0KICAgICAgLy8gNjQtYml0IGludGVnZXIsIGFuZCAnLScgaXMgYW4gYXBwbGljYXRpb24gb2YgdW5hcnktIGluIC0obiksIGkuZS4sCiAgICAgIC8vIC0oOTIyMzM3MjAzNjg1NDc3NTgwOCkgaXMgYW4gZXJyb3IgYmVjYXVzZSB0aGUgbGl0ZXJhbCBkb2VzIG5vdCBmaXQgaW4KICAgICAgLy8gNjQtYml0cy4KICAgICAgcHVzaCh2YWx1ZS4uaXNQYXJlbnRoZXNpemVkID0gdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBQYXJlbnRoZXNpemVkRXhwcmVzc2lvbkdlbmVyYXRvcih0aGlzLCB0b2tlbi5lbmRHcm91cCwgdmFsdWUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU2VuZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUoYmVnaW5Ub2tlbiwgWwogICAgICBWYWx1ZUtpbmQuQXJndW1lbnRzT3JOdWxsLAogICAgICBWYWx1ZUtpbmQuVHlwZUFyZ3VtZW50c09yTnVsbCwKICAgICAgdW5pb25PZktpbmRzKFsKICAgICAgICBWYWx1ZUtpbmQuRXhwcmVzc2lvbiwKICAgICAgICBWYWx1ZUtpbmQuR2VuZXJhdG9yLAogICAgICAgIFZhbHVlS2luZC5JZGVudGlmaWVyLAogICAgICAgIFZhbHVlS2luZC5QYXJzZXJSZWNvdmVyeSwKICAgICAgICBWYWx1ZUtpbmQuUHJvYmxlbUJ1aWxkZXIKICAgICAgXSkKICAgIF0pKTsKICAgIGRlYnVnRXZlbnQoIlNlbmQiKTsKICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPSBwb3AoKTsKICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMgPSBwb3AoKTsKICAgIE9iamVjdCByZWNlaXZlciA9IHBvcCgpOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsICYmIHR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhc3NlcnQoZm9yZXN0LmFyZ3VtZW50c1R5cGVBcmd1bWVudHMoYXJndW1lbnRzKS5pc0VtcHR5KTsKICAgICAgZm9yZXN0LmFyZ3VtZW50c1NldFR5cGVBcmd1bWVudHMoCiAgICAgICAgICBhcmd1bWVudHMsIGJ1aWxkRGFydFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cykpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KHR5cGVBcmd1bWVudHMgPT0gbnVsbCk7CiAgICB9CiAgICBpZiAocmVjZWl2ZXIgaXMgSWRlbnRpZmllcikgewogICAgICBOYW1lIG5hbWUgPSBuZXcgTmFtZShyZWNlaXZlci5uYW1lLCBsaWJyYXJ5Lm5hbWVPcmlnaW4pOwogICAgICBpZiAoYXJndW1lbnRzID09IG51bGwpIHsKICAgICAgICBwdXNoKG5ldyBJbmNvbXBsZXRlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IodGhpcywgYmVnaW5Ub2tlbiwgbmFtZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHB1c2gobmV3IFNlbmRBY2Nlc3NHZW5lcmF0b3IodGhpcywgYmVnaW5Ub2tlbiwgbmFtZSwgYXJndW1lbnRzKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzID09IG51bGwpIHsKICAgICAgcHVzaChyZWNlaXZlcik7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZpbmlzaFNlbmQocmVjZWl2ZXIsIGFyZ3VtZW50cywgYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBmaW5pc2hTZW5kKE9iamVjdCByZWNlaXZlciwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IGNoYXJPZmZzZXQpIHsKICAgIGlmIChyZWNlaXZlciBpcyBHZW5lcmF0b3IpIHsKICAgICAgcmV0dXJuIHJlY2VpdmVyLmRvSW52b2NhdGlvbihjaGFyT2Zmc2V0LCBhcmd1bWVudHMpOwogICAgfSBlbHNlIGlmIChyZWNlaXZlciBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICByZXR1cm4gbmV3IFBhcnNlckVycm9yR2VuZXJhdG9yKHRoaXMsIG51bGwsIGZhc3RhLm1lc3NhZ2VTeW50aGV0aWNUb2tlbik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gYnVpbGRNZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgdG9WYWx1ZShyZWNlaXZlciksIGNhbGxOYW1lLCBhcmd1bWVudHMsIGNoYXJPZmZzZXQsCiAgICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2FzY2FkZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5DYXNjYWRlIik7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgaWYgKGV4cHJlc3Npb24gaXMgQ2FzY2FkZUp1ZGdtZW50KSB7CiAgICAgIHB1c2goZXhwcmVzc2lvbik7CiAgICAgIHB1c2gobmV3IFZhcmlhYmxlVXNlR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBleHByZXNzaW9uLnZhcmlhYmxlKSk7CiAgICAgIGV4cHJlc3Npb24uZXh0ZW5kKCk7CiAgICB9IGVsc2UgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudC5mb3JWYWx1ZSgKICAgICAgICAgIGV4cHJlc3Npb24sIGZ1bmN0aW9uTmVzdGluZ0xldmVsKQogICAgICAgIC4uZmlsZU9mZnNldCA9IGV4cHJlc3Npb24uZmlsZU9mZnNldDsKICAgICAgcHVzaChuZXcgQ2FzY2FkZUp1ZGdtZW50KHZhcmlhYmxlKS4uZmlsZU9mZnNldCA9IGV4cHJlc3Npb24uZmlsZU9mZnNldCk7CiAgICAgIHB1c2gobmV3IFZhcmlhYmxlVXNlR2VuZXJhdG9yKHRoaXMsIHRva2VuLCB2YXJpYWJsZSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDYXNjYWRlKCkgewogICAgZGVidWdFdmVudCgiZW5kQ2FzY2FkZSIpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcG9wRm9yRWZmZWN0KCk7CiAgICBDYXNjYWRlSnVkZ21lbnQgY2FzY2FkZVJlY2VpdmVyID0gcG9wKCk7CiAgICBjYXNjYWRlUmVjZWl2ZXIuZmluYWxpemUoZXhwcmVzc2lvbik7CiAgICBwdXNoKGNhc2NhZGVSZWNlaXZlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2FzZUV4cHJlc3Npb24oVG9rZW4gY2FzZUtleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luQ2FzZUV4cHJlc3Npb24iKTsKICAgIHN1cGVyLnB1c2goY29uc3RhbnRDb250ZXh0KTsKICAgIGNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2FzZUV4cHJlc3Npb24oVG9rZW4gY29sb24pIHsKICAgIGRlYnVnRXZlbnQoImVuZENhc2VFeHByZXNzaW9uIik7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgY29uc3RhbnRDb250ZXh0ID0gcG9wKCk7CiAgICBzdXBlci5wdXNoKGV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGlmIChvcHRpb25hbCgiJiYiLCB0b2tlbikgfHwgb3B0aW9uYWwoInx8IiwgdG9rZW4pKSB7CiAgICAgIEV4cHJlc3Npb24gbGhzID0gcG9wRm9yVmFsdWUoKTsKICAgICAgdHlwZVByb21vdGVyPy5lbnRlckxvZ2ljYWxFeHByZXNzaW9uKGxocywgdG9rZW4uc3RyaW5nVmFsdWUpOwogICAgICBwdXNoKGxocyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkJpbmFyeUV4cHJlc3Npb24iKTsKICAgIGlmIChvcHRpb25hbCgiLiIsIHRva2VuKSB8fCBvcHRpb25hbCgiLi4iLCB0b2tlbikpIHsKICAgICAgcmV0dXJuIGRvRG90T3JDYXNjYWRlRXhwcmVzc2lvbih0b2tlbik7CiAgICB9CiAgICBpZiAob3B0aW9uYWwoIiYmIiwgdG9rZW4pIHx8IG9wdGlvbmFsKCJ8fCIsIHRva2VuKSkgewogICAgICByZXR1cm4gZG9Mb2dpY2FsRXhwcmVzc2lvbih0b2tlbik7CiAgICB9CiAgICBpZiAob3B0aW9uYWwoIj8/IiwgdG9rZW4pKSByZXR1cm4gZG9JZk51bGwodG9rZW4pOwogICAgaWYgKG9wdGlvbmFsKCI/LiIsIHRva2VuKSkgcmV0dXJuIGRvSWZOb3ROdWxsKHRva2VuKTsKICAgIEV4cHJlc3Npb24gYXJndW1lbnQgPSBwb3BGb3JWYWx1ZSgpOwogICAgT2JqZWN0IHJlY2VpdmVyID0gcG9wKCk7CiAgICBib29sIGlzU3VwZXIgPSBmYWxzZTsKICAgIGlmIChyZWNlaXZlciBpcyBUaGlzQWNjZXNzR2VuZXJhdG9yICYmIHJlY2VpdmVyLmlzU3VwZXIpIHsKICAgICAgVGhpc0FjY2Vzc0dlbmVyYXRvciB0aGlzQWNjZXNzb3JSZWNlaXZlciA9IHJlY2VpdmVyOwogICAgICBpc1N1cGVyID0gdHJ1ZTsKICAgICAgcmVjZWl2ZXIgPSBmb3Jlc3QuY3JlYXRlVGhpc0V4cHJlc3Npb24odGhpc0FjY2Vzc29yUmVjZWl2ZXIudG9rZW4pOwogICAgfQogICAgcHVzaChidWlsZEJpbmFyeU9wZXJhdG9yKHRvVmFsdWUocmVjZWl2ZXIpLCB0b2tlbiwgYXJndW1lbnQsIGlzU3VwZXIpKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRCaW5hcnlPcGVyYXRvcigKICAgICAgRXhwcmVzc2lvbiBhLCBUb2tlbiB0b2tlbiwgRXhwcmVzc2lvbiBiLCBib29sIGlzU3VwZXIpIHsKICAgIGJvb2wgbmVnYXRlID0gZmFsc2U7CiAgICBTdHJpbmcgb3BlcmF0b3IgPSB0b2tlbi5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwoIiE9Iiwgb3BlcmF0b3IpKSB7CiAgICAgIG9wZXJhdG9yID0gIj09IjsKICAgICAgbmVnYXRlID0gdHJ1ZTsKICAgIH0KICAgIGlmICghaXNCaW5hcnlPcGVyYXRvcihvcGVyYXRvcikgJiYgIWlzTWludXNPcGVyYXRvcihvcGVyYXRvcikpIHsKICAgICAgaWYgKGlzVXNlckRlZmluYWJsZU9wZXJhdG9yKG9wZXJhdG9yKSkgewogICAgICAgIHJldHVybiBidWlsZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlTm90QmluYXJ5T3BlcmF0b3Iud2l0aEFyZ3VtZW50cyh0b2tlbiksCiAgICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIHRva2VuLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUludmFsaWRPcGVyYXRvci53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgRXhwcmVzc2lvbiByZXN1bHQgPSBidWlsZE1ldGhvZEludm9jYXRpb24oYSwgbmV3IE5hbWUob3BlcmF0b3IpLAogICAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyg8RXhwcmVzc2lvbj5bYl0sIG5vTG9jYXRpb24pLCB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgLy8gVGhpcyAqY291bGQqIGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgd2UgY2FuJ3Qga25vdyB3aXRob3V0CiAgICAgICAgICAvLyBldmFsdWF0aW5nIFthXSBhbmQgW2JdLgogICAgICAgICAgaXNDb25zdGFudEV4cHJlc3Npb246ICFpc1N1cGVyLAogICAgICAgICAgaXNTdXBlcjogaXNTdXBlcik7CiAgICAgIHJldHVybiBuZWdhdGUgPyBmb3Jlc3QuY3JlYXRlTm90KHJlc3VsdCwgbnVsbCwgdHJ1ZSkgOiByZXN1bHQ7CiAgICB9CiAgfQoKICB2b2lkIGRvTG9naWNhbEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIEV4cHJlc3Npb24gYXJndW1lbnQgPSBwb3BGb3JWYWx1ZSgpOwogICAgRXhwcmVzc2lvbiByZWNlaXZlciA9IHBvcCgpOwogICAgRXhwcmVzc2lvbiBsb2dpY2FsRXhwcmVzc2lvbiA9CiAgICAgICAgZm9yZXN0LmNyZWF0ZUxvZ2ljYWxFeHByZXNzaW9uKHJlY2VpdmVyLCB0b2tlbiwgYXJndW1lbnQpOwogICAgdHlwZVByb21vdGVyPy5leGl0TG9naWNhbEV4cHJlc3Npb24oYXJndW1lbnQsIGxvZ2ljYWxFeHByZXNzaW9uKTsKICAgIHB1c2gobG9naWNhbEV4cHJlc3Npb24pOwogIH0KCiAgLy8vIEhhbmRsZSBgYSA/PyBiYC4KICB2b2lkIGRvSWZOdWxsKFRva2VuIHRva2VuKSB7CiAgICBFeHByZXNzaW9uIGIgPSBwb3BGb3JWYWx1ZSgpOwogICAgRXhwcmVzc2lvbiBhID0gcG9wRm9yVmFsdWUoKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShhKTsKICAgIHB1c2gobmV3IElmTnVsbEp1ZGdtZW50KAogICAgICAgIHZhcmlhYmxlLAogICAgICAgIGZvcmVzdC5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgICAgIGJ1aWxkSXNOdWxsKG5ldyBWYXJpYWJsZUdldCh2YXJpYWJsZSksIG9mZnNldEZvclRva2VuKHRva2VuKSwgdGhpcyksCiAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICBiLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICB9CgogIC8vLyBIYW5kbGUgYGE/LmIoLi4uKWAuCiAgdm9pZCBkb0lmTm90TnVsbChUb2tlbiB0b2tlbikgewogICAgT2JqZWN0IHNlbmQgPSBwb3AoKTsKICAgIGlmIChzZW5kIGlzIEluY29tcGxldGVTZW5kR2VuZXJhdG9yKSB7CiAgICAgIHB1c2goc2VuZC53aXRoUmVjZWl2ZXIocG9wKCksIHRva2VuLmNoYXJPZmZzZXQsIGlzTnVsbEF3YXJlOiB0cnVlKSk7CiAgICB9IGVsc2UgewogICAgICBwb3AoKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSk7CiAgICB9CiAgfQoKICB2b2lkIGRvRG90T3JDYXNjYWRlRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgT2JqZWN0IHNlbmQgPSBwb3AoKTsKICAgIGlmIChzZW5kIGlzIEluY29tcGxldGVTZW5kR2VuZXJhdG9yKSB7CiAgICAgIE9iamVjdCByZWNlaXZlciA9IG9wdGlvbmFsKCIuIiwgdG9rZW4pID8gcG9wKCkgOiBwb3BGb3JWYWx1ZSgpOwogICAgICBwdXNoKHNlbmQud2l0aFJlY2VpdmVyKHJlY2VpdmVyLCB0b2tlbi5jaGFyT2Zmc2V0KSk7CiAgICB9IGVsc2UgewogICAgICBwb3AoKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSk7CiAgICB9CiAgfQoKICBib29sIGFyZUFyZ3VtZW50c0NvbXBhdGlibGUoRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICAvLyBUT0RPKGFoZSk6IEltcGxlbWVudCB0aGlzLgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIFN0cmluZyBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCwKICAgICAge01lbWJlciBjYW5kaWRhdGUsCiAgICAgIGJvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNHZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzU2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2V9KSB7CiAgICBpbnQgbGVuZ3RoID0gbmFtZS5sZW5ndGg7CiAgICBpbnQgcGVyaW9kSW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCIuIik7CiAgICBpZiAocGVyaW9kSW5kZXggIT0gLTEpIHsKICAgICAgbGVuZ3RoIC09IHBlcmlvZEluZGV4ICsgMTsKICAgIH0KICAgIE5hbWUga2VybmVsTmFtZSA9IG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkubmFtZU9yaWdpbik7CiAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0OwogICAgaWYgKGNhbmRpZGF0ZSAhPSBudWxsICYmIGNhbmRpZGF0ZS5sb2NhdGlvbiAhPSBudWxsKSB7CiAgICAgIFVyaSB1cmkgPSBjYW5kaWRhdGUubG9jYXRpb24uZmlsZTsKICAgICAgaW50IG9mZnNldCA9IGNhbmRpZGF0ZS5maWxlT2Zmc2V0OwogICAgICBNZXNzYWdlIGNvbnRleHRNZXNzYWdlOwogICAgICBpbnQgbGVuZ3RoID0gbm9MZW5ndGg7CiAgICAgIGlmIChjYW5kaWRhdGUgaXMgQ29uc3RydWN0b3IgJiYgY2FuZGlkYXRlLmlzU3ludGhldGljKSB7CiAgICAgICAgb2Zmc2V0ID0gY2FuZGlkYXRlLmVuY2xvc2luZ0NsYXNzLmZpbGVPZmZzZXQ7CiAgICAgICAgY29udGV4dE1lc3NhZ2UgPSBmYXN0YS50ZW1wbGF0ZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IKICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoY2FuZGlkYXRlLmVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGxlbmd0aCA9IG5hbWUubGVuZ3RoOwogICAgICAgIGNvbnRleHRNZXNzYWdlID0gZmFzdGEubWVzc2FnZUNhbmRpZGF0ZUZvdW5kOwogICAgICB9CiAgICAgIGNvbnRleHQgPSBbY29udGV4dE1lc3NhZ2Uud2l0aExvY2F0aW9uKHVyaSwgb2Zmc2V0LCBsZW5ndGgpXTsKICAgIH0KICAgIGlmIChtZXNzYWdlID09IG51bGwpIHsKICAgICAgaWYgKGlzR2V0dGVyKSB7CiAgICAgICAgbWVzc2FnZSA9IHdhcm5VbnJlc29sdmVkR2V0KGtlcm5lbE5hbWUsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyLCByZXBvcnRXYXJuaW5nOiBmYWxzZSwgY29udGV4dDogY29udGV4dCkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0gZWxzZSBpZiAoaXNTZXR0ZXIpIHsKICAgICAgICBtZXNzYWdlID0gd2FyblVucmVzb2x2ZWRTZXQoa2VybmVsTmFtZSwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGlzU3VwZXI6IGlzU3VwZXIsIHJlcG9ydFdhcm5pbmc6IGZhbHNlLCBjb250ZXh0OiBjb250ZXh0KQogICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtZXNzYWdlID0gd2FyblVucmVzb2x2ZWRNZXRob2Qoa2VybmVsTmFtZSwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGlzU3VwZXI6IGlzU3VwZXIsIHJlcG9ydFdhcm5pbmc6IGZhbHNlLCBjb250ZXh0OiBjb250ZXh0KQogICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgfQogICAgaWYgKGxlZ2FjeU1vZGUgJiYgY29uc3RhbnRDb250ZXh0ID09IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UubGVuZ3RoLAogICAgICAgICAgd2FzSGFuZGxlZDogdHJ1ZSwgY29udGV4dDogY29udGV4dCk7CiAgICAgIHJldHVybiBmb3Jlc3QuY3JlYXRlVGhyb3coCiAgICAgICAgICBudWxsLAogICAgICAgICAgbGlicmFyeS5sb2FkZXIuaW5zdGFudGlhdGVOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgICByZWNlaXZlciwgbmFtZSwgYXJndW1lbnRzLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgIGlzTWV0aG9kOiAhaXNHZXR0ZXIgJiYgIWlzU2V0dGVyLAogICAgICAgICAgICAgIGlzR2V0dGVyOiBpc0dldHRlciwKICAgICAgICAgICAgICBpc1NldHRlcjogaXNTZXR0ZXIsCiAgICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLAogICAgICAgICAgICAgIGlzVG9wTGV2ZWw6ICFpc1N0YXRpYyAmJiAhaXNTdXBlcikpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIH0KICAgIHJldHVybiBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UubGVuZ3RoLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQpKTsKICB9CgogIEBvdmVycmlkZQogIE1lc3NhZ2Ugd2FyblVucmVzb2x2ZWRHZXQoTmFtZSBuYW1lLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIGJvb2wgcmVwb3J0V2FybmluZzogdHJ1ZSwKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pIHsKICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlzU3VwZXIKICAgICAgICA/IGZhc3RhLnRlbXBsYXRlU3VwZXJjbGFzc0hhc05vR2V0dGVyLndpdGhBcmd1bWVudHMobmFtZS5uYW1lKQogICAgICAgIDogZmFzdGEudGVtcGxhdGVHZXR0ZXJOb3RGb3VuZC53aXRoQXJndW1lbnRzKG5hbWUubmFtZSk7CiAgICBpZiAocmVwb3J0V2FybmluZykgewogICAgICBhZGRQcm9ibGVtRXJyb3JJZkNvbnN0KG1lc3NhZ2UsIGNoYXJPZmZzZXQsIG5hbWUubmFtZS5sZW5ndGgsCiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICAgIH0KICAgIHJldHVybiBtZXNzYWdlOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVzc2FnZSB3YXJuVW5yZXNvbHZlZFNldChOYW1lIG5hbWUsIGludCBjaGFyT2Zmc2V0LAogICAgICB7Ym9vbCBpc1N1cGVyOiBmYWxzZSwKICAgICAgYm9vbCByZXBvcnRXYXJuaW5nOiB0cnVlLAogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgTWVzc2FnZSBtZXNzYWdlID0gaXNTdXBlcgogICAgICAgID8gZmFzdGEudGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9TZXR0ZXIud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUpCiAgICAgICAgOiBmYXN0YS50ZW1wbGF0ZVNldHRlck5vdEZvdW5kLndpdGhBcmd1bWVudHMobmFtZS5uYW1lKTsKICAgIGlmIChyZXBvcnRXYXJuaW5nKSB7CiAgICAgIGFkZFByb2JsZW1FcnJvcklmQ29uc3QobWVzc2FnZSwgY2hhck9mZnNldCwgbmFtZS5uYW1lLmxlbmd0aCwKICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgfQogICAgcmV0dXJuIG1lc3NhZ2U7CiAgfQoKICBAb3ZlcnJpZGUKICBNZXNzYWdlIHdhcm5VbnJlc29sdmVkTWV0aG9kKE5hbWUgbmFtZSwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlLAogICAgICBib29sIHJlcG9ydFdhcm5pbmc6IHRydWUsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBTdHJpbmcgcGxhaW5OYW1lID0gbmFtZS5uYW1lOwogICAgaW50IGRvdEluZGV4ID0gcGxhaW5OYW1lLmxhc3RJbmRleE9mKCIuIik7CiAgICBpZiAoZG90SW5kZXggIT0gLTEpIHsKICAgICAgcGxhaW5OYW1lID0gcGxhaW5OYW1lLnN1YnN0cmluZyhkb3RJbmRleCArIDEpOwogICAgfQogICAgLy8gVE9ETyhhaGUpOiBUaGlzIGlzIHJhdGhlciBicml0dGxlLiBXZSB3b3VsZCBwcm9iYWJseSBiZSBiZXR0ZXIgb2ZmIHdpdGgKICAgIC8vIG1vcmUgcHJlY2lzZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGlzIGNhc2UuCiAgICBpbnQgbGVuZ3RoID0gcGxhaW5OYW1lLmxlbmd0aDsKICAgIGlmIChwbGFpbk5hbWUuc3RhcnRzV2l0aCgiWyIpKSB7CiAgICAgIGxlbmd0aCA9IDE7CiAgICB9CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBpc1N1cGVyCiAgICAgICAgPyBmYXN0YS50ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb01ldGhvZC53aXRoQXJndW1lbnRzKG5hbWUubmFtZSkKICAgICAgICA6IGZhc3RhLnRlbXBsYXRlTWV0aG9kTm90Rm91bmQud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUpOwogICAgaWYgKHJlcG9ydFdhcm5pbmcpIHsKICAgICAgYWRkUHJvYmxlbUVycm9ySWZDb25zdChtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGNvbnRleHQ6IGNvbnRleHQpOwogICAgfQogICAgcmV0dXJuIG1lc3NhZ2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdhcm5UeXBlQXJndW1lbnRzTWlzbWF0Y2goU3RyaW5nIG5hbWUsIGludCBleHBlY3RlZCwgaW50IGNoYXJPZmZzZXQpIHsKICAgIGFkZFByb2JsZW1FcnJvcklmQ29uc3QoCiAgICAgICAgZmFzdGEudGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaC53aXRoQXJndW1lbnRzKGV4cGVjdGVkKSwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIG5hbWUubGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlciBsb29rdXBJbnN0YW5jZU1lbWJlcihOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU2V0dGVyOiBmYWxzZSwgYm9vbCBpc1N1cGVyOiBmYWxzZX0pIHsKICAgIHJldHVybiBjbGFzc0J1aWxkZXIubG9va3VwSW5zdGFuY2VNZW1iZXIoaGllcmFyY2h5LCBuYW1lLAogICAgICAgIGlzU2V0dGVyOiBpc1NldHRlciwgaXNTdXBlcjogaXNTdXBlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvciBsb29rdXBDb25zdHJ1Y3RvcihOYW1lIG5hbWUsIHtib29sIGlzU3VwZXJ9KSB7CiAgICByZXR1cm4gY2xhc3NCdWlsZGVyLmxvb2t1cENvbnN0cnVjdG9yKG5hbWUsIGlzU3VwZXI6IGlzU3VwZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVJZGVudGlmaWVyIik7CiAgICBTdHJpbmcgbmFtZSA9IHRva2VuLmxleGVtZTsKICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImRlcHJlY2F0ZWQiKSAmJgogICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgcHJldmlvdXMgY2hlY2sgaXMgcmVkdW5kYW50LCBidXQgZmFzdGVyIGluIHRoZSBjb21tb24KICAgICAgICAvLyBjYXNlICh3aGVuIFtuYW1lXSBpc24ndCBkZXByZWNhdGVkKS4KICAgICAgICAobmFtZSA9PSAiZGVwcmVjYXRlZCIgfHwgbmFtZS5zdGFydHNXaXRoKCJkZXByZWNhdGVkXyIpKSkgewogICAgICBhZGRQcm9ibGVtKGZhc3RhLnRlbXBsYXRlVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogICAgfQogICAgaWYgKGNvbnRleHQuaXNTY29wZVJlZmVyZW5jZSkgewogICAgICBhc3NlcnQoIWluSW5pdGlhbGl6ZXIgfHwKICAgICAgICAgIHRoaXMuc2NvcGUgPT0gZW5jbG9zaW5nU2NvcGUgfHwKICAgICAgICAgIHRoaXMuc2NvcGUucGFyZW50ID09IGVuY2xvc2luZ1Njb3BlKTsKICAgICAgLy8gVGhpcyBkZWFscyB3aXRoIHRoaXMga2luZCBvZiBpbml0aWFsaXplcjogYEMoYSkgOiBhID0gYTtgCiAgICAgIFNjb3BlIHNjb3BlID0gaW5Jbml0aWFsaXplciA/IGVuY2xvc2luZ1Njb3BlIDogdGhpcy5zY29wZTsKICAgICAgcHVzaChzY29wZUxvb2t1cChzY29wZSwgbmFtZSwgdG9rZW4pKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChjb250ZXh0LmluRGVjbGFyYXRpb24pIHsKICAgICAgaWYgKGNvbnRleHQgPT0gSWRlbnRpZmllckNvbnRleHQudG9wTGV2ZWxWYXJpYWJsZURlY2xhcmF0aW9uIHx8CiAgICAgICAgICBjb250ZXh0ID09IElkZW50aWZpZXJDb250ZXh0LmZpZWxkRGVjbGFyYXRpb24pIHsKICAgICAgICBjb25zdGFudENvbnRleHQgPSBtZW1iZXIuaXNDb25zdAogICAgICAgICAgICA/IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZAogICAgICAgICAgICA6ICFtZW1iZXIuaXNTdGF0aWMgJiYKICAgICAgICAgICAgICAgICAgICBjbGFzc0J1aWxkZXIgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICAgIGNsYXNzQnVpbGRlci5oYXNDb25zdENvbnN0cnVjdG9yCiAgICAgICAgICAgICAgICA/IENvbnN0YW50Q29udGV4dC5yZXF1aXJlZAogICAgICAgICAgICAgICAgOiBDb25zdGFudENvbnRleHQubm9uZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYKICAgICAgICAhY29udGV4dC5hbGxvd2VkSW5Db25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uLCB0b2tlbi5jaGFyT2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgfQogICAgaWYgKHRva2VuLmlzU3ludGhldGljKSB7CiAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KG9mZnNldEZvclRva2VuKHRva2VuKSkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgSWRlbnRpZmllci5wcmVzZXJ2ZVRva2VuKHRva2VuKSk7CiAgICB9CiAgfQoKICAvLy8gSGVscGVyIG1ldGhvZCB0byBjcmVhdGUgYSBbVmFyaWFibGVHZXRdIG9mIHRoZSBbdmFyaWFibGVdIHVzaW5nCiAgLy8vIFtjaGFyT2Zmc2V0XSBhcyB0aGUgZmlsZSBvZmZzZXQuCiAgVmFyaWFibGVHZXQgX2NyZWF0ZVZhcmlhYmxlR2V0KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBPYmplY3QgZmFjdCA9CiAgICAgICAgdHlwZVByb21vdGVyPy5nZXRGYWN0Rm9yQWNjZXNzKHZhcmlhYmxlLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICBPYmplY3Qgc2NvcGUgPSB0eXBlUHJvbW90ZXI/LmN1cnJlbnRTY29wZTsKICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXRKdWRnbWVudCh2YXJpYWJsZSwgZmFjdCwgc2NvcGUpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQoKICAvLy8gSGVscGVyIG1ldGhvZCB0byBjcmVhdGUgYSBbUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3JdIG9uIHRoZSBbdmFyaWFibGVdCiAgLy8vIHVzaW5nIFt0b2tlbl0gYW5kIFtjaGFyT2Zmc2V0XSBmb3Igb2Zmc2V0IGluZm9ybWF0aW9uIGFuZCBbbmFtZV0KICAvLy8gZm9yIGBFeHByZXNzaW9uR2VuZXJhdG9yLl9wbGFpbk5hbWVGb3JSZWFkYC4KICBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBfY3JlYXRlUmVhZE9ubHlWYXJpYWJsZUFjY2VzcygKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgVG9rZW4gdG9rZW4sIGludCBjaGFyT2Zmc2V0LCBTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIG5ldyBSZWFkT25seUFjY2Vzc0dlbmVyYXRvcigKICAgICAgICB0aGlzLCB0b2tlbiwgX2NyZWF0ZVZhcmlhYmxlR2V0KHZhcmlhYmxlLCBjaGFyT2Zmc2V0KSwgbmFtZSk7CiAgfQoKICAvLy8gTG9vayB1cCBbbmFtZV0gaW4gW3Njb3BlXSB1c2luZyBbdG9rZW5dIGFzIGxvY2F0aW9uIGluZm9ybWF0aW9uIChib3RoIHRvCiAgLy8vIHJlcG9ydCBwcm9ibGVtcyBhbmQgYXMgdGhlIGZpbGUgb2Zmc2V0IGluIHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUpLgogIC8vLyBbaXNRdWFsaWZpZWRdIHNob3VsZCBiZSB0cnVlIGlmIFtuYW1lXSBpcyBhIHF1YWxpZmllZCBhY2Nlc3MgKHdoaWNoCiAgLy8vIGltcGxpZXMgdGhhdCBpdCBzaG91bGRuJ3QgYmUgdHVybmVkIGludG8gYSBbVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXQogIC8vLyBpZiB0aGUgbmFtZSBkb2Vzbid0IHJlc29sdmUgaW4gdGhlIHNjb3BlKS4KICBAb3ZlcnJpZGUKICBzY29wZUxvb2t1cChTY29wZSBzY29wZSwgU3RyaW5nIG5hbWUsIFRva2VuIHRva2VuLAogICAgICB7Ym9vbCBpc1F1YWxpZmllZDogZmFsc2UsIFByZWZpeEJ1aWxkZXIgcHJlZml4fSkgewogICAgaW50IGNoYXJPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBpZiAodG9rZW4uaXNTeW50aGV0aWMpIHsKICAgICAgcmV0dXJuIG5ldyBQYXJzZXJFcnJvckdlbmVyYXRvcih0aGlzLCB0b2tlbiwgZmFzdGEubWVzc2FnZVN5bnRoZXRpY1Rva2VuKTsKICAgIH0KICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgdXJpKTsKICAgIGlmIChkZWNsYXJhdGlvbiBpcyBVbmxpbmtlZERlY2xhcmF0aW9uKSB7CiAgICAgIHJldHVybiBuZXcgVW5saW5rZWRHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uKTsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsICYmCiAgICAgICAgcHJlZml4ID09IG51bGwgJiYKICAgICAgICAoY2xhc3NCdWlsZGVyPy5pc1BhdGNoID8/IGZhbHNlKSkgewogICAgICAvLyBUaGUgc2NvcGUgb2YgYSBwYXRjaGVkIG1ldGhvZCBpbmNsdWRlcyB0aGUgb3JpZ2luIGNsYXNzLgogICAgICBkZWNsYXJhdGlvbiA9CiAgICAgICAgICBjbGFzc0J1aWxkZXIub3JpZ2luLmZpbmRTdGF0aWNCdWlsZGVyKG5hbWUsIGNoYXJPZmZzZXQsIHVyaSwgbGlicmFyeSk7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24gIT0gbnVsbCAmJgogICAgICAgIGRlY2xhcmF0aW9uLmlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciAmJgogICAgICAgIGluRmllbGRJbml0aWFsaXplciAmJgogICAgICAgICFpbkluaXRpYWxpemVyKSB7CiAgICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgYSBjbGFzcyBpbnN0YW5jZSBtZW1iZXIgaW4gYW4gaW5pdGlhbGl6ZXIgb2YgYQogICAgICAvLyBmaWVsZC4KICAgICAgLy8KICAgICAgLy8gRm9yIGluc3RhbmNlCiAgICAgIC8vCiAgICAgIC8vICAgICBjbGFzcyBNIHsKICAgICAgLy8gICAgICAgaW50IGZvbyA9IGJhcjsKICAgICAgLy8gICAgICAgaW50IGJhcjsKICAgICAgLy8gICAgIH0KICAgICAgLy8KICAgICAgcmV0dXJuIG5ldyBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IodGhpcywgdG9rZW4sCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZVRoaXNBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIud2l0aEFyZ3VtZW50cyhuYW1lKSk7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCB8fAogICAgICAgICghaXNEZWNsYXJhdGlvbkluc3RhbmNlQ29udGV4dCAmJgogICAgICAgICAgICBkZWNsYXJhdGlvbi5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIpKSB7CiAgICAgIC8vIFdlIGVpdGhlciBkaWRuJ3QgZmluZCBhIGRlY2xhcmF0aW9uIG9yIGZvdW5kIGFuIGluc3RhbmNlIG1lbWJlciBmcm9tCiAgICAgIC8vIGEgbm9uLWluc3RhbmNlIGNvbnRleHQuCiAgICAgIE5hbWUgbiA9IG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkubmFtZU9yaWdpbik7CiAgICAgIGlmICghaXNRdWFsaWZpZWQgJiYgaXNEZWNsYXJhdGlvbkluc3RhbmNlQ29udGV4dCkgewogICAgICAgIGFzc2VydChkZWNsYXJhdGlvbiA9PSBudWxsKTsKICAgICAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lIHx8IG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICByZXR1cm4gbmV3IFVucmVzb2x2ZWROYW1lR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBuKTsKICAgICAgICB9CiAgICAgICAgaWYgKGV4dGVuc2lvblRoaXMgIT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgd2UgYXJlIGluIGFuIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIgd2UgaW50ZXJwcmV0IHRoaXMgYXMgYW4KICAgICAgICAgIC8vIGltcGxpY2l0IGFjY2VzcyBvbiB0aGUgJ3RoaXMnIHBhcmFtZXRlci4KICAgICAgICAgIHJldHVybiBQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvci5tYWtlKAogICAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgICAgX2NyZWF0ZVZhcmlhYmxlR2V0KGV4dGVuc2lvblRoaXMsIGNoYXJPZmZzZXQpLAogICAgICAgICAgICAgIG4sCiAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbXBsaWNpdCBhY2Nlc3Mgb24gJ3RoaXMnLgogICAgICAgICAgcmV0dXJuIG5ldyBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IodGhpcywgdG9rZW4sIG4sCiAgICAgICAgICAgICAgbG9va3VwSW5zdGFuY2VNZW1iZXIobiksIGxvb2t1cEluc3RhbmNlTWVtYmVyKG4sIGlzU2V0dGVyOiB0cnVlKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlnbm9yZU1haW5JbkdldE1haW5DbG9zdXJlICYmCiAgICAgICAgICBuYW1lID09ICJtYWluIiAmJgogICAgICAgICAgbWVtYmVyPy5uYW1lID09ICJfZ2V0TWFpbkNsb3N1cmUiKSB7CiAgICAgICAgcmV0dXJuIGZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChudWxsKS4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBVbnJlc29sdmVkTmFtZUdlbmVyYXRvcih0aGlzLCB0b2tlbiwgbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaXNUeXBlRGVjbGFyYXRpb24pIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlVXNlR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBkZWNsYXJhdGlvbiwgbmFtZSk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmlzTG9jYWwpIHsKICAgICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJgogICAgICAgICAgIWRlY2xhcmF0aW9uLmlzQ29uc3QgJiYKICAgICAgICAgICFtZW1iZXIuaXNDb25zdHJ1Y3RvcikgewogICAgICAgIHJldHVybiBuZXcgSW5jb21wbGV0ZUVycm9yR2VuZXJhdG9yKAogICAgICAgICAgICB0aGlzLCB0b2tlbiwgZmFzdGEubWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb24pOwogICAgICB9CiAgICAgIC8vIEFuIGluaXRpYWxpemluZyBmb3JtYWwgcGFyYW1ldGVyIG1pZ2h0IGJlIGZpbmFsIHdpdGhvdXQgaXRzCiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gYmVpbmcgZmluYWwuIFNlZQogICAgICAvLyBbUHJvY2VkdXJlQnVpbGRlci5jb21wdXRlRm9ybWFsUGFyYW1ldGVySW5pdGlhbGl6ZXJTY29wZV0uIElmIHRoYXQKICAgICAgLy8gd2Fzbid0IHRoZSBjYXNlLCB3ZSBjb3VsZCBhbHdheXMgdXNlIFtWYXJpYWJsZVVzZUdlbmVyYXRvcl0uCiAgICAgIGlmIChkZWNsYXJhdGlvbi5pc0ZpbmFsKSB7CiAgICAgICAgcmV0dXJuIF9jcmVhdGVSZWFkT25seVZhcmlhYmxlQWNjZXNzKAogICAgICAgICAgICBkZWNsYXJhdGlvbi50YXJnZXQsIHRva2VuLCBjaGFyT2Zmc2V0LCBuYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlVXNlR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBkZWNsYXJhdGlvbi50YXJnZXQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlcikgewogICAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lICYmCiAgICAgICAgICAhaW5Jbml0aWFsaXplciAmJgogICAgICAgICAgLy8gVE9ETyhhaGUpOiBUaGlzIGlzIGEgaGFjayBiZWNhdXNlIEZhc3RhIHNldHMgdXAgdGhlIHNjb3BlCiAgICAgICAgICAvLyAidGhpcy5maWVsZCIgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gb2xkIHNlbWFudGljcy4gVW5kZXIgdGhlIG5ldwogICAgICAgICAgLy8gc2VtYW50aWNzLCBzdWNoIHBhcmFtZXRlcnMgaW50cm9kdWNlcyBhIG5ldyBwYXJhbWV0ZXIgd2l0aCB0aGF0CiAgICAgICAgICAvLyBuYW1lIHRoYXQgc2hvdWxkIGJlIHJlc29sdmVkIGhlcmUuCiAgICAgICAgICAhbWVtYmVyLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICBmYXN0YS5tZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbiwgY2hhck9mZnNldCwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgICBOYW1lIG4gPSBuZXcgTmFtZShuYW1lLCBsaWJyYXJ5Lm5hbWVPcmlnaW4pOwogICAgICBNZW1iZXIgZ2V0dGVyOwogICAgICBNZW1iZXIgc2V0dGVyOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgICAgc2V0dGVyID0gZGVjbGFyYXRpb24ucGFyZW50LnRhcmdldDsKICAgICAgICBnZXR0ZXIgPSBsb29rdXBJbnN0YW5jZU1lbWJlcihuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBnZXR0ZXIgPSBkZWNsYXJhdGlvbi50YXJnZXQ7CiAgICAgICAgc2V0dGVyID0gbG9va3VwSW5zdGFuY2VNZW1iZXIobiwgaXNTZXR0ZXI6IHRydWUpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBuLCBnZXR0ZXIsIHNldHRlcik7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmlzUmVndWxhck1ldGhvZCkgewogICAgICBhc3NlcnQoZGVjbGFyYXRpb24uaXNTdGF0aWMgfHwgZGVjbGFyYXRpb24uaXNUb3BMZXZlbCk7CiAgICAgIHJldHVybiBuZXcgU3RhdGljQWNjZXNzR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBkZWNsYXJhdGlvbi50YXJnZXQsIG51bGwpOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgIGFzc2VydChwcmVmaXggPT0gbnVsbCk7CiAgICAgIHJldHVybiBuZXcgUHJlZml4VXNlR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBkZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIExvYWRMaWJyYXJ5QnVpbGRlcikgewogICAgICByZXR1cm4gbmV3IExvYWRMaWJyYXJ5R2VuZXJhdG9yKHRoaXMsIHRva2VuLCBkZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgewogICAgICBpZiAoZGVjbGFyYXRpb24uaGFzUHJvYmxlbSAmJiBkZWNsYXJhdGlvbiBpcyEgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgICB9CiAgICAgIEJ1aWxkZXIgc2V0dGVyOwogICAgICBpZiAoZGVjbGFyYXRpb24uaXNTZXR0ZXIpIHsKICAgICAgICBzZXR0ZXIgPSBkZWNsYXJhdGlvbjsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbi5pc0dldHRlcikgewogICAgICAgIHNldHRlciA9IHNjb3BlLmxvb2t1cFNldHRlcihuYW1lLCBjaGFyT2Zmc2V0LCB1cmkpOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmlzRmllbGQpIHsKICAgICAgICBpZiAoZGVjbGFyYXRpb24uaXNGaW5hbCB8fCBkZWNsYXJhdGlvbi5pc0NvbnN0KSB7CiAgICAgICAgICBzZXR0ZXIgPSBzY29wZS5sb29rdXBTZXR0ZXIobmFtZSwgY2hhck9mZnNldCwgdXJpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2V0dGVyID0gZGVjbGFyYXRpb247CiAgICAgICAgfQogICAgICB9CiAgICAgIFN0YXRpY0FjY2Vzc0dlbmVyYXRvciBnZW5lcmF0b3IgPSBuZXcgU3RhdGljQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyKAogICAgICAgICAgdGhpcywgZGVjbGFyYXRpb24sIHRva2VuLCBzZXR0ZXIpOwogICAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgICAgTWVtYmVyIHJlYWRUYXJnZXQgPSBnZW5lcmF0b3IucmVhZFRhcmdldDsKICAgICAgICBpZiAoIShyZWFkVGFyZ2V0IGlzIEZpZWxkICYmIHJlYWRUYXJnZXQuaXNDb25zdCB8fAogICAgICAgICAgICAvLyBTdGF0aWMgdGVhci1vZmZzIGFyZSBhbHNvIGNvbXBpbGUgdGltZSBjb25zdGFudHMuCiAgICAgICAgICAgIHJlYWRUYXJnZXQgaXMgUHJvY2VkdXJlKSkgewogICAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbiwgY2hhck9mZnNldCwgdG9rZW4ubGVuZ3RoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGdlbmVyYXRvcjsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUXVhbGlmaWVkKFRva2VuIHBlcmlvZCkgewogICAgZGVidWdFdmVudCgiUXVhbGlmaWVkIik7CiAgICBPYmplY3Qgbm9kZSA9IHBvcCgpOwogICAgT2JqZWN0IHF1YWxpZmllciA9IHBvcCgpOwogICAgaWYgKHF1YWxpZmllciBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKHF1YWxpZmllcik7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG5vZGU7CiAgICAgIHB1c2goaWRlbnRpZmllci53aXRoUXVhbGlmaWVyKHF1YWxpZmllcikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxpdGVyYWxTdHJpbmcoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTGl0ZXJhbFN0cmluZyIpOwogICAgcHVzaCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ1BhcnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlN0cmluZ1BhcnQiKTsKICAgIHB1c2godG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaXRlcmFsU3RyaW5nKGludCBpbnRlcnBvbGF0aW9uQ291bnQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRMaXRlcmFsU3RyaW5nIik7CiAgICBpZiAoaW50ZXJwb2xhdGlvbkNvdW50ID09IDApIHsKICAgICAgVG9rZW4gdG9rZW4gPSBwb3AoKTsKICAgICAgU3RyaW5nIHZhbHVlID0gdW5lc2NhcGVTdHJpbmcodG9rZW4ubGV4ZW1lLCB0b2tlbiwgdGhpcyk7CiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUsIHRva2VuKSk7CiAgICB9IGVsc2UgewogICAgICBpbnQgY291bnQgPSAxICsgaW50ZXJwb2xhdGlvbkNvdW50ICogMjsKICAgICAgTGlzdDxPYmplY3Q+IHBhcnRzID0gY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8T2JqZWN0PigpLnBvcChzdGFjaywgY291bnQpOwogICAgICBpZiAocGFydHMgPT0gbnVsbCkgewogICAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KGVuZFRva2VuLmNoYXJPZmZzZXQpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgVG9rZW4gZmlyc3QgPSBwYXJ0cy5maXJzdDsKICAgICAgVG9rZW4gbGFzdCA9IHBhcnRzLmxhc3Q7CiAgICAgIFF1b3RlIHF1b3RlID0gYW5hbHl6ZVF1b3RlKGZpcnN0LmxleGVtZSk7CiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPSA8RXhwcmVzc2lvbj5bXTsKICAgICAgLy8gQ29udGFpbnMgbW9yZSB0aGFuIGp1c3QgXCcgb3IgXCIuCiAgICAgIGlmIChmaXJzdC5sZXhlbWUubGVuZ3RoID4gMSkgewogICAgICAgIFN0cmluZyB2YWx1ZSA9CiAgICAgICAgICAgIHVuZXNjYXBlRmlyc3RTdHJpbmdQYXJ0KGZpcnN0LmxleGVtZSwgcXVvdGUsIGZpcnN0LCB0aGlzKTsKICAgICAgICBpZiAodmFsdWUuaXNOb3RFbXB0eSkgewogICAgICAgICAgZXhwcmVzc2lvbnMuYWRkKGZvcmVzdC5jcmVhdGVTdHJpbmdMaXRlcmFsKHZhbHVlLCBmaXJzdCkpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKGludCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgewogICAgICAgIE9iamVjdCBwYXJ0ID0gcGFydHNbaV07CiAgICAgICAgaWYgKHBhcnQgaXMgVG9rZW4pIHsKICAgICAgICAgIGlmIChwYXJ0LmxleGVtZS5sZW5ndGggIT0gMCkgewogICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSB1bmVzY2FwZShwYXJ0LmxleGVtZSwgcXVvdGUsIHBhcnQsIHRoaXMpOwogICAgICAgICAgICBleHByZXNzaW9ucy5hZGQoZm9yZXN0LmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUsIHBhcnQpKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXhwcmVzc2lvbnMuYWRkKHRvVmFsdWUocGFydCkpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBDb250YWlucyBtb3JlIHRoYW4ganVzdCBcJyBvciBcIi4KICAgICAgaWYgKGxhc3QubGV4ZW1lLmxlbmd0aCA+IDEpIHsKICAgICAgICBTdHJpbmcgdmFsdWUgPSB1bmVzY2FwZUxhc3RTdHJpbmdQYXJ0KAogICAgICAgICAgICBsYXN0LmxleGVtZSwgcXVvdGUsIGxhc3QsIGxhc3QuaXNTeW50aGV0aWMsIHRoaXMpOwogICAgICAgIGlmICh2YWx1ZS5pc05vdEVtcHR5KSB7CiAgICAgICAgICBleHByZXNzaW9ucy5hZGQoZm9yZXN0LmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUsIGxhc3QpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlU3RyaW5nQ29uY2F0ZW5hdGlvbihleHByZXNzaW9ucywgZW5kVG9rZW4pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlQ2xhdXNlKFRva2VuIG5hdGl2ZVRva2VuLCBib29sIGhhc05hbWUpIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUNsYXVzZSIpOwogICAgaWYgKGhhc05hbWUpIHsKICAgICAgZm9yZXN0LmFzTGl0ZXJhbFN0cmluZyhwb3AoKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNjcmlwdChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU2NyaXB0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb24oaW50IGxpdGVyYWxDb3VudCkgewogICAgZGVidWdFdmVudCgiU3RyaW5nSnV4dGFwb3NpdGlvbiIpOwogICAgTGlzdDxFeHByZXNzaW9uPiBwYXJ0cyA9IHBvcExpc3RGb3JWYWx1ZShsaXRlcmFsQ291bnQpOwogICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9uczsKICAgIC8vIEZsYXR0ZW4gc3RyaW5nIGp1eHRhcG9zaXRpb25zIG9mIHN0cmluZyBpbnRlcnBvbGF0aW9uLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICBFeHByZXNzaW9uIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgaWYgKHBhcnQgaXMgU3RyaW5nQ29uY2F0ZW5hdGlvbikgewogICAgICAgIGlmIChleHByZXNzaW9ucyA9PSBudWxsKSB7CiAgICAgICAgICBleHByZXNzaW9ucyA9IHBhcnRzLnN1Ymxpc3QoMCwgaSk7CiAgICAgICAgfQogICAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIHBhcnQuZXhwcmVzc2lvbnMpIHsKICAgICAgICAgIGV4cHJlc3Npb25zLmFkZChleHByZXNzaW9uKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGV4cHJlc3Npb25zICE9IG51bGwpIHsKICAgICAgICAgIGV4cHJlc3Npb25zLmFkZChwYXJ0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHB1c2goZm9yZXN0LmNyZWF0ZVN0cmluZ0NvbmNhdGVuYXRpb24oZXhwcmVzc2lvbnMgPz8gcGFydHMsIG51bGwpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbEludChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTGl0ZXJhbEludCIpOwogICAgaW50IHZhbHVlID0gaW50LnRyeVBhcnNlKHRva2VuLmxleGVtZSk7CiAgICBpZiAobGVnYWN5TW9kZSkgewogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgIHB1c2godW5oYW5kbGVkKAogICAgICAgICAgICAnbGFyZ2UgaW50ZWdlcicsICdoYW5kbGVMaXRlcmFsSW50JywgdG9rZW4uY2hhck9mZnNldCwgdXJpKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlSW50TGl0ZXJhbCh2YWx1ZSwgdG9rZW4pKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBQb3N0cG9uZSBwYXJzaW5nIG9mIGxpdGVyYWxzIHJlc3VsdGluZyBpbiBhIG5lZ2F0aXZlIHZhbHVlCiAgICAvLyAoaGV4IGxpdGVyYWxzID49IDJeNjMpLiBUaGVzZSBhcmUgb25seSBhbGxvd2VkIHdoZW4gbm90IG5lZ2F0ZWQuCiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA8IDApIHsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlSW50TGl0ZXJhbExhcmdlKHRva2VuLmxleGVtZSwgdG9rZW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUludExpdGVyYWwodmFsdWUsIHRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUVtcHR5RnVuY3Rpb25Cb2R5KFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiRXhwcmVzc2lvbkZ1bmN0aW9uQm9keSIpOwogICAgZW5kQmxvY2tGdW5jdGlvbkJvZHkoMCwgbnVsbCwgc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShUb2tlbiBhcnJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRXhwcmVzc2lvbkZ1bmN0aW9uQm9keSIpOwogICAgZW5kUmV0dXJuU3RhdGVtZW50KHRydWUsIGFycm93VG9rZW4ubmV4dCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRSZXR1cm5TdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzRXhwcmVzc2lvbiwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlJldHVyblN0YXRlbWVudCIpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gaGFzRXhwcmVzc2lvbiA/IHBvcEZvclZhbHVlKCkgOiBudWxsOwogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCAmJiBpbkNvbnN0cnVjdG9yKSB7CiAgICAgIHB1c2goYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgZmFzdGEubWVzc2FnZUNvbnN0cnVjdG9yV2l0aFJldHVyblR5cGUsIGJlZ2luVG9rZW4uY2hhck9mZnNldCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGJlZ2luVG9rZW4sIGV4cHJlc3Npb24sIGVuZFRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgZW50ZXJUaGVuRm9yVHlwZVByb21vdGlvbihjb25kaXRpb24pOwogICAgcHVzaChjb25kaXRpb24pOwogICAgc3VwZXIuYmVnaW5UaGVuU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgdHlwZVByb21vdGVyPy5lbnRlckVsc2UoKTsKICAgIHN1cGVyLmVuZFRoZW5TdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJZlN0YXRlbWVudChUb2tlbiBpZlRva2VuLCBUb2tlbiBlbHNlVG9rZW4pIHsKICAgIFN0YXRlbWVudCBlbHNlUGFydCA9IHBvcFN0YXRlbWVudElmTm90TnVsbChlbHNlVG9rZW4pOwogICAgU3RhdGVtZW50IHRoZW5QYXJ0ID0gcG9wU3RhdGVtZW50KCk7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBvcCgpOwogICAgdHlwZVByb21vdGVyPy5leGl0Q29uZGl0aW9uYWwoKTsKICAgIHB1c2goZm9yZXN0LmNyZWF0ZUlmU3RhdGVtZW50KAogICAgICAgIGlmVG9rZW4sIGNvbmRpdGlvbiwgdGhlblBhcnQsIGVsc2VUb2tlbiwgZWxzZVBhcnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVmFyaWFibGVJbml0aWFsaXplcihUb2tlbiBhc3NpZ25tZW50T3BlcmF0b3IpIHsKICAgIGRlYnVnRXZlbnQoIlZhcmlhYmxlSW5pdGlhbGl6ZXIiKTsKICAgIGFzc2VydChhc3NpZ25tZW50T3BlcmF0b3Iuc3RyaW5nVmFsdWUgPT0gIj0iKTsKICAgIHB1c2hOZXdMb2NhbFZhcmlhYmxlKHBvcEZvclZhbHVlKCksIGVxdWFsc1Rva2VuOiBhc3NpZ25tZW50T3BlcmF0b3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1ZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vVmFyaWFibGVJbml0aWFsaXplciIpOwogICAgYm9vbCBpc0NvbnN0ID0gKGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzICYgY29uc3RNYXNrKSAhPSAwOwogICAgYm9vbCBpc0ZpbmFsID0gKGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzICYgZmluYWxNYXNrKSAhPSAwOwogICAgRXhwcmVzc2lvbiBpbml0aWFsaXplcjsKICAgIGlmICghb3B0aW9uYWwoImluIiwgdG9rZW4pKSB7CiAgICAgIC8vIEEgZm9yLWluIGxvb3AtdmFyaWFibGUgY2FuJ3QgaGF2ZSBhbiBpbml0aWFsaXplci4gU28gbGV0J3MgcmVtYWluCiAgICAgIC8vIHNpbGVudCBpZiB0aGUgbmV4dCB0b2tlbiBpcyBgaW5gLiBTaW5jZSBhIGZvci1pbiBsb29wIGNhbiBvbmx5IGhhdmUKICAgICAgLy8gb25lIHZhcmlhYmxlIGl0IG11c3QgYmUgZm9sbG93ZWQgYnkgYGluYC4KICAgICAgaWYgKGlzQ29uc3QpIHsKICAgICAgICBpbml0aWFsaXplciA9IGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0b2tlbi5sZXhlbWUpLAogICAgICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICB0b2tlbi5sZW5ndGgpOwogICAgICB9IGVsc2UgaWYgKGlzRmluYWwpIHsKICAgICAgICBpbml0aWFsaXplciA9IGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVyCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0b2tlbi5sZXhlbWUpLAogICAgICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICB9CiAgICBwdXNoTmV3TG9jYWxWYXJpYWJsZShpbml0aWFsaXplcik7CiAgfQoKICB2b2lkIHB1c2hOZXdMb2NhbFZhcmlhYmxlKEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIsIHtUb2tlbiBlcXVhbHNUb2tlbn0pIHsKICAgIE9iamVjdCBub2RlID0gcG9wKCk7CiAgICBpZiAobm9kZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5vZGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBub2RlOwogICAgYXNzZXJ0KGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzICE9IC0xKTsKICAgIGJvb2wgaXNDb25zdCA9IChjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyAmIGNvbnN0TWFzaykgIT0gMDsKICAgIGJvb2wgaXNGaW5hbCA9IChjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyAmIGZpbmFsTWFzaykgIT0gMDsKICAgIGJvb2wgaXNMYXRlID0gKGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzICYgbGF0ZU1hc2spICE9IDA7CiAgICBhc3NlcnQoaXNDb25zdCA9PSAoY29uc3RhbnRDb250ZXh0ID09IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZCkpOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQoCiAgICAgICAgaWRlbnRpZmllci5uYW1lLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCwKICAgICAgICBmb3JTeW50aGV0aWNUb2tlbjogZGVwcmVjYXRlZF9leHRyYWN0VG9rZW4oaWRlbnRpZmllcikuaXNTeW50aGV0aWMsCiAgICAgICAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLAogICAgICAgIHR5cGU6IGJ1aWxkRGFydFR5cGUoY3VycmVudExvY2FsVmFyaWFibGVUeXBlKSwKICAgICAgICBpc0ZpbmFsOiBpc0ZpbmFsLAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QsCiAgICAgICAgaXNMYXRlOiBpc0xhdGUpCiAgICAgIC4uZmlsZU9mZnNldCA9IGlkZW50aWZpZXIuY2hhck9mZnNldAogICAgICAuLmZpbGVFcXVhbHNPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihlcXVhbHNUb2tlbik7CiAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5WYXJpYWJsZURlY2xhcmF0aW9uKHZhcmlhYmxlLCB0eXBlRW52aXJvbm1lbnQsIHVyaSk7CiAgICBwdXNoKHZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBpbkZpZWxkSW5pdGlhbGl6ZXIgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGaWVsZEluaXRpYWxpemVyKFRva2VuIGFzc2lnbm1lbnRPcGVyYXRvciwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZpZWxkSW5pdGlhbGl6ZXIiKTsKICAgIGluRmllbGRJbml0aWFsaXplciA9IGZhbHNlOwogICAgYXNzZXJ0KGFzc2lnbm1lbnRPcGVyYXRvci5zdHJpbmdWYWx1ZSA9PSAiPSIpOwogICAgcHVzaChwb3BGb3JWYWx1ZSgpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0ZpZWxkSW5pdGlhbGl6ZXIiKTsKICAgIGlmIChjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkKSB7CiAgICAgIC8vIENyZWF0aW5nIGEgbnVsbCB2YWx1ZSB0byBwcmV2ZW50IHRoZSBEYXJ0IFZNIGZyb20gY3Jhc2hpbmcuCiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKHRva2VuKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKE51bGxWYWx1ZS5GaWVsZEluaXRpYWxpemVyKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIG5hbWVUb2tlbikgewogICAgLy8gVE9ETyhhaGUpOiBVc2UgW0luaXRpYWxpemVkSWRlbnRpZmllcl0gaGVyZT8KICAgIGRlYnVnRXZlbnQoIkluaXRpYWxpemVkSWRlbnRpZmllciIpOwogICAgT2JqZWN0IG5vZGUgPSBwb3AoKTsKICAgIGlmIChub2RlIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobm9kZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlOwogICAgdmFyaWFibGUuZmlsZU9mZnNldCA9IG5hbWVUb2tlbi5jaGFyT2Zmc2V0OwogICAgcHVzaCh2YXJpYWJsZSk7CiAgICBkZWNsYXJlVmFyaWFibGUodmFyaWFibGUsIHNjb3BlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5WYXJpYWJsZXNEZWNsYXJhdGlvbigKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIGxhdGVUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpblZhcmlhYmxlc0RlY2xhcmF0aW9uIik7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3IobGF0ZVRva2VuKTsKICAgIH0KICAgIFVucmVzb2x2ZWRUeXBlIHR5cGUgPSBwb3AoKTsKICAgIGludCBtb2RpZmllcnMgPSAobGF0ZVRva2VuICE9IG51bGwgPyBsYXRlTWFzayA6IDApIHwKICAgICAgICBNb2RpZmllci52YWxpZGF0ZVZhckZpbmFsT3JDb25zdCh2YXJGaW5hbE9yQ29uc3Q/LmxleGVtZSk7CiAgICBzdXBlci5wdXNoKGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzKTsKICAgIHN1cGVyLnB1c2goY3VycmVudExvY2FsVmFyaWFibGVUeXBlID8/IE51bGxWYWx1ZS5UeXBlKTsKICAgIGN1cnJlbnRMb2NhbFZhcmlhYmxlVHlwZSA9IHR5cGU7CiAgICBjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyA9IG1vZGlmaWVyczsKICAgIHN1cGVyLnB1c2goY29uc3RhbnRDb250ZXh0KTsKICAgIGNvbnN0YW50Q29udGV4dCA9ICgobW9kaWZpZXJzICYgY29uc3RNYXNrKSAhPSAwKQogICAgICAgID8gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkCiAgICAgICAgOiBDb25zdGFudENvbnRleHQubm9uZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVmFyaWFibGVzRGVjbGFyYXRpb24oaW50IGNvdW50LCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVmFyaWFibGVzRGVjbGFyYXRpb24iKTsKICAgIGlmIChjb3VudCA9PSAxKSB7CiAgICAgIE9iamVjdCBub2RlID0gcG9wKCk7CiAgICAgIGNvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgICBjdXJyZW50TG9jYWxWYXJpYWJsZVR5cGUgPSBwb3AoKTsKICAgICAgY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgPSBwb3AoKTsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IHBvcCgpOwogICAgICBpZiAobm9kZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICAgIHB1c2gobm9kZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlOwogICAgICBpZiAoYW5ub3RhdGlvbnMgIT0gbnVsbCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhcmlhYmxlLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbnNbaV0pOwogICAgICAgIH0KICAgICAgICAodmFyaWFibGVzV2l0aE1ldGFkYXRhID8/PSA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXSkuYWRkKHZhcmlhYmxlKTsKICAgICAgfQogICAgICBwdXNoKHZhcmlhYmxlKTsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0KICAgICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICAgIGNvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgICBjdXJyZW50TG9jYWxWYXJpYWJsZVR5cGUgPSBwb3AoKTsKICAgICAgY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgPSBwb3AoKTsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IHBvcCgpOwogICAgICBpZiAodmFyaWFibGVzID09IG51bGwpIHsKICAgICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShvZmZzZXRGb3JUb2tlbihlbmRUb2tlbikpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGZpcnN0ID0gdmFyaWFibGVzLmZpcnN0OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGZpcnN0LmFkZEFubm90YXRpb24oYW5ub3RhdGlvbnNbaV0pOwogICAgICAgIH0KICAgICAgICAobXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGEgPz89IDxMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+PltdKQogICAgICAgICAgICAuYWRkKHZhcmlhYmxlcyk7CiAgICAgIH0KICAgICAgcHVzaChmb3Jlc3QudmFyaWFibGVzRGVjbGFyYXRpb24odmFyaWFibGVzLCB1cmkpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQmxvY2soaW50IGNvdW50LCBUb2tlbiBvcGVuQnJhY2UsIFRva2VuIGNsb3NlQnJhY2UpIHsKICAgIGRlYnVnRXZlbnQoIkJsb2NrIik7CiAgICBTdGF0ZW1lbnQgYmxvY2sgPSBwb3BCbG9jayhjb3VudCwgb3BlbkJyYWNlLCBjbG9zZUJyYWNlKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGJsb2NrKTsKICB9CgogIHZvaWQgaGFuZGxlSW52YWxpZFRvcExldmVsQmxvY2soVG9rZW4gdG9rZW4pIHsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBpbXByb3ZlZCByZWNvdmVyeSBieSBhZGRpbmcgdGhpcyBibG9jawogICAgLy8gYXMgcGFydCBvZiBhIHN5bnRoZXRpYyB0b3AgbGV2ZWwgZnVuY3Rpb24uCiAgICBwb3AoKTsgLy8gYmxvY2sKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkFzc2lnbm1lbnRFeHByZXNzaW9uIik7CiAgICBFeHByZXNzaW9uIHZhbHVlID0gcG9wRm9yVmFsdWUoKTsKICAgIE9iamVjdCBnZW5lcmF0b3IgPSBwb3AoKTsKICAgIGlmIChnZW5lcmF0b3IgaXMhIEdlbmVyYXRvcikgewogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlTm90QW5MdmFsdWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGxlbmd0aEZvclRva2VuKHRva2VuKSkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgRGVsYXllZEFzc2lnbm1lbnQoCiAgICAgICAgICB0aGlzLCB0b2tlbiwgZ2VuZXJhdG9yLCB2YWx1ZSwgdG9rZW4uc3RyaW5nVmFsdWUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJMb29wKGludCBjaGFyT2Zmc2V0KSB7CiAgICBpZiAocGVlaygpIGlzIExhYmVsVGFyZ2V0KSB7CiAgICAgIExhYmVsVGFyZ2V0IHRhcmdldCA9IHBlZWsoKTsKICAgICAgZW50ZXJCcmVha1RhcmdldChjaGFyT2Zmc2V0LCB0YXJnZXQuYnJlYWtUYXJnZXQpOwogICAgICBlbnRlckNvbnRpbnVlVGFyZ2V0KGNoYXJPZmZzZXQsIHRhcmdldC5jb250aW51ZVRhcmdldCk7CiAgICB9IGVsc2UgewogICAgICBlbnRlckJyZWFrVGFyZ2V0KGNoYXJPZmZzZXQpOwogICAgICBlbnRlckNvbnRpbnVlVGFyZ2V0KGNoYXJPZmZzZXQpOwogICAgfQogIH0KCiAgdm9pZCBleGl0TG9vcE9yU3dpdGNoKFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIGlmIChwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggIT0gbnVsbCkgewogICAgICBwdXNoKHByb2JsZW1Jbkxvb3BPclN3aXRjaCk7CiAgICAgIHByb2JsZW1Jbkxvb3BPclN3aXRjaCA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICBwdXNoKHN0YXRlbWVudCk7CiAgICB9CiAgfQoKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGJ1aWxkVmFyaWFibGVEZWNsYXJhdGlvbnModmFyaWFibGVPckV4cHJlc3Npb24pIHsKICAgIC8vIFRPRE8oYWhlKTogVGhpcyBjYW4gYmUgc2ltcGxpZmllZCBub3cgdGhhdCB3ZSBoYXZlIHRoZSBldmVudHMKICAgIC8vIGBoYW5kbGVGb3JJbml0aWFsaXplci4uLmAgZXZlbnRzLgogICAgaWYgKHZhcmlhYmxlT3JFeHByZXNzaW9uIGlzIEdlbmVyYXRvcikgewogICAgICB2YXJpYWJsZU9yRXhwcmVzc2lvbiA9IHZhcmlhYmxlT3JFeHByZXNzaW9uLmJ1aWxkRm9yRWZmZWN0KCk7CiAgICB9CiAgICBpZiAodmFyaWFibGVPckV4cHJlc3Npb24gaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gPFZhcmlhYmxlRGVjbGFyYXRpb24+W3ZhcmlhYmxlT3JFeHByZXNzaW9uXTsKICAgIH0gZWxzZSBpZiAodmFyaWFibGVPckV4cHJlc3Npb24gaXMgRXhwcmVzc2lvbikgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudC5mb3JFZmZlY3QoCiAgICAgICAgICB2YXJpYWJsZU9yRXhwcmVzc2lvbiwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgICByZXR1cm4gPFZhcmlhYmxlRGVjbGFyYXRpb24+W3ZhcmlhYmxlXTsKICAgIH0gZWxzZSBpZiAodmFyaWFibGVPckV4cHJlc3Npb24gaXMgRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudC5mb3JFZmZlY3QoCiAgICAgICAgICB2YXJpYWJsZU9yRXhwcmVzc2lvbi5leHByZXNzaW9uLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICAgIHJldHVybiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bdmFyaWFibGVdOwogICAgfSBlbHNlIGlmIChmb3Jlc3QuaXNWYXJpYWJsZXNEZWNsYXJhdGlvbih2YXJpYWJsZU9yRXhwcmVzc2lvbikpIHsKICAgICAgcmV0dXJuIGZvcmVzdAogICAgICAgICAgLnZhcmlhYmxlc0RlY2xhcmF0aW9uRXh0cmFjdERlY2xhcmF0aW9ucyh2YXJpYWJsZU9yRXhwcmVzc2lvbik7CiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlT3JFeHByZXNzaW9uIGlzIExpc3Q8T2JqZWN0PikgewogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcyA9IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgICBmb3IgKE9iamVjdCB2IGluIHZhcmlhYmxlT3JFeHByZXNzaW9uKSB7CiAgICAgICAgdmFyaWFibGVzLmFkZEFsbChidWlsZFZhcmlhYmxlRGVjbGFyYXRpb25zKHYpKTsKICAgICAgfQogICAgICByZXR1cm4gdmFyaWFibGVzOwogICAgfSBlbHNlIGlmICh2YXJpYWJsZU9yRXhwcmVzc2lvbiA9PSBudWxsKSB7CiAgICAgIHJldHVybiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50Iik7CiAgICBwdXNoKE51bGxWYWx1ZS5FeHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JJbml0aWFsaXplckV4cHJlc3Npb25TdGF0ZW1lbnQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvckluaXRpYWxpemVyTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckxvb3BQYXJ0cyhUb2tlbiBmb3JLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW4sCiAgICAgIFRva2VuIGxlZnRTZXBhcmF0b3IsIGludCB1cGRhdGVFeHByZXNzaW9uQ291bnQpIHsKICAgIHB1c2goZm9yS2V5d29yZCk7CiAgICBwdXNoKGxlZnRQYXJlbik7CiAgICBwdXNoKGxlZnRTZXBhcmF0b3IpOwogICAgcHVzaCh1cGRhdGVFeHByZXNzaW9uQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JDb250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRm9yQ29udHJvbEZsb3ciKTsKICAgIHZhciBlbnRyeSA9IHBvcCgpOwogICAgaW50IHVwZGF0ZUV4cHJlc3Npb25Db3VudCA9IHBvcCgpOwogICAgcG9wKCk7IC8vIGxlZnQgc2VwYXJhdG9yCiAgICBwb3AoKTsgLy8gbGVmdCBwYXJlbnRoZXNpcwogICAgVG9rZW4gZm9yVG9rZW4gPSBwb3AoKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlcyA9IHBvcExpc3RGb3JFZmZlY3QodXBkYXRlRXhwcmVzc2lvbkNvdW50KTsKICAgIFN0YXRlbWVudCBjb25kaXRpb25TdGF0ZW1lbnQgPSBwb3BTdGF0ZW1lbnQoKTsgLy8gY29uZGl0aW9uCiAgICBPYmplY3QgdmFyaWFibGVPckV4cHJlc3Npb24gPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CgogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlQ29udHJvbEZsb3dDb2xsZWN0aW9ucykgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUmVwb3J0IGEgbW9yZSB1c2VyIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UKICAgICAgLy8gd2hlbiBhbiBleHBlcmltZW50IGlzIG5vdCBlbmFibGVkCiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKGZvclRva2VuKSwKICAgICAgICAgIGZvclRva2VuLAogICAgICAgICAgZm9yVG9rZW4pOwogICAgICBwdXNoKGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZvclRva2VuKSwKICAgICAgICAgIGZvclRva2VuLAogICAgICAgICAgZm9yVG9rZW4pOwogICAgICBwdXNoKGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cmFuc2Zvcm1Db2xsZWN0aW9ucyA9IHRydWU7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcyA9CiAgICAgICAgYnVpbGRWYXJpYWJsZURlY2xhcmF0aW9ucyh2YXJpYWJsZU9yRXhwcmVzc2lvbik7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICAgIGlmIChmb3Jlc3QuaXNFeHByZXNzaW9uU3RhdGVtZW50KGNvbmRpdGlvblN0YXRlbWVudCkpIHsKICAgICAgY29uZGl0aW9uID0KICAgICAgICAgIGZvcmVzdC5nZXRFeHByZXNzaW9uRnJvbUV4cHJlc3Npb25TdGF0ZW1lbnQoY29uZGl0aW9uU3RhdGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChmb3Jlc3QuaXNFbXB0eVN0YXRlbWVudChjb25kaXRpb25TdGF0ZW1lbnQpKTsKICAgIH0KICAgIGlmIChlbnRyeSBpcyBNYXBFbnRyeSkgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVGb3JNYXBFbnRyeSgKICAgICAgICAgIHZhcmlhYmxlcywgY29uZGl0aW9uLCB1cGRhdGVzLCBlbnRyeSwgZm9yVG9rZW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUZvckVsZW1lbnQoCiAgICAgICAgICB2YXJpYWJsZXMsIGNvbmRpdGlvbiwgdXBkYXRlcywgdG9WYWx1ZShlbnRyeSksIGZvclRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvclN0YXRlbWVudChUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRm9yU3RhdGVtZW50Iik7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHBvcFN0YXRlbWVudCgpOwoKICAgIGludCB1cGRhdGVFeHByZXNzaW9uQ291bnQgPSBwb3AoKTsKICAgIFRva2VuIGxlZnRTZXBhcmF0b3IgPSBwb3AoKTsKICAgIFRva2VuIGxlZnRQYXJlbiA9IHBvcCgpOwogICAgVG9rZW4gZm9yS2V5d29yZCA9IHBvcCgpOwoKICAgIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlcyA9IHBvcExpc3RGb3JFZmZlY3QodXBkYXRlRXhwcmVzc2lvbkNvdW50KTsKICAgIFN0YXRlbWVudCBjb25kaXRpb25TdGF0ZW1lbnQgPSBwb3BTdGF0ZW1lbnQoKTsKICAgIE9iamVjdCB2YXJpYWJsZU9yRXhwcmVzc2lvbiA9IHBvcCgpOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMgPQogICAgICAgIGJ1aWxkVmFyaWFibGVEZWNsYXJhdGlvbnModmFyaWFibGVPckV4cHJlc3Npb24pOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIEp1bXBUYXJnZXQgY29udGludWVUYXJnZXQgPSBleGl0Q29udGludWVUYXJnZXQoKTsKICAgIEp1bXBUYXJnZXQgYnJlYWtUYXJnZXQgPSBleGl0QnJlYWtUYXJnZXQoKTsKICAgIGlmIChjb250aW51ZVRhcmdldC5oYXNVc2VycykgewogICAgICBib2R5ID0gZm9yZXN0LmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoYm9keSk7CiAgICAgIGNvbnRpbnVlVGFyZ2V0LnJlc29sdmVDb250aW51ZXMoZm9yZXN0LCBib2R5KTsKICAgIH0KICAgIEV4cHJlc3Npb24gY29uZGl0aW9uOwogICAgaWYgKGZvcmVzdC5pc0V4cHJlc3Npb25TdGF0ZW1lbnQoY29uZGl0aW9uU3RhdGVtZW50KSkgewogICAgICBjb25kaXRpb24gPQogICAgICAgICAgZm9yZXN0LmdldEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvblN0YXRlbWVudChjb25kaXRpb25TdGF0ZW1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGZvcmVzdC5pc0VtcHR5U3RhdGVtZW50KGNvbmRpdGlvblN0YXRlbWVudCkpOwogICAgfQogICAgU3RhdGVtZW50IHJlc3VsdCA9IGZvcmVzdC5jcmVhdGVGb3JTdGF0ZW1lbnQoCiAgICAgICAgZm9yS2V5d29yZCwKICAgICAgICBsZWZ0UGFyZW4sCiAgICAgICAgdmFyaWFibGVzLAogICAgICAgIGxlZnRTZXBhcmF0b3IsCiAgICAgICAgY29uZGl0aW9uLAogICAgICAgIGNvbmRpdGlvblN0YXRlbWVudCwKICAgICAgICB1cGRhdGVzLAogICAgICAgIGxlZnRQYXJlbi5lbmRHcm91cCwKICAgICAgICBib2R5KTsKICAgIGlmIChicmVha1RhcmdldC5oYXNVc2VycykgewogICAgICByZXN1bHQgPSBmb3Jlc3QuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChyZXN1bHQpOwogICAgICBicmVha1RhcmdldC5yZXNvbHZlQnJlYWtzKGZvcmVzdCwgcmVzdWx0KTsKICAgIH0KICAgIGlmICh2YXJpYWJsZU9yRXhwcmVzc2lvbiBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggPz89IGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VTeW50aGV0aWNUb2tlbiwgdmFyaWFibGVPckV4cHJlc3Npb24uY2hhck9mZnNldCwKICAgICAgICAgIHN1cHByZXNzTWVzc2FnZTogdHJ1ZSk7CiAgICB9CiAgICBleGl0TG9vcE9yU3dpdGNoKHJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEF3YWl0RXhwcmVzc2lvbihUb2tlbiBrZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQXdhaXRFeHByZXNzaW9uIik7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVBd2FpdEV4cHJlc3Npb24ocG9wRm9yVmFsdWUoKSwga2V5d29yZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbnZhbGlkQXdhaXRFeHByZXNzaW9uKAogICAgICBUb2tlbiBrZXl3b3JkLCBUb2tlbiBlbmRUb2tlbiwgZmFzdGEuTWVzc2FnZUNvZGUgZXJyb3JDb2RlKSB7CiAgICBkZWJ1Z0V2ZW50KCJBd2FpdEV4cHJlc3Npb24iKTsKICAgIHBvcEZvclZhbHVlKCk7CiAgICBwdXNoKGJ1aWxkUHJvYmxlbShlcnJvckNvZGUsIGtleXdvcmQub2Zmc2V0LCBrZXl3b3JkLmxlbmd0aCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc3luY01vZGlmaWVyKFRva2VuIGFzeW5jVG9rZW4sIFRva2VuIHN0YXJUb2tlbikgewogICAgZGVidWdFdmVudCgiQXN5bmNNb2RpZmllciIpOwogICAgcHVzaChhc3luY01hcmtlckZyb21Ub2tlbnMoYXN5bmNUb2tlbiwgc3RhclRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxMaXN0KAogICAgICBpbnQgY291bnQsIFRva2VuIGxlZnRCcmFja2V0LCBUb2tlbiBjb25zdEtleXdvcmQsIFRva2VuIHJpZ2h0QnJhY2tldCkgewogICAgZGVidWdFdmVudCgiTGl0ZXJhbExpc3QiKTsKCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUmVwbGFjZSB0aGlzIHdpdGggcG9wTGlzdEZvclZhbHVlCiAgICAvLyB3aGVuIGNvbnRyb2wgZmxvdyBhbmQgc3ByZWFkIGNvbGxlY3Rpb25zIGhhdmUgYmVlbiBlbmFibGVkIGJ5IGRlZmF1bHQKICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPQogICAgICAgIG5ldyBMaXN0PEV4cHJlc3Npb24+LmZpbGxlZChjb3VudCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgdmFyIGVsZW0gPSBwb3AoKTsKICAgICAgaWYgKGVsZW0gIT0gaW52YWxpZENvbGxlY3Rpb25FbGVtZW50KSB7CiAgICAgICAgZXhwcmVzc2lvbnNbaV0gPSB0b1ZhbHVlKGVsZW0pOwogICAgICB9IGVsc2UgewogICAgICAgIGV4cHJlc3Npb25zLnJlbW92ZUF0KGkpOwogICAgICB9CiAgICB9CgogICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cyA9IHBvcCgpOwoKICAgIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzLAogICAgICAgICAgICBvZmZzZXRGb3JUb2tlbihsZWZ0QnJhY2tldCksCiAgICAgICAgICAgIGxlbmd0aE9mU3BhbihsZWZ0QnJhY2tldCwgbGVmdEJyYWNrZXQuZW5kR3JvdXApKTsKICAgICAgICB0eXBlQXJndW1lbnQgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHR5cGVBcmd1bWVudCA9IGJ1aWxkRGFydFR5cGUodHlwZUFyZ3VtZW50cy5zaW5nbGUpOwogICAgICAgIGlmICghbGVnYWN5TW9kZSkgewogICAgICAgICAgdHlwZUFyZ3VtZW50ID0KICAgICAgICAgICAgICBpbnN0YW50aWF0ZVRvQm91bmRzKHR5cGVBcmd1bWVudCwgY29yZVR5cGVzLm9iamVjdENsYXNzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHR5cGVBcmd1bWVudCA9IGltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgfQoKICAgIEV4cHJlc3Npb24gbm9kZSA9IGZvcmVzdC5jcmVhdGVMaXN0TGl0ZXJhbCgKICAgICAgICBjb25zdEtleXdvcmQsCiAgICAgICAgY29uc3RLZXl3b3JkICE9IG51bGwgfHwgY29uc3RhbnRDb250ZXh0ID09IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZCwKICAgICAgICB0eXBlQXJndW1lbnQsCiAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICBsZWZ0QnJhY2tldCwKICAgICAgICBleHByZXNzaW9ucywKICAgICAgICByaWdodEJyYWNrZXQpOwogICAgbGlicmFyeS5jaGVja0JvdW5kc0luTGlzdExpdGVyYWwobm9kZSwgdHlwZUVudmlyb25tZW50LCB1cmkpOwogICAgcHVzaChub2RlKTsKICB9CgogIHZvaWQgYnVpbGRMaXRlcmFsU2V0KExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMsIFRva2VuIGNvbnN0S2V5d29yZCwKICAgICAgVG9rZW4gbGVmdEJyYWNlLCBMaXN0PGR5bmFtaWM+IHNldE9yTWFwRW50cmllcykgewogICAgRGFydFR5cGUgdHlwZUFyZ3VtZW50OwogICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICB0eXBlQXJndW1lbnQgPSBidWlsZERhcnRUeXBlKHR5cGVBcmd1bWVudHMuc2luZ2xlKTsKICAgICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgewogICAgICAgIHR5cGVBcmd1bWVudCA9IGluc3RhbnRpYXRlVG9Cb3VuZHModHlwZUFyZ3VtZW50LCBjb3JlVHlwZXMub2JqZWN0Q2xhc3MpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0eXBlQXJndW1lbnQgPSBpbXBsaWNpdFR5cGVBcmd1bWVudDsKICAgIH0KCiAgICB2YXIgZXhwcmVzc2lvbnMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIGlmIChzZXRPck1hcEVudHJpZXMgIT0gbnVsbCkgewogICAgICBmb3IgKHZhciBlbnRyeSBpbiBzZXRPck1hcEVudHJpZXMpIHsKICAgICAgICBpZiAoZW50cnkgaXMgTWFwRW50cnkpIHsKICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiByZXBvcnQgdGhlIGVycm9yIG9uIHRoZSBjb2xvbgogICAgICAgICAgYWRkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKSwKICAgICAgICAgICAgICBlbnRyeS5maWxlT2Zmc2V0LCAxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IFJldmlzZSBvbmNlIGNvbnRyb2wgZmxvdyBhbmQgc3ByZWFkCiAgICAgICAgICAvLyAgY29sbGVjdGlvbiBlbnRyaWVzIGFyZSBzdXBwb3J0ZWQuCiAgICAgICAgICBleHByZXNzaW9ucy5hZGQoZW50cnkgYXMgRXhwcmVzc2lvbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgRXhwcmVzc2lvbiBub2RlID0gZm9yZXN0LmNyZWF0ZVNldExpdGVyYWwoCiAgICAgICAgY29uc3RLZXl3b3JkLAogICAgICAgIGNvbnN0S2V5d29yZCAhPSBudWxsIHx8IGNvbnN0YW50Q29udGV4dCA9PSBDb25zdGFudENvbnRleHQuaW5mZXJyZWQsCiAgICAgICAgdHlwZUFyZ3VtZW50LAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgbGVmdEJyYWNlLAogICAgICAgIGV4cHJlc3Npb25zLAogICAgICAgIGxlZnRCcmFjZS5lbmRHcm91cCk7CiAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5TZXRMaXRlcmFsKG5vZGUsIHR5cGVFbnZpcm9ubWVudCwgdXJpKTsKICAgIHB1c2gobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxTZXRPck1hcCgKICAgIGludCBjb3VudCwKICAgIFRva2VuIGxlZnRCcmFjZSwKICAgIFRva2VuIGNvbnN0S2V5d29yZCwKICAgIFRva2VuIHJpZ2h0QnJhY2UsCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFzU2V0RW50cnkgcGFyYW1ldGVyIGV4aXN0cyBmb3IgcmVwbGljYXRpbmcgZXhpc3RpbmcKICAgIC8vIGJlaGF2aW9yIGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSB1bmlmaWVkIGNvbGxlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZAogICAgYm9vbCBoYXNTZXRFbnRyeSwKICApIHsKICAgIGRlYnVnRXZlbnQoIkxpdGVyYWxTZXRPck1hcCIpOwoKICAgIHZhciBzZXRPck1hcEVudHJpZXMgPSBuZXcgTGlzdDxkeW5hbWljPi5maWxsZWQoY291bnQsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHZhciBlbGVtID0gcG9wKCk7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZXZpc2UgdGhpcyB0byBoYW5kbGUgY29udHJvbCBmbG93IGFuZCBzcHJlYWQKICAgICAgaWYgKGVsZW0gPT0gaW52YWxpZENvbGxlY3Rpb25FbGVtZW50KSB7CiAgICAgICAgc2V0T3JNYXBFbnRyaWVzLnJlbW92ZUF0KGkpOwogICAgICB9IGVsc2UgaWYgKGVsZW0gaXMgTWFwRW50cnkpIHsKICAgICAgICBzZXRPck1hcEVudHJpZXNbaV0gPSBlbGVtOwogICAgICB9IGVsc2UgewogICAgICAgIHNldE9yTWFwRW50cmllc1tpXSA9IHRvVmFsdWUoZWxlbSk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMgPSBwb3AoKTsKCiAgICAvLyBSZXBsaWNhdGUgZXhpc3RpbmcgYmVoYXZpb3IgdGhhdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBhcnNlci4KICAgIC8vIFRoaXMgd2lsbCBiZSByZW1vdmVkIG9uY2UgdW5pZmllZCBjb2xsZWN0aW9ucyBpcyBpbXBsZW1lbnRlZC4KCiAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHNldCBvciBtYXAgYmFzZWQgb24gdHlwZSBhcmdzIGFuZCBjb250ZW50CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogU2luY2UgdHlwZSByZXNvbHV0aW9uIGlzIG5lZWRlZCB0byBkaXNhbWJpZ3VhdGUKICAgIC8vIHNldCBvciBtYXAgaW4gc29tZSBzaXR1YXRpb25zLCBjb25zaWRlciBhbHdheXMgZGVmZXJyaW5nIGRldGVybWluYXRpb24KICAgIC8vIHVudGlsIHRoZSB0eXBlIHJlc29sdXRpb24gcGhhc2UuCiAgICBmaW5hbCB0eXBlQXJnQ291bnQgPSB0eXBlQXJndW1lbnRzPy5sZW5ndGg7CiAgICBib29sIGlzU2V0ID0gdHlwZUFyZ0NvdW50ID09IDEgPyB0cnVlIDogdHlwZUFyZ0NvdW50ICE9IG51bGwgPyBmYWxzZSA6IG51bGw7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXRPck1hcEVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgaWYgKHNldE9yTWFwRW50cmllc1tpXSBpcyEgTWFwRW50cnkgJiYKICAgICAgICAgICFpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeShzZXRPck1hcEVudHJpZXNbaV0pKSB7CiAgICAgICAgaGFzU2V0RW50cnkgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgLy8gVE9ETyhkYW5ydWJlbCk6IElmIHRoZSB0eXBlIGFyZ3VtZW50cyBhcmUgbm90IGtub3duIChudWxsKSB0aGVuCiAgICAvLyBkZWZlciBzZXQvbWFwIGRldGVybWluYXRpb24gdW50aWwgYWZ0ZXIgdHlwZSByZXNvbHV0aW9uIGFzIHBlciB0aGUKICAgIC8vIHVuaWZpZWQgY29sbGVjdGlvbiBzcGVjOiBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL2xhbmd1YWdlL3B1bGwvMjAwCiAgICAvLyByYXRoZXIgdGhhbiB0cnlpbmcgdG8gZ3Vlc3MgYXMgZG9uZSBiZWxvdy4KICAgIGlzU2V0ID8/PSBoYXNTZXRFbnRyeTsKCiAgICBpZiAoaXNTZXQpIHsKICAgICAgYnVpbGRMaXRlcmFsU2V0KHR5cGVBcmd1bWVudHMsIGNvbnN0S2V5d29yZCwgbGVmdEJyYWNlLCBzZXRPck1hcEVudHJpZXMpOwogICAgfSBlbHNlIHsKICAgICAgTGlzdDxNYXBFbnRyeT4gbWFwRW50cmllcyA9IG5ldyBMaXN0PE1hcEVudHJ5PihzZXRPck1hcEVudHJpZXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXRPck1hcEVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAoc2V0T3JNYXBFbnRyaWVzW2ldIGlzIE1hcEVudHJ5KSB7CiAgICAgICAgICBtYXBFbnRyaWVzW2ldID0gc2V0T3JNYXBFbnRyaWVzW2ldOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtYXBFbnRyaWVzW2ldID0gY29udmVydFRvTWFwRW50cnkoc2V0T3JNYXBFbnRyaWVzW2ldLCB0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnVpbGRMaXRlcmFsTWFwKHR5cGVBcmd1bWVudHMsIGNvbnN0S2V5d29yZCwgbGVmdEJyYWNlLCBtYXBFbnRyaWVzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbEJvb2woVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkxpdGVyYWxCb29sIik7CiAgICBib29sIHZhbHVlID0gb3B0aW9uYWwoInRydWUiLCB0b2tlbik7CiAgICBhc3NlcnQodmFsdWUgfHwgb3B0aW9uYWwoImZhbHNlIiwgdG9rZW4pKTsKICAgIHB1c2goZm9yZXN0LmNyZWF0ZUJvb2xMaXRlcmFsKHZhbHVlLCB0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsRG91YmxlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJMaXRlcmFsRG91YmxlIik7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVEb3VibGVMaXRlcmFsKGRvdWJsZS5wYXJzZSh0b2tlbi5sZXhlbWUpLCB0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsTnVsbChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTGl0ZXJhbE51bGwiKTsKICAgIHB1c2goZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKHRva2VuKSk7CiAgfQoKICB2b2lkIGJ1aWxkTGl0ZXJhbE1hcChMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLCBUb2tlbiBjb25zdEtleXdvcmQsCiAgICAgIFRva2VuIGxlZnRCcmFjZSwgTGlzdDxNYXBFbnRyeT4gZW50cmllcykgewogICAgRGFydFR5cGUga2V5VHlwZTsKICAgIERhcnRUeXBlIHZhbHVlVHlwZTsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IDIpIHsKICAgICAgICBrZXlUeXBlID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgICB2YWx1ZVR5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGtleVR5cGUgPSBidWlsZERhcnRUeXBlKHR5cGVBcmd1bWVudHNbMF0pOwogICAgICAgIHZhbHVlVHlwZSA9IGJ1aWxkRGFydFR5cGUodHlwZUFyZ3VtZW50c1sxXSk7CiAgICAgICAgaWYgKCFsZWdhY3lNb2RlKSB7CiAgICAgICAgICBrZXlUeXBlID0gaW5zdGFudGlhdGVUb0JvdW5kcyhrZXlUeXBlLCBjb3JlVHlwZXMub2JqZWN0Q2xhc3MpOwogICAgICAgICAgdmFsdWVUeXBlID0gaW5zdGFudGlhdGVUb0JvdW5kcyh2YWx1ZVR5cGUsIGNvcmVUeXBlcy5vYmplY3RDbGFzcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBEYXJ0VHlwZSBpbXBsaWNpdFR5cGVBcmd1bWVudCA9IHRoaXMuaW1wbGljaXRUeXBlQXJndW1lbnQ7CiAgICAgIGtleVR5cGUgPSBpbXBsaWNpdFR5cGVBcmd1bWVudDsKICAgICAgdmFsdWVUeXBlID0gaW1wbGljaXRUeXBlQXJndW1lbnQ7CiAgICB9CgogICAgRXhwcmVzc2lvbiBub2RlID0gZm9yZXN0LmNyZWF0ZU1hcExpdGVyYWwoCiAgICAgICAgY29uc3RLZXl3b3JkLAogICAgICAgIGNvbnN0S2V5d29yZCAhPSBudWxsIHx8IGNvbnN0YW50Q29udGV4dCA9PSBDb25zdGFudENvbnRleHQuaW5mZXJyZWQsCiAgICAgICAga2V5VHlwZSwKICAgICAgICB2YWx1ZVR5cGUsCiAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICBsZWZ0QnJhY2UsCiAgICAgICAgZW50cmllcywKICAgICAgICBsZWZ0QnJhY2UuZW5kR3JvdXApOwogICAgbGlicmFyeS5jaGVja0JvdW5kc0luTWFwTGl0ZXJhbChub2RlLCB0eXBlRW52aXJvbm1lbnQsIHVyaSk7CiAgICBwdXNoKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsTWFwRW50cnkoVG9rZW4gY29sb24sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJMaXRlcmFsTWFwRW50cnkiKTsKICAgIEV4cHJlc3Npb24gdmFsdWUgPSBwb3BGb3JWYWx1ZSgpOwogICAgRXhwcmVzc2lvbiBrZXkgPSBwb3BGb3JWYWx1ZSgpOwogICAgcHVzaChmb3Jlc3QuY3JlYXRlTWFwRW50cnkoa2V5LCBjb2xvbiwgdmFsdWUpKTsKICB9CgogIFN0cmluZyBzeW1ib2xQYXJ0VG9TdHJpbmcobmFtZSkgewogICAgaWYgKG5hbWUgaXMgSWRlbnRpZmllcikgewogICAgICByZXR1cm4gbmFtZS5uYW1lOwogICAgfSBlbHNlIGlmIChuYW1lIGlzIE9wZXJhdG9yKSB7CiAgICAgIHJldHVybiBuYW1lLm5hbWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdW5oYW5kbGVkKCIke25hbWUucnVudGltZVR5cGV9IiwgInN5bWJvbFBhcnRUb1N0cmluZyIsIC0xLCB1cmkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaXRlcmFsU3ltYm9sKFRva2VuIGhhc2hUb2tlbiwgaW50IGlkZW50aWZpZXJDb3VudCkgewogICAgZGVidWdFdmVudCgiTGl0ZXJhbFN5bWJvbCIpOwogICAgaWYgKGlkZW50aWZpZXJDb3VudCA9PSAxKSB7CiAgICAgIE9iamVjdCBwYXJ0ID0gcG9wKCk7CiAgICAgIGlmIChwYXJ0IGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgcHVzaChuZXcgUGFyc2VyRXJyb3JHZW5lcmF0b3IoCiAgICAgICAgICAgIHRoaXMsIGhhc2hUb2tlbiwgZmFzdGEubWVzc2FnZVN5bnRoZXRpY1Rva2VuKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlU3ltYm9sTGl0ZXJhbChzeW1ib2xQYXJ0VG9TdHJpbmcocGFydCksIGhhc2hUb2tlbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBMaXN0PElkZW50aWZpZXI+IHBhcnRzID0KICAgICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PElkZW50aWZpZXI+KCkucG9wKHN0YWNrLCBpZGVudGlmaWVyQ291bnQpOwogICAgICBpZiAocGFydHMgPT0gbnVsbCkgewogICAgICAgIHB1c2gobmV3IFBhcnNlckVycm9yR2VuZXJhdG9yKAogICAgICAgICAgICB0aGlzLCBoYXNoVG9rZW4sIGZhc3RhLm1lc3NhZ2VTeW50aGV0aWNUb2tlbikpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBTdHJpbmcgdmFsdWUgPSBzeW1ib2xQYXJ0VG9TdHJpbmcocGFydHMuZmlyc3QpOwogICAgICBmb3IgKGludCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgKz0gIi4ke3N5bWJvbFBhcnRUb1N0cmluZyhwYXJ0c1tpXSl9IjsKICAgICAgfQogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVTeW1ib2xMaXRlcmFsKHZhbHVlLCBoYXNoVG9rZW4pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9uTnVsbEFzc2VydEV4cHJlc3Npb24oVG9rZW4gYmFuZykgewogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbEFzc2VydEV4cHJlc3Npb25Ob3RFbmFibGVkKGJhbmcpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUeXBlKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgLy8gVE9ETyhhaGUpOiBUaGUgc2NvcGUgaXMgd3JvbmcgZm9yIHJldHVybiB0eXBlcyBvZiBnZW5lcmljIGZ1bmN0aW9ucy4KICAgIGRlYnVnRXZlbnQoIlR5cGUiKTsKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydEVycm9ySWZOdWxsYWJsZVR5cGUocXVlc3Rpb25NYXJrKTsKICAgIH0KICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IGFyZ3VtZW50cyA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIGlmIChuYW1lIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWQgPSBuYW1lOwogICAgICBPYmplY3QgcHJlZml4ID0gcXVhbGlmaWVkLnF1YWxpZmllcjsKICAgICAgVG9rZW4gc3VmZml4ID0gZGVwcmVjYXRlZF9leHRyYWN0VG9rZW4ocXVhbGlmaWVkKTsKICAgICAgaWYgKHByZWZpeCBpcyBHZW5lcmF0b3IpIHsKICAgICAgICBuYW1lID0gcHJlZml4LnF1YWxpZmllZExvb2t1cChzdWZmaXgpOwogICAgICB9IGVsc2UgewogICAgICAgIFN0cmluZyBuYW1lID0gZ2V0Tm9kZU5hbWUocHJlZml4KTsKICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWUgPSBkZWJ1Z05hbWUobmFtZSwgc3VmZml4LmxleGVtZSk7CiAgICAgICAgaW50IG9mZnNldCA9IG9mZnNldEZvclRva2VuKGJlZ2luVG9rZW4pOwogICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGZhc3RhLnRlbXBsYXRlTm90QVR5cGUud2l0aEFyZ3VtZW50cyhkaXNwbGF5TmFtZSk7CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICBtZXNzYWdlLCBvZmZzZXQsIGxlbmd0aE9mU3BhbihiZWdpblRva2VuLCBzdWZmaXgpLCB1cmkpOwogICAgICAgIHB1c2gobmV3IFVucmVzb2x2ZWRUeXBlKAogICAgICAgICAgICBuZXcgTmFtZWRUeXBlQnVpbGRlcihuYW1lLCBudWxsKQogICAgICAgICAgICAgIC4uYmluZChuZXcgSW52YWxpZFR5cGVCdWlsZGVyKAogICAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgICBtZXNzYWdlLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICAgIHVyaSwgb2Zmc2V0LCBsZW5ndGhPZlNwYW4oYmVnaW5Ub2tlbiwgc3VmZml4KSkpKSwKICAgICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgICB1cmkpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIFR5cGVCdWlsZGVyIHJlc3VsdDsKICAgIGlmIChuYW1lIGlzIEdlbmVyYXRvcikgewogICAgICByZXN1bHQgPSBuYW1lLmJ1aWxkVHlwZVdpdGhSZXNvbHZlZEFyZ3VtZW50cyhhcmd1bWVudHMpOwogICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgICB1bmhhbmRsZWQoIm51bGwiLCAicmVzdWx0IiwgYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0LCB1cmkpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG5hbWUgaXMgUHJvYmxlbUJ1aWxkZXIpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBBcmd1bWVudHMgY291bGQgYmUgcGFzc2VkIGhlcmUuCiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIG5hbWUubWVzc2FnZSwgbmFtZS5jaGFyT2Zmc2V0LCBuYW1lLm5hbWUubGVuZ3RoLCBuYW1lLmZpbGVVcmkpOwogICAgICByZXN1bHQgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcihuYW1lLm5hbWUsIG51bGwpCiAgICAgICAgLi5iaW5kKG5ldyBJbnZhbGlkVHlwZUJ1aWxkZXIoCiAgICAgICAgICAgIG5hbWUubmFtZSwKICAgICAgICAgICAgbmFtZS5tZXNzYWdlLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgIG5hbWUuZmlsZVVyaSwgbmFtZS5jaGFyT2Zmc2V0LCBuYW1lLm5hbWUubGVuZ3RoKSkpOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKAogICAgICAgICAgIiR7bmFtZS5ydW50aW1lVHlwZX0iLCAiaGFuZGxlVHlwZSIsIGJlZ2luVG9rZW4uY2hhck9mZnNldCwgdXJpKTsKICAgIH0KICAgIHB1c2gobmV3IFVucmVzb2x2ZWRUeXBlKHJlc3VsdCwgYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0LCB1cmkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGUoVG9rZW4gYmVnaW5Ub2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5GdW5jdGlvblR5cGUiKTsKICB9CgogIHZvaWQgZW50ZXJGdW5jdGlvblR5cGVTY29wZShMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMpIHsKICAgIGRlYnVnRXZlbnQoImVudGVyRnVuY3Rpb25UeXBlU2NvcGUiKTsKICAgIGVudGVyTG9jYWxTY29wZShudWxsLAogICAgICAgIHNjb3BlLmNyZWF0ZU5lc3RlZFNjb3BlKCJmdW5jdGlvbi10eXBlIHNjb3BlIiwgaXNNb2RpZmlhYmxlOiB0cnVlKSk7CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIFNjb3BlQnVpbGRlciBzY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKHNjb3BlKTsKICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIGJ1aWxkZXIgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgIFN0cmluZyBuYW1lID0gYnVpbGRlci5uYW1lOwogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgZXhpc3RpbmcgPSBzY29wZUJ1aWxkZXJbbmFtZV07CiAgICAgICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHsKICAgICAgICAgIHNjb3BlQnVpbGRlci5hZGRNZW1iZXIobmFtZSwgYnVpbGRlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydER1cGxpY2F0ZWREZWNsYXJhdGlvbihleGlzdGluZywgbmFtZSwgYnVpbGRlci5jaGFyT2Zmc2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgZGVidWdFdmVudCgiRnVuY3Rpb25UeXBlIik7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnRFcnJvcklmTnVsbGFibGVUeXBlKHF1ZXN0aW9uTWFyayk7CiAgICB9CiAgICBGb3JtYWxQYXJhbWV0ZXJzIGZvcm1hbHMgPSBwb3AoKTsKICAgIFVucmVzb2x2ZWRUeXBlIHJldHVyblR5cGUgPSBwb3AoKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgVW5yZXNvbHZlZFR5cGUgdHlwZSA9IGZvcm1hbHMudG9GdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgdHlwZVZhcmlhYmxlcyk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgcHVzaCh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVm9pZEtleXdvcmQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlZvaWRLZXl3b3JkIik7CiAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgcHVzaChuZXcgVW5yZXNvbHZlZFR5cGUoCiAgICAgICAgbmV3IE5hbWVkVHlwZUJ1aWxkZXIoInZvaWQiLCBudWxsKQogICAgICAgICAgLi5iaW5kKG5ldyBWb2lkVHlwZUJ1aWxkZXIoY29uc3QgVm9pZFR5cGUoKSwgbGlicmFyeSwgb2Zmc2V0KSksCiAgICAgICAgb2Zmc2V0LAogICAgICAgIHVyaSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc09wZXJhdG9yKFRva2VuIG9wZXJhdG9yKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc09wZXJhdG9yIik7CiAgICBEYXJ0VHlwZSB0eXBlID0gYnVpbGREYXJ0VHlwZShwb3AoKSk7CiAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5UeXBlKHR5cGUsIHR5cGVFbnZpcm9ubWVudCwgdXJpLCBvcGVyYXRvci5jaGFyT2Zmc2V0KTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVDb25zdGFudFVwZGF0ZTIwMTggJiYKICAgICAgICBjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUpIHsKICAgICAgcHVzaChkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZU5vdENvbnN0YW50RXhwcmVzc2lvbi53aXRoQXJndW1lbnRzKCdBcyBleHByZXNzaW9uJyksCiAgICAgICAgICBvcGVyYXRvci5jaGFyT2Zmc2V0LAogICAgICAgICAgb3BlcmF0b3IubGVuZ3RoKSkpOwogICAgfSBlbHNlIHsKICAgICAgRXhwcmVzc2lvbiBub2RlID0gZm9yZXN0LmNyZWF0ZUFzRXhwcmVzc2lvbihleHByZXNzaW9uLCB0eXBlLCBvcGVyYXRvcik7CiAgICAgIHB1c2gobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlzT3BlcmF0b3IoVG9rZW4gaXNPcGVyYXRvciwgVG9rZW4gbm90KSB7CiAgICBkZWJ1Z0V2ZW50KCJJc09wZXJhdG9yIik7CiAgICBEYXJ0VHlwZSB0eXBlID0gYnVpbGREYXJ0VHlwZShwb3AoKSk7CiAgICBFeHByZXNzaW9uIG9wZXJhbmQgPSBwb3BGb3JWYWx1ZSgpOwogICAgYm9vbCBpc0ludmVydGVkID0gbm90ICE9IG51bGw7CiAgICBFeHByZXNzaW9uIGlzRXhwcmVzc2lvbiA9CiAgICAgICAgZm9yZXN0LmNyZWF0ZUlzRXhwcmVzc2lvbihvcGVyYW5kLCBpc09wZXJhdG9yLCBub3QsIHR5cGUpOwogICAgbGlicmFyeS5jaGVja0JvdW5kc0luVHlwZSgKICAgICAgICB0eXBlLCB0eXBlRW52aXJvbm1lbnQsIHVyaSwgaXNPcGVyYXRvci5jaGFyT2Zmc2V0KTsKICAgIGlmIChvcGVyYW5kIGlzIFZhcmlhYmxlR2V0KSB7CiAgICAgIHR5cGVQcm9tb3Rlcj8uaGFuZGxlSXNDaGVjayhpc0V4cHJlc3Npb24sIGlzSW52ZXJ0ZWQsIG9wZXJhbmQudmFyaWFibGUsCiAgICAgICAgICB0eXBlLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICB9CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVDb25zdGFudFVwZGF0ZTIwMTggJiYKICAgICAgICBjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUpIHsKICAgICAgcHVzaChkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZU5vdENvbnN0YW50RXhwcmVzc2lvbi53aXRoQXJndW1lbnRzKCdJcyBleHByZXNzaW9uJyksCiAgICAgICAgICBpc09wZXJhdG9yLmNoYXJPZmZzZXQsCiAgICAgICAgICBpc09wZXJhdG9yLmxlbmd0aCkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goaXNFeHByZXNzaW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db25kaXRpb25hbEV4cHJlc3Npb24oVG9rZW4gcXVlc3Rpb24pIHsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIHR5cGVQcm9tb3Rlcj8uZW50ZXJUaGVuKGNvbmRpdGlvbik7CiAgICBwdXNoKGNvbmRpdGlvbik7CiAgICBzdXBlci5iZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbihxdWVzdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNvbmRpdGlvbmFsRXhwcmVzc2lvbkNvbG9uKCkgewogICAgRXhwcmVzc2lvbiB0aGVuID0gcG9wRm9yVmFsdWUoKTsKICAgIHR5cGVQcm9tb3Rlcj8uZW50ZXJFbHNlKCk7CiAgICBwdXNoKHRoZW4pOwogICAgc3VwZXIuaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29sb24oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRva2VuIHF1ZXN0aW9uLCBUb2tlbiBjb2xvbikgewogICAgZGVidWdFdmVudCgiQ29uZGl0aW9uYWxFeHByZXNzaW9uIik7CiAgICBFeHByZXNzaW9uIGVsc2VFeHByZXNzaW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIEV4cHJlc3Npb24gdGhlbkV4cHJlc3Npb24gPSBwb3AoKTsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcG9wKCk7CiAgICB0eXBlUHJvbW90ZXI/LmV4aXRDb25kaXRpb25hbCgpOwogICAgcHVzaChmb3Jlc3QuY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgIGNvbmRpdGlvbiwgcXVlc3Rpb24sIHRoZW5FeHByZXNzaW9uLCBjb2xvbiwgZWxzZUV4cHJlc3Npb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVGhyb3dFeHByZXNzaW9uKFRva2VuIHRocm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJUaHJvd0V4cHJlc3Npb24iKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIHB1c2goYnVpbGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24ud2l0aEFyZ3VtZW50cygnVGhyb3cnKSwKICAgICAgICAgIHRocm93VG9rZW4ub2Zmc2V0LAogICAgICAgICAgdGhyb3dUb2tlbi5sZW5ndGgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZVRocm93KHRocm93VG9rZW4sIGV4cHJlc3Npb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXIoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCwgVG9rZW4gcmVxdWlyZWRUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sIFRva2VuIHZhckZpbmFsT3JDb25zdCkgewogICAgLy8gVE9ETyhkYW5ydWJlbCk6IGhhbmRsZSByZXF1aXJlZCB0b2tlbgogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKHJlcXVpcmVkVG9rZW4pOwogICAgfQogICAgcHVzaCgoY292YXJpYW50VG9rZW4gIT0gbnVsbCA/IGNvdmFyaWFudE1hc2sgOiAwKSB8CiAgICAgICAgTW9kaWZpZXIudmFsaWRhdGVWYXJGaW5hbE9yQ29uc3QodmFyRmluYWxPckNvbnN0Py5sZXhlbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVyKAogICAgICBUb2tlbiB0aGlzS2V5d29yZCwKICAgICAgVG9rZW4gcGVyaW9kQWZ0ZXJUaGlzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIGluaXRpYWxpemVyU3RhcnQsCiAgICAgIFRva2VuIGluaXRpYWxpemVyRW5kLAogICAgICBGb3JtYWxQYXJhbWV0ZXJLaW5kIGtpbmQsCiAgICAgIE1lbWJlcktpbmQgbWVtYmVyS2luZCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVyIik7CiAgICBpZiAodGhpc0tleXdvcmQgIT0gbnVsbCkgewogICAgICBpZiAoIWluQ29uc3RydWN0b3IpIHsKICAgICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKGZhc3RhLm1lc3NhZ2VGaWVsZEluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yLAogICAgICAgICAgICB0aGlzS2V5d29yZCwgdGhpc0tleXdvcmQpOwogICAgICAgIHRoaXNLZXl3b3JkID0gbnVsbDsKICAgICAgfQogICAgfQogICAgT2JqZWN0IG5hbWVOb2RlID0gcG9wKCk7CiAgICBVbnJlc29sdmVkVHlwZSB0eXBlID0gcG9wKCk7CiAgICBpZiAoZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gMCkgewogICAgICAvLyBUT0RPKGFoZSk6IFRoZSB0eXBlIHdlIGNvbXB1dGUgaGVyZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gd2hhdCBpcwogICAgICAvLyBjb21wdXRlZCBpbiB0aGUgb3V0bGluZSBwaGFzZS4gV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBvdXRsaW5lCiAgICAgIC8vIHBoYXNlIGNvbXB1dGVzIHRoZSBzYW1lIHR5cGUuIFNlZQogICAgICAvLyBwa2cvZnJvbnRfZW5kL3Rlc3RjYXNlcy9kZWZlcnJlZF90eXBlX2Fubm90YXRpb24uZGFydCBmb3IgYW4gZXhhbXBsZQogICAgICAvLyB3aGVyZSBub3QgY2FsbGluZyBbYnVpbGREYXJ0VHlwZV0gbGVhZHMgdG8gYSBtaXNzaW5nIGNvbXBpbGUtdGltZQogICAgICAvLyBlcnJvci4gQWxzbywgbm90aWNlIHRoYXQgdGhlIHR5cGUgb2YgdGhlIHByb2JsZW1hdGljIHBhcmFtZXRlciBpc24ndAogICAgICAvLyBgaW52YWxpZC10eXBlYC4KICAgICAgYnVpbGREYXJ0VHlwZSh0eXBlKTsKICAgIH0KICAgIGludCBtb2RpZmllcnMgPSBwb3AoKTsKICAgIGlmIChpbkNhdGNoQ2xhdXNlKSB7CiAgICAgIG1vZGlmaWVycyB8PSBmaW5hbE1hc2s7CiAgICB9CiAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gcG9wKCk7CiAgICBpZiAobmFtZU5vZGUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChuYW1lTm9kZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIElkZW50aWZpZXIgbmFtZSA9IG5hbWVOb2RlOwogICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXI7CiAgICBpZiAoIWluQ2F0Y2hDbGF1c2UgJiYKICAgICAgICBmdW5jdGlvbk5lc3RpbmdMZXZlbCA9PSAwICYmCiAgICAgICAgbWVtYmVyS2luZCAhPSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlKSB7CiAgICAgIEZ1bmN0aW9uQnVpbGRlciBtZW1iZXIgPSB0aGlzLm1lbWJlcjsKICAgICAgcGFyYW1ldGVyID0gbWVtYmVyLmdldEZvcm1hbChuYW1lLm5hbWUpOwogICAgICBpZiAocGFyYW1ldGVyID09IG51bGwpIHsKICAgICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShuYW1lVG9rZW4uY2hhck9mZnNldCkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcGFyYW1ldGVyID0gbmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIobnVsbCwgbW9kaWZpZXJzLCB0eXBlPy5idWlsZGVyLAogICAgICAgICAgbmFtZT8ubmFtZSwgbGlicmFyeSwgb2Zmc2V0Rm9yVG9rZW4obmFtZVRva2VuKSk7CiAgICB9CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0KICAgICAgICBwYXJhbWV0ZXIuYnVpbGQobGlicmFyeSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IG5hbWU/LmluaXRpYWxpemVyOwogICAgaWYgKGluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgaWYgKG1lbWJlciBpcyBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyKSB7CiAgICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlciBmYWN0b3J5ID0gbWVtYmVyOwogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcgogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZmFjdG9yeS5yZWRpcmVjdGlvblRhcmdldC5mdWxsTmFtZUZvckVycm9ycyksCiAgICAgICAgICAgIGluaXRpYWxpemVyLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXJpYWJsZS5pbml0aWFsaXplciA9IGluaXRpYWxpemVyLi5wYXJlbnQgPSB2YXJpYWJsZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChraW5kICE9IEZvcm1hbFBhcmFtZXRlcktpbmQubWFuZGF0b3J5KSB7CiAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyID8/PSBmb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwobnVsbCkKICAgICAgICAuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgfQogICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgaWYgKGZ1bmN0aW9uTmVzdGluZ0xldmVsID09IDApIHsKICAgICAgICBpbmZlckFubm90YXRpb25zKGFubm90YXRpb25zKTsKICAgICAgfQogICAgICBmb3IgKEV4cHJlc3Npb24gYW5ub3RhdGlvbiBpbiBhbm5vdGF0aW9ucykgewogICAgICAgIHZhcmlhYmxlLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHB1c2gocGFyYW1ldGVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMiKTsKICAgIEZvcm1hbFBhcmFtZXRlcktpbmQga2luZCA9IG9wdGlvbmFsKCJ7IiwgYmVnaW5Ub2tlbikKICAgICAgICA/IEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxOYW1lZAogICAgICAgIDogRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbFBvc2l0aW9uYWw7CiAgICAvLyBXaGVuIHJlY292ZXJpbmcgZnJvbSBhbiBlbXB0eSBsaXN0IG9mIG9wdGlvbmFsIGFyZ3VtZW50cywgY291bnQgbWF5IGJlCiAgICAvLyAwLiBJdCBtaWdodCBiZSBzaW1wbGVyIGlmIHRoZSBwYXJzZXIgZGlkbid0IGNhbGwgdGhpcyBtZXRob2QgaW4gdGhhdAogICAgLy8gY2FzZSwgaG93ZXZlciwgdGhlbiBbYmVnaW5PcHRpb25hbEZvcm1hbFBhcmFtZXRlcnNdIHdvdWxkbid0IGFsd2F5cyBiZQogICAgLy8gbWF0Y2hlZCBieSB0aGlzIG1ldGhvZC4KICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gcGFyYW1ldGVycyA9CiAgICAgICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4oKS5wb3Aoc3RhY2ssIGNvdW50KTsKICAgIGlmIChwYXJhbWV0ZXJzID09IG51bGwpIHsKICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3Zlcnkob2Zmc2V0Rm9yVG9rZW4oYmVnaW5Ub2tlbikpKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgaW4gcGFyYW1ldGVycykgewogICAgICAgIHBhcmFtZXRlci5raW5kID0ga2luZDsKICAgICAgfQogICAgICBwdXNoKHBhcmFtZXRlcnMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlciIpOwogICAgZnVuY3Rpb25OZXN0aW5nTGV2ZWwrKzsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiBuYW1lVG9rZW4sIFRva2VuIHF1ZXN0aW9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyIik7CiAgICBpZiAoaW5DYXRjaENsYXVzZSB8fCBmdW5jdGlvbk5lc3RpbmdMZXZlbCAhPSAwKSB7CiAgICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICB9CiAgICBGb3JtYWxQYXJhbWV0ZXJzIGZvcm1hbHMgPSBwb3AoKTsKICAgIFVucmVzb2x2ZWRUeXBlIHJldHVyblR5cGUgPSBwb3AoKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZShxdWVzdGlvbik7CiAgICB9CiAgICBVbnJlc29sdmVkVHlwZSB0eXBlID0gZm9ybWFscy50b0Z1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCB0eXBlVmFyaWFibGVzKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKHR5cGUpOwogICAgZnVuY3Rpb25OZXN0aW5nTGV2ZWwtLTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkgewogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0LnJlcXVpcmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbiIpOwogICAgT2JqZWN0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSBwb3AoKTsKICAgIGNvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgcHVzaChkZWZhdWx0VmFsdWVFeHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIGVxdWFscywgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlZhbHVlZEZvcm1hbFBhcmFtZXRlciIpOwogICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IHBvcEZvclZhbHVlKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IEluaXRpYWxpemVkSWRlbnRpZmllcihuYW1lLCBpbml0aWFsaXplcikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JtYWxQYXJhbWV0ZXJXaXRob3V0VmFsdWUoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlcldpdGhvdXRWYWx1ZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0Lm5vbmU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVycyIpOwogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBvcHRpb25hbHM7CiAgICBpbnQgb3B0aW9uYWxzQ291bnQgPSAwOwogICAgaWYgKGNvdW50ID4gMCAmJiBwZWVrKCkgaXMgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPikgewogICAgICBvcHRpb25hbHMgPSBwb3AoKTsKICAgICAgY291bnQtLTsKICAgICAgb3B0aW9uYWxzQ291bnQgPSBvcHRpb25hbHMubGVuZ3RoOwogICAgfQogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBwYXJhbWV0ZXJzID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigpCiAgICAgICAgICAgIC5wb3BQYWRkZWQoc3RhY2ssIGNvdW50LCBvcHRpb25hbHNDb3VudCk7CiAgICBpZiAob3B0aW9uYWxzICE9IG51bGwgJiYgcGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHBhcmFtZXRlcnMuc2V0UmFuZ2UoY291bnQsIGNvdW50ICsgb3B0aW9uYWxzQ291bnQsIG9wdGlvbmFscyk7CiAgICB9CiAgICBhc3NlcnQocGFyYW1ldGVycz8uaXNOb3RFbXB0eSA/PyB0cnVlKTsKICAgIEZvcm1hbFBhcmFtZXRlcnMgZm9ybWFscyA9IG5ldyBGb3JtYWxQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4oYmVnaW5Ub2tlbiksIGxlbmd0aE9mU3BhbihiZWdpblRva2VuLCBlbmRUb2tlbiksIHVyaSk7CiAgICBjb25zdGFudENvbnRleHQgPSBwb3AoKTsKICAgIHB1c2goZm9ybWFscyk7CiAgICBpZiAoKGluQ2F0Y2hDbGF1c2UgfHwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwgIT0gMCkgJiYKICAgICAgICBraW5kICE9IE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUpIHsKICAgICAgZW50ZXJMb2NhbFNjb3BlKAogICAgICAgICAgbnVsbCwKICAgICAgICAgIGZvcm1hbHMuY29tcHV0ZUZvcm1hbFBhcmFtZXRlclNjb3BlKAogICAgICAgICAgICAgIHNjb3BlLCBtZW1iZXIgPz8gY2xhc3NCdWlsZGVyID8/IGxpYnJhcnksIHRoaXMpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DYXRjaENsYXVzZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5DYXRjaENsYXVzZSIpOwogICAgaW5DYXRjaENsYXVzZSA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENhdGNoQ2xhdXNlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDYXRjaENsYXVzZSIpOwogICAgaW5DYXRjaENsYXVzZSA9IGZhbHNlOwogICAgcHVzaChpbkNhdGNoQmxvY2spOwogICAgaW5DYXRjaEJsb2NrID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2F0Y2hCbG9jayhUb2tlbiBvbktleXdvcmQsIFRva2VuIGNhdGNoS2V5d29yZCwgVG9rZW4gY29tbWEpIHsKICAgIGRlYnVnRXZlbnQoIkNhdGNoQmxvY2siKTsKICAgIFN0YXRlbWVudCBib2R5ID0gcG9wKCk7CiAgICBpbkNhdGNoQmxvY2sgPSBwb3AoKTsKICAgIGlmIChjYXRjaEtleXdvcmQgIT0gbnVsbCkgewogICAgICBleGl0TG9jYWxTY29wZSgpOwogICAgfQogICAgRm9ybWFsUGFyYW1ldGVycyBjYXRjaFBhcmFtZXRlcnMgPSBwb3BJZk5vdE51bGwoY2F0Y2hLZXl3b3JkKTsKICAgIERhcnRUeXBlIGV4Y2VwdGlvblR5cGUgPQogICAgICAgIGJ1aWxkRGFydFR5cGUocG9wSWZOb3ROdWxsKG9uS2V5d29yZCkpID8/IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGV4Y2VwdGlvbjsKICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgc3RhY2tUcmFjZTsKICAgIExpc3Q8U3RhdGVtZW50PiBjb21waWxlVGltZUVycm9yczsKICAgIGlmIChjYXRjaFBhcmFtZXRlcnM/LnBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBpbnQgcGFyYW1ldGVyQ291bnQgPSBjYXRjaFBhcmFtZXRlcnMucGFyYW1ldGVycy5sZW5ndGg7CiAgICAgIGlmIChwYXJhbWV0ZXJDb3VudCA+IDApIHsKICAgICAgICBleGNlcHRpb24gPSBjYXRjaFBhcmFtZXRlcnMucGFyYW1ldGVyc1swXTsKICAgICAgICBleGNlcHRpb24uYnVpbGQobGlicmFyeSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpLnR5cGUgPSBleGNlcHRpb25UeXBlOwogICAgICAgIGlmIChwYXJhbWV0ZXJDb3VudCA+IDEpIHsKICAgICAgICAgIHN0YWNrVHJhY2UgPSBjYXRjaFBhcmFtZXRlcnMucGFyYW1ldGVyc1sxXTsKICAgICAgICAgIHN0YWNrVHJhY2UuYnVpbGQobGlicmFyeSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpLnR5cGUgPQogICAgICAgICAgICAgIGNvcmVUeXBlcy5zdGFja1RyYWNlQ2xhc3MucmF3VHlwZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHBhcmFtZXRlckNvdW50ID4gMikgewogICAgICAgIC8vIElmIHBhcmFtZXRlckNvdW50IGlzIDAsIHRoZSBwYXJzZXIgcmVwb3J0ZWQgYW4gZXJyb3IgYWxyZWFkeS4KICAgICAgICBpZiAocGFyYW1ldGVyQ291bnQgIT0gMCkgewogICAgICAgICAgZm9yIChpbnQgaSA9IDI7IGkgPCBwYXJhbWV0ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgcGFyYW1ldGVyID0gY2F0Y2hQYXJhbWV0ZXJzLnBhcmFtZXRlcnNbaV07CiAgICAgICAgICAgIGNvbXBpbGVUaW1lRXJyb3JzID8/PSA8U3RhdGVtZW50PltdOwogICAgICAgICAgICBjb21waWxlVGltZUVycm9ycy5hZGQoYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzLCBwYXJhbWV0ZXIuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGxlbmd0aDogcGFyYW1ldGVyLm5hbWUubGVuZ3RoKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVDYXRjaCgKICAgICAgICBvbktleXdvcmQsCiAgICAgICAgZXhjZXB0aW9uVHlwZSwKICAgICAgICBjYXRjaEtleXdvcmQsCiAgICAgICAgZXhjZXB0aW9uPy50YXJnZXQsCiAgICAgICAgc3RhY2tUcmFjZT8udGFyZ2V0LAogICAgICAgIGNvcmVUeXBlcy5zdGFja1RyYWNlQ2xhc3MucmF3VHlwZSwKICAgICAgICBib2R5KSk7CiAgICBpZiAoY29tcGlsZVRpbWVFcnJvcnMgPT0gbnVsbCkgewogICAgICBwdXNoKE51bGxWYWx1ZS5CbG9jayk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVCbG9jayhudWxsLCBjb21waWxlVGltZUVycm9ycywgbnVsbCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUcnlTdGF0ZW1lbnQoaW50IGNhdGNoQ291bnQsIFRva2VuIHRyeUtleXdvcmQsIFRva2VuIGZpbmFsbHlLZXl3b3JkKSB7CiAgICBTdGF0ZW1lbnQgZmluYWxseUJsb2NrID0gcG9wU3RhdGVtZW50SWZOb3ROdWxsKGZpbmFsbHlLZXl3b3JkKTsKICAgIExpc3Q8Q2F0Y2g+IGNhdGNoQmxvY2tzOwogICAgTGlzdDxTdGF0ZW1lbnQ+IGNvbXBpbGVUaW1lRXJyb3JzOwogICAgaWYgKGNhdGNoQ291bnQgIT0gMCkgewogICAgICBMaXN0PE9iamVjdD4gY2F0Y2hCbG9ja3NBbmRFcnJvcnMgPQogICAgICAgICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8T2JqZWN0PigpLnBvcChzdGFjaywgY2F0Y2hDb3VudCAqIDIpOwogICAgICBjYXRjaEJsb2NrcyA9IG5ldyBMaXN0PENhdGNoPi5maWxsZWQoY2F0Y2hDb3VudCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhdGNoQ291bnQ7IGkrKykgewogICAgICAgIGNhdGNoQmxvY2tzW2ldID0gY2F0Y2hCbG9ja3NBbmRFcnJvcnNbaSAqIDJdOwogICAgICAgIFN0YXRlbWVudCBlcnJvciA9IGNhdGNoQmxvY2tzQW5kRXJyb3JzW2kgKiAyICsgMV07CiAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgICAgIGNvbXBpbGVUaW1lRXJyb3JzID8/PSA8U3RhdGVtZW50PltdOwogICAgICAgICAgY29tcGlsZVRpbWVFcnJvcnMuYWRkKGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIFN0YXRlbWVudCB0cnlCbG9jayA9IHBvcFN0YXRlbWVudCgpOwogICAgU3RhdGVtZW50IHRyeVN0YXRlbWVudCA9IGZvcmVzdC5jcmVhdGVUcnlTdGF0ZW1lbnQoCiAgICAgICAgdHJ5S2V5d29yZCwgdHJ5QmxvY2ssIGNhdGNoQmxvY2tzLCBmaW5hbGx5S2V5d29yZCwgZmluYWxseUJsb2NrKTsKICAgIGlmIChjb21waWxlVGltZUVycm9ycyAhPSBudWxsKSB7CiAgICAgIGNvbXBpbGVUaW1lRXJyb3JzLmFkZCh0cnlTdGF0ZW1lbnQpOwogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVCbG9jayhudWxsLCBjb21waWxlVGltZUVycm9ycywgbnVsbCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaCh0cnlTdGF0ZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbmRleGVkRXhwcmVzc2lvbigKICAgICAgVG9rZW4gb3BlblNxdWFyZUJyYWNrZXQsIFRva2VuIGNsb3NlU3F1YXJlQnJhY2tldCkgewogICAgZGVidWdFdmVudCgiSW5kZXhlZEV4cHJlc3Npb24iKTsKICAgIEV4cHJlc3Npb24gaW5kZXggPSBwb3BGb3JWYWx1ZSgpOwogICAgT2JqZWN0IHJlY2VpdmVyID0gcG9wKCk7CiAgICBpZiAocmVjZWl2ZXIgaXMgVGhpc0FjY2Vzc0dlbmVyYXRvciAmJiByZWNlaXZlci5pc1N1cGVyKSB7CiAgICAgIHB1c2gobmV3IFN1cGVySW5kZXhlZEFjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBvcGVuU3F1YXJlQnJhY2tldCwKICAgICAgICAgIGluZGV4LAogICAgICAgICAgbG9va3VwSW5zdGFuY2VNZW1iZXIoaW5kZXhHZXROYW1lLCBpc1N1cGVyOiB0cnVlKSwKICAgICAgICAgIGxvb2t1cEluc3RhbmNlTWVtYmVyKGluZGV4U2V0TmFtZSwgaXNTdXBlcjogdHJ1ZSkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goSW5kZXhlZEFjY2Vzc0dlbmVyYXRvci5tYWtlKAogICAgICAgICAgdGhpcywgb3BlblNxdWFyZUJyYWNrZXQsIHRvVmFsdWUocmVjZWl2ZXIpLCBpbmRleCwgbnVsbCwgbnVsbCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVVbmFyeVByZWZpeEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlVuYXJ5UHJlZml4RXhwcmVzc2lvbiIpOwogICAgT2JqZWN0IHJlY2VpdmVyID0gcG9wKCk7CiAgICBpZiAob3B0aW9uYWwoIiEiLCB0b2tlbikpIHsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlTm90KHRvVmFsdWUocmVjZWl2ZXIpLCB0b2tlbiwgZmFsc2UpKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyBvcGVyYXRvciA9IHRva2VuLnN0cmluZ1ZhbHVlOwogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyVmFsdWU7CiAgICAgIGlmIChvcHRpb25hbCgiLSIsIHRva2VuKSkgewogICAgICAgIG9wZXJhdG9yID0gInVuYXJ5LSI7CiAgICAgIH0KICAgICAgYm9vbCBpc1N1cGVyID0gZmFsc2U7CiAgICAgIGlmIChyZWNlaXZlciBpcyBUaGlzQWNjZXNzR2VuZXJhdG9yICYmIHJlY2VpdmVyLmlzU3VwZXIpIHsKICAgICAgICBpc1N1cGVyID0gdHJ1ZTsKICAgICAgICByZWNlaXZlclZhbHVlID0gZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHJlY2VpdmVyLnRva2VuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZWNlaXZlclZhbHVlID0gdG9WYWx1ZShyZWNlaXZlcik7CiAgICAgIH0KICAgICAgcHVzaChidWlsZE1ldGhvZEludm9jYXRpb24ocmVjZWl2ZXJWYWx1ZSwgbmV3IE5hbWUob3BlcmF0b3IpLAogICAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50c0VtcHR5KG5vTG9jYXRpb24pLCB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgLy8gVGhpcyAqY291bGQqIGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgd2UgY2FuJ3Qga25vdyB3aXRob3V0CiAgICAgICAgICAvLyBldmFsdWF0aW5nIFtyZWNlaXZlcl0uCiAgICAgICAgICBpc0NvbnN0YW50RXhwcmVzc2lvbjogIWlzU3VwZXIsCiAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyKSk7CiAgICB9CiAgfQoKICBOYW1lIGluY3JlbWVudE9wZXJhdG9yKFRva2VuIHRva2VuKSB7CiAgICBpZiAob3B0aW9uYWwoIisrIiwgdG9rZW4pKSByZXR1cm4gcGx1c05hbWU7CiAgICBpZiAob3B0aW9uYWwoIi0tIiwgdG9rZW4pKSByZXR1cm4gbWludXNOYW1lOwogICAgcmV0dXJuIHVuaGFuZGxlZCh0b2tlbi5sZXhlbWUsICJpbmNyZW1lbnRPcGVyYXRvciIsIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24iKTsKICAgIE9iamVjdCBnZW5lcmF0b3IgPSBwb3AoKTsKICAgIGlmIChnZW5lcmF0b3IgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHB1c2goZ2VuZXJhdG9yLmJ1aWxkUHJlZml4SW5jcmVtZW50KGluY3JlbWVudE9wZXJhdG9yKHRva2VuKSwKICAgICAgICAgIG9mZnNldDogdG9rZW4uY2hhck9mZnNldCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaCh3cmFwSW5Qcm9ibGVtKAogICAgICAgICAgdG9WYWx1ZShnZW5lcmF0b3IpLCBmYXN0YS5tZXNzYWdlTm90QW5MdmFsdWUsIG5vTGVuZ3RoKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UG9zdGZpeEFzc2lnbm1lbnRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbiIpOwogICAgT2JqZWN0IGdlbmVyYXRvciA9IHBvcCgpOwogICAgaWYgKGdlbmVyYXRvciBpcyBHZW5lcmF0b3IpIHsKICAgICAgcHVzaChuZXcgRGVsYXllZFBvc3RmaXhJbmNyZW1lbnQoCiAgICAgICAgICB0aGlzLCB0b2tlbiwgZ2VuZXJhdG9yLCBpbmNyZW1lbnRPcGVyYXRvcih0b2tlbiksIG51bGwpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2god3JhcEluUHJvYmxlbSgKICAgICAgICAgIHRvVmFsdWUoZ2VuZXJhdG9yKSwgZmFzdGEubWVzc2FnZU5vdEFuTHZhbHVlLCBub0xlbmd0aCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgVG9rZW4gc3RhcnQsIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDb25zdHJ1Y3RvclJlZmVyZW5jZSIpOwogICAgcHVzaFF1YWxpZmllZFJlZmVyZW5jZShzdGFydCwgcGVyaW9kQmVmb3JlTmFtZSk7CiAgfQoKICAvLy8gQSBxdWFsaWZpZWQgcmVmZXJlbmNlIGlzIHNvbWV0aGluZyB0aGF0IG1hdGNoZXMgb25lIG9mOgogIC8vLwogIC8vLyAgICAgaWRlbnRpZmllcgogIC8vLyAgICAgaWRlbnRpZmllciB0eXBlQXJndW1lbnRzPyAnLicgaWRlbnRpZmllcgogIC8vLyAgICAgaWRlbnRpZmllciAnLicgaWRlbnRpZmllciB0eXBlQXJndW1lbnRzPyAnLicgaWRlbnRpZmllcgogIC8vLwogIC8vLyBUaGF0IGlzLCBvbmUgdG8gdGhyZWUgaWRlbnRpZmllcnMgc2VwYXJhdGVkIGJ5IHBlcmlvZHMgYW5kIG9wdGlvbmFsbHkgb25lCiAgLy8vIGxpc3Qgb2YgdHlwZSBhcmd1bWVudHMuCiAgLy8vCiAgLy8vIEEgcXVhbGlmaWVkIHJlZmVyZW5jZSBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYm90aCBhIHJlZmVyZW5jZSB0bwogIC8vLyBjb21waWxlLXRpbWUgY29uc3RhbnQgdmFyaWFibGUgKG1ldGFkYXRhKSBvciBhIGNvbnN0cnVjdG9yIHJlZmVyZW5jZQogIC8vLyAodXNlZCBieSBtZXRhZGF0YSwgbmV3L2NvbnN0IGV4cHJlc3Npb24sIGFuZCByZWRpcmVjdGluZyBmYWN0b3JpZXMpLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIHBhcnNlciB3aWxsIHJlcG9ydCBlcnJvcnMgaWYgbWV0YWRhdGEgaW5jbHVkZXMgdHlwZQogIC8vLyBhcmd1bWVudHMsIGJ1dCB3aWxsIG90aGVyIHByZXNlcnZlIHRoZW0gZm9yIGVycm9yIHJlY292ZXJ5LgogIC8vLwogIC8vLyBBIGNvbnN0cnVjdG9yIHJlZmVyZW5jZSBjYW4gY29udGFpbiB1cCB0byB0aHJlZSBpZGVudGlmaWVyczoKICAvLy8KICAvLy8gICAgIGEpIHR5cGUgdHlwZUFyZ3VtZW50cz8KICAvLy8gICAgIGIpIHR5cGUgdHlwZUFyZ3VtZW50cz8gJy4nIG5hbWUKICAvLy8gICAgIGMpIHByZWZpeCAnLicgdHlwZSB0eXBlQXJndW1lbnRzPwogIC8vLyAgICAgZCkgcHJlZml4ICcuJyB0eXBlIHR5cGVBcmd1bWVudHM/ICcuJyBuYW1lCiAgLy8vCiAgLy8vIFRoaXMgaXNuJ3QgYSBsZWdhbCBjb25zdHJ1Y3RvciByZWZlcmVuY2U6CiAgLy8vCiAgLy8vICAgICB0eXBlICcuJyBuYW1lIHR5cGVBcmd1bWVudHM/CiAgLy8vCiAgLy8vIEJ1dCB0aGUgcGFyc2VyIGNhbid0IHRlbGwgdGhpcyBmcm9tIHR5cGUgYykgYWJvdmUuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIHBvcHMgMiAob3IgMyBpZiBgcGVyaW9kQmVmb3JlTmFtZSAhPSBudWxsYCkgdmFsdWVzIGZyb20gdGhlCiAgLy8vIHN0YWNrIGFuZCBwdXNoZXMgMyB2YWx1ZXM6IGEgZ2VuZXJhdG9yICh0aGUgdHlwZSBpbiBhIGNvbnN0cnVjdG9yCiAgLy8vIHJlZmVyZW5jZSwgb3IgYW4gZXhwcmVzc2lvbiBpbiBtZXRhZGF0YSksIGEgbGlzdCBvZiB0eXBlIGFyZ3VtZW50cywgYW5kIGEKICAvLy8gbmFtZS4KICB2b2lkIHB1c2hRdWFsaWZpZWRSZWZlcmVuY2UoVG9rZW4gc3RhcnQsIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUpIHsKICAgIGFzc2VydChjaGVja1N0YXRlKHN0YXJ0LCBbCiAgICAgIC8qc3VmZml4Ki8gaWYgKHBlcmlvZEJlZm9yZU5hbWUgIT0gbnVsbCkgVmFsdWVLaW5kLklkZW50aWZpZXIsCiAgICAgIC8qdHlwZSBhcmd1bWVudHMqLyBWYWx1ZUtpbmQuVHlwZUFyZ3VtZW50c09yTnVsbCwKICAgICAgLyp0eXBlKi8gdW5pb25PZktpbmRzKFsKICAgICAgICBWYWx1ZUtpbmQuR2VuZXJhdG9yLAogICAgICAgIFZhbHVlS2luZC5RdWFsaWZpZWROYW1lLAogICAgICAgIFZhbHVlS2luZC5Qcm9ibGVtQnVpbGRlciwKICAgICAgICBWYWx1ZUtpbmQuUGFyc2VyUmVjb3ZlcnkKICAgICAgXSkKICAgIF0pKTsKICAgIElkZW50aWZpZXIgc3VmZml4ID0gcG9wSWZOb3ROdWxsKHBlcmlvZEJlZm9yZU5hbWUpOwogICAgSWRlbnRpZmllciBpZGVudGlmaWVyOwogICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cyA9IHBvcCgpOwogICAgT2JqZWN0IHR5cGUgPSBwb3AoKTsKICAgIGlmICh0eXBlIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgaWRlbnRpZmllciA9IHR5cGU7CiAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkID0gdHlwZTsKICAgICAgT2JqZWN0IHF1YWxpZmllciA9IHF1YWxpZmllZC5xdWFsaWZpZXI7CiAgICAgIGFzc2VydChjaGVja1ZhbHVlKAogICAgICAgICAgc3RhcnQsCiAgICAgICAgICB1bmlvbk9mS2luZHMoW1ZhbHVlS2luZC5HZW5lcmF0b3IsIFZhbHVlS2luZC5Qcm9ibGVtQnVpbGRlcl0pLAogICAgICAgICAgcXVhbGlmaWVyKSk7CiAgICAgIGlmIChxdWFsaWZpZXIgaXMgVHlwZVVzZUdlbmVyYXRvcikgewogICAgICAgIHR5cGUgPSBxdWFsaWZpZXI7CiAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgICAgLy8gVE9ETyhhaGUpOiBQb2ludCB0byB0aGUgdHlwZSBhcmd1bWVudHMgaW5zdGVhZC4KICAgICAgICAgIGFkZFByb2JsZW0oZmFzdGEubWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgICAgaWRlbnRpZmllci5jaGFyT2Zmc2V0LCBpZGVudGlmaWVyLm5hbWUubGVuZ3RoKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocXVhbGlmaWVyIGlzIEdlbmVyYXRvcikgewogICAgICAgIHR5cGUgPSBxdWFsaWZpZXIucXVhbGlmaWVkTG9va3VwKGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuKGlkZW50aWZpZXIpKTsKICAgICAgICBpZGVudGlmaWVyID0gbnVsbDsKICAgICAgfSBlbHNlIGlmIChxdWFsaWZpZXIgaXMgUHJvYmxlbUJ1aWxkZXIpIHsKICAgICAgICB0eXBlID0gcXVhbGlmaWVyOwogICAgICB9IGVsc2UgewogICAgICAgIHVuaGFuZGxlZCgiJHtxdWFsaWZpZXIucnVudGltZVR5cGV9IiwgInB1c2hRdWFsaWZpZWRSZWZlcmVuY2UiLAogICAgICAgICAgICBzdGFydC5jaGFyT2Zmc2V0LCB1cmkpOwogICAgICB9CiAgICB9CiAgICBTdHJpbmcgbmFtZTsKICAgIGlmIChpZGVudGlmaWVyICE9IG51bGwgJiYgc3VmZml4ICE9IG51bGwpIHsKICAgICAgbmFtZSA9ICIke2lkZW50aWZpZXIubmFtZX0uJHtzdWZmaXgubmFtZX0iOwogICAgfSBlbHNlIGlmIChpZGVudGlmaWVyICE9IG51bGwpIHsKICAgICAgbmFtZSA9IGlkZW50aWZpZXIubmFtZTsKICAgIH0gZWxzZSBpZiAoc3VmZml4ICE9IG51bGwpIHsKICAgICAgbmFtZSA9IHN1ZmZpeC5uYW1lOwogICAgfSBlbHNlIHsKICAgICAgbmFtZSA9ICIiOwogICAgfQogICAgcHVzaCh0eXBlKTsKICAgIHB1c2godHlwZUFyZ3VtZW50cyA/PyBOdWxsVmFsdWUuVHlwZUFyZ3VtZW50cyk7CiAgICBwdXNoKG5hbWUpOwogICAgcHVzaChzdWZmaXggPz8gaWRlbnRpZmllciA/PyBOdWxsVmFsdWUuSWRlbnRpZmllcik7CgogICAgYXNzZXJ0KGNoZWNrU3RhdGUoc3RhcnQsIFsKICAgICAgLypjb25zdHJ1Y3RvciBuYW1lIGlkZW50aWZpZXIqLyBWYWx1ZUtpbmQuSWRlbnRpZmllck9yTnVsbCwKICAgICAgLypjb25zdHJ1Y3RvciBuYW1lKi8gVmFsdWVLaW5kLk5hbWUsCiAgICAgIC8qdHlwZSBhcmd1bWVudHMqLyBWYWx1ZUtpbmQuVHlwZUFyZ3VtZW50c09yTnVsbCwKICAgICAgLypjbGFzcyovIHVuaW9uT2ZLaW5kcyhbCiAgICAgICAgVmFsdWVLaW5kLkdlbmVyYXRvciwKICAgICAgICBWYWx1ZUtpbmQuUHJvYmxlbUJ1aWxkZXIsCiAgICAgICAgVmFsdWVLaW5kLlBhcnNlclJlY292ZXJ5CiAgICAgIF0pLAogICAgXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFN0YXRpY0ludm9jYXRpb24oTWVtYmVyIHRhcmdldCwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAge0NvbnN0bmVzcyBjb25zdG5lc3M6IENvbnN0bmVzcy5pbXBsaWNpdCwKICAgICAgaW50IGNoYXJPZmZzZXQ6IC0xLAogICAgICBpbnQgY2hhckxlbmd0aDogbm9MZW5ndGh9KSB7CiAgICAvLyBUaGUgYXJndW1lbnQgY2hlY2tzIGZvciB0aGUgaW5pdGlhbCB0YXJnZXQgb2YgcmVkaXJlY3RpbmcgZmFjdG9yaWVzCiAgICAvLyBpbnZvY2F0aW9ucyBhcmUgc2tpcHBlZCBpbiBEYXJ0IDEuCiAgICBpZiAoIWxlZ2FjeU1vZGUgfHwgIWlzUmVkaXJlY3RpbmdGYWN0b3J5KHRhcmdldCwgaGVscGVyOiB0aGlzKSkgewogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gdGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgICBpZiAodGFyZ2V0IGlzIENvbnN0cnVjdG9yKSB7CiAgICAgICAgYXNzZXJ0KCF0YXJnZXQuZW5jbG9zaW5nQ2xhc3MuaXNBYnN0cmFjdCk7CiAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnM7CiAgICAgIH0KICAgICAgTG9jYXRlZE1lc3NhZ2UgYXJnTWVzc2FnZSA9IGNoZWNrQXJndW1lbnRzRm9yRnVuY3Rpb24oCiAgICAgICAgICB0YXJnZXQuZnVuY3Rpb24sIGFyZ3VtZW50cywgY2hhck9mZnNldCwgdHlwZVBhcmFtZXRlcnMpOwogICAgICBpZiAoYXJnTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHdyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICB0aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIHRhcmdldC5uYW1lLm5hbWUsCiAgICAgICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgY2FuZGlkYXRlOiB0YXJnZXQsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiBhcmdNZXNzYWdlKSwKICAgICAgICAgICAgY2hhck9mZnNldCk7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGlzQ29uc3QgPSBjb25zdG5lc3MgPT0gQ29uc3RuZXNzLmV4cGxpY2l0Q29uc3Q7CiAgICBpZiAodGFyZ2V0IGlzIENvbnN0cnVjdG9yKSB7CiAgICAgIGlzQ29uc3QgPQogICAgICAgICAgaXNDb25zdCB8fCBjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYgdGFyZ2V0LmlzQ29uc3Q7CiAgICAgIGlmICgoaXNDb25zdCB8fCBjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkKSAmJgogICAgICAgICAgIXRhcmdldC5pc0NvbnN0KSB7CiAgICAgICAgcmV0dXJuIHdyYXBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlTm9uQ29uc3RDb25zdHJ1Y3RvciwgY2hhck9mZnNldCwgY2hhckxlbmd0aCkpLAogICAgICAgICAgICB0YXJnZXQsCiAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgY2hhck9mZnNldCk7CiAgICAgIH0KICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUgPQogICAgICAgICAgbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbih0YXJnZXQsIGFyZ3VtZW50cywgaXNDb25zdDogaXNDb25zdCkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luQ29uc3RydWN0b3JJbnZvY2F0aW9uKG5vZGUsIHR5cGVFbnZpcm9ubWVudCwgdXJpKTsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgewogICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlID0gdGFyZ2V0OwogICAgICBpZiAocHJvY2VkdXJlLmlzRmFjdG9yeSkgewogICAgICAgIGlzQ29uc3QgPSBpc0NvbnN0IHx8CiAgICAgICAgICAgIGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJiBwcm9jZWR1cmUuaXNDb25zdDsKICAgICAgICBpZiAoKGlzQ29uc3QgfHwgY29uc3RhbnRDb250ZXh0ID09IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZCkgJiYKICAgICAgICAgICAgIXByb2NlZHVyZS5pc0NvbnN0KSB7CiAgICAgICAgICByZXR1cm4gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlTm9uQ29uc3RGYWN0b3J5LCBjaGFyT2Zmc2V0LCBjaGFyTGVuZ3RoKSksCiAgICAgICAgICAgICAgdGFyZ2V0LAogICAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgICBjaGFyT2Zmc2V0KTsKICAgICAgICB9CiAgICAgICAgU3RhdGljSW52b2NhdGlvbiBub2RlID0gRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgICAgICB0YXJnZXQsIGFyZ3VtZW50cywKICAgICAgICAgICAgaXNDb25zdDogaXNDb25zdCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luRmFjdG9yeUludm9jYXRpb24obm9kZSwgdHlwZUVudmlyb25tZW50LCB1cmkpOwogICAgICAgIHJldHVybiBub2RlOwogICAgICB9IGVsc2UgewogICAgICAgIFN0YXRpY0ludm9jYXRpb24gbm9kZSA9CiAgICAgICAgICAgIG5ldyBTdGF0aWNJbnZvY2F0aW9uKHRhcmdldCwgYXJndW1lbnRzLCBpc0NvbnN0OiBpc0NvbnN0KQogICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luU3RhdGljSW52b2NhdGlvbihub2RlLCB0eXBlRW52aXJvbm1lbnQsIHVyaSk7CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIExvY2F0ZWRNZXNzYWdlIGNoZWNrQXJndW1lbnRzRm9yRnVuY3Rpb24oRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LCBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKSB7CiAgICBpZiAoZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGggPAogICAgICAgIGZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgcmV0dXJuIGZhc3RhLnRlbXBsYXRlVG9vRmV3QXJndW1lbnRzCiAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykubGVuZ3RoKQogICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGFyZ3VtZW50cy5maWxlT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9CiAgICBpZiAoZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGggPgogICAgICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFzdGEudGVtcGxhdGVUb29NYW55QXJndW1lbnRzCiAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAgICAgZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGgpCiAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgYXJndW1lbnRzLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKTsKICAgIH0KICAgIExpc3Q8T2JqZWN0PiBuYW1lZCA9IGZvcmVzdC5hcmd1bWVudHNOYW1lZChhcmd1bWVudHMpOwogICAgaWYgKG5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgU2V0PFN0cmluZz4gbmFtZXMgPQogICAgICAgICAgbmV3IFNldC5mcm9tKGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5tYXAoKGEpID0+IGEubmFtZSkpOwogICAgICBmb3IgKE5hbWVkRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBuYW1lZCkgewogICAgICAgIGlmICghbmFtZXMuY29udGFpbnMoYXJndW1lbnQubmFtZSkpIHsKICAgICAgICAgIHJldHVybiBmYXN0YS50ZW1wbGF0ZU5vU3VjaE5hbWVkUGFyYW1ldGVyCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYXJndW1lbnQubmFtZSkKICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgYXJndW1lbnQuZmlsZU9mZnNldCwgYXJndW1lbnQubmFtZS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzID0gZm9yZXN0LmFyZ3VtZW50c1R5cGVBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIGlmICh0eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZXMubGVuZ3RoKSB7CiAgICAgIGlmICh0eXBlcy5sZW5ndGggPT0gMCkgewogICAgICAgIC8vIEV4cGVjdGVkIGB0eXBlUGFyYW1ldGVycy5sZW5ndGhgIHR5cGUgYXJndW1lbnRzLCBidXQgbm9uZSBnaXZlbiwgc28KICAgICAgICAvLyB3ZSBmaWxsIGluIGR5bmFtaWMgaW4gbGVnYWN5IG1vZGUsIGFuZCB1c2UgdHlwZSBpbmZlcmVuY2Ugb3RoZXJ3aXNlLgogICAgICAgIGlmIChsZWdhY3lNb2RlKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHR5cGVzLmFkZChjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQSB3cm9uZyAobm9uLXplcm8pIGFtb3VudCBvZiB0eXBlIGFyZ3VtZW50cyBnaXZlbi4gVGhhdCdzIGFuIGVycm9yLgogICAgICAgIC8vIFRPRE8oamVuc2opOiBQb3NpdGlvbiBzaG91bGQgYmUgb24gdHlwZSBhcmd1bWVudHMgaW5zdGVhZC4KICAgICAgICByZXR1cm4gZmFzdGEudGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaAogICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlUGFyYW1ldGVycy5sZW5ndGgpCiAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBvZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTG9jYXRlZE1lc3NhZ2UgY2hlY2tBcmd1bWVudHNGb3JUeXBlKAogICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb24sIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQpIHsKICAgIGlmIChmb3Jlc3QuYXJndW1lbnRzUG9zaXRpb25hbChhcmd1bWVudHMpLmxlbmd0aCA8CiAgICAgICAgZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICByZXR1cm4gZmFzdGEudGVtcGxhdGVUb29GZXdBcmd1bWVudHMKICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgICAgZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGgpCiAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgYXJndW1lbnRzLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKTsKICAgIH0KICAgIGlmIChmb3Jlc3QuYXJndW1lbnRzUG9zaXRpb25hbChhcmd1bWVudHMpLmxlbmd0aCA+CiAgICAgICAgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYXN0YS50ZW1wbGF0ZVRvb01hbnlBcmd1bWVudHMKICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCwKICAgICAgICAgICAgICBmb3Jlc3QuYXJndW1lbnRzUG9zaXRpb25hbChhcmd1bWVudHMpLmxlbmd0aCkKICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBhcmd1bWVudHMuZmlsZU9mZnNldCwgbm9MZW5ndGgpOwogICAgfQogICAgTGlzdDxPYmplY3Q+IG5hbWVkID0gZm9yZXN0LmFyZ3VtZW50c05hbWVkKGFyZ3VtZW50cyk7CiAgICBpZiAobmFtZWQuaXNOb3RFbXB0eSkgewogICAgICBTZXQ8U3RyaW5nPiBuYW1lcyA9CiAgICAgICAgICBuZXcgU2V0LmZyb20oZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLm1hcCgoYSkgPT4gYS5uYW1lKSk7CiAgICAgIGZvciAoTmFtZWRFeHByZXNzaW9uIGFyZ3VtZW50IGluIG5hbWVkKSB7CiAgICAgICAgaWYgKCFuYW1lcy5jb250YWlucyhhcmd1bWVudC5uYW1lKSkgewogICAgICAgICAgcmV0dXJuIGZhc3RhLnRlbXBsYXRlTm9TdWNoTmFtZWRQYXJhbWV0ZXIKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhhcmd1bWVudC5uYW1lKQogICAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBhcmd1bWVudC5maWxlT2Zmc2V0LCBhcmd1bWVudC5uYW1lLmxlbmd0aCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBMaXN0PE9iamVjdD4gdHlwZXMgPSBmb3Jlc3QuYXJndW1lbnRzVHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgaWYgKHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSB0eXBlcy5sZW5ndGggJiYgdHlwZXMubGVuZ3RoICE9IDApIHsKICAgICAgLy8gQSB3cm9uZyAobm9uLXplcm8pIGFtb3VudCBvZiB0eXBlIGFyZ3VtZW50cyBnaXZlbi4gVGhhdCdzIGFuIGVycm9yLgogICAgICAvLyBUT0RPKGplbnNqKTogUG9zaXRpb24gc2hvdWxkIGJlIG9uIHR5cGUgYXJndW1lbnRzIGluc3RlYWQuCiAgICAgIHJldHVybiBmYXN0YS50ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoCiAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlUGFyYW1ldGVycy5sZW5ndGgpCiAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgb2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTmV3RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5OZXdFeHByZXNzaW9uIik7CiAgICBzdXBlci5wdXNoKGNvbnN0YW50Q29udGV4dCk7CiAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZU5vdENvbnN0YW50RXhwcmVzc2lvbi53aXRoQXJndW1lbnRzKCdOZXcgZXhwcmVzc2lvbicpLAogICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgIHRva2VuLmxlbmd0aCk7CiAgICB9CiAgICBjb25zdGFudENvbnRleHQgPSBDb25zdGFudENvbnRleHQubm9uZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db25zdEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luQ29uc3RFeHByZXNzaW9uIik7CiAgICBzdXBlci5wdXNoKGNvbnN0YW50Q29udGV4dCk7CiAgICBjb25zdGFudENvbnRleHQgPSBDb25zdGFudENvbnRleHQuaW5mZXJyZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uc3RMaXRlcmFsKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNvbnN0TGl0ZXJhbCIpOwogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uIik7CiAgICBzdXBlci5wdXNoKGNvbnN0YW50Q29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbnN0TGl0ZXJhbChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kQ29uc3RMaXRlcmFsIik7CiAgICBPYmplY3QgbGl0ZXJhbCA9IHBvcCgpOwogICAgY29uc3RhbnRDb250ZXh0ID0gcG9wKCk7CiAgICBwdXNoKGxpdGVyYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmROZXdFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOZXdFeHByZXNzaW9uIik7CiAgICBfYnVpbGRDb25zdHJ1Y3RvclJlZmVyZW5jZUludm9jYXRpb24oCiAgICAgICAgdG9rZW4ubmV4dCwgdG9rZW4ub2Zmc2V0LCBDb25zdG5lc3MuZXhwbGljaXROZXcpOwogIH0KCiAgdm9pZCBfYnVpbGRDb25zdHJ1Y3RvclJlZmVyZW5jZUludm9jYXRpb24oCiAgICAgIFRva2VuIG5hbWVUb2tlbiwgaW50IG9mZnNldCwgQ29uc3RuZXNzIGNvbnN0bmVzcykgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUobmFtZVRva2VuLCBbCiAgICAgIC8qYXJndW1lbnRzKi8gVmFsdWVLaW5kLkFyZ3VtZW50cywKICAgICAgLypjb25zdHJ1Y3RvciBuYW1lIGlkZW50aWZpZXIqLyBWYWx1ZUtpbmQuSWRlbnRpZmllck9yTnVsbCwKICAgICAgLypjb25zdHJ1Y3RvciBuYW1lKi8gVmFsdWVLaW5kLk5hbWUsCiAgICAgIC8qdHlwZSBhcmd1bWVudHMqLyBWYWx1ZUtpbmQuVHlwZUFyZ3VtZW50c09yTnVsbCwKICAgICAgLypjbGFzcyovIHVuaW9uT2ZLaW5kcyhbCiAgICAgICAgVmFsdWVLaW5kLkdlbmVyYXRvciwKICAgICAgICBWYWx1ZUtpbmQuUHJvYmxlbUJ1aWxkZXIsCiAgICAgICAgVmFsdWVLaW5kLlBhcnNlclJlY292ZXJ5CiAgICAgIF0pLAogICAgXSkpOwogICAgQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBvcCgpOwogICAgSWRlbnRpZmllciBuYW1lTGFzdElkZW50aWZpZXIgPSBwb3AoTnVsbFZhbHVlLklkZW50aWZpZXIpOwogICAgVG9rZW4gbmFtZUxhc3RUb2tlbiA9CiAgICAgICAgZGVwcmVjYXRlZF9leHRyYWN0VG9rZW4obmFtZUxhc3RJZGVudGlmaWVyKSA/PyBuYW1lVG9rZW47CiAgICBTdHJpbmcgbmFtZSA9IHBvcCgpOwogICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cyA9IHBvcCgpOwoKICAgIE9iamVjdCB0eXBlID0gcG9wKCk7CgogICAgQ29uc3RhbnRDb250ZXh0IHNhdmVkQ29uc3RhbnRDb250ZXh0ID0gcG9wKCk7CiAgICBpZiAodHlwZSBpcyBHZW5lcmF0b3IpIHsKICAgICAgcHVzaCh0eXBlLmludm9rZUNvbnN0cnVjdG9yKAogICAgICAgICAgdHlwZUFyZ3VtZW50cywgbmFtZSwgYXJndW1lbnRzLCBuYW1lVG9rZW4sIG5hbWVMYXN0VG9rZW4sIGNvbnN0bmVzcykpOwogICAgfSBlbHNlIGlmICh0eXBlIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmV3IFBhcnNlckVycm9yR2VuZXJhdG9yKAogICAgICAgICAgdGhpcywgbmFtZVRva2VuLCBmYXN0YS5tZXNzYWdlU3ludGhldGljVG9rZW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyB0eXBlTmFtZTsKICAgICAgaWYgKHR5cGUgaXMgUHJvYmxlbUJ1aWxkZXIpIHsKICAgICAgICB0eXBlTmFtZSA9IHR5cGUuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICAgIH0KICAgICAgcHVzaCh3cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgIHRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICAgIGRlYnVnTmFtZSh0eXBlTmFtZSwgbmFtZSksCiAgICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICAgIG5hbWVUb2tlbi5jaGFyT2Zmc2V0KSwKICAgICAgICAgIG9mZnNldCkpOwogICAgfQogICAgY29uc3RhbnRDb250ZXh0ID0gc2F2ZWRDb25zdGFudENvbnRleHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbiIpOwogICAgX2J1aWxkQ29uc3RydWN0b3JSZWZlcmVuY2VJbnZvY2F0aW9uKAogICAgICAgIHRva2VuLCB0b2tlbi5vZmZzZXQsIENvbnN0bmVzcy5pbXBsaWNpdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIHR5cGUsCiAgICAgIFRva2VuIG5hbWVUb2tlbiwKICAgICAgVG9rZW4gbmFtZUxhc3RUb2tlbiwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBDb25zdG5lc3MgY29uc3RuZXNzKSB7CiAgICBpZiAoYXJndW1lbnRzID09IG51bGwpIHsKICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlTWlzc2luZ0FyZ3VtZW50TGlzdCwKICAgICAgICAgIG5hbWVUb2tlbi5jaGFyT2Zmc2V0LCBuYW1lVG9rZW4ubGVuZ3RoKTsKICAgIH0KICAgIGlmIChuYW1lLmlzTm90RW1wdHkgJiYgYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBQb2ludCB0byB0aGUgdHlwZSBhcmd1bWVudHMgaW5zdGVhZC4KICAgICAgYWRkUHJvYmxlbShmYXN0YS5tZXNzYWdlQ29uc3RydWN0b3JXaXRoVHlwZUFyZ3VtZW50cywKICAgICAgICAgIG5hbWVUb2tlbi5jaGFyT2Zmc2V0LCBuYW1lVG9rZW4ubGVuZ3RoKTsKICAgIH0KCiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFzc2VydChmb3Jlc3QuYXJndW1lbnRzVHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpLmlzRW1wdHkpOwogICAgICBmb3Jlc3QuYXJndW1lbnRzU2V0VHlwZUFyZ3VtZW50cygKICAgICAgICAgIGFyZ3VtZW50cywgYnVpbGREYXJ0VHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzKSk7CiAgICB9CgogICAgU3RyaW5nIGVycm9yTmFtZTsKICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CiAgICBpZiAodHlwZSBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgaWYgKHR5cGUgaXMgRW51bUJ1aWxkZXIpIHsKICAgICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VFbnVtSW5zdGFudGlhdGlvbiwKICAgICAgICAgICAgbmFtZVRva2VuLmNoYXJPZmZzZXQsIG5hbWVUb2tlbi5sZW5ndGgpOwogICAgICB9CiAgICAgIEJ1aWxkZXIgYiA9IHR5cGUuZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5KG5hbWUsIGNoYXJPZmZzZXQsIHVyaSwgbGlicmFyeSk7CiAgICAgIE1lbWJlciB0YXJnZXQgPSBiPy50YXJnZXQ7CiAgICAgIGlmIChiID09IG51bGwpIHsKICAgICAgICAvLyBOb3QgZm91bmQuIFJlcG9ydGVkIGJlbG93LgogICAgICB9IGVsc2UgaWYgKGIgaXMgUHJvYmxlbUJ1aWxkZXIpIHsKICAgICAgICBtZXNzYWdlID0gYi5tZXNzYWdlLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChiLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICBpZiAodHlwZS5pc0Fic3RyYWN0KSB7CiAgICAgICAgICByZXR1cm4gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgICAgZXZhbHVhdGVBcmd1bWVudHNCZWZvcmUoCiAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgYnVpbGRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHR5cGUubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBuYW1lVG9rZW4uY2hhck9mZnNldCkpLAogICAgICAgICAgICAgIHRhcmdldCwKICAgICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgICAgY2hhck9mZnNldCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQgaXMgQ29uc3RydWN0b3IgfHwKICAgICAgICAgICh0YXJnZXQgaXMgUHJvY2VkdXJlICYmIHRhcmdldC5raW5kID09IFByb2NlZHVyZUtpbmQuRmFjdG9yeSkpIHsKICAgICAgICBFeHByZXNzaW9uIGludm9jYXRpb247CgogICAgICAgIGlmIChsZWdhY3lNb2RlICYmIGlzUmVkaXJlY3RpbmdGYWN0b3J5KHRhcmdldCwgaGVscGVyOiB0aGlzKSkgewogICAgICAgICAgLy8gSW4gbGVnYWN5IG1vZGUgdGhlIGNoZWNrcyB0aGF0IGFyZSBkb25lIGluIFtidWlsZFN0YXRpY0ludm9jYXRpb25dCiAgICAgICAgICAvLyBvbiB0aGUgaW5pdGlhbCB0YXJnZXQgb2YgYSByZWRpcmVjdGluZyBmYWN0b3J5IGludm9jYXRpb24gc2hvdWxkCiAgICAgICAgICAvLyBiZSBza2lwcGVkLiBTbyB3ZSBidWlsZCB0aGUgaW52b2NhdGlvbiBub2RlcyBkaXJlY3RseSBoZXJlIHdpdGhvdXQKICAgICAgICAgIC8vIGRvaW5nIGFueSBjaGVja3MuCiAgICAgICAgICBpZiAodGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzICE9IG51bGwgJiYKICAgICAgICAgICAgICB0YXJnZXQuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9CiAgICAgICAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHNUeXBlQXJndW1lbnRzKGFyZ3VtZW50cykubGVuZ3RoKSB7CiAgICAgICAgICAgIGFyZ3VtZW50cyA9IGZvcmVzdC5jcmVhdGVBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBmb3Jlc3QuYXJndW1lbnRzUG9zaXRpb25hbChhcmd1bWVudHMpLCBudWxsLAogICAgICAgICAgICAgICAgbmFtZWQ6IGZvcmVzdC5hcmd1bWVudHNOYW1lZChhcmd1bWVudHMpLAogICAgICAgICAgICAgICAgdHlwZXM6IG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgICAgICAgICAgICAgICBncm93YWJsZTogdHJ1ZSkpOwogICAgICAgICAgfQogICAgICAgICAgaW52b2NhdGlvbiA9IG5ldyBGYWN0b3J5Q29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgICAgICAgdGFyZ2V0LCBhcmd1bWVudHMsCiAgICAgICAgICAgICAgaXNDb25zdDogY29uc3RuZXNzID09IENvbnN0bmVzcy5leHBsaWNpdENvbnN0KQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBuYW1lVG9rZW4uY2hhck9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW52b2NhdGlvbiA9IGJ1aWxkU3RhdGljSW52b2NhdGlvbih0YXJnZXQsIGFyZ3VtZW50cywKICAgICAgICAgICAgICBjb25zdG5lc3M6IGNvbnN0bmVzcywKICAgICAgICAgICAgICBjaGFyT2Zmc2V0OiBuYW1lVG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgICAgICBjaGFyTGVuZ3RoOiBuYW1lVG9rZW4ubGVuZ3RoKTsKICAgICAgICB9CgogICAgICAgIGlmIChpbnZvY2F0aW9uIGlzIFN0YXRpY0ludm9jYXRpb24gJiYKICAgICAgICAgICAgaXNSZWRpcmVjdGluZ0ZhY3RvcnkodGFyZ2V0LCBoZWxwZXI6IHRoaXMpKSB7CiAgICAgICAgICByZWRpcmVjdGluZ0ZhY3RvcnlJbnZvY2F0aW9ucy5hZGQoaW52b2NhdGlvbik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW52b2NhdGlvbjsKICAgICAgfSBlbHNlIHsKICAgICAgICBlcnJvck5hbWUgPz89IGRlYnVnTmFtZSh0eXBlLm5hbWUsIG5hbWUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UgPSB0eXBlLm1lc3NhZ2U7CiAgICAgIHJldHVybiBldmFsdWF0ZUFyZ3VtZW50c0JlZm9yZSgKICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgIGJ1aWxkUHJvYmxlbShtZXNzYWdlLm1lc3NhZ2VPYmplY3QsIG5hbWVUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIG5hbWVUb2tlbi5sZXhlbWUubGVuZ3RoKSk7CiAgICB9IGVsc2UgewogICAgICBlcnJvck5hbWUgPSBkZWJ1Z05hbWUodHlwZS5mdWxsTmFtZUZvckVycm9ycywgbmFtZSk7CiAgICB9CiAgICBlcnJvck5hbWUgPz89IG5hbWU7CgogICAgcmV0dXJuIHdyYXBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbigKICAgICAgICB0aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICBmb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwobnVsbCkuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0LAogICAgICAgICAgICBlcnJvck5hbWUsCiAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgbmFtZUxhc3RUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlKSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgYXJndW1lbnRzLmZpbGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZENvbnN0RXhwcmVzc2lvbiIpOwogICAgX2J1aWxkQ29uc3RydWN0b3JSZWZlcmVuY2VJbnZvY2F0aW9uKAogICAgICAgIHRva2VuLm5leHQsIHRva2VuLm9mZnNldCwgQ29uc3RuZXNzLmV4cGxpY2l0Q29uc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbklmQ29udHJvbEZsb3coVG9rZW4gaWZUb2tlbikgewogICAgLy8gVE9ETyhkYW5ydWJlbCk6IGNvbnNpZGVyIHJlbW92aW5nIHRoaXMgd2hlbiBjb250cm9sIGZsb3cgc3VwcG9ydCBpcyBhZGRlZAogICAgLy8gaWYgdGhlIGlmVG9rZW4gaXMgbm90IG5lZWRlZCBmb3IgZXJyb3IgcmVwb3J0aW5nCiAgICBwdXNoKGlmVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblRoZW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgZW50ZXJUaGVuRm9yVHlwZVByb21vdGlvbihjb25kaXRpb24pOwogICAgcHVzaChjb25kaXRpb24pOwogICAgc3VwZXIuYmVnaW5UaGVuQ29udHJvbEZsb3codG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFbHNlQ29udHJvbEZsb3coVG9rZW4gZWxzZVRva2VuKSB7CiAgICB0eXBlUHJvbW90ZXI/LmVudGVyRWxzZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJZkNvbnRyb2xGbG93KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRJZkNvbnRyb2xGbG93Iik7CiAgICB2YXIgZW50cnkgPSBwb3AoKTsKICAgIHZhciBjb25kaXRpb24gPSBwb3AoKTsgLy8gcGFyZW50aGVzaXplZCBleHByZXNzaW9uCiAgICBUb2tlbiBpZlRva2VuID0gcG9wKCk7CiAgICB0eXBlUHJvbW90ZXI/LmVudGVyRWxzZSgpOwogICAgdHlwZVByb21vdGVyPy5leGl0Q29uZGl0aW9uYWwoKTsKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZUNvbnRyb2xGbG93Q29sbGVjdGlvbnMpIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlcG9ydCBhIG1vcmUgdXNlciBmcmllbmRseSBlcnJvciBtZXNzYWdlCiAgICAgIC8vIHdoZW4gYW4gZXhwZXJpbWVudCBpcyBub3QgZW5hYmxlZAogICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4ud2l0aEFyZ3VtZW50cyhpZlRva2VuKSwKICAgICAgICAgIGlmVG9rZW4sCiAgICAgICAgICBpZlRva2VuKTsKICAgICAgcHVzaChpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJgogICAgICAgICFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlQ29uc3RhbnRVcGRhdGUyMDE4KSB7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGlmVG9rZW4pLAogICAgICAgICAgaWZUb2tlbiwKICAgICAgICAgIGlmVG9rZW4pOwogICAgICBwdXNoKGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cmFuc2Zvcm1Db2xsZWN0aW9ucyA9IHRydWU7CiAgICBpZiAoZW50cnkgaXMgTWFwRW50cnkpIHsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlSWZNYXBFbnRyeSh0b1ZhbHVlKGNvbmRpdGlvbiksIGVudHJ5LCBudWxsLCBpZlRva2VuKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVJZkVsZW1lbnQoCiAgICAgICAgICB0b1ZhbHVlKGNvbmRpdGlvbiksIHRvVmFsdWUoZW50cnkpLCBudWxsLCBpZlRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZElmRWxzZUNvbnRyb2xGbG93KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRJZkVsc2VDb250cm9sRmxvdyIpOwogICAgdmFyIGVsc2VFbnRyeSA9IHBvcCgpOyAvLyBlbHNlIGVudHJ5CiAgICB2YXIgdGhlbkVudHJ5ID0gcG9wKCk7IC8vIHRoZW4gZW50cnkKICAgIHZhciBjb25kaXRpb24gPSBwb3AoKTsgLy8gcGFyZW50aGVzaXplZCBleHByZXNzaW9uCiAgICBUb2tlbiBpZlRva2VuID0gcG9wKCk7CiAgICB0eXBlUHJvbW90ZXI/LmV4aXRDb25kaXRpb25hbCgpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlQ29udHJvbEZsb3dDb2xsZWN0aW9ucykgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUmVwb3J0IGEgbW9yZSB1c2VyIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UKICAgICAgLy8gd2hlbiBhbiBleHBlcmltZW50IGlzIG5vdCBlbmFibGVkCiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKGlmVG9rZW4pLAogICAgICAgICAgaWZUb2tlbiwKICAgICAgICAgIGlmVG9rZW4pOwogICAgICBwdXNoKGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lICYmCiAgICAgICAgIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVDb25zdGFudFVwZGF0ZTIwMTgpIHsKICAgICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlQ2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoaWZUb2tlbiksCiAgICAgICAgICBpZlRva2VuLAogICAgICAgICAgaWZUb2tlbik7CiAgICAgIHB1c2goaW52YWxpZENvbGxlY3Rpb25FbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRyYW5zZm9ybUNvbGxlY3Rpb25zID0gdHJ1ZTsKICAgIGlmICh0aGVuRW50cnkgaXMgTWFwRW50cnkpIHsKICAgICAgaWYgKGVsc2VFbnRyeSBpcyBNYXBFbnRyeSkgewogICAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUlmTWFwRW50cnkoCiAgICAgICAgICAgIHRvVmFsdWUoY29uZGl0aW9uKSwgdGhlbkVudHJ5LCBlbHNlRW50cnksIGlmVG9rZW4pKTsKICAgICAgfSBlbHNlIGlmIChlbHNlRW50cnkgaXMgU3ByZWFkRWxlbWVudCkgewogICAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUlmTWFwRW50cnkoCiAgICAgICAgICAgIHRvVmFsdWUoY29uZGl0aW9uKSwKICAgICAgICAgICAgdGhlbkVudHJ5LAogICAgICAgICAgICBuZXcgU3ByZWFkTWFwRW50cnkoZWxzZUVudHJ5LmV4cHJlc3Npb24sIGVsc2VFbnRyeS5pc051bGxBd2FyZSksCiAgICAgICAgICAgIGlmVG9rZW4pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnQgb2Zmc2V0ID0gZWxzZUVudHJ5IGlzIEV4cHJlc3Npb24KICAgICAgICAgICAgPyBlbHNlRW50cnkuZmlsZU9mZnNldAogICAgICAgICAgICA6IG9mZnNldEZvclRva2VuKGlmVG9rZW4pOwogICAgICAgIHB1c2gobmV3IE1hcEVudHJ5KAogICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnOicpLAogICAgICAgICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgICAgICAgMSkpLAogICAgICAgICAgICBuZXcgTnVsbExpdGVyYWwoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKGlmVG9rZW4pKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlbHNlRW50cnkgaXMgTWFwRW50cnkpIHsKICAgICAgaWYgKHRoZW5FbnRyeSBpcyBTcHJlYWRFbGVtZW50KSB7CiAgICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlSWZNYXBFbnRyeSgKICAgICAgICAgICAgdG9WYWx1ZShjb25kaXRpb24pLAogICAgICAgICAgICBuZXcgU3ByZWFkTWFwRW50cnkodGhlbkVudHJ5LmV4cHJlc3Npb24sIHRoZW5FbnRyeS5pc051bGxBd2FyZSksCiAgICAgICAgICAgIGVsc2VFbnRyeSwKICAgICAgICAgICAgaWZUb2tlbikpOwogICAgICB9IGVsc2UgewogICAgICAgIGludCBvZmZzZXQgPSB0aGVuRW50cnkgaXMgRXhwcmVzc2lvbgogICAgICAgICAgICA/IHRoZW5FbnRyeS5maWxlT2Zmc2V0CiAgICAgICAgICAgIDogb2Zmc2V0Rm9yVG9rZW4oaWZUb2tlbik7CiAgICAgICAgcHVzaChuZXcgTWFwRW50cnkoCiAgICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc6JyksCiAgICAgICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgICAgICAxKSksCiAgICAgICAgICAgIG5ldyBOdWxsTGl0ZXJhbCgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oaWZUb2tlbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVJZkVsZW1lbnQoCiAgICAgICAgICB0b1ZhbHVlKGNvbmRpdGlvbiksIHRvVmFsdWUodGhlbkVudHJ5KSwgdG9WYWx1ZShlbHNlRW50cnkpLCBpZlRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNwcmVhZEV4cHJlc3Npb24oVG9rZW4gc3ByZWFkVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlNwcmVhZEV4cHJlc3Npb24iKTsKICAgIHZhciBleHByZXNzaW9uID0gcG9wKCk7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVTcHJlYWRDb2xsZWN0aW9ucykgewogICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4ud2l0aEFyZ3VtZW50cyhzcHJlYWRUb2tlbiksCiAgICAgICAgICBzcHJlYWRUb2tlbiwKICAgICAgICAgIHNwcmVhZFRva2VuKTsKICAgICAgcHVzaChpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJgogICAgICAgICFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlQ29uc3RhbnRVcGRhdGUyMDE4KSB7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHNwcmVhZFRva2VuKSwKICAgICAgICAgIHNwcmVhZFRva2VuLAogICAgICAgICAgc3ByZWFkVG9rZW4pOwogICAgICBwdXNoKGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cmFuc2Zvcm1Db2xsZWN0aW9ucyA9IHRydWU7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVTcHJlYWRFbGVtZW50KHRvVmFsdWUoZXhwcmVzc2lvbiksIHNwcmVhZFRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVBcmd1bWVudHMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVHlwZUFyZ3VtZW50cyIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxVbnJlc29sdmVkVHlwZT4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PwogICAgICAgIE51bGxWYWx1ZS5UeXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRUeXBlQXJndW1lbnRzIik7CiAgICBwb3AoTnVsbFZhbHVlLlR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUaGlzRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgZGVidWdFdmVudCgiVGhpc0V4cHJlc3Npb24iKTsKICAgIGlmIChjb250ZXh0LmlzU2NvcGVSZWZlcmVuY2UgJiYgaXNEZWNsYXJhdGlvbkluc3RhbmNlQ29udGV4dCkgewogICAgICBpZiAoZXh0ZW5zaW9uVGhpcyAhPSBudWxsKSB7CiAgICAgICAgcHVzaChfY3JlYXRlUmVhZE9ubHlWYXJpYWJsZUFjY2VzcygKICAgICAgICAgICAgZXh0ZW5zaW9uVGhpcywgdG9rZW4sIG9mZnNldEZvclRva2VuKHRva2VuKSwgJ3RoaXMnKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaChuZXcgVGhpc0FjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgICAgdGhpcywgdG9rZW4sIGluSW5pdGlhbGl6ZXIsIGluRmllbGRJbml0aWFsaXplcikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IoCiAgICAgICAgICB0aGlzLCB0b2tlbiwgZmFzdGEubWVzc2FnZVRoaXNBc0lkZW50aWZpZXIpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3VwZXJFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBkZWJ1Z0V2ZW50KCJTdXBlckV4cHJlc3Npb24iKTsKICAgIGlmIChjb250ZXh0LmlzU2NvcGVSZWZlcmVuY2UgJiYKICAgICAgICBpc0RlY2xhcmF0aW9uSW5zdGFuY2VDb250ZXh0ICYmCiAgICAgICAgZXh0ZW5zaW9uVGhpcyA9PSBudWxsKSB7CiAgICAgIE1lbWJlciBtZW1iZXIgPSB0aGlzLm1lbWJlci50YXJnZXQ7CiAgICAgIG1lbWJlci50cmFuc2Zvcm1lckZsYWdzIHw9IFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzOwogICAgICBwdXNoKG5ldyBUaGlzQWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgdGhpcywgdG9rZW4sIGluSW5pdGlhbGl6ZXIsIGluRmllbGRJbml0aWFsaXplciwKICAgICAgICAgIGlzU3VwZXI6IHRydWUpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IEluY29tcGxldGVFcnJvckdlbmVyYXRvcigKICAgICAgICAgIHRoaXMsIHRva2VuLCBmYXN0YS5tZXNzYWdlU3VwZXJBc0lkZW50aWZpZXIpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmFtZWRBcmd1bWVudChUb2tlbiBjb2xvbikgewogICAgZGVidWdFdmVudCgiTmFtZWRBcmd1bWVudCIpOwogICAgRXhwcmVzc2lvbiB2YWx1ZSA9IHBvcEZvclZhbHVlKCk7CiAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBwb3AoKTsKICAgIHB1c2gobmV3IE5hbWVkRXhwcmVzc2lvbihpZGVudGlmaWVyLm5hbWUsIHZhbHVlKQogICAgICAuLmZpbGVPZmZzZXQgPSBpZGVudGlmaWVyLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvbk5hbWUoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uTmFtZSIpOwogICAgSWRlbnRpZmllciBuYW1lID0gcG9wKCk7CiAgICBUb2tlbiBuYW1lVG9rZW4gPSBkZXByZWNhdGVkX2V4dHJhY3RUb2tlbihuYW1lKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KAogICAgICAgIG5hbWUubmFtZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgICAgZm9yU3ludGhldGljVG9rZW46IG5hbWVUb2tlbi5pc1N5bnRoZXRpYywKICAgICAgICBpc0ZpbmFsOiB0cnVlLAogICAgICAgIGlzTG9jYWxGdW5jdGlvbjogdHJ1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gbmFtZS5jaGFyT2Zmc2V0OwogICAgLy8gVE9ETyhhaGUpOiBXaHkgYXJlIHdlIGxvb2tpbmcgdXAgaW4gbG9jYWwgc2NvcGUsIGJ1dCBkZWNsYXJpbmcgaW4gcGFyZW50CiAgICAvLyBzY29wZT8KICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBzY29wZS5sb2NhbFtuYW1lLm5hbWVdOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgcmVwb3J0RHVwbGljYXRlZERlY2xhcmF0aW9uKGV4aXN0aW5nLCBuYW1lLm5hbWUsIG5hbWUuY2hhck9mZnNldCk7CiAgICB9CiAgICBwdXNoKG5ldyBGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQoCiAgICAgICAgdmFyaWFibGUsCiAgICAgICAgLy8gVGhlIGZ1bmN0aW9uIG5vZGUgaXMgY3JlYXRlZCBsYXRlci4KICAgICAgICBudWxsKQogICAgICAuLmZpbGVPZmZzZXQgPSBiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgZGVjbGFyZVZhcmlhYmxlKHZhcmlhYmxlLCBzY29wZS5wYXJlbnQpOwogIH0KCiAgdm9pZCBlbnRlckZ1bmN0aW9uKCkgewogICAgZGVidWdFdmVudCgiZW50ZXJGdW5jdGlvbiIpOwogICAgZnVuY3Rpb25OZXN0aW5nTGV2ZWwrKzsKICAgIHB1c2goc3dpdGNoU2NvcGUgPz8gTnVsbFZhbHVlLlN3aXRjaFNjb3BlKTsKICAgIHN3aXRjaFNjb3BlID0gbnVsbDsKICAgIHB1c2goaW5DYXRjaEJsb2NrKTsKICAgIGluQ2F0Y2hCbG9jayA9IGZhbHNlOwogIH0KCiAgdm9pZCBleGl0RnVuY3Rpb24oKSB7CiAgICBkZWJ1Z0V2ZW50KCJleGl0RnVuY3Rpb24iKTsKICAgIGZ1bmN0aW9uTmVzdGluZ0xldmVsLS07CiAgICBpbkNhdGNoQmxvY2sgPSBwb3AoKTsKICAgIHN3aXRjaFNjb3BlID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKHR5cGVWYXJpYWJsZXMgPz8gTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Mb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24iKTsKICAgIGVudGVyRnVuY3Rpb24oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5OYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5OYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbiIpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICAvLyBDcmVhdGUgYW4gYWRkaXRpb25hbCBzY29wZSBpbiB3aGljaCB0aGUgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBpcwogICAgLy8gZGVjbGFyZWQuCiAgICBlbnRlckxvY2FsU2NvcGUoIm5hbWVkIGZ1bmN0aW9uIik7CiAgICBwdXNoKHR5cGVWYXJpYWJsZXMgPz8gTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogICAgZW50ZXJGdW5jdGlvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5GdW5jdGlvbkV4cHJlc3Npb24iKTsKICAgIGVudGVyRnVuY3Rpb24oKTsKICB9CgogIHZvaWQgcHVzaE5hbWVkRnVuY3Rpb24oVG9rZW4gdG9rZW4sIGJvb2wgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgIFN0YXRlbWVudCBib2R5ID0gcG9wU3RhdGVtZW50KCk7CiAgICBBc3luY01hcmtlciBhc3luY01vZGlmaWVyID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgRm9ybWFsUGFyYW1ldGVycyBmb3JtYWxzID0gcG9wKCk7CiAgICBPYmplY3QgZGVjbGFyYXRpb24gPSBwb3AoKTsKICAgIFVucmVzb2x2ZWRUeXBlIHJldHVyblR5cGUgPSBwb3AoKTsKICAgIGJvb2wgaGFzSW1wbGljaXRSZXR1cm5UeXBlID0gcmV0dXJuVHlwZSA9PSBudWxsOwogICAgZXhpdEZ1bmN0aW9uKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVQYXJhbWV0ZXJzID0gcG9wKCk7CiAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zOwogICAgaWYgKCFpc0Z1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICBhbm5vdGF0aW9ucyA9IHBvcCgpOyAvLyBNZXRhZGF0YS4KICAgIH0KICAgIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IGZvcm1hbHMuYnVpbGRGdW5jdGlvbk5vZGUobGlicmFyeSwgcmV0dXJuVHlwZSwKICAgICAgICB0eXBlUGFyYW1ldGVycywgYXN5bmNNb2RpZmllciwgYm9keSwgdG9rZW4uY2hhck9mZnNldCk7CgogICAgaWYgKGRlY2xhcmF0aW9uIGlzIEZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IGRlY2xhcmF0aW9uLnZhcmlhYmxlOwogICAgICBpZiAoYW5ub3RhdGlvbnMgIT0gbnVsbCkgewogICAgICAgIGZvciAoRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIGFubm90YXRpb25zKSB7CiAgICAgICAgICB2YXJpYWJsZS5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQuc2V0SGFzSW1wbGljaXRSZXR1cm5UeXBlKAogICAgICAgICAgZGVjbGFyYXRpb24sIGhhc0ltcGxpY2l0UmV0dXJuVHlwZSk7CgogICAgICB2YXJpYWJsZS50eXBlID0gZnVuY3Rpb24uZnVuY3Rpb25UeXBlOwogICAgICBpZiAoaXNGdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICBFeHByZXNzaW9uIG9sZEluaXRpYWxpemVyID0gdmFyaWFibGUuaW5pdGlhbGl6ZXI7CiAgICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPSBuZXcgRnVuY3Rpb25FeHByZXNzaW9uKGZ1bmN0aW9uKQogICAgICAgICAgLi5wYXJlbnQgPSB2YXJpYWJsZQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZm9ybWFscy5jaGFyT2Zmc2V0OwogICAgICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gbmV3IE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uSnVkZ21lbnQodmFyaWFibGUpOwogICAgICAgIGlmIChvbGRJbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICAvLyBUaGlzIG11c3QgaGF2ZSBiZWVuIGEgY29tcGlsZS10aW1lIGVycm9yLgogICAgICAgICAgRXhwcmVzc2lvbiBlcnJvciA9IGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKG9sZEluaXRpYWxpemVyKTsKICAgICAgICAgIGFzc2VydChpc0Vycm9uZW91c05vZGUoZXJyb3IpKTsKICAgICAgICAgIGludCBvZmZzZXQgPSBmb3Jlc3QucmVhZE9mZnNldChleHByZXNzaW9uKTsKICAgICAgICAgIHB1c2god3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgbmV3IExldCgKICAgICAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoZXJyb3IpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICAgICAgICBleHByZXNzaW9uKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICAgIG9mZnNldCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwdXNoKGV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBkZWNsYXJhdGlvbi5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogICAgICAgIGZ1bmN0aW9uLnBhcmVudCA9IGRlY2xhcmF0aW9uOwogICAgICAgIGlmICh2YXJpYWJsZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICAvLyBUaGlzIG11c3QgaGF2ZSBiZWVuIGEgY29tcGlsZS10aW1lIGVycm9yLgogICAgICAgICAgYXNzZXJ0KGlzRXJyb25lb3VzTm9kZSh2YXJpYWJsZS5pbml0aWFsaXplcikpOwoKICAgICAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUJsb2NrKAogICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgPFN0YXRlbWVudD5bCiAgICAgICAgICAgICAgICBmb3Jlc3QuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudCh2YXJpYWJsZS5pbml0aWFsaXplciwgdG9rZW4pLAogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24KICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIG51bGwpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGRlY2xhcmF0aW9uLmZpbGVPZmZzZXQpOwogICAgICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwdXNoKGRlY2xhcmF0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1bmhhbmRsZWQoIiR7ZGVjbGFyYXRpb24ucnVudGltZVR5cGV9IiwgInB1c2hOYW1lZEZ1bmN0aW9uIiwKICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbiIpOwogICAgcHVzaE5hbWVkRnVuY3Rpb24oZW5kVG9rZW4sIHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbiIpOwogICAgcHVzaE5hbWVkRnVuY3Rpb24odG9rZW4sIGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGdW5jdGlvbkV4cHJlc3Npb24iKTsKICAgIFN0YXRlbWVudCBib2R5ID0gcG9wU3RhdGVtZW50KCk7CiAgICBBc3luY01hcmtlciBhc3luY01vZGlmaWVyID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgRm9ybWFsUGFyYW1ldGVycyBmb3JtYWxzID0gcG9wKCk7CiAgICBleGl0RnVuY3Rpb24oKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnMgPSBwb3AoKTsKICAgIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IGZvcm1hbHMuYnVpbGRGdW5jdGlvbk5vZGUoCiAgICAgICAgbGlicmFyeSwgbnVsbCwgdHlwZVBhcmFtZXRlcnMsIGFzeW5jTW9kaWZpZXIsIGJvZHksIHRva2VuLmNoYXJPZmZzZXQpCiAgICAgIC4uZmlsZU9mZnNldCA9IGJlZ2luVG9rZW4uY2hhck9mZnNldDsKCiAgICBpZiAobGlicmFyeS5sZWdhY3lNb2RlICYmIGFzeW5jTW9kaWZpZXIgIT0gQXN5bmNNYXJrZXIuU3luYykgewogICAgICBEYXJ0VHlwZSByZXR1cm5UeXBlOwogICAgICBzd2l0Y2ggKGFzeW5jTW9kaWZpZXIpIHsKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLkFzeW5jOgogICAgICAgICAgcmV0dXJuVHlwZSA9IGNvcmVUeXBlcy5mdXR1cmVDbGFzcy5yYXdUeXBlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBBc3luY01hcmtlci5Bc3luY1N0YXI6CiAgICAgICAgICByZXR1cm5UeXBlID0gY29yZVR5cGVzLnN0cmVhbUNsYXNzLnJhd1R5cGU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLlN5bmNTdGFyOgogICAgICAgICAgcmV0dXJuVHlwZSA9IGNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzLnJhd1R5cGU7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuVHlwZSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBmdW5jdGlvbi5yZXR1cm5UeXBlID0gcmV0dXJuVHlwZTsKICAgIH0KICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUpIHsKICAgICAgcHVzaChidWlsZFByb2JsZW0oZmFzdGEubWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb24sIGZvcm1hbHMuY2hhck9mZnNldCwKICAgICAgICAgIGZvcm1hbHMubGVuZ3RoKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBGdW5jdGlvbkV4cHJlc3Npb24oZnVuY3Rpb24pCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oYmVnaW5Ub2tlbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmREb1doaWxlU3RhdGVtZW50KAogICAgICBUb2tlbiBkb0tleXdvcmQsIFRva2VuIHdoaWxlS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkRvV2hpbGVTdGF0ZW1lbnQiKTsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIFN0YXRlbWVudCBib2R5ID0gcG9wU3RhdGVtZW50KCk7CiAgICBKdW1wVGFyZ2V0IGNvbnRpbnVlVGFyZ2V0ID0gZXhpdENvbnRpbnVlVGFyZ2V0KCk7CiAgICBKdW1wVGFyZ2V0IGJyZWFrVGFyZ2V0ID0gZXhpdEJyZWFrVGFyZ2V0KCk7CiAgICBpZiAoY29udGludWVUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgYm9keSA9IGZvcmVzdC5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGJvZHkpOwogICAgICBjb250aW51ZVRhcmdldC5yZXNvbHZlQ29udGludWVzKGZvcmVzdCwgYm9keSk7CiAgICB9CiAgICBTdGF0ZW1lbnQgcmVzdWx0ID0gZm9yZXN0LmNyZWF0ZURvU3RhdGVtZW50KAogICAgICAgIGRvS2V5d29yZCwgYm9keSwgd2hpbGVLZXl3b3JkLCBjb25kaXRpb24sIGVuZFRva2VuKTsKICAgIGlmIChicmVha1RhcmdldC5oYXNVc2VycykgewogICAgICByZXN1bHQgPSBmb3Jlc3QuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChyZXN1bHQpOwogICAgICBicmVha1RhcmdldC5yZXNvbHZlQnJlYWtzKGZvcmVzdCwgcmVzdWx0KTsKICAgIH0KICAgIGV4aXRMb29wT3JTd2l0Y2gocmVzdWx0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JJbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGVudGVyTG9jYWxTY29wZShudWxsLCBzY29wZS5wYXJlbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JJbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvckluRXhwcmVzc2lvbiIpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGV4cHJlc3Npb24gPz8gTnVsbFZhbHVlLkV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJbkxvb3BQYXJ0cyhUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbiwKICAgICAgVG9rZW4gbGVmdFBhcmVudGhlc2lzLCBUb2tlbiBpbktleXdvcmQpIHsKICAgIHB1c2goYXdhaXRUb2tlbiA/PyBOdWxsVmFsdWUuQXdhaXRUb2tlbik7CiAgICBwdXNoKGZvclRva2VuKTsKICAgIHB1c2goaW5LZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRm9ySW5Db250cm9sRmxvdyIpOwogICAgdmFyIGVudHJ5ID0gcG9wKCk7CiAgICBUb2tlbiBpblRva2VuID0gcG9wKCk7CiAgICBUb2tlbiBmb3JUb2tlbiA9IHBvcCgpOwogICAgVG9rZW4gYXdhaXRUb2tlbiA9IHBvcChOdWxsVmFsdWUuQXdhaXRUb2tlbik7CiAgICBFeHByZXNzaW9uIGl0ZXJhYmxlID0gcG9wRm9yVmFsdWUoKTsKICAgIE9iamVjdCBsdmFsdWUgPSBwb3AoKTsgLy8gbHZhbHVlCiAgICBleGl0TG9jYWxTY29wZSgpOwoKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZUNvbnRyb2xGbG93Q29sbGVjdGlvbnMpIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlcG9ydCBhIG1vcmUgdXNlciBmcmllbmRseSBlcnJvciBtZXNzYWdlCiAgICAgIC8vIHdoZW4gYW4gZXhwZXJpbWVudCBpcyBub3QgZW5hYmxlZAogICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4ud2l0aEFyZ3VtZW50cyhmb3JUb2tlbiksCiAgICAgICAgICBmb3JUb2tlbiwKICAgICAgICAgIGZvclRva2VuKTsKICAgICAgcHVzaChpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmb3JUb2tlbiksCiAgICAgICAgICBmb3JUb2tlbiwKICAgICAgICAgIGZvclRva2VuKTsKICAgICAgcHVzaChpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdHJhbnNmb3JtQ29sbGVjdGlvbnMgPSB0cnVlOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IGJ1aWxkRm9ySW5WYXJpYWJsZShsdmFsdWUpOwogICAgRXhwcmVzc2lvbiBwcm9ibGVtID0gY2hlY2tGb3JJblZhcmlhYmxlKGx2YWx1ZSwgdmFyaWFibGUsIGZvclRva2VuKTsKICAgIFN0YXRlbWVudCBwcm9sb2d1ZSA9IGJ1aWxkRm9ySW5Cb2R5KGx2YWx1ZSwgdmFyaWFibGUsIGZvclRva2VuLCBpblRva2VuKTsKICAgIGlmIChlbnRyeSBpcyBNYXBFbnRyeSkgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVGb3JJbk1hcEVudHJ5KAogICAgICAgICAgdmFyaWFibGUsIGl0ZXJhYmxlLCBwcm9sb2d1ZSwgZW50cnksIHByb2JsZW0sIGZvclRva2VuLAogICAgICAgICAgaXNBc3luYzogYXdhaXRUb2tlbiAhPSBudWxsKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVGb3JJbkVsZW1lbnQoCiAgICAgICAgICB2YXJpYWJsZSwgaXRlcmFibGUsIHByb2xvZ3VlLCB0b1ZhbHVlKGVudHJ5KSwgcHJvYmxlbSwgZm9yVG9rZW4sCiAgICAgICAgICBpc0FzeW5jOiBhd2FpdFRva2VuICE9IG51bGwpKTsKICAgIH0KICB9CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gYnVpbGRGb3JJblZhcmlhYmxlKE9iamVjdCBsdmFsdWUpIHsKICAgIGlmIChsdmFsdWUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgcmV0dXJuIGx2YWx1ZTsKICAgIHJldHVybiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmZvclZhbHVlKG51bGwsIGZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKICB9CgogIEV4cHJlc3Npb24gY2hlY2tGb3JJblZhcmlhYmxlKAogICAgICBPYmplY3QgbHZhbHVlLCBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBUb2tlbiBmb3JUb2tlbikgewogICAgaWYgKGx2YWx1ZSBpcyBWYXJpYWJsZURlY2xhcmF0aW9uKSB7CiAgICAgIGlmICh2YXJpYWJsZS5pc0NvbnN0KSB7CiAgICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlRm9ySW5Mb29wV2l0aENvbnN0VmFyaWFibGUsCiAgICAgICAgICAgIHZhcmlhYmxlLmZpbGVPZmZzZXQsIHZhcmlhYmxlLm5hbWUubGVuZ3RoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChsdmFsdWUgaXMhIEdlbmVyYXRvcikgewogICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmb3Jlc3QuaXNWYXJpYWJsZXNEZWNsYXJhdGlvbihsdmFsdWUpCiAgICAgICAgICA/IGZhc3RhLm1lc3NhZ2VGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGUKICAgICAgICAgIDogZmFzdGEubWVzc2FnZUZvckluTG9vcE5vdEFzc2lnbmFibGU7CiAgICAgIFRva2VuIHRva2VuID0gZm9yVG9rZW4ubmV4dC5uZXh0OwogICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBTdGF0ZW1lbnQgYnVpbGRGb3JJbkJvZHkoT2JqZWN0IGx2YWx1ZSwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwKICAgICAgVG9rZW4gZm9yVG9rZW4sIFRva2VuIGluS2V5d29yZCkgewogICAgaWYgKGx2YWx1ZSBpcyBWYXJpYWJsZURlY2xhcmF0aW9uKSByZXR1cm4gbnVsbDsKICAgIGlmIChsdmFsdWUgaXMgR2VuZXJhdG9yKSB7CiAgICAgIC8vLyBXZSBhcmUgaW4gdGhpcyBjYXNlLCB3aGVyZSBgbHZhbHVlYCBpc24ndCBhIFtWYXJpYWJsZURlY2xhcmF0aW9uXToKICAgICAgLy8vCiAgICAgIC8vLyAgICAgZm9yIChsdmFsdWUgaW4gZXhwcmVzc2lvbikgYm9keQogICAgICAvLy8KICAgICAgLy8vIFRoaXMgaXMgbm9ybWFsaXplZCB0bzoKICAgICAgLy8vCiAgICAgIC8vLyAgICAgZm9yIChmaW5hbCAjdCBpbiBleHByZXNzaW9uKSB7CiAgICAgIC8vLyAgICAgICBsdmFsdWUgPSAjdDsKICAgICAgLy8vICAgICAgIGJvZHk7CiAgICAgIC8vLyAgICAgfQogICAgICBUeXBlUHJvbW90aW9uRmFjdCBmYWN0ID0KICAgICAgICAgIHR5cGVQcm9tb3Rlcj8uZ2V0RmFjdEZvckFjY2Vzcyh2YXJpYWJsZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgICBUeXBlUHJvbW90aW9uU2NvcGUgc2NvcGUgPSB0eXBlUHJvbW90ZXI/LmN1cnJlbnRTY29wZTsKICAgICAgRXhwcmVzc2lvbiBzeW50aGV0aWNBc3NpZ25tZW50ID0gbHZhbHVlLmJ1aWxkQXNzaWdubWVudCgKICAgICAgICAgIG5ldyBWYXJpYWJsZUdldEp1ZGdtZW50KHZhcmlhYmxlLCBmYWN0LCBzY29wZSkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gaW5LZXl3b3JkLm9mZnNldCwKICAgICAgICAgIHZvaWRDb250ZXh0OiB0cnVlKTsKICAgICAgaWYgKHN5bnRoZXRpY0Fzc2lnbm1lbnQgaXMgc2hhZG93LlN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCkgewogICAgICAgIHN5bnRoZXRpY0Fzc2lnbm1lbnQgPSB3cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oc3ludGhldGljQXNzaWdubWVudCksCiAgICAgICAgICAgIG9mZnNldEZvclRva2VuKGx2YWx1ZS50b2tlbikpOwogICAgICB9CiAgICAgIHJldHVybiBmb3Jlc3QuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChzeW50aGV0aWNBc3NpZ25tZW50LCBudWxsKTsKICAgIH0KICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGZvcmVzdC5pc1ZhcmlhYmxlc0RlY2xhcmF0aW9uKGx2YWx1ZSkKICAgICAgICA/IGZhc3RhLm1lc3NhZ2VGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGUKICAgICAgICA6IGZhc3RhLm1lc3NhZ2VGb3JJbkxvb3BOb3RBc3NpZ25hYmxlOwogICAgVG9rZW4gdG9rZW4gPSBmb3JUb2tlbi5uZXh0Lm5leHQ7CiAgICBTdGF0ZW1lbnQgYm9keTsKICAgIGlmIChmb3Jlc3QuaXNWYXJpYWJsZXNEZWNsYXJhdGlvbihsdmFsdWUpKSB7CiAgICAgIGJvZHkgPSBmb3Jlc3QuY3JlYXRlQmxvY2soCiAgICAgICAgICBudWxsLAogICAgICAgICAgLy8gTmV3IGxpc3QgYmVjYXVzZSB0aGUgZGVjbGFyYXRpb25zIGFyZSBub3QgYSBncm93YWJsZSBsaXN0LgogICAgICAgICAgbmV3IExpc3Q8U3RhdGVtZW50Pi5mcm9tKAogICAgICAgICAgICAgIGZvcmVzdC52YXJpYWJsZXNEZWNsYXJhdGlvbkV4dHJhY3REZWNsYXJhdGlvbnMobHZhbHVlKSksCiAgICAgICAgICBudWxsKTsKICAgIH0gZWxzZSB7CiAgICAgIGJvZHkgPSBmb3Jlc3QuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChsdmFsdWUsIG51bGwpOwogICAgfQogICAgcmV0dXJuIGNvbWJpbmVTdGF0ZW1lbnRzKAogICAgICAgIGZvcmVzdC5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KAogICAgICAgICAgICBidWlsZFByb2JsZW0obWVzc2FnZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBsZW5ndGhGb3JUb2tlbih0b2tlbikpLAogICAgICAgICAgICBudWxsKSwKICAgICAgICBib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW4oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvckluIik7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHBvcFN0YXRlbWVudCgpOwoKICAgIFRva2VuIGluS2V5d29yZCA9IHBvcCgpOwogICAgVG9rZW4gZm9yVG9rZW4gPSBwb3AoKTsKICAgIFRva2VuIGF3YWl0VG9rZW4gPSBwb3AoTnVsbFZhbHVlLkF3YWl0VG9rZW4pOwoKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBPYmplY3QgbHZhbHVlID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgSnVtcFRhcmdldCBjb250aW51ZVRhcmdldCA9IGV4aXRDb250aW51ZVRhcmdldCgpOwogICAgSnVtcFRhcmdldCBicmVha1RhcmdldCA9IGV4aXRCcmVha1RhcmdldCgpOwogICAgaWYgKGNvbnRpbnVlVGFyZ2V0Lmhhc1VzZXJzKSB7CiAgICAgIGJvZHkgPSBmb3Jlc3QuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChib2R5KTsKICAgICAgY29udGludWVUYXJnZXQucmVzb2x2ZUNvbnRpbnVlcyhmb3Jlc3QsIGJvZHkpOwogICAgfQogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IGJ1aWxkRm9ySW5WYXJpYWJsZShsdmFsdWUpOwogICAgRXhwcmVzc2lvbiBwcm9ibGVtID0gY2hlY2tGb3JJblZhcmlhYmxlKGx2YWx1ZSwgdmFyaWFibGUsIGZvclRva2VuKTsKICAgIFN0YXRlbWVudCBwcm9sb2d1ZSA9IGJ1aWxkRm9ySW5Cb2R5KGx2YWx1ZSwgdmFyaWFibGUsIGZvclRva2VuLCBpbktleXdvcmQpOwogICAgaWYgKHByb2xvZ3VlICE9IG51bGwpIHsKICAgICAgaWYgKHByb2xvZ3VlIGlzIEJsb2NrKSB7CiAgICAgICAgaWYgKGJvZHkgaXMgQmxvY2spIHsKICAgICAgICAgIGZvciAoU3RhdGVtZW50IHN0YXRlbWVudCBpbiBib2R5LnN0YXRlbWVudHMpIHsKICAgICAgICAgICAgcHJvbG9ndWUuYWRkU3RhdGVtZW50KHN0YXRlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByb2xvZ3VlLmFkZFN0YXRlbWVudChib2R5KTsKICAgICAgICB9CiAgICAgICAgYm9keSA9IHByb2xvZ3VlOwogICAgICB9IGVsc2UgewogICAgICAgIGJvZHkgPSBjb21iaW5lU3RhdGVtZW50cyhwcm9sb2d1ZSwgYm9keSk7CiAgICAgIH0KICAgIH0KICAgIFN0YXRlbWVudCByZXN1bHQgPSBuZXcgRm9ySW5TdGF0ZW1lbnQodmFyaWFibGUsIGV4cHJlc3Npb24sIGJvZHksCiAgICAgICAgaXNBc3luYzogYXdhaXRUb2tlbiAhPSBudWxsKQogICAgICAuLmZpbGVPZmZzZXQgPSBhd2FpdFRva2VuPy5jaGFyT2Zmc2V0ID8/IGZvclRva2VuLmNoYXJPZmZzZXQKICAgICAgLi5ib2R5T2Zmc2V0ID0gYm9keS5maWxlT2Zmc2V0OyAvLyBUT0RPKGFoZSk6IElzbid0IHRoaXMgcmVkdW5kYW50PwogICAgaWYgKGJyZWFrVGFyZ2V0Lmhhc1VzZXJzKSB7CiAgICAgIHJlc3VsdCA9IGZvcmVzdC5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KHJlc3VsdCk7CiAgICAgIGJyZWFrVGFyZ2V0LnJlc29sdmVCcmVha3MoZm9yZXN0LCByZXN1bHQpOwogICAgfQogICAgaWYgKHByb2JsZW0gIT0gbnVsbCkgewogICAgICByZXN1bHQgPSBjb21iaW5lU3RhdGVtZW50cygKICAgICAgICAgIGZvcmVzdC5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KHByb2JsZW0sIG51bGwpLCByZXN1bHQpOwogICAgfQogICAgZXhpdExvb3BPclN3aXRjaChyZXN1bHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMYWJlbChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTGFiZWwiKTsKICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IHBvcCgpOwogICAgcHVzaChuZXcgTGFiZWwoaWRlbnRpZmllci5uYW1lLCBpZGVudGlmaWVyLmNoYXJPZmZzZXQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5MYWJlbGVkU3RhdGVtZW50KFRva2VuIHRva2VuLCBpbnQgbGFiZWxDb3VudCkgewogICAgZGVidWdFdmVudCgiYmVnaW5MYWJlbGVkU3RhdGVtZW50Iik7CiAgICBMaXN0PExhYmVsPiBsYWJlbHMgPQogICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PExhYmVsPigpLnBvcChzdGFjaywgbGFiZWxDb3VudCk7CiAgICBlbnRlckxvY2FsU2NvcGUobnVsbCwgc2NvcGUuY3JlYXRlTmVzdGVkTGFiZWxTY29wZSgpKTsKICAgIExhYmVsVGFyZ2V0IHRhcmdldCA9CiAgICAgICAgbmV3IExhYmVsVGFyZ2V0KG1lbWJlciwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsIHRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKGxhYmVscyAhPSBudWxsKSB7CiAgICAgIGZvciAoTGFiZWwgbGFiZWwgaW4gbGFiZWxzKSB7CiAgICAgICAgc2NvcGUuZGVjbGFyZUxhYmVsKGxhYmVsLm5hbWUsIHRhcmdldCk7CiAgICAgIH0KICAgIH0KICAgIHB1c2godGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGFiZWxlZFN0YXRlbWVudChpbnQgbGFiZWxDb3VudCkgewogICAgZGVidWdFdmVudCgiTGFiZWxlZFN0YXRlbWVudCIpOwogICAgU3RhdGVtZW50IHN0YXRlbWVudCA9IHBvcCgpOwogICAgTGFiZWxUYXJnZXQgdGFyZ2V0ID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgaWYgKHRhcmdldC5icmVha1RhcmdldC5oYXNVc2VycyB8fCB0YXJnZXQuY29udGludWVUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgaWYgKGZvcmVzdC5pc1ZhcmlhYmxlc0RlY2xhcmF0aW9uKHN0YXRlbWVudCkpIHsKICAgICAgICBpbnRlcm5hbFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VJbnRlcm5hbFByb2JsZW1MYWJlbFVzYWdlSW5WYXJpYWJsZXNEZWNsYXJhdGlvbiwKICAgICAgICAgICAgc3RhdGVtZW50LmZpbGVPZmZzZXQsCiAgICAgICAgICAgIHVyaSk7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlbWVudCBpcyEgTGFiZWxlZFN0YXRlbWVudCkgewogICAgICAgIHN0YXRlbWVudCA9IGZvcmVzdC5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KHN0YXRlbWVudCk7CiAgICAgIH0KICAgICAgdGFyZ2V0LmJyZWFrVGFyZ2V0LnJlc29sdmVCcmVha3MoZm9yZXN0LCBzdGF0ZW1lbnQpOwogICAgICB0YXJnZXQuY29udGludWVUYXJnZXQucmVzb2x2ZUNvbnRpbnVlcyhmb3Jlc3QsIHN0YXRlbWVudCk7CiAgICB9CiAgICBwdXNoKHN0YXRlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJldGhyb3dTdGF0ZW1lbnQoVG9rZW4gcmV0aHJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiUmV0aHJvd1N0YXRlbWVudCIpOwogICAgaWYgKGluQ2F0Y2hCbG9jaykgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVSZXRocm93U3RhdGVtZW50KHJldGhyb3dUb2tlbiwgZW5kVG9rZW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudChidWlsZFByb2JsZW0oCiAgICAgICAgICBmYXN0YS5tZXNzYWdlUmV0aHJvd05vdENhdGNoLAogICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4ocmV0aHJvd1Rva2VuKSwKICAgICAgICAgIGxlbmd0aEZvclRva2VuKHJldGhyb3dUb2tlbikpKQogICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHJldGhyb3dUb2tlbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGaW5hbGx5QmxvY2soVG9rZW4gZmluYWxseUtleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIkZpbmFsbHlCbG9jayIpOwogICAgLy8gRG8gbm90aGluZywgaGFuZGxlZCBieSBbZW5kVHJ5U3RhdGVtZW50XS4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kV2hpbGVTdGF0ZW1lbnQoVG9rZW4gd2hpbGVLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiV2hpbGVTdGF0ZW1lbnQiKTsKICAgIFN0YXRlbWVudCBib2R5ID0gcG9wU3RhdGVtZW50KCk7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBKdW1wVGFyZ2V0IGNvbnRpbnVlVGFyZ2V0ID0gZXhpdENvbnRpbnVlVGFyZ2V0KCk7CiAgICBKdW1wVGFyZ2V0IGJyZWFrVGFyZ2V0ID0gZXhpdEJyZWFrVGFyZ2V0KCk7CiAgICBpZiAoY29udGludWVUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgYm9keSA9IGZvcmVzdC5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGJvZHkpOwogICAgICBjb250aW51ZVRhcmdldC5yZXNvbHZlQ29udGludWVzKGZvcmVzdCwgYm9keSk7CiAgICB9CiAgICBTdGF0ZW1lbnQgcmVzdWx0ID0KICAgICAgICBmb3Jlc3QuY3JlYXRlV2hpbGVTdGF0ZW1lbnQod2hpbGVLZXl3b3JkLCBjb25kaXRpb24sIGJvZHkpOwogICAgaWYgKGJyZWFrVGFyZ2V0Lmhhc1VzZXJzKSB7CiAgICAgIHJlc3VsdCA9IGZvcmVzdC5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KHJlc3VsdCk7CiAgICAgIGJyZWFrVGFyZ2V0LnJlc29sdmVCcmVha3MoZm9yZXN0LCByZXN1bHQpOwogICAgfQogICAgZXhpdExvb3BPclN3aXRjaChyZXN1bHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFbXB0eVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRW1wdHlTdGF0ZW1lbnQiKTsKICAgIHB1c2goZm9yZXN0LmNyZWF0ZUVtcHR5U3RhdGVtZW50KHRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQXNzZXJ0KFRva2VuIGFzc2VydEtleXdvcmQsIEFzc2VydCBraW5kKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkFzc2VydCIpOwogICAgLy8gSWYgaW4gYW4gYXNzZXJ0IGluaXRpYWxpemVyLCBtYWtlIHN1cmUgW2luSW5pdGlhbGl6ZXJdIGlzIGZhbHNlIHNvIHdlCiAgICAvLyB1c2UgdGhlIGZvcm1hbCBwYXJhbWV0ZXIgc2NvcGUuIElmIHRoaXMgaXMgYW55IG90aGVyIGtpbmQgb2YgYXNzZXJ0LAogICAgLy8gaW5Jbml0aWFsaXplciBzaG91bGQgYmUgZmFsc2UgYW55d2F5LgogICAgaW5Jbml0aWFsaXplciA9IGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRBc3NlcnQoVG9rZW4gYXNzZXJ0S2V5d29yZCwgQXNzZXJ0IGtpbmQsIFRva2VuIGxlZnRQYXJlbnRoZXNpcywKICAgICAgVG9rZW4gY29tbWFUb2tlbiwgVG9rZW4gc2VtaWNvbG9uVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkFzc2VydCIpOwogICAgRXhwcmVzc2lvbiBtZXNzYWdlID0gcG9wRm9yVmFsdWVJZk5vdE51bGwoY29tbWFUb2tlbik7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBvcEZvclZhbHVlKCk7CgogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgQXNzZXJ0LlN0YXRlbWVudDoKICAgICAgICBwdXNoKGZvcmVzdC5jcmVhdGVBc3NlcnRTdGF0ZW1lbnQoYXNzZXJ0S2V5d29yZCwgbGVmdFBhcmVudGhlc2lzLAogICAgICAgICAgICBjb25kaXRpb24sIGNvbW1hVG9rZW4sIG1lc3NhZ2UsIHNlbWljb2xvblRva2VuKSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIEFzc2VydC5FeHByZXNzaW9uOgogICAgICAgIC8vIFRoZSBwYXJzZXIgaGFzIGFscmVhZHkgcmVwb3J0ZWQgYW4gZXJyb3IgaW5kaWNhdGluZyB0aGF0IGFzc2VydAogICAgICAgIC8vIGNhbm5vdCBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24uCiAgICAgICAgcHVzaChidWlsZFByb2JsZW0oZmFzdGEubWVzc2FnZUFzc2VydEFzRXhwcmVzc2lvbiwgYXNzZXJ0S2V5d29yZC5vZmZzZXQsCiAgICAgICAgICAgIGFzc2VydEtleXdvcmQubGVuZ3RoKSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIEFzc2VydC5Jbml0aWFsaXplcjoKICAgICAgICBwdXNoKGZvcmVzdC5jcmVhdGVBc3NlcnRJbml0aWFsaXplcigKICAgICAgICAgICAgYXNzZXJ0S2V5d29yZCwgbGVmdFBhcmVudGhlc2lzLCBjb25kaXRpb24sIGNvbW1hVG9rZW4sIG1lc3NhZ2UpKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kWWllbGRTdGF0ZW1lbnQoVG9rZW4geWllbGRUb2tlbiwgVG9rZW4gc3RhclRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiWWllbGRTdGF0ZW1lbnQiKTsKICAgIHB1c2goZm9yZXN0LmNyZWF0ZVlpZWxkU3RhdGVtZW50KAogICAgICAgIHlpZWxkVG9rZW4sIHN0YXJUb2tlbiwgcG9wRm9yVmFsdWUoKSwgZW5kVG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Td2l0Y2hCbG9jayhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Td2l0Y2hCbG9jayIpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJzd2l0Y2ggYmxvY2siKTsKICAgIGVudGVyU3dpdGNoU2NvcGUoKTsKICAgIGVudGVyQnJlYWtUYXJnZXQodG9rZW4uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luU3dpdGNoQ2FzZShpbnQgbGFiZWxDb3VudCwgaW50IGV4cHJlc3Npb25Db3VudCwgVG9rZW4gZmlyc3RUb2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Td2l0Y2hDYXNlIik7CiAgICBpbnQgY291bnQgPSBsYWJlbENvdW50ICsgZXhwcmVzc2lvbkNvdW50OwogICAgTGlzdDxPYmplY3Q+IGxhYmVsc0FuZEV4cHJlc3Npb25zID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxPYmplY3Q+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICBMaXN0PExhYmVsPiBsYWJlbHMgPSBsYWJlbENvdW50ID09IDAgPyBudWxsIDogbmV3IExpc3Q8TGFiZWw+KGxhYmVsQ291bnQpOwogICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucyA9CiAgICAgICAgbmV3IExpc3Q8RXhwcmVzc2lvbj4uZmlsbGVkKGV4cHJlc3Npb25Db3VudCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgaW50IGxhYmVsSW5kZXggPSAwOwogICAgaW50IGV4cHJlc3Npb25JbmRleCA9IDA7CiAgICBpZiAobGFiZWxzQW5kRXhwcmVzc2lvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKE9iamVjdCBsYWJlbE9yRXhwcmVzc2lvbiBpbiBsYWJlbHNBbmRFeHByZXNzaW9ucykgewogICAgICAgIGlmIChsYWJlbE9yRXhwcmVzc2lvbiBpcyBMYWJlbCkgewogICAgICAgICAgbGFiZWxzW2xhYmVsSW5kZXgrK10gPSBsYWJlbE9yRXhwcmVzc2lvbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXhwcmVzc2lvbnNbZXhwcmVzc2lvbkluZGV4KytdID0gbGFiZWxPckV4cHJlc3Npb247CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3NlcnQoc2NvcGUgPT0gc3dpdGNoU2NvcGUpOwogICAgaWYgKGxhYmVscyAhPSBudWxsKSB7CiAgICAgIGZvciAoTGFiZWwgbGFiZWwgaW4gbGFiZWxzKSB7CiAgICAgICAgU3RyaW5nIGxhYmVsTmFtZSA9IGxhYmVsLm5hbWU7CiAgICAgICAgaWYgKHNjb3BlLmhhc0xvY2FsTGFiZWwobGFiZWxOYW1lKSkgewogICAgICAgICAgLy8gVE9ETyhhaGUpOiBTaG91bGQgdmFsaWRhdGUgdGhpcyBpcyBhIGdvdG8gdGFyZ2V0LgogICAgICAgICAgaWYgKCFzY29wZS5jbGFpbUxhYmVsKGxhYmVsTmFtZSkpIHsKICAgICAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlTGFiZWxJblN3aXRjaFN0YXRlbWVudAogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGxhYmVsTmFtZSksCiAgICAgICAgICAgICAgICBsYWJlbC5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgbGFiZWxOYW1lLmxlbmd0aCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNjb3BlLmRlY2xhcmVMYWJlbCgKICAgICAgICAgICAgICBsYWJlbE5hbWUsIGNyZWF0ZUdvdG9UYXJnZXQoZmlyc3RUb2tlbi5jaGFyT2Zmc2V0KSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBwdXNoKGV4cHJlc3Npb25zKTsKICAgIHB1c2gobGFiZWxzID8/IE51bGxWYWx1ZS5MYWJlbHMpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJzd2l0Y2ggY2FzZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRTd2l0Y2hDYXNlKAogICAgICBpbnQgbGFiZWxDb3VudCwKICAgICAgaW50IGV4cHJlc3Npb25Db3VudCwKICAgICAgVG9rZW4gZGVmYXVsdEtleXdvcmQsCiAgICAgIFRva2VuIGNvbG9uQWZ0ZXJEZWZhdWx0LAogICAgICBpbnQgc3RhdGVtZW50Q291bnQsCiAgICAgIFRva2VuIGZpcnN0VG9rZW4sCiAgICAgIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJTd2l0Y2hDYXNlIik7CiAgICAvLyBXZSBhbHdheXMgY3JlYXRlIGEgYmxvY2sgaGVyZSBzbyB0aGF0IHdlIGxhdGVyIGtub3cgdGhhdCB0aGVyZSdzIGFsd2F5cwogICAgLy8gb25lIHN5bnRoZXRpYyBibG9jayB3aGVuIHdlIGZpbmlzaCBjb21waWxpbmcgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYW5kCiAgICAvLyBjaGVjayB0aGlzIHN3aXRjaCBjYXNlIHRvIHNlZSBpZiBpdCBmYWxscyB0aHJvdWdoIHRvIHRoZSBuZXh0IGNhc2UuCiAgICBTdGF0ZW1lbnQgYmxvY2sgPSBwb3BCbG9jayhzdGF0ZW1lbnRDb3VudCwgZmlyc3RUb2tlbiwgbnVsbCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgTGlzdDxMYWJlbD4gbGFiZWxzID0gcG9wKCk7CiAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zID0gcG9wKCk7CiAgICBMaXN0PGludD4gZXhwcmVzc2lvbk9mZnNldHMgPSA8aW50PltdOwogICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgZXhwcmVzc2lvbk9mZnNldHMuYWRkKGZvcmVzdC5yZWFkT2Zmc2V0KGV4cHJlc3Npb24pKTsKICAgIH0KICAgIHB1c2gobmV3IFN3aXRjaENhc2VKdWRnbWVudChleHByZXNzaW9ucywgZXhwcmVzc2lvbk9mZnNldHMsIGJsb2NrLAogICAgICAgIGlzRGVmYXVsdDogZGVmYXVsdEtleXdvcmQgIT0gbnVsbCkKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlyc3RUb2tlbi5jaGFyT2Zmc2V0KTsKICAgIHB1c2gobGFiZWxzID8/IE51bGxWYWx1ZS5MYWJlbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRTd2l0Y2hTdGF0ZW1lbnQoVG9rZW4gc3dpdGNoS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlN3aXRjaFN0YXRlbWVudCIpOwoKICAgIExpc3Q8U3dpdGNoQ2FzZT4gY2FzZXMgPSBwb3AoKTsKICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gZXhpdEJyZWFrVGFyZ2V0KCk7CiAgICBleGl0U3dpdGNoU2NvcGUoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgU3RhdGVtZW50IHJlc3VsdCA9IG5ldyBTd2l0Y2hTdGF0ZW1lbnRKdWRnbWVudChleHByZXNzaW9uLCBjYXNlcykKICAgICAgLi5maWxlT2Zmc2V0ID0gc3dpdGNoS2V5d29yZC5jaGFyT2Zmc2V0OwogICAgaWYgKHRhcmdldC5oYXNVc2VycykgewogICAgICByZXN1bHQgPSBmb3Jlc3QuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChyZXN1bHQpOwogICAgICB0YXJnZXQucmVzb2x2ZUJyZWFrcyhmb3Jlc3QsIHJlc3VsdCk7CiAgICB9CiAgICBleGl0TG9vcE9yU3dpdGNoKHJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFN3aXRjaEJsb2NrKGludCBjYXNlQ291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJTd2l0Y2hCbG9jayIpOwogICAgTGlzdDxTd2l0Y2hDYXNlPiBjYXNlcyA9CiAgICAgICAgbmV3IExpc3Q8U3dpdGNoQ2FzZT4uZmlsbGVkKGNhc2VDb3VudCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IGNhc2VDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIExpc3Q8TGFiZWw+IGxhYmVscyA9IHBvcCgpOwogICAgICBTd2l0Y2hDYXNlIGN1cnJlbnQgPSBjYXNlc1tpXSA9IHBvcCgpOwogICAgICBpZiAobGFiZWxzICE9IG51bGwpIHsKICAgICAgICBmb3IgKExhYmVsIGxhYmVsIGluIGxhYmVscykgewogICAgICAgICAgSnVtcFRhcmdldCB0YXJnZXQgPSBzd2l0Y2hTY29wZS5sb29rdXBMYWJlbChsYWJlbC5uYW1lKTsKICAgICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkgewogICAgICAgICAgICB0YXJnZXQucmVzb2x2ZUdvdG9zKGZvcmVzdCwgY3VycmVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhc2VDb3VudCAtIDE7IGkrKykgewogICAgICBTd2l0Y2hDYXNlIGN1cnJlbnQgPSBjYXNlc1tpXTsKICAgICAgQmxvY2sgYmxvY2sgPSBjdXJyZW50LmJvZHk7CiAgICAgIC8vIFtibG9ja10gaXMgYSBzeW50aGV0aWMgYmxvY2sgdGhhdCBpcyBhZGRlZCB0byBoYW5kbGUgdmFyaWFibGUKICAgICAgLy8gZGVjbGFyYXRpb25zIGluIHRoZSBzd2l0Y2ggY2FzZS4KICAgICAgVHJlZU5vZGUgbGFzdE5vZGUgPQogICAgICAgICAgYmxvY2suc3RhdGVtZW50cy5pc0VtcHR5ID8gbnVsbCA6IGJsb2NrLnN0YXRlbWVudHMubGFzdDsKICAgICAgaWYgKGZvcmVzdC5pc0Jsb2NrKGxhc3ROb2RlKSkgewogICAgICAgIC8vIFRoaXMgaXMgYSBub24tc3ludGhldGljIGJsb2NrLgogICAgICAgIEJsb2NrIGJsb2NrID0gbGFzdE5vZGU7CiAgICAgICAgbGFzdE5vZGUgPSBibG9jay5zdGF0ZW1lbnRzLmlzRW1wdHkgPyBudWxsIDogYmxvY2suc3RhdGVtZW50cy5sYXN0OwogICAgICB9CiAgICAgIGlmIChsYXN0Tm9kZSBpcyBFeHByZXNzaW9uU3RhdGVtZW50KSB7CiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudCBzdGF0ZW1lbnQgPSBsYXN0Tm9kZTsKICAgICAgICBsYXN0Tm9kZSA9IHN0YXRlbWVudC5leHByZXNzaW9uOwogICAgICB9CiAgICAgIGlmIChsYXN0Tm9kZSBpcyEgQnJlYWtTdGF0ZW1lbnQgJiYKICAgICAgICAgIGxhc3ROb2RlIGlzISBDb250aW51ZVN3aXRjaFN0YXRlbWVudCAmJgogICAgICAgICAgbGFzdE5vZGUgaXMhIFJldGhyb3cgJiYKICAgICAgICAgIGxhc3ROb2RlIGlzISBSZXR1cm5TdGF0ZW1lbnQgJiYKICAgICAgICAgICFmb3Jlc3QuaXNUaHJvdyhsYXN0Tm9kZSkpIHsKICAgICAgICBibG9jay5hZGRTdGF0ZW1lbnQoCiAgICAgICAgICAgIG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KGJ1aWxkRmFsbFRocm91Z2hFcnJvcihjdXJyZW50LmZpbGVPZmZzZXQpKSk7CiAgICAgIH0KICAgIH0KCiAgICBwdXNoKGNhc2VzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2FzZU1hdGNoKFRva2VuIGNhc2VLZXl3b3JkLCBUb2tlbiBjb2xvbikgewogICAgZGVidWdFdmVudCgiQ2FzZU1hdGNoIik7CiAgICAvLyBEbyBub3RoaW5nLiBIYW5kbGVkIGJ5IFtoYW5kbGVTd2l0Y2hDYXNlXS4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQnJlYWtTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBicmVha0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJCcmVha1N0YXRlbWVudCIpOwogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBicmVha1RhcmdldDsKICAgIElkZW50aWZpZXIgaWRlbnRpZmllcjsKICAgIFN0cmluZyBuYW1lOwogICAgaWYgKGhhc1RhcmdldCkgewogICAgICBpZGVudGlmaWVyID0gcG9wKCk7CiAgICAgIG5hbWUgPSBpZGVudGlmaWVyLm5hbWU7CiAgICAgIHRhcmdldCA9IHNjb3BlLmxvb2t1cExhYmVsKG5hbWUpOwogICAgfQogICAgaWYgKHRhcmdldCA9PSBudWxsICYmIG5hbWUgPT0gbnVsbCkgewogICAgICBwdXNoKHByb2JsZW1Jbkxvb3BPclN3aXRjaCA9IGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VCcmVha091dHNpZGVPZkxvb3AsIGJyZWFrS2V5d29yZC5jaGFyT2Zmc2V0KSk7CiAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBudWxsIHx8CiAgICAgICAgdGFyZ2V0IGlzISBKdW1wVGFyZ2V0IHx8CiAgICAgICAgIXRhcmdldC5pc0JyZWFrVGFyZ2V0KSB7CiAgICAgIFRva2VuIGxhYmVsVG9rZW4gPSBicmVha0tleXdvcmQubmV4dDsKICAgICAgcHVzaChwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggPSBidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUludmFsaWRCcmVha1RhcmdldC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgbGFiZWxUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgbGVuZ3RoOiBsYWJlbFRva2VuLmxlbmd0aCkpOwogICAgfSBlbHNlIGlmICh0YXJnZXQuZnVuY3Rpb25OZXN0aW5nTGV2ZWwgIT0gZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgICAgcHVzaChidWlsZFByb2JsZW1UYXJnZXRPdXRzaWRlTG9jYWxGdW5jdGlvbihuYW1lLCBicmVha0tleXdvcmQpKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPQogICAgICAgICAgZm9yZXN0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGJyZWFrS2V5d29yZCwgaWRlbnRpZmllciwgZW5kVG9rZW4pOwogICAgICB0YXJnZXQuYWRkQnJlYWsoc3RhdGVtZW50KTsKICAgICAgcHVzaChzdGF0ZW1lbnQpOwogICAgfQogIH0KCiAgU3RhdGVtZW50IGJ1aWxkUHJvYmxlbVRhcmdldE91dHNpZGVMb2NhbEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBUb2tlbiBrZXl3b3JkKSB7CiAgICBTdGF0ZW1lbnQgcHJvYmxlbTsKICAgIGJvb2wgaXNCcmVhayA9IG9wdGlvbmFsKCJicmVhayIsIGtleXdvcmQpOwogICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyk+IHRlbXBsYXRlID0gaXNCcmVhawogICAgICAgICAgPyBmYXN0YS50ZW1wbGF0ZUJyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uCiAgICAgICAgICA6IGZhc3RhLnRlbXBsYXRlQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb247CiAgICAgIHByb2JsZW0gPSBidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5hbWUpLCBvZmZzZXRGb3JUb2tlbihrZXl3b3JkKSwKICAgICAgICAgIGxlbmd0aDogbGVuZ3RoT2ZTcGFuKGtleXdvcmQsIGtleXdvcmQubmV4dCkpOwogICAgfSBlbHNlIHsKICAgICAgTWVzc2FnZSBtZXNzYWdlID0gaXNCcmVhawogICAgICAgICAgPyBmYXN0YS5tZXNzYWdlQW5vbnltb3VzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24KICAgICAgICAgIDogZmFzdGEubWVzc2FnZUFub255bW91c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uOwogICAgICBwcm9ibGVtID0gYnVpbGRQcm9ibGVtU3RhdGVtZW50KG1lc3NhZ2UsIG9mZnNldEZvclRva2VuKGtleXdvcmQpLAogICAgICAgICAgbGVuZ3RoOiBsZW5ndGhGb3JUb2tlbihrZXl3b3JkKSk7CiAgICB9CiAgICBwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggPz89IHByb2JsZW07CiAgICByZXR1cm4gcHJvYmxlbTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ29udGludWVTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBjb250aW51ZUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDb250aW51ZVN0YXRlbWVudCIpOwogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBjb250aW51ZVRhcmdldDsKICAgIElkZW50aWZpZXIgaWRlbnRpZmllcjsKICAgIFN0cmluZyBuYW1lOwogICAgaWYgKGhhc1RhcmdldCkgewogICAgICBpZGVudGlmaWVyID0gcG9wKCk7CiAgICAgIG5hbWUgPSBpZGVudGlmaWVyLm5hbWU7CiAgICAgIEJ1aWxkZXIgbmFtZWRUYXJnZXQgPSBzY29wZS5sb29rdXBMYWJlbChpZGVudGlmaWVyLm5hbWUpOwogICAgICBpZiAobmFtZWRUYXJnZXQgIT0gbnVsbCAmJiBuYW1lZFRhcmdldCBpcyEgSnVtcFRhcmdldCkgewogICAgICAgIFRva2VuIGxhYmVsVG9rZW4gPSBjb250aW51ZUtleXdvcmQubmV4dDsKICAgICAgICBwdXNoKHByb2JsZW1Jbkxvb3BPclN3aXRjaCA9IGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgICAgZmFzdGEubWVzc2FnZUNvbnRpbnVlTGFiZWxOb3RUYXJnZXQsIGxhYmVsVG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgICAgbGVuZ3RoOiBsYWJlbFRva2VuLmxlbmd0aCkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0YXJnZXQgPSBuYW1lZFRhcmdldDsKICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7CiAgICAgICAgaWYgKHN3aXRjaFNjb3BlID09IG51bGwpIHsKICAgICAgICAgIHB1c2goYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlTGFiZWxOb3RGb3VuZC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgIGNvbnRpbnVlS2V5d29yZC5uZXh0LmNoYXJPZmZzZXQpKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc3dpdGNoU2NvcGUuZm9yd2FyZERlY2xhcmVMYWJlbCgKICAgICAgICAgICAgaWRlbnRpZmllci5uYW1lLCB0YXJnZXQgPSBjcmVhdGVHb3RvVGFyZ2V0KGlkZW50aWZpZXIuY2hhck9mZnNldCkpOwogICAgICB9CiAgICAgIGlmICh0YXJnZXQuaXNHb3RvVGFyZ2V0ICYmCiAgICAgICAgICB0YXJnZXQuZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgICAgICBDb250aW51ZVN3aXRjaFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBuZXcgQ29udGludWVTd2l0Y2hKdWRnbWVudChudWxsKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY29udGludWVLZXl3b3JkLmNoYXJPZmZzZXQ7CiAgICAgICAgdGFyZ2V0LmFkZEdvdG8oc3RhdGVtZW50KTsKICAgICAgICBwdXNoKHN0YXRlbWVudCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKICAgICAgcHVzaChwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggPSBidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICBmYXN0YS5tZXNzYWdlQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2UsIGNvbnRpbnVlS2V5d29yZC5jaGFyT2Zmc2V0LAogICAgICAgICAgbGVuZ3RoOiBjb250aW51ZUtleXdvcmQubGVuZ3RoKSk7CiAgICB9IGVsc2UgaWYgKCF0YXJnZXQuaXNDb250aW51ZVRhcmdldCkgewogICAgICBUb2tlbiBsYWJlbFRva2VuID0gY29udGludWVLZXl3b3JkLm5leHQ7CiAgICAgIHB1c2gocHJvYmxlbUluTG9vcE9yU3dpdGNoID0gYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgZmFzdGEudGVtcGxhdGVJbnZhbGlkQ29udGludWVUYXJnZXQud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIGxhYmVsVG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgIGxlbmd0aDogbGFiZWxUb2tlbi5sZW5ndGgpKTsKICAgIH0gZWxzZSBpZiAodGFyZ2V0LmZ1bmN0aW9uTmVzdGluZ0xldmVsICE9IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICAgIHB1c2goYnVpbGRQcm9ibGVtVGFyZ2V0T3V0c2lkZUxvY2FsRnVuY3Rpb24obmFtZSwgY29udGludWVLZXl3b3JkKSk7CiAgICB9IGVsc2UgewogICAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0KICAgICAgICAgIGZvcmVzdC5jcmVhdGVDb250aW51ZVN0YXRlbWVudChjb250aW51ZUtleXdvcmQsIGlkZW50aWZpZXIsIGVuZFRva2VuKTsKICAgICAgdGFyZ2V0LmFkZENvbnRpbnVlKHN0YXRlbWVudCk7CiAgICAgIHB1c2goc3RhdGVtZW50KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luVHlwZVZhcmlhYmxlIik7CiAgICBJZGVudGlmaWVyIG5hbWUgPSBwb3AoKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSBwb3AoKTsKICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgPQogICAgICAgIG5ldyBUeXBlVmFyaWFibGVCdWlsZGVyKG5hbWUubmFtZSwgbGlicmFyeSwgbmFtZS5jaGFyT2Zmc2V0KTsKICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgIGluZmVyQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpOwogICAgICBmb3IgKEV4cHJlc3Npb24gYW5ub3RhdGlvbiBpbiBhbm5vdGF0aW9ucykgewogICAgICAgIHZhcmlhYmxlLnBhcmFtZXRlci5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24pOwogICAgICB9CiAgICB9CiAgICBwdXNoKHZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVHlwZVZhcmlhYmxlc0RlZmluZWQoVG9rZW4gdG9rZW4sIGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiaGFuZGxlVHlwZVZhcmlhYmxlc0RlZmluZWQiKTsKICAgIGFzc2VydChjb3VudCA+IDApOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpOwogICAgZW50ZXJGdW5jdGlvblR5cGVTY29wZSh0eXBlVmFyaWFibGVzKTsKICAgIHB1c2godHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbiwgaW50IGluZGV4LCBUb2tlbiBleHRlbmRzT3JTdXBlcikgewogICAgZGVidWdFdmVudCgiVHlwZVZhcmlhYmxlIik7CiAgICBVbnJlc29sdmVkVHlwZSBib3VuZCA9IHBvcCgpOwogICAgLy8gUGVlayB0byBsZWF2ZSB0eXBlIHBhcmFtZXRlcnMgb24gdG9wIG9mIHN0YWNrLgogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcGVlaygpOwoKICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgPSB0eXBlVmFyaWFibGVzW2luZGV4XTsKICAgIHZhcmlhYmxlLmJvdW5kID0gYm91bmQ/LmJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZXMoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVWYXJpYWJsZXMiKTsKICAgIC8vIFBlZWsgdG8gbGVhdmUgdHlwZSBwYXJhbWV0ZXJzIG9uIHRvcCBvZiBzdGFjay4KICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBlZWsoKTsKCiAgICBpZiAoIWxlZ2FjeU1vZGUpIHsKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gY2FsY3VsYXRlZEJvdW5kcyA9IGNhbGN1bGF0ZUJvdW5kcygKICAgICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuZHluYW1pY1R5cGUsCiAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuYm90dG9tVHlwZSwKICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5vYmplY3RDbGFzc0J1aWxkZXIpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICB0eXBlVmFyaWFibGVzW2ldLmRlZmF1bHRUeXBlID0gY2FsY3VsYXRlZEJvdW5kc1tpXTsKICAgICAgICB0eXBlVmFyaWFibGVzW2ldLmRlZmF1bHRUeXBlLnJlc29sdmVJbihzY29wZSwKICAgICAgICAgICAgdHlwZVZhcmlhYmxlc1tpXS5jaGFyT2Zmc2V0LCB0eXBlVmFyaWFibGVzW2ldLmZpbGVVcmksIGxpYnJhcnkpOwogICAgICAgIHR5cGVWYXJpYWJsZXNbaV0uZmluaXNoKAogICAgICAgICAgICBsaWJyYXJ5LAogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQub2JqZWN0Q2xhc3NCdWlsZGVyLAogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuZHluYW1pY1R5cGUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICB0eXBlVmFyaWFibGVzW2ldLmRlZmF1bHRUeXBlID0gbGlicmFyeS5sb2FkZXIudGFyZ2V0LmR5bmFtaWNUeXBlOwogICAgICAgIHR5cGVWYXJpYWJsZXNbaV0uZmluaXNoKAogICAgICAgICAgICBsaWJyYXJ5LAogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQub2JqZWN0Q2xhc3NCdWlsZGVyLAogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuZHluYW1pY1R5cGUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZVZhcmlhYmxlcyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9UeXBlVmFyaWFibGVzIik7CiAgICBlbnRlckZ1bmN0aW9uVHlwZVNjb3BlKG51bGwpOwogICAgcHVzaChOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgfQoKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVWYXJpYWJsZUJ1aWxkZXJzVG9LZXJuZWwoCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlQnVpbGRlcnMpIHsKICAgIGlmICh0eXBlVmFyaWFibGVCdWlsZGVycyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMgPSBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5maWxsZWQoCiAgICAgICAgdHlwZVZhcmlhYmxlQnVpbGRlcnMubGVuZ3RoLCBudWxsLAogICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIHR5cGVWYXJpYWJsZUJ1aWxkZXJzKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXJzW2krK10gPSBidWlsZGVyLnRhcmdldDsKICAgIH0KICAgIHJldHVybiB0eXBlUGFyYW1ldGVyczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFN0YXRlbWVudChUb2tlbiB0b2tlbiwgTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcG9wKCk7CiAgICBwdXNoKG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIGJ1aWxkUHJvYmxlbShtZXNzYWdlLCBzdGF0ZW1lbnQuZmlsZU9mZnNldCwgbm9MZW5ndGgpKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsIGJvb2wgc3VwcHJlc3NNZXNzYWdlOiBmYWxzZX0pIHsKICAgIGlmICghc3VwcHJlc3NNZXNzYWdlKSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLAogICAgICAgICAgd2FzSGFuZGxlZDogdHJ1ZSwgY29udGV4dDogY29udGV4dCk7CiAgICB9CiAgICBTdHJpbmcgdGV4dCA9IGxpYnJhcnkubG9hZGVyLnRhcmdldC5jb250ZXh0CiAgICAgICAgLmZvcm1hdChtZXNzYWdlLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIGxlbmd0aCksIFNldmVyaXR5LmVycm9yKTsKICAgIHJldHVybiB3cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICBuZXcgSW52YWxpZEV4cHJlc3Npb24odGV4dCkuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0LCBjaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gd3JhcEluUHJvYmxlbShFeHByZXNzaW9uIGV4cHJlc3Npb24sIE1lc3NhZ2UgbWVzc2FnZSwgaW50IGxlbmd0aCwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBpbnQgY2hhck9mZnNldCA9IGZvcmVzdC5yZWFkT2Zmc2V0KGV4cHJlc3Npb24pOwogICAgU2V2ZXJpdHkgc2V2ZXJpdHkgPSBtZXNzYWdlLmNvZGUuc2V2ZXJpdHk7CiAgICBpZiAoc2V2ZXJpdHkgPT0gU2V2ZXJpdHkuZXJyb3IgfHwKICAgICAgICBzZXZlcml0eSA9PSBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcgJiYgIWxlZ2FjeU1vZGUpIHsKICAgICAgcmV0dXJuIHdyYXBJbkxvY2F0ZWRQcm9ibGVtKAogICAgICAgICAgZXhwcmVzc2lvbiwgbWVzc2FnZS53aXRoTG9jYXRpb24odXJpLCBjaGFyT2Zmc2V0LCBsZW5ndGgpLAogICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICB9IGVsc2UgewogICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgY29udGV4dDogY29udGV4dCk7CiAgICAgIHJldHVybiBleHByZXNzaW9uOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB3cmFwSW5Mb2NhdGVkUHJvYmxlbShFeHByZXNzaW9uIGV4cHJlc3Npb24sIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgLy8gVE9ETyhhc2tlc2MpOiBQcm9kdWNlIGV4cGxpY2l0IGVycm9yIGV4cHJlc3Npb24gd3JhcHBpbmcgdGhlIG9yaWdpbmFsLgogICAgLy8gU2VlIFtpc3N1ZSAyOTcxN10oaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzI5NzE3KQogICAgaW50IG9mZnNldCA9IGZvcmVzdC5yZWFkT2Zmc2V0KGV4cHJlc3Npb24pOwogICAgaWYgKG9mZnNldCA9PSAtMSkgewogICAgICBvZmZzZXQgPSBtZXNzYWdlLmNoYXJPZmZzZXQ7CiAgICB9CiAgICByZXR1cm4gbmV3IExldCgKICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSgKICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgbWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UubGVuZ3RoLAogICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dCkpLAogICAgICAgICAgICB0eXBlOiBjb25zdCBCb3R0b21UeXBlKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgZXhwcmVzc2lvbik7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkRmFsbFRocm91Z2hFcnJvcihpbnQgY2hhck9mZnNldCkgewogICAgYWRkUHJvYmxlbShmYXN0YS5tZXNzYWdlU3dpdGNoQ2FzZUZhbGxUaHJvdWdoLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCk7CgogICAgLy8gVE9ETyhhaGUpOiBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgdGhlIEFuYWx5emVyLiBJdCBzaG91bGQKICAgIC8vIGJlIG1vdmVkIHRvIFtGb3Jlc3RdIG9yIGNvbmRpdGlvbmFsIG9uIGBmb3Jlc3QgaXMgRmFuZ29ybmAuCgogICAgLy8gVE9ETyhhaGUpOiBDb21wdXRlIGEgTG9jYXRlZE1lc3NhZ2UgYWJvdmUgaW5zdGVhZD8KICAgIExvY2F0aW9uIGxvY2F0aW9uID0gbWVzc2FnZXMuZ2V0TG9jYXRpb25Gcm9tVXJpKHVyaSwgY2hhck9mZnNldCk7CgogICAgcmV0dXJuIGZvcmVzdC5jcmVhdGVUaHJvdygKICAgICAgICBudWxsLAogICAgICAgIGJ1aWxkU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIuY29yZVR5cGVzLmZhbGxUaHJvdWdoRXJyb3JVcmxBbmRMaW5lQ29uc3RydWN0b3IsCiAgICAgICAgICAgIGZvcmVzdC5jcmVhdGVBcmd1bWVudHMoPEV4cHJlc3Npb24+WwogICAgICAgICAgICAgIGZvcmVzdC5jcmVhdGVTdHJpbmdMaXRlcmFsKCIke2xvY2F0aW9uPy5maWxlID8/IHVyaX0iLCBudWxsKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCwKICAgICAgICAgICAgICBmb3Jlc3QuY3JlYXRlSW50TGl0ZXJhbChsb2NhdGlvbj8ubGluZSA/PyAwLCBudWxsKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCwKICAgICAgICAgICAgXSwgbm9Mb2NhdGlvbiksCiAgICAgICAgICAgIGNoYXJPZmZzZXQ6IGNoYXJPZmZzZXQpKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IoCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIGNsYXNzTmFtZSwKICAgICAgW2ludCBjaGFyT2Zmc2V0ID0gLTFdKSB7CiAgICBhZGRQcm9ibGVtRXJyb3JJZkNvbnN0KG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGNsYXNzTmFtZS5sZW5ndGgpOwogICAgLy8gVE9ETyhhaGUpOiBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBBbmFseXplciBBU1QuCiAgICBCdWlsZGVyIGNvbnN0cnVjdG9yID0gbGlicmFyeS5sb2FkZXIuZ2V0QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcigpOwogICAgRXhwcmVzc2lvbiBpbnZvY2F0aW9uID0gYnVpbGRTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIGNvbnN0cnVjdG9yLnRhcmdldCwKICAgICAgICBmb3Jlc3QuY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPlsKICAgICAgICAgIGZvcmVzdC5jcmVhdGVTdHJpbmdMaXRlcmFsKGNsYXNzTmFtZSwgbnVsbCkuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgICAgXSwgbm9Mb2NhdGlvbikKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldDogY2hhck9mZnNldCk7CiAgICBpZiAoaW52b2NhdGlvbiBpcyBzaGFkb3cuU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgIGludm9jYXRpb24gPSBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbnZvY2F0aW9uKTsKICAgIH0KICAgIHJldHVybiBmb3Jlc3QuY3JlYXRlVGhyb3cobnVsbCwgaW52b2NhdGlvbikuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgU3RhdGVtZW50IGJ1aWxkUHJvYmxlbVN0YXRlbWVudChNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LAogICAgICB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCwgaW50IGxlbmd0aCwgYm9vbCBzdXBwcmVzc01lc3NhZ2U6IGZhbHNlfSkgewogICAgbGVuZ3RoID8/PSBub0xlbmd0aDsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KGJ1aWxkUHJvYmxlbSgKICAgICAgICBtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsCiAgICAgICAgY29udGV4dDogY29udGV4dCwgc3VwcHJlc3NNZXNzYWdlOiBzdXBwcmVzc01lc3NhZ2UpKTsKICB9CgogIFN0YXRlbWVudCB3cmFwSW5Qcm9ibGVtU3RhdGVtZW50KFN0YXRlbWVudCBzdGF0ZW1lbnQsIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgLy8gVE9ETyhhc2tlc2MpOiBQcm9kdWNlIGV4cGxpY2l0IGVycm9yIHN0YXRlbWVudCB3cmFwcGluZyB0aGUgb3JpZ2luYWwuCiAgICAvLyBTZWUgW2lzc3VlIDI5NzE3XShodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMjk3MTcpCiAgICByZXR1cm4gYnVpbGRQcm9ibGVtU3RhdGVtZW50KG1lc3NhZ2UsIHN0YXRlbWVudC5maWxlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIGJ1aWxkSW52YWxpZEluaXRpYWxpemVyKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgW2ludCBjaGFyT2Zmc2V0ID0gLTFdKSB7CiAgICBuZWVkc0ltcGxpY2l0U3VwZXJJbml0aWFsaXplciA9IGZhbHNlOwogICAgcmV0dXJuIG5ldyBTaGFkb3dJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoZXhwcmVzc2lvbikpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQoKICBJbml0aWFsaXplciBidWlsZEludmFsaWRTdXBlckluaXRpYWxpemVyKAogICAgICBDb25zdHJ1Y3RvciB0YXJnZXQsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50cywgRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICBbaW50IGNoYXJPZmZzZXQgPSAtMV0pIHsKICAgIG5lZWRzSW1wbGljaXRTdXBlckluaXRpYWxpemVyID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IEludmFsaWRTdXBlckluaXRpYWxpemVySnVkZ21lbnQoCiAgICAgICAgdGFyZ2V0LCBhcmd1bWVudHMsIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKGV4cHJlc3Npb24pKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgSW5pdGlhbGl6ZXIgYnVpbGREdXBsaWNhdGVkSW5pdGlhbGl6ZXIoRmllbGQgZmllbGQsIEV4cHJlc3Npb24gdmFsdWUsCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgb2Zmc2V0LCBpbnQgcHJldmlvdXNJbml0aWFsaXplck9mZnNldCkgewogICAgcmV0dXJuIG5ldyBTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplcigKICAgICAgICBmaWVsZCwKICAgICAgICB2YWx1ZSwKICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgICAgIG9mZnNldCwKICAgICAgICAgICAgICAgIG5vTGVuZ3RoKSkpKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgfQoKICAvLy8gUGFyYW1ldGVyIFtmb3JtYWxUeXBlXSBzaG91bGQgb25seSBiZSBwYXNzZWQgaW4gdGhlIHNwZWNpYWwgY2FzZSBvZgogIC8vLyBidWlsZGluZyBhIGZpZWxkIGluaXRpYWxpemVyIGFzIGEgZGVzdWdhcmluZyBvZiBhbiBpbml0aWFsaXppbmcgZm9ybWFsCiAgLy8vIHBhcmFtZXRlci4gIFRoZSBzcGVjIHNheXMgdGhlIGZvbGxvd2luZzoKICAvLy8KICAvLy8gIklmIGFuIGV4cGxpY2l0IHR5cGUgaXMgYXR0YWNoZWQgdG8gdGhlIGluaXRpYWxpemluZyBmb3JtYWwsIHRoYXQgaXMgaXRzCiAgLy8vIHN0YXRpYyB0eXBlLiAgT3RoZXJ3aXNlLCB0aGUgdHlwZSBvZiBhbiBpbml0aWFsaXppbmcgZm9ybWFsIG5hbWVkIF9pZF8gaXMKICAvLy8gX1RpZF8sIHdoZXJlIF9UaWRfIGlzIHRoZSB0eXBlIG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBuYW1lZCBfaWRfIGluIHRoZQogIC8vLyBpbW1lZGlhdGVseSBlbmNsb3NpbmcgY2xhc3MuICBJdCBpcyBhIHN0YXRpYyB3YXJuaW5nIGlmIHRoZSBzdGF0aWMgdHlwZSBvZgogIC8vLyBfaWRfIGlzIG5vdCBhIHN1YnR5cGUgb2YgX1RpZF8uIgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIGJ1aWxkRmllbGRJbml0aWFsaXplcihib29sIGlzU3ludGhldGljLCBTdHJpbmcgbmFtZSwKICAgICAgaW50IGZpZWxkTmFtZU9mZnNldCwgaW50IGFzc2lnbm1lbnRPZmZzZXQsIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAge0RhcnRUeXBlIGZvcm1hbFR5cGV9KSB7CiAgICBCdWlsZGVyIGJ1aWxkZXIgPSBkZWNsYXJhdGlvbkJ1aWxkZXIubG9va3VwTG9jYWxNZW1iZXIobmFtZSk7CiAgICBpZiAoYnVpbGRlcj8ubmV4dCAhPSBudWxsKSB7CiAgICAgIC8vIER1cGxpY2F0ZWQgbmFtZSwgYWxyZWFkeSByZXBvcnRlZC4KICAgICAgcmV0dXJuIG5ldyBMb2NhbEluaXRpYWxpemVyKAogICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoCiAgICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZS53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgICAgICBmaWVsZE5hbWVPZmZzZXQsCiAgICAgICAgICAgICAgICAgIG5hbWUubGVuZ3RoKSkKICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpZWxkTmFtZU9mZnNldCkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZmllbGROYW1lT2Zmc2V0KQogICAgICAgIC4uZmlsZU9mZnNldCA9IGZpZWxkTmFtZU9mZnNldDsKICAgIH0gZWxzZSBpZiAoYnVpbGRlciBpcyBGaWVsZEJ1aWxkZXIgJiYgYnVpbGRlci5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgaW5pdGlhbGl6ZWRGaWVsZHMgPz89IDxTdHJpbmcsIGludD57fTsKICAgICAgaWYgKGluaXRpYWxpemVkRmllbGRzLmNvbnRhaW5zS2V5KG5hbWUpKSB7CiAgICAgICAgcmV0dXJuIGJ1aWxkRHVwbGljYXRlZEluaXRpYWxpemVyKGJ1aWxkZXIuZmllbGQsIGV4cHJlc3Npb24sIG5hbWUsCiAgICAgICAgICAgIGFzc2lnbm1lbnRPZmZzZXQsIGluaXRpYWxpemVkRmllbGRzW25hbWVdKTsKICAgICAgfQogICAgICBpbml0aWFsaXplZEZpZWxkc1tuYW1lXSA9IGFzc2lnbm1lbnRPZmZzZXQ7CiAgICAgIGlmIChidWlsZGVyLmlzRmluYWwgJiYgYnVpbGRlci5oYXNJbml0aWFsaXplcikgewogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgYXNzaWdubWVudE9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBidWlsZGVyLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgICBdKTsKICAgICAgICBCdWlsZGVyIGNvbnN0cnVjdG9yID0KICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIuZ2V0RHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcigpOwogICAgICAgIEV4cHJlc3Npb24gaW52b2NhdGlvbiA9IGJ1aWxkU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgY29uc3RydWN0b3IudGFyZ2V0LAogICAgICAgICAgICBmb3Jlc3QuY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPlsKICAgICAgICAgICAgICBmb3Jlc3QuY3JlYXRlU3RyaW5nTGl0ZXJhbChuYW1lLCBudWxsKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gYXNzaWdubWVudE9mZnNldAogICAgICAgICAgICBdLCBub0xvY2F0aW9uKQogICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGFzc2lnbm1lbnRPZmZzZXQsCiAgICAgICAgICAgIGNoYXJPZmZzZXQ6IGFzc2lnbm1lbnRPZmZzZXQpOwogICAgICAgIGlmIChpbnZvY2F0aW9uIGlzIHNoYWRvdy5TeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQpIHsKICAgICAgICAgIGludm9jYXRpb24gPSBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbnZvY2F0aW9uKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplcigKICAgICAgICAgICAgYnVpbGRlci5maWVsZCwKICAgICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoCiAgICAgICAgICAgICAgICBmb3Jlc3QuY3JlYXRlVGhyb3cobnVsbCwgaW52b2NhdGlvbikKICAgICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gYXNzaWdubWVudE9mZnNldCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBhc3NpZ25tZW50T2Zmc2V0OwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghbGVnYWN5TW9kZSAmJgogICAgICAgICAgICBmb3JtYWxUeXBlICE9IG51bGwgJiYKICAgICAgICAgICAgIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihmb3JtYWxUeXBlLCBidWlsZGVyLmZpZWxkLnR5cGUpKSB7CiAgICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2gKICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSwgZm9ybWFsVHlwZSwgYnVpbGRlci5maWVsZC50eXBlKSwKICAgICAgICAgICAgICBhc3NpZ25tZW50T2Zmc2V0LAogICAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICAgIHVyaSwKICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoRmllbGQKICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKGJ1aWxkZXIuZmlsZVVyaSwgYnVpbGRlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBTaGFkb3dGaWVsZEluaXRpYWxpemVyKGJ1aWxkZXIuZmllbGQsIGV4cHJlc3Npb24pCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBhc3NpZ25tZW50T2Zmc2V0CiAgICAgICAgICAuLmlzU3ludGhldGljID0gaXNTeW50aGV0aWM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBidWlsZEludmFsaWRJbml0aWFsaXplcigKICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUluaXRpYWxpemVyRm9yU3RhdGljRmllbGQud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgICBmaWVsZE5hbWVPZmZzZXQsCiAgICAgICAgICAgICAgbmFtZS5sZW5ndGgpKSwKICAgICAgICAgIGZpZWxkTmFtZU9mZnNldCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplciBidWlsZFN1cGVySW5pdGlhbGl6ZXIoCiAgICAgIGJvb2wgaXNTeW50aGV0aWMsIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBbaW50IGNoYXJPZmZzZXQgPSAtMV0pIHsKICAgIGlmIChtZW1iZXIuaXNDb25zdCAmJiAhY29uc3RydWN0b3IuaXNDb25zdCkgewogICAgICByZXR1cm4gYnVpbGRJbnZhbGlkU3VwZXJJbml0aWFsaXplcigKICAgICAgICAgIGNvbnN0cnVjdG9yLAogICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXIsCiAgICAgICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5uYW1lLm5hbWUubGVuZ3RoKSksCiAgICAgICAgICBjaGFyT2Zmc2V0KTsKICAgIH0KICAgIG5lZWRzSW1wbGljaXRTdXBlckluaXRpYWxpemVyID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudChjb25zdHJ1Y3RvciwgYXJndW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgIC4uaXNTeW50aGV0aWMgPSBpc1N5bnRoZXRpYzsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIGJ1aWxkUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFtpbnQgY2hhck9mZnNldCA9IC0xXSkgewogICAgaWYgKGNsYXNzQnVpbGRlci5jaGVja0NvbnN0cnVjdG9yQ3ljbGljKAogICAgICAgIG1lbWJlci5uYW1lLCBjb25zdHJ1Y3Rvci5uYW1lLm5hbWUpKSB7CiAgICAgIGludCBsZW5ndGggPSBjb25zdHJ1Y3Rvci5uYW1lLm5hbWUubGVuZ3RoOwogICAgICBpZiAobGVuZ3RoID09IDApIGxlbmd0aCA9ICJ0aGlzIi5sZW5ndGg7CiAgICAgIGFkZFByb2JsZW0oZmFzdGEubWVzc2FnZUNvbnN0cnVjdG9yQ3ljbGljLCBjaGFyT2Zmc2V0LCBsZW5ndGgpOwogICAgICAvLyBUT0RPKGFza2VzYyk6IFByb2R1Y2UgaW52YWxpZCBpbml0aWFsaXplci4KICAgIH0KICAgIG5lZWRzSW1wbGljaXRTdXBlckluaXRpYWxpemVyID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudChjb25zdHJ1Y3RvciwgYXJndW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVPcGVyYXRvcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiT3BlcmF0b3IiKTsKICAgIHB1c2gobmV3IE9wZXJhdG9yKHRva2VuLCB0b2tlbi5jaGFyT2Zmc2V0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN5bWJvbFZvaWQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlN5bWJvbFZvaWQiKTsKICAgIHB1c2gobmV3IElkZW50aWZpZXIucHJlc2VydmVUb2tlbih0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBpZiAobWVtYmVyLmlzTmF0aXZlKSB7CiAgICAgIHB1c2goTnVsbFZhbHVlLkZ1bmN0aW9uQm9keSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVCbG9jaygKICAgICAgICAgIHRva2VuLAogICAgICAgICAgPFN0YXRlbWVudD5bCiAgICAgICAgICAgIGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRGdW5jdGlvbkJvZHkud2l0aEFyZ3VtZW50cyh0b2tlbiksCiAgICAgICAgICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgbGVuZ3RoOiB0b2tlbi5sZW5ndGgpCiAgICAgICAgICBdLAogICAgICAgICAgbnVsbCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVW5yZXNvbHZlZFR5cGUgdmFsaWRhdGVUeXBlVXNlKAogICAgICBVbnJlc29sdmVkVHlwZSB1bnJlc29sdmVkLCBib29sIG5vbkluc3RhbmNlQWNjZXNzSXNFcnJvcikgewogICAgVHlwZUJ1aWxkZXIgYnVpbGRlciA9IHVucmVzb2x2ZWQuYnVpbGRlcjsKICAgIGlmIChidWlsZGVyIGlzIE5hbWVkVHlwZUJ1aWxkZXIgJiYgYnVpbGRlci5kZWNsYXJhdGlvbi5pc1R5cGVWYXJpYWJsZSkgewogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBidWlsZGVyLmRlY2xhcmF0aW9uLnRhcmdldDsKICAgICAgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZTsKICAgICAgaWYgKCFpc0RlY2xhcmF0aW9uSW5zdGFuY2VDb250ZXh0ICYmIHR5cGVQYXJhbWV0ZXIucGFyZW50IGlzIENsYXNzKSB7CiAgICAgICAgbWVzc2FnZSA9IGZhc3RhLm1lc3NhZ2VUeXBlVmFyaWFibGVJblN0YXRpY0NvbnRleHQud2l0aExvY2F0aW9uKAogICAgICAgICAgICB1bnJlc29sdmVkLmZpbGVVcmksCiAgICAgICAgICAgIHVucmVzb2x2ZWQuY2hhck9mZnNldCwKICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLmxlbmd0aCk7CiAgICAgIH0gZWxzZSBpZiAoY29uc3RhbnRDb250ZXh0ID09IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZCkgewogICAgICAgIG1lc3NhZ2UgPSBmYXN0YS5tZXNzYWdlVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHQud2l0aExvY2F0aW9uKAogICAgICAgICAgICB1bnJlc29sdmVkLmZpbGVVcmksCiAgICAgICAgICAgIHVucmVzb2x2ZWQuY2hhck9mZnNldCwKICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHVucmVzb2x2ZWQ7CiAgICAgIH0KICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLm1lc3NhZ2VPYmplY3QsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS5sZW5ndGgpOwogICAgICByZXR1cm4gbmV3IFVucmVzb2x2ZWRUeXBlKAogICAgICAgICAgbmV3IE5hbWVkVHlwZUJ1aWxkZXIodHlwZVBhcmFtZXRlci5uYW1lLCBudWxsKQogICAgICAgICAgICAuLmJpbmQobmV3IEludmFsaWRUeXBlQnVpbGRlcih0eXBlUGFyYW1ldGVyLm5hbWUsIG1lc3NhZ2UpKSwKICAgICAgICAgIHVucmVzb2x2ZWQuY2hhck9mZnNldCwKICAgICAgICAgIHVucmVzb2x2ZWQuZmlsZVVyaSk7CiAgICB9CiAgICByZXR1cm4gdW5yZXNvbHZlZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZXZhbHVhdGVBcmd1bWVudHNCZWZvcmUoCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsIEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsKSByZXR1cm4gZXhwcmVzc2lvbjsKICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPQogICAgICAgIG5ldyBMaXN0PEV4cHJlc3Npb24+LmZyb20oZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKSk7CiAgICBmb3IgKE5hbWVkRXhwcmVzc2lvbiBuYW1lZCBpbiBmb3Jlc3QuYXJndW1lbnRzTmFtZWQoYXJndW1lbnRzKSkgewogICAgICBleHByZXNzaW9ucy5hZGQobmFtZWQudmFsdWUpOwogICAgfQogICAgZm9yIChFeHByZXNzaW9uIGFyZ3VtZW50IGluIGV4cHJlc3Npb25zLnJldmVyc2VkKSB7CiAgICAgIGV4cHJlc3Npb24gPSBuZXcgTGV0KAogICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoYXJndW1lbnQsCiAgICAgICAgICAgICAgaXNGaW5hbDogdHJ1ZSwgdHlwZTogY29yZVR5cGVzLm9iamVjdENsYXNzLnJhd1R5cGUpLAogICAgICAgICAgZXhwcmVzc2lvbik7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJZGVudGljYWwoTWVtYmVyIG1lbWJlcikgPT4gbWVtYmVyID09IGNvcmVUeXBlcy5pZGVudGljYWxQcm9jZWR1cmU7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRNZXRob2RJbnZvY2F0aW9uKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLCBOYW1lIG5hbWUsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQsCiAgICAgIHtib29sIGlzQ29uc3RhbnRFeHByZXNzaW9uOiBmYWxzZSwKICAgICAgYm9vbCBpc051bGxBd2FyZTogZmFsc2UsCiAgICAgIGJvb2wgaXNJbXBsaWNpdENhbGw6IGZhbHNlLAogICAgICBib29sIGlzU3VwZXI6IGZhbHNlLAogICAgICBNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJiAhaXNDb25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlTm90Q29uc3RhbnRFeHByZXNzaW9uCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoJ01ldGhvZCBpbnZvY2F0aW9uJyksCiAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICBuYW1lLm5hbWUubGVuZ3RoKTsKICAgIH0KICAgIGlmIChpc1N1cGVyKSB7CiAgICAgIC8vIFdlIGNhbiBpZ25vcmUgW2lzTnVsbEF3YXJlXSBvbiBzdXBlciBzZW5kcy4KICAgICAgYXNzZXJ0KGZvcmVzdC5pc1RoaXNFeHByZXNzaW9uKHJlY2VpdmVyKSk7CiAgICAgIE1lbWJlciB0YXJnZXQgPSBsb29rdXBJbnN0YW5jZU1lbWJlcihuYW1lLCBpc1N1cGVyOiB0cnVlKTsKCiAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCB8fCAodGFyZ2V0IGlzIFByb2NlZHVyZSAmJiAhdGFyZ2V0LmlzQWNjZXNzb3IpKSB7CiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7CiAgICAgICAgICB3YXJuVW5yZXNvbHZlZE1ldGhvZChuYW1lLCBvZmZzZXQsIGlzU3VwZXI6IHRydWUpOwogICAgICAgIH0gZWxzZSBpZiAoIWFyZUFyZ3VtZW50c0NvbXBhdGlibGUodGFyZ2V0LmZ1bmN0aW9uLCBhcmd1bWVudHMpKSB7CiAgICAgICAgICB0YXJnZXQgPSBudWxsOwogICAgICAgICAgYWRkUHJvYmxlbUVycm9ySWZDb25zdCgKICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUubmFtZSksCiAgICAgICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgICAgIG5hbWUubmFtZS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KG5hbWUsIGFyZ3VtZW50cywKICAgICAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiB0YXJnZXQpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIH0KCiAgICAgIHJlY2VpdmVyID0gbmV3IFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudChuYW1lLCBpbnRlcmZhY2VUYXJnZXQ6IHRhcmdldCkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIE1ldGhvZEludm9jYXRpb24gbm9kZSA9IG5ldyBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgICByZWNlaXZlciwgY2FsbE5hbWUsIGFyZ3VtZW50cywKICAgICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKQogICAgICAgIC4uZmlsZU9mZnNldCA9IGZvcmVzdC5yZWFkT2Zmc2V0KGFyZ3VtZW50cyk7CiAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIGlmIChpc051bGxBd2FyZSkgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUocmVjZWl2ZXIpOwogICAgICByZXR1cm4gbmV3IE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICAgIHZhcmlhYmxlLAogICAgICAgICAgZm9yZXN0LmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigKICAgICAgICAgICAgICBidWlsZElzTnVsbChuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpLCBvZmZzZXQsIHRoaXMpLAogICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgbmV3IE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldCh2YXJpYWJsZSksIG5hbWUsIGFyZ3VtZW50cywgaW50ZXJmYWNlVGFyZ2V0KQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0KQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgfSBlbHNlIHsKICAgICAgTWV0aG9kSW52b2NhdGlvbiBub2RlID0gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICAgIHJlY2VpdmVyLCBuYW1lLCBhcmd1bWVudHMsCiAgICAgICAgICBpc0ltcGxpY2l0Q2FsbDogaXNJbXBsaWNpdENhbGwsIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0KQogICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsCiAgICAgIFNldmVyaXR5IHNldmVyaXR5fSkgewogICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgdXJpLAogICAgICAgIHdhc0hhbmRsZWQ6IHdhc0hhbmRsZWQsIGNvbnRleHQ6IGNvbnRleHQsIHNldmVyaXR5OiBzZXZlcml0eSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFByb2JsZW1FcnJvcklmQ29uc3QoTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICAvLyBUT0RPKGFza2VzYyk6IEluc3RlYWQgb2YgZGVjaWRpbmcgb24gdGhlIHNldmVyaXR5LCB0aGlzIG1ldGhvZCBzaG91bGQKICAgIC8vIHRha2UgdHdvIG1lc3NhZ2VzOiBvbmUgdG8gdXNlIHdoZW4gYSBjb25zdGFudCBleHByZXNzaW9uIGlzCiAgICAvLyByZXF1aXJlZCBhbmQgb25lIHRvIHVzZSBvdGhlcndpc2UuCiAgICBTZXZlcml0eSBzZXZlcml0eSA9IG1lc3NhZ2UuY29kZS5zZXZlcml0eTsKICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUpIHsKICAgICAgc2V2ZXJpdHkgPSBTZXZlcml0eS5lcnJvcjsKICAgIH0KICAgIGFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLAogICAgICAgIHdhc0hhbmRsZWQ6IHdhc0hhbmRsZWQsIGNvbnRleHQ6IGNvbnRleHQsIHNldmVyaXR5OiBzZXZlcml0eSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydER1cGxpY2F0ZWREZWNsYXJhdGlvbigKICAgICAgQnVpbGRlciBleGlzdGluZywgU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gZXhpc3RpbmcuaXNTeW50aGV0aWMKICAgICAgICA/IG51bGwKICAgICAgICA6IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmZpbGVVcmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgXTsKICAgIGFkZFByb2JsZW0oZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb24ud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICBjaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCwKICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVidWdFdmVudChTdHJpbmcgbmFtZSkgewogICAgLy8gcHJpbnRFdmVudCgnQm9keUJ1aWxkZXI6ICRuYW1lJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0aWNHZXQgbWFrZVN0YXRpY0dldChNZW1iZXIgcmVhZFRhcmdldCwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgU3RhdGljR2V0KHJlYWRUYXJnZXQpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB3cmFwSW5EZWZlcnJlZENoZWNrKAogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24sIFByZWZpeEJ1aWxkZXIgcHJlZml4LCBpbnQgY2hhck9mZnNldCkgewogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBjaGVjayA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgIGZvcmVzdC5jaGVja0xpYnJhcnlJc0xvYWRlZChwcmVmaXguZGVwZW5kZW5jeSkpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICByZXR1cm4gbmV3IERlZmVycmVkQ2hlY2tKdWRnbWVudChjaGVjaywgZXhwcmVzc2lvbik7CiAgfQoKICAvLy8gVE9ETyhhaGUpOiBUaGlzIG1ldGhvZCBpcyB0ZW1wb3JhcmlseSBpbXBsZW1lbnRlZC4gT25jZSB0eXBlIHByb21vdGlvbiBpcwogIC8vLyBpbmRlcGVuZGVudCBvZiBzaGFkb3cgbm9kZXMsIHJlbW92ZSB0aGlzIG1ldGhvZC4KICB2b2lkIGVudGVyVGhlbkZvclR5cGVQcm9tb3Rpb24oRXhwcmVzc2lvbiBjb25kaXRpb24pIHsKICAgIHR5cGVQcm9tb3Rlcj8uZW50ZXJUaGVuKGNvbmRpdGlvbik7CiAgfQoKICBib29sIGlzRXJyb25lb3VzTm9kZShUcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gbGlicmFyeS5sb2FkZXIuaGFuZGxlZEVycm9ycy5pc05vdEVtcHR5ICYmCiAgICAgICAgZm9yZXN0LmlzRXJyb25lb3VzTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGJ1aWxkRGFydFR5cGUoVW5yZXNvbHZlZFR5cGUgdW5yZXNvbHZlZFR5cGUsCiAgICAgIHtib29sIG5vbkluc3RhbmNlQWNjZXNzSXNFcnJvcjogZmFsc2V9KSB7CiAgICBpZiAodW5yZXNvbHZlZFR5cGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gdmFsaWRhdGVUeXBlVXNlKHVucmVzb2x2ZWRUeXBlLCBub25JbnN0YW5jZUFjY2Vzc0lzRXJyb3IpCiAgICAgICAgLmJ1aWxkZXIKICAgICAgICA/LmJ1aWxkKGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gYnVpbGREYXJ0VHlwZUFyZ3VtZW50cyhMaXN0PFVucmVzb2x2ZWRUeXBlPiB1bnJlc29sdmVkVHlwZXMpIHsKICAgIGlmICh1bnJlc29sdmVkVHlwZXMgPT0gbnVsbCkgcmV0dXJuIDxEYXJ0VHlwZT5bXTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKHVucmVzb2x2ZWRUeXBlcy5sZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdHlwZXNbaV0gPSBidWlsZERhcnRUeXBlKHVucmVzb2x2ZWRUeXBlc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdHlwZXM7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgY29uc3RydWN0b3JOYW1lRm9yRGlhZ25vc3RpY3MoU3RyaW5nIG5hbWUsCiAgICAgIHtTdHJpbmcgY2xhc3NOYW1lLCBib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgaWYgKGNsYXNzTmFtZSA9PSBudWxsKSB7CiAgICAgIENsYXNzIGNscyA9IGNsYXNzQnVpbGRlci5jbHM7CiAgICAgIGlmIChpc1N1cGVyKSB7CiAgICAgICAgY2xzID0gY2xzLnN1cGVyY2xhc3M7CiAgICAgICAgd2hpbGUgKGNscy5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgICAgIGNscyA9IGNscy5zdXBlcmNsYXNzOwogICAgICAgIH0KICAgICAgfQogICAgICBjbGFzc05hbWUgPSBjbHMubmFtZTsKICAgIH0KICAgIHJldHVybiBuYW1lLmlzRW1wdHkgPyBjbGFzc05hbWUgOiAiJGNsYXNzTmFtZS4kbmFtZSI7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBTeW50aGV0aWNFeHByZXNzaW9uKEV4cHJlc3Npb24gZGVzdWdhcmVkLCBpbnQgY2hhck9mZnNldCkgewogICAgaWYgKGxlZ2FjeU1vZGUpIHJldHVybiBkZXN1Z2FyZWQ7CiAgICByZXR1cm4gc2hhZG93LlN5bnRoZXRpY1dyYXBwZXIud3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oZGVzdWdhcmVkKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChsZWdhY3lNb2RlKSByZXR1cm4gbm9kZTsKICAgIHNoYWRvdy5TeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQgc2hhZG93Tm9kZSA9IG5vZGU7CiAgICByZXR1cm4gc2hhZG93Tm9kZS5kZXN1Z2FyZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uKEV4cHJlc3Npb24gZGVzdWdhcmVkLAogICAgICBNZW1iZXIgY29uc3RydWN0b3IsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBpZiAobGVnYWN5TW9kZSkgcmV0dXJuIGRlc3VnYXJlZDsKICAgIHJldHVybiBzaGFkb3cuU3ludGhldGljV3JhcHBlci53cmFwSW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICBkZXN1Z2FyZWQsIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBJbnZhbGlkV3JpdGUoCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBFeHByZXNzaW9uIGV4cHJlc3Npb24sIGludCBjaGFyT2Zmc2V0KSB7CiAgICBpZiAobGVnYWN5TW9kZSkgcmV0dXJuIGRlc3VnYXJlZDsKICAgIHJldHVybiBzaGFkb3cuU3ludGhldGljV3JhcHBlci53cmFwSW52YWxpZFdyaXRlKGRlc3VnYXJlZCwgZXhwcmVzc2lvbikKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gd3JhcFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uKAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IGNoYXJPZmZzZXQpIHsKICAgIGlmIChsZWdhY3lNb2RlKSByZXR1cm4gZGVzdWdhcmVkOwogICAgcmV0dXJuIHNoYWRvdy5TeW50aGV0aWNXcmFwcGVyLndyYXBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbigKICAgICAgICBkZXN1Z2FyZWQsIGFyZ3VtZW50cykKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gd3JhcFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnQoCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBib29sIGlzQ29tcG91bmQsIEV4cHJlc3Npb24gcmhzLCBpbnQgY2hhck9mZnNldCkgewogICAgaWYgKGxlZ2FjeU1vZGUpIHJldHVybiBkZXN1Z2FyZWQ7CiAgICByZXR1cm4gc2hhZG93LlN5bnRoZXRpY1dyYXBwZXIud3JhcFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnQoCiAgICAgICAgZGVzdWdhcmVkLCBpc0NvbXBvdW5kLCByaHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBFbnN1cmVMb2FkZWQgewogIHZvaWQgZW5zdXJlTG9hZGVkKE1lbWJlciBtZW1iZXIpOwogIGJvb2wgaXNMb2FkZWQoTWVtYmVyIG1lbWJlcik7Cn0KCmNsYXNzIE9wZXJhdG9yIHsKICBmaW5hbCBUb2tlbiB0b2tlbjsKICBTdHJpbmcgZ2V0IG5hbWUgPT4gdG9rZW4uc3RyaW5nVmFsdWU7CgogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBPcGVyYXRvcih0aGlzLnRva2VuLCB0aGlzLmNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAib3BlcmF0b3IoJG5hbWUpIjsKfQoKY2xhc3MgSnVtcFRhcmdldCBleHRlbmRzIEJ1aWxkZXIgewogIGZpbmFsIExpc3Q8U3RhdGVtZW50PiB1c2VycyA9IDxTdGF0ZW1lbnQ+W107CgogIGZpbmFsIEp1bXBUYXJnZXRLaW5kIGtpbmQ7CgogIGZpbmFsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyQnVpbGRlciBwYXJlbnQ7CgogIEBvdmVycmlkZQogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBKdW1wVGFyZ2V0KAogICAgICB0aGlzLmtpbmQsIHRoaXMuZnVuY3Rpb25OZXN0aW5nTGV2ZWwsIHRoaXMucGFyZW50LCB0aGlzLmNoYXJPZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBVcmkgZ2V0IGZpbGVVcmkgPT4gcGFyZW50LmZpbGVVcmk7CgogIGJvb2wgZ2V0IGlzQnJlYWtUYXJnZXQgPT4ga2luZCA9PSBKdW1wVGFyZ2V0S2luZC5CcmVhazsKCiAgYm9vbCBnZXQgaXNDb250aW51ZVRhcmdldCA9PiBraW5kID09IEp1bXBUYXJnZXRLaW5kLkNvbnRpbnVlOwoKICBib29sIGdldCBpc0dvdG9UYXJnZXQgPT4ga2luZCA9PSBKdW1wVGFyZ2V0S2luZC5Hb3RvOwoKICBib29sIGdldCBoYXNVc2VycyA9PiB1c2Vycy5pc05vdEVtcHR5OwoKICB2b2lkIGFkZEJyZWFrKFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIGFzc2VydChpc0JyZWFrVGFyZ2V0KTsKICAgIHVzZXJzLmFkZChzdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCBhZGRDb250aW51ZShTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBhc3NlcnQoaXNDb250aW51ZVRhcmdldCk7CiAgICB1c2Vycy5hZGQoc3RhdGVtZW50KTsKICB9CgogIHZvaWQgYWRkR290byhTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBhc3NlcnQoaXNHb3RvVGFyZ2V0KTsKICAgIHVzZXJzLmFkZChzdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCByZXNvbHZlQnJlYWtzKEZvcmVzdCBmb3Jlc3QsIFN0YXRlbWVudCB0YXJnZXQpIHsKICAgIGFzc2VydChpc0JyZWFrVGFyZ2V0KTsKICAgIGZvciAoQnJlYWtTdGF0ZW1lbnQgdXNlciBpbiB1c2VycykgewogICAgICB1c2VyLnRhcmdldCA9IHRhcmdldDsKICAgIH0KICAgIHVzZXJzLmNsZWFyKCk7CiAgfQoKICB2b2lkIHJlc29sdmVDb250aW51ZXMoRm9yZXN0IGZvcmVzdCwgU3RhdGVtZW50IHRhcmdldCkgewogICAgYXNzZXJ0KGlzQ29udGludWVUYXJnZXQpOwogICAgZm9yIChCcmVha1N0YXRlbWVudCB1c2VyIGluIHVzZXJzKSB7CiAgICAgIHVzZXIudGFyZ2V0ID0gdGFyZ2V0OwogICAgfQogICAgdXNlcnMuY2xlYXIoKTsKICB9CgogIHZvaWQgcmVzb2x2ZUdvdG9zKEZvcmVzdCBmb3Jlc3QsIFN3aXRjaENhc2UgdGFyZ2V0KSB7CiAgICBhc3NlcnQoaXNHb3RvVGFyZ2V0KTsKICAgIGZvciAoQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgdXNlciBpbiB1c2VycykgewogICAgICB1c2VyLnRhcmdldCA9IHRhcmdldDsKICAgIH0KICAgIHVzZXJzLmNsZWFyKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+ICI8anVtcC10YXJnZXQ+IjsKfQoKY2xhc3MgTGFiZWxUYXJnZXQgZXh0ZW5kcyBCdWlsZGVyIGltcGxlbWVudHMgSnVtcFRhcmdldCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyQnVpbGRlciBwYXJlbnQ7CgogIGZpbmFsIEp1bXBUYXJnZXQgYnJlYWtUYXJnZXQ7CgogIGZpbmFsIEp1bXBUYXJnZXQgY29udGludWVUYXJnZXQ7CgogIGZpbmFsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIExhYmVsVGFyZ2V0KHRoaXMucGFyZW50LCB0aGlzLmZ1bmN0aW9uTmVzdGluZ0xldmVsLCB0aGlzLmNoYXJPZmZzZXQpCiAgICAgIDogYnJlYWtUYXJnZXQgPSBuZXcgSnVtcFRhcmdldCgKICAgICAgICAgICAgSnVtcFRhcmdldEtpbmQuQnJlYWssIGZ1bmN0aW9uTmVzdGluZ0xldmVsLCBwYXJlbnQsIGNoYXJPZmZzZXQpLAogICAgICAgIGNvbnRpbnVlVGFyZ2V0ID0gbmV3IEp1bXBUYXJnZXQoCiAgICAgICAgICAgIEp1bXBUYXJnZXRLaW5kLkNvbnRpbnVlLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCwgcGFyZW50LCBjaGFyT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgVXJpIGdldCBmaWxlVXJpID0+IHBhcmVudC5maWxlVXJpOwoKICBib29sIGdldCBoYXNVc2VycyA9PiBicmVha1RhcmdldC5oYXNVc2VycyB8fCBjb250aW51ZVRhcmdldC5oYXNVc2VyczsKCiAgTGlzdDxTdGF0ZW1lbnQ+IGdldCB1c2VycyA9PiB1bnN1cHBvcnRlZCgidXNlcnMiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKCiAgSnVtcFRhcmdldEtpbmQgZ2V0IGtpbmQgPT4gdW5zdXBwb3J0ZWQoImtpbmQiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKCiAgYm9vbCBnZXQgaXNCcmVha1RhcmdldCA9PiB0cnVlOwoKICBib29sIGdldCBpc0NvbnRpbnVlVGFyZ2V0ID0+IHRydWU7CgogIGJvb2wgZ2V0IGlzR290b1RhcmdldCA9PiBmYWxzZTsKCiAgdm9pZCBhZGRCcmVhayhTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBicmVha1RhcmdldC5hZGRCcmVhayhzdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCBhZGRDb250aW51ZShTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBjb250aW51ZVRhcmdldC5hZGRDb250aW51ZShzdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCBhZGRHb3RvKFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIHVuc3VwcG9ydGVkKCJhZGRHb3RvIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICB2b2lkIHJlc29sdmVCcmVha3MoRm9yZXN0IGZvcmVzdCwgU3RhdGVtZW50IHRhcmdldCkgewogICAgYnJlYWtUYXJnZXQucmVzb2x2ZUJyZWFrcyhmb3Jlc3QsIHRhcmdldCk7CiAgfQoKICB2b2lkIHJlc29sdmVDb250aW51ZXMoRm9yZXN0IGZvcmVzdCwgU3RhdGVtZW50IHRhcmdldCkgewogICAgY29udGludWVUYXJnZXQucmVzb2x2ZUNvbnRpbnVlcyhmb3Jlc3QsIHRhcmdldCk7CiAgfQoKICB2b2lkIHJlc29sdmVHb3RvcyhGb3Jlc3QgZm9yZXN0LCBTd2l0Y2hDYXNlIHRhcmdldCkgewogICAgdW5zdXBwb3J0ZWQoInJlc29sdmVHb3RvcyIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiAiPGxhYmVsLXRhcmdldD4iOwp9CgpjbGFzcyBGb3JtYWxQYXJhbWV0ZXJzIHsKICBmaW5hbCBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IHBhcmFtZXRlcnM7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgZmluYWwgaW50IGxlbmd0aDsKICBmaW5hbCBVcmkgdXJpOwoKICBGb3JtYWxQYXJhbWV0ZXJzKHRoaXMucGFyYW1ldGVycywgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmxlbmd0aCwgdGhpcy51cmkpIHsKICAgIGlmIChwYXJhbWV0ZXJzPy5pc0VtcHR5ID8/IGZhbHNlKSB7CiAgICAgIHRocm93ICJFbXB0eSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBudWxsIjsKICAgIH0KICB9CgogIEZ1bmN0aW9uTm9kZSBidWlsZEZ1bmN0aW9uTm9kZSgKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwKICAgICAgVW5yZXNvbHZlZFR5cGUgcmV0dXJuVHlwZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNb2RpZmllciwKICAgICAgU3RhdGVtZW50IGJvZHksCiAgICAgIGludCBmaWxlRW5kT2Zmc2V0KSB7CiAgICBGdW5jdGlvblR5cGUgdHlwZSA9CiAgICAgICAgdG9GdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMpLmJ1aWxkZXIuYnVpbGQobGlicmFyeSk7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gPFZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycyA9IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgcGFyYW1ldGVyIGluIHBhcmFtZXRlcnMpIHsKICAgICAgICBpZiAocGFyYW1ldGVyLmlzTmFtZWQpIHsKICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyLnRhcmdldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIudGFyZ2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbmFtZWRQYXJhbWV0ZXJzLnNvcnQoKFZhcmlhYmxlRGVjbGFyYXRpb24gYSwgVmFyaWFibGVEZWNsYXJhdGlvbiBiKSB7CiAgICAgICAgcmV0dXJuIGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZUp1ZGdtZW50KGJvZHksCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICByZXR1cm5UeXBlOiB0eXBlLnJldHVyblR5cGUsCiAgICAgICAgYXN5bmNNYXJrZXI6IGFzeW5jTW9kaWZpZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQKICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gZmlsZUVuZE9mZnNldDsKICB9CgogIFVucmVzb2x2ZWRUeXBlIHRvRnVuY3Rpb25UeXBlKFVucmVzb2x2ZWRUeXBlIHJldHVyblR5cGUsCiAgICAgIFtMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVQYXJhbWV0ZXJzXSkgewogICAgcmV0dXJuIG5ldyBVbnJlc29sdmVkVHlwZSgKICAgICAgICBuZXcgRnVuY3Rpb25UeXBlQnVpbGRlcigKICAgICAgICAgICAgcmV0dXJuVHlwZT8uYnVpbGRlciwgdHlwZVBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpLAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgdXJpKTsKICB9CgogIFNjb3BlIGNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJTY29wZSgKICAgICAgU2NvcGUgcGFyZW50LCBCdWlsZGVyIGRlY2xhcmF0aW9uLCBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlcikgewogICAgaWYgKHBhcmFtZXRlcnMgPT0gbnVsbCkgcmV0dXJuIHBhcmVudDsKICAgIGFzc2VydChwYXJhbWV0ZXJzLmlzTm90RW1wdHkpOwogICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbG9jYWwgPSA8U3RyaW5nLCBCdWlsZGVyPnt9OwoKICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgaW4gcGFyYW1ldGVycykgewogICAgICBCdWlsZGVyIGV4aXN0aW5nID0gbG9jYWxbcGFyYW1ldGVyLm5hbWVdOwogICAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICAgIGhlbHBlci5yZXBvcnREdXBsaWNhdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICAgIGV4aXN0aW5nLCBwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLmNoYXJPZmZzZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIGxvY2FsW3BhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBTY29wZShsb2NhbCwgbnVsbCwgcGFyZW50LCAiZm9ybWFscyIsIGlzTW9kaWZpYWJsZTogZmFsc2UpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJGb3JtYWxQYXJhbWV0ZXJzKCRwYXJhbWV0ZXJzLCAkY2hhck9mZnNldCwgJHVyaSkiOwogIH0KfQoKLy8vIFJldHVybnMgYSBibG9jayBsaWtlIHRoaXM6Ci8vLwovLy8gICAgIHsKLy8vICAgICAgIHN0YXRlbWVudDsKLy8vICAgICAgIGJvZHk7Ci8vLyAgICAgfQovLy8KLy8vIElmIFtib2R5XSBpcyBhIFtCbG9ja10sIGl0J3MgcmV0dXJuZWQgd2l0aCBbc3RhdGVtZW50XSBwcmVwZW5kZWQgdG8gaXQuCkJsb2NrIGNvbWJpbmVTdGF0ZW1lbnRzKFN0YXRlbWVudCBzdGF0ZW1lbnQsIFN0YXRlbWVudCBib2R5KSB7CiAgaWYgKGJvZHkgaXMgQmxvY2spIHsKICAgIGJvZHkuc3RhdGVtZW50cy5pbnNlcnQoMCwgc3RhdGVtZW50KTsKICAgIHN0YXRlbWVudC5wYXJlbnQgPSBib2R5OwogICAgcmV0dXJuIGJvZHk7CiAgfSBlbHNlIHsKICAgIHJldHVybiBuZXcgQmxvY2tKdWRnbWVudCg8U3RhdGVtZW50PltzdGF0ZW1lbnQsIGJvZHldKQogICAgICAuLmZpbGVPZmZzZXQgPSBzdGF0ZW1lbnQuZmlsZU9mZnNldDsKICB9Cn0KClN0cmluZyBkZWJ1Z05hbWUoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIG5hbWUsIFtTdHJpbmcgcHJlZml4XSkgewogIFN0cmluZyByZXN1bHQgPSBuYW1lLmlzRW1wdHkgPyBjbGFzc05hbWUgOiAiJGNsYXNzTmFtZS4kbmFtZSI7CiAgcmV0dXJuIHByZWZpeCA9PSBudWxsID8gcmVzdWx0IDogIiRwcmVmaXgucmVzdWx0IjsKfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBpcyBhIGJpdCBhZCBob2MuIENhbGwgc2l0ZXMgc2hvdWxkIGtub3cgd2hhdCBraW5kCi8vIG9mIG9iamVjdHMgY2FuIGJlIGFudGljaXBhdGVkIGFuZCBoYW5kbGUgdGhlc2UgZGlyZWN0bHkuClN0cmluZyBnZXROb2RlTmFtZShPYmplY3Qgbm9kZSkgewogIGlmIChub2RlIGlzIElkZW50aWZpZXIpIHsKICAgIHJldHVybiBub2RlLm5hbWU7CiAgfSBlbHNlIGlmIChub2RlIGlzIEJ1aWxkZXIpIHsKICAgIHJldHVybiBub2RlLmZ1bGxOYW1lRm9yRXJyb3JzOwogIH0gZWxzZSBpZiAobm9kZSBpcyBRdWFsaWZpZWROYW1lKSB7CiAgICByZXR1cm4gZmxhdHRlbk5hbWUobm9kZSwgbm9kZS5jaGFyT2Zmc2V0LCBudWxsKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHVuaGFuZGxlZCgiJHtub2RlLnJ1bnRpbWVUeXBlfSIsICJnZXROb2RlTmFtZSIsIC0xLCBudWxsKTsKICB9Cn0KCkFzeW5jTWFya2VyIGFzeW5jTWFya2VyRnJvbVRva2VucyhUb2tlbiBhc3luY1Rva2VuLCBUb2tlbiBzdGFyVG9rZW4pIHsKICBpZiAoYXN5bmNUb2tlbiA9PSBudWxsIHx8IGlkZW50aWNhbChhc3luY1Rva2VuLnN0cmluZ1ZhbHVlLCAic3luYyIpKSB7CiAgICBpZiAoc3RhclRva2VuID09IG51bGwpIHsKICAgICAgcmV0dXJuIEFzeW5jTWFy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HAYTBAE7HikcBhMEATgaMhwGEwQBDDMCAToMHgEgASMBIgEMGAFHJk0pUAEMJQFIAUoBRwEiASUBIgEnJQQBKisEASYxBAE4LwQBOzUEATg2BAEMNAIBGTEYFBEBTigvBgQBIiQhMCEWGxhLTkkePSExETYKCEwpCgYqLTQqPSUkICcEATs0HyE+FA4EASVNKyM2ATswHiw9DysIBksEARY/BAIBHwQKFRAKBEw/FyodEQs7KwQCAUNBNQIBTzwiHBYgIyY1C0YEAgFHSR0fDTUjBjsdIA01JAYLQSYEAgFPDw4PEgElAScCATRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0PnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9pbmNyZW1lbnRhbF9jb21waWxlci5kYXJ0wACbLy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmluY3JlbWVudGFsX2NvbXBpbGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JyBzaG93IEJpbmFyeUJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydCcKICAgIHNob3cKICAgICAgICBCaW5hcnlCdWlsZGVyLAogICAgICAgIENhbm9uaWNhbE5hbWVFcnJvciwKICAgICAgICBDYW5vbmljYWxOYW1lU2RrRXJyb3IsCiAgICAgICAgSW52YWxpZEtlcm5lbFZlcnNpb25FcnJvcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnCiAgICBzaG93IENsYXNzSGllcmFyY2h5LCBDbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzcywKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaWJyYXJ5RGVwZW5kZW5jeSwKICAgICAgICBMaWJyYXJ5UGFydCwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFJldHVyblN0YXRlbWVudCwKICAgICAgICBTb3VyY2UsCiAgICAgICAgU3VwZXJ0eXBlLAogICAgICAgIFRyZWVOb2RlLAogICAgICAgIFR5cGVQYXJhbWV0ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JyBhcyBrZXJuZWwgc2hvdyBDb21iaW5hdG9yOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2ZpbGVfc3lzdGVtLmRhcnQnIHNob3cgRmlsZVN5c3RlbUVudGl0eTsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9pbmNyZW1lbnRhbF9rZXJuZWxfZ2VuZXJhdG9yLmRhcnQnCiAgICBzaG93IEluY3JlbWVudGFsS2VybmVsR2VuZXJhdG9yLCBpc0xlZ2FsSWRlbnRpZmllcjsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9tZW1vcnlfZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBNZW1vcnlGaWxlU3lzdGVtOwoKaW1wb3J0ICdidWlsZGVyL2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlcl9ncmFwaC5kYXJ0JyBzaG93IEJ1aWxkZXJHcmFwaDsKCmltcG9ydCAnY29tYmluYXRvci5kYXJ0JyBzaG93IENvbWJpbmF0b3I7CgppbXBvcnQgJ2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgppbXBvcnQgJ2RpbGwvZGlsbF9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ2RpbGwvZGlsbF90YXJnZXQuZGFydCcgc2hvdyBEaWxsVGFyZ2V0OwoKaW1wb3J0ICd1dGlsL2Vycm9yX3JlcG9ydGVyX2ZpbGVfY29waWVyLmRhcnQnIHNob3cgc2F2ZUFzR3ppcDsKCmltcG9ydCAnZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uLAogICAgICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCwKICAgICAgICB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXAsCiAgICAgICAgdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSwKICAgICAgICB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wOwoKaW1wb3J0ICdoeWJyaWRfZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBIeWJyaWRGaWxlU3lzdGVtOwoKaW1wb3J0ICdrZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeUJ1aWxkZXI7CgppbXBvcnQgJ2tlcm5lbC9rZXJuZWxfc2hhZG93X2FzdC5kYXJ0JyBzaG93IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudDsKCmltcG9ydCAna2VybmVsL2tlcm5lbF90YXJnZXQuZGFydCcgc2hvdyBLZXJuZWxUYXJnZXQ7CgppbXBvcnQgJ2xpYnJhcnlfZ3JhcGguZGFydCcgc2hvdyBMaWJyYXJ5R3JhcGg7CgppbXBvcnQgJ21lc3NhZ2VzLmRhcnQnIHNob3cgTWVzc2FnZTsKCmltcG9ydCAnc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAndGlja2VyLmRhcnQnIHNob3cgVGlja2VyOwoKaW1wb3J0ICd1cmlfdHJhbnNsYXRvci5kYXJ0JyBzaG93IFVyaVRyYW5zbGF0b3I7CgpjbGFzcyBJbmNyZW1lbnRhbENvbXBpbGVyIGltcGxlbWVudHMgSW5jcmVtZW50YWxLZXJuZWxHZW5lcmF0b3IgewogIGZpbmFsIENvbXBpbGVyQ29udGV4dCBjb250ZXh0OwoKICBmaW5hbCBUaWNrZXIgdGlja2VyOwoKICBmaW5hbCBib29sIG91dGxpbmVPbmx5OwogIGJvb2wgdHJhY2tOZWVkZWREaWxsTGlicmFyaWVzID0gZmFsc2U7CiAgU2V0PExpYnJhcnk+IG5lZWRlZERpbGxMaWJyYXJpZXM7CgogIFNldDxVcmk+IGludmFsaWRhdGVkVXJpcyA9IG5ldyBTZXQ8VXJpPigpOwoKICBEaWxsVGFyZ2V0IGRpbGxMb2FkZWREYXRhOwogIExpc3Q8TGlicmFyeUJ1aWxkZXI+IHBsYXRmb3JtQnVpbGRlcnM7CiAgTWFwPFVyaSwgTGlicmFyeUJ1aWxkZXI+IHVzZXJCdWlsZGVyczsKICBmaW5hbCBVcmkgaW5pdGlhbGl6ZUZyb21EaWxsVXJpOwogIGZpbmFsIENvbXBvbmVudCBjb21wb25lbnRUb0luaXRpYWxpemVGcm9tOwogIGJvb2wgaW5pdGlhbGl6ZWRGcm9tRGlsbCA9IGZhbHNlOwogIFVyaSBwcmV2aW91c1BhY2thZ2VzVXJpOwogIE1hcDxTdHJpbmcsIFVyaT4gcHJldmlvdXNQYWNrYWdlc01hcDsKICBNYXA8U3RyaW5nLCBVcmk+IGN1cnJlbnRQYWNrYWdlc01hcDsKICBib29sIGhhc1RvQ2hlY2tQYWNrYWdlVXJpcyA9IGZhbHNlOwogIE1hcDxVcmksIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbj4+IHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zID0KICAgICAgbmV3IE1hcDxVcmksIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbj4+KCk7CiAgTGlzdDxDb21wb25lbnQ+IG1vZHVsZXNUb0xvYWQ7CgogIHN0YXRpYyBmaW5hbCBVcmkgZGVidWdFeHByVXJpID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICJvcmctZGFydGxhbmctZGVidWciLCBwYXRoOiAic3ludGhldGljX2RlYnVnX2V4cHJlc3Npb24iKTsKCiAgS2VybmVsVGFyZ2V0IHVzZXJDb2RlOwoKICBJbmNyZW1lbnRhbENvbXBpbGVyLmZyb21Db21wb25lbnQoCiAgICAgIHRoaXMuY29udGV4dCwgQ29tcG9uZW50IHRoaXMuY29tcG9uZW50VG9Jbml0aWFsaXplRnJvbSwKICAgICAgW2Jvb2wgb3V0bGluZU9ubHldKQogICAgICA6IHRpY2tlciA9IGNvbnRleHQub3B0aW9ucy50aWNrZXIsCiAgICAgICAgaW5pdGlhbGl6ZUZyb21EaWxsVXJpID0gbnVsbCwKICAgICAgICB0aGlzLm91dGxpbmVPbmx5ID0gb3V0bGluZU9ubHkgPz8gZmFsc2U7CgogIEluY3JlbWVudGFsQ29tcGlsZXIodGhpcy5jb250ZXh0LAogICAgICBbdGhpcy5pbml0aWFsaXplRnJvbURpbGxVcmksIGJvb2wgb3V0bGluZU9ubHldKQogICAgICA6IHRpY2tlciA9IGNvbnRleHQub3B0aW9ucy50aWNrZXIsCiAgICAgICAgY29tcG9uZW50VG9Jbml0aWFsaXplRnJvbSA9IG51bGwsCiAgICAgICAgdGhpcy5vdXRsaW5lT25seSA9IG91dGxpbmVPbmx5ID8/IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Q29tcG9uZW50PiBjb21wdXRlRGVsdGEoCiAgICAgIHtMaXN0PFVyaT4gZW50cnlQb2ludHMsIGJvb2wgZnVsbENvbXBvbmVudDogZmFsc2V9KSBhc3luYyB7CiAgICB0aWNrZXIucmVzZXQoKTsKICAgIGVudHJ5UG9pbnRzID8/PSBjb250ZXh0Lm9wdGlvbnMuaW5wdXRzOwogICAgcmV0dXJuIGNvbnRleHQucnVuSW5Db250ZXh0PENvbXBvbmVudD4oKENvbXBpbGVyQ29udGV4dCBjKSBhc3luYyB7CiAgICAgIEluY3JlbWVudGFsQ29tcGlsZXJEYXRhIGRhdGEgPSBuZXcgSW5jcmVtZW50YWxDb21waWxlckRhdGEoKTsKCiAgICAgIGJvb2wgYnlwYXNzQ2FjaGUgPSBmYWxzZTsKICAgICAgaWYgKCFpZGVudGljYWwocHJldmlvdXNQYWNrYWdlc1VyaSwgYy5vcHRpb25zLnBhY2thZ2VzVXJpUmF3KSkgewogICAgICAgIHByZXZpb3VzUGFja2FnZXNVcmkgPSBjLm9wdGlvbnMucGFja2FnZXNVcmlSYXc7CiAgICAgICAgYnlwYXNzQ2FjaGUgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKHRoaXMuaW52YWxpZGF0ZWRVcmlzLmNvbnRhaW5zKGMub3B0aW9ucy5wYWNrYWdlc1VyaSkpIHsKICAgICAgICBieXBhc3NDYWNoZSA9IHRydWU7CiAgICAgIH0KICAgICAgaGFzVG9DaGVja1BhY2thZ2VVcmlzID0gaGFzVG9DaGVja1BhY2thZ2VVcmlzIHx8IGJ5cGFzc0NhY2hlOwogICAgICBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IgPQogICAgICAgICAgYXdhaXQgYy5vcHRpb25zLmdldFVyaVRyYW5zbGF0b3IoYnlwYXNzQ2FjaGU6IGJ5cGFzc0NhY2hlKTsKICAgICAgcHJldmlvdXNQYWNrYWdlc01hcCA9IGN1cnJlbnRQYWNrYWdlc01hcDsKICAgICAgY3VycmVudFBhY2thZ2VzTWFwID0gdXJpVHJhbnNsYXRvci5wYWNrYWdlcy5hc01hcCgpOwogICAgICB0aWNrZXIubG9nTXMoIlJlYWQgcGFja2FnZXMgZmlsZSIpOwoKICAgICAgaWYgKGRpbGxMb2FkZWREYXRhID09IG51bGwpIHsKICAgICAgICBpbnQgYnl0ZXNMZW5ndGggPSAwOwogICAgICAgIGlmIChjb21wb25lbnRUb0luaXRpYWxpemVGcm9tICE9IG51bGwpIHsKICAgICAgICAgIC8vIElmIGluaXRpYWxpemluZyBmcm9tIGEgY29tcG9uZW50IGl0IGhhcyB0byBpbmNsdWRlIHRoZSBzZGssCiAgICAgICAgICAvLyBzbyB3ZSBleHBsaWNpdGx5IGRvbid0IGxvYWQgaXQgaGVyZS4KICAgICAgICAgIGluaXRpYWxpemVGcm9tQ29tcG9uZW50KHVyaVRyYW5zbGF0b3IsIGMsIGRhdGEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBMaXN0PGludD4gc3VtbWFyeUJ5dGVzID0gYXdhaXQgYy5vcHRpb25zLmxvYWRTZGtTdW1tYXJ5Qnl0ZXMoKTsKICAgICAgICAgIGJ5dGVzTGVuZ3RoID0gcHJlcGFyZVN1bW1hcnkoc3VtbWFyeUJ5dGVzLCB1cmlUcmFuc2xhdG9yLCBjLCBkYXRhKTsKICAgICAgICAgIGlmIChpbml0aWFsaXplRnJvbURpbGxVcmkgIT0gbnVsbCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGJ5dGVzTGVuZ3RoICs9IGF3YWl0IGluaXRpYWxpemVGcm9tRGlsbCh1cmlUcmFuc2xhdG9yLCBjLCBkYXRhKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSwgc3QpIHsKICAgICAgICAgICAgICAvLyBXZSBtaWdodCBoYXZlIGxvYWRlZCB4IG91dCBvZiB5IGxpYnJhcmllcyBpbnRvIHRoZSBjb21wb25lbnQuCiAgICAgICAgICAgICAgLy8gVG8gYXZvaWQgYW55IHVuZm9yZXNlZW4gcHJvYmxlbXMgc3RhcnQgb3Zlci4KICAgICAgICAgICAgICBieXRlc0xlbmd0aCA9CiAgICAgICAgICAgICAgICAgIHByZXBhcmVTdW1tYXJ5KHN1bW1hcnlCeXRlcywgdXJpVHJhbnNsYXRvciwgYywgZGF0YSk7CgogICAgICAgICAgICAgIGlmIChlIGlzIEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3IgfHwKICAgICAgICAgICAgICAgICAgZSBpcyBQYWNrYWdlQ2hhbmdlZEVycm9yIHx8CiAgICAgICAgICAgICAgICAgIGUgaXMgQ2Fub25pY2FsTmFtZVNka0Vycm9yKSB7CiAgICAgICAgICAgICAgICAvLyBEb24ndCByZXBvcnQgYW55IHdhcm5pbmcuCiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIFVyaSBnekluaXRpYWxpemVkRnJvbTsKICAgICAgICAgICAgICAgIGlmIChjLm9wdGlvbnMud3JpdGVGaWxlT25DcmFzaFJlcG9ydCkgewogICAgICAgICAgICAgICAgICBnekluaXRpYWxpemVkRnJvbSA9IHNhdmVBc0d6aXAoCiAgICAgICAgICAgICAgICAgICAgICBkYXRhLmluaXRpYWxpemF0aW9uQnl0ZXMsICJpbml0aWFsaXplX2Zyb20uZGlsbCIpOwogICAgICAgICAgICAgICAgICByZWNvcmRUZW1wb3JhcnlGaWxlRm9yVGVzdGluZyhnekluaXRpYWxpemVkRnJvbSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZSBpcyBDYW5vbmljYWxOYW1lRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZ3pJbml0aWFsaXplZEZyb20gIT0gbnVsbAogICAgICAgICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbml0aWFsaXplRnJvbURpbGxVcmkudG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3pJbml0aWFsaXplZEZyb20pCiAgICAgICAgICAgICAgICAgICAgICA6IHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcAogICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGluaXRpYWxpemVGcm9tRGlsbFVyaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyCiAgICAgICAgICAgICAgICAgICAgICAuYWRkUHJvYmxlbShtZXNzYWdlLCBUcmVlTm9kZS5ub09mZnNldCwgMSwgbnVsbCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAvLyBVbmtub3duIGVycm9yOiBSZXBvcnQgcHJvYmxlbSBhcyBzdWNoLgogICAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBnekluaXRpYWxpemVkRnJvbSAhPSBudWxsCiAgICAgICAgICAgICAgICAgICAgICA/IHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW0ud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplRnJvbURpbGxVcmkudG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiJGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICIkc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGd6SW5pdGlhbGl6ZWRGcm9tKQogICAgICAgICAgICAgICAgICAgICAgOiB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wCiAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVGcm9tRGlsbFVyaS50b1N0cmluZygpLCAiJGUiLCAiJHN0Iik7CiAgICAgICAgICAgICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlcgogICAgICAgICAgICAgICAgICAgICAgLmFkZFByb2JsZW0obWVzc2FnZSwgVHJlZU5vZGUubm9PZmZzZXQsIDEsIG51bGwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhcHBlbmRMaWJyYXJpZXMoZGF0YSwgYnl0ZXNMZW5ndGgpOwoKICAgICAgICBhd2FpdCBkaWxsTG9hZGVkRGF0YS5idWlsZE91dGxpbmVzKCk7CiAgICAgICAgdXNlckJ1aWxkZXJzID0gPFVyaSwgTGlicmFyeUJ1aWxkZXI+e307CiAgICAgICAgcGxhdGZvcm1CdWlsZGVycyA9IDxMaWJyYXJ5QnVpbGRlcj5bXTsKICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMuZm9yRWFjaCgodXJpLCBidWlsZGVyKSB7CiAgICAgICAgICBpZiAoYnVpbGRlci51cmkuc2NoZW1lID09ICJkYXJ0IikgewogICAgICAgICAgICBwbGF0Zm9ybUJ1aWxkZXJzLmFkZChidWlsZGVyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVzZXJCdWlsZGVyc1t1cmldID0gYnVpbGRlcjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodXNlckJ1aWxkZXJzLmlzRW1wdHkpIHVzZXJCdWlsZGVycyA9IG51bGw7CiAgICAgIH0KICAgICAgZGF0YS5pbml0aWFsaXphdGlvbkJ5dGVzID0gbnVsbDsKCiAgICAgIFNldDxVcmk+IGludmFsaWRhdGVkVXJpcyA9IHRoaXMuaW52YWxpZGF0ZWRVcmlzLnRvU2V0KCk7CgogICAgICBpbnZhbGlkYXRlTm90S2VwdFVzZXJCdWlsZGVycyhpbnZhbGlkYXRlZFVyaXMpOwoKICAgICAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5ID0gdXNlckNvZGU/LmxvYWRlcj8uaGllcmFyY2h5OwogICAgICBTZXQ8TGlicmFyeUJ1aWxkZXI+IG5vdFJldXNlZExpYnJhcmllcyA9IG5ldyBTZXQ8TGlicmFyeUJ1aWxkZXI+KCk7CiAgICAgIExpc3Q8TGlicmFyeUJ1aWxkZXI+IHJldXNlZExpYnJhcmllcyA9IGNvbXB1dGVSZXVzZWRMaWJyYXJpZXMoCiAgICAgICAgICBpbnZhbGlkYXRlZFVyaXMsIHVyaVRyYW5zbGF0b3IsCiAgICAgICAgICBub3RSZXVzZWQ6IG5vdFJldXNlZExpYnJhcmllcyk7CgogICAgICBib29sIHJlbW92ZWREaWxsQnVpbGRlcnMgPSBmYWxzZTsKICAgICAgZm9yIChMaWJyYXJ5QnVpbGRlciBidWlsZGVyIGluIG5vdFJldXNlZExpYnJhcmllcykgewogICAgICAgIENvbXBpbGVyQ29udGV4dC5jdXJyZW50LnVyaVRvU291cmNlLnJlbW92ZShidWlsZGVyLmZpbGVVcmkpOwoKICAgICAgICBMaWJyYXJ5QnVpbGRlciBkaWxsQnVpbGRlciA9CiAgICAgICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5yZW1vdmUoYnVpbGRlci51cmkpOwogICAgICAgIGlmIChkaWxsQnVpbGRlciAhPSBudWxsKSB7CiAgICAgICAgICByZW1vdmVkRGlsbEJ1aWxkZXJzID0gdHJ1ZTsKICAgICAgICAgIHVzZXJCdWlsZGVycz8ucmVtb3ZlKGJ1aWxkZXIudXJpKTsKICAgICAgICB9CgogICAgICAgIC8vIFJlbW92ZSBjb21wb25lbnQgcHJvYmxlbXMgZm9yIGxpYnJhcmllcyB3ZSBkb24ndCByZXVzZS4KICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMuaXNOb3RFbXB0eSkgewogICAgICAgICAgTGlicmFyeSBsaWIgPSBidWlsZGVyLnRhcmdldDsKICAgICAgICAgIHJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMobGliLCB1cmlUcmFuc2xhdG9yKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChyZW1vdmVkRGlsbEJ1aWxkZXJzKSB7CiAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmxpYnJhcmllcy5jbGVhcigpOwogICAgICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgYnVpbGRlciBpbiBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIubGlicmFyaWVzLmFkZChidWlsZGVyLnRhcmdldCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoaGFzVG9DaGVja1BhY2thZ2VVcmlzKSB7CiAgICAgICAgLy8gVGhlIHBhY2thZ2UgZmlsZSB3YXMgY2hhbmdlZC4KICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGRpbGwgbG9hZGVyIGlzIG9uIHRoZSBzYW1lIHBhZ2UuCiAgICAgICAgRGlsbFRhcmdldCBvbGREaWxsTG9hZGVkRGF0YSA9IGRpbGxMb2FkZWREYXRhOwogICAgICAgIGRpbGxMb2FkZWREYXRhID0KICAgICAgICAgICAgbmV3IERpbGxUYXJnZXQodGlja2VyLCB1cmlUcmFuc2xhdG9yLCBjLm9wdGlvbnMudGFyZ2V0KTsKICAgICAgICBmb3IgKERpbGxMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5CiAgICAgICAgICAgIGluIG9sZERpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy52YWx1ZXMpIHsKICAgICAgICAgIGxpYnJhcnkubG9hZGVyID0gZGlsbExvYWRlZERhdGEubG9hZGVyOwogICAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmJ1aWxkZXJzW2xpYnJhcnkudXJpXSA9IGxpYnJhcnk7CiAgICAgICAgICBpZiAobGlicmFyeS51cmkuc2NoZW1lID09ICJkYXJ0IiAmJiBsaWJyYXJ5LnVyaS5wYXRoID09ICJjb3JlIikgewogICAgICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuY29yZUxpYnJhcnkgPSBsaWJyYXJ5OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuZmlyc3QgPSBvbGREaWxsTG9hZGVkRGF0YS5sb2FkZXIuZmlyc3Q7CiAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmxpYnJhcmllcwogICAgICAgICAgICAuYWRkQWxsKG9sZERpbGxMb2FkZWREYXRhLmxvYWRlci5saWJyYXJpZXMpOwogICAgICB9CgogICAgICBpZiAoaGllcmFyY2h5ICE9IG51bGwpIHsKICAgICAgICBMaXN0PExpYnJhcnk+IHJlbW92ZWRMaWJyYXJpZXMgPSBuZXcgTGlzdDxMaWJyYXJ5PigpOwogICAgICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgYnVpbGRlciBpbiBub3RSZXVzZWRMaWJyYXJpZXMpIHsKICAgICAgICAgIExpYnJhcnkgbGliID0gYnVpbGRlci50YXJnZXQ7CiAgICAgICAgICByZW1vdmVkTGlicmFyaWVzLmFkZChsaWIpOwogICAgICAgIH0KICAgICAgICBoaWVyYXJjaHkuYXBwbHlUcmVlQ2hhbmdlcyhyZW1vdmVkTGlicmFyaWVzLCBjb25zdCBbXSk7CiAgICAgIH0KICAgICAgbm90UmV1c2VkTGlicmFyaWVzID0gbnVsbDsKCiAgICAgIGlmICh1c2VyQ29kZSAhPSBudWxsKSB7CiAgICAgICAgdGlja2VyLmxvZ01zKCJEZWNpZGVkIHRvIHJldXNlICR7cmV1c2VkTGlicmFyaWVzLmxlbmd0aH0iCiAgICAgICAgICAgICIgb2YgJHt1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnMubGVuZ3RofSBsaWJyYXJpZXMiKTsKICAgICAgfQoKICAgICAgYXdhaXQgbG9hZEVuc3VyZUxvYWRlZENvbXBvbmVudHMocmV1c2VkTGlicmFyaWVzKTsKCiAgICAgIEtlcm5lbFRhcmdldCB1c2VyQ29kZU9sZCA9IHVzZXJDb2RlOwogICAgICB1c2VyQ29kZSA9IG5ldyBLZXJuZWxUYXJnZXQoCiAgICAgICAgICBuZXcgSHlicmlkRmlsZVN5c3RlbSgKICAgICAgICAgICAgICBuZXcgTWVtb3J5RmlsZVN5c3RlbSgKICAgICAgICAgICAgICAgICAgbmV3IFVyaShzY2hlbWU6ICJvcmctZGFydGxhbmctZGVidWciLCBwYXRoOiAiLyIpKSwKICAgICAgICAgICAgICBjLmZpbGVTeXN0ZW0pLAogICAgICAgICAgZmFsc2UsCiAgICAgICAgICBkaWxsTG9hZGVkRGF0YSwKICAgICAgICAgIHVyaVRyYW5zbGF0b3IpOwogICAgICB1c2VyQ29kZS5sb2FkZXIuaGllcmFyY2h5ID0gaGllcmFyY2h5OwoKICAgICAgaWYgKHRyYWNrTmVlZGVkRGlsbExpYnJhcmllcykgewogICAgICAgIC8vIFJlc2V0IGRpbGwgbG9hZGVycyBhbmQga2VybmVsIGNsYXNzIGhpZXJhcmNoeS4KICAgICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gZGlsbExvYWRlZERhdGEubG9hZGVyLmJ1aWxkZXJzLnZhbHVlcykgewogICAgICAgICAgaWYgKGJ1aWxkZXIgaXMgRGlsbExpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgICAgIGJ1aWxkZXIuaXNCdWlsdEFuZE1hcmtlZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGhpZXJhcmNoeSBpcyBDbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5KSB7CiAgICAgICAgICBoaWVyYXJjaHkucmVzZXRVc2VkKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgaW4gcmV1c2VkTGlicmFyaWVzKSB7CiAgICAgICAgdXNlckNvZGUubG9hZGVyLmJ1aWxkZXJzW2xpYnJhcnkudXJpXSA9IGxpYnJhcnk7CiAgICAgICAgaWYgKGxpYnJhcnkudXJpLnNjaGVtZSA9PSAiZGFydCIgJiYgbGlicmFyeS51cmkucGF0aCA9PSAiY29yZSIpIHsKICAgICAgICAgIHVzZXJDb2RlLmxvYWRlci5jb3JlTGlicmFyeSA9IGxpYnJhcnk7CiAgICAgICAgfQogICAgICB9CgogICAgICBlbnRyeVBvaW50cyA9IHVzZXJDb2RlLnNldEVudHJ5UG9pbnRzKGVudHJ5UG9pbnRzKTsKICAgICAgaWYgKHVzZXJDb2RlLmxvYWRlci5maXJzdCA9PSBudWxsICYmCiAgICAgICAgICB1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnNbZW50cnlQb2ludHMuZmlyc3RdICE9IG51bGwpIHsKICAgICAgICB1c2VyQ29kZS5sb2FkZXIuZmlyc3QgPSB1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnNbZW50cnlQb2ludHMuZmlyc3RdOwogICAgICB9CiAgICAgIENvbXBvbmVudCBjb21wb25lbnRXaXRoRGlsbCA9IGF3YWl0IHVzZXJDb2RlLmJ1aWxkT3V0bGluZXMoKTsKCiAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBmdWxsIGNvbXBvbmVudC4gSXQgaXMgdGhlIGNvbXBvbmVudCBjb25zaXN0aW5nIG9mIGFsbAogICAgICAvLyBuZXdseSBjb21waWxlZCBsaWJyYXJpZXMgYW5kIGFsbCBsaWJyYXJpZXMgbG9hZGVkIGZyb20gLmRpbGwgZmlsZXMgb3IKICAgICAgLy8gZGlyZWN0bHkgZnJvbSBjb21wb25lbnRzLgogICAgICAvLyBUZWNobmljYWxseSwgaXQncyB0aGUgY29tYmluYXRpb24gb2YgdXNlckNvZGUubG9hZGVyLmxpYnJhcmllcyBhbmQKICAgICAgLy8gZGlsbExvYWRlZERhdGEubG9hZGVyLmxpYnJhcmllcy4KICAgICAgaWYgKCFvdXRsaW5lT25seSkgewogICAgICAgIGNvbXBvbmVudFdpdGhEaWxsID0KICAgICAgICAgICAgYXdhaXQgdXNlckNvZGUuYnVpbGRDb21wb25lbnQodmVyaWZ5OiBjLm9wdGlvbnMudmVyaWZ5KTsKICAgICAgfQogICAgICBoaWVyYXJjaHkgPz89IHVzZXJDb2RlLmxvYWRlci5oaWVyYXJjaHk7CgogICAgICByZWNvcmROb25GdWxsQ29tcG9uZW50Rm9yVGVzdGluZyhjb21wb25lbnRXaXRoRGlsbCk7CiAgICAgIGlmICh0cmFja05lZWRlZERpbGxMaWJyYXJpZXMpIHsKICAgICAgICAvLyBXaGljaCBkaWxsIGJ1aWxkZXJzIHdlcmUgYnVpbHQ/CiAgICAgICAgbmVlZGVkRGlsbExpYnJhcmllcyA9IG5ldyBTZXQ8TGlicmFyeT4oKTsKICAgICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gZGlsbExvYWRlZERhdGEubG9hZGVyLmJ1aWxkZXJzLnZhbHVlcykgewogICAgICAgICAgaWYgKGJ1aWxkZXIgaXMgRGlsbExpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgICAgIGlmIChidWlsZGVyLmlzQnVpbHRBbmRNYXJrZWQpIHsKICAgICAgICAgICAgICBuZWVkZWREaWxsTGlicmFyaWVzLmFkZChidWlsZGVyLmxpYnJhcnkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB1cGRhdGVOZWVkZWREaWxsTGlicmFyaWVzV2l0aEhpZXJhcmNoeSgKICAgICAgICAgICAgaGllcmFyY2h5LCB1c2VyQ29kZS5sb2FkZXIuYnVpbGRlckhpZXJhcmNoeSk7CiAgICAgIH0KCiAgICAgIGlmIChjb21wb25lbnRXaXRoRGlsbCAhPSBudWxsKSB7CiAgICAgICAgdGhpcy5pbnZhbGlkYXRlZFVyaXMuY2xlYXIoKTsKICAgICAgICBoYXNUb0NoZWNrUGFja2FnZVVyaXMgPSBmYWxzZTsKICAgICAgICB1c2VyQ29kZU9sZD8ubG9hZGVyPy5yZWxlYXNlQW5jaWxsYXJ5UmVzb3VyY2VzKCk7CiAgICAgICAgdXNlckNvZGVPbGQ/LmxvYWRlcj8uYnVpbGRlcnM/LmNsZWFyKCk7CiAgICAgICAgdXNlckNvZGVPbGQgPSBudWxsOwogICAgICB9CgogICAgICBMaXN0PExpYnJhcnk+IGNvbXBpbGVkTGlicmFyaWVzID0KICAgICAgICAgIG5ldyBMaXN0PExpYnJhcnk+LmZyb20odXNlckNvZGUubG9hZGVyLmxpYnJhcmllcyk7CiAgICAgIFByb2NlZHVyZSBtYWluTWV0aG9kID0gY29tcG9uZW50V2l0aERpbGwgPT0gbnVsbAogICAgICAgICAgPyBkYXRhLnVzZXJMb2FkZWRVcmlNYWluCiAgICAgICAgICA6IGNvbXBvbmVudFdpdGhEaWxsLm1haW5NZXRob2Q7CgogICAgICBMaXN0PExpYnJhcnk+IG91dHB1dExpYnJhcmllczsKICAgICAgU2V0PExpYnJhcnk+IGFsbExpYnJhcmllczsKICAgICAgTWFwPFVyaSwgU291cmNlPiB1cmlUb1NvdXJjZSA9IGNvbXBvbmVudFdpdGhEaWxsPy51cmlUb1NvdXJjZTsKICAgICAgaWYgKGRhdGEuY29tcG9uZW50ICE9IG51bGwgfHwgZnVsbENvbXBvbmVudCkgewogICAgICAgIG91dHB1dExpYnJhcmllcyA9IGNvbXB1dGVUcmFuc2l0aXZlQ2xvc3VyZSgKICAgICAgICAgICAgY29tcGlsZWRMaWJyYXJpZXMsCiAgICAgICAgICAgIGVudHJ5UG9pbnRzLAogICAgICAgICAgICByZXVzZWRMaWJyYXJpZXMsCiAgICAgICAgICAgIGhpZXJhcmNoeSwKICAgICAgICAgICAgdXJpVHJhbnNsYXRvciwKICAgICAgICAgICAgdXJpVG9Tb3VyY2UpOwogICAgICAgIGFsbExpYnJhcmllcyA9IG91dHB1dExpYnJhcmllcy50b1NldCgpOwogICAgICAgIGlmICghYy5vcHRpb25zLm9taXRQbGF0Zm9ybSkgewogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGF0Zm9ybUJ1aWxkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIExpYnJhcnkgbGliID0gcGxhdGZvcm1CdWlsZGVyc1tpXS50YXJnZXQ7CiAgICAgICAgICAgIG91dHB1dExpYnJhcmllcy5hZGQobGliKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0cHV0TGlicmFyaWVzID0gbmV3IExpc3Q8TGlicmFyeT4oKTsKICAgICAgICBhbGxMaWJyYXJpZXMgPSBjb21wdXRlVHJhbnNpdGl2ZUNsb3N1cmUoCiAgICAgICAgICAgICAgICBjb21waWxlZExpYnJhcmllcywKICAgICAgICAgICAgICAgIGVudHJ5UG9pbnRzLAogICAgICAgICAgICAgICAgcmV1c2VkTGlicmFyaWVzLAogICAgICAgICAgICAgICAgaGllcmFyY2h5LAogICAgICAgICAgICAgICAgdXJpVHJhbnNsYXRvciwKICAgICAgICAgICAgICAgIHVyaVRvU291cmNlLAogICAgICAgICAgICAgICAgb3V0cHV0TGlicmFyaWVzKQogICAgICAgICAgICAudG9TZXQoKTsKICAgICAgfQoKICAgICAgTGlzdDxTdHJpbmc+IHByb2JsZW1zQXNKc29uID0gcmVpc3N1ZUNvbXBvbmVudFByb2JsZW1zKGNvbXBvbmVudFdpdGhEaWxsKTsKICAgICAgcmVpc3N1ZUxpYnJhcnlQcm9ibGVtcyhhbGxMaWJyYXJpZXMsIGNvbXBpbGVkTGlicmFyaWVzKTsKCiAgICAgIGlmIChjb21wb25lbnRXaXRoRGlsbCA9PSBudWxsKSB7CiAgICAgICAgdXNlckNvZGUubG9hZGVyLmJ1aWxkZXJzLmNsZWFyKCk7CiAgICAgICAgdXNlckNvZGUgPSB1c2VyQ29kZU9sZDsKICAgICAgfQoKICAgICAgLy8gVGhpcyBpcyB0aGUgaW5jcmVtZW50YWwgY29tcG9uZW50LgogICAgICByZXR1cm4gY29udGV4dC5vcHRpb25zLnRhcmdldC5jb25maWd1cmVDb21wb25lbnQoCiAgICAgICAgICBuZXcgQ29tcG9uZW50KGxpYnJhcmllczogb3V0cHV0TGlicmFyaWVzLCB1cmlUb1NvdXJjZTogdXJpVG9Tb3VyY2UpKQogICAgICAgIC4ubWFpbk1ldGhvZCA9IG1haW5NZXRob2QKICAgICAgICAuLnByb2JsZW1zQXNKc29uID0gcHJvYmxlbXNBc0pzb247CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIENvcmVUeXBlcyBnZXRDb3JlVHlwZXMoKSA9PiB1c2VyQ29kZT8ubG9hZGVyPy5jb3JlVHlwZXM7CgogIEBvdmVycmlkZQogIENsYXNzSGllcmFyY2h5IGdldENsYXNzSGllcmFyY2h5KCkgPT4gdXNlckNvZGU/LmxvYWRlcj8uaGllcmFyY2h5OwoKICAvLy8gQWxsb3dzIGZvciB1cGRhdGluZyB0aGUgbGlzdCBvZiBuZWVkZWQgbGlicmFyaWVzLgogIC8vLwogIC8vLyBVc2VmdWwgaWYgYSBjbGFzcyBoaWVyYXJjaHkgaGFzIGJlZW4gdXNlZCBleHRlcm5hbGx5LgogIC8vLyBDdXJyZW50bHkgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgY2xhc3MgaGllcmFyY2hpZXMgd2hpY2ggaXMgdW5mb3J0dW5hdGUuCiAgLy8vIEZvciBub3cgdGhpcyBtZXRob2QgYWxsb3dzIHRoZSAnQ2xhc3NIaWVyYXJjaHlCdWlsZGVyJyB0byBiZSBudWxsLgogIC8vLwogIC8vLyBUT0RPKGplbnNqLENGRSBpbiBnZW5lcmFsKTogRXZlbnR1YWxseSB3ZSBzaG91bGQgZ2V0IHRvIGEgcG9pbnQgd2hlcmUgd2UKICAvLy8gb25seSBoYXZlIG9uZSBjbGFzcyBoaWVyYXJjaHkuCiAgLy8vIFRPRE8oamVuc2opOiBUaGlzIGNvdWxkIHByb2JhYmx5IGJlIGEgdXRpbGl0eSBtZXRob2Qgc29tZXdoZXJlIGluc3RlYWQKICAvLy8gKHRob3VnaCBoYW5kbGluZyBvZiB0aGUgY2FzZSB3aGVyZSBhbGwgYmV0cyBhcmUgb2ZmIHNob3VsZCBwcm9iYWJseSBzdGlsbAogIC8vLyBsaXZlIGxvY2FsbHkpLgogIHZvaWQgdXBkYXRlTmVlZGVkRGlsbExpYnJhcmllc1dpdGhIaWVyYXJjaHkoCiAgICAgIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXJIaWVyYXJjaHkpIHsKICAgIGlmIChoaWVyYXJjaHkgaXMgQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeSAmJiAhaGllcmFyY2h5LmFsbEJldHNPZmYpIHsKICAgICAgbmVlZGVkRGlsbExpYnJhcmllcyA/Pz0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgICBTZXQ8Q2xhc3M+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzPigpOwogICAgICBMaXN0PENsYXNzPiB3b3JrbGlzdCA9IG5ldyBMaXN0PENsYXNzPigpOwogICAgICAvLyBHZXQgYWxsIGNsYXNzZXMgdG91Y2hlZCBieSBrZXJuZWwgY2xhc3MgaGllcmFyY2h5LgogICAgICBMaXN0PENsYXNzPiB1c2VkQ2xhc3NlcyA9IGhpZXJhcmNoeS5nZXRVc2VkQ2xhc3NlcygpOwogICAgICB3b3JrbGlzdC5hZGRBbGwodXNlZENsYXNzZXMpOwogICAgICBjbGFzc2VzLmFkZEFsbCh1c2VkQ2xhc3Nlcyk7CgogICAgICAvLyBHZXQgYWxsIGNsYXNzZXMgdG91Y2hlZCBieSBmYXN0YSBjbGFzcyBoaWVyYXJjaHkuCiAgICAgIGlmIChidWlsZGVySGllcmFyY2h5ICE9IG51bGwpIHsKICAgICAgICBmb3IgKENsYXNzIGMgaW4gYnVpbGRlckhpZXJhcmNoeS5ub2Rlcy5rZXlzKSB7CiAgICAgICAgICBpZiAoY2xhc3Nlcy5hZGQoYykpIHdvcmtsaXN0LmFkZChjKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIEdldCBhbGwgc3VwZXJzIGV0Yy4KICAgICAgd2hpbGUgKHdvcmtsaXN0LmlzTm90RW1wdHkpIHsKICAgICAgICBDbGFzcyBjID0gd29ya2xpc3QucmVtb3ZlTGFzdCgpOwogICAgICAgIGZvciAoU3VwZXJ0eXBlIHN1cGVydHlwZSBpbiBjLmltcGxlbWVudGVkVHlwZXMpIHsKICAgICAgICAgIGlmIChjbGFzc2VzLmFkZChzdXBlcnR5cGUuY2xhc3NOb2RlKSkgewogICAgICAgICAgICB3b3JrbGlzdC5hZGQoc3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChjbGFzc2VzLmFkZChjLm1peGVkSW5UeXBlLmNsYXNzTm9kZSkpIHsKICAgICAgICAgICAgd29ya2xpc3QuYWRkKGMubWl4ZWRJblR5cGUuY2xhc3NOb2RlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGMuc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChjbGFzc2VzLmFkZChjLnN1cGVydHlwZS5jbGFzc05vZGUpKSB7CiAgICAgICAgICAgIHdvcmtsaXN0LmFkZChjLnN1cGVydHlwZS5jbGFzc05vZGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQWRkIGFueSBsaWJyYXJpZXMgdGhhdCB3YXMgdXNlZCBvciB3YXMgaW4gdGhlICJwYXJlbnQtY2hhaW4iIG9mIGEKICAgICAgLy8gdXNlZCBjbGFzcy4KICAgICAgZm9yIChDbGFzcyBjIGluIGNsYXNzZXMpIHsKICAgICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBjLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgICAgLy8gT25seSBhZGQgaWYgbG9hZGVkIGZyb20gYSBkaWxsIGZpbGUuCiAgICAgICAgaWYgKGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5jb250YWluc0tleShsaWJyYXJ5LmltcG9ydFVyaSkpIHsKICAgICAgICAgIG5lZWRlZERpbGxMaWJyYXJpZXMuYWRkKGxpYnJhcnkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gQ2Fubm90IHRyYWNrIGluIG90aGVyIGtlcm5lbCBjbGFzcyBoaWVyYXJjaGllcyBvcgogICAgICAvLyBpZiBhbGwgYmV0cyBhcmUgb2ZmOiBBZGQgZXZlcnl0aGluZy4KICAgICAgbmVlZGVkRGlsbExpYnJhcmllcyA9IG5ldyBTZXQ8TGlicmFyeT4oKTsKICAgICAgZm9yIChMaWJyYXJ5QnVpbGRlciBidWlsZGVyIGluIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy52YWx1ZXMpIHsKICAgICAgICBpZiAoYnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICAgIG5lZWRlZERpbGxMaWJyYXJpZXMuYWRkKGJ1aWxkZXIubGlicmFyeSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIHZvaWQgaW52YWxpZGF0ZU5vdEtlcHRVc2VyQnVpbGRlcnMoU2V0PFVyaT4gaW52YWxpZGF0ZWRVcmlzKSB7CiAgICBpZiAobW9kdWxlc1RvTG9hZCAhPSBudWxsICYmIHVzZXJCdWlsZGVycyAhPSBudWxsKSB7CiAgICAgIFNldDxMaWJyYXJ5PiBsb2FkZWROb3RLZXB0ID0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gdXNlckJ1aWxkZXJzLnZhbHVlcykgewogICAgICAgIGxvYWRlZE5vdEtlcHQuYWRkKGJ1aWxkZXIudGFyZ2V0KTsKICAgICAgfQogICAgICBmb3IgKENvbXBvbmVudCBtb2R1bGUgaW4gbW9kdWxlc1RvTG9hZCkgewogICAgICAgIGxvYWRlZE5vdEtlcHQucmVtb3ZlQWxsKG1vZHVsZS5saWJyYXJpZXMpOwogICAgICB9CiAgICAgIGZvciAoTGlicmFyeSBsaWIgaW4gbG9hZGVkTm90S2VwdCkgewogICAgICAgIGludmFsaWRhdGVkVXJpcy5hZGQobGliLmltcG9ydFVyaSk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgRnV0dXJlPHZvaWQ+IGxvYWRFbnN1cmVMb2FkZWRDb21wb25lbnRzKAogICAgICBMaXN0PExpYnJhcnlCdWlsZGVyPiByZXVzZWRMaWJyYXJpZXMpIGFzeW5jIHsKICAgIGlmIChtb2R1bGVzVG9Mb2FkICE9IG51bGwpIHsKICAgICAgYm9vbCBsb2FkZWRBbnl0aGluZyA9IGZhbHNlOwogICAgICBmb3IgKENvbXBvbmVudCBtb2R1bGUgaW4gbW9kdWxlc1RvTG9hZCkgewogICAgICAgIGJvb2wgdXNlZENvbXBvbmVudCA9IGZhbHNlOwogICAgICAgIGZvciAoTGlicmFyeSBsaWIgaW4gbW9kdWxlLmxpYnJhcmllcykgewogICAgICAgICAgaWYgKCFkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMuY29udGFpbnNLZXkobGliLmltcG9ydFVyaSkpIHsKICAgICAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmxpYnJhcmllcy5hZGQobGliKTsKICAgICAgICAgICAgZGlsbExvYWRlZERhdGEuYWRkTGlicmFyeShsaWIpOwogICAgICAgICAgICByZXVzZWRMaWJyYXJpZXMuYWRkKGRpbGxMb2FkZWREYXRhLmxvYWRlci5yZWFkKGxpYi5pbXBvcnRVcmksIC0xKSk7CiAgICAgICAgICAgIHVzZWRDb21wb25lbnQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodXNlZENvbXBvbmVudCkgewogICAgICAgICAgZGlsbExvYWRlZERhdGEudXJpVG9Tb3VyY2UuYWRkQWxsKG1vZHVsZS51cmlUb1NvdXJjZSk7CiAgICAgICAgICBsb2FkZWRBbnl0aGluZyA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsb2FkZWRBbnl0aGluZykgewogICAgICAgIGF3YWl0IGRpbGxMb2FkZWREYXRhLmJ1aWxkT3V0bGluZXMoKTsKICAgICAgICB1c2VyQnVpbGRlcnMgPSA8VXJpLCBMaWJyYXJ5QnVpbGRlcj57fTsKICAgICAgICBwbGF0Zm9ybUJ1aWxkZXJzID0gPExpYnJhcnlCdWlsZGVyPltdOwogICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5mb3JFYWNoKCh1cmksIGJ1aWxkZXIpIHsKICAgICAgICAgIGlmIChidWlsZGVyLnVyaS5zY2hlbWUgPT0gImRhcnQiKSB7CiAgICAgICAgICAgIHBsYXRmb3JtQnVpbGRlcnMuYWRkKGJ1aWxkZXIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdXNlckJ1aWxkZXJzW3VyaV0gPSBidWlsZGVyOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICh1c2VyQnVpbGRlcnMuaXNFbXB0eSkgewogICAgICAgICAgdXNlckJ1aWxkZXJzID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgICAgbW9kdWxlc1RvTG9hZCA9IG51bGw7CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIHZvaWQgcmVpc3N1ZUxpYnJhcnlQcm9ibGVtcygKICAgICAgU2V0PExpYnJhcnk+IGFsbExpYnJhcmllcywgTGlzdDxMaWJyYXJ5PiBjb21waWxlZExpYnJhcmllcykgewogICAgLy8gVGhlIG5ld2x5LWNvbXBpbGVkIGxpYnJhcmllcyBoYXZlIGlzc3VlZCBwcm9ibGVtcyBhbHJlYWR5LiBSZS1pc3N1ZQogICAgLy8gcHJvYmxlbXMgZm9yIHRoZSBsaWJyYXJpZXMgdGhhdCB3ZXJlbid0IHJlLWNvbXBpbGVkIChpZ25vcmUgY29tcGlsZQogICAgLy8gZXhwcmVzc2lvbiBwcm9ibGVtcykKICAgIGFsbExpYnJhcmllcy5yZW1vdmVBbGwoY29tcGlsZWRMaWJyYXJpZXMpOwogICAgZm9yIChMaWJyYXJ5IGxpYnJhcnkgaW4gYWxsTGlicmFyaWVzKSB7CiAgICAgIGlmIChsaWJyYXJ5LnByb2JsZW1zQXNKc29uPy5pc05vdEVtcHR5ID09IHRydWUpIHsKICAgICAgICBmb3IgKFN0cmluZyBqc29uU3RyaW5nIGluIGxpYnJhcnkucHJvYmxlbXNBc0pzb24pIHsKICAgICAgICAgIERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24gbWVzc2FnZSA9CiAgICAgICAgICAgICAgbmV3IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24uZnJvbUpzb24oanNvblN0cmluZyk7CiAgICAgICAgICBpZiAobWVzc2FnZS51cmkgPT0gZGVidWdFeHByVXJpKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgY29udGV4dC5vcHRpb25zLnJlcG9ydERpYWdub3N0aWNNZXNzYWdlKG1lc3NhZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICAvLy8gUmUtaXNzdWUgcHJvYmxlbXMgb24gdGhlIGNvbXBvbmVudCBhbmQgcmV0dXJuIHRoZSBmaWx0ZXJlZCBsaXN0LgogIExpc3Q8U3RyaW5nPiByZWlzc3VlQ29tcG9uZW50UHJvYmxlbXMoQ29tcG9uZW50IGNvbXBvbmVudFdpdGhEaWxsKSB7CiAgICAvLyBUaGVzZSBwcm9ibGVtcyBoYXZlIGFscmVhZHkgYmVlbiByZXBvcnRlZC4KICAgIFNldDxTdHJpbmc+IGlzc3VlZFByb2JsZW1zID0gbmV3IFNldDxTdHJpbmc+KCk7CiAgICBpZiAoY29tcG9uZW50V2l0aERpbGw/LnByb2JsZW1zQXNKc29uICE9IG51bGwpIHsKICAgICAgaXNzdWVkUHJvYmxlbXMuYWRkQWxsKGNvbXBvbmVudFdpdGhEaWxsLnByb2JsZW1zQXNKc29uKTsKICAgIH0KCiAgICAvLyBSZXBvcnQgb2xkIHByb2JsZW1zIHRoYXQgd2Fzbid0IHJlcG9ydGVkIGFnYWluLgogICAgZm9yIChMaXN0PERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24+IG1lc3NhZ2VzCiAgICAgICAgaW4gcmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMudmFsdWVzKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uIG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTsKICAgICAgICBpZiAoaXNzdWVkUHJvYmxlbXMuYWRkKG1lc3NhZ2UudG9Kc29uU3RyaW5nKCkpKSB7CiAgICAgICAgICBjb250ZXh0Lm9wdGlvbnMucmVwb3J0RGlhZ25vc3RpY01lc3NhZ2UobWVzc2FnZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gU2F2ZSBhbnkgbmV3IGNvbXBvbmVudC1wcm9ibGVtcy4KICAgIGlmIChjb21wb25lbnRXaXRoRGlsbD8ucHJvYmxlbXNBc0pzb24gIT0gbnVsbCkgewogICAgICBmb3IgKFN0cmluZyBqc29uU3RyaW5nIGluIGNvbXBvbmVudFdpdGhEaWxsLnByb2JsZW1zQXNKc29uKSB7CiAgICAgICAgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiBtZXNzYWdlID0KICAgICAgICAgICAgbmV3IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24uZnJvbUpzb24oanNvblN0cmluZyk7CiAgICAgICAgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPiBtZXNzYWdlcyA9CiAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zW21lc3NhZ2UudXJpXSA/Pz0KICAgICAgICAgICAgICAgIG5ldyBMaXN0PERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24+KCk7CiAgICAgICAgbWVzc2FnZXMuYWRkKG1lc3NhZ2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IExpc3Q8U3RyaW5nPi5mcm9tKGlzc3VlZFByb2JsZW1zKTsKICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgVXJpIGdldFBhcnRGaWxlVXJpKAogICAgICBVcmkgcGFyZW50RmlsZVVyaSwgTGlicmFyeVBhcnQgcGFydCwgVXJpVHJhbnNsYXRvciB1cmlUcmFuc2xhdG9yKSB7CiAgICBVcmkgZmlsZVVyaSA9IHBhcmVudEZpbGVVcmkucmVzb2x2ZShwYXJ0LnBhcnRVcmkpOwogICAgaWYgKGZpbGVVcmkuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICAvLyBQYXJ0IHdhcyBzcGVjaWZpZWQgdmlhIHBhY2thZ2UgVVJJIGFuZCB0aGUgcmVzb2x2ZSBhYm92ZSB0aHVzCiAgICAgIC8vIGRpZCBub3QgZ28gYXMgZXhwZWN0ZWQuIFRyYW5zbGF0ZSB0aGUgcGFja2FnZSBVUkkgdG8gZ2V0IHRoZQogICAgICAvLyBhY3R1YWwgZmlsZSBVUkkuCiAgICAgIGZpbGVVcmkgPSB1cmlUcmFuc2xhdG9yLnRyYW5zbGF0ZShmaWxlVXJpLCBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gZmlsZVVyaTsKICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgLy8vIENvbXB1dGUgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZS4KICAvLy8KICAvLy8gQXMgYSBzaWRlLWVmZmVjdCwgdGhpcyBhbHNvIGNsZWFucy11cCBub3ctdW5yZWZlcmVuY2VkIGJ1aWxkZXJzIGFzIHdlbGwgYXMKICAvLy8gYW55IHNhdmVkIGNvbXBvbmVudCBwcm9ibGVtcyBmb3Igc3VjaCBidWlsZGVycy4KICBMaXN0PExpYnJhcnk+IGNvbXB1dGVUcmFuc2l0aXZlQ2xvc3VyZSgKICAgICAgTGlzdDxMaWJyYXJ5PiBpbnB1dExpYnJhcmllcywKICAgICAgTGlzdDxVcmk+IGVudHJpZXMsCiAgICAgIExpc3Q8TGlicmFyeUJ1aWxkZXI+IHJldXNlZExpYnJhcmllcywKICAgICAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LAogICAgICBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsCiAgICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UsCiAgICAgIFtMaXN0PExpYnJhcnk+IGlucHV0TGlicmFyaWVzRmlsdGVyZWRdKSB7CiAgICBMaXN0PExpYnJhcnk+IHJlc3VsdCA9IG5ldyBMaXN0PExpYnJhcnk+KCk7CiAgICBNYXA8VXJpLCBMaWJyYXJ5PiBsaWJyYXJ5TWFwID0gPFVyaSwgTGlicmFyeT57fTsKICAgIE1hcDxVcmksIExpYnJhcnk+IHBvdGVudGlhbGx5UmVmZXJlbmNlZExpYnJhcmllcyA9IDxVcmksIExpYnJhcnk+e307CiAgICBNYXA8VXJpLCBMaWJyYXJ5PiBwb3RlbnRpYWxseVJlZmVyZW5jZWRJbnB1dExpYnJhcmllcyA9IDxVcmksIExpYnJhcnk+e307CiAgICBmb3IgKExpYnJhcnkgbGlicmFyeSBpbiBpbnB1dExpYnJhcmllcykgewogICAgICBsaWJyYXJ5TWFwW2xpYnJhcnkuaW1wb3J0VXJpXSA9IGxpYnJhcnk7CiAgICAgIGlmIChsaWJyYXJ5LmltcG9ydFVyaS5zY2hlbWUgPT0gImRhcnQiKSB7CiAgICAgICAgcmVzdWx0LmFkZChsaWJyYXJ5KTsKICAgICAgICBpbnB1dExpYnJhcmllc0ZpbHRlcmVkPy5hZGQobGlicmFyeSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcG90ZW50aWFsbHlSZWZlcmVuY2VkTGlicmFyaWVzW2xpYnJhcnkuaW1wb3J0VXJpXSA9IGxpYnJhcnk7CiAgICAgICAgcG90ZW50aWFsbHlSZWZlcmVuY2VkSW5wdXRMaWJyYXJpZXNbbGlicmFyeS5pbXBvcnRVcmldID0gbGlicmFyeTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8VXJpPiB3b3JrbGlzdCA9IG5ldyBMaXN0PFVyaT4oKTsKICAgIHdvcmtsaXN0LmFkZEFsbChlbnRyaWVzKTsKICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiByZXVzZWRMaWJyYXJpZXMpIHsKICAgICAgaWYgKGxpYnJhcnkudXJpLnNjaGVtZSA9PSAiZGFydCIgJiYgIWxpYnJhcnkuaXNTeW50aGV0aWMpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBMaWJyYXJ5IGxpYiA9IGxpYnJhcnkudGFyZ2V0OwogICAgICBwb3RlbnRpYWxseVJlZmVyZW5jZWRMaWJyYXJpZXNbbGlicmFyeS51cmldID0gbGliOwogICAgICBsaWJyYXJ5TWFwW2xpYnJhcnkudXJpXSA9IGxpYjsKICAgIH0KCiAgICBMaWJyYXJ5R3JhcGggZ3JhcGggPSBuZXcgTGlicmFyeUdyYXBoKGxpYnJhcnlNYXApOwogICAgd2hpbGUgKHdvcmtsaXN0LmlzTm90RW1wdHkgJiYgcG90ZW50aWFsbHlSZWZlcmVuY2VkTGlicmFyaWVzLmlzTm90RW1wdHkpIHsKICAgICAgVXJpIHVyaSA9IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgaWYgKGxpYnJhcnlNYXAuY29udGFpbnNLZXkodXJpKSkgewogICAgICAgIGZvciAoVXJpIG5laWdoYm9yIGluIGdyYXBoLm5laWdoYm9yc09mKHVyaSkpIHsKICAgICAgICAgIHdvcmtsaXN0LmFkZChuZWlnaGJvcik7CiAgICAgICAgfQogICAgICAgIGxpYnJhcnlNYXAucmVtb3ZlKHVyaSk7CiAgICAgICAgTGlicmFyeSBsaWJyYXJ5ID0gcG90ZW50aWFsbHlSZWZlcmVuY2VkTGlicmFyaWVzLnJlbW92ZSh1cmkpOwogICAgICAgIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgICAgIHJlc3VsdC5hZGQobGlicmFyeSk7CiAgICAgICAgICBpZiAocG90ZW50aWFsbHlSZWZlcmVuY2VkSW5wdXRMaWJyYXJpZXMucmVtb3ZlKHVyaSkgIT0gbnVsbCkgewogICAgICAgICAgICBpbnB1dExpYnJhcmllc0ZpbHRlcmVkPy5hZGQobGlicmFyeSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTGlzdDxMaWJyYXJ5PiByZW1vdmVkTGlicmFyaWVzID0gbmV3IExpc3Q8TGlicmFyeT4oKTsKICAgIGZvciAoVXJpIHVyaSBpbiBwb3RlbnRpYWxseVJlZmVyZW5jZWRMaWJyYXJpZXMua2V5cykgewogICAgICBpZiAodXJpLnNjaGVtZSA9PSAicGFja2FnZSIpIGNvbnRpbnVlOwogICAgICBMaWJyYXJ5QnVpbGRlciBidWlsZGVyID0gdXNlckNvZGUubG9hZGVyLmJ1aWxkZXJzLnJlbW92ZSh1cmkpOwogICAgICBpZiAoYnVpbGRlciAhPSBudWxsKSB7CiAgICAgICAgTGlicmFyeSBsaWIgPSBidWlsZGVyLnRhcmdldDsKICAgICAgICByZW1vdmVkTGlicmFyaWVzLmFkZChsaWIpOwogICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5yZW1vdmUodXJpKTsKICAgICAgICBDb21waWxlckNvbnRleHQuY3VycmVudC51cmlUb1NvdXJjZS5yZW1vdmUodXJpKTsKICAgICAgICB1cmlUb1NvdXJjZS5yZW1vdmUodXJpKTsKICAgICAgICB1c2VyQnVpbGRlcnM/LnJlbW92ZSh1cmkpOwogICAgICAgIHJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMobGliLCB1cmlUcmFuc2xhdG9yKTsKICAgICAgfQogICAgfQogICAgaGllcmFyY2h5Py5hcHBseVRyZWVDaGFuZ2VzKHJlbW92ZWRMaWJyYXJpZXMsIGNvbnN0IFtdKTsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMoCiAgICAgIExpYnJhcnkgbGliLCBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IpIHsKICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zLnJlbW92ZShsaWIuZmlsZVVyaSk7CiAgICAvLyBSZW1vdmUgcGFydHMgdG9vLgogICAgZm9yIChMaWJyYXJ5UGFydCBwYXJ0IGluIGxpYi5wYXJ0cykgewogICAgICBVcmkgcGFydEZpbGVVcmkgPSBnZXRQYXJ0RmlsZVVyaShsaWIuZmlsZVVyaSwgcGFydCwgdXJpVHJhbnNsYXRvcik7CiAgICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zLnJlbW92ZShwYXJ0RmlsZVVyaSk7CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIGludCBwcmVwYXJlU3VtbWFyeShMaXN0PGludD4gc3VtbWFyeUJ5dGVzLCBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsCiAgICAgIENvbXBpbGVyQ29udGV4dCBjLCBJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSBkYXRhKSB7CiAgICBkaWxsTG9hZGVkRGF0YSA9IG5ldyBEaWxsVGFyZ2V0KHRpY2tlciwgdXJpVHJhbnNsYXRvciwgYy5vcHRpb25zLnRhcmdldCk7CiAgICBpbnQgYnl0ZXNMZW5ndGggPSAwOwoKICAgIGlmIChzdW1tYXJ5Qnl0ZXMgIT0gbnVsbCkgewogICAgICB0aWNrZXIubG9nTXMoIlJlYWQgJHtjLm9wdGlvbnMuc2RrU3VtbWFyeX0iKTsKICAgICAgZGF0YS5jb21wb25lbnQgPSBjLm9wdGlvbnMudGFyZ2V0LmNvbmZpZ3VyZUNvbXBvbmVudChuZXcgQ29tcG9uZW50KCkpOwogICAgICBuZXcgQmluYXJ5QnVpbGRlcihzdW1tYXJ5Qnl0ZXMsIGRpc2FibGVMYXp5UmVhZGluZzogZmFsc2UpCiAgICAgICAgICAucmVhZENvbXBvbmVudChkYXRhLmNvbXBvbmVudCk7CiAgICAgIHRpY2tlci5sb2dNcygiRGVzZXJpYWxpemVkICR7Yy5vcHRpb25zLnNka1N1bW1hcnl9Iik7CiAgICAgIGJ5dGVzTGVuZ3RoICs9IHN1bW1hcnlCeXRlcy5sZW5ndGg7CiAgICB9CgogICAgcmV0dXJuIGJ5dGVzTGVuZ3RoOwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICAvLyBUaGlzIHByb2NlZHVyZSB3aWxsIHRyeSB0byBsb2FkIHRoZSBkaWxsIGZpbGUgYW5kIHdpbGwgY3Jhc2ggaWYgaXQgY2Fubm90LgogIEZ1dHVyZTxpbnQ+IGluaXRpYWxpemVGcm9tRGlsbChVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsIENvbXBpbGVyQ29udGV4dCBjLAogICAgICBJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSBkYXRhKSBhc3luYyB7CiAgICBpbnQgYnl0ZXNMZW5ndGggPSAwOwogICAgRmlsZVN5c3RlbUVudGl0eSBlbnRpdHkgPQogICAgICAgIGMub3B0aW9ucy5maWxlU3lzdGVtLmVudGl0eUZvclVyaShpbml0aWFsaXplRnJvbURpbGxVcmkpOwogICAgaWYgKGF3YWl0IGVudGl0eS5leGlzdHMoKSkgewogICAgICBMaXN0PGludD4gaW5pdGlhbGl6YXRpb25CeXRlcyA9IGF3YWl0IGVudGl0eS5yZWFkQXNCeXRlcygpOwogICAgICBpZiAoaW5pdGlhbGl6YXRpb25CeXRlcyAhPSBudWxsICYmIGluaXRpYWxpemF0aW9uQnl0ZXMuaXNOb3RFbXB0eSkgewogICAgICAgIHRpY2tlci5sb2dNcygiUmVhZCAkaW5pdGlhbGl6ZUZyb21EaWxsVXJpIik7CiAgICAgICAgZGF0YS5pbml0aWFsaXphdGlvbkJ5dGVzID0gaW5pdGlhbGl6YXRpb25CeXRlczsKCiAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gb3V0cHV0IGFsbCB3ZSByZWFkIGhlcmUgc28gbGF6eSBsb2FkaW5nIGl0CiAgICAgICAgLy8gZG9lc24ndCBtYWtlIHNlbnNlLgogICAgICAgIG5ldyBCaW5hcnlCdWlsZGVyKGluaXRpYWxpemF0aW9uQnl0ZXMsIGRpc2FibGVMYXp5UmVhZGluZzogdHJ1ZSkKICAgICAgICAgICAgLnJlYWRDb21wb25lbnQoZGF0YS5jb21wb25lbnQsIGNoZWNrQ2Fub25pY2FsTmFtZXM6IHRydWUpOwoKICAgICAgICAvLyBDaGVjayB0aGUgYW55IHBhY2thZ2UtdXJscyBzdGlsbCBwb2ludCB0byB0aGUgc2FtZSBmaWxlCiAgICAgICAgLy8gKGUuZy4gdGhlIHBhY2thZ2Ugc3RpbGwgZXhpc3RzIGFuZCBoYXNuJ3QgYmVlbiB1cGRhdGVkKS4KICAgICAgICBmb3IgKExpYnJhcnkgbGliIGluIGRhdGEuY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICAgICAgaWYgKGxpYi5pbXBvcnRVcmkuc2NoZW1lID09ICJwYWNrYWdlIiAmJgogICAgICAgICAgICAgIHVyaVRyYW5zbGF0b3IudHJhbnNsYXRlKGxpYi5pbXBvcnRVcmksIGZhbHNlKSAhPSBsaWIuZmlsZVVyaSkgewogICAgICAgICAgICAvLyBQYWNrYWdlIGhhcyBiZWVuIHJlbW92ZWQgb3IgdXBkYXRlZC4KICAgICAgICAgICAgLy8gVGhpcyBsaWJyYXJ5IHNob3VsZCBiZSB0aHJvd24gYXdheS4KICAgICAgICAgICAgLy8gRXZlcnl0aGluZyB0aGF0IGRlcGVuZHMgb24gaXQgc2hvdWxkIGJlIHRocm93biBhd2F5LgogICAgICAgICAgICAvLyBUT0RPKGplbnNqKTogQW55dGhpbmcgdGhhdCBkb2Vzbid0IGRlcGVuZCBvbiBpdCBjYW4gYmUga2VwdC4KICAgICAgICAgICAgLy8gRm9yIG5vdyBqdXN0IGRvbid0IGluaXRpYWxpemUgZnJvbSB0aGlzIGRpbGwuCiAgICAgICAgICAgIHRocm93IGNvbnN0IFBhY2thZ2VDaGFuZ2VkRXJyb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGluaXRpYWxpemVkRnJvbURpbGwgPSB0cnVlOwogICAgICAgIGJ5dGVzTGVuZ3RoICs9IGluaXRpYWxpemF0aW9uQnl0ZXMubGVuZ3RoOwogICAgICAgIGRhdGEudXNlckxvYWRlZFVyaU1haW4gPSBkYXRhLmNvbXBvbmVudC5tYWluTWV0aG9kOwogICAgICAgIHNhdmVDb21wb25lbnRQcm9ibGVtcyhkYXRhKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ5dGVzTGVuZ3RoOwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHNhdmVDb21wb25lbnRQcm9ibGVtcyhJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSBkYXRhKSB7CiAgICBpZiAoZGF0YS5jb21wb25lbnQucHJvYmxlbXNBc0pzb24gIT0gbnVsbCkgewogICAgICBmb3IgKFN0cmluZyBqc29uU3RyaW5nIGluIGRhdGEuY29tcG9uZW50LnByb2JsZW1zQXNKc29uKSB7CiAgICAgICAgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiBtZXNzYWdlID0KICAgICAgICAgICAgbmV3IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24uZnJvbUpzb24oanNvblN0cmluZyk7CiAgICAgICAgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPiBtZXNzYWdlcyA9CiAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zW21lc3NhZ2UudXJpXSA/Pz0KICAgICAgICAgICAgICAgIG5ldyBMaXN0PERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24+KCk7CiAgICAgICAgbWVzc2FnZXMuYWRkKG1lc3NhZ2UpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIC8vIFRoaXMgcHJvY2VkdXJlIHdpbGwgc2V0IHVwIGNvbXBpbGVyIGZyb20gW2NvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb21dLgogIHZvaWQgaW5pdGlhbGl6ZUZyb21Db21wb25lbnQoVXJpVHJhbnNsYXRvciB1cmlUcmFuc2xhdG9yLCBDb21waWxlckNvbnRleHQgYywKICAgICAgSW5jcmVtZW50YWxDb21waWxlckRhdGEgZGF0YSkgewogICAgdGlja2VyLmxvZ01zKCJBYm91dCB0byBpbml0aWFsaXplRnJvbUNvbXBvbmVudCIpOwoKICAgIGRpbGxMb2FkZWREYXRhID0gbmV3IERpbGxUYXJnZXQodGlja2VyLCB1cmlUcmFuc2xhdG9yLCBjLm9wdGlvbnMudGFyZ2V0KTsKICAgIGRhdGEuY29tcG9uZW50ID0gbmV3IENvbXBvbmVudCgKICAgICAgICBsaWJyYXJpZXM6IGNvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb20ubGlicmFyaWVzLAogICAgICAgIHVyaVRvU291cmNlOiBjb21wb25lbnRUb0luaXRpYWxpemVGcm9tLnVyaVRvU291cmNlKQogICAgICAuLm1haW5NZXRob2QgPSBjb21wb25lbnRUb0luaXRpYWxpemVGcm9tLm1haW5NZXRob2Q7CiAgICBkYXRhLnVzZXJMb2FkZWRVcmlNYWluID0gY29tcG9uZW50VG9Jbml0aWFsaXplRnJvbS5tYWluTWV0aG9kOwogICAgc2F2ZUNvbXBvbmVudFByb2JsZW1zKGRhdGEpOwoKICAgIGJvb2wgZm91bmREYXJ0Q29yZSA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmNvbXBvbmVudC5saWJyYXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgTGlicmFyeSBsaWJyYXJ5ID0gZGF0YS5jb21wb25lbnQubGlicmFyaWVzW2ldOwogICAgICBpZiAobGlicmFyeS5pbXBvcnRVcmkuc2NoZW1lID09ICJkYXJ0IiAmJgogICAgICAgICAgbGlicmFyeS5pbXBvcnRVcmkucGF0aCA9PSAiY29yZSIpIHsKICAgICAgICBmb3VuZERhcnRDb3JlID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIGlmICghZm91bmREYXJ0Q29yZSkgewogICAgICB0aHJvdyBjb25zdCBJbml0aWFsaXplRnJvbUNvbXBvbmVudEVycm9yKCJEaWQgbm90IGZpbmQgZGFydDpjb3JlIHdoZW4gIgogICAgICAgICAgInRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBjb21wb25lbnQuIik7CiAgICB9CgogICAgdGlja2VyLmxvZ01zKCJSYW4gaW5pdGlhbGl6ZUZyb21Db21wb25lbnQiKTsKICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgdm9pZCBhcHBlbmRMaWJyYXJpZXMoSW5jcmVtZW50YWxDb21waWxlckRhdGEgZGF0YSwgaW50IGJ5dGVzTGVuZ3RoKSB7CiAgICBpZiAoZGF0YS5jb21wb25lbnQgIT0gbnVsbCkgewogICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIKICAgICAgICAgIC5hcHBlbmRMaWJyYXJpZXMoZGF0YS5jb21wb25lbnQsIGJ5dGVDb3VudDogYnl0ZXNMZW5ndGgpOwogICAgfQogICAgdGlja2VyLmxvZ01zKCJBcHBlbmRlZCBsaWJyYXJpZXMiKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxQcm9jZWR1cmU+IGNvbXBpbGVFeHByZXNzaW9uKAogICAgICBTdHJpbmcgZXhwcmVzc2lvbiwKICAgICAgTWFwPFN0cmluZywgRGFydFR5cGU+IGRlZmluaXRpb25zLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVEZWZpbml0aW9ucywKICAgICAgU3RyaW5nIHN5bnRoZXRpY1Byb2NlZHVyZU5hbWUsCiAgICAgIFVyaSBsaWJyYXJ5VXJpLAogICAgICBbU3RyaW5nIGNsYXNzTmFtZSwKICAgICAgYm9vbCBpc1N0YXRpYyA9IGZhbHNlXSkgYXN5bmMgewogICAgYXNzZXJ0KGRpbGxMb2FkZWREYXRhICE9IG51bGwgJiYgdXNlckNvZGUgIT0gbnVsbCk7CgogICAgcmV0dXJuIGF3YWl0IGNvbnRleHQucnVuSW5Db250ZXh0KChfKSBhc3luYyB7CiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPQogICAgICAgICAgdXNlckNvZGUubG9hZGVyLnJlYWQobGlicmFyeVVyaSwgLTEsIGFjY2Vzc29yOiB1c2VyQ29kZS5sb2FkZXIuZmlyc3QpOwoKICAgICAgQ2xhc3Mga2VybmVsQ2xhc3M7CiAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkgewogICAgICAgIGtlcm5lbENsYXNzID0gbGlicmFyeS5zY29wZUJ1aWxkZXJbY2xhc3NOYW1lXT8udGFyZ2V0OwogICAgICAgIGlmIChrZXJuZWxDbGFzcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgdXNlckNvZGUubG9hZGVyLnNlZW5NZXNzYWdlcy5jbGVhcigpOwoKICAgICAgZm9yIChUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbSBpbiB0eXBlRGVmaW5pdGlvbnMpIHsKICAgICAgICBpZiAoIWlzTGVnYWxJZGVudGlmaWVyKHR5cGVQYXJhbS5uYW1lKSkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZm9yIChTdHJpbmcgbmFtZSBpbiBkZWZpbml0aW9ucy5rZXlzKSB7CiAgICAgICAgaWYgKCFpc0xlZ2FsSWRlbnRpZmllcihuYW1lKSkgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGRlYnVnTGlicmFyeSA9IG5ldyBTb3VyY2VMaWJyYXJ5QnVpbGRlcigKICAgICAgICBsaWJyYXJ5VXJpLAogICAgICAgIGRlYnVnRXhwclVyaSwKICAgICAgICB1c2VyQ29kZS5sb2FkZXIsCiAgICAgICAgbnVsbCwKICAgICAgICBzY29wZTogbGlicmFyeS5zY29wZS5jcmVhdGVOZXN0ZWRTY29wZSgiZXhwcmVzc2lvbiIpLAogICAgICAgIG5hbWVPcmlnaW46IGxpYnJhcnkudGFyZ2V0LAogICAgICApOwoKICAgICAgaWYgKGxpYnJhcnkgaXMgRGlsbExpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgZm9yIChMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5IGluIGxpYnJhcnkudGFyZ2V0LmRlcGVuZGVuY2llcykgewogICAgICAgICAgaWYgKCFkZXBlbmRlbmN5LmlzSW1wb3J0KSBjb250aW51ZTsKCiAgICAgICAgICBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzOwoKICAgICAgICAgIGZvciAoa2VybmVsLkNvbWJpbmF0b3IgY29tYmluYXRvciBpbiBkZXBlbmRlbmN5LmNvbWJpbmF0b3JzKSB7CiAgICAgICAgICAgIGNvbWJpbmF0b3JzID8/PSA8Q29tYmluYXRvcj5bXTsKCiAgICAgICAgICAgIGNvbWJpbmF0b3JzLmFkZChjb21iaW5hdG9yLmlzU2hvdwogICAgICAgICAgICAgICAgPyBuZXcgQ29tYmluYXRvci5zaG93KAogICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3IubmFtZXMsIGNvbWJpbmF0b3IuZmlsZU9mZnNldCwgbGlicmFyeS5maWxlVXJpKQogICAgICAgICAgICAgICAgOiBuZXcgQ29tYmluYXRvci5oaWRlKAogICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3IubmFtZXMsIGNvbWJpbmF0b3IuZmlsZU9mZnNldCwgbGlicmFyeS5maWxlVXJpKSk7CiAgICAgICAgICB9CgogICAgICAgICAgZGVidWdMaWJyYXJ5LmFkZEltcG9ydCgKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIGRlcGVuZGVuY3kuaW1wb3J0ZWRMaWJyYXJ5UmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUubmFtZSwKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIGRlcGVuZGVuY3kubmFtZSwKICAgICAgICAgICAgICBjb21iaW5hdG9ycywKICAgICAgICAgICAgICBkZXBlbmRlbmN5LmlzRGVmZXJyZWQsCiAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgLTEpOwogICAgICAgIH0KCiAgICAgICAgZGVidWdMaWJyYXJ5LmFkZEltcG9ydHNUb1Njb3BlKCk7CiAgICAgIH0KCiAgICAgIEh5YnJpZEZpbGVTeXN0ZW0gaGZzID0gdXNlckNvZGUuZmlsZVN5c3RlbTsKICAgICAgTWVtb3J5RmlsZVN5c3RlbSBmcyA9IGhmcy5tZW1vcnk7CiAgICAgIGZzLmVudGl0eUZvclVyaShkZWJ1Z0V4cHJVcmkpLndyaXRlQXNTdHJpbmdTeW5jKGV4cHJlc3Npb24pOwoKICAgICAgRnVuY3Rpb25Ob2RlIHBhcmFtZXRlcnMgPSBuZXcgRnVuY3Rpb25Ob2RlKG51bGwsCiAgICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZURlZmluaXRpb25zLAogICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IGRlZmluaXRpb25zLmtleXMKICAgICAgICAgICAgICAubWFwKChuYW1lKSA9PiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KG5hbWUsIDApKQogICAgICAgICAgICAgIC50b0xpc3QoKSk7CgogICAgICBkZWJ1Z0xpYnJhcnkuYnVpbGQodXNlckNvZGUubG9hZGVyLmNvcmVMaWJyYXJ5LCBtb2RpZnlUYXJnZXQ6IGZhbHNlKTsKICAgICAgRXhwcmVzc2lvbiBjb21waWxlZEV4cHJlc3Npb24gPSBhd2FpdCB1c2VyQ29kZS5sb2FkZXIuYnVpbGRFeHByZXNzaW9uKAogICAgICAgICAgZGVidWdMaWJyYXJ5LCBjbGFzc05hbWUsIGNsYXNzTmFtZSAhPSBudWxsICYmICFpc1N0YXRpYywgcGFyYW1ldGVycyk7CgogICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlID0gbmV3IFByb2NlZHVyZSgKICAgICAgICAgIG5ldyBOYW1lKHN5bnRoZXRpY1Byb2NlZHVyZU5hbWUpLCBQcm9jZWR1cmVLaW5kLk1ldGhvZCwgcGFyYW1ldGVycywKICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYyk7CgogICAgICBwYXJhbWV0ZXJzLmJvZHkgPSBuZXcgUmV0dXJuU3RhdGVtZW50KGNvbXBpbGVkRXhwcmVzc2lvbikKICAgICAgICAuLnBhcmVudCA9IHBhcmFtZXRlcnM7CgogICAgICBwcm9jZWR1cmUuZmlsZVVyaSA9IGRlYnVnTGlicmFyeS5maWxlVXJpOwogICAgICBwcm9jZWR1cmUucGFyZW50ID0gY2xhc3NOYW1lICE9IG51bGwgPyBrZXJuZWxDbGFzcyA6IGxpYnJhcnkudGFyZ2V0OwoKICAgICAgdXNlckNvZGUudXJpVG9Tb3VyY2UucmVtb3ZlKGRlYnVnRXhwclVyaSk7CiAgICAgIHVzZXJDb2RlLmxvYWRlci5zb3VyY2VCeXRlcy5yZW1vdmUoZGVidWdFeHByVXJpKTsKCiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGlicmFyeSBoYXMgYSBjYW5vbmljYWwgbmFtZS4KICAgICAgQ29tcG9uZW50IGMgPSBuZXcgQ29tcG9uZW50KGxpYnJhcmllczogW2RlYnVnTGlicmFyeS50YXJnZXRdKTsKICAgICAgYy5jb21wdXRlQ2Fub25pY2FsTmFtZXMoKTsKCiAgICAgIHVzZXJDb2RlLnJ1blByb2NlZHVyZVRyYW5zZm9ybWF0aW9ucyhwcm9jZWR1cmUpOwoKICAgICAgcmV0dXJuIHByb2NlZHVyZTsKICAgIH0pOwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICBMaXN0PExpYnJhcnlCdWlsZGVyPiBjb21wdXRlUmV1c2VkTGlicmFyaWVzKAogICAgICBTZXQ8VXJpPiBpbnZhbGlkYXRlZFVyaXMsIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciwKICAgICAge1NldDxMaWJyYXJ5QnVpbGRlcj4gbm90UmV1c2VkfSkgewogICAgTGlzdDxMaWJyYXJ5QnVpbGRlcj4gcmVzdWx0ID0gPExpYnJhcnlCdWlsZGVyPltdOwogICAgcmVzdWx0LmFkZEFsbChwbGF0Zm9ybUJ1aWxkZXJzKTsKICAgIGlmICh1c2VyQ29kZSA9PSBudWxsICYmIHVzZXJCdWlsZGVycyA9PSBudWxsKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgLy8gTWFwcyBhbGwgbm9uLXBsYXRmb3JtIExpYnJhcnlCdWlsZGVycyBmcm9tIHRoZWlyIGltcG9ydCBVUkkuCiAgICBNYXA8VXJpLCBMaWJyYXJ5QnVpbGRlcj4gYnVpbGRlcnMgPSA8VXJpLCBMaWJyYXJ5QnVpbGRlcj57fTsKCiAgICAvLyBJbnZhbGlkYXRlZCBVUklzIHRyYW5zbGF0ZWQgYmFjayB0byB0aGVpciBpbXBvcnQgVVJJIChwYWNrYWdlOiwgZGFydDosCiAgICAvLyBldGMuKS4KICAgIExpc3Q8VXJpPiBpbnZhbGlkYXRlZEltcG9ydFVyaXMgPSA8VXJpPltdOwoKICAgIGJvb2wgaXNJbnZhbGlkYXRlZChVcmkgaW1wb3J0VXJpLCBVcmkgZmlsZVVyaSkgewogICAgICBpZiAoaW52YWxpZGF0ZWRVcmlzLmNvbnRhaW5zKGltcG9ydFVyaSkpIHJldHVybiB0cnVlOwogICAgICBpZiAoaW1wb3J0VXJpICE9IGZpbGVVcmkgJiYgaW52YWxpZGF0ZWRVcmlzLmNvbnRhaW5zKGZpbGVVcmkpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGhhc1RvQ2hlY2tQYWNrYWdlVXJpcyAmJiBpbXBvcnRVcmkuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICAgIC8vIEdldCBwYWNrYWdlIG5hbWUsIGNoZWNrIGlmIHRoZSBiYXNlIFVSSSBoYXMgY2hhbmdlZCBmb3IgdGhlIHBhY2thZ2UsCiAgICAgICAgLy8gaWYgaXQgaGFzLCB0cmFuc2xhdGUgdGhlIFVSSSBhZ2FpbiwKICAgICAgICAvLyBvdGhlcndpc2UgdGhlIFVSSSBjYW5ub3QgaGF2ZSBjaGFuZ2VkLgogICAgICAgIFN0cmluZyBwYXRoID0gaW1wb3J0VXJpLnBhdGg7CiAgICAgICAgaW50IGZpcnN0U2xhc2ggPSBwYXRoLmluZGV4T2YoJy8nKTsKICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBwYXRoLnN1YnN0cmluZygwLCBmaXJzdFNsYXNoKTsKICAgICAgICBpZiAocHJldmlvdXNQYWNrYWdlc01hcCA9PSBudWxsIHx8CiAgICAgICAgICAgIChwcmV2aW91c1BhY2thZ2VzTWFwW3BhY2thZ2VOYW1lXSAhPQogICAgICAgICAgICAgICAgY3VycmVudFBhY2thZ2VzTWFwW3BhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgIFVyaSBuZXdGaWxlVXJpID0gdXJpVHJhbnNsYXRvci50cmFuc2xhdGUoaW1wb3J0VXJpLCBmYWxzZSk7CiAgICAgICAgICBpZiAobmV3RmlsZVVyaSAhPSBmaWxlVXJpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYnVpbGRlcnNbaW1wb3J0VXJpXT8uaXNTeW50aGV0aWMgPz8gZmFsc2UpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYWRkQnVpbGRlckFuZEludmFsaWRhdGVVcmlzKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKHVyaS5zY2hlbWUgPT0gImRhcnQiICYmICFsaWJyYXJ5LmlzU3ludGhldGljKSB7CiAgICAgICAgcmVzdWx0LmFkZChsaWJyYXJ5KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYnVpbGRlcnNbdXJpXSA9IGxpYnJhcnk7CiAgICAgIGlmIChpc0ludmFsaWRhdGVkKHVyaSwgbGlicmFyeS50YXJnZXQuZmlsZVVyaSkpIHsKICAgICAgICBpbnZhbGlkYXRlZEltcG9ydFVyaXMuYWRkKHVyaSk7CiAgICAgIH0KICAgICAgaWYgKGxpYnJhcnkgaXMgU291cmNlTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIHBhcnQgaW4gbGlicmFyeS5wYXJ0cykgewogICAgICAgICAgaWYgKGlzSW52YWxpZGF0ZWQocGFydC51cmksIHBhcnQuZmlsZVVyaSkpIHsKICAgICAgICAgICAgaW52YWxpZGF0ZWRJbXBvcnRVcmlzLmFkZChwYXJ0LnVyaSk7CiAgICAgICAgICAgIGJ1aWxkZXJzW3BhcnQudXJpXSA9IHBhcnQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxpYnJhcnkgaXMgRGlsbExpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgZm9yIChMaWJyYXJ5UGFydCBwYXJ0IGluIGxpYnJhcnkudGFyZ2V0LnBhcnRzKSB7CiAgICAgICAgICBVcmkgcGFydFVyaSA9IGxpYnJhcnkudXJpLnJlc29sdmUocGFydC5wYXJ0VXJpKTsKICAgICAgICAgIFVyaSBmaWxlVXJpID0KICAgICAgICAgICAgICBnZXRQYXJ0RmlsZVVyaShsaWJyYXJ5LmxpYnJhcnkuZmlsZVVyaSwgcGFydCwgdXJpVHJhbnNsYXRvcik7CgogICAgICAgICAgaWYgKGlzSW52YWxpZGF0ZWQocGFydFVyaSwgZmlsZVVyaSkpIHsKICAgICAgICAgICAgaW52YWxpZGF0ZWRJbXBvcnRVcmlzLmFkZChwYXJ0VXJpKTsKICAgICAgICAgICAgYnVpbGRlcnNbcGFydFVyaV0gPSBsaWJyYXJ5OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmICh1c2VyQ29kZSAhPSBudWxsKSB7CiAgICAgIC8vIHVzZXJDb2RlIGFscmVhZHkgY29udGFpbnMgdGhlIGJ1aWxkZXJzIGZyb20gdXNlckJ1aWxkZXJzLgogICAgICB1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnMuZm9yRWFjaChhZGRCdWlsZGVyQW5kSW52YWxpZGF0ZVVyaXMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gdXNlckNvZGUgd2FzIG51bGwgc28gd2UgZXhwbGljaXRseSBoYXZlIHRvIGFkZCB0aGUgYnVpbGRlcnMgZnJvbQogICAgICAvLyB1c2VyQnVpbGRlcnMgKHdoaWNoIGNhbm5vdCBiZSBudWxsIGFzIHdlIGNoZWNrZWQgaW5pdGlhbGx5IHRoYXQgb25lIG9mCiAgICAgIC8vIHRoZW0gd2FzIG5vbi1udWxsKS4KICAgICAgdXNlckJ1aWxkZXJzLmZvckVhY2goYWRkQnVpbGRlckFuZEludmFsaWRhdGVVcmlzKTsKICAgIH0KCiAgICByZWNvcmRJbnZhbGlkYXRlZEltcG9ydFVyaXNGb3JUZXN0aW5nKGludmFsaWRhdGVkSW1wb3J0VXJpcyk7CgogICAgQnVpbGRlckdyYXBoIGdyYXBoID0gbmV3IEJ1aWxkZXJHcmFwaChidWlsZGVycyk7CgogICAgLy8gQ29tcHV0ZSBkaXJlY3QgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGltcG9ydCBVUkkgKHRoZSByZXZlcnNlIG9mIHRoZQogICAgLy8gZWRnZXMgcmV0dXJuZWQgYnkgYGdyYXBoLm5laWdoYm9yc09mYCkuCiAgICBNYXA8VXJpLCBTZXQ8VXJpPj4gZGlyZWN0RGVwZW5kZW5jaWVzID0gPFVyaSwgU2V0PFVyaT4+e307CiAgICBmb3IgKFVyaSB2ZXJ0ZXggaW4gZ3JhcGgudmVydGljZXMpIHsKICAgICAgZm9yIChVcmkgbmVpZ2hib3IgaW4gZ3JhcGgubmVpZ2hib3JzT2YodmVydGV4KSkgewogICAgICAgIChkaXJlY3REZXBlbmRlbmNpZXNbbmVpZ2hib3JdID8/PSBuZXcgU2V0PFVyaT4oKSkuYWRkKHZlcnRleCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBSZW1vdmUgYWxsIGRlcGVuZGVuY2llcyBvZiBbaW52YWxpZGF0ZWRJbXBvcnRVcmlzXSBmcm9tIGJ1aWxkZXJzLgogICAgTGlzdDxVcmk+IHdvcmtMaXN0ID0gaW52YWxpZGF0ZWRJbXBvcnRVcmlzOwogICAgd2hpbGUgKHdvcmtMaXN0LmlzTm90RW1wdHkpIHsKICAgICAgVXJpIHJlbW92ZWQgPSB3b3JrTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIExpYnJhcnlCdWlsZGVyIGN1cnJlbnQgPSBidWlsZGVycy5yZW1vdmUocmVtb3ZlZCk7CiAgICAgIC8vIFtjdXJyZW50XSBpcyBudWxsIGlmIHRoZSBjb3JyZXNwb25kaW5nIGtleSAoVVJJKSBoYXMgYWxyZWFkeSBiZWVuCiAgICAgIC8vIHJlbW92ZWQuCiAgICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgICBTZXQ8VXJpPiBzID0gZGlyZWN0RGVwZW5kZW5jaWVzW2N1cnJlbnQudXJpXTsKICAgICAgICBpZiAoY3VycmVudC51cmkgIT0gcmVtb3ZlZCkgewogICAgICAgICAgaWYgKHMgPT0gbnVsbCkgewogICAgICAgICAgICBzID0gZGlyZWN0RGVwZW5kZW5jaWVzW3JlbW92ZWRdOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5hZGRBbGwoZGlyZWN0RGVwZW5kZW5jaWVzW3JlbW92ZWRdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMgIT0gbnVsbCkgewogICAgICAgICAgLy8gW3NdIGlzIG51bGwgZm9yIGxlYXZlcy4KICAgICAgICAgIGZvciAoVXJpIGRlcGVuZGVuY3kgaW4gcykgewogICAgICAgICAgICB3b3JrTGlzdC5hZGQoZGVwZW5kZW5jeSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG5vdFJldXNlZD8uYWRkKGN1cnJlbnQpOwogICAgICB9CiAgICB9CgogICAgLy8gQnVpbGRlcnMgY29udGFpbiBtYXBwaW5ncyBmcm9tIHBhcnQgdXJpIHRvIGJ1aWxkZXIsIG1lYW5pbmcgdGhlIHNhbWUKICAgIC8vIGJ1aWxkZXIgY2FuIGV4aXN0IG11bHRpcGxlIHRpbWVzIGluIHRoZSB2YWx1ZXMgbGlzdC4KICAgIFNldDxVcmk+IHNlZW5VcmlzID0gbmV3IFNldDxVcmk+KCk7CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgIGlmIChidWlsZGVyLmlzUGFydCkgY29udGludWU7CiAgICAgIC8vIFRPRE8oamVuc2ovYWhlKTogVGhpcyBsaW5lIGNhbiBwcm9iYWJseSBnbyBhd2F5IG9uY2UKICAgICAgLy8gaHR0cHM6Ly9kYXJ0LXJldmlldy5nb29nbGVzb3VyY2UuY29tLzQ3NDQyIGxhbmRzLgogICAgICBpZiAoYnVpbGRlci5pc1BhdGNoKSBjb250aW51ZTsKICAgICAgaWYgKCFzZWVuVXJpcy5hZGQoYnVpbGRlci51cmkpKSBjb250aW51ZTsKICAgICAgcmVzdWx0LmFkZChidWlsZGVyKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGludmFsaWRhdGUoVXJpIHVyaSkgewogICAgaW52YWxpZGF0ZWRVcmlzLmFkZCh1cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbnZhbGlkYXRlQWxsU291cmNlcygpIHsKICAgIGlmICh1c2VyQ29kZSAhPSBudWxsKSB7CiAgICAgIFNldDxVcmk+IHVyaXMgPSBuZXcgU2V0PFVyaT4uZnJvbSh1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnMua2V5cyk7CiAgICAgIHVyaXMucmVtb3ZlQWxsKGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5rZXlzKTsKICAgICAgaW52YWxpZGF0ZWRVcmlzLmFkZEFsbCh1cmlzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0TW9kdWxlc1RvTG9hZE9uTmV4dENvbXB1dGVEZWx0YShMaXN0PENvbXBvbmVudD4gY29tcG9uZW50cykgewogICAgbW9kdWxlc1RvTG9hZCA9IGNvbXBvbmVudHMudG9MaXN0KCk7CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIHZvaWQgcmVjb3JkTm9uRnVsbENvbXBvbmVudEZvclRlc3RpbmcoQ29tcG9uZW50IGNvbXBvbmVudCkge30KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHJlY29y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bGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gSW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBjb21waWxlciBBUEkgaW4gJy4uL2NvbXBpbGVyX25ldy5kYXJ0JyB0aHJvdWdoIHRoZQovLy8gb2xkIGNvbXBpbGVyIEFQSSBpbiAnLi4vY29tcGlsZXIuZGFydCcuCgpsaWJyYXJ5IGNvbXBpbGVyLmFwaS5sZWdhY3k7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRXZlbnRTaW5rLCBGdXR1cmU7CmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IHV0Zjg7CgppbXBvcnQgJy4uL2NvbXBpbGVyLmRhcnQnOwppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKaW1wb3J0ICdpby9zb3VyY2VfZmlsZS5kYXJ0JzsKaW1wb3J0ICdudWxsX2NvbXBpbGVyX291dHB1dC5kYXJ0JyBzaG93IE51bGxTaW5rOwoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtDb21waWxlcklucHV0XSB1c2luZyBhIFtDb21waWxlcklucHV0UHJvdmlkZXJdLgpjbGFzcyBMZWdhY3lDb21waWxlcklucHV0IGltcGxlbWVudHMgQ29tcGlsZXJJbnB1dCB7CiAgZmluYWwgQ29tcGlsZXJJbnB1dFByb3ZpZGVyIF9pbnB1dFByb3ZpZGVyOwoKICBMZWdhY3lDb21waWxlcklucHV0KHRoaXMuX2lucHV0UHJvdmlkZXIpOwoKICBAb3ZlcnJpZGUKICBGdXR1cmU8SW5wdXQ+IHJlYWRGcm9tVXJpKFVyaSB1cmksIHtJbnB1dEtpbmQgaW5wdXRLaW5kOiBJbnB1dEtpbmQuVVRGOH0pIHsKICAgIC8vIFRoZSBzd2l0Y2ggaGFuZGxlcyBhbGwgZW51bSB2YWx1ZXMsIGJ1dCBub3QgbnVsbC4KICAgIC8vIGlnbm9yZTogbWlzc2luZ19yZXR1cm4KICAgIHJldHVybiBfaW5wdXRQcm92aWRlcih1cmkpLnRoZW4oKC8qU3RyaW5nfExpc3Q8aW50PiovIGRhdGEpIHsKICAgICAgc3dpdGNoIChpbnB1dEtpbmQpIHsKICAgICAgICBjYXNlIElucHV0S2luZC5VVEY4OgogICAgICAgICAgU291cmNlRmlsZSBzb3VyY2VGaWxlOwogICAgICAgICAgaWYgKGRhdGEgaXMgTGlzdDxpbnQ+KSB7CiAgICAgICAgICAgIHNvdXJjZUZpbGUgPSBuZXcgVXRmOEJ5dGVzU291cmNlRmlsZSh1cmksIGRhdGEpOwogICAgICAgICAgfSBlbHNlIGlmIChkYXRhIGlzIFN0cmluZykgewogICAgICAgICAgICBzb3VyY2VGaWxlID0gbmV3IFN0cmluZ1NvdXJjZUZpbGUuZnJvbVVyaSh1cmksIGRhdGEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgIkV4cGVjdGVkIGEgJ1N0cmluZycgb3IgYSAnTGlzdDxpbnQ+JyBmcm9tIHRoZSBpbnB1dCAiCiAgICAgICAgICAgICAgICAicHJvdmlkZXIsIGJ1dCBnb3Q6ICR7RXJyb3Iuc2FmZVRvU3RyaW5nKGRhdGEpfS4iOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHNvdXJjZUZpbGU7CiAgICAgICAgY2FzZSBJbnB1dEtpbmQuYmluYXJ5OgogICAgICAgICAgaWYgKGRhdGEgaXMgU3RyaW5nKSB7CiAgICAgICAgICAgIGRhdGEgPSB1dGY4LmVuY29kZShkYXRhKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuZXcgQmluYXJ5KHVyaSwgZGF0YSk7CiAgICAgIH0KICAgIH0pOwogIH0KfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtDb21waWxlckRpYWdub3N0aWNzXSB1c2luZyBhIFtEaWFnbm9zdGljSGFuZGxlcl0uCmNsYXNzIExlZ2FjeUNvbXBpbGVyRGlhZ25vc3RpY3MgaW1wbGVtZW50cyBDb21waWxlckRpYWdub3N0aWNzIHsKICBmaW5hbCBEaWFnbm9zdGljSGFuZGxlciBfaGFuZGxlcjsKCiAgTGVnYWN5Q29tcGlsZXJEaWFnbm9zdGljcyh0aGlzLl9oYW5kbGVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnQoCiAgICAgIHZhciBjb2RlLCBVcmkgdXJpLCBpbnQgYmVnaW4sIGludCBlbmQsIFN0cmluZyBtZXNzYWdlLCBEaWFnbm9zdGljIGtpbmQpIHsKICAgIF9oYW5kbGVyKHVyaSwgYmVnaW4sIGVuZCwgbWVzc2FnZSwga2luZCk7CiAgfQp9CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW0NvbXBpbGVyT3V0cHV0XSB1c2luZyBhbiBvcHRpb25hbAovLy8gW0NvbXBpbGVyT3V0cHV0UHJvdmlkZXJdLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgUHViIHRvIHVzZSB0aGUgbmV3IGludGVyZmFjZSBhbmQgcmVtb3ZlIHRoaXMuCmNsYXNzIExlZ2FjeUNvbXBpbGVyT3V0cHV0IGltcGxlbWVudHMgQ29tcGlsZXJPdXRwdXQgewogIGZpbmFsIENvbXBpbGVyT3V0cHV0UHJvdmlkZXIgX291dHB1dFByb3ZpZGVyOwoKICBMZWdhY3lDb21waWxlck91dHB1dChbdGhpcy5fb3V0cHV0UHJvdmlkZXJdKTsKCiAgQG92ZXJyaWRlCiAgT3V0cHV0U2luayBjcmVhdGVPdXRwdXRTaW5rKFN0cmluZyBuYW1lLCBTdHJpbmcgZXh0ZW5zaW9uLCBPdXRwdXRUeXBlIHR5cGUpIHsKICAgIGlmIChfb3V0cHV0UHJvdmlkZXIgIT0gbnVsbCkgewogICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICBjYXNlIE91dHB1dFR5cGUuZHVtcEluZm86CiAgICAgICAgY2FzZSBPdXRwdXRUeXBlLmRlZmVycmVkTWFwOgogICAgICAgICAgaWYgKGV4dGVuc2lvbiA9PSAnJykgewogICAgICAgICAgICAvLyBOZWVkZWQgdG8gbWFrZSBQdWIgZ2VuZXJhdGUgdGhlIHNhbWUgb3V0cHV0IG5hbWUuCiAgICAgICAgICAgIGV4dGVuc2lvbiA9ICdkZWZlcnJlZF9tYXAnOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgfQogICAgICByZXR1cm4gbmV3IExlZ2FjeU91dHB1dFNpbmsoX291dHB1dFByb3ZpZGVyKG5hbWUsIGV4dGVuc2lvbikpOwogICAgfQogICAgcmV0dXJuIE51bGxTaW5rLm91dHB1dFByb3ZpZGVyKG5hbWUsIGV4dGVuc2lvbiwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBCaW5hcnlPdXRwdXRTaW5rIGNyZWF0ZUJpbmFyeVNpbmsoVXJpIHVyaSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkxlZ2FjeUNvbXBpbGVyT3V0cHV0LmNyZWF0ZUJpbmFyeVNpbmsiKTsKICB9Cn0KCmNsYXNzIExlZ2FjeU91dHB1dFNpbmsgaW1wbGVtZW50cyBPdXRwdXRTaW5rIHsKICBmaW5hbCBFdmVudFNpbms8U3RyaW5nPiBzaW5rOwoKICBMZWdhY3lPdXRwdXRTaW5rKHRoaXMuc2luayk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkKFN0cmluZyBldmVudCkgPT4gc2luay5hZGQoZXZlbnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgPT4gc2luay5jbG9zZSgpOwp9CmwATk48AVEsAR0BLCEBGx8eMgFHNS4BLAEMTjkeQhsdISM9J0ITSUMMHR8gJgwoCAgEAgFJQSQBLAEMD1AuBAIBOR5NNzABMAEMUCMWIiUhQSgMEREIRQY7BAEML0kEAgEvIAEfAQwtAQwgAgEocGFja2FnZTpjb21waWxlci9zcmMvb2xkX3RvX25ld19hcGkuZGFydC9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb24vdGFza3MuZGFydKXbLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb21tb24udGFza3M7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnCiAgICBzaG93IEZ1dHVyZSwgWm9uZSwgWm9uZURlbGVnYXRlLCBab25lU3BlY2lmaWNhdGlvbiwgcnVuWm9uZWQ7CgovLy8gVXNlZCB0byBtZWFzdXJlIHdoZXJlIHRpbWUgaXMgc3BlbnQgaW4gdGhlIGNvbXBpbGVyLgovLy8KLy8vIFRoaXMgZXhwb3NlcyBbbWVhc3VyZV0gYW5kIFttZWFzdXJlSW9dLCB3aGljaCB3cmFwIGFuIGFjdGlvbiBhbmQgYXNzb2NpYXRlCi8vLyB0aGUgdGltZSBzcGVudCBkdXJpbmcgdGhhdCBhY3Rpb24gd2l0aCB0aGlzIHRhc2suIE5lc3RlZCBtZWFzdXJlbWVudHNjY2FuIGJlCi8vLyBpbnRyb2R1Y2VkIGJ5IHVzaW5nIFttZWFzdXJlU3VidGFza10uCi8vIFRPRE8oc2lnbXVuZCk6IHJlbmFtZSB0byBNZWFzdXJhYmxlVGFzawphYnN0cmFjdCBjbGFzcyBDb21waWxlclRhc2sgewogIGZpbmFsIE1lYXN1cmVyIF9tZWFzdXJlcjsKICBmaW5hbCBTdG9wd2F0Y2ggX3dhdGNoOwogIGZpbmFsIE1hcDxTdHJpbmcsIEdlbmVyaWNUYXNrPiBfc3VidGFza3MgPSA8U3RyaW5nLCBHZW5lcmljVGFzaz57fTsKCiAgaW50IF9hc3luY0NvdW50ID0gMDsKCiAgLy8gRWFjaCB0YXNrIGhhcyBhIGZpeGVkLCBsYXppbHkgY29tcHV0ZWQsIFpvbmVTcGVjaWZpY2F0aW9uIGFuZCB6b25lVmFsdWVzCiAgLy8gZm9yIFtfbWVhc3VyZVpvbmVkXS4KICBab25lU3BlY2lmaWNhdGlvbiBfem9uZVNwZWNpZmljYXRpb247CiAgTWFwIF96b25lVmFsdWVzOwoKICBDb21waWxlclRhc2sodGhpcy5fbWVhc3VyZXIpCiAgICAgIDogX3dhdGNoID0gX21lYXN1cmVyLmVuYWJsZVRhc2tNZWFzdXJlbWVudHMgPyBuZXcgU3RvcHdhdGNoKCkgOiBudWxsOwoKICAvLy8gV2hldGhlciBtZWFzdXJlbWVudCBpcyBkaXNhYmxlZC4gVGhlIGZ1bmN0aW9ucyBbbWVhc3VyZV0gYW5kIFttZWFzdXJlSW9dCiAgLy8vIG9ubHkgbWVhc3VyZSB0aW1lIGlmIG1lYXN1cmVtZW50cyBhcmUgZW5hYmxlZC4KICBib29sIGdldCBfaXNEaXNhYmxlZCA9PiBfd2F0Y2ggPT0gbnVsbDsKCiAgLy8vIE5hbWUgdG8gdXNlIGZvciByZXBvcnRpbmcgdGltaW5nIGluZm9ybWF0aW9uLgogIC8vLwogIC8vLyBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIHdpdGggYSBwcm9wZXIgbmFtZSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUKICAvLy8gcnVudGltZSB0eXBlIG9mIHRoZSB0YXNrLgogIFN0cmluZyBnZXQgbmFtZSA9PiAiVW5rbm93biB0YXNrICcke3RoaXMucnVudGltZVR5cGV9JyI7CgogIGJvb2wgZ2V0IGlzUnVubmluZyA9PiBfd2F0Y2g/LmlzUnVubmluZyA9PSB0cnVlOwoKICBpbnQgZ2V0IHRpbWluZyB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybiAwOwogICAgaW50IHRvdGFsID0gX3dhdGNoLmVsYXBzZWRNaWxsaXNlY29uZHM7CiAgICBmb3IgKEdlbmVyaWNUYXNrIHN1YnRhc2sgaW4gX3N1YnRhc2tzLnZhbHVlcykgewogICAgICB0b3RhbCArPSBzdWJ0YXNrLnRpbWluZzsKICAgIH0KICAgIHJldHVybiB0b3RhbDsKICB9CgogIER1cmF0aW9uIGdldCBkdXJhdGlvbiB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybiBEdXJhdGlvbi56ZXJvOwogICAgRHVyYXRpb24gdG90YWwgPSBfd2F0Y2guZWxhcHNlZDsKICAgIGZvciAoR2VuZXJpY1Rhc2sgc3VidGFzayBpbiBfc3VidGFza3MudmFsdWVzKSB7CiAgICAgIHRvdGFsICs9IHN1YnRhc2suZHVyYXRpb247CiAgICB9CiAgICByZXR1cm4gdG90YWw7CiAgfQoKICAvLy8gUGVyZm9ybSBbYWN0aW9uXSBhbmQgbWVhc3VyZSBpdHMgcnVudGltZSAoaW5jbHVkaW5nIGFueSBhc3luY2hyb25vdXMKICAvLy8gY2FsbGJhY2tzLCBzdWNoIGFzLCBbRnV0dXJlLnRoZW5dLCBidXQgZXhjbHVkaW5nIGNvZGUgbWVhc3VyZWQgYnkgb3RoZXIKICAvLy8gdGFza3MpLgogIFQgbWVhc3VyZTxUPihUIGFjdGlvbigpKSA9PiBfaXNEaXNhYmxlZCA/IGFjdGlvbigpIDogX21lYXN1cmVab25lZChhY3Rpb24pOwoKICAvLy8gSGVscGVyIG1ldGhvZCB0aGF0IHN0YXJ0cyBtZWFzdXJpbmcgd2l0aCB0aGlzIFtDb21waWxlclRhc2tdLCB0aGF0IGlzLAogIC8vLyBtYWtlIHRoaXMgdGFzayB0aGUgY3VycmVudGx5IG1lYXN1cmVkIHRhc2suCiAgQ29tcGlsZXJUYXNrIF9zdGFydCgpIHsKICAgIGlmIChfaXNEaXNhYmxlZCkgcmV0dXJuIG51bGw7CiAgICBDb21waWxlclRhc2sgcHJldmlvdXMgPSBfbWVhc3VyZXIuX2N1cnJlbnRUYXNrOwogICAgX21lYXN1cmVyLl9jdXJyZW50VGFzayA9IHRoaXM7CiAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgcHJldmlvdXMuX3dhdGNoLnN0b3AoKTsKICAgIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBbcHJldmlvdXNdIGlzIGBudWxsYCB3ZSd2ZSByZXR1cm5lZCBmcm9tIHRoZQogICAgLy8gZXZlbnRsb29wLgogICAgX21lYXN1cmVyLnN0b3BBc3luY1dhbGxDbG9jaygpOwogICAgX3dhdGNoLnN0YXJ0KCk7CiAgICByZXR1cm4gcHJldmlvdXM7CiAgfQoKICAvLy8gSGVscGVyIG1ldGhvZCB0aGF0IHN0b3BzIG1lYXN1cmluZyB3aXRoIHRoaXMgW0NvbXBpbGVyVGFza10sIHRoYXQgaXMsCiAgLy8vIG1ha2UgW3ByZXZpb3VzXSB0aGUgY3VycmVudGx5IG1lYXN1cmVkIHRhc2suCiAgdm9pZCBfc3RvcChDb21waWxlclRhc2sgcHJldmlvdXMpIHsKICAgIGlmIChfaXNEaXNhYmxlZCkgcmV0dXJuOwogICAgX3dhdGNoLnN0b3AoKTsKICAgIGlmIChwcmV2aW91cyAhPSBudWxsKSB7CiAgICAgIHByZXZpb3VzLl93YXRjaC5zdGFydCgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gSWYgdGhlcmUncyBubyBwcmV2aW91cyB0YXNrLCB3ZSdyZSBhYm91dCB0byByZXR1cm4gY29udHJvbCB0byB0aGUKICAgICAgLy8gZXZlbnQgbG9vcC4gU3RhcnQgY291bnRpbmcgdGhhdCBhcyB3YWl0aW5nIGFzeW5jaHJvbm91cyBJL08uCiAgICAgIF9tZWFzdXJlci5zdGFydEFzeW5jV2FsbENsb2NrKCk7CiAgICB9CiAgICBfbWVhc3VyZXIuX2N1cnJlbnRUYXNrID0gcHJldmlvdXM7CiAgfQoKICBUIF9tZWFzdXJlWm9uZWQ8VD4oVCBhY3Rpb24oKSkgewogICAgLy8gVXNpbmcgem9uZXMsIHdlJ3JlIGFibGUgdG8gdHJhY2sgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgY29ycmVjdGx5LCBhcwogICAgLy8gb3VyIHpvbmUgd2lsbCBiZSBhc2tlZCB0byBpbnZva2UgYHRoZW5gIGJsb2Nrcy4gVGhlbiBibG9ja3MgKHRoZSBjbG9zdXJlCiAgICAvLyBwYXNzZWQgdG8gcnVuWm9uZWQsIGFuZCBvdGhlciBjbG9zdXJlcykgYXJlIHJ1biB2aWEgdGhlIGBydW5gIGZ1bmN0aW9ucwogICAgLy8gYmVsb3cuCgogICAgYXNzZXJ0KF93YXRjaCAhPSBudWxsKTsKCiAgICAvLyBUaGUgY3VycmVudCB6b25lIGlzIGFscmVhZHkgbWVhc3VyaW5nIGB0aGlzYCB0YXNrLgogICAgaWYgKFpvbmUuY3VycmVudFtfbWVhc3VyZXJdID09IHRoaXMpIHJldHVybiBhY3Rpb24oKTsKCiAgICByZXR1cm4gcnVuWm9uZWQoYWN0aW9uLAogICAgICAgIHpvbmVWYWx1ZXM6IF96b25lVmFsdWVzID8/PSB7X21lYXN1cmVyOiB0aGlzfSwKICAgICAgICB6b25lU3BlY2lmaWNhdGlvbjogX3pvbmVTcGVjaWZpY2F0aW9uID8/PSBuZXcgWm9uZVNwZWNpZmljYXRpb24oCiAgICAgICAgICAgIHJ1bjogX3J1biwgcnVuVW5hcnk6IF9ydW5VbmFyeSwgcnVuQmluYXJ5OiBfcnVuQmluYXJ5KSk7CiAgfQoKICAvLy8gUnVuIFtmXSBpbiBbem9uZV0uIFJ1bm5pbmcgbXVzdCBiZSBkZWxlZ2F0ZWQgdG8gW3BhcmVudF0gdG8gZW5zdXJlIHRoYXQKICAvLy8gdmFyaW91cyBzdGF0ZSBpcyBzZXQgdXAgY29ycmVjdGx5IChpbiBwYXJ0aWN1bGFyIHRoYXQgYFpvbmUuY3VycmVudGAKICAvLy8gaGFzIHRoZSByaWdodCB2YWx1ZSkuIFNpbmNlIFtfbWVhc3VyZVpvbmVkXSBjYW4gYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5CiAgLy8vIChzeW5jaHJvbm91c2x5KSwgc29tZSBvZiB0aGUgbWVhc3VyaW5nIHpvbmVzIHdlIGNyZWF0ZSB3aWxsIGJlIHBhcmVudHMKICAvLy8gb2Ygb3RoZXIgbWVhc3VyaW5nIHpvbmVzLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBjYWxsIHRocm91Z2ggdGhlIHBhcmVudAogIC8vLyBjaGFpbi4gQ29uc2VxdWVudGx5LCB3ZSB1c2UgYSB6b25lIHZhbHVlIGtleWVkIGJ5IFtfbWVhc3VyZXJdIHRvIHNlZSBpZgogIC8vLyB3ZSBzaG91bGQgbWVhc3VyZSBvciBub3Qgd2hlbiBkZWxlZ2F0aW5nLgogIFIgX3J1bjxSPihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBmKCkpIHsKICAgIGlmICh6b25lW19tZWFzdXJlcl0gIT0gdGhpcykgcmV0dXJuIHBhcmVudC5ydW4oem9uZSwgZik7CiAgICBDb21waWxlclRhc2sgcHJldmlvdXMgPSBfc3RhcnQoKTsKICAgIHRyeSB7CiAgICAgIHJldHVybiBwYXJlbnQucnVuKHpvbmUsIGYpOwogICAgfSBmaW5hbGx5IHsKICAgICAgX3N0b3AocHJldmlvdXMpOwogICAgfQogIH0KCiAgLy8vIFNhbWUgYXMgW3J1bl0gZXhjZXB0IHRoYXQgW2ZdIHRha2VzIG9uZSBhcmd1bWVudCwgW2FyZ10uCiAgUiBfcnVuVW5hcnk8UiwgVD4oCiAgICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoVCBhcmcpLCBUIGFyZykgewogICAgaWYgKHpvbmVbX21lYXN1cmVyXSAhPSB0aGlzKSByZXR1cm4gcGFyZW50LnJ1blVuYXJ5KHpvbmUsIGYsIGFyZyk7CiAgICBDb21waWxlclRhc2sgcHJldmlvdXMgPSBfc3RhcnQoKTsKICAgIHRyeSB7CiAgICAgIHJldHVybiBwYXJlbnQucnVuVW5hcnkoem9uZSwgZiwgYXJnKTsKICAgIH0gZmluYWxseSB7CiAgICAgIF9zdG9wKHByZXZpb3VzKTsKICAgIH0KICB9CgogIC8vLyBTYW1lIGFzIFtydW5dIGV4Y2VwdCB0aGF0IFtmXSB0YWtlcyB0d28gYXJndW1lbnRzIChbYTFdIGFuZCBbYTJdKS4KICBSIF9ydW5CaW5hcnk8UiwgVDEsIFQyPihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgICAgUiBmKFQxIGExLCBUMiBhMiksIFQxIGExLCBUMiBhMikgewogICAgaWYgKHpvbmVbX21lYXN1cmVyXSAhPSB0aGlzKSByZXR1cm4gcGFyZW50LnJ1bkJpbmFyeSh6b25lLCBmLCBhMSwgYTIpOwogICAgQ29tcGlsZXJUYXNrIHByZXZpb3VzID0gX3N0YXJ0KCk7CiAgICB0cnkgewogICAgICByZXR1cm4gcGFyZW50LnJ1bkJpbmFyeSh6b25lLCBmLCBhMSwgYTIpOwogICAgfSBmaW5hbGx5IHsKICAgICAgX3N0b3AocHJldmlvdXMpOwogICAgfQogIH0KCiAgLy8vIEFzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIFttZWFzdXJlXS4gVXNlIHRoaXMgd2hlbiBhY3Rpb24gcmV0dXJucyBhIGZ1dHVyZQogIC8vLyB0aGF0J3MgdHJ1bHkgYXN5bmNocm9ub3VzLCBzdWNoIEkvTy4gT25seSBvbmUgdGFzayBjYW4gdXNlIHRoaXMgbWV0aG9kCiAgLy8vIGNvbmN1cnJlbnRseS4KICAvLy8KICAvLy8gTm90ZTogd2UgYXNzdW1lIHRoYXQgdGhpcyBtZXRob2QgaXMgdXNlZCBvbmx5IGJ5IHRoZSBjb21waWxlciBpbnB1dAogIC8vLyBwcm92aWRlciwgYnV0IGl0IGNvdWxkIGJlIHVzZWQgYnkgb3RoZXIgdGFza3MgYXMgbG9uZyBhcyB0aGUgaW5wdXQKICAvLy8gcHJvdmlkZXIgd2lsbCBub3QgYmUgY2FsbGVkIGJ5IHRob3NlIHRhc2tzLgogIEZ1dHVyZTxUPiBtZWFzdXJlSW88VD4oRnV0dXJlPFQ+IGFjdGlvbigpKSB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybiBhY3Rpb24oKTsKCiAgICBpZiAoX21lYXN1cmVyLl9jdXJyZW50QXN5bmNUYXNrID09IG51bGwpIHsKICAgICAgX21lYXN1cmVyLl9jdXJyZW50QXN5bmNUYXNrID0gdGhpczsKICAgIH0gZWxzZSBpZiAoX21lYXN1cmVyLl9jdXJyZW50QXN5bmNUYXNrICE9IHRoaXMpIHsKICAgICAgdGhyb3cgIkNhbid0IHRyYWNrIGFzeW5jIHRhc2sgJyRuYW1lJyBiZWNhdXNlIgogICAgICAgICAgIiAnJHtfbWVhc3VyZXIuX2N1cnJlbnRBc3luY1Rhc2submFtZX0nIGlzIGFscmVhZHkgYmVpbmcgdHJhY2tlZC4iOwogICAgfQogICAgX2FzeW5jQ291bnQrKzsKICAgIHJldHVybiBtZWFzdXJlKGFjdGlvbikud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgX2FzeW5jQ291bnQtLTsKICAgICAgaWYgKF9hc3luY0NvdW50ID09IDApIF9tZWFzdXJlci5fY3VycmVudEFzeW5jVGFzayA9IG51bGw7CiAgICB9KTsKICB9CgogIC8vLyBNZWFzdXJlIHRoZSB0aW1lIHNwZW50IGluIFthY3Rpb25dIChpZiBpbiB2ZXJib3NlIG1vZGUpIGFuZCBhY2N1bXVsYXRlIGl0CiAgLy8vIHVuZGVyIGEgc3VidGFzayB3aXRoIHRoZSBnaXZlbiBuYW1lLgogIFQgbWVhc3VyZVN1YnRhc2s8VD4oU3RyaW5nIG5hbWUsIFQgYWN0aW9uKCkpIHsKICAgIGlmIChfaXNEaXNhYmxlZCkgcmV0dXJuIGFjdGlvbigpOwoKICAgIC8vIFVzZSBhIG5lc3RlZCBDb21waWxlclRhc2sgZm9yIHRoZSBtZWFzdXJlbWVudCB0byBlbnN1cmUgbmVzdGVkIFttZWFzdXJlXQogICAgLy8gY2FsbHMgd29yayBjb3JyZWN0bHkuIFRoZSBzdWJ0YXNrcyB3aWxsIG5ldmVyIHRoZW1zZWx2ZXMgaGF2ZSBuZXN0ZWQKICAgIC8vIHN1YnRhc2tzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFjY2Vzc2libGUgb3V0c2lkZS4KICAgIEdlbmVyaWNUYXNrIHN1YnRhc2sgPSBfc3VidGFza3NbbmFtZV0gPz89IG5ldyBHZW5lcmljVGFzayhuYW1lLCBfbWVhc3VyZXIpOwogICAgcmV0dXJuIHN1YnRhc2subWVhc3VyZShhY3Rpb24pOwogIH0KCiAgLy8vIEFzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIFttZWFzdXJlU3VidGFza10uIFVzZSB0aGlzIHdoZW4gYWN0aW9uIHJldHVybnMgYQogIC8vLyBmdXR1cmUgdGhhdCdzIHRydWx5IGFzeW5jaHJvbm91cywgc3VjaCBJL08uIE9ubHkgb25lIHRhc2sgY2FuIHVzZSB0aGlzCiAgLy8vIGNvbmN1cnJlbnRseS4KICAvLy8KICAvLy8gTm90ZTogd2UgYXNzdW1lIHRoYXQgdGhpcyBtZXRob2QgaXMgdXNlZCBvbmx5IGJ5IHRoZSBjb21waWxlciBpbnB1dAogIC8vLyBwcm92aWRlciwgYnV0IGl0IGNvdWxkIGJlIHVzZWQgYnkgb3RoZXIgdGFza3MgYXMgbG9uZyBhcyB0aGUgaW5wdXQKICAvLy8gcHJvdmlkZXIgd2lsbCBub3QgYmUgY2FsbGVkIGJ5IHRob3NlIHRhc2tzLgogIEZ1dHVyZTxUPiBtZWFzdXJlSW9TdWJ0YXNrPFQ+KFN0cmluZyBuYW1lLCBGdXR1cmU8VD4gYWN0aW9uKCkpIHsKICAgIGlmIChfaXNEaXNhYmxlZCkgcmV0dXJuIGFjdGlvbigpOwoKICAgIC8vIFVzZSBhIG5lc3RlZCBDb21waWxlclRhc2sgZm9yIHRoZSBtZWFzdXJlbWVudCB0byBlbnN1cmUgbmVzdGVkIFttZWFzdXJlXQogICAgLy8gY2FsbHMgd29yayBjb3JyZWN0bHkuIFRoZSBzdWJ0YXNrcyB3aWxsIG5ldmVyIHRoZW1zZWx2ZXMgaGF2ZSBuZXN0ZWQKICAgIC8vIHN1YnRhc2tzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFjY2Vzc2libGUgb3V0c2lkZS4KICAgIEdlbmVyaWNUYXNrIHN1YnRhc2sgPSBfc3VidGFza3NbbmFtZV0gPz89IG5ldyBHZW5lcmljVGFzayhuYW1lLCBfbWVhc3VyZXIpOwogICAgcmV0dXJuIHN1YnRhc2subWVhc3VyZUlvKGFjdGlvbik7CiAgfQoKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBzdWJ0YXNrcyA9PiBfc3VidGFza3Mua2V5czsKCiAgaW50IGdldFN1YnRhc2tUaW1lKFN0cmluZyBzdWJ0YXNrKSA9PiBfc3VidGFza3Nbc3VidGFza10udGltaW5nOwoKICBib29sIGdldFN1YnRhc2tJc1J1bm5pbmcoU3RyaW5nIHN1YnRhc2spID0+IF9zdWJ0YXNrc1tzdWJ0YXNrXS5pc1J1bm5pbmc7Cn0KCmNsYXNzIEdlbmVyaWNUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBHZW5lcmljVGFzayh0aGlzLm5hbWUsIE1lYXN1cmVyIG1lYXN1cmVyKSA6IHN1cGVyKG1lYXN1cmVyKTsKfQoKY2xhc3MgTWVhc3VyZXIgewogIC8vLyBNZWFzdXJlcyB0aGUgdG90YWwgcnVudGltZSBmcm9tIHRoaXMgb2JqZWN0IHdhcyBjb25zdHJ1Y3RlZC4KICAvLy8KICAvLy8gTm90ZTogTVVTVCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhpcyBjbGFzcyB0byBlbnN1cmUgW3dhbGxjbG9ja10gaXMKICAvLy8gc3RhcnRlZCBiZWZvcmUgb3RoZXIgY29tcHV0YXRpb25zLgogIGZpbmFsIFN0b3B3YXRjaCBfd2FsbENsb2NrID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwoKICBEdXJhdGlvbiBnZXQgZWxhcHNlZFdhbGxDbG9jayA9PiBfd2FsbENsb2NrLmVsYXBzZWQ7CgogIC8vLyBNZWFzdXJlcyBnYXBzIGJldHdlZW4gem9uZWQgY2xvc3VyZXMgZHVlIHRvIGFzeW5jaHJvbmljaXR5LgogIGZpbmFsIFN0b3B3YXRjaCBfYXN5bmNXYWxsQ2xvY2sgPSBuZXcgU3RvcHdhdGNoKCk7CgogIER1cmF0aW9uIGdldCBlbGFwc2VkQXN5bmNXYWxsQ2xvY2sgPT4gX2FzeW5jV2FsbENsb2NrLmVsYXBzZWQ7CgogIC8vLyBXaGV0aGVyIG1lYXN1cmVtZW50IG9mIHRhc2tzIGlzIGVuYWJsZWQuCiAgZmluYWwgYm9vbCBlbmFibGVUYXNrTWVhc3VyZW1lbnRzOwoKICBzdGF0aWMgaW50IF9oYXNoQ29kZUdlbmVyYXRvciA9IDE5NzsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGUgPSBfaGFzaENvZGVHZW5lcmF0b3IrKzsKCiAgTWVhc3VyZXIoe3RoaXMuZW5hYmxlVGFza01lYXN1cmVtZW50czogZmFsc2V9KTsKCiAgLy8vIFRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLCB0aGF0IGlzLCB0aGUgdGFzayB3aG9zZSBbU3RvcHdhdGNoXSBpcwogIC8vLyBjdXJyZW50bHkgcnVubmluZy4KICBDb21waWxlclRhc2sgX2N1cnJlbnRUYXNrOwoKICAvLy8gVGhlIGN1cnJlbnQgdGFzayB3aGljaCBzaG91bGQgYmUgY2hhcmdlZCBmb3IgYXN5bmNocm9ub3VzIGdhcHMuCiAgQ29tcGlsZXJUYXNrIF9jdXJyZW50QXN5bmNUYXNrOwoKICAvLy8gU3RhcnQgY291bnRpbmcgdGhlIHRvdGFsIGVsYXBzZWQgdGltZSBzaW5jZSB0aGUgY29tcGlsZXIgc3RhcnRlZC4KICB2b2lkIHN0YXJ0V2FsbENsb2NrKCkgewogICAgX3dhbGxDbG9jay5zdGFydCgpOwogIH0KCiAgLy8vIFN0YXJ0IGNvdW50aW5nIHRoZSB0b3RhbCBlbGFwc2VkIHRpbWUgc2luY2UgdGhlIGNvbXBpbGVyIHN0YXJ0ZWQuCiAgdm9pZCBzdG9wV2FsbENsb2NrKCkgewogICAgX3dhbGxDbG9jay5zdG9wKCk7CiAgfQoKICAvLy8gQ2FsbCB0aGlzIGJlZm9yZSByZXR1cm5pbmcgdG8gdGhlIGV2ZW50bG9vcC4KICB2b2lkIHN0YXJ0QXN5bmNXYWxsQ2xvY2soKSB7CiAgICBpZiAoX2N1cnJlbnRBc3luY1Rhc2sgIT0gbnVsbCkgewogICAgICBfY3VycmVudEFzeW5jVGFzay5fd2F0Y2guc3RhcnQoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9hc3luY1dhbGxDbG9jay5zdGFydCgpOwogICAgfQogIH0KCiAgLy8vIENhbGwgdGhpcyB3aGVuIHRoZSBldmVudGxvb3AgcmV0dXJucyBjb250cm9sIHRvIHVzLgogIHZvaWQgc3RvcEFzeW5jV2FsbENsb2NrKCkgewogICAgaWYgKF9jdXJyZW50QXN5bmNUYXNrICE9IG51bGwpIHsKICAgICAgX2N1cnJlbnRBc3luY1Rhc2suX3dhdGNoLnN0b3AoKTsKICAgIH0KICAgIF9hc3luY1dhbGxDbG9jay5zdG9wKCk7CiAgfQp9CoEUAE5OPAEeARRCATkET1EqKx4cGkYBFwFOGigTAR9MAU81KgE0Bk8gOwEzARMfLDQfBhIEARorJTQhBhIEAUtODk4BTTIaIjQjMkoSJBQVBAFMMyYdExwfDUtGJwYnBAEjTlBPDgEcATo6ARw3SUUEAU5LTE1NTjBAPSYKIhAXBgQBPxVGRyYKLBAXBgQBSUUpSyYKMBAXBgQBT00UBkpJMi8mAS8qNjVOBhMtFUAIBAFQKzEmAVBMOVAkBAFPTRQGSkkyQyYBUEw5UCYEATMBQwFMAgEpDBU/AgERQwZLKTkBNwFCNQFBAS8lAScMLQEyAUkZHQFGIgFIGhgEAUgZFwQBMx8lKA0fBgQBOh4lJwYcBAIBJnBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1vbi90YXNrcy5kYXJ0KXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2NvbW1vbi5kYXJ0g1gvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIExpYnJhcnkgdGhhdCByZS1leHBvcnRzIGxpYnJhcmllcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvbXBpbGVyIHJlZ2FyZGxlc3MKLy8vIG9mIHBoYXNlIG9yIHN1YmZ1bmN0aW9uYWxpdHkuCmxpYnJhcnkgZGFydDJqcy5jb21tb247CgpleHBvcnQgJ2RpYWdub3N0aWNzL2RpYWdub3N0aWNfbGlzdGVuZXIuZGFydCcKICAgIHNob3cgRGlhZ25vc3RpY01lc3NhZ2UsIERpYWdub3N0aWNSZXBvcnRlcjsKZXhwb3J0ICdkaWFnbm9zdGljcy9pbnZhcmlhbnQuZGFydCcgc2hvdyBhc3NlcnREZWJ1Z01vZGUsIGZhaWxlZEF0OwpleHBvcnQgJ2RpYWdub3N0aWNzL21lc3NhZ2VzLmRhcnQnIHNob3cgTWVzc2FnZUtpbmQ7CmV4cG9ydCAnZGlhZ25vc3RpY3Mvc291cmNlX3NwYW4uZGFydCcgc2hvdyBTb3VyY2VTcGFuOwpleHBvcnQgJ2RpYWdub3N0aWNzL3NwYW5uYWJsZS5kYXJ0JwogICAgc2hvdwogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgIFNwYW5uYWJsZSwKICAgICAgICBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlOwpleHBvcnQgJ2hlbHBlcnMvaGVscGVycy5kYXJ0JzsKCmJvb2wgcmV0YWluRGF0YUZvclRlc3RpbmcgPSBmYWxzZTsKGABOTjwBTiIYAS4wRDU3JAkjHxMjHwEjASBwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24uZGFydCtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21waWxlci5kYXJ0wACKPC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29tcGlsZXJfYmFzZTsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JwogICAgc2hvdyBjbGVhclN0cmluZ1Rva2VuQ2Fub25pY2FsaXplcjsKCmltcG9ydCAnLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKaW1wb3J0ICdiYWNrZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IFNlbGVjdG9ycywgVXJpczsKaW1wb3J0ICdjb21tb24vdGFza3MuZGFydCcgc2hvdyBDb21waWxlclRhc2ssIEdlbmVyaWNUYXNrLCBNZWFzdXJlcjsKaW1wb3J0ICdjb21tb24vd29yay5kYXJ0JyBzaG93IFdvcmtJdGVtOwppbXBvcnQgJ2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICdjb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnZGVmZXJyZWRfbG9hZC5kYXJ0JyBzaG93IERlZmVycmVkTG9hZFRhc2ssIE91dHB1dFVuaXREYXRhOwppbXBvcnQgJ2RpYWdub3N0aWNzL2NvZGVfbG9jYXRpb24uZGFydCc7CmltcG9ydCAnZGlhZ25vc3RpY3MvZGlhZ25vc3RpY19saXN0ZW5lci5kYXJ0JyBzaG93IERpYWdub3N0aWNSZXBvcnRlcjsKaW1wb3J0ICdkaWFnbm9zdGljcy9tZXNzYWdlcy5kYXJ0JyBzaG93IE1lc3NhZ2UsIE1lc3NhZ2VUZW1wbGF0ZTsKaW1wb3J0ICdkdW1wX2luZm8uZGFydCcgc2hvdyBEdW1wSW5mb1Rhc2s7CmltcG9ydCAnZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnZW5xdWV1ZS5kYXJ0JyBzaG93IEVucXVldWVyLCBFbnF1ZXVlVGFzaywgUmVzb2x1dGlvbkVucXVldWVyOwppbXBvcnQgJ2Vudmlyb25tZW50LmRhcnQnOwppbXBvcnQgJ2Zyb250ZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJ2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JyBzaG93IEFic3RyYWN0VmFsdWVTdHJhdGVneTsKaW1wb3J0ICdpbmZlcnJlci90cml2aWFsLmRhcnQnIHNob3cgVHJpdmlhbEFic3RyYWN0VmFsdWVTdHJhdGVneTsKaW1wb3J0ICdpbmZlcnJlci90eXBlbWFza3MvbWFza3MuZGFydCcgc2hvdyBUeXBlTWFza1N0cmF0ZWd5OwppbXBvcnQgJ2luZmVycmVyL3R5cGVzLmRhcnQnCiAgICBzaG93IEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLCBHbG9iYWxUeXBlSW5mZXJlbmNlVGFzazsKaW1wb3J0ICdpby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCcgc2hvdyBTb3VyY2VJbmZvcm1hdGlvbjsKaW1wb3J0ICdqc19iYWNrZW5kL2JhY2tlbmQuZGFydCcgc2hvdyBDb2RlZ2VuSW5wdXRzLCBKYXZhU2NyaXB0SW1wYWN0U3RyYXRlZ3k7CmltcG9ydCAnanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJ2pzX21vZGVsL2pzX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJ2tlcm5lbC9rZXJuZWxfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAna2VybmVsL2xvYWRlci5kYXJ0JyBzaG93IEtlcm5lbExvYWRlclRhc2ssIEtlcm5lbFJlc3VsdDsKaW1wb3J0ICdudWxsX2NvbXBpbGVyX291dHB1dC5kYXJ0JyBzaG93IE51bGxDb21waWxlck91dHB1dDsKaW1wb3J0ICdvcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zLCBEaWFnbm9zdGljT3B0aW9uczsKaW1wb3J0ICdzZXJpYWxpemF0aW9uL3Rhc2suZGFydCc7CmltcG9ydCAnc2VyaWFsaXphdGlvbi9zdHJhdGVnaWVzLmRhcnQnOwppbXBvcnQgJ3NzYS9ub2Rlcy5kYXJ0JyBzaG93IEhJbnN0cnVjdGlvbjsKaW1wb3J0ICd1bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJ3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9yZXNvbHV0aW9uX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFN0cmF0ZWd5LCBXb3JsZEltcGFjdCwgV29ybGRJbXBhY3RCdWlsZGVySW1wbDsKaW1wb3J0ICd3b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZCwgS0Nsb3NlZFdvcmxkOwoKdHlwZWRlZiBDb21waWxlckRpYWdub3N0aWNSZXBvcnRlciBNYWtlUmVwb3J0ZXJGdW5jdGlvbigKICAgIENvbXBpbGVyIGNvbXBpbGVyLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucyk7CgphYnN0cmFjdCBjbGFzcyBDb21waWxlciB7CiAgTWVhc3VyZXIgZ2V0IG1lYXN1cmVyOwoKICBhcGkuQ29tcGlsZXJJbnB1dCBnZXQgcHJvdmlkZXI7CgogIEZyb250ZW5kU3RyYXRlZ3kgZnJvbnRlbmRTdHJhdGVneTsKICBCYWNrZW5kU3RyYXRlZ3kgYmFja2VuZFN0cmF0ZWd5OwogIENvbXBpbGVyRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKICBNYXA8RW50aXR5LCBXb3JsZEltcGFjdD4gX2ltcGFjdENhY2hlOwogIEltcGFjdENhY2hlRGVsZXRlciBfaW1wYWN0Q2FjaGVEZWxldGVyOwoKICBJbXBhY3RTdHJhdGVneSBpbXBhY3RTdHJhdGVneSA9IGNvbnN0IEltcGFjdFN0cmF0ZWd5KCk7CgogIC8vLyBPcHRpb25zIHByb3ZpZGVkIGZyb20gY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KICBmaW5hbCBDb21waWxlck9wdGlvbnMgb3B0aW9uczsKCiAgLy8gVGhlc2UgaW50ZXJuYWwgZmxhZ3MgYXJlIHVzZWQgdG8gc3RvcCBjb21waWxhdGlvbiBhZnRlciBhIHNwZWNpZmljIHBoYXNlLgogIC8vIFVzZWQgb25seSBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCiAgYm9vbCBzdG9wQWZ0ZXJDbG9zZWRXb3JsZCA9IGZhbHNlOwogIGJvb2wgc3RvcEFmdGVyVHlwZUluZmVyZW5jZSA9IGZhbHNlOwoKICAvLy8gT3V0cHV0IHByb3ZpZGVyIGZyb20gdXNlciBvZiBDb21waWxlciBBUEkuCiAgYXBpLkNvbXBpbGVyT3V0cHV0IF9vdXRwdXRQcm92aWRlcjsKCiAgYXBpLkNvbXBpbGVyT3V0cHV0IGdldCBvdXRwdXRQcm92aWRlciA9PiBfb3V0cHV0UHJvdmlkZXI7CgogIExpc3Q8Q29kZUxvY2F0aW9uPiBfdXNlckNvZGVMb2NhdGlvbnMgPSA8Q29kZUxvY2F0aW9uPltdOwoKICBKQ2xvc2VkV29ybGQgYmFja2VuZENsb3NlZFdvcmxkRm9yVGVzdGluZzsKCiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlciA9PiBfcmVwb3J0ZXI7CiAgTWFwPEVudGl0eSwgV29ybGRJbXBhY3Q+IGdldCBpbXBhY3RDYWNoZSA9PiBfaW1wYWN0Q2FjaGU7CiAgSW1wYWN0Q2FjaGVEZWxldGVyIGdldCBpbXBhY3RDYWNoZURlbGV0ZXIgPT4gX2ltcGFjdENhY2hlRGVsZXRlcjsKCiAgZmluYWwgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQ7CiAgLy8gVE9ETyhzaWdtdW5kKTogZGVsZXRlIG9uY2Ugd2UgbWlncmF0ZSB0aGUgcmVzdCBvZiB0aGUgY29tcGlsZXIgdG8gdXNlCiAgLy8gYGVudmlyb25tZW50YCBkaXJlY3RseS4KICBAZGVwcmVjYXRlZAogIGZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSkgPT4gZW52aXJvbm1lbnQudmFsdWVPZihuYW1lKTsKCiAgRW50aXR5IGdldCBjdXJyZW50RWxlbWVudCA9PiBfcmVwb3J0ZXIuY3VycmVudEVsZW1lbnQ7CgogIExpc3Q8Q29tcGlsZXJUYXNrPiB0YXNrczsKICBLZXJuZWxMb2FkZXJUYXNrIGtlcm5lbExvYWRlcjsKICBHbG9iYWxUeXBlSW5mZXJlbmNlVGFzayBnbG9iYWxJbmZlcmVuY2U7CiAgQ29kZWdlbldvcmxkQnVpbGRlciBfY29kZWdlbldvcmxkQnVpbGRlcjsKCiAgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IGFic3RyYWN0VmFsdWVTdHJhdGVneTsKCiAgR2VuZXJpY1Rhc2sgc2VsZlRhc2s7CgogIEVucXVldWVUYXNrIGVucXVldWVyOwogIERlZmVycmVkTG9hZFRhc2sgZGVmZXJyZWRMb2FkVGFzazsKICBEdW1wSW5mb1Rhc2sgZHVtcEluZm9UYXNrOwogIFNlcmlhbGl6YXRpb25UYXNrIHNlcmlhbGl6YXRpb25UYXNrOwoKICBib29sIGdldCBoYXNDcmFzaGVkID0+IF9yZXBvcnRlci5oYXNDcmFzaGVkOwoKICBQcm9ncmVzcyBwcm9ncmVzcyA9IGNvbnN0IFByb2dyZXNzKCk7CgogIHN0YXRpYyBjb25zdCBpbnQgUEhBU0VfU0NBTk5JTkcgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgUEhBU0VfUkVTT0xWSU5HID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFBIQVNFX0RPTkVfUkVTT0xWSU5HID0gMjsKICBzdGF0aWMgY29uc3QgaW50IFBIQVNFX0NPTVBJTElORyA9IDM7CiAgaW50IHBoYXNlOwoKICBib29sIGNvbXBpbGF0aW9uRmFpbGVkID0gZmFsc2U7CgogIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgZm9yIHRlc3RpbmcgcmVzb2x1dGlvbiBlbnF1ZXVpbmcuCiAgdm9pZCBGdW5jdGlvbigpIG9uUmVzb2x1dGlvblF1ZXVlRW1wdHlGb3JUZXN0aW5nOwoKICAvLyBDYWxsYmFjayBmdW5jdGlvbiB1c2VkIGZvciB0ZXN0aW5nIGNvZGVnZW4gZW5xdWV1aW5nLgogIHZvaWQgRnVuY3Rpb24oKSBvbkNvZGVnZW5RdWV1ZUVtcHR5Rm9yVGVzdGluZzsKCiAgQ29tcGlsZXIoCiAgICAgIHtDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgYXBpLkNvbXBpbGVyT3V0cHV0IG91dHB1dFByb3ZpZGVyLAogICAgICB0aGlzLmVudmlyb25tZW50OiBjb25zdCBfRW1wdHlFbnZpcm9ubWVudCgpLAogICAgICBNYWtlUmVwb3J0ZXJGdW5jdGlvbiBtYWtlUmVwb3J0ZXJ9KQogICAgICA6IHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgewogICAgb3B0aW9ucy5kZXJpdmVPcHRpb25zKCk7CiAgICBvcHRpb25zLnZhbGlkYXRlKCk7CgogICAgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5ID0gb3B0aW9ucy51c2VUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgID8gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWVTdHJhdGVneSgpCiAgICAgICAgOiBjb25zdCBUeXBlTWFza1N0cmF0ZWd5KCk7CiAgICBDb21waWxlclRhc2sga2VybmVsRnJvbnRFbmRUYXNrOwogICAgc2VsZlRhc2sgPSBuZXcgR2VuZXJpY1Rhc2soJ3NlbGYnLCBtZWFzdXJlcik7CiAgICBfb3V0cHV0UHJvdmlkZXIgPSBuZXcgX0NvbXBpbGVyT3V0cHV0KHRoaXMsIG91dHB1dFByb3ZpZGVyKTsKICAgIGlmIChtYWtlUmVwb3J0ZXIgIT0gbnVsbCkgewogICAgICBfcmVwb3J0ZXIgPSBtYWtlUmVwb3J0ZXIodGhpcywgb3B0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBfcmVwb3J0ZXIgPSBuZXcgQ29tcGlsZXJEaWFnbm9zdGljUmVwb3J0ZXIodGhpcywgb3B0aW9ucyk7CiAgICB9CiAgICBrZXJuZWxGcm9udEVuZFRhc2sgPSBuZXcgR2VuZXJpY1Rhc2soJ0Zyb250IGVuZCcsIG1lYXN1cmVyKTsKICAgIGZyb250ZW5kU3RyYXRlZ3kgPSBuZXcgS2VybmVsRnJvbnRlbmRTdHJhdGVneSgKICAgICAgICBrZXJuZWxGcm9udEVuZFRhc2ssIG9wdGlvbnMsIHJlcG9ydGVyLCBlbnZpcm9ubWVudCk7CiAgICBiYWNrZW5kU3RyYXRlZ3kgPSBjcmVhdGVCYWNrZW5kU3RyYXRlZ3koKTsKICAgIF9pbXBhY3RDYWNoZSA9IDxFbnRpdHksIFdvcmxkSW1wYWN0Pnt9OwogICAgX2ltcGFjdENhY2hlRGVsZXRlciA9IG5ldyBfTWFwSW1wYWN0Q2FjaGVEZWxldGVyKF9pbXBhY3RDYWNoZSk7CgogICAgaWYgKG9wdGlvbnMuc2hvd0ludGVybmFsUHJvZ3Jlc3MpIHsKICAgICAgcHJvZ3Jlc3MgPSBuZXcgSW50ZXJhY3RpdmVQcm9ncmVzcygpOwogICAgfQoKICAgIGVucXVldWVyID0gbmV3IEVucXVldWVUYXNrKHRoaXMpOwoKICAgIHRhc2tzID0gWwogICAgICBrZXJuZWxMb2FkZXIgPSBuZXcgS2VybmVsTG9hZGVyVGFzaygKICAgICAgICAgIG9wdGlvbnMsIHByb3ZpZGVyLCBfb3V0cHV0UHJvdmlkZXIsIHJlcG9ydGVyLCBtZWFzdXJlciksCiAgICAgIGtlcm5lbEZyb250RW5kVGFzaywKICAgICAgZ2xvYmFsSW5mZXJlbmNlID0gbmV3IEdsb2JhbFR5cGVJbmZlcmVuY2VUYXNrKHRoaXMpLAogICAgICBkZWZlcnJlZExvYWRUYXNrID0gZnJvbnRlbmRTdHJhdGVneS5jcmVhdGVEZWZlcnJlZExvYWRUYXNrKHRoaXMpLAogICAgICAvLyBbZW5xdWV1ZXJdIGlzIGNyZWF0ZWQgZWFybGllciBiZWNhdXNlIGl0IGNvbnRhaW5zIHRoZSByZXNvbHV0aW9uIHdvcmxkCiAgICAgIC8vIG9iamVjdHMgbmVlZGVkIGJ5IG90aGVyIHRhc2tzLgogICAgICBlbnF1ZXVlciwKICAgICAgZHVtcEluZm9UYXNrID0gbmV3IER1bXBJbmZvVGFzayh0aGlzKSwKICAgICAgc2VsZlRhc2ssCiAgICAgIHNlcmlhbGl6YXRpb25UYXNrID0gbmV3IFNlcmlhbGl6YXRpb25UYXNrKAogICAgICAgICAgb3B0aW9ucywgcmVwb3J0ZXIsIHByb3ZpZGVyLCBvdXRwdXRQcm92aWRlciwgbWVhc3VyZXIpLAogICAgXTsKCiAgICB0YXNrcy5hZGRBbGwoYmFja2VuZFN0cmF0ZWd5LnRhc2tzKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBiYWNrZW5kIHN0cmF0ZWd5LgogIC8vLwogIC8vLyBPdmVycmlkZSB0aGlzIHRvIG1vY2sgdGhlIGJhY2tlbmQgc3RyYXRlZ3kgZm9yIHRlc3RpbmcuCiAgQmFja2VuZFN0cmF0ZWd5IGNyZWF0ZUJhY2tlbmRTdHJhdGVneSgpIHsKICAgIHJldHVybiBuZXcgSnNCYWNrZW5kU3RyYXRlZ3kodGhpcyk7CiAgfQoKICBSZXNvbHV0aW9uV29ybGRCdWlsZGVyIGdldCByZXNvbHV0aW9uV29ybGRCdWlsZGVyID0+CiAgICAgIGVucXVldWVyLnJlc29sdXRpb24ud29ybGRCdWlsZGVyOwoKICBDb2RlZ2VuV29ybGRCdWlsZGVyIGdldCBjb2RlZ2VuV29ybGRCdWlsZGVyIHsKICAgIGFzc2VydCgKICAgICAgICBfY29kZWdlbldvcmxkQnVpbGRlciAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIkNvZGVnZW5Xb3JsZEJ1aWxkZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LiIpKTsKICAgIHJldHVybiBfY29kZWdlbldvcmxkQnVpbGRlcjsKICB9CgogIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGRGb3JUZXN0aW5nOwoKICBib29sIGdldCBkaXNhYmxlVHlwZUluZmVyZW5jZSA9PgogICAgICBvcHRpb25zLmRpc2FibGVUeXBlSW5mZXJlbmNlIHx8IGNvbXBpbGF0aW9uRmFpbGVkOwoKICAvLyBDb21waWxlcyB0aGUgZGFydCBzY3JpcHQgYXQgW3VyaV0uCiAgLy8KICAvLyBUaGUgcmVzdWx0aW5nIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggdHJ1ZSBpZiB0aGUgY29tcGlsYXRpb24KICAvLyBzdWNjZWVkZWQuCiAgRnV0dXJlPGJvb2w+IHJ1bihVcmkgdXJpKSA9PiBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygicnVuIiwgKCkgewogICAgICAgIG1lYXN1cmVyLnN0YXJ0V2FsbENsb2NrKCk7CgogICAgICAgIHJldHVybiBuZXcgRnV0dXJlLnN5bmMoKCkgPT4gcnVuSW50ZXJuYWwodXJpKSkKICAgICAgICAgICAgLmNhdGNoRXJyb3IoKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpID0+CiAgICAgICAgICAgICAgICBfcmVwb3J0ZXIub25FcnJvcih1cmksIGVycm9yLCBzdGFja1RyYWNlKSkKICAgICAgICAgICAgLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgICAgICBtZWFzdXJlci5zdG9wV2FsbENsb2NrKCk7CiAgICAgICAgfSkudGhlbigoXykgewogICAgICAgICAgcmV0dXJuICFjb21waWxhdGlvbkZhaWxlZDsKICAgICAgICB9KTsKICAgICAgfSk7CgogIEZ1dHVyZSBydW5JbnRlcm5hbChVcmkgdXJpKSBhc3luYyB7CiAgICBjbGVhclN0YXRlKCk7CiAgICBhc3NlcnQodXJpICE9IG51bGwpOwogICAgLy8gQXMgZmFyIGFzIEkgY2FuIHRlbGwsIHRoaXMgYnJhbmNoIGlzIG9ubHkgdXNlZCBieSB0ZXN0IGNvZGUuCiAgICByZXBvcnRlci5sb2coJ0NvbXBpbGluZyAkdXJpICgke29wdGlvbnMuYnVpbGRJZH0pJyk7CgogICAgaWYgKG9wdGlvbnMucmVhZERhdGFVcmkgIT0gbnVsbCkgewogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyA9CiAgICAgICAgICBhd2FpdCBzZXJpYWxpemF0aW9uVGFzay5kZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2UoCiAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIGFic3RyYWN0VmFsdWVTdHJhdGVneSk7CiAgICAgIGlmIChvcHRpb25zLmRlYnVnR2xvYmFsSW5mZXJlbmNlKSB7CiAgICAgICAgcGVyZm9ybUdsb2JhbFR5cGVJbmZlcmVuY2UoZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBhd2FpdCBnZW5lcmF0ZUphdmFTY3JpcHRDb2RlKGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKTsKICAgIH0gZWxzZSB7CiAgICAgIEtlcm5lbFJlc3VsdCByZXN1bHQgPSBhd2FpdCBrZXJuZWxMb2FkZXIubG9hZCh1cmkpOwogICAgICByZXBvcnRlci5sb2coIktlcm5lbCBsb2FkIGNvbXBsZXRlIik7CiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAoY29tcGlsYXRpb25GYWlsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnMuY2ZlT25seSkgcmV0dXJuOwoKICAgICAgZnJvbnRlbmRTdHJhdGVneS5yZWdpc3RlckxvYWRlZExpYnJhcmllcyhyZXN1bHQpOwoKICAgICAgLy8gVE9ETyhlZm9ydHVuYSwgc2lnbXVuZCk6IFRoZXNlIHZhbGlkYXRpb24gc3RlcHMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlCiAgICAgIC8vIGZyb250IGVuZCBmb3IgdGhlIEtlcm5lbCBwYXRoIHNpbmNlIEtlcm5lbCBkb2Vzbid0IGhhdmUgdGhlIG5vdGlvbiBvZgogICAgICAvLyBpbXBvcnRzIChldmVyeXRoaW5nIGhhcyBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQpLiAoU2VlCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8yOTM2OCkKICAgICAgaWYgKHJlc3VsdC5saWJyYXJpZXMuY29udGFpbnMoVXJpcy5kYXJ0X21pcnJvcnMpKSB7CiAgICAgICAgcmVwb3J0ZXIucmVwb3J0V2FybmluZ01lc3NhZ2UoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICBNZXNzYWdlS2luZC5NSVJST1JTX0xJQlJBUllfTk9UX1NVUFBPUlRfV0lUSF9DRkUpOwogICAgICB9CgogICAgICBhd2FpdCBjb21waWxlRnJvbUtlcm5lbChyZXN1bHQucm9vdExpYnJhcnlVcmksIHJlc3VsdC5saWJyYXJpZXMpOwogICAgfQogIH0KCiAgdm9pZCBnZW5lcmF0ZUphdmFTY3JpcHRDb2RlKAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cykgYXN5bmMgewogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBiYWNrZW5kU3RyYXRlZ3kucmVnaXN0ZXJKQ2xvc2VkV29ybGQoY2xvc2VkV29ybGQpOwogICAgcGhhc2UgPSBQSEFTRV9DT01QSUxJTkc7CiAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW5JbnB1dHMgPQogICAgICAgIGJhY2tlbmRTdHJhdGVneS5vbkNvZGVnZW5TdGFydChnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyk7CgogICAgaWYgKG9wdGlvbnMucmVhZENvZGVnZW5VcmkgIT0gbnVsbCkgewogICAgICBDb2RlZ2VuUmVzdWx0cyBjb2RlZ2VuUmVzdWx0cyA9CiAgICAgICAgICBhd2FpdCBzZXJpYWxpemF0aW9uVGFzay5kZXNlcmlhbGl6ZUNvZGVnZW4oCiAgICAgICAgICAgICAgYmFja2VuZFN0cmF0ZWd5LCBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywgY29kZWdlbklucHV0cyk7CiAgICAgIHJlcG9ydGVyLmxvZygnQ29tcGlsaW5nIG1ldGhvZHMnKTsKICAgICAgcnVuQ29kZWdlbkVucXVldWVyKGNvZGVnZW5SZXN1bHRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydGVyLmxvZygnQ29tcGlsaW5nIG1ldGhvZHMnKTsKICAgICAgQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMgPSBuZXcgT25EZW1hbmRDb2RlZ2VuUmVzdWx0cygKICAgICAgICAgIGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgICAgY29kZWdlbklucHV0cywKICAgICAgICAgIGJhY2tlbmRTdHJhdGVneS5mdW5jdGlvbkNvbXBpbGVyKTsKICAgICAgaWYgKG9wdGlvbnMud3JpdGVDb2RlZ2VuVXJpICE9IG51bGwpIHsKICAgICAgICBzZXJpYWxpemF0aW9uVGFzay5zZXJpYWxpemVDb2RlZ2VuKGJhY2tlbmRTdHJhdGVneSwgY29kZWdlblJlc3VsdHMpOwogICAgICB9IGVsc2UgewogICAgICAgIHJ1bkNvZGVnZW5FbnF1ZXVlcihjb2RlZ2VuUmVzdWx0cyk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBDbGVhciB0aGUgaW50ZXJuYWwgY29tcGlsZXIgc3RhdGUgdG8gcHJldmVudCBtZW1vcnkgbGVha3Mgd2hlbiBpbnZva2luZwogIC8vLyB0aGUgY29tcGlsZXIgbXVsdGlwbGUgdGltZXMgKGUuZy4gaW4gYmF0Y2ggbW9kZSkuCiAgLy8gVE9ETyhhaGUpOiBpbXBsZW1lbnQgYSBiZXR0ZXIgbWVjaGFuaXNtIHdoZXJlIHdlIGNhbiBzdG9yZQogIC8vIHN1Y2ggY2FjaGVzIGluIHRoZSBjb21waWxlciBhbmQgZ2V0IGFjY2VzcyB0byB0aGVtIHRocm91Z2ggYQogIC8vIHN1aXRhYmx5IG1haW50YWluZWQgc3RhdGljIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBjb21waWxlci4KICB2b2lkIGNsZWFyU3RhdGUoKSB7CiAgICBjbGVhclN0cmluZ1Rva2VuQ2Fub25pY2FsaXplcigpOwogICAgU2VsZWN0b3IuY2Fub25pY2FsaXplZFZhbHVlcy5jbGVhcigpOwoKICAgIC8vIFRoZSBzZWxlY3RvciBvYmplY3RzIGhlbGQgaW4gc3RhdGljIGZpZWxkcyBtdXN0IHJlbWFpbiBjYW5vbmljYWwuCiAgICBmb3IgKFNlbGVjdG9yIHNlbGVjdG9yIGluIFNlbGVjdG9ycy5BTEwpIHsKICAgICAgU2VsZWN0b3IuY2Fub25pY2FsaXplZFZhbHVlcwogICAgICAgICAgLnB1dElmQWJzZW50KHNlbGVjdG9yLmhhc2hDb2RlLCAoKSA9PiA8U2VsZWN0b3I+W10pCiAgICAgICAgICAuYWRkKHNlbGVjdG9yKTsKICAgIH0KICB9CgogIC8vLyBTdGFydHMgdGhlIHJlc29sdXRpb24gcGhhc2UsIGNyZWF0aW5nIHRoZSBbUmVzb2x1dGlvbkVucXVldWVyXSBpZiBub3QKICAvLy8gYWxyZWFkeSBjcmVhdGVkLgogIC8vLwogIC8vLyBEdXJpbmcgbm9ybWFsIGNvbXBpbGF0aW9uIHJlc29sdXRpb24gb25seSBzdGFydGVkIG9uY2UsIGJ1dCB0aHJvdWdoCiAgLy8vIFthbmFseXplVXJpXSByZXNvbHV0aW9uIGlzIHN0YXJ0ZWQgcmVwZWF0ZWRseS4KICBSZXNvbHV0aW9uRW5xdWV1ZXIgc3RhcnRSZXNvbHV0aW9uKCkgewogICAgUmVzb2x1dGlvbkVucXVldWVyIHJlc29sdXRpb25FbnF1ZXVlcjsKICAgIGlmIChlbnF1ZXVlci5oYXNSZXNvbHV0aW9uKSB7CiAgICAgIHJlc29sdXRpb25FbnF1ZXVlciA9IGVucXVldWVyLnJlc29sdXRpb247CiAgICB9IGVsc2UgewogICAgICByZXNvbHV0aW9uRW5xdWV1ZXIgPSBlbnF1ZXVlci5jcmVhdGVSZXNvbHV0aW9uRW5xdWV1ZXIoKTsKICAgICAgZnJvbnRlbmRTdHJhdGVneS5vblJlc29sdXRpb25TdGFydCgpOwogICAgfQogICAgcmV0dXJuIHJlc29sdXRpb25FbnF1ZXVlcjsKICB9CgogIEpDbG9zZWRXb3JsZCBjb21wdXRlQ2xvc2VkV29ybGQoVXJpIHJvb3RMaWJyYXJ5VXJpLCBJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgUmVzb2x1dGlvbkVucXVldWVyIHJlc29sdXRpb25FbnF1ZXVlciA9IHN0YXJ0UmVzb2x1dGlvbigpOwogICAgZm9yIChMaWJyYXJ5RW50aXR5IGxpYnJhcnkKICAgICAgICBpbiBmcm9udGVuZFN0cmF0ZWd5LmVsZW1lbnRFbnZpcm9ubWVudC5saWJyYXJpZXMpIHsKICAgICAgZnJvbnRlbmRTdHJhdGVneS5lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzKGxpYnJhcnksCiAgICAgICAgICAoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgICAgLy8gUmVnaXN0ZXIgYWxsIGNsYXNzZXMgZWFnZXJseSB0byBvcHRpbWl6ZSBjbG9zZWQgd29ybGQgY29tcHV0YXRpb24gaW4KICAgICAgICAvLyBgQ2xhc3NXb3JsZEJ1aWxkZXIuaXNJbmhlcml0ZWRJblN1YnR5cGVPZmAuCiAgICAgICAgcmVzb2x1dGlvbkVucXVldWVyLndvcmxkQnVpbGRlci5yZWdpc3RlckNsYXNzKGNscyk7CiAgICAgIH0pOwogICAgfQogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBtYWluSW1wYWN0ID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIEZ1bmN0aW9uRW50aXR5IG1haW5GdW5jdGlvbiA9IGZyb250ZW5kU3RyYXRlZ3kuY29tcHV0ZU1haW4obWFpbkltcGFjdCk7CgogICAgLy8gSW4gb3JkZXIgdG8gc2VlIGlmIGEgbGlicmFyeSBpcyBkZWZlcnJlZCwgd2UgbXVzdCBjb21wdXRlIHRoZQogICAgLy8gY29tcGlsZS10aW1lIGNvbnN0YW50cyB0aGF0IGFyZSBtZXRhZGF0YS4gIFRoaXMgbWVhbnMgYWRkaW5nCiAgICAvLyBzb21ldGhpbmcgdG8gdGhlIHJlc29sdXRpb24gcXVldWUuICBTbyB3ZSBjYW5ub3Qgd2FpdCB3aXRoCiAgICAvLyB0aGlzIHVudGlsIGFmdGVyIHRoZSByZXNvbHV0aW9uIHF1ZXVlIGlzIHByb2Nlc3NlZC4KICAgIGRlZmVycmVkTG9hZFRhc2suYmVmb3JlUmVzb2x1dGlvbihyb290TGlicmFyeVVyaSwgbGlicmFyaWVzKTsKCiAgICBpbXBhY3RTdHJhdGVneSA9IG5ldyBKYXZhU2NyaXB0SW1wYWN0U3RyYXRlZ3koCiAgICAgICAgaW1wYWN0Q2FjaGVEZWxldGVyLCBkdW1wSW5mb1Rhc2ssCiAgICAgICAgc3VwcG9ydERlZmVycmVkTG9hZDogZGVmZXJyZWRMb2FkVGFzay5pc1Byb2dyYW1TcGxpdCwKICAgICAgICBzdXBwb3J0RHVtcEluZm86IG9wdGlvbnMuZHVtcEluZm8pOwoKICAgIHBoYXNlID0gUEhBU0VfUkVTT0xWSU5HOwogICAgcmVzb2x1dGlvbkVucXVldWVyLmFwcGx5SW1wYWN0KG1haW5JbXBhY3QpOwogICAgaWYgKG9wdGlvbnMuc2hvd0ludGVybmFsUHJvZ3Jlc3MpIHJlcG9ydGVyLmxvZygnQ29tcHV0aW5nIGNsb3NlZCB3b3JsZCcpOwoKICAgIHByb2Nlc3NRdWV1ZSgKICAgICAgICBmcm9udGVuZFN0cmF0ZWd5LmVsZW1lbnRFbnZpcm9ubWVudCwgcmVzb2x1dGlvbkVucXVldWVyLCBtYWluRnVuY3Rpb24sCiAgICAgICAgb25Qcm9ncmVzczogc2hvd1Jlc29sdXRpb25Qcm9ncmVzcyk7CiAgICBmcm9udGVuZFN0cmF0ZWd5Lm9uUmVzb2x1dGlvbkVuZCgpOwogICAgcmVzb2x1dGlvbkVucXVldWVyLmxvZ1N1bW1hcnkocmVwb3J0ZXIubG9nKTsKCiAgICBfcmVwb3J0ZXIucmVwb3J0U3VwcHJlc3NlZE1lc3NhZ2VzU3VtbWFyeSgpOwoKICAgIGlmIChjb21waWxhdGlvbkZhaWxlZCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBhc3NlcnQobWFpbkZ1bmN0aW9uICE9IG51bGwpOwogICAgY2hlY2tRdWV1ZShyZXNvbHV0aW9uRW5xdWV1ZXIpOwoKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IGNsb3NlUmVzb2x1dGlvbihtYWluRnVuY3Rpb24pOwogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgIGJhY2tlbmRDbG9zZWRXb3JsZEZvclRlc3RpbmcgPSBjbG9zZWRXb3JsZDsKICAgIH0KICAgIHJldHVybiBjbG9zZWRXb3JsZDsKICB9CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHBlcmZvcm1HbG9iYWxUeXBlSW5mZXJlbmNlKAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEZ1bmN0aW9uRW50aXR5IG1haW5GdW5jdGlvbiA9IGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5tYWluRnVuY3Rpb247CiAgICByZXBvcnRlci5sb2coJ1BlcmZvcm1pbmcgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlJyk7CiAgICBJbmZlcnJlZERhdGFCdWlsZGVyIGluZmVycmVkRGF0YUJ1aWxkZXIgPQogICAgICAgIG5ldyBJbmZlcnJlZERhdGFCdWlsZGVySW1wbChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEpOwogICAgcmV0dXJuIGdsb2JhbEluZmVyZW5jZS5ydW5HbG9iYWxUeXBlSW5mZXJlbmNlKAogICAgICAgIG1haW5GdW5jdGlvbiwgY2xvc2VkV29ybGQsIGluZmVycmVkRGF0YUJ1aWxkZXIpOwogIH0KCiAgdm9pZCBydW5Db2RlZ2VuRW5xdWV1ZXIoQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMpIHsKICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMgPQogICAgICAgIGNvZGVnZW5SZXN1bHRzLmdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzOwogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cy5jbG9zZWRXb3JsZDsKICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbklucHV0cyA9IGNvZGVnZW5SZXN1bHRzLmNvZGVnZW5JbnB1dHM7CiAgICBFbnF1ZXVlciBjb2RlZ2VuRW5xdWV1ZXIgPSBlbnF1ZXVlci5jcmVhdGVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgICAgY2xvc2VkV29ybGQsIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW5JbnB1dHMsIGNvZGVnZW5SZXN1bHRzKTsKICAgIF9jb2RlZ2VuV29ybGRCdWlsZGVyID0gY29kZWdlbkVucXVldWVyLndvcmxkQnVpbGRlcjsKCiAgICBGdW5jdGlvbkVudGl0eSBtYWluRnVuY3Rpb24gPSBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQubWFpbkZ1bmN0aW9uOwogICAgcHJvY2Vzc1F1ZXVlKGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwgY29kZWdlbkVucXVldWVyLCBtYWluRnVuY3Rpb24sCiAgICAgICAgb25Qcm9ncmVzczogc2hvd0NvZGVnZW5Qcm9ncmVzcyk7CiAgICBjb2RlZ2VuRW5xdWV1ZXIubG9nU3VtbWFyeShyZXBvcnRlci5sb2cpOwogICAgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCA9IGNvZGVnZW5Xb3JsZEJ1aWxkZXIuY2xvc2UoKTsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICBjb2RlZ2VuV29ybGRGb3JUZXN0aW5nID0gY29kZWdlbldvcmxkOwogICAgfQogICAgcmVwb3J0ZXIubG9nKCdFbWl0dGluZyBKYXZhU2NyaXB0Jyk7CiAgICBpbnQgcHJvZ3JhbVNpemUgPSBiYWNrZW5kU3RyYXRlZ3kuYXNzZW1ibGVQcm9ncmFtKGNsb3NlZFdvcmxkLAogICAgICAgIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMuaW5mZXJyZWREYXRhLCBjb2RlZ2VuSW5wdXRzLCBjb2RlZ2VuV29ybGQpOwoKICAgIGlmIChvcHRpb25zLmR1bXBJbmZvKSB7CiAgICAgIGR1bXBJbmZvVGFzay5yZXBvcnRTaXplKHByb2dyYW1TaXplKTsKICAgICAgZHVtcEluZm9UYXNrLmR1bXBJbmZvKGNsb3NlZFdvcmxkLCBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgIH0KCiAgICBiYWNrZW5kU3RyYXRlZ3kub25Db2RlZ2VuRW5kKGNvZGVnZW5JbnB1dHMpOwoKICAgIGNoZWNrUXVldWUoY29kZWdlbkVucXVldWVyKTsKICB9CgogIHZvaWQgY29tcGlsZUZyb21LZXJuZWwoVXJpIHJvb3RMaWJyYXJ5VXJpLCBJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgX3VzZXJDb2RlTG9jYXRpb25zLmFkZChuZXcgQ29kZUxvY2F0aW9uKHJvb3RMaWJyYXJ5VXJpKSk7CiAgICBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygiY29tcGlsZUZyb21LZXJuZWwiLCAoKSB7CiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IHNlbGZUYXNrLm1lYXN1cmVTdWJ0YXNrKCJjb21wdXRlQ2xvc2VkV29ybGQiLAogICAgICAgICAgKCkgPT4gY29tcHV0ZUNsb3NlZFdvcmxkKHJvb3RMaWJyYXJ5VXJpLCBsaWJyYXJpZXMpKTsKICAgICAgaWYgKHN0b3BBZnRlckNsb3NlZFdvcmxkKSByZXR1cm47CiAgICAgIGlmIChjbG9zZWRXb3JsZCAhPSBudWxsKSB7CiAgICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyA9CiAgICAgICAgICAgIHBlcmZvcm1HbG9iYWxUeXBlSW5mZXJlbmNlKGNsb3NlZFdvcmxkKTsKICAgICAgICBpZiAob3B0aW9ucy53cml0ZURhdGFVcmkgIT0gbnVsbCkgewogICAgICAgICAgc2VyaWFsaXphdGlvblRhc2sKICAgICAgICAgICAgICAuc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZShnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdGlvbnMudGVzdE1vZGUpIHsKICAgICAgICAgIFNlcmlhbGl6YXRpb25TdHJhdGVneSBzdHJhdGVneSA9CiAgICAgICAgICAgICAgY29uc3QgQnl0ZXNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneSgpOwogICAgICAgICAgTGlzdDxpbnQ+IGlyRGF0YSA9CiAgICAgICAgICAgICAgc3RyYXRlZ3kuc2VyaWFsaXplQ29tcG9uZW50KGdsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgICAgICAgTGlzdCB3b3JsZERhdGEgPSBzdHJhdGVneS5zZXJpYWxpemVEYXRhKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgICAgICAgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyA9IHN0cmF0ZWd5LmRlc2VyaWFsaXplRGF0YSgKICAgICAgICAgICAgICBvcHRpb25zLAogICAgICAgICAgICAgIHJlcG9ydGVyLAogICAgICAgICAgICAgIGVudmlyb25tZW50LAogICAgICAgICAgICAgIGFic3RyYWN0VmFsdWVTdHJhdGVneSwKICAgICAgICAgICAgICBzdHJhdGVneS5kZXNlcmlhbGl6ZUNvbXBvbmVudChpckRhdGEpLAogICAgICAgICAgICAgIHdvcmxkRGF0YSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdG9wQWZ0ZXJUeXBlSW5mZXJlbmNlKSByZXR1cm47CiAgICAgICAgZ2VuZXJhdGVKYXZhU2NyaXB0Q29kZShnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgICAgfQogICAgfSk7CiAgfQoKICAvLy8gUGVyZm9ybSB0aGUgc3RlcHMgbmVlZGVkIHRvIGZ1bGx5IGVuZCB0aGUgcmVzb2x1dGlvbiBwaGFzZS4KICBKQ2xvc2VkV29ybGQgY2xvc2VSZXNvbHV0aW9uKEZ1bmN0aW9uRW50aXR5IG1haW5GdW5jdGlvbikgewogICAgcGhhc2UgPSBQSEFTRV9ET05FX1JFU09MVklORzsKCiAgICBLQ2xvc2VkV29ybGQga0Nsb3NlZFdvcmxkID0gcmVzb2x1dGlvbldvcmxkQnVpbGRlci5jbG9zZVdvcmxkKHJlcG9ydGVyKTsKICAgIE91dHB1dFVuaXREYXRhIHJlc3VsdCA9IGRlZmVycmVkTG9hZFRhc2sucnVuKG1haW5GdW5jdGlvbiwga0Nsb3NlZFdvcmxkKTsKICAgIEpDbG9zZWRXb3JsZCBqQ2xvc2VkV29ybGQgPQogICAgICAgIGJhY2tlbmRTdHJhdGVneS5jcmVhdGVKQ2xvc2VkV29ybGQoa0Nsb3NlZFdvcmxkLCByZXN1bHQpOwogICAgcmV0dXJuIGpDbG9zZWRXb3JsZDsKICB9CgogIC8vLyBFbXB0eSB0aGUgW2VucXVldWVyXSBxdWV1ZS4KICB2b2lkIGVtcHR5UXVldWUoRW5xdWV1ZXIgZW5xdWV1ZXIsIHt2b2lkIG9uUHJvZ3Jlc3MoRW5xdWV1ZXIgZW5xdWV1ZXIpfSkgewogICAgc2VsZlRhc2subWVhc3VyZVN1YnRhc2soImVtcHR5UXVldWUiLCAoKSB7CiAgICAgIGVucXVldWVyLmZvckVhY2goKFdvcmtJdGVtIHdvcmspIHsKICAgICAgICBpZiAob25Qcm9ncmVzcyAhPSBudWxsKSB7CiAgICAgICAgICBvblByb2dyZXNzKGVucXVldWVyKTsKICAgICAgICB9CiAgICAgICAgcmVwb3J0ZXIud2l0aEN1cnJlbnRFbGVtZW50KAogICAgICAgICAgICB3b3JrLmVsZW1lbnQsCiAgICAgICAgICAgICgpID0+IHNlbGZUYXNrLm1lYXN1cmVTdWJ0YXNrKCJhcHBseUltcGFjdCIsICgpIHsKICAgICAgICAgICAgICAgICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoCiAgICAgICAgICAgICAgICAgICAgICBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygid29yay5ydW4iLCAoKSA9PiB3b3JrLnJ1bigpKSwKICAgICAgICAgICAgICAgICAgICAgIGltcGFjdFNvdXJjZTogd29yay5lbGVtZW50KTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIHZvaWQgcHJvY2Vzc1F1ZXVlKEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsIEVucXVldWVyIGVucXVldWVyLAogICAgICBGdW5jdGlvbkVudGl0eSBtYWluTWV0aG9kLAogICAgICB7dm9pZCBvblByb2dyZXNzKEVucXVldWVyIGVucXVldWVyKX0pIHsKICAgIHNlbGZUYXNrLm1lYXN1cmVTdWJ0YXNrKCJwcm9jZXNzUXVldWUiLCAoKSB7CiAgICAgIGVucXVldWVyLm9wZW4oCiAgICAgICAgICBpbXBhY3RTdHJhdGVneSwKICAgICAgICAgIG1haW5NZXRob2QsCiAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQubGlicmFyaWVzCiAgICAgICAgICAgICAgLm1hcCgoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSA9PiBsaWJyYXJ5LmNhbm9uaWNhbFVyaSkpOwogICAgICBwcm9ncmVzcy5zdGFydFBoYXNlKCk7CiAgICAgIGVtcHR5UXVldWUoZW5xdWV1ZXIsIG9uUHJvZ3Jlc3M6IG9uUHJvZ3Jlc3MpOwogICAgICBlbnF1ZXVlci5xdWV1ZUlzQ2xvc2VkID0gdHJ1ZTsKICAgICAgZW5xdWV1ZXIuY2xvc2UoKTsKICAgICAgLy8gTm90aWZ5IHRoZSBpbXBhY3Qgc3RyYXRlZ3kgaW1wYWN0cyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgdGhpcwogICAgICAvLyBlbnF1ZXVlci4KICAgICAgaW1wYWN0U3RyYXRlZ3kub25JbXBhY3RVc2VkKGVucXVldWVyLmltcGFjdFVzZSk7CiAgICAgIGFzc2VydChjb21waWxhdGlvbkZhaWxlZCB8fAogICAgICAgICAgZW5xdWV1ZXIuY2hlY2tOb0VucXVldWVkSW52b2tlZEluc3RhbmNlTWV0aG9kcyhlbGVtZW50RW52aXJvbm1lbnQpKTsKICAgIH0pOwogIH0KCiAgLy8vIFBlcmZvcm0gdmFyaW91cyBjaGVja3Mgb2YgdGhlIHF1ZXVlLiBUaGlzIGluY2x1ZGVzIGNoZWNraW5nIHRoYXQgdGhlCiAgLy8vIHF1ZXVlcyBhcmUgZW1wdHkgKG5vdGhpbmcgd2FzIGFkZGVkIGFmdGVyIHdlIHN0b3BwZWQgcHJvY2Vzc2luZyB0aGUKICAvLy8gcXVldWVzKS4KICBjaGVja1F1ZXVlKEVucXVldWVyIGVucXVldWVyKSB7CiAgICBlbnF1ZXVlci5jaGVja1F1ZXVlSXNFbXB0eSgpOwogIH0KCiAgdm9pZCBzaG93UmVzb2x1dGlvblByb2dyZXNzKEVucXVldWVyIGVucXVldWVyKSB7CiAgICBhc3NlcnQocGhhc2UgPT0gUEhBU0VfUkVTT0xWSU5HLCAnVW5leHBlY3RlZCBwaGFzZTogJHBoYXNlJyk7CiAgICBwcm9ncmVzcy5zaG93UHJvZ3Jlc3MoCiAgICAgICAgJ1Jlc29sdmVkICcsIGVucXVldWVyLnByb2Nlc3NlZEVudGl0aWVzLmxlbmd0aCwgJyBlbGVtZW50cy4nKTsKICB9CgogIHZvaWQgc2hvd0NvZGVnZW5Qcm9ncmVzcyhFbnF1ZXVlciBlbnF1ZXVlcikgewogICAgcHJvZ3Jlc3Muc2hvd1Byb2dyZXNzKAogICAgICAgICdDb21waWxlZCAnLCBlbnF1ZXVlci5wcm9jZXNzZWRFbnRpdGllcy5sZW5ndGgsICcgbWV0aG9kcy4nKTsKICB9CgogIHZvaWQgcmVwb3J0RGlhZ25vc3RpYyhEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcywgYXBpLkRpYWdub3N0aWMga2luZCk7CgogIHZvaWQgcmVwb3J0Q3Jhc2hJblVzZXJDb2RlKFN0cmluZyBtZXNzYWdlLCBleGNlcHRpb24sIHN0YWNrVHJhY2UpIHsKICAgIHJlcG9ydGVyLm9uQ3Jhc2hJblVzZXJDb2RlKG1lc3NhZ2UsIGV4Y2VwdGlvbiwgc3RhY2tUcmFjZSk7CiAgfQoKICAvLy8gTWVzc2FnZXMgZm9yIHdoaWNoIGNvbXBpbGUtdGltZSBlcnJvcnMgYXJlIHJlcG9ydGVkIGJ1dCBjb21waWxhdGlvbgogIC8vLyBjb250aW51ZXMgcmVnYXJkbGVzcy4KICBzdGF0aWMgY29uc3QgTGlzdDxNZXNzYWdlS2luZD4gQkVOSUdOX0VSUk9SUyA9IGNvbnN0IDxNZXNzYWdlS2luZD5bCiAgICBNZXNzYWdlS2luZC5JTlZBTElEX01FVEFEQVRBLAogICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQV9HRU5FUklDLAogIF07CgogIGJvb2wgbWFya0NvbXBpbGF0aW9uQXNGYWlsZWQoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwgYXBpLkRpYWdub3N0aWMga2luZCkgewogICAgaWYgKG9wdGlvbnMudGVzdE1vZGUpIHsKICAgICAgLy8gV2hlbiBpbiB0ZXN0IG1vZGUsIGkuZS4gb24gdGhlIGJ1aWxkLWJvdCwgd2UgYWx3YXlzIHN0b3AgY29tcGlsYXRpb24uCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHJlcG9ydGVyLm9wdGlvbnMuZmF0YWxXYXJuaW5ncykgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiAhQkVOSUdOX0VSUk9SUy5jb250YWlucyhtZXNzYWdlLm1lc3NhZ2Uua2luZCk7CiAgfQoKICB2b2lkIGZhdGFsRGlhZ25vc3RpY1JlcG9ydGVkKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBpZiAobWFya0NvbXBpbGF0aW9uQXNGYWlsZWQobWVzc2FnZSwga2luZCkpIHsKICAgICAgY29tcGlsYXRpb25GYWlsZWQgPSB0cnVlOwogICAgfQogIH0KCiAgLy8vIEhlbHBlciBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgY3VycmVudCBlbGVtZW50IGlzIGRlY2xhcmVkIHdpdGhpbgogIC8vLyAndXNlciBjb2RlJy4KICAvLy8KICAvLy8gU2VlIFtpblVzZXJDb2RlXSBmb3Igd2hhdCBkZWZpbmVzICd1c2VyIGNvZGUnLgogIGJvb2wgY3VycmVudGx5SW5Vc2VyQ29kZSgpIHsKICAgIHJldHVybiBpblVzZXJDb2RlKGN1cnJlbnRFbGVtZW50KTsKICB9CgogIC8vLyBIZWxwZXIgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgW2VsZW1lbnRdIGlzIGRlY2xhcmVkIHdpdGhpbiAndXNlciBjb2RlJy4KICAvLy8KICAvLy8gV2hhdCBjb25zdGl0dXRlcyAndXNlciBjb2RlJyBpcyBkZWZpbmVkIGJ5IHRoZSBVUkkocykgcHJvdmlkZWQgYnkgdGhlCiAgLy8vIGVudHJ5IHBvaW50KHMpIG9mIGNvbXBpbGF0aW9uIG9yIGFuYWx5c2lzOgogIC8vLwogIC8vLyBJZiBhbiBlbnRyeXBvaW50IFVSSSB1c2VzIHRoZSAncGFja2FnZScgc2NoZW1lIHRoZW4gZXZlcnkgbGlicmFyeSBmcm9tCiAgLy8vIHRoYXQgc2FtZSBwYWNrYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgaW4gdXNlciBjb2RlLiBGb3IgaW5zdGFuY2UsIGlmCiAgLy8vIGFuIGVudHJ5IHBvaW50IFVSSSBpcyAncGFja2FnZTpmb28vYmFyLmRhcnQnIHRoZW4gZXZlcnkgbGlicmFyeSB3aG9zZQogIC8vLyBjYW5vbmljYWwgVVJJIHN0YXJ0cyB3aXRoICdwYWNrYWdlOmZvby8nIGlzIGluIHVzZXIgY29kZS4KICAvLy8KICAvLy8gSWYgYW4gZW50cnlwb2ludCBVUkkgdXNlcyBhbm90aGVyIHNjaGVtZSB0aGFuICdwYWNrYWdlJyB0aGVuIGV2ZXJ5IGxpYnJhcnkKICAvLy8gd2l0aCB0aGF0IHNjaGVtZSBpcyBpbiB1c2VyIGNvZGUuIEZvciBpbnN0YW5jZSwgYW4gZW50cnkgcG9pbnQgVVJJIGlzCiAgLy8vICdmaWxlOi8vL2Zvby5kYXJ0JyB0aGVuIGV2ZXJ5IGxpYnJhcnkgd2hvc2UgY2Fub25pY2FsIFVSSSBzY2hlbWUgaXMKICAvLy8gJ2ZpbGUnIGlzIGluIHVzZXIgY29kZS4KICAvLy8KICAvLy8gSWYgW2Fzc3VtZUluVXNlckNvZGVdIGlzIGB0cnVlYCwgW2VsZW1lbnRdIGlzIGFzc3VtZWQgdG8gYmUgaW4gdXNlciBjb2RlCiAgLy8vIGlmIG5vIGVudHJ5cG9pbnRzIGhhdmUgYmVlbiBzZXQuCiAgYm9vbCBpblVzZXJDb2RlKEVudGl0eSBlbGVtZW50LCB7Ym9vbCBhc3N1bWVJblVzZXJDb2RlOiBmYWxzZX0pIHsKICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybiBhc3N1bWVJblVzZXJDb2RlOwogICAgVXJpIGxpYnJhcnlVcmkgPSBfdXJpRnJvbUVsZW1lbnQoZWxlbWVudCk7CiAgICBpZiAobGlicmFyeVVyaSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoX3VzZXJDb2RlTG9jYXRpb25zLmlzRW1wdHkgJiYgYXNzdW1lSW5Vc2VyQ29kZSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gX3VzZXJDb2RlTG9jYXRpb25zLmFueSgKICAgICAgICAoQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbikgPT4gY29kZUxvY2F0aW9uLmluU2FtZUxvY2F0aW9uKGxpYnJhcnlVcmkpKTsKICB9CgogIC8vLyBSZXR1cm4gYSBjYW5vbmljYWwgVVJJIGZvciB0aGUgc291cmNlIG9mIFtlbGVtZW50XS4KICAvLy8KICAvLy8gRm9yIGEgcGFja2FnZSBsaWJyYXJ5IHdpdGggY2Fub25pY2FsIFVSSSAncGFja2FnZTpmb28vYmFyL2Jhei5kYXJ0JyB0aGUKICAvLy8gcmV0dXJuIFVSSSBpcyAncGFja2FnZTpmb28nLiBGb3Igbm9uLXBhY2thZ2UgbGlicmFyaWVzIHRoZSByZXR1cm5lZCBVUkkgaXMKICAvLy8gdGhlIGNhbm9uaWNhbCBVUkkgb2YgdGhlIGxpYnJhcnkgaXRzZWxmLgogIFVyaSBnZXRDYW5vbmljYWxVcmkoRW50aXR5IGVsZW1lbnQpIHsKICAgIFVyaSBsaWJyYXJ5VXJpID0gX3VyaUZyb21FbGVtZW50KGVsZW1lbnQpOwogICAgaWYgKGxpYnJhcnlVcmkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAobGlicmFyeVVyaS5zY2hlbWUgPT0gJ3BhY2thZ2UnKSB7CiAgICAgIGludCBzbGFzaFBvcyA9IGxpYnJhcnlVcmkucGF0aC5pbmRleE9mKCcvJyk7CiAgICAgIGlmIChzbGFzaFBvcyAhPSAtMSkgewogICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGxpYnJhcnlVcmkucGF0aC5zdWJzdHJpbmcoMCwgc2xhc2hQb3MpOwogICAgICAgIHJldHVybiBuZXcgVXJpKHNjaGVtZTogJ3BhY2thZ2UnLCBwYXRoOiBwYWNrYWdlTmFtZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBsaWJyYXJ5VXJpOwogIH0KCiAgVXJpIF91cmlGcm9tRWxlbWVudChFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgaXMgTGlicmFyeUVudGl0eSkgewogICAgICByZXR1cm4gZWxlbWVudC5jYW5vbmljYWxVcmk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQubGlicmFyeS5jYW5vbmljYWxVcmk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgTWVtYmVyRW50aXR5KSB7CiAgICAgIHJldHVybiBlbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBfQ29tcGlsZXJPdXRwdXQgaW1wbGVtZW50cyBhcGkuQ29tcGlsZXJPdXRwdXQgewogIGZpbmFsIENvbXBpbGVyIF9jb21waWxlcjsKICBmaW5hbCBhcGkuQ29tcGlsZXJPdXRwdXQgX3VzZXJPdXRwdXQ7CgogIF9Db21waWxlck91dHB1dCh0aGlzLl9jb21waWxlciwgYXBpLkNvbXBpbGVyT3V0cHV0IG91dHB1dCkKICAgICAgOiB0aGlzLl91c2VyT3V0cHV0ID0gb3V0cHV0ID8/IGNvbnN0IE51bGxDb21waWxlck91dHB1dCgpOwoKICBAb3ZlcnJpZGUKICBhcGkuT3V0cHV0U2luayBjcmVhdGVPdXRwdXRTaW5rKAogICAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbiwgYXBpLk91dHB1dFR5cGUgdHlwZSkgewogICAgaWYgKF9jb21waWxlci5jb21waWxhdGlvbkZhaWxlZCkgewogICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBkb24ndCBlbWl0IG91dHB1dCB3aGVuIHRoZSBjb21waWxhdGlvbiBoYXMgZmFpbGVkLgogICAgICByZXR1cm4gY29uc3QgTnVsbENvbXBpbGVyT3V0cHV0KCkuY3JlYXRlT3V0cHV0U2luayhuYW1lLCBleHRlbnNpb24sIHR5cGUpOwogICAgfQogICAgcmV0dXJuIF91c2VyT3V0cHV0LmNyZWF0ZU91dHB1dFNpbmsobmFtZSwgZXh0ZW5zaW9uLCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGFwaS5CaW5hcnlPdXRwdXRTaW5rIGNyZWF0ZUJpbmFyeVNpbmsoVXJpIHVyaSkgewogICAgcmV0dXJuIF91c2VyT3V0cHV0LmNyZWF0ZUJpbmFyeVNpbmsodXJpKTsKICB9Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBzdXBwcmVzc2VkIHdhcm5pbmdzIGFuZCBoaW50cyBmb3IgYSBnaXZlbiBsaWJyYXJ5LgpjbGFzcyBTdXBwcmVzc2lvbkluZm8gewogIGludCB3YXJuaW5ncyA9IDA7CiAgaW50IGhpbnRzID0gMDsKfQoKY2xhc3MgQ29tcGlsZXJEaWFnbm9zdGljUmVwb3J0ZXIgZXh0ZW5kcyBEaWFnbm9zdGljUmVwb3J0ZXIgewogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNPcHRpb25zIG9wdGlvbnM7CgogIEVudGl0eSBfY3VycmVudEVsZW1lbnQ7CiAgYm9vbCBoYXNDcmFzaGVkID0gZmFsc2U7CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGxhc3QgZGlhZ25vc3RpYyB3YXMgZmlsdGVyZWQsIGluIHdoaWNoIGNhc2UgdGhlCiAgLy8vIGFjY29tcGFueWluZyBpbmZvIG1lc3NhZ2Ugc2hvdWxkIGJlIGZpbHRlcmVkIGFzIHdlbGwuCiAgYm9vbCBsYXN0RGlhZ25vc3RpY1dhc0ZpbHRlcmVkID0gZmFsc2U7CgogIC8vLyBNYXAgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd2FybmluZ3MgYW5kIGhpbnRzIHRoYXQgaGF2ZSBiZWVuCiAgLy8vIHN1cHByZXNzZWQgZm9yIGVhY2ggbGlicmFyeS4KICBNYXA8VXJpLCBTdXBwcmVzc2lvbkluZm8+IHN1cHByZXNzZWRXYXJuaW5ncyA9IDxVcmksIFN1cHByZXNzaW9uSW5mbz57fTsKCiAgQ29tcGlsZXJEaWFnbm9zdGljUmVwb3J0ZXIodGhpcy5jb21waWxlciwgdGhpcy5vcHRpb25zKTsKCiAgRW50aXR5IGdldCBjdXJyZW50RWxlbWVudCA9PiBfY3VycmVudEVsZW1lbnQ7CgogIEBvdmVycmlkZQogIERpYWdub3N0aWNNZXNzYWdlIGNyZWF0ZU1lc3NhZ2UoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgTWVzc2FnZUtpbmQgbWVzc2FnZUtpbmQsCiAgICAgIFtNYXAgYXJndW1lbnRzID0gY29uc3Qge31dKSB7CiAgICBTb3VyY2VTcGFuIHNwYW4gPSBzcGFuRnJvbVNwYW5uYWJsZShzcGFubmFibGUpOwogICAgTWVzc2FnZVRlbXBsYXRlIHRlbXBsYXRlID0gTWVzc2FnZVRlbXBsYXRlLlRFTVBMQVRFU1ttZXNzYWdlS2luZF07CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZS5tZXNzYWdlKGFyZ3VtZW50cywgb3B0aW9ucy50ZXJzZURpYWdub3N0aWNzKTsKICAgIHJldHVybiBuZXcgRGlhZ25vc3RpY01lc3NhZ2Uoc3Bhbiwgc3Bhbm5hYmxlLCBtZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0RXJyb3IoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwKICAgICAgW0xpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zID0gY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdXSkgewogICAgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKG1lc3NhZ2UsIGluZm9zLCBhcGkuRGlhZ25vc3RpYy5FUlJPUik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydFdhcm5pbmcoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwKICAgICAgW0xpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zID0gY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdXSkgewogICAgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKG1lc3NhZ2UsIGluZm9zLCBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0SGludChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBbTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W11dKSB7CiAgICByZXBvcnREaWFnbm9zdGljSW50ZXJuYWwobWVzc2FnZSwgaW5mb3MsIGFwaS5EaWFnbm9zdGljLkhJTlQpOwogIH0KCiAgQGRlcHJlY2F0ZWQKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydEluZm8oU3Bhbm5hYmxlIG5vZGUsIE1lc3NhZ2VLaW5kIG1lc3NhZ2VLaW5kLAogICAgICBbTWFwIGFyZ3VtZW50cyA9IGNvbnN0IHt9XSkgewogICAgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKGNyZWF0ZU1lc3NhZ2Uobm9kZSwgbWVzc2FnZUtpbmQsIGFyZ3VtZW50cyksCiAgICAgICAgY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdLCBhcGkuRGlhZ25vc3RpYy5JTkZPKTsKICB9CgogIHZvaWQgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBpZiAoIW9wdGlvbnMuc2hvd0FsbFBhY2thZ2VXYXJuaW5ncyAmJgogICAgICAgIG1lc3NhZ2Uuc3Bhbm5hYmxlICE9IE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSkgewogICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICBjYXNlIGFwaS5EaWFnbm9zdGljLldBUk5JTkc6CiAgICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5ISU5UOgogICAgICAgICAgRW50aXR5IGVsZW1lbnQgPSBlbGVtZW50RnJvbVNwYW5uYWJsZShtZXNzYWdlLnNwYW5uYWJsZSk7CiAgICAgICAgICBpZiAoIWNvbXBpbGVyLmluVXNlckNvZGUoZWxlbWVudCwgYXNzdW1lSW5Vc2VyQ29kZTogdHJ1ZSkpIHsKICAgICAgICAgICAgVXJpIHVyaSA9IGNvbXBpbGVyLmdldENhbm9uaWNhbFVyaShlbGVtZW50KTsKICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvd1BhY2thZ2VXYXJuaW5nc0Zvcih1cmkpKSB7CiAgICAgICAgICAgICAgcmVwb3J0RGlhZ25vc3RpYyhtZXNzYWdlLCBpbmZvcywga2luZCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFN1cHByZXNzaW9uSW5mbyBpbmZvID0gc3VwcHJlc3NlZFdhcm5pbmdzLnB1dElmQWJzZW50KAogICAgICAgICAgICAgICAgdXJpLCAoKSA9PiBuZXcgU3VwcHJlc3Npb25JbmZvKCkpOwogICAgICAgICAgICBpZiAoa2luZCA9PSBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HKSB7CiAgICAgICAgICAgICAgaW5mby53YXJuaW5ncysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGluZm8uaGludHMrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBsYXN0RGlhZ25vc3RpY1dhc0ZpbHRlcmVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5JTkZPOgogICAgICAgICAgaWYgKGxhc3REaWFnbm9zdGljV2FzRmlsdGVyZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGxhc3REaWFnbm9zdGljV2FzRmlsdGVyZWQgPSBmYWxzZTsKICAgIHJlcG9ydERpYWdub3N0aWMobWVzc2FnZSwgaW5mb3MsIGtpbmQpOwogIH0KCiAgdm9pZCByZXBvcnREaWFnbm9zdGljKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBjb21waWxlci5yZXBvcnREaWFnbm9zdGljKG1lc3NhZ2UsIGluZm9zLCBraW5kKTsKICAgIGlmIChraW5kID09IGFwaS5EaWFnbm9zdGljLkVSUk9SIHx8CiAgICAgICAga2luZCA9PSBhcGkuRGlhZ25vc3RpYy5DUkFTSCB8fAogICAgICAgIChvcHRpb25zLmZhdGFsV2FybmluZ3MgJiYga2luZCA9PSBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HKSkgewogICAgICBjb21waWxlci5mYXRhbERpYWdub3N0aWNSZXBvcnRlZChtZXNzYWdlLCBpbmZvcywga2luZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNSZXBvcnRlZEVycm9yID0+IGNvbXBpbGVyLmNvbXBpbGF0aW9uRmFpbGVkOwoKICAvLy8gUGVyZm9ybSBhbiBvcGVyYXRpb24sIFtmXSwgcmV0dXJuaW5nIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBbZl0uICBJZiBhbgogIC8vLyBlcnJvciBvY2N1cnMgdGhlbiByZXBvcnQgaXQgYXMgaGF2aW5nIG9jY3VycmVkIGR1cmluZyBjb21waWxhdGlvbiBvZgogIC8vLyBbZWxlbWVudF0uICBDYW4gYmUgbmVzdGVkLgogIEBvdmVycmlkZQogIHdpdGhDdXJyZW50RWxlbWVudChFbnRpdHkgZWxlbWVudCwgZigpKSB7CiAgICBFbnRpdHkgb2xkID0gY3VycmVudEVsZW1lbnQ7CiAgICBfY3VycmVudEVsZW1lbnQgPSBlbGVtZW50OwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGYoKTsKICAgIH0gb24gU3Bhbm5hYmxlQXNzZXJ0aW9uRmFpbHVyZSBjYXRjaCAoZXgpIHsKICAgICAgaWYgKCFoYXNDcmFzaGVkKSB7CiAgICAgICAgcmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShleCk7CiAgICAgICAgcGxlYXNlUmVwb3J0Q3Jhc2goKTsKICAgICAgfQogICAgICBoYXNDcmFzaGVkID0gdHJ1ZTsKICAgICAgcmV0aHJvdzsKICAgIH0gb24gU3RhY2tPdmVyZmxvd0Vycm9yIHsKICAgICAgLy8gV2UgY2Fubm90IHJlcG9ydCBhbnl0aGluZyB1c2VmdWwgaW4gdGhpcyBjYXNlLCBiZWNhdXNlIHdlCiAgICAgIC8vIGRvIG5vdCBoYXZlIGVub3VnaCBzdGFjayBzcGFjZS4KICAgICAgcmV0aHJvdzsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChoYXNDcmFzaGVkKSByZXRocm93OwogICAgICB0cnkgewogICAgICAgIHVuaGFuZGxlZEV4Y2VwdGlvbk9uRWxlbWVudChlbGVtZW50KTsKICAgICAgfSBjYXRjaCAoZG91YmxlRmF1bHQpIHsKICAgICAgICAvLyBJZ25vcmluZyBleGNlcHRpb25zIGluIGV4Y2VwdGlvbiBoYW5kbGluZy4KICAgICAgfQogICAgICByZXRocm93OwogICAgfSBmaW5hbGx5IHsKICAgICAgX2N1cnJlbnRFbGVtZW50ID0gb2xkOwogICAgfQogIH0KCiAgdm9pZCByZXBvcnRBc3NlcnRpb25GYWlsdXJlKFNwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmUgZXgpIHsKICAgIFN0cmluZyBtZXNzYWdlID0KICAgICAgICAoZXgubWVzc2FnZSAhPSBudWxsKSA/IHRyeVRvU3RyaW5nKGV4Lm1lc3NhZ2UpIDogdHJ5VG9TdHJpbmcoZXgpOwogICAgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKAogICAgICAgIGNyZWF0ZU1lc3NhZ2UoZXgubm9kZSwgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogbWVzc2FnZX0pLAogICAgICAgIGNvbnN0IDxEaWFnbm9zdGljTWVzc2FnZT5bXSwKICAgICAgICBhcGkuRGlhZ25vc3RpYy5DUkFTSCk7CiAgfQoKICAvLy8gVXNpbmcgW2Zyb250ZW5kU3RyYXRlZ3ldIHRvIGNvbXB1dGUgYSBbU291cmNlU3Bhbl0gZnJvbSBzcGFubmFibGUgdXNpbmcKICAvLy8gdGhlIFtjdXJyZW50RWxlbWVudF0gYXMgY29udGV4dC4KICBTb3VyY2VTcGFuIF9zcGFuRnJvbVN0cmF0ZWd5KFNwYW5uYWJsZSBzcGFubmFibGUpIHsKICAgIFNvdXJjZVNwYW4gc3BhbjsKICAgIGlmIChjb21waWxlci5waGFzZSA9PSBDb21waWxlci5QSEFTRV9DT01QSUxJTkcpIHsKICAgICAgc3BhbiA9CiAgICAgICAgICBjb21waWxlci5iYWNrZW5kU3RyYXRlZ3kuc3BhbkZyb21TcGFubmFibGUoc3Bhbm5hYmxlLCBjdXJyZW50RWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICBzcGFuID0gY29tcGlsZXIuZnJvbnRlbmRTdHJhdGVneQogICAgICAgICAgLnNwYW5Gcm9tU3Bhbm5hYmxlKHNwYW5uYWJsZSwgY3VycmVudEVsZW1lbnQpOwogICAgfQogICAgaWYgKHNwYW4gIT0gbnVsbCkgcmV0dXJuIHNwYW47CiAgICB0aHJvdyAnTm8gZXJyb3IgbG9jYXRpb24uJzsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gc3BhbkZyb21TcGFubmFibGUoU3Bhbm5hYmxlIHNwYW5uYWJsZSkgewogICAgaWYgKHNwYW5uYWJsZSA9PSBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFKSB7CiAgICAgIHNwYW5uYWJsZSA9IGN1cnJlbnRFbGVtZW50OwogICAgfSBlbHNlIGlmIChzcGFubmFibGUgPT0gTk9fTE9DQVRJT05fU1BBTk5BQkxFKSB7CiAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgc3Bhbm5hYmxlID0gY3VycmVudEVsZW1lbnQ7CiAgICB9CiAgICBpZiAoc3Bhbm5hYmxlIGlzIFNvdXJjZVNwYW4pIHsKICAgICAgcmV0dXJuIHNwYW5uYWJsZTsKICAgIH0gZWxzZSBpZiAoc3Bhbm5hYmxlIGlzIEhJbnN0cnVjdGlvbikgewogICAgICBFbnRpdHkgZWxlbWVudCA9IHNwYW5uYWJsZS5zb3VyY2VFbGVtZW50OwogICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSBlbGVtZW50ID0gY3VycmVudEVsZW1lbnQ7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHBvc2l0aW9uID0gc3Bhbm5hYmxlLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICBpZiAocG9zaXRpb24gIT0gbnVsbCkgcmV0dXJuIHBvc2l0aW9uLnNvdXJjZVNwYW47CiAgICAgIHJldHVybiBfc3BhbkZyb21TdHJhdGVneShlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfc3BhbkZyb21TdHJhdGVneShzcGFubmFibGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50ZXJuYWxFcnJvcihTcGFubmFibGUgc3Bhbm5hYmxlLCByZWFzb24pIHsKICAgIFN0cmluZyBtZXNzYWdlID0gdHJ5VG9TdHJpbmcocmVhc29uKTsKICAgIHJlcG9ydERpYWdub3N0aWNJbnRlcm5hbCgKICAgICAgICBjcmVhdGVNZXNzYWdlKHNwYW5uYWJsZSwgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogbWVzc2FnZX0pLAogICAgICAgIGNvbnN0IDxEaWFnbm9zdGljTWVzc2FnZT5bXSwKICAgICAgICBhcGkuRGlhZ25vc3RpYy5DUkFTSCk7CiAgICB0aHJvdyAnSW50ZXJuYWwgRXJyb3I6ICRtZXNzYWdlJzsKICB9CgogIHZvaWQgdW5oYW5kbGVkRXhjZXB0aW9uT25FbGVtZW50KEVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoaGFzQ3Jhc2hlZCkgcmV0dXJuOwogICAgaGFzQ3Jhc2hlZCA9IHRydWU7CiAgICByZXBvcnREaWFnbm9zdGljKGNyZWF0ZU1lc3NhZ2UoZWxlbWVudCwgTWVzc2FnZUtpbmQuQ09NUElMRVJfQ1JBU0hFRCksCiAgICAgICAgY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdLCBhcGkuRGlhZ25vc3RpYy5DUkFTSCk7CiAgICBwbGVhc2VSZXBvcnRDcmFzaCgpOwogIH0KCiAgdm9pZCBwbGVhc2VSZXBvcnRDcmFzaCgpIHsKICAgIHByaW50KE1lc3NhZ2VUZW1wbGF0ZS5URU1QTEFURVNbTWVzc2FnZUtpbmQuUExFQVNFX1JFUE9SVF9USEVfQ1JBU0hdCiAgICAgICAgLm1lc3NhZ2UoeydidWlsZElkJzogY29tcGlsZXIub3B0aW9ucy5idWlsZElkfSkpOwogIH0KCiAgLy8vIEZpbmRzIHRoZSBhcHByb3hpbWF0ZSBbRWxlbWVudF0gZm9yIFtub2RlXS4gW2N1cnJlbnRFbGVtZW50XSBpcyB1c2VkIGFzCiAgLy8vIHRoZSBkZWZhdWx0IHZhbHVlLgogIEVudGl0eSBlbGVtZW50RnJvbVNwYW5uYWJsZShTcGFubmFibGUgbm9kZSkgewogICAgRW50aXR5IGVsZW1lbnQ7CiAgICBpZiAobm9kZSBpcyBFbnRpdHkpIHsKICAgICAgZWxlbWVudCA9IG5vZGU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgSEluc3RydWN0aW9uKSB7CiAgICAgIGVsZW1lbnQgPSBub2RlLnNvdXJjZUVsZW1lbnQ7CiAgICB9CiAgICByZXR1cm4gZWxlbWVudCAhPSBudWxsID8gZWxlbWVudCA6IGN1cnJlbnRFbGVtZW50OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2cobWVzc2FnZSkgewogICAgTWVzc2FnZSBtc2cgPSBNZXNzYWdlVGVtcGxhdGUuVEVNUExBVEVTW01lc3NhZ2VLaW5kLkdFTkVSSUNdCiAgICAgICAgLm1lc3NhZ2Uoeyd0ZXh0JzogJyRtZXNzYWdlJ30pOwogICAgcmVwb3J0RGlhZ25vc3RpYyhuZXcgRGlhZ25vc3RpY01lc3NhZ2UobnVsbCwgbnVsbCwgbXNnKSwKICAgICAgICBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W10sIGFwaS5EaWFnbm9zdGljLlZFUkJPU0VfSU5GTyk7CiAgfQoKICBTdHJpbmcgdHJ5VG9TdHJpbmcob2JqZWN0KSB7CiAgICB0cnkgewogICAgICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIHJldHVybiAnPGV4Y2VwdGlvbiBpbiB0b1N0cmluZygpPic7CiAgICB9CiAgfQoKICBvbkVycm9yKFVyaSB1cmksIGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIHRyeSB7CiAgICAgIGlmICghaGFzQ3Jhc2hlZCkgewogICAgICAgIGhhc0NyYXNoZWQgPSB0cnVlOwogICAgICAgIGlmIChlcnJvciBpcyBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlKSB7CiAgICAgICAgICByZXBvcnRBc3NlcnRpb25GYWlsdXJlKGVycm9yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwb3J0RGlhZ25vc3RpYygKICAgICAgICAgICAgICBjcmVhdGVNZXNzYWdlKAogICAgICAgICAgICAgICAgICBuZXcgU291cmNlU3Bhbih1cmksIDAsIDApLCBNZXNzYWdlS2luZC5DT01QSUxFUl9DUkFTSEVEKSwKICAgICAgICAgICAgICBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W10sCiAgICAgICAgICAgICAgYXBpLkRpYWdub3N0aWMuQ1JBU0gpOwogICAgICAgIH0KICAgICAgICBwbGVhc2VSZXBvcnRDcmFzaCgpOwogICAgICB9CiAgICB9IGNhdGNoIChkb3VibGVGYXVsdCkgewogICAgICAvLyBJZ25vcmluZyBleGNlcHRpb25zIGluIGV4Y2VwdGlvbiBoYW5kbGluZy4KICAgIH0KICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25DcmFzaEluVXNlckNvZGUoU3RyaW5nIG1lc3NhZ2UsIGV4Y2VwdGlvbiwgc3RhY2tUcmFjZSkgewogICAgaGFzQ3Jhc2hlZCA9IHRydWU7CiAgICBwcmludCgnJG1lc3NhZ2U6ICR7dHJ5VG9TdHJpbmcoZXhjZXB0aW9uKX0nKTsKICAgIHByaW50KHRyeVRvU3RyaW5nKHN0YWNrVHJhY2UpKTsKICB9CgogIHZvaWQgcmVwb3J0U3VwcHJlc3NlZE1lc3NhZ2VzU3VtbWFyeSgpIHsKICAgIGlmICghb3B0aW9ucy5zaG93QWxsUGFja2FnZVdhcm5pbmdzICYmICFvcHRpb25zLnN1cHByZXNzV2FybmluZ3MpIHsKICAgICAgc3VwcHJlc3NlZFdhcm5pbmdzLmZvckVhY2goKFVyaSB1cmksIFN1cHByZXNzaW9uSW5mbyBpbmZvKSB7CiAgICAgICAgTWVzc2FnZUtpbmQga2luZCA9IE1lc3NhZ2VLaW5kLkhJRERFTl9XQVJOSU5HU19ISU5UUzsKICAgICAgICBpZiAoaW5mby53YXJuaW5ncyA9PSAwKSB7CiAgICAgICAgICBraW5kID0gTWVzc2FnZUtpbmQuSElEREVOX0hJTlRTOwogICAgICAgIH0gZWxzZSBpZiAoaW5mby5oaW50cyA9PSAwKSB7CiAgICAgICAgICBraW5kID0gTWVzc2FnZUtpbmQuSElEREVOX1dBUk5JTkdTOwogICAgICAgIH0KICAgICAgICBNZXNzYWdlVGVtcGxhdGUgdGVtcGxhdGUgPSBNZXNzYWdlVGVtcGxhdGUuVEVNUExBVEVTW2tpbmRdOwogICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlLm1lc3NhZ2UoCiAgICAgICAgICAgIHsnd2FybmluZ3MnOiBpbmZvLndhcm5pbmdzLCAnaGludHMnOiBpbmZvLmhpbnRzLCAndXJpJzogdXJpfSwKICAgICAgICAgICAgb3B0aW9ucy50ZXJzZURpYWdub3N0aWNzKTsKICAgICAgICByZXBvcnREaWFnbm9zdGljKG5ldyBEaWFnbm9zdGljTWVzc2FnZShudWxsLCBudWxsLCBtZXNzYWdlKSwKICAgICAgICAgICAgY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdLCBhcGkuRGlhZ25vc3RpYy5ISU5UKTsKICAgICAgfSk7CiAgICB9CiAgfQp9CgpjbGFzcyBfTWFwSW1wYWN0Q2FjaGVEZWxldGVyIGltcGxlbWVudHMgSW1wYWN0Q2FjaGVEZWxldGVyIHsKICBmaW5hbCBNYXA8RW50aXR5LCBXb3JsZEltcGFjdD4gX2ltcGFjdENhY2hlOwogIF9NYXBJbXBhY3RDYWNoZURlbGV0ZXIodGhpcy5faW1wYWN0Q2FjaGUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHVuY2FjaGVXb3JsZEltcGFjdChFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSByZXR1cm47CiAgICBfaW1wYWN0Q2FjaGUucmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbXB0eUNhY2hlKCkgewogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSByZXR1cm47CiAgICBfaW1wYWN0Q2FjaGUuY2xlYXIoKTsKICB9Cn0KCmNsYXNzIF9FbXB0eUVudmlyb25tZW50IGltcGxlbWVudHMgRW52aXJvbm1lbnQgewogIGNvbnN0IF9FbXB0eUVudmlyb25tZW50KCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2YWx1ZU9mKFN0cmluZyBrZXkpID0+IG51bGw7CgogIEBvdmVycmlkZQogIE1hcDxTdHJpbmcsIFN0cmluZz4gdG9NYXAoKSA9PiBjb25zdCB7fTsKfQoKLy8vIEludGVyZmFjZSBmb3Igc2hvd2luZyBwcm9ncmVzcyBkdXJpbmcgY29tcGlsYXRpb24uCmNsYXNzIFByb2dyZXNzIHsKICBjb25zdCBQcm9ncmVzcygpOwoKICAvLy8gU3RhcnRzIGEgbmV3IHBoYXNlIGZvciB3aGljaCB0byBzaG93IHByb2dyZXNzLgogIHZvaWQgc3RhcnRQaGFzZSgpIHt9CgogIC8vLyBTaG93cyBwcm9ncmVzcyBvZiB0aGUgY3VycmVudCBwaGFzZSBpZiBuZWVkZWQuIFRoZSBzaG93biBtZXNzYWdlIGlzCiAgLy8vIGNvbXB1dGVkIGFzICckcHJlZml4JGNvdW50JHN1ZmZpeCcuCiAgdm9pZCBzaG93UHJvZ3Jlc3MoU3RyaW5nIHByZWZpeCwgaW50IGNvdW50LCBTdHJpbmcgc3VmZml4KSB7fQp9CgovLy8gUHJvZ3Jlc3MgaW1wbGVtZW50YXRpb25zIHRoYXQgcHJpbnRzIHByb2dyZXNzIHRvIHRoZSBbRGlhZ25vc3RpY1JlcG9ydGVyXQovLy8gd2l0aCA1MDBtcyBpbnRlcnZhbHMuCmNsYXNzIFByb2dyZXNzSW1wbCBpbXBsZW1lbnRzIFByb2dyZXNzIHsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgX3JlcG9ydGVyOwogIGZpbmFsIFN0b3B3YXRjaCBfc3RvcHdhdGNoID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwoKICBQcm9ncmVzc0ltcGwodGhpcy5fcmVwb3J0ZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHNob3dQcm9ncmVzcyhTdHJpbmcgcHJlZml4LCBpbnQgY291bnQsIFN0cmluZyBzdWZmaXgpIHsKICAgIGlmIChfc3RvcHdhdGNoLmVsYXBzZWRNaWxsaXNlY29uZHMgPiA1MDApIHsKICAgICAgX3JlcG9ydGVyLmxvZygnJHByZWZpeCRjb3VudCRzdWZmaXgnKTsKICAgICAgX3N0b3B3YXRjaC5yZXNldCgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzdGFydFBoYXNlKCkgewogICAgX3N0b3B3YXRjaC5yZXNldCgpOwogIH0KfQoKLy8vIFByb2dyZXNzIGltcGxlbWVudGF0aW9ucyB0aGF0IHByaW50cyBwcm9ncmVzcyB0byB0aGUgW0RpYWdub3N0aWNSZXBvcnRlcl0KLy8vIHdpdGggNTAwbXMgaW50ZXJ2YWxzIHVzaW5nIGVzY2FwZSBzZXF1ZW5jZXMgdG8ga2VlcCB0aGUgcHJvZ3Jlc3MgZGF0YSBvbiBhCi8vLyBzaW5nbGUgbGluZS4KY2xhc3MgSW50ZXJhY3RpdmVQcm9ncmVzcyBpbXBsZW1lbnRzIFByb2dyZXNzIHsKICBmaW5hbCBTdG9wd2F0Y2ggX3N0b3B3YXRjaFBoYXNlID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwogIGZpbmFsIFN0b3B3YXRjaCBfc3RvcHdhdGNoSW50ZXJ2YWwgPSBuZXcgU3RvcHdhdGNoKCkuLnN0YXJ0KCk7CiAgQG92ZXJyaWRlCiAgdm9pZCBzdGFydFBoYXNlKCkgewogICAgcHJpbnQoJycpOwogICAgX3N0b3B3YXRjaFBoYXNlLnJlc2V0KCk7CiAgICBfc3RvcHdhdGNoSW50ZXJ2YWwucmVzZXQoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2hvd1Byb2dyZXNzKFN0cmluZyBwcmVmaXgsIGludCBjb3VudCwgU3RyaW5nIHN1ZmZpeCkgewogICAgaWYgKF9zdG9wd2F0Y2hJbnRlcnZhbC5lbGFwc2VkTWlsbGlzZWNvbmRzID4gNTAwKSB7CiAgICAgIHZhciB0aW1lID0gX3N0b3B3YXRjaFBoYXNlLmVsYXBzZWRNaWxsaXNlY29uZHMgLyAxMDAwOwogICAgICB2YXIgcmF0ZSA9IGNvdW50IC8gX3N0b3B3YXRjaFBoYXNlLmVsYXBzZWRNaWxsaXNlY29uZHM7CiAgICAgIHZhciBzID0gbmV3IFN0cmluZ0J1ZmZlcignXHgxYlsxQVx4MWJbSycpIC8vIGdvIHVwIGFuZCBjbGVhciB0aGUgbGluZS4KICAgICAg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ZXIgdGhpbmdzIHRvIGtlZXAgaW4gbWluZDoKLy8vCi8vLyBBbiBJTkZPIG1lc3NhZ2Ugc2hvdWxkIGFsd2F5cyBiZSBwcmVjZWRlZCBieSBhIG5vbi1JTkZPIG1lc3NhZ2UsIGFuZCB0aGUKLy8vIElORk8gbWVzc2FnZXMgYXJlIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dCB0aGUgcHJlY2VkaW5nIG5vbi1JTkZPCi8vLyBtZXNzYWdlLiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgZHVwbGljYXRlZCBlbGVtZW50cy4gRmlyc3QgcmVwb3J0IGEgV0FSTklORwovLy8gb3IgRVJST1IgYWJvdXQgdGhlIGR1cGxpY2F0ZWQgZWxlbWVudCwgYW5kIHRoZW4gcmVwb3J0IGFuIElORk8gYWJvdXQgdGhlCi8vLyBsb2NhdGlvbiBvZiB0aGUgZXhpc3RpbmcgZWxlbWVudC4KbGlicmFyeSBkYXJ0MmpzLm1lc3NhZ2VzOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgc2hvdyB0b2tlblRvU3RyaW5nOwoKaW1wb3J0ICdnZW5lcmF0ZWQvc2hhcmVkX21lc3NhZ2VzLmRhcnQnIGFzIHNoYXJlZF9tZXNzYWdlczsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCcgc2hvdyBDb25zdGFudEV4cHJlc3Npb247CmltcG9ydCAnLi4vY29tbWFuZGxpbmVfb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICdpbnZhcmlhbnQuZGFydCcgc2hvdyBmYWlsZWRBdDsKaW1wb3J0ICdzcGFubmFibGUuZGFydCcgc2hvdyBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFOwoKY29uc3QgRE9OVF9LTk9XX0hPV19UT19GSVggPSAiQ29tcHV0ZXIgc2F5cyBubyEiOwoKLy8vIEtleXMgZm9yIHRoZSBbTWVzc2FnZVRlbXBsYXRlXXMuCmVudW0gTWVzc2FnZUtpbmQgewogIEFCU1RSQUNUX0dFVFRFUiwKICBDQU5OT1RfUkVTT0xWRSwKICBDT01QSUxFUl9DUkFTSEVELAogIENPTVBMRVhfUkVUVVJOSU5HX05TTSwKICBDT01QTEVYX1RIUk9XSU5HX05TTSwKICBDT05TVF9DT05TVFJVQ1RPUl9XSVRIX0JPRFksCiAgQ09OU1RfRkFDVE9SWSwKICBDT05TVFJVQ1RPUl9XSVRIX1JFVFVSTl9UWVBFLAogIENZQ0xJQ19DT01QSUxFX1RJTUVfQ09OU1RBTlRTLAogIERJUkVDVExZX1RIUk9XSU5HX05TTSwKICBFUVVBTF9NQVBfRU5UUllfS0VZLAogIEVRVUFMX1NFVF9FTlRSWSwKICBFWFRSQU5FT1VTX01PRElGSUVSLAogIEVYVFJBTkVPVVNfTU9ESUZJRVJfUkVQTEFDRSwKICBGT1JJTl9OT1RfQVNTSUdOQUJMRSwKICBHRU5FUklDLAogIEhJRERFTl9ISU5UUywKICBISURERU5fV0FSTklOR1MsCiAgSElEREVOX1dBUk5JTkdTX0hJTlRTLAogIElNUExJQ0lUX0pTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRCwKICBJTlZBTElEX0FTU0VSVF9WQUxVRSwKICBJTlZBTElEX0FTU0VSVF9WQUxVRV9NRVNTQUdFLAogIElOVkFMSURfQk9PTF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRSwKICBJTlZBTElEX0NPTlNUQU5UX0NBU1QsCiAgSU5WQUxJRF9DT05TVEFOVF9BRERfVFlQRVMsCiAgSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfSU5UX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfTlVNX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfUFJJTUlUSVZFX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9DT01QTEVNRU5UX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9DT05ESVRJT05BTF9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1IsCiAgSU5WQUxJRF9DT05TVEFOVF9ESVYsCiAgSU5WQUxJRF9DT05TVEFOVF9JTkRFWCwKICBJTlZBTElEX0NPTlNUQU5UX0lOVEVSUE9MQVRJT05fVFlQRSwKICBJTlZBTElEX0NPTlNUQU5UX05FR0FURV9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfTk9UX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfQUREX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9OVU1fQUREX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfTEVOR1RIX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9TSElGVCwKICBJTlZBTElEX0ZST01fRU5WSVJPTk1FTlRfTkFNRV9UWVBFLAogIElOVkFMSURfSU5UX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLAogIElOVkFMSURfTE9HSUNBTF9BTkRfT1BFUkFORF9UWVBFLAogIElOVkFMSURfTE9HSUNBTF9PUl9PUEVSQU5EX1RZUEUsCiAgSU5WQUxJRF9NRVRBREFUQSwKICBJTlZBTElEX01FVEFEQVRBX0dFTkVSSUMsCiAgSU5WQUxJRF9QQUNLQUdFX0NPTkZJRywKICBJTlZBTElEX1BBQ0tBR0VfVVJJLAogIElOVkFMSURfU1RSSU5HX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLAogIEpTX0lOVEVST1BfQ0xBU1NfQ0FOTk9UX0VYVEVORF9EQVJUX0NMQVNTLAogIEpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX0NPTlNUUlVDVE9SLAogIEpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX01FTUJFUiwKICBKU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURUQsCiAgSlNfSU5URVJPUF9JTkRFWF9OT1RfU1VQUE9SVEVELAogIEpTX0lOVEVST1BfTk9OX0VYVEVSTkFMX01FTUJFUiwKICBKU19JTlRFUk9QX01FTUJFUl9JTl9OT05fSlNfSU5URVJPUF9DTEFTUywKICBKU19JTlRFUk9QX01FVEhPRF9XSVRIX05BTUVEX0FSR1VNRU5UUywKICBKU19PQkpFQ1RfTElURVJBTF9DT05TVFJVQ1RPUl9XSVRIX1BPU0lUSU9OQUxfQVJHVU1FTlRTLAogIEpTX1BMQUNFSE9MREVSX0NBUFRVUkUsCiAgTElCUkFSWV9OT1RfRk9VTkQsCiAgTUlSUk9SU19MSUJSQVJZX05PVF9TVVBQT1JUX1dJVEhfQ0ZFLAogIE1JU1NJTkdfRVhQUkVTU0lPTl9JTl9USFJPVywKICBOQVRJVkVfTk9OX0lOU1RBTkNFX0lOX05PTl9OQVRJVkVfQ0xBU1MsCiAgTk9fU1VDSF9TVVBFUl9NRU1CRVIsCiAgTk9OX05BVElWRV9FWFRFUk5BTCwKICBOT1RfQV9DT01QSUxFX1RJTUVfQ09OU1RBTlQsCiAgTk9UX0FTU0lHTkFCTEUsCiAgUExFQVNFX1JFUE9SVF9USEVfQ1JBU0gsCiAgUFJFQU1CTEUsCiAgUkVUSFJPV19PVVRTSURFX0NBVENILAogIFJFVFVSTl9JTl9HRU5FUkFUSVZFX0NPTlNUUlVDVE9SLAogIFJFVFVSTl9JTl9HRU5FUkFUT1IsCiAgUlVOVElNRV9UWVBFX1RPX1NUUklOR19PQkpFQ1QsCiAgUlVOVElNRV9UWVBFX1RPX1NUUklOR19TVUJUWVBFLAogIFNUUklOR19FWFBFQ1RFRCwKICBVTkRFRklORURfR0VUVEVSLAogIFVOREVGSU5FRF9JTlNUQU5DRV9HRVRURVJfQlVUX1NFVFRFUiwKICBVTkRFRklORURfTUVUSE9ELAogIFVOREVGSU5FRF9PUEVSQVRPUiwKICBVTkRFRklORURfU0VUVEVSLAogIFVOREVGSU5FRF9TVEFUSUNfR0VUVEVSX0JVVF9TRVRURVIsCiAgVU5ERUZJTkVEX1NUQVRJQ19TRVRURVJfQlVUX0dFVFRFUiwKICBVTkRFRklORURfU1VQRVJfU0VUVEVSLAogIFdST05HX0FSR1VNRU5UX0ZPUl9KUywKICBXUk9OR19BUkdVTUVOVF9GT1JfSlNfRklSU1QsCiAgV1JPTkdfQVJHVU1FTlRfRk9SX0pTX1NFQ09ORCwKICBXUk9OR19BUkdVTUVOVF9GT1JfSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQsCiAgLy8gVE9ETygzMjU1Nyk6IFJlbW92ZSB0aGVzZSB3aGVuIGlzc3VlIDMyNTU3IGlzIGZpeGVkLgogIFNXSVRDSF9DQVNFX0ZPUkJJRERFTiwKICBTV0lUQ0hfQ0FTRV9WQUxVRV9PVkVSUklERVNfRVFVQUxTLAogIFNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTCwKICBTV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUxfQ0FTRSwKfQoKLy8vIEEgbWVzc2FnZSB0ZW1wbGF0ZSBmb3IgYW4gZXJyb3IsIHdhcm5pbmcsIGhpbnQgb3IgaW5mbyBtZXNzYWdlIGdlbmVyYXRlZAovLy8gYnkgdGhlIGNvbXBpbGVyLiBFYWNoIHRlbXBsYXRlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIFtNZXNzYWdlS2luZF0gdGhhdAovLy8gdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogRm9yIEluZm9zLCBjb25zaWRlciBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlCi8vIGVycm9yL3dhcm5pbmcvaGludCB0aGF0IHRoZXkgYmVsb25nIHRvLgpjbGFzcyBNZXNzYWdlVGVtcGxhdGUgewogIGZpbmFsIE1lc3NhZ2VLaW5kIGtpbmQ7CgogIC8vLyBTaG91bGQgZGVzY3JpYmUgd2hhdCBpcyB3cm9uZyBhbmQgd2h5LgogIGZpbmFsIFN0cmluZyB0ZW1wbGF0ZTsKCiAgLy8vIFNob3VsZCBkZXNjcmliZSBob3cgdG8gZml4IHRoZSBwcm9ibGVtLiBFbGlkZWQgd2hlbiB1c2luZyAtLXRlcnNlIG9wdGlvbi4KICBmaW5hbCBTdHJpbmcgaG93VG9GaXg7CgogIC8vLyAgRXhhbXBsZXMgd2lsbCBiZSBjaGVja2VkIGJ5CiAgLy8vICB0ZXN0cy9jb21waWxlci9kYXJ0MmpzL21lc3NhZ2Vfa2luZF90ZXN0LmRhcnQuCiAgLy8vCiAgLy8vICBBbiBleGFtcGxlIGlzIGVpdGhlciBhIFN0cmluZyBjb250YWluaW5nIHRoZSBleGFtcGxlIHNvdXJjZSBjb2RlIG9yIGEgTWFwCiAgLy8vICBmcm9tIGZpbGVuYW1lcyB0byBzb3VyY2UgY29kZS4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgZmlsZW5hbWUgZm9yIHRoZQogIC8vLyAgbWFpbiBsaWJyYXJ5IGNvZGUgbXVzdCBiZSAnbWFpbi5kYXJ0Jy4KICBmaW5hbCBMaXN0IGV4YW1wbGVzOwoKICAvLy8gQWRkaXRpb25hbCBvcHRpb25zIG5lZWRlZCBmb3IgdGhlIGV4YW1wbGVzIHRvIHdvcmsuCiAgZmluYWwgTGlzdDxTdHJpbmc+IG9wdGlvbnM7CgogIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSh0aGlzLmtpbmQsIHRoaXMudGVtcGxhdGUsCiAgICAgIHt0aGlzLmhvd1RvRml4LCB0aGlzLmV4YW1wbGVzLCB0aGlzLm9wdGlvbnM6IGNvbnN0IDxTdHJpbmc+W119KTsKCiAgLy8vIEFsbCB0ZW1wbGF0ZXMgdXNlZCBieSB0aGUgY29tcGlsZXIuCiAgLy8vCiAgLy8vIFRoZSBtYXAgaXMgY29tcGxldGUgbWFwcGluZyBmcm9tIFtNZXNzYWdlS2luZF0gdG8gdGhlaXIgY29ycmVzcG9uZGluZwogIC8vLyBbTWVzc2FnZVRlbXBsYXRlXS4KICAvLyBUaGUga2V5IHR5cGUgaXMgYSB1bmlvbiBvZiBNZXNzYWdlS2luZCBhbmQgU2hhcmVkTWVzc2FnZUtpbmQuCiAgc3RhdGljIGZpbmFsIE1hcDxkeW5hbWljLCBNZXNzYWdlVGVtcGxhdGU+IFRFTVBMQVRFUyA9IDxkeW5hbWljLAogICAgICBNZXNzYWdlVGVtcGxhdGU+e30KICAgIC4uYWRkQWxsKHNoYXJlZF9tZXNzYWdlcy5URU1QTEFURVMpCiAgICAuLmFkZEFsbChjb25zdCA8TWVzc2FnZUtpbmQsIE1lc3NhZ2VUZW1wbGF0ZT57CiAgICAgIC8vLyBEbyBub3QgdXNlIHRoaXMuIEl0IGlzIGhlcmUgZm9yIGxlZ2FjeSBhbmQgZGVidWdnaW5nLiBJdCB2aW9sYXRlcyBpdGVtCiAgICAgIC8vLyA0IG9mIHRoZSBndWlkZSBsaW5lcyBmb3IgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQzoKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZShNZXNzYWdlS2luZC5HRU5FUklDLCAnI3t0ZXh0fScpLAoKICAgICAgTWVzc2FnZUtpbmQuQ0FOTk9UX1JFU09MVkU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkNBTk5PVF9SRVNPTFZFLCAiQ2Fubm90IHJlc29sdmUgJyN7bmFtZX0nLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuTk9UX0FfQ09NUElMRV9USU1FX0NPTlNUQU5UOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5OT1RfQV9DT01QSUxFX1RJTUVfQ09OU1RBTlQsCiAgICAgICAgICAiTm90IGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiIpLAoKICAgICAgTWVzc2FnZUtpbmQuQ1lDTElDX0NPTVBJTEVfVElNRV9DT05TVEFOVFM6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkNZQ0xJQ19DT01QSUxFX1RJTUVfQ09OU1RBTlRTLAogICAgICAgICAgIkN5Y2xlIGluIHRoZSBjb21waWxlLXRpbWUgY29uc3RhbnQgY29tcHV0YXRpb24uIiksCgogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX1NFVFRFUl9CVVRfR0VUVEVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX1NFVFRFUl9CVVRfR0VUVEVSLAogICAgICAgICAgIkNhbm5vdCByZXNvbHZlIHNldHRlci4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLlNUUklOR19FWFBFQ1RFRDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuU1RSSU5HX0VYUEVDVEVELAogICAgICAgICAgIkV4cGVjdGVkIGEgJ1N0cmluZycsIGJ1dCBnb3QgYW4gaW5zdGFuY2Ugb2YgJyN7dHlwZX0nLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19DQU5OT1RfRVhURU5EX0RBUlRfQ0xBU1M6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19DQU5OT1RfRVhURU5EX0RBUlRfQ0xBU1MsCiAgICAgICAgICAgICAgIkpzLWludGVyb3AgY2xhc3MgJyN7Y2xzfScgY2Fubm90IGV4dGVuZCBmcm9tIHRoZSBub24ganMtaW50ZXJvcCAiCiAgICAgICAgICAgICAgImNsYXNzICcje3N1cGVyY2xhc3N9Jy4iLAogICAgICAgICAgICAgIGhvd1RvRml4OiAiQW5ub3RhdGUgdGhlIHN1cGVyY2xhc3Mgd2l0aCBASlMuIiwKICAgICAgICAgICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICAgICAiIiIKICAgICAgICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgICAgICAgIGNsYXNzIEZvbyB7IH0KCiAgICAgICAgICAgICAgQEpTKCkKICAgICAgICAgICAgICBjbGFzcyBCYXIgZXh0ZW5kcyBGb28geyB9CgogICAgICAgICAgICAgIG1haW4oKSB7CiAgICAgICAgICAgICAgICBuZXcgQmFyKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICIiIgogICAgICAgICAgXSksCgogICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0lOREVYX05PVF9TVVBQT1JURUQ6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfSU5ERVhfTk9UX1NVUFBPUlRFRCwKICAgICAgICAgICJKcy1pbnRlcm9wIGRvZXMgbm90IHN1cHBvcnQgW10gYW5kIFtdPSBvcGVyYXRvciBtZXRob2RzLiIsCiAgICAgICAgICBob3dUb0ZpeDogIlRyeSByZXBsYWNpbmcgW10gYW5kIFtdPSBvcGVyYXRvciBtZXRob2RzIHdpdGggbm9ybWFsICIKICAgICAgICAgICAgICAibWV0aG9kcy4iLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCiAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICBASlMoKQogICAgICAgIGNsYXNzIEZvbyB7CiAgICAgICAgICBleHRlcm5hbCBvcGVyYXRvciBbXShhcmcpOwogICAgICAgIH0KCiAgICAgICAgbWFpbigpIHsKICAgICAgICAgIG5ldyBGb28oKVswXTsKICAgICAgICB9CiAgICAgICAgIiIiLAogICAgICAgICAgICAiIiIKICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgIEBKUygpCiAgICAgICAgY2xhc3MgRm9vIHsKICAgICAgICAgIGV4dGVybmFsIG9wZXJhdG9yIFtdPShhcmcsIHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIG1haW4oKSB7CiAgICAgICAgICBuZXcgRm9vKClbMF0gPSAxOwogICAgICAgIH0KICAgICAgICAiIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfT0JKRUNUX0xJVEVSQUxfQ09OU1RSVUNUT1JfV0lUSF9QT1NJVElPTkFMX0FSR1VNRU5UUzoKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgICAgICBNZXNzYWdlS2luZAogICAgICAgICAgICAgICAgICAuSlNfT0JKRUNUX0xJVEVSQUxfQ09OU1RSVUNUT1JfV0lUSF9QT1NJVElPTkFMX0FSR1VNRU5UUywKICAgICAgICAgICAgICAiU29tZSBwYXJhbWV0ZXJzIGluIGFub255bW91cyBqcy1pbnRlcm9wIGNsYXNzICcje2Nsc30nICIKICAgICAgICAgICAgICAib2JqZWN0IGxpdGVyYWwgY29uc3RydWN0b3IgYXJlIHBvc2l0aW9uYWwgaW5zdGVhZCBvZiBuYW1lZC4iCiAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgIGhvd1RvRml4OiAiTWFrZSBhbGwgYXJndW1lbnRzIGluIGV4dGVybmFsIGZhY3Rvcnkgb2JqZWN0IGxpdGVyYWwgIgogICAgICAgICAgICAgICAgICAiY29uc3RydWN0b3JzIG5hbWVkLiIsCiAgICAgICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCmNsYXNzIFN1cGVyIHsKICBmYWN0b3J5IFN1cGVyLmZvbygpID0+IG51bGw7Cn0KY2xhc3MgQ2xhc3MgZXh0ZW5kcyBTdXBlciB7CiAgQ2xhc3MoKSA6IHN1cGVyLmZvbygpOwp9Cm1haW4oKSA9PiBuZXcgQ2xhc3MoKTsKIiIiCiAgICAgICAgICBdKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTk9OX0VYVEVSTkFMX01FTUJFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9OT05fRVhURVJOQUxfTUVNQkVSLAogICAgICAgICAgIkpzLWludGVyb3AgbWVtYmVycyBtdXN0IGJlICdleHRlcm5hbCcuIiksCgogICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FTUJFUl9JTl9OT05fSlNfSU5URVJPUF9DTEFTUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRU1CRVJfSU5fTk9OX0pTX0lOVEVST1BfQ0xBU1MsCiAgICAgICAgICAiSnMtaW50ZXJvcCBjbGFzcyBtZW1iZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBqcy1pbnRlcm9wIGNsYXNzZXMuIiwKICAgICAgICAgIGhvd1RvRml4OiAiVHJ5IG1hcmtpbmcgdGhlIGVuY2xvc2luZyBjbGFzcyBhcyBqcy1pbnRlcm9wIG9yICIKICAgICAgICAgICAgICAicmVtb3ZlIHRoZSBqcy1pbnRlcm9wIGFubm90YXRpb24gZnJvbSB0aGUgbWVtYmVyLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfQ09OU1RSVUNUT1I6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfQ09OU1RSVUNUT1IsCiAgICAgICAgICAgICAgIkNvbnN0cnVjdG9yICcje2NvbnN0cnVjdG9yfScgaW4ganMtaW50ZXJvcCBjbGFzcyAnI3tjbHN9JyBpcyAiCiAgICAgICAgICAgICAgIm5vdCBleHRlcm5hbC4iLAogICAgICAgICAgICAgIGhvd1RvRml4OiAiVHJ5IGFkZGluZyB0aGUgJ2V4dGVybmFsJyB0byAnI3tjb25zdHJ1Y3Rvcn0nLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfTUVNQkVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9NRU1CRVIsCiAgICAgICAgICAiTWVtYmVyICcje21lbWJlcn0nIGluIGpzLWludGVyb3AgY2xhc3MgJyN7Y2xzfScgaXMgbm90IGV4dGVybmFsLiIsCiAgICAgICAgICBob3dUb0ZpeDogIlRyeSBhZGRpbmcgdGhlICdleHRlcm5hbCcgdG8gJyN7bWVtYmVyfScuIiwKICAgICAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgICAgICIiIgogICAgICAgICAgICAgIGltcG9ydCAncGFja2FnZTpqcy9qcy5kYXJ0JzsKCiAgICAgICAgICAgICAgQEpTKCkKICAgICAgICAgICAgICBjbGFzcyBGb28gewogICAgICAgICAgICAgICAgYmFyKCkge30KICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIG1haW4oKSB7CiAgICAgICAgICAgICAgICBuZXcgRm9vKCkuYmFyKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICIiIgogICAgICAgICAgXSksCgogICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FVEhPRF9XSVRIX05BTUVEX0FSR1VNRU5UUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRVRIT0RfV0lUSF9OQU1FRF9BUkdVTUVOVFMsCiAgICAgICAgICAiSnMtaW50ZXJvcCBtZXRob2QgJyN7bWV0aG9kfScgaGFzIG5hbWVkIGFyZ3VtZW50cyBidXQgaXMgbm90ICIKICAgICAgICAgICJhIGZhY3RvcnkgY29uc3RydWN0b3Igb2YgYW4gQGFub255bW91cyBASlMgY2xhc3MuIiwKICAgICAgICAgIGhvd1RvRml4OiAiUmVtb3ZlIGFsbCBuYW1lZCBhcmd1bWVudHMgZnJvbSBqcy1pbnRlcm9wIG1ldGhvZCBvciAiCiAgICAgICAgICAgICAgImluIHRoZSBjYXNlIG9mIGEgZmFjdG9yeSBjb25zdHJ1Y3RvciBhbm5vdGF0ZSB0aGUgY2xhc3MgIgogICAgICAgICAgICAgICJhcyBAYW5vbnltb3VzLiIsCiAgICAgICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICAgICAiIiIKICAgICAgICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgICAgICAgIEBKUygpCiAgICAgICAgICAgICAgY2xhc3MgRm9vIHsKICAgICAgICAgICAgICAgIGV4dGVybmFsIGJhcihmb28sIHtiYXp9KTsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIG1haW4oKSB7CiAgICAgICAgICAgICAgICBuZXcgRm9vKCkuYmFyKDQsIGJhejogNSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICIiIgogICAgICAgICAgXSksCiAgICAgIE1lc3NhZ2VLaW5kLklNUExJQ0lUX0pTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRDoKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5JTVBMSUNJVF9KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURUQsCiAgICAgICAgICAgICAgIkZpZWxkcyBpbiBqcy1pbnRlcm9wIGNsYXNzZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIiwKICAgICAgICAgICAgICBob3dUb0ZpeDogIlRyeSByZXBsYWNpbmcgdGhlIGZpZWxkIHdpdGggYW4gIgogICAgICAgICAgICAgICAgICAiZXh0ZXJuYWwgZ2V0dGVyIGFuZC9vciBzZXR0ZXIuIiksCiAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVELAogICAgICAgICAgIkZpZWxkIGNhbid0IGJlIG1hcmtlZCBhcyBqcy1pbnRlcm9wLiIsCiAgICAgICAgICBob3dUb0ZpeDogIlRyeSByZXBsYWNpbmcgdGhlIGZpZWxkIHdpdGggYW4gIgogICAgICAgICAgICAgICJleHRlcm5hbCBnZXR0ZXIgYW5kL29yIHNldHRlci4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkxJQlJBUllfTk9UX0ZPVU5EOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5MSUJSQVJZX05PVF9GT1VORCwgIkxpYnJhcnkgbm90IGZvdW5kICcje3Jlc29sdmVkVXJpfScuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX1BBQ0tBR0VfQ09ORklHOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX1BBQ0tBR0VfQ09ORklHLAogICAgICAgICAgIiIiUGFja2FnZSBjb25maWcgZmlsZSAnI3t1cml9JyBpcyBpbnZhbGlkLgoje2V4Y2VwdGlvbn0iIiIsCiAgICAgICAgICBob3dUb0ZpeDogRE9OVF9LTk9XX0hPV19UT19GSVgpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9QQUNLQUdFX1VSSTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9QQUNLQUdFX1VSSSwKICAgICAgICAgICInI3t1cml9JyBpcyBub3QgYSB2YWxpZCBwYWNrYWdlIFVSSSAoI3tleGNlcHRpb259KS4iLAogICAgICAgICAgaG93VG9GaXg6IERPTlRfS05PV19IT1dfVE9fRklYLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCi8vIGNhbid0IGhhdmUgYSAndG9wIGxldmVsJyBwYWNrYWdlIFVSSQppbXBvcnQgJ3BhY2thZ2U6Zm9vLmRhcnQnOwoKbWFpbigpIHt9CiIiIiwKICAgICAgICAgICAgIiIiCi8vIGNhbid0IGhhdmUgMiBzbGFzaGVzCmltcG9ydCAncGFja2FnZTovL2Zvby9mb28uZGFydCc7CgptYWluKCkge30KIiIiLAogICAgICAgICAgICAiIiIKLy8gcGFja2FnZSBuYW1lIG11c3QgYmUgdmFsaWQKaW1wb3J0ICdwYWNrYWdlOm5vdFx2YWxpZC9mb28uZGFydCc7CgptYWluKCkge30KIiIiCiAgICAgICAgICBdKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkpTX1BMQUNFSE9MREVSX0NBUFRVUkU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX1BMQUNFSE9MREVSX0NBUFRVUkUsCiAgICAgICAgICAiSlMgY29kZSBtdXN0IG5vdCB1c2UgJyMnIHBsYWNlaG9sZGVycyBpbnNpZGUgZnVuY3Rpb25zLiIsCiAgICAgICAgICBob3dUb0ZpeDoKICAgICAgICAgICAgICAiVXNlIGFuIGltbWVkaWF0ZWx5IGNhbGxlZCBKYXZhU2NyaXB0IGZ1bmN0aW9uIHRvIGNhcHR1cmUgdGhlIgogICAgICAgICAgICAgICIgdGhlIHBsYWNlaG9sZGVyIHZhbHVlcyBhcyBKYXZhU2NyaXB0IGZ1bmN0aW9uIHBhcmFtZXRlcnMuIiksCgogICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlM6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KUywKICAgICAgICAgICJKUyBleHByZXNzaW9uIG11c3QgdGFrZSB0d28gb3IgbW9yZSBhcmd1bWVudHMuIiksCgogICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfRklSU1Q6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19GSVJTVCwKICAgICAgICAgICJKUyBleHByZXNzaW9uIG11c3QgdGFrZSB0d28gb3IgbW9yZSBhcmd1bWVudHMuIiksCgogICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfU0VDT05EOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfU0VDT05ELAogICAgICAgICAgIkpTIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIGxpdGVyYWwuIiksCgogICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQ6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5ULAogICAgICAgICAgICAgICJBcmd1bWVudCBmb3IgJ0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UJyBtdXN0IGJlIGEgdHlwZSBjb25zdGFudC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkFCU1RSQUNUX0dFVFRFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuQUJTVFJBQ1RfR0VUVEVSLAogICAgICAgICAgIlRoZSBnZXR0ZXIgJyN7bmFtZX0nIGhhcyBubyBpbXBsZW1lbnRhdGlvbiBpbiAiCiAgICAgICAgICAiY2xhc3MgJyN7Y2xhc3N9Jy4iLAogICAgICAgICAgaG93VG9GaXg6ICJUcnkgYWRkaW5nIGEgYm9keSB0byAnI3tuYW1lfScgb3IgZGVjbGFyaW5nICIKICAgICAgICAgICAgICAiJyN7Y2xhc3N9JyB0byBiZSAnYWJzdHJhY3QnLiIsCiAgICAgICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICAgICAiIiIKY2xhc3MgQ2xhc3MgewogIGdldCBnZXR0ZXI7Cn0KbWFpbigpID0+IG5ldyBDbGFzcygpOwoiIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQSwKICAgICAgICAgICJBIG1ldGFkYXRhIGFubm90YXRpb24gbXVzdCBiZSBlaXRoZXIgYSByZWZlcmVuY2UgdG8gYSBjb21waWxlLXRpbWUgIgogICAgICAgICAgImNvbnN0YW50IHZhcmlhYmxlIG9yIGEgY2FsbCB0byBhIGNvbnN0YW50IGNvbnN0cnVjdG9yLiIsCiAgICAgICAgICBob3dUb0ZpeDoKICAgICAgICAgICAgICAiVHJ5IHVzaW5nIGEgZGlmZmVyZW50IGNvbnN0YW50IHZhbHVlIG9yIHJlZmVyZW5jaW5nIGl0IHRocm91Z2ggYSAiCiAgICAgICAgICAgICAgImNvbnN0YW50IHZhcmlhYmxlLiIsCiAgICAgICAgICBleGFtcGxlczogY29uc3QgWydAT2JqZWN0IG1haW4oKSB7fScsICdAcHJpbnQgbWFpbigpIHt9J10pLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQV9HRU5FUklDOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX01FVEFEQVRBX0dFTkVSSUMsCiAgICAgICAgICAiQSBtZXRhZGF0YSBhbm5vdGF0aW9uIHVzaW5nIGEgY29uc3RhbnQgY29uc3RydWN0b3IgY2Fubm90IHVzZSB0eXBlICIKICAgICAgICAgICJhcmd1bWVudHMuIiwKICAgICAgICAgIGhvd1RvRml4OgogICAgICAgICAgICAgICJUcnkgcmVtb3ZpbmcgdGhlIHR5cGUgYXJndW1lbnRzIG9yIHJlZmVyZW5jaW5nIHRoZSBjb25zdGFudCAiCiAgICAgICAgICAgICAgInRocm91Z2ggYSBjb25zdGFudCB2YXJpYWJsZS4iLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgJycnCmNsYXNzIEM8VD4gewogIGNvbnN0IEMoKTsKfQpAQzxpbnQ+KCkgbWFpbigpIHt9CicnJwogICAgICAgICAgXSksCgogICAgICBNZXNzYWdlS2luZC5FUVVBTF9NQVBfRU5UUllfS0VZOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5FUVVBTF9NQVBfRU5UUllfS0VZLAogICAgICAgICAgIkFuIGVudHJ5IHdpdGggdGhlIHNhbWUga2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBtYXAuIiwKICAgICAgICAgIGhvd1RvRml4OgogICAgICAgICAgICAgICJUcnkgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGVudHJ5IG9yIGNoYW5naW5nIHRoZSBrZXkgaW4gb25lICIKICAgICAgICAgICAgICAib2YgdGhlIGVudHJpZXMuIiwKICAgICAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgICAgICIiIgptYWluKCkgewogIHZhciBtID0gY29uc3Qgeydmb28nOiAxLCAnZm9vJzogMn07Cn0iIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuRVFVQUxfU0VUX0VOVFJZOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5FUVVBTF9TRVRfRU5UUlksICJBbiBlbnRyeSBhcHBlYXJzIHR3aWNlIGluIHRoZSBzZXQuIiwKICAgICAgICAgIGhvd1RvRml4OiAiVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUgZW50cmllcy4iLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCm1haW4oKSB7CiAgdmFyIG0gPSBjb25zdCB7J2ZvbycsICdiYXInLCAnZm9vJ307Cn0iIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuQ09NUElMRVJfQ1JBU0hFRDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuQ09NUElMRVJfQ1JBU0hFRCwKICAgICAgICAgICJUaGUgY29tcGlsZXIgY3Jhc2hlZCB3aGVuIGNvbXBpbGluZyB0aGlzIGVsZW1lbnQuIiksCgogICAgICBNZXNzYWdlS2luZC5QTEVBU0VfUkVQT1JUX1RIRV9DUkFTSDoKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZShNZXNzYWdlS2luZC5QTEVBU0VfUkVQT1JUX1RIRV9DUkFTSCwgJycnClRoZSBjb21waWxlciBpcyBicm9rZW4uCgpXaGVuIGNvbXBpbGluZyB0aGUgYWJvdmUgZWxlbWVudCwgdGhlIGNvbXBpbGVyIGNyYXNoZWQuIEl0IGlzIG5vdApwb3NzaWJsZSB0byB0ZWxsIGlmIHRoaXMgaXMgY2F1c2VkIGJ5IGEgcHJvYmxlbSBpbiB5b3VyIHByb2dyYW0gb3IKbm90LiBSZWdhcmRsZXNzLCB0aGUgY29tcGlsZXIgc2hvdWxkIG5vdCBjcmFzaC4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvCnJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KClBsZWFzZSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CgoqIHRoZSBuYW1lIGFuZCB2ZXJzaW9uIG9mIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSwKCiogdGhlIERhcnQgU0RLIGJ1aWxkIG51bWJlciAoI3tidWlsZElkfSksIGFuZAoKKiB0aGUgZW50aXJlIG1lc3NhZ2UgeW91IHNlZSBoZXJlIChpbmNsdWRpbmcgdGhlIGZ1bGwgc3RhY2sgdHJhY2UKICBiZWxvdyBhcyB3ZWxsIGFzIHRoZSBzb3VyY2UgbG9jYXRpb24gYWJvdmUpLgonJycpLAoKICAgICAgTWVzc2FnZUtpbmQuSElEREVOX1dBUk5JTkdTX0hJTlRTOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5ISURERU5fV0FSTklOR1NfSElOVFMsCiAgICAgICAgICAiI3t3YXJuaW5nc30gd2FybmluZyhzKSBhbmQgI3toaW50c30gaGludChzKSBzdXBwcmVzc2VkIGluICN7dXJpfS4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkhJRERFTl9XQVJOSU5HUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSElEREVOX1dBUk5JTkdTLAogICAgICAgICAgIiN7d2FybmluZ3N9IHdhcm5pbmcocykgc3VwcHJlc3NlZCBpbiAje3VyaX0uIiksCgogICAgICBNZXNzYWdlS2luZC5ISURERU5fSElOVFM6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkhJRERFTl9ISU5UUywgIiN7aGludHN9IGhpbnQocykgc3VwcHJlc3NlZCBpbiAje3VyaX0uIiksCgogICAgICBNZXNzYWdlS2luZC5QUkVBTUJMRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuUFJFQU1CTEUsCiAgICAgICAgICAiV2hlbiBydW4gb24gdGhlIGNvbW1hbmQtbGluZSwgdGhlIGNvbXBpbGVkIG91dHB1dCBtaWdodCIKICAgICAgICAgICIgcmVxdWlyZSBhIHByZWFtYmxlIGZpbGUgbG9jYXRlZCBpbjpcbiIKICAgICAgICAgICIgIDxzZGs+L2xpYi9faW50ZXJuYWwvanNfcnVudGltZS9saWIvcHJlYW1ibGVzLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT05ESVRJT05BTF9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTkRJVElPTkFMX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBjb25zdGFudCBjb25kaXRpb24uICIKICAgICAgICAgICJNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0lOVEVSUE9MQVRJT05fVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9JTlRFUlBPTEFUSU9OX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgdmFsaWQgaW4gY29uc3RhbnQgc3RyaW5nICIKICAgICAgICAgICJpbnRlcnBvbGF0aW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgIgogICAgICAgICAgIm9yICdTdHJpbmcnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfUFJJTUlUSVZFX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX1BSSU1JVElWRV9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCBiaW5hcnkgI3tvcGVyYXRvcn0gZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgIgogICAgICAgICAgIidib29sJywgJ2ludCcsICdkb3VibGUnLCAnU3RyaW5nJywgb3IgJ051bGwnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfQUREX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0FERF9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCBiaW5hcnkgKyBleHByZXNzaW9uIG9uICdTdHJpbmcnLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ1N0cmluZycuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NUUklOR19MRU5HVEhfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfTEVOR1RIX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIGZvciBhICIKICAgICAgICAgICIubGVuZ3RoIGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdTdHJpbmcnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TSElGVDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TSElGVCwKICAgICAgICAgICJTaGlmdCBhbW91bnQgbXVzdCBiZSBub24tbmVnYXRpdmUgaW4gIgogICAgICAgICAgImAje2xlZnR9ICN7b3BlcmF0b3J9ICN7cmlnaHR9YC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfRElWOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0RJViwKICAgICAgICAgICJEaXZpc29yIG11c3QgYmUgbm9uLXplcm8gaW4gYCN7bGVmdH0gI3tvcGVyYXRvcn0gI3tyaWdodH1gLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9OVU1fQUREX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTlVNX0FERF9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCBiaW5hcnkgKyBleHByZXNzaW9uIG9uICdudW0nLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ2ludCcgb3IgJ2RvdWJsZScuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NBU1Q6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ0FTVCwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHN1YnR5cGUgb2YgI3tjYXN0VHlwZX0uIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0FERF9UWVBFUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9BRERfVFlQRVMsCiAgICAgICAgICAiYCN7bGVmdENvbnN0YW50fWAgb2YgdHlwZSAnI3tsZWZ0VHlwZX0nIGFuZCAiCiAgICAgICAgICAiYCN7cmlnaHRDb25zdGFudH1gIG9mIHR5cGUgJyN7cmlnaHRUeXBlfScgYXJlIG5vdCB2YWxpZCBvcGVyYW5kcyAiCiAgICAgICAgICAib2YgYSBjb25zdGFudCBiaW5hcnkgKyBleHByZXNzaW9uLiBNdXN0IGJvdGggYmUgZWl0aGVyIG9mICIKICAgICAgICAgICJ0eXBlICdTdHJpbmcnLCBvciBvZiB0eXBlcyAnaW50JyBvciAnZG91YmxlJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX05VTV9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9OVU1fVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSAiCiAgICAgICAgICAiY29uc3RhbnQgYmluYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICIKICAgICAgICAgICInaW50JyBvciAnZG91YmxlJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX0lOVF9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9JTlRfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSAiCiAgICAgICAgICAiY29uc3RhbnQgYmluYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICIKICAgICAgICAgICInaW50Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTk9UX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTk9UX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgIgogICAgICAgICAgImNvbnN0YW50IHVuYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICIKICAgICAgICAgICInYm9vbCcuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05FR0FURV9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05FR0FURV9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCB1bmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ2ludCcgb3IgJ2RvdWJsZScuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTVBMRU1FTlRfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT01QTEVNRU5UX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgIgogICAgICAgICAgImNvbnN0YW50IHVuYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICIKICAgICAgICAgICInaW50Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfSU5ERVg6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfSU5ERVgsCiAgICAgICAgICAiSW5kZXggZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9GUk9NX0VOVklST05NRU5UX05BTUVfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9GUk9NX0VOVklST05NRU5UX05BTUVfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGVudmlyb25tZW50IG5hbWUgIgogICAgICAgICAgImNvbnN0YW50LiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnU3RyaW5nJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQk9PTF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRToKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0JPT0xfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEUsCiAgICAgICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgIgogICAgICAgICAgICAgICJgYm9vbC5mcm9tRW52aXJvbm1lbnRgIGRlZmF1bHQgdmFsdWUgY29uc3RhbnQuICIKICAgICAgICAgICAgICAiTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnIG9yIGBudWxsYC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfSU5UX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFOgogICAgICAgICAgY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfSU5UX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLAogICAgICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkICIKICAgICAgICAgICAgICAiYGludC5mcm9tRW52aXJvbm1lbnRgIGRlZmF1bHQgdmFsdWUgY29uc3RhbnQuICIKICAgICAgICAgICAgICAiTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2ludCcgb3IgYG51bGxgLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9TVFJJTkdfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEU6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9TVFJJTkdfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEUsCiAgICAgICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgIgogICAgICAgICAgICAgICJgU3RyaW5nLmZyb21FbnZpcm9ubWVudGAgZGVmYXVsdCB2YWx1ZSBjb25zdGFudC4gIgogICAgICAgICAgICAgICJNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnU3RyaW5nJyBvciBgbnVsbGAuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0xPR0lDQUxfQU5EX09QRVJBTkRfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX0FORF9PUEVSQU5EX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBsb2dpY2FsIGFuZCBvcGVyYW5kLiAiCiAgICAgICAgICAiTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX09SX09QRVJBTkRfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX09SX09QRVJBTkRfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGxvZ2ljYWwgb3Igb3BlcmFuZC4gIgogICAgICAgICAgIk11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1I6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1IsCiAgICAgICAgICAiQ29uc3RydWN0b3IgJyN7Y29uc3RydWN0b3JOYW1lfScgaXMgbm90IGEgdmFsaWQgY29uc3RhbnQgIgogICAgICAgICAgImNvbnN0cnVjdG9yLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9BU1NFUlRfVkFMVUU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFLCAiQXNzZXJ0aW9uICcje2Fzc2VydGlvbn0nIGZhaWxlZC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFX01FU1NBR0U6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFX01FU1NBR0UsCiAgICAgICAgICAiQXNzZXJ0aW9uIGZhaWxlZDogI3ttZXNzYWdlfSIpLAoKICAgICAgTWVzc2FnZUtpbmQuTUlSUk9SU19MSUJSQVJZX05PVF9TVVBQT1JUX1dJVEhfQ0ZFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5NSVJST1JTX0xJQlJBUllfTk9UX1NVUFBPUlRfV0lUSF9DRkUsICIiIgpkYXJ0MmpzIG5vIGxvbmdlciBzdXBwb3J0cyB0aGUgZGFydDptaXJyb3JzIGxpYnJhcnkuCgpBUElzIGZyb20gdGhpcyBsaWJyYXJ5IHdpbGwgdGhyb3cgYSBydW50aW1lIGVycm9yIGF0IHRoaXMgdGltZSwgYnV0IHRoZXkgd2lsbApiZWNvbWUgYSBjb21waWxlLXRpbWUgZXJyb3IgaW4gdGhlIGZ1dHVyZS4iIiIpLAoKICAgICAgTWVzc2FnZUtpbmQuRElSRUNUTFlfVEhST1dJTkdfTlNNOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5ESVJFQ1RMWV9USFJPV0lOR19OU00sCiAgICAgICAgICAiVGhpcyAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbiBpcyBndWFyYW50ZWVkIHRvIHRocm93IGFuICIKICAgICAgICAgICJleGNlcHRpb24uIFRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGJlIHNtYWxsZXIgaWYgaXQgaXMgIgogICAgICAgICAgInJld3JpdHRlbi4iLAogICAgICAgICAgaG93VG9GaXg6ICJSZXdyaXRlIHRvICIKICAgICAgICAgICAgICAiJ25vU3VjaE1ldGhvZChJbnZvY2F0aW9uIGkpID0+IHN1cGVyLm5vU3VjaE1ldGhvZChpKTsnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuQ09NUExFWF9USFJPV0lOR19OU006IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkNPTVBMRVhfVEhST1dJTkdfTlNNLAogICAgICAgICAgIlRoaXMgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24gaXMgZ3VhcmFudGVlZCB0byB0aHJvdyBhbiAiCiAgICAgICAgICAiZXhjZXB0aW9uLiBUaGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBiZSBzbWFsbGVyIGFuZCB0aGUgY29tcGlsZXIgIgogICAgICAgICAgIndpbGwgYmUgYWJsZSB0byBwZXJmb3JtIG1vcmUgb3B0aW1pemF0aW9ucyBpZiBpdCBpcyByZXdyaXR0ZW4uIiwKICAgICAgICAgIGhvd1RvRml4OiAiUmV3cml0ZSB0byAiCiAgICAgICAgICAgICAgIidub1N1Y2hNZXRob2QoSW52b2NhdGlvbiBpKSA9PiBzdXBlci5ub1N1Y2hNZXRob2QoaSk7Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkNPTVBMRVhfUkVUVVJOSU5HX05TTTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuQ09NUExFWF9SRVRVUk5JTkdfTlNNLAogICAgICAgICAgIk92ZXJyaWRpbmcgJ25vU3VjaE1ldGhvZCcgY2F1c2VzIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSAiCiAgICAgICAgICAibW9yZSBjb2RlIGFuZCBwcmV2ZW50cyB0aGUgY29tcGlsZXIgZnJvbSBkb2luZyBzb21lIG9wdGltaXphdGlvbnMuIiwKICAgICAgICAgIGhvd1RvRml4OiAiQ29uc2lkZXIgcmVtb3ZpbmcgdGhpcyAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbi4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLlJVTlRJTUVfVFlQRV9UT19TVFJJTkdfT0JKRUNUOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5SVU5USU1FX1RZUEVfVE9fU1RSSU5HX09CSkVDVCwKICAgICAgICAgICJVc2luZyAnLnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCknIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgIgogICAgICAgICAgIm1vcmUgY29kZSBiZWNhdXNlIGl0IG5lZWRzIHRvIHByZXNlcnZlIHR5cGUgYXJndW1lbnRzIG9uIGFsbCAiCiAgICAgICAgICAiZ2VuZXJpYyBjbGFzc2VzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBuZWNlc3NhcnkgZWxzZXdoZXJlLiIsCiAgICAgICAgICBob3dUb0ZpeDogIklmIHVzZWQgb25seSBmb3IgZGVidWdnaW5nLCBjb25zaWRlciB1c2luZyBvcHRpb24gIgogICAgICAgICAgICAgICIke0ZsYWdzLmxheFJ1bnRpbWVUeXBlVG9TdHJpbmd9IHRvIHJlZHVjZSB0aGUgY29kZSBzaXplICIKICAgICAgICAgICAgICAiaW1wYWN0LiIpLAoKICAgICAgTWVzc2FnZUtpbmQuUlVOVElNRV9UWVBFX1RPX1NUUklOR19TVUJUWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5SVU5USU1FX1RZUEVfVE9fU1RSSU5HX1NVQlRZUEUsCiAgICAgICAgICAiVXNpbmcgJy5ydW50aW1lVHlwZS50b1N0cmluZygpJyBoZXJlIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gIgogICAgICAgICAgImdlbmVyYXRlIG1vcmUgY29kZSBiZWNhdXNlIGl0IG5lZWRzIHRvIHByZXNlcnZlIHR5cGUgYXJndW1lbnRzIG9uICIKICAgICAgICAgICJhbGwgZ2VuZXJpYyBzdWJ0eXBlcyBvZiAnI3tyZWNlaXZlclR5cGV9JywgZXZlbiBpZiB0aGV5IGFyZSBub3QgIgogICAgICAgICAgIm5lY2Vzc2FyeSBlbHNld2hlcmUuIiwKICAgICAgICAgIGhvd1RvRml4OiAiSWYgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcsIGNvbnNpZGVyIHVzaW5nIG9wdGlvbiAiCiAgICAgICAgICAgICAgIiR7RmxhZ3MubGF4UnVudGltZVR5cGVUb1N0cmluZ30gdG8gcmVkdWNlIHRoZSBjb2RlIHNpemUgIgogICAgICAgICAgICAgICJpbXBhY3QuIiksCgogICAgICBNZXNzYWdlS2luZC5OT05fTkFUSVZFX0VYVEVSTkFMOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5OT05fTkFUSVZFX0VYVEVSTkFMLAogICAgICAgICAgIk9ubHkgZXh0ZXJuYWwganMtaW50ZXJvcCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZC4iLAogICAgICAgICAgaG93VG9GaXg6CiAgICAgICAgICAgICAgIlRyeSByZW1vdmluZyAnZXh0ZXJuYWwnIGtleXdvcmQgb3IgYW5ub3RhdGluZyB0aGUgZnVuY3Rpb24gIgogICAgICAgICAgICAgICJhcyBhIGpzLWludGVyb3AgZnVuY3Rpb24uIiksCgogICAgICBNZXNzYWdlS2luZC5OQVRJVkVfTk9OX0lOU1RBTkNFX0lOX05PTl9OQVRJVkVfQ0xBU1M6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLk5BVElWRV9OT05fSU5TVEFOQ0VfSU5fTk9OX05BVElWRV9DTEFTUywKICAgICAgICAgICJOYXRpdmUgbm9uLWluc3RhbmNlIG1lbWJlcnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBuYXRpdmUgY2xhc3Nlcy4iKSwKCiAgICAgIC8vIFRPRE8oMzI1NTcpOiBSZW1vdmUgdGhlc2Ugd2hlbiBpc3N1ZSAzMjU1NyBpcyBmaXhlZC4KICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVkFMVUVfT1ZFUlJJREVTX0VRVUFMUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVkFMVUVfT1ZFUlJJREVTX0VRVUFMUywKICAgICAgICAgICInY2FzZScgZXhwcmVzc2lvbiB0eXBlICcje3R5cGV9JyBvdmVycmlkZXMgJ29wZXJhdG9yID09Jy4iKSwKICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfRk9SQklEREVOOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9GT1JCSURERU4sCiAgICAgICAgICAiJ2Nhc2UnIGV4cHJlc3Npb24gbWF5IG5vdCBiZSBvZiB0eXBlICcje3R5cGV9Jy4iKSwKICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUwsCiAgICAgICAgICAiJ2Nhc2UnIGV4cHJlc3Npb25zIGRvIG5vdCBhbGwgaGF2ZSB0eXBlICcje3R5cGV9Jy4iKSwKICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMX0NBU0U6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTF9DQVNFLAogICAgICAgICAgIidjYXNlJyBleHByZXNzaW9uIG9mIHR5cGUgJyN7dHlwZX0nLiIpLAogICAgfSk7IC8vIEVuZCBvZiBURU1QTEFURVMuCgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IHRlbXBsYXRlOwoKICBNZXNzYWdlIG1lc3NhZ2UoW01hcCBhcmd1bWVudHMgPSBjb25zdCB7fSwgYm9vbCB0ZXJzZSA9IGZhbHNlXSkgewogICAgcmV0dXJuIG5ldyBNZXNzYWdlKHRoaXMsIGFyZ3VtZW50cywgdGVyc2UpOwogIH0KCiAgYm9vbCBnZXQgaGFzSG93VG9GaXggPT4gaG93VG9GaXggIT0gbnVsbCAmJiBob3dUb0ZpeCAhPSBET05UX0tOT1dfSE9XX1RPX0ZJWDsKfQoKY2xhc3MgTWVzc2FnZSB7CiAgZmluYWwgTWVzc2FnZVRlbXBsYXRlIHRlbXBsYXRlOwogIGZpbmFsIE1hcCBhcmd1bWVudHM7CiAgZmluYWwgYm9vbCB0ZXJzZTsKICBTdHJpbmcgbWVzc2FnZTsKCiAgTWVzc2FnZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmFyZ3VtZW50cywgdGhpcy50ZXJzZSkgewogICAgYXNzZXJ0KCgpIHsKICAgICAgY29tcHV0ZU1lc3NhZ2UoKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogIH0KCiAgTWVzc2FnZUtpbmQgZ2V0IGtpbmQgPT4gdGVtcGxhdGUua2luZDsKCiAgU3RyaW5nIGNvbXB1dGVNZXNzYWdlKCkgewogICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgewogICAgICBtZXNzYWdlID0gdGVtcGxhdGUudGVtcGxhdGU7CiAgICAgIGFyZ3VtZW50cy5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgnI3ske2tleX19JywgY29udmVydFRvU3RyaW5nKHZhbHVlKSk7CiAgICAgIH0pOwogICAgICBhc3NlcnQoCiAgICAgICAgICBraW5kID09IE1lc3NhZ2VLaW5kLkdFTkVSSUMgfHwKICAgICAgICAgICAgICAhbWVzc2FnZS5jb250YWlucyhuZXcgUmVnRXhwKHInI1x7LitcfScpKSwKICAgICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgJ01pc3NpbmcgYXJndW1lbnRzIGluIGVycm9yIG1lc3NhZ2U6ICIkbWVzc2FnZSInKSk7CiAgICAgIGlmICghdGVyc2UgJiYgdGVtcGxhdGUuaGFzSG93VG9GaXgpIHsKICAgICAgICBTdHJpbmcgaG93VG9GaXggPSB0ZW1wbGF0ZS5ob3dUb0ZpeDsKICAgICAg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CgovLy8gQ29sbGVjdHMgZGVmaW5pdGlvbnMgcHJvdmlkZWQgdG8gdGhlIGNvbXBpbGVyIHZpYSB0aGUgYC1EYCBmbGFnLgovLy8KLy8vIEVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUgdXNlZCBpbiB0aGUgdXNlciBjb2RlIGluIHR3byB3YXlzLiBGcm9tCi8vLyBjb25kaXRpb25hbCBpbXBvcnRzLCBhbmQgZnJvbSBgY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudGAgYW5kCi8vLyBvdGhlciBzaW1pbGFyIGNvbnN0cnVjdG9ycy4KYWJzdHJhY3QgY2xhc3MgRW52aXJvbm1lbnQgewogIC8vLyBSZXR1cm4gdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgZ2l2ZW4ga2V5LgogIC8vLwogIC8vLyBOb3RlIHRoYXQgYGJvb2wuZnJvbUVudmlyb25tZW50YCBhbmQgYGludC5mcm9tRW52aXJvbm1lbnRgIGFyZSBhbHNvCiAgLy8vIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIGBTdHJpbmcuZnJvbUVudmlyb25tZW50YC4KICBTdHJpbmcgdmFsdWVPZihTdHJpbmcga2V5KTsKCiAgLy8vIFJldHVybnMgdGhlIGZ1bGwgZW52aXJvbm1lbnQgYXMgbWFwLgogIE1hcDxTdHJpbmcsIFN0cmluZz4gdG9NYXAoKTsKfQoVAE5OPAFFBElFIB0wBko4HgErHwIBJXBhY2thZ2U6Y29tcGlsZXIvc3JjL2Vudmlyb25tZW50LmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW8vbG9jYXRpb25fcHJvdmlkZXIuZGFydIYwLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5pby5sb2NhdGlvbl9wcm92aWRlcjsKCmltcG9ydCAnY29kZV9vdXRwdXQuZGFydCcgc2hvdyBDb2RlT3V0cHV0TGlzdGVuZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IExvY2F0aW9uLCBTb3VyY2U7CgovLy8gSW50ZXJmYWNlIGZvciBwcm92aWRpbmcgbGluZS9jb2x1bW4gaW5mb3JtYXRpb24uCmFic3RyYWN0IGNsYXNzIExvY2F0aW9uUHJvdmlkZXIgewogIC8vLyBUcmFuc2xhdGVzIHRoZSB6ZXJvLWJhc2VkIGNoYXJhY3RlciBbb2Zmc2V0XSAoZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEKICAvLy8gZmlsZSkgdG8gYSBbTG9jYXRpb25dLgogIExvY2F0aW9uIGdldExvY2F0aW9uKGludCBvZmZzZXQpOwp9CgovLy8gW0NvZGVPdXRwdXRMaXN0ZW5lcl0gdGhhdCBjb2xsZWN0cyBsaW5lIGluZm9ybWF0aW9uLgpjbGFzcyBMb2NhdGlvbkNvbGxlY3RvciBleHRlbmRzIENvZGVPdXRwdXRMaXN0ZW5lciBpbXBsZW1lbnRzIExvY2F0aW9uUHJvdmlkZXIgewogIGludCBsZW5ndGggPSAwOwogIExpc3Q8aW50PiBsaW5lU3RhcnRzID0gPGludD5bMF07CgogIHZvaWQgX2NvbGxlY3QoU3RyaW5nIHRleHQpIHsKICAgIGludCBpbmRleCA9IDA7CiAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCkgewogICAgICAvLyBVbml4IHVzZXMgJ1xuJyBhbmQgV2luZG93cyB1c2VzICdcclxuJywgc28gdGhpcyBhbGdvcml0aG0gd29ya3MgZm9yCiAgICAgIC8vIGJvdGggcGxhdGZvcm1zLgogICAgICBpbmRleCA9IHRleHQuaW5kZXhPZignXG4nLCBpbmRleCkgKyAxOwogICAgICBpZiAoaW5kZXggPD0gMCkgYnJlYWs7CiAgICAgIGxpbmVTdGFydHMuYWRkKGxlbmd0aCArIGluZGV4KTsKICAgIH0KICAgIGxlbmd0aCArPSB0ZXh0Lmxlbmd0aDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25UZXh0KFN0cmluZyB0ZXh0KSB7CiAgICBfY29sbGVjdCh0ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIExvY2F0aW9uIGdldExvY2F0aW9uKGludCBvZmZzZXQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwob2Zmc2V0LCAwLCBsZW5ndGgsICdvZmZzZXQnKTsKICAgIHJldHVybiBuZXcgU291cmNlKGxpbmVTdGFydHMsIG51bGwsIG51bGwsIG51bGwpLmdldExvY2F0aW9uKG51bGwsIG9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uRG9uZShpbnQgbGVuZ3RoKSB7CiAgICBsaW5lU3RhcnRzLmFkZChsZW5ndGggKyAxKTsKICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdsaW5lU3RhcnRzPSRsaW5lU3RhcnRzLGxlbmd0aD0kbGVuZ3RoJzsKICB9Cn0KOgBOTjwBJgEzATgBNSJMHSQCATlREiMBHxMiTRktHSYGGwQBDB0UBAEMJUJPBAEMHCAaBAEMFjQEAgEucGFja2FnZTpjb21waWxlci9zcmMvaW8vbG9jYXRpb25fcHJvdmlkZXIuZGFydCdzZGtyb290Oi9wa2cva2VybmVsL2xpYi9iaW5hcnkvdGFnLmRhcnSYxC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmJpbmFyeS50YWc7CgpjbGFzcyBUYWcgewogIHN0YXRpYyBjb25zdCBpbnQgTm90aGluZyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBTb21ldGhpbmcgPSAxOwoKICBzdGF0aWMgY29uc3QgaW50IENsYXNzID0gMjsKCiAgc3RhdGljIGNvbnN0IGludCBGdW5jdGlvbk5vZGUgPSAzOwoKICAvLyBNZW1iZXJzCiAgc3RhdGljIGNvbnN0IGludCBGaWVsZCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBDb25zdHJ1Y3RvciA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBQcm9jZWR1cmUgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgPSAxMDg7CgogIC8vIEluaXRpYWxpemVycwogIHN0YXRpYyBjb25zdCBpbnQgSW52YWxpZEluaXRpYWxpemVyID0gNzsKICBzdGF0aWMgY29uc3QgaW50IEZpZWxkSW5pdGlhbGl6ZXIgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgU3VwZXJJbml0aWFsaXplciA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBSZWRpcmVjdGluZ0luaXRpYWxpemVyID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBMb2NhbEluaXRpYWxpemVyID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBBc3NlcnRJbml0aWFsaXplciA9IDEyOwoKICAvLyBFeHByZXNzaW9ucwogIHN0YXRpYyBjb25zdCBpbnQgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IExvYWRMaWJyYXJ5ID0gMTQ7CiAgc3RhdGljIGNvbnN0IGludCBEaXJlY3RQcm9wZXJ0eUdldCA9IDE1OwogIHN0YXRpYyBjb25zdCBpbnQgRGlyZWN0UHJvcGVydHlTZXQgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IERpcmVjdE1ldGhvZEludm9jYXRpb24gPSAxNzsKICBzdGF0aWMgY29uc3QgaW50IENvbnN0U3RhdGljSW52b2NhdGlvbiA9IDE4OwogIHN0YXRpYyBjb25zdCBpbnQgSW52YWxpZEV4cHJlc3Npb24gPSAxOTsKICBzdGF0aWMgY29uc3QgaW50IFZhcmlhYmxlR2V0ID0gMjA7CiAgc3RhdGljIGNvbnN0IGludCBWYXJpYWJsZVNldCA9IDIxOwogIHN0YXRpYyBjb25zdCBpbnQgUHJvcGVydHlHZXQgPSAyMjsKICBzdGF0aWMgY29uc3QgaW50IFByb3BlcnR5U2V0ID0gMjM7CiAgc3RhdGljIGNvbnN0IGludCBTdXBlclByb3BlcnR5R2V0ID0gMjQ7CiAgc3RhdGljIGNvbnN0IGludCBTdXBlclByb3BlcnR5U2V0ID0gMjU7CiAgc3RhdGljIGNvbnN0IGludCBTdGF0aWNHZXQgPSAyNjsKICBzdGF0aWMgY29uc3QgaW50IFN0YXRpY1NldCA9IDI3OwogIHN0YXRpYyBjb25zdCBpbnQgTWV0aG9kSW52b2NhdGlvbiA9IDI4OwogIHN0YXRpYyBjb25zdCBpbnQgU3VwZXJNZXRob2RJbnZvY2F0aW9uID0gMjk7CiAgc3RhdGljIGNvbnN0IGludCBTdGF0aWNJbnZvY2F0aW9uID0gMzA7CiAgc3RhdGljIGNvbnN0IGludCBDb25zdHJ1Y3Rvckludm9jYXRpb24gPSAzMTsKICBzdGF0aWMgY29uc3QgaW50IENvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBOb3QgPSAzMzsKICBzdGF0aWMgY29uc3QgaW50IExvZ2ljYWxFeHByZXNzaW9uID0gMzQ7CiAgc3RhdGljIGNvbnN0IGludCBDb25kaXRpb25hbEV4cHJlc3Npb24gPSAzNTsKICBzdGF0aWMgY29uc3QgaW50IFN0cmluZ0NvbmNhdGVuYXRpb24gPSAzNjsKICBzdGF0aWMgY29uc3QgaW50IExpc3RDb25jYXRlbmF0aW9uID0gMTExOwogIHN0YXRpYyBjb25zdCBpbnQgU2V0Q29uY2F0ZW5hdGlvbiA9IDExMjsKICBzdGF0aWMgY29uc3QgaW50IE1hcENvbmNhdGVuYXRpb24gPSAxMTM7CiAgc3RhdGljIGNvbnN0IGludCBJbnN0YW5jZUNyZWF0aW9uID0gMTE0OwogIHN0YXRpYyBjb25zdCBpbnQgSXNFeHByZXNzaW9uID0gMzc7CiAgc3RhdGljIGNvbnN0IGludCBBc0V4cHJlc3Npb24gPSAzODsKICBzdGF0aWMgY29uc3QgaW50IFN0cmluZ0xpdGVyYWwgPSAzOTsKICBzdGF0aWMgY29uc3QgaW50IERvdWJsZUxpdGVyYWwgPSA0MDsKICBzdGF0aWMgY29uc3QgaW50IFRydWVMaXRlcmFsID0gNDE7CiAgc3RhdGljIGNvbnN0IGludCBGYWxzZUxpdGVyYWwgPSA0MjsKICBzdGF0aWMgY29uc3QgaW50IE51bGxMaXRlcmFsID0gNDM7CiAgc3RhdGljIGNvbnN0IGludCBTeW1ib2xMaXRlcmFsID0gNDQ7CiAgc3RhdGljIGNvbnN0IGludCBUeXBlTGl0ZXJhbCA9IDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgVGhpc0V4cHJlc3Npb24gPSA0NjsKICBzdGF0aWMgY29uc3QgaW50IFJldGhyb3cgPSA0NzsKICBzdGF0aWMgY29uc3QgaW50IFRocm93ID0gNDg7CiAgc3RhdGljIGNvbnN0IGludCBMaXN0TGl0ZXJhbCA9IDQ5OwogIHN0YXRpYyBjb25zdCBpbnQgTWFwTGl0ZXJhbCA9IDUwOwogIHN0YXRpYyBjb25zdCBpbnQgQXdhaXRFeHByZXNzaW9uID0gNTE7CiAgc3RhdGljIGNvbnN0IGludCBGdW5jdGlvbkV4cHJlc3Npb24gPSA1MjsKICBzdGF0aWMgY29uc3QgaW50IExldCA9IDUzOwogIHN0YXRpYyBjb25zdCBpbnQgQmxvY2tFeHByZXNzaW9uID0gODI7CiAgc3RhdGljIGNvbnN0IGludCBJbnN0YW50aWF0aW9uID0gNTQ7CiAgc3RhdGljIGNvbnN0IGludCBQb3NpdGl2ZUludExpdGVyYWwgPSA1NTsKICBzdGF0aWMgY29uc3QgaW50IE5lZ2F0aXZlSW50TGl0ZXJhbCA9IDU2OwogIHN0YXRpYyBjb25zdCBpbnQgQmlnSW50TGl0ZXJhbCA9IDU3OwogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RMaXN0TGl0ZXJhbCA9IDU4OwogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RNYXBMaXRlcmFsID0gNTk7CiAgc3RhdGljIGNvbnN0IGludCBTZXRMaXRlcmFsID0gMTA5OwogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RTZXRMaXRlcmFsID0gMTEwOwoKICAvLyBTdGF0ZW1lbnRzCiAgc3RhdGljIGNvbnN0IGludCBFeHByZXNzaW9uU3RhdGVtZW50ID0gNjE7CiAgc3RhdGljIGNvbnN0IGludCBCbG9jayA9IDYyOwogIHN0YXRpYyBjb25zdCBpbnQgRW1wdHlTdGF0ZW1lbnQgPSA2MzsKICBzdGF0aWMgY29uc3QgaW50IEFzc2VydFN0YXRlbWVudCA9IDY0OwogIHN0YXRpYyBjb25zdCBpbnQgTGFiZWxlZFN0YXRlbWVudCA9IDY1OwogIHN0YXRpYyBjb25zdCBpbnQgQnJlYWtTdGF0ZW1lbnQgPSA2NjsKICBzdGF0aWMgY29uc3QgaW50IFdoaWxlU3RhdGVtZW50ID0gNjc7CiAgc3RhdGljIGNvbnN0IGludCBEb1N0YXRlbWVudCA9IDY4OwogIHN0YXRpYyBjb25zdCBpbnQgRm9yU3RhdGVtZW50ID0gNjk7CiAgc3RhdGljIGNvbnN0IGludCBGb3JJblN0YXRlbWVudCA9IDcwOwogIHN0YXRpYyBjb25zdCBpbnQgU3dpdGNoU3RhdGVtZW50ID0gNzE7CiAgc3RhdGljIGNvbnN0IGludCBDb250aW51ZVN3aXRjaFN0YXRlbWVudCA9IDcyOwogIHN0YXRpYyBjb25zdCBpbnQgSWZTdGF0ZW1lbnQgPSA3MzsKICBzdGF0aWMgY29uc3QgaW50IFJldHVyblN0YXRlbWVudCA9IDc0OwogIHN0YXRpYyBjb25zdCBpbnQgVHJ5Q2F0Y2ggPSA3NTsKICBzdGF0aWMgY29uc3QgaW50IFRyeUZpbmFsbHkgPSA3NjsKICBzdGF0aWMgY29uc3QgaW50IFlpZWxkU3RhdGVtZW50ID0gNzc7CiAgc3RhdGljIGNvbnN0IGludCBWYXJpYWJsZURlY2xhcmF0aW9uID0gNzg7CiAgc3RhdGljIGNvbnN0IGludCBGdW5jdGlvbkRlY2xhcmF0aW9uID0gNzk7CiAgc3RhdGljIGNvbnN0IGludCBBc3luY0ZvckluU3RhdGVtZW50ID0gODA7CiAgc3RhdGljIGNvbnN0IGludCBBc3NlcnRCbG9jayA9IDgxOwogIC8vIDgyIGlzIG9jY3VwaWVkIGJ5IFtCbG9ja0V4cHJlc3Npb25dIChleHByZXNzaW9uKS4KCiAgLy8gVHlwZXMKICBzdGF0aWMgY29uc3QgaW50IFR5cGVkZWZUeXBlID0gODc7CiAgc3RhdGljIGNvbnN0IGludCBCb3R0b21UeXBlID0gODk7CiAgc3RhdGljIGNvbnN0IGludCBJbnZhbGlkVHlwZSA9IDkwOwogIHN0YXRpYyBjb25zdCBpbnQgRHluYW1pY1R5cGUgPSA5MTsKICBzdGF0aWMgY29uc3QgaW50IFZvaWRUeXBlID0gOTI7CiAgc3RhdGljIGNvbnN0IGludCBJbnRlcmZhY2VUeXBlID0gOTM7CiAgc3RhdGljIGNvbnN0IGludCBGdW5jdGlvblR5cGUgPSA5NDsKICBzdGF0aWMgY29uc3QgaW50IFR5cGVQYXJhbWV0ZXJUeXBlID0gOTU7CiAgc3RhdGljIGNvbnN0IGludCBTaW1wbGVJbnRlcmZhY2VUeXBlID0gOTY7CiAgc3RhdGljIGNvbnN0IGludCBTaW1wbGVGdW5jdGlvblR5cGUgPSA5NzsKCiAgLy8gUmVmZXJlbmNlcwogIHN0YXRpYyBjb25zdCBpbnQgTnVsbFJlZmVyZW5jZSA9IDk5OwogIHN0YXRpYyBjb25zdCBpbnQgQ2xhc3NSZWZlcmVuY2UgPSAxMDA7CiAgc3RhdGljIGNvbnN0IGludCBNZW1iZXJSZWZlcmVuY2UgPSAxMDE7CgogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RhbnRFeHByZXNzaW9uID0gMTA2OwoKICAvLyBUYWcgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDI0LgogIHN0YXRpYyBjb25zdCBpbnQgRGVwcmVjYXRlZF9Db25zdGFudEV4cHJlc3Npb24gPSAxMDc7CgogIC8vLyAxMDggaXMgb2NjdXBpZWQgYnkgW1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yXSAobWVtYmVyKS4KICAvLy8gMTA5IGlzIG9jY3VwaWVkIGJ5IFtTZXRMaXRlcmFsXSAoZXhwcmVzc2lvbikuCiAgLy8vIDExMCBpcyBvY2N1cGllZCBieSBbQ29uc3RTZXRMaXRlcmFsXSAoZXhwcmVzc2lvbikuCiAgLy8vIDExMSBpcyBvY2N1cGllZCBieSBbTGlzdENvbmNhdGVuYXRpb25dIChleHByZXNzaW9uKS4KICAvLy8gMTEyIGlzIG9jY3VwaWVkIGJ5IFtTZXRDb25jYXRlbmF0aW9uXSAoZXhwcmVzc2lvbikuCiAgLy8vIDExMyBpcyBvY2N1cGllZCBieSBbTWFwQ29uY2F0ZW5hdGlvbl0gKGV4cHJlc3Npb24pLgogIC8vLyAxMTQgaXMgb2NjdXBpZWQgYnkgW0luc3RhbmNlQ3JlYXRpb25dIChleHByZXNzaW9uKS4KCiAgc3RhdGljIGNvbnN0IGludCBTcGVjaWFsaXplZFRhZ0hpZ2hCaXQgPSAweDgwOyAvLyAxMDAwMDAwMAogIHN0YXRpYyBjb25zdCBpbnQgU3BlY2lhbGl6ZWRUYWdNYXNrID0gMHhGODsgLy8gMTExMTEwMDAKICBzdGF0aWMgY29uc3QgaW50IFNwZWNpYWxpemVkUGF5bG9hZE1hc2sgPSAweDc7IC8vIDAwMDAwMTExCgogIHN0YXRpYyBjb25zdCBpbnQgU3BlY2lhbGl6ZWRWYXJpYWJsZUdldCA9IDEyODsKICBzdGF0aWMgY29uc3QgaW50IFNwZWNpYWxpemVkVmFyaWFibGVTZXQgPSAxMzY7CiAgc3RhdGljIGNvbnN0IGludCBTcGVjaWFsaXplZEludExpdGVyYWwgPSAxNDQ7CgogIHN0YXRpYyBjb25zdCBpbnQgU3BlY2lhbGl6ZWRJbnRMaXRlcmFsQmlhcyA9IDM7CgogIHN0YXRpYyBjb25zdCBpbnQgQ29tcG9uZW50RmlsZSA9IDB4OTBBQkNERUY7CgogIC8vLyBJbnRlcm5hbCB2ZXJzaW9uIG9mIGtlcm5lbCBiaW5hcnkgZm9ybWF0LgogIC8vLyBCdW1wIGl0IHdoZW4gbWFraW5nIGluY29tcGF0aWJsZSBjaGFuZ2VzIGluIGtlcm5lbCBiaW5hcmllcy4KICAvLy8gS2VlcCBpbiBzeW5jIHdpdGggcnVudGltZS92bS9rZXJuZWxfYmluYXJ5LmgsIHBrZy9rZXJuZWwvYmluYXJ5Lm1kLgogIHN0YXRpYyBjb25zdCBpbnQgQmluYXJ5Rm9ybWF0VmVyc2lvbiA9IDI5Owp9CgphYnN0cmFjdCBjbGFzcyBDb25zdGFudFRhZyB7CiAgc3RhdGljIGNvbnN0IGludCBOdWxsQ29uc3RhbnQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgQm9vbENvbnN0YW50ID0gMTsKICBzdGF0aWMgY29uc3QgaW50IEludENvbnN0YW50ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IERvdWJsZUNvbnN0YW50ID0gMzsKICBzdGF0aWMgY29uc3QgaW50IFN0cmluZ0NvbnN0YW50ID0gNDsKICBzdGF0aWMgY29uc3QgaW50IFN5bWJvbENvbnN0YW50ID0gNTsKICBzdGF0aWMgY29uc3QgaW50IE1hcENvbnN0YW50ID0gNjsKICBzdGF0aWMgY29uc3QgaW50IExpc3RDb25zdGFudCA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBTZXRDb25zdGFudCA9IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgSW5zdGFuY2VDb25zdGFudCA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50ID0gOTsKICBzdGF0aWMgY29uc3QgaW50IFRlYXJPZmZDb25zdGFudCA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgVHlwZUxpdGVyYWxDb25zdGFudCA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgVW5ldmFsdWF0ZWRDb25zdGFudCA9IDEyOwogIC8vIDEzIGlzIG9jY3VwaWVkIGJ5IFtTZXRDb25zdGFudF0KfQqArgBOTjwbAQwgIgEeASUBDR4kIjgBEispKTAqKwERLiUrKzAvKyUlJSUqKiMjKi8qLzQdKy8tLCsrKyYmJyclJiUnJSghHyUkKSwdKScsLCcqKSUqARAtHygpKigoJSYoKTElKSIkKC0tLSU3AQslJCUlIicmKy0sARAnKSoBLQEpOAFDNDk7Ojo6AT06PQExMTABMgEvATBDSi0CAR0lJSQnJyckJSUpNSktLSUCAR5wYWNrYWdlOmtlcm5lbC9iaW5hcnkvdGFnLmRhcnQpc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvaW1wb3J0X3RhYmxlLmRhcnSTWy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmltcG9ydF90YWJsZTsKCmltcG9ydCAnYXN0LmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgSW1wb3J0VGFibGUgewogIGludCBnZXRJbXBvcnRJbmRleChMaWJyYXJ5IGxpYnJhcnkpOwp9CgpjbGFzcyBDb21wb25lbnRJbXBvcnRUYWJsZSBpbXBsZW1lbnRzIEltcG9ydFRhYmxlIHsKICBmaW5hbCBNYXA8TGlicmFyeSwgaW50PiBfbGlicmFyeUluZGV4ID0gPExpYnJhcnksIGludD57fTsKCiAgQ29tcG9uZW50SW1wb3J0VGFibGUoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnQubGlicmFyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgIF9saWJyYXJ5SW5kZXhbY29tcG9uZW50LmxpYnJhcmllc1tpXV0gPSBpOwogICAgfQogIH0KCiAgaW50IGdldEltcG9ydEluZGV4KExpYnJhcnkgbGlicmFyeSkgPT4gX2xpYnJhcnlJbmRleFtsaWJyYXJ5XSA/PyAtMTsKfQoKY2xhc3MgTGlicmFyeUltcG9ydFRhYmxlIGltcGxlbWVudHMgSW1wb3J0VGFibGUgewogIGZpbmFsIExpc3Q8U3RyaW5nPiBfaW1wb3J0UGF0aHMgPSA8U3RyaW5nPltdOwogIGZpbmFsIExpc3Q8TGlicmFyeT4gX2ltcG9ydGVkTGlicmFyaWVzID0gPExpYnJhcnk+W107CiAgZmluYWwgTWFwPExpYnJhcnksIGludD4gX2xpYnJhcnlJbmRleCA9IDxMaWJyYXJ5LCBpbnQ+e307CgogIGZhY3RvcnkgTGlicmFyeUltcG9ydFRhYmxlKExpYnJhcnkgbGliKSB7CiAgICByZXR1cm4gbmV3IF9JbXBvcnRUYWJsZUJ1aWxkZXIobGliKS5idWlsZCgpOwogIH0KCiAgTGlicmFyeUltcG9ydFRhYmxlLmVtcHR5KCk7CgogIC8vLyBUaGUgbGlzdCBvZiBpbXBvcnRzLgogIC8vLwogIC8vLyBTaG91bGQgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LCBhcyB0aGUgaW5kZXggbWFwIHdvdWxkIGdvIG91dCBvZiBzeW5jLgogIExpc3Q8U3RyaW5nPiBnZXQgaW1wb3J0UGF0aHMgPT4gX2ltcG9ydFBhdGhzOwoKICBMaXN0PExpYnJhcnk+IGdldCBpbXBvcnRlZExpYnJhcmllcyA9PiBfaW1wb3J0ZWRMaWJyYXJpZXM7CgogIGludCBhZGRJbXBvcnQoTGlicmFyeSB0YXJnZXQsIFN0cmluZyBpbXBvcnRQYXRoKSB7CiAgICBpbnQgaW5kZXggPSBfbGlicmFyeUluZGV4W3RhcmdldF07CiAgICBpZiAoaW5kZXggIT0gbnVsbCkgcmV0dXJuIGluZGV4OwogICAgaW5kZXggPSBfaW1wb3J0UGF0aHMubGVuZ3RoOwogICAgX2ltcG9ydFBhdGhzLmFkZChpbXBvcnRQYXRoKTsKICAgIF9pbXBvcnRlZExpYnJhcmllcy5hZGQodGFyZ2V0KTsKICAgIF9saWJyYXJ5SW5kZXhbdGFyZ2V0XSA9IGluZGV4OwogICAgcmV0dXJuIGluZGV4OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBpbXBvcnQsIG9yIC0xIGlmIG5vdCBmb3VuZC4KICBpbnQgZ2V0SW1wb3J0SW5kZXgoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gX2xpYnJhcnlJbmRleFtsaWJyYXJ5XSA/PyAtMTsKICB9CgogIFN0cmluZyBnZXRJbXBvcnRQYXRoKExpYnJhcnkgbGlicmFyeSkgewogICAgcmV0dXJuIF9pbXBvcnRQYXRoc1tnZXRJbXBvcnRJbmRleChsaWJyYXJ5KV07CiAgfQp9CgovLy8gQnVpbGRzIHRoZSBpbXBvcnQgdGFibGUgZm9yIGEgZ2l2ZW4gbGlicmFyeS4KY2xhc3MgX0ltcG9ydFRhYmxlQnVpbGRlciBleHRlbmRzIFJlY3Vyc2l2ZVZpc2l0b3IgewogIGZpbmFsIExpYnJhcnlJbXBvcnRUYWJsZSB0YWJsZSA9IG5ldyBMaWJyYXJ5SW1wb3J0VGFibGUuZW1wdHkoKTsKICBmaW5hbCBMaWJyYXJ5IHJlZmVyZW5jZUxpYnJhcnk7CgogIExpYnJhcnlJbXBvcnRUYWJsZSBidWlsZCgpIHsKICAgIHJlZmVyZW5jZUxpYnJhcnkuYWNjZXB0KHRoaXMpOwogICAgcmV0dXJuIHRhYmxlOwogIH0KCiAgX0ltcG9ydFRhYmxlQnVpbGRlcih0aGlzLnJlZmVyZW5jZUxpYnJhcnkpIHsKICAgIHRhYmxlLmFkZEltcG9ydChyZWZlcmVuY2VMaWJyYXJ5LCAnJyk7CiAgfQoKICB2b2lkIGFkZExpYnJhcnlJbXBvcnQoTGlicmFyeSB0YXJnZXQpIHsKICAgIGlmICh0YXJnZXQgPT0gcmVmZXJlbmNlTGlicmFyeSkgcmV0dXJuOyAvLyBTZWxmLXJlZmVyZW5jZSBpcyBzcGVjaWFsLgogICAgdmFyIHJlZmVyZW5jZVVyaSA9IHJlZmVyZW5jZUxpYnJhcnkuaW1wb3J0VXJpOwogICAgdmFyIHRhcmdldFVyaSA9IHRhcmdldC5pbXBvcnRVcmk7CiAgICBpZiAodGFyZ2V0VXJpID09IG51bGwpIHsKICAgICAgdGhyb3cgJyRyZWZlcmVuY2VVcmkgY2Fubm90IHJlZmVyIHRvIGxpYnJhcnkgd2l0aG91dCBhbiBpbXBvcnQgVVJJJzsKICAgIH0KICAgIC8vIFRvIHN1cHBvcnQgdXNpbmcgY3VzdG9tLXVyaXMgaW4gdW5pdCB0ZXN0cywgd2UgZG9uJ3QgY2hlY2sgZGlyZWN0bHkKICAgIC8vIHdoZXRoZXIgdGhlIHNjaGVtZSBpcyAnZmlsZTonLCBidXQgaW5zdGVhZCB3ZSBjaGVjayB0aGF0IGlzIG5vdCAnZGFydDonCiAgICAvLyBvciAncGFja2FnZTonLgogICAgYm9vbCBpc0ZpbGVPckN1c3RvbVNjaGVtZSh1cmkpID0+CiAgICAgICAgdXJpLnNjaGVtZSAhPSAnJyAmJiB1cmkuc2NoZW1lICE9ICdwYWNrYWdlJyAmJiB1cmkuc2NoZW1lICE9ICdkYXJ0JzsKICAgIGJvb2wgaXNUYXJnZXRTY2hlbWVGaWxlT3JDdXN0b20gPSBpc0ZpbGVPckN1c3RvbVNjaGVtZSh0YXJnZXRVcmkpOwogICAgYm9vbCBpc1JlZmVyZW5jZVNjaGVtZUZpbGVPckN1c3RvbSA9IGlzRmlsZU9yQ3VzdG9tU2NoZW1lKHJlZmVyZW5jZVVyaSk7CiAgICBpZiAoaXNUYXJnZXRTY2hlbWVGaWxlT3JDdXN0b20gJiYgaXNSZWZlcmVuY2VTY2hlbWVGaWxlT3JDdXN0b20pIHsKICAgICAgU3RyaW5nIHJlbGF0aXZlVXJpID0gcmVsYXRpdmVVcmlQYXRoKHRhcmdldFVyaSwgcmVmZXJlbmNlVXJpKTsKICAgICAgdGFibGUuYWRkSW1wb3J0KHRhcmdldCwgcmVsYXRpdmVVcmkpOwogICAgfSBlbHNlIGlmIChpc1RhcmdldFNjaGVtZUZpbGVPckN1c3RvbSkgewogICAgICAvLyBDYW5ub3QgaW1wb3J0IGEgZmlsZTpVUkkgZnJvbSBhIGRhcnQ6VVJJIG9yIHBhY2thZ2U6VVJJLgogICAgICAvLyBXZSBtYXkgd2FudCB0byByZW1vdmUgdGhpcyByZXN0cmljdGlvbiwgYnV0IGZvciBub3cgaXQncyBqdXN0IGEgc2FuaXR5CiAgICAgIC8vIGNoZWNrLgogICAgICB0aHJvdyAnJHJlZmVyZW5jZVVyaSBjYW5ub3QgcmVmZXIgdG8gYXBwbGljYXRpb24gbGlicmFyeSAkdGFyZ2V0VXJpJzsKICAgIH0gZWxzZSB7CiAgICAgIHRhYmxlLmFkZEltcG9ydCh0YXJnZXQsIHRhcmdldC5pbXBvcnRVcmkudG9TdHJpbmcoKSk7CiAgICB9CiAgfQoKICB2aXNpdENsYXNzUmVmZXJlbmNlKENsYXNzIG5vZGUpIHsKICAgIGFkZExpYnJhcnlJbXBvcnQobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICB9CgogIHZpc2l0TGlicmFyeShMaWJyYXJ5IG5vZGUpIHsKICAgIHN1cGVyLnZpc2l0TGlicmFyeShub2RlKTsKICAgIGZvciAoUmVmZXJlbmNlIGV4cG9ydGVkUmVmZXJlbmNlIGluIG5vZGUuYWRkaXRpb25hbEV4cG9ydHMpIHsKICAgICAgYWRkTGlicmFyeUltcG9ydChleHBvcnRlZFJlZmVyZW5jZS5ub2RlLnBhcmVudCk7CiAgICB9CiAgfQoKICBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSB7CiAgICBhZGRMaWJyYXJ5SW1wb3J0KG5vZGUuZW5jbG9zaW5nTGlicmFyeSk7CiAgfQoKICB2aXNpdE5hbWUoTmFtZSBuYW1lKSB7CiAgICBpZiAobmFtZS5saWJyYXJ5ICE9IG51bGwpIHsKICAgICAgYWRkTGlicmFyeUltcG9ydChuYW1lLmxpYnJhcnkpOwogICAgfQogIH0KfQoKU3RyaW5nIHJlbGF0aXZlVXJpUGF0aChVcmkgdGFyZ2V0LCBVcmkgcmVmKSB7CiAgTGlzdDxTdHJpbmc+IHRhcmdldFNlZ21lbnRzID0gdGFyZ2V0LnBhdGhTZWdtZW50czsKICBMaXN0PFN0cmluZz4gcmVmU2VnbWVudHMgPSByZWYucGF0aFNlZ21lbnRzOwogIGludCB0byA9IHJlZlNlZ21lbnRzLmxlbmd0aDsKICBpZiAodGFyZ2V0U2VnbWVudHMubGVuZ3RoIDwgdG8pIHRvID0gdGFyZ2V0U2VnbWVudHMubGVuZ3RoOwogIHRvLS07IC8vIFRoZSBsYXN0IGVudHJ5IGlzIHRoZSBmaWxlbmFtZSwgaGVyZSB3ZSBjb21wYXJlIG9ubHkgZGlyZWN0b3JpZXMuCiAgaW50IHNhbWUgPSAtMTsKICBmb3IgKGludCBpID0gMDsgaSA8IHRvOyBpKyspIHsKICAgIGlmICh0YXJnZXRTZWdtZW50c1tpXSA9PSByZWZTZWdtZW50c1tpXSkgewogICAgICBzYW1lID0gaTsKICAgIH0gZWxzZSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBpZiAoc2FtZSA9PSB0YXJnZXRTZWdtZW50cy5sZW5ndGggLSAyICYmCiAgICAgIHRhcmdldFNlZ21lbnRzLmxlbmd0aCA9PSByZWZTZWdtZW50cy5sZW5ndGgpIHsKICAgIC8vIEJvdGggcGFydHMgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2Ygc2VnbWVudHMsCiAgICAvLyBhbmQgdGhleSBhZ3JlZSBvbiBhbGwgZGlyZWN0b3JpZXMuCiAgICBpZiAodGFyZ2V0U2VnbWVudHMubGFzdCA9PSAiIikgcmV0dXJuICIuIjsKICAgIHJldHVybiB0YXJnZXRTZWdtZW50cy5sYXN0OwogIH0KICBMaXN0PFN0cmluZz4gcGF0aCA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICBpbnQgb2tlZCA9IHNhbWUgKyAxOwogIHdoaWxlIChva2VkIDwgcmVmU2VnbWVudHMubGVuZ3RoIC0gMSkgewogICAgcGF0aC5hZGQoIi4uIik7CiAgICBva2VkKys7CiAgfQogIHBhdGguYWRkQWxsKHRhcmdldFNlZ21lbnRzLnNraXAoc2FtZSArIDEpKTsKCiAgaWYgKHBhdGguaXNFbXB0eSkgcGF0aC5hZGQoIi4iKTsKICByZXR1cm4gcGF0aC5qb2luKCIvIik7Cn0KgJ4ATk48HQETAR0nAgE0PAEuOzEGBAFHAgEyMDg8ASwxBAEeARsGTjABPQE1JyUhIiQjEgQBQSgpBAEqMgQCATE1QyIBHyMSBAEvKwQBKkozJh1LBktPFiZNR01HRSwtQlAQTA08BgQBJC0EAR8eQjcGBAEoLQQBGSAmBgQCAS41Lx8+TREhLxANDQYEKzU0Ki8gBCoXKhQMBC4BIxkCASBwYWNrYWdlOmtlcm5lbC9pbXBvcnRfdGFibGUuZGFydEFzZGtyb290Oi9wa2cva2VybmVsL2xpYi9zcmMvaGllcmFyY2h5X2Jhc2VkX3R5cGVfZW52aXJvbm1lbnQuZGFydINBLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkga2VybmVsLmhpZXJhcmNoeV9iYXNlZF90eXBlX2Vudmlyb25tZW50OwoKaW1wb3J0ICcuLi9hc3QuZGFydCcgc2hvdyBDbGFzcywgSW50ZXJmYWNlVHlwZTsKCmltcG9ydCAnLi4vY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJy4uL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJy4uL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgc2hvdyBUeXBlRW52aXJvbm1lbnQ7CgpjbGFzcyBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudCBleHRlbmRzIFR5cGVFbnZpcm9ubWVudCB7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwoKICBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudChDb3JlVHlwZXMgY29yZVR5cGVzLCB0aGlzLmhpZXJhcmNoeSkKICAgICAgOiBzdXBlci5mcm9tU3ViY2xhc3MoY29yZVR5cGVzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgcmV0dXJuIGhpZXJhcmNoeS5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGUsIHN1cGVyY2xhc3MpOwogIH0KfQobAE5OPAExATABNgEsATgBPiIBRScBDEw8BAIBOHBhY2thZ2U6a2VybmVsL3NyYy9oaWVyYXJjaHlfYmFzZWRfdHlwZV9lbnZpcm9ubWVudC5kYXJ0JXNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL3NyYy9oZWFwLmRhcnSGcS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYSBoZWFwLCB3aXRoIE8obG9nIG4pIGluc2VydGlvbiBhbmQgcmVtb3ZhbC4KYWJzdHJhY3QgY2xhc3MgSGVhcDxUPiB7CiAgZmluYWwgX2l0ZW1zID0gPFQ+W107CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2l0ZW1zLmlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2l0ZW1zLmlzTm90RW1wdHk7CgogIHZvaWQgYWRkKFQgaXRlbSkgewogICAgaW50IGluZGV4ID0gX2l0ZW1zLmxlbmd0aDsKICAgIF9pdGVtcy5sZW5ndGggKz0gMTsKICAgIHdoaWxlIChpbmRleCA+IDApIHsKICAgICAgVCBwYXJlbnQgPSBfaXRlbXNbX3BhcmVudEluZGV4KGluZGV4KV07CiAgICAgIGlmIChzb3J0c0JlZm9yZShwYXJlbnQsIGl0ZW0pKSBicmVhazsKICAgICAgX2l0ZW1zW2luZGV4XSA9IHBhcmVudDsKICAgICAgaW5kZXggPSBfcGFyZW50SW5kZXgoaW5kZXgpOwogICAgfQogICAgX2l0ZW1zW2luZGV4XSA9IGl0ZW07CiAgfQoKICBUIHJlbW92ZSgpIHsKICAgIFQgcmVtb3ZlZCA9IF9pdGVtc1swXTsKICAgIFQgb3JwaGFuID0gX2l0ZW1zLnJlbW92ZUxhc3QoKTsKICAgIGlmIChfaXRlbXMuaXNOb3RFbXB0eSkgX3JlSW5zZXJ0KG9ycGhhbik7CiAgICByZXR1cm4gcmVtb3ZlZDsKICB9CgogIC8vLyBDbGllbnQgc2hvdWxkIHVzZSBhIGRlcml2ZWQgY2xhc3MgdG8gc3BlY2lmeSB0aGUgc29ydCBvcmRlci4KICBib29sIHNvcnRzQmVmb3JlKFQgYSwgVCBiKTsKCiAgaW50IF9maXJzdENoaWxkSW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gKGluZGV4IDw8IDEpICsgMTsKICB9CgogIGludCBfcGFyZW50SW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gKGluZGV4IC0gMSkgPj4gMTsKICB9CgogIHZvaWQgX3JlSW5zZXJ0KFQgaXRlbSkgewogICAgaW50IGluZGV4ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGludCBjaGlsZEluZGV4ID0gX2ZpcnN0Q2hpbGRJbmRleChpbmRleCk7CiAgICAgIGlmIChjaGlsZEluZGV4ID49IF9pdGVtcy5sZW5ndGgpIGJyZWFrOwogICAgICBUIGNoaWxkID0gX2l0ZW1zW2NoaWxkSW5kZXhdOwogICAgICBpZiAoY2hpbGRJbmRleCArIDEgPCBfaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgVCBuZXh0Q2hpbGQgPSBfaXRlbXNbY2hpbGRJbmRleCArIDFdOwogICAgICAgIGlmIChzb3J0c0JlZm9yZShuZXh0Q2hpbGQsIGNoaWxkKSkgewogICAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7CiAgICAgICAgICBjaGlsZEluZGV4Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzb3J0c0JlZm9yZShpdGVtLCBjaGlsZCkpIGJyZWFrOwogICAgICBfaXRlbXNbaW5kZXhdID0gX2l0ZW1zW2NoaWxkSW5kZXhdOwogICAgICBpbmRleCA9IGNoaWxkSW5kZXg7CiAgICB9CiAgICBfaXRlbXNbaW5kZXhdID0gaXRlbTsKICB9Cn0KQABOTjwBSRkYASYBLAEVHxgYLiweIwYaBAEPGyQuFAQBQx4BJB0EASAdBAEbExMwLiQsLi0dGAoIKyoaBhoEAgEccGFja2FnZTprZXJuZWwvc3JjL2hlYXAuZGFydCpzZGtyb290Oi9wa2cva2VybmVsL2xpYi9saWJyYXJ5X2luZGV4LmRhcnSg/S8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmxpYnJhcnlfaW5kZXg7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKCi8vLyBQcm92aWRlcyBuYW1lLWJhc2VkIGFjY2VzcyB0byBsaWJyYXJ5LCBjbGFzcywgYW5kIG1lbWJlciBBU1Qgbm9kZXMuCi8vLwovLy8gV2hlbiBjb25zdHJ1Y3RlZCwgYSBnaXZlbiBzZXQgb2YgbGlicmFyaWVzIGFyZSBpbmRleGVkIGltbWVkaWF0ZWx5LCBhbmQKLy8vIHdpbGwgbm90IGJlIHVwLXRvLWRhdGUgd2l0aCBjaGFuZ2VzIG1hZGUgYWZ0ZXIgaXQgd2FzIGNyZWF0ZWQuCmNsYXNzIExpYnJhcnlJbmRleCB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBnZXR0ZXJQcmVmaXggPSAnZ2V0Oic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzZXR0ZXJQcmVmaXggPSAnc2V0Oic7CgogIC8vLyBBIHNwZWNpYWwgY2xhc3MgbmFtZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgdG9wLWxldmVsIG1lbWJlcnMKICAvLy8gb2YgYSBsaWJyYXJ5LgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdG9wTGV2ZWwgPSAnOjonOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBfQ2xhc3NUYWJsZT4gX2xpYnJhcmllcyA9IDxTdHJpbmcsIF9DbGFzc1RhYmxlPnt9OwoKICAvLy8gSW5kZXhlcyB0aGUgbGlicmFyaWVzIHdpdGggdGhlIFVSSXMgZ2l2ZW4gaW4gW2xpYnJhcnlVcmlzXS4KICBMaWJyYXJ5SW5kZXgoQ29tcG9uZW50IGNvbXBvbmVudCwgSXRlcmFibGU8U3RyaW5nPiBsaWJyYXJ5VXJpcykgewogICAgdmFyIGxpYnJhcnlVcmlTZXQgPSBsaWJyYXJ5VXJpcy50b1NldCgpOwogICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgIHZhciB1cmkgPSAnJHtsaWJyYXJ5LmltcG9ydFVyaX0nOwogICAgICBpZiAobGlicmFyeVVyaVNldC5jb250YWlucyh1cmkpKSB7CiAgICAgICAgX2xpYnJhcmllc1t1cmldID0gbmV3IF9DbGFzc1RhYmxlKGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW5kZXhlcyB0aGUgbGlicmFyaWVzIHdpdGggdGhlIFVSSXMgZ2l2ZW4gaW4gW2xpYnJhcnlVcmlzXS4KICBMaWJyYXJ5SW5kZXguYnlVcmkoQ29tcG9uZW50IGNvbXBvbmVudCwgSXRlcmFibGU8VXJpPiBsaWJyYXJ5VXJpcykKICAgICAgOiB0aGlzKGNvbXBvbmVudCwgbGlicmFyeVVyaXMubWFwKCh1cmkpID0+ICckdXJpJykpOwoKICAvLy8gSW5kZXhlcyBgZGFydDpgIGxpYnJhcmllcy4KICBMaWJyYXJ5SW5kZXguY29yZUxpYnJhcmllcyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBmb3IgKHZhciBsaWJyYXJ5IGluIGNvbXBvbmVudC5saWJyYXJpZXMpIHsKICAgICAgaWYgKGxpYnJhcnkuaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcpIHsKICAgICAgICBfbGlicmFyaWVzWycke2xpYnJhcnkuaW1wb3J0VXJpfSddID0gbmV3IF9DbGFzc1RhYmxlKGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW5kZXhlcyB0aGUgZW50aXJlIGNvbXBvbmVudC4KICAvLy8KICAvLy8gQ29uc2lkZXIgdXNpbmcgYW5vdGhlciBjb25zdHJ1Y3RvciB0byBvbmx5IGluZGV4IHRoZSBsaWJyYXJpZXMgdGhhdAogIC8vLyBhcmUgbmVlZGVkLgogIExpYnJhcnlJbmRleC5hbGwoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgIF9saWJyYXJpZXNbJyR7bGlicmFyeS5pbXBvcnRVcml9J10gPSBuZXcgX0NsYXNzVGFibGUobGlicmFyeSk7CiAgICB9CiAgfQoKICBfQ2xhc3NUYWJsZSBfZ2V0TGlicmFyeUluZGV4KFN0cmluZyB1cmkpIHsKICAgIF9DbGFzc1RhYmxlIGxpYnJhcnlJbmRleCA9IF9saWJyYXJpZXNbdXJpXTsKICAgIGlmIChsaWJyYXJ5SW5kZXggPT0gbnVsbCkgewogICAgICB0aHJvdyAiVGhlIGxpYnJhcnkgJyR1cmknIGhhcyBub3QgYmVlbiBpbmRleGVkIjsKICAgIH0KICAgIHJldHVybiBsaWJyYXJ5SW5kZXg7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbGlicmFyeSB3aXRoIHRoZSBnaXZlbiBVUkkuCiAgLy8vCiAgLy8vIFRocm93cyBhbiBlcnJvciBpZiBpdCBkb2VzIG5vdCBleGlzdC4KICBMaWJyYXJ5IGdldExpYnJhcnkoU3RyaW5nIHVyaSkgPT4gX2dldExpYnJhcnlJbmRleCh1cmkpLmxpYnJhcnk7CgogIC8vLyBMaWtlIFtnZXRMaWJyYXJ5XSBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm90IGZvdW5kLgogIExpYnJhcnkgdHJ5R2V0TGlicmFyeShTdHJpbmcgdXJpKSA9PiBfbGlicmFyaWVzW3VyaV0/LmxpYnJhcnk7CgogIC8vLyBUcnVlIGlmIHRoZSBsaWJyYXJ5IHdpdGggdGhlIGdpdmVuIFVSSSBleGlzdHMgYW5kIHdhcyBpbmRleGVkLgogIGJvb2wgY29udGFpbnNMaWJyYXJ5KFN0cmluZyB1cmkpID0+IF9saWJyYXJpZXMuY29udGFpbnNLZXkodXJpKTsKCiAgLy8vIFJldHVybnMgdGhlIGNsYXNzIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGdpdmVuIGxpYnJhcnkuCiAgLy8vCiAgLy8vIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kLgogIENsYXNzIGdldENsYXNzKFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICByZXR1cm4gX2dldExpYnJhcnlJbmRleChsaWJyYXJ5KS5nZXRDbGFzcyhjbGFzc05hbWUpOwogIH0KCiAgLy8vIExpa2UgW2dldENsYXNzXSBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm90IGZvdW5kLgogIENsYXNzIHRyeUdldENsYXNzKFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICByZXR1cm4gX2xpYnJhcmllc1tsaWJyYXJ5XT8udHJ5R2V0Q2xhc3MoY2xhc3NOYW1lKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBtZW1iZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgaW4gdGhlIGdpdmVuIGNsYXNzLCBpbiB0aGUKICAvLy8gZ2l2ZW4gbGlicmFyeS4KICAvLy8KICAvLy8gSWYgYSBnZXR0ZXIgb3Igc2V0dGVyIGlzIHdhbnRlZCwgdGhlIGBnZXQ6YCBvciBgc2V0OmAgcHJlZml4IG11c3QgYmUKICAvLy8gYWRkZWQgaW4gZnJvbnQgb2YgdGhlIG1lbWJlciBuYW1lLgogIC8vLwogIC8vLyBUaGUgc3BlY2lhbCBjbGFzcyBuYW1lIGA6OmAgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRvcC1sZXZlbCBtZW1iZXJzLgogIC8vLwogIC8vLyBJZiB0aGUgbWVtYmVyIG5hbWUgaXMgcHJpdmF0ZSBpdCBpcyBjb25zaWRlcmVkIHByaXZhdGUgdG8gW2xpYnJhcnldLgogIC8vLyBJdCBpcyBub3QgcG9zc2libGUgd2l0aCB0aGlzIGNsYXNzIHRvIGxvb2t1cCBtZW1iZXJzIHdob3NlIG5hbWUgaXMgcHJpdmF0ZQogIC8vLyB0byBhIGxpYnJhcnkgb3RoZXIgdGhhbiB0aGUgb25lIGNvbnRhaW5pbmcgaXQuCiAgLy8vCiAgLy8vIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgbWVtYmVyIGlzIG5vdCBmb3VuZC4KICBNZW1iZXIgZ2V0TWVtYmVyKFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIF9nZXRMaWJyYXJ5SW5kZXgobGlicmFyeSkuZ2V0TWVtYmVyKGNsYXNzTmFtZSwgbWVtYmVyTmFtZSk7CiAgfQoKICAvLy8gTGlrZSBbZ2V0TWVtYmVyXSBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm90IGZvdW5kLgogIE1lbWJlciB0cnlHZXRNZW1iZXIoU3RyaW5nIGxpYnJhcnksIFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gX2xpYnJhcmllc1tsaWJyYXJ5XT8udHJ5R2V0TWVtYmVyKGNsYXNzTmFtZSwgbWVtYmVyTmFtZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdG9wLWxldmVsIG1lbWJlciB3aXRoIHRoZSBnaXZlbiBuYW1lLCBpbiB0aGUgZ2l2ZW4gbGlicmFyeS4KICAvLy8KICAvLy8gSWYgYSBnZXR0ZXIgb3Igc2V0dGVyIGlzIHdhbnRlZCwgdGhlIGBnZXQ6YCBvciBgc2V0OmAgcHJlZml4IG11c3QgYmUKICAvLy8gYWRkZWQgaW4gZnJvbnQgb2YgdGhlIG1lbWJlciBuYW1lLgogIC8vLwogIC8vLyBJZiB0aGUgbWVtYmVyIG5hbWUgaXMgcHJpdmF0ZSBpdCBpcyBjb25zaWRlcmVkIHByaXZhdGUgdG8gW2xpYnJhcnldLgogIC8vLyBJdCBpcyBub3QgcG9zc2libGUgd2l0aCB0aGlzIGNsYXNzIHRvIGxvb2t1cCBtZW1iZXJzIHdob3NlIG5hbWUgaXMgcHJpdmF0ZQogIC8vLyB0byBhIGxpYnJhcnkgb3RoZXIgdGhhbiB0aGUgb25lIGNvbnRhaW5pbmcgaXQuCiAgLy8vCiAgLy8vIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgbWVtYmVyIGlzIG5vdCBmb3VuZC4KICBNZW1iZXIgZ2V0VG9wTGV2ZWxNZW1iZXIoU3RyaW5nIGxpYnJhcnksIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gZ2V0TWVtYmVyKGxpYnJhcnksIHRvcExldmVsLCBtZW1iZXJOYW1lKTsKICB9CgogIC8vLyBMaWtlIFtnZXRUb3BMZXZlbE1lbWJlcl0gYnV0IHJldHVybnMgYG51bGxgIGlmIG5vdCBmb3VuZC4KICBNZW1iZXIgdHJ5R2V0VG9wTGV2ZWxNZW1iZXIoCiAgICAgIFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIHRyeUdldE1lbWJlcihsaWJyYXJ5LCB0b3BMZXZlbCwgbWVtYmVyTmFtZSk7CiAgfQp9CgpjbGFzcyBfQ2xhc3NUYWJsZSB7CiAgZmluYWwgTGlicmFyeSBsaWJyYXJ5OwoKICBNYXA8U3RyaW5nLCBfTWVtYmVyVGFibGU+IF9jbGFzc2VzOwoKICBfQ2xhc3NUYWJsZSh0aGlzLmxpYnJhcnkpOwoKICBNYXA8U3RyaW5nLCBfTWVtYmVyVGFibGU+IGdldCBjbGFzc2VzIHsKICAgIGlmIChfY2xhc3NlcyA9PSBudWxsKSB7CiAgICAgIF9jbGFzc2VzID0gPFN0cmluZywgX01lbWJlclRhYmxlPnt9OwogICAgICBfY2xhc3Nlc1tMaWJyYXJ5SW5kZXgudG9wTGV2ZWxdID0gbmV3IF9NZW1iZXJUYWJsZS50b3BMZXZlbCh0aGlzKTsKICAgICAgZm9yICh2YXIgY2xhc3NfIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIF9jbGFzc2VzW2NsYXNzXy5uYW1lXSA9IG5ldyBfTWVtYmVyVGFibGUodGhpcywgY2xhc3NfKTsKICAgICAgfQogICAgICBmb3IgKFJlZmVyZW5jZSByZWZlcmVuY2UgaW4gbGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cykgewogICAgICAgIE5hbWVkTm9kZSBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgQ2xhc3MpIHsKICAgICAgICAgIF9jbGFzc2VzW25vZGUubmFtZV0gPSBuZXcgX01lbWJlclRhYmxlKHRoaXMsIG5vZGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jbGFzc2VzOwogIH0KCiAgU3RyaW5nIGdldCBjb250YWluZXJOYW1lIHsKICAgIC8vIEZvciB1c2VmdWwgZXJyb3IgbWVzc2FnZXMsIGl0IGNhbiBiZSBoZWxwZnVsIHRvIGluZGljYXRlIGlmIHRoZSBsaWJyYXJ5CiAgICAvLyBpcyBleHRlcm5hbC4gIElmIGEgY2xhc3Mgb3IgbWVtYmVyIHdhcyBub3QgZm91bmQgaW4gYW4gZXh0ZXJuYWwgbGlicmFyeSwKICAgIC8vIGl0IG1pZ2h0IGJlIHRoYXQgaXQgZXhpc3RzIGluIHRoZSBhY3R1YWwgbGlicmFyeSwgYnV0IGl0cyBpbnRlcmZhY2Ugd2FzCiAgICAvLyBub3QgaW5jbHVkZWQgaW4gdGhpcyBidWlsZCB1bml0LgogICAgcmV0dXJuIGxpYnJhcnkuaXNFeHRlcm5hbAogICAgICAgID8gImV4dGVybmFsIGxpYnJhcnkgJyR7bGlicmFyeS5pbXBvcnRVcml9JyIKICAgICAgICA6ICJsaWJyYXJ5ICcke2xpYnJhcnkuaW1wb3J0VXJpfSciOwogIH0KCiAgX01lbWJlclRhYmxlIF9nZXRDbGFzc0luZGV4KFN0cmluZyBuYW1lKSB7CiAgICB2YXIgaW5kZXhlciA9IGNsYXNzZXNbbmFtZV07CiAgICBpZiAoaW5kZXhlciA9PSBudWxsKSB7CiAgICAgIHRocm93ICJDbGFzcyAnJG5hbWUnIG5vdCBmb3VuZCBpbiAkY29udGFpbmVyTmFtZSI7CiAgICB9CiAgICByZXR1cm4gaW5kZXhlcjsKICB9CgogIENsYXNzIGdldENsYXNzKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2dldENsYXNzSW5kZXgobmFtZSkuY2xhc3NfOwogIH0KCiAgQ2xhc3MgdHJ5R2V0Q2xhc3MoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBjbGFzc2VzW25hbWVdPy5jbGFzc187CiAgfQoKICBNZW1iZXIgZ2V0TWVtYmVyKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gX2dldENsYXNzSW5kZXgoY2xhc3NOYW1lKS5nZXRNZW1iZXIobWVtYmVyTmFtZSk7CiAgfQoKICBNZW1iZXIgdHJ5R2V0TWVtYmVyKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gY2xhc3Nlc1tjbGFzc05hbWVdPy50cnlHZXRNZW1iZXIobWVtYmVyTmFtZSk7CiAgfQp9CgpjbGFzcyBfTWVtYmVyVGFibGUgewogIGZpbmFsIF9DbGFzc1RhYmxlIHBhcmVudDsKICBmaW5hbCBDbGFzcyBjbGFzc187IC8vIE51bGwgZm9yIHRvcC1sZXZlbC4KICBNYXA8U3RyaW5nLCBNZW1iZXI+IF9tZW1iZXJzOwoKICBMaWJyYXJ5IGdldCBsaWJyYXJ5ID0+IHBhcmVudC5saWJyYXJ5OwoKICBfTWVtYmVyVGFibGUodGhpcy5wYXJlbnQsIHRoaXMuY2xhc3NfKTsKCiAgX01lbWJlclRhYmxlLnRvcExldmVsKHRoaXMucGFyZW50KSA6IGNsYXNzXyA9IG51bGw7CgogIE1hcDxTdHJpbmcsIE1lbWJlcj4gZ2V0IG1lbWJlcnMgewogICAgaWYgKF9tZW1iZXJzID09IG51bGwpIHsKICAgICAgX21lbWJlcnMgPSA8U3RyaW5nLCBNZW1iZXI+e307CiAgICAgIGlmIChjbGFzc18gIT0gbnVsbCkgewogICAgICAgIGNsYXNzXy5wcm9jZWR1cmVzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgICBjbGFzc18uZmllbGRzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgICBjbGFzc18uY29uc3RydWN0b3JzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsaWJyYXJ5LnByb2NlZHVyZXMuZm9yRWFjaChhZGRNZW1iZXIpOwogICAgICAgIGxpYnJhcnkuZmllbGRzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9tZW1iZXJzOwogIH0KCiAgU3RyaW5nIGdldERpc2FtYmlndWF0ZWROYW1lKE1lbWJlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIpIHJldHVybiBMaWJyYXJ5SW5kZXguZ2V0dGVyUHJlZml4ICsgbWVtYmVyLm5hbWUubmFtZTsKICAgICAgaWYgKG1lbWJlci5pc1NldHRlcikgcmV0dXJuIExpYnJhcnlJbmRleC5zZXR0ZXJQcmVmaXggKyBtZW1iZXIubmFtZS5uYW1lOwogICAgfQogICAgcmV0dXJuIG1lbWJlci5uYW1lLm5hbWU7CiAgfQoKICB2b2lkIGFkZE1lbWJlcihNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyLm5hbWUuaXNQcml2YXRlICYmIG1lbWJlci5uYW1lLmxpYnJhcnkgIT0gbGlicmFyeSkgewogICAgICAvLyBNZW1iZXJzIHdob3NlIG5hbWUgaXMgcHJpdmF0ZSB0byBvdGhlciBsaWJyYXJpZXMgY2Fubm90IGN1cnJlbnRseQogICAgICAvLyBiZSBmb3VuZCB3aXRoIHRoZSBMaWJyYXJ5SW5kZXggY2xhc3MuCiAgICAgIHJldHVybjsKICAgIH0KICAgIF9tZW1iZXJzW2dldERpc2FtYmlndWF0ZWROYW1lKG1lbWJlcildID0gbWVtYmVyOwogIH0KCiAgU3RyaW5nIGdldCBjb250YWluZXJOYW1lIHsKICAgIGlmIChjbGFzc18gPT0gbnVsbCkgewogICAgICByZXR1cm4gInRvcC1sZXZlbCBvZiAke3BhcmVudC5jb250YWluZXJOYW1lfSI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gImNsYXNzICcke2NsYXNzXy5uYW1lfScgaW4gJHtwYXJlbnQuY29udGFpbmVyTmFtZX0iOwogICAgfQogIH0KCiAgTWVtYmVyIGdldE1lbWJlcihTdHJpbmcgbmFtZSkgewogICAgdmFyIG1lbWJlciA9IG1lbWJlcnNbbmFtZV07CiAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiQSBtZW1iZXIgd2l0aCBkaXNhbWJpZ3VhdGVkIG5hbWUgJyRuYW1lJyB3YXMgbm90IGZvdW5kICIKICAgICAgICAgICJpbiAkY29udGFpbmVyTmFtZSI7CiAgICAgIHZhciBnZXR0ZXIgPSBMaWJyYXJ5SW5kZXguZ2V0dGVyUHJlZml4ICsgbmFtZTsKICAgICAgdmFyIHNldHRlciA9IExpYnJhcnlJbmRleC5zZXR0ZXJQcmVmaXggKyBuYW1lOwogICAgICBpZiAobWVtYmVyc1tnZXR0ZXJdICE9IG51bGwgfHwgbWVtYmVyc1tzZXR0ZXJdICE9IG51bGwpIHsKICAgICAgICB0aHJvdyAiJG1lc3NhZ2UuIERpZCB5b3UgbWVhbiAnJGdldHRlcicgb3IgJyRzZXR0ZXInPyI7CiAgICAgIH0KICAgICAgdGhyb3cgbWVzc2FnZTsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICBNZW1iZXIgdHJ5R2V0TWVtYmVyKFN0cmluZyBuYW1lKSA9PiBtZW1iZXJzW25hbWVdOwp9CoECAE5OPB4BEwFIBExDFS0tAUwUJwFHAUJELS8oKTQIBgQBQkU7ASE0LzBHCAYEASQGShIqL0UGBAEtMCA3BhkEAS4GLEMBOUEBRUMBQgY0NToEATc4OAQBSRUGSykGSwZLUTUGNUpHBAE4TUUEAU4GSykGS1E1BjVANQQBQB89OAQCARQZASYBHQEqHCtJLEAIPykdPgoIBhUEAR1PUE8oHjQsBAEtIRs5BhQEASAoBAEjIgQBOjwEAT05BAIBFRwtIAEpASoBNgEkHCUcLiowDy8rCAYVBAEvH1BQBh0EASJDSy8OBjUEAR0aNQ1CBgQBIiAaUR81NUBACBUGEwQBNQIBIXBhY2thZ2U6a2VybmVsL2xpYnJhcnlfaW5kZXguZGFydDBzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY2hhcmNvZGUvbGliL2FzY2lpLmRhcnSjKS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIERlY2xhcmUgaW50ZWdlciBjb25zdGFudHMgZm9yIGVhY2ggQVNDSUkgY2hhcmFjdGVyLgovLy8KLy8vIFRoZSBjb25zdGFudHMgYWxsIHN0YXJ0IHdpdGggIiQiIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggb3RoZXIgY29uc3RhbnRzLgovLy8KLy8vIEZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIHZhbGlkIGluIGFuIGlkZW50aWZpZXIsIHRoZSBjaGFyYWN0ZXIgaXRzZWxmCi8vLyBmb2xsb3dzIHRoZSAiJCIuIEZvciBvdGhlciBjaGFyYWN0ZXJzLCBhIHN5bWJvbGljIG5hbWUgaXMgdXNlZC4KLy8vIEluIHNvbWUgY2FzZXMsIG11bHRpcGxlIGFsdGVybmF0aXZlIHN5bWJvbGljIG5hbWVzIGFyZSBwcm92aWRlZC4KLy8vIFBsZWFzZSBzdGljayB0byB1c2luZyBvbmUgbmFtZSBwZXIgY2hhcmFjdGVyIGluIHlvdXIgY29kZS4KLy8vCi8vLyBUaGUgc3ltYm9saWMgbmFtZXMgYXJlLCB3aGVyZSBhcHBsaWNhYmxlLCB0aGUgbmFtZSBvZiB0aGUgc3ltYm9sIHdpdGhvdXQKLy8vIGFueSAibWFyayIsICJzeW1ib2wiICJzaWduIiBvciAiYWNjZW50IiBzdWZmaXguCi8vLyBFeGFtcGxlczogWyRleGNsYW1hdGlvbl0sIFskcGlwZV0sIFskZG9sbGFyXSBhbmQgWyRncmF2ZV0uCi8vLyBGb3IgbGVzcyBjb21tb24gc3ltYm9scywgYSBzZWxlY3Rpb24gb2YgY29tbW9uIG5hbWVzIGFyZSB1c2VkLgovLy8KLy8vIEZvciBwYXJlbnRoZXRpY2FsIG1hcmtlcnMsIHRoZXJlIGlzIGJvdGggYSBzaG9ydCBuYW1lLCBbJGxwYXJlbl0vWyRycGFyZW5dLAovLy8gYW5kIGEgbG9uZyBuYW1lLCBbJG9wZW5fcGFyZW5dLyBbJGNsb3NlX3BhcmVuXS4KLy8vCi8vLyBGb3IgY29tbW9uIEhUTUwgZW50aXRpZXMsIHRoZSBlbnRpdHkgbmFtZXMgYXJlIGFsc28gdXNhYmxlIGFzIHN5bWJvbGljCi8vLyBuYW1lczogWyRhcG9zXSwgWyRxdW90XSwgWyRsdF0sIFskZ3RdLCBhbmQgWyRhbXBdLgpsaWJyYXJ5IGNoYXJjb2RlLmFzY2lpLmRvbGxhcl9sb3dlcmNhc2U7CgovLyBDb250cm9sIGNoYXJhY3RlcnMuCgovLy8gIk51bGwgY2hhcmFjdGVyIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRudWwgPSAweDAwOwoKLy8vICJTdGFydCBvZiBIZWFkZXIiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJHNvaCA9IDB4MDE7CgovLy8gIlN0YXJ0IG9mIFRleHQiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJHN0eCA9IDB4MDI7CgovLy8gIkVuZCBvZiBUZXh0IiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRldHggPSAweDAzOwoKLy8vICJFbmQgb2YgVHJhbnNtaXNzaW9uIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRlb3QgPSAweDA0OwoKLy8vICJFbnF1aXJ5IiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRlbnEgPSAweDA1OwoKLy8vICJBY2tub3dsZWRnbWVudCIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkYWNrID0gMHgwNjsKCi8vLyAiQmVsbCIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkYmVsID0gMHgwNzsKCi8vLyAiQmFja3NwYWNlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRicyA9IDB4MDg7CgovLy8gIkhvcml6b250YWwgVGFiIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRodCA9IDB4MDk7CgovLy8gIkhvcml6b250YWwgVGFiIiBjb250cm9sIGNoYXJhY3RlciwgY29tbW9uIG5hbWUuCmNvbnN0IGludCAkdGFiID0gMHgwOTsKCi8vLyAiTGluZSBmZWVkIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRsZiA9IDB4MEE7CgovLy8gIlZlcnRpY2FsIFRhYiIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkdnQgPSAweDBCOwoKLy8vICJGb3JtIGZlZWQiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGZmID0gMHgwQzsKCi8vLyAiQ2FycmlhZ2UgcmV0dXJuIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRjciA9IDB4MEQ7CgovLy8gIlNoaWZ0IE91dCIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkc28gPSAweDBFOwoKLy8vICJTaGlmdCBJbiIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkc2kgPSAweDBGOwoKLy8vICJEYXRhIExpbmsgRXNjYXBlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRkbGUgPSAweDEwOwoKLy8vICJEZXZpY2UgQ29udHJvbCAxIiBjb250cm9sIGNoYXJhY3RlciAob2Z0LiBYT04pLgpjb25zdCBpbnQgJGRjMSA9IDB4MTE7CgovLy8gIkRldmljZSBDb250cm9sIDIiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGRjMiA9IDB4MTI7CgovLy8gIkRldmljZSBDb250cm9sIDMiIGNvbnRyb2wgY2hhcmFjdGVyIChvZnQuIFhPRkYpLgpjb25zdCBpbnQgJGRjMyA9IDB4MTM7CgovLy8gIkRldmljZSBDb250cm9sIDQiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGRjNCA9IDB4MTQ7CgovLy8gIk5lZ2F0aXZlIEFja25vd2xlZGdtZW50IiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRuYWsgPSAweDE1OwoKLy8vICJTeW5jaHJvbm91cyBpZGxlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRzeW4gPSAweDE2OwoKLy8vICJFbmQgb2YgVHJhbnNtaXNzaW9uIEJsb2NrIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRldGIgPSAweDE3OwoKLy8vICJDYW5jZWwiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGNhbiA9IDB4MTg7CgovLy8gIkVuZCBvZiBNZWRpdW0iIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGVtID0gMHgxOTsKCi8vLyAiU3Vic3RpdHV0ZSIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkc3ViID0gMHgxQTsKCi8vLyAiRXNjYXBlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRlc2MgPSAweDFCOwoKLy8vICJGaWxlIFNlcGFyYXRvciIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkZnMgPSAweDFDOwoKLy8vICJHcm91cCBTZXBhcmF0b3IiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGdzID0gMHgxRDsKCi8vLyAiUmVjb3JkIFNlcGFyYXRvciIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkcnMgPSAweDFFOwoKLy8vICJVbml0IFNlcGFyYXRvciIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkdXMgPSAweDFGOwoKLy8vICJEZWxldGUiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGRlbCA9IDB4N0Y7CgovLyBWaXNpYmxlIGNoYXJhY3RlcnMuCgovLy8gU3BhY2UgY2hhcmFjdGVyLgpjb25zdCBpbnQgJHNwYWNlID0gMHgyMDsKCi8vLyBDaGFyYWN0ZXIgJyEnLgpjb25zdCBpbnQgJGV4Y2xhbWF0aW9uID0gMHgyMTsKCi8vLyBDaGFyYWN0ZXIgJyInLCBzaG9ydCBuYW1lLgpjb25zdCBpbnQgJHF1b3QgPSAweDIyOwoKLy8vIENoYXJhY3RlciAnIicuCmNvbnN0IGludCAkcXVvdGUgPSAweDIyOwoKLy8vIENoYXJhY3RlciAnIicuCmNvbnN0IGludCAkZG91YmxlX3F1b3RlID0gMHgyMjsKCi8vLyBDaGFyYWN0ZXIgJyInLgpjb25zdCBpbnQgJHF1b3RhdGlvbiA9IDB4MjI7CgovLy8gQ2hhcmFjdGVyICcjJy4KY29uc3QgaW50ICRoYXNoID0gMHgyMzsKCi8vLyBDaGFyYWN0ZXIgJyQnLgpjb25zdCBpbnQgJCQgPSAweDI0OwoKLy8vIENoYXJhY3RlciAnJCcuCmNvbnN0IGludCAkZG9sbGFyID0gMHgyNDsKCi8vLyBDaGFyYWN0ZXIgJyUnLgpjb25zdCBpbnQgJHBlcmNlbnQgPSAweDI1OwoKLy8vIENoYXJhY3RlciAnJicsIHNob3J0IG5hbWUuCmNvbnN0IGludCAkYW1wID0gMHgyNjsKCi8vLyBDaGFyYWN0ZXIgJyYnLgpjb25zdCBpbnQgJGFtcGVyc2FuZCA9IDB4MjY7CgovLy8gQ2hhcmFjdGVyICInIi4KY29uc3QgaW50ICRhcG9zID0gMHgyNzsKCi8vLyBDaGFyYWN0ZXIgJycnLgpjb25zdCBpbnQgJGFwb3N0cm9waGUgPSAweDI3OwoKLy8vIENoYXJhY3RlciAnJycuCmNvbnN0IGludCAkc2luZ2xlX3F1b3RlID0gMHgyNzsKCi8vLyBDaGFyYWN0ZXIgJygnLgpjb25zdCBpbnQgJGxwYXJlbiA9IDB4Mjg7CgovLy8gQ2hhcmFjdGVyICcoJy4KY29uc3QgaW50ICRvcGVuX3BhcmVuID0gMHgyODsKCi8vLyBDaGFyYWN0ZXIgJygnLgpjb25zdCBpbnQgJG9wZW5fcGFyZW50aGVzaXMgPSAweDI4OwoKLy8vIENoYXJhY3RlciAnKScuCmNvbnN0IGludCAkcnBhcmVuID0gMHgyOTsKCi8vLyBDaGFyYWN0ZXIgJyknLgpjb25zdCBpbnQgJGNsb3NlX3BhcmVuID0gMHgyOTsKCi8vLyBDaGFyYWN0ZXIgJyknLgpjb25zdCBpbnQgJGNsb3NlX3BhcmVudGhlc2lzID0gMHgyOTsKCi8vLyBDaGFyYWN0ZXIgJyonLgpjb25zdCBpbnQgJGFzdGVyaXNrID0gMHgyQTsKCi8vLyBDaGFyYWN0ZXIgJysnLgpjb25zdCBpbnQgJHBsdXMgPSAweDJCOwoKLy8vIENoYXJhY3RlciAnLCcuCmNvbnN0IGludCAkY29tbWEgPSAweDJDOwoKLy8vIENoYXJhY3RlciAnLScuCmNvbnN0IGludCAkbWludXMgPSAweDJEOwoKLy8vIENoYXJhY3RlciAnLScuCmNvbnN0IGludCAkZGFzaCA9IDB4MkQ7CgovLy8gQ2hhcmFjdGVyICcuJy4KY29uc3QgaW50ICRkb3QgPSAweDJFOwoKLy8vIENoYXJhY3RlciAnLicuCmNvbnN0IGludCAkZnVsbHN0b3AgPSAweDJFOwoKLy8vIENoYXJhY3RlciAnLycuCmNvbnN0IGludCAkc2xhc2ggPSAweDJGOwoKLy8vIENoYXJhY3RlciAnLycuCmNvbnN0IGludCAkc29saWR1cyA9IDB4MkY7CgovLy8gQ2hhcmFjdGVyICcvJy4KY29uc3QgaW50ICRkaXZpc2lvbiA9IDB4MkY7CgovLy8gQ2hhcmFjdGVyICcwJy4KY29uc3QgaW50ICQwID0gMHgzMDsKCi8vLyBDaGFyYWN0ZXIgJzEnLgpjb25zdCBpbnQgJDEgPSAweDMxOwoKLy8vIENoYXJhY3RlciAnMicuCmNvbnN0IGludCAkMiA9IDB4MzI7CgovLy8gQ2hhcmFjdGVyICczJy4KY29uc3QgaW50ICQzID0gMHgzMzsKCi8vLyBDaGFyYWN0ZXIgJzQnLgpjb25zdCBpbnQgJDQgPSAweDM0OwoKLy8vIENoYXJhY3RlciAnNScuCmNvbnN0IGludCAkNSA9IDB4MzU7CgovLy8gQ2hhcmFjdGVyICc2Jy4KY29uc3QgaW50ICQ2ID0gMHgzNjsKCi8vLyBDaGFyYWN0ZXIgJzcnLgpjb25zdCBpbnQgJDcgPSAweDM3OwoKLy8vIENoYXJhY3RlciAnOCcuCmNvbnN0IGludCAkOCA9IDB4Mzg7CgovLy8gQ2hhcmFjdGVyICc5Jy4KY29uc3QgaW50ICQ5ID0gMHgzOTsKCi8vLyBDaGFyYWN0ZXIgJzonLgpjb25zdCBpbnQgJGNvbG9uID0gMHgzQTsKCi8vLyBDaGFyYWN0ZXIgJzsnLgpjb25zdCBpbnQgJHNlbWljb2xvbiA9IDB4M0I7CgovLy8gQ2hhcmFjdGVyICc8Jy4KY29uc3QgaW50ICRsdCA9IDB4M0M7CgovLy8gQ2hhcmFjdGVyICc8Jy4KY29uc3QgaW50ICRsZXNzX3RoYW4gPSAweDNDOwoKLy8vIENoYXJhY3RlciAnPCcuCmNvbnN0IGludCAkbGFuZ2xlID0gMHgzQzsKCi8vLyBDaGFyYWN0ZXIgJzwnLgpjb25zdCBpbnQgJG9wZW5fYW5nbGUgPSAweDNDOwoKLy8vIENoYXJhY3RlciAnPScuCmNvbnN0IGludCAkZXF1YWwgPSAweDNEOwoKLy8vIENoYXJhY3RlciAnPicuCmNvbnN0IGludCAkZ3QgPSAweDNFOwoKLy8vIENoYXJhY3RlciAnPicuCmNvbnN0IGludCAkZ3JlYXRlcl90aGFuID0gMHgzRTsKCi8vLyBDaGFyYWN0ZXIgJz4nLgpjb25zdCBpbnQgJHJhbmdsZSA9IDB4M0U7CgovLy8gQ2hhcmFjdGVyICc+Jy4KY29uc3QgaW50ICRjbG9zZV9hbmdsZSA9IDB4M0U7CgovLy8gQ2hhcmFjdGVyICc/Jy4KY29uc3QgaW50ICRxdWVzdGlvbiA9IDB4M0Y7CgovLy8gQ2hhcmFjdGVyICdAJy4KY29uc3QgaW50ICRhdCA9IDB4NDA7CgovLy8gQ2hhcmFjdGVyICdBJy4KY29uc3QgaW50ICRBID0gMHg0MTsKCi8vLyBDaGFyYWN0ZXIgJ0InLgpjb25zdCBpbnQgJEIgPSAweDQyOwoKLy8vIENoYXJhY3RlciAnQycuCmNvbnN0IGludCAkQyA9IDB4NDM7CgovLy8gQ2hhcmFjdGVyICdEJy4KY29uc3QgaW50ICREID0gMHg0NDsKCi8vLyBDaGFyYWN0ZXIgJ0UnLgpjb25zdCBpbnQgJEUgPSAweDQ1OwoKLy8vIENoYXJhY3RlciAnRicuCmNvbnN0IGludCAkRiA9IDB4NDY7CgovLy8gQ2hhcmFjdGVyICdHJy4KY29uc3QgaW50ICRHID0gMHg0NzsKCi8vLyBDaGFyYWN0ZXIgJ0gnLgpjb25zdCBpbnQgJEggPSAweDQ4OwoKLy8vIENoYXJhY3RlciAnSScuCmNvbnN0IGludCAkSSA9IDB4NDk7CgovLy8gQ2hhcmFjdGVyICdKJy4KY29uc3QgaW50ICRKID0gMHg0QTsKCi8vLyBDaGFyYWN0ZXIgJ0snLgpjb25zdCBpbnQgJEsgPSAweDRCOwoKLy8vIENoYXJhY3RlciAnTCcuCmNvbnN0IGludCAkTCA9IDB4NEM7CgovLy8gQ2hhcmFjdGVyICdNJy4KY29uc3QgaW50ICRNID0gMHg0RDsKCi8vLyBDaGFyYWN0ZXIgJ04nLgpjb25zdCBpbnQgJE4gPSAweDRFOwoKLy8vIENoYXJhY3RlciAnTycuCmNvbnN0IGludCAkTyA9IDB4NEY7CgovLy8gQ2hhcmFjdGVyICdQJy4KY29uc3QgaW50ICRQID0gMHg1MDsKCi8vLyBDaGFyYWN0ZXIgJ1EnLgpjb25zdCBpbnQgJFEgPSAweDUxOwoKLy8vIENoYXJhY3RlciAnUicuCmNvbnN0IGludCAkUiA9IDB4NTI7CgovLy8gQ2hhcmFjdGVyICdTJy4KY29uc3QgaW50ICRTID0gMHg1MzsKCi8vLyBDaGFyYWN0ZXIgJ1QnLgpjb25zdCBpbnQgJFQgPSAweDU0OwoKLy8vIENoYXJhY3RlciAnVScuCmNvbnN0IGludCAkVSA9IDB4NTU7CgovLy8gQ2hhcmFjdGVyICdWJy4KY29uc3QgaW50ICRWID0gMHg1NjsKCi8vLyBDaGFyYWN0ZXIgJ1cnLgpjb25zdCBpbnQgJFcgPSAweDU3OwoKLy8vIENoYXJhY3RlciAnWCcuCmNvbnN0IGludCAkWCA9IDB4NTg7CgovLy8gQ2hhcmFjdGVyICdZJy4KY29uc3QgaW50ICRZID0gMHg1OTsKCi8vLyBDaGFyYWN0ZXIgJ1onLgpjb25zdCBpbnQgJFogPSAweDVBOwoKLy8vIENoYXJhY3RlciAnWycuCmNvbnN0IGludCAkbGJyYWNrZXQgPSAweDVCOwoKLy8vIENoYXJhY3RlciAnWycuCmNvbnN0IGludCAkb3Blbl9icmFja2V0ID0gMHg1QjsKCi8vLyBDaGFyYWN0ZXIgJ1wnLgpjb25zdCBpbnQgJGJhY2tzbGFzaCA9IDB4NUM7CgovLy8gQ2hhcmFjdGVyICddJy4KY29uc3QgaW50ICRyYnJhY2tldCA9IDB4NUQ7CgovLy8gQ2hhcmFjdGVyICddJy4KY29uc3QgaW50ICRjbG9zZV9icmFja2V0ID0gMHg1RDsKCi8vLyBDaGFyYWN0ZXIgJ14nLgpjb25zdCBpbnQgJGNpcmN1bWZsZXggPSAweDVFOwoKLy8vIENoYXJhY3RlciAnXicuCmNvbnN0IGludCAkY2FyZXQgPSAweDVFOwoKLy8vIENoYXJhY3RlciAnXicuCmNvbnN0IGludCAkaGF0ID0gMHg1RTsKCi8vLyBDaGFyYWN0ZXIgJ18nLgpjb25zdCBpbnQgJF8gPSAweDVGOwoKLy8vIENoYXJhY3RlciAnXycuCmNvbnN0IGludCAkdW5kZXJzY29yZSA9IDB4NUY7CgovLy8gQ2hhcmFjdGVyICdfJy4KY29uc3QgaW50ICR1bmRlcmxpbmUgPSAweDVGOwoKLy8vIENoYXJhY3RlciAnYCcuCmNvbnN0IGludCAkYmFja3F1b3RlID0gMHg2MDsKCi8vLyBDaGFyYWN0ZXIgJ2AnLgpjb25zdCBpbnQgJGdyYXZlID0gMHg2MDsKCi8vLyBDaGFyYWN0ZXIgJ2EnLgpjb25zdCBpbnQgJGEgPSAweDYxOwoKLy8vIENoYXJhY3RlciAnYicuCmNvbnN0IGludCAkYiA9IDB4NjI7CgovLy8gQ2hhcmFjdGVyICdjJy4KY29uc3QgaW50ICRjID0gMHg2MzsKCi8vLyBDaGFyYWN0ZXIgJ2QnLgpjb25zdCBpbnQgJGQgPSAweDY0OwoKLy8vIENoYXJhY3RlciAnZScuCmNvbnN0IGludCAkZSA9IDB4NjU7CgovLy8gQ2hhcmFjdGVyICdmJy4KY29uc3QgaW50ICRmID0gMHg2NjsKCi8vLyBDaGFyYWN0ZXIgJ2cnLgpjb25zdCBpbnQgJGcgPSAweDY3OwoKLy8vIENoYXJhY3RlciAnaCcuCmNvbnN0IGludCAkaCA9IDB4Njg7CgovLy8gQ2hhcmFjdGVyICdpJy4KY29uc3QgaW50ICRpID0gMHg2OTsKCi8vLyBDaGFyYWN0ZXIgJ2onLgpjb25zdCBpbnQgJGogPSAweDZBOwoKLy8vIENoYXJhY3RlciAnaycuCmNvbnN0IGludCAkayA9IDB4NkI7CgovLy8gQ2hhcmFjdGVyICdsJy4KY29uc3QgaW50ICRsID0gMHg2QzsKCi8vLyBDaGFyYWN0ZXIgJ20nLgpjb25zdCBpbnQgJG0gPSAweDZEOwoKLy8vIENoYXJhY3RlciAnbicuCmNvbnN0IGludCAkbiA9IDB4NkU7CgovLy8gQ2hhcmFjdGVyICdvJy4KY29uc3QgaW50ICRvID0gMHg2RjsKCi8vLyBDaGFyYWN0ZXIgJ3AnLgpjb25zdCBpbnQgJHAgPSAweDcwOwoKLy8vIENoYXJhY3RlciAncScuCmNvbnN0IGludCAkcSA9IDB4NzE7CgovLy8gQ2hhcmFjdGVyICdyJy4KY29uc3QgaW50ICRyID0gMHg3MjsKCi8vLyBDaGFyYWN0ZXIgJ3MnLgpjb25zdCBpbnQgJHMgPSAweDczOwoKLy8vIENoYXJhY3RlciAndCcuCmNvbnN0IGludCAkdCA9IDB4NzQ7CgovLy8gQ2hhcmFjdGVyICd1Jy4KY29uc3QgaW50ICR1ID0gMHg3NTsKCi8vLyBDaGFyYWN0ZXIgJ3YnLgpjb25zdCBpbnQgJHYgPSAweDc2OwoKLy8vIENoYXJhY3RlciAndycuCmNvbnN0IGludCAkdyA9IDB4Nzc7CgovLy8gQ2hhcmFjdGVyICd4Jy4KY29uc3QgaW50ICR4ID0gMHg3ODsKCi8vLyBDaGFyYWN0ZXIgJ3knLgpjb25zdCBpbnQgJHkgPSAweDc5OwoKLy8vIENoYXJhY3RlciAneicuCmNvbnN0IGludCAkeiA9IDB4N0E7CgovLy8gQ2hhcmFjdGVyICd7Jy4KY29uc3QgaW50ICRsYnJhY2UgPSAweDdCOwoKLy8vIENoYXJhY3RlciAneycuCmNvbnN0IGludCAkb3Blbl9icmFjZSA9IDB4N0I7CgovLy8gQ2hhcmFjdGVyICd8Jy4KY29uc3QgaW50ICRwaXBlID0gMHg3QzsKCi8vLyBDaGFyYWN0ZXIgJ3wnLgpjb25zdCBpbnQgJGJhciA9IDB4N0M7CgovLy8gQ2hhcmFjdGVyICd9Jy4KY29uc3QgaW50ICRyYnJhY2UgPSAweDdEOwoKLy8vIENoYXJhY3RlciAnfScuCmNvbnN0IGludCAkY2xvc2VfYnJhY2UgPSAweDdEOwoKLy8vIENoYXJhY3RlciAnficuCmNvbnN0IGludCAkdGlsZGUgPSAweDdFOwqB/gBOSTwBOARQBElERT8ETTQ/QwRQNARLNykBFwEoFwEpFwEnFwElFwEtFwEhFwEoFwEeFwEjFgEoFgE1FwEjFgEmFgEjFgEpFgEjFgEiFgEqFwE1FwEqFwE2FwEqFwExFwEqFwEzFwEgFwEnFgEkFwEgFwEoFgEpFgEqFgEoFgEgFwEXARUZARMfAR8YARMZARMgARMdARMYARMVARMaARMbAR8XARMdARMYARMeARMgARMaARMeARMkARMaARMfARMlARMcARMYARMZARMZARMYARMXARMcARMZARMbARMcARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMZARMdARMWARMdARMaARMeARMZARMWARMgARMaARMfARMcARMWARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMcARMgARMdARMcARMhARMeARMZARMXARMVARMeARMdARMdARMZARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMaARMeARMYARMXARMaARMfARMZARtwYWNrYWdlOmNoYXJjb2RlL2FzY2lpLmRhcnRAc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnX3Rlc3RlZC9wYWNrYWdlX2NvbmZpZy9saWIvc3JjL3V0aWwuZGFydI8QLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBVdGlsaXR5IG1ldGhvZHMgdXNlZCBieSBtb3JlIHRoYW4gb25lIGxpYnJhcnkgaW4gdGhlIHBhY2thZ2UuCmxpYnJhcnkgcGFja2FnZV9jb25maWcudXRpbDsKCmltcG9ydCAicGFja2FnZTpjaGFyY29kZS9hc2NpaS5kYXJ0IjsKCi8vIEFsbCBBU0NJSSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHZhbGlkIGluIGEgcGFja2FnZSBuYW1lLCB3aXRoIHNwYWNlCi8vIGZvciBhbGwgdGhlIGludmFsaWQgb25lcyAoaW5jbHVkaW5nIHNwYWNlKS4KY29uc3QgU3RyaW5nIF92YWxpZFBhY2thZ2VOYW1lQ2hhcmFjdGVycyA9CiAgICByIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgICQgJicoKSorLC0uIDAxMjM0NTY3ODkgOyA9ICAiCiAgICByIkBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAgICBfIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICAgfiAiOwoKLy8vIFRlc3RzIHdoZXRoZXIgc29tZXRoaW5nIGlzIGEgdmFsaWQgRGFydCBwYWNrYWdlIG5hbWUuCmJvb2wgaXNWYWxpZFBhY2thZ2VOYW1lKFN0cmluZyBzdHJpbmcpIHsKICByZXR1cm4gX2ZpbmRJbnZhbGlkQ2hhcmFjdGVyKHN0cmluZykgPCAwOwp9CgovLy8gQ2hlY2sgaWYgYSBzdHJpbmcgaXMgYSB2YWxpZCBwYWNrYWdlIG5hbWUuCi8vLwovLy8gVmFsaWQgcGFja2FnZSBuYW1lcyBjb250YWluIG9ubHkgY2hhcmFjdGVycyBpbiBbX3ZhbGlkUGFja2FnZU5hbWVDaGFyYWN0ZXJzXQovLy8gYW5kIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbm9uLScuJyBjaGFyYWN0ZXIuCi8vLwovLy8gUmV0dXJucyBgLTFgIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQuCi8vLyBPdGhlcndpc2UgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyLAovLy8gb3IgYHN0cmluZy5sZW5ndGhgIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gbm9uLScuJyBjaGFyYWN0ZXIuCmludCBfZmluZEludmFsaWRDaGFyYWN0ZXIoU3RyaW5nIHN0cmluZykgewogIC8vIEJlY29tZXMgbm9uLXplcm8gaWYgYW55IG5vbi0nLicgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkLgogIGludCBub25Eb3QgPSAwOwogIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgYyA9IHN0cmluZy5jb2RlVW5pdEF0KGkpOwogICAgaWYgKGMgPiAweDdmIHx8IF92YWxpZFBhY2thZ2VOYW1lQ2hhcmFjdGVycy5jb2RlVW5pdEF0KGMpIDw9ICRzcGFjZSkgewogICAgICByZXR1cm4gaTsKICAgIH0KICAgIG5vbkRvdCArPSBjIF4gJGRvdDsKICB9CiAgaWYgKG5vbkRvdCA9PSAwKSByZXR1cm4gc3RyaW5nLmxlbmd0aDsKICByZXR1cm4gLTE7Cn0KCi8vLyBWYWxpZGF0ZSB0aGF0IGEgVXJpIGlzIGEgdmFsaWQgcGFja2FnZTpVUkkuClN0cmluZyBjaGVja1ZhbGlkUGFja2FnZVVyaShVcmkgcGFja2FnZVVyaSkgewogIGlmIChwYWNrYWdlVXJpLnNjaGVtZSAhPSAicGFja2FnZSIpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIk5vdCBhIHBhY2thZ2U6IFVSSSIpOwogIH0KICBpZiAocGFja2FnZVVyaS5oYXNBdXRob3JpdHkpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIlBhY2thZ2UgVVJJcyBtdXN0IG5vdCBoYXZlIGEgaG9zdCBwYXJ0Iik7CiAgfQogIGlmIChwYWNrYWdlVXJpLmhhc1F1ZXJ5KSB7CiAgICAvLyBBIHF1ZXJ5IG1ha2VzIG5vIHNlbnNlIGlmIHJlc29sdmVkIHRvIGEgZmlsZTogVVJJLgogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgcGFja2FnZVVyaSwgInBhY2thZ2VVcmkiLCAiUGFja2FnZSBVUklzIG11c3Qgbm90IGhhdmUgYSBxdWVyeSBwYXJ0Iik7CiAgfQogIGlmIChwYWNrYWdlVXJpLmhhc0ZyYWdtZW50KSB7CiAgICAvLyBXZSBjb3VsZCBsZWF2ZSB0aGUgZnJhZ21lbnQgYWZ0ZXIgdGhlIFVSTCB3aGVuIHJlc29sdmluZywKICAgIC8vIGJ1dCBpdCB3b3VsZCBiZSBvZGQgaWYgInBhY2thZ2U6Zm9vL2Zvby5kYXJ0IzEiIGFuZAogICAgLy8gInBhY2thZ2U6Zm9vL2Zvby5kYXJ0IzIiIHdlcmUgY29uc2lkZXJlZCBkaWZmZXJlbnQgbGlicmFyaWVzLgogICAgLy8gS2VlcCB0aGUgc3ludGF4IG9wZW4gaW4gY2FzZSB3ZSBldmVyIGdldCBtdWx0aXBsZSBsaWJyYXJpZXMgaW4gb25lIGZpbGUuCiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICBwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsICJQYWNrYWdlIFVSSXMgbXVzdCBub3QgaGF2ZSBhIGZyYWdtZW50IHBhcnQiKTsKICB9CiAgaWYgKHBhY2thZ2VVcmkucGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIlBhY2thZ2UgVVJJcyBtdXN0IG5vdCBzdGFydCB3aXRoIGEgJy8nIik7CiAgfQogIGludCBmaXJzdFNsYXNoID0gcGFja2FnZVVyaS5wYXRoLmluZGV4T2YoJy8nKTsKICBpZiAoZmlyc3RTbGFzaCA9PSAtMSkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUocGFja2FnZVVyaSwgInBhY2thZ2VVcmkiLAogICAgICAgICJQYWNrYWdlIFVSSXMgbXVzdCBzdGFydCB3aXRoIHRoZSBwYWNrYWdlIG5hbWUgZm9sbG93ZWQgYnkgYSAnLyciKTsKICB9CiAgU3RyaW5nIHBhY2thZ2VOYW1lID0gcGFja2FnZVVyaS5wYXRoLnN1YnN0cmluZygwLCBmaXJzdFNsYXNoKTsKICBpbnQgYmFkSW5kZXggPSBfZmluZEludmFsaWRDaGFyYWN0ZXIocGFja2FnZU5hbWUpOwogIGlmIChiYWRJbmRleCA+PSAwKSB7CiAgICBpZiAocGFja2FnZU5hbWUuaXNFbXB0eSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIlBhY2thZ2UgbmFtZXMgbXVzIGJlIG5vbi1lbXB0eSIpOwogICAgfQogICAgaWYgKGJhZEluZGV4ID09IHBhY2thZ2VOYW1lLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsCiAgICAgICAgICAiUGFja2FnZSBuYW1lcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG5vbi0nLicgY2hhcmFjdGVyIik7CiAgICB9CiAgICBhc3NlcnQoYmFkSW5kZXggPCBwYWNrYWdlTmFtZS5sZW5ndGgpOwogICAgaW50IGJhZENoYXJDb2RlID0gcGFja2FnZU5hbWUuY29kZVVuaXRBdChiYWRJbmRleCk7CiAgICB2YXIgYmFkQ2hhciA9ICJVKyIgKyBiYWRDaGFyQ29kZS50b1JhZGl4U3RyaW5nKDE2KS5wYWRMZWZ0KDQsICcwJyk7CiAgICBpZiAoYmFkQ2hhckNvZGUgPj0gMHgyMCAmJiBiYWRDaGFyQ29kZSA8PSAweDdlKSB7CiAgICAgIC8vIFByaW50YWJsZSBjaGFyYWN0ZXIuCiAgICAgIGJhZENoYXIgPSAiJyR7cGFja2FnZU5hbWVbYmFkSW5kZXhdfScgKCRiYWRDaGFyKSI7CiAgICB9CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICBwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsICJQYWNrYWdlIG5hbWVzIG11c3Qgbm90IGNvbnRhaW4gJGJhZENoYXIiKTsKICB9CiAgcmV0dXJuIHBhY2thZ2VOYW1lOwp9CmMATk48AUIdASYBRS8rSEkBOiksAgEvBFE1BClARCs/EiwiSxAGGAQpDQIBMC4oIzkEISNNBB06I04EIEE7RVAjUQQpI00EMRo8TARBNRcfJUcGKj5IBis4SDYeOQYjTgQWAgEkcGFja2FnZTpwYWNrYWdlX2NvbmZpZy9zcmMvdXRpbC5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL3N0cmluZ19jYW5vbmljYWxpemVyLmRhcnSMkC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjYW5uZXIuc3RyaW5nX2Nhbm9uaWNhbGl6ZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgpjbGFzcyBOb2RlIHsKICB2YXIgLyogU3RyaW5nIHwgTGlzdDxpbnQ+ICovIGRhdGE7CiAgaW50IHN0YXJ0OwogIGludCBlbmQ7CiAgU3RyaW5nIHBheWxvYWQ7CiAgTm9kZSBuZXh0OwogIE5vZGUodGhpcy5kYXRhLCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCwgdGhpcy5wYXlsb2FkLCB0aGlzLm5leHQpOwp9CgovLy8gQSBoYXNoIHRhYmxlIGZvciB0cmlwbGVzOgovLy8gKGxpc3Qgb2YgYnl0ZXMsIHN0YXJ0LCBlbmQpIC0tPiBjYW5vbmljYWxpemVkIHN0cmluZwovLy8gVXNpbmcgdHJpcGxlcyBhdm9pZHMgYWxsb2NhdGluZyBzdHJpbmcgc2xpY2VzIGJlZm9yZSBjaGVja2luZyBpZiB0aGV5Ci8vLyBhcmUgY2Fub25pY2FsLgovLy8KLy8vIEdpdmVzIGFib3V0IDMlIHNwZWVkdXAgb24gZGFydDJqcy4KY2xhc3MgU3RyaW5nQ2Fub25pY2FsaXplciB7CiAgLy8vIE1hc2sgYXdheSB0b3AgYml0cyB0byBrZWVwIGhhc2ggY2FsY3VsYXRpb24gd2l0aGluIDMyLWJpdCBTTUkgcmFuZ2UuCiAgc3RhdGljIGNvbnN0IGludCBNQVNLID0gMTYgKiAxMDI0ICogMTAyNCAtIDE7CgogIHN0YXRpYyBjb25zdCBpbnQgSU5JVElBTF9TSVpFID0gOCAqIDEwMjQ7CgogIC8vLyBMaW5lYXIgc2l6ZSBvZiBhIGhhc2ggdGFibGUuCiAgaW50IF9zaXplID0gSU5JVElBTF9TSVpFOwoKICAvLy8gSXRlbXMgaW4gYSBoYXNoIHRhYmxlLgogIGludCBfY291bnQgPSAwOwoKICAvLy8gVGhlIHRhYmxlIGl0c2VsZi4KICBMaXN0PE5vZGU+IF9ub2RlcyA9IG5ldyBMaXN0PE5vZGU+KElOSVRJQUxfU0laRSk7CgogIHN0YXRpYyBTdHJpbmcgZGVjb2RlKExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgYXNjaWlPbmx5KSB7CiAgICB2YXIgczsKICAgIGlmIChhc2NpaU9ubHkpIHsKICAgICAgcyA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhLCBzdGFydCwgZW5kKTsKICAgIH0gZWxzZSB7CiAgICAgIHMgPSBuZXcgVXRmOERlY29kZXIoYWxsb3dNYWxmb3JtZWQ6IHRydWUpLmNvbnZlcnQoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICB9CiAgICByZXR1cm4gczsKICB9CgogIHN0YXRpYyBpbnQgaGFzaEJ5dGVzKExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGludCBoID0gNTM4MTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGggPSAoKGggPDwgNSkgKyBoICsgZGF0YVtpXSkgJiBNQVNLOwogICAgfQogICAgcmV0dXJuIGg7CiAgfQoKICBzdGF0aWMgaW50IGhhc2hTdHJpbmcoU3RyaW5nIGRhdGEsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgaW50IGggPSA1MzgxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaCA9ICgoaCA8PCA1KSArIGggKyBkYXRhLmNvZGVVbml0QXQoaSkpICYgTUFTSzsKICAgIH0KICAgIHJldHVybiBoOwogIH0KCiAgcmVoYXNoKCkgewogICAgdmFyIG5ld1NpemUgPSBfc2l6ZSAqIDI7CiAgICB2YXIgbmV3Tm9kZXMgPSBuZXcgTGlzdDxOb2RlPihuZXdTaXplKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3NpemU7IGkrKykgewogICAgICBOb2RlIHQgPSBfbm9kZXNbaV07CiAgICAgIHdoaWxlICh0ICE9IG51bGwpIHsKICAgICAgICBOb2RlIG4gPSB0Lm5leHQ7CiAgICAgICAgaW50IG5ld0luZGV4ID0gdC5kYXRhIGlzIFN0cmluZwogICAgICAgICAgICA/IGhhc2hTdHJpbmcodC5kYXRhLCB0LnN0YXJ0LCB0LmVuZCkgJiAobmV3U2l6ZSAtIDEpCiAgICAgICAgICAgIDogaGFzaEJ5dGVzKHQuZGF0YSwgdC5zdGFydCwgdC5lbmQpICYgKG5ld1NpemUgLSAxKTsKICAgICAgICBOb2RlIHMgPSBuZXdOb2Rlc1tuZXdJbmRleF07CiAgICAgICAgdC5uZXh0ID0gczsKICAgICAgICBuZXdOb2Rlc1tuZXdJbmRleF0gPSB0OwogICAgICAgIHQgPSBuOwogICAgICB9CiAgICB9CiAgICBfc2l6ZSA9IG5ld1NpemU7CiAgICBfbm9kZXMgPSBuZXdOb2RlczsKICB9CgogIFN0cmluZyBjYW5vbmljYWxpemUoZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGFzY2lpT25seSkgewogICAgaWYgKF9jb3VudCA+IF9zaXplKSByZWhhc2goKTsKICAgIGludCBpbmRleCA9IGRhdGEgaXMgU3RyaW5nCiAgICAgICAgPyBoYXNoU3RyaW5nKGRhdGEsIHN0YXJ0LCBlbmQpCiAgICAgICAgOiBoYXNoQnl0ZXMoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICBpbmRleCA9IGluZGV4ICYgKF9zaXplIC0gMSk7CiAgICBOb2RlIHMgPSBfbm9kZXNbaW5kZXhdOwogICAgTm9kZSB0ID0gczsKICAgIGludCBsZW4gPSBlbmQgLSBzdGFydDsKICAgIHdoaWxlICh0ICE9IG51bGwpIHsKICAgICAgaWYgKHQuZW5kIC0gdC5zdGFydCA9PSBsZW4pIHsKICAgICAgICBpbnQgaSA9IHN0YXJ0LCBqID0gdC5zdGFydDsKICAgICAgICB3aGlsZSAoaSA8IGVuZCAmJiBkYXRhW2ldID09IHQuZGF0YVtqXSkgewogICAgICAgICAgaSsrOwogICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBpZiAoaSA9PSBlbmQpIHsKICAgICAgICAgIHJldHVybiB0LnBheWxvYWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHQgPSB0Lm5leHQ7CiAgICB9CiAgICBTdHJpbmcgcGF5bG9hZDsKICAgIGlmIChkYXRhIGlzIFN0cmluZykgewogICAgICBwYXlsb2FkID0gZGF0YS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICB9IGVsc2UgewogICAgICBwYXlsb2FkID0gZGVjb2RlKGRhdGEsIHN0YXJ0LCBlbmQsIGFzY2lpT25seSk7CiAgICB9CiAgICBfbm9kZXNbaW5kZXhdID0gbmV3IE5vZGUoZGF0YSwgc3RhcnQsIGVuZCwgcGF5bG9hZCwgcyk7CiAgICBfY291bnQrKzsKICAgIHJldHVybiBwYXlsb2FkOwogIH0KCiAgY2xlYXIoKSB7CiAgICBfc2l6ZSA9IElOSVRJQUxfU0laRTsKICAgIF9ub2RlcyA9IG5ldyBMaXN0PE5vZGU+KF9zaXplKTsKICAgIF9jb3VudCA9IDA7CiAgfQp9Cn0ATk48ASwBFwENJQ0LEg1CAgEeOUoTBCccSzABLAEjHAEdEgEYNAFNCxU2DUsGDgQBPRIoKwYOBAE7Eig2Bg4EAQ0dLCYaGhkoQUElFCAPCAYVFwQBQiIfJychHBAbGCQkMg8PChgcCggSBhQaLA01BjwOFAQBDBokEAQCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9zdHJpbmdfY2Fub25pY2FsaXplci5kYXJ0OXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9iYXNlL3N5bnRhY3RpY19lbnRpdHkuZGFydIMXLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qKgogKiBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIGEgc3ludGFjdGljIGVudGl0eSAoZWl0aGVyIGEgdG9rZW4gb3IgYW4gQVNUIG5vZGUpCiAqIHdoaWNoIGhhcyBhIGxvY2F0aW9uIGFuZCBleHRlbnQgaW4gdGhlIHNvdXJjZSBmaWxlLgogKi8KYWJzdHJhY3QgY2xhc3MgU3ludGFjdGljRW50aXR5IHsKICAvKioKICAgKiBSZXR1cm4gdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUKICAgKiBsYXN0IGNoYXJhY3RlciBvZiB0aGUgc3ludGFjdGljIGVudGl0eS4KICAgKi8KICBpbnQgZ2V0IGVuZDsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgc3ludGFjdGljIGVudGl0eSdzIHNvdXJjZSByYW5nZS4KICAgKi8KICBpbnQgZ2V0IGxlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4KICAgKiB0aGUgc3ludGFjdGljIGVudGl0eS4KICAgKi8KICBpbnQgZ2V0IG9mZnNldDsKfQocAE5OPAEETTcEIQZRLQYPAQZNBhIBBlAbBhICATBwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9zeW50YWN0aWNfZW50aXR5LmRhcnQ8c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL3NjYW5uZXIvc3RyaW5nX3V0aWxpdGllcy5kYXJ0gYAvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdpbnRlcm5lci5kYXJ0JzsKCmNsYXNzIFN0cmluZ1V0aWxpdGllcyB7CiAgc3RhdGljIEludGVybmVyIElOVEVSTkVSID0gbmV3IE51bGxJbnRlcm5lcigpOwoKICBzdGF0aWMgU3RyaW5nIGludGVybihTdHJpbmcgc3RyaW5nKSA9PiBJTlRFUk5FUi5pbnRlcm4oc3RyaW5nKTsKfQoNAE5OPAEYARgxAUICATNwYWNrYWdlOmZyb250X2VuZC9zcmMvc2Nhbm5lci9zdHJpbmdfdXRpbGl0aWVzLmRhcnQ9c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2JsYWNrbGlzdGVkX2NsYXNzZXMuZGFydIGJLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIExpc3Qgb2Ygc3BlY2lhbCBjbGFzc2VzIGluIGRhcnQ6Y29yZSB0aGF0IGNhbid0IGJlIHN1YmNsYXNzZWQuCmNvbnN0IExpc3Q8U3RyaW5nPiBibGFja2xpc3RlZENvcmVDbGFzc2VzID0gWwogICJib29sIiwKICAiaW50IiwKICAibnVtIiwKICAiZG91YmxlIiwKICAiU3RyaW5nIiwKICAiTnVsbCIKXTsKDwBOTjwBQi4KCQkMDAkDATRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYmxhY2tsaXN0ZWRfY2xhc3Nlcy5kYXJ0InNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2Nsb25lLmRhcnTAAFOvLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KbGlicmFyeSBrZXJuZWwuY2xvbmU7CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAnYXN0LmRhcnQnOwppbXBvcnQgJ3R5cGVfYWxnZWJyYS5kYXJ0JzsKCi8vLyBWaXNpdG9yIHRoYXQgcmV0dXJuIGEgY2xvbmUgb2YgYSB0cmVlLCBtYWludGFpbmluZyByZWZlcmVuY2VzIHRvIGNsb25lZAovLy8gb2JqZWN0cy4KLy8vCi8vLyBJdCBpcyBzYWZlIHRvIGNsb25lIG1lbWJlcnMsIGJ1dCBjbG9uaW5nIGEgY2xhc3Mgb3IgbGlicmFyeSBpcyBub3QKLy8vIHN1cHBvcnRlZC4KY2xhc3MgQ2xvbmVWaXNpdG9yIGltcGxlbWVudHMgVHJlZVZpc2l0b3IgewogIGZpbmFsIE1hcDxWYXJpYWJsZURlY2xhcmF0aW9uLCBWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMgPQogICAgICA8VmFyaWFibGVEZWNsYXJhdGlvbiwgVmFyaWFibGVEZWNsYXJhdGlvbj57fTsKICBmaW5hbCBNYXA8TGFiZWxlZFN0YXRlbWVudCwgTGFiZWxlZFN0YXRlbWVudD4gbGFiZWxzID0KICAgICAgPExhYmVsZWRTdGF0ZW1lbnQsIExhYmVsZWRTdGF0ZW1lbnQ+e307CiAgZmluYWwgTWFwPFN3aXRjaENhc2UsIFN3aXRjaENhc2U+IHN3aXRjaENhc2VzID0gPFN3aXRjaENhc2UsIFN3aXRjaENhc2U+e307CiAgZmluYWwgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiB0eXBlU3Vic3RpdHV0aW9uOwogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1zOwogIGJvb2wgY2xvbmVBbm5vdGF0aW9uczsKCiAgLy8vIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsb25pbmcgdmlzaXRvciBmb3IgS2VybmVsIEFTVHMuCiAgLy8vCiAgLy8vIFRoZSBib29sZWFuIHZhbHVlIG9mIFtjbG9uZUFubm90YXRpb25zXSB0ZWxscyBpZiB0aGUgYW5ub3RhdGlvbnMgb24gdGhlCiAgLy8vIG91dGxpbmUgZWxlbWVudHMgaW4gdGhlIHNvdXJjZSBBU1Qgc2hvdWxkIGJlIGNsb25lZCB0byB0aGUgdGFyZ2V0IEFTVC4gVGhlCiAgLy8vIGFubm90YXRpb25zIGluIHByb2NlZHVyZSBib2RpZXMgYXJlIGNsb25lZCB1bmNvbmRpdGlvbmFsbHkuCiAgQ2xvbmVWaXNpdG9yKAogICAgICB7TWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiB0eXBlU3Vic3RpdHV0aW9uLAogICAgICBNYXA8VHlwZVBhcmFtZXRlciwgVHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtcywKICAgICAgdGhpcy5jbG9uZUFubm90YXRpb25zID0gdHJ1ZX0pCiAgICAgIDogdGhpcy50eXBlU3Vic3RpdHV0aW9uID0gZW5zdXJlTXV0YWJsZSh0eXBlU3Vic3RpdHV0aW9uKSwKICAgICAgICB0aGlzLnR5cGVQYXJhbXMgPSB0eXBlUGFyYW1zID8/IDxUeXBlUGFyYW1ldGVyLCBUeXBlUGFyYW1ldGVyPnt9OwoKICBzdGF0aWMgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBlbnN1cmVNdXRhYmxlKAogICAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IG1hcCkgewogICAgLy8gV2UgbmVlZCB0byBtdXRhdGUgdGhpcyBtYXAsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgYSBjb25zdGFudCBtYXAuCiAgICBpZiAobWFwID09IG51bGwgfHwgbWFwLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBUcmVlTm9kZSB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSB7CiAgICB0aHJvdyAnQ2xvbmluZyBvZiBsaWJyYXJpZXMgaXMgbm90IGltcGxlbWVudGVkJzsKICB9CgogIFRyZWVOb2RlIHZpc2l0Q2xhc3MoQ2xhc3Mgbm9kZSkgewogICAgdGhyb3cgJ0Nsb25pbmcgb2YgY2xhc3NlcyBpcyBub3QgaW1wbGVtZW50ZWQnOwogIH0KCiAgVHJlZU5vZGUgdmlzaXRFeHRlbnNpb24oRXh0ZW5zaW9uIG5vZGUpIHsKICAgIHRocm93ICdDbG9uaW5nIG9mIGV4dGVuc2lvbnMgaXMgbm90IGltcGxlbWVudGVkJzsKICB9CgogIC8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGZpbGUgdXJpIHdoZXJlIHdlIGFyZSBjbG9uaW5nIFtUcmVlTm9kZV1zIGZyb20uICBJZgogIC8vIHRoaXMgaXMgc2V0IHRvIGBudWxsYCB3ZSBjYW5ub3QgY2xvbmUgZmlsZSBvZmZzZXRzIHRvIG5ld2x5IGNyZWF0ZWQgbm9kZXMuCiAgLy8gVGhlIFtfY2xvbmVGaWxlT2Zmc2V0XSBoZWxwZXIgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhpcy4KICBVcmkgX2FjdGl2ZUZpbGVVcmk7CgogIC8vIElmIHdlIGRvbid0IGtub3cgdGhlIGZpbGUgdXJpIHdlIGFyZSBjbG9uaW5nIGVsZW1lbnRzIGZyb20sIGl0J3Mgbm90IHNhZmUKICAvLyB0byBjbG9uZSBmaWxlIG9mZnNldHMgZWl0aGVyLgogIGludCBfY2xvbmVGaWxlT2Zmc2V0KGludCBmaWxlT2Zmc2V0KSB7CiAgICByZXR1cm4gX2FjdGl2ZUZpbGVVcmkgPT0gbnVsbCA/IFRyZWVOb2RlLm5vT2Zmc2V0IDogZmlsZU9mZnNldDsKICB9CgogIFQgY2xvbmU8VCBleHRlbmRzIFRyZWVOb2RlPihUIG5vZGUpIHsKICAgIGZpbmFsIFVyaSBhY3RpdmVGaWxlVXJpU2F2ZWQgPSBfYWN0aXZlRmlsZVVyaTsKICAgIGlmIChub2RlIGlzIEZpbGVVcmlOb2RlKSBfYWN0aXZlRmlsZVVyaSA9IG5vZGUuZmlsZVVyaSA/PyBfYWN0aXZlRmlsZVVyaTsKICAgIGZpbmFsIFRyZWVOb2RlIHJlc3VsdCA9IG5vZGUuYWNjZXB0KHRoaXMpCiAgICAgIC4uZmlsZU9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIF9hY3RpdmVGaWxlVXJpID0gYWN0aXZlRmlsZVVyaVNhdmVkOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFRyZWVOb2RlIGNsb25lT3B0aW9uYWwoVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBmaW5hbCBVcmkgYWN0aXZlRmlsZVVyaVNhdmVkID0gX2FjdGl2ZUZpbGVVcmk7CiAgICBpZiAobm9kZSBpcyBGaWxlVXJpTm9kZSkgX2FjdGl2ZUZpbGVVcmkgPSBub2RlLmZpbGVVcmkgPz8gX2FjdGl2ZUZpbGVVcmk7CiAgICBUcmVlTm9kZSByZXN1bHQgPSBub2RlPy5hY2NlcHQodGhpcyk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJlc3VsdC5maWxlT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgX2FjdGl2ZUZpbGVVcmkgPSBhY3RpdmVGaWxlVXJpU2F2ZWQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRGFydFR5cGUgdmlzaXRUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBzdWJzdGl0dXRlKHR5cGUsIHR5cGVTdWJzdGl0dXRpb24pOwogIH0KCiAgQ29uc3RhbnQgdmlzaXRDb25zdGFudChDb25zdGFudCBjb25zdGFudCkgewogICAgcmV0dXJuIGNvbnN0YW50OwogIH0KCiAgRGFydFR5cGUgdmlzaXRPcHRpb25hbFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIHR5cGUgPT0gbnVsbCA/IG51bGwgOiBzdWJzdGl0dXRlKHR5cGUsIHR5cGVTdWJzdGl0dXRpb24pOwogIH0KCiAgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRFeHByZXNzaW9uKG5vZGUubWVzc2FnZSk7CiAgfQoKICB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQoCiAgICAgICAgdmFyaWFibGVzW25vZGUudmFyaWFibGVdLCB2aXNpdE9wdGlvbmFsVHlwZShub2RlLnByb21vdGVkVHlwZSkpOwogIH0KCiAgdmlzaXRWYXJpYWJsZVNldChWYXJpYWJsZVNldCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlU2V0KHZhcmlhYmxlc1tub2RlLnZhcmlhYmxlXSwgY2xvbmUobm9kZS52YWx1ZSkpOwogIH0KCiAgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKAogICAgICAgIGNsb25lKG5vZGUucmVjZWl2ZXIpLCBub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0UHJvcGVydHlTZXQoUHJvcGVydHlTZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZShjbG9uZShub2RlLnJlY2VpdmVyKSwgbm9kZS5uYW1lLAogICAgICAgIGNsb25lKG5vZGUudmFsdWUpLCBub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICB2aXNpdERpcmVjdFByb3BlcnR5R2V0KERpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgRGlyZWN0UHJvcGVydHlHZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgY2xvbmUobm9kZS5yZWNlaXZlciksIG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBEaXJlY3RQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgICBjbG9uZShub2RlLnJlY2VpdmVyKSwgbm9kZS50YXJnZXRSZWZlcmVuY2UsIGNsb25lKG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3VwZXJQcm9wZXJ0eUdldC5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChTdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3VwZXJQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLm5hbWUsIGNsb25lKG5vZGUudmFsdWUpLCBub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICB2aXNpdFN0YXRpY0dldChTdGF0aWNHZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNHZXQuYnlSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgdmlzaXRTdGF0aWNTZXQoU3RhdGljU2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3RhdGljU2V0LmJ5UmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlLCBjbG9uZShub2RlLnZhbHVlKSk7CiAgfQoKICB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IE1ldGhvZEludm9jYXRpb24uYnlSZWZlcmVuY2UoY2xvbmUobm9kZS5yZWNlaXZlciksIG5vZGUubmFtZSwKICAgICAgICBjbG9uZShub2RlLmFyZ3VtZW50cyksIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihEaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgRGlyZWN0TWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICBjbG9uZShub2RlLnJlY2VpdmVyKSwgbm9kZS50YXJnZXRSZWZlcmVuY2UsIGNsb25lKG5vZGUuYXJndW1lbnRzKSk7CiAgfQoKICB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihTdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdXBlck1ldGhvZEludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgbm9kZS5uYW1lLCBjbG9uZShub2RlLmFyZ3VtZW50cyksIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3RhdGljSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLnRhcmdldFJlZmVyZW5jZSwgY2xvbmUobm9kZS5hcmd1bWVudHMpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvckludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgbm9kZS50YXJnZXRSZWZlcmVuY2UsIGNsb25lKG5vZGUuYXJndW1lbnRzKSwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogIH0KCiAgdmlzaXROb3QoTm90IG5vZGUpIHsKICAgIHJldHVybiBuZXcgTm90KGNsb25lKG5vZGUub3BlcmFuZCkpOwogIH0KCiAgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihMb2dpY2FsRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IExvZ2ljYWxFeHByZXNzaW9uKAogICAgICAgIGNsb25lKG5vZGUubGVmdCksIG5vZGUub3BlcmF0b3IsIGNsb25lKG5vZGUucmlnaHQpKTsKICB9CgogIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKENvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsRXhwcmVzc2lvbihjbG9uZShub2RlLmNvbmRpdGlvbiksIGNsb25lKG5vZGUudGhlbiksCiAgICAgICAgY2xvbmUobm9kZS5vdGhlcndpc2UpLCB2aXNpdE9wdGlvbmFsVHlwZShub2RlLnN0YXRpY1R5cGUpKTsKICB9CgogIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3RyaW5nQ29uY2F0ZW5hdGlvbihub2RlLmV4cHJlc3Npb25zLm1hcChjbG9uZSkudG9MaXN0KCkpOwogIH0KCiAgdmlzaXRMaXN0Q29uY2F0ZW5hdGlvbihMaXN0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IExpc3RDb25jYXRlbmF0aW9uKG5vZGUubGlzdHMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICB0eXBlQXJndW1lbnQ6IHZpc2l0VHlwZShub2RlLnR5cGVBcmd1bWVudCkpOwogIH0KCiAgdmlzaXRTZXRDb25jYXRlbmF0aW9uKFNldENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBTZXRDb25jYXRlbmF0aW9uKG5vZGUuc2V0cy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIHR5cGVBcmd1bWVudDogdmlzaXRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KSk7CiAgfQoKICB2aXNpdE1hcENvbmNhdGVuYXRpb24oTWFwQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IE1hcENvbmNhdGVuYXRpb24obm9kZS5tYXBzLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAga2V5VHlwZTogdmlzaXRUeXBlKG5vZGUua2V5VHlwZSksIHZhbHVlVHlwZTogdmlzaXRUeXBlKG5vZGUudmFsdWVUeXBlKSk7CiAgfQoKICB2aXNpdEluc3RhbmNlQ3JlYXRpb24oSW5zdGFuY2VDcmVhdGlvbiBub2RlKSB7CiAgICBmaW5hbCBNYXA8UmVmZXJlbmNlLCBFeHByZXNzaW9uPiBmaWVsZFZhbHVlcyA9IDxSZWZlcmVuY2UsIEV4cHJlc3Npb24+e307CiAgICBub2RlLmZpZWxkVmFsdWVzLmZvckVhY2goKFJlZmVyZW5jZSBmaWVsZFJlZiwgRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBmaWVsZFZhbHVlc1tmaWVsZFJlZl0gPSBjbG9uZSh2YWx1ZSk7CiAgICB9KTsKICAgIHJldHVybiBuZXcgSW5zdGFuY2VDcmVhdGlvbigKICAgICAgICBub2RlLmNsYXNzUmVmZXJlbmNlLAogICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodmlzaXRUeXBlKS50b0xpc3QoKSwKICAgICAgICBmaWVsZFZhbHVlcywKICAgICAgICBub2RlLmFzc2VydHMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICBub2RlLnVudXNlZEFyZ3VtZW50cy5tYXAoY2xvbmUpLnRvTGlzdCgpKTsKICB9CgogIHZpc2l0SXNFeHByZXNzaW9uKElzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IElzRXhwcmVzc2lvbihjbG9uZShub2RlLm9wZXJhbmQpLCB2aXNpdFR5cGUobm9kZS50eXBlKSk7CiAgfQoKICB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBBc0V4cHJlc3Npb24oY2xvbmUobm9kZS5vcGVyYW5kKSwgdmlzaXRUeXBlKG5vZGUudHlwZSkpCiAgICAgIC4uZmxhZ3MgPSBub2RlLmZsYWdzOwogIH0KCiAgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTeW1ib2xMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRUeXBlTGl0ZXJhbChUeXBlTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVMaXRlcmFsKHZpc2l0VHlwZShub2RlLnR5cGUpKTsKICB9CgogIHZpc2l0VGhpc0V4cHJlc3Npb24oVGhpc0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBUaGlzRXhwcmVzc2lvbigpOwogIH0KCiAgdmlzaXRSZXRocm93KFJldGhyb3cgbm9kZSkgewogICAgcmV0dXJuIG5ldyBSZXRocm93KCk7CiAgfQoKICB2aXNpdFRocm93KFRocm93IG5vZGUpIHsKICAgIHJldHVybiBuZXcgVGhyb3coY2xvbmVPcHRpb25hbChub2RlLmV4cHJlc3Npb24pKTsKICB9CgogIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBMaXN0TGl0ZXJhbChub2RlLmV4cHJlc3Npb25zLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAgdHlwZUFyZ3VtZW50OiB2aXNpdFR5cGUobm9kZS50eXBlQXJndW1lbnQpLCBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogIH0KCiAgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTZXRMaXRlcmFsKG5vZGUuZXhwcmVzc2lvbnMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICB0eXBlQXJndW1lbnQ6IHZpc2l0VHlwZShub2RlLnR5cGVBcmd1bWVudCksIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IE1hcExpdGVyYWwobm9kZS5lbnRyaWVzLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAga2V5VHlwZTogdmlzaXRUeXBlKG5vZGUua2V5VHlwZSksCiAgICAgICAgdmFsdWVUeXBlOiB2aXNpdFR5cGUobm9kZS52YWx1ZVR5cGUpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICB2aXNpdE1hcEVudHJ5KE1hcEVudHJ5IG5vZGUpIHsKICAgIHJldHVybiBuZXcgTWFwRW50cnkoY2xvbmUobm9kZS5rZXkpLCBjbG9uZShub2RlLnZhbHVlKSk7CiAgfQoKICB2aXNpdEF3YWl0RXhwcmVzc2lvbihBd2FpdEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBBd2FpdEV4cHJlc3Npb24oY2xvbmUobm9kZS5vcGVyYW5kKSk7CiAgfQoKICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihGdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBGdW5jdGlvbkV4cHJlc3Npb24oY2xvbmUobm9kZS5mdW5jdGlvbikpOwogIH0KCiAgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIHZpc2l0Q29uc3RhbnQobm9kZS5jb25zdGFudCksIHZpc2l0VHlwZShub2RlLnR5cGUpKTsKICB9CgogIHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3RyaW5nTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0RG91YmxlTGl0ZXJhbChEb3VibGVMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgRG91YmxlTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBCb29sTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0TnVsbExpdGVyYWwoTnVsbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBOdWxsTGl0ZXJhbCgpOwogIH0KCiAgdmlzaXRMZXQoTGV0IG5vZGUpIHsKICAgIHZhciBuZXdWYXJpYWJsZSA9IGNsb25lKG5vZGUudmFyaWFibGUpOwogICAgcmV0dXJuIG5ldyBMZXQobmV3VmFyaWFibGUsIGNsb25lKG5vZGUuYm9keSkpOwogIH0KCiAgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQmxvY2tFeHByZXNzaW9uKGNsb25lKG5vZGUuYm9keSksIGNsb25lKG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblN0YXRlbWVudChjbG9uZShub2RlLmV4cHJlc3Npb24pKTsKICB9CgogIHZpc2l0QmxvY2soQmxvY2sgbm9kZSkgewogICAgcmV0dXJuIG5ldyBCbG9jayhub2RlLnN0YXRlbWVudHMubWFwKGNsb25lKS50b0xpc3QoKSk7CiAgfQoKICB2aXNpdEFzc2VydEJsb2NrKEFzc2VydEJsb2NrIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQXNzZXJ0QmxvY2sobm9kZS5zdGF0ZW1lbnRzLm1hcChjbG9uZSkudG9MaXN0KCkpOwogIH0KCiAgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IEVtcHR5U3RhdGVtZW50KCk7CiAgfQoKICB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBBc3NlcnRTdGF0ZW1lbnQoY2xvbmUobm9kZS5jb25kaXRpb24pLAogICAgICAgIGNvbmRpdGlvblN0YXJ0T2Zmc2V0OiBub2RlLmNvbmRpdGlvblN0YXJ0T2Zmc2V0LAogICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogbm9kZS5jb25kaXRpb25FbmRPZmZzZXQsCiAgICAgICAgbWVzc2FnZTogY2xvbmVPcHRpb25hbChub2RlLm1lc3NhZ2UpKTsKICB9CgogIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIExhYmVsZWRTdGF0ZW1lbnQgbmV3Tm9kZSA9IG5ldyBMYWJlbGVkU3RhdGVtZW50KG51bGwpOwogICAgbGFiZWxzW25vZGVdID0gbmV3Tm9kZTsKICAgIG5ld05vZGUuYm9keSA9IGNsb25lKG5vZGUuYm9keSkuLnBhcmVudCA9IG5ld05vZGU7CiAgICByZXR1cm4gbmV3Tm9kZTsKICB9CgogIHZpc2l0QnJlYWtTdGF0ZW1lbnQoQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBCcmVha1N0YXRlbWVudChsYWJlbHNbbm9kZS50YXJnZXRdKTsKICB9CgogIHZpc2l0V2hpbGVTdGF0ZW1lbnQoV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBXaGlsZVN0YXRlbWVudChjbG9uZShub2RlLmNvbmRpdGlvbiksIGNsb25lKG5vZGUuYm9keSkpOwogIH0KCiAgdmlzaXREb1N0YXRlbWVudChEb1N0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IERvU3RhdGVtZW50KGNsb25lKG5vZGUuYm9keSksIGNsb25lKG5vZGUuY29uZGl0aW9uKSk7CiAgfQoKICB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgdmFyIHZhcmlhYmxlcyA9IG5vZGUudmFyaWFibGVzLm1hcChjbG9uZSkudG9MaXN0KCk7CiAgICByZXR1cm4gbmV3IEZvclN0YXRlbWVudCh2YXJpYWJsZXMsIGNsb25lT3B0aW9uYWwobm9kZS5jb25kaXRpb24pLAogICAgICAgIG5vZGUudXBkYXRlcy5tYXAoY2xvbmUpLnRvTGlzdCgpLCBjbG9uZShub2RlLmJvZHkpKTsKICB9CgogIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgdmFyIG5ld1ZhcmlhYmxlID0gY2xvbmUobm9kZS52YXJpYWJsZSk7CiAgICByZXR1cm4gbmV3IEZvckluU3RhdGVtZW50KAogICAgICAgIG5ld1ZhcmlhYmxlLCBjbG9uZShub2RlLml0ZXJhYmxlKSwgY2xvbmUobm9kZS5ib2R5KSwKICAgICAgICBpc0FzeW5jOiBub2RlLmlzQXN5bmMpOwogIH0KCiAgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIGZvciAoU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlIGluIG5vZGUuY2FzZXMpIHsKICAgICAgc3dpdGNoQ2FzZXNbc3dpdGNoQ2FzZV0gPSBuZXcgU3dpdGNoQ2FzZSgKICAgICAgICAgIHN3aXRjaENhc2UuZXhwcmVzc2lvbnMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICAgIG5ldyBMaXN0PGludD4uZnJvbShzd2l0Y2hDYXNlLmV4cHJlc3Npb25PZmZzZXRzKSwKICAgICAgICAgIG51bGwsCiAgICAgICAgICBpc0RlZmF1bHQ6IHN3aXRjaENhc2UuaXNEZWZhdWx0KTsKICAgIH0KICAgIHJldHVybiBuZXcgU3dpdGNoU3RhdGVtZW50KAogICAgICAgIGNsb25lKG5vZGUuZXhwcmVzc2lvbiksIG5vZGUuY2FzZXMubWFwKGNsb25lKS50b0xpc3QoKSk7CiAgfQoKICB2aXNpdFN3aXRjaENhc2UoU3dpdGNoQ2FzZSBub2RlKSB7CiAgICB2YXIgc3dpdGNoQ2FzZSA9IHN3aXRjaENhc2VzW25vZGVdOwogICAgc3dpdGNoQ2FzZS5ib2R5ID0gY2xvbmUobm9kZS5ib2R5KS4ucGFyZW50ID0gc3dpdGNoQ2FzZTsKICAgIHJldHVybiBzd2l0Y2hDYXNlOwogIH0KCiAgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KHN3aXRjaENhc2VzW25vZGUudGFyZ2V0XSk7CiAgfQoKICB2aXNpdElmU3RhdGVtZW50KElmU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnQoCiAgICAgICAgY2xvbmUobm9kZS5jb25kaXRpb24pLCBjbG9uZShub2RlLnRoZW4pLCBjbG9uZU9wdGlvbmFsKG5vZGUub3RoZXJ3aXNlKSk7CiAgfQoKICB2aXNpdFJldHVyblN0YXRlbWVudChSZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBSZXR1cm5TdGF0ZW1lbnQoY2xvbmVPcHRpb25hbChub2RlLmV4cHJlc3Npb24pKTsKICB9CgogIHZpc2l0VHJ5Q2F0Y2goVHJ5Q2F0Y2ggbm9kZSkgewogICAgcmV0dXJuIG5ldyBUcnlDYXRjaChjbG9uZShub2RlLmJvZHkpLCBub2RlLmNhdGNoZXMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICBpc1N5bnRoZXRpYzogbm9kZS5pc1N5bnRoZXRpYyk7CiAgfQoKICB2aXNpdENhdGNoKENhdGNoIG5vZGUpIHsKICAgIHZhciBuZXdFeGNlcHRpb24gPSBjbG9uZU9wdGlvbmFsKG5vZGUuZXhjZXB0aW9uKTsKICAgIHZhciBuZXdTdGFja1RyYWNlID0gY2xvbmVPcHRpb25hbChub2RlLnN0YWNrVHJhY2UpOwogICAgcmV0dXJuIG5ldyBDYXRjaChuZXdFeGNlcHRpb24sIGNsb25lKG5vZGUuYm9keSksCiAgICAgICAgc3RhY2tUcmFjZTogbmV3U3RhY2tUcmFjZSwgZ3VhcmQ6IHZpc2l0VHlwZShub2RlLmd1YXJkKSk7CiAgfQoKICB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlKSB7CiAgICByZXR1cm4gbmV3IFRyeUZpbmFsbHkoY2xvbmUobm9kZS5ib2R5KSwgY2xvbmUobm9kZS5maW5hbGl6ZXIpKTsKICB9CgogIHZpc2l0WWllbGRTdGF0ZW1lbnQoWWllbGRTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBZaWVsZFN0YXRlbWVudChjbG9uZShub2RlLmV4cHJlc3Npb24pKS4uZmxhZ3MgPSBub2RlLmZsYWdzOwogIH0KCiAgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIHZhcmlhYmxlc1tub2RlXSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUubmFtZSwKICAgICAgICBpbml0aWFsaXplcjogY2xvbmVPcHRpb25hbChub2RlLmluaXRpYWxpemVyKSwKICAgICAgICB0eXBlOiB2aXNpdFR5cGUobm9kZS50eXBlKSkKICAgICAgLi5hbm5vdGF0aW9ucyA9IGNsb25lQW5ub3RhdGlvbnMgJiYgIW5vZGUuYW5ub3RhdGlvbnMuaXNFbXB0eQogICAgICAgICAgPyBub2RlLmFubm90YXRpb25zLm1hcChjbG9uZSkudG9MaXN0KCkKICAgICAgICAgIDogY29uc3QgPEV4cHJlc3Npb24+W10KICAgICAgLi5mbGFncyA9IG5vZGUuZmxhZ3MKICAgICAgLi5maWxlRXF1YWxzT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVFcXVhbHNPZmZzZXQpOwogIH0KCiAgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgdmFyIG5ld1ZhcmlhYmxlID0gY2xvbmUobm9kZS52YXJpYWJsZSk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRGVjbGFyYXRpb24obmV3VmFyaWFibGUsIGNsb25lKG5vZGUuZnVuY3Rpb24pKTsKICB9CgogIC8vIE1lbWJlcnMKICB2aXNpdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IoY2xvbmUobm9kZS5mdW5jdGlvbiksCiAgICAgICAgbmFtZTogbm9kZS5uYW1lLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCwKICAgICAgICBpc0V4dGVybmFsOiBub2RlLmlzRXh0ZXJuYWwsCiAgICAgICAgaXNTeW50aGV0aWM6IG5vZGUuaXNTeW50aGV0aWMsCiAgICAgICAgaW5pdGlhbGl6ZXJzOiBub2RlLmluaXRpYWxpemVycy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIHRyYW5zZm9ybWVyRmxhZ3M6IG5vZGUudHJhbnNmb3JtZXJGbGFncywKICAgICAgICBmaWxlVXJpOiBfYWN0aXZlRmlsZVVyaSkKICAgICAgLi5hbm5vdGF0aW9ucyA9IGNsb25lQW5ub3RhdGlvbnMgJiYgIW5vZGUuYW5ub3RhdGlvbnMuaXNFbXB0eQogICAgICAgICAgPyBub2RlLmFubm90YXRpb25zLm1hcChjbG9uZSkudG9MaXN0KCkKICAgICAgICAgIDogY29uc3QgPEV4cHJlc3Npb24+W10KICAgICAgLi5maWxlT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVPZmZzZXQpCiAgICAgIC4uZmlsZUVuZE9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKICB9CgogIHZpc2l0UHJvY2VkdXJlKFByb2NlZHVyZSBub2RlKSB7CiAgICByZXR1cm4gbmV3IFByb2NlZHVyZShub2RlLm5hbWUsIG5vZGUua2luZCwgY2xvbmUobm9kZS5mdW5jdGlvbiksCiAgICAgICAgdHJhbnNmb3JtZXJGbGFnczogbm9kZS50cmFuc2Zvcm1lckZsYWdzLAogICAgICAgIGZpbGVVcmk6IF9hY3RpdmVGaWxlVXJpLAogICAgICAgIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQ6IG5vZGUuZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCwKICAgICAgICBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldDogbm9kZS5mb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldCkKICAgICAgLi5hbm5vdGF0aW9ucyA9IGNsb25lQW5ub3RhdGlvbnMgJiYgIW5vZGUuYW5ub3RhdGlvbnMuaXNFbXB0eQogICAgICAgICAgPyBub2RlLmFubm90YXRpb25zLm1hcChjbG9uZSkudG9MaXN0KCkKICAgICAgICAgIDogY29uc3QgPEV4cHJlc3Npb24+W10KICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuc3RhcnRGaWxlT2Zmc2V0KQogICAgICAuLmZpbGVPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCkKICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVFbmRPZmZzZXQpCiAgICAgIC4uZmxhZ3MgPSBub2RlLmZsYWdzOwogIH0KCiAgdmlzaXRGaWVsZChGaWVsZCBub2RlKSB7CiAgICByZXR1cm4gbmV3IEZpZWxkKG5vZGUubmFtZSwKICAgICAgICB0eXBlOiB2aXNpdFR5cGUobm9kZS50eXBlKSwKICAgICAgICBpbml0aWFsaXplcjogY2xvbmVPcHRpb25hbChub2RlLmluaXRpYWxpemVyKSwKICAgICAgICBpc0NvdmFyaWFudDogbm9kZS5pc0NvdmFyaWFudCwKICAgICAgICBpc0ZpbmFsOiBub2RlLmlzRmluYWwsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0LAogICAgICAgIGlzU3RhdGljOiBub2RlLmlzU3RhdGljLAogICAgICAgIGlzTGF0ZTogbm9kZS5pc0xhdGUsCiAgICAgICAgaGFzSW1wbGljaXRHZXR0ZXI6IG5vZGUuaGFzSW1wbGljaXRHZXR0ZXIsCiAgICAgICAgaGFzSW1wbGljaXRTZXR0ZXI6IG5vZGUuaGFzSW1wbGljaXRTZXR0ZXIsCiAgICAgICAgdHJhbnNmb3JtZXJGbGFnczogbm9kZS50cmFuc2Zvcm1lckZsYWdzLAogICAgICAgIGZpbGVVcmk6IF9hY3RpdmVGaWxlVXJpKQogICAgICAuLmFubm90YXRpb25zID0gY2xvbmVBbm5vdGF0aW9ucyAmJiAhbm9kZS5hbm5vdGF0aW9ucy5pc0VtcHR5CiAgICAgICAgICA/IG5vZGUuYW5ub3RhdGlvbnMubWFwKGNsb25lKS50b0xpc3QoKQogICAgICAgICAgOiBjb25zdCA8RXhwcmVzc2lvbj5bXQogICAgICAuLmZpbGVPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCkKICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVFbmRPZmZzZXQpCiAgICAgIC4uZmxhZ3MgPSBub2RlLmZsYWdzOwogIH0KCiAgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcihSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciBub2RlKSB7CiAgICByZXR1cm4gbmV3IFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKG5vZGUudGFyZ2V0UmVmZXJlbmNlLAogICAgICAgIG5hbWU6IG5vZGUubmFtZSwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QsCiAgICAgICAgaXNFeHRlcm5hbDogbm9kZS5pc0V4dGVybmFsLAogICAgICAgIHRyYW5zZm9ybWVyRmxhZ3M6IG5vZGUudHJhbnNmb3JtZXJGbGFncywKICAgICAgICB0eXBlQXJndW1lbnRzOiBub2RlLnR5cGVBcmd1bWVudHMubWFwKHZpc2l0VHlwZSkudG9MaXN0KCksCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbm9kZS5uYW1lZFBhcmFtZXRlcnMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiBub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgZmlsZVVyaTogX2FjdGl2ZUZpbGVVcmkpCiAgICAgIC4uYW5ub3RhdGlvbnMgPSBjbG9uZUFubm90YXRpb25zICYmICFub2RlLmFubm90YXRpb25zLmlzRW1wdHkKICAgICAgICAgID8gbm9kZS5hbm5vdGF0aW9ucy5tYXAoY2xvbmUpLnRvTGlzdCgpCiAgICAgICAgICA6IGNvbnN0IDxFeHByZXNzaW9uPltdOwogIH0KCiAgdmlzaXRUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgVHlwZVBhcmFtZXRlciBuZXdOb2RlID0gdHlwZVBhcmFtc1tub2RlXTsKICAgIGlmIChuZXdOb2RlID09IG51bGwpIHsKICAgICAgbmV3Tm9kZSA9IG5ldyBUeXBlUGFyYW1ldGVyKG5vZGUubmFtZSk7CiAgICAgIHR5cGVTdWJzdGl0dXRpb25bbm9kZV0gPSBuZXcgVHlwZVBhcmFtZXRlclR5cGUobmV3Tm9kZSk7CiAgICB9CiAgICBuZXdOb2RlLmJvdW5kID0gdmlzaXRUeXBlKG5vZGUuYm91bmQpOwogICAgaWYgKG5vZGUuZGVmYXVsdFR5cGUgIT0gbnVsbCkgewogICAgICBuZXdOb2RlLmRlZmF1bHRUeXBlID0gdmlzaXRUeXBlKG5vZGUuZGVmYXVsdFR5cGUpOwogICAgfQogICAgcmV0dXJuIG5ld05vZGUKICAgICAgLi5hbm5vdGF0aW9ucyA9IGNsb25lQW5ub3RhdGlvbnMgJiYgIW5vZGUuYW5ub3RhdGlvbnMuaXNFbXB0eQogICAgICAgICAgPyBub2RlLmFubm90YXRpb25zLm1hcChjbG9uZSkudG9MaXN0KCkKICAgICAgICAgIDogY29uc3QgPEV4cHJlc3Npb24+W10KICAgICAgLi5mbGFncyA9IG5vZGUuZmxhZ3M7CiAgfQoKICBUcmVlTm9kZSBjbG9uZUZ1bmN0aW9uTm9kZUJvZHkoRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGJvb2wgc2F2ZWRDbG9uZUFubm90YXRpb25zID0gdGhpcy5jbG9uZUFubm90YXRpb25zOwogICAgdHJ5IHsKICAgICAgdGhpcy5jbG9uZUFubm90YXRpb25zID0gdHJ1ZTsKICAgICAgcmV0dXJuIGNsb25lT3B0aW9uYWwobm9kZS5ib2R5KTsKICAgIH0gZmluYWxseSB7CiAgICAgIHRoaXMuY2xvbmVBbm5vdGF0aW9ucyA9IHNhdmVkQ2xvbmVBbm5vdGF0aW9uczsKICAgIH0KICB9CgogIHZpc2l0RnVuY3Rpb25Ob2RlKEZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICB2YXIgdHlwZVBhcmFtZXRlcnMgPSBub2RlLnR5cGVQYXJhbWV0ZXJzLm1hcChjbG9uZSkudG9MaXN0KCk7CiAgICB2YXIgcG9zaXRpb25hbCA9IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKGNsb25lKS50b0xpc3QoKTsKICAgIHZhciBuYW1lZCA9IG5vZGUubmFtZWRQYXJhbWV0ZXJzLm1hcChjbG9uZSkudG9MaXN0KCk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShjbG9uZUZ1bmN0aW9uTm9kZUJvZHkobm9kZSksCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJzLAogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiBwb3NpdGlvbmFsLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWQsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgIHJldHVyblR5cGU6IHZpc2l0VHlwZShub2RlLnJldHVyblR5cGUpLAogICAgICAgIGFzeW5jTWFya2VyOiBub2RlLmFzeW5jTWFya2VyLAogICAgICAgIGRhcnRBc3luY01hcmtlcjogbm9kZS5kYXJ0QXN5bmNNYXJrZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KQogICAgICAuLmZpbGVFbmRPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCk7CiAgfQoKICB2aXNpdEFyZ3VtZW50cyhBcmd1bWVudHMgbm9kZSkgewogICAgcmV0dXJuIG5ldyBBcmd1bWVudHMobm9kZS5wb3NpdGlvbmFsLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAgdHlwZXM6IG5vZGUudHlwZXMubWFwKHZpc2l0VHlwZSkudG9MaXN0KCksCiAgICAgICAgbmFtZWQ6IG5vZGUubmFtZWQubWFwKGNsb25lKS50b0xpc3QoKSk7CiAgfQoKICB2aXNpdE5hbWVkRXhwcmVzc2lvbihOYW1lZEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBOYW1lZEV4cHJlc3Npb24obm9kZS5uYW1lLCBjbG9uZShub2RlLnZhbHVlKSk7CiAgfQoKICBkZWZhdWx0QmFzaWNMaXRlcmFsKEJhc2ljTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgfQoKICBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIHRocm93ICdVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgZXhwcmVzc2lvbjogJG5vZGUnOwogIH0KCiAgZGVmYXVsdEluaXRpYWxpemVyKEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHRocm93ICdVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgaW5pdGlhbGl6ZXI6ICRub2RlJzsKICB9CgogIGRlZmF1bHRNZW1iZXIoTWVtYmVyIG5vZGUpIHsKICAgIHRocm93ICdVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgbWVtYmVyOiAkbm9kZSc7CiAgfQoKICBkZWZhdWx0U3RhdGVtZW50KFN0YXRlbWVudCBub2RlKSB7CiAgICB0aHJvdyAnVW5pbXBsZW1lbnRlZCBjbG9uZSBmb3IgS2VybmVsIHN0YXRlbWVudDogJG5vZGUnOwogIH0KCiAgZGVmYXVsdFRyZWVOb2RlKFRyZWVOb2RlIG5vZGUpIHsKICAgIHRocm93ICdDbG9uaW5nIEtlcm5lbCBub24tbWVtYmVycyBpcyBub3Qgc3VwcG9ydGVkLiAgJwogICAgICAgICdUcmllZCBjbG9uaW5nICRub2RlJzsKICB9CgogIHZpc2l0QXNzZXJ0SW5pdGlhbGl6ZXIoQXNzZXJ0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIG5ldyBBc3NlcnRJbml0aWFsaXplcihjbG9uZShub2RlLnN0YXRlbWVudCkpOwogIH0KCiAgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChDaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlKSB7CiAgICByZXR1cm4gbmV3IENoZWNrTGlicmFyeUlzTG9hZGVkKG5vZGUuaW1wb3J0KTsKICB9CgogIHZpc2l0Q29tYmluYXRvcihDb21iaW5hdG9yIG5vZGUpIHsKICAgIHJldHVybiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgfQoKICB2aXNpdEZpZWxkSW5pdGlhbGl6ZXIoRmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gbmV3IEZpZWxkSW5pdGlhbGl6ZXIuYnlSZWZlcmVuY2UoCiAgICAgICAgbm9kZS5maWVsZFJlZmVyZW5jZSwgY2xvbmUobm9kZS52YWx1ZSkpOwogIH0KCiAgdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBJbnN0YW50aWF0aW9uKAogICAgICAgIGNsb25lKG5vZGUuZXhwcmVzc2lvbiksIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodmlzaXRUeXBlKS50b0xpc3QoKSk7CiAgfQoKICB2aXNpdEludmFsaWRJbml0aWFsaXplcihJbnZhbGlkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIG5ldyBJbnZhbGlkSW5pdGlhbGl6ZXIoKTsKICB9CgogIHZpc2l0TGlicmFyeURlcGVuZGVuY3koTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICB9CgogIHZpc2l0TGlicmFyeVBhcnQoTGlicmFyeVBhcnQgbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICB9CgogIHZpc2l0TG9hZExpYnJhcnkoTG9hZExpYnJhcnkgbm9kZSkgewogICAgcmV0dXJuIG5ldyBMb2FkTGlicmFyeShub2RlLmltcG9ydCk7CiAgfQoKICB2aXNpdExvY2FsSW5pdGlhbGl6ZXIoTG9jYWxJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gbmV3IExvY2FsSW5pdGlhbGl6ZXIoY2xvbmUobm9kZS52YXJpYWJsZSkpOwogIH0KCiAgdmlzaXRDb21wb25lbnQoQ29tcG9uZW50IG5vZGUpIHsKICAgIHJldHVybiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgfQoKICB2aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoUmVkaXJlY3RpbmdJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gbmV3IFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIuYnlSZWZlcmVuY2UoCiAgICAgICAgbm9kZS50YXJnZXRSZWZlcmVuY2UsIGNsb25lKG5vZGUuYXJndW1lbnRzKSk7CiAgfQoKICB2aXNpdFN1cGVySW5pdGlhbGl6ZXIoU3VwZXJJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gbmV3IFN1cGVySW5pdGlhbGl6ZXIuYnlSZWZlcmVuY2UoCiAgICAgICAgbm9kZS50YXJnZXRSZWZlcmVuY2UsIGNsb25lKG5vZGUuYXJndW1lbnRzKSk7CiAgfQoKICB2aXNpdFR5cGVkZWYoVHlwZWRlZiBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIH0KfQoKY2xhc3MgQ2xvbmVXaXRob3V0Qm9keSBleHRlbmRzIENsb25lVmlzaXRvciB7CiAgQ2xvbmVXaXRob3V0Qm9keSgKICAgICAge01hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gdHlwZVN1YnN0aXR1dGlvbiwKICAgICAgYm9vbCBjbG9uZUFubm90YXRpb25zID0gdHJ1ZX0pCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIHR5cGVTdWJzdGl0dXRpb246IHR5cGVTdWJzdGl0dXRpb24sCiAgICAgICAgICAgIGNsb25lQW5ub3RhdGlvbnM6IGNsb25lQW5ub3RhdGlvbnMpOwoKICBAb3ZlcnJpZGUKICBUcmVlTm9kZSBjbG9uZUZ1bmN0aW9uTm9kZUJvZHkoRnVuY3Rpb25Ob2RlIG5vZGUpID0+IG51bGw7Cn0KgpQATk48FgEiARMcAUwNBEcPLEI0OS5ONzYZAUIGTlFCEDY0JUFKATUqTSYqBhAEASg1BAEkMwQBLDYEAU5QPhYBTyMpRAQBKDNOLjgpEwQBKiMzTipPKRMEASYvBAEuFQQBLkUEATMwBAEnHEkEASdJBAEnKEkEASdIOwQBMy41BAEzLkgEATEtMwQBMS1GBAEjPAQBI08EATFNPwQBPTNMBAE7MkoEATEtNSAEATsyNSAEARcpBAEzIj0EATtORAQBN0oEATNBNQQBMT81BAExP1EEATFORiwIIR00FSozBAEpSAQBKUccBAErKgQBJzIEAS0hBAEfGgQBGzYEASdBTAQBJUBMBAElPCouIAQBIT0EAS81BAE1OQQBNSM9BAErKgQBJScEASsqBAEnKAQBJx4EARcsMwQBL0UEATc8BAEbOwQBJ0EEAS0hBAEvNjk1LwQBMTscNxQEAS00BAEtSAQBJ0UEASk4Rj0EAS0sHz0gBAEvMDA2PBAsBiBBBAElKD0XBAE/QgQBJxxRBAEvQAQBIUwoBAEbNjg1QgQBJUQEAS1LBAE3QDYkRDEhG0QEATcsRwQBDScxGR8lJz0xIUQxITc+BAEjRTEhQ0tEMSFBNz0cBAEbICQ2Jx8fIR0zMzEhRDEhNz0cBAFLQxkfJTFDQU1DPSFEMSIEASsuGy4/BiskOQYTRDEhHAQBNjgKJCcQNQYEASlCRDo5KCogPTAnLzc+BAEjPjMwBAEvPgQBKyQEASc+BAEpPwQBHzoEASU9BAEjOx8EATM5BAE5MgQBJSIEATEtMQQBKx5NBAE1JQQBMyIEASciBAEnKQQBMTcEASMiBAE9MzYEATEtNgQBHyIEAgEuFDYlDzAxAQw9AgEZcGFja2FnZTprZXJuZWwvY2xvbmUuZGFydC5zZGtyb290Oi9wa2cva2VybmVsL2xpYi9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0wABKVS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEJvdHRvbVR5cGUsCiAgICAgICAgQ2xhc3MsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVHlwZWRlZlR5cGUsCiAgICAgICAgVm9pZFR5cGU7CgppbXBvcnQgJy4uL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IFN1YnN0aXR1dGlvbiwgc3Vic3RpdHV0ZTsKCmltcG9ydCAnLi4vdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBzaG93IFR5cGVFbnZpcm9ubWVudDsKCmltcG9ydCAnLi4vdXRpbC9ncmFwaC5kYXJ0JyBzaG93IEdyYXBoLCBjb21wdXRlU3Ryb25nQ29tcG9uZW50czsKCmltcG9ydCAnLi4vdmlzaXRvci5kYXJ0JyBzaG93IERhcnRUeXBlVmlzaXRvcjsKCmNsYXNzIFR5cGVWYXJpYWJsZUdyYXBoIGV4dGVuZHMgR3JhcGg8aW50PiB7CiAgTGlzdDxpbnQ+IHZlcnRpY2VzOwogIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgTGlzdDxEYXJ0VHlwZT4gYm91bmRzOwoKICAvLyBgZWRnZXNbaV1gIGlzIHRoZSBsaXN0IG9mIGluZGljZXMgb2YgdHlwZSB2YXJpYWJsZXMgdGhhdCByZWZlcmVuY2UgdGhlIHR5cGUKICAvLyB2YXJpYWJsZSB3aXRoIHRoZSBpbmRleCBgaWAgaW4gdGhlaXIgYm91bmRzLgogIExpc3Q8TGlzdDxpbnQ+PiBlZGdlczsKCiAgVHlwZVZhcmlhYmxlR3JhcGgodGhpcy50eXBlUGFyYW1ldGVycywgdGhpcy5ib3VuZHMpIHsKICAgIGFzc2VydCh0eXBlUGFyYW1ldGVycy5sZW5ndGggPT0gYm91bmRzLmxlbmd0aCk7CgogICAgdmVydGljZXMgPSBuZXcgTGlzdDxpbnQ+KHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgaW50PiB0eXBlUGFyYW1ldGVySW5kaWNlcyA9IDxUeXBlUGFyYW1ldGVyLCBpbnQ+e307CiAgICBlZGdlcyA9IG5ldyBMaXN0PExpc3Q8aW50Pj4odHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmVydGljZXNbaV0gPSBpOwogICAgICB0eXBlUGFyYW1ldGVySW5kaWNlc1t0eXBlUGFyYW1ldGVyc1tpXV0gPSBpOwogICAgICBlZGdlc1tpXSA9IDxpbnQ+W107CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykgewogICAgICBPY2N1cnJlbmNlQ29sbGVjdG9yVmlzaXRvciBjb2xsZWN0b3IgPQogICAgICAgICAgbmV3IE9jY3VycmVuY2VDb2xsZWN0b3JWaXNpdG9yKHR5cGVQYXJhbWV0ZXJzLnRvU2V0KCkpOwogICAgICBjb2xsZWN0b3IudmlzaXQoYm91bmRzW2ldKTsKICAgICAgZm9yIChUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gY29sbGVjdG9yLm9jY3VycmVkKSB7CiAgICAgICAgZWRnZXNbdHlwZVBhcmFtZXRlckluZGljZXNbdHlwZVBhcmFtZXRlcl1dLmFkZChpKTsKICAgICAgfQogICAgfQogIH0KCiAgSXRlcmFibGU8aW50PiBuZWlnaGJvcnNPZihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBlZGdlc1tpbmRleF07CiAgfQp9CgpjbGFzcyBPY2N1cnJlbmNlQ29sbGVjdG9yVmlzaXRvciBleHRlbmRzIERhcnRUeXBlVmlzaXRvciB7CiAgZmluYWwgU2V0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzOwogIFNldDxUeXBlUGFyYW1ldGVyPiBvY2N1cnJlZCA9IG5ldyBTZXQ8VHlwZVBhcmFtZXRlcj4oKTsKCiAgT2NjdXJyZW5jZUNvbGxlY3RvclZpc2l0b3IodGhpcy50eXBlUGFyYW1ldGVycyk7CgogIHZpc2l0KERhcnRUeXBlIG5vZGUpID0+IG5vZGUuYWNjZXB0KHRoaXMpOwoKICB2aXNpdE5hbWVkVHlwZShOYW1lZFR5cGUgbm9kZSkgewogICAgbm9kZS50eXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSk7CiAgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlKTsKICB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpOwoKICB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIG5vZGUudHlwZUFyZ3VtZW50cykgewogICAgICBhcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICB9CiAgfQoKICB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpIHsKICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnQgaW4gbm9kZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQuYWNjZXB0KHRoaXMpOwogICAgICB0eXBlUGFyYW1ldGVyLmRlZmF1bHRUeXBlPy5hY2NlcHQodGhpcyk7CiAgICB9CiAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgIHBhcmFtZXRlci5hY2NlcHQodGhpcyk7CiAgICB9CiAgICBmb3IgKE5hbWVkVHlwZSBuYW1lZFBhcmFtZXRlciBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBuYW1lZFBhcmFtZXRlci50eXBlLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIG5vZGUucmV0dXJuVHlwZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIGlmICh0eXBlUGFyYW1ldGVycy5jb250YWlucyhub2RlLnBhcmFtZXRlcikpIHsKICAgICAgb2NjdXJyZWQuYWRkKG5vZGUucGFyYW1ldGVyKTsKICAgIH0KICB9Cn0KCkRhcnRUeXBlIGluc3RhbnRpYXRlVG9Cb3VuZHMoRGFydFR5cGUgdHlwZSwgQ2xhc3Mgb2JqZWN0KSB7CiAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgZm9yICh2YXIgdHlwZUFyZ3VtZW50IGluIHR5cGUudHlwZUFyZ3VtZW50cykgewogICAgICAvLyBJZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGFyZ3VtZW50cyBpcyBub3QgZHluYW1pYywgd2UgYXNzdW1lIHRoYXQgdGhlCiAgICAgIC8vIHR5cGUgaXMgbm90IHJhdyBhbmQgZG9lcyBub3QgbmVlZCBpbnN0YW50aWF0aW9uIG9mIGl0cyB0eXBlIHBhcmFtZXRlcnMKICAgICAgLy8gdG8gdGhlaXIgYm91bmRzLgogICAgICBpZiAodHlwZUFyZ3VtZW50IGlzISBEeW5hbWljVHlwZSkgewogICAgICAgIHJldHVybiB0eXBlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUuYnlSZWZlcmVuY2UoCiAgICAgICAgdHlwZS5jbGFzc05hbWUsIGNhbGN1bGF0ZUJvdW5kcyh0eXBlLmNsYXNzTm9kZS50eXBlUGFyYW1ldGVycywgb2JqZWN0KSk7CiAgfQogIGlmICh0eXBlIGlzIFR5cGVkZWZUeXBlKSB7CiAgICBmb3IgKHZhciB0eXBlQXJndW1lbnQgaW4gdHlwZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICh0eXBlQXJndW1lbnQgaXMhIER5bmFtaWNUeXBlKSB7CiAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgVHlwZWRlZlR5cGUuYnlSZWZlcmVuY2UodHlwZS50eXBlZGVmUmVmZXJlbmNlLAogICAgICAgIGNhbGN1bGF0ZUJvdW5kcyh0eXBlLnR5cGVkZWZOb2RlLnR5cGVQYXJhbWV0ZXJzLCBvYmplY3QpKTsKICB9CiAgcmV0dXJuIHR5cGU7Cn0KCi8vLyBDYWxjdWxhdGVzIGJvdW5kcyB0byBiZSBwcm92aWRlZCBhcyB0eXBlIGFyZ3VtZW50cyBpbiBwbGFjZSBvZiBtaXNzaW5nIHR5cGUKLy8vIGFyZ3VtZW50cyBvbiByYXcgdHlwZXMgd2l0aCB0aGUgZ2l2ZW4gdHlwZSBwYXJhbWV0ZXJzLgovLy8KLy8vIFNlZSB0aGUgW2Rlc2NyaXB0aW9uXQovLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2Jsb2IvbWFzdGVyL2RvY3MvbGFuZ3VhZ2UvaW5mb3JtYWwvaW5zdGFudGlhdGUtdG8tYm91bmQubWQpCi8vLyBvZiB0aGUgYWxnb3JpdGhtIGZvciBkZXRhaWxzLgpMaXN0PERhcnRUeXBlPiBjYWxjdWxhdGVCb3VuZHMoCiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLCBDbGFzcyBvYmplY3QpIHsKICBMaXN0PERhcnRUeXBlPiBib3VuZHMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4odHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICBEYXJ0VHlwZSBib3VuZCA9IHR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kOwogICAgaWYgKGJvdW5kID09IG51bGwpIHsKICAgICAgYm91bmQgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfSBlbHNlIGlmIChib3VuZCBpcyBJbnRlcmZhY2VUeXBlICYmIGJvdW5kLmNsYXNzTm9kZSA9PSBvYmplY3QpIHsKICAgICAgRGFydFR5cGUgZGVmYXVsdFR5cGUgPSB0eXBlUGFyYW1ldGVyc1tpXS5kZWZhdWx0VHlwZTsKICAgICAgaWYgKCEoZGVmYXVsdFR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBkZWZhdWx0VHlwZS5jbGFzc05vZGUgPT0gb2JqZWN0KSkgewogICAgICAgIGJvdW5kID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgfQogICAgfQogICAgYm91bmRzW2ldID0gYm91bmQ7CiAgfQoKICBUeXBlVmFyaWFibGVHcmFwaCBncmFwaCA9IG5ldyBUeXBlVmFyaWFibGVHcmFwaCh0eXBlUGFyYW1ldGVycywgYm91bmRzKTsKICBMaXN0PExpc3Q8aW50Pj4gc3Ryb25nbHlDb25uZWN0ZWQgPSBjb21wdXRlU3Ryb25nQ29tcG9uZW50cyhncmFwaCk7CiAgZm9yIChMaXN0PGludD4gY29tcG9uZW50IGluIHN0cm9uZ2x5Q29ubmVjdGVkKSB7CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHVwcGVyQm91bmRzID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBsb3dlckJvdW5kcyA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgIGZvciAoaW50IHR5cGVQYXJhbWV0ZXJJbmRleCBpbiBjb21wb25lbnQpIHsKICAgICAgdXBwZXJCb3VuZHNbdHlwZVBhcmFtZXRlcnNbdHlwZVBhcmFtZXRlckluZGV4XV0gPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICBsb3dlckJvdW5kc1t0eXBlUGFyYW1ldGVyc1t0eXBlUGFyYW1ldGVySW5kZXhdXSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgIH0KICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPQogICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tVXBwZXJBbmRMb3dlckJvdW5kcyh1cHBlckJvdW5kcywgbG93ZXJCb3VuZHMpOwogICAgZm9yIChpbnQgdHlwZVBhcmFtZXRlckluZGV4IGluIGNvbXBvbmVudCkgewogICAgICBib3VuZHNbdHlwZVBhcmFtZXRlckluZGV4XSA9CiAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYm91bmRzW3R5cGVQYXJhbWV0ZXJJbmRleF0pOwogICAgfQogIH0KCiAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiB1cHBlckJvdW5kcyA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gbG93ZXJCb3VuZHMgPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICB1cHBlckJvdW5kc1t0eXBlUGFyYW1ldGVyc1tpXV0gPSBib3VuZHNbaV07CiAgICBsb3dlckJvdW5kc1t0eXBlUGFyYW1ldGVyc1tpXV0gPSBjb25zdCBCb3R0b21UeXBlKCk7CiAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0KICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVVwcGVyQW5kTG93ZXJCb3VuZHModXBwZXJCb3VuZHMsIGxvd2VyQm91bmRzKTsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBqKyspIHsKICAgICAgYm91bmRzW2pdID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJvdW5kc1tqXSk7CiAgICB9CiAgfQoKICByZXR1cm4gYm91bmRzOwp9CgpjbGFzcyBUeXBlQXJndW1lbnRJc3N1ZSB7CiAgLy8gVGhlIHR5cGUgYXJndW1lbnQgdGhhdCB2aW9sYXRlZCB0aGUgYm91bmQuCiAgZmluYWwgRGFydFR5cGUgYXJndW1lbnQ7CgogIC8vIFRoZSB0eXBlIHBhcmFtZXRlciB3aXRoIHRoZSBib3VuZCB0aGF0IHdhcyB2aW9sYXRlZC4KICBmaW5hbCBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXI7CgogIC8vIFRoZSBlbmNsb3NpbmcgdHlwZSBvZiB0aGUgaXNzdWUsIHRoYXQgaXMsIHRoZSBvbmUgd2l0aCBbdHlwZVBhcmFtZXRlcl0uCiAgZmluYWwgRGFydFR5cGUgZW5jbG9zaW5nVHlwZTsKCiAgVHlwZUFyZ3VtZW50SXNzdWUodGhpcy5hcmd1bWVudCwgdGhpcy50eXBlUGFyYW1ldGVyLCB0aGlzLmVuY2xvc2luZ1R5cGUpOwp9CgovLyBUT0RPKGRtaXRyeWFzKTogIFJlbW92ZSBbdHlwZWRlZkluc3RhbnRpYXRpb25zXSB3aGVuIHR5cGUgYXJndW1lbnRzIHBhc3NlZCB0bwovLyB0eXBlZGVmcyBhcmUgcHJlc2VydmVkIGluIHRoZSBLZXJuZWwgb3V0cHV0LgpMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKAogICAgRGFydFR5cGUgdHlwZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwKICAgIHtib29sIGFsbG93U3VwZXJCb3VuZGVkID0gZmFsc2V9KSB7CiAgTGlzdDxUeXBlUGFyYW1ldGVyPiB2YXJpYWJsZXM7CiAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzOwogIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IHR5cGVkZWZSaHNSZXN1bHQ7CgogIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZSAmJiB0eXBlLnR5cGVkZWZUeXBlICE9IG51bGwpIHsKICAgIC8vIFt0eXBlXSBpcyBhIGZ1bmN0aW9uIHR5cGUgdGhhdCBpcyBhbiBhcHBsaWNhdGlvbiBvZiBhIHBhcmFtZXRyaXplZAogICAgLy8gdHlwZWRlZi4gIFdlIG5lZWQgdG8gY2hlY2sgYm90aCB0aGUgbC5oLnMuIGFuZCB0aGUgci5oLnMuIG9mIHRoZQogICAgLy8gZGVmaW5pdGlvbiBpbiB0aGF0IGNhc2UuICBGb3IgZGV0YWlscywgc2VlIFtsaW5rXQogICAgLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2Jsb2IvbWFzdGVyL2RvY3MvbGFuZ3VhZ2UvaW5mb3JtYWwvc3VwZXItYm91bmRlZC10eXBlcy5tZCkuCiAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gdHlwZTsKICAgIEZ1bmN0aW9uVHlwZSBjbG9uZWQgPSBuZXcgRnVuY3Rpb25UeXBlKAogICAgICAgIGZ1bmN0aW9uVHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycywgZnVuY3Rpb25UeXBlLnJldHVyblR5cGUsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBmdW5jdGlvblR5cGUubmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmdW5jdGlvblR5cGUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogZnVuY3Rpb25UeXBlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgdHlwZWRlZlR5cGU6IG51bGwpOwogICAgdHlwZWRlZlJoc1Jlc3VsdCA9IGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMoY2xvbmVkLCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgdHlwZSA9IGZ1bmN0aW9uVHlwZS50eXBlZGVmVHlwZTsKICB9CgogIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgIHZhcmlhYmxlcyA9IHR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzOwogICAgYXJndW1lbnRzID0gdHlwZS50eXBlQXJndW1lbnRzOwogIH0gZWxzZSBpZiAodHlwZSBpcyBUeXBlZGVmVHlwZSkgewogICAgdmFyaWFibGVzID0gdHlwZS50eXBlZGVmTm9kZS50eXBlUGFyYW1ldGVyczsKICAgIGFyZ3VtZW50cyA9IHR5cGUudHlwZUFyZ3VtZW50czsKICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiByZXN1bHQgPSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyIGluIHR5cGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgcmVzdWx0LmFkZEFsbChmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKHBhcmFtZXRlci5ib3VuZCwgdHlwZUVudmlyb25tZW50LAogICAgICAgICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKSA/PwogICAgICAgICAgY29uc3QgPFR5cGVBcmd1bWVudElzc3VlPltdKTsKICAgIH0KICAgIGZvciAoRGFydFR5cGUgZm9ybWFsIGluIHR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgcmVzdWx0LmFkZEFsbChmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKGZvcm1hbCwgdHlwZUVudmlyb25tZW50LAogICAgICAgICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKSA/PwogICAgICAgICAgY29uc3QgPFR5cGVBcmd1bWVudElzc3VlPltdKTsKICAgIH0KICAgIGZvciAoTmFtZWRUeXBlIG5hbWVkIGluIHR5cGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIHJlc3VsdC5hZGRBbGwoZmluZFR5cGVBcmd1bWVudElzc3VlcyhuYW1lZC50eXBlLCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpID8/CiAgICAgICAgICBjb25zdCA8VHlwZUFyZ3VtZW50SXNzdWU+W10pOwogICAgfQogICAgcmVzdWx0LmFkZEFsbChmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKHR5cGUucmV0dXJuVHlwZSwgdHlwZUVudmlyb25tZW50LAogICAgICAgICAgICBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSkgPz8KICAgICAgICBjb25zdCA8VHlwZUFyZ3VtZW50SXNzdWU+W10pOwogICAgcmV0dXJuIHJlc3VsdC5pc0VtcHR5ID8gbnVsbCA6IHJlc3VsdDsKICB9IGVsc2UgewogICAgcmV0dXJuIG51bGw7CiAgfQoKICBpZiAodmFyaWFibGVzID09IG51bGwpIHJldHVybiBudWxsOwoKICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiByZXN1bHQ7CiAgTGlzdDxUeXBlQXJndW1lbnRJc3N1ZT4gYXJndW1lbnRzUmVzdWx0OwoKICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbk1hcCA9CiAgICAgIG5ldyBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+LmZyb21JdGVyYWJsZXModmFyaWFibGVzLCBhcmd1bWVudHMpOwogIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICBEYXJ0VHlwZSBhcmd1bWVudCA9IGFyZ3VtZW50c1tpXTsKICAgIGlmIChhcmd1bWVudCBpcyBGdW5jdGlvblR5cGUgJiYgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICAvLyBHZW5lcmljIGZ1bmN0aW9uIHR5cGVzIGFyZW4ndCBhbGxvd2VkIGFzIHR5cGUgYXJndW1lbnRzIGVpdGhlci4KICAgICAgcmVzdWx0ID8/PSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICAgIHJlc3VsdC5hZGQobmV3IFR5cGVBcmd1bWVudElzc3VlKGFyZ3VtZW50LCB2YXJpYWJsZXNbaV0sIHR5cGUpKTsKICAgIH0gZWxzZSBpZiAoIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZigKICAgICAgICBhcmd1bWVudCwgc3Vic3RpdHV0ZSh2YXJpYWJsZXNbaV0uYm91bmQsIHN1YnN0aXR1dGlvbk1hcCkpKSB7CiAgICAgIHJlc3VsdCA/Pz0gPFR5cGVBcmd1bWVudElzc3VlPltdOwogICAgICByZXN1bHQuYWRkKG5ldyBUeXBlQXJndW1lbnRJc3N1ZShhcmd1bWVudCwgdmFyaWFibGVzW2ldLCB0eXBlKSk7CiAgICB9CgogICAgTGlzdDxUeXBlQXJndW1lbnRJc3N1ZT4gaXNzdWVzID0gZmluZFR5cGVBcmd1bWVudElzc3VlcygKICAgICAgICBhcmd1bWVudCwgdHlwZUVudmlyb25tZW50LAogICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICAgIGlmIChpc3N1ZXMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHNSZXN1bHQgPz89IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgICAgYXJndW1lbnRzUmVzdWx0LmFkZEFsbChpc3N1ZXMpOwogICAgfQogIH0KICBpZiAoYXJndW1lbnRzUmVzdWx0ICE9IG51bGwpIHsKICAgIHJlc3VsdCA/Pz0gPFR5cGVBcmd1bWVudElzc3VlPltdOwogICAgcmVzdWx0LmFkZEFsbChhcmd1bWVudHNSZXN1bHQpOwogIH0KICBpZiAodHlwZWRlZlJoc1Jlc3VsdCAhPSBudWxsKSB7CiAgICByZXN1bHQgPz89IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgIHJlc3VsdC5hZGRBbGwodHlwZWRlZlJoc1Jlc3VsdCk7CiAgfQoKICAvLyBbdHlwZV0gaXMgcmVndWxhci1ib3VuZGVkLgogIGlmIChyZXN1bHQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgaWYgKCFhbGxvd1N1cGVyQm91bmRlZCkgcmV0dXJuIHJlc3VsdDsKCiAgcmVzdWx0ID0gbnVsbDsKICB0eXBlID0gY29udmVydFN1cGVyQm91bmRlZFRvUmVndWxhckJvdW5kZWQodHlwZUVudmlyb25tZW50LCB0eXBlKTsKICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHNUb1JlcG9ydCA9IGFyZ3VtZW50cy50b0xpc3QoKTsKICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICB2YXJpYWJsZXMgPSB0eXBlLmNsYXNzTm9kZS50eXBlUGFyYW1ldGVyczsKICAgIGFyZ3VtZW50cyA9IHR5cGUudHlwZUFyZ3VtZW50czsKICB9IGVsc2UgaWYgKHR5cGUgaXMgVHlwZWRlZlR5cGUpIHsKICAgIHZhcmlhYmxlcyA9IHR5cGUudHlwZWRlZk5vZGUudHlwZVBhcmFtZXRlcnM7CiAgICBhcmd1bWVudHMgPSB0eXBlLnR5cGVBcmd1bWVudHM7CiAgfQogIHN1YnN0aXR1dGlvbk1hcCA9CiAgICAgIG5ldyBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+LmZyb21JdGVyYWJsZXModmFyaWFibGVzLCBhcmd1bWVudHMpOwogIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICBEYXJ0VHlwZSBhcmd1bWVudCA9IGFyZ3VtZW50c1tpXTsKICAgIGlmIChhcmd1bWVudCBpcyBGdW5jdGlvblR5cGUgJiYgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICAvLyBHZW5lcmljIGZ1bmN0aW9uIHR5cGVzIGFyZW4ndCBhbGxvd2VkIGFzIHR5cGUgYXJndW1lbnRzIGVpdGhlci4KICAgICAgcmVzdWx0ID8/PSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICAgIHJlc3VsdAogICAgICAgICAgLmFkZChuZXcgVHlwZUFyZ3VtZW50SXNzdWUoYXJndW1lbnRzVG9SZXBvcnRbaV0sIHZhcmlhYmxlc1tpXSwgdHlwZSkpOwogICAgfSBlbHNlIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKAogICAgICAgIGFyZ3VtZW50LCBzdWJzdGl0dXRlKHZhcmlhYmxlc1tpXS5ib3VuZCwgc3Vic3RpdHV0aW9uTWFwKSkpIHsKICAgICAgcmVzdWx0ID8/PSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICAgIHJlc3VsdAogICAgICAgICAgLmFkZChuZXcgVHlwZUFyZ3VtZW50SXNzdWUoYXJndW1lbnRzVG9SZXBvcnRbaV0sIHZhcmlhYmxlc1tpXSwgdHlwZSkpOwogICAgfQogIH0KICBpZiAoYXJndW1lbnRzUmVzdWx0ICE9IG51bGwpIHsKICAgIHJlc3VsdCA/Pz0gPFR5cGVBcmd1bWVudElzc3VlPltdOwogICAgcmVzdWx0LmFkZEFsbChhcmd1bWVudHNSZXN1bHQpOwogIH0KICBpZiAodHlwZWRlZlJoc1Jlc3VsdCAhPSBudWxsKSB7CiAgICByZXN1bHQgPz89IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgIHJlc3VsdC5hZGRBbGwodHlwZWRlZlJoc1Jlc3VsdCk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCi8vIFRPRE8oZG1pdHJ5YXMpOiAgUmVtb3ZlIFt0eXBlZGVmSW5zdGFudGlhdGlvbnNdIHdoZW4gdHlwZSBhcmd1bWVudHMgcGFzc2VkIHRvCi8vIHR5cGVkZWZzIGFyZSBwcmVzZXJ2ZWQgaW4gdGhlIEtlcm5lbCBvdXRwdXQuCkxpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IGZpbmRUeXBlQXJndW1lbnRJc3N1ZXNGb3JJbnZvY2F0aW9uKAogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzLAogICAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzLAogICAgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwKICAgIHtNYXA8RnVuY3Rpb25UeXBlLCBMaXN0PERhcnRUeXBlPj4gdHlwZWRlZkluc3RhbnRpYXRpb25zfSkgewogIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09IHBhcmFtZXRlcnMubGVuZ3RoKTsKICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiByZXN1bHQ7CiAgdmFyIHN1YnN0aXR1dGlvbk1hcCA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgc3Vic3RpdHV0aW9uTWFwW3BhcmFtZXRlcnNbaV1dID0gYXJndW1lbnRzW2ldOwogIH0KICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgRGFydFR5cGUgYXJndW1lbnQgPSBhcmd1bWVudHNbaV07CiAgICBpZiAoYXJndW1lbnQgaXMgVHlwZVBhcmFtZXRlclR5cGUgJiYgYXJndW1lbnQucHJvbW90ZWRCb3VuZCAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCA/Pz0gPFR5cGVBcmd1bWVudElzc3VlPltdOwogICAgICByZXN1bHQuYWRkKG5ldyBUeXBlQXJndW1lbnRJc3N1ZShhcmd1bWVudCwgcGFyYW1ldGVyc1tpXSwgbnVsbCkpOwogICAgfSBlbHNlIGlmIChhcmd1bWVudCBpcyBGdW5jdGlvblR5cGUgJiYgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICAvLyBHZW5lcmljIGZ1bmN0aW9uIHR5cGVzIGFyZW4ndCBhbGxvd2VkIGFzIHR5cGUgYXJndW1lbnRzIGVpdGhlci4KICAgICAgcmVzdWx0ID8/PSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICAgIHJlc3VsdC5hZGQobmV3IFR5cGVBcmd1bWVudElzc3VlKGFyZ3VtZW50LCBwYXJhbWV0ZXJzW2ldLCBudWxsKSk7CiAgICB9IGVsc2UgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoCiAgICAgICAgYXJndW1lbnQsIHN1YnN0aXR1dGUocGFyYW1ldGVyc1tpXS5ib3VuZCwgc3Vic3RpdHV0aW9uTWFwKSkpIHsKICAgICAgcmVzdWx0ID8/PSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICAgIHJlc3VsdC5hZGQobmV3IFR5cGVBcmd1bWVudElzc3VlKGFyZ3VtZW50LCBwYXJhbWV0ZXJzW2ldLCBudWxsKSk7CiAgICB9CgogICAgTGlzdDxUeXBlQXJndW1lbnRJc3N1ZT4gaXNzdWVzID0gZmluZFR5cGVBcmd1bWVudElzc3VlcygKICAgICAgICBhcmd1bWVudCwgdHlwZUVudmlyb25tZW50LAogICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICAgIGlmIChpc3N1ZXMgIT0gbnVsbCkgewogICAgICByZXN1bHQgPz89IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgICAgcmVzdWx0LmFkZEFsbChpc3N1ZXMpOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CgpTdHJpbmcgZ2V0R2VuZXJpY1R5cGVOYW1lKERhcnRUeXBlIHR5cGUpIHsKICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICByZXR1cm4gdHlwZS5jbGFzc05vZGUubmFtZTsKICB9IGVsc2UgaWYgKHR5cGUgaXMgVHlwZWRlZlR5cGUpIHsKICAgIHJldHVybiB0eXBlLnR5cGVkZWZOb2RlLm5hbWU7CiAgfQogIHJldHVybiB0eXBlLnRvU3RyaW5nKCk7Cn0KCi8vLyBSZXBsYWNlcyBhbGwgY292YXJpYW50IG9jY3VycmVuY2VzIG9mIGBkeW5hbWljYCwgYE9iamVjdGAsIGFuZCBgdm9pZGAgd2l0aAovLy8gW0JvdHRvbVR5cGVdIGFuZCBhbGwgY29udHJhdmFyaWFudCBvY2N1cnJlbmNlcyBvZiBgTnVsbGAgYW5kIFtCb3R0b21UeXBlXQovLy8gd2l0aCBgT2JqZWN0YC4KRGFydFR5cGUgY29udmVydFN1cGVyQm91bmRlZFRvUmVndWxhckJvdW5kZWQoCiAgICBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBEYXJ0VHlwZSB0eXBlLAogICAge2Jvb2wgaXNDb3ZhcmlhbnQgPSB0cnVlfSkgewogIGlmICgodHlwZSBpcyBEeW5hbWljVHlwZSB8fAogICAgICAgICAgdHlwZSBpcyBWb2lkVHlwZSB8fAogICAgICAgICAgaXNPYmplY3QodHlwZUVudmlyb25tZW50LCB0eXBlKSkgJiYKICAgICAgaXNDb3ZhcmlhbnQpIHsKICAgIHJldHVybiBjb25zdCBCb3R0b21UeXBlKCk7CiAgfSBlbHNlIGlmICgodHlwZSBpcyBCb3R0b21UeXBlIHx8IGlzTnVsbCh0eXBlRW52aXJvbm1lbnQsIHR5cGUpKSAmJgogICAgICAhaXNDb3ZhcmlhbnQpIHsKICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQub2JqZWN0VHlwZTsKICB9IGVsc2UgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiB0eXBlLmNsYXNzTm9kZS50eXBlUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICBMaXN0PERhcnRUeXBlPiByZXBsYWNlZFR5cGVBcmd1bWVudHMgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPih0eXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwbGFjZWRUeXBlQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlcGxhY2VkVHlwZUFyZ3VtZW50c1tpXSA9IGNvbnZlcnRTdXBlckJvdW5kZWRUb1JlZ3VsYXJCb3VuZGVkKAogICAgICAgICAgdHlwZUVudmlyb25tZW50LCB0eXBlLnR5cGVBcmd1bWVudHNbaV0sCiAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQpOwogICAgfQogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKHR5cGUuY2xhc3NOb2RlLCByZXBsYWNlZFR5cGVBcmd1bWVudHMpOwogIH0gZWxzZSBpZiAodHlwZSBpcyBUeXBlZGVmVHlwZSAmJiB0eXBlLnR5cGVkZWZOb2RlLnR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgIExpc3Q8RGFydFR5cGU+IHJlcGxhY2VkVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+KHR5cGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBsYWNlZFR5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVwbGFjZWRUeXBlQXJndW1lbnRzW2ldID0gY29udmVydFN1cGVyQm91bmRlZFRvUmVndWxhckJvdW5kZWQoCiAgICAgICAgICB0eXBlRW52aXJvbm1lbnQsIHR5cGUudHlwZUFyZ3VtZW50c1tpXSwKICAgICAgICAgIGlzQ292YXJpYW50OiBpc0NvdmFyaWFudCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVkZWZUeXBlKHR5cGUudHlwZWRlZk5vZGUsIHJlcGxhY2VkVHlwZUFyZ3VtZW50cyk7CiAgfSBlbHNlIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgdmFyIHJlcGxhY2VkUmV0dXJuVHlwZSA9IGNvbnZlcnRTdXBlckJvdW5kZWRUb1JlZ3VsYXJCb3VuZGVkKAogICAgICAgIHR5cGVFbnZpcm9ubWVudCwgdHlwZS5yZXR1cm5UeXBlLAogICAgICAgIGlzQ292YXJpYW50OiBpc0NvdmFyaWFudCk7CiAgICB2YXIgcmVwbGFjZWRQb3NpdGlvbmFsUGFyYW1ldGVycyA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+KHR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwbGFjZWRQb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICByZXBsYWNlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldID0gY29udmVydFN1cGVyQm91bmRlZFRvUmVndWxhckJvdW5kZWQoCiAgICAgICAgICB0eXBlRW52aXJvbm1lbnQsIHR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0sCiAgICAgICAgICBpc0NvdmFyaWFudDogIWlzQ292YXJpYW50KTsKICAgIH0KICAgIHZhciByZXBsYWNlZE5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgbmV3IExpc3Q8TmFtZWRUeXBlPih0eXBlLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBsYWNlZE5hbWVkUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICByZXBsYWNlZE5hbWVkUGFyYW1ldGVyc1tpXSA9IG5ldyBOYW1lZFR5cGUoCiAgICAgICAgICB0eXBlLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lLAogICAgICAgICAgY29udmVydFN1cGVyQm91bmRlZFRvUmVndWxhckJvdW5kZWQoCiAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LCB0eXBlLm5hbWVkUGFyYW1ldGVyc1tpXS50eXBlLAogICAgICAgICAgICAgIGlzQ292YXJpYW50OiAhaXNDb3ZhcmlhbnQpKTsKICAgIH0KICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHJlcGxhY2VkUG9zaXRpb25hbFBhcmFtZXRlcnMsIHJlcGxhY2VkUmV0dXJuVHlwZSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IHJlcGxhY2VkTmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICB0eXBlZGVmVHlwZTogdHlwZS50eXBlZGVmVHlwZSk7CiAgfQogIHJldHVybiB0eXBlOwp9Cgpib29sIGlzT2JqZWN0KFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIERhcnRUeXBlIHR5cGUpIHsKICByZXR1cm4gdHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgIHR5cGUuY2xhc3NOb2RlID09IHR5cGVFbnZpcm9ubWVudC5vYmplY3RUeXBlLmNsYXNzTm9kZTsKfQoKYm9vbCBpc051bGwoVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgRGFydFR5cGUgdHlwZSkgewogIHJldHVybiB0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgdHlwZS5jbGFzc05vZGUgPT0gdHlwZUVudmlyb25tZW50Lm51bGxUeXBlLmNsYXNzTm9kZTsKfQoKLy8gVmFsdWUgc2V0IGZvciB2YXJpYW5jZSBvZiBhIHR5cGUgcGFyYW1ldGVyIFggaW4gYSB0eXBlIHRlcm0gVC4KY2xhc3MgVmFyaWFuY2UgewogIC8vIFVzZWQgd2hlbiBYIGRvZXMgbm90IG9jY3VyIGZyZWUgaW4gVC4KICBzdGF0aWMgY29uc3QgaW50IHVucmVsYXRlZCA9IDA7CgogIC8vIFVzZWQgd2hlbiBYIG9jY3VycyBmcmVlIGluIFQsIGFuZCBVIDw6IFYgaW1wbGllcyBbVS9YXVQgPDogW1YvWF1ULgogIHN0YXRpYyBjb25zdCBpbnQgY292YXJpYW50ID0gMTsKCiAgLy8gVXNlZCB3aGVuIFggb2NjdXJzIGZyZWUgaW4gVCwgYW5kIFUgPDogViBpbXBsaWVzIFtWL1hdVCA8OiBbVS9YXVQuCiAgc3RhdGljIGNvbnN0IGludCBjb250cmF2YXJpYW50ID0gMjsKCiAgLy8gVXNlZCB3aGVuIHRoZXJlIGV4aXN0cyBhIHBhaXIgVSBhbmQgViBzdWNoIHRoYXQgVSA8OiBWLCBidXQgW1UvWF1UIGFuZAogIC8vIFtWL1hdVCBhcmUgaW5jb21wYXJhYmxlLgogIHN0YXRpYyBjb25zdCBpbnQgaW52YXJpYW50ID0gMzsKCiAgLy8gVmFyaWFuY2UgdmFsdWVzIGZvcm0gYSBsYXR0aWNlIHdoZXJlIFt1bnJlbGF0ZWRdIGlzIHRoZSB0b3AsIFtpbnZhcmlhbnRdCiAgLy8gaXMgdGhlIGJvdHRvbSwgYW5kIFtjb3ZhcmlhbnRdIGFuZCBbY29udHJhdmFyaWFudF0gYXJlIGluY29tcGFyYWJsZS4KICAvLyBbbWVldF0gY2FsY3VsYXRlcyB0aGUgbWVldCBvZiB0d28gZWxlbWVudHMgb2Ygc3VjaCBsYXR0aWNlLiAgSXQgY2FuIGJlCiAgLy8gdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGNhbGN1bGF0ZSB0aGUgdmFyaWFuY2Ugb2YgYSB0eXBlZGVmIHR5cGUgcGFyYW1ldGVyCiAgLy8gaWYgaXQncyBlbmNvdW50ZXJlZCBvbiB0aGUgci5oLnMuIG9mIHRoZSB0eXBlZGVmIG11bHRpcGxlIHRpbWVzLgogIHN0YXRpYyBpbnQgbWVldChpbnQgYSwgaW50IGIpID0+IGEgfCBiOwoKICAvLyBDb21iaW5lcyB2YXJpYW5jZXMgb2YgWCBpbiBUIGFuZCBZIGluIFMgaW50byB2YXJpYW5jZSBvZiBYIGluIFtZL1RdUy4KICAvLwogIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXM6CiAgLy8KICAvLyAqIHZhcmlhbmNlIG9mIFggaW4gRnVuY3Rpb24oWCkgaXMgW2NvbnRyYXZhcmlhbnRdLCB2YXJpYW5jZSBvZiBZIGluIExpc3Q8WT4KICAvLyBpcyBbY292YXJpYW50XSwgc28gdmFyaWFuY2Ugb2YgWCBpbiBMaXN0PEZ1bmN0aW9uKFgpPiBpcyBbY29udHJhdmFyaWFudF07CiAgLy8KICAvLyAqIHZhcmlhbmNlIG9mIFggaW4gTGlzdDxYPiBpcyBbY292YXJpYW50XSwgdmFyaWFuY2Ugb2YgWSBpbiBGdW5jdGlvbihZKSBpcwogIC8vIFtjb250cmF2YXJpYW50XSwgc28gdmFyaWFuY2Ugb2YgWCBpbiBGdW5jdGlvbihMaXN0PFg+KSBpcyBbY29udHJhdmFyaWFudF07CiAgLy8KICAvLyAqIHZhcmlhbmNlIG9mIFggaW4gRnVuY3Rpb24oWCkgaXMgW2NvbnRyYXZhcmlhbnRdLCB2YXJpYW5jZSBvZiBZIGluCiAgLy8gRnVuY3Rpb24oWSkgaXMgW2NvbnRyYXZhcmlhbnRdLCBzbyB2YXJpYW5jZSBvZiBYIGluIEZ1bmN0aW9uKEZ1bmN0aW9uKFgpKQogIC8vIGlzIFtjb3ZhcmlhbnRdOwogIC8vCiAgLy8gKiBsZXQgdGhlIGZvbGxvd2luZyBiZSBkZWNsYXJlZDoKICAvLwogIC8vICAgICB0eXBlZGVmIEY8Wj4gPSBGdW5jdGlvbigpOwogIC8vCiAgLy8gdGhlbiB2YXJpYW5jZSBvZiBYIGluIEY8WD4gaXMgW3VucmVsYXRlZF0sIHZhcmlhbmNlIG9mIFkgaW4gTGlzdDxZPiBpcwogIC8vIFtjb3ZhcmlhbnRdLCBzbyB2YXJpYW5jZSBvZiBYIGluIExpc3Q8RjxYPj4gaXMgW3VucmVsYXRlZF07CiAgLy8KICAvLyAqIGxldCB0aGUgZm9sbG93aW5nIGJlIGRlY2xhcmVkOgogIC8vCiAgLy8gICAgIHR5cGVkZWYgRzxaPiA9IFogRnVuY3Rpb24oWik7CiAgLy8KICAvLyB0aGVuIHZhcmlhbmNlIG9mIFggaW4gTGlzdDxYPiBpcyBbY292YXJpYW50XSwgdmFyaWFuY2Ugb2YgWSBpbiBHPFk+IGlzCiAgLy8gW2ludmFyaWFudF0sIHNvIHZhcmlhbmNlIG9mIGBYYCBpbiBgRzxMaXN0PFg+PmAgaXMgW2ludmFyaWFudF0uCiAgc3RhdGljIGludCBjb21iaW5lKGludCBhLCBpbnQgYikgewogICAgaWYgKGEgPT0gdW5yZWxhdGVkIHx8IGIgPT0gdW5yZWxhdGVkKSByZXR1cm4gdW5yZWxhdGVkOwogICAgaWYgKGEgPT0gaW52YXJpYW50IHx8IGIgPT0gaW52YXJpYW50KSByZXR1cm4gaW52YXJpYW50OwogICAgcmV0dXJuIGEgPT0gYiA/IGNvdmFyaWFudCA6IGNvbnRyYXZhcmlhbnQ7CiAgfQp9CoICAE5OPAEVCRQPEhUWFxUTFxsVEgE9ATgBQQEvAS0WJhkBUTIZATg0ATVLODAXMxoGATAtQiJAOwgGBAEpGQQCATsrOgEzAS0BIxwEASYmIAErNB0GBAEnNB0GBAEpPygvBjweBj0oBiIEATMzJAYEAgE8HzNNUBoqFQgGKlEEHTMqFQgGPkMEDwIBUDsEGmIiIDhFNC4ZI0Y8UCUIBhcEAUtGM0xMME1MBiBIMCNDBgQBNExMMDkgSDY6BgQBEQIBGjAbATolAU0gAUwCAVEwMDQoIRwsATpKSDllJixENzVFHEciJQQBHy8kJDEkJTw7TSooBjlEKigGNEgqKAZLKCYrCxEEASYBIisBMUwvJkpJKEctRihHBgE9IyIaMSYGBCEmJAQiJiUEASAjKQERRTkfLyQkMSQEFEwvJkpJKA1RLUYoDVEGBCEmJAQiJiUEEQIBUTA9JB4lQTEiNS8zBC8mSyhIUUkoSC1HKEgGAT0jIhooHQYEEQIBKx8gJCIEGgIBT04TLjQhHh4uFR9GFidPKzc9RjIlBkVPKzc9RjIlBkUlQiojJz5ETTkmBiI6PzIoLz0rBk4yLT0oBA8CAUAiPgIBPiI8AgFCESsiAUgiAUgmAUweIgFOSkxORioBSwUmBVFPBVBQBUlPFQUmBSQFTEEFJgUnBUxFJTw8LwQCASVwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydIdxLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEua2VybmVsX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbWJpbmF0b3IsCiAgICAgICAgQ29uc3RydWN0b3IsCiAgICAgICAgSW5pdGlhbGl6ZXIsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXI7CgppbXBvcnQgJy4uL2NvbWJpbmF0b3IuZGFydCcgYXMgZmFzdGE7CgpleHBvcnQgJy4uL2J1aWxkZXIvYnVpbGRlci5kYXJ0JzsKCmV4cG9ydCAnY2xhc3NfaGllcmFyY2h5X2J1aWxkZXIuZGFydCcKICAgIHNob3cgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLCBEZWxheWVkTWVtYmVyLCBEZWxheWVkT3ZlcnJpZGVDaGVjazsKCmV4cG9ydCAnaW1wbGljaXRfZmllbGRfdHlwZS5kYXJ0JyBzaG93IEltcGxpY2l0RmllbGRUeXBlOwoKZXhwb3J0ICdrZXJuZWxfdmFyaWFibGVfYnVpbGRlci5kYXJ0JyBzaG93IFZhcmlhYmxlQnVpbGRlcjsKCmV4cG9ydCAnbG9hZF9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBMb2FkTGlicmFyeUJ1aWxkZXI7CgpleHBvcnQgJ3VubGlua2VkX3Njb3BlLmRhcnQnIHNob3cgVW5saW5rZWREZWNsYXJhdGlvbjsKCmludCBjb21wYXJlUHJvY2VkdXJlcyhQcm9jZWR1cmUgYSwgUHJvY2VkdXJlIGIpIHsKICBpbnQgaSA9ICIke2EuZmlsZVVyaX0iLmNvbXBhcmVUbygiJHtiLmZpbGVVcml9Iik7CiAgaWYgKGkgIT0gMCkgcmV0dXJuIGk7CiAgcmV0dXJuIGEuZmlsZU9mZnNldC5jb21wYXJlVG8oYi5maWxlT2Zmc2V0KTsKfQoKYm9vbCBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9ySW1wbGVtZW50YXRpb24oQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICBMaXN0PEluaXRpYWxpemVyPiBpbml0aWFsaXplcnMgPSBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnM7CiAgcmV0dXJuIGluaXRpYWxpemVycy5sZW5ndGggPT0gMSAmJgogICAgICBpbml0aWFsaXplcnMuc2luZ2xlIGlzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXI7Cn0KCkxpc3Q8Q29tYmluYXRvcj4gdG9LZXJuZWxDb21iaW5hdG9ycyhMaXN0PGZhc3RhLkNvbWJpbmF0b3I+IGZhc3RhQ29tYmluYXRvcnMpIHsKICBpZiAoZmFzdGFDb21iaW5hdG9ycyA9PSBudWxsKSB7CiAgICAvLyBOb3RlOiBpdCdzIHNhZmUgdG8gcmV0dXJuIG51bGwgaGVyZSBhcyBLZXJuZWwncyBMaWJyYXJ5RGVwZW5kZW5jeSB3aWxsCiAgICAvLyBjb252ZXJ0IG51bGwgdG8gYW4gZW1wdHkgbGlzdC4KICAgIHJldHVybiBudWxsOwogIH0KCiAgTGlzdDxDb21iaW5hdG9yPiByZXN1bHQgPSBuZXcgTGlzdDxDb21iaW5hdG9yPi5maWxsZWQoCiAgICAgIGZhc3RhQ29tYmluYXRvcnMubGVuZ3RoLCBudWxsLAogICAgICBncm93YWJsZTogdHJ1ZSk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXN0YUNvbWJpbmF0b3JzLmxlbmd0aDsgaSsrKSB7CiAgICBmYXN0YS5Db21iaW5hdG9yIGNvbWJpbmF0b3IgPSBmYXN0YUNvbWJpbmF0b3JzW2ldOwogICAgTGlzdDxTdHJpbmc+IG5hbWVMaXN0ID0gY29tYmluYXRvci5uYW1lcy50b0xpc3QoKTsKICAgIHJlc3VsdFtpXSA9IGNvbWJpbmF0b3IuaXNTaG93CiAgICAgICAgPyBuZXcgQ29tYmluYXRvci5zaG93KG5hbWVMaXN0KQogICAgICAgIDogbmV3IENvbWJpbmF0b3IuaGlkZShuYW1lTGlzdCk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KPgBOTjwBHgEhCRQVFRMgASYBIgEmRQE6ATwBPAE3ATI0GC8CAVE9JTUCAVAiTiYRBAE5JRc2NzciKCkEEQIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdGFyZ2V0X2ltcGxlbWVudGF0aW9uLmRhcnSZdS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnRhcmdldF9pbXBsZW1lbnRhdGlvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgU291cmNlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0JyBhcyBiYWNrZW5kIHNob3cgVGFyZ2V0OwoKaW1wb3J0ICcuLi9iYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnQnIHNob3cgUHJvY2Vzc2VkT3B0aW9uczsKCmltcG9ydCAnYnVpbGRlci9idWlsZGVyLmRhcnQnIHNob3cgQnVpbGRlciwgQ2xhc3NCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICdtZXNzYWdlcy5kYXJ0JyBzaG93IEZvcm1hdHRlZE1lc3NhZ2UsIExvY2F0ZWRNZXNzYWdlLCBNZXNzYWdlOwoKaW1wb3J0ICdyZXdyaXRlX3NldmVyaXR5LmRhcnQnIHNob3cgcmV3cml0ZVNldmVyaXR5OwoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICd0YXJnZXQuZGFydCcgc2hvdyBUYXJnZXQ7CgppbXBvcnQgJ3RpY2tlci5kYXJ0JyBzaG93IFRpY2tlcjsKCmltcG9ydCAndXJpX3RyYW5zbGF0b3IuZGFydCcgc2hvdyBVcmlUcmFuc2xhdG9yOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JyBzaG93IEV4cGVyaW1lbnRhbEZsYWc7CgovLy8gUHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdXNlZCBieSBhIGxvYWRlciBmb3IgYSB0YXJnZXQuCmFic3RyYWN0IGNsYXNzIFRhcmdldEltcGxlbWVudGF0aW9uIGV4dGVuZHMgVGFyZ2V0IHsKICBmaW5hbCBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3I7CgogIGZpbmFsIGJhY2tlbmQuVGFyZ2V0IGJhY2tlbmRUYXJnZXQ7CgogIGZpbmFsIENvbXBpbGVyQ29udGV4dCBjb250ZXh0ID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQ7CgogIC8vLyBTaGFyZWQgd2l0aCBbQ29tcGlsZXJDb250ZXh0XS4KICBmaW5hbCBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQudXJpVG9Tb3VyY2U7CgogIEJ1aWxkZXIgY2FjaGVkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcjsKICBCdWlsZGVyIGNhY2hlZENvbXBpbGVUaW1lRXJyb3I7CiAgQnVpbGRlciBjYWNoZWREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yOwogIEJ1aWxkZXIgY2FjaGVkRmFsbFRocm91Z2hFcnJvcjsKICBCdWlsZGVyIGNhY2hlZE5hdGl2ZUFubm90YXRpb247CiAgQnVpbGRlciBjYWNoZWROYXRpdmVFeHRlbnNpb25Bbm5vdGF0aW9uOwoKICBib29sIGVuYWJsZUNvbnN0YW50VXBkYXRlMjAxODsKICBib29sIGVuYWJsZUNvbnRyb2xGbG93Q29sbGVjdGlvbnM7CiAgYm9vbCBlbmFibGVFeHRlbnNpb25NZXRob2RzOwogIGJvb2wgZW5hYmxlTm9uTnVsbGFibGU7CiAgYm9vbCBlbmFibGVTcHJlYWRDb2xsZWN0aW9uczsKICBib29sIGVuYWJsZVRyaXBsZVNoaWZ0OwoKICBUYXJnZXRJbXBsZW1lbnRhdGlvbihUaWNrZXIgdGlja2VyLCB0aGlzLnVyaVRyYW5zbGF0b3IsIHRoaXMuYmFja2VuZFRhcmdldCkKICAgICAgOiBlbmFibGVDb25zdGFudFVwZGF0ZTIwMTggPSBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zCiAgICAgICAgICAgIC5pc0V4cGVyaW1lbnRFbmFibGVkKEV4cGVyaW1lbnRhbEZsYWcuY29uc3RhbnRVcGRhdGUyMDE4KSwKICAgICAgICBlbmFibGVDb250cm9sRmxvd0NvbGxlY3Rpb25zID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucwogICAgICAgICAgICAuaXNFeHBlcmltZW50RW5hYmxlZChFeHBlcmltZW50YWxGbGFnLmNvbnRyb2xGbG93Q29sbGVjdGlvbnMpLAogICAgICAgIGVuYWJsZUV4dGVuc2lvbk1ldGhvZHMgPSBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zCiAgICAgICAgICAgIC5pc0V4cGVyaW1lbnRFbmFibGVkKEV4cGVyaW1lbnRhbEZsYWcuZXh0ZW5zaW9uTWV0aG9kcyksCiAgICAgICAgZW5hYmxlTm9uTnVsbGFibGUgPSBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zCiAgICAgICAgICAgIC5pc0V4cGVyaW1lbnRFbmFibGVkKEV4cGVyaW1lbnRhbEZsYWcubm9uTnVsbGFibGUpLAogICAgICAgIGVuYWJsZVNwcmVhZENvbGxlY3Rpb25zID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucwogICAgICAgICAgICAuaXNFeHBlcmltZW50RW5hYmxlZChFeHBlcmltZW50YWxGbGFnLnNwcmVhZENvbGxlY3Rpb25zKSwKICAgICAgICBlbmFibGVUcmlwbGVTaGlmdCA9IENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMKICAgICAgICAgICAgLmlzRXhwZXJpbWVudEVuYWJsZWQoRXhwZXJpbWVudGFsRmxhZy50cmlwbGVTaGlmdCksCiAgICAgICAgc3VwZXIodGlja2VyKTsKCiAgLy8vIENyZWF0ZXMgYSBbTGlicmFyeUJ1aWxkZXJdIGNvcnJlc3BvbmRpbmcgdG8gW3VyaV0sIGlmIG9uZSBkb2Vzbid0IGV4aXN0CiAgLy8vIGFscmVhZHkuCiAgLy8vCiAgLy8vIFtmaWxlVXJpXSBtdXN0IG5vdCBiZSBudWxsIGFuZCBpcyBhIFVSSSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gRmlsZVN5c3RlbQogIC8vLyB0byBsb2NhdGUgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZS4KICAvLy8KICAvLy8gW29yaWdpbl0gaXMgbm9uLW51bGwgaWYgdGhlIGNyZWF0ZWQgbGlicmFyeSBpcyBhIHBhdGNoIHRvIFtvcmlnaW5dLgogIExpYnJhcnlCdWlsZGVyIGNyZWF0ZUxpYnJhcnlCdWlsZGVyKAogICAgICBVcmkgdXJpLCBVcmkgZmlsZVVyaSwgY292YXJpYW50IExpYnJhcnlCdWlsZGVyIG9yaWdpbik7CgogIC8vLyBUaGUgY2xhc3MgW2Nsc10gaXMgaW52b2x2ZWQgaW4gYSBjeWNsaWMgZGVmaW5pdGlvbi4gVGhpcyBtZXRob2Qgc2hvdWxkCiAgLy8vIGVuc3VyZSB0aGF0IHRoZSBjeWNsZSBpcyBicm9rZW4sIGZvciBleGFtcGxlLCBieSByZW1vdmluZyBzdXBlcmNsYXNzIGFuZAogIC8vLyBpbXBsZW1lbnRlZCBpbnRlcmZhY2VzLgogIHZvaWQgYnJlYWtDeWNsZShDbGFzc0J1aWxkZXIgY2xzKTsKCiAgVXJpIHRyYW5zbGF0ZVVyaShVcmkgdXJpKSA9PiB1cmlUcmFuc2xhdG9yLnRyYW5zbGF0ZSh1cmkpOwoKICAvLy8gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29uc3RydWN0b3Igb2YKICAvLy8gW0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JdIGVycm9yLiAgVGhlIGNvbnN0cnVjdG9yIGlzIGV4cGVjdGVkIHRvCiAgLy8vIGFjY2VwdCBhIHNpbmdsZSBhcmd1bWVudCBvZiB0eXBlIFN0cmluZywgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlCiAgLy8vIGFic3RyYWN0IGNsYXNzLgogIEJ1aWxkZXIgZ2V0QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcihMb2FkZXIgbG9hZGVyKSB7CiAgICBpZiAoY2FjaGVkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjYWNoZWRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yOwogICAgfQogICAgcmV0dXJuIGNhY2hlZEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IgPQogICAgICAgIGxvYWRlci5jb3JlTGlicmFyeS5nZXRDb25zdHJ1Y3RvcigiQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciIpOwogIH0KCiAgLy8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIHVzZWQgZm9yIGNyZWF0aW5nIGEgY29tcGlsZS10aW1lCiAgLy8vIGVycm9yLiBUaGUgY29uc3RydWN0b3IgaXMgZXhwZWN0ZWQgdG8gYWNjZXB0IGEgc2luZ2xlIGFyZ3VtZW50IG9mIHR5cGUKICAvLy8gU3RyaW5nLCB3aGljaCBpcyB0aGUgY29tcGlsZS10aW1lIGVycm9yIG1lc3NhZ2UuCiAgQnVpbGRlciBnZXRDb21waWxlVGltZUVycm9yKExvYWRlciBsb2FkZXIpIHsKICAgIGlmIChjYWNoZWRDb21waWxlVGltZUVycm9yICE9IG51bGwpIHJldHVybiBjYWNoZWRDb21waWxlVGltZUVycm9yOwogICAgcmV0dXJuIGNhY2hlZENvbXBpbGVUaW1lRXJyb3IgPSBsb2FkZXIuY29yZUxpYnJhcnkKICAgICAgICAuZ2V0Q29uc3RydWN0b3IoIl9Db21waWxlVGltZUVycm9yIiwgYnlwYXNzTGlicmFyeVByaXZhY3k6IHRydWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIHVzZWQgZm9yIGNyZWF0aW5nIGEgcnVudGltZSBlcnJvcgogIC8vLyB3aGVuIGEgZmluYWwgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdHdpY2UuIFRoZSBjb25zdHJ1Y3RvciBpcyBleHBlY3RlZCB0bwogIC8vLyBhY2NlcHQgYSBzaW5nbGUgYXJndW1lbnQgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkLgogIEJ1aWxkZXIgZ2V0RHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcihMb2FkZXIgbG9hZGVyKSB7CiAgICBpZiAoY2FjaGVkRHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvciAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjYWNoZWREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yOwogICAgfQogICAgcmV0dXJuIGNhY2hlZER1cGxpY2F0ZWRGaWVsZEluaXRpYWxpemVyRXJyb3IgPSBsb2FkZXIuY29yZUxpYnJhcnkKICAgICAgICAuZ2V0Q29uc3RydWN0b3IoIl9EdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yIiwKICAgICAgICAgICAgYnlwYXNzTGlicmFyeVByaXZhY3k6IHRydWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIHVzZWQgZm9yIGNyZWF0aW5nIGBuYXRpdmVgCiAgLy8vIGFubm90YXRpb25zLiBUaGUgY29uc3RydWN0b3IgaXMgZXhwZWN0ZWQgdG8gYWNjZXB0IGEgc2luZ2xlIGFyZ3VtZW50IG9mCiAgLy8vIHR5cGUgU3RyaW5nLCB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgbmF0aXZlIG1ldGhvZC4KICBCdWlsZGVyIGdldE5hdGl2ZUFubm90YXRpb24oTG9hZGVyIGxvYWRlcikgewogICAgaWYgKGNhY2hlZE5hdGl2ZUFubm90YXRpb24gIT0gbnVsbCkgcmV0dXJuIGNhY2hlZE5hdGl2ZUFubm90YXRpb247CiAgICBMaWJyYXJ5QnVpbGRlciBpbnRlcm5hbCA9IGxvYWRlci5yZWFkKFVyaS5wYXJzZSgiZGFydDpfaW50ZXJuYWwiKSwgLTEsCiAgICAgICAgYWNjZXNzb3I6IGxvYWRlci5jb3JlTGlicmFyeSk7CiAgICByZXR1cm4gY2FjaGVkTmF0aXZlQW5ub3RhdGlvbiA9IGludGVybmFsLmdldENvbnN0cnVjdG9yKCJFeHRlcm5hbE5hbWUiKTsKICB9CgogIHZvaWQgbG9hZEV4dHJhUmVxdWlyZWRMaWJyYXJpZXMoTG9hZGVyIGxvYWRlcikgewogICAgZm9yIChTdHJpbmcgdXJpIGluIGJhY2tlbmRUYXJnZXQuZXh0cmFSZXF1aXJlZExpYnJhcmllcykgewogICAgICBsb2FkZXIucmVhZChVcmkucGFyc2UodXJpKSwgMCwgYWNjZXNzb3I6IGxvYWRlci5jb3JlTGlicmFyeSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFNvdXJjZUluZm9ybWF0aW9uKAogICAgICBVcmkgaW1wb3J0VXJpLCBVcmkgZmlsZVVyaSwgTGlzdDxpbnQ+IGxpbmVTdGFydHMsIExpc3Q8aW50PiBzb3VyY2VDb2RlKTsKCiAgdm9pZCByZWFkUGF0Y2hGaWxlcyhjb3ZhcmlhbnQgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkge30KCiAgRm9ybWF0dGVkTWVzc2FnZSBjcmVhdGVGb3JtYXR0ZWRNZXNzYWdlKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgbGVuZ3RoLAogICAgICBVcmkgZmlsZVVyaSwKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gbWVzc2FnZUNvbnRleHQsCiAgICAgIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICBQcm9jZXNzZWRPcHRpb25zIHByb2Nlc3NlZE9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnM7CiAgICByZXR1cm4gcHJvY2Vzc2VkT3B0aW9ucy5mb3JtYXQoCiAgICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKSwKICAgICAgICBzZXZlcml0eSwKICAgICAgICBtZXNzYWdlQ29udGV4dCk7CiAgfQoKICBTZXZlcml0eSBmaXhTZXZlcml0eShTZXZlcml0eSBzZXZlcml0eSwgTWVzc2FnZSBtZXNzYWdlLCBVcmkgZmlsZVVyaSkgewogICAgc2V2ZXJpdHkgPz89IG1lc3NhZ2UuY29kZS5zZXZlcml0eTsKICAgIGlmIChzZXZlcml0eSA9PSBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpIHsKICAgICAgc2V2ZXJpdHkgPSBiYWNrZW5kVGFyZ2V0LmxlZ2FjeU1vZGUgPyBTZXZlcml0eS53YXJuaW5nIDogU2V2ZXJpdHkuZXJyb3I7CiAgICB9CiAgICByZXR1cm4gcmV3cml0ZVNldmVyaXR5KHNldmVyaXR5LCBtZXNzYWdlLmNvZGUsIGZpbGVVcmkpOwogIH0KfQqApwBOTjwBJQEuAUQBPwFKATUBIgFHATUBJgEiASIBMQFJAUc1JQEmATsBJUwBMSIxIiIrASElHxogGgFOQ0dHS0FFPEBCRjxAFwFODwZPKAZKJz4BTU8eJQE9ATBPSBY+OTQGM04EAU5NNy9HN0oEAU9OPz45NAZGPCkEAUhOOy9HSydNBAEzP0QGBAEdTwE7ASsXFhITKxs5JDsSGQQBSigzTwY9BAIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90YXJnZXRfaW1wbGVtZW50YXRpb24uZGFydENzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZGlsbC9kaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0pPsvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5kaWxsX2xpYnJhcnlfYnVpbGRlcjsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25EZWNvZGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBMaWJyYXJ5LAogICAgICAgIExpc3RMaXRlcmFsLAogICAgICAgIE1lbWJlciwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgU3RhdGljR2V0LAogICAgICAgIFN0cmluZ0xpdGVyYWwsCiAgICAgICAgVHlwZWRlZjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBNZXNzYWdlLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLAogICAgICAgIHRlbXBsYXRlVHlwZU5vdEZvdW5kLAogICAgICAgIHRlbXBsYXRlVW5zcGVjaWZpZWQ7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgaW50ZXJuYWxQcm9ibGVtLCB1bmhhbmRsZWQsIHVuaW1wbGVtZW50ZWQ7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdyBCdWlsZGVyLCBEeW5hbWljVHlwZUJ1aWxkZXIsIEludmFsaWRUeXBlQnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIFNjb3BlOwoKaW1wb3J0ICcuLi9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnQnIHNob3cgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keTsKCmltcG9ydCAnZGlsbF9jbGFzc19idWlsZGVyLmRhcnQnIHNob3cgRGlsbENsYXNzQnVpbGRlcjsKCmltcG9ydCAnZGlsbF9tZW1iZXJfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxNZW1iZXJCdWlsZGVyOwoKaW1wb3J0ICdkaWxsX2xvYWRlci5kYXJ0JyBzaG93IERpbGxMb2FkZXI7CgppbXBvcnQgJ2RpbGxfdHlwZV9hbGlhc19idWlsZGVyLmRhcnQnIHNob3cgRGlsbFR5cGVBbGlhc0J1aWxkZXI7CgpjbGFzcyBMYXp5TGlicmFyeVNjb3BlIGV4dGVuZHMgU2NvcGUgewogIERpbGxMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5QnVpbGRlcjsKCiAgTGF6eUxpYnJhcnlTY29wZShNYXA8U3RyaW5nLCBCdWlsZGVyPiBsb2NhbCwgTWFwPFN0cmluZywgQnVpbGRlcj4gc2V0dGVycywKICAgICAgU2NvcGUgcGFyZW50LCBTdHJpbmcgZGVidWdOYW1lLAogICAgICB7Ym9vbCBpc01vZGlmaWFibGU6IHRydWV9KQogICAgICA6IHN1cGVyKGxvY2FsLCBzZXR0ZXJzLCBwYXJlbnQsIGRlYnVnTmFtZSwgaXNNb2RpZmlhYmxlOiBpc01vZGlmaWFibGUpOwoKICBMYXp5TGlicmFyeVNjb3BlLnRvcCh7Ym9vbCBpc01vZGlmaWFibGU6IGZhbHNlfSkKICAgICAgOiB0aGlzKDxTdHJpbmcsIEJ1aWxkZXI+e30sIDxTdHJpbmcsIEJ1aWxkZXI+e30sIG51bGwsICJ0b3AiLAogICAgICAgICAgICBpc01vZGlmaWFibGU6IGlzTW9kaWZpYWJsZSk7CgogIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IGdldCBsb2NhbCB7CiAgICBpZiAobGlicmFyeUJ1aWxkZXIgPT0gbnVsbCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIGxpYnJhcnkgYnVpbGRlci4iKTsKICAgIGxpYnJhcnlCdWlsZGVyLmVuc3VyZUxvYWRlZCgpOwogICAgcmV0dXJuIHN1cGVyLmxvY2FsOwogIH0KCiAgTWFwPFN0cmluZywgQnVpbGRlcj4gZ2V0IHNldHRlcnMgewogICAgaWYgKGxpYnJhcnlCdWlsZGVyID09IG51bGwpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBsaWJyYXJ5IGJ1aWxkZXIuIik7CiAgICBsaWJyYXJ5QnVpbGRlci5lbnN1cmVMb2FkZWQoKTsKICAgIHJldHVybiBzdXBlci5zZXR0ZXJzOwogIH0KfQoKY2xhc3MgRGlsbExpYnJhcnlCdWlsZGVyIGV4dGVuZHMgTGlicmFyeUJ1aWxkZXIgewogIGZpbmFsIExpYnJhcnkgbGlicmFyeTsKCiAgRGlsbExvYWRlciBsb2FkZXI7CgogIC8vLyBFeHBvcnRzIHRoYXQgY2FuJ3QgYmUgc2VyaWFsaXplZC4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnRzIG9mIHRoaXMgbWFwIGFyZSBkb2N1bWVudGVkIGluCiAgLy8vIFsuLi9rZXJuZWwva2VybmVsX2xpYnJhcnlfYnVpbGRlci5kYXJ0XS4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IHVuc2VyaWFsaXphYmxlRXhwb3J0czsKCiAgYm9vbCBleHBvcnRzQWxyZWFkeUZpbmFsaXplZCA9IGZhbHNlOwoKICAvLyBUT0RPKGplbnNqKTogVGhlc2UgNCBib29sZWFucyBjb3VsZCBwb3RlbnRpYWxseSBiZSBtZXJnZWQgaW50byBhIHNpbmdsZQogIC8vIHN0YXRlIGZpZWxkLgogIGJvb2wgaXNSZWFkeVRvQnVpbGQgPSBmYWxzZTsKICBib29sIGlzUmVhZHlUb0ZpbmFsaXplRXhwb3J0cyA9IGZhbHNlOwogIGJvb2wgaXNCdWlsdCA9IGZhbHNlOwogIGJvb2wgaXNCdWlsdEFuZE1hcmtlZCA9IGZhbHNlOwoKICBEaWxsTGlicmFyeUJ1aWxkZXIodGhpcy5saWJyYXJ5LCB0aGlzLmxvYWRlcikKICAgICAgOiBzdXBlcihsaWJyYXJ5LmZpbGVVcmksIG5ldyBMYXp5TGlicmFyeVNjb3BlLnRvcCgpLAogICAgICAgICAgICBuZXcgTGF6eUxpYnJhcnlTY29wZS50b3AoKSkgewogICAgTGF6eUxpYnJhcnlTY29wZSBsYXp5U2NvcGUgPSBzY29wZTsKICAgIGxhenlTY29wZS5saWJyYXJ5QnVpbGRlciA9IHRoaXM7CiAgICBMYXp5TGlicmFyeVNjb3BlIGxhenlFeHBvcnRTY29wZSA9IGV4cG9ydFNjb3BlOwogICAgbGF6eUV4cG9ydFNjb3BlLmxpYnJhcnlCdWlsZGVyID0gdGhpczsKICB9CgogIHZvaWQgZW5zdXJlTG9hZGVkKCkgewogICAgaWYgKCFpc1JlYWR5VG9CdWlsZCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vdCByZWFkeSB0byBidWlsZC4iKTsKICAgIGlzQnVpbHRBbmRNYXJrZWQgPSB0cnVlOwogICAgaWYgKGlzQnVpbHQpIHJldHVybjsKICAgIGlzQnVpbHQgPSB0cnVlOwogICAgbGlicmFyeS5jbGFzc2VzLmZvckVhY2goYWRkQ2xhc3MpOwogICAgbGlicmFyeS5wcm9jZWR1cmVzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgIGxpYnJhcnkudHlwZWRlZnMuZm9yRWFjaChhZGRUeXBlZGVmKTsKICAgIGxpYnJhcnkuZmllbGRzLmZvckVhY2goYWRkTWVtYmVyKTsKCiAgICBpZiAoaXNSZWFkeVRvRmluYWxpemVFeHBvcnRzKSB7CiAgICAgIGZpbmFsaXplRXhwb3J0cygpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vdCByZWFkeSB0byBmaW5hbGl6ZSBleHBvcnRzLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gbGlicmFyeS5pc1N5bnRoZXRpYzsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRMYW5ndWFnZVZlcnNpb24oaW50IG1ham9yLCBpbnQgbWlub3IsCiAgICAgIHtpbnQgb2Zmc2V0OiAwLCBpbnQgbGVuZ3RoLCBib29sIGV4cGxpY2l0fSkge30KCiAgVXJpIGdldCB1cmkgPT4gbGlicmFyeS5pbXBvcnRVcmk7CgogIFVyaSBnZXQgZmlsZVVyaSA9PiBsaWJyYXJ5LmZpbGVVcmk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiBsaWJyYXJ5Lm5hbWU7CgogIEBvdmVycmlkZQogIExpYnJhcnkgZ2V0IHRhcmdldCA9PiBsaWJyYXJ5OwoKICB2b2lkIGFkZFN5bnRoZXRpY0RlY2xhcmF0aW9uT2ZEeW5hbWljKCkgewogICAgYWRkQnVpbGRlcigKICAgICAgICAiZHluYW1pYyIsIG5ldyBEeW5hbWljVHlwZUJ1aWxkZXIoY29uc3QgRHluYW1pY1R5cGUoKSwgdGhpcywgLTEpLCAtMSk7CiAgfQoKICB2b2lkIGFkZENsYXNzKENsYXNzIGNscykgewogICAgRGlsbENsYXNzQnVpbGRlciBjbGFzc0J1bGRlciA9IG5ldyBEaWxsQ2xhc3NCdWlsZGVyKGNscywgdGhpcyk7CiAgICBhZGRCdWlsZGVyKGNscy5uYW1lLCBjbGFzc0J1bGRlciwgY2xzLmZpbGVPZmZzZXQpOwogICAgY2xzLnByb2NlZHVyZXMuZm9yRWFjaChjbGFzc0J1bGRlci5hZGRNZW1iZXIpOwogICAgY2xzLmNvbnN0cnVjdG9ycy5mb3JFYWNoKGNsYXNzQnVsZGVyLmFkZE1lbWJlcik7CiAgICBmb3IgKEZpZWxkIGZpZWxkIGluIGNscy5maWVsZHMpIHsKICAgICAgaWYgKGZpZWxkLm5hbWUubmFtZSA9PSAiX3JlZGlyZWN0aW5nIyIpIHsKICAgICAgICBMaXN0TGl0ZXJhbCBpbml0aWFsaXplciA9IGZpZWxkLmluaXRpYWxpemVyOwogICAgICAgIGZvciAoU3RhdGljR2V0IGdldCBpbiBpbml0aWFsaXplci5leHByZXNzaW9ucykgewogICAgICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keS5yZXN0b3JlRnJvbURpbGwoZ2V0LnRhcmdldCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNsYXNzQnVsZGVyLmFkZE1lbWJlcihmaWVsZCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIFN0cmluZyBuYW1lID0gbWVtYmVyLm5hbWUubmFtZTsKICAgIGlmIChuYW1lID09ICJfZXhwb3J0cyMiKSB7CiAgICAgIEZpZWxkIGZpZWxkID0gbWVtYmVyOwogICAgICBTdHJpbmdMaXRlcmFsIHN0cmluZyA9IGZpZWxkLmluaXRpYWxpemVyOwogICAgICB2YXIganNvbiA9IGpzb25EZWNvZGUoc3RyaW5nLnZhbHVlKTsKICAgICAgdW5zZXJpYWxpemFibGVFeHBvcnRzID0KICAgICAgICAgIGpzb24gIT0gbnVsbCA/IG5ldyBNYXA8U3RyaW5nLCBTdHJpbmc+LmZyb20oanNvbikgOiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgYWRkQnVpbGRlcihuYW1lLCBuZXcgRGlsbE1lbWJlckJ1aWxkZXIobWVtYmVyLCB0aGlzKSwgbWVtYmVyLmZpbGVPZmZzZXQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQnVpbGRlciBhZGRCdWlsZGVyKFN0cmluZyBuYW1lLCBCdWlsZGVyIGRlY2xhcmF0aW9uLCBpbnQgY2hhck9mZnNldCkgewogICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgYm9vbCBpc1NldHRlciA9IGRlY2xhcmF0aW9uLmlzU2V0dGVyOwogICAgaWYgKGlzU2V0dGVyKSB7CiAgICAgIHNjb3BlQnVpbGRlci5hZGRTZXR0ZXIobmFtZSwgZGVjbGFyYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgc2NvcGVCdWlsZGVyLmFkZE1lbWJlcihuYW1lLCBkZWNsYXJhdGlvbik7CiAgICB9CiAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgIGlmIChpc1NldHRlcikgewogICAgICAgIGV4cG9ydFNjb3BlQnVpbGRlci5hZGRTZXR0ZXIobmFtZSwgZGVjbGFyYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIGV4cG9ydFNjb3BlQnVpbGRlci5hZGRNZW1iZXIobmFtZSwgZGVjbGFyYXRpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgfQoKICB2b2lkIGFkZFR5cGVkZWYoVHlwZWRlZiB0eXBlZGVmKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZWRlZi50eXBlOwogICAgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlICYmIHR5cGUudHlwZWRlZlR5cGUgPT0gbnVsbCkgewogICAgICB1bmhhbmRsZWQoIm51bGwiLCAiYWRkVHlwZWRlZiIsIHR5cGVkZWYuZmlsZU9mZnNldCwgdHlwZWRlZi5maWxlVXJpKTsKICAgIH0KICAgIGFkZEJ1aWxkZXIodHlwZWRlZi5uYW1lLCBuZXcgRGlsbFR5cGVBbGlhc0J1aWxkZXIodHlwZWRlZiwgdGhpcyksCiAgICAgICAgdHlwZWRlZi5maWxlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkVG9TY29wZShTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIsIGludCBjaGFyT2Zmc2V0LCBib29sIGlzSW1wb3J0KSB7CiAgICB1bmltcGxlbWVudGVkKCJhZGRUb1Njb3BlIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGNvbXB1dGVBbWJpZ3VvdXNEZWNsYXJhdGlvbigKICAgICAgU3RyaW5nIG5hbWUsIEJ1aWxkZXIgYnVpbGRlciwgQnVpbGRlciBvdGhlciwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtib29sIGlzRXhwb3J0OiBmYWxzZSwgYm9vbCBpc0ltcG9ydDogZmFsc2V9KSB7CiAgICBpZiAoYnVpbGRlciA9PSBvdGhlcikgcmV0dXJuIGJ1aWxkZXI7CiAgICBpZiAoYnVpbGRlciBpcyBJbnZhbGlkVHlwZUJ1aWxkZXIpIHJldHVybiBidWlsZGVyOwogICAgaWYgKG90aGVyIGlzIEludmFsaWRUeXBlQnVpbGRlcikgcmV0dXJuIG90aGVyOwogICAgLy8gRm9yIGVhY2ggZW50cnkgbWFwcGluZyBrZXkgYGtgIHRvIGRlY2xhcmF0aW9uIGBkYCBpbiBgTlNgIGFuIGVudHJ5CiAgICAvLyBtYXBwaW5nIGBrYCB0byBgZGAgaXMgYWRkZWQgdG8gdGhlIGV4cG9ydGVkIG5hbWVzcGFjZSBvZiBgTGAgdW5sZXNzIGEKICAgIC8vIHRvcC1sZXZlbCBkZWNsYXJhdGlvbiB3aXRoIHRoZSBuYW1lIGBrYCBleGlzdHMgaW4gYExgLgogICAgaWYgKGJ1aWxkZXIucGFyZW50ID09IHRoaXMpIHJldHVybiBidWlsZGVyOwogICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb24ud2l0aEFyZ3VtZW50cyhuYW1lKTsKICAgIGFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbmFtZS5sZW5ndGgsIGZpbGVVcmkpOwogICAgcmV0dXJuIG5ldyBJbnZhbGlkVHlwZUJ1aWxkZXIoCiAgICAgICAgbmFtZSwgbWVzc2FnZS53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgewogICAgcmV0dXJuIGxpYnJhcnkubmFtZSA/PyAiPGxpYnJhcnkgJyR7bGlicmFyeS5maWxlVXJpfSc+IjsKICB9CgogIHZvaWQgbWFya0FzUmVhZHlUb0J1aWxkKCkgewogICAgaXNSZWFkeVRvQnVpbGQgPSB0cnVlOwogIH0KCiAgdm9pZCBtYXJrQXNSZWFkeVRvRmluYWxpemVFeHBvcnRzKCkgewogICAgaXNSZWFkeVRvRmluYWxpemVFeHBvcnRzID0gdHJ1ZTsKICB9CgogIHZvaWQgZmluYWxpemVFeHBvcnRzKCkgewogICAgaWYgKGV4cG9ydHNBbHJlYWR5RmluYWxpemVkKSByZXR1cm47CiAgICBleHBvcnRzQWxyZWFkeUZpbmFsaXplZCA9IHRydWU7CiAgICB1bnNlcmlhbGl6YWJsZUV4cG9ydHM/LmZvckVhY2goKFN0cmluZyBuYW1lLCBTdHJpbmcgbWVzc2FnZVRleHQpIHsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbjsKICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgY2FzZSAiZHluYW1pYyI6CiAgICAgICAgY2FzZSAidm9pZCI6CiAgICAgICAgICAvLyBUT0RPKGFoZSk6IEl0J3MgbGlrZWx5IHRoYXQgd2Ugc2hvdWxkbid0IGJlIGV4cG9ydGluZyB0aGVzZSB0eXBlcwogICAgICAgICAgLy8gZnJvbSBkYXJ0OmNvcmUsIGFuZCB0aGlzIGNhc2UgY2FuIGJlIHJlbW92ZWQuCiAgICAgICAgICBkZWNsYXJhdGlvbiA9IGxvYWRlci5jb3JlTGlicmFyeS5leHBvcnRTY29wZUJ1aWxkZXJbbmFtZV07CiAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG1lc3NhZ2VUZXh0ID09IG51bGwKICAgICAgICAgICAgICA/IHRlbXBsYXRlVHlwZU5vdEZvdW5kLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgICA6IHRlbXBsYXRlVW5zcGVjaWZpZWQud2l0aEFyZ3VtZW50cyhtZXNzYWdlVGV4dCk7CiAgICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIC0xLCBub0xlbmd0aCwgbnVsbCk7CiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBJbnZhbGlkVHlwZUJ1aWxkZXIobmFtZSwgbWVzc2FnZS53aXRob3V0TG9jYXRpb24oKSk7CiAgICAgIH0KICAgICAgZXhwb3J0U2NvcGVCdWlsZGVyLmFkZE1lbWJlcihuYW1lLCBkZWNsYXJhdGlvbik7CiAgICB9KTsKCiAgICBmb3IgKHZhciByZWZlcmVuY2UgaW4gbGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cykgewogICAgICB2YXIgbm9kZSA9IHJlZmVyZW5jZS5ub2RlOwogICAgICBVcmkgbGlicmFyeVVyaTsKICAgICAgU3RyaW5nIG5hbWU7CiAgICAgIGJvb2wgaXNTZXR0ZXIgPSBmYWxzZTsKICAgICAgaWYgKG5vZGUgaXMgQ2xhc3MpIHsKICAgICAgICBsaWJyYXJ5VXJpID0gbm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaTsKICAgICAgICBuYW1lID0gbm9kZS5uYW1lOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgbGlicmFyeVVyaSA9IG5vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmk7CiAgICAgICAgbmFtZSA9IG5vZGUubmFtZS5uYW1lOwogICAgICAgIGlzU2V0dGVyID0gbm9kZS5pc1NldHRlcjsKICAgICAgfSBlbHNlIGlmIChub2RlIGlzIE1lbWJlcikgewogICAgICAgIGxpYnJhcnlVcmkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpOwogICAgICAgIG5hbWUgPSBub2RlLm5hbWUubmFtZTsKICAgICAgfSBlbHNlIGlmIChub2RlIGlzIFR5cGVkZWYpIHsKICAgICAgICBsaWJyYXJ5VXJpID0gbm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaTsKICAgICAgICBuYW1lID0gbm9kZS5uYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIHVuaGFuZGxlZCgiJHtub2RlLnJ1bnRpbWVUeXBlfSIsICJmaW5hbGl6ZUV4cG9ydHMiLCAtMSwgZmlsZVVyaSk7CiAgICAgIH0KICAgICAgRGlsbExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBsb2FkZXIuYnVpbGRlcnNbbGlicmFyeVVyaV07CiAgICAgIGlmIChsaWJyYXJ5ID09IG51bGwpIHsKICAgICAgICBpbnRlcm5hbFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlVW5zcGVjaWZpZWQud2l0aEFyZ3VtZW50cygiTm8gYnVpbGRlciBmb3IgJyRsaWJyYXJ5VXJpJy4iKSwKICAgICAgICAgICAgLTEsCiAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICB9CiAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb247CiAgICAgIGlmIChpc1NldHRlcikgewogICAgICAgIGRlY2xhcmF0aW9uID0gbGlicmFyeS5leHBvcnRTY29wZS5zZXR0ZXJzW25hbWVdOwogICAgICAgIGV4cG9ydFNjb3BlQnVpbGRlci5hZGRTZXR0ZXIobmFtZSwgZGVjbGFyYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIGRlY2xhcmF0aW9uID0gbGlicmFyeS5leHBvcnRTY29wZS5sb2NhbFtuYW1lXTsKICAgICAgICBleHBvcnRTY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uKTsKICAgICAgfQogICAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCkgewogICAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVVbnNwZWNpZmllZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgIkV4cG9ydGVkIGVsZW1lbnQgJyRuYW1lJyBub3QgZm91bmQgaW4gJyRsaWJyYXJ5VXJpJy4iKSwKICAgICAgICAgICAgLTEsCiAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICB9CiAgICAgIGFzc2VydChub2RlID09IGRlY2xhcmF0aW9uLnRhcmdldCk7CiAgICB9CiAgfQp9CoEwAE5OPAEkAScBIQkPEhUPFhEVEBMTFxEBHQkREiceHQFKASdRAU4BOAE6ASsBQQEnJQFNJiFOATNEKQEjTSMYBAElTSMaBAIBMhkBFQEoBjEvLQEoAU0SHykYIQEwOyooJTQrBAEYRh0ZFCcrKicBJBkNPgYEAQwvAQwwNQEkASYBDCMBDCEBLBBPBAEdRDczNSYwNTk+Cg8mCAYEASIkHxwwKx5EDVAGBAEMSTMqFDENMQYhFjkPOQgGGAQBJSI8TAZGHQQBDFA2BAEMJ0M2KjczSk0+MEk7I0cEAQwhPQQBHhsEASglBAEbKSRHGxYYFU87RREBETA5QDNRCDcIATchFhMdGzYaJjYfIiM2HyQ2Gg9KCEAdGVAQFggbFjk5Dzc5CCEZL0kQFggqBgQCATpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0OnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9kaWxsL2RpbGxfbG9hZGVyLmRhcnSLfS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmRpbGxfbG9hZGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgQ2xhc3MsIENvbXBvbmVudCwgRGFydFR5cGUsIExpYnJhcnk7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93IFN1bW1hcnlUZW1wbGF0ZSwgVGVtcGxhdGUsIHRlbXBsYXRlRGlsbE91dGxpbmVTdW1tYXJ5OwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cgQ2xhc3NCdWlsZGVyLCBUeXBlQnVpbGRlciwgTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlX2J1aWxkZXJfY29tcHV0ZXIuZGFydCcgc2hvdyBUeXBlQnVpbGRlckNvbXB1dGVyOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKaW1wb3J0ICcuLi90YXJnZXRfaW1wbGVtZW50YXRpb24uZGFydCcgc2hvdyBUYXJnZXRJbXBsZW1lbnRhdGlvbjsKCmltcG9ydCAnZGlsbF9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ2RpbGxfdGFyZ2V0LmRhcnQnIHNob3cgRGlsbFRhcmdldDsKCmNsYXNzIERpbGxMb2FkZXIgZXh0ZW5kcyBMb2FkZXIgewogIERpbGxMb2FkZXIoVGFyZ2V0SW1wbGVtZW50YXRpb24gdGFyZ2V0KSA6IHN1cGVyKHRhcmdldCk7CgogIFRlbXBsYXRlPFN1bW1hcnlUZW1wbGF0ZT4gZ2V0IG91dGxpbmVTdW1tYXJ5VGVtcGxhdGUgPT4KICAgICAgdGVtcGxhdGVEaWxsT3V0bGluZVN1bW1hcnk7CgogIC8vLyBBcHBlbmQgY29tcGlsZWQgbGlicmFyaWVzIGZyb20gdGhlIGdpdmVuIFtjb21wb25lbnRdLiBJZiB0aGUgW2ZpbHRlcl0gaXMKICAvLy8gcHJvdmlkZWQsIGFwcGVuZCBvbmx5IGxpYnJhcmllcyB3aG9zZSBbVXJpXSBpcyBhY2NlcHRlZCBieSB0aGUgW2ZpbHRlcl0uCiAgTGlzdDxEaWxsTGlicmFyeUJ1aWxkZXI+IGFwcGVuZExpYnJhcmllcyhDb21wb25lbnQgY29tcG9uZW50LAogICAgICB7Ym9vbCBmaWx0ZXIoVXJpIHVyaSksIGludCBieXRlQ291bnQ6IDB9KSB7CiAgICBMaXN0PExpYnJhcnk+IGNvbXBvbmVudExpYnJhcmllcyA9IGNvbXBvbmVudC5saWJyYXJpZXM7CiAgICBMaXN0PFVyaT4gcmVxdWVzdGVkTGlicmFyaWVzID0gPFVyaT5bXTsKICAgIERpbGxUYXJnZXQgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBvbmVudExpYnJhcmllcy5sZW5ndGg7IGkrKykgewogICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBjb21wb25lbnRMaWJyYXJpZXNbaV07CiAgICAgIFVyaSB1cmkgPSBsaWJyYXJ5LmltcG9ydFVyaTsKICAgICAgaWYgKGZpbHRlciA9PSBudWxsIHx8IGZpbHRlcihsaWJyYXJ5LmltcG9ydFVyaSkpIHsKICAgICAgICBsaWJyYXJpZXMuYWRkKGxpYnJhcnkpOwogICAgICAgIHRhcmdldC5hZGRMaWJyYXJ5KGxpYnJhcnkpOwogICAgICAgIHJlcXVlc3RlZExpYnJhcmllcy5hZGQodXJpKTsKICAgICAgfQogICAgfQogICAgTGlzdDxEaWxsTGlicmFyeUJ1aWxkZXI+IHJlc3VsdCA9IDxEaWxsTGlicmFyeUJ1aWxkZXI+W107CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcXVlc3RlZExpYnJhcmllcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHQuYWRkKHJlYWQocmVxdWVzdGVkTGlicmFyaWVzW2ldLCAtMSkpOwogICAgfQogICAgdGFyZ2V0LnVyaVRvU291cmNlLmFkZEFsbChjb21wb25lbnQudXJpVG9Tb3VyY2UpOwogICAgdGhpcy5ieXRlQ291bnQgKz0gYnl0ZUNvdW50OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxOdWxsPiBidWlsZE91dGxpbmUoRGlsbExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIpIGFzeW5jIHsKICAgIGlmIChidWlsZGVyLmxpYnJhcnkgPT0gbnVsbCkgewogICAgICB1bmhhbmRsZWQoIm51bGwiLCAiYnVpbGRlci5saWJyYXJ5IiwgMCwgYnVpbGRlci5maWxlVXJpKTsKICAgIH0KICAgIGJ1aWxkZXIubWFya0FzUmVhZHlUb0J1aWxkKCk7CiAgfQoKICBGdXR1cmU8TnVsbD4gYnVpbGRCb2R5KERpbGxMaWJyYXJ5QnVpbGRlciBidWlsZGVyKSB7CiAgICByZXR1cm4gYnVpbGRPdXRsaW5lKGJ1aWxkZXIpOwogIH0KCiAgdm9pZCBmaW5hbGl6ZUV4cG9ydHMoKSB7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBidWlsZGVyKSB7CiAgICAgIERpbGxMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gYnVpbGRlcjsKICAgICAgbGlicmFyeS5tYXJrQXNSZWFkeVRvRmluYWxpemVFeHBvcnRzKCk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzQnVpbGRlciBjb21wdXRlQ2xhc3NCdWlsZGVyRnJvbVRhcmdldENsYXNzKENsYXNzIGNscykgewogICAgTGlicmFyeSBrZXJuZWxMaWJyYXJ5ID0gY2xzLmVuY2xvc2luZ0xpYnJhcnk7CiAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gYnVpbGRlcnNba2VybmVsTGlicmFyeS5pbXBvcnRVcmldOwogICAgcmV0dXJuIGxpYnJhcnkubG9va3VwTG9jYWxNZW1iZXIoY2xzLm5hbWUsIHJlcXVpcmVkOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVCdWlsZGVyIGNvbXB1dGVUeXBlQnVpbGRlcihEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gdHlwZS5hY2NlcHQobmV3IFR5cGVCdWlsZGVyQ29tcHV0ZXIodGhpcykpOwogIH0KfQpbAE5OPAEbASEBSwEdQAEnNAFIASUBKgFCATwBKwEiOwE6IgFPT0AyPCwlOi8jOSAkJQgGPjozBjYhEwQBQCNABiIEATciBAEbOSwuCAQBDD8yQEAEAQwyNwQCATFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX2xvYWRlci5kYXJ0QnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydIo3Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGlsbF9tZW1iZXJfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IENvbnN0cnVjdG9yLCBGaWVsZCwgTWVtYmVyLCBQcm9jZWR1cmUsIFByb2NlZHVyZUtpbmQ7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9ySW1wbGVtZW50YXRpb247CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnCiAgICBzaG93IGFic3RyYWN0TWFzaywgY29uc3RNYXNrLCBleHRlcm5hbE1hc2ssIGZpbmFsTWFzaywgbGF0ZU1hc2ssIHN0YXRpY01hc2s7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKY2xhc3MgRGlsbE1lbWJlckJ1aWxkZXIgZXh0ZW5kcyBNZW1iZXJCdWlsZGVyIHsKICBmaW5hbCBpbnQgbW9kaWZpZXJzOwoKICBmaW5hbCBNZW1iZXIgbWVtYmVyOwoKICBEaWxsTWVtYmVyQnVpbGRlcihNZW1iZXIgbWVtYmVyLCBCdWlsZGVyIHBhcmVudCkKICAgICAgOiBtb2RpZmllcnMgPSBjb21wdXRlTW9kaWZpZXJzKG1lbWJlciksCiAgICAgICAgbWVtYmVyID0gbWVtYmVyLAogICAgICAgIHN1cGVyKHBhcmVudCwgbWVtYmVyLmZpbGVPZmZzZXQpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRGlsbE1lbWJlckJ1aWxkZXIiOwoKICBNZW1iZXIgZ2V0IHRhcmdldCA9PiBtZW1iZXI7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBtZW1iZXIubmFtZS5uYW1lOwoKICBib29sIGdldCBpc0NvbnN0cnVjdG9yID0+IG1lbWJlciBpcyBDb25zdHJ1Y3RvcjsKCiAgUHJvY2VkdXJlS2luZCBnZXQga2luZCB7CiAgICBmaW5hbCBtZW1iZXIgPSB0aGlzLm1lbWJlcjsKICAgIHJldHVybiBtZW1iZXIgaXMgUHJvY2VkdXJlID8gbWVtYmVyLmtpbmQgOiBudWxsOwogIH0KCiAgYm9vbCBnZXQgaXNSZWd1bGFyTWV0aG9kID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLk1ldGhvZCwga2luZCk7CgogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLkdldHRlciwga2luZCk7CgogIGJvb2wgZ2V0IGlzU2V0dGVyID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLlNldHRlciwga2luZCk7CgogIGJvb2wgZ2V0IGlzT3BlcmF0b3IgPT4gaWRlbnRpY2FsKFByb2NlZHVyZUtpbmQuT3BlcmF0b3IsIGtpbmQpOwoKICBib29sIGdldCBpc0ZhY3RvcnkgPT4gaWRlbnRpY2FsKFByb2NlZHVyZUtpbmQuRmFjdG9yeSwga2luZCk7CgogIGJvb2wgZ2V0IGlzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3IgewogICAgcmV0dXJuIGlzQ29uc3RydWN0b3IgJiYKICAgICAgICBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9ySW1wbGVtZW50YXRpb24obWVtYmVyKTsKICB9CgogIGJvb2wgZ2V0IGlzU3ludGhldGljIHsKICAgIGZpbmFsIE1lbWJlciBtZW1iZXIgPSB0aGlzLm1lbWJlcjsKICAgIHJldHVybiBtZW1iZXIgaXMgQ29uc3RydWN0b3IgJiYgbWVtYmVyLmlzU3ludGhldGljOwogIH0KCiAgYm9vbCBnZXQgaXNGaWVsZCA9PiBtZW1iZXIgaXMgRmllbGQ7Cn0KCmludCBjb21wdXRlTW9kaWZpZXJzKE1lbWJlciBtZW1iZXIpIHsKICBpbnQgbW9kaWZpZXIgPSBtZW1iZXIuaXNBYnN0cmFjdCA/IGFic3RyYWN0TWFzayA6IDA7CiAgbW9kaWZpZXIgfD0gbWVtYmVyLmlzRXh0ZXJuYWwgPyBleHRlcm5hbE1hc2sgOiAwOwogIGlmIChtZW1iZXIgaXMgRmllbGQpIHsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc0NvbnN0ID8gY29uc3RNYXNrIDogMDsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc0ZpbmFsID8gZmluYWxNYXNrIDogMDsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc0xhdGUgPyBsYXRlTWFzayA6IDA7CiAgICBtb2RpZmllciB8PSBtZW1iZXIuaXNTdGF0aWMgPyBzdGF0aWNNYXNrIDogMDsKICB9IGVsc2UgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc0NvbnN0ID8gY29uc3RNYXNrIDogMDsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc1N0YXRpYyA/IHN0YXRpY01hc2sgOiAwOwogIH0gZWxzZSBpZiAobWVtYmVyIGlzIENvbnN0cnVjdG9yKSB7CiAgICBtb2RpZmllciB8PSBtZW1iZXIuaXNDb25zdCA/IGNvbnN0TWFzayA6IDA7CiAgfSBlbHNlIHsKICAgIGR5bmFtaWMgcGFyZW50ID0gbWVtYmVyLnBhcmVudDsKICAgIHVuaGFuZGxlZCgiJHttZW1iZXIucnVudGltZVR5cGV9IiwgImNvbXB1dGVNb2RpZmllcnMiLCBtZW1iZXIuZmlsZU9mZnNldCwKICAgICAgICBVcmkuYmFzZS5yZXNvbHZlKHBhcmVudC5maWxlVXJpKSk7CiAgfQogIHJldHVybiBtb2RpZmllcjsKfQpYAE5OPAEjASE/AScJERc6ARpRASoBMBcBFwEzLhkqAS8BHwEnATMBGyA1BAFFAT4BPgFCAUABMBxCBAEZJzgEAScCASY3NBkwMC4yJDAyJjALJE4rBBMCATlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX21lbWJlcl9idWlsZGVyLmRhcnQvc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3Njb3BlLmRhcnS3GC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjb3BlOwoKaW1wb3J0ICdidWlsZGVyL2J1aWxkZXIuZGFydCcgc2hvdyBCdWlsZGVyLCBOYW1lSXRlcmF0b3IsIFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgppbXBvcnQgJ2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtRXh0ZW5kaW5nVW5tb2RpZmlhYmxlU2NvcGUsCiAgICAgICAgdGVtcGxhdGVBY2Nlc3NFcnJvciwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZTsKCmltcG9ydCAncHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuc3VwcG9ydGVkOwoKY2xhc3MgTXV0YWJsZVNjb3BlIHsKICAvLy8gTmFtZXMgZGVjbGFyZWQgaW4gdGhpcyBzY29wZS4KICBNYXA8U3RyaW5nLCBCdWlsZGVyPiBsb2NhbDsKCiAgLy8vIFNldHRlcnMgZGVjbGFyZWQgaW4gdGhpcyBzY29wZS4KICBNYXA8U3RyaW5nLCBCdWlsZGVyPiBzZXR0ZXJzOwoKICAvLy8gVGhlIHNjb3BlIHRoYXQgdGhpcyBzY29wZSBpcyBuZXN0ZWQgd2l0aGluLCBvciBgbnVsbGAgaWYgdGhpcyBpcyB0aGUgdG9wCiAgLy8vIGxldmVsIHNjb3BlLgogIFNjb3BlIHBhcmVudDsKCiAgZmluYWwgU3RyaW5nIGNsYXNzTmFtZU9yRGVidWdOYW1lOwoKICBNdXRhYmxlU2NvcGUoCiAgICAgIHRoaXMubG9jYWwsIHRoaXMuc2V0dGVycywgdGhpcy5wYXJlbnQsIHRoaXMuY2xhc3NOYW1lT3JEZWJ1Z05hbWUpIHsKICAgIGFzc2VydChjbGFzc05hbWVPckRlYnVnTmFtZSAhPSBudWxsKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJTY29wZSgkY2xhc3NOYW1lT3JEZWJ1Z05hbWUsICR7bG9jYWwua2V5c30pIjsKfQoKY2xhc3MgU2NvcGUgZXh0ZW5kcyBNdXRhYmxlU2NvcGUgewogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciBhbiBhdHRlbXB0IHRvIGRlY2xhcmUgbmV3IG5hbWVzIGluIHRoaXMgc2NvcGUgc2hvdWxkCiAgLy8vIHN1Y2NlZWQuCiAgZmluYWwgYm9vbCBpc01vZGlmaWFibGU7CgogIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IGxhYmVsczsKCiAgTWFwPFN0cmluZywgQnVpbGRlcj4gZm9yd2FyZERlY2xhcmVkTGFiZWxzOwoKICBNYXA8U3RyaW5nLCBpbnQ+IHVzZWROYW1lczsKCiAgU2NvcGUoTWFwPFN0cmluZywgQnVpbGRlcj4gbG9jYWwsIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IHNldHRlcnMsIFNjb3BlIHBhcmVudCwKICAgICAgU3RyaW5nIGRlYnVnTmFtZSwge3RoaXMuaXNNb2RpZmlhYmxlOiB0cnVlfSkKICAgICAgOiBzdXBlcihsb2NhbCwgc2V0dGVycyA9IHNldHRlcnMgPz8gY29uc3QgPFN0cmluZywgQnVpbGRlcj57fSwgcGFyZW50LAogICAgICAgICAgICBkZWJ1Z05hbWUpOwoKICBTY29wZS50b3Aoe2Jvb2wgaXNNb2RpZmlhYmxlOiBmYWxzZX0pCiAgICAgIDogdGhpcyg8U3RyaW5nLCBCdWlsZGVyPnt9LCA8U3RyaW5nLCBCdWlsZGVyPnt9LCBudWxsLCAidG9wIiwKICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBpc01vZGlmaWFibGUpOwoKICBTY29wZS5pbW11dGFibGUoKQogICAgICA6IHRoaXMoY29uc3QgPFN0cmluZywgQnVpbGRlcj57fSwgY29uc3QgPFN0cmluZywgQnVpbGRlcj57fSwgbnVsbCwKICAgICAgICAgICAgImltbXV0YWJsZSIsCiAgICAgICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpOwoKICBTY29wZS5uZXN0ZWQoU2NvcGUgcGFyZW50LCBTdHJpbmcgZGVidWdOYW1lLCB7Ym9vbCBpc01vZGlmaWFibGU6IHRydWV9KQogICAgICA6IHRoaXMoPFN0cmluZywgQnVpbGRlcj57fSwgPFN0cmluZywgQnVpbGRlcj57fSwgcGFyZW50LCBkZWJ1Z05hbWUsCiAgICAgICAgICAgIGlzTW9kaWZpYWJsZTogaXNNb2RpZmlhYmxlKTsKCiAgSXRlcmF0b3I8QnVpbGRlcj4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgU2NvcGVMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3IodGhpcyk7CiAgfQoKICBOYW1lSXRlcmF0b3IgZ2V0IG5hbWVJdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IFNjb3BlTG9jYWxEZWNsYXJhdGlvbk5hbWVJdGVyYXRvcih0aGlzKTsKICB9CgogIFNjb3BlIGNvcHlXaXRoUGFyZW50KFNjb3BlIHBhcmVudCwgU3RyaW5nIGRlYnVnTmFtZSkgewogICAgcmV0dXJuIG5ldyBTY29wZShzdXBlci5sb2NhbCwgc3VwZXIuc2V0dGVycywgcGFyZW50LCBkZWJ1Z05hbWUsCiAgICAgICAgaXNNb2RpZmlhYmxlOiBpc01vZGlmaWFibGUpOwogIH0KCiAgLy8vIERvbid0IHVzZSB0aGlzLiBVc2UgW2JlY29tZVBhcnRPZl0gaW5zdGVhZC4KICB2b2lkIHNldCBsb2NhbChfKSA9PiB1bnN1cHBvcnRlZCgibG9jYWw9IiwgLTEsIG51bGwpOwoKICAvLy8gRG9uJ3QgdXNlIHRoaXMuIFVzZSBbYmVjb21lUGFydE9mXSBpbnN0ZWFkLgogIHZvaWQgc2V0IHNldHRlcnMoXykgPT4gdW5zdXBwb3J0ZWQoInNldHRlcnM9IiwgLTEsIG51bGwpOwoKICAvLy8gRG9uJ3QgdXNlIHRoaXMuIFVzZSBbYmVjb21lUGFydE9mXSBpbnN0ZWFkLgogIHZvaWQgc2V0IHBhcmVudChfKSA9PiB1bnN1cHBvcnRlZCgicGFyZW50PSIsIC0xLCBudWxsKTsKCiAgLy8vIFRoaXMgc2NvcGUgYmVjb21lcyBlcXVpdmFsZW50IHRvIFtzY29wZV0uIFRoaXMgaXMgdXNlZCBmb3IgcGFydHMgdG8KICAvLy8gYmVjb21lIHBhcnQgb2YgdGhlaXIgbGlicmFyeSdzIHNjb3BlLgogIHZvaWQgYmVjb21lUGFydE9mKFNjb3BlIHNjb3BlKSB7CiAgICBhc3NlcnQocGFyZW50LnBhcmVudCA9PSBudWxsKTsKICAgIGFzc2VydChzY29wZS5wYXJlbnQucGFyZW50ID09IG51bGwpOwogICAgc3VwZXIubG9jYWwgPSBzY29wZS5sb2NhbDsKICAgIHN1cGVyLnNldHRlcnMgPSBzY29wZS5zZXR0ZXJzOwogICAgc3VwZXIucGFyZW50ID0gc2NvcGUucGFyZW50OwogIH0KCiAgU2NvcGUgY3JlYXRlTmVzdGVkU2NvcGUoU3RyaW5nIGRlYnVnTmFtZSwge2Jvb2wgaXNNb2RpZmlhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBTY29wZS5uZXN0ZWQodGhpcywgZGVidWdOYW1lLCBpc01vZGlmaWFibGU6IGlzTW9kaWZpYWJsZSk7CiAgfQoKICBTY29wZSB3aXRoVHlwZVZhcmlhYmxlcyhMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMpIHsKICAgIGlmICh0eXBlVmFyaWFibGVzID09IG51bGwpIHJldHVybiB0aGlzOwogICAgU2NvcGUgbmV3U2NvcGUgPQogICAgICAgIG5ldyBTY29wZS5uZXN0ZWQodGhpcywgInR5cGUgdmFyaWFibGVzIiwgaXNNb2RpZmlhYmxlOiBmYWxzZSk7CiAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdCBpbiB0eXBlVmFyaWFibGVzKSB7CiAgICAgIG5ld1Njb3BlLmxvY2FsW3QubmFtZV0gPSB0OwogICAgfQogICAgcmV0dXJuIG5ld1Njb3BlOwogIH0KCiAgLy8vIENyZWF0ZSBhIHNwZWNpYWwgc2NvcGUgZm9yIHVzZSBieSBsYWJlbGVkIHN0YXRlbWVudHMuIFRoaXMgc2NvcGUgZG9lc24ndAogIC8vLyBpbnRyb2R1Y2UgYSBuZXcgc2NvcGUgZm9yIGxvY2FsIHZhcmlhYmxlcywgb25seSBmb3IgbGFiZWxzLiBUaGlzIGRlYWxzCiAgLy8vIHdpdGggY29ybmVyIGNhc2VzIGxpa2UgdGhpczoKICAvLy8KICAvLy8gICAgIEw6IHZhciB4OwogIC8vLyAgICAgeCA9IDQyOwogIC8vLyAgICAgcHJpbnQoIlRoZSBhbnN3ZXIgaXMgJHguIik7CiAgU2NvcGUgY3JlYXRlTmVzdGVkTGFiZWxTY29wZSgpIHsKICAgIHJldHVybiBuZXcgU2NvcGUobG9jYWwsIHNldHRlcnMsIHBhcmVudCwgImxhYmVsIiwgaXNNb2RpZmlhYmxlOiB0cnVlKTsKICB9CgogIHZvaWQgcmVjb3JkVXNlKFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIGlmIChpc01vZGlmaWFibGUpIHsKICAgICAgdXNlZE5hbWVzID8/PSA8U3RyaW5nLCBpbnQ+e307CiAgICAgIHVzZWROYW1lcy5wdXRJZkFic2VudChuYW1lLCAoKSA9PiBjaGFyT2Zmc2V0KTsKICAgIH0KICB9CgogIEJ1aWxkZXIgbG9va3VwSW4oU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSwKICAgICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbWFwLCBib29sIGlzSW5zdGFuY2VTY29wZSkgewogICAgQnVpbGRlciBidWlsZGVyID0gbWFwW25hbWVdOwogICAgaWYgKGJ1aWxkZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoYnVpbGRlci5uZXh0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBBbWJpZ3VvdXNCdWlsZGVyKG5hbWUuaXNFbXB0eSA/IGNsYXNzTmFtZU9yRGVidWdOYW1lIDogbmFtZSwKICAgICAgICAgIGJ1aWxkZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfSBlbHNlIGlmICghaXNJbnN0YW5jZVNjb3BlICYmIGJ1aWxkZXIuaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJ1aWxkZXI7CiAgICB9CiAgfQoKICBCdWlsZGVyIGxvb2t1cChTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpc0luc3RhbmNlU2NvcGU6IHRydWV9KSB7CiAgICByZWNvcmRVc2UobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICBCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIGxvb2t1cEluKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGxvY2FsLCBpc0luc3RhbmNlU2NvcGUpOwogICAgaWYgKGJ1aWxkZXIgIT0gbnVsbCkgcmV0dXJuIGJ1aWxkZXI7CiAgICBidWlsZGVyID0gbG9va3VwSW4obmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgc2V0dGVycywgaXNJbnN0YW5jZVNjb3BlKTsKICAgIGlmIChidWlsZGVyICE9IG51bGwgJiYgIWJ1aWxkZXIuaGFzUHJvYmxlbSkgewogICAgICByZXR1cm4gbmV3IEFjY2Vzc0Vycm9yQnVpbGRlcihuYW1lLCBidWlsZGVyLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICAgIGlmICghaXNJbnN0YW5jZVNjb3BlKSB7CiAgICAgIC8vIEZvciBzdGF0aWMgbG9va3VwLCBkbyBub3Qgc2VhcmNoIHRoZSBwYXJlbnQgc2NvcGUuCiAgICAgIHJldHVybiBidWlsZGVyOwogICAgfQogICAgcmV0dXJuIGJ1aWxkZXIgPz8gcGFyZW50Py5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICBCdWlsZGVyIGxvb2t1cFNldHRlcihTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpc0luc3RhbmNlU2NvcGU6IHRydWV9KSB7CiAgICByZWNvcmRVc2UobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICBCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIGxvb2t1cEluKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIHNldHRlcnMsIGlzSW5zdGFuY2VTY29wZSk7CiAgICBpZiAoYnVpbGRlciAhPSBudWxsKSByZXR1cm4gYnVpbGRlcjsKICAgIGJ1aWxkZXIgPSBsb29rdXBJbihuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBsb2NhbCwgaXNJbnN0YW5jZVNjb3BlKTsKICAgIGlmIChidWlsZGVyICE9IG51bGwgJiYgIWJ1aWxkZXIuaGFzUHJvYmxlbSkgewogICAgICByZXR1cm4gbmV3IEFjY2Vzc0Vycm9yQnVpbGRlcihuYW1lLCBidWlsZGVyLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICAgIGlmICghaXNJbnN0YW5jZVNjb3BlKSB7CiAgICAgIC8vIEZvciBzdGF0aWMgbG9va3VwLCBkbyBub3Qgc2VhcmNoIHRoZSBwYXJlbnQgc2NvcGUuCiAgICAgIHJldHVybiBidWlsZGVyOwogICAgfQogICAgcmV0dXJuIGJ1aWxkZXIgPz8gcGFyZW50Py5sb29rdXBTZXR0ZXIobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICBib29sIGhhc0xvY2FsTGFiZWwoU3RyaW5nIG5hbWUpID0+IGxhYmVscyAhPSBudWxsICYmIGxhYmVscy5jb250YWluc0tleShuYW1lKTsKCiAgdm9pZCBkZWNsYXJlTGFiZWwoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgdGFyZ2V0KSB7CiAgICBpZiAoaXNNb2RpZmlhYmxlKSB7CiAgICAgIGxhYmVscyA/Pz0gPFN0cmluZywgQnVpbGRlcj57fTsKICAgICAgbGFiZWxzW25hbWVdID0gdGFyZ2V0OwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlLCAtMSwgbnVsbCk7CiAgICB9CiAgfQoKICB2b2lkIGZvcndhcmREZWNsYXJlTGFiZWwoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgdGFyZ2V0KSB7CiAgICBkZWNsYXJlTGFiZWwobmFtZSwgdGFyZ2V0KTsKICAgIGZvcndhcmREZWNsYXJlZExhYmVscyA/Pz0gPFN0cmluZywgQnVpbGRlcj57fTsKICAgIGZvcndhcmREZWNsYXJlZExhYmVsc1tuYW1lXSA9IHRhcmdldDsKICB9CgogIGJvb2wgY2xhaW1MYWJlbChTdHJpbmcgbmFtZSkgewogICAgaWYgKGZvcndhcmREZWNsYXJlZExhYmVscyA9PSBudWxsIHx8CiAgICAgICAgZm9yd2FyZERlY2xhcmVkTGFiZWxzLnJlbW92ZShuYW1lKSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZm9yd2FyZERlY2xhcmVkTGFiZWxzLmxlbmd0aCA9PSAwKSB7CiAgICAgIGZvcndhcmREZWNsYXJlZExhYmVscyA9IG51bGw7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IGdldCB1bmNsYWltZWRGb3J3YXJkRGVjbGFyYXRpb25zIHsKICAgIHJldHVybiBmb3J3YXJkRGVjbGFyZWRMYWJlbHM7CiAgfQoKICBCdWlsZGVyIGxvb2t1cExhYmVsKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gKGxhYmVscyA9PSBudWxsID8gbnVsbCA6IGxhYmVsc1tuYW1lXSkgPz8gcGFyZW50Py5sb29rdXBMYWJlbChuYW1lKTsKICB9CgogIC8vLyBEZWNsYXJlcyB0aGF0IHRoZSBtZWFuaW5nIG9mIFtuYW1lXSBpbiB0aGlzIHNjb3BlIGlzIFtidWlsZGVyXS4KICAvLy8KICAvLy8gSWYgbmFtZSB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoaXMgc2NvcGUsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBtZXNzYWdlCiAgLy8vIHRoYXQgY2FuIGJlIHVzZWQgYXMgY29udGV4dCBmb3IgcmVwb3J0aW5nIGEgY29tcGlsZS10aW1lIGVycm9yIGFib3V0CiAgLy8vIFtuYW1lXSBiZWluZyB1c2VkIGJlZm9yZSBpdHMgZGVjbGFyZWQuIFtmaWxlVXJpXSBpcyB1c2VkIHRvIGJpbmQgdGhlCiAgLy8vIGxvY2F0aW9uIG9mIHRoaXMgbWVzc2FnZS4KICBMb2NhdGVkTWVzc2FnZSBkZWNsYXJlKFN0cmluZyBuYW1lLCBCdWlsZGVyIGJ1aWxkZXIsIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAoaXNNb2RpZmlhYmxlKSB7CiAgICAgIGlmICh1c2VkTmFtZXM/LmNvbnRhaW5zS2V5KG5hbWUpID8/IGZhbHNlKSB7CiAgICAgICAgcmV0dXJuIHRlbXBsYXRlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgIC53aXRoTG9jYXRpb24oZmlsZVVyaSwgdXNlZE5hbWVzW25hbWVdLCBuYW1lLmxlbmd0aCk7CiAgICAgIH0KICAgICAgbG9jYWxbbmFtZV0gPSBidWlsZGVyOwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlLCAtMSwgbnVsbCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgbWVyZ2UoCiAgICAgIFNjb3BlIHNjb3BlLAogICAgICBCdWlsZGVyIGNvbXB1dGVBbWJpZ3VvdXNEZWNsYXJhdGlvbigKICAgICAgICAgIFN0cmluZyBuYW1lLCBCdWlsZGVyIGV4aXN0aW5nLCBCdWlsZGVyIG1lbWJlcikpIHsKICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IG1hcCA9IGxvY2FsOwoKICAgIHZvaWQgbWVyZ2VNZW1iZXIoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBtYXBbbmFtZV07CiAgICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgICAgaWYgKGV4aXN0aW5nICE9IG1lbWJlcikgewogICAgICAgICAgbWVtYmVyID0gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKG5hbWUsIGV4aXN0aW5nLCBtZW1iZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICBtYXBbbmFtZV0gPSBtZW1iZXI7CiAgICB9CgogICAgc2NvcGUubG9jYWwuZm9yRWFjaChtZXJnZU1lbWJlcik7CiAgICBtYXAgPSBzZXR0ZXJzOwogICAgc2NvcGUuc2V0dGVycy5mb3JFYWNoKG1lcmdlTWVtYmVyKTsKICB9CgogIHZvaWQgZm9yRWFjaChmKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikpIHsKICAgIGxvY2FsLmZvckVhY2goZik7CiAgICBzZXR0ZXJzLmZvckVhY2goZik7CiAgfQoKICBTdHJpbmcgZ2V0IGRlYnVnU3RyaW5nIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgbmVzdGluZ0xldmVsID0gd3JpdGVPbihidWZmZXIpOwogICAgZm9yIChpbnQgaSA9IG5lc3RpbmdMZXZlbDsgaSA+PSAwOyBpLS0pIHsKICAgICAgYnVmZmVyLndyaXRlbG4oIiR7JyAgJyAqIGl9fSIpOwogICAgfQogICAgcmV0dXJuICIkYnVmZmVyIjsKICB9CgogIGludCB3cml0ZU9uKFN0cmluZ1Npbmsgc2luaykgewogICAgaW50IG5lc3RpbmdMZXZlbCA9IChwYXJlbnQ/LndyaXRlT24oc2luaykgPz8gLTEpICsgMTsKICAgIFN0cmluZyBpbmRlbnQgPSAiICAiICogbmVzdGluZ0xldmVsOwogICAgc2luay53cml0ZWxuKCIkaW5kZW50eyIpOwogICAgbG9jYWwuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgIHNpbmsud3JpdGVsbigiJGluZGVudCAgJG5hbWUiKTsKICAgIH0pOwogICAgc2V0dGVycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIpIHsKICAgICAgc2luay53cml0ZWxuKCIkaW5kZW50ICAkbmFtZT0iKTsKICAgIH0pOwogICAgcmV0dXJuIG5lc3RpbmdMZXZlbDsKICB9CgogIFNjb3BlIGNvbXB1dGVNaXhpblNjb3BlKCkgewogICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gdGhpcy5sb2NhbC5rZXlzLnRvTGlzdCgpOwogICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbG9jYWwgPSA8U3RyaW5nLCBCdWlsZGVyPnt9OwogICAgYm9vbCBuZWVkc0NvcHkgPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgU3RyaW5nIG5hbWUgPSBuYW1lc1tpXTsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IHRoaXMubG9jYWxbbmFtZV07CiAgICAgIGlmIChkZWNsYXJhdGlvbi5pc1N0YXRpYykgewogICAgICAgIG5lZWRzQ29weSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9jYWxbbmFtZV0gPSBkZWNsYXJhdGlvbjsKICAgICAgfQogICAgfQogICAgbmFtZXMgPSB0aGlzLnNldHRlcnMua2V5cy50b0xpc3QoKTsKICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IHNldHRlcnMgPSA8U3RyaW5nLCBCdWlsZGVyPnt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewogICAgICBTdHJpbmcgbmFtZSA9IG5hbWVzW2ldOwogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gdGhpcy5zZXR0ZXJzW25hbWVdOwogICAgICBpZiAoZGVjbGFyYXRpb24uaXNTdGF0aWMpIHsKICAgICAgICBuZWVkc0NvcHkgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHNldHRlcnNbbmFtZV0gPSBkZWNsYXJhdGlvbjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5lZWRzQ29weQogICAgICAgID8gbmV3IFNjb3BlKGxvY2FsLCBzZXR0ZXJzLCBwYXJlbnQsIGNsYXNzTmFtZU9yRGVidWdOYW1lLAogICAgICAgICAgICBpc01vZGlmaWFibGU6IGlzTW9kaWZpYWJsZSkKICAgICAgICA6IHRoaXM7CiAgfQp9CgpjbGFzcyBTY29wZUJ1aWxkZXIgewogIGZpbmFsIFNjb3BlIHNjb3BlOwoKICBTY29wZUJ1aWxkZXIodGhpcy5zY29wZSk7CgogIHZvaWQgYWRkTWVtYmVyKFN0cmluZyBuYW1lLCBCdWlsZGVyIGJ1aWxkZXIpIHsKICAgIHNjb3BlLmxvY2FsW25hbWVdID0gYnVpbGRlcjsKICB9CgogIHZvaWQgYWRkU2V0dGVyKFN0cmluZyBuYW1lLCBCdWlsZGVyIGJ1aWxkZXIpIHsKICAgIHNjb3BlLnNldHRlcnNbbmFtZV0gPSBidWlsZGVyOwogIH0KCiAgQnVpbGRlciBvcGVyYXRvciBbXShTdHJpbmcgbmFtZSkgPT4gc2NvcGUubG9jYWxbbmFtZV07Cn0KCmFic3RyYWN0IGNsYXNzIFByb2JsZW1CdWlsZGVyIGV4dGVuZHMgQnVpbGRlciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIGZpbmFsIEJ1aWxkZXIgYnVpbGRlcjsKCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBQcm9ibGVtQnVpbGRlcih0aGlzLm5hbWUsIHRoaXMuYnVpbGRlciwgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmZpbGVVcmkpOwoKICBnZXQgdGFyZ2V0ID0+IG51bGw7CgogIGJvb2wgZ2V0IGhhc1Byb2JsZW0gPT4gdHJ1ZTsKCiAgTWVzc2FnZSBnZXQgbWVzc2FnZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiBuYW1lOwp9CgovLy8gUmVwcmVzZW50cyBhIFtidWlsZGVyXSB0aGF0J3MgYmVpbmcgYWNjZXNzZWQgaW5jb3JyZWN0bHkuIEZvciBleGFtcGxlLCBhbgovLy8gYXR0ZW1wdCB0byB3cml0ZSB0byBhIGZpbmFsIGZpZWxkLCBvciB0byByZWFkIGZyb20gYSBzZXR0ZXIuCmNsYXNzIEFjY2Vzc0Vycm9yQnVpbGRlciBleHRlbmRzIFByb2JsZW1CdWlsZGVyIHsKICBBY2Nlc3NFcnJvckJ1aWxkZXIoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgYnVpbGRlciwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKQogICAgICA6IHN1cGVyKG5hbWUsIGJ1aWxkZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGdldCBwYXJlbnQgPT4gYnVpbGRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiBidWlsZGVyLmlzRmluYWw7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRmllbGQgPT4gYnVpbGRlci5pc0ZpZWxkOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1JlZ3VsYXJNZXRob2QgPT4gYnVpbGRlci5pc1JlZ3VsYXJNZXRob2Q7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzR2V0dGVyID0+ICFidWlsZGVyLmlzR2V0dGVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldHRlciA9PiAhYnVpbGRlci5pc1NldHRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyID0+IGJ1aWxkZXIuaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NsYXNzSW5zdGFuY2VNZW1iZXIgPT4gYnVpbGRlci5pc0NsYXNzSW5zdGFuY2VNZW1iZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXh0ZW5zaW9uSW5zdGFuY2VNZW1iZXIgPT4gYnVpbGRlci5pc0V4dGVuc2lvbkluc3RhbmNlTWVtYmVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N0YXRpYyA9PiBidWlsZGVyLmlzU3RhdGljOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsID0+IGJ1aWxkZXIuaXNUb3BMZXZlbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNUeXBlRGVjbGFyYXRpb24gPT4gYnVpbGRlci5pc1R5cGVEZWNsYXJhdGlvbjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNMb2NhbCA9PiBidWlsZGVyLmlzTG9jYWw7CgogIEBvdmVycmlkZQogIE1lc3NhZ2UgZ2V0IG1lc3NhZ2UgPT4gdGVtcGxhdGVBY2Nlc3NFcnJvci53aXRoQXJndW1lbnRzKG5hbWUpOwp9CgpjbGFzcyBBbWJpZ3VvdXNCdWlsZGVyIGV4dGVuZHMgUHJvYmxlbUJ1aWxkZXIgewogIEFtYmlndW91c0J1aWxkZXIoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgYnVpbGRlciwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKQogICAgICA6IHN1cGVyKG5hbWUsIGJ1aWxkZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGdldCBwYXJlbnQgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgTWVzc2FnZSBnZXQgbWVzc2FnZSA9PiB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZS53aXRoQXJndW1lbnRzKG5hbWUpOwoKICAvLyBUT0RPKGFoZSk6IEFsc28gcHJvdmlkZSBjb250ZXh0LgoKICBCdWlsZGVyIGdldEZpcnN0RGVjbGFyYXRpb24oKSB7CiAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gYnVpbGRlcjsKICAgIHdoaWxlIChkZWNsYXJhdGlvbi5uZXh0ICE9IG51bGwpIHsKICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi5uZXh0OwogICAgfQogICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogIH0KfQoKY2xhc3MgU2NvcGVMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxCdWlsZGVyPiB7CiAgSXRlcmF0b3I8QnVpbGRlcj4gbG9jYWw7CiAgZmluYWwgSXRlcmF0b3I8QnVpbGRlcj4gc2V0dGVyczsKCiAgQG92ZXJyaWRlCiAgQnVpbGRlciBjdXJyZW50OwoKICBTY29wZUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvcihTY29wZSBzY29wZSkKICAgICAgOiBsb2NhbCA9IHNjb3BlLmxvY2FsLnZhbHVlcy5pdGVyYXRvciwKICAgICAgICBzZXR0ZXJzID0gc2NvcGUuc2V0dGVycy52YWx1ZXMuaXRlcmF0b3I7CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBCdWlsZGVyIG5leHQgPSBjdXJyZW50Py5uZXh0OwogICAgaWYgKG5leHQgIT0gbnVsbCkgewogICAgICBjdXJyZW50ID0gbmV4dDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAobG9jYWwgIT0gbnVsbCkgewogICAgICBpZiAobG9jYWwubW92ZU5leHQoKSkgewogICAgICAgIGN1cnJlbnQgPSBsb2NhbC5jdXJyZW50OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGxvY2FsID0gbnVsbDsKICAgIH0KICAgIGlmIChzZXR0ZXJzLm1vdmVOZXh0KCkpIHsKICAgICAgY3VycmVudCA9IHNldHRlcnMuY3VycmVudDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICBjdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKY2xhc3MgU2NvcGVMb2NhbERlY2xhcmF0aW9uTmFtZUl0ZXJhdG9yIGV4dGVuZHMgU2NvcGVMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3IKICAgIGltcGxlbWVudHMgTmFtZUl0ZXJhdG9yIHsKICBJdGVyYXRvcjxTdHJpbmc+IGxvY2FsTmFtZXM7CiAgZmluYWwgSXRlcmF0b3I8U3RyaW5nPiBzZXR0ZXJOYW1lczsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIG5hbWU7CgogIFNjb3BlTG9jYWxEZWNsYXJhdGlvbk5hbWVJdGVyYXRvcihTY29wZSBzY29wZSkKICAgICAgOiBsb2NhbE5hbWVzID0gc2NvcGUubG9jYWwua2V5cy5pdGVyYXRvciwKICAgICAgICBzZXR0ZXJOYW1lcyA9IHNjb3BlLnNldHRlcnMua2V5cy5pdGVyYXRvciwKICAgICAgICBzdXBlcihzY29wZSk7CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBCdWlsZGVyIG5leHQgPSBjdXJyZW50Py5uZXh0OwogICAgaWYgKG5leHQgIT0gbnVsbCkgewogICAgICBjdXJyZW50ID0gbmV4dDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAobG9jYWwgIT0gbnVsbCkgewogICAgICBpZiAobG9jYWwubW92ZU5leHQoKSkgewogICAgICAgIGxvY2FsTmFtZXMubW92ZU5leHQoKTsKICAgICAgICBjdXJyZW50ID0gbG9jYWwuY3VycmVudDsKICAgICAgICBuYW1lID0gbG9jYWxOYW1lcy5jdXJyZW50OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGxvY2FsTmFtZXMgPSBudWxsOwogICAgfQogICAgaWYgKHNldHRlcnMubW92ZU5leHQoKSkgewogICAgICBzZXR0ZXJOYW1lcy5tb3ZlTmV4dCgpOwogICAgICBjdXJyZW50ID0gc2V0dGVycy5jdXJyZW50OwogICAgICBuYW1lID0gc2V0dGVyTmFtZXMuY3VycmVudDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICBjdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQqB9ABOTjwBFQFPARoJGBE6HSozAToBFSQeASYgAU8TEAElARBKKgQBRgIBI00PGwEfAS4BHgFQM00YAShEKQEUSRkiAUpKKQEjNAQBIjgEATlEJQQBMjgBMjwBMjoBSiwjIykfIyEEAUlKBAFFLBVHMyIGFQQBT00jBhQSJiNLBAE9GCU1BgQBPTghJiBOKUoTDRYGBAE7JioWRSlNMkkGHDwWBkEEAUEmKhZHKUsySQYcPBYGRwQBUQEzGCYdDRdHBgQBOiAzKgQBISlCLSQGEQQBOiIEASVQBAFGBk9LSyBGGDM5IUIIHQ0XRwYRBAEOEys8JgE0JB4iSAoIGgYBJhMoBAExFhgEARsuKC4mBhYEASE6KR4yJgg0JwgZBAEeMzYcLR4uIhoPIwgGKDgtHjAiGg8lCAYVQigQBAIBFRUBHAExIQQBMSMEATkCATAVARkBGAEVAUoBFgEfARcBDCgCAU5BMlAzAQwhAQwnAQwnAQw3AQwqAQwqAQxPAQxDAQxLAQwpAQwtAQw7AQwnAQxCAgEwTjMBDB4BDE8BJgEiIycmBhgEAgFDGyMBDBMBLS0xAQwUIhgWEwYZHiEVCBQGHiETDRYUBgQCAU4eHyYBDA8BMTAzFgEMFCIYFhMGGR4fISMVCBkGHh4hIhMNFhQGBAIBJnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY29wZS5kYXJ0RXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zb3VyY2Uvc291cmNlX2NsYXNzX2J1aWxkZXIuZGFydKvNLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc291cmNlX2NsYXNzX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBDbGFzcywgQ29uc3RydWN0b3IsIE1lbWJlciwgU3VwZXJ0eXBlLCBUcmVlTm9kZTsKCmltcG9ydCAnLi4vZGlsbC9kaWxsX21lbWJlcl9idWlsZGVyLmRhcnQnIHNob3cgRGlsbE1lbWJlckJ1aWxkZXI7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTWVzc2FnZSwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aENvbnN0cnVjdG9yLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aEZhY3RvcnksCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcsCiAgICAgICAgdGVtcGxhdGVTdXBlcnR5cGVJc0lsbGVnYWw7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIsCiAgICAgICAgQnVpbGRlciwKICAgICAgICBGaWVsZEJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25CdWlsZGVyLAogICAgICAgIEludmFsaWRUeXBlQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBTY29wZSwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyLAogICAgICAgIGNvbXBhcmVQcm9jZWR1cmVzOwoKaW1wb3J0ICcuLi9rZXJuZWwvdHlwZV9hbGdvcml0aG1zLmRhcnQnIHNob3cgVmFyaWFuY2UsIGNvbXB1dGVWYXJpYW5jZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmV4cGVjdGVkLCB1bmhhbmRsZWQ7CgppbXBvcnQgJ3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCkNsYXNzIGluaXRpYWxpemVDbGFzcygKICAgIENsYXNzIGNscywKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgIFN0cmluZyBuYW1lLAogICAgU291cmNlTGlicmFyeUJ1aWxkZXIgcGFyZW50LAogICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgIGludCBjaGFyT2Zmc2V0LAogICAgaW50IGNoYXJFbmRPZmZzZXQpIHsKICBjbHMgPz89IG5ldyBDbGFzcygKICAgICAgbmFtZTogbmFtZSwKICAgICAgdHlwZVBhcmFtZXRlcnM6CiAgICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyLnR5cGVQYXJhbWV0ZXJzRnJvbUJ1aWxkZXJzKHR5cGVWYXJpYWJsZXMpKTsKICBjbHMuZmlsZVVyaSA/Pz0gcGFyZW50LmZpbGVVcmk7CiAgaWYgKGNscy5zdGFydEZpbGVPZmZzZXQgPT0gVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgIGNscy5zdGFydEZpbGVPZmZzZXQgPSBzdGFydENoYXJPZmZzZXQ7CiAgfQogIGlmIChjbHMuZmlsZU9mZnNldCA9PSBUcmVlTm9kZS5ub09mZnNldCkgewogICAgY2xzLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KICBpZiAoY2xzLmZpbGVFbmRPZmZzZXQgPT0gVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgIGNscy5maWxlRW5kT2Zmc2V0ID0gY2hhckVuZE9mZnNldDsKICB9CgogIHJldHVybiBjbHM7Cn0KCmNsYXNzIFNvdXJjZUNsYXNzQnVpbGRlciBleHRlbmRzIENsYXNzQnVpbGRlcgogICAgaW1wbGVtZW50cyBDb21wYXJhYmxlPFNvdXJjZUNsYXNzQnVpbGRlcj4gewogIEBvdmVycmlkZQogIGZpbmFsIENsYXNzIGFjdHVhbENsczsKCiAgZmluYWwgTGlzdDxDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXI+IGNvbnN0cnVjdG9yUmVmZXJlbmNlczsKCiAgVHlwZUJ1aWxkZXIgbWl4ZWRJblR5cGU7CgogIGJvb2wgaXNNaXhpbkRlY2xhcmF0aW9uOwoKICBTb3VyY2VDbGFzc0J1aWxkZXIoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlLAogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzLAogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBvblR5cGVzLAogICAgICBTY29wZSBzY29wZSwKICAgICAgU2NvcGUgY29uc3RydWN0b3JzLAogICAgICBMaWJyYXJ5QnVpbGRlciBwYXJlbnQsCiAgICAgIHRoaXMuY29uc3RydWN0b3JSZWZlcmVuY2VzLAogICAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgICBpbnQgbmFtZU9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIHtDbGFzcyBjbHMsCiAgICAgIHRoaXMubWl4ZWRJblR5cGUsCiAgICAgIHRoaXMuaXNNaXhpbkRlY2xhcmF0aW9uID0gZmFsc2V9KQogICAgICA6IGFjdHVhbENscyA9IGluaXRpYWxpemVDbGFzcyhjbHMsIHR5cGVWYXJpYWJsZXMsIG5hbWUsIHBhcmVudCwKICAgICAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LCBuYW1lT2Zmc2V0LCBjaGFyRW5kT2Zmc2V0KSwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCBuYW1lLCB0eXBlVmFyaWFibGVzLCBzdXBlcnR5cGUsIGludGVyZmFjZXMsCiAgICAgICAgICAgIG9uVHlwZXMsIHNjb3BlLCBjb25zdHJ1Y3RvcnMsIHBhcmVudCwgbmFtZU9mZnNldCk7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBjbHMgPT4gb3JpZ2luLmFjdHVhbENsczsKCiAgQG92ZXJyaWRlCiAgU291cmNlTGlicmFyeUJ1aWxkZXIgZ2V0IGxpYnJhcnkgPT4gc3VwZXIubGlicmFyeTsKCiAgQ2xhc3MgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlicmFyeUJ1aWxkZXIgY29yZUxpYnJhcnkpIHsKICAgIHZvaWQgYnVpbGRCdWlsZGVycyhTdHJpbmcgbmFtZSwgQnVpbGRlciBkZWNsYXJhdGlvbikgewogICAgICBkbyB7CiAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnBhcmVudCAhPSB0aGlzKSB7CiAgICAgICAgICBpZiAoZmlsZVVyaSAhPSBkZWNsYXJhdGlvbi5wYXJlbnQuZmlsZVVyaSkgewogICAgICAgICAgICB1bmV4cGVjdGVkKCIkZmlsZVVyaSIsICIke2RlY2xhcmF0aW9uLnBhcmVudC5maWxlVXJpfSIsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVuZXhwZWN0ZWQoZnVsbE5hbWVGb3JFcnJvcnMsIGRlY2xhcmF0aW9uLnBhcmVudD8uZnVsbE5hbWVGb3JFcnJvcnMsCiAgICAgICAgICAgICAgICBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEZpZWxkQnVpbGRlcikgewogICAgICAgICAgLy8gVE9ETyhhaGUpOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSBjb21tb24gaW50ZXJmYWNlIGZvciB0aGUKICAgICAgICAgIC8vIGJ1aWxkIG1ldGhvZCB0byBhdm9pZCBkdXBsaWNhdGluZyB0aGVzZSB0d28gY2FzZXMuCiAgICAgICAgICBNZW1iZXIgZmllbGQgPSBkZWNsYXJhdGlvbi5idWlsZChsaWJyYXJ5KTsKICAgICAgICAgIGlmICghZGVjbGFyYXRpb24uaXNQYXRjaCAmJiBkZWNsYXJhdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgICAgICAgY2xzLmFkZE1lbWJlcihmaWVsZCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBGdW5jdGlvbkJ1aWxkZXIpIHsKICAgICAgICAgIE1lbWJlciBmdW5jdGlvbiA9IGRlY2xhcmF0aW9uLmJ1aWxkKGxpYnJhcnkpOwogICAgICAgICAgZnVuY3Rpb24ucGFyZW50ID0gY2xzOwogICAgICAgICAgaWYgKCFkZWNsYXJhdGlvbi5pc1BhdGNoICYmIGRlY2xhcmF0aW9uLm5leHQgPT0gbnVsbCkgewogICAgICAgICAgICBjbHMuYWRkTWVtYmVyKGZ1bmN0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdW5oYW5kbGVkKCIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIsICJidWlsZEJ1aWxkZXJzIiwKICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBkZWNsYXJhdGlvbi5maWxlVXJpKTsKICAgICAgICB9CiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi5uZXh0OwogICAgICB9IHdoaWxlIChkZWNsYXJhdGlvbiAhPSBudWxsKTsKICAgIH0KCiAgICBzY29wZS5mb3JFYWNoKGJ1aWxkQnVpbGRlcnMpOwogICAgY29uc3RydWN0b3JzLmZvckVhY2goYnVpbGRCdWlsZGVycyk7CiAgICBzdXBlcnR5cGUgPSBjaGVja1N1cGVydHlwZShzdXBlcnR5cGUpOwogICAgYWN0dWFsQ2xzLnN1cGVydHlwZSA9CiAgICAgICAgc3VwZXJ0eXBlPy5idWlsZFN1cGVydHlwZShsaWJyYXJ5LCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIGlmICghaXNNaXhpbkRlY2xhcmF0aW9uICYmCiAgICAgICAgYWN0dWFsQ2xzLnN1cGVydHlwZSAhPSBudWxsICYmCiAgICAgICAgYWN0dWFsQ2xzLnN1cGVyY2xhc3MuaXNNaXhpbkRlY2xhcmF0aW9uKSB7CiAgICAgIC8vIERlY2xhcmVkIG1peGlucyBoYXZlIGludGVyZmFjZXMgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQsIGJ1dCB0aGV5CiAgICAgIC8vIGNhbm5vdCBiZSBleHRlbmRlZC4gIEhvd2V2ZXIsIGEgbWl4aW4gZGVjbGFyYXRpb24gd2l0aCBhIHNpbmdsZQogICAgICAvLyBzdXBlcmNsYXNzIGNvbnN0cmFpbnQgaXMgZW5jb2RlZCB3aXRoIHRoZSBjb25zdHJhaW50IGFzIHRoZSBzdXBlcnR5cGUsCiAgICAgIC8vIGFuZCB0aGF0IGlzIGFsbG93ZWQgdG8gYmUgYSBtaXhpbidzIGludGVyZmFjZS4KICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVTdXBlcnR5cGVJc0lsbGVnYWwud2l0aEFyZ3VtZW50cyhhY3R1YWxDbHMuc3VwZXJjbGFzcy5uYW1lKSwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgIGZpbGVVcmkpOwogICAgICBhY3R1YWxDbHMuc3VwZXJ0eXBlID0gbnVsbDsKICAgIH0KICAgIGlmIChhY3R1YWxDbHMuc3VwZXJ0eXBlID09IG51bGwgJiYgc3VwZXJ0eXBlIGlzISBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgIHN1cGVydHlwZSA9IG51bGw7CiAgICB9CiAgICBtaXhlZEluVHlwZSA9IGNoZWNrU3VwZXJ0eXBlKG1peGVkSW5UeXBlKTsKICAgIGFjdHVhbENscy5taXhlZEluVHlwZSA9CiAgICAgICAgbWl4ZWRJblR5cGU/LmJ1aWxkTWl4ZWRJblR5cGUobGlicmFyeSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICBpZiAoYWN0dWFsQ2xzLm1peGVkSW5UeXBlID09IG51bGwgJiYgbWl4ZWRJblR5cGUgaXMhIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgbWl4ZWRJblR5cGUgPSBudWxsOwogICAgfQogICAgYWN0dWFsQ2xzLmlzTWl4aW5EZWNsYXJhdGlvbiA9IGlzTWl4aW5EZWNsYXJhdGlvbjsKICAgIC8vIFRPRE8oYWhlKTogSWYgYGNscy5zdXBlcnR5cGVgIGlzIG51bGwsIGFuZCB0aGlzIGlzbid0IE9iamVjdCwgcmVwb3J0IGEKICAgIC8vIGNvbXBpbGUtdGltZSBlcnJvci4KICAgIGNscy5pc0Fic3RyYWN0ID0gaXNBYnN0cmFjdDsKICAgIGlmIChpbnRlcmZhY2VzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaW50ZXJmYWNlc1tpXSA9IGNoZWNrU3VwZXJ0eXBlKGludGVyZmFjZXNbaV0pOwogICAgICAgIFN1cGVydHlwZSBzdXBlcnR5cGUgPQogICAgICAgICAgICBpbnRlcmZhY2VzW2ldLmJ1aWxkU3VwZXJ0eXBlKGxpYnJhcnksIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICAgIGlmIChzdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICAgICAgLy8gVE9ETyhhaGUpOiBSZXBvcnQgYW4gZXJyb3IgaWYgc3VwZXJ0eXBlIGlzIG51bGwuCiAgICAgICAgICBhY3R1YWxDbHMuaW1wbGVtZW50ZWRUeXBlcy5hZGQoc3VwZXJ0eXBlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBjb25zdHJ1Y3RvcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgY29uc3RydWN0b3IpIHsKICAgICAgQnVpbGRlciBtZW1iZXIgPSBzY29wZUJ1aWxkZXJbbmFtZV07CiAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAoIW1lbWJlci5pc1N0YXRpYykgcmV0dXJuOwogICAgICAvLyBUT0RPKGFoZSk6IFJldmlzaXQgdGhlc2UgbWVzc2FnZXMuIEl0IHNlZW1zIGxpa2UgdGhlIGxhc3QgdHdvIHNob3VsZAogICAgICAvLyBiZSBgY29udGV4dGAgcGFyYW1ldGVyIHRvIHRoaXMgbWVzc2FnZS4KICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXIud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIGNvbnN0cnVjdG9yLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzRmFjdG9yeSkgewogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aEZhY3Rvcnkud2l0aEFyZ3VtZW50cygiJHt0aGlzLm5hbWV9LiR7bmFtZX0iKSwKICAgICAgICAgICAgbWVtYmVyLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvcgogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoIiR7dGhpcy5uYW1lfS4ke25hbWV9IiksCiAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0pOwoKICAgIHNjb3BlLnNldHRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgc2V0dGVyKSB7CiAgICAgIEJ1aWxkZXIgbWVtYmVyID0gc2NvcGVCdWlsZGVyW25hbWVdOwogICAgICBpZiAobWVtYmVyID09IG51bGwgfHwKICAgICAgICAgICEobWVtYmVyLmlzRmllbGQgJiYgIW1lbWJlci5pc0ZpbmFsICYmICFtZW1iZXIuaXNDb25zdCB8fAogICAgICAgICAgICAgIG1lbWJlci5pc1JlZ3VsYXJNZXRob2QgJiYgbWVtYmVyLmlzU3RhdGljICYmIHNldHRlci5pc1N0YXRpYykpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKG1lbWJlci5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIgPT0KICAgICAgICAgIHNldHRlci5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlci53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBzZXR0ZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICAgIC8vIFRPRE8oYWhlKTogQ29udGV4dCBhcmd1bWVudCB0byBwcmV2aW91cyBtZXNzYWdlPwogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIHNldHRlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBDb250ZXh0IGFyZ3VtZW50IHRvIHByZXZpb3VzIG1lc3NhZ2U/CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0pOwoKICAgIHNjb3BlLnNldHRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgc2V0dGVyKSB7CiAgICAgIEJ1aWxkZXIgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvclNjb3BlQnVpbGRlcltuYW1lXTsKICAgICAgaWYgKGNvbnN0cnVjdG9yID09IG51bGwgfHwgIXNldHRlci5pc1N0YXRpYykgcmV0dXJuOwogICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aENvbnN0cnVjdG9yLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBzZXR0ZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlci53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgY29uc3RydWN0b3IuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgfSk7CgogICAgY2xzLnByb2NlZHVyZXMuc29ydChjb21wYXJlUHJvY2VkdXJlcyk7CiAgICByZXR1cm4gY2xzOwogIH0KCiAgVHlwZUJ1aWxkZXIgY2hlY2tTdXBlcnR5cGUoVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlKSB7CiAgICBpZiAodHlwZVZhcmlhYmxlcyA9PSBudWxsIHx8IHN1cGVydHlwZSA9PSBudWxsKSByZXR1cm4gc3VwZXJ0eXBlOwogICAgTWVzc2FnZSBtZXNzYWdlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlVmFyaWFibGVzLmxlbmd0aDsgKytpKSB7CiAgICAgIGludCB2YXJpYW5jZSA9IGNvbXB1dGVWYXJpYW5jZSh0eXBlVmFyaWFibGVzW2ldLCBzdXBlcnR5cGUpOwogICAgICBpZiAodmFyaWFuY2UgPT0gVmFyaWFuY2UuY29udHJhdmFyaWFudCB8fAogICAgICAgICAgdmFyaWFuY2UgPT0gVmFyaWFuY2UuaW52YXJpYW50KSB7CiAgICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgdHlwZVZhcmlhYmxlc1tpXS5uYW1lLCBzdXBlcnR5cGUubmFtZSk7CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgfQogICAgfQogICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoc3VwZXJ0eXBlLm5hbWUsIG51bGwpCiAgICAgICAgLi5iaW5kKG5ldyBJbnZhbGlkVHlwZUJ1aWxkZXIoc3VwZXJ0eXBlLm5hbWUsCiAgICAgICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKSkpOwogICAgfQogICAgcmV0dXJuIHN1cGVydHlwZTsKICB9CgogIHZvaWQgYWRkU3ludGhldGljQ29uc3RydWN0b3IoQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICAgIFN0cmluZyBuYW1lID0gY29uc3RydWN0b3IubmFtZS5uYW1lOwogICAgY2xzLmNvbnN0cnVjdG9ycy5hZGQoY29uc3RydWN0b3IpOwogICAgY29uc3RydWN0b3IucGFyZW50ID0gY2xzOwogICAgRGlsbE1lbWJlckJ1aWxkZXIgbWVtYmVyQnVpbGRlciA9IG5ldyBEaWxsTWVtYmVyQnVpbGRlcihjb25zdHJ1Y3RvciwgdGhpcyk7CiAgICBtZW1iZXJCdWlsZGVyLm5leHQgPSBjb25zdHJ1Y3RvclNjb3BlQnVpbGRlcltuYW1lXTsKICAgIGNvbnN0cnVjdG9yU2NvcGVCdWlsZGVyLmFkZE1lbWJlcihuYW1lLCBtZW1iZXJCdWlsZGVyKTsKICB9CgogIEBvdmVycmlkZQogIGludCBmaW5pc2hQYXRjaCgpIHsKICAgIGlmICghaXNQYXRjaCkgcmV0dXJuIDA7CgogICAgLy8gVE9ETyhhaGUpOiByZXN0b3JlIGZpbGUtb2Zmc2V0IG9uY2Ugd2UgdHJhY2sgYm90aCBvcmlnaW4gYW5kIHBhdGNoIGZpbGUKICAgIC8vIFVSSXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzE1NzkKICAgIGNscy5hbm5vdGF0aW9ucy5mb3JFYWNoKChtKSA9PiBtLmZpbGVPZmZzZXQgPSBvcmlnaW4uY2xzLmZpbGVPZmZzZXQpOwoKICAgIGludCBjb3VudCA9IDA7CiAgICBzY29wZS5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBkZWNsYXJhdGlvbikgewogICAgICBjb3VudCArPSBkZWNsYXJhdGlvbi5maW5pc2hQYXRjaCgpOwogICAgfSk7CiAgICBjb25zdHJ1Y3RvcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICAgICAgY291bnQgKz0gZGVjbGFyYXRpb24uZmluaXNoUGF0Y2goKTsKICAgIH0pOwogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgTGlzdDxCdWlsZGVyPiBjb21wdXRlRGlyZWN0U3VwZXJ0eXBlcyhDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIGZpbmFsIExpc3Q8QnVpbGRlcj4gcmVzdWx0ID0gPEJ1aWxkZXI+W107CiAgICBmaW5hbCBUeXBlQnVpbGRlciBzdXBlcnR5cGUgPSB0aGlzLnN1cGVydHlwZTsKICAgIGlmIChzdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICByZXN1bHQuYWRkKHN1cGVydHlwZS5kZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgaWYgKG9iamVjdENsYXNzICE9IHRoaXMpIHsKICAgICAgcmVzdWx0LmFkZChvYmplY3RDbGFzcyk7CiAgICB9CiAgICBmaW5hbCBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzID0gdGhpcy5pbnRlcmZhY2VzOwogICAgaWYgKGludGVyZmFjZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGludGVyZmFjZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBUeXBlQnVpbGRlciBpbnRlcmZhY2UgPSBpbnRlcmZhY2VzW2ldOwogICAgICAgIHJlc3VsdC5hZGQoaW50ZXJmYWNlLmRlY2xhcmF0aW9uKTsKICAgICAgfQogICAgfQogICAgZmluYWwgVHlwZUJ1aWxkZXIgbWl4ZWRJblR5cGUgPSB0aGlzLm1peGVkSW5UeXBlOwogICAgaWYgKG1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmFkZChtaXhlZEluVHlwZS5kZWNsYXJhdGlvbik7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVUbyhTb3VyY2VDbGFzc0J1aWxkZXIgb3RoZXIpIHsKICAgIGludCByZXN1bHQgPSAiJGZpbGVVcmkiLmNvbXBhcmVUbygiJHtvdGhlci5maWxlVXJpfSIpOwogICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0OwogICAgcmV0dXJuIGNoYXJPZmZzZXQuY29tcGFyZVRvKG90aGVyLmNoYXJPZmZzZXQpOwogIH0KfQqBRABOTjwBJAEhOgFCAR0JERIsKiYlLCUsJAEnCRYlERYZHBoYGQ8VHRsBSAE2AUABFw8tESEZFBkVEhZKIjIrBC0hBDAnBAEOAgEuMAwZAUEBGwEbARYmFRMvHSQhExodIhsWGRIYKEY5Tz8BDCUBDDUBSjsLKjdQGhNRJgwyTEA1QiIMNTghQiUMEUM8CiglBgEiKSsaQR8nM0tJUDgaTxYUFCIGSRgGLxxFTRoGN04bIR40Nx5IIT41CggGAT4rIiROMUItIxRQHxcPFC04HxcICAE6KxxETxAIMDBEKjxEKg9LKjxLKggIATo7O0coQi0IASwQBAE2RhU1QzAsRDRECAYbODZDBhYEATopJx5QODwEAQwWHAFPP0oBEzcqCD4qCBIEAUQuMh0pJh8GOh40LysIBjYfKwYTBAEMLDskMwQCATxwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3NvdXJjZV9jbGFzc19idWlsZGVyLmRhcnRHc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnTAAbb3Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc291cmNlX2xpYnJhcnlfYnVpbGRlcjsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25FbmNvZGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDbGFzcywKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBDb25zdHJ1Y3Rvckludm9jYXRpb24sCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBFeHRlbnNpb24sCiAgICAgICAgRmllbGQsCiAgICAgICAgRnVuY3Rpb25Ob2RlLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExpYnJhcnksCiAgICAgICAgTGlicmFyeURlcGVuZGVuY3ksCiAgICAgICAgTGlicmFyeVBhcnQsCiAgICAgICAgTGlzdExpdGVyYWwsCiAgICAgICAgTWFwTGl0ZXJhbCwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZSwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgUHJvY2VkdXJlS2luZCwKICAgICAgICBTZXRMaXRlcmFsLAogICAgICAgIFN0YXRpY0ludm9jYXRpb24sCiAgICAgICAgU3RyaW5nTGl0ZXJhbCwKICAgICAgICBTdXBlcnR5cGUsCiAgICAgICAgVHlwZWRlZiwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24sCiAgICAgICAgVm9pZFR5cGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0JyBzaG93IENsb25lVmlzaXRvcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvc3JjL2JvdW5kc19jaGVja3MuZGFydCcKICAgIHNob3cKICAgICAgICBUeXBlQXJndW1lbnRJc3N1ZSwKICAgICAgICBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzLAogICAgICAgIGZpbmRUeXBlQXJndW1lbnRJc3N1ZXNGb3JJbnZvY2F0aW9uLAogICAgICAgIGdldEdlbmVyaWNUeXBlTmFtZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgc3Vic3RpdHV0ZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBzaG93IFR5cGVFbnZpcm9ubWVudDsKCmltcG9ydCAnLi4vLi4vYmFzZS9yZXNvbHZlX3JlbGF0aXZlX3VyaS5kYXJ0JyBzaG93IHJlc29sdmVSZWxhdGl2ZVVyaTsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9idWlsZGVyL2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyLAogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgRW51bUNvbnN0YW50SW5mbywKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgTmFtZUl0ZXJhdG9yLAogICAgICAgIFByZWZpeEJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25CdWlsZGVyLAogICAgICAgIFF1YWxpZmllZE5hbWUsCiAgICAgICAgU2NvcGUsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyLAogICAgICAgIFVucmVzb2x2ZWRUeXBlLAogICAgICAgIGZsYXR0ZW5OYW1lOwoKaW1wb3J0ICcuLi9idWlsZGVyL2V4dGVuc2lvbl9idWlsZGVyLmRhcnQnOwoKaW1wb3J0ICcuLi9jb21iaW5hdG9yLmRhcnQnIHNob3cgQ29tYmluYXRvcjsKCmltcG9ydCAnLi4vY29uZmlndXJhdGlvbi5kYXJ0JyBzaG93IENvbmZpZ3VyYXRpb247CgppbXBvcnQgJy4uL2V4cG9ydC5kYXJ0JyBzaG93IEV4cG9ydDsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBGb3JtYXR0ZWRNZXNzYWdlLAogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZSwKICAgICAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lLAogICAgICAgIG1lc3NhZ2VFeHBlY3RlZFVyaSwKICAgICAgICBtZXNzYWdlTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzcywKICAgICAgICBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZUluQm91bmQsCiAgICAgICAgbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQsCiAgICAgICAgbWVzc2FnZUluY29ycmVjdFR5cGVBcmd1bWVudFZhcmlhYmxlLAogICAgICAgIG1lc3NhZ2VMYW5ndWFnZVZlcnNpb25JbnZhbGlkSW5Eb3RQYWNrYWdlcywKICAgICAgICBtZXNzYWdlTGFuZ3VhZ2VWZXJzaW9uTWlzbWF0Y2hJblBhcnQsCiAgICAgICAgbWVzc2FnZVBhcnRFeHBvcnQsCiAgICAgICAgbWVzc2FnZVBhcnRFeHBvcnRDb250ZXh0LAogICAgICAgIG1lc3NhZ2VQYXJ0SW5QYXJ0LAogICAgICAgIG1lc3NhZ2VQYXJ0SW5QYXJ0TGlicmFyeUNvbnRleHQsCiAgICAgICAgbWVzc2FnZVBhcnRPZlNlbGYsCiAgICAgICAgbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllcywKICAgICAgICBtZXNzYWdlUGFydE9mVHdvTGlicmFyaWVzQ29udGV4dCwKICAgICAgICBtZXNzYWdlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWUsCiAgICAgICAgbWVzc2FnZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmcsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlciwKICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUsCiAgICAgICAgdGVtcGxhdGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0LAogICAgICAgIHRlbXBsYXRlQ291bGROb3RQYXJzZVVyaSwKICAgICAgICB0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZCwKICAgICAgICB0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRXhwb3J0LAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydEluVHlwZSwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRJbXBvcnQsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0SW5UeXBlLAogICAgICAgIHRlbXBsYXRlRXhwb3J0SGlkZXNFeHBvcnQsCiAgICAgICAgdGVtcGxhdGVHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudCwKICAgICAgICB0ZW1wbGF0ZUltcG9ydEhpZGVzSW1wb3J0LAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50LAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWQsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCwKICAgICAgICB0ZW1wbGF0ZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCwKICAgICAgICB0ZW1wbGF0ZUxhbmd1YWdlVmVyc2lvblRvb0hpZ2gsCiAgICAgICAgdGVtcGxhdGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyLAogICAgICAgIHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQsCiAgICAgICAgdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCwKICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdQYXJ0T2YsCiAgICAgICAgdGVtcGxhdGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbiwKICAgICAgICB0ZW1wbGF0ZVBhcnRPZkluTGlicmFyeSwKICAgICAgICB0ZW1wbGF0ZVBhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVQYXJ0T2ZVcmlNaXNtYXRjaCwKICAgICAgICB0ZW1wbGF0ZVBhcnRPZlVzZVVyaSwKICAgICAgICB0ZW1wbGF0ZVBhcnRUd2ljZSwKICAgICAgICB0ZW1wbGF0ZVBhdGNoSW5qZWN0aW9uRmFpbGVkLAogICAgICAgIHRlbXBsYXRlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZTsKCmltcG9ydCAnLi4vaW1wb3J0LmRhcnQnIHNob3cgSW1wb3J0OwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBBY2Nlc3NFcnJvckJ1aWxkZXIsCiAgICAgICAgQnVpbHRpblR5cGVCdWlsZGVyLAogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIsCiAgICAgICAgQnVpbGRlciwKICAgICAgICBEeW5hbWljVHlwZUJ1aWxkZXIsCiAgICAgICAgRW51bUNvbnN0YW50SW5mbywKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIsCiAgICAgICAgSW1wbGljaXRGaWVsZFR5cGUsCiAgICAgICAgSW52YWxpZFR5cGVCdWlsZGVyLAogICAgICAgIENvbnN0cnVjdG9yQnVpbGRlciwKICAgICAgICBFbnVtQnVpbGRlciwKICAgICAgICBGdW5jdGlvbkJ1aWxkZXIsCiAgICAgICAgVHlwZUFsaWFzQnVpbGRlciwKICAgICAgICBGaWVsZEJ1aWxkZXIsCiAgICAgICAgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBQcm9jZWR1cmVCdWlsZGVyLAogICAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTG9hZExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIE5hbWVJdGVyYXRvciwKICAgICAgICBQcmVmaXhCdWlsZGVyLAogICAgICAgIFF1YWxpZmllZE5hbWUsCiAgICAgICAgU2NvcGUsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyLAogICAgICAgIFVucmVzb2x2ZWRUeXBlLAogICAgICAgIFZvaWRUeXBlQnVpbGRlciwKICAgICAgICBjb21wYXJlUHJvY2VkdXJlcywKICAgICAgICB0b0tlcm5lbENvbWJpbmF0b3JzOwoKaW1wb3J0ICcuLi9rZXJuZWwvbWV0YWRhdGFfY29sbGVjdG9yLmRhcnQnOwoKaW1wb3J0ICcuLi9rZXJuZWwvdHlwZV9hbGdvcml0aG1zLmRhcnQnCiAgICBzaG93CiAgICAgICAgY2FsY3VsYXRlQm91bmRzLAogICAgICAgIGZpbmRHZW5lcmljRnVuY3Rpb25UeXBlcywKICAgICAgICBnZXROb25TaW1wbGljaXR5SXNzdWVzRm9yRGVjbGFyYXRpb24sCiAgICAgICAgZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvclR5cGVWYXJpYWJsZXM7CgppbXBvcnQgJy4uL2xvYWRlci5kYXJ0JyBzaG93IExvYWRlcjsKCmltcG9ydCAnLi4vbW9kaWZpZXIuZGFydCcKICAgIHNob3cKICAgICAgICBhYnN0cmFjdE1hc2ssCiAgICAgICAgY29uc3RNYXNrLAogICAgICAgIGZpbmFsTWFzaywKICAgICAgICBoYXNDb25zdENvbnN0cnVjdG9yTWFzaywKICAgICAgICBoYXNJbml0aWFsaXplck1hc2ssCiAgICAgICAgaW5pdGlhbGl6aW5nRm9ybWFsTWFzaywKICAgICAgICBtaXhpbkRlY2xhcmF0aW9uTWFzaywKICAgICAgICBuYW1lZE1peGluQXBwbGljYXRpb25NYXNrLAogICAgICAgIHN0YXRpY01hc2s7CgppbXBvcnQgJy4uL25hbWVzLmRhcnQnIHNob3cgaW5kZXhTZXROYW1lOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuZXhwZWN0ZWQsIHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcnJlci5kYXJ0JyBzaG93IFR5cGVJbmZlcnJlckltcGw7CgppbXBvcnQgJ3NvdXJjZV9jbGFzc19idWlsZGVyLmRhcnQnIHNob3cgU291cmNlQ2xhc3NCdWlsZGVyOwoKaW1wb3J0ICdzb3VyY2VfZXh0ZW5zaW9uX2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VFeHRlbnNpb25CdWlsZGVyOwoKaW1wb3J0ICdzb3VyY2VfbG9hZGVyLmRhcnQnIHNob3cgU291cmNlTG9hZGVyOwoKY2xhc3MgU291cmNlTGlicmFyeUJ1aWxkZXIgZXh0ZW5kcyBMaWJyYXJ5QnVpbGRlciB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBNQUxGT1JNRURfVVJJX1NDSEVNRSA9ICJvcmctZGFydGxhbmctbWFsZm9ybWVkLXVyaSI7CgogIGZpbmFsIFNvdXJjZUxvYWRlciBsb2FkZXI7CgogIGZpbmFsIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgbGlicmFyeURlY2xhcmF0aW9uOwoKICBmaW5hbCBMaXN0PENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcj4gY29uc3RydWN0b3JSZWZlcmVuY2VzID0KICAgICAgPENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcj5bXTsKCiAgZmluYWwgTGlzdDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj4gcGFydHMgPSA8U291cmNlTGlicmFyeUJ1aWxkZXI+W107CgogIC8vIENhbiBJIHVzZSBsaWJyYXJ5LnBhcnRzIGluc3RlYWQ/IFNlZSBTb3VyY2VMaWJyYXJ5QnVpbGRlci5hZGRQYXJ0LgogIGZpbmFsIExpc3Q8aW50PiBwYXJ0T2Zmc2V0cyA9IDxpbnQ+W107CgogIGZpbmFsIExpc3Q8SW1wb3J0PiBpbXBvcnRzID0gPEltcG9ydD5bXTsKCiAgZmluYWwgTGlzdDxFeHBvcnQ+IGV4cG9ydHMgPSA8RXhwb3J0PltdOwoKICBmaW5hbCBTY29wZSBpbXBvcnRTY29wZTsKCiAgZmluYWwgVXJpIGZpbGVVcmk7CgogIGZpbmFsIExpc3Q8SW1wbGVtZW50YXRpb25JbmZvPiBpbXBsZW1lbnRhdGlvbkJ1aWxkZXJzID0KICAgICAgPEltcGxlbWVudGF0aW9uSW5mbz5bXTsKCiAgZmluYWwgTGlzdDxPYmplY3Q+IGFjY2Vzc29ycyA9IDxPYmplY3Q+W107CgogIGZpbmFsIGJvb2wgbGVnYWN5TW9kZTsKCiAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50OwoKICBTdHJpbmcgbmFtZTsKCiAgU3RyaW5nIHBhcnRPZk5hbWU7CgogIFVyaSBwYXJ0T2ZVcmk7CgogIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YTsKCiAgLy8vIFRoZSBjdXJyZW50IGRlY2xhcmF0aW9uIHRoYXQgaXMgYmVpbmcgYnVpbHQuIFdoZW4gd2Ugc3RhcnQgcGFyc2luZyBhCiAgLy8vIGRlY2xhcmF0aW9uIChjbGFzcywgbWV0aG9kLCBhbmQgc28gb24pLCB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbgogIC8vLyB0byBjcmVhdGUgYSBidWlsZGVyIGFuZCB0aGlzIG9iamVjdCByZWNvcmRzIGl0cyBtZW1iZXJzIGFuZCB0eXBlcyB1bnRpbCwKICAvLy8gZm9yIGV4YW1wbGUsIFthZGRDbGFzc10gaXMgY2FsbGVkLgogIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXI7CgogIGJvb2wgY2FuQWRkSW1wbGVtZW50YXRpb25CdWlsZGVycyA9IGZhbHNlOwoKICAvLy8gTm9uLW51bGwgaWYgdGhpcyBsaWJyYXJ5IGNhdXNlcyBhbiBlcnJvciB1cG9uIGFjY2VzcywgdGhhdCBpcywgdGhlcmUgd2FzCiAgLy8vIGFuIGVycm9yIHJlYWRpbmcgaXRzIHNvdXJjZS4KICBNZXNzYWdlIGFjY2Vzc1Byb2JsZW07CgogIGZpbmFsIExpYnJhcnkgbGlicmFyeTsKCiAgZmluYWwgU291cmNlTGlicmFyeUJ1aWxkZXIgYWN0dWFsT3JpZ2luOwoKICBmaW5hbCBMaXN0PEZ1bmN0aW9uQnVpbGRlcj4gbmF0aXZlTWV0aG9kcyA9IDxGdW5jdGlvbkJ1aWxkZXI+W107CgogIGZpbmFsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gYm91bmRsZXNzVHlwZVZhcmlhYmxlcyA9CiAgICAgIDxUeXBlVmFyaWFibGVCdWlsZGVyPltdOwoKICAvLyBBIGxpc3Qgb2YgYWx0ZXJuYXRpbmcgZm9yd2FyZGVycyBhbmQgdGhlIHByb2NlZHVyZXMgdGhleSB3ZXJlIGdlbmVyYXRlZAogIC8vIGZvci4gIE5vdGUgdGhhdCBpdCBtYXkgbm90IGluY2x1ZGUgYSBmb3J3YXJkZXItb3JpZ2luIHBhaXIgaW4gY2FzZXMgd2hlbgogIC8vIHRoZSBmb3JtZXIgZG9lcyBub3QgbmVlZCB0byBiZSB1cGRhdGVkIGFmdGVyIHRoZSBib2R5IG9mIHRoZSBsYXR0ZXIgd2FzCiAgLy8gYnVpbHQuCiAgZmluYWwgTGlzdDxQcm9jZWR1cmU+IGZvcndhcmRlcnNPcmlnaW5zID0gPFByb2NlZHVyZT5bXTsKCiAgLy8gTGlzdCBvZiB0eXBlcyBpbmZlcnJlZCBpbiB0aGUgb3V0bGluZS4gIEVycm9ycyBpbiB0aGVzZSBzaG91bGQgYmUgcmVwb3J0ZWQKICAvLyBkaWZmZXJlbnRseSB0aGFuIGZvciBzcGVjaWZpZWQgdHlwZXMuCiAgLy8gVE9ETyhkbWl0cnlhcyk6ICBGaW5kIGEgd2F5IHRvIG1hcmsgaW5mZXJyZWQgdHlwZXMuCiAgZmluYWwgU2V0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzID0gbmV3IFNldDxEYXJ0VHlwZT4uaWRlbnRpdHkoKTsKCiAgLy8gQSBsaWJyYXJ5IHRvIHVzZSBmb3IgTmFtZXMgZ2VuZXJhdGVkIHdoZW4gY29tcGlsaW5nIGNvZGUgaW4gdGhpcyBsaWJyYXJ5LgogIC8vIFRoaXMgYWxsb3dzIGNvZGUgZ2VuZXJhdGVkIGluIG9uZSBsaWJyYXJ5IHRvIHVzZSB0aGUgcHJpdmF0ZSBuYW1lc3BhY2Ugb2YKICAvLyBhbm90aGVyLCBmb3IgZXhhbXBsZSBkdXJpbmcgZXhwcmVzc2lvbiBjb21waWxhdGlvbiAoZGVidWdnaW5nKS4KICBMaWJyYXJ5IGdldCBuYW1lT3JpZ2luID0+IF9uYW1lT3JpZ2luID8/IGxpYnJhcnk7CiAgZmluYWwgTGlicmFyeSBfbmFtZU9yaWdpbjsKCiAgLy8vIEV4cG9ydHMgdGhhdCBjYW4ndCBiZSBzZXJpYWxpemVkLgogIC8vLwogIC8vLyBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBleHBvcnRlZCBtZW1iZXIuCiAgLy8vCiAgLy8vIElmIHRoZSBuYW1lIGlzIGBkeW5hbWljYCBvciBgdm9pZGAsIHRoaXMgbGlicmFyeSByZWV4cG9ydHMgdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgdHlwZSBmcm9tIGBkYXJ0OmNvcmVgLCBhbmQgdGhlIHZhbHVlIGlzIG51bGwuCiAgLy8vCiAgLy8vIE90aGVyd2lzZSwgdGhpcyByZXByZXNlbnRzIGFuIGVycm9yIChhbiBhbWJpZ3VvdXMgZXhwb3J0KS4gSW4gdGhpcyBjYXNlLAogIC8vLyB0aGUgZXJyb3IgbWVzc2FnZSBpcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgbWFwLgogIE1hcDxTdHJpbmcsIFN0cmluZz4gdW5zZXJpYWxpemFibGVFeHBvcnRzOwoKICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IHVudHlwZWRJbml0aWFsaXppbmdGb3JtYWxzOwoKICBMaXN0PEZpZWxkQnVpbGRlcj4gaW1wbGljaXRseVR5cGVkRmllbGRzOwoKICBib29sIGxhbmd1YWdlVmVyc2lvbkV4cGxpY2l0bHlTZXQgPSBmYWxzZTsKCiAgYm9vbCBwb3N0cG9uZWRQcm9ibGVtc0lzc3VlZCA9IGZhbHNlOwogIExpc3Q8UG9zdHBvbmVkUHJvYmxlbT4gcG9zdHBvbmVkUHJvYmxlbXM7CgogIFNvdXJjZUxpYnJhcnlCdWlsZGVyLmludGVybmFsKFNvdXJjZUxvYWRlciBsb2FkZXIsIFVyaSBmaWxlVXJpLCBTY29wZSBzY29wZSwKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgYWN0dWFsT3JpZ2luLCBMaWJyYXJ5IGxpYnJhcnksIExpYnJhcnkgbmFtZU9yaWdpbikKICAgICAgOiB0aGlzLmZyb21TY29wZXMoCiAgICAgICAgICAgIGxvYWRlciwKICAgICAgICAgICAgZmlsZVVyaSwKICAgICAgICAgICAgbmV3IFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubGlicmFyeSgpLAogICAgICAgICAgICBzY29wZSA/PyBuZXcgU2NvcGUudG9wKCksCiAgICAgICAgICAgIGFjdHVhbE9yaWdpbiwKICAgICAgICAgICAgbGlicmFyeSwKICAgICAgICAgICAgbmFtZU9yaWdpbik7CgogIFNvdXJjZUxpYnJhcnlCdWlsZGVyLmZyb21TY29wZXMoCiAgICAgIHRoaXMubG9hZGVyLAogICAgICB0aGlzLmZpbGVVcmksCiAgICAgIHRoaXMubGlicmFyeURlY2xhcmF0aW9uLAogICAgICB0aGlzLmltcG9ydFNjb3BlLAogICAgICB0aGlzLmFjdHVhbE9yaWdpbiwKICAgICAgdGhpcy5saWJyYXJ5LAogICAgICB0aGlzLl9uYW1lT3JpZ2luKQogICAgICA6IGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyID0gbGlicmFyeURlY2xhcmF0aW9uLAogICAgICAgIGxlZ2FjeU1vZGUgPSBsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUsCiAgICAgICAgc3VwZXIoCiAgICAgICAgICAgIGZpbGVVcmksIGxpYnJhcnlEZWNsYXJhdGlvbi50b1Njb3BlKGltcG9ydFNjb3BlKSwgbmV3IFNjb3BlLnRvcCgpKTsKCiAgU291cmNlTGlicmFyeUJ1aWxkZXIoCiAgICAgIFVyaSB1cmksIFVyaSBmaWxlVXJpLCBMb2FkZXIgbG9hZGVyLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBhY3R1YWxPcmlnaW4sCiAgICAgIHtTY29wZSBzY29wZSwgTGlicmFyeSB0YXJnZXQsIExpYnJhcnkgbmFtZU9yaWdpbn0pCiAgICAgIDogdGhpcy5pbnRlcm5hbCgKICAgICAgICAgICAgbG9hZGVyLAogICAgICAgICAgICBmaWxlVXJpLAogICAgICAgICAgICBzY29wZSwKICAgICAgICAgICAgYWN0dWFsT3JpZ2luLAogICAgICAgICAgICB0YXJnZXQgPz8KICAgICAgICAgICAgICAgIChhY3R1YWxPcmlnaW4/LmxpYnJhcnkgPz8gbmV3IExpYnJhcnkodXJpLCBmaWxlVXJpOiBmaWxlVXJpKSksCiAgICAgICAgICAgIG5hbWVPcmlnaW4pOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BhcnQgPT4gcGFydE9mTmFtZSAhPSBudWxsIHx8IHBhcnRPZlVyaSAhPSBudWxsOwoKICBMaXN0PFVucmVzb2x2ZWRUeXBlPiBnZXQgdHlwZXMgPT4gbGlicmFyeURlY2xhcmF0aW9uLnR5cGVzOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiBhY2Nlc3NQcm9ibGVtICE9IG51bGw7CgogIFR5cGVCdWlsZGVyIGFkZFR5cGUoVHlwZUJ1aWxkZXIgdHlwZSwgaW50IGNoYXJPZmZzZXQpIHsKICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyCiAgICAgICAgLmFkZFR5cGUobmV3IFVucmVzb2x2ZWRUeXBlKHR5cGUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRMYW5ndWFnZVZlcnNpb24oaW50IG1ham9yLCBpbnQgbWlub3IsCiAgICAgIHtpbnQgb2Zmc2V0OiAwLCBpbnQgbGVuZ3RoOiBub0xlbmd0aCwgYm9vbCBleHBsaWNpdH0pIHsKICAgIGlmIChsYW5ndWFnZVZlcnNpb25FeHBsaWNpdGx5U2V0KSByZXR1cm47CiAgICBpZiAoZXhwbGljaXQpIGxhbmd1YWdlVmVyc2lvbkV4cGxpY2l0bHlTZXQgPSB0cnVlOwoKICAgIGlmIChtYWpvciA9PSBudWxsIHx8IG1pbm9yID09IG51bGwpIHsKICAgICAgYWRkUG9zdHBvbmVkUHJvYmxlbSgKICAgICAgICAgIG1lc3NhZ2VMYW5ndWFnZVZlcnNpb25JbnZhbGlkSW5Eb3RQYWNrYWdlcywgb2Zmc2V0LCBsZW5ndGgsIGZpbGVVcmkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gSWYgbm8gbGFuZ3VhZ2UgdmVyc2lvbiBoYXMgYmVlbiBzZXQsIHRoZSBkZWZhdWx0IGlzIHVzZWQuCiAgICAvLyBJZiB0cnlpbmcgdG8gc2V0IGEgbGFuZ2F1Z2UgdmVyc2lvbiB0aGF0IGlzIGhpZ2hlciB0aGFuIHRoZSAiYWxyZWFkeS1zZXQiCiAgICAvLyB2ZXJzaW9uIGl0J3MgYW4gZXJyb3IuCiAgICBpZiAobWFqb3IgPiBsaWJyYXJ5Lmxhbmd1YWdlVmVyc2lvbk1ham9yIHx8CiAgICAgICAgKG1ham9yID09IGxpYnJhcnkubGFuZ3VhZ2VWZXJzaW9uTWFqb3IgJiYKICAgICAgICAgICAgbWlub3IgPiBsaWJyYXJ5Lmxhbmd1YWdlVmVyc2lvbk1pbm9yKSkgewogICAgICBhZGRQb3N0cG9uZWRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVMYW5ndWFnZVZlcnNpb25Ub29IaWdoLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgbGlicmFyeS5sYW5ndWFnZVZlcnNpb25NYWpvciwgbGlicmFyeS5sYW5ndWFnZVZlcnNpb25NaW5vciksCiAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICBsZW5ndGgsCiAgICAgICAgICBmaWxlVXJpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGlicmFyeS5zZXRMYW5ndWFnZVZlcnNpb24obWFqb3IsIG1pbm9yKTsKICB9CgogIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciBhZGRDb25zdHJ1Y3RvclJlZmVyZW5jZShPYmplY3QgbmFtZSwKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gdHlwZUFyZ3VtZW50cywgU3RyaW5nIHN1ZmZpeCwgaW50IGNoYXJPZmZzZXQpIHsKICAgIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciByZWYgPSBuZXcgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyKAogICAgICAgIG5hbWUsIHR5cGVBcmd1bWVudHMsIHN1ZmZpeCwgdGhpcywgY2hhck9mZnNldCk7CiAgICBjb25zdHJ1Y3RvclJlZmVyZW5jZXMuYWRkKHJlZik7CiAgICByZXR1cm4gcmVmOwogIH0KCiAgdm9pZCBiZWdpbk5lc3RlZERlY2xhcmF0aW9uKFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQga2luZCwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIGhhc01lbWJlcnM6IHRydWV9KSB7CiAgICBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciA9CiAgICAgICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIuY3JlYXRlTmVzdGVkKGtpbmQsIG5hbWUsIGhhc01lbWJlcnMpOwogIH0KCiAgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciBlbmROZXN0ZWREZWNsYXJhdGlvbigKICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZCBraW5kLCBTdHJpbmcgbmFtZSkgewogICAgYXNzZXJ0KAogICAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLmtpbmQgPT0ga2luZCwKICAgICAgICAiVW5leHBlY3RlZCBkZWNsYXJhdGlvbi4gIgogICAgICAgICJUcnlpbmcgdG8gZW5kIGEgJHtjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5raW5kfSBhcyBhICRraW5kLiIpOwogICAgYXNzZXJ0KAogICAgICAgIChuYW1lPy5zdGFydHNXaXRoKGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLm5hbWUpID8/CiAgICAgICAgICAgICAgICAobmFtZSA9PSBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5uYW1lKSkgfHwKICAgICAgICAgICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZSA9PSAib3BlcmF0b3IiIHx8CiAgICAgICAgICAgIGlkZW50aWNhbChuYW1lLCAiPHN5bnRheC1lcnJvcj4iKSwKICAgICAgICAiJHtuYW1lfSAhPSAke2N1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLm5hbWV9Iik7CiAgICBUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyIHByZXZpb3VzID0gY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXI7CiAgICBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciA9IGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLnBhcmVudDsKICAgIHJldHVybiBwcmV2aW91czsKICB9CgogIGJvb2wgdXJpSXNWYWxpZChVcmkgdXJpKSA9PiB1cmkuc2NoZW1lICE9IE1BTEZPUk1FRF9VUklfU0NIRU1FOwoKICBVcmkgcmVzb2x2ZShVcmkgYmFzZVVyaSwgU3RyaW5nIHVyaSwgaW50IHVyaU9mZnNldCwge2lzUGFydDogZmFsc2V9KSB7CiAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgYWRkUHJvYmxlbShtZXNzYWdlRXhwZWN0ZWRVcmksIHVyaU9mZnNldCwgbm9MZW5ndGgsIHRoaXMudXJpKTsKICAgICAgcmV0dXJuIG5ldyBVcmkoc2NoZW1lOiBNQUxGT1JNRURfVVJJX1NDSEVNRSk7CiAgICB9CiAgICBVcmkgcGFyc2VkVXJpOwogICAgdHJ5IHsKICAgICAgcGFyc2VkVXJpID0gVXJpLnBhcnNlKHVyaSk7CiAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICAvLyBQb2ludCB0byBwb3NpdGlvbiBpbiBzdHJpbmcgaW5kaWNhdGVkIGJ5IHRoZSBleGNlcHRpb24sCiAgICAgIC8vIG9yIHRvIHRoZSBpbml0aWFsIHF1b3RlIGlmIG5vIHBvc2l0aW9uIGlzIGdpdmVuLgogICAgICAvLyAoQXNzdW1lcyB0aGUgZGlyZWN0aXZlIGlzIHVzaW5nIGEgc2luZ2xlLWxpbmUgc3RyaW5nLikKICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvdWxkTm90UGFyc2VVcmkud2l0aEFyZ3VtZW50cyh1cmksIGUubWVzc2FnZSksCiAgICAgICAgICB1cmlPZmZzZXQgKyAxICsgKGUub2Zmc2V0ID8/IC0xKSwgMSwgdGhpcy51cmkpOwogICAgICByZXR1cm4gbmV3IFVyaSgKICAgICAgICAgIHNjaGVtZTogTUFMRk9STUVEX1VSSV9TQ0hFTUUsIHF1ZXJ5OiBVcmkuZW5jb2RlUXVlcnlDb21wb25lbnQodXJpKSk7CiAgICB9CiAgICBpZiAoaXNQYXJ0ICYmIGJhc2VVcmkuc2NoZW1lID09ICJkYXJ0IikgewogICAgICAvLyBSZXNvbHZlIHVzaW5nIHNwZWNpYWwgcnVsZXMgZm9yIGRhcnQ6IFVSSXMKICAgICAgcmV0dXJuIHJlc29sdmVSZWxhdGl2ZVVyaShiYXNlVXJpLCBwYXJzZWRVcmkpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJhc2VVcmkucmVzb2x2ZVVyaShwYXJzZWRVcmkpOwogICAgfQogIH0KCiAgU3RyaW5nIGNvbXB1dGVBbmRWYWxpZGF0ZUNvbnN0cnVjdG9yTmFtZShPYmplY3QgbmFtZSwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtpc0ZhY3Rvcnk6IGZhbHNlfSkgewogICAgU3RyaW5nIGNsYXNzTmFtZSA9IGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLm5hbWU7CiAgICBTdHJpbmcgcHJlZml4OwogICAgU3RyaW5nIHN1ZmZpeDsKICAgIGlmIChuYW1lIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgcHJlZml4ID0gbmFtZS5xdWFsaWZpZXI7CiAgICAgIHN1ZmZpeCA9IG5hbWUubmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIHByZWZpeCA9IG5hbWU7CiAgICAgIHN1ZmZpeCA9IG51bGw7CiAgICB9CiAgICBpZiAocHJlZml4ID09IGNsYXNzTmFtZSkgewogICAgICByZXR1cm4gc3VmZml4ID8/ICIiOwogICAgfQogICAgaWYgKHN1ZmZpeCA9PSBudWxsICYmICFpc0ZhY3RvcnkpIHsKICAgICAgLy8gQSBsZWdhbCBuYW1lIGZvciBhIHJlZ3VsYXIgbWV0aG9kLCBidXQgbm90IGZvciBhIGNvbnN0cnVjdG9yLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBhZGRQcm9ibGVtKAogICAgICAgIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWUsIGNoYXJPZmZzZXQsIHByZWZpeC5sZW5ndGgsIGZpbGVVcmksCiAgICAgICAgY29udGV4dDogWwogICAgICAgICAgdGVtcGxhdGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZSkKICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZS5sZW5ndGgpCiAgICAgICAgXSk7CgogICAgcmV0dXJuIHN1ZmZpeDsKICB9CgogIHZvaWQgYWRkRXhwb3J0KAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyB1cmksCiAgICAgIExpc3Q8Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbnMsCiAgICAgIExpc3Q8Q29tYmluYXRvcj4gY29tYmluYXRvcnMsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgdXJpT2Zmc2V0KSB7CiAgICBpZiAoY29uZmlndXJhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKENvbmZpZ3VyYXRpb24gY29uZmlnIGluIGNvbmZpZ3VyYXRpb25zKSB7CiAgICAgICAgaWYgKGxvb2t1cEltcG9ydENvbmRpdGlvbihjb25maWcuZG90dGVkTmFtZSkgPT0gY29uZmlnLmNvbmRpdGlvbikgewogICAgICAgICAgdXJpID0gY29uZmlnLmltcG9ydFVyaTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZhciBleHBvcnRlZExpYnJhcnkgPSBsb2FkZXIKICAgICAgICAucmVhZChyZXNvbHZlKHRoaXMudXJpLCB1cmksIHVyaU9mZnNldCksIGNoYXJPZmZzZXQsIGFjY2Vzc29yOiB0aGlzKTsKICAgIGV4cG9ydGVkTGlicmFyeS5hZGRFeHBvcnRlcih0aGlzLCBjb21iaW5hdG9ycywgY2hhck9mZnNldCk7CiAgICBleHBvcnRzLmFkZChuZXcgRXhwb3J0KHRoaXMsIGV4cG9ydGVkTGlicmFyeSwgY29tYmluYXRvcnMsIGNoYXJPZmZzZXQpKTsKICB9CgogIFN0cmluZyBsb29rdXBJbXBvcnRDb25kaXRpb24oU3RyaW5nIGRvdHRlZE5hbWUpIHsKICAgIGNvbnN0IFN0cmluZyBwcmVmaXggPSAiZGFydC5saWJyYXJ5LiI7CiAgICBpZiAoIWRvdHRlZE5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSByZXR1cm4gIiI7CiAgICBkb3R0ZWROYW1lID0gZG90dGVkTmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7CiAgICBpZiAoIWxvYWRlci50YXJnZXQudXJpVHJhbnNsYXRvci5pc0xpYnJhcnlTdXBwb3J0ZWQoZG90dGVkTmFtZSkpIHJldHVybiAiIjsKCiAgICBMaWJyYXJ5QnVpbGRlciBpbXBvcnRlZCA9CiAgICAgICAgbG9hZGVyLmJ1aWxkZXJzW25ldyBVcmkoc2NoZW1lOiAiZGFydCIsIHBhdGg6IGRvdHRlZE5hbWUpXTsKCiAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkgewogICAgICBMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeSA9IGxvYWRlci5yZWFkKAogICAgICAgICAgcmVzb2x2ZSgKICAgICAgICAgICAgICB0aGlzLnVyaSwgbmV3IFVyaShzY2hlbWU6ICJkYXJ0IiwgcGF0aDogImNvcmUiKS50b1N0cmluZygpLCAtMSksCiAgICAgICAgICAtMSk7CiAgICAgIGltcG9ydGVkID0gY29yZUxpYnJhcnkKICAgICAgICAgIC5sb2FkZXIuYnVpbGRlcnNbbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogZG90dGVkTmFtZSldOwogICAgfQogICAgcmV0dXJuIGltcG9ydGVkICE9IG51bGwgPyAidHJ1ZSIgOiAiIjsKICB9CgogIHZvaWQgYWRkSW1wb3J0KAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyB1cmksCiAgICAgIExpc3Q8Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbnMsCiAgICAgIFN0cmluZyBwcmVmaXgsCiAgICAgIExpc3Q8Q29tYmluYXRvcj4gY29tYmluYXRvcnMsCiAgICAgIGJvb2wgZGVmZXJyZWQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgcHJlZml4Q2hhck9mZnNldCwKICAgICAgaW50IHVyaU9mZnNldCwKICAgICAgaW50IGltcG9ydEluZGV4KSB7CiAgICBpZiAoY29uZmlndXJhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKENvbmZpZ3VyYXRpb24gY29uZmlnIGluIGNvbmZpZ3VyYXRpb25zKSB7CiAgICAgICAgaWYgKGxvb2t1cEltcG9ydENvbmRpdGlvbihjb25maWcuZG90dGVkTmFtZSkgPT0gY29uZmlnLmNvbmRpdGlvbikgewogICAgICAgICAgdXJpID0gY29uZmlnLmltcG9ydFVyaTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgPSBudWxsOwoKICAgIFVyaSByZXNvbHZlZFVyaTsKICAgIFN0cmluZyBuYXRpdmVQYXRoOwogICAgY29uc3QgU3RyaW5nIG5hdGl2ZUV4dGVuc2lvblNjaGVtZSA9ICJkYXJ0LWV4dDoiOwogICAgaWYgKHVyaS5zdGFydHNXaXRoKG5hdGl2ZUV4dGVuc2lvblNjaGVtZSkpIHsKICAgICAgU3RyaW5nIHN0cmlwcGVkVXJpID0gdXJpLnN1YnN0cmluZyhuYXRpdmVFeHRlbnNpb25TY2hlbWUubGVuZ3RoKTsKICAgICAgaWYgKHN0cmlwcGVkVXJpLnN0YXJ0c1dpdGgoInBhY2thZ2UiKSkgewogICAgICAgIHJlc29sdmVkVXJpID0gcmVzb2x2ZSgKICAgICAgICAgICAgdGhpcy51cmksIHN0cmlwcGVkVXJpLCB1cmlPZmZzZXQgKyBuYXRpdmVFeHRlbnNpb25TY2hlbWUubGVuZ3RoKTsKICAgICAgICByZXNvbHZlZFVyaSA9IGxvYWRlci50YXJnZXQudHJhbnNsYXRlVXJpKHJlc29sdmVkVXJpKTsKICAgICAgICBuYXRpdmVQYXRoID0gcmVzb2x2ZWRVcmkudG9TdHJpbmcoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXNvbHZlZFVyaSA9IG5ldyBVcmkoc2NoZW1lOiAiZGFydC1leHQiLCBwYXRoU2VnbWVudHM6IFt1cmldKTsKICAgICAgICBuYXRpdmVQYXRoID0gdXJpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXNvbHZlZFVyaSA9IHJlc29sdmUodGhpcy51cmksIHVyaSwgdXJpT2Zmc2V0KTsKICAgICAgYnVpbGRlciA9IGxvYWRlci5yZWFkKHJlc29sdmVkVXJpLCB1cmlPZmZzZXQsIGFjY2Vzc29yOiB0aGlzKTsKICAgIH0KCiAgICBpbXBvcnRzLmFkZChuZXcgSW1wb3J0KHRoaXMsIGJ1aWxkZXIsIGRlZmVycmVkLCBwcmVmaXgsIGNvbWJpbmF0b3JzLAogICAgICAgIGNvbmZpZ3VyYXRpb25zLCBjaGFyT2Zmc2V0LCBwcmVmaXhDaGFyT2Zmc2V0LCBpbXBvcnRJbmRleCwKICAgICAgICBuYXRpdmVJbXBvcnRQYXRoOiBuYXRpdmVQYXRoKSk7CiAgfQoKICB2b2lkIGFkZFBhcnQoTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLCBTdHJpbmcgdXJpLCBpbnQgY2hhck9mZnNldCkgewogICAgVXJpIHJlc29sdmVkVXJpOwogICAgVXJpIG5ld0ZpbGVVcmk7CiAgICByZXNvbHZlZFVyaSA9IHJlc29sdmUodGhpcy51cmksIHVyaSwgY2hhck9mZnNldCwgaXNQYXJ0OiB0cnVlKTsKICAgIG5ld0ZpbGVVcmkgPSByZXNvbHZlKGZpbGVVcmksIHVyaSwgY2hhck9mZnNldCk7CiAgICBwYXJ0cy5hZGQobG9hZGVyLnJlYWQocmVzb2x2ZWRVcmksIGNoYXJPZmZzZXQsCiAgICAgICAgZmlsZVVyaTogbmV3RmlsZVVyaSwgYWNjZXNzb3I6IHRoaXMpKTsKICAgIHBhcnRPZmZzZXRzLmFkZChjaGFyT2Zmc2V0KTsKCiAgICAvLyBUT0RPKGFoZSk6IFttZXRhZGF0YV0gc2hvdWxkIGJlIHN0b3JlZCwgZXZhbHVhdGVkLCBhbmQgYWRkZWQgdG8gW3BhcnRdLgogICAgTGlicmFyeVBhcnQgcGFydCA9IG5ldyBMaWJyYXJ5UGFydCg8RXhwcmVzc2lvbj5bXSwgdXJpKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgbGlicmFyeS5hZGRQYXJ0KHBhcnQpOwogIH0KCiAgdm9pZCBhZGRQYXJ0T2YoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwgU3RyaW5nIG5hbWUsIFN0cmluZyB1cmksIGludCB1cmlPZmZzZXQpIHsKICAgIHBhcnRPZk5hbWUgPSBuYW1lOwogICAgaWYgKHVyaSAhPSBudWxsKSB7CiAgICAgIHBhcnRPZlVyaSA9IHJlc29sdmUodGhpcy51cmksIHVyaSwgdXJpT2Zmc2V0KTsKICAgICAgVXJpIG5ld0ZpbGVVcmkgPSByZXNvbHZlKGZpbGVVcmksIHVyaSwgdXJpT2Zmc2V0KTsKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGxvYWRlci5yZWFkKHBhcnRPZlVyaSwgdXJpT2Zmc2V0LAogICAgICAgICAgZmlsZVVyaTogbmV3RmlsZVVyaSwgYWNjZXNzb3I6IHRoaXMpOwogICAgICBpZiAobG9hZGVyLmZpcnN0ID09IHRoaXMpIHsKICAgICAgICAvLyBUaGlzIGlzIGEgcGFydCwgYW5kIGl0IHdhcyB0aGUgZmlyc3QgaW5wdXQuIExldCB0aGUgbG9hZGVyIGtub3cKICAgICAgICAvLyBhYm91dCB0aGF0LgogICAgICAgIGxvYWRlci5maXJzdCA9IGxpYnJhcnk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYWRkRmllbGRzKFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLCBUeXBlQnVpbGRlciB0eXBlLCBMaXN0PEZpZWxkSW5mbz4gZmllbGRJbmZvcykgewogICAgZm9yIChGaWVsZEluZm8gaW5mbyBpbiBmaWVsZEluZm9zKSB7CiAgICAgIGJvb2wgaXNDb25zdCA9IG1vZGlmaWVycyAmIGNvbnN0TWFzayAhPSAwOwogICAgICBib29sIGlzRmluYWwgPSBtb2RpZmllcnMgJiBmaW5hbE1hc2sgIT0gMDsKICAgICAgYm9vbCBwb3RlbnRpYWxseU5lZWRJbml0aWFsaXplckluT3V0bGluZSA9IGlzQ29uc3QgfHwgaXNGaW5hbDsKICAgICAgVG9rZW4gc3RhcnRUb2tlbjsKICAgICAgaWYgKHBvdGVudGlhbGx5TmVlZEluaXRpYWxpemVySW5PdXRsaW5lIHx8CiAgICAgICAgICAodHlwZSA9PSBudWxsICYmICFsZWdhY3lNb2RlKSkgewogICAgICAgIHN0YXJ0VG9rZW4gPSBpbmZvLmluaXRpYWxpemVyVG9rZW47CiAgICAgIH0KICAgICAgaWYgKHN0YXJ0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIC8vIEV4dHJhY3Qgb25seSB0aGUgdG9rZW5zIGZvciB0aGUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBmcm9tIHRoZQogICAgICAgIC8vIHRva2VuIHN0cmVhbS4KICAgICAgICBUb2tlbiBlbmRUb2tlbiA9IGluZm8uYmVmb3JlTGFzdDsKICAgICAgICBlbmRUb2tlbi5zZXROZXh0KG5ldyBUb2tlbi5lb2YoZW5kVG9rZW4ubmV4dC5vZmZzZXQpKTsKICAgICAgICBuZXcgVG9rZW4uZW9mKHN0YXJ0VG9rZW4ucHJldmlvdXMub2Zmc2V0KS5zZXROZXh0KHN0YXJ0VG9rZW4pOwogICAgICB9CiAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIgPSBpbmZvLmluaXRpYWxpemVyVG9rZW4gIT0gbnVsbDsKICAgICAgYWRkRmllbGQoZG9jdW1lbnRhdGlvbkNvbW1lbnQsIG1ldGFkYXRhLCBtb2RpZmllcnMsIHR5cGUsIGluZm8ubmFtZSwKICAgICAgICAgIGluZm8uY2hhck9mZnNldCwgaW5mby5jaGFyRW5kT2Zmc2V0LCBzdGFydFRva2VuLCBoYXNJbml0aWFsaXplciwKICAgICAgICAgIGNvbnN0SW5pdGlhbGl6ZXJUb2tlbjoKICAgICAgICAgICAgICBwb3RlbnRpYWxseU5lZWRJbml0aWFsaXplckluT3V0bGluZSA/IHN0YXJ0VG9rZW4gOiBudWxsKTsKICAgIH0KICB9CgogIEJ1aWxkZXIgYWRkQnVpbGRlcihTdHJpbmcgbmFtZSwgQnVpbGRlciBkZWNsYXJhdGlvbiwgaW50IGNoYXJPZmZzZXQpIHsKICAgIC8vIFRPRE8oYWhlKTogU2V0IHRoZSBwYXJlbnQgY29ycmVjdGx5IGhlcmUuIENvdWxkIHRoZW4gY2hhbmdlIHRoZQogICAgLy8gaW1wbGVtZW50YXRpb24gb2YgTWVtYmVyQnVpbGRlci5pc1RvcExldmVsIHRvIHRlc3QgZXhwbGljaXRseSBmb3IgYQogICAgLy8gTGlicmFyeUJ1aWxkZXIuCiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIHVuaGFuZGxlZCgibnVsbCIsICJuYW1lIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBpZiAoY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgPT0gbGlicmFyeURlY2xhcmF0aW9uKSB7CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBNZW1iZXJCdWlsZGVyKSB7CiAgICAgICAgZGVjbGFyYXRpb24ucGFyZW50ID0gdGhpczsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyKSB7CiAgICAgICAgZGVjbGFyYXRpb24ucGFyZW50ID0gdGhpczsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgYXNzZXJ0KGRlY2xhcmF0aW9uLnBhcmVudCA9PSB0aGlzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdW5oYW5kbGVkKAogICAgICAgICAgICAiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iLCAiYWRkQnVpbGRlciIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIucGFyZW50ID09IGxpYnJhcnlEZWNsYXJhdGlvbik7CiAgICB9CiAgICBib29sIGlzQ29uc3RydWN0b3IgPSBkZWNsYXJhdGlvbiBpcyBGdW5jdGlvbkJ1aWxkZXIgJiYKICAgICAgICAoZGVjbGFyYXRpb24uaXNDb25zdHJ1Y3RvciB8fCBkZWNsYXJhdGlvbi5pc0ZhY3RvcnkpOwogICAgaWYgKCFpc0NvbnN0cnVjdG9yICYmIG5hbWUgPT0gY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZSkgewogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZU1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3MsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgIH0KICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IG1lbWJlcnMgPSBpc0NvbnN0cnVjdG9yCiAgICAgICAgPyBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5jb25zdHJ1Y3RvcnMKICAgICAgICA6IChkZWNsYXJhdGlvbi5pc1NldHRlcgogICAgICAgICAgICA/IGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLnNldHRlcnMKICAgICAgICAgICAgOiBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5tZW1iZXJzKTsKICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBtZW1iZXJzW25hbWVdOwogICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCAmJiBkZWNsYXJhdGlvbi5uZXh0ICE9IGV4aXN0aW5nKSB7CiAgICAgIHVuZXhwZWN0ZWQoCiAgICAgICAgICAiJHtkZWNsYXJhdGlvbi5uZXh0LmZpbGVVcml9QCR7ZGVjbGFyYXRpb24ubmV4dC5jaGFyT2Zmc2V0fSIsCiAgICAgICAgICAiJHtleGlzdGluZz8uZmlsZVVyaX1AJHtleGlzdGluZz8uY2hhck9mZnNldH0iLAogICAgICAgICAgZGVjbGFyYXRpb24uY2hhck9mZnNldCwKICAgICAgICAgIGRlY2xhcmF0aW9uLmZpbGVVcmkpOwogICAgfQogICAgZGVjbGFyYXRpb24ubmV4dCA9IGV4aXN0aW5nOwogICAgaWYgKGRlY2xhcmF0aW9uIGlzIFByZWZpeEJ1aWxkZXIgJiYgZXhpc3RpbmcgaXMgUHJlZml4QnVpbGRlcikgewogICAgICBhc3NlcnQoZXhpc3RpbmcubmV4dCBpcyEgUHJlZml4QnVpbGRlcik7CiAgICAgIEJ1aWxkZXIgZGVmZXJyZWQ7CiAgICAgIEJ1aWxkZXIgb3RoZXI7CiAgICAgIGlmIChkZWNsYXJhdGlvbi5kZWZlcnJlZCkgewogICAgICAgIGRlZmVycmVkID0gZGVjbGFyYXRpb247CiAgICAgICAgb3RoZXIgPSBleGlzdGluZzsKICAgICAgfSBlbHNlIGlmIChleGlzdGluZy5kZWZlcnJlZCkgewogICAgICAgIGRlZmVycmVkID0gZXhpc3Rpbmc7CiAgICAgICAgb3RoZXIgPSBkZWNsYXJhdGlvbjsKICAgICAgfQogICAgICBpZiAoZGVmZXJyZWQgIT0gbnVsbCkgewogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgZGVmZXJyZWQuY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmksCiAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICB0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oZmlsZVVyaSwgb3RoZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgIF0pOwogICAgICB9CiAgICAgIHJldHVybiBleGlzdGluZwogICAgICAgIC4uZXhwb3J0U2NvcGUubWVyZ2UoZGVjbGFyYXRpb24uZXhwb3J0U2NvcGUsCiAgICAgICAgICAgIChTdHJpbmcgbmFtZSwgQnVpbGRlciBleGlzdGluZywgQnVpbGRlciBtZW1iZXIpIHsKICAgICAgICAgIHJldHVybiBjb21wdXRlQW1iaWd1b3VzRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgbmFtZSwgZXhpc3RpbmcsIG1lbWJlciwgY2hhck9mZnNldCk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKGlzRHVwbGljYXRlZERlY2xhcmF0aW9uKGV4aXN0aW5nLCBkZWNsYXJhdGlvbikpIHsKICAgICAgU3RyaW5nIGZ1bGxOYW1lID0gbmFtZTsKICAgICAgaWYgKGlzQ29uc3RydWN0b3IpIHsKICAgICAgICBpZiAobmFtZS5pc0VtcHR5KSB7CiAgICAgICAgICBmdWxsTmFtZSA9IGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLm5hbWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZ1bGxOYW1lID0gIiR7Y3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZX0uJG5hbWUiOwogICAgICAgIH0KICAgICAgfQogICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLndpdGhBcmd1bWVudHMoZnVsbE5hbWUpLAogICAgICAgICAgY2hhck9mZnNldCwgZnVsbE5hbWUubGVuZ3RoLCBkZWNsYXJhdGlvbi5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZQogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVsbE5hbWUpCiAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmZpbGVVcmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIGZ1bGxOYW1lLmxlbmd0aCkKICAgICAgICAgIF0pOwogICAgfQogICAgcmV0dXJuIG1lbWJlcnNbbmFtZV0gPSBkZWNsYXJhdGlvbjsKICB9CgogIGJvb2wgaXNEdXBsaWNhdGVkRGVjbGFyYXRpb24oQnVpbGRlciBleGlzdGluZywgQnVpbGRlciBvdGhlcikgewogICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIEJ1aWxkZXIgbmV4dCA9IGV4aXN0aW5nLm5leHQ7CiAgICBpZiAobmV4dCA9PSBudWxsKSB7CiAgICAgIGlmIChleGlzdGluZy5pc0dldHRlciAmJiBvdGhlci5pc1NldHRlcikgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoZXhpc3RpbmcuaXNTZXR0ZXIgJiYgb3RoZXIuaXNHZXR0ZXIpIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChuZXh0IGlzIENsYXNzQnVpbGRlciAmJiAhbmV4dC5pc01peGluQXBwbGljYXRpb24pIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGV4aXN0aW5nIGlzIENsYXNzQnVpbGRlciAmJiBvdGhlciBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgLy8gV2UgYWxsb3cgbXVsdGlwbGUgbWl4aW4gYXBwbGljYXRpb25zIHdpdGggdGhlIHNhbWUgbmFtZS4gQW4KICAgICAgLy8gYWx0ZXJuYXRpdmUgaXMgdG8gc2hhcmUgdGhlc2UgbWl4aW4gYXBwbGljYXRpb25zLiBUaGlzIHNpdHVhdGlvbiBjYW4KICAgICAgLy8gaGFwcGVuIGlmIHlvdSBoYXZlIGBjbGFzcyBBIGV4dGVuZHMgT2JqZWN0IHdpdGggTWl4aW4ge31gIGFuZCBgY2xhc3MgQgogICAgICAvLyBleHRlbmRzIE9iamVjdCB3aXRoIE1peGluIHt9YCBpbiB0aGUgc2FtZSBsaWJyYXJ5LgogICAgICByZXR1cm4gIWV4aXN0aW5nLmlzTWl4aW5BcHBsaWNhdGlvbiB8fCAhb3RoZXIuaXNNaXhpbkFwcGxpY2F0aW9uOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBMaWJyYXJ5IGJ1aWxkKExpYnJhcnlCdWlsZGVyIGNvcmVMaWJyYXJ5LCB7Ym9vbCBtb2RpZnlUYXJnZXR9KSB7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb25CdWlsZGVycy5pc0VtcHR5KTsKICAgIGNhbkFkZEltcGxlbWVudGF0aW9uQnVpbGRlcnMgPSB0cnVlOwogICAgSXRlcmF0b3I8QnVpbGRlcj4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgYnVpbGRCdWlsZGVyKGl0ZXJhdG9yLmN1cnJlbnQsIGNvcmVMaWJyYXJ5KTsKICAgIH0KICAgIGZvciAoSW1wbGVtZW50YXRpb25JbmZvIGluZm8gaW4gaW1wbGVtZW50YXRpb25CdWlsZGVycykgewogICAgICBTdHJpbmcgbmFtZSA9IGluZm8ubmFtZTsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGluZm8uZGVjbGFyYXRpb247CiAgICAgIGludCBjaGFyT2Zmc2V0ID0gaW5mby5jaGFyT2Zmc2V0OwogICAgICBhZGRCdWlsZGVyKG5hbWUsIGRlY2xhcmF0aW9uLCBjaGFyT2Zmc2V0KTsKICAgICAgYnVpbGRCdWlsZGVyKGRlY2xhcmF0aW9uLCBjb3JlTGlicmFyeSk7CiAgICB9CiAgICBjYW5BZGRJbXBsZW1lbnRhdGlvbkJ1aWxkZXJzID0gZmFsc2U7CgogICAgc2NvcGUuc2V0dGVycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBzZXR0ZXIpIHsKICAgICAgQnVpbGRlciBtZW1iZXIgPSBzY29wZUJ1aWxkZXJbbmFtZV07CiAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCB8fAogICAgICAgICAgIW1lbWJlci5pc0ZpZWxkIHx8CiAgICAgICAgICBtZW1iZXIuaXNGaW5hbCB8fAogICAgICAgICAgbWVtYmVyLmlzQ29uc3QpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXIud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIHNldHRlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICAgIC8vIFRPRE8oYWhlKTogQ29udGV4dCB0byBwcmV2aW91cyBtZXNzYWdlPwogICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlci53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgbWVtYmVyLmNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgIH0pOwoKICAgIGlmIChtb2RpZnlUYXJnZXQgPT0gZmFsc2UpIHJldHVybiBsaWJyYXJ5OwoKICAgIGxpYnJhcnkuaXNTeW50aGV0aWMgPSBpc1N5bnRoZXRpYzsKICAgIGFkZERlcGVuZGVuY2llcyhsaWJyYXJ5LCBuZXcgU2V0PFNvdXJjZUxpYnJhcnlCdWlsZGVyPigpKTsKCiAgICBsb2FkZXIudGFyZ2V0Lm1ldGFkYXRhQ29sbGVjdG9yCiAgICAgICAgPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudChsaWJyYXJ5LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CgogICAgbGlicmFyeS5uYW1lID0gbmFtZTsKICAgIGxpYnJhcnkucHJvY2VkdXJlcy5zb3J0KGNvbXBhcmVQcm9jZWR1cmVzKTsKCiAgICBpZiAodW5zZXJpYWxpemFibGVFeHBvcnRzICE9IG51bGwpIHsKICAgICAgbGlicmFyeS5hZGRNZW1iZXIobmV3IEZpZWxkKG5ldyBOYW1lKCJfZXhwb3J0cyMiLCBsaWJyYXJ5KSwKICAgICAgICAgIGluaXRpYWxpemVyOiBuZXcgU3RyaW5nTGl0ZXJhbChqc29uRW5jb2RlKHVuc2VyaWFsaXphYmxlRXhwb3J0cykpLAogICAgICAgICAgaXNTdGF0aWM6IHRydWUsCiAgICAgICAgICBpc0NvbnN0OiB0cnVlKSk7CiAgICB9CgogICAgcmV0dXJuIGxpYnJhcnk7CiAgfQoKICAvLy8gVXNlZCB0byBhZGQgaW1wbGVtZW50YXRpb24gYnVpbGRlciBkdXJpbmcgdGhlIGNhbGwgdG8gW2J1aWxkXSBhYm92ZS4KICAvLy8gQ3VycmVudGx5LCBvbmx5IGFub255bW91cyBtaXhpbnMgYXJlIHVzaW5nIGltcGxlbWVudGF0aW9uIGJ1aWxkZXJzIChzZWUKICAvLy8gW01peGluQXBwbGljYXRpb25CdWlsZGVyXQogIC8vLyAoLi4va2VybmVsL2tlcm5lbF9taXhpbl9hcHBsaWNhdGlvbl9idWlsZGVyLmRhcnQpKS4KICB2b2lkIGFkZEltcGxlbWVudGF0aW9uQnVpbGRlcigKICAgICAgU3RyaW5nIG5hbWUsIEJ1aWxkZXIgZGVjbGFyYXRpb24sIGludCBjaGFyT2Zmc2V0KSB7CiAgICBhc3NlcnQoY2FuQWRkSW1wbGVtZW50YXRpb25CdWlsZGVycywgIiR1cmkiKTsKICAgIGltcGxlbWVudGF0aW9uQnVpbGRlcnMKICAgICAgICAuYWRkKG5ldyBJbXBsZW1lbnRhdGlvbkluZm8obmFtZSwgZGVjbGFyYXRpb24sIGNoYXJPZmZzZXQpKTsKICB9CgogIHZvaWQgdmFsaWRhdGVQYXJ0KFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnksIFNldDxVcmk+IHVzZWRQYXJ0cykgewogICAgaWYgKGxpYnJhcnkgIT0gbnVsbCAmJiBwYXJ0cy5pc05vdEVtcHR5KSB7CiAgICAgIC8vIElmIFtsaWJyYXJ5XSBpcyBudWxsLCB3ZSBoYXZlIGFscmVhZHkgcmVwb3J0ZWQgYSBwcm9ibGVtIHRoYXQgdGhpcwogICAgICAvLyBwYXJ0IGlzIG9ycGhhbmVkLgogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICBtZXNzYWdlUGFydEluUGFydExpYnJhcnlDb250ZXh0LndpdGhMb2NhdGlvbihsaWJyYXJ5LmZpbGVVcmksIC0xLCAxKSwKICAgICAgXTsKICAgICAgZm9yIChpbnQgb2Zmc2V0IGluIHBhcnRPZmZzZXRzKSB7CiAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlUGFydEluUGFydCwgb2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSwKICAgICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICAgIH0KICAgICAgZm9yIChTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0IGluIHBhcnRzKSB7CiAgICAgICAgLy8gTWFyayB0aGlzIHBhcnQgYXMgdXNlZCBzbyB3ZSBkb24ndCByZXBvcnQgaXQgYXMgb3JwaGFuZWQuCiAgICAgICAgdXNlZFBhcnRzLmFkZChwYXJ0LnVyaSk7CiAgICAgIH0KICAgIH0KICAgIHBhcnRzLmNsZWFyKCk7CiAgICBpZiAoZXhwb3J0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCA9IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgbWVzc2FnZVBhcnRFeHBvcnRDb250ZXh0LndpdGhMb2NhdGlvbihmaWxlVXJpLCAtMSwgMSksCiAgICAgIF07CiAgICAgIGZvciAoRXhwb3J0IGV4cG9ydCBpbiBleHBvcnRlcnMpIHsKICAgICAgICBleHBvcnQuZXhwb3J0ZXIuYWRkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZVBhcnRFeHBvcnQsIGV4cG9ydC5jaGFyT2Zmc2V0LCAiZXhwb3J0Ii5sZW5ndGgsIG51bGwsCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGluY2x1ZGVQYXJ0cyhTZXQ8VXJpPiB1c2VkUGFydHMpIHsKICAgIFNldDxVcmk+IHNlZW5QYXJ0cyA9IG5ldyBTZXQ8VXJpPigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIGludCBwYXJ0T2Zmc2V0ID0gcGFydE9mZnNldHNbaV07CiAgICAgIGlmIChwYXJ0ID09IHRoaXMpIHsKICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VQYXJ0T2ZTZWxmLCAtMSwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICB9IGVsc2UgaWYgKHNlZW5QYXJ0cy5hZGQocGFydC5maWxlVXJpKSkgewogICAgICAgIGlmIChwYXJ0LnBhcnRPZkxpYnJhcnkgIT0gbnVsbCkgewogICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlUGFydE9mVHdvTGlicmFyaWVzLCAtMSwgbm9MZW5ndGgsIHBhcnQuZmlsZVVyaSwKICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICBtZXNzYWdlUGFydE9mVHdvTGlicmFyaWVzQ29udGV4dC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgcGFydC5wYXJ0T2ZMaWJyYXJ5LmZpbGVVcmksIC0xLCBub0xlbmd0aCksCiAgICAgICAgICAgICAgICBtZXNzYWdlUGFydE9mVHdvTGlicmFyaWVzQ29udGV4dC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlVXJpLCAtMSwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChpc1BhdGNoKSB7CiAgICAgICAgICAgIHVzZWRQYXJ0cy5hZGQocGFydC5maWxlVXJpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVzZWRQYXJ0cy5hZGQocGFydC51cmkpOwogICAgICAgICAgfQogICAgICAgICAgaW5jbHVkZVBhcnQocGFydCwgdXNlZFBhcnRzLCBwYXJ0T2Zmc2V0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZVBhcnRUd2ljZS53aXRoQXJndW1lbnRzKHBhcnQuZmlsZVVyaSksIC0xLCBub0xlbmd0aCwKICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgaW5jbHVkZVBhcnQoCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcnQsIFNldDxVcmk+IHVzZWRQYXJ0cywgaW50IHBhcnRPZmZzZXQpIHsKICAgIGlmIChwYXJ0LnBhcnRPZlVyaSAhPSBudWxsKSB7CiAgICAgIGlmICh1cmlJc1ZhbGlkKHBhcnQucGFydE9mVXJpKSAmJiBwYXJ0LnBhcnRPZlVyaSAhPSB1cmkpIHsKICAgICAgICAvLyBUaGlzIGlzIGFuIGVycm9yLCBidXQgdGhlIHBhcnQgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZiBwYXJ0cywKICAgICAgICAvLyBzbyB0aGF0IG1ldGFkYXRhIGFubm90YXRpb25zIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVQYXJ0T2ZVcmlNaXNtYXRjaC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgcGFydC5maWxlVXJpLCB1cmksIHBhcnQucGFydE9mVXJpKSwKICAgICAgICAgICAgcGFydE9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXJ0LnBhcnRPZk5hbWUgIT0gbnVsbCkgewogICAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgaWYgKHBhcnQucGFydE9mTmFtZSAhPSBuYW1lKSB7CiAgICAgICAgICAvLyBUaGlzIGlzIGFuIGVycm9yLCBidXQgdGhlIHBhcnQgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZgogICAgICAgICAgLy8gcGFydHMsIHNvIHRoYXQgbWV0YWRhdGEgYW5ub3RhdGlvbnMgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAgICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgICAgdGVtcGxhdGVQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgIHBhcnQuZmlsZVVyaSwgbmFtZSwgcGFydC5wYXJ0T2ZOYW1lKSwKICAgICAgICAgICAgICBwYXJ0T2Zmc2V0LAogICAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaGlzIGlzIGFuIGVycm9yLCBidXQgdGhlIHBhcnQgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZiBwYXJ0cywKICAgICAgICAvLyBzbyB0aGF0IG1ldGFkYXRhIGFubm90YXRpb25zIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVQYXJ0T2ZVc2VVcmkud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIHBhcnQuZmlsZVVyaSwgZmlsZVVyaSwgcGFydC5wYXJ0T2ZOYW1lKSwKICAgICAgICAgICAgcGFydE9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gVGhpcyBpcyBhbiBlcnJvciwgYnV0IHRoZSBwYXJ0IGlzIG5vdCByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb2YgcGFydHMsCiAgICAgIC8vIHNvIHRoYXQgbWV0YWRhdGEgYW5ub3RhdGlvbnMgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAgICAgYXNzZXJ0KCFwYXJ0LmlzUGFydCk7CiAgICAgIGlmICh1cmlJc1ZhbGlkKHBhcnQuZmlsZVVyaSkpIHsKICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlTWlzc2luZ1BhcnRPZi53aXRoQXJndW1lbnRzKHBhcnQuZmlsZVVyaSksCiAgICAgICAgICAgIHBhcnRPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSB0byBtYXRjaC4KICAgIGlmICgodGhpcy5sYW5ndWFnZVZlcnNpb25FeHBsaWNpdGx5U2V0ICE9CiAgICAgICAgICAgIHBhcnQubGFuZ3VhZ2VWZXJzaW9uRXhwbGljaXRseVNldCkgfHwKICAgICAgICAodGhpcy5saWJyYXJ5Lmxhbmd1YWdlVmVyc2lvbk1ham9yICE9CiAgICAgICAgICAgICAgICBwYXJ0LmxpYnJhcnkubGFuZ3VhZ2VWZXJzaW9uTWFqb3IgfHwKICAgICAgICAgICAgdGhpcy5saWJyYXJ5Lmxhbmd1YWdlVmVyc2lvbk1pbm9yICE9CiAgICAgICAgICAgICAgICBwYXJ0LmxpYnJhcnkubGFuZ3VhZ2VWZXJzaW9uTWlub3IpKSB7CiAgICAgIC8vIFRoaXMgaXMgYW4gZXJyb3IsIGJ1dCB0aGUgcGFydCBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mCiAgICAgIC8vIHBhcnRzLCBzbyB0aGF0IG1ldGFkYXRhIGFubm90YXRpb25zIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICBtZXNzYWdlTGFuZ3VhZ2VWZXJzaW9uTWlzbWF0Y2hJblBhcnQsIHBhcnRPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHBhcnQudmFsaWRhdGVQYXJ0KHRoaXMsIHVzZWRQYXJ0cyk7CiAgICBOYW1lSXRlcmF0b3IgcGFydERlY2xhcmF0aW9ucyA9IHBhcnQubmFtZUl0ZXJhdG9yOwogICAgd2hpbGUgKHBhcnREZWNsYXJhdGlvbnMubW92ZU5leHQoKSkgewogICAgICBTdHJpbmcgbmFtZSA9IHBhcnREZWNsYXJhdGlvbnMubmFtZTsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IHBhcnREZWNsYXJhdGlvbnMuY3VycmVudDsKCiAgICAgIGlmIChkZWNsYXJhdGlvbi5uZXh0ICE9IG51bGwpIHsKICAgICAgICBMaXN0PEJ1aWxkZXI+IGR1cGxpY2F0ZWQgPSA8QnVpbGRlcj5bXTsKICAgICAgICB3aGlsZSAoZGVjbGFyYXRpb24ubmV4dCAhPSBudWxsKSB7CiAgICAgICAgICBkdXBsaWNhdGVkLmFkZChkZWNsYXJhdGlvbik7CiAgICAgICAgICBwYXJ0RGVjbGFyYXRpb25zLm1vdmVOZXh0KCk7CiAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnREZWNsYXJhdGlvbnMuY3VycmVudDsKICAgICAgICB9CiAgICAgICAgZHVwbGljYXRlZC5hZGQoZGVjbGFyYXRpb24pOwogICAgICAgIC8vIEhhbmRsZSBkdXBsaWNhdGVkIGRlY2xhcmF0aW9ucyBpbiB0aGUgcGFydC4KICAgICAgICAvLwogICAgICAgIC8vIER1cGxpY2F0ZWQgZGVjbGFyYXRpb25zIGFyZSBoYW5kbGVkIGJ5IGNyZWF0aW5nIGEgbGlua2VkIGxpc3QgdXNpbmcKICAgICAgICAvLyB0aGUgYG5leHRgIGZpZWxkLiBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIG1ha2luZyBhbGwgc2NvcGUgZW50cmllcyBiZQogICAgICAgIC8vIGEgYExpc3Q8RGVjbGFyYXRpb24+YC4KICAgICAgICAvLwogICAgICAgIC8vIFdlIG1haW50YWluIHRoZSBsaW5rZWQgbGlzdCBzbyB0aGF0IHRoZSBsYXN0IGVudHJ5IGlzIGVhc3kgdG8KICAgICAgICAvLyByZWNvZ25pemUgKGl0J3MgYG5leHRgIGZpZWxkIGlzIG51bGwpLiBUaGlzIG1lYW5zIHRoYXQgaXQgaXMKICAgICAgICAvLyByZXZlcnNlZCB3aXRoIHJlc3BlY3QgdG8gc291cmNlIGNvZGUgb3JkZXIuIFNpbmNlIGtlcm5lbCBkb2Vzbid0CiAgICAgICAgLy8gYWxsb3cgZHVwbGljYXRlZCBkZWNsYXJhdGlvbnMsIHdlIGVuc3VyZSB0aGF0IHdlIG9ubHkgYWRkIHRoZSBmaXJzdAogICAgICAgIC8vIGRlY2xhcmF0aW9uIHRvIHRoZSBrZXJuZWwgdHJlZS4KICAgICAgICAvLwogICAgICAgIC8vIFNpbmNlIHRoZSBkdXBsaWNhdGVkIGRlY2xhcmF0aW9ucyBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIHdlCiAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciBhcyB0aGlzIGlzIHNpbXBsZXIgYW5kIG5vcm1hbGx5CiAgICAgICAgLy8gbm90IGEgcHJvYmxlbS4gSG93ZXZlciwgaW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gY2FsbCBbYWRkQnVpbGRlcl0gaW4KICAgICAgICAvLyBzb3VyY2Ugb3JkZXIgYXMgaXQgd291bGQgb3RoZXJ3aXNlIGNyZWF0ZSBjeWNsZXMuCiAgICAgICAgLy8KICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gYmUgY2FyZWZ1bCBwcmVzZXJ2aW5nIHRoZSBvcmRlciBvZiB0aGUgbGlua3MuIFRoZQogICAgICAgIC8vIHBhcnQgbGlicmFyeSBzdGlsbCBrZWVwcyB0aGVzZSBkZWNsYXJhdGlvbnMgaW4gaXRzIHNjb3BlIHNvIHRoYXQKICAgICAgICAvLyBEaWV0TGlzdGVuZXIgY2FuIGZpbmQgdGhlbS4KICAgICAgICBmb3IgKGludCBpID0gZHVwbGljYXRlZC5sZW5ndGg7IGkgPiAwOyBpLS0pIHsKICAgICAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBkdXBsaWNhdGVkW2kgLSAxXTsKICAgICAgICAgIGFkZEJ1aWxkZXIobmFtZSwgZGVjbGFyYXRpb24sIGRlY2xhcmF0aW9uLmNoYXJPZmZzZXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBhZGRCdWlsZGVyKG5hbWUsIGRlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0KTsKICAgICAgfQogICAgfQogICAgdHlwZXMuYWRkQWxsKHBhcnQudHlwZXMpOwogICAgY29uc3RydWN0b3JSZWZlcmVuY2VzLmFkZEFsbChwYXJ0LmNvbnN0cnVjdG9yUmVmZXJlbmNlcyk7CiAgICBwYXJ0LnBhcnRPZkxpYnJhcnkgPSB0aGlzOwogICAgcGFydC5zY29wZS5iZWNvbWVQYXJ0T2Yoc2NvcGUpOwogICAgLy8gVE9ETyhhaGUpOiBJbmNsdWRlIG1ldGFkYXRhIGZyb20gcGFydD8KCiAgICBuYXRpdmVNZXRob2RzLmFkZEFsbChwYXJ0Lm5hdGl2ZU1ldGhvZHMpOwogICAgYm91bmRsZXNzVHlwZVZhcmlhYmxlcy5hZGRBbGwocGFydC5ib3VuZGxlc3NUeXBlVmFyaWFibGVzKTsKICAgIC8vIENoZWNrIHRoYXQgdGhlIHRhcmdldHMgYXJlIGRpZmZlcmVudC4gVGhpcyBpcyBub3Qgbm9ybWFsbHkgYSBwcm9ibGVtCiAgICAvLyBidXQgaXMgZm9yIHBhdGNoIGZpbGVzLgogICAgaWYgKHRhcmdldCAhPSBwYXJ0LnRhcmdldCAmJiBwYXJ0LnRhcmdldC5wcm9ibGVtc0FzSnNvbiAhPSBudWxsKSB7CiAgICAgIHRhcmdldC5wcm9ibGVtc0FzSnNvbiA/Pz0gPFN0cmluZz5bXTsKICAgICAgdGFyZ2V0LnByb2JsZW1zQXNKc29uLmFkZEFsbChwYXJ0LnRhcmdldC5wcm9ibGVtc0FzSnNvbik7CiAgICB9CiAgICBMaXN0PEZpZWxkQnVpbGRlcj4gcGFydEltcGxpY2l0bHlUeXBlZEZpZWxkcyA9CiAgICAgICAgcGFydC50YWtlSW1wbGljaXRseVR5cGVkRmllbGRzKCk7CiAgICBpZiAocGFydEltcGxpY2l0bHlUeXBlZEZpZWxkcyAhPSBudWxsKSB7CiAgICAgIGlmIChpbXBsaWNpdGx5VHlwZWRGaWVsZHMgPT0gbnVsbCkgewogICAgICAgIGltcGxpY2l0bHlUeXBlZEZpZWxkcyA9IHBhcnRJbXBsaWNpdGx5VHlwZWRGaWVsZHM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW1wbGljaXRseVR5cGVkRmllbGRzLmFkZEFsbChwYXJ0SW1wbGljaXRseVR5cGVkRmllbGRzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIGJ1aWxkSW5pdGlhbFNjb3BlcygpIHsKICAgIE5hbWVJdGVyYXRvciBpdGVyYXRvciA9IG5hbWVJdGVyYXRvcjsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIGFkZFRvRXhwb3J0U2NvcGUoaXRlcmF0b3IubmFtZSwgaXRlcmF0b3IuY3VycmVudCk7CiAgICB9CiAgfQoKICB2b2lkIGFkZEltcG9ydHNUb1Njb3BlKCkgewogICAgYm9vbCBleHBsaWNpdENvcmVJbXBvcnQgPSB0aGlzID09IGxvYWRlci5jb3JlTGlicmFyeTsKICAgIGZvciAoSW1wb3J0IGltcG9ydCBpbiBpbXBvcnRzKSB7CiAgICAgIGlmIChpbXBvcnQuaW1wb3J0ZWQgPT0gbG9hZGVyLmNvcmVMaWJyYXJ5KSB7CiAgICAgICAgZXhwbGljaXRDb3JlSW1wb3J0ID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoaW1wb3J0LmltcG9ydGVkPy5pc1BhcnQgPz8gZmFsc2UpIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZVBhcnRPZkluTGlicmFyeS53aXRoQXJndW1lbnRzKGltcG9ydC5pbXBvcnRlZC5maWxlVXJpKSwKICAgICAgICAgICAgaW1wb3J0LmNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgfQogICAgICBpbXBvcnQuZmluYWxpemVJbXBvcnRzKHRoaXMpOwogICAgfQogICAgaWYgKCFleHBsaWNpdENvcmVJbXBvcnQpIHsKICAgICAgbG9hZGVyLmNvcmVMaWJyYXJ5LmV4cG9ydFNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgIGFkZFRvU2NvcGUobmFtZSwgbWVtYmVyLCAtMSwgdHJ1ZSk7CiAgICAgIH0pOwogICAgfQoKICAgIGV4cG9ydFNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICBpZiAobWVtYmVyLnBhcmVudCAhPSB0aGlzKSB7CiAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICBjYXNlICJkeW5hbWljIjoKICAgICAgICAgIGNhc2UgInZvaWQiOgogICAgICAgICAgICB1bnNlcmlhbGl6YWJsZUV4cG9ydHMgPz89IDxTdHJpbmcsIFN0cmluZz57fTsKICAgICAgICAgICAgdW5zZXJpYWxpemFibGVFeHBvcnRzW25hbWVdID0gbnVsbDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgaWYgKG1lbWJlciBpcyBJbnZhbGlkVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgICAgICB1bnNlcmlhbGl6YWJsZUV4cG9ydHMgPz89IDxTdHJpbmcsIFN0cmluZz57fTsKICAgICAgICAgICAgICB1bnNlcmlhbGl6YWJsZUV4cG9ydHNbbmFtZV0gPSBtZW1iZXIubWVzc2FnZS5tZXNzYWdlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIEV2ZW50dWFsbHkgKGluICNidWlsZEJ1aWxkZXIpIG1lbWJlcnMgYXJlbid0IGFkZGVkIHRvIHRoZQogICAgICAgICAgICAgIC8vIGxpYnJhcnkgaWYgdGhlIGhhdmUgJ25leHQnIHBvaW50ZXJzLCBzbyBkb24ndCBhZGQgdGhlbSBhcwogICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWxFeHBvcnRzIGVpdGhlci4gQWRkIHRoZSBsYXN0IG9uZSBvbmx5ICh0aGUgb25lIHRoYXQKICAgICAgICAgICAgICAvLyB3aWxsIGV2ZW50dWFsbHkgYmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkpLgogICAgICAgICAgICAgIEJ1aWxkZXIgbWVtYmVyTGFzdCA9IG1lbWJlcjsKICAgICAgICAgICAgICB3aGlsZSAobWVtYmVyTGFzdC5uZXh0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIG1lbWJlckxhc3QgPSBtZW1iZXJMYXN0Lm5leHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxpYnJhcnkuYWRkaXRpb25hbEV4cG9ydHMuYWRkKG1lbWJlckxhc3QudGFyZ2V0LnJlZmVyZW5jZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRUb1Njb3BlKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlciwgaW50IGNoYXJPZmZzZXQsIGJvb2wgaXNJbXBvcnQpIHsKICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IG1hcCA9CiAgICAgICAgbWVtYmVyLmlzU2V0dGVyID8gaW1wb3J0U2NvcGUuc2V0dGVycyA6IGltcG9ydFNjb3BlLmxvY2FsOwogICAgQnVpbGRlciBleGlzdGluZyA9IG1hcFtuYW1lXTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIGlmIChleGlzdGluZyAhPSBtZW1iZXIpIHsKICAgICAgICBtYXBbbmFtZV0gPSBjb21wdXRlQW1iaWd1b3VzRGVjbGFyYXRpb24oCiAgICAgICAgICAgIG5hbWUsIGV4aXN0aW5nLCBtZW1iZXIsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgIGlzSW1wb3J0OiBpc0ltcG9ydCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG1hcFtuYW1lXSA9IG1lbWJlcjsKICAgIH0KICB9CgogIC8vLyBSZXNvbHZlcyBhbGwgdW5yZXNvbHZlZCB0eXBlcyBpbiBbdHlwZXNdLiBUaGUgbGlzdCBvZiB0eXBlcyBpcyBjbGVhcmVkCiAgLy8vIHdoZW4gZG9uZS4KICBpbnQgcmVzb2x2ZVR5cGVzKCkgewogICAgaW50IHR5cGVDb3VudCA9IHR5cGVzLmxlbmd0aDsKICAgIGZvciAoVW5yZXNvbHZlZFR5cGUgdCBpbiB0eXBlcykgewogICAgICB0LnJlc29sdmVJbihzY29wZSwgdGhpcyk7CiAgICAgIGlmICghbG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSB7CiAgICAgICAgdC5jaGVja1R5cGUodGhpcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdC5ub3JtYWxpemVUeXBlKCk7CiAgICAgIH0KICAgIH0KICAgIHR5cGVzLmNsZWFyKCk7CiAgICByZXR1cm4gdHlwZUNvdW50OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHJlc29sdmVDb25zdHJ1Y3RvcnMoXykgewogICAgaW50IGNvdW50ID0gMDsKICAgIEl0ZXJhdG9yPEJ1aWxkZXI+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIGNvdW50ICs9IGl0ZXJhdG9yLmN1cnJlbnQucmVzb2x2ZUNvbnN0cnVjdG9ycyh0aGlzKTsKICAgIH0KICAgIHJldHVybiBjb3VudDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgewogICAgLy8gVE9ETyhhaGUpOiBDb25zaWRlciBpZiB3ZSBzaG91bGQgdXNlIHJlbGF0aXZpemVVcmkgaGVyZS4gVGhlIGRvd25zaWRlIHRvCiAgICAvLyBkb2luZyB0aGF0IGlzIHRoYXQgdGhpcyBVUkkgbWF5IGJlIHVzZWQgaW4gYW4gZXJyb3IgbWVzc2FnZS4gSWRlYWxseSwgd2UKICAgIC8vIHNob3VsZCBjcmVhdGUgYSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgcXVhbGlmaWVkIG5hbWVzIHRoYXQgd2UgY2FuCiAgICAvLyByZWxhdGl2aXplIHdoZW4gcHJpbnRpbmcgYSBtZXNzYWdlLCBidXQgc3RpbGwgc3RvcmUgdGhlIGZ1bGwgVVJJIGluCiAgICAvLyAuZGlsbCBmaWxlcy4KICAgIHJldHVybiBuYW1lID8/ICI8bGlicmFyeSAnJGZpbGVVcmknPiI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlY29yZEFjY2VzcyhpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwgVXJpIGZpbGVVcmkpIHsKICAgIGFjY2Vzc29ycy5hZGQoZmlsZVVyaSk7CiAgICBhY2Nlc3NvcnMuYWRkKGNoYXJPZmZzZXQpOwogICAgYWNjZXNzb3JzLmFkZChsZW5ndGgpOwogICAgaWYgKGFjY2Vzc1Byb2JsZW0gIT0gbnVsbCkgewogICAgICBhZGRQcm9ibGVtKGFjY2Vzc1Byb2JsZW0sIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFByb2JsZW1BdEFjY2Vzc29ycyhNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIGlmIChhY2Nlc3NQcm9ibGVtID09IG51bGwpIHsKICAgICAgaWYgKGFjY2Vzc29ycy5pc0VtcHR5ICYmIHRoaXMgPT0gbG9hZGVyLmZpcnN0KSB7CiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgbGlicmFyeSwgYW5kIG5vYm9keSBhY2Nlc3MgaXQgZGlyZWN0bHkuIFNvCiAgICAgICAgLy8gd2UgbmVlZCB0byByZXBvcnQgYSBwcm9ibGVtLgogICAgICAgIGxvYWRlci5hZGRQcm9ibGVtKG1lc3NhZ2UsIC0xLCAxLCBudWxsKTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkgKz0gMykgewogICAgICAgIFVyaSBhY2Nlc3NvciA9IGFjY2Vzc29yc1tpXTsKICAgICAgICBpbnQgY2hhck9mZnNldCA9IGFjY2Vzc29yc1tpICsgMV07CiAgICAgICAgaW50IGxlbmd0aCA9IGFjY2Vzc29yc1tpICsgMl07CiAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGFjY2Vzc29yKTsKICAgICAgfQogICAgICBhY2Nlc3NQcm9ibGVtID0gbWVzc2FnZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGdldCBvcmlnaW4gPT4gYWN0dWFsT3JpZ2luID8/IHRoaXM7CgogIEBvdmVycmlkZQogIExpYnJhcnkgZ2V0IHRhcmdldCA9PiBsaWJyYXJ5OwoKICBVcmkgZ2V0IHVyaSA9PiBsaWJyYXJ5LmltcG9ydFVyaTsKCiAgdm9pZCBhZGRTeW50aGV0aWNEZWNsYXJhdGlvbk9mRHluYW1pYygpIHsKICAgIGFkZEJ1aWxkZXIoCiAgICAgICAgImR5bmFtaWMiLCBuZXcgRHluYW1pY1R5cGVCdWlsZGVyKGNvbnN0IER5bmFtaWNUeXBlKCksIHRoaXMsIC0xKSwgLTEpOwogIH0KCiAgVHlwZUJ1aWxkZXIgYWRkTmFtZWRUeXBlKAogICAgICBPYmplY3QgbmFtZSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIGFkZFR5cGUobmV3IE5hbWVkVHlwZUJ1aWxkZXIobmFtZSwgYXJndW1lbnRzKSwgY2hhck9mZnNldCk7CiAgfQoKICBUeXBlQnVpbGRlciBhZGRNaXhpbkFwcGxpY2F0aW9uKAogICAgICBUeXBlQnVpbGRlciBzdXBlcnR5cGUsIExpc3Q8VHlwZUJ1aWxkZXI+IG1peGlucywgaW50IGNoYXJPZmZzZXQpIHsKICAgIHJldHVybiBhZGRUeXBlKG5ldyBNaXhpbkFwcGxpY2F0aW9uQnVpbGRlcihzdXBlcnR5cGUsIG1peGlucyksIGNoYXJPZmZzZXQpOwogIH0KCiAgVHlwZUJ1aWxkZXIgYWRkVm9pZFR5cGUoaW50IGNoYXJPZmZzZXQpIHsKICAgIHJldHVybiBhZGROYW1lZFR5cGUoInZvaWQiLCBudWxsLCBjaGFyT2Zmc2V0KQogICAgICAuLmJpbmQobmV3IFZvaWRUeXBlQnVpbGRlcihjb25zdCBWb2lkVHlwZSgpLCB0aGlzLCBjaGFyT2Zmc2V0KSk7CiAgfQoKICAvLy8gQWRkIGEgcHJvYmxlbSB0aGF0IG1pZ2h0IG5vdCBiZSByZXBvcnRlZCBpbW1lZGlhdGVseS4KICAvLy8KICAvLy8gUHJvYmxlbXMgd2lsbCBiZSBpc3N1ZWQgYWZ0ZXIgc291cmNlIGluZm9ybWF0aW9uIGhhcyBiZWVuIGFkZGVkLgogIC8vLyBPbmNlIHRoZSBwcm9ibGVtcyBoYXMgYmVlbiBpc3N1ZWQsIGFkZGluZyBhIG5ldyAicG9zdHBvbmVkIiBwcm9ibGVtIHdpbGwKICAvLy8gYmUgaXNzdWVkIGltbWVkaWF0ZWx5LgogIHZvaWQgYWRkUG9zdHBvbmVkUHJvYmxlbSgKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwgVXJpIGZpbGVVcmkpIHsKICAgIGlmIChwb3N0cG9uZWRQcm9ibGVtc0lzc3VlZCkgewogICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSk7CiAgICB9IGVsc2UgewogICAgICBwb3N0cG9uZWRQcm9ibGVtcyA/Pz0gPFBvc3Rwb25lZFByb2JsZW0+W107CiAgICAgIHBvc3Rwb25lZFByb2JsZW1zCiAgICAgICAgICAuYWRkKG5ldyBQb3N0cG9uZWRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSkpOwogICAgfQogIH0KCiAgdm9pZCBpc3N1ZVBvc3Rwb25lZFByb2JsZW1zKCkgewogICAgcG9zdHBvbmVkUHJvYmxlbXNJc3N1ZWQgPSB0cnVlOwogICAgaWYgKHBvc3Rwb25lZFByb2JsZW1zID09IG51bGwpIHJldHVybjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zdHBvbmVkUHJvYmxlbXMubGVuZ3RoOyArK2kpIHsKICAgICAgUG9zdHBvbmVkUHJvYmxlbSBwb3N0cG9uZWRQcm9ibGVtID0gcG9zdHBvbmVkUHJvYmxlbXNbaV07CiAgICAgIGFkZFByb2JsZW0ocG9zdHBvbmVkUHJvYmxlbS5tZXNzYWdlLCBwb3N0cG9uZWRQcm9ibGVtLmNoYXJPZmZzZXQsCiAgICAgICAgICBwb3N0cG9uZWRQcm9ibGVtLmxlbmd0aCwgcG9zdHBvbmVkUHJvYmxlbS5maWxlVXJpKTsKICAgIH0KICAgIHBvc3Rwb25lZFByb2JsZW1zID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEZvcm1hdHRlZE1lc3NhZ2UgYWRkUHJvYmxlbSgKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLAogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0LAogICAgICBTZXZlcml0eSBzZXZlcml0eSwKICAgICAgYm9vbCBwcm9ibGVtT25MaWJyYXJ5OiBmYWxzZX0pIHsKICAgIEZvcm1hdHRlZE1lc3NhZ2UgZm9ybWF0dGVkTWVzc2FnZSA9IHN1cGVyLmFkZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCBmaWxlVXJpLAogICAgICAgIHdhc0hhbmRsZWQ6IHdhc0hhbmRsZWQsCiAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICBzZXZlcml0eTogc2V2ZXJpdHksCiAgICAgICAgcHJvYmxlbU9uTGlicmFyeTogdHJ1ZSk7CiAgICBpZiAoZm9ybWF0dGVkTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIHRhcmdldC5wcm9ibGVtc0FzSnNvbiA/Pz0gPFN0cmluZz5bXTsKICAgICAgdGFyZ2V0LnByb2JsZW1zQXNKc29uLmFkZChmb3JtYXR0ZWRNZXNzYWdlLnRvSnNvblN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlOwogIH0KCiAgdm9pZCBhZGRDbGFzcygKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFN0cmluZyBjbGFzc05hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlLAogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzLAogICAgICBpbnQgc3RhcnRPZmZzZXQsCiAgICAgIGludCBuYW1lT2Zmc2V0LAogICAgICBpbnQgZW5kT2Zmc2V0LAogICAgICBpbnQgc3VwZXJ0eXBlT2Zmc2V0KSB7CiAgICBfYWRkQ2xhc3MoCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5jbGFzc0RlY2xhcmF0aW9uLAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICBjbGFzc05hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgaW50ZXJmYWNlcywKICAgICAgICBzdGFydE9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZE9mZnNldCwKICAgICAgICBzdXBlcnR5cGVPZmZzZXQpOwogIH0KCiAgdm9pZCBhZGRNaXhpbkRlY2xhcmF0aW9uKAogICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgU3RyaW5nIGNsYXNzTmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBUeXBlQnVpbGRlciBzdXBlcnR5cGUsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMsCiAgICAgIGludCBzdGFydE9mZnNldCwKICAgICAgaW50IG5hbWVPZmZzZXQsCiAgICAgIGludCBlbmRPZmZzZXQsCiAgICAgIGludCBzdXBlcnR5cGVPZmZzZXQpIHsKICAgIF9hZGRDbGFzcygKICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLm1peGluRGVjbGFyYXRpb24sCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIGNsYXNzTmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIHN1cGVydHlwZSwKICAgICAgICBpbnRlcmZhY2VzLAogICAgICAgIHN0YXJ0T2Zmc2V0LAogICAgICAgIG5hbWVPZmZzZXQsCiAgICAgICAgZW5kT2Zmc2V0LAogICAgICAgIHN1cGVydHlwZU9mZnNldCk7CiAgfQoKICB2b2lkIF9hZGRDbGFzcygKICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZCBraW5kLAogICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgU3RyaW5nIGNsYXNzTmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBUeXBlQnVpbGRlciBzdXBlcnR5cGUsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMsCiAgICAgIGludCBzdGFydE9mZnNldCwKICAgICAgaW50IG5hbWVPZmZzZXQsCiAgICAgIGludCBlbmRPZmZzZXQsCiAgICAgIGludCBzdXBlcnR5cGVPZmZzZXQpIHsKICAgIC8vIE5lc3RlZCBkZWNsYXJhdGlvbiBiZWdhbiBpbiBgT3V0bGluZUJ1aWxkZXIuYmVnaW5DbGFzc0RlY2xhcmF0aW9uYC4KICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgZGVjbGFyYXRpb24gPQogICAgICAgIGVuZE5lc3RlZERlY2xhcmF0aW9uKGtpbmQsIGNsYXNzTmFtZSkKICAgICAgICAgIC4ucmVzb2x2ZVR5cGVzKHR5cGVWYXJpYWJsZXMsIHRoaXMpOwogICAgYXNzZXJ0KGRlY2xhcmF0aW9uLnBhcmVudCA9PSBsaWJyYXJ5RGVjbGFyYXRpb24pOwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gbWVtYmVycyA9IGRlY2xhcmF0aW9uLm1lbWJlcnM7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBjb25zdHJ1Y3RvcnMgPSBkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvcnM7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBzZXR0ZXJzID0gZGVjbGFyYXRpb24uc2V0dGVyczsKCiAgICBTY29wZSBjbGFzc1Njb3BlID0gbmV3IFNjb3BlKG1lbWJlcnMsIHNldHRlcnMsCiAgICAgICAgc2NvcGUud2l0aFR5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcyksICJjbGFzcyAkY2xhc3NOYW1lIiwKICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKTsKCiAgICAvLyBXaGVuIGxvb2tpbmcgdXAgYSBjb25zdHJ1Y3Rvciwgd2UgZG9uJ3QgY29uc2lkZXIgdHlwZSB2YXJpYWJsZXMgb3IgdGhlCiAgICAvLyBsaWJyYXJ5IHNjb3BlLgogICAgU2NvcGUgY29uc3RydWN0b3JTY29wZSA9CiAgICAgICAgbmV3IFNjb3BlKGNvbnN0cnVjdG9ycywgbnVsbCwgbnVsbCwgY2xhc3NOYW1lLCBpc01vZGlmaWFibGU6IGZhbHNlKTsKICAgIGJvb2wgaXNNaXhpbkRlY2xhcmF0aW9uID0gZmFsc2U7CiAgICBpZiAobW9kaWZpZXJzICYgbWl4aW5EZWNsYXJhdGlvbk1hc2sgIT0gMCkgewogICAgICBpc01peGluRGVjbGFyYXRpb24gPSB0cnVlOwogICAgICBtb2RpZmllcnMgPSAobW9kaWZpZXJzICYgfm1peGluRGVjbGFyYXRpb25NYXNrKSB8IGFic3RyYWN0TWFzazsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbi5oYXNDb25zdENvbnN0cnVjdG9yKSB7CiAgICAgIG1vZGlmaWVycyB8PSBoYXNDb25zdENvbnN0cnVjdG9yTWFzazsKICAgIH0KICAgIENsYXNzQnVpbGRlciBjbHMgPSBuZXcgU291cmNlQ2xhc3NCdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICBjbGFzc05hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBhcHBseU1peGlucyhzdXBlcnR5cGUsIHN0YXJ0T2Zmc2V0LCBuYW1lT2Zmc2V0LCBlbmRPZmZzZXQsIGNsYXNzTmFtZSwKICAgICAgICAgICAgaXNNaXhpbkRlY2xhcmF0aW9uLAogICAgICAgICAgICB0eXBlVmFyaWFibGVzOiB0eXBlVmFyaWFibGVzKSwKICAgICAgICBpbnRlcmZhY2VzLAogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFkZCB0aGUgYG9uYCBjbGF1c2UgdHlwZXMgb2YgYSBtaXhpbiBkZWNsYXJhdGlvbgogICAgICAgIC8vIGhlcmUuCiAgICAgICAgbnVsbCwKICAgICAgICBjbGFzc1Njb3BlLAogICAgICAgIGNvbnN0cnVjdG9yU2NvcGUsCiAgICAgICAgdGhpcywKICAgICAgICBuZXcgTGlzdDxDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXI+LmZyb20oY29uc3RydWN0b3JSZWZlcmVuY2VzKSwKICAgICAgICBzdGFydE9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZE9mZnNldCwKICAgICAgICBpc01peGluRGVjbGFyYXRpb246IGlzTWl4aW5EZWNsYXJhdGlvbik7CiAgICBsb2FkZXIudGFyZ2V0Lm1ldGFkYXRhQ29sbGVjdG9yCiAgICAgICAgPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudChjbHMudGFyZ2V0LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CgogICAgY29uc3RydWN0b3JSZWZlcmVuY2VzLmNsZWFyKCk7CiAgICBNYXA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzQnlOYW1lID0KICAgICAgICBjaGVja1R5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcywgY2xzKTsKICAgIHZvaWQgc2V0UGFyZW50KFN0cmluZyBuYW1lLCBNZW1iZXJCdWlsZGVyIG1lbWJlcikgewogICAgICB3aGlsZSAobWVtYmVyICE9IG51bGwpIHsKICAgICAgICBtZW1iZXIucGFyZW50ID0gY2xzOwogICAgICAgIG1lbWJlciA9IG1lbWJlci5uZXh0OwogICAgICB9CiAgICB9CgogICAgdm9pZCBzZXRQYXJlbnRBbmRDaGVja0NvbmZsaWN0cyhTdHJpbmcgbmFtZSwgTWVtYmVyQnVpbGRlciBtZW1iZXIpIHsKICAgICAgaWYgKHR5cGVWYXJpYWJsZXNCeU5hbWUgIT0gbnVsbCkgewogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHYgPSB0eXBlVmFyaWFibGVzQnlOYW1lW25hbWVdOwogICAgICAgIGlmICh0diAhPSBudWxsKSB7CiAgICAgICAgICBjbHMuYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgICBtZW1iZXIuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgsCiAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgbWVzc2FnZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgdHYuZmlsZVVyaSwgdHYuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpCiAgICAgICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldFBhcmVudChuYW1lLCBtZW1iZXIpOwogICAgfQoKICAgIG1lbWJlcnMuZm9yRWFjaChzZXRQYXJlbnRBbmRDaGVja0NvbmZsaWN0cyk7CiAgICBjb25zdHJ1Y3RvcnMuZm9yRWFjaChzZXRQYXJlbnRBbmRDaGVja0NvbmZsaWN0cyk7CiAgICBzZXR0ZXJzLmZvckVhY2goc2V0UGFyZW50QW5kQ2hlY2tDb25mbGljdHMpOwogICAgYWRkQnVpbGRlcihjbGFzc05hbWUsIGNscywgbmFtZU9mZnNldCk7CiAgfQoKICBNYXA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPiBjaGVja1R5cGVWYXJpYWJsZXMoCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywgQnVpbGRlciBvd25lcikgewogICAgaWYgKHR5cGVWYXJpYWJsZXM/LmlzRW1wdHkgPz8gdHJ1ZSkgcmV0dXJuIG51bGw7CiAgICBNYXA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzQnlOYW1lID0KICAgICAgICA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPnt9OwogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHR2IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciBleGlzdGluZyA9IHR5cGVWYXJpYWJsZXNCeU5hbWVbdHYubmFtZV07CiAgICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWUsIHR2LmNoYXJPZmZzZXQsCiAgICAgICAgICAgIHR2Lm5hbWUubGVuZ3RoLCBmaWxlVXJpLAogICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHR2Lm5hbWUpCiAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICBmaWxlVXJpLCBleGlzdGluZy5jaGFyT2Zmc2V0LCBleGlzdGluZy5uYW1lLmxlbmd0aCkKICAgICAgICAgICAgXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHlwZVZhcmlhYmxlc0J5TmFtZVt0di5uYW1lXSA9IHR2OwogICAgICAgIGlmIChvd25lciBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICAgIC8vIE9ubHkgY2xhc3NlcyBhbmQgdHlwZSB2YXJpYWJsZXMgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lLiBTZWUKICAgICAgICAgIC8vIFsjMjk1NTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8yOTU1NSkuCiAgICAgICAgICBpZiAodHYubmFtZSA9PSBvd25lci5uYW1lKSB7CiAgICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmcsIHR2LmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICB0di5uYW1lLmxlbmd0aCwgZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlc0J5TmFtZTsKICB9CgogIHZvaWQgYWRkRXh0ZW5zaW9uRGVjbGFyYXRpb24oCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBTdHJpbmcgZXh0ZW5zaW9uTmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBUeXBlQnVpbGRlciB0eXBlLAogICAgICBpbnQgc3RhcnRPZmZzZXQsCiAgICAgIGludCBuYW1lT2Zmc2V0LAogICAgICBpbnQgZW5kT2Zmc2V0KSB7CiAgICAvLyBOZXN0ZWQgZGVjbGFyYXRpb24gYmVnYW4gaW4gYE91dGxpbmVCdWlsZGVyLmJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb25gLgogICAgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciBkZWNsYXJhdGlvbiA9IGVuZE5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZXh0ZW5zaW9uRGVjbGFyYXRpb24sIGV4dGVuc2lvbk5hbWUpCiAgICAgIC4ucmVzb2x2ZVR5cGVzKHR5cGVWYXJpYWJsZXMsIHRoaXMpOwogICAgYXNzZXJ0KGRlY2xhcmF0aW9uLnBhcmVudCA9PSBsaWJyYXJ5RGVjbGFyYXRpb24pOwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gbWVtYmVycyA9IGRlY2xhcmF0aW9uLm1lbWJlcnM7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBjb25zdHJ1Y3RvcnMgPSBkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvcnM7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBzZXR0ZXJzID0gZGVjbGFyYXRpb24uc2V0dGVyczsKCiAgICBTY29wZSBjbGFzc1Njb3BlID0gbmV3IFNjb3BlKG1lbWJlcnMsIHNldHRlcnMsCiAgICAgICAgc2NvcGUud2l0aFR5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcyksICJleHRlbnNpb24gJGV4dGVuc2lvbk5hbWUiLAogICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpOwoKICAgIEV4dGVuc2lvbkJ1aWxkZXIgZXh0ZW5zaW9uID0gbmV3IFNvdXJjZUV4dGVuc2lvbkJ1aWxkZXIoCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIGV4dGVuc2lvbk5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICB0eXBlLAogICAgICAgIGNsYXNzU2NvcGUsCiAgICAgICAgdGhpcywKICAgICAgICBzdGFydE9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZE9mZnNldCk7CiAgICBsb2FkZXIudGFyZ2V0Lm1ldGFkYXRhQ29sbGVjdG9yCiAgICAgICAgPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudChleHRlbnNpb24udGFyZ2V0LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CgogICAgY29uc3RydWN0b3JSZWZlcmVuY2VzLmNsZWFyKCk7CiAgICBNYXA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzQnlOYW1lID0KICAgICAgICBjaGVja1R5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcywgZXh0ZW5zaW9uKTsKICAgIHZvaWQgc2V0UGFyZW50KFN0cmluZyBuYW1lLCBNZW1iZXJCdWlsZGVyIG1lbWJlcikgewogICAgICB3aGlsZSAobWVtYmVyICE9IG51bGwpIHsKICAgICAgICBtZW1iZXIucGFyZW50ID0gZXh0ZW5zaW9uOwogICAgICAgIG1lbWJlciA9IG1lbWJlci5uZXh0OwogICAgICB9CiAgICB9CgogICAgdm9pZCBzZXRQYXJlbnRBbmRDaGVja0NvbmZsaWN0cyhTdHJpbmcgbmFtZSwgTWVtYmVyQnVpbGRlciBtZW1iZXIpIHsKICAgICAgaWYgKHR5cGVWYXJpYWJsZXNCeU5hbWUgIT0gbnVsbCkgewogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHYgPSB0eXBlVmFyaWFibGVzQnlOYW1lW25hbWVdOwogICAgICAgIGlmICh0diAhPSBudWxsKSB7CiAgICAgICAgICBleHRlbnNpb24uYWRkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgICBtZW1iZXIuY2hhck9mZnNldCwKICAgICAgICAgICAgICBuYW1lLmxlbmd0aCwKICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICBtZXNzYWdlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICB0di5maWxlVXJpLCB0di5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkKICAgICAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0UGFyZW50KG5hbWUsIG1lbWJlcik7CiAgICB9CgogICAgbWVtYmVycy5mb3JFYWNoKHNldFBhcmVudEFuZENoZWNrQ29uZmxpY3RzKTsKICAgIGNvbnN0cnVjdG9ycy5mb3JFYWNoKHNldFBhcmVudEFuZENoZWNrQ29uZmxpY3RzKTsKICAgIHNldHRlcnMuZm9yRWFjaChzZXRQYXJlbnRBbmRDaGVja0NvbmZsaWN0cyk7CiAgICBhZGRCdWlsZGVyKGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvbiwgbmFtZU9mZnNldCk7CiAgfQoKICBUeXBlQnVpbGRlciBhcHBseU1peGlucyhUeXBlQnVpbGRlciB0eXBlLCBpbnQgc3RhcnRDaGFyT2Zmc2V0LCBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsIFN0cmluZyBzdWJjbGFzc05hbWUsIGJvb2wgaXNNaXhpbkRlY2xhcmF0aW9uLAogICAgICB7U3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXN9KSB7CiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgYSBuYW1lZAogICAgICAvLyBtaXhpbiBhcHBsaWNhdGlvbi4KICAgICAgaWYgKGRvY3VtZW50YXRpb25Db21tZW50ICE9IG51bGwpIHsKICAgICAgICB1bmhhbmRsZWQoImRvY3VtZW50YXRpb25Db21tZW50IiwgInVubmFtZWQgbWl4aW4gYXBwbGljYXRpb24iLAogICAgICAgICAgICBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgICAgdW5oYW5kbGVkKCJtZXRhZGF0YSIsICJ1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIH0gZWxzZSBpZiAoaW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgdW5oYW5kbGVkKAogICAgICAgICAgICAiaW50ZXJmYWNlcyIsICJ1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlIGlzIE1peGluQXBwbGljYXRpb25CdWlsZGVyKSB7CiAgICAgIC8vIERvY3VtZW50YXRpb24gYmVsb3cgYXNzdW1lcyB0aGUgZ2l2ZW4gbWl4aW4gYXBwbGljYXRpb24gaXMgaW4gb25lIG9mCiAgICAgIC8vIHRoZXNlIGZvcm1zOgogICAgICAvLwogICAgICAvLyAgICAgY2xhc3MgQyBleHRlbmRzIFMgd2l0aCBNMSwgTTIsIE0zOwogICAgICAvLyAgICAgY2xhc3MgTmFtZWQgPSBTIHdpdGggTTEsIE0yLCBNMzsKICAgICAgLy8KICAgICAgLy8gV2hlbiB3ZSByZWZlciB0byB0aGUgc3ViY2xhc3MsIHdlIG1lYW4gYENgIG9yIGBOYW1lZGAuCgogICAgICAvLy8gVGhlIGN1cnJlbnQgc3VwZXJ0eXBlLgogICAgICAvLy8KICAgICAgLy8vIFN0YXJ0cyBvdXQgaGF2aW5nIHRoZSB2YWx1ZSBgU2AgYW5kIG9uIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBsb29wCiAgICAgIC8vLyBiZWxvdywgaXQgd2lsbCB0YWtlIG9uIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvOgogICAgICAvLy8KICAgICAgLy8vIDEuIGBTIHdpdGggTTFgLgogICAgICAvLy8gMi4gYChTIHdpdGggTTEpIHdpdGggTTJgLgogICAgICAvLy8gMy4gYCgoUyB3aXRoIE0xKSB3aXRoIE0yKSB3aXRoIE0zYC4KICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gdHlwZS5zdXBlcnR5cGUgPz8gbG9hZGVyLnRhcmdldC5vYmplY3RUeXBlOwoKICAgICAgLy8vIFRoZSB2YXJpYWJsZSBwYXJ0IG9mIHRoZSBtaXhpbiBhcHBsaWNhdGlvbidzIHN5bnRoZXRpYyBuYW1lLiBJdAogICAgICAvLy8gc3RhcnRzIG91dCBhcyB0aGUgbmFtZSBvZiB0aGUgc3VwZXJjbGFzcywgYnV0IGlzIG9ubHkgdXNlZCBhZnRlciBpdAogICAgICAvLy8gaGFzIGJlZW4gY29tYmluZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBtaXhpbi4gSW4gdGhlIGV4YW1wbGVzCiAgICAgIC8vLyBmcm9tIGFib3ZlLCBpdCB3aWxsIHRha2UgdGhlc2UgdmFsdWVzOgogICAgICAvLy8KICAgICAgLy8vIDEuIGBTJk0xYAogICAgICAvLy8gMi4gYFMmTTEmTTJgCiAgICAgIC8vLyAzLiBgUyZNMSZNMiZNM2AuCiAgICAgIC8vLwogICAgICAvLy8gVGhlIGZ1bGwgbmFtZSBvZiB0aGUgbWl4aW4gYXBwbGljYXRpb24gaXMgb2J0YWluZWQgYnkgcHJlcGVuZGluZyB0aGUKICAgICAgLy8vIG5hbWUgb2YgdGhlIHN1YmNsYXNzIChgQ2Agb3IgYE5hbWVkYCBpbiB0aGUgYWJvdmUgZXhhbXBsZXMpIHRvIHRoZQogICAgICAvLy8gcnVubmluZyBuYW1lLiBGb3IgdGhlIGV4YW1wbGUgYENgLCB0aGF0IGxlYWRzIHRvIHRoZXNlIGZ1bGwgbmFtZXM6CiAgICAgIC8vLwogICAgICAvLy8gMS4gYF9DJlMmTTFgCiAgICAgIC8vLyAyLiBgX0MmUyZNMSZNMmAKICAgICAgLy8vIDMuIGBfQyZTJk0xJk0yJk0zYC4KICAgICAgLy8vCiAgICAgIC8vLyBGb3IgYSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiwgdGhlIGxhc3QgbmFtZSBoYXMgYmVlbiBnaXZlbiBieSB0aGUKICAgICAgLy8vIHByb2dyYW1tZXIsIHNvIGZvciB0aGUgZXhhbXBsZSBgTmFtZWRgIHdlIHNlZSB0aGVzZSBmdWxsIG5hbWVzOgogICAgICAvLy8KICAgICAgLy8vIDEuIGBfTmFtZWQmUyZNMWAKICAgICAgLy8vIDIuIGBfTmFtZWQmUyZNMSZNMmAKICAgICAgLy8vIDMuIGBOYW1lZGAuCiAgICAgIFN0cmluZyBydW5uaW5nTmFtZSA9IGV4dHJhY3ROYW1lKHN1cGVydHlwZS5uYW1lKTsKCiAgICAgIC8vLyBUcnVlIHdoZW4gd2UncmUgYnVpbGRpbmcgYSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbi4gTm90aWNlIHRoYXQgZm9yCiAgICAgIC8vLyB0aGUgYE5hbWVkYCBleGFtcGxlIGFib3ZlLCB0aGlzIGlzIG9ubHkgdHJ1ZSBvbiB0aGUgbGFzdAogICAgICAvLy8gaXRlcmF0aW9uIGJlY2F1c2Ugb25seSB0aGUgZnVsbCBtaXhpbiBhcHBsaWNhdGlvbiBpcyBuYW1lZC4KICAgICAgYm9vbCBpc05hbWVkTWl4aW5BcHBsaWNhdGlvbjsKCiAgICAgIC8vLyBUaGUgbmFtZXMgb2YgdGhlIHR5cGUgdmFyaWFibGVzIG9mIHRoZSBzdWJjbGFzcy4KICAgICAgU2V0PFN0cmluZz4gdHlwZVZhcmlhYmxlTmFtZXM7CiAgICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICB0eXBlVmFyaWFibGVOYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwogICAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0eXBlVmFyaWFibGUgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgICAgdHlwZVZhcmlhYmxlTmFtZXMuYWRkKHR5cGVWYXJpYWJsZS5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB0cnVlYCBpZiBhIHR5cGUgdmFyaWFibGUgd2l0aCBhIG5hbWUKICAgICAgLy8vIGZyb20gW3R5cGVWYXJpYWJsZU5hbWVzXSBpcyByZWZlcmVuY2VkIGluIFt0eXBlXS4KICAgICAgYm9vbCB1c2VzVHlwZVZhcmlhYmxlcyhUeXBlQnVpbGRlciB0eXBlKSB7CiAgICAgICAgaWYgKHR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICAgICAgaWYgKHR5cGUuZGVjbGFyYXRpb24gaXMgVHlwZVZhcmlhYmxlQnVpbGRlcikgewogICAgICAgICAgICByZXR1cm4gdHlwZVZhcmlhYmxlTmFtZXMuY29udGFpbnModHlwZS5kZWNsYXJhdGlvbi5uYW1lKTsKICAgICAgICAgIH0KCiAgICAgICAgICBMaXN0PFR5cGVCdWlsZGVyPiB0eXBlQXJndW1lbnRzID0gdHlwZS5hcmd1bWVudHM7CiAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsICYmIHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgICAgICBpZiAodXNlc1R5cGVWYXJpYWJsZXMoYXJndW1lbnQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICAgICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gdHlwZS5mb3JtYWxzKSB7CiAgICAgICAgICAgICAgaWYgKHVzZXNUeXBlVmFyaWFibGVzKGZvcm1hbC50eXBlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdXNlc1R5cGVWYXJpYWJsZXModHlwZS5yZXR1cm5UeXBlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICAvLy8gSXRlcmF0ZSBvdmVyIHRoZSBtaXhpbnMgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBBdCB0aGUgZW5kIG9mIGVhY2gKICAgICAgLy8vIGl0ZXJhdGlvbiwgYSBuZXcgW3N1cGVydHlwZV0gaXMgY29tcHV0ZWQgdGhhdCBpcyB0aGUgbWl4aW4KICAgICAgLy8vIGFwcGxpY2F0aW9uIG9mIFtzdXBlcnR5cGVdIHdpdGggdGhlIGN1cnJlbnQgbWl4aW4uCiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5taXhpbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBUeXBlQnVpbGRlciBtaXhpbiA9IHR5cGUubWl4aW5zW2ldOwogICAgICAgIGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uID0gbmFtZSAhPSBudWxsICYmIG1peGluID09IHR5cGUubWl4aW5zLmxhc3Q7CiAgICAgICAgYm9vbCBpc0dlbmVyaWMgPSBmYWxzZTsKICAgICAgICBpZiAoIWlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgICBpZiAoc3VwZXJ0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgICAgaXNHZW5lcmljID0gaXNHZW5lcmljIHx8IHVzZXNUeXBlVmFyaWFibGVzKHN1cGVydHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobWl4aW4gaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICAgICAgICBydW5uaW5nTmFtZSArPSAiJiR7ZXh0cmFjdE5hbWUobWl4aW4ubmFtZSl9IjsKICAgICAgICAgICAgaXNHZW5lcmljID0gaXNHZW5lcmljIHx8IHVzZXNUeXBlVmFyaWFibGVzKG1peGluKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgU3RyaW5nIGZ1bGxuYW1lID0KICAgICAgICAgICAgaXNOYW1lZE1peGluQXBwbGljYXRpb24gPyBuYW1lIDogIl8kc3ViY2xhc3NOYW1lJiRydW5uaW5nTmFtZSI7CiAgICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBhcHBsaWNhdGlvblR5cGVWYXJpYWJsZXM7CiAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gYXBwbGljYXRpb25UeXBlQXJndW1lbnRzOwogICAgICAgIGlmIChpc05hbWVkTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5hbWVkIG1peGluIGFwcGxpY2F0aW9uLCBpdCBtdXN0IGJlIGdpdmVuIGFsbCB0aGUKICAgICAgICAgIC8vIGRlY2xhcmF0ZWQgdHlwZSB2YXJpYWJsZXMuCiAgICAgICAgICBhcHBsaWNhdGlvblR5cGVWYXJpYWJsZXMgPSB0eXBlVmFyaWFibGVzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHBhc3MgdGhlIGZyZXNoIHR5cGUgdmFyaWFibGVzIHRvIHRoZSBtaXhpbgogICAgICAgICAgLy8gYXBwbGljYXRpb24gaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSdyZSBkZWNsYXJlZCBvbiB0aGUgc3ViY2xhc3MuCiAgICAgICAgICBpZiAoaXNHZW5lcmljKSB7CiAgICAgICAgICAgIHRoaXMuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQudW5uYW1lZE1peGluQXBwbGljYXRpb24sCiAgICAgICAgICAgICAgICAibWl4aW4gYXBwbGljYXRpb24iKTsKCiAgICAgICAgICAgIGFwcGxpY2F0aW9uVHlwZVZhcmlhYmxlcyA9IGNvcHlUeXBlVmFyaWFibGVzKAogICAgICAgICAgICAgICAgdHlwZVZhcmlhYmxlcywgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIpOwoKICAgICAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMgPSA8VHlwZUJ1aWxkZXI+W107CiAgICAgICAgICAgIGlmIChzdXBlcnR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlciAmJiBzdXBlcnR5cGUuYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZS5hcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgIHN1cGVydHlwZS5hcmd1bWVudHNbaV0gPSBzdXBlcnR5cGUuYXJndW1lbnRzW2ldLmNsb25lKG5ld1R5cGVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG1peGluIGlzIE5hbWVkVHlwZUJ1aWxkZXIgJiYgbWl4aW4uYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1peGluLmFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgbWl4aW4uYXJndW1lbnRzW2ldID0gbWl4aW4uYXJndW1lbnRzW2ldLmNsb25lKG5ld1R5cGVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChUeXBlQnVpbGRlciBuZXdUeXBlIGluIG5ld1R5cGVzKSB7CiAgICAgICAgICAgICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIKICAgICAgICAgICAgICAgICAgLmFkZFR5cGUobmV3IFVucmVzb2x2ZWRUeXBlKG5ld1R5cGUsIC0xLCBudWxsKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgbWl4aW5EZWNsYXJhdGlvbiA9IHRoaXMKICAgICAgICAgICAgICAgIC5lbmROZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgICAgICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnVubmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICJtaXhpbiBhcHBsaWNhdGlvbiIpOwogICAgICAgICAgICBtaXhpbkRlY2xhcmF0aW9uLnJlc29sdmVUeXBlcyhhcHBsaWNhdGlvblR5cGVWYXJpYWJsZXMsIHRoaXMpOwoKICAgICAgICAgICAgYXBwbGljYXRpb25UeXBlQXJndW1lbnRzID0gPFR5cGVCdWlsZGVyPltdOwogICAgICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHlwZVZhcmlhYmxlIGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgICAgICBhcHBsaWNhdGlvblR5cGVBcmd1bWVudHMKICAgICAgICAgICAgICAgICAgLmFkZChhZGROYW1lZFR5cGUodHlwZVZhcmlhYmxlLm5hbWUsIG51bGwsIGNoYXJPZmZzZXQpLi5iaW5kKAogICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR5cGUgdmFyaWFibGUgdHlwZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyaWMgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSBhbm9ueW1vdXMgbWl4aW4KICAgICAgICAgICAgICAgICAgICAgIC8vIGFwcGxpY2F0aW9uIHNob3VsZCByZWZlciBiYWNrIHRvIHRoZSB0eXBlIHZhcmlhYmxlcyBvZgogICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNsYXNzIHRoYXQgZXh0ZW5kIHRoZSBhbm9ueW1vdXMgbWl4aW4gYXBwbGljYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICB0eXBlVmFyaWFibGUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmaW5hbCBpbnQgY29tcHV0ZWRTdGFydENoYXJPZmZzZXQgPQogICAgICAgICAgICAoaXNOYW1lZE1peGluQXBwbGljYXRpb24gPyBtZXRhZGF0YSA6IG51bGwpID09IG51bGwKICAgICAgICAgICAgICAgID8gc3RhcnRDaGFyT2Zmc2V0CiAgICAgICAgICAgICAgICA6IG1ldGFkYXRhLmZpcnN0LmNoYXJPZmZzZXQ7CiAgICAgICAgU291cmNlQ2xhc3NCdWlsZGVyIGFwcGxpY2F0aW9uID0gbmV3IFNvdXJjZUNsYXNzQnVpbGRlcigKICAgICAgICAgICAgaXNOYW1lZE1peGluQXBwbGljYXRpb24gPyBtZXRhZGF0YSA6IG51bGwsCiAgICAgICAgICAgIGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICA/IG1vZGlmaWVycyB8IG5hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2sKICAgICAgICAgICAgICAgIDogYWJzdHJhY3RNYXNrLAogICAgICAgICAgICBmdWxsbmFtZSwKICAgICAgICAgICAgYXBwbGljYXRpb25UeXBlVmFyaWFibGVzLAogICAgICAgICAgICBpc01peGluRGVjbGFyYXRpb24gPyBudWxsIDogc3VwZXJ0eXBlLAogICAgICAgICAgICBpc05hbWVkTWl4aW5BcHBsaWNhdGlvbgogICAgICAgICAgICAgICAgPyBpbnRlcmZhY2VzCiAgICAgICAgICAgICAgICA6IGlzTWl4aW5EZWNsYXJhdGlvbiA/IFtzdXBlcnR5cGUsIG1peGluXSA6IG51bGwsCiAgICAgICAgICAgIG51bGwsIC8vIE5vIGBvbmAgY2xhdXNlIHR5cGVzLgogICAgICAgICAgICBuZXcgU2NvcGUoPFN0cmluZywgTWVtYmVyQnVpbGRlcj57fSwgPFN0cmluZywgTWVtYmVyQnVpbGRlcj57fSwKICAgICAgICAgICAgICAgIHNjb3BlLndpdGhUeXBlVmFyaWFibGVzKHR5cGVWYXJpYWJsZXMpLAogICAgICAgICAgICAgICAgIm1peGluICRmdWxsbmFtZSAiLCBpc01vZGlmaWFibGU6IGZhbHNlKSwKICAgICAgICAgICAgbmV3IFNjb3BlKDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30sIG51bGwsIG51bGwsIGZ1bGxuYW1lLAogICAgICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBmYWxzZSksCiAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgIDxDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXI+W10sCiAgICAgICAgICAgIGNvbXB1dGVkU3RhcnRDaGFyT2Zmc2V0LAogICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICBjaGFyRW5kT2Zmc2V0LAogICAgICAgICAgICBtaXhlZEluVHlwZTogaXNNaXhpbkRlY2xhcmF0aW9uID8gbnVsbCA6IG1peGluKTsKICAgICAgICBpZiAoaXNOYW1lZE1peGluQXBwbGljYXRpb24pIHsKICAgICAgICAgIGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3I/LnNldERvY3VtZW50YXRpb25Db21tZW50KAogICAgICAgICAgICAgIGFwcGxpY2F0aW9uLnRhcmdldCwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogICAgICAgIH0KICAgICAgICAvLyBUT0RPKGFoZSwga21pbGxpa2luKTogU2hvdWxkIGFsd2F5cyBiZSB0cnVlPwogICAgICAgIC8vIHBrZy9hbmFseXplci90ZXN0L3NyYy9zdW1tYXJ5L3Jlc3ludGhlc2l6ZV9rZXJuZWxfdGVzdC5kYXJ0IGNhbid0CiAgICAgICAgLy8gaGFuZGxlIHRoYXQgOigKICAgICAgICBhcHBsaWNhdGlvbi5jbHMuaXNBbm9ueW1vdXNNaXhpbiA9ICFpc05hbWVkTWl4aW5BcHBsaWNhdGlvbjsKICAgICAgICBhZGRCdWlsZGVyKGZ1bGxuYW1lLCBhcHBsaWNhdGlvbiwgY2hhck9mZnNldCk7CiAgICAgICAgc3VwZXJ0eXBlID0KICAgICAgICAgICAgYWRkTmFtZWRUeXBlKGZ1bGxuYW1lLCBhcHBsaWNhdGlvblR5cGVBcmd1bWVudHMsIGNoYXJPZmZzZXQpOwogICAgICB9CiAgICAgIHJldHVybiBzdXBlcnR5cGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICB9CgogIHZvaWQgYWRkTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgVHlwZUJ1aWxkZXIgbWl4aW5BcHBsaWNhdGlvbiwKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcywKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0KSB7CiAgICAvLyBOZXN0ZWQgZGVjbGFyYXRpb24gYmVnYW4gaW4gYE91dGxpbmVCdWlsZGVyLmJlZ2luTmFtZWRNaXhpbkFwcGxpY2F0aW9uYC4KICAgIGVuZE5lc3RlZERlY2xhcmF0aW9uKFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQubmFtZWRNaXhpbkFwcGxpY2F0aW9uLCBuYW1lKQogICAgICAgIC5yZXNvbHZlVHlwZXModHlwZVZhcmlhYmxlcywgdGhpcyk7CiAgICBOYW1lZFR5cGVCdWlsZGVyIHN1cGVydHlwZSA9IGFwcGx5TWl4aW5zKG1peGluQXBwbGljYXRpb24sIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LCBjaGFyRW5kT2Zmc2V0LCBuYW1lLCBmYWxzZSwKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudDogZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGE6IG1ldGFkYXRhLAogICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlczogdHlwZVZhcmlhYmxlcywKICAgICAgICBtb2RpZmllcnM6IG1vZGlmaWVycywKICAgICAgICBpbnRlcmZhY2VzOiBpbnRlcmZhY2VzKTsKICAgIGNoZWNrVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzLCBzdXBlcnR5cGUuZGVjbGFyYXRpb24pOwogIH0KCiAgdm9pZCBhZGRGaWVsZCgKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHR5cGUsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFRva2VuIGluaXRpYWxpemVyVG9rZW4sCiAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIsCiAgICAgIHtUb2tlbiBjb25zdEluaXRpYWxpemVyVG9rZW59KSB7CiAgICBpZiAoaGFzSW5pdGlhbGl6ZXIpIHsKICAgICAgbW9kaWZpZXJzIHw9IGhhc0luaXRpYWxpemVyTWFzazsKICAgIH0KICAgIEZpZWxkQnVpbGRlciBmaWVsZCA9IG5ldyBGaWVsZEJ1aWxkZXIoCiAgICAgICAgbWV0YWRhdGEsIHR5cGUsIG5hbWUsIG1vZGlmaWVycywgdGhpcywgY2hhck9mZnNldCwgY2hhckVuZE9mZnNldCk7CiAgICBmaWVsZC5jb25zdEluaXRpYWxpemVyVG9rZW4gPSBjb25zdEluaXRpYWxpemVyVG9rZW47CiAgICBhZGRCdWlsZGVyKG5hbWUsIGZpZWxkLCBjaGFyT2Zmc2V0KTsKICAgIGlmICghbGVnYWN5TW9kZSAmJiB0eXBlID09IG51bGwgJiYgaW5pdGlhbGl6ZXJUb2tlbiAhPSBudWxsKSB7CiAgICAgIGZpZWxkLnRhcmdldC50eXBlID0gbmV3IEltcGxpY2l0RmllbGRUeXBlKGZpZWxkLCBpbml0aWFsaXplclRva2VuKTsKICAgICAgKGltcGxpY2l0bHlUeXBlZEZpZWxkcyA/Pz0gPEZpZWxkQnVpbGRlcj5bXSkuYWRkKGZpZWxkKTsKICAgIH0KICAgIGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3IKICAgICAgICA/LnNldERvY3VtZW50YXRpb25Db21tZW50KGZpZWxkLnRhcmdldCwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogIH0KCiAgdm9pZCBhZGRDb25zdHJ1Y3RvcigKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUsCiAgICAgIGZpbmFsIE9iamVjdCBuYW1lLAogICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscywKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT3BlblBhcmVuT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCwKICAgICAgU3RyaW5nIG5hdGl2ZU1ldGhvZE5hbWUsCiAgICAgIHtUb2tlbiBiZWdpbkluaXRpYWxpemVyc30pIHsKICAgIE1ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yID0gbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcjsKICAgIENvbnN0cnVjdG9yQnVpbGRlciBwcm9jZWR1cmUgPSBuZXcgQ29uc3RydWN0b3JCdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycyAmIH5hYnN0cmFjdE1hc2ssCiAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICBjb25zdHJ1Y3Rvck5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBmb3JtYWxzLAogICAgICAgIHRoaXMsCiAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgICBjaGFyRW5kT2Zmc2V0LAogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUpOwogICAgbWV0YWRhdGFDb2xsZWN0b3I/LnNldERvY3VtZW50YXRpb25Db21tZW50KAogICAgICAgIHByb2NlZHVyZS50YXJnZXQsIGRvY3VtZW50YXRpb25Db21tZW50KTsKICAgIG1ldGFkYXRhQ29sbGVjdG9yPy5zZXRDb25zdHJ1Y3Rvck5hbWVPZmZzZXQocHJvY2VkdXJlLnRhcmdldCwgbmFtZSk7CiAgICBjaGVja1R5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcywgcHJvY2VkdXJlKTsKICAgIGFkZEJ1aWxkZXIoY29uc3RydWN0b3JOYW1lLCBwcm9jZWR1cmUsIGNoYXJPZmZzZXQpOwogICAgaWYgKG5hdGl2ZU1ldGhvZE5hbWUgIT0gbnVsbCkgewogICAgICBhZGROYXRpdmVNZXRob2QocHJvY2VkdXJlKTsKICAgIH0KICAgIGlmIChwcm9jZWR1cmUuaXNDb25zdCkgewogICAgICBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcj8uaGFzQ29uc3RDb25zdHJ1Y3RvciA9IHRydWU7CiAgICAgIC8vIGNvbnN0IGNvbnN0cnVjdG9ycyB3aWxsIGhhdmUgdGhlaXIgaW5pdGlhbGl6ZXJzIGNvbXBpbGVkIGFuZCB3cml0dGVuCiAgICAgIC8vIGludG8gdGhlIG91dGxpbmUuCiAgICAgIHByb2NlZHVyZS5iZWdpbkluaXRpYWxpemVycyA9IGJlZ2luSW5pdGlhbGl6ZXJzID8/IFRva2VuLmVvZigtMSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFByb2NlZHVyZSgKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscywKICAgICAgUHJvY2VkdXJlS2luZCBraW5kLAogICAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0LAogICAgICBTdHJpbmcgbmF0aXZlTWV0aG9kTmFtZSwKICAgICAge2Jvb2wgaXNUb3BMZXZlbH0pIHsKICAgIE1ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yID0gbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcjsKICAgIGlmIChyZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgaWYgKGtpbmQgPT0gUHJvY2VkdXJlS2luZC5PcGVyYXRvciAmJgogICAgICAgICAgaWRlbnRpY2FsKG5hbWUsIGluZGV4U2V0TmFtZS5uYW1lKSkgewogICAgICAgIHJldHVyblR5cGUgPSBhZGRWb2lkVHlwZShjaGFyT2Zmc2V0KTsKICAgICAgfSBlbHNlIGlmIChraW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyKSB7CiAgICAgICAgcmV0dXJuVHlwZSA9IGFkZFZvaWRUeXBlKGNoYXJPZmZzZXQpOwogICAgICB9CiAgICB9CiAgICBGdW5jdGlvbkJ1aWxkZXIgcHJvY2VkdXJlID0gbmV3IFByb2NlZHVyZUJ1aWxkZXIoCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIGZvcm1hbHMsCiAgICAgICAga2luZCwKICAgICAgICB0aGlzLAogICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgICAgY2hhckVuZE9mZnNldCwKICAgICAgICBuYXRpdmVNZXRob2ROYW1lKTsKICAgIG1ldGFkYXRhQ29sbGVjdG9yPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudCgKICAgICAgICBwcm9jZWR1cmUudGFyZ2V0LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CiAgICBjaGVja1R5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcywgcHJvY2VkdXJlKTsKICAgIGFkZEJ1aWxkZXIobmFtZSwgcHJvY2VkdXJlLCBjaGFyT2Zmc2V0KTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgYWRkTmF0aXZlTWV0aG9kKHByb2NlZHVyZSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZEZhY3RvcnlNZXRob2QoCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBPYmplY3QgbmFtZSwKICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzLAogICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVkaXJlY3Rpb25UYXJnZXQsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFN0cmluZyBuYXRpdmVNZXRob2ROYW1lKSB7CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gYWRkTmFtZWRUeXBlKAogICAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLnBhcmVudC5uYW1lLAogICAgICAgIDxUeXBlQnVpbGRlcj5bXSwKICAgICAgICBjaGFyT2Zmc2V0KTsKICAgIC8vIE5lc3RlZCBkZWNsYXJhdGlvbiBiZWdhbiBpbiBgT3V0bGluZUJ1aWxkZXIuYmVnaW5GYWN0b3J5TWV0aG9kYC4KICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgZmFjdG9yeURlY2xhcmF0aW9uID0gZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5mYWN0b3J5TWV0aG9kLCAiI2ZhY3RvcnlfbWV0aG9kIik7CgogICAgLy8gUHJlcGFyZSB0aGUgc2ltcGxlIHByb2NlZHVyZSBuYW1lLgogICAgU3RyaW5nIHByb2NlZHVyZU5hbWU7CiAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lID0KICAgICAgICBjb21wdXRlQW5kVmFsaWRhdGVDb25zdHJ1Y3Rvck5hbWUobmFtZSwgY2hhck9mZnNldCwgaXNGYWN0b3J5OiB0cnVlKTsKICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgIT0gbnVsbCkgewogICAgICBwcm9jZWR1cmVOYW1lID0gY29uc3RydWN0b3JOYW1lOwogICAgfSBlbHNlIHsKICAgICAgcHJvY2VkdXJlTmFtZSA9IG5hbWU7CiAgICB9CgogICAgUHJvY2VkdXJlQnVpbGRlciBwcm9jZWR1cmU7CiAgICBpZiAocmVkaXJlY3Rpb25UYXJnZXQgIT0gbnVsbCkgewogICAgICBwcm9jZWR1cmUgPSBuZXcgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlcigKICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgc3RhdGljTWFzayB8IG1vZGlmaWVycywKICAgICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgICBwcm9jZWR1cmVOYW1lLAogICAgICAgICAgY29weVR5cGVWYXJpYWJsZXMoCiAgICAgICAgICAgICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIudHlwZVZhcmlhYmxlcyA/PwogICAgICAgICAgICAgICAgICBjb25zdCA8VHlwZVZhcmlhYmxlQnVpbGRlcj5bXSwKICAgICAgICAgICAgICBmYWN0b3J5RGVjbGFyYXRpb24pLAogICAgICAgICAgZm9ybWFscywKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBzdGFydENoYXJPZmZzZXQsCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgICAgIGNoYXJFbmRPZmZzZXQsCiAgICAgICAgICBuYXRpdmVNZXRob2ROYW1lLAogICAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQpOwogICAgfSBlbHNlIHsKICAgICAgcHJvY2VkdXJlID0gbmV3IFByb2NlZHVyZUJ1aWxkZXIoCiAgICAgICAgICBtZXRhZGF0YSwKICAgICAgICAgIHN0YXRpY01hc2sgfCBtb2RpZmllcnMsCiAgICAgICAgICByZXR1cm5UeXBlLAogICAgICAgICAgcHJvY2VkdXJlTmFtZSwKICAgICAgICAgIGNvcHlUeXBlVmFyaWFibGVzKAogICAgICAgICAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLnR5cGVWYXJpYWJsZXMgPz8KICAgICAgICAgICAgICAgICAgY29uc3QgPFR5cGVWYXJpYWJsZUJ1aWxkZXI+W10sCiAgICAgICAgICAgICAgZmFjdG9yeURlY2xhcmF0aW9uKSwKICAgICAgICAgIGZvcm1hbHMsCiAgICAgICAgICBQcm9jZWR1cmVLaW5kLkZhY3RvcnksCiAgICAgICAgICB0aGlzLAogICAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIGNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgICAgICBjaGFyRW5kT2Zmc2V0LAogICAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSk7CiAgICB9CgogICAgdmFyIG1ldGFkYXRhQ29sbGVjdG9yID0gbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcjsKICAgIG1ldGFkYXRhQ29sbGVjdG9yPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudCgKICAgICAgICBwcm9jZWR1cmUudGFyZ2V0LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CiAgICBtZXRhZGF0YUNvbGxlY3Rvcj8uc2V0Q29uc3RydWN0b3JOYW1lT2Zmc2V0KHByb2NlZHVyZS50YXJnZXQsIG5hbWUpOwoKICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgc2F2ZWREZWNsYXJhdGlvbiA9CiAgICAgICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXI7CiAgICBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciA9IGZhY3RvcnlEZWNsYXJhdGlvbjsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0diBpbiBwcm9jZWR1cmUudHlwZVZhcmlhYmxlcykgewogICAgICBOYW1lZFR5cGVCdWlsZGVyIHQgPSBwcm9jZWR1cmUucmV0dXJuVHlwZTsKICAgICAgdC5hcmd1bWVudHMuYWRkKGFkZE5hbWVkVHlwZSh0di5uYW1lLCBudWxsLCBwcm9jZWR1cmUuY2hhck9mZnNldCkpOwogICAgfQogICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgPSBzYXZlZERlY2xhcmF0aW9uOwoKICAgIGZhY3RvcnlEZWNsYXJhdGlvbi5yZXNvbHZlVHlwZXMocHJvY2VkdXJlLnR5cGVWYXJpYWJsZXMsIHRoaXMpOwogICAgYWRkQnVpbGRlcihwcm9jZWR1cmVOYW1lLCBwcm9jZWR1cmUsIGNoYXJPZmZzZXQpOwogICAgaWYgKG5hdGl2ZU1ldGhvZE5hbWUgIT0gbnVsbCkgewogICAgICBhZGROYXRpdmVNZXRob2QocHJvY2VkdXJlKTsKICAgIH0KICB9CgogIHZvaWQgYWRkRW51bSgKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PEVudW1Db25zdGFudEluZm8+IGVudW1Db25zdGFudEluZm9zLAogICAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQpIHsKICAgIE1ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yID0gbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcjsKICAgIEVudW1CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgRW51bUJ1aWxkZXIobWV0YWRhdGFDb2xsZWN0b3IsIG1ldGFkYXRhLCBuYW1lLAogICAgICAgIGVudW1Db25zdGFudEluZm9zLCB0aGlzLCBzdGFydENoYXJPZmZzZXQsIGNoYXJPZmZzZXQsIGNoYXJFbmRPZmZzZXQpOwogICAgYWRkQnVpbGRlcihuYW1lLCBidWlsZGVyLCBjaGFyT2Zmc2V0KTsKICAgIG1ldGFkYXRhQ29sbGVjdG9yPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudCgKICAgICAgICBidWlsZGVyLnRhcmdldCwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogIH0KCiAgdm9pZCBhZGRGdW5jdGlvblR5cGVBbGlhcygKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIgdHlwZSwKICAgICAgaW50IGNoYXJPZmZzZXQpIHsKICAgIFR5cGVBbGlhc0J1aWxkZXIgdHlwZWRlZiA9IG5ldyBUeXBlQWxpYXNCdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLCBuYW1lLCB0eXBlVmFyaWFibGVzLCB0eXBlLCB0aGlzLCBjaGFyT2Zmc2V0KTsKICAgIGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3IKICAgICAgICA/LnNldERvY3VtZW50YXRpb25Db21tZW50KHR5cGVkZWYudGFyZ2V0LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CiAgICBjaGVja1R5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcywgdHlwZWRlZik7CiAgICAvLyBOZXN0ZWQgZGVjbGFyYXRpb24gYmVnYW4gaW4gYE91dGxpbmVCdWlsZGVyLmJlZ2luRnVuY3Rpb25UeXBlQWxpYXNgLgogICAgZW5kTmVzdGVkRGVjbGFyYXRpb24oVHlwZVBhcmFtZXRlclNjb3BlS2luZC50eXBlZGVmLCAiI3R5cGVkZWYiKQogICAgICAgIC5yZXNvbHZlVHlwZXModHlwZVZhcmlhYmxlcywgdGhpcyk7CiAgICBhZGRCdWlsZGVyKG5hbWUsIHR5cGVkZWYsIGNoYXJPZmZzZXQpOwogIH0KCiAgRnVuY3Rpb25UeXBlQnVpbGRlciBhZGRGdW5jdGlvblR5cGUoCiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzLAogICAgICBpbnQgY2hhck9mZnNldCkgewogICAgdmFyIGJ1aWxkZXIgPSBuZXcgRnVuY3Rpb25UeXBlQnVpbGRlcihyZXR1cm5UeXBlLCB0eXBlVmFyaWFibGVzLCBmb3JtYWxzKTsKICAgIGNoZWNrVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzLCBudWxsKTsKICAgIC8vIE5lc3RlZCBkZWNsYXJhdGlvbiBiZWdhbiBpbiBgT3V0bGluZUJ1aWxkZXIuYmVnaW5GdW5jdGlvblR5cGVgIG9yCiAgICAvLyBgT3V0bGluZUJ1aWxkZXIuYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyYC4KICAgIGVuZE5lc3RlZERlY2xhcmF0aW9uKFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZnVuY3Rpb25UeXBlLCAiI2Z1bmN0aW9uX3R5cGUiKQogICAgICAgIC5yZXNvbHZlVHlwZXModHlwZVZhcmlhYmxlcywgdGhpcyk7CiAgICByZXR1cm4gYWRkVHlwZShidWlsZGVyLCBjaGFyT2Zmc2V0KTsKICB9CgogIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgYWRkRm9ybWFsUGFyYW1ldGVyKAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHR5cGUsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBib29sIGhhc1RoaXMsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBUb2tlbiBpbml0aWFsaXplclRva2VuKSB7CiAgICBpZiAoaGFzVGhpcykgewogICAgICBtb2RpZmllcnMgfD0gaW5pdGlhbGl6aW5nRm9ybWFsTWFzazsKICAgIH0KICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsID0gbmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIoCiAgICAgICAgbWV0YWRhdGEsIG1vZGlmaWVycywgdHlwZSwgbmFtZSwgdGhpcywgY2hhck9mZnNldCk7CiAgICBmb3JtYWwuaW5pdGlhbGl6ZXJUb2tlbiA9IGluaXRpYWxpemVyVG9rZW47CiAgICBpZiAobGVnYWN5TW9kZSAmJiBoYXNUaGlzICYmIHR5cGUgPT0gbnVsbCkgewogICAgICAodW50eXBlZEluaXRpYWxpemluZ0Zvcm1hbHMgPz89IDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPltdKS5hZGQoZm9ybWFsKTsKICAgIH0KICAgIHJldHVybiBmb3JtYWw7CiAgfQoKICBUeXBlVmFyaWFibGVCdWlsZGVyIGFkZFR5cGVWYXJpYWJsZSgKICAgICAgU3RyaW5nIG5hbWUsIFR5cGVCdWlsZGVyIGJvdW5kLCBpbnQgY2hhck9mZnNldCkgewogICAgdmFyIGJ1aWxkZXIgPSBuZXcgVHlwZVZhcmlhYmxlQnVpbGRlcihuYW1lLCB0aGlzLCBjaGFyT2Zmc2V0LCBib3VuZDogYm91bmQpOwogICAgYm91bmRsZXNzVHlwZVZhcmlhYmxlcy5hZGQoYnVpbGRlcik7CiAgICByZXR1cm4gYnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoKSB7CiAgICBNZXRhZGF0YUJ1aWxkZXIuYnVpbGRBbm5vdGF0aW9ucyhsaWJyYXJ5LCBtZXRhZGF0YSwgdGhpcywgbnVsbCwgbnVsbCk7CiAgfQoKICB2b2lkIGJ1aWxkQnVpbGRlcihCdWlsZGVyIGRlY2xhcmF0aW9uLCBMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeSkgewogICAgQ2xhc3MgY2xzOwogICAgRXh0ZW5zaW9uIGV4dGVuc2lvbjsKICAgIE1lbWJlciBtZW1iZXI7CiAgICBUeXBlZGVmIHR5cGVkZWY7CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgU291cmNlQ2xhc3NCdWlsZGVyKSB7CiAgICAgIGNscyA9IGRlY2xhcmF0aW9uLmJ1aWxkKHRoaXMsIGNvcmVMaWJyYXJ5KTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgU291cmNlRXh0ZW5zaW9uQnVpbGRlcikgewogICAgICBleHRlbnNpb24gPSBkZWNsYXJhdGlvbi5idWlsZCh0aGlzLCBjb3JlTGlicmFyeSk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEZpZWxkQnVpbGRlcikgewogICAgICBtZW1iZXIgPSBkZWNsYXJhdGlvbi5idWlsZCh0aGlzKS4uaXNTdGF0aWMgPSB0cnVlOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgIG1lbWJlciA9IGRlY2xhcmF0aW9uLmJ1aWxkKHRoaXMpLi5pc1N0YXRpYyA9IHRydWU7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgdHlwZWRlZiA9IGRlY2xhcmF0aW9uLmJ1aWxkKHRoaXMpOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBFbnVtQnVpbGRlcikgewogICAgICBjbHMgPSBkZWNsYXJhdGlvbi5idWlsZCh0aGlzLCBjb3JlTGlicmFyeSk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFByZWZpeEJ1aWxkZXIpIHsKICAgICAgLy8gSWdub3JlZC4gS2VybmVsIGRvZXNuJ3QgcmVwcmVzZW50IHByZWZpeGVzLgogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEJ1aWx0aW5UeXBlQnVpbGRlcikgewogICAgICAvLyBOb3RoaW5nIG5lZWRlZC4KICAgICAgcmV0dXJuOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIsICJidWlsZEJ1aWxkZXIiLAogICAgICAgICAgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgZGVjbGFyYXRpb24uZmlsZVVyaSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbi5pc1BhdGNoKSB7CiAgICAgIC8vIFRoZSBrZXJuZWwgbm9kZSBvZiBhIHBhdGNoIGlzIHNoYXJlZCB3aXRoIHRoZSBvcmlnaW4gZGVjbGFyYXRpb24uIFdlCiAgICAgIC8vIGhhdmUgdHdvIGJ1aWxkZXJzOiB0aGUgb3JpZ2luLCBhbmQgdGhlIHBhdGNoLCBidXQgb25seSBvbmUga2VybmVsIG5vZGUKICAgICAgLy8gKHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBmaW5hbCBvdXRwdXQpLiBDb25zZXF1ZW50bHksIHRoZSBub2RlCiAgICAgIC8vIHNob3VsZG4ndCBiZSBhZGRlZCB0byBpdHMgYXBwYXJlbnQga2VybmVsIHBhcmVudCBhcyB0aGlzIHdvdWxkIGNyZWF0ZQogICAgICAvLyBhIGR1cGxpY2F0ZSBlbnRyeSBpbiB0aGUgcGFyZW50J3MgbGlzdCBvZiBjaGlsZHJlbi9tZW1iZXJzLgogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCkgewogICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgQnVpbGRlciBjdXJyZW50ID0gZGVjbGFyYXRpb24ubmV4dDsKICAgICAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDsKICAgICAgICB9CiAgICAgICAgY2xzLm5hbWUgKz0gIiMkY291bnQiOwogICAgICB9CiAgICAgIGxpYnJhcnkuYWRkQ2xhc3MoY2xzKTsKICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9uICE9IG51bGwpIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgPT0gbnVsbCkgewogICAgICAgIGxpYnJhcnkuYWRkRXh0ZW5zaW9uKGV4dGVuc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobWVtYmVyICE9IG51bGwpIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgPT0gbnVsbCkgewogICAgICAgIGxpYnJhcnkuYWRkTWVtYmVyKG1lbWJlcik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZWRlZiAhPSBudWxsKSB7CiAgICAgIGlmIChkZWNsYXJhdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgICBsaWJyYXJ5LmFkZFR5cGVkZWYodHlwZWRlZik7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYWRkTmF0aXZlRGVwZW5kZW5jeShTdHJpbmcgbmF0aXZlSW1wb3J0UGF0aCkgewogICAgQnVpbGRlciBjb25zdHJ1Y3RvciA9IGxvYWRlci5nZXROYXRpdmVBbm5vdGF0aW9uKCk7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0KICAgICAgICBuZXcgQXJndW1lbnRzKDxFeHByZXNzaW9uPltuZXcgU3RyaW5nTGl0ZXJhbChuYXRpdmVJbXBvcnRQYXRoKV0pOwogICAgRXhwcmVzc2lvbiBhbm5vdGF0aW9uOwogICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IpIHsKICAgICAgYW5ub3RhdGlvbiA9IG5ldyBDb25zdHJ1Y3Rvckludm9jYXRpb24oY29uc3RydWN0b3IudGFyZ2V0LCBhcmd1bWVudHMpCiAgICAgICAgLi5pc0NvbnN0ID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGFubm90YXRpb24gPSBuZXcgU3RhdGljSW52b2NhdGlvbihjb25zdHJ1Y3Rvci50YXJnZXQsIGFyZ3VtZW50cykKICAgICAgICAuLmlzQ29uc3QgPSB0cnVlOwogICAgfQogICAgbGlicmFyeS5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24pOwogIH0KCiAgdm9pZCBhZGREZXBlbmRlbmNpZXMoTGlicmFyeSBsaWJyYXJ5LCBTZXQ8U291cmNlTGlicmFyeUJ1aWxkZXI+IHNlZW4pIHsKICAgIGlmICghc2Vlbi5hZGQodGhpcykpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIE1lcmdlIGltcG9ydCBhbmQgZXhwb3J0IGxpc3RzIHRvIGhhdmUgdGhlIGRlcGVuZGVuY2llcyBpbiBzb3VyY2Ugb3JkZXIuCiAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgRGlldExpc3RlbmVyIHRvIGNvcnJlY3RseSBtYXRjaCB1cCBtZXRhZGF0YS4KICAgIGludCBpbXBvcnRJbmRleCA9IDA7CiAgICBpbnQgZXhwb3J0SW5kZXggPSAwOwogICAgd2hpbGUgKGltcG9ydEluZGV4IDwgaW1wb3J0cy5sZW5ndGggfHwgZXhwb3J0SW5kZXggPCBleHBvcnRzLmxlbmd0aCkgewogICAgICBpZiAoZXhwb3J0SW5kZXggPj0gZXhwb3J0cy5sZW5ndGggfHwKICAgICAgICAgIChpbXBvcnRJbmRleCA8IGltcG9ydHMubGVuZ3RoICYmCiAgICAgICAgICAgICAgaW1wb3J0c1tpbXBvcnRJbmRleF0uY2hhck9mZnNldCA8CiAgICAgICAgICAgICAgICAgIGV4cG9ydHNbZXhwb3J0SW5kZXhdLmNoYXJPZmZzZXQpKSB7CiAgICAgICAgLy8gQWRkIGltcG9ydAogICAgICAgIEltcG9ydCBpbXBvcnQgPSBpbXBvcnRzW2ltcG9ydEluZGV4KytdOwoKICAgICAgICAvLyBSYXRoZXIgdGhhbiBhZGQgYSBMaWJyYXJ5RGVwZW5kZW5jeSwgd2UgYXR0YWNoIGFuIGFubm90YXRpb24uCiAgICAgICAgaWYgKGltcG9ydC5uYXRpdmVJbXBvcnRQYXRoICE9IG51bGwpIHsKICAgICAgICAgIGFkZE5hdGl2ZURlcGVuZGVuY3koaW1wb3J0Lm5hdGl2ZUltcG9ydFBhdGgpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoaW1wb3J0LmRlZmVycmVkICYmIGltcG9ydC5wcmVmaXhCdWlsZGVyPy5kZXBlbmRlbmN5ICE9IG51bGwpIHsKICAgICAgICAgIGxpYnJhcnkuYWRkRGVwZW5kZW5jeShpbXBvcnQucHJlZml4QnVpbGRlci5kZXBlbmRlbmN5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGlicmFyeS5hZGREZXBlbmRlbmN5KG5ldyBMaWJyYXJ5RGVwZW5kZW5jeS5pbXBvcnQoCiAgICAgICAgICAgICAgaW1wb3J0LmltcG9ydGVkLnRhcmdldCwKICAgICAgICAgICAgICBuYW1lOiBpbXBvcnQucHJlZml4LAogICAgICAgICAgICAgIGNvbWJpbmF0b3JzOiB0b0tlcm5lbENvbWJpbmF0b3JzKGltcG9ydC5jb21iaW5hdG9ycykpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGltcG9ydC5jaGFyT2Zmc2V0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQWRkIGV4cG9ydAogICAgICAgIEV4cG9ydCBleHBvcnQgPSBleHBvcnRzW2V4cG9ydEluZGV4KytdOwogICAgICAgIGxpYnJhcnkuYWRkRGVwZW5kZW5jeShuZXcgTGlicmFyeURlcGVuZGVuY3kuZXhwb3J0KAogICAgICAgICAgICBleHBvcnQuZXhwb3J0ZWQudGFyZ2V0LAogICAgICAgICAgICBjb21iaW5hdG9yczogdG9LZXJuZWxDb21iaW5hdG9ycyhleHBvcnQuY29tYmluYXRvcnMpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZXhwb3J0LmNoYXJPZmZzZXQpOwogICAgICB9CiAgICB9CgogICAgZm9yIChTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0IGluIHBhcnRzKSB7CiAgICAgIHBhcnQuYWRkRGVwZW5kZW5jaWVzKGxpYnJhcnksIHNlZW4pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQnVpbGRlciBjb21wdXRlQW1iaWd1b3VzRGVjbGFyYXRpb24oCiAgICAgIFN0cmluZyBuYW1lLCBCdWlsZGVyIGRlY2xhcmF0aW9uLCBCdWlsZGVyIG90aGVyLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgaXNFeHBvcnQ6IGZhbHNlLCBib29sIGlzSW1wb3J0OiBmYWxzZX0pIHsKICAgIC8vIFRPRE8oYWhlKTogQ2FuIEkgbW92ZSB0aGlzIHRvIFNjb3BlIG9yIFByZWZpeD8KICAgIGlmIChkZWNsYXJhdGlvbiA9PSBvdGhlcikgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgaWYgKGRlY2xhcmF0aW9uIGlzIEludmFsaWRUeXBlQnVpbGRlcikgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgaWYgKG90aGVyIGlzIEludmFsaWRUeXBlQnVpbGRlcikgcmV0dXJuIG90aGVyOwogICAgaWYgKGRlY2xhcmF0aW9uIGlzIEFjY2Vzc0Vycm9yQnVpbGRlcikgewogICAgICBBY2Nlc3NFcnJvckJ1aWxkZXIgZXJyb3IgPSBkZWNsYXJhdGlvbjsKICAgICAgZGVjbGFyYXRpb24gPSBlcnJvci5idWlsZGVyOwogICAgfQogICAgaWYgKG90aGVyIGlzIEFjY2Vzc0Vycm9yQnVpbGRlcikgewogICAgICBBY2Nlc3NFcnJvckJ1aWxkZXIgZXJyb3IgPSBvdGhlcjsKICAgICAgb3RoZXIgPSBlcnJvci5idWlsZGVyOwogICAgfQogICAgYm9vbCBpc0xvY2FsID0gZmFsc2U7CiAgICBib29sIGlzTG9hZExpYnJhcnkgPSBmYWxzZTsKICAgIEJ1aWxkZXIgcHJlZmVycmVkOwogICAgVXJpIHVyaTsKICAgIFVyaSBvdGhlclVyaTsKICAgIFVyaSBwcmVmZXJyZWRVcmk7CiAgICBVcmkgaGlkZGVuVXJpOwogICAgaWYgKHNjb3BlLmxvY2FsW25hbWVdID09IGRlY2xhcmF0aW9uKSB7CiAgICAgIGlzTG9jYWwgPSB0cnVlOwogICAgICBwcmVmZXJyZWQgPSBkZWNsYXJhdGlvbjsKICAgICAgaGlkZGVuVXJpID0gY29tcHV0ZUxpYnJhcnlVcmkob3RoZXIpOwogICAgfSBlbHNlIHsKICAgICAgdXJpID0gY29tcHV0ZUxpYnJhcnlVcmkoZGVjbGFyYXRpb24pOwogICAgICBvdGhlclVyaSA9IGNvbXB1dGVMaWJyYXJ5VXJpKG90aGVyKTsKICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIExvYWRMaWJyYXJ5QnVpbGRlcikgewogICAgICAgIGlzTG9hZExpYnJhcnkgPSB0cnVlOwogICAgICAgIHByZWZlcnJlZCA9IGRlY2xhcmF0aW9uOwogICAgICAgIHByZWZlcnJlZFVyaSA9IG90aGVyVXJpOwogICAgICB9IGVsc2UgaWYgKG90aGVyIGlzIExvYWRMaWJyYXJ5QnVpbGRlcikgewogICAgICAgIGlzTG9hZExpYnJhcnkgPSB0cnVlOwogICAgICAgIHByZWZlcnJlZCA9IG90aGVyOwogICAgICAgIHByZWZlcnJlZFVyaSA9IHVyaTsKICAgICAgfSBlbHNlIGlmIChvdGhlclVyaT8uc2NoZW1lID09ICJkYXJ0IiAmJiB1cmk/LnNjaGVtZSAhPSAiZGFydCIpIHsKICAgICAgICBwcmVmZXJyZWQgPSBkZWNsYXJhdGlvbjsKICAgICAgICBwcmVmZXJyZWRVcmkgPSB1cmk7CiAgICAgICAgaGlkZGVuVXJpID0gb3RoZXJVcmk7CiAgICAgIH0gZWxzZSBpZiAodXJpPy5zY2hlbWUgPT0gImRhcnQiICYmIG90aGVyVXJpPy5zY2hlbWUgIT0gImRhcnQiKSB7CiAgICAgICAgcHJlZmVycmVkID0gb3RoZXI7CiAgICAgICAgcHJlZmVycmVkVXJpID0gb3RoZXJVcmk7CiAgICAgICAgaGlkZGVuVXJpID0gdXJpOwogICAgICB9CiAgICB9CiAgICBpZiAocHJlZmVycmVkICE9IG51bGwpIHsKICAgICAgaWYgKGlzTG9jYWwpIHsKICAgICAgICB2YXIgdGVtcGxhdGUgPSBpc0V4cG9ydAogICAgICAgICAgICA/IHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQKICAgICAgICAgICAgOiB0ZW1wbGF0ZUxvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0OwogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuYW1lLCBoaWRkZW5VcmkpLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICAgIH0gZWxzZSBpZiAoaXNMb2FkTGlicmFyeSkgewogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyLndpdGhBcmd1bWVudHMocHJlZmVycmVkVXJpKSwKICAgICAgICAgICAgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciB0ZW1wbGF0ZSA9CiAgICAgICAgICAgIGlzRXhwb3J0ID8gdGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydCA6IHRlbXBsYXRlSW1wb3J0SGlkZXNJbXBvcnQ7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5hbWUsIHByZWZlcnJlZFVyaSwgaGlkZGVuVXJpKSwKICAgICAgICAgICAgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICB9CiAgICAgIHJldHVybiBwcmVmZXJyZWQ7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24ubmV4dCA9PSBudWxsICYmIG90aGVyLm5leHQgPT0gbnVsbCkgewogICAgICBpZiAoaXNJbXBvcnQgJiYgZGVjbGFyYXRpb24gaXMgUHJlZml4QnVpbGRlciAmJiBvdGhlciBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgLy8gSGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUgc2FtZSBwcmVmaXggaXMgdXNlZCBmb3IgZGlmZmVyZW50CiAgICAgICAgLy8gaW1wb3J0cy4KICAgICAgICByZXR1cm4gZGVjbGFyYXRpb24KICAgICAgICAgIC4uZXhwb3J0U2NvcGUubWVyZ2Uob3RoZXIuZXhwb3J0U2NvcGUsCiAgICAgICAgICAgICAgKFN0cmluZyBuYW1lLCBCdWlsZGVyIGV4aXN0aW5nLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgICAgICByZXR1cm4gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICAgICAgICAgICAgbmFtZSwgZXhpc3RpbmcsIG1lbWJlciwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGlzRXhwb3J0OiBpc0V4cG9ydCwgaXNJbXBvcnQ6IGlzSW1wb3J0KTsKICAgICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICB2YXIgdGVtcGxhdGUgPQogICAgICAgIGlzRXhwb3J0ID8gdGVtcGxhdGVEdXBsaWNhdGVkRXhwb3J0IDogdGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0OwogICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuYW1lLCB1cmksIG90aGVyVXJpKTsKICAgIGFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgdmFyIGJ1aWxkZXJUZW1wbGF0ZSA9IGlzRXhwb3J0CiAgICAgICAgPyB0ZW1wbGF0ZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGUKICAgICAgICA6IHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydEluVHlwZTsKICAgIG1lc3NhZ2UgPSBidWlsZGVyVGVtcGxhdGUud2l0aEFyZ3VtZW50cygKICAgICAgICBuYW1lLAogICAgICAgIC8vIFRPRE8oYWhlKTogV2Ugc2hvdWxkIHByb2JhYmx5IHVzZSBhIGNvbnRleHQgb2JqZWN0IGhlcmUKICAgICAgICAvLyBpbnN0ZWFkIG9mIGluY2x1ZGluZyBVUklzIGluIHRoaXMgbWVzc2FnZS4KICAgICAgICB1cmksCiAgICAgICAgb3RoZXJVcmkpOwogICAgLy8gV2UgcmVwb3J0IHRoZSBlcnJvciBsYXppbHkgKHNldHRpbmcgc3VwcHJlc3NNZXNzYWdlIHRvIGZhbHNlKSBiZWNhdXNlIHRoZQogICAgLy8gc3BlYyAxOC4xIHN0YXRlcyB0aGF0ICdJdCBpcyBub3QgYW4gZXJyb3IgaWYgTiBpcyBpbnRyb2R1Y2VkIGJ5IHR3byBvcgogICAgLy8gbW9yZSBpbXBvcnRzIGJ1dCBuZXZlciByZWZlcnJlZCB0by4nCiAgICByZXR1cm4gbmV3IEludmFsaWRUeXBlQnVpbGRlcigKICAgICAgICBuYW1lLCBtZXNzYWdlLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCksCiAgICAgICAgc3VwcHJlc3NNZXNzYWdlOiBmYWxzZSk7CiAgfQoKICBpbnQgZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKSB7CiAgICBpbnQgdG90YWwgPSAwOwogICAgZm9yICh2YXIgaW1wb3J0IGluIGltcG9ydHMpIHsKICAgICAgaWYgKGltcG9ydC5kZWZlcnJlZCkgewogICAgICAgIFByb2NlZHVyZSB0ZWFyb2ZmID0gaW1wb3J0LnByZWZpeEJ1aWxkZXIubG9hZExpYnJhcnlCdWlsZGVyLnRlYXJvZmY7CiAgICAgICAgaWYgKHRlYXJvZmYgIT0gbnVsbCkgbGlicmFyeS5hZGRNZW1iZXIodGVhcm9mZik7CiAgICAgICAgdG90YWwrKzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRvdGFsOwogIH0KCiAgaW50IGZpbmlzaEZvcndhcmRlcnMoKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgQ2xvbmVWaXNpdG9yIGNsb25lciA9IG5ldyBDbG9uZVZpc2l0b3IoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9yd2FyZGVyc09yaWdpbnMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgUHJvY2VkdXJlIGZvcndhcmRlciA9IGZvcndhcmRlcnNPcmlnaW5zW2ldOwogICAgICBQcm9jZWR1cmUgb3JpZ2luID0gZm9yd2FyZGVyc09yaWdpbnNbaSArIDFdOwoKICAgICAgaW50IHBvc2l0aW9uYWxDb3VudCA9IG9yaWdpbi5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7CiAgICAgIGlmIChmb3J3YXJkZXIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICE9IHBvc2l0aW9uYWxDb3VudCkgewogICAgICAgIHJldHVybiB1bmV4cGVjdGVkKAogICAgICAgICAgICAiJHBvc2l0aW9uYWxDb3VudCIsCiAgICAgICAgICAgICIke2ZvcndhcmRlci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGh9IiwKICAgICAgICAgICAgb3JpZ2luLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIG9yaWdpbi5maWxlVXJpKTsKICAgICAgfQogICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBvc2l0aW9uYWxDb3VudDsgKytqKSB7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBmb3J3YXJkZXJQYXJhbWV0ZXIgPQogICAgICAgICAgICBmb3J3YXJkZXIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbal07CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBvcmlnaW5QYXJhbWV0ZXIgPQogICAgICAgICAgICBvcmlnaW4uZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbal07CiAgICAgICAgaWYgKG9yaWdpblBhcmFtZXRlci5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBmb3J3YXJkZXJQYXJhbWV0ZXIuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgICAgIGNsb25lci5jbG9uZShvcmlnaW5QYXJhbWV0ZXIuaW5pdGlhbGl6ZXIpOwogICAgICAgICAgZm9yd2FyZGVyUGFyYW1ldGVyLmluaXRpYWxpemVyLnBhcmVudCA9IGZvcndhcmRlclBhcmFtZXRlcjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIE1hcDxTdHJpbmcsIFZhcmlhYmxlRGVjbGFyYXRpb24+IG9yaWdpbk5hbWVkTWFwID0KICAgICAgICAgIDxTdHJpbmcsIFZhcmlhYmxlRGVjbGFyYXRpb24+e307CiAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBvcmlnaW5OYW1lZCBpbiBvcmlnaW4uZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgb3JpZ2luTmFtZWRNYXBbb3JpZ2luTmFtZWQubmFtZV0gPSBvcmlnaW5OYW1lZDsKICAgICAgfQogICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gZm9yd2FyZGVyTmFtZWQKICAgICAgICAgIGluIGZvcndhcmRlci5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG9yaWdpbk5hbWVkID0gb3JpZ2luTmFtZWRNYXBbZm9yd2FyZGVyTmFtZWQubmFtZV07CiAgICAgICAgaWYgKG9yaWdpbk5hbWVkID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgICAgICAgIm51bGwiLCBmb3J3YXJkZXIubmFtZS5uYW1lLCBvcmlnaW4uZmlsZU9mZnNldCwgb3JpZ2luLmZpbGVVcmkpOwogICAgICAgIH0KICAgICAgICBpZiAob3JpZ2luTmFtZWQuaW5pdGlhbGl6ZXIgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgZm9yd2FyZGVyTmFtZWQuaW5pdGlhbGl6ZXIgPSBjbG9uZXIuY2xvbmUob3JpZ2luTmFtZWQuaW5pdGlhbGl6ZXIpOwogICAgICAgIGZvcndhcmRlck5hbWVkLmluaXRpYWxpemVyLnBhcmVudCA9IGZvcndhcmRlck5hbWVkOwogICAgICB9CgogICAgICArK2NvdW50OwogICAgfQogICAgZm9yd2FyZGVyc09yaWdpbnMuY2xlYXIoKTsKICAgIHJldHVybiBjb3VudDsKICB9CgogIHZvaWQgYWRkTmF0aXZlTWV0aG9kKEZ1bmN0aW9uQnVpbGRlciBtZXRob2QpIHsKICAgIG5hdGl2ZU1ldGhvZHMuYWRkKG1ldGhvZCk7CiAgfQoKICBpbnQgZmluaXNoTmF0aXZlTWV0aG9kcygpIHsKICAgIGZvciAoRnVuY3Rpb25CdWlsZGVyIG1ldGhvZCBpbiBuYXRpdmVNZXRob2RzKSB7CiAgICAgIG1ldGhvZC5iZWNvbWVOYXRpdmUobG9hZGVyKTsKICAgIH0KICAgIHJldHVybiBuYXRpdmVNZXRob2RzLmxlbmd0aDsKICB9CgogIC8vLyBDcmVhdGVzIGEgY29weSBvZiBbb3JpZ2luYWxdIGludG8gdGhlIHNjb3BlIG9mIFtkZWNsYXJhdGlvbl0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgYWRkaW5nIGNvcGllcyBvZiBjbGFzcyB0eXBlIHBhcmFtZXRlcnMgdG8gZmFjdG9yeQogIC8vLyBtZXRob2RzIGFuZCB1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9ucywgYW5kIGZvciBhZGRpbmcgY29waWVzIG9mCiAgLy8vIGV4dGVuc2lvbiB0eXBlIHBhcmFtZXRlcnMgdG8gZXh0ZW5zaW9uIGluc3RhbmNlIG1ldGhvZHMuCiAgLy8vCiAgLy8vIElmIFtzeW50aGVzaXplVHlwZVBhcmFtZXRlck5hbWVzXSBpcyBgdHJ1ZWAgdGhlIG5hbWVzIG9mIHRoZQogIC8vLyBbVHlwZVBhcmFtZXRlcl0gYXJlIHByZWZpeCB3aXRoICcjJyB0byBpbmRpY2F0ZSB0aGF0IHRoZWlyIHN5bnRoZXNpemVkLgogIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gY29weVR5cGVWYXJpYWJsZXMoCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gb3JpZ2luYWwsIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgZGVjbGFyYXRpb24sCiAgICAgIHtib29sIHN5bnRoZXNpemVUeXBlUGFyYW1ldGVyTmFtZXM6IGZhbHNlfSkgewogICAgTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMgPSA8VHlwZUJ1aWxkZXI+W107CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IGNvcHkgPSA8VHlwZVZhcmlhYmxlQnVpbGRlcj5bXTsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSBpbiBvcmlnaW5hbCkgewogICAgICB2YXIgbmV3VmFyaWFibGUgPSBuZXcgVHlwZVZhcmlhYmxlQnVpbGRlcigKICAgICAgICAgIHZhcmlhYmxlLm5hbWUsIHRoaXMsIHZhcmlhYmxlLmNoYXJPZmZzZXQsCiAgICAgICAgICBib3VuZDogdmFyaWFibGUuYm91bmQ/LmNsb25lKG5ld1R5cGVzKSwKICAgICAgICAgIHN5bnRoZXNpemVUeXBlUGFyYW1ldGVyTmFtZTogc3ludGhlc2l6ZVR5cGVQYXJhbWV0ZXJOYW1lcyk7CiAgICAgIGNvcHkuYWRkKG5ld1ZhcmlhYmxlKTsKICAgICAgYm91bmRsZXNzVHlwZVZhcmlhYmxlcy5hZGQobmV3VmFyaWFibGUpOwogICAgfQogICAgZm9yIChUeXBlQnVpbGRlciBuZXdUeXBlIGluIG5ld1R5cGVzKSB7CiAgICAgIGRlY2xhcmF0aW9uLmFkZFR5cGUobmV3IFVucmVzb2x2ZWRUeXBlKG5ld1R5cGUsIC0xLCBudWxsKSk7CiAgICB9CiAgICByZXR1cm4gY29weTsKICB9CgogIGludCBmaW5pc2hUeXBlVmFyaWFibGVzKENsYXNzQnVpbGRlciBvYmplY3QsIFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlKSB7CiAgICBpbnQgY291bnQgPSBib3VuZGxlc3NUeXBlVmFyaWFibGVzLmxlbmd0aDsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIGJvdW5kbGVzc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgYnVpbGRlci5maW5pc2godGhpcywgb2JqZWN0LCBkeW5hbWljVHlwZSk7CiAgICB9CiAgICBib3VuZGxlc3NUeXBlVmFyaWFibGVzLmNsZWFyKCk7CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICBpbnQgY29tcHV0ZURlZmF1bHRUeXBlcyhUeXBlQnVpbGRlciBkeW5hbWljVHlwZSwgVHlwZUJ1aWxkZXIgYm90dG9tVHlwZSwKICAgICAgQ2xhc3NCdWlsZGVyIG9iamVjdENsYXNzKSB7CiAgICBpbnQgY291bnQgPSAwOwoKICAgIGludCBjb21wdXRlRGVmYXVsdFR5cGVzRm9yVmFyaWFibGVzKAogICAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdmFyaWFibGVzLCBib29sIGxlZ2FjeU1vZGUpIHsKICAgICAgaWYgKHZhcmlhYmxlcyA9PSBudWxsKSByZXR1cm4gMDsKCiAgICAgIGJvb2wgaGF2ZUVycm9uZW91c0JvdW5kcyA9IGZhbHNlOwogICAgICBpZiAoIWxlZ2FjeU1vZGUpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcmlhYmxlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpXTsKICAgICAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGdlbmVyaWNGdW5jdGlvblR5cGVzID0gPFR5cGVCdWlsZGVyPltdOwogICAgICAgICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKHZhcmlhYmxlLmJvdW5kLAogICAgICAgICAgICAgIHJlc3VsdDogZ2VuZXJpY0Z1bmN0aW9uVHlwZXMpOwogICAgICAgICAgaWYgKGdlbmVyaWNGdW5jdGlvblR5cGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgaGF2ZUVycm9uZW91c0JvdW5kcyA9IHRydWU7CiAgICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVJbkJvdW5kLCB2YXJpYWJsZS5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgdmFyaWFibGUubmFtZS5sZW5ndGgsIHZhcmlhYmxlLmZpbGVVcmkpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFoYXZlRXJyb25lb3VzQm91bmRzKSB7CiAgICAgICAgICBMaXN0PFR5cGVCdWlsZGVyPiBjYWxjdWxhdGVkQm91bmRzID0KICAgICAgICAgICAgICBjYWxjdWxhdGVCb3VuZHModmFyaWFibGVzLCBkeW5hbWljVHlwZSwgYm90dG9tVHlwZSwgb2JqZWN0Q2xhc3MpOwogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJpYWJsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgdmFyaWFibGVzW2ldLmRlZmF1bHRUeXBlID0gY2FsY3VsYXRlZEJvdW5kc1tpXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChsZWdhY3lNb2RlIHx8IGhhdmVFcnJvbmVvdXNCb3VuZHMpIHsKICAgICAgICAvLyBJbiBEYXJ0IDEsIHB1dCBgZHluYW1pY2AgZXZlcnl3aGVyZS4KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcmlhYmxlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgdmFyaWFibGVzW2ldLmRlZmF1bHRUeXBlID0gZHluYW1pY1R5cGU7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gdmFyaWFibGVzLmxlbmd0aDsKICAgIH0KCiAgICB2b2lkIHJlcG9ydElzc3VlcyhMaXN0PE9iamVjdD4gaXNzdWVzKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXNzdWVzLmxlbmd0aDsgaSArPSAzKSB7CiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbiA9IGlzc3Vlc1tpXTsKICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBpc3N1ZXNbaSArIDFdOwogICAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQgPSBpc3N1ZXNbaSArIDJdOwoKICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGRlY2xhcmF0aW9uLmNoYXJPZmZzZXQsIGRlY2xhcmF0aW9uLm5hbWUubGVuZ3RoLAogICAgICAgICAgICBkZWNsYXJhdGlvbi5maWxlVXJpLAogICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICAgICAgfQogICAgfQoKICAgIGJvb2wgbGVnYWN5TW9kZSA9IGxvYWRlci50YXJnZXQubGVnYWN5TW9kZTsKICAgIGZvciAodmFyIGRlY2xhcmF0aW9uIGluIGxpYnJhcnlEZWNsYXJhdGlvbi5tZW1iZXJzLnZhbHVlcykgewogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgewogICAgICAgICAgTGlzdDxPYmplY3Q+IGlzc3VlcyA9IGxlZ2FjeU1vZGUKICAgICAgICAgICAgICA/IGNvbnN0IDxPYmplY3Q+W10KICAgICAgICAgICAgICA6IGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JEZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwKICAgICAgICAgICAgICAgICAgcGVyZm9ybUVycm9yUmVjb3Zlcnk6IHRydWUpOwogICAgICAgICAgcmVwb3J0SXNzdWVzKGlzc3Vlcyk7CiAgICAgICAgICAvLyBJbiBjYXNlIG9mIGlzc3VlcywgdXNlIGxlZ2FjeSBtb2RlIGZvciBlcnJvciByZWNvdmVyeS4KICAgICAgICAgIGNvdW50ICs9IGNvbXB1dGVEZWZhdWx0VHlwZXNGb3JWYXJpYWJsZXMoCiAgICAgICAgICAgICAgZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcywgbGVnYWN5TW9kZSB8fCBpc3N1ZXMuaXNOb3RFbXB0eSk7CiAgICAgICAgfQogICAgICAgIGRlY2xhcmF0aW9uLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgICAgICAgIExpc3Q8T2JqZWN0PiBpc3N1ZXMgPSBsZWdhY3lNb2RlCiAgICAgICAgICAgICAgICA/IGNvbnN0IDxPYmplY3Q+W10KICAgICAgICAgICAgICAgIDogZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvclR5cGVWYXJpYWJsZXMobWVtYmVyLnR5cGVWYXJpYWJsZXMpOwogICAgICAgICAgICByZXBvcnRJc3N1ZXMoaXNzdWVzKTsKICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBpc3N1ZXMsIHVzZSBsZWdhY3kgbW9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkuCiAgICAgICAgICAgIGNvdW50ICs9IGNvbXB1dGVEZWZhdWx0VHlwZXNGb3JWYXJpYWJsZXMoCiAgICAgICAgICAgICAgICBtZW1iZXIudHlwZVZhcmlhYmxlcywgbGVnYWN5TW9kZSB8fCBpc3N1ZXMuaXNOb3RFbXB0eSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgVHlwZUFsaWFzQnVpbGRlcikgewogICAgICAgIExpc3Q8T2JqZWN0PiBpc3N1ZXMgPSBsZWdhY3lNb2RlCiAgICAgICAgICAgID8gY29uc3QgPE9iamVjdD5bXQogICAgICAgICAgICA6IGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JEZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwKICAgICAgICAgICAgICAgIHBlcmZvcm1FcnJvclJlY292ZXJ5OiB0cnVlKTsKICAgICAgICByZXBvcnRJc3N1ZXMoaXNzdWVzKTsKICAgICAgICAvLyBJbiBjYXNlIG9mIGlzc3VlcywgdXNlIGxlZ2FjeSBtb2RlIGZvciBlcnJvciByZWNvdmVyeS4KICAgICAgICBjb3VudCArPSBjb21wdXRlRGVmYXVsdFR5cGVzRm9yVmFyaWFibGVzKAogICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzLCBsZWdhY3lNb2RlIHx8IGlzc3Vlcy5pc05vdEVtcHR5KTsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBGdW5jdGlvbkJ1aWxkZXIpIHsKICAgICAgICBMaXN0PE9iamVjdD4gaXNzdWVzID0gbGVnYWN5TW9kZQogICAgICAgICAgICA/IGNvbnN0IDxPYmplY3Q+W10KICAgICAgICAgICAgOiBnZXROb25TaW1wbGljaXR5SXNzdWVzRm9yVHlwZVZhcmlhYmxlcyhkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzKTsKICAgICAgICByZXBvcnRJc3N1ZXMoaXNzdWVzKTsKICAgICAgICAvLyBJbiBjYXNlIG9mIGlzc3VlcywgdXNlIGxlZ2FjeSBtb2RlIGZvciBlcnJvciByZWNvdmVyeS4KICAgICAgICBjb3VudCArPSBjb21wdXRlRGVmYXVsdFR5cGVzRm9yVmFyaWFibGVzKAogICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzLCBsZWdhY3lNb2RlIHx8IGlzc3Vlcy5pc05vdEVtcHR5KTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBjb3VudDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYXBwbHlQYXRjaGVzKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm47CiAgICBOYW1lSXRlcmF0b3Igb3JpZ2luRGVjbGFyYXRpb25zID0gb3JpZ2luLm5hbWVJdGVyYXRvcjsKICAgIHdoaWxlIChvcmlnaW5EZWNsYXJhdGlvbnMubW92ZU5leHQoKSkgewogICAgICBTdHJpbmcgbmFtZSA9IG9yaWdpbkRlY2xhcmF0aW9ucy5uYW1lOwogICAgICBCdWlsZGVyIG1lbWJlciA9IG9yaWdpbkRlY2xhcmF0aW9ucy5jdXJyZW50OwogICAgICBib29sIGlzU2V0dGVyID0gbWVtYmVyLmlzU2V0dGVyOwogICAgICBCdWlsZGVyIHBhdGNoID0gaXNTZXR0ZXIgPyBzY29wZS5zZXR0ZXJzW25hbWVdIDogc2NvcGUubG9jYWxbbmFtZV07CiAgICAgIGlmIChwYXRjaCAhPSBudWxsKSB7CiAgICAgICAgLy8gW3BhdGNoXSBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIFttZW1iZXJdIGluIFtvcmlnaW5dIGxpYnJhcnksIHNvIGl0CiAgICAgICAgLy8gbXVzdCBiZSBhIHBhdGNoIHRvIFttZW1iZXJdLgogICAgICAgIG1lbWJlci5hcHBseVBhdGNoKHBhdGNoKTsKICAgICAgICAvLyBUT0RPKGFoZSk6IFZlcmlmeSB0aGF0IHBhdGNoIGhhcyB0aGUgQHBhdGNoIGFubm90YXRpb24uCiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTm8gbWVtYmVyIHdpdGggW25hbWVdIGV4aXN0cyBpbiB0aGlzIGxpYnJhcnkgYWxyZWFkeS4gU28gd2UgbmVlZCB0bwogICAgICAgIC8vIGltcG9ydCBpdCBpbnRvIHRoZSBwYXRjaCBsaWJyYXJ5LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgb3JpZ2luCiAgICAgICAgLy8gbGlicmFyeSBpcyBpbiBzY29wZSBvZiB0aGUgcGF0Y2ggbGlicmFyeS4KICAgICAgICBpZiAoaXNTZXR0ZXIpIHsKICAgICAgICAgIHNjb3BlQnVpbGRlci5hZGRTZXR0ZXIobmFtZSwgbWVtYmVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2NvcGVCdWlsZGVyLmFkZE1lbWJlcihuYW1lLCBtZW1iZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgTmFtZUl0ZXJhdG9yIHBhdGNoRGVjbGFyYXRpb25zID0gbmFtZUl0ZXJhdG9yOwogICAgd2hpbGUgKHBhdGNoRGVjbGFyYXRpb25zLm1vdmVOZXh0KCkpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBwYXRjaERlY2xhcmF0aW9ucy5uYW1lOwogICAgICBCdWlsZGVyIG1lbWJlciA9IHBhdGNoRGVjbGFyYXRpb25zLmN1cnJlbnQ7CiAgICAgIC8vIFdlIG5lZWQgdG8gaW5qZWN0IGFsbCBub24tcGF0Y2ggbWVtYmVycyBpbnRvIHRoZSBvcmlnaW4gbGlicmFyeS4gVGhpcwogICAgICAvLyBzaG91bGQgb25seSBhcHBseSB0byBwcml2YXRlIG1lbWJlcnMuCiAgICAgIGlmIChtZW1iZXIuaXNQYXRjaCkgewogICAgICAgIC8vIElnbm9yZSBwYXRjaGVzLgogICAgICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgICAgb3JpZ2luLmluamVjdE1lbWJlckZyb21QYXRjaChuYW1lLCBtZW1iZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIG9yaWdpbi5leHBvcnRNZW1iZXJGcm9tUGF0Y2gobmFtZSwgbWVtYmVyKTsKICAgICAgfQogICAgfQogIH0KCiAgaW50IGZpbmlzaFBhdGNoTWV0aG9kcygpIHsKICAgIGlmICghaXNQYXRjaCkgcmV0dXJuIDA7CiAgICBpbnQgY291bnQgPSAwOwogICAgSXRlcmF0b3I8QnVpbGRlcj4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgY291bnQgKz0gaXRlcmF0b3IuY3VycmVudC5maW5pc2hQYXRjaCgpOwogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgdm9pZCBpbmplY3RNZW1iZXJGcm9tUGF0Y2goU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyLmlzU2V0dGVyKSB7CiAgICAgIGFzc2VydChzY29wZS5zZXR0ZXJzW25hbWVdID09IG51bGwpOwogICAgICBzY29wZUJ1aWxkZXIuYWRkU2V0dGVyKG5hbWUsIG1lbWJlcik7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoc2NvcGUubG9jYWxbbmFtZV0gPT0gbnVsbCk7CiAgICAgIHNjb3BlQnVpbGRlci5hZGRNZW1iZXIobmFtZSwgbWVtYmVyKTsKICAgIH0KICB9CgogIHZvaWQgZXhwb3J0TWVtYmVyRnJvbVBhdGNoKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgaWYgKHVyaS5zY2hlbWUgIT0gImRhcnQiIHx8ICF1cmkucGF0aC5zdGFydHNXaXRoKCJfIikpIHsKICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZVBhdGNoSW5qZWN0aW9uRmFpbGVkLndpdGhBcmd1bWVudHMobmFtZSwgdXJpKSwKICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCwgbWVtYmVyLmZpbGVVcmkpOwogICAgfQogICAgLy8gUGxhdGZvcm0tcHJpdmF0ZSBsaWJyYXJpZXMsIHN1Y2ggYXMgImRhcnQ6X2ludGVybmFsIiBoYXZlIHNwZWNpYWwKICAgIC8vIHNlbWFudGljczogcHVibGljIG1lbWJlcnMgYXJlIGluamVjdGVkIGludG8gdGhlIG9yaWdpbiBsaWJyYXJ5LgogICAgLy8gVE9ETyhhaGUpOiBTZWUgaWYgd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZS4KCiAgICAvLyBJZiB0aGlzIG1lbWJlciBhbHJlYWR5IGV4aXN0IGluIHRoZSBvcmlnaW4gbGlicmFyeSBzY29wZSwgaXQgc2hvdWxkCiAgICAvLyBoYXZlIGJlZW4gbWFya2VkIGFzIHBhdGNoLgogICAgYXNzZXJ0KChtZW1iZXIuaXNTZXR0ZXIgJiYgc2NvcGUuc2V0dGVyc1tuYW1lXSA9PSBudWxsKSB8fAogICAgICAgICghbWVtYmVyLmlzU2V0dGVyICYmIHNjb3BlLmxvY2FsW25hbWVdID09IG51bGwpKTsKICAgIGFkZFRvRXhwb3J0U2NvcGUobmFtZSwgbWVtYmVyKTsKICB9CgogIHZvaWQgcmVwb3J0VHlwZUFyZ3VtZW50SXNzdWVzKAogICAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMsIFVyaSBmaWxlVXJpLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpbmZlcnJlZCwgRGFydFR5cGUgdGFyZ2V0UmVjZWl2ZXIsIFN0cmluZyB0YXJnZXROYW1lfSkgewogICAgZm9yIChUeXBlQXJndW1lbnRJc3N1ZSBpc3N1ZSBpbiBpc3N1ZXMpIHsKICAgICAgRGFydFR5cGUgYXJndW1lbnQgPSBpc3N1ZS5hcmd1bWVudDsKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gaXNzdWUudHlwZVBhcmFtZXRlcjsKCiAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKICAgICAgYm9vbCBpc3N1ZUluZmVycmVkID0gaW5mZXJyZWQgPz8gaW5mZXJyZWRUeXBlcy5jb250YWlucyhhcmd1bWVudCk7CiAgICAgIGlmIChhcmd1bWVudCBpcyBGdW5jdGlvblR5cGUgJiYgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICAgIGlmIChpc3N1ZUluZmVycmVkKSB7CiAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGFyZ3VtZW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50OwogICAgICAgIH0KICAgICAgICB0eXBlUGFyYW1ldGVyID0gbnVsbDsKICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCBpcyBUeXBlUGFyYW1ldGVyVHlwZSAmJgogICAgICAgICAgYXJndW1lbnQucHJvbW90ZWRCb3VuZCAhPSBudWxsKSB7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIubmFtZSwgYXJndW1lbnQsIGFyZ3VtZW50LnByb21vdGVkQm91bmQpLAogICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaXNzdWUuZW5jbG9zaW5nVHlwZSA9PSBudWxsICYmIHRhcmdldFJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgICAgIGlmIChpc3N1ZUluZmVycmVkKSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPQogICAgICAgICAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LAogICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsCiAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLAogICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBhcmd1bWVudCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgICAgICB0YXJnZXRSZWNlaXZlciwKICAgICAgICAgICAgICAgIHRhcmdldE5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBTdHJpbmcgZW5jbG9zaW5nTmFtZSA9IGlzc3VlLmVuY2xvc2luZ1R5cGUgPT0gbnVsbAogICAgICAgICAgICAgID8gdGFyZ2V0TmFtZQogICAgICAgICAgICAgIDogZ2V0R2VuZXJpY1R5cGVOYW1lKGlzc3VlLmVuY2xvc2luZ1R5cGUpOwogICAgICAgICAgYXNzZXJ0KGVuY2xvc2luZ05hbWUgIT0gbnVsbCk7CiAgICAgICAgICBpZiAoaXNzdWVJbmZlcnJlZCkgewogICAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgYXJndW1lbnQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLmJvdW5kLAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLAogICAgICAgICAgICAgICAgZW5jbG9zaW5nTmFtZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnQud2l0aEFyZ3VtZW50cyhhcmd1bWVudCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsIHR5cGVQYXJhbWV0ZXIubmFtZSwgZW5jbG9zaW5nTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZShtZXNzYWdlLCBmaWxlVXJpLCBvZmZzZXQsIHR5cGVQYXJhbWV0ZXIpOwogICAgfQogIH0KCiAgdm9pZCByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZShNZXNzYWdlIG1lc3NhZ2UsIFVyaSBmaWxlVXJpLCBpbnQgZmlsZU9mZnNldCwKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyKSB7CiAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0OwogICAgaWYgKHR5cGVQYXJhbWV0ZXIgIT0gbnVsbCAmJiB0eXBlUGFyYW1ldGVyLmZpbGVPZmZzZXQgIT0gLTEpIHsKICAgICAgLy8gSXQgbG9va3MgbGlrZSB3aGVuIHBhcmFtZXRlcnMgY29tZSBmcm9tIHBhdGNoIGZpbGVzLCB0aGV5IGRvbid0CiAgICAgIC8vIGhhdmUgYSByZXBvcnRhYmxlIGxvY2F0aW9uLgogICAgICBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICBtZXNzYWdlSW5jb3JyZWN0VHlwZUFyZ3VtZW50VmFyaWFibGUud2l0aExvY2F0aW9uKAogICAgICAgICAgICB0eXBlUGFyYW1ldGVyLmxvY2F0aW9uLmZpbGUsIHR5cGVQYXJhbWV0ZXIuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgIF07CiAgICB9CiAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGZpbGVPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpLCBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJbkZpZWxkKEZpZWxkIGZpZWxkLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBjaGVja0JvdW5kc0luVHlwZSgKICAgICAgICBmaWVsZC50eXBlLCB0eXBlRW52aXJvbm1lbnQsIGZpZWxkLmZpbGVVcmksIGZpZWxkLmZpbGVPZmZzZXQsCiAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlUGFydHMoCiAgICAgIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpLCBpbnQgZmlsZU9mZnNldCwKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzLAogICAgICBEYXJ0VHlwZSByZXR1cm5UeXBlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciBpbiB0eXBlUGFyYW1ldGVycykgewogICAgICAgIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgICAgICBwYXJhbWV0ZXIuYm91bmQsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgcGFyYW1ldGVyLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICAgICAgfQogICAgfQogICAgaWYgKHBvc2l0aW9uYWxQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbCBpbiBwb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgICAgICBmb3JtYWwudHlwZSwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBmb3JtYWwuZmlsZU9mZnNldCwKICAgICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgICB9CiAgICB9CiAgICBpZiAobmFtZWRQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIG5hbWVkIGluIG5hbWVkUGFyYW1ldGVycykgewogICAgICAgIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgICAgICBuYW1lZC50eXBlLCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIG5hbWVkLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICAgICAgfQogICAgfQogICAgaWYgKHJldHVyblR5cGUgIT0gbnVsbCkgewogICAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKAogICAgICAgICAgcmV0dXJuVHlwZSwgdHlwZUVudmlyb25tZW50LAogICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgICBpZiAoaXNzdWVzICE9IG51bGwpIHsKICAgICAgICBpbnQgb2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgICBmb3IgKFR5cGVBcmd1bWVudElzc3VlIGlzc3VlIGluIGlzc3VlcykgewogICAgICAgICAgRGFydFR5cGUgYXJndW1lbnQgPSBpc3N1ZS5hcmd1bWVudDsKICAgICAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IGlzc3VlLnR5cGVQYXJhbWV0ZXI7CgogICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiBbYXJndW1lbnRdIHdhcyBpbmZlcnJlZCBvciBzcGVjaWZpZWQKICAgICAgICAgIC8vIGhlcmUsIGJlY2F1c2UgaW5mZXJlbmNlIGluIHJldHVybiB0eXBlcyBib2lscyBkb3duIHRvIGluc3RhbnRpYXRlLQogICAgICAgICAgLy8gLXRvLWJvdW5kLCBhbmQgaXQgY2FuJ3QgcHJvdmlkZSBhIHR5cGUgdGhhdCB2aW9sYXRlcyB0aGUgYm91bmQuCiAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2U7CiAgICAgICAgICBpZiAoYXJndW1lbnQgaXMgRnVuY3Rpb25UeXBlICYmIGFyZ3VtZW50LnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50OwogICAgICAgICAgICB0eXBlUGFyYW1ldGVyID0gbnVsbDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgYXJndW1lbnQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLmJvdW5kLAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLAogICAgICAgICAgICAgICAgZ2V0R2VuZXJpY1R5cGVOYW1lKGlzc3VlLmVuY2xvc2luZ1R5cGUpKTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZShtZXNzYWdlLCBmaWxlVXJpLCBvZmZzZXQsIHR5cGVQYXJhbWV0ZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlKAogICAgICBGdW5jdGlvbk5vZGUgZnVuY3Rpb24sIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBjaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlUGFydHMoCiAgICAgICAgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBmdW5jdGlvbi5maWxlT2Zmc2V0LAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmdW5jdGlvbi50eXBlUGFyYW1ldGVycywKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgcmV0dXJuVHlwZTogZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5MaXN0TGl0ZXJhbCgKICAgICAgTGlzdExpdGVyYWwgbm9kZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIGluZmVycmVkID0gZmFsc2V9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBjaGVja0JvdW5kc0luVHlwZSgKICAgICAgICBub2RlLnR5cGVBcmd1bWVudCwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLCBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5TZXRMaXRlcmFsKAogICAgICBTZXRMaXRlcmFsIG5vZGUsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpbmZlcnJlZCA9IGZhbHNlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgICAgbm9kZS50eXBlQXJndW1lbnQsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGluZmVycmVkOiBpbmZlcnJlZCwgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luTWFwTGl0ZXJhbCgKICAgICAgTWFwTGl0ZXJhbCBub2RlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgaW5mZXJyZWQgPSBmYWxzZX0pIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIGNoZWNrQm91bmRzSW5UeXBlKG5vZGUua2V5VHlwZSwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLCBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgICBjaGVja0JvdW5kc0luVHlwZShub2RlLnZhbHVlVHlwZSwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLCBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICBEYXJ0VHlwZSB0eXBlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBVcmkgZmlsZVVyaSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgaW5mZXJyZWQsIGJvb2wgYWxsb3dTdXBlckJvdW5kZWQgPSB0cnVlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgTGlzdDxUeXBlQXJndW1lbnRJc3N1ZT4gaXNzdWVzID0gZmluZFR5cGVBcmd1bWVudElzc3VlcygKICAgICAgICB0eXBlLCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IGFsbG93U3VwZXJCb3VuZGVkKTsKICAgIGlmIChpc3N1ZXMgIT0gbnVsbCkgewogICAgICByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZXMoaXNzdWVzLCBmaWxlVXJpLCBvZmZzZXQsIGluZmVycmVkOiBpbmZlcnJlZCk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5WYXJpYWJsZURlY2xhcmF0aW9uKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpbmZlcnJlZCA9IGZhbHNlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgaWYgKG5vZGUudHlwZSA9PSBudWxsKSByZXR1cm47CiAgICBjaGVja0JvdW5kc0luVHlwZShub2RlLnR5cGUsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGluZmVycmVkOiBpbmZlcnJlZCwgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICBDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIGluZmVycmVkID0gZmFsc2V9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNFbXB0eSkgcmV0dXJuOwogICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBub2RlLnRhcmdldDsKICAgIENsYXNzIGtsYXNzID0gY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3M7CiAgICBEYXJ0VHlwZSBjb25zdHJ1Y3RlZFR5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZShrbGFzcywgbm9kZS5hcmd1bWVudHMudHlwZXMpOwogICAgY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgICAgY29uc3RydWN0ZWRUeXBlLCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBpbmZlcnJlZDogaW5mZXJyZWQsIGFsbG93U3VwZXJCb3VuZGVkOiBmYWxzZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5GYWN0b3J5SW52b2NhdGlvbigKICAgICAgU3RhdGljSW52b2NhdGlvbiBub2RlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgaW5mZXJyZWQgPSBmYWxzZX0pIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIGlmIChub2RlLmFyZ3VtZW50cy50eXBlcy5pc0VtcHR5KSByZXR1cm47CiAgICBQcm9jZWR1cmUgZmFjdG9yeSA9IG5vZGUudGFyZ2V0OwogICAgYXNzZXJ0KGZhY3RvcnkuaXNGYWN0b3J5KTsKICAgIENsYXNzIGtsYXNzID0gZmFjdG9yeS5lbmNsb3NpbmdDbGFzczsKICAgIERhcnRUeXBlIGNvbnN0cnVjdGVkVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGtsYXNzLCBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgICBjaGVja0JvdW5kc0luVHlwZSgKICAgICAgICBjb25zdHJ1Y3RlZFR5cGUsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGluZmVycmVkOiBpbmZlcnJlZCwgYWxsb3dTdXBlckJvdW5kZWQ6IGZhbHNlKTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJblN0YXRpY0ludm9jYXRpb24oCiAgICAgIFN0YXRpY0ludm9jYXRpb24gbm9kZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIGluZmVycmVkID0gZmFsc2V9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNFbXB0eSkgcmV0dXJuOwogICAgQ2xhc3Mga2xhc3MgPSBub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5vZGUudGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzID0gbm9kZS5hcmd1bWVudHMudHlwZXM7CiAgICAvLyBUaGUgZm9sbG93aW5nIGVycm9yIGlzIHRvIGJlIHJlcG9ydGVkIGVsc2V3aGVyZS4KICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCAhPSBhcmd1bWVudHMubGVuZ3RoKSByZXR1cm47CiAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzRm9ySW52b2NhdGlvbigKICAgICAgICBwYXJhbWV0ZXJzLCBhcmd1bWVudHMsIHR5cGVFbnZpcm9ubWVudCk7CiAgICBpZiAoaXNzdWVzICE9IG51bGwpIHsKICAgICAgRGFydFR5cGUgdGFyZ2V0UmVjZWl2ZXI7CiAgICAgIGlmIChrbGFzcyAhPSBudWxsKSB7CiAgICAgICAgdGFyZ2V0UmVjZWl2ZXIgPSBuZXcgSW50ZXJmYWNlVHlwZShrbGFzcyk7CiAgICAgIH0KICAgICAgU3RyaW5nIHRhcmdldE5hbWUgPSBub2RlLnRhcmdldC5uYW1lLm5hbWU7CiAgICAgIHJlcG9ydFR5cGVBcmd1bWVudElzc3Vlcyhpc3N1ZXMsIGZpbGVVcmksIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICAgIGluZmVycmVkOiBpbmZlcnJlZCwKICAgICAgICAgIHRhcmdldFJlY2VpdmVyOiB0YXJnZXRSZWNlaXZlciwKICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUpOwogICAgfQogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luTWV0aG9kSW52b2NhdGlvbigKICAgICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LAogICAgICBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHksCiAgICAgIFR5cGVJbmZlcnJlckltcGwgdHlwZUluZmVycmVyLAogICAgICBOYW1lIG5hbWUsCiAgICAgIE1lbWJlciBpbnRlcmZhY2VUYXJnZXQsCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFVyaSBmaWxlVXJpLAogICAgICBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpbmZlcnJlZCA9IGZhbHNlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgaWYgKGFyZ3VtZW50cy50eXBlcy5pc0VtcHR5KSByZXR1cm47CiAgICBDbGFzcyBrbGFzczsKICAgIExpc3Q8RGFydFR5cGU+IHJlY2VpdmVyVHlwZUFyZ3VtZW50czsKICAgIGlmIChyZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBrbGFzcyA9IHJlY2VpdmVyVHlwZS5jbGFzc05vZGU7CiAgICAgIHJlY2VpdmVyVHlwZUFyZ3VtZW50cyA9IHJlY2VpdmVyVHlwZS50eXBlQXJndW1lbnRzOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gVE9ETyhkbWl0cnlhcyk6IEZpbmQgYSBiZXR0ZXIgd2F5IHRoYW4gcmVseWluZyBvbiBbaW50ZXJmYWNlVGFyZ2V0XS4KICAgIE1lbWJlciBtZXRob2QgPSBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXQoa2xhc3MsIG5hbWUpID8/IGludGVyZmFjZVRhcmdldDsKICAgIGlmIChtZXRob2QgPT0gbnVsbCB8fCBtZXRob2QgaXMhIFByb2NlZHVyZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoa2xhc3MgIT0gbWV0aG9kLmVuY2xvc2luZ0NsYXNzKSB7CiAgICAgIFN1cGVydHlwZSBwYXJlbnQgPQogICAgICAgICAgaGllcmFyY2h5LmdldENsYXNzQXNJbnN0YW5jZU9mKGtsYXNzLCBtZXRob2QuZW5jbG9zaW5nQ2xhc3MpOwogICAgICBrbGFzcyA9IG1ldGhvZC5lbmNsb3NpbmdDbGFzczsKICAgICAgcmVjZWl2ZXJUeXBlQXJndW1lbnRzID0gcGFyZW50LnR5cGVBcmd1bWVudHM7CiAgICB9CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbk1hcCA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjZWl2ZXJUeXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIHN1YnN0aXR1dGlvbk1hcFtrbGFzcy50eXBlUGFyYW1ldGVyc1tpXV0gPSByZWNlaXZlclR5cGVBcmd1bWVudHNbaV07CiAgICB9CiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IG1ldGhvZFBhcmFtZXRlcnMgPSBtZXRob2QuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnM7CiAgICAvLyBUaGUgZXJyb3IgaXMgdG8gYmUgcmVwb3J0ZWQgZWxzZXdoZXJlLgogICAgaWYgKG1ldGhvZFBhcmFtZXRlcnMubGVuZ3RoICE9IGFyZ3VtZW50cy50eXBlcy5sZW5ndGgpIHJldHVybjsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gaW5zdGFudGlhdGVkTWV0aG9kUGFyYW1ldGVycyA9CiAgICAgICAgbmV3IExpc3Q8VHlwZVBhcmFtZXRlcj4uZmlsbGVkKG1ldGhvZFBhcmFtZXRlcnMubGVuZ3RoLCBudWxsKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFudGlhdGVkTWV0aG9kUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICBpbnN0YW50aWF0ZWRNZXRob2RQYXJhbWV0ZXJzW2ldID0KICAgICAgICAgIG5ldyBUeXBlUGFyYW1ldGVyKG1ldGhvZFBhcmFtZXRlcnNbaV0ubmFtZSk7CiAgICAgIHN1YnN0aXR1dGlvbk1hcFttZXRob2RQYXJhbWV0ZXJzW2ldXSA9CiAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlclR5cGUoaW5zdGFudGlhdGVkTWV0aG9kUGFyYW1ldGVyc1tpXSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbnRpYXRlZE1ldGhvZFBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgaW5zdGFudGlhdGVkTWV0aG9kUGFyYW1ldGVyc1tpXS5ib3VuZCA9CiAgICAgICAgICBzdWJzdGl0dXRlKG1ldGhvZFBhcmFtZXRlcnNbaV0uYm91bmQsIHN1YnN0aXR1dGlvbk1hcCk7CiAgICB9CiAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzRm9ySW52b2NhdGlvbigKICAgICAgICBpbnN0YW50aWF0ZWRNZXRob2RQYXJhbWV0ZXJzLCBhcmd1bWVudHMudHlwZXMsIHR5cGVFbnZpcm9ubWVudCk7CiAgICBpZiAoaXNzdWVzICE9IG51bGwpIHsKICAgICAgcmVwb3J0VHlwZUFyZ3VtZW50SXNzdWVzKGlzc3VlcywgZmlsZVVyaSwgb2Zmc2V0LAogICAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLAogICAgICAgICAgdGFyZ2V0UmVjZWl2ZXI6IHJlY2VpdmVyVHlwZSwKICAgICAgICAgIHRhcmdldE5hbWU6IG5hbWUubmFtZSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5PdXRsaW5lKFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQpIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIEl0ZXJhdG9yPEJ1aWxkZXI+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBpdGVyYXRvci5jdXJyZW50OwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgRmllbGRCdWlsZGVyKSB7CiAgICAgICAgY2hlY2tCb3VuZHNJbkZpZWxkKGRlY2xhcmF0aW9uLnRhcmdldCwgdHlwZUVudmlyb25tZW50KTsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgICAgY2hlY2tCb3VuZHNJbkZ1bmN0aW9uTm9kZSgKICAgICAgICAgICAgZGVjbGFyYXRpb24udGFyZ2V0LmZ1bmN0aW9uLCB0eXBlRW52aXJvbm1lbnQsIGRlY2xhcmF0aW9uLmZpbGVVcmkpOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgIGRlY2xhcmF0aW9uLmNoZWNrQm91bmRzSW5PdXRsaW5lKHR5cGVFbnZpcm9ubWVudCk7CiAgICAgIH0KICAgIH0KICAgIGluZmVycmVkVHlwZXMuY2xlYXIoKTsKICB9CgogIGludCBmaW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbHMoKSB7CiAgICBpZiAoIWxlZ2FjeU1vZGUgfHwgdW50eXBlZEluaXRpYWxpemluZ0Zvcm1hbHMgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHVudHlwZWRJbml0aWFsaXppbmdGb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHVudHlwZWRJbml0aWFsaXppbmdGb3JtYWxzW2ldLmZpbmFsaXplSW5pdGlhbGl6aW5nRm9ybWFsKCk7CiAgICB9CiAgICBpbnQgY291bnQgPSB1bnR5cGVkSW5pdGlhbGl6aW5nRm9ybWFscy5sZW5ndGg7CiAgICB1bnR5cGVkSW5pdGlhbGl6aW5nRm9ybWFscyA9IG51bGw7CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEZpZWxkQnVpbGRlcj4gdGFrZUltcGxpY2l0bHlUeXBlZEZpZWxkcygpIHsKICAgIExpc3Q8RmllbGRCdWlsZGVyPiByZXN1bHQgPSBpbXBsaWNpdGx5VHlwZWRGaWVsZHM7CiAgICBpbXBsaWNpdGx5VHlwZWRGaWVsZHMgPSBudWxsOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8vIFRoZSBraW5kIG9mIHR5cGUgcGFyYW1ldGVyIHNjb3BlIGJ1aWx0IGJ5IGEgW1R5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXJdCi8vIG9iamVjdC4KZW51bSBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kIHsKICBsaWJyYXJ5LAogIGNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb24sCiAgY2xhc3NEZWNsYXJhdGlvbiwKICBtaXhpbkRlY2xhcmF0aW9uLAogIHVubmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogIG5hbWVkTWl4aW5BcHBsaWNhdGlvbiwKICBleHRlbnNpb25EZWNsYXJhdGlvbiwKICB0eXBlZGVmLAogIHN0YXRpY09ySW5zdGFuY2VNZXRob2RPckNvbnN0cnVjdG9yLAogIHRvcExldmVsTWV0aG9kLAogIGZhY3RvcnlNZXRob2QsCiAgZnVuY3Rpb25UeXBlLAp9CgovLy8gQSBidWlsZGVyIG9iamVjdCBwcmVwYXJpbmcgZm9yIGJ1aWxkaW5nIGRlY2xhcmF0aW9ucyB0aGF0IGNhbiBpbnRyb2R1Y2UgdHlwZQovLy8gcGFyYW1ldGVyIGFuZC9vciBtZW1iZXJzLgovLy8KLy8vIFVubGlrZSBbU2NvcGVdLCB0aGlzIHNjb3BlIGlzIHVzZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiBidWlsZGVycyB0bwovLy8gZW5zdXJlIHR5cGVzIGFuZCBtZW1iZXJzIGFyZSBhZGRlZCB0byBhbmQgcmVzb2x2ZWQgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCmNsYXNzIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgewogIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQgX2tpbmQ7CgogIGZpbmFsIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgcGFyZW50OwoKICBmaW5hbCBNYXA8U3RyaW5nLCBCdWlsZGVyPiBtZW1iZXJzOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBCdWlsZGVyPiBjb25zdHJ1Y3RvcnM7CgogIGZpbmFsIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IHNldHRlcnM7CgogIGZpbmFsIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVzID0gPFVucmVzb2x2ZWRUeXBlPltdOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdG9wIHVzaW5nIFtfbmFtZV0gZm9yIGRldGVybWluaW5nIHRoZSBkZWNsYXJhdGlvbgogIC8vIGtpbmQuCiAgU3RyaW5nIF9uYW1lOwoKICAvLy8gT2Zmc2V0IG9mIG5hbWUgdG9rZW4sIHVwZGF0ZWQgYnkgdGhlIG91dGxpbmUgYnVpbGRlciBhbG9uZwogIC8vLyB3aXRoIHRoZSBuYW1lIGFzIHRoZSBjdXJyZW50IGRlY2xhcmF0aW9uIGNoYW5nZXMuCiAgaW50IF9jaGFyT2Zmc2V0OwoKICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IF90eXBlVmFyaWFibGVzOwoKICAvLy8gVGhlIHR5cGUgb2YgYHRoaXNgIGluIGluc3RhbmNlIG1ldGhvZHMgZGVjbGFyZWQgaW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9ucy4KICAvLy8KICAvLy8gSW5zdGFuY2UgbWV0aG9kcyBkZWNsYXJlZCBpbiBleHRlbnNpb24gZGVjbGFyYXRpb25zIG1ldGhvZHMgYXJlIGV4dGVuZGVkCiAgLy8vIHdpdGggYSBzeW50aGVzaXplZCBwYXJhbWV0ZXIgb2YgdGhpcyB0eXBlLgogIFR5cGVCdWlsZGVyIF9leHRlbnNpb25UaGlzVHlwZTsKCiAgYm9vbCBoYXNDb25zdENvbnN0cnVjdG9yID0gZmFsc2U7CgogIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIodGhpcy5fa2luZCwgdGhpcy5tZW1iZXJzLCB0aGlzLnNldHRlcnMsCiAgICAgIHRoaXMuY29uc3RydWN0b3JzLCB0aGlzLl9uYW1lLCB0aGlzLl9jaGFyT2Zmc2V0LCB0aGlzLnBhcmVudCkgewogICAgYXNzZXJ0KF9uYW1lICE9IG51bGwpOwogIH0KCiAgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5saWJyYXJ5KCkKICAgICAgOiB0aGlzKFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQubGlicmFyeSwgPFN0cmluZywgQnVpbGRlcj57fSwKICAgICAgICAgICAgPFN0cmluZywgQnVpbGRlcj57fSwgbnVsbCwgIjxsaWJyYXJ5PiIsIC0xLCBudWxsKTsKCiAgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciBjcmVhdGVOZXN0ZWQoCiAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQga2luZCwgU3RyaW5nIG5hbWUsIGJvb2wgaGFzTWVtYmVycykgewogICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyKAogICAgICAgIGtpbmQsCiAgICAgICAgaGFzTWVtYmVycyA/IDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30gOiBudWxsLAogICAgICAgIGhhc01lbWJlcnMgPyA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9IDogbnVsbCwKICAgICAgICBoYXNNZW1iZXJzID8gPFN0cmluZywgTWVtYmVyQnVpbGRlcj57fSA6IG51bGwsCiAgICAgICAgbmFtZSwKICAgICAgICAtMSwKICAgICAgICB0aGlzKTsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhhdCB0aGlzIGJ1aWxkZXIgaXMgcHJlcGFyaW5nIGZvciBhIGNsYXNzIGRlY2xhcmF0aW9uIHdpdGggdGhlCiAgLy8vIGdpdmVuIFtuYW1lXSBhbmQgW3R5cGVWYXJpYWJsZXNdIGxvY2F0ZWQgW2NoYXJPZmZzZXRdLgogIHZvaWQgbWFya0FzQ2xhc3NEZWNsYXJhdGlvbigKICAgICAgU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMpIHsKICAgIGFzc2VydChfa2luZCA9PSBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb24sCiAgICAgICAgIlVuZXhwZWN0ZWQgZGVjbGFyYXRpb24ga2luZDogJF9raW5kIik7CiAgICBfa2luZCA9IFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuY2xhc3NEZWNsYXJhdGlvbjsKICAgIF9uYW1lID0gbmFtZTsKICAgIF9jaGFyT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIF90eXBlVmFyaWFibGVzID0gdHlwZVZhcmlhYmxlczsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhhdCB0aGlzIGJ1aWxkZXIgaXMgcHJlcGFyaW5nIGZvciBhIG5hbWVkIG1peGluIGFwcGxpY2F0aW9uCiAgLy8vIHdpdGggdGhlIGdpdmVuIFtuYW1lXSBhbmQgW3R5cGVWYXJpYWJsZXNdIGxvY2F0ZWQgW2NoYXJPZmZzZXRdLgogIHZvaWQgbWFya0FzTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcykgewogICAgYXNzZXJ0KF9raW5kID09IFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuY2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbiwKICAgICAgICAiVW5leHBlY3RlZCBkZWNsYXJhdGlvbiBraW5kOiAkX2tpbmQiKTsKICAgIF9raW5kID0gVHlwZVBhcmFtZXRlclNjb3BlS2luZC5uYW1lZE1peGluQXBwbGljYXRpb247CiAgICBfbmFtZSA9IG5hbWU7CiAgICBfY2hhck9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICBfdHlwZVZhcmlhYmxlcyA9IHR5cGVWYXJpYWJsZXM7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgdGhpcyBidWlsZGVyIGlzIHByZXBhcmluZyBmb3IgYSBtaXhpbiBkZWNsYXJhdGlvbiB3aXRoIHRoZQogIC8vLyBnaXZlbiBbbmFtZV0gYW5kIFt0eXBlVmFyaWFibGVzXSBsb2NhdGVkIFtjaGFyT2Zmc2V0XS4KICB2b2lkIG1hcmtBc01peGluRGVjbGFyYXRpb24oCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB1c2luZyAnY2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbicgZm9yIG1peGluCiAgICAvLyBkZWNsYXJhdGlvbi4gVGhlc2UgYXJlIHN5bnRhY3RpY2FsbHkgZGlzdGluY3Qgc28gd2UgZG9uJ3QgbmVlZCB0aGUKICAgIC8vIHRyYW5zaXRpb24uCiAgICBhc3NlcnQoX2tpbmQgPT0gVHlwZVBhcmFtZXRlclNjb3BlS2luZC5jbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICAgICJVbmV4cGVjdGVkIGRlY2xhcmF0aW9uIGtpbmQ6ICRfa2luZCIpOwogICAgX2tpbmQgPSBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLm1peGluRGVjbGFyYXRpb247CiAgICBfbmFtZSA9IG5hbWU7CiAgICBfY2hhck9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICBfdHlwZVZhcmlhYmxlcyA9IHR5cGVWYXJpYWJsZXM7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgdGhpcyBidWlsZGVyIGlzIHByZXBhcmluZyBmb3IgYW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uIHdpdGgKICAvLy8gdGhlIGdpdmVuIFtuYW1lXSBhbmQgW3R5cGVWYXJpYWJsZXNdIGxvY2F0ZWQgW2NoYXJPZmZzZXRdLgogIHZvaWQgbWFya0FzRXh0ZW5zaW9uRGVjbGFyYXRpb24oCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzKSB7CiAgICBhc3NlcnQoX2tpbmQgPT0gVHlwZVBhcmFtZXRlclNjb3BlS2luZC5leHRlbnNpb25EZWNsYXJhdGlvbiwKICAgICAgICAiVW5leHBlY3RlZCBkZWNsYXJhdGlvbiBraW5kOiAkX2tpbmQiKTsKICAgIF9uYW1lID0gbmFtZTsKICAgIF9jaGFyT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIF90eXBlVmFyaWFibGVzID0gdHlwZVZhcmlhYmxlczsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhlICdleHRlbnNpb24gdGhpcyB0eXBlJyBvZiB0aGUgZXh0ZW5zaW9uIGRlY2xhcmF0aW9uIHByZXBhcmVkCiAgLy8vIGZvciBieSB0aGlzIGJ1aWxkZXIuCiAgLy8vCiAgLy8vIFNlZSBbZXh0ZW5zaW9uVGhpc1R5cGVdIGZvciB0ZXJtaW5vbG9neS4KICB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uVGhpc1R5cGUoVHlwZUJ1aWxkZXIgdHlwZSkgewogICAgYXNzZXJ0KF9raW5kID09IFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZXh0ZW5zaW9uRGVjbGFyYXRpb24sCiAgICAgICAgIkRlY2xhcmF0aW9uQnVpbGRlci5yZWdpc3RlckV4dGVuc2lvblRoaXNUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgJF9raW5kIik7CiAgICBhc3NlcnQoX2V4dGVuc2lvblRoaXNUeXBlID09IG51bGwsCiAgICAgICAgIkV4dGVuc2lvbiB0aGlzIHR5cGUgaGFzIGFscmVhZHkgYmVlbiBzZXQuIik7CiAgICBfZXh0ZW5zaW9uVGhpc1R5cGUgPSB0eXBlOwogIH0KCiAgLy8vIFJldHVybnMgd2hhdCBraW5kIG9mIGRlY2xhcmF0aW9uIHRoaXMgW1R5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXJdIGlzCiAgLy8vIHByZXBhcmluZyBmb3IuCiAgLy8vCiAgLy8vIFRoaXMgaW5mb3JtYXRpb24gaXMgdHJhbnNpZW50IGZvciBzb21lIGRlY2xhcmF0aW9ucy4gSW4gcGFydGljdWxhcgogIC8vLyBjbGFzc2VzIGFuZCBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbnMgYXJlIGluaXRpYWxseSBjcmVhdGVkIHdpdGggdGhlIGtpbmQKICAvLy8gW1R5cGVQYXJhbWV0ZXJTY29wZUtpbmQuY2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbl0gYmVmb3JlIGEgY2FsbCB0bwogIC8vLyBlaXRoZXIgW21hcmtBc0NsYXNzRGVjbGFyYXRpb25dIG9yIFttYXJrQXNOYW1lZE1peGluQXBwbGljYXRpb25dIHNldHMgdGhlCiAgLy8vIHZhbHVlIHRvIGl0cyBhY3R1YWwga2luZC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGUgdHJhbnNpdGlvbiBjdXJyZW50bHkgdXNlZCBvbiBtaXhpbgogIC8vIGRlY2xhcmF0aW9ucy4KICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kIGdldCBraW5kID0+IF9raW5kOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gX25hbWU7CgogIGludCBnZXQgY2hhck9mZnNldCA9PiBfY2hhck9mZnNldDsKCiAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBnZXQgdHlwZVZhcmlhYmxlcyA9PiBfdHlwZVZhcmlhYmxlczsKCiAgLy8vIFJldHVybnMgdGhlICdleHRlbnNpb24gdGhpcyB0eXBlJyBvZiB0aGUgZXh0ZW5zaW9uIGRlY2xhcmF0aW9uIHByZXBhcmVkCiAgLy8vIGZvciBieSB0aGlzIGJ1aWxkZXIuCiAgLy8vCiAgLy8vIFRoZSAnZXh0ZW5zaW9uIHRoaXMgdHlwZScgaXMgdGhlIHR5cGUgbWVudGlvbmVkIGluIHRoZSBvbi1jbGF1c2Ugb2YgdGhlCiAgLy8vIGV4dGVuc2lvbiBkZWNsYXJhdGlvbi4gRm9yIGluc3RhbmNlIGBCYCBpbiB0aGlzIGV4dGVuc2lvbiBkZWNsYXJhdGlvbjoKICAvLy8KICAvLy8gICAgIGV4dGVuc2lvbiBBIG9uIEIgewogIC8vLyAgICAgICBCIG1ldGhvZCgpID0+IHRoaXM7CiAgLy8vICAgICB9CiAgLy8vCiAgLy8vIFRoZSAnZXh0ZW5zaW9uIHRoaXMgdHlwZScgaXMgdGhlIHR5cGUgaWYgYHRoaXNgIGV4cHJlc3Npb24gaW4gaW5zdGFuY2UKICAvLy8gbWV0aG9kcyBkZWNsYXJlZCBpbiBleHRlbnNpb24gZGVjbGFyYXRpb25zLgogIFR5cGVCdWlsZGVyIGdldCBleHRlbnNpb25UaGlzVHlwZSB7CiAgICBhc3NlcnQoa2luZCA9PSBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmV4dGVuc2lvbkRlY2xhcmF0aW9uLAogICAgICAgICJEZWNsYXJhdGlvbkJ1aWxkZXIuZXh0ZW5zaW9uVGhpc1R5cGUgbm90IHN1cHBvcnRlZCBvbiAka2luZC4iKTsKICAgIGFzc2VydChfZXh0ZW5zaW9uVGhpc1R5cGUgIT0gbnVsbCwKICAgICAgICAiRGVjbGFyYXRpb25CdWlsZGVyLmV4dGVuc2lvblRoaXNUeXBlIGhhcyBub3QgYmVlbiBzZXQgb24gJHRoaXMuIik7CiAgICByZXR1cm4gX2V4dGVuc2lvblRoaXNUeXBlOwogIH0KCiAgLy8vIEFkZHMgdGhlIHlldCB1bnJlc29sdmVkIFt0eXBlXSB0byB0aGlzIHNjb3BlIGJ1aWxkZXIuCiAgLy8vCiAgLy8vIFVucmVzb2x2ZWQgdHlwZSB3aWxsIGJlIHJlc29sdmVkIHRocm91Z2ggW3Jlc29sdmVUeXBlc10gd2hlbiB0aGUgc2NvcGUKICAvLy8gaXMgZnVsbHkgYnVpbHQuIFRoaXMgYWxsb3dzIGZvciByZXNvbHZpbmcgc2VsZi1yZWZlcmVuY2luZyB0eXBlcywgbGlrZQogIC8vLyB0eXBlIHBhcmFtZXRlciB1c2VkIGluIHRoZWlyIG93biBib3VuZCwgZm9yIGluc3RhbmNlIGA8VCBleHRlbmRzIEE8VD4+YC4KICB2b2lkIGFkZFR5cGUoVW5yZXNvbHZlZFR5cGUgdHlwZSkgewogICAgdHlwZXMuYWRkKHR5cGUpOwogIH0KCiAgLy8vIFJlc29sdmVzIHR5cGUgdmFyaWFibGVzIGluIFt0eXBlc10gYW5kIHByb3BhZ2F0ZSBvdGhlciB0eXBlcyB0byBbcGFyZW50XS4KICB2b2lkIHJlc29sdmVUeXBlcygKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBNYXA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPiBtYXA7CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIG1hcCA9IDxTdHJpbmcsIFR5cGVWYXJpYWJsZUJ1aWxkZXI+e307CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBtYXBbYnVpbGRlci5uYW1lXSA9IGJ1aWxkZXI7CiAgICAgIH0KICAgIH0KICAgIFNjb3BlIHNjb3BlOwogICAgZm9yIChVbnJlc29sdmVkVHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIE9iamVjdCBuYW1lT3JRdWFsaWZpZWQgPSB0eXBlLmJ1aWxkZXIubmFtZTsKICAgICAgU3RyaW5nIG5hbWUgPSBuYW1lT3JRdWFsaWZpZWQgaXMgUXVhbGlmaWVkTmFtZQogICAgICAgICAgPyBuYW1lT3JRdWFsaWZpZWQucXVhbGlmaWVyCiAgICAgICAgICA6IG5hbWVPclF1YWxpZmllZDsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbjsKICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgIGlmIChtZW1iZXJzICE9IG51bGwpIHsKICAgICAgICAgIGRlY2xhcmF0aW9uID0gbWVtYmVyc1tuYW1lXTsKICAgICAgICB9CiAgICAgICAgaWYgKGRlY2xhcmF0aW9uID09IG51bGwgJiYgbWFwICE9IG51bGwpIHsKICAgICAgICAgIGRlY2xhcmF0aW9uID0gbWFwW25hbWVdOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCkgewogICAgICAgIC8vIFNpbmNlIG5hbWUgZGlkbid0IHJlc29sdmUgaW4gdGhpcyBzY29wZSwgcHJvcGFnYXRlIGl0IHRvIHRoZQogICAgICAgIC8vIHBhcmVudCBkZWNsYXJhdGlvbi4KICAgICAgICBwYXJlbnQuYWRkVHlwZSh0eXBlKTsKICAgICAgfSBlbHNlIGlmIChuYW1lT3JRdWFsaWZpZWQgaXMgUXVhbGlmaWVkTmFtZSkgewogICAgICAgIC8vIEF0dGVtcHQgdG8gdXNlIGEgbWVtYmVyIG9yIHR5cGUgdmFyaWFibGUgYXMgYSBwcmVmaXguCiAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbi53aXRoQXJndW1lbnRzKAogICAgICAgICAgICBmbGF0dGVuTmFtZSgKICAgICAgICAgICAgICAgIG5hbWVPclF1YWxpZmllZC5xdWFsaWZpZXIsIHR5cGUuY2hhck9mZnNldCwgdHlwZS5maWxlVXJpKSwKICAgICAgICAgICAgbmFtZU9yUXVhbGlmaWVkLm5hbWUpOwogICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlLCB0eXBlLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5hbWVPclF1YWxpZmllZC5lbmRDaGFyT2Zmc2V0IC0gdHlwZS5jaGFyT2Zmc2V0LCB0eXBlLmZpbGVVcmkpOwogICAgICAgIHR5cGUuYnVpbGRlci5iaW5kKHR5cGUuYnVpbGRlci5idWlsZEludmFsaWRUeXBlKG1lc3NhZ2Uud2l0aExvY2F0aW9uKAogICAgICAgICAgICB0eXBlLmZpbGVVcmksCiAgICAgICAgICAgIHR5cGUuY2hhck9mZnNldCwKICAgICAgICAgICAgbmFtZU9yUXVhbGlmaWVkLmVuZENoYXJPZmZzZXQgLSB0eXBlLmNoYXJPZmZzZXQpKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGUgPz89IHRvU2NvcGUobnVsbCkud2l0aFR5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcyk7CiAgICAgICAgdHlwZS5yZXNvbHZlSW4oc2NvcGUsIGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgICB0eXBlcy5jbGVhcigpOwogIH0KCiAgU2NvcGUgdG9TY29wZShTY29wZSBwYXJlbnQpIHsKICAgIHJldHVybiBuZXcgU2NvcGUobWVtYmVycywgc2V0dGVycywgcGFyZW50LCBuYW1lLCBpc01vZGlmaWFibGU6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdEZWNsYXJhdGlvbkJ1aWxkZXIoJHtoYXNoQ29kZX06a2luZD0ka2luZCxuYW1lPSRuYW1lKSc7Cn0KCmNsYXNzIEZpZWxkSW5mbyB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgZmluYWwgVG9rZW4gaW5pdGlhbGl6ZXJUb2tlbjsKICBmaW5hbCBUb2tlbiBiZWZvcmVMYXN0OwogIGZpbmFsIGludCBjaGFyRW5kT2Zmc2V0OwoKICBjb25zdCBGaWVsZEluZm8odGhpcy5uYW1lLCB0aGlzLmNoYXJPZmZzZXQsIHRoaXMuaW5pdGlhbGl6ZXJUb2tlbiwKICAgICAgdGhpcy5iZWZvcmVMYXN0LCB0aGlzLmNoYXJFbmRPZmZzZXQpOwp9CgpjbGFzcyBJbXBsZW1lbnRhdGlvbkluZm8gewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIEJ1aWxkZXIgZGVjbGFyYXRpb247CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGNvbnN0IEltcGxlbWVudGF0aW9uSW5mbyh0aGlzLm5hbWUsIHRoaXMuZGVjbGFyYXRpb24sIHRoaXMuY2hhck9mZnNldCk7Cn0KClVyaSBjb21wdXRlTGlicmFyeVVyaShCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgQnVpbGRlciBjdXJyZW50ID0gZGVjbGFyYXRpb247CiAgZG8gewogICAgaWYgKGN1cnJlbnQgaXMgTGlicmFyeUJ1aWxkZXIpIHJldHVybiBjdXJyZW50LnVyaTsKICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDsKICB9IHdoaWxlIChjdXJyZW50ICE9IG51bGwpOwogIHJldHVybiB1bmhhbmRsZWQoIm5vIGxpYnJhcnkgcGFyZW50IiwgIiR7ZGVjbGFyYXRpb24ucnVudGltZVR5cGV9IiwKICAgICAgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgZGVjbGFyYXRpb24uZmlsZVVyaSk7Cn0KClN0cmluZyBleHRyYWN0TmFtZShuYW1lKSA9PiBuYW1lIGlzIFF1YWxpZmllZE5hbWUgPyBuYW1lLm5hbWUgOiBuYW1lOwoKY2xhc3MgUG9zdHBvbmVkUHJvYmxlbSB7CiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlOwogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwogIGZpbmFsIGludCBsZW5ndGg7CiAgZmluYWwgVXJpIGZpbGVVcmk7CgogIFBvc3Rwb25lZFByb2JsZW0odGhpcy5tZXNzYWdlLCB0aGlzLmNoYXJPZmZzZXQsIHRoaXMubGVuZ3RoLCB0aGlzLmZpbGVVcmkpOwp9CoxCAE5OPAEmAScBIQkTDxUf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bnQ4TGlzdDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIEJvdHRvbVR5cGUsCiAgICAgICAgQ2xhc3MsCiAgICAgICAgQ29tcG9uZW50LAogICAgICAgIERhcnRUeXBlLAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRnVuY3Rpb25Ob2RlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaWJyYXJ5RGVwZW5kZW5jeSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFN1cGVydHlwZSwKICAgICAgICBUcmVlTm9kZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnCiAgICBzaG93IENsYXNzSGllcmFyY2h5LCBIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICcuLi8uLi9hcGlfcHJvdG90eXBlL2ZpbGVfc3lzdGVtLmRhcnQnOwoKaW1wb3J0ICcuLi8uLi9iYXNlL2luc3RydW1lbnRhdGlvbi5kYXJ0JyBzaG93IEluc3RydW1lbnRhdGlvbjsKCmltcG9ydCAnLi4vYmxhY2tsaXN0ZWRfY2xhc3Nlcy5kYXJ0JyBzaG93IGJsYWNrbGlzdGVkQ29yZUNsYXNzZXM7CgppbXBvcnQgJy4uL2V4cG9ydC5kYXJ0JyBzaG93IEV4cG9ydDsKCmltcG9ydCAnLi4vaW1wb3J0LmRhcnQnIHNob3cgSW1wb3J0OwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgU3VtbWFyeVRlbXBsYXRlLAogICAgICAgIFRlbXBsYXRlLAogICAgICAgIG1lc3NhZ2VPYmplY3RFeHRlbmRzLAogICAgICAgIG1lc3NhZ2VPYmplY3RJbXBsZW1lbnRzLAogICAgICAgIG1lc3NhZ2VPYmplY3RNaXhlc0luLAogICAgICAgIG1lc3NhZ2VQYXJ0T3JwaGFuLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlQW1iaWd1b3VzU3VwZXJ0eXBlcywKICAgICAgICB0ZW1wbGF0ZUNhbnRSZWFkRmlsZSwKICAgICAgICB0ZW1wbGF0ZUN5Y2xpY0NsYXNzSGllcmFyY2h5LAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnQsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydENvbnRleHQsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydCwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCwKICAgICAgICB0ZW1wbGF0ZUV4dGVuZGluZ0VudW0sCiAgICAgICAgdGVtcGxhdGVFeHRlbmRpbmdSZXN0cmljdGVkLAogICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluLAogICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMsCiAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZSwKICAgICAgICB0ZW1wbGF0ZVNvdXJjZU91dGxpbmVTdW1tYXJ5LAogICAgICAgIHRlbXBsYXRlVW50cmFuc2xhdGFibGVVcmk7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfc2hhZG93X2FzdC5kYXJ0JyBzaG93IFNoYWRvd1R5cGVJbmZlcmVuY2VFbmdpbmU7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIsCiAgICAgICAgQnVpbGRlciwKICAgICAgICBEZWxheWVkTWVtYmVyLAogICAgICAgIERlbGF5ZWRPdmVycmlkZUNoZWNrLAogICAgICAgIEVudW1CdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBQcm9jZWR1cmVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF90YXJnZXQuZGFydCcgc2hvdyBLZXJuZWxUYXJnZXQ7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL3RyYW5zZm9ybV9jb2xsZWN0aW9ucy5kYXJ0JyBzaG93IENvbGxlY3Rpb25UcmFuc2Zvcm1lcjsKCmltcG9ydCAnLi4va2VybmVsL3RyYW5zZm9ybV9zZXRfbGl0ZXJhbHMuZGFydCcgc2hvdyBTZXRMaXRlcmFsVHJhbnNmb3JtZXI7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlX2J1aWxkZXJfY29tcHV0ZXIuZGFydCcgc2hvdyBUeXBlQnVpbGRlckNvbXB1dGVyOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXIsIHVudHJhbnNsYXRhYmxlVXJpU2NoZW1lOwoKaW1wb3J0ICcuLi9wYXJzZXIvY2xhc3NfbWVtYmVyX3BhcnNlci5kYXJ0JyBzaG93IENsYXNzTWVtYmVyUGFyc2VyOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcgc2hvdyBQYXJzZXIsIGxlbmd0aEZvclRva2VuLCBvZmZzZXRGb3JUb2tlbjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW07CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcKICAgIHNob3cKICAgICAgICBFcnJvclRva2VuLAogICAgICAgIExhbmd1YWdlVmVyc2lvblRva2VuLAogICAgICAgIFNjYW5uZXJDb25maWd1cmF0aW9uLAogICAgICAgIFNjYW5uZXJSZXN1bHQsCiAgICAgICAgVG9rZW4sCiAgICAgICAgc2NhbjsKCmltcG9ydCAnZGlldF9saXN0ZW5lci5kYXJ0JyBzaG93IERpZXRMaXN0ZW5lcjsKCmltcG9ydCAnZGlldF9wYXJzZXIuZGFydCcgc2hvdyBEaWV0UGFyc2VyOwoKaW1wb3J0ICdvdXRsaW5lX2J1aWxkZXIuZGFydCcgc2hvdyBPdXRsaW5lQnVpbGRlcjsKCmltcG9ydCAnc291cmNlX2NsYXNzX2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VDbGFzc0J1aWxkZXI7CgppbXBvcnQgJ3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIFNvdXJjZUxvYWRlciBleHRlbmRzIExvYWRlciB7CiAgLy8vIFRoZSBbRmlsZVN5c3RlbV0gd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gYWNjZXNzIGZpbGVzLgogIGZpbmFsIEZpbGVTeXN0ZW0gZmlsZVN5c3RlbTsKCiAgLy8vIFdoZXRoZXIgY29tbWVudHMgc2hvdWxkIGJlIHNjYW5uZWQgYW5kIHBhcnNlZC4KICBmaW5hbCBib29sIGluY2x1ZGVDb21tZW50czsKCiAgZmluYWwgTWFwPFVyaSwgTGlzdDxpbnQ+PiBzb3VyY2VCeXRlcyA9IDxVcmksIExpc3Q8aW50Pj57fTsKCiAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXJIaWVyYXJjaHk7CgogIC8vIFVzZWQgd2hlbiBidWlsZGluZyBkaXJlY3RseSB0byBrZXJuZWwuCiAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwogIENvcmVUeXBlcyBjb3JlVHlwZXM7CiAgLy8gVXNlZCB3aGVuIGNoZWNraW5nIHdoZXRoZXIgYSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBmdW5jdGlvbiBpcyB2YWxpZC4KICBEYXJ0VHlwZSBmdXR1cmVPZkJvdHRvbTsKICBEYXJ0VHlwZSBpdGVyYWJsZU9mQm90dG9tOwogIERhcnRUeXBlIHN0cmVhbU9mQm90dG9tOwoKICBTaGFkb3dUeXBlSW5mZXJlbmNlRW5naW5lIHR5cGVJbmZlcmVuY2VFbmdpbmU7CgogIEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb247CgogIENvbGxlY3Rpb25UcmFuc2Zvcm1lciBjb2xsZWN0aW9uVHJhbnNmb3JtZXI7CgogIFNldExpdGVyYWxUcmFuc2Zvcm1lciBzZXRMaXRlcmFsVHJhbnNmb3JtZXI7CgogIFNvdXJjZUxvYWRlcih0aGlzLmZpbGVTeXN0ZW0sIHRoaXMuaW5jbHVkZUNvbW1lbnRzLCBLZXJuZWxUYXJnZXQgdGFyZ2V0KQogICAgICA6IHN1cGVyKHRhcmdldCk7CgogIFRlbXBsYXRlPFN1bW1hcnlUZW1wbGF0ZT4gZ2V0IG91dGxpbmVTdW1tYXJ5VGVtcGxhdGUgPT4KICAgICAgdGVtcGxhdGVTb3VyY2VPdXRsaW5lU3VtbWFyeTsKCiAgYm9vbCBnZXQgaXNTb3VyY2VMb2FkZXIgPT4gdHJ1ZTsKCiAgRnV0dXJlPFRva2VuPiB0b2tlbml6ZShTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LAogICAgICB7Ym9vbCBzdXBwcmVzc0xleGljYWxFcnJvcnM6IGZhbHNlfSkgYXN5bmMgewogICAgVXJpIHVyaSA9IGxpYnJhcnkuZmlsZVVyaTsKCiAgICAvLyBMb29rdXAgdGhlIGZpbGUgVVJJIGluIHRoZSBjYWNoZS4KICAgIExpc3Q8aW50PiBieXRlcyA9IHNvdXJjZUJ5dGVzW3VyaV07CgogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgLy8gRXJyb3IgcmVjb3ZlcnkuCiAgICAgIGlmICh1cmkuc2NoZW1lID09IHVudHJhbnNsYXRhYmxlVXJpU2NoZW1lKSB7CiAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVVbnRyYW5zbGF0YWJsZVVyaS53aXRoQXJndW1lbnRzKGxpYnJhcnkudXJpKTsKICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW1BdEFjY2Vzc29ycyhtZXNzYWdlKTsKICAgICAgICBieXRlcyA9IHN5bnRoZXNpemVTb3VyY2VGb3JNaXNzaW5nRmlsZShsaWJyYXJ5LnVyaSwgbnVsbCk7CiAgICAgIH0gZWxzZSBpZiAoIXVyaS5oYXNTY2hlbWUpIHsKICAgICAgICByZXR1cm4gaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUud2l0aEFyZ3VtZW50cyh1cmkpLAogICAgICAgICAgICAtMSwKICAgICAgICAgICAgbGlicmFyeS51cmkpOwogICAgICB9IGVsc2UgaWYgKHVyaS5zY2hlbWUgPT0gU291cmNlTGlicmFyeUJ1aWxkZXIuTUFMRk9STUVEX1VSSV9TQ0hFTUUpIHsKICAgICAgICBieXRlcyA9IHN5bnRoZXNpemVTb3VyY2VGb3JNaXNzaW5nRmlsZShsaWJyYXJ5LnVyaSwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKGJ5dGVzICE9IG51bGwpIHsKICAgICAgICBVaW50OExpc3QgemVyb1Rlcm1pbmF0ZWRCeXRlcyA9IG5ldyBVaW50OExpc3QoYnl0ZXMubGVuZ3RoICsgMSk7CiAgICAgICAgemVyb1Rlcm1pbmF0ZWRCeXRlcy5zZXRSYW5nZSgwLCBieXRlcy5sZW5ndGgsIGJ5dGVzKTsKICAgICAgICBieXRlcyA9IHplcm9UZXJtaW5hdGVkQnl0ZXM7CiAgICAgICAgc291cmNlQnl0ZXNbdXJpXSA9IGJ5dGVzOwogICAgICB9CiAgICB9CgogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgLy8gSWYgaXQgaXNuJ3QgZm91bmQgaW4gdGhlIGNhY2hlLCByZWFkIHRoZSBmaWxlIHJlYWQgZnJvbSB0aGUgZmlsZQogICAgICAvLyBzeXN0ZW0uCiAgICAgIExpc3Q8aW50PiByYXdCeXRlczsKICAgICAgdHJ5IHsKICAgICAgICByYXdCeXRlcyA9IGF3YWl0IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHVyaSkucmVhZEFzQnl0ZXMoKTsKICAgICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVDYW50UmVhZEZpbGUud2l0aEFyZ3VtZW50cyh1cmksIGUubWVzc2FnZSk7CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtQXRBY2Nlc3NvcnMobWVzc2FnZSk7CiAgICAgICAgcmF3Qnl0ZXMgPSBzeW50aGVzaXplU291cmNlRm9yTWlzc2luZ0ZpbGUobGlicmFyeS51cmksIG1lc3NhZ2UpOwogICAgICB9CiAgICAgIFVpbnQ4TGlzdCB6ZXJvVGVybWluYXRlZEJ5dGVzID0gbmV3IFVpbnQ4TGlzdChyYXdCeXRlcy5sZW5ndGggKyAxKTsKICAgICAgemVyb1Rlcm1pbmF0ZWRCeXRlcy5zZXRSYW5nZSgwLCByYXdCeXRlcy5sZW5ndGgsIHJhd0J5dGVzKTsKICAgICAgYnl0ZXMgPSB6ZXJvVGVybWluYXRlZEJ5dGVzOwogICAgICBzb3VyY2VCeXRlc1t1cmldID0gYnl0ZXM7CiAgICAgIGJ5dGVDb3VudCArPSByYXdCeXRlcy5sZW5ndGg7CiAgICB9CgogICAgU2Nhbm5lclJlc3VsdCByZXN1bHQgPSBzY2FuKGJ5dGVzLAogICAgICAgIGluY2x1ZGVDb21tZW50czogaW5jbHVkZUNvbW1lbnRzLAogICAgICAgIGNvbmZpZ3VyYXRpb246IG5ldyBTY2FubmVyQ29uZmlndXJhdGlvbigKICAgICAgICAgICAgZW5hYmxlVHJpcGxlU2hpZnQ6IHRhcmdldC5lbmFibGVUcmlwbGVTaGlmdCwKICAgICAgICAgICAgZW5hYmxlRXh0ZW5zaW9uTWV0aG9kczogdGFyZ2V0LmVuYWJsZUV4dGVuc2lvbk1ldGhvZHMsCiAgICAgICAgICAgIGVuYWJsZU5vbk51bGxhYmxlOiB0YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpLAogICAgICAgIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQ6IChfLCBMYW5ndWFnZVZlcnNpb25Ub2tlbiB2ZXJzaW9uKSB7CiAgICAgIC8vIFRPRE8oamVuc2opOiBXaGF0IGlmIHdlIGhhdmUgc2V2ZXJhbD8gV2hhdCBpZiBpdCBpcyB1bnN1cHBvcnRlZD8KICAgICAgLy8gV2hhdCBpZiB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiB3YXMgYWxyZWFkeSBzZXQgdmlhIHBhY2thZ2VzIGFuZCB0aGlzIGlzCiAgICAgIC8vIGhpZ2hlcj8gRXRjCiAgICAgIGxpYnJhcnkuc2V0TGFuZ3VhZ2VWZXJzaW9uKHZlcnNpb24ubWFqb3IsIHZlcnNpb24ubWlub3IsCiAgICAgICAgICBvZmZzZXQ6IHZlcnNpb24ub2Zmc2V0LCBsZW5ndGg6IHZlcnNpb24ubGVuZ3RoLCBleHBsaWNpdDogdHJ1ZSk7CiAgICB9KTsKICAgIFRva2VuIHRva2VuID0gcmVzdWx0LnRva2VuczsKICAgIGlmICghc3VwcHJlc3NMZXhpY2FsRXJyb3JzKSB7CiAgICAgIExpc3Q8aW50PiBzb3VyY2UgPSBnZXRTb3VyY2UoYnl0ZXMpOwogICAgICBVcmkgaW1wb3J0VXJpID0gbGlicmFyeS51cmk7CiAgICAgIGlmIChsaWJyYXJ5LmlzUGF0Y2gpIHsKICAgICAgICAvLyBGb3IgcGF0Y2ggZmlsZXMgd2UgY3JlYXRlIGEgImZha2UiIGltcG9ydCB1cmkuCiAgICAgICAgLy8gV2UgY2Fubm90IHVzZSB0aGUgaW1wb3J0IHVyaSBmcm9tIHRoZSBwYXRjaGVkIGxpYnJhcnkgYmVjYXVzZQogICAgICAgIC8vIHNldmVyYWwgZGlmZmVyZW50IGZpbGVzIHdvdWxkIHRoZW4gaGF2ZSB0aGUgc2FtZSBpbXBvcnQgdXJpLAogICAgICAgIC8vIGFuZCB0aGUgVk0gZG9lcyBub3Qgc3VwcG9ydCB0aGF0LiBBbHNvLCB3aGF0IHdvdWxkLCBmb3IgaW5zdGFuY2UsCiAgICAgICAgLy8gc2V0dGluZyBhIGJyZWFrcG9pbnQgb24gbGluZSA0MiBvZiBzb21lIGltcG9ydCB1cmkgbWVhbiwgaWYgdGhlIHVyaQogICAgICAgIC8vIHJlcHJlc2VudGVkIHNldmVyYWwgZmlsZXM/CiAgICAgICAgTGlzdDxTdHJpbmc+IG5ld1BhdGhTZWdtZW50cyA9CiAgICAgICAgICAgIG5ldyBMaXN0PFN0cmluZz4uZnJvbShpbXBvcnRVcmkucGF0aFNlZ21lbnRzKTsKICAgICAgICBuZXdQYXRoU2VnbWVudHMuYWRkKGxpYnJhcnkuZmlsZVVyaS5wYXRoU2VnbWVudHMubGFzdCk7CiAgICAgICAgbmV3UGF0aFNlZ21lbnRzWzBdID0gIiR7bmV3UGF0aFNlZ21lbnRzWzBdfS1wYXRjaCI7CiAgICAgICAgaW1wb3J0VXJpID0gaW1wb3J0VXJpLnJlcGxhY2UocGF0aFNlZ21lbnRzOiBuZXdQYXRoU2VnbWVudHMpOwogICAgICB9CiAgICAgIHRhcmdldC5hZGRTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICAgIGltcG9ydFVyaSwgbGlicmFyeS5maWxlVXJpLCByZXN1bHQubGluZVN0YXJ0cywgc291cmNlKTsKICAgIH0KICAgIGxpYnJhcnkuaXNzdWVQb3N0cG9uZWRQcm9ibGVtcygpOwogICAgd2hpbGUgKHRva2VuIGlzIEVycm9yVG9rZW4pIHsKICAgICAgaWYgKCFzdXBwcmVzc0xleGljYWxFcnJvcnMpIHsKICAgICAgICBFcnJvclRva2VuIGVycm9yID0gdG9rZW47CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKGVycm9yLmFzc2VydGlvbk1lc3NhZ2UsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgICAgbGVuZ3RoRm9yVG9rZW4odG9rZW4pLCB1cmkpOwogICAgICB9CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIExpc3Q8aW50PiBzeW50aGVzaXplU291cmNlRm9yTWlzc2luZ0ZpbGUoVXJpIHVyaSwgTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBzd2l0Y2ggKCIkdXJpIikgewogICAgICBjYXNlICJkYXJ0OmNvcmUiOgogICAgICAgIHJldHVybiB1dGY4LmVuY29kZShkZWZhdWx0RGFydENvcmVTb3VyY2UpOwoKICAgICAgY2FzZSAiZGFydDphc3luYyI6CiAgICAgICAgcmV0dXJuIHV0ZjguZW5jb2RlKGRlZmF1bHREYXJ0QXN5bmNTb3VyY2UpOwoKICAgICAgY2FzZSAiZGFydDpjb2xsZWN0aW9uIjoKICAgICAgICByZXR1cm4gdXRmOC5lbmNvZGUoZGVmYXVsdERhcnRDb2xsZWN0aW9uU291cmNlKTsKCiAgICAgIGNhc2UgImRhcnQ6X2ludGVybmFsIjoKICAgICAgICByZXR1cm4gdXRmOC5lbmNvZGUoZGVmYXVsdERhcnRJbnRlcm5hbFNvdXJjZSk7CgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiB1dGY4LmVuY29kZShtZXNzYWdlID09IG51bGwgPyAiIiA6ICIvKiAke21lc3NhZ2UubWVzc2FnZX0gKi8iKTsKICAgIH0KICB9CgogIExpc3Q8aW50PiBnZXRTb3VyY2UoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICAvLyBieXRlcyBpcyAwLXRlcm1pbmF0ZWQuIFdlIGRvbid0IHdhbnQgdGhhdCBpbmNsdWRlZC4KICAgIGlmIChieXRlcyBpcyBVaW50OExpc3QpIHsKICAgICAgcmV0dXJuIG5ldyBVaW50OExpc3QudmlldygKICAgICAgICAgIGJ5dGVzLmJ1ZmZlciwgYnl0ZXMub2Zmc2V0SW5CeXRlcywgYnl0ZXMubGVuZ3RoIC0gMSk7CiAgICB9CiAgICByZXR1cm4gYnl0ZXMuc3VibGlzdCgwLCBieXRlcy5sZW5ndGggLSAxKTsKICB9CgogIEZ1dHVyZTxOdWxsPiBidWlsZE91dGxpbmUoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgYXN5bmMgewogICAgVG9rZW4gdG9rZW5zID0gYXdhaXQgdG9rZW5pemUobGlicmFyeSk7CiAgICBpZiAodG9rZW5zID09IG51bGwpIHJldHVybjsKICAgIE91dGxpbmVCdWlsZGVyIGxpc3RlbmVyID0gbmV3IE91dGxpbmVCdWlsZGVyKGxpYnJhcnkpOwogICAgbmV3IENsYXNzTWVtYmVyUGFyc2VyKGxpc3RlbmVyKS5wYXJzZVVuaXQodG9rZW5zKTsKICB9CgogIEZ1dHVyZTxOdWxsPiBidWlsZEJvZHkoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgYXN5bmMgewogICAgaWYgKGxpYnJhcnkgaXMgU291cmNlTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgLy8gV2UgdG9rZW5pemUgc291cmNlIGZpbGVzIHR3aWNlIHRvIGtlZXAgbWVtb3J5IHVzYWdlIGxvdy4gVGhpcyBpcyB0aGUKICAgICAgLy8gc2Vjb25kIHRpbWUsIGFuZCB0aGUgZmlyc3QgdGltZSB3YXMgaW4gW2J1aWxkT3V0bGluZV0gYWJvdmUuIFNvIHRoaXMKICAgICAgLy8gdGltZSB3ZSBzdXBwcmVzcyBsZXhpY2FsIGVycm9ycy4KICAgICAgVG9rZW4gdG9rZW5zID0gYXdhaXQgdG9rZW5pemUobGlicmFyeSwgc3VwcHJlc3NMZXhpY2FsRXJyb3JzOiB0cnVlKTsKICAgICAgaWYgKHRva2VucyA9PSBudWxsKSByZXR1cm47CiAgICAgIERpZXRMaXN0ZW5lciBsaXN0ZW5lciA9IGNyZWF0ZURpZXRMaXN0ZW5lcihsaWJyYXJ5KTsKICAgICAgRGlldFBhcnNlciBwYXJzZXIgPSBuZXcgRGlldFBhcnNlcihsaXN0ZW5lcik7CiAgICAgIHBhcnNlci5wYXJzZVVuaXQodG9rZW5zKTsKICAgICAgZm9yIChTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0IGluIGxpYnJhcnkucGFydHMpIHsKICAgICAgICBpZiAocGFydC5wYXJ0T2ZMaWJyYXJ5ICE9IGxpYnJhcnkpIHsKICAgICAgICAgIC8vIFBhcnQgd2FzIGluY2x1ZGVkIGluIG11bHRpcGxlIGxpYnJhcmllcy4gU2tpcCBpdCBoZXJlLgogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIFRva2VuIHRva2VucyA9IGF3YWl0IHRva2VuaXplKHBhcnQpOwogICAgICAgIGlmICh0b2tlbnMgIT0gbnVsbCkgewogICAgICAgICAgbGlzdGVuZXIudXJpID0gcGFydC5maWxlVXJpOwogICAgICAgICAgcGFyc2VyLnBhcnNlVW5pdCh0b2tlbnMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyLGplbnNqKTogSGFuZGxlIGV4cHJlc3Npb24gaW4gZXh0ZW5zaW9ucz8KICBGdXR1cmU8RXhwcmVzc2lvbj4gYnVpbGRFeHByZXNzaW9uKAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LAogICAgICBTdHJpbmcgZW5jbG9zaW5nQ2xhc3MsCiAgICAgIGJvb2wgaXNDbGFzc0luc3RhbmNlTWVtYmVyLAogICAgICBGdW5jdGlvbk5vZGUgcGFyYW1ldGVycykgYXN5bmMgewogICAgVG9rZW4gdG9rZW4gPSBhd2FpdCB0b2tlbml6ZShsaWJyYXJ5LCBzdXBwcmVzc0xleGljYWxFcnJvcnM6IGZhbHNlKTsKICAgIGlmICh0b2tlbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIERpZXRMaXN0ZW5lciBkaWV0TGlzdGVuZXIgPSBjcmVhdGVEaWV0TGlzdGVuZXIobGlicmFyeSk7CgogICAgQnVpbGRlciBwYXJlbnQgPSBsaWJyYXJ5OwogICAgaWYgKGVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgQnVpbGRlciBjbHMgPSBkaWV0TGlzdGVuZXIubWVtYmVyU2NvcGUubG9va3VwKGVuY2xvc2luZ0NsYXNzLCAtMSwgbnVsbCk7CiAgICAgIGlmIChjbHMgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgcGFyZW50ID0gY2xzOwogICAgICAgIGRpZXRMaXN0ZW5lcgogICAgICAgICAgLi5jdXJyZW50RGVjbGFyYXRpb24gPSBjbHMKICAgICAgICAgIC4ubWVtYmVyU2NvcGUgPSBjbHMuc2NvcGUuY29weVdpdGhQYXJlbnQoCiAgICAgICAgICAgICAgZGlldExpc3RlbmVyLm1lbWJlclNjb3BlLndpdGhUeXBlVmFyaWFibGVzKGNscy50eXBlVmFyaWFibGVzKSwKICAgICAgICAgICAgICAiZGVidWdFeHByZXNzaW9uIGluICRlbmNsb3NpbmdDbGFzcyIpOwogICAgICB9CiAgICB9CiAgICBQcm9jZWR1cmVCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvY2VkdXJlQnVpbGRlcihudWxsLCAwLCBudWxsLCAiZGVidWdFeHByIiwKICAgICAgICBudWxsLCBudWxsLCBQcm9jZWR1cmVLaW5kLk1ldGhvZCwgbGlicmFyeSwgMCwgMCwgLTEsIC0xKQogICAgICAuLnBhcmVudCA9IHBhcmVudDsKICAgIEJvZHlCdWlsZGVyIGxpc3RlbmVyID0gZGlldExpc3RlbmVyLmNyZWF0ZUxpc3RlbmVyKAogICAgICAgIGJ1aWxkZXIsIGRpZXRMaXN0ZW5lci5tZW1iZXJTY29wZSwKICAgICAgICBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXI6IGlzQ2xhc3NJbnN0YW5jZU1lbWJlcik7CgogICAgcmV0dXJuIGxpc3RlbmVyLnBhcnNlU2luZ2xlRXhwcmVzc2lvbigKICAgICAgICBuZXcgUGFyc2VyKGxpc3RlbmVyKSwgdG9rZW4sIHBhcmFtZXRlcnMpOwogIH0KCiAgS2VybmVsVGFyZ2V0IGdldCB0YXJnZXQgPT4gc3VwZXIudGFyZ2V0OwoKICBEaWV0TGlzdGVuZXIgY3JlYXRlRGlldExpc3RlbmVyKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHJldHVybiBuZXcgRGlldExpc3RlbmVyKGxpYnJhcnksIGhpZXJhcmNoeSwgY29yZVR5cGVzLCB0eXBlSW5mZXJlbmNlRW5naW5lKTsKICB9CgogIHZvaWQgcmVzb2x2ZVBhcnRzKCkgewogICAgTGlzdDxVcmk+IHBhcnRzID0gPFVyaT5bXTsKICAgIExpc3Q8U291cmNlTGlicmFyeUJ1aWxkZXI+IGxpYnJhcmllcyA9IDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj5bXTsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBpZiAobGlicmFyeS5pc1BhcnQpIHsKICAgICAgICAgIHBhcnRzLmFkZCh1cmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsaWJyYXJpZXMuYWRkKGxpYnJhcnkpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBTZXQ8VXJpPiB1c2VkUGFydHMgPSBuZXcgU2V0PFVyaT4oKTsKICAgIGZvciAoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiBsaWJyYXJpZXMpIHsKICAgICAgbGlicmFyeS5pbmNsdWRlUGFydHModXNlZFBhcnRzKTsKICAgIH0KICAgIGZvciAoVXJpIHVyaSBpbiBwYXJ0cykgewogICAgICBpZiAodXNlZFBhcnRzLmNvbnRhaW5zKHVyaSkpIHsKICAgICAgICBidWlsZGVycy5yZW1vdmUodXJpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0ID0gYnVpbGRlcnNbdXJpXTsKICAgICAgICBwYXJ0LmFkZFByb2JsZW0obWVzc2FnZVBhcnRPcnBoYW4sIDAsIDEsIHBhcnQuZmlsZVVyaSk7CiAgICAgICAgcGFydC52YWxpZGF0ZVBhcnQobnVsbCwgbnVsbCk7CiAgICAgIH0KICAgIH0KICAgIHRpY2tlci5sb2dNcygiUmVzb2x2ZWQgcGFydHMiKTsKCiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgbGlicmFyeS5hcHBseVBhdGNoZXMoKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkFwcGxpZWQgcGF0Y2hlcyIpOwogIH0KCiAgdm9pZCBjb21wdXRlTGlicmFyeVNjb3BlcygpIHsKICAgIFNldDxMaWJyYXJ5QnVpbGRlcj4gZXhwb3J0ZXJzID0gbmV3IFNldDxMaWJyYXJ5QnVpbGRlcj4oKTsKICAgIFNldDxMaWJyYXJ5QnVpbGRlcj4gZXhwb3J0ZWVzID0gbmV3IFNldDxMaWJyYXJ5QnVpbGRlcj4oKTsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBzb3VyY2VMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgICBzb3VyY2VMaWJyYXJ5LmJ1aWxkSW5pdGlhbFNjb3BlcygpOwogICAgICB9CiAgICAgIGlmIChsaWJyYXJ5LmV4cG9ydGVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgZXhwb3J0ZWVzLmFkZChsaWJyYXJ5KTsKICAgICAgICBmb3IgKEV4cG9ydCBleHBvcnRlciBpbiBsaWJyYXJ5LmV4cG9ydGVycykgewogICAgICAgICAgZXhwb3J0ZXJzLmFkZChleHBvcnRlci5leHBvcnRlcik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIFNldDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj4gYm90aCA9IG5ldyBTZXQ8U291cmNlTGlicmFyeUJ1aWxkZXI+KCk7CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGV4cG9ydGVkIGluIGV4cG9ydGVlcykgewogICAgICBpZiAoZXhwb3J0ZXJzLmNvbnRhaW5zKGV4cG9ydGVkKSkgewogICAgICAgIGJvdGguYWRkKGV4cG9ydGVkKTsKICAgICAgfQogICAgICBmb3IgKEV4cG9ydCBleHBvcnQgaW4gZXhwb3J0ZWQuZXhwb3J0ZXJzKSB7CiAgICAgICAgZXhwb3J0ZWQuZXhwb3J0U2NvcGUuZm9yRWFjaChleHBvcnQuYWRkVG9FeHBvcnRTY29wZSk7CiAgICAgIH0KICAgIH0KICAgIGJvb2wgd2FzQ2hhbmdlZCA9IGZhbHNlOwogICAgZG8gewogICAgICB3YXNDaGFuZ2VkID0gZmFsc2U7CiAgICAgIGZvciAoU291cmNlTGlicmFyeUJ1aWxkZXIgZXhwb3J0ZWQgaW4gYm90aCkgewogICAgICAgIGZvciAoRXhwb3J0IGV4cG9ydCBpbiBleHBvcnRlZC5leHBvcnRlcnMpIHsKICAgICAgICAgIGV4cG9ydGVkLmV4cG9ydFNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgICAgICBpZiAoZXhwb3J0LmFkZFRvRXhwb3J0U2NvcGUobmFtZSwgbWVtYmVyKSkgewogICAgICAgICAgICAgIHdhc0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gd2hpbGUgKHdhc0NoYW5nZWQpOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHNvdXJjZUxpYnJhcnkgPSBsaWJyYXJ5OwogICAgICAgIHNvdXJjZUxpYnJhcnkuYWRkSW1wb3J0c1RvU2NvcGUoKTsKICAgICAgfQogICAgfSk7CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGV4cG9ydGVlIGluIGV4cG9ydGVlcykgewogICAgICAvLyBUT0RPKGFoZSk6IENoYW5nZSBob3cgd2UgdHJhY2sgZXhwb3J0ZXJzLiBDdXJyZW50bHksIHdoZW4gYSBsaWJyYXJ5CiAgICAgIC8vIChleHBvcnRlcikgZXhwb3J0cyBhbm90aGVyIGxpYnJhcnkgKGV4cG9ydGVlKSB3ZSBhZGQgYSByZWZlcmVuY2UgdG8KICAgICAgLy8gZXhwb3J0ZXIgdG8gZXhwb3J0ZWUuIFRoaXMgY3JlYXRlcyBhIHJlZmVyZW5jZSBpbiB0aGUgd3JvbmcgZGlyZWN0aW9uCiAgICAgIC8vIGFuZCBjYW4gbGVhZCB0byBtZW1vcnkgbGVha3MuCiAgICAgIGV4cG9ydGVlLmV4cG9ydGVycy5jbGVhcigpOwogICAgfQogICAgdGlja2VyLmxvZ01zKCJDb21wdXRlZCBsaWJyYXJ5IHNjb3BlcyIpOwogICAgLy8gZGVidWdQcmludEV4cG9ydHMoKTsKICB9CgogIHZvaWQgZGVidWdQcmludEV4cG9ydHMoKSB7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBzaG91bGQgYmUgYGNvdmFyaWFudCBTb3VyY2VMaWJyYXJ5QnVpbGRlcmAuCiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBkeW5hbWljIGwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGw7CiAgICAgIFNldDxCdWlsZGVyPiBtZW1iZXJzID0gbmV3IFNldDxCdWlsZGVyPigpOwogICAgICBJdGVyYXRvcjxCdWlsZGVyPiBpdGVyYXRvciA9IGxpYnJhcnkuaXRlcmF0b3I7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgbWVtYmVycy5hZGQoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgICAgTGlzdDxTdHJpbmc+IGV4cG9ydHMgPSA8U3RyaW5nPltdOwogICAgICBsaWJyYXJ5LmV4cG9ydFNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgIHdoaWxlIChtZW1iZXIgIT0gbnVsbCkgewogICAgICAgICAgaWYgKCFtZW1iZXJzLmNvbnRhaW5zKG1lbWJlcikpIHsKICAgICAgICAgICAgZXhwb3J0cy5hZGQobmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBtZW1iZXIgPSBtZW1iZXIubmV4dDsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAoZXhwb3J0cy5pc05vdEVtcHR5KSB7CiAgICAgICAgcHJpbnQoIiR1cmkgZXhwb3J0cyAkZXhwb3J0cyIpOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgcmVzb2x2ZVR5cGVzKCkgewogICAgaW50IHR5cGVDb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgc291cmNlTGlicmFyeSA9IGxpYnJhcnk7CiAgICAgICAgdHlwZUNvdW50ICs9IHNvdXJjZUxpYnJhcnkucmVzb2x2ZVR5cGVzKCk7CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJSZXNvbHZlZCAkdHlwZUNvdW50IHR5cGVzIik7CiAgfQoKICB2b2lkIGZpbmFsaXplSW5pdGlhbGl6aW5nRm9ybWFscygpIHsKICAgIGludCBmb3JtYWxDb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgc291cmNlTGlicmFyeSA9IGxpYnJhcnk7CiAgICAgICAgZm9ybWFsQ291bnQgKz0gc291cmNlTGlicmFyeS5maW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbHMoKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkZpbmFsaXplZCAkZm9ybWFsQ291bnQgaW5pdGlhbGl6aW5nIGZvcm1hbHMiKTsKICB9CgogIHZvaWQgZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGNvdW50ICs9IGxpYnJhcnkuZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkZpbmlzaGVkIGRlZmVycmVkIGxvYWQgdGVhcm9mZnMgJGNvdW50Iik7CiAgfQoKICB2b2lkIGZpbmlzaE5vU3VjaE1ldGhvZEZvcndhcmRlcnMoKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGNvdW50ICs9IGxpYnJhcnkuZmluaXNoRm9yd2FyZGVycygpOwogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiRmluaXNoZWQgZm9yd2FyZGVycyBmb3IgJGNvdW50IHByb2NlZHVyZXMiKTsKICB9CgogIHZvaWQgcmVzb2x2ZUNvbnN0cnVjdG9ycygpIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgY291bnQgKz0gbGlicmFyeS5yZXNvbHZlQ29uc3RydWN0b3JzKG51bGwpOwogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiUmVzb2x2ZWQgJGNvdW50IGNvbnN0cnVjdG9ycyIpOwogIH0KCiAgdm9pZCBmaW5pc2hUeXBlVmFyaWFibGVzKENsYXNzQnVpbGRlciBvYmplY3QsIFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGNvdW50ICs9IGxpYnJhcnkuZmluaXNoVHlwZVZhcmlhYmxlcyhvYmplY3QsIGR5bmFtaWNUeXBlKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIlJlc29sdmVkICRjb3VudCB0eXBlLXZhcmlhYmxlIGJvdW5kcyIpOwogIH0KCiAgdm9pZCBjb21wdXRlRGVmYXVsdFR5cGVzKFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlLCBUeXBlQnVpbGRlciBib3R0b21UeXBlLAogICAgICBDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgY291bnQgKz0KICAgICAgICAgICAgbGlicmFyeS5jb21wdXRlRGVmYXVsdFR5cGVzKGR5bmFtaWNUeXBlLCBib3R0b21UeXBlLCBvYmplY3RDbGFzcyk7CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJDb21wdXRlZCBkZWZhdWx0IHR5cGVzIGZvciAkY291bnQgdHlwZSB2YXJpYWJsZXMiKTsKICB9CgogIHZvaWQgZmluaXNoTmF0aXZlTWV0aG9kcygpIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgY291bnQgKz0gbGlicmFyeS5maW5pc2hOYXRpdmVNZXRob2RzKCk7CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJGaW5pc2hlZCAkY291bnQgbmF0aXZlIG1ldGhvZHMiKTsKICB9CgogIHZvaWQgZmluaXNoUGF0Y2hNZXRob2RzKCkgewogICAgaW50IGNvdW50ID0gMDsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBjb3VudCArPSBsaWJyYXJ5LmZpbmlzaFBhdGNoTWV0aG9kcygpOwogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiRmluaXNoZWQgJGNvdW50IHBhdGNoIG1ldGhvZHMiKTsKICB9CgogIC8vLyBDaGVjayB0aGF0IFtvYmplY3RDbGFzc10gaGFzIG5vIHN1cGVydHlwZXMuIFJlY292ZXIgYnkgcmVtb3ZpbmcgYW55CiAgLy8vIGZvdW5kLgogIHZvaWQgY2hlY2tPYmplY3RDbGFzc0hpZXJhcmNoeShDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIGlmIChvYmplY3RDbGFzcyBpcyBTb3VyY2VDbGFzc0J1aWxkZXIgJiYKICAgICAgICBvYmplY3RDbGFzcy5saWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgIGlmIChvYmplY3RDbGFzcy5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICAgIG9iamVjdENsYXNzLnN1cGVydHlwZSA9IG51bGw7CiAgICAgICAgb2JqZWN0Q2xhc3MuYWRkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZU9iamVjdEV4dGVuZHMsIG9iamVjdENsYXNzLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfQogICAgICBpZiAob2JqZWN0Q2xhc3MuaW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgb2JqZWN0Q2xhc3MuYWRkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZU9iamVjdEltcGxlbWVudHMsIG9iamVjdENsYXNzLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgICBvYmplY3RDbGFzcy5pbnRlcmZhY2VzID0gbnVsbDsKICAgICAgfQogICAgICBpZiAob2JqZWN0Q2xhc3MubWl4ZWRJblR5cGUgIT0gbnVsbCkgewogICAgICAgIG9iamVjdENsYXNzLmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3RNaXhlc0luLCBvYmplY3RDbGFzcy5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgb2JqZWN0Q2xhc3MubWl4ZWRJblR5cGUgPSBudWxsOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGNsYXNzIGJ1aWxkZXJzIGRlY2xhcmVkIGluIHRoaXMgbG9hZGVyLiAgQXMgdGhlCiAgLy8vIGNsYXNzZXMgYXJlIHNvcnRlZCwgYW55IGN5Y2xlcyBpbiB0aGUgaGllcmFyY2h5IGFyZSByZXBvcnRlZCBhcwogIC8vLyBlcnJvcnMuIFJlY292ZXIgYnkgYnJlYWtpbmcgdGhlIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IHRoZSByZXN0IG9mIHRoZQogIC8vLyBwaXBlbGluZSAoaW5jbHVkaW5nIGJhY2tlbmRzKSBjYW4gYXNzdW1lIHRoYXQgdGhlcmUgYXJlIG5vIGhpZXJhcmNoeQogIC8vLyBjeWNsZXMuCiAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGhhbmRsZUhpZXJhcmNoeUN5Y2xlcyhDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIC8vIENvbXB1dGUgdGhlIGluaXRpYWwgd29yayBsaXN0IG9mIGFsbCBjbGFzc2VzIGRlY2xhcmVkIGluIHRoaXMgbG9hZGVyLgogICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHdvcmtMaXN0ID0gPFNvdXJjZUNsYXNzQnVpbGRlcj5bXTsKICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiBidWlsZGVycy52YWx1ZXMpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBJdGVyYXRvcjxCdWlsZGVyPiBtZW1iZXJzID0gbGlicmFyeS5pdGVyYXRvcjsKICAgICAgICB3aGlsZSAobWVtYmVycy5tb3ZlTmV4dCgpKSB7CiAgICAgICAgICBCdWlsZGVyIG1lbWJlciA9IG1lbWJlcnMuY3VycmVudDsKICAgICAgICAgIGlmIChtZW1iZXIgaXMgU291cmNlQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgICAgIHdvcmtMaXN0LmFkZChtZW1iZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIFNldDxDbGFzc0J1aWxkZXI+IGJsYWNrTGlzdGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NCdWlsZGVyPigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibGFja2xpc3RlZENvcmVDbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGJsYWNrTGlzdGVkQ2xhc3Nlcy5hZGQoY29yZUxpYnJhcnkKICAgICAgICAgIC5sb29rdXBMb2NhbE1lbWJlcihibGFja2xpc3RlZENvcmVDbGFzc2VzW2ldLCByZXF1aXJlZDogdHJ1ZSkpOwogICAgfQoKICAgIC8vIFNvcnQgdGhlIGNsYXNzZXMgdG9wb2xvZ2ljYWxseS4KICAgIFNldDxTb3VyY2VDbGFzc0J1aWxkZXI+IHRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzID0KICAgICAgICBuZXcgU2V0PFNvdXJjZUNsYXNzQnVpbGRlcj4oKTsKICAgIExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBwcmV2aW91c1dvcmtMaXN0OwogICAgZG8gewogICAgICBwcmV2aW91c1dvcmtMaXN0ID0gd29ya0xpc3Q7CiAgICAgIHdvcmtMaXN0ID0gPFNvdXJjZUNsYXNzQnVpbGRlcj5bXTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2aW91c1dvcmtMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgU291cmNlQ2xhc3NCdWlsZGVyIGNscyA9IHByZXZpb3VzV29ya0xpc3RbaV07CiAgICAgICAgTGlzdDxCdWlsZGVyPiBkaXJlY3RTdXBlcnR5cGVzID0KICAgICAgICAgICAgY2xzLmNvbXB1dGVEaXJlY3RTdXBlcnR5cGVzKG9iamVjdENsYXNzKTsKICAgICAgICBib29sIGFsbFN1cGVydHlwZXNQcm9jZXNzZWQgPSB0cnVlOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlyZWN0U3VwZXJ0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgQnVpbGRlciBzdXBlcnR5cGUgPSBkaXJlY3RTdXBlcnR5cGVzW2ldOwogICAgICAgICAgaWYgKHN1cGVydHlwZSBpcyBTb3VyY2VDbGFzc0J1aWxkZXIgJiYKICAgICAgICAgICAgICBzdXBlcnR5cGUubGlicmFyeS5sb2FkZXIgPT0gdGhpcyAmJgogICAgICAgICAgICAgICF0b3BvbG9naWNhbGx5U29ydGVkQ2xhc3Nlcy5jb250YWlucyhzdXBlcnR5cGUpKSB7CiAgICAgICAgICAgIGFsbFN1cGVydHlwZXNQcm9jZXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhbGxTdXBlcnR5cGVzUHJvY2Vzc2VkICYmIGNscy5pc1BhdGNoKSB7CiAgICAgICAgICBhbGxTdXBlcnR5cGVzUHJvY2Vzc2VkID0KICAgICAgICAgICAgICB0b3BvbG9naWNhbGx5U29ydGVkQ2xhc3Nlcy5jb250YWlucyhjbHMub3JpZ2luKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFsbFN1cGVydHlwZXNQcm9jZXNzZWQpIHsKICAgICAgICAgIHRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzLmFkZChjbHMpOwogICAgICAgICAgY2hlY2tDbGFzc1N1cGVydHlwZXMoY2xzLCBkaXJlY3RTdXBlcnR5cGVzLCBibGFja0xpc3RlZENsYXNzZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3b3JrTGlzdC5hZGQoY2xzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gd2hpbGUgKHByZXZpb3VzV29ya0xpc3QubGVuZ3RoICE9IHdvcmtMaXN0Lmxlbmd0aCk7CiAgICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gY2xhc3NlcyA9IHRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzLnRvTGlzdCgpOwogICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGNsYXNzZXNXaXRoQ3ljbGVzID0gcHJldmlvdXNXb3JrTGlzdDsKCiAgICAvLyBPbmNlIHRoZSB3b3JrIGxpc3QgZG9lc24ndCBjaGFuZ2UgaW4gc2l6ZSwgaXQncyBlaXRoZXIgZW1wdHksIG9yCiAgICAvLyBjb250YWlucyBhbGwgY2xhc3NlcyB3aXRoIGN5Y2xlcy4KCiAgICAvLyBTb3J0IHRoZSBjbGFzc2VzIHRvIGVuc3VyZSBjb25zaXN0ZW50IG91dHB1dC4KICAgIGNsYXNzZXNXaXRoQ3ljbGVzLnNvcnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlc1dpdGhDeWNsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgU291cmNlQ2xhc3NCdWlsZGVyIGNscyA9IGNsYXNzZXNXaXRoQ3ljbGVzW2ldOwogICAgICB0YXJnZXQuYnJlYWtDeWNsZShjbHMpOwogICAgICBjbGFzc2VzLmFkZChjbHMpOwogICAgICBjbHMuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlQ3ljbGljQ2xhc3NIaWVyYXJjaHkud2l0aEFyZ3VtZW50cyhjbHMuZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgY2xzLmNoYXJPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCk7CiAgICB9CgogICAgdGlja2VyLmxvZ01zKCJDaGVja2VkIGNsYXNzIGhpZXJhcmNoeSIpOwogICAgcmV0dXJuIGNsYXNzZXM7CiAgfQoKICB2b2lkIGNoZWNrQ2xhc3NTdXBlcnR5cGVzKFNvdXJjZUNsYXNzQnVpbGRlciBjbHMsCiAgICAgIExpc3Q8QnVpbGRlcj4gZGlyZWN0U3VwZXJ0eXBlcywgU2V0PENsYXNzQnVpbGRlcj4gYmxhY2tMaXN0ZWRDbGFzc2VzKSB7CiAgICAvLyBDaGVjayB0aGF0IHRoZSBkaXJlY3Qgc3VwZXJ0eXBlcyBhcmVuJ3QgYmxhY2stbGlzdGVkIG9yIGVudW1zLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJlY3RTdXBlcnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEJ1aWxkZXIgc3VwZXJ0eXBlID0gZGlyZWN0U3VwZXJ0eXBlc1tpXTsKICAgICAgaWYgKHN1cGVydHlwZSBpcyBFbnVtQnVpbGRlcikgewogICAgICAgIGNscy5hZGRQcm9ibGVtKHRlbXBsYXRlRXh0ZW5kaW5nRW51bS53aXRoQXJndW1lbnRzKHN1cGVydHlwZS5uYW1lKSwKICAgICAgICAgICAgY2xzLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmICghY2xzLmxpYnJhcnkubWF5SW1wbGVtZW50UmVzdHJpY3RlZFR5cGVzICYmCiAgICAgICAgICBibGFja0xpc3RlZENsYXNzZXMuY29udGFpbnMoc3VwZXJ0eXBlKSkgewogICAgICAgIGNscy5hZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUV4dGVuZGluZ1Jlc3RyaWN0ZWQKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHN1cGVydHlwZS5mdWxsTmFtZUZvckVycm9ycyksCiAgICAgICAgICAgIGNscy5jaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDaGVjayB0aGF0IHRoZSBtaXhlZC1pbiB0eXBlIGNhbiBiZSB1c2VkIGFzIGEgbWl4aW4uCiAgICBmaW5hbCBUeXBlQnVpbGRlciBtaXhlZEluVHlwZSA9IGNscy5taXhlZEluVHlwZTsKICAgIGlmIChtaXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIGJvb2wgaXNDbGFzc0J1aWxkZXIgPSBmYWxzZTsKICAgICAgaWYgKG1peGVkSW5UeXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICB2YXIgYnVpbGRlciA9IG1peGVkSW5UeXBlLmRlY2xhcmF0aW9uOwogICAgICAgIGlmIChidWlsZGVyIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgICAgaXNDbGFzc0J1aWxkZXIgPSB0cnVlOwogICAgICAgICAgZm9yIChCdWlsZGVyIGNvbnN0cnVjdG9yIGluIGJ1aWxkZXIuY29uc3RydWN0b3JzLmxvY2FsLnZhbHVlcykgewogICAgICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNDb25zdHJ1Y3RvciAmJiAhY29uc3RydWN0b3IuaXNTeW50aGV0aWMpIHsKICAgICAgICAgICAgICBjbHMuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycwogICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYnVpbGRlci5mdWxsTmFtZUZvckVycm9ycyksCiAgICAgICAgICAgICAgICAgIGNscy5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZQogICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhidWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzKQogICAgICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKGNvbnN0cnVjdG9yLmZpbGVVcmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5jaGFyT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFpc0NsYXNzQnVpbGRlcikgewogICAgICAgIC8vIFRPRE8oYWhlKTogRWl0aGVyIHdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmb3Igc3VwZXJjbGFzcyBhbmQKICAgICAgICAvLyBpbnRlcmZhY2VzLCBvciB0aGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgKG9yIGhhbmRsZWQgZWxzZXdoZXJlKS4KICAgICAgICBjbHMuYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW4ud2l0aEFyZ3VtZW50cyhtaXhlZEluVHlwZS5mdWxsTmFtZUZvckVycm9ycyksCiAgICAgICAgICAgIGNscy5jaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0KICB9CgogIExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBjaGVja1NlbWFudGljcyhDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIGNoZWNrT2JqZWN0Q2xhc3NIaWVyYXJjaHkob2JqZWN0Q2xhc3MpOwogICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGNsYXNzZXMgPSBoYW5kbGVIaWVyYXJjaHlDeWNsZXMob2JqZWN0Q2xhc3MpOwoKICAgIC8vIENoZWNrIGltcG9ydHMgYW5kIGV4cG9ydHMgZm9yIGR1cGxpY2F0ZSBuYW1lcy4KICAgIC8vIFRoaXMgaXMgcmF0aGVyIHNpbGx5LCBlLmcuIGl0IG1ha2VzIGltcG9ydGluZyAnZm9vJyBhbmQgZXhwb3J0aW5nIGFub3RoZXIKICAgIC8vICdmb28nIG9rLgogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeSBpcyBTb3VyY2VMaWJyYXJ5QnVpbGRlciAmJiBsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgLy8gQ2hlY2sgZXhwb3J0cy4KICAgICAgICBpZiAobGlicmFyeS5leHBvcnRzLmlzTm90RW1wdHkpIHsKICAgICAgICAgIE1hcDxTdHJpbmcsIExpc3Q8RXhwb3J0Pj4gbmFtZVRvRXhwb3J0czsKICAgICAgICAgIGJvb2wgZXJyb3JFeHBvcnRzID0gZmFsc2U7CiAgICAgICAgICBmb3IgKEV4cG9ydCBleHBvcnQgaW4gbGlicmFyeS5leHBvcnRzKSB7CiAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZXhwb3J0LmV4cG9ydGVkPy5uYW1lID8/ICcnOwogICAgICAgICAgICBpZiAobmFtZSAhPSAnJykgewogICAgICAgICAgICAgIG5hbWVUb0V4cG9ydHMgPz89IG5ldyBNYXA8U3RyaW5nLCBMaXN0PEV4cG9ydD4+KCk7CiAgICAgICAgICAgICAgTGlzdDxFeHBvcnQ+IGV4cG9ydHMgPSBuYW1lVG9FeHBvcnRzW25hbWVdID8/PSA8RXhwb3J0PltdOwogICAgICAgICAgICAgIGV4cG9ydHMuYWRkKGV4cG9ydCk7CiAgICAgICAgICAgICAgaWYgKGV4cG9ydHNbMF0uZXhwb3J0ZWQgIT0gZXhwb3J0LmV4cG9ydGVkKSBlcnJvckV4cG9ydHMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXJyb3JFeHBvcnRzKSB7CiAgICAgICAgICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gbmFtZVRvRXhwb3J0cy5rZXlzKSB7CiAgICAgICAgICAgICAgTGlzdDxFeHBvcnQ+IGV4cG9ydHMgPSBuYW1lVG9FeHBvcnRzW25hbWVdOwogICAgICAgICAgICAgIGlmIChleHBvcnRzLmxlbmd0aCA8IDIpIGNvbnRpbnVlOwogICAgICAgICAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQgPSA8TG9jYXRlZE1lc3NhZ2U+W107CiAgICAgICAgICAgICAgZm9yIChFeHBvcnQgZXhwb3J0IGluIGV4cG9ydHMuc2tpcCgxKSkgewogICAgICAgICAgICAgICAgY29udGV4dC5hZGQodGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydENvbnRleHQKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBleHBvcnQuY2hhck9mZnNldCwgbm9MZW5ndGgpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgICAgIGV4cG9ydHNbMF0uY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgICAgICAgIHVyaSwKICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGltcG9ydHMuCiAgICAgICAgaWYgKGxpYnJhcnkuaW1wb3J0cy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PEltcG9ydD4+IG5hbWVUb0ltcG9ydHM7CiAgICAgICAgICBib29sIGVycm9ySW1wb3J0czsKICAgICAgICAgIGZvciAoSW1wb3J0IGltcG9ydCBpbiBsaWJyYXJ5LmltcG9ydHMpIHsKICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBpbXBvcnQuaW1wb3J0ZWQ/Lm5hbWUgPz8gJyc7CiAgICAgICAgICAgIGlmIChuYW1lICE9ICcnKSB7CiAgICAgICAgICAgICAgbmFtZVRvSW1wb3J0cyA/Pz0gbmV3IE1hcDxTdHJpbmcsIExpc3Q8SW1wb3J0Pj4oKTsKICAgICAgICAgICAgICBMaXN0PEltcG9ydD4gaW1wb3J0cyA9IG5hbWVUb0ltcG9ydHNbbmFtZV0gPz89IDxJbXBvcnQ+W107CiAgICAgICAgICAgICAgaW1wb3J0cy5hZGQoaW1wb3J0KTsKICAgICAgICAgICAgICBpZiAoaW1wb3J0c1swXS5pbXBvcnRlZCAhPSBpbXBvcnQuaW1wb3J0ZWQpIGVycm9ySW1wb3J0cyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChlcnJvckltcG9ydHMgIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKFN0cmluZyBuYW1lIGluIG5hbWVUb0ltcG9ydHMua2V5cykgewogICAgICAgICAgICAgIExpc3Q8SW1wb3J0PiBpbXBvcnRzID0gbmFtZVRvSW1wb3J0c1tuYW1lXTsKICAgICAgICAgICAgICBpZiAoaW1wb3J0cy5sZW5ndGggPCAyKSBjb250aW51ZTsKICAgICAgICAgICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPltdOwogICAgICAgICAgICAgIGZvciAoSW1wb3J0IGltcG9ydCBpbiBpbXBvcnRzLnNraXAoMSkpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgaW1wb3J0LmNoYXJPZmZzZXQsIG5vTGVuZ3RoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgICAgICBpbXBvcnRzWzBdLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICAgICAgICB1cmksCiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiQ2hlY2tlZCBpbXBvcnRzIGFuZCBleHBvcnRzIGZvciBkdXBsaWNhdGUgbmFtZXMiKTsKICAgIHJldHVybiBjbGFzc2VzOwogIH0KCiAgdm9pZCBidWlsZENvbXBvbmVudCgpIHsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBzb3VyY2VMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgICBMaWJyYXJ5IHRhcmdldCA9IHNvdXJjZUxpYnJhcnkuYnVpbGQoY29yZUxpYnJhcnkpOwogICAgICAgIGlmICghbGlicmFyeS5pc1BhdGNoKSB7CiAgICAgICAgICBsaWJyYXJpZXMuYWRkKHRhcmdldCk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiQnVpbHQgY29tcG9uZW50Iik7CiAgfQoKICBDb21wb25lbnQgY29tcHV0ZUZ1bGxDb21wb25lbnQoKSB7CiAgICBTZXQ8TGlicmFyeT4gbGlicmFyaWVzID0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgTGlzdDxMaWJyYXJ5PiB3b3JrTGlzdCA9IDxMaWJyYXJ5PltdOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAoIWxpYnJhcnkuaXNQYXRjaCAmJgogICAgICAgICAgKGxpYnJhcnkubG9hZGVyID09IHRoaXMgfHwKICAgICAgICAgICAgICBsaWJyYXJ5LnVyaS5zY2hlbWUgPT0gImRhcnQiIHx8CiAgICAgICAgICAgICAgbGlicmFyeSA9PSB0aGlzLmZpcnN0KSkgewogICAgICAgIGlmIChsaWJyYXJpZXMuYWRkKGxpYnJhcnkudGFyZ2V0KSkgewogICAgICAgICAgd29ya0xpc3QuYWRkKGxpYnJhcnkudGFyZ2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgd2hpbGUgKHdvcmtMaXN0LmlzTm90RW1wdHkpIHsKICAgICAgTGlicmFyeSBsaWJyYXJ5ID0gd29ya0xpc3QucmVtb3ZlTGFzdCgpOwogICAgICBmb3IgKExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgaW4gbGlicmFyeS5kZXBlbmRlbmNpZXMpIHsKICAgICAgICBpZiAobGlicmFyaWVzLmFkZChkZXBlbmRlbmN5LnRhcmdldExpYnJhcnkpKSB7CiAgICAgICAgICB3b3JrTGlzdC5hZGQoZGVwZW5kZW5jeS50YXJnZXRMaWJyYXJ5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgQ29tcG9uZW50KCkuLmxpYnJhcmllcy5hZGRBbGwobGlicmFyaWVzKTsKICB9CgogIHZvaWQgY29tcHV0ZUhpZXJhcmNoeSgpIHsKICAgIExpc3Q8QW1iaWd1b3VzVHlwZXNSZWNvcmQ+IGFtYmlndW91c1R5cGVzUmVjb3JkcyA9IFtdOwogICAgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBvbkFtYmlndW91c1N1cGVydHlwZXMgPQogICAgICAgIChDbGFzcyBjbHMsIFN1cGVydHlwZSBhLCBTdXBlcnR5cGUgYikgewogICAgICBpZiAoYW1iaWd1b3VzVHlwZXNSZWNvcmRzICE9IG51bGwpIHsKICAgICAgICBhbWJpZ3VvdXNUeXBlc1JlY29yZHMuYWRkKG5ldyBBbWJpZ3VvdXNUeXBlc1JlY29yZChjbHMsIGEsIGIpKTsKICAgICAgfQogICAgfTsKICAgIGlmIChoaWVyYXJjaHkgPT0gbnVsbCkgewogICAgICBoaWVyYXJjaHkgPSBuZXcgQ2xhc3NIaWVyYXJjaHkoY29tcHV0ZUZ1bGxDb21wb25lbnQoKSwKICAgICAgICAgIG9uQW1iaWd1b3VzU3VwZXJ0eXBlczogb25BbWJpZ3VvdXNTdXBlcnR5cGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIGhpZXJhcmNoeS5vbkFtYmlndW91c1N1cGVydHlwZXMgPSBvbkFtYmlndW91c1N1cGVydHlwZXM7CiAgICAgIENvbXBvbmVudCBjb21wb25lbnQgPSBjb21wdXRlRnVsbENvbXBvbmVudCgpOwogICAgICBoaWVyYXJjaHkuYXBwbHlUcmVlQ2hhbmdlcyhjb25zdCBbXSwgY29tcG9uZW50LmxpYnJhcmllcywKICAgICAgICAgIHJlaXNzdWVBbWJpZ3VvdXNTdXBlcnR5cGVzRm9yOiBjb21wb25lbnQpOwogICAgfQogICAgZm9yIChBbWJpZ3VvdXNUeXBlc1JlY29yZCByZWNvcmQgaW4gYW1iaWd1b3VzVHlwZXNSZWNvcmRzKSB7CiAgICAgIGhhbmRsZUFtYmlndW91c1N1cGVydHlwZXMocmVjb3JkLmNscywgcmVjb3JkLmEsIHJlY29yZC5iKTsKICAgIH0KICAgIGFtYmlndW91c1R5cGVzUmVjb3JkcyA9IG51bGw7CiAgICB0aWNrZXIubG9nTXMoIkNvbXB1dGVkIGNsYXNzIGhpZXJhcmNoeSIpOwogIH0KCiAgdm9pZCBoYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzKENsYXNzIGNscywgU3VwZXJ0eXBlIGEsIFN1cGVydHlwZSBiKSB7CiAgICBhZGRQcm9ibGVtKAogICAgICAgIHRlbXBsYXRlQW1iaWd1b3VzU3VwZXJ0eXBlcy53aXRoQXJndW1lbnRzKAogICAgICAgICAgICBjbHMubmFtZSwgYS5hc0ludGVyZmFjZVR5cGUsIGIuYXNJbnRlcmZhY2VUeXBlKSwKICAgICAgICBjbHMuZmlsZU9mZnNldCwKICAgICAgICBub0xlbmd0aCwKICAgICAgICBjbHMuZmlsZVVyaSk7CiAgfQoKICB2b2lkIGlnbm9yZUFtYmlndW91c1N1cGVydHlwZXMoQ2xhc3MgY2xzLCBTdXBlcnR5cGUgYSwgU3VwZXJ0eXBlIGIpIHt9CgogIHZvaWQgY29tcHV0ZUNvcmVUeXBlcyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBjb3JlVHlwZXMgPSBuZXcgQ29yZVR5cGVzKGNvbXBvbmVudCk7CgogICAgZnV0dXJlT2ZCb3R0b20gPSBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICBjb3JlVHlwZXMuZnV0dXJlQ2xhc3MsIDxEYXJ0VHlwZT5bY29uc3QgQm90dG9tVHlwZSgpXSk7CiAgICBpdGVyYWJsZU9mQm90dG9tID0gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MsIDxEYXJ0VHlwZT5bY29uc3QgQm90dG9tVHlwZSgpXSk7CiAgICBzdHJlYW1PZkJvdHRvbSA9IG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgIGNvcmVUeXBlcy5zdHJlYW1DbGFzcywgPERhcnRUeXBlPltjb25zdCBCb3R0b21UeXBlKCldKTsKCiAgICB0aWNrZXIubG9nTXMoIkNvbXB1dGVkIGNvcmUgdHlwZXMiKTsKICB9CgogIHZvaWQgY2hlY2tTdXBlcnR5cGVzKExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBzb3VyY2VDbGFzc2VzKSB7CiAgICBmb3IgKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyIGluIHNvdXJjZUNsYXNzZXMpIHsKICAgICAgaWYgKGJ1aWxkZXIubGlicmFyeS5sb2FkZXIgPT0gdGhpcyAmJiAhYnVpbGRlci5pc1BhdGNoKSB7CiAgICAgICAgYnVpbGRlci5jaGVja1N1cGVydHlwZXMoY29yZVR5cGVzKTsKICAgICAgfQogICAgfQogICAgdGlja2VyLmxvZ01zKCJDaGVja2VkIHN1cGVydHlwZXMiKTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHMoKSB7CiAgICBpZiAodGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKCiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5IGlzIFNvdXJjZUxpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICAgIGxpYnJhcnkKICAgICAgICAgICAgICAuY2hlY2tCb3VuZHNJbk91dGxpbmUodHlwZUluZmVyZW5jZUVuZ2luZS50eXBlU2NoZW1hRW52aXJvbm1lbnQpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkNoZWNrZWQgdHlwZSBhcmd1bWVudHMgb2Ygc3VwZXJzIGFnYWluc3QgdGhlIGJvdW5kcyIpOwogIH0KCiAgdm9pZCBjaGVja092ZXJyaWRlcyhMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gc291cmNlQ2xhc3NlcykgewogICAgTGlzdDxEZWxheWVkT3ZlcnJpZGVDaGVjaz4gb3ZlcnJpZGVDaGVja3MgPQogICAgICAgIGJ1aWxkZXJIaWVyYXJjaHkub3ZlcnJpZGVDaGVja3MudG9MaXN0KCk7CiAgICBidWlsZGVySGllcmFyY2h5Lm92ZXJyaWRlQ2hlY2tzLmNsZWFyKCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG92ZXJyaWRlQ2hlY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgIG92ZXJyaWRlQ2hlY2tzW2ldLmNoZWNrKGJ1aWxkZXJIaWVyYXJjaHkpOwogICAgfQogICAgdGlja2VyLmxvZ01zKCJDaGVja2VkICR7b3ZlcnJpZGVDaGVja3MubGVuZ3RofSBvdmVycmlkZXMiKTsKCiAgICB0eXBlSW5mZXJlbmNlRW5naW5lPy5maW5pc2hUb3BMZXZlbEluaXRpYWxpemluZ0Zvcm1hbHMoKTsKICAgIHRpY2tlci5sb2dNcygiRmluaXNoZWQgaW5pdGlhbGl6aW5nIGZvcm1hbHMiKTsKICB9CgogIHZvaWQgY2hlY2tBYnN0cmFjdE1lbWJlcnMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMpIHsKICAgIExpc3Q8RGVsYXllZE1lbWJlcj4gZGVsYXllZE1lbWJlckNoZWNrcyA9CiAgICAgICAgYnVpbGRlckhpZXJhcmNoeS5kZWxheWVkTWVtYmVyQ2hlY2tzLnRvTGlzdCgpOwogICAgYnVpbGRlckhpZXJhcmNoeS5kZWxheWVkTWVtYmVyQ2hlY2tzLmNsZWFyKCk7CiAgICBTZXQ8Q2xhc3M+IGNoYW5nZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzcz4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsYXllZE1lbWJlckNoZWNrcy5sZW5ndGg7IGkrKykgewogICAgICBkZWxheWVkTWVtYmVyQ2hlY2tzW2ldLmNoZWNrKGJ1aWxkZXJIaWVyYXJjaHkpOwogICAgICBjaGFuZ2VkQ2xhc3Nlcy5hZGQoZGVsYXllZE1lbWJlckNoZWNrc1tpXS5wYXJlbnQuY2xzKTsKICAgIH0KICAgIHRpY2tlci5sb2dNcygKICAgICAgICAiQ29tcHV0ZWQgJHtkZWxheWVkTWVtYmVyQ2hlY2tzLmxlbmd0aH0gY29tYmluZWQgbWVtYmVyIHNpZ25hdHVyZXMiKTsKCiAgICBoaWVyYXJjaHkuYXBwbHlNZW1iZXJDaGFuZ2VzKGNoYW5nZWRDbGFzc2VzLCBmaW5kRGVzY2VuZGFudHM6IGZhbHNlKTsKICAgIHRpY2tlcgogICAgICAgIC5sb2dNcygiVXBkYXRlZCAke2NoYW5nZWRDbGFzc2VzLmxlbmd0aH0gY2xhc3NlcyBpbiBrZXJuZWwgaGllcmFyY2h5Iik7CiAgfQoKICB2b2lkIGNoZWNrUmVkaXJlY3RpbmdGYWN0b3JpZXMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMpIHsKICAgIC8vIFRPRE8oYWhlKTogTW92ZSB0aGlzIHRvIFtDbGFzc0hpZXJhcmNoeUJ1aWxkZXJdLgogICAgaWYgKHRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBmb3IgKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyIGluIHNvdXJjZUNsYXNzZXMpIHsKICAgICAgaWYgKGJ1aWxkZXIubGlicmFyeS5sb2FkZXIgPT0gdGhpcyAmJiAhYnVpbGRlci5pc1BhdGNoKSB7CiAgICAgICAgYnVpbGRlci5jaGVja1JlZGlyZWN0aW5nRmFjdG9yaWVzKAogICAgICAgICAgICB0eXBlSW5mZXJlbmNlRW5naW5lLnR5cGVTY2hlbWFFbnZpcm9ubWVudCk7CiAgICAgIH0KICAgIH0KICAgIHRpY2tlci5sb2dNcygiQ2hlY2tlZCByZWRpcmVjdGluZyBmYWN0b3JpZXMiKTsKICB9CgogIHZvaWQgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVycyhMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gc291cmNlQ2xhc3NlcykgewogICAgLy8gVE9ETyhhaGUpOiBNb3ZlIHRoaXMgdG8gW0NsYXNzSGllcmFyY2h5QnVpbGRlcl0uCiAgICBpZiAoIXRhcmdldC5iYWNrZW5kVGFyZ2V0LmVuYWJsZU5vU3VjaE1ldGhvZEZvcndhcmRlcnMpIHJldHVybjsKCiAgICBMaXN0PENsYXNzPiBjaGFuZ2VkQ2xhc3NlcyA9IG5ldyBMaXN0PENsYXNzPigpOwogICAgZm9yIChTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlciBpbiBzb3VyY2VDbGFzc2VzKSB7CiAgICAgIGlmIChidWlsZGVyLmxpYnJhcnkubG9hZGVyID09IHRoaXMgJiYgIWJ1aWxkZXIuaXNQYXRjaCkgewogICAgICAgIGlmIChidWlsZGVyLmFkZE5vU3VjaE1ldGhvZEZvcndhcmRlcnModGFyZ2V0LCBoaWVyYXJjaHkpKSB7CiAgICAgICAgICBjaGFuZ2VkQ2xhc3Nlcy5hZGQoYnVpbGRlci50YXJnZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaGllcmFyY2h5LmFwcGx5TWVtYmVyQ2hhbmdlcyhjaGFuZ2VkQ2xhc3NlcywgZmluZERlc2NlbmRhbnRzOiB0cnVlKTsKICAgIHRpY2tlci5sb2dNcygiQWRkZWQgbm9TdWNoTWV0aG9kIGZvcndhcmRlcnMiKTsKICB9CgogIHZvaWQgY2hlY2tNaXhpbnMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMpIHsKICAgIGZvciAoU291cmNlQ2xhc3NCdWlsZGVyIGJ1aWxkZXIgaW4gc291cmNlQ2xhc3NlcykgewogICAgICBpZiAoYnVpbGRlci5saWJyYXJ5LmxvYWRlciA9PSB0aGlzICYmICFidWlsZGVyLmlzUGF0Y2gpIHsKICAgICAgICBpZiAoYnVpbGRlci5pc01peGluRGVjbGFyYXRpb24pIHsKICAgICAgICAgIGJ1aWxkZXIuY2hlY2tNaXhpbkRlY2xhcmF0aW9uKCk7CiAgICAgICAgfQoKICAgICAgICBDbGFzcyBtaXhlZEluQ2xhc3MgPSBidWlsZGVyLmNscy5taXhlZEluQ2xhc3M7CiAgICAgICAgaWYgKG1peGVkSW5DbGFzcyAhPSBudWxsICYmIG1peGVkSW5DbGFzcy5pc01peGluRGVjbGFyYXRpb24pIHsKICAgICAgICAgIGJ1aWxkZXIuY2hlY2tNaXhpbkFwcGxpY2F0aW9uKGhpZXJhcmNoeSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0aWNrZXIubG9nTXMoIkNoZWNrZWQgbWl4aW4gZGVjbGFyYXRpb24gYXBwbGljYXRpb25zIik7CiAgfQoKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKCkgewogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGxpYnJhcnkuYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoKTsKICAgICAgICBJdGVyYXRvcjxCdWlsZGVyPiBpdGVyYXRvciA9IGxpYnJhcnkuaXRlcmF0b3I7CiAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBpdGVyYXRvci5jdXJyZW50OwogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgICAgICBkZWNsYXJhdGlvbi5idWlsZE91dGxpbmVFeHByZXNzaW9ucyhsaWJyYXJ5KTsKICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgTWVtYmVyQnVpbGRlcikgewogICAgICAgICAgICBkZWNsYXJhdGlvbi5idWlsZE91dGxpbmVFeHByZXNzaW9ucyhsaWJyYXJ5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBidWlsZENsYXNzSGllcmFyY2h5KAogICAgICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gc291cmNlQ2xhc3NlcywgQ2xhc3NCdWlsZGVyIG9iamVjdENsYXNzKSB7CiAgICBidWlsZGVySGllcmFyY2h5ID0gQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLmJ1aWxkKAogICAgICAgIG9iamVjdENsYXNzLCBzb3VyY2VDbGFzc2VzLCB0aGlzLCBjb3JlVHlwZXMpOwogICAgdHlwZUluZmVyZW5jZUVuZ2luZT8uaGllcmFyY2h5QnVpbGRlciA9IGJ1aWxkZXJIaWVyYXJjaHk7CiAgICB0aWNrZXIubG9nTXMoIkJ1aWx0IGNsYXNzIGhpZXJhcmNoeSIpOwogIH0KCiAgdm9pZCBjcmVhdGVUeXBlSW5mZXJlbmNlRW5naW5lKCkgewogICAgaWYgKHRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICB0eXBlSW5mZXJlbmNlRW5naW5lID0gbmV3IFNoYWRvd1R5cGVJbmZlcmVuY2VFbmdpbmUoaW5zdHJ1bWVudGF0aW9uKTsKICB9CgogIHZvaWQgcGVyZm9ybVRvcExldmVsSW5mZXJlbmNlKExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBzb3VyY2VDbGFzc2VzKSB7CiAgICBpZiAodGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKCiAgICAvLy8gVGhlIGZpcnN0IHBoYXNlIG9mIHRvcCBsZXZlbCBpbml0aWFsaXplciBpbmZlcmVuY2UsIHdoaWNoIGNvbnNpc3RzIG9mCiAgICAvLy8gY3JlYXRpbmcga2VybmVsIG9iamVjdHMgZm9yIGFsbCBmaWVsZHMgYW5kIHRvcCBsZXZlbCB2YXJpYWJsZXMgdGhhdAogICAgLy8vIG1pZ2h0IGJlIHN1YmplY3QgdG8gdHlwZSBpbmZlcmVuY2UsIGFuZCByZWNvcmRzIGRlcGVuZGVuY2llcyBiZXR3ZWVuCiAgICAvLy8gdGhlbS4KICAgIHR5cGVJbmZlcmVuY2VFbmdpbmUucHJlcGFyZVRvcExldmVsKGNvcmVUeXBlcywgaGllcmFyY2h5KTsKICAgIExpc3Q8RmllbGRCdWlsZGVyPiBhbGxJbXBsaWNpdGx5VHlwZWRGaWVsZHMgPSA8RmllbGRCdWlsZGVyPltdOwogICAgZm9yIChMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5IGluIGJ1aWxkZXJzLnZhbHVlcykgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIExpc3Q8RmllbGRCdWlsZGVyPiBpbXBsaWNpdGx5VHlwZWRGaWVsZHMgPQogICAgICAgICAgICBsaWJyYXJ5LnRha2VJbXBsaWNpdGx5VHlwZWRGaWVsZHMoKTsKICAgICAgICBpZiAoaW1wbGljaXRseVR5cGVkRmllbGRzICE9IG51bGwpIHsKICAgICAgICAgIGFsbEltcGxpY2l0bHlUeXBlZEZpZWxkcy5hZGRBbGwoaW1wbGljaXRseVR5cGVkRmllbGRzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFsbEltcGxpY2l0bHlUeXBlZEZpZWxkcy5sZW5ndGg7IGkrKykgewogICAgICAvLyBUT0RPKGFoZSk6IFRoaXMgY2FuIGNhdXNlIGEgY3Jhc2ggZm9yIHBhcnRzIHRoYXQgZmFpbGVkIHRvIGdldAogICAgICAvLyBpbmNsdWRlZCwgc2VlIGZvciBleGFtcGxlLAogICAgICAvLyB0ZXN0cy9zdGFuZGFsb25lXzIvaW8vaHR0cF9jb29raWVfZGF0ZV90ZXN0LmRhcnQuCiAgICAgIGFsbEltcGxpY2l0bHlUeXBlZEZpZWxkc1tpXS5pbmZlclR5cGUoKTsKICAgIH0KCiAgICB0eXBlSW5mZXJlbmNlRW5naW5lLmlzVHlwZUluZmVyZW5jZVByZXBhcmVkID0gdHJ1ZTsKCiAgICAvLyBTaW5jZSBmaW5hbGl6YXRpb24gb2YgY292YXJpYW5jZSBtYXkgaGF2ZSBhZGRlZCBmb3J3YXJkaW5nIHN0dWJzLCB3ZSBuZWVkCiAgICAvLyB0byByZWNvbXB1dGUgdGhlIGNsYXNzIGhpZXJhcmNoeSBzbyB0aGF0IG1ldGhvZCBjb21waWxhdGlvbiB3aWxsIHByb3Blcmx5CiAgICAvLyB0YXJnZXQgdGhvc2UgZm9yd2FyZGluZyBzdHVicy4KICAgIGhpZXJhcmNoeS5vbkFtYmlndW91c1N1cGVydHlwZXMgPSBpZ25vcmVBbWJpZ3VvdXNTdXBlcnR5cGVzOwogICAgdGlja2VyLmxvZ01zKCJQZXJmb3JtZWQgdG9wIGxldmVsIGluZmVyZW5jZSIpOwogIH0KCiAgdm9pZCB0cmFuc2Zvcm1Qb3N0SW5mZXJlbmNlKAogICAgICBUcmVlTm9kZSBub2RlLCBib29sIHRyYW5zZm9ybVNldExpdGVyYWxzLCBib29sIHRyYW5zZm9ybUNvbGxlY3Rpb25zKSB7CiAgICBpZiAodHJhbnNmb3JtQ29sbGVjdGlvbnMpIHsKICAgICAgbm9kZS5hY2NlcHQoY29sbGVjdGlvblRyYW5zZm9ybWVyID8/PSBuZXcgQ29sbGVjdGlvblRyYW5zZm9ybWVyKHRoaXMpKTsKICAgIH0KICAgIGlmICh0cmFuc2Zvcm1TZXRMaXRlcmFscykgewogICAgICBub2RlLmFjY2VwdChzZXRMaXRlcmFsVHJhbnNmb3JtZXIgPz89IG5ldyBTZXRMaXRlcmFsVHJhbnNmb3JtZXIodGhpcywKICAgICAgICAgIHRyYW5zZm9ybUNvbnN0OiAhdGFyZ2V0LmVuYWJsZUNvbnN0YW50VXBkYXRlMjAxOCkpOwogICAgfQogIH0KCiAgdm9pZCB0cmFuc2Zvcm1MaXN0UG9zdEluZmVyZW5jZShMaXN0PFRyZWVOb2RlPiBsaXN0LAogICAgICBib29sIHRyYW5zZm9ybVNldExpdGVyYWxzLCBib29sIHRyYW5zZm9ybUNvbGxlY3Rpb25zKSB7CiAgICBpZiAodHJhbnNmb3JtQ29sbGVjdGlvbnMpIHsKICAgICAgQ29sbGVjdGlvblRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0KICAgICAgICAgIGNvbGxlY3Rpb25UcmFuc2Zvcm1lciA/Pz0gbmV3IENvbGxlY3Rpb25UcmFuc2Zvcm1lcih0aGlzKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgbGlzdFtpXSA9IGxpc3RbaV0uYWNjZXB0KHRyYW5zZm9ybWVyKTsKICAgICAgfQogICAgfQogICAgaWYgKHRyYW5zZm9ybVNldExpdGVyYWxzKSB7CiAgICAgIFNldExpdGVyYWxUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IHNldExpdGVyYWxUcmFuc2Zvcm1lciA/Pz0KICAgICAgICAgIG5ldyBTZXRMaXRlcmFsVHJhbnNmb3JtZXIodGhpcywKICAgICAgICAgICAgICB0cmFuc2Zvcm1Db25zdDogIXRhcmdldC5lbmFibGVDb25zdGFudFVwZGF0ZTIwMTgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICBsaXN0W2ldID0gbGlzdFtpXS5hY2NlcHQodHJhbnNmb3JtZXIpOwogICAgICB9CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIGluc3RhbnRpYXRlSW52b2NhdGlvbihFeHByZXNzaW9uIHJlY2VpdmVyLCBTdHJpbmcgbmFtZSwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwgYm9vbCBpc1N1cGVyKSB7CiAgICByZXR1cm4gdGFyZ2V0LmJhY2tlbmRUYXJnZXQuaW5zdGFudGlhdGVJbnZvY2F0aW9uKAogICAgICAgIGNvcmVUeXBlcywgcmVjZWl2ZXIsIG5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LCBpc1N1cGVyKTsKICB9CgogIEV4cHJlc3Npb24gaW5zdGFudGlhdGVOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgU3RyaW5nIG5hbWUsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQsCiAgICAgIHtib29sIGlzTWV0aG9kOiBmYWxzZSwKICAgICAgYm9vbCBpc0dldHRlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNTZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzRmllbGQ6IGZhbHNlLAogICAgICBib29sIGlzTG9jYWxWYXJpYWJsZTogZmFsc2UsCiAgICAgIGJvb2wgaXNEeW5hbWljOiBmYWxzZSwKICAgICAgYm9vbCBpc1N1cGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcjogZmFsc2UsCiAgICAgIGJvb2wgaXNUb3BMZXZlbDogZmFsc2V9KSB7CiAgICByZXR1cm4gdGFyZ2V0LmJhY2tlbmRUYXJnZXQuaW5zdGFudGlhdGVOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICBjb3JlVHlwZXMsIHJlY2VpdmVyLCBuYW1lLCBhcmd1bWVudHMsIG9mZnNldCwKICAgICAgICBpc01ldGhvZDogaXNNZXRob2QsCiAgICAgICAgaXNHZXR0ZXI6IGlzR2V0dGVyLAogICAgICAgIGlzU2V0dGVyOiBpc1NldHRlciwKICAgICAgICBpc0ZpZWxkOiBpc0ZpZWxkLAogICAgICAgIGlzTG9jYWxWYXJpYWJsZTogaXNMb2NhbFZhcmlhYmxlLAogICAgICAgIGlzRHluYW1pYzogaXNEeW5hbWljLAogICAgICAgIGlzU3VwZXI6IGlzU3VwZXIsCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLAogICAgICAgIGlzQ29uc3RydWN0b3I6IGlzQ29uc3RydWN0b3IsCiAgICAgICAgaXNUb3BMZXZlbDogaXNUb3BMZXZlbCk7CiAgfQoKICB2b2lkIHJlbGVhc2VBbmNpbGxhcnlSZXNvdXJjZXMoKSB7CiAgICBoaWVyYXJjaHkgPSBudWxsOwogICAgdHlwZUluZmVyZW5jZUVuZ2luZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0J1aWxkZXIgY29tcHV0ZUNsYXNzQnVpbGRlckZyb21UYXJnZXRDbGFzcyhDbGFzcyBjbHMpIHsKICAgIExpYnJhcnkga2VybmVsTGlicmFyeSA9IGNscy5lbmNsb3NpbmdMaWJyYXJ5OwogICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGJ1aWxkZXJzW2tlcm5lbExpYnJhcnkuaW1wb3J0VXJpXTsKICAgIGlmIChsaWJyYXJ5ID09IG51bGwpIHsKICAgICAgcmV0dXJuIHRhcmdldC5kaWxsVGFyZ2V0LmxvYWRlci5jb21wdXRlQ2xhc3NCdWlsZGVyRnJvbVRhcmdldENsYXNzKGNscyk7CiAgICB9CiAgICByZXR1cm4gbGlicmFyeS5sb29rdXBMb2NhbE1lbWJlcihjbHMubmFtZSwgcmVxdWlyZWQ6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUJ1aWxkZXIgY29tcHV0ZVR5cGVCdWlsZGVyKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiB0eXBlLmFjY2VwdChuZXcgVHlwZUJ1aWxkZXJDb21wdXRlcih0aGlzKSk7CiAgfQp9CgovLy8gQSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIGRhcnQ6Y29yZSB0aGF0IGlzIHN1ZmZpY2llbnQgdG8gY3JlYXRlIGFuCi8vLyBpbnN0YW5jZSBvZiBbQ29yZVR5cGVzXSBhbmQgY29tcGlsZSBhIHByb2dyYW0uCmNvbnN0IFN0cmluZyBkZWZhdWx0RGFydENvcmVTb3VyY2UgPSAiIiIKaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCc7CmltcG9ydCAnZGFydDphc3luYyc7CgpleHBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlLCBTdHJlYW07CgpwcmludChvYmplY3QpIHt9CgpjbGFzcyBJdGVyYXRvciB7fQoKY2xhc3MgSXRlcmFibGUge30KCmNsYXNzIExpc3QgZXh0ZW5kcyBJdGVyYWJsZSB7CiAgZmFjdG9yeSBMaXN0LnVubW9kaWZpYWJsZShlbGVtZW50cykgPT4gbnVsbDsKfQoKY2xhc3MgTWFwIGV4dGVuZHMgSXRlcmFibGUgewogIGZhY3RvcnkgTWFwLnVubW9kaWZpYWJsZShvdGhlcikgPT4gbnVsbDsKfQoKY2xhc3MgTm9TdWNoTWV0aG9kRXJyb3IgewogIE5vU3VjaE1ldGhvZEVycm9yLndpdGhJbnZvY2F0aW9uKHJlY2VpdmVyLCBpbnZvY2F0aW9uKTsKfQoKY2xhc3MgTnVsbCB7fQoKY2xhc3MgT2JqZWN0IHsKICBub1N1Y2hNZXRob2QoaW52b2NhdGlvbikgPT4gbnVsbDsKfQoKY2xhc3MgU3RyaW5nIHt9CgpjbGFzcyBTeW1ib2wge30KCmNsYXNzIFNldCB7fQoKY2xhc3MgVHlwZSB7fQoKY2xhc3MgX0ludm9jYXRpb25NaXJyb3IgewogIF9JbnZvY2F0aW9uTWlycm9yLl93aXRoVHlwZShfbWVtYmVyTmFtZSwgX3R5cGUsIF90eXBlQXJndW1lbnRzLAogICAgICBfcG9zaXRpb25hbEFyZ3VtZW50cywgX25hbWVkQXJndW1lbnRzKTsKfQoKY2xhc3MgYm9vbCB7fQoKY2xhc3MgZG91YmxlIGV4dGVuZHMgbnVtIHt9CgpjbGFzcyBpbnQgZXh0ZW5kcyBudW0ge30KCmNsYXNzIG51bSB7fQoKY2xhc3MgX1N5bmNJdGVyYWJsZSB7fQoKY2xhc3MgX1N5bmNJdGVyYXRvciB7CiAgdmFyIF9jdXJyZW50OwogIHZhciBfeWllbGRFYWNoSXRlcmFibGU7Cn0KCmNsYXNzIEZ1bmN0aW9uIHt9CiIiIjsKCi8vLyBBIG1pbmltYWwgaW1wbGVtZW50YXRpb24gb2YgZGFydDphc3luYyB0aGF0IGlzIHN1ZmZpY2llbnQgdG8gY3JlYXRlIGFuCi8vLyBpbnN0YW5jZSBvZiBbQ29yZVR5cGVzXSBhbmQgY29tcGlsZSBwcm9ncmFtLgpjb25zdCBTdHJpbmcgZGVmYXVsdERhcnRBc3luY1NvdXJjZSA9ICIiIgpfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7fQoKX2FzeW5jU3RhY2tUcmFjZUhlbHBlcihhc3luY19vcCkge30KCl9hc3luY1RoZW5XcmFwcGVySGVscGVyKGNvbnRpbnVhdGlvbikge30KCl9hd2FpdEhlbHBlcihvYmplY3QsIHRoZW5DYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgYXdhaXRlcikge30KCl9jb21wbGV0ZU9uQXN5bmNSZXR1cm4oY29tcGxldGVyLCB2YWx1ZSkge30KCmNsYXNzIF9Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyIHsKICBhZGQoZXZlbnQpIHt9CgogIGFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSB7fQoKICBhZGRTdHJlYW0oc3RyZWFtKSB7fQoKICBjbG9zZSgpIHt9CgogIGdldCBzdHJlYW0gPT4gbnVsbDsKfQoKY2xhc3MgQ29tcGxldGVyIHsKICBmYWN0b3J5IENvbXBsZXRlci5zeW5jKCkgPT4gbnVsbDsKCiAgZ2V0IGZ1dHVyZTsKCiAgY29tcGxldGUoW3ZhbHVlXSk7CgogIGNvbXBsZXRlRXJyb3IoZXJyb3IsIFtzdGFja1RyYWNlXSk7Cn0KCmNsYXNzIEZ1dHVyZSB7CiAgZmFjdG9yeSBGdXR1cmUubWljcm90YXNrKGNvbXB1dGF0aW9uKSA9PiBudWxsOwp9CgpjbGFzcyBGdXR1cmVPciB7Cn0KCmNsYXNzIF9Bc3luY0F3YWl0Q29tcGxldGVyIGltcGxlbWVudHMgQ29tcGxldGVyIHsKICBnZXQgZnV0dXJlID0+IG51bGw7CgogIGNvbXBsZXRlKFt2YWx1ZV0pIHt9CgogIGNvbXBsZXRlRXJyb3IoZXJyb3IsIFtzdGFja1RyYWNlXSkge30KfQoKY2xhc3MgU3RyZWFtIHt9CgpjbGFzcyBfU3RyZWFtSXRlcmF0b3IgewogIGdldCBjdXJyZW50ID0+IG51bGw7CgogIG1vdmVOZXh0KCkge30KCiAgY2FuY2VsKCkge30KfQoiIiI7CgovLy8gQSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIGRhcnQ6Y29sbGVjdGlvbiB0aGF0IGlzIHN1ZmZpY2llbnQgdG8gY3JlYXRlIGFuCi8vLyBpbnN0YW5jZSBvZiBbQ29yZVR5cGVzXSBhbmQgY29tcGlsZSBwcm9ncmFtLgpjb25zdCBTdHJpbmcgZGVmYXVsdERhcnRDb2xsZWN0aW9uU291cmNlID0gIiIiCmNsYXNzIF9Vbm1vZGlmaWFibGVTZXQgewogIGZpbmFsIE1hcCBfbWFwOwogIGNvbnN0IF9Vbm1vZGlmaWFibGVTZXQodGhpcy5fbWFwKTsKfQoiIiI7CgovLy8gQSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIGRhcnQ6X2ludGVybmFsIHRoYXQgaXMgc3VmZmljaWVudCB0byBjcmVhdGUgYW4KLy8vIGluc3RhbmNlIG9mIFtDb3JlVHlwZXNdIGFuZCBjb21waWxlIHByb2dyYW0uCmNvbnN0IFN0cmluZyBkZWZhdWx0RGFydEludGVybmFsU291cmNlID0gIiIiCmNsYXNzIFN5bWJvbCB7CiAgY29uc3QgU3ltYm9sKFN0cmluZyBuYW1lKTsKfQoiIiI7CgpjbGFzcyBBbWJpZ3VvdXNUeXBlc1JlY29yZCB7CiAgZmluYWwgQ2xhc3MgY2xzOwogIGZpbmFsIFN1cGVydHlwZSBhOwogIGZpbmFsIFN1cGVydHlwZSBiOwoKICBjb25zdCBBbWJpZ3VvdXNUeXBlc1JlY29yZCh0aGlzLmNscywgdGhpcy5hLCB0aGlzLmIpOwp9CoT6AE5OPAEdASEBIQEpASEJExQPExIUFhcRGxcTEgEtNAE4AS8BPwFCASUBJQEdCRgRGRIeIR4bEiUeJikwKTAfJR4vNDEmIwFKAScJFh8RFx4VFhoYFxoVATkBNwFKAUsBSAE+AUQBRQEwARkJFB4eFw8OAS8BKwEzATwBQAEkPR8BNR4BPgEqASwcF00bHRsBMQEjAS8BLwFLFwE6JAEjATczHwEpKAEZGTNQMEMjIEgQGkxDCBtJPiUiCAYBGUoRGgxFK04wSQhKQiMgJAYBJyoxOUM6REpPFT9LCCEiKyMdOklITU8mJztAPEYII0IGJiIkIkopCBoGEgQBRxYYMwEZNAEeOQEdNwEPTwYEASk7HiFABi8EAUIsIDs3BAE5K05OKksiOzQgOS1EFAotHickCggGBAFBJiQdIidJJD0BHiJPIRYVJTRNNQgGUEEZOCs9ASsyBAErAUJRBAEYH0U5JB4aESIKCAgpNicGHSUeDzNAJwgGJAE5JCAICCUEASA/PzkkNiwIKiA1LAoICEYxKhwIMj8IBh0JGjQ0RzkhDg4KCBo5JDYrCAgxTU1PJyIGLRwEAR1CLCgxNSQnCClCISsfDCAKCiAoCAgEARgXOSQ2MwgILwQBJxk5JDZECAhBBAEmEzkkNwgIPAQBKBM5JC0ICD8EAR8TOSQ0CAgyBAFLEzkkQwgIOgQBTCITOSQRTwgIRgQBHxM5JDAICDQEAR4TOSQvCAgzBAFKDT0tLismIEUILCBIJwgtIEUoCAYEAUxGTksOTU1ANiQ2JSwuIgwKCAYBRD4pSgYBJzknLwkjKTo2KTYsPDMxMkEsEwwKNSM/CiYvSxEdCgg6TEMBSCkBNR45NR4YFk0aFQYBLRQEATRORjgvJkwnPTQYKD0cFwgGATw1HyMtLychS0keOEEiHB0/Qjs+Fg4MCggdRk4YTxwXCAYEAUYsSwE2URE5RxoqMyUzNx5BSSNPDgweNjowQTdDKUYQIkcpHBclDgwKARoqMx0zNx5BSSNPDgwmNjowQTdDKUYQIkcpHBclDgwKCAhFFAQBGjkkNjsgIQoICCUEASUxKjkeJS4oLSgKCAgiL0M3MgoIBjkEARw7NjArSAgHHT05DT80QDUGQUEGIi4EAUgQMz0YEhYEAUkBLyoBKEAqQihAASkEAUE4QCwIBigEARcjATktJhJQCggISQQBQDAyLTYxBkABPjMEAUYuNzIyOzY9BhJOAUoLUAQBSzgjOEArOAgGMwQBSzhEATQ4QEQuCggGSTMEAT04QCorCgE3RzQKCAY8BAEjOSQrNyYyLTo1OgwKCAgEARxKNDY+KwQBJSNKBAFKIwFOTE0OP0Q2JDMxLUIKCAYBQEgkOy8GATgBUVEmQTMEAR9NIE4GIEw+BgQBNz4gKkUuLwgGIEQqQS4vCAYEAUU3N0AEAStJHRwcGyMdGxwhIT42HBwcGioeGhwmIQQBJRYgBAEMPzJAG08GQAQBDDI3BAIBSjMpGRUBKQERARIBEgEeLwIBHSsCARo6AgEOAQ8kAgEQARABDQEOARpCLgIBDgEcARkBDQEXARYQGgIBEgUBSzEqKgEkASkBPgEsASMQASEBFwENARYCARIkAQ4BFQEmAgEPMQIBEQIBMhYBFwEoAgEQARgXARABDgIFAVAxLxkSJQIFAU8xLQ8dAgUBHRMVFQE4AgE1cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfbG9hZGVyLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9jb25zdGFudF9ldmFsdWF0b3IuZGFydMABORgvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGEga2VybmVsMmtlcm5lbCBjb25zdGFudCBldmFsdWF0aW9uIHRyYW5zZm9ybWF0aW9uLgovLy8KLy8vIEV2ZW4gdGhvdWdoIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZyb250ZW5kIGRvZXMgbm90IGVtaXQga2VybmVsIEFTVCB3aGljaAovLy8gY29udGFpbnMgY29tcGlsZS10aW1lIGVycm9ycywgdGhpcyB0cmFuc2Zvcm1hdGlvbiBzdGlsbCBwZXJmb3JtcyBzb21lCi8vLyB2YWxpZGF0aW9uIGFuZCB0aHJvd3MgYSBbQ29uc3RhbnRFdmFsdWF0aW9uRXJyb3JdIGlmIHRoZXJlIHdhcyBhCi8vLyBjb21waWxlLXRpbWUgZXJyb3JzLgovLy8KLy8vIER1ZSB0byB0aGUgbGFjayBpbmZvcm1hdGlvbiB3aGljaCBpcyBpcyBvbmx5IGF2YWlsYWJsZSBpbiB0aGUgZnJvbnQtZW5kLAovLy8gdGhpcyB2YWxpZGF0aW9uIGlzIGluY29tcGxldGUgKGUuZy4gd2hldGhlciBhbiBpbnRlZ2VyIGxpdGVyYWwgdXNlZCB0aGUKLy8vIGhleGFkZWNpbWFsIHN5bnRheCBvciBub3QpLgovLy8KLy8vIEZ1cnRoZXJtb3JlIGR1ZSB0byB0aGUgbG93ZXJpbmcgb2YgY2VydGFpbiBjb25zdHJ1Y3RzIGluIHRoZSBmcm9udC1lbmQKLy8vIChlLmcuICc/PycpIHdlIG5lZWQgdG8gc3VwcG9ydCBhIHN1cGVyLXNldCBvZiB0aGUgbm9ybWFsIGNvbnN0YW50IGV4cHJlc3Npb24KLy8vIGxhbmd1YWdlLiAgSXNzdWUoaHR0cDovL2RhcnRidWcuY29tLzMxNzk5KQpsaWJyYXJ5IGZhc3RhLmNvbnN0YW50X2V2YWx1YXRvcjsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JzsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydCc7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsQ2lyY3VsYXJpdHksCiAgICAgICAgbWVzc2FnZUNvbnN0RXZhbENvbnRleHQsCiAgICAgICAgbWVzc2FnZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbiwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWQsCiAgICAgICAgbWVzc2FnZUNvbnN0RXZhbE5vdE1hcEluU3ByZWFkLAogICAgICAgIG1lc3NhZ2VDb25zdEV2YWxOdWxsVmFsdWUsCiAgICAgICAgbWVzc2FnZUNvbnN0RXZhbFVuZXZhbHVhdGVkLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudCwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUtleSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFR5cGUsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRQcm9wZXJ0eUdldCwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldCwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbFplcm9EaXZpc29yOwoKcGFydCAnY29uc3RhbnRfY29sbGVjdGlvbl9idWlsZGVycy5kYXJ0JzsKCkNvbXBvbmVudCB0cmFuc2Zvcm1Db21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCwgQ29uc3RhbnRzQmFja2VuZCBiYWNrZW5kLAogICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudERlZmluZXMsIEVycm9yUmVwb3J0ZXIgZXJyb3JSZXBvcnRlciwKICAgIHtib29sIGtlZXBGaWVsZHM6IHRydWUsCiAgICBib29sIGV2YWx1YXRlQW5ub3RhdGlvbnM6IHRydWUsCiAgICBib29sIGRlc3VnYXJTZXRzOiBmYWxzZSwKICAgIGJvb2wgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQ6IGZhbHNlLAogICAgQ29yZVR5cGVzIGNvcmVUeXBlcywKICAgIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeX0pIHsKICBjb3JlVHlwZXMgPz89IG5ldyBDb3JlVHlwZXMoY29tcG9uZW50KTsKICBoaWVyYXJjaHkgPz89IG5ldyBDbGFzc0hpZXJhcmNoeShjb21wb25lbnQpOwoKICBmaW5hbCB0eXBlRW52aXJvbm1lbnQgPSBuZXcgVHlwZUVudmlyb25tZW50KGNvcmVUeXBlcywgaGllcmFyY2h5KTsKCiAgdHJhbnNmb3JtTGlicmFyaWVzKGNvbXBvbmVudC5saWJyYXJpZXMsIGJhY2tlbmQsIGVudmlyb25tZW50RGVmaW5lcywKICAgICAgdHlwZUVudmlyb25tZW50LCBlcnJvclJlcG9ydGVyLAogICAgICBrZWVwRmllbGRzOiBrZWVwRmllbGRzLAogICAgICBkZXN1Z2FyU2V0czogZGVzdWdhclNldHMsCiAgICAgIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OiBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudCwKICAgICAgZXZhbHVhdGVBbm5vdGF0aW9uczogZXZhbHVhdGVBbm5vdGF0aW9ucyk7CiAgcmV0dXJuIGNvbXBvbmVudDsKfQoKdm9pZCB0cmFuc2Zvcm1MaWJyYXJpZXMoCiAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcywKICAgIENvbnN0YW50c0JhY2tlbmQgYmFja2VuZCwKICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnREZWZpbmVzLAogICAgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwKICAgIEVycm9yUmVwb3J0ZXIgZXJyb3JSZXBvcnRlciwKICAgIHtib29sIGtlZXBGaWVsZHM6IHRydWUsCiAgICBib29sIGtlZXBWYXJpYWJsZXM6IGZhbHNlLAogICAgYm9vbCBldmFsdWF0ZUFubm90YXRpb25zOiB0cnVlLAogICAgYm9vbCBkZXN1Z2FyU2V0czogZmFsc2UsCiAgICBib29sIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OiBmYWxzZX0pIHsKICBmaW5hbCBDb25zdGFudHNUcmFuc2Zvcm1lciBjb25zdGFudHNUcmFuc2Zvcm1lciA9IG5ldyBDb25zdGFudHNUcmFuc2Zvcm1lcigKICAgICAgYmFja2VuZCwKICAgICAgZW52aXJvbm1lbnREZWZpbmVzLAogICAgICBrZWVwRmllbGRzLAogICAgICBrZWVwVmFyaWFibGVzLAogICAgICBldmFsdWF0ZUFubm90YXRpb25zLAogICAgICBkZXN1Z2FyU2V0cywKICAgICAgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQsCiAgICAgIHR5cGVFbnZpcm9ubWVudCwKICAgICAgZXJyb3JSZXBvcnRlcik7CiAgZm9yIChmaW5hbCBMaWJyYXJ5IGxpYnJhcnkgaW4gbGlicmFyaWVzKSB7CiAgICBjb25zdGFudHNUcmFuc2Zvcm1lci5jb252ZXJ0TGlicmFyeShsaWJyYXJ5KTsKICB9Cn0KCmNsYXNzIEphdmFTY3JpcHRJbnRDb25zdGFudCBleHRlbmRzIERvdWJsZUNvbnN0YW50IHsKICBmaW5hbCBCaWdJbnQgYmlnSW50VmFsdWU7CiAgSmF2YVNjcmlwdEludENvbnN0YW50KGludCB2YWx1ZSkgOiB0aGlzLmZyb21CaWdJbnQoQmlnSW50LmZyb20odmFsdWUpKTsKICBKYXZhU2NyaXB0SW50Q29uc3RhbnQuZnJvbURvdWJsZShkb3VibGUgdmFsdWUpCiAgICAgIDogYmlnSW50VmFsdWUgPSBCaWdJbnQuZnJvbSh2YWx1ZSksCiAgICAgICAgc3VwZXIodmFsdWUpOwogIEphdmFTY3JpcHRJbnRDb25zdGFudC5mcm9tQmlnSW50KHRoaXMuYmlnSW50VmFsdWUpCiAgICAgIDogc3VwZXIoYmlnSW50VmFsdWUudG9Eb3VibGUoKSk7CiAgSmF2YVNjcmlwdEludENvbnN0YW50LmZyb21VSW50NjQoaW50IHZhbHVlKQogICAgICA6IHRoaXMuZnJvbUJpZ0ludChCaWdJbnQuZnJvbSh2YWx1ZSkudG9VbnNpZ25lZCg2NCkpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuaW50VHlwZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRiaWdJbnRWYWx1ZSc7Cn0KCmNsYXNzIENvbnN0YW50c1RyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIgewogIGZpbmFsIENvbnN0YW50c0JhY2tlbmQgYmFja2VuZDsKICBmaW5hbCBDb25zdGFudEV2YWx1YXRvciBjb25zdGFudEV2YWx1YXRvcjsKICBmaW5hbCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50OwoKICAvLy8gV2hldGhlciB0byBwcmVzZXJ2ZSBjb25zdGFudCBbRmllbGRdcy4gIEFsbCB1c2Utc2l0ZXMgd2lsbCBiZSByZXdyaXR0ZW4uCiAgZmluYWwgYm9vbCBrZWVwRmllbGRzOwogIGZpbmFsIGJvb2wga2VlcFZhcmlhYmxlczsKICBmaW5hbCBib29sIGV2YWx1YXRlQW5ub3RhdGlvbnM7CiAgZmluYWwgYm9vbCBkZXN1Z2FyU2V0czsKICBmaW5hbCBib29sIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OwoKICBDb25zdGFudHNUcmFuc2Zvcm1lcigKICAgICAgdGhpcy5iYWNrZW5kLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcywKICAgICAgdGhpcy5rZWVwRmllbGRzLAogICAgICB0aGlzLmtlZXBWYXJpYWJsZXMsCiAgICAgIHRoaXMuZXZhbHVhdGVBbm5vdGF0aW9ucywKICAgICAgdGhpcy5kZXN1Z2FyU2V0cywKICAgICAgdGhpcy5lcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudCwKICAgICAgdGhpcy50eXBlRW52aXJvbm1lbnQsCiAgICAgIEVycm9yUmVwb3J0ZXIgZXJyb3JSZXBvcnRlcikKICAgICAgOiBjb25zdGFudEV2YWx1YXRvciA9IG5ldyBDb25zdGFudEV2YWx1YXRvcigKICAgICAgICAgICAgYmFja2VuZCwgZW52aXJvbm1lbnREZWZpbmVzLCB0eXBlRW52aXJvbm1lbnQsIGVycm9yUmVwb3J0ZXIsCiAgICAgICAgICAgIGRlc3VnYXJTZXRzOiBkZXN1Z2FyU2V0cywKICAgICAgICAgICAgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQ6IGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50KTsKCiAgLy8gVHJhbnNmb3JtIHRoZSBsaWJyYXJ5L2NsYXNzIG1lbWJlcnM6CgogIHZvaWQgY29udmVydExpYnJhcnkoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhsaWJyYXJ5LmFubm90YXRpb25zLCBsaWJyYXJ5KTsKCiAgICB0cmFuc2Zvcm1MaXN0KGxpYnJhcnkuZGVwZW5kZW5jaWVzLCB0aGlzLCBsaWJyYXJ5KTsKICAgIHRyYW5zZm9ybUxpc3QobGlicmFyeS5wYXJ0cywgdGhpcywgbGlicmFyeSk7CiAgICB0cmFuc2Zvcm1MaXN0KGxpYnJhcnkudHlwZWRlZnMsIHRoaXMsIGxpYnJhcnkpOwogICAgdHJhbnNmb3JtTGlzdChsaWJyYXJ5LmNsYXNzZXMsIHRoaXMsIGxpYnJhcnkpOwogICAgdHJhbnNmb3JtTGlzdChsaWJyYXJ5LnByb2NlZHVyZXMsIHRoaXMsIGxpYnJhcnkpOwogICAgdHJhbnNmb3JtTGlzdChsaWJyYXJ5LmZpZWxkcywgdGhpcywgbGlicmFyeSk7CgogICAgaWYgKCFrZWVwRmllbGRzKSB7CiAgICAgIC8vIFRoZSB0cmFuc2Zvcm1lciBBUEkgZG9lcyBub3QgaXRlcmF0ZSBvdmVyIGBMaWJyYXJ5LmFkZGl0aW9uYWxFeHBvcnRzYCwKICAgICAgLy8gc28gd2UgbWFudWFsbHkgZGVsZXRlIHRoZSByZWZlcmVuY2VzIHRvIHNoYWtlbiBub2Rlcy4KICAgICAgbGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cy5yZW1vdmVXaGVyZSgoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewogICAgICAgIHJldHVybiByZWZlcmVuY2Uubm9kZSBpcyBGaWVsZCAmJiByZWZlcmVuY2UuY2Fub25pY2FsTmFtZSA9PSBudWxsOwogICAgICB9KTsKICAgIH0KICB9CgogIHZpc2l0TGlicmFyeVBhcnQoTGlicmFyeVBhcnQgbm9kZSkgewogICAgY29uc3RhbnRFdmFsdWF0b3Iud2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnMobm9kZS5hbm5vdGF0aW9ucywgbm9kZSk7CiAgICB9KTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgdmlzaXRMaWJyYXJ5RGVwZW5kZW5jeShMaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgIH0pOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2aXNpdENsYXNzKENsYXNzIG5vZGUpIHsKICAgIGNvbnN0YW50RXZhbHVhdG9yLndpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUuZmllbGRzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLmNvbnN0cnVjdG9ycywgdGhpcywgbm9kZSk7CiAgICAgIHRyYW5zZm9ybUxpc3Qobm9kZS5wcm9jZWR1cmVzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycywgdGhpcywgbm9kZSk7CiAgICB9KTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgdmlzaXRQcm9jZWR1cmUoUHJvY2VkdXJlIG5vZGUpIHsKICAgIGNvbnN0YW50RXZhbHVhdG9yLndpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgICBub2RlLmZ1bmN0aW9uID0gbm9kZS5mdW5jdGlvbi5hY2NlcHQodGhpcykuLnBhcmVudCA9IG5vZGU7CiAgICB9KTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgdmlzaXRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBub2RlKSB7CiAgICBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLmluaXRpYWxpemVycywgdGhpcywgbm9kZSk7CiAgICAgIG5vZGUuZnVuY3Rpb24gPSBub2RlLmZ1bmN0aW9uLmFjY2VwdCh0aGlzKS4ucGFyZW50ID0gbm9kZTsKICAgIH0pOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2aXNpdFR5cGVkZWYoVHlwZWRlZiBub2RlKSB7CiAgICBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzT2ZGdW5jdGlvblR5cGUsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzLCB0aGlzLCBub2RlKTsKICAgIH0pOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGNvbnN0YW50RXZhbHVhdG9yLndpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzLCB0aGlzLCBub2RlKTsKICAgIH0pOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2aXNpdFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgdm9pZCB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhMaXN0PEV4cHJlc3Npb24+IG5vZGVzLCBUcmVlTm9kZSBwYXJlbnQpIHsKICAgIGlmIChldmFsdWF0ZUFubm90YXRpb25zICYmIG5vZGVzLmxlbmd0aCA+IDApIHsKICAgICAgdHJhbnNmb3JtRXhwcmVzc2lvbnMobm9kZXMsIHBhcmVudCk7CiAgICB9CiAgfQoKICB2b2lkIHRyYW5zZm9ybUV4cHJlc3Npb25zKExpc3Q8RXhwcmVzc2lvbj4gbm9kZXMsIFRyZWVOb2RlIHBhcmVudCkgewogICAgY29uc3RhbnRFdmFsdWF0b3Iud2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgewogICAgICAgIG5vZGVzW2ldID0gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChwYXJlbnQsIG5vZGVzW2ldKQogICAgICAgICAgLi5wYXJlbnQgPSBwYXJlbnQ7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLy8gSGFuZGxlIGRlZmluaXRpb24gb2YgY29uc3RhbnRzOgoKICB2aXNpdEZ1bmN0aW9uTm9kZShGdW5jdGlvbk5vZGUgbm9kZSkgewogICAgZmluYWwgcG9zaXRpb25hbFBhcmFtZXRlckNvdW50ID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvc2l0aW9uYWxQYXJhbWV0ZXJDb3VudDsgKytpKSB7CiAgICAgIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyh2YXJpYWJsZS5hbm5vdGF0aW9ucywgdmFyaWFibGUpOwogICAgICBpZiAodmFyaWFibGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyID0KICAgICAgICAgICAgZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dCh2YXJpYWJsZSwgdmFyaWFibGUuaW5pdGlhbGl6ZXIpCiAgICAgICAgICAgICAgLi5wYXJlbnQgPSB2YXJpYWJsZTsKICAgICAgfQogICAgfQogICAgZm9yIChmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKHZhcmlhYmxlLmFubm90YXRpb25zLCB2YXJpYWJsZSk7CiAgICAgIGlmICh2YXJpYWJsZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgICBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KHZhcmlhYmxlLCB2YXJpYWJsZS5pbml0aWFsaXplcikKICAgICAgICAgICAgICAuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgICB9CiAgICB9CiAgICBpZiAobm9kZS5ib2R5ICE9IG51bGwpIHsKICAgICAgbm9kZS5ib2R5ID0gbm9kZS5ib2R5LmFjY2VwdCh0aGlzKS4ucGFyZW50ID0gbm9kZTsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgdHJhbnNmb3JtQW5ub3RhdGlvbnMobm9kZS5hbm5vdGF0aW9ucywgbm9kZSk7CgogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgICAgZmluYWwgQ29uc3RhbnQgY29uc3RhbnQgPSBldmFsdWF0ZVdpdGhDb250ZXh0KG5vZGUsIG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgICAgIGNvbnN0YW50RXZhbHVhdG9yLmVudi5hZGRWYXJpYWJsZVZhbHVlKG5vZGUsIGNvbnN0YW50KTsKICAgICAgICBub2RlLmluaXRpYWxpemVyID0gbWFrZUNvbnN0YW50RXhwcmVzc2lvbihjb25zdGFudCwgbm9kZS5pbml0aWFsaXplcikKICAgICAgICAgIC4ucGFyZW50ID0gbm9kZTsKCiAgICAgICAgLy8gSWYgdGhpcyBjb25zdGFudCBpcyBpbmxpbmVkLCByZW1vdmUgaXQuCiAgICAgICAgaWYgKCFrZWVwVmFyaWFibGVzICYmIHNob3VsZElubGluZShub2RlLmluaXRpYWxpemVyKSkgewogICAgICAgICAgaWYgKGNvbnN0YW50IGlzISBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBjb25zdGFudCBpcyB1bmV2YWx1YXRlZCB3ZSBuZWVkIHRvIGtlZXAgdGhlIGV4cHJlc3Npb24sCiAgICAgICAgICAgIC8vIHNvIHRoYXQsIGluIHRoZSBjYXNlIHRoZSBjb25zdGFudCBjb250YWlucyBlcnJvciBidXQgdGhlIGxvY2FsCiAgICAgICAgICAgIC8vIGlzIHVudXNlZCwgdGhlIGVycm9yIHdpbGwgc3RpbGwgYmUgcmVwb3J0ZWQuCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBub2RlLmluaXRpYWxpemVyID0gbm9kZS5pbml0aWFsaXplci5hY2NlcHQodGhpcykuLnBhcmVudCA9IG5vZGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgdmlzaXRGaWVsZChGaWVsZCBub2RlKSB7CiAgICByZXR1cm4gY29uc3RhbnRFdmFsdWF0b3Iud2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgICBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUuaW5pdGlhbGl6ZXIpCiAgICAgICAgICAgICAgLi5wYXJlbnQgPSBub2RlOwoKICAgICAgICAvLyBJZiB0aGlzIGNvbnN0YW50IGlzIGlubGluZWQsIHJlbW92ZSBpdC4KICAgICAgICBpZiAoIWtlZXBGaWVsZHMgJiYgc2hvdWxkSW5saW5lKG5vZGUuaW5pdGlhbGl6ZXIpKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnMobm9kZS5hbm5vdGF0aW9ucywgbm9kZSk7CiAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgbm9kZS5pbml0aWFsaXplciA9IG5vZGUuaW5pdGlhbGl6ZXIuYWNjZXB0KHRoaXMpLi5wYXJlbnQgPSBub2RlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbm9kZTsKICAgIH0pOwogIH0KCiAgLy8gSGFuZGxlIHVzZS1zaXRlcyBvZiBjb25zdGFudHMgKGFuZCAiaW5saW5lIiBjb25zdGFudCBleHByZXNzaW9ucyk6CgogIHZpc2l0U3ltYm9sTGl0ZXJhbChTeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBtYWtlQ29uc3RhbnRFeHByZXNzaW9uKGNvbnN0YW50RXZhbHVhdG9yLmV2YWx1YXRlKG5vZGUpLCBub2RlKTsKICB9CgogIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlKSB7CiAgICBmaW5hbCBNZW1iZXIgdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICBpZiAodGFyZ2V0IGlzIEZpZWxkICYmIHRhcmdldC5pc0NvbnN0KSB7CiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgaW5pdGlhbGl6ZXIgaXMgZXZhbHVhdGVkIGZpcnN0LgogICAgICB0YXJnZXQuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dCh0YXJnZXQsIHRhcmdldC5pbml0aWFsaXplcikKICAgICAgICAgICAgLi5wYXJlbnQgPSB0YXJnZXQ7CiAgICAgIGlmIChzaG91bGRJbmxpbmUodGFyZ2V0LmluaXRpYWxpemVyKSkgewogICAgICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHRhcmdldCBpcyBQcm9jZWR1cmUgJiYgdGFyZ2V0LmtpbmQgPT0gUHJvY2VkdXJlS2luZC5NZXRob2QpIHsKICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIudmlzaXRTdGF0aWNHZXQobm9kZSk7CiAgfQoKICB2aXNpdFN3aXRjaENhc2UoU3dpdGNoQ2FzZSBub2RlKSB7CiAgICB0cmFuc2Zvcm1FeHByZXNzaW9ucyhub2RlLmV4cHJlc3Npb25zLCBub2RlKTsKICAgIHJldHVybiBzdXBlci52aXNpdFN3aXRjaENhc2Uobm9kZSk7CiAgfQoKICB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgaWYgKHZhcmlhYmxlLmlzQ29uc3QpIHsKICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dCh2YXJpYWJsZSwgdmFyaWFibGUuaW5pdGlhbGl6ZXIpCiAgICAgICAgICAgIC4ucGFyZW50ID0gdmFyaWFibGU7CiAgICAgIGlmIChzaG91bGRJbmxpbmUodmFyaWFibGUuaW5pdGlhbGl6ZXIpKSB7CiAgICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdFZhcmlhYmxlR2V0KG5vZGUpOwogIH0KCiAgdmlzaXRMaXN0TGl0ZXJhbChMaXN0TGl0ZXJhbCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0TGlzdExpdGVyYWwobm9kZSk7CiAgfQoKICB2aXNpdExpc3RDb25jYXRlbmF0aW9uKExpc3RDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogIH0KCiAgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdFNldExpdGVyYWwobm9kZSk7CiAgfQoKICB2aXNpdFNldENvbmNhdGVuYXRpb24oU2V0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICB9CgogIHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIudmlzaXRNYXBMaXRlcmFsKG5vZGUpOwogIH0KCiAgdmlzaXRNYXBDb25jYXRlbmF0aW9uKE1hcENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgfQoKICB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihub2RlKTsKICB9CgogIHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIudmlzaXRTdGF0aWNJbnZvY2F0aW9uKG5vZGUpOwogIH0KCiAgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIENvbnN0YW50IGNvbnN0YW50ID0gbm9kZS5jb25zdGFudDsKICAgIGlmIChjb25zdGFudCBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IGNvbnN0YW50LmV4cHJlc3Npb247CiAgICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KGV4cHJlc3Npb24sIGV4cHJlc3Npb24pOwogICAgfSBlbHNlIHsKICAgICAgbm9kZS5jb25zdGFudCA9IGNvbnN0YW50RXZhbHVhdG9yLmNhbm9uaWNhbGl6ZShjb25zdGFudCk7CiAgICAgIHJldHVybiBub2RlOwogICAgfQogIH0KCiAgRXhwcmVzc2lvbiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KAogICAgICBUcmVlTm9kZSB0cmVlQ29udGV4dCwgRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbWFrZUNvbnN0YW50RXhwcmVzc2lvbihldmFsdWF0ZVdpdGhDb250ZXh0KHRyZWVDb250ZXh0LCBub2RlKSwgbm9kZSk7CiAgfQoKICBDb25zdGFudCBldmFsdWF0ZVdpdGhDb250ZXh0KFRyZWVOb2RlIHRyZWVDb250ZXh0LCBFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmICh0cmVlQ29udGV4dCA9PSBub2RlKSB7CiAgICAgIHJldHVybiBjb25zdGFudEV2YWx1YXRvci5ldmFsdWF0ZShub2RlKTsKICAgIH0KCiAgICByZXR1cm4gY29uc3RhbnRFdmFsdWF0b3IucnVuSW5zaWRlQ29udGV4dCh0cmVlQ29udGV4dCwgKCkgewogICAgICByZXR1cm4gY29uc3RhbnRFdmFsdWF0b3IuZXZhbHVhdGUobm9kZSk7CiAgICB9KTsKICB9CgogIEV4cHJlc3Npb24gbWFrZUNvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudCBjb25zdGFudCwgRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAoY29uc3RhbnQgaXMgVW5ldmFsdWF0ZWRDb25zdGFudCAmJgogICAgICAgIGNvbnN0YW50LmV4cHJlc3Npb24gaXMgSW52YWxpZEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIGNvbnN0YW50LmV4cHJlc3Npb247CiAgICB9CiAgICByZXR1cm4gbmV3IENvbnN0YW50RXhwcmVzc2lvbihjb25zdGFudCwgbm9kZS5nZXRTdGF0aWNUeXBlKHR5cGVFbnZpcm9ubWVudCkpCiAgICAgIC4uZmlsZU9mZnNldCA9IG5vZGUuZmlsZU9mZnNldDsKICB9CgogIGJvb2wgc2hvdWxkSW5saW5lKEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIpIHsKICAgIGlmIChpbml0aWFsaXplciBpcyBDb25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIGJhY2tlbmQuc2hvdWxkSW5saW5lQ29uc3RhbnQoaW5pdGlhbGl6ZXIpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBDb25zdGFudEV2YWx1YXRvciBleHRlbmRzIFJlY3Vyc2l2ZVZpc2l0b3I8Q29uc3RhbnQ+IHsKICBmaW5hbCBDb25zdGFudHNCYWNrZW5kIGJhY2tlbmQ7CiAgZmluYWwgTnVtYmVyU2VtYW50aWNzIG51bWJlclNlbWFudGljczsKICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lczsKICBmaW5hbCBib29sIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OwogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CiAgZmluYWwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudDsKICBmaW5hbCBFcnJvclJlcG9ydGVyIGVycm9yUmVwb3J0ZXI7CgogIGZpbmFsIGJvb2wgZGVzdWdhclNldHM7CiAgZmluYWwgRmllbGQgdW5tb2RpZmlhYmxlU2V0TWFwOwoKICBmaW5hbCBpc0luc3RhbnRpYXRlZCA9IG5ldyBJc0luc3RhbnRpYXRlZFZpc2l0b3IoKS5pc0luc3RhbnRpYXRlZDsKCiAgZmluYWwgTWFwPENvbnN0YW50LCBDb25zdGFudD4gY2Fub25pY2FsaXphdGlvbkNhY2hlOwogIGZpbmFsIE1hcDxOb2RlLCBPYmplY3Q+IG5vZGVDYWNoZTsKICBmaW5hbCBDbG9uZVZpc2l0b3IgY2xvbmVyID0gbmV3IENsb25lVmlzaXRvcigpOwoKICBNYXA8Q2xhc3MsIGJvb2w+IHByaW1pdGl2ZUVxdWFsQ2FjaGU7CgogIGZpbmFsIE51bGxDb25zdGFudCBudWxsQ29uc3RhbnQgPSBuZXcgTnVsbENvbnN0YW50KCk7CiAgZmluYWwgQm9vbENvbnN0YW50IHRydWVDb25zdGFudCA9IG5ldyBCb29sQ29uc3RhbnQodHJ1ZSk7CiAgZmluYWwgQm9vbENvbnN0YW50IGZhbHNlQ29uc3RhbnQgPSBuZXcgQm9vbENvbnN0YW50KGZhbHNlKTsKCiAgZmluYWwgTGlzdDxUcmVlTm9kZT4gY29udGV4dENoYWluID0gW107CgogIEluc3RhbmNlQnVpbGRlciBpbnN0YW5jZUJ1aWxkZXI7CiAgRXZhbHVhdGlvbkVudmlyb25tZW50IGVudjsKICBTZXQ8RXhwcmVzc2lvbj4gcmVwbGFjZW1lbnROb2RlcyA9IG5ldyBTZXQ8RXhwcmVzc2lvbj4uaWRlbnRpdHkoKTsKICBNYXA8Q29uc3RhbnQsIENvbnN0YW50PiBsb3dlcmVkID0gbmV3IE1hcDxDb25zdGFudCwgQ29uc3RhbnQ+LmlkZW50aXR5KCk7CgogIGJvb2wgc2VlblVuZXZhbHVhdGVkQ2hpbGQ7IC8vIEFueSBjaGlsZHJlbiB0aGF0IHdlcmUgbGVmdCB1bmV2YWx1YXRlZD8KICBpbnQgbGF6eURlcHRoOyAvLyBDdXJyZW50IG5lc3RpbmcgZGVwdGggb2YgbGF6eSByZWdpb25zLgoKICBib29sIGdldCBzaG91bGRCZVVuZXZhbHVhdGVkID0+IHNlZW5VbmV2YWx1YXRlZENoaWxkIHx8IGxhenlEZXB0aCAhPSAwOwoKICBib29sIGdldCB0YXJnZXRpbmdKYXZhU2NyaXB0ID0+IG51bWJlclNlbWFudGljcyA9PSBOdW1iZXJTZW1hbnRpY3MuanM7CgogIENvbnN0YW50RXZhbHVhdG9yKHRoaXMuYmFja2VuZCwgdGhpcy5lbnZpcm9ubWVudERlZmluZXMsIHRoaXMudHlwZUVudmlyb25tZW50LAogICAgICB0aGlzLmVycm9yUmVwb3J0ZXIsCiAgICAgIHt0aGlzLmRlc3VnYXJTZXRzID0gZmFsc2UsIHRoaXMuZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQgPSBmYWxzZX0pCiAgICAgIDogbnVtYmVyU2VtYW50aWNzID0gYmFja2VuZC5udW1iZXJTZW1hbnRpY3MsCiAgICAgICAgY29yZVR5cGVzID0gdHlwZUVudmlyb25tZW50LmNvcmVUeXBlcywKICAgICAgICBjYW5vbmljYWxpemF0aW9uQ2FjaGUgPSA8Q29uc3RhbnQsIENvbnN0YW50Pnt9LAogICAgICAgIG5vZGVDYWNoZSA9IDxOb2RlLCBDb25zdGFudD57fSwKICAgICAgICBlbnYgPSBuZXcgRXZhbHVhdGlvbkVudmlyb25tZW50KCksCiAgICAgICAgdW5tb2RpZmlhYmxlU2V0TWFwID0gZGVzdWdhclNldHMKICAgICAgICAgICAgPyB0eXBlRW52aXJvbm1lbnQuY29yZVR5cGVzLmluZGV4CiAgICAgICAgICAgICAgICAuZ2V0TWVtYmVyKCdkYXJ0OmNvbGxlY3Rpb24nLCAnX1VubW9kaWZpYWJsZVNldCcsICdfbWFwJykKICAgICAgICAgICAgOiBudWxsIHsKICAgIGlmIChlbnZpcm9ubWVudERlZmluZXMgPT0gbnVsbCAmJiAhYmFja2VuZC5zdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIk5vICdlbnZpcm9ubWVudERlZmluZXMnIHBhc3NlZCB0byB0aGUgY29uc3RhbnQgZXZhbHVhdG9yIGJ1dCB0aGUgIgogICAgICAgICAgIkNvbnN0YW50c0JhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCB1bmV2YWx1YXRlZCBjb25zdGFudHMuIik7CiAgICB9CiAgICBwcmltaXRpdmVFcXVhbENhY2hlID0gPENsYXNzLCBib29sPnsKICAgICAgY29yZVR5cGVzLmJvb2xDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLmRvdWJsZUNsYXNzOiBmYWxzZSwKICAgICAgY29yZVR5cGVzLmludENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMuaW50ZXJuYWxTeW1ib2xDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLmxpc3RDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLm1hcENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMubnVsbENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMub2JqZWN0Q2xhc3M6IHRydWUsCiAgICAgIGNvcmVUeXBlcy5zZXRDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLnN0cmluZ0NsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMuc3ltYm9sQ2xhc3M6IHRydWUsCiAgICAgIGNvcmVUeXBlcy50eXBlQ2xhc3M6IHRydWUsCiAgICB9OwogIH0KCiAgVXJpIGdldEZpbGVVcmkoVHJlZU5vZGUgbm9kZSkgewogICAgd2hpbGUgKG5vZGUgIT0gbnVsbCAmJiBub2RlIGlzISBGaWxlVXJpTm9kZSkgewogICAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgICB9CiAgICByZXR1cm4gKG5vZGUgYXMgRmlsZVVyaU5vZGUpPy5maWxlVXJpOwogIH0KCiAgaW50IGdldEZpbGVPZmZzZXQoVXJpIHVyaSwgVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKHVyaSA9PSBudWxsKSByZXR1cm4gVHJlZU5vZGUubm9PZmZzZXQ7CiAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZmlsZU9mZnNldCA9PSBUcmVlTm9kZS5ub09mZnNldCkgewogICAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgICB9CiAgICByZXR1cm4gbm9kZSA9PSBudWxsID8gVHJlZU5vZGUubm9PZmZzZXQgOiBub2RlLmZpbGVPZmZzZXQ7CiAgfQoKICAvLy8gRXZhbHVhdGUgW25vZGVdIGFuZCBwb3NzaWJseSBjYWNoZSB0aGUgZXZhbHVhdGlvbiByZXN1bHQuCiAgLy8vIFJldHVybnMgVW5ldmFsdWF0ZWRDb25zdGFudCBpZiB0aGUgY29uc3RhbnQgY291bGQgbm90IGJlIGV2YWx1YXRlZC4KICAvLy8gSWYgdGhlIGV4cHJlc3Npb24gaW4gdGhlIFVuZXZhbHVhdGVkQ29uc3RhbnQgaXMgYW4gSW52YWxpZEV4cHJlc3Npb24sCiAgLy8vIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLgogIENvbnN0YW50IGV2YWx1YXRlKEV4cHJlc3Npb24gbm9kZSkgewogICAgc2VlblVuZXZhbHVhdGVkQ2hpbGQgPSBmYWxzZTsKICAgIGxhenlEZXB0aCA9IDA7CiAgICB0cnkgewogICAgICBDb25zdGFudCByZXN1bHQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUpOwogICAgICBpZiAoZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQgJiYgcmVzdWx0IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgICByZXR1cm4gcmVwb3J0KG5vZGUsIG1lc3NhZ2VDb25zdEV2YWxVbmV2YWx1YXRlZCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gb24gX0Fib3J0RHVlVG9FcnJvciBjYXRjaCAoZSkgewogICAgICBmaW5hbCBVcmkgdXJpID0gZ2V0RmlsZVVyaShlLm5vZGUpOwogICAgICBmaW5hbCBpbnQgZmlsZU9mZnNldCA9IGdldEZpbGVPZmZzZXQodXJpLCBlLm5vZGUpOwogICAgICBmaW5hbCBsb2NhdGVkTWVzc2FnZSA9IGUubWVzc2FnZS53aXRoTG9jYXRpb24odXJpLCBmaWxlT2Zmc2V0LCBub0xlbmd0aCk7CgogICAgICBmaW5hbCBjb250ZXh0TWVzc2FnZXMgPSA8TG9jYXRlZE1lc3NhZ2U+W107CiAgICAgIGlmIChlLmNvbnRleHQgIT0gbnVsbCkgY29udGV4dE1lc3NhZ2VzLmFkZEFsbChlLmNvbnRleHQpOwogICAgICBmb3IgKGZpbmFsIFRyZWVOb2RlIG5vZGUgaW4gY29udGV4dENoYWluKSB7CiAgICAgICAgZmluYWwgVXJpIHVyaSA9IGdldEZpbGVVcmkobm9kZSk7CiAgICAgICAgZmluYWwgaW50IGZpbGVPZmZzZXQgPSBnZXRGaWxlT2Zmc2V0KHVyaSwgbm9kZSk7CiAgICAgICAgY29udGV4dE1lc3NhZ2VzLmFkZCgKICAgICAgICAgICAgbWVzc2FnZUNvbnN0RXZhbENvbnRleHQud2l0aExvY2F0aW9uKHVyaSwgZmlsZU9mZnNldCwgbm9MZW5ndGgpKTsKICAgICAgfQogICAgICBlcnJvclJlcG9ydGVyLnJlcG9ydChsb2NhdGVkTWVzc2FnZSwgY29udGV4dE1lc3NhZ2VzKTsKICAgICAgcmV0dXJuIG5ldyBVbmV2YWx1YXRlZENvbnN0YW50KG5ldyBJbnZhbGlkRXhwcmVzc2lvbihlLm1lc3NhZ2UubWVzc2FnZSkpOwogICAgfSBvbiBfQWJvcnREdWVUb0ludmFsaWRFeHByZXNzaW9uIGNhdGNoIChlKSB7CiAgICAgIC8vIFRPRE8oYXNrZXNjKTogQ29weSBwb3NpdGlvbiBmcm9tIGVycm9uZW91cyBub2RlLgogICAgICAvLyBDdXJyZW50bHkgbm90IHBvc3NpYmxlLCBhcyBpdCBtaWdodCBiZSBpbiBhIGRpZmZlcmVudCBmaWxlLgogICAgICAvLyBDYW4gYmUgZG9uZSBpZiB3ZSBhZGQgYW4gZXhwbGljaXQgVVJJIHRvIEludmFsaWRFeHByZXNzaW9uLgogICAgICBJbnZhbGlkRXhwcmVzc2lvbiBpbnZhbGlkID0gbmV3IEludmFsaWRFeHByZXNzaW9uKGUubWVzc2FnZSk7CiAgICAgIGlmIChpbnZhbGlkLmZpbGVPZmZzZXQgPT0gVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgICAgICBpbnZhbGlkLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQ7CiAgICAgIH0KICAgICAgZXJyb3JSZXBvcnRlci5yZXBvcnRJbnZhbGlkRXhwcmVzc2lvbihpbnZhbGlkKTsKICAgICAgcmV0dXJuIG5ldyBVbmV2YWx1YXRlZENvbnN0YW50KGludmFsaWQpOwogICAgfQogIH0KCiAgLy8vIFJlcG9ydCBhbiBlcnJvciB0aGF0IGhhcyBiZWVuIGRldGVjdGVkIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLgogIE51bGwgcmVwb3J0KFRyZWVOb2RlIG5vZGUsIE1lc3NhZ2UgbWVzc2FnZSwge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICB0aHJvdyBuZXcgX0Fib3J0RHVlVG9FcnJvcihub2RlLCBtZXNzYWdlLCBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIC8vLyBSZXBvcnQgYSBjb25zdHJ1Y3QgdGhhdCBzaG91bGQgbm90IG9jY3VyIGluc2lkZSBhIHBvdGVudGlhbGx5IGNvbnN0YW50CiAgLy8vIGV4cHJlc3Npb24uIEl0IGlzIGFzc3VtZWQgdGhhdCBhbiBlcnJvciBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLgogIE51bGwgcmVwb3J0SW52YWxpZChUcmVlTm9kZSBub2RlLCBTdHJpbmcgbWVzc2FnZSkgewogICAgdGhyb3cgbmV3IF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24obm9kZSwgbWVzc2FnZSk7CiAgfQoKICAvLy8gUHJvZHVjZSBhbiB1bmV2YWx1YXRlZCBjb25zdGFudCBub2RlIGZvciBhbiBleHByZXNzaW9uLgogIENvbnN0YW50IHVuZXZhbHVhdGVkKEV4cHJlc3Npb24gb3JpZ2luYWwsIEV4cHJlc3Npb24gcmVwbGFjZW1lbnQpIHsKICAgIHJlcGxhY2VtZW50LmZpbGVPZmZzZXQgPSBvcmlnaW5hbC5maWxlT2Zmc2V0OwogICAgLy8gVE9ETyhhc2tlc2Msam9obm5pd2ludGhlcik6IFByZXNlcnZlIGZpbGVVcmkgb24gW3JlcGxhY2VtZW50XS4KICAgIHJldHVybiBuZXcgVW5ldmFsdWF0ZWRDb25zdGFudChyZXBsYWNlbWVudCk7CiAgfQoKICAvLy8gRXh0cmFjdCBhbiBleHByZXNzaW9uIGZyb20gYSAocG9zc2libHkgdW5ldmFsdWF0ZWQpIGNvbnN0YW50IHRvIGJlY29tZQogIC8vLyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uIHRyZWUgb2YgYW5vdGhlciB1bmV2YWx1YXRlZCBjb25zdGFudC4KICAvLy8gTWFrZXMgc3VyZSBhIHBhcnRpY3VsYXIgZXhwcmVzc2lvbiBvY2N1cnMgb25seSBvbmNlIGluIHRoZSB0cmVlIGJ5CiAgLy8vIGNsb25pbmcgZnVydGhlciBpbnN0YW5jZXMuCiAgRXhwcmVzc2lvbiBleHRyYWN0KENvbnN0YW50IGNvbnN0YW50KSB7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBjb25zdGFudC5hc0V4cHJlc3Npb24oKTsKICAgIGlmICghcmVwbGFjZW1lbnROb2Rlcy5hZGQoZXhwcmVzc2lvbikpIHsKICAgICAgZXhwcmVzc2lvbiA9IGNsb25lci5jbG9uZShleHByZXNzaW9uKTsKICAgICAgcmVwbGFjZW1lbnROb2Rlcy5hZGQoZXhwcmVzc2lvbik7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIC8vLyBFbnRlciBhIHJlZ2lvbiBvZiBsYXp5IGV2YWx1YXRpb24uIEFsbCBsZWFmIG5vZGVzIGFyZSBldmFsdWF0ZWQgbm9ybWFsbHkKICAvLy8gKHRvIGVuc3VyZSBpbmxpbmluZyBvZiByZWZlcmVuY2VkIGxvY2FsIHZhcmlhYmxlcyksIGJ1dCBjb21wb3NpdGUgbm9kZXMKICAvLy8gYWx3YXlzIHRyZWF0IHRoZWlyIGNoaWxkcmVuIGFzIHVuZXZhbHVhdGVkLCByZXN1bHRpbmcgaW4gYSBwYXJ0aWFsbHkKICAvLy8gZXZhbHVhdGVkIGNsb25lIG9mIHRoZSBvcmlnaW5hbCBleHByZXNzaW9uIHRyZWUuCiAgLy8vIExhenkgZXZhbHVhdGlvbiBpcyB1c2VkIGZvciB0aGUgc3VidHJlZXMgb2YgbGF6eSBvcGVyYXRpb25zIHdpdGgKICAvLy8gdW5ldmFsdWF0ZWQgY29uZGl0aW9ucyB0byBlbnN1cmUgbm8gZXJyb3JzIGFyZSByZXBvcnRlZCBmb3IgcHJvYmxlbXMKICAvLy8gaW4gdGhlIHN1YnRyZWUgYXMgbG9uZyBhcyB0aGUgc3VidHJlZSBpcyBwb3RlbnRpYWxseSBjb25zdGFudC4KICB2b2lkIGVudGVyTGF6eSgpID0+IGxhenlEZXB0aCsrOwoKICAvLy8gTGVhdmUgYSAocG9zc2libHkgbmVzdGVkKSByZWdpb24gb2YgbGF6eSBldmFsdWF0aW9uLgogIHZvaWQgbGVhdmVMYXp5KCkgPT4gbGF6eURlcHRoLS07CgogIENvbnN0YW50IGxvd2VyKENvbnN0YW50IG9yaWdpbmFsLCBDb25zdGFudCByZXBsYWNlbWVudCkgewogICAgaWYgKCFpZGVudGljYWwob3JpZ2luYWwsIHJlcGxhY2VtZW50KSkgewogICAgICBvcmlnaW5hbCA9IGNhbm9uaWNhbGl6ZShvcmlnaW5hbCk7CiAgICAgIHJlcGxhY2VtZW50ID0gY2Fub25pY2FsaXplKHJlcGxhY2VtZW50KTsKICAgICAgbG93ZXJlZFtyZXBsYWNlbWVudF0gPSBvcmlnaW5hbDsKICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgfQogICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShyZXBsYWNlbWVudCk7CiAgfQoKICBDb25zdGFudCB1bmxvd2VyKENvbnN0YW50IGNvbnN0YW50KSB7CiAgICByZXR1cm4gbG93ZXJlZFtjb25zdGFudF0gPz8gY29uc3RhbnQ7CiAgfQoKICBDb25zdGFudCBsb3dlckxpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgY29uc3RhbnQpIHsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSByZXR1cm4gY29uc3RhbnQ7CiAgICByZXR1cm4gbG93ZXIoY29uc3RhbnQsIGJhY2tlbmQubG93ZXJMaXN0Q29uc3RhbnQoY29uc3RhbnQpKTsKICB9CgogIENvbnN0YW50IGxvd2VyU2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgY29uc3RhbnQpIHsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSByZXR1cm4gY29uc3RhbnQ7CiAgICByZXR1cm4gbG93ZXIoY29uc3RhbnQsIGJhY2tlbmQubG93ZXJTZXRDb25zdGFudChjb25zdGFudCkpOwogIH0KCiAgQ29uc3RhbnQgbG93ZXJNYXBDb25zdGFudChNYXBDb25zdGFudCBjb25zdGFudCkgewogICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHJldHVybiBjb25zdGFudDsKICAgIHJldHVybiBsb3dlcihjb25zdGFudCwgYmFja2VuZC5sb3dlck1hcENvbnN0YW50KGNvbnN0YW50KSk7CiAgfQoKICAvLy8gRXZhbHVhdGUgW25vZGVdIGFuZCBwb3NzaWJseSBjYWNoZSB0aGUgZXZhbHVhdGlvbiByZXN1bHQuCiAgLy8vIEB0aHJvd3MgX0Fib3J0RHVlVG9FcnJvciBvciBfQWJvcnREdWVUb0ludmFsaWRFeHByZXNzaW9uIGlmIGV4cHJlc3Npb24KICAvLy8gY2FuJ3QgYmUgZXZhbHVhdGVkLgogIENvbnN0YW50IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBib29sIHdhc1VuZXZhbHVhdGVkID0gc2VlblVuZXZhbHVhdGVkQ2hpbGQ7CiAgICBzZWVuVW5ldmFsdWF0ZWRDaGlsZCA9IGZhbHNlOwogICAgQ29uc3RhbnQgcmVzdWx0OwogICAgaWYgKGVudi5pc0VtcHR5KSB7CiAgICAgIC8vIFdlIG9ubHkgdHJ5IHRvIGV2YWx1YXRlIHRoZSBzYW1lIFtub2RlXSAqb25jZSogd2l0aGluIGFuIGVtcHR5CiAgICAgIC8vIGVudmlyb25tZW50LgogICAgICBpZiAobm9kZUNhY2hlLmNvbnRhaW5zS2V5KG5vZGUpKSB7CiAgICAgICAgcmVzdWx0ID0gbm9kZUNhY2hlW25vZGVdID8/IHJlcG9ydChub2RlLCBtZXNzYWdlQ29uc3RFdmFsQ2lyY3VsYXJpdHkpOwogICAgICB9IGVsc2UgewogICAgICAgIG5vZGVDYWNoZVtub2RlXSA9IG51bGw7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3VsdCA9IG5vZGVDYWNoZVtub2RlXSA9IG5vZGUuYWNjZXB0KHRoaXMpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIG5vZGVDYWNoZS5yZW1vdmUobm9kZSk7CiAgICAgICAgICByZXRocm93OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gbm9kZS5hY2NlcHQodGhpcyk7CiAgICB9CiAgICBzZWVuVW5ldmFsdWF0ZWRDaGlsZCA9IHdhc1VuZXZhbHVhdGVkIHx8IHJlc3VsdCBpcyBVbmV2YWx1YXRlZENvbnN0YW50OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIENvbnN0YW50IF9ldmFsdWF0ZU51bGxhYmxlU3ViZXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiBudWxsQ29uc3RhbnQ7CiAgICByZXR1cm4gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlKTsKICB9CgogIENvbnN0YW50IHJ1bkluc2lkZUNvbnRleHQoVHJlZU5vZGUgbm9kZSwgQ29uc3RhbnQgZnVuKCkpIHsKICAgIHRyeSB7CiAgICAgIHB1c2hDb250ZXh0KG5vZGUpOwogICAgICByZXR1cm4gZnVuKCk7CiAgICB9IGZpbmFsbHkgewogICAgICBwb3BDb250ZXh0KG5vZGUpOwogICAgfQogIH0KCiAgQ29uc3RhbnQgcnVuSW5zaWRlQ29udGV4dElmTm9Db250ZXh0KFRyZWVOb2RlIG5vZGUsIENvbnN0YW50IGZ1bigpKSB7CiAgICBpZiAoY29udGV4dENoYWluLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIHJ1bkluc2lkZUNvbnRleHQobm9kZSwgZnVuKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmdW4oKTsKICAgIH0KICB9CgogIHB1c2hDb250ZXh0KFRyZWVOb2RlIGNvbnRleHROb2RlKSB7CiAgICBjb250ZXh0Q2hhaW4uYWRkKGNvbnRleHROb2RlKTsKICB9CgogIHBvcENvbnRleHQoVHJlZU5vZGUgY29udGV4dE5vZGUpIHsKICAgIGFzc2VydChjb250ZXh0Q2hhaW4ubGFzdCA9PSBjb250ZXh0Tm9kZSk7CiAgICBjb250ZXh0Q2hhaW4ubGVuZ3RoID0gY29udGV4dENoYWluLmxlbmd0aCAtIDE7CiAgfQoKICBkZWZhdWx0VHJlZU5vZGUoTm9kZSBub2RlKSB7CiAgICAvLyBPbmx5IGEgc3Vic2V0IG9mIHRoZSBleHByZXNzaW9uIGxhbmd1YWdlIGlzIHZhbGlkIGZvciBjb25zdGFudAogICAgLy8gZXZhbHVhdGlvbi4KICAgIHJldHVybiByZXBvcnRJbnZhbGlkKAogICAgICAgIG5vZGUsICdDb25zdGFudCBldmFsdWF0aW9uIGhhcyBubyBzdXBwb3J0IGZvciAke25vZGUucnVudGltZVR5cGV9IScpOwogIH0KCiAgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlKSA9PiBudWxsQ29uc3RhbnQ7CgogIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQobm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdEludExpdGVyYWwoSW50TGl0ZXJhbCBub2RlKSB7CiAgICAvLyBUaGUgZnJvbnRlbmQgZW5zdXJlcyB0aGF0IGludGVnZXIgbGl0ZXJhbHMgYXJlIHZhbGlkIGFjY29yZGluZyB0byB0aGUKICAgIC8vIHRhcmdldCByZXByZXNlbnRhdGlvbi4KICAgIHJldHVybiB0YXJnZXRpbmdKYXZhU2NyaXB0CiAgICAgICAgPyBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudC5mcm9tVUludDY0KG5vZGUudmFsdWUpKQogICAgICAgIDogY2Fub25pY2FsaXplKG5ldyBJbnRDb25zdGFudChub2RlLnZhbHVlKSk7CiAgfQoKICB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY2Fub25pY2FsaXplKG1ha2VEb3VibGVDb25zdGFudChub2RlLnZhbHVlKSk7CiAgfQoKICB2aXNpdFN0cmluZ0xpdGVyYWwoU3RyaW5nTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBTdHJpbmdDb25zdGFudChub2RlLnZhbHVlKSk7CiAgfQoKICB2aXNpdFR5cGVMaXRlcmFsKFR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIGZpbmFsIERhcnRUeXBlIHR5cGUgPSBldmFsdWF0ZURhcnRUeXBlKG5vZGUsIG5vZGUudHlwZSk7CiAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBUeXBlTGl0ZXJhbENvbnN0YW50KHR5cGUpKTsKICB9CgogIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKENvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICBDb25zdGFudCBjb25zdGFudCA9IG5vZGUuY29uc3RhbnQ7CiAgICBDb25zdGFudCByZXN1bHQgPSBjb25zdGFudDsKICAgIGlmIChjb25zdGFudCBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgIHJlc3VsdCA9IHJ1bkluc2lkZUNvbnRleHQoY29uc3RhbnQuZXhwcmVzc2lvbiwgKCkgewogICAgICAgIHJldHVybiBfZXZhbHVhdGVTdWJleHByZXNzaW9uKGNvbnN0YW50LmV4cHJlc3Npb24pOwogICAgICB9KTsKICAgIH0gZWxzZSBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICBpZiAoY29uc3RhbnQgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgICBkb3VibGUgdmFsdWUgPSBjb25zdGFudC52YWx1ZTsKICAgICAgICAvLyBUT0RPKGFza2VzYywgZmlzaHl0aGVmaXNoKTogSGFuZGxlIGluZmluaXRlIGludGVnZXJzLgogICAgICAgIGlmICh2YWx1ZS5pc0Zpbml0ZSAmJiB2YWx1ZS50cnVuY2F0ZVRvRG91YmxlKCkgPT0gdmFsdWUpIHsKICAgICAgICAgIHJlc3VsdCA9IG5ldyBKYXZhU2NyaXB0SW50Q29uc3RhbnQuZnJvbURvdWJsZSh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBJZiB0aGVyZSB3ZXJlIGFscmVhZHkgY29uc3RhbnRzIGluIHRoZSBBU1QgdGhlbiB3ZSBtYWtlIHN1cmUgd2UKICAgIC8vIHJlLWNhbm9uaWNhbGl6ZSB0aGVtLiAgQWZ0ZXIgcnVubmluZyB0aGUgdHJhbnNmb3JtZXIgd2Ugd2lsbCB0aGVyZWZvcmUKICAgIC8vIGhhdmUgYSBmdWxseS1jYW5vbmljYWxpemVkIGNvbnN0YW50IERBRyB3aXRoIHJvb3RzIGNvbWluZyBmcm9tIHRoZQogICAgLy8gW0NvbnN0YW50RXhwcmVzc2lvbl0gbm9kZXMgaW4gdGhlIEFTVC4KICAgIHJldHVybiBjYW5vbmljYWxpemUocmVzdWx0KTsKICB9CgogIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgewogICAgaWYgKCFub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsLndpdGhBcmd1bWVudHMoJ0xpc3QnKSk7CiAgICB9CiAgICBmaW5hbCBMaXN0Q29uc3RhbnRCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIG5ldyBMaXN0Q29uc3RhbnRCdWlsZGVyKG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCB0aGlzKTsKICAgIGZvciAoRXhwcmVzc2lvbiBlbGVtZW50IGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgYnVpbGRlci5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgdmlzaXRMaXN0Q29uY2F0ZW5hdGlvbihMaXN0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBmaW5hbCBMaXN0Q29uc3RhbnRCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIG5ldyBMaXN0Q29uc3RhbnRCdWlsZGVyKG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCB0aGlzKTsKICAgIGZvciAoRXhwcmVzc2lvbiBsaXN0IGluIG5vZGUubGlzdHMpIHsKICAgICAgYnVpbGRlci5hZGRTcHJlYWQobGlzdCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKCFub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsLndpdGhBcmd1bWVudHMoJ1NldCcpKTsKICAgIH0KICAgIGZpbmFsIFNldENvbnN0YW50QnVpbGRlciBidWlsZGVyID0KICAgICAgICBuZXcgU2V0Q29uc3RhbnRCdWlsZGVyKG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCB0aGlzKTsKICAgIGZvciAoRXhwcmVzc2lvbiBlbGVtZW50IGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgYnVpbGRlci5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgdmlzaXRTZXRDb25jYXRlbmF0aW9uKFNldENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgZmluYWwgU2V0Q29uc3RhbnRCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIG5ldyBTZXRDb25zdGFudEJ1aWxkZXIobm9kZSwgbm9kZS50eXBlQXJndW1lbnQsIHRoaXMpOwogICAgZm9yIChFeHByZXNzaW9uIHNldF8gaW4gbm9kZS5zZXRzKSB7CiAgICAgIGJ1aWxkZXIuYWRkU3ByZWFkKHNldF8pOwogICAgfQogICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKICB9CgogIHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUpIHsKICAgIGlmICghbm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICBub2RlLCB0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbC53aXRoQXJndW1lbnRzKCdNYXAnKSk7CiAgICB9CiAgICBmaW5hbCBNYXBDb25zdGFudEJ1aWxkZXIgYnVpbGRlciA9CiAgICAgICAgbmV3IE1hcENvbnN0YW50QnVpbGRlcihub2RlLCBub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlLCB0aGlzKTsKICAgIGZvciAoTWFwRW50cnkgZWxlbWVudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgYnVpbGRlci5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgdmlzaXRNYXBDb25jYXRlbmF0aW9uKE1hcENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgZmluYWwgTWFwQ29uc3RhbnRCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIG5ldyBNYXBDb25zdGFudEJ1aWxkZXIobm9kZSwgbm9kZS5rZXlUeXBlLCBub2RlLnZhbHVlVHlwZSwgdGhpcyk7CiAgICBmb3IgKEV4cHJlc3Npb24gbWFwIGluIG5vZGUubWFwcykgewogICAgICBidWlsZGVyLmFkZFNwcmVhZChtYXApOwogICAgfQogICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKICB9CgogIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gcmVwb3J0KAogICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsLndpdGhBcmd1bWVudHMoJ0Z1bmN0aW9uJykpOwogIH0KCiAgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gbm9kZS50YXJnZXQ7CiAgICBmaW5hbCBDbGFzcyBrbGFzcyA9IGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzOwogICAgYm9vbCBpc1N5bWJvbCA9IGtsYXNzID09IGNvcmVUeXBlcy5pbnRlcm5hbFN5bWJvbENsYXNzOwogICAgaWYgKCFjb25zdHJ1Y3Rvci5pc0NvbnN0KSB7CiAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKG5vZGUsICdOb24tY29uc3QgY29uc3RydWN0b3IgaW52b2NhdGlvbi4nKTsKICAgIH0KICAgIGlmIChjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5ICE9IG51bGwgJiYKICAgICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5IGlzISBFbXB0eVN0YXRlbWVudCkgewogICAgICByZXR1cm4gcmVwb3J0SW52YWxpZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAnQ29uc3RydWN0b3IgIiRub2RlIiBoYXMgbm9uLXRyaXZpYWwgYm9keSAnCiAgICAgICAgICAnIiR7Y29uc3RydWN0b3IuZnVuY3Rpb24uYm9keS5ydW50aW1lVHlwZX0iLicpOwogICAgfQogICAgaWYgKGtsYXNzLmlzQWJzdHJhY3QpIHsKICAgICAgcmV0dXJuIHJlcG9ydEludmFsaWQoCiAgICAgICAgICBub2RlLCAnQ29uc3RydWN0b3IgIiRub2RlIiBiZWxvbmdzIHRvIGFic3RyYWN0IGNsYXNzICIke2tsYXNzfSIuJyk7CiAgICB9CgogICAgZmluYWwgcG9zaXRpb25hbHMgPSBldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgZmluYWwgbmFtZWQgPSBldmFsdWF0ZU5hbWVkQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKCiAgICBpZiAoaXNTeW1ib2wgJiYgc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQoCiAgICAgICAgICBub2RlLAogICAgICAgICAgbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbihjb25zdHJ1Y3RvciwKICAgICAgICAgICAgICB1bmV2YWx1YXRlZEFyZ3VtZW50cyhwb3NpdGlvbmFscywgbmFtZWQsIG5vZGUuYXJndW1lbnRzLnR5cGVzKSwKICAgICAgICAgICAgICBpc0NvbnN0OiB0cnVlKSk7CiAgICB9CgogICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBkYXJ0OmNvcmUncyBTeW1ib2wgY2xhc3MgaGVyZSBhbmQgY29udmVydCBpdCB0byBhCiAgICAvLyBbU3ltYm9sQ29uc3RhbnRdLiAgRm9yIGludmFsaWQgdmFsdWVzIHdlIHJlcG9ydCBhIGNvbXBpbGUtdGltZSBlcnJvci4KICAgIGlmIChpc1N5bWJvbCkgewogICAgICBmaW5hbCBDb25zdGFudCBuYW1lVmFsdWUgPSBwb3NpdGlvbmFscy5zaW5nbGU7CgogICAgICBpZiAobmFtZVZhbHVlIGlzIFN0cmluZ0NvbnN0YW50ICYmIGlzVmFsaWRTeW1ib2xOYW1lKG5hbWVWYWx1ZS52YWx1ZSkpIHsKICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBTeW1ib2xDb25zdGFudChuYW1lVmFsdWUudmFsdWUsIG51bGwpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVwb3J0KG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QsCiAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lLndpdGhBcmd1bWVudHMobmFtZVZhbHVlKSk7CiAgICB9CgogICAgZmluYWwgdHlwZUFyZ3VtZW50cyA9IGV2YWx1YXRlVHlwZUFyZ3VtZW50cyhub2RlLCBub2RlLmFyZ3VtZW50cyk7CgogICAgLy8gRmlsbCBpbiBhbnkgbWlzc2luZyB0eXBlIGFyZ3VtZW50cyB3aXRoICJkeW5hbWljIi4KICAgIGZvciAoaW50IGkgPSB0eXBlQXJndW1lbnRzLmxlbmd0aDsgaSA8IGtsYXNzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHR5cGVBcmd1bWVudHMuYWRkKGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgfQoKICAgIC8vIFN0YXJ0IGJ1aWxkaW5nIGEgbmV3IGluc3RhbmNlLgogICAgcmV0dXJuIHdpdGhOZXdJbnN0YW5jZUJ1aWxkZXIoa2xhc3MsIHR5cGVBcmd1bWVudHMsICgpIHsKICAgICAgcmV0dXJuIHJ1bkluc2lkZUNvbnRleHRJZk5vQ29udGV4dChub2RlLCAoKSB7CiAgICAgICAgLy8gIlJ1biIgdGhlIGNvbnN0cnVjdG9yIChhbmQgYW55IHN1cGVyIGNvbnN0cnVjdG9yIGNhbGxzKSwgd2hpY2ggd2lsbAogICAgICAgIC8vIGluaXRpYWxpemUgdGhlIGZpZWxkcyBvZiB0aGUgbmV3IGluc3RhbmNlLgogICAgICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgICAgICBlbnRlckxhenkoKTsKICAgICAgICAgIGhhbmRsZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgICBjb25zdHJ1Y3RvciwgdHlwZUFyZ3VtZW50cywgcG9zaXRpb25hbHMsIG5hbWVkKTsKICAgICAgICAgIGxlYXZlTGF6eSgpOwogICAgICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKG5vZGUsIGluc3RhbmNlQnVpbGRlci5idWlsZFVuZXZhbHVhdGVkSW5zdGFuY2UoKSk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgY29uc3RydWN0b3IsIHR5cGVBcmd1bWVudHMsIHBvc2l0aW9uYWxzLCBuYW1lZCk7CiAgICAgICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgICAgIHJldHVybiB1bmV2YWx1YXRlZChub2RlLCBpbnN0YW5jZUJ1aWxkZXIuYnVpbGRVbmV2YWx1YXRlZEluc3RhbmNlKCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKGluc3RhbmNlQnVpbGRlci5idWlsZEluc3RhbmNlKCkpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgdmlzaXRJbnN0YW5jZUNyZWF0aW9uKEluc3RhbmNlQ3JlYXRpb24gbm9kZSkgewogICAgcmV0dXJuIHdpdGhOZXdJbnN0YW5jZUJ1aWxkZXIobm9kZS5jbGFzc05vZGUsIG5vZGUudHlwZUFyZ3VtZW50cywgKCkgewogICAgICBmb3IgKEFzc2VydFN0YXRlbWVudCBzdGF0ZW1lbnQgaW4gbm9kZS5hc3NlcnRzKSB7CiAgICAgICAgY2hlY2tBc3NlcnQoc3RhdGVtZW50KTsKICAgICAgfQogICAgICBub2RlLmZpZWxkVmFsdWVzLmZvckVhY2goKFJlZmVyZW5jZSBmaWVsZFJlZiwgRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICAgIGluc3RhbmNlQnVpbGRlci5zZXRGaWVsZFZhbHVlKAogICAgICAgICAgICBmaWVsZFJlZi5hc0ZpZWxkLCBfZXZhbHVhdGVTdWJleHByZXNzaW9uKHZhbHVlKSk7CiAgICAgIH0pOwogICAgICBub2RlLnVudXNlZEFyZ3VtZW50cy5mb3JFYWNoKChFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgICAgQ29uc3RhbnQgY29uc3RhbnQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKHZhbHVlKTsKICAgICAgICBpZiAoY29uc3RhbnQgaXMgVW5ldmFsdWF0ZWRDb25zdGFudCkgewogICAgICAgICAgaW5zdGFuY2VCdWlsZGVyLnVudXNlZEFyZ3VtZW50cy5hZGQoZXh0cmFjdChjb25zdGFudCkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKG5vZGUsIGluc3RhbmNlQnVpbGRlci5idWlsZFVuZXZhbHVhdGVkSW5zdGFuY2UoKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShpbnN0YW5jZUJ1aWxkZXIuYnVpbGRJbnN0YW5jZSgpKTsKICAgIH0pOwogIH0KCiAgYm9vbCBpc1ZhbGlkU3ltYm9sTmFtZShTdHJpbmcgbmFtZSkgewogICAgLy8gU2VlIGh0dHBzOi8vYXBpLmRhcnRsYW5nLm9yZy9zdGFibGUvMi4wLjAvZGFydC1jb3JlL1N5bWJvbC9TeW1ib2wuaHRtbDoKICAgIC8vCiAgICAvLyAgQSBxdWFsaWZpZWQgbmFtZSBpcyBhIHZhbGlkIG5hbWUgcHJlY2VkZWQgYnkgYSBwdWJsaWMgaWRlbnRpZmllciBuYW1lCiAgICAvLyAgYW5kIGEgJy4nLCBlLmcuLCBmb28uYmFyLmJhej0gaXMgYSBxdWFsaWZpZWQgdmVyc2lvbiBvZiBiYXo9LgogICAgLy8KICAgIC8vICBUaGF0IG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgb2YgdGhlIG5hbWUgU3RyaW5nIG11c3QgYmUgZWl0aGVyCiAgICAvLyAgICAgLSBhIHZhbGlkIHB1YmxpYyBEYXJ0IGlkZW50aWZpZXIgKHRoYXQgaXMsIGFuIGlkZW50aWZpZXIgbm90CiAgICAvLyAgICAgICBzdGFydGluZyB3aXRoICJfIiksCiAgICAvLyAgICAgLSBzdWNoIGFuIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgIj0iIChhIHNldHRlciBuYW1lKSwKICAgIC8vICAgICAtIHRoZSBuYW1lIG9mIGEgZGVjbGFyYWJsZSBvcGVyYXRvciwKICAgIC8vICAgICAtIGFueSBvZiB0aGUgYWJvdmUgcHJlY2VkZWQgYnkgYW55IG51bWJlciBvZiBxdWFsaWZpZXJzLCB3aGVyZSBhCiAgICAvLyAgICAgICBxdWFsaWZpZXIgaXMgYSBub24tcHJpdmF0ZSBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5ICcuJywKICAgIC8vICAgICAtIG9yIHRoZSBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0IG5hbWUgb2YgYSBsaWJyYXJ5IHdpdGggbm8gbGlicmFyeQogICAgLy8gICAgICAgbmFtZSBkZWNsYXJhdGlvbikuCgogICAgY29uc3Qgb3BlcmF0b3JOYW1lcyA9IGNvbnN0IDxTdHJpbmc+WwogICAgICAnKycsCiAgICAgICctJywKICAgICAgJyonLAogICAgICAnLycsCiAgICAgICclJywKICAgICAgJ34vJywKICAgICAgJyYnLAogICAgICAnfCcsCiAgICAgICdeJywKICAgICAgJ34nLAogICAgICAnPDwnLAogICAgICAnPj4nLAogICAgICAnPCcsCiAgICAgICc8PScsCiAgICAgICc+JywKICAgICAgJz49JywKICAgICAgJz09JywKICAgICAgJ1tdJywKICAgICAgJ1tdPScsCiAgICAgICd1bmFyeS0nCiAgICBdOwoKICAgIGlmIChuYW1lID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChuYW1lID09ICcnKSByZXR1cm4gdHJ1ZTsKCiAgICBmaW5hbCBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTsKCiAgICAvLyBFYWNoIHF1YWxpZmllciBtdXN0IGJlIGEgcHVibGljIGlkZW50aWZpZXIuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7ICsraSkgewogICAgICBpZiAoIWlzVmFsaWRQdWJsaWNJZGVudGlmaWVyKHBhcnRzW2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIFN0cmluZyBsYXN0ID0gcGFydHMubGFzdDsKICAgIGlmIChvcGVyYXRvck5hbWVzLmNvbnRhaW5zKGxhc3QpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGxhc3QuZW5kc1dpdGgoJz0nKSkgewogICAgICBsYXN0ID0gbGFzdC5zdWJzdHJpbmcoMCwgbGFzdC5sZW5ndGggLSAxKTsKICAgIH0KICAgIGlmICghaXNWYWxpZFB1YmxpY0lkZW50aWZpZXIobGFzdCkpIHJldHVybiBmYWxzZTsKCiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBGcm9tIHRoZSBEYXJ0IExhbmd1YWdlIHNwZWNpZmljYXRpb246CiAgLy8vCiAgLy8vICAgSURFTlRJRklFUjoKICAvLy8gICAgIElERU5USUZJRVJfU1RBUlQgSURFTlRJRklFUl9QQVJUKgogIC8vLwogIC8vLyAgIElERU5USUZJRVJfU1RBUlQ6CiAgLy8vICAgICAgIElERU5USUZJRVJfU1RBUlRfTk9fRE9MTEFSIHwg4oCYJOKAmQogIC8vLwogIC8vLyAgIElERU5USUZJRVJfUEFSVDoKICAvLy8gICAgICAgSURFTlRJRklFUl9TVEFSVCB8IERJR0lUCiAgLy8vCiAgLy8vICAgSURFTlRJRklFUl9OT19ET0xMQVI6CiAgLy8vICAgICBJREVOVElGSUVSX1NUQVJUX05PX0RPTExBUiBJREVOVElGSUVSX1BBUlRfTk9fRE9MTEFSKgogIC8vLwogIC8vLyAgIElERU5USUZJRVJfU1RBUlRfTk9fRE9MTEFSOgogIC8vLyAgICAgICBMRVRURVIgfCAnXycKICAvLy8KICAvLy8gICBJREVOVElGSUVSX1BBUlRfTk9fRE9MTEFSOgogIC8vLyAgICAgICBJREVOVElGSUVSX1NUQVJUX05PX0RPTExBUiB8IERJR0lUCiAgLy8vCiAgc3RhdGljIGZpbmFsIHB1YmxpY0lkZW50aWZpZXJSZWdFeHAgPQogICAgICBuZXcgUmVnRXhwKHInXlthLXpBLVokXVthLXpBLVowLTlfJF0qJCcpOwoKICBzdGF0aWMgY29uc3Qgbm9uVXNhYmxlS2V5d29yZHMgPSBjb25zdCA8U3RyaW5nPlsKICAgICdhc3NlcnQnLAogICAgJ2JyZWFrJywKICAgICdjYXNlJywKICAgICdjYXRjaCcsCiAgICAnY2xhc3MnLAogICAgJ2NvbnN0JywKICAgICdjb250aW51ZScsCiAgICAnZGVmYXVsdCcsCiAgICAnZG8nLAogICAgJ2Vsc2UnLAogICAgJ2VudW0nLAogICAgJ2V4dGVuZHMnLAogICAgJ2ZhbHNlJywKICAgICdmaW5hbCcsCiAgICAnZmluYWxseScsCiAgICAnZm9yJywKICAgICdpZicsCiAgICAnaW4nLAogICAgJ2lzJywKICAgICduZXcnLAogICAgJ251bGwnLAogICAgJ3JldGhyb3cnLAogICAgJ3JldHVybicsCiAgICAnc3VwZXInLAogICAgJ3N3aXRjaCcsCiAgICAndGhpcycsCiAgICAndGhyb3cnLAogICAgJ3RydWUnLAogICAgJ3RyeScsCiAgICAndmFyJywKICAgICd3aGlsZScsCiAgICAnd2l0aCcsCiAgXTsKCiAgYm9vbCBpc1ZhbGlkUHVibGljSWRlbnRpZmllcihTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIHB1YmxpY0lkZW50aWZpZXJSZWdFeHAuaGFzTWF0Y2gobmFtZSkgJiYKICAgICAgICAhbm9uVXNhYmxlS2V5d29yZHMuY29udGFpbnMobmFtZSk7CiAgfQoKICBoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBMaXN0PENvbnN0YW50PiBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBNYXA8U3RyaW5nLCBDb25zdGFudD4gbmFtZWRBcmd1bWVudHMpIHsKICAgIHJldHVybiBydW5JbnNpZGVDb250ZXh0KGNvbnN0cnVjdG9yLCAoKSB7CiAgICAgIHJldHVybiB3aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICAgIGZpbmFsIENsYXNzIGtsYXNzID0gY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgZmluYWwgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gY29uc3RydWN0b3IuZnVuY3Rpb247CgogICAgICAgIC8vIFdlIHNpbXVsYXRlIG5vdyB0aGUgY29uc3RydWN0b3IgaW52b2NhdGlvbi4KCiAgICAgICAgLy8gU3RlcCAxKSBNYXAgdHlwZSBhcmd1bWVudHMgYW5kIG5vcm1hbCBhcmd1bWVudHMgZnJvbSBjYWxsZXIgdG8KICAgICAgICAvLyAgICAgICAgIGNhbGxlZS4KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtsYXNzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBlbnYuYWRkVHlwZVBhcmFtZXRlclZhbHVlKGtsYXNzLnR5cGVQYXJhbWV0ZXJzW2ldLCB0eXBlQXJndW1lbnRzW2ldKTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPQogICAgICAgICAgICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAgICAgZmluYWwgQ29uc3RhbnQgdmFsdWUgPSAoaSA8IHBvc2l0aW9uYWxBcmd1bWVudHMubGVuZ3RoKQogICAgICAgICAgICAgID8gcG9zaXRpb25hbEFyZ3VtZW50c1tpXQogICAgICAgICAgICAgIDogX2V2YWx1YXRlTnVsbGFibGVTdWJleHByZXNzaW9uKHBhcmFtZXRlci5pbml0aWFsaXplcik7CiAgICAgICAgICBlbnYuYWRkVmFyaWFibGVWYWx1ZShwYXJhbWV0ZXIsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZm9yIChmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciBpbiBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICAgIGZpbmFsIENvbnN0YW50IHZhbHVlID0gbmFtZWRBcmd1bWVudHNbcGFyYW1ldGVyLm5hbWVdID8/CiAgICAgICAgICAgICAgX2V2YWx1YXRlTnVsbGFibGVTdWJleHByZXNzaW9uKHBhcmFtZXRlci5pbml0aWFsaXplcik7CiAgICAgICAgICBlbnYuYWRkVmFyaWFibGVWYWx1ZShwYXJhbWV0ZXIsIHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIC8vIFN0ZXAgMikgUnVuIGFsbCBpbml0aWFsaXplcnMgKGluY2x1ZGluZyBzdXBlciBjYWxscykgd2l0aCBlbnZpcm9ubWVudAogICAgICAgIC8vICAgICAgICAgc2V0dXAuCiAgICAgICAgZm9yIChmaW5hbCBGaWVsZCBmaWVsZCBpbiBrbGFzcy5maWVsZHMpIHsKICAgICAgICAgIGlmICghZmllbGQuaXNTdGF0aWMpIHsKICAgICAgICAgICAgaW5zdGFuY2VCdWlsZGVyLnNldEZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgICBmaWVsZCwgX2V2YWx1YXRlTnVsbGFibGVTdWJleHByZXNzaW9uKGZpZWxkLmluaXRpYWxpemVyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoZmluYWwgSW5pdGlhbGl6ZXIgaW5pdCBpbiBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMpIHsKICAgICAgICAgIGlmIChpbml0IGlzIEZpZWxkSW5pdGlhbGl6ZXIpIHsKICAgICAgICAgICAgaW5zdGFuY2VCdWlsZGVyLnNldEZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgICBpbml0LmZpZWxkLCBfZXZhbHVhdGVTdWJleHByZXNzaW9uKGluaXQudmFsdWUpKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaW5pdCBpcyBMb2NhbEluaXRpYWxpemVyKSB7CiAgICAgICAgICAgIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBpbml0LnZhcmlhYmxlOwogICAgICAgICAgICBlbnYuYWRkVmFyaWFibGVWYWx1ZSgKICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBfZXZhbHVhdGVTdWJleHByZXNzaW9uKHZhcmlhYmxlLmluaXRpYWxpemVyKSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGluaXQgaXMgU3VwZXJJbml0aWFsaXplcikgewogICAgICAgICAgICBoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgICAgICBpbml0LnRhcmdldCwKICAgICAgICAgICAgICAgIGV2YWx1YXRlU3VwZXJUeXBlQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgIGluaXQsIGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzLnN1cGVydHlwZSksCiAgICAgICAgICAgICAgICBldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHMoaW5pdC5hcmd1bWVudHMpLAogICAgICAgICAgICAgICAgZXZhbHVhdGVOYW1lZEFyZ3VtZW50cyhpbml0LmFyZ3VtZW50cykpOwogICAgICAgICAgfSBlbHNlIGlmIChpbml0IGlzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpIHsKICAgICAgICAgICAgLy8gU2luY2UgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3RvciB0YXJnZXRzIGEgY29uc3RydWN0b3Igb2YgdGhlIHNhbWUKICAgICAgICAgICAgLy8gY2xhc3MsIHdlIHBhc3MgdGhlIHNhbWUgW3R5cGVBcmd1bWVudHNdLgogICAgICAgICAgICBoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgICAgICBpbml0LnRhcmdldCwKICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgICAgICBldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHMoaW5pdC5hcmd1bWVudHMpLAogICAgICAgICAgICAgICAgZXZhbHVhdGVOYW1lZEFyZ3VtZW50cyhpbml0LmFyZ3VtZW50cykpOwogICAgICAgICAgfSBlbHNlIGlmIChpbml0IGlzIEFzc2VydEluaXRpYWxpemVyKSB7CiAgICAgICAgICAgIGNoZWNrQXNzZXJ0KGluaXQuc3RhdGVtZW50KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKAogICAgICAgICAgICAgICAgY29uc3RydWN0b3IsCiAgICAgICAgICAgICAgICAnTm8gc3VwcG9ydCBmb3IgaGFuZGxpbmcgaW5pdGlhbGl6ZXIgb2YgdHlwZSAnCiAgICAgICAgICAgICAgICAnIiR7aW5pdC5ydW50aW1lVHlwZX0iLicpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIChVbmV2YWx1YXRlZENvbnN0YW50IGNvbnN0YW50IGluIGVudi51bmV2YWx1YXRlZFVucmVhZENvbnN0YW50cykgewogICAgICAgICAgaW5zdGFuY2VCdWlsZGVyLnVudXNlZEFyZ3VtZW50cy5hZGQoZXh0cmFjdChjb25zdGFudCkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9CgogIHZvaWQgY2hlY2tBc3NlcnQoQXNzZXJ0U3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgZmluYWwgQ29uc3RhbnQgY29uZGl0aW9uID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihzdGF0ZW1lbnQuY29uZGl0aW9uKTsKCiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICBFeHByZXNzaW9uIG1lc3NhZ2UgPSBudWxsOwogICAgICBpZiAoc3RhdGVtZW50Lm1lc3NhZ2UgIT0gbnVsbCkgewogICAgICAgIGVudGVyTGF6eSgpOwogICAgICAgIG1lc3NhZ2UgPSBleHRyYWN0KF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oc3RhdGVtZW50Lm1lc3NhZ2UpKTsKICAgICAgICBsZWF2ZUxhenkoKTsKICAgICAgfQogICAgICBpbnN0YW5jZUJ1aWxkZXIuYXNzZXJ0cy5hZGQobmV3IEFzc2VydFN0YXRlbWVudChleHRyYWN0KGNvbmRpdGlvbiksCiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLAogICAgICAgICAgY29uZGl0aW9uU3RhcnRPZmZzZXQ6IHN0YXRlbWVudC5jb25kaXRpb25TdGFydE9mZnNldCwKICAgICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogc3RhdGVtZW50LmNvbmRpdGlvbkVuZE9mZnNldCkpOwogICAgfSBlbHNlIGlmIChjb25kaXRpb24gaXMgQm9vbENvbnN0YW50KSB7CiAgICAgIGlmICghY29uZGl0aW9uLnZhbHVlKSB7CiAgICAgICAgaWYgKHN0YXRlbWVudC5tZXNzYWdlID09IG51bGwpIHsKICAgICAgICAgIHJlcG9ydChzdGF0ZW1lbnQuY29uZGl0aW9uLCBtZXNzYWdlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uKTsKICAgICAgICB9CiAgICAgICAgZmluYWwgQ29uc3RhbnQgbWVzc2FnZSA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oc3RhdGVtZW50Lm1lc3NhZ2UpOwogICAgICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgICAgICBpbnN0YW5jZUJ1aWxkZXIuYXNzZXJ0cy5hZGQobmV3IEFzc2VydFN0YXRlbWVudChleHRyYWN0KGNvbmRpdGlvbiksCiAgICAgICAgICAgICAgbWVzc2FnZTogZXh0cmFjdChtZXNzYWdlKSwKICAgICAgICAgICAgICBjb25kaXRpb25TdGFydE9mZnNldDogc3RhdGVtZW50LmNvbmRpdGlvblN0YXJ0T2Zmc2V0LAogICAgICAgICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogc3RhdGVtZW50LmNvbmRpdGlvbkVuZE9mZnNldCkpOwogICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZSBpcyBTdHJpbmdDb25zdGFudCkgewogICAgICAgICAgcmVwb3J0KAogICAgICAgICAgICAgIHN0YXRlbWVudC5jb25kaXRpb24sCiAgICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZQogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhtZXNzYWdlLnZhbHVlKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydCgKICAgICAgICAgICAgICBzdGF0ZW1lbnQubWVzc2FnZSwKICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRUeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5zdHJpbmdUeXBlLAogICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVwb3J0KAogICAgICAgICAgc3RhdGVtZW50LmNvbmRpdGlvbiwKICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFR5cGUud2l0aEFyZ3VtZW50cyhjb25kaXRpb24sCiAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LmJvb2xUeXBlLCBjb25kaXRpb24uZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICB9CiAgfQoKICB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiByZXBvcnRJbnZhbGlkKG5vZGUsIG5vZGUubWVzc2FnZSk7CiAgfQoKICB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICAvLyBXZSBoYXZlIG5vIHN1cHBvcnQgZm9yIGdlbmVyaWMgbWV0aG9kIGludm9jYXRpb24gYXRtLgogICAgYXNzZXJ0KG5vZGUuYXJndW1lbnRzLm5hbWVkLmlzRW1wdHkpOwoKICAgIGZpbmFsIENvbnN0YW50IHJlY2VpdmVyID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLnJlY2VpdmVyKTsKICAgIGZpbmFsIExpc3Q8Q29uc3RhbnQ+IGFyZ3VtZW50cyA9CiAgICAgICAgZXZhbHVhdGVQb3NpdGlvbmFsQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKCiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQoCiAgICAgICAgICBub2RlLAogICAgICAgICAgbmV3IE1ldGhvZEludm9jYXRpb24oZXh0cmFjdChyZWNlaXZlciksIG5vZGUubmFtZSwKICAgICAgICAgICAgICB1bmV2YWx1YXRlZEFyZ3VtZW50cyhhcmd1bWVudHMsIHt9LCBub2RlLmFyZ3VtZW50cy50eXBlcykpKTsKICAgIH0KCiAgICBmaW5hbCBTdHJpbmcgb3AgPSBub2RlLm5hbWUubmFtZTsKCiAgICAvLyBIYW5kbGUgPT0gYW5kICE9IGZpcnN0IChpdCdzIGNvbW1vbiBiZXR3ZWVuIGFsbCB0eXBlcykuIFNpbmNlIGBhICE9IGJgIGlzCiAgICAvLyBwYXJzZWQgYXMgYCEoYSA9PSBiKWAgaXQgaXMgaGFuZGxlZCBpbXBsaWNpdGx5IHRocm91Z2ggPT0uCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxICYmIG9wID09ICc9PScpIHsKICAgICAgZmluYWwgcmlnaHQgPSBhcmd1bWVudHNbMF07CgogICAgICAvLyBbRG91YmxlQ29uc3RhbnRdIHVzZXMgW2lkZW50aWNhbF0gdG8gZGV0ZXJtaW5lIGVxdWFsaXR5LCBzbyB3ZSBuZWVkIHR3bwogICAgICAvLyBzcGVjaWFsIGNhc2VzOgogICAgICAvLyBUd28gTmFOcyBhcmUgYWx3YXlzIHVuZXF1YWwgZXZlbiBpZiBbaWRlbnRpY2FsXSByZXR1cm5zIGB0cnVlYC4KICAgICAgaWYgKGlzTmFOKHJlY2VpdmVyKSB8fCBpc05hTihyaWdodCkpIHsKICAgICAgICByZXR1cm4gZmFsc2VDb25zdGFudDsKICAgICAgfQoKICAgICAgLy8gVHdvIHplcm8gdmFsdWVzIGFyZSBhbHdheXMgZXF1YWwgcmVnYXJkbGVzcyBvZiBzaWduLgogICAgICBpZiAoaXNaZXJvKHJlY2VpdmVyKSkgewogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KGlzWmVybyhyaWdodCkpOwogICAgICB9CgogICAgICBpZiAocmVjZWl2ZXIgaXMgTnVsbENvbnN0YW50IHx8CiAgICAgICAgICByZWNlaXZlciBpcyBCb29sQ29uc3RhbnQgfHwKICAgICAgICAgIHJlY2VpdmVyIGlzIEludENvbnN0YW50IHx8CiAgICAgICAgICByZWNlaXZlciBpcyBEb3VibGVDb25zdGFudCB8fAogICAgICAgICAgcmVjZWl2ZXIgaXMgU3RyaW5nQ29uc3RhbnQgfHwKICAgICAgICAgIHJpZ2h0IGlzIE51bGxDb25zdGFudCkgewogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KHJlY2VpdmVyID09IHJpZ2h0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgcmVjZWl2ZXIsIHJlY2VpdmVyLmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICB9CiAgICB9CgogICAgLy8gVGhpcyBpcyBhIHdoaXRlLWxpc3RlZCBzZXQgb2YgbWV0aG9kcyB3ZSBuZWVkIHRvIHN1cHBvcnQgb24gY29uc3RhbnRzLgogICAgaWYgKHJlY2VpdmVyIGlzIFN0cmluZ0NvbnN0YW50KSB7CiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgZmluYWwgQ29uc3RhbnQgb3RoZXIgPSBhcmd1bWVudHNbMF07CiAgICAgICAgICAgIGlmIChvdGhlciBpcyBTdHJpbmdDb25zdGFudCkgewogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUoCiAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdDb25zdGFudChyZWNlaXZlci52YWx1ZSArIG90aGVyLnZhbHVlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgICcrJywKICAgICAgICAgICAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuc3RyaW5nVHlwZSwKICAgICAgICAgICAgICAgICAgICBvdGhlci5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgaXMgSW50Q29uc3RhbnQgfHwgcmVjZWl2ZXIgaXMgSmF2YVNjcmlwdEludENvbnN0YW50KSB7CiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDApIHsKICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgICBjYXNlICd1bmFyeS0nOgogICAgICAgICAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAgICAgICAgIEJpZ0ludCB2YWx1ZSA9IChyZWNlaXZlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlOwogICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBCaWdJbnQuemVybykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgRG91YmxlQ29uc3RhbnQoLTAuMCkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBKYXZhU2NyaXB0SW50Q29uc3RhbnQuZnJvbUJpZ0ludCgtdmFsdWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgdmFsdWUgPSAocmVjZWl2ZXIgYXMgSW50Q29uc3RhbnQpLnZhbHVlOwogICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBJbnRDb25zdGFudCgtdmFsdWUpKTsKICAgICAgICAgIGNhc2UgJ34nOgogICAgICAgICAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAgICAgICAgIEJpZ0ludCB2YWx1ZSA9IChyZWNlaXZlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlOwogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudC5mcm9tQmlnSW50KAogICAgICAgICAgICAgICAgICAofnZhbHVlKS50b1Vuc2lnbmVkKDMyKSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCB2YWx1ZSA9IChyZWNlaXZlciBhcyBJbnRDb25zdGFudCkudmFsdWU7CiAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KH52YWx1ZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICBmaW5hbCBDb25zdGFudCBvdGhlciA9IGFyZ3VtZW50c1swXTsKICAgICAgICBpZiAob3RoZXIgaXMgSW50Q29uc3RhbnQgfHwgb3RoZXIgaXMgSmF2YVNjcmlwdEludENvbnN0YW50KSB7CiAgICAgICAgICBpZiAoKG9wID09ICc8PCcgfHwgb3AgPT0gJz4+JyB8fCBvcCA9PSAnPj4+JykpIHsKICAgICAgICAgICAgdmFyIHJlY2VpdmVyVmFsdWUgPSByZWNlaXZlciBpcyBJbnRDb25zdGFudAogICAgICAgICAgICAgICAgPyByZWNlaXZlci52YWx1ZQogICAgICAgICAgICAgICAgOiAocmVjZWl2ZXIgYXMgSmF2YVNjcmlwdEludENvbnN0YW50KS5iaWdJbnRWYWx1ZTsKICAgICAgICAgICAgaW50IG90aGVyVmFsdWUgPSBvdGhlciBpcyBJbnRDb25zdGFudAogICAgICAgICAgICAgICAgPyBvdGhlci52YWx1ZQogICAgICAgICAgICAgICAgOiAob3RoZXIgYXMgSmF2YVNjcmlwdEludENvbnN0YW50KS5iaWdJbnRWYWx1ZS50b0ludCgpOwogICAgICAgICAgICBpZiAob3RoZXJWYWx1ZSA8IDApIHsKICAgICAgICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0LAogICAgICAgICAgICAgICAgICAvLyBUT0RPKGFza2VzYyk6IENoYW5nZSBhcmd1bWVudCB0eXBlcyBpbiB0ZW1wbGF0ZSB0bwogICAgICAgICAgICAgICAgICAvLyBjb25zdGFudHMuCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsTmVnYXRpdmVTaGlmdC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgICAgb3AsICcke3JlY2VpdmVyVmFsdWV9JywgJyR7b3RoZXJWYWx1ZX0nKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoKG9wID09ICclJyB8fCBvcCA9PSAnfi8nKSkgewogICAgICAgICAgICB2YXIgcmVjZWl2ZXJWYWx1ZSA9IHJlY2VpdmVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICA/IHJlY2VpdmVyLnZhbHVlCiAgICAgICAgICAgICAgICA6IChyZWNlaXZlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlOwogICAgICAgICAgICBpbnQgb3RoZXJWYWx1ZSA9IG90aGVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICA/IG90aGVyLnZhbHVlCiAgICAgICAgICAgICAgICA6IChvdGhlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlLnRvSW50KCk7CiAgICAgICAgICAgIGlmIChvdGhlclZhbHVlID09IDApIHsKICAgICAgICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0LAogICAgICAgICAgICAgICAgICAvLyBUT0RPKGFza2VzYyk6IENoYW5nZSBhcmd1bWVudCB0eXBlIGluIHRlbXBsYXRlIHRvIGNvbnN0YW50LgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbFplcm9EaXZpc29yLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgICBvcCwgJyR7cmVjZWl2ZXJWYWx1ZX0nKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgICAgIGNhc2UgJ3wnOgogICAgICAgICAgICBjYXNlICcmJzoKICAgICAgICAgICAgY2FzZSAnXic6CiAgICAgICAgICAgICAgaW50IHJlY2VpdmVyVmFsdWUgPSByZWNlaXZlciBpcyBJbnRDb25zdGFudAogICAgICAgICAgICAgICAgICA/IHJlY2VpdmVyLnZhbHVlCiAgICAgICAgICAgICAgICAgIDogKHJlY2VpdmVyIGFzIEphdmFTY3JpcHRJbnRDb25zdGFudCkKICAgICAgICAgICAgICAgICAgICAgIC5iaWdJbnRWYWx1ZQogICAgICAgICAgICAgICAgICAgICAgLnRvVW5zaWduZWQoMzIpCiAgICAgICAgICAgICAgICAgICAgICAudG9JbnQoKTsKICAgICAgICAgICAgICBpbnQgb3RoZXJWYWx1ZSA9IG90aGVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICAgID8gb3RoZXIudmFsdWUKICAgICAgICAgICAgICAgICAgOiAob3RoZXIgYXMgSmF2YVNjcmlwdEludENvbnN0YW50KQogICAgICAgICAgICAgICAgICAgICAgLmJpZ0ludFZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAudG9VbnNpZ25lZCgzMikKICAgICAgICAgICAgICAgICAgICAgIC50b0ludCgpOwogICAgICAgICAgICAgIHJldHVybiBldmFsdWF0ZUJpbmFyeUJpdE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgb3AsIHJlY2VpdmVyVmFsdWUsIG90aGVyVmFsdWUsIG5vZGUpOwogICAgICAgICAgICBjYXNlICc8PCc6CiAgICAgICAgICAgIGNhc2UgJz4+JzoKICAgICAgICAgICAgY2FzZSAnPj4+JzoKICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgaW50IHJlY2VpdmVyVmFsdWU7CiAgICAgICAgICAgICAgaWYgKHJlY2VpdmVyIGlzIEludENvbnN0YW50KSB7CiAgICAgICAgICAgICAgICByZWNlaXZlclZhbHVlID0gcmVjZWl2ZXIudmFsdWU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIEJpZ0ludCBiaWdJbnRWYWx1ZSA9CiAgICAgICAgICAgICAgICAgICAgKHJlY2VpdmVyIGFzIEphdmFTY3JpcHRJbnRDb25zdGFudCkuYmlnSW50VmFsdWU7CiAgICAgICAgICAgICAgICByZWNlaXZlclZhbHVlID0gYmlnSW50VmFsdWUudG9VbnNpZ25lZCgzMikudG9JbnQoKTsKICAgICAgICAgICAgICAgIG5lZ2F0aXZlID0gYmlnSW50VmFsdWUuaXNOZWdhdGl2ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaW50IG90aGVyVmFsdWUgPSBvdGhlciBpcyBJbnRDb25zdGFudAogICAgICAgICAgICAgICAgICA/IG90aGVyLnZhbHVlCiAgICAgICAgICAgICAgICAgIDogKG90aGVyIGFzIEphdmFTY3JpcHRJbnRDb25zdGFudCkuYmlnSW50VmFsdWUudG9JbnQoKTsKCiAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlQmluYXJ5U2hpZnRPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgIG9wLCByZWNlaXZlclZhbHVlLCBvdGhlclZhbHVlLCBub2RlLAogICAgICAgICAgICAgICAgICBuZWdhdGl2ZVJlY2VpdmVyOiBuZWdhdGl2ZSk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgbnVtIHJlY2VpdmVyVmFsdWUgPSByZWNlaXZlciBpcyBJbnRDb25zdGFudAogICAgICAgICAgICAgICAgICA/IHJlY2VpdmVyLnZhbHVlCiAgICAgICAgICAgICAgICAgIDogKHJlY2VpdmVyIGFzIERvdWJsZUNvbnN0YW50KS52YWx1ZTsKICAgICAgICAgICAgICBudW0gb3RoZXJWYWx1ZSA9IG90aGVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICAgID8gb3RoZXIudmFsdWUKICAgICAgICAgICAgICAgICAgOiAob3RoZXIgYXMgRG91YmxlQ29uc3RhbnQpLnZhbHVlOwogICAgICAgICAgICAgIHJldHVybiBldmFsdWF0ZUJpbmFyeU51bWVyaWNPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgIG9wLCByZWNlaXZlclZhbHVlLCBvdGhlclZhbHVlLCBub2RlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG90aGVyIGlzIERvdWJsZUNvbnN0YW50KSB7CiAgICAgICAgICBpZiAoKG9wID09ICd8JyB8fCBvcCA9PSAnJicgfHwgb3AgPT0gJ14nKSB8fAogICAgICAgICAgICAgIChvcCA9PSAnPDwnIHx8IG9wID09ICc+PicgfHwgb3AgPT0gJz4+PicpKSB7CiAgICAgICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICBvcCwKICAgICAgICAgICAgICAgICAgICBvdGhlciwKICAgICAgICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuaW50VHlwZSwKICAgICAgICAgICAgICAgICAgICBvdGhlci5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgICAgICAgIH0KICAgICAgICAgIG51bSByZWNlaXZlclZhbHVlID0gcmVjZWl2ZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICA/IHJlY2VpdmVyLnZhbHVlCiAgICAgICAgICAgICAgOiAocmVjZWl2ZXIgYXMgRG91YmxlQ29uc3RhbnQpLnZhbHVlOwogICAgICAgICAgcmV0dXJuIGV2YWx1YXRlQmluYXJ5TnVtZXJpY09wZXJhdGlvbigKICAgICAgICAgICAgICBvcCwgcmVjZWl2ZXJWYWx1ZSwgb3RoZXIudmFsdWUsIG5vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgb3AsCiAgICAgICAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5udW1UeXBlLAogICAgICAgICAgICAgICAgb3RoZXIuZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgaWYgKChvcCA9PSAnfCcgfHwgb3AgPT0gJyYnIHx8IG9wID09ICdeJykgfHwKICAgICAgICAgIChvcCA9PSAnPDwnIHx8IG9wID09ICc+PicgfHwgb3AgPT0gJz4+PicpKSB7CiAgICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIG9wLAogICAgICAgICAgICAgICAgcmVjZWl2ZXIsCiAgICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuaW50VHlwZSwKICAgICAgICAgICAgICAgIHJlY2VpdmVyLmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICB9CiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDApIHsKICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgICBjYXNlICd1bmFyeS0nOgogICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG1ha2VEb3VibGVDb25zdGFudCgtcmVjZWl2ZXIudmFsdWUpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmluYWwgQ29uc3RhbnQgb3RoZXIgPSBhcmd1bWVudHNbMF07CgogICAgICAgIGlmIChvdGhlciBpcyBJbnRDb25zdGFudCB8fCBvdGhlciBpcyBEb3VibGVDb25zdGFudCkgewogICAgICAgICAgZmluYWwgbnVtIHZhbHVlID0gKG90aGVyIGlzIEludENvbnN0YW50KQogICAgICAgICAgICAgID8gb3RoZXIudmFsdWUKICAgICAgICAgICAgICA6IChvdGhlciBhcyBEb3VibGVDb25zdGFudCkudmFsdWU7CiAgICAgICAgICByZXR1cm4gZXZhbHVhdGVCaW5hcnlOdW1lcmljT3BlcmF0aW9uKAogICAgICAgICAgICAgIG9wLCByZWNlaXZlci52YWx1ZSwgdmFsdWUsIG5vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgb3AsCiAgICAgICAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5udW1UeXBlLAogICAgICAgICAgICAgICAgb3RoZXIuZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgaXMgQm9vbENvbnN0YW50KSB7CiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICBmaW5hbCBDb25zdGFudCBvdGhlciA9IGFyZ3VtZW50c1swXTsKICAgICAgICBpZiAob3RoZXIgaXMgQm9vbENvbnN0YW50KSB7CiAgICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgICAgIGNhc2UgJ3wnOgogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUoCiAgICAgICAgICAgICAgICAgIG5ldyBCb29sQ29uc3RhbnQocmVjZWl2ZXIudmFsdWUgfHwgb3RoZXIudmFsdWUpKTsKICAgICAgICAgICAgY2FzZSAnJic6CiAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZSgKICAgICAgICAgICAgICAgICAgbmV3IEJvb2xDb25zdGFudChyZWNlaXZlci52YWx1ZSAmJiBvdGhlci52YWx1ZSkpOwogICAgICAgICAgICBjYXNlICdeJzoKICAgICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKAogICAgICAgICAgICAgICAgICBuZXcgQm9vbENvbnN0YW50KHJlY2VpdmVyLnZhbHVlICE9IG90aGVyLnZhbHVlKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHJlY2VpdmVyIGlzIE51bGxDb25zdGFudCkgewogICAgICByZXR1cm4gcmVwb3J0KG5vZGUsIG1lc3NhZ2VDb25zdEV2YWxOdWxsVmFsdWUpOwogICAgfQoKICAgIHJldHVybiByZXBvcnQobm9kZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uLndpdGhBcmd1bWVudHMob3AsIHJlY2VpdmVyKSk7CiAgfQoKICB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0YW50IGxlZnQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUubGVmdCk7CiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICBlbnRlckxhenkoKTsKICAgICAgQ29uc3RhbnQgcmlnaHQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUucmlnaHQpOwogICAgICBsZWF2ZUxhenkoKTsKICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKG5vZGUsCiAgICAgICAgICBuZXcgTG9naWNhbEV4cHJlc3Npb24oZXh0cmFjdChsZWZ0KSwgbm9kZS5vcGVyYXRvciwgZXh0cmFjdChyaWdodCkpKTsKICAgIH0KICAgIHN3aXRjaCAobm9kZS5vcGVyYXRvcikgewogICAgICBjYXNlICd8fCc6CiAgICAgICAgaWYgKGxlZnQgaXMgQm9vbENvbnN0YW50KSB7CiAgICAgICAgICBpZiAobGVmdC52YWx1ZSkgcmV0dXJuIHRydWVDb25zdGFudDsKCiAgICAgICAgICBmaW5hbCBDb25zdGFudCByaWdodCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5yaWdodCk7CiAgICAgICAgICBpZiAocmlnaHQgaXMgQm9vbENvbnN0YW50IHx8IHJpZ2h0IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICBub2RlLm9wZXJhdG9yLAogICAgICAgICAgICAgICAgICBsZWZ0LAogICAgICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGUsCiAgICAgICAgICAgICAgICAgIHJpZ2h0LmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBub2RlLm9wZXJhdG9yLCBsZWZ0KSk7CiAgICAgIGNhc2UgJyYmJzoKICAgICAgICBpZiAobGVmdCBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgICAgIGlmICghbGVmdC52YWx1ZSkgcmV0dXJuIGZhbHNlQ29uc3RhbnQ7CgogICAgICAgICAgZmluYWwgQ29uc3RhbnQgcmlnaHQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUucmlnaHQpOwogICAgICAgICAgaWYgKHJpZ2h0IGlzIEJvb2xDb25zdGFudCB8fCByaWdodCBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgICAgICAgIHJldHVybiByaWdodDsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgbm9kZS5vcGVyYXRvciwKICAgICAgICAgICAgICAgICAgbGVmdCwKICAgICAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LmJvb2xUeXBlLAogICAgICAgICAgICAgICAgICByaWdodC5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbi53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgbm9kZS5vcGVyYXRvciwgbGVmdCkpOwogICAgICBjYXNlICc/Pyc6CiAgICAgICAgcmV0dXJuIChsZWZ0IGlzISBOdWxsQ29uc3RhbnQpCiAgICAgICAgICAgID8gbGVmdAogICAgICAgICAgICA6IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5yaWdodCk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbi53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgbm9kZS5vcGVyYXRvciwgbGVmdCkpOwogICAgfQogIH0KCiAgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0YW50IGNvbmRpdGlvbiA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5jb25kaXRpb24pOwogICAgaWYgKGNvbmRpdGlvbiA9PSB0cnVlQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS50aGVuKTsKICAgIH0gZWxzZSBpZiAoY29uZGl0aW9uID09IGZhbHNlQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5vdGhlcndpc2UpOwogICAgfSBlbHNlIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIGVudGVyTGF6eSgpOwogICAgICBDb25zdGFudCB0aGVuID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLnRoZW4pOwogICAgICBDb25zdGFudCBvdGhlcndpc2UgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUub3RoZXJ3aXNlKTsKICAgICAgbGVhdmVMYXp5KCk7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBuZXcgQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4dHJhY3QoY29uZGl0aW9uKSwgZXh0cmFjdCh0aGVuKSwKICAgICAgICAgICAgICBleHRyYWN0KG90aGVyd2lzZSksIG5vZGUuc3RhdGljVHlwZSkpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgIG5vZGUuY29uZGl0aW9uLAogICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZS53aXRoQXJndW1lbnRzKGNvbmRpdGlvbiwKICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGUsIGNvbmRpdGlvbi5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgIH0KICB9CgogIHZpc2l0UHJvcGVydHlHZXQoUHJvcGVydHlHZXQgbm9kZSkgewogICAgaWYgKG5vZGUucmVjZWl2ZXIgaXMgVGhpc0V4cHJlc3Npb24pIHsKICAgICAgLy8gQWNjZXNzICJ0aGlzIiBkdXJpbmcgaW5zdGFuY2UgY3JlYXRpb24uCiAgICAgIGlmIChpbnN0YW5jZUJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKG5vZGUsICdJbnN0YW5jZSBmaWVsZCBhY2Nlc3Mgb3V0c2lkZSBjb25zdHJ1Y3RvcicpOwogICAgICB9CiAgICAgIGZvciAoZmluYWwgRmllbGQgZmllbGQgaW4gaW5zdGFuY2VCdWlsZGVyLmZpZWxkcy5rZXlzKSB7CiAgICAgICAgaWYgKGZpZWxkLm5hbWUgPT0gbm9kZS5uYW1lKSB7CiAgICAgICAgICByZXR1cm4gaW5zdGFuY2VCdWlsZGVyLmZpZWxkc1tmaWVsZF07CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKG5vZGUsCiAgICAgICAgICAnQ291bGQgbm90IGV2YWx1YXRlIGZpZWxkIGdldCAke25vZGUubmFtZX0gb24gaW5jb21wbGV0ZSBpbnN0YW5jZScpOwogICAgfQoKICAgIGZpbmFsIENvbnN0YW50IHJlY2VpdmVyID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLnJlY2VpdmVyKTsKICAgIGlmIChyZWNlaXZlciBpcyBTdHJpbmdDb25zdGFudCAmJiBub2RlLm5hbWUubmFtZSA9PSAnbGVuZ3RoJykgewogICAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudChyZWNlaXZlci52YWx1ZS5sZW5ndGgpKTsKICAgICAgfQogICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBJbnRDb25zdGFudChyZWNlaXZlci52YWx1ZS5sZW5ndGgpKTsKICAgIH0gZWxzZSBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwKICAgICAgICAgIG5ldyBQcm9wZXJ0eUdldChleHRyYWN0KHJlY2VpdmVyKSwgbm9kZS5uYW1lLCBub2RlLmludGVyZmFjZVRhcmdldCkpOwogICAgfSBlbHNlIGlmIChyZWNlaXZlciBpcyBOdWxsQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIHJlcG9ydChub2RlLCBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlKTsKICAgIH0KICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgbm9kZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRQcm9wZXJ0eUdldC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICBub2RlLm5hbWUubmFtZSwgcmVjZWl2ZXIpKTsKICB9CgogIHZpc2l0TGV0KExldCBub2RlKSB7CiAgICBlbnYuYWRkVmFyaWFibGVWYWx1ZSgKICAgICAgICBub2RlLnZhcmlhYmxlLCBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIpKTsKICAgIHJldHVybiBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUuYm9keSk7CiAgfQoKICB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIC8vIE5vdCBldmVyeSB2YXJpYWJsZSB3aGljaCBhIFtWYXJpYWJsZUdldF0gcmVmZXJzIHRvIG11c3QgYmUgbWFya2VkIGFzCiAgICAvLyBjb25zdGFudC4gIEZvciBleGFtcGxlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYXMgd2VsbCBhcyBjb25zdHJ1Y3RzCiAgICAvLyBkZXN1Z2FyZWQgdG8gW0xldF0gZXhwcmVzc2lvbnMgYXJlIG9rLgogICAgLy8KICAgIC8vIFRPRE8oa3VzdGVybWFubik6IFRoZSBoZXVyaXN0aWMgb2YgYWxsb3dpbmcgYWxsIFtWYXJpYWJsZUdldF1zIG9uIFtMZXRdCiAgICAvLyB2YXJpYWJsZXMgbWlnaHQgYWxsb3cgbW9yZSB0aGFuIGl0IHNob3VsZC4KICAgIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgaWYgKHZhcmlhYmxlLnBhcmVudCBpcyBMZXQgfHwgX2lzRm9ybWFsUGFyYW1ldGVyKHZhcmlhYmxlKSkgewogICAgICByZXR1cm4gZW52Lmxvb2t1cFZhcmlhYmxlKG5vZGUudmFyaWFibGUpID8/CiAgICAgICAgICByZXBvcnQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQKICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModmFyaWFibGUubmFtZSkpOwogICAgfQogICAgaWYgKHZhcmlhYmxlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24odmFyaWFibGUuaW5pdGlhbGl6ZXIpOwogICAgfQogICAgcmV0dXJuIHJlcG9ydEludmFsaWQobm9kZSwgJ1ZhcmlhYmxlIGdldCBvZiBhIG5vbi1jb25zdCB2YXJpYWJsZS4nKTsKICB9CgogIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlKSB7CiAgICByZXR1cm4gd2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgZmluYWwgTWVtYmVyIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgICBpZiAodGFyZ2V0IGlzIEZpZWxkKSB7CiAgICAgICAgaWYgKHRhcmdldC5pc0NvbnN0KSB7CiAgICAgICAgICByZXR1cm4gcnVuSW5zaWRlQ29udGV4dCh0YXJnZXQsICgpIHsKICAgICAgICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24odGFyZ2V0LmluaXRpYWxpemVyKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0YXJnZXQubmFtZS5uYW1lKSk7CiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIFByb2NlZHVyZSkgewogICAgICAgIGlmICh0YXJnZXQua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgVGVhck9mZkNvbnN0YW50KHRhcmdldCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0YXJnZXQubmFtZS5uYW1lKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0SW52YWxpZCgKICAgICAgICAgICAgbm9kZSwgJ05vIHN1cHBvcnQgZm9yICR7dGFyZ2V0LnJ1bnRpbWVUeXBlfSBpbiBhIHN0YXRpYy1nZXQuJyk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgZmluYWwgTGlzdDxPYmplY3Q+IGNvbmNhdGVuYXRlZCA9IDxPYmplY3Q+W25ldyBTdHJpbmdCdWZmZXIoKV07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgQ29uc3RhbnQgY29uc3RhbnQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbnNbaV0pOwogICAgICBpZiAoY29uc3RhbnQgaXMgUHJpbWl0aXZlQ29uc3RhbnQ8T2JqZWN0PikgewogICAgICAgIFN0cmluZyB2YWx1ZSA9IGNvbnN0YW50LnRvU3RyaW5nKCk7CiAgICAgICAgT2JqZWN0IGxhc3QgPSBjb25jYXRlbmF0ZWQubGFzdDsKICAgICAgICBpZiAobGFzdCBpcyBTdHJpbmdCdWZmZXIpIHsKICAgICAgICAgIGxhc3Qud3JpdGUodmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25jYXRlbmF0ZWQuYWRkKG5ldyBTdHJpbmdCdWZmZXIodmFsdWUpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICAgIC8vIFRoZSBjb25zdGFudCBpcyBlaXRoZXIgdW5ldmFsdWF0ZWQgb3IgYSBub24tcHJpbWl0aXZlIGluIGFuCiAgICAgICAgLy8gdW5ldmFsdWF0ZWQgY29udGV4dC4gSW4gYm90aCBjYXNlcyB3ZSBkZWZlciB0aGUgZXZhbHVhdGlvbiBhbmQvb3IKICAgICAgICAvLyBlcnJvciByZXBvcnRpbmcgdGlsbCBsYXRlci4KICAgICAgICBjb25jYXRlbmF0ZWQuYWRkKGNvbnN0YW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZAogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoY29uc3RhbnQpKTsKICAgICAgfQogICAgfQogICAgaWYgKGNvbmNhdGVuYXRlZC5sZW5ndGggPiAxKSB7CiAgICAgIGZpbmFsIGV4cHJlc3Npb25zID0gbmV3IExpc3Q8RXhwcmVzc2lvbj4oY29uY2F0ZW5hdGVkLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uY2F0ZW5hdGVkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgT2JqZWN0IHZhbHVlID0gY29uY2F0ZW5hdGVkW2ldOwogICAgICAgIGlmICh2YWx1ZSBpcyBTdHJpbmdCdWZmZXIpIHsKICAgICAgICAgIGV4cHJlc3Npb25zW2ldID0gbmV3IENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICAgICAgICBjYW5vbmljYWxpemUobmV3IFN0cmluZ0NvbnN0YW50KHZhbHVlLnRvU3RyaW5nKCkpKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBlaXRoZXIgdW5ldmFsdWF0ZWQgY29uc3RhbnQgb3IgYSBub24tcHJpbWl0aXZlCiAgICAgICAgICAvLyBjb25zdGFudCBpbiBhbiB1bmV2YWx1YXRlZCBleHByZXNzaW9uLgogICAgICAgICAgZXhwcmVzc2lvbnNbaV0gPSBleHRyYWN0KHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKG5vZGUsIG5ldyBTdHJpbmdDb25jYXRlbmF0aW9uKGV4cHJlc3Npb25zKSk7CiAgICB9CiAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBTdHJpbmdDb25zdGFudChjb25jYXRlbmF0ZWQuc2luZ2xlLnRvU3RyaW5nKCkpKTsKICB9CgogIHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGZpbmFsIFByb2NlZHVyZSB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGZpbmFsIEFyZ3VtZW50cyBhcmd1bWVudHMgPSBub2RlLmFyZ3VtZW50czsKICAgIGZpbmFsIHBvc2l0aW9uYWxzID0gZXZhbHVhdGVQb3NpdGlvbmFsQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICBmaW5hbCBuYW1lZCA9IGV2YWx1YXRlTmFtZWRBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBuZXcgU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgICB0YXJnZXQsIHVuZXZhbHVhdGVkQXJndW1lbnRzKHBvc2l0aW9uYWxzLCBuYW1lZCwgYXJndW1lbnRzLnR5cGVzKSwKICAgICAgICAgICAgICBpc0NvbnN0OiB0cnVlKSk7CiAgICB9CiAgICBpZiAodGFyZ2V0LmtpbmQgPT0gUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgIGlmICh0YXJnZXQuaXNDb25zdCAmJgogICAgICAgICAgdGFyZ2V0Lm5hbWUubmFtZSA9PSAiZnJvbUVudmlyb25tZW50IiAmJgogICAgICAgICAgdGFyZ2V0LmVuY2xvc2luZ0xpYnJhcnkgPT0gY29yZVR5cGVzLmNvcmVMaWJyYXJ5ICYmCiAgICAgICAgICBwb3NpdGlvbmFscy5sZW5ndGggPT0gMSkgewogICAgICAgIGlmIChlbnZpcm9ubWVudERlZmluZXMgIT0gbnVsbCkgewogICAgICAgICAgLy8gRXZhbHVhdGUgZW52aXJvbm1lbnQgY29uc3RhbnQuCiAgICAgICAgICBDb25zdGFudCBuYW1lID0gcG9zaXRpb25hbHMuc2luZ2xlOwogICAgICAgICAgaWYgKG5hbWUgaXMgU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gZW52aXJvbm1lbnREZWZpbmVzW25hbWUudmFsdWVdOwogICAgICAgICAgICBDb25zdGFudCBkZWZhdWx0VmFsdWUgPSBuYW1lZFsiZGVmYXVsdFZhbHVlIl07CgogICAgICAgICAgICBpZiAodGFyZ2V0LmVuY2xvc2luZ0NsYXNzID09IGNvcmVUeXBlcy5ib29sQ2xhc3MpIHsKICAgICAgICAgICAgICBDb25zdGFudCBib29sQ29uc3RhbnQgPSB2YWx1ZSA9PSAidHJ1ZSIKICAgICAgICAgICAgICAgICAgPyB0cnVlQ29uc3RhbnQKICAgICAgICAgICAgICAgICAgOiB2YWx1ZSA9PSAiZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlQ29uc3RhbnQKICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdFZhbHVlIGlzIEJvb2xDb25zdGFudAogICAgICAgICAgICAgICAgICAgICAgICAgID8gbWFrZUJvb2xDb25zdGFudChkZWZhdWx0VmFsdWUudmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0VmFsdWUgaXMgTnVsbENvbnN0YW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbENvbnN0YW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmFsc2VDb25zdGFudDsKICAgICAgICAgICAgICByZXR1cm4gYm9vbENvbnN0YW50OwogICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC5lbmNsb3NpbmdDbGFzcyA9PSBjb3JlVHlwZXMuaW50Q2xhc3MpIHsKICAgICAgICAgICAgICBpbnQgaW50VmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gaW50LnRyeVBhcnNlKHZhbHVlKSA6IG51bGw7CiAgICAgICAgICAgICAgaW50VmFsdWUgPz89IGRlZmF1bHRWYWx1ZSBpcyBJbnRDb25zdGFudAogICAgICAgICAgICAgICAgICA/IGRlZmF1bHRWYWx1ZS52YWx1ZQogICAgICAgICAgICAgICAgICA6IGRlZmF1bHRWYWx1ZSBpcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQKICAgICAgICAgICAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlLmJpZ0ludFZhbHVlLnRvSW50KCkKICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDsKICAgICAgICAgICAgICBpZiAoaW50VmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGxDb25zdGFudDsKICAgICAgICAgICAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50KGludFZhbHVlKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KGludFZhbHVlKSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmVuY2xvc2luZ0NsYXNzID09IGNvcmVUeXBlcy5zdHJpbmdDbGFzcykgewogICAgICAgICAgICAgIHZhbHVlID8/PQogICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgaXMgU3RyaW5nQ29uc3RhbnQgPyBkZWZhdWx0VmFsdWUudmFsdWUgOiBudWxsOwogICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbENvbnN0YW50OwogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IFN0cmluZ0NvbnN0YW50KHZhbHVlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSBpcyBOdWxsQ29uc3RhbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHJlcG9ydChub2RlLCBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTGVhdmUgZW52aXJvbm1lbnQgY29uc3RhbnQgdW5ldmFsdWF0ZWQuCiAgICAgICAgICByZXR1cm4gdW5ldmFsdWF0ZWQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICBuZXcgU3RhdGljSW52b2NhdGlvbih0YXJnZXQsCiAgICAgICAgICAgICAgICAgIHVuZXZhbHVhdGVkQXJndW1lbnRzKHBvc2l0aW9uYWxzLCBuYW1lZCwgYXJndW1lbnRzLnR5cGVzKSwKICAgICAgICAgICAgICAgICAgaXNDb25zdDogdHJ1ZSkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0YXJnZXQubmFtZS5uYW1lID09ICdpZGVudGljYWwnKSB7CiAgICAgIC8vIEVuc3VyZSB0aGUgImlkZW50aWNhbCgpIiBmdW5jdGlvbiBjb21lcyBmcm9tIGRhcnQ6Y29yZS4KICAgICAgZmluYWwgcGFyZW50ID0gdGFyZ2V0LnBhcmVudDsKICAgICAgaWYgKHBhcmVudCBpcyBMaWJyYXJ5ICYmIHBhcmVudCA9PSBjb3JlVHlwZXMuY29yZUxpYnJhcnkpIHsKICAgICAgICBmaW5hbCBDb25zdGFudCBsZWZ0ID0gcG9zaXRpb25hbHNbMF07CiAgICAgICAgZmluYWwgQ29uc3RhbnQgcmlnaHQgPSBwb3NpdGlvbmFsc1sxXTsKCiAgICAgICAgaWYgKHRhcmdldGluZ0phdmFTY3JpcHQpIHsKICAgICAgICAgIC8vIEluIEphdmFTY3JpcHQsIHdlIGxvd2VyIFtpZGVudGljYWxdIHRvIGA9PT1gLCBzbyBhbnkgY29tcGFyaXNvbgogICAgICAgICAgLy8gYWdhaW5zdCBOYU4geWllbGRzIGBmYWxzZWAuCiAgICAgICAgICBpZiAoaXNOYU4obGVmdCkgfHwgaXNOYU4ocmlnaHQpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZUNvbnN0YW50OwogICAgICAgICAgfQoKICAgICAgICAgIC8vIEluIEphdmFTY3JpcHQsIGAtMC4wID09PSAwLjBgLgogICAgICAgICAgaWYgKGlzWmVybyhsZWZ0KSkgewogICAgICAgICAgICByZXR1cm4gbWFrZUJvb2xDb25zdGFudChpc1plcm8ocmlnaHQpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFNpbmNlIHdlIGNhbm9uaWNhbGl6ZSBjb25zdGFudHMgZHVyaW5nIHRoZSBldmFsdWF0aW9uLCB3ZSBjYW4gdXNlCiAgICAgICAgLy8gaWRlbnRpY2FsIGhlcmUuCiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoaWRlbnRpY2FsKGxlZnQsIHJpZ2h0KSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGttaWxsaWtpbikgRm9yIGFuIGludmFsaWQgZmFjdG9yeSBpbnZvY2F0aW9uIHdlIHNob3VsZCBhZG9wdCBhCiAgICAvLyBiZXR0ZXIgbWVzc2FnZS4gIFRoaXMgd2lsbCBzaG93IHNvbWV0aGluZyBsaWtlOgogICAgLy8KICAgIC8vICJUaGUgaW52b2NhdGlvbiBvZiAnTGlzdCcgaXMgbm90IGFsbG93ZWQgd2l0aGluIGEgY29uc3QgY29udGV4dC4iCiAgICAvLwogICAgLy8gV2hpY2ggaXMgbm90IHF1aXRlIHJpZ2h0IHdoZW4gdGhlIGNvZGUgd2FzICJuZXcgTGlzdCgpIi4KICAgIFN0cmluZyBuYW1lID0gdGFyZ2V0Lm5hbWUubmFtZTsKICAgIGlmICh0YXJnZXQgaXMgUHJvY2VkdXJlICYmIHRhcmdldC5pc0ZhY3RvcnkpIHsKICAgICAgaWYgKG5hbWUuaXNFbXB0eSkgewogICAgICAgIG5hbWUgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lID0gJyR7dGFyZ2V0LmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7bmFtZX0nOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVwb3J0KAogICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24ud2l0aEFyZ3VtZW50cyhuYW1lKSk7CiAgfQoKICB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgewogICAgZmluYWwgQ29uc3RhbnQgY29uc3RhbnQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUub3BlcmFuZCk7CiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwKICAgICAgICAgIG5ldyBBc0V4cHJlc3Npb24oZXh0cmFjdChjb25zdGFudCksIGVudi5zdWJzdGl0dXRlVHlwZShub2RlLnR5cGUpKSk7CiAgICB9CiAgICByZXR1cm4gZW5zdXJlSXNTdWJ0eXBlKGNvbnN0YW50LCBldmFsdWF0ZURhcnRUeXBlKG5vZGUsIG5vZGUudHlwZSksIG5vZGUpOwogIH0KCiAgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0YW50IGNvbnN0YW50ID0gbm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKTsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZChub2RlLCBuZXcgSXNFeHByZXNzaW9uKGV4dHJhY3QoY29uc3RhbnQpLCBub2RlLnR5cGUpKTsKICAgIH0KICAgIGlmIChjb25zdGFudCBpcyBOdWxsQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQobm9kZS50eXBlID09IHR5cGVFbnZpcm9ubWVudC5udWxsVHlwZSB8fAogICAgICAgICAgbm9kZS50eXBlID09IHR5cGVFbnZpcm9ubWVudC5vYmplY3RUeXBlIHx8CiAgICAgICAgICBub2RlLnR5cGUgaXMgRHluYW1pY1R5cGUpOwogICAgfQogICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoCiAgICAgICAgaXNTdWJ0eXBlKGNvbnN0YW50LCBldmFsdWF0ZURhcnRUeXBlKG5vZGUsIG5vZGUudHlwZSkpKTsKICB9CgogIHZpc2l0Tm90KE5vdCBub2RlKSB7CiAgICBmaW5hbCBDb25zdGFudCBjb25zdGFudCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5vcGVyYW5kKTsKICAgIGlmIChjb25zdGFudCBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoY29uc3RhbnQgIT0gdHJ1ZUNvbnN0YW50KTsKICAgIH0KICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZChub2RlLCBuZXcgTm90KGV4dHJhY3QoY29uc3RhbnQpKSk7CiAgICB9CiAgICByZXR1cm4gcmVwb3J0KAogICAgICAgIG5vZGUsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZS53aXRoQXJndW1lbnRzKGNvbnN0YW50LAogICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGUsIGNvbnN0YW50LmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogIH0KCiAgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgZmluYWwgbGlicmFyeVJlZmVyZW5jZSA9CiAgICAgICAgbm9kZS52YWx1ZS5zdGFydHNXaXRoKCdfJykgPyBsaWJyYXJ5T2Yobm9kZSkucmVmZXJlbmNlIDogbnVsbDsKICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IFN5bWJvbENvbnN0YW50KG5vZGUudmFsdWUsIGxpYnJhcnlSZWZlcmVuY2UpKTsKICB9CgogIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0YW50IGNvbnN0YW50ID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKAogICAgICAgICAgbm9kZSwKICAgICAgICAgIG5ldyBJbnN0YW50aWF0aW9uKGV4dHJhY3QoY29uc3RhbnQpLAogICAgICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAoKHQpID0+IGVudi5zdWJzdGl0dXRlVHlwZSh0KSkudG9MaXN0KCkpKTsKICAgIH0KICAgIGlmIChjb25zdGFudCBpcyBUZWFyT2ZmQ29uc3RhbnQpIHsKICAgICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGggPT0KICAgICAgICAgIGNvbnN0YW50LnByb2NlZHVyZS5mdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICBmaW5hbCB0eXBlQXJndW1lbnRzID0gZXZhbHVhdGVEYXJ0VHlwZXMobm9kZSwgbm9kZS50eXBlQXJndW1lbnRzKTsKICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKAogICAgICAgICAgICBuZXcgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChjb25zdGFudCwgdHlwZUFyZ3VtZW50cykpOwogICAgICB9CiAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKAogICAgICAgICAgbm9kZSwKICAgICAgICAgICdUaGUgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIHN1cHBsaWVkIGluIHRoZSBwYXJ0aWFsIGluc3RhbnRpYXRpb24gJwogICAgICAgICAgJ2RvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgb2YgdGhlICRjb25zdGFudC4nKTsKICAgIH0KICAgIC8vIFRoZSBpbm5lciBleHByZXNzaW9uIGluIGFuIGluc3RhbnRpYXRpb24gY2FuIG5ldmVyIGJlIG51bGwsIHNpbmNlCiAgICAvLyBpbnN0YW50aWF0aW9ucyBhcmUgb25seSBpbmZlcnJlZCBvbiBkaXJlY3QgcmVmZXJlbmNlcyB0byBkZWNsYXJhdGlvbnMuCiAgICByZXR1cm4gcmVwb3J0SW52YWxpZCgKICAgICAgICBub2RlLCAnT25seSB0ZWFyLW9mZiBjb25zdGFudHMgY2FuIGJlIHBhcnRpYWxseSBpbnN0YW50aWF0ZWQuJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKENoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUpIHsKICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgbm9kZSwgdGVtcGxhdGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnkud2l0aEFyZ3VtZW50cyhub2RlLmltcG9ydC5uYW1lKSk7CiAgfQoKICAvLyBIZWxwZXIgbWV0aG9kczoKCiAgYm9vbCBpc1plcm8oQ29uc3RhbnQgdmFsdWUpID0+CiAgICAgICh2YWx1ZSBpcyBJbnRDb25zdGFudCAmJiB2YWx1ZS52YWx1ZSA9PSAwKSB8fAogICAgICAodmFsdWUgaXMgSmF2YVNjcmlwdEludENvbnN0YW50ICYmIHZhbHVlLmJpZ0ludFZhbHVlID09IEJpZ0ludC56ZXJvKSB8fAogICAgICAodmFsdWUgaXMgRG91YmxlQ29uc3RhbnQgJiYgdmFsdWUudmFsdWUgPT0gMCk7CgogIGJvb2wgaXNOYU4oQ29uc3RhbnQgdmFsdWUpID0+IHZhbHVlIGlzIERvdWJsZUNvbnN0YW50ICYmIHZhbHVlLnZhbHVlLmlzTmFOOwoKICBib29sIGhhc1ByaW1pdGl2ZUVxdWFsKENvbnN0YW50IGNvbnN0YW50KSB7CiAgICAvLyBUT0RPKGFza2VzYywgZmlzaHl0aGVmaXNoKTogTWFrZSBzdXJlIHRoZSBjb3JyZWN0IGNsYXNzIGlzIGluZmVycmVkCiAgICAvLyB3aGVuIHdlIGNsZWFuIHVwIEphdmFTY3JpcHQgaW50IGNvbnN0YW50IGhhbmRsaW5nLgogICAgRGFydFR5cGUgdHlwZSA9IGNvbnN0YW50LmdldFR5cGUodHlwZUVudmlyb25tZW50KTsKICAgIHJldHVybiAhKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiAhY2xhc3NIYXNQcmltaXRpdmVFcXVhbCh0eXBlLmNsYXNzTm9kZSkpOwogIH0KCiAgYm9vbCBjbGFzc0hhc1ByaW1pdGl2ZUVxdWFsKENsYXNzIGtsYXNzKSB7CiAgICBib29sIGNhY2hlZCA9IHByaW1pdGl2ZUVxdWFsQ2FjaGVba2xhc3NdOwogICAgaWYgKGNhY2hlZCAhPSBudWxsKSByZXR1cm4gY2FjaGVkOwogICAgZm9yIChQcm9jZWR1cmUgcHJvY2VkdXJlIGluIGtsYXNzLnByb2NlZHVyZXMpIHsKICAgICAgaWYgKHByb2NlZHVyZS5raW5kID09IFByb2NlZHVyZUtpbmQuT3BlcmF0b3IgJiYKICAgICAgICAgIHByb2NlZHVyZS5uYW1lLm5hbWUgPT0gJz09JyAmJgogICAgICAgICAgIXByb2NlZHVyZS5pc0Fic3RyYWN0ICYmCiAgICAgICAgICAhcHJvY2VkdXJlLmlzRm9yd2FyZGluZ1N0dWIpIHsKICAgICAgICByZXR1cm4gcHJpbWl0aXZlRXF1YWxDYWNoZVtrbGFzc10gPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGtsYXNzLnN1cGVydHlwZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZQogICAgcmV0dXJuIHByaW1pdGl2ZUVxdWFsQ2FjaGVba2xhc3NdID0KICAgICAgICBjbGFzc0hhc1ByaW1pdGl2ZUVxdWFsKGtsYXNzLnN1cGVydHlwZS5jbGFzc05vZGUpOwogIH0KCiAgQm9vbENvbnN0YW50IG1ha2VCb29sQ29uc3RhbnQoYm9vbCB2YWx1ZSkgPT4KICAgICAgdmFsdWUgPyB0cnVlQ29uc3RhbnQgOiBmYWxzZUNvbnN0YW50OwoKICBEb3VibGVDb25zdGFudCBtYWtlRG91YmxlQ29uc3RhbnQoZG91YmxlIHZhbHVlKSB7CiAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAvLyBDb252ZXJ0IHRvIGFuIGludGVnZXIgd2hlbiBwb3NzaWJsZSAobWF0Y2hpbmcgdGhlIHJ1bnRpbWUgYmVoYXZpb3IKICAgICAgLy8gb2YgYGlzIGludGApLgogICAgICBpZiAodmFsdWUuaXNGaW5pdGUgJiYgIWlkZW50aWNhbCh2YWx1ZSwgLTAuMCkpIHsKICAgICAgICB2YXIgaSA9IHZhbHVlLnRvSW50KCk7CiAgICAgICAgaWYgKHZhbHVlID09IGkudG9Eb3VibGUoKSkgcmV0dXJuIG5ldyBKYXZhU2NyaXB0SW50Q29uc3RhbnQoaSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgRG91YmxlQ29uc3RhbnQodmFsdWUpOwogIH0KCiAgYm9vbCBpc1N1YnR5cGUoQ29uc3RhbnQgY29uc3RhbnQsIERhcnRUeXBlIHR5cGUpIHsKICAgIERhcnRUeXBlIGNvbnN0YW50VHlwZSA9IGNvbnN0YW50LmdldFR5cGUodHlwZUVudmlyb25tZW50KTsKICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgIGlmIChjb25zdGFudFR5cGUgPT0gdHlwZUVudmlyb25tZW50LmludFR5cGUgJiYKICAgICAgICAgIHR5cGUgPT0gdHlwZUVudmlyb25tZW50LmRvdWJsZVR5cGUpIHsKICAgICAgICAvLyBXaXRoIEpTIHNlbWFudGljcywgYW4gaW50ZWdlciBpcyBhbHNvIGEgZG91YmxlLgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgICBpZiAoY29uc3RhbnRUeXBlID09IHR5cGVFbnZpcm9ubWVudC5kb3VibGVUeXBlICYmCiAgICAgICAgICB0eXBlID09IHR5cGVFbnZpcm9ubWVudC5pbnRUeXBlKSB7CiAgICAgICAgZG91YmxlIHZhbHVlID0gKGNvbnN0YW50IGFzIERvdWJsZUNvbnN0YW50KS52YWx1ZTsKICAgICAgICBpZiAodmFsdWUuaXNGaW5pdGUgJiYgdmFsdWUgPT0gdmFsdWUudHJ1bmNhdGVUb0RvdWJsZSgpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoY29uc3RhbnRUeXBlLCB0eXBlKTsKICB9CgogIENvbnN0YW50IGVuc3VyZUlzU3VidHlwZShDb25zdGFudCBjb25zdGFudCwgRGFydFR5cGUgdHlwZSwgVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKCFpc1N1YnR5cGUoY29uc3RhbnQsIHR5cGUpKSB7CiAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICBub2RlLAogICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgIGNvbnN0YW50LCB0eXBlLCBjb25zdGFudC5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgIH0KICAgIHJldHVybiBjb25zdGFudDsKICB9CgogIExpc3Q8RGFydFR5cGU+IGV2YWx1YXRlVHlwZUFyZ3VtZW50cyhUcmVlTm9kZSBub2RlLCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gZXZhbHVhdGVEYXJ0VHlwZXMobm9kZSwgYXJndW1lbnRzLnR5cGVzKTsKICB9CgogIExpc3Q8RGFydFR5cGU+IGV2YWx1YXRlU3VwZXJUeXBlQXJndW1lbnRzKFRyZWVOb2RlIG5vZGUsIFN1cGVydHlwZSB0eXBlKSB7CiAgICByZXR1cm4gZXZhbHVhdGVEYXJ0VHlwZXMobm9kZSwgdHlwZS50eXBlQXJndW1lbnRzKTsKICB9CgogIExpc3Q8RGFydFR5cGU+IGV2YWx1YXRlRGFydFR5cGVzKFRyZWVOb2RlIG5vZGUsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICAvLyBUT0RPOiBPbmNlIHRoZSBmcm9udGVuZCBndWFyYW50ZWVzIHRoYXQgdGhlcmUgYXJlIG5vIGZyZWUgdHlwZSB2YXJpYWJsZXMKICAgIC8vIGxlZnQgb3ZlciBhZnRlciBzdWJzdGl0dXRpb24sIHdlIGNhbiBlbmFibGUgdGhpcyBzaG9ydGN1dCBhZ2FpbjoKICAgIC8vIGlmIChlbnYuaXNFbXB0eSkgcmV0dXJuIHR5cGVzOwogICAgcmV0dXJuIHR5cGVzLm1hcCgodCkgPT4gZXZhbHVhdGVEYXJ0VHlwZShub2RlLCB0KSkudG9MaXN0KCk7CiAgfQoKICBEYXJ0VHlwZSBldmFsdWF0ZURhcnRUeXBlKFRyZWVOb2RlIG5vZGUsIERhcnRUeXBlIHR5cGUpIHsKICAgIGZpbmFsIHJlc3VsdCA9IGVudi5zdWJzdGl0dXRlVHlwZSh0eXBlKTsKCiAgICBpZiAoIWlzSW5zdGFudGlhdGVkKHJlc3VsdCkpIHsKICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIud2l0aEFyZ3VtZW50cyh0eXBlKSk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8Q29uc3RhbnQ+IGV2YWx1YXRlUG9zaXRpb25hbEFyZ3VtZW50cyhBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLnBvc2l0aW9uYWwubWFwKChFeHByZXNzaW9uIG5vZGUpIHsKICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZSk7CiAgICB9KS50b0xpc3QoKTsKICB9CgogIE1hcDxTdHJpbmcsIENvbnN0YW50PiBldmFsdWF0ZU5hbWVkQXJndW1lbnRzKEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChhcmd1bWVudHMubmFtZWQuaXNFbXB0eSkgcmV0dXJuIGNvbnN0IDxTdHJpbmcsIENvbnN0YW50Pnt9OwoKICAgIGZpbmFsIE1hcDxTdHJpbmcsIENvbnN0YW50PiBuYW1lZCA9IHt9OwogICAgYXJndW1lbnRzLm5hbWVkLmZvckVhY2goKE5hbWVkRXhwcmVzc2lvbiBwYWlyKSB7CiAgICAgIG5hbWVkW3BhaXIubmFtZV0gPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKHBhaXIudmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gbmFtZWQ7CiAgfQoKICBBcmd1bWVudHMgdW5ldmFsdWF0ZWRBcmd1bWVudHMoTGlzdDxDb25zdGFudD4gcG9zaXRpb25hbEFyZ3MsCiAgICAgIE1hcDxTdHJpbmcsIENvbnN0YW50PiBuYW1lZEFyZ3MsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICBmaW5hbCBwb3NpdGlvbmFsID0gbmV3IExpc3Q8RXhwcmVzc2lvbj4ocG9zaXRpb25hbEFyZ3MubGVuZ3RoKTsKICAgIGZpbmFsIG5hbWVkID0gbmV3IExpc3Q8TmFtZWRFeHByZXNzaW9uPihuYW1lZEFyZ3MubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25hbEFyZ3MubGVuZ3RoOyArK2kpIHsKICAgICAgcG9zaXRpb25hbFtpXSA9IGV4dHJhY3QocG9zaXRpb25hbEFyZ3NbaV0pOwogICAgfQogICAgaW50IGkgPSAwOwogICAgbmFtZWRBcmdzLmZvckVhY2goKFN0cmluZyBuYW1lLCBDb25zdGFudCB2YWx1ZSkgewogICAgICBuYW1lZFtpKytdID0gbmV3IE5hbWVkRXhwcmVzc2lvbihuYW1lLCBleHRyYWN0KHZhbHVlKSk7CiAgICB9KTsKICAgIHJldHVybiBuZXcgQXJndW1lbnRzKHBvc2l0aW9uYWwsIG5hbWVkOiBuYW1lZCwgdHlwZXM6IHR5cGVzKTsKICB9CgogIENvbnN0YW50IGNhbm9uaWNhbGl6ZShDb25zdGFudCBjb25zdGFudCkgewogICAgcmV0dXJuIGNhbm9uaWNhbGl6YXRpb25DYWNoZS5wdXRJZkFic2VudChjb25zdGFudCwgKCkgPT4gY29uc3RhbnQpOwogIH0KCiAgd2l0aE5ld0luc3RhbmNlQnVpbGRlcihDbGFzcyBrbGFzcywgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywgZm4oKSkgewogICAgSW5zdGFuY2VCdWlsZGVyIG9sZCA9IGluc3RhbmNlQnVpbGRlcjsKICAgIHRyeSB7CiAgICAgIGluc3RhbmNlQnVpbGRlciA9IG5ldyBJbnN0YW5jZUJ1aWxkZXIodGhpcywga2xhc3MsIHR5cGVBcmd1bWVudHMpOwogICAgICByZXR1cm4gZm4oKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGluc3RhbmNlQnVpbGRlciA9IG9sZDsKICAgIH0KICB9CgogIHdpdGhOZXdFbnZpcm9ubWVudChmbigpKSB7CiAgICBmaW5hbCBFdmFsdWF0aW9uRW52aXJvbm1lbnQgb2xkRW52ID0gZW52OwogICAgdHJ5IHsKICAgICAgZW52ID0gbmV3IEV2YWx1YXRpb25FbnZpcm9ubWVudCgpOwogICAgICByZXR1cm4gZm4oKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGVudiA9IG9sZEVudjsKICAgIH0KICB9CgogIENvbnN0YW50IGV2YWx1YXRlQmluYXJ5Qml0T3BlcmF0aW9uKFN0cmluZyBvcCwgaW50IGEsIGludCBiLCBUcmVlTm9kZSBub2RlKSB7CiAgICBpbnQgcmVzdWx0OwogICAgc3dpdGNoIChvcCkgewogICAgICBjYXNlICd8JzoKICAgICAgICByZXN1bHQgPSBhIHwgYjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnJic6CiAgICAgICAgcmVzdWx0ID0gYSAmIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ14nOgogICAgICAgIHJlc3VsdCA9IGEgXiBiOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudChyZXN1bHQpKTsKICAgIH0KICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KHJlc3VsdCkpOwogIH0KCiAgQ29uc3RhbnQgZXZhbHVhdGVCaW5hcnlTaGlmdE9wZXJhdGlvbihTdHJpbmcgb3AsIGludCBhLCBpbnQgYiwgVHJlZU5vZGUgbm9kZSwKICAgICAge25lZ2F0aXZlUmVjZWl2ZXI6IGZhbHNlfSkgewogICAgaW50IHJlc3VsdDsKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAnPDwnOgogICAgICAgIHJlc3VsdCA9IGEgPDwgYjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnPj4nOgogICAgICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgICAgICBpZiAobmVnYXRpdmVSZWNlaXZlcikgewogICAgICAgICAgICBjb25zdCBzaWduQml0ID0gMHg4MDAwMDAwMDsKICAgICAgICAgICAgYSAtPSAoYSAmIHNpZ25CaXQpIDw8IDE7CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQgPSBhID4+IGI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IGEgPj4gYjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJz4+Pic6CiAgICAgICAgLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBJbXBsZW1lbnQgSlMgc2VtYW50aWNzIGZvciBgPj4+YC4KICAgICAgICByZXN1bHQgPSBiID49IDY0ID8gMCA6IChhID4+IGIpICYgKCgxIDw8ICg2NCAtIGIpKSAtIDEpOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudChyZXN1bHQudG9VbnNpZ25lZCgzMikpKTsKICAgIH0KICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KHJlc3VsdCkpOwogIH0KCiAgQ29uc3RhbnQgZXZhbHVhdGVCaW5hcnlOdW1lcmljT3BlcmF0aW9uKAogICAgICBTdHJpbmcgb3AsIG51bSBhLCBudW0gYiwgVHJlZU5vZGUgbm9kZSkgewogICAgbnVtIHJlc3VsdDsKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAnKyc6CiAgICAgICAgcmVzdWx0ID0gYSArIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJy0nOgogICAgICAgIHJlc3VsdCA9IGEgLSBiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICcqJzoKICAgICAgICByZXN1bHQgPSBhICogYjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnLyc6CiAgICAgICAgcmVzdWx0ID0gYSAvIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ34vJzoKICAgICAgICByZXN1bHQgPSBhIH4vIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJyUnOgogICAgICAgIHJlc3VsdCA9IGEgJSBiOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmIChyZXN1bHQgaXMgaW50KSB7CiAgICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50KHJlc3VsdCkpOwogICAgICB9CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KHJlc3VsdC50b1NpZ25lZCg2NCkpKTsKICAgIH0KICAgIGlmIChyZXN1bHQgaXMgZG91YmxlKSB7CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobWFrZURvdWJsZUNvbnN0YW50KHJlc3VsdCkpOwogICAgfQoKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAnPCc6CiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoYSA8IGIpOwogICAgICBjYXNlICc8PSc6CiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoYSA8PSBiKTsKICAgICAgY2FzZSAnPj0nOgogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KGEgPj0gYik7CiAgICAgIGNhc2UgJz4nOgogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KGEgPiBiKTsKICAgIH0KCiAgICByZXR1cm4gcmVwb3J0SW52YWxpZChub2RlLCAiVW5leHBlY3RlZCBiaW5hcnkgbnVtZXJpYyBvcGVyYXRpb24gJyRvcCcuIik7CiAgfQoKICBMaWJyYXJ5IGxpYnJhcnlPZihUcmVlTm9kZSBub2RlKSB7CiAgICAvLyBUaGUgdHJlZSBzdHJ1Y3R1cmUgb2YgdGhlIGtlcm5lbCBBU1QgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSBhbiBlbmNsb3NpbmcKICAgIC8vIGxpYnJhcnkuCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAobm9kZSBpcyBMaWJyYXJ5KSByZXR1cm4gbm9kZTsKICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgfQogIH0KfQoKLy8vIEhvbGRzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGEgY29uc3RhbnQgb2JqZWN0LCBuYW1lbHkKLy8vICAgKiB0aGUgW2tsYXNzXSBiZWluZyBpbnN0YW50aWF0ZWQKLy8vICAgKiB0aGUgW3R5cGVBcmd1bWVudHNdIHVzZWQgZm9yIHRoZSBpbnN0YW50aWF0aW9uCi8vLyAgICogdGhlIFtmaWVsZHNdIHRoZSBpbnN0YW5jZSB3aWxsIG9idGFpbiAoYWxsIGZpZWxkcyBmcm9tIHRoZQovLy8gICAgIGluc3RhbnRpYXRlZCBba2xhc3NdIHVwIHRvIHRoZSBbT2JqZWN0XSBrbGFzcykuCmNsYXNzIEluc3RhbmNlQnVpbGRlciB7CiAgQ29uc3RhbnRFdmFsdWF0b3IgZXZhbHVhdG9yOwoKICAvLy8gVGhlIGNsYXNzIG9mIHRoZSBuZXcgaW5zdGFuY2UuCiAgZmluYWwgQ2xhc3Mga2xhc3M7CgogIC8vLyBUaGUgdmFsdWVzIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIG5ldyBpbnN0YW5jZS4KICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICAvLy8gVGhlIGZpZWxkIHZhbHVlcyBvZiB0aGUgbmV3IGluc3RhbmNlLgogIGZpbmFsIE1hcDxGaWVsZCwgQ29uc3RhbnQ+IGZpZWxkcyA9IDxGaWVsZCwgQ29uc3RhbnQ+e307CgogIGZpbmFsIExpc3Q8QXNzZXJ0U3RhdGVtZW50PiBhc3NlcnRzID0gPEFzc2VydFN0YXRlbWVudD5bXTsKCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiB1bnVzZWRBcmd1bWVudHMgPSA8RXhwcmVzc2lvbj5bXTsKCiAgSW5zdGFuY2VCdWlsZGVyKHRoaXMuZXZhbHVhdG9yLCB0aGlzLmtsYXNzLCB0aGlzLnR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHNldEZpZWxkVmFsdWUoRmllbGQgZmllbGQsIENvbnN0YW50IGNvbnN0YW50KSB7CiAgICBmaWVsZHNbZmllbGRdID0gY29uc3RhbnQ7CiAgfQoKICBJbnN0YW5jZUNvbnN0YW50IGJ1aWxkSW5zdGFuY2UoKSB7CiAgICBhc3NlcnQoYXNzZXJ0cy5pc0VtcHR5KTsKICAgIGZpbmFsIE1hcDxSZWZlcmVuY2UsIENvbnN0YW50PiBmaWVsZFZhbHVlcyA9IDxSZWZlcmVuY2UsIENvbnN0YW50Pnt9OwogICAgZmllbGRzLmZvckVhY2goKEZpZWxkIGZpZWxkLCBDb25zdGFudCB2YWx1ZSkgewogICAgICBhc3NlcnQodmFsdWUgaXMhIFVuZXZhbHVhdGVkQ29uc3RhbnQpOwogICAgICBmaWVsZFZhbHVlc1tmaWVsZC5yZWZlcmVuY2VdID0gdmFsdWU7CiAgICB9KTsKICAgIGFzc2VydCh1bnVzZWRBcmd1bWVudHMuaXNFbXB0eSk7CiAgICByZXR1cm4gbmV3IEluc3RhbmNlQ29uc3RhbnQoa2xhc3MucmVmZXJlbmNlLCB0eXBlQXJndW1lbnRzLCBmaWVsZFZhbHVlcyk7CiAgfQoKICBJbnN0YW5jZUNyZWF0aW9uIGJ1aWxkVW5ldmFsdWF0ZWRJbnN0YW5jZSgpIHsKICAgIGZpbmFsIE1hcDxSZWZlcmVuY2UsIEV4cHJlc3Npb24+IGZpZWxkVmFsdWVzID0gPFJlZmVyZW5jZSwgRXhwcmVzc2lvbj57fTsKICAgIGZpZWxkcy5mb3JFYWNoKChGaWVsZCBmaWVsZCwgQ29uc3RhbnQgdmFsdWUpIHsKICAgICAgZmllbGRWYWx1ZXNbZmllbGQucmVmZXJlbmNlXSA9IGV2YWx1YXRvci5leHRyYWN0KHZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBJbnN0YW5jZUNyZWF0aW9uKAogICAgICAgIGtsYXNzLnJlZmVyZW5jZSwgdHlwZUFyZ3VtZW50cywgZmllbGRWYWx1ZXMsIGFzc2VydHMsIHVudXNlZEFyZ3VtZW50cyk7CiAgfQp9CgovLy8gSG9sZHMgYW4gZW52aXJvbm1lbnQgb2YgdHlwZSBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMuCmNsYXNzIEV2YWx1YXRpb25FbnZpcm9ubWVudCB7CiAgLy8vIFRoZSB2YWx1ZXMgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBpbiBzY29wZS4KICBmaW5hbCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IF90eXBlVmFyaWFibGVzID0KICAgICAgPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwoKICAvLy8gVGhlIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVycy92YXJpYWJsZXMgaW4gc2NvcGUuCiAgZmluYWwgTWFwPFZhcmlhYmxlRGVjbGFyYXRpb24sIENvbnN0YW50PiBfdmFyaWFibGVzID0KICAgICAgPFZhcmlhYmxlRGVjbGFyYXRpb24sIENvbnN0YW50Pnt9OwoKICAvLy8gVGhlIHZhcmlhYmxlcyB0aGF0IGhvbGQgdW5ldmFsdWF0ZWQgY29uc3RhbnRzLgogIC8vLwogIC8vLyBWYXJpYWJsZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGlzIHNldCB3aGVuIGxvb2tlZCB1cCwgbGVhdmluZyBvbmx5IHRoZQogIC8vLyB1bnJlYWQgdmFyaWFibGVzIGF0IHRoZSBlbmQuCiAgZmluYWwgU2V0PFZhcmlhYmxlRGVjbGFyYXRpb24+IF91bnJlYWRVbmV2YWx1YXRlZFZhcmlhYmxlcyA9CiAgICAgIG5ldyBTZXQ8VmFyaWFibGVEZWNsYXJhdGlvbj4oKTsKCiAgLy8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgZW1wdHkuCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfdHlwZVZhcmlhYmxlcy5pc0VtcHR5ICYmIF92YXJpYWJsZXMuaXNFbXB0eTsKCiAgdm9pZCBhZGRUeXBlUGFyYW1ldGVyVmFsdWUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIERhcnRUeXBlIHZhbHVlKSB7CiAgICBhc3NlcnQoIV90eXBlVmFyaWFibGVzLmNvbnRhaW5zS2V5KHBhcmFtZXRlcikpOwogICAgX3R5cGVWYXJpYWJsZXNbcGFyYW1ldGVyXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBhZGRWYXJpYWJsZVZhbHVlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIENvbnN0YW50IHZhbHVlKSB7CiAgICBfdmFyaWFibGVzW3ZhcmlhYmxlXSA9IHZhbHVlOwogICAgaWYgKHZhbHVlIGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgX3VucmVhZFVuZXZhbHVhdGVkVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBsb29rdXBQYXJhbWV0ZXJWYWx1ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlcikgewogICAgZmluYWwgRGFydFR5cGUgdmFsdWUgPSBfdHlwZVZhcmlhYmxlc1twYXJhbWV0ZXJdOwogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgQ29uc3RhbnQgbG9va3VwVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgQ29uc3RhbnQgdmFsdWUgPSBfdmFyaWFibGVzW3ZhcmlhYmxlXTsKICAgIGlmICh2YWx1ZSBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgIF91bnJlYWRVbmV2YWx1YXRlZFZhcmlhYmxlcy5yZW1vdmUodmFyaWFibGUpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgLy8vIFRoZSB1bmV2YWx1YXRlZCBjb25zdGFudHMgb2YgdmFyaWFibGVzIHRoYXQgd2VyZSBuZXZlciByZWFkLgogIEl0ZXJhYmxlPFVuZXZhbHVhdGVkQ29uc3RhbnQ+IGdldCB1bmV2YWx1YXRlZFVucmVhZENvbnN0YW50cyB7CiAgICBpZiAoX3VucmVhZFVuZXZhbHVhdGVkVmFyaWFibGVzLmlzRW1wdHkpIHJldHVybiBjb25zdCBbXTsKICAgIHJldHVybiBfdW5yZWFkVW5ldmFsdWF0ZWRWYXJpYWJsZXMubWFwPFVuZXZhbHVhdGVkQ29uc3RhbnQ+KAogICAgICAgIChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSA9PiBfdmFyaWFibGVzW3ZhcmlhYmxlXSk7CiAgfQoKICBEYXJ0VHlwZSBzdWJzdGl0dXRlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAoX3R5cGVWYXJpYWJsZXMuaXNFbXB0eSkgcmV0dXJuIHR5cGU7CiAgICByZXR1cm4gc3Vic3RpdHV0ZSh0eXBlLCBfdHlwZVZhcmlhYmxlcyk7CiAgfQp9CgovLyBVc2VkIGFzIGNvbnRyb2wtZmxvdyB0byBhYm9ydCB0aGUgY3VycmVudCBldmFsdWF0aW9uLgpjbGFzcyBfQWJvcnREdWVUb0Vycm9yIHsKICBmaW5hbCBUcmVlTm9kZSBub2RlOwogIGZpbmFsIE1lc3NhZ2UgbWVzc2FnZTsKICBmaW5hbCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0OwoKICBfQWJvcnREdWVUb0Vycm9yKHRoaXMubm9kZSwgdGhpcy5tZXNzYWdlLCB7dGhpcy5jb250ZXh0fSk7Cn0KCmNsYXNzIF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24gewogIGZpbmFsIFRyZWVOb2RlIG5vZGU7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24odGhpcy5ub2RlLCB0aGlzLm1lc3NhZ2UpOwp9CgphYnN0cmFjdCBjbGFzcyBFcnJvclJlcG9ydGVyIHsKICBjb25zdCBFcnJvclJlcG9ydGVyKCk7CgogIHZvaWQgcmVwb3J0KExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpOwoKICB2b2lkIHJlcG9ydEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpOwp9CgpjbGFzcyBTaW1wbGVFcnJvclJlcG9ydGVyIGltcGxlbWVudHMgRXJyb3JSZXBvcnRlciB7CiAgY29uc3QgU2ltcGxlRXJyb3JSZXBvcnRlcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydChMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0KSB7CiAgICBfcmVwb3J0KG1lc3NhZ2UpOwogICAgZm9yIChMb2NhdGVkTWVzc2FnZSBjb250ZXh0TWVzc2FnZSBpbiBjb250ZXh0KSB7CiAgICAgIF9yZXBvcnQoY29udGV4dE1lc3NhZ2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBJZ25vcmVkCiAgfQoKICB2b2lkIF9yZXBvcnQoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSkgewogICAgcmVwb3J0TWVzc2FnZShtZXNzYWdlLnVyaSwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLm1lc3NhZ2UpOwogIH0KCiAgdm9pZCByZXBvcnRNZXNzYWdlKFVyaSB1cmksIGludCBvZmZzZXQsIFN0cmluZyBtZXNzYWdlKSB7CiAgICBpby5leGl0Q29kZSA9IDQyOwogICAgaW8uc3RkZXJyLndyaXRlbG4oJyR1cmk6JG9mZnNldCBDb25zdGFudCBldmFsdWF0aW9uIGVycm9yOiAkbWVzc2FnZScpOwogIH0KfQoKY2xhc3MgSXNJbnN0YW50aWF0ZWRWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBmaW5hbCBfYXZhaWxhYmxlVmFyaWFibGVzID0gbmV3IFNldDxUeXBlUGFyYW1ldGVyPigpOwoKICBib29sIGlzSW5zdGFudGlhdGVkKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiB0eXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIGJvb2wgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpIHsKICAgIHRocm93ICdBIHZpc2l0b3IgbWV0aG9kIHNlZW1zIHRvIGJlIHVuaW1wbGVtZW50ZWQhJzsKICB9CgogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiB0cnVlOwogIGJvb2wgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlKSA9PiB0cnVlOwogIGJvb2wgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSBub2RlKSA9PiB0cnVlOwogIGJvb2wgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gdHJ1ZTsKCiAgYm9vbCB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIHJldHVybiBfYXZhaWxhYmxlVmFyaWFibGVzLmNvbnRhaW5zKG5vZGUucGFyYW1ldGVyKTsKICB9CgogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUudHlwZUFyZ3VtZW50cwogICAgICAgIC5ldmVyeSgoRGFydFR5cGUgdHlwZUFyZ3VtZW50KSA9PiB0eXBlQXJndW1lbnQuYWNjZXB0KHRoaXMpKTsKICB9CgogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGZpbmFsIHBhcmFtZXRlcnMgPSBub2RlLnR5cGVQYXJhbWV0ZXJzOwogICAgX2F2YWlsYWJsZVZhcmlhYmxlcy5hZGRBbGwocGFyYW1ldGVycyk7CiAgICBmaW5hbCBib29sIHJlc3VsdCA9IG5vZGUucmV0dXJuVHlwZS5hY2NlcHQodGhpcykgJiYKICAgICAgICBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmV2ZXJ5KChwKSA9PiBwLmFjY2VwdCh0aGlzKSkgJiYKICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVycy5ldmVyeSgocCkgPT4gcC50eXBlLmFjY2VwdCh0aGlzKSk7CiAgICBfYXZhaWxhYmxlVmFyaWFibGVzLnJlbW92ZUFsbChwYXJhbWV0ZXJzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUudW5hbGlhcy5hY2NlcHQodGhpcyk7CiAgfQp9Cgpib29sIF9pc0Zvcm1hbFBhcmFtZXRlcihWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgZmluYWwgcGFyZW50ID0gdmFyaWFibGUucGFyZW50OwogIGlmIChwYXJlbnQgaXMgRnVuY3Rpb25Ob2RlKSB7CiAgICByZXR1cm4gcGFyZW50LnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmNvbnRhaW5zKHZhcmlhYmxlKSB8fAogICAgICAgIHBhcmVudC5uYW1lZFBhcmFtZXRlcnMuY29udGFpbnModmFyaWFibGUpOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KiR4ATk48AVAEUEpFGQRNTCAES1EvIgEiARgBIi4kKSUrLwEtAR0JGBElISkuKCMlEiorJzE1LCYzMzItMjwsLSgtMSYBKgFMSRwkHSwZISovAUUBRyYeID4xFAIBGR0eLCUhHB8kHS9ODxoSFRsTIhcWLTIEAgE1HEoxKhY1Jy48ATwBJwIBMSItKQFPGRwiGikBGBQuFxogGCccIzNJJkUBKgEpOAE4MTQzNjIBF1A/REsKBgQBJy40CBEEATMuNAgRBAEbLjQuNjQyRggRBAEjLjRBCBEEAScuNDRBCBEEAR8uNDZEPDcIEQQBSy40Njw3CBEEASsyEQQBRzMrBgQBRy4vRR0ICAQBJQEpRzlJPCofTCMIBkc8Kh9MIwgGHTkGEQQBNzIBJBpPQE4bATNAMk5OPBkMCg9JCAYRBAEbNRo2G0QfATM9FwoPNihLCggTCAQBSAErSwQBIyctNxtGHy48CE06BicEASUyKAQBJzgcHUohMDwIBikEAScYOgYpBAEzOAQBJRg6BigEATE4BAElGDoGKAQBMTgEATsYOgYzBAExGDoGLgQBNScrM0YNQBMGBAEuL1EEAUgfLwYBQC8IBAFKKzQiBlEmBAEuLTgGEQQCAT0iKSopHSklARoiAUUBNyUyASgBODw+ASoBIx1FTAFJOwFKAUkBURpLMy84KCspLkoVTx9ORwYpISQgKyEgISMgIyMhBwQBIjMaBisEAS4vQxoGPwQBQEpMNCciEwo2SToIFSYqOVABMkAyKjkdTgg9UDI6RUVENS4INi8GBAFJUEEEAU1JNjsEAT5GMkYxBAFNQ0khKjUtLSgGFwQBT05LN0dLRSMBOyMBPC0pLycaBiYEASgqBAE2LkEEATQuQAQBNC5ABAFATRo1MCIVF0gWKU8PIA44FiITCggNIgZMEwQBPSspBAE9ChkUEBgGBAFIICoNFAYEASYjBAElLjMEAR9GExpOBAE2AScpBAElTR4fSTUEASs5BAErOQQBJz04BAE1JyArOjwKJignQUNACggGR05KLiEEAScZFUwGKEAzHAYcBAEzKEAqHwYcBAElGRVLBic/MxwGHAQBMSc/KR8GHAQBJRkVSwYnSi0cBhwEATEnSigeBhwEATUTTgQBOzE0PCBHBi04HBA2OgYcHE4GAUU6ASsaEDFOHwYBSk0UNQFPSAg1SAYBRwE6Ty4GASY9NE82IxcnPxdQCiU9I1AKPgoIBAExSzggCEgnPgo4Oy9CCgohTgg8CAQBKE8HTkYHRkghQTBMRFAgASoLCwsLCwwLCwsLDAwLDAsMDAwNDwcBJCEBIwEzMTwGAR4oEwYeMQY2AREEASwGFCwGGi0GGSUGHkAGJBkGIy8GKDABMw4NDA0NDRAPCgwMDw0NDwsKCgoLDA8ODQ4MDQwLCw0MBQEuNCsEAR8fJCouLiU4PAE3AUobQFAKSTAwQidHMgpQQ0UyCgFRGjIhK0sMCkMqK0ExQCJJMSkdLEE9OTdROCkdHz05MikTIh0/KwwKAU9CCgoIBAEwTAEfIScVRhUIShxAPiweKUgKTCNOKURCMBIjOjIREiE6Gy42CggNDh9ATgYEATMuBAExPSoBRSU1AR8aED1LBgEmAVFCLyIBURhJLR4IAT4eMAgBJiYlKCgjNA8XEkU/CAYBTiYjFhQxKyNFDhsWSRkeMDYKCE8jFhknTio/EFEOOToUJ05ILQ45OgoqLUY7OCFDMh5IIh0zSCBAQQ4MASs4IUMyHkgjHTNRPjAODAEYFhYWOiM4IyYgNCA1IyYgMTgXFxglIS0wFyVFRDMQNCBKATM3LxU6Izg0IDU1OAwuNzsbFkkYGy02DDYfNDE1ChcSRRQaKTIILTM3FxJFFBopNQgjFhlGCiotAT8zHDExMAoXEkUUGikyCCsjLSUYFiNEFiNEFiNEDAoIKzYGARhPBAEzPR8TOxMfUAYdESQvAUVHGgwBGRRHIRgsNAoXEkQnESQxAUVHGgwBGRRHIRgsNAoXEkQnEScTMg8XEkQnBgQBO0clMC01JhM5QxMaEEc1DRUaQE4GBAEnKzElUQg/JzAKCCFPBgFFRCFPCEMmH1ArNgYTDjsoBAEXGksuBAEnTEguB08yOEIyEhQ2MgYcOwZJBAEjIykdHi8/DgoXEjUzKDM8ChcSNTMPF0wVCAgEATdEOEczLCkkHRE1CihHTSckDxcSPysIBiNFNiglM0MRSTQrCghGBk0EATEqMEA1HxoQIFEfBjAcMz4lKiwuKDs7AUA2ISUmNUE5LS8jRkk3Jzo5HjkpShA+SRhONj4OLTwMETUeFCtNIwoIMkEkQi4vASNNKS0iDAEsHjQMCgFNGzkIBgFLNwdJB0AkMxorDzgIBhNNBAEpRB8fTwZPBAEpOR9QBiRHNSUGHUEEARdEJDkGHzwGEw49SwQBKx1HSwQBK0cfGhAvTwYnJz9LHUgIHBBQTAZJThpJBAEMORNRBAEVASE0TjUBTgEuSzo3UAQBLS4nNDYpIykzCAZIKDsEAS8sATQfTBc3H0gIBiYEATU/HzUwOxUIATgtO0MXCggGPAQBTiYVEDZDBhUEAU01BAFNOAQBSlBIJkEEATwtASMVSQYBEwQBRDgrEQQBRkQBLDU9CBIEAUA/RD82MgYPNj4IQgQBLUgEAUwrCkkTEB0GBAEdLgopExAUBgQBUBASEBgPEBgPEBgPBgEfPgYyBAFQIxASERkPESMiKCUMGxEbCg8SQUEPBgEfTQYyBAErMBASEBgPEBgPEBgPEBgPERkPEBgPBgEZIUAIQQYcNwYBEhAoESkRKRAoBgFOBAElUBATKBoGBAIBQic3QzgYHwElFQE9JgEsOwE9ATsBQwE3HgQBJR1KMy0sCCVOBAEwTjM/CCFQBAIBRx4yNiMBNzgpATUGSyM/JgEwRAFINCcEAUgiKDEGBAE7NhsSBAE6Kyg0BhIEAUNBPkFBBAErLS0EAgE5GRcZJgE9AgElFxgBOQIBHxkBRQE4AgE1HwEMRhY1HwYEAQw5DwQBKUUEATwWSwQCATw4ASceBAEoOQQBMzMtMQE4OQQBMB5GBAEuLCw4QkAvEwQBLCYEAgE4IiA9MwQQAgE6cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jb25zdGFudF9ldmFsdWF0b3IuZGFydE1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2NvbnN0YW50X2NvbGxlY3Rpb25fYnVpbGRlcnMuZGFydKPLLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIF9MaXN0T3JTZXRDb25zdGFudEJ1aWxkZXI8TCBleHRlbmRzIEV4cHJlc3Npb24+IHsKICBmaW5hbCBDb25zdGFudEV2YWx1YXRvciBldmFsdWF0b3I7CiAgZmluYWwgRXhwcmVzc2lvbiBvcmlnaW5hbDsKICBmaW5hbCBEYXJ0VHlwZSBlbGVtZW50VHlwZTsKCiAgLy8gRWFjaCBlbGVtZW50IG9mIFtwYXJ0c10gaXMgZWl0aGVyIGEgYExpc3Q8Q29uc3RhbnQ+YCAoY29udGFpbmluZyBmdWxseQogIC8vIGV2YWx1YXRlZCBjb25zdGFudHMpIG9yIGEgYENvbnN0YW50YCAocG90ZW50aWFsbHkgdW5ldmFsdWF0ZWQpLgogIExpc3Q8T2JqZWN0PiBwYXJ0cyA9IDxPYmplY3Q+WzxDb25zdGFudD5bXV07CgogIF9MaXN0T3JTZXRDb25zdGFudEJ1aWxkZXIodGhpcy5vcmlnaW5hbCwgdGhpcy5lbGVtZW50VHlwZSwgdGhpcy5ldmFsdWF0b3IpOwoKICBMIG1ha2VMaXRlcmFsKExpc3Q8RXhwcmVzc2lvbj4gZWxlbWVudHMpOwoKICAvLy8gQWRkIGFuIGVsZW1lbnQgdG8gdGhlIGNvbnN0YW50IGxpc3QgYmVpbmcgYnVpbHQgYnkgdGhpcyBidWlsZGVyLgogIHZvaWQgYWRkKEV4cHJlc3Npb24gZWxlbWVudCkgewogICAgQ29uc3RhbnQgY29uc3RhbnQgPSBldmFsdWF0b3IuX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihlbGVtZW50KTsKICAgIGlmIChldmFsdWF0b3Iuc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICBwYXJ0cy5hZGQoZXZhbHVhdG9yLnVuZXZhbHVhdGVkKAogICAgICAgICAgZWxlbWVudCwgbWFrZUxpdGVyYWwoW2V2YWx1YXRvci5leHRyYWN0KGNvbnN0YW50KV0pKSk7CiAgICB9IGVsc2UgewogICAgICBhZGRDb25zdGFudChjb25zdGFudCwgZWxlbWVudCk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFNwcmVhZChFeHByZXNzaW9uIHNwcmVhZEV4cHJlc3Npb24pIHsKICAgIENvbnN0YW50IHNwcmVhZCA9CiAgICAgICAgZXZhbHVhdG9yLnVubG93ZXIoZXZhbHVhdG9yLl9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbikpOwogICAgaWYgKGV2YWx1YXRvci5zaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIC8vIFVuZXZhbHVhdGVkIHNwcmVhZAogICAgICBwYXJ0cy5hZGQoc3ByZWFkKTsKICAgIH0gZWxzZSBpZiAoc3ByZWFkID09IGV2YWx1YXRvci5udWxsQ29uc3RhbnQpIHsKICAgICAgLy8gTnVsbCBzcHJlYWQKICAgICAgZXZhbHVhdG9yLnJlcG9ydChzcHJlYWRFeHByZXNzaW9uLCBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEZ1bGx5IGV2YWx1YXRlZCBzcHJlYWQKICAgICAgTGlzdDxDb25zdGFudD4gZW50cmllczsKICAgICAgaWYgKHNwcmVhZCBpcyBMaXN0Q29uc3RhbnQpIHsKICAgICAgICBlbnRyaWVzID0gc3ByZWFkLmVudHJpZXM7CiAgICAgIH0gZWxzZSBpZiAoc3ByZWFkIGlzIFNldENvbnN0YW50KSB7CiAgICAgICAgZW50cmllcyA9IHNwcmVhZC5lbnRyaWVzOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIE5vdCBsaXN0IG9yIHNldCBpbiBzcHJlYWQKICAgICAgICByZXR1cm4gZXZhbHVhdG9yLnJlcG9ydCgKICAgICAgICAgICAgc3ByZWFkRXhwcmVzc2lvbiwgbWVzc2FnZUNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkKTsKICAgICAgfQogICAgICBmb3IgKENvbnN0YW50IGVudHJ5IGluIGVudHJpZXMpIHsKICAgICAgICBhZGRDb25zdGFudChlbnRyeSwgc3ByZWFkRXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYWRkQ29uc3RhbnQoQ29uc3RhbnQgY29uc3RhbnQsIFRyZWVOb2RlIGNvbnRleHQpOwoKICBDb25zdGFudCBidWlsZCgpOwp9CgpjbGFzcyBMaXN0Q29uc3RhbnRCdWlsZGVyIGV4dGVuZHMgX0xpc3RPclNldENvbnN0YW50QnVpbGRlcjxMaXN0TGl0ZXJhbD4gewogIExpc3RDb25zdGFudEJ1aWxkZXIoCiAgICAgIEV4cHJlc3Npb24gb3JpZ2luYWwsIERhcnRUeXBlIGVsZW1lbnRUeXBlLCBDb25zdGFudEV2YWx1YXRvciBldmFsdWF0b3IpCiAgICAgIDogc3VwZXIob3JpZ2luYWwsIGVsZW1lbnRUeXBlLCBldmFsdWF0b3IpOwoKICBAb3ZlcnJpZGUKICBMaXN0TGl0ZXJhbCBtYWtlTGl0ZXJhbChMaXN0PEV4cHJlc3Npb24+IGVsZW1lbnRzKSA9PgogICAgICBuZXcgTGlzdExpdGVyYWwoZWxlbWVudHMsIGlzQ29uc3Q6IHRydWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZENvbnN0YW50KENvbnN0YW50IGNvbnN0YW50LCBUcmVlTm9kZSBjb250ZXh0KSB7CiAgICBMaXN0PENvbnN0YW50PiBsYXN0UGFydDsKICAgIGlmIChwYXJ0cy5sYXN0IGlzIExpc3Q8Q29uc3RhbnQ+KSB7CiAgICAgIGxhc3RQYXJ0ID0gcGFydHMubGFzdDsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnRzLmFkZChsYXN0UGFydCA9IDxDb25zdGFudD5bXSk7CiAgICB9CiAgICBsYXN0UGFydC5hZGQoZXZhbHVhdG9yLmVuc3VyZUlzU3VidHlwZShjb25zdGFudCwgZWxlbWVudFR5cGUsIGNvbnRleHQpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IGJ1aWxkKCkgewogICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIC8vIEZ1bGx5IGV2YWx1YXRlZAogICAgICByZXR1cm4gZXZhbHVhdG9yCiAgICAgICAgICAubG93ZXJMaXN0Q29uc3RhbnQobmV3IExpc3RDb25zdGFudChlbGVtZW50VHlwZSwgcGFydHMuc2luZ2xlKSk7CiAgICB9CiAgICBMaXN0PEV4cHJlc3Npb24+IGxpc3RzID0gPEV4cHJlc3Npb24+W107CiAgICBmb3IgKE9iamVjdCBwYXJ0IGluIHBhcnRzKSB7CiAgICAgIGlmIChwYXJ0IGlzIExpc3Q8Q29uc3RhbnQ+KSB7CiAgICAgICAgbGlzdHMuYWRkKG5ldyBDb25zdGFudEV4cHJlc3Npb24obmV3IExpc3RDb25zdGFudChlbGVtZW50VHlwZSwgcGFydCkpKTsKICAgICAgfSBlbHNlIGlmIChwYXJ0IGlzIENvbnN0YW50KSB7CiAgICAgICAgbGlzdHMuYWRkKGV2YWx1YXRvci5leHRyYWN0KHBhcnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAnTm9uLWNvbnN0YW50IGluIGNvbnN0YW50IGxpc3QnOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXZhbHVhdG9yLnVuZXZhbHVhdGVkKAogICAgICAgIG9yaWdpbmFsLCBuZXcgTGlzdENvbmNhdGVuYXRpb24obGlzdHMsIHR5cGVBcmd1bWVudDogZWxlbWVudFR5cGUpKTsKICB9Cn0KCmNsYXNzIFNldENvbnN0YW50QnVpbGRlciBleHRlbmRzIF9MaXN0T3JTZXRDb25zdGFudEJ1aWxkZXI8U2V0TGl0ZXJhbD4gewogIGZpbmFsIFNldDxDb25zdGFudD4gc2VlbiA9IG5ldyBTZXQ8Q29uc3RhbnQ+LmlkZW50aXR5KCk7CgogIFNldENvbnN0YW50QnVpbGRlcigKICAgICAgRXhwcmVzc2lvbiBvcmlnaW5hbCwgRGFydFR5cGUgZWxlbWVudFR5cGUsIENvbnN0YW50RXZhbHVhdG9yIGV2YWx1YXRvcikKICAgICAgOiBzdXBlcihvcmlnaW5hbCwgZWxlbWVudFR5cGUsIGV2YWx1YXRvcik7CgogIEBvdmVycmlkZQogIFNldExpdGVyYWwgbWFrZUxpdGVyYWwoTGlzdDxFeHByZXNzaW9uPiBlbGVtZW50cykgPT4KICAgICAgbmV3IFNldExpdGVyYWwoZWxlbWVudHMsIGlzQ29uc3Q6IHRydWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZENvbnN0YW50KENvbnN0YW50IGNvbnN0YW50LCBUcmVlTm9kZSBjb250ZXh0KSB7CiAgICBpZiAoIWV2YWx1YXRvci5oYXNQcmltaXRpdmVFcXVhbChjb25zdGFudCkpIHsKICAgICAgZXZhbHVhdG9yLnJlcG9ydChjb250ZXh0LAogICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsLndpdGhBcmd1bWVudHMoY29uc3RhbnQpKTsKICAgIH0KICAgIGlmICghc2Vlbi5hZGQoY29uc3RhbnQpKSB7CiAgICAgIGV2YWx1YXRvci5yZXBvcnQoCiAgICAgICAgICBjb250ZXh0LCB0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnQud2l0aEFyZ3VtZW50cyhjb25zdGFudCkpOwogICAgfQoKICAgIExpc3Q8Q29uc3RhbnQ+IGxhc3RQYXJ0OwogICAgaWYgKHBhcnRzLmxhc3QgaXMgTGlzdDxDb25zdGFudD4pIHsKICAgICAgbGFzdFBhcnQgPSBwYXJ0cy5sYXN0OwogICAgfSBlbHNlIHsKICAgICAgcGFydHMuYWRkKGxhc3RQYXJ0ID0gPENvbnN0YW50PltdKTsKICAgIH0KICAgIGxhc3RQYXJ0LmFkZChldmFsdWF0b3IuZW5zdXJlSXNTdWJ0eXBlKGNvbnN0YW50LCBlbGVtZW50VHlwZSwgY29udGV4dCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgYnVpbGQoKSB7CiAgICBpZiAocGFydHMubGVuZ3RoID09IDEpIHsKICAgICAgLy8gRnVsbHkgZXZhbHVhdGVkCiAgICAgIExpc3Q8Q29uc3RhbnQ+IGVudHJpZXMgPSBwYXJ0cy5zaW5nbGU7CiAgICAgIFNldENvbnN0YW50IHJlc3VsdCA9IG5ldyBTZXRDb25zdGFudChlbGVtZW50VHlwZSwgZW50cmllcyk7CiAgICAgIGlmIChldmFsdWF0b3IuZGVzdWdhclNldHMpIHsKICAgICAgICBmaW5hbCBMaXN0PENvbnN0YW50TWFwRW50cnk+IG1hcEVudHJpZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxDb25zdGFudE1hcEVudHJ5PihlbnRyaWVzLmxlbmd0aCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBtYXBFbnRyaWVzW2ldID0KICAgICAgICAgICAgICBuZXcgQ29uc3RhbnRNYXBFbnRyeShlbnRyaWVzW2ldLCBldmFsdWF0b3IubnVsbENvbnN0YW50KTsKICAgICAgICB9CiAgICAgICAgQ29uc3RhbnQgbWFwID0gZXZhbHVhdG9yLmxvd2VyTWFwQ29uc3RhbnQobmV3IE1hcENvbnN0YW50KAogICAgICAgICAgICBlbGVtZW50VHlwZSwgZXZhbHVhdG9yLnR5cGVFbnZpcm9ubWVudC5udWxsVHlwZSwgbWFwRW50cmllcykpOwogICAgICAgIHJldHVybiBldmFsdWF0b3IubG93ZXIoCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgbmV3IEluc3RhbmNlQ29uc3RhbnQoCiAgICAgICAgICAgICAgICBldmFsdWF0b3IudW5tb2RpZmlhYmxlU2V0TWFwLmVuY2xvc2luZ0NsYXNzLnJlZmVyZW5jZSwgWwogICAgICAgICAgICAgIGVsZW1lbnRUeXBlCiAgICAgICAgICAgIF0sIDxSZWZlcmVuY2UsIENvbnN0YW50PnsKICAgICAgICAgICAgICBldmFsdWF0b3IudW5tb2RpZmlhYmxlU2V0TWFwLnJlZmVyZW5jZTogbWFwCiAgICAgICAgICAgIH0pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZXZhbHVhdG9yLmxvd2VyU2V0Q29uc3RhbnQocmVzdWx0KTsKICAgICAgfQogICAgfQogICAgTGlzdDxFeHByZXNzaW9uPiBzZXRzID0gPEV4cHJlc3Npb24+W107CiAgICBmb3IgKE9iamVjdCBwYXJ0IGluIHBhcnRzKSB7CiAgICAgIGlmIChwYXJ0IGlzIExpc3Q8Q29uc3RhbnQ+KSB7CiAgICAgICAgc2V0cy5hZGQobmV3IENvbnN0YW50RXhwcmVzc2lvbihuZXcgU2V0Q29uc3RhbnQoZWxlbWVudFR5cGUsIHBhcnQpKSk7CiAgICAgIH0gZWxzZSBpZiAocGFydCBpcyBDb25zdGFudCkgewogICAgICAgIHNldHMuYWRkKGV2YWx1YXRvci5leHRyYWN0KHBhcnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAnTm9uLWNvbnN0YW50IGluIGNvbnN0YW50IHNldCc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBldmFsdWF0b3IudW5ldmFsdWF0ZWQoCiAgICAgICAgb3JpZ2luYWwsIG5ldyBTZXRDb25jYXRlbmF0aW9uKHNldHMsIHR5cGVBcmd1bWVudDogZWxlbWVudFR5cGUpKTsKICB9Cn0KCmNsYXNzIE1hcENvbnN0YW50QnVpbGRlciB7CiAgZmluYWwgQ29uc3RhbnRFdmFsdWF0b3IgZXZhbHVhdG9yOwogIGZpbmFsIEV4cHJlc3Npb24gb3JpZ2luYWw7CiAgZmluYWwgRGFydFR5cGUga2V5VHlwZTsKICBmaW5hbCBEYXJ0VHlwZSB2YWx1ZVR5cGU7CgogIC8vLyBFYWNoIGVsZW1lbnQgb2YgW3BhcnRzXSBpcyBlaXRoZXIgYSBgTGlzdDxDb25zdGFudE1hcEVudHJ5PmAgKGNvbnRhaW5pbmcKICAvLy8gZnVsbHkgZXZhbHVhdGVkIG1hcCBlbnRyaWVzKSBvciBhIGBDb25zdGFudGAgKHBvdGVudGlhbGx5IHVuZXZhbHVhdGVkKS4KICBMaXN0PE9iamVjdD4gcGFydHMgPSA8T2JqZWN0Pls8Q29uc3RhbnRNYXBFbnRyeT5bXV07CgogIGZpbmFsIFNldDxDb25zdGFudD4gc2VlbktleXMgPSBuZXcgU2V0PENvbnN0YW50Pi5pZGVudGl0eSgpOwoKICBNYXBDb25zdGFudEJ1aWxkZXIoCiAgICAgIHRoaXMub3JpZ2luYWwsIHRoaXMua2V5VHlwZSwgdGhpcy52YWx1ZVR5cGUsIHRoaXMuZXZhbHVhdG9yKTsKCiAgLy8vIEFkZCBhIG1hcCBlbnRyeSB0byB0aGUgY29uc3RhbnQgbWFwIGJlaW5nIGJ1aWx0IGJ5IHRoaXMgYnVpbGRlcgogIHZvaWQgYWRkKE1hcEVudHJ5IGVsZW1lbnQpIHsKICAgIENvbnN0YW50IGtleSA9IGV2YWx1YXRvci5fZXZhbHVhdGVTdWJleHByZXNzaW9uKGVsZW1lbnQua2V5KTsKICAgIENvbnN0YW50IHZhbHVlID0gZXZhbHVhdG9yLl9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oZWxlbWVudC52YWx1ZSk7CiAgICBpZiAoZXZhbHVhdG9yLnNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgcGFydHMuYWRkKGV2YWx1YXRvci51bmV2YWx1YXRlZCgKICAgICAgICAgIGVsZW1lbnQua2V5LAogICAgICAgICAgbmV3IE1hcExpdGVyYWwoCiAgICAgICAgICAgICAgW25ldyBNYXBFbnRyeShldmFsdWF0b3IuZXh0cmFjdChrZXkpLCBldmFsdWF0b3IuZXh0cmFjdCh2YWx1ZSkpXSwKICAgICAgICAgICAgICBpc0NvbnN0OiB0cnVlKSkpOwogICAgfSBlbHNlIHsKICAgICAgYWRkQ29uc3RhbnQoa2V5LCB2YWx1ZSwgZWxlbWVudC5rZXksIGVsZW1lbnQudmFsdWUpOwogICAgfQogIH0KCiAgdm9pZCBhZGRTcHJlYWQoRXhwcmVzc2lvbiBzcHJlYWRFeHByZXNzaW9uKSB7CiAgICBDb25zdGFudCBzcHJlYWQgPQogICAgICAgIGV2YWx1YXRvci51bmxvd2VyKGV2YWx1YXRvci5fZXZhbHVhdGVTdWJleHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pKTsKICAgIGlmIChldmFsdWF0b3Iuc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICAvLyBVbmV2YWx1YXRlZCBzcHJlYWQKICAgICAgcGFydHMuYWRkKHNwcmVhZCk7CiAgICB9IGVsc2UgaWYgKHNwcmVhZCA9PSBldmFsdWF0b3IubnVsbENvbnN0YW50KSB7CiAgICAgIC8vIE51bGwgc3ByZWFkCiAgICAgIGV2YWx1YXRvci5yZXBvcnQoc3ByZWFkRXhwcmVzc2lvbiwgbWVzc2FnZUNvbnN0RXZhbE51bGxWYWx1ZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBGdWxseSBldmFsdWF0ZWQgc3ByZWFkCiAgICAgIGlmIChzcHJlYWQgaXMgTWFwQ29uc3RhbnQpIHsKICAgICAgICBmb3IgKENvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gc3ByZWFkLmVudHJpZXMpIHsKICAgICAgICAgIGFkZENvbnN0YW50KAogICAgICAgICAgICAgIGVudHJ5LmtleSwgZW50cnkudmFsdWUsIHNwcmVhZEV4cHJlc3Npb24sIHNwcmVhZEV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBOb3QgbWFwIGluIHNwcmVhZAogICAgICAgIHJldHVybiBldmFsdWF0b3IucmVwb3J0KAogICAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uLCBtZXNzYWdlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGFkZENvbnN0YW50KENvbnN0YW50IGtleSwgQ29uc3RhbnQgdmFsdWUsIFRyZWVOb2RlIGtleUNvbnRleHQsCiAgICAgIFRyZWVOb2RlIHZhbHVlQ29udGV4dCkgewogICAgTGlzdDxDb25zdGFudE1hcEVudHJ5PiBsYXN0UGFydDsKICAgIGlmIChwYXJ0cy5sYXN0IGlzIExpc3Q8Q29uc3RhbnRNYXBFbnRyeT4pIHsKICAgICAgbGFzdFBhcnQgPSBwYXJ0cy5sYXN0OwogICAgfSBlbHNlIHsKICAgICAgcGFydHMuYWRkKGxhc3RQYXJ0ID0gPENvbnN0YW50TWFwRW50cnk+W10pOwogICAgfQogICAgaWYgKCFldmFsdWF0b3IuaGFzUHJpbWl0aXZlRXF1YWwoa2V5KSkgewogICAgICBldmFsdWF0b3IucmVwb3J0KAogICAgICAgICAga2V5Q29udGV4dCwgdGVtcGxhdGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwud2l0aEFyZ3VtZW50cyhrZXkpKTsKICAgIH0KICAgIGlmICghc2VlbktleXMuYWRkKGtleSkpIHsKICAgICAgZXZhbHVhdG9yLnJlcG9ydCgKICAgICAgICAgIGtleUNvbnRleHQsIHRlbXBsYXRlQ29uc3RFdmFsRHVwbGljYXRlS2V5LndpdGhBcmd1bWVudHMoa2V5KSk7CiAgICB9CiAgICBsYXN0UGFydC5hZGQobmV3IENvbnN0YW50TWFwRW50cnkoCiAgICAgICAgZXZhbHVhdG9yLmVuc3VyZUlzU3VidHlwZShrZXksIGtleVR5cGUsIGtleUNvbnRleHQpLAogICAgICAgIGV2YWx1YXRvci5lbnN1cmVJc1N1YnR5cGUodmFsdWUsIHZhbHVlVHlwZSwgdmFsdWVDb250ZXh0KSkpOwogIH0KCiAgQ29uc3RhbnQgYnVpbGQoKSB7CiAgICBpZiAocGFydHMubGVuZ3RoID09IDEpIHsKICAgICAgLy8gRnVsbHkgZXZhbHVhdGVkCiAgICAgIHJldHVybiBldmFsdWF0b3IKICAgICAgICAgIC5sb3dlck1hcENvbnN0YW50KG5ldyBNYXBDb25zdGFudChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcnRzLnNpbmdsZSkpOwogICAgfQogICAgTGlzdDxFeHByZXNzaW9uPiBtYXBzID0gPEV4cHJlc3Npb24+W107CiAgICBmb3IgKE9iamVjdCBwYXJ0IGluIHBhcnRzKSB7CiAgICAgIGlmIChwYXJ0IGlzIExpc3Q8Q29uc3RhbnRNYXBFbnRyeT4pIHsKICAgICAgICBtYXBzLmFkZCgKICAgICAgICAgICAgbmV3IENvbnN0YW50RXhwcmVzc2lvbihuZXcgTWFwQ29uc3RhbnQoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJ0KSkpOwogICAgICB9IGVsc2UgaWYgKHBhcnQgaXMgQ29uc3RhbnQpIHsKICAgICAgICBtYXBzLmFkZChldmFsdWF0b3IuZXh0cmFjdChwYXJ0KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgJ05vbi1jb25zdGFudCBpbiBjb25zdGFudCBtYXAnOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXZhbHVhdG9yLnVuZXZhbHVhdGVkKG9yaWdpbmFsLAogICAgICAgIG5ldyBNYXBDb25jYXRlbmF0aW9uKG1hcHMsIGtleVR5cGU6IGtleVR5cGUsIHZhbHVlVHlwZTogdmFsdWVUeXBlKSk7CiAgfQp9CoETAE5OPAEjAUElHR4BTEUvAU4BLAFHIUMpJ0ENJgYEATAWTykcGTMVRQ0gHiQiKiIPJSFFCCguCAYEATkBFAIBSxdOMQEMODABDDodKB0NKgZNBAEMFR0ZF0sGLSEkUCUsDy8IBiJMBAIBSTsBFk4xAQw3LwEMOjIgTAYfGE8GAR0oHQ0qBk0EAQwVHRktQiMyODMaSApDSyAUIkkaJjoRDzMIBiwhJE4lKw8uCAYiSgQCARslHRocAU9ONwE/ARZEAUYfQkYpJxcaUCANOwYEATAWTykcGTMVRQ0gIzkXSwoPHSE/CAYEAUYfJTAdDTIGLRhPBh4YSQYnPUUEARUdGRdQBiwhLBJQJSsPLggGK00EAgFEcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jb25zdGFudF9jb2xsZWN0aW9uX2J1aWxkZXJzLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfY29uc3RhbnRzLmRhcnSDjS8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmtlcm5lbF9jb25zdGFudHM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IEludmFsaWRFeHByZXNzaW9uOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJ2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0JyBzaG93IEVycm9yUmVwb3J0ZXI7CgpjbGFzcyBLZXJuZWxDb25zdGFudEVycm9yUmVwb3J0ZXIgZXh0ZW5kcyBFcnJvclJlcG9ydGVyIHsKICBmaW5hbCBMb2FkZXIgbG9hZGVyOwoKICBLZXJuZWxDb25zdGFudEVycm9yUmVwb3J0ZXIodGhpcy5sb2FkZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydChMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0KSB7CiAgICBsb2FkZXIuYWRkUHJvYmxlbSgKICAgICAgICBtZXNzYWdlLm1lc3NhZ2VPYmplY3QsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS5sZW5ndGgsIG1lc3NhZ2UudXJpLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBBc3N1bWVkIHRvIGJlIGFscmVhZHkgcmVwb3J0ZWQuCiAgfQp9CiEATk48ASABOQEyASUBNQE6FwEsAQxGF1AbBAEMOScEAgE4cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfY29uc3RhbnRzLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9tZXRhZGF0YV9jb2xsZWN0b3IuZGFydIK7Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnIHNob3cgTWVtYmVyLCBNZXRhZGF0YVJlcG9zaXRvcnksIE5hbWVkTm9kZTsKCi8vLyBUaGUgY29sbGVjdG9yIHRvIGFkZCB0YXJnZXQgc3BlY2lmaWMgbWV0YWRhdGEgdG8uCmFic3RyYWN0IGNsYXNzIE1ldGFkYXRhQ29sbGVjdG9yIHsKICAvLy8gTWV0YWRhdGEgaXMgcmVtZW1iZXJlZCBpbiB0aGlzIHJlcG9zaXRvcnksIHNvIHRoYXQgd2hlbiBpdCBpcyBhZGRlZAogIC8vLyB0byBhIGNvbXBvbmVudCwgbWV0YWRhdGEgaXMgc2VyaWFsaXplZCB3aXRoIHRoZSBjb21wb25lbnQuCiAgTWV0YWRhdGFSZXBvc2l0b3J5PGR5bmFtaWM+IGdldCByZXBvc2l0b3J5OwoKICB2b2lkIHNldENvbnN0cnVjdG9yTmFtZU9mZnNldChNZW1iZXIgbm9kZSwgT2JqZWN0IG5hbWUpOwoKICB2b2lkIHNldERvY3VtZW50YXRpb25Db21tZW50KE5hbWVkTm9kZSBub2RlLCBTdHJpbmcgY29tbWVudCk7Cn0KEgBOTjwBUAE2I0pBLgE7AUACATpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0OXNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2JpbmFyeS9saW1pdGVkX2FzdF90b19iaW5hcnkuZGFydIjxLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfdG9fYmluYXJ5LmRhcnQnOwoKLy8vIFdyaXRlcyBsaWJyYXJpZXMgdGhhdCBzYXRpc2Z5IHRoZSBbcHJlZGljYXRlXS4KLy8vCi8vLyBPbmx5IHRoZSByZWZlcmVuY2VkIHN1YnNldCBvZiBjYW5vbmljYWwgbmFtZXMgaXMgaW5kZXhlZCBhbmQgd3JpdHRlbiwKLy8vIHNvIHdlIGRvbid0IHdhc3RlIHRpbWUgaW5kZXhpbmcgYWxsIGxpYnJhcmllcyBvZiBhIGNvbXBvbmVudCwgd2hlbiBvbmx5Ci8vLyBhIHRpbnkgc3Vic2V0IGlzIHVzZWQuCmNsYXNzIExpbWl0ZWRCaW5hcnlQcmludGVyIGV4dGVuZHMgQmluYXJ5UHJpbnRlciB7CiAgZmluYWwgTGlicmFyeUZpbHRlciBwcmVkaWNhdGU7CgogIC8vLyBFeGNsdWRlcyBhbGwgdXJpVG9Tb3VyY2UgaW5mb3JtYXRpb24uCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQgdGhlIFtwcmVkaWNhdGVdIGFib3ZlIHdpbGwgb25seSBleGNsdWRlIGNhbm9uaWNhbCBuYW1lcyBhbmQKICAvLy8ga2VybmVsIGxpYnJhcmllcywgYnV0IGl0IHdpbGwgc3RpbGwgZW1pdCB0aGUgc291cmNlcyBmb3IgYWxsIGxpYnJhcmllcy4KICAvLy8gZmlsdGVyZWQgYnkgbGlicmFyaWVzIG1hdGNoaW5nIFtwcmVkaWNhdGVdLgogIC8vIFRPRE8oc2lnbXVuZCk6IHByb3ZpZGUgYSB3YXkgdG8gZmlsdGVyIHNvdXJjZXMgZGlyZWN0bHkgYmFzZWQgb24KICAvLyBbcHJlZGljYXRlXS4gVGhhdCByZXF1aXJlcyBzcGVjaWFsIGxvZ2ljIHRvIGhhbmRsZSBzb3VyY2VzIGZyb20gcGFydCBmaWxlcy4KICBmaW5hbCBib29sIGV4Y2x1ZGVVcmlUb1NvdXJjZTsKCiAgTGltaXRlZEJpbmFyeVByaW50ZXIoCiAgICAgIFNpbms8TGlzdDxpbnQ+PiBzaW5rLCB0aGlzLnByZWRpY2F0ZSwgdGhpcy5leGNsdWRlVXJpVG9Tb3VyY2UsCiAgICAgIHtib29sIGluY2x1ZGVPZmZzZXRzID0gdHJ1ZX0pCiAgICAgIDogc3VwZXIoc2luaywKICAgICAgICAgICAgaW5jbHVkZVNvdXJjZXM6ICFleGNsdWRlVXJpVG9Tb3VyY2UsCiAgICAgICAgICAgIGluY2x1ZGVPZmZzZXRzOiBpbmNsdWRlT2Zmc2V0cyk7CgogIEBvdmVycmlkZQogIHZvaWQgY29tcHV0ZUNhbm9uaWNhbE5hbWVzKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGZvciAodmFyIGxpYnJhcnkgaW4gY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICBpZiAocHJlZGljYXRlKGxpYnJhcnkpKSB7CiAgICAgICAgY29tcG9uZW50LnJvb3QKICAgICAgICAgICAgLmdldENoaWxkRnJvbVVyaShsaWJyYXJ5LmltcG9ydFVyaSkKICAgICAgICAgICAgLmJpbmRUbyhsaWJyYXJ5LnJlZmVyZW5jZSk7CiAgICAgICAgbGlicmFyeS5jb21wdXRlQ2Fub25pY2FsTmFtZXMoKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBzaG91bGRXcml0ZUxpYnJhcnlDYW5vbmljYWxOYW1lcyhMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHJldHVybiBwcmVkaWNhdGUobGlicmFyeSk7CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyaWVzKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50LmxpYnJhcmllcy5sZW5ndGg7ICsraSkgewogICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBjb21wb25lbnQubGlicmFyaWVzW2ldOwogICAgICBpZiAocHJlZGljYXRlKGxpYnJhcnkpKSB3cml0ZUxpYnJhcnlOb2RlKGxpYnJhcnkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBMaWJyYXJ5ICYmICFwcmVkaWNhdGUobm9kZSkpIHJldHVybjsKICAgIHN1cGVyLndyaXRlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDb21wb25lbnRJbmRleChDb21wb25lbnQgY29tcG9uZW50LCBMaXN0PExpYnJhcnk+IGxpYnJhcmllcykgewogICAgdmFyIGxpYnJhcmllc1RvV3JpdGUgPSBsaWJyYXJpZXMud2hlcmUocHJlZGljYXRlKS50b0xpc3QoKTsKICAgIHN1cGVyLndyaXRlQ29tcG9uZW50SW5kZXgoY29tcG9uZW50LCBsaWJyYXJpZXNUb1dyaXRlKTsKICB9Cn0KRQBOTjwBIjMBMwRKTBszIQEsBk1OMkZRIQEYRSQUMS0BDDQvIBcwKCkIBgQBDDsfBAEtOzA5BgQBDB41GwQBDEtAPAQCATBwYWNrYWdlOmtlcm5lbC9iaW5hcnkvbGltaXRlZF9hc3RfdG9fYmluYXJ5LmRhcnQlc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvdmVyaWZpZXIuZGFydMAATnYvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5jaGVja3M7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKaW1wb3J0ICd0cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCc7Cgp2b2lkIHZlcmlmeUNvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50KSB7CiAgVmVyaWZ5aW5nVmlzaXRvci5jaGVjayhjb21wb25lbnQpOwp9CgpjbGFzcyBWZXJpZmljYXRpb25FcnJvciB7CiAgZmluYWwgVHJlZU5vZGUgY29udGV4dDsKCiAgZmluYWwgVHJlZU5vZGUgbm9kZTsKCiAgZmluYWwgU3RyaW5nIGRldGFpbHM7CgogIFZlcmlmaWNhdGlvbkVycm9yKHRoaXMuY29udGV4dCwgdGhpcy5ub2RlLCB0aGlzLmRldGFpbHMpOwoKICB0b1N0cmluZygpIHsKICAgIExvY2F0aW9uIGxvY2F0aW9uOwogICAgdHJ5IHsKICAgICAgbG9jYXRpb24gPSBub2RlPy5sb2NhdGlvbiA/PyBjb250ZXh0Py5sb2NhdGlvbjsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgLy8gVE9ETyhhaGUpOiBGaXggdGhlIGNvbXBpbGVyIGluc3RlYWQuCiAgICB9CiAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkgewogICAgICBTdHJpbmcgZmlsZSA9IGxvY2F0aW9uLmZpbGU/LnRvU3RyaW5nKCkgPz8gIiI7CiAgICAgIHJldHVybiAiJGZpbGU6JHtsb2NhdGlvbi5saW5lfToke2xvY2F0aW9uLmNvbHVtbn06IFZlcmlmaWNhdGlvbiBlcnJvcjoiCiAgICAgICAgICAiICRkZXRhaWxzIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAiVmVyaWZpY2F0aW9uIGVycm9yOiAkZGV0YWlsc1xuIgogICAgICAgICAgIkNvbnRleHQ6ICckY29udGV4dCcuXG4iCiAgICAgICAgICAiTm9kZTogJyRub2RlJy4iOwogICAgfQogIH0KfQoKZW51bSBUeXBlZGVmU3RhdGUgeyBEb25lLCBCZWluZ0NoZWNrZWQgfQoKLy8vIENoZWNrcyB0aGF0IGEga2VybmVsIGNvbXBvbmVudCBpcyB3ZWxsLWZvcm1lZC4KLy8vCi8vLyBUaGlzIGRvZXMgbm90IGluY2x1ZGUgYW55IGtpbmQgb2YgdHlwZSBjaGVja2luZy4KY2xhc3MgVmVyaWZ5aW5nVmlzaXRvciBleHRlbmRzIFJlY3Vyc2l2ZVZpc2l0b3I8dm9pZD4gewogIGZpbmFsIFNldDxDbGFzcz4gY2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3M+KCk7CiAgZmluYWwgU2V0PFR5cGVkZWY+IHR5cGVkZWZzID0gbmV3IFNldDxUeXBlZGVmPigpOwogIFNldDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyc0luU2NvcGUgPSBuZXcgU2V0PFR5cGVQYXJhbWV0ZXI+KCk7CiAgZmluYWwgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZVN0YWNrID0gPFZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgZmluYWwgTWFwPFR5cGVkZWYsIFR5cGVkZWZTdGF0ZT4gdHlwZWRlZlN0YXRlID0gPFR5cGVkZWYsIFR5cGVkZWZTdGF0ZT57fTsKICBib29sIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gZmFsc2U7CgogIC8vLyBJZiB0cnVlLCByZWxheCBjZXJ0YWluIGNoZWNrcyBmb3IgKm91dGxpbmUqIG1vZGUuIEZvciBleGFtcGxlLCBkb24ndAogIC8vLyBhdHRlbXB0IHRvIHZhbGlkYXRlIGNvbnN0cnVjdG9yIGluaXRpYWxpemVycy4KICBib29sIGlzT3V0bGluZSA9IGZhbHNlOwoKICBib29sIGluQ2F0Y2hCbG9jayA9IGZhbHNlOwoKICBMaWJyYXJ5IGN1cnJlbnRMaWJyYXJ5OwoKICBNZW1iZXIgY3VycmVudE1lbWJlcjsKCiAgQ2xhc3MgY3VycmVudENsYXNzOwoKICBUcmVlTm9kZSBjdXJyZW50UGFyZW50OwoKICBUcmVlTm9kZSBnZXQgY29udGV4dCA9PiBjdXJyZW50TWVtYmVyID8/IGN1cnJlbnRDbGFzczsKCiAgc3RhdGljIHZvaWQgY2hlY2soQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgY29tcG9uZW50LmFjY2VwdChuZXcgVmVyaWZ5aW5nVmlzaXRvcigpKTsKICB9CgogIGRlZmF1bHRUcmVlTm9kZShUcmVlTm9kZSBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogIH0KCiAgcHJvYmxlbShUcmVlTm9kZSBub2RlLCBTdHJpbmcgZGV0YWlscywge1RyZWVOb2RlIGNvbnRleHR9KSB7CiAgICBjb250ZXh0ID8/PSB0aGlzLmNvbnRleHQ7CiAgICB0aHJvdyBuZXcgVmVyaWZpY2F0aW9uRXJyb3IoY29udGV4dCwgbm9kZSwgZGV0YWlscyk7CiAgfQoKICBUcmVlTm9kZSBlbnRlclBhcmVudChUcmVlTm9kZSBub2RlKSB7CiAgICBpZiAoIWlkZW50aWNhbChub2RlLnBhcmVudCwgY3VycmVudFBhcmVudCkpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAiSW5jb3JyZWN0IHBhcmVudCBwb2ludGVyIG9uICR7bm9kZS5ydW50aW1lVHlwZX06IgogICAgICAgICAgIiBleHBlY3RlZCAnJHtjdXJyZW50UGFyZW50LnJ1bnRpbWVUeXBlfScsIgogICAgICAgICAgIiBidXQgZm91bmQ6ICcke25vZGUucGFyZW50LnJ1bnRpbWVUeXBlfScuIiwKICAgICAgICAgIGNvbnRleHQ6IGN1cnJlbnRQYXJlbnQpOwogICAgfQogICAgdmFyIG9sZFBhcmVudCA9IGN1cnJlbnRQYXJlbnQ7CiAgICBjdXJyZW50UGFyZW50ID0gbm9kZTsKICAgIHJldHVybiBvbGRQYXJlbnQ7CiAgfQoKICB2b2lkIGV4aXRQYXJlbnQoVHJlZU5vZGUgb2xkUGFyZW50KSB7CiAgICBjdXJyZW50UGFyZW50ID0gb2xkUGFyZW50OwogIH0KCiAgaW50IGVudGVyTG9jYWxTY29wZSgpID0+IHZhcmlhYmxlU3RhY2subGVuZ3RoOwoKICB2b2lkIGV4aXRMb2NhbFNjb3BlKGludCBzdGFja0hlaWdodCkgewogICAgZm9yIChpbnQgaSA9IHN0YWNrSGVpZ2h0OyBpIDwgdmFyaWFibGVTdGFjay5sZW5ndGg7ICsraSkgewogICAgICB1bmRlY2xhcmVWYXJpYWJsZSh2YXJpYWJsZVN0YWNrW2ldKTsKICAgIH0KICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gc3RhY2tIZWlnaHQ7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4oVHJlZU5vZGUgbm9kZSkgewogICAgdmFyIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgZXhpdFBhcmVudChvbGRQYXJlbnQpOwogIH0KCiAgdm9pZCB2aXNpdFdpdGhMb2NhbFNjb3BlKFRyZWVOb2RlIG5vZGUpIHsKICAgIGludCBzdGFja0hlaWdodCA9IGVudGVyTG9jYWxTY29wZSgpOwogICAgdmlzaXRDaGlsZHJlbihub2RlKTsKICAgIGV4aXRMb2NhbFNjb3BlKHN0YWNrSGVpZ2h0KTsKICB9CgogIHZvaWQgZGVjbGFyZU1lbWJlcihNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyLnRyYW5zZm9ybWVyRmxhZ3MgJiBUcmFuc2Zvcm1lckZsYWcuc2VlbkJ5VmVyaWZpZXIgIT0gMCkgewogICAgICBwcm9ibGVtKG1lbWJlci5mdW5jdGlvbiwKICAgICAgICAgICJNZW1iZXIgJyRtZW1iZXInIGhhcyBiZWVuIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlLiIpOwogICAgfQogICAgbWVtYmVyLnRyYW5zZm9ybWVyRmxhZ3MgfD0gVHJhbnNmb3JtZXJGbGFnLnNlZW5CeVZlcmlmaWVyOwogIH0KCiAgdm9pZCB1bmRlY2xhcmVNZW1iZXIoTWVtYmVyIG1lbWJlcikgewogICAgbWVtYmVyLnRyYW5zZm9ybWVyRmxhZ3MgJj0gflRyYW5zZm9ybWVyRmxhZy5zZWVuQnlWZXJpZmllcjsKICB9CgogIHZvaWQgZGVjbGFyZVZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIGlmICh2YXJpYWJsZS5mbGFncyAmIFZhcmlhYmxlRGVjbGFyYXRpb24uRmxhZ0luU2NvcGUgIT0gMCkgewogICAgICBwcm9ibGVtKHZhcmlhYmxlLCAiVmFyaWFibGUgJyR2YXJpYWJsZScgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuIik7CiAgICB9CiAgICB2YXJpYWJsZS5mbGFncyB8PSBWYXJpYWJsZURlY2xhcmF0aW9uLkZsYWdJblNjb3BlOwogICAgdmFyaWFibGVTdGFjay5hZGQodmFyaWFibGUpOwogIH0KCiAgdm9pZCB1bmRlY2xhcmVWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICB2YXJpYWJsZS5mbGFncyAmPSB+VmFyaWFibGVEZWNsYXJhdGlvbi5GbGFnSW5TY29wZTsKICB9CgogIHZvaWQgZGVjbGFyZVR5cGVQYXJhbWV0ZXJzKExpc3Q8VHlwZVBhcmFtZXRlcj4gcGFyYW1ldGVycykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldOwogICAgICBpZiAocGFyYW1ldGVyLmJvdW5kID09IG51bGwpIHsKICAgICAgICBwcm9ibGVtKAogICAgICAgICAgICBjdXJyZW50UGFyZW50LCAiTWlzc2luZyBib3VuZCBmb3IgdHlwZSBwYXJhbWV0ZXIgJyRwYXJhbWV0ZXInLiIpOwogICAgICB9CiAgICAgIGlmICghdHlwZVBhcmFtZXRlcnNJblNjb3BlLmFkZChwYXJhbWV0ZXIpKSB7CiAgICAgICAgcHJvYmxlbShwYXJhbWV0ZXIsICJUeXBlIHBhcmFtZXRlciAnJHBhcmFtZXRlcicgcmVkZWNsYXJlZC4iKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB1bmRlY2xhcmVUeXBlUGFyYW1ldGVycyhMaXN0PFR5cGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMpIHsKICAgIHR5cGVQYXJhbWV0ZXJzSW5TY29wZS5yZW1vdmVBbGwocGFyYW1ldGVycyk7CiAgfQoKICB2b2lkIGNoZWNrVmFyaWFibGVJblNjb3BlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIFRyZWVOb2RlIHdoZXJlKSB7CiAgICBpZiAodmFyaWFibGUuZmxhZ3MgJiBWYXJpYWJsZURlY2xhcmF0aW9uLkZsYWdJblNjb3BlID09IDApIHsKICAgICAgcHJvYmxlbSh3aGVyZSwgIlZhcmlhYmxlICckdmFyaWFibGUnIHVzZWQgb3V0IG9mIHNjb3BlLiIpOwogICAgfQogIH0KCiAgdmlzaXRDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgdHJ5IHsKICAgICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgICAgZm9yICh2YXIgY2xhc3NfIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgICAgaWYgKCFjbGFzc2VzLmFkZChjbGFzc18pKSB7CiAgICAgICAgICAgIHByb2JsZW0oY2xhc3NfLCAiQ2xhc3MgJyRjbGFzc18nIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlLiIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKHZhciB0eXBlZGVmXyBpbiBsaWJyYXJ5LnR5cGVkZWZzKSB7CiAgICAgICAgICBpZiAoIXR5cGVkZWZzLmFkZCh0eXBlZGVmXykpIHsKICAgICAgICAgICAgcHJvYmxlbSh0eXBlZGVmXywgIlR5cGVkZWYgJyR0eXBlZGVmXycgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxpYnJhcnkubWVtYmVycy5mb3JFYWNoKGRlY2xhcmVNZW1iZXIpOwogICAgICAgIGZvciAodmFyIGNsYXNzXyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgICAgIGNsYXNzXy5tZW1iZXJzLmZvckVhY2goZGVjbGFyZU1lbWJlcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZpc2l0Q2hpbGRyZW4oY29tcG9uZW50KTsKICAgIH0gZmluYWxseSB7CiAgICAgIGZvciAodmFyIGxpYnJhcnkgaW4gY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICAgIGxpYnJhcnkubWVtYmVycy5mb3JFYWNoKHVuZGVjbGFyZU1lbWJlcik7CiAgICAgICAgZm9yICh2YXIgY2xhc3NfIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgICAgY2xhc3NfLm1lbWJlcnMuZm9yRWFjaCh1bmRlY2xhcmVNZW1iZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXJpYWJsZVN0YWNrLmZvckVhY2godW5kZWNsYXJlVmFyaWFibGUpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSB7CiAgICBjdXJyZW50TGlicmFyeSA9IG5vZGU7CiAgICBzdXBlci52aXNpdExpYnJhcnkobm9kZSk7CiAgICBjdXJyZW50TGlicmFyeSA9IG51bGw7CiAgfQoKICB2b2lkIGNoZWNrVHlwZWRlZihUeXBlZGVmIG5vZGUpIHsKICAgIHZhciBzdGF0ZSA9IHR5cGVkZWZTdGF0ZVtub2RlXTsKICAgIGlmIChzdGF0ZSA9PSBUeXBlZGVmU3RhdGUuRG9uZSkgcmV0dXJuOwogICAgaWYgKHN0YXRlID09IFR5cGVkZWZTdGF0ZS5CZWluZ0NoZWNrZWQpIHsKICAgICAgcHJvYmxlbShub2RlLCAiVGhlIHR5cGVkZWYgJyRub2RlJyByZWZlcnMgdG8gaXRzZWxmIiwgY29udGV4dDogbm9kZSk7CiAgICB9CiAgICBhc3NlcnQoc3RhdGUgPT0gbnVsbCk7CiAgICB0eXBlZGVmU3RhdGVbbm9kZV0gPSBUeXBlZGVmU3RhdGUuQmVpbmdDaGVja2VkOwogICAgdmFyIHNhdmVkVHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVyc0luU2NvcGU7CiAgICB0eXBlUGFyYW1ldGVyc0luU2NvcGUgPSBub2RlLnR5cGVQYXJhbWV0ZXJzLnRvU2V0KCk7CiAgICB2YXIgc2F2ZWRQYXJlbnQgPSBjdXJyZW50UGFyZW50OwogICAgY3VycmVudFBhcmVudCA9IG5vZGU7CiAgICAvLyBWaXNpdCBjaGlsZHJlbiB3aXRob3V0IGNoZWNraW5nIHRoZSBwYXJlbnQgcG9pbnRlciBvbiB0aGUgdHlwZWRlZiBpdHNlbGYKICAgIC8vIHNpbmNlIHRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGEgY29udGV4dCBvdGhlciB0aGFuIGl0cyB0cnVlIHBhcmVudC4KICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIGN1cnJlbnRQYXJlbnQgPSBzYXZlZFBhcmVudDsKICAgIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSA9IHNhdmVkVHlwZVBhcmFtZXRlcnM7CiAgICB0eXBlZGVmU3RhdGVbbm9kZV0gPSBUeXBlZGVmU3RhdGUuRG9uZTsKICB9CgogIHZpc2l0VHlwZWRlZihUeXBlZGVmIG5vZGUpIHsKICAgIGNoZWNrVHlwZWRlZihub2RlKTsKICAgIC8vIEVudGVyIGFuZCBleGl0IHRoZSBub2RlIHRvIGNoZWNrIHRoZSBwYXJlbnQgcG9pbnRlciBvbiB0aGUgdHlwZWRlZiBub2RlLgogICAgZXhpdFBhcmVudChlbnRlclBhcmVudChub2RlKSk7CiAgfQoKICB2aXNpdEZpZWxkKEZpZWxkIG5vZGUpIHsKICAgIGN1cnJlbnRNZW1iZXIgPSBub2RlOwogICAgdmFyIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgYm9vbCBpc1RvcExldmVsID0gbm9kZS5wYXJlbnQgPT0gY3VycmVudExpYnJhcnk7CiAgICBpZiAoaXNUb3BMZXZlbCAmJiAhbm9kZS5pc1N0YXRpYykgewogICAgICBwcm9ibGVtKG5vZGUsICJUaGUgdG9wLWxldmVsIGZpZWxkICcke25vZGUubmFtZS5uYW1lfScgc2hvdWxkIGJlIHN0YXRpYyIsCiAgICAgICAgICBjb250ZXh0OiBub2RlKTsKICAgIH0KICAgIGlmIChub2RlLmlzQ29uc3QgJiYgIW5vZGUuaXNTdGF0aWMpIHsKICAgICAgcHJvYmxlbShub2RlLCAiVGhlIGNvbnN0IGZpZWxkICcke25vZGUubmFtZS5uYW1lfScgc2hvdWxkIGJlIHN0YXRpYyIsCiAgICAgICAgICBjb250ZXh0OiBub2RlKTsKICAgIH0KICAgIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gIW5vZGUuaXNTdGF0aWM7CiAgICBub2RlLmluaXRpYWxpemVyPy5hY2NlcHQodGhpcyk7CiAgICBub2RlLnR5cGUuYWNjZXB0KHRoaXMpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSBmYWxzZTsKICAgIHZpc2l0TGlzdChub2RlLmFubm90YXRpb25zLCB0aGlzKTsKICAgIGV4aXRQYXJlbnQob2xkUGFyZW50KTsKICAgIGN1cnJlbnRNZW1iZXIgPSBudWxsOwogIH0KCiAgdmlzaXRQcm9jZWR1cmUoUHJvY2VkdXJlIG5vZGUpIHsKICAgIGN1cnJlbnRNZW1iZXIgPSBub2RlOwogICAgdmFyIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSAhbm9kZS5pc1N0YXRpYzsKICAgIG5vZGUuZnVuY3Rpb24uYWNjZXB0KHRoaXMpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSBmYWxzZTsKICAgIHZpc2l0TGlzdChub2RlLmFubm90YXRpb25zLCB0aGlzKTsKICAgIGV4aXRQYXJlbnQob2xkUGFyZW50KTsKICAgIGN1cnJlbnRNZW1iZXIgPSBudWxsOwogIH0KCiAgdmlzaXRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBub2RlKSB7CiAgICBjdXJyZW50TWVtYmVyID0gbm9kZTsKICAgIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gdHJ1ZTsKICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBtZW1iZXIgbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIHBhcmFtZXRlcnMgYmVpbmcKICAgIC8vIGluIHNjb3BlIGluIHRoZSBpbml0aWFsaXplciBsaXN0LgogICAgdmFyIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgaW50IHN0YWNrSGVpZ2h0ID0gZW50ZXJMb2NhbFNjb3BlKCk7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUuZnVuY3Rpb24pOwogICAgdmlzaXRMaXN0KG5vZGUuaW5pdGlhbGl6ZXJzLCB0aGlzKTsKICAgIGlmICghaXNPdXRsaW5lKSB7CiAgICAgIGNoZWNrSW5pdGlhbGl6ZXJzKG5vZGUpOwogICAgfQogICAgZXhpdExvY2FsU2NvcGUoc3RhY2tIZWlnaHQpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSBmYWxzZTsKICAgIHZpc2l0TGlzdChub2RlLmFubm90YXRpb25zLCB0aGlzKTsKICAgIGV4aXRQYXJlbnQob2xkUGFyZW50KTsKICAgIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gZmFsc2U7CiAgICBjdXJyZW50TWVtYmVyID0gbnVsbDsKICB9CgogIHZpc2l0Q2xhc3MoQ2xhc3Mgbm9kZSkgewogICAgY3VycmVudENsYXNzID0gbm9kZTsKICAgIGRlY2xhcmVUeXBlUGFyYW1ldGVycyhub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHZhciBvbGRQYXJlbnQgPSBlbnRlclBhcmVudChub2RlKTsKICAgIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gZmFsc2U7CiAgICB2aXNpdExpc3Qobm9kZS5hbm5vdGF0aW9ucywgdGhpcyk7CiAgICBjbGFzc1R5cGVQYXJhbWV0ZXJzQXJlSW5TY29wZSA9IHRydWU7CiAgICB2aXNpdExpc3Qobm9kZS50eXBlUGFyYW1ldGVycywgdGhpcyk7CiAgICB2aXNpdExpc3Qobm9kZS5maWVsZHMsIHRoaXMpOwogICAgdmlzaXRMaXN0KG5vZGUuY29uc3RydWN0b3JzLCB0aGlzKTsKICAgIHZpc2l0TGlzdChub2RlLnByb2NlZHVyZXMsIHRoaXMpOwogICAgZXhpdFBhcmVudChvbGRQYXJlbnQpOwogICAgdW5kZWNsYXJlVHlwZVBhcmFtZXRlcnMobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICBjdXJyZW50Q2xhc3MgPSBudWxsOwogIH0KCiAgdmlzaXRGdW5jdGlvbk5vZGUoRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGRlY2xhcmVUeXBlUGFyYW1ldGVycyhub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIGJvb2wgc2F2ZWRJbkNhdGNoQmxvY2sgPSBpbkNhdGNoQmxvY2s7CiAgICBpbkNhdGNoQmxvY2sgPSBmYWxzZTsKICAgIHZpc2l0V2l0aExvY2FsU2NvcGUobm9kZSk7CiAgICBpbkNhdGNoQmxvY2sgPSBzYXZlZEluQ2F0Y2hCbG9jazsKICAgIHVuZGVjbGFyZVR5cGVQYXJhbWV0ZXJzKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogIH0KCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbm9kZS5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgaWYgKG5vZGUubmFtZWRQYXJhbWV0ZXJzW2kgLSAxXS5jb21wYXJlVG8obm9kZS5uYW1lZFBhcmFtZXRlcnNbaV0pID49IDApIHsKICAgICAgICBwcm9ibGVtKGN1cnJlbnRQYXJlbnQsCiAgICAgICAgICAgICJOYW1lZCBwYXJhbWV0ZXJzIGFyZSBub3Qgc29ydGVkIG9uIGZ1bmN0aW9uIHR5cGUgKCRub2RlKS4iKTsKICAgICAgfQogICAgfQogICAgZGVjbGFyZVR5cGVQYXJhbWV0ZXJzKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgZm9yICh2YXIgdHlwZVBhcmFtZXRlciBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQ/LmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIHZpc2l0TGlzdChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHZpc2l0TGlzdChub2RlLm5hbWVkUGFyYW1ldGVycywgdGhpcyk7CiAgICBub2RlLnJldHVyblR5cGUuYWNjZXB0KHRoaXMpOwogICAgdW5kZWNsYXJlVHlwZVBhcmFtZXRlcnMobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgfQoKICB2aXNpdEJsb2NrKEJsb2NrIG5vZGUpIHsKICAgIHZpc2l0V2l0aExvY2FsU2NvcGUobm9kZSk7CiAgfQoKICB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXRXaXRoTG9jYWxTY29wZShub2RlKTsKICB9CgogIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXRXaXRoTG9jYWxTY29wZShub2RlKTsKICB9CgogIHZpc2l0TGV0KExldCBub2RlKSB7CiAgICB2aXNpdFdpdGhMb2NhbFNjb3BlKG5vZGUpOwogIH0KCiAgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIGludCBzdGFja0hlaWdodCA9IGVudGVyTG9jYWxTY29wZSgpOwogICAgLy8gRG8gbm90IHZpc2l0IHRoZSBibG9jayBkaXJlY3RseSBiZWNhdXNlIHRoZSB2YWx1ZSBleHByZXNzaW9uIG5lZWRzIHRvCiAgICAvLyBiZSBpbiBpdHMgc2NvcGUuCiAgICBUcmVlTm9kZSBvbGRQYXJlbnQgPSBlbnRlclBhcmVudChub2RlKTsKICAgIGVudGVyUGFyZW50KG5vZGUuYm9keSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuYm9keS5zdGF0ZW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIG5vZGUuYm9keS5zdGF0ZW1lbnRzW2ldLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIGV4aXRQYXJlbnQobm9kZSk7CiAgICBub2RlLnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgIGV4aXRQYXJlbnQob2xkUGFyZW50KTsKICAgIGV4aXRMb2NhbFNjb3BlKHN0YWNrSGVpZ2h0KTsKICB9CgogIHZpc2l0Q2F0Y2goQ2F0Y2ggbm9kZSkgewogICAgYm9vbCBzYXZlZEluQ2F0Y2hCbG9jayA9IGluQ2F0Y2hCbG9jazsKICAgIGluQ2F0Y2hCbG9jayA9IHRydWU7CiAgICB2aXNpdFdpdGhMb2NhbFNjb3BlKG5vZGUpOwogICAgaW5DYXRjaEJsb2NrID0gc2F2ZWRJbkNhdGNoQmxvY2s7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlKSB7CiAgICBpZiAoIWluQ2F0Y2hCbG9jaykgewogICAgICBwcm9ibGVtKG5vZGUsICJSZXRocm93IG11c3QgYmUgaW5zaWRlIGEgQ2F0Y2ggYmxvY2suIik7CiAgICB9CiAgfQoKICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7CiAgICBpZiAocGFyZW50IGlzISBCbG9jayAmJgogICAgICAgICEocGFyZW50IGlzIENhdGNoICYmIHBhcmVudC5ib2R5ICE9IG5vZGUpICYmCiAgICAgICAgIShwYXJlbnQgaXMgRnVuY3Rpb25Ob2RlICYmIHBhcmVudC5ib2R5ICE9IG5vZGUpICYmCiAgICAgICAgcGFyZW50IGlzISBGdW5jdGlvbkRlY2xhcmF0aW9uICYmCiAgICAgICAgIShwYXJlbnQgaXMgRm9yU3RhdGVtZW50ICYmIHBhcmVudC5ib2R5ICE9IG5vZGUpICYmCiAgICAgICAgIShwYXJlbnQgaXMgRm9ySW5TdGF0ZW1lbnQgJiYgcGFyZW50LmJvZHkgIT0gbm9kZSkgJiYKICAgICAgICBwYXJlbnQgaXMhIExldCAmJgogICAgICAgIHBhcmVudCBpcyEgTG9jYWxJbml0aWFsaXplcikgewogICAgICBwcm9ibGVtKAogICAgICAgICAgbm9kZSwKICAgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIG11c3QgYmUgYSBkaXJlY3QgY2hpbGQgb2YgYSBCbG9jaywgIgogICAgICAgICAgIm5vdCAke3BhcmVudC5ydW50aW1lVHlwZX0uIik7CiAgICB9CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgZGVjbGFyZVZhcmlhYmxlKG5vZGUpOwogIH0KCiAgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlKSB7CiAgICBjaGVja1ZhcmlhYmxlSW5TY29wZShub2RlLnZhcmlhYmxlLCBub2RlKTsKICAgIHZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgfQoKICB2aXNpdFZhcmlhYmxlU2V0KFZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIGNoZWNrVmFyaWFibGVJblNjb3BlKG5vZGUudmFyaWFibGUsIG5vZGUpOwogICAgdmlzaXRDaGlsZHJlbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0ID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiU3RhdGljR2V0IHdpdGhvdXQgdGFyZ2V0LiIpOwogICAgfQogICAgLy8gQ3VycmVudGx5IENvbnN0cnVjdG9yLmhhc0dldHRlciByZXR1cm5zIGBmYWxzZWAgZXZlbiB0aG91Z2ggZmFzdGEgdXNlcyBpdAogICAgLy8gYXMgYSBnZXR0ZXIgZm9yIGludGVybmFsIHB1cnBvc2VzOgogICAgLy8KICAgIC8vIEZhc3RhIGlzIGxldHRpbmcgYWxsIGNhbGwgc2l0ZSBvZiBhIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yIGJlIHJlc29sdmVkCiAgICAvLyB0byB0aGUgcmVhbCB0YXJnZXQuICBJbiBvcmRlciB0byByZXNvbHZlIGl0LCBpdCBzZWVtcyB0byBhZGQgYSBib2R5IGludG8KICAgIC8vIHRoZSByZWRpcmVjdGluZy1mYWN0b3J5IGNvbnN0cnVjdG9yIHdoaWNoIGNhY2hlcyB0aGUgdGFyZ2V0IGNvbnN0cnVjdG9yLgogICAgLy8gVGhhdCBjYWNoZSBpcyB2aWEgYSBgU3RhdGljR2V0KHJlYWwtY29uc3RydWN0b3IpYCBub2RlLCB3aGljaCB3ZSBtYWtlCiAgICAvLyBoZXJlIHBhc3MgdGhlIHZlcmlmaWVyLgogICAgaWYgKCFub2RlLnRhcmdldC5oYXNHZXR0ZXIgJiYgbm9kZS50YXJnZXQgaXMhIENvbnN0cnVjdG9yKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIlN0YXRpY0dldCBvZiAnJHtub2RlLnRhcmdldH0nIHdpdGhvdXQgZ2V0dGVyLiIpOwogICAgfQogICAgaWYgKG5vZGUudGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgcHJvYmxlbShub2RlLCAiU3RhdGljR2V0IG9mICcke25vZGUudGFyZ2V0fScgdGhhdCdzIGFuIGluc3RhbmNlIG1lbWJlci4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljU2V0KFN0YXRpY1NldCBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0ID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiU3RhdGljU2V0IHdpdGhvdXQgdGFyZ2V0LiIpOwogICAgfQogICAgaWYgKCFub2RlLnRhcmdldC5oYXNTZXR0ZXIpIHsKICAgICAgcHJvYmxlbShub2RlLCAiU3RhdGljU2V0IHRvICcke25vZGUudGFyZ2V0fScgd2l0aG91dCBzZXR0ZXIuIik7CiAgICB9CiAgICBpZiAobm9kZS50YXJnZXQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICBwcm9ibGVtKG5vZGUsICJTdGF0aWNTZXQgdG8gJyR7bm9kZS50YXJnZXR9JyB0aGF0J3MgYW4gaW5zdGFuY2UgbWVtYmVyLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgY2hlY2tUYXJnZXRlZEludm9jYXRpb24obm9kZS50YXJnZXQsIG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgcHJvYmxlbShub2RlLAogICAgICAgICAgIlN0YXRpY0ludm9jYXRpb24gb2YgJyR7bm9kZS50YXJnZXR9JyB0aGF0J3MgYW4gaW5zdGFuY2UgbWVtYmVyLiIpOwogICAgfQogICAgaWYgKG5vZGUuaXNDb25zdCAmJgogICAgICAgICghbm9kZS50YXJnZXQuaXNDb25zdCB8fAogICAgICAgICAgICAhbm9kZS50YXJnZXQuaXNFeHRlcm5hbCB8fAogICAgICAgICAgICBub2RlLnRhcmdldC5raW5kICE9IFByb2NlZHVyZUtpbmQuRmFjdG9yeSkpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAiQ29uc3RhbnQgU3RhdGljSW52b2NhdGlvbiBvZiAnJHtub2RlLnRhcmdldH0nIHRoYXQgaXNuJ3QiCiAgICAgICAgICAiIGEgY29uc3QgZXh0ZXJuYWwgZmFjdG9yeS4iKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tUYXJnZXRlZEludm9jYXRpb24oTWVtYmVyIHRhcmdldCwgSW52b2NhdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXRDaGlsZHJlbihub2RlKTsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICIke25vZGUucnVudGltZVR5cGV9IHdpdGhvdXQgdGFyZ2V0LiIpOwogICAgfQogICAgaWYgKHRhcmdldC5mdW5jdGlvbiA9PSBudWxsKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIiR7bm9kZS5ydW50aW1lVHlwZX0gd2l0aG91dCBmdW5jdGlvbi4iKTsKICAgIH0KICAgIGlmICghYXJlQXJndW1lbnRzQ29tcGF0aWJsZShub2RlLmFyZ3VtZW50cywgdGFyZ2V0LmZ1bmN0aW9uKSkgewogICAgICBwcm9ibGVtKG5vZGUsCiAgICAgICAgICAiJHtub2RlLnJ1bnRpbWVUeXBlfSB3aXRoIGluY29tcGF0aWJsZSBhcmd1bWVudHMgZm9yICcke3RhcmdldH0nLiIpOwogICAgfQogICAgaW50IGV4cGVjdGVkVHlwZVBhcmFtZXRlcnMgPSB0YXJnZXQgaXMgQ29uc3RydWN0b3IKICAgICAgICA/IHRhcmdldC5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5sZW5ndGgKICAgICAgICA6IHRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMubGVuZ3RoICE9IGV4cGVjdGVkVHlwZVBhcmFtZXRlcnMpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAiJHtub2RlLnJ1bnRpbWVUeXBlfSB3aXRoIHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyIKICAgICAgICAgICIgZm9yICcke3RhcmdldH0nLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChEaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0ID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiRGlyZWN0UHJvcGVydHlHZXQgd2l0aG91dCB0YXJnZXQuIik7CiAgICB9CiAgICBpZiAoIW5vZGUudGFyZ2V0Lmhhc0dldHRlcikgewogICAgICBwcm9ibGVtKG5vZGUsICJEaXJlY3RQcm9wZXJ0eUdldCBvZiAnJHtub2RlLnRhcmdldH0nIHdpdGhvdXQgZ2V0dGVyLiIpOwogICAgfQogICAgaWYgKCFub2RlLnRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIHByb2JsZW0oCiAgICAgICAgICBub2RlLAogICAgICAgICAgIkRpcmVjdFByb3BlcnR5R2V0IG9mICcke25vZGUudGFyZ2V0fScgdGhhdCBpc24ndCBhbiIKICAgICAgICAgICIgaW5zdGFuY2UgbWVtYmVyLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChEaXJlY3RQcm9wZXJ0eVNldCBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0ID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiRGlyZWN0UHJvcGVydHlTZXQgd2l0aG91dCB0YXJnZXQuIik7CiAgICB9CiAgICBpZiAoIW5vZGUudGFyZ2V0Lmhhc1NldHRlcikgewogICAgICBwcm9ibGVtKG5vZGUsICJEaXJlY3RQcm9wZXJ0eVNldCBvZiAnJHtub2RlLnRhcmdldH0nIHdpdGhvdXQgc2V0dGVyLiIpOwogICAgfQogICAgaWYgKCFub2RlLnRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIkRpcmVjdFByb3BlcnR5U2V0IG9mICcke25vZGUudGFyZ2V0fScgdGhhdCBpcyBzdGF0aWMuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICBjaGVja1RhcmdldGVkSW52b2NhdGlvbihub2RlLnRhcmdldCwgbm9kZSk7CiAgICBpZiAobm9kZS5yZWNlaXZlciA9PSBudWxsKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIkRpcmVjdE1ldGhvZEludm9jYXRpb24gd2l0aG91dCByZWNlaXZlci4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICBjaGVja1RhcmdldGVkSW52b2NhdGlvbihub2RlLnRhcmdldCwgbm9kZSk7CiAgICBpZiAobm9kZS50YXJnZXQuZW5jbG9zaW5nQ2xhc3MuaXNBYnN0cmFjdCkgewogICAgICBwcm9ibGVtKG5vZGUsICJDb25zdHJ1Y3Rvckludm9jYXRpb24gb2YgYWJzdHJhY3QgY2xhc3MuIik7CiAgICB9CiAgICBpZiAobm9kZS5pc0NvbnN0ICYmICFub2RlLnRhcmdldC5pc0NvbnN0KSB7CiAgICAgIHByb2JsZW0oCiAgICAgICAgICBub2RlLAogICAgICAgICAgIkNvbnN0YW50IENvbnN0cnVjdG9ySW52b2NhdGlvbiBmbyAnJHtub2RlLnRhcmdldH0nIHRoYXQiCiAgICAgICAgICAiIGlzbid0IGNvbnN0LiIpOwogICAgfQogIH0KCiAgYm9vbCBhcmVBcmd1bWVudHNDb21wYXRpYmxlKEFyZ3VtZW50cyBhcmd1bWVudHMsIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbikgewogICAgaWYgKGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IGZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA+IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBuYW1lZExvb3A6CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5uYW1lZC5sZW5ndGg7ICsraSkgewogICAgICB2YXIgYXJndW1lbnQgPSBhcmd1bWVudHMubmFtZWRbaV07CiAgICAgIFN0cmluZyBuYW1lID0gYXJndW1lbnQubmFtZTsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyArK2opIHsKICAgICAgICBpZiAoZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzW2pdLm5hbWUgPT0gbmFtZSkgY29udGludWUgbmFtZWRMb29wOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAobm9kZS50YXJnZXQgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICJObyB0YXJnZXQuIik7CiAgICB9IGVsc2UgaWYgKG5vZGUudGFyZ2V0LnBhcmVudCA9PSBudWxsKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIlRhcmdldCBoYXMgbm8gcGFyZW50LiIpOwogICAgfSBlbHNlIHsKICAgICAgU3dpdGNoU3RhdGVtZW50IHN0YXRlbWVudCA9IG5vZGUudGFyZ2V0LnBhcmVudDsKICAgICAgZm9yIChTd2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gc3RhdGVtZW50LmNhc2VzKSB7CiAgICAgICAgaWYgKHN3aXRjaENhc2UgPT0gbm9kZS50YXJnZXQpIHJldHVybjsKICAgICAgfQogICAgICBwcm9ibGVtKG5vZGUsICJTd2l0Y2ggY2FzZSBpc24ndCBjaGlsZCBvZiBwYXJlbnQuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSB7CiAgICBpZiAobm9kZS50cmFuc2Zvcm1lckZsYWdzICYgVHJhbnNmb3JtZXJGbGFnLnNlZW5CeVZlcmlmaWVyID09IDApIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsICJEYW5nbGluZyByZWZlcmVuY2UgdG8gJyRub2RlJywgcGFyZW50IGlzOiAnJHtub2RlLnBhcmVudH0nLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDbGFzc1JlZmVyZW5jZShDbGFzcyBub2RlKSB7CiAgICBpZiAoIWNsYXNzZXMuY29udGFpbnMobm9kZSkpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsICJEYW5nbGluZyByZWZlcmVuY2UgdG8gJyRub2RlJywgcGFyZW50IGlzOiAnJHtub2RlLnBhcmVudH0nLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlZGVmUmVmZXJlbmNlKFR5cGVkZWYgbm9kZSkgewogICAgaWYgKCF0eXBlZGVmcy5jb250YWlucyhub2RlKSkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgbm9kZSwgIkRhbmdsaW5nIHJlZmVyZW5jZSB0byAnJG5vZGUnLCBwYXJlbnQgaXM6ICcke25vZGUucGFyZW50fSciKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgdmFyIHBhcmFtZXRlciA9IG5vZGUucGFyYW1ldGVyOwogICAgaWYgKCF0eXBlUGFyYW1ldGVyc0luU2NvcGUuY29udGFpbnMocGFyYW1ldGVyKSkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgY3VycmVudFBhcmVudCwKICAgICAgICAgICJUeXBlIHBhcmFtZXRlciAnJHBhcmFtZXRlcicgcmVmZXJlbmNlZCBvdXQgb2YiCiAgICAgICAgICAiIHNjb3BlLCBwYXJlbnQgaXM6ICcke3BhcmFtZXRlci5wYXJlbnR9Jy4iKTsKICAgIH0KICAgIGlmIChwYXJhbWV0ZXIucGFyZW50IGlzIENsYXNzICYmICFjbGFzc1R5cGVQYXJhbWV0ZXJzQXJlSW5TY29wZSkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgY3VycmVudFBhcmVudCwKICAgICAgICAgICJUeXBlIHBhcmFtZXRlciAnJHBhcmFtZXRlcicgcmVmZXJlbmNlZCBmcm9tIgogICAgICAgICAgIiBzdGF0aWMgY29udGV4dCwgcGFyZW50IGlzOiAnJHtwYXJhbWV0ZXIucGFyZW50fScuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBub2RlLmNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIGN1cnJlbnRQYXJlbnQsCiAgICAgICAgICAiVHlwZSAkbm9kZSBwcm92aWRlcyAke25vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGh9IgogICAgICAgICAgIiB0eXBlIGFyZ3VtZW50cyBidXQgdGhlIGNsYXNzIGRlY2xhcmVzIgogICAgICAgICAgIiAke25vZGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aH0gcGFyYW1ldGVycy4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkgewogICAgY2hlY2tUeXBlZGVmKG5vZGUudHlwZWRlZk5vZGUpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gbm9kZS50eXBlZGVmTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIGN1cnJlbnRQYXJlbnQsCiAgICAgICAgICAiVGhlIHR5cGVkZWYgdHlwZSAkbm9kZSBwcm92aWRlcyAke25vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGh9IgogICAgICAgICAgIiB0eXBlIGFyZ3VtZW50cyBidXQgdGhlIHR5cGVkZWYgZGVjbGFyZXMiCiAgICAgICAgICAiICR7bm9kZS50eXBlZGVmTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGh9IHBhcmFtZXRlcnMuIik7CiAgICB9CiAgfQp9CgpjbGFzcyBDaGVja1BhcmVudFBvaW50ZXJzIGV4dGVuZHMgVmlzaXRvciB7CiAgc3RhdGljIHZvaWQgY2hlY2soVHJlZU5vZGUgbm9kZSkgewogICAgbm9kZS5hY2NlcHQobmV3IENoZWNrUGFyZW50UG9pbnRlcnMobm9kZS5wYXJlbnQpKTsKICB9CgogIFRyZWVOb2RlIHBhcmVudDsKCiAgQ2hlY2tQYXJlbnRQb2ludGVycyhbdGhpcy5wYXJlbnRdKTsKCiAgZGVmYXVsdFRyZWVOb2RlKFRyZWVOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlLnBhcmVudCAhPSBwYXJlbnQpIHsKICAgICAgdGhyb3cgbmV3IFZlcmlmaWNhdGlvbkVycm9yKAogICAgICAgICAgcGFyZW50LAogICAgICAgICAgbm9kZSwKICAgICAgICAgICJQYXJlbnQgcG9pbnRlciBvbiAnJHtub2RlLnJ1bnRpbWVUeXBlfScgIgogICAgICAgICAgImlzICcke25vZGUucGFyZW50LnJ1bnRpbWVUeXBlfScgIgogICAgICAgICAgImJ1dCBzaG91bGQgYmUgJyR7cGFyZW50LnJ1bnRpbWVUeXBlfScuIik7CiAgICB9CiAgICB2YXIgb2xkUGFyZW50ID0gcGFyZW50OwogICAgcGFyZW50ID0gbm9kZTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIHBhcmVudCA9IG9sZFBhcmVudDsKICB9Cn0KCnZvaWQgY2hlY2tJbml0aWFsaXplcnMoQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICAvLyBUT0RPKGFoZSk6IEknbGwgYWRkIG1vcmUgaGVyZSBpbiBvdGhlciBDTHMuCn0KgpMATk48FwETJQEsJQIBGhoBFwEYATwBDxcKNhIuBhw1ThcNLiMcBgQCASkBMwQ1OC80R0tNLgFLNBoBHQEaARgBFgEaATkBKy4EASMZBAE/HjkEASgyDxA9NjcjBiMaFgQBKB8EATEBKT8rBigEASYnHhsEASwpGSEEASZJH0EGPwQBKEAEATdBSgY3IQQBOTgEAT8yJSURTggzRwgGBAFBMQQBTEFBBgQBKAoxLiZJDAoxKU8MCjAuMQoIIBAxMi4zCggwBgQBJBseGwQBJCQsLkwGGzQ1OSUaUEseITEsBAEfGFAjBAEbGic1KFAaBipMGgY0JBwrJxsaBAEjGic0ICsnGxoEAScaKk4pJykiKBYfBiErJxsrGgQBGxkwJysnKioiKCYbMhkEASkwKxofJjIEASk8UR9KCAYwNSkGMCsiMgQBGx8EASkfBAEtHwQBFx8EAS8pTRgsHDwsBhYdGyEEARsrGR8mBAEMHxk+BgQBNx4cNTwqPD4aJw8QRCkGGRsEAScvGQQBJy8ZBAEMIxkfMgZRKgdPUFBNH0FGBihRBgQBDCMZHzIGIkYGKFEGBAEMMTAoFE4GGCEnOg8QRSkGBAFLGRo8BiM+BkQUTwY3NjFBDxBEIAYEAQwzGR86BiJOBikPEEAgBgQBDDMZHzoGIk4GKU4GBAEMPTAhQQYEAQw7MDFBBjAPEEQcBgQBTEkUBk4UBg83KSNCSggUBhEEAQw/HyMtLg02Ny8IOwYEAQwoRw9QBgQBDCQjD1AGBAEMKCQPTwYEAQwzJDYPGTo4BkcPGThBBgQBDCseTQ8ZPTNDBgQBDCckHk8PGUk1RQYEAgEsJTcEARMBJgEjISMSEDUtNQYcEx4YBAIBMjECARxwYWNrYWdlOmtlcm5lbC92ZXJpZmllci5kYXJ0RHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYS5kYXJ0kKUvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIERhcnRUeXBlLAogICAgICAgIERhcnRUeXBlVmlzaXRvciwKICAgICAgICBEYXJ0VHlwZVZpc2l0b3IxLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIFR5cGVkZWZUeXBlLAogICAgICAgIFZpc2l0b3I7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2ltcG9ydF90YWJsZS5kYXJ0JyBzaG93IEltcG9ydFRhYmxlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90ZXh0L2FzdF90b190ZXh0LmRhcnQnCiAgICBzaG93IEFubm90YXRvciwgTmFtZVN5c3RlbSwgUHJpbnRlciwgZ2xvYmFsRGVidWdnaW5nTmFtZXM7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgovLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgdHlwZSBzY2hlbWEgY29udGFpbnMgYD9gIHNvbWV3aGVyZSBpbnNpZGUgaXQuCmJvb2wgaXNLbm93bihEYXJ0VHlwZSBzY2hlbWEpID0+IHNjaGVtYS5hY2NlcHQobmV3IF9Jc0tub3duVmlzaXRvcigpKTsKCi8vLyBDb252ZXJ0cyBhIFtEYXJ0VHlwZV0gdG8gYSBzdHJpbmcsIHJlcHJlc2VudGluZyB0aGUgdW5rbm93biB0eXBlIGFzIGA/YC4KU3RyaW5nIHR5cGVTY2hlbWFUb1N0cmluZyhEYXJ0VHlwZSBzY2hlbWEpIHsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIG5ldyBUeXBlU2NoZW1hUHJpbnRlcihidWZmZXIsIHN5bnRoZXRpY05hbWVzOiBnbG9iYWxEZWJ1Z2dpbmdOYW1lcykKICAgICAgLndyaXRlTm9kZShzY2hlbWEpOwogIHJldHVybiAnJGJ1ZmZlcic7Cn0KCi8vLyBFeHRlbnNpb24gb2YgW1ByaW50ZXJdIHRoYXQgcmVwcmVzZW50cyB0aGUgdW5rbm93biB0eXBlIGFzIGA/YC4KY2xhc3MgVHlwZVNjaGVtYVByaW50ZXIgZXh0ZW5kcyBQcmludGVyIGltcGxlbWVudHMgVHlwZVNjaGVtYVZpc2l0b3I8TnVsbD4gewogIFR5cGVTY2hlbWFQcmludGVyKFN0cmluZ1Npbmsgc2luaywKICAgICAge05hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMsCiAgICAgIGJvb2wgc2hvd0V4dGVybmFsLAogICAgICBib29sIHNob3dPZmZzZXRzOiBmYWxzZSwKICAgICAgSW1wb3J0VGFibGUgaW1wb3J0VGFibGUsCiAgICAgIEFubm90YXRvciBhbm5vdGF0b3J9KQogICAgICA6IHN1cGVyKHNpbmssCiAgICAgICAgICAgIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcywKICAgICAgICAgICAgc2hvd0V4dGVybmFsOiBzaG93RXh0ZXJuYWwsCiAgICAgICAgICAgIHNob3dPZmZzZXRzOiBzaG93T2Zmc2V0cywKICAgICAgICAgICAgaW1wb3J0VGFibGU6IGltcG9ydFRhYmxlLAogICAgICAgICAgICBhbm5vdGF0b3I6IGFubm90YXRvcik7CgogIEBvdmVycmlkZQogIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgewogICAgd3JpdGVXb3JkKCc/Jyk7CiAgfQp9CgovLy8gRXh0ZW5zaW9uIG9mIFtEYXJ0VHlwZVZpc2l0b3JdIHdoaWNoIGNhbiB2aXNpdCBbVW5rbm93blR5cGVdLgpjbGFzcyBUeXBlU2NoZW1hVmlzaXRvcjxSPiBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxSPiB7CiAgLy8vIENhbGxlZCB3aGVuIFtVbmtub3duVHlwZV0gaXMgdmlzaXRlZC4KICBSIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwp9CgovLy8gVGhlIHVua25vd24gdHlwZSAoZGVub3RlZCBgP2ApIGlzIGFuIG9iamVjdCB3aGljaCBjYW4gYXBwZWFyIGFueXdoZXJlIHRoYXQKLy8vIGEgdHlwZSBpcyBleHBlY3RlZC4gIEl0IHJlcHJlc2VudHMgYSBjb21wb25lbnQgb2YgYSB0eXBlIHdoaWNoIGhhcyBub3QgeWV0Ci8vLyBiZWVuIGZpeGVkIGJ5IGluZmVyZW5jZS4KLy8vCi8vLyBUaGUgdW5rbm93biB0eXBlIGNhbm5vdCBhcHBlYXIgaW4gcHJvZ3JhbXMgb3IgaW4gZmluYWwgaW5mZXJyZWQgdHlwZXM6IGl0IGlzCi8vLyBwdXJlbHkgcGFydCBvZiB0aGUgbG9jYWwgaW5mZXJlbmNlIHByb2Nlc3MuCmNsYXNzIFVua25vd25UeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIEBvdmVycmlkZQogIGdldCBudWxsYWJpbGl0eSA9PiB1bnN1cHBvcnRlZCgibnVsbGFiaWxpdHkiLCAtMSwgbnVsbCk7CgogIGNvbnN0IFVua25vd25UeXBlKCk7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICAvLyBUaGlzIGNsYXNzIGRvZXNuJ3QgaGF2ZSBhbnkgZmllbGRzIHNvIGFsbCBpbnN0YW5jZXMgb2YgYFVua25vd25UeXBlYCBhcmUKICAgIC8vIGVxdWFsLgogICAgcmV0dXJuIG90aGVyIGlzIFVua25vd25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvcjxkeW5hbWljPiB2KSB7CiAgICBpZiAodiBpcyBUeXBlU2NoZW1hVmlzaXRvcjxkeW5hbWljPikgewogICAgICByZXR1cm4gdi52aXNpdFVua25vd25UeXBlKHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gTm90ZTogaW4gcHJpbmNpcGxlIGl0IHNlZW1zIGxpa2UgdGhpcyBzaG91bGQgdGhyb3csIHNpbmNlIGFueSB2aXNpdG9yCiAgICAgIC8vIHRoYXQgb3BlcmF0ZXMgb24gYSB0eXBlIHNjaGVtYSBvdWdodCB0byBpbmhlcml0IGZyb20gVHlwZVNjaGVtYVZpc2l0b3IuCiAgICAgIC8vIEhvd2V2ZXIsIHRoYXQgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHVzZSB0b1N0cmluZygpIG9uIGFueSB0eXBlCiAgICAgIC8vIHNjaGVtYSwgc2luY2UgdG9TdHJpbmcoKSB1c2VzIHRoZSBrZXJuZWwncyBQcmludGVyIHZpc2l0b3IsIHdoaWNoIGNhbid0CiAgICAgIC8vIHBvc3NpYmx5IGluaGVyaXQgZnJvbSBUeXBlU2NoZW1hVmlzaXRvciBzaW5jZSBpdCdzIGluc2lkZSBrZXJuZWwuCiAgICAgIHJldHVybiB2LmRlZmF1bHREYXJ0VHlwZSh0aGlzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGFjY2VwdDEoRGFydFR5cGVWaXNpdG9yMTxkeW5hbWljLCBkeW5hbWljPiB2LCBhcmcpID0+CiAgICAgIHYuZGVmYXVsdERhcnRUeXBlKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxkeW5hbWljPiB2KSB7fQp9CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIFtpc0tub3duXS4KY2xhc3MgX0lzS25vd25WaXNpdG9yIGV4dGVuZHMgVHlwZVNjaGVtYVZpc2l0b3I8Ym9vbD4gewogIEBvdmVycmlkZQogIGJvb2wgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGlmICghbm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgZm9yICh2YXIgcGFyYW1ldGVyVHlwZSBpbiBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgIGlmICghcGFyYW1ldGVyVHlwZS5hY2NlcHQodGhpcykpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvciAodmFyIG5hbWVkUGFyYW1ldGVyVHlwZSBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBpZiAoIW5hbWVkUGFyYW1ldGVyVHlwZS50eXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIGZvciAodmFyIHR5cGVBcmd1bWVudCBpbiBub2RlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgaWYgKCF0eXBlQXJndW1lbnQuYWNjZXB0KHRoaXMpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICBmb3IgKHZhciB0eXBlQXJndW1lbnQgaW4gbm9kZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICghdHlwZUFyZ3VtZW50LmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgPT4gZmFsc2U7Cn0KgIkATU4/ASEJEhkaFhcVEQE8AS4/ASwBR0cBTS0sRhoUAgFETSUiGR8fHBQsKCYmIwEMJxQEAgFCOCxBAgFPTx0EUTAlDDsBFwEjUA4hBAEMJysnDU9RTlFLJgYEAQw4JAEMJwIBJTgMLwEMLjU7NQY7PwYRBAEMMDM0BhEEAQwsMzQGEQQBDDQCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWEuZGFydEJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnTAAPVmLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGlzIGZpbGUgZGVjbGFyZXMgYSAic2hhZG93IGhpZXJhcmNoeSIgb2YgY29uY3JldGUgY2xhc3NlcyB3aGljaCBleHRlbmQKLy8vIHRoZSBrZXJuZWwgY2xhc3MgaGllcmFyY2h5LCBhZGRpbmcgbWV0aG9kcyBhbmQgZmllbGRzIG5lZWRlZCBieSB0aGUKLy8vIEJvZHlCdWlsZGVyLgovLy8KLy8vIEluc3RhbmNlcyBvZiB0aGVzZSBjbGFzc2VzIG1heSBiZSBjcmVhdGVkIHVzaW5nIHRoZSBmYWN0b3J5IG1ldGhvZHMgaW4KLy8vIGBhc3RfZmFjdG9yeS5kYXJ0YC4KLy8vCi8vLyBOb3RlIHRoYXQgdGhlc2UgY2xhc3NlcyByZXByZXNlbnQgdGhlIERhcnQgbGFuZ3VhZ2UgcHJpb3IgdG8gZGVzdWdhcmluZy4KLy8vIFdoZW4gYSBzaW5nbGUgRGFydCBjb25zdHJ1Y3QgZGVzdWdhcnMgdG8gYSB0cmVlIGNvbnRhaW5pbmcgbXVsdGlwbGUga2VybmVsCi8vLyBBU1Qgbm9kZXMsIHRoZSBzaGFkb3cgY2xhc3MgZXh0ZW5kcyB0aGUga2VybmVsIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoZQovLy8gZGVzdWdhcmVkIHRyZWUuCi8vLwovLy8gVGhpcyBtZWFucyB0aGF0IGluIHNvbWUgY2FzZXMgbXVsdGlwbGUgc2hhZG93IGNsYXNzZXMgbWF5IGV4dGVuZCB0aGUgc2FtZQovLy8ga2VybmVsIGNsYXNzLCBiZWNhdXNlIG11bHRpcGxlIGNvbnN0cnVjdHMgaW4gRGFydCBtYXkgZGVzdWdhciB0byBhIHRyZWUKLy8vIHdpdGggdGhlIHNhbWUga2luZCBvZiByb290IG5vZGUuCgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGtlcm5lbCBzaG93IEV4cHJlc3Npb24sIEluaXRpYWxpemVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IFN1YnN0aXR1dGlvbjsKCmltcG9ydCAnLi4vLi4vYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydCcKICAgIHNob3cKICAgICAgICBJbnN0cnVtZW50YXRpb24sCiAgICAgICAgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIsCiAgICAgICAgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlLAogICAgICAgIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3M7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgbWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVBbWJpZ3VvdXNJbmZvcm1hdGlvbiwKICAgICAgICBtZXNzYWdlQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9uLAogICAgICAgIG1lc3NhZ2VOb25OdWxsQXdhcmVTcHJlYWRJc051bGwsCiAgICAgICAgbWVzc2FnZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2UsCiAgICAgICAgbWVzc2FnZVZvaWRFeHByZXNzaW9uLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHksCiAgICAgICAgdGVtcGxhdGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGUsCiAgICAgICAgdGVtcGxhdGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUsCiAgICAgICAgdGVtcGxhdGVJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSwKICAgICAgICB0ZW1wbGF0ZVNwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaCwKICAgICAgICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoLAogICAgICAgIHRlbXBsYXRlU3ByZWFkVHlwZU1pc21hdGNoLAogICAgICAgIHRlbXBsYXRlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUsCiAgICAgICAgdGVtcGxhdGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHk7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgZ2V0RmlsZVVyaSwgdW5oYW5kbGVkLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9jbGFzc19idWlsZGVyLmRhcnQnIHNob3cgU291cmNlQ2xhc3NCdWlsZGVyOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS9pbmZlcmVuY2VfaGVscGVyLmRhcnQnIHNob3cgSW5mZXJlbmNlSGVscGVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVyZW5jZV9lbmdpbmUuZGFydCcKICAgIHNob3cgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5LCBUeXBlSW5mZXJlbmNlRW5naW5lOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQnCiAgICBzaG93IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQsIFR5cGVJbmZlcnJlciwgVHlwZUluZmVycmVySW1wbDsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9wcm9tb3Rpb24uZGFydCcKICAgIHNob3cgVHlwZVByb21vdGVyLCBUeXBlUHJvbW90ZXJJbXBsLCBUeXBlUHJvbW90aW9uRmFjdCwgVHlwZVByb21vdGlvblNjb3BlOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYV9lbGltaW5hdGlvbi5kYXJ0JyBzaG93IGdyZWF0ZXN0Q2xvc3VyZTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cgVHlwZVNjaGVtYUVudmlyb25tZW50LCBnZXRQb3NpdGlvbmFsUGFyYW1ldGVyVHlwZTsKCmltcG9ydCAnYm9keV9idWlsZGVyLmRhcnQnIHNob3cgY29tYmluZVN0YXRlbWVudHM7CgppbXBvcnQgJ2NvbGxlY3Rpb25zLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29udHJvbEZsb3dNYXBFbnRyeSwKICAgICAgICBGb3JFbGVtZW50LAogICAgICAgIEZvckluRWxlbWVudCwKICAgICAgICBGb3JJbk1hcEVudHJ5LAogICAgICAgIEZvck1hcEVudHJ5LAogICAgICAgIElmRWxlbWVudCwKICAgICAgICBJZk1hcEVudHJ5LAogICAgICAgIFNwcmVhZEVsZW1lbnQsCiAgICAgICAgU3ByZWFkTWFwRW50cnksCiAgICAgICAgY29udmVydFRvRWxlbWVudDsKCmltcG9ydCAnZXhwcmVzc2lvbl9nZW5lcmF0b3IuZGFydCcgc2hvdyBtYWtlTGV0OwoKaW1wb3J0ICdpbXBsaWNpdF90eXBlX2FyZ3VtZW50LmRhcnQnIHNob3cgSW1wbGljaXRUeXBlQXJndW1lbnQ7CgpwYXJ0ICJpbmZlcmVuY2VfdmlzaXRvci5kYXJ0IjsKcGFydCAiaW5mZXJyZWRfdHlwZV92aXNpdG9yLmRhcnQiOwoKLy8vIENvbXB1dGVzIHRoZSByZXR1cm4gdHlwZSBvZiBhIChwb3NzaWJseSBmYWN0b3J5KSBjb25zdHJ1Y3Rvci4KSW50ZXJmYWNlVHlwZSBjb21wdXRlQ29uc3RydWN0b3JSZXR1cm5UeXBlKE1lbWJlciBjb25zdHJ1Y3RvcikgewogIGlmIChjb25zdHJ1Y3RvciBpcyBDb25zdHJ1Y3RvcikgewogICAgcmV0dXJuIGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzLnRoaXNUeXBlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gY29uc3RydWN0b3IuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICB9Cn0KCkxpc3Q8RGFydFR5cGU+IGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cyhBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgaWYgKGFyZ3VtZW50cyBpcyBBcmd1bWVudHNKdWRnbWVudCkgewogICAgcmV0dXJuIGFyZ3VtZW50cy5faGFzRXhwbGljaXRUeXBlQXJndW1lbnRzID8gYXJndW1lbnRzLnR5cGVzIDogbnVsbDsKICB9IGVsc2UgewogICAgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG9ubHkgYmUgdGFrZW4gaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGVyZSBhcmUgbm8KICAgIC8vIHR5cGUgYXJndW1lbnRzIGF0IGFsbCwgZS5nLiBjYWxsaW5nIGEgdXNlci1kZWZpbmFibGUgb3BlcmF0b3IuCiAgICBhc3NlcnQoYXJndW1lbnRzLnR5cGVzLmlzRW1wdHkpOwogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gSW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgY2xhc3MgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgpjbGFzcyBDbGFzc0luZmVyZW5jZUluZm8gewogIC8vLyBUaGUgYnVpbGRlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBjbGFzcy4KICBmaW5hbCBTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlcjsKCiAgLy8vIFRoZSB2aXNpdG9yIGZvciBkZXRlcm1pbmluZyBpZiBhIGdpdmVuIHR5cGUgbWFrZXMgY292YXJpYW50IHVzZSBvZiBvbmUgb2YKICAvLy8gdGhlIGNsYXNzJ3MgZ2VuZXJpYyBwYXJhbWV0ZXJzLCBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIGNvdmFyaWFudCBjaGVja3MuCiAgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5IG5lZWRzQ2hlY2tWaXNpdG9yOwoKICAvLy8gR2V0dGVycyBhbmQgbWV0aG9kcyBpbiB0aGUgY2xhc3MncyBBUEkuICBNYXkgaW5jbHVkZSBmb3J3YXJkaW5nIG5vZGVzLgogIGZpbmFsIGdldHRlcnNBbmRNZXRob2RzID0gPE1lbWJlcj5bXTsKCiAgLy8vIFNldHRlcnMgaW4gdGhlIGNsYXNzJ3MgQVBJLiAgTWF5IGluY2x1ZGUgZm9yd2FyZGluZyBub2Rlcy4KICBmaW5hbCBzZXR0ZXJzID0gPE1lbWJlcj5bXTsKCiAgQ2xhc3NJbmZlcmVuY2VJbmZvKHRoaXMuYnVpbGRlcik7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHNldCBvZiBpbnZvY2F0aW9uIGFyZ3VtZW50cy4KY2xhc3MgQXJndW1lbnRzSnVkZ21lbnQgZXh0ZW5kcyBBcmd1bWVudHMgewogIGJvb2wgX2hhc0V4cGxpY2l0VHlwZUFyZ3VtZW50czsKCiAgTGlzdDxFeHByZXNzaW9uPiBnZXQgcG9zaXRpb25hbEp1ZGdtZW50cyA9PiBwb3NpdGlvbmFsLmNhc3QoKTsKCiAgQXJndW1lbnRzSnVkZ21lbnQoTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsLAogICAgICB7TGlzdDxEYXJ0VHlwZT4gdHlwZXMsIExpc3Q8TmFtZWRFeHByZXNzaW9uPiBuYW1lZH0pCiAgICAgIDogX2hhc0V4cGxpY2l0VHlwZUFyZ3VtZW50cyA9IHR5cGVzICE9IG51bGwgJiYgdHlwZXMuaXNOb3RFbXB0eSwKICAgICAgICBzdXBlcihwb3NpdGlvbmFsLCB0eXBlczogdHlwZXMsIG5hbWVkOiBuYW1lZCk7CgogIHN0YXRpYyB2b2lkIHNldE5vbkluZmVycmFibGVBcmd1bWVudFR5cGVzKAogICAgICBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICBhcmd1bWVudHMudHlwZXMuY2xlYXIoKTsKICAgIGFyZ3VtZW50cy50eXBlcy5hZGRBbGwodHlwZXMpOwogICAgYXJndW1lbnRzLl9oYXNFeHBsaWNpdFR5cGVBcmd1bWVudHMgPSB0cnVlOwogIH0KCiAgc3RhdGljIHZvaWQgcmVtb3ZlTm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXMoQXJndW1lbnRzSnVkZ21lbnQgYXJndW1lbnRzKSB7CiAgICBhcmd1bWVudHMudHlwZXMuY2xlYXIoKTsKICAgIGFyZ3VtZW50cy5faGFzRXhwbGljaXRUeXBlQXJndW1lbnRzID0gZmFsc2U7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYW4gYXNzZXJ0IGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50IGV4dGVuZHMgQXNzZXJ0SW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgQXNzZXJ0SW5pdGlhbGl6ZXJKdWRnbWVudChBc3NlcnRTdGF0ZW1lbnQgc3RhdGVtZW50KSA6IHN1cGVyKHN0YXRlbWVudCk7CgogIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50IGdldCBqdWRnbWVudCA9PiBzdGF0ZW1lbnQ7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGFzc2VydGlvbiBzdGF0ZW1lbnQgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50IGV4dGVuZHMgQXNzZXJ0U3RhdGVtZW50CiAgICBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudChFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAge0V4cHJlc3Npb24gbWVzc2FnZSwgaW50IGNvbmRpdGlvblN0YXJ0T2Zmc2V0LCBpbnQgY29uZGl0aW9uRW5kT2Zmc2V0fSkKICAgICAgOiBzdXBlcihjb25kaXRpb24sCiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgICAgIGNvbmRpdGlvblN0YXJ0T2Zmc2V0OiBjb25kaXRpb25TdGFydE9mZnNldCwKICAgICAgICAgICAgY29uZGl0aW9uRW5kT2Zmc2V0OiBjb25kaXRpb25FbmRPZmZzZXQpOwoKICBFeHByZXNzaW9uIGdldCBjb25kaXRpb25KdWRnbWVudCA9PiBjb25kaXRpb247CgogIEV4cHJlc3Npb24gZ2V0IG1lc3NhZ2VKdWRnbWVudCA9PiBtZXNzYWdlOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QXNzZXJ0U3RhdGVtZW50SnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBzdGF0ZW1lbnQgYmxvY2sgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEJsb2NrSnVkZ21lbnQgZXh0ZW5kcyBCbG9jayBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBCbG9ja0p1ZGdtZW50KExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzKSA6IHN1cGVyKHN0YXRlbWVudHMpOwoKICBMaXN0PFN0YXRlbWVudD4gZ2V0IGp1ZGdtZW50cyA9PiBzdGF0ZW1lbnRzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QmxvY2tKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGNhc2NhZGUgZXhwcmVzc2lvbi4KLy8vCi8vLyBBIGNhc2NhZGUgZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgYS4uYigpLi5jKClgIGlzIHJlcHJlc2VudGVkIGFzIHRoZSBrZXJuZWwKLy8vIGV4cHJlc3Npb246Ci8vLwovLy8gICAgIGxldCB2ID0gYSBpbgovLy8gICAgICAgICBsZXQgXyA9IHYuYigpIGluCi8vLyAgICAgICAgICAgICBsZXQgXyA9IHYuYygpIGluCi8vLyAgICAgICAgICAgICAgICAgdgovLy8KLy8vIEluIHRoZSBkb2N1bWVudGF0aW9uIHRoYXQgZm9sbG93cywgYHZgIGlzIHJlZmVycmVkIHRvIGFzIHRoZSAiY2FzY2FkZQovLy8gdmFyaWFibGUiLS10aGlzIGlzIHRoZSB2YXJpYWJsZSB0aGF0IHJlbWVtYmVycyB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24KLy8vIHByZWNlZGluZyB0aGUgZmlyc3QgYC4uYCB3aGlsZSB0aGUgY2FzY2FkZXMgYXJlIGJlaW5nIGV2YWx1YXRlZC4KLy8vCi8vLyBBZnRlciBjb25zdHJ1Y3RpbmcgYSBbQ2FzY2FkZUp1ZGdtZW50XSwgdGhlIGNhbGxlciBzaG91bGQKLy8vIGNhbGwgW2ZpbmFsaXplXSB3aXRoIGFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBleHByZXNzaW9uIGFmdGVyIHRoZQovLy8gYC4uYC4gIElmIGEgZnVydGhlciBgLi5gIGZvbGxvd3MgdGhhdCBleHByZXNzaW9uLCB0aGUgY2FsbGVyIHNob3VsZCBjYWxsCi8vLyBbZXh0ZW5kXSBmb2xsb3dlZCBieSBbZmluYWxpemVdIGZvciBlYWNoIHN1YnNlcXVlbnQgY2FzY2FkZS4KY2xhc3MgQ2FzY2FkZUp1ZGdtZW50IGV4dGVuZHMgTGV0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIC8vLyBQb2ludGVyIHRvIHRoZSBsYXN0ICJsZXQiIGV4cHJlc3Npb24gaW4gdGhlIGNhc2NhZGUuCiAgTGV0IG5leHRDYXNjYWRlOwoKICAvLy8gQ3JlYXRlcyBhIFtDYXNjYWRlSnVkZ21lbnRdIHVzaW5nIFt2YXJpYWJsZV0gYXMgdGhlIGNhc2NhZGUKICAvLy8gdmFyaWFibGUuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgW3ZhcmlhYmxlXSdzCiAgLy8vIGluaXRpYWxpemVyIGlzIHRoZSBleHByZXNzaW9uIHByZWNlZGluZyB0aGUgZmlyc3QgYC4uYCBvZiB0aGUgY2FzY2FkZQogIC8vLyBleHByZXNzaW9uLgogIENhc2NhZGVKdWRnbWVudChWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgdmFyaWFibGUpCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIHZhcmlhYmxlLAogICAgICAgICAgICBtYWtlTGV0KG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKG5ldyBfVW5maW5pc2hlZENhc2NhZGUoKSksCiAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpKSkgewogICAgbmV4dENhc2NhZGUgPSBib2R5OwogIH0KCiAgRXhwcmVzc2lvbiBnZXQgdGFyZ2V0SnVkZ21lbnQgPT4gdmFyaWFibGUuaW5pdGlhbGl6ZXI7CgogIEl0ZXJhYmxlPEV4cHJlc3Npb24+IGdldCBjYXNjYWRlSnVkZ21lbnRzIHN5bmMqIHsKICAgIExldCBzZWN0aW9uID0gYm9keTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHlpZWxkIHNlY3Rpb24udmFyaWFibGUuaW5pdGlhbGl6ZXI7CiAgICAgIGlmIChzZWN0aW9uLmJvZHkgaXMhIExldCkgYnJlYWs7CiAgICAgIHNlY3Rpb24gPSBzZWN0aW9uLmJvZHk7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBhIG5ldyB1bmZpbmFsaXplZCBzZWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGNhc2NhZGUuICBTaG91bGQgYmUKICAvLy8gY2FsbGVkIGFmdGVyIHRoZSBwcmV2aW91cyBjYXNjYWRlIHNlY3Rpb24gaGFzIGJlZW4gZmluYWxpemVkLgogIHZvaWQgZXh0ZW5kKCkgewogICAgYXNzZXJ0KG5leHRDYXNjYWRlLnZhcmlhYmxlLmluaXRpYWxpemVyIGlzISBfVW5maW5pc2hlZENhc2NhZGUpOwogICAgTGV0IG5ld0Nhc2NhZGUgPSBtYWtlTGV0KAogICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKG5ldyBfVW5maW5pc2hlZENhc2NhZGUoKSksCiAgICAgICAgbmV4dENhc2NhZGUuYm9keSk7CiAgICBuZXh0Q2FzY2FkZS5ib2R5ID0gbmV3Q2FzY2FkZTsKICAgIG5ld0Nhc2NhZGUucGFyZW50ID0gbmV4dENhc2NhZGU7CiAgICBuZXh0Q2FzY2FkZSA9IG5ld0Nhc2NhZGU7CiAgfQoKICAvLy8gRmluYWxpemVzIHRoZSBsYXN0IGNhc2NhZGUgc2VjdGlvbiB3aXRoIHRoZSBnaXZlbiBbZXhwcmVzc2lvbl0uCiAgdm9pZCBmaW5hbGl6ZShFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGFzc2VydChuZXh0Q2FzY2FkZS52YXJpYWJsZS5pbml0aWFsaXplciBpcyBfVW5maW5pc2hlZENhc2NhZGUpOwogICAgbmV4dENhc2NhZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIgPSBleHByZXNzaW9uOwogICAgZXhwcmVzc2lvbi5wYXJlbnQgPSBuZXh0Q2FzY2FkZS52YXJpYWJsZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q2FzY2FkZUp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBBYnN0cmFjdCBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbXBsZXggYXNzaWdubWVudCBpbiBrZXJuZWwgZm9ybS4KLy8vCi8vLyBTaW5jZSB0aGVyZSBhcmUgbWFueSBmb3JtcyBhIGNvbXBsZXggYXNzaWdubWVudCBtaWdodCBoYXZlIGJlZW4gZGVzdWdhcmVkCi8vLyB0bywgdGhpcyBjbGFzcyB3cmFwcyB0aGUgZGVzdWdhcmVkIGFzc2lnbm1lbnQgcmF0aGVyIHRoYW4gZXh0ZW5kaW5nIGl0LgovLy8KLy8vIFRPRE8ocGF1bGJlcnJ5KTogb25jZSB3ZSBrbm93IGV4YWN0bHkgd2hhdCBjb25zdGl0dXRlcyBhICJjb21wbGV4Ci8vLyBhc3NpZ25tZW50IiwgZG9jdW1lbnQgaXQgaGVyZS4KYWJzdHJhY3QgY2xhc3MgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBleHRlbmRzIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCB7CiAgLy8vIEluIGEgY29tcG91bmQgYXNzaWdubWVudCwgdGhlIGV4cHJlc3Npb24gdGhhdCByZWFkcyB0aGUgb2xkIHZhbHVlLCBvcgogIC8vLyBgbnVsbGAgaWYgdGhpcyBpcyBub3QgYSBjb21wb3VuZCBhc3NpZ25tZW50LgogIEV4cHJlc3Npb24gcmVhZDsKCiAgLy8vIFRoZSBleHByZXNzaW9uIGFwcGVhcmluZyBvbiB0aGUgUkhTIG9mIHRoZSBhc3NpZ25tZW50LgogIGZpbmFsIEV4cHJlc3Npb24gcmhzOwoKICAvLy8gVGhlIGV4cHJlc3Npb24gdGhhdCBwZXJmb3JtcyB0aGUgd3JpdGUgKGUuZy4gYGEuW109KGIsIGEuW10oYikgKyAxKWAgaW4KICAvLy8gYCsrYVtiXWApLgogIEV4cHJlc3Npb24gd3JpdGU7CgogIC8vLyBJbiBhIGNvbXBvdW5kIGFzc2lnbm1lbnQgd2l0aG91dCBzaG9ydGN1dCBzZW1hbnRpY3MsIHRoZSBleHByZXNzaW9uIHRoYXQKICAvLy8gY29tYmluZXMgdGhlIG9sZCBhbmQgbmV3IHZhbHVlcywgb3IgYG51bGxgIGlmIHRoaXMgaXMgbm90IGEgY29tcG91bmQKICAvLy8gYXNzaWdubWVudC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IGluIGEgY29tcG91bmQgYXNzaWdubWVudCB3aXRoIHNob3J0Y3V0IHNlbWFudGljcywgdGhpcyBpcyBub3QKICAvLy8gdXNlZDsgW251bGxBd2FyZUNvbWJpbmVyXSBpcyB1c2VkIGluc3RlYWQuCiAgTWV0aG9kSW52b2NhdGlvbiBjb21iaW5lcjsKCiAgLy8vIEluIGEgY29tcG91bmQgYXNzaWdubWVudCB3aXRoIHNob3J0Y3V0IHNlbWFudGljcywgdGhlIGNvbmRpdGlvbmFsCiAgLy8vIGV4cHJlc3Npb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFzc2lnbm1lbnQgb2NjdXJzLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgaW4gYSBjb21wb3VuZCBhc3NpZ25tZW50IHdpdGhvdXQgc2hvcnRjdXQgc2VtYW50aWNzLCB0aGlzIGlzIG5vdAogIC8vLyB1c2VkOyBbY29tYmluZXJdIGlzIHVzZWQgaW5zdGVhZC4KICBDb25kaXRpb25hbEV4cHJlc3Npb24gbnVsbEF3YXJlQ29tYmluZXI7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZXhwcmVzc2lvbiBhcm9zZSBmcm9tIGEgcG9zdC1pbmNyZW1lbnQgb3IKICAvLy8gcG9zdC1kZWNyZW1lbnQuCiAgYm9vbCBpc1Bvc3RJbmNEZWMgPSBmYWxzZTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIGFyb3NlIGZyb20gYSBwcmUtaW5jcmVtZW50IG9yCiAgLy8vIHByZS1kZWNyZW1lbnQuCiAgYm9vbCBpc1ByZUluY0RlYyA9IGZhbHNlOwoKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50Ll8odGhpcy5yaHMpIDogc3VwZXIuXyhudWxsKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgdmFyIHBhcnRzID0gX2dldFRvU3RyaW5nUGFydHMoKTsKICAgIHJldHVybiAnJHtydW50aW1lVHlwZX0oJHtwYXJ0cy5qb2luKCcsICcpfSknOwogIH0KCiAgTGlzdDxTdHJpbmc+IF9nZXRUb1N0cmluZ1BhcnRzKCkgewogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gW107CiAgICBpZiAoZGVzdWdhcmVkICE9IG51bGwpIHBhcnRzLmFkZCgnZGVzdWdhcmVkPSRkZXN1Z2FyZWQnKTsKICAgIGlmIChyZWFkICE9IG51bGwpIHBhcnRzLmFkZCgncmVhZD0kcmVhZCcpOwogICAgaWYgKHJocyAhPSBudWxsKSBwYXJ0cy5hZGQoJ3Jocz0kcmhzJyk7CiAgICBpZiAod3JpdGUgIT0gbnVsbCkgcGFydHMuYWRkKCd3cml0ZT0kd3JpdGUnKTsKICAgIGlmIChjb21iaW5lciAhPSBudWxsKSBwYXJ0cy5hZGQoJ2NvbWJpbmVyPSRjb21iaW5lcicpOwogICAgaWYgKG51bGxBd2FyZUNvbWJpbmVyICE9IG51bGwpIHsKICAgICAgcGFydHMuYWRkKCdudWxsQXdhcmVDb21iaW5lcj0kbnVsbEF3YXJlQ29tYmluZXInKTsKICAgIH0KICAgIGlmIChpc1Bvc3RJbmNEZWMpIHBhcnRzLmFkZCgnaXNQb3N0SW5jRGVjPXRydWUnKTsKICAgIGlmIChpc1ByZUluY0RlYykgcGFydHMuYWRkKCdpc1ByZUluY0RlYz10cnVlJyk7CiAgICByZXR1cm4gcGFydHM7CiAgfQoKICBfQ29tcGxleEFzc2lnbm1lbnRJbmZlcmVuY2VSZXN1bHQgX2luZmVyUmhzKAogICAgICBTaGFkb3dUeXBlSW5mZXJyZXIgaW5mZXJyZXIsIERhcnRUeXBlIHJlYWRUeXBlLCBEYXJ0VHlwZSB3cml0ZUNvbnRleHQpIHsKICAgIGFzc2VydCh3cml0ZUNvbnRleHQgIT0gbnVsbCk7CiAgICBpZiAocmVhZFR5cGUgaXMgVm9pZFR5cGUgJiYKICAgICAgICAoY29tYmluZXIgIT0gbnVsbCB8fCBudWxsQXdhcmVDb21iaW5lciAhPSBudWxsKSkgewogICAgICBpbmZlcnJlci5oZWxwZXIKICAgICAgICAgID8uYWRkUHJvYmxlbShtZXNzYWdlVm9pZEV4cHJlc3Npb24sIHJlYWQuZmlsZU9mZnNldCwgbm9MZW5ndGgpOwogICAgfQogICAgdmFyIHdyaXRlT2Zmc2V0ID0gd3JpdGUgPT0gbnVsbCA/IC0xIDogd3JpdGUuZmlsZU9mZnNldDsKICAgIFByb2NlZHVyZSBjb21iaW5lck1lbWJlcjsKICAgIERhcnRUeXBlIGNvbWJpbmVkVHlwZTsKICAgIGlmIChjb21iaW5lciAhPSBudWxsKSB7CiAgICAgIGJvb2wgaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yID0gZmFsc2U7CiAgICAgIGNvbWJpbmVyTWVtYmVyID0gaW5mZXJyZXIuZmluZE1ldGhvZEludm9jYXRpb25NZW1iZXIocmVhZFR5cGUsIGNvbWJpbmVyLAogICAgICAgICAgaW5zdHJ1bWVudGVkOiBmYWxzZSk7CiAgICAgIGlmIChjb21iaW5lck1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgLmlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvckFuZFR5cGUoY29tYmluZXJNZW1iZXIsIHJlYWRUeXBlKTsKICAgICAgfQogICAgICBEYXJ0VHlwZSByaHNUeXBlOwogICAgICB2YXIgY29tYmluZXJUeXBlID0gaW5mZXJyZXIuZ2V0Q2FsbGVlRnVuY3Rpb25UeXBlKAogICAgICAgICAgaW5mZXJyZXIuZ2V0Q2FsbGVlVHlwZShjb21iaW5lck1lbWJlciwgcmVhZFR5cGUpLCBmYWxzZSk7CiAgICAgIGlmIChpc1ByZUluY0RlYyB8fCBpc1Bvc3RJbmNEZWMpIHsKICAgICAgICByaHNUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmludENsYXNzLnJhd1R5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGNhbGwgX3N0b3JlTGV0VHlwZSBmb3IgW3Joc10gYmVjYXVzZSB0aGUgUkhTCiAgICAgICAgLy8gaXMgYWx3YXlzIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgY29tYmluZXI7IGl0J3MgbmV2ZXIgc3RvcmVkIGluIGEKICAgICAgICAvLyB0ZW1wb3JhcnkgdmFyaWFibGUgZmlyc3QuCiAgICAgICAgYXNzZXJ0KGlkZW50aWNhbChjb21iaW5lci5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCwgcmhzKSk7CiAgICAgICAgLy8gQW5hbHl6ZXIgdXNlcyBhIG51bGwgY29udGV4dCBmb3IgdGhlIFJIUyBoZXJlLgogICAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogaW1wcm92ZSBvbiB0aGlzLgogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihyaHMsIGNvbnN0IFVua25vd25UeXBlKCksIHRydWUpOwogICAgICAgIHJoc1R5cGUgPSBnZXRJbmZlcnJlZFR5cGUocmhzLCBpbmZlcnJlcik7CiAgICAgICAgLy8gRG8gbm90IHVzZSByaHMgYWZ0ZXIgdGhpcyBwb2ludCBiZWNhdXNlIGl0IG1heSBiZSBhIFNoYWRvdyBub2RlCiAgICAgICAgLy8gdGhhdCBoYXMgYmVlbiByZXBsYWNlZCBpbiB0aGUgdHJlZSB3aXRoIGl0cyBkZXN1Z2FyaW5nLgogICAgICAgIHZhciBleHBlY3RlZFR5cGUgPSBnZXRQb3NpdGlvbmFsUGFyYW1ldGVyVHlwZShjb21iaW5lclR5cGUsIDApOwogICAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoZXhwZWN0ZWRUeXBlLCByaHNUeXBlLAogICAgICAgICAgICBjb21iaW5lci5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCwgY29tYmluZXIuZmlsZU9mZnNldCk7CiAgICAgIH0KICAgICAgaWYgKGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcikgewogICAgICAgIGNvbWJpbmVkVHlwZSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMocmVhZFR5cGUsIHJoc1R5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbWJpbmVkVHlwZSA9IGNvbWJpbmVyVHlwZS5yZXR1cm5UeXBlOwogICAgICB9CiAgICAgIHZhciBjaGVja0tpbmQgPSBpbmZlcnJlci5wcmVDaGVja0ludm9jYXRpb25Db250cmF2YXJpYW5jZShyZWFkLCByZWFkVHlwZSwKICAgICAgICAgIGNvbWJpbmVyTWVtYmVyLCBjb21iaW5lciwgY29tYmluZXIuYXJndW1lbnRzLCBjb21iaW5lcik7CiAgICAgIHZhciByZXBsYWNlZENvbWJpbmVyID0gaW5mZXJyZXIuaGFuZGxlSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKAogICAgICAgICAgY2hlY2tLaW5kLAogICAgICAgICAgY29tYmluZXIsCiAgICAgICAgICBjb21iaW5lci5hcmd1bWVudHMsCiAgICAgICAgICBjb21iaW5lciwKICAgICAgICAgIGNvbWJpbmVkVHlwZSwKICAgICAgICAgIGNvbWJpbmVyVHlwZSwKICAgICAgICAgIGNvbWJpbmVyLmZpbGVPZmZzZXQpOwogICAgICB2YXIgcmVwbGFjZWRDb21iaW5lcjIgPSBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgd3JpdGVDb250ZXh0LCBjb21iaW5lZFR5cGUsIHJlcGxhY2VkQ29tYmluZXIsIHdyaXRlT2Zmc2V0KTsKICAgICAgaWYgKHJlcGxhY2VkQ29tYmluZXIyICE9IG51bGwpIHsKICAgICAgICByZXBsYWNlZENvbWJpbmVyID0gcmVwbGFjZWRDb21iaW5lcjI7CiAgICAgIH0KICAgICAgX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgcmVwbGFjZWRDb21iaW5lciwgY29tYmluZWRUeXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihyaHMsIHdyaXRlQ29udGV4dCA/PyBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIHZhciByaHNUeXBlID0gZ2V0SW5mZXJyZWRUeXBlKHJocywgaW5mZXJyZXIpOwogICAgICB2YXIgcmVwbGFjZWRSaHMgPSBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgd3JpdGVDb250ZXh0LCByaHNUeXBlLCByaHMsIHdyaXRlT2Zmc2V0LAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogd3JpdGVDb250ZXh0IGlzIFZvaWRUeXBlKTsKICAgICAgX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgcmVwbGFjZWRSaHMgPz8gcmhzLCByaHNUeXBlKTsKICAgICAgaWYgKG51bGxBd2FyZUNvbWJpbmVyICE9IG51bGwpIHsKICAgICAgICBNZXRob2RJbnZvY2F0aW9uIGVxdWFsc0ludm9jYXRpb24gPSBudWxsQXdhcmVDb21iaW5lci5jb25kaXRpb247CiAgICAgICAgaW5mZXJyZXIuZmluZE1ldGhvZEludm9jYXRpb25NZW1iZXIoCiAgICAgICAgICAgIGdyZWF0ZXN0Q2xvc3VyZShpbmZlcnJlci5jb3JlVHlwZXMsIHdyaXRlQ29udGV4dCksIGVxdWFsc0ludm9jYXRpb24sCiAgICAgICAgICAgIGluc3RydW1lbnRlZDogZmFsc2UpOwogICAgICAgIC8vIE5vdGU6IHRoZSBjYXNlIG9mIHJlYWRUeXBlPW51bGwgb25seSBoYXBwZW5zIGZvciBlcnJvbmVvdXMgY29kZS4KICAgICAgICBjb21iaW5lZFR5cGUgPSByZWFkVHlwZSA9PSBudWxsCiAgICAgICAgICAgID8gcmhzVHlwZQogICAgICAgICAgICA6IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAgICAgLmdldFN0YW5kYXJkVXBwZXJCb3VuZChyZWFkVHlwZSwgcmhzVHlwZSk7CiAgICAgICAgbnVsbEF3YXJlQ29tYmluZXIuc3RhdGljVHlwZSA9IGNvbWJpbmVkVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb21iaW5lZFR5cGUgPSByaHNUeXBlOwogICAgICB9CiAgICB9CiAgICBpZiAodGhpcyBpcyBJbmRleEFzc2lnbm1lbnRKdWRnbWVudCkgewogICAgICBfc3RvcmVMZXRUeXBlKGluZmVycmVyLCB3cml0ZSwgY29uc3QgVm9pZFR5cGUoKSk7CiAgICB9IGVsc2UgewogICAgICBfc3RvcmVMZXRUeXBlKGluZmVycmVyLCB3cml0ZSwgY29tYmluZWRUeXBlKTsKICAgIH0KICAgIGluZmVycmVkVHlwZSA9CiAgICAgICAgaXNQb3N0SW5jRGVjID8gKHJlYWRUeXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCkpIDogY29tYmluZWRUeXBlOwogICAgcmV0dXJuIG5ldyBfQ29tcGxleEFzc2lnbm1lbnRJbmZlcmVuY2VSZXN1bHQoY29tYmluZXJNZW1iZXIpOwogIH0KfQoKLy8vIEFic3RyYWN0IHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29tcGxleCBhc3NpZ25tZW50IGludm9sdmluZyBhCi8vLyByZWNlaXZlci4KYWJzdHJhY3QgY2xhc3MgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudFdpdGhSZWNlaXZlcgogICAgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHsKICAvLy8gVGhlIHJlY2VpdmVyIG9mIHRoZSBhc3NpZ25tZW50IHRhcmdldCAoZS5nLiBgYWAgaW4gYGFbYl0gPSBjYCkuCiAgZmluYWwgRXhwcmVzc2lvbiByZWNlaXZlcjsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgYXNzaWdubWVudCB1c2VzIGBzdXBlcmAuCiAgZmluYWwgYm9vbCBpc1N1cGVyOwoKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50V2l0aFJlY2VpdmVyLl8oCiAgICAgIHRoaXMucmVjZWl2ZXIsIEV4cHJlc3Npb24gcmhzLCB0aGlzLmlzU3VwZXIpCiAgICAgIDogc3VwZXIuXyhyaHMpOwoKICBAb3ZlcnJpZGUKICBMaXN0PFN0cmluZz4gX2dldFRvU3RyaW5nUGFydHMoKSB7CiAgICB2YXIgcGFydHMgPSBzdXBlci5fZ2V0VG9TdHJpbmdQYXJ0cygpOwogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHBhcnRzLmFkZCgncmVjZWl2ZXI9JHJlY2VpdmVyJyk7CiAgICBpZiAoaXNTdXBlcikgcGFydHMuYWRkKCdpc1N1cGVyPXRydWUnKTsKICAgIHJldHVybiBwYXJ0czsKICB9CgogIERhcnRUeXBlIF9pbmZlclJlY2VpdmVyKFNoYWRvd1R5cGVJbmZlcnJlciBpbmZlcnJlcikgewogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKHJlY2VpdmVyLCBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlKTsKICAgICAgdmFyIHJlY2VpdmVyVHlwZSA9IGdldEluZmVycmVkVHlwZShyZWNlaXZlciwgaW5mZXJyZXIpOwogICAgICBfc3RvcmVMZXRUeXBlKGluZmVycmVyLCByZWNlaXZlciwgcmVjZWl2ZXJUeXBlKTsKICAgICAgcmV0dXJuIHJlY2VpdmVyVHlwZTsKICAgIH0gZWxzZSBpZiAoaXNTdXBlcikgewogICAgICByZXR1cm4gaW5mZXJyZXIuY2xhc3NIaWVyYXJjaHkuZ2V0VHlwZUFzSW5zdGFuY2VPZigKICAgICAgICAgIGluZmVycmVyLnRoaXNUeXBlLCBpbmZlcnJlci50aGlzVHlwZS5jbGFzc05vZGUuc3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaW5mZXJyZXIudGhpc1R5cGU7CiAgICB9CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBjb250aW51ZSBzdGF0ZW1lbnQgZnJvbSBhIHN3aXRjaAovLy8gc3RhdGVtZW50LCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgQ29udGludWVTd2l0Y2hKdWRnbWVudCBleHRlbmRzIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50CiAgICBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBDb250aW51ZVN3aXRjaEp1ZGdtZW50KFN3aXRjaENhc2UgdGFyZ2V0KSA6IHN1cGVyKHRhcmdldCk7CgogIFN3aXRjaENhc2VKdWRnbWVudCBnZXQgdGFyZ2V0SnVkZ21lbnQgPT4gdGFyZ2V0OwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29udGludWVTd2l0Y2hKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBTaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGRlZmVycmVkIGNoZWNrIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBEZWZlcnJlZENoZWNrSnVkZ21lbnQgZXh0ZW5kcyBMZXQgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgRGVmZXJyZWRDaGVja0p1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gYm9keSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgYm9keSk7CgogIEV4cHJlc3Npb24gZ2V0IGp1ZGdtZW50ID0+IGJvZHk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RGVmZXJyZWRDaGVja0p1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGRvIGxvb3AgaW4ga2VybmVsIGZvcm0uCmNsYXNzIERvSnVkZ21lbnQgZXh0ZW5kcyBEb1N0YXRlbWVudCBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBEb0p1ZGdtZW50KFN0YXRlbWVudCBib2R5LCBFeHByZXNzaW9uIGNvbmRpdGlvbikgOiBzdXBlcihib2R5LCBjb25kaXRpb24pOwoKICBFeHByZXNzaW9uIGdldCBjb25kaXRpb25KdWRnbWVudCA9PiBjb25kaXRpb247CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXREb0p1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgZG91YmxlIGxpdGVyYWwgaW4ga2VybmVsIGZvcm0uCmNsYXNzIERvdWJsZUp1ZGdtZW50IGV4dGVuZHMgRG91YmxlTGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBEb3VibGVKdWRnbWVudChkb3VibGUgdmFsdWUpIDogc3VwZXIodmFsdWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdERvdWJsZUp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb21tb24gYmFzZSBjbGFzcyBmb3Igc2hhZG93IG9iamVjdHMgcmVwcmVzZW50aW5nIGV4cHJlc3Npb25zIGluIGtlcm5lbAovLy8gZm9ybS4KYWJzdHJhY3QgY2xhc3MgRXhwcmVzc2lvbkp1ZGdtZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICAvLy8gQ2FsbHMgYmFjayB0byBbaW5mZXJyZXJdIHRvIHBlcmZvcm0gdHlwZSBpbmZlcmVuY2UgZm9yIHdoYXRldmVyIGNvbmNyZXRlCiAgLy8vIHR5cGUgb2YgW0V4cHJlc3Npb25dIHRoaXMgaXMuCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCk7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBlbXB0eSBzdGF0ZW1lbnQgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEVtcHR5U3RhdGVtZW50SnVkZ21lbnQgZXh0ZW5kcyBFbXB0eVN0YXRlbWVudAogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgRW1wdHlTdGF0ZW1lbnRKdWRnbWVudCgpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RW1wdHlTdGF0ZW1lbnRKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50IGV4dGVuZHMgRXhwcmVzc2lvblN0YXRlbWVudAogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KEV4cHJlc3Npb24gZXhwcmVzc2lvbikgOiBzdXBlcihleHByZXNzaW9uKTsKCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gZXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBTaGFkb3cgb2JqZWN0IGZvciBbU3RhdGljSW52b2NhdGlvbl0gd2hlbiB0aGUgcHJvY2VkdXJlIGJlaW5nIGludm9rZWQgaXMgYQovLy8gZmFjdG9yeSBjb25zdHJ1Y3Rvci4KY2xhc3MgRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgU3RhdGljSW52b2NhdGlvbgogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBQcm9jZWR1cmUgdGFyZ2V0LCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiBzdXBlcih0YXJnZXQsIGFyZ3VtZW50cywgaXNDb25zdDogaXNDb25zdCk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpZWxkIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTaGFkb3dGaWVsZEluaXRpYWxpemVyIGV4dGVuZHMgRmllbGRJbml0aWFsaXplcgogICAgaW1wbGVtZW50cyBJbml0aWFsaXplckp1ZGdtZW50IHsKICBTaGFkb3dGaWVsZEluaXRpYWxpemVyKEZpZWxkIGZpZWxkLCBFeHByZXNzaW9uIHZhbHVlKSA6IHN1cGVyKGZpZWxkLCB2YWx1ZSk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTaGFkb3dGaWVsZEluaXRpYWxpemVyKHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2xhc3NpYyBmb3IgbG9vcCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgRm9ySnVkZ21lbnQgZXh0ZW5kcyBGb3JTdGF0ZW1lbnQgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgRm9ySnVkZ21lbnQoTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMsIEV4cHJlc3Npb24gY29uZGl0aW9uLAogICAgICBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXMsIFN0YXRlbWVudCBib2R5KQogICAgICA6IHN1cGVyKHZhcmlhYmxlcyA/PyBbXSwgY29uZGl0aW9uLCB1cGRhdGVzLCBib2R5KTsKCiAgRXhwcmVzc2lvbiBnZXQgY29uZGl0aW9uSnVkZ21lbnQgPT4gY29uZGl0aW9uOwoKICBMaXN0PEV4cHJlc3Npb24+IGdldCB1cGRhdGVKdWRnbWVudHMgPT4gdXBkYXRlcy5jYXN0KCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRGb3JKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gaW4ga2VybmVsIGZvcm0uCmNsYXNzIEZ1bmN0aW9uTm9kZUp1ZGdtZW50IGV4dGVuZHMgRnVuY3Rpb25Ob2RlIHsKICBGdW5jdGlvbk5vZGVKdWRnbWVudChTdGF0ZW1lbnQgYm9keSwKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzLAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgRGFydFR5cGUgcmV0dXJuVHlwZTogY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXI6IEFzeW5jTWFya2VyLlN5bmMsCiAgICAgIEFzeW5jTWFya2VyIGRhcnRBc3luY01hcmtlcn0pCiAgICAgIDogc3VwZXIoYm9keSwKICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgICAgICByZXR1cm5UeXBlOiByZXR1cm5UeXBlLAogICAgICAgICAgICBhc3luY01hcmtlcjogYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGRhcnRBc3luY01hcmtlcjogZGFydEFzeW5jTWFya2VyKTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgbG9jYWwgZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4ga2VybmVsCi8vLyBmb3JtLgpjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQgZXh0ZW5kcyBGdW5jdGlvbkRlY2xhcmF0aW9uCiAgICBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBib29sIF9oYXNJbXBsaWNpdFJldHVyblR5cGUgPSBmYWxzZTsKCiAgRnVuY3Rpb25EZWNsYXJhdGlvbkp1ZGdtZW50KAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgdmFyaWFibGUsIEZ1bmN0aW9uTm9kZUp1ZGdtZW50IGZ1bmN0aW9uKQogICAgICA6IHN1cGVyKHZhcmlhYmxlLCBmdW5jdGlvbik7CgogIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBnZXQgdmFyaWFibGVKdWRnbWVudCA9PiB2YXJpYWJsZTsKCiAgRnVuY3Rpb25Ob2RlSnVkZ21lbnQgZ2V0IGZ1bmN0aW9uSnVkZ21lbnQgPT4gZnVuY3Rpb247CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQodGhpcyk7CiAgfQoKICBzdGF0aWMgdm9pZCBzZXRIYXNJbXBsaWNpdFJldHVyblR5cGUoCiAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudCBkZWNsYXJhdGlvbiwgYm9vbCBoYXNJbXBsaWNpdFJldHVyblR5cGUpIHsKICAgIGRlY2xhcmF0aW9uLl9oYXNJbXBsaWNpdFJldHVyblR5cGUgPSBoYXNJbXBsaWNpdFJldHVyblR5cGU7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBzdXBlciBpbml0aWFsaXplciBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgSW52YWxpZFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudCBleHRlbmRzIExvY2FsSW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgZmluYWwgQ29uc3RydWN0b3IgdGFyZ2V0OwogIGZpbmFsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50c0p1ZGdtZW50OwoKICBJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50KAogICAgICB0aGlzLnRhcmdldCwgdGhpcy5hcmd1bWVudHNKdWRnbWVudCwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGlmLW51bGwgZXhwcmVzc2lvbi4KLy8vCi8vLyBBbiBpZi1udWxsIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYGEgPz8gYmAgaXMgcmVwcmVzZW50ZWQgYXMgdGhlIGtlcm5lbAovLy8gZXhwcmVzc2lvbjoKLy8vCi8vLyAgICAgbGV0IHYgPSBhIGluIHYgPT0gbnVsbCA/IGIgOiB2CmNsYXNzIElmTnVsbEp1ZGdtZW50IGV4dGVuZHMgTGV0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIElmTnVsbEp1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gYm9keSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgYm9keSk7CgogIEBvdmVycmlkZQogIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBnZXQgYm9keSA9PiBzdXBlci5ib2R5OwoKICAvLy8gUmV0dXJucyB0aGUgZXhwcmVzc2lvbiB0byB0aGUgbGVmdCBvZiBgPz9gLgogIEV4cHJlc3Npb24gZ2V0IGxlZnRKdWRnbWVudCA9PiB2YXJpYWJsZS5pbml0aWFsaXplcjsKCiAgLy8vIFJldHVybnMgdGhlIGV4cHJlc3Npb24gdG8gdGhlIHJpZ2h0IG9mIGA/P2AuCiAgRXhwcmVzc2lvbiBnZXQgcmlnaHRKdWRnbWVudCA9PiBib2R5LnRoZW47CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SWZOdWxsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGlmIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgSWZKdWRnbWVudCBleHRlbmRzIElmU3RhdGVtZW50IGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIElmSnVkZ21lbnQoRXhwcmVzc2lvbiBjb25kaXRpb24sIFN0YXRlbWVudCB0aGVuLCBTdGF0ZW1lbnQgb3RoZXJ3aXNlKQogICAgICA6IHN1cGVyKGNvbmRpdGlvbiwgdGhlbiwgb3RoZXJ3aXNlKTsKCiAgRXhwcmVzc2lvbiBnZXQgY29uZGl0aW9uSnVkZ21lbnQgPT4gY29uZGl0aW9uOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SWZKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhc3NpZ25tZW50IHRvIGEgdGFyZ2V0IGZvciB3aGljaAovLy8gYXNzaWdubWVudCBpcyBub3QgYWxsb3dlZC4KY2xhc3MgSWxsZWdhbEFzc2lnbm1lbnRKdWRnbWVudCBleHRlbmRzIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgewogIC8vLyBUaGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSBpbnZhbGlkIGFzc2lnbm1lbnQgc2hvdWxkIGJlIHN0b3JlZC4KICAvLy8gSWYgYC0xYCwgdGhlbiB0aGVyZSBpcyBubyBzZXBhcmF0ZSBsb2NhdGlvbiBmb3IgaW52YWxpZCBhc3NpZ25tZW50LgogIGZpbmFsIGludCBhc3NpZ25tZW50T2Zmc2V0OwoKICBJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50Ll8oRXhwcmVzc2lvbiByaHMsIHt0aGlzLmFzc2lnbm1lbnRPZmZzZXQ6IC0xfSkKICAgICAgOiBzdXBlci5fKHJocykgewogICAgcmhzLnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdElsbGVnYWxBc3NpZ25tZW50SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGFzc2lnbm1lbnQgdG8gYSB0YXJnZXQgb2YgdGhlIGZvcm0KLy8vIGBhW2JdYC4KY2xhc3MgSW5kZXhBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50V2l0aFJlY2VpdmVyIHsKICAvLy8gSW4gYW4gYXNzaWdubWVudCB0byBhbiBpbmRleCBleHByZXNzaW9uLCB0aGUgaW5kZXggZXhwcmVzc2lvbi4KICBmaW5hbCBFeHByZXNzaW9uIGluZGV4OwoKICBJbmRleEFzc2lnbm1lbnRKdWRnbWVudC5fKEV4cHJlc3Npb24gcmVjZWl2ZXIsIHRoaXMuaW5kZXgsIEV4cHJlc3Npb24gcmhzLAogICAgICB7Ym9vbCBpc1N1cGVyOiBmYWxzZX0pCiAgICAgIDogc3VwZXIuXyhyZWNlaXZlciwgcmhzLCBpc1N1cGVyKTsKCiAgQXJndW1lbnRzIF9nZXRJbnZvY2F0aW9uQXJndW1lbnRzKAogICAgICBTaGFkb3dUeXBlSW5mZXJyZXIgaW5mZXJyZXIsIEV4cHJlc3Npb24gaW52b2NhdGlvbikgewogICAgaWYgKGludm9jYXRpb24gaXMgTWV0aG9kSW52b2NhdGlvbikgewogICAgICByZXR1cm4gaW52b2NhdGlvbi5hcmd1bWVudHM7CiAgICB9IGVsc2UgaWYgKGludm9jYXRpb24gaXMgU3VwZXJNZXRob2RJbnZvY2F0aW9uKSB7CiAgICAgIHJldHVybiBpbnZvY2F0aW9uLmFyZ3VtZW50czsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IHVuaGFuZGxlZCgiJHtpbnZvY2F0aW9uLnJ1bnRpbWVUeXBlfSIsICJfZ2V0SW52b2NhdGlvbkFyZ3VtZW50cyIsCiAgICAgICAgICBmaWxlT2Zmc2V0LCBpbmZlcnJlci51cmkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IF9nZXRUb1N0cmluZ1BhcnRzKCkgewogICAgdmFyIHBhcnRzID0gc3VwZXIuX2dldFRvU3RyaW5nUGFydHMoKTsKICAgIGlmIChpbmRleCAhPSBudWxsKSBwYXJ0cy5hZGQoJ2luZGV4PSRpbmRleCcpOwogICAgcmV0dXJuIHBhcnRzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbmRleEFzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIHNoYWRvdyBvYmplY3RzIHJlcHJlc2VudGluZyBpbml0aWFsaXplcnMgaW4ga2VybmVsCi8vLyBmb3JtLgphYnN0cmFjdCBjbGFzcyBJbml0aWFsaXplckp1ZGdtZW50IGltcGxlbWVudHMgSW5pdGlhbGl6ZXIgewogIC8vLyBQZXJmb3JtcyB0eXBlIGluZmVyZW5jZSBmb3Igd2hhdGV2ZXIgY29uY3JldGUgdHlwZSBvZgogIC8vLyBbSW5pdGlhbGl6ZXJKdWRnbWVudF0gdGhpcyBpcy4KICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpOwp9CgpFeHByZXNzaW9uIGNoZWNrV2ViSW50TGl0ZXJhbHNFcnJvcklmVW5leGFjdCgKICAgIFNoYWRvd1R5cGVJbmZlcnJlciBpbmZlcnJlciwgaW50IHZhbHVlLCBTdHJpbmcgbGl0ZXJhbCwgaW50IGNoYXJPZmZzZXQpIHsKICBpZiAodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAoMSA8PCA1MykpIHJldHVybiBudWxsOwogIGlmIChpbmZlcnJlci5saWJyYXJ5ID09IG51bGwpIHJldHVybiBudWxsOwogIGlmICghaW5mZXJyZXIubGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQKICAgICAgLmVycm9yT25VbmV4YWN0V2ViSW50TGl0ZXJhbHMpIHJldHVybiBudWxsOwogIEJpZ0ludCBhc0ludCA9IEJpZ0ludC5mcm9tKHZhbHVlKS50b1Vuc2lnbmVkKDY0KTsKICBCaWdJbnQgYXNEb3VibGUgPSBCaWdJbnQuZnJvbShhc0ludC50b0RvdWJsZSgpKTsKICBpZiAoYXNJbnQgPT0gYXNEb3VibGUpIHJldHVybiBudWxsOwogIFN0cmluZyB0ZXh0ID0gbGl0ZXJhbCA/PyB2YWx1ZS50b1N0cmluZygpOwogIFN0cmluZyBuZWFyZXN0ID0gdGV4dC5zdGFydHNXaXRoKCcweCcpIHx8IHRleHQuc3RhcnRzV2l0aCgnMFgnKQogICAgICA/ICcweCR7YXNEb3VibGUudG9SYWRpeFN0cmluZygxNil9JwogICAgICA6IGFzRG91YmxlLnRvU3RyaW5nKCk7CiAgaW50IGxlbmd0aCA9IGxpdGVyYWw/Lmxlbmd0aCA/PyBub0xlbmd0aDsKICByZXR1cm4gaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAuYnVpbGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHkud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICB0ZXh0LCBuZWFyZXN0KSwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBsZW5ndGgpKTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGludGVnZXIgbGl0ZXJhbCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgSW50SnVkZ21lbnQgZXh0ZW5kcyBJbnRMaXRlcmFsIGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CiAgZmluYWwgU3RyaW5nIGxpdGVyYWw7CgogIEludEp1ZGdtZW50KGludCB2YWx1ZSwgdGhpcy5saXRlcmFsKSA6IHN1cGVyKHZhbHVlKTsKCiAgZG91YmxlIGFzRG91YmxlKHtib29sIG5lZ2F0ZWQ6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlID09IDAgJiYgbmVnYXRlZCkgcmV0dXJuIC0wLjA7CiAgICBCaWdJbnQgaW50VmFsdWUgPSBCaWdJbnQuZnJvbShuZWdhdGVkID8gLXZhbHVlIDogdmFsdWUpOwogICAgZG91YmxlIGRvdWJsZVZhbHVlID0gaW50VmFsdWUudG9Eb3VibGUoKTsKICAgIHJldHVybiBpbnRWYWx1ZSA9PSBCaWdJbnQuZnJvbShkb3VibGVWYWx1ZSkgPyBkb3VibGVWYWx1ZSA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEludEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCmNsYXNzIFNoYWRvd0xhcmdlSW50TGl0ZXJhbCBleHRlbmRzIEludExpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIGZpbmFsIFN0cmluZyBsaXRlcmFsOwogIGZpbmFsIGludCBmaWxlT2Zmc2V0OwogIGJvb2wgaXNQYXJlbnRoZXNpemVkID0gZmFsc2U7CgogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgU2hhZG93TGFyZ2VJbnRMaXRlcmFsKHRoaXMubGl0ZXJhbCwgdGhpcy5maWxlT2Zmc2V0KSA6IHN1cGVyKDApOwoKICBkb3VibGUgYXNEb3VibGUoe2Jvb2wgbmVnYXRlZDogZmFsc2V9KSB7CiAgICBCaWdJbnQgaW50VmFsdWUgPSBCaWdJbnQudHJ5UGFyc2UobmVnYXRlZCA/ICctJHtsaXRlcmFsfScgOiBsaXRlcmFsKTsKICAgIGlmIChpbnRWYWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IGludFZhbHVlLnRvRG91YmxlKCk7CiAgICByZXR1cm4gIWRvdWJsZVZhbHVlLmlzTmFOICYmCiAgICAgICAgICAgICFkb3VibGVWYWx1ZS5pc0luZmluaXRlICYmCiAgICAgICAgICAgIGludFZhbHVlID09IEJpZ0ludC5mcm9tKGRvdWJsZVZhbHVlKQogICAgICAgID8gZG91YmxlVmFsdWUKICAgICAgICA6IG51bGw7CiAgfQoKICBpbnQgYXNJbnQ2NCh7Ym9vbCBuZWdhdGVkOiBmYWxzZX0pIHsKICAgIHJldHVybiBpbnQudHJ5UGFyc2UobmVnYXRlZCA/ICctJHtsaXRlcmFsfScgOiBsaXRlcmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2hhZG93TGFyZ2VJbnRMaXRlcmFsKHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBpbnZhbGlkIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTaGFkb3dJbnZhbGlkSW5pdGlhbGl6ZXIgZXh0ZW5kcyBMb2NhbEluaXRpYWxpemVyCiAgICBpbXBsZW1lbnRzIEluaXRpYWxpemVySnVkZ21lbnQgewogIFNoYWRvd0ludmFsaWRJbml0aWFsaXplcihWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSA6IHN1cGVyKHZhcmlhYmxlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFNoYWRvd0ludmFsaWRJbml0aWFsaXplcih0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBpbnZhbGlkIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplciBleHRlbmRzIExvY2FsSW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgZmluYWwgRmllbGQgZmllbGQ7CiAgZmluYWwgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgU2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXIoCiAgICAgIHRoaXMuZmllbGQsIHRoaXMudmFsdWUsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpCiAgICAgIDogc3VwZXIodmFyaWFibGUpIHsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gdmFsdWU7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplcih0aGlzKTsKICB9Cn0KCi8vLyBUeXBlIGluZmVyZW5jZSBkZXJpdmF0aW9uIGZvciBbTGlzdExpdGVyYWxdLgpjbGFzcyBMaXN0TGl0ZXJhbEp1ZGdtZW50IGV4dGVuZHMgTGlzdExpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgTGlzdExpdGVyYWxKdWRnbWVudChMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLAogICAgICB7RGFydFR5cGUgdHlwZUFyZ3VtZW50LCBib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiBhc3NlcnQodHlwZUFyZ3VtZW50ICE9IG51bGwpLAogICAgICAgIHN1cGVyKGV4cHJlc3Npb25zLCB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogaXNDb25zdCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TGlzdExpdGVyYWxKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gVHlwZSBpbmZlcmVuY2UgZGVyaXZhdGlvbiBmb3IgW1NldExpdGVyYWxdLgpjbGFzcyBTZXRMaXRlcmFsSnVkZ21lbnQgZXh0ZW5kcyBTZXRMaXRlcmFsIGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIFNldExpdGVyYWxKdWRnbWVudChMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLAogICAgICB7RGFydFR5cGUgdHlwZUFyZ3VtZW50LCBib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiBhc3NlcnQodHlwZUFyZ3VtZW50ICE9IG51bGwpLAogICAgICAgIHN1cGVyKGV4cHJlc3Npb25zLCB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogaXNDb25zdCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2V0TGl0ZXJhbEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBUeXBlIGluZmVyZW5jZSBkZXJpdmF0aW9uIGZvciBbTWFwTGl0ZXJhbF0uCmNsYXNzIE1hcExpdGVyYWxKdWRnbWVudCBleHRlbmRzIE1hcExpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgTWFwTGl0ZXJhbEp1ZGdtZW50KExpc3Q8TWFwRW50cnk+IGp1ZGdtZW50cywKICAgICAge0RhcnRUeXBlIGtleVR5cGUsIERhcnRUeXBlIHZhbHVlVHlwZSwgYm9vbCBpc0NvbnN0OiBmYWxzZX0pCiAgICAgIDogYXNzZXJ0KGtleVR5cGUgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHZhbHVlVHlwZSAhPSBudWxsKSwKICAgICAgICBzdXBlcihqdWRnbWVudHMsCiAgICAgICAgICAgIGtleVR5cGU6IGtleVR5cGUsIHZhbHVlVHlwZTogdmFsdWVUeXBlLCBpc0NvbnN0OiBpc0NvbnN0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRNYXBMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIFNoYWRvdyBvYmplY3QgZm9yIFtNZXRob2RJbnZvY2F0aW9uXS4KY2xhc3MgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgTWV0aG9kSW52b2NhdGlvbgogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgbWV0aG9kIGludm9jYXRpb24gaXMgYSBjYWxsIHRvIGEgYGNhbGxgIG1ldGhvZAogIC8vLyByZXN1bHRpbmcgZnJvbSB0aGUgaW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uCiAgZmluYWwgYm9vbCBfaXNJbXBsaWNpdENhbGw7CgogIE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgTmFtZSBuYW1lLCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzSW1wbGljaXRDYWxsOiBmYWxzZSwgTWVtYmVyIGludGVyZmFjZVRhcmdldH0pCiAgICAgIDogX2lzSW1wbGljaXRDYWxsID0gaXNJbXBsaWNpdENhbGwsCiAgICAgICAgc3VwZXIocmVjZWl2ZXIsIG5hbWUsIGFyZ3VtZW50cywgaW50ZXJmYWNlVGFyZ2V0KTsKCiAgQXJndW1lbnRzSnVkZ21lbnQgZ2V0IGFyZ3VtZW50SnVkZ21lbnRzID0+IGFyZ3VtZW50czsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbi4KLy8vCi8vLyBOYW1lZCBmdW5jdGlvbiBleHByZXNzaW9ucyBhcmUgbm90IGxlZ2FsIGluIERhcnQsIGJ1dCB0aGV5IGFyZSBhY2NlcHRlZCBieQovLy8gdGhlIHBhcnNlciBhbmQgQm9keUJ1aWxkZXIgZm9yIGVycm9yIHJlY292ZXJ5IHB1cnBvc2VzLgovLy8KLy8vIEEgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgZigpIHsgLi4uIH1gIGlzIHJlcHJlc2VudGVkIGFzIHRoZQovLy8ga2VybmVsIGV4cHJlc3Npb246Ci8vLwovLy8gICAgIGxldCBmID0gKCkgeyAuLi4gfSBpbiBmCmNsYXNzIE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uSnVkZ21lbnQgZXh0ZW5kcyBMZXQKICAgIGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uSnVkZ21lbnQoVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IHZhcmlhYmxlKQogICAgICA6IHN1cGVyKHZhcmlhYmxlLCBuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpKTsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IGdldCB2YXJpYWJsZUp1ZGdtZW50ID0+IHZhcmlhYmxlOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgbnVsbC1hd2FyZSBtZXRob2QgaW52b2NhdGlvbi4KLy8vCi8vLyBBIG51bGwtYXdhcmUgbWV0aG9kIGludm9jYXRpb24gb2YgdGhlIGZvcm0gYGE/LmIoLi4uKWAgaXMgcmVwcmVzZW50ZWQgYXMgdGhlCi8vLyBleHByZXNzaW9uOgovLy8KLy8vICAgICBsZXQgdiA9IGEgaW4gdiA9PSBudWxsID8gbnVsbCA6IHYuYiguLi4pCmNsYXNzIE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudCBleHRlbmRzIExldAogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgTnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGJvZHkpCiAgICAgIDogc3VwZXIodmFyaWFibGUsIGJvZHkpOwoKICBAb3ZlcnJpZGUKICBDb25kaXRpb25hbEV4cHJlc3Npb24gZ2V0IGJvZHkgPT4gc3VwZXIuYm9keTsKCiAgTWV0aG9kSW52b2NhdGlvbiBnZXQgX2Rlc3VnYXJlZEludm9jYXRpb24gPT4gYm9keS5vdGhlcndpc2U7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIG51bGwtYXdhcmUgcmVhZCBmcm9tIGEgcHJvcGVydHkuCi8vLwovLy8gQSBudWxsLWF3YXJlIHByb3BlcnR5IGdldCBvZiB0aGUgZm9ybSBgYT8uYmAgaXMgcmVwcmVzZW50ZWQgYXMgdGhlIGtlcm5lbAovLy8gZXhwcmVzc2lvbjoKLy8vCi8vLyAgICAgbGV0IHYgPSBhIGluIHYgPT0gbnVsbCA/IG51bGwgOiB2LmIKY2xhc3MgTnVsbEF3YXJlUHJvcGVydHlHZXRKdWRnbWVudCBleHRlbmRzIExldCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBOdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50KAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBDb25kaXRpb25hbEV4cHJlc3Npb24gYm9keSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgYm9keSk7CgogIEBvdmVycmlkZQogIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBnZXQgYm9keSA9PiBzdXBlci5ib2R5OwoKICBQcm9wZXJ0eUdldCBnZXQgX2Rlc3VnYXJlZEdldCA9PiBib2R5Lm90aGVyd2lzZTsKCiAgRXhwcmVzc2lvbiBnZXQgcmVjZWl2ZXJKdWRnbWVudCA9PiB2YXJpYWJsZS5pbml0aWFsaXplcjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXROdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhc3NpZ25tZW50IHRvIGEgcHJvcGVydHkuCmNsYXNzIFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50IGV4dGVuZHMgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudFdpdGhSZWNlaXZlciB7CiAgLy8vIElmIHRoaXMgYXNzaWdubWVudCB1c2VzIG51bGwtYXdhcmUgYWNjZXNzIChgPy5gKSwgdGhlIGNvbmRpdGlvbmFsCiAgLy8vIGV4cHJlc3Npb24gdGhhdCBndWFyZHMgdGhlIGFjY2Vzczsgb3RoZXJ3aXNlIGBudWxsYC4KICBDb25kaXRpb25hbEV4cHJlc3Npb24gbnVsbEF3YXJlR3VhcmQ7CgogIFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50Ll8oRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiByaHMsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlfSkKICAgICAgOiBzdXBlci5fKHJlY2VpdmVyLCByaHMsIGlzU3VwZXIpOwoKICBAb3ZlcnJpZGUKICBMaXN0PFN0cmluZz4gX2dldFRvU3RyaW5nUGFydHMoKSB7CiAgICB2YXIgcGFydHMgPSBzdXBlci5fZ2V0VG9TdHJpbmdQYXJ0cygpOwogICAgaWYgKG51bGxBd2FyZUd1YXJkICE9IG51bGwpIHBhcnRzLmFkZCgnbnVsbEF3YXJlR3VhcmQ9JG51bGxBd2FyZUd1YXJkJyk7CiAgICByZXR1cm4gcGFydHM7CiAgfQoKICBPYmplY3QgX2hhbmRsZVdyaXRlQ29udHJhdmFyaWFuY2UoCiAgICAgIFNoYWRvd1R5cGVJbmZlcnJlciBpbmZlcnJlciwgRGFydFR5cGUgcmVjZWl2ZXJUeXBlKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuZmluZFByb3BlcnR5U2V0TWVtYmVyKHJlY2VpdmVyVHlwZSwgd3JpdGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSByZWRpcmVjdGluZyBpbml0aWFsaXplciBpbiBrZXJuZWwKLy8vIGZvcm0uCmNsYXNzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudCBleHRlbmRzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgUmVkaXJlY3RpbmdJbml0aWFsaXplckp1ZGdtZW50KAogICAgICBDb25zdHJ1Y3RvciB0YXJnZXQsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50cykKICAgICAgOiBzdXBlcih0YXJnZXQsIGFyZ3VtZW50cyk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVySnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSByZXR1cm4gc3RhdGVtZW50IGluIGtlcm5lbCBmb3JtLgpjbGFzcyBSZXR1cm5KdWRnbWVudCBleHRlbmRzIFJldHVyblN0YXRlbWVudCBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBmaW5hbCBTdHJpbmcgcmV0dXJuS2V5d29yZExleGVtZTsKCiAgUmV0dXJuSnVkZ21lbnQodGhpcy5yZXR1cm5LZXl3b3JkTGV4ZW1lLCBbRXhwcmVzc2lvbiBleHByZXNzaW9uXSkKICAgICAgOiBzdXBlcihleHByZXNzaW9uKTsKCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gZXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFJldHVybkp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBzaGFkb3cgb2JqZWN0cyByZXByZXNlbnRpbmcgc3RhdGVtZW50cyBpbiBrZXJuZWwKLy8vIGZvcm0uCmFic3RyYWN0IGNsYXNzIFN0YXRlbWVudEp1ZGdtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICAvLy8gQ2FsbHMgYmFjayB0byBbaW5mZXJyZXJdIHRvIHBlcmZvcm0gdHlwZSBpbmZlcmVuY2UgZm9yIHdoYXRldmVyIGNvbmNyZXRlCiAgLy8vIHR5cGUgb2YgW1N0YXRlbWVudEp1ZGdtZW50XSB0aGlzIGlzLgogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcik7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhc3NpZ25tZW50IHRvIGEgc3RhdGljIHZhcmlhYmxlLgpjbGFzcyBTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHsKICBTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnQuXyhFeHByZXNzaW9uIHJocykgOiBzdXBlci5fKHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3RhdGljQXNzaWdubWVudEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHN1cGVyIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTdXBlckluaXRpYWxpemVySnVkZ21lbnQgZXh0ZW5kcyBTdXBlckluaXRpYWxpemVyCiAgICBpbXBsZW1lbnRzIEluaXRpYWxpemVySnVkZ21lbnQgewogIFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudChDb25zdHJ1Y3RvciB0YXJnZXQsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50cykKICAgICAgOiBzdXBlcih0YXJnZXQsIGFyZ3VtZW50cyk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdXBlckluaXRpYWxpemVySnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgW1N1cGVyTWV0aG9kSW52b2NhdGlvbl0uCmNsYXNzIFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgU3VwZXJNZXRob2RJbnZvY2F0aW9uCiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudChOYW1lIG5hbWUsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50cywKICAgICAge1Byb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KQogICAgICA6IHN1cGVyKG5hbWUsIGFyZ3VtZW50cywgaW50ZXJmYWNlVGFyZ2V0KTsKCiAgQXJndW1lbnRzSnVkZ21lbnQgZ2V0IGFyZ3VtZW50SnVkZ21lbnRzID0+IGFyZ3VtZW50czsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgW1N1cGVyUHJvcGVydHlHZXRdLgpjbGFzcyBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQgZXh0ZW5kcyBTdXBlclByb3BlcnR5R2V0CiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQoTmFtZSBuYW1lLCB7TWVtYmVyIGludGVyZmFjZVRhcmdldH0pCiAgICAgIDogc3VwZXIobmFtZSwgaW50ZXJmYWNlVGFyZ2V0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgc3dpdGNoIGNhc2UuCmNsYXNzIFN3aXRjaENhc2VKdWRnbWVudCBleHRlbmRzIFN3aXRjaENhc2UgewogIFN3aXRjaENhc2VKdWRnbWVudCgKICAgICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucywgTGlzdDxpbnQ+IGV4cHJlc3Npb25PZmZzZXRzLCBTdGF0ZW1lbnQgYm9keSwKICAgICAge2Jvb2wgaXNEZWZhdWx0OiBmYWxzZX0pCiAgICAgIDogc3VwZXIoZXhwcmVzc2lvbnMsIGV4cHJlc3Npb25PZmZzZXRzLCBib2R5LCBpc0RlZmF1bHQ6IGlzRGVmYXVsdCk7CgogIFN3aXRjaENhc2VKdWRnbWVudC5kZWZhdWx0Q2FzZShTdGF0ZW1lbnQgYm9keSkgOiBzdXBlci5kZWZhdWx0Q2FzZShib2R5KTsKCiAgU3dpdGNoQ2FzZUp1ZGdtZW50LmVtcHR5KCkgOiBzdXBlci5lbXB0eSgpOwoKICBMaXN0PEV4cHJlc3Npb24+IGdldCBleHByZXNzaW9uSnVkZ21lbnRzID0+IGV4cHJlc3Npb25zLmNhc3QoKTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgc3dpdGNoIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgU3dpdGNoU3RhdGVtZW50SnVkZ21lbnQgZXh0ZW5kcyBTd2l0Y2hTdGF0ZW1lbnQKICAgIGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIFN3aXRjaFN0YXRlbWVudEp1ZGdtZW50KEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTGlzdDxTd2l0Y2hDYXNlPiBjYXNlcykKICAgICAgOiBzdXBlcihleHByZXNzaW9uLCBjYXNlcyk7CgogIEV4cHJlc3Npb24gZ2V0IGV4cHJlc3Npb25KdWRnbWVudCA9PiBleHByZXNzaW9uOwoKICBMaXN0PFN3aXRjaENhc2VKdWRnbWVudD4gZ2V0IGNhc2VKdWRnbWVudHMgPT4gY2FzZXMuY2FzdCgpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3dpdGNoU3RhdGVtZW50SnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgW1N5bWJvbExpdGVyYWxdLgpjbGFzcyBTeW1ib2xMaXRlcmFsSnVkZ21lbnQgZXh0ZW5kcyBTeW1ib2xMaXRlcmFsCiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBTeW1ib2xMaXRlcmFsSnVkZ21lbnQoU3RyaW5nIHZhbHVlKSA6IHN1cGVyKHZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTeW1ib2xMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIFN5bnRoZXRpYyBqdWRnbWVudCBjbGFzcyByZXByZXNlbnRpbmcgYW4gYXR0ZW1wdCB0byBpbnZva2UgYW4gdW5yZXNvbHZlZAovLy8gY29uc3RydWN0b3IsIG9yIGEgY29uc3RydWN0b3IgdGhhdCBjYW5ub3QgYmUgaW52b2tlZCwgb3IgYSByZXNvbHZlZAovLy8gY29uc3RydWN0b3Igd2l0aCB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLgovLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzPwpjbGFzcyBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQgZXh0ZW5kcyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQgewogIGZpbmFsIE1lbWJlciBjb25zdHJ1Y3RvcjsKICBmaW5hbCBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQuXygKICAgICAga2VybmVsLkV4cHJlc3Npb24gZGVzdWdhcmVkLCB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLmFyZ3VtZW50cykKICAgICAgOiBzdXBlci5fKGRlc3VnYXJlZCk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBTeW50aGV0aWMganVkZ21lbnQgY2xhc3MgcmVwcmVzZW50aW5nIGFuIGF0dGVtcHQgdG8gYXNzaWduIHRvIHRoZQovLy8gW2V4cHJlc3Npb25dIHdoaWNoIGlzIG5vdCBhc3NpZ25hYmxlLgpjbGFzcyBJbnZhbGlkV3JpdGVKdWRnbWVudCBleHRlbmRzIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCB7CiAgZmluYWwgRXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBJbnZhbGlkV3JpdGVKdWRnbWVudC5fKGtlcm5lbC5FeHByZXNzaW9uIGRlc3VnYXJlZCwgdGhpcy5leHByZXNzaW9uKQogICAgICA6IHN1cGVyLl8oZGVzdWdhcmVkKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnZhbGlkV3JpdGVKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgZXhwcmVzc2lvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSB0aGUgZnJvbnQgZW5kIGFzIHBhcnQKLy8vIG9mIGRlc3VnYXJpbmcgb3IgdGhlIGhhbmRsaW5nIG9mIGVycm9yIGNvbmRpdGlvbnMuCi8vLwovLy8gVGhlc2UgZXhwcmVzc2lvbnMgYXJlIHJlbW92ZWQgYnkgdHlwZSBpbmZlcmVuY2UgYW5kIHJlcGxhY2VkIHdpdGggdGhlaXIKLy8vIGRlc3VnYXJlZCBlcXVpdmFsZW50cy4KY2xhc3MgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IGV4dGVuZHMgTGV0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudC5fKEV4cHJlc3Npb24gZGVzdWdhcmVkKQogICAgICA6IHN1cGVyKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKCdfJywgaW5pdGlhbGl6ZXI6IG5ldyBOdWxsTGl0ZXJhbCgpKSwKICAgICAgICAgICAgZGVzdWdhcmVkKTsKCiAgLy8vIFRoZSBkZXN1Z2FyZWQga2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc3ludGhldGljIGV4cHJlc3Npb24uCiAgRXhwcmVzc2lvbiBnZXQgZGVzdWdhcmVkID0+IGJvZHk7CgogIHZvaWQgc2V0IGRlc3VnYXJlZChFeHByZXNzaW9uIHZhbHVlKSB7CiAgICB0aGlzLmJvZHkgPSB2YWx1ZTsKICAgIHZhbHVlLnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQoKICAvLy8gUmVtb3ZlcyB0aGlzIGV4cHJlc3Npb24gZnJvbSB0aGUgZXhwcmVzc2lvbiB0cmVlLCByZXBsYWNpbmcgaXQgd2l0aAogIC8vLyBbZGVzdWdhcmVkXS4KICB2b2lkIF9yZXBsYWNlV2l0aERlc3VnYXJlZCgpIHsKICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQodGhpcywgZGVzdWdhcmVkKTsKICAgIHBhcmVudCA9IG51bGw7CiAgfQoKICAvLy8gVXBkYXRlcyBhbnkgW0xldF0gbm9kZXMgaW4gdGhlIGRlc3VnYXJlZCBleHByZXNzaW9uIHRvIGFjY291bnQgZm9yIHRoZQogIC8vLyBmYWN0IHRoYXQgW2V4cHJlc3Npb25dIGhhcyB0aGUgZ2l2ZW4gW3R5cGVdLgogIHZvaWQgX3N0b3JlTGV0VHlwZSgKICAgICAgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlciwgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCA9IHRoaXMuZGVzdWdhcmVkOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKGRlc3VnYXJlZCBpcyBMZXQpIHsKICAgICAgICBMZXQgZGVzdWdhcmVkTGV0ID0gZGVzdWdhcmVkOwogICAgICAgIHZhciB2YXJpYWJsZSA9IGRlc3VnYXJlZExldC52YXJpYWJsZTsKICAgICAgICBpZiAoaWRlbnRpY2FsKHZhcmlhYmxlLmluaXRpYWxpemVyLCBleHByZXNzaW9uKSkgewogICAgICAgICAgdmFyaWFibGUudHlwZSA9IHR5cGU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGRlc3VnYXJlZCA9IGRlc3VnYXJlZExldC5ib2R5OwogICAgICB9IGVsc2UgaWYgKGRlc3VnYXJlZCBpcyBDb25kaXRpb25hbEV4cHJlc3Npb24pIHsKICAgICAgICAvLyBXaGVuIGEgbnVsbC1hd2FyZSBhc3NpZ25tZW50IGlzIGRlc3VnYXJlZCwgb2Z0ZW4gdGhlICJ0aGVuIiBvciAiZWxzZSIKICAgICAgICAvLyBicmFuY2ggb2YgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2Z0ZW4gY29udGFpbnMgImxldCIgbm9kZXMgdGhhdAogICAgICAgIC8vIG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb24gZGVzdWdhcmVkQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gZGVzdWdhcmVkOwogICAgICAgIGlmIChkZXN1Z2FyZWRDb25kaXRpb25hbEV4cHJlc3Npb24udGhlbiBpcyBMZXQpIHsKICAgICAgICAgIGRlc3VnYXJlZCA9IGRlc3VnYXJlZENvbmRpdGlvbmFsRXhwcmVzc2lvbi50aGVuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZXN1Z2FyZWQgPSBkZXN1Z2FyZWRDb25kaXRpb25hbEV4cHJlc3Npb24ub3RoZXJ3aXNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yPGR5bmFtaWM+IHYpIHsKICAgIC8vIFRoaXMgaXMgZGVzaWduZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGR1cmluZyBzZXJpYWxpemF0aW9uLiBJdCBjYW4gYWxzbwogICAgLy8gbGVhZCB0byBleGNlcHRpb25zIGR1cmluZyB0cmFuc2Zvcm1hdGlvbnMsIGJ1dCB3ZSBoYXZlIHRvIGFjY2VwdCBhCiAgICAvLyBbVHJhbnNmb3JtZXJdIGFzIHRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgYHJlcGxhY2VDaGlsZGAuCiAgICBpZiAodiBpcyBUcmFuc2Zvcm1lcikgcmV0dXJuIHN1cGVyLmFjY2VwdCh2KTsKICAgIHVuc3VwcG9ydGVkKCJhY2NlcHQiLCBmaWxlT2Zmc2V0LCBnZXRGaWxlVXJpKHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxPGR5bmFtaWMsIGR5bmFtaWM+IHYsIGFyZykgewogICAgdW5zdXBwb3J0ZWQoImFjY2VwdDEiLCBmaWxlT2Zmc2V0LCBnZXRGaWxlVXJpKHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxkeW5hbWljPiB2KSB7CiAgICB1bnN1cHBvcnRlZCgidmlzaXRDaGlsZHJlbiIsIGZpbGVPZmZzZXQsIGdldEZpbGVVcmkodGhpcykpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2F0Y2ggY2xhdXNlLgpjbGFzcyBDYXRjaEp1ZGdtZW50IGV4dGVuZHMgQ2F0Y2ggewogIENhdGNoSnVkZ21lbnQoVmFyaWFibGVEZWNsYXJhdGlvbiBleGNlcHRpb24sIFN0YXRlbWVudCBib2R5LAogICAgICB7RGFydFR5cGUgZ3VhcmQ6IGNvbnN0IER5bmFtaWNUeXBlKCksIFZhcmlhYmxlRGVjbGFyYXRpb24gc3RhY2tUcmFjZX0pCiAgICAgIDogc3VwZXIoZXhjZXB0aW9uLCBib2R5LCBndWFyZDogZ3VhcmQsIHN0YWNrVHJhY2U6IHN0YWNrVHJhY2UpOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgZ2V0IGV4Y2VwdGlvbkp1ZGdtZW50ID0+IGV4Y2VwdGlvbjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IGdldCBzdGFja1RyYWNlSnVkZ21lbnQgPT4gc3RhY2tUcmFjZTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHJ5LWNhdGNoIGJsb2NrIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBUcnlDYXRjaEp1ZGdtZW50IGV4dGVuZHMgVHJ5Q2F0Y2ggaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgVHJ5Q2F0Y2hKdWRnbWVudChTdGF0ZW1lbnQgYm9keSwgTGlzdDxDYXRjaD4gY2F0Y2hlcykgOiBzdXBlcihib2R5LCBjYXRjaGVzKTsKCiAgTGlzdDxDYXRjaEp1ZGdtZW50PiBnZXQgY2F0Y2hKdWRnbWVudHMgPT4gY2F0Y2hlcy5jYXN0KCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRUcnlDYXRjaEp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHJ5LWZpbmFsbHkgYmxvY2sgaW4ga2VybmVsIGZvcm0uCmNsYXNzIFRyeUZpbmFsbHlKdWRnbWVudCBleHRlbmRzIFRyeUZpbmFsbHkgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgVHJ5RmluYWxseUp1ZGdtZW50KFN0YXRlbWVudCBib2R5LCBTdGF0ZW1lbnQgZmluYWxpemVyKQogICAgICA6IHN1cGVyKGJvZHksIGZpbmFsaXplcik7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRUcnlGaW5hbGx5SnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgW1R5cGVJbmZlcmVuY2VFbmdpbmVdIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aAovLy8ga2VybmVsIG9iamVjdHMuCmNsYXNzIFNoYWRvd1R5cGVJbmZlcmVuY2VFbmdpbmUgZXh0ZW5kcyBUeXBlSW5mZXJlbmNlRW5naW5lIHsKICBTaGFkb3dUeXBlSW5mZXJlbmNlRW5naW5lKEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb24pCiAgICAgIDogc3VwZXIoaW5zdHJ1bWVudGF0aW9uKTsKCiAgQG92ZXJyaWRlCiAgU2hhZG93VHlwZUluZmVycmVyIGNyZWF0ZUxvY2FsVHlwZUluZmVycmVyKAogICAgICBVcmkgdXJpLCBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICByZXR1cm4gbmV3IFR5cGVJbmZlcnJlcih0aGlzLCB1cmksIGZhbHNlLCB0aGlzVHlwZSwgbGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTaGFkb3dUeXBlSW5mZXJyZXIgY3JlYXRlVG9wTGV2ZWxUeXBlSW5mZXJyZXIoCiAgICAgIFVyaSB1cmksIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHJldHVybiBuZXcgVHlwZUluZmVycmVyKHRoaXMsIHVyaSwgdHJ1ZSwgdGhpc1R5cGUsIGxpYnJhcnkpOwogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtUeXBlSW5mZXJyZXJdIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aCBrZXJuZWwKLy8vIG9iamVjdHMuCmNsYXNzIFNoYWRvd1R5cGVJbmZlcnJlciBleHRlbmRzIFR5cGVJbmZlcnJlckltcGwgewogIEBvdmVycmlkZQogIGZpbmFsIHR5cGVQcm9tb3RlcjsKCiAgU2hhZG93VHlwZUluZmVycmVyLnByaXZhdGUoU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZSBlbmdpbmUsIFVyaSB1cmksCiAgICAgIGJvb2wgdG9wTGV2ZWwsIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpCiAgICAgIDogdHlwZVByb21vdGVyID0gbmV3IFR5cGVQcm9tb3RlcihlbmdpbmUudHlwZVNjaGVtYUVudmlyb25tZW50KSwKICAgICAgICBzdXBlci5wcml2YXRlKGVuZ2luZSwgdXJpLCB0b3BMZXZlbCwgdGhpc1R5cGUsIGxpYnJhcnkpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGdldEZpZWxkSW5pdGlhbGl6ZXIoRmllbGQgZmllbGQpIHsKICAgIHJldHVybiBmaWVsZC5pbml0aWFsaXplcjsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGluZmVyRXhwcmVzc2lvbigKICAgICAga2VybmVsLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwgRGFydFR5cGUgdHlwZUNvbnRleHQsIGJvb2wgdHlwZU5lZWRlZCwKICAgICAge2Jvb2wgaXNWb2lkQWxsb3dlZDogZmFsc2V9KSB7CiAgICAvLyBgbnVsbGAgc2hvdWxkIG5ldmVyIGJlIHVzZWQgYXMgdGhlIHR5cGUgY29udGV4dC4gIEFuIGluc3RhbmNlIG9mCiAgICAvLyBgVW5rbm93blR5cGVgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCiAgICBhc3NlcnQodHlwZUNvbnRleHQgIT0gbnVsbCk7CgogICAgLy8gSXQgaXNuJ3Qgc2FmZSB0byBkbyB0eXBlIGluZmVyZW5jZSBvbiBhbiBleHByZXNzaW9uIHdpdGhvdXQgYSBwYXJlbnQsCiAgICAvLyBiZWNhdXNlIHR5cGUgaW5mZXJlbmNlIG1pZ2h0IGNhdXNlIHVzIHRvIGhhdmUgdG8gcmVwbGFjZSBvbmUgZXhwcmVzc2lvbgogICAgLy8gd2l0aCBhbm90aGVyLCBhbmQgd2UgY2FuIG9ubHkgcmVwbGFjZSBhIG5vZGUgaWYgaXQgaGFzIGEgcGFyZW50IHBvaW50ZXIuCiAgICBhc3NlcnQoZXhwcmVzc2lvbi5wYXJlbnQgIT0gbnVsbCk7CgogICAgLy8gRm9yIGZ1bGwgKG5vbi10b3AgbGV2ZWwpIGluZmVyZW5jZSwgd2UgbmVlZCBhY2Nlc3MgdG8gdGhlCiAgICAvLyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIHNvIHRoYXQgd2UgY2FuIHBlcmZvcm0gZXJyb3IgcmVjb3ZlcnkuCiAgICBhc3NlcnQoaXNUb3BMZXZlbCB8fCBoZWxwZXIgIT0gbnVsbCk7CgogICAgLy8gV2hlbiBkb2luZyB0b3AgbGV2ZWwgaW5mZXJlbmNlLCB3ZSBza2lwIHN1YmV4cHJlc3Npb25zIHdob3NlIHR5cGUgaXNuJ3QKICAgIC8vIG5lZWRlZCBzbyB0aGF0IHdlIGRvbid0IGluZHVjZSBib2d1cyBkZXBlbmRlbmNpZXMgb24gZmllbGRzIG1lbnRpb25lZCBpbgogICAgLy8gdGhvc2Ugc3ViZXhwcmVzc2lvbnMuCiAgICBpZiAoIXR5cGVOZWVkZWQpIHJldHVybiBudWxsOwoKICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciA9IG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpOwogICAgaWYgKGV4cHJlc3Npb24gaXMgRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0SW5mZXJlbmNlKHZpc2l0b3IsIHR5cGVDb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0MSh2aXNpdG9yLCB0eXBlQ29udGV4dCk7CiAgICB9CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUgPSBnZXRJbmZlcnJlZFR5cGUoZXhwcmVzc2lvbiwgdGhpcyk7CiAgICBpZiAoaW5mZXJyZWRUeXBlIGlzIFZvaWRUeXBlICYmICFpc1ZvaWRBbGxvd2VkKSB7CiAgICAgIGlmIChleHByZXNzaW9uLnBhcmVudCBpcyEgQXJndW1lbnRzSnVkZ21lbnQpIHsKICAgICAgICBoZWxwZXI/LmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VWb2lkRXhwcmVzc2lvbiwgZXhwcmVzc2lvbi5maWxlT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbmZlcnJlZFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGluZmVySW5pdGlhbGl6ZXIoCiAgICAgIEluZmVyZW5jZUhlbHBlciBoZWxwZXIsIGtlcm5lbC5Jbml0aWFsaXplciBpbml0aWFsaXplcikgewogICAgYXNzZXJ0KGluaXRpYWxpemVyIGlzIEluaXRpYWxpemVySnVkZ21lbnQpOwogICAgdGhpcy5oZWxwZXIgPSBoZWxwZXI7CiAgICAvLyBVc2UgcG9seW1vcnBoaWMgZGlzcGF0Y2ggb24gW0tlcm5lbEluaXRpYWxpemVyXSB0byBwZXJmb3JtIHdoYXRldmVyCiAgICAvLyBraW5kIG9mIHR5cGUgaW5mZXJlbmNlIGlzIGNvcnJlY3QgZm9yIHRoaXMga2luZCBvZiBpbml0aWFsaXplci4KICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZXhwZXJpbWVudCB0byBzZWUgaWYgZHluYW1pYyBkaXNwYXRjaCB3b3VsZCBiZSBiZXR0ZXIsCiAgICAvLyBzbyB0aGF0IHRoZSB0eXBlIGhpZXJhcmNoeSB3aWxsIGJlIHNpbXBsZXIgKHdoaWNoIG1heSBzcGVlZCB1cCAiaXMiCiAgICAvLyBjaGVja3MpLgogICAgSW5pdGlhbGl6ZXJKdWRnbWVudCBrZXJuZWxJbml0aWFsaXplciA9IGluaXRpYWxpemVyOwogICAga2VybmVsSW5pdGlhbGl6ZXIuYWNjZXB0SW5mZXJlbmNlKG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpKTsKICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJTdGF0ZW1lbnQoU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgLy8gRm9yIGZ1bGwgKG5vbi10b3AgbGV2ZWwpIGluZmVyZW5jZSwgd2UgbmVlZCBhY2Nlc3MgdG8gdGhlCiAgICAvLyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIHNvIHRoYXQgd2UgY2FuIHBlcmZvcm0gZXJyb3IgcmVjb3ZlcnkuCiAgICBpZiAoIWlzVG9wTGV2ZWwpIGFzc2VydChoZWxwZXIgIT0gbnVsbCk7CgogICAgaWYgKHN0YXRlbWVudCBpcyBTdGF0ZW1lbnRKdWRnbWVudCkgewogICAgICAvLyBVc2UgcG9seW1vcnBoaWMgZGlzcGF0Y2ggb24gW0tlcm5lbFN0YXRlbWVudF0gdG8gcGVyZm9ybSB3aGF0ZXZlciBraW5kCiAgICAgIC8vIG9mIHR5cGUgaW5mZXJlbmNlIGlzIGNvcnJlY3QgZm9yIHRoaXMga2luZCBvZiBzdGF0ZW1lbnQuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZXhwZXJpbWVudCB0byBzZWUgaWYgZHluYW1pYyBkaXNwYXRjaCB3b3VsZCBiZSBiZXR0ZXIsCiAgICAgIC8vIHNvIHRoYXQgdGhlIHR5cGUgaGllcmFyY2h5IHdpbGwgYmUgc2ltcGxlciAod2hpY2ggbWF5IHNwZWVkIHVwICJpcyIKICAgICAgLy8gY2hlY2tzKS4KICAgICAgcmV0dXJuIHN0YXRlbWVudC5hY2NlcHRJbmZlcmVuY2UobmV3IEluZmVyZW5jZVZpc2l0b3IodGhpcykpOwogICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgaXMgRm9ySW5TdGF0ZW1lbnQpIHsKICAgICAgcmV0dXJuIHN0YXRlbWVudC5hY2NlcHQxKG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50IGlzIExhYmVsZWRTdGF0ZW1lbnQpIHsKICAgICAgcmV0dXJuIHN0YXRlbWVudC5hY2NlcHQxKG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50IGlzIEJyZWFrU3RhdGVtZW50KSB7CiAgICAgIHJldHVybiBzdGF0ZW1lbnQuYWNjZXB0MShuZXcgSW5mZXJlbmNlVmlzaXRvcih0aGlzKSwgbnVsbCk7CiAgICB9IGVsc2UgewogICAgICAvLyBFbmNvdW50ZXJlZCBhIHN0YXRlbWVudCB0eXBlIGZvciB3aGljaCB0eXBlIGluZmVyZW5jZSBpcyBub3QgeWV0CiAgICAgIC8vIGltcGxlbWVudGVkLCBzbyBqdXN0IHNraXAgaXQgZm9yIG5vdy4KICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiBvbmNlIHRoZSBCb2R5QnVpbGRlciB1c2VzIHNoYWRvdyBjbGFzc2VzIGZvcgogICAgICAvLyBldmVyeXRoaW5nLCB0aGlzIGNhc2Ugc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQuCiAgICB9CiAgfQp9CgpjbGFzcyBUeXBlTGl0ZXJhbEp1ZGdtZW50IGV4dGVuZHMgVHlwZUxpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgVHlwZUxpdGVyYWxKdWRnbWVudChEYXJ0VHlwZSB0eXBlKSA6IHN1cGVyKHR5cGUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFR5cGVMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtUeXBlUHJvbW90ZXJdIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aCBrZXJuZWwKLy8vIG9iamVjdHMuCmNsYXNzIFNoYWRvd1R5cGVQcm9tb3RlciBleHRlbmRzIFR5cGVQcm9tb3RlckltcGwgewogIFNoYWRvd1R5cGVQcm9tb3Rlci5wcml2YXRlKFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQpCiAgICAgIDogc3VwZXIucHJpdmF0ZSh0eXBlU2NoZW1hRW52aXJvbm1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0VmFyaWFibGVGdW5jdGlvbk5lc3RpbmdMZXZlbChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBpZiAodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KSB7CiAgICAgIHJldHVybiB2YXJpYWJsZS5fZnVuY3Rpb25OZXN0aW5nTGV2ZWw7CiAgICB9IGVsc2UgewogICAgICAvLyBIYWNrIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IEJvZHlCdWlsZGVyIHN0aWxsIGNyZWF0ZXMgcmF3CiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gb2JqZWN0cyBzb21ldGltZXMuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgdGhlIHR5cGUgcGFyYW1ldGVyIGlzCiAgICAgIC8vIEtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uCiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1Byb21vdGlvbkNhbmRpZGF0ZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBhc3NlcnQodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBrZXJuZWxWYXJpYWJsZURlY2xhcmF0aW9uID0gdmFyaWFibGU7CiAgICByZXR1cm4gIWtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uX2lzTG9jYWxGdW5jdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgc2FtZUV4cHJlc3Npb25zKEV4cHJlc3Npb24gYSwgRXhwcmVzc2lvbiBiKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKGEsIGIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBpZiAodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KSB7CiAgICAgIHZhcmlhYmxlLl9tdXRhdGVkQW55d2hlcmUgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgLy8gSGFjayB0byBkZWFsIHdpdGggdGhlIGZhY3QgdGhhdCBCb2R5QnVpbGRlciBzdGlsbCBjcmVhdGVzIHJhdwogICAgICAvLyBWYXJpYWJsZURlY2xhcmF0aW9uIG9iamVjdHMgc29tZXRpbWVzLgogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGdldCByaWQgb2YgdGhpcyBvbmNlIHRoZSB0eXBlIHBhcmFtZXRlciBpcwogICAgICAvLyBLZXJuZWxWYXJpYWJsZURlY2xhcmF0aW9uLgogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRWYXJpYWJsZU11dGF0ZWRJbkNsb3N1cmUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgaWYgKHZhcmlhYmxlIGlzIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCkgewogICAgICB2YXJpYWJsZS5fbXV0YXRlZEluQ2xvc3VyZSA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAvLyBIYWNrIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IEJvZHlCdWlsZGVyIHN0aWxsIGNyZWF0ZXMgcmF3CiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gb2JqZWN0cyBzb21ldGltZXMuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgdGhlIHR5cGUgcGFyYW1ldGVyIGlzCiAgICAgIC8vIEtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uCiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHdhc1ZhcmlhYmxlTXV0YXRlZEFueXdoZXJlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIGlmICh2YXJpYWJsZSBpcyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQpIHsKICAgICAgcmV0dXJuIHZhcmlhYmxlLl9tdXRhdGVkQW55d2hlcmU7CiAgICB9IGVsc2UgewogICAgICAvLyBIYWNrIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IEJvZHlCdWlsZGVyIHN0aWxsIGNyZWF0ZXMgcmF3CiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gb2JqZWN0cyBzb21ldGltZXMuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgdGhlIHR5cGUgcGFyYW1ldGVyIGlzCiAgICAgIC8vIEtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfQoKY2xhc3MgVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHsKICBWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudC5fKEV4cHJlc3Npb24gcmhzKSA6IHN1cGVyLl8ocmhzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IGV4dGVuZHMgVmFyaWFibGVEZWNsYXJhdGlvbgogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgZmluYWwgYm9vbCBmb3JTeW50aGV0aWNUb2tlbjsKCiAgZmluYWwgYm9vbCBfaW1wbGljaXRseVR5cGVkOwoKICAvLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzIGZpZWxkLiBXZSBjYW4gZ2V0IHJpZCBvZiBpdCBieSByZWNvcmRpbmcgY2xvc3VyZQogIC8vIG11dGF0aW9uIGluIFtCb2R5QnVpbGRlcl0uCiAgZmluYWwgaW50IF9mdW5jdGlvbk5lc3RpbmdMZXZlbDsKCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBmaWVsZC4gSXQncyBvbmx5IHVzZWQgbG9jYWxseSB3aGVuIGNvbXBpbGluZyBhCiAgLy8gbWV0aG9kLCBhbmQgdGhpcyBjYW4gdGh1cyBiZSB0cmFja2VkIGluIGEgW1NldF0gKGFjdHVhbGx5LCB0cmFja2luZyB0aGlzCiAgLy8gaW5mb3JtYXRpb24gaW4gYSBbTGlzdF0gaXMgcHJvYmFibHkgZXZlbiBmYXN0ZXIgYXMgdGhlIGF2ZXJhZ2Ugc2l6ZSB3aWxsCiAgLy8gYmUgY2xvc2UgdG8gemVybykuCiAgYm9vbCBfbXV0YXRlZEluQ2xvc3VyZSA9IGZhbHNlOwoKICAvLyBUT0RPKGFoZSk6IEludmVzdGlnYXRlIGlmIHRoaXMgY2FuIGJlIHJlbW92ZWQuCiAgYm9vbCBfbXV0YXRlZEFueXdoZXJlID0gZmFsc2U7CgogIC8vIFRPRE8oYWhlKTogSW52ZXN0aWdhdGUgaWYgdGhpcyBjYW4gYmUgcmVtb3ZlZC4KICBmaW5hbCBib29sIF9pc0xvY2FsRnVuY3Rpb247CgogIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudChTdHJpbmcgbmFtZSwgdGhpcy5fZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgIHt0aGlzLmZvclN5bnRoZXRpY1Rva2VuOiBmYWxzZSwKICAgICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciwKICAgICAgRGFydFR5cGUgdHlwZSwKICAgICAgYm9vbCBpc0ZpbmFsOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc0ZpZWxkRm9ybWFsOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvdmFyaWFudDogZmFsc2UsCiAgICAgIGJvb2wgaXNMb2NhbEZ1bmN0aW9uOiBmYWxzZSwKICAgICAgYm9vbCBpc0xhdGU6IGZhbHNlLAogICAgICBib29sIGlzUmVxdWlyZWQ6IGZhbHNlfSkKICAgICAgOiBfaW1wbGljaXRseVR5cGVkID0gdHlwZSA9PSBudWxsLAogICAgICAgIF9pc0xvY2FsRnVuY3Rpb24gPSBpc0xvY2FsRnVuY3Rpb24sCiAgICAgICAgc3VwZXIobmFtZSwKICAgICAgICAgICAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLAogICAgICAgICAgICB0eXBlOiB0eXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgICAgICAgIGlzRmluYWw6IGlzRmluYWwsCiAgICAgICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QsCiAgICAgICAgICAgIGlzRmllbGRGb3JtYWw6IGlzRmllbGRGb3JtYWwsCiAgICAgICAgICAgIGlzQ292YXJpYW50OiBpc0NvdmFyaWFudCwKICAgICAgICAgICAgaXNMYXRlOiBpc0xhdGUsCiAgICAgICAgICAgIGlzUmVxdWlyZWQ6IGlzUmVxdWlyZWQpOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuZm9yRWZmZWN0KAogICAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyLCB0aGlzLl9mdW5jdGlvbk5lc3RpbmdMZXZlbCkKICAgICAgOiBmb3JTeW50aGV0aWNUb2tlbiA9IGZhbHNlLAogICAgICAgIF9pbXBsaWNpdGx5VHlwZWQgPSBmYWxzZSwKICAgICAgICBfaXNMb2NhbEZ1bmN0aW9uID0gZmFsc2UsCiAgICAgICAgc3VwZXIuZm9yVmFsdWUoaW5pdGlhbGl6ZXIpOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuZm9yVmFsdWUoCiAgICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIsIHRoaXMuX2Z1bmN0aW9uTmVzdGluZ0xldmVsKQogICAgICA6IGZvclN5bnRoZXRpY1Rva2VuID0gZmFsc2UsCiAgICAgICAgX2ltcGxpY2l0bHlUeXBlZCA9IHRydWUsCiAgICAgICAgX2lzTG9jYWxGdW5jdGlvbiA9IGZhbHNlLAogICAgICAgIHN1cGVyLmZvclZhbHVlKGluaXRpYWxpemVyKTsKCiAgRXhwcmVzc2lvbiBnZXQgaW5pdGlhbGl6ZXJKdWRnbWVudCA9PiBpbml0aWFsaXplcjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCh0aGlzKTsKICB9CgogIC8vLyBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gW1ZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudF0gaGFkIGFuIGltcGxpY2l0CiAgLy8vIHR5cGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgc3RhdGljIHRvIGF2b2lkIGludHJvZHVjaW5nIGEgbWV0aG9kIHRoYXQgd291bGQgYmUgdmlzaWJsZSB0bwogIC8vLyB0aGUga2VybmVsLgogIHN0YXRpYyBib29sIGlzSW1wbGljaXRseVR5cGVkKFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCB2YXJpYWJsZSkgPT4KICAgICAgdmFyaWFibGUuX2ltcGxpY2l0bHlUeXBlZDsKCiAgLy8vIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gW1ZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudF0gcmVwcmVzZW50cyBhCiAgLy8vIGxvY2FsIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBUaGlzIGlzIHN0YXRpYyB0byBhdm9pZCBpbnRyb2R1Y2luZyBhIG1ldGhvZCB0aGF0IHdvdWxkIGJlIHZpc2libGUgdG8gdGhlCiAgLy8vIGtlcm5lbC4KICBzdGF0aWMgYm9vbCBpc0xvY2FsRnVuY3Rpb24oVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IHZhcmlhYmxlKSA9PgogICAgICB2YXJpYWJsZS5faXNMb2NhbEZ1bmN0aW9uOwp9CgovLy8gU3ludGhldGljIGp1ZGdtZW50IGNsYXNzIHJlcHJlc2VudGluZyBhbiBhdHRlbXB0IHRvIGludm9rZSBhbiB1bnJlc29sdmVkCi8vLyB0YXJnZXQuCmNsYXNzIFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uSnVkZ21lbnQgZXh0ZW5kcyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQgewogIGZpbmFsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50c0p1ZGdtZW50OwoKICBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbkp1ZGdtZW50Ll8oCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGRlc3VnYXJlZCwgdGhpcy5hcmd1bWVudHNKdWRnbWVudCkKICAgICAgOiBzdXBlci5fKGRlc3VnYXJlZCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0VW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gU3ludGhldGljIGp1ZGdtZW50IGNsYXNzIHJlcHJlc2VudGluZyBhbiBhdHRlbXB0IHRvIGFzc2lnbiB0byBhbiB1bnJlc29sdmVkCi8vLyB2YXJpYWJsZS4KY2xhc3MgVW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50IGV4dGVuZHMgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBmaW5hbCBib29sIGlzQ29tcG91bmQ7CiAgZmluYWwgRXhwcmVzc2lvbiByaHM7CgogIFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudC5fKAogICAgICBrZXJuZWwuRXhwcmVzc2lvbiBkZXN1Z2FyZWQsIHRoaXMuaXNDb21wb3VuZCwgdGhpcy5yaHMpCiAgICAgIDogc3VwZXIuXyhkZXN1Z2FyZWQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSByZWFkIGZyb20gYSB2YXJpYWJsZSBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgVmFyaWFibGVHZXRKdWRnbWVudCBleHRlbmRzIFZhcmlhYmxlR2V0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIGZpbmFsIFR5cGVQcm9tb3Rpb25GYWN0IF9mYWN0OwoKICBmaW5hbCBUeXBlUHJvbW90aW9uU2NvcGUgX3Njb3BlOwoKICBWYXJpYWJsZUdldEp1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIHRoaXMuX2ZhY3QsIHRoaXMuX3Njb3BlKQogICAgICA6IHN1cGVyKHZhcmlhYmxlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRWYXJpYWJsZUdldEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHdoaWxlIGxvb3AgaW4ga2VybmVsIGZvcm0uCmNsYXNzIFdoaWxlSnVkZ21lbnQgZXh0ZW5kcyBXaGlsZVN0YXRlbWVudCBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBXaGlsZUp1ZGdtZW50KEV4cHJlc3Npb24gY29uZGl0aW9uLCBTdGF0ZW1lbnQgYm9keSkgOiBzdXBlcihjb25kaXRpb24sIGJvZHkpOwoKICBFeHByZXNzaW9uIGdldCBjb25kaXRpb25KdWRnbWVudCA9PiBjb25kaXRpb247CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRXaGlsZUp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgeWllbGQgc3RhdGVtZW50IGluIGtlcm5lbCBmb3JtLgpjbGFzcyBZaWVsZEp1ZGdtZW50IGV4dGVuZHMgWWllbGRTdGF0ZW1lbnQgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgWWllbGRKdWRnbWVudChib29sIGlzWWllbGRTdGFyLCBFeHByZXNzaW9uIGV4cHJlc3Npb24pCiAgICAgIDogc3VwZXIoZXhwcmVzc2lvbiwgaXNZaWVsZFN0YXI6IGlzWWllbGRTdGFyKTsKCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gZXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFlpZWxkSnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBkZWZlcnJlZCBsb2FkIGxpYnJhcnkgY2FsbC4KY2xhc3MgTG9hZExpYnJhcnlKdWRnbWVudCBleHRlbmRzIExvYWRMaWJyYXJ5IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBmaW5hbCBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIExvYWRMaWJyYXJ5SnVkZ21lbnQoTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0LCB0aGlzLmFyZ3VtZW50cykgOiBzdXBlcihpbXBvcnQpOwoKICBBcmd1bWVudHNKdWRnbWVudCBnZXQgYXJndW1lbnRKdWRnbWVudHMgPT4gYXJndW1lbnRzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdExvYWRMaWJyYXJ5SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgdGVhci1vZmYgb2YgYSBgbG9hZExpYnJhcnlgIGZ1bmN0aW9uLgpjbGFzcyBMb2FkTGlicmFyeVRlYXJPZmZKdWRnbWVudCBleHRlbmRzIFN0YXRpY0dldAogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIGZpbmFsIExpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKCiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBMb2FkTGlicmFyeVRlYXJPZmZKdWRnbWVudCh0aGlzLmltcG9ydCwgUHJvY2VkdXJlIHRhcmdldCkgOiBzdXBlcih0YXJnZXQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBUaGUgcmVzdWx0IG9mIGluZmVyZW5jZSBmb3IgYSBSSFMgb2YgYW4gYXNzaWdubWVudC4KY2xhc3MgX0NvbXBsZXhBc3NpZ25tZW50SW5mZXJlbmNlUmVzdWx0IHsKICAvLy8gVGhlIHJlc29sdmVkIGNvbWJpbmVyIFtQcm9jZWR1cmVdLCBlLmcuIGBvcGVyYXRvcitgIGZvciBgYSArPSAyYCwgb3IKICAvLy8gYG51bGxgIGlmIHRoZSBhc3NpZ25tZW50IGlzIG5vdCBjb21wb3VuZC4KICBmaW5hbCBQcm9jZWR1cmUgY29tYmluZXI7CgogIF9Db21wbGV4QXNzaWdubWVudEluZmVyZW5jZVJlc3VsdCh0aGlzLmNvbWJpbmVyKTsKfQoKY2xhc3MgX1VuZmluaXNoZWRDYXNjYWRlIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgYWNjZXB0KHYpID0+IHVuc3VwcG9ydGVkKCJhY2NlcHQiLCAtMSwgbnVsbCk7CgogIGFjY2VwdDEodiwgYXJnKSA9PiB1bnN1cHBvcnRlZCgiYWNjZXB0MSIsIC0xLCBudWxsKTsKCiAgZ2V0U3RhdGljVHlwZSh0eXBlcykgPT4gdW5zdXBwb3J0ZWQoImdldFN0YXRpY1R5cGUiLCAtMSwgbnVsbCk7CgogIHRyYW5zZm9ybUNoaWxkcmVuKHYpID0+IHVuc3VwcG9ydGVkKCJ0cmFuc2Zvcm1DaGlsZHJlbiIsIC0xLCBudWxsKTsKCiAgdmlzaXRDaGlsZHJlbih2KSA9PiB1bnN1cHBvcnRlZCgidmlzaXRDaGlsZHJlbiIsIC0xLCBudWxsKTsKfQoKY2xhc3MgU3ludGhldGljV3JhcHBlciB7CiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcElsbGVnYWxBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzLAogICAgICB7aW50IGFzc2lnbm1lbnRPZmZzZXQ6IC0xfSkgewogICAgcmV0dXJuIG5ldyBJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50Ll8ocmhzLAogICAgICAgIGFzc2lnbm1lbnRPZmZzZXQ6IGFzc2lnbm1lbnRPZmZzZXQpCiAgICAgIC4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcEluZGV4QXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiBpbmRleCwgRXhwcmVzc2lvbiByaHMsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBJbmRleEFzc2lnbm1lbnRKdWRnbWVudC5fKHJlY2VpdmVyLCBpbmRleCwgcmhzLCBpc1N1cGVyOiBpc1N1cGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBpbmRleC5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGRlc3VnYXJlZCwgTWVtYmVyIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudC5fKAogICAgICAgIGRlc3VnYXJlZCwgY29uc3RydWN0b3IsIGFyZ3VtZW50cykKICAgICAgLi5maWxlT2Zmc2V0ID0gZGVzdWdhcmVkLmZpbGVPZmZzZXQ7CiAgfQoKICBzdGF0aWMgRXhwcmVzc2lvbiB3cmFwSW52YWxpZFdyaXRlKAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRXcml0ZUp1ZGdtZW50Ll8oZGVzdWdhcmVkLCBleHByZXNzaW9uKQogICAgICAuLmZpbGVPZmZzZXQgPSBkZXN1Z2FyZWQuZmlsZU9mZnNldDsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIHdyYXBQcm9wZXJ0eUFzc2lnbm1lbnQoRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiByaHMsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudC5fKHJlY2VpdmVyLCByaHMsIGlzU3VwZXI6IGlzU3VwZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcFN0YXRpY0Fzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpIHsKICAgIHJldHVybiBuZXcgU3RhdGljQXNzaWdubWVudEp1ZGdtZW50Ll8ocmhzKS4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBkZXN1Z2FyZWQpIHsKICAgIHJldHVybiBuZXcgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50Ll8oZGVzdWdhcmVkKQogICAgICAuLmZpbGVPZmZzZXQgPSBkZXN1Z2FyZWQuZmlsZU9mZnNldDsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbigKICAgICAgRXhwcmVzc2lvbiBkZXN1Z2FyZWQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudC5fKGRlc3VnYXJlZCwgYXJndW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBkZXN1Z2FyZWQuZmlsZU9mZnNldDsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgYm9vbCBpc0NvbXBvdW5kLCBFeHByZXNzaW9uIHJocykgewogICAgcmV0dXJuIG5ldyBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQuXygKICAgICAgICBkZXN1Z2FyZWQsIGlzQ29tcG91bmQsIHJocykKICAgICAgLi5maWxlT2Zmc2V0ID0gZGVzdWdhcmVkLmZpbGVPZmZzZXQ7CiAgfQoKICBzdGF0aWMgRXhwcmVzc2lvbiB3cmFwVmFyaWFibGVBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSB7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50Ll8ocmhzKS4uZmlsZU9mZnNldCA9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BAFQH00lBAE7TQQBRDgrBAE0M0orBAE2PzckKwQBPU8EAgE5cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfc2hhZG93X2FzdC5kYXJ0QnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvaW5mZXJlbmNlX3Zpc2l0b3IuZGFydMABQYkvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAia2VybmVsX3NoYWRvd19hc3QuZGFydCI7CgpjbGFzcyBJbmZlcmVuY2VWaXNpdG9yIGV4dGVuZHMgQm9keVZpc2l0b3IxPHZvaWQsIERhcnRUeXBlPiB7CiAgZmluYWwgU2hhZG93VHlwZUluZmVycmVyIGluZmVycmVyOwoKICBDbGFzcyBtYXBFbnRyeUNsYXNzOwoKICAvLyBTdG9yZXMgdGhlIG9mZnNldCBvZiB0aGUgbWFwIGVudHJ5IGZvdW5kIGJ5IGluZmVyTWFwRW50cnkuCiAgaW50IG1hcEVudHJ5T2Zmc2V0ID0gbnVsbDsKCiAgLy8gU3RvcmVzIHRoZSBvZmZzZXQgb2YgdGhlIG1hcCBzcHJlYWQgZm91bmQgYnkgaW5mZXJNYXBFbnRyeS4KICBpbnQgbWFwU3ByZWFkT2Zmc2V0ID0gbnVsbDsKCiAgLy8gU3RvcmVzIHRoZSBvZmZzZXQgb2YgdGhlIGl0ZXJhYmxlIHNwcmVhZCBmb3VuZCBieSBpbmZlck1hcEVudHJ5LgogIGludCBpdGVyYWJsZVNwcmVhZE9mZnNldCA9IG51bGw7CgogIC8vIFN0b3JlcyB0aGUgdHlwZSBvZiB0aGUgaXRlcmFibGUgc3ByZWFkIGZvdW5kIGJ5IGluZmVyTWFwRW50cnkuCiAgRGFydFR5cGUgaXRlcmFibGVTcHJlYWRUeXBlID0gbnVsbDsKCiAgSW5mZXJlbmNlVmlzaXRvcih0aGlzLmluZmVycmVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICB1bmhhbmRsZWQoIiR7bm9kZS5ydW50aW1lVHlwZX0iLCAiSW5mZXJlbmNlVmlzaXRvciIsIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBpbmZlcnJlci5oZWxwZXIudXJpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSwgXykgewogICAgdW5oYW5kbGVkKCIke25vZGUucnVudGltZVR5cGV9IiwgIkluZmVyZW5jZVZpc2l0b3IiLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZXIuaGVscGVyLnVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52YWxpZEV4cHJlc3Npb24oSW52YWxpZEV4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVMaXRlcmFsKERvdWJsZUxpdGVyYWwgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc0V4cHJlc3Npb24oQXNFeHByZXNzaW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgbm9kZS5vcGVyYW5kLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCwKICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICB9CgogIHZvaWQgdmlzaXRBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50KEFzc2VydEluaXRpYWxpemVySnVkZ21lbnQgbm9kZSkgewogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5qdWRnbWVudCk7CiAgfQoKICB2b2lkIHZpc2l0QXNzZXJ0U3RhdGVtZW50SnVkZ21lbnQoQXNzZXJ0U3RhdGVtZW50SnVkZ21lbnQgbm9kZSkgewogICAgdmFyIGNvbmRpdGlvbkp1ZGdtZW50ID0gbm9kZS5jb25kaXRpb25KdWRnbWVudDsKICAgIHZhciBtZXNzYWdlSnVkZ21lbnQgPSBub2RlLm1lc3NhZ2VKdWRnbWVudDsKICAgIHZhciBleHBlY3RlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgY29uZGl0aW9uSnVkZ21lbnQsIGV4cGVjdGVkVHlwZSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICBleHBlY3RlZFR5cGUsCiAgICAgICAgZ2V0SW5mZXJyZWRUeXBlKGNvbmRpdGlvbkp1ZGdtZW50LCBpbmZlcnJlciksCiAgICAgICAgY29uZGl0aW9uSnVkZ21lbnQsCiAgICAgICAgY29uZGl0aW9uSnVkZ21lbnQuZmlsZU9mZnNldCk7CiAgICBpZiAobWVzc2FnZUp1ZGdtZW50ICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgbWVzc2FnZUp1ZGdtZW50LCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXdhaXRFeHByZXNzaW9uKEF3YWl0RXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaWYgKCFpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNFbXB0eUNvbnRleHQodHlwZUNvbnRleHQpKSB7CiAgICAgIHR5cGVDb250ZXh0ID0gaW5mZXJyZXIud3JhcEZ1dHVyZU9yVHlwZSh0eXBlQ29udGV4dCk7CiAgICB9CiAgICB2YXIgb3BlcmFuZCA9IG5vZGUub3BlcmFuZDsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihvcGVyYW5kLCB0eXBlQ29udGV4dCwgdHJ1ZSwgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICBpbmZlcnJlci5zdG9yZUluZmVycmVkVHlwZSgKICAgICAgICBub2RlLAogICAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAudW5mdXR1cmVUeXBlKGdldEluZmVycmVkVHlwZShvcGVyYW5kLCBpbmZlcnJlcikpKTsKICB9CgogIHZvaWQgdmlzaXRCbG9ja0p1ZGdtZW50KEJsb2NrSnVkZ21lbnQgbm9kZSkgewogICAgZm9yICh2YXIganVkZ21lbnQgaW4gbm9kZS5qdWRnbWVudHMpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQoanVkZ21lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xMaXRlcmFsKEJvb2xMaXRlcmFsIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QnJlYWtTdGF0ZW1lbnQoQnJlYWtTdGF0ZW1lbnQgbm9kZSwgXykgewogICAgLy8gTm8gaW5mZXJlbmNlIG5lZWRzIHRvIGJlIGRvbmUuCiAgfQoKICB2b2lkIHZpc2l0Q2FzY2FkZUp1ZGdtZW50KENhc2NhZGVKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgbm9kZS5pbmZlcnJlZFR5cGUgPQogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihub2RlLnRhcmdldEp1ZGdtZW50LCB0eXBlQ29udGV4dCwgdHJ1ZSk7CiAgICBub2RlLnZhcmlhYmxlLnR5cGUgPSBnZXRJbmZlcnJlZFR5cGUobm9kZSwgaW5mZXJyZXIpOwogICAgZm9yICh2YXIganVkZ21lbnQgaW4gbm9kZS5jYXNjYWRlSnVkZ21lbnRzKSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGp1ZGdtZW50LCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICBDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciBjb25kaXRpb24gPSBub2RlLmNvbmRpdGlvbjsKICAgIHZhciB0aGVuID0gbm9kZS50aGVuOwogICAgdmFyIG90aGVyd2lzZSA9IG5vZGUub3RoZXJ3aXNlOwogICAgdmFyIGV4cGVjdGVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihjb25kaXRpb24sIGV4cGVjdGVkVHlwZSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICBleHBlY3RlZFR5cGUsCiAgICAgICAgZ2V0SW5mZXJyZWRUeXBlKGNvbmRpdGlvbiwgaW5mZXJyZXIpLAogICAgICAgIG5vZGUuY29uZGl0aW9uLAogICAgICAgIG5vZGUuY29uZGl0aW9uLmZpbGVPZmZzZXQpOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKHRoZW4sIHR5cGVDb250ZXh0LCB0cnVlLCBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihvdGhlcndpc2UsIHR5cGVDb250ZXh0LCB0cnVlLCBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgIC5nZXRTdGFuZGFyZFVwcGVyQm91bmQoZ2V0SW5mZXJyZWRUeXBlKHRoZW4sIGluZmVycmVyKSwKICAgICAgICAgICAgZ2V0SW5mZXJyZWRUeXBlKG90aGVyd2lzZSwgaW5mZXJyZXIpKTsKICAgIG5vZGUuc3RhdGljVHlwZSA9IGluZmVycmVkVHlwZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIGxpYnJhcnkgPSBpbmZlcnJlci5lbmdpbmUuYmVpbmdJbmZlcnJlZFtub2RlLnRhcmdldF07CiAgICBpZiAobGlicmFyeSAhPSBudWxsKSB7CiAgICAgIC8vIFRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3kgd2hlcmUgaW5mZXJyaW5nIHRoZSB0eXBlcyBvZiB0aGUKICAgICAgLy8gaW5pdGlhbGl6aW5nIGZvcm1hbHMgb2YgYSBjb25zdHJ1Y3RvciByZXF1aXJlZCB1cyB0byBpbmZlciB0aGUKICAgICAgLy8gY29ycmVzcG9uZGluZyBmaWVsZCB0eXBlIHdoaWNoIHJlcXVpcmVkIHVzIHRvIGtub3cgdGhlIHR5cGUgb2YgdGhlCiAgICAgIC8vIGNvbnN0cnVjdG9yLgogICAgICBTdHJpbmcgbmFtZSA9IG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzLm5hbWU7CiAgICAgIGlmIChub2RlLnRhcmdldC5uYW1lLm5hbWUuaXNOb3RFbXB0eSkgewogICAgICAgIC8vIFRPRE8oYWhlKTogVXNlIGBpbmZlcnJlci5oZWxwZXIuY29uc3RydWN0b3JOYW1lRm9yRGlhZ25vc3RpY3NgCiAgICAgICAgLy8gaW5zdGVhZC4gSG93ZXZlciwgYGluZmVycmVyLmhlbHBlcmAgbWF5IGJlIG51bGwuCiAgICAgICAgbmFtZSArPSAiLiR7bm9kZS50YXJnZXQubmFtZS5uYW1lfSI7CiAgICAgIH0KICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9DaXJjdWxhcml0eS53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgbm9kZS50YXJnZXQuZmlsZU9mZnNldCwKICAgICAgICAgIG5hbWUubGVuZ3RoLAogICAgICAgICAgbm9kZS50YXJnZXQuZmlsZVVyaSk7CiAgICAgIGZvciAodmFyIGRlY2xhcmF0aW9uIGluIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgICAgZGVjbGFyYXRpb24udHlwZSA/Pz0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgfQogICAgICBmb3IgKHZhciBkZWNsYXJhdGlvbiBpbiBub2RlLnRhcmdldC5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICBkZWNsYXJhdGlvbi50eXBlID8/PSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKChsaWJyYXJ5ID0gaW5mZXJyZXIuZW5naW5lLnRvQmVJbmZlcnJlZFtub2RlLnRhcmdldF0pICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuZW5naW5lLnRvQmVJbmZlcnJlZC5yZW1vdmUobm9kZS50YXJnZXQpOwogICAgICBpbmZlcnJlci5lbmdpbmUuYmVpbmdJbmZlcnJlZFtub2RlLnRhcmdldF0gPSBsaWJyYXJ5OwogICAgICBmb3IgKHZhciBkZWNsYXJhdGlvbiBpbiBub2RlLnRhcmdldC5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgIGluZmVycmVyLmVuZ2luZS5pbmZlckluaXRpYWxpemluZ0Zvcm1hbChkZWNsYXJhdGlvbiwgbm9kZS50YXJnZXQpOwogICAgICB9CiAgICAgIGZvciAodmFyIGRlY2xhcmF0aW9uIGluIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykgewogICAgICAgIGluZmVycmVyLmVuZ2luZS5pbmZlckluaXRpYWxpemluZ0Zvcm1hbChkZWNsYXJhdGlvbiwgbm9kZS50YXJnZXQpOwogICAgICB9CiAgICAgIGluZmVycmVyLmVuZ2luZS5iZWluZ0luZmVycmVkLnJlbW92ZShub2RlLnRhcmdldCk7CiAgICB9CiAgICBib29sIGhhc0V4cGxpY2l0VHlwZUFyZ3VtZW50cyA9CiAgICAgICAgZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSAhPSBudWxsOwogICAgdmFyIGluZmVyZW5jZVJlc3VsdCA9IGluZmVycmVyLmluZmVySW52b2NhdGlvbigKICAgICAgICB0eXBlQ29udGV4dCwKICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgbm9kZS50YXJnZXQuZnVuY3Rpb24uZnVuY3Rpb25UeXBlLAogICAgICAgIGNvbXB1dGVDb25zdHJ1Y3RvclJldHVyblR5cGUobm9kZS50YXJnZXQpLAogICAgICAgIG5vZGUuYXJndW1lbnRzLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgICBpbmZlcnJlci5zdG9yZUluZmVycmVkVHlwZShub2RlLCBpbmZlcmVuY2VSZXN1bHQudHlwZSk7CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGluZmVycmVyLmxpYnJhcnk7CiAgICAgIGlmICghaGFzRXhwbGljaXRUeXBlQXJndW1lbnRzKSB7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICBub2RlLCBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQsIGluZmVycmVyLmhlbHBlci51cmksCiAgICAgICAgICAgIGluZmVycmVkOiB0cnVlKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB2aXNpdENvbnRpbnVlU3dpdGNoSnVkZ21lbnQoQ29udGludWVTd2l0Y2hKdWRnbWVudCBub2RlKSB7CiAgICAvLyBObyBpbmZlcmVuY2UgbmVlZHMgdG8gYmUgZG9uZS4KICB9CiAgdm9pZCB2aXNpdERlZmVycmVkQ2hlY2tKdWRnbWVudCgKICAgICAgRGVmZXJyZWRDaGVja0p1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICAvLyBTaW5jZSB0aGUgdmFyaWFibGUgaXMgbm90IHVzZWQgaW4gdGhlIGJvZHkgd2UgZG9uJ3QgbmVlZCB0byB0eXBlIGluZmVyCiAgICAvLyBpdC4gIFdlIGNhbiBqdXN0IHR5cGUgaW5mZXIgdGhlIGJvZHkuCiAgICB2YXIganVkZ21lbnQgPSBub2RlLmp1ZGdtZW50OwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGp1ZGdtZW50LCB0eXBlQ29udGV4dCwgdHJ1ZSwgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IGdldEluZmVycmVkVHlwZShqdWRnbWVudCwgaW5mZXJyZXIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0RG9KdWRnbWVudChEb0p1ZGdtZW50IG5vZGUpIHsKICAgIHZhciBjb25kaXRpb25KdWRnbWVudCA9IG5vZGUuY29uZGl0aW9uSnVkZ21lbnQ7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogICAgdmFyIGJvb2xUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGNvbmRpdGlvbkp1ZGdtZW50LCBib29sVHlwZSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICBib29sVHlwZSwKICAgICAgICBnZXRJbmZlcnJlZFR5cGUoY29uZGl0aW9uSnVkZ21lbnQsIGluZmVycmVyKSwKICAgICAgICBub2RlLmNvbmRpdGlvbiwKICAgICAgICBub2RlLmNvbmRpdGlvbi5maWxlT2Zmc2V0KTsKICB9CgogIHZvaWQgdmlzaXREb3VibGVKdWRnbWVudChEb3VibGVKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuZG91YmxlQ2xhc3MucmF3VHlwZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCB2aXNpdEVtcHR5U3RhdGVtZW50SnVkZ21lbnQoRW1wdHlTdGF0ZW1lbnRKdWRnbWVudCBub2RlKSB7CiAgICAvLyBObyBpbmZlcmVuY2UgbmVlZHMgdG8gYmUgZG9uZS4KICB9CiAgdm9pZCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudChFeHByZXNzaW9uU3RhdGVtZW50SnVkZ21lbnQgbm9kZSkgewogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIG5vZGUuanVkZ21lbnQsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsLAogICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogIH0KCiAgdm9pZCB2aXNpdEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCgKICAgICAgRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBib29sIGhhZEV4cGxpY2l0VHlwZUFyZ3VtZW50cyA9CiAgICAgICAgZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSAhPSBudWxsOwogICAgdmFyIGluZmVyZW5jZVJlc3VsdCA9IGluZmVycmVyLmluZmVySW52b2NhdGlvbigKICAgICAgICB0eXBlQ29udGV4dCwKICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgbm9kZS50YXJnZXQuZnVuY3Rpb24uZnVuY3Rpb25UeXBlLAogICAgICAgIGNvbXB1dGVDb25zdHJ1Y3RvclJldHVyblR5cGUobm9kZS50YXJnZXQpLAogICAgICAgIG5vZGUuYXJndW1lbnRKdWRnbWVudHMsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJlbmNlUmVzdWx0LnR5cGU7CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGluZmVycmVyLmxpYnJhcnk7CiAgICAgIGlmICghaGFkRXhwbGljaXRUeXBlQXJndW1lbnRzKSB7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luRmFjdG9yeUludm9jYXRpb24oCiAgICAgICAgICAgIG5vZGUsIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgaW5mZXJyZXIuaGVscGVyLnVyaSwKICAgICAgICAgICAgaW5mZXJyZWQ6IHRydWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgdmlzaXRTaGFkb3dGaWVsZEluaXRpYWxpemVyKFNoYWRvd0ZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmFyIGluaXRpYWxpemVyVHlwZSA9CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKG5vZGUudmFsdWUsIG5vZGUuZmllbGQudHlwZSwgdHJ1ZSk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIG5vZGUuZmllbGQudHlwZSwgaW5pdGlhbGl6ZXJUeXBlLCBub2RlLnZhbHVlLCBub2RlLmZpbGVPZmZzZXQpOwogIH0KCiAgdm9pZCBoYW5kbGVGb3JJbkRlY2xhcmluZ1ZhcmlhYmxlKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGl0ZXJhYmxlLCBTdGF0ZW1lbnQgYm9keSwKICAgICAge2Jvb2wgaXNBc3luYzogZmFsc2V9KSB7CiAgICBEYXJ0VHlwZSBlbGVtZW50VHlwZTsKICAgIGJvb2wgdHlwZU5lZWRlZCA9IGZhbHNlOwogICAgYm9vbCB0eXBlQ2hlY2tzTmVlZGVkID0gIWluZmVycmVyLmlzVG9wTGV2ZWw7CiAgICBpZiAoVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmlzSW1wbGljaXRseVR5cGVkKHZhcmlhYmxlKSkgewogICAgICB0eXBlTmVlZGVkID0gdHJ1ZTsKICAgICAgZWxlbWVudFR5cGUgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudFR5cGUgPSB2YXJpYWJsZS50eXBlOwogICAgfQoKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9IGluZmVyRm9ySW5JdGVyYWJsZSgKICAgICAgICBpdGVyYWJsZSwgZWxlbWVudFR5cGUsIHR5cGVOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICBpc0FzeW5jOiBpc0FzeW5jKTsKICAgIGlmICh0eXBlTmVlZGVkKSB7CiAgICAgIGluZmVycmVyLmluc3RydW1lbnRhdGlvbj8ucmVjb3JkKGluZmVycmVyLnVyaSwgdmFyaWFibGUuZmlsZU9mZnNldCwKICAgICAgICAgICd0eXBlJywgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZShpbmZlcnJlZFR5cGUpKTsKICAgICAgdmFyaWFibGUudHlwZSA9IGluZmVycmVkVHlwZTsKICAgIH0KCiAgICBpZiAoYm9keSAhPSBudWxsKSBpbmZlcnJlci5pbmZlclN0YXRlbWVudChib2R5KTsKCiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHRlbXBWYXIgPQogICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKG51bGwsIHR5cGU6IGluZmVycmVkVHlwZSwgaXNGaW5hbDogdHJ1ZSk7CiAgICBWYXJpYWJsZUdldCB2YXJpYWJsZUdldCA9IG5ldyBWYXJpYWJsZUdldCh0ZW1wVmFyKQogICAgICAuLmZpbGVPZmZzZXQgPSB2YXJpYWJsZS5maWxlT2Zmc2V0OwogICAgVHJlZU5vZGUgcGFyZW50ID0gdmFyaWFibGUucGFyZW50OwogICAgRXhwcmVzc2lvbiBpbXBsaWNpdERvd25jYXN0ID0gaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICB2YXJpYWJsZS50eXBlLCBpbmZlcnJlZFR5cGUsIHZhcmlhYmxlR2V0LCBwYXJlbnQuZmlsZU9mZnNldCwKICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGUpOwogICAgaWYgKGltcGxpY2l0RG93bmNhc3QgIT0gbnVsbCkgewogICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKHZhcmlhYmxlLCB0ZW1wVmFyKTsKICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPSBpbXBsaWNpdERvd25jYXN0Li5wYXJlbnQgPSB2YXJpYWJsZTsKICAgICAgaWYgKGJvZHkgPT0gbnVsbCkgewogICAgICAgIGlmIChwYXJlbnQgaXMgRm9ySW5FbGVtZW50KSB7CiAgICAgICAgICBwYXJlbnQucHJvbG9ndWUgPSB2YXJpYWJsZTsKICAgICAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBGb3JJbk1hcEVudHJ5KSB7CiAgICAgICAgICBwYXJlbnQucHJvbG9ndWUgPSB2YXJpYWJsZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdW5oYW5kbGVkKCIke3BhcmVudC5ydW50aW1lVHlwZX0iLCAiaGFuZGxlRm9ySW5EZWNsYXJpbmdWYXJpYWJsZSIsCiAgICAgICAgICAgICAgdmFyaWFibGUuZmlsZU9mZnNldCwgdmFyaWFibGUubG9jYXRpb24uZmlsZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoYm9keSwgY29tYmluZVN0YXRlbWVudHModmFyaWFibGUsIGJvZHkpKTsKICAgICAgfQogICAgfQogIH0KCiAgRGFydFR5cGUgaW5mZXJGb3JJbkl0ZXJhYmxlKAogICAgICBFeHByZXNzaW9uIGl0ZXJhYmxlLCBEYXJ0VHlwZSBlbGVtZW50VHlwZSwgYm9vbCB0eXBlTmVlZGVkLAogICAgICB7Ym9vbCBpc0FzeW5jOiBmYWxzZX0pIHsKICAgIENsYXNzIGl0ZXJhYmxlQ2xhc3MgPSBpc0FzeW5jCiAgICAgICAgPyBpbmZlcnJlci5jb3JlVHlwZXMuc3RyZWFtQ2xhc3MKICAgICAgICA6IGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzOwogICAgRGFydFR5cGUgY29udGV4dCA9IGluZmVycmVyLndyYXBUeXBlKGVsZW1lbnRUeXBlLCBpdGVyYWJsZUNsYXNzKTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihpdGVyYWJsZSwgY29udGV4dCwgdHlwZU5lZWRlZCk7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZEV4cHJlc3Npb25UeXBlID0KICAgICAgICBpbmZlcnJlci5yZXNvbHZlVHlwZVBhcmFtZXRlcihnZXRJbmZlcnJlZFR5cGUoaXRlcmFibGUsIGluZmVycmVyKSk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIGluZmVycmVyLndyYXBUeXBlKGNvbnN0IER5bmFtaWNUeXBlKCksIGl0ZXJhYmxlQ2xhc3MpLAogICAgICAgIGluZmVycmVkRXhwcmVzc2lvblR5cGUsCiAgICAgICAgaXRlcmFibGUsCiAgICAgICAgaXRlcmFibGUuZmlsZU9mZnNldCwKICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUpOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogICAgaWYgKHR5cGVOZWVkZWQpIHsKICAgICAgaW5mZXJyZWRUeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgaWYgKGluZmVycmVkRXhwcmVzc2lvblR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0gaW5mZXJyZXIuY2xhc3NIaWVyYXJjaHkKICAgICAgICAgICAgLmdldFR5cGVBc0luc3RhbmNlT2YoaW5mZXJyZWRFeHByZXNzaW9uVHlwZSwgaXRlcmFibGVDbGFzcyk7CiAgICAgICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbmZlcnJlZFR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZUZvckluV2l0aG91dFZhcmlhYmxlKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGl0ZXJhYmxlLCBTdGF0ZW1lbnQgYm9keSwKICAgICAge2Jvb2wgaXNBc3luYzogZmFsc2V9KSB7CiAgICBEYXJ0VHlwZSBlbGVtZW50VHlwZTsKICAgIGJvb2wgdHlwZUNoZWNrc05lZWRlZCA9ICFpbmZlcnJlci5pc1RvcExldmVsOwogICAgRGFydFR5cGUgc3ludGhldGljV3JpdGVUeXBlOwogICAgRXhwcmVzc2lvbiBzeW50aGV0aWNBc3NpZ25tZW50OwogICAgRXhwcmVzc2lvbiByaHM7CiAgICBFeHByZXNzaW9uU3RhdGVtZW50IHN0YXRlbWVudCA9CiAgICAgICAgYm9keSBpcyBCbG9jayA/IGJvZHkuc3RhdGVtZW50cy5maXJzdCA6IGJvZHk7CiAgICBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQganVkZ21lbnQgPSBzdGF0ZW1lbnQuZXhwcmVzc2lvbjsKICAgIHN5bnRoZXRpY0Fzc2lnbm1lbnQgPSBqdWRnbWVudC5kZXN1Z2FyZWQ7CiAgICBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBWYXJpYWJsZVNldCkgewogICAgICBzeW50aGV0aWNXcml0ZVR5cGUgPSBlbGVtZW50VHlwZSA9IHN5bnRoZXRpY0Fzc2lnbm1lbnQudmFyaWFibGUudHlwZTsKICAgICAgcmhzID0gc3ludGhldGljQXNzaWdubWVudC52YWx1ZTsKICAgIH0gZWxzZSBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBQcm9wZXJ0eVNldCB8fAogICAgICAgIHN5bnRoZXRpY0Fzc2lnbm1lbnQgaXMgU3VwZXJQcm9wZXJ0eVNldCkgewogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBpbmZlcnJlci50aGlzVHlwZTsKICAgICAgT2JqZWN0IHdyaXRlTWVtYmVyID0KICAgICAgICAgIGluZmVycmVyLmZpbmRQcm9wZXJ0eVNldE1lbWJlcihyZWNlaXZlclR5cGUsIHN5bnRoZXRpY0Fzc2lnbm1lbnQpOwogICAgICBzeW50aGV0aWNXcml0ZVR5cGUgPQogICAgICAgICAgZWxlbWVudFR5cGUgPSBpbmZlcnJlci5nZXRTZXR0ZXJUeXBlKHdyaXRlTWVtYmVyLCByZWNlaXZlclR5cGUpOwogICAgICBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBQcm9wZXJ0eVNldCkgewogICAgICAgIHJocyA9IHN5bnRoZXRpY0Fzc2lnbm1lbnQudmFsdWU7CiAgICAgIH0gZWxzZSBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBTdXBlclByb3BlcnR5U2V0KSB7CiAgICAgICAgcmhzID0gc3ludGhldGljQXNzaWdubWVudC52YWx1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzeW50aGV0aWNBc3NpZ25tZW50IGlzIFN0YXRpY1NldCkgewogICAgICBzeW50aGV0aWNXcml0ZVR5cGUgPSBlbGVtZW50VHlwZSA9IHN5bnRoZXRpY0Fzc2lnbm1lbnQudGFyZ2V0LnNldHRlclR5cGU7CiAgICAgIHJocyA9IHN5bnRoZXRpY0Fzc2lnbm1lbnQudmFsdWU7CiAgICB9IGVsc2UgaWYgKHN5bnRoZXRpY0Fzc2lnbm1lbnQgaXMgSW52YWxpZEV4cHJlc3Npb24pIHsKICAgICAgZWxlbWVudFR5cGUgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKAogICAgICAgICAgIiR7c3ludGhldGljQXNzaWdubWVudC5ydW50aW1lVHlwZX0iLAogICAgICAgICAgImhhbmRsZUZvckluU3RhdGVtZW50V2l0aG91dFZhcmlhYmxlIiwKICAgICAgICAgIHN5bnRoZXRpY0Fzc2lnbm1lbnQuZmlsZU9mZnNldCwKICAgICAgICAgIGluZmVycmVyLmhlbHBlci51cmkpOwogICAgfQoKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9IGluZmVyRm9ySW5JdGVyYWJsZSgKICAgICAgICBpdGVyYWJsZSwgZWxlbWVudFR5cGUsIHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgaXNBc3luYzogaXNBc3luYyk7CiAgICBpZiAodHlwZUNoZWNrc05lZWRlZCkgewogICAgICB2YXJpYWJsZS50eXBlID0gaW5mZXJyZWRUeXBlOwogICAgfQoKICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KGJvZHkpOwoKICAgIGlmIChzeW50aGV0aWNXcml0ZVR5cGUgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgZ3JlYXRlc3RDbG9zdXJlKGluZmVycmVyLmNvcmVUeXBlcywgc3ludGhldGljV3JpdGVUeXBlKSwKICAgICAgICAgIHZhcmlhYmxlLnR5cGUsCiAgICAgICAgICByaHMsCiAgICAgICAgICByaHMuZmlsZU9mZnNldCwKICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvckluU3RhdGVtZW50KEZvckluU3RhdGVtZW50IG5vZGUsIF8pIHsKICAgIGlmIChub2RlLnZhcmlhYmxlLm5hbWUgPT0gbnVsbCkgewogICAgICBoYW5kbGVGb3JJbldpdGhvdXRWYXJpYWJsZShub2RlLnZhcmlhYmxlLCBub2RlLml0ZXJhYmxlLCBub2RlLmJvZHksCiAgICAgICAgICBpc0FzeW5jOiBub2RlLmlzQXN5bmMpOwogICAgfSBlbHNlIHsKICAgICAgaGFuZGxlRm9ySW5EZWNsYXJpbmdWYXJpYWJsZShub2RlLnZhcmlhYmxlLCBub2RlLml0ZXJhYmxlLCBub2RlLmJvZHksCiAgICAgICAgICBpc0FzeW5jOiBub2RlLmlzQXN5bmMpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdEZvckp1ZGdtZW50KEZvckp1ZGdtZW50IG5vZGUpIHsKICAgIHZhciBjb25kaXRpb25KdWRnbWVudCA9IG5vZGUuY29uZGl0aW9uSnVkZ21lbnQ7CiAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgaW4gbm9kZS52YXJpYWJsZXMpIHsKICAgICAgaWYgKHZhcmlhYmxlLm5hbWUgPT0gbnVsbCkgewogICAgICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSB2YXJpYWJsZS5pbml0aWFsaXplcjsKICAgICAgICBpZiAoaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgdmFyaWFibGUudHlwZSA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgICAgICBpbml0aWFsaXplciwgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSwKICAgICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQodmFyaWFibGUpOwogICAgICB9CiAgICB9CiAgICBpZiAoY29uZGl0aW9uSnVkZ21lbnQgIT0gbnVsbCkgewogICAgICB2YXIgZXhwZWN0ZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBjb25kaXRpb25KdWRnbWVudCwgZXhwZWN0ZWRUeXBlLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBleHBlY3RlZFR5cGUsCiAgICAgICAgICBnZXRJbmZlcnJlZFR5cGUoY29uZGl0aW9uSnVkZ21lbnQsIGluZmVycmVyKSwKICAgICAgICAgIG5vZGUuY29uZGl0aW9uLAogICAgICAgICAgbm9kZS5jb25kaXRpb24uZmlsZU9mZnNldCk7CiAgICB9CiAgICBmb3IgKHZhciB1cGRhdGUgaW4gbm9kZS51cGRhdGVKdWRnbWVudHMpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgdXBkYXRlLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgfQogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRGdW5jdGlvbk5vZGVKdWRnbWVudCgKICAgICAgRnVuY3Rpb25Ob2RlSnVkZ21lbnQgbm9kZSwKICAgICAgRGFydFR5cGUgdHlwZUNvbnRleHQsCiAgICAgIERhcnRUeXBlIHJldHVybkNvbnRleHQsCiAgICAgIGludCByZXR1cm5UeXBlSW5zdHJ1bWVudGF0aW9uT2Zmc2V0KSB7CiAgICByZXR1cm4gaW5mZXJyZXIuaW5mZXJMb2NhbEZ1bmN0aW9uKAogICAgICAgIG5vZGUsIHR5cGVDb250ZXh0LCByZXR1cm5UeXBlSW5zdHJ1bWVudGF0aW9uT2Zmc2V0LCByZXR1cm5Db250ZXh0KTsKICB9CgogIHZvaWQgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQoRnVuY3Rpb25EZWNsYXJhdGlvbkp1ZGdtZW50IG5vZGUpIHsKICAgIGluZmVycmVyLmluZmVyTWV0YWRhdGFLZWVwaW5nSGVscGVyKG5vZGUudmFyaWFibGUuYW5ub3RhdGlvbnMpOwogICAgRGFydFR5cGUgcmV0dXJuQ29udGV4dCA9CiAgICAgICAgbm9kZS5faGFzSW1wbGljaXRSZXR1cm5UeXBlID8gbnVsbCA6IG5vZGUuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgIHZhciBpbmZlcmVuY2VSZXN1bHQgPSB2aXNpdEZ1bmN0aW9uTm9kZUp1ZGdtZW50KAogICAgICAgIG5vZGUuZnVuY3Rpb25KdWRnbWVudCwgbnVsbCwgcmV0dXJuQ29udGV4dCwgbm9kZS5maWxlT2Zmc2V0KTsKICAgIG5vZGUudmFyaWFibGUudHlwZSA9IGluZmVyZW5jZVJlc3VsdC50eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihGdW5jdGlvbkV4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciBpbmZlcmVuY2VSZXN1bHQgPSB2aXNpdEZ1bmN0aW9uTm9kZUp1ZGdtZW50KAogICAgICAgIG5vZGUuZnVuY3Rpb24sIHR5cGVDb250ZXh0LCBudWxsLCBub2RlLmZpbGVPZmZzZXQpOwogICAgaW5mZXJyZXIuc3RvcmVJbmZlcnJlZFR5cGUobm9kZSwgaW5mZXJlbmNlUmVzdWx0LnR5cGUpOwogIH0KCiAgdm9pZCB2aXNpdEludmFsaWRTdXBlckluaXRpYWxpemVySnVkZ21lbnQoCiAgICAgIEludmFsaWRTdXBlckluaXRpYWxpemVySnVkZ21lbnQgbm9kZSkgewogICAgdmFyIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tU3VwZXJ0eXBlKGluZmVycmVyLmNsYXNzSGllcmFyY2h5CiAgICAgICAgLmdldENsYXNzQXNJbnN0YW5jZU9mKAogICAgICAgICAgICBpbmZlcnJlci50aGlzVHlwZS5jbGFzc05vZGUsIG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzKSk7CiAgICBpbmZlcnJlci5pbmZlckludm9jYXRpb24oCiAgICAgICAgbnVsbCwKICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKAogICAgICAgICAgICBub2RlLnRhcmdldC5mdW5jdGlvbi5mdW5jdGlvblR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzKSwKICAgICAgICBpbmZlcnJlci50aGlzVHlwZSwKICAgICAgICBub2RlLmFyZ3VtZW50c0p1ZGdtZW50LAogICAgICAgIHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2U6IHRydWUpOwogIH0KCiAgdm9pZCB2aXNpdElmTnVsbEp1ZGdtZW50KElmTnVsbEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICB2YXIgbGVmdEp1ZGdtZW50ID0gbm9kZS5sZWZ0SnVkZ21lbnQ7CiAgICB2YXIgcmlnaHRKdWRnbWVudCA9IG5vZGUucmlnaHRKdWRnbWVudDsKICAgIC8vIFRvIGluZmVyIGBlMCA/PyBlMWAgaW4gY29udGV4dCBLOgogICAgLy8gLSBJbmZlciBlMCBpbiBjb250ZXh0IEsgdG8gZ2V0IFQwCiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24obGVmdEp1ZGdtZW50LCB0eXBlQ29udGV4dCwgdHJ1ZSk7CiAgICB2YXIgbGhzVHlwZSA9IGdldEluZmVycmVkVHlwZShsZWZ0SnVkZ21lbnQsIGluZmVycmVyKTsKICAgIG5vZGUudmFyaWFibGUudHlwZSA9IGxoc1R5cGU7CiAgICAvLyAtIExldCBKID0gVDAgaWYgSyBpcyBgP2AgZWxzZSBLLgogICAgLy8gLSBJbmZlciBlMSBpbiBjb250ZXh0IEogdG8gZ2V0IFQxCiAgICBpZiAodHlwZUNvbnRleHQgaXMgVW5rbm93blR5cGUpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKHJpZ2h0SnVkZ21lbnQsIGxoc1R5cGUsIHRydWUsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihyaWdodEp1ZGdtZW50LCB0eXBlQ29udGV4dCwgdHJ1ZSwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgfQogICAgdmFyIHJoc1R5cGUgPSBnZXRJbmZlcnJlZFR5cGUocmlnaHRKdWRnbWVudCwgaW5mZXJyZXIpOwogICAgLy8gLSBMZXQgVCA9IGdyZWF0ZXN0IGNsb3N1cmUgb2YgSyB3aXRoIHJlc3BlY3QgdG8gYD9gIGlmIEsgaXMgbm90IGBfYCwgZWxzZQogICAgLy8gICBVUCh0MCwgdDEpCiAgICAvLyAtIFRoZW4gdGhlIGluZmVycmVkIHR5cGUgaXMgVC4KICAgIG5vZGUuaW5mZXJyZWRUeXBlID0KICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuZ2V0U3RhbmRhcmRVcHBlckJvdW5kKGxoc1R5cGUsIHJoc1R5cGUpOwogICAgbm9kZS5ib2R5LnN0YXRpY1R5cGUgPSBnZXRJbmZlcnJlZFR5cGUobm9kZSwgaW5mZXJyZXIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0SWZKdWRnbWVudChJZkp1ZGdtZW50IG5vZGUpIHsKICAgIHZhciBjb25kaXRpb25KdWRnbWVudCA9IG5vZGUuY29uZGl0aW9uSnVkZ21lbnQ7CiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIGNvbmRpdGlvbkp1ZGdtZW50LCBleHBlY3RlZFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgZXhwZWN0ZWRUeXBlLAogICAgICAgIGdldEluZmVycmVkVHlwZShjb25kaXRpb25KdWRnbWVudCwgaW5mZXJyZXIpLAogICAgICAgIG5vZGUuY29uZGl0aW9uLAogICAgICAgIG5vZGUuY29uZGl0aW9uLmZpbGVPZmZzZXQpOwogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS50aGVuKTsKICAgIGlmIChub2RlLm90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KG5vZGUub3RoZXJ3aXNlKTsKICAgIH0KICB9CgogIHZvaWQgdmlzaXRJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50KAogICAgICBJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpZiAobm9kZS53cml0ZSAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIG5vZGUud3JpdGUsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIH0KICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICBub2RlLnJocywgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgbm9kZS5fcmVwbGFjZVdpdGhEZXN1Z2FyZWQoKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCB2aXNpdEluZGV4QXNzaWdubWVudEp1ZGdtZW50KAogICAgICBJbmRleEFzc2lnbm1lbnRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIHJlY2VpdmVyVHlwZSA9IG5vZGUuX2luZmVyUmVjZWl2ZXIoaW5mZXJyZXIpOwogICAgdmFyIHdyaXRlTWVtYmVyID0KICAgICAgICBpbmZlcnJlci5maW5kTWV0aG9kSW52b2NhdGlvbk1lbWJlcihyZWNlaXZlclR5cGUsIG5vZGUud3JpdGUpOwogICAgLy8gVG8gcmVwbGljYXRlIGFuYWx5emVyIGJlaGF2aW9yLCB3ZSBiYXNlIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSB3cml0ZQogICAgLy8gbWVtYmVyLiAgVE9ETyhwYXVsYmVycnkpOiB3b3VsZCBpdCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSByZWFkIG1lbWJlcgogICAgLy8gd2hlbiBkb2luZyBjb21wb3VuZCBhc3NpZ25tZW50PwogICAgdmFyIGNhbGxlZVR5cGUgPSBpbmZlcnJlci5nZXRDYWxsZWVGdW5jdGlvblR5cGUoCiAgICAgICAgaW5mZXJyZXIuZ2V0Q2FsbGVlVHlwZSh3cml0ZU1lbWJlciwgcmVjZWl2ZXJUeXBlKSwgZmFsc2UpOwogICAgRGFydFR5cGUgZXhwZWN0ZWRJbmRleFR5cGVGb3JXcml0ZTsKICAgIERhcnRUeXBlIGluZGV4Q29udGV4dCA9IGNvbnN0IFVua25vd25UeXBlKCk7CiAgICBEYXJ0VHlwZSB3cml0ZUNvbnRleHQgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgaWYgKGNhbGxlZVR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoID49IDIpIHsKICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiB3ZSBvdWdodCB0byBnZXQgYSBjb250ZXh0IGZvciB0aGUgaW5kZXggZXhwcmVzc2lvbgogICAgICAvLyBmcm9tIHRoZSBpbmRleCBmb3JtYWwgcGFyYW1ldGVyLCBidXQgYW5hbHl6ZXIgZG9lc24ndCBzbyBmb3Igbm93IHdlCiAgICAgIC8vIHJlcGxpY2F0ZSBpdHMgYmVoYXZpb3IuCiAgICAgIGV4cGVjdGVkSW5kZXhUeXBlRm9yV3JpdGUgPSBjYWxsZWVUeXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzWzBdOwogICAgICB3cml0ZUNvbnRleHQgPSBjYWxsZWVUeXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzWzFdOwogICAgfQogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKG5vZGUuaW5kZXgsIGluZGV4Q29udGV4dCwgdHJ1ZSk7CiAgICB2YXIgaW5kZXhUeXBlID0gZ2V0SW5mZXJyZWRUeXBlKG5vZGUuaW5kZXgsIGluZmVycmVyKTsKICAgIG5vZGUuX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgbm9kZS5pbmRleCwgaW5kZXhUeXBlKTsKICAgIGlmICh3cml0ZUNvbnRleHQgaXMhIFVua25vd25UeXBlKSB7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBleHBlY3RlZEluZGV4VHlwZUZvcldyaXRlLAogICAgICAgICAgaW5kZXhUeXBlLAogICAgICAgICAgbm9kZS5fZ2V0SW52b2NhdGlvbkFyZ3VtZW50cyhpbmZlcnJlciwgbm9kZS53cml0ZSkucG9zaXRpb25hbFswXSwKICAgICAgICAgIG5vZGUud3JpdGUuZmlsZU9mZnNldCk7CiAgICB9CiAgICBJbnZvY2F0aW9uRXhwcmVzc2lvbiByZWFkID0gbm9kZS5yZWFkOwogICAgRGFydFR5cGUgcmVhZFR5cGU7CiAgICBpZiAocmVhZCAhPSBudWxsKSB7CiAgICAgIHZhciByZWFkTWVtYmVyID0gaW5mZXJyZXIuZmluZE1ldGhvZEludm9jYXRpb25NZW1iZXIocmVjZWl2ZXJUeXBlLCByZWFkLAogICAgICAgICAgaW5zdHJ1bWVudGVkOiBmYWxzZSk7CiAgICAgIHZhciBjYWxsZWVGdW5jdGlvblR5cGUgPSBpbmZlcnJlci5nZXRDYWxsZWVGdW5jdGlvblR5cGUoCiAgICAgICAgICBpbmZlcnJlci5nZXRDYWxsZWVUeXBlKHJlYWRNZW1iZXIsIHJlY2VpdmVyVHlwZSksIGZhbHNlKTsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgIGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJUeXBlKGNhbGxlZUZ1bmN0aW9uVHlwZSwgMCksCiAgICAgICAgICBpbmRleFR5cGUsCiAgICAgICAgICBub2RlLl9nZXRJbnZvY2F0aW9uQXJndW1lbnRzKGluZmVycmVyLCByZWFkKS5wb3NpdGlvbmFsWzBdLAogICAgICAgICAgcmVhZC5maWxlT2Zmc2V0KTsKICAgICAgcmVhZFR5cGUgPSBjYWxsZWVGdW5jdGlvblR5cGUucmV0dXJuVHlwZTsKICAgICAgdmFyIGRlc3VnYXJlZEludm9jYXRpb24gPSByZWFkIGlzIE1ldGhvZEludm9jYXRpb24gPyByZWFkIDogbnVsbDsKICAgICAgdmFyIGNoZWNrS2luZCA9IGluZmVycmVyLnByZUNoZWNrSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKG5vZGUucmVjZWl2ZXIsCiAgICAgICAgICByZWNlaXZlclR5cGUsIHJlYWRNZW1iZXIsIGRlc3VnYXJlZEludm9jYXRpb24sIHJlYWQuYXJndW1lbnRzLCByZWFkKTsKICAgICAgdmFyIHJlcGxhY2VkUmVhZCA9IGluZmVycmVyLmhhbmRsZUludm9jYXRpb25Db250cmF2YXJpYW5jZSgKICAgICAgICAgIGNoZWNrS2luZCwKICAgICAgICAgIGRlc3VnYXJlZEludm9jYXRpb24sCiAgICAgICAgICByZWFkLmFyZ3VtZW50cywKICAgICAgICAgIHJlYWQsCiAgICAgICAgICByZWFkVHlwZSwKICAgICAgICAgIGNhbGxlZUZ1bmN0aW9uVHlwZSwKICAgICAgICAgIHJlYWQuZmlsZU9mZnNldCk7CiAgICAgIG5vZGUuX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgcmVwbGFjZWRSZWFkLCByZWFkVHlwZSk7CiAgICB9CiAgICBub2RlLl9pbmZlclJocyhpbmZlcnJlciwgcmVhZFR5cGUsIHdyaXRlQ29udGV4dCk7CiAgICBub2RlLl9yZXBsYWNlV2l0aERlc3VnYXJlZCgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0SW50SnVkZ21lbnQoSW50SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmIChpbmZlcnJlci5pc0RvdWJsZUNvbnRleHQodHlwZUNvbnRleHQpKSB7CiAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IG5vZGUuYXNEb3VibGUoKTsKICAgICAgaWYgKGRvdWJsZVZhbHVlICE9IG51bGwpIHsKICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgIG5vZGUsIERvdWJsZUxpdGVyYWwoZG91YmxlVmFsdWUpLi5maWxlT2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0KTsKICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5kb3VibGVDbGFzcy5yYXdUeXBlOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBFeHByZXNzaW9uIGVycm9yID0gY2hlY2tXZWJJbnRMaXRlcmFsc0Vycm9ySWZVbmV4YWN0KAogICAgICAgIGluZmVycmVyLCBub2RlLnZhbHVlLCBub2RlLmxpdGVyYWwsIG5vZGUuZmlsZU9mZnNldCk7CiAgICBpZiAoZXJyb3IgIT0gbnVsbCkgewogICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZXJyb3IpOwogICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5pbnRDbGFzcy5yYXdUeXBlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0U2hhZG93TGFyZ2VJbnRMaXRlcmFsKAogICAgICBTaGFkb3dMYXJnZUludExpdGVyYWwgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmIChpbmZlcnJlci5pc0RvdWJsZUNvbnRleHQodHlwZUNvbnRleHQpKSB7CiAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IG5vZGUuYXNEb3VibGUoKTsKICAgICAgaWYgKGRvdWJsZVZhbHVlICE9IG51bGwpIHsKICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgIG5vZGUsIERvdWJsZUxpdGVyYWwoZG91YmxlVmFsdWUpLi5maWxlT2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0KTsKICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5kb3VibGVDbGFzcy5yYXdUeXBlOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CgogICAgaW50IGludFZhbHVlID0gbm9kZS5hc0ludDY0KCk7CiAgICBpZiAoaW50VmFsdWUgPT0gbnVsbCkgewogICAgICBFeHByZXNzaW9uIHJlcGxhY2VtZW50ID0gaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZUludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlLndpdGhBcmd1bWVudHMobm9kZS5saXRlcmFsKSwKICAgICAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgbm9kZS5saXRlcmFsLmxlbmd0aCkpOwogICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgcmVwbGFjZW1lbnQpOwogICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBFeHByZXNzaW9uIGVycm9yID0gY2hlY2tXZWJJbnRMaXRlcmFsc0Vycm9ySWZVbmV4YWN0KAogICAgICAgIGluZmVycmVyLCBpbnRWYWx1ZSwgbm9kZS5saXRlcmFsLCBub2RlLmZpbGVPZmZzZXQpOwogICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgbm9kZS5wYXJlbnQucmVwbGFjZUNoaWxkKG5vZGUsIGVycm9yKTsKICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBCb3R0b21UeXBlKCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgbm9kZS5wYXJlbnQKICAgICAgICAucmVwbGFjZUNoaWxkKG5vZGUsIEludExpdGVyYWwoaW50VmFsdWUpLi5maWxlT2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0KTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmludENsYXNzLnJhd1R5cGU7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgdmlzaXRTaGFkb3dJbnZhbGlkSW5pdGlhbGl6ZXIoU2hhZG93SW52YWxpZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICBub2RlLnZhcmlhYmxlLmluaXRpYWxpemVyLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgfQoKICB2b2lkIHZpc2l0U2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXIoU2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKG5vZGUudmFsdWUsIG5vZGUuZmllbGQudHlwZSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElzRXhwcmVzc2lvbihJc0V4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICBub2RlLm9wZXJhbmQsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSwgXykgewogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICB9CgogIERhcnRUeXBlIGdldFNwcmVhZEVsZW1lbnRUeXBlKERhcnRUeXBlIHNwcmVhZFR5cGUsIGJvb2wgaXNOdWxsQXdhcmUpIHsKICAgIGlmIChzcHJlYWRUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgIC5nZXRUeXBlQXNJbnN0YW5jZU9mKHNwcmVhZFR5cGUsIGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKTsKICAgICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSByZXR1cm4gc3VwZXJ0eXBlLnR5cGVBcmd1bWVudHNbMF07CiAgICAgIGlmIChzcHJlYWRUeXBlLmNsYXNzTm9kZSA9PSBpbmZlcnJlci5jb3JlVHlwZXMubnVsbENsYXNzICYmIGlzTnVsbEF3YXJlKSB7CiAgICAgICAgcmV0dXJuIHNwcmVhZFR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoc3ByZWFkVHlwZSBpcyBEeW5hbWljVHlwZSkgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIERhcnRUeXBlIGluZmVyRWxlbWVudCgKICAgICAgRXhwcmVzc2lvbiBlbGVtZW50LAogICAgICBUcmVlTm9kZSBwYXJlbnQsCiAgICAgIERhcnRUeXBlIGluZmVycmVkVHlwZUFyZ3VtZW50LAogICAgICBNYXA8VHJlZU5vZGUsIERhcnRUeXBlPiBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICBib29sIGluZmVyZW5jZU5lZWRlZCwKICAgICAgYm9vbCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICBpZiAoZWxlbWVudCBpcyBTcHJlYWRFbGVtZW50KSB7CiAgICAgIERhcnRUeXBlIHNwcmVhZFR5cGUgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBlbGVtZW50LmV4cHJlc3Npb24sCiAgICAgICAgICBuZXcgSW50ZXJmYWNlVHlwZShpbmZlcnJlci5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcywKICAgICAgICAgICAgICA8RGFydFR5cGU+W2luZmVycmVkVHlwZUFyZ3VtZW50XSksCiAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzW2VsZW1lbnQuZXhwcmVzc2lvbl0gPSBzcHJlYWRUeXBlOwogICAgICBpZiAodHlwZUNoZWNrc05lZWRlZCkgewogICAgICAgIERhcnRUeXBlIHNwcmVhZEVsZW1lbnRUeXBlID0KICAgICAgICAgICAgZ2V0U3ByZWFkRWxlbWVudFR5cGUoc3ByZWFkVHlwZSwgZWxlbWVudC5pc051bGxBd2FyZSk7CiAgICAgICAgaWYgKHNwcmVhZEVsZW1lbnRUeXBlID09IG51bGwpIHsKICAgICAgICAgIGlmIChzcHJlYWRUeXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICAgICAgICBzcHJlYWRUeXBlLmNsYXNzTm9kZSA9PSBpbmZlcnJlci5jb3JlVHlwZXMubnVsbENsYXNzICYmCiAgICAgICAgICAgICAgIWVsZW1lbnQuaXNOdWxsQXdhcmUpIHsKICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbShtZXNzYWdlTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsLAogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4cHJlc3Npb24uZmlsZU9mZnNldCwgMSkpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3ByZWFkVHlwZU1pc21hdGNoLndpdGhBcmd1bWVudHMoc3ByZWFkVHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAxKSkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3ByZWFkVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBpZiAoIWluZmVycmVyLmlzQXNzaWduYWJsZShpbmZlcnJlZFR5cGVBcmd1bWVudCwgc3ByZWFkRWxlbWVudFR5cGUpKSB7CiAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByZWFkRWxlbWVudFR5cGUsIGluZmVycmVkVHlwZUFyZ3VtZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIDEpKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFVzZSAnZHluYW1pYycgZm9yIGVycm9yIHJlY292ZXJ5LgogICAgICByZXR1cm4gZWxlbWVudC5lbGVtZW50VHlwZSA9CiAgICAgICAgICBnZXRTcHJlYWRFbGVtZW50VHlwZShzcHJlYWRUeXBlLCBlbGVtZW50LmlzTnVsbEF3YXJlKSA/PwogICAgICAgICAgICAgIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgSWZFbGVtZW50KSB7CiAgICAgIERhcnRUeXBlIGJvb2xUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgICBEYXJ0VHlwZSBjb25kaXRpb25UeXBlID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgZWxlbWVudC5jb25kaXRpb24sIGJvb2xUeXBlLCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogZmFsc2UpOwogICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKGJvb2xUeXBlLCBjb25kaXRpb25UeXBlLCBlbGVtZW50LmNvbmRpdGlvbiwKICAgICAgICAgIGVsZW1lbnQuY29uZGl0aW9uLmZpbGVPZmZzZXQpOwogICAgICBEYXJ0VHlwZSB0aGVuVHlwZSA9IGluZmVyRWxlbWVudCgKICAgICAgICAgIGVsZW1lbnQudGhlbiwKICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCwKICAgICAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQsCiAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgRGFydFR5cGUgb3RoZXJ3aXNlVHlwZTsKICAgICAgaWYgKGVsZW1lbnQub3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgICBvdGhlcndpc2VUeXBlID0gaW5mZXJFbGVtZW50KAogICAgICAgICAgICBlbGVtZW50Lm90aGVyd2lzZSwKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgaW5mZXJyZWRUeXBlQXJndW1lbnQsCiAgICAgICAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCwKICAgICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG90aGVyd2lzZVR5cGUgPT0gbnVsbAogICAgICAgICAgPyB0aGVuVHlwZQogICAgICAgICAgOiBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgICAuZ2V0U3RhbmRhcmRVcHBlckJvdW5kKHRoZW5UeXBlLCBvdGhlcndpc2VUeXBlKTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpcyBGb3JFbGVtZW50KSB7CiAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiBpbiBlbGVtZW50LnZhcmlhYmxlcykgewogICAgICAgIGlmIChkZWNsYXJhdGlvbi5uYW1lID09IG51bGwpIHsKICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIsCiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlLCBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChkZWNsYXJhdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChlbGVtZW50LmNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgICBlbGVtZW50LmNvbmRpdGlvbiwKICAgICAgICAgICAgaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogZmFsc2UpOwogICAgICB9CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGVsZW1lbnQudXBkYXRlcykgewogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihleHByZXNzaW9uLCBjb25zdCBVbmtub3duVHlwZSgpLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZmVyRWxlbWVudChlbGVtZW50LmJvZHksIGVsZW1lbnQsIGluZmVycmVkVHlwZUFyZ3VtZW50LAogICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywgaW5mZXJlbmNlTmVlZGVkLCB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpcyBGb3JJbkVsZW1lbnQpIHsKICAgICAgaWYgKGVsZW1lbnQudmFyaWFibGUubmFtZSA9PSBudWxsKSB7CiAgICAgICAgaGFuZGxlRm9ySW5XaXRob3V0VmFyaWFibGUoCiAgICAgICAgICAgIGVsZW1lbnQudmFyaWFibGUsIGVsZW1lbnQuaXRlcmFibGUsIGVsZW1lbnQucHJvbG9ndWUsCiAgICAgICAgICAgIGlzQXN5bmM6IGVsZW1lbnQuaXNBc3luYyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGxlRm9ySW5EZWNsYXJpbmdWYXJpYWJsZSgKICAgICAgICAgICAgZWxlbWVudC52YXJpYWJsZSwgZWxlbWVudC5pdGVyYWJsZSwgZWxlbWVudC5wcm9sb2d1ZSwKICAgICAgICAgICAgaXNBc3luYzogZWxlbWVudC5pc0FzeW5jKTsKICAgICAgfQogICAgICBpZiAoZWxlbWVudC5wcm9ibGVtICE9IG51bGwpIHsKICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oZWxlbWVudC5wcm9ibGVtLCBjb25zdCBVbmtub3duVHlwZSgpLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZmVyRWxlbWVudChlbGVtZW50LmJvZHksIGVsZW1lbnQsIGluZmVycmVkVHlwZUFyZ3VtZW50LAogICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywgaW5mZXJlbmNlTmVlZGVkLCB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgIH0gZWxzZSB7CiAgICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGVsZW1lbnQsIGluZmVycmVkVHlwZUFyZ3VtZW50LCBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICBpZiAoaW5mZXJyZWRUeXBlQXJndW1lbnQgaXMhIFVua25vd25UeXBlKSB7CiAgICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgICAgaW5mZXJyZWRUeXBlQXJndW1lbnQsIGluZmVycmVkVHlwZSwgZWxlbWVudCwgZWxlbWVudC5maWxlT2Zmc2V0LAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBpbmZlcnJlZFR5cGVBcmd1bWVudCBpcyBWb2lkVHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZmVycmVkVHlwZTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tFbGVtZW50KEV4cHJlc3Npb24gaXRlbSwgRXhwcmVzc2lvbiBwYXJlbnQsIERhcnRUeXBlIHR5cGVBcmd1bWVudCwKICAgICAgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4gaW5mZXJyZWRTcHJlYWRUeXBlcykgewogICAgaWYgKGl0ZW0gaXMgU3ByZWFkRWxlbWVudCkgewogICAgICBEYXJ0VHlwZSBzcHJlYWRUeXBlID0gaW5mZXJyZWRTcHJlYWRUeXBlc1tpdGVtLmV4cHJlc3Npb25dOwogICAgICBpZiAoc3ByZWFkVHlwZSBpcyBEeW5hbWljVHlwZSkgewogICAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MucmF3VHlwZSwKICAgICAgICAgICAgc3ByZWFkVHlwZSwgaXRlbS5leHByZXNzaW9uLCBpdGVtLmV4cHJlc3Npb24uZmlsZU9mZnNldCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXRlbSBpcyBJZkVsZW1lbnQpIHsKICAgICAgY2hlY2tFbGVtZW50KGl0ZW0udGhlbiwgaXRlbSwgdHlwZUFyZ3VtZW50LCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgICAgaWYgKGl0ZW0ub3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgICBjaGVja0VsZW1lbnQoaXRlbS5vdGhlcndpc2UsIGl0ZW0sIHR5cGVBcmd1bWVudCwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXRlbSBpcyBGb3JFbGVtZW50KSB7CiAgICAgIGlmIChpdGVtLmNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgICAgRGFydFR5cGUgY29uZGl0aW9uVHlwZSA9IGdldEluZmVycmVkVHlwZShpdGVtLmNvbmRpdGlvbiwgaW5mZXJyZXIpOwogICAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlLAogICAgICAgICAgICBjb25kaXRpb25UeXBlLCBpdGVtLmNvbmRpdGlvbiwgaXRlbS5jb25kaXRpb24uZmlsZU9mZnNldCk7CiAgICAgIH0KICAgICAgY2hlY2tFbGVtZW50KGl0ZW0uYm9keSwgaXRlbSwgdHlwZUFyZ3VtZW50LCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgIH0gZWxzZSBpZiAoaXRlbSBpcyBGb3JJbkVsZW1lbnQpIHsKICAgICAgY2hlY2tFbGVtZW50KGl0ZW0uYm9keSwgaXRlbSwgdHlwZUFyZ3VtZW50LCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIERvIG5vdGhpbmcuICBBc3NpZ25hYmlsaXR5IGNoZWNrcyBhcmUgZG9uZSBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuCiAgICB9CiAgfQoKICB2b2lkIHZpc2l0TGlzdExpdGVyYWxKdWRnbWVudCgKICAgICAgTGlzdExpdGVyYWxKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIGxpc3RDbGFzcyA9IGluZmVycmVyLmNvcmVUeXBlcy5saXN0Q2xhc3M7CiAgICB2YXIgbGlzdFR5cGUgPSBsaXN0Q2xhc3MudGhpc1R5cGU7CiAgICBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlQXJndW1lbnQ7CiAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlczsKICAgIExpc3Q8RGFydFR5cGU+IGFjdHVhbFR5cGVzOwogICAgYm9vbCBpbmZlcmVuY2VOZWVkZWQgPSBub2RlLnR5cGVBcmd1bWVudCBpcyBJbXBsaWNpdFR5cGVBcmd1bWVudDsKICAgIGJvb2wgdHlwZUNoZWNrc05lZWRlZCA9ICFpbmZlcnJlci5pc1RvcExldmVsOwogICAgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4gaW5mZXJyZWRTcHJlYWRUeXBlczsKICAgIGlmIChpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCkgewogICAgICBmb3JtYWxUeXBlcyA9IFtdOwogICAgICBhY3R1YWxUeXBlcyA9IFtdOwogICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzID0gbmV3IE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+LmlkZW50aXR5KCk7CiAgICB9CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIGluZmVycmVkVHlwZXMgPSBbY29uc3QgVW5rbm93blR5cGUoKV07CiAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZShsaXN0VHlwZSwKICAgICAgICAgIGxpc3RDbGFzcy50eXBlUGFyYW1ldGVycywgbnVsbCwgbnVsbCwgdHlwZUNvbnRleHQsIGluZmVycmVkVHlwZXMsCiAgICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCA9IGluZmVycmVkVHlwZXNbMF07CiAgICB9IGVsc2UgewogICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCA9IG5vZGUudHlwZUFyZ3VtZW50OwogICAgfQogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7ICsraSkgewogICAgICAgIERhcnRUeXBlIHR5cGUgPSBpbmZlckVsZW1lbnQoCiAgICAgICAgICAgIG5vZGUuZXhwcmVzc2lvbnNbaV0sCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50LAogICAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQsCiAgICAgICAgICAgIHR5cGVDaGVja3NOZWVkZWQpOwogICAgICAgIGFjdHVhbFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgICAgICBmb3JtYWxUeXBlcy5hZGQobGlzdFR5cGUudHlwZUFyZ3VtZW50c1swXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZSgKICAgICAgICAgIGxpc3RUeXBlLAogICAgICAgICAgbGlzdENsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgZm9ybWFsVHlwZXMsCiAgICAgICAgICBhY3R1YWxUeXBlcywKICAgICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgICAgaW5mZXJyZWRUeXBlcyk7CiAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50ID0gaW5mZXJyZWRUeXBlc1swXTsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoCiAgICAgICAgICBpbmZlcnJlci51cmksCiAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAndHlwZUFyZ3MnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3MoW2luZmVycmVkVHlwZUFyZ3VtZW50XSkpOwogICAgICBub2RlLnR5cGVBcmd1bWVudCA9IGluZmVycmVkVHlwZUFyZ3VtZW50OwogICAgfQogICAgaWYgKHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY2hlY2tFbGVtZW50KAogICAgICAgICAgICBub2RlLmV4cHJlc3Npb25zW2ldLCBub2RlLCBub2RlLnR5cGVBcmd1bWVudCwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgIH0KICAgIH0KICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gbmV3IEludGVyZmFjZVR5cGUobGlzdENsYXNzLCBbaW5mZXJyZWRUeXBlQXJndW1lbnRdKTsKICAgIGlmICghaW5mZXJyZXIuaXNUb3BMZXZlbCkgewogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gaW5mZXJyZXIubGlicmFyeTsKICAgICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbkxpc3RMaXRlcmFsKAogICAgICAgICAgICBub2RlLCBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQsIGluZmVycmVyLmhlbHBlci51cmksCiAgICAgICAgICAgIGluZmVycmVkOiB0cnVlKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHByZXNzaW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICB2YXIgYm9vbFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgICB2YXIgbGVmdCA9IG5vZGUubGVmdDsKICAgIHZhciByaWdodCA9IG5vZGUucmlnaHQ7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24obGVmdCwgYm9vbFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihyaWdodCwgYm9vbFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoYm9vbFR5cGUsIGdldEluZmVycmVkVHlwZShsZWZ0LCBpbmZlcnJlciksCiAgICAgICAgbm9kZS5sZWZ0LCBub2RlLmxlZnQuZmlsZU9mZnNldCk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKGJvb2xUeXBlLCBnZXRJbmZlcnJlZFR5cGUocmlnaHQsIGluZmVycmVyKSwKICAgICAgICBub2RlLnJpZ2h0LCBub2RlLnJpZ2h0LmZpbGVPZmZzZXQpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLyBDYWxjdWxhdGVzIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZSB0eXBlIG9mIGEgc3ByZWFkIG1hcCBlbnRyeSBvZiB0eXBlCiAgLy8gc3ByZWFkTWFwRW50cnlUeXBlIGFuZCBzdG9yZXMgdGhlbSBpbiBvdXRwdXQgaW4gcG9zaXRpb25zIG9mZnNldCBhbmQgb2Zmc2V0CiAgLy8gKyAxLiAgSWYgdGhlIHR5cGVzIGNhbid0IGJlIGNhbGN1bGF0ZWQsIGZvciBleGFtcGxlLCBpZiBzcHJlYWRNYXBFbnRyeVR5cGUKICAvLyBpcyBhIGZ1bmN0aW9uIHR5cGUsIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4gb3V0cHV0IGFyZSBwcmVzZXJ2ZWQuCiAgdm9pZCBzdG9yZVNwcmVhZE1hcEVudHJ5RWxlbWVudFR5cGVzKERhcnRUeXBlIHNwcmVhZE1hcEVudHJ5VHlwZSwKICAgICAgYm9vbCBpc051bGxBd2FyZSwgTGlzdDxEYXJ0VHlwZT4gb3V0cHV0LCBpbnQgb2Zmc2V0KSB7CiAgICBpZiAoc3ByZWFkTWFwRW50cnlUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgIC5nZXRUeXBlQXNJbnN0YW5jZU9mKHNwcmVhZE1hcEVudHJ5VHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLm1hcENsYXNzKTsKICAgICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgICAgb3V0cHV0W29mZnNldF0gPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgICBvdXRwdXRbb2Zmc2V0ICsgMV0gPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1sxXTsKICAgICAgfSBlbHNlIGlmIChzcHJlYWRNYXBFbnRyeVR5cGUuY2xhc3NOb2RlID09IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MgJiYKICAgICAgICAgIGlzTnVsbEF3YXJlKSB7CiAgICAgICAgb3V0cHV0W29mZnNldF0gPSBvdXRwdXRbb2Zmc2V0ICsgMV0gPSBzcHJlYWRNYXBFbnRyeVR5cGU7CiAgICAgIH0KICAgIH0KICAgIGlmIChzcHJlYWRNYXBFbnRyeVR5cGUgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgb3V0cHV0W29mZnNldF0gPSBvdXRwdXRbb2Zmc2V0ICsgMV0gPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogIH0KCiAgLy8gTm90ZSB0aGF0IGluZmVyTWFwRW50cnkgYWRkcyBleGFjdGx5IHR3byBlbGVtZW50cyB0byBhY3R1YWxUeXBlcyAtLSB0aGUKICAvLyBhY3R1YWwgdHlwZXMgb2YgdGhlIGtleSBhbmQgdGhlIHZhbHVlLiAgVGhlIHNhbWUgdGVjaG5pcXVlIGlzIHVzZWQgZm9yCiAgLy8gYWN0dWFsVHlwZXNGb3JTZXQsIG9ubHkgaW5mZXJNYXBFbnRyeSBhZGRzIGV4YWN0bHkgb25lIGVsZW1lbnQgdG8gdGhhdAogIC8vIGxpc3Q6IHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgaXRlcmFibGUgc3ByZWFkIGVsZW1lbnRzIGluIGNhc2UgdGhlIG1hcAogIC8vIGxpdGVyYWwgd2lsbCBiZSBkaXNhbWJpZ3VhdGVkIGFzIGEgc2V0IGxpdGVyYWwgbGF0ZXIuCiAgdm9pZCBpbmZlck1hcEVudHJ5KAogICAgICBNYXBFbnRyeSBlbnRyeSwKICAgICAgVHJlZU5vZGUgcGFyZW50LAogICAgICBEYXJ0VHlwZSBpbmZlcnJlZEtleVR5cGUsCiAgICAgIERhcnRUeXBlIGluZmVycmVkVmFsdWVUeXBlLAogICAgICBEYXJ0VHlwZSBzcHJlYWRDb250ZXh0LAogICAgICBMaXN0PERhcnRUeXBlPiBhY3R1YWxUeXBlcywKICAgICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgIGJvb2wgaW5mZXJlbmNlTmVlZGVkLAogICAgICBib29sIHR5cGVDaGVja3NOZWVkZWQpIHsKICAgIGlmIChlbnRyeSBpcyBTcHJlYWRNYXBFbnRyeSkgewogICAgICBEYXJ0VHlwZSBzcHJlYWRUeXBlID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgZW50cnkuZXhwcmVzc2lvbiwgc3ByZWFkQ29udGV4dCwgaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlc1tlbnRyeS5leHByZXNzaW9uXSA9IHNwcmVhZFR5cGU7CiAgICAgIGludCBsZW5ndGggPSBhY3R1YWxUeXBlcy5sZW5ndGg7CiAgICAgIGFjdHVhbFR5cGVzLmFkZChudWxsKTsKICAgICAgYWN0dWFsVHlwZXMuYWRkKG51bGwpOwogICAgICBzdG9yZVNwcmVhZE1hcEVudHJ5RWxlbWVudFR5cGVzKAogICAgICAgICAgc3ByZWFkVHlwZSwgZW50cnkuaXNOdWxsQXdhcmUsIGFjdHVhbFR5cGVzLCBsZW5ndGgpOwogICAgICBEYXJ0VHlwZSBhY3R1YWxLZXlUeXBlID0gYWN0dWFsVHlwZXNbbGVuZ3RoXTsKICAgICAgRGFydFR5cGUgYWN0dWFsVmFsdWVUeXBlID0gYWN0dWFsVHlwZXNbbGVuZ3RoICsgMV07CiAgICAgIERhcnRUeXBlIGFjdHVhbEVsZW1lbnRUeXBlID0KICAgICAgICAgIGdldFNwcmVhZEVsZW1lbnRUeXBlKHNwcmVhZFR5cGUsIGVudHJ5LmlzTnVsbEF3YXJlKTsKCiAgICAgIGlmICh0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgICAgaWYgKGFjdHVhbEtleVR5cGUgPT0gbnVsbCkgewogICAgICAgICAgaWYgKHNwcmVhZFR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgICAgICAgIHNwcmVhZFR5cGUuY2xhc3NOb2RlID09IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MgJiYKICAgICAgICAgICAgICAhZW50cnkuaXNOdWxsQXdhcmUpIHsKICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgIGVudHJ5LAogICAgICAgICAgICAgICAgbmV3IE1hcEVudHJ5KAogICAgICAgICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbmZlcnJlci5oZWxwZXIKICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbShtZXNzYWdlTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LCAxKSksCiAgICAgICAgICAgICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkpCiAgICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGVudHJ5LmZpbGVPZmZzZXQpOwogICAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxFbGVtZW50VHlwZSAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCB0aGUgZXJyb3IgaGVyZSwgaXQgbWlnaHQgYmUgYW4gYW1iaWd1b3VzIFNldC4gIFRoZQogICAgICAgICAgICAvLyBlcnJvciBpcyByZXBvcnRlZCBpbiBjaGVja01hcEVudHJ5IGlmIGl0J3MgZGlzYW1iaWd1YXRlZCBhcyBtYXAuCiAgICAgICAgICAgIGl0ZXJhYmxlU3ByZWFkVHlwZSA9IHNwcmVhZFR5cGU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgICAgICAgZW50cnksCiAgICAgICAgICAgICAgICBuZXcgTWFwRW50cnkoCiAgICAgICAgICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeVR5cGVNaXNtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHNwcmVhZFR5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpLAogICAgICAgICAgICAgICAgICAgIG5ldyBOdWxsTGl0ZXJhbCgpKQogICAgICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBlbnRyeS5maWxlT2Zmc2V0KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHNwcmVhZFR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgRXhwcmVzc2lvbiBrZXlFcnJvcjsKICAgICAgICAgIEV4cHJlc3Npb24gdmFsdWVFcnJvcjsKICAgICAgICAgIGlmICghaW5mZXJyZXIuaXNBc3NpZ25hYmxlKGluZmVycmVkS2V5VHlwZSwgYWN0dWFsS2V5VHlwZSkpIHsKICAgICAgICAgICAga2V5RXJyb3IgPSBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbEtleVR5cGUsIGluZmVycmVkS2V5VHlwZSksCiAgICAgICAgICAgICAgICAgICAgZW50cnkuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgIDEpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghaW5mZXJyZXIuaXNBc3NpZ25hYmxlKGluZmVycmVkVmFsdWVUeXBlLCBhY3R1YWxWYWx1ZVR5cGUpKSB7CiAgICAgICAgICAgIHZhbHVlRXJyb3IgPSBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2gKICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYWN0dWFsVmFsdWVUeXBlLCBpbmZlcnJlZFZhbHVlVHlwZSksCiAgICAgICAgICAgICAgICAgICAgZW50cnkuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgIDEpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChrZXlFcnJvciAhPSBudWxsIHx8IHZhbHVlRXJyb3IgIT0gbnVsbCkgewogICAgICAgICAgICBrZXlFcnJvciA/Pz0gbmV3IE51bGxMaXRlcmFsKCk7CiAgICAgICAgICAgIHZhbHVlRXJyb3IgPz89IG5ldyBOdWxsTGl0ZXJhbCgpOwogICAgICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgICAgICAgZW50cnksCiAgICAgICAgICAgICAgICBuZXcgTWFwRW50cnkoa2V5RXJyb3IsIHZhbHVlRXJyb3IpCiAgICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGVudHJ5LmZpbGVPZmZzZXQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gVXNlICdkeW5hbWljJyBmb3IgZXJyb3IgcmVjb3ZlcnkuCiAgICAgIGlmIChhY3R1YWxLZXlUeXBlID09IG51bGwpIHsKICAgICAgICBhY3R1YWxLZXlUeXBlID0gYWN0dWFsVHlwZXNbbGVuZ3RoXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgICAgYWN0dWFsVmFsdWVUeXBlID0gYWN0dWFsVHlwZXNbbGVuZ3RoICsgMV0gPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICB9CiAgICAgIC8vIFN0b3JlIHRoZSB0eXBlIGluIGNhc2Ugb2YgYW4gYW1iaWd1b3VzIFNldC4gIFVzZSAnZHluYW1pYycgZm9yIGVycm9yCiAgICAgIC8vIHJlY292ZXJ5LgogICAgICBhY3R1YWxUeXBlc0ZvclNldC5hZGQoYWN0dWFsRWxlbWVudFR5cGUgPz8gY29uc3QgRHluYW1pY1R5cGUoKSk7CgogICAgICBtYXBFbnRyeUNsYXNzID8/PQogICAgICAgICAgaW5mZXJyZXIuY29yZVR5cGVzLmluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnTWFwRW50cnknKTsKICAgICAgLy8gVE9ETyhkbWl0cnlhcyk6ICBIYW5kbGUgdGhlIGNhc2Ugb2YgYW4gYW1iaWd1b3VzIFNldC4KICAgICAgZW50cnkuZW50cnlUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgICBtYXBFbnRyeUNsYXNzLCA8RGFydFR5cGU+W2FjdHVhbEtleVR5cGUsIGFjdHVhbFZhbHVlVHlwZV0pOwoKICAgICAgYm9vbCBpc01hcCA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgLmlzU3VidHlwZU9mKHNwcmVhZFR5cGUsIGluZmVycmVyLmNvcmVUeXBlcy5tYXBDbGFzcy5yYXdUeXBlKTsKICAgICAgYm9vbCBpc0l0ZXJhYmxlID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAuaXNTdWJ0eXBlT2Yoc3ByZWFkVHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MucmF3VHlwZSk7CiAgICAgIGlmIChpc01hcCAmJiAhaXNJdGVyYWJsZSkgewogICAgICAgIG1hcFNwcmVhZE9mZnNldCA9IGVudHJ5LmZpbGVPZmZzZXQ7CiAgICAgIH0KICAgICAgaWYgKCFpc01hcCAmJiBpc0l0ZXJhYmxlKSB7CiAgICAgICAgaXRlcmFibGVTcHJlYWRPZmZzZXQgPSBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQ7CiAgICAgIH0KCiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAoZW50cnkgaXMgSWZNYXBFbnRyeSkgewogICAgICBEYXJ0VHlwZSBib29sVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgICAgRGFydFR5cGUgY29uZGl0aW9uVHlwZSA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGVudHJ5LmNvbmRpdGlvbiwgYm9vbFR5cGUsIHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBmYWxzZSk7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBib29sVHlwZSwgY29uZGl0aW9uVHlwZSwgZW50cnkuY29uZGl0aW9uLCBlbnRyeS5jb25kaXRpb24uZmlsZU9mZnNldCk7CiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHJlY3Vyc2l2ZSBpbnZvY2F0aW9uIG9mIGluZmVyTWFwRW50cnkgd2lsbCBhZGQgdHdvIHR5cGVzCiAgICAgIC8vIHRvIGFjdHVhbFR5cGVzOyB0aGV5IGFyZSB0aGUgYWN0dWFsIHR5cGVzIG9mIHRoZSBjdXJyZW50IGludm9jYXRpb24gaWYKICAgICAgLy8gdGhlICdlbHNlJyBicmFuY2ggaXMgZW1wdHkuCiAgICAgIGluZmVyTWFwRW50cnkoCiAgICAgICAgICBlbnRyeS50aGVuLAogICAgICAgICAgZW50cnksCiAgICAgICAgICBpbmZlcnJlZEtleVR5cGUsCiAgICAgICAgICBpbmZlcnJlZFZhbHVlVHlwZSwKICAgICAgICAgIHNwcmVhZENvbnRleHQsCiAgICAgICAgICBhY3R1YWxUeXBlcywKICAgICAgICAgIGFjdHVhbFR5cGVzRm9yU2V0LAogICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCwKICAgICAgICAgIHR5cGVDaGVja3NOZWVkZWQpOwogICAgICBpZiAoZW50cnkub3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgICAvLyBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIHR5cGVzIGFkZGVkIGluIHRoZSByZWN1cnNpdmUgY2FsbCB0bwogICAgICAgIC8vIGluZmVyTWFwRW50cnkuCiAgICAgICAgRGFydFR5cGUgYWN0dWFsVmFsdWVUeXBlID0gYWN0dWFsVHlwZXMucmVtb3ZlTGFzdCgpOwogICAgICAgIERhcnRUeXBlIGFjdHVhbEtleVR5cGUgPSBhY3R1YWxUeXBlcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgRGFydFR5cGUgYWN0dWFsVHlwZUZvclNldCA9IGFjdHVhbFR5cGVzRm9yU2V0LnJlbW92ZUxhc3QoKTsKICAgICAgICBpbmZlck1hcEVudHJ5KAogICAgICAgICAgICBlbnRyeS5vdGhlcndpc2UsCiAgICAgICAgICAgIGVudHJ5LAogICAgICAgICAgICBpbmZlcnJlZEtleVR5cGUsCiAgICAgICAgICAgIGluZmVycmVkVmFsdWVUeXBlLAogICAgICAgICAgICBzcHJlYWRDb250ZXh0LAogICAgICAgICAgICBhY3R1YWxUeXBlcywKICAgICAgICAgICAgYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgICAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCwKICAgICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICAgICAgaW50IGxlbmd0aCA9IGFjdHVhbFR5cGVzLmxlbmd0aDsKICAgICAgICBhY3R1YWxUeXBlc1tsZW5ndGggLSAyXSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuZ2V0U3RhbmRhcmRVcHBlckJvdW5kKGFjdHVhbEtleVR5cGUsIGFjdHVhbFR5cGVzW2xlbmd0aCAtIDJdKTsKICAgICAgICBhY3R1YWxUeXBlc1tsZW5ndGggLSAxXSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuZ2V0U3RhbmRhcmRVcHBlckJvdW5kKGFjdHVhbFZhbHVlVHlwZSwgYWN0dWFsVHlwZXNbbGVuZ3RoIC0gMV0pOwogICAgICAgIGludCBsZW5ndGhGb3JTZXQgPSBhY3R1YWxUeXBlc0ZvclNldC5sZW5ndGg7CiAgICAgICAgYWN0dWFsVHlwZXNGb3JTZXRbbGVuZ3RoRm9yU2V0IC0gMV0gPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgLmdldFN0YW5kYXJkVXBwZXJCb3VuZCgKICAgICAgICAgICAgICAgIGFjdHVhbFR5cGVGb3JTZXQsIGFjdHVhbFR5cGVzRm9yU2V0W2xlbmd0aEZvclNldCAtIDFdKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKGVudHJ5IGlzIEZvck1hcEVudHJ5KSB7CiAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiBpbiBlbnRyeS52YXJpYWJsZXMpIHsKICAgICAgICBpZiAoZGVjbGFyYXRpb24ubmFtZSA9PSBudWxsKSB7CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyLAogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24udHlwZSwgaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQoZGVjbGFyYXRpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZW50cnkuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICAgIGVudHJ5LmNvbmRpdGlvbiwKICAgICAgICAgICAgaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogZmFsc2UpOwogICAgICB9CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGVudHJ5LnVwZGF0ZXMpIHsKICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oZXhwcmVzc2lvbiwgY29uc3QgVW5rbm93blR5cGUoKSwKICAgICAgICAgICAgaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICB9CiAgICAgIC8vIEFjdHVhbCB0eXBlcyBhcmUgYWRkZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsLgogICAgICByZXR1cm4gaW5mZXJNYXBFbnRyeSgKICAgICAgICAgIGVudHJ5LmJvZHksCiAgICAgICAgICBlbnRyeSwKICAgICAgICAgIGluZmVycmVkS2V5VHlwZSwKICAgICAgICAgIGluZmVycmVkVmFsdWVUeXBlLAogICAgICAgICAgc3ByZWFkQ29udGV4dCwKICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICB9IGVsc2UgaWYgKGVudHJ5IGlzIEZvckluTWFwRW50cnkpIHsKICAgICAgaWYgKGVudHJ5LnZhcmlhYmxlLm5hbWUgPT0gbnVsbCkgewogICAgICAgIGhhbmRsZUZvckluV2l0aG91dFZhcmlhYmxlKAogICAgICAgICAgICBlbnRyeS52YXJpYWJsZSwgZW50cnkuaXRlcmFibGUsIGVudHJ5LnByb2xvZ3VlLAogICAgICAgICAgICBpc0FzeW5jOiBlbnRyeS5pc0FzeW5jKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBoYW5kbGVGb3JJbkRlY2xhcmluZ1ZhcmlhYmxlKAogICAgICAgICAgICBlbnRyeS52YXJpYWJsZSwgZW50cnkuaXRlcmFibGUsIGVudHJ5LnByb2xvZ3VlLAogICAgICAgICAgICBpc0FzeW5jOiBlbnRyeS5pc0FzeW5jKTsKICAgICAgfQogICAgICBpZiAoZW50cnkucHJvYmxlbSAhPSBudWxsKSB7CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGVudHJ5LnByb2JsZW0sIGNvbnN0IFVua25vd25UeXBlKCksCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgfQogICAgICAvLyBBY3R1YWwgdHlwZXMgYXJlIGFkZGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbC4KICAgICAgaW5mZXJNYXBFbnRyeSgKICAgICAgICAgIGVudHJ5LmJvZHksCiAgICAgICAgICBlbnRyeSwKICAgICAgICAgIGluZmVycmVkS2V5VHlwZSwKICAgICAgICAgIGluZmVycmVkVmFsdWVUeXBlLAogICAgICAgICAgc3ByZWFkQ29udGV4dCwKICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICB9IGVsc2UgewogICAgICBEYXJ0VHlwZSBrZXlUeXBlID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgZW50cnkua2V5LCBpbmZlcnJlZEtleVR5cGUsIHRydWUsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgRGFydFR5cGUgdmFsdWVUeXBlID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgZW50cnkudmFsdWUsIGluZmVycmVkVmFsdWVUeXBlLCB0cnVlLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBpbmZlcnJlZEtleVR5cGUsIGtleVR5cGUsIGVudHJ5LmtleSwgZW50cnkua2V5LmZpbGVPZmZzZXQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBpbmZlcnJlZEtleVR5cGUgaXMgVm9pZFR5cGUpOwogICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgaW5mZXJyZWRWYWx1ZVR5cGUsIHZhbHVlVHlwZSwgZW50cnkudmFsdWUsIGVudHJ5LnZhbHVlLmZpbGVPZmZzZXQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBpbmZlcnJlZFZhbHVlVHlwZSBpcyBWb2lkVHlwZSk7CiAgICAgIGFjdHVhbFR5cGVzLmFkZChrZXlUeXBlKTsKICAgICAgYWN0dWFsVHlwZXMuYWRkKHZhbHVlVHlwZSk7CiAgICAgIC8vIFVzZSAnZHluYW1pYycgZm9yIGVycm9yIHJlY292ZXJ5LgogICAgICBhY3R1YWxUeXBlc0ZvclNldC5hZGQoY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICAgIG1hcEVudHJ5T2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldDsKICAgICAgcmV0dXJuOwogICAgfQogIH0KCiAgdm9pZCBjaGVja01hcEVudHJ5KAogICAgICBNYXBFbnRyeSBlbnRyeSwKICAgICAgVHJlZU5vZGUgcGFyZW50LAogICAgICBFeHByZXNzaW9uIGNhY2hlZEtleSwKICAgICAgRXhwcmVzc2lvbiBjYWNoZWRWYWx1ZSwKICAgICAgRGFydFR5cGUga2V5VHlwZSwKICAgICAgRGFydFR5cGUgdmFsdWVUeXBlLAogICAgICBNYXA8VHJlZU5vZGUsIERhcnRUeXBlPiBpbmZlcnJlZFNwcmVhZFR5cGVzKSB7CiAgICAvLyBJdCdzIGRpc2FtYmlndWF0ZWQgYXMgYSBtYXAgbGl0ZXJhbC4KICAgIGlmIChpdGVyYWJsZVNwcmVhZE9mZnNldCAhPSBudWxsKSB7CiAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICBlbnRyeSwKICAgICAgICAgIG5ldyBNYXBFbnRyeSgKICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoaXRlcmFibGVTcHJlYWRUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhYmxlU3ByZWFkT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgMSkpLAogICAgICAgICAgICAgIG5ldyBOdWxsTGl0ZXJhbCgpKSk7CiAgICB9CiAgICBpZiAoZW50cnkgaXMgU3ByZWFkTWFwRW50cnkpIHsKICAgICAgRGFydFR5cGUgc3ByZWFkVHlwZSA9IGluZmVycmVkU3ByZWFkVHlwZXNbZW50cnkuZXhwcmVzc2lvbl07CiAgICAgIGlmIChzcHJlYWRUeXBlIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShpbmZlcnJlci5jb3JlVHlwZXMubWFwQ2xhc3MucmF3VHlwZSwKICAgICAgICAgICAgc3ByZWFkVHlwZSwgZW50cnkuZXhwcmVzc2lvbiwgZW50cnkuZXhwcmVzc2lvbi5maWxlT2Zmc2V0KTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlbnRyeSBpcyBJZk1hcEVudHJ5KSB7CiAgICAgIGNoZWNrTWFwRW50cnkoZW50cnkudGhlbiwgZW50cnksIGNhY2hlZEtleSwgY2FjaGVkVmFsdWUsIGtleVR5cGUsCiAgICAgICAgICB2YWx1ZVR5cGUsIGluZmVycmVkU3ByZWFkVHlwZXMpOwogICAgICBpZiAoZW50cnkub3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgICBjaGVja01hcEVudHJ5KGVudHJ5Lm90aGVyd2lzZSwgZW50cnksIGNhY2hlZEtleSwgY2FjaGVkVmFsdWUsIGtleVR5cGUsCiAgICAgICAgICAgIHZhbHVlVHlwZSwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZW50cnkgaXMgRm9yTWFwRW50cnkpIHsKICAgICAgaWYgKGVudHJ5LmNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgICAgRGFydFR5cGUgY29uZGl0aW9uVHlwZSA9IGdldEluZmVycmVkVHlwZShlbnRyeS5jb25kaXRpb24sIGluZmVycmVyKTsKICAgICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZSwKICAgICAgICAgICAgY29uZGl0aW9uVHlwZSwgZW50cnkuY29uZGl0aW9uLCBlbnRyeS5jb25kaXRpb24uZmlsZU9mZnNldCk7CiAgICAgIH0KICAgICAgY2hlY2tNYXBFbnRyeShlbnRyeS5ib2R5LCBlbnRyeSwgY2FjaGVkS2V5LCBjYWNoZWRWYWx1ZSwga2V5VHlwZSwKICAgICAgICAgIHZhbHVlVHlwZSwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICB9IGVsc2UgaWYgKGVudHJ5IGlzIEZvckluTWFwRW50cnkpIHsKICAgICAgY2hlY2tNYXBFbnRyeShlbnRyeS5ib2R5LCBlbnRyeSwgY2FjaGVkS2V5LCBjYWNoZWRWYWx1ZSwga2V5VHlwZSwKICAgICAgICAgIHZhbHVlVHlwZSwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICB9IGVsc2UgewogICAgICAvLyBEbyBub3RoaW5nLiAgQXNzaWduYWJpbGl0eSBjaGVja3MgYXJlIGRvbmUgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgogICAgfQogIH0KCiAgdm9pZCB2aXNpdE1hcExpdGVyYWxKdWRnbWVudChNYXBMaXRlcmFsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciBtYXBDbGFzcyA9IGluZmVycmVyLmNvcmVUeXBlcy5tYXBDbGFzczsKICAgIHZhciBtYXBUeXBlID0gbWFwQ2xhc3MudGhpc1R5cGU7CiAgICBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzOwogICAgRGFydFR5cGUgaW5mZXJyZWRLZXlUeXBlOwogICAgRGFydFR5cGUgaW5mZXJyZWRWYWx1ZVR5cGU7CiAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlczsKICAgIExpc3Q8RGFydFR5cGU+IGFjdHVhbFR5cGVzOwogICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXNGb3JTZXQ7CiAgICBhc3NlcnQoKG5vZGUua2V5VHlwZSBpcyBJbXBsaWNpdFR5cGVBcmd1bWVudCkgPT0KICAgICAgICAobm9kZS52YWx1ZVR5cGUgaXMgSW1wbGljaXRUeXBlQXJndW1lbnQpKTsKICAgIGJvb2wgaW5mZXJlbmNlTmVlZGVkID0gbm9kZS5rZXlUeXBlIGlzIEltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgYm9vbCB0eXBlQ29udGV4dElzTWFwID0gbm9kZS5rZXlUeXBlIGlzISBJbXBsaWNpdFR5cGVBcmd1bWVudDsKICAgIGJvb2wgdHlwZUNvbnRleHRJc0l0ZXJhYmxlID0gZmFsc2U7CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwgJiYgaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIC8vIEFtYmlndW91cyBzZXQvbWFwIGxpdGVyYWwKICAgICAgRGFydFR5cGUgY29udGV4dCA9CiAgICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQudW5mdXR1cmVUeXBlKHR5cGVDb250ZXh0KTsKICAgICAgaWYgKGNvbnRleHQgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIHR5cGVDb250ZXh0SXNNYXAgPSB0eXBlQ29udGV4dElzTWFwIHx8CiAgICAgICAgICAgIGluZmVycmVyLmNsYXNzSGllcmFyY2h5CiAgICAgICAgICAgICAgICAuaXNTdWJ0eXBlT2YoY29udGV4dC5jbGFzc05vZGUsIGluZmVycmVyLmNvcmVUeXBlcy5tYXBDbGFzcyk7CiAgICAgICAgdHlwZUNvbnRleHRJc0l0ZXJhYmxlID0gdHlwZUNvbnRleHRJc0l0ZXJhYmxlIHx8CiAgICAgICAgICAgIGluZmVycmVyLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKAogICAgICAgICAgICAgICAgY29udGV4dC5jbGFzc05vZGUsIGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKTsKICAgICAgICBpZiAobm9kZS5lbnRyaWVzLmlzRW1wdHkgJiYKICAgICAgICAgICAgdHlwZUNvbnRleHRJc0l0ZXJhYmxlICYmCiAgICAgICAgICAgICF0eXBlQ29udGV4dElzTWFwKSB7CiAgICAgICAgICAvLyBTZXQgbGl0ZXJhbAogICAgICAgICAgU2V0TGl0ZXJhbEp1ZGdtZW50IHNldExpdGVyYWwgPSBuZXcgU2V0TGl0ZXJhbEp1ZGdtZW50KFtdLAogICAgICAgICAgICAgIHR5cGVBcmd1bWVudDogY29uc3QgSW1wbGljaXRUeXBlQXJndW1lbnQoKSwgaXNDb25zdDogbm9kZS5pc0NvbnN0KQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQ7CiAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgc2V0TGl0ZXJhbCk7CiAgICAgICAgICB2aXNpdFNldExpdGVyYWxKdWRnbWVudChzZXRMaXRlcmFsLCB0eXBlQ29udGV4dCk7CiAgICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IHNldExpdGVyYWwuaW5mZXJyZWRUeXBlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYm9vbCB0eXBlQ2hlY2tzTmVlZGVkID0gIWluZmVycmVyLmlzVG9wTGV2ZWw7CiAgICBNYXA8VHJlZU5vZGUsIERhcnRUeXBlPiBpbmZlcnJlZFNwcmVhZFR5cGVzOwogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvcm1hbFR5cGVzID0gW107CiAgICAgIGFjdHVhbFR5cGVzID0gW107CiAgICAgIGFjdHVhbFR5cGVzRm9yU2V0ID0gW107CiAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMgPSBuZXcgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4uaWRlbnRpdHkoKTsKICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgaW5mZXJyZWRUeXBlcyA9IFtjb25zdCBVbmtub3duVHlwZSgpLCBjb25zdCBVbmtub3duVHlwZSgpXTsKICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKG1hcFR5cGUsCiAgICAgICAgICBtYXBDbGFzcy50eXBlUGFyYW1ldGVycywgbnVsbCwgbnVsbCwgdHlwZUNvbnRleHQsIGluZmVycmVkVHlwZXMsCiAgICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgICBpbmZlcnJlZEtleVR5cGUgPSBpbmZlcnJlZFR5cGVzWzBdOwogICAgICBpbmZlcnJlZFZhbHVlVHlwZSA9IGluZmVycmVkVHlwZXNbMV07CiAgICB9IGVsc2UgewogICAgICBpbmZlcnJlZEtleVR5cGUgPSBub2RlLmtleVR5cGU7CiAgICAgIGluZmVycmVkVmFsdWVUeXBlID0gbm9kZS52YWx1ZVR5cGU7CiAgICB9CiAgICBMaXN0PEV4cHJlc3Npb24+IGNhY2hlZEtleXMgPSBuZXcgTGlzdChub2RlLmVudHJpZXMubGVuZ3RoKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gY2FjaGVkVmFsdWVzID0gbmV3IExpc3Qobm9kZS5lbnRyaWVzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZW50cmllcy5sZW5ndGg7IGkrKykgewogICAgICBNYXBFbnRyeSBlbnRyeSA9IG5vZGUuZW50cmllc1tpXTsKICAgICAgaWYgKGVudHJ5IGlzISBDb250cm9sRmxvd01hcEVudHJ5KSB7CiAgICAgICAgY2FjaGVkS2V5c1tpXSA9IG5vZGUuZW50cmllc1tpXS5rZXk7CiAgICAgICAgY2FjaGVkVmFsdWVzW2ldID0gbm9kZS5lbnRyaWVzW2ldLnZhbHVlOwogICAgICB9CiAgICB9CiAgICBib29sIGhhc01hcEVudHJ5ID0gZmFsc2U7CiAgICBib29sIGhhc01hcFNwcmVhZCA9IGZhbHNlOwogICAgYm9vbCBoYXNJdGVyYWJsZVNwcmVhZCA9IGZhbHNlOwogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIG1hcEVudHJ5T2Zmc2V0ID0gbnVsbDsKICAgICAgbWFwU3ByZWFkT2Zmc2V0ID0gbnVsbDsKICAgICAgaXRlcmFibGVTcHJlYWRPZmZzZXQgPSBudWxsOwogICAgICBpdGVyYWJsZVNwcmVhZFR5cGUgPSBudWxsOwogICAgICBEYXJ0VHlwZSBzcHJlYWRUeXBlQ29udGV4dCA9IGNvbnN0IFVua25vd25UeXBlKCk7CiAgICAgIGlmICh0eXBlQ29udGV4dElzSXRlcmFibGUgJiYgIXR5cGVDb250ZXh0SXNNYXApIHsKICAgICAgICBzcHJlYWRUeXBlQ29udGV4dCA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlQ29udGV4dCwgaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MpOwogICAgICB9IGVsc2UgaWYgKCF0eXBlQ29udGV4dElzSXRlcmFibGUgJiYgdHlwZUNvbnRleHRJc01hcCkgewogICAgICAgIHNwcmVhZFR5cGVDb250ZXh0ID0gbmV3IEludGVyZmFjZVR5cGUoaW5mZXJyZXIuY29yZVR5cGVzLm1hcENsYXNzLAogICAgICAgICAgICA8RGFydFR5cGU+W2luZmVycmVkS2V5VHlwZSwgaW5mZXJyZWRWYWx1ZVR5cGVdKTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZW50cmllcy5sZW5ndGg7ICsraSkgewogICAgICAgIE1hcEVudHJ5IGVudHJ5ID0gbm9kZS5lbnRyaWVzW2ldOwogICAgICAgIGluZmVyTWFwRW50cnkoCiAgICAgICAgICAgIGVudHJ5LAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICBpbmZlcnJlZEtleVR5cGUsCiAgICAgICAgICAgIGluZmVycmVkVmFsdWVUeXBlLAogICAgICAgICAgICBzcHJlYWRUeXBlQ29udGV4dCwKICAgICAgICAgICAgYWN0dWFsVHlwZXMsCiAgICAgICAgICAgIGFjdHVhbFR5cGVzRm9yU2V0LAogICAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQsCiAgICAgICAgICAgIHR5cGVDaGVja3NOZWVkZWQpOwogICAgICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgICAgIGZvcm1hbFR5cGVzLmFkZChtYXBUeXBlLnR5cGVBcmd1bWVudHNbMF0pOwogICAgICAgICAgZm9ybWFsVHlwZXMuYWRkKG1hcFR5cGUudHlwZUFyZ3VtZW50c1sxXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGhhc01hcEVudHJ5ID0gbWFwRW50cnlPZmZzZXQgIT0gbnVsbDsKICAgICAgaGFzTWFwU3ByZWFkID0gbWFwU3ByZWFkT2Zmc2V0ICE9IG51bGw7CiAgICAgIGhhc0l0ZXJhYmxlU3ByZWFkID0gaXRlcmFibGVTcHJlYWRPZmZzZXQgIT0gbnVsbDsKICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgYm9vbCBjYW5CZVNldCA9ICFoYXNNYXBTcHJlYWQgJiYgIWhhc01hcEVudHJ5ICYmICF0eXBlQ29udGV4dElzTWFwOwogICAgICBib29sIGNhbkJlTWFwID0gIWhhc0l0ZXJhYmxlU3ByZWFkICYmICF0eXBlQ29udGV4dElzSXRlcmFibGU7CiAgICAgIGlmIChjYW5CZVNldCAmJiAhY2FuQmVNYXApIHsKICAgICAgICBMaXN0PEV4cHJlc3Npb24+IHNldEVsZW1lbnRzID0gPEV4cHJlc3Npb24+W107CiAgICAgICAgTGlzdDxEYXJ0VHlwZT4gZm9ybWFsVHlwZXNGb3JTZXQgPSA8RGFydFR5cGU+W107CiAgICAgICAgSW50ZXJmYWNlVHlwZSBzZXRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLnNldENsYXNzLnRoaXNUeXBlOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5lbnRyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBzZXRFbGVtZW50cy5hZGQoY29udmVydFRvRWxlbWVudChub2RlLmVudHJpZXNbaV0sIGluZmVycmVyLmhlbHBlcikpOwogICAgICAgICAgZm9ybWFsVHlwZXNGb3JTZXQuYWRkKHNldFR5cGUudHlwZUFyZ3VtZW50c1swXSk7CiAgICAgICAgfQoKICAgICAgICBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzRm9yU2V0ID0gPERhcnRUeXBlPltjb25zdCBVbmtub3duVHlwZSgpXTsKICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUoCiAgICAgICAgICAgIHNldFR5cGUsCiAgICAgICAgICAgIGluZmVycmVyLmNvcmVUeXBlcy5zZXRDbGFzcy50eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgICAgIGluZmVycmVkVHlwZXNGb3JTZXQsCiAgICAgICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICAgICAgICBpbmZlcnJlci5jb3JlVHlwZXMuc2V0Q2xhc3MudGhpc1R5cGUsCiAgICAgICAgICAgIGluZmVycmVyLmNvcmVUeXBlcy5zZXRDbGFzcy50eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgZm9ybWFsVHlwZXNGb3JTZXQsCiAgICAgICAgICAgIGFjdHVhbFR5cGVzRm9yU2V0LAogICAgICAgICAgICB0eXBlQ29udGV4dCwKICAgICAgICAgICAgaW5mZXJyZWRUeXBlc0ZvclNldCk7CiAgICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlQXJndW1lbnQgPSBpbmZlcnJlZFR5cGVzRm9yU2V0WzBdOwogICAgICAgIGluZmVycmVyLmluc3RydW1lbnRhdGlvbj8ucmVjb3JkKAogICAgICAgICAgICBpbmZlcnJlci51cmksCiAgICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICAgICAgJ3R5cGVBcmdzJywKICAgICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3MoW2luZmVycmVkVHlwZUFyZ3VtZW50XSkpOwoKICAgICAgICBTZXRMaXRlcmFsSnVkZ21lbnQgc2V0TGl0ZXJhbCA9IG5ldyBTZXRMaXRlcmFsSnVkZ21lbnQoc2V0RWxlbWVudHMsCiAgICAgICAgICAgIHR5cGVBcmd1bWVudDogaW5mZXJyZWRUeXBlQXJndW1lbnQsIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG5vZGUuZmlsZU9mZnNldDsKICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgc2V0TGl0ZXJhbCk7CiAgICAgICAgaWYgKHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2V0TGl0ZXJhbC5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjaGVja0VsZW1lbnQoc2V0TGl0ZXJhbC5leHByZXNzaW9uc1tpXSwgc2V0TGl0ZXJhbCwKICAgICAgICAgICAgICAgIHNldExpdGVyYWwudHlwZUFyZ3VtZW50LCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gc2V0TGl0ZXJhbC5pbmZlcnJlZFR5cGUgPQogICAgICAgICAgICBuZXcgSW50ZXJmYWNlVHlwZShpbmZlcnJlci5jb3JlVHlwZXMuc2V0Q2xhc3MsIGluZmVycmVkVHlwZXNGb3JTZXQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoY2FuQmVTZXQgJiYgY2FuQmVNYXAgJiYgbm9kZS5lbnRyaWVzLmlzTm90RW1wdHkpIHsKICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbmZlcnJlci5oZWxwZXIKICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0obWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbiwKICAgICAgICAgICAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsIDEpKSk7CiAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBCb3R0b21UeXBlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghY2FuQmVTZXQgJiYgIWNhbkJlTWFwKSB7CiAgICAgICAgaWYgKCFpbmZlcnJlci5pc1RvcExldmVsKSB7CiAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0obWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVBbWJpZ3VvdXNJbmZvcm1hdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwgMSkpKTsKICAgICAgICB9CiAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBCb3R0b21UeXBlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZSgKICAgICAgICAgIG1hcFR5cGUsCiAgICAgICAgICBtYXBDbGFzcy50eXBlUGFyYW1ldGVycywKICAgICAgICAgIGZvcm1hbFR5cGVzLAogICAgICAgICAgYWN0dWFsVHlwZXMsCiAgICAgICAgICB0eXBlQ29udGV4dCwKICAgICAgICAgIGluZmVycmVkVHlwZXMpOwogICAgICBpbmZlcnJlZEtleVR5cGUgPSBpbmZlcnJlZFR5cGVzWzBdOwogICAgICBpbmZlcnJlZFZhbHVlVHlwZSA9IGluZmVycmVkVHlwZXNbMV07CiAgICAgIGluZmVycmVyLmluc3RydW1lbnRhdGlvbj8ucmVjb3JkKAogICAgICAgICAgaW5mZXJyZXIudXJpLAogICAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgICAgJ3R5cGVBcmdzJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGVBcmdzKAogICAgICAgICAgICAgIFtpbmZlcnJlZEtleVR5cGUsIGluZmVycmVkVmFsdWVUeXBlXSkpOwogICAgICBub2RlLmtleVR5cGUgPSBpbmZlcnJlZEtleVR5cGU7CiAgICAgIG5vZGUudmFsdWVUeXBlID0gaW5mZXJyZWRWYWx1ZVR5cGU7CiAgICB9CiAgICBpZiAodHlwZUNoZWNrc05lZWRlZCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZW50cmllcy5sZW5ndGg7ICsraSkgewogICAgICAgIGNoZWNrTWFwRW50cnkobm9kZS5lbnRyaWVzW2ldLCBub2RlLCBjYWNoZWRLZXlzW2ldLCBjYWNoZWRWYWx1ZXNbaV0sCiAgICAgICAgICAgIG5vZGUua2V5VHlwZSwgbm9kZS52YWx1ZVR5cGUsIGluZmVycmVkU3ByZWFkVHlwZXMpOwogICAgICB9CiAgICB9CiAgICBub2RlLmluZmVycmVkVHlwZSA9CiAgICAgICAgbmV3IEludGVyZmFjZVR5cGUobWFwQ2xhc3MsIFtpbmZlcnJlZEtleVR5cGUsIGluZmVycmVkVmFsdWVUeXBlXSk7CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGluZmVycmVyLmxpYnJhcnk7CiAgICAgIC8vIEVpdGhlciBib3RoIFtfZGVjbGFyZWRLZXlUeXBlXSBhbmQgW19kZWNsYXJlZFZhbHVlVHlwZV0gYXJlIG9taXR0ZWQgb3IKICAgICAgLy8gbm9uZSBvZiB0aGVtLCBzbyB3ZSBtYXkganVzdCBjaGVjayBvbmUuCiAgICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5NYXBMaXRlcmFsKAogICAgICAgICAgICBub2RlLCBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQsIGluZmVycmVyLmhlbHBlci51cmksCiAgICAgICAgICAgIGluZmVycmVkOiB0cnVlKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB2aXNpdE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpZiAobm9kZS5uYW1lLm5hbWUgPT0gJ3VuYXJ5LScgJiYKICAgICAgICBub2RlLmFyZ3VtZW50cy50eXBlcy5pc0VtcHR5ICYmCiAgICAgICAgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5pc0VtcHR5ICYmCiAgICAgICAgbm9kZS5hcmd1bWVudHMubmFtZWQuaXNFbXB0eSkgewogICAgICAvLyBSZXBsYWNlIGludGVnZXIgbGl0ZXJhbHMgaW4gYSBkb3VibGUgY29udGV4dCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgIC8vIGRvdWJsZSBsaXRlcmFsIGlmIGl0J3MgZXhhY3QuICBGb3IgZG91YmxlIGxpdGVyYWxzLCB0aGUgbmVnYXRpb24gaXMKICAgICAgLy8gZm9sZGVkIGF3YXkuICBJbiBhbnkgbm9uLWRvdWJsZSBjb250ZXh0LCBvciBpZiB0aGVyZSBpcyBubyBleGFjdAogICAgICAvLyBkb3VibGUgdmFsdWUsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaW50ZWdlciBsaXRlcmFsIGlzIGxlZnQuICBUaGUKICAgICAgLy8gbmVnYXRpb24gaXMgbm90IGZvbGRlZCBhd2F5IHNvIHRoYXQgcGxhdGZvcm1zIHdpdGggd2ViIGxpdGVyYWxzIGNhbgogICAgICAvLyBkaXN0aW5ndWlzaCBiZXR3ZWVuIChub24tbmVnYXRlZCkgMHg4MDAwMDAwMDAwMDAwMDAwIHJlcHJlc2VudGVkIGFzCiAgICAgIC8vIGludGVnZXIgbGl0ZXJhbCAtOTIyMzM3MjAzNjg1NDc3NTgwOCB3aGljaCBzaG91bGQgYmUgYSBwb3NpdGl2ZSBudW1iZXIsCiAgICAgIC8vIGFuZCBuZWdhdGVkIDkyMjMzNzIwMzY4NTQ3NzU4MDggcmVwcmVzZW50ZWQgYXMKICAgICAgLy8gLTkyMjMzNzIwMzY4NTQ3NzU4MDgudW5hcnktKCkgd2hpY2ggc2hvdWxkIGJlIGEgbmVnYXRpdmUgbnVtYmVyLgogICAgICBpZiAobm9kZS5yZWNlaXZlciBpcyBJbnRKdWRnbWVudCkgewogICAgICAgIEludEp1ZGdtZW50IHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgICAgICBpZiAoaW5mZXJyZXIuaXNEb3VibGVDb250ZXh0KHR5cGVDb250ZXh0KSkgewogICAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gcmVjZWl2ZXIuYXNEb3VibGUobmVnYXRlZDogdHJ1ZSk7CiAgICAgICAgICBpZiAoZG91YmxlVmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICBub2RlLCBEb3VibGVMaXRlcmFsKGRvdWJsZVZhbHVlKS4uZmlsZU9mZnNldCA9IG5vZGUuZmlsZU9mZnNldCk7CiAgICAgICAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmRvdWJsZUNsYXNzLnJhd1R5cGU7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBFeHByZXNzaW9uIGVycm9yID0gY2hlY2tXZWJJbnRMaXRlcmFsc0Vycm9ySWZVbmV4YWN0KAogICAgICAgICAgICBpbmZlcnJlciwgcmVjZWl2ZXIudmFsdWUsIHJlY2VpdmVyLmxpdGVyYWwsIHJlY2VpdmVyLmZpbGVPZmZzZXQpOwogICAgICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZXJyb3IpOwogICAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBCb3R0b21UeXBlKCk7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobm9kZS5yZWNlaXZlciBpcyBTaGFkb3dMYXJnZUludExpdGVyYWwpIHsKICAgICAgICBTaGFkb3dMYXJnZUludExpdGVyYWwgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgICAgIGlmICghcmVjZWl2ZXIuaXNQYXJlbnRoZXNpemVkKSB7CiAgICAgICAgICBpZiAoaW5mZXJyZXIuaXNEb3VibGVDb250ZXh0KHR5cGVDb250ZXh0KSkgewogICAgICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSByZWNlaXZlci5hc0RvdWJsZShuZWdhdGVkOiB0cnVlKTsKICAgICAgICAgICAgaWYgKGRvdWJsZVZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwKICAgICAgICAgICAgICAgICAgRG91YmxlTGl0ZXJhbChkb3VibGVWYWx1ZSkuLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQpOwogICAgICAgICAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmRvdWJsZUNsYXNzLnJhd1R5cGU7CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGludCBpbnRWYWx1ZSA9IHJlY2VpdmVyLmFzSW50NjQobmVnYXRlZDogdHJ1ZSk7CiAgICAgICAgICBpZiAoaW50VmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgICBFeHByZXNzaW9uIGVycm9yID0gaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlCiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHJlY2VpdmVyLmxpdGVyYWwpLAogICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIubGl0ZXJhbC5sZW5ndGgpKTsKICAgICAgICAgICAgbm9kZS5wYXJlbnQucmVwbGFjZUNoaWxkKG5vZGUsIGVycm9yKTsKICAgICAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBCb3R0b21UeXBlKCk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGludFZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgRXhwcmVzc2lvbiBlcnJvciA9IGNoZWNrV2ViSW50TGl0ZXJhbHNFcnJvcklmVW5leGFjdCgKICAgICAgICAgICAgICAgIGluZmVycmVyLCBpbnRWYWx1ZSwgcmVjZWl2ZXIubGl0ZXJhbCwgcmVjZWl2ZXIuZmlsZU9mZnNldCk7CiAgICAgICAgICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmVwbGFjZUNoaWxkKG5vZGUsIGVycm9yKTsKICAgICAgICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBub2RlLnJlY2VpdmVyID0gSW50TGl0ZXJhbCgtaW50VmFsdWUpCiAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gbm9kZS5yZWNlaXZlci5maWxlT2Zmc2V0CiAgICAgICAgICAgICAgLi5wYXJlbnQgPSBub2RlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdmFyIGluZmVyZW5jZVJlc3VsdCA9IGluZmVycmVyLmluZmVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBub2RlLCBub2RlLnJlY2VpdmVyLCBub2RlLmZpbGVPZmZzZXQsIG5vZGUuX2lzSW1wbGljaXRDYWxsLCB0eXBlQ29udGV4dCwKICAgICAgICBkZXN1Z2FyZWRJbnZvY2F0aW9uOiBub2RlKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJlbmNlUmVzdWx0LnR5cGU7CiAgfQoKICB2b2lkIHZpc2l0TmFtZWRGdW5jdGlvbkV4cHJlc3Npb25KdWRnbWVudCgKICAgICAgTmFtZWRGdW5jdGlvbkV4cHJlc3Npb25KdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IG5vZGUudmFyaWFibGVKdWRnbWVudC5pbml0aWFsaXplcjsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihpbml0aWFsaXplciwgdHlwZUNvbnRleHQsIHRydWUpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBnZXRJbmZlcnJlZFR5cGUoaW5pdGlhbGl6ZXIsIGluZmVycmVyKTsKICAgIG5vZGUudmFyaWFibGUudHlwZSA9IG5vZGUuaW5mZXJyZWRUeXBlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Tm90KE5vdCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIG9wZXJhbmQgPSBub2RlLm9wZXJhbmQ7CiAgICB2YXIgYm9vbFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24ob3BlcmFuZCwgYm9vbFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoYm9vbFR5cGUsIGdldEluZmVycmVkVHlwZShvcGVyYW5kLCBpbmZlcnJlciksCiAgICAgICAgbm9kZS5vcGVyYW5kLCBub2RlLmZpbGVPZmZzZXQpOwogIH0KCiAgdm9pZCB2aXNpdE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgTnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICB2YXIgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIG5vZGUsIG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIsIG5vZGUuZmlsZU9mZnNldCwgZmFsc2UsIHR5cGVDb250ZXh0LAogICAgICAgIHJlY2VpdmVyVmFyaWFibGU6IG5vZGUudmFyaWFibGUsCiAgICAgICAgZGVzdWdhcmVkSW52b2NhdGlvbjogbm9kZS5fZGVzdWdhcmVkSW52b2NhdGlvbik7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVyZW5jZVJlc3VsdC50eXBlOwogICAgbm9kZS5ib2R5LnN0YXRpY1R5cGUgPSBub2RlLmluZmVycmVkVHlwZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCB2aXNpdE51bGxBd2FyZVByb3BlcnR5R2V0SnVkZ21lbnQoCiAgICAgIE51bGxBd2FyZVByb3BlcnR5R2V0SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGluZmVycmVyLmluZmVyUHJvcGVydHlHZXQoCiAgICAgICAgbm9kZSwgbm9kZS5yZWNlaXZlckp1ZGdtZW50LCBub2RlLmZpbGVPZmZzZXQsIHR5cGVDb250ZXh0LAogICAgICAgIHJlY2VpdmVyVmFyaWFibGU6IG5vZGUudmFyaWFibGUsIGRlc3VnYXJlZEdldDogbm9kZS5fZGVzdWdhcmVkR2V0KTsKICAgIG5vZGUuYm9keS5zdGF0aWNUeXBlID0gbm9kZS5pbmZlcnJlZFR5cGU7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExldChMZXQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIERhcnRUeXBlIHZhcmlhYmxlVHlwZSA9IG5vZGUudmFyaWFibGUudHlwZTsKICAgIGlmICh2YXJpYWJsZVR5cGUgPT0gY29uc3QgRHluYW1pY1R5cGUoKSkgewogICAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgdHlwZUNvbnRleHQpOwogICAgfQogICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXI7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oaW5pdGlhbGl6ZXIsIHZhcmlhYmxlVHlwZSwgdHJ1ZSwKICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIEV4cHJlc3Npb24gYm9keSA9IG5vZGUuYm9keTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihib2R5LCB0eXBlQ29udGV4dCwgdHJ1ZSwgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAvLyBUT0RPKGFoZSk6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZC4gU2VlIEluZmVycmVkVHlwZVZpc2l0b3IudmlzaXRMZXQuCiAgICBpbmZlcnJlci5zdG9yZUluZmVycmVkVHlwZShub2RlLCBnZXRJbmZlcnJlZFR5cGUoYm9keSwgaW5mZXJyZXIpKTsKICB9CgogIHZvaWQgdmlzaXRQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudCgKICAgICAgUHJvcGVydHlBc3NpZ25tZW50SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciByZWNlaXZlclR5cGUgPSBub2RlLl9pbmZlclJlY2VpdmVyKGluZmVycmVyKTsKCiAgICBEYXJ0VHlwZSByZWFkVHlwZTsKICAgIGlmIChub2RlLnJlYWQgIT0gbnVsbCkgewogICAgICB2YXIgcmVhZE1lbWJlciA9IGluZmVycmVyLmZpbmRQcm9wZXJ0eUdldE1lbWJlcihyZWNlaXZlclR5cGUsIG5vZGUucmVhZCwKICAgICAgICAgIGluc3RydW1lbnRlZDogZmFsc2UpOwogICAgICByZWFkVHlwZSA9IGluZmVycmVyLmdldENhbGxlZVR5cGUocmVhZE1lbWJlciwgcmVjZWl2ZXJUeXBlKTsKICAgICAgaW5mZXJyZXIuaGFuZGxlUHJvcGVydHlHZXRDb250cmF2YXJpYW5jZSgKICAgICAgICAgIG5vZGUucmVjZWl2ZXIsCiAgICAgICAgICByZWFkTWVtYmVyLAogICAgICAgICAgbm9kZS5yZWFkIGlzIFByb3BlcnR5R2V0ID8gbm9kZS5yZWFkIDogbnVsbCwKICAgICAgICAgIG5vZGUucmVhZCwKICAgICAgICAgIHJlYWRUeXBlLAogICAgICAgICAgbm9kZS5yZWFkLmZpbGVPZmZzZXQpOwogICAgICBub2RlLl9zdG9yZUxldFR5cGUoaW5mZXJyZXIsIG5vZGUucmVhZCwgcmVhZFR5cGUpOwogICAgfQogICAgTWVtYmVyIHdyaXRlTWVtYmVyOwogICAgaWYgKG5vZGUud3JpdGUgIT0gbnVsbCkgewogICAgICB3cml0ZU1lbWJlciA9IG5vZGUuX2hhbmRsZVdyaXRlQ29udHJhdmFyaWFuY2UoaW5mZXJyZXIsIHJlY2VpdmVyVHlwZSk7CiAgICB9CiAgICAvLyBUbyByZXBsaWNhdGUgYW5hbHl6ZXIgYmVoYXZpb3IsIHdlIGJhc2UgdHlwZSBpbmZlcmVuY2Ugb24gdGhlIHdyaXRlCiAgICAvLyBtZW1iZXIuICBUT0RPKHBhdWxiZXJyeSk6IHdvdWxkIGl0IGJlIGJldHRlciB0byB1c2UgdGhlIHJlYWQgbWVtYmVyIHdoZW4KICAgIC8vIGRvaW5nIGNvbXBvdW5kIGFzc2lnbm1lbnQ/CiAgICB2YXIgd3JpdGVDb250ZXh0ID0gaW5mZXJyZXIuZ2V0U2V0dGVyVHlwZSh3cml0ZU1lbWJlciwgcmVjZWl2ZXJUeXBlKTsKICAgIG5vZGUuX2luZmVyUmhzKGluZmVycmVyLCByZWFkVHlwZSwgd3JpdGVDb250ZXh0KTsKICAgIG5vZGUubnVsbEF3YXJlR3VhcmQ/LnN0YXRpY1R5cGUgPSBub2RlLmluZmVycmVkVHlwZTsKICAgIG5vZGUuX3JlcGxhY2VXaXRoRGVzdWdhcmVkKCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaW5mZXJyZXIuaW5mZXJQcm9wZXJ0eUdldChub2RlLCBub2RlLnJlY2VpdmVyLCBub2RlLmZpbGVPZmZzZXQsIHR5cGVDb250ZXh0LAogICAgICAgIGRlc3VnYXJlZEdldDogbm9kZSk7CiAgfQoKICB2b2lkIHZpc2l0UmVkaXJlY3RpbmdJbml0aWFsaXplckp1ZGdtZW50KAogICAgICBSZWRpcmVjdGluZ0luaXRpYWxpemVySnVkZ21lbnQgbm9kZSkgewogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBjbGFzc1R5cGVQYXJhbWV0ZXJzID0KICAgICAgICBub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVyczsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPihjbGFzc1R5cGVQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgdHlwZUFyZ3VtZW50c1tpXSA9IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShjbGFzc1R5cGVQYXJhbWV0ZXJzW2ldKTsKICAgIH0KICAgIEFyZ3VtZW50c0p1ZGdtZW50LnNldE5vbkluZmVycmFibGVBcmd1bWVudFR5cGVzKAogICAgICAgIG5vZGUuYXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgIGluZmVycmVyLmluZmVySW52b2NhdGlvbigKICAgICAgICBudWxsLAogICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBub2RlLnRhcmdldC5mdW5jdGlvbi5mdW5jdGlvblR5cGUsCiAgICAgICAgbm9kZS50YXJnZXQuZW5jbG9zaW5nQ2xhc3MudGhpc1R5cGUsCiAgICAgICAgbm9kZS5hcmd1bWVudEp1ZGdtZW50cywKICAgICAgICBza2lwVHlwZUFyZ3VtZW50SW5mZXJlbmNlOiB0cnVlKTsKICAgIEFyZ3VtZW50c0p1ZGdtZW50LnJlbW92ZU5vbkluZmVycmFibGVBcmd1bWVudFR5cGVzKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZXRocm93KFJldGhyb3cgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHt9CgogIHZvaWQgdmlzaXRSZXR1cm5KdWRnbWVudChSZXR1cm5KdWRnbWVudCBub2RlKSB7CiAgICB2YXIganVkZ21lbnQgPSBub2RlLmp1ZGdtZW50OwogICAgdmFyIGNsb3N1cmVDb250ZXh0ID0gaW5mZXJyZXIuY2xvc3VyZUNvbnRleHQ7CiAgICBEYXJ0VHlwZSB0eXBlQ29udGV4dCA9ICFjbG9zdXJlQ29udGV4dC5pc0dlbmVyYXRvcgogICAgICAgID8gY2xvc3VyZUNvbnRleHQucmV0dXJuT3JZaWVsZENvbnRleHQKICAgICAgICA6IGNvbnN0IFVua25vd25UeXBlKCk7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CiAgICBpZiAobm9kZS5leHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGp1ZGdtZW50LCB0eXBlQ29udGV4dCwgdHJ1ZSwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICBpbmZlcnJlZFR5cGUgPSBnZXRJbmZlcnJlZFR5cGUoanVkZ21lbnQsIGluZmVycmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MucmF3VHlwZTsKICAgIH0KICAgIGNsb3N1cmVDb250ZXh0LmhhbmRsZVJldHVybihpbmZlcnJlciwgbm9kZSwgaW5mZXJyZWRUeXBlLAogICAgICAgICFpZGVudGljYWwobm9kZS5yZXR1cm5LZXl3b3JkTGV4ZW1lLCAicmV0dXJuIikpOwogIH0KCiAgdm9pZCB2aXNpdFNldExpdGVyYWxKdWRnbWVudChTZXRMaXRlcmFsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciBzZXRDbGFzcyA9IGluZmVycmVyLmNvcmVUeXBlcy5zZXRDbGFzczsKICAgIHZhciBzZXRUeXBlID0gc2V0Q2xhc3MudGhpc1R5cGU7CiAgICBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlQXJndW1lbnQ7CiAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlczsKICAgIExpc3Q8RGFydFR5cGU+IGFjdHVhbFR5cGVzOwogICAgYm9vbCBpbmZlcmVuY2VOZWVkZWQgPSBub2RlLnR5cGVBcmd1bWVudCBpcyBJbXBsaWNpdFR5cGVBcmd1bWVudDsKICAgIGJvb2wgdHlwZUNoZWNrc05lZWRlZCA9ICFpbmZlcnJlci5pc1RvcExldmVsOwogICAgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4gaW5mZXJyZWRTcHJlYWRUeXBlczsKICAgIGlmIChpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCkgewogICAgICBmb3JtYWxUeXBlcyA9IFtdOwogICAgICBhY3R1YWxUeXBlcyA9IFtdOwogICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzID0gbmV3IE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+LmlkZW50aXR5KCk7CiAgICB9CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIGluZmVycmVkVHlwZXMgPSBbY29uc3QgVW5rbm93blR5cGUoKV07CiAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZShzZXRUeXBlLAogICAgICAgICAgc2V0Q2xhc3MudHlwZVBhcmFtZXRlcnMsIG51bGwsIG51bGwsIHR5cGVDb250ZXh0LCBpbmZlcnJlZFR5cGVzLAogICAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgICAgaW5mZXJyZWRUeXBlQXJndW1lbnQgPSBpbmZlcnJlZFR5cGVzWzBdOwogICAgfSBlbHNlIHsKICAgICAgaW5mZXJyZWRUeXBlQXJndW1lbnQgPSBub2RlLnR5cGVBcmd1bWVudDsKICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gaW5mZXJFbGVtZW50KAogICAgICAgICAgICBub2RlLmV4cHJlc3Npb25zW2ldLAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCwKICAgICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgICBhY3R1YWxUeXBlcy5hZGQodHlwZSk7CiAgICAgICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICAgICAgZm9ybWFsVHlwZXMuYWRkKHNldFR5cGUudHlwZUFyZ3VtZW50c1swXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZSgKICAgICAgICAgIHNldFR5cGUsCiAgICAgICAgICBzZXRDbGFzcy50eXBlUGFyYW1ldGVycywKICAgICAgICAgIGZvcm1hbFR5cGVzLAogICAgICAgICAgYWN0dWFsVHlwZXMsCiAgICAgICAgICB0eXBlQ29udGV4dCwKICAgICAgICAgIGluZmVycmVkVHlwZXMpOwogICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCA9IGluZmVycmVkVHlwZXNbMF07CiAgICAgIGluZmVycmVyLmluc3RydW1lbnRhdGlvbj8ucmVjb3JkKAogICAgICAgICAgaW5mZXJyZXIudXJpLAogICAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgICAgJ3R5cGVBcmdzJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGVBcmdzKFtpbmZlcnJlZFR5cGVBcmd1bWVudF0pKTsKICAgICAgbm9kZS50eXBlQXJndW1lbnQgPSBpbmZlcnJlZFR5cGVBcmd1bWVudDsKICAgIH0KICAgIGlmICh0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIGNoZWNrRWxlbWVudCgKICAgICAgICAgICAgbm9kZS5leHByZXNzaW9uc1tpXSwgbm9kZSwgbm9kZS50eXBlQXJndW1lbnQsIGluZmVycmVkU3ByZWFkVHlwZXMpOwogICAgICB9CiAgICB9CiAgICBub2RlLmluZmVycmVkVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKHNldENsYXNzLCBbaW5mZXJyZWRUeXBlQXJndW1lbnRdKTsKICAgIGlmICghaW5mZXJyZXIuaXNUb3BMZXZlbCkgewogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gaW5mZXJyZXIubGlicmFyeTsKICAgICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJblNldExpdGVyYWwoCiAgICAgICAgICAgIG5vZGUsIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgaW5mZXJyZXIuaGVscGVyLnVyaSwKICAgICAgICAgICAgaW5mZXJyZWQ6IHRydWUpOwogICAgICB9CgogICAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5iYWNrZW5kVGFyZ2V0LnN1cHBvcnRzU2V0TGl0ZXJhbHMpIHsKICAgICAgICBpbmZlcnJlci5oZWxwZXIudHJhbnNmb3JtU2V0TGl0ZXJhbHMgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0U3RhdGljQXNzaWdubWVudEp1ZGdtZW50KAogICAgICBTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIERhcnRUeXBlIHJlYWRUeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsgLy8gT25seSB1c2VkIGluIGVycm9yIHJlY292ZXJ5CiAgICB2YXIgcmVhZCA9IG5vZGUucmVhZDsKICAgIGlmIChyZWFkIGlzIFN0YXRpY0dldCkgewogICAgICByZWFkVHlwZSA9IHJlYWQudGFyZ2V0LmdldHRlclR5cGU7CiAgICAgIG5vZGUuX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgcmVhZCwgcmVhZFR5cGUpOwogICAgfQogICAgTWVtYmVyIHdyaXRlTWVtYmVyOwogICAgRGFydFR5cGUgd3JpdGVDb250ZXh0ID0gY29uc3QgVW5rbm93blR5cGUoKTsKICAgIHZhciB3cml0ZSA9IG5vZGUud3JpdGU7CiAgICBpZiAod3JpdGUgaXMgU3RhdGljU2V0KSB7CiAgICAgIHdyaXRlQ29udGV4dCA9IHdyaXRlLnRhcmdldC5zZXR0ZXJUeXBlOwogICAgICB3cml0ZU1lbWJlciA9IHdyaXRlLnRhcmdldDsKICAgICAgVHlwZUluZmVyZW5jZUVuZ2luZS5yZXNvbHZlSW5mZXJlbmNlTm9kZSh3cml0ZU1lbWJlcik7CiAgICB9CiAgICBub2RlLl9pbmZlclJocyhpbmZlcnJlciwgcmVhZFR5cGUsIHdyaXRlQ29udGV4dCk7CiAgICBub2RlLl9yZXBsYWNlV2l0aERlc3VnYXJlZCgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgVHlwZUluZmVyZW5jZUVuZ2luZS5yZXNvbHZlSW5mZXJlbmNlTm9kZSh0YXJnZXQpOwogICAgdmFyIHR5cGUgPSB0YXJnZXQuZ2V0dGVyVHlwZTsKICAgIGlmICh0YXJnZXQgaXMgUHJvY2VkdXJlICYmIHRhcmdldC5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgIHR5cGUgPSBpbmZlcnJlci5pbnN0YW50aWF0ZVRlYXJPZmYodHlwZSwgdHlwZUNvbnRleHQsIG5vZGUpOwogICAgfQogICAgaW5mZXJyZXIuc3RvcmVJbmZlcnJlZFR5cGUobm9kZSwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBGdW5jdGlvblR5cGUgY2FsbGVlVHlwZSA9IG5vZGUudGFyZ2V0ICE9IG51bGwKICAgICAgICA/IG5vZGUudGFyZ2V0LmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZQogICAgICAgIDogbmV3IEZ1bmN0aW9uVHlwZShbXSwgY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICBib29sIGhhZEV4cGxpY2l0VHlwZUFyZ3VtZW50cyA9CiAgICAgICAgZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSAhPSBudWxsOwogICAgdmFyIGluZmVyZW5jZVJlc3VsdCA9IGluZmVycmVyLmluZmVySW52b2NhdGlvbih0eXBlQ29udGV4dCwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGNhbGxlZVR5cGUsIGNhbGxlZVR5cGUucmV0dXJuVHlwZSwgbm9kZS5hcmd1bWVudHMpOwogICAgaW5mZXJyZXIuc3RvcmVJbmZlcnJlZFR5cGUobm9kZSwgaW5mZXJlbmNlUmVzdWx0LnR5cGUpOwogICAgaWYgKCFoYWRFeHBsaWNpdFR5cGVBcmd1bWVudHMgJiYgbm9kZS50YXJnZXQgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5saWJyYXJ5Py5jaGVja0JvdW5kc0luU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgIG5vZGUsIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgaW5mZXJyZXIuaGVscGVyLnVyaSwKICAgICAgICAgIGluZmVycmVkOiB0cnVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKAogICAgICBTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwpIHsKICAgICAgZm9yICh2YXIgZXhwcmVzc2lvbiBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgICBleHByZXNzaW9uLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdMaXRlcmFsKFN0cmluZ0xpdGVyYWwgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHt9CgogIHZvaWQgdmlzaXRTdXBlckluaXRpYWxpemVySnVkZ21lbnQoU3VwZXJJbml0aWFsaXplckp1ZGdtZW50IG5vZGUpIHsKICAgIHZhciBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZShpbmZlcnJlci5jbGFzc0hpZXJhcmNoeQogICAgICAgIC5nZXRDbGFzc0FzSW5zdGFuY2VPZigKICAgICAgICAgICAgaW5mZXJyZXIudGhpc1R5cGUuY2xhc3NOb2RlLCBub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzcykpOwogICAgaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKAogICAgICAgIG51bGwsCiAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSgKICAgICAgICAgICAgbm9kZS50YXJnZXQuZnVuY3Rpb24uZnVuY3Rpb25UeXBlLndpdGhvdXRUeXBlUGFyYW1ldGVycyksCiAgICAgICAgaW5mZXJyZXIudGhpc1R5cGUsCiAgICAgICAgbm9kZS5hcmd1bWVudEp1ZGdtZW50cywKICAgICAgICBza2lwVHlwZUFyZ3VtZW50SW5mZXJlbmNlOiB0cnVlKTsKICB9CgogIHZvaWQgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgU3VwZXJNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmIChub2RlLmludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmluc3RydW1lbnRhdGlvbj8ucmVjb3JkKGluZmVycmVyLnVyaSwgbm9kZS5maWxlT2Zmc2V0LCAndGFyZ2V0JywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvck1lbWJlcihub2RlLmludGVyZmFjZVRhcmdldCkpOwogICAgfQogICAgdmFyIGluZmVyZW5jZVJlc3VsdCA9IGluZmVycmVyLmluZmVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBub2RlLCBudWxsLCBub2RlLmZpbGVPZmZzZXQsIGZhbHNlLCB0eXBlQ29udGV4dCwKICAgICAgICBpbnRlcmZhY2VNZW1iZXI6IG5vZGUuaW50ZXJmYWNlVGFyZ2V0LAogICAgICAgIG1ldGhvZE5hbWU6IG5vZGUubmFtZSwKICAgICAgICBhcmd1bWVudHM6IG5vZGUuYXJndW1lbnRzKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJlbmNlUmVzdWx0LnR5cGU7CiAgfQoKICB2b2lkIHZpc2l0U3VwZXJQcm9wZXJ0eUdldEp1ZGdtZW50KAogICAgICBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmIChub2RlLmludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmluc3RydW1lbnRhdGlvbj8ucmVjb3JkKGluZmVycmVyLnVyaSwgbm9kZS5maWxlT2Zmc2V0LCAndGFyZ2V0JywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvck1lbWJlcihub2RlLmludGVyZmFjZVRhcmdldCkpOwogICAgfQogICAgaW5mZXJyZXIuaW5mZXJQcm9wZXJ0eUdldChub2RlLCBudWxsLCBub2RlLmZpbGVPZmZzZXQsIHR5cGVDb250ZXh0LAogICAgICAgIGludGVyZmFjZU1lbWJlcjogbm9kZS5pbnRlcmZhY2VUYXJnZXQsIHByb3BlcnR5TmFtZTogbm9kZS5uYW1lKTsKICB9CgogIHZvaWQgdmlzaXRTd2l0Y2hTdGF0ZW1lbnRKdWRnbWVudChTd2l0Y2hTdGF0ZW1lbnRKdWRnbWVudCBub2RlKSB7CiAgICB2YXIgZXhwcmVzc2lvbkp1ZGdtZW50ID0gbm9kZS5leHByZXNzaW9uSnVkZ21lbnQ7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oZXhwcmVzc2lvbkp1ZGdtZW50LCBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlKTsKICAgIHZhciBleHByZXNzaW9uVHlwZSA9IGdldEluZmVycmVkVHlwZShleHByZXNzaW9uSnVkZ21lbnQsIGluZmVycmVyKTsKCiAgICBmb3IgKHZhciBzd2l0Y2hDYXNlIGluIG5vZGUuY2FzZUp1ZGdtZW50cykgewogICAgICBmb3IgKHZhciBjYXNlRXhwcmVzc2lvbiBpbiBzd2l0Y2hDYXNlLmV4cHJlc3Npb25KdWRnbWVudHMpIHsKICAgICAgICBEYXJ0VHlwZSBjYXNlRXhwcmVzc2lvblR5cGUgPQogICAgICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oY2FzZUV4cHJlc3Npb24sIGV4cHJlc3Npb25UeXBlLCB0cnVlKTsKCiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZXhwcmVzc2lvbiB0eXBlIGlzIGFzc2lnbmFibGUgdG8gdGhlIGNhc2UKICAgICAgICAvLyBleHByZXNzaW9uIHR5cGUuCiAgICAgICAgaWYgKCFpbmZlcnJlci5pc0Fzc2lnbmFibGUoZXhwcmVzc2lvblR5cGUsIGNhc2VFeHByZXNzaW9uVHlwZSkpIHsKICAgICAgICAgIGluZmVycmVyLmhlbHBlci5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvblR5cGUsIGNhc2VFeHByZXNzaW9uVHlwZSksCiAgICAgICAgICAgICAgY2FzZUV4cHJlc3Npb24uZmlsZU9mZnNldCwKICAgICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICBtZXNzYWdlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgaW5mZXJyZXIudXJpLCBleHByZXNzaW9uSnVkZ21lbnQuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KHN3aXRjaENhc2UuYm9keSk7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0U3ltYm9sTGl0ZXJhbEp1ZGdtZW50KAogICAgICBTeW1ib2xMaXRlcmFsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLnN5bWJvbENsYXNzLnJhd1R5cGU7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgdmlzaXRJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgIEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRnVuY3Rpb25UeXBlIGNhbGxlZVR5cGU7CiAgICBEYXJ0VHlwZSByZXR1cm5UeXBlOwogICAgaWYgKG5vZGUuY29uc3RydWN0b3IgIT0gbnVsbCkgewogICAgICBjYWxsZWVUeXBlID0gbm9kZS5jb25zdHJ1Y3Rvci5mdW5jdGlvbi5mdW5jdGlvblR5cGU7CiAgICAgIHJldHVyblR5cGUgPSBjb21wdXRlQ29uc3RydWN0b3JSZXR1cm5UeXBlKG5vZGUuY29uc3RydWN0b3IpOwogICAgfSBlbHNlIHsKICAgICAgY2FsbGVlVHlwZSA9IG5ldyBGdW5jdGlvblR5cGUoW10sIGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgICByZXR1cm5UeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICAgIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKAogICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBjYWxsZWVUeXBlLAogICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgbm9kZS5hcmd1bWVudEp1ZGdtZW50cyk7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVyZW5jZVJlc3VsdC50eXBlOwogICAgcmV0dXJuIHZpc2l0U3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KG5vZGUsIHR5cGVDb250ZXh0KTsKICB9CgogIHZvaWQgdmlzaXRJbnZhbGlkV3JpdGVKdWRnbWVudCgKICAgICAgSW52YWxpZFdyaXRlSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIC8vIFdoZW4gYSBjb21wb3VuZCBhc3NpZ25tZW50LCB0aGUgZXhwcmVzc2lvbiBpcyBhbHJlYWR5IHdyYXBwaW5nIGluCiAgICAvLyBWYXJpYWJsZURlY2xhcmF0aW9uIGluIF9tYWtlUmVhZCgpLiBPdGhlcndpc2UsIHRlbXBvcmFyeSBhc3NvY2lhdGUKICAgIC8vIHRoZSBleHByZXNzaW9uIHdpdGggdGhpcyBub2RlLgogICAgbm9kZS5leHByZXNzaW9uLnBhcmVudCA/Pz0gbm9kZTsKCiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgbm9kZS5leHByZXNzaW9uLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICByZXR1cm4gdmlzaXRTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQobm9kZSwgdHlwZUNvbnRleHQpOwogIH0KCiAgdm9pZCB2aXNpdFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCgKICAgICAgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBub2RlLl9yZXBsYWNlV2l0aERlc3VnYXJlZCgpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0VGhpc0V4cHJlc3Npb24oVGhpc0V4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaHJvdyhUaHJvdyBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIG5vZGUuZXhwcmVzc2lvbiwgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogIH0KCiAgdm9pZCB2aXNpdENhdGNoSnVkZ21lbnQoQ2F0Y2hKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogIH0KCiAgdm9pZCB2aXNpdFRyeUNhdGNoSnVkZ21lbnQoVHJ5Q2F0Y2hKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogICAgZm9yICh2YXIgY2F0Y2hfIGluIG5vZGUuY2F0Y2hKdWRnbWVudHMpIHsKICAgICAgdmlzaXRDYXRjaEp1ZGdtZW50KGNhdGNoXyk7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0VHJ5RmluYWxseUp1ZGdtZW50KFRyeUZpbmFsbHlKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5maW5hbGl6ZXIpOwogIH0KCiAgdm9pZCB2aXNpdFR5cGVMaXRlcmFsSnVkZ21lbnQoCiAgICAgIFR5cGVMaXRlcmFsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLnR5cGVDbGFzcy5yYXdUeXBlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0VmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQoCiAgICAgIFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBEYXJ0VHlwZSByZWFkVHlwZTsKICAgIHZhciByZWFkID0gbm9kZS5yZWFkOwogICAgaWYgKHJlYWQgaXMgVmFyaWFibGVHZXQpIHsKICAgICAgcmVhZFR5cGUgPSByZWFkLnByb21vdGVkVHlwZSA/PyByZWFkLnZhcmlhYmxlLnR5cGU7CiAgICB9CiAgICBEYXJ0VHlwZSB3cml0ZUNvbnRleHQgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgdmFyIHdyaXRlID0gbm9kZS53cml0ZTsKICAgIGlmICh3cml0ZSBpcyBWYXJpYWJsZVNldCkgewogICAgICB3cml0ZUNvbnRleHQgPSB3cml0ZS52YXJpYWJsZS50eXBlOwogICAgICBpZiAocmVhZCAhPSBudWxsKSB7CiAgICAgICAgbm9kZS5fc3RvcmVMZXRUeXBlKGluZmVycmVyLCByZWFkLCB3cml0ZUNvbnRleHQpOwogICAgICB9CiAgICB9CiAgICBub2RlLl9pbmZlclJocyhpbmZlcnJlciwgcmVhZFR5cGUsIHdyaXRlQ29udGV4dCk7CiAgICBub2RlLl9yZXBsYWNlV2l0aERlc3VnYXJlZCgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBub2RlKSB7CiAgICB2YXIgaW5pdGlhbGl6ZXJKdWRnbWVudCA9IG5vZGUuaW5pdGlhbGl6ZXJKdWRnbWVudDsKICAgIHZhciBkZWNsYXJlZFR5cGUgPSBub2RlLl9pbXBsaWNpdGx5VHlwZWQgPyBjb25zdCBVbmtub3duVHlwZSgpIDogbm9kZS50eXBlOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogICAgRGFydFR5cGUgaW5pdGlhbGl6ZXJUeXBlOwogICAgaWYgKGluaXRpYWxpemVySnVkZ21lbnQgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oaW5pdGlhbGl6ZXJKdWRnbWVudCwgZGVjbGFyZWRUeXBlLAogICAgICAgICAgIWluZmVycmVyLmlzVG9wTGV2ZWwgfHwgbm9kZS5faW1wbGljaXRseVR5cGVkLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIGluaXRpYWxpemVyVHlwZSA9IGdldEluZmVycmVkVHlwZShpbml0aWFsaXplckp1ZGdtZW50LCBpbmZlcnJlcik7CiAgICAgIGluZmVycmVkVHlwZSA9IGluZmVycmVyLmluZmVyRGVjbGFyYXRpb25UeXBlKGluaXRpYWxpemVyVHlwZSk7CiAgICB9IGVsc2UgewogICAgICBpbmZlcnJlZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgaWYgKG5vZGUuX2ltcGxpY2l0bHlUeXBlZCkgewogICAgICBpbmZlcnJlci5pbnN0cnVtZW50YXRpb24/LnJlY29yZChpbmZlcnJlci51cmksIG5vZGUuZmlsZU9mZnNldCwgJ3R5cGUnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZShpbmZlcnJlZFR5cGUpKTsKICAgICAgbm9kZS50eXBlID0gaW5mZXJyZWRUeXBlOwogICAgfQogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICB2YXIgcmVwbGFjZWRJbml0aWFsaXplciA9IGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBub2RlLnR5cGUsIGluaXRpYWxpemVyVHlwZSwgbm9kZS5pbml0aWFsaXplciwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogbm9kZS50eXBlIGlzIFZvaWRUeXBlKTsKICAgICAgaWYgKHJlcGxhY2VkSW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIgPSByZXBsYWNlZEluaXRpYWxpemVyOwogICAgICB9CiAgICB9CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGluZmVycmVyLmxpYnJhcnk7CiAgICAgIGlmIChub2RlLl9pbXBsaWNpdGx5VHlwZWQpIHsKICAgICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5WYXJpYWJsZURlY2xhcmF0aW9uKAogICAgICAgICAgICBub2RlLCBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQsIGluZmVycmVyLmhlbHBlci51cmksCiAgICAgICAgICAgIGluZmVycmVkOiB0cnVlKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB2aXNpdFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgIFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciByZXN1bHQgPSB2aXNpdFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudChub2RlLCB0eXBlQ29udGV4dCk7CiAgICBpbmZlcnJlci5pbmZlckludm9jYXRpb24oCiAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIFR5cGVJbmZlcnJlckltcGwudW5rbm93bkZ1bmN0aW9uLAogICAgICAgIGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgICAgbm9kZS5hcmd1bWVudHNKdWRnbWVudCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCB2aXNpdFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudCgKICAgICAgVW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24obm9kZS5yaHMsIGNvbnN0IFVua25vd25UeXBlKCksIHRydWUpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBub2RlLmlzQ29tcG91bmQKICAgICAgICA/IGNvbnN0IER5bmFtaWNUeXBlKCkKICAgICAgICA6IGdldEluZmVycmVkVHlwZShub2RlLnJocywgaW5mZXJyZXIpOwogICAgcmV0dXJuIHZpc2l0U3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KG5vZGUsIHR5cGVDb250ZXh0KTsKICB9CgogIHZvaWQgdmlzaXRWYXJpYWJsZUdldEp1ZGdtZW50KAogICAgICBWYXJpYWJsZUdldEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgYm9vbCBtdXRhdGVkSW5DbG9zdXJlID0gdmFyaWFibGUuX211dGF0ZWRJbkNsb3N1cmU7CiAgICBEYXJ0VHlwZSBkZWNsYXJlZE9ySW5mZXJyZWRUeXBlID0gdmFyaWFibGUudHlwZTsKCiAgICBEYXJ0VHlwZSBwcm9tb3RlZFR5cGUgPSBpbmZlcnJlci50eXBlUHJvbW90ZXIKICAgICAgICAuY29tcHV0ZVByb21vdGVkVHlwZShub2RlLl9mYWN0LCBub2RlLl9zY29wZSwgbXV0YXRlZEluQ2xvc3VyZSk7CiAgICBpZiAocHJvbW90ZWRUeXBlICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoaW5mZXJyZXIudXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAncHJvbW90ZWRUeXBlJywgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZShwcm9tb3RlZFR5cGUpKTsKICAgIH0KICAgIG5vZGUucHJvbW90ZWRUeXBlID0gcHJvbW90ZWRUeXBlOwogICAgdmFyIHR5cGUgPSBwcm9tb3RlZFR5cGUgPz8gZGVjbGFyZWRPckluZmVycmVkVHlwZTsKICAgIGlmICh2YXJpYWJsZS5faXNMb2NhbEZ1bmN0aW9uKSB7CiAgICAgIHR5cGUgPSBpbmZlcnJlci5pbnN0YW50aWF0ZVRlYXJPZmYodHlwZSwgdHlwZUNvbnRleHQsIG5vZGUpOwogICAgfQogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSB0eXBlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0V2hpbGVKdWRnbWVudChXaGlsZUp1ZGdtZW50IG5vZGUpIHsKICAgIHZhciBjb25kaXRpb25KdWRnbWVudCA9IG5vZGUuY29uZGl0aW9uSnVkZ21lbnQ7CiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIGNvbmRpdGlvbkp1ZGdtZW50LCBleHBlY3RlZFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgZXhwZWN0ZWRUeXBlLAogICAgICAgIGdldEluZmVycmVkVHlwZShjb25kaXRpb25KdWRnbWVudCwgaW5mZXJyZXIpLAogICAgICAgIG5vZGUuY29uZGl0aW9uLAogICAgICAgIG5vZGUuY29uZGl0aW9uLmZpbGVPZmZzZXQpOwogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICB9CgogIHZvaWQgdmlzaXRZaWVsZEp1ZGdtZW50KFlpZWxkSnVkZ21lbnQgbm9kZSkgewogICAgdmFyIGp1ZGdtZW50ID0gbm9kZS5qdWRnbWVudDsKICAgIHZhciBjbG9zdXJlQ29udGV4dCA9IGluZmVycmVyLmNsb3N1cmVDb250ZXh0OwogICAgaWYgKGNsb3N1cmVDb250ZXh0LmlzR2VuZXJhdG9yKSB7CiAgICAgIHZhciB0eXBlQ29udGV4dCA9IGNsb3N1cmVDb250ZXh0LnJldHVybk9yWWllbGRDb250ZXh0OwogICAgICBpZiAobm9kZS5pc1lpZWxkU3RhciAmJiB0eXBlQ29udGV4dCAhPSBudWxsKSB7CiAgICAgICAgdHlwZUNvbnRleHQgPSBpbmZlcnJlci53cmFwVHlwZSgKICAgICAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgICAgIGNsb3N1cmVDb250ZXh0LmlzQXN5bmMKICAgICAgICAgICAgICAgID8gaW5mZXJyZXIuY29yZVR5cGVzLnN0cmVhbUNsYXNzCiAgICAgICAgICAgICAgICA6IGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKTsKICAgICAgfQogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oanVkZ21lbnQsIHR5cGVDb250ZXh0LCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihqdWRnbWVudCwgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSk7CiAgICB9CiAgICBjbG9zdXJlQ29udGV4dC5oYW5kbGVZaWVsZChpbmZlcnJlciwgbm9kZS5pc1lpZWxkU3RhciwKICAgICAgICBnZXRJbmZlcnJlZFR5cGUoanVkZ21lbnQsIGluZmVycmVyKSwgbm9kZS5leHByZXNzaW9uLCBub2RlLmZpbGVPZmZzZXQpOwogIH0KCiAgdm9pZCB2aXNpdExvYWRMaWJyYXJ5SnVkZ21lbnQoCiAgICAgIExvYWRMaWJyYXJ5SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0KICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuZnV0dXJlVHlwZShjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgIGlmIChub2RlLmFyZ3VtZW50cyAhPSBudWxs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KD8qTREEAQwiOgIBOXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvaW5mZXJlbmNlX3Zpc2l0b3IuZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2luZmVycmVkX3R5cGVfdmlzaXRvci5kYXJ0kkovLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAia2VybmVsX3NoYWRvd19hc3QuZGFydCI7CgpEYXJ0VHlwZSBnZXRJbmZlcnJlZFR5cGUoRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgaWYgKGV4cHJlc3Npb24gaXMgRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICByZXR1cm4gZXhwcmVzc2lvbi5pbmZlcnJlZFR5cGU7CiAgfSBlbHNlIHsKICAgIHJldHVybiBleHByZXNzaW9uLmFjY2VwdDEoY29uc3QgSW5mZXJyZWRUeXBlVmlzaXRvcigpLCBpbmZlcnJlcik7CiAgfQp9CgpEYXJ0VHlwZSBpbnZhbGlkVG9Cb3R0b20oRGFydFR5cGUgdHlwZSkgewogIC8vIFRPRE8oYWhlKTogVGhpcyBzaG91bGQgcmVhbGx5IHJldHVybiBbQm90dG9tVHlwZV0sIGJ1dCB0aGF0IHJlcXVpcmVzIG1vcmUKICAvLyB3b3JrIHRvIHRoZSBLZXJuZWwgdHlwZSBzeXN0ZW0gYW5kIGltcGxlbWVudGF0aW9uLgogIHJldHVybiAodHlwZSA9PSBudWxsIHx8IHR5cGUgaXMgSW52YWxpZFR5cGUpID8gY29uc3QgRHluYW1pY1R5cGUoKSA6IHR5cGU7Cn0KCkRhcnRUeXBlIGludmFsaWRUb1RvcChEYXJ0VHlwZSB0eXBlKSB7CiAgcmV0dXJuICh0eXBlID09IG51bGwgfHwgdHlwZSBpcyBJbnZhbGlkVHlwZSkgPyBjb25zdCBEeW5hbWljVHlwZSgpIDogdHlwZTsKfQoKY2xhc3MgSW5mZXJyZWRUeXBlVmlzaXRvcgogICAgZXh0ZW5kcyBFeHByZXNzaW9uVmlzaXRvcjE8RGFydFR5cGUsIFR5cGVJbmZlcnJlckltcGw+IHsKICBjb25zdCBJbmZlcnJlZFR5cGVWaXNpdG9yKCk7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGRlZmF1bHRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgdW5oYW5kbGVkKCIke25vZGUucnVudGltZVR5cGV9IiwgImdldEluZmVycmVkVHlwZSIsIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBpbmZlcnJlci51cmkpOwogICAgcmV0dXJuIGNvbnN0IEludmFsaWRUeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEludExpdGVyYWwoSW50TGl0ZXJhbCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLmludENsYXNzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLmRvdWJsZUNsYXNzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEludmFsaWRFeHByZXNzaW9uKAogICAgICBJbnZhbGlkRXhwcmVzc2lvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gY29uc3QgQm90dG9tVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRBc0V4cHJlc3Npb24oQXNFeHByZXNzaW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbnZhbGlkVG9Cb3R0b20obm9kZS50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0QXdhaXRFeHByZXNzaW9uKAogICAgICBBd2FpdEV4cHJlc3Npb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnJlYWRJbmZlcnJlZFR5cGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFRoaXNFeHByZXNzaW9uKFRoaXNFeHByZXNzaW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbnZhbGlkVG9Cb3R0b20oaW5mZXJyZXIudGhpc1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRCb29sTGl0ZXJhbChCb29sTGl0ZXJhbCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gbm9kZS5zdGF0aWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIucmVhZEluZmVycmVkVHlwZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0SXNFeHByZXNzaW9uKElzRXhwcmVzc2lvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oCiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIucmVhZEluZmVycmVkVHlwZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oCiAgICAgIExvZ2ljYWxFeHByZXNzaW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdE5vdChOb3Qgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0TnVsbExpdGVyYWwoTnVsbExpdGVyYWwgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0UHJvcGVydHlHZXQoUHJvcGVydHlHZXQgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnJlYWRJbmZlcnJlZFR5cGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gY29uc3QgQm90dG9tVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKAogICAgICBTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMuc3RyaW5nQ2xhc3MucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMuc3RyaW5nQ2xhc3MucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0TGV0KExldCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICAvLyBUT0RPKGFoZSk6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJldHVybiB0aGUgaW5mZXJyZWQgdHlwZSBvZgogICAgLy8gbm9kZS5ib2R5LiBIb3dldmVyLCB0aGF0IHR5cGUgbWF5IGJlIGxvc3QsIGZvciBleGFtcGxlLCBpbgogICAgLy8gVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQuX3JlcGxhY2VXaXRoRGVzdWdhcmVkLgogICAgcmV0dXJuIGluZmVycmVyLnJlYWRJbmZlcnJlZFR5cGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFN0YXRpY0dldChTdGF0aWNHZXQgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnJlYWRJbmZlcnJlZFR5cGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFN0YXRpY0ludm9jYXRpb24oCiAgICAgIFN0YXRpY0ludm9jYXRpb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnJlYWRJbmZlcnJlZFR5cGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFRocm93KFRocm93IG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBjb25zdCBCb3R0b21UeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKAogICAgICBDaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLm9iamVjdENsYXNzLnJhd1R5cGU7CiAgfQp9CoCkAE5OPAEiAU0qJAtGBAIBKk84TQIBJ00CARo9HwEMS0kXIAQBDEkwBAEMTzMEAQwjOx8EAQxNJwQBDCE5LAQBDFEvBAEMSzEEAQwnPxwEAQwnPywEAQxNMQQBDCQ8LAQBDCM7MQQBDDsxBAEMSzEEAQxLLAQBDEMfBAEMJT0zBAEMTzMEAQw7Q0I5LAQBDEcsBAEMIjosBAEMPx8EAQwmPjMEAgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9pbmZlcnJlZF90eXBlX3Zpc2l0b3IuZGFydDlzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9idWlsZGVyLmRhcnSH1i8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmJ1aWxkZXI7CgpleHBvcnQgJy4uL2lkZW50aWZpZXJzLmRhcnQnCiAgICBzaG93CiAgICAgICAgSWRlbnRpZmllciwKICAgICAgICBJbml0aWFsaXplZElkZW50aWZpZXIsCiAgICAgICAgUXVhbGlmaWVkTmFtZSwKICAgICAgICBkZXByZWNhdGVkX2V4dHJhY3RUb2tlbiwKICAgICAgICBmbGF0dGVuTmFtZTsKCmV4cG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBBY2Nlc3NFcnJvckJ1aWxkZXIsIFNjb3BlLCBTY29wZUJ1aWxkZXI7CgpleHBvcnQgJ2J1aWx0aW5fdHlwZV9idWlsZGVyLmRhcnQnIHNob3cgQnVpbHRpblR5cGVCdWlsZGVyOwoKZXhwb3J0ICdjbGFzc19idWlsZGVyLmRhcnQnIHNob3cgQ2xhc3NCdWlsZGVyOwoKZXhwb3J0ICdjb25zdHJ1Y3Rvcl9yZWZlcmVuY2VfYnVpbGRlci5kYXJ0JyBzaG93IENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcjsKCmV4cG9ydCAnZGVjbGFyYXRpb24uZGFydCcgc2hvdyBCdWlsZGVyOwoKZXhwb3J0ICdkeW5hbWljX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IER5bmFtaWNUeXBlQnVpbGRlcjsKCmV4cG9ydCAnZW51bV9idWlsZGVyLmRhcnQnIHNob3cgRW51bUJ1aWxkZXIsIEVudW1Db25zdGFudEluZm87CgpleHBvcnQgJ2ZpZWxkX2J1aWxkZXIuZGFydCcgc2hvdyBGaWVsZEJ1aWxkZXI7CgpleHBvcnQgJ2Zvcm1hbF9wYXJhbWV0ZXJfYnVpbGRlci5kYXJ0JyBzaG93IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI7CgpleHBvcnQgJ3Byb2NlZHVyZV9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgRnVuY3Rpb25CdWlsZGVyLAogICAgICAgIENvbnN0cnVjdG9yQnVpbGRlciwKICAgICAgICBQcm9jZWR1cmVCdWlsZGVyLAogICAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXI7CgpleHBvcnQgJ2Z1bmN0aW9uX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IEZ1bmN0aW9uVHlwZUJ1aWxkZXI7CgpleHBvcnQgJ2ludmFsaWRfdHlwZV9idWlsZGVyLmRhcnQnIHNob3cgSW52YWxpZFR5cGVCdWlsZGVyOwoKZXhwb3J0ICdsaWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlcjsKCmV4cG9ydCAnbWVtYmVyX2J1aWxkZXIuZGFydCcgc2hvdyBNZW1iZXJCdWlsZGVyOwoKZXhwb3J0ICdtZXRhZGF0YV9idWlsZGVyLmRhcnQnIHNob3cgTWV0YWRhdGFCdWlsZGVyOwoKZXhwb3J0ICdtaXhpbl9hcHBsaWNhdGlvbl9idWlsZGVyLmRhcnQnIHNob3cgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXI7CgpleHBvcnQgJ21vZGlmaWVyX2J1aWxkZXIuZGFydCcgc2hvdyBNb2RpZmllckJ1aWxkZXI7CgpleHBvcnQgJ25hbWVfaXRlcmF0b3IuZGFydCcgc2hvdyBOYW1lSXRlcmF0b3I7CgpleHBvcnQgJ25hbWVkX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IE5hbWVkVHlwZUJ1aWxkZXI7CgpleHBvcnQgJ3ByZWZpeF9idWlsZGVyLmRhcnQnIHNob3cgUHJlZml4QnVpbGRlcjsKCmV4cG9ydCAndHlwZV9hbGlhc19idWlsZGVyLmRhcnQnIHNob3cgVHlwZUFsaWFzQnVpbGRlcjsKCmV4cG9ydCAndHlwZV9idWlsZGVyLmRhcnQnIHNob3cgVHlwZUJ1aWxkZXI7CgpleHBvcnQgJ3R5cGVfZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0JyBzaG93IFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXI7CgpleHBvcnQgJ3R5cGVfdmFyaWFibGVfYnVpbGRlci5kYXJ0JyBzaG93IFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgpleHBvcnQgJ3VucmVzb2x2ZWRfdHlwZS5kYXJ0JyBzaG93IFVucmVzb2x2ZWRUeXBlOwoKZXhwb3J0ICd2b2lkX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IFZvaWRUeXBlQnVpbGRlcjsKSABOTjwBFwEdCRQfFyEVAUUBPAEvAU4BKAE8AT8BLwFEASAJGRwaIwE+ATwBMwExATUBRgE1AS8BOAExATgBLQFEAT4BMwE2ATBwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9idWlsZGVyLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvc3VtbWFyeV9nZW5lcmF0b3IuZGFydIZxLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBEZWZpbmVzIHRoZSBmcm9udC1lbmQgQVBJIGZvciBjb252ZXJ0aW5nIHNvdXJjZSBjb2RlIHRvIHN1bW1hcmllcy4KbGlicmFyeSBmcm9udF9lbmQuc3VtbWFyeV9nZW5lcmF0b3I7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2NvbXBpbGVyX29wdGlvbnMuZGFydCc7CgppbXBvcnQgJy4uL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4va2VybmVsX2dlbmVyYXRvcl9pbXBsLmRhcnQnOwoKLy8vIENyZWF0ZXMgYSBzdW1tYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBidWlsZCB1bml0IHdob3NlIHNvdXJjZSBmaWxlcyBhcmUgaW4KLy8vIFtzb3VyY2VzXS4KLy8vCi8vLyBJbnRlbmRlZCB0byBiZSBhIHBhcnQgb2YgYSBtb2R1bGFyIGNvbXBpbGF0aW9uIHByb2Nlc3MuCi8vLwovLy8gQW55IGRlcGVuZGVuY3kgb2YgW3NvdXJjZXNdIHRoYXQgaXMgbm90IGxpc3RlZCBpbgovLy8gW0NvbXBpbGVyT3B0aW9ucy5pbnB1dFN1bW1hcmllc10gYW5kIFtDb21waWxlck9wdGlvbnMuc2RrU3VtbWFyeV0gaXMgdHJlYXRlZAovLy8gYXMgYW4gYWRkaXRpb25hbCBzb3VyY2UgZmlsZSBmb3IgdGhlIGJ1aWxkIHVuaXQuCi8vLwovLy8gQW55IGBwYXJ0YCBkZWNsYXJhdGlvbnMgZm91bmQgaW4gW3NvdXJjZXNdIG11c3QgcmVmZXIgdG8gcGFydCBmaWxlcyB3aGljaAovLy8gYXJlIGFsc28gbGlzdGVkIGluIHRoZSBidWlsZCB1bml0IHNvdXJjZXMsIG90aGVyd2lzZSBhbiBlcnJvciByZXN1bHRzLiAgKEl0Ci8vLyBpcyBub3QgcGVybWl0dGVkIHRvIHJlZmVyIHRvIGEgcGFydCBmaWxlIGRlY2xhcmVkIGluIGFub3RoZXIgYnVpbGQgdW5pdCkuCi8vLwovLy8gSWYgW3RydW5jYXRlXSBpcyB0cnVlLCB0aGUgcmVzdWx0aW5nIHN1bW1hcnkgZG9lc24ndCBpbmNsdWRlIGFueSByZWZlcmVuY2VzCi8vLyB0byBsaWJyYXJpZXMgbG9hZGVkIGZyb20gdGhlIGlucHV0IHN1bW1hcmllcywgYW5kIG9ubHkgY29udGFpbnMgY29kZSB0aGF0Ci8vLyB3YXMgY29tcGlsZWQgZnJvbSBzb3VyY2VzLgovLy8KLy8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBsaXN0IG9mIGJ5dGVzIHRvIHdyaXRlIHRvIHRoZSBzdW1tYXJ5IGZpbGUuCkZ1dHVyZTxMaXN0PGludD4+IHN1bW1hcnlGb3IoTGlzdDxVcmk+IHNvdXJjZXMsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAge2Jvb2wgdHJ1bmNhdGU6IGZhbHNlfSkgYXN5bmMgewogIHJldHVybiAoYXdhaXQgZ2VuZXJhdGVLZXJuZWwoCiAgICAgICAgICBuZXcgUHJvY2Vzc2VkT3B0aW9ucyhvcHRpb25zOiBvcHRpb25zLCBpbnB1dHM6IHNvdXJjZXMpLAogICAgICAgICAgYnVpbGRTdW1tYXJ5OiB0cnVlLAogICAgICAgICAgYnVpbGRDb21wb25lbnQ6IGZhbHNlLAogICAgICAgICAgdHJ1bmNhdGVTdW1tYXJ5OiB0cnVuY2F0ZSkpCiAgICAgID8uc3VtbWFyeTsKfQoqAE5OPAFHJQEVIAEpKAFRDwQ8BDZRNQROUE4EUE4fBEZJJCBDHiEmEQIBOnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL3N1bW1hcnlfZ2VuZXJhdG9yLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIva2V5d29yZF9zdGF0ZS5kYXJ0kJkvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zY2FubmVyLmtleXdvcmRzOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIGFzIGFuYWx5emVyOwoKaW1wb3J0ICdjaGFyYWN0ZXJzLmRhcnQnIHNob3cgJGEsICR6LCAkQSwgJFo7CgovKioKICogQWJzdHJhY3Qgc3RhdGUgaW4gYSBzdGF0ZSBtYWNoaW5lIGZvciBzY2FubmluZyBrZXl3b3Jkcy4KICovCmFic3RyYWN0IGNsYXNzIEtleXdvcmRTdGF0ZSB7CiAgS2V5d29yZFN0YXRlIG5leHQoaW50IGMpOwogIEtleXdvcmRTdGF0ZSBuZXh0Q2FwaXRhbChpbnQgYyk7CgogIGFuYWx5emVyLktleXdvcmQgZ2V0IGtleXdvcmQ7CgogIHN0YXRpYyBLZXl3b3JkU3RhdGUgX0tFWVdPUkRfU1RBVEU7CiAgc3RhdGljIEtleXdvcmRTdGF0ZSBnZXQgS0VZV09SRF9TVEFURSB7CiAgICBpZiAoX0tFWVdPUkRfU1RBVEUgPT0gbnVsbCkgewogICAgICBMaXN0PFN0cmluZz4gc3RyaW5ncyA9IG5ldyBMaXN0PFN0cmluZz4oYW5hbHl6ZXIuS2V5d29yZC52YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbmFseXplci5LZXl3b3JkLnZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHN0cmluZ3NbaV0gPSBhbmFseXplci5LZXl3b3JkLnZhbHVlc1tpXS5sZXhlbWU7CiAgICAgIH0KICAgICAgc3RyaW5ncy5zb3J0KChhLCBiKSA9PiBhLmNvbXBhcmVUbyhiKSk7CiAgICAgIF9LRVlXT1JEX1NUQVRFID0gY29tcHV0ZUtleXdvcmRTdGF0ZVRhYmxlKDAsIHN0cmluZ3MsIDAsIHN0cmluZ3MubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBfS0VZV09SRF9TVEFURTsKICB9CgogIHN0YXRpYyBLZXl3b3JkU3RhdGUgY29tcHV0ZUtleXdvcmRTdGF0ZVRhYmxlKAogICAgICBpbnQgc3RhcnQsIExpc3Q8U3RyaW5nPiBzdHJpbmdzLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7CiAgICBib29sIGlzTG93ZXJjYXNlID0gdHJ1ZTsKCiAgICBMaXN0PEtleXdvcmRTdGF0ZT4gdGFibGUgPSBuZXcgTGlzdDxLZXl3b3JkU3RhdGU+KCR6IC0gJEEgKyAxKTsKICAgIGFzc2VydChsZW5ndGggIT0gMCk7CiAgICBpbnQgY2h1bmsgPSAwOwogICAgaW50IGNodW5rU3RhcnQgPSAtMTsKICAgIGJvb2wgaXNMZWFmID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gb2Zmc2V0OyBpIDwgb2Zmc2V0ICsgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHN0cmluZ3NbaV0ubGVuZ3RoID09IHN0YXJ0KSB7CiAgICAgICAgaXNMZWFmID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoc3RyaW5nc1tpXS5sZW5ndGggPiBzdGFydCkgewogICAgICAgIGludCBjID0gc3RyaW5nc1tpXS5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgICBpZiAoJEEgPD0gYyAmJiBjIDw9ICRaKSB7CiAgICAgICAgICBpc0xvd2VyY2FzZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoY2h1bmsgIT0gYykgewogICAgICAgICAgaWYgKGNodW5rU3RhcnQgIT0gLTEpIHsKICAgICAgICAgICAgYXNzZXJ0KHRhYmxlW2NodW5rIC0gJEFdID09IG51bGwpOwogICAgICAgICAgICB0YWJsZVtjaHVuayAtICRBXSA9IGNvbXB1dGVLZXl3b3JkU3RhdGVUYWJsZSgKICAgICAgICAgICAgICAgIHN0YXJ0ICsgMSwgc3RyaW5ncywgY2h1bmtTdGFydCwgaSAtIGNodW5rU3RhcnQpOwogICAgICAgICAgfQogICAgICAgICAgY2h1bmtTdGFydCA9IGk7CiAgICAgICAgICBjaHVuayA9IGM7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoY2h1bmtTdGFydCAhPSAtMSkgewogICAgICBhc3NlcnQodGFibGVbY2h1bmsgLSAkQV0gPT0gbnVsbCk7CiAgICAgIHRhYmxlW2NodW5rIC0gJEFdID0gY29tcHV0ZUtleXdvcmRTdGF0ZVRhYmxlKAogICAgICAgICAgc3RhcnQgKyAxLCBzdHJpbmdzLCBjaHVua1N0YXJ0LCBvZmZzZXQgKyBsZW5ndGggLSBjaHVua1N0YXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChsZW5ndGggPT0gMSk7CiAgICAgIHJldHVybiBuZXcgTGVhZktleXdvcmRTdGF0ZShzdHJpbmdzW29mZnNldF0pOwogICAgfQogICAgU3RyaW5nIHN5bnRheCA9IGlzTGVhZiA/IHN0cmluZ3Nbb2Zmc2V0XSA6IG51bGw7CiAgICBpZiAoaXNMb3dlcmNhc2UpIHsKICAgICAgdGFibGUgPSB0YWJsZS5zdWJsaXN0KCRhIC0gJEEpOwogICAgICByZXR1cm4gbmV3IExvd2VyQ2FzZUFycmF5S2V5d29yZFN0YXRlKHRhYmxlLCBzeW50YXgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBVcHBlckNhc2VBcnJheUtleXdvcmRTdGF0ZSh0YWJsZSwgc3ludGF4KTsKICAgIH0KICB9Cn0KCi8qKgogKiBBIHN0YXRlIHdpdGggbXVsdGlwbGUgb3V0Z29pbmcgdHJhbnNpdGlvbnMuCiAqLwphYnN0cmFjdCBjbGFzcyBBcnJheUtleXdvcmRTdGF0ZSBpbXBsZW1lbnRzIEtleXdvcmRTdGF0ZSB7CiAgZmluYWwgTGlzdDxLZXl3b3JkU3RhdGU+IHRhYmxlOwogIGZpbmFsIGFuYWx5emVyLktleXdvcmQga2V5d29yZDsKCiAgQXJyYXlLZXl3b3JkU3RhdGUodGhpcy50YWJsZSwgU3RyaW5nIHN5bnRheCkKICAgICAgOiBrZXl3b3JkID0gKChzeW50YXggPT0gbnVsbCkgPyBudWxsIDogYW5hbHl6ZXIuS2V5d29yZC5rZXl3b3Jkc1tzeW50YXhdKTsKCiAgS2V5d29yZFN0YXRlIG5leHQoaW50IGMpOwoKICBLZXl3b3JkU3RhdGUgbmV4dENhcGl0YWwoaW50IGMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgiWyIpOwogICAgaWYgKGtleXdvcmQgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgiKiIpOwogICAgICBzYi53cml0ZShrZXl3b3JkKTsKICAgICAgc2Iud3JpdGUoIiAiKTsKICAgIH0KICAgIExpc3Q8S2V5d29yZFN0YXRlPiBmb28gPSB0YWJsZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9vLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChmb29baV0gIT0gbnVsbCkgewogICAgICAgIHNiLndyaXRlKCIke25ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbaSArICRhXSl9OiAiCiAgICAgICAgICAgICIke2Zvb1tpXX07ICIpOwogICAgICB9CiAgICB9CiAgICBzYi53cml0ZSgiXSIpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBMb3dlckNhc2VBcnJheUtleXdvcmRTdGF0ZSBleHRlbmRzIEFycmF5S2V5d29yZFN0YXRlIHsKICBMb3dlckNhc2VBcnJheUtleXdvcmRTdGF0ZShMaXN0PEtleXdvcmRTdGF0ZT4gdGFibGUsIFN0cmluZyBzeW50YXgpCiAgICAgIDogc3VwZXIodGFibGUsIHN5bnRheCkgewogICAgYXNzZXJ0KHRhYmxlLmxlbmd0aCA9PSAkeiAtICRhICsgMSk7CiAgfQoKICBLZXl3b3JkU3RhdGUgbmV4dChpbnQgYykgPT4gdGFibGVbYyAtICRhXTsKCiAgS2V5d29yZFN0YXRlIG5leHRDYXBpdGFsKGludCBjKSA9PiBudWxsOwp9CgpjbGFzcyBVcHBlckNhc2VBcnJheUtleXdvcmRTdGF0ZSBleHRlbmRzIEFycmF5S2V5d29yZFN0YXRlIHsKICBVcHBlckNhc2VBcnJheUtleXdvcmRTdGF0ZShMaXN0PEtleXdvcmRTdGF0ZT4gdGFibGUsIFN0cmluZyBzeW50YXgpCiAgICAgIDogc3VwZXIodGFibGUsIHN5bnRheCkgewogICAgYXNzZXJ0KHRhYmxlLmxlbmd0aCA9PSAkeiAtICRBICsgMSk7CiAgfQoKICBLZXl3b3JkU3RhdGUgbmV4dChpbnQgYykgPT4gdGFibGVbYyAtICRBXTsKCiAgS2V5d29yZFN0YXRlIG5leHRDYXBpdGFsKGludCBjKSA9PiB0YWJsZVtjIC0gJEFdOwp9CgovKioKICogQSBzdGF0ZSB0aGF0IGhhcyBubyBvdXRnb2luZyB0cmFuc2l0aW9ucy4KICovCmNsYXNzIExlYWZLZXl3b3JkU3RhdGUgaW1wbGVtZW50cyBLZXl3b3JkU3RhdGUgewogIGZpbmFsIGFuYWx5emVyLktleXdvcmQga2V5d29yZDsKCiAgTGVhZktleXdvcmRTdGF0ZShTdHJpbmcgc3ludGF4KSA6IGtleXdvcmQgPSBhbmFseXplci5LZXl3b3JkLmtleXdvcmRzW3N5bnRheF07CgogIEtleXdvcmRTdGF0ZSBuZXh0KGludCBjKSA9PiBudWxsOwogIEtleXdvcmRTdGF0ZSBuZXh0Q2FwaXRhbChpbnQgYykgPT4gbnVsbDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4ga2V5d29yZC5sZXhlbWU7Cn0KgJYATk48ASABLwEuAQQ8BB4cIwEgASYqIk9BOAguUAYbBAEwQR0BRBkTGRk1KBcIJy4iHwoaIi86QQwaFQoIBhwpNEkNGzQGNRcmPA08BgQCAQQvBDsiIgEvUQEcASMBFioTGxUZFQYkKxw7HAgGExoEAgE9Rh8pBAEtASsCAT1GHykEAS0BNAIBBC0EMSIBUQEkKwEnAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIva2V5d29yZF9zdGF0ZS5kYXJ0RXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydIZlLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnOwppbXBvcnQgJy4uL3Njb3BlLmRhcnQnOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnOwppbXBvcnQgJ2xpYnJhcnlfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICdtZXRhZGF0YV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3R5cGVfZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIERlY2xhcmF0aW9uQnVpbGRlciBleHRlbmRzIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgewogIGZpbmFsIFNjb3BlIHNjb3BlOwoKICBmaW5hbCBTY29wZUJ1aWxkZXIgc2NvcGVCdWlsZGVyOwoKICBEZWNsYXJhdGlvbkJ1aWxkZXIoTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLCBpbnQgbW9kaWZpZXJzLCBTdHJpbmcgbmFtZSwKICAgICAgTGlicmFyeUJ1aWxkZXIgcGFyZW50LCBpbnQgY2hhck9mZnNldCwgdGhpcy5zY29wZSkKICAgICAgOiBzY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKHNjb3BlKSwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCBuYW1lLCBwYXJlbnQsIGNoYXJPZmZzZXQpOwoKICBMaWJyYXJ5QnVpbGRlciBnZXQgbGlicmFyeSB7CiAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gcGFyZW50OwogICAgcmV0dXJuIGxpYnJhcnkucGFydE9mTGlicmFyeSA/PyBsaWJyYXJ5OwogIH0KCiAgdm9pZCBhZGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSwKICAgICAgICB3YXNIYW5kbGVkOiB3YXNIYW5kbGVkLCBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIGB0aGlzYCBpbiBhbiBpbnN0YW5jZSBvZiB0aGlzIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBUaGlzIGlzIG5vbi1udWxsIGZvciBjbGFzcyBhbmQgbWl4aW4gZGVjbGFyYXRpb25zIGFuZCBgbnVsbGAgZm9yCiAgLy8vIGV4dGVuc2lvbiBkZWNsYXJhdGlvbnMuCiAgSW50ZXJmYWNlVHlwZSBnZXQgdGhpc1R5cGU7CgogIC8vLyBMb29rdXBzIHRoZSBtZW1iZXIgW25hbWVdIGRlY2xhcmVkIGluIHRoaXMgZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIElmIFtyZXF1aXJlZF0gaXMgYHRydWVgIGFuZCBubyBtZW1iZXIgaXMgZm91bmQgYW4gaW50ZXJuYWwgcHJvYmxlbSBpcwogIC8vLyByZXBvcnRlZC4KICBCdWlsZGVyIGxvb2t1cExvY2FsTWVtYmVyKFN0cmluZyBuYW1lLCB7Ym9vbCByZXF1aXJlZDogZmFsc2V9KTsKfQozAE5OPAEiASIBGxgBFx8gKAFDFQEjAVE5MD4BHyUtBAE/QD0zBAFFBkceHgE+BkwQQgIBPHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydDpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvY29uc3RhbnRfY29udGV4dC5kYXJ0hOEvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5jb25zdGFudF9jb250ZXh0OwoKZW51bSBDb25zdGFudENvbnRleHQgewogIC8vLyBOb3QgaW4gYSBjb25zdGFudCBjb250ZXh0LgogIC8vLwogIC8vLyBUaGlzIG1lYW5zIHRoYXQgYE9iamVjdCgpYCBhbmQgYFtdYCBhcmUgZXF1aXZhbGVudCB0byBgbmV3IE9iamVjdCgpYCBhbmQKICAvLy8gYFtdYCByZXNwZWN0aXZlbHkuIGBuZXcgT2JqZWN0KClgIGlzICoqbm90KiogYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgLy8vCiAgLy8vIFRPRE8oYWhlKTogVXBkYXRlIHRoZSBhYm92ZSBzcGVjaWZpY2F0aW9uIGFuZCBjb3JyZXNwb25kaW5nCiAgLy8vIGltcGxlbWVudGF0aW9uIGJlY2F1c2UgYE9iamVjdCgpYCBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudC4gU2VlIFttYWdpYwogIC8vLyBjb25zdF0oCiAgLy8vIC4uLy4uLy4uLy4uLy4uLy4uL2RvY3MvbGFuZ3VhZ2UvaW5mb3JtYWwvZG9jcy9sYW5ndWFnZS9pbmZvcm1hbC9pbXBsaWNpdC1jcmVhdGlvbi5tZAogIC8vLyApLgogIG5vbmUsCgogIC8vLyBJbiBhIGNvbnRleHQgd2hlcmUgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlIHJlcXVpcmVkLCBhbmQgYGNvbnN0YCBtYXkgYmUKICAvLy8gaW5mZXJyZWQuCiAgLy8vCiAgLy8vIFRoaXMgbWVhbnMgdGhhdCBgT2JqZWN0KClgIGFuZCBgW11gIGFyZSBlcXVpdmFsZW50IHRvIGBjb25zdCBPYmplY3QoKWAgYW5kCiAgLy8vIGBjb25zdCBbXWAgcmVzcGVjdGl2ZWx5LiBgbmV3IE9iamVjdCgpYCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvci4KICBpbmZlcnJlZCwKCiAgLy8vIEluIGEgY29udGV4dCB3aGVyZSBjb25zdGFudCBleHByZXNzaW9ucyBhcmUgcmVxdWlyZWQsIGJ1dCBgY29uc3RgIGlzIG5vdAogIC8vLyBpbmZlcnJlZC4gVGhpcyBpbmNsdWRlcyBkZWZhdWx0IHZhbHVlcyBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzIGFuZAogIC8vLyBpbml0aWFsaXppbmcgZXhwcmVzc2lvbnMgb24gZmllbGRzIGluIGNsYXNzZXMgd2l0aCBhIGBjb25zdGAgY29uc3RydWN0b3IuCiAgcmVxdWlyZWQsCn0KIQBOTjwBIAEXIQZPSQZCTw5bCQgBTxAGUUcMAU9IUAwCATFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvY29uc3RhbnRfY29udGV4dC5kYXJ0MnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9tb2RpZmllci5kYXJ0jVYvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5tb2RpZmllcjsKCmltcG9ydCAncHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQ7CgplbnVtIE1vZGlmaWVyRW51bSB7CiAgQWJzdHJhY3QsCiAgQ29uc3QsCiAgQ292YXJpYW50LAogIEV4dGVybmFsLAogIEZpbmFsLAogIFN0YXRpYywKCiAgLy8gTm90IGEgcmVhbCBtb2RpZmllci4KICBWYXIsCn0KCmNvbnN0IGludCBhYnN0cmFjdE1hc2sgPSAxOwoKY29uc3QgaW50IGNvbnN0TWFzayA9IGFic3RyYWN0TWFzayA8PCAxOwoKY29uc3QgaW50IGNvdmFyaWFudE1hc2sgPSBjb25zdE1hc2sgPDwgMTsKCmNvbnN0IGludCBleHRlcm5hbE1hc2sgPSBjb3ZhcmlhbnRNYXNrIDw8IDE7Cgpjb25zdCBpbnQgZmluYWxNYXNrID0gZXh0ZXJuYWxNYXNrIDw8IDE7Cgpjb25zdCBpbnQgc3RhdGljTWFzayA9IGZpbmFsTWFzayA8PCAxOwoKY29uc3QgaW50IGxhdGVNYXNrID0gc3RhdGljTWFzayA8PCAxOwoKY29uc3QgaW50IHJlcXVpcmVkTWFzayA9IGxhdGVNYXNrIDw8IDE7Cgpjb25zdCBpbnQgbmFtZWRNaXhpbkFwcGxpY2F0aW9uTWFzayA9IHJlcXVpcmVkTWFzayA8PCAxOwoKLy8vIE5vdCBhIG1vZGlmaWVyLCB1c2VkIGZvciBtaXhpbnMgZGVjbGFyZWQgZXhwbGljaXRseSBieSB1c2luZyB0aGUgYG1peGluYAovLy8ga2V5d29yZC4KY29uc3QgaW50IG1peGluRGVjbGFyYXRpb25NYXNrID0gbmFtZWRNaXhpbkFwcGxpY2F0aW9uTWFzayA8PCAxOwoKLy8vIE5vdCBhIG1vZGlmaWVyLCB1c2VkIGJ5IGZpZWxkcyB0byB0cmFjayBpZiB0aGV5IGhhdmUgYW4gaW5pdGlhbGl6ZXIuCmNvbnN0IGludCBoYXNJbml0aWFsaXplck1hc2sgPSBtaXhpbkRlY2xhcmF0aW9uTWFzayA8PCAxOwoKLy8vIE5vdCBhIG1vZGlmaWVyLCB1c2VkIGJ5IGZvcm1hbCBwYXJhbWV0ZXJzIHRvIHRyYWNrIGlmIHRoZXkgYXJlIGluaXRpYWxpemluZy4KY29uc3QgaW50IGluaXRpYWxpemluZ0Zvcm1hbE1hc2sgPSBoYXNJbml0aWFsaXplck1hc2sgPDwgMTsKCi8vLyBOb3QgYSBtb2RpZmllciwgdXNlZCBieSBjbGFzc2VzIHRvIHRyYWNrIGlmIHRoZSBjbGFzcyBoYXMgYSBjb25zdAovLy8gY29uc3RydWN0b3IuCmNvbnN0IGludCBoYXNDb25zdENvbnN0cnVjdG9yTWFzayA9IGluaXRpYWxpemluZ0Zvcm1hbE1hc2sgPDwgMTsKCi8vLyBOb3QgYSByZWFsIG1vZGlmaWVyLCBhbmQgYnkgc2V0dGluZyBpdCB0byB6ZXJvLCBpdCBpcyBhdXRvbWF0aWNhbGx5IGlnbm9yZWQKLy8vIGJ5IFtNb2RpZmllci52YWxpZGF0ZV0gYmVsb3cuCmNvbnN0IGludCB2YXJNYXNrID0gMDsKCmNvbnN0IE1vZGlmaWVyIEFic3RyYWN0ID0gY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLkFic3RyYWN0LCBhYnN0cmFjdE1hc2spOwoKY29uc3QgTW9kaWZpZXIgQ29uc3QgPSBjb25zdCBNb2RpZmllcihNb2RpZmllckVudW0uQ29uc3QsIGNvbnN0TWFzayk7Cgpjb25zdCBNb2RpZmllciBDb3ZhcmlhbnQgPQogICAgY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLkNvdmFyaWFudCwgY292YXJpYW50TWFzayk7Cgpjb25zdCBNb2RpZmllciBFeHRlcm5hbCA9IGNvbnN0IE1vZGlmaWVyKE1vZGlmaWVyRW51bS5FeHRlcm5hbCwgZXh0ZXJuYWxNYXNrKTsKCmNvbnN0IE1vZGlmaWVyIEZpbmFsID0gY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLkZpbmFsLCBmaW5hbE1hc2spOwoKY29uc3QgTW9kaWZpZXIgU3RhdGljID0gY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLlN0YXRpYywgc3RhdGljTWFzayk7CgovLy8gTm90IGEgcmVhbCBtb2RpZmllci4KY29uc3QgTW9kaWZpZXIgVmFyID0gY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLlZhciwgdmFyTWFzayk7CgpjbGFzcyBNb2RpZmllciB7CiAgZmluYWwgTW9kaWZpZXJFbnVtIGtpbmQ7CgogIGZpbmFsIGludCBtYXNrOwoKICBjb25zdCBNb2RpZmllcih0aGlzLmtpbmQsIHRoaXMubWFzayk7CgogIGZhY3RvcnkgTW9kaWZpZXIuZnJvbVN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgICBpZiAoaWRlbnRpY2FsKCdhYnN0cmFjdCcsIHN0cmluZykpIHJldHVybiBBYnN0cmFjdDsKICAgIGlmIChpZGVudGljYWwoJ2NvbnN0Jywgc3RyaW5nKSkgcmV0dXJuIENvbnN0OwogICAgaWYgKGlkZW50aWNhbCgnY292YXJpYW50Jywgc3RyaW5nKSkgcmV0dXJuIENvdmFyaWFudDsKICAgIGlmIChpZGVudGljYWwoJ2V4dGVybmFsJywgc3RyaW5nKSkgcmV0dXJuIEV4dGVybmFsOwogICAgaWYgKGlkZW50aWNhbCgnZmluYWwnLCBzdHJpbmcpKSByZXR1cm4gRmluYWw7CiAgICBpZiAoaWRlbnRpY2FsKCdzdGF0aWMnLCBzdHJpbmcpKSByZXR1cm4gU3RhdGljOwogICAgaWYgKGlkZW50aWNhbCgndmFyJywgc3RyaW5nKSkgcmV0dXJuIFZhcjsKICAgIHJldHVybiB1bmhhbmRsZWQoc3RyaW5nLCAiTW9kaWZpZXIuZnJvbVN0cmluZyIsIC0xLCBudWxsKTsKICB9CgogIHRvU3RyaW5nKCkgPT4gIm1vZGlmaWVyKCR7JyRraW5kJy5zdWJzdHJpbmcoJ01vZGlmaWVyRW51bS4nLmxlbmd0aCl9KSI7CgogIHN0YXRpYyBpbnQgdmFsaWRhdGUoTGlzdDxNb2RpZmllcj4gbW9kaWZpZXJzLCB7Ym9vbCBpc0Fic3RyYWN0OiBmYWxzZX0pIHsKICAgIC8vIFRPRE8oYWhlKTogUmVuYW1lIHRoaXMgbWV0aG9kLCB2YWxpZGF0aW9uIGlzIG5vdyB0YWtlbiBjYXJlIG9mIGJ5IHRoZQogICAgLy8gcGFyc2VyLgogICAgaW50IHJlc3VsdCA9IGlzQWJzdHJhY3QgPyBhYnN0cmFjdE1hc2sgOiAwOwogICAgaWYgKG1vZGlmaWVycyA9PSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgZm9yIChNb2RpZmllciBtb2RpZmllciBpbiBtb2RpZmllcnMpIHsKICAgICAgcmVzdWx0IHw9IG1vZGlmaWVyLm1hc2s7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGludCB2YWxpZGF0ZVZhckZpbmFsT3JDb25zdChTdHJpbmcgbGV4ZW1lKSB7CiAgICBpZiAobGV4ZW1lID09IG51bGwpIHJldHVybiAwOwogICAgaWYgKGlkZW50aWNhbCgnY29uc3QnLCBsZXhlbWUpKSByZXR1cm4gQ29uc3QubWFzazsKICAgIGlmIChpZGVudGljYWwoJ2ZpbmFsJywgbGV4ZW1lKSkgcmV0dXJuIEZpbmFsLm1hc2s7CiAgICBpZiAoaWRlbnRpY2FsKCd2YXInLCBsZXhlbWUpKSByZXR1cm4gVmFyLm1hc2s7CiAgICByZXR1cm4gdW5oYW5kbGVkKGxleGVtZSwgIk1vZGlmaWVyLnZhbGlkYXRlVmFyRmluYWxPckNvbnN0IiwgLTEsIG51bGwpOwogIH0KfQpxAE5OPAEYAScBFAwJDQwJCgEaBwIBHAEpASoBLQEpAScBJgEoATkBTQ1BAUk6AVE8AUYRQQFQIhcBTwFGARs7AU8BRgFJARlAAREbARIBKAEvODI6ODI0Lj8EAUoBTE0PMCorHwYTBAE2Ijc3M0wEAgEpcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL21vZGlmaWVyLmRhcnQvc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL25hbWVzLmRhcnSGVi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5zcmMuZmFzdGEubmFtZXM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IE5hbWU7CgpmaW5hbCBOYW1lIGFtcGVyc2FuZE5hbWUgPSBuZXcgTmFtZSgiJiIpOwoKZmluYWwgTmFtZSBiYXJOYW1lID0gbmV3IE5hbWUoInwiKTsKCmZpbmFsIE5hbWUgY2FsbE5hbWUgPSBuZXcgTmFtZSgiY2FsbCIpOwoKZmluYWwgTmFtZSBjYXJldE5hbWUgPSBuZXcgTmFtZSgiXiIpOwoKZmluYWwgTmFtZSBkaXZpc2lvbk5hbWUgPSBuZXcgTmFtZSgiLyIpOwoKZmluYWwgTmFtZSBkb3VibGVBbXBlcnNhbmROYW1lID0gbmV3IE5hbWUoIiYmIik7CgpmaW5hbCBOYW1lIGRvdWJsZUJhck5hbWUgPSBuZXcgTmFtZSgifHwiKTsKCmZpbmFsIE5hbWUgZG91YmxlUXVlc3Rpb25OYW1lID0gbmV3IE5hbWUoIj8/Iik7CgpmaW5hbCBOYW1lIGVtcHR5TmFtZSA9IG5ldyBOYW1lKCIiKTsKCmZpbmFsIE5hbWUgZXF1YWxzTmFtZSA9IG5ldyBOYW1lKCc9PScpOwoKZmluYWwgTmFtZSBncmVhdGVyVGhhbk5hbWUgPSBuZXcgTmFtZSgiPiIpOwoKZmluYWwgTmFtZSBncmVhdGVyVGhhbk9yRXF1YWxzTmFtZSA9IG5ldyBOYW1lKCI+PSIpOwoKZmluYWwgTmFtZSBpZGVudGljYWxOYW1lID0gbmV3IE5hbWUoImlkZW50aWNhbCIpOwoKZmluYWwgTmFtZSBpbmRleEdldE5hbWUgPSBuZXcgTmFtZSgiW10iKTsKCmZpbmFsIE5hbWUgaW5kZXhTZXROYW1lID0gbmV3IE5hbWUoIltdPSIpOwoKZmluYWwgTmFtZSBsZWZ0U2hpZnROYW1lID0gbmV3IE5hbWUoIjw8Iik7CgpmaW5hbCBOYW1lIGxlbmd0aE5hbWUgPSBuZXcgTmFtZSgibGVuZ3RoIik7CgpmaW5hbCBOYW1lIGxlc3NUaGFuTmFtZSA9IG5ldyBOYW1lKCI8Iik7CgpmaW5hbCBOYW1lIGxlc3NUaGFuT3JFcXVhbHNOYW1lID0gbmV3IE5hbWUoIjw9Iik7CgpmaW5hbCBOYW1lIG1pbnVzTmFtZSA9IG5ldyBOYW1lKCItIik7CgpmaW5hbCBOYW1lIG11bHRpcGx5TmFtZSA9IG5ldyBOYW1lKCIqIik7CgpmaW5hbCBOYW1lIG11c3RhY2hlTmFtZSA9IG5ldyBOYW1lKCJ+LyIpOwoKZmluYWwgTmFtZSBuZWdhdGlvbk5hbWUgPSBuZXcgTmFtZSgiISIpOwoKZmluYWwgTmFtZSBub1N1Y2hNZXRob2ROYW1lID0gbmV3IE5hbWUoIm5vU3VjaE1ldGhvZCIpOwoKZmluYWwgTmFtZSBwZXJjZW50TmFtZSA9IG5ldyBOYW1lKCIlIik7CgpmaW5hbCBOYW1lIHBsdXNOYW1lID0gbmV3IE5hbWUoIisiKTsKCmZpbmFsIE5hbWUgcmlnaHRTaGlmdE5hbWUgPSBuZXcgTmFtZSgiPj4iKTsKCmZpbmFsIE5hbWUgdHJpcGxlU2hpZnROYW1lID0gbmV3IE5hbWUoIj4+PiIpOwoKZmluYWwgTmFtZSB0aWxkZU5hbWUgPSBuZXcgTmFtZSgifiIpOwoKZmluYWwgTmFtZSB1bmFyeU1pbnVzTmFtZSA9IG5ldyBOYW1lKCJ1bmFyeS0iKTsKRQBOTjwBIwEsASoBJAEoASYBKQExASsBMAElASgBLAE1ATIBKgErASsBLAEpATIBJgEpASoBKQE4ASgBJQEsAS4BJgEwASZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvbmFtZXMuZGFydDBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyLmRhcnSHHi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJ3BhcnNlci9saXN0ZW5lci5kYXJ0JyBzaG93IExpc3RlbmVyOwoKaW1wb3J0ICdwYXJzZXIvcGFyc2VyLmRhcnQnIHNob3cgUGFyc2VyOwoKaW1wb3J0ICdwYXJzZXIvcGFyc2VyX2Vycm9yLmRhcnQnIHNob3cgUGFyc2VyRXJyb3I7CgppbXBvcnQgJ2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTWVzc2FnZSwgbWVzc2FnZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbjsKCmV4cG9ydCAncGFyc2VyL2Fzc2VydC5kYXJ0JyBzaG93IEFzc2VydDsKCmV4cG9ydCAncGFyc2VyL2NsYXNzX21lbWJlcl9wYXJzZXIuZGFydCcgc2hvdyBDbGFzc01lbWJlclBhcnNlcjsKCmV4cG9ydCAncGFyc2VyL2Zvcm1hbF9wYXJhbWV0ZXJfa2luZC5kYXJ0JyBzaG93IEZvcm1hbFBhcmFtZXRlcktpbmQ7CgpleHBvcnQgJ3BhcnNlci9pZGVudGlmaWVyX2NvbnRleHQuZGFydCcgc2hvdyBJZGVudGlmaWVyQ29udGV4dDsKCmV4cG9ydCAncGFyc2VyL2xpc3RlbmVyLmRhcnQnIHNob3cgTGlzdGVuZXI7CgpleHBvcnQgJ3BhcnNlci9jbGFzc19raW5kLmRhcnQnIHNob3cgQ2xhc3NLaW5kOwoKZXhwb3J0ICdwYXJzZXIvbWVtYmVyX2tpbmQuZGFydCcgc2hvdyBNZW1iZXJLaW5kOwoKZXhwb3J0ICdwYXJzZXIvcGFyc2VyLmRhcnQnIHNob3cgUGFyc2VyOwoKZXhwb3J0ICdwYXJzZXIvcGFyc2VyX2Vycm9yLmRhcnQnIHNob3cgUGFyc2VyRXJyb3I7CgpleHBvcnQgJ3BhcnNlci90b3BfbGV2ZWxfcGFyc2VyLmRhcnQnIHNob3cgVG9wTGV2ZWxQYXJzZXI7CgpleHBvcnQgJ3BhcnNlci91dGlsLmRhcnQnCiAgICBzaG93IGxlbmd0aEZvclRva2VuLCBsZW5ndGhPZlNwYW4sIG9mZnNldEZvclRva2VuLCBvcHRpb25hbDsKCmNsYXNzIEVycm9yQ29sbGVjdGluZ0xpc3RlbmVyIGV4dGVuZHMgTGlzdGVuZXIgewogIGZpbmFsIExpc3Q8UGFyc2VyRXJyb3I+IHJlY292ZXJhYmxlRXJyb3JzID0gPFBhcnNlckVycm9yPltdOwoKICB2b2lkIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgVG9rZW4gc3RhcnRUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIC8vLyBUT0RPKGRhbnJ1YmVsKTogSWdub3JlIHRoaXMgZXJyb3IgdW50aWwgd2UgZGVwcmVjYXRlIGBuYXRpdmVgIHN1cHBvcnQuCiAgICBpZiAobWVzc2FnZSA9PSBtZXNzYWdlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJlY292ZXJhYmxlRXJyb3JzCiAgICAgICAgLmFkZChuZXcgUGFyc2VyRXJyb3IuZnJvbVRva2VucyhzdGFydFRva2VuLCBlbmRUb2tlbiwgbWVzc2FnZSkpOwogIH0KfQoKTGlzdDxQYXJzZXJFcnJvcj4gcGFyc2UoVG9rZW4gdG9rZW5zKSB7CiAgRXJyb3JDb2xsZWN0aW5nTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgRXJyb3JDb2xsZWN0aW5nTGlzdGVuZXIoKTsKICBQYXJzZXIgcGFyc2VyID0gbmV3IFBhcnNlcihsaXN0ZW5lcik7CiAgcGFyc2VyLnBhcnNlVW5pdCh0b2tlbnMpOwogIHJldHVybiBsaXN0ZW5lci5yZWNvdmVyYWJsZUVycm9yczsKfQo9AE1OPwEWASsBLQEpATQBTwEpAUEBRQFAAS0BMAEyASkBNAE7ARpBATE/AR87TzwOBhZJBAIBKEQoHCUCASdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyLmRhcnQvc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3F1b3RlLmRhcnSlay8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnF1b3RlOwoKaW1wb3J0ICdwcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmltcG9ydCAnZmFzdGFfY29kZXMuZGFydCcgYXMgZmFzdGE7CgppbXBvcnQgJ3NjYW5uZXIvY2hhcmFjdGVycy5kYXJ0JwogICAgc2hvdwogICAgICAgICRCQUNLU0xBU0gsCiAgICAgICAgJEJTLAogICAgICAgICRDTE9TRV9DVVJMWV9CUkFDS0VULAogICAgICAgICRDUiwKICAgICAgICAkRkYsCiAgICAgICAgJExGLAogICAgICAgICRPUEVOX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgJFNQQUNFLAogICAgICAgICRUQUIsCiAgICAgICAgJFZUQUIsCiAgICAgICAgJGIsCiAgICAgICAgJGYsCiAgICAgICAgJG4sCiAgICAgICAgJHIsCiAgICAgICAgJHQsCiAgICAgICAgJHUsCiAgICAgICAgJHYsCiAgICAgICAgJHgsCiAgICAgICAgaGV4RGlnaXRWYWx1ZSwKICAgICAgICBpc0hleERpZ2l0OwoKZW51bSBRdW90ZSB7CiAgU2luZ2xlLAogIERvdWJsZSwKICBNdWx0aUxpbmVTaW5nbGUsCiAgTXVsdGlMaW5lRG91YmxlLAogIFJhd1NpbmdsZSwKICBSYXdEb3VibGUsCiAgUmF3TXVsdGlMaW5lU2luZ2xlLAogIFJhd011bHRpTGluZURvdWJsZSwKfQoKUXVvdGUgYW5hbHl6ZVF1b3RlKFN0cmluZyBmaXJzdCkgewogIGlmIChmaXJzdC5zdGFydHNXaXRoKCciIiInKSkgcmV0dXJuIFF1b3RlLk11bHRpTGluZURvdWJsZTsKICBpZiAoZmlyc3Quc3RhcnRzV2l0aCgnciIiIicpKSByZXR1cm4gUXVvdGUuUmF3TXVsdGlMaW5lRG91YmxlOwogIGlmIChmaXJzdC5zdGFydHNXaXRoKCInJyciKSkgcmV0dXJuIFF1b3RlLk11bHRpTGluZVNpbmdsZTsKICBpZiAoZmlyc3Quc3RhcnRzV2l0aCgicicnJyIpKSByZXR1cm4gUXVvdGUuUmF3TXVsdGlMaW5lU2luZ2xlOwogIGlmIChmaXJzdC5zdGFydHNXaXRoKCciJykpIHJldHVybiBRdW90ZS5Eb3VibGU7CiAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoJ3IiJykpIHJldHVybiBRdW90ZS5SYXdEb3VibGU7CiAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoIiciKSkgcmV0dXJuIFF1b3RlLlNpbmdsZTsKICBpZiAoZmlyc3Quc3RhcnRzV2l0aCgiciciKSkgcmV0dXJuIFF1b3RlLlJhd1NpbmdsZTsKICByZXR1cm4gdW5oYW5kbGVkKGZpcnN0LCAiYW5hbHl6ZVF1b3RlIiwgLTEsIG51bGwpOwp9CgovLyBOb3RlOiBiYXNlZCBvbiBbU3RyaW5nVmFsaWRhdG9yLnF1b3RpbmdGcm9tU3RyaW5nXQovLyAocGtnL2NvbXBpbGVyL2xpYi9zcmMvc3RyaW5nX3ZhbGlkYXRvci5kYXJ0KS4KaW50IGxlbmd0aE9mT3B0aW9uYWxXaGl0ZXNwYWNlUHJlZml4KFN0cmluZyBmaXJzdCwgaW50IHN0YXJ0KSB7CiAgTGlzdDxpbnQ+IGNvZGVVbml0cyA9IGZpcnN0LmNvZGVVbml0czsKICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBjb2RlVW5pdHMubGVuZ3RoOyBpKyspIHsKICAgIGludCBjb2RlID0gY29kZVVuaXRzW2ldOwogICAgaWYgKGNvZGUgPT0gJEJBQ0tTTEFTSCkgewogICAgICBpKys7CiAgICAgIGlmIChpIDwgY29kZVVuaXRzLmxlbmd0aCkgewogICAgICAgIGNvZGUgPSBjb2RlVW5pdHNbaV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb2RlID09ICRUQUIgfHwgY29kZSA9PSAkU1BBQ0UpIGNvbnRpbnVlOwogICAgaWYgKGNvZGUgPT0gJENSKSB7CiAgICAgIGlmIChpICsgMSA8IGNvZGVVbml0cy5sZW5ndGggJiYgY29kZVVuaXRzW2kgKyAxXSA9PSAkTEYpIHsKICAgICAgICBpKys7CiAgICAgIH0KICAgICAgcmV0dXJuIGkgKyAxOwogICAgfQogICAgaWYgKGNvZGUgPT0gJExGKSB7CiAgICAgIHJldHVybiBpICsgMTsKICAgIH0KICAgIGJyZWFrOyAvLyBOb3QgYSB3aGl0ZS1zcGFjZSBjaGFyYWN0ZXIuCiAgfQogIHJldHVybiBzdGFydDsKfQoKaW50IGZpcnN0UXVvdGVMZW5ndGgoU3RyaW5nIGZpcnN0LCBRdW90ZSBxdW90ZSkgewogIHN3aXRjaCAocXVvdGUpIHsKICAgIGNhc2UgUXVvdGUuU2luZ2xlOgogICAgY2FzZSBRdW90ZS5Eb3VibGU6CiAgICAgIHJldHVybiAxOwoKICAgIGNhc2UgUXVvdGUuTXVsdGlMaW5lU2luZ2xlOgogICAgY2FzZSBRdW90ZS5NdWx0aUxpbmVEb3VibGU6CiAgICAgIHJldHVybiBsZW5ndGhPZk9wdGlvbmFsV2hpdGVzcGFjZVByZWZpeChmaXJzdCwgMyk7CgogICAgY2FzZSBRdW90ZS5SYXdTaW5nbGU6CiAgICBjYXNlIFF1b3RlLlJhd0RvdWJsZToKICAgICAgcmV0dXJuIDI7CgogICAgY2FzZSBRdW90ZS5SYXdNdWx0aUxpbmVTaW5nbGU6CiAgICBjYXNlIFF1b3RlLlJhd011bHRpTGluZURvdWJsZToKICAgICAgcmV0dXJuIGxlbmd0aE9mT3B0aW9uYWxXaGl0ZXNwYWNlUHJlZml4KGZpcnN0LCA0KTsKICB9CiAgcmV0dXJuIHVuaGFuZGxlZCgiJHF1b3RlIiwgImZpcnN0UXVvdGVMZW5ndGgiLCAtMSwgbnVsbCk7Cn0KCmludCBsYXN0UXVvdGVMZW5ndGgoUXVvdGUgcXVvdGUpIHsKICBzd2l0Y2ggKHF1b3RlKSB7CiAgICBjYXNlIFF1b3RlLlNpbmdsZToKICAgIGNhc2UgUXVvdGUuRG91YmxlOgogICAgY2FzZSBRdW90ZS5SYXdTaW5nbGU6CiAgICBjYXNlIFF1b3RlLlJhd0RvdWJsZToKICAgICAgcmV0dXJuIDE7CgogICAgY2FzZSBRdW90ZS5NdWx0aUxpbmVTaW5nbGU6CiAgICBjYXNlIFF1b3RlLk11bHRpTGluZURvdWJsZToKICAgIGNhc2UgUXVvdGUuUmF3TXVsdGlMaW5lU2luZ2xlOgogICAgY2FzZSBRdW90ZS5SYXdNdWx0aUxpbmVEb3VibGU6CiAgICAgIHJldHVybiAzOwogIH0KICByZXR1cm4gdW5oYW5kbGVkKCIkcXVvdGUiLCAibGFzdFF1b3RlTGVuZ3RoIiwgLTEsIG51bGwpOwp9CgpTdHJpbmcgdW5lc2NhcGVGaXJzdFN0cmluZ1BhcnQoU3RyaW5nIGZpcnN0LCBRdW90ZSBxdW90ZSwgT2JqZWN0IGxvY2F0aW9uLAogICAgVW5lc2NhcGVFcnJvckxpc3RlbmVyIGxpc3RlbmVyKSB7CiAgcmV0dXJuIHVuZXNjYXBlKGZpcnN0LnN1YnN0cmluZyhmaXJzdFF1b3RlTGVuZ3RoKGZpcnN0LCBxdW90ZSkpLCBxdW90ZSwKICAgICAgbG9jYXRpb24sIGxpc3RlbmVyKTsKfQoKU3RyaW5nIHVuZXNjYXBlTGFzdFN0cmluZ1BhcnQoU3RyaW5nIGxhc3QsIFF1b3RlIHF1b3RlLCBPYmplY3QgbG9jYXRpb24sCiAgICBib29sIGlzTGFzdFF1b3RlU3ludGhldGljLCBVbmVzY2FwZUVycm9yTGlzdGVuZXIgbGlzdGVuZXIpIHsKICBpbnQgZW5kID0gbGFzdC5sZW5ndGggLSAoaXNMYXN0UXVvdGVTeW50aGV0aWMgPyAwIDogbGFzdFF1b3RlTGVuZ3RoKHF1b3RlKSk7CiAgcmV0dXJuIHVuZXNjYXBlKGxhc3Quc3Vic3RyaW5nKDAsIGVuZCksIHF1b3RlLCBsb2NhdGlvbiwgbGlzdGVuZXIpOwp9CgpTdHJpbmcgdW5lc2NhcGVTdHJpbmcoCiAgICBTdHJpbmcgc3RyaW5nLCBPYmplY3QgbG9jYXRpb24sIFVuZXNjYXBlRXJyb3JMaXN0ZW5lciBsaXN0ZW5lcikgewogIFF1b3RlIHF1b3RlID0gYW5hbHl6ZVF1b3RlKHN0cmluZyk7CiAgcmV0dXJuIHVuZXNjYXBlKAogICAgICBzdHJpbmcuc3Vic3RyaW5nKGZpcnN0UXVvdGVMZW5ndGgoc3RyaW5nLCBxdW90ZSksCiAgICAgICAgICBzdHJpbmcubGVuZ3RoIC0gbGFzdFF1b3RlTGVuZ3RoKHF1b3RlKSksCiAgICAgIHF1b3RlLAogICAgICBsb2NhdGlvbiwKICAgICAgbGlzdGVuZXIpOwp9CgpTdHJpbmcgdW5lc2NhcGUoU3RyaW5nIHN0cmluZywgUXVvdGUgcXVvdGUsIE9iamVjdCBsb2NhdGlvbiwKICAgIFVuZXNjYXBlRXJyb3JMaXN0ZW5lciBsaXN0ZW5lcikgewogIHN3aXRjaCAocXVvdGUpIHsKICAgIGNhc2UgUXVvdGUuU2luZ2xlOgogICAgY2FzZSBRdW90ZS5Eb3VibGU6CiAgICAgIHJldHVybiAhc3RyaW5nLmNvbnRhaW5zKCJcXCIpCiAgICAgICAgICA/IHN0cmluZwogICAgICAgICAgOiB1bmVzY2FwZUNvZGVVbml0cyhzdHJpbmcuY29kZVVuaXRzLCBmYWxzZSwgbG9jYXRpb24sIGxpc3RlbmVyKTsKCiAgICBjYXNlIFF1b3RlLk11bHRpTGluZVNpbmdsZToKICAgIGNhc2UgUXVvdGUuTXVsdGlMaW5lRG91YmxlOgogICAgICByZXR1cm4gIXN0cmluZy5jb250YWlucygiXFwiKSAmJiAhc3RyaW5nLmNvbnRhaW5zKCJcciIpCiAgICAgICAgICA/IHN0cmluZwogICAgICAgICAgOiB1bmVzY2FwZUNvZGVVbml0cyhzdHJpbmcuY29kZVVuaXRzLCBmYWxzZSwgbG9jYXRpb24sIGxpc3RlbmVyKTsKCiAgICBjYXNlIFF1b3RlLlJhd1NpbmdsZToKICAgIGNhc2UgUXVvdGUuUmF3RG91YmxlOgogICAgICByZXR1cm4gc3RyaW5nOwoKICAgIGNhc2UgUXVvdGUuUmF3TXVsdGlMaW5lU2luZ2xlOgogICAgY2FzZSBRdW90ZS5SYXdNdWx0aUxpbmVEb3VibGU6CiAgICAgIHJldHVybiAhc3RyaW5nLmNvbnRhaW5zKCJcciIpCiAgICAgICAgICA/IHN0cmluZwogICAgICAgICAgOiB1bmVzY2FwZUNvZGVVbml0cyhzdHJpbmcuY29kZVVuaXRzLCB0cnVlLCBsb2NhdGlvbiwgbGlzdGVuZXIpOwogIH0KICByZXR1cm4gdW5oYW5kbGVkKCIkcXVvdGUiLCAidW5lc2NhcGUiLCAtMSwgbnVsbCk7Cn0KCi8vIE5vdGU6IGJhc2VkIG9uCi8vIFtTdHJpbmdWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmddKHBrZy9jb21waWxlci9saWIvc3JjL3N0cmluZ192YWxpZGF0b3IuZGFydCkuClN0cmluZyB1bmVzY2FwZUNvZGVVbml0cyhMaXN0PGludD4gY29kZVVuaXRzLCBib29sIGlzUmF3LCBPYmplY3QgbG9jYXRpb24sCiAgICBVbmVzY2FwZUVycm9yTGlzdGVuZXIgbGlzdGVuZXIpIHsKICAvLyBDYW4ndCB1c2UgVWludDhMaXN0IG9yIFVpbnQxNkxpc3QgaGVyZSwgdGhlIGNvZGUgdW5pdHMgbWF5IGJlIGxhcmdlci4KICBMaXN0PGludD4gcmVzdWx0ID0gbmV3IExpc3Q8aW50Pihjb2RlVW5pdHMubGVuZ3RoKTsKICBpbnQgcmVzdWx0T2Zmc2V0ID0gMDsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2RlVW5pdHMubGVuZ3RoOyBpKyspIHsKICAgIGludCBjb2RlID0gY29kZVVuaXRzW2ldOwogICAgaWYgKGNvZGUgPT0gJENSKSB7CiAgICAgIGlmIChpICsgMSA8IGNvZGVVbml0cy5sZW5ndGggJiYgY29kZVVuaXRzW2kgKyAxXSA9PSAkTEYpIHsKICAgICAgICBpKys7CiAgICAgIH0KICAgICAgY29kZSA9ICRMRjsKICAgIH0gZWxzZSBpZiAoIWlzUmF3ICYmIGNvZGUgPT0gJEJBQ0tTTEFTSCkgewogICAgICBpZiAoY29kZVVuaXRzLmxlbmd0aCA9PSArK2kpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKAogICAgICAgICAgICBmYXN0YS5tZXNzYWdlSW52YWxpZFVuaWNvZGVFc2NhcGUsIGxvY2F0aW9uLCBpLCAxKTsKICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgIH0KICAgICAgY29kZSA9IGNvZGVVbml0c1tpXTsKCiAgICAgIC8vLyBgXG5gIGZvciBuZXdsaW5lLCBlcXVpdmFsZW50IHRvIGBceDBBYC4KICAgICAgLy8vIGBccmAgZm9yIGNhcnJpYWdlIHJldHVybiwgZXF1aXZhbGVudCB0byBgXHgwRGAuCiAgICAgIC8vLyBgXGZgIGZvciBmb3JtIGZlZWQsIGVxdWl2YWxlbnQgdG8gYFx4MENgLgogICAgICAvLy8gYFxiYCBmb3IgYmFja3NwYWNlLCBlcXVpdmFsZW50IHRvIGBceDA4YC4KICAgICAgLy8vIGBcdGAgZm9yIHRhYiwgZXF1aXZhbGVudCB0byBgXHgwOWAuCiAgICAgIC8vLyBgXHZgIGZvciB2ZXJ0aWNhbCB0YWIsIGVxdWl2YWxlbnQgdG8gYFx4MEJgLgogICAgICAvLy8gYFx4WFhgIGZvciBoZXggZXNjYXBlLgogICAgICAvLy8gYFx1WFhYWGAgb3IgYFx1e1hYP1g/WD9YP1g/fWAgZm9yIFVuaWNvZGUgaGV4IGVzY2FwZS4KICAgICAgaWYgKGNvZGUgPT0gJG4pIHsKICAgICAgICBjb2RlID0gJExGOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJHIpIHsKICAgICAgICBjb2RlID0gJENSOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJGYpIHsKICAgICAgICBjb2RlID0gJEZGOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJGIpIHsKICAgICAgICBjb2RlID0gJEJTOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJHQpIHsKICAgICAgICBjb2RlID0gJFRBQjsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICR2KSB7CiAgICAgICAgY29kZSA9ICRWVEFCOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJHgpIHsKICAgICAgICAvLyBFeHBlY3QgZXhhY3RseSAyIGhleCBkaWdpdHMuCiAgICAgICAgaW50IGJlZ2luID0gaTsKICAgICAgICBpZiAoY29kZVVuaXRzLmxlbmd0aCA8PSBpICsgMikgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcihmYXN0YS5tZXNzYWdlSW52YWxpZEhleEVzY2FwZSwgbG9jYXRpb24sCiAgICAgICAgICAgICAgYmVnaW4sIGNvZGVVbml0cy5sZW5ndGggKyAxIC0gYmVnaW4pOwogICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICAgIH0KICAgICAgICBjb2RlID0gMDsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7IGorKykgewogICAgICAgICAgaW50IGRpZ2l0ID0gY29kZVVuaXRzWysraV07CiAgICAgICAgICBpZiAoIWlzSGV4RGlnaXQoZGlnaXQpKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlSW52YWxpZEhleEVzY2FwZSwgbG9jYXRpb24sIGJlZ2luLCBpICsgMSAtIGJlZ2luKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICAgICAgfQogICAgICAgICAgY29kZSA9IChjb2RlIDw8IDQpICsgaGV4RGlnaXRWYWx1ZShkaWdpdCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJHUpIHsKICAgICAgICBpbnQgYmVnaW4gPSBpOwogICAgICAgIGlmIChjb2RlVW5pdHMubGVuZ3RoID09IGkgKyAxKSB7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKGZhc3RhLm1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZSwKICAgICAgICAgICAgICBsb2NhdGlvbiwgYmVnaW4sIGNvZGVVbml0cy5sZW5ndGggKyAxIC0gYmVnaW4pOwogICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICAgIH0KICAgICAgICBjb2RlID0gY29kZVVuaXRzW2kgKyAxXTsKICAgICAgICBpZiAoY29kZSA9PSAkT1BFTl9DVVJMWV9CUkFDS0VUKSB7CiAgICAgICAgICAvLyBFeHBlY3QgMS02IGhleCBkaWdpdHMgZm9sbG93ZWQgYnkgJ30nLgogICAgICAgICAgaWYgKGNvZGVVbml0cy5sZW5ndGggPT0gKytpKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoZmFzdGEubWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlLAogICAgICAgICAgICAgICAgbG9jYXRpb24sIGJlZ2luLCBpICsgMSAtIGJlZ2luKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICAgICAgfQogICAgICAgICAgY29kZSA9IDA7CiAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDc7IGorKykgewogICAgICAgICAgICBpZiAoY29kZVVuaXRzLmxlbmd0aCA9PSArK2kpIHsKICAgICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKGZhc3RhLm1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZSwKICAgICAgICAgICAgICAgICAgbG9jYXRpb24sIGJlZ2luLCBpICsgMSAtIGJlZ2luKTsKICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IGRpZ2l0ID0gY29kZVVuaXRzW2ldOwogICAgICAgICAgICBpZiAoaiAhPSAwICYmIGRpZ2l0ID09ICRDTE9TRV9DVVJMWV9CUkFDS0VUKSBicmVhazsKICAgICAgICAgICAgaWYgKCFpc0hleERpZ2l0KGRpZ2l0KSkgewogICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoZmFzdGEubWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlLAogICAgICAgICAgICAgICAgICBsb2NhdGlvbiwgYmVnaW4sIGkgKyAyIC0gYmVnaW4pOwogICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb2RlID0gKGNvZGUgPDwgNCkgKyBoZXhEaWdpdFZhbHVlKGRpZ2l0KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gRXhwZWN0IGV4YWN0bHkgNCBoZXggZGlnaXRzLgogICAgICAgICAgaWYgKGNvZGVVbml0cy5sZW5ndGggPD0gaSArIDQpIHsKICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcihmYXN0YS5tZXNzYWdlSW52YWxpZFVuaWNvZGVFc2NhcGUsCiAgICAgICAgICAgICAgICBsb2NhdGlvbiwgYmVnaW4sIGNvZGVVbml0cy5sZW5ndGggKyAxIC0gYmVnaW4pOwogICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgICAgICB9CiAgICAgICAgICBjb2RlID0gMDsKICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKSB7CiAgICAgICAgICAgIGludCBkaWdpdCA9IGNvZGVVbml0c1srK2ldOwogICAgICAgICAgICBpZiAoIWlzSGV4RGlnaXQoZGlnaXQpKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcihmYXN0YS5tZXNzYWdlSW52YWxpZFVuaWNvZGVFc2NhcGUsCiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCBiZWdpbiwgaSArIDEgLSBiZWdpbik7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvZGUgPSAoY29kZSA8PCA0KSArIGhleERpZ2l0VmFsdWUoZGlnaXQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY29kZSA+IDB4MTBGRkZGKSB7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKAogICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VJbnZhbGlkQ29kZVBvaW50LCBsb2NhdGlvbiwgYmVnaW4sIGkgKyAxIC0gYmVnaW4pOwogICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBOb3RoaW5nLCBlc2NhcGVkIGNoYXJhY3RlciBpcyBwYXNzZWQgdGhyb3VnaDsKICAgICAgfQogICAgfQogICAgcmVzdWx0W3Jlc3VsdE9mZnNldCsrXSA9IGNvZGU7CiAgfQogIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMocmVzdWx0LCAwLCByZXN1bHRPZmZzZXQpOwp9CgphYnN0cmFjdCBjbGFzcyBVbmVzY2FwZUVycm9yTGlzdGVuZXIgewogIHZvaWQgaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgZmFzdGEuTWVzc2FnZSBtZXNzYWdlLCBjb3ZhcmlhbnQgbG9jYXRpb24sIGludCBvZmZzZXQsIGludCBsZW5ndGgpOwp9CoEwAE5OPAEVAScBJAEhCRQNHg0NDR0QDg8MDAwMDAwMDBcUAQ0KChMTDQ0WFgIBIz1BPUEyNjI2NQIBNjFAKTMdHgsiHQ8PCAYyF0ENCBQGFxQGKwQQAgEyExcXEAEgIDkBGhoQASMjOQQ8AgEjExcXGhoQASAgIyMQBDsCAUsmShsCAUlBT0YCARdGJhM4Mw0QEQIBPSYTFxckE0wBICA+E0wBGhoVASMjJBNLBDQCARJRSyZLNhgBLx0XQQ0IEi8lJkA0CBsBMjo0NC43IUAYFB8UHxQfFB8VHxYfKBcpUDQ2ChImJiQqUDgMNQofFylKPjYKISs0KUwxOAwUKCtOMzoOJkAmTjM6DjcMESorTEA4DBQoKCZOMzoONwwKHyhONgoPOQgGIwQ8AgEnHEoCASZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcXVvdGUuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc291cmNlL3Njb3BlX2xpc3RlbmVyLmRhcnSS4i8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjb3BlX2xpc3RlbmVyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgU2NvcGU7CgppbXBvcnQgJ3N0YWNrX2xpc3RlbmVyLmRhcnQnIHNob3cgTnVsbFZhbHVlLCBTdGFja0xpc3RlbmVyOwoKZXhwb3J0ICdzdGFja19saXN0ZW5lci5kYXJ0JwogICAgc2hvdyBGaXhlZE51bGxhYmxlTGlzdCwgR3Jvd2FibGVMaXN0LCBOdWxsVmFsdWUsIFBhcnNlclJlY292ZXJ5OwoKZW51bSBKdW1wVGFyZ2V0S2luZCB7CiAgQnJlYWssCiAgQ29udGludWUsCiAgR290bywgLy8gQ29udGludWUgbGFiZWwgaW4gc3dpdGNoLgp9CgphYnN0cmFjdCBjbGFzcyBTY29wZUxpc3RlbmVyPEo+IGV4dGVuZHMgU3RhY2tMaXN0ZW5lciB7CiAgU2NvcGUgc2NvcGU7CgogIEogYnJlYWtUYXJnZXQ7CgogIEogY29udGludWVUYXJnZXQ7CgogIFNjb3BlTGlzdGVuZXIoU2NvcGUgc2NvcGUpIDogc2NvcGUgPSBzY29wZSA/PyBuZXcgU2NvcGUuaW1tdXRhYmxlKCk7CgogIEogY3JlYXRlSnVtcFRhcmdldChKdW1wVGFyZ2V0S2luZCBraW5kLCBpbnQgY2hhck9mZnNldCk7CgogIEogY3JlYXRlQnJlYWtUYXJnZXQoaW50IGNoYXJPZmZzZXQpIHsKICAgIHJldHVybiBjcmVhdGVKdW1wVGFyZ2V0KEp1bXBUYXJnZXRLaW5kLkJyZWFrLCBjaGFyT2Zmc2V0KTsKICB9CgogIEogY3JlYXRlQ29udGludWVUYXJnZXQoaW50IGNoYXJPZmZzZXQpIHsKICAgIHJldHVybiBjcmVhdGVKdW1wVGFyZ2V0KEp1bXBUYXJnZXRLaW5kLkNvbnRpbnVlLCBjaGFyT2Zmc2V0KTsKICB9CgogIEogY3JlYXRlR290b1RhcmdldChpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIGNyZWF0ZUp1bXBUYXJnZXQoSnVtcFRhcmdldEtpbmQuR290bywgY2hhck9mZnNldCk7CiAgfQoKICB2b2lkIGVudGVyTG9jYWxTY29wZShTdHJpbmcgZGVidWdOYW1lLCBbU2NvcGUgbmV3U2NvcGVdKSB7CiAgICBwdXNoKHNjb3BlKTsKICAgIHNjb3BlID0gbmV3U2NvcGUgPz8gc2NvcGUuY3JlYXRlTmVzdGVkU2NvcGUoZGVidWdOYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZXhpdExvY2FsU2NvcGUoKSB7CiAgICBzY29wZSA9IHBvcCgpOwogICAgYXNzZXJ0KHNjb3BlICE9IG51bGwpOwogIH0KCiAgdm9pZCBlbnRlckJyZWFrVGFyZ2V0KGludCBjaGFyT2Zmc2V0LCBbSiB0YXJnZXRdKSB7CiAgICBwdXNoKGJyZWFrVGFyZ2V0ID8/IE51bGxWYWx1ZS5CcmVha1RhcmdldCk7CiAgICBicmVha1RhcmdldCA9IHRhcmdldCA/PyBjcmVhdGVCcmVha1RhcmdldChjaGFyT2Zmc2V0KTsKICB9CgogIHZvaWQgZW50ZXJDb250aW51ZVRhcmdldChpbnQgY2hhck9mZnNldCwgW0ogdGFyZ2V0XSkgewogICAgcHVzaChjb250aW51ZVRhcmdldCA/PyBOdWxsVmFsdWUuQ29udGludWVUYXJnZXQpOwogICAgY29udGludWVUYXJnZXQgPSB0YXJnZXQgPz8gY3JlYXRlQ29udGludWVUYXJnZXQoY2hhck9mZnNldCk7CiAgfQoKICBKIGV4aXRCcmVha1RhcmdldCgpIHsKICAgIEogY3VycmVudCA9IGJyZWFrVGFyZ2V0OwogICAgYnJlYWtUYXJnZXQgPSBwb3AoKTsKICAgIHJldHVybiBjdXJyZW50OwogIH0KCiAgSiBleGl0Q29udGludWVUYXJnZXQoKSB7CiAgICBKIGN1cnJlbnQgPSBjb250aW51ZVRhcmdldDsKICAgIGNvbnRpbnVlVGFyZ2V0ID0gcG9wKCk7CiAgICByZXR1cm4gY3VycmVudDsKICB9CgogIHZvaWQgZW50ZXJMb29wKGludCBjaGFyT2Zmc2V0KSB7CiAgICBlbnRlckJyZWFrVGFyZ2V0KGNoYXJPZmZzZXQpOwogICAgZW50ZXJDb250aW51ZVRhcmdldChjaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5CbG9ja0Z1bmN0aW9uQm9keShUb2tlbiBiZWdpbikgewogICAgZGVidWdFdmVudCgiYmVnaW5CbG9ja0Z1bmN0aW9uQm9keSIpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJibG9jayBmdW5jdGlvbiBib2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9yU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkZvclN0YXRlbWVudCIpOwogICAgZW50ZXJMb29wKHRva2VuLmNoYXJPZmZzZXQpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJmb3Igc3RhdGVtZW50Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9yQ29udHJvbEZsb3coVG9rZW4gYXdhaXRUb2tlbiwgVG9rZW4gZm9yVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRm9yQ29udHJvbEZsb3ciKTsKICAgIGVudGVyTG9jYWxTY29wZSgiZm9yIGluIGEgY29sbGVjdGlvbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkJsb2NrIik7CiAgICBlbnRlckxvY2FsU2NvcGUoImJsb2NrIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luU3dpdGNoQmxvY2soVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luU3dpdGNoQmxvY2siKTsKICAgIGVudGVyTG9jYWxTY29wZSgic3dpdGNoIGJsb2NrIik7CiAgICBlbnRlckJyZWFrVGFyZ2V0KHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkRvV2hpbGVTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRG9XaGlsZVN0YXRlbWVudCIpOwogICAgZW50ZXJMb29wKHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbldoaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbldoaWxlU3RhdGVtZW50Iik7CiAgICBlbnRlckxvb3AodG9rZW4uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRG9XaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRG9XaGlsZVN0YXRlbWVudEJvZHkiKTsKICAgIGVudGVyTG9jYWxTY29wZSgiZG8td2hpbGUgc3RhdGVtZW50IGJvZHkiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRG9XaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZERvV2hpbGVTdGF0ZW1lbnRCb2R5Iik7CiAgICB2YXIgYm9keSA9IHBvcCgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2goYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbldoaWxlU3RhdGVtZW50Qm9keSIpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJ3aGlsZSBzdGF0ZW1lbnQgYm9keSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRXaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZFdoaWxlU3RhdGVtZW50Qm9keSIpOwogICAgdmFyIGJvZHkgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvclN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRm9yU3RhdGVtZW50Qm9keSIpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJmb3Igc3RhdGVtZW50IGJvZHkiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9yU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kRm9yU3RhdGVtZW50Qm9keSIpOwogICAgdmFyIGJvZHkgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvckluQm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Gb3JJbkJvZHkiKTsKICAgIGVudGVyTG9jYWxTY29wZSgiZm9yLWluIGJvZHkiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW5Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRGb3JJbkJvZHkiKTsKICAgIHZhciBib2R5ID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgcHVzaChib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UaGVuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpblRoZW5TdGF0ZW1lbnQiKTsKICAgIGVudGVyTG9jYWxTY29wZSgidGhlbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUaGVuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRUaGVuU3RhdGVtZW50Iik7CiAgICB2YXIgYm9keSA9IHBvcCgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2goYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRWxzZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5FbHNlU3RhdGVtZW50Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoImVsc2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRWxzZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kRWxzZVN0YXRlbWVudCIpOwogICAgdmFyIGJvZHkgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGJvZHkpOwogIH0KfQqA1ABOTjwBHgEuASMBPAEdRQEWCQwlAgE4DwERARQBRwE7ASg/BAErQgQBJz4EAT0RPAQBDBoTGwQBNjA7BAE5NkEEARgdGRQEARsgHBQEASMiJQQBDC0qLAQBDCglISYEAQw/JywEAQwhHh4EAQwnJCUoBAEMLCkhBAEMKichBAEMMC0wBAEMLisWFhAEAQwuKy0EAQwsKRYWEAQBDCwpKwQBDConFhYQBAEMJSIkBAEMIyAWFhAEAQwpJh0EAQwnJBYWEAQBDCkmHQQBDCckFhYQBAIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvc2NvcGVfbGlzdGVuZXIuZGFydDxzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc291cmNlL3ZhbHVlX2tpbmRzLmRhcnSUBy8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICcuLi9idWlsZGVyL2J1aWxkZXIuZGFydCcgYXMgdHlwZTsKCmltcG9ydCAnLi4va2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yLmRhcnQnIGFzIHR5cGU7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnIGFzIHR5cGU7CgppbXBvcnQgJy4uL29wZXJhdG9yLmRhcnQnIGFzIHR5cGU7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgYXMgdHlwZSBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICcuLi9zb3VyY2Uvb3V0bGluZV9idWlsZGVyLmRhcnQnIGFzIHR5cGU7CgppbXBvcnQgJ3N0YWNrX2xpc3RlbmVyLmRhcnQnIHNob3cgTnVsbFZhbHVlOwoKaW1wb3J0ICdzdGFja19saXN0ZW5lci5kYXJ0JyBhcyB0eXBlOwoKLy8vIFtWYWx1ZUtpbmRdIGlzIHVzZWQgaW4gW1N0YWNrTGlzdGVuZXIuY2hlY2tTdGF0ZV0gdG8gZG9jdW1lbnQgYW5kIGNoZWNrIHRoZQovLy8gZXhwZWN0ZWQgdmFsdWVzIG9mIHRoZSBzdGFjay4KLy8vCi8vLyBBZGQgbmV3IHZhbHVlIGtpbmRzIGFzIG5lZWRlZCBmb3IgZG9jdW1lbnRpbmcgYW5kIGNoZWNraW5nIHRoZSB2YXJpb3VzIHN0YWNrCi8vLyBsaXN0ZW5lciBpbXBsZW1lbnRhdGlvbnMuCmFic3RyYWN0IGNsYXNzIFZhbHVlS2luZCB7CiAgY29uc3QgVmFsdWVLaW5kKCk7CgogIC8vLyBDaGVja3MgdGhlIFt2YWx1ZV0gYW4gcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIG9mIHRoZSBleHBlY3RlZCBraW5kLgogIGJvb2wgY2hlY2soT2JqZWN0IHZhbHVlKTsKCiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBBcmd1bWVudHMgPSBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuQXJndW1lbnRzPigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgQXJndW1lbnRzT3JOdWxsID0KICAgICAgX1NpbmdsZVZhbHVlS2luZDx0eXBlLkFyZ3VtZW50cz4oTnVsbFZhbHVlLkFyZ3VtZW50cyk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBFeHByZXNzaW9uID0gY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLkV4cHJlc3Npb24+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBJZGVudGlmaWVyID0gY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLklkZW50aWZpZXI+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBJZGVudGlmaWVyT3JOdWxsID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLklkZW50aWZpZXI+KE51bGxWYWx1ZS5JZGVudGlmaWVyKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIEludGVnZXIgPSBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPGludD4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIEZvcm1hbHMgPQogICAgICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPExpc3Q8dHlwZS5Gb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIEZvcm1hbHNPck51bGwgPQogICAgICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPExpc3Q8dHlwZS5Gb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPj4oCiAgICAgICAgICBOdWxsVmFsdWUuRm9ybWFsUGFyYW1ldGVycyk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBHZW5lcmF0b3IgPSBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuR2VuZXJhdG9yPigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgTWV0aG9kQm9keSA9IGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5NZXRob2RCb2R5PigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgTW9kaWZpZXJzID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDxMaXN0PHR5cGUuTW9kaWZpZXI+PigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgTW9kaWZpZXJzT3JOdWxsID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDxMaXN0PHR5cGUuTW9kaWZpZXI+PihOdWxsVmFsdWUuTW9kaWZpZXJzKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE5hbWUgPSBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPFN0cmluZz4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE5hbWVPck51bGwgPQogICAgICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPFN0cmluZz4oTnVsbFZhbHVlLk5hbWUpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgTmFtZU9yT3BlcmF0b3IgPSBfVW5pb25WYWx1ZUtpbmQoW05hbWUsIE9wZXJhdG9yXSk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBOYW1lT3JRdWFsaWZpZWROYW1lT3JPcGVyYXRvciA9CiAgICAgIGNvbnN0IF9VbmlvblZhbHVlS2luZChbTmFtZSwgUXVhbGlmaWVkTmFtZSwgT3BlcmF0b3JdKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE5hbWVPclBhcnNlclJlY292ZXJ5ID0KICAgICAgY29uc3QgX1VuaW9uVmFsdWVLaW5kKFtOYW1lLCBQYXJzZXJSZWNvdmVyeV0pOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgTWV0YWRhdGFMaXN0T3JOdWxsID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDxMaXN0PHR5cGUuTWV0YWRhdGFCdWlsZGVyPj4oTnVsbFZhbHVlLk1ldGFkYXRhKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE9wZXJhdG9yID0gY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLk9wZXJhdG9yPigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgUGFyc2VyUmVjb3ZlcnkgPQogICAgICBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuUGFyc2VyUmVjb3Zlcnk+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBQcm9ibGVtQnVpbGRlciA9CiAgICAgIF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5Qcm9ibGVtQnVpbGRlcj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIFF1YWxpZmllZE5hbWUgPQogICAgICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuUXVhbGlmaWVkTmFtZT4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIFRva2VuID0gY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLlRva2VuPigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgVG9rZW5Pck51bGwgPQogICAgICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuVG9rZW4+KE51bGxWYWx1ZS5Ub2tlbik7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBUeXBlQXJndW1lbnRzT3JOdWxsID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDxMaXN0PHR5cGUuVW5yZXNvbHZlZFR5cGU+PigKICAgICAgICAgIE51bGxWYWx1ZS5UeXBlQXJndW1lbnRzKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIFR5cGVCdWlsZGVyID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLlR5cGVCdWlsZGVyPigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgVHlwZUJ1aWxkZXJPck51bGwgPQogICAgICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuVHlwZUJ1aWxkZXI+KE51bGxWYWx1ZS5UeXBlKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIFR5cGVWYXJpYWJsZUxpc3RPck51bGwgPQogICAgICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPExpc3Q8dHlwZS5UeXBlVmFyaWFibGVCdWlsZGVyPj4oCiAgICAgICAgICBOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7Cn0KCi8vLyBBIFtWYWx1ZUtpbmRdIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBbVF0sIG9wdGlvbmFsbHkgd2l0aCBhIHJlY29nbml6ZWQKLy8vIFtOdWxsVmFsdWVdLgpjbGFzcyBfU2luZ2xlVmFsdWVLaW5kPFQ+IGltcGxlbWVudHMgVmFsdWVLaW5kIHsKICBmaW5hbCBOdWxsVmFsdWUgbnVsbFZhbHVlOwoKICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kKFt0aGlzLm51bGxWYWx1ZV0pOwoKICBAb3ZlcnJpZGUKICBib29sIGNoZWNrKE9iamVjdCB2YWx1ZSkgewogICAgaWYgKG51bGxWYWx1ZSAhPSBudWxsICYmIHZhbHVlID09IG51bGxWYWx1ZSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiB2YWx1ZSBpcyBUOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKG51bGxWYWx1ZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiAnJFQgb3IgJG51bGxWYWx1ZSc7CiAgICB9CiAgICByZXR1cm4gJyRUJzsKICB9Cn0KCi8vLyBBIFtWYWx1ZUtpbmRdIGZvciB0aGUgdW5pb24gb2YgYSBsaXN0IG9mIFtWYWx1ZUtpbmRdcy4KY2xhc3MgX1VuaW9uVmFsdWVLaW5kIGltcGxlbWVudHMgVmFsdWVLaW5kIHsKICBmaW5hbCBMaXN0PFZhbHVlS2luZD4ga2luZHM7CgogIGNvbnN0IF9VbmlvblZhbHVlS2luZCh0aGlzLmtpbmRzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVjayhPYmplY3QgdmFsdWUpIHsKICAgIGZvciAoVmFsdWVLaW5kIGtpbmQgaW4ga2luZHMpIHsKICAgICAgaWYgKGtpbmQuY2hlY2sodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIFN0cmluZyBvciA9ICcnOwogICAgZm9yIChWYWx1ZUtpbmQga2luZCBpbiBraW5kcykgewogICAgICBzYi53cml0ZShvcik7CiAgICAgIHNiLndyaXRlKGtpbmQpOwogICAgICBvciA9ICcgb3IgJzsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgbGlzdCBvZiBbVmFsdWVLaW5kXXMgb2YgdGhlIGdpdmVuIGxlbmd0aAovLy8gW2NvdW50XS4KTGlzdDxWYWx1ZUtpbmQ+IHJlcGVhdGVkS2luZHMoVmFsdWVLaW5kIGtpbmQsIGludCBjb3VudCkgewogIHJldHVybiBuZXcgTGlzdC5nZW5lcmF0ZShjb3VudCwgKF8pID0+IGtpbmQpOwp9CgovLy8gSGVscGVyIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSB1bmlvbiBvZiBhIGxpc3Qgb2YgW1ZhbHVlS2luZF1zLgpWYWx1ZUtpbmQgdW5pb25PZktpbmRzKExpc3Q8VmFsdWVLaW5kPiBraW5kcykgewogIHJldHVybiBfVW5pb25WYWx1ZUtpbmQoa2luZHMpOwp9CoCVAE5OPAEqASoBNgEjASMBLQEgATEBLQEmAVAiBFEeGxUBURwBSSs9UVEsRUIjQylBJ09RJTUrSEImNk05PjA1Lk5NKi8qLyk0Ryc7LzkkJzItQDI+JAIBShExHQEsAQwdMxMGFwQBFh0hBhEEAgE7LR8BJQEMHSQfFQgGEgQBFioUJBQWEwYaBAIBSg07MAIBQjAhAgEzcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS92YWx1ZV9raW5kcy5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnTAATzRLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMga2VybmVsOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgQXNFeHByZXNzaW9uLAogICAgICAgIEFzeW5jTWFya2VyLAogICAgICAgIEJvdHRvbVR5cGUsCiAgICAgICAgQ2xhc3MsCiAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uLAogICAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEluc3RhbnRpYXRpb24sCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBJbnZvY2F0aW9uRXhwcmVzc2lvbiwKICAgICAgICBMZXQsCiAgICAgICAgTGlzdExpdGVyYWwsCiAgICAgICAgTWFwTGl0ZXJhbCwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBOYW1lLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFByb3BlcnR5R2V0LAogICAgICAgIFByb3BlcnR5U2V0LAogICAgICAgIFJldHVyblN0YXRlbWVudCwKICAgICAgICBTZXRMaXRlcmFsLAogICAgICAgIFN0YXRlbWVudCwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgU3VwZXJNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIFN1cGVyUHJvcGVydHlHZXQsCiAgICAgICAgU3VwZXJQcm9wZXJ0eVNldCwKICAgICAgICBTdXBlcnR5cGUsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZhcmlhYmxlR2V0LAogICAgICAgIFZvaWRUeXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnCiAgICBzaG93IGdldEZyZXNoVHlwZVBhcmFtZXRlcnMsIFN1YnN0aXR1dGlvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvc3JjL2JvdW5kc19jaGVja3MuZGFydCcgc2hvdyBjYWxjdWxhdGVCb3VuZHM7CgppbXBvcnQgJy4uLy4uL2Jhc2UvaW5zdHJ1bWVudGF0aW9uLmRhcnQnCiAgICBzaG93CiAgICAgICAgSW5zdHJ1bWVudGF0aW9uLAogICAgICAgIEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyLAogICAgICAgIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZSwKICAgICAgICBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGVBcmdzOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgVGVtcGxhdGUsCiAgICAgICAgbWVzc2FnZVJldHVybkZyb21Wb2lkRnVuY3Rpb24sCiAgICAgICAgbWVzc2FnZVJldHVybldpdGhvdXRFeHByZXNzaW9uLAogICAgICAgIG1lc3NhZ2VWb2lkRXhwcmVzc2lvbiwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZWRBcmd1bWVudCwKICAgICAgICB0ZW1wbGF0ZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzLAogICAgICAgIHRlbXBsYXRlSW52YWxpZEFzc2lnbm1lbnQsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwciwKICAgICAgICB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbExpc3QsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxNYXAsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxTZXQsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24sCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdE5ld0V4cHIsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCwKICAgICAgICB0ZW1wbGF0ZUludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbiwKICAgICAgICB0ZW1wbGF0ZUludm9rZU5vbkZ1bmN0aW9uLAogICAgICAgIHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MsCiAgICAgICAgdGVtcGxhdGVVbmRlZmluZWRHZXR0ZXIsCiAgICAgICAgdGVtcGxhdGVVbmRlZmluZWRNZXRob2QsCiAgICAgICAgdGVtcGxhdGVVbmRlZmluZWRTZXR0ZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9leHByZXNzaW9uX2dlbmVyYXRvci5kYXJ0JyBzaG93IGJ1aWxkSXNOdWxsOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3NoYWRvd19hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBFeHByZXNzaW9uSnVkZ21lbnQsCiAgICAgICAgU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZSwKICAgICAgICBTaGFkb3dUeXBlSW5mZXJyZXIsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LAogICAgICAgIGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cywKICAgICAgICBnZXRJbmZlcnJlZFR5cGU7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlX2FsZ29yaXRobXMuZGFydCcgc2hvdyBoYXNBbnlUeXBlVmFyaWFibGVzOwoKaW1wb3J0ICcuLi9uYW1lcy5kYXJ0JyBzaG93IGNhbGxOYW1lLCB1bmFyeU1pbnVzTmFtZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuZXhwZWN0ZWQsIHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnaW5mZXJlbmNlX2hlbHBlci5kYXJ0JyBzaG93IEluZmVyZW5jZUhlbHBlcjsKCmltcG9ydCAndHlwZV9jb25zdHJhaW50X2dhdGhlcmVyLmRhcnQnIHNob3cgVHlwZUNvbnN0cmFpbnRHYXRoZXJlcjsKCmltcG9ydCAndHlwZV9pbmZlcmVuY2VfZW5naW5lLmRhcnQnCiAgICBzaG93IEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSwgVHlwZUluZmVyZW5jZUVuZ2luZSwgVmFyaWFuY2U7CgppbXBvcnQgJ3R5cGVfcHJvbW90aW9uLmRhcnQnIHNob3cgVHlwZVByb21vdGVyOwoKaW1wb3J0ICd0eXBlX3NjaGVtYS5kYXJ0JyBzaG93IGlzS25vd24sIFVua25vd25UeXBlOwoKaW1wb3J0ICd0eXBlX3NjaGVtYV9lbGltaW5hdGlvbi5kYXJ0JyBzaG93IGdyZWF0ZXN0Q2xvc3VyZTsKCmltcG9ydCAndHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cKICAgICAgICBnZXROYW1lZFBhcmFtZXRlclR5cGUsCiAgICAgICAgZ2V0UG9zaXRpb25hbFBhcmFtZXRlclR5cGUsCiAgICAgICAgVHlwZVZhcmlhYmxlRWxpbWluYXRvciwKICAgICAgICBUeXBlU2NoZW1hRW52aXJvbm1lbnQ7CgovLy8gR2l2ZW4gYSBbRnVuY3Rpb25Ob2RlXSwgZ2V0cyB0aGUgbmFtZWQgcGFyYW1ldGVyIGlkZW50aWZpZWQgYnkgW25hbWVdLCBvcgovLy8gYG51bGxgIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpWYXJpYWJsZURlY2xhcmF0aW9uIGdldE5hbWVkRm9ybWFsKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwgU3RyaW5nIG5hbWUpIHsKICBmb3IgKHZhciBmb3JtYWwgaW4gZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICBpZiAoZm9ybWFsLm5hbWUgPT0gbmFtZSkgcmV0dXJuIGZvcm1hbDsKICB9CiAgcmV0dXJuIG51bGw7Cn0KCi8vLyBHaXZlbiBhIFtGdW5jdGlvbk5vZGVdLCBnZXRzIHRoZSBbaV10aCBwb3NpdGlvbmFsIGZvcm1hbCBwYXJhbWV0ZXIsIG9yCi8vLyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gcGFyYW1ldGVyIHdpdGggdGhhdCBpbmRleC4KVmFyaWFibGVEZWNsYXJhdGlvbiBnZXRQb3NpdGlvbmFsRm9ybWFsKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwgaW50IGkpIHsKICBpZiAoaSA8IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgcmV0dXJuIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmJvb2wgaXNPdmVybG9hZGFibGVBcml0aG1ldGljT3BlcmF0b3IoU3RyaW5nIG5hbWUpIHsKICByZXR1cm4gaWRlbnRpY2FsKG5hbWUsICcrJykgfHwKICAgICAgaWRlbnRpY2FsKG5hbWUsICctJykgfHwKICAgICAgaWRlbnRpY2FsKG5hbWUsICcqJykgfHwKICAgICAgaWRlbnRpY2FsKG5hbWUsICclJyk7Cn0KCi8vLyBLZWVwcyB0cmFjayBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5uZXJtb3N0IGZ1bmN0aW9uIG9yIGNsb3N1cmUgYmVpbmcKLy8vIGluZmVycmVkLgpjbGFzcyBDbG9zdXJlQ29udGV4dCB7CiAgZmluYWwgYm9vbCBpc0FzeW5jOwoKICBmaW5hbCBib29sIGlzR2VuZXJhdG9yOwoKICAvLy8gVGhlIHR5cGluZyBleHBlY3RhdGlvbiBmb3IgdGhlIHN1YmV4cHJlc3Npb24gb2YgYSBgcmV0dXJuYCBvciBgeWllbGRgCiAgLy8vIHN0YXRlbWVudCBpbnNpZGUgdGhlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBGb3Igbm9uLWdlbmVyYXRvciBhc3luYyBmdW5jdGlvbnMsIHRoaXMgd2lsbCBiZSBhICJGdXR1cmVPciIgdHlwZSAoc2luY2UKICAvLy8gaXQgaXMgcGVybWlzc2libGUgZm9yIHN1Y2ggYSBmdW5jdGlvbiB0byByZXR1cm4gZWl0aGVyIGEgZGlyZWN0IHZhbHVlIG9yCiAgLy8vIGEgZnV0dXJlKS4KICAvLy8KICAvLy8gRm9yIGdlbmVyYXRvciBmdW5jdGlvbnMgY29udGFpbmluZyBhIGB5aWVsZCpgIHN0YXRlbWVudCwgdGhlIGV4cGVjdGVkIHR5cGUKICAvLy8gZm9yIHRoZSBzdWJleHByZXNzaW9uIG9mIHRoZSBgeWllbGQqYCBzdGF0ZW1lbnQgaXMgdGhlIHJlc3VsdCBvZiB3cmFwcGluZwogIC8vLyB0aGlzIHR5cGluZyBleHBlY3RhdGlvbiBpbiBgU3RyZWFtYCBvciBgSXRlcmF0b3JgLCBhcyBhcHByb3ByaWF0ZS4KICBmaW5hbCBEYXJ0VHlwZSByZXR1cm5PcllpZWxkQ29udGV4dDsKCiAgZmluYWwgRGFydFR5cGUgZGVjbGFyZWRSZXR1cm5UeXBlOwoKICBmaW5hbCBib29sIF9uZWVkVG9JbmZlclJldHVyblR5cGU7CgogIC8vLyBUaGUgdHlwZSB0aGF0IGFjdHVhbGx5IGFwcGVhcmVkIGFzIHRoZSBzdWJleHByZXNzaW9uIG9mIGByZXR1cm5gIG9yCiAgLy8vIGB5aWVsZGAgc3RhdGVtZW50cyBpbnNpZGUgdGhlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBGb3Igbm9uLWdlbmVyYXRvciBhc3luYyBmdW5jdGlvbnMsIHRoaXMgaXMgdGhlICJ1bndyYXBwZWQiIHR5cGUgKGUuZy4gaWYKICAvLy8gdGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBgRnV0dXJlPGludD5gLCB0aGlzIGlzIGBpbnRgKS4KICAvLy8KICAvLy8gRm9yIGdlbmVyYXRvciBmdW5jdGlvbnMgY29udGFpbmluZyBhIGB5aWVsZCpgIHN0YXRlbWVudCwgdGhlIHR5cGUgdGhhdAogIC8vLyBhcHBlYXJlZCBhcyB0aGUgc3ViZXhwcmVzc2lvbiBvZiB0aGUgYHlpZWxkKmAgc3RhdGVtZW50IHdhcyB0aGUgcmVzdWx0IG9mCiAgLy8vIHdyYXBwaW5nIHRoaXMgdHlwZSBpbiBgU3RyZWFtYCBvciBgSXRlcmF0b3JgLCBhcyBhcHByb3ByaWF0ZS4KICBEYXJ0VHlwZSBfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGFuIGFycm93IGZ1bmN0aW9uLgogIGJvb2wgaXNBcnJvdzsKCiAgLy8vIEEgbGlzdCBvZiByZXR1cm4gc3RhdGVtZW50cyBpbiBmdW5jdGlvbnMgd2hvc2UgcmV0dXJuIHR5cGUgaXMgYmVpbmcKICAvLy8gaW5mZXJyZWQuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5zIGFyZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhZnRlciB0aGUgcmV0dXJuIHR5cGUgaXMgaW5mZXJyZWQuCiAgTGlzdDxSZXR1cm5TdGF0ZW1lbnQ+IHJldHVyblN0YXRlbWVudHM7CgogIC8vLyBBIGxpc3Qgb2YgcmV0dXJuIGV4cHJlc3Npb24gdHlwZXMgaW4gZnVuY3Rpb25zIHdob3NlIHJldHVybiB0eXBlIGlzCiAgLy8vIGJlaW5nIGluZmVycmVkLgogIExpc3Q8RGFydFR5cGU+IHJldHVybkV4cHJlc3Npb25UeXBlczsKCiAgZmFjdG9yeSBDbG9zdXJlQ29udGV4dChUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyLCBBc3luY01hcmtlciBhc3luY01hcmtlciwKICAgICAgRGFydFR5cGUgcmV0dXJuQ29udGV4dCwgYm9vbCBuZWVkVG9JbmZlclJldHVyblR5cGUpIHsKICAgIGFzc2VydChyZXR1cm5Db250ZXh0ICE9IG51bGwpOwogICAgRGFydFR5cGUgZGVjbGFyZWRSZXR1cm5UeXBlID0KICAgICAgICBncmVhdGVzdENsb3N1cmUoaW5mZXJyZXIuY29yZVR5cGVzLCByZXR1cm5Db250ZXh0KTsKICAgIGJvb2wgaXNBc3luYyA9IGFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLkFzeW5jIHx8CiAgICAgICAgYXN5bmNNYXJrZXIgPT0gQXN5bmNNYXJrZXIuQXN5bmNTdGFyOwogICAgYm9vbCBpc0dlbmVyYXRvciA9IGFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLlN5bmNTdGFyIHx8CiAgICAgICAgYXN5bmNNYXJrZXIgPT0gQXN5bmNNYXJrZXIuQXN5bmNTdGFyOwogICAgaWYgKGlzR2VuZXJhdG9yKSB7CiAgICAgIGlmIChpc0FzeW5jKSB7CiAgICAgICAgcmV0dXJuQ29udGV4dCA9IGluZmVycmVyLmdldFR5cGVBcmd1bWVudE9mKAogICAgICAgICAgICByZXR1cm5Db250ZXh0LCBpbmZlcnJlci5jb3JlVHlwZXMuc3RyZWFtQ2xhc3MpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybkNvbnRleHQgPSBpbmZlcnJlci5nZXRUeXBlQXJndW1lbnRPZigKICAgICAgICAgICAgcmV0dXJuQ29udGV4dCwgaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzQXN5bmMpIHsKICAgICAgcmV0dXJuQ29udGV4dCA9IGluZmVycmVyLndyYXBGdXR1cmVPclR5cGUoCiAgICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQudW5mdXR1cmVUeXBlKHJldHVybkNvbnRleHQpKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ2xvc3VyZUNvbnRleHQuXyhpc0FzeW5jLCBpc0dlbmVyYXRvciwgcmV0dXJuQ29udGV4dCwKICAgICAgICBkZWNsYXJlZFJldHVyblR5cGUsIG5lZWRUb0luZmVyUmV0dXJuVHlwZSk7CiAgfQoKICBDbG9zdXJlQ29udGV4dC5fKHRoaXMuaXNBc3luYywgdGhpcy5pc0dlbmVyYXRvciwgdGhpcy5yZXR1cm5PcllpZWxkQ29udGV4dCwKICAgICAgdGhpcy5kZWNsYXJlZFJldHVyblR5cGUsIHRoaXMuX25lZWRUb0luZmVyUmV0dXJuVHlwZSkgewogICAgaWYgKF9uZWVkVG9JbmZlclJldHVyblR5cGUpIHsKICAgICAgcmV0dXJuU3RhdGVtZW50cyA9IFtdOwogICAgICByZXR1cm5FeHByZXNzaW9uVHlwZXMgPSBbXTsKICAgIH0KICB9CgogIGJvb2wgY2hlY2tWYWxpZFJldHVybihUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyLCBEYXJ0VHlwZSByZXR1cm5UeXBlLAogICAgICBSZXR1cm5TdGF0ZW1lbnQgc3RhdGVtZW50LCBEYXJ0VHlwZSBleHByZXNzaW9uVHlwZSkgewogICAgLy8gVGhlIHJ1bGVzIGZvciB2YWxpZCByZXR1cm5zIGZvciBmdW5jdGlvbnMgd2l0aCByZXR1cm4gdHlwZSBUIGFuZCBwb3NzaWJseQogICAgLy8gYSByZXR1cm4gZXhwcmVzc2lvbiB3aXRoIHN0YXRpYyB0eXBlIFMuCiAgICB2YXIgZmxhdHRlbmVkUmV0dXJuVHlwZSA9IGlzQXN5bmMKICAgICAgICA/IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUocmV0dXJuVHlwZSkKICAgICAgICA6IHJldHVyblR5cGU7CiAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24gPT0gbnVsbCkgewogICAgICAvLyBTeW5jOiByZXR1cm47IGlzIGEgdmFsaWQgcmV0dXJuIGlmIFQgaXMgdm9pZCwgZHluYW1pYywgb3IgTnVsbC4KICAgICAgLy8gQXN5bmM6IHJldHVybjsgaXMgYSB2YWxpZCByZXR1cm4gaWYgZmxhdHRlbihUKSBpcyB2b2lkLCBkeW5hbWljLCBvcgogICAgICAvLyBOdWxsLgogICAgICBpZiAoZmxhdHRlbmVkUmV0dXJuVHlwZSBpcyBWb2lkVHlwZSB8fAogICAgICAgICAgZmxhdHRlbmVkUmV0dXJuVHlwZSBpcyBEeW5hbWljVHlwZSB8fAogICAgICAgICAgZmxhdHRlbmVkUmV0dXJuVHlwZSA9PSBpbmZlcnJlci5jb3JlVHlwZXMubnVsbENsYXNzLnJhd1R5cGUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA9IGluZmVycmVyLmhlbHBlci53cmFwSW5Qcm9ibGVtKAogICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkuLmZpbGVPZmZzZXQgPSBzdGF0ZW1lbnQuZmlsZU9mZnNldCwKICAgICAgICAgIG1lc3NhZ2VSZXR1cm5XaXRob3V0RXhwcmVzc2lvbiwKICAgICAgICAgIG5vTGVuZ3RoKQogICAgICAgIC4ucGFyZW50ID0gc3RhdGVtZW50OwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gQXJyb3cgZnVuY3Rpb25zIGFyZSB2YWxpZCBpZjoKICAgIC8vIFN5bmM6IFQgaXMgdm9pZCBvciByZXR1cm4gZXhwOyBpcyBhIHZhbGlkIGZvciBhIGJsb2NrLWJvZGllZCBmdW5jdGlvbi4KICAgIC8vIEFzeW5jOiBmbGF0dGVuKFQpIGlzIHZvaWQgb3IgcmV0dXJuIGV4cDsgaXMgdmFsaWQgZm9yIGEgYmxvY2stYm9kaWVkCiAgICAvLyBmdW5jdGlvbi4KICAgIGlmIChpc0Fycm93ICYmIGZsYXR0ZW5lZFJldHVyblR5cGUgaXMgVm9pZFR5cGUpIHJldHVybiB0cnVlOwoKICAgIC8vIFN5bmM6IGludmFsaWQgaWYgVCBpcyB2b2lkIGFuZCBTIGlzIG5vdCB2b2lkLCBkeW5hbWljLCBvciBOdWxsCiAgICAvLyBBc3luYzogaW52YWxpZCBpZiBUIGlzIHZvaWQgYW5kIGZsYXR0ZW4oUykgaXMgbm90IHZvaWQsIGR5bmFtaWMsIG9yIE51bGwuCiAgICB2YXIgZmxhdHRlbmVkRXhwcmVzc2lvblR5cGUgPSBpc0FzeW5jCiAgICAgICAgPyBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQudW5mdXR1cmVUeXBlKGV4cHJlc3Npb25UeXBlKQogICAgICAgIDogZXhwcmVzc2lvblR5cGU7CiAgICBpZiAocmV0dXJuVHlwZSBpcyBWb2lkVHlwZSAmJgogICAgICAgIGZsYXR0ZW5lZEV4cHJlc3Npb25UeXBlIGlzISBWb2lkVHlwZSAmJgogICAgICAgIGZsYXR0ZW5lZEV4cHJlc3Npb25UeXBlIGlzISBEeW5hbWljVHlwZSAmJgogICAgICAgIGZsYXR0ZW5lZEV4cHJlc3Npb25UeXBlICE9IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MucmF3VHlwZSkgewogICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA9IGluZmVycmVyLmhlbHBlci53cmFwSW5Qcm9ibGVtKAogICAgICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24sIG1lc3NhZ2VSZXR1cm5Gcm9tVm9pZEZ1bmN0aW9uLCBub0xlbmd0aCkKICAgICAgICAuLnBhcmVudCA9IHN0YXRlbWVudDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIFN5bmM6IGludmFsaWQgaWYgUyBpcyB2b2lkIGFuZCBUIGlzIG5vdCB2b2lkLCBkeW5hbWljLCBvciBOdWxsLgogICAgLy8gQXN5bmM6IGludmFsaWQgaWYgZmxhdHRlbihTKSBpcyB2b2lkIGFuZCBmbGF0dGVuKFQpIGlzIG5vdCB2b2lkLCBkeW5hbWljLAogICAgLy8gb3IgTnVsbC4KICAgIGlmIChmbGF0dGVuZWRFeHByZXNzaW9uVHlwZSBpcyBWb2lkVHlwZSAmJgogICAgICAgIGZsYXR0ZW5lZFJldHVyblR5cGUgaXMhIFZvaWRUeXBlICYmCiAgICAgICAgZmxhdHRlbmVkUmV0dXJuVHlwZSBpcyEgRHluYW1pY1R5cGUgJiYKICAgICAgICBmbGF0dGVuZWRSZXR1cm5UeXBlICE9IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MucmF3VHlwZSkgewogICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA9IGluZmVycmVyLmhlbHBlcgogICAgICAgICAgLndyYXBJblByb2JsZW0oc3RhdGVtZW50LmV4cHJlc3Npb24sIG1lc3NhZ2VWb2lkRXhwcmVzc2lvbiwgbm9MZW5ndGgpCiAgICAgICAgICAgIC4ucGFyZW50ID0gc3RhdGVtZW50OwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gVGhlIGNhbGxlciB3aWxsIGNoZWNrIHRoYXQgdGhlIHJldHVybiBleHByZXNzaW9uIGlzIGFzc2lnbmFibGUgdG8gdGhlCiAgICAvLyByZXR1cm4gdHlwZS4KICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8vIFVwZGF0ZXMgdGhlIGluZmVycmVkIHJldHVybiB0eXBlIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBhIHJldHVybgogIC8vLyBzdGF0ZW1lbnQgcmV0dXJuaW5nIHRoZSBnaXZlbiBbdHlwZV0uCiAgdm9pZCBoYW5kbGVSZXR1cm4oVHlwZUluZmVycmVySW1wbCBpbmZlcnJlciwgUmV0dXJuU3RhdGVtZW50IHN0YXRlbWVudCwKICAgICAgRGFydFR5cGUgdHlwZSwgYm9vbCBpc0Fycm93KSB7CiAgICBpZiAoaXNHZW5lcmF0b3IpIHJldHVybjsKICAgIC8vIFRoZSBmaXJzdCByZXR1cm4gd2Ugc2VlIHRlbGxzIHVzIGlmIHdlIGhhdmUgYW4gYXJyb3cgZnVuY3Rpb24uCiAgICBpZiAodGhpcy5pc0Fycm93ID09IG51bGwpIHsKICAgICAgdGhpcy5pc0Fycm93ID0gaXNBcnJvdzsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCh0aGlzLmlzQXJyb3cgPT0gaXNBcnJvdyk7CiAgICB9CgogICAgaWYgKF9uZWVkVG9JbmZlclJldHVyblR5cGUpIHsKICAgICAgLy8gQWRkIHRoZSByZXR1cm4gdG8gYSBsaXN0IHRvIGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGFmdGVyIHdlJ3ZlCiAgICAgIC8vIGluZmVycmVkIHRoZSByZXR1cm4gdHlwZS4KICAgICAgcmV0dXJuU3RhdGVtZW50cy5hZGQoc3RhdGVtZW50KTsKICAgICAgcmV0dXJuRXhwcmVzc2lvblR5cGVzLmFkZCh0eXBlKTsKCiAgICAgIC8vIFRoZSByZXR1cm4gZXhwcmVzc2lvbiBoYXMgdG8gYmUgYXNzaWduYWJsZSB0byB0aGUgcmV0dXJuIHR5cGUKICAgICAgLy8gZXhwZWN0YXRpb24gZnJvbSB0aGUgZG93bndhcmRzIGluZmVyZW5jZSBjb250ZXh0LgogICAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24gIT0gbnVsbCAmJgogICAgICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShyZXR1cm5PcllpZWxkQ29udGV4dCwgdHlwZSwKICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24sIHN0YXRlbWVudC5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICBpc1JldHVybkZyb21Bc3luYzogaXNBc3luYywgaXNWb2lkQWxsb3dlZDogdHJ1ZSkgIT0KICAgICAgICAgICAgICBudWxsKSB7CiAgICAgICAgLy8gTm90IGFzc2lnbmFibGUsIHVzZSB0aGUgZXhwZWN0YXRpb24uCiAgICAgICAgdHlwZSA9IGdyZWF0ZXN0Q2xvc3VyZShpbmZlcnJlci5jb3JlVHlwZXMsIHJldHVybk9yWWllbGRDb250ZXh0KTsKICAgICAgfQogICAgICB2YXIgdW53cmFwcGVkVHlwZSA9IHR5cGU7CiAgICAgIGlmIChpc0FzeW5jKSB7CiAgICAgICAgdW53cmFwcGVkVHlwZSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUodHlwZSk7CiAgICAgIH0KICAgICAgaWYgKF9pbmZlcnJlZFVud3JhcHBlZFJldHVybk9yWWllbGRUeXBlID09IG51bGwpIHsKICAgICAgICBfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZSA9IHVud3JhcHBlZFR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgLmdldFN0YW5kYXJkVXBwZXJCb3VuZCgKICAgICAgICAgICAgICAgIF9pbmZlcnJlZFVud3JhcHBlZFJldHVybk9yWWllbGRUeXBlLCB1bndyYXBwZWRUeXBlKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gSWYgd2UgYXJlIG5vdCBpbmZlcnJpbmcgYSB0eXBlIHdlIGNhbiBpbW1lZGlhdGVseSBjaGVjayB0aGF0IHRoZSByZXR1cm4KICAgIC8vIGlzIHZhbGlkLgogICAgaWYgKGNoZWNrVmFsaWRSZXR1cm4oaW5mZXJyZXIsIGRlY2xhcmVkUmV0dXJuVHlwZSwgc3RhdGVtZW50LCB0eXBlKSAmJgogICAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShyZXR1cm5PcllpZWxkQ29udGV4dCwgdHlwZSwKICAgICAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLCBzdGF0ZW1lbnQuZmlsZU9mZnNldCwKICAgICAgICAgIGlzUmV0dXJuRnJvbUFzeW5jOiBpc0FzeW5jLCBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIH0KICB9CgogIHZvaWQgaGFuZGxlWWllbGQoVHlwZUluZmVycmVySW1wbCBpbmZlcnJlciwgYm9vbCBpc1lpZWxkU3RhciwgRGFydFR5cGUgdHlwZSwKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBpbnQgZmlsZU9mZnNldCkgewogICAgaWYgKCFpc0dlbmVyYXRvcikgcmV0dXJuOwogICAgdmFyIGV4cGVjdGVkVHlwZSA9IGlzWWllbGRTdGFyCiAgICAgICAgPyBfd3JhcEFzeW5jT3JHZW5lcmF0b3IoaW5mZXJyZXIsIHJldHVybk9yWWllbGRDb250ZXh0KQogICAgICAgIDogcmV0dXJuT3JZaWVsZENvbnRleHQ7CiAgICBpZiAoaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShleHBlY3RlZFR5cGUsIHR5cGUsIGV4cHJlc3Npb24sIGZpbGVPZmZzZXQsCiAgICAgICAgICAgIGlzUmV0dXJuRnJvbUFzeW5jOiBpc0FzeW5jKSAhPQogICAgICAgIG51bGwpIHsKICAgICAgdHlwZSA9IGdyZWF0ZXN0Q2xvc3VyZShpbmZlcnJlci5jb3JlVHlwZXMsIGV4cGVjdGVkVHlwZSk7CiAgICB9CiAgICBpZiAoX25lZWRUb0luZmVyUmV0dXJuVHlwZSkgewogICAgICB2YXIgdW53cmFwcGVkVHlwZSA9IHR5cGU7CiAgICAgIGlmIChpc1lpZWxkU3RhcikgewogICAgICAgIHVud3JhcHBlZFR5cGUgPSBpbmZlcnJlci5nZXREZXJpdmVkVHlwZUFyZ3VtZW50T2YoCiAgICAgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAgICAgaXNBc3luYwogICAgICAgICAgICAgICAgICAgID8gaW5mZXJyZXIuY29yZVR5cGVzLnN0cmVhbUNsYXNzCiAgICAgICAgICAgICAgICAgICAgOiBpbmZlcnJlci5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcykgPz8KICAgICAgICAgICAgdHlwZTsKICAgICAgfQogICAgICBpZiAoX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUgPT0gbnVsbCkgewogICAgICAgIF9pbmZlcnJlZFVud3JhcHBlZFJldHVybk9yWWllbGRUeXBlID0gdW53cmFwcGVkVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuZ2V0U3RhbmRhcmRVcHBlckJvdW5kKAogICAgICAgICAgICAgICAgX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUsIHVud3JhcHBlZFR5cGUpOwogICAgICB9CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBpbmZlclJldHVyblR5cGUoVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgYXNzZXJ0KF9uZWVkVG9JbmZlclJldHVyblR5cGUpOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0KICAgICAgICBpbmZlcnJlci5pbmZlclJldHVyblR5cGUoX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUpOwogICAgaWYgKCFpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAuaXNTdWJ0eXBlT2YoaW5mZXJyZWRUeXBlLCByZXR1cm5PcllpZWxkQ29udGV4dCkpIHsKICAgICAgLy8gSWYgdGhlIGluZmVycmVkIHJldHVybiB0eXBlIGlzbid0IGEgc3VidHlwZSBvZiB0aGUgY29udGV4dCwgd2UgdXNlIHRoZQogICAgICAvLyBjb250ZXh0LgogICAgICBpbmZlcnJlZFR5cGUgPSBncmVhdGVzdENsb3N1cmUoaW5mZXJyZXIuY29yZVR5cGVzLCByZXR1cm5PcllpZWxkQ29udGV4dCk7CiAgICB9CgogICAgaW5mZXJyZWRUeXBlID0gX3dyYXBBc3luY09yR2VuZXJhdG9yKGluZmVycmVyLCBpbmZlcnJlZFR5cGUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXR1cm5TdGF0ZW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGNoZWNrVmFsaWRSZXR1cm4oaW5mZXJyZXIsIGluZmVycmVkVHlwZSwgcmV0dXJuU3RhdGVtZW50c1tpXSwKICAgICAgICAgIHJldHVybkV4cHJlc3Npb25UeXBlc1tpXSk7CiAgICB9CgogICAgcmV0dXJuIGluZmVycmVkVHlwZTsKICB9CgogIERhcnRUeXBlIF93cmFwQXN5bmNPckdlbmVyYXRvcihUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAoaXNHZW5lcmF0b3IpIHsKICAgICAgaWYgKGlzQXN5bmMpIHsKICAgICAgICByZXR1cm4gaW5mZXJyZXIud3JhcFR5cGUodHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLnN0cmVhbUNsYXNzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gaW5mZXJyZXIud3JhcFR5cGUodHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzQXN5bmMpIHsKICAgICAgcmV0dXJuIGluZmVycmVyLndyYXBGdXR1cmVUeXBlKHR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CiAgfQp9CgovLy8gRW51bSBkZW5vdGluZyB0aGUga2luZHMgb2YgY29udHJhdmFyaWFuY2UgY2hlY2sgdGhhdCBtaWdodCBuZWVkIHRvIGJlCi8vLyBpbnNlcnRlZCBmb3IgYSBtZXRob2QgY2FsbC4KZW51bSBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZCB7CiAgLy8vIE5vIGNvbnRyYXZhcmlhbmNlIGNoZWNrIGlzIG5lZWRlZC4KICBub25lLAoKICAvLy8gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBtZXRob2QgY2FsbCBuZWVkcyB0byBiZSBjaGVja2VkLgogIGNoZWNrTWV0aG9kUmV0dXJuLAoKICAvLy8gVGhlIG1ldGhvZCBjYWxsIG5lZWRzIHRvIGJlIGRlc3VnYXJlZCBpbnRvIGEgZ2V0dGVyIGNhbGwsIGZvbGxvd2VkIGJ5IGFuCiAgLy8vICJhcyIgY2hlY2ssIGZvbGxvd2VkIGJ5IGFuIGludm9jYXRpb24gb2YgdGhlIHJlc3VsdGluZyBmdW5jdGlvbiBvYmplY3QuCiAgY2hlY2tHZXR0ZXJSZXR1cm4sCn0KCi8vLyBLZWVwcyB0cmFjayBvZiB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoZSB0eXBlIGluZmVyZW5jZSB0aGF0IG9jY3VycyBkdXJpbmcKLy8vIGNvbXBpbGF0aW9uIG9mIGEgc2luZ2xlIG1ldGhvZCBib2R5IG9yIHRvcCBsZXZlbCBpbml0aWFsaXplci4KLy8vCi8vLyBUaGlzIGNsYXNzIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlIGZvciB1c2UgYnkgY2xpZW50cyBvZiB0eXBlIGluZmVyZW5jZQovLy8gKGUuZy4gQm9keUJ1aWxkZXIpLiAgRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBkZXJpdmUgZnJvbSBbVHlwZUluZmVycmVySW1wbF0uCmFic3RyYWN0IGNsYXNzIFR5cGVJbmZlcnJlciB7CiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKCiAgVHlwZUluZmVycmVyLnByaXZhdGUodGhpcy5jb3JlVHlwZXMpOwoKICBmYWN0b3J5IFR5cGVJbmZlcnJlcigKICAgICAgU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZSBlbmdpbmUsCiAgICAgIFVyaSB1cmksCiAgICAgIGJvb2wgdG9wTGV2ZWwsCiAgICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpID0gU2hhZG93VHlwZUluZmVycmVyLnByaXZhdGU7CgogIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGdldCBsaWJyYXJ5OwoKICAvLy8gR2V0cyB0aGUgW1R5cGVQcm9tb3Rlcl0gdGhhdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHR5cGUgcHJvbW90aW9uIHdpdGhpbgogIC8vLyB0aGlzIG1ldGhvZCBib2R5IG9yIGluaXRpYWxpemVyLgogIFR5cGVQcm9tb3RlciBnZXQgdHlwZVByb21vdGVyOwoKICAvLy8gR2V0cyB0aGUgW1R5cGVTY2hlbWFFbnZpcm9ubWVudF0gYmVpbmcgdXNlZCBmb3IgdHlwZSBpbmZlcmVuY2UuCiAgVHlwZVNjaGVtYUVudmlyb25tZW50IGdldCB0eXBlU2NoZW1hRW52aXJvbm1lbnQ7CgogIC8vLyBUaGUgVVJJIG9mIHRoZSBjb2RlIGZvciB3aGljaCB0eXBlIGluZmVyZW5jZSBpcyBjdXJyZW50bHkgYmVpbmcKICAvLy8gcGVyZm9ybWVkLS10aGlzIGlzIHVzZWQgZm9yIHRlc3RpbmcuCiAgVXJpIGdldCB1cmk7CgogIC8vLyBQZXJmb3JtcyBmdWxsIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBmaWVsZCBpbml0aWFsaXplci4KICB2b2lkIGluZmVyRmllbGRJbml0aWFsaXplcihJbmZlcmVuY2VIZWxwZXIgaGVscGVyLCBEYXJ0VHlwZSBkZWNsYXJlZFR5cGUsCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGluaXRpYWxpemVyKTsKCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBmdW5jdGlvbiBib2R5LgogIHZvaWQgaW5mZXJGdW5jdGlvbkJvZHkoSW5mZXJlbmNlSGVscGVyIGhlbHBlciwgRGFydFR5cGUgcmV0dXJuVHlwZSwKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsIFN0YXRlbWVudCBib2R5KTsKCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBjb25zdHJ1Y3RvciBpbml0aWFsaXplci4KICB2b2lkIGluZmVySW5pdGlhbGl6ZXIoSW5mZXJlbmNlSGVscGVyIGhlbHBlciwga2VybmVsLkluaXRpYWxpemVyIGluaXRpYWxpemVyKTsKCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBtZXRhZGF0YSBhbm5vdGF0aW9ucy4KICB2b2lkIGluZmVyTWV0YWRhdGEoCiAgICAgIEluZmVyZW5jZUhlbHBlciBoZWxwZXIsIExpc3Q8a2VybmVsLkV4cHJlc3Npb24+IGFubm90YXRpb25zKTsKCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBtZXRhZGF0YSBhbm5vdGF0aW9ucyBrZWVwaW5nIHRoZQogIC8vLyBleGlzdGluZyBoZWxwZXIgaWYgcG9zc2libGUuCiAgdm9pZCBpbmZlck1ldGFkYXRhS2VlcGluZ0hlbHBlcihMaXN0PGtlcm5lbC5FeHByZXNzaW9uPiBhbm5vdGF0aW9ucyk7CgogIC8vLyBQZXJmb3JtcyB0eXBlIGluZmVyZW5jZSBvbiB0aGUgZ2l2ZW4gZnVuY3Rpb24gcGFyYW1ldGVyIGluaXRpYWxpemVyCiAgLy8vIGV4cHJlc3Npb24uCiAgdm9pZCBpbmZlclBhcmFtZXRlckluaXRpYWxpemVyKEluZmVyZW5jZUhlbHBlciBoZWxwZXIsCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGluaXRpYWxpemVyLCBEYXJ0VHlwZSBkZWNsYXJlZFR5cGUpOwp9CgovLy8gRGVyaXZlZCBjbGFzcyBjb250YWluaW5nIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIFtUeXBlSW5mZXJyZXJdLgovLy8KLy8vIFRoaXMgY2xhc3MgY29udGFpbnMgYXMgbXVjaCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdHlwZSBpbmZlcmVuY2UgYXMKLy8vIHBvc3NpYmxlIHdpdGhvdXQga25vd2luZyB0aGUgaWRlbnRpdHkgb2YgdGhlIHR5cGUgcGFyYW1ldGVycy4gIEl0IGRlZmVycyB0bwovLy8gYWJzdHJhY3QgbWV0aG9kcyBmb3IgZXZlcnl0aGluZyBlbHNlLgphYnN0cmFjdCBjbGFzcyBUeXBlSW5mZXJyZXJJbXBsIGV4dGVuZHMgVHlwZUluZmVycmVyIHsKICAvLy8gTWFya2VyIG9iamVjdCB0byBpbmRpY2F0ZSB0aGF0IGEgZnVuY3Rpb24gdGFrZXMgYW4gdW5rbm93biBudW1iZXIKICAvLy8gb2YgYXJndW1lbnRzLgogIHN0YXRpYyBmaW5hbCBGdW5jdGlvblR5cGUgdW5rbm93bkZ1bmN0aW9uID0KICAgICAgbmV3IEZ1bmN0aW9uVHlwZShjb25zdCBbXSwgY29uc3QgRHluYW1pY1R5cGUoKSk7CgogIGZpbmFsIFR5cGVJbmZlcmVuY2VFbmdpbmUgZW5naW5lOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbnN0cnVjdCB3ZSBhcmUgY3VycmVudGx5IHBlcmZvcm1pbmcgaW5mZXJlbmNlIGZvcgogIC8vLyBpcyBvdXRzaWRlIG9mIGEgbWV0aG9kIGJvZHksIGFuZCBoZW5jZSB0b3AgbGV2ZWwgdHlwZSBpbmZlcmVuY2UgcnVsZXMKICAvLy8gc2hvdWxkIGFwcGx5LgogIGZpbmFsIGJvb2wgaXNUb3BMZXZlbDsKCiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHk7CgogIGZpbmFsIEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb247CgogIGZpbmFsIFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQ7CgogIGZpbmFsIEludGVyZmFjZVR5cGUgdGhpc1R5cGU7CgogIEBvdmVycmlkZQogIGZpbmFsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnk7CgogIGZpbmFsIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkVHlwZXNNYXAgPSA8VHJlZU5vZGUsIERhcnRUeXBlPnt9OwoKICBJbmZlcmVuY2VIZWxwZXIgaGVscGVyOwoKICAvLy8gQ29udGV4dCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgY2xvc3VyZSwgb3IgYG51bGxgIGlmIHdlIGFyZSBub3QKICAvLy8gaW5zaWRlIGEgY2xvc3VyZS4KICBDbG9zdXJlQ29udGV4dCBjbG9zdXJlQ29udGV4dDsKCiAgLy8vIFRoZSBbU3Vic3RpdHV0aW9uXSBpbmZlcnJlZCBieSB0aGUgbGFzdCBbaW5mZXJJbnZvY2F0aW9uXSwgb3IgYG51bGxgIGlmCiAgLy8vIHRoZSBsYXN0IGludm9jYXRpb24gZGlkbid0IHJlcXVpcmUgYW55IGluZmVyZW5jZS4KICBTdWJzdGl0dXRpb24gbGFzdEluZmVycmVkU3Vic3RpdHV0aW9uOwoKICAvLy8gVGhlIFtGdW5jdGlvblR5cGVdIG9mIHRoZSBjYWxsZWUgaW4gdGhlIGxhc3QgW2luZmVySW52b2NhdGlvbl0sIG9yIGBudWxsYAogIC8vLyBpZiB0aGUgbGFzdCBpbnZvY2F0aW9uIGRpZG4ndCByZXF1aXJlIGFueSBpbmZlcmVuY2UuCiAgRnVuY3Rpb25UeXBlIGxhc3RDYWxsZWVUeXBlOwoKICBUeXBlSW5mZXJyZXJJbXBsLnByaXZhdGUoCiAgICAgIHRoaXMuZW5naW5lLCB0aGlzLnVyaSwgYm9vbCB0b3BMZXZlbCwgdGhpcy50aGlzVHlwZSwgdGhpcy5saWJyYXJ5KQogICAgICA6IGFzc2VydCgodG9wTGV2ZWwgJiYgbGlicmFyeSA9PSBudWxsKSB8fCAoIXRvcExldmVsICYmIGxpYnJhcnkgIT0gbnVsbCkpLAogICAgICAgIGNsYXNzSGllcmFyY2h5ID0gZW5naW5lLmNsYXNzSGllcmFyY2h5LAogICAgICAgIGluc3RydW1lbnRhdGlvbiA9IHRvcExldmVsID8gbnVsbCA6IGVuZ2luZS5pbnN0cnVtZW50YXRpb24sCiAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50ID0gZW5naW5lLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwKICAgICAgICBpc1RvcExldmVsID0gdG9wTGV2ZWwsCiAgICAgICAgc3VwZXIucHJpdmF0ZShlbmdpbmUuY29yZVR5cGVzKTsKCiAgRGFydFR5cGUgc3RvcmVJbmZlcnJlZFR5cGUoVHJlZU5vZGUgbm9kZSwgRGFydFR5cGUgdHlwZSkgewogICAgaWYgKG5vZGUgaXMgRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgIHJldHVybiBub2RlLmluZmVycmVkVHlwZSA9IHR5cGU7CiAgICB9IGVsc2UgewogICAgICBpZiAoaW5mZXJyZWRUeXBlc01hcC5jb250YWluc0tleShub2RlKSkgewogICAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBpbmZlcnJlZFR5cGVzTWFwW25vZGVdLCAiJHtub2RlLnJ1bnRpbWVUeXBlfSIpLAogICAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIHVyaSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZmVycmVkVHlwZXNNYXBbbm9kZV0gPSB0eXBlOwogICAgfQogIH0KCiAgRGFydFR5cGUgcmVhZEluZmVycmVkVHlwZShUcmVlTm9kZSBub2RlKSB7CiAgICBpZiAoIWluZmVycmVkVHlwZXNNYXAuY29udGFpbnNLZXkobm9kZSkgJiYgIWlzVG9wTGV2ZWwpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKCIke25vZGUucnVudGltZVR5cGV9IiksCiAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICB1cmkpOwogICAgfQogICAgcmV0dXJuIGluZmVycmVkVHlwZXNNYXBbbm9kZV07CiAgfQoKICAvLy8gR2V0cyB0aGUgdHlwZSBwcm9tb3RlciB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHByb21vdGUgdHlwZXMgZHVyaW5nCiAgLy8vIGluZmVyZW5jZS4KICBUeXBlUHJvbW90ZXIgZ2V0IHR5cGVQcm9tb3RlcjsKCiAgYm9vbCBpc0RvdWJsZUNvbnRleHQoRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIC8vIEEgY29udGV4dCBpcyBhIGRvdWJsZSBjb250ZXh0IGlmIGRvdWJsZSBpcyBhc3NpZ25hYmxlIHRvIGl0IGJ1dCBpbnQgaXMKICAgIC8vIG5vdC4gIFRoYXQgaXMgdGhlIHR5cGUgY29udGV4dCBpcyBhIGRvdWJsZSBjb250ZXh0IGlmIGl0IGlzOgogICAgLy8gICAqIGRvdWJsZQogICAgLy8gICAqIEZ1dHVyZU9yPFQ+IHdoZXJlIFQgaXMgYSBkb3VibGUgY29udGV4dAogICAgLy8KICAgIC8vIFdlIGNoZWNrIGRpcmVjdGx5LCByYXRoZXIgdGhhbiB1c2luZyBpc0Fzc2lnbmFibGUgYmVjYXVzZSBpdCdzIHNpbXBsZXIuCiAgICB3aGlsZSAodHlwZUNvbnRleHQgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIHR5cGVDb250ZXh0LmNsYXNzTm9kZSA9PSBjb3JlVHlwZXMuZnV0dXJlT3JDbGFzcyAmJgogICAgICAgIHR5cGVDb250ZXh0LnR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSB0eXBlQ29udGV4dDsKICAgICAgdHlwZUNvbnRleHQgPSB0eXBlLnR5cGVBcmd1bWVudHMuZmlyc3Q7CiAgICB9CiAgICByZXR1cm4gdHlwZUNvbnRleHQgPT0gY29yZVR5cGVzLmRvdWJsZUNsYXNzLnJhd1R5cGU7CiAgfQoKICBib29sIGlzQXNzaWduYWJsZShEYXJ0VHlwZSBleHBlY3RlZFR5cGUsIERhcnRUeXBlIGFjdHVhbFR5cGUpIHsKICAgIHJldHVybiB0eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoZXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlKSB8fAogICAgICAgIHR5cGVTY2hlbWFFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihhY3R1YWxUeXBlLCBleHBlY3RlZFR5cGUpOwogIH0KCiAgLy8vIENoZWNrcyB3aGV0aGVyIFthY3R1YWxUeXBlXSBjYW4gYmUgYXNzaWduZWQgdG8gdGhlIGdyZWF0ZXN0IGNsb3N1cmUgb2YKICAvLy8gW2V4cGVjdGVkVHlwZV0sIGFuZCBpbnNlcnRzIGFuIGltcGxpY2l0IGRvd25jYXN0IGlmIGFwcHJvcHJpYXRlLgogIEV4cHJlc3Npb24gZW5zdXJlQXNzaWduYWJsZShEYXJ0VHlwZSBleHBlY3RlZFR5cGUsIERhcnRUeXBlIGFjdHVhbFR5cGUsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgaW50IGZpbGVPZmZzZXQsCiAgICAgIHtib29sIGlzUmV0dXJuRnJvbUFzeW5jOiBmYWxzZSwKICAgICAgYm9vbCBpc1ZvaWRBbGxvd2VkOiBmYWxzZSwKICAgICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSwgRGFydFR5cGUpPiB0ZW1wbGF0ZX0pIHsKICAgIGFzc2VydChleHBlY3RlZFR5cGUgIT0gbnVsbCk7CiAgICBleHBlY3RlZFR5cGUgPSBncmVhdGVzdENsb3N1cmUoY29yZVR5cGVzLCBleHBlY3RlZFR5cGUpOwoKICAgIERhcnRUeXBlIGluaXRpYWxFeHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGU7CiAgICBpZiAoaXNSZXR1cm5Gcm9tQXN5bmMgJiYgIWlzQXNzaWduYWJsZShleHBlY3RlZFR5cGUsIGFjdHVhbFR5cGUpKSB7CiAgICAgIC8vIElmIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiBpcyBhc3luYywgdGhlIGV4cGVjdGVkIHJldHVybiB0eXBlIGhhcyB0aGUKICAgICAgLy8gc2hhcGUgRnV0dXJlT3I8VD4uICBXZSBjaGVjayBib3RoIGJyYW5jaGVzIGZvciBGdXR1cmVPciBoZXJlOiBib3RoIFQKICAgICAgLy8gYW5kIEZ1dHVyZTxUPi4KICAgICAgRGFydFR5cGUgdW5mdXR1cmVkRXhwZWN0ZWRUeXBlID0KICAgICAgICAgIHR5cGVTY2hlbWFFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUoZXhwZWN0ZWRUeXBlKTsKICAgICAgRGFydFR5cGUgZnV0dXJlZEV4cGVjdGVkVHlwZSA9IHdyYXBGdXR1cmVUeXBlKHVuZnV0dXJlZEV4cGVjdGVkVHlwZSk7CiAgICAgIGlmIChpc0Fzc2lnbmFibGUodW5mdXR1cmVkRXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlKSkgewogICAgICAgIGV4cGVjdGVkVHlwZSA9IHVuZnV0dXJlZEV4cGVjdGVkVHlwZTsKICAgICAgfSBlbHNlIGlmIChpc0Fzc2lnbmFibGUoZnV0dXJlZEV4cGVjdGVkVHlwZSwgYWN0dWFsVHlwZSkpIHsKICAgICAgICBleHBlY3RlZFR5cGUgPSBmdXR1cmVkRXhwZWN0ZWRUeXBlOwogICAgICB9CiAgICB9CgogICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBpbnNlcnQgYXNzaWduYWJpbGl0eSBjaGVja3Mgd2hlbiBkb2luZyB0b3AgbGV2ZWwgdHlwZQogICAgLy8gaW5mZXJlbmNlIHNpbmNlIHRvcCBsZXZlbCB0eXBlIGluZmVyZW5jZSBvbmx5IGNhcmVzIGFib3V0IHRoZSB0eXBlIHRoYXQKICAgIC8vIGlzIGluZmVycmVkICh0aGUga2VybmVsIGNvZGUgaXMgZGlzY2FyZGVkKS4KICAgIGlmIChpc1RvcExldmVsKSByZXR1cm4gbnVsbDsKCiAgICAvLyBJZiBhbiBpbnRlcmZhY2UgdHlwZSBpcyBiZWluZyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHR5cGUsIHNlZSBpZiB3ZQogICAgLy8gc2hvdWxkIHRlYXIgb2ZmIGAuY2FsbGAuCiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHVzZSByZXNvbHZlVHlwZVBhcmFtZXRlci4gIFNlZSBmaW5kSW50ZXJmYWNlTWVtYmVyLgogICAgaWYgKGFjdHVhbFR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB2YXIgY2xhc3NOb2RlID0gKGFjdHVhbFR5cGUgYXMgSW50ZXJmYWNlVHlwZSkuY2xhc3NOb2RlOwogICAgICB2YXIgY2FsbE1lbWJlciA9IGNsYXNzSGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihjbGFzc05vZGUsIGNhbGxOYW1lKTsKICAgICAgaWYgKGNhbGxNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGNhbGxNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICAgIGlmIChfc2hvdWxkVGVhck9mZkNhbGwoZXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlKSkgewogICAgICAgICAgLy8gUmVwbGFjZSBleHByZXNzaW9uIHdpdGg6CiAgICAgICAgICAvLyBgbGV0IHQgPSBleHByZXNzaW9uIGluIHQgPT0gbnVsbCA/IG51bGwgOiB0LmNhbGxgCiAgICAgICAgICB2YXIgcGFyZW50ID0gZXhwcmVzc2lvbi5wYXJlbnQ7CiAgICAgICAgICB2YXIgdCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKGV4cHJlc3Npb24sIHR5cGU6IGFjdHVhbFR5cGUpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgICB2YXIgbnVsbENoZWNrID0gYnVpbGRJc051bGwobmV3IFZhcmlhYmxlR2V0KHQpLCBmaWxlT2Zmc2V0LCBoZWxwZXIpOwogICAgICAgICAgdmFyIHRlYXJPZmYgPQogICAgICAgICAgICAgIG5ldyBQcm9wZXJ0eUdldChuZXcgVmFyaWFibGVHZXQodCksIGNhbGxOYW1lLCBjYWxsTWVtYmVyKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgICAgIGFjdHVhbFR5cGUgPSBnZXRDYWxsZWVUeXBlKGNhbGxNZW1iZXIsIGFjdHVhbFR5cGUpOwogICAgICAgICAgdmFyIGNvbmRpdGlvbmFsID0gbmV3IENvbmRpdGlvbmFsRXhwcmVzc2lvbihudWxsQ2hlY2ssCiAgICAgICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0LCB0ZWFyT2ZmLCBhY3R1YWxUeXBlKTsKICAgICAgICAgIHZhciBsZXQgPSBuZXcgTGV0KHQsIGNvbmRpdGlvbmFsKS4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChleHByZXNzaW9uLCBsZXQpOwogICAgICAgICAgZXhwcmVzc2lvbiA9IGxldDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYWN0dWFsVHlwZSBpcyBWb2lkVHlwZSAmJiAhaXNWb2lkQWxsb3dlZCkgewogICAgICAvLyBFcnJvcjogbm90IGFzc2lnbmFibGUuICBQZXJmb3JtIGVycm9yIHJlY292ZXJ5LgogICAgICBUcmVlTm9kZSBwYXJlbnQgPSBleHByZXNzaW9uLnBhcmVudDsKICAgICAgRXhwcmVzc2lvbiBlcnJvck5vZGUgPQogICAgICAgICAgaGVscGVyLndyYXBJblByb2JsZW0oZXhwcmVzc2lvbiwgbWVzc2FnZVZvaWRFeHByZXNzaW9uLCBub0xlbmd0aCk7CiAgICAgIHBhcmVudD8ucmVwbGFjZUNoaWxkKGV4cHJlc3Npb24sIGVycm9yTm9kZSk7CiAgICAgIHJldHVybiBlcnJvck5vZGU7CiAgICB9CgogICAgaWYgKGV4cGVjdGVkVHlwZSA9PSBudWxsIHx8CiAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LmlzU3VidHlwZU9mKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSkpIHsKICAgICAgLy8gVHlwZXMgYXJlIGNvbXBhdGlibGUuCiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmICghdHlwZVNjaGVtYUVudmlyb25tZW50LmlzU3VidHlwZU9mKGV4cGVjdGVkVHlwZSwgYWN0dWFsVHlwZSkpIHsKICAgICAgLy8gRXJyb3I6IG5vdCBhc3NpZ25hYmxlLiAgUGVyZm9ybSBlcnJvciByZWNvdmVyeS4KICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICBFeHByZXNzaW9uIGVycm9yTm9kZSA9IG5ldyBBc0V4cHJlc3Npb24oCiAgICAgICAgICBleHByZXNzaW9uLAogICAgICAgICAgLy8gVE9ETyhhaGUpOiBUaGUgb3V0bGluZSBwaGFzZSBkb2Vzbid0IGNvcnJlY3RseSByZW1vdmUgaW52YWxpZAogICAgICAgICAgLy8gdXNlcyBvZiB0eXBlIHZhcmlhYmxlcywgZm9yIGV4YW1wbGUsIG9uIHN0YXRpYyBtZW1iZXJzLiBPbmNlCiAgICAgICAgICAvLyB0aGF0IGhhcyBiZWVuIGZpeGVkLCB3ZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gdXNlCiAgICAgICAgICAvLyBbZXhwZWN0ZWRUeXBlXSBkaXJlY3RseSBoZXJlLgogICAgICAgICAgaGFzQW55VHlwZVZhcmlhYmxlcyhleHBlY3RlZFR5cGUpID8gY29uc3QgQm90dG9tVHlwZSgpIDogZXhwZWN0ZWRUeXBlKQogICAgICAgIC4uaXNUeXBlRXJyb3IgPSB0cnVlCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gZXhwcmVzc2lvbi5maWxlT2Zmc2V0OwogICAgICBpZiAoZXhwZWN0ZWRUeXBlIGlzISBJbnZhbGlkVHlwZSAmJiBhY3R1YWxUeXBlIGlzISBJbnZhbGlkVHlwZSkgewogICAgICAgIGVycm9yTm9kZSA9IGhlbHBlci53cmFwSW5Qcm9ibGVtKAogICAgICAgICAgICBlcnJvck5vZGUsCiAgICAgICAgICAgICh0ZW1wbGF0ZSA/PyB0ZW1wbGF0ZUludmFsaWRBc3NpZ25tZW50KQogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYWN0dWFsVHlwZSwgZXhwZWN0ZWRUeXBlKSwKICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICB9CiAgICAgIHBhcmVudD8ucmVwbGFjZUNoaWxkKGV4cHJlc3Npb24sIGVycm9yTm9kZSk7CiAgICAgIHJldHVybiBlcnJvck5vZGU7CiAgICB9IGVsc2UgewogICAgICB2YXIgdGVtcGxhdGUgPSBfZ2V0UHJlY2lzZVR5cGVFcnJvclRlbXBsYXRlKGV4cHJlc3Npb24pOwogICAgICBpZiAodGVtcGxhdGUgIT0gbnVsbCkgewogICAgICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uIGlzIGtub3duIHByZWNpc2VseSwgc28gYW4gaW1wbGljaXQKICAgICAgICAvLyBkb3duY2FzdCBpcyBndWFyYW50ZWVkIHRvIGZhaWwuICBJbnNlcnQgYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICAgIHZhciBlcnJvck5vZGUgPSBoZWxwZXIud3JhcEluUHJvYmxlbShleHByZXNzaW9uLAogICAgICAgICAgICB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSksIG5vTGVuZ3RoKTsKICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChleHByZXNzaW9uLCBlcnJvck5vZGUpOwogICAgICAgIHJldHVybiBlcnJvck5vZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSW5zZXJ0IGFuIGltcGxpY2l0IGRvd25jYXN0LgogICAgICAgIHZhciBwYXJlbnQgPSBleHByZXNzaW9uLnBhcmVudDsKICAgICAgICB2YXIgdHlwZUNoZWNrID0gbmV3IEFzRXhwcmVzc2lvbihleHByZXNzaW9uLCBpbml0aWFsRXhwZWN0ZWRUeXBlKQogICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgcGFyZW50Py5yZXBsYWNlQ2hpbGQoZXhwcmVzc2lvbiwgdHlwZUNoZWNrKTsKICAgICAgICByZXR1cm4gdHlwZUNoZWNrOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIGlzTnVsbChEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gdHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUuY2xhc3NOb2RlID09IGNvcmVUeXBlcy5udWxsQ2xhc3M7CiAgfQoKICAvLy8gRmluZHMgYSBtZW1iZXIgb2YgW3JlY2VpdmVyVHlwZV0gY2FsbGVkIFtuYW1lXSwgYW5kIGlmIGl0IGlzIGZvdW5kLAogIC8vLyByZXBvcnRzIGl0IHRocm91Z2ggaW5zdHJ1bWVudGF0aW9uIHVzaW5nIFtmaWxlT2Zmc2V0XS4KICAvLy8KICAvLy8gRm9yIHRoZSBjYXNlIHdoZXJlIFtyZWNlaXZlclR5cGVdIGlzIGEgW0Z1bmN0aW9uVHlwZV0sIGFuZCB0aGUgbmFtZQogIC8vLyBpcyBgY2FsbGAsIHRoZSBzdHJpbmcgJ2NhbGwnIGlzIHJldHVybmVkIGFzIGEgc2VudGluZWwgb2JqZWN0LgogIC8vLwogIC8vLyBGb3IgdGhlIGNhc2Ugd2hlcmUgW3JlY2VpdmVyVHlwZV0gaXMgYGR5bmFtaWNgLCBhbmQgdGhlIG5hbWUgaXMgZGVjbGFyZWQKICAvLy8gaW4gT2JqZWN0LCB0aGUgbWVtYmVyIGZyb20gT2JqZWN0IGlzIHJldHVybmVkIHRob3VnaCB0aGUgY2FsbCBtYXkgbm90IGVuZAogIC8vLyB1cCB0YXJnZXRpbmcgaXQgaWYgdGhlIGFyZ3VtZW50cyBkbyBub3QgbWF0Y2ggKHRoZSBiYXNpYyBwcmluY2lwbGUgaXMgdGhhdAogIC8vLyB0aGUgT2JqZWN0IG1lbWJlciBpcyB1c2VkIGZvciBpbmZlcnJpbmcgdHlwZXMgb25seSBpZiBub1N1Y2hNZXRob2QgY2Fubm90CiAgLy8vIGJlIHRhcmdldGVkIGR1ZSB0bywgZS5nLiwgYW4gaW5jb3JyZWN0IGFyZ3VtZW50IGNvdW50KS4KICBPYmplY3QgZmluZEludGVyZmFjZU1lbWJlcihEYXJ0VHlwZSByZWNlaXZlclR5cGUsIE5hbWUgbmFtZSwgaW50IGZpbGVPZmZzZXQsCiAgICAgIHtUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZywgRGFydFR5cGUpPiBlcnJvclRlbXBsYXRlLAogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIGJvb2wgc2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpbnN0cnVtZW50ZWQ6IHRydWV9KSB7CiAgICBhc3NlcnQocmVjZWl2ZXJUeXBlICE9IG51bGwgJiYgaXNLbm93bihyZWNlaXZlclR5cGUpKTsKCiAgICByZWNlaXZlclR5cGUgPSByZXNvbHZlVHlwZVBhcmFtZXRlcihyZWNlaXZlclR5cGUpOwoKICAgIGlmIChyZWNlaXZlclR5cGUgaXMgRnVuY3Rpb25UeXBlICYmIG5hbWUubmFtZSA9PSAnY2FsbCcpIHsKICAgICAgcmV0dXJuICdjYWxsJzsKICAgIH0KCiAgICBDbGFzcyBjbGFzc05vZGUgPSByZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZQogICAgICAgID8gcmVjZWl2ZXJUeXBlLmNsYXNzTm9kZQogICAgICAgIDogY29yZVR5cGVzLm9iamVjdENsYXNzOwogICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciA9CiAgICAgICAgX2dldEludGVyZmFjZU1lbWJlcihjbGFzc05vZGUsIG5hbWUsIHNldHRlciwgZmlsZU9mZnNldCk7CiAgICBpZiAoaW5zdHJ1bWVudGVkICYmCiAgICAgICAgcmVjZWl2ZXJUeXBlICE9IGNvbnN0IER5bmFtaWNUeXBlKCkgJiYKICAgICAgICBpbnRlcmZhY2VNZW1iZXIgIT0gbnVsbCkgewogICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIGZpbGVPZmZzZXQsICd0YXJnZXQnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKGludGVyZmFjZU1lbWJlcikpOwogICAgfQoKICAgIGlmICghaXNUb3BMZXZlbCAmJgogICAgICAgIGludGVyZmFjZU1lbWJlciA9PSBudWxsICYmCiAgICAgICAgcmVjZWl2ZXJUeXBlIGlzISBEeW5hbWljVHlwZSAmJgogICAgICAgIHJlY2VpdmVyVHlwZSBpcyEgSW52YWxpZFR5cGUgJiYKICAgICAgICAhKHJlY2VpdmVyVHlwZSA9PSBjb3JlVHlwZXMuZnVuY3Rpb25DbGFzcy5yYXdUeXBlICYmCiAgICAgICAgICAgIG5hbWUubmFtZSA9PSAnY2FsbCcpICYmCiAgICAgICAgZXJyb3JUZW1wbGF0ZSAhPSBudWxsKSB7CiAgICAgIGludCBsZW5ndGggPSBuYW1lLm5hbWUubGVuZ3RoOwogICAgICBpZiAoaWRlbnRpY2FsKG5hbWUubmFtZSwgY2FsbE5hbWUubmFtZSkgfHwKICAgICAgICAgIGlkZW50aWNhbChuYW1lLm5hbWUsIHVuYXJ5TWludXNOYW1lLm5hbWUpKSB7CiAgICAgICAgbGVuZ3RoID0gMTsKICAgICAgfQogICAgICBleHByZXNzaW9uLnBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICBleHByZXNzaW9uLAogICAgICAgICAgaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGhlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgZXJyb3JUZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5hbWUubmFtZSwgcmVjZWl2ZXJUeXBlKSwKICAgICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICAgIGxlbmd0aCkpKTsKICAgIH0KICAgIHJldHVybiBpbnRlcmZhY2VNZW1iZXI7CiAgfQoKICAvLy8gRmluZHMgYSBtZW1iZXIgb2YgW3JlY2VpdmVyVHlwZV0gY2FsbGVkIFtuYW1lXSBhbmQgcmVjb3JkcyBpdCBpbgogIC8vLyBbbWV0aG9kSW52b2NhdGlvbl0uCiAgT2JqZWN0IGZpbmRNZXRob2RJbnZvY2F0aW9uTWVtYmVyKAogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUsIEludm9jYXRpb25FeHByZXNzaW9uIG1ldGhvZEludm9jYXRpb24sCiAgICAgIHtib29sIGluc3RydW1lbnRlZDogdHJ1ZX0pIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogY291bGQgd2UgYWRkIGdldHRlcnMgdG8gSW52b2NhdGlvbkV4cHJlc3Npb24gdG8gbWFrZQogICAgLy8gdGhlc2UgaXMtY2hlY2tzIHVubmVjZXNzYXJ5PwogICAgaWYgKG1ldGhvZEludm9jYXRpb24gaXMgTWV0aG9kSW52b2NhdGlvbikgewogICAgICB2YXIgaW50ZXJmYWNlTWVtYmVyID0gZmluZEludGVyZmFjZU1lbWJlcigKICAgICAgICAgIHJlY2VpdmVyVHlwZSwgbWV0aG9kSW52b2NhdGlvbi5uYW1lLCBtZXRob2RJbnZvY2F0aW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICBlcnJvclRlbXBsYXRlOiB0ZW1wbGF0ZVVuZGVmaW5lZE1ldGhvZCwKICAgICAgICAgIGV4cHJlc3Npb246IG1ldGhvZEludm9jYXRpb24sCiAgICAgICAgICByZWNlaXZlcjogbWV0aG9kSW52b2NhdGlvbi5yZWNlaXZlciwKICAgICAgICAgIGluc3RydW1lbnRlZDogaW5zdHJ1bWVudGVkKTsKICAgICAgaWYgKHJlY2VpdmVyVHlwZSA9PSBjb25zdCBEeW5hbWljVHlwZSgpICYmIGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICB2YXIgYXJndW1lbnRzID0gbWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHM7CiAgICAgICAgdmFyIHNpZ25hdHVyZSA9IGludGVyZmFjZU1lbWJlci5mdW5jdGlvbjsKICAgICAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgc2lnbmF0dXJlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgfHwKICAgICAgICAgICAgYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID4KICAgICAgICAgICAgICAgIHNpZ25hdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBhcmd1bWVudCBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgICAgIGlmICghc2lnbmF0dXJlLm5hbWVkUGFyYW1ldGVycwogICAgICAgICAgICAgIC5hbnkoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5uYW1lID09IGFyZ3VtZW50Lm5hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaW5zdHJ1bWVudGVkICYmIGluc3RydW1lbnRhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBpbnN0cnVtZW50YXRpb24ucmVjb3JkKHVyaSwgbWV0aG9kSW52b2NhdGlvbi5maWxlT2Zmc2V0LCAndGFyZ2V0JywKICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIoaW50ZXJmYWNlTWVtYmVyKSk7CiAgICAgICAgfQogICAgICAgIG1ldGhvZEludm9jYXRpb24uaW50ZXJmYWNlVGFyZ2V0ID0gaW50ZXJmYWNlTWVtYmVyOwogICAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciBpcyBNZW1iZXIpIHsKICAgICAgICBtZXRob2RJbnZvY2F0aW9uLmludGVyZmFjZVRhcmdldCA9IGludGVyZmFjZU1lbWJlcjsKICAgICAgfQogICAgICByZXR1cm4gaW50ZXJmYWNlTWVtYmVyOwogICAgfSBlbHNlIGlmIChtZXRob2RJbnZvY2F0aW9uIGlzIFN1cGVyTWV0aG9kSW52b2NhdGlvbikgewogICAgICBhc3NlcnQocmVjZWl2ZXJUeXBlICE9IGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgICB2YXIgaW50ZXJmYWNlTWVtYmVyID0gZmluZEludGVyZmFjZU1lbWJlcigKICAgICAgICAgIHJlY2VpdmVyVHlwZSwgbWV0aG9kSW52b2NhdGlvbi5uYW1lLCBtZXRob2RJbnZvY2F0aW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICBpbnN0cnVtZW50ZWQ6IGluc3RydW1lbnRlZCk7CiAgICAgIGlmIChpbnRlcmZhY2VNZW1iZXIgaXMgTWVtYmVyKSB7CiAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIGludGVyZmFjZU1lbWJlcjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IHVuaGFuZGxlZCgiJHttZXRob2RJbnZvY2F0aW9uLnJ1bnRpbWVUeXBlfSIsCiAgICAgICAgICAiZmluZE1ldGhvZEludm9jYXRpb25NZW1iZXIiLCBtZXRob2RJbnZvY2F0aW9uLmZpbGVPZmZzZXQsIHVyaSk7CiAgICB9CiAgfQoKICAvLy8gRmluZHMgYSBtZW1iZXIgb2YgW3JlY2VpdmVyVHlwZV0gY2FsbGVkIFtuYW1lXSwgYW5kIGlmIGl0IGlzIGZvdW5kLAogIC8vLyByZXBvcnRzIGl0IHRocm91Z2ggaW5zdHJ1bWVudGF0aW9uIGFuZCByZWNvcmRzIGl0IGluIFtwcm9wZXJ0eUdldF0uCiAgT2JqZWN0IGZpbmRQcm9wZXJ0eUdldE1lbWJlcihEYXJ0VHlwZSByZWNlaXZlclR5cGUsIEV4cHJlc3Npb24gcHJvcGVydHlHZXQsCiAgICAgIHtib29sIGluc3RydW1lbnRlZDogdHJ1ZX0pIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogY291bGQgd2UgYWRkIGEgY29tbW9uIGJhc2UgY2xhc3MgdG8gUHJvcGVydHlHZXQgYW5kCiAgICAvLyBTdXBlclByb3BlcnR5R2V0IHRvIG1ha2UgdGhlc2UgaXMtY2hlY2tzIHVubmVjZXNzYXJ5PwogICAgaWYgKHByb3BlcnR5R2V0IGlzIFByb3BlcnR5R2V0KSB7CiAgICAgIHZhciBpbnRlcmZhY2VNZW1iZXIgPSBmaW5kSW50ZXJmYWNlTWVtYmVyKAogICAgICAgICAgcmVjZWl2ZXJUeXBlLCBwcm9wZXJ0eUdldC5uYW1lLCBwcm9wZXJ0eUdldC5maWxlT2Zmc2V0LAogICAgICAgICAgZXJyb3JUZW1wbGF0ZTogdGVtcGxhdGVVbmRlZmluZWRHZXR0ZXIsCiAgICAgICAgICBleHByZXNzaW9uOiBwcm9wZXJ0eUdldCwKICAgICAgICAgIHJlY2VpdmVyOiBwcm9wZXJ0eUdldC5yZWNlaXZlciwKICAgICAgICAgIGluc3RydW1lbnRlZDogaW5zdHJ1bWVudGVkKTsKICAgICAgaWYgKGludGVyZmFjZU1lbWJlciBpcyBNZW1iZXIpIHsKICAgICAgICBpZiAoaW5zdHJ1bWVudGVkICYmCiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbiAhPSBudWxsICYmCiAgICAgICAgICAgIHJlY2VpdmVyVHlwZSA9PSBjb25zdCBEeW5hbWljVHlwZSgpKSB7CiAgICAgICAgICBpbnN0cnVtZW50YXRpb24ucmVjb3JkKHVyaSwgcHJvcGVydHlHZXQuZmlsZU9mZnNldCwgJ3RhcmdldCcsCiAgICAgICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKGludGVyZmFjZU1lbWJlcikpOwogICAgICAgIH0KICAgICAgICBwcm9wZXJ0eUdldC5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIGludGVyZmFjZU1lbWJlcjsKICAgIH0gZWxzZSBpZiAocHJvcGVydHlHZXQgaXMgU3VwZXJQcm9wZXJ0eUdldCkgewogICAgICBhc3NlcnQocmVjZWl2ZXJUeXBlICE9IGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgICB2YXIgaW50ZXJmYWNlTWVtYmVyID0gZmluZEludGVyZmFjZU1lbWJlcigKICAgICAgICAgIHJlY2VpdmVyVHlwZSwgcHJvcGVydHlHZXQubmFtZSwgcHJvcGVydHlHZXQuZmlsZU9mZnNldCwKICAgICAgICAgIGluc3RydW1lbnRlZDogaW5zdHJ1bWVudGVkKTsKICAgICAgaWYgKGludGVyZmFjZU1lbWJlciBpcyBNZW1iZXIpIHsKICAgICAgICBwcm9wZXJ0eUdldC5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIGludGVyZmFjZU1lbWJlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1bmhhbmRsZWQoIiR7cHJvcGVydHlHZXQucnVudGltZVR5cGV9IiwgImZpbmRQcm9wZXJ0eUdldE1lbWJlciIsCiAgICAgICAgICBwcm9wZXJ0eUdldC5maWxlT2Zmc2V0LCB1cmkpOwogICAgfQogIH0KCiAgLy8vIEZpbmRzIGEgbWVtYmVyIG9mIFtyZWNlaXZlclR5cGVdIGNhbGxlZCBbbmFtZV0sIGFuZCBpZiBpdCBpcyBmb3VuZCwKICAvLy8gcmVwb3J0cyBpdCB0aHJvdWdoIGluc3RydW1lbnRhdGlvbiBhbmQgcmVjb3JkcyBpdCBpbiBbcHJvcGVydHlTZXRdLgogIE9iamVjdCBmaW5kUHJvcGVydHlTZXRNZW1iZXIoRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBFeHByZXNzaW9uIHByb3BlcnR5U2V0LAogICAgICB7Ym9vbCBpbnN0cnVtZW50ZWQ6IHRydWV9KSB7CiAgICBpZiAocHJvcGVydHlTZXQgaXMgUHJvcGVydHlTZXQpIHsKICAgICAgdmFyIGludGVyZmFjZU1lbWJlciA9IGZpbmRJbnRlcmZhY2VNZW1iZXIoCiAgICAgICAgICByZWNlaXZlclR5cGUsIHByb3BlcnR5U2V0Lm5hbWUsIHByb3BlcnR5U2V0LmZpbGVPZmZzZXQsCiAgICAgICAgICBlcnJvclRlbXBsYXRlOiB0ZW1wbGF0ZVVuZGVmaW5lZFNldHRlciwKICAgICAgICAgIGV4cHJlc3Npb246IHByb3BlcnR5U2V0LAogICAgICAgICAgcmVjZWl2ZXI6IHByb3BlcnR5U2V0LnJlY2VpdmVyLAogICAgICAgICAgc2V0dGVyOiB0cnVlLAogICAgICAgICAgaW5zdHJ1bWVudGVkOiBpbnN0cnVtZW50ZWQpOwogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIE1lbWJlcikgewogICAgICAgIGlmIChpbnN0cnVtZW50ZWQgJiYKICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uICE9IG51bGwgJiYKICAgICAgICAgICAgcmVjZWl2ZXJUeXBlID09IGNvbnN0IER5bmFtaWNUeXBlKCkpIHsKICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5yZWNvcmQodXJpLCBwcm9wZXJ0eVNldC5maWxlT2Zmc2V0LCAndGFyZ2V0JywKICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIoaW50ZXJmYWNlTWVtYmVyKSk7CiAgICAgICAgfQogICAgICAgIHByb3BlcnR5U2V0LmludGVyZmFjZVRhcmdldCA9IGludGVyZmFjZU1lbWJlcjsKICAgICAgfQogICAgICByZXR1cm4gaW50ZXJmYWNlTWVtYmVyOwogICAgfSBlbHNlIGlmIChwcm9wZXJ0eVNldCBpcyBTdXBlclByb3BlcnR5U2V0KSB7CiAgICAgIGFzc2VydChyZWNlaXZlclR5cGUgIT0gY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICAgIHZhciBpbnRlcmZhY2VNZW1iZXIgPSBmaW5kSW50ZXJmYWNlTWVtYmVyKAogICAgICAgICAgcmVjZWl2ZXJUeXBlLCBwcm9wZXJ0eVNldC5uYW1lLCBwcm9wZXJ0eVNldC5maWxlT2Zmc2V0LAogICAgICAgICAgc2V0dGVyOiB0cnVlLCBpbnN0cnVtZW50ZWQ6IGluc3RydW1lbnRlZCk7CiAgICAgIGlmIChpbnRlcmZhY2VNZW1iZXIgaXMgTWVtYmVyKSB7CiAgICAgICAgcHJvcGVydHlTZXQuaW50ZXJmYWNlVGFyZ2V0ID0gaW50ZXJmYWNlTWVtYmVyOwogICAgICB9CiAgICAgIHJldHVybiBpbnRlcmZhY2VNZW1iZXI7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyB1bmhhbmRsZWQoIiR7cHJvcGVydHlTZXQucnVudGltZVR5cGV9IiwgImZpbmRQcm9wZXJ0eVNldE1lbWJlciIsCiAgICAgICAgICBwcm9wZXJ0eVNldC5maWxlT2Zmc2V0LCB1cmkpOwogICAgfQogIH0KCiAgRnVuY3Rpb25UeXBlIGdldENhbGxlZUZ1bmN0aW9uVHlwZShEYXJ0VHlwZSBjYWxsZWVUeXBlLCBib29sIGZvbGxvd0NhbGwpIHsKICAgIGlmIChjYWxsZWVUeXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICByZXR1cm4gY2FsbGVlVHlwZTsKICAgIH0gZWxzZSBpZiAoZm9sbG93Q2FsbCAmJiBjYWxsZWVUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgdmFyIG1lbWJlciA9CiAgICAgICAgICBfZ2V0SW50ZXJmYWNlTWVtYmVyKGNhbGxlZVR5cGUuY2xhc3NOb2RlLCBjYWxsTmFtZSwgZmFsc2UsIC0xKTsKICAgICAgdmFyIGNhbGxUeXBlID0gZ2V0Q2FsbGVlVHlwZShtZW1iZXIsIGNhbGxlZVR5cGUpOwogICAgICBpZiAoY2FsbFR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgcmV0dXJuIGNhbGxUeXBlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdW5rbm93bkZ1bmN0aW9uOwogIH0KCiAgRGFydFR5cGUgZ2V0Q2FsbGVlVHlwZShPYmplY3QgaW50ZXJmYWNlTWVtYmVyLCBEYXJ0VHlwZSByZWNlaXZlclR5cGUpIHsKICAgIGlmIChpZGVudGljYWwoaW50ZXJmYWNlTWVtYmVyLCAnY2FsbCcpKSB7CiAgICAgIHJldHVybiByZWNlaXZlclR5cGU7CiAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciA9PSBudWxsKSB7CiAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfSBlbHNlIGlmIChpbnRlcmZhY2VNZW1iZXIgaXMgTWVtYmVyKSB7CiAgICAgIHZhciBtZW1iZXJDbGFzcyA9IGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgICAgRGFydFR5cGUgY2FsbGVlVHlwZTsKICAgICAgaWYgKGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5HZXR0ZXIpIHsKICAgICAgICAgIGNhbGxlZVR5cGUgPSBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2FsbGVlVHlwZSA9IGludGVyZmFjZU1lbWJlci5mdW5jdGlvbi5mdW5jdGlvblR5cGU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCkgewogICAgICAgIGNhbGxlZVR5cGUgPSBpbnRlcmZhY2VNZW1iZXIudHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyB1bmhhbmRsZWQoaW50ZXJmYWNlTWVtYmVyLnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCksICdnZXRDYWxsZWVUeXBlJywKICAgICAgICAgICAgbnVsbCwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKG1lbWJlckNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICByZWNlaXZlclR5cGUgPSByZXNvbHZlVHlwZVBhcmFtZXRlcihyZWNlaXZlclR5cGUpOwogICAgICAgIGlmIChyZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgdmFyIGNhc3RlZFR5cGUgPQogICAgICAgICAgICAgIGNsYXNzSGllcmFyY2h5LmdldFR5cGVBc0luc3RhbmNlT2YocmVjZWl2ZXJUeXBlLCBtZW1iZXJDbGFzcyk7CiAgICAgICAgICBjYWxsZWVUeXBlID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKGNhc3RlZFR5cGUpCiAgICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGNhbGxlZVR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY2FsbGVlVHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IHVuaGFuZGxlZCgKICAgICAgICAgIGludGVyZmFjZU1lbWJlci5ydW50aW1lVHlwZS50b1N0cmluZygpLCAnZ2V0Q2FsbGVlVHlwZScsIG51bGwsIG51bGwpOwogICAgfQogIH0KCiAgRGFydFR5cGUgZ2V0RGVyaXZlZFR5cGVBcmd1bWVudE9mKERhcnRUeXBlIHR5cGUsIENsYXNzIGNsYXNzXykgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB2YXIgdHlwZUFzSW5zdGFuY2VPZkNsYXNzID0KICAgICAgICAgIGNsYXNzSGllcmFyY2h5LmdldFR5cGVBc0luc3RhbmNlT2YodHlwZSwgY2xhc3NfKTsKICAgICAgaWYgKHR5cGVBc0luc3RhbmNlT2ZDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHR5cGVBc0luc3RhbmNlT2ZDbGFzcy50eXBlQXJndW1lbnRzWzBdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBHZXRzIHRoZSBpbml0aWFsaXplciBmb3IgdGhlIGdpdmVuIFtmaWVsZF0sIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubwogIC8vLyBpbml0aWFsaXplci4KICBFeHByZXNzaW9uIGdldEZpZWxkSW5pdGlhbGl6ZXIoRmllbGQgZmllbGQpOwoKICAvLy8gSWYgdGhlIFttZW1iZXJdIGlzIGEgZm9yd2FyZGluZyBzdHViLCByZXR1cm4gdGhlIHRhcmdldCBpdCBmb3J3YXJkcyB0by4KICAvLy8gT3RoZXJ3aXNlIHJldHVybiB0aGUgZ2l2ZW4gW21lbWJlcl0uCiAgTWVtYmVyIGdldFJlYWxUYXJnZXQoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYgbWVtYmVyLmlzRm9yd2FyZGluZ1N0dWIpIHsKICAgICAgcmV0dXJuIG1lbWJlci5mb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldDsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICBEYXJ0VHlwZSBnZXRTZXR0ZXJUeXBlKE9iamVjdCBpbnRlcmZhY2VNZW1iZXIsIERhcnRUeXBlIHJlY2VpdmVyVHlwZSkgewogICAgaWYgKGludGVyZmFjZU1lbWJlciBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIGludGVyZmFjZU1lbWJlcjsKICAgIH0gZWxzZSBpZiAoaW50ZXJmYWNlTWVtYmVyID09IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciBpcyBNZW1iZXIpIHsKICAgICAgdmFyIG1lbWJlckNsYXNzID0gaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgICBEYXJ0VHlwZSBzZXR0ZXJUeXBlOwogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIFByb2NlZHVyZSkgewogICAgICAgIGFzc2VydChpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcik7CiAgICAgICAgdmFyIHNldHRlclBhcmFtZXRlcnMgPSBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICAgICAgc2V0dGVyVHlwZSA9IHNldHRlclBhcmFtZXRlcnMubGVuZ3RoID4gMAogICAgICAgICAgICA/IHNldHRlclBhcmFtZXRlcnNbMF0udHlwZQogICAgICAgICAgICA6IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0gZWxzZSBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgICAgc2V0dGVyVHlwZSA9IGludGVyZmFjZU1lbWJlci50eXBlOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IHVuaGFuZGxlZChpbnRlcmZhY2VNZW1iZXIucnVudGltZVR5cGUudG9TdHJpbmcoKSwgJ2dldFNldHRlclR5cGUnLAogICAgICAgICAgICBudWxsLCBudWxsKTsKICAgICAgfQogICAgICBpZiAobWVtYmVyQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgIHJlY2VpdmVyVHlwZSA9IHJlc29sdmVUeXBlUGFyYW1ldGVyKHJlY2VpdmVyVHlwZSk7CiAgICAgICAgaWYgKHJlY2VpdmVyVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICB2YXIgY2FzdGVkVHlwZSA9CiAgICAgICAgICAgICAgY2xhc3NIaWVyYXJjaHkuZ2V0VHlwZUFzSW5zdGFuY2VPZihyZWNlaXZlclR5cGUsIG1lbWJlckNsYXNzKTsKICAgICAgICAgIHNldHRlclR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoY2FzdGVkVHlwZSkKICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoc2V0dGVyVHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzZXR0ZXJUeXBlOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgdW5oYW5kbGVkKAogICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCksICdnZXRTZXR0ZXJUeXBlJywgbnVsbCwgbnVsbCk7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBnZXRUeXBlQXJndW1lbnRPZihEYXJ0VHlwZSB0eXBlLCBDbGFzcyBjbGFzc18pIHsKICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgaWRlbnRpY2FsKHR5cGUuY2xhc3NOb2RlLCBjbGFzc18pKSB7CiAgICAgIHJldHVybiB0eXBlLnR5cGVBcmd1bWVudHNbMF07CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29uc3QgVW5rbm93blR5cGUoKTsKICAgIH0KICB9CgogIC8vLyBBZGRzIGFuICJhcyIgY2hlY2sgdG8gYSBbTWV0aG9kSW52b2NhdGlvbl0gaWYgbmVjZXNzYXJ5IGR1ZSB0bwogIC8vLyBjb250cmF2YXJpYW5jZS4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGV4cHJlc3Npb24gaXMgdGhlIFtBc0V4cHJlc3Npb25dLCBpZiBvbmUgd2FzIGFkZGVkOyBvdGhlcndpc2UKICAvLy8gaXQgaXMgdGhlIFtNZXRob2RJbnZvY2F0aW9uXS4KICBFeHByZXNzaW9uIGhhbmRsZUludm9jYXRpb25Db250cmF2YXJpYW5jZSgKICAgICAgTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQgY2hlY2tLaW5kLAogICAgICBNZXRob2RJbnZvY2F0aW9uIGRlc3VnYXJlZEludm9jYXRpb24sCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlLAogICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAogICAgICBpbnQgZmlsZU9mZnNldCkgewogICAgdmFyIGV4cHJlc3Npb25Ub1JlcGxhY2UgPSBkZXN1Z2FyZWRJbnZvY2F0aW9uID8/IGV4cHJlc3Npb247CiAgICBzd2l0Y2ggKGNoZWNrS2luZCkgewogICAgICBjYXNlIE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kLmNoZWNrTWV0aG9kUmV0dXJuOgogICAgICAgIHZhciBwYXJlbnQgPSBleHByZXNzaW9uVG9SZXBsYWNlLnBhcmVudDsKICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBuZXcgQXNFeHByZXNzaW9uKGV4cHJlc3Npb25Ub1JlcGxhY2UsIGluZmVycmVkVHlwZSkKICAgICAgICAgIC4uaXNUeXBlRXJyb3IgPSB0cnVlCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoZXhwcmVzc2lvblRvUmVwbGFjZSwgcmVwbGFjZW1lbnQpOwogICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24gIT0gbnVsbCkgewogICAgICAgICAgaW50IG9mZnNldCA9IGFyZ3VtZW50cy5maWxlT2Zmc2V0ID09IC0xCiAgICAgICAgICAgICAgPyBleHByZXNzaW9uLmZpbGVPZmZzZXQKICAgICAgICAgICAgICA6IGFyZ3VtZW50cy5maWxlT2Zmc2V0OwogICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnJlY29yZCh1cmksIG9mZnNldCwgJ2NoZWNrUmV0dXJuJywKICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlKGluZmVycmVkVHlwZSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICAgIGNhc2UgTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQuY2hlY2tHZXR0ZXJSZXR1cm46CiAgICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb25Ub1JlcGxhY2UucGFyZW50OwogICAgICAgIHZhciBwcm9wZXJ0eUdldCA9IG5ldyBQcm9wZXJ0eUdldChkZXN1Z2FyZWRJbnZvY2F0aW9uLnJlY2VpdmVyLAogICAgICAgICAgICBkZXN1Z2FyZWRJbnZvY2F0aW9uLm5hbWUsIGRlc3VnYXJlZEludm9jYXRpb24uaW50ZXJmYWNlVGFyZ2V0KTsKICAgICAgICB2YXIgYXNFeHByZXNzaW9uID0gbmV3IEFzRXhwcmVzc2lvbihwcm9wZXJ0eUdldCwgZnVuY3Rpb25UeXBlKQogICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gbmV3IE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICAgIGFzRXhwcmVzc2lvbiwgY2FsbE5hbWUsIGRlc3VnYXJlZEludm9jYXRpb24uYXJndW1lbnRzKTsKICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKGV4cHJlc3Npb25Ub1JlcGxhY2UsIHJlcGxhY2VtZW50KTsKICAgICAgICBpZiAoaW5zdHJ1bWVudGF0aW9uICE9IG51bGwpIHsKICAgICAgICAgIGludCBvZmZzZXQgPSBhcmd1bWVudHMuZmlsZU9mZnNldCA9PSAtMQogICAgICAgICAgICAgID8gZXhwcmVzc2lvbi5maWxlT2Zmc2V0CiAgICAgICAgICAgICAgOiBhcmd1bWVudHMuZmlsZU9mZnNldDsKICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5yZWNvcmQodXJpLCBvZmZzZXQsICdjaGVja0dldHRlclJldHVybicsCiAgICAgICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZShmdW5jdGlvblR5cGUpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgICBjYXNlIE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kLm5vbmU6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvblRvUmVwbGFjZTsKICB9CgogIC8vLyBBZGQgYW4gImFzIiBjaGVjayBpZiBuZWNlc3NhcnkgZHVlIHRvIGNvbnRyYXZhcmlhbmNlLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSAiYXMiIGNoZWNrIGlmIGl0IHdhcyBhZGRlZDsgb3RoZXJ3aXNlIHJldHVybnMgdGhlIG9yaWdpbmFsCiAgLy8vIGV4cHJlc3Npb24uCiAgRXhwcmVzc2lvbiBoYW5kbGVQcm9wZXJ0eUdldENvbnRyYXZhcmlhbmNlKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLAogICAgICBPYmplY3QgaW50ZXJmYWNlTWVtYmVyLAogICAgICBQcm9wZXJ0eUdldCBkZXN1Z2FyZWRHZXQsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlLAogICAgICBpbnQgZmlsZU9mZnNldCkgewogICAgYm9vbCBjaGVja1JldHVybiA9IGZhbHNlOwogICAgaWYgKHJlY2VpdmVyICE9IG51bGwgJiYKICAgICAgICBpbnRlcmZhY2VNZW1iZXIgIT0gbnVsbCAmJgogICAgICAgIHJlY2VpdmVyIGlzISBUaGlzRXhwcmVzc2lvbikgewogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIFByb2NlZHVyZSkgewogICAgICAgIGNoZWNrUmV0dXJuID0gcmV0dXJuZWRUeXBlUGFyYW1ldGVyc09jY3VyTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcywKICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZ1bmN0aW9uLnJldHVyblR5cGUpOwogICAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCkgewogICAgICAgIGNoZWNrUmV0dXJuID0gcmV0dXJuZWRUeXBlUGFyYW1ldGVyc09jY3VyTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcywgaW50ZXJmYWNlTWVtYmVyLnR5cGUpOwogICAgICB9CiAgICB9CiAgICB2YXIgcmVwbGFjZWRFeHByZXNzaW9uID0gZGVzdWdhcmVkR2V0ID8/IGV4cHJlc3Npb247CiAgICBpZiAoY2hlY2tSZXR1cm4pIHsKICAgICAgdmFyIGV4cHJlc3Npb25Ub1JlcGxhY2UgPSByZXBsYWNlZEV4cHJlc3Npb247CiAgICAgIHZhciBwYXJlbnQgPSBleHByZXNzaW9uVG9SZXBsYWNlLnBhcmVudDsKICAgICAgcmVwbGFjZWRFeHByZXNzaW9uID0gbmV3IEFzRXhwcmVzc2lvbihleHByZXNzaW9uVG9SZXBsYWNlLCBpbmZlcnJlZFR5cGUpCiAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKGV4cHJlc3Npb25Ub1JlcGxhY2UsIHJlcGxhY2VkRXhwcmVzc2lvbik7CiAgICB9CiAgICBpZiAoaW5zdHJ1bWVudGF0aW9uICE9IG51bGwgJiYgY2hlY2tSZXR1cm4pIHsKICAgICAgaW5zdHJ1bWVudGF0aW9uLnJlY29yZCh1cmksIGV4cHJlc3Npb24uZmlsZU9mZnNldCwgJ2NoZWNrUmV0dXJuJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRUeXBlKSk7CiAgICB9CiAgICByZXR1cm4gcmVwbGFjZWRFeHByZXNzaW9uOwogIH0KCiAgLy8vIE1vZGlmaWVzIGEgdHlwZSBhcyBhcHByb3ByaWF0ZSB3aGVuIGluZmVycmluZyBhIGRlY2xhcmVkIHZhcmlhYmxlJ3MgdHlwZS4KICBEYXJ0VHlwZSBpbmZlckRlY2xhcmF0aW9uVHlwZShEYXJ0VHlwZSBpbml0aWFsaXplclR5cGUpIHsKICAgIGlmIChpbml0aWFsaXplclR5cGUgaXMgQm90dG9tVHlwZSB8fAogICAgICAgIChpbml0aWFsaXplclR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgICAgICBpbml0aWFsaXplclR5cGUuY2xhc3NOb2RlID09IGNvcmVUeXBlcy5udWxsQ2xhc3MpKSB7CiAgICAgIC8vIElmIHRoZSBpbml0aWFsaXplciB0eXBlIGlzIE51bGwgb3IgYm90dG9tLCB0aGUgaW5mZXJyZWQgdHlwZSBpcwogICAgICAvLyBkeW5hbWljLgogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHRoaXMgcnVsZSBpcyBpbmhlcml0ZWQgZnJvbSBhbmFseXplciBiZWhhdmlvciBidXQgaXMKICAgICAgLy8gbm90IHNwZWMnZWQgYW55d2hlcmUuCiAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgcmV0dXJuIGluaXRpYWxpemVyVHlwZTsKICB9CgogIC8vLyBQZXJmb3JtcyB0eXBlIGluZmVyZW5jZSBvbiB0aGUgZ2l2ZW4gW2V4cHJlc3Npb25dLgogIC8vLwogIC8vLyBbdHlwZUNvbnRleHRdIGlzIHRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBleHByZXNzaW9uLCBiYXNlZCBvbiBzdXJyb3VuZGluZwogIC8vLyBjb2RlLiAgW3R5cGVOZWVkZWRdIGluZGljYXRlcyB3aGV0aGVyIGl0IGlzIG5lY2Vzc2FyeSB0byBjb21wdXRlIHRoZQogIC8vLyBhY3R1YWwgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi4gIElmIFt0eXBlTmVlZGVkXSBpcyBgdHJ1ZWAsIHRoZSBhY3R1YWwgdHlwZQogIC8vLyBvZiB0aGUgZXhwcmVzc2lvbiBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIGBudWxsYCBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aXRoIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlcyBvbgogIC8vLyB0aGUgZXhwcmVzc2lvbiB0eXBlIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgc3BlY2lhbGl6ZWQgImluZmVyIiBtZXRob2QuCiAgRGFydFR5cGUgaW5mZXJFeHByZXNzaW9uKAogICAgICBrZXJuZWwuRXhwcmVzc2lvbiBleHByZXNzaW9uLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCwgYm9vbCB0eXBlTmVlZGVkLAogICAgICB7Ym9vbCBpc1ZvaWRBbGxvd2VkfSk7CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJGaWVsZEluaXRpYWxpemVyKAogICAgSW5mZXJlbmNlSGVscGVyIGhlbHBlciwKICAgIERhcnRUeXBlIGNvbnRleHQsCiAgICBrZXJuZWwuRXhwcmVzc2lvbiBpbml0aWFsaXplciwKICApIHsKICAgIGFzc2VydChjbG9zdXJlQ29udGV4dCA9PSBudWxsKTsKICAgIGFzc2VydCghaXNUb3BMZXZlbCk7CiAgICB0aGlzLmhlbHBlciA9IGhlbHBlcjsKICAgIHZhciBhY3R1YWxUeXBlID0KICAgICAgICBpbmZlckV4cHJlc3Npb24oaW5pdGlhbGl6ZXIsIGNvbnRleHQsIHRydWUsIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgZW5zdXJlQXNzaWduYWJsZShjb250ZXh0LCBhY3R1YWxUeXBlLCBpbml0aWFsaXplciwgaW5pdGlhbGl6ZXIuZmlsZU9mZnNldCwKICAgICAgICBpc1ZvaWRBbGxvd2VkOiBjb250ZXh0IGlzIFZvaWRUeXBlKTsKICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJGdW5jdGlvbkJvZHkoSW5mZXJlbmNlSGVscGVyIGhlbHBlciwgRGFydFR5cGUgcmV0dXJuVHlwZSwKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsIFN0YXRlbWVudCBib2R5KSB7CiAgICBhc3NlcnQoY2xvc3VyZUNvbnRleHQgPT0gbnVsbCk7CiAgICB0aGlzLmhlbHBlciA9IGhlbHBlcjsKICAgIGNsb3N1cmVDb250ZXh0ID0gbmV3IENsb3N1cmVDb250ZXh0KHRoaXMsIGFzeW5jTWFya2VyLCByZXR1cm5UeXBlLCBmYWxzZSk7CiAgICBpbmZlclN0YXRlbWVudChib2R5KTsKICAgIGNsb3N1cmVDb250ZXh0ID0gbnVsbDsKICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICB9CgogIC8vLyBQZXJmb3JtcyB0aGUgdHlwZSBpbmZlcmVuY2Ugc3RlcHMgdGhhdCBhcmUgc2hhcmVkIGJ5IGFsbCBraW5kcyBvZgogIC8vLyBpbnZvY2F0aW9ucyAoY29uc3RydWN0b3JzLCBpbnN0YW5jZSBtZXRob2RzLCBhbmQgc3RhdGljIG1ldGhvZHMpLgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgaW5mZXJJbnZvY2F0aW9uKERhcnRUeXBlIHR5cGVDb250ZXh0LCBpbnQgb2Zmc2V0LAogICAgICBGdW5jdGlvblR5cGUgY2FsbGVlVHlwZSwgRGFydFR5cGUgcmV0dXJuVHlwZSwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAge2Jvb2wgaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yOiBmYWxzZSwKICAgICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBib29sIHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2U6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlfSkgewogICAgbGFzdEluZmVycmVkU3Vic3RpdHV0aW9uID0gbnVsbDsKICAgIGxhc3RDYWxsZWVUeXBlID0gbnVsbDsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gY2FsbGVlVHlwZVBhcmFtZXRlcnMgPSBjYWxsZWVUeXBlLnR5cGVQYXJhbWV0ZXJzOwogICAgaWYgKGNhbGxlZVR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IG9uZSBvZiB0aGUgY2FsbGVlIHR5cGUgcGFyYW1ldGVycyBtaWdodCBtYXRjaCBhIHR5cGUKICAgICAgLy8gdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBwYXJ0IG9mIGluZmVyZW5jZSAoZS5nLiB0aGUgdHlwZSBvZiBhbgogICAgICAvLyBhcmd1bWVudCkuICBUaGlzIG1pZ2h0IGhhcHBlbiwgZm9yIGluc3RhbmNlLCBpbiB0aGUgY2FzZSB3aGVyZSBhCiAgICAgIC8vIGZ1bmN0aW9uIG9yIG1ldGhvZCBtYWtlcyBhIHJlY3Vyc2l2ZSBjYWxsIHRvIGl0c2VsZi4gIFRvIGF2b2lkIHRoZQogICAgICAvLyBjYWxsZWUgdHlwZSBwYXJhbWV0ZXJzIGFjY2lkZW50YWxseSBtYXRjaGluZyBhIHR5cGUgdGhhdCBhbHJlYWR5CiAgICAgIC8vIGV4aXN0cywgYW5kIGNyZWF0aW5nIGludmFsaWQgaW5mZXJlbmNlIHJlc3VsdHMsIHdlIG5lZWQgdG8gY3JlYXRlIGZyZXNoCiAgICAgIC8vIHR5cGUgcGFyYW1ldGVycyBmb3IgdGhlIGNhbGxlZSAoc2VlIGRhcnRidWcuY29tLzMxNzU5KS4KICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiBpcyBpdCBwb3NzaWJsZSB0byBmaW5kIGEgbmFycm93ZXIgc2V0IG9mIGNpcmN1bXN0YW5jZXMKICAgICAgLy8gaW4gd2hpY2ggbWUgbXVzdCBkbyB0aGlzLCB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24/CiAgICAgIHZhciBmcmVzaCA9IGdldEZyZXNoVHlwZVBhcmFtZXRlcnMoY2FsbGVlVHlwZVBhcmFtZXRlcnMpOwogICAgICBjYWxsZWVUeXBlID0gZnJlc2guYXBwbHlUb0Z1bmN0aW9uVHlwZShjYWxsZWVUeXBlKTsKICAgICAgcmV0dXJuVHlwZSA9IGZyZXNoLnN1YnN0aXR1dGUocmV0dXJuVHlwZSk7CiAgICAgIGNhbGxlZVR5cGVQYXJhbWV0ZXJzID0gZnJlc2guZnJlc2hUeXBlUGFyYW1ldGVyczsKICAgIH0KICAgIExpc3Q8RGFydFR5cGU+IGV4cGxpY2l0VHlwZUFyZ3VtZW50cyA9IGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpOwogICAgYm9vbCBpbmZlcmVuY2VOZWVkZWQgPSAhc2tpcFR5cGVBcmd1bWVudEluZmVyZW5jZSAmJgogICAgICAgIGV4cGxpY2l0VHlwZUFyZ3VtZW50cyA9PSBudWxsICYmCiAgICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eTsKICAgIGJvb2wgdHlwZUNoZWNrc05lZWRlZCA9ICFpc1RvcExldmVsOwogICAgTGlzdDxEYXJ0VHlwZT4gaW5mZXJyZWRUeXBlczsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb247CiAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlczsKICAgIExpc3Q8RGFydFR5cGU+IGFjdHVhbFR5cGVzOwogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvcm1hbFR5cGVzID0gW107CiAgICAgIGFjdHVhbFR5cGVzID0gW107CiAgICB9CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIGlmIChpc0NvbnN0ICYmIHR5cGVDb250ZXh0ICE9IG51bGwpIHsKICAgICAgICB0eXBlQ29udGV4dCA9CiAgICAgICAgICAgIG5ldyBUeXBlVmFyaWFibGVFbGltaW5hdG9yKGNvcmVUeXBlcykuc3Vic3RpdHV0ZVR5cGUodHlwZUNvbnRleHQpOwogICAgICB9CiAgICAgIGluZmVycmVkVHlwZXMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBVbmtub3duVHlwZSgpKTsKICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKHJldHVyblR5cGUsCiAgICAgICAgICBjYWxsZWVUeXBlUGFyYW1ldGVycywgbnVsbCwgbnVsbCwgdHlwZUNvbnRleHQsIGluZmVycmVkVHlwZXMpOwogICAgICBzdWJzdGl0dXRpb24gPQogICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycyhjYWxsZWVUeXBlUGFyYW1ldGVycywgaW5mZXJyZWRUeXBlcyk7CiAgICB9IGVsc2UgaWYgKGV4cGxpY2l0VHlwZUFyZ3VtZW50cyAhPSBudWxsICYmCiAgICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMubGVuZ3RoID09IGV4cGxpY2l0VHlwZUFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgc3Vic3RpdHV0aW9uID0KICAgICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoY2FsbGVlVHlwZVBhcmFtZXRlcnMsIGV4cGxpY2l0VHlwZUFyZ3VtZW50cyk7CiAgICB9IGVsc2UgaWYgKGNhbGxlZVR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSAwKSB7CiAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICBjYWxsZWVUeXBlUGFyYW1ldGVycywKICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBEeW5hbWljVHlwZSgpKSk7CiAgICB9CiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGlmIHdlIGFyZSBkb2luZyB0b3AgbGV2ZWwgaW5mZXJlbmNlIGFuZCB0eXBlIGFyZ3VtZW50cwogICAgLy8gd2VyZSBvbWl0dGVkLCByZXBvcnQgYW4gZXJyb3IuCiAgICBpbnQgaSA9IDA7CiAgICBfZm9yRWFjaEFyZ3VtZW50KGFyZ3VtZW50cywgKG5hbWUsIGV4cHJlc3Npb24pIHsKICAgICAgRGFydFR5cGUgZm9ybWFsVHlwZSA9IG5hbWUgIT0gbnVsbAogICAgICAgICAgPyBnZXROYW1lZFBhcmFtZXRlclR5cGUoY2FsbGVlVHlwZSwgbmFtZSkKICAgICAgICAgIDogZ2V0UG9zaXRpb25hbFBhcmFtZXRlclR5cGUoY2FsbGVlVHlwZSwgaSsrKTsKICAgICAgRGFydFR5cGUgaW5mZXJyZWRGb3JtYWxUeXBlID0gc3Vic3RpdHV0aW9uICE9IG51bGwKICAgICAgICAgID8gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGZvcm1hbFR5cGUpCiAgICAgICAgICA6IGZvcm1hbFR5cGU7CiAgICAgIHZhciBleHByZXNzaW9uVHlwZSA9IGluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgICBpbmZlcnJlZEZvcm1hbFR5cGUsCiAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwKICAgICAgICAgICAgICBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IgfHwKICAgICAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgICAgZm9ybWFsVHlwZXMuYWRkKGZvcm1hbFR5cGUpOwogICAgICAgIGFjdHVhbFR5cGVzLmFkZChleHByZXNzaW9uVHlwZSk7CiAgICAgIH0KICAgICAgaWYgKGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcikgewogICAgICAgIHJldHVyblR5cGUgPSB0eXBlU2NoZW1hRW52aXJvbm1lbnQuZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMoCiAgICAgICAgICAgIHJlY2VpdmVyVHlwZSwgZXhwcmVzc2lvblR5cGUpOwogICAgICB9CiAgICB9KTsKCiAgICAvLyBDaGVjayBmb3IgYW5kIHJlbW92ZSBkdXBsaWNhdGVkIG5hbWVkIGFyZ3VtZW50cy4KICAgIHZhciBuYW1lZCA9IGFyZ3VtZW50cy5uYW1lZDsKICAgIGlmIChuYW1lZC5sZW5ndGggPT0gMikgewogICAgICBpZiAobmFtZWRbMF0ubmFtZSA9PSBuYW1lZFsxXS5uYW1lKSB7CiAgICAgICAgdmFyIG5hbWUgPSBuYW1lZFsxXS5uYW1lOwogICAgICAgIHZhciBlcnJvciA9IGhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihoZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIG5hbWVkWzFdLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIG5hbWUubGVuZ3RoKSk7CiAgICAgICAgYXJndW1lbnRzLm5hbWVkID0gW25ldyBrZXJuZWwuTmFtZWRFeHByZXNzaW9uKG5hbWVkWzFdLm5hbWUsIGVycm9yKV07CiAgICAgICAgZm9ybWFsVHlwZXMucmVtb3ZlTGFzdCgpOwogICAgICAgIGFjdHVhbFR5cGVzLnJlbW92ZUxhc3QoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChuYW1lZC5sZW5ndGggPiAyKSB7CiAgICAgIHZhciBzZWVuTmFtZXMgPSA8U3RyaW5nLCBrZXJuZWwuTmFtZWRFeHByZXNzaW9uPnt9OwogICAgICB2YXIgaGFzUHJvYmxlbSA9IGZhbHNlOwogICAgICB2YXIgbmFtZWRUeXBlSW5kZXggPSBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGg7CiAgICAgIHZhciB1bmlxdWVOYW1lZCA9IDxrZXJuZWwuTmFtZWRFeHByZXNzaW9uPltdOwogICAgICBmb3IgKHZhciBleHByZXNzaW9uIGluIG5hbWVkKSB7CiAgICAgICAgdmFyIG5hbWUgPSBleHByZXNzaW9uLm5hbWU7CiAgICAgICAgaWYgKHNlZW5OYW1lcy5jb250YWluc0tleShuYW1lKSkgewogICAgICAgICAgaGFzUHJvYmxlbSA9IHRydWU7CiAgICAgICAgICB2YXIgcHJldk5hbWVkRXhwcmVzc2lvbiA9IHNlZW5OYW1lc1tuYW1lXTsKICAgICAgICAgIHByZXZOYW1lZEV4cHJlc3Npb24udmFsdWUgPSBoZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZWRBcmd1bWVudC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgICAgICBleHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgIG5hbWUubGVuZ3RoKSkKICAgICAgICAgICAgLi5wYXJlbnQgPSBwcmV2TmFtZWRFeHByZXNzaW9uOwogICAgICAgICAgZm9ybWFsVHlwZXMucmVtb3ZlQXQobmFtZWRUeXBlSW5kZXgpOwogICAgICAgICAgYWN0dWFsVHlwZXMucmVtb3ZlQXQobmFtZWRUeXBlSW5kZXgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZWVuTmFtZXNbbmFtZV0gPSBleHByZXNzaW9uOwogICAgICAgICAgdW5pcXVlTmFtZWQuYWRkKGV4cHJlc3Npb24pOwogICAgICAgICAgbmFtZWRUeXBlSW5kZXgrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGhhc1Byb2JsZW0pIHsKICAgICAgICBhcmd1bWVudHMubmFtZWQgPSB1bmlxdWVOYW1lZDsKICAgICAgfQogICAgfQoKICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICAgIGNhbGxlZVR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgZm9ybWFsVHlwZXMsCiAgICAgICAgICBhY3R1YWxUeXBlcywKICAgICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgICAgaW5mZXJyZWRUeXBlcyk7CiAgICAgIHN1YnN0aXR1dGlvbiA9CiAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKGNhbGxlZVR5cGVQYXJhbWV0ZXJzLCBpbmZlcnJlZFR5cGVzKTsKICAgICAgaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQodXJpLCBvZmZzZXQsICd0eXBlQXJncycsCiAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJncyhpbmZlcnJlZFR5cGVzKSk7CiAgICAgIGFyZ3VtZW50cy50eXBlcy5jbGVhcigpOwogICAgICBhcmd1bWVudHMudHlwZXMuYWRkQWxsKGluZmVycmVkVHlwZXMpOwogICAgfQogICAgaWYgKHR5cGVDaGVja3NOZWVkZWQgJiYgIWlkZW50aWNhbChjYWxsZWVUeXBlLCB1bmtub3duRnVuY3Rpb24pKSB7CiAgICAgIExvY2F0ZWRNZXNzYWdlIGFyZ01lc3NhZ2UgPQogICAgICAgICAgaGVscGVyLmNoZWNrQXJndW1lbnRzRm9yVHlwZShjYWxsZWVUeXBlLCBhcmd1bWVudHMsIG9mZnNldCk7CiAgICAgIGlmIChhcmdNZXNzYWdlICE9IG51bGwpIHsKICAgICAgICBoZWxwZXIuYWRkUHJvYmxlbSgKICAgICAgICAgICAgYXJnTWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBhcmdNZXNzYWdlLmNoYXJPZmZzZXQsIGFyZ01lc3NhZ2UubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBBcmd1bWVudCBjb3VudHMgYW5kIG5hbWVzIG1hdGNoLiBDb21wYXJlIHR5cGVzLgogICAgICAgIGludCBudW1Qb3NpdGlvbmFsQXJncyA9IGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvcm1hbFR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgZm9ybWFsVHlwZSA9IGZvcm1hbFR5cGVzW2ldOwogICAgICAgICAgdmFyIGV4cGVjdGVkVHlwZSA9IHN1YnN0aXR1dGlvbiAhPSBudWxsCiAgICAgICAgICAgICAgPyBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZm9ybWFsVHlwZSkKICAgICAgICAgICAgICA6IGZvcm1hbFR5cGU7CiAgICAgICAgICB2YXIgYWN0dWFsVHlwZSA9IGFjdHVhbFR5cGVzW2ldOwogICAgICAgICAgdmFyIGV4cHJlc3Npb24gPSBpIDwgbnVtUG9zaXRpb25hbEFyZ3MKICAgICAgICAgICAgICA/IGFyZ3VtZW50cy5wb3NpdGlvbmFsW2ldCiAgICAgICAgICAgICAgOiBhcmd1bWVudHMubmFtZWRbaSAtIG51bVBvc2l0aW9uYWxBcmdzXS52YWx1ZTsKICAgICAgICAgIGVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICAgICAgZXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlLCBleHByZXNzaW9uLCBleHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogZXhwZWN0ZWRUeXBlIGlzIFZvaWRUeXBlLAogICAgICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogICAgbGFzdEluZmVycmVkU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uOwogICAgbGFzdENhbGxlZVR5cGUgPSBjYWxsZWVUeXBlOwogICAgaW5mZXJyZWRUeXBlID0gc3Vic3RpdHV0aW9uID09IG51bGwKICAgICAgICA/IHJldHVyblR5cGUKICAgICAgICA6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShyZXR1cm5UeXBlKTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChudWxsLCBpbmZlcnJlZFR5cGUpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBpbmZlckxvY2FsRnVuY3Rpb24oRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLAogICAgICBEYXJ0VHlwZSB0eXBlQ29udGV4dCwgaW50IGZpbGVPZmZzZXQsIERhcnRUeXBlIHJldHVybkNvbnRleHQpIHsKICAgIGJvb2wgaGFzSW1wbGljaXRSZXR1cm5UeXBlID0gZmFsc2U7CiAgICBpZiAocmV0dXJuQ29udGV4dCA9PSBudWxsKSB7CiAgICAgIGhhc0ltcGxpY2l0UmV0dXJuVHlwZSA9IHRydWU7CiAgICAgIHJldHVybkNvbnRleHQgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgaWYgKCFpc1RvcExldmVsKSB7CiAgICAgIHZhciBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHBhcmFtZXRlciA9IHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAgIGluZmVyTWV0YWRhdGFLZWVwaW5nSGVscGVyKHBhcmFtZXRlci5hbm5vdGF0aW9ucyk7CiAgICAgICAgaWYgKHBhcmFtZXRlci5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBpbmZlckV4cHJlc3Npb24ocGFyYW1ldGVyLmluaXRpYWxpemVyLCBwYXJhbWV0ZXIudHlwZSwgIWlzVG9wTGV2ZWwpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgaW5mZXJNZXRhZGF0YUtlZXBpbmdIZWxwZXIocGFyYW1ldGVyLmFubm90YXRpb25zKTsKICAgICAgICBpbmZlckV4cHJlc3Npb24ocGFyYW1ldGVyLmluaXRpYWxpemVyLCBwYXJhbWV0ZXIudHlwZSwgIWlzVG9wTGV2ZWwpOwogICAgICB9CiAgICB9CgogICAgLy8gTGV0IGA8VDAsIC4uLiwgVG4+YCBiZSB0aGUgc2V0IG9mIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgY2xvc3VyZSAod2l0aAogICAgLy8gYG5gPTAgaWYgdGhlcmUgYXJlIG5vIHR5cGUgcGFyYW1ldGVycykuCiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gZnVuY3Rpb24udHlwZVBhcmFtZXRlcnM7CgogICAgLy8gTGV0IGAoUDAgeDAsIC4uLiwgUG0geG0pYCBiZSB0aGUgc2V0IG9mIGZvcm1hbCBwYXJhbWV0ZXJzIG9mIHRoZSBjbG9zdXJlCiAgICAvLyAoaW5jbHVkaW5nIHJlcXVpcmVkLCBwb3NpdGlvbmFsIG9wdGlvbmFsLCBhbmQgbmFtZWQgb3B0aW9uYWwgcGFyYW1ldGVycykuCiAgICAvLyBJZiBhbnkgdHlwZSBgUGlgIGlzIG1pc3NpbmcsIGRlbm90ZSBpdCBhcyBgX2AuCiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGZvcm1hbHMgPSBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy50b0xpc3QoKQogICAgICAuLmFkZEFsbChmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpOwoKICAgIC8vIExldCBgQmAgZGVub3RlIHRoZSBjbG9zdXJlIGJvZHkuICBJZiBgQmAgaXMgYW4gZXhwcmVzc2lvbiBmdW5jdGlvbiBib2R5CiAgICAvLyAoYD0+IGVgKSwgdHJlYXQgaXQgYXMgZXF1aXZhbGVudCB0byBhIGJsb2NrIGZ1bmN0aW9uIGJvZHkgY29udGFpbmluZyBhCiAgICAvLyBzaW5nbGUgYHJldHVybmAgc3RhdGVtZW50IChgeyByZXR1cm4gZTsgfWApLgoKICAgIC8vIEF0dGVtcHQgdG8gbWF0Y2ggYEtgIGFzIGEgZnVuY3Rpb24gdHlwZSBjb21wYXRpYmxlIHdpdGggdGhlIGNsb3N1cmUgKHRoYXQKICAgIC8vIGlzLCBvbmUgaGF2aW5nIG4gdHlwZSBwYXJhbWV0ZXJzIGFuZCBhIGNvbXBhdGlibGUgc2V0IG9mIGZvcm1hbAogICAgLy8gcGFyYW1ldGVycykuICBJZiB0aGVyZSBpcyBhIHN1Y2Nlc3NmdWwgbWF0Y2gsIGxldCBgPFMwLCAuLi4sIFNuPmAgYmUgdGhlCiAgICAvLyBzZXQgb2YgbWF0Y2hlZCB0eXBlIHBhcmFtZXRlcnMgYW5kIGAoUTAsIC4uLiwgUW0pYCBiZSB0aGUgc2V0IG9mIG1hdGNoZWQKICAgIC8vIGZvcm1hbCBwYXJhbWV0ZXIgdHlwZXMsIGFuZCBsZXQgYE5gIGJlIHRoZSByZXR1cm4gdHlwZS4KICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb247CiAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlc0Zyb21Db250ZXh0ID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKGZvcm1hbHMubGVuZ3RoLCBudWxsKTsKICAgIGlmICh0eXBlQ29udGV4dCBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGkgPCBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgIGZvcm1hbFR5cGVzRnJvbUNvbnRleHRbaV0gPQogICAgICAgICAgICAgIGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJUeXBlKHR5cGVDb250ZXh0LCBpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9ybWFsVHlwZXNGcm9tQ29udGV4dFtpXSA9CiAgICAgICAgICAgICAgZ2V0TmFtZWRQYXJhbWV0ZXJUeXBlKHR5cGVDb250ZXh0LCBmb3JtYWxzW2ldLm5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm5Db250ZXh0ID0gdHlwZUNvbnRleHQucmV0dXJuVHlwZTsKCiAgICAgIC8vIExldCBgW1QvU11gIGRlbm90ZSB0aGUgdHlwZSBzdWJzdGl0dXRpb24gd2hlcmUgZWFjaCBgU2lgIGlzIHJlcGxhY2VkCiAgICAgIC8vIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYFRpYC4KICAgICAgdmFyIHN1YnN0aXR1dGlvbk1hcCA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQ29udGV4dC50eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHN1YnN0aXR1dGlvbk1hcFt0eXBlQ29udGV4dC50eXBlUGFyYW1ldGVyc1tpXV0gPQogICAgICAgICAgICBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoCiAgICAgICAgICAgICAgICA/IG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyc1tpXSkKICAgICAgICAgICAgICAgIDogY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgfQogICAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbU1hcChzdWJzdGl0dXRpb25NYXApOwogICAgfSBlbHNlIHsKICAgICAgLy8gSWYgdGhlIG1hdGNoIGlzIG5vdCBzdWNjZXNzZnVsIGJlY2F1c2UgIGBLYCBpcyBgX2AsIGxldCBhbGwgYFNpYCwgYWxsCiAgICAgIC8vIGBRaWAsIGFuZCBgTmAgYWxsIGJlIGBfYC4KCiAgICAgIC8vIElmIHRoZSBtYXRjaCBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgYW55IG90aGVyIHJlYXNvbiwgdGhpcyB3aWxsIHJlc3VsdAogICAgICAvLyBpbiBhIHR5cGUgZXJyb3IsIHNvIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHRvIGNob29zZSB0aGUgYmVzdAogICAgICAvLyBlcnJvciByZWNvdmVyeSBwYXRoLgogICAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZW1wdHk7CiAgICB9CgogICAgLy8gRGVmaW5lIGBSaWAgYXMgZm9sbG93czogaWYgYFBpYCBpcyBub3QgYF9gLCBsZXQgYFJpYCBiZSBgUGlgLgogICAgLy8gT3RoZXJ3aXNlLCBpZiBgUWlgIGlzIG5vdCBgX2AsIGxldCBgUmlgIGJlIHRoZSBncmVhdGVzdCBjbG9zdXJlIG9mCiAgICAvLyBgUWlbVC9TXWAgd2l0aCByZXNwZWN0IHRvIGA/YC4gIE90aGVyd2lzZSwgbGV0IGBSaWAgYmUgYGR5bmFtaWNgLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBmb3JtYWwgPSBmb3JtYWxzW2ldOwogICAgICBpZiAoVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmlzSW1wbGljaXRseVR5cGVkKGZvcm1hbCkpIHsKICAgICAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CiAgICAgICAgaWYgKGZvcm1hbFR5cGVzRnJvbUNvbnRleHRbaV0gPT0gY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlKSB7CiAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBjb3JlVHlwZXMub2JqZWN0Q2xhc3MucmF3VHlwZTsKICAgICAgICB9IGVsc2UgaWYgKGZvcm1hbFR5cGVzRnJvbUNvbnRleHRbaV0gIT0gbnVsbCkgewogICAgICAgICAgaW5mZXJyZWRUeXBlID0gZ3JlYXRlc3RDbG9zdXJlKGNvcmVUeXBlcywKICAgICAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZm9ybWFsVHlwZXNGcm9tQ29udGV4dFtpXSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICAgIH0KICAgICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIGZvcm1hbC5maWxlT2Zmc2V0LCAndHlwZScsCiAgICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRUeXBlKSk7CiAgICAgICAgZm9ybWFsLnR5cGUgPSBpbmZlcnJlZFR5cGU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBMZXQgYE4nYCBiZSBgTltUL1NdYC4gIFRoZSBbQ2xvc3VyZUNvbnRleHRdIGNvbnN0cnVjdG9yIHdpbGwgYWRqdXN0CiAgICAvLyBhY2NvcmRpbmdseSBpZiB0aGUgY2xvc3VyZSBpcyBkZWNsYXJlZCB3aXRoIGBhc3luY2AsIGBhc3luYypgLCBvcgogICAgLy8gYHN5bmMqYC4KICAgIGlmIChyZXR1cm5Db250ZXh0IGlzISBVbmtub3duVHlwZSkgewogICAgICByZXR1cm5Db250ZXh0ID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHJldHVybkNvbnRleHQpOwogICAgfQoKICAgIC8vIEFwcGx5IHR5cGUgaW5mZXJlbmNlIHRvIGBCYCBpbiByZXR1cm4gY29udGV4dCBgTuKAmWAsIHdpdGggYW55IHJlZmVyZW5jZXMKICAgIC8vIHRvIGB4aWAgaW4gYEJgIGhhdmluZyB0eXBlIGBQaWAuICBUaGlzIHByb2R1Y2VzIGBC4oCZYC4KICAgIGJvb2wgbmVlZFRvU2V0UmV0dXJuVHlwZSA9IGhhc0ltcGxpY2l0UmV0dXJuVHlwZTsKICAgIENsb3N1cmVDb250ZXh0IG9sZENsb3N1cmVDb250ZXh0ID0gdGhpcy5jbG9zdXJlQ29udGV4dDsKICAgIENsb3N1cmVDb250ZXh0IGNsb3N1cmVDb250ZXh0ID0gbmV3IENsb3N1cmVDb250ZXh0KAogICAgICAgIHRoaXMsIGZ1bmN0aW9uLmFzeW5jTWFya2VyLCByZXR1cm5Db250ZXh0LCBuZWVkVG9TZXRSZXR1cm5UeXBlKTsKICAgIHRoaXMuY2xvc3VyZUNvbnRleHQgPSBjbG9zdXJlQ29udGV4dDsKICAgIGluZmVyU3RhdGVtZW50KGZ1bmN0aW9uLmJvZHkpOwoKICAgIC8vIElmIHRoZSBjbG9zdXJlIGlzIGRlY2xhcmVkIHdpdGggYGFzeW5jKmAgb3IgYHN5bmMqYCwgbGV0IGBNYCBiZSB0aGUKICAgIC8vIGxlYXN0IHVwcGVyIGJvdW5kIG9mIHRoZSB0eXBlcyBvZiB0aGUgYHlpZWxkYCBleHByZXNzaW9ucyBpbiBgQuKAmWAsIG9yCiAgICAvLyBgdm9pZGAgaWYgYELigJlgIGNvbnRhaW5zIG5vIGB5aWVsZGAgZXhwcmVzc2lvbnMuICBPdGhlcndpc2UsIGxldCBgTWAgYmUKICAgIC8vIHRoZSBsZWFzdCB1cHBlciBib3VuZCBvZiB0aGUgdHlwZXMgb2YgdGhlIGByZXR1cm5gIGV4cHJlc3Npb25zIGluIGBC4oCZYCwKICAgIC8vIG9yIGB2b2lkYCBpZiBgQuKAmWAgY29udGFpbnMgbm8gYHJldHVybmAgZXhwcmVzc2lvbnMuCiAgICBEYXJ0VHlwZSBpbmZlcnJlZFJldHVyblR5cGU7CiAgICBpZiAobmVlZFRvU2V0UmV0dXJuVHlwZSkgewogICAgICBpbmZlcnJlZFJldHVyblR5cGUgPSBjbG9zdXJlQ29udGV4dC5pbmZlclJldHVyblR5cGUodGhpcyk7CiAgICB9CgogICAgLy8gVGhlbiB0aGUgcmVzdWx0IG9mIGluZmVyZW5jZSBpcyBgPFQwLCAuLi4sIFRuPihSMCB4MCwgLi4uLCBSbiB4bikgQmAgd2l0aAogICAgLy8gdHlwZSBgPFQwLCAuLi4sIFRuPihSMCwgLi4uLCBSbikgLT4gTeKAmWAgKHdpdGggc29tZSBvZiB0aGUgYFJpYCBhbmQgYHhpYAogICAgLy8gZGVub3RlZCBhcyBvcHRpb25hbCBvciBuYW1lZCBwYXJhbWV0ZXJzLCBpZiBhcHByb3ByaWF0ZSkuCiAgICBpZiAobmVlZFRvU2V0UmV0dXJuVHlwZSkgewogICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIGZpbGVPZmZzZXQsICdyZXR1cm5UeXBlJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRSZXR1cm5UeXBlKSk7CiAgICAgIGZ1bmN0aW9uLnJldHVyblR5cGUgPSBpbmZlcnJlZFJldHVyblR5cGU7CiAgICB9CiAgICB0aGlzLmNsb3N1cmVDb250ZXh0ID0gb2xkQ2xvc3VyZUNvbnRleHQ7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobnVsbCwgZnVuY3Rpb24uZnVuY3Rpb25UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJNZXRhZGF0YSgKICAgICAgSW5mZXJlbmNlSGVscGVyIGhlbHBlciwgTGlzdDxrZXJuZWwuRXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgIHRoaXMuaGVscGVyID0gaGVscGVyOwogICAgICBpbmZlck1ldGFkYXRhS2VlcGluZ0hlbHBlcihhbm5vdGF0aW9ucyk7CiAgICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJNZXRhZGF0YUtlZXBpbmdIZWxwZXIoTGlzdDxrZXJuZWwuRXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgIC8vIFBsYWNlIGFubm90YXRpb25zIGluIGEgdGVtcG9yYXJ5IGxpc3QgbGl0ZXJhbCBzbyB0aGF0IHRoZXkgd2lsbCBoYXZlIGEKICAgICAgLy8gcGFyZW50LiAgVGhpcyBpcyBuZWNlc3NhcnkgaW4gY2FzZSBhbnkgb2YgdGhlIGFubm90YXRpb25zIG5lZWQgdG8gZ2V0CiAgICAgIC8vIHJlcGxhY2VkIGR1cmluZyB0eXBlIGluZmVyZW5jZS4KICAgICAgdmFyIHBhcmVudHMgPSBhbm5vdGF0aW9ucy5tYXAoKGUpID0+IGUucGFyZW50KS50b0xpc3QoKTsKICAgICAgbmV3IExpc3RMaXRlcmFsKGFubm90YXRpb25zKTsKICAgICAgZm9yICh2YXIgYW5ub3RhdGlvbiBpbiBhbm5vdGF0aW9ucykgewogICAgICAgIGluZmVyRXhwcmVzc2lvbihhbm5vdGF0aW9uLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaXNUb3BMZXZlbCk7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7ICsraSkgewogICAgICAgIGFubm90YXRpb25zW2ldLnBhcmVudCA9IHBhcmVudHNbaV07CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBQZXJmb3JtcyB0aGUgY29yZSB0eXBlIGluZmVyZW5jZSBhbGdvcml0aG0gZm9yIG1ldGhvZCBpbnZvY2F0aW9ucyAodGhpcwogIC8vLyBoYW5kbGVzIGJvdGggbnVsbC1hd2FyZSBhbmQgbm9uLW51bGwtYXdhcmUgbWV0aG9kIGludm9jYXRpb25zKS4KICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGluZmVyTWV0aG9kSW52b2NhdGlvbigKICAgICAga2VybmVsLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAga2VybmVsLkV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIGludCBmaWxlT2Zmc2V0LAogICAgICBib29sIGlzSW1wbGljaXRDYWxsLAogICAgICBEYXJ0VHlwZSB0eXBlQ29udGV4dCwKICAgICAge1ZhcmlhYmxlRGVjbGFyYXRpb24gcmVjZWl2ZXJWYXJpYWJsZSwKICAgICAgTWV0aG9kSW52b2NhdGlvbiBkZXN1Z2FyZWRJbnZvY2F0aW9uLAogICAgICBPYmplY3QgaW50ZXJmYWNlTWVtYmVyLAogICAgICBOYW1lIG1ldGhvZE5hbWUsCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHN9KSB7CiAgICAvLyBGaXJzdCBpbmZlciB0aGUgcmVjZWl2ZXIgc28gd2UgY2FuIGxvb2sgdXAgdGhlIG1ldGhvZCB0aGF0IHdhcyBpbnZva2VkLgogICAgdmFyIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyID09IG51bGwKICAgICAgICA/IHRoaXNUeXBlCiAgICAgICAgOiBpbmZlckV4cHJlc3Npb24ocmVjZWl2ZXIsIGNvbnN0IFVua25vd25UeXBlKCksIHRydWUpOwogICAgcmVjZWl2ZXJWYXJpYWJsZT8udHlwZSA9IHJlY2VpdmVyVHlwZTsKICAgIGlmIChkZXN1Z2FyZWRJbnZvY2F0aW9uICE9IG51bGwpIHsKICAgICAgaW50ZXJmYWNlTWVtYmVyID0KICAgICAgICAgIGZpbmRNZXRob2RJbnZvY2F0aW9uTWVtYmVyKHJlY2VpdmVyVHlwZSwgZGVzdWdhcmVkSW52b2NhdGlvbik7CiAgICAgIG1ldGhvZE5hbWUgPSBkZXN1Z2FyZWRJbnZvY2F0aW9uLm5hbWU7CiAgICAgIGFyZ3VtZW50cyA9IGRlc3VnYXJlZEludm9jYXRpb24uYXJndW1lbnRzOwogICAgfQogICAgYm9vbCBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IgPSBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LmlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvckFuZFR5cGUoCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlciwgcmVjZWl2ZXJUeXBlKTsKICAgIHZhciBjYWxsZWVUeXBlID0gZ2V0Q2FsbGVlVHlwZShpbnRlcmZhY2VNZW1iZXIsIHJlY2VpdmVyVHlwZSk7CiAgICB2YXIgZnVuY3Rpb25UeXBlID0gZ2V0Q2FsbGVlRnVuY3Rpb25UeXBlKGNhbGxlZVR5cGUsICFpc0ltcGxpY2l0Q2FsbCk7CgogICAgaWYgKGludGVyZmFjZU1lbWJlciAhPSBudWxsICYmCiAgICAgICAgY2FsbGVlVHlwZSBpcyEgRHluYW1pY1R5cGUgJiYKICAgICAgICBjYWxsZWVUeXBlICE9IGNvcmVUeXBlcy5mdW5jdGlvbkNsYXNzLnJhd1R5cGUgJiYKICAgICAgICBpZGVudGljYWwoZnVuY3Rpb25UeXBlLCB1bmtub3duRnVuY3Rpb24pKSB7CiAgICAgIHZhciBwYXJlbnQgPSBleHByZXNzaW9uLnBhcmVudDsKICAgICAga2VybmVsLkV4cHJlc3Npb24gZXJyb3IgPSBoZWxwZXIud3JhcEluUHJvYmxlbShleHByZXNzaW9uLAogICAgICAgICAgdGVtcGxhdGVJbnZva2VOb25GdW5jdGlvbi53aXRoQXJndW1lbnRzKG1ldGhvZE5hbWUubmFtZSksIG5vTGVuZ3RoKTsKICAgICAgcGFyZW50Py5yZXBsYWNlQ2hpbGQoZXhwcmVzc2lvbiwgZXJyb3IpOwogICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobnVsbCwgY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICB9CiAgICB2YXIgY2hlY2tLaW5kID0gcHJlQ2hlY2tJbnZvY2F0aW9uQ29udHJhdmFyaWFuY2UocmVjZWl2ZXIsIHJlY2VpdmVyVHlwZSwKICAgICAgICBpbnRlcmZhY2VNZW1iZXIsIGRlc3VnYXJlZEludm9jYXRpb24sIGFyZ3VtZW50cywgZXhwcmVzc2lvbik7CiAgICB2YXIgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJJbnZvY2F0aW9uKHR5cGVDb250ZXh0LCBmaWxlT2Zmc2V0LCBmdW5jdGlvblR5cGUsCiAgICAgICAgZnVuY3Rpb25UeXBlLnJldHVyblR5cGUsIGFyZ3VtZW50cywKICAgICAgICBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3I6IGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvciwKICAgICAgICByZWNlaXZlclR5cGU6IHJlY2VpdmVyVHlwZSk7CiAgICB2YXIgaW5mZXJyZWRUeXBlID0gaW5mZXJlbmNlUmVzdWx0LnR5cGU7CiAgICBpZiAobWV0aG9kTmFtZS5uYW1lID09ICc9PScpIHsKICAgICAgaW5mZXJyZWRUeXBlID0gY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgfQogICAgaGFuZGxlSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKGNoZWNrS2luZCwgZGVzdWdhcmVkSW52b2NhdGlvbiwgYXJndW1lbnRzLAogICAgICAgIGV4cHJlc3Npb24sIGluZmVycmVkVHlwZSwgZnVuY3Rpb25UeXBlLCBmaWxlT2Zmc2V0KTsKICAgIGlmICghaWRlbnRpY2FsKGludGVyZmFjZU1lbWJlciwgJ2NhbGwnKSkgewogICAgICBpZiAoaXNJbXBsaWNpdENhbGwgJiYKICAgICAgICAgIGludGVyZmFjZU1lbWJlciAhPSBudWxsICYmCiAgICAgICAgICAhKGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgJiYKICAgICAgICAgIHJlY2VpdmVyVHlwZSBpcyEgRHluYW1pY1R5cGUgJiYKICAgICAgICAgIHJlY2VpdmVyVHlwZSAhPSB0eXBlU2NoZW1hRW52aXJvbm1lbnQucmF3RnVuY3Rpb25UeXBlKSB7CiAgICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICAgIHZhciBlcnJvck5vZGUgPSBoZWxwZXIud3JhcEluUHJvYmxlbSgKICAgICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgICAgdGVtcGxhdGVJbXBsaWNpdENhbGxPZk5vbk1ldGhvZC53aXRoQXJndW1lbnRzKHJlY2VpdmVyVHlwZSksCiAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChleHByZXNzaW9uLCBlcnJvck5vZGUpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgW2FyZ3VtZW50c10gd2VyZSBpbmZlcnJlZCwgY2hlY2sgdGhlbS4KICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBGaWd1cmUgb3V0IHdoeSBbbGlicmFyeV0gaXMgc29tZXRpbWVzIG51bGwuCiAgICBpZiAobGlicmFyeSAhPSBudWxsKSB7CiAgICAgIC8vIFthY3R1YWxSZWNlaXZlclR5cGVdLCBbaW50ZXJmYWNlVGFyZ2V0XSwgYW5kIFthY3R1YWxNZXRob2ROYW1lXSBiZWxvdwogICAgICAvLyBhcmUgZm9yIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGNhc2VzIGxpa2UgdGhlIGZvbGxvd2luZzoKICAgICAgLy8KICAgICAgLy8gICAgIGNsYXNzIEMxIHsgdmFyIGYgPSBuZXcgQzIoKTsgfQogICAgICAvLyAgICAgY2xhc3MgQzIgeyBpbnQgY2FsbDxYIGV4dGVuZHMgbnVtPihYIHgpID0+IDQyOyB9CiAgICAgIC8vICAgICBtYWluKCkgeyBDMSBjID0gbmV3IEMxKCk7IGMuZigiZm9vYmFyIik7IH0KICAgICAgRGFydFR5cGUgYWN0dWFsUmVjZWl2ZXJUeXBlOwogICAgICBNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0OwogICAgICBOYW1lIGFjdHVhbE1ldGhvZE5hbWU7CiAgICAgIGlmIChjYWxsZWVUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICBhY3R1YWxSZWNlaXZlclR5cGUgPSBjYWxsZWVUeXBlOwogICAgICAgIGludGVyZmFjZVRhcmdldCA9IG51bGw7CiAgICAgICAgYWN0dWFsTWV0aG9kTmFtZSA9IGNhbGxOYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIGFjdHVhbFJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyVHlwZTsKICAgICAgICBpbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXIgaXMgTWVtYmVyID8gaW50ZXJmYWNlTWVtYmVyIDogbnVsbDsKICAgICAgICBhY3R1YWxNZXRob2ROYW1lID0gbWV0aG9kTmFtZTsKICAgICAgfQogICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5NZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgYWN0dWFsUmVjZWl2ZXJUeXBlLAogICAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LAogICAgICAgICAgY2xhc3NIaWVyYXJjaHksCiAgICAgICAgICB0aGlzLAogICAgICAgICAgYWN0dWFsTWV0aG9kTmFtZSwKICAgICAgICAgIGludGVyZmFjZVRhcmdldCwKICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgIGhlbHBlci51cmksCiAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgaW5mZXJyZWQ6IGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpID09IG51bGwpOwogICAgfQoKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChudWxsLCBpbmZlcnJlZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbmZlclBhcmFtZXRlckluaXRpYWxpemVyKEluZmVyZW5jZUhlbHBlciBoZWxwZXIsCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGluaXRpYWxpemVyLCBEYXJ0VHlwZSBkZWNsYXJlZFR5cGUpIHsKICAgIGFzc2VydChjbG9zdXJlQ29udGV4dCA9PSBudWxsKTsKICAgIHRoaXMuaGVscGVyID0gaGVscGVyOwogICAgYXNzZXJ0KGRlY2xhcmVkVHlwZSAhPSBudWxsKTsKICAgIHZhciBhY3R1YWxUeXBlID0gaW5mZXJFeHByZXNzaW9uKGluaXRpYWxpemVyLCBkZWNsYXJlZFR5cGUsIHRydWUpOwogICAgZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICBkZWNsYXJlZFR5cGUsIGFjdHVhbFR5cGUsIGluaXRpYWxpemVyLCBpbml0aWFsaXplci5maWxlT2Zmc2V0KTsKICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICB9CgogIC8vLyBQZXJmb3JtcyB0aGUgY29yZSB0eXBlIGluZmVyZW5jZSBhbGdvcml0aG0gZm9yIHByb3BlcnR5IGdldHMgKHRoaXMgaGFuZGxlcwogIC8vLyBib3RoIG51bGwtYXdhcmUgYW5kIG5vbi1udWxsLWF3YXJlIHByb3BlcnR5IGdldHMpLgogIHZvaWQgaW5mZXJQcm9wZXJ0eUdldChFeHByZXNzaW9uIGV4cHJlc3Npb24sIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIGludCBmaWxlT2Zmc2V0LCBEYXJ0VHlwZSB0eXBlQ29udGV4dCwKICAgICAge1ZhcmlhYmxlRGVjbGFyYXRpb24gcmVjZWl2ZXJWYXJpYWJsZSwKICAgICAgUHJvcGVydHlHZXQgZGVzdWdhcmVkR2V0LAogICAgICBPYmplY3QgaW50ZXJmYWNlTWVtYmVyLAogICAgICBOYW1lIHByb3BlcnR5TmFtZX0pIHsKICAgIC8vIEZpcnN0IGluZmVyIHRoZSByZWNlaXZlciBzbyB3ZSBjYW4gbG9vayB1cCB0aGUgZ2V0dGVyIHRoYXQgd2FzIGludm9rZWQuCiAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGU7CiAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkgewogICAgICByZWNlaXZlclR5cGUgPSB0aGlzVHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVyRXhwcmVzc2lvbihyZWNlaXZlciwgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSk7CiAgICAgIHJlY2VpdmVyVHlwZSA9IGdldEluZmVycmVkVHlwZShyZWNlaXZlciwgdGhpcyk7CiAgICB9CiAgICByZWNlaXZlclZhcmlhYmxlPy50eXBlID0gcmVjZWl2ZXJUeXBlOwogICAgcHJvcGVydHlOYW1lID8/PSBkZXN1Z2FyZWRHZXQubmFtZTsKICAgIGlmIChkZXN1Z2FyZWRHZXQgIT0gbnVsbCkgewogICAgICBpbnRlcmZhY2VNZW1iZXIgPSBmaW5kSW50ZXJmYWNlTWVtYmVyKAogICAgICAgICAgcmVjZWl2ZXJUeXBlLCBwcm9wZXJ0eU5hbWUsIGZpbGVPZmZzZXQsCiAgICAgICAgICBlcnJvclRlbXBsYXRlOiB0ZW1wbGF0ZVVuZGVmaW5lZEdldHRlciwKICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sCiAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIpOwogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIE1lbWJlcikgewogICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24gIT0gbnVsbCAmJiByZWNlaXZlclR5cGUgPT0gY29uc3QgRHluYW1pY1R5cGUoKSkgewogICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnJlY29yZCh1cmksIGRlc3VnYXJlZEdldC5maWxlT2Zmc2V0LCAndGFyZ2V0JywKICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIoaW50ZXJmYWNlTWVtYmVyKSk7CiAgICAgICAgfQogICAgICAgIGRlc3VnYXJlZEdldC5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXI7CiAgICAgIH0KICAgIH0KICAgIHZhciBpbmZlcnJlZFR5cGUgPSBnZXRDYWxsZWVUeXBlKGludGVyZmFjZU1lbWJlciwgcmVjZWl2ZXJUeXBlKTsKICAgIHZhciByZXBsYWNlZEV4cHJlc3Npb24gPSBoYW5kbGVQcm9wZXJ0eUdldENvbnRyYXZhcmlhbmNlKHJlY2VpdmVyLAogICAgICAgIGludGVyZmFjZU1lbWJlciwgZGVzdWdhcmVkR2V0LCBleHByZXNzaW9uLCBpbmZlcnJlZFR5cGUsIGZpbGVPZmZzZXQpOwogICAgaWYgKChpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5NZXRob2QpKSB7CiAgICAgIGluZmVycmVkVHlwZSA9CiAgICAgICAgICBpbnN0YW50aWF0ZVRlYXJPZmYoaW5mZXJyZWRUeXBlLCB0eXBlQ29udGV4dCwgcmVwbGFjZWRFeHByZXNzaW9uKTsKICAgIH0KICAgIHN0b3JlSW5mZXJyZWRUeXBlKGV4cHJlc3Npb24sIGluZmVycmVkVHlwZSk7CiAgfQoKICAvLy8gTW9kaWZpZXMgYSB0eXBlIGFzIGFwcHJvcHJpYXRlIHdoZW4gaW5mZXJyaW5nIGEgY2xvc3VyZSByZXR1cm4gdHlwZS4KICBEYXJ0VHlwZSBpbmZlclJldHVyblR5cGUoRGFydFR5cGUgcmV0dXJuVHlwZSkgewogICAgcmV0dXJuIHJldHVyblR5cGUgPz8gdHlwZVNjaGVtYUVudmlyb25tZW50Lm51bGxUeXBlOwogIH0KCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBbc3RhdGVtZW50XS4KICAvLy8KICAvLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aXRoIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlcyBvbgogIC8vLyB0aGUgc3RhdGVtZW50IHR5cGUgYW5kIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBzcGVjaWFsaXplZCAiaW5mZXIiIG1ldGhvZC4KICB2b2lkIGluZmVyU3RhdGVtZW50KFN0YXRlbWVudCBzdGF0ZW1lbnQpOwoKICAvLy8gUGVyZm9ybXMgdGhlIHR5cGUgaW5mZXJlbmNlIHN0ZXBzIG5lY2Vzc2FyeSB0byBpbnN0YW50aWF0ZSBhIHRlYXItb2ZmCiAgLy8vIChpZiBuZWNlc3NhcnkpLgogIERhcnRUeXBlIGluc3RhbnRpYXRlVGVhck9mZigKICAgICAgRGFydFR5cGUgdGVhcm9mZlR5cGUsIERhcnRUeXBlIGNvbnRleHQsIEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgaWYgKHRlYXJvZmZUeXBlIGlzIEZ1bmN0aW9uVHlwZSAmJgogICAgICAgIGNvbnRleHQgaXMgRnVuY3Rpb25UeXBlICYmCiAgICAgICAgY29udGV4dC50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIHZhciB0eXBlUGFyYW1ldGVycyA9IHRlYXJvZmZUeXBlLnR5cGVQYXJhbWV0ZXJzOwogICAgICBpZiAodHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgIHZhciBpbmZlcnJlZFR5cGVzID0gbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBVbmtub3duVHlwZSgpKTsKICAgICAgICB2YXIgaW5zdGFudGlhdGVkVHlwZSA9IHRlYXJvZmZUeXBlLndpdGhvdXRUeXBlUGFyYW1ldGVyczsKICAgICAgICB0eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUoCiAgICAgICAgICAgIGluc3RhbnRpYXRlZFR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBbXSwgW10sIGNvbnRleHQsIGluZmVycmVkVHlwZXMpOwogICAgICAgIGlmICghaXNUb3BMZXZlbCkgewogICAgICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICBleHByZXNzaW9uLAogICAgICAgICAgICAgIG5ldyBJbnN0YW50aWF0aW9uKGV4cHJlc3Npb24sIGluZmVycmVkVHlwZXMpCiAgICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBleHByZXNzaW9uLmZpbGVPZmZzZXQpOwogICAgICAgIH0KICAgICAgICB2YXIgc3Vic3RpdHV0aW9uID0KICAgICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycyh0eXBlUGFyYW1ldGVycywgaW5mZXJyZWRUeXBlcyk7CiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShpbnN0YW50aWF0ZWRUeXBlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRlYXJvZmZUeXBlOwogIH0KCiAgLy8vIFRydWUgaWYgdGhlIHJldHVybmVkIFt0eXBlXSBoYXMgbm9uLWNvdmFyaWFudCBvY2N1cnJlbmNlcyBvZiBhbnkgb2YKICAvLy8gW2NsYXNzX10ncyB0eXBlIHBhcmFtZXRlcnMuCiAgLy8vCiAgLy8vIEEgbm9uLWNvdmFyaWFudCBvY2N1cnJlbmNlIG9mIGEgdHlwZSBwYXJhbWV0ZXIgaXMgZWl0aGVyIGEgY29udHJhdmFyaWFudAogIC8vLyBvciBhbiBpbnZhcmlhbnQgcG9zaXRpb24uCiAgLy8vCiAgLy8vIEEgY29udHJhdmFyaWFudCBwb3NpdGlvbiBpcyB0byB0aGUgbGVmdCBvZiBhbiBvZGQgbnVtYmVyIG9mIGFycm93cy4gRm9yCiAgLy8vIGV4YW1wbGUsIFQgb2NjdXJzIGNvbnRyYXZhcmlhbnRseSBpbiBUIC0+IFQwLCBUMCAtPiAoVCAtPiBUMSksCiAgLy8vIChUMCAtPiBUKSAtPiBUMSBidXQgbm90IGluIChUIC0+IFQwKSAtPiBUMS4KICAvLy8KICAvLy8gQW4gaW52YXJpYW50IHBvc2l0aW9uIGlzIHdpdGhvdXQgYSBib3VuZCBvZiBhIHR5cGUgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZSwKICAvLy8gVCBvY2N1cnMgaW52YXJpYW50bHkgaW4gYFMgRnVuY3Rpb248UyBleHRlbmRzIFQ+KClgIGFuZAogIC8vLyBgdm9pZCBGdW5jdGlvbjxTIGV4dGVuZHMgQzxUPj4oUylgLgogIHN0YXRpYyBib29sIHJldHVybmVkVHlwZVBhcmFtZXRlcnNPY2N1ck5vbkNvdmFyaWFudGx5KAogICAgICBDbGFzcyBjbGFzc18sIERhcnRUeXBlIHR5cGUpIHsKICAgIGlmIChjbGFzc18udHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5IGNoZWNrZXIgPQogICAgICAgIG5ldyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkoY2xhc3NfLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICAvLyBXZSBhcmUgY2hlY2tpbmcgdGhlIHJldHVybmVkIHR5cGUgKGZpZWxkL2dldHRlciB0eXBlIG9yIHJldHVybgogICAgICAgICAgICAvLyB0eXBlIG9mIGEgbWV0aG9kKSBhbmQgdGhpcyBpcyBhIGNvdmFyaWFudCBwb3NpdGlvbi4KICAgICAgICAgICAgaW5pdGlhbFZhcmlhbmNlOiBWYXJpYW5jZS5jb3ZhcmlhbnQpOwogICAgcmV0dXJuIHR5cGUuYWNjZXB0KGNoZWNrZXIpOwogIH0KCiAgLy8vIERldGVybWluZXMgdGhlIGRpc3BhdGNoIGNhdGVnb3J5IG9mIGEgW01ldGhvZEludm9jYXRpb25dIGFuZCByZXR1cm5zIGEKICAvLy8gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYW4gImFzIiBjaGVjayB3aWxsIG5lZWQgdG8gYmUgYWRkZWQgZHVlIHRvCiAgLy8vIGNvbnRyYXZhcmlhbmNlLgogIE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kIHByZUNoZWNrSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLAogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIE9iamVjdCBpbnRlcmZhY2VNZW1iZXIsCiAgICAgIE1ldGhvZEludm9jYXRpb24gZGVzdWdhcmVkSW52b2NhdGlvbiwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkIHx8CiAgICAgICAgaW50ZXJmYWNlTWVtYmVyIGlzIFByb2NlZHVyZSAmJgogICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLkdldHRlcikgewogICAgICB2YXIgZ2V0VHlwZSA9IGdldENhbGxlZVR5cGUoaW50ZXJmYWNlTWVtYmVyLCByZWNlaXZlclR5cGUpOwogICAgICBpZiAoZ2V0VHlwZSBpcyBEeW5hbWljVHlwZSkgewogICAgICAgIHJldHVybiBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5ub25lOwogICAgICB9CiAgICAgIGlmIChyZWNlaXZlciAhPSBudWxsICYmIHJlY2VpdmVyIGlzISBUaGlzRXhwcmVzc2lvbikgewogICAgICAgIGlmICgoaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkICYmCiAgICAgICAgICAgICAgICByZXR1cm5lZFR5cGVQYXJhbWV0ZXJzT2NjdXJOb25Db3ZhcmlhbnRseSgKICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MsIGludGVyZmFjZU1lbWJlci50eXBlKSkgfHwKICAgICAgICAgICAgKGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgIHJldHVybmVkVHlwZVBhcmFtZXRlcnNPY2N1ck5vbkNvdmFyaWFudGx5KAogICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcywKICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb24ucmV0dXJuVHlwZSkpKSB7CiAgICAgICAgICByZXR1cm4gTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQuY2hlY2tHZXR0ZXJSZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHJlY2VpdmVyICE9IG51bGwgJiYKICAgICAgICByZWNlaXZlciBpcyEgVGhpc0V4cHJlc3Npb24gJiYKICAgICAgICBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgcmV0dXJuZWRUeXBlUGFyYW1ldGVyc09jY3VyTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcywKICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZ1bmN0aW9uLnJldHVyblR5cGUpKSB7CiAgICAgIHJldHVybiBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5jaGVja01ldGhvZFJldHVybjsKICAgIH0KICAgIHJldHVybiBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5ub25lOwogIH0KCiAgLy8vIElmIHRoZSBnaXZlbiBbdHlwZV0gaXMgYSBbVHlwZVBhcmFtZXRlclR5cGVdLCByZXNvbHZlIGl0IHRvIGl0cyBib3VuZC4KICBEYXJ0VHlwZSByZXNvbHZlVHlwZVBhcmFtZXRlcihEYXJ0VHlwZSB0eXBlKSB7CiAgICBEYXJ0VHlwZSByZXNvbHZlT25lU3RlcChEYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGlmICh0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgcmV0dXJuIHR5cGUuYm91bmQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgcmVzb2x2ZWQgPSByZXNvbHZlT25lU3RlcCh0eXBlKTsKICAgIGlmIChyZXNvbHZlZCA9PSBudWxsKSByZXR1cm4gdHlwZTsKCiAgICAvLyBEZXRlY3QgY2lyY3VsYXJpdGllcyB1c2luZyB0aGUgdG9ydG9pc2UtYW5kLWhhcmUgYWxnb3JpdGhtLgogICAgdHlwZSA9IHJlc29sdmVkOwogICAgRGFydFR5cGUgaGFyZSA9IHJlc29sdmVPbmVTdGVwKHR5cGUpOwogICAgaWYgKGhhcmUgPT0gbnVsbCkgcmV0dXJuIHR5cGU7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoaWRlbnRpY2FsKHR5cGUsIGhhcmUpKSB7CiAgICAgICAgLy8gV2UgZm91bmQgYSBjaXJjdWxhcml0eS4gIEdpdmUgdXAgYW5kIHJldHVybiBgZHluYW1pY2AuCiAgICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0KCiAgICAgIC8vIEhhcmUgdGFrZXMgdHdvIHN0ZXBzCiAgICAgIHZhciBzdGVwMSA9IHJlc29sdmVPbmVTdGVwKGhhcmUpOwogICAgICBpZiAoc3RlcDEgPT0gbnVsbCkgcmV0dXJuIGhhcmU7CiAgICAgIHZhciBzdGVwMiA9IHJlc29sdmVPbmVTdGVwKHN0ZXAxKTsKICAgICAgaWYgKHN0ZXAyID09IG51bGwpIHJldHVybiBoYXJlOwogICAgICBoYXJlID0gc3RlcDI7CgogICAgICAvLyBUb3J0b2lzZSB0YWtlcyBvbmUgc3RlcAogICAgICB0eXBlID0gcmVzb2x2ZU9uZVN0ZXAodHlwZSk7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSB3cmFwRnV0dXJlT3JUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICBpZGVudGljYWwodHlwZS5jbGFzc05vZGUsIGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzKSkgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogSWYgW3R5cGVdIGlzIGEgc3VidHlwZSBvZiBgRnV0dXJlYCwgc2hvdWxkIHdlIGp1c3QKICAgIC8vIHJldHVybiBpdCB1bm1vZGlmaWVkPwogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgIGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzLCA8RGFydFR5cGU+W3R5cGUgPz8gY29uc3QgRHluYW1pY1R5cGUoKV0pOwogIH0KCiAgRGFydFR5cGUgd3JhcEZ1dHVyZVR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgdmFyIHR5cGVXaXRob3V0RnV0dXJlT3IgPSB0eXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgY29yZVR5cGVzLmZ1dHVyZUNsYXNzLCA8RGFydFR5cGU+W3R5cGVXaXRob3V0RnV0dXJlT3JdKTsKICB9CgogIERhcnRUeXBlIHdyYXBUeXBlKERhcnRUeXBlIHR5cGUsIENsYXNzIGNsYXNzXykgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNsYXNzXywgPERhcnRUeXBlPlt0eXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCldKTsKICB9CgogIHZvaWQgX2ZvckVhY2hBcmd1bWVudCgKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgdm9pZCBjYWxsYmFjayhTdHJpbmcgbmFtZSwgRXhwcmVzc2lvbiBleHByZXNzaW9uKSkgewogICAgZm9yICh2YXIgZXhwcmVzc2lvbiBpbiBhcmd1bWVudHMucG9zaXRpb25hbCkgewogICAgICBjYWxsYmFjayhudWxsLCBleHByZXNzaW9uKTsKICAgIH0KICAgIGZvciAodmFyIG5hbWVkRXhwcmVzc2lvbiBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgY2FsbGJhY2sobmFtZWRFeHByZXNzaW9uLm5hbWUsIG5hbWVkRXhwcmVzc2lvbi52YWx1ZSk7CiAgICB9CiAgfQoKICBNZW1iZXIgX2dldEludGVyZmFjZU1lbWJlcigKICAgICAgQ2xhc3MgY2xhc3NfLCBOYW1lIG5hbWUsIGJvb2wgc2V0dGVyLCBpbnQgY2hhck9mZnNldCkgewogICAgTWVtYmVyIG1lbWJlciA9IGVuZ2luZS5oaWVyYXJjaHlCdWlsZGVyLmdldENvbWJpbmVkTWVtYmVyU2lnbmF0dXJlS2VybmVsKAogICAgICAgIGNsYXNzXywgbmFtZSwgc2V0dGVyLCBjaGFyT2Zmc2V0LCBsaWJyYXJ5KTsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCAmJiAobGlicmFyeT8uaXNQYXRjaCA/PyBmYWxzZSkpIHsKICAgICAgLy8gVE9ETyhkbWl0cnlhcyk6IEhhY2sgZm9yIHBhcnRzLgogICAgICBtZW1iZXIgPz89CiAgICAgICAgICBjbGFzc0hpZXJhcmNoeS5nZXRJbnRlcmZhY2VNZW1iZXIoY2xhc3NfLCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICB9CiAgICByZXR1cm4gVHlwZUluZmVyZW5jZUVuZ2luZS5yZXNvbHZlSW5mZXJlbmNlTm9kZShtZW1iZXIpOwogIH0KCiAgLy8vIERldGVybWluZXMgaWYgdGhlIGdpdmVuIFtleHByZXNzaW9uXSdzIHR5cGUgaXMgcHJlY2lzZWx5IGtub3duIGF0IGNvbXBpbGUKICAvLy8gdGltZS4KICAvLy8KICAvLy8gSWYgaXQgaXMsIGFuIGVycm9yIG1lc3NhZ2UgdGVtcGxhdGUgaXMgcmV0dXJuZWQsIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRoZQogIC8vLyBjYWxsZXIgdG8gcmVwb3J0IGFuIGludmFsaWQgY2FzdC4gIE90aGVyd2lzZSwgYG51bGxgIGlzIHJldHVybmVkLgogIFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUsIERhcnRUeXBlKT4gX2dldFByZWNpc2VUeXBlRXJyb3JUZW1wbGF0ZSgKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBMaXN0TGl0ZXJhbCkgewogICAgICByZXR1cm4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0OwogICAgfQogICAgaWYgKGV4cHJlc3Npb24gaXMgTWFwTGl0ZXJhbCkgewogICAgICByZXR1cm4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxNYXA7CiAgICB9CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBTZXRMaXRlcmFsKSB7CiAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbFNldDsKICAgIH0KICAgIGlmIChleHByZXNzaW9uIGlzIEZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICByZXR1cm4gdGVtcGxhdGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwcjsKICAgIH0KICAgIGlmIChleHByZXNzaW9uIGlzIENvbnN0cnVjdG9ySW52b2NhdGlvbikgewogICAgICByZXR1cm4gdGVtcGxhdGVJbnZhbGlkQ2FzdE5ld0V4cHI7CiAgICB9CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBTdGF0aWNHZXQpIHsKICAgICAgdmFyIHRhcmdldCA9IGV4cHJlc3Npb24udGFyZ2V0OwogICAgICBpZiAodGFyZ2V0IGlzIFByb2NlZHVyZSAmJiB0YXJnZXQua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICAgIGlmICh0YXJnZXQuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIHRlbXBsYXRlSW52YWxpZENhc3RTdGF0aWNNZXRob2Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBWYXJpYWJsZUdldCkgewogICAgICB2YXIgdmFyaWFibGUgPSBleHByZXNzaW9uLnZhcmlhYmxlOwogICAgICBpZiAodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50ICYmCiAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuaXNMb2NhbEZ1bmN0aW9uKHZhcmlhYmxlKSkgewogICAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvbjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBib29sIF9zaG91bGRUZWFyT2ZmQ2FsbChEYXJ0VHlwZSBleHBlY3RlZFR5cGUsIERhcnRUeXBlIGFjdHVhbFR5cGUpIHsKICAgIGlmIChleHBlY3RlZFR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGV4cGVjdGVkVHlwZS5jbGFzc05vZGUgPT0gdHlwZVNjaGVtYUVudmlyb25tZW50LmZ1dHVyZU9yQ2xhc3MpIHsKICAgICAgZXhwZWN0ZWRUeXBlID0gKGV4cGVjdGVkVHlwZSBhcyBJbnRlcmZhY2VUeXBlKS50eXBlQXJndW1lbnRzWzBdOwogICAgfQogICAgaWYgKGV4cGVjdGVkVHlwZSBpcyBGdW5jdGlvblR5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKGV4cGVjdGVkVHlwZSA9PSB0eXBlU2NoZW1hRW52aXJvbm1lbnQucmF3RnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICghdHlwZVNjaGVtYUVudmlyb25tZW50LmlzU3VidHlwZU9mKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgTWl4aW5JbmZlcnJlciB7CiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKICBmaW5hbCBUeXBlQ29uc3RyYWludEdhdGhlcmVyIGdhdGhlcmVyOwoKICBNaXhpbkluZmVycmVyKHRoaXMuY29yZVR5cGVzLCB0aGlzLmdhdGhlcmVyKTsKCiAgU3VwZXJ0eXBlIGFzSW5zdGFudGlhdGlvbk9mKFN1cGVydHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKTsKCiAgdm9pZCByZXBvcnRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgQ2xhc3MgY2xzKTsKCiAgdm9pZCBnZW5lcmF0ZUNvbnN0cmFpbnRzKAogICAgICBDbGFzcyBtaXhpbkNsYXNzLCBTdXBlcnR5cGUgYmFzZVR5cGUsIFN1cGVydHlwZSBtaXhpblN1cGVydHlwZSkgewogICAgaWYgKG1peGluU3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICAvLyBUaGUgc3VwZXJ0eXBlIGNvbnN0cmFpbnQgaXNuJ3QgZ2VuZXJpYzsgaXQgZG9lc24ndCBjb25zdHJhaW4gYW55dGhpbmcuCiAgICB9IGVsc2UgaWYgKG1peGluU3VwZXJ0eXBlLmNsYXNzTm9kZS5pc0Fub255bW91c01peGluKSB7CiAgICAgIC8vIFdlIGhhdmUgZWl0aGVyIGEgbWl4aW4gZGVjbGFyYXRpb24gYG1peGluIE08WDAsIC4uLiwgWG4+IG9uIFMwLCBTMWAgb3IKICAgICAgLy8gYSBWTS1zdHlsZSBzdXBlciBtaXhpbiBgYWJzdHJhY3QgY2xhc3MgTTxYMCwgLi4uLCBYbj4gZXh0ZW5kcyBTMCB3aXRoCiAgICAgIC8vIFMxYCB3aGVyZSBTMCBhbmQgUzEgYXJlIHN1cGVyY2xhc3MgY29uc3RyYWludHMgdGhhdCBwb3NzaWJseSBoYXZlIHR5cGUKICAgICAgLy8gYXJndW1lbnRzLgogICAgICAvLwogICAgICAvLyBJdCBoYXMgYmVlbiBjb21waWxlZCBieSBuYW1pbmcgdGhlIHN1cGVyY2xhc3MgdG8gZWl0aGVyOgogICAgICAvLwogICAgICAvLyBhYnN0cmFjdCBjbGFzcyBTMCZTMTwuLi4+IGV4dGVuZHMgT2JqZWN0IGltcGxlbWVudHMgUzAsIFMxIHt9CiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIE08WDAsIC4uLiwgWG4+IGV4dGVuZHMgUzAmUzE8Li4uPiAuLi4KICAgICAgLy8KICAgICAgLy8gZm9yIGEgbWl4aW4gZGVjbGFyYXRpb24sIG9yIGVsc2U6CiAgICAgIC8vCiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIFMwJlMxPC4uLj4gPSBTMCB3aXRoIFMxOwogICAgICAvLyBhYnN0cmFjdCBjbGFzcyBNPFgwLCAuLi4sIFhuPiBleHRlbmRzIFMwJlMxPC4uLj4KICAgICAgLy8KICAgICAgLy8gZm9yIGEgVk0tc3R5bGUgc3VwZXIgbWl4aW4uICBUaGUgdHlwZSBwYXJhbWV0ZXJzIG9mIFMwJlMxIGFyZSB0aGUgWDAsCiAgICAgIC8vIC4uLiwgWG4gdGhhdCBvY2N1cnJlZCBmcmVlIGluIFMwIGFuZCBTMS4gIFRyZWF0IFMwIGFuZCBTMSBhcyBzZXBhcmF0ZQogICAgICAvLyBzdXBlcnR5cGUgY29uc3RyYWludHMgYnkgcmVjdXJzaXZlbHkgY2FsbGluZyB0aGlzIGFsZ29yaXRobS4KICAgICAgLy8KICAgICAgLy8gSW4gdGhlIERhcnQgVk0gdGhlIG1peGluIGFwcGxpY2F0aW9uIGNsYXNzZXMgdGhlbXNlbHZlcyBhcmUgYWxsCiAgICAgIC8vIGVsaW1pbmF0ZWQgYnkgdHJhbnNsYXRpbmcgdGhlbSB0byBub3JtYWwgY2xhc3Nlcy4gIEluIHRoYXQgY2FzZSwgdGhlCiAgICAgIC8vIG1peGluIGFwcGVhcnMgYXMgdGhlIG9ubHkgaW50ZXJmYWNlIGluIHRoZSBpbnRyb2R1Y2VkIGNsYXNzLiAgV2UKICAgICAgLy8gc3VwcG9ydCB0aHJlZSBmb3JtcyBmb3IgdGhlIHN1cGVyY2xhc3MgY29uc3RyYWludHM6CiAgICAgIC8vCiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIFMwJlMxPC4uLj4gZXh0ZW5kcyBPYmplY3QgaW1wbGVtZW50cyBTMCwgUzEge30KICAgICAgLy8gYWJzdHJhY3QgY2xhc3MgUzAmUzE8Li4uPiA9IFMwIHdpdGggUzE7CiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIFMwJlMxPC4uLj4gZXh0ZW5kcyBTMCBpbXBsZW1lbnRzIFMxIHt9CiAgICAgIHZhciBtaXhpblN1cGVyY2xhc3MgPSBtaXhpblN1cGVydHlwZS5jbGFzc05vZGU7CiAgICAgIGlmIChtaXhpblN1cGVyY2xhc3MubWl4ZWRJblR5cGUgPT0gbnVsbCAmJgogICAgICAgICAgbWl4aW5TdXBlcmNsYXNzLmltcGxlbWVudGVkVHlwZXMubGVuZ3RoICE9IDEgJiYKICAgICAgICAgIChtaXhpblN1cGVyY2xhc3Muc3VwZXJjbGFzcyAhPSBjb3JlVHlwZXMub2JqZWN0Q2xhc3MgfHwKICAgICAgICAgICAgICBtaXhpblN1cGVyY2xhc3MuaW1wbGVtZW50ZWRUeXBlcy5sZW5ndGggIT0gMikpIHsKICAgICAgICB1bmV4cGVjdGVkKAogICAgICAgICAgICAnQ29tcGlsZXItZ2VuZXJhdGVkIG1peGluIGFwcGxpY2F0aW9ucyBoYXZlIGEgbWl4aW4gb3IgZWxzZSAnCiAgICAgICAgICAgICAgICAnaW1wbGVtZW50IGV4YWN0bHkgb25lIHR5cGUnLAogICAgICAgICAgICAnJG1peGluU3VwZXJjbGFzcyBpbXBsZW1lbnRzICcKICAgICAgICAgICAgICAgICcke21peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzLmxlbmd0aH0gdHlwZXMnLAogICAgICAgICAgICBtaXhpblN1cGVyY2xhc3MuZmlsZU9mZnNldCwKICAgICAgICAgICAgbWl4aW5TdXBlcmNsYXNzLmZpbGVVcmkpOwogICAgICB9CiAgICAgIHZhciBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZShtaXhpblN1cGVydHlwZSk7CiAgICAgIFN1cGVydHlwZSBzMCwgczE7CiAgICAgIGlmIChtaXhpblN1cGVyY2xhc3MuaW1wbGVtZW50ZWRUeXBlcy5sZW5ndGggPT0gMikgewogICAgICAgIHMwID0gbWl4aW5TdXBlcmNsYXNzLmltcGxlbWVudGVkVHlwZXNbMF07CiAgICAgICAgczEgPSBtaXhpblN1cGVyY2xhc3MuaW1wbGVtZW50ZWRUeXBlc1sxXTsKICAgICAgfSBlbHNlIGlmIChtaXhpblN1cGVyY2xhc3MuaW1wbGVtZW50ZWRUeXBlcy5sZW5ndGggPT0gMSkgewogICAgICAgIHMwID0gbWl4aW5TdXBlcmNsYXNzLnN1cGVydHlwZTsKICAgICAgICBzMSA9IG1peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzLmZpcnN0OwogICAgICB9IGVsc2UgewogICAgICAgIHMwID0gbWl4aW5TdXBlcmNsYXNzLnN1cGVydHlwZTsKICAgICAgICBzMSA9IG1peGluU3VwZXJjbGFzcy5taXhlZEluVHlwZTsKICAgICAgfQogICAgICBzMCA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlU3VwZXJ0eXBlKHMwKTsKICAgICAgczEgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVN1cGVydHlwZShzMSk7CiAgICAgIGdlbmVyYXRlQ29uc3RyYWludHMobWl4aW5DbGFzcywgYmFzZVR5cGUsIHMwKTsKICAgICAgZ2VuZXJhdGVDb25zdHJhaW50cyhtaXhpbkNsYXNzLCBiYXNlVHlwZSwgczEpOwogICAgfSBlbHNlIHsKICAgICAgLy8gRmluZCB0aGUgdHlwZSBVMCB3aGljaCBpcyBiYXNlVHlwZSBhcyBhbiBpbnN0YW5jZSBvZiBtaXhpblN1cGVydHlwZSdzCiAgICAgIC8vIGNsYXNzLgogICAgICBTdXBlcnR5cGUgc3VwZXJ0eXBlID0KICAgICAgICAgIGFzSW5zdGFudGlhdGlvbk9mKGJhc2VUeXBlLCBtaXhpblN1cGVydHlwZS5jbGFzc05vZGUpOwogICAgICBpZiAoc3VwZXJ0eXBlID09IG51bGwpIHsKICAgICAgICByZXBvcnRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZU1peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzLndpdGhBcmd1bWVudHMobWl4aW5DbGFzcy5uYW1lLAogICAgICAgICAgICAgICAgYmFzZVR5cGUuY2xhc3NOb2RlLm5hbWUsIG1peGluU3VwZXJ0eXBlLmFzSW50ZXJmYWNlVHlwZSksCiAgICAgICAgICAgIG1peGluQ2xhc3MpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBJbnRlcmZhY2VUeXBlIHUwID0gU3Vic3RpdHV0aW9uLmZyb21TdXBlcnR5cGUoYmFzZVR5cGUpCiAgICAgICAgICAuc3Vic3RpdHV0ZVN1cGVydHlwZShzdXBlcnR5cGUpCiAgICAgICAgICAuYXNJbnRlcmZhY2VUeXBlOwogICAgICAvLyBXZSB3YW50IHRvIHNvbHZlIFUwID0gUzAgd2hlcmUgUzAgaXMgbWl4aW5TdXBlcnR5cGUsIGJ1dCB3ZSBvbmx5IGhhdmUKICAgICAgLy8gYSBzdWJ0eXBlIGNvbnN0cmFpbnRzLiAgU29sdmUgZm9yIGVxdWFsaXR5IGJ5IHNvbHZpbmcKICAgICAgLy8gYm90aCBVMCA8OiBTMCBhbmQgUzAgPDogVTAuCiAgICAgIEludGVyZmFjZVR5cGUgczAgPSBtaXhpblN1cGVydHlwZS5hc0ludGVyZmFjZVR5cGU7CiAgICAgIGdhdGhlcmVyLnRyeVN1YnR5cGVNYXRjaCh1MCwgczApOwogICAgICBnYXRoZXJlci50cnlTdWJ0eXBlTWF0Y2goczAsIHUwKTsKICAgIH0KICB9CgogIHZvaWQgaW5mZXIoQ2xhc3MgY2xhc3NOb2RlKSB7CiAgICBTdXBlcnR5cGUgbWl4ZWRJblR5cGUgPSBjbGFzc05vZGUubWl4ZWRJblR5cGU7CiAgICBhc3NlcnQobWl4ZWRJblR5cGUudHlwZUFyZ3VtZW50cy5ldmVyeSgodCkgPT4gdCA9PSBjb25zdCBVbmtub3duVHlwZSgpKSk7CiAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSBubyBhbm9ueW1vdXMgbWl4aW4gYXBwbGljYXRpb25zLCB0aGV5IGhhdmUgYWxsCiAgICAvLyBiZWVuIG5hbWVkLiAgTm90ZSBhbHNvIHRoYXQgbWl4aW4gY29tcG9zaXRpb24gaGFzIGJlZW4gdHJhbnNsYXRlZAogICAgLy8gc28gdGhhdCB3ZSBvbmx5IGhhdmUgbWl4aW4gYXBwbGljYXRpb25zIG9mIHRoZSBmb3JtIGBTIHdpdGggTWAuCiAgICBTdXBlcnR5cGUgYmFzZVR5cGUgPSBjbGFzc05vZGUuc3VwZXJ0eXBlOwogICAgQ2xhc3MgbWl4aW5DbGFzcyA9IG1peGVkSW5UeXBlLmNsYXNzTm9kZTsKICAgIFN1cGVydHlwZSBtaXhpblN1cGVydHlwZSA9IG1peGluQ2xhc3Muc3VwZXJ0eXBlOwogICAgLy8gR2VuZXJhdGUgY29uc3RyYWludHMgYmFzZWQgb24gdGhlIG1peGluJ3Mgc3VwZXJ0eXBlLgogICAgZ2VuZXJhdGVDb25zdHJhaW50cyhtaXhpbkNsYXNzLCBiYXNlVHlwZSwgbWl4aW5TdXBlcnR5cGUpOwogICAgLy8gU29sdmUgdGhlbSB0byBnZXQgYSBtYXAgZnJvbSB0eXBlIHBhcmFtZXRlcnMgdG8gdXBwZXIgYW5kIGxvd2VyCiAgICAvLyBib3VuZHMuCiAgICB2YXIgcmVzdWx0ID0gZ2F0aGVyZXIuY29tcHV0ZUNvbnN0cmFpbnRzKCk7CiAgICAvLyBHZW5lcmF0ZSBuZXcgdHlwZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHNvbHV0aW9uIGFzIGJvdW5kcy4KICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG1peGluQ2xhc3MudHlwZVBhcmFtZXRlcnMubWFwKChwKSB7CiAgICAgIHZhciBjb25zdHJhaW50ID0gcmVzdWx0W3BdOwogICAgICAvLyBCZWNhdXNlIHdlIHNvbHZlZCBmb3IgZXF1YWxpdHksIGEgdmFsaWQgc29sdXRpb24gaGFzIGEgcGFyYW1ldGVyCiAgICAgIC8vIGVpdGhlciB1bmNvbnN0cmFpbmVkIG9yIGVsc2Ugd2l0aCBpZGVudGljYWwgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcy4KICAgICAgaWYgKGNvbnN0cmFpbnQgIT0gbnVsbCAmJiBjb25zdHJhaW50LnVwcGVyICE9IGNvbnN0cmFpbnQubG93ZXIpIHsKICAgICAgICByZXBvcnRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZU1peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzLndpdGhBcmd1bWVudHMobWl4aW5DbGFzcy5uYW1lLAogICAgICAgICAgICAgICAgYmFzZVR5cGUuY2xhc3NOb2RlLm5hbWUsIG1peGluU3VwZXJ0eXBlLmFzSW50ZXJmYWNlVHlwZSksCiAgICAgICAgICAgIG1peGluQ2xhc3MpOwogICAgICAgIHJldHVybiBwOwogICAgICB9CiAgICAgIGFzc2VydChjb25zdHJhaW50ID09IG51bGwgfHwgY29uc3RyYWludC51cHBlciA9PSBjb25zdHJhaW50Lmxvd2VyKTsKICAgICAgYm9vbCBleGFjdCA9CiAgICAgICAgICBjb25zdHJhaW50ICE9IG51bGwgJiYgY29uc3RyYWludC51cHBlciAhPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgICByZXR1cm4gbmV3IFR5cGVQYXJhbWV0ZXIoCiAgICAgICAgICBwLm5hbWUsIGV4YWN0ID8gY29uc3RyYWludC51cHBlciA6IHAuYm91bmQsIHAuZGVmYXVsdFR5cGUpOwogICAgfSkudG9MaXN0KCk7CiAgICAvLyBCb3VuZHMgbWlnaHQgbWVudGlvbiB0aGUgbWl4aW4gY2xhc3MncyB0eXBlIHBhcmFtZXRlcnMgc28gd2UgaGF2ZSB0bwogICAgLy8gc3Vic3RpdHV0ZSB0aGVtIGJlZm9yZSBjYWxsaW5nIGluc3RhbnRpYXRlIHRvIGJvdW5kcy4KICAgIHZhciBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKG1peGluQ2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcGFyYW1ldGVycy5tYXAoKHApID0+IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShwKSkudG9MaXN0KCkpOwogICAgZm9yICh2YXIgcCBpbiBwYXJhbWV0ZXJzKSB7CiAgICAgIHAuYm91bmQgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUocC5ib3VuZCk7CiAgICB9CiAgICAvLyBVc2UgaW5zdGFudGlhdGUgdG8gYm91bmRzLgogICAgTGlzdDxEYXJ0VHlwZT4gYm91bmRzID0gY2FsY3VsYXRlQm91bmRzKHBhcmFtZXRlcnMsIGNvcmVUeXBlcy5vYmplY3RDbGFzcyk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1peGVkSW5UeXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgbWl4ZWRJblR5cGUudHlwZUFyZ3VtZW50c1tpXSA9IGJvdW5kc1tpXTsKICAgIH0KICB9Cn0KCi8vLyBUaGUgcmVzdWx0IG9mIGFuIGV4cHJlc3Npb24gaW5mZXJlbmNlLgpjbGFzcyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHsKICBmaW5hbCBFeHByZXNzaW9uIGV4cHJlc3Npb247CiAgZmluYWwgRGFydFR5cGUgdHlwZTsKCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCh0aGlzLmV4cHJlc3Npb24sIHRoaXMudHlwZSk7Cn0KiAwATU4/ASwBIQkTFhUUDx8fEhUUDxwWFhcXFR4NFRQQGg4VExcVFRkUExMfGhoTGBIXGx0VEgFCATgBKi8BRQEpCRknJSkBHQkYERInKB8SKykpNT0jKSgnJyokKS0jLyEhIQE/ASoJ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FQgGEgQCAR8dKQEwAUEBMgEcSDBQPFBPUBQJQglHPgkrCTE6CU9PRglJTko9CUcxPzYxOkI/FEouK0QoJghFGDoyMkEoNQ8oKggxMTU1DU8QHEEfF1FKGRAIPiocTz8lOSgoBgQBIDNOSElHLi41PD9HDzBBSSJKTUgXUUoZEghKE0kgRhFMPUlDIDYGIlBBMAYEAgErIh8XATkCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcnJlci5kYXJ0R3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX3Byb21vdGlvbi5kYXJ0wABxpS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IERhcnRUeXBlLCBFeHByZXNzaW9uLCBUeXBlUGFyYW1ldGVyVHlwZSwgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHk7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgaW50ZXJuYWxQcm9ibGVtOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3NoYWRvd19hc3QuZGFydCcgc2hvdyBTaGFkb3dUeXBlUHJvbW90ZXI7CgppbXBvcnQgJ3R5cGVfc2NoZW1hX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZVNjaGVtYUVudmlyb25tZW50OwoKLy8vIEtlZXBzIHRyYWNrIG9mIHRoZSBzdGF0ZSBuZWNlc3NhcnkgdG8gcGVyZm9ybSB0eXBlIHByb21vdGlvbi4KLy8vCi8vLyBUaGVvcnkgb2Ygb3BlcmF0aW9uOiBkdXJpbmcgcGFyc2luZywgdGhlIEJvZHlCdWlsZGVyIGNhbGxzIG1ldGhvZHMgaW4gdGhpcwovLy8gY2xhc3MgdG8gaW5mb3JtIGl0IG9mIHN5bnRhY3RpYyBjb25zdHJ1Y3RzIHRoYXQgYXJlIGVuY291bnRlcmVkLiAgVGhvc2UKLy8vIG1ldGhvZHMgbWFpbnRhaW4gYSBsaW5rZWQgbGlzdCBvZiBbVHlwZVByb21vdGlvbkZhY3RdIG9iamVjdHMgdHJhY2tpbmcgd2hhdAovLy8gaXMga25vd24gYWJvdXQgdGhlIHN0YXRlIG9mIGVhY2ggdmFyaWFibGUgYXQgdGhlIGN1cnJlbnQgcG9pbnQgaW4gdGhlIGNvZGUsCi8vLyBhcyB3ZWxsIGFzIGEgbGlua2VkIGxpc3Qgb2YgW1R5cGVQcm9tb3Rpb25TY29wZV0gb2JqZWN0cyB0cmFja2luZyB0aGUKLy8vIGNvbXBvbmVudCdzIG5lc3Rpbmcgc3RydWN0dXJlLiAgV2hlbmV2ZXIgYSB2YXJpYWJsZSBpcyByZWFkLCB0aGUgY3VycmVudAovLy8gW1R5cGVQcm9tb3Rpb25GYWN0XSBhbmQgW1R5cGVQcm9tb3Rpb25TY29wZV0gYXJlIHJlY29yZGVkIGZvciBsYXRlciB1c2UuCi8vLwovLy8gRHVyaW5nIHR5cGUgaW5mZXJlbmNlLCB0aGUgW1R5cGVJbmZlcnJlcl0gY2FsbHMgYmFjayBpbnRvIHRoaXMgY2xhc3MgdG8gYXNrCi8vLyB3aGV0aGVyIGVhY2ggdmFyaWFibGUgcmVhZCBpcyBhIHByb21vdGVkIHJlYWQuICBUaGlzIGlzIGRldGVybWluZWQgYnkKLy8vIGV4YW1pbmluZyB0aGUgW1R5cGVQcm9tb3Rpb25TY29wZV0gYW5kIFtUeXBlUHJvbW90aW9uRmFjdF0gb2JqZWN0cyB0aGF0IHdlcmUKLy8vIHJlY29yZGVkIGF0IHRoZSB0aW1lIHRoZSB2YXJpYWJsZSByZWFkIHdhcyBwYXJzZWQsIGFzIHdlbGwgYXMgb3RoZXIgc3RhdGUKLy8vIHRoYXQgbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGxhdGVyIGR1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzLgovLy8KLy8vIFRoaXMgY2xhc3MgYWJzdHJhY3RzIGF3YXkgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bmRlcmx5aW5nIEFTVCB1c2luZwovLy8gZ2VuZXJpYyBwYXJhbWV0ZXJzLiAgRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBzZXQgRSBhbmQgViB0byB0aGUgY2xhc3MgdGhleQovLy8gdXNlIHRvIHJlcHJlc2VudCBleHByZXNzaW9ucyBhbmQgdmFyaWFibGUgZGVjbGFyYXRpb25zLCByZXNwZWN0aXZlbHkuCmFic3RyYWN0IGNsYXNzIFR5cGVQcm9tb3RlciB7CiAgVHlwZVByb21vdGVyLnByaXZhdGUoKTsKCiAgZmFjdG9yeSBUeXBlUHJvbW90ZXIoVHlwZVNjaGVtYUVudmlyb25tZW50IHR5cGVTY2hlbWFFbnZpcm9ubWVudCkgPQogICAgICBTaGFkb3dUeXBlUHJvbW90ZXIucHJpdmF0ZTsKCiAgZmFjdG9yeSBUeXBlUHJvbW90ZXIuZGlzYWJsZWQoKSA9IFR5cGVQcm9tb3RlckRpc2FibGVkLnByaXZhdGU7CgogIC8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IHR5cGUgcHJvbW90aW9uIHNjb3BlLgogIFR5cGVQcm9tb3Rpb25TY29wZSBnZXQgY3VycmVudFNjb3BlOwoKICAvLy8gQ29tcHV0ZXMgdGhlIHByb21vdGVkIHR5cGUgb2YgYSB2YXJpYWJsZSByZWFkIGhhdmluZyB0aGUgZ2l2ZW4gW2ZhY3RdIGFuZAogIC8vLyBbc2NvcGVdLiAgUmV0dXJucyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gcHJvbW90aW9uLgogIC8vLwogIC8vLyBbbXV0YXRlZEluQ2xvc3VyZV0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZhcmlhYmxlIHdhcyBtdXRhdGVkIGluIGEgY2xvc3VyZQogIC8vLyBzb21ld2hlcmUgaW4gdGhlIG1ldGhvZC4KICBEYXJ0VHlwZSBjb21wdXRlUHJvbW90ZWRUeXBlKAogICAgICBUeXBlUHJvbW90aW9uRmFjdCBmYWN0LCBUeXBlUHJvbW90aW9uU2NvcGUgc2NvcGUsIGJvb2wgbXV0YXRlZEluQ2xvc3VyZSk7CgogIC8vLyBVcGRhdGVzIHRoZSBzdGF0ZSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgd2UgYXJlIGVudGVyaW5nIGFuICJlbHNlIgogIC8vLyBicmFuY2guCiAgdm9pZCBlbnRlckVsc2UoKTsKCiAgLy8vIFVwZGF0ZXMgdGhlIHN0YXRlIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGUgTEhTIG9mIGFuICImJiIgb3IgInx8IgogIC8vLyBleHByZXNzaW9uIGhhcyBqdXN0IGJlZW4gcGFyc2VkLCBhbmQgd2UgYXJlIGVudGVyaW5nIHRoZSBSSFMuCiAgdm9pZCBlbnRlckxvZ2ljYWxFeHByZXNzaW9uKEV4cHJlc3Npb24gbGhzLCBTdHJpbmcgb3BlcmF0b3IpOwoKICAvLy8gVXBkYXRlcyB0aGUgc3RhdGUgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZSAiY29uZGl0aW9uIiBwYXJ0IG9mIGFuICJpZiIKICAvLy8gc3RhdGVtZW50IG9yIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaGFzIGp1c3QgYmVlbiBwYXJzZWQsIGFuZCB3ZSBhcmUKICAvLy8gZW50ZXJpbmcgdGhlICJ0aGVuIiBicmFuY2guCiAgdm9pZCBlbnRlclRoZW4oRXhwcmVzc2lvbiBjb25kaXRpb24pOwoKICAvLy8gVXBkYXRlcyB0aGUgc3RhdGUgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgZXhpdGVkIHRoZSAiZWxzZSIKICAvLy8gYnJhbmNoIG9mIGFuICJpZiIgc3RhdGVtZW50IG9yIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCiAgdm9pZCBleGl0Q29uZGl0aW9uYWwoKTsKCiAgLy8vIFVwZGF0ZXMgdGhlIHN0YXRlIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGV4aXRlZCB0aGUgUkhTIG9mIGFuCiAgLy8vICImJiIgb3IgInx8IiBleHByZXNzaW9uLgogIHZvaWQgZXhpdExvZ2ljYWxFeHByZXNzaW9uKEV4cHJlc3Npb24gcmhzLCBFeHByZXNzaW9uIGxvZ2ljYWxFeHByZXNzaW9uKTsKCiAgLy8vIFZlcmlmaWVzIHRoYXQgZW50ZXIvZXhpdCBjYWxscyB3ZXJlIHByb3Blcmx5IG5lc3RlZC4KICB2b2lkIGZpbmlzaGVkKCk7CgogIC8vLyBSZWNvcmRzIHRoYXQgdGhlIGdpdmVuIFt2YXJpYWJsZV0gd2FzIGFjY2Vzc2VkIGZvciByZWFkaW5nLCBhbmQgcmV0dXJucyBhCiAgLy8vIFtUeXBlUHJvbW90aW9uRmFjdF0gZGVzY3JpYmluZyB0aGUgdmFyaWFibGUncyBjdXJyZW50IHR5cGUgcHJvbW90aW9uCiAgLy8vIHN0YXRlLgogIC8vLwogIC8vLyBbZnVuY3Rpb25OZXN0aW5nTGV2ZWxdIHNob3VsZCBiZSB0aGUgY3VycmVudCBuZXN0aW5nIGxldmVsIG9mIGNsb3N1cmVzLgogIC8vLyBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YXJpYWJsZSB3YXMgYWNjZXNzZWQgaW4gYSBjbG9zdXJlLgogIFR5cGVQcm9tb3Rpb25GYWN0IGdldEZhY3RGb3JBY2Nlc3MoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CgogIC8vLyBVcGRhdGVzIHRoZSBzdGF0ZSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgYW4gImlzIiBjaGVjayBvZiBhIGxvY2FsCiAgLy8vIHZhcmlhYmxlIHdhcyBqdXN0IHBhcnNlZC4KICB2b2lkIGhhbmRsZUlzQ2hlY2soRXhwcmVzc2lvbiBpc0V4cHJlc3Npb24sIGJvb2wgaXNJbnZlcnRlZCwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgRGFydFR5cGUgdHlwZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKCiAgLy8vIFVwZGF0ZXMgdGhlIHN0YXRlIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGUgZ2l2ZW4gW3ZhcmlhYmxlXSB3YXMKICAvLy8gbXV0YXRlZC4KICB2b2lkIG11dGF0ZVZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7Cn0KCi8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbVHlwZVByb21vdGVyXSB3aGljaCBkb2Vzbid0IGRvIGFueSB0eXBlIHByb21vdGlvbi4KLy8vCi8vLyBUaGlzIGlzIGludGVuZGVkIGZvciBwcm9maWxpbmcsIHRvIGVuc3VyZSB0aGF0IHR5cGUgaW5mZXJlbmNlIGFuZCB0eXBlCi8vLyBwcm9tb3Rpb24gZG8gbm90IHNsb3cgZG93biBjb21waWxhdGlvbiB0b28gbXVjaC4KY2xhc3MgVHlwZVByb21vdGVyRGlzYWJsZWQgZXh0ZW5kcyBUeXBlUHJvbW90ZXIgewogIFR5cGVQcm9tb3RlckRpc2FibGVkLnByaXZhdGUoKSA6IHN1cGVyLnByaXZhdGUoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZVByb21vdGlvblNjb3BlIGdldCBjdXJyZW50U2NvcGUgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgY29tcHV0ZVByb21vdGVkVHlwZShUeXBlUHJvbW90aW9uRmFjdCBmYWN0LCBUeXBlUHJvbW90aW9uU2NvcGUgc2NvcGUsCiAgICAgICAgICBib29sIG11dGF0ZWRJbkNsb3N1cmUpID0+CiAgICAgIG51bGw7CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJFbHNlKCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnRlckxvZ2ljYWxFeHByZXNzaW9uKEV4cHJlc3Npb24gbGhzLCBTdHJpbmcgb3BlcmF0b3IpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJUaGVuKEV4cHJlc3Npb24gY29uZGl0aW9uKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIGV4aXRDb25kaXRpb25hbCgpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgZXhpdExvZ2ljYWxFeHByZXNzaW9uKEV4cHJlc3Npb24gcmhzLCBFeHByZXNzaW9uIGxvZ2ljYWxFeHByZXNzaW9uKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIGZpbmlzaGVkKCkge30KCiAgQG92ZXJyaWRlCiAgVHlwZVByb21vdGlvbkZhY3QgZ2V0RmFjdEZvckFjY2VzcygKICAgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkgPT4KICAgICAgbnVsbDsKCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJc0NoZWNrKEV4cHJlc3Npb24gaXNFeHByZXNzaW9uLCBib29sIGlzSW52ZXJ0ZWQsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIERhcnRUeXBlIHR5cGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCBtdXRhdGVWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHt9Cn0KCi8vLyBEZXJpdmVkIGNsYXNzIGNvbnRhaW5pbmcgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgW1R5cGVQcm9tb3Rlcl0uCi8vLwovLy8gVGhpcyBjbGFzcyBjb250YWlucyBhcyBtdWNoIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0eXBlIHByb21vdGlvbiBhcwovLy8gcG9zc2libGUgd2l0aG91dCBuZWVkaW5nIGFjY2VzcyB0byBwcml2YXRlIG1lbWJlcnMgb2Ygc2hhZG93IG9iamVjdHMuICBJdAovLy8gZGVmZXJzIHRvIGFic3RyYWN0IG1ldGhvZHMgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4KYWJzdHJhY3QgY2xhc3MgVHlwZVByb21vdGVySW1wbCBleHRlbmRzIFR5cGVQcm9tb3RlciB7CiAgZmluYWwgVHlwZVNjaGVtYUVudmlyb25tZW50IHR5cGVTY2hlbWFFbnZpcm9ubWVudDsKCiAgLy8vIFtUeXBlUHJvbW90aW9uRmFjdF0gcmVwcmVzZW50aW5nIHRoZSBpbml0aWFsIHN0YXRlIChubyBmYWN0cyBoYXZlIGJlZW4KICAvLy8gZGV0ZXJtaW5lZCB5ZXQpLgogIC8vLwogIC8vLyBBbGwgbGlua2VkIGxpc3RzIG9mIGZhY3RzIHRlcm1pbmF0ZSBpbiB0aGlzIG9iamVjdC4KICBmaW5hbCBfTnVsbEZhY3QgX251bGxGYWN0czsKCiAgLy8vIE1hcCBmcm9tIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHRvIHRoZSBtb3N0IHJlY2VudCBbVHlwZVByb21vdGlvbkZhY3RdCiAgLy8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFyaWFibGUuCiAgLy8vCiAgLy8vIFtUeXBlUHJvbW90aW9uRmFjdF1zIHRoYXQgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHZhcmlhYmxlIHNob3cgdXAgaW4KICAvLy8gdGhpcyBtYXAgdW5kZXIgdGhlIGtleSBgbnVsbGAuCiAgZmluYWwgX2ZhY3RDYWNoZSA9IDxWYXJpYWJsZURlY2xhcmF0aW9uLCBUeXBlUHJvbW90aW9uRmFjdD57fTsKCiAgLy8vIExpbmtlZCBsaXN0IG9mIFtUeXBlUHJvbW90aW9uRmFjdF1zIHRoYXQgd2FzIGN1cnJlbnQgYXQgdGhlIHRpbWUgdGhlCiAgLy8vIFtfZmFjdENhY2hlXSB3YXMgbGFzdCB1cGRhdGVkLgogIFR5cGVQcm9tb3Rpb25GYWN0IF9mYWN0Q2FjaGVTdGF0ZTsKCiAgLy8vIExpbmtlZCBsaXN0IG9mIFtUeXBlUHJvbW90aW9uRmFjdF1zIGRlc2NyaWJpbmcgd2hhdCBpcyBrbm93biB0byBiZSB0cnVlCiAgLy8vIGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBvciBzdGF0ZW1lbnQgdGhhdCB3YXMgbW9zdCByZWNlbnRseQogIC8vLyBwYXJzZWQuCiAgVHlwZVByb21vdGlvbkZhY3QgX2N1cnJlbnRGYWN0czsKCiAgLy8vIFRoZSBtb3N0IHJlY2VudGx5IHBhcnNlZCBleHByZXNzaW9uIHdob3NlIG91dGNvbWUgcG90ZW50aWFsbHkgYWZmZWN0cyB3aGF0CiAgLy8vIGlzIGtub3duIHRvIGJlIHRydWUgKGUuZy4gYW4gImlzIiBjaGVjayBvciBhIGxvZ2ljYWwgZXhwcmVzc2lvbikuICBNYXkgYmUKICAvLy8gYG51bGxgIGlmIG5vIHN1Y2ggZXhwcmVzc2lvbiBoYXMgYmVlbiBlbmNvdW50ZXJlZCB5ZXQuCiAgRXhwcmVzc2lvbiBfcHJvbW90aW9uRXhwcmVzc2lvbjsKCiAgLy8vIExpbmtlZCBsaXN0IG9mIFtUeXBlUHJvbW90aW9uRmFjdF1zIGRlc2NyaWJpbmcgd2hhdCBpcyBrbm93biB0byBiZSB0cnVlCiAgLy8vIGFmdGVyIGV4ZWN1dGlvbiBvZiBbX3Byb21vdGlvbkV4cHJlc3Npb25dLCBhc3N1bWluZyB0aGF0CiAgLy8vIFtfcHJvbW90aW9uRXhwcmVzc2lvbl0gZXZhbHVhdGVzIHRvIGB0cnVlYC4KICBUeXBlUHJvbW90aW9uRmFjdCBfdHJ1ZUZhY3RzRm9yUHJvbW90aW9uRXhwcmVzc2lvbjsKCiAgLy8vIExpbmtlZCBsaXN0IG9mIFtUeXBlUHJvbW90aW9uU2NvcGVdcyBkZXNjcmliaW5nIHRoZSBuZXN0aW5nIHN0cnVjdHVyZSB0aGF0CiAgLy8vIGNvbnRhaW5zIHRoZSBleHByZXNzaW9uIG9yIHN0YXRlbWVudCB0aGF0IHdhcyBtb3N0IHJlY2VudGx5IHBhcnNlZC4KICBUeXBlUHJvbW90aW9uU2NvcGUgX2N1cnJlbnRTY29wZSA9IGNvbnN0IF9Ub3BMZXZlbFNjb3BlKCk7CgogIC8vLyBUaGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBbVHlwZVByb21vdGlvbkZhY3RdIHRoYXQgd2FzIG1vc3QgcmVjZW50bHkKICAvLy8gY3JlYXRlZC4KICBpbnQgX2xhc3RGYWN0U2VxdWVuY2VOdW1iZXIgPSAwOwoKICBUeXBlUHJvbW90ZXJJbXBsLnByaXZhdGUoVHlwZVNjaGVtYUVudmlyb25tZW50IHR5cGVTY2hlbWFFbnZpcm9ubWVudCkKICAgICAgOiB0aGlzLl8odHlwZVNjaGVtYUVudmlyb25tZW50LCBuZXcgX051bGxGYWN0KCkpOwoKICBUeXBlUHJvbW90ZXJJbXBsLl8odGhpcy50eXBlU2NoZW1hRW52aXJvbm1lbnQsIF9OdWxsRmFjdCB0aGlzLl9udWxsRmFjdHMpCiAgICAgIDogX2ZhY3RDYWNoZVN0YXRlID0gX251bGxGYWN0cywKICAgICAgICBfY3VycmVudEZhY3RzID0gX251bGxGYWN0cywKICAgICAgICBzdXBlci5wcml2YXRlKCkgewogICAgX2ZhY3RDYWNoZVtudWxsXSA9IF9udWxsRmFjdHM7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlUHJvbW90aW9uU2NvcGUgZ2V0IGN1cnJlbnRTY29wZSA9PiBfY3VycmVudFNjb3BlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBjb21wdXRlUHJvbW90ZWRUeXBlKAogICAgICBUeXBlUHJvbW90aW9uRmFjdCBmYWN0LCBUeXBlUHJvbW90aW9uU2NvcGUgc2NvcGUsIGJvb2wgbXV0YXRlZEluQ2xvc3VyZSkgewogICAgaWYgKG11dGF0ZWRJbkNsb3N1cmUpIHJldHVybiBudWxsOwogICAgcmV0dXJuIGZhY3Q/Ll9jb21wdXRlUHJvbW90ZWRUeXBlKHRoaXMsIHNjb3BlKTsKICB9CgogIC8vLyBGb3IgaW50ZXJuYWwgZGVidWdnaW5nIHVzZSwgb3B0aW9uYWxseSBwcmludHMgdGhlIGN1cnJlbnQgc3RhdGUgZm9sbG93ZWQKICAvLy8gYnkgdGhlIGV2ZW50IG5hbWUuICBVbmNvbW1lbnQgdGhlIGNhbGwgdG8gW19wcmludEV2ZW50XSB0byBzZWUgdGhlCiAgLy8vIHNlcXVlbmNlIG9mIGNhbGxzIGludG8gdGhlIHR5cGUgcHJvbW90ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlcy4KICB2b2lkIGRlYnVnRXZlbnQoU3RyaW5nIG5hbWUpIHsKICAgIC8vIF9wcmludEV2ZW50KG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnRlckVsc2UoKSB7CiAgICBkZWJ1Z0V2ZW50KCdlbnRlckVsc2UnKTsKICAgIF9Db25kaXRpb25hbFNjb3BlIHNjb3BlID0gX2N1cnJlbnRTY29wZTsKICAgIC8vIFJlY29yZCB0aGUgY3VycmVudCBmYWN0IHN0YXRlIHNvIHRoYXQgb25jZSB3ZSBleGl0IHRoZSAiZWxzZSIgYnJhbmNoLCB3ZQogICAgLy8gY2FuIG1lcmdlIGZhY3RzIGZyb20gdGhlIHR3byBicmFuY2hlcy4KICAgIHNjb3BlLmFmdGVyVHJ1ZSA9IF9jdXJyZW50RmFjdHM7CiAgICAvLyBXaGlsZSBwcm9jZXNzaW5nIHRoZSAiZWxzZSIgYmxvY2ssIGFzc3VtZSB0aGUgY29uZGl0aW9uIHdhcyBmYWxzZS4KICAgIF9jdXJyZW50RmFjdHMgPSBzY29wZS5iZWZvcmVFbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnRlckxvZ2ljYWxFeHByZXNzaW9uKEV4cHJlc3Npb24gbGhzLCBTdHJpbmcgb3BlcmF0b3IpIHsKICAgIGRlYnVnRXZlbnQoJ2VudGVyTG9naWNhbEV4cHJlc3Npb24nKTsKICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0aGUgZmFjdHMgYXJlIGJhc2VkIG9uIHBvc3NpYmxlIExIUyBvdXRjb21lcy4KICAgIHZhciB0cnVlRmFjdHMgPSBfZmFjdHNXaGVuVHJ1ZShsaHMpOwogICAgdmFyIGZhbHNlRmFjdHMgPSBfZmFjdHNXaGVuRmFsc2UobGhzKTsKICAgIC8vIFJlY29yZCB0aGUgZmFjdCB0aGF0IHdlIGFyZSBlbnRlcmluZyBhIG5ldyBzY29wZSwgYW5kIHNhdmUgdGhlCiAgICAvLyBhcHByb3ByaWF0ZSBmYWN0cyBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGV4cHJlc3Npb24gZ2V0cyBzaG9ydC1jdXQuCiAgICBib29sIGlzQW5kID0gaWRlbnRpY2FsKG9wZXJhdG9yLCAnJiYnKTsKICAgIF9jdXJyZW50U2NvcGUgPQogICAgICAgIG5ldyBfTG9naWNhbFNjb3BlKF9jdXJyZW50U2NvcGUsIGlzQW5kLCBpc0FuZCA/IGZhbHNlRmFjdHMgOiB0cnVlRmFjdHMpOwogICAgLy8gV2hpbGUgcHJvY2Vzc2luZyB0aGUgUkhTLCBhc3N1bWUgdGhlIGNvbmRpdGlvbiB3YXMgZmFsc2Ugb3IgdHJ1ZSwKICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBsb2dpY2FsIGV4cHJlc3Npb24uCiAgICBfY3VycmVudEZhY3RzID0gaXNBbmQgPyB0cnVlRmFjdHMgOiBmYWxzZUZhY3RzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnRlclRoZW4oRXhwcmVzc2lvbiBjb25kaXRpb24pIHsKICAgIGRlYnVnRXZlbnQoJ2VudGVyVGhlbicpOwogICAgLy8gRmlndXJlIG91dCB3aGF0IHRoZSBmYWN0cyBhcmUgYmFzZWQgb24gcG9zc2libGUgY29uZGl0aW9uIG91dGNvbWVzLgogICAgdmFyIHRydWVGYWN0cyA9IF9mYWN0c1doZW5UcnVlKGNvbmRpdGlvbik7CiAgICB2YXIgZmFsc2VGYWN0cyA9IF9mYWN0c1doZW5GYWxzZShjb25kaXRpb24pOwogICAgLy8gUmVjb3JkIHRoZSBmYWN0IHRoYXQgd2UgYXJlIGVudGVyaW5nIGEgbmV3IHNjb3BlLCBhbmQgc2F2ZSB0aGUgImZhbHNlIgogICAgLy8gZmFjdHMgZm9yIHdoZW4gd2UgZW50ZXIgdGhlICJlbHNlIiBicmFuY2guCiAgICBfY3VycmVudFNjb3BlID0gbmV3IF9Db25kaXRpb25hbFNjb3BlKF9jdXJyZW50U2NvcGUsIGZhbHNlRmFjdHMpOwogICAgLy8gV2hpbGUgcHJvY2Vzc2luZyB0aGUgInRoZW4iIGJsb2NrLCBhc3N1bWUgdGhlIGNvbmRpdGlvbiB3YXMgdHJ1ZS4KICAgIF9jdXJyZW50RmFjdHMgPSB0cnVlRmFjdHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGV4aXRDb25kaXRpb25hbCgpIHsKICAgIGRlYnVnRXZlbnQoJ2V4aXRDb25kaXRpb25hbCcpOwogICAgX0NvbmRpdGlvbmFsU2NvcGUgc2NvcGUgPSBfY3VycmVudFNjb3BlOwogICAgX2N1cnJlbnRTY29wZSA9IF9jdXJyZW50U2NvcGUuX2VuY2xvc2luZzsKICAgIF9jdXJyZW50RmFjdHMgPSBfbWVyZ2VGYWN0cyhzY29wZS5hZnRlclRydWUsIF9jdXJyZW50RmFjdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBleGl0TG9naWNhbEV4cHJlc3Npb24oRXhwcmVzc2lvbiByaHMsIEV4cHJlc3Npb24gbG9naWNhbEV4cHJlc3Npb24pIHsKICAgIGRlYnVnRXZlbnQoJ2V4aXRMb2dpY2FsRXhwcmVzc2lvbicpOwogICAgX0xvZ2ljYWxTY29wZSBzY29wZSA9IF9jdXJyZW50U2NvcGU7CiAgICBfY3VycmVudFNjb3BlID0gX2N1cnJlbnRTY29wZS5fZW5jbG9zaW5nOwogICAgaWYgKHNjb3BlLmlzQW5kKSB7CiAgICAgIF9yZWNvcmRQcm9tb3Rpb25FeHByZXNzaW9uKGxvZ2ljYWxFeHByZXNzaW9uLCBfZmFjdHNXaGVuVHJ1ZShyaHMpLAogICAgICAgICAgX21lcmdlRmFjdHMoc2NvcGUuc2hvcnRjdXRGYWN0cywgX2N1cnJlbnRGYWN0cykpOwogICAgfSBlbHNlIHsKICAgICAgX3JlY29yZFByb21vdGlvbkV4cHJlc3Npb24oCiAgICAgICAgICBsb2dpY2FsRXhwcmVzc2lvbiwKICAgICAgICAgIF9tZXJnZUZhY3RzKHNjb3BlLnNob3J0Y3V0RmFjdHMsIF9jdXJyZW50RmFjdHMpLAogICAgICAgICAgX2ZhY3RzV2hlbkZhbHNlKHJocykpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmaW5pc2hlZCgpIHsKICAgIGRlYnVnRXZlbnQoJ2ZpbmlzaGVkJyk7CiAgICBpZiAoX2N1cnJlbnRTY29wZSBpcyEgX1RvcExldmVsU2NvcGUpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgIiRydW50aW1lVHlwZSIsICIkX2N1cnJlbnRTY29wZSIpLAogICAgICAgICAgLTEsCiAgICAgICAgICBudWxsKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFR5cGVQcm9tb3Rpb25GYWN0IGdldEZhY3RGb3JBY2Nlc3MoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkgewogICAgZGVidWdFdmVudCgnZ2V0RmFjdEZvckFjY2VzcycpOwogICAgdmFyIGZhY3QgPSBfY29tcHV0ZUN1cnJlbnRGYWN0TWFwKClbdmFyaWFibGVdOwogICAgVHlwZVByb21vdGlvbkZhY3QuX3JlY29yZEFjY2Vzc2VkSW5TY29wZSgKICAgICAgICBmYWN0LCBfY3VycmVudFNjb3BlLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICByZXR1cm4gZmFjdDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBuZXN0aW5nIGxldmVsIHRoYXQgd2FzIGluIGVmZmVjdCB3aGVuIFt2YXJpYWJsZV0gd2FzIGRlY2xhcmVkLgogIGludCBnZXRWYXJpYWJsZUZ1bmN0aW9uTmVzdGluZ0xldmVsKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlzQ2hlY2soRXhwcmVzc2lvbiBpc0V4cHJlc3Npb24sIGJvb2wgaXNJbnZlcnRlZCwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgRGFydFR5cGUgdHlwZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICBkZWJ1Z0V2ZW50KCdoYW5kbGVJc0NoZWNrJyk7CiAgICBpZiAoIWlzUHJvbW90aW9uQ2FuZGlkYXRlKHZhcmlhYmxlKSkgcmV0dXJuOwogICAgdmFyIGlzQ2hlY2sgPSBuZXcgX0lzQ2hlY2soCiAgICAgICAgKytfbGFzdEZhY3RTZXF1ZW5jZU51bWJlciwKICAgICAgICB2YXJpYWJsZSwKICAgICAgICBfY3VycmVudEZhY3RzLAogICAgICAgIF9jb21wdXRlQ3VycmVudEZhY3RNYXAoKVt2YXJpYWJsZV0sCiAgICAgICAgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgICAgdHlwZSk7CiAgICBpZiAoIWlzSW52ZXJ0ZWQpIHsKICAgICAgX3JlY29yZFByb21vdGlvbkV4cHJlc3Npb24oaXNFeHByZXNzaW9uLCBpc0NoZWNrLCBfY3VycmVudEZhY3RzKTsKICAgIH0KICB9CgogIC8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIHZhcmlhYmxlIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBwcm9tb3Rpb24KICAvLy8gYXQgYWxsLgogIC8vLwogIC8vLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGluIGtlcm5lbCwgW1ZhcmlhYmxlRGVjbGFyYXRpb25dIG9iamVjdHMgYXJlCiAgLy8vIHNvbWV0aW1lcyB1c2VkIHRvIHJlcHJlc2VudCBsb2NhbCBmdW5jdGlvbnMsIHdoaWNoIGFyZSBub3Qgc3ViamVjdCB0bwogIC8vLyBwcm9tb3Rpb24uCiAgYm9vbCBpc1Byb21vdGlvbkNhbmRpZGF0ZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKTsKCiAgLy8vIFVwZGF0ZXMgdGhlIHN0YXRlIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGUgZ2l2ZW4gW3ZhcmlhYmxlXSB3YXMKICAvLy8gbXV0YXRlZC4KICB2b2lkIG11dGF0ZVZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkgewogICAgZGVidWdFdmVudCgnbXV0YXRlVmFyaWFibGUnKTsKICAgIHZhciBmYWN0ID0gX2NvbXB1dGVDdXJyZW50RmFjdE1hcCgpW3ZhcmlhYmxlXTsKICAgIFR5cGVQcm9tb3Rpb25GYWN0Ll9yZWNvcmRNdXRhdGVkSW5TY29wZShmYWN0LCBfY3VycmVudFNjb3BlKTsKICAgIGlmIChnZXRWYXJpYWJsZUZ1bmN0aW9uTmVzdGluZ0xldmVsKHZhcmlhYmxlKSA8IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICAgIHNldFZhcmlhYmxlTXV0YXRlZEluQ2xvc3VyZSh2YXJpYWJsZSk7CiAgICB9CiAgICBzZXRWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZSh2YXJpYWJsZSk7CiAgfQoKICAvLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIFthXSBhbmQgW2JdIHJlcHJlc2VudCB0aGUgc2FtZSBleHByZXNzaW9uLCBhZnRlcgogIC8vLyBkcm9wcGluZyByZWR1bmRhbnQgZW5jbG9zaW5nIHBhcmVudGhlc2VzLgogIGJvb2wgc2FtZUV4cHJlc3Npb25zKEV4cHJlc3Npb24gYSwgRXhwcmVzc2lvbiBiKTsKCiAgLy8vIFJlY29yZHMgdGhhdCB0aGUgZ2l2ZW4gdmFyaWFibGUgd2FzIG11dGF0ZWQgc29tZXdoZXJlIGluc2lkZSB0aGUgbWV0aG9kLgogIHZvaWQgc2V0VmFyaWFibGVNdXRhdGVkQW55d2hlcmUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSk7CgogIC8vLyBSZWNvcmRzIHRoYXQgdGhlIGdpdmVuIHZhcmlhYmxlIHdhcyBtdXRhdGVkIGluc2lkZSBhIGNsb3N1cmUuCiAgdm9pZCBzZXRWYXJpYWJsZU11dGF0ZWRJbkNsb3N1cmUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSk7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciBbc2V0VmFyaWFibGVNdXRhdGVkQW55d2hlcmVdIGhhcyBiZWVuIGNhbGxlZCBmb3IgdGhlCiAgLy8vIGdpdmVuIFt2YXJpYWJsZV0uCiAgYm9vbCB3YXNWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKTsKCiAgLy8vIFJldHVybnMgYSBtYXAgZnJvbSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0byB0aGUgbW9zdCByZWNlbnQKICAvLy8gW1R5cGVQcm9tb3Rpb25GYWN0XSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhcmlhYmxlLgogIE1hcDxWYXJpYWJsZURlY2xhcmF0aW9uLCBUeXBlUHJvbW90aW9uRmFjdD4gX2NvbXB1dGVDdXJyZW50RmFjdE1hcCgpIHsKICAgIC8vIFJvbGwgYmFjayBhbnkgbWFwIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIGZhY3RzIHRoYXQgYXJlIG5vIGxvbmdlciBpbgogICAgLy8gZWZmZWN0LCBhbmQgc2V0IFtjb21tb25BbmNlc3Rvcl0gdG8gdGhlIGZhY3QgdGhhdCBpcyBhbiBhbmNlc3RvciBvZgogICAgLy8gdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHRoZSBwcmV2aW91c2x5IGNhY2hlZCBzdGF0ZS4gIFRvIGRvIHRoaXMsIHdlIHNldCBhCiAgICAvLyB2YXJpYWJsZSBwb2ludGluZyB0byBbX2N1cnJlbnRGYWN0c10sIGFuZCB0aGVuIHdhbGsgYm90aCBpdCBhbmQKICAgIC8vIFtfZmFjdENhY2hlU3RhdGVdIGJhY2sgdG8gdGhlaXIgY29tbW9uIGFuY2VzdG9yLCB1cGRhdGluZyBbX2ZhY3RDYWNoZV0gYXMKICAgIC8vIHdlIGdvLgogICAgVHlwZVByb21vdGlvbkZhY3QgY29tbW9uQW5jZXN0b3IgPSBfY3VycmVudEZhY3RzOwogICAgd2hpbGUgKGNvbW1vbkFuY2VzdG9yLnNlcXVlbmNlTnVtYmVyICE9IF9mYWN0Q2FjaGVTdGF0ZS5zZXF1ZW5jZU51bWJlcikgewogICAgICBpZiAoY29tbW9uQW5jZXN0b3Iuc2VxdWVuY2VOdW1iZXIgPiBfZmFjdENhY2hlU3RhdGUuc2VxdWVuY2VOdW1iZXIpIHsKICAgICAgICAvLyBUaGUgY3VycmVudGx5IGNhY2hlZCBzdGF0ZSBpcyBvbGRlciB0aGFuIHRoZSBjb21tb24gYW5jZXN0b3IgZ3Vlc3MsCiAgICAgICAgLy8gc28gdGhlIGNvbW1vbiBhbmNlc3RvciBndWVzcyBuZWVkcyB0byBiZSB3YWxrZWQgYmFjay4KICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLnByZXZpb3VzOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoZSBjb21tb24gYW5jZXN0b3IgZ3Vlc3MgaXMgb2xkZXIgdGhhbiB0aGUgY3VycmVudGx5IGNhY2hlZCBzdGF0ZSwKICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHJvbGwgYmFjayB0aGUgbWFwIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudGx5CiAgICAgICAgLy8gY2FjaGVkIHN0YXRlLgogICAgICAgIF9mYWN0Q2FjaGVbX2ZhY3RDYWNoZVN0YXRlLnZhcmlhYmxlXSA9CiAgICAgICAgICAgIF9mYWN0Q2FjaGVTdGF0ZS5wcmV2aW91c0ZvclZhcmlhYmxlOwogICAgICAgIF9mYWN0Q2FjaGVTdGF0ZSA9IF9mYWN0Q2FjaGVTdGF0ZS5wcmV2aW91czsKICAgICAgfQogICAgfQogICAgYXNzZXJ0KGlkZW50aWNhbChjb21tb25BbmNlc3RvciwgX2ZhY3RDYWNoZVN0YXRlKSk7CiAgICAvLyBSb2xsIGZvcndhcmQgYW55IG1hcCBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBmYWN0cyB0aGF0IGFyZSBuZXdseSBpbgogICAgLy8gZWZmZWN0LiAgU2luY2UgbmV3ZXIgZmFjdHMgbGluayB0byBvbGRlciBvbmVzLCBpdCBpcyBlYXNpZXN0IHRvIGRvIHJvbGwKICAgIC8vIGZvcndhcmQgdGhlIG1vc3QgcmVjZW50IGZhY3RzIGZpcnN0LgogICAgZm9yIChUeXBlUHJvbW90aW9uRmFjdCBuZXdTdGF0ZSA9IF9jdXJyZW50RmFjdHM7CiAgICAgICAgIWlkZW50aWNhbChuZXdTdGF0ZSwgY29tbW9uQW5jZXN0b3IpOwogICAgICAgIG5ld1N0YXRlID0gbmV3U3RhdGUucHJldmlvdXMpIHsKICAgICAgdmFyIGN1cnJlbnRseUNhY2hlZCA9IF9mYWN0Q2FjaGVbbmV3U3RhdGUudmFyaWFibGVdOwogICAgICAvLyBOb3RlOiBTaW5jZSB3ZSByb2xsIGZvcndhcmQgdGhlIG1vc3QgcmVjZW50IGZhY3RzIGZpcnN0LCB3ZSBuZWVkIHRvIGJlCiAgICAgIC8vIGNhcmVmdWwgbm90IHdyaXRlIGFuIG9sZGVyIGZhY3Qgb3ZlciBhIG5ld2VyIG9uZS4KICAgICAgaWYgKGN1cnJlbnRseUNhY2hlZCA9PSBudWxsIHx8CiAgICAgICAgICBuZXdTdGF0ZS5zZXF1ZW5jZU51bWJlciA+IGN1cnJlbnRseUNhY2hlZC5zZXF1ZW5jZU51bWJlcikgewogICAgICAgIF9mYWN0Q2FjaGVbbmV3U3RhdGUudmFyaWFibGVdID0gbmV3U3RhdGU7CiAgICAgIH0KICAgIH0KICAgIF9mYWN0Q2FjaGVTdGF0ZSA9IF9jdXJyZW50RmFjdHM7CiAgICByZXR1cm4gX2ZhY3RDYWNoZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzZXQgb2YgZmFjdHMga25vd24gdG8gYmUgdHJ1ZSBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIFtlXQogIC8vLyBhc3N1bWluZyBpdCBldmFsdWF0ZXMgdG8gYGZhbHNlYC4KICAvLy8KICAvLy8gW2VdIG11c3QgYmUgdGhlIG1vc3QgcmVjZW50bHkgcGFyc2VkIGV4cHJlc3Npb24gb3Igc3RhdGVtZW50LgogIFR5cGVQcm9tb3Rpb25GYWN0IF9mYWN0c1doZW5GYWxzZShFeHByZXNzaW9uIGUpIHsKICAgIC8vIFR5cGUgcHJvbW90aW9uIGN1cnJlbnRseSBvbmx5IG9jY3VycyB3aGVuIGFuICJpcyIgb3IgbG9naWNhbCBleHByZXNzaW9uCiAgICAvLyBldmFsdWF0ZXMgdG8gYHRydWVgLCBzbyBubyBzcGVjaWFsIGxvZ2ljIGlzIHJlcXVpcmVkOyB3ZSBqdXN0IHVzZQogICAgLy8gW19jdXJyZW50RmFjdHNdLgogICAgLy8KICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZXhwZXJpbWVudCB3aXRoIHN1cHBvcnRpbmcgcHJvbW90aW9uIGluIGNhc2VzIGxpa2UKICAgIC8vIGBpZiAoeCBpcyEgVCkgeyAuLi4gfSBlbHNlIHsgLi4uYWNjZXNzIHguLi4gfWAKICAgIHJldHVybiBfY3VycmVudEZhY3RzOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHNldCBvZiBmYWN0cyBrbm93biB0byBiZSB0cnVlIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgW2VdCiAgLy8vIGFzc3VtaW5nIGl0IGV2YWx1YXRlcyB0byBgdHJ1ZWAuCiAgLy8vCiAgLy8vIFtlXSBtdXN0IGJlIHRoZSBtb3N0IHJlY2VudGx5IHBhcnNlZCBleHByZXNzaW9uIG9yIHN0YXRlbWVudC4KICBUeXBlUHJvbW90aW9uRmFjdCBfZmFjdHNXaGVuVHJ1ZShFeHByZXNzaW9uIGUpID0+CiAgICAgIHNhbWVFeHByZXNzaW9ucyhfcHJvbW90aW9uRXhwcmVzc2lvbiwgZSkKICAgICAgICAgID8gX3RydWVGYWN0c0ZvclByb21vdGlvbkV4cHJlc3Npb24KICAgICAgICAgIDogX2N1cnJlbnRGYWN0czsKCiAgLy8vIFJldHVybnMgdGhlIHNldCBvZiBmYWN0cyBrbm93biB0byBiZSB0cnVlIGFmdGVyIHR3byBicmFuY2hlcyBvZiBleGVjdXRpb24KICAvLy8gcmVqb2luLgogIFR5cGVQcm9tb3Rpb25GYWN0IF9tZXJnZUZhY3RzKFR5cGVQcm9tb3Rpb25GYWN0IGEsIFR5cGVQcm9tb3Rpb25GYWN0IGIpIHsKICAgIC8vIFR5cGUgcHJvbW90aW9uIGN1cnJlbnRseSBkb2Vzbid0IHN1cHBvcnQgYW55IG1lY2hhbmlzbSBmb3IgZmFjdHMgdG8KICAgIC8vIGFjY3VtdWxhdGUgYWxvbmcgYSBzdHJhaWdodC1saW5lIGV4ZWN1dGlvbiBwYXRoICh0aGV5IGNhbiBvbmx5IGFjY3VtdWxhdGUKICAgIC8vIHdoZW4gZW50ZXJpbmcgYSBzY29wZSksIHNvIHdlIGNhbiBzaW1wbHkgZmluZCB0aGUgY29tbW9uIGFuY2VzdG9yIGZhY3QuCiAgICAvLwogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBleHBlcmltZW50IHdpdGggc3VwcG9ydGluZyBwcm9tb3Rpb24gaW4gY2FzZXMgbGlrZToKICAgIC8vICAgICBpZiAoLi4uKSB7CiAgICAvLyAgICAgICBpZiAoeCBpcyEgVCkgcmV0dXJuOwogICAgLy8gICAgIH0gZWxzZSB7CiAgICAvLyAgICAgICBpZiAoeCBpcyEgVCkgcmV0dXJuOwogICAgLy8gICAgIH0KICAgIC8vICAgICAuLi5hY2Nlc3MgeC4uLgogICAgd2hpbGUgKGEuc2VxdWVuY2VOdW1iZXIgIT0gYi5zZXF1ZW5jZU51bWJlcikgewogICAgICBpZiAoYS5zZXF1ZW5jZU51bWJlciA+IGIuc2VxdWVuY2VOdW1iZXIpIHsKICAgICAgICBhID0gYS5wcmV2aW91czsKICAgICAgfSBlbHNlIHsKICAgICAgICBiID0gYi5wcmV2aW91czsKICAgICAgfQogICAgfQogICAgYXNzZXJ0KGlkZW50aWNhbChhLCBiKSk7CiAgICByZXR1cm4gYTsKICB9CgogIC8vLyBGb3IgaW50ZXJuYWwgZGVidWdnaW5nIHVzZSwgcHJpbnRzIHRoZSBjdXJyZW50IHN0YXRlIGZvbGxvd2VkIGJ5IHRoZSBldmVudAogIC8vLyBuYW1lLgogIHZvaWQgX3ByaW50RXZlbnQoU3RyaW5nIG5hbWUpIHsKICAgIEl0ZXJhYmxlPFR5cGVQcm9tb3Rpb25GYWN0PiBmYWN0Q2hhaW4oVHlwZVByb21vdGlvbkZhY3QgZmFjdCkgc3luYyogewogICAgICB3aGlsZSAoZmFjdCAhPSBudWxsKSB7CiAgICAgICAgeWllbGQgZmFjdDsKICAgICAgICBmYWN0ID0gZmFjdC5wcmV2aW91c0ZvclZhcmlhYmxlOwogICAgICB9CiAgICB9CgogICAgX2NvbXB1dGVDdXJyZW50RmFjdE1hcCgpLmZvckVhY2goKHZhcmlhYmxlLCBmYWN0KSB7CiAgICAgIGlmIChmYWN0ID09IG51bGwpIHJldHVybjsKICAgICAgcHJpbnQoJyAgJHt2YXJpYWJsZSA/PyAnKG51bGwpJ306ICR7ZmFjdENoYWluKGZhY3QpLmpvaW4oJyAtPiAnKX0nKTsKICAgIH0pOwogICAgaWYgKF9wcm9tb3Rpb25FeHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgcHJpbnQoJyAgX3Byb21vdGlvbkV4cHJlc3Npb246ICRfcHJvbW90aW9uRXhwcmVzc2lvbicpOwogICAgICBpZiAoIWlkZW50aWNhbChfdHJ1ZUZhY3RzRm9yUHJvbW90aW9uRXhwcmVzc2lvbiwgX2N1cnJlbnRGYWN0cykpIHsKICAgICAgICBwcmludCgnICAgIGlmIHRydWU6ICRfdHJ1ZUZhY3RzRm9yUHJvbW90aW9uRXhwcmVzc2lvbicpOwogICAgICB9CiAgICB9CiAgICBwcmludChuYW1lKTsKICB9CgogIC8vLyBSZWNvcmRzIHRoYXQgYWZ0ZXIgdGhlIGV2YWx1YXRpb24gb2YgW2V4cHJlc3Npb25dLCB0aGUgZmFjdHMgd2lsbCBiZQogIC8vLyBbaWZUcnVlXSBvbiBhIGJyYW5jaCB3aGVyZSB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZWQgdG8gYHRydWVgLCBhbmQKICAvLy8gW2lmRmFsc2VdIG9uIGEgYnJhbmNoIHdoZXJlIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlZCB0byBgZmFsc2VgIChvciB3aGVyZQogIC8vLyB0aGUgdHJ1dGggdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gZG9lc24ndCBtYXR0ZXIpLgogIC8vLwogIC8vLyBUT0RPKHBhdWxiZXJyeSk6IHdoZW4gd2Ugc3RhcnQgaGFuZGxpbmcgcHJvbW90aW9uIGluICJlbHNlIiBjbGF1c2VzLCB3ZSdsbAogIC8vLyBuZWVkIHRvIHNwbGl0IFtpZkZhbHNlXSBpbnRvIHR3byBjYXNlcywgb25lIGZvciB3aGVuIHRoZSBleHByZXNzaW9uCiAgLy8vIGV2YWx1YXRlZCB0byBgZmFsc2VgLCBhbmQgb25lIHdoZXJlIHRoZSB0cnV0aCB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbgogIC8vLyBkb2Vzbid0IG1hdHRlci4KICB2b2lkIF9yZWNvcmRQcm9tb3Rpb25FeHByZXNzaW9uKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgVHlwZVByb21vdGlvbkZhY3QgaWZUcnVlLCBUeXBlUHJvbW90aW9uRmFjdCBpZkZhbHNlKSB7CiAgICBfcHJvbW90aW9uRXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CiAgICBfdHJ1ZUZhY3RzRm9yUHJvbW90aW9uRXhwcmVzc2lvbiA9IGlmVHJ1ZTsKICAgIF9jdXJyZW50RmFjdHMgPSBpZkZhbHNlOwogIH0KfQoKLy8vIEEgc2luZ2xlIGZhY3Qgd2hpY2ggaXMga25vd24gdG8gdGhlIHR5cGUgcHJvbW90aW9uIGVuZ2luZSBhYm91dCB0aGUgc3RhdGUgb2YKLy8vIGEgdmFyaWFibGUgKG9yIGFib3V0IHRoZSBmbG93IGNvbnRyb2wgb2YgdGhlIGNvbXBvbmVudCkuCi8vLwovLy8gVGhlIHR5cGUgYXJndW1lbnQgViByZXByZXNlbnRzIGlzIHRoZSBjbGFzcyB3aGljaCByZXByZXNlbnRzIGxvY2FsIHZhcmlhYmxlCi8vLyBkZWNsYXJhdGlvbnMuCi8vLwovLy8gRmFjdHMgYXJlIGxpbmtlZCB0b2dldGhlciBpbnRvIGxpbmtlZCBsaXN0cyB2aWEgdGhlIFtwcmV2aW91c10gcG9pbnRlciBpbnRvCi8vLyBhIGRhdGEgc3RydWN0dXJlIGNhbGxlZCBhICJmYWN0IGNoYWluIiAob3Igc29tZXRpbWVzIGEgImZhY3Qgc3RhdGUiKSwgd2hpY2gKLy8vIHJlcHJlc2VudHMgYWxsIGZhY3RzIHRoYXQgYXJlIGtub3duIHRvIGhvbGQgYXQgYSBjZXJ0YWluIHBvaW50IGluIHRoZQovLy8gY29tcG9uZW50LgovLy8KLy8vIFRoZSBmYWN0IGlzIHNhaWQgdG8gImFwcGx5IiB0byBhIGdpdmVuIHBvaW50IGluIHRoZSBleGVjdXRpb24gb2YgdGhlCi8vLyBjb21wb25lbnQgaWYgdGhlIGZhY3QgaXMgcGFydCBvZiB0aGUgY3VycmVudCBmYWN0IHN0YXRlIGF0IHRoZSBwb2ludCB0aGUKLy8vIHBhcnNlciByZWFjaGVzIHRoYXQgcG9pbnQgaW4gdGhlIGNvbXBvbmVudC4KLy8vCi8vLyBOb3RlOiBqdXN0IGJlY2F1c2UgYSBmYWN0ICJhcHBsaWVzIiB0byBhIGdpdmVuIHBvaW50IGluIHRoZSBleGVjdXRpb24gb2YKLy8vIHRoZSBjb21wb25lbnQgZG9lc24ndCBtZWFuIGEgdHlwZSB3aWxsIGJlIHByb21vdGVkLS1pdCBzaW1wbHkgbWVhbnMgdGhhdAovLy8gdGhlIGZhY3Qgd2FzIGRlZHVjZWQgYXQgYSBwcmV2aW91cyBwb2ludCBpbiB0aGUgc3RyYWlnaHQgbGluZSBleGVjdXRpb24gb2YKLy8vIHRoZSBjb2RlLiAgSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBmYWN0IHdpbGwgYmUgb3ZlcnNoYWRvd2VkIGJ5IGEgbGF0ZXIKLy8vIGZhY3QsIG9yIGl0cyBlZmZlY3Qgd2lsbCBiZSBjYW5jZWxsZWQgYnkgYSBsYXRlciBhc3NpZ25tZW50LiAgVGhlIGZpbmFsCi8vLyBkZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgcHJvbW90aW9uIG9jY3VycyBpcyBsZWZ0IHRvIFtfY29tcHV0ZVByb21vdGVkVHlwZV0uCmFic3RyYWN0IGNsYXNzIFR5cGVQcm9tb3Rpb25GYWN0IHsKICAvLy8gVGhlIHZhcmlhYmxlIHRoaXMgZmFjdCByZWNvcmRzIGluZm9ybWF0aW9uIGFib3V0LCBvciBgbnVsbGAgaWYgdGhpcyBmYWN0CiAgLy8vIHJlY29yZHMgaW5mb3JtYXRpb24gYWJvdXQgZ2VuZXJhbCBmbG93IGNvbnRyb2wuCiAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsKCiAgLy8vIFRoZSBmYWN0IGNoYWluIHRoYXQgd2FzIGluIGVmZmVjdCBwcmlvciB0byBleGVjdXRpb24gb2YgdGhlIHN0YXRlbWVudCBvcgogIC8vLyBleHByZXNzaW9uIHRoYXQgY2F1c2VkIHRoaXMgZmFjdCB0byBiZSB0cnVlLgogIGZpbmFsIFR5cGVQcm9tb3Rpb25GYWN0IHByZXZpb3VzOwoKICAvLy8gSW50ZWdlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBmYWN0LiAgRWFjaCB0aW1lIGEgZmFjdCBpcyBjcmVhdGVkIGl0IGlzCiAgLy8vIGdpdmVuIGEgc2VxdWVuY2UgbnVtYmVyIG9uZSBncmVhdGVyIHRoYW4gdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGZhY3QuCiAgLy8vIFRoaXMgc2ltcGxpZmllcyB0aGUgYWxnb3JpdGhtIGZvciBmaW5kaW5nIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgdHdvCiAgLy8vIGZhY3RzOyB3ZSByZXBlYXRlZGx5IHdhbGsgYmFja3dhcmQgdGhlIGZhY3Qgd2l0aCB0aGUgbGFyZ2VyIHNlcXVlbmNlCiAgLy8vIG51bWJlciB1bnRpbCB0aGUgc2VxdWVuY2UgbnVtYmVycyBhcmUgdGhlIHNhbWUuCiAgZmluYWwgaW50IHNlcXVlbmNlTnVtYmVyOwoKICAvLy8gVGhlIG1vc3QgcmVjZW50IGZhY3QgYXBwZWFyaW5nIGluIHRoZSBmYWN0IGNoYWluIFtwcmV2aW91c10gd2hvc2UKICAvLy8gW3ZhcmlhYmxlXSBtYXRjaGVzIHRoaXMgb25lLCBvciBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gc3VjaCBmYWN0LgogIGZpbmFsIFR5cGVQcm9tb3Rpb25GYWN0IHByZXZpb3VzRm9yVmFyaWFibGU7CgogIC8vLyBUaGUgZnVuY3Rpb24gbmVzdGluZyBsZXZlbCBvZiB0aGUgZXhwcmVzc2lvbiB0aGF0IGxlZCB0byB0aGlzIGZhY3QuCiAgZmluYWwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsOwoKICAvLy8gSWYgdGhpcyBmYWN0J3MgdmFyaWFibGUgd2FzIG11dGF0ZWQgd2l0aGluIGFueSBzY29wZXMgdGhlCiAgLy8vIGZhY3QgYXBwbGllcyB0bywgYSBzZXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2NvcGVzLiAgT3RoZXJ3aXNlIGBudWxsYC4KICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnkpOiB0aGUgc2l6ZSBvZiB0aGlzIHNldCBpcyBwcm9iYWJseSB2ZXJ5IHNtYWxsIG1vc3Qgb2YgdGhlCiAgLy8vIHRpbWUuICBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gdXNlIGEgbGlzdD8KICBTZXQ8VHlwZVByb21vdGlvblNjb3BlPiBfbXV0YXRlZEluU2NvcGVzOwoKICAvLy8gSWYgdGhpcyBmYWN0J3MgdmFyaWFibGUgd2FzIGFjY2Vzc2VkIGluc2lkZSBhIGNsb3N1cmUgd2l0aGluIGFueSBzY29wZXMKICAvLy8gdGhlIGZhY3QgYXBwbGllcyB0bywgYSBzZXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2NvcGVzLiAgT3RoZXJ3aXNlIGBudWxsYC4KICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnkpOiB0aGUgc2l6ZSBvZiB0aGlzIHNldCBpcyBwcm9iYWJseSB2ZXJ5IHNtYWxsIG1vc3Qgb2YgdGhlCiAgLy8vIHRpbWUuICBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gdXNlIGEgbGlzdD8KICBTZXQ8VHlwZVByb21vdGlvblNjb3BlPiBfYWNjZXNzZWRJbkNsb3N1cmVJblNjb3BlczsKCiAgVHlwZVByb21vdGlvbkZhY3QodGhpcy5zZXF1ZW5jZU51bWJlciwgdGhpcy52YXJpYWJsZSwgdGhpcy5wcmV2aW91cywKICAgICAgdGhpcy5wcmV2aW91c0ZvclZhcmlhYmxlLCB0aGlzLmZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBwcm9tb3RlZCB0eXBlIGZvciBbdmFyaWFibGVdIGF0IGEgbG9jYXRpb24gaW4gdGhlIGNvZGUgd2hlcmUKICAvLy8gdGhpcyBmYWN0IGFwcGxpZXMuCiAgLy8vCiAgLy8vIFNob3VsZCBub3QgYmUgY2FsbGVkIHVudGlsIGFmdGVyIHBhcnNpbmcgb2YgdGhlIGVudGlyZSBtZXRob2QgaXMgY29tcGxldGUuCiAgRGFydFR5cGUgX2NvbXB1dGVQcm9tb3RlZFR5cGUoCiAgICAgIFR5cGVQcm9tb3RlckltcGwgcHJvbW90ZXIsIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSk7CgogIC8vLyBSZWNvcmRzIHRoZSBmYWN0IHRoYXQgdGhlIHZhcmlhYmxlIHJlZmVyZW5jZWQgYnkgW2ZhY3RdIHdhcyBhY2Nlc3NlZAogIC8vLyB3aXRoaW4gdGhlIGdpdmVuIHNjb3BlLCBhdCB0aGUgZ2l2ZW4gZnVuY3Rpb24gbmVzdGluZyBsZXZlbC4KICAvLy8KICAvLy8gSWYgYG51bGxgIGlzIHBhc3NlZCBpbiBmb3IgW2ZhY3RdLCB0aGVyZSBpcyBubyBlZmZlY3QuCiAgc3RhdGljIHZvaWQgX3JlY29yZEFjY2Vzc2VkSW5TY29wZShUeXBlUHJvbW90aW9uRmFjdCBmYWN0LAogICAgICBUeXBlUHJvbW90aW9uU2NvcGUgc2NvcGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkgewogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBtYWtlIHNvbWUgaW50ZWdyYXRpb24gdGVzdCBjYXNlcyB0aGF0IGV4ZXJjaXNlIHRoZQogICAgLy8gYmVoYXZpb3JzIG9mIHRoaXMgZnVuY3Rpb24uICBJbiBwYXJ0aWN1bGFyIHZlcmlmeSB0aGF0IGl0J3MgY29ycmVjdCB0bwogICAgLy8gdGVzdCBmdW5jdGlvbk5lc3RpbmdMZXZlbCBhZ2FpbnN0IGZhY3QuZnVuY3Rpb25OZXN0aW5nTGV2ZWwgKGFzIG9wcG9zZWQKICAgIC8vIHRvIHRlc3RpbmcgaXQgYWdhaW5zdCBnZXRWYXJpYWJsZUZ1bmN0aW9uTmVzdGluZ0xldmVsKHZhcmlhYmxlKSkuCiAgICB3aGlsZSAoZmFjdCAhPSBudWxsKSB7CiAgICAgIGlmIChmdW5jdGlvbk5lc3RpbmdMZXZlbCA+IGZhY3QuZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgICAgICBmYWN0Ll9hY2Nlc3NlZEluQ2xvc3VyZUluU2NvcGVzID8/PQogICAgICAgICAgICBuZXcgU2V0PFR5cGVQcm9tb3Rpb25TY29wZT4uaWRlbnRpdHkoKTsKICAgICAgICBpZiAoIWZhY3QuX2FjY2Vzc2VkSW5DbG9zdXJlSW5TY29wZXMuYWRkKHNjb3BlKSkgcmV0dXJuOwogICAgICB9CiAgICAgIGZhY3QgPSBmYWN0LnByZXZpb3VzRm9yVmFyaWFibGU7CiAgICB9CiAgfQoKICAvLy8gUmVjb3JkcyB0aGUgZmFjdCB0aGF0IHRoZSB2YXJpYWJsZSByZWZlcmVuY2VkIGJ5IFtmYWN0XSB3YXMgbXV0YXRlZAogIC8vLyB3aXRoaW4gdGhlIGdpdmVuIHNjb3BlLgogIC8vLwogIC8vLyBJZiBgbnVsbGAgaXMgcGFzc2VkIGluIGZvciBbZmFjdF0sIHRoZXJlIGlzIG5vIGVmZmVjdC4KICBzdGF0aWMgdm9pZCBfcmVjb3JkTXV0YXRlZEluU2NvcGUoCiAgICAgIFR5cGVQcm9tb3Rpb25GYWN0IGZhY3QsIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSkgewogICAgd2hpbGUgKGZhY3QgIT0gbnVsbCkgewogICAgICBmYWN0Ll9tdXRhdGVkSW5TY29wZXMgPz89IG5ldyBTZXQ8VHlwZVByb21vdGlvblNjb3BlPi5pZGVudGl0eSgpOwogICAgICBpZiAoIWZhY3QuX211dGF0ZWRJblNjb3Blcy5hZGQoc2NvcGUpKSByZXR1cm47CiAgICAgIGZhY3QgPSBmYWN0LnByZXZpb3VzRm9yVmFyaWFibGU7CiAgICB9CiAgfQp9CgovLy8gUmVwcmVzZW50cyBhIGNvbnRpZ3VvdXMgYmxvY2sgb2YgcHJvZ3JhbSB0ZXh0IGluIHdoaWNoIHZhcmlhYmxlcyBtYXkgb3IgbWF5Ci8vLyBub3QgYmUgcHJvbW90ZWQuICBBbHNvIHVzZWQgYXMgYSBzdGFjayB0byBrZWVwIHRyYWNrIG9mIHN0YXRlIHdoaWxlIHRoZQovLy8gbWV0aG9kIGlzIGJlaW5nIHBhcnNlZC4KY2xhc3MgVHlwZVByb21vdGlvblNjb3BlIHsKICAvLy8gVGhlIG5lc3RpbmcgZGVwdGggb2YgdGhpcyBzY29wZS4gIFRoZSBvdXRlcm1vc3Qgc2NvcGUgKHJlcHJlc2VudGluZyB0aGUKICAvLy8gd2hvbGUgbWV0aG9kIGJvZHkpIGhhcyBhIGRlcHRoIG9mIDAuCiAgZmluYWwgaW50IF9kZXB0aDsKCiAgLy8vIFRoZSBbVHlwZVByb21vdGlvblNjb3BlXSByZXByZXNlbnRpbmcgdGhlIHNjb3BlIGVuY2xvc2luZyB0aGlzIG9uZS4KICBmaW5hbCBUeXBlUHJvbW90aW9uU2NvcGUgX2VuY2xvc2luZzsKCiAgVHlwZVByb21vdGlvblNjb3BlKHRoaXMuX2VuY2xvc2luZykgOiBfZGVwdGggPSBfZW5jbG9zaW5nLl9kZXB0aCArIDE7CgogIGNvbnN0IFR5cGVQcm9tb3Rpb25TY29wZS5fdG9wTGV2ZWwoKQogICAgICA6IF9lbmNsb3NpbmcgPSBudWxsLAogICAgICAgIF9kZXB0aCA9IDA7CgogIC8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBzY29wZSBjb21wbGV0ZWx5IGVuY2xvc2VzIChvciBpcyB0aGUgc2FtZSBhcykKICAvLy8gW290aGVyXS4KICBib29sIGNvbnRhaW5zU2NvcGUoVHlwZVByb21vdGlvblNjb3BlIG90aGVyKSB7CiAgICBpZiAodGhpcy5fZGVwdGggPiBvdGhlci5fZGVwdGgpIHsKICAgICAgLy8gV2UgY2FuJ3QgcG9zc2libHkgY29udGFpbiBhIHNjb3BlIGlmIHdlIGFyZSBhdCBncmVhdGVyIG5lc3RpbmcgZGVwdGgKICAgICAgLy8gdGhhbiBpdCBpcy4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgd2hpbGUgKHRoaXMuX2RlcHRoIDwgb3RoZXIuX2RlcHRoKSB7CiAgICAgIG90aGVyID0gb3RoZXIuX2VuY2xvc2luZzsKICAgIH0KICAgIHJldHVybiBpZGVudGljYWwodGhpcywgb3RoZXIpOwogIH0KfQoKLy8vIFtUeXBlUHJvbW90aW9uU2NvcGVdIHJlcHJlc2VudGluZyB0aGUgInRoZW4iIGFuZCAiZWxzZSIgYm9kaWVzIG9mIGFuICJpZiIKLy8vIHN0YXRlbWVudCBvciBjb25kaXRpb25hbCBleHByZXNzaW9uLgpjbGFzcyBfQ29uZGl0aW9uYWxTY29wZSBleHRlbmRzIFR5cGVQcm9tb3Rpb25TY29wZSB7CiAgLy8vIFRoZSBmYWN0IHN0YXRlIGluIGVmZmVjdCBhdCB0aGUgdG9wIG9mIHRoZSAiZWxzZSIgYmxvY2suCiAgZmluYWwgVHlwZVByb21vdGlvbkZhY3QgYmVmb3JlRWxzZTsKCiAgLy8vIFRoZSBmYWN0IHN0YXRlIHdoaWNoIHdhcyBpbiBlZmZlY3QgYXQgdGhlIGJvdHRvbSBvZiB0aGUgInRoZW4iIGJsb2NrLgogIFR5cGVQcm9tb3Rpb25GYWN0IGFmdGVyVHJ1ZTsKCiAgX0NvbmRpdGlvbmFsU2NvcGUoVHlwZVByb21vdGlvblNjb3BlIGVuY2xvc2luZywgdGhpcy5iZWZvcmVFbHNlKQogICAgICA6IHN1cGVyKGVuY2xvc2luZyk7Cn0KCi8vLyBbVHlwZVByb21vdGlvbkZhY3RdIHJlcHJlc2VudGluZyBhbiAiaXMiIGNoZWNrIHdoaWNoIHN1Y2NlZWRlZC4KY2xhc3MgX0lzQ2hlY2sgZXh0ZW5kcyBUeXBlUHJvbW90aW9uRmFjdCB7CiAgLy8vIFRoZSB0eXBlIGFwcGVhcmluZyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mICJpcyIuCiAgZmluYWwgRGFydFR5cGUgY2hlY2tlZFR5cGU7CgogIF9Jc0NoZWNrKAogICAgICBpbnQgc2VxdWVuY2VOdW1iZXIsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsCiAgICAgIFR5cGVQcm9tb3Rpb25GYWN0IHByZXZpb3VzLAogICAgICBUeXBlUHJvbW90aW9uRmFjdCBwcmV2aW91c0ZvclZhcmlhYmxlLAogICAgICBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgIHRoaXMuY2hlY2tlZFR5cGUpCiAgICAgIDogc3VwZXIoc2VxdWVuY2VOdW1iZXIsIHZhcmlhYmxlLCBwcmV2aW91cywgcHJldmlvdXNGb3JWYXJpYWJsZSwKICAgICAgICAgICAgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnaXNDaGVjaygkY2hlY2tlZFR5cGUpJzsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgX2NvbXB1dGVQcm9tb3RlZFR5cGUoCiAgICAgIFR5cGVQcm9tb3RlckltcGwgcHJvbW90ZXIsIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSkgewogICAgdmFyIHByZXZpb3VzUHJvbW90ZWRUeXBlID0KICAgICAgICBwcmV2aW91c0ZvclZhcmlhYmxlPy5fY29tcHV0ZVByb21vdGVkVHlwZShwcm9tb3Rlciwgc2NvcGUpOwoKICAgIC8vIElmIHRoZSB2YXJpYWJsZSB3YXMgbXV0YXRlZCBzb21ld2hlcmUgaW4gdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwKICAgIC8vIHByb21vdGlvbiwgcHJvbW90aW9uIGRvZXMgbm90IG9jY3VyLgogICAgaWYgKF9tdXRhdGVkSW5TY29wZXMgIT0gbnVsbCkgewogICAgICBmb3IgKHZhciBhc3NpZ25tZW50U2NvcGUgaW4gX211dGF0ZWRJblNjb3BlcykgewogICAgICAgIGlmIChhc3NpZ25tZW50U2NvcGUuY29udGFpbnNTY29wZShzY29wZSkpIHsKICAgICAgICAgIHJldHVybiBwcmV2aW91c1Byb21vdGVkVHlwZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBJZiB0aGUgdmFyaWFibGUgd2FzIG11dGF0ZWQgYW55d2hlcmUsIGFuZCBpdCB3YXMgYWNjZXNzZWQgaW5zaWRlIGEKICAgIC8vIGNsb3N1cmUgc29tZXdoZXJlIGluIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIHByb21vdGlvbiwgcHJvbW90aW9uIGRvZXMKICAgIC8vIG5vdCBvY2N1ci4KICAgIGlmIChwcm9tb3Rlci53YXNWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZSh2YXJpYWJsZSkgJiYKICAgICAgICBfYWNjZXNzZWRJbkNsb3N1cmVJblNjb3BlcyAhPSBudWxsKSB7CiAgICAgIGZvciAodmFyIGFjY2Vzc1Njb3BlIGluIF9hY2Nlc3NlZEluQ2xvc3VyZUluU2NvcGVzKSB7CiAgICAgICAgaWYgKGFjY2Vzc1Njb3BlLmNvbnRhaW5zU2NvcGUoc2NvcGUpKSB7CiAgICAgICAgICByZXR1cm4gcHJldmlvdXNQcm9tb3RlZFR5cGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gV2hhdCB3ZSBkbyBub3cgZGVwZW5kcyBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHByZXZpb3VzIHR5cGUgb2YKICAgIC8vIHRoZSB2YXJpYWJsZSBhbmQgdGhlIHR5cGUgd2UgYXJlIGNoZWNraW5nIGFnYWluc3QuCiAgICB2YXIgcHJldmlvdXNUeXBlID0gcHJldmlvdXNQcm9tb3RlZFR5cGUgPz8gdmFyaWFibGUudHlwZTsKICAgIGlmIChwcm9tb3Rlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoY2hlY2tlZFR5cGUsIHByZXZpb3VzVHlwZSkpIHsKICAgICAgLy8gVGhlIHR5cGUgd2UgYXJlIGNoZWNraW5nIGFnYWluc3QgaXMgYSBzdWJ0eXBlIG9mIHRoZSBwcmV2aW91cyB0eXBlIG9mCiAgICAgIC8vIHRoZSB2YXJpYWJsZSwgc28gdGhpcyBpcyBhIHJlZmluZW1lbnQ7IHdlIGNhbiBwcm9tb3RlLgogICAgICByZXR1cm4gY2hlY2tlZFR5cGU7CiAgICB9IGVsc2UgaWYgKHByZXZpb3VzVHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSAmJgogICAgICAgIHByb21vdGVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuaXNTdWJ0eXBlT2YoY2hlY2tlZFR5cGUsIHByZXZpb3VzVHlwZS5ib3VuZCkpIHsKICAgICAgLy8gVGhlIHR5cGUgd2UgYXJlIGNoZWNraW5nIGFnYWluc3QgaXMgYSBzdWJ0eXBlIG9mIHRoZSBib3VuZCBvZiB0aGUKICAgICAgLy8gcHJldmlvdXMgdHlwZSBvZiB0aGUgdmFyaWFibGU7IHdlIGNhbiBwcm9tb3RlIHRoZSBib3VuZC4KICAgICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVyVHlwZShwcmV2aW91c1R5cGUucGFyYW1ldGVyLCBjaGVja2VkVHlwZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGUgdHlwZXMgYXJlbid0IHN1ZmZpY2llbnRseSByZWxhdGVkOyB3ZSBjYW4ndCBwcm9tb3RlLgogICAgICByZXR1cm4gcHJldmlvdXNQcm9tb3RlZFR5cGU7CiAgICB9CiAgfQp9CgovLy8gW1R5cGVQcm9tb3Rpb25TY29wZV0gcmVwcmVzZW50aW5nIHRoZSBSSFMgb2YgYSBsb2dpY2FsIGV4cHJlc3Npb24uCmNsYXNzIF9Mb2dpY2FsU2NvcGUgZXh0ZW5kcyBUeXBlUHJvbW90aW9uU2NvcGUgewogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbG9naWNhbCBvcGVyYXRpb24gaXMgYW4gYCYmYCBvciBhbiBgfHxgLgogIGZpbmFsIGJvb2wgaXNBbmQ7CgogIC8vLyBUaGUgZmFjdCBzdGF0ZSBpbiBlZmZlY3QgaWYgdGhlIGxvZ2ljYWwgZXhwcmVzc2lvbiBnZXRzIHNob3J0LWN1dC4KICBmaW5hbCBUeXBlUHJvbW90aW9uRmFjdCBzaG9ydGN1dEZhY3RzOwoKICBfTG9naWNhbFNjb3BlKFR5cGVQcm9tb3Rpb25TY29wZSBlbmNsb3NpbmcsIHRoaXMuaXNBbmQsIHRoaXMuc2hvcnRjdXRGYWN0cykKICAgICAgOiBzdXBlcihlbmNsb3NpbmcpOwp9CgovLy8gSW5zdGFuY2Ugb2YgW1R5cGVQ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cmVzc2lvbiwKICAgICAgICBNYXBFbnRyeSwKICAgICAgICBOdWxsTGl0ZXJhbCwKICAgICAgICBTdGF0ZW1lbnQsCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBzZXRQYXJlbnRzLAogICAgICAgIHRyYW5zZm9ybUxpc3QsCiAgICAgICAgdmlzaXRMaXN0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC92aXNpdG9yLmRhcnQnCiAgICBzaG93CiAgICAgICAgRXhwcmVzc2lvblZpc2l0b3IsCiAgICAgICAgRXhwcmVzc2lvblZpc2l0b3IxLAogICAgICAgIFRyYW5zZm9ybWVyLAogICAgICAgIFRyZWVWaXNpdG9yLAogICAgICAgIFZpc2l0b3I7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93IHRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdCwgdGVtcGxhdGVFeHBlY3RlZEJ1dEdvdDsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBnZXRGaWxlVXJpLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvaW5mZXJlbmNlX2hlbHBlci5kYXJ0JyBzaG93IEluZmVyZW5jZUhlbHBlcjsKCi8vLyBNaXhpbiBmb3Igc3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMuCi8vLwovLy8gU3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMgYXJlIG5vdCB0cnVseSBleHByZXNzaW9ucyBhbmQgdGhleSBjYW5ub3QKLy8vIGFwcGVhciBpbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBjb250ZXh0cyBpbiB0aGUgS2VybmVsIHByb2dyYW0uICBUaGV5IGNhbgovLy8gb25seSBhcHBlYXIgYXMgZWxlbWVudHMgaW4gbGlzdCBvciBzZXQgbGl0ZXJhbHMuICBUaGV5IGFyZSB0cmFuc2xhdGVkIGludG8KLy8vIGEgbG93ZXItbGV2ZWwgcmVwcmVzZW50YXRpb24gYW5kIG5ldmVyIHNlcmlhbGl6ZWQgdG8gLmRpbGwgZmlsZXMuCm1peGluIENvbnRyb2xGbG93RWxlbWVudCBvbiBFeHByZXNzaW9uIHsKICAvLy8gU3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMgYXJlIG5vdCBleHByZXNzaW9ucyBhbmQgZG8gbm90IGhhdmUgYQogIC8vLyBzdGF0aWMgdHlwZS4KICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJnZXRTdGF0aWNUeXBlIiwgZmlsZU9mZnNldCwgZ2V0RmlsZVVyaSh0aGlzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3I8T2JqZWN0PiB2KSA9PiB2LmRlZmF1bHRFeHByZXNzaW9uKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMTxPYmplY3QsIE9iamVjdD4gdiwgYXJnKSA9PgogICAgICB2LmRlZmF1bHRFeHByZXNzaW9uKHRoaXMsIGFyZyk7Cn0KCi8vLyBBIHNwcmVhZCBlbGVtZW50IGluIGEgbGlzdCBvciBzZXQgbGl0ZXJhbC4KY2xhc3MgU3ByZWFkRWxlbWVudCBleHRlbmRzIEV4cHJlc3Npb24gd2l0aCBDb250cm9sRmxvd0VsZW1lbnQgewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICBib29sIGlzTnVsbEF3YXJlOwoKICAvLy8gVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIG9mIHRoZSBjb2xsZWN0aW9uIHRoYXQgW2V4cHJlc3Npb25dIGV2YWx1YXRlcyB0by4KICAvLy8KICAvLy8gSXQgaXMgc2V0IGR1cmluZyB0eXBlIGluZmVyZW5jZSBhbmQgaXMgdXNlZCB0byBhZGQgYXBwcm9wcmlhdGUgdHlwZSBjYXN0cwogIC8vLyBkdXJpbmcgdGhlIGRlc3VnYXJpbmcuCiAgRGFydFR5cGUgZWxlbWVudFR5cGU7CgogIFNwcmVhZEVsZW1lbnQodGhpcy5leHByZXNzaW9uLCB0aGlzLmlzTnVsbEF3YXJlKSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQW4gJ2lmJyBlbGVtZW50IGluIGEgbGlzdCBvciBzZXQgbGl0ZXJhbC4KY2xhc3MgSWZFbGVtZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB3aXRoIENvbnRyb2xGbG93RWxlbWVudCB7CiAgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgRXhwcmVzc2lvbiB0aGVuOwogIEV4cHJlc3Npb24gb3RoZXJ3aXNlOwoKICBJZkVsZW1lbnQodGhpcy5jb25kaXRpb24sIHRoaXMudGhlbiwgdGhpcy5vdGhlcndpc2UpIHsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHRoZW4/LnBhcmVudCA9IHRoaXM7CiAgICBvdGhlcndpc2U/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIHRoZW4/LmFjY2VwdCh2KTsKICAgIG90aGVyd2lzZT8uYWNjZXB0KHYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmICh0aGVuICE9IG51bGwpIHsKICAgICAgdGhlbiA9IHRoZW4uYWNjZXB0KHYpOwogICAgICB0aGVuPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKG90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgIG90aGVyd2lzZSA9IG90aGVyd2lzZS5hY2NlcHQodik7CiAgICAgIG90aGVyd2lzZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBICdmb3InIGVsZW1lbnQgaW4gYSBsaXN0IG9yIHNldCBsaXRlcmFsLgpjbGFzcyBGb3JFbGVtZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB3aXRoIENvbnRyb2xGbG93RWxlbWVudCB7CiAgZmluYWwgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXM7IC8vIE1heSBiZSBlbXB0eSwgYnV0IG5vdCBudWxsLgogIEV4cHJlc3Npb24gY29uZGl0aW9uOyAvLyBNYXkgYmUgbnVsbC4KICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXM7IC8vIE1heSBiZSBlbXB0eSwgYnV0IG5vdCBudWxsLgogIEV4cHJlc3Npb24gYm9keTsKCiAgRm9yRWxlbWVudCh0aGlzLnZhcmlhYmxlcywgdGhpcy5jb25kaXRpb24sIHRoaXMudXBkYXRlcywgdGhpcy5ib2R5KSB7CiAgICBzZXRQYXJlbnRzKHZhcmlhYmxlcywgdGhpcyk7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICBzZXRQYXJlbnRzKHVwZGF0ZXMsIHRoaXMpOwogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxPYmplY3Q+IHYpIHsKICAgIHZpc2l0TGlzdCh2YXJpYWJsZXMsIHYpOwogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QodXBkYXRlcywgdik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICBAb3ZlcnJpZGUKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KHZhcmlhYmxlcywgdiwgdGhpcyk7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdHJhbnNmb3JtTGlzdCh1cGRhdGVzLCB2LCB0aGlzKTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEEgJ2Zvci1pbicgZWxlbWVudCBpbiBhIGxpc3Qgb3Igc2V0IGxpdGVyYWwuCmNsYXNzIEZvckluRWxlbWVudCBleHRlbmRzIEV4cHJlc3Npb24gd2l0aCBDb250cm9sRmxvd0VsZW1lbnQgewogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7IC8vIEhhcyBubyBpbml0aWFsaXplci4KICBFeHByZXNzaW9uIGl0ZXJhYmxlOwogIFN0YXRlbWVudCBwcm9sb2d1ZTsgLy8gTWF5IGJlIG51bGwuCiAgRXhwcmVzc2lvbiBib2R5OwogIEV4cHJlc3Npb24gcHJvYmxlbTsgLy8gTWF5IGJlIG51bGwuCiAgYm9vbCBpc0FzeW5jOyAvLyBUcnVlIGlmIHRoaXMgaXMgYW4gJ2F3YWl0IGZvcicgbG9vcC4KCiAgRm9ySW5FbGVtZW50KAogICAgICB0aGlzLnZhcmlhYmxlLCB0aGlzLml0ZXJhYmxlLCB0aGlzLnByb2xvZ3VlLCB0aGlzLmJvZHksIHRoaXMucHJvYmxlbSwKICAgICAge3RoaXMuaXNBc3luYzogZmFsc2V9KSB7CiAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIGl0ZXJhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgcHJvbG9ndWU/LnBhcmVudCA9IHRoaXM7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgcHJvYmxlbT8ucGFyZW50ID0gdGhpczsKICB9CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxPYmplY3Q+IHYpIHsKICAgIHZhcmlhYmxlPy5hY2NlcHQodik7CiAgICBpdGVyYWJsZT8uYWNjZXB0KHYpOwogICAgcHJvbG9ndWU/LmFjY2VwdCh2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICAgIHByb2JsZW0/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUuYWNjZXB0KHYpOwogICAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChpdGVyYWJsZSAhPSBudWxsKSB7CiAgICAgIGl0ZXJhYmxlID0gaXRlcmFibGUuYWNjZXB0KHYpOwogICAgICBpdGVyYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChwcm9sb2d1ZSAhPSBudWxsKSB7CiAgICAgIHByb2xvZ3VlID0gcHJvbG9ndWUuYWNjZXB0KHYpOwogICAgICBwcm9sb2d1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHByb2JsZW0gIT0gbnVsbCkgewogICAgICBwcm9ibGVtID0gcHJvYmxlbS5hY2NlcHQodik7CiAgICAgIHByb2JsZW0/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgptaXhpbiBDb250cm9sRmxvd01hcEVudHJ5IGltcGxlbWVudHMgTWFwRW50cnkgewogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZ2V0IGtleSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCdDb250cm9sRmxvd01hcEVudHJ5LmtleSBnZXR0ZXInKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IGtleShFeHByZXNzaW9uIGV4cHIpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoJ0NvbnRyb2xGbG93TWFwRW50cnkua2V5IHNldHRlcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBnZXQgdmFsdWUgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcignQ29udHJvbEZsb3dNYXBFbnRyeS52YWx1ZSBnZXR0ZXInKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IHZhbHVlKEV4cHJlc3Npb24gZXhwcikgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcignQ29udHJvbEZsb3dNYXBFbnRyeS52YWx1ZSBzZXR0ZXInKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChUcmVlVmlzaXRvcjxPYmplY3Q+IHYpID0+IHYuZGVmYXVsdFRyZWVOb2RlKHRoaXMpOwp9CgovLy8gQSBzcHJlYWQgZWxlbWVudCBpbiBhIG1hcCBsaXRlcmFsLgpjbGFzcyBTcHJlYWRNYXBFbnRyeSBleHRlbmRzIFRyZWVOb2RlIHdpdGggQ29udHJvbEZsb3dNYXBFbnRyeSB7CiAgRXhwcmVzc2lvbiBleHByZXNzaW9uOwogIGJvb2wgaXNOdWxsQXdhcmU7CgogIC8vLyBUaGUgdHlwZSBvZiB0aGUgbWFwIGVudHJpZXMgb2YgdGhlIG1hcCB0aGF0IFtleHByZXNzaW9uXSBldmFsdWF0ZXMgdG8uCiAgLy8vCiAgLy8vIEl0IGlzIHNldCBkdXJpbmcgdHlwZSBpbmZlcmVuY2UgYW5kIGlzIHVzZWQgdG8gYWRkIGFwcHJvcHJpYXRlIHR5cGUgY2FzdHMKICAvLy8gZHVyaW5nIHRoZSBkZXN1Z2FyaW5nLgogIERhcnRUeXBlIGVudHJ5VHlwZTsKCiAgU3ByZWFkTWFwRW50cnkodGhpcy5leHByZXNzaW9uLCB0aGlzLmlzTnVsbEF3YXJlKSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQW4gJ2lmJyBlbGVtZW50IGluIGEgbWFwIGxpdGVyYWwuCmNsYXNzIElmTWFwRW50cnkgZXh0ZW5kcyBUcmVlTm9kZSB3aXRoIENvbnRyb2xGbG93TWFwRW50cnkgewogIEV4cHJlc3Npb24gY29uZGl0aW9uOwogIE1hcEVudHJ5IHRoZW47CiAgTWFwRW50cnkgb3RoZXJ3aXNlOwoKICBJZk1hcEVudHJ5KHRoaXMuY29uZGl0aW9uLCB0aGlzLnRoZW4sIHRoaXMub3RoZXJ3aXNlKSB7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB0aGVuPy5wYXJlbnQgPSB0aGlzOwogICAgb3RoZXJ3aXNlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgICB0aGVuPy5hY2NlcHQodik7CiAgICBvdGhlcndpc2U/LmFjY2VwdCh2KTsKICB9CgogIEBvdmVycmlkZQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYWNjZXB0KHYpOwogICAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAodGhlbiAhPSBudWxsKSB7CiAgICAgIHRoZW4gPSB0aGVuLmFjY2VwdCh2KTsKICAgICAgdGhlbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChvdGhlcndpc2UgIT0gbnVsbCkgewogICAgICBvdGhlcndpc2UgPSBvdGhlcndpc2UuYWNjZXB0KHYpOwogICAgICBvdGhlcndpc2U/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQSAnZm9yJyBlbGVtZW50IGluIGEgbWFwIGxpdGVyYWwuCmNsYXNzIEZvck1hcEVudHJ5IGV4dGVuZHMgVHJlZU5vZGUgd2l0aCBDb250cm9sRmxvd01hcEVudHJ5IHsKICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlczsgLy8gTWF5IGJlIGVtcHR5LCBidXQgbm90IG51bGwuCiAgRXhwcmVzc2lvbiBjb25kaXRpb247IC8vIE1heSBiZSBudWxsLgogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlczsgLy8gTWF5IGJlIGVtcHR5LCBidXQgbm90IG51bGwuCiAgTWFwRW50cnkgYm9keTsKCiAgRm9yTWFwRW50cnkodGhpcy52YXJpYWJsZXMsIHRoaXMuY29uZGl0aW9uLCB0aGlzLnVwZGF0ZXMsIHRoaXMuYm9keSkgewogICAgc2V0UGFyZW50cyh2YXJpYWJsZXMsIHRoaXMpOwogICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgc2V0UGFyZW50cyh1cGRhdGVzLCB0aGlzKTsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB2aXNpdExpc3QodmFyaWFibGVzLCB2KTsKICAgIGNvbmRpdGlvbj8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KHVwZGF0ZXMsIHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdCh2YXJpYWJsZXMsIHYsIHRoaXMpOwogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIHRyYW5zZm9ybUxpc3QodXBkYXRlcywgdiwgdGhpcyk7CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBICdmb3ItaW4nIGVsZW1lbnQgaW4gYSBtYXAgbGl0ZXJhbC4KY2xhc3MgRm9ySW5NYXBFbnRyeSBleHRlbmRzIFRyZWVOb2RlIHdpdGggQ29udHJvbEZsb3dNYXBFbnRyeSB7CiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsgLy8gSGFzIG5vIGluaXRpYWxpemVyLgogIEV4cHJlc3Npb24gaXRlcmFibGU7CiAgU3RhdGVtZW50IHByb2xvZ3VlOyAvLyBNYXkgYmUgbnVsbC4KICBNYXBFbnRyeSBib2R5OwogIEV4cHJlc3Npb24gcHJvYmxlbTsgLy8gTWF5IGJlIG51bGwuCiAgYm9vbCBpc0FzeW5jOyAvLyBUcnVlIGlmIHRoaXMgaXMgYW4gJ2F3YWl0IGZvcicgbG9vcC4KCiAgRm9ySW5NYXBFbnRyeSgKICAgICAgdGhpcy52YXJpYWJsZSwgdGhpcy5pdGVyYWJsZSwgdGhpcy5wcm9sb2d1ZSwgdGhpcy5ib2R5LCB0aGlzLnByb2JsZW0sCiAgICAgIHt0aGlzLmlzQXN5bmM6IGZhbHNlfSkgewogICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgICBpdGVyYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIHByb2xvZ3VlPy5wYXJlbnQgPSB0aGlzOwogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIHByb2JsZW0/LnBhcmVudCA9IHRoaXM7CiAgfQoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB2YXJpYWJsZT8uYWNjZXB0KHYpOwogICAgaXRlcmFibGU/LmFjY2VwdCh2KTsKICAgIHByb2xvZ3VlPy5hY2NlcHQodik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgICBwcm9ibGVtPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFyaWFibGUgIT0gbnVsbCkgewogICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlLmFjY2VwdCh2KTsKICAgICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoaXRlcmFibGUgIT0gbnVsbCkgewogICAgICBpdGVyYWJsZSA9IGl0ZXJhYmxlLmFjY2VwdCh2KTsKICAgICAgaXRlcmFibGU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAocHJvbG9ndWUgIT0gbnVsbCkgewogICAgICBwcm9sb2d1ZSA9IHByb2xvZ3VlLmFjY2VwdCh2KTsKICAgICAgcHJvbG9ndWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChwcm9ibGVtICE9IG51bGwpIHsKICAgICAgcHJvYmxlbSA9IHByb2JsZW0uYWNjZXB0KHYpOwogICAgICBwcm9ibGVtPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKRXhwcmVzc2lvbiBjb252ZXJ0VG9FbGVtZW50KE1hcEVudHJ5IGVudHJ5LCBJbmZlcmVuY2VIZWxwZXIgaGVscGVyKSB7CiAgaWYgKGVudHJ5IGlzIFNwcmVhZE1hcEVudHJ5KSB7CiAgICByZXR1cm4gbmV3IFNwcmVhZEVsZW1lbnQoZW50cnkuZXhwcmVzc2lvbiwgZW50cnkuaXNOdWxsQXdhcmUpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVudHJ5LmV4cHJlc3Npb24uZmlsZU9mZnNldDsKICB9CiAgaWYgKGVudHJ5IGlzIElmTWFwRW50cnkpIHsKICAgIHJldHVybiBuZXcgSWZFbGVtZW50KAogICAgICAgIGVudHJ5LmNvbmRpdGlvbiwKICAgICAgICBjb252ZXJ0VG9FbGVtZW50KGVudHJ5LnRoZW4sIGhlbHBlciksCiAgICAgICAgZW50cnkub3RoZXJ3aXNlID09IG51bGwKICAgICAgICAgICAgPyBudWxsCiAgICAgICAgICAgIDogY29udmVydFRvRWxlbWVudChlbnRyeS5vdGhlcndpc2UsIGhlbHBlcikpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVudHJ5LmZpbGVPZmZzZXQ7CiAgfQogIGlmIChlbnRyeSBpcyBGb3JNYXBFbnRyeSkgewogICAgcmV0dXJuIG5ldyBGb3JFbGVtZW50KGVudHJ5LnZhcmlhYmxlcywgZW50cnkuY29uZGl0aW9uLCBlbnRyeS51cGRhdGVzLAogICAgICAgIGNvbnZlcnRUb0VsZW1lbnQoZW50cnkuYm9keSwgaGVscGVyKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldDsKICB9CiAgaWYgKGVudHJ5IGlzIEZvckluTWFwRW50cnkpIHsKICAgIHJldHVybiBuZXcgRm9ySW5FbGVtZW50KGVudHJ5LnZhcmlhYmxlLCBlbnRyeS5pdGVyYWJsZSwgZW50cnkucHJvbG9ndWUsCiAgICAgICAgY29udmVydFRvRWxlbWVudChlbnRyeS5ib2R5LCBoZWxwZXIpLCBlbnRyeS5wcm9ibGVtLAogICAgICAgIGlzQXN5bmM6IGVudHJ5LmlzQXN5bmMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVudHJ5LmZpbGVPZmZzZXQ7CiAgfQogIHJldHVybiBoZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgIHRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnLCcpLAogICAgZW50cnkuZmlsZU9mZnNldCwKICAgIDEsCiAgKSk7Cn0KCmJvb2wgaXNDb252ZXJ0aWJsZVRvTWFwRW50cnkoRXhwcmVzc2lvbiBlbGVtZW50KSB7CiAgaWYgKGVsZW1lbnQgaXMgU3ByZWFkRWxlbWVudCkgcmV0dXJuIHRydWU7CiAgaWYgKGVsZW1lbnQgaXMgSWZFbGVtZW50KSB7CiAgICByZXR1cm4gaXNDb252ZXJ0aWJsZVRvTWFwRW50cnkoZWxlbWVudC50aGVuKSAmJgogICAgICAgIChlbGVtZW50Lm90aGVyd2lzZSA9PSBudWxsIHx8CiAgICAgICAgICAgIGlzQ29udmVydGlibGVUb01hcEVudHJ5KGVsZW1lbnQub3RoZXJ3aXNlKSk7CiAgfQogIGlmIChlbGVtZW50IGlzIEZvckVsZW1lbnQpIHsKICAgIHJldHVybiBpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeShlbGVtZW50LmJvZHkpOwogIH0KICBpZiAoZWxlbWVudCBpcyBGb3JJbkVsZW1lbnQpIHsKICAgIHJldHVybiBpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeShlbGVtZW50LmJvZHkpOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCk1hcEVudHJ5IGNvbnZlcnRUb01hcEVudHJ5KEV4cHJlc3Npb24gZWxlbWVudCwgSW5mZXJlbmNlSGVscGVyIGhlbHBlcikgewogIGlmIChlbGVtZW50IGlzIFNwcmVhZEVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcgU3ByZWFkTWFwRW50cnkoZWxlbWVudC5leHByZXNzaW9uLCBlbGVtZW50LmlzTnVsbEF3YXJlKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbGVtZW50LmV4cHJlc3Npb24uZmlsZU9mZnNldDsKICB9CiAgaWYgKGVsZW1lbnQgaXMgSWZFbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IElmTWFwRW50cnkoCiAgICAgICAgZWxlbWVudC5jb25kaXRpb24sCiAgICAgICAgY29udmVydFRvTWFwRW50cnkoZWxlbWVudC50aGVuLCBoZWxwZXIpLAogICAgICAgIGVsZW1lbnQub3RoZXJ3aXNlID09IG51bGwKICAgICAgICAgICAgPyBudWxsCiAgICAgICAgICAgIDogY29udmVydFRvTWFwRW50cnkoZWxlbWVudC5vdGhlcndpc2UsIGhlbHBlcikpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVsZW1lbnQuZmlsZU9mZnNldDsKICB9CiAgaWYgKGVsZW1lbnQgaXMgRm9yRWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBGb3JNYXBFbnRyeShlbGVtZW50LnZhcmlhYmxlcywgZWxlbWVudC5jb25kaXRpb24sCiAgICAgICAgZWxlbWVudC51cGRhdGVzLCBjb252ZXJ0VG9NYXBFbnRyeShlbGVtZW50LmJvZHksIGhlbHBlcikpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVsZW1lbnQuZmlsZU9mZnNldDsKICB9CiAgaWYgKGVsZW1lbnQgaXMgRm9ySW5FbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IEZvckluTWFwRW50cnkoCiAgICAgICAgZWxlbWVudC52YXJpYWJsZSwKICAgICAgICBlbGVtZW50Lml0ZXJhYmxlLAogICAgICAgIGVsZW1lbnQucHJvbG9ndWUsCiAgICAgICAgY29udmVydFRvTWFwRW50cnkoZWxlbWVudC5ib2R5LCBoZWxwZXIpLAogICAgICAgIGVsZW1lbnQucHJvYmxlbSwKICAgICAgICBpc0FzeW5jOiBlbGVtZW50LmlzQXN5bmMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVsZW1lbnQuZmlsZU9mZnNldDsKICB9CiAgcmV0dXJuIG5ldyBNYXBFbnRyeSgKICAgICAgaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGhlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgdGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJzonKSwKICAgICAgICBlbGVtZW50LmZpbGVPZmZzZXQsCiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHdoYXQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgZXhwcmVzc2lvbj8KICAgICAgICAxLAogICAgICApKSwKICAgICAgbmV3IE51bGxMaXRlcmFsKCkpOwp9CoHeAE5OPBsBIgEhCRIUEhUTEh0UFxMBRAElCRscFRURARo+ATgBRwEwBE9NT0YpTRMMMkcEAQxEAQw4JgIBL0EZFAFRBlAdGAE1HwQBDCUbBAEMJR4pIQYEAgEuPRgTGAE5HhkeBAEMJRoVGgQBDCUdJyAGGB0bBh0nIAYEAgEuPkwoQRMBSCEeHxkEAQwlHRobFQQBDCUnHScgBiUYHRsGBAIBMUA3FyYTJjgBEEwfHR0dGRwEASUZGRkVGAQBJRwlHwYcJR8GHCUfBhgdGwYbIx4GBAIBMAwXPgQBDCI+BAEMGUAEAQwkQAQBDDwCASdBGRQBTQZQHRYBNh8EAQwlGwQBDCUeKSEGBAIBJj0YERYBOh4ZHgQBDCUaFRoEAQwlHScgBhgdGwYdJyAGBAIBJj5MKEERAUkhHh8ZBAEMJR0aGxUEAQwlJx0nIAYlGB0bBgQCASlANxcmESY4ARFMHx0dHRkcBAElGRkZFRgEASUcJR8GHCUfBhwlHwYYHRsGGyMeBgQCAUYhQjIEHRoZLiATOScEHksuJwQgTD0gJwRALxYHBgIBMy0eNCY5BB8yBCEyBBACAUkiRzQEHhsbMSITPCkEH0FCKQQhHhoaGjEZIikEFz04HEELChoCATNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2NvbGxlY3Rpb25zLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9jb25zdG5lc3MuZGFydIEyLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29uc3RuZXNzOwoKZW51bSBDb25zdG5lc3MgewogIGV4cGxpY2l0Q29uc3QsCiAgZXhwbGljaXROZXcsCiAgaW1wbGljaXQsCn0KDQBOTjwBGQEREQ8MAgExcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jb25zdG5lc3MuZGFydEVzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yLmRhcnTAAZnULy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBBIGxpYnJhcnkgdG8gaGVscCBnZW5lcmF0ZSBleHByZXNzaW9uLgpsaWJyYXJ5IGZhc3RhLmV4cHJlc3Npb25fZ2VuZXJhdG9yOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBGaWVsZCwKICAgICAgICBJbnZhbGlkRXhwcmVzc2lvbiwKICAgICAgICBMZXQsCiAgICAgICAgTm9kZSwKICAgICAgICBQcm9wZXJ0eUdldCwKICAgICAgICBQcm9wZXJ0eVNldCwKICAgICAgICBTdGF0aWNTZXQsCiAgICAgICAgU3VwZXJNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIFN1cGVyUHJvcGVydHlTZXQsCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBWYXJpYWJsZUdldCwKICAgICAgICBWYXJpYWJsZVNldDsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9jb25zdGFudF9jb250ZXh0LmRhcnQnIHNob3cgQ29uc3RhbnRDb250ZXh0OwoKaW1wb3J0ICcuLi9idWlsZGVyL2J1aWxkZXIuZGFydCcgc2hvdyBQcmVmaXhCdWlsZGVyLCBUeXBlRGVjbGFyYXRpb25CdWlsZGVyOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgVGVtcGxhdGUsCiAgICAgICAgbWVzc2FnZUNhbm5vdEFzc2lnblRvU3VwZXIsCiAgICAgICAgbWVzc2FnZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb24sCiAgICAgICAgbWVzc2FnZUNhbnRVc2VQcmVmaXhBc0V4cHJlc3Npb24sCiAgICAgICAgbWVzc2FnZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlLAogICAgICAgIG1lc3NhZ2VJbGxlZ2FsQXNzaWdubWVudFRvTm9uQXNzaWduYWJsZSwKICAgICAgICBtZXNzYWdlSW52YWxpZEluaXRpYWxpemVyLAogICAgICAgIG1lc3NhZ2VJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3MsCiAgICAgICAgbWVzc2FnZUxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cywKICAgICAgICBtZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbiwKICAgICAgICBtZXNzYWdlTm90QW5MdmFsdWUsCiAgICAgICAgbWVzc2FnZVN1cGVyQXNFeHByZXNzaW9uLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCwKICAgICAgICB0ZW1wbGF0ZUNvbnN0cnVjdG9yTm90Rm91bmQsCiAgICAgICAgdGVtcGxhdGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uLAogICAgICAgIHRlbXBsYXRlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cywKICAgICAgICB0ZW1wbGF0ZU5vdENvbnN0YW50RXhwcmVzc2lvbiwKICAgICAgICB0ZW1wbGF0ZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uLAogICAgICAgIHRlbXBsYXRlTm90QVR5cGUsCiAgICAgICAgdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvciwKICAgICAgICB0ZW1wbGF0ZVRoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyLAogICAgICAgIHRlbXBsYXRlVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb247CgppbXBvcnQgJy4uL25hbWVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgYW1wZXJzYW5kTmFtZSwKICAgICAgICBiYXJOYW1lLAogICAgICAgIGNhbGxOYW1lLAogICAgICAgIGNhcmV0TmFtZSwKICAgICAgICBkaXZpc2lvbk5hbWUsCiAgICAgICAgZXF1YWxzTmFtZSwKICAgICAgICBpbmRleEdldE5hbWUsCiAgICAgICAgaW5kZXhTZXROYW1lLAogICAgICAgIGxlZnRTaGlmdE5hbWUsCiAgICAgICAgbGVuZ3RoTmFtZSwKICAgICAgICBtaW51c05hbWUsCiAgICAgICAgbXVsdGlwbHlOYW1lLAogICAgICAgIG11c3RhY2hlTmFtZSwKICAgICAgICBwZXJjZW50TmFtZSwKICAgICAgICBwbHVzTmFtZSwKICAgICAgICByaWdodFNoaWZ0TmFtZSwKICAgICAgICB0cmlwbGVTaGlmdE5hbWU7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JyBzaG93IGxlbmd0aEZvclRva2VuLCBsZW5ndGhPZlNwYW4sIG9mZnNldEZvclRva2VuOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZCwgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnOwoKaW1wb3J0ICdib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBub0xvY2F0aW9uOwoKaW1wb3J0ICdjb25zdG5lc3MuZGFydCcgc2hvdyBDb25zdG5lc3M7CgppbXBvcnQgJ2V4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlci5kYXJ0JyBzaG93IEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXI7CgppbXBvcnQgJ2ZvcmVzdC5kYXJ0JzsKCmltcG9ydCAna2VybmVsX2FwaS5kYXJ0JyBzaG93IE5hbWVTeXN0ZW0sIHByaW50Tm9kZU9uLCBwcmludFF1YWxpZmllZE5hbWVPbjsKCmltcG9ydCAna2VybmVsX2FzdF9hcGkuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBJbml0aWFsaXplciwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZSwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBBY2Nlc3NFcnJvckJ1aWxkZXIsCiAgICAgICAgQnVpbGRlciwKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgSW52YWxpZFR5cGVCdWlsZGVyLAogICAgICAgIExvYWRMaWJyYXJ5QnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFVubGlua2VkRGVjbGFyYXRpb24sCiAgICAgICAgVW5yZXNvbHZlZFR5cGU7CgppbXBvcnQgJ2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCwKICAgICAgICBMb2FkTGlicmFyeVRlYXJPZmZKdWRnbWVudCwKICAgICAgICBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQsCiAgICAgICAgTnVsbEF3YXJlUHJvcGVydHlHZXRKdWRnbWVudCwKICAgICAgICBQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudCwKICAgICAgICBTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQsCiAgICAgICAgU3ludGhldGljV3JhcHBlciwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQsCiAgICAgICAgVmFyaWFibGVHZXRKdWRnbWVudDsKCi8vLyBBIGdlbmVyYXRvciByZXByZXNlbnRzIGEgc3ViZXhwcmVzc2lvbiBmb3Igd2hpY2ggd2UgY2FuJ3QgeWV0IGJ1aWxkIGFuCi8vLyBleHByZXNzaW9uIGJlY2F1c2Ugd2UgZG9uJ3QgeWV0IGtub3cgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkLgovLy8KLy8vIE9uY2UgdGhlIGNvbnRleHQgaXMga25vd24sIGEgZ2VuZXJhdG9yIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBhbiBleHByZXNzaW9uCi8vLyBieSBjYWxsaW5nIGEgYGJ1aWxkYCBtZXRob2QuCi8vLwovLy8gRm9yIGV4YW1wbGUsIHdoZW4gYnVpbGRpbmcgYSBrZXJuZWwgcmVwcmVzZW50YXRpb24gZm9yIGBhW3hdID0gYmAsIGFmdGVyCi8vLyBwYXJzaW5nIGBhW3hdYCBidXQgYmVmb3JlIHBhcnNpbmcgYD0gYmAsIHdlIGRvbid0IHlldCBrbm93IHdoZXRoZXIgdG8KLy8vIGdlbmVyYXRlIGFuIGludm9jYXRpb24gb2YgYG9wZXJhdG9yW11gIG9yIGBvcGVyYXRvcltdPWAsIHNvIHdlIGNyZWF0ZSBhCi8vLyBbR2VuZXJhdG9yXSBvYmplY3QuICBMYXRlciwgYWZ0ZXIgYD0gYmAgaXMgcGFyc2VkLCBbYnVpbGRBc3NpZ25tZW50XSB3aWxsCi8vLyBiZSBjYWxsZWQuCmFic3RyYWN0IGNsYXNzIEdlbmVyYXRvciB7CiAgLy8vIEhlbHBlciB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byBjb250ZXh0dWFsIGluZm9ybWF0aW9uLgogIGZpbmFsIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgX2hlbHBlcjsKCiAgLy8vIEEgdG9rZW4gdGhhdCBkZWZpbmVzIGEgcG9zaXRpb24gc3ViZXhwcmVzc2lvbiB0aGF0IGJlaW5nIGJ1aWx0LgogIGZpbmFsIFRva2VuIHRva2VuOwoKICBHZW5lcmF0b3IodGhpcy5faGVscGVyLCB0aGlzLnRva2VuKTsKCiAgLy8vIEVhc3kgYWNjZXNzIHRvIHRoZSBbRm9yZXN0XSBmYWN0b3J5IG9iamVjdC4KICBGb3Jlc3QgZ2V0IF9mb3Jlc3QgPT4gX2hlbHBlci5mb3Jlc3Q7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcHJvdmUgdGhlIHNlbWFudGljIHByZWNpc2lvbiBvZiB0aGlzIHByb3BlcnR5IG9yCiAgLy8gcmVtb3ZlIGl0LiBJdCdzIHVuY2xlYXIgaWYgdGhlIHNlbWFudGljcyBpcyBpbmNvbnNpc3RlbnQuIEl0J3MgZm9yIGluc3RhbmNlCiAgLy8gdXNlZCBib3RoIGZvciB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlIGluIFtWYXJpYWJsZVVzZUdlbmVyYXRvcl0gYW5kIGZvcgogIC8vIGBbXWAgaW4gW0luZGV4ZWRBY2Nlc3NHZW5lcmF0b3JdLCBhbmQgd2hpbGUgdGhlIGZvcm1lciB0ZXh0IG9jY3VycyBpbiB0aGUKICAvLyB1bmRlcmx5aW5nIHNvdXJjZSBjb2RlLCB0aGUgbGF0dGVyIGRvZXNuJ3QuCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZDsKCiAgLy8vIEludGVybmFsIG5hbWUgdXNlZCBmb3IgZGVidWdnaW5nLgogIFN0cmluZyBnZXQgX2RlYnVnTmFtZTsKCiAgLy8vIFRoZSBzb3VyY2UgdXJpIGZvciB1c2UgaW4gZXJyb3IgbWVzc2FnaW5nLgogIFVyaSBnZXQgX3VyaSA9PiBfaGVscGVyLnVyaTsKCiAgLy8vIEJ1aWxkcyBhIFtFeHByZXNzaW9uXSByZXByZXNlbnRpbmcgYSByZWFkIGZyb20gdGhlIGdlbmVyYXRvci4KICAvLy8KICAvLy8gVGhlIHJlYWQgb2YgdGhpcyBzdWJleHByZXNzaW9uIGRvZXMgX25vdF8gbmVlZCB0byBzdXBwb3J0IGEgc2ltdWx0YW5lb3VzCiAgLy8vIHdyaXRlIG9mIHRoZSBzYW1lIHN1YmV4cHJlc3Npb24uCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gX2ZpbmlzaChfbWFrZVNpbXBsZVJlYWQoKSwgbnVsbCk7CiAgfQoKICAvLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZm9yIFtidWlsZFNpbXBsZVJlYWRdLgogIC8vLwogIC8vLyBUaGUgcmVhZCBvZiB0aGUgdGhpcyBzdWJleHByZXNzaW9uIGRvZXMgX25vdF8gbmVlZCB0byBzdXBwb3J0IGEKICAvLy8gc2ltdWx0YW5lb3VzIHdyaXRlIG9mIHRoZSBzYW1lIHN1YmV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIFRoaXMgaXMgaW4gY29udHJhc3QgdG8gW19tYWtlUmVhZF0gd2hpY2ggaXMgdXNlZCBmb3IgaW5zdGFuY2UgaW4gY29tcG91bmQKICAvLy8gYXNzaWdubWVudHMgbGlrZSBgYS5iICs9IGNgIHdoZXJlIGJvdGggYSByZWFkIGFuZCBhIHdyaXRlIG9mIHRoZQogIC8vLyBzdWJleHByZXNzaW9uIGBhLmJgIG9jY3Vycy4KICAvLy8KICAvLy8gU3ViY2xhc3NlcyB0aGF0IGNhbiBiZW5lZml0IGZyb20gdGhpcyBkaXN0aW5jdGlvbiBzaG91bGQgb3ZlcnJpZGUgdGhpcwogIC8vLyBtZXRob2QuCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSA9PiBfbWFrZVJlYWQobnVsbCk7CgogIC8vLyBCdWlsZHMgYSBbRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIGFuIGFzc2lnbm1lbnQgd2l0aCB0aGUgZ2VuZXJhdG9yIG9uCiAgLy8vIHRoZSBMSFMgYW5kIFt2YWx1ZV0gb24gdGhlIFJIUy4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRoZSBhc3NpZ25lZCB2YWx1ZSwgdW5sZXNzCiAgLy8vIFt2b2lkQ29udGV4dF0gaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgZXZhbHVhdGUgdG8gYW55dGhpbmcuCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgdmFyIGNvbXBsZXhBc3NpZ25tZW50ID0gc3RhcnRDb21wbGV4QXNzaWdubWVudCh2YWx1ZSk7CiAgICByZXR1cm4gX2ZpbmlzaChfbWFrZVNpbXBsZVdyaXRlKHZhbHVlLCB2b2lkQ29udGV4dCwgY29tcGxleEFzc2lnbm1lbnQpLAogICAgICAgIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIC8vLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmb3IgW2J1aWxkQXNzaWdubWVudF0uCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHJldHVybiBfbWFrZVdyaXRlKHZhbHVlLCB2b2lkQ29udGV4dCwgY29tcGxleEFzc2lnbm1lbnQpOwogIH0KCiAgLy8vIFJldHVybnMgYSBbRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIGEgbnVsbC1hd2FyZSBhc3NpZ25tZW50IChgPz89YCkgd2l0aAogIC8vLyB0aGUgZ2VuZXJhdG9yIG9uIHRoZSBMSFMgYW5kIFt2YWx1ZV0gb24gdGhlIFJIUy4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRoZSBhc3NpZ25lZCB2YWx1ZSwgdW5sZXNzCiAgLy8vIFt2b2lkQ29udGV4dF0gaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgZXZhbHVhdGUgdG8gYW55dGhpbmcuCiAgLy8vCiAgLy8vIFt0eXBlXSBpcyB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIFJIUy4KICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgdmFyIGNvbXBsZXhBc3NpZ25tZW50ID0gc3RhcnRDb21wbGV4QXNzaWdubWVudCh2YWx1ZSk7CiAgICBpZiAodm9pZENvbnRleHQpIHsKICAgICAgdmFyIG51bGxBd2FyZUNvbWJpbmVyID0gX2ZvcmVzdC5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgICBidWlsZElzTnVsbChfbWFrZVJlYWQoY29tcGxleEFzc2lnbm1lbnQpLCBvZmZzZXQsIF9oZWxwZXIpLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIF9tYWtlV3JpdGUodmFsdWUsIGZhbHNlLCBjb21wbGV4QXNzaWdubWVudCksCiAgICAgICAgICBudWxsLAogICAgICAgICAgX2ZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNvbXBsZXhBc3NpZ25tZW50Py5udWxsQXdhcmVDb21iaW5lciA9IG51bGxBd2FyZUNvbWJpbmVyOwogICAgICByZXR1cm4gX2ZpbmlzaChudWxsQXdhcmVDb21iaW5lciwgY29tcGxleEFzc2lnbm1lbnQpOwogICAgfQogICAgdmFyIHRtcCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKF9tYWtlUmVhZChjb21wbGV4QXNzaWdubWVudCkpOwogICAgdmFyIG51bGxBd2FyZUNvbWJpbmVyID0gX2ZvcmVzdC5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgYnVpbGRJc051bGwobmV3IFZhcmlhYmxlR2V0KHRtcCksIG9mZnNldCwgX2hlbHBlciksCiAgICAgICAgbnVsbCwKICAgICAgICBfbWFrZVdyaXRlKHZhbHVlLCBmYWxzZSwgY29tcGxleEFzc2lnbm1lbnQpLAogICAgICAgIG51bGwsCiAgICAgICAgbmV3IFZhcmlhYmxlR2V0KHRtcCkpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5udWxsQXdhcmVDb21iaW5lciA9IG51bGxBd2FyZUNvbWJpbmVyOwogICAgcmV0dXJuIF9maW5pc2gobWFrZUxldCh0bXAsIG51bGxBd2FyZUNvbWJpbmVyKSwgY29tcGxleEFzc2lnbm1lbnQpOwogIH0KCiAgLy8vIFJldHVybnMgYSBbRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIGEgY29tcG91bmQgYXNzaWdubWVudCAoZS5nLiBgKz1gKQogIC8vLyB3aXRoIHRoZSBnZW5lcmF0b3Igb24gdGhlIExIUyBhbmQgW3ZhbHVlXSBvbiB0aGUgUkhTLgogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHZhciBjb21wbGV4QXNzaWdubWVudCA9IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQodmFsdWUpOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LmlzUHJlSW5jRGVjID0gaXNQcmVJbmNEZWM7CiAgICBjb21wbGV4QXNzaWdubWVudD8uaXNQb3N0SW5jRGVjID0gaXNQb3N0SW5jRGVjOwogICAgdmFyIGNvbWJpbmVyID0gbWFrZUJpbmFyeShfbWFrZVJlYWQoY29tcGxleEFzc2lnbm1lbnQpLCBiaW5hcnlPcGVyYXRvciwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQsIHZhbHVlLCBfaGVscGVyLAogICAgICAgIG9mZnNldDogb2Zmc2V0KTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5jb21iaW5lciA9IGNvbWJpbmVyOwogICAgcmV0dXJuIF9maW5pc2goX21ha2VXcml0ZShjb21iaW5lciwgdm9pZENvbnRleHQsIGNvbXBsZXhBc3NpZ25tZW50KSwKICAgICAgICBjb21wbGV4QXNzaWdubWVudCk7CiAgfQoKICAvLy8gUmV0dXJucyBhIFtFeHByZXNzaW9uXSByZXByZXNlbnRpbmcgYSBwcmUtaW5jcmVtZW50IG9yIHByZS1kZWNyZW1lbnQgb2YKICAvLy8gdGhlIGdlbmVyYXRvci4KICBFeHByZXNzaW9uIGJ1aWxkUHJlZml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoCiAgICAgICAgYmluYXJ5T3BlcmF0b3IsIF9mb3Jlc3QuY3JlYXRlSW50TGl0ZXJhbCgxLCBudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICBvZmZzZXQ6IG9mZnNldCwKICAgICAgICB2b2lkQ29udGV4dDogdm9pZENvbnRleHQsCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBpbnRlcmZhY2VUYXJnZXQsCiAgICAgICAgaXNQcmVJbmNEZWM6IHRydWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSBbRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIGEgcG9zdC1pbmNyZW1lbnQgb3IgcG9zdC1kZWNyZW1lbnQgb2YKICAvLy8gdGhlIGdlbmVyYXRvci4KICBFeHByZXNzaW9uIGJ1aWxkUG9zdGZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgaWYgKHZvaWRDb250ZXh0KSB7CiAgICAgIHJldHVybiBidWlsZENvbXBvdW5kQXNzaWdubWVudChiaW5hcnlPcGVyYXRvciwKICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlSW50TGl0ZXJhbCgxLCBudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICAgIG9mZnNldDogb2Zmc2V0LAogICAgICAgICAgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0LAogICAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBpbnRlcmZhY2VUYXJnZXQsCiAgICAgICAgICBpc1Bvc3RJbmNEZWM6IHRydWUpOwogICAgfQogICAgdmFyIHJocyA9IF9mb3Jlc3QuY3JlYXRlSW50TGl0ZXJhbCgxLCBudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgIHZhciBjb21wbGV4QXNzaWdubWVudCA9IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQocmhzKTsKICAgIHZhciB2YWx1ZSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKF9tYWtlUmVhZChjb21wbGV4QXNzaWdubWVudCkpOwogICAgdmFsdWVBY2Nlc3MoKSA9PiBuZXcgVmFyaWFibGVHZXQodmFsdWUpOwogICAgdmFyIGNvbWJpbmVyID0gbWFrZUJpbmFyeSgKICAgICAgICB2YWx1ZUFjY2VzcygpLCBiaW5hcnlPcGVyYXRvciwgaW50ZXJmYWNlVGFyZ2V0LCByaHMsIF9oZWxwZXIsCiAgICAgICAgb2Zmc2V0OiBvZmZzZXQpOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LmNvbWJpbmVyID0gY29tYmluZXI7CiAgICBjb21wbGV4QXNzaWdubWVudD8uaXNQb3N0SW5jRGVjID0gdHJ1ZTsKICAgIHZhciBkdW1teSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuZm9yVmFsdWUoCiAgICAgICAgX21ha2VXcml0ZShjb21iaW5lciwgdHJ1ZSwgY29tcGxleEFzc2lnbm1lbnQpLAogICAgICAgIF9oZWxwZXIuZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgcmV0dXJuIF9maW5pc2goCiAgICAgICAgbWFrZUxldCh2YWx1ZSwgbWFrZUxldChkdW1teSwgdmFsdWVBY2Nlc3MoKSkpLCBjb21wbGV4QXNzaWdubWVudCk7CiAgfQoKICAvLy8gUmV0dXJucyBhIFtFeHByZXNzaW9uXSByZXByZXNlbnRpbmcgYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgLy8vCiAgLy8vIEF0IHJ1bnRpbWUsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFJlYWQoKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICBfaGVscGVyLnRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwodG9rZW4pLAogICAgICAgICAgICBfcGxhaW5OYW1lRm9yUmVhZCwKICAgICAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHNFbXB0eShub0xvY2F0aW9uKSwKICAgICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgICBpc0dldHRlcjogdHJ1ZSksCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhIGNvbXBpbGUtdGltZSBlcnJvciB3cmFwcGluZwogIC8vLyBbdmFsdWVdLgogIC8vLwogIC8vLyBBdCBydW50aW1lLCBbdmFsdWVdIHdpbGwgYmUgZXZhbHVhdGVkIGJlZm9yZSB0aHJvd2luZyBhbiBleGNlcHRpb24uCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICBfaGVscGVyLnRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwodG9rZW4pLAogICAgICAgICAgICBfcGxhaW5OYW1lRm9yUmVhZCwKICAgICAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoPEV4cHJlc3Npb24+W3ZhbHVlXSwgbm9Mb2NhdGlvbiksCiAgICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgICAgaXNTZXR0ZXI6IHRydWUpLAogICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBbRXhwcmVzc2lvbl0gdGhlIHJlYWRzIHRoaXMgc3ViZXhwcmVzc2lvbi4KICAvLy8KICAvLy8gVGhlIGNyZWF0ZWQgcmVhZCBleHByZXNzaW9uIG11c3Qgc3VwcG9ydCBhIHNpbXVsdGFuZW91cyB3cml0ZSBvZiB0aGUgc2FtZQogIC8vLyBleHByZXNzaW9uIHdpdGggdmFsaWQgc2VtYW50aWNzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgaW4gYGEuYiArPSBjYCwgYm90aCBhIHJlYWQgYW5kIGEgd3JpdGUgb2YgdGhlIHN1YmV4cHJlc3Npb24KICAvLy8gYGEuYmAgaXMgY3JlYXRlZCwgYnV0IGBhYCBtdXN0IF9ub3RfIGJlIGV2YWx1YXRlZCB0d2ljZS4gRm9yIHRoaXMgcmVhc29uCiAgLy8vIFtQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcl0gY3JlYXRlcyBhIHN5bnRoZXRpYyBsb2NhbCB2YXJpYWJsZSBmb3IgYGFgIGFuZAogIC8vLyB1c2VzIHRoaXMgZm9yIHRoZSBib3RoIHRoZSBbUHJvcGVydHlHZXRdIGFuZCBbUHJvcGVydHlTZXRdIG9mIHByb3BlcnR5CiAgLy8vIGBiYC4KICAvLy8KICAvLy8gSWYgW2NvbXBsZXhBc3NpZ25tZW50XSBpcyBwcm92aWRlZCwgdGhlIGNyZWF0ZWQgZXhwcmVzc2lvbiBpcyByZWdpc3RlcmVkCiAgLy8vIGFzIHRoZSBgcmVhZGAgb2YgdGhlIGNvbXBsZXggYXNzaWdubWVudC4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gY3JlYXRlcyB0aGUgZXhwcmVzc2lvbiB0aHJvdWdoCiAgLy8vIFtfbWFrZUludmFsaWRSZWFkXS4gU3ViY2xhc3NlcyB3aXRoIHZhbGlkIHJlYWQgb3BlcmF0aW9ucyBtdXN0IG92ZXJyaWRlCiAgLy8vIHRoaXMgbWV0aG9kIHdpdGggYSB2YWxpZCBpbXBsZW1lbnRhdGlvbi4KICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBFeHByZXNzaW9uIHJlYWQgPSBfbWFrZUludmFsaWRSZWFkKCk7CiAgICBpZiAoY29tcGxleEFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICByZWFkID0gX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihyZWFkKTsKICAgICAgY29tcGxleEFzc2lnbm1lbnQucmVhZCA9IHJlYWQ7CiAgICB9CiAgICByZXR1cm4gcmVhZDsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtFeHByZXNzaW9uXSB0aGUgd3JpdGUgW3ZhbHVlXSB0byB0aGlzIHN1YmV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIFRoZSBjcmVhdGVkIHJlYWQgZXhwcmVzc2lvbiBtdXN0IHN1cHBvcnQgYSBzaW11bHRhbmVvdXMgcmVhZCBvZiB0aGUgc2FtZQogIC8vLyBleHByZXNzaW9uIHdpdGggdmFsaWQgc2VtYW50aWNzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgaW4gYGEuYiArPSBjYCwgYm90aCBhIHJlYWQgYW5kIGEgd3JpdGUgb2YgdGhlIHN1YmV4cHJlc3Npb24KICAvLy8gYGEuYmAgaXMgY3JlYXRlZCwgYnV0IGBhYCBtdXN0IF9ub3RfIGJlIGV2YWx1YXRlZCB0d2ljZS4gRm9yIHRoaXMgcmVhc29uCiAgLy8vIFtQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcl0gY3JlYXRlcyBhIHN5bnRoZXRpYyBsb2NhbCB2YXJpYWJsZSBmb3IgYGFgIGFuZAogIC8vLyB1c2VzIHRoaXMgZm9yIHRoZSBib3RoIHRoZSBbUHJvcGVydHlHZXRdIGFuZCBbUHJvcGVydHlTZXRdIG9mIHByb3BlcnR5CiAgLy8vIGBiYC4KICAvLy8KICAvLy8gSWYgW2NvbXBsZXhBc3NpZ25tZW50XSBpcyBwcm92aWRlZCwgdGhlIGNyZWF0ZWQgZXhwcmVzc2lvbiBpcyByZWdpc3RlcmVkCiAgLy8vIGFzIHRoZSBgd3JpdGVgIG9mIHRoZSBjb21wbGV4IGFzc2lnbm1lbnQuCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGNyZWF0ZXMgdGhlIGV4cHJlc3Npb24gdGhyb3VnaAogIC8vLyBbX21ha2VJbnZhbGlkV3JpdGVdLiBTdWJjbGFzc2VzIHdpdGggdmFsaWQgd3JpdGUgb3BlcmF0aW9ucyBtdXN0IG92ZXJyaWRlCiAgLy8vIHRoaXMgbWV0aG9kIHdpdGggYSB2YWxpZCBpbXBsZW1lbnRhdGlvbi4KICBFeHByZXNzaW9uIF9tYWtlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgRXhwcmVzc2lvbiB3cml0ZSA9IF9tYWtlSW52YWxpZFdyaXRlKHZhbHVlKTsKICAgIGlmIChjb21wbGV4QXNzaWdubWVudCAhPSBudWxsKSB7CiAgICAgIHdyaXRlID0gX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbih3cml0ZSk7CiAgICAgIGNvbXBsZXhBc3NpZ25tZW50LndyaXRlID0gd3JpdGU7CiAgICB9CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBFeHByZXNzaW9uIF9maW5pc2goCiAgICAgIEV4cHJlc3Npb24gYm9keSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKCFfaGVscGVyLmxlZ2FjeU1vZGUgJiYgY29tcGxleEFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICBjb21wbGV4QXNzaWdubWVudC5kZXN1Z2FyZWQgPSBib2R5OwogICAgICByZXR1cm4gY29tcGxleEFzc2lnbm1lbnQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gYm9keTsKICAgIH0KICB9CgogIC8vLyBDcmVhdGVzIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRyYWNraW5nIHRoZSBkZXN1Z2FyaW5nIG9mIGEgY29tcGxleAogIC8vLyBhc3NpZ25tZW50IGV4cHJlc3Npb24gd2hvc2UgcmlnaHQgaGFuZCBzaWRlIGlzIFtyaHNdLgogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwSWxsZWdhbEFzc2lnbm1lbnQocmhzKTsKCiAgRXhwcmVzc2lvbiBidWlsZEZvckVmZmVjdCgpID0+IGJ1aWxkU2ltcGxlUmVhZCgpOwoKICBJbml0aWFsaXplciBidWlsZEZpZWxkSW5pdGlhbGl6ZXIoTWFwPFN0cmluZywgaW50PiBpbml0aWFsaXplZEZpZWxkcykgewogICAgaW50IG9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkSW52YWxpZEluaXRpYWxpemVyKAogICAgICAgIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oX2hlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VJbnZhbGlkSW5pdGlhbGl6ZXIsIG9mZnNldCwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSksCiAgICAgICAgb2Zmc2V0KTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIGV4cHJlc3Npb24sIGdlbmVyYXRvciBvciBpbml0aWFsaXplciBmb3IgYW4gaW52b2NhdGlvbiBvZiB0aGlzCiAgLy8vIHN1YmV4cHJlc3Npb24gd2l0aCBbYXJndW1lbnRzXSBhdCBbb2Zmc2V0XS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlOgogIC8vLyAqIElmIHRoaXMgaXMgYSBbUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdIGZvciBgYS5iYCwgdGhpcyB3aWxsIGNyZWF0ZQogIC8vLyAgIGEgW01ldGhvZEludm9jYXRpb25dIGZvciBgYS5iKC4uLilgLgogIC8vLyAqIElmIHRoaXMgaXMgYSBbVGhpc0FjY2Vzc0dlbmVyYXRvcl0gZm9yIGB0aGlzYCBpbiBhbiBpbml0aWFsaXplciBsaXN0LAogIC8vLyAgIHRoaXMgd2lsbCBjcmVhdGUgYSBbUmVkaXJlY3RpbmdJbml0aWFsaXplcl0gZm9yIGB0aGlzKC4uLilgLgogIC8vLyAqIElmIHRoaXMgaXMgYW4gW0luY29tcGxldGVFcnJvckdlbmVyYXRvcl0sIHRoaXMgd2lsbCByZXR1cm4gdGhlIGVycm9yCiAgLy8vICAgZ2VuZXJhdG9yIGl0c2VsZi4KICAvLy8KICAvKiBFeHByZXNzaW9uIHwgR2VuZXJhdG9yIHwgSW5pdGlhbGl6ZXIgKi8gZG9JbnZvY2F0aW9uKAogICAgICBpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKTsKCiAgLyogRXhwcmVzc2lvbiB8IEdlbmVyYXRvciAqLyBidWlsZFByb3BlcnR5QWNjZXNzKAogICAgICBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciBzZW5kLCBpbnQgb3BlcmF0b3JPZmZzZXQsIGJvb2wgaXNOdWxsQXdhcmUpIHsKICAgIGlmIChzZW5kIGlzIFNlbmRBY2Nlc3NHZW5lcmF0b3IpIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKGJ1aWxkU2ltcGxlUmVhZCgpLCBzZW5kLm5hbWUsCiAgICAgICAgICBzZW5kLmFyZ3VtZW50cywgb2Zmc2V0Rm9yVG9rZW4oc2VuZC50b2tlbiksCiAgICAgICAgICBpc051bGxBd2FyZTogaXNOdWxsQXdhcmUpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9oZWxwZXIuY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lICYmCiAgICAgICAgICBzZW5kLm5hbWUgIT0gbGVuZ3RoTmFtZSkgewogICAgICAgIF9oZWxwZXIuYWRkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb24sIG9mZnNldEZvclRva2VuKHRva2VuKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgICByZXR1cm4gUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IubWFrZShfaGVscGVyLCBzZW5kLnRva2VuLAogICAgICAgICAgYnVpbGRTaW1wbGVSZWFkKCksIHNlbmQubmFtZSwgbnVsbCwgbnVsbCwgaXNOdWxsQXdhcmUpOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYSBbVHlwZUJ1aWxkZXJdIGZvciB0aGlzIHN1YmV4cHJlc3Npb24gaW5zdGFudGlhdGVkIHdpdGggdGhlCiAgLy8vIHR5cGUgW2FyZ3VtZW50c10uIElmIG5vIHR5cGUgYXJndW1lbnRzIGFyZSBwcm92aWRlZCBbYXJndW1lbnRzXSBpcyBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoZSB0eXBlIGFyZ3VtZW50cyBoYXZlIG5vdCBiZWVuIHJlc29sdmVkIGFuZCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8KICAvLy8gY3JlYXRlIGEgW1R5cGVCdWlsZGVyXSBmb3IgYSB2YWxpZCB0eXBlLgogIFR5cGVCdWlsZGVyIGJ1aWxkVHlwZVdpdGhSZXNvbHZlZEFyZ3VtZW50cyhMaXN0PFVucmVzb2x2ZWRUeXBlPiBhcmd1bWVudHMpIHsKICAgIE5hbWVkVHlwZUJ1aWxkZXIgcmVzdWx0ID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIodG9rZW4ubGV4ZW1lLCBudWxsKTsKICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlTm90QVR5cGUud2l0aEFyZ3VtZW50cyh0b2tlbi5sZXhlbWUpOwogICAgX2hlbHBlci5saWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBsZW5ndGhGb3JUb2tlbih0b2tlbiksIF91cmkpOwogICAgcmVzdWx0LmJpbmQocmVzdWx0LmJ1aWxkSW52YWxpZFR5cGUobWVzc2FnZS53aXRoTG9jYXRpb24oCiAgICAgICAgX3VyaSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBsZW5ndGhGb3JUb2tlbih0b2tlbikpKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyogRXhwcmVzc2lvbiB8IEdlbmVyYXRvciAqLyBPYmplY3QgcXVhbGlmaWVkTG9va3VwKFRva2VuIG5hbWUpIHsKICAgIHJldHVybiBuZXcgVW5leHBlY3RlZFF1YWxpZmllZFVzZUdlbmVyYXRvcihfaGVscGVyLCBuYW1lLCB0aGlzLCBmYWxzZSk7CiAgfQoKICBFeHByZXNzaW9uIGludm9rZUNvbnN0cnVjdG9yKAogICAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBuYW1lTGFzdFRva2VuLAogICAgICBDb25zdG5lc3MgY29uc3RuZXNzKSB7CiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFzc2VydChfZm9yZXN0LmFyZ3VtZW50c1R5cGVBcmd1bWVudHMoYXJndW1lbnRzKS5pc0VtcHR5KTsKICAgICAgX2ZvcmVzdC5hcmd1bWVudHNTZXRUeXBlQXJndW1lbnRzKAogICAgICAgICAgYXJndW1lbnRzLCBfaGVscGVyLmJ1aWxkRGFydFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cykpOwogICAgfQogICAgcmV0dXJuIF9oZWxwZXIud3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgX2hlbHBlci50aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKHRva2VuKSwKICAgICAgICAgICAgX2hlbHBlci5jb25zdHJ1Y3Rvck5hbWVGb3JEaWFnbm9zdGljcyhuYW1lLAogICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBfcGxhaW5OYW1lRm9yUmVhZCksCiAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgbmFtZVRva2VuLmNoYXJPZmZzZXQpLAogICAgICAgIG51bGwsCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgfQoKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZShfZGVidWdOYW1lKTsKICAgIGJ1ZmZlci53cml0ZSgiKG9mZnNldDogIik7CiAgICBidWZmZXIud3JpdGUoIiR7b2Zmc2V0Rm9yVG9rZW4odG9rZW4pfSIpOwogICAgcHJpbnRPbihidWZmZXIpOwogICAgYnVmZmVyLndyaXRlKCIpIik7CiAgICByZXR1cm4gIiRidWZmZXIiOwogIH0KfQoKLy8vIFtWYXJpYWJsZVVzZUdlbmVyYXRvcl0gcmVwcmVzZW50cyB0aGUgc3ViZXhwcmVzc2lvbiB3aG9zZSBwcmVmaXggaXMgYQovLy8gbG9jYWwgdmFyaWFibGUgb3IgcGFyYW1ldGVyIG5hbWUuCi8vLwovLy8gRm9yIGluc3RhbmNlOgovLy8KLy8vICAgbWV0aG9kKGEpIHsKLy8vICAgICB2YXIgYjsKLy8vICAgICBhOyAgICAgICAgIC8vIGEgVmFyaWFibGVVc2VHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGFgLgovLy8gICAgIGIgPSBhW107ICAgLy8gYSBWYXJpYWJsZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAgYW5kIGBiYC4KLy8vICAgICBiKCk7ICAgICAgIC8vIGEgVmFyaWFibGVVc2VHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGJgLgovLy8gICAgIGIuYyA9IGEuZDsgLy8gYSBWYXJpYWJsZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAgYW5kIGBiYC4KLy8vICAgfQovLy8KLy8vIElmIHRoZSB2YXJpYWJsZSBpcyBmaW5hbCBvciByZWFkLW9ubHkgKGxpa2UgYSBwYXJhbWV0ZXIgaW4gYSBjYXRjaCBjbGF1c2UpIGEKLy8vIFtSZWFkT25seUFjY2Vzc0dlbmVyYXRvcl0gaXMgY3JlYXRlZCBpbnN0ZWFkLgpjbGFzcyBWYXJpYWJsZVVzZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsKCiAgZmluYWwgRGFydFR5cGUgcHJvbW90ZWRUeXBlOwoKICBWYXJpYWJsZVVzZUdlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCB0aGlzLnZhcmlhYmxlLAogICAgICBbdGhpcy5wcm9tb3RlZFR5cGVdKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlZhcmlhYmxlVXNlR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiB2YXJpYWJsZS5uYW1lOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YXIgZmFjdCA9IF9oZWxwZXIudHlwZVByb21vdGVyCiAgICAgICAgPy5nZXRGYWN0Rm9yQWNjZXNzKHZhcmlhYmxlLCBfaGVscGVyLmZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKICAgIHZhciBzY29wZSA9IF9oZWxwZXIudHlwZVByb21vdGVyPy5jdXJyZW50U2NvcGU7CiAgICB2YXIgcmVhZCA9IG5ldyBWYXJpYWJsZUdldEp1ZGdtZW50KHZhcmlhYmxlLCBmYWN0LCBzY29wZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LnJlYWQgPSByZWFkOwogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgX2hlbHBlci50eXBlUHJvbW90ZXIKICAgICAgICA/Lm11dGF0ZVZhcmlhYmxlKHZhcmlhYmxlLCBfaGVscGVyLmZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKICAgIEV4cHJlc3Npb24gd3JpdGU7CiAgICBpZiAodmFyaWFibGUuaXNGaW5hbCB8fCB2YXJpYWJsZS5pc0NvbnN0KSB7CiAgICAgIHdyaXRlID0gX21ha2VJbnZhbGlkV3JpdGUodmFsdWUpOwogICAgICBpZiAoY29tcGxleEFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICAgIHdyaXRlID0gX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbih3cml0ZSk7CiAgICAgICAgY29tcGxleEFzc2lnbm1lbnQud3JpdGUgPSB3cml0ZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd3JpdGUgPSBuZXcgVmFyaWFibGVTZXQodmFyaWFibGUsIHZhbHVlKQogICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICB9CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oYnVpbGRTaW1wbGVSZWFkKCksIGNhbGxOYW1lLCBhcmd1bWVudHMsCiAgICAgICAgYWRqdXN0Rm9ySW1wbGljaXRDYWxsKF9wbGFpbk5hbWVGb3JSZWFkLCBvZmZzZXQpLAogICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgewogICAgcmV0dXJuIFN5bnRoZXRpY1dyYXBwZXIud3JhcFZhcmlhYmxlQXNzaWdubWVudChyaHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCB2YXJpYWJsZTogIik7CiAgICBwcmludE5vZGVPbih2YXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgcHJvbW90ZWRUeXBlOiAiKTsKICAgIHByaW50Tm9kZU9uKHByb21vdGVkVHlwZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCi8vLyBBIFtQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcl0gcmVwcmVzZW50cyBhIHN1YmV4cHJlc3Npb24gd2hvc2UgcHJlZml4IGlzCi8vLyBhbiBleHBsaWNpdCBwcm9wZXJ0eSBhY2Nlc3MuCi8vLwovLy8gRm9yIGluc3RhbmNlCi8vLwovLy8gICBtZXRob2QoYSkgewovLy8gICAgIGEuYjsgICAgICAvLyBhIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhLmJgLgovLy8gICAgIGEuYigpOyAgICAvLyBhIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhLmJgLgovLy8gICAgIGEuYiA9IGM7ICAvLyBhIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhLmJgLgovLy8gICAgIGEuYiArPSBjOyAvLyBhIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhLmJgLgovLy8gICB9Ci8vLwovLy8gSWYgdGhlIHJlY2VpdmVyIGlzIGB0aGlzYCwgYSBbVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSBpcyBjcmVhdGVkCi8vLyBpbnN0ZWFkLiBJZiB0aGUgYWNjZXNzIGlzIG51bGwtYXdhcmUsIGUuZy4gYGE/LmJgLCBhCi8vLyBbTnVsbEF3YXJlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdIGlzIGNyZWF0ZWQgaW5zdGVhZC4KY2xhc3MgUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIC8vLyBUaGUgcmVjZWl2ZXIgZXhwcmVzc2lvbi4gYGFgIGluIHRoZSBleGFtcGxlcyBpbiB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4KICBmaW5hbCBFeHByZXNzaW9uIHJlY2VpdmVyOwoKICAvLy8gVGhlIG5hbWUgZm9yIHRoZSBhY2Nlc3NlZCBwcm9wZXJ0eS4gYGJgIGluIHRoZSBleGFtcGxlcyBpbiB0aGUgY2xhc3MKICAvLy8gZG9jdW1lbnRhdGlvbi4KICBmaW5hbCBOYW1lIG5hbWU7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSBbZ2V0dGVyXSBhbmQgW3NldHRlcl0/IFRoZXNlIGFyZSBuZXZlcgogIC8vIHBhc3NlZC4KICBmaW5hbCBNZW1iZXIgZ2V0dGVyOwoKICBmaW5hbCBNZW1iZXIgc2V0dGVyOwoKICAvLy8gU3ludGhldGljIHZhcmlhYmxlIGNyZWF0ZWQgZm9yIFtyZWNlaXZlcl0gaWYgbmVlZC4KICBWYXJpYWJsZURlY2xhcmF0aW9uIF9yZWNlaXZlclZhcmlhYmxlOwoKICBQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucmVjZWl2ZXIsIHRoaXMubmFtZSwgdGhpcy5nZXR0ZXIsIHRoaXMuc2V0dGVyKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBuYW1lLm5hbWU7CgogIHJlY2VpdmVyQWNjZXNzKCkgewogICAgX3JlY2VpdmVyVmFyaWFibGUgPz89IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHJlY2VpdmVyKTsKICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQoX3JlY2VpdmVyVmFyaWFibGUpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbihyZWNlaXZlciwgbmFtZSwgYXJndW1lbnRzLCBvZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSA9PgogICAgICBTeW50aGV0aWNXcmFwcGVyLndyYXBQcm9wZXJ0eUFzc2lnbm1lbnQocmVjZWl2ZXIsIHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCBfcmVjZWl2ZXJWYXJpYWJsZTogIik7CiAgICBwcmludE5vZGVPbihfcmVjZWl2ZXJWYXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgcmVjZWl2ZXI6ICIpOwogICAgcHJpbnROb2RlT24ocmVjZWl2ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShuYW1lLm5hbWUpOwogICAgc2luay53cml0ZSgiLCBnZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oZ2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBzZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oc2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gbmV3IFByb3BlcnR5R2V0KHJlY2VpdmVyLCBuYW1lLCBnZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YXIgd3JpdGUgPSBuZXcgUHJvcGVydHlTZXQocmVjZWl2ZXIsIG5hbWUsIHZhbHVlLCBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgdmFyIHJlYWQgPSBuZXcgUHJvcGVydHlHZXQocmVjZWl2ZXJBY2Nlc3MoKSwgbmFtZSwgZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YXIgd3JpdGUgPSBuZXcgUHJvcGVydHlTZXQocmVjZWl2ZXJBY2Nlc3MoKSwgbmFtZSwgdmFsdWUsIHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9maW5pc2goCiAgICAgIEV4cHJlc3Npb24gYm9keSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgcmV0dXJuIHN1cGVyLl9maW5pc2gobWFrZUxldChfcmVjZWl2ZXJWYXJpYWJsZSwgYm9keSksIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0dlbmVyYXRvcl0gZm9yIHRoZSBhY2Nlc3Mgb2YgcHJvcGVydHkgW25hbWVdIG9uIFtyZWNlaXZlcl0uCiAgc3RhdGljIEdlbmVyYXRvciBtYWtlKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIE5hbWUgbmFtZSwKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIFtnZXR0ZXJdIGFuZCBbc2V0dGVyXT8gVGhlc2UgYXJlIG5ldmVyCiAgICAgIC8vIHBhc3NlZC4KICAgICAgTWVtYmVyIGdldHRlciwKICAgICAgTWVtYmVyIHNldHRlciwKICAgICAgYm9vbCBpc051bGxBd2FyZSkgewogICAgaWYgKGhlbHBlci5mb3Jlc3QuaXNUaGlzRXhwcmVzc2lvbihyZWNlaXZlcikpIHsKICAgICAgZ2V0dGVyID8/PSBoZWxwZXIubG9va3VwSW5zdGFuY2VNZW1iZXIobmFtZSk7CiAgICAgIHNldHRlciA/Pz0gaGVscGVyLmxvb2t1cEluc3RhbmNlTWVtYmVyKG5hbWUsIGlzU2V0dGVyOiB0cnVlKTsKICAgICAgcmV0dXJuIG5ldyBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICBoZWxwZXIsIHRva2VuLCBuYW1lLCBnZXR0ZXIsIHNldHRlcik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaXNOdWxsQXdhcmUKICAgICAgICAgID8gbmV3IE51bGxBd2FyZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgICAgIGhlbHBlciwgdG9rZW4sIHJlY2VpdmVyLCBuYW1lLCBnZXR0ZXIsIHNldHRlciwgbnVsbCkKICAgICAgICAgIDogbmV3IFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgICAgIGhlbHBlciwgdG9rZW4sIHJlY2VpdmVyLCBuYW1lLCBnZXR0ZXIsIHNldHRlcik7CiAgICB9CiAgfQp9CgovLy8gQSBbVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSByZXByZXNlbnRzIGEgc3ViZXhwcmVzc2lvbiB3aG9zZSBwcmVmaXggaXMKLy8vIGFuIGltcGxpY2l0IG9yIGV4cGxpY2l0IGFjY2VzcyBvbiBgdGhpc2AuCi8vLwovLy8gRm9yIGluc3RhbmNlCi8vLwovLy8gICBjbGFzcyBDIHsKLy8vICAgICB2YXIgYjsKLy8vICAgICBtZXRob2QoKSB7Ci8vLyAgICAgICBiOyAgICAgICAgICAgLy8gYSBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGJgLgovLy8gICAgICAgYigpOyAgICAgICAgIC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBiYC4KLy8vICAgICAgIGIgPSBjOyAgICAgICAvLyBhIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYmAuCi8vLyAgICAgICBiICs9IGM7ICAgICAgLy8gYSBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGJgLgovLy8gICAgICAgdGhpcy5iOyAgICAgIC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzLmJgLgovLy8gICAgICAgdGhpcy5iKCk7ICAgIC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzLmJgLgovLy8gICAgICAgdGhpcy5iID0gYzsgIC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzLmJgLgovLy8gICAgICAgdGhpcy5iICs9IGM7IC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzLmJgLgovLy8gICAgIH0KLy8vICAgfQovLy8KLy8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgW1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSB0byBhdm9pZCBjcmVhdGluZyBhbgovLy8gaW5kaXJlY3QgYWNjZXNzIHRvICd0aGlzJyBpbiBmb3IgaW5zdGFuY2UgYHRoaXMuYiArPSBjYCB3aGljaCBieQovLy8gW1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBhcwovLy8KLy8vICAgICBsZXQgIzEgPSB0aGlzIGluICMuYiA9ICMuYiArIGMKLy8vCi8vLyBpbnN0ZWFkIG9mCi8vLwovLy8gICAgIHRoaXMuYiA9IHRoaXMuYiArIGMKLy8vCmNsYXNzIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgLy8vIFRoZSBuYW1lIGZvciB0aGUgYWNjZXNzZWQgcHJvcGVydHkuIGBiYCBpbiB0aGUgZXhhbXBsZXMgaW4gdGhlIGNsYXNzCiAgLy8vIGRvY3VtZW50YXRpb24uCiAgZmluYWwgTmFtZSBuYW1lOwoKICAvLy8gVGhlIG1lbWJlciBhY2Nlc3NlZCBpZiB0aGlzIHN1YmV4cHJlc3Npb24gaGFzIGEgcmVhZC4KICAvLy8KICAvLy8gVGhpcyBpcyBgbnVsbGAgaWYgdGhlIGB0aGlzYCBjbGFzcyBkb2VzIG5vdCBoYXZlIGEgcmVhZGFibGUgcHJvcGVydHkgbmFtZWQKICAvLy8gW25hbWVdLgogIGZpbmFsIE1lbWJlciBnZXR0ZXI7CgogIC8vLyBUaGUgbWVtYmVyIGFjY2Vzc2VkIGlmIHRoaXMgc3ViZXhwcmVzc2lvbiBoYXMgYSB3cml0ZS4KICAvLy8KICAvLy8gVGhpcyBpcyBgbnVsbGAgaWYgdGhlIGB0aGlzYCBjbGFzcyBkb2VzIG5vdCBoYXZlIGEgd3JpdGFibGUgcHJvcGVydHkgbmFtZWQKICAvLy8gW25hbWVdLgogIGZpbmFsIE1lbWJlciBzZXR0ZXI7CgogIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMubmFtZSwgdGhpcy5nZXR0ZXIsIHRoaXMuc2V0dGVyKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gbmFtZS5uYW1lOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBpZiAoZ2V0dGVyID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZEdldChuYW1lLCBvZmZzZXRGb3JUb2tlbih0b2tlbikpOwogICAgfQogICAgdmFyIHJlYWQgPQogICAgICAgIG5ldyBQcm9wZXJ0eUdldChfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHRva2VuKSwgbmFtZSwgZ2V0dGVyKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LnJlYWQgPSByZWFkOwogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKHNldHRlciA9PSBudWxsKSB7CiAgICAgIF9oZWxwZXIud2FyblVucmVzb2x2ZWRTZXQobmFtZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICAgIH0KICAgIHZhciB3cml0ZSA9IG5ldyBQcm9wZXJ0eVNldCgKICAgICAgICBfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHRva2VuKSwgbmFtZSwgdmFsdWUsIHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICBNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0ID0gZ2V0dGVyOwogICAgaWYgKGludGVyZmFjZVRhcmdldCA9PSBudWxsKSB7CiAgICAgIF9oZWxwZXIud2FyblVucmVzb2x2ZWRNZXRob2QobmFtZSwgb2Zmc2V0KTsKICAgIH0KICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgaXMgRmllbGQpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBJbiBzdHJvbmcgbW9kZSB3ZSBzaG91bGQgcHJvYmFibHkgcmV3cml0ZSB0aGlzIHRvCiAgICAgIC8vIGB0aGlzLm5hbWUuY2FsbChhcmd1bWVudHMpYC4KICAgICAgaW50ZXJmYWNlVGFyZ2V0ID0gbnVsbDsKICAgIH0KICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKG51bGwpLCBuYW1lLCBhcmd1bWVudHMsIG9mZnNldCwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGludGVyZmFjZVRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcFByb3BlcnR5QXNzaWdubWVudChudWxsLCByaHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgbmFtZTogIik7CiAgICBzaW5rLndyaXRlKG5hbWUubmFtZSk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgfQp9CgpjbGFzcyBOdWxsQXdhcmVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiByZWNlaXZlcjsKCiAgZmluYWwgRXhwcmVzc2lvbiByZWNlaXZlckV4cHJlc3Npb247CgogIGZpbmFsIE5hbWUgbmFtZTsKCiAgZmluYWwgTWVtYmVyIGdldHRlcjsKCiAgZmluYWwgTWVtYmVyIHNldHRlcjsKCiAgZmluYWwgRGFydFR5cGUgdHlwZTsKCiAgTnVsbEF3YXJlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLAogICAgICBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5yZWNlaXZlckV4cHJlc3Npb24sCiAgICAgIHRoaXMubmFtZSwKICAgICAgdGhpcy5nZXR0ZXIsCiAgICAgIHRoaXMuc2V0dGVyLAogICAgICB0aGlzLnR5cGUpCiAgICAgIDogdGhpcy5yZWNlaXZlciA9IG1ha2VPclJldXNlVmFyaWFibGUocmVjZWl2ZXJFeHByZXNzaW9uKSwKICAgICAgICBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJOdWxsQXdhcmVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciI7CgogIEV4cHJlc3Npb24gcmVjZWl2ZXJBY2Nlc3MoKSA9PiBuZXcgVmFyaWFibGVHZXQocmVjZWl2ZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IG5hbWUubmFtZTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgdmFyIHJlYWQgPSBuZXcgUHJvcGVydHlHZXQocmVjZWl2ZXJBY2Nlc3MoKSwgbmFtZSwgZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YXIgd3JpdGUgPSBuZXcgUHJvcGVydHlTZXQocmVjZWl2ZXJBY2Nlc3MoKSwgbmFtZSwgdmFsdWUsIHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9maW5pc2goCiAgICAgIEV4cHJlc3Npb24gYm9keSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgdmFyIG9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIHZhciBudWxsQXdhcmVHdWFyZCA9IF9mb3Jlc3QuY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgIGJ1aWxkSXNOdWxsKHJlY2VpdmVyQWNjZXNzKCksIG9mZnNldCwgX2hlbHBlciksCiAgICAgICAgbnVsbCwKICAgICAgICBfZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgIG51bGwsCiAgICAgICAgYm9keSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgaWYgKGNvbXBsZXhBc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgYm9keSA9IG1ha2VMZXQocmVjZWl2ZXIsIG51bGxBd2FyZUd1YXJkKTsKICAgICAgaWYgKF9oZWxwZXIubGVnYWN5TW9kZSkgcmV0dXJuIGJvZHk7CiAgICAgIFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50IGtlcm5lbFByb3BlcnR5QXNzaWduID0gY29tcGxleEFzc2lnbm1lbnQ7CiAgICAgIGtlcm5lbFByb3BlcnR5QXNzaWduLm51bGxBd2FyZUd1YXJkID0gbnVsbEF3YXJlR3VhcmQ7CiAgICAgIGtlcm5lbFByb3BlcnR5QXNzaWduLmRlc3VnYXJlZCA9IGJvZHk7CiAgICAgIHJldHVybiBrZXJuZWxQcm9wZXJ0eUFzc2lnbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgTnVsbEF3YXJlUHJvcGVydHlHZXRKdWRnbWVudChyZWNlaXZlciwgbnVsbEF3YXJlR3VhcmQpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJkb0ludm9jYXRpb24iLCBvZmZzZXQsIF91cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSA9PgogICAgICBTeW50aGV0aWNXcmFwcGVyLndyYXBQcm9wZXJ0eUFzc2lnbm1lbnQocmVjZWl2ZXJFeHByZXNzaW9uLCByaHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgcmVjZWl2ZXI6ICIpOwogICAgcHJpbnROb2RlT24ocmVjZWl2ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHJlY2VpdmVyRXhwcmVzc2lvbjogIik7CiAgICBwcmludE5vZGVPbihyZWNlaXZlckV4cHJlc3Npb24sIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShuYW1lLm5hbWUpOwogICAgc2luay53cml0ZSgiLCBnZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oZ2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBzZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oc2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCB0eXBlOiAiKTsKICAgIHByaW50Tm9kZU9uKHR5cGUsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgfQp9CgpjbGFzcyBTdXBlclByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBOYW1lIG5hbWU7CgogIGZpbmFsIE1lbWJlciBnZXR0ZXI7CgogIGZpbmFsIE1lbWJlciBzZXR0ZXI7CgogIFN1cGVyUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLm5hbWUsIHRoaXMuZ2V0dGVyLCB0aGlzLnNldHRlcikKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJTdXBlclByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBuYW1lLm5hbWU7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmIChnZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkR2V0KG5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwgaXNTdXBlcjogdHJ1ZSk7CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IFVzZSBbRGlyZWN0UHJvcGVydHlHZXRdIHdoZW4gcG9zc2libGUuCiAgICB2YXIgcmVhZCA9IG5ldyBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQobmFtZSwgaW50ZXJmYWNlVGFyZ2V0OiBnZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmIChzZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkU2V0KG5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwgaXNTdXBlcjogdHJ1ZSk7CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IFVzZSBbRGlyZWN0UHJvcGVydHlTZXRdIHdoZW4gcG9zc2libGUuCiAgICB2YXIgd3JpdGUgPSBuZXcgU3VwZXJQcm9wZXJ0eVNldChuYW1lLCB2YWx1ZSwgc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChfaGVscGVyLmNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICAvLyBUT0RPKGJyaWFud2lsa2Vyc29uKSBGaXggdGhlIGxlbmd0aAogICAgICBfaGVscGVyLmFkZFByb2JsZW0obWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb24sIG9mZnNldCwgMSk7CiAgICB9CiAgICBpZiAoZ2V0dGVyID09IG51bGwgfHwgaXNGaWVsZE9yR2V0dGVyKGdldHRlcikpIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgYnVpbGRTaW1wbGVSZWFkKCksIGNhbGxOYW1lLCBhcmd1bWVudHMsIG9mZnNldCwKICAgICAgICAgIC8vIFRoaXMgaXNuJ3QgYSBjb25zdGFudCBleHByZXNzaW9uLCBidXQgd2UgaGF2ZSBjaGVja2VkIGlmIGEKICAgICAgICAgIC8vIGNvbnN0YW50IGV4cHJlc3Npb24gZXJyb3Igc2hvdWxkIGJlIGVtaXR0ZWQgYWxyZWFkeS4KICAgICAgICAgIGlzQ29uc3RhbnRFeHByZXNzaW9uOiB0cnVlLAogICAgICAgICAgaXNJbXBsaWNpdENhbGw6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhhaGUpOiBUaGlzIGNvdWxkIGJlIHNvbWV0aGluZyBsaWtlICJzdXBlci5wcm9wZXJ0eSguLi4pIiB3aGVyZQogICAgICAvLyBwcm9wZXJ0eSBpcyBhIHNldHRlci4KICAgICAgcmV0dXJuIHVuaGFuZGxlZCgiJHtnZXR0ZXIucnVudGltZVR5cGV9IiwgImRvSW52b2NhdGlvbiIsIG9mZnNldCwgX3VyaSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcFByb3BlcnR5QXNzaWdubWVudChudWxsLCByaHMsIGlzU3VwZXI6IHRydWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgbmFtZTogIik7CiAgICBzaW5rLndyaXRlKG5hbWUubmFtZSk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgfQp9CgpjbGFzcyBJbmRleGVkQWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBFeHByZXNzaW9uIHJlY2VpdmVyOwoKICBmaW5hbCBFeHByZXNzaW9uIGluZGV4OwoKICBmaW5hbCBQcm9jZWR1cmUgZ2V0dGVyOwoKICBmaW5hbCBQcm9jZWR1cmUgc2V0dGVyOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uIHJlY2VpdmVyVmFyaWFibGU7CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gaW5kZXhWYXJpYWJsZTsKCiAgSW5kZXhlZEFjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucmVjZWl2ZXIsIHRoaXMuaW5kZXgsIHRoaXMuZ2V0dGVyLCB0aGlzLnNldHRlcikKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiAiW10iOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IiOwoKICBFeHByZXNzaW9uIGluZGV4QWNjZXNzKCkgewogICAgaW5kZXhWYXJpYWJsZSA/Pz0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoaW5kZXgpOwogICAgcmV0dXJuIG5ldyBWYXJpYWJsZUdldChpbmRleFZhcmlhYmxlKS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEV4cHJlc3Npb24gcmVjZWl2ZXJBY2Nlc3MoKSB7CiAgICAvLyBXZSBjYW5ub3QgcmV1c2UgdGhlIHJlY2VpdmVyIGlmIGl0IGlzIGEgdmFyaWFibGUgc2luY2UgaXQgbWlnaHQgYmUKICAgIC8vIHJlYXNzaWduZWQgaW4gdGhlIGluZGV4IGV4cHJlc3Npb24uCiAgICByZWNlaXZlclZhcmlhYmxlID8/PSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShyZWNlaXZlcik7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlR2V0KHJlY2VpdmVyVmFyaWFibGUpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVSZWFkKCkgewogICAgdmFyIHJlYWQgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KHJlY2VpdmVyLCBpbmRleEdldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoPEV4cHJlc3Npb24+W2luZGV4XSwgdG9rZW4pLAogICAgICAgIGludGVyZmFjZVRhcmdldDogZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBpZiAoIXZvaWRDb250ZXh0KSByZXR1cm4gX21ha2VXcml0ZUFuZFJldHVybih2YWx1ZSwgY29tcGxleEFzc2lnbm1lbnQpOwogICAgdmFyIHdyaXRlID0gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudChyZWNlaXZlciwgaW5kZXhTZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPltpbmRleCwgdmFsdWVdLCB0b2tlbiksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgdmFyIHJlYWQgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KHJlY2VpdmVyQWNjZXNzKCksIGluZGV4R2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyg8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKV0sIHRva2VuKSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LnJlYWQgPSByZWFkOwogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKCF2b2lkQ29udGV4dCkgcmV0dXJuIF9tYWtlV3JpdGVBbmRSZXR1cm4odmFsdWUsIGNvbXBsZXhBc3NpZ25tZW50KTsKICAgIHZhciB3cml0ZSA9IG5ldyBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQocmVjZWl2ZXJBY2Nlc3MoKSwgaW5kZXhTZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpLCB2YWx1ZV0sIHRva2VuKSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICAvLyBUT0RPKGRtaXRyeWFzKTogcmVtb3ZlIHRoaXMgbWV0aG9kIGFmdGVyIHRoZSAiW109IiBvcGVyYXRvciBvZiB0aGUgQ29udGV4dAogIC8vIGNsYXNzIGlzIG1hZGUgdG8gcmV0dXJuIGEgdmFsdWUuCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlQW5kUmV0dXJuKAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICAvLyBUaGUgY2FsbCB0byBbXT0gZG9lcyBub3QgcmV0dXJuIHRoZSB2YWx1ZSBsaWtlIGRpcmVjdC1zdHlsZSBhc3NpZ25tZW50cwogICAgLy8gZG8uICBXZSBuZWVkIHRvIGJpbmQgdGhlIHZhbHVlIGluIGEgbGV0LgogICAgdmFyIHZhbHVlVmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSh2YWx1ZSk7CiAgICB2YXIgd3JpdGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIHJlY2VpdmVyQWNjZXNzKCksCiAgICAgICAgaW5kZXhTZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKAogICAgICAgICAgICA8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKSwgbmV3IFZhcmlhYmxlR2V0KHZhbHVlVmFyaWFibGUpXSwgdG9rZW4pLAogICAgICAgIGludGVyZmFjZVRhcmdldDogc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHZhciBkdW1teSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuZm9yVmFsdWUoCiAgICAgICAgd3JpdGUsIF9oZWxwZXIuZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgcmV0dXJuIG1ha2VMZXQoCiAgICAgICAgdmFsdWVWYXJpYWJsZSwgbWFrZUxldChkdW1teSwgbmV3IFZhcmlhYmxlR2V0KHZhbHVlVmFyaWFibGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9maW5pc2goCiAgICAgIEV4cHJlc3Npb24gYm9keSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaW50IG9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIHJldHVybiBzdXBlci5fZmluaXNoKAogICAgICAgIG1ha2VMZXQoCiAgICAgICAgICAgIHJlY2VpdmVyVmFyaWFibGUsIG1ha2VMZXQoaW5kZXhWYXJpYWJsZSwgYm9keSkuLmZpbGVPZmZzZXQgPSBvZmZzZXQpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgY29tcGxleEFzc2lnbm1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIGJ1aWxkU2ltcGxlUmVhZCgpLCBjYWxsTmFtZSwgYXJndW1lbnRzLCBfZm9yZXN0LnJlYWRPZmZzZXQoYXJndW1lbnRzKSwKICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcEluZGV4QXNzaWdubWVudChyZWNlaXZlciwgaW5kZXgsIHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCByZWNlaXZlcjogIik7CiAgICBwcmludE5vZGVPbihyZWNlaXZlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgaW5kZXg6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXgsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHJlY2VpdmVyVmFyaWFibGU6ICIpOwogICAgcHJpbnROb2RlT24ocmVjZWl2ZXJWYXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgaW5kZXhWYXJpYWJsZTogIik7CiAgICBwcmludE5vZGVPbihpbmRleFZhcmlhYmxlLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogIH0KCiAgc3RhdGljIEdlbmVyYXRvciBtYWtlKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIEV4cHJlc3Npb24gaW5kZXgsCiAgICAgIFByb2NlZHVyZSBnZXR0ZXIsCiAgICAgIFByb2NlZHVyZSBzZXR0ZXIpIHsKICAgIGlmIChoZWxwZXIuZm9yZXN0LmlzVGhpc0V4cHJlc3Npb24ocmVjZWl2ZXIpKSB7CiAgICAgIHJldHVybiBuZXcgVGhpc0luZGV4ZWRBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICBoZWxwZXIsIHRva2VuLCBpbmRleCwgZ2V0dGVyLCBzZXR0ZXIpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBJbmRleGVkQWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgaGVscGVyLCB0b2tlbiwgcmVjZWl2ZXIsIGluZGV4LCBnZXR0ZXIsIHNldHRlcik7CiAgICB9CiAgfQp9CgovLy8gU3BlY2lhbCBjYXNlIG9mIFtJbmRleGVkQWNjZXNzR2VuZXJhdG9yXSB0byBhdm9pZCBjcmVhdGluZyBhbiBpbmRpcmVjdAovLy8gYWNjZXNzIHRvICd0aGlzJy4KY2xhc3MgVGhpc0luZGV4ZWRBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIEV4cHJlc3Npb24gaW5kZXg7CgogIGZpbmFsIFByb2NlZHVyZSBnZXR0ZXI7CgogIGZpbmFsIFByb2NlZHVyZSBzZXR0ZXI7CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gaW5kZXhWYXJpYWJsZTsKCiAgVGhpc0luZGV4ZWRBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLmluZGV4LCB0aGlzLmdldHRlciwgdGhpcy5zZXR0ZXIpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gIltdIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJUaGlzSW5kZXhlZEFjY2Vzc0dlbmVyYXRvciI7CgogIEV4cHJlc3Npb24gaW5kZXhBY2Nlc3MoKSB7CiAgICBpbmRleFZhcmlhYmxlID8/PSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShpbmRleCk7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlR2V0KGluZGV4VmFyaWFibGUpOwogIH0KCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlQW5kUmV0dXJuKAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YXIgdmFsdWVWYXJpYWJsZSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHZhbHVlKTsKICAgIHZhciB3cml0ZSA9IG5ldyBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVUaGlzRXhwcmVzc2lvbih0b2tlbiksCiAgICAgICAgaW5kZXhTZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKAogICAgICAgICAgICA8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKSwgbmV3IFZhcmlhYmxlR2V0KHZhbHVlVmFyaWFibGUpXSwgdG9rZW4pLAogICAgICAgIGludGVyZmFjZVRhcmdldDogc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHZhciBkdW1teSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHdyaXRlKTsKICAgIHJldHVybiBtYWtlTGV0KAogICAgICAgIHZhbHVlVmFyaWFibGUsIG1ha2VMZXQoZHVtbXksIG5ldyBWYXJpYWJsZUdldCh2YWx1ZVZhcmlhYmxlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudChfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHRva2VuKSwKICAgICAgICBpbmRleEdldE5hbWUsIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPltpbmRleF0sIHRva2VuKSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghdm9pZENvbnRleHQpIHJldHVybiBfbWFrZVdyaXRlQW5kUmV0dXJuKHZhbHVlLCBjb21wbGV4QXNzaWdubWVudCk7CiAgICB2YXIgd3JpdGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIF9mb3Jlc3QuY3JlYXRlVGhpc0V4cHJlc3Npb24odG9rZW4pLAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyg8RXhwcmVzc2lvbj5baW5kZXgsIHZhbHVlXSwgdG9rZW4pLAogICAgICAgIGludGVyZmFjZVRhcmdldDogc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHZhciByZWFkID0gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICBfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHRva2VuKSwKICAgICAgICBpbmRleEdldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoPEV4cHJlc3Npb24+W2luZGV4QWNjZXNzKCldLCB0b2tlbiksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBnZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghdm9pZENvbnRleHQpIHJldHVybiBfbWFrZVdyaXRlQW5kUmV0dXJuKHZhbHVlLCBjb21wbGV4QXNzaWdubWVudCk7CiAgICB2YXIgd3JpdGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIF9mb3Jlc3QuY3JlYXRlVGhpc0V4cHJlc3Npb24odG9rZW4pLAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyg8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKSwgdmFsdWVdLCB0b2tlbiksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfZmluaXNoKAogICAgICBFeHByZXNzaW9uIGJvZHksIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHJldHVybiBzdXBlci5fZmluaXNoKG1ha2VMZXQoaW5kZXhWYXJpYWJsZSwgYm9keSksIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwSW5kZXhBc3NpZ25tZW50KG51bGwsIGluZGV4LCByaHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgaW5kZXg6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXgsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGluZGV4VmFyaWFibGU6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXhWYXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIFN1cGVySW5kZXhlZEFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgRXhwcmVzc2lvbiBpbmRleDsKCiAgZmluYWwgTWVtYmVyIGdldHRlcjsKCiAgZmluYWwgTWVtYmVyIHNldHRlcjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBpbmRleFZhcmlhYmxlOwoKICBTdXBlckluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLmluZGV4LCB0aGlzLmdldHRlciwgdGhpcy5zZXR0ZXIpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gIltdIjsKCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJTdXBlckluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IiOwoKICBFeHByZXNzaW9uIGluZGV4QWNjZXNzKCkgewogICAgaW5kZXhWYXJpYWJsZSA/Pz0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoaW5kZXgpOwogICAgcmV0dXJuIG5ldyBWYXJpYWJsZUdldChpbmRleFZhcmlhYmxlKTsKICB9CgogIEV4cHJlc3Npb24gX21ha2VXcml0ZUFuZFJldHVybigKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgdmFyIHZhbHVlVmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSh2YWx1ZSk7CiAgICBpZiAoc2V0dGVyID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZE1ldGhvZChpbmRleFNldE5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGlzU3VwZXI6IHRydWUpOwogICAgfQogICAgdmFyIHdyaXRlID0gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBpbmRleFNldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoCiAgICAgICAgICAgIDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpLCBuZXcgVmFyaWFibGVHZXQodmFsdWVWYXJpYWJsZSldLCB0b2tlbiksCiAgICAgICAgc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHZhciBkdW1teSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHdyaXRlKTsKICAgIHJldHVybiBtYWtlTGV0KAogICAgICAgIHZhbHVlVmFyaWFibGUsIG1ha2VMZXQoZHVtbXksIG5ldyBWYXJpYWJsZUdldCh2YWx1ZVZhcmlhYmxlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSB7CiAgICBpZiAoZ2V0dGVyID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZE1ldGhvZChpbmRleEdldE5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGlzU3VwZXI6IHRydWUpOwogICAgfQogICAgLy8gVE9ETyhhaGUpOiBVc2UgW0RpcmVjdE1ldGhvZEludm9jYXRpb25dIHdoZW4gcG9zc2libGUuCiAgICByZXR1cm4gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIGluZGV4R2V0TmFtZSwgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoPEV4cHJlc3Npb24+W2luZGV4XSwgdG9rZW4pLAogICAgICAgIGludGVyZmFjZVRhcmdldDogZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKCF2b2lkQ29udGV4dCkgcmV0dXJuIF9tYWtlV3JpdGVBbmRSZXR1cm4odmFsdWUsIGNvbXBsZXhBc3NpZ25tZW50KTsKICAgIGlmIChzZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkTWV0aG9kKGluZGV4U2V0TmFtZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgaXNTdXBlcjogdHJ1ZSk7CiAgICB9CiAgICB2YXIgd3JpdGUgPSBuZXcgU3VwZXJNZXRob2RJbnZvY2F0aW9uKGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyg8RXhwcmVzc2lvbj5baW5kZXgsIHZhbHVlXSwgdG9rZW4pLCBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKGdldHRlciA9PSBudWxsKSB7CiAgICAgIF9oZWxwZXIud2FyblVucmVzb2x2ZWRNZXRob2QoaW5kZXhHZXROYW1lLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgICBpc1N1cGVyOiB0cnVlKTsKICAgIH0KICAgIHZhciByZWFkID0gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbihpbmRleEdldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoPEV4cHJlc3Npb24+W2luZGV4QWNjZXNzKCldLCB0b2tlbiksIGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LnJlYWQgPSByZWFkOwogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKCF2b2lkQ29udGV4dCkgcmV0dXJuIF9tYWtlV3JpdGVBbmRSZXR1cm4odmFsdWUsIGNvbXBsZXhBc3NpZ25tZW50KTsKICAgIGlmIChzZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkTWV0aG9kKGluZGV4U2V0TmFtZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgaXNTdXBlcjogdHJ1ZSk7CiAgICB9CiAgICB2YXIgd3JpdGUgPSBuZXcgU3VwZXJNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyg8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKSwgdmFsdWVdLCB0b2tlbiksCiAgICAgICAgc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX2ZpbmlzaCgKICAgICAgRXhwcmVzc2lvbiBib2R5LCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICByZXR1cm4gc3VwZXIuX2ZpbmlzaCgKICAgICAgICBtYWtlTGV0KGluZGV4VmFyaWFibGUsIGJvZHkpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwSW5kZXhBc3NpZ25tZW50KG51bGwsIGluZGV4LCByaHMsIGlzU3VwZXI6IHRydWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgaW5kZXg6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXgsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGluZGV4VmFyaWFibGU6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXhWYXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIFN0YXRpY0FjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgTWVtYmVyIHJlYWRUYXJnZXQ7CgogIGZpbmFsIE1lbWJlciB3cml0ZVRhcmdldDsKCiAgU3RhdGljQWNjZXNzR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5yZWFkVGFyZ2V0LCB0aGlzLndyaXRlVGFyZ2V0KQogICAgICA6IGFzc2VydChyZWFkVGFyZ2V0ICE9IG51bGwgfHwgd3JpdGVUYXJnZXQgIT0gbnVsbCksCiAgICAgICAgc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIGZhY3RvcnkgU3RhdGljQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLAogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uLCBUb2tlbiB0b2tlbiwgQnVpbGRlciBidWlsZGVyU2V0dGVyKSB7CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgIEFjY2Vzc0Vycm9yQnVpbGRlciBlcnJvciA9IGRlY2xhcmF0aW9uOwogICAgICBkZWNsYXJhdGlvbiA9IGVycm9yLmJ1aWxkZXI7CiAgICAgIC8vIFdlIHNob3VsZCBvbmx5IHNlZSBhbiBhY2Nlc3MgZXJyb3IgaGVyZSBpZiB3ZSd2ZSBsb29rZWQgdXAgYSBzZXR0ZXIKICAgICAgLy8gd2hlbiBub3QgZXhwbGljaXRseSBsb29raW5nIGZvciBhIHNldHRlci4KICAgICAgYXNzZXJ0KGRlY2xhcmF0aW9uLmlzU2V0dGVyKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24udGFyZ2V0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgKICAgICAgICAgICIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIsCiAgICAgICAgICAiU3RhdGljQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyIiwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGhlbHBlci51cmkpOwogICAgfQogICAgTWVtYmVyIGdldHRlciA9IGRlY2xhcmF0aW9uLnRhcmdldC5oYXNHZXR0ZXIgPyBkZWNsYXJhdGlvbi50YXJnZXQgOiBudWxsOwogICAgTWVtYmVyIHNldHRlciA9IGRlY2xhcmF0aW9uLnRhcmdldC5oYXNTZXR0ZXIgPyBkZWNsYXJhdGlvbi50YXJnZXQgOiBudWxsOwogICAgaWYgKHNldHRlciA9PSBudWxsKSB7CiAgICAgIGlmIChidWlsZGVyU2V0dGVyPy50YXJnZXQ/Lmhhc1NldHRlciA/PyBmYWxzZSkgewogICAgICAgIHNldHRlciA9IGJ1aWxkZXJTZXR0ZXIudGFyZ2V0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFN0YXRpY0FjY2Vzc0dlbmVyYXRvcihoZWxwZXIsIHRva2VuLCBnZXR0ZXIsIHNldHRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlN0YXRpY0FjY2Vzc0dlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gKHJlYWRUYXJnZXQgPz8gd3JpdGVUYXJnZXQpLm5hbWUubmFtZTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgRXhwcmVzc2lvbiByZWFkOwogICAgaWYgKHJlYWRUYXJnZXQgPT0gbnVsbCkgewogICAgICByZWFkID0gX21ha2VJbnZhbGlkUmVhZCgpOwogICAgICBpZiAoY29tcGxleEFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICAgIHJlYWQgPSBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHJlYWQpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZWFkID0gX2hlbHBlci5tYWtlU3RhdGljR2V0KHJlYWRUYXJnZXQsIHRva2VuKTsKICAgIH0KICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIEV4cHJlc3Npb24gd3JpdGU7CiAgICBpZiAod3JpdGVUYXJnZXQgPT0gbnVsbCkgewogICAgICB3cml0ZSA9IF9tYWtlSW52YWxpZFdyaXRlKHZhbHVlKTsKICAgICAgaWYgKGNvbXBsZXhBc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgICB3cml0ZSA9IF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24od3JpdGUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB3cml0ZSA9IG5ldyBTdGF0aWNTZXQod3JpdGVUYXJnZXQsIHZhbHVlKTsKICAgIH0KICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgd3JpdGUuZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChfaGVscGVyLmNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJgogICAgICAgICFfaGVscGVyLmlzSWRlbnRpY2FsKHJlYWRUYXJnZXQpKSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlTm90Q29uc3RhbnRFeHByZXNzaW9uLndpdGhBcmd1bWVudHMoJ01ldGhvZCBpbnZvY2F0aW9uJyksCiAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICByZWFkVGFyZ2V0Py5uYW1lPy5uYW1lPy5sZW5ndGggPz8gMCk7CiAgICB9CiAgICBpZiAocmVhZFRhcmdldCA9PSBudWxsIHx8IGlzRmllbGRPckdldHRlcihyZWFkVGFyZ2V0KSkgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oYnVpbGRTaW1wbGVSZWFkKCksIGNhbGxOYW1lLAogICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQgKyAocmVhZFRhcmdldD8ubmFtZT8ubmFtZT8ubGVuZ3RoID8/IDApLAogICAgICAgICAgLy8gVGhpcyBpc24ndCBhIGNvbnN0YW50IGV4cHJlc3Npb24sIGJ1dCB3ZSBoYXZlIGNoZWNrZWQgaWYgYQogICAgICAgICAgLy8gY29uc3RhbnQgZXhwcmVzc2lvbiBlcnJvciBzaG91bGQgYmUgZW1pdHRlZCBhbHJlYWR5LgogICAgICAgICAgaXNDb25zdGFudEV4cHJlc3Npb246IHRydWUsCiAgICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZFN0YXRpY0ludm9jYXRpb24ocmVhZFRhcmdldCwgYXJndW1lbnRzLAogICAgICAgICAgY2hhck9mZnNldDogb2Zmc2V0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwU3RhdGljQXNzaWdubWVudChyaHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgcmVhZFRhcmdldDogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihyZWFkVGFyZ2V0LCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCB3cml0ZVRhcmdldDogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbih3cml0ZVRhcmdldCwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIExvYWRMaWJyYXJ5R2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBMb2FkTGlicmFyeUJ1aWxkZXIgYnVpbGRlcjsKCiAgTG9hZExpYnJhcnlHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5idWlsZGVyKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+ICdsb2FkTGlicmFyeSc7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiTG9hZExpYnJhcnlHZW5lcmF0b3IiOwogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGJ1aWxkZXIuaW1wb3J0RGVwZW5kZW5jeS50YXJnZXRMaWJyYXJ5OwogICAgdmFyIHJlYWQgPSBuZXcgTG9hZExpYnJhcnlUZWFyT2ZmSnVkZ21lbnQoCiAgICAgICAgYnVpbGRlci5pbXBvcnREZXBlbmRlbmN5LCBidWlsZGVyLmNyZWF0ZVRlYXJvZmZNZXRob2QoX2hlbHBlci5mb3Jlc3QpKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChfZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGggPiAwIHx8CiAgICAgICAgX2ZvcmVzdC5hcmd1bWVudHNOYW1lZChhcmd1bWVudHMpLmxlbmd0aCA+IDApIHsKICAgICAgX2hlbHBlci5hZGRQcm9ibGVtRXJyb3JJZkNvbnN0KAogICAgICAgICAgbWVzc2FnZUxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cywgb2Zmc2V0LCAnbG9hZExpYnJhcnknLmxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVMb2FkTGlicmFyeShvZmZzZXQsIF9mb3Jlc3QsIGFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIGJ1aWxkZXI6ICIpOwogICAgc2luay53cml0ZShidWlsZGVyKTsKICB9Cn0KCmNsYXNzIERlZmVycmVkQWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBQcmVmaXhVc2VHZW5lcmF0b3IgcHJlZml4R2VuZXJhdG9yOwoKICBmaW5hbCBHZW5lcmF0b3Igc3VmZml4R2VuZXJhdG9yOwoKICBEZWZlcnJlZEFjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucHJlZml4R2VuZXJhdG9yLCB0aGlzLnN1ZmZpeEdlbmVyYXRvcikKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwSW5EZWZlcnJlZENoZWNrKHN1ZmZpeEdlbmVyYXRvci5fbWFrZVNpbXBsZVJlYWQoKSwKICAgICAgICBwcmVmaXhHZW5lcmF0b3IucHJlZml4LCB0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBJbkRlZmVycmVkQ2hlY2soCiAgICAgICAgc3VmZml4R2VuZXJhdG9yLl9tYWtlUmVhZChjb21wbGV4QXNzaWdubWVudCksCiAgICAgICAgcHJlZml4R2VuZXJhdG9yLnByZWZpeCwKICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwSW5EZWZlcnJlZENoZWNrKAogICAgICAgIHN1ZmZpeEdlbmVyYXRvci5fbWFrZVdyaXRlKHZhbHVlLCB2b2lkQ29udGV4dCwgY29tcGxleEFzc2lnbm1lbnQpLAogICAgICAgIHByZWZpeEdlbmVyYXRvci5wcmVmaXgsCiAgICAgICAgdG9rZW4uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcFN0YXRpY0Fzc2lnbm1lbnQocmhzKTsKCiAgQG92ZXJyaWRlCiAgYnVpbGRQcm9wZXJ0eUFjY2VzcygKICAgICAgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3Igc2VuZCwgaW50IG9wZXJhdG9yT2Zmc2V0LCBib29sIGlzTnVsbEF3YXJlKSB7CiAgICBPYmplY3QgcHJvcGVydHlBY2Nlc3MgPQogICAgICAgIHN1ZmZpeEdlbmVyYXRvci5idWlsZFByb3BlcnR5QWNjZXNzKHNlbmQsIG9wZXJhdG9yT2Zmc2V0LCBpc051bGxBd2FyZSk7CiAgICBpZiAocHJvcGVydHlBY2Nlc3MgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiBuZXcgRGVmZXJyZWRBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICBfaGVscGVyLCB0b2tlbiwgcHJlZml4R2VuZXJhdG9yLCBwcm9wZXJ0eUFjY2Vzcyk7CiAgICB9IGVsc2UgewogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwcm9wZXJ0eUFjY2VzczsKICAgICAgcmV0dXJuIF9oZWxwZXIud3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgICAgIGV4cHJlc3Npb24sIHByZWZpeEdlbmVyYXRvci5wcmVmaXgsIHRva2VuLmNoYXJPZmZzZXQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoCiAgICAgICAgImRlZmVycmVkQWNjZXNzb3IucGxhaW5OYW1lRm9yUmVhZCIsIG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkRlZmVycmVkQWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgVHlwZUJ1aWxkZXIgYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKExpc3Q8VW5yZXNvbHZlZFR5cGU+IGFyZ3VtZW50cykgewogICAgU3RyaW5nIG5hbWUgPSAiJHtwcmVmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWR9LiIKICAgICAgICAiJHtzdWZmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWR9IjsKICAgIFR5cGVCdWlsZGVyIHR5cGUgPQogICAgICAgIHN1ZmZpeEdlbmVyYXRvci5idWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CiAgICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyICYmIHR5cGUuZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgIEludmFsaWRUeXBlQnVpbGRlciBkZWNsYXJhdGlvbiA9IHR5cGUuZGVjbGFyYXRpb247CiAgICAgIG1lc3NhZ2UgPSBkZWNsYXJhdGlvbi5tZXNzYWdlOwogICAgfSBlbHNlIHsKICAgICAgaW50IGNoYXJPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihwcmVmaXhHZW5lcmF0b3IudG9rZW4pOwogICAgICBtZXNzYWdlID0gdGVtcGxhdGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uCiAgICAgICAgICAud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICBfaGVscGVyLmJ1aWxkRGFydFR5cGUobmV3IFVucmVzb2x2ZWRUeXBlKHR5cGUsIGNoYXJPZmZzZXQsIF91cmkpKSwKICAgICAgICAgICAgICBwcmVmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWQpCiAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgIF91cmksIGNoYXJPZmZzZXQsIGxlbmd0aE9mU3BhbihwcmVmaXhHZW5lcmF0b3IudG9rZW4sIHRva2VuKSk7CiAgICB9CiAgICBOYW1lZFR5cGVCdWlsZGVyIHJlc3VsdCA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIG51bGwpOwogICAgX2hlbHBlci5saWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UubGVuZ3RoLCBtZXNzYWdlLnVyaSk7CiAgICByZXN1bHQuYmluZChyZXN1bHQuYnVpbGRJbnZhbGlkVHlwZShtZXNzYWdlKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgICBzdWZmaXhHZW5lcmF0b3IuZG9JbnZvY2F0aW9uKG9mZnNldCwgYXJndW1lbnRzKSwKICAgICAgICBwcmVmaXhHZW5lcmF0b3IucHJlZml4LAogICAgICAgIHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBpbnZva2VDb25zdHJ1Y3RvcigKICAgICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFRva2VuIG5hbWVUb2tlbiwKICAgICAgVG9rZW4gbmFtZUxhc3RUb2tlbiwKICAgICAgQ29uc3RuZXNzIGNvbnN0bmVzcykgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgICBzdWZmaXhHZW5lcmF0b3IuaW52b2tlQ29uc3RydWN0b3IodHlwZUFyZ3VtZW50cywgbmFtZSwgYXJndW1lbnRzLAogICAgICAgICAgICBuYW1lVG9rZW4sIG5hbWVMYXN0VG9rZW4sIGNvbnN0bmVzcyksCiAgICAgICAgcHJlZml4R2VuZXJhdG9yLnByZWZpeCwKICAgICAgICBvZmZzZXRGb3JUb2tlbihzdWZmaXhHZW5lcmF0b3IudG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgcHJlZml4R2VuZXJhdG9yOiAiKTsKICAgIHNpbmsud3JpdGUocHJlZml4R2VuZXJhdG9yKTsKICAgIHNpbmsud3JpdGUoIiwgc3VmZml4R2VuZXJhdG9yOiAiKTsKICAgIHNpbmsud3JpdGUoc3VmZml4R2VuZXJhdG9yKTsKICB9Cn0KCi8vLyBbVHlwZVVzZUdlbmVyYXRvcl0gcmVwcmVzZW50cyB0aGUgc3ViZXhwcmVzc2lvbiB3aG9zZSBwcmVmaXggaXMgdGhlIG5hbWUgb2YKLy8vIGEgY2xhc3MsIGVudW0sIHR5cGUgdmFyaWFibGUsIHR5cGVkZWYsIG1peGluIGRlY2xhcmF0aW9uLCBleHRlbnNpb24KLy8vIGRlY2xhcmF0aW9uIG9yIGJ1aWx0LWluIHR5cGUsIGxpa2UgZHluYW1pYyBhbmQgdm9pZC4KLy8vCi8vLyBGb3IgaW5zdGFuY2U6Ci8vLwovLy8gICBjbGFzcyBBPFQ+IHt9Ci8vLyAgIHR5cGVkZWYgQiA9IEZ1bmN0aW9uKCk7Ci8vLyAgIG1peGluIEM8VD4gb24gQTxUPiB7fQovLy8gICBleHRlbnNpb24gRDxUPiBvbiBBPFQ+IHt9Ci8vLwovLy8gICBtZXRob2Q8VD4oKSB7Ci8vLyAgICAgQzxCPiAgICAgICAgLy8gYSBUeXBlVXNlR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBDYCBhbmQgYEJgLgovLy8gICAgIEIgYjsgICAgICAgIC8vIGEgVHlwZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgQmAuCi8vLyAgICAgRC5mb28oKTsgICAgLy8gYSBUeXBlVXNlR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBEYC4KLy8vICAgICBuZXcgQTxUPigpOyAvLyBhIFR5cGVVc2VHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYEFgIGFuZCBgVGAuCi8vLyAgICAgVCgpOyAgICAgICAgLy8gYSBUeXBlVXNlR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBUYC4KLy8vICAgfQovLy8KY2xhc3MgVHlwZVVzZUdlbmVyYXRvciBleHRlbmRzIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIHsKICBmaW5hbCBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uOwoKICBUeXBlVXNlR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5kZWNsYXJhdGlvbiwgU3RyaW5nIHBsYWluTmFtZUZvclJlYWQpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbiwgbnVsbCwgcGxhaW5OYW1lRm9yUmVhZCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiVHlwZVVzZUdlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIFR5cGVCdWlsZGVyIGJ1aWxkVHlwZVdpdGhSZXNvbHZlZEFyZ3VtZW50cyhMaXN0PFVucmVzb2x2ZWRUeXBlPiBhcmd1bWVudHMpIHsKICAgIGlmIChkZWNsYXJhdGlvbi5pc0V4dGVuc2lvbikgewogICAgICAvLyBFeHRlbnNpb24gZGVjbGFyYXRpb25zIGNhbm5vdCBiZSB1c2VkIGFzIHR5cGVzLgogICAgICByZXR1cm4gc3VwZXIuYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICB9CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgaW50IGV4cGVjdGVkID0gZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc0NvdW50OwogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBlY3RlZCkgewogICAgICAgIC8vIEJ1aWxkIHRoZSB0eXBlIGFyZ3VtZW50cyB0byByZXBvcnQgYW55IGVycm9ycyB0aGV5IG1heSBoYXZlLgogICAgICAgIF9oZWxwZXIuYnVpbGREYXJ0VHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpOwogICAgICAgIF9oZWxwZXIud2FyblR5cGVBcmd1bWVudHNNaXNtYXRjaCgKICAgICAgICAgICAgZGVjbGFyYXRpb24ubmFtZSwgZXhwZWN0ZWQsIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBwcm92aWRlZCBhcmd1bWVudHMsIHdoaWNoIHdpbGwgaW4gdHVybiByZXR1cm4gdGhlCiAgICAgICAgLy8gcmF3IHR5cGUgYmVsb3cuCiAgICAgICAgLy8gVE9ETyhzaWdtdW5kKTogY2hhbmdlIHRvIHVzZSBhbiBJbnZhbGlkVHlwZSBhbmQgaW5jbHVkZSB0aGUgcmF3IHR5cGUKICAgICAgICAvLyBhcyBhIHJlY292ZXJ5IG5vZGUgb25jZSB0aGUgSVIgY2FuIHJlcHJlc2VudCBpdCAoSXNzdWUgIzI5ODQwKS4KICAgICAgICBhcmd1bWVudHMgPSBudWxsOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXNDb3VudCAhPSAwKSB7CiAgICAgIF9oZWxwZXIuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cwogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXNDb3VudCksCiAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgICBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogICAgfQoKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50QnVpbGRlcnM7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRCdWlsZGVycyA9IG5ldyBMaXN0PFR5cGVCdWlsZGVyPihhcmd1bWVudHMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudEJ1aWxkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgYXJndW1lbnRCdWlsZGVyc1tpXSA9CiAgICAgICAgICAgIF9oZWxwZXIudmFsaWRhdGVUeXBlVXNlKGFyZ3VtZW50c1tpXSwgZmFsc2UpLmJ1aWxkZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcihfcGxhaW5OYW1lRm9yUmVhZCwgYXJndW1lbnRCdWlsZGVycykKICAgICAgLi5iaW5kKGRlY2xhcmF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gaW52b2tlQ29uc3RydWN0b3IoCiAgICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIG5hbWVMYXN0VG9rZW4sCiAgICAgIENvbnN0bmVzcyBjb25zdG5lc3MpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgIGRlY2xhcmF0aW9uLAogICAgICAgIG5hbWVUb2tlbiwKICAgICAgICBuYW1lTGFzdFRva2VuLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICBuYW1lLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4obmFtZVRva2VuID8/IHRva2VuKSwKICAgICAgICBjb25zdG5lc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCBkZWNsYXJhdGlvbjogIik7CiAgICBzaW5rLndyaXRlKGRlY2xhcmF0aW9uKTsKICAgIHNpbmsud3JpdGUoIiwgcGxhaW5OYW1lRm9yUmVhZDogIik7CiAgICBzaW5rLndyaXRlKF9wbGFpbk5hbWVGb3JSZWFkKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZ2V0IGV4cHJlc3Npb24gewogICAgaWYgKHN1cGVyLmV4cHJlc3Npb24gPT0gbnVsbCkgewogICAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgICAgSW52YWxpZFR5cGVCdWlsZGVyIGRlY2xhcmF0aW9uID0gdGhpcy5kZWNsYXJhdGlvbjsKICAgICAgICBfaGVscGVyLmFkZFByb2JsZW1FcnJvcklmQ29uc3QoCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UubWVzc2FnZU9iamVjdCwgb2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgICAgIHN1cGVyLmV4cHJlc3Npb24gPSBfaGVscGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZVRocm93KG51bGwsCiAgICAgICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZVN0cmluZ0xpdGVyYWwoZGVjbGFyYXRpb24ubWVzc2FnZS5tZXNzYWdlLCB0b2tlbikpCiAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICBvZmZzZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIHN1cGVyLmV4cHJlc3Npb24gPSBfZm9yZXN0LmNyZWF0ZVR5cGVMaXRlcmFsKAogICAgICAgICAgICBfaGVscGVyLmJ1aWxkRGFydFR5cGUoCiAgICAgICAgICAgICAgICBuZXcgVW5yZXNvbHZlZFR5cGUoCiAgICAgICAgICAgICAgICAgICAgYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKG51bGwpLCBvZmZzZXQsIF91cmkpLAogICAgICAgICAgICAgICAgbm9uSW5zdGFuY2VBY2Nlc3NJc0Vycm9yOiB0cnVlKSwKICAgICAgICAgICAgdG9rZW4pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuZXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VJbnZhbGlkV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgX2hlbHBlci50aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKHRva2VuKSwKICAgICAgICAgICAgX3BsYWluTmFtZUZvclJlYWQsCiAgICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPlt2YWx1ZV0sIG51bGwpCiAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gdmFsdWUuZmlsZU9mZnNldCwKICAgICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgICBpc1NldHRlcjogdHJ1ZSksCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIGJ1aWxkUHJvcGVydHlBY2Nlc3MoCiAgICAgIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHNlbmQsIGludCBvcGVyYXRvck9mZnNldCwgYm9vbCBpc051bGxBd2FyZSkgewogICAgLy8gYFNvbWVUeXBlPy50b1N0cmluZ2AgaXMgdGhlIHNhbWUgYXMgYFNvbWVUeXBlLnRvU3RyaW5nYCwgbm90CiAgICAvLyBgKFNvbWVUeXBlKS50b1N0cmluZ2AuCiAgICBpc051bGxBd2FyZSA9IGZhbHNlOwoKICAgIE5hbWUgbmFtZSA9IHNlbmQubmFtZTsKICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPSBzZW5kLmFyZ3VtZW50czsKCiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIENsYXNzQnVpbGRlciBkZWNsYXJhdGlvbiA9IHRoaXMuZGVjbGFyYXRpb247CiAgICAgIEJ1aWxkZXIgbWVtYmVyID0gZGVjbGFyYXRpb24uZmluZFN0YXRpY0J1aWxkZXIoCiAgICAgICAgICBuYW1lLm5hbWUsIG9mZnNldEZvclRva2VuKHNlbmQudG9rZW4pLCBfdXJpLCBfaGVscGVyLmxpYnJhcnkpOwoKICAgICAgR2VuZXJhdG9yIGdlbmVyYXRvcjsKICAgICAgaWYgKG1lbWJlciA9PSBudWxsKSB7CiAgICAgICAgLy8gSWYgd2UgZmluZCBhIHNldHRlciwgW21lbWJlcl0gaXMgYW4gW0FjY2Vzc0Vycm9yQnVpbGRlcl0sIG5vdCBudWxsLgogICAgICAgIGlmIChzZW5kIGlzIEluY29tcGxldGVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcikgewogICAgICAgICAgZ2VuZXJhdG9yID0gbmV3IFVucmVzb2x2ZWROYW1lR2VuZXJhdG9yKF9oZWxwZXIsIHNlbmQudG9rZW4sIG5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gX2hlbHBlci5idWlsZENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgICBkZWNsYXJhdGlvbiwKICAgICAgICAgICAgICBzZW5kLnRva2VuLAogICAgICAgICAgICAgIHNlbmQudG9rZW4sCiAgICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICAgIG5hbWUubmFtZSwKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgQ29uc3RuZXNzLmltcGxpY2l0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIEFtYmlndW91c0J1aWxkZXIpIHsKICAgICAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgIG1lbWJlci5tZXNzYWdlLCBtZW1iZXIuY2hhck9mZnNldCwgbmFtZS5uYW1lLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgQnVpbGRlciBzZXR0ZXI7CiAgICAgICAgaWYgKG1lbWJlci5pc1NldHRlcikgewogICAgICAgICAgc2V0dGVyID0gbWVtYmVyOwogICAgICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgICAgICBzZXR0ZXIgPSBkZWNsYXJhdGlvbi5maW5kU3RhdGljQnVpbGRlcigKICAgICAgICAgICAgICBuYW1lLm5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSwgX2hlbHBlci5saWJyYXJ5LAogICAgICAgICAgICAgIGlzU2V0dGVyOiB0cnVlKTsKICAgICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICBpZiAobWVtYmVyLmlzRmluYWwgfHwgbWVtYmVyLmlzQ29uc3QpIHsKICAgICAgICAgICAgc2V0dGVyID0gZGVjbGFyYXRpb24uZmluZFN0YXRpY0J1aWxkZXIoCiAgICAgICAgICAgICAgICBuYW1lLm5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSwgX2hlbHBlci5saWJyYXJ5LAogICAgICAgICAgICAgICAgaXNTZXR0ZXI6IHRydWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2V0dGVyID0gbWVtYmVyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZW5lcmF0b3IgPSBuZXcgU3RhdGljQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyKAogICAgICAgICAgICBfaGVscGVyLCBtZW1iZXIsIHNlbmQudG9rZW4sIHNldHRlcik7CiAgICAgIH0KCiAgICAgIHJldHVybiBhcmd1bWVudHMgPT0gbnVsbAogICAgICAgICAgPyBnZW5lcmF0b3IKICAgICAgICAgIDogZ2VuZXJhdG9yLmRvSW52b2NhdGlvbihvZmZzZXRGb3JUb2tlbihzZW5kLnRva2VuKSwgYXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBzdXBlci5idWlsZFByb3BlcnR5QWNjZXNzKHNlbmQsIG9wZXJhdG9yT2Zmc2V0LCBpc051bGxBd2FyZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZENvbnN0cnVjdG9ySW52b2NhdGlvbihkZWNsYXJhdGlvbiwgdG9rZW4sIHRva2VuLAogICAgICAgIGFyZ3VtZW50cywgIiIsIG51bGwsIHRva2VuLmNoYXJPZmZzZXQsIENvbnN0bmVzcy5pbXBsaWNpdCk7CiAgfQp9CgovLy8gW1JlYWRPbmx5QWNjZXNzR2VuZXJhdG9yXSByZXByZXNlbnRzIHRoZSBzdWJleHByZXNzaW9uIHdob3NlIHByZWZpeCBpcyB0aGUKLy8vIG5hbWUgb2YgZmluYWwgbG9jYWwgdmFyaWFibGUsIGZpbmFsIHBhcmFtZXRlciwgb3IgY2F0Y2ggY2xhdXNlIHZhcmlhYmxlIG9yCi8vLyBgdGhpc2AgaW4gYW4gaW5zdGFuY2UgbWV0aG9kIGluIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbi4KLy8vCi8vLyBGb3IgaW5zdGFuY2U6Ci8vLwovLy8gICBtZXRob2QoZmluYWwgYSkgewovLy8gICAgIGZpbmFsIGIgPSBudWxsOwovLy8gICAgIGE7ICAgICAgICAgLy8gYSBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAuCi8vLyAgICAgYVtdOyAgICAgICAvLyBhIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhYC4KLy8vICAgICBiKCk7ICAgICAgIC8vIGEgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGJgLgovLy8gICAgIGIuYyA9IGEuZDsgLy8gYSBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAgYW5kIGBiYC4KLy8vCi8vLyAgICAgdHJ5IHsKLy8vICAgICB9IGNhdGNoIChhKSB7Ci8vLyAgICAgICBhOyAgICAgICAvLyBhIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhYC4KLy8vICAgICB9Ci8vLyAgIH0KLy8vCi8vLyAgIGV4dGVuc2lvbiBvbiBGb28gewovLy8gICAgIG1ldGhvZCgpIHsKLy8vICAgICAgIHRoaXM7ICAgICAgICAgLy8gYSBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgdGhpc2AuCi8vLyAgICAgICB0aGlzLmE7ICAgICAgIC8vIGEgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgICAgdGhpcy5iKCk7ICAgICAvLyBhIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzYC4KLy8vICAgICB9Ci8vLyAgIH0KLy8vCmNsYXNzIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgX3BsYWluTmFtZUZvclJlYWQ7CgogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YWx1ZTsKCiAgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLmV4cHJlc3Npb24sIHRoaXMuX3BsYWluTmFtZUZvclJlYWQpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlUmVhZCgpID0+IGV4cHJlc3Npb247CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHZhbHVlID8/PSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShleHByZXNzaW9uKTsKICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfZmluaXNoKAogICAgICAgICAgRXhwcmVzc2lvbiBib2R5LCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSA9PgogICAgICBzdXBlci5fZmluaXNoKG1ha2VMZXQodmFsdWUsIGJvZHkpLCBjb21wbGV4QXNzaWdubWVudCk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbihidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywKICAgICAgICBhZGp1c3RGb3JJbXBsaWNpdENhbGwoX3BsYWluTmFtZUZvclJlYWQsIG9mZnNldCksCiAgICAgICAgaXNJbXBsaWNpdENhbGw6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgTmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lcyA9IG5ldyBOYW1lU3lzdGVtKCk7CiAgICBzaW5rLndyaXRlKCIsIGV4cHJlc3Npb246ICIpOwogICAgcHJpbnROb2RlT24oZXhwcmVzc2lvbiwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgcGxhaW5OYW1lRm9yUmVhZDogIik7CiAgICBzaW5rLndyaXRlKF9wbGFpbk5hbWVGb3JSZWFkKTsKICAgIHNpbmsud3JpdGUoIiwgdmFsdWU6ICIpOwogICAgcHJpbnROb2RlT24odmFsdWUsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBFcnJvbmVvdXNFeHByZXNzaW9uR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBFcnJvbmVvdXNFeHByZXNzaW9uR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbikKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgLy8vIFBhc3MgW2FyZ3VtZW50c10gdGhhdCBtdXN0IGJlIGV2YWx1YXRlZCBiZWZvcmUgdGhyb3dpbmcgYW4gZXJyb3IuICBBdAogIC8vLyBtb3N0IG9uZSBvZiBbaXNHZXR0ZXJdIGFuZCBbaXNTZXR0ZXJdIHNob3VsZCBiZSB0cnVlIGFuZCB0aGV5J3JlIHBhc3NlZAogIC8vLyB0byBbRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlci50aHJvd05vU3VjaE1ldGhvZEVycm9yXSBpZiBpdCBpcyB1c2VkLgogIEV4cHJlc3Npb24gYnVpbGRFcnJvcihBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICB7Ym9vbCBpc0dldHRlcjogZmFsc2UsIGJvb2wgaXNTZXR0ZXI6IGZhbHNlLCBpbnQgb2Zmc2V0fSk7CgogIE5hbWUgZ2V0IG5hbWUgPT4gdW5zdXBwb3J0ZWQoIm5hbWUiLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmkpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IG5hbWUubmFtZTsKCiAgd2l0aFJlY2VpdmVyKE9iamVjdCByZWNlaXZlciwgaW50IG9wZXJhdG9yT2Zmc2V0LCB7Ym9vbCBpc051bGxBd2FyZX0pID0+IHRoaXM7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIGJ1aWxkRmllbGRJbml0aWFsaXplcihNYXA8U3RyaW5nLCBpbnQ+IGluaXRpYWxpemVkRmllbGRzKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZEludmFsaWRJbml0aWFsaXplcihfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIGJ1aWxkRXJyb3IoX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHNFbXB0eSh0b2tlbiksIGlzU2V0dGVyOiB0cnVlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBidWlsZEVycm9yKGFyZ3VtZW50cywgb2Zmc2V0OiBvZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYnVpbGRQcm9wZXJ0eUFjY2VzcygKICAgICAgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3Igc2VuZCwgaW50IG9wZXJhdG9yT2Zmc2V0LCBib29sIGlzTnVsbEF3YXJlKSB7CiAgICByZXR1cm4gc2VuZC53aXRoUmVjZWl2ZXIoYnVpbGRTaW1wbGVSZWFkKCksIG9wZXJhdG9yT2Zmc2V0LAogICAgICAgIGlzTnVsbEF3YXJlOiBpc051bGxBd2FyZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gYnVpbGRFcnJvcihfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyg8RXhwcmVzc2lvbj5bdmFsdWVdLCB0b2tlbiksCiAgICAgICAgaXNTZXR0ZXI6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZENvbXBvdW5kQXNzaWdubWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICB7aW50IG9mZnNldDogLTEsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0LAogICAgICBib29sIGlzUHJlSW5jRGVjOiBmYWxzZSwKICAgICAgYm9vbCBpc1Bvc3RJbmNEZWM6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoPEV4cHJlc3Npb24+W3ZhbHVlXSwgdG9rZW4pLAogICAgICAgIGlzR2V0dGVyOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRQcmVmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IC0xLCBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiBidWlsZEVycm9yKAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPlsKICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlSW50TGl0ZXJhbCgxLCBudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldAogICAgICAgIF0sIHRva2VuKSwKICAgICAgICBpc0dldHRlcjogdHJ1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFBvc3RmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IC0xLCBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiBidWlsZEVycm9yKAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPlsKICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlSW50TGl0ZXJhbCgxLCBudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldAogICAgICAgIF0sIHRva2VuKSwKICAgICAgICBpc0dldHRlcjogdHJ1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZE51bGxBd2FyZUFzc2lnbm1lbnQoCiAgICAgIEV4cHJlc3Npb24gdmFsdWUsIERhcnRUeXBlIHR5cGUsIGludCBvZmZzZXQsCiAgICAgIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHJldHVybiBidWlsZEVycm9yKF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPlt2YWx1ZV0sIHRva2VuKSwKICAgICAgICBpc1NldHRlcjogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBidWlsZEVycm9yKF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzRW1wdHkodG9rZW4pLCBpc0dldHRlcjogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFJlYWQoKSB7CiAgICByZXR1cm4gYnVpbGRFcnJvcihfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50c0VtcHR5KHRva2VuKSwgaXNHZXR0ZXI6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gYnVpbGRFcnJvcihfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyg8RXhwcmVzc2lvbj5bdmFsdWVdLCB0b2tlbiksCiAgICAgICAgaXNTZXR0ZXI6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBpbnZva2VDb25zdHJ1Y3RvcigKICAgICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFRva2VuIG5hbWVUb2tlbiwKICAgICAgVG9rZW4gbmFtZUxhc3RUb2tlbiwKICAgICAgQ29uc3RuZXNzIGNvbnN0bmVzcykgewogICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhc3NlcnQoX2ZvcmVzdC5hcmd1bWVudHNUeXBlQXJndW1lbnRzKGFyZ3VtZW50cykuaXNFbXB0eSk7CiAgICAgIF9mb3Jlc3QuYXJndW1lbnRzU2V0VHlwZUFyZ3VtZW50cygKICAgICAgICAgIGFyZ3VtZW50cywgX2hlbHBlci5idWlsZERhcnRUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpKTsKICAgIH0KICAgIHJldHVybiBfaGVscGVyLndyYXBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRFcnJvcihhcmd1bWVudHMpKSwKICAgICAgICBudWxsLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbikpOwogIH0KfQoKY2xhc3MgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IgZXh0ZW5kcyBFcnJvbmVvdXNFeHByZXNzaW9uR2VuZXJhdG9yIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBOYW1lIG5hbWU7CgogIGZhY3RvcnkgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgTmFtZSBuYW1lKSB7CiAgICBpZiAobmFtZS5uYW1lLmlzRW1wdHkpIHsKICAgICAgdW5oYW5kbGVkKCJlbXB0eSIsICJuYW1lIiwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBoZWxwZXIudXJpKTsKICAgIH0KICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IuaW50ZXJuYWwoaGVscGVyLCB0b2tlbiwgbmFtZSk7CiAgfQoKICBVbnJlc29sdmVkTmFtZUdlbmVyYXRvci5pbnRlcm5hbCgKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCB0aGlzLm5hbWUpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgY2hhck9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uKAogICAgICAgIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgIGJ1aWxkRXJyb3IoYXJndW1lbnRzLCBvZmZzZXQ6IGNoYXJPZmZzZXQpKSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgYXJndW1lbnRzLmZpbGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEVycm9yKEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzR2V0dGVyOiBmYWxzZSwgYm9vbCBpc1NldHRlcjogZmFsc2UsIGludCBvZmZzZXR9KSB7CiAgICBvZmZzZXQgPz89IG9mZnNldEZvclRva2VuKHRoaXMudG9rZW4pOwogICAgcmV0dXJuIF9oZWxwZXIud3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgX2hlbHBlci50aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICBfcGxhaW5OYW1lRm9yUmVhZCwKICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgIGlzR2V0dGVyOiBpc0dldHRlciwKICAgICAgICAgICAgaXNTZXR0ZXI6IGlzU2V0dGVyKSwKICAgICAgICBvZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgLyogRXhwcmVzc2lvbiB8IEdlbmVyYXRvciAqLyBPYmplY3QgcXVhbGlmaWVkTG9va3VwKFRva2VuIG5hbWUpIHsKICAgIHJldHVybiBuZXcgVW5leHBlY3RlZFF1YWxpZmllZFVzZUdlbmVyYXRvcihfaGVscGVyLCBuYW1lLCB0aGlzLCB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRBc3NpZ25tZW50KEV4cHJlc3Npb24gdmFsdWUsIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHJldHVybiBfYnVpbGRVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KGZhbHNlLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsIEV4cHJlc3Npb24gdmFsdWUsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXQsCiAgICAgIGJvb2wgaXNQcmVJbmNEZWM6IGZhbHNlLAogICAgICBib29sIGlzUG9zdEluY0RlYzogZmFsc2V9KSB7CiAgICByZXR1cm4gX2J1aWxkVW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudCh0cnVlLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBidWlsZEVycm9yKF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzRW1wdHkodG9rZW4pLCBpc0dldHRlcjogdHJ1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gdG9rZW4uY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgbmFtZTogIik7CiAgICBzaW5rLndyaXRlKG5hbWUubmFtZSk7CiAgfQoKICBFeHByZXNzaW9uIF9idWlsZFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnQoCiAgICAgIGJvb2wgaXNDb21wb3VuZCwgRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnQoCiAgICAgICAgX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZEVycm9yKAogICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyg8RXhwcmVzc2lvbj5bdmFsdWVdLCB0b2tlbiksCiAgICAgICAgICAgIGlzU2V0dGVyOiB0cnVlKSksCiAgICAgICAgaXNDb21wb3VuZCwKICAgICAgICB2YWx1ZSwKICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0KTsKICB9Cn0KCmNsYXNzIFVubGlua2VkR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBVbmxpbmtlZERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwoKICBmaW5hbCBFeHByZXNzaW9uIHJlY2VpdmVyOwoKICBmaW5hbCBOYW1lIG5hbWU7CgogIFVubGlua2VkR2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMuZGVjbGFyYXRpb24pCiAgICAgIDogbmFtZSA9IG5ldyBOYW1lKGRlY2xhcmF0aW9uLm5hbWUsIGhlbHBlci5saWJyYXJ5LnRhcmdldCksCiAgICAgICAgcmVjZWl2ZXIgPSBuZXcgSW52YWxpZEV4cHJlc3Npb24oZGVjbGFyYXRpb24ubmFtZSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBkZWNsYXJhdGlvbi5uYW1lOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlVubGlua2VkR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCBuYW1lOiAiKTsKICAgIHNpbmsud3JpdGUoZGVjbGFyYXRpb24ubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IFByb3BlcnR5U2V0KHJlY2VpdmVyLCBuYW1lLCB2YWx1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gbmV3IFByb3BlcnR5R2V0KHJlY2VpdmVyLCBuYW1lKS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZG9JbnZvY2F0aW9uIiwgb2Zmc2V0LCBfdXJpKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIENvbnRleHRBd2FyZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgR2VuZXJhdG9yIGdlbmVyYXRvcjsKCiAgQ29udGV4dEF3YXJlR2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMuZ2VuZXJhdG9yKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgicGxhaW5OYW1lRm9yUmVhZCIsIHRva2VuLmNoYXJPZmZzZXQsIF9oZWxwZXIudXJpKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBjaGFyT2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gdW5oYW5kbGVkKCIke3J1bnRpbWVUeXBlfSIsICJkb0ludm9jYXRpb24iLCBjaGFyT2Zmc2V0LCBfdXJpKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRBc3NpZ25tZW50KEV4cHJlc3Npb24gdmFsdWUsIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHJldHVybiBfbWFrZUludmFsaWRXcml0ZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIF9tYWtlSW52YWxpZFdyaXRlKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IC0xLAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHJldHVybiBfbWFrZUludmFsaWRXcml0ZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkUHJlZml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiAtMSwgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gX21ha2VJbnZhbGlkV3JpdGUobnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkUG9zdGZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogLTEsIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLCBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIF9tYWtlSW52YWxpZFdyaXRlKG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgX21ha2VJbnZhbGlkUmVhZCgpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgibWFrZUludmFsaWRSZWFkIiwgdG9rZW4uY2hhck9mZnNldCwgX2hlbHBlci51cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0obWVzc2FnZUlsbGVnYWxBc3NpZ25tZW50VG9Ob25Bc3NpZ25hYmxlLAogICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKTsKICB9Cn0KCmNsYXNzIERlbGF5ZWRBc3NpZ25tZW50IGV4dGVuZHMgQ29udGV4dEF3YXJlR2VuZXJhdG9yIHsKICBmaW5hbCBFeHByZXNzaW9uIHZhbHVlOwoKICBTdHJpbmcgYXNzaWdubWVudE9wZXJhdG9yOwoKICBEZWxheWVkQXNzaWdubWVudChFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIEdlbmVyYXRvciBnZW5lcmF0b3IsIHRoaXMudmFsdWUsIHRoaXMuYXNzaWdubWVudE9wZXJhdG9yKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4sIGdlbmVyYXRvcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiRGVsYXllZEFzc2lnbm1lbnQiOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBoYW5kbGVBc3NpZ25tZW50KGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRGb3JFZmZlY3QoKSB7CiAgICByZXR1cm4gaGFuZGxlQXNzaWdubWVudCh0cnVlKTsKICB9CgogIEV4cHJlc3Npb24gaGFuZGxlQXNzaWdubWVudChib29sIHZvaWRDb250ZXh0KSB7CiAgICBpZiAoX2hlbHBlci5jb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUpIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb24sIG9mZnNldEZvclRva2VuKHRva2VuKSwgdG9rZW4ubGVuZ3RoKTsKICAgIH0KICAgIGlmIChpZGVudGljYWwoIj0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRBc3NpZ25tZW50KHZhbHVlLCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIis9IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KHBsdXNOYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIi09IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KG1pbnVzTmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCIqPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChtdWx0aXBseU5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiJT0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQocGVyY2VudE5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiJj0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoYW1wZXJzYW5kTmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCIvPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChkaXZpc2lvbk5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiPDw9IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KGxlZnRTaGlmdE5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiPj49IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KHJpZ2h0U2hpZnROYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIj4+Pj0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQodHJpcGxlU2hpZnROYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIj8/PSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZE51bGxBd2FyZUFzc2lnbm1lbnQoCiAgICAgICAgICB2YWx1ZSwgY29uc3QgRHluYW1pY1R5cGUoKSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCJePSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChjYXJldE5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgifD0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoYmFyTmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCJ+Lz0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQobXVzdGFjaGVOYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZChhc3NpZ25tZW50T3BlcmF0b3IsICJoYW5kbGVBc3NpZ25tZW50IiwgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgIF9oZWxwZXIudXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIGJ1aWxkRmllbGRJbml0aWFsaXplcihNYXA8U3RyaW5nLCBpbnQ+IGluaXRpYWxpemVkRmllbGRzKSB7CiAgICBpZiAoIWlkZW50aWNhbCgiPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikgfHwKICAgICAgICBnZW5lcmF0b3IgaXMhIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcikgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkRmllbGRJbml0aWFsaXplcihpbml0aWFsaXplZEZpZWxkcyk7CiAgICB9CiAgICByZXR1cm4gX2hlbHBlci5idWlsZEZpZWxkSW5pdGlhbGl6ZXIoZmFsc2UsIGdlbmVyYXRvci5fcGxhaW5OYW1lRm9yUmVhZCwKICAgICAgICBvZmZzZXRGb3JUb2tlbihnZW5lcmF0b3IudG9rZW4pLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgdmFsdWU6ICIpOwogICAgcHJpbnROb2RlT24odmFsdWUsIHNpbmspOwogICAgc2luay53cml0ZSgiLCBhc3NpZ25tZW50T3BlcmF0b3I6ICIpOwogICAgc2luay53cml0ZShhc3NpZ25tZW50T3BlcmF0b3IpOwogIH0KfQoKY2xhc3MgRGVsYXllZFBvc3RmaXhJbmNyZW1lbnQgZXh0ZW5kcyBDb250ZXh0QXdhcmVHZW5lcmF0b3IgewogIGZpbmFsIE5hbWUgYmluYXJ5T3BlcmF0b3I7CgogIGZpbmFsIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXQ7CgogIERlbGF5ZWRQb3N0Zml4SW5jcmVtZW50KEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgR2VuZXJhdG9yIGdlbmVyYXRvciwgdGhpcy5iaW5hcnlPcGVyYXRvciwgdGhpcy5pbnRlcmZhY2VUYXJnZXQpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbiwgZ2VuZXJhdG9yKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJEZWxheWVkUG9zdGZpeEluY3JlbWVudCI7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZFBvc3RmaXhJbmNyZW1lbnQoYmluYXJ5T3BlcmF0b3IsCiAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICAgIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRGb3JFZmZlY3QoKSB7CiAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkUG9zdGZpeEluY3JlbWVudChiaW5hcnlPcGVyYXRvciwKICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICB2b2lkQ29udGV4dDogdHJ1ZSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGludGVyZmFjZVRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIGJpbmFyeU9wZXJhdG9yOiAiKTsKICAgIHNpbmsud3JpdGUoYmluYXJ5T3BlcmF0b3IubmFtZSk7CiAgICBzaW5rLndyaXRlKCIsIGludGVyZmFjZVRhcmdldDogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihpbnRlcmZhY2VUYXJnZXQsIHNpbmspOwogIH0KfQoKY2xhc3MgUHJlZml4VXNlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBQcmVmaXhCdWlsZGVyIHByZWZpeDsKCiAgUHJlZml4VXNlR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5wcmVmaXgpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gcHJlZml4Lm5hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiUHJlZml4VXNlR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSA9PiBfbWFrZUludmFsaWRSZWFkKCk7CgogIEBvdmVycmlkZQogIC8qIEV4cHJlc3Npb24gfCBHZW5lcmF0b3IgKi8gT2JqZWN0IHF1YWxpZmllZExvb2t1cChUb2tlbiBuYW1lKSB7CiAgICBpZiAoX2hlbHBlci5jb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYgcHJlZml4LmRlZmVycmVkKSB7CiAgICAgIF9oZWxwZXIuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudC53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGxlbmd0aEZvclRva2VuKHRva2VuKSk7CiAgICB9CiAgICBPYmplY3QgcmVzdWx0ID0gX2hlbHBlci5zY29wZUxvb2t1cChwcmVmaXguZXhwb3J0U2NvcGUsIG5hbWUubGV4ZW1lLCBuYW1lLAogICAgICAgIGlzUXVhbGlmaWVkOiB0cnVlLCBwcmVmaXg6IHByZWZpeCk7CiAgICBpZiAocHJlZml4LmRlZmVycmVkKSB7CiAgICAgIGlmIChyZXN1bHQgaXMgR2VuZXJhdG9yKSB7CiAgICAgICAgaWYgKHJlc3VsdCBpcyEgTG9hZExpYnJhcnlHZW5lcmF0b3IpIHsKICAgICAgICAgIHJlc3VsdCA9IG5ldyBEZWZlcnJlZEFjY2Vzc0dlbmVyYXRvcihfaGVscGVyLCBuYW1lLCB0aGlzLCByZXN1bHQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfaGVscGVyLndyYXBJbkRlZmVycmVkQ2hlY2socmVzdWx0LCBwcmVmaXgsIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICAvKiBFeHByZXNzaW9uIHwgR2VuZXJhdG9yIHwgSW5pdGlhbGl6ZXIgKi8gZG9JbnZvY2F0aW9uKAogICAgICBpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwSW5Mb2NhdGVkUHJvYmxlbSgKICAgICAgICBfaGVscGVyLmV2YWx1YXRlQXJndW1lbnRzQmVmb3JlKAogICAgICAgICAgICBhcmd1bWVudHMsIF9mb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwodG9rZW4pKSwKICAgICAgICBtZXNzYWdlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbi53aXRoTG9jYXRpb24oCiAgICAgICAgICAgIF9oZWxwZXIudXJpLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgLyogRXhwcmVzc2lvbiB8IEdlbmVyYXRvciAqLyBidWlsZFByb3BlcnR5QWNjZXNzKAogICAgICBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciBzZW5kLCBpbnQgb3BlcmF0b3JPZmZzZXQsIGJvb2wgaXNOdWxsQXdhcmUpIHsKICAgIGlmIChzZW5kIGlzIEluY29tcGxldGVTZW5kR2VuZXJhdG9yKSB7CiAgICAgIGFzc2VydChzZW5kLm5hbWUubmFtZSA9PSBzZW5kLnRva2VuLmxleGVtZSwKICAgICAgICAgICInJHtzZW5kLm5hbWUubmFtZX0nICE9ICR7c2VuZC50b2tlbi5sZXhlbWV9Iik7CiAgICAgIE9iamVjdCByZXN1bHQgPSBxdWFsaWZpZWRMb29rdXAoc2VuZC50b2tlbik7CiAgICAgIGlmIChzZW5kIGlzIFNlbmRBY2Nlc3NHZW5lcmF0b3IpIHsKICAgICAgICByZXN1bHQgPSBfaGVscGVyLmZpbmlzaFNlbmQoCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgc2VuZC5hcmd1bWVudHMgYXMgZHluYW1pYyAvKiBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzIGNhc3QuICovLAogICAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbikpOwogICAgICB9CiAgICAgIGlmIChpc051bGxBd2FyZSkgewogICAgICAgIHJlc3VsdCA9IF9oZWxwZXIud3JhcEluTG9jYXRlZFByb2JsZW0oCiAgICAgICAgICAgIF9oZWxwZXIudG9WYWx1ZShyZXN1bHQpLAogICAgICAgICAgICBtZXNzYWdlQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmUud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgX2hlbHBlci51cmksIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBidWlsZFNpbXBsZVJlYWQoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VJbnZhbGlkUmVhZCgpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbShtZXNzYWdlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbiwKICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFdyaXRlKEV4cHJlc3Npb24gdmFsdWUpID0+IF9tYWtlSW52YWxpZFJlYWQoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCBwcmVmaXg6ICIpOwogICAgc2luay53cml0ZShwcmVmaXgubmFtZSk7CiAgICBzaW5rLndyaXRlKCIsIGRlZmVycmVkOiAiKTsKICAgIHNpbmsud3JpdGUocHJlZml4LmRlZmVycmVkKTsKICB9Cn0KCmNsYXNzIFVuZXhwZWN0ZWRRdWFsaWZpZWRVc2VHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIEdlbmVyYXRvciBwcmVmaXhHZW5lcmF0b3I7CgogIGZpbmFsIGJvb2wgaXNVbnJlc29sdmVkOwoKICBVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5wcmVmaXhHZW5lcmF0b3IsIHRoaXMuaXNVbnJlc29sdmVkKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkIHsKICAgIHJldHVybiAiJHtwcmVmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWR9LiR7dG9rZW4ubGV4ZW1lfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlVuZXhwZWN0ZWRRdWFsaWZpZWRVc2VHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpID0+IF9tYWtlSW52YWxpZFJlYWQoKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgX2hlbHBlci50aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICBfcGxhaW5OYW1lRm9yUmVhZCwKICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbikpLAogICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlQnVpbGRlciBidWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHMoTGlzdDxVbnJlc29sdmVkVHlwZT4gYXJndW1lbnRzKSB7CiAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZywgU3RyaW5nKT4gdGVtcGxhdGUgPSBpc1VucmVzb2x2ZWQKICAgICAgICA/IHRlbXBsYXRlVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24KICAgICAgICA6IHRlbXBsYXRlTm90QVByZWZpeEluVHlwZUFubm90YXRpb247CiAgICBOYW1lZFR5cGVCdWlsZGVyIHJlc3VsdCA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKF9wbGFpbk5hbWVGb3JSZWFkLCBudWxsKTsKICAgIE1lc3NhZ2UgbWVzc2FnZSA9CiAgICAgICAgdGVtcGxhdGUud2l0aEFyZ3VtZW50cyhwcmVmaXhHZW5lcmF0b3IudG9rZW4ubGV4ZW1lLCB0b2tlbi5sZXhlbWUpOwogICAgX2hlbHBlci5saWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgb2Zmc2V0Rm9yVG9rZW4ocHJlZml4R2VuZXJhdG9yLnRva2VuKSwKICAgICAgICBsZW5ndGhPZlNwYW4ocHJlZml4R2VuZXJhdG9yLnRva2VuLCB0b2tlbiksIF91cmkpOwogICAgcmVzdWx0LmJpbmQocmVzdWx0LmJ1aWxkSW52YWxpZFR5cGUobWVzc2FnZS53aXRoTG9jYXRpb24oCiAgICAgICAgX3VyaSwKICAgICAgICBvZmZzZXRGb3JUb2tlbihwcmVmaXhHZW5lcmF0b3IudG9rZW4pLAogICAgICAgIGxlbmd0aE9mU3BhbihwcmVmaXhHZW5lcmF0b3IudG9rZW4sIHRva2VuKSkpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIHByZWZpeEdlbmVyYXRvcjogIik7CiAgICBwcmVmaXhHZW5lcmF0b3IucHJpbnRPbihzaW5rKTsKICB9Cn0KCmNsYXNzIFBhcnNlckVycm9yR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBNZXNzYWdlIG1lc3NhZ2U7CgogIFBhcnNlckVycm9yR2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMubWVzc2FnZSkKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiAiI3BhcnNlci1lcnJvciI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiUGFyc2VyRXJyb3JHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7fQoKICBFeHByZXNzaW9uIGJ1aWxkUHJvYmxlbSgpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbShtZXNzYWdlLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIG5vTGVuZ3RoLAogICAgICAgIHN1cHByZXNzTWVzc2FnZTogdHJ1ZSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpID0+IGJ1aWxkUHJvYmxlbSgpOwoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gYnVpbGRQcm9ibGVtKCk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZENvbXBvdW5kQXNzaWdubWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0LAogICAgICBib29sIGlzUHJlSW5jRGVjOiBmYWxzZSwKICAgICAgYm9vbCBpc1Bvc3RJbmNEZWM6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFByZWZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFBvc3RmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiBidWlsZFByb2JsZW0oKTsKICB9CgogIEV4cHJlc3Npb24gX21ha2VJbnZhbGlkUmVhZCgpID0+IGJ1aWxkUHJvYmxlbSgpOwoKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFdyaXRlKEV4cHJlc3Npb24gdmFsdWUpID0+IGJ1aWxkUHJvYmxlbSgpOwoKICBJbml0aWFsaXplciBidWlsZEZpZWxkSW5pdGlhbGl6ZXIoTWFwPFN0cmluZywgaW50PiBpbml0aWFsaXplZEZpZWxkcykgewogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oKSkpOwogIH0KCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFByb3BlcnR5QWNjZXNzKAogICAgICBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciBzZW5kLCBpbnQgb3BlcmF0b3JPZmZzZXQsIGJvb2wgaXNOdWxsQXdhcmUpIHsKICAgIHJldHVybiBidWlsZFByb2JsZW0oKTsKICB9CgogIFR5cGVCdWlsZGVyIGJ1aWxkVHlwZVdpdGhSZXNvbHZlZEFyZ3VtZW50cyhMaXN0PFVucmVzb2x2ZWRUeXBlPiBhcmd1bWVudHMpIHsKICAgIE5hbWVkVHlwZUJ1aWxkZXIgcmVzdWx0ID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIodG9rZW4ubGV4ZW1lLCBudWxsKTsKICAgIF9oZWxwZXIubGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIG9mZnNldEZvclRva2VuKHRva2VuKSwgbm9MZW5ndGgsIF91cmkpOwogICAgcmVzdWx0LmJpbmQocmVzdWx0LmJ1aWxkSW52YWxpZFR5cGUoCiAgICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24oX3VyaSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBub0xlbmd0aCkpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFeHByZXNzaW9uIHF1YWxpZmllZExvb2t1cChUb2tlbiBuYW1lKSB7CiAgICByZXR1cm4gYnVpbGRQcm9ibGVtKCk7CiAgfQoKICBFeHByZXNzaW9uIGludm9rZUNvbnN0cnVjdG9yKAogICAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBuYW1lTGFzdFRva2VuLAogICAgICBDb25zdG5lc3MgY29uc3RuZXNzKSB7CiAgICByZXR1cm4gYnVpbGRQcm9ibGVtKCk7CiAgfQp9CgovLy8gQSBbVGhpc0FjY2Vzc0dlbmVyYXRvcl0gcmVwcmVzZW50cyBhIHN1YmV4cHJlc3Npb24gd2hvc2UgcHJlZml4IGlzIGB0aGlzYAovLy8gb3IgYHN1cGVyYC4KLy8vCi8vLyBGb3IgaW5zdGFuY2UKLy8vCi8vLyAgIGNsYXNzIEMgewovLy8gICAgIHZhciBiID0gdGhpcy5jOyAvLyBhIFRoaXNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgIHZhciBjOwovLy8gICAgIEModGhpcy5jKSA6ICAgICAvLyBhIFRoaXNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgICAgdGhpcy5iID0gYzsgICAvLyBhIFRoaXNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgIG1ldGhvZCgpIHsKLy8vICAgICAgIHRoaXMuYjsgICAgICAgLy8gYSBUaGlzQWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzYC4KLy8vICAgICAgIHN1cGVyLmIoKTsgICAgLy8gYSBUaGlzQWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBzdXBlcmAuCi8vLyAgICAgICB0aGlzLmIgPSBjOyAgIC8vIGEgVGhpc0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgdGhpc2AuCi8vLyAgICAgICB0aGlzLmIgKz0gYzsgIC8vIGEgVGhpc0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgdGhpc2AuCi8vLyAgICAgfQovLy8gICB9Ci8vLwovLy8gSWYgdGhpcyBgdGhpc2Agb2NjdXJzIGluIGFuIGluc3RhbmNlIG1lbWJlciBvbiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24sCi8vLyBhIFtSZWFkT25seUFjY2Vzc0dlbmVyYXRvcl0gaXMgY3JlYXRlZCBpbnN0ZWFkLgovLy8KY2xhc3MgVGhpc0FjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgLy8vIGB0cnVlYCBpZiB0aGlzIGFjY2VzcyBpcyBpbiBhbiBpbml0aWFsaXplciBsaXN0LgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgaW4gYDxpbml0PmAgaW4KICAvLy8KICAvLy8gICAgY2xhc3MgQ2xhc3MgewogIC8vLyAgICAgIENsYXNzKCkgOiA8aW5pdD47CiAgLy8vICAgIH0KICAvLy8KICBmaW5hbCBib29sIGlzSW5pdGlhbGl6ZXI7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBhY2Nlc3MgaXMgaW4gYSBmaWVsZCBpbml0aWFsaXplciBlaXRoZXIgZGlyZWN0bHkgb3Igd2l0aGluCiAgLy8vIGFuIGluaXRpYWxpemVyIGxpc3QuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBpbiBgPGluaXQ+YCBpbgogIC8vLwogIC8vLyAgICB2YXIgZm9vID0gPGluaXQ+OwogIC8vLyAgICBjbGFzcyBDbGFzcyB7CiAgLy8vICAgICAgdmFyIGJhciA9IDxpbml0PjsKICAvLy8gICAgICBDbGFzcygpIDogPGluaXQ+OwogIC8vLyAgICB9CiAgLy8vCiAgZmluYWwgYm9vbCBpbkZpZWxkSW5pdGlhbGl6ZXI7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBzdWJleHByZXNzaW9uIHJlcHJlc2VudHMgYSBgc3VwZXJgIHByZWZpeC4KICBmaW5hbCBib29sIGlzU3VwZXI7CgogIFRoaXNBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLmlzSW5pdGlhbGl6ZXIsIHRoaXMuaW5GaWVsZEluaXRpYWxpemVyLAogICAgICB7dGhpcy5pc1N1cGVyOiBmYWxzZX0pCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCIke2lzU3VwZXIgPyAnc3VwZXInIDogJ3RoaXMnfS5wbGFpbk5hbWVGb3JSZWFkIiwKICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmkpOwogIH0KCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJUaGlzQWNjZXNzR2VuZXJhdG9yIjsKCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSB7CiAgICBpZiAoIWlzU3VwZXIpIHsKICAgICAgaWYgKGluRmllbGRJbml0aWFsaXplcikgewogICAgICAgIHJldHVybiBidWlsZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcihudWxsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gX2ZvcmVzdC5jcmVhdGVUaGlzRXhwcmVzc2lvbih0b2tlbik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbShtZXNzYWdlU3VwZXJBc0V4cHJlc3Npb24sCiAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSk7CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkRmllbGRJbml0aWFsaXplckVycm9yKE1hcDxTdHJpbmcsIGludD4gaW5pdGlhbGl6ZWRGaWVsZHMpIHsKICAgIFN0cmluZyBrZXl3b3JkID0gaXNTdXBlciA/ICJzdXBlciIgOiAidGhpcyI7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgdGVtcGxhdGVUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplci53aXRoQXJndW1lbnRzKGtleXdvcmQpLAogICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICBrZXl3b3JkLmxlbmd0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplciBidWlsZEZpZWxkSW5pdGlhbGl6ZXIoTWFwPFN0cmluZywgaW50PiBpbml0aWFsaXplZEZpZWxkcykgewogICAgRXhwcmVzc2lvbiBlcnJvciA9IF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgYnVpbGRGaWVsZEluaXRpYWxpemVyRXJyb3IoaW5pdGlhbGl6ZWRGaWVsZHMpKTsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkSW52YWxpZEluaXRpYWxpemVyKGVycm9yLCBlcnJvci5maWxlT2Zmc2V0KTsKICB9CgogIGJ1aWxkUHJvcGVydHlBY2Nlc3MoCiAgICAgIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHNlbmQsIGludCBvcGVyYXRvck9mZnNldCwgYm9vbCBpc051bGxBd2FyZSkgewogICAgTmFtZSBuYW1lID0gc2VuZC5uYW1lOwogICAgQXJndW1lbnRzIGFyZ3VtZW50cyA9IHNlbmQuYXJndW1lbnRzOwogICAgaW50IG9mZnNldCA9IG9mZnNldEZvclRva2VuKHNlbmQudG9rZW4pOwogICAgaWYgKGlzSW5pdGlhbGl6ZXIgJiYgc2VuZCBpcyBTZW5kQWNjZXNzR2VuZXJhdG9yKSB7CiAgICAgIGlmIChpc051bGxBd2FyZSkgewogICAgICAgIF9oZWxwZXIuYWRkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZUludmFsaWRVc2VPZk51bGxBd2FyZUFjY2Vzcywgb3BlcmF0b3JPZmZzZXQsIDIpOwogICAgICB9CiAgICAgIHJldHVybiBidWlsZENvbnN0cnVjdG9ySW5pdGlhbGl6ZXIob2Zmc2V0LCBuYW1lLCBhcmd1bWVudHMpOwogICAgfQogICAgaWYgKGluRmllbGRJbml0aWFsaXplciAmJiAhaXNJbml0aWFsaXplcikgewogICAgICByZXR1cm4gYnVpbGRGaWVsZEluaXRpYWxpemVyRXJyb3IobnVsbCk7CiAgICB9CiAgICBNZW1iZXIgZ2V0dGVyID0gX2hlbHBlci5sb29rdXBJbnN0YW5jZU1lbWJlcihuYW1lLCBpc1N1cGVyOiBpc1N1cGVyKTsKICAgIGlmIChzZW5kIGlzIFNlbmRBY2Nlc3NHZW5lcmF0b3IpIHsKICAgICAgLy8gTm90aWNlIHRoYXQgJ3RoaXMnIG9yICdzdXBlcicgY2FuJ3QgYmUgbnVsbC4gU28gd2UgY2FuIGlnbm9yZSB0aGUKICAgICAgLy8gdmFsdWUgb2YgW2lzTnVsbEF3YXJlXS4KICAgICAgaWYgKGdldHRlciA9PSBudWxsKSB7CiAgICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZE1ldGhvZChuYW1lLCBvZmZzZXRGb3JUb2tlbihzZW5kLnRva2VuKSwKICAgICAgICAgICAgaXNTdXBlcjogaXNTdXBlcik7CiAgICAgIH0KICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKF9mb3Jlc3QuY3JlYXRlVGhpc0V4cHJlc3Npb24obnVsbCksCiAgICAgICAgICBuYW1lLCBzZW5kLmFyZ3VtZW50cywgb2Zmc2V0Rm9yVG9rZW4oc2VuZC50b2tlbiksCiAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyLCBpbnRlcmZhY2VUYXJnZXQ6IGdldHRlcik7CiAgICB9IGVsc2UgewogICAgICBNZW1iZXIgc2V0dGVyID0KICAgICAgICAgIF9oZWxwZXIubG9va3VwSW5zdGFuY2VNZW1iZXIobmFtZSwgaXNTdXBlcjogaXNTdXBlciwgaXNTZXR0ZXI6IHRydWUpOwogICAgICBpZiAoaXNTdXBlcikgewogICAgICAgIHJldHVybiBuZXcgU3VwZXJQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgICAgX2hlbHBlciwKICAgICAgICAgICAgLy8gVE9ETyhhaGUpOiBUaGlzIGlzIG5vdCB0aGUgJ3N1cGVyJyB0b2tlbi4KICAgICAgICAgICAgc2VuZC50b2tlbiwKICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgZ2V0dGVyLAogICAgICAgICAgICBzZXR0ZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgICBfaGVscGVyLAogICAgICAgICAgICAvLyBUT0RPKGFoZSk6IFRoaXMgaXMgbm90IHRoZSAndGhpcycgdG9rZW4uCiAgICAgICAgICAgIHNlbmQudG9rZW4sCiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIGdldHRlciwKICAgICAgICAgICAgc2V0dGVyKTsKICAgICAgfQogICAgfQogIH0KCiAgZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChpc0luaXRpYWxpemVyKSB7CiAgICAgIHJldHVybiBidWlsZENvbnN0cnVjdG9ySW5pdGlhbGl6ZXIob2Zmc2V0LCBuZXcgTmFtZSgiIiksIGFyZ3VtZW50cyk7CiAgICB9IGVsc2UgaWYgKGlzU3VwZXIpIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRQcm9ibGVtKG1lc3NhZ2VTdXBlckFzRXhwcmVzc2lvbiwgb2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICBfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKG51bGwpLCBjYWxsTmFtZSwgYXJndW1lbnRzLCBvZmZzZXQsCiAgICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgICB9CiAgfQoKICBJbml0aWFsaXplciBidWlsZENvbnN0cnVjdG9ySW5pdGlhbGl6ZXIoCiAgICAgIGludCBvZmZzZXQsIE5hbWUgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBfaGVscGVyLmxvb2t1cENvbnN0cnVjdG9yKG5hbWUsIGlzU3VwZXI6IGlzU3VwZXIpOwogICAgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZTsKICAgIGlmIChjb25zdHJ1Y3RvciAhPSBudWxsKSB7CiAgICAgIG1lc3NhZ2UgPSBfaGVscGVyLmNoZWNrQXJndW1lbnRzRm9yRnVuY3Rpb24oCiAgICAgICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbiwgYXJndW1lbnRzLCBvZmZzZXQsIDxUeXBlUGFyYW1ldGVyPltdKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyBmdWxsTmFtZSA9CiAgICAgICAgICBfaGVscGVyLmNvbnN0cnVjdG9yTmFtZUZvckRpYWdub3N0aWNzKG5hbWUubmFtZSwgaXNTdXBlcjogaXNTdXBlcik7CiAgICAgIG1lc3NhZ2UgPSAoaXNTdXBlcgogICAgICAgICAgICAgID8gdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvcgogICAgICAgICAgICAgIDogdGVtcGxhdGVDb25zdHJ1Y3Rvck5vdEZvdW5kKQogICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVsbE5hbWUpCiAgICAgICAgICAud2l0aExvY2F0aW9uKF91cmksIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKTsKICAgIH0KICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoX2hlbHBlci53cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgIF9oZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICAgIF9oZWxwZXIuY29uc3RydWN0b3JOYW1lRm9yRGlhZ25vc3RpY3MobmFtZS5uYW1lLAogICAgICAgICAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyKSwKICAgICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgICAgIGlzU3VwZXI6IGlzU3VwZXIsCiAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSksCiAgICAgICAgICBvZmZzZXQpKTsKICAgIH0gZWxzZSBpZiAoaXNTdXBlcikgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZFN1cGVySW5pdGlhbGl6ZXIoCiAgICAgICAgICBmYWxzZSwgY29uc3RydWN0b3IsIGFyZ3VtZW50cywgb2Zmc2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgICAgIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMsIG9mZnNldCk7CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gYnVpbGRBc3NpZ25tZW50RXJyb3IoKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGROdWxsQXdhcmVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gYnVpbGRBc3NpZ25tZW50RXJyb3IoKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHJldHVybiBidWlsZEFzc2lnbm1lbnRFcnJvcigpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFByZWZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIGJ1aWxkQXNzaWdubWVudEVycm9yKCk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkUG9zdGZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIGJ1aWxkQXNzaWdubWVudEVycm9yKCk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudEVycm9yKCkgewogICAgcmV0dXJuIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oX2hlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgaXNTdXBlciA/IG1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1N1cGVyIDogbWVzc2FnZU5vdEFuTHZhbHVlLAogICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICB0b2tlbi5sZW5ndGgpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgaXNJbml0aWFsaXplcjogIik7CiAgICBzaW5rLndyaXRlKGlzSW5pdGlhbGl6ZXIpOwogICAgc2luay53cml0ZSgiLCBpbkZpZWxkSW5pdGlhbGl6ZXI6ICIpOwogICAgc2luay53cml0ZShpbkZpZWxkSW5pdGlhbGl6ZXIpOwogICAgc2luay53cml0ZSgiLCBpc1N1cGVyOiAiKTsKICAgIHNpbmsud3JpdGUoaXNTdXBlcik7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciBpbXBsZW1lbnRzIEdlbmVyYXRvciB7CiAgTmFtZSBnZXQgbmFtZTsKCiAgd2l0aFJlY2VpdmVyKE9iamVjdCByZWNlaXZlciwgaW50IG9wZXJhdG9yT2Zmc2V0LCB7Ym9vbCBpc051bGxBd2FyZX0pOwoKICBBcmd1bWVudHMgZ2V0IGFyZ3VtZW50cyA9PiBudWxsOwp9CgpjbGFzcyBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IgZXh0ZW5kcyBFcnJvbmVvdXNFeHByZXNzaW9uR2VuZXJhdG9yCiAgICB3aXRoIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHsKICBmaW5hbCBNZXNzYWdlIG1lc3NhZ2U7CgogIEluY29tcGxldGVFcnJvckdlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCB0aGlzLm1lc3NhZ2UpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIE5hbWUgZ2V0IG5hbWUgPT4gbnVsbDsKCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiB0b2tlbi5sZXhlbWU7CgogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiSW5jb21wbGV0ZUVycm9yR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEVycm9yKEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzR2V0dGVyOiBmYWxzZSwgYm9vbCBpc1NldHRlcjogZmFsc2UsIGludCBvZmZzZXR9KSB7CiAgICBpbnQgbGVuZ3RoID0gbm9MZW5ndGg7CiAgICBpZiAob2Zmc2V0ID09IG51bGwpIHsKICAgICAgb2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgICBsZW5ndGggPSBsZW5ndGhGb3JUb2tlbih0b2tlbik7CiAgICB9CiAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0obWVzc2FnZSwgb2Zmc2V0LCBsZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpID0+IHRoaXM7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHNFbXB0eSh0b2tlbiksIGlzR2V0dGVyOiB0cnVlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIG1lc3NhZ2U6ICIpOwogICAgc2luay53cml0ZShtZXNzYWdlLmNvZGUubmFtZSk7CiAgfQp9CgovLyBUT0RPKGFoZSk6IFJlbmFtZSB0byBTZW5kR2VuZXJhdG9yLgpjbGFzcyBTZW5kQWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHdpdGggSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3IgewogIEBvdmVycmlkZQogIGZpbmFsIE5hbWUgbmFtZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgU2VuZEFjY2Vzc0dlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCB0aGlzLm5hbWUsIHRoaXMuYXJndW1lbnRzKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pIHsKICAgIGFzc2VydChhcmd1bWVudHMgIT0gbnVsbCk7CiAgfQoKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IG5hbWUubmFtZTsKCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJTZW5kQWNjZXNzR2VuZXJhdG9yIjsKCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkU2ltcGxlUmVhZCIsIG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkQXNzaWdubWVudCIsIG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICB3aXRoUmVjZWl2ZXIoT2JqZWN0IHJlY2VpdmVyLCBpbnQgb3BlcmF0b3JPZmZzZXQsIHtib29sIGlzTnVsbEF3YXJlOiBmYWxzZX0pIHsKICAgIGlmIChyZWNlaXZlciBpcyBHZW5lcmF0b3IpIHsKICAgICAgcmV0dXJuIHJlY2VpdmVyLmJ1aWxkUHJvcGVydHlBY2Nlc3ModGhpcywgb3BlcmF0b3JPZmZzZXQsIGlzTnVsbEF3YXJlKTsKICAgIH0KICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBfaGVscGVyLnRvVmFsdWUocmVjZWl2ZXIpLCBuYW1lLCBhcmd1bWVudHMsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICBpc051bGxBd2FyZTogaXNOdWxsQXdhcmUpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZE51bGxBd2FyZUFzc2lnbm1lbnQoCiAgICAgIEV4cHJlc3Npb24gdmFsdWUsIERhcnRUeXBlIHR5cGUsIGludCBvZmZzZXQsCiAgICAgIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGROdWxsQXdhcmVBc3NpZ25tZW50Iiwgb2Zmc2V0LCBfdXJpKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgKICAgICAgICAiYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQiLCBvZmZzZXQgPz8gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBfdXJpKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRQcmVmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgKICAgICAgICAiYnVpbGRQcmVmaXhJbmNyZW1lbnQiLCBvZmZzZXQgPz8gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBfdXJpKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRQb3N0Zml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoCiAgICAgICAgImJ1aWxkUG9zdGZpeEluY3JlbWVudCIsIG9mZnNldCA/PyBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmkpOwogIH0KCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJkb0ludm9jYXRpb24iLCBvZmZzZXQsIF91cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCBuYW1lOiAiKTsKICAgIHNpbmsud3JpdGUobmFtZS5uYW1lKTsKICAgIHNpbmsud3JpdGUoIiwgYXJndW1lbnRzOiAiKTsKICAgIHZhciBub2RlID0gYXJndW1lbnRzOwogICAgaWYgKG5vZGUgaXMgTm9kZSkgewogICAgICBwcmludE5vZGVPbihub2RlLCBzaW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpbmsud3JpdGUobm9kZSk7CiAgICB9CiAgfQp9CgpjbGFzcyBJbmNvbXBsZXRlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IKICAgIHdpdGggSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3IgewogIGZpbmFsIE5hbWUgbmFtZTsKCiAgSW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMubmFtZSkKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBuYW1lLm5hbWU7CgogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiSW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIjsKCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkU2ltcGxlUmVhZCIsIG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkQXNzaWdubWVudCIsIG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICB3aXRoUmVjZWl2ZXIoT2JqZWN0IHJlY2VpdmVyLCBpbnQgb3BlcmF0b3JPZmZzZXQsIHtib29sIGlzTnVsbEF3YXJlOiBmYWxzZX0pIHsKICAgIGlmIChyZWNlaXZlciBpcyBHZW5lcmF0b3IpIHsKICAgICAgcmV0dXJuIHJlY2VpdmVyLmJ1aWxkUHJvcGVydHlBY2Nlc3ModGhpcywgb3BlcmF0b3JPZmZzZXQsIGlzTnVsbEF3YXJlKTsKICAgIH0KICAgIHJldHVybiBQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvci5tYWtlKF9oZWxwZXIsIHRva2VuLAogICAgICAgIF9oZWxwZXIudG9WYWx1ZShyZWNlaXZlciksIG5hbWUsIG51bGwsIG51bGwsIGlzTnVsbEF3YXJlKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGROdWxsQXdhcmVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCIsIG9mZnNldCwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsIEV4cHJlc3Npb24gdmFsdWUsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXQsCiAgICAgIGJvb2wgaXNQcmVJbmNEZWM6IGZhbHNlLAogICAgICBib29sIGlzUG9zdEluY0RlYzogZmFsc2V9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoCiAgICAgICAgImJ1aWxkQ29tcG91bmRBc3NpZ25tZW50Iiwgb2Zmc2V0ID8/IG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkUHJlZml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoCiAgICAgICAgImJ1aWxkUHJlZml4SW5jcmVtZW50Iiwgb2Zmc2V0ID8/IG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkUG9zdGZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKAogICAgICAgICJidWlsZFBvc3RmaXhJbmNyZW1lbnQiLCBvZmZzZXQgPz8gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBfdXJpKTsKICB9CgogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZG9JbnZvY2F0aW9uIiwgb2Zmc2V0LCBfdXJpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgbmFtZTogIik7CiAgICBzaW5rLndyaXRlKG5hbWUubmFtZSk7CiAgfQp9CgpjbGFzcyBQYXJlbnRoZXNpemVkRXhwcmVzc2lvbkdlbmVyYXRvciBleHRlbmRzIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIHsKICBQYXJlbnRoZXNpemVkRXhwcmVzc2lvbkdlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCBFeHByZXNzaW9uIGV4cHJlc3Npb24pCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbiwgZXhwcmVzc2lvbiwgbnVsbCk7CgogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiUGFyZW50aGVzaXplZEV4cHJlc3Npb25HZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpIHsKICAgIHJldHVybiBTeW50aGV0aWNXcmFwcGVyLndyYXBJbGxlZ2FsQXNzaWdubWVudChyaHMsCiAgICAgICAgYXNzaWdubWVudE9mZnNldDogb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICB9CgogIEV4cHJlc3Npb24gX21ha2VJbnZhbGlkV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcEludmFsaWRXcml0ZSgKICAgICAgICBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKF9oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICBtZXNzYWdlQ2Fubm90QXNzaWduVG9QYXJlbnRoZXNpemVkRXhwcmVzc2lvbiwKICAgICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgICBsZW5ndGhGb3JUb2tlbih0b2tlbikpKSwKICAgICAgICBleHByZXNzaW9uLAogICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgfQp9CgpFeHByZXNzaW9uIG1ha2VMZXQoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgRXhwcmVzc2lvbiBib2R5KSB7CiAgaWYgKHZhcmlhYmxlID09IG51bGwpIHJldHVybiBib2R5OwogIHJldHVybiBuZXcgTGV0KHZhcmlhYmxlLCBib2R5KTsKfQoKRXhwcmVzc2lvbiBtYWtlQmluYXJ5KEV4cHJlc3Npb24gbGVmdCwgTmFtZSBvcGVyYXRvciwgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgIEV4cHJlc3Npb24gcmlnaHQsIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLAogICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0fSkgewogIHJldHVybiBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBsZWZ0LAogICAgICBvcGVyYXRvciwKICAgICAgaGVscGVyLmZvcmVzdC5jcmVhdGVBcmd1bWVudHMoPEV4cHJlc3Npb24+W3JpZ2h0XSwgbnVsbCkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0KQogICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Owp9CgpFeHByZXNzaW9uIGJ1aWxkSXNOdWxsKAogICAgRXhwcmVzc2lvbiB2YWx1ZSwgaW50IG9mZnNldCwgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIpIHsKICByZXR1cm4gbWFrZUJpbmFyeSh2YWx1ZSwgZXF1YWxzTmFtZSwgbnVsbCwKICAgICAgaGVscGVyLmZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwgaGVscGVyLAogICAgICBvZmZzZXQ6IG9mZnNldCk7Cn0KClZhcmlhYmxlRGVjbGFyYXRpb24gbWFrZU9yUmV1c2VWYXJpYWJsZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgLy8gVE9ETzog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AQxFNzIEATMlQTojJRQgBAIBRCUiAgFROCcnDBA/HygbAgEYRi1KFwIBPEkuMgIBNUlBJwIBJkYCATxwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yLmRhcnRMc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9leHByZXNzaW9uX2dlbmVyYXRvcl9oZWxwZXIuZGFydJNTLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZXhwcmVzc2lvbl9nZW5lcmF0b3JfaGVscGVyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTG9jYXRlZE1lc3NhZ2U7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnIHNob3cgTWVzc2FnZTsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBTY29wZTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvaW5mZXJlbmNlX2hlbHBlci5kYXJ0JyBzaG93IEluZmVyZW5jZUhlbHBlcjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9wcm9tb3Rpb24uZGFydCcgc2hvdyBUeXBlUHJvbW90ZXI7CgppbXBvcnQgJ2NvbnN0bmVzcy5kYXJ0JyBzaG93IENvbnN0bmVzczsKCmltcG9ydCAnZm9yZXN0LmRhcnQnIHNob3cgRm9yZXN0OwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IEJ1aWxkZXIsIFByZWZpeEJ1aWxkZXIsIFVucmVzb2x2ZWRUeXBlOwoKaW1wb3J0ICdrZXJuZWxfYXN0X2FwaS5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbml0aWFsaXplciwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZSwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgU3RhdGljR2V0LAogICAgICAgIFR5cGVQYXJhbWV0ZXI7CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93IFByZWZpeEJ1aWxkZXIsIExpYnJhcnlCdWlsZGVyLCBUeXBlRGVjbGFyYXRpb25CdWlsZGVyOwoKYWJzdHJhY3QgY2xhc3MgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBpbXBsZW1lbnRzIEluZmVyZW5jZUhlbHBlciB7CiAgTGlicmFyeUJ1aWxkZXIgZ2V0IGxpYnJhcnk7CgogIFR5cGVQcm9tb3RlciBnZXQgdHlwZVByb21vdGVyOwoKICBpbnQgZ2V0IGZ1bmN0aW9uTmVzdGluZ0xldmVsOwoKICBDb25zdGFudENvbnRleHQgZ2V0IGNvbnN0YW50Q29udGV4dDsKCiAgRm9yZXN0IGdldCBmb3Jlc3Q7CgogIGJvb2wgZ2V0IGxlZ2FjeU1vZGU7CgogIENvbnN0cnVjdG9yIGxvb2t1cENvbnN0cnVjdG9yKE5hbWUgbmFtZSwge2Jvb2wgaXNTdXBlcn0pOwoKICBFeHByZXNzaW9uIHRvVmFsdWUobm9kZSk7CgogIE1lbWJlciBsb29rdXBJbnN0YW5jZU1lbWJlcihOYW1lIG5hbWUsIHtib29sIGlzU2V0dGVyLCBib29sIGlzU3VwZXJ9KTsKCiAgc2NvcGVMb29rdXAoU2NvcGUgc2NvcGUsIFN0cmluZyBuYW1lLCBUb2tlbiB0b2tlbiwKICAgICAge2Jvb2wgaXNRdWFsaWZpZWQ6IGZhbHNlLCBQcmVmaXhCdWlsZGVyIHByZWZpeH0pOwoKICBmaW5pc2hTZW5kKE9iamVjdCByZWNlaXZlciwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCk7CgogIEluaXRpYWxpemVyIGJ1aWxkSW52YWxpZEluaXRpYWxpemVyKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgW2ludCBvZmZzZXRdKTsKCiAgSW5pdGlhbGl6ZXIgYnVpbGRGaWVsZEluaXRpYWxpemVyKGJvb2wgaXNTeW50aGV0aWMsIFN0cmluZyBuYW1lLAogICAgICBpbnQgZmllbGROYW1lT2Zmc2V0LCBpbnQgYXNzaWdubWVudE9mZnNldCwgRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICB7RGFydFR5cGUgZm9ybWFsVHlwZX0pOwoKICBJbml0aWFsaXplciBidWlsZFN1cGVySW5pdGlhbGl6ZXIoCiAgICAgIGJvb2wgaXNTeW50aGV0aWMsIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBbaW50IG9mZnNldF0pOwoKICBJbml0aWFsaXplciBidWlsZFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBbaW50IGNoYXJPZmZzZXQgPSAtMV0pOwoKICBFeHByZXNzaW9uIGJ1aWxkU3RhdGljSW52b2NhdGlvbihQcm9jZWR1cmUgdGFyZ2V0LCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICB7Q29uc3RuZXNzIGNvbnN0bmVzcywgaW50IGNoYXJPZmZzZXR9KTsKCiAgRXhwcmVzc2lvbiB0aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLCBTdHJpbmcgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwKICAgICAge01lbWJlciBjYW5kaWRhdGUsCiAgICAgIGJvb2wgaXNTdXBlciwKICAgICAgYm9vbCBpc0dldHRlciwKICAgICAgYm9vbCBpc1NldHRlciwKICAgICAgYm9vbCBpc1N0YXRpYywKICAgICAgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZX0pOwoKICBMb2NhdGVkTWVzc2FnZSBjaGVja0FyZ3VtZW50c0ZvckZ1bmN0aW9uKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyk7CgogIFN0YXRpY0dldCBtYWtlU3RhdGljR2V0KE1lbWJlciByZWFkVGFyZ2V0LCBUb2tlbiB0b2tlbik7CgogIEV4cHJlc3Npb24gd3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBQcmVmaXhCdWlsZGVyIHByZWZpeCwgaW50IGNoYXJPZmZzZXQpOwoKICBib29sIGlzSWRlbnRpY2FsKE1lbWJlciBtZW1iZXIpOwoKICBFeHByZXNzaW9uIGJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgTmFtZSBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpc0NvbnN0YW50RXhwcmVzc2lvbiwKICAgICAgYm9vbCBpc051bGxBd2FyZSwKICAgICAgYm9vbCBpc0ltcGxpY2l0Q2FsbCwKICAgICAgYm9vbCBpc1N1cGVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0fSk7CgogIEV4cHJlc3Npb24gYnVpbGRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgdHlwZSwKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBuYW1lTGFzdFRva2VuLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIENvbnN0bmVzcyBjb25zdG5lc3MpOwoKICBVbnJlc29sdmVkVHlwZSB2YWxpZGF0ZVR5cGVVc2UoCiAgICAgIFVucmVzb2x2ZWRUeXBlIHVucmVzb2x2ZWQsIGJvb2wgbm9uSW5zdGFuY2VBY2Nlc3NJc0Vycm9yKTsKCiAgdm9pZCBhZGRQcm9ibGVtRXJyb3JJZkNvbnN0KE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgpOwoKICBNZXNzYWdlIHdhcm5VbnJlc29sdmVkR2V0KE5hbWUgbmFtZSwgaW50IGNoYXJPZmZzZXQsIHtib29sIGlzU3VwZXJ9KTsKCiAgTWVzc2FnZSB3YXJuVW5yZXNvbHZlZFNldChOYW1lIG5hbWUsIGludCBjaGFyT2Zmc2V0LCB7Ym9vbCBpc1N1cGVyfSk7CgogIE1lc3NhZ2Ugd2FyblVucmVzb2x2ZWRNZXRob2QoTmFtZSBuYW1lLCBpbnQgY2hhck9mZnNldCwge2Jvb2wgaXNTdXBlcn0pOwoKICB2b2lkIHdhcm5UeXBlQXJndW1lbnRzTWlzbWF0Y2goU3RyaW5nIG5hbWUsIGludCBleHBlY3RlZCwgaW50IGNoYXJPZmZzZXQpOwoKICBFeHByZXNzaW9uIHdyYXBJbkxvY2F0ZWRQcm9ibGVtKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KTsKCiAgRXhwcmVzc2lvbiBldmFsdWF0ZUFyZ3VtZW50c0JlZm9yZSgKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgRXhwcmVzc2lvbiBleHByZXNzaW9uKTsKCiAgRGFydFR5cGUgYnVpbGREYXJ0VHlwZShVbnJlc29sdmVkVHlwZSB1bnJlc29sdmVkVHlwZSwKICAgICAge2Jvb2wgbm9uSW5zdGFuY2VBY2Nlc3NJc0Vycm9yfSk7CgogIExpc3Q8RGFydFR5cGU+IGJ1aWxkRGFydFR5cGVBcmd1bWVudHMoTGlzdDxVbnJlc29sdmVkVHlwZT4gdW5yZXNvbHZlZFR5cGVzKTsKCiAgdm9pZCByZXBvcnREdXBsaWNhdGVkRGVjbGFyYXRpb24oCiAgICAgIEJ1aWxkZXIgZXhpc3RpbmcsIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oRXhwcmVzc2lvbiBkZXN1Z2FyZWQsCiAgICAgIE1lbWJlciBjb25zdHJ1Y3RvciwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IGNoYXJPZmZzZXQpOwoKICBFeHByZXNzaW9uIHdyYXBJbnZhbGlkV3JpdGUoCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBFeHByZXNzaW9uIGV4cHJlc3Npb24sIGludCBjaGFyT2Zmc2V0KTsKCiAgRXhwcmVzc2lvbiB3cmFwVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb24oCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnQoCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBib29sIGlzQ29tcG91bmQsIEV4cHJlc3Npb24gcmhzLCBpbnQgY2hhck9mZnNldCk7Cn0KgKQATk48ASsBLgE4ATIBKAEjAUcBQgEoASIBSgEdCRMVEhQWFRAOExMXAR1AAUYeASEBIAEnARUBFwE8ARwBSQE1OAFAAUwBQ0geASVGFQErNB4BSi4BJUkZFBUVFSABQkwBOwEiRAEjASRHIhgbFCABKSMXGxsTKhYcASJBAUwBSAFIAUsBTQFRJwEmMwE4KAFPASQ2AUcBREABH0QBLUIBL04CAUNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlci5kYXJ0N3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvZm9yZXN0LmRhcnTAAGBdLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZmFuZ29ybjsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JyBzaG93IG9mZnNldEZvclRva2VuLCBvcHRpb25hbDsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICdjb2xsZWN0aW9ucy5kYXJ0JwogICAgc2hvdwogICAgICAgIEZvckVsZW1lbnQsCiAgICAgICAgRm9ySW5FbGVtZW50LAogICAgICAgIEZvckluTWFwRW50cnksCiAgICAgICAgRm9yTWFwRW50cnksCiAgICAgICAgSWZFbGVtZW50LAogICAgICAgIElmTWFwRW50cnksCiAgICAgICAgU3ByZWFkRWxlbWVudDsKCmltcG9ydCAna2VybmVsX3NoYWRvd19hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHNKdWRnbWVudCwKICAgICAgICBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEJsb2NrSnVkZ21lbnQsCiAgICAgICAgQ2F0Y2hKdWRnbWVudCwKICAgICAgICBEb0p1ZGdtZW50LAogICAgICAgIERvdWJsZUp1ZGdtZW50LAogICAgICAgIEVtcHR5U3RhdGVtZW50SnVkZ21lbnQsCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEZvckp1ZGdtZW50LAogICAgICAgIElmSnVkZ21lbnQsCiAgICAgICAgSW50SnVkZ21lbnQsCiAgICAgICAgTGlzdExpdGVyYWxKdWRnbWVudCwKICAgICAgICBMb2FkTGlicmFyeUp1ZGdtZW50LAogICAgICAgIE1hcExpdGVyYWxKdWRnbWVudCwKICAgICAgICBSZXR1cm5KdWRnbWVudCwKICAgICAgICBTZXRMaXRlcmFsSnVkZ21lbnQsCiAgICAgICAgU2hhZG93TGFyZ2VJbnRMaXRlcmFsLAogICAgICAgIFN5bWJvbExpdGVyYWxKdWRnbWVudCwKICAgICAgICBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQsCiAgICAgICAgVHJ5Q2F0Y2hKdWRnbWVudCwKICAgICAgICBUcnlGaW5hbGx5SnVkZ21lbnQsCiAgICAgICAgVHlwZUxpdGVyYWxKdWRnbWVudCwKICAgICAgICBXaGlsZUp1ZGdtZW50LAogICAgICAgIFlpZWxkSnVkZ21lbnQ7CgovLy8gQSBzaGFkb3cgdHJlZSBmYWN0b3J5LgpjbGFzcyBGb3Jlc3QgewogIGNvbnN0IEZvcmVzdCgpOwoKICBBcmd1bWVudHMgY3JlYXRlQXJndW1lbnRzKExpc3Q8RXhwcmVzc2lvbj4gcG9zaXRpb25hbCwgVG9rZW4gdG9rZW4sCiAgICAgIHtMaXN0PERhcnRUeXBlPiB0eXBlcywgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkfSkgewogICAgcmV0dXJuIG5ldyBBcmd1bWVudHNKdWRnbWVudChwb3NpdGlvbmFsLCB0eXBlczogdHlwZXMsIG5hbWVkOiBuYW1lZCkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQXJndW1lbnRzIGNyZWF0ZUFyZ3VtZW50c0VtcHR5KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gY3JlYXRlQXJndW1lbnRzKDxFeHByZXNzaW9uPltdLCB0b2tlbik7CiAgfQoKICBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gYXJndW1lbnRzTmFtZWQoQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGFyZ3VtZW50cy5uYW1lZDsKICB9CgogIExpc3Q8RXhwcmVzc2lvbj4gYXJndW1lbnRzUG9zaXRpb25hbChBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLnBvc2l0aW9uYWw7CiAgfQoKICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHNUeXBlQXJndW1lbnRzKEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBhcmd1bWVudHMudHlwZXM7CiAgfQoKICB2b2lkIGFyZ3VtZW50c1NldFR5cGVBcmd1bWVudHMoQXJndW1lbnRzIGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gdHlwZXMpIHsKICAgIEFyZ3VtZW50c0p1ZGdtZW50LnNldE5vbkluZmVycmFibGVBcmd1bWVudFR5cGVzKGFyZ3VtZW50cywgdHlwZXMpOwogIH0KCiAgU3RyaW5nTGl0ZXJhbCBhc0xpdGVyYWxTdHJpbmcoRXhwcmVzc2lvbiB2YWx1ZSkgPT4gdmFsdWU7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGJvb2xlYW4gbGl0ZXJhbCBhdCB0aGUgZ2l2ZW4gW2xvY2F0aW9uXS4gVGhlCiAgLy8vIGxpdGVyYWwgaGFzIHRoZSBnaXZlbiBbdmFsdWVdLgogIEJvb2xMaXRlcmFsIGNyZWF0ZUJvb2xMaXRlcmFsKGJvb2wgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IEJvb2xMaXRlcmFsKHZhbHVlKS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGRvdWJsZSBsaXRlcmFsIGF0IHRoZSBnaXZlbiBbbG9jYXRpb25dLiBUaGUKICAvLy8gbGl0ZXJhbCBoYXMgdGhlIGdpdmVuIFt2YWx1ZV0uCiAgRG91YmxlTGl0ZXJhbCBjcmVhdGVEb3VibGVMaXRlcmFsKGRvdWJsZSB2YWx1ZSwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgRG91YmxlSnVkZ21lbnQodmFsdWUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIgbGl0ZXJhbCBhdCB0aGUgZ2l2ZW4gW2xvY2F0aW9uXS4gVGhlCiAgLy8vIGxpdGVyYWwgaGFzIHRoZSBnaXZlbiBbdmFsdWVdLgogIEludExpdGVyYWwgY3JlYXRlSW50TGl0ZXJhbChpbnQgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IEludEp1ZGdtZW50KHZhbHVlLCB0b2tlbj8ubGV4ZW1lKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBJbnRMaXRlcmFsIGNyZWF0ZUludExpdGVyYWxMYXJnZShTdHJpbmcgbGl0ZXJhbCwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgU2hhZG93TGFyZ2VJbnRMaXRlcmFsKGxpdGVyYWwsIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBsaXN0IGxpdGVyYWwuIFRoZSBbY29uc3RLZXl3b3JkXSBpcyB0aGUKICAvLy8gbG9jYXRpb24gb2YgdGhlIGBjb25zdGAga2V5d29yZCwgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vIGtleXdvcmQuIFRoZQogIC8vLyBbaXNDb25zdF0gaXMgYHRydWVgIGlmIHRoZSBsaXRlcmFsIGlzIGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgYQogIC8vLyBjb25zdGFudC4gVGhlIFt0eXBlQXJndW1lbnRdIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2luZ2xlIHZhbGlkCiAgLy8vIHR5cGUgYXJndW1lbnQgcHJlY2VkaW5nIHRoZSBsaXN0IGxpdGVyYWwsIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyB0eXBlCiAgLy8vIGFyZ3VtZW50LCB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHR5cGUgYXJndW1lbnQsIG9yIGlmIHRoZSB0eXBlIGFyZ3VtZW50CiAgLy8vIGNhbm5vdCBiZSByZXNvbHZlZC4gVGhlIFt0eXBlQXJndW1lbnRzXSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgYWxsIG9mCiAgLy8vIHRoZSB0eXBlIGFyZ3VtZW50cyBwcmVjZWRpbmcgdGhlIGxpc3QgbGl0ZXJhbCwgb3IgYG51bGxgIGlmIHRoZXJlIGFyZSBubwogIC8vLyB0eXBlIGFyZ3VtZW50cy4gVGhlIFtsZWZ0QnJhY2tldF0gaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBgW2AuIFRoZSBsaXN0IG9mCiAgLy8vIFtleHByZXNzaW9uc10gaXMgYSBsaXN0IG9mIHRoZSByZXByZXNlbnRhdGlvbnMgb2YgdGhlIGxpc3QgZWxlbWVudHMuIFRoZQogIC8vLyBbcmlnaHRCcmFja2V0XSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGBdYC4KICBMaXN0TGl0ZXJhbCBjcmVhdGVMaXN0TGl0ZXJhbCgKICAgICAgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgICBib29sIGlzQ29uc3QsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnQsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnRzLAogICAgICBUb2tlbiBsZWZ0QnJhY2tldCwKICAgICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucywKICAgICAgVG9rZW4gcmlnaHRCcmFja2V0KSB7CiAgICAvLyBUT0RPKGJyaWFud2lsa2Vyc29uKTogVGhlIGZpbGUgb2Zmc2V0IGNvbXB1dGVkIGJlbG93IHdpbGwgbm90IGJlIGNvcnJlY3QKICAgIC8vIGlmIHRoZXJlIGFyZSB0eXBlIGFyZ3VtZW50cyBidXQgbm8gYGNvbnN0YCBrZXl3b3JkLgogICAgcmV0dXJuIG5ldyBMaXN0TGl0ZXJhbEp1ZGdtZW50KGV4cHJlc3Npb25zLAogICAgICAgIHR5cGVBcmd1bWVudDogdHlwZUFyZ3VtZW50LCBpc0NvbnN0OiBpc0NvbnN0KQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihjb25zdEtleXdvcmQgPz8gbGVmdEJyYWNrZXQpOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgc2V0IGxpdGVyYWwuIFRoZSBbY29uc3RLZXl3b3JkXSBpcyB0aGUKICAvLy8gbG9jYXRpb24gb2YgdGhlIGBjb25zdGAga2V5d29yZCwgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vIGtleXdvcmQuIFRoZQogIC8vLyBbaXNDb25zdF0gaXMgYHRydWVgIGlmIHRoZSBsaXRlcmFsIGlzIGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgYQogIC8vLyBjb25zdGFudC4gVGhlIFt0eXBlQXJndW1lbnRdIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2luZ2xlIHZhbGlkCiAgLy8vIHR5cGUgYXJndW1lbnQgcHJlY2VkaW5nIHRoZSBzZXQgbGl0ZXJhbCwgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vIHR5cGUKICAvLy8gYXJndW1lbnQsIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdHlwZSBhcmd1bWVudCwgb3IgaWYgdGhlIHR5cGUgYXJndW1lbnQKICAvLy8gY2Fubm90IGJlIHJlc29sdmVkLiBUaGUgW3R5cGVBcmd1bWVudHNdIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhbGwgb2YKICAvLy8gdGhlIHR5cGUgYXJndW1lbnRzIHByZWNlZGluZyB0aGUgc2V0IGxpdGVyYWwsIG9yIGBudWxsYCBpZiB0aGVyZSBhcmUgbm8KICAvLy8gdHlwZSBhcmd1bWVudHMuIFRoZSBbbGVmdEJyYWNlXSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGB7YC4gVGhlIGxpc3Qgb2YKICAvLy8gW2V4cHJlc3Npb25zXSBpcyBhIGxpc3Qgb2YgdGhlIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgc2V0IGVsZW1lbnRzLiBUaGUKICAvLy8gW3JpZ2h0QnJhY2VdIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgYH1gLgogIFNldExpdGVyYWwgY3JlYXRlU2V0TGl0ZXJhbCgKICAgICAgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgICBib29sIGlzQ29uc3QsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnQsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnRzLAogICAgICBUb2tlbiBsZWZ0QnJhY2UsCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMsCiAgICAgIFRva2VuIHJpZ2h0QnJhY2UpIHsKICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pOiBUaGUgZmlsZSBvZmZzZXQgY29tcHV0ZWQgYmVsb3cgd2lsbCBub3QgYmUgY29ycmVjdAogICAgLy8gaWYgdGhlcmUgYXJlIHR5cGUgYXJndW1lbnRzIGJ1dCBubyBgY29uc3RgIGtleXdvcmQuCiAgICByZXR1cm4gbmV3IFNldExpdGVyYWxKdWRnbWVudChleHByZXNzaW9ucywKICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogaXNDb25zdCkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oY29uc3RLZXl3b3JkID8/IGxlZnRCcmFjZSk7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBtYXAgbGl0ZXJhbC4gVGhlIFtjb25zdEtleXdvcmRdIGlzIHRoZQogIC8vLyBsb2NhdGlvbiBvZiB0aGUgYGNvbnN0YCBrZXl3b3JkLCBvciBgbnVsbGAgaWYgdGhlcmUgaXMgbm8ga2V5d29yZC4gVGhlCiAgLy8vIFtpc0NvbnN0XSBpcyBgdHJ1ZWAgaWYgdGhlIGxpdGVyYWwgaXMgZWl0aGVyIGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSBhCiAgLy8vIGNvbnN0YW50LiBUaGUgW2tleVR5cGVdIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlyc3QgdHlwZSBhcmd1bWVudAogIC8vLyBwcmVjZWRpbmcgdGhlIG1hcCBsaXRlcmFsLCBvciBgbnVsbGAgaWYgdGhlcmUgYXJlIG5vdCBleGFjdGx5IHR3byB0eXBlCiAgLy8vIGFyZ3VtZW50cyBvciBpZiB0aGUgZmlyc3QgdHlwZSBhcmd1bWVudCBjYW5ub3QgYmUgcmVzb2x2ZWQuIFRoZQogIC8vLyBbdmFsdWVUeXBlXSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlY29uZCB0eXBlIGFyZ3VtZW50IHByZWNlZGluZwogIC8vLyB0aGUgbWFwIGxpdGVyYWwsIG9yIGBudWxsYCBpZiB0aGVyZSBhcmUgbm90IGV4YWN0bHkgdHdvIHR5cGUgYXJndW1lbnRzIG9yCiAgLy8vIGlmIHRoZSBzZWNvbmQgdHlwZSBhcmd1bWVudCBjYW5ub3QgYmUgcmVzb2x2ZWQuIFRoZSBbdHlwZUFyZ3VtZW50c10gaXMgdGhlCiAgLy8vIHJlcHJlc2VudGF0aW9uIG9mIGFsbCBvZiB0aGUgdHlwZSBhcmd1bWVudHMgcHJlY2VkaW5nIHRoZSBtYXAgbGl0ZXJhbCwgb3IKICAvLy8gYG51bGxgIGlmIHRoZXJlIGFyZSBubyB0eXBlIGFyZ3VtZW50cy4gVGhlIFtsZWZ0QnJhY2VdIGlzIHRoZSBsb2NhdGlvbgogIC8vLyBvZiB0aGUgYHtgLiBUaGUgbGlzdCBvZiBbZW50cmllc10gaXMgYSBsaXN0IG9mIHRoZSByZXByZXNlbnRhdGlvbnMgb2YgdGhlCiAgLy8vIG1hcCBlbnRyaWVzLiBUaGUgW3JpZ2h0QnJhY2VdIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgYH1gLgogIE1hcExpdGVyYWwgY3JlYXRlTWFwTGl0ZXJhbCgKICAgICAgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgICBib29sIGlzQ29uc3QsCiAgICAgIERhcnRUeXBlIGtleVR5cGUsCiAgICAgIERhcnRUeXBlIHZhbHVlVHlwZSwKICAgICAgT2JqZWN0IHR5cGVBcmd1bWVudHMsCiAgICAgIFRva2VuIGxlZnRCcmFjZSwKICAgICAgTGlzdDxNYXBFbnRyeT4gZW50cmllcywKICAgICAgVG9rZW4gcmlnaHRCcmFjZSkgewogICAgLy8gVE9ETyhicmlhbndpbGtlcnNvbik6IFRoZSBmaWxlIG9mZnNldCBjb21wdXRlZCBiZWxvdyB3aWxsIG5vdCBiZSBjb3JyZWN0CiAgICAvLyBpZiB0aGVyZSBhcmUgdHlwZSBhcmd1bWVudHMgYnV0IG5vIGBjb25zdGAga2V5d29yZC4KICAgIHJldHVybiBuZXcgTWFwTGl0ZXJhbEp1ZGdtZW50KGVudHJpZXMsCiAgICAgICAga2V5VHlwZToga2V5VHlwZSwgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsIGlzQ29uc3Q6IGlzQ29uc3QpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKGNvbnN0S2V5d29yZCA/PyBsZWZ0QnJhY2UpOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgbnVsbCBsaXRlcmFsIGF0IHRoZSBnaXZlbiBbbG9jYXRpb25dLgogIE51bGxMaXRlcmFsIGNyZWF0ZU51bGxMaXRlcmFsKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IE51bGxMaXRlcmFsKCkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBzaW1wbGUgc3RyaW5nIGxpdGVyYWwgYXQgdGhlIGdpdmVuCiAgLy8vIFtsb2NhdGlvbl0uIFRoZSBsaXRlcmFsIGhhcyB0aGUgZ2l2ZW4gW3ZhbHVlXS4gVGhpcyBkb2VzIG5vdCBpbmNsdWRlCiAgLy8vIGVpdGhlciBhZGphY2VudCBzdHJpbmdzIG9yIGludGVycG9sYXRlZCBzdHJpbmdzLgogIFN0cmluZ0xpdGVyYWwgY3JlYXRlU3RyaW5nTGl0ZXJhbChTdHJpbmcgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IFN0cmluZ0xpdGVyYWwodmFsdWUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgc3ltYm9sIGxpdGVyYWwgZGVmaW5lZCBieSBbdmFsdWVdLgogIFN5bWJvbExpdGVyYWwgY3JlYXRlU3ltYm9sTGl0ZXJhbChTdHJpbmcgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IFN5bWJvbExpdGVyYWxKdWRnbWVudCh2YWx1ZSkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBUeXBlTGl0ZXJhbCBjcmVhdGVUeXBlTGl0ZXJhbChEYXJ0VHlwZSB0eXBlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBUeXBlTGl0ZXJhbEp1ZGdtZW50KHR5cGUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEga2V5L3ZhbHVlIHBhaXIgaW4gYSBsaXRlcmFsIG1hcC4gVGhlIFtrZXldIGlzCiAgLy8vIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiB1c2VkIHRvIGNvbXB1dGUgdGhlIGtleS4gVGhlIFtjb2xvbl0KICAvLy8gaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb2xvbiBzZXBhcmF0aW5nIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZS4gVGhlIFt2YWx1ZV0KICAvLy8gaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleHByZXNzaW9uIHVzZWQgdG8gY29tcHV0ZSB0aGUgdmFsdWUuCiAgTWFwRW50cnkgY3JlYXRlTWFwRW50cnkoRXhwcmVzc2lvbiBrZXksIFRva2VuIGNvbG9uLCBFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IE1hcEVudHJ5KGtleSwgdmFsdWUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oY29sb24pOwogIH0KCiAgaW50IHJlYWRPZmZzZXQoVHJlZU5vZGUgbm9kZSkgPT4gbm9kZS5maWxlT2Zmc2V0OwoKICBFeHByZXNzaW9uIGNyZWF0ZUxvYWRMaWJyYXJ5KAogICAgICBMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IExvYWRMaWJyYXJ5SnVkZ21lbnQoZGVwZW5kZW5jeSwgYXJndW1lbnRzKTsKICB9CgogIEV4cHJlc3Npb24gY2hlY2tMaWJyYXJ5SXNMb2FkZWQoTGlicmFyeURlcGVuZGVuY3kgZGVwZW5kZW5jeSkgewogICAgcmV0dXJuIG5ldyBDaGVja0xpYnJhcnlJc0xvYWRlZChkZXBlbmRlbmN5KTsKICB9CgogIEV4cHJlc3Npb24gY3JlYXRlQXNFeHByZXNzaW9uKAogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24sIERhcnRUeXBlIHR5cGUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IEFzRXhwcmVzc2lvbihleHByZXNzaW9uLCB0eXBlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBFeHByZXNzaW9uIGNyZWF0ZVNwcmVhZEVsZW1lbnQoRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBTcHJlYWRFbGVtZW50KGV4cHJlc3Npb24sIHRva2VuLmxleGVtZSA9PSAnLi4uPycpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEV4cHJlc3Npb24gY3JlYXRlSWZFbGVtZW50KEV4cHJlc3Npb24gY29uZGl0aW9uLCBFeHByZXNzaW9uIHRoZW4sCiAgICAgIEV4cHJlc3Npb24gb3RoZXJ3aXNlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBJZkVsZW1lbnQoY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIE1hcEVudHJ5IGNyZWF0ZUlmTWFwRW50cnkoCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLCBNYXBFbnRyeSB0aGVuLCBNYXBFbnRyeSBvdGhlcndpc2UsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IElmTWFwRW50cnkoY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEV4cHJlc3Npb24gY3JlYXRlRm9yRWxlbWVudCgKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMsCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLAogICAgICBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXMsCiAgICAgIEV4cHJlc3Npb24gYm9keSwKICAgICAgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgRm9yRWxlbWVudCh2YXJpYWJsZXMsIGNvbmRpdGlvbiwgdXBkYXRlcywgYm9keSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgTWFwRW50cnkgY3JlYXRlRm9yTWFwRW50cnkoCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzLAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAgTGlzdDxFeHByZXNzaW9uPiB1cGRhdGVzLAogICAgICBNYXBFbnRyeSBib2R5LAogICAgICBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBGb3JNYXBFbnRyeSh2YXJpYWJsZXMsIGNvbmRpdGlvbiwgdXBkYXRlcywgYm9keSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgRXhwcmVzc2lvbiBjcmVhdGVGb3JJbkVsZW1lbnQoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsCiAgICAgIEV4cHJlc3Npb24gaXRlcmFibGUsCiAgICAgIFN0YXRlbWVudCBwcm9sb2d1ZSwKICAgICAgRXhwcmVzc2lvbiBib2R5LAogICAgICBFeHByZXNzaW9uIHByb2JsZW0sCiAgICAgIFRva2VuIHRva2VuLAogICAgICB7Ym9vbCBpc0FzeW5jOiBmYWxzZX0pIHsKICAgIHJldHVybiBuZXcgRm9ySW5FbGVtZW50KHZhcmlhYmxlLCBpdGVyYWJsZSwgcHJvbG9ndWUsIGJvZHksIHByb2JsZW0sCiAgICAgICAgaXNBc3luYzogaXNBc3luYykKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgTWFwRW50cnkgY3JlYXRlRm9ySW5NYXBFbnRyeSgKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwKICAgICAgRXhwcmVzc2lvbiBpdGVyYWJsZSwKICAgICAgU3RhdGVtZW50IHByb2xvZ3VlLAogICAgICBNYXBFbnRyeSBib2R5LAogICAgICBFeHByZXNzaW9uIHByb2JsZW0sCiAgICAgIFRva2VuIHRva2VuLAogICAgICB7Ym9vbCBpc0FzeW5jOiBmYWxzZX0pIHsKICAgIHJldHVybiBuZXcgRm9ySW5NYXBFbnRyeSh2YXJpYWJsZSwgaXRlcmFibGUsIHByb2xvZ3VlLCBib2R5LCBwcm9ibGVtLAogICAgICAgIGlzQXN5bmM6IGlzQXN5bmMpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhbiBhc3NlcnQgdGhhdCBhcHBlYXJzIGluIGEgY29uc3RydWN0b3IncwogIC8vLyBpbml0aWFsaXplciBsaXN0LgogIEFzc2VydEluaXRpYWxpemVyIGNyZWF0ZUFzc2VydEluaXRpYWxpemVyKAogICAgICBUb2tlbiBhc3NlcnRLZXl3b3JkLAogICAgICBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLAogICAgICBUb2tlbiBjb21tYSwKICAgICAgRXhwcmVzc2lvbiBtZXNzYWdlKSB7CiAgICByZXR1cm4gbmV3IEFzc2VydEluaXRpYWxpemVySnVkZ21lbnQoY3JlYXRlQXNzZXJ0U3RhdGVtZW50KAogICAgICAgIGFzc2VydEtleXdvcmQsIGxlZnRQYXJlbnRoZXNpcywgY29uZGl0aW9uLCBjb21tYSwgbWVzc2FnZSwgbnVsbCkpOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGFuIGFzc2VydCB0aGF0IGFwcGVhcnMgYXMgYSBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IGNyZWF0ZUFzc2VydFN0YXRlbWVudChUb2tlbiBhc3NlcnRLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLCBUb2tlbiBjb21tYSwgRXhwcmVzc2lvbiBtZXNzYWdlLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIC8vIENvbXB1dGUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzIGZvciB0aGUgY29uZGl0aW9uIGV4cHJlc3Npb24uCiAgICAvLyBUaGlzIGNvZGUgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBiZWNhdXNlIGV4cHJlc3Npb25zIGRvbid0IGNhcnJ5CiAgICAvLyB0aGVpciBzdGFydCBhbmQgZW5kIG9mZnNldHMgY3VycmVudGx5LgogICAgLy8KICAgIC8vIFRoZSB0b2tlbiB0aGF0IGZvbGxvd3MgbGVmdFBhcmVudGhlc2lzIGlzIGNvbnNpZGVyZWQgdG8gYmUgdGhlCiAgICAvLyBmaXJzdCB0b2tlbiBvZiB0aGUgY29uZGl0aW9uLgogICAgLy8gVE9ETyhhaGUpOiB0aGlzIHJlYWxseSBzaG91bGQgYmUgY29uZGl0aW9uLmZpbGVPZmZzZXQuCiAgICBpbnQgc3RhcnRPZmZzZXQgPSBsZWZ0UGFyZW50aGVzaXMubmV4dC5vZmZzZXQ7CiAgICBpbnQgZW5kT2Zmc2V0OwogICAgewogICAgICAvLyBTZWFyY2ggZm9yd2FyZCBmcm9tIGxlZnRQYXJlbnRoZXNpcyB0byBmaW5kIHRoZSBsYXN0IHRva2VuIG9mCiAgICAgIC8vIHRoZSBjb25kaXRpb24gLSB3aGljaCBpcyBhIHRva2VuIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgY29tbWFUb2tlbiwKICAgICAgLy8gcmlnaHQgcGFyZW50aGVzaXMgb3IgYSB0cmFpbGluZyBjb21tYS4KICAgICAgVG9rZW4gY29uZGl0aW9uQm91bmRhcnkgPSBjb21tYSA/PyBsZWZ0UGFyZW50aGVzaXMuZW5kR3JvdXA7CiAgICAgIFRva2VuIGNvbmRpdGlvbkxhc3RUb2tlbiA9IGxlZnRQYXJlbnRoZXNpczsKICAgICAgd2hpbGUgKCFjb25kaXRpb25MYXN0VG9rZW4uaXNFb2YpIHsKICAgICAgICBUb2tlbiBuZXh0VG9rZW4gPSBjb25kaXRpb25MYXN0VG9rZW4ubmV4dDsKICAgICAgICBpZiAobmV4dFRva2VuID09IGNvbmRpdGlvbkJvdW5kYXJ5KSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCcsJywgbmV4dFRva2VuKSAmJgogICAgICAgICAgICBuZXh0VG9rZW4ubmV4dCA9PSBjb25kaXRpb25Cb3VuZGFyeSkgewogICAgICAgICAgLy8gVGhlIG5leHQgdG9rZW4gaXMgdHJhaWxpbmcgY29tbWEsIHdoaWNoIG1lYW5zIGN1cnJlbnQgdG9rZW4gaXMKICAgICAgICAgIC8vIHRoZSBsYXN0IHRva2VuIG9mIHRoZSBjb25kaXRpb24uCiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY29uZGl0aW9uTGFzdFRva2VuID0gbmV4dFRva2VuOwogICAgICB9CiAgICAgIGlmIChjb25kaXRpb25MYXN0VG9rZW4uaXNFb2YpIHsKICAgICAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCA9IC0xOwogICAgICB9IGVsc2UgewogICAgICAgIGVuZE9mZnNldCA9IGNvbmRpdGlvbkxhc3RUb2tlbi5vZmZzZXQgKyBjb25kaXRpb25MYXN0VG9rZW4ubGVuZ3RoOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IEFzc2VydFN0YXRlbWVudEp1ZGdtZW50KGNvbmRpdGlvbiwKICAgICAgICBjb25kaXRpb25TdGFydE9mZnNldDogc3RhcnRPZmZzZXQsCiAgICAgICAgY29uZGl0aW9uRW5kT2Zmc2V0OiBlbmRPZmZzZXQsCiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSk7CiAgfQoKICBFeHByZXNzaW9uIGNyZWF0ZUF3YWl0RXhwcmVzc2lvbihFeHByZXNzaW9uIG9wZXJhbmQsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IEF3YWl0RXhwcmVzc2lvbihvcGVyYW5kKS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGJsb2NrIG9mIFtzdGF0ZW1lbnRzXSBlbmNsb3NlZCBiZXR3ZWVuIHRoZQogIC8vLyBbb3BlbkJyYWNrZXRdIGFuZCBbY2xvc2VCcmFja2V0XS4KICBTdGF0ZW1lbnQgY3JlYXRlQmxvY2soCiAgICAgIFRva2VuIG9wZW5CcmFjZSwgTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHMsIFRva2VuIGNsb3NlQnJhY2UpIHsKICAgIExpc3Q8U3RhdGVtZW50PiBjb3B5OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2ldOwogICAgICBpZiAoc3RhdGVtZW50IGlzIF9WYXJpYWJsZXNEZWNsYXJhdGlvbikgewogICAgICAgIGNvcHkgPz89IG5ldyBMaXN0PFN0YXRlbWVudD4uZnJvbShzdGF0ZW1lbnRzLmdldFJhbmdlKDAsIGkpKTsKICAgICAgICBjb3B5LmFkZEFsbChzdGF0ZW1lbnQuZGVjbGFyYXRpb25zKTsKICAgICAgfSBlbHNlIGlmIChjb3B5ICE9IG51bGwpIHsKICAgICAgICBjb3B5LmFkZChzdGF0ZW1lbnQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IEJsb2NrSnVkZ21lbnQoY29weSA/PyBzdGF0ZW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihvcGVuQnJhY2UpOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgYnJlYWsgc3RhdGVtZW50LgogIFN0YXRlbWVudCBjcmVhdGVCcmVha1N0YXRlbWVudCgKICAgICAgVG9rZW4gYnJlYWtLZXl3b3JkLCBPYmplY3QgbGFiZWwsIFRva2VuIHNlbWljb2xvbikgewogICAgcmV0dXJuIG5ldyBCcmVha1N0YXRlbWVudChudWxsKS4uZmlsZU9mZnNldCA9IGJyZWFrS2V5d29yZC5jaGFyT2Zmc2V0OwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgY2F0Y2ggY2xhdXNlLgogIENhdGNoIGNyZWF0ZUNhdGNoKAogICAgICBUb2tlbiBvbktleXdvcmQsCiAgICAgIERhcnRUeXBlIGV4Y2VwdGlvblR5cGUsCiAgICAgIFRva2VuIGNhdGNoS2V5d29yZCwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBleGNlcHRpb25QYXJhbWV0ZXIsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gc3RhY2tUcmFjZVBhcmFtZXRlciwKICAgICAgRGFydFR5cGUgc3RhY2tUcmFjZVR5cGUsCiAgICAgIFN0YXRlbWVudCBib2R5KSB7CiAgICByZXR1cm4gbmV3IENhdGNoSnVkZ21lbnQoZXhjZXB0aW9uUGFyYW1ldGVyLCBib2R5LAogICAgICAgIGd1YXJkOiBleGNlcHRpb25UeXBlLCBzdGFja1RyYWNlOiBzdGFja1RyYWNlUGFyYW1ldGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihvbktleXdvcmQgPz8gY2F0Y2hLZXl3b3JkKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uIFRoZSBbY29uZGl0aW9uXSBpcwogIC8vLyB0aGUgZXhwcmVzc2lvbiBwcmVjZWRpbmcgdGhlIHF1ZXN0aW9uIG1hcmsuIFRoZSBbcXVlc3Rpb25dIGlzIHRoZSBgP2AuIFRoZQogIC8vLyBbdGhlbkV4cHJlc3Npb25dIGlzIHRoZSBleHByZXNzaW9uIGZvbGxvd2luZyB0aGUgcXVlc3Rpb24gbWFyay4gVGhlCiAgLy8vIFtjb2xvbl0gaXMgdGhlIGA6YC4gVGhlIFtlbHNlRXhwcmVzc2lvbl0gaXMgdGhlIGV4cHJlc3Npb24gZm9sbG93aW5nIHRoZQogIC8vLyBjb2xvbi4KICBFeHByZXNzaW9uIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihFeHByZXNzaW9uIGNvbmRpdGlvbiwgVG9rZW4gcXVlc3Rpb24sCiAgICAgIEV4cHJlc3Npb24gdGhlbkV4cHJlc3Npb24sIFRva2VuIGNvbG9uLCBFeHByZXNzaW9uIGVsc2VFeHByZXNzaW9uKSB7CiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsRXhwcmVzc2lvbigKICAgICAgICBjb25kaXRpb24sIHRoZW5FeHByZXNzaW9uLCBlbHNlRXhwcmVzc2lvbiwgbnVsbCkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4ocXVlc3Rpb24pOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgY29udGludWUgc3RhdGVtZW50LgogIFN0YXRlbWVudCBjcmVhdGVDb250aW51ZVN0YXRlbWVudCgKICAgICAgVG9rZW4gY29udGludWVLZXl3b3JkLCBPYmplY3QgbGFiZWwsIFRva2VuIHNlbWljb2xvbikgewogICAgcmV0dXJuIG5ldyBCcmVha1N0YXRlbWVudChudWxsKS4uZmlsZU9mZnNldCA9IGNvbnRpbnVlS2V5d29yZC5jaGFyT2Zmc2V0OwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgZG8gc3RhdGVtZW50LgogIFN0YXRlbWVudCBjcmVhdGVEb1N0YXRlbWVudChUb2tlbiBkb0tleXdvcmQsIFN0YXRlbWVudCBib2R5LAogICAgICBUb2tlbiB3aGlsZUtleXdvcmQsIEV4cHJlc3Npb24gY29uZGl0aW9uLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgRG9KdWRnbWVudChib2R5LCBjb25kaXRpb24pLi5maWxlT2Zmc2V0ID0gZG9LZXl3b3JkLmNoYXJPZmZzZXQ7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnQgY29tcG9zZWQgZnJvbSB0aGUKICAvLy8gW2V4cHJlc3Npb25dIGFuZCBbc2VtaWNvbG9uXS4KICBTdGF0ZW1lbnQgY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uIGV4cHJlc3Npb24sIFRva2VuIHNlbWljb2xvbikgewogICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uU3RhdGVtZW50SnVkZ21lbnQoZXhwcmVzc2lvbik7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gZW1wdHkgc3RhdGVtZW50IGNvbnNpc3Rpbmcgb2YgdGhlIGdpdmVuCiAgLy8vIFtzZW1pY29sb25dLgogIFN0YXRlbWVudCBjcmVhdGVFbXB0eVN0YXRlbWVudChUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgRW1wdHlTdGF0ZW1lbnRKdWRnbWVudCgpOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgZm9yIHN0YXRlbWVudC4KICBTdGF0ZW1lbnQgY3JlYXRlRm9yU3RhdGVtZW50KAogICAgICBUb2tlbiBmb3JLZXl3b3JkLAogICAgICBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzLAogICAgICBUb2tlbiBsZWZ0U2VwYXJhdG9yLAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAgU3RhdGVtZW50IGNvbmRpdGlvblN0YXRlbWVudCwKICAgICAgTGlzdDxFeHByZXNzaW9uPiB1cGRhdGVycywKICAgICAgVG9rZW4gcmlnaHRQYXJlbnRoZXNpcywKICAgICAgU3RhdGVtZW50IGJvZHkpIHsKICAgIHJldHVybiBuZXcgRm9ySnVkZ21lbnQodmFyaWFibGVzLCBjb25kaXRpb24sIHVwZGF0ZXJzLCBib2R5KQogICAgICAuLmZpbGVPZmZzZXQgPSBmb3JLZXl3b3JkLmNoYXJPZmZzZXQ7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gYGlmYCBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IGNyZWF0ZUlmU3RhdGVtZW50KFRva2VuIGlmS2V5d29yZCwgRXhwcmVzc2lvbiBjb25kaXRpb24sCiAgICAgIFN0YXRlbWVudCB0aGVuU3RhdGVtZW50LCBUb2tlbiBlbHNlS2V5d29yZCwgU3RhdGVtZW50IGVsc2VTdGF0ZW1lbnQpIHsKICAgIHJldHVybiBuZXcgSWZKdWRnbWVudChjb25kaXRpb24sIHRoZW5TdGF0ZW1lbnQsIGVsc2VTdGF0ZW1lbnQpCiAgICAgIC4uZmlsZU9mZnNldCA9IGlmS2V5d29yZC5jaGFyT2Zmc2V0OwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGFuIGBpc2AgZXhwcmVzc2lvbi4gVGhlIFtvcGVyYW5kXSBpcyB0aGUKICAvLy8gcmVwcmVzZW50YXRpb24gb2YgdGhlIGxlZnQgb3BlcmFuZC4gVGhlIFtpc09wZXJhdG9yXSBpcyB0aGUgYGlzYCBvcGVyYXRvci4KICAvLy8gVGhlIFtub3RPcGVyYXRvcl0gaXMgZWl0aGVyIHRoZSBgIWAgb3IgYG51bGxgIGlmIHRoZSB0ZXN0IGlzIG5vdCBuZWdhdGVkLgogIC8vLyBUaGUgW3R5cGVdIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgdGhhdCBpcyB0aGUgcmlnaHQgb3BlcmFuZC4KICBFeHByZXNzaW9uIGNyZWF0ZUlzRXhwcmVzc2lvbigKICAgICAgRXhwcmVzc2lvbiBvcGVyYW5kLCBUb2tlbiBpc09wZXJhdG9yLCBUb2tlbiBub3RPcGVyYXRvciwgRGFydFR5cGUgdHlwZSkgewogICAgRXhwcmVzc2lvbiByZXN1bHQgPSBuZXcgSXNFeHByZXNzaW9uKG9wZXJhbmQsIHR5cGUpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKGlzT3BlcmF0b3IpOwogICAgaWYgKG5vdE9wZXJhdG9yICE9IG51bGwpIHsKICAgICAgcmVzdWx0ID0gY3JlYXRlTm90KHJlc3VsdCwgbm90T3BlcmF0b3IsIGZhbHNlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBsb2dpY2FsIGV4cHJlc3Npb24gaGF2aW5nIHRoZSBbbGVmdE9wZXJhbmRdLAogIC8vLyBbcmlnaHRPcGVyYW5kXSBhbmQgdGhlIFtvcGVyYXRvcl0gKGVpdGhlciBgJiZgIG9yIGB8fGApLgogIEV4cHJlc3Npb24gY3JlYXRlTG9naWNhbEV4cHJlc3Npb24oCiAgICAgIEV4cHJlc3Npb24gbGVmdE9wZXJhbmQsIFRva2VuIG9wZXJhdG9yLCBFeHByZXNzaW9uIHJpZ2h0T3BlcmFuZCkgewogICAgcmV0dXJuIG5ldyBMb2dpY2FsRXhwcmVzc2lvbigKICAgICAgICBsZWZ0T3BlcmFuZCwgb3BlcmF0b3Iuc3RyaW5nVmFsdWUsIHJpZ2h0T3BlcmFuZCkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4ob3BlcmF0b3IpOwogIH0KCiAgRXhwcmVzc2lvbiBjcmVhdGVOb3QoRXhwcmVzc2lvbiBvcGVyYW5kLCBUb2tlbiB0b2tlbiwgYm9vbCBpc1N5bnRoZXRpYykgewogICAgcmV0dXJuIG5ldyBOb3Qob3BlcmFuZCkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBwYXJlbnRoZXNpemVkIGNvbmRpdGlvbiBjb25zaXN0aW5nIG9mIHRoZQogIC8vLyBnaXZlbiBbZXhwcmVzc2lvbl0gYmV0d2VlbiB0aGUgW2xlZnRQYXJlbnRoZXNpc10gYW5kIFtyaWdodFBhcmVudGhlc2lzXS4KICBFeHByZXNzaW9uIGNyZWF0ZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oCiAgICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcywgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUb2tlbiByaWdodFBhcmVudGhlc2lzKSB7CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHJldGhyb3cgc3RhdGVtZW50IGNvbnNpc3Rpbmcgb2YgdGhlCiAgLy8vIFtyZXRocm93S2V5d29yZF0gZm9sbG93ZWQgYnkgdGhlIFtzZW1pY29sb25dLgogIFN0YXRlbWVudCBjcmVhdGVSZXRocm93U3RhdGVtZW50KFRva2VuIHJldGhyb3dLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KAogICAgICAgIG5ldyBSZXRocm93KCkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihyZXRocm93S2V5d29yZCkpOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmV0dXJuIHN0YXRlbWVudC4KICBTdGF0ZW1lbnQgY3JlYXRlUmV0dXJuU3RhdGVtZW50KAogICAgICBUb2tlbiByZXR1cm5LZXl3b3JkLCBFeHByZXNzaW9uIGV4cHJlc3Npb24sIFRva2VuIHNlbWljb2xvbikgewogICAgcmV0dXJuIG5ldyBSZXR1cm5KdWRnbWVudChyZXR1cm5LZXl3b3JkPy5sZXhlbWUsIGV4cHJlc3Npb24pCiAgICAgIC4uZmlsZU9mZnNldCA9IHJldHVybktleXdvcmQuY2hhck9mZnNldDsKICB9CgogIEV4cHJlc3Npb24gY3JlYXRlU3RyaW5nQ29uY2F0ZW5hdGlvbigKICAgICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucywgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgU3RyaW5nQ29uY2F0ZW5hdGlvbihleHByZXNzaW9ucykKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgLy8vIFRoZSBnaXZlbiBbc3RhdGVtZW50XSBpcyBiZWluZyB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgZWl0aGVyIGEgYnJlYWsgb3IKICAvLy8gY29udGludWUgc3RhdGVtZW50LiBSZXR1cm4gdGhlIHN0YXRlbWVudCB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIHRoZSBhY3R1YWwKICAvLy8gdGFyZ2V0LgogIFN0YXRlbWVudCBjcmVhdGVMYWJlbGVkU3RhdGVtZW50KFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIHJldHVybiBuZXcgTGFiZWxlZFN0YXRlbWVudChzdGF0ZW1lbnQpOwogIH0KCiAgRXhwcmVzc2lvbiBjcmVhdGVUaGlzRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBUaGlzRXhwcmVzc2lvbigpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhyb3cgZXhwcmVzc2lvbiBjb25zaXN0aW5nIG9mIHRoZQogIC8vLyBbdGhyb3dLZXl3b3JkXS4KICBFeHByZXNzaW9uIGNyZWF0ZVRocm93KFRva2VuIHRocm93S2V5d29yZCwgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICByZXR1cm4gbmV3IFRocm93KGV4cHJlc3Npb24pLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odGhyb3dLZXl3b3JkKTsKICB9CgogIGJvb2wgaXNUaHJvdyhPYmplY3QgbykgPT4gbyBpcyBUaHJvdzsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJ5IHN0YXRlbWVudC4gVGhlIHN0YXRlbWVudCBpcyBpbnRyb2R1Y2VkIGJ5CiAgLy8vIHRoZSBbdHJ5S2V5d29yZF0gYW5kIHRoZSBnaXZlbiBbYm9keV0uIElmIGNhdGNoIGNsYXVzZXMgd2VyZSBpbmNsdWRlZCwKICAvLy8gdGhlbiB0aGUgW2NhdGNoQ2xhdXNlc10gd2lsbCByZXByZXNlbnQgdGhlbSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYG51bGxgLgogIC8vLyBTaW1pbGFybHksIGlmIGEgZmluYWxseSBibG9jayB3YXMgaW5jbHVkZWQsIHRoZW4gdGhlIFtmaW5hbGx5S2V5d29yZF0gYW5kCiAgLy8vIFtmaW5hbGx5QmxvY2tdIHdpbGwgYmUgbm9uLWBudWxsYCwgb3RoZXJ3aXNlIGJvdGggd2lsbCBiZSBgbnVsbGAuIElmIHRoZXJlCiAgLy8vIHdhcyBhbiBlcnJvciBpbiBzb21lIHBhcnQgb2YgdGhlIHRyeSBzdGF0ZW1lbnQsIHRoZW4gYW4gW2Vycm9yUmVwbGFjZW1lbnRdCiAgLy8vIG1pZ2h0IGJlIHByb3ZpZGVkLCBpbiB3aGljaCBjYXNlIGl0IGNvdWxkIGJlIHJldHVybmVkIGluc3RlYWQgb2YgdGhlCiAgLy8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cnkgc3RhdGVtZW50LgogIFN0YXRlbWVudCBjcmVhdGVUcnlTdGF0ZW1lbnQoVG9rZW4gdHJ5S2V5d29yZCwgU3RhdGVtZW50IGJvZHksCiAgICAgIExpc3Q8Q2F0Y2g+IGNhdGNoQ2xhdXNlcywgVG9rZW4gZmluYWxseUtleXdvcmQsIFN0YXRlbWVudCBmaW5hbGx5QmxvY2spIHsKICAgIFN0YXRlbWVudCByZXN1bHQgPSBib2R5OwogICAgaWYgKGNhdGNoQ2xhdXNlcyAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBUcnlDYXRjaEp1ZGdtZW50KHJlc3VsdCwgY2F0Y2hDbGF1c2VzKTsKICAgIH0KICAgIGlmIChmaW5hbGx5QmxvY2sgIT0gbnVsbCkgewogICAgICByZXN1bHQgPSBuZXcgVHJ5RmluYWxseUp1ZGdtZW50KHJlc3VsdCwgZmluYWxseUJsb2NrKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBfVmFyaWFibGVzRGVjbGFyYXRpb24gdmFyaWFibGVzRGVjbGFyYXRpb24oCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gZGVjbGFyYXRpb25zLCBVcmkgdXJpKSB7CiAgICByZXR1cm4gbmV3IF9WYXJpYWJsZXNEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIHVyaSk7CiAgfQoKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlc0RlY2xhcmF0aW9uRXh0cmFjdERlY2xhcmF0aW9ucygKICAgICAgX1ZhcmlhYmxlc0RlY2xhcmF0aW9uIHZhcmlhYmxlc0RlY2xhcmF0aW9uKSB7CiAgICByZXR1cm4gdmFyaWFibGVzRGVjbGFyYXRpb24uZGVjbGFyYXRpb25zOwogIH0KCiAgU3RhdGVtZW50IHdyYXBWYXJpYWJsZXMoU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgaWYgKHN0YXRlbWVudCBpcyBfVmFyaWFibGVzRGVjbGFyYXRpb24pIHsKICAgICAgcmV0dXJuIG5ldyBCbG9ja0p1ZGdtZW50KAogICAgICAgICAgbmV3IExpc3Q8U3RhdGVtZW50Pi5mcm9tKHN0YXRlbWVudC5kZWNsYXJhdGlvbnMsIGdyb3dhYmxlOiB0cnVlKSkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBzdGF0ZW1lbnQuZmlsZU9mZnNldDsKICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50IGlzIFZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgcmV0dXJuIG5ldyBCbG9ja0p1ZGdtZW50KDxTdGF0ZW1lbnQ+W3N0YXRlbWVudF0pCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gc3RhdGVtZW50LmZpbGVPZmZzZXQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gc3RhdGVtZW50OwogICAgfQogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgd2hpbGUgc3RhdGVtZW50IGludHJvZHVjZWQgYnkgdGhlCiAgLy8vIFt3aGlsZUtleXdvcmRdIGFuZCBjb25zaXN0aW5nIG9mIHRoZSBnaXZlbiBbY29uZGl0aW9uXSBhbmQgW2JvZHldLgogIFN0YXRlbWVudCBjcmVhdGVXaGlsZVN0YXRlbWVudCgKICAgICAgVG9rZW4gd2hpbGVLZXl3b3JkLCBFeHByZXNzaW9uIGNvbmRpdGlvbiwgU3RhdGVtZW50IGJvZHkpIHsKICAgIHJldHVybiBuZXcgV2hpbGVKdWRnbWVudChjb25kaXRpb24sIGJvZHkpCiAgICAgIC4uZmlsZU9mZnNldCA9IHdoaWxlS2V5d29yZC5jaGFyT2Zmc2V0OwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgeWllbGQgc3RhdGVtZW50IGNvbnNpc3Rpbmcgb2YgdGhlCiAgLy8vIFt5aWVsZEtleXdvcmRdLCBbc3Rhcl0sIFtleHByZXNzaW9uXSwgYW5kIFtzZW1pY29sb25dLiBUaGUgW3N0YXJdIGlzIG51bGwKICAvLy8gd2hlbiBubyBzdGFyIHdhcyBpbmNsdWRlZCBpbiB0aGUgc291cmNlIGNvZGUuCiAgU3RhdGVtZW50IGNyZWF0ZVlpZWxkU3RhdGVtZW50KAogICAgICBUb2tlbiB5aWVsZEtleXdvcmQsIFRva2VuIHN0YXIsIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICByZXR1cm4gbmV3IFlpZWxkSnVkZ21lbnQoc3RhciAhPSBudWxsLCBleHByZXNzaW9uKQogICAgICAuLmZpbGVPZmZzZXQgPSB5aWVsZEtleXdvcmQuY2hhck9mZnNldDsKICB9CgogIC8vLyBSZXR1cm4gdGhlIGV4cHJlc3Npb24gZnJvbSB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBbc3RhdGVtZW50XS4KICBFeHByZXNzaW9uIGdldEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvblN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICByZXR1cm4gKHN0YXRlbWVudCBhcyBFeHByZXNzaW9uU3RhdGVtZW50KS5leHByZXNzaW9uOwogIH0KCiAgYm9vbCBpc0Jsb2NrKE9iamVjdCBub2RlKSA9PiBub2RlIGlzIEJsb2NrOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gW3N0YXRlbWVudF0gaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVtcHR5CiAgLy8vIHN0YXRlbWVudC4KICBib29sIGlzRW1wdHlTdGF0ZW1lbnQoU3RhdGVtZW50IHN0YXRlbWVudCkgPT4gc3RhdGVtZW50IGlzIEVtcHR5U3RhdGVtZW50OwoKICBib29sIGlzRXJyb25lb3VzTm9kZShPYmplY3Qgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICBFeHByZXNzaW9uU3RhdGVtZW50IHN0YXRlbWVudCA9IG5vZGU7CiAgICAgIG5vZGUgPSBzdGF0ZW1lbnQuZXhwcmVzc2lvbjsKICAgIH0KICAgIGlmIChub2RlIGlzIFZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5vZGU7CiAgICAgIG5vZGUgPSB2YXJpYWJsZS5pbml0aWFsaXplcjsKICAgIH0KICAgIGlmIChub2RlIGlzIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCkgewogICAgICBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQgc3ludGggPSBub2RlOwogICAgICBub2RlID0gc3ludGguZGVzdWdhcmVkOwogICAgfQogICAgaWYgKG5vZGUgaXMgTGV0KSB7CiAgICAgIExldCBsZXQgPSBub2RlOwogICAgICBub2RlID0gbGV0LnZhcmlhYmxlLmluaXRpYWxpemVyOwogICAgfQogICAgcmV0dXJuIG5vZGUgaXMgSW52YWxpZEV4cHJlc3Npb247CiAgfQoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gW3N0YXRlbWVudF0gaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuCiAgLy8vIGV4cHJlc3Npb24gc3RhdGVtZW50LgogIGJvb2wgaXNFeHByZXNzaW9uU3RhdGVtZW50KFN0YXRlbWVudCBzdGF0ZW1lbnQpID0+CiAgICAgIHN0YXRlbWVudCBpcyBFeHByZXNzaW9uU3RhdGVtZW50OwoKICBib29sIGlzVGhpc0V4cHJlc3Npb24oT2JqZWN0IG5vZGUpID0+IG5vZGUgaXMgVGhpc0V4cHJlc3Npb247CgogIGJvb2wgaXNWYXJpYWJsZXNEZWNsYXJhdGlvbihPYmplY3Qgbm9kZSkgPT4gbm9kZSBpcyBfVmFyaWFibGVzRGVjbGFyYXRpb247Cn0KCmNsYXNzIF9WYXJpYWJsZXNEZWNsYXJhdGlvbiBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBkZWNsYXJhdGlvbnM7CiAgZmluYWwgVXJpIHVyaTsKCiAgX1ZhcmlhYmxlc0RlY2xhcmF0aW9uKHRoaXMuZGVjbGFyYXRpb25zLCB0aGlzLnVyaSkgewogICAgc2V0UGFyZW50cyhkZWNsYXJhdGlvbnMsIHRoaXMpOwogIH0KCiAgYWNjZXB0KHYpIHsKICAgIHVuc3VwcG9ydGVkKCJhY2NlcHQiLCBmaWxlT2Zmc2V0LCB1cmkpOwogIH0KCiAgYWNjZXB0MSh2LCBhcmcpIHsKICAgIHVuc3VwcG9ydGVkKCJhY2NlcHQxIiwgZmlsZU9mZnNldCwgdXJpKTsKICB9CgogIHZpc2l0Q2hpbGRyZW4odikgewogICAgdW5zdXBwb3J0ZWQoInZpc2l0Q2hpbGRyZW4iLCBmaWxlT2Zmc2V0LCB1cmkpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4odikgewogICAgdW5zdXBwb3J0ZWQoInRyYW5zZm9ybUNoaWxkcmVuIiwgZmlsZU9mZnNldCwgdXJpKTsKICB9Cn0Kgo0ATk48ARcBIgEiATcBLAElARoJFBYXFRMUFwEgCRsjIRcXFBggJRUUFR0dHBgcHx8lGhwdFxcBGw8SAUY9SSwEATAzBAE+HAQBPiEEAT8cBAFORwQBPAFQJTtHBAFPJUFKBAFRJTgxLAQBQkYEAUtNTk1OTk5PUE8xIRoUGxwZJBxQOzA2QgQBSk1OTU1OTk5OTi8fGhQbHBckGlA7LzZABAFKTU5PTUZOUFFQTVBAHxoUGBocFx4aUDsrQkAEAUkvQgQBRks3QUkEAUZBUQQBPk4EAVFQUUlLSQQBNAEgOzsEAUIxBAEhOy4sBAFHQSwEAUQrNSwEAR1ONiwEAR8rHCAXFT8sBAEeKxwgFRVALAQBISQbGhcaEx9JGiwEASAkGxoVGhMfShosBAFLGC0bHRwTHEBLBAFITlBDSy4HRiU+MxMGR1AwQzIqMy4RLzNMLhEKKAgmJg9LCAYyKycbBAFGTQQBTigZRxoyKzBGLSEdCAYxMAQBNCI7SwQBMRUXHhouLx8YNz9ABAFOUUpPDU9LJjkvBAE3JT5OBAExP0NPBAFLJFA4BAFMEzQpBAEyIBgdKxscJCEeGEEsBAE0RU1DKwQBSlFQTCFQODEfNgYTBAFQPyZJIjkvBAFMQQQBTU8rThcEAUc0TCxFBAE1I0VBLwQBKDMwLAQBTVEOOiwEATFFBAFGFkZNBAEoAVFNUFBRUUsrQVAdIDsGID0GEwQBLjk5BAFFNC4EATEuIEwtMzctDRgGBAFFSSJCLi4EAUVQNCJQNy4EAUNJOgQBLgFPEU0BJicsIwYnKyMGLzAeBhcWJwYmBAFJHDUoAUABTQIBMDARATckBAEOLAQBFC0EARUzBAEZNwQCAS5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2ZvcmVzdC5kYXJ0R3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvaW1wbGljaXRfdHlwZV9hcmd1bWVudC5kYXJ0hJgvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmltcGxpY2l0X3R5cGVfYXJndW1lbnQ7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBEYXJ0VHlwZSwgRGFydFR5cGVWaXNpdG9yLCBEYXJ0VHlwZVZpc2l0b3IxLCBWaXNpdG9yOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZCwgdW5zdXBwb3J0ZWQ7CgovLy8gTWFya2VyIHR5cGUgdXNlZCBhcyB0eXBlIGFyZ3VtZW50IG9uIGxpc3QsIHNldCBhbmQgbWFwIGxpdGVyYWxzIHdoZW5ldmVyCi8vLyB0eXBlIGFyZ3VtZW50cyBhcmUgb21pdHRlZCBpbiB0aGUgc291cmNlLgovLy8KLy8vIEFsbCBvZiB0aGVzZSB0eXBlcyBhcmUgcmVwbGFjZWQgYnkgdGhlIHR5cGUgaW5mZXJlbmNlLiBJdCBpcyBhbiBpbnRlcm5hbAovLy8gZXJyb3IgaWYgb25lIHN1cnZpdmVzIHRvIHRoZSBmaW5hbCBvdXRwdXQuCmNsYXNzIEltcGxpY2l0VHlwZUFyZ3VtZW50IGV4dGVuZHMgRGFydFR5cGUgewogIGNvbnN0IEltcGxpY2l0VHlwZUFyZ3VtZW50KCk7CgogIEBvdmVycmlkZQogIGdldCBudWxsYWJpbGl0eSA9PiB1bnN1cHBvcnRlZCgibnVsbGFiaWxpdHkiLCAtMSwgbnVsbCk7CgogIEBvdmVycmlkZQogIGFjY2VwdChEYXJ0VHlwZVZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB1bmhhbmRsZWQoIiRydW50aW1lVHlwZSIsICIke3YucnVudGltZVR5cGV9IiwgLTEsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxPE9iamVjdCwgT2JqZWN0PiB2LCBhcmcpIHsKICAgIHVuaGFuZGxlZCgiJHJ1bnRpbWVUeXBlIiwgIiR7di5ydW50aW1lVHlwZX0iLCAtMSwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB1bmhhbmRsZWQoIiRydW50aW1lVHlwZSIsICIke3YucnVudGltZVR5cGV9IiwgLTEsIG51bGwpOwogIH0KfQonAE1OPwEmASE/ATcBTS4ETS8uIAEMOwEMJj0EAQw1PQQBDCU9BAIBPnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvaW1wbGljaXRfdHlwZV9hcmd1bWVudC5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdHlwZV9hbGdvcml0aG1zLmRhcnTAAH8PLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBCb3R0b21UeXBlLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIERhcnRUeXBlVmlzaXRvciwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmVHlwZSwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgY29udGFpbnNUeXBlVmFyaWFibGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnQnIHNob3cgVmFyaWFuY2U7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3V0aWwvZ3JhcGguZGFydCcgc2hvdyBHcmFwaCwgY29tcHV0ZVN0cm9uZ0NvbXBvbmVudHM7CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVBbGlhc0J1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9kaWxsL2RpbGxfY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxDbGFzc0J1aWxkZXI7CgppbXBvcnQgJy4uL2RpbGwvZGlsbF90eXBlX2FsaWFzX2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsVHlwZUFsaWFzQnVpbGRlcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICB0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHksCiAgICAgICAgdGVtcGxhdGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHksCiAgICAgICAgdGVtcGxhdGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMsCiAgICAgICAgdGVtcGxhdGVOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZSwKICAgICAgICB0ZW1wbGF0ZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGU7CgpleHBvcnQgJ3BhY2thZ2U6a2VybmVsL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnQnIHNob3cgVmFyaWFuY2U7CgovLyBDb21wdXRlcyB0aGUgdmFyaWFuY2Ugb2YgYSB2YXJpYWJsZSBpbiBhIHR5cGUuICBUaGUgZnVuY3Rpb24gY2FuIGJlIHJ1bgovLyBiZWZvcmUgdGhlIHR5cGVzIGFyZSByZXNvbHZlZCB0byBjb21wdXRlIHZhcmlhbmNlcyBvZiB0eXBlZGVmcycgdHlwZQovLyB2YXJpYWJsZXMuICBGb3IgdGhhdCBjYXNlIGlmIHRoZSB0eXBlIGhhcyBpdHMgZGVjbGFyYXRpb24gc2V0IHRvIG51bGwgYW5kIGl0cwovLyBuYW1lIG1hdGNoZXMgdGhhdCBvZiB0aGUgdmFyaWFibGUsIGl0J3MgaW50ZXJwcmV0ZWQgYXMgYW4gb2NjdXJyZW5jZSBvZiBhCi8vIHR5cGUgdmFyaWFibGUuCmludCBjb21wdXRlVmFyaWFuY2UoVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSwgVHlwZUJ1aWxkZXIgdHlwZSkgewogIGlmICh0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24gPSB0eXBlLmRlY2xhcmF0aW9uOwogICAgaWYgKGRlY2xhcmF0aW9uID09IG51bGwgfHwgZGVjbGFyYXRpb24gaXMgVHlwZVZhcmlhYmxlQnVpbGRlcikgewogICAgICBpZiAodHlwZS5uYW1lID09IHZhcmlhYmxlLm5hbWUpIHsKICAgICAgICByZXR1cm4gVmFyaWFuY2UuY292YXJpYW50OwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBWYXJpYW5jZS51bnJlbGF0ZWQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICBpbnQgcmVzdWx0ID0gVmFyaWFuY2UudW5yZWxhdGVkOwogICAgICAgIGlmICh0eXBlLmFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHR5cGUuYXJndW1lbnRzKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IFZhcmlhbmNlLm1lZXQocmVzdWx0LCBjb21wdXRlVmFyaWFuY2UodmFyaWFibGUsIGFyZ3VtZW50KSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgVHlwZUFsaWFzQnVpbGRlcikgewogICAgICAgIGludCByZXN1bHQgPSBWYXJpYW5jZS51bnJlbGF0ZWQ7CiAgICAgICAgaWYgKHR5cGUuYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5hcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgcmVzdWx0ID0gVmFyaWFuY2UubWVldCgKICAgICAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgICAgIFZhcmlhbmNlLmNvbWJpbmUoCiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZhcmlhbmNlKHZhcmlhYmxlLCB0eXBlLmFyZ3VtZW50c1tpXSksCiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZhcmlhbmNlKAogICAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzW2ldLCBkZWNsYXJhdGlvbi50eXBlKSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgIGludCByZXN1bHQgPSBWYXJpYW5jZS51bnJlbGF0ZWQ7CiAgICBpZiAodHlwZS5yZXR1cm5UeXBlICE9IG51bGwpIHsKICAgICAgcmVzdWx0ID0KICAgICAgICAgIFZhcmlhbmNlLm1lZXQocmVzdWx0LCBjb21wdXRlVmFyaWFuY2UodmFyaWFibGUsIHR5cGUucmV0dXJuVHlwZSkpOwogICAgfQogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgLy8gSWYgW3ZhcmlhYmxlXSBpcyByZWZlcmVuY2VkIGluIHRoZSBib3VuZCBhdCBhbGwsIGl0IG1ha2VzIHRoZQogICAgICAgIC8vIHZhcmlhbmNlIG9mIFt2YXJpYWJsZV0gaW4gdGhlIGVudGlyZSB0eXBlIGludmFyaWFudC4gIFRoZSBpbnZvY2F0aW9uCiAgICAgICAgLy8gb2YgW2NvbXB1dGVWYXJpYW5jZV0gYmVsb3cgaXMgbWFkZSB0byBzaW1wbHkgZmlndXJlIG91dCBpZiBbdmFyaWFibGVdCiAgICAgICAgLy8gb2NjdXJzIGluIHRoZSBib3VuZC4KICAgICAgICBpZiAodHlwZVZhcmlhYmxlLmJvdW5kICE9IG51bGwgJiYKICAgICAgICAgICAgY29tcHV0ZVZhcmlhbmNlKHZhcmlhYmxlLCB0eXBlVmFyaWFibGUuYm91bmQpICE9CiAgICAgICAgICAgICAgICBWYXJpYW5jZS51bnJlbGF0ZWQpIHsKICAgICAgICAgIHJlc3VsdCA9IFZhcmlhbmNlLmludmFyaWFudDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIHR5cGUuZm9ybWFscykgewogICAgICAgIHJlc3VsdCA9IFZhcmlhbmNlLm1lZXQoCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgVmFyaWFuY2UuY29tYmluZShWYXJpYW5jZS5jb250cmF2YXJpYW50LAogICAgICAgICAgICAgICAgY29tcHV0ZVZhcmlhbmNlKHZhcmlhYmxlLCBmb3JtYWwudHlwZSkpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgcmV0dXJuIFZhcmlhbmNlLnVucmVsYXRlZDsKfQoKVHlwZUJ1aWxkZXIgc3Vic3RpdHV0ZVJhbmdlKAogICAgVHlwZUJ1aWxkZXIgdHlwZSwKICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gdXBwZXJTdWJzdGl0dXRpb24sCiAgICBNYXA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+IGxvd2VyU3Vic3RpdHV0aW9uLAogICAge2Jvb2wgaXNDb3ZhcmlhbnQgPSB0cnVlfSkgewogIGlmICh0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgIGlmICh0eXBlLmRlY2xhcmF0aW9uIGlzIFR5cGVWYXJpYWJsZUJ1aWxkZXIpIHsKICAgICAgaWYgKGlzQ292YXJpYW50KSB7CiAgICAgICAgcmV0dXJuIHVwcGVyU3Vic3RpdHV0aW9uW3R5cGUuZGVjbGFyYXRpb25dID8/IHR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGxvd2VyU3Vic3RpdHV0aW9uW3R5cGUuZGVjbGFyYXRpb25dID8/IHR5cGU7CiAgICB9CiAgICBpZiAodHlwZS5hcmd1bWVudHMgPT0gbnVsbCB8fCB0eXBlLmFyZ3VtZW50cy5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50czsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5hcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZUJ1aWxkZXIgc3Vic3RpdHV0ZWRBcmd1bWVudCA9IHN1YnN0aXR1dGVSYW5nZSgKICAgICAgICAgIHR5cGUuYXJndW1lbnRzW2ldLCB1cHBlclN1YnN0aXR1dGlvbiwgbG93ZXJTdWJzdGl0dXRpb24sCiAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQpOwogICAgICBpZiAoc3Vic3RpdHV0ZWRBcmd1bWVudCAhPSB0eXBlLmFyZ3VtZW50c1tpXSkgewogICAgICAgIGFyZ3VtZW50cyA/Pz0gdHlwZS5hcmd1bWVudHMudG9MaXN0KCk7CiAgICAgICAgYXJndW1lbnRzW2ldID0gc3Vic3RpdHV0ZWRBcmd1bWVudDsKICAgICAgfQogICAgfQogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcih0eXBlLm5hbWUsIGFyZ3VtZW50cykuLmJpbmQodHlwZS5kZWNsYXJhdGlvbik7CiAgICB9CiAgICByZXR1cm4gdHlwZTsKICB9CgogIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdmFyaWFibGVzOwogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIHZhcmlhYmxlcyA9IG5ldyBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+KHR5cGUudHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogICAgfQogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzOwogICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvcm1hbHMgPSBuZXcgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPih0eXBlLmZvcm1hbHMubGVuZ3RoKTsKICAgIH0KICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGU7CiAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKCiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlID0gdHlwZS50eXBlVmFyaWFibGVzW2ldOwogICAgICAgIFR5cGVCdWlsZGVyIGJvdW5kID0gc3Vic3RpdHV0ZVJhbmdlKAogICAgICAgICAgICB2YXJpYWJsZS5ib3VuZCwgdXBwZXJTdWJzdGl0dXRpb24sIGxvd2VyU3Vic3RpdHV0aW9uLAogICAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQpOwogICAgICAgIGlmIChib3VuZCAhPSB2YXJpYWJsZS5ib3VuZCkgewogICAgICAgICAgdmFyaWFibGVzW2ldID0gbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIoCiAgICAgICAgICAgICAgdmFyaWFibGUubmFtZSwgdmFyaWFibGUucGFyZW50LCB2YXJpYWJsZS5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIGJvdW5kOiBib3VuZCk7CiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyaWFibGVzW2ldID0gdmFyaWFibGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWFscy5sZW5ndGg7IGkrKykgewogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsID0gdHlwZS5mb3JtYWxzW2ldOwogICAgICAgIFR5cGVCdWlsZGVyIHBhcmFtZXRlclR5cGUgPSBzdWJzdGl0dXRlUmFuZ2UoCiAgICAgICAgICAgIGZvcm1hbC50eXBlLCB1cHBlclN1YnN0aXR1dGlvbiwgbG93ZXJTdWJzdGl0dXRpb24sCiAgICAgICAgICAgIGlzQ292YXJpYW50OiAhaXNDb3ZhcmlhbnQpOwogICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlICE9IGZvcm1hbC50eXBlKSB7CiAgICAgICAgICBmb3JtYWxzW2ldID0gbmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIoCiAgICAgICAgICAgICAgZm9ybWFsLm1ldGFkYXRhLAogICAgICAgICAgICAgIGZvcm1hbC5tb2RpZmllcnMsCiAgICAgICAgICAgICAgcGFyYW1ldGVyVHlwZSwKICAgICAgICAgICAgICBmb3JtYWwubmFtZSwKICAgICAgICAgICAgICBmb3JtYWwucGFyZW50LAogICAgICAgICAgICAgIGZvcm1hbC5jaGFyT2Zmc2V0KTsKICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3JtYWxzW2ldID0gZm9ybWFsOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVyblR5cGUgPSBzdWJzdGl0dXRlUmFuZ2UoCiAgICAgICAgdHlwZS5yZXR1cm5UeXBlLCB1cHBlclN1YnN0aXR1dGlvbiwgbG93ZXJTdWJzdGl0dXRpb24sCiAgICAgICAgaXNDb3ZhcmlhbnQ6IHRydWUpOwogICAgaWYgKHJldHVyblR5cGUgIT0gdHlwZS5yZXR1cm5UeXBlKSB7CiAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgfQoKICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlQnVpbGRlcihyZXR1cm5UeXBlLCB2YXJpYWJsZXMsIGZvcm1hbHMpOwogICAgfQoKICAgIHJldHVybiB0eXBlOwogIH0KICByZXR1cm4gdHlwZTsKfQoKVHlwZUJ1aWxkZXIgc3Vic3RpdHV0ZSgKICAgIFR5cGVCdWlsZGVyIHR5cGUsIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gc3Vic3RpdHV0aW9uKSB7CiAgcmV0dXJuIHN1YnN0aXR1dGVSYW5nZSh0eXBlLCBzdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbiwgaXNDb3ZhcmlhbnQ6IHRydWUpOwp9CgovLy8gQ2FsY3VsYXRlcyBib3VuZHMgdG8gYmUgcHJvdmlkZWQgYXMgdHlwZSBhcmd1bWVudHMgaW4gcGxhY2Ugb2YgbWlzc2luZyB0eXBlCi8vLyBhcmd1bWVudHMgb24gcmF3IHR5cGVzIHdpdGggdGhlIGdpdmVuIHR5cGUgcGFyYW1ldGVycy4KLy8vCi8vLyBTZWUgdGhlIFtkZXNjcmlwdGlvbl0KLy8vIChodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9ibG9iL21hc3Rlci9kb2NzL2xhbmd1YWdlL2luZm9ybWFsL2luc3RhbnRpYXRlLXRvLWJvdW5kLm1kKQovLy8gb2YgdGhlIGFsZ29yaXRobSBmb3IgZGV0YWlscy4KTGlzdDxUeXBlQnVpbGRlcj4gY2FsY3VsYXRlQm91bmRzKExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdmFyaWFibGVzLAogICAgVHlwZUJ1aWxkZXIgZHluYW1pY1R5cGUsIFR5cGVCdWlsZGVyIGJvdHRvbVR5cGUsIENsYXNzQnVpbGRlciBvYmplY3RDbGFzcykgewogIExpc3Q8VHlwZUJ1aWxkZXI+IGJvdW5kcyA9IG5ldyBMaXN0PFR5cGVCdWlsZGVyPih2YXJpYWJsZXMubGVuZ3RoKTsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgIGJvdW5kc1tpXSA9IHZhcmlhYmxlc1tpXS5ib3VuZCA/PyBkeW5hbWljVHlwZTsKICB9CgogIFR5cGVWYXJpYWJsZXNHcmFwaCBncmFwaCA9IG5ldyBUeXBlVmFyaWFibGVzR3JhcGgodmFyaWFibGVzLCBib3VuZHMpOwogIExpc3Q8TGlzdDxpbnQ+PiBzdHJvbmdseUNvbm5lY3RlZCA9IGNvbXB1dGVTdHJvbmdDb21wb25lbnRzKGdyYXBoKTsKICBmb3IgKExpc3Q8aW50PiBjb21wb25lbnQgaW4gc3Ryb25nbHlDb25uZWN0ZWQpIHsKICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gZHluYW1pY1N1YnN0aXR1dGlvbiA9CiAgICAgICAgPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPnt9OwogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBudWxsU3Vic3RpdHV0aW9uID0KICAgICAgICA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+e307CiAgICBmb3IgKGludCB2YXJpYWJsZUluZGV4IGluIGNvbXBvbmVudCkgewogICAgICBkeW5hbWljU3Vic3RpdHV0aW9uW3ZhcmlhYmxlc1t2YXJpYWJsZUluZGV4XV0gPSBkeW5hbWljVHlwZTsKICAgICAgbnVsbFN1YnN0aXR1dGlvblt2YXJpYWJsZXNbdmFyaWFibGVJbmRleF1dID0gYm90dG9tVHlwZTsKICAgIH0KICAgIGZvciAoaW50IHZhcmlhYmxlSW5kZXggaW4gY29tcG9uZW50KSB7CiAgICAgIGJvdW5kc1t2YXJpYWJsZUluZGV4XSA9IHN1YnN0aXR1dGVSYW5nZSgKICAgICAgICAgIGJvdW5kc1t2YXJpYWJsZUluZGV4XSwgZHluYW1pY1N1YnN0aXR1dGlvbiwgbnVsbFN1YnN0aXR1dGlvbiwKICAgICAgICAgIGlzQ292YXJpYW50OiB0cnVlKTsKICAgIH0KICB9CgogIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICBNYXA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+IHN1YnN0aXR1dGlvbiA9CiAgICAgICAgPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPnt9OwogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBudWxsU3Vic3RpdHV0aW9uID0KICAgICAgICA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+e307CiAgICBzdWJzdGl0dXRpb25bdmFyaWFibGVzW2ldXSA9IGJvdW5kc1tpXTsKICAgIG51bGxTdWJzdGl0dXRpb25bdmFyaWFibGVzW2ldXSA9IGJvdHRvbVR5cGU7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IHZhcmlhYmxlcy5sZW5ndGg7IGorKykgewogICAgICBib3VuZHNbal0gPSBzdWJzdGl0dXRlUmFuZ2UoYm91bmRzW2pdLCBzdWJzdGl0dXRpb24sIG51bGxTdWJzdGl0dXRpb24sCiAgICAgICAgICBpc0NvdmFyaWFudDogdHJ1ZSk7CiAgICB9CiAgfQoKICByZXR1cm4gYm91bmRzOwp9CgovLy8gR3JhcGggb2YgbXV0dWFsIGRlcGVuZGVuY2llcyBvZiB0eXBlIHZhcmlhYmxlcyBmcm9tIHRoZSBzYW1lIGRlY2xhcmF0aW9uLgovLy8gVHlwZSB2YXJpYWJsZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZWlyIGluZGljZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcKLy8vIGRlY2xhcmF0aW9uLgpjbGFzcyBUeXBlVmFyaWFibGVzR3JhcGggaW1wbGVtZW50cyBHcmFwaDxpbnQ+IHsKICBMaXN0PGludD4gdmVydGljZXM7CiAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB2YXJpYWJsZXM7CiAgTGlzdDxUeXBlQnVpbGRlcj4gYm91bmRzOwoKICAvLyBgZWRnZXNbaV1gIGlzIHRoZSBsaXN0IG9mIGluZGljZXMgb2YgdHlwZSB2YXJpYWJsZXMgdGhhdCByZWZlcmVuY2UgdGhlIHR5cGUKICAvLyB2YXJpYWJsZSB3aXRoIHRoZSBpbmRleCBgaWAgaW4gdGhlaXIgYm91bmRzLgogIExpc3Q8TGlzdDxpbnQ+PiBlZGdlczsKCiAgVHlwZVZhcmlhYmxlc0dyYXBoKHRoaXMudmFyaWFibGVzLCB0aGlzLmJvdW5kcykgewogICAgYXNzZXJ0KHZhcmlhYmxlcy5sZW5ndGggPT0gYm91bmRzLmxlbmd0aCk7CgogICAgdmVydGljZXMgPSBuZXcgTGlzdDxpbnQ+KHZhcmlhYmxlcy5sZW5ndGgpOwogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIGludD4gdmFyaWFibGVJbmRpY2VzID0KICAgICAgICA8VHlwZVZhcmlhYmxlQnVpbGRlciwgaW50Pnt9OwogICAgZWRnZXMgPSBuZXcgTGlzdDxMaXN0PGludD4+KHZhcmlhYmxlcy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykgewogICAgICB2ZXJ0aWNlc1tpXSA9IGk7CiAgICAgIHZhcmlhYmxlSW5kaWNlc1t2YXJpYWJsZXNbaV1dID0gaTsKICAgICAgZWRnZXNbaV0gPSA8aW50PltdOwogICAgfQoKICAgIHZvaWQgY29sbGVjdFJlZmVyZW5jZXNGcm9tKGludCBpbmRleCwgVHlwZUJ1aWxkZXIgdHlwZSkgewogICAgICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgICAgaWYgKHR5cGUuZGVjbGFyYXRpb24gaXMgVHlwZVZhcmlhYmxlQnVpbGRlciAmJgogICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5jb250YWlucyh0eXBlLmRlY2xhcmF0aW9uKSkgewogICAgICAgICAgZWRnZXNbdmFyaWFibGVJbmRpY2VzW3R5cGUuZGVjbGFyYXRpb25dXS5hZGQoaW5kZXgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZS5hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChUeXBlQnVpbGRlciBhcmd1bWVudCBpbiB0eXBlLmFyZ3VtZW50cykgewogICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlc0Zyb20oaW5kZXgsIGFyZ3VtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICAgICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHlwZVZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlc0Zyb20oaW5kZXgsIHR5cGVWYXJpYWJsZS5ib3VuZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlciBpbiB0eXBlLmZvcm1hbHMpIHsKICAgICAgICAgICAgY29sbGVjdFJlZmVyZW5jZXNGcm9tKGluZGV4LCBwYXJhbWV0ZXIudHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbGxlY3RSZWZlcmVuY2VzRnJvbShpbmRleCwgdHlwZS5yZXR1cm5UeXBlKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29sbGVjdFJlZmVyZW5jZXNGcm9tKGksIGJvdW5kc1tpXSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBpbmRpY2VzIG9mIHR5cGUgdmFyaWFibGVzIHRoYXQgZGVwZW5kIG9uIHRoZSB0eXBlIHZhcmlhYmxlIHdpdGgKICAvLy8gW2luZGV4XS4KICBJdGVyYWJsZTxpbnQ+IG5laWdoYm9yc09mKGludCBpbmRleCkgewogICAgcmV0dXJuIGVkZ2VzW2luZGV4XTsKICB9Cn0KCi8vLyBGaW5kcyBhbGwgdHlwZSBidWlsZGVycyBmb3IgW3ZhcmlhYmxlXSBpbiBbdHlwZV0uCi8vLwovLy8gUmV0dXJucyBsaXN0IG9mIHRoZSBmb3VuZCB0eXBlIGJ1aWxkZXJzLgpMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+IGZpbmRWYXJpYWJsZVVzZXNJblR5cGUoCiAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSwKICBUeXBlQnVpbGRlciB0eXBlLAopIHsKICB2YXIgdXNlcyA9IDxOYW1lZFR5cGVCdWlsZGVyPltdOwogIGlmICh0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgIGlmICh0eXBlLmRlY2xhcmF0aW9uID09IHZhcmlhYmxlKSB7CiAgICAgIHVzZXMuYWRkKHR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKHR5cGUuYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHR5cGUuYXJndW1lbnRzKSB7CiAgICAgICAgICB1c2VzLmFkZEFsbChmaW5kVmFyaWFibGVVc2VzSW5UeXBlKHZhcmlhYmxlLCBhcmd1bWVudCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gZWxzZSBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICB1c2VzLmFkZEFsbChmaW5kVmFyaWFibGVVc2VzSW5UeXBlKHZhcmlhYmxlLCB0eXBlLnJldHVyblR5cGUpKTsKICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgZGVwZW5kZW50VmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgaWYgKGRlcGVuZGVudFZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgIHVzZXMuYWRkQWxsKAogICAgICAgICAgICAgIGZpbmRWYXJpYWJsZVVzZXNJblR5cGUodmFyaWFibGUsIGRlcGVuZGVudFZhcmlhYmxlLmJvdW5kKSk7CiAgICAgICAgfQogICAgICAgIGlmIChkZXBlbmRlbnRWYXJpYWJsZS5kZWZhdWx0VHlwZSAhPSBudWxsKSB7CiAgICAgICAgICB1c2VzLmFkZEFsbCgKICAgICAgICAgICAgICBmaW5kVmFyaWFibGVVc2VzSW5UeXBlKHZhcmlhYmxlLCBkZXBlbmRlbnRWYXJpYWJsZS5kZWZhdWx0VHlwZSkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gdHlwZS5mb3JtYWxzKSB7CiAgICAgICAgdXNlcy5hZGRBbGwoZmluZFZhcmlhYmxlVXNlc0luVHlwZSh2YXJpYWJsZSwgZm9ybWFsLnR5cGUpKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gdXNlczsKfQoKLy8vIEZpbmRzIHRob3NlIG9mIFt2YXJpYWJsZXNdIHRoYXQgcmVmZXJlbmNlIG90aGVyIFt2YXJpYWJsZXNdIGluIHRoZWlyIGJvdW5kcy4KLy8vCi8vLyBSZXR1cm5zIGZsYXR0ZW5lZCBsaXN0IG9mIHBhaXJzLiAgVGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHBhaXIgaXMgdGhlIHR5cGUKLy8vIHZhcmlhYmxlIGJ1aWxkZXIgZnJvbSBbdmFyaWFibGVzXSB0aGF0IHJlZmVyZW5jZXMgb3RoZXIgW3ZhcmlhYmxlc10gaW4gaXRzCi8vLyBib3VuZC4gIFRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgcGFpciBpcyB0aGUgbGlzdCBvZiBmb3VuZCByZWZlcmVuY2VzCi8vLyByZXByZXNlbnRlZCBhcyB0eXBlIGJ1aWxkZXJzLgpMaXN0PE9iamVjdD4gZmluZEluYm91bmRSZWZlcmVuY2VzKExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdmFyaWFibGVzKSB7CiAgdmFyIHZhcmlhYmxlc0FuZERlcGVuZGVuY2llcyA9IDxPYmplY3Q+W107CiAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIGRlcGVuZGVudCBpbiB2YXJpYWJsZXMpIHsKICAgIHZhciBkZXBlbmRlbmNpZXMgPSA8TmFtZWRUeXBlQnVpbGRlcj5bXTsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBkZXBlbmRlbmNlIGluIHZhcmlhYmxlcykgewogICAgICBMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+IHVzZXMgPQogICAgICAgICAgZmluZFZhcmlhYmxlVXNlc0luVHlwZShkZXBlbmRlbmNlLCBkZXBlbmRlbnQuYm91bmQpOwogICAgICBpZiAodXNlcy5sZW5ndGggIT0gMCkgewogICAgICAgIGRlcGVuZGVuY2llcy5hZGRBbGwodXNlcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChkZXBlbmRlbmNpZXMubGVuZ3RoICE9IDApIHsKICAgICAgdmFyaWFibGVzQW5kRGVwZW5kZW5jaWVzLmFkZChkZXBlbmRlbnQpOwogICAgICB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY2llcyk7CiAgICB9CiAgfQogIHJldHVybiB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXM7Cn0KCi8vLyBGaW5kcyByYXcgZ2VuZXJpYyB0eXBlcyBpbiBbdHlwZV0gd2l0aCBpbmJvdW5kIHJlZmVyZW5jZXMgaW4gdHlwZSB2YXJpYWJsZXMuCi8vLwovLy8gUmV0dXJucyBmbGF0dGVuZWQgbGlzdCBvZiBwYWlycy4gIFRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBwYWlyIGlzIHRoZSBmb3VuZAovLy8gcmF3IGdlbmVyaWMgdHlwZS4gIFRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgcGFpciBpcyB0aGUgbGlzdCBvZiB0eXBlCi8vLyB2YXJpYWJsZXMgb2YgdGhhdCB0eXBlIHdpdGggaW5ib3VuZCByZWZlcmVuY2VzIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluCi8vLyBbZmluZEluYm91bmRSZWZlcmVuY2VzXS4KTGlzdDxPYmplY3Q+IGZpbmRSYXdUeXBlc1dpdGhJbmJvdW5kUmVmZXJlbmNlcyhUeXBlQnVpbGRlciB0eXBlKSB7CiAgdmFyIHR5cGVzQW5kRGVwZW5kZW5jaWVzID0gPE9iamVjdD5bXTsKICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICBpZiAodHlwZS5hcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gdHlwZS5kZWNsYXJhdGlvbjsKICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIERpbGxDbGFzc0J1aWxkZXIpIHsKICAgICAgICBib29sIGhhc0luYm91bmQgPSBmYWxzZTsKICAgICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gZGVjbGFyYXRpb24udGFyZ2V0LnR5cGVQYXJhbWV0ZXJzOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoICYmICFoYXNJbmJvdW5kOyArK2kpIHsKICAgICAgICAgIGlmIChjb250YWluc1R5cGVWYXJpYWJsZSgKICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyc1tpXS5ib3VuZCwgdHlwZVBhcmFtZXRlcnMudG9TZXQoKSkpIHsKICAgICAgICAgICAgaGFzSW5ib3VuZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChoYXNJbmJvdW5kKSB7CiAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQodHlwZSk7CiAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQoY29uc3QgPE9iamVjdD5bXSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIERpbGxUeXBlQWxpYXNCdWlsZGVyKSB7CiAgICAgICAgYm9vbCBoYXNJbmJvdW5kID0gZmFsc2U7CiAgICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IGRlY2xhcmF0aW9uLnRhcmdldC50eXBlUGFyYW1ldGVyczsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAmJiAhaGFzSW5ib3VuZDsgKytpKSB7CiAgICAgICAgICBpZiAoY29udGFpbnNUeXBlVmFyaWFibGUoCiAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnNbaV0uYm91bmQsIHR5cGVQYXJhbWV0ZXJzLnRvU2V0KCkpKSB7CiAgICAgICAgICAgIGhhc0luYm91bmQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaGFzSW5ib3VuZCkgewogICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKHR5cGUpOwogICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKGNvbnN0IDxPYmplY3Q+W10pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIgJiYKICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgIExpc3Q8T2JqZWN0PiBkZXBlbmRlbmNpZXMgPQogICAgICAgICAgICBmaW5kSW5ib3VuZFJlZmVyZW5jZXMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyk7CiAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggIT0gMCkgewogICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKHR5cGUpOwogICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY2llcyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgICBpZiAoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICBMaXN0PE9iamVjdD4gZGVwZW5kZW5jaWVzID0KICAgICAgICAgICAgICBmaW5kSW5ib3VuZFJlZmVyZW5jZXMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyk7CiAgICAgICAgICBpZiAoZGVwZW5kZW5jaWVzLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzLmFkZCh0eXBlKTsKICAgICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY2llcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChkZWNsYXJhdGlvbi50eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIgdHlwZSA9IGRlY2xhcmF0aW9uLnR5cGU7CiAgICAgICAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgICAgTGlzdDxPYmplY3Q+IGRlcGVuZGVuY2llcyA9CiAgICAgICAgICAgICAgICBmaW5kSW5ib3VuZFJlZmVyZW5jZXModHlwZS50eXBlVmFyaWFibGVzKTsKICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggIT0gMCkgewogICAgICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzLmFkZCh0eXBlKTsKICAgICAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChUeXBlQnVpbGRlciBhcmd1bWVudCBpbiB0eXBlLmFyZ3VtZW50cykgewogICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzCiAgICAgICAgICAgIC5hZGRBbGwoZmluZFJhd1R5cGVzV2l0aEluYm91bmRSZWZlcmVuY2VzKGFyZ3VtZW50KSk7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgdHlwZXNBbmREZXBlbmRlbmNpZXMKICAgICAgICAuYWRkQWxsKGZpbmRSYXdUeXBlc1dpdGhJbmJvdW5kUmVmZXJlbmNlcyh0eXBlLnJldHVyblR5cGUpKTsKICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgLmFkZEFsbChmaW5kUmF3VHlwZXNXaXRoSW5ib3VuZFJlZmVyZW5jZXModmFyaWFibGUuYm91bmQpKTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhcmlhYmxlLmRlZmF1bHRUeXBlICE9IG51bGwpIHsKICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgLmFkZEFsbChmaW5kUmF3VHlwZXNXaXRoSW5ib3VuZFJlZmVyZW5jZXModmFyaWFibGUuZGVmYXVsdFR5cGUpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIHR5cGUuZm9ybWFscykgewogICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzCiAgICAgICAgICAgIC5hZGRBbGwoZmluZFJhd1R5cGVzV2l0aEluYm91bmRSZWZlcmVuY2VzKGZvcm1hbC50eXBlKSk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIHR5cGVzQW5kRGVwZW5kZW5jaWVzOwp9CgovLy8gRmluZHMgaXNzdWVzIGJ5IHJhdyBnZW5lcmljIHR5cGVzIHdpdGggaW5ib3VuZCByZWZlcmVuY2VzIGluIHR5cGUgdmFyaWFibGVzLgovLy8KLy8vIFJldHVybnMgZmxhdHRlbmVkIGxpc3Qgb2YgdHJpcGxldHMuICBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHJpcGxldCBpcyB0aGUKLy8vIFtUeXBlRGVjbGFyYXRpb25CdWlsZGVyXSBmb3IgdGhlIHR5cGUgdmFyaWFibGUgZnJvbSBbdmFyaWFibGVzXSB0aGF0IGhhcyByYXcKLy8vIGdlbmVyaWMgdHlwZXMgd2l0aCBpbmJvdW5kIHJlZmVyZW5jZXMgaW4gaXRzIGJvdW5kLiAgVGhlIHNlY29uZCBlbGVtZW50IG9mCi8vLyB0aGUgdHJpcGxldCBpcyB0aGUgZXJyb3IgbWVzc2FnZS4gIFRoZSB0aGlyZCBlbGVtZW50IGlzIHRoZSBjb250ZXh0LgpMaXN0PE9iamVjdD4gZ2V0SW5ib3VuZFJlZmVyZW5jZUlzc3VlcyhMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHZhcmlhYmxlcykgewogIHZhciBpc3N1ZXMgPSA8T2JqZWN0PltdOwogIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSBpbiB2YXJpYWJsZXMpIHsKICAgIGlmICh2YXJpYWJsZS5ib3VuZCAhPSBudWxsKSB7CiAgICAgIExpc3Q8T2JqZWN0PiByYXdUeXBlc0FuZE11dHVhbERlcGVuZGVuY2llcyA9CiAgICAgICAgICBmaW5kUmF3VHlwZXNXaXRoSW5ib3VuZFJlZmVyZW5jZXModmFyaWFibGUuYm91bmQpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhd1R5cGVzQW5kTXV0dWFsRGVwZW5kZW5jaWVzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciB0eXBlID0gcmF3VHlwZXNBbmRNdXR1YWxEZXBlbmRlbmNpZXNbaV07CiAgICAgICAgTGlzdDxPYmplY3Q+IHZhcmlhYmxlc0FuZERlcGVuZGVuY2llcyA9CiAgICAgICAgICAgIHJhd1R5cGVzQW5kTXV0dWFsRGVwZW5kZW5jaWVzW2kgKyAxXTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZhcmlhYmxlc0FuZERlcGVuZGVuY2llcy5sZW5ndGg7IGogKz0gMikgewogICAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciBkZXBlbmRlbnQgPSB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXNbal07CiAgICAgICAgICBMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+IGRlcGVuZGVuY2llcyA9IHZhcmlhYmxlc0FuZERlcGVuZGVuY2llc1tqICsgMV07CiAgICAgICAgICBmb3IgKE5hbWVkVHlwZUJ1aWxkZXIgZGVwZW5kZW5jeSBpbiBkZXBlbmRlbmNpZXMpIHsKICAgICAgICAgICAgaXNzdWVzLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgICAgIGlzc3Vlcy5hZGQodGVtcGxhdGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHR5cGUuZGVjbGFyYXRpb24ubmFtZSkpOwogICAgICAgICAgICBpc3N1ZXMuYWRkKDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgICAgdGVtcGxhdGVOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGRlcGVuZGVuY3kuZGVjbGFyYXRpb24ubmFtZSkKICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihkZXBlbmRlbnQuZmlsZVVyaSwgZGVwZW5kZW50LmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQubmFtZS5sZW5ndGgpCiAgICAgICAgICAgIF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodmFyaWFibGVzQW5kRGVwZW5kZW5jaWVzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAvLyBUaGUgaW5ib3VuZCByZWZlcmVuY2VzIGFyZSBpbiBhIGNvbXBpbGVkIGRlY2xhcmF0aW9uIGluIGEgLmRpbGwuCiAgICAgICAgICBpc3N1ZXMuYWRkKHZhcmlhYmxlKTsKICAgICAgICAgIGlzc3Vlcy5hZGQodGVtcGxhdGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlLmRlY2xhcmF0aW9uLm5hbWUpKTsKICAgICAgICAgIGlzc3Vlcy5hZGQoY29uc3QgPExvY2F0ZWRNZXNzYWdlPltdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGlzc3VlczsKfQoKLy8vIEZpbmRzIHJhdyB0eXBlIHBhdGhzIHN0YXJ0aW5nIGZyb20gdGhvc2UgaW4gW3N0YXJ0XSBhbmQgZW5kaW5nIHdpdGggW2VuZF0uCi8vLwovLy8gUmV0dXJucyBsaXN0IG9mIGZvdW5kIHBhdGhzLiAgRWFjaCBwYXRoIGlzIHJlcHJlc2VudGVkIGFzIGEgbGlzdCBvZgovLy8gYWx0ZXJuYXRpbmcgYnVpbGRlcnMgb2YgdGhlIHJhdyBnZW5lcmljIHR5cGVzIGZyb20gdGhlIHBhdGggYW5kIGJ1aWxkZXJzIG9mCi8vLyB0eXBlIHZhcmlhYmxlcyBvZiB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHR5cGVzIHRoYXQgY29udGFpbiB0aGUgcmVmZXJlbmNlCi8vLyB0byB0aGUgbmV4dCByYXcgZ2VuZXJpYyB0eXBlIGluIHRoZSBwYXRoLiAgVGhlIGxpc3QgZW5kcyB3aXRoIHRoZSB0eXBlCi8vLyBidWlsZGVyIGZvciBbZW5kXS4KLy8vCi8vLyBUaGUgcmVhc29uIGZvciBwdXR0aW5nIHRoZSB0eXBlIHZhcmlhYmxlcyBpbnRvIHRoZSBwYXRocyBhcyB3ZWxsIGFzIGZvcgovLy8gdXNpbmcgdHlwZSBmb3IgW3N0YXJ0XSwgYW5kIG5vdCB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGRlY2xhcmF0aW9uLAovLy8gaXMgYmV0dGVyIGVycm9yIHJlcG9ydGluZy4KTGlzdDxMaXN0PE9iamVjdD4+IGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKAogICAgVHlwZUJ1aWxkZXIgc3RhcnQsIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZW5kLAogICAgW1NldDxUeXBlRGVjbGFyYXRpb25CdWlsZGVyPiB2aXNpdGVkXSkgewogIHZpc2l0ZWQgPz89IG5ldyBTZXQ8VHlwZURlY2xhcmF0aW9uQnVpbGRlcj4uaWRlbnRpdHkoKTsKICB2YXIgcGF0aHMgPSA8TGlzdDxPYmplY3Q+PltdOwogIGlmIChzdGFydCBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gc3RhcnQuZGVjbGFyYXRpb247CiAgICBpZiAoc3RhcnQuYXJndW1lbnRzID09IG51bGwpIHsKICAgICAgaWYgKHN0YXJ0LmRlY2xhcmF0aW9uID09IGVuZCkgewogICAgICAgIHBhdGhzLmFkZCg8T2JqZWN0PltzdGFydF0pOwogICAgICB9IGVsc2UgaWYgKHZpc2l0ZWQuYWRkKHN0YXJ0LmRlY2xhcmF0aW9uKSkgewogICAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIgJiYgZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcykgewogICAgICAgICAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICAgIGZvciAoTGlzdDxPYmplY3Q+IHBhdGggaW4gZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmJvdW5kLCBlbmQsIHZpc2l0ZWQpKSB7CiAgICAgICAgICAgICAgICBwYXRocy5hZGQoPE9iamVjdD5bc3RhcnQsIHZhcmlhYmxlXS4uYWRkQWxsKHBhdGgpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgICAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgZm9yIChMaXN0PE9iamVjdD4gZGVwZW5kZW5jeVBhdGgKICAgICAgICAgICAgICAgICAgICBpbiBmaW5kUmF3VHlwZVBhdGhzVG9EZWNsYXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuYm91bmQsIGVuZCwgdmlzaXRlZCkpIHsKICAgICAgICAgICAgICAgICAgcGF0aHMuYWRkKDxPYmplY3Q+W3N0YXJ0LCB2YXJpYWJsZV0uLmFkZEFsbChkZXBlbmRlbmN5UGF0aCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICAgICAgICBGdW5jdGlvblR5cGVCdWlsZGVyIHR5cGUgPSBkZWNsYXJhdGlvbi50eXBlOwogICAgICAgICAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICBmb3IgKExpc3Q8T2JqZWN0PiBkZXBlbmRlbmN5UGF0aAogICAgICAgICAgICAgICAgICAgICAgaW4gZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuYm91bmQsIGVuZCwgdmlzaXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICBwYXRocwogICAgICAgICAgICAgICAgICAgICAgICAuYWRkKDxPYmplY3Q+W3N0YXJ0LCB2YXJpYWJsZV0uLmFkZEFsbChkZXBlbmRlbmN5UGF0aCkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZpc2l0ZWQucmVtb3ZlKHN0YXJ0LmRlY2xhcmF0aW9uKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChUeXBlQnVpbGRlciBhcmd1bWVudCBpbiBzdGFydC5hcmd1bWVudHMpIHsKICAgICAgICBwYXRocy5hZGRBbGwoZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oYXJndW1lbnQsIGVuZCwgdmlzaXRlZCkpOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmIChzdGFydCBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICBwYXRocy5hZGRBbGwoZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oc3RhcnQucmV0dXJuVHlwZSwgZW5kLCB2aXNpdGVkKSk7CiAgICBpZiAoc3RhcnQudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSBpbiBzdGFydC50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgIHBhdGhzLmFkZEFsbCgKICAgICAgICAgICAgICBmaW5kUmF3VHlwZVBhdGhzVG9EZWNsYXJhdGlvbih2YXJpYWJsZS5ib3VuZCwgZW5kLCB2aXNpdGVkKSk7CiAgICAgICAgfQogICAgICAgIGlmICh2YXJpYWJsZS5kZWZhdWx0VHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBwYXRocy5hZGRBbGwoZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgdmFyaWFibGUuZGVmYXVsdFR5cGUsIGVuZCwgdmlzaXRlZCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKHN0YXJ0LmZvcm1hbHMgIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIHN0YXJ0LmZvcm1hbHMpIHsKICAgICAgICBwYXRocy5hZGRBbGwoZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oZm9ybWFsLnR5cGUsIGVuZCwgdmlzaXRlZCkpOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBwYXRoczsKfQoKLy8vIEZpbmRzIHJhdyBnZW5lcmljIHR5cGUgY3ljbGVzIGVuZGluZyBhbmQgc3RhcnRpbmcgd2l0aCBbZGVjbGFyYXRpb25dLgovLy8KLy8vIFJldHVybnMgbGlzdCBvZiBmb3VuZCBjeWNsZXMuICBFYWNoIGN5Y2xlIGlzIHJlcHJlc2VudGVkIGFzIGEgbGlzdCBvZgovLy8gYWx0ZXJuYXRpbmcgcmF3IGdlbmVyaWMgdHlwZXMgZnJvbSB0aGUgY3ljbGUgYW5kIHR5cGUgdmFyaWFibGVzIG9mIHRoZQovLy8gaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHR5cGUgdGhhdCByZWZlcmVuY2UgdGhlIG5leHQgdHlwZSBpbiB0aGUgY3ljbGUuICBUaGUKLy8vIGN5Y2xlIHN0YXJ0cyB3aXRoIGEgdHlwZSB2YXJpYWJsZSBmcm9tIFtkZWNsYXJhdGlvbl0gYW5kIGVuZHMgd2l0aCBhIHR5cGUKLy8vIHRoYXQgaGFzIFtkZWNsYXJhdGlvbl0gYXMgaXRzIGRlY2xhcmF0aW9uLgovLy8KLy8vIFRoZSByZWFzb24gZm9yIHB1dHRpbmcgdGhlIHR5cGUgdmFyaWFibGVzIGludG8gdGhlIGN5Y2xlcyBpcyBiZXR0ZXIgZXJyb3IKLy8vIHJlcG9ydGluZy4KTGlzdDxMaXN0PE9iamVjdD4+IGZpbmRSYXdUeXBlQ3ljbGVzKFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICB2YXIgY3ljbGVzID0gPExpc3Q8T2JqZWN0Pj5bXTsKICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyICYmIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICBmb3IgKExpc3Q8T2JqZWN0PiBwYXRoCiAgICAgICAgICAgIGluIGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKHZhcmlhYmxlLmJvdW5kLCBkZWNsYXJhdGlvbikpIHsKICAgICAgICAgIGN5Y2xlcy5hZGQoPE9iamVjdD5bdmFyaWFibGVdLi5hZGRBbGwocGF0aCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgVHlwZUFsaWFzQnVpbGRlcikgewogICAgaWYgKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcykgewogICAgICAgIGlmICh2YXJpYWJsZS5ib3VuZCAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKExpc3Q8T2JqZWN0PiBkZXBlbmRlbmN5UGF0aAogICAgICAgICAgICAgIGluIGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKHZhcmlhYmxlLmJvdW5kLCBkZWNsYXJhdGlvbikpIHsKICAgICAgICAgICAgY3ljbGVzLmFkZCg8T2JqZWN0Plt2YXJpYWJsZV0uLmFkZEFsbChkZXBlbmRlbmN5UGF0aCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGRlY2xhcmF0aW9uLnR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICBGdW5jdGlvblR5cGVCdWlsZGVyIHR5cGUgPSBkZWNsYXJhdGlvbi50eXBlOwogICAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKExpc3Q8T2JqZWN0PiBkZXBlbmRlbmN5UGF0aAogICAgICAgICAgICAgICAgaW4gZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24odmFyaWFibGUuYm91bmQsIGRlY2xhcmF0aW9uKSkgewogICAgICAgICAgICAgIGN5Y2xlcy5hZGQoPE9iamVjdD5bdmFyaWFibGVdLi5hZGRBbGwoZGVwZW5kZW5jeVBhdGgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gY3ljbGVzOwp9CgovLy8gQ29udmVydHMgcmF3IGdlbmVyaWMgdHlwZSBbY3ljbGVzXSBmb3IgW2RlY2xhcmF0aW9uXSBpbnRvIHJlcG9ydGFibGUgaXNzdWVzLgovLy8KLy8vIFRoZSBbY3ljbGVzXSBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgZm9yIHRoZSByZXR1cm4gdmFsdWUKLy8vIG9mIFtmaW5kUmF3VHlwZUN5Y2xlc10uCi8vLwovLy8gUmV0dXJucyBmbGF0dGVuZWQgbGlzdCBvZiB0cmlwbGV0cy4gIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB0cmlwbGV0IGlzIHRoZQovLy8gW1R5cGVEZWNsYXJhdGlvbkJ1aWxkZXJdIGZvciB0aGUgdHlwZSB2YXJpYWJsZSBmcm9tIFt2YXJpYWJsZXNdIHRoYXQgaGFzIHJhdwovLy8gZ2VuZXJpYyB0eXBlcyB3aXRoIGluYm91bmQgcmVmZXJlbmNlcyBpbiBpdHMgYm91bmQuICBUaGUgc2Vjb25kIGVsZW1lbnQgb2YKLy8vIHRoZSB0cmlwbGV0IGlzIHRoZSBlcnJvciBtZXNzYWdlLiAgVGhlIHRoaXJkIGVsZW1lbnQgaXMgdGhlIGNvbnRleHQuCkxpc3Q8T2JqZWN0PiBjb252ZXJ0UmF3VHlwZUN5Y2xlc0ludG9Jc3N1ZXMoCiAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uLCBMaXN0PExpc3Q8T2JqZWN0Pj4gY3ljbGVzKSB7CiAgTGlzdDxPYmplY3Q+IGlzc3VlcyA9IDxPYmplY3Q+W107CiAgZm9yIChMaXN0PE9iamVjdD4gY3ljbGUgaW4gY3ljbGVzKSB7CiAgICBpZiAoY3ljbGUubGVuZ3RoID09IDIpIHsKICAgICAgLy8gTG9vcC4KICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9IGN5Y2xlWzBdOwogICAgICBOYW1lZFR5cGVCdWlsZGVyIHR5cGUgPSBjeWNsZVsxXTsKICAgICAgaXNzdWVzLmFkZCh2YXJpYWJsZSk7CiAgICAgIGlzc3Vlcy5hZGQodGVtcGxhdGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHkKICAgICAgICAgIC53aXRoQXJndW1lbnRzKHR5cGUuZGVjbGFyYXRpb24ubmFtZSkpOwogICAgICBpc3N1ZXMuYWRkKG51bGwpOyAvLyBDb250ZXh0LgogICAgfSBlbHNlIHsKICAgICAgdmFyIGNvbnRleHQgPSA8TG9jYXRlZE1lc3NhZ2U+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3ljbGUubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlID0gY3ljbGVbaV07CiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciB0eXBlID0gY3ljbGVbaSArIDFdOwogICAgICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UKICAgICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZS5kZWNsYXJhdGlvbi5uYW1lKQogICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgdmFyaWFibGUuZmlsZVVyaSwgdmFyaWFibGUuY2hhck9mZnNldCwgdmFyaWFibGUubmFtZS5sZW5ndGgpKTsKICAgICAgfQogICAgICBOYW1lZFR5cGVCdWlsZGVyIGZpcnN0RW5jb3VudGVyZWRUeXBlID0gY3ljbGVbMV07CgogICAgICBpc3N1ZXMuYWRkKGRlY2xhcmF0aW9uKTsKICAgICAgaXNzdWVzLmFkZCh0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHkud2l0aEFyZ3VtZW50cygKICAgICAgICAgIGRlY2xhcmF0aW9uLm5hbWUsIGZpcnN0RW5jb3VudGVyZWRUeXBlLmRlY2xhcmF0aW9uLm5hbWUpKTsKICAgICAgaXNzdWVzLmFkZChjb250ZXh0KTsKICAgIH0KICB9CiAgcmV0dXJuIGlzc3VlczsKfQoKLy8vIEZpbmRzIG5vbi1zaW1wbGljaXR5IGlzc3VlcyBmb3IgdGhlIGdpdmVuIHNldCBvZiBbdmFyaWFibGVzXS4KLy8vCi8vLyBUaGUgaXNzdWVzIGFyZSB0aG9zZSBjYXVzZWQgYnkgcmF3IHR5cGVzIHdpdGggaW5ib3VuZCByZWZlcmVuY2VzIGluIHRoZQovLy8gYm91bmRzIG9mIHRoZWlyIHR5cGUgdmFyaWFibGVzLgovLy8KLy8vIFJldHVybnMgZmxhdHRlbmVkIGxpc3Qgb2YgdHJpcGxldHMsIGVhY2ggdHJpcGxldCByZXByZXNlbnRpbmcgYW4gaXNzdWUuICBUaGUKLy8vIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHRyaXBsZXQgaXMgdGhlIHR5cGUgZGVjbGFyYXRpb24gdGhhdCBoYXMgdGhlIGlzc3VlLgovLy8gVGhlIHNlY29uZCBlbGVtZW50IGluIHRoZSB0cmlwbGV0IGlzIHRoZSBlcnJvciBtZXNzYWdlLiAgVGhlIHRoaXJkIGVsZW1lbnQKLy8vIGluIHRoZSB0cmlwbGV0IGlzIHRoZSBjb250ZXh0LgpMaXN0PE9iamVjdD4gZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvclR5cGVWYXJpYWJsZXMoCiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHZhcmlhYmxlcykgewogIGlmICh2YXJpYWJsZXMgPT0gbnVsbCkgcmV0dXJuIDxPYmplY3Q+W107CiAgcmV0dXJuIGdldEluYm91bmRSZWZlcmVuY2VJc3N1ZXModmFyaWFibGVzKTsKfQoKLy8vIEZpbmRzIG5vbi1zaW1wbGljaXR5IGlzc3VlcyBmb3IgdGhlIGdpdmVuIFtkZWNsYXJhdGlvbl0uCi8vLwovLy8gVGhlIGlzc3VlcyBhcmUgdGhvc2UgY2F1c2VkIGJ5IHJhdyB0eXBlcyB3aXRoIGluYm91bmQgcmVmZXJlbmNlcyBpbiB0aGUKLy8vIGJvdW5kcyBvZiB0eXBlIHZhcmlhYmxlcyBmcm9tIFtkZWNsYXJhdGlvbl0gYW5kIGJ5IGN5Y2xlcyBvZiByYXcgdHlwZXMKLy8vIGNvbnRhaW5pbmcgW2RlY2xhcmF0aW9uXS4KLy8vCi8vLyBSZXR1cm5zIGZsYXR0ZW5lZCBsaXN0IG9mIHRyaXBsZXRzLCBlYWNoIHRyaXBsZXQgcmVwcmVzZW50aW5nIGFuIGlzc3VlLiAgVGhlCi8vLyBmaXJzdCBlbGVtZW50IGluIHRoZSB0cmlwbGV0IGlzIHRoZSB0eXBlIGRlY2xhcmF0aW9uIHRoYXQgaGFzIHRoZSBpc3N1ZS4KLy8vIFRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgdHJpcGxldCBpcyB0aGUgZXJyb3IgbWVzc2FnZS4gIFRoZSB0aGlyZCBlbGVtZW50Ci8vLyBpbiB0aGUgdHJpcGxldCBpcyB0aGUgY29udGV4dC4KTGlzdDxPYmplY3Q+IGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JEZWNsYXJhdGlvbigKICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24sCiAgICB7Ym9vbCBwZXJmb3JtRXJyb3JSZWNvdmVyeTogdHJ1ZX0pIHsKICB2YXIgaXNzdWVzID0gPE9iamVjdD5bXTsKICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyICYmIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgaXNzdWVzLmFkZEFsbChnZXRJbmJvdW5kUmVmZXJlbmNlSXNzdWVzKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpKTsKICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIgJiYKICAgICAgZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICBpc3N1ZXMuYWRkQWxsKGdldEluYm91bmRSZWZlcmVuY2VJc3N1ZXMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcykpOwogIH0KICBMaXN0PExpc3Q8T2JqZWN0Pj4gY3ljbGVzVG9SZXBvcnQgPSA8TGlzdDxPYmplY3Q+PltdOwogIGZvciAoTGlzdDxPYmplY3Q+IGN5Y2xlIGluIGZpbmRSYXdUeXBlQ3ljbGVzKGRlY2xhcmF0aW9uKSkgewogICAgLy8gVG8gYXZvaWQgcmVwb3J0aW5nIHRoZSBzYW1lIGVycm9yIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIGN5Y2xlLCB3ZSBvbmx5CiAgICAvLyBkbyBzbyBpZiBpdCBjb21lcyB0aGUgZmlyc3QgaW4gdGhlIGxleGljb2dyYXBoaWNhbCBvcmRlci4gIE5vdGUgdGhhdAogICAgLy8gb25lLWVsZW1lbnQgY3ljbGVzIHNob3VsZG4ndCBiZSBjaGVja2VkLCBhcyB0aGV5IGFyZSBsb29wcy4KICAgIGlmIChjeWNsZS5sZW5ndGggPT0gMikgewogICAgICBjeWNsZXNUb1JlcG9ydC5hZGQoY3ljbGUpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGRlY2xhcmF0aW9uUGF0aEFuZE5hbWUgPQogICAgICAgICAgIiR7ZGVjbGFyYXRpb24uZmlsZVVyaX06JHtkZWNsYXJhdGlvbi5uYW1lfSI7CiAgICAgIFN0cmluZyBsZXhNaW5QYXRoQW5kTmFtZSA9IG51bGw7CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY3ljbGUubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyIHR5cGUgPSBjeWNsZVtpXTsKICAgICAgICBTdHJpbmcgcGF0aEFuZE5hbWUgPQogICAgICAgICAgICAiJHt0eXBlLmRlY2xhcmF0aW9uLmZpbGVVcml9OiR7dHlwZS5kZWNsYXJhdGlvbi5uYW1lfSI7CiAgICAgICAgaWYgKGxleE1pblBhdGhBbmROYW1lID09IG51bGwgfHwKICAgICAgICAgICAgbGV4TWluUGF0aEFuZE5hbWUuY29tcGFyZVRvKHBhdGhBbmROYW1lKSA+IDApIHsKICAgICAgICAgIGxleE1pblBhdGhBbmROYW1lID0gcGF0aEFuZE5hbWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChkZWNsYXJhdGlvblBhdGhBbmROYW1lID09IGxleE1pblBhdGhBbmROYW1lKSB7CiAgICAgICAgY3ljbGVzVG9SZXBvcnQuYWRkKGN5Y2xlKTsKICAgICAgfQogICAgfQogIH0KICBMaXN0PE9iamVjdD4gcmF3VHlwZUN5Y2xlc0FzSXNzdWVzID0KICAgICAgY29udmVydFJhd1R5cGVDeWNsZXNJbnRvSXNzdWVzKGRlY2xhcmF0aW9uLCBjeWNsZXNUb1JlcG9ydCk7CiAgaXNzdWVzLmFkZEFsbChyYXdUeXBlQ3ljbGVzQXNJc3N1ZXMpOwoKICBpZiAocGVyZm9ybUVycm9yUmVjb3ZlcnkpIHsKICAgIGJyZWFrQ3ljbGVzKGN5Y2xlc1RvUmVwb3J0KTsKICB9CgogIHJldHVybiBpc3N1ZXM7Cn0KCi8vLyBCcmVhayByYXcgZ2VuZXJpYyB0eXBlIFtjeWNsZXNdIGFzIGVycm9yIHJlY292ZXJ5LgovLy8KLy8vIFRoZSBbY3ljbGVzXSBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgZm9yIHRoZSByZXR1cm4gdmFsdWUKLy8vIG9mIFtmaW5kUmF3VHlwZUN5Y2xlc10uCnZvaWQgYnJlYWtDeWNsZXMoTGlzdDxMaXN0PE9iamVjdD4+IGN5Y2xlcykgewogIGZvciAoTGlzdDxPYmplY3Q+IGN5Y2xlIGluIGN5Y2xlcykgewogICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9IGN5Y2xlWzBdOwogICAgdmFyaWFibGUuYm91bmQgPSBudWxsOwogIH0KfQoKdm9pZCBmaW5kR2VuZXJpY0Z1bmN0aW9uVHlwZXMoVHlwZUJ1aWxkZXIgdHlwZSwge0xpc3Q8VHlwZUJ1aWxkZXI+IHJlc3VsdH0pIHsKICByZXN1bHQgPz89IDxUeXBlQnVpbGRlcj5bXTsKICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwgJiYgdHlwZS50eXBlVmFyaWFibGVzLmxlbmd0aCA+IDApIHsKICAgICAgcmVzdWx0LmFkZCh0eXBlKTsKCiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKHR5cGVWYXJpYWJsZS5ib3VuZCwgcmVzdWx0OiByZXN1bHQpOwogICAgICAgIGZpbmRHZW5lcmljRnVuY3Rpb25UeXBlcyh0eXBlVmFyaWFibGUuZGVmYXVsdFR5cGUsIHJlc3VsdDogcmVzdWx0KTsKICAgICAgfQogICAgfQogICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKHR5cGUucmV0dXJuVHlwZSwgcmVzdWx0OiByZXN1bHQpOwogICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gdHlwZS5mb3JtYWxzKSB7CiAgICAgICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKGZvcm1hbC50eXBlLCByZXN1bHQ6IHJlc3VsdCk7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlciAmJiB0eXBlLmFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHR5cGUuYXJndW1lbnRzKSB7CiAgICAgIGZpbmRHZW5lcmljRnVuY3Rpb25UeXBlcyhhcmd1bWVudCwgcmVzdWx0OiByZXN1bHQpOwogICAgfQogIH0KfQoKLy8vIFJldHVybnMgdHJ1ZSBpZiBbdHlwZV0gY29udGFpbnMgYW55IHR5cGUgdmFyaWFibGVzIHdoYXRzb2V2ZXIuIFRoaXMgc2hvdWxkCi8vLyBvbmx5IGJlIHVzZWQgZm9yIHdvcmtpbmcgYXJvdW5kIHRyYW5zaXRpb25hbCBpc3N1ZXMuCi8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMgbWV0aG9kLgpib29sIGhhc0FueVR5cGVWYXJpYWJsZXMoRGFydFR5cGUgdHlwZSkgewogIHJldHVybiB0eXBlLmFjY2VwdChjb25zdCBUeXBlVmFyaWFibGVTZWFyY2goKSk7Cn0KCi8vLyBEb24ndCB1c2UgdGhpcyBkaXJlY3RseSwgdXNlIFtoYXNBbnlUeXBlVmFyaWFibGVzXSBpbnN0ZWFkLiBCdXQgZG9uJ3QgdXNlCi8vLyB0aGF0IGVpdGhlci4KLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBjbGFzcy4KY2xhc3MgVHlwZVZhcmlhYmxlU2VhcmNoIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBjb25zdCBUeXBlVmFyaWFibGVTZWFyY2goKTsKCiAgYm9vbCBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSkgPT4gdGhyb3cgInVuc3VwcG9ydGVkIjsKCiAgYm9vbCBhbnlUeXBlVmFyaWFibGVzKExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgaWYgKHR5cGUuYWNjZXB0KHRoaXMpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBmYWxzZTsKCiAgYm9vbCB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBib29sIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSkgPT4gZmFsc2U7CgogIGJvb2wgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gZmFsc2U7CgogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgcmV0dXJuIGFueVR5cGVWYXJpYWJsZXMobm9kZS50eXBlQXJndW1lbnRzKTsKICB9CgogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGlmIChhbnlUeXBlVmFyaWFibGVzKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpKSByZXR1cm4gdHJ1ZTsKICAgIGZvciAoVHlwZVBhcmFtZXRlciB2YXJpYWJsZSBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIGlmICh2YXJpYWJsZS5ib3VuZC5hY2NlcHQodGhpcykpIHJldHVybiB0cnVlOwogICAgfQogICAgZm9yIChOYW1lZFR5cGUgdHlwZSBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBpZiAodHlwZS50eXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgPT4gdHJ1ZTsKCiAgYm9vbCB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpIHsKICAgIHJldHVybiBhbnlUeXBlVmFyaWFibGVzKG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgfQp9CoNwAE1OPwEhCRQSGRUWFxUTFxsVEgFFAT4BTQEdCRYgHRoaFSAdAUABSQEdCRgxMDksKwE+AUtIUU0SRiI7RSgjDyMIDSkpJjlRDAoXNCkmPCQYIkIlSwwKFwgGLCUjD00GJkVJUFEgKj0mJwoIBiA8IBQ1OggGEwQdAgEdFj09ISIzGTwIOgZAEwYhNjlDJTYvLAgGHVEGEQQBJSkmTAYqIEcGHBoBJjM+LUInJzJDHRoRIwoIBgEgMTk1PygsMx8gHRsdIhoRHwoIBgEiPxwpFgYBE0YGAREEDwIBGExPAgFQOwQaYiJHUUYBLzMEAUhGM0AuPS4rQz8GKy9IHgYEAS85Lj0uLDExTR4GBAERAgFOSRExFiccAVEyGQE0LwEwNCYzMBcpGgYBPiY3OT8KJjk0DAowKkk+DAokQzoMCjcIBgEwKwYEAU4PKRkEAgE2BC0vIBQEIyIoFg0kN0MKCAYsRCZKLxdKCjUXUAoIBiA8RAgGBA8CAVEEUE9LIkotNS04JD8eIwgGJC8yBgQjAgFRBFFKTh1DKSIiPS0hUEkkQh8MChoqNgo4IVBJJEIfDAoaKjYKMC8kPigqMgo0MSZAKiw0DAo3NywoOywuNg4MCggNNR1CCAYsGUUmQSYfSgosH1AKCAYgPB1FCAYEHwIBUQRRUU9JThs0IjM9SkIwMkdHUT4iRzgpMD5JLRAMCjROIEU2MAoIBgQRAgFPBEhQUUsXBExIHzIzLTogIzwjJiQzUEwqRzNEEA4MNjNOLDE2OVASEA4MOTkuSS4zODsaURQSEA4MCisIDTZNCAYtUSdCJhhMCiw2NAoIBiE9UAgGBBACAUoESktPTi8ETg9LIUpGJB9NOAoIBjAtSCYrT0QMCggGMzMoQygtUUYODAoIBgQRAgFRBFEcBFFRT0ktRSQnHQ8vKBw4MiQNKDIxLjcyG08IOAEfSEUbBgQRAgFCBEwkBFFNTyM1KywvAgE9BExLHgRRTU8jMygpG0pJMCtJBDg/UExDHSENJjgnMiodRCk8KwoIOSMIBgQnQygBHiEEARECATcEURwuJy0bBAIBTh4lRxgBRUZMCAY/IDw/CAZDMzoGBAIBTzkiKjICAU4RITweAT4BMCMqBhIEATQBNAEuATIBMDEEAS5COjQGMy8GEgQBPwEsMQQCATdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVfYWxnb3JpdGhtcy5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FzdF9hcGkuZGFydIxOLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGlzIGxpYnJhcnkgZXhwb3J0cyBhbGwgQVBJIGZyb20gS2VybmVsJ3MgYXN0LmRhcnQgdGhhdCBjYW4gYmUgdXNlZAovLy8gdGhyb3VnaG91dCBmYXN0YS4KbGlicmFyeSBmYXN0YS5rZXJuZWxfYXN0X2FwaTsKCmV4cG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIEFzRXhwcmVzc2lvbiwKICAgICAgICBBc3NlcnRTdGF0ZW1lbnQsCiAgICAgICAgQXN5bmNNYXJrZXIsCiAgICAgICAgQmxvY2ssCiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBCcmVha1N0YXRlbWVudCwKICAgICAgICBDYXRjaCwKICAgICAgICBDaGVja0xpYnJhcnlJc0xvYWRlZCwKICAgICAgICBDbGFzcywKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgQ29uc3RydWN0b3IsCiAgICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uLAogICAgICAgIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50LAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEVtcHR5U3RhdGVtZW50LAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudCwKICAgICAgICBGaWVsZCwKICAgICAgICBGb3JJblN0YXRlbWVudCwKICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uLAogICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEluaXRpYWxpemVyLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZEV4cHJlc3Npb24sCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgSXNFeHByZXNzaW9uLAogICAgICAgIExhYmVsZWRTdGF0ZW1lbnQsCiAgICAgICAgTGV0LAogICAgICAgIExpYnJhcnksCiAgICAgICAgTGlicmFyeURlcGVuZGVuY3ksCiAgICAgICAgTGlicmFyeVBhcnQsCiAgICAgICAgTGlzdExpdGVyYWwsCiAgICAgICAgTG9jYWxJbml0aWFsaXplciwKICAgICAgICBMb2NhdGlvbiwKICAgICAgICBNYXBFbnRyeSwKICAgICAgICBNYXBMaXRlcmFsLAogICAgICAgIE1lbWJlciwKICAgICAgICBNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIE5hbWUsCiAgICAgICAgTmFtZWRFeHByZXNzaW9uLAogICAgICAgIE5hbWVkVHlwZSwKICAgICAgICBOb2RlLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFByb3BlcnR5R2V0LAogICAgICAgIFByb3BlcnR5U2V0LAogICAgICAgIFJldGhyb3csCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFN0YXRlbWVudCwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgU3RhdGljSW52b2NhdGlvbiwKICAgICAgICBTdGF0aWNTZXQsCiAgICAgICAgU3RyaW5nQ29uY2F0ZW5hdGlvbiwKICAgICAgICBTdXBlckluaXRpYWxpemVyLAogICAgICAgIFN1cGVyTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBTdXBlclByb3BlcnR5U2V0LAogICAgICAgIFN3aXRjaENhc2UsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmLAogICAgICAgIFR5cGVkZWZUeXBlLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24sCiAgICAgICAgVmFyaWFibGVHZXQsCiAgICAgICAgVmFyaWFibGVTZXQsCiAgICAgICAgVm9pZFR5cGUsCiAgICAgICAgc2V0UGFyZW50czsKCmV4cG9ydCAna2VybmVsX3NoYWRvd19hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHNKdWRnbWVudCwKICAgICAgICBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEJsb2NrSnVkZ21lbnQsCiAgICAgICAgQ2FzY2FkZUp1ZGdtZW50LAogICAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQsCiAgICAgICAgQ29udGludWVTd2l0Y2hKdWRnbWVudCwKICAgICAgICBEZWZlcnJlZENoZWNrSnVkZ21lbnQsCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQsCiAgICAgICAgRnVuY3Rpb25Ob2RlSnVkZ21lbnQsCiAgICAgICAgSWZKdWRnbWVudCwKICAgICAgICBJZk51bGxKdWRnbWVudCwKICAgICAgICBJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50LAogICAgICAgIE1ldGhvZEludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50LAogICAgICAgIE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBOdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50LAogICAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudCwKICAgICAgICBSZXR1cm5KdWRnbWVudCwKICAgICAgICBTaGFkb3dGaWVsZEluaXRpYWxpemVyLAogICAgICAgIFNoYWRvd0ludmFsaWRGaWVsZEluaXRpYWxpemVyLAogICAgICAgIFNoYWRvd0ludmFsaWRJbml0aWFsaXplciwKICAgICAgICBTaGFkb3dMYXJnZUludExpdGVyYWwsCiAgICAgICAgU3VwZXJJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50LAogICAgICAgIFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudCwKICAgICAgICBTd2l0Y2hDYXNlSnVkZ21lbnQsCiAgICAgICAgU3dpdGNoU3RhdGVtZW50SnVkZ21lbnQsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LAogICAgICAgIFZhcmlhYmxlR2V0SnVkZ21lbnQsCiAgICAgICAgWWllbGRKdWRnbWVudDsKegBOTjwBSRYeASEJExYZFQ8UGA8eDxMVHyESFRgUHQ8YHRwWFhUXGxUWGg0RGxUVGhISFBAaDhkTDhUTFxUVERkTExoTHRofGhQYEhcbERUdFRUSFAEgCRsjIRcZIyAfJS4lHhQYKSQiKSsmKBggJyIfIiciHCElHRcBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FzdF9hcGkuZGFydE5zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9pbmNyZW1lbnRhbF9rZXJuZWxfZ2VuZXJhdG9yLmRhcnSSzC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnCiAgICBzaG93IENvbXBvbmVudCwgUHJvY2VkdXJlLCBEYXJ0VHlwZSwgVHlwZVBhcmFtZXRlcjsKCmltcG9ydCAnLi4vYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JyBzaG93IFByb2Nlc3NlZE9wdGlvbnM7CgppbXBvcnQgJy4uL2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgppbXBvcnQgJy4uL2Zhc3RhL2luY3JlbWVudGFsX2NvbXBpbGVyLmRhcnQnIHNob3cgSW5jcmVtZW50YWxDb21waWxlcjsKCmltcG9ydCAnLi4vZmFzdGEvc2Nhbm5lci9zdHJpbmdfc2Nhbm5lci5kYXJ0JyBzaG93IFN0cmluZ1NjYW5uZXI7CgppbXBvcnQgJ2NvbXBpbGVyX29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgphYnN0cmFjdCBjbGFzcyBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvciB7CiAgZmFjdG9yeSBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvcihDb21waWxlck9wdGlvbnMgb3B0aW9ucywgVXJpIGVudHJ5UG9pbnQsCiAgICAgIFtVcmkgaW5pdGlhbGl6ZUZyb21EaWxsVXJpLCBib29sIG91dGxpbmVPbmx5XSkgewogICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbENvbXBpbGVyKAogICAgICAgIG5ldyBDb21waWxlckNvbnRleHQoCiAgICAgICAgICAgIG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMsIGlucHV0czogW2VudHJ5UG9pbnRdKSksCiAgICAgICAgaW5pdGlhbGl6ZUZyb21EaWxsVXJpLAogICAgICAgIG91dGxpbmVPbmx5KTsKICB9CgogIC8vLyBJbml0aWFsaXplIHRoZSBpbmNyZW1lbnRhbCBjb21waWxlciBmcm9tIGEgY29tcG9uZW50LgogIC8vLwogIC8vLyBOb3RpY2UgdGhhdCB0aGUgY29tcG9uZW50IGhhcyB0byBpbmNsdWRlIHRoZSBwbGF0Zm9ybSwgYW5kIHRoYXQgbm8gb3RoZXIKICAvLy8gcGxhdGZvcm0gd2lsbCBiZSBsb2FkZWQuCiAgZmFjdG9yeSBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvci5mcm9tQ29tcG9uZW50KAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywgVXJpIGVudHJ5UG9pbnQsIENvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIFtib29sIG91dGxpbmVPbmx5XSkgewogICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbENvbXBpbGVyLmZyb21Db21wb25lbnQoCiAgICAgICAgbmV3IENvbXBpbGVyQ29udGV4dCgKICAgICAgICAgICAgbmV3IFByb2Nlc3NlZE9wdGlvbnMob3B0aW9uczogb3B0aW9ucywgaW5wdXRzOiBbZW50cnlQb2ludF0pKSwKICAgICAgICBjb21wb25lbnQsCiAgICAgICAgb3V0bGluZU9ubHkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBjb21wb25lbnQgd2hvc2UgbGlicmFyaWVzIGFyZSB0aGUgcmVjb21waWxlZCBsaWJyYXJpZXMsCiAgLy8vIG9yIC0gaW4gdGhlIGNhc2Ugb2YgW2Z1bGxDb21wb25lbnRdIC0gYSBmdWxsIENvbXBvbmVudC4KICBGdXR1cmU8Q29tcG9uZW50PiBjb21wdXRlRGVsdGEoe0xpc3Q8VXJpPiBlbnRyeVBvaW50cywgYm9vbCBmdWxsQ29tcG9uZW50fSk7CgogIC8vLyBSZXR1cm5zIFtDb3JlVHlwZXNdIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLgogIC8vLyBWYWxpZCBhZnRlciBbY29tcHV0ZURlbHRhXSBpcyBjYWxsZWQuCiAgQ29yZVR5cGVzIGdldENvcmVUeXBlcygpOwoKICAvLy8gUmV0dXJucyBbQ2xhc3NIaWVyYXJjaHldIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLgogIC8vLyBWYWxpZCBhZnRlciBbY29tcHV0ZURlbHRhXSBpcyBjYWxsZWQuCiAgQ2xhc3NIaWVyYXJjaHkgZ2V0Q2xhc3NIaWVyYXJjaHkoKTsKCiAgLy8vIFJlbW92ZSB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGZpbGUgW3VyaV0gZnJvbSB0aGUgc2V0IG9mCiAgLy8vIHZhbGlkIGZpbGVzLiAgVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhvc2UgZmlsZXMgd2lsbCBiZSByZS1yZWFkIG9uIHRoZQogIC8vLyBuZXh0IGNhbGwgdG8gW2NvbXB1dGVEZWx0YV0pLgogIHZvaWQgaW52YWxpZGF0ZShVcmkgdXJpKTsKCiAgLy8vIEludmFsaWRhdGUgYWxsIGxpYnJhcmllcyB0aGF0IHdlcmUgYnVpbGQgZnJvbSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhIG51bWJlciBvZiBjYWxscyB0byBbaW52YWxpZGF0ZV06IE9uZSBmb3IgZWFjaCBVUkkKICAvLy8gdGhhdCBoYXBwZW5zIHRvIGhhdmUgYmVlbiByZWFkIGZyb20gc291cmNlLgogIC8vLyBTYWlkIGFub3RoZXIgd2F5LCB0aGlzIGludmFsaWRhdGVzIGV2ZXJ5dGhpbmcgbm90IGxvYWRlZCBmcm9tIGRpbGwKICAvLy8gKGF0IHN0YXJ0dXApIG9yIHZpYSBbc2V0TW9kdWxlc1RvTG9hZE9uTmV4dENvbXB1dGVEZWx0YV0uCiAgdm9pZCBpbnZhbGlkYXRlQWxsU291cmNlcygpOwoKICAvLy8gU2V0IHRoZSBnaXZlbiBbY29tcG9uZW50c10gYXMgY29tcG9uZW50cyB0byBsb2FkIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgogIC8vLyBvZiBbY29tcHV0ZURlbHRhXS4KICAvLy8KICAvLy8gSWYgc3BlY2lmaWVkLCBhbGwgbGlicmFyaWVzIG5vdCBjb21waWxlZCBmcm9tIHNvdXJjZSBhbmQgbm90IGluY2x1ZGVkIGluCiAgLy8vIHRoZXNlIGNvbXBvbmVudHMgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgdGhlIGxpYnJhcmllcyBpbnNpZGUgdGhlc2UKICAvLy8gY29tcG9uZW50cyB3aWxsIGJlIGxvYWRlZCBpbnN0ZWFkLgogIC8vLwogIC8vLyBVc2VmdWwgZm9yLCBmb3IgaW5zdGFuY2UsIG1vZHVsYXIgY29tcGlsYXRpb24sIHdoZXJlIG1vZHVsZXMKICAvLy8gKGNyZWF0ZWQgZXh0ZXJuYWxseSkgdmlhIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWRkZWQsIGNoYW5nZWQgb3IKICAvLy8gcmVtb3ZlZC4KICB2b2lkIHNldE1vZHVsZXNUb0xvYWRPbk5leHRDb21wdXRlRGVsdGEoTGlzdDxDb21wb25lbnQ+IGNvbXBvbmVudHMpOwoKICAvLy8gQ29tcGlsZSBbZXhwcmVzc2lvbl0gYXMgYW4gW0V4cHJlc3Npb25dLiBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGF0CiAgLy8vIGV4cHJlc3Npb24gaXMgY29tcGlsZWQuCiAgLy8vCiAgLy8vIFtleHByZXNzaW9uXSBtYXkgdXNlIHRoZSB2YXJpYWJsZXMgc3VwcGxpZWQgaW4gW2RlZmluaXRpb25zXSBhcyBmcmVlCiAgLy8vIHZhcmlhYmxlcyBhbmQgW3R5cGVEZWZpbml0aW9uc10gYXMgZnJlZSB0eXBlIHZhcmlhYmxlcy4gVGhlc2Ugd2lsbCBiZWNvbWUKICAvLy8gcmVxdWlyZWQgcGFyYW1ldGVycyB0byB0aGUgY29tcGlsZWQgZnVuY3Rpb24uIEFsbCBlbGVtZW50cyBvZgogIC8vLyBbZGVmaW5pdGlvbnNdIGFuZCBbdHlwZURlZmluaXRpb25zXSB3aWxsIGJlY29tZSBwYXJhbWV0ZXJzL3R5cGUKICAvLy8gcGFyYW1ldGVycywgd2hldGhlciBvciBub3QgdGhleSBhcHBlYXIgZnJlZSBpbiBbZXhwcmVzc2lvbl0uIFRoZSB0eXBlCiAgLy8vIHBhcmFtZXRlcnMgc2hvdWxkIGhhdmUgYSBudWxsIHBhcmVudCBwb2ludGVyLgogIC8vLwogIC8vLyBbbGlicmFyeVVyaV0gbXVzdCByZWZlciB0byBlaXRoZXIgYSBwcmV2aW91c2x5IGNvbXBpbGVkIGxpYnJhcnkuCiAgLy8vIFtjbGFzc05hbWVdIG1heSBvcHRpb25hbGx5IHJlZmVyIHRvIGEgY2xhc3Mgd2l0aGluIHN1Y2ggbGlicmFyeSB0byB1c2UgZm9yCiAgLy8vIHRoZSBzY29wZSBvZiB0aGUgZXhwcmVzc2lvbi4gSW4gdGhhdCBjYXNlLCBbaXNTdGF0aWNdIGluZGljYXRlcyB3aGV0aGVyCiAgLy8vIHRoZSBzY29wZSBjYW4gYWNjZXNzIFt0aGlzXS4KICAvLy8KICAvLy8gSXQgaXMgaWxsZWdhbCB0byB1c2UgImF3YWl0IiBpbiBbZXhwcmVzc2lvbl0gYW5kIHRoZSBjb21waWxlZCBmdW5jdGlvbgogIC8vLyB3aWxsIGFsd2F5cyBiZSBzeW5jaHJvbm91cy4KICAvLy8KICAvLy8gW2NvbXB1dGVEZWx0YV0gbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UgcHJpb3IuCiAgLy8vCiAgLy8vIFtjb21waWxlRXhwcmVzc2lvbl0gd2lsbCByZXR1cm4gW251bGxdIGlmIHRoZSBsaWJyYXJ5IG9yIGNsYXNzIGZvcgogIC8vLyBbZW5jbG9zaW5nTm9kZV0gY291bGQgbm90IGJlIGZvdW5kLiBPdGhlcndpc2UsIGVycm9ycyBhcmUgcmVwb3J0ZWQgaW4gdGhlCiAgLy8vIG5vcm1hbCB3YXkuCiAgRnV0dXJlPFByb2NlZHVyZT4gY29tcGlsZUV4cHJlc3Npb24oCiAgICAgIFN0cmluZyBleHByZXNzaW9uLAogICAgICBNYXA8U3RyaW5nLCBEYXJ0VHlwZT4gZGVmaW5pdGlvbnMsCiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZURlZmluaXRpb25zLAogICAgICBTdHJpbmcgc3ludGhldGljUHJvY2VkdXJlTmFtZSwKICAgICAgVXJpIGxpYnJhcnlVcmksCiAgICAgIFtTdHJpbmcgY2xhc3NOYW1lLAogICAgICBib29sIGlzU3RhdGljID0gZmFsc2VdKTsKfQoKYm9vbCBpc0xlZ2FsSWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllcikgewogIHJldHVybiBTdHJpbmdTY2FubmVyLmlzTGVnYWxJZGVudGlmaWVyKGlkZW50aWZpZXIpOwp9CnoATk48ASEBQgE4ASQ4AT8BPgFGAUIBNQEsTjckHUsfFgQBPAZPHzREHDIdSxMWBAFIPk8BMywcATgsJgFLTCQcATwGUDJJQB8BTRkGT0opBkNLD0cBSR4GS1BERkw0BkdRTiMGTSIGQAZJUBInGSkrJRYZHwIBLDYCAUVwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9pbmNyZW1lbnRhbF9rZXJuZWxfZ2VuZXJhdG9yLmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvbWVtb3J5X2ZpbGVfc3lzdGVtLmRhcnSPaS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5tZW1vcnlfZmlsZV9zeXN0ZW07CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAnZmlsZV9zeXN0ZW0uZGFydCc7CgovLy8gQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgW0ZpbGVTeXN0ZW1dIHdoaWNoIHBlcmZvcm1zIGl0cyBvcGVyYXRpb25zIG9uIGFuCi8vLyBpbi1tZW1vcnkgdmlydHVhbCBmaWxlIHN5c3RlbS4KLy8vCi8vLyBOb3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgb3IgZXh0ZW5kZWQgYnkgY2xpZW50cy4KY2xhc3MgTWVtb3J5RmlsZVN5c3RlbSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0gewogIGZpbmFsIE1hcDxVcmksIFVpbnQ4TGlzdD4gX2ZpbGVzID0ge307CiAgZmluYWwgU2V0PFVyaT4gX2RpcmVjdG9yaWVzID0gbmV3IFNldDxVcmk+KCk7CgogIC8vLyBUaGUgImN1cnJlbnQgZGlyZWN0b3J5IiBpbiB0aGUgaW4tbWVtb3J5IHZpcnR1YWwgZmlsZSBzeXN0ZW0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBjb252ZXJ0IHJlbGF0aXZlIFVSSXMgdG8gYWJzb2x1dGUgVVJJcy4KICAvLy8KICAvLy8gQWx3YXlzIGVuZHMgaW4gYSB0cmFpbGluZyAnLycuCiAgVXJpIGN1cnJlbnREaXJlY3Rvcnk7CgogIE1lbW9yeUZpbGVTeXN0ZW0oVXJpIGN1cnJlbnREaXJlY3RvcnkpCiAgICAgIDogY3VycmVudERpcmVjdG9yeSA9IF9hZGRUcmFpbGluZ1NsYXNoKGN1cnJlbnREaXJlY3RvcnkpOwoKICBAb3ZlcnJpZGUKICBNZW1vcnlGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSB7CiAgICByZXR1cm4gbmV3IE1lbW9yeUZpbGVTeXN0ZW1FbnRpdHkuXygKICAgICAgICB0aGlzLCBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmVVcmkodXJpKS5ub3JtYWxpemVQYXRoKCkpOwogIH0KCiAgU3RyaW5nIGdldCBkZWJ1Z1N0cmluZyB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfZmlsZXMuZm9yRWFjaCgodXJpLCBfKSA9PiBzYi53cml0ZSgiLSAkdXJpXG4iKSk7CiAgICBfZGlyZWN0b3JpZXMuZm9yRWFjaCgodXJpKSA9PiBzYi53cml0ZSgiLSAkdXJpXG4iKSk7CiAgICByZXR1cm4gJyRzYic7CiAgfQoKICBzdGF0aWMgVXJpIF9hZGRUcmFpbGluZ1NsYXNoKFVyaSB1cmkpIHsKICAgIGlmICghdXJpLnBhdGguZW5kc1dpdGgoJy8nKSkgewogICAgICB1cmkgPSB1cmkucmVwbGFjZShwYXRoOiB1cmkucGF0aCArICcvJyk7CiAgICB9CiAgICByZXR1cm4gdXJpOwogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtGaWxlU3lzdGVtRW50aXR5XSBmb3IgdXNlIGJ5Ci8vLyBbTWVtb3J5RmlsZVN5c3RlbV0uCmNsYXNzIE1lbW9yeUZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICBmaW5hbCBNZW1vcnlGaWxlU3lzdGVtIF9maWxlU3lzdGVtOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwoKICBNZW1vcnlGaWxlU3lzdGVtRW50aXR5Ll8odGhpcy5fZmlsZVN5c3RlbSwgdGhpcy51cmkpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHVyaS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIE1lbW9yeUZpbGVTeXN0ZW1FbnRpdHkgJiYKICAgICAgb3RoZXIudXJpID09IHVyaSAmJgogICAgICBpZGVudGljYWwob3RoZXIuX2ZpbGVTeXN0ZW0sIF9maWxlU3lzdGVtKTsKCiAgLy8vIENyZWF0ZSBhIGRpcmVjdG9yeSBmb3IgdGhpcyBmaWxlIHN5c3RlbSBlbnRyeS4KICAvLy8KICAvLy8gSWYgdGhlIGVudHJ5IGlzIGFuIGV4aXN0aW5nIGZpbGUsIHRoaXMgaXMgYW4gZXJyb3IuCiAgdm9pZCBjcmVhdGVEaXJlY3RvcnkoKSB7CiAgICBpZiAoX2ZpbGVTeXN0ZW0uX2ZpbGVzW3VyaV0gIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbih1cmksICdFbnRyeSAkdXJpIGlzIGEgZmlsZS4nKTsKICAgIH0KICAgIF9maWxlU3lzdGVtLl9kaXJlY3Rvcmllcy5hZGQodXJpKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxib29sPiBleGlzdHMoKSBhc3luYyB7CiAgICByZXR1cm4gX2ZpbGVTeXN0ZW0uX2ZpbGVzW3VyaV0gIT0gbnVsbCB8fAogICAgICAgIF9maWxlU3lzdGVtLl9kaXJlY3Rvcmllcy5jb250YWlucyh1cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPExpc3Q8aW50Pj4gcmVhZEFzQnl0ZXMoKSBhc3luYyB7CiAgICBVaW50OExpc3QgY29udGVudHMgPSBfZmlsZVN5c3RlbS5fZmlsZXNbdXJpXTsKICAgIGlmIChjb250ZW50cyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgJ0ZpbGUgJHVyaSBkb2VzIG5vdCBleGlzdC4nKTsKICAgIH0KICAgIHJldHVybiBjb250ZW50czsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZygpIGFzeW5jIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IGF3YWl0IHJlYWRBc0J5dGVzKCk7CiAgICB0cnkgewogICAgICByZXR1cm4gdXRmOC5kZWNvZGUoYnl0ZXMpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24odXJpLCBlLm1lc3NhZ2UpOwogICAgfQogIH0KCiAgLy8vIFdyaXRlcyB0aGUgZ2l2ZW4gcmF3IGJ5dGVzIHRvIHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5LgogIC8vLwogIC8vLyBJZiBubyBmaWxlIGV4aXN0cywgb25lIGlzIGNyZWF0ZWQuICBJZiBhIGZpbGUgZXhpc3RzIGFscmVhZHksIGl0IGlzCiAgLy8vIG92ZXJ3cml0dGVuLgogIHZvaWQgd3JpdGVBc0J5dGVzU3luYyhMaXN0PGludD4gYnl0ZXMpIHsKICAgIGlmIChieXRlcyBpcyBVaW50OExpc3QpIHsKICAgICAgX3VwZGF0ZSh1cmksIGJ5dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIF91cGRhdGUodXJpLCBuZXcgVWludDhMaXN0LmZyb21MaXN0KGJ5dGVzKSk7CiAgICB9CiAgfQoKICAvLy8gV3JpdGVzIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBmaWxlIHN5c3RlbSBlbnRpdHkuCiAgLy8vCiAgLy8vIFRoZSBzdHJpbmcgaXMgZW5jb2RlZCBhcyBVVEYtOC4KICAvLy8KICAvLy8gSWYgbm8gZmlsZSBleGlzdHMsIG9uZSBpcyBjcmVhdGVkLiAgSWYgYSBmaWxlIGV4aXN0cyBhbHJlYWR5LCBpdCBpcwogIC8vLyBvdmVyd3JpdHRlbi4KICB2b2lkIHdyaXRlQXNTdHJpbmdTeW5jKFN0cmluZyBzKSB7CiAgICAvLyBOb3RlOiB0aGUgcmV0dXJuIHR5cGUgb2YgdXRmOC5lbmNvZGUgaXMgTGlzdDxpbnQ+LCBidXQgaW4gcHJhY3RpY2UgaXQKICAgIC8vIGFsd2F5cyByZXR1cm5zIFVpbnQ4TGlzdC4gIFdlIHJlbHkgb24gdGhhdCBmb3IgZWZmaWNpZW5jeSwgc28gdGhhdCB3ZQogICAgLy8gZG9uJ3QgaGF2ZSB0byBtYWtlIGFuIGV4dHJhIGNvcHkuCiAgICBfdXBkYXRlKHVyaSwgdXRmOC5lbmNvZGUocykgYXMgVWludDhMaXN0KTsKICB9CgogIHZvaWQgX3VwZGF0ZShVcmkgdXJpLCBVaW50OExpc3QgZGF0YSkgewogICAgaWYgKF9maWxlU3lzdGVtLl9kaXJlY3Rvcmllcy5jb250YWlucyh1cmkpKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgJ0VudHJ5ICR1cmkgaXMgYSBkaXJlY3RvcnkuJyk7CiAgICB9CiAgICBfZmlsZVN5c3RlbS5fZmlsZXNbdXJpXSA9IGRhdGE7CiAgfQp9CoCLAE5OPAEmARUXGgEbAVAjBDsvKTABRAY+BiUYASlAAQwxKUEEARsqNjkSBAEqIy8GEAQCAT0YOyYBDBEBOAEMJAEMJCkaMQE1BjobK0MGJwQBDCAuMAQBDCoyHEcGFQQBDCgrCiElNQYEAT0GShMrHhsNMwYEAToGJgZKEyVNTSkvBAEqMkgGJAQCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9tZW1vcnlfZmlsZV9zeXN0ZW0uZGFydDdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlcl9ncmFwaC5kYXJ0iF4vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5idWlsZGVyX2dyYXBoOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcgc2hvdyBMaWJyYXJ5RGVwZW5kZW5jeSwgTGlicmFyeVBhcnQ7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3V0aWwvZ3JhcGguZGFydCcgc2hvdyBHcmFwaDsKCmltcG9ydCAnYnVpbGRlci9idWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ2V4cG9ydC5kYXJ0JyBzaG93IEV4cG9ydDsKCmltcG9ydCAnaW1wb3J0LmRhcnQnIHNob3cgSW1wb3J0OwoKaW1wb3J0ICdkaWxsL2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgRGlsbExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdzb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKY2xhc3MgQnVpbGRlckdyYXBoIGltcGxlbWVudHMgR3JhcGg8VXJpPiB7CiAgZmluYWwgTWFwPFVyaSwgTGlicmFyeUJ1aWxkZXI+IGJ1aWxkZXJzOwoKICBCdWlsZGVyR3JhcGgodGhpcy5idWlsZGVycyk7CgogIEl0ZXJhYmxlPFVyaT4gZ2V0IHZlcnRpY2VzID0+IGJ1aWxkZXJzLmtleXM7CgogIEl0ZXJhYmxlPFVyaT4gbmVpZ2hib3JzT2YoVXJpIHZlcnRleCkgc3luYyogewogICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGJ1aWxkZXJzW3ZlcnRleF07CiAgICBpZiAobGlicmFyeSA9PSBudWxsKSB7CiAgICAgIHRocm93ICJMaWJyYXJ5IG5vdCBmb3VuZDogJHZlcnRleCI7CiAgICB9CiAgICBpZiAobGlicmFyeSBpcyBTb3VyY2VMaWJyYXJ5QnVpbGRlcikgewogICAgICBmb3IgKEltcG9ydCBpbXBvcnQgaW4gbGlicmFyeS5pbXBvcnRzKSB7CiAgICAgICAgLy8gJ2ltcG9ydGVkJyBjYW4gYmUgbnVsbCBmb3IgZmFrZSBpbXBvcnRzLCBzdWNoIGFzIGRhcnQtZXh0Oi4KICAgICAgICBpZiAoaW1wb3J0LmltcG9ydGVkICE9IG51bGwpIHsKICAgICAgICAgIFVyaSB1cmkgPSBpbXBvcnQuaW1wb3J0ZWQudXJpOwogICAgICAgICAgaWYgKGJ1aWxkZXJzLmNvbnRhaW5zS2V5KHVyaSkpIHsKICAgICAgICAgICAgeWllbGQgdXJpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKEV4cG9ydCBleHBvcnQgaW4gbGlicmFyeS5leHBvcnRzKSB7CiAgICAgICAgVXJpIHVyaSA9IGV4cG9ydC5leHBvcnRlZC51cmk7CiAgICAgICAgaWYgKGJ1aWxkZXJzLmNvbnRhaW5zS2V5KHVyaSkpIHsKICAgICAgICAgIHlpZWxkIHVyaTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0IGluIGxpYnJhcnkucGFydHMpIHsKICAgICAgICBVcmkgdXJpID0gcGFydC51cmk7CiAgICAgICAgaWYgKGJ1aWxkZXJzLmNvbnRhaW5zS2V5KHVyaSkpIHsKICAgICAgICAgIHlpZWxkIHVyaTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobGlicmFyeSBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgLy8gSW1wb3J0cyBhbmQgZXhwb3J0cwogICAgICBmb3IgKExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgaW4gbGlicmFyeS5saWJyYXJ5LmRlcGVuZGVuY2llcykgewogICAgICAgIFVyaSB1cmkgPSBkZXBlbmRlbmN5LnRhcmdldExpYnJhcnkuaW1wb3J0VXJpOwogICAgICAgIGlmIChidWlsZGVycy5jb250YWluc0tleSh1cmkpKSB7CiAgICAgICAgICB5aWVsZCB1cmk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBQYXJ0cwogICAgICBmb3IgKExpYnJhcnlQYXJ0IHBhcnQgaW4gbGlicmFyeS5saWJyYXJ5LnBhcnRzKSB7CiAgICAgICAgVXJpIHVyaSA9IGxpYnJhcnkudXJpLnJlc29sdmUocGFydC5wYXJ0VXJpKTsKICAgICAgICBpZiAoYnVpbGRlcnMuY29udGFpbnNLZXkodXJpKSkgewogICAgICAgICAgeWllbGQgdXJpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQpLAE5OPAEdAUkBNAEzASIBIgFBAUcBKysBHwEvATAvGyoGKy9HJykrFwwKCC8nKRUKCDkcKRUKCDAdSzYpFQoIAQ84NSkVCggGBAIBLnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyX2dyYXBoLmRhcnQ0c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2NvbWJpbmF0b3IuZGFydIK7Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29tYmluYXRvcjsKCmNsYXNzIENvbWJpbmF0b3IgewogIGZpbmFsIGJvb2wgaXNTaG93OwoKICBmaW5hbCBTZXQ8U3RyaW5nPiBuYW1lczsKCiAgQ29tYmluYXRvcih0aGlzLmlzU2hvdywgdGhpcy5uYW1lcywgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKTsKCiAgQ29tYmluYXRvci5zaG93KEl0ZXJhYmxlPFN0cmluZz4gbmFtZXMsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkKICAgICAgOiB0aGlzKHRydWUsIG5ldyBTZXQ8U3RyaW5nPi5mcm9tKG5hbWVzKSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIENvbWJpbmF0b3IuaGlkZShJdGVyYWJsZTxTdHJpbmc+IG5hbWVzLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpCiAgICAgIDogdGhpcyhmYWxzZSwgbmV3IFNldDxTdHJpbmc+LmZyb20obmFtZXMpLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKCiAgYm9vbCBnZXQgaXNIaWRlID0+ICFpc1Nob3c7Cn0KFwBOTjwBGgETFQEbAUQBR0YBR0cBHgIBK3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21iaW5hdG9yLmRhcnRJc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3V0aWwvZXJyb3JfcmVwb3J0ZXJfZmlsZV9jb3BpZXIuZGFydILlLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDppbycgc2hvdyBEaXJlY3RvcnksIEZpbGUsIEdaaXBDb2RlYzsKClVyaSBzYXZlQXNHemlwKExpc3Q8aW50PiBkYXRhLCBTdHJpbmcgZmlsZW5hbWUpIHsKICAvLyBUT0RPKGplbnNqKTogVGhpcyBzaG91bGQgYmUgZG9uZSB2aWEgdGhlIEZpbGVTeXN0ZW0gaW5zdGVhZCwgYnV0IGl0CiAgLy8gY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCB3cml0aW5nLgogIEdaaXBDb2RlYyBnWmlwQ29kZWMgPSBuZXcgR1ppcENvZGVjKCk7CiAgTGlzdDxpbnQ+IGd6aXBwZWRJbml0aWFsaXplZEZyb21EYXRhID0gZ1ppcENvZGVjLmVuY29kZShkYXRhKTsKICBEaXJlY3RvcnkgdGVtcERpciA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCIkZmlsZW5hbWUiKTsKICBGaWxlIGZpbGUgPSBuZXcgRmlsZSgiJHt0ZW1wRGlyLnBhdGh9LyR7ZmlsZW5hbWV9Lmd6Iik7CiAgZmlsZS53cml0ZUFzQnl0ZXNTeW5jKGd6aXBwZWRJbml0aWFsaXplZEZyb21EYXRhKTsKICByZXR1cm4gZmlsZS51cmk7Cn0KEgBOTjwBMgEySSgpQUg6NRMCAUBwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9lcnJvcl9yZXBvcnRlcl9maWxlX2NvcGllci5kYXJ0PHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9oeWJyaWRfZmlsZV9zeXN0ZW0uZGFydIeSLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBBIG1lbW9yeSArIHBoeXNpY2FsIGZpbGUgc3lzdGVtIHVzZWQgdG8gbW9jayBpbnB1dCBmb3IgdGVzdHMgYnV0IHByb3ZpZGUKLy8vIHNkayBzb3VyY2VzIGZyb20gZGlzay4KbGlicmFyeSBmcm9udF9lbmQuc3JjLmh5YnJpZF9maWxlX3N5c3RlbTsKCmltcG9ydCAnZGFydDphc3luYyc7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCc7CmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9tZW1vcnlfZmlsZV9zeXN0ZW0uZGFydCc7CmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9zdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0JzsKCi8vLyBBIGZpbGUgc3lzdGVtIHRoYXQgbWl4ZXMgZmlsZXMgZnJvbSBtZW1vcnkgYW5kIGEgcGh5c2ljYWwgZmlsZSBzeXN0ZW0uIEFsbAovLy8gbWVtb3J5IGVudGl0aWVzIHRha2UgcHJpb3JpdHkgb3ZlciBmaWxlIHN5c3RlbSBlbnRpdGllcy4KY2xhc3MgSHlicmlkRmlsZVN5c3RlbSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0gewogIGZpbmFsIE1lbW9yeUZpbGVTeXN0ZW0gbWVtb3J5OwogIGZpbmFsIEZpbGVTeXN0ZW0gcGh5c2ljYWw7CgogIEh5YnJpZEZpbGVTeXN0ZW0odGhpcy5tZW1vcnksIFtGaWxlU3lzdGVtIF9waHlzaWNhbF0pCiAgICAgIDogcGh5c2ljYWwgPSBfcGh5c2ljYWwgPz8gU3RhbmRhcmRGaWxlU3lzdGVtLmluc3RhbmNlOwoKICBAb3ZlcnJpZGUKICBGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSA9PgogICAgICBuZXcgSHlicmlkRmlsZVN5c3RlbUVudGl0eSh1cmksIHRoaXMpOwp9CgovLy8gRW50aXR5IHRoYXQgZGVsZWdhdGVzIHRvIGFuIHVuZGVybHlpbmcgbWVtb3J5IG9yIHBoeXNpY2FsIGZpbGUgc3lzdGVtCi8vLyBlbnRpdHkuCmNsYXNzIEh5YnJpZEZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICBmaW5hbCBVcmkgdXJpOwogIEZpbGVTeXN0ZW1FbnRpdHkgX2RlbGVnYXRlOwogIGZpbmFsIEh5YnJpZEZpbGVTeXN0ZW0gX2ZzOwoKICBIeWJyaWRGaWxlU3lzdGVtRW50aXR5KHRoaXMudXJpLCB0aGlzLl9mcyk7CgogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5PiBnZXQgZGVsZWdhdGUgYXN5bmMgewogICAgaWYgKF9kZWxlZ2F0ZSAhPSBudWxsKSByZXR1cm4gX2RlbGVnYXRlOwogICAgRmlsZVN5c3RlbUVudGl0eSBlbnRpdHkgPSBfZnMubWVtb3J5LmVudGl0eUZvclVyaSh1cmkpOwogICAgaWYgKCgodXJpLnNjaGVtZSAhPSAnZmlsZScgJiYgdXJpLnNjaGVtZSAhPSAnZGF0YScpICYmCiAgICAgICAgICAgIF9mcy5waHlzaWNhbCBpcyBTdGFuZGFyZEZpbGVTeXN0ZW0pIHx8CiAgICAgICAgYXdhaXQgZW50aXR5LmV4aXN0cygpKSB7CiAgICAgIF9kZWxlZ2F0ZSA9IGVudGl0eTsKICAgICAgcmV0dXJuIF9kZWxlZ2F0ZTsKICAgIH0KICAgIHJldHVybiBfZGVsZWdhdGUgPSBfZnMucGh5c2ljYWwuZW50aXR5Rm9yVXJpKHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgYXN5bmMgPT4gKGF3YWl0IGRlbGVnYXRlKS5leGlzdHMoKTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPExpc3Q8aW50Pj4gcmVhZEFzQnl0ZXMoKSBhc3luYyA9PiAoYXdhaXQgZGVsZWdhdGUpLnJlYWRBc0J5dGVzKCk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZygpIGFzeW5jID0+IChhd2FpdCBkZWxlZ2F0ZSkucmVhZEFzU3RyaW5nKCk7Cn0KPABOTjwBTRsqARUBLDM1AU89LyEdATg9AQwsLQIBSgw7ER4eAS4BMC08OzMhGhgGNwQBDDwBDEsBDEoCATNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvaHlicmlkX2ZpbGVfc3lzdGVtLmRhcnQ3c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2xpYnJhcnlfZ3JhcGguZGFydIY9Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubGlicmFyeV9ncmFwaDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnCiAgICBzaG93IExpYnJhcnksIExpYnJhcnlEZXBlbmRlbmN5LCBMaWJyYXJ5UGFydDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdXRpbC9ncmFwaC5kYXJ0JyBzaG93IEdyYXBoOwoKY2xhc3MgTGlicmFyeUdyYXBoIGltcGxlbWVudHMgR3JhcGg8VXJpPiB7CiAgZmluYWwgTWFwPFVyaSwgTGlicmFyeT4gbGlicmFyaWVzOwoKICBMaWJyYXJ5R3JhcGgodGhpcy5saWJyYXJpZXMpOwoKICBJdGVyYWJsZTxVcmk+IGdldCB2ZXJ0aWNlcyA9PiBsaWJyYXJpZXMua2V5czsKCiAgSXRlcmFibGU8VXJpPiBuZWlnaGJvcnNPZihVcmkgdmVydGV4KSBzeW5jKiB7CiAgICBMaWJyYXJ5IGxpYnJhcnkgPSBsaWJyYXJpZXNbdmVydGV4XTsKICAgIGlmIChsaWJyYXJ5ID09IG51bGwpIHsKICAgICAgdGhyb3cgIkxpYnJhcnkgbm90IGZvdW5kOiAkdmVydGV4IjsKICAgIH0KCiAgICAvLyBJbXBvcnRzIGFuZCBleHBvcnRzLgogICAgZm9yIChMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5IGluIGxpYnJhcnkuZGVwZW5kZW5jaWVzKSB7CiAgICAgIFVyaSB1cmkxID0gZGVwZW5kZW5jeS50YXJnZXRMaWJyYXJ5LmltcG9ydFVyaTsKICAgICAgVXJpIHVyaTIgPSBkZXBlbmRlbmN5LnRhcmdldExpYnJhcnkuZmlsZVVyaTsKICAgICAgaWYgKGxpYnJhcmllcy5jb250YWluc0tleSh1cmkxKSkgewogICAgICAgIHlpZWxkIHVyaTE7CiAgICAgIH0gZWxzZSBpZiAodXJpMiAhPSBudWxsKSB7CiAgICAgICAgaWYgKGxpYnJhcmllcy5jb250YWluc0tleSh1cmkyKSkgewogICAgICAgICAgeWllbGQgdXJpMjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBQYXJ0cy4KICAgIC8vIE5vcm1hbGx5IHRoZXJlIHdvbid0IGJlIGxpYnJhcmllcyBmb3IgdGhlc2UsIGJ1dCBpZiwgZm9yIGluc3RhbmNlLAogICAgLy8gdGhlIHBhcnQgZGlkbid0IGV4aXN0IHRoZXJlIHdpbGwgYmUgYSBzeW50aGV0aWMgbGlicmFyeS4KICAgIGZvciAoTGlicmFyeVBhcnQgcGFydCBpbiBsaWJyYXJ5LnBhcnRzKSB7CiAgICAgIFVyaSBwYXJ0VXJpID0gbGlicmFyeS5pbXBvcnRVcmkucmVzb2x2ZShwYXJ0LnBhcnRVcmkpOwogICAgICBVcmkgZmlsZVVyaSA9IGxpYnJhcnkuZmlsZVVyaS5yZXNvbHZlKHBhcnQucGFydFVyaSk7CiAgICAgIGlmIChsaWJyYXJpZXMuY29udGFpbnNLZXkocGFydFVyaSkpIHsKICAgICAgICB5aWVsZCBwYXJ0VXJpOwogICAgICB9IGVsc2UgaWYgKGZpbGVVcmkgIT0gcGFydFVyaSAmJiBsaWJyYXJpZXMuY29udGFpbnNLZXkoZmlsZVVyaSkpIHsKICAgICAgICB5aWVsZCBmaWxlVXJpOwogICAgICB9CiAgICB9CiAgfQp9CjUATk48AR0BJDIBNAErJQEgATABMCkbKgYBHEE1MykUISsWCggGAQ5KQC49OywXSRcIBgQCAS5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvbGlicmFyeV9ncmFwaC5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL251bGxfY29tcGlsZXJfb3V0cHV0LmRhcnSFwS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTnVsbCBwYXR0ZXJuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbQ29tcGlsZXJPdXRwdXRdIGludGVyZmFjZS4KCmxpYnJhcnkgY29tcGlsZXIubnVsbF9hcGk7CgppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKCi8vLyBOdWxsIHBhdHRlcm4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFtDb21waWxlck91dHB1dF0gaW50ZXJmYWNlLgpjbGFzcyBOdWxsQ29tcGlsZXJPdXRwdXQgaW1wbGVtZW50cyBDb21waWxlck91dHB1dCB7CiAgY29uc3QgTnVsbENvbXBpbGVyT3V0cHV0KCk7CgogIEBvdmVycmlkZQogIE91dHB1dFNpbmsgY3JlYXRlT3V0cHV0U2luayhTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbiwgT3V0cHV0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gTnVsbFNpbmsub3V0cHV0UHJvdmlkZXIobmFtZSwgZXh0ZW5zaW9uLCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIEJpbmFyeU91dHB1dFNpbmsgY3JlYXRlQmluYXJ5U2luayhVcmkgdXJpKSB7CiAgICByZXR1cm4gbmV3IE51bGxCaW5hcnlTaW5rKHVyaSk7CiAgfQp9CgovLy8gQSBzaW5rIHRoYXQgZHJhaW5zIGludG8gL2Rldi9udWxsLgpjbGFzcyBOdWxsU2luayBpbXBsZW1lbnRzIE91dHB1dFNpbmsgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBOdWxsU2luayh0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChTdHJpbmcgdmFsdWUpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7fQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwoKICAvLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIGFuIFthcGkuQ29tcGlsZXJPdXRwdXRQcm92aWRlcl0uCiAgc3RhdGljIE51bGxTaW5rIG91dHB1dFByb3ZpZGVyKAogICAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbiwgT3V0cHV0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IE51bGxTaW5rKCckbmFtZS4kZXh0ZW5zaW9uLiR0eXBlJyk7CiAgfQp9CgpjbGFzcyBOdWxsQmluYXJ5U2luayBpbXBsZW1lbnRzIEJpbmFyeU91dHB1dFNpbmsgewogIGZpbmFsIFVyaSB1cmk7CgogIE51bGxCaW5hcnlTaW5rKHRoaXMudXJpKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZShMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7fQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnTnVsbEJpbmFyeVNpbmsoJHVyaSknOwp9Cj8ATk48AUMBGwEfAUM1HgEMUDsEAQwvJAQCAScnFQEXAQwcAQwSAQwdAUYiODMEAgEzEQEcAQw8AQwSAQwvAgEucGFja2FnZTpjb21waWxlci9zcmMvbnVsbF9jb21waWxlcl9vdXRwdXQuZGFydEJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9kaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnSK2i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuZGlhZ25vc3RpY19saXN0ZW5lcjsKCmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JyBzaG93IERpYWdub3N0aWNPcHRpb25zOwppbXBvcnQgJ21lc3NhZ2VzLmRhcnQnOwppbXBvcnQgJ3NvdXJjZV9zcGFuLmRhcnQnIHNob3cgU291cmNlU3BhbjsKaW1wb3J0ICdzcGFubmFibGUuZGFydCcgc2hvdyBTcGFubmFibGU7CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW5hbWUgYW5kIGNsZWFudXAgdGhpcyBpbnRlcmZhY2UuIEFkZCBzZXZlcml0eSBlbnVtLgphYnN0cmFjdCBjbGFzcyBEaWFnbm9zdGljUmVwb3J0ZXIgewogIERpYWdub3N0aWNPcHRpb25zIGdldCBvcHRpb25zOwoKICAvLyBUT0RPKGthcmxrbG9zZSk6IHJlbmFtZSBsb2cgdG8gc29tZXRoaW5nIGxpa2UgcmVwb3J0SW5mby4KICB2b2lkIGxvZyhtZXNzYWdlKTsKCiAgaW50ZXJuYWxFcnJvcihTcGFubmFibGUgc3Bhbm5hYmxlLCBtZXNzYWdlKTsKCiAgLy8vIENyZWF0ZXMgYSBbU291cmNlU3Bhbl0gZm9yIFtub2RlXSBpbiBzY29wZSBvZiB0aGUgY3VycmVudCBlbGVtZW50LgogIC8vLwogIC8vLyBJZiBbbm9kZV0gaXMgYSBbTm9kZV0gd2UgYXNzZXJ0IGluIGNoZWNrZWQgbW9kZSB0aGF0IHRoZSBjb3JyZXNwb25kaW5nCiAgLy8vIHRva2VucyBjYW4gYmUgZm91bmQgd2l0aGluIHRoZSB0b2tlbnMgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4KICBTb3VyY2VTcGFuIHNwYW5Gcm9tU3Bhbm5hYmxlKFNwYW5uYWJsZSBub2RlKTsKCiAgdm9pZCByZXBvcnRFcnJvck1lc3NhZ2UoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgTWVzc2FnZUtpbmQgbWVzc2FnZUtpbmQsCiAgICAgIFtNYXAgYXJndW1lbnRzID0gY29uc3Qge31dKSB7CiAgICByZXBvcnRFcnJvcihjcmVhdGVNZXNzYWdlKHNwYW5uYWJsZSwgbWVzc2FnZUtpbmQsIGFyZ3VtZW50cykpOwogIH0KCiAgdm9pZCByZXBvcnRFcnJvcihEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBbTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W11dKTsKCiAgdm9pZCByZXBvcnRXYXJuaW5nTWVzc2FnZShTcGFubmFibGUgc3Bhbm5hYmxlLCBNZXNzYWdlS2luZCBtZXNzYWdlS2luZCwKICAgICAgW01hcCBhcmd1bWVudHMgPSBjb25zdCB7fV0pIHsKICAgIHJlcG9ydFdhcm5pbmcoY3JlYXRlTWVzc2FnZShzcGFubmFibGUsIG1lc3NhZ2VLaW5kLCBhcmd1bWVudHMpKTsKICB9CgogIHZvaWQgcmVwb3J0V2FybmluZyhEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBbTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W11dKTsKCiAgdm9pZCByZXBvcnRIaW50TWVzc2FnZShTcGFubmFibGUgc3Bhbm5hYmxlLCBNZXNzYWdlS2luZCBtZXNzYWdlS2luZCwKICAgICAgW01hcCBhcmd1bWVudHMgPSBjb25zdCB7fV0pIHsKICAgIHJlcG9ydEhpbnQoY3JlYXRlTWVzc2FnZShzcGFubmFibGUsIG1lc3NhZ2VLaW5kLCBhcmd1bWVudHMpKTsKICB9CgogIHZvaWQgcmVwb3J0SGludChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBbTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W11dKTsKCiAgQGRlcHJlY2F0ZWQKICB2b2lkIHJlcG9ydEluZm8oU3Bhbm5hYmxlIG5vZGUsIE1lc3NhZ2VLaW5kIGVycm9yQ29kZSwKICAgICAgW01hcCBhcmd1bWVudHMgPSBjb25zdCB7fV0pOwoKICAvLy8gU2V0IGN1cnJlbnQgZWxlbWVudCBvZiB0aGlzIHJlcG9ydGVyIHRvIFtlbGVtZW50XS4gVGhpcyBpcyB1c2VkIGZvcgogIC8vLyBjcmVhdGluZyBbU291cmNlU3Bhbl0gaW4gW3NwYW5Gcm9tU3Bhbm5hYmxlXS4KICB3aXRoQ3VycmVudEVsZW1lbnQoRW50aXR5IGVsZW1lbnQsIGYoKSk7CgogIERpYWdub3N0aWNNZXNzYWdlIGNyZWF0ZU1lc3NhZ2UoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgTWVzc2FnZUtpbmQgbWVzc2FnZUtpbmQsCiAgICAgIFtNYXAgYXJndW1lbnRzID0gY29uc3Qge31dKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgY3Jhc2gsIGFuIGVycm9yIG9yIGEgZmF0YWwgd2FybmluZyBoYXMgYmVlbiByZXBvcnRlZC4KICBib29sIGdldCBoYXNSZXBvcnRlZEVycm9yOwoKICAvLy8gQ2FsbGVkIHdoZW4gYW4gW2V4Y2VwdGlvbl0gaXMgdGhyb3duIGZyb20gdXNlci1wcm92aWRlZCBjb2RlLCBsaWtlIGZyb20KICAvLy8gdGhlIGlucHV0IHByb3ZpZGVyIG9yIGRpYWdub3N0aWNzIGhhbmRsZXIuCiAgdm9pZCBvbkNyYXNoSW5Vc2VyQ29kZShTdHJpbmcgbWVzc2FnZSwgZXhjZXB0aW9uLCBzdGFja1RyYWNlKSB7fQp9CgpjbGFzcyBEaWFnbm9zdGljTWVzc2FnZSB7CiAgZmluYWwgU291cmNlU3BhbiBzb3VyY2VTcGFuOwogIGZpbmFsIFNwYW5uYWJsZSBzcGFubmFibGU7CiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlOwoKICBEaWFnbm9zdGljTWVzc2FnZSh0aGlzLnNvdXJjZVNwYW4sIHRoaXMuc3Bhbm5hYmxlLCB0aGlzLm1lc3NhZ2UpOwp9Ck8ATk48ASUBJDEYKygBTiQhAT8VAS8BSQZNRDABSCRDBAEuRgFKJEUEATBGAUckQgQBLUYBDjkjAUo0KwFQIwFQHQFOMUMCARofHRkBRAIBOXBhY2thZ2U6Y29tcGlsZXIvc3JjL2RpYWdub3N0aWNzL2RpYWdub3N0aWNfbGlzdGVuZXIuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9kaWFnbm9zdGljcy9pbnZhcmlhbnQuZGFydIcpLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5kaWFnbm9zdGljcy5pbnZhcmlhbnQ7CgppbXBvcnQgJ3NwYW5uYWJsZS5kYXJ0JzsKCi8vLyBGbGFnIHRoYXQgY2FuIGJlIHVzZWQgaW4gYXNzZXJ0aW9ucyB0byBhc3NlcnQgdGhhdCBhIGNvZGUgcGF0aCBpcyBvbmx5Ci8vLyBleGVjdXRlZCBhcyBwYXJ0IG9mIGRldmVsb3BtZW50LgovLy8KLy8vIFRoaXMgZmxhZyBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byB0cnVlIGlmIGhlbHBlciBtZXRob2RzIGxpa2UsIFtkZWJ1Z1ByaW50XSwKLy8vIFtkZWJ1Z1dyYXBQcmludF0sIFt0cmFjZV0sIGFuZCBbcmVwb3J0SGVyZV0gYXJlIGNhbGxlZC4KYm9vbCBERUJVR19NT0RFID0gZmFsc2U7CgovLy8gQXNzZXJ0IHRoYXQgW0RFQlVHX01PREVdIGlzIGB0cnVlYCBhbmQgcHJvdmlkZSBbbWVzc2FnZV0gYXMgcGFydCBvZiB0aGUKLy8vIGVycm9yIG1lc3NhZ2UuCmFzc2VydERlYnVnTW9kZShTdHJpbmcgbWVzc2FnZSkgewogIGFzc2VydChERUJVR19NT0RFLAogICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsICdEZWJ1ZyBtb2RlIGlzIG5vdCBlbmFibGVkOiAkbWVzc2FnZScpKTsKfQoKLy8vIFRocm93cyBhIFtTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlXS4KLy8vCi8vLyBVc2UgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBiZXR0ZXIgaW5mb3JtYXRpb24gZm9yIGFzc2VydGlvbiBieSBjYWxsaW5nCi8vLyBbZmFpbGVkQXRdIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYW4gYGFzc2VydGAgc3RhdGVtZW50OgovLy8KLy8vICAgICBhc3NlcnQoY29uZGl0aW9uLCBmYWlsZWRBdChwb3NpdGlvbiwgbWVzc2FnZSkpOwovLy8KLy8vIFtzcGFubmFibGVdIG11c3QgYmUgbm9uLW51bGwgYW5kIHdpbGwgYmUgdXNlZCB0byBwcm92aWRlIHBvc2l0aW9uYWwKLy8vIGluZm9ybWF0aW9uIGluIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZS4KLy8vCi8vLyBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSB1c2VkIHRvIHRocm93IGEgW1NwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmVdIG91dHNpZGUKLy8vIGFuIGFzc2VydDoKLy8vCi8vLyAgICAgZmFpbGVkQXQocG9zaXRpb24sIG1lc3NhZ2UpOwovLy8KLy8vIG9yLCBpZiB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHJlcXVpcmVzIGEgcmVzdWx0IG9yIGNvbnRyb2wgZmxvdzoKLy8vCi8vLyAgICAgdGhyb3cgZmFpbGVkQXQocG9zaXRpb24sIG1lc3NhZ2UpOwovLy8KYm9vbCBmYWlsZWRBdChTcGFubmFibGUgc3Bhbm5hYmxlLCBbU3RyaW5nIG1lc3NhZ2VdKSB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIFtzcGFubmFibGVdIGFuZCBbbWVzc2FnZV0gdG8gcHJvdmlkZSBiZXR0ZXIKICAvLyBpbmZvcm1hdGlvbiBvbiBhc3NlcnRpb24gZXJyb3JzLgogIGlmIChzcGFubmFibGUgPT0gbnVsbCkgewogICAgdGhyb3cgbmV3IFNwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmUoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAnU3Bhbm5hYmxlIHdhcyBudWxsIGZvciBmYWlsZWRBdC4gVXNlIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUuJyk7CiAgfQogIHRocm93IG5ldyBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlKHNwYW5uYWJsZSwgbWVzc2FnZSk7Cn0KNABOTjwBJwEZAUslBFE8GQFMEyIVTwIBKgRLQAQ4BEgwBFAPBCUERQQrBDdKJhtDTAQ7AgEvcGFja2FnZTpjb21waWxlci9zcmMvZGlhZ25vc3RpY3MvaW52YXJpYW50LmRhcnQ6c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZGlhZ25vc3RpY3Mvc291cmNlX3NwYW4uZGFydINDLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5kaWFnbm9zdGljcy5zb3VyY2Vfc3BhbjsKCmltcG9ydCAnc3Bhbm5hYmxlLmRhcnQnIHNob3cgU3Bhbm5hYmxlOwoKY2xhc3MgU291cmNlU3BhbiBpbXBsZW1lbnRzIFNwYW5uYWJsZSB7CiAgZmluYWwgVXJpIHVyaTsKICBmaW5hbCBpbnQgYmVnaW47CiAgZmluYWwgaW50IGVuZDsKCiAgY29uc3QgU291cmNlU3Bhbih0aGlzLnVyaSwgdGhpcy5iZWdpbiwgdGhpcy5lbmQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiAxMyAqIHVyaS5oYXNoQ29kZSArIDE3ICogYmVnaW4uaGFzaENvZGUgKyAxOSAqIGVuZC5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgU291cmNlU3BhbikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHVyaSA9PSBvdGhlci51cmkgJiYgYmVnaW4gPT0gb3RoZXIuYmVnaW4gJiYgZW5kID09IG90aGVyLmVuZDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTb3VyY2VTcGFuKCR1cmksICRiZWdpbiwgJGVuZCknOwp9CiAATk48ASkBKAEoERMRATQBDBVIBAEMHC0sSQQBDDkCATFwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9zb3VyY2Vfc3Bhbi5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2RpYWdub3N0aWNzL3NwYW5uYWJsZS5kYXJ0hUgvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmRpYWdub3N0aWNzLnNwYW5uYWJsZTsKCi8vLyBUYWdnaW5nIGludGVyZmFjZSBmb3IgY2xhc3NlcyBmcm9tIHdoaWNoIHNvdXJjZSBzcGFucyBjYW4gYmUgZ2VuZXJhdGVkLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGaW5kIGEgYmV0dGVyIG5hbWUuCi8vIFRPRE8oYWhlKTogSG93IGFib3V0ICJCb2x0Ij8KYWJzdHJhY3QgY2xhc3MgU3Bhbm5hYmxlIHt9CgpjbGFzcyBfU3Bhbm5hYmxlU2VudGluZWwgaW1wbGVtZW50cyBTcGFubmFibGUgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBjb25zdCBfU3Bhbm5hYmxlU2VudGluZWwodGhpcy5uYW1lKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKfQoKLy8vIFNlbnRpbmVsIHNwYW5uYWJsZSB1c2VkIHRvIG1hcmsgdGhhdCBkaWFnbm9zdGljcyBzaG91bGQgcG9pbnQgdG8gdGhlCi8vLyBjdXJyZW50IGVsZW1lbnQuIE5vdGUgdGhhdCB0aGUgZGlhZ25vc3RpYyByZXBvcnRpbmcgd2lsbCBmYWlsIGlmIHRoZSBjdXJyZW50Ci8vLyBlbGVtZW50IGlzIGBudWxsYC4KY29uc3QgU3Bhbm5hYmxlIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUgPQogICAgY29uc3QgX1NwYW5uYWJsZVNlbnRpbmVsKCJDdXJyZW50IGVsZW1lbnQiKTsKCi8vLyBTZW50aW5lbCBzcGFubmFibGUgdXNlZCB0byBtYXJrIHRoYXQgdGhlcmUgbWlnaHQgYmUgbm8gbG9jYXRpb24gZm9yIHRoZQovLy8gZGlhZ25vc3RpYy4gVXNlIHRoaXMgb25seSB3aGVuIGl0IGlzIG5vdCBhbiBlcnJvciBub3QgdG8gaGF2ZSBhIGN1cnJlbnQKLy8vIGVsZW1lbnQuCmNvbnN0IFNwYW5uYWJsZSBOT19MT0NBVElPTl9TUEFOTkFCTEUgPSBjb25zdCBfU3Bhbm5hYmxlU2VudGluZWwoIk5vIGxvY2F0aW9uIik7CgpjbGFzcyBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlIHsKICBmaW5hbCBTcGFubmFibGUgbm9kZTsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlKHRoaXMubm9kZSwgdGhpcy5tZXNzYWdlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0Fzc2VydGlvbiBmYWlsdXJlJwogICAgICAnJHttZXNzYWdlICE9IG51bGwgPyAnOiAkbWVzc2FnZScgOiAnJ30nOwp9CioATk48AScBTCwgHAEwFQEnAQwdAgFJURcsMQFMTA1RASIYGDYBDCswAgEvcGFja2FnZTpjb21waWxlci9zcmMvZGlhZ25vc3RpY3Mvc3Bhbm5hYmxlLmRhcnQyc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGVscGVycy9oZWxwZXJzLmRhcnSQvi8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTGlicmFyeSBmb3IgZGVidWdnaW5nIGhlbHBlcnMuIFRoZSB1bml0dGVzdCBhbmFseXplX3VudXNlZF90ZXN0IGNoZWNrcyB0aGF0Ci8vLyB0aGUgaGVscGVyIGFyZSBub3QgdXNlZCBpbiBwcm9kdWN0aW9uIGNvZGUuCgpsaWJyYXJ5IGRhcnQyanMuaGVscGVyczsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2RpYWdub3N0aWNzL2ludmFyaWFudC5kYXJ0JyBzaG93IERFQlVHX01PREU7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ3RyYWNlLmRhcnQnOwoKZXhwb3J0ICdkZWJ1Z19jb2xsZWN0aW9uLmRhcnQnOwpleHBvcnQgJ2V4cGVuc2l2ZV9tYXAuZGFydCc7CmV4cG9ydCAnZXhwZW5zaXZlX3NldC5kYXJ0JzsKZXhwb3J0ICdzdGF0cy5kYXJ0JzsKZXhwb3J0ICd0cmFjZS5kYXJ0JzsKZXhwb3J0ICd0cmFja19tYXAuZGFydCc7CgovLy8gR2xvYmFsIGZsYWcgdG8gZW5hYmxlIFtkZWJ1Z1ByaW50XS4gVGhpcyBzaG91bGQgYWx3YXlzIGJlIGB0cnVlYCBieSBkZWZhdWx0Ci8vLyBhbmQgYmUgc2V0IHRvIGBmYWxzZWAgYXMgYSBtZWFucyB0byB0ZW1wb3JhcmlseSB0dXJuIG9mZiBhbGwgZGVidWdnaW5nCi8vLyBwcmludG91dHMuCmNvbnN0IGJvb2wgREVCVUdfUFJJTlRfRU5BQkxFRCA9IHRydWU7CgovLy8gRW5hYmxlcyBkZWJ1ZyBtb2RlLgovLy8KLy8vIFNldHMgdGhlIFtERUJVR19NT0RFXSB0byBgdHJ1ZWAuCnZvaWQgZW5hYmxlRGVidWdNb2RlKCkgewogIERFQlVHX01PREUgPSB0cnVlOwp9CgpjbGFzcyBfRGVidWdJbmRlbnRhdGlvbiBleHRlbmRzIEluZGVudGF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgaW5kZW50YXRpb25Vbml0ID0gIiAiOwp9CgpfRGVidWdJbmRlbnRhdGlvbiBfaW5kZW50YXRpb24gPSBuZXcgX0RlYnVnSW5kZW50YXRpb24oKTsKCi8vLyBGdW5jdGlvbiBzaWduYXR1cmUgb2YgW2RlYnVnUHJpbnRdLgp0eXBlZGVmIERlYnVnUHJpbnQocyk7CgovLy8gSWYgW0RFQlVHX1BSSU5UX0VOQUJMRURdIGlzIGB0cnVlYCBwcmludCBbc10gdXNpbmcgdGhlIGN1cnJlbnQgaW5kZW50YXRpb24uCkRlYnVnUHJpbnQgZ2V0IGRlYnVnUHJpbnQgewogIGVuYWJsZURlYnVnTW9kZSgpOwogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIGRpc2FibGUgZGVidWcgbW9kZSBhZnRlciB0aGUgY2FsbC4KICByZXR1cm4gX2RlYnVnUHJpbnQ7Cn0KCi8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbZGVidWdQcmludF0uCl9kZWJ1Z1ByaW50KHMpIHsKICBpZiAoREVCVUdfUFJJTlRfRU5BQkxFRCkgcHJpbnQoJyR7X2luZGVudGF0aW9uLmluZGVudGF0aW9ufSRzJyk7Cn0KCi8vLyBGdW5jdGlvbiBzaWduYXR1cmUgb2YgW2RlYnVnV3JhcFByaW50XS4KdHlwZWRlZiBEZWJ1Z1dyYXBQcmludChzLCBmKCkpOwoKLy8vIFdyYXBzIHRoZSBjYWxsIHRvIFtmXSB3aXRoIGEgcHJpbnQgb2YgJ3N0YXJ0OiRzJyBhbmQgJ2VuZDokcycgaW5jcmVtZW50aW5nCi8vLyB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiB1c2VkIGJ5IFtkZWJ1Z1ByaW50XSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBbZl0uCi8vLwovLy8gVXNlIHRoaXMgdG8gZ2V0IGEgdHJlZS1saWtlIGRlYnVnIHByaW50b3V0IGZvciBuZXN0ZWQgY2FsbHMuCkRlYnVnV3JhcFByaW50IGdldCBkZWJ1Z1dyYXBQcmludCB7CiAgZW5hYmxlRGVidWdNb2RlKCk7CiAgcmV0dXJuIF9kZWJ1Z1dyYXBQcmludDsKfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtkZWJ1Z1dyYXBQcmludF0uCl9kZWJ1Z1dyYXBQcmludChzLCBmKCkpIHsKICBkZWJ1Z1ByaW50KCdzdGFydDokcycpOwogIHZhciByZXN1bHQgPSBfaW5kZW50YXRpb24uaW5kZW50QmxvY2soZik7CiAgZGVidWdQcmludCgnZW5kOiRzJyk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8vIER1bW15IG1ldGhvZCB0byBtYXJrIGJyZWFrcG9pbnRzLgpkZWJ1Z0JyZWFrKCkgewogIGVuYWJsZURlYnVnTW9kZSgpOwp9CgovLy8gRnVuY3Rpb24gc2lnbmF0dXJlIG9mIFtyZXBvcnRIZXJlXS4KdHlwZWRlZiBSZXBvcnRIZXJlKAogICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLCBTcGFubmFibGUgbm9kZSwgU3RyaW5nIGRlYnVnTWVzc2FnZSk7CgovLy8gUHJpbnQgYSBtZXNzYWdlIHdpdGggYSBzb3VyY2UgbG9jYXRpb24uClJlcG9ydEhlcmUgZ2V0IHJlcG9ydEhlcmUgewogIGVuYWJsZURlYnVnTW9kZSgpOwogIHJldHVybiBfcmVwb3J0SGVyZTsKfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtyZXBvcnRIZXJlXQpfcmVwb3J0SGVyZShEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIFNwYW5uYWJsZSBub2RlLCBTdHJpbmcgZGVidWdNZXNzYWdlKSB7CiAgcmVwb3J0ZXIKICAgICAgLnJlcG9ydEluZm8obm9kZSwgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogJ0hFUkU6ICRkZWJ1Z01lc3NhZ2UnfSk7Cn0KCi8vLyBTZXQgb2YgdHJhY2tlZCBvYmplY3RzIHVzZWQgYnkgW3RyYWNrXSBhbmQgW2lmVHJhY2tlZF0uCnZhciBfdHJhY2tlZE9iamVjdHMgPSBuZXcgU2V0PE9iamVjdD4oKTsKCi8vLyBHbG9iYWwgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGBwcmludFRyYWNlYCBvcHRpb24gb2YgW3RyYWNrXSBhbmQgW2lmVHJhY2tlZF0uCmJvb2wgdHJhY2tXaXRoVHJhY2UgPSBmYWxzZTsKCi8vLyBJZiBbZG9UcmFja10gaXMgYHRydWVgLCBhZGQgW29iamVjdF0gdG8gdGhlIHNldCBvZiB0cmFja2VkIG9iamVjdHMuCi8vLwovLy8gSWYgdHJhY2tlZCwgW21lc3NhZ2VdIGlzIHByaW50ZWQgYWxvbmcgdGhlIGhhc2ggY29kZSBhbmQgdG9TdHJpbmcgb2YKLy8vIFtvYmplY3RdLiBJZiBbcHJpbnRUcmFjZV0gaXMgYHRydWVgIGEgdHJhY2UgcHJpbnRlZCBhZGRpdGlvbmFsbHkuCi8vLyBJZiBbcHJpbnRUcmFjZV0gaXMgYG51bGxgLCBbdHJhY2tXaXRoVHJhY2VdIGRldGVybWluZXMgd2hldGhlciBhIHRyYWNlIGlzCi8vLyBwcmludGVkLgovLy8KLy8vIFtvYmplY3RdIGlzIHJldHVybmVkIGFzIHRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZC4KdHJhY2soYm9vbCBkb1RyYWNrLCBPYmplY3Qgb2JqZWN0LCBTdHJpbmcgbWVzc2FnZSwge2Jvb2wgcHJpbnRUcmFjZX0pIHsKICBpZiAoIWRvVHJhY2spIHJldHVybiBvYmplY3Q7CiAgX3RyYWNrZWRPYmplY3RzLmFkZChvYmplY3QpOwogIFN0cmluZyBtc2cgPSAndHJhY2s6ICR7b2JqZWN0Lmhhc2hDb2RlfTokb2JqZWN0OiRtZXNzYWdlJzsKICBpZiAocHJpbnRUcmFjZSA9PSBudWxsKSBwcmludFRyYWNlID0gdHJhY2tXaXRoVHJhY2U7CiAgaWYgKHByaW50VHJhY2UpIHsKICAgIHRyYWNlKG1zZyk7CiAgfSBlbHNlIHsKICAgIGRlYnVnUHJpbnQobXNnKTsKICB9CiAgcmV0dXJuIG9iamVjdDsKfQoKLy8vIFJldHVybnMgYHRydWVgIGlmIFtvYmplY3RdIGlzIGluIHRoZSBzZXQgb2YgdHJhY2tlZCBvYmplY3RzLgovLy8KLy8vIElmIFttZXNzYWdlXSBpcyBwcm92aWRlZCBpdCBpcyBwcmludGVkIGFsb25nIHRoZSBoYXNoIGNvZGUgYW5kIHRvU3RyaW5nIG9mCi8vLyBbb2JqZWN0XS4gSWYgW3ByaW50VHJhY2VdIGlzIGB0cnVlYCBhIHRyYWNlIHByaW50ZWQgYWRkaXRpb25hbGx5LiBJZgovLy8gW3ByaW50VHJhY2VdIGlzIGBudWxsYCwgW3RyYWNrV2l0aFRyYWNlXSBkZXRlcm1pbmVzIHdoZXRoZXIgYSB0cmFjZSBpcwovLy8gcHJpbnRlZC4KYm9vbCBpZlRyYWNrZWQoT2JqZWN0IG9iamVjdCwge1N0cmluZyBtZXNzYWdlLCBib29sIHByaW50VHJhY2V9KSB7CiAgaWYgKF90cmFja2VkT2JqZWN0cy5jb250YWlucyhvYmplY3QpKSB7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIFN0cmluZyBtc2cgPSAndHJhY2tlZDogJHtvYmplY3QuaGFzaENvZGV9OiRvYmplY3Q6JG1lc3NhZ2UnOwogICAgICBpZiAocHJpbnRUcmFjZSA9PSBudWxsKSBwcmludFRyYWNlID0gdHJhY2tXaXRoVHJhY2U7CiAgICAgIGlmIChwcmludFRyYWNlKSB7CiAgICAgICAgdHJhY2UobXNnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWJ1Z1ByaW50KG1zZyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KgJIATk48AVAwARkBGTgcFQEgHR0VFRkBUEsPJwEYBCUZFQIBLgwmAgE6ASgXAVAcFUMWAgEkEUMCASwgAU9OBEEkFRoCASgaGiwYEQIBJg8VAgEoFEcBLBwVFgIBI1ALTwIBPCkBUR0BSARJRk4NBDZIHx89NxQQCxUEEQIBQQRPSUsNQyobQzsYFA8ZCAYRBBACASlwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL2hlbHBlcnMuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9iYWNrZW5kX3N0cmF0ZWd5LmRhcnSMzS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuYmFja2VuZF9zdHJhdGVneTsKCmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi90YXNrcy5kYXJ0JzsKaW1wb3J0ICdkZWZlcnJlZF9sb2FkLmRhcnQnIHNob3cgT3V0cHV0VW5pdERhdGE7CmltcG9ydCAnZW5xdWV1ZS5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICdpby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnOwppbXBvcnQgJ2pzX2JhY2tlbmQvZW5xdWV1ZXIuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJ2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCc7CmltcG9ydCAnc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJ3NzYS9zc2EuZGFydCc7CmltcG9ydCAndW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3dvcmxkLmRhcnQnOwoKLy8vIFN0cmF0ZWd5IHBhdHRlcm4gdGhhdCBkZWZpbmVzIHRoZSBlbGVtZW50IG1vZGVsIHVzZWQgaW4gdHlwZSBpbmZlcmVuY2UKLy8vIGFuZCBjb2RlIGdlbmVyYXRpb24uCmFic3RyYWN0IGNsYXNzIEJhY2tlbmRTdHJhdGVneSB7CiAgTGlzdDxDb21waWxlclRhc2s+IGdldCB0YXNrczsKCiAgRnVuY3Rpb25Db21waWxlciBnZXQgZnVuY3Rpb25Db21waWxlcjsKCiAgQ29kZUVtaXR0ZXJUYXNrIGdldCBlbWl0dGVyVGFzazsKCiAgLy8vIENyZWF0ZSB0aGUgW0pDbG9zZWRXb3JsZF0gZnJvbSBbY2xvc2VkV29ybGRdLgogIEpDbG9zZWRXb3JsZCBjcmVhdGVKQ2xvc2VkV29ybGQoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgT3V0cHV0VW5pdERhdGEgb3V0cHV0VW5pdERhdGEpOwoKICAvLy8gUmVnaXN0ZXJzIFtjbG9zZWRXb3JsZF0gYXMgdGhlIGN1cnJlbnQgY2xvc2VkIHdvcmxkIHVzZWQgYnkgdGhpcyBiYWNrZW5kCiAgLy8vIHN0cmF0ZWd5LgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCBzZXJpYWxpemF0aW9uIGFmdGVyIHR5cGUgaW5mZXJlbmNlLgogIHZvaWQgcmVnaXN0ZXJKQ2xvc2VkV29ybGQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIENhbGxlZCB3aGVuIHRoZSBjb21waWxlciBzdGFydHMgcnVubmluZyB0aGUgY29kZWdlbi4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgW0NvZGVnZW5JbnB1dHNdIG9iamVjdHMgd2l0aCB0aGUgbmVlZGVkIGRhdGEuCiAgQ29kZWdlbklucHV0cyBvbkNvZGVnZW5TdGFydCgKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMpOwoKICAvLy8gQ3JlYXRlcyBhbiBbRW5xdWV1ZXJdIGZvciBjb2RlIGdlbmVyYXRpb24gc3BlY2lmaWMgdG8gdGhpcyBiYWNrZW5kLgogIENvZGVnZW5FbnF1ZXVlciBjcmVhdGVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyVGFzayB0YXNrLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMpOwoKICAvLy8gQ2FsbGVkIHdoZW4gY29kZSBnZW5lcmF0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZC4KICB2b2lkIG9uQ29kZWdlbkVuZChDb2RlZ2VuSW5wdXRzIGNvZGVnZW4pOwoKICAvLy8gQ3JlYXRlcyB0aGUgW1NzYUJ1aWxkZXJdIHVzZWQgZm9yIHRoZSBlbGVtZW50IG1vZGVsLgogIFNzYUJ1aWxkZXIgY3JlYXRlU3NhQnVpbGRlcigKICAgICAgQ29tcGlsZXJUYXNrIHRhc2ssIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSk7CgogIC8vLyBDcmVhdGVzIGEgW1NvdXJjZVNwYW5dIGZyb20gW3NwYW5uYWJsZV0gaW4gY29udGV4dCBvZiBbY3VycmVudEVsZW1lbnRdLgogIFNvdXJjZVNwYW4gc3BhbkZyb21TcGFubmFibGUoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgRW50aXR5IGN1cnJlbnRFbGVtZW50KTsKCiAgLy8vIENyZWF0ZXMgdGhlIFtUeXBlc0luZmVycmVyXSB1c2VkIGJ5IHRoaXMgc3RyYXRlZ3kuCiAgVHlwZXNJbmZlcnJlciBjcmVhdGVUeXBlc0luZmVycmVyKAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIEluZmVycmVkRGF0YUJ1aWxkZXIgaW5mZXJyZWREYXRhQnVpbGRlcik7CgogIC8vLyBDYWxscyBbZl0gZm9yIGV2ZXJ5IG1lbWJlciB0aGF0IG5lZWRzIHRvIGJlIHNlcmlhbGl6ZWQgZm9yIG1vZHVsYXIgY29kZQogIC8vLyBnZW5lcmF0aW9uIGFuZCByZXR1cm5zIGFuIFtFbnRpdHlXcml0ZXJdIGZvciBlbmNvZGluZyB0aGVzZSBtZW1iZXJzIGluCiAgLy8vIHRoZSBzZXJpYWxpemVkIGRhdGEuCiAgLy8vCiAgLy8vIFRoZSBuZWVkZWQgbWVtYmVycyBpbmNsdWRlIG1lbWJlcnMgY29tcHV0ZWQgb24gZGVtYW5kIGR1cmluZyBub24tbW9kdWxhcgogIC8vLyBjb2RlIGdlbmVyYXRpb24sIHN1Y2ggYXMgY29uc3RydWN0b3IgYm9kaWVzIGFuZCBhbmQgZ2VuZXJhdG9yIGJvZGllcy4KICBFbnRpdHlXcml0ZXIgZm9yRWFjaENvZGVnZW5NZW1iZXIodm9pZCBGdW5jdGlvbihNZW1iZXJFbnRpdHkgbWVtYmVyKSBmKTsKCiAgLy8vIFByZXBhcmUgW3NvdXJjZV0gdG8gZGVzZXJpYWxpemUgbW9kdWxhciBjb2RlIGdlbmVyYXRpb24gZGF0YS4KICB2b2lkIHByZXBhcmVDb2RlZ2VuUmVhZGVyKERhdGFTb3VyY2Ugc291cmNlKTsKCiAgLy8vIEdlbmVyYXRlcyB0aGUgb3V0cHV0IGFuZCByZXR1cm5zIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgY29kZS4KICBpbnQgYXNzZW1ibGVQcm9ncmFtKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgSW5mZXJyZWREYXRhIGluZmVycmVkRGF0YSwKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzLCBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkKTsKfQpXAE5OPAEiARYeHDEXIR4lIiMoLCsXLhUBSxkhIAEpASMBNCNAAU8QBkI3ATsGQCA+AUopGSA5HSYBNiwBOx9PAU5MATklSgFOTRsGT0xLAUQwAU1LPwIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL2JhY2tlbmRfc3RyYXRlZ3kuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb24vY29kZWdlbi5kYXJ0wAEQFy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29tbW9uLmNvZGVnZW47CgppbXBvcnQgJ3BhY2thZ2U6anNfYXN0L3NyYy9wcmVjZWRlbmNlLmRhcnQnIGFzIGpzIHNob3cgUFJJTUFSWTsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCcgc2hvdyBEYXJ0VHlwZSwgSW50ZXJmYWNlVHlwZTsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBFbWl0dGVyOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vc3NhL3NzYS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IENvbnN0YW50VXNlLCBEeW5hbWljVXNlLCBTdGF0aWNVc2UsIFR5cGVVc2U7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsLCBXb3JsZEltcGFjdFZpc2l0b3I7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKCmNsYXNzIENvZGVnZW5JbXBhY3QgZXh0ZW5kcyBXb3JsZEltcGFjdCB7CiAgY29uc3QgQ29kZWdlbkltcGFjdCgpOwoKICBmYWN0b3J5IENvZGVnZW5JbXBhY3QucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSA9CiAgICAgIF9Db2RlZ2VuSW1wYWN0LnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0NvZGVnZW5JbXBhY3Qud3JpdGVUb0RhdGFTaW5rJyk7CiAgfQoKICBJdGVyYWJsZTxQYWlyPERhcnRUeXBlLCBEYXJ0VHlwZT4+IGdldCB0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzIHsKICAgIHJldHVybiBjb25zdCA8UGFpcjxEYXJ0VHlwZSwgRGFydFR5cGU+PltdOwogIH0KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgY29uc3RTeW1ib2xzID0+IGNvbnN0IDxTdHJpbmc+W107CgogIEl0ZXJhYmxlPFNldDxDbGFzc0VudGl0eT4+IGdldCBzcGVjaWFsaXplZEdldEludGVyY2VwdG9ycyB7CiAgICByZXR1cm4gY29uc3QgPFNldDxDbGFzc0VudGl0eT4+W107CiAgfQoKICBib29sIGdldCB1c2VzSW50ZXJjZXB0b3IgPT4gZmFsc2U7CgogIEl0ZXJhYmxlPEFzeW5jTWFya2VyPiBnZXQgYXN5bmNNYXJrZXJzID0+IGNvbnN0IDxBc3luY01hcmtlcj5bXTsKCiAgSXRlcmFibGU8R2VuZXJpY0luc3RhbnRpYXRpb24+IGdldCBnZW5lcmljSW5zdGFudGlhdGlvbnMgPT4KICAgICAgY29uc3QgPEdlbmVyaWNJbnN0YW50aWF0aW9uPltdOwoKICBJdGVyYWJsZTxOYXRpdmVCZWhhdmlvcj4gZ2V0IG5hdGl2ZUJlaGF2aW9ycyA9PiBjb25zdCBbXTsKCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBuYXRpdmVNZXRob2RzID0+IGNvbnN0IFtdOwoKICBJdGVyYWJsZTxTZWxlY3Rvcj4gZ2V0IG9uZVNob3RJbnRlcmNlcHRvcnMgPT4gY29uc3QgW107Cn0KCmNsYXNzIF9Db2RlZ2VuSW1wYWN0IGV4dGVuZHMgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBsZW1lbnRzIENvZGVnZW5JbXBhY3QgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvZGVnZW4taW1wYWN0JzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlcjsKICBTZXQ8UGFpcjxEYXJ0VHlwZSwgRGFydFR5cGU+PiBfdHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrczsKICBTZXQ8U3RyaW5nPiBfY29uc3RTeW1ib2xzOwogIExpc3Q8U2V0PENsYXNzRW50aXR5Pj4gX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzOwogIGJvb2wgX3VzZXNJbnRlcmNlcHRvciA9IGZhbHNlOwogIEVudW1TZXQ8QXN5bmNNYXJrZXI+IF9hc3luY01hcmtlcnM7CiAgU2V0PEdlbmVyaWNJbnN0YW50aWF0aW9uPiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zOwogIExpc3Q8TmF0aXZlQmVoYXZpb3I+IF9uYXRpdmVCZWhhdmlvcnM7CiAgU2V0PEZ1bmN0aW9uRW50aXR5PiBfbmF0aXZlTWV0aG9kczsKICBTZXQ8U2VsZWN0b3I+IF9vbmVTaG90SW50ZXJjZXB0b3JzOwoKICBfQ29kZWdlbkltcGFjdCh0aGlzLm1lbWJlcik7CgogIF9Db2RlZ2VuSW1wYWN0LmludGVybmFsKAogICAgICB0aGlzLm1lbWJlciwKICAgICAgU2V0PER5bmFtaWNVc2U+IGR5bmFtaWNVc2VzLAogICAgICBTZXQ8U3RhdGljVXNlPiBzdGF0aWNVc2VzLAogICAgICBTZXQ8VHlwZVVzZT4gdHlwZVVzZXMsCiAgICAgIFNldDxDb25zdGFudFVzZT4gY29uc3RhbnRVc2VzLAogICAgICB0aGlzLl90eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzLAogICAgICB0aGlzLl9jb25zdFN5bWJvbHMsCiAgICAgIHRoaXMuX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzLAogICAgICB0aGlzLl91c2VzSW50ZXJjZXB0b3IsCiAgICAgIHRoaXMuX2FzeW5jTWFya2VycywKICAgICAgdGhpcy5fZ2VuZXJpY0luc3RhbnRpYXRpb25zLAogICAgICB0aGlzLl9uYXRpdmVCZWhhdmlvcnMsCiAgICAgIHRoaXMuX25hdGl2ZU1ldGhvZHMsCiAgICAgIHRoaXMuX29uZVNob3RJbnRlcmNlcHRvcnMpCiAgICAgIDogc3VwZXIuaW50ZXJuYWwoZHluYW1pY1VzZXMsIHN0YXRpY1VzZXMsIHR5cGVVc2VzLCBjb25zdGFudFVzZXMpOwoKICBmYWN0b3J5IF9Db2RlZ2VuSW1wYWN0LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgIFNldDxEeW5hbWljVXNlPiBkeW5hbWljVXNlcyA9IHNvdXJjZQogICAgICAgIC5yZWFkTGlzdCgoKSA9PiBEeW5hbWljVXNlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSkKICAgICAgICA/LnRvU2V0KCk7CiAgICBTZXQ8U3RhdGljVXNlPiBzdGF0aWNVc2VzID0gc291cmNlCiAgICAgICAgLnJlYWRMaXN0KCgpID0+IFN0YXRpY1VzZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSwgZW1wdHlBc051bGw6IHRydWUpCiAgICAgICAgPy50b1NldCgpOwogICAgU2V0PFR5cGVVc2U+IHR5cGVVc2VzID0gc291cmNlCiAgICAgICAgLnJlYWRMaXN0KCgpID0+IFR5cGVVc2UucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSksIGVtcHR5QXNOdWxsOiB0cnVlKQogICAgICAgID8udG9TZXQoKTsKICAgIFNldDxDb25zdGFudFVzZT4gY29uc3RhbnRVc2VzID0gc291cmNlCiAgICAgICAgLnJlYWRMaXN0KCgpID0+IENvbnN0YW50VXNlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSkKICAgICAgICA/LnRvU2V0KCk7CiAgICBTZXQ8UGFpcjxEYXJ0VHlwZSwgRGFydFR5cGU+PiB0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzID0KICAgICAgICBzb3VyY2UucmVhZExpc3QoKCkgewogICAgICByZXR1cm4gbmV3IFBhaXIoc291cmNlLnJlYWREYXJ0VHlwZSgpLCBzb3VyY2UucmVhZERhcnRUeXBlKCkpOwogICAgfSwgZW1wdHlBc051bGw6IHRydWUpPy50b1NldCgpOwogICAgU2V0PFN0cmluZz4gY29uc3RTeW1ib2xzID0gc291cmNlLnJlYWRTdHJpbmdzKGVtcHR5QXNOdWxsOiB0cnVlKT8udG9TZXQoKTsKICAgIExpc3Q8U2V0PENsYXNzRW50aXR5Pj4gc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMgPSBzb3VyY2UucmVhZExpc3QoKCkgewogICAgICByZXR1cm4gc291cmNlLnJlYWRDbGFzc2VzKCkudG9TZXQoKTsKICAgIH0sIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIGJvb2wgdXNlc0ludGVyY2VwdG9yID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpbnQgYXN5bmNNYXJrZXJzVmFsdWUgPSBzb3VyY2UucmVhZEludE9yTnVsbCgpOwogICAgRW51bVNldDxBc3luY01hcmtlcj4gYXN5bmNNYXJrZXJzID0gYXN5bmNNYXJrZXJzVmFsdWUgIT0gbnVsbAogICAgICAgID8gbmV3IEVudW1TZXQuZnJvbVZhbHVlKGFzeW5jTWFya2Vyc1ZhbHVlKQogICAgICAgIDogbnVsbDsKICAgIFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4gZ2VuZXJpY0luc3RhbnRpYXRpb25zID0gc291cmNlCiAgICAgICAgLnJlYWRMaXN0KCgpID0+IEdlbmVyaWNJbnN0YW50aWF0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSkKICAgICAgICA/LnRvU2V0KCk7CiAgICBMaXN0PE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVCZWhhdmlvcnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gTmF0aXZlQmVoYXZpb3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBuYXRpdmVNZXRob2RzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KGVtcHR5QXNOdWxsOiB0cnVlKT8udG9TZXQoKTsKICAgIFNldDxTZWxlY3Rvcj4gb25lU2hvdEludGVyY2VwdG9ycyA9IHNvdXJjZQogICAgICAgIC5yZWFkTGlzdCgoKSA9PiBTZWxlY3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSwgZW1wdHlBc051bGw6IHRydWUpCiAgICAgICAgPy50b1NldCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfQ29kZWdlbkltcGFjdC5pbnRlcm5hbCgKICAgICAgICBtZW1iZXIsCiAgICAgICAgZHluYW1pY1VzZXMsCiAgICAgICAgc3RhdGljVXNlcywKICAgICAgICB0eXBlVXNlcywKICAgICAgICBjb25zdGFudFVzZXMsCiAgICAgICAgdHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrcywKICAgICAgICBjb25zdFN5bWJvbHMsCiAgICAgICAgc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMsCiAgICAgICAgdXNlc0ludGVyY2VwdG9yLAogICAgICAgIGFzeW5jTWFya2VycywKICAgICAgICBnZW5lcmljSW5zdGFudGlhdGlvbnMsCiAgICAgICAgbmF0aXZlQmVoYXZpb3JzLAogICAgICAgIG5hdGl2ZU1ldGhvZHMsCiAgICAgICAgb25lU2hvdEludGVyY2VwdG9ycyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyKG1lbWJlcik7CiAgICBzaW5rLndyaXRlTGlzdChkeW5hbWljVXNlcywgKER5bmFtaWNVc2UgdXNlKSA9PiB1c2Uud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChzdGF0aWNVc2VzLCAoU3RhdGljVXNlIHVzZSkgPT4gdXNlLndyaXRlVG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QodHlwZVVzZXMsIChUeXBlVXNlIHVzZSkgPT4gdXNlLndyaXRlVG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoY29uc3RhbnRVc2VzLCAoQ29uc3RhbnRVc2UgdXNlKSA9PiB1c2Uud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdDxQYWlyPERhcnRUeXBlLCBEYXJ0VHlwZT4+KF90eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzLAogICAgICAgIChwYWlyKSB7CiAgICAgIHNpbmsud3JpdGVEYXJ0VHlwZShwYWlyLmEpOwogICAgICBzaW5rLndyaXRlRGFydFR5cGUocGFpci5iKTsKICAgIH0sIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlU3RyaW5ncyhfY29uc3RTeW1ib2xzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzLCBzaW5rLndyaXRlQ2xhc3NlcywKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUJvb2woX3VzZXNJbnRlcmNlcHRvcik7CiAgICBzaW5rLndyaXRlSW50T3JOdWxsKF9hc3luY01hcmtlcnM/LnZhbHVlKTsKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMsCiAgICAgICAgKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24pID0+CiAgICAgICAgICAgIGluc3RhbnRpYXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfbmF0aXZlQmVoYXZpb3JzLAogICAgICAgIChOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgPT4gYmVoYXZpb3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhfbmF0aXZlTWV0aG9kcywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9vbmVTaG90SW50ZXJjZXB0b3JzLAogICAgICAgIChTZWxlY3RvciBzZWxlY3RvcikgPT4gc2VsZWN0b3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseShXb3JsZEltcGFjdFZpc2l0b3IgdmlzaXRvcikgewogICAgc3RhdGljVXNlcy5mb3JFYWNoKChTdGF0aWNVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0U3RhdGljVXNlKG1lbWJlciwgdXNlKSk7CiAgICBkeW5hbWljVXNlcy5mb3JFYWNoKChEeW5hbWljVXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdER5bmFtaWNVc2UpOwogICAgdHlwZVVzZXMuZm9yRWFjaCgoVHlwZVVzZSB1c2UpID0+IHZpc2l0b3IudmlzaXRUeXBlVXNlKG1lbWJlciwgdXNlKSk7CiAgICBjb25zdGFudFVzZXMKICAgICAgICAuZm9yRWFjaCgoQ29uc3RhbnRVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0Q29uc3RhbnRVc2UobWVtYmVyLCB1c2UpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2soCiAgICAgIERhcnRUeXBlIHN1YnR5cGUsIERhcnRUeXBlIHN1cGVydHlwZSkgewogICAgX3R5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3MgPz89IHt9OwogICAgX3R5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3MKICAgICAgICAuYWRkKG5ldyBQYWlyPERhcnRUeXBlLCBEYXJ0VHlwZT4oc3VidHlwZSwgc3VwZXJ0eXBlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxQYWlyPERhcnRUeXBlLCBEYXJ0VHlwZT4+IGdldCB0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzIHsKICAgIHJldHVybiBfdHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrcyAhPSBudWxsCiAgICAgICAgPyBfdHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrcwogICAgICAgIDogY29uc3QgPFBhaXI8RGFydFR5cGUsIERhcnRUeXBlPj5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdFN5bWJvbChTdHJpbmcgbmFtZSkgewogICAgX2NvbnN0U3ltYm9scyA/Pz0ge307CiAgICBfY29uc3RTeW1ib2xzLmFkZChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGNvbnN0U3ltYm9scyB7CiAgICByZXR1cm4gX2NvbnN0U3ltYm9scyAhPSBudWxsID8gX2NvbnN0U3ltYm9scyA6IGNvbnN0IDxTdHJpbmc+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcihTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIF9zcGVjaWFsaXplZEdldEludGVyY2VwdG9ycyA/Pz0gPFNldDxDbGFzc0VudGl0eT4+W107CiAgICBfc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMuYWRkKGNsYXNzZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U2V0PENsYXNzRW50aXR5Pj4gZ2V0IHNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzIHsKICAgIHJldHVybiBfc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMgIT0gbnVsbAogICAgICAgID8gX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzCiAgICAgICAgOiBjb25zdCA8U2V0PENsYXNzRW50aXR5Pj5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJVc2VJbnRlcmNlcHRvcigpIHsKICAgIF91c2VzSW50ZXJjZXB0b3IgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdXNlc0ludGVyY2VwdG9yID0+IF91c2VzSW50ZXJjZXB0b3I7CgogIHZvaWQgcmVnaXN0ZXJBc3luY01hcmtlcihBc3luY01hcmtlciBhc3luY01hcmtlcikgewogICAgX2FzeW5jTWFya2VycyA/Pz0gbmV3IEVudW1TZXQ8QXN5bmNNYXJrZXI+KCk7CiAgICBfYXN5bmNNYXJrZXJzLmFkZChhc3luY01hcmtlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxBc3luY01hcmtlcj4gZ2V0IGFzeW5jTWFya2VycyB7CiAgICByZXR1cm4gX2FzeW5jTWFya2VycyAhPSBudWxsCiAgICAgICAgPyBfYXN5bmNNYXJrZXJzLml0ZXJhYmxlKEFzeW5jTWFya2VyLnZhbHVlcykKICAgICAgICA6IGNvbnN0IDxBc3luY01hcmtlcj5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbihHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uKSB7CiAgICBfZ2VuZXJpY0luc3RhbnRpYXRpb25zID8/PSB7fTsKICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMuYWRkKGluc3RhbnRpYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8R2VuZXJpY0luc3RhbnRpYXRpb24+IGdldCBnZW5lcmljSW5zdGFudGlhdGlvbnMgewogICAgcmV0dXJuIF9nZW5lcmljSW5zdGFudGlhdGlvbnMgPz8gY29uc3QgPEdlbmVyaWNJbnN0YW50aWF0aW9uPltdOwogIH0KCiAgdm9pZCByZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yKSB7CiAgICBfbmF0aXZlQmVoYXZpb3JzID8/PSBbXTsKICAgIF9uYXRpdmVCZWhhdmlvcnMuYWRkKG5hdGl2ZUJlaGF2aW9yKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE5hdGl2ZUJlaGF2aW9yPiBnZXQgbmF0aXZlQmVoYXZpb3JzIHsKICAgIHJldHVybiBfbmF0aXZlQmVoYXZpb3JzID8/IGNvbnN0IDxOYXRpdmVCZWhhdmlvcj5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJOYXRpdmVNZXRob2QoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIF9uYXRpdmVNZXRob2RzID8/PSB7fTsKICAgIF9uYXRpdmVNZXRob2RzLmFkZChmdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IG5hdGl2ZU1ldGhvZHMgewogICAgcmV0dXJuIF9uYXRpdmVNZXRob2RzID8/IGNvbnN0IFtdOwogIH0KCiAgdm9pZCByZWdpc3Rlck9uZVNob3RJbnRlcmNlcHRvcihTZWxlY3RvciBzZWxlY3RvcikgewogICAgX29uZVNob3RJbnRlcmNlcHRvcnMgPz89IHt9OwogICAgX29uZVNob3RJbnRlcmNlcHRvcnMuYWRkKHNlbGVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFNlbGVjdG9yPiBnZXQgb25lU2hvdEludGVyY2VwdG9ycyB7CiAgICByZXR1cm4gX29uZVNob3RJbnRlcmNlcHRvcnMgPz8gY29uc3QgW107CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnQ29kZWdlbkltcGFjdDonKTsKICAgIFdvcmxkSW1wYWN0LnByaW50T24oc2IsIHRoaXMpOwoKICAgIHZvaWQgYWRkKFN0cmluZyB0aXRsZSwgSXRlcmFibGUgaXRlcmFibGUpIHsKICAgICAgaWYgKGl0ZXJhYmxlLmlzTm90RW1wdHkpIHsKICAgICAgICBzYi53cml0ZSgnXG4gJHRpdGxlOicpOwogICAgICAgIGl0ZXJhYmxlLmZvckVhY2goKGUpID0+IHNiLndyaXRlKCdcbiAgJGUnKSk7CiAgICAgIH0KICAgIH0KCiAgICBhZGQoJ3R5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3MnLCB0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzKTsKICAgIGFkZCgnY29uc3RTeW1ib2xzJywgY29uc3RTeW1ib2xzKTsKICAgIGFkZCgnc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMnLCBzcGVjaWFsaXplZEdldEludGVyY2VwdG9ycyk7CiAgICBpZiAodXNlc0ludGVyY2VwdG9yKSB7CiAgICAgIHNiLndyaXRlKCdcbiB1c2VzSW50ZXJjZXB0b3I6IHRydWUnKTsKICAgIH0KICAgIGFkZCgnYXN5bmNNYXJrZXJzJywgYXN5bmNNYXJrZXJzKTsKICAgIGFkZCgnZ2VuZXJpY0luc3RhbnRpYXRpb25zJywgZ2VuZXJpY0luc3RhbnRpYXRpb25zKTsKICAgIGFkZCgnbmF0aXZlQmVoYXZpb3JzJywgbmF0aXZlQmVoYXZpb3JzKTsKICAgIGFkZCgnbmF0aXZlTWV0aG9kcycsIG5hdGl2ZU1ldGhvZHMpOwogICAgYWRkKCdvbmVTaG90SW50ZXJjZXB0b3JzJywgb25lU2hvdEludGVyY2VwdG9ycyk7CgogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTcGxpdCB0aGlzIGNsYXNzIGludG8gaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbi4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogTW92ZSB0aGlzIGltcGxlbWVudGF0aW9uIHRvIHRoZSBKUyBiYWNrZW5kLgpjbGFzcyBDb2RlZ2VuUmVnaXN0cnkgewogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIE1lbWJlckVudGl0eSBfY3VycmVudEVsZW1lbnQ7CiAgZmluYWwgX0NvZGVnZW5JbXBhY3QgX3dvcmxkSW1wYWN0OwogIExpc3Q8TW9kdWxhck5hbWU+IF9uYW1lczsKICBMaXN0PE1vZHVsYXJFeHByZXNzaW9uPiBfZXhwcmVzc2lvbnM7CgogIENvZGVnZW5SZWdpc3RyeSh0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsIHRoaXMuX2N1cnJlbnRFbGVtZW50KQogICAgICA6IHRoaXMuX3dvcmxkSW1wYWN0ID0gbmV3IF9Db2RlZ2VuSW1wYWN0KF9jdXJyZW50RWxlbWVudCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdDb2RlZ2VuUmVnaXN0cnkgZm9yICRfY3VycmVudEVsZW1lbnQnOwoKICBAZGVwcmVjYXRlZAogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGVsZW1lbnQpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKHN0YXRpY1VzZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1VzZShEeW5hbWljVXNlIGR5bmFtaWNVc2UpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3RlckR5bmFtaWNVc2UoZHluYW1pY1VzZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyVHlwZVVzZShUeXBlVXNlIHR5cGVVc2UpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3RlclR5cGVVc2UodHlwZVVzZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3RlckNvbnN0YW50VXNlKGNvbnN0YW50VXNlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2soCiAgICAgIERhcnRUeXBlIHN1YnR5cGUsIERhcnRUeXBlIHN1cGVydHlwZSkgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyVHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVySW5zdGFudGlhdGVkQ2xvc3VyZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBfd29ybGRJbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5jYWxsTWV0aG9kKGVsZW1lbnQpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdFN5bWJvbChTdHJpbmcgbmFtZSkgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyQ29uc3RTeW1ib2wobmFtZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcihTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3RlclNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3IoY2xhc3Nlcyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyT25lU2hvdEludGVyY2VwdG9yKFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICBfd29ybGRJbXBhY3QucmVnaXN0ZXJPbmVTaG90SW50ZXJjZXB0b3Ioc2VsZWN0b3IpOwogIH0KCiAgdm9pZCByZWdpc3RlclVzZUludGVyY2VwdG9yKCkgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyVXNlSW50ZXJjZXB0b3IoKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgcmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24odHlwZSkpOwogIH0KCiAgdm9pZCByZWdpc3RlckFzeW5jTWFya2VyKEFzeW5jTWFya2VyIGFzeW5jTWFya2VyKSB7CiAgICBfd29ybGRJbXBhY3QucmVnaXN0ZXJBc3luY01hcmtlcihhc3luY01hcmtlcik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbikgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oaW5zdGFudGlhdGlvbik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTmF0aXZlQmVoYXZpb3IoTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJOYXRpdmVNZXRob2QoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3Rlck5hdGl2ZU1ldGhvZChmdW5jdGlvbik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTW9kdWxhck5hbWUoTW9kdWxhck5hbWUgbmFtZSkgewogICAgX25hbWVzID8/PSBbXTsKICAgIF9uYW1lcy5hZGQobmFtZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTW9kdWxhckV4cHJlc3Npb24oTW9kdWxhckV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgX2V4cHJlc3Npb25zID8/PSBbXTsKICAgIF9leHByZXNzaW9ucy5hZGQoZXhwcmVzc2lvbik7CiAgfQoKICBDb2RlZ2VuUmVzdWx0IGNsb3NlKGpzLkZ1biBjb2RlKSB7CiAgICByZXR1cm4gbmV3IENvZGVnZW5SZXN1bHQoCiAgICAgICAgY29kZSwgX3dvcmxkSW1wYWN0LCBfbmFtZXMgPz8gY29uc3QgW10sIF9leHByZXNzaW9ucyA/PyBjb25zdCBbXSk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciByZWFkaW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcmVzdWx0cyBmb3IgYWxsIFtNZW1iZXJFbnRpdHldcy4KYWJzdHJhY3QgY2xhc3MgQ29kZWdlblJlc3VsdHMgewogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdldCBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0czsKICBDb2RlZ2VuSW5wdXRzIGdldCBjb2RlZ2VuSW5wdXRzOwogIENvZGVnZW5SZXN1bHQgZ2V0Q29kZWdlblJlc3VsdHMoTWVtYmVyRW50aXR5IG1lbWJlcik7Cn0KCi8vLyBDb2RlIGdlbmVyYXRpb24gcmVzdWx0cyBjb21wdXRlZCBvbi1kZW1hbmQuCi8vLwovLy8gVGhpcyBpcyB1c2VkIGluIHRoZSBub24tbW9kdWxhciBjb2RlZ2VuIGVucXVldWVyIGRyaXZpbmcgY29kZSBnZW5lcmF0aW9uLgpjbGFzcyBPbkRlbWFuZENvZGVnZW5SZXN1bHRzIGV4dGVuZHMgQ29kZWdlblJlc3VsdHMgewogIEBvdmVycmlkZQogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzOwogIEBvdmVycmlkZQogIGZpbmFsIENvZGVnZW5JbnB1dHMgY29kZWdlbklucHV0czsKICBmaW5hbCBTc2FGdW5jdGlvbkNvbXBpbGVyIF9mdW5jdGlvbkNvbXBpbGVyOwoKICBPbkRlbWFuZENvZGVnZW5SZXN1bHRzKHRoaXMuZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMsIHRoaXMuY29kZWdlbklucHV0cywKICAgICAgdGhpcy5fZnVuY3Rpb25Db21waWxlcik7CgogIEBvdmVycmlkZQogIENvZGVnZW5SZXN1bHQgZ2V0Q29kZWdlblJlc3VsdHMoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9mdW5jdGlvbkNvbXBpbGVyLmNvbXBpbGUobWVtYmVyKTsKICB9Cn0KCi8vLyBEZXNlcmlhbGl6ZWQgY29kZSBnZW5lcmF0aW9uIHJlc3VsdHMuCi8vLwovLy8gVGhpcyBpcyB1c2VkIGZvciBtb2R1bGFyIGNvZGUgZ2VuZXJhdGlvbi4KY2xhc3MgRGVzZXJpYWxpemVkQ29kZWdlblJlc3VsdHMgZXh0ZW5kcyBDb2RlZ2VuUmVzdWx0cyB7CiAgQG92ZXJyaWRlCiAgZmluYWwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHM7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzOwoKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBDb2RlZ2VuUmVzdWx0PiBfbWFwOwoKICBEZXNlcmlhbGl6ZWRDb2RlZ2VuUmVzdWx0cygKICAgICAgdGhpcy5nbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywgdGhpcy5jb2RlZ2VuSW5wdXRzLCB0aGlzLl9tYXApOwoKICBAb3ZlcnJpZGUKICBDb2RlZ2VuUmVzdWx0IGdldENvZGVnZW5SZXN1bHRzKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIENvZGVnZW5SZXN1bHQgcmVzdWx0ID0gX21hcFttZW1iZXJdOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIGZhaWxlZEF0KG1lbWJlciwKICAgICAgICAgICJObyBjb2RlZ2VuIHJlc3VsdHMgZnJvbSAkbWVtYmVyICgke2lkZW50aXR5SGFzaENvZGUobWVtYmVyKX0pLiIpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8vLyBUaGUgY29kZSBnZW5lcmF0aW9uIHJlc3VsdCBmb3IgYSBzaW5nbGUgW01lbWJlckVudGl0eV0uCmNsYXNzIENvZGVnZW5SZXN1bHQgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvZGVnZW4tcmVzdWx0JzsKCiAgZmluYWwganMuRnVuIGNvZGU7CiAgZmluYWwgQ29kZWdlbkltcGFjdCBpbXBhY3Q7CiAgZmluYWwgSXRlcmFibGU8TW9kdWxhck5hbWU+IG1vZHVsYXJOYW1lczsKICBmaW5hbCBJdGVyYWJsZTxNb2R1bGFyRXhwcmVzc2lvbj4gbW9kdWxhckV4cHJlc3Npb25zOwoKICBDb2RlZ2VuUmVzdWx0KAogICAgICB0aGlzLmNvZGUsIHRoaXMuaW1wYWN0LCB0aGlzLm1vZHVsYXJOYW1lcywgdGhpcy5tb2R1bGFyRXhwcmVzc2lvbnMpOwoKICAvLy8gUmVhZHMgYSBbQ29kZWdlblJlc3VsdF0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgLy8vCiAgLy8vIFRoZSBbTW9kdWxhck5hbWVdIGFuZCBbTW9kdWxhckV4cHJlc3Npb25dIG5vZGVzIHJlYWQgZHVyaW5nCiAgLy8vIGRlc2VyaWFsaXphdGlvbiBhcmUgY29sbGVjdGVkIGluIFttb2R1bGFyTmFtZXNdIGFuZCBbbW9kdWxhckV4cHJlc3Npb25zXQogIC8vLyB0byBhdm9pZCB0aGUgbmVlZCBmb3IgdmlzaXRpbmcgdGhlIFtjb2RlXSBub2RlIHBvc3QgZGVzZXJpYWxpemF0aW9uLgogIGZhY3RvcnkgQ29kZWdlblJlc3VsdC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLAogICAgICBMaXN0PE1vZHVsYXJOYW1lPiBtb2R1bGFyTmFtZXMsCiAgICAgIExpc3Q8TW9kdWxhckV4cHJlc3Npb24+IG1vZHVsYXJFeHByZXNzaW9ucykgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBqcy5GdW4gY29kZSA9IHNvdXJjZS5yZWFkSnNOb2RlT3JOdWxsKCk7CiAgICBDb2RlZ2VuSW1wYWN0IGltcGFjdCA9IENvZGVnZW5JbXBhY3QucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENvZGVnZW5SZXN1bHQoY29kZSwgaW1wYWN0LCBtb2R1bGFyTmFtZXMsIG1vZHVsYXJFeHByZXNzaW9ucyk7CiAgfQoKICAvLy8gV3JpdGVzIHRoZSBbQ29kZWdlblJlc3VsdF0gb2JqZWN0IHRvIFtzaW5rXS4KICAvLy8KICAvLy8gVGhlIFttb2R1bGFyTmFtZXNdIGFuZCBbbW9kdWxhckV4cHJlc3Npb25zXSBmaWVsZHMgYXJlIG5vdCBkaXJlY3RseQogIC8vLyBzZXJpYWxpemVzIGJlY2F1c2UgdGhlc2UgYXJlIGVtYmVkZGVkIGluIHRoZSBbY29kZV0gbm9kZSBhbmQgY29sbGVjdGVkCiAgLy8vIHRocm91Z2ggdGhpcyBkdXJpbmcgZGVzZXJpYWxpemF0aW9uLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVKc05vZGVPck51bGwoY29kZSk7CiAgICBpbXBhY3Qud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIHZvaWQgYXBwbHlNb2R1bGFyU3RhdGUoTmFtZXIgbmFtZXIsIEVtaXR0ZXIgZW1pdHRlcikgewogICAgZm9yIChNb2R1bGFyTmFtZSBuYW1lIGluIG1vZHVsYXJOYW1lcykgewogICAgICBzd2l0Y2ggKG5hbWUua2luZCkgewogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnJ0aUZpZWxkOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLnJ0aUZpZWxkSnNOYW1lOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQucnVudGltZVR5cGVOYW1lOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLnJ1bnRpbWVUeXBlTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuY2xhc3NOYW1lOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmNsYXNzTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuYWxpYXNlZFN1cGVyTWVtYmVyOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmFsaWFzZWRTdXBlck1lbWJlclByb3BlcnR5TmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuc3RhdGljQ2xvc3VyZToKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5zdGF0aWNDbG9zdXJlTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubWV0aG9kUHJvcGVydHk6CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIubWV0aG9kUHJvcGVydHlOYW1lKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLm9wZXJhdG9ySXMobmFtZS5kYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm9wZXJhdG9ySXNUeXBlOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLm9wZXJhdG9ySXNUeXBlKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5zdWJzdGl0dXRpb246CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIuc3Vic3RpdHV0aW9uTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuaW5zdGFuY2VNZXRob2Q6CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIuaW5zdGFuY2VNZXRob2ROYW1lKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5pbnN0YW5jZUZpZWxkOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUobmFtZS5kYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmludm9jYXRpb246CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIuaW52b2NhdGlvbk5hbWUobmFtZS5kYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmxhenlJbml0aWFsaXplcjoKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5sYXp5SW5pdGlhbGl6ZXJOYW1lKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzczoKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzcyhuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsUHJvcGVydHlOYW1lRm9yVHlwZToKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXI6CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIuZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGUobmFtZS5kYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm5hbWVGb3JHZXRJbnRlcmNlcHRvcjoKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5uYW1lRm9yR2V0SW50ZXJjZXB0b3IobmFtZS5zZXQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubmFtZUZvck9uZVNob3RJbnRlcmNlcHRvcjoKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5uYW1lRm9yT25lU2hvdEludGVyY2VwdG9yKG5hbWUuZGF0YSwgbmFtZS5zZXQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuYXNOYW1lOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmFzTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGZvciAoTW9kdWxhckV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBtb2R1bGFyRXhwcmVzc2lvbnMpIHsKICAgICAgc3dpdGNoIChleHByZXNzaW9uLmtpbmQpIHsKICAgICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5OgogICAgICAgICAgZXhwcmVzc2lvbi52YWx1ZSA9IG5hbWVyCiAgICAgICAgICAgICAgLnJlYWRHbG9iYWxPYmplY3RGb3JMaWJyYXJ5KGV4cHJlc3Npb24uZGF0YSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGV4cHJlc3Npb24uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yQ2xhc3M6CiAgICAgICAgICBleHByZXNzaW9uLnZhbHVlID0gbmFtZXIKICAgICAgICAgICAgICAucmVhZEdsb2JhbE9iamVjdEZvckNsYXNzKGV4cHJlc3Npb24uZGF0YSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGV4cHJlc3Npb24uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yVHlwZToKICAgICAgICAgIGV4cHJlc3Npb24udmFsdWUgPSBuYW1lcgogICAgICAgICAgICAgIC5yZWFkR2xvYmFsT2JqZWN0Rm9yVHlwZShleHByZXNzaW9uLmRhdGEpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvck1lbWJlcjoKICAgICAgICAgIGV4cHJlc3Npb24udmFsdWUgPSBuYW1lcgogICAgICAgICAgICAgIC5yZWFkR2xvYmFsT2JqZWN0Rm9yTWVtYmVyKGV4cHJlc3Npb24uZGF0YSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGV4cHJlc3Npb24uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuY29uc3RhbnQ6CiAgICAgICAgICBleHByZXNzaW9uLnZhbHVlID0gZW1pdHRlcgogICAgICAgICAgICAgIC5jb25zdGFudFJlZmVyZW5jZShleHByZXNzaW9uLmRhdGEpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmVtYmVkZGVkR2xvYmFsQWNjZXNzOgogICAgICAgICAgZXhwcmVzc2lvbi52YWx1ZSA9IGVtaXR0ZXIKICAgICAgICAgICAgICAuZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhleHByZXNzaW9uLmRhdGEpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnQ29kZWdlblJlc3VsdChjb2RlPScpOwogICAgc2Iud3JpdGUoY29kZSAhPSBudWxsID8ganMuRGVidWdQcmludChjb2RlKSA6ICc8bnVsbD4sJyk7CiAgICBzYi53cml0ZSgnaW1wYWN0PSRpbXBhY3QsJyk7CiAgICBzYi53cml0ZSgnbW9kdWxhck5hbWVzPSRtb2R1bGFyTmFtZXMsJyk7CiAgICBzYi53cml0ZSgnbW9kdWxhckV4cHJlc3Npb25zPSRtb2R1bGFyRXhwcmVzc2lvbnMnKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmVudW0gTW9kdWxhck5hbWVLaW5kIHsKICBydGlGaWVsZCwKICBydW50aW1lVHlwZU5hbWUsCiAgY2xhc3NOYW1lLAogIGFsaWFzZWRTdXBlck1lbWJlciwKICBzdGF0aWNDbG9zdXJlLAogIG1ldGhvZFByb3BlcnR5LAogIG9wZXJhdG9ySXMsCiAgb3BlcmF0b3JJc1R5cGUsCiAgc3Vic3RpdHV0aW9uLAogIGluc3RhbmNlTWV0aG9kLAogIGluc3RhbmNlRmllbGQsCiAgaW52b2NhdGlvbiwKICBsYXp5SW5pdGlhbGl6ZXIsCiAgZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3MsCiAgZ2xvYmFsUHJvcGVydHlOYW1lRm9yVHlwZSwKICBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXIsCiAgZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZSwKICBuYW1lRm9yR2V0SW50ZXJjZXB0b3IsCiAgbmFtZUZvck9uZVNob3RJbnRlcmNlcHRvciwKICBhc05hbWUsCn0KCmNsYXNzIE1vZHVsYXJOYW1lIGV4dGVuZHMganMuTmFtZSBpbXBsZW1lbnRzIGpzLkFzdENvbnRhaW5lciB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnbW9kdWxhci1uYW1lJzsKCiAgZmluYWwgTW9kdWxhck5hbWVLaW5kIGtpbmQ7CiAganMuTmFtZSBfdmFsdWU7CiAgZmluYWwgT2JqZWN0IGRhdGE7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBzZXQ7CgogIE1vZHVsYXJOYW1lKHRoaXMua2luZCwge3RoaXMuZGF0YSwgdGhpcy5zZXR9KTsKCiAgZmFjdG9yeSBNb2R1bGFyTmFtZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTW9kdWxhck5hbWVLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oTW9kdWxhck5hbWVLaW5kLnZhbHVlcyk7CiAgICBPYmplY3QgZGF0YTsKICAgIFNldDxDbGFzc0VudGl0eT4gc2V0OwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnJ0aUZpZWxkOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5ydW50aW1lVHlwZU5hbWU6CiAgICAgICAgYm9vbCBkYXRhSXNDbGFzc0VudGl0eSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICAgIGlmIChkYXRhSXNDbGFzc0VudGl0eSkgewogICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkVHlwZWRlZigpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuY2xhc3NOYW1lOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5zdWJzdGl0dXRpb246CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmdsb2JhbFByb3BlcnR5TmFtZUZvckNsYXNzOgogICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmFsaWFzZWRTdXBlck1lbWJlcjoKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuc3RhdGljQ2xvc3VyZToKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubWV0aG9kUHJvcGVydHk6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmluc3RhbmNlRmllbGQ6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmluc3RhbmNlTWV0aG9kOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5sYXp5SW5pdGlhbGl6ZXI6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmdsb2JhbFByb3BlcnR5TmFtZUZvck1lbWJlcjoKICAgICAgICBkYXRhID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQub3BlcmF0b3JJc1R5cGU6CiAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkRGFydFR5cGUoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuaW52b2NhdGlvbjoKICAgICAgICBkYXRhID0gU2VsZWN0b3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGU6CiAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkVHlwZVZhcmlhYmxlKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm5hbWVGb3JHZXRJbnRlcmNlcHRvcjoKICAgICAgICBzZXQgPSBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5uYW1lRm9yT25lU2hvdEludGVyY2VwdG9yOgogICAgICAgIGRhdGEgPSBTZWxlY3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgICBzZXQgPSBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5hc05hbWU6CiAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IE1vZHVsYXJOYW1lKGtpbmQsIGRhdGE6IGRhdGEsIHNldDogc2V0KTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVFbnVtKGtpbmQpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnJ0aUZpZWxkOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5ydW50aW1lVHlwZU5hbWU6CiAgICAgICAgc2luay53cml0ZUJvb2woZGF0YSBpcyBDbGFzc0VudGl0eSk7CiAgICAgICAgaWYgKGRhdGEgaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICAgIHNpbmsud3JpdGVDbGFzcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2luay53cml0ZVR5cGVkZWYoZGF0YSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5jbGFzc05hbWU6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm9wZXJhdG9ySXM6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnN1YnN0aXR1dGlvbjoKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3M6CiAgICAgICAgc2luay53cml0ZUNsYXNzKGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5hbGlhc2VkU3VwZXJNZW1iZXI6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnN0YXRpY0Nsb3N1cmU6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm1ldGhvZFByb3BlcnR5OgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5pbnN0YW5jZUZpZWxkOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5pbnN0YW5jZU1ldGhvZDoKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubGF6eUluaXRpYWxpemVyOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXI6CiAgICAgICAgc2luay53cml0ZU1lbWJlcihkYXRhKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQub3BlcmF0b3JJc1R5cGU6CiAgICAgICAgc2luay53cml0ZURhcnRUeXBlKGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5pbnZvY2F0aW9uOgogICAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZGF0YTsKICAgICAgICBzZWxlY3Rvci53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGU6CiAgICAgICAgVHlwZVZhcmlhYmxlRW50aXR5IHR5cGVWYXJpYWJsZSA9IGRhdGE7CiAgICAgICAgc2luay53cml0ZVR5cGVWYXJpYWJsZSh0eXBlVmFyaWFibGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5uYW1lRm9yR2V0SW50ZXJjZXB0b3I6CiAgICAgICAgc2luay53cml0ZUNsYXNzZXMoc2V0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubmFtZUZvck9uZVNob3RJbnRlcmNlcHRvcjoKICAgICAgICBTZWxlY3RvciBzZWxlY3RvciA9IGRhdGE7CiAgICAgICAgc2VsZWN0b3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgICAgIHNpbmsud3JpdGVDbGFzc2VzKHNldCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmFzTmFtZToKICAgICAgICBzaW5rLndyaXRlU3RyaW5nKGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgc2luay5lbmQodGFnKTsKICB9CgogIGpzLk5hbWUgZ2V0IHZhbHVlIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCwgJ3ZhbHVlIG5vdCBzZXQgZm9yICR0aGlzJyk7CiAgICByZXR1cm4gX3ZhbHVlOwogIH0KCiAgdm9pZCBzZXQgdmFsdWUoanMuTmFtZSBub2RlKSB7CiAgICBhc3NlcnQoX3ZhbHVlID09IG51bGwpOwogICAgYXNzZXJ0KG5vZGUgIT0gbnVsbCk7CiAgICBfdmFsdWUgPSBub2RlLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGtleSB7CiAgICBhc3NlcnQoX3ZhbHVlICE9IG51bGwpOwogICAgcmV0dXJuIF92YWx1ZS5rZXk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgewogICAgYXNzZXJ0KF92YWx1ZSAhPSBudWxsLCAndmFsdWUgbm90IHNldCBmb3IgJHRoaXMnKTsKICAgIHJldHVybiBfdmFsdWUubmFtZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGFsbG93UmVuYW1lIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCwgJ3ZhbHVlIG5vdCBzZXQgZm9yICR0aGlzJyk7CiAgICByZXR1cm4gX3ZhbHVlLmFsbG93UmVuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVUbyhqcy5OYW1lIG90aGVyKSB7CiAgICBhc3NlcnQoX3ZhbHVlICE9IG51bGwsICd2YWx1ZSBub3Qgc2V0IGZvciAkdGhpcycpOwogICAgcmV0dXJuIF92YWx1ZS5jb21wYXJlVG8ob3RoZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8anMuTm9kZT4gZ2V0IGNvbnRhaW5lZE5vZGVzIHsKICAgIHJldHVybiBfdmFsdWUgIT0gbnVsbCA/IFtfdmFsdWVdIDogY29uc3QgW107CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBIYXNoaW5nLnNldEhhc2goc2V0LCBIYXNoaW5nLm9iamVjdHNIYXNoKGtpbmQsIGRhdGEpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgTW9kdWxhck5hbWUgJiYKICAgICAgICBraW5kID09IG90aGVyLmtpbmQgJiYKICAgICAgICBkYXRhID09IG90aGVyLmRhdGEgJiYKICAgICAgICBlcXVhbFNldHMoc2V0LCBvdGhlci5zZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ01vZHVsYXJOYW1lKGtpbmQ9JGtpbmQsIGRhdGE9JGRhdGEsIHZhbHVlPSR7X3ZhbHVlPy5rZXl9KSc7Cn0KCmVudW0gTW9kdWxhckV4cHJlc3Npb25LaW5kIHsKICBnbG9iYWxPYmplY3RGb3JMaWJyYXJ5LAogIGdsb2JhbE9iamVjdEZvckNsYXNzLAogIGdsb2JhbE9iamVjdEZvclR5cGUsCiAgZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyLAogIGNvbnN0YW50LAogIGVtYmVkZGVkR2xvYmFsQWNjZXNzLAp9CgpjbGFzcyBNb2R1bGFyRXhwcmVzc2lvbiBleHRlbmRzIGpzLkRlZmVycmVkRXhwcmVzc2lvbgogICAgaW1wbGVtZW50cyBqcy5Bc3RDb250YWluZXIgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ21vZHVsYXItZXhwcmVzc2lvbic7CgogIGZpbmFsIE1vZHVsYXJFeHByZXNzaW9uS2luZCBraW5kOwogIGZpbmFsIE9iamVjdCBkYXRhOwogIGpzLkV4cHJlc3Npb24gX3ZhbHVlOwoKICBNb2R1bGFyRXhwcmVzc2lvbih0aGlzLmtpbmQsIHRoaXMuZGF0YSk7CgogIGZhY3RvcnkgTW9kdWxhckV4cHJlc3Npb24ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1vZHVsYXJFeHByZXNzaW9uS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKE1vZHVsYXJFeHByZXNzaW9uS2luZC52YWx1ZXMpOwogICAgT2JqZWN0IGRhdGE7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeToKICAgICAgICBkYXRhID0gc291cmNlLnJlYWRMaWJyYXJ5KCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvckNsYXNzOgogICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvclR5cGU6CiAgICAgICAgYm9vbCBkYXRhSXNDbGFzc0VudGl0eSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICAgIGlmIChkYXRhSXNDbGFzc0VudGl0eSkgewogICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkVHlwZWRlZigpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyOgogICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZE1lbWJlcigpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5jb25zdGFudDoKICAgICAgICBkYXRhID0gc291cmNlLnJlYWRDb25zdGFudCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5lbWJlZGRlZEdsb2JhbEFjY2VzczoKICAgICAgICBkYXRhID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgTW9kdWxhckV4cHJlc3Npb24oa2luZCwgZGF0YSk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5OgogICAgICAgIHNpbmsud3JpdGVMaWJyYXJ5KGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JDbGFzczoKICAgICAgICBzaW5rLndyaXRlQ2xhc3MoZGF0YSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvclR5cGU6CiAgICAgICAgc2luay53cml0ZUJvb2woZGF0YSBpcyBDbGFzc0VudGl0eSk7CiAgICAgICAgaWYgKGRhdGEgaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICAgIHNpbmsud3JpdGVDbGFzcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2luay53cml0ZVR5cGVkZWYoZGF0YSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JNZW1iZXI6CiAgICAgICAgc2luay53cml0ZU1lbWJlcihkYXRhKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuY29uc3RhbnQ6CiAgICAgICAgc2luay53cml0ZUNvbnN0YW50KGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5lbWJlZGRlZEdsb2JhbEFjY2VzczoKICAgICAgICBzaW5rLndyaXRlU3RyaW5nKGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gZ2V0IHZhbHVlIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCk7CiAgICByZXR1cm4gX3ZhbHVlOwogIH0KCiAgdm9pZCBzZXQgdmFsdWUoanMuRXhwcmVzc2lvbiBub2RlKSB7CiAgICBhc3NlcnQoX3ZhbHVlID09IG51bGwpOwogICAgYXNzZXJ0KG5vZGUgIT0gbnVsbCk7CiAgICBfdmFsdWUgPSBub2RlLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiBfdmFsdWU/LnByZWNlZGVuY2VMZXZlbCA/PyBqcy5QUklNQVJZOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxqcy5Ob2RlPiBnZXQgY29udGFpbmVkTm9kZXMgewogICAgcmV0dXJuIF92YWx1ZSAhPSBudWxsID8gW192YWx1ZV0gOiBjb25zdCBbXTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIEhhc2hpbmcub2JqZWN0c0hhc2goa2luZCwgZGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIE1vZHVsYXJFeHByZXNzaW9uICYmCiAgICAgICAga2luZCA9PSBvdGhlci5raW5kICYmCiAgICAgICAgZGF0YSA9PSBvdGhlci5kYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ01vZHVsYXJFeHByZXNzaW9uKGtpbmQ9JGtpbmQsZGF0YT0nKTsKICAgIGlmIChkYXRhIGlzIENvbnN0YW50VmFsdWUpIHsKICAgICAgc2Iud3JpdGUoKGRhdGEgYXMgQ29uc3RhbnRWYWx1ZSkudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKGRhdGEpOwogICAgfQogICAgc2Iud3JpdGUoJyx2YWx1ZT0kX3ZhbHVlKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgplbnVtIEpzTm9kZUtpbmQgewogIGNvbW1lbnQsCiAgYXdhaXQsCiAgcmVnRXhwTGl0ZXJhbCwKICBwcm9wZXJ0eSwKICBvYmplY3RJbml0aWFsaXplciwKICBhcnJheUhvbGUsCiAgYXJyYXlJbml0aWFsaXplciwKICBwYXJlbnRoZXNlcywKICBtb2R1bGFyTmFtZSwKICBhc3luY05hbWUsCiAgc3RyaW5nQmFja2VkTmFtZSwKICBzdHJpbmdDb25jYXRlbmF0aW9uLAogIGxpdGVyYWxOdWxsLAogIGxpdGVyYWxOdW1iZXIsCiAgbGl0ZXJhbFN0cmluZywKICBsaXRlcmFsU3RyaW5nRnJvbU5hbWUsCiAgbGl0ZXJhbEJvb2wsCiAgbW9kdWxhckV4cHJlc3Npb24sCiAgZnVuY3Rpb24sCiAgbmFtZWRGdW5jdGlvbiwKICBhY2Nlc3MsCiAgcGFyYW1ldGVyLAogIHZhcmlhYmxlRGVjbGFyYXRpb24sCiAgdGhpc0V4cHJlc3Npb24sCiAgdmFyaWFibGVVc2UsCiAgcG9zdGZpeCwKICBwcmVmaXgsCiAgYmluYXJ5LAogIGNhbGxFeHByZXNzaW9uLAogIG5ld0V4cHJlc3Npb24sCiAgY29uZGl0aW9uYWwsCiAgdmFyaWFibGVJbml0aWFsaXphdGlvbiwKICBhc3NpZ25tZW50LAogIHZhcmlhYmxlRGVjbGFyYXRpb25MaXN0LAogIGxpdGVyYWxFeHByZXNzaW9uLAogIGRhcnRZaWVsZCwKICBsaXRlcmFsU3RhdGVtZW50LAogIGxhYmVsZWRTdGF0ZW1lbnQsCiAgZnVuY3Rpb25EZWNsYXJhdGlvbiwKICBzd2l0Y2hEZWZhdWx0LAogIHN3aXRjaENhc2UsCiAgc3dpdGNoU3RhdGVtZW50LAogIGNhdGNoQ2xhdXNlLAogIHRyeVN0YXRlbWVudCwKICB0aHJvd1N0YXRlbWVudCwKICByZXR1cm5TdGF0ZW1lbnQsCiAgYnJlYWtTdGF0ZW1lbnQsCiAgY29udGludWVTdGF0ZW1lbnQsCiAgZG9TdGF0ZW1lbnQsCiAgd2hpbGVTdGF0ZW1lbnQsCiAgZm9ySW5TdGF0ZW1lbnQsCiAgZm9yU3RhdGVtZW50LAogIGlmU3RhdGVtZW50LAogIGVtcHR5U3RhdGVtZW50LAogIGV4cHJlc3Npb25TdGF0ZW1lbnQsCiAgYmxvY2ssCiAgcHJvZ3JhbSwKfQoKLy8vIFRhZ3MgdXNlZCBmb3IgZGVidWdnaW5nIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGJvdW5kYXJ5IG1pc21hdGNoZXMuCmNsYXNzIEpzTm9kZVRhZ3MgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2pzLW5vZGUnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY29tbWVudCA9ICdqcy1jb21tZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGF3YWl0ID0gJ2pzLWF3YWl0JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHJlZ0V4cExpdGVyYWwgPSAnanMtcmVnRXhwTGl0ZXJhbCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwcm9wZXJ0eSA9ICdqcy1wcm9wZXJ0eSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBvYmplY3RJbml0aWFsaXplciA9ICdqcy1vYmplY3RJbml0aWFsaXplcic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhcnJheUhvbGUgPSAnanMtYXJyYXlIb2xlJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGFycmF5SW5pdGlhbGl6ZXIgPSAnanMtYXJyYXlJbml0aWFsaXplcic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwYXJlbnRoZXNlcyA9ICdqcy1wYXJlbnRoZXNlcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBtb2R1bGFyTmFtZSA9ICdqcy1tb2R1bGFyTmFtZSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhc3luY05hbWUgPSAnanMtYXN5bmNOYW1lJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0cmluZ0JhY2tlZE5hbWUgPSAnanMtc3RyaW5nQmFja2VkTmFtZSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdHJpbmdDb25jYXRlbmF0aW9uID0gJ2pzLXN0cmluZ0NvbmNhdGVuYXRpb24nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGl0ZXJhbE51bGwgPSAnanMtbGl0ZXJhbE51bGwnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGl0ZXJhbE51bWJlciA9ICdqcy1saXRlcmFsTnVtYmVyJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGxpdGVyYWxTdHJpbmcgPSAnanMtbGl0ZXJhbFN0cmluZyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBsaXRlcmFsU3RyaW5nRnJvbU5hbWUgPSAnanMtbGl0ZXJhbFN0cmluZ0Zyb21OYW1lJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGxpdGVyYWxCb29sID0gJ2pzLWxpdGVyYWxCb29sJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG1vZHVsYXJFeHByZXNzaW9uID0gJ2pzLW1vZHVsYXJFeHByZXNzaW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGZ1bmN0aW9uID0gJ2pzLWZ1bmN0aW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5hbWVkRnVuY3Rpb24gPSAnanMtbmFtZWRGdW5jdGlvbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhY2Nlc3MgPSAnanMtYWNjZXNzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHBhcmFtZXRlciA9ICdqcy1wYXJhbWV0ZXInOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdmFyaWFibGVEZWNsYXJhdGlvbiA9ICdqcy12YXJpYWJsZURlY2xhcmF0aW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRoaXNFeHByZXNzaW9uID0gJ2pzLXRoaXNFeHByZXNzaW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHZhcmlhYmxlVXNlID0gJ2pzLXZhcmlhYmxlVXNlJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHBvc3RmaXggPSAnanMtcG9zdGZpeCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwcmVmaXggPSAnanMtcHJlZml4JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGJpbmFyeSA9ICdqcy1iaW5hcnknOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY2FsbEV4cHJlc3Npb24gPSAnanMtY2FsbEV4cHJlc3Npb24nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbmV3RXhwcmVzc2lvbiA9ICdqcy1uZXdFeHByZXNzaW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNvbmRpdGlvbmFsID0gJ2pzLWNvbmRpdGlvbmFsJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHZhcmlhYmxlSW5pdGlhbGl6YXRpb24gPSAnanMtdmFyaWFibGVJbml0aWFsaXphdGlvbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhc3NpZ25tZW50ID0gJ2pzLWFzc2lnbm1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgPSAnanMtdmFyaWFibGVEZWNsYXJhdGlvbkxpc3QnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGl0ZXJhbEV4cHJlc3Npb24gPSAnanMtbGl0ZXJhbEV4cHJlc3Npb24nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGFydFlpZWxkID0gJ2pzLWRhcnRZaWVsZCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBsaXRlcmFsU3RhdGVtZW50ID0gJ2pzLWxpdGVyYWxTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGFiZWxlZFN0YXRlbWVudCA9ICdqcy1sYWJlbGVkU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGZ1bmN0aW9uRGVjbGFyYXRpb24gPSAnanMtZnVuY3Rpb25EZWNsYXJhdGlvbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzd2l0Y2hEZWZhdWx0ID0gJ2pzLXN3aXRjaERlZmF1bHQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3dpdGNoQ2FzZSA9ICdqcy1zd2l0Y2hDYXNlJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHN3aXRjaFN0YXRlbWVudCA9ICdqcy1zd2l0Y2hTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY2F0Y2hDbGF1c2UgPSAnanMtY2F0Y2hDbGF1c2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHJ5U3RhdGVtZW50ID0gJ2pzLXRyeVN0YXRlbWVudCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0aHJvd1N0YXRlbWVudCA9ICdqcy10aHJvd1N0YXRlbWVudCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyByZXR1cm5TdGF0ZW1lbnQgPSAnanMtcmV0dXJuU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGJyZWFrU3RhdGVtZW50ID0gJ2pzLWJyZWFrU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNvbnRpbnVlU3RhdGVtZW50ID0gJ2pzLWNvbnRpbnVlU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGRvU3RhdGVtZW50ID0gJ2pzLWRvU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHdoaWxlU3RhdGVtZW50ID0gJ2pzLXdoaWxlU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGZvckluU3RhdGVtZW50ID0gJ2pzLWZvckluU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGZvclN0YXRlbWVudCA9ICdqcy1mb3JTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgaWZTdGF0ZW1lbnQgPSAnanMtaWZTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZW1wdHlTdGF0ZW1lbnQgPSAnanMtZW1wdHlTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZXhwcmVzc2lvblN0YXRlbWVudCA9ICdqcy1leHByZXNzaW9uU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGJsb2NrID0gJ2pzLWJsb2NrJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHByb2dyYW0gPSAnanMtcHJvZ3JhbSc7Cn0KCi8vLyBWaXNpdG9yIHRoYXQgc2VyaWFsaXplcyBhIFtqcy5Ob2RlXSBpbnRvIGEgW0RhdGFTaW5rXS4KY2xhc3MgSnNOb2RlU2VyaWFsaXplciBpbXBsZW1lbnRzIGpzLk5vZGVWaXNpdG9yPHZvaWQ+IHsKICBmaW5hbCBEYXRhU2luayBzaW5rOwoKICBKc05vZGVTZXJpYWxpemVyLl8odGhpcy5zaW5rKTsKCiAgc3RhdGljIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGpzLk5vZGUgbm9kZSkgewogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnRhZyk7CiAgICBKc05vZGVTZXJpYWxpemVyIHNlcmlhbGl6ZXIgPSBuZXcgSnNOb2RlU2VyaWFsaXplci5fKHNpbmspOwogICAgc2VyaWFsaXplci52aXNpdChub2RlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudGFnKTsKICB9CgogIHZvaWQgdmlzaXQoanMuTm9kZSBub2RlLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKGFsbG93TnVsbCkgewogICAgICBzaW5rLndyaXRlQm9vbChub2RlICE9IG51bGwpOwogICAgICBpZiAobm9kZSAhPSBudWxsKSB7CiAgICAgICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdExpc3QoSXRlcmFibGU8anMuTm9kZT4gbm9kZXMpIHsKICAgIHNpbmsud3JpdGVMaXN0KG5vZGVzLCB2aXNpdCk7CiAgfQoKICB2b2lkIF93cml0ZUluZm8oanMuTm9kZSBub2RlKSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkPFNvdXJjZUluZm9ybWF0aW9uPihub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIChTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgICBTb3VyY2VJbmZvcm1hdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luaywgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oanMuSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0pzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZFN0YXRlbWVudChqcy5JbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0pzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3Rvcihqcy5JbnRlcnBvbGF0ZWRTZWxlY3RvciBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKGpzLkludGVycG9sYXRlZFBhcmFtZXRlciBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoanMuSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZExpdGVyYWwnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKGpzLkludGVycG9sYXRlZEV4cHJlc3Npb24gbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0pzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9uJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29tbWVudChqcy5Db21tZW50IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuY29tbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuY29tbWVudCk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUuY29tbWVudCk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmNvbW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBd2FpdChqcy5Bd2FpdCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmF3YWl0KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5hd2FpdCk7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5hd2FpdCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJlZ0V4cExpdGVyYWwoanMuUmVnRXhwTGl0ZXJhbCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLnJlZ0V4cExpdGVyYWwpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnJlZ0V4cExpdGVyYWwpOwogICAgc2luay53cml0ZVN0cmluZyhub2RlLnBhdHRlcm4pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5yZWdFeHBMaXRlcmFsKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHkoanMuUHJvcGVydHkgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5wcm9wZXJ0eSk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MucHJvcGVydHkpOwogICAgdmlzaXQobm9kZS5uYW1lKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5wcm9wZXJ0eSk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE9iamVjdEluaXRpYWxpemVyKGpzLk9iamVjdEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQub2JqZWN0SW5pdGlhbGl6ZXIpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLm9iamVjdEluaXRpYWxpemVyKTsKICAgIHZpc2l0TGlzdChub2RlLnByb3BlcnRpZXMpOwogICAgc2luay53cml0ZUJvb2wobm9kZS5pc09uZUxpbmVyKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3Mub2JqZWN0SW5pdGlhbGl6ZXIpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBcnJheUhvbGUoanMuQXJyYXlIb2xlIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuYXJyYXlIb2xlKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5hcnJheUhvbGUpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5hcnJheUhvbGUpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBcnJheUluaXRpYWxpemVyKGpzLkFycmF5SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5hcnJheUluaXRpYWxpemVyKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5hcnJheUluaXRpYWxpemVyKTsKICAgIHZpc2l0TGlzdChub2RlLmVsZW1lbnRzKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuYXJyYXlJbml0aWFsaXplcik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcmVudGhlc2VzKGpzLlBhcmVudGhlc2VzIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQucGFyZW50aGVzZXMpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnBhcmVudGhlc2VzKTsKICAgIHZpc2l0KG5vZGUuZW5jbG9zZWQpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5wYXJlbnRoZXNlcyk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWUoanMuTmFtZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBNb2R1bGFyTmFtZSkgewogICAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLm1vZHVsYXJOYW1lKTsKICAgICAgc2luay5iZWdpbihKc05vZGVUYWdzLm1vZHVsYXJOYW1lKTsKICAgICAgbm9kZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubW9kdWxhck5hbWUpOwogICAgICBfd3JpdGVJbmZvKG5vZGUpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIEFzeW5jTmFtZSkgewogICAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmFzeW5jTmFtZSk7CiAgICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5hc3luY05hbWUpOwogICAgICB2aXNpdChub2RlLnByZWZpeCk7CiAgICAgIHZpc2l0KG5vZGUuYmFzZSk7CiAgICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuYXN5bmNOYW1lKTsKICAgICAgX3dyaXRlSW5mbyhub2RlKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBTdHJpbmdCYWNrZWROYW1lKSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuc3RyaW5nQmFja2VkTmFtZSk7CiAgICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5zdHJpbmdCYWNrZWROYW1lKTsKICAgICAgc2luay53cml0ZVN0cmluZyhub2RlLm5hbWUpOwogICAgICBzaW5rLmVuZChKc05vZGVUYWdzLnN0cmluZ0JhY2tlZE5hbWUpOwogICAgICBfd3JpdGVJbmZvKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAnVW5leHBlY3RlZCBkZWZlcnJlZCBleHByZXNzaW9uOiAke25vZGUucnVudGltZVR5cGV9LicpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oanMuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLnN0cmluZ0NvbmNhdGVuYXRpb24pOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnN0cmluZ0NvbmNhdGVuYXRpb24pOwogICAgdmlzaXRMaXN0KG5vZGUucGFydHMpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5zdHJpbmdDb25jYXRlbmF0aW9uKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbE51bGwoanMuTGl0ZXJhbE51bGwgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5saXRlcmFsTnVsbCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbE51bGwpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5saXRlcmFsTnVsbCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxOdW1iZXIoanMuTGl0ZXJhbE51bWJlciBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmxpdGVyYWxOdW1iZXIpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmxpdGVyYWxOdW1iZXIpOwogICAgc2luay53cml0ZVN0cmluZyhub2RlLnZhbHVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubGl0ZXJhbE51bWJlcik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxTdHJpbmcoanMuTGl0ZXJhbFN0cmluZyBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBqcy5MaXRlcmFsU3RyaW5nRnJvbU5hbWUpIHsKICAgICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5saXRlcmFsU3RyaW5nRnJvbU5hbWUpOwogICAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbFN0cmluZ0Zyb21OYW1lKTsKICAgICAgdmlzaXQobm9kZS5uYW1lKTsKICAgICAgc2luay5lbmQoSnNOb2RlVGFncy5saXRlcmFsU3RyaW5nRnJvbU5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5saXRlcmFsU3RyaW5nKTsKICAgICAgc2luay5iZWdpbihKc05vZGVUYWdzLmxpdGVyYWxTdHJpbmcpOwogICAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUudmFsdWUpOwogICAgICBzaW5rLmVuZChKc05vZGVUYWdzLmxpdGVyYWxTdHJpbmcpOwogICAgfQogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsQm9vbChqcy5MaXRlcmFsQm9vbCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmxpdGVyYWxCb29sKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5saXRlcmFsQm9vbCk7CiAgICBzaW5rLndyaXRlQm9vbChub2RlLnZhbHVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubGl0ZXJhbEJvb2wpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREZWZlcnJlZFN0cmluZyhqcy5EZWZlcnJlZFN0cmluZyBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSnNOb2RlU2VyaWFsaXplci52aXNpdERlZmVycmVkU3RyaW5nJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGVmZXJyZWROdW1iZXIoanMuRGVmZXJyZWROdW1iZXIgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0pzTm9kZVNlcmlhbGl6ZXIudmlzaXREZWZlcnJlZE51bWJlcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihqcy5EZWZlcnJlZEV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKG5vZGUgaXMgTW9kdWxhckV4cHJlc3Npb24pIHsKICAgICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5tb2R1bGFyRXhwcmVzc2lvbik7CiAgICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5tb2R1bGFyRXhwcmVzc2lvbik7CiAgICAgIG5vZGUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgICBzaW5rLmVuZChKc05vZGVUYWdzLm1vZHVsYXJFeHByZXNzaW9uKTsKICAgICAgX3dyaXRlSW5mbyhub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgJ1VuZXhwZWN0ZWQgZGVmZXJyZWQgZXhwcmVzc2lvbjogJHtub2RlLnJ1bnRpbWVUeXBlfS4nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW4oanMuRnVuIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuZnVuY3Rpb24pOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmZ1bmN0aW9uKTsKICAgIHZpc2l0TGlzdChub2RlLnBhcmFtcyk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgc2luay53cml0ZUVudW0obm9kZS5hc3luY01vZGlmaWVyKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuZnVuY3Rpb24pOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROYW1lZEZ1bmN0aW9uKGpzLk5hbWVkRnVuY3Rpb24gbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5uYW1lZEZ1bmN0aW9uKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5uYW1lZEZ1bmN0aW9uKTsKICAgIHZpc2l0KG5vZGUubmFtZSk7CiAgICB2aXNpdChub2RlLmZ1bmN0aW9uKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubmFtZWRGdW5jdGlvbik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFjY2Vzcyhqcy5Qcm9wZXJ0eUFjY2VzcyBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmFjY2Vzcyk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuYWNjZXNzKTsKICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgdmlzaXQobm9kZS5zZWxlY3Rvcik7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmFjY2Vzcyk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcmFtZXRlcihqcy5QYXJhbWV0ZXIgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5wYXJhbWV0ZXIpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnBhcmFtZXRlcik7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUubmFtZSk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLnBhcmFtZXRlcik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oanMuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLnZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgc2luay53cml0ZVN0cmluZyhub2RlLm5hbWUpOwogICAgc2luay53cml0ZUJvb2wobm9kZS5hbGxvd1JlbmFtZSk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLnZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaGlzKGpzLlRoaXMgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC50aGlzRXhwcmVzc2lvbik7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MudGhpc0V4cHJlc3Npb24pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy50aGlzRXhwcmVzc2lvbik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlVXNlKGpzLlZhcmlhYmxlVXNlIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQudmFyaWFibGVVc2UpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnZhcmlhYmxlVXNlKTsKICAgIHNpbmsud3JpdGVTdHJpbmcobm9kZS5uYW1lKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVVc2UpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQb3N0Zml4KGpzLlBvc3RmaXggbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5wb3N0Zml4KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5wb3N0Zml4KTsKICAgIHNpbmsud3JpdGVTdHJpbmcobm9kZS5vcCk7CiAgICB2aXNpdChub2RlLmFyZ3VtZW50KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MucG9zdGZpeCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByZWZpeChqcy5QcmVmaXggbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5wcmVmaXgpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnByZWZpeCk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUub3ApOwogICAgdmlzaXQobm9kZS5hcmd1bWVudCk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLnByZWZpeCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJpbmFyeShqcy5CaW5hcnkgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5iaW5hcnkpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmJpbmFyeSk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUub3ApOwogICAgdmlzaXQobm9kZS5sZWZ0KTsKICAgIHZpc2l0KG5vZGUucmlnaHQpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5iaW5hcnkpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYWxsKGpzLkNhbGwgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5jYWxsRXhwcmVzc2lvbik7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuY2FsbEV4cHJlc3Npb24pOwogICAgdmlzaXQobm9kZS50YXJnZXQpOwogICAgdmlzaXRMaXN0KG5vZGUuYXJndW1lbnRzKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuY2FsbEV4cHJlc3Npb24pOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROZXcoanMuTmV3IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQubmV3RXhwcmVzc2lvbik7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MubmV3RXhwcmVzc2lvbik7CiAgICB2aXNpdChub2RlLnRhcmdldCk7CiAgICB2aXNpdExpc3Qobm9kZS5hcmd1bWVudHMpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5uZXdFeHByZXNzaW9uKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uZGl0aW9uYWwoanMuQ29uZGl0aW9uYWwgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5jb25kaXRpb25hbCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuY29uZGl0aW9uYWwpOwogICAgdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgdmlzaXQobm9kZS50aGVuKTsKICAgIHZpc2l0KG5vZGUub3RoZXJ3aXNlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuY29uZGl0aW9uYWwpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZUluaXRpYWxpemF0aW9uKGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24gbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC52YXJpYWJsZUluaXRpYWxpemF0aW9uKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy52YXJpYWJsZUluaXRpYWxpemF0aW9uKTsKICAgIHZpc2l0KG5vZGUuZGVjbGFyYXRpb24pOwogICAgdmlzaXQobm9kZS52YWx1ZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVJbml0aWFsaXphdGlvbik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoanMuQXNzaWdubWVudCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmFzc2lnbm1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmFzc2lnbm1lbnQpOwogICAgdmlzaXQobm9kZS5sZWZ0SGFuZFNpZGUpOwogICAgc2luay53cml0ZVN0cmluZ09yTnVsbChub2RlLm9wKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5hc3NpZ25tZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoanMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC52YXJpYWJsZURlY2xhcmF0aW9uTGlzdCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpOwogICAgdmlzaXRMaXN0KG5vZGUuZGVjbGFyYXRpb25zKTsKICAgIHNpbmsud3JpdGVCb29sKG5vZGUuaW5kZW50U3BsaXRzKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihqcy5MaXRlcmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmxpdGVyYWxFeHByZXNzaW9uKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5saXRlcmFsRXhwcmVzc2lvbik7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUudGVtcGxhdGUpOwogICAgdmlzaXRMaXN0KG5vZGUuaW5wdXRzKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubGl0ZXJhbEV4cHJlc3Npb24pOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREYXJ0WWllbGQoanMuRGFydFlpZWxkIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuZGFydFlpZWxkKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5kYXJ0WWllbGQpOwogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHNpbmsud3JpdGVCb29sKG5vZGUuaGFzU3Rhcik7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmRhcnRZaWVsZCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoanMuTGl0ZXJhbFN0YXRlbWVudCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmxpdGVyYWxTdGF0ZW1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmxpdGVyYWxTdGF0ZW1lbnQpOwogICAgc2luay53cml0ZVN0cmluZyhub2RlLmNvZGUpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5saXRlcmFsU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGFiZWxlZFN0YXRlbWVudChqcy5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQubGFiZWxlZFN0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MubGFiZWxlZFN0YXRlbWVudCk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUubGFiZWwpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubGFiZWxlZFN0YXRlbWVudCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oanMuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgdmlzaXQobm9kZS5uYW1lKTsKICAgIHZpc2l0KG5vZGUuZnVuY3Rpb24pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5mdW5jdGlvbkRlY2xhcmF0aW9uKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGVmYXVsdChqcy5EZWZhdWx0IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuc3dpdGNoRGVmYXVsdCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3Muc3dpdGNoRGVmYXVsdCk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5zd2l0Y2hEZWZhdWx0KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2FzZShqcy5DYXNlIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuc3dpdGNoQ2FzZSk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3Muc3dpdGNoQ2FzZSk7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3Muc3dpdGNoQ2FzZSk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaChqcy5Td2l0Y2ggbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5zd2l0Y2hTdGF0ZW1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnN3aXRjaFN0YXRlbWVudCk7CiAgICB2aXNpdChub2RlLmtleSk7CiAgICB2aXNpdExpc3Qobm9kZS5jYXNlcyk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLnN3aXRjaFN0YXRlbWVudCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENhdGNoKGpzLkNhdGNoIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuY2F0Y2hDbGF1c2UpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmNhdGNoQ2xhdXNlKTsKICAgIHZpc2l0KG5vZGUuZGVjbGFyYXRpb24pOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuY2F0Y2hDbGF1c2UpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUcnkoanMuVHJ5IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQudHJ5U3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy50cnlTdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHZpc2l0KG5vZGUuY2F0Y2hQYXJ0LCBhbGxvd051bGw6IHRydWUpOwogICAgdmlzaXQobm9kZS5maW5hbGx5UGFydCwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudHJ5U3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhyb3coanMuVGhyb3cgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC50aHJvd1N0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MudGhyb3dTdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudGhyb3dTdGF0ZW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZXR1cm4oanMuUmV0dXJuIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQucmV0dXJuU3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5yZXR1cm5TdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS52YWx1ZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MucmV0dXJuU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QnJlYWsoanMuQnJlYWsgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5icmVha1N0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuYnJlYWtTdGF0ZW1lbnQpOwogICAgc2luay53cml0ZVN0cmluZ09yTnVsbChub2RlLnRhcmdldExhYmVsKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuYnJlYWtTdGF0ZW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb250aW51ZShqcy5Db250aW51ZSBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmNvbnRpbnVlU3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5jb250aW51ZVN0YXRlbWVudCk7CiAgICBzaW5rLndyaXRlU3RyaW5nT3JOdWxsKG5vZGUudGFyZ2V0TGFiZWwpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5jb250aW51ZVN0YXRlbWVudCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvKGpzLkRvIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuZG9TdGF0ZW1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmRvU3RhdGVtZW50KTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICB2aXNpdChub2RlLmNvbmRpdGlvbik7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmRvU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0V2hpbGUoanMuV2hpbGUgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC53aGlsZVN0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3Mud2hpbGVTdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3Mud2hpbGVTdGF0ZW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3JJbihqcy5Gb3JJbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmZvckluU3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5mb3JJblN0YXRlbWVudCk7CiAgICB2aXNpdChub2RlLmxlZnRIYW5kU2lkZSk7CiAgICB2aXNpdChub2RlLm9iamVjdCk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5mb3JJblN0YXRlbWVudCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvcihqcy5Gb3Igbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5mb3JTdGF0ZW1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmZvclN0YXRlbWVudCk7CiAgICB2aXNpdChub2RlLmluaXQsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICB2aXNpdChub2RlLmNvbmRpdGlvbiwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHZpc2l0KG5vZGUudXBkYXRlLCBhbGxvd051bGw6IHRydWUpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuZm9yU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SWYoanMuSWYgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5pZlN0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuaWZTdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgdmlzaXQobm9kZS50aGVuKTsKICAgIHZpc2l0KG5vZGUub3RoZXJ3aXNlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuaWZTdGF0ZW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbXB0eVN0YXRlbWVudChqcy5FbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmVtcHR5U3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5lbXB0eVN0YXRlbWVudCk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmVtcHR5U3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChqcy5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuZXhwcmVzc2lvblN0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuZXhwcmVzc2lvblN0YXRlbWVudCk7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5leHByZXNzaW9uU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmxvY2soanMuQmxvY2sgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5ibG9jayk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuYmxvY2spOwogICAgdmlzaXRMaXN0KG5vZGUuc3RhdGVtZW50cyk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmJsb2NrKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvZ3JhbShqcy5Qcm9ncmFtIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQucHJvZ3JhbSk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MucHJvZ3JhbSk7CiAgICB2aXNpdExpc3Qobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MucHJvZ3JhbSk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KfQoKLy8vIEhlbHBlciBjbGFzcyB0aGF0IGRlc2VyaWFsaXplcyBhIFtqcy5Ob2RlXSBmcm9tIFtEYXRhU291cmNlXS4KLy8vCi8vLyBEZXNlcmlhbGl6ZWQgW01vZHVsYXJOYW1lXXMgYW5kIFtNb2R1bGFyRXhwcmVzc2lvbl1zIGFyZSBjb2xsZWN0ZWQgaW4gdGhlCi8vLyBbbW9kdWxhck5hbWVzXSBhbmQgW21vZHVsYXJFeHByZXNzaW9uc10gbGlzdHMuCmNsYXNzIEpzTm9kZURlc2VyaWFsaXplciB7CiAgZmluYWwgRGF0YVNvdXJjZSBzb3VyY2U7CiAgZmluYWwgTGlzdDxNb2R1bGFyTmFtZT4gbW9kdWxhck5hbWVzOwogIGZpbmFsIExpc3Q8TW9kdWxhckV4cHJlc3Npb24+IG1vZHVsYXJFeHByZXNzaW9uczsKCiAgSnNOb2RlRGVzZXJpYWxpemVyLl8odGhpcy5zb3VyY2UsIHRoaXMubW9kdWxhck5hbWVzLCB0aGlzLm1vZHVsYXJFeHByZXNzaW9ucyk7CgogIHN0YXRpYyBqcy5Ob2RlIHJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsCiAgICAgIExpc3Q8TW9kdWxhck5hbWU+IG1vZHVsYXJOYW1lcywKICAgICAgTGlzdDxNb2R1bGFyRXhwcmVzc2lvbj4gbW9kdWxhckV4cHJlc3Npb25zKSB7CiAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy50YWcpOwogICAgSnNOb2RlRGVzZXJpYWxpemVyIGRlc2VyaWFsaXplciA9CiAgICAgICAgbmV3IEpzTm9kZURlc2VyaWFsaXplci5fKHNvdXJjZSwgbW9kdWxhck5hbWVzLCBtb2R1bGFyRXhwcmVzc2lvbnMpOwogICAganMuTm9kZSBub2RlID0gZGVzZXJpYWxpemVyLnJlYWQoKTsKICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy50YWcpOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBUIHJlYWQ8VCBleHRlbmRzIGpzLk5vZGU+KHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAoYWxsb3dOdWxsKSB7CiAgICAgIGJvb2wgaGFzVmFsdWUgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgaWYgKCFoYXNWYWx1ZSkgcmV0dXJuIG51bGw7CiAgICB9CiAgICBKc05vZGVLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSnNOb2RlS2luZC52YWx1ZXMpOwogICAganMuTm9kZSBub2RlOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5jb21tZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmNvbW1lbnQpOwogICAgICAgIG5vZGUgPSBuZXcganMuQ29tbWVudChzb3VyY2UucmVhZFN0cmluZygpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuY29tbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5hd2FpdDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5hd2FpdCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Bd2FpdChyZWFkKCkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5hd2FpdCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5yZWdFeHBMaXRlcmFsOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnJlZ0V4cExpdGVyYWwpOwogICAgICAgIG5vZGUgPSBuZXcganMuUmVnRXhwTGl0ZXJhbChzb3VyY2UucmVhZFN0cmluZygpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucmVnRXhwTGl0ZXJhbCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5wcm9wZXJ0eToKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5wcm9wZXJ0eSk7CiAgICAgICAganMuRXhwcmVzc2lvbiBuYW1lID0gcmVhZCgpOwogICAgICAgIGpzLkV4cHJlc3Npb24gdmFsdWUgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Qcm9wZXJ0eShuYW1lLCB2YWx1ZSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnByb3BlcnR5KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLm9iamVjdEluaXRpYWxpemVyOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLm9iamVjdEluaXRpYWxpemVyKTsKICAgICAgICBMaXN0PGpzLlByb3BlcnR5PiBwcm9wZXJ0aWVzID0gcmVhZExpc3QoKTsKICAgICAgICBib29sIGlzT25lTGluZXIgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgICBub2RlID0gbmV3IGpzLk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMsIGlzT25lTGluZXI6IGlzT25lTGluZXIpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5vYmplY3RJbml0aWFsaXplcik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5hcnJheUhvbGU6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MuYXJyYXlIb2xlKTsKICAgICAgICBub2RlID0gbmV3IGpzLkFycmF5SG9sZSgpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5hcnJheUhvbGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuYXJyYXlJbml0aWFsaXplcjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5hcnJheUluaXRpYWxpemVyKTsKICAgICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGVsZW1lbnRzID0gcmVhZExpc3QoKTsKICAgICAgICBub2RlID0gbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5hcnJheUluaXRpYWxpemVyKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnBhcmVudGhlc2VzOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnBhcmVudGhlc2VzKTsKICAgICAgICBub2RlID0gbmV3IGpzLlBhcmVudGhlc2VzKHJlYWQoKSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnBhcmVudGhlc2VzKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLm1vZHVsYXJOYW1lOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLm1vZHVsYXJOYW1lKTsKICAgICAgICBNb2R1bGFyTmFtZSBtb2R1bGFyTmFtZSA9IE1vZHVsYXJOYW1lLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICAgIG1vZHVsYXJOYW1lcy5hZGQobW9kdWxhck5hbWUpOwogICAgICAgIG5vZGUgPSBtb2R1bGFyTmFtZTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MubW9kdWxhck5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuYXN5bmNOYW1lOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmFzeW5jTmFtZSk7CiAgICAgICAganMuTmFtZSBwcmVmaXggPSByZWFkKCk7CiAgICAgICAganMuTmFtZSBiYXNlID0gcmVhZCgpOwogICAgICAgIG5vZGUgPSBuZXcgQXN5bmNOYW1lKHByZWZpeCwgYmFzZSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmFzeW5jTmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5zdHJpbmdCYWNrZWROYW1lOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnN0cmluZ0JhY2tlZE5hbWUpOwogICAgICAgIG5vZGUgPSBuZXcgU3RyaW5nQmFja2VkTmFtZShzb3VyY2UucmVhZFN0cmluZygpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3Muc3RyaW5nQmFja2VkTmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5zdHJpbmdDb25jYXRlbmF0aW9uOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnN0cmluZ0NvbmNhdGVuYXRpb24pOwogICAgICAgIExpc3Q8anMuTGl0ZXJhbD4gcGFydHMgPSByZWFkTGlzdCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuU3RyaW5nQ29uY2F0ZW5hdGlvbihwYXJ0cyk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnN0cmluZ0NvbmNhdGVuYXRpb24pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbE51bGw6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbE51bGwpOwogICAgICAgIG5vZGUgPSBuZXcganMuTGl0ZXJhbE51bGwoKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MubGl0ZXJhbE51bGwpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbE51bWJlcjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5saXRlcmFsTnVtYmVyKTsKICAgICAgICBub2RlID0gbmV3IGpzLkxpdGVyYWxOdW1iZXIoc291cmNlLnJlYWRTdHJpbmcoKSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmxpdGVyYWxOdW1iZXIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbFN0cmluZzoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5saXRlcmFsU3RyaW5nKTsKICAgICAgICBub2RlID0gbmV3IGpzLkxpdGVyYWxTdHJpbmcoc291cmNlLnJlYWRTdHJpbmcoKSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmxpdGVyYWxTdHJpbmcpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbFN0cmluZ0Zyb21OYW1lOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmxpdGVyYWxTdHJpbmdGcm9tTmFtZSk7CiAgICAgICAganMuTmFtZSBuYW1lID0gcmVhZCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuTGl0ZXJhbFN0cmluZ0Zyb21OYW1lKG5hbWUpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5saXRlcmFsU3RyaW5nRnJvbU5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbEJvb2w6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbEJvb2wpOwogICAgICAgIG5vZGUgPSBuZXcganMuTGl0ZXJhbEJvb2woc291cmNlLnJlYWRCb29sKCkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5saXRlcmFsQm9vbCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5tb2R1bGFyRXhwcmVzc2lvbjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5tb2R1bGFyRXhwcmVzc2lvbik7CiAgICAgICAgTW9kdWxhckV4cHJlc3Npb24gbW9kdWxhckV4cHJlc3Npb24gPQogICAgICAgICAgICBNb2R1bGFyRXhwcmVzc2lvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgICBtb2R1bGFyRXhwcmVzc2lvbnMuYWRkKG1vZHVsYXJFeHByZXNzaW9uKTsKICAgICAgICBub2RlID0gbW9kdWxhckV4cHJlc3Npb247CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLm1vZHVsYXJFeHByZXNzaW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmZ1bmN0aW9uOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmZ1bmN0aW9uKTsKICAgICAgICBMaXN0PGpzLlBhcmFtZXRlcj4gcGFyYW1zID0gcmVhZExpc3QoKTsKICAgICAgICBqcy5CbG9jayBib2R5ID0gcmVhZCgpOwogICAgICAgIGpzLkFzeW5jTW9kaWZpZXIgYXN5bmNNb2RpZmllciA9CiAgICAgICAgICAgIHNvdXJjZS5yZWFkRW51bShqcy5Bc3luY01vZGlmaWVyLnZhbHVlcyk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5GdW4ocGFyYW1zLCBib2R5LCBhc3luY01vZGlmaWVyOiBhc3luY01vZGlmaWVyKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZnVuY3Rpb24pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubmFtZWRGdW5jdGlvbjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5uYW1lZEZ1bmN0aW9uKTsKICAgICAgICBqcy5EZWNsYXJhdGlvbiBuYW1lID0gcmVhZCgpOwogICAgICAgIGpzLkZ1biBmdW5jdGlvbiA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLk5hbWVkRnVuY3Rpb24obmFtZSwgZnVuY3Rpb24pOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5uYW1lZEZ1bmN0aW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmFjY2VzczoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5hY2Nlc3MpOwogICAgICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBzZWxlY3RvciA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLlByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBzZWxlY3Rvcik7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmFjY2Vzcyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5wYXJhbWV0ZXI6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MucGFyYW1ldGVyKTsKICAgICAgICBub2RlID0gbmV3IGpzLlBhcmFtZXRlcihzb3VyY2UucmVhZFN0cmluZygpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucGFyYW1ldGVyKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnZhcmlhYmxlRGVjbGFyYXRpb246CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIGJvb2wgYWxsb3dSZW5hbWUgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgICBub2RlID0gbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24obmFtZSwgYWxsb3dSZW5hbWU6IGFsbG93UmVuYW1lKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC50aGlzRXhwcmVzc2lvbjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy50aGlzRXhwcmVzc2lvbik7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5UaGlzKCk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnRoaXNFeHByZXNzaW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnZhcmlhYmxlVXNlOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnZhcmlhYmxlVXNlKTsKICAgICAgICBub2RlID0gbmV3IGpzLlZhcmlhYmxlVXNlKHNvdXJjZS5yZWFkU3RyaW5nKCkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy52YXJpYWJsZVVzZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5wb3N0Zml4OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnBvc3RmaXgpOwogICAgICAgIFN0cmluZyBvcCA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBhcmd1bWVudCA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLlBvc3RmaXgob3AsIGFyZ3VtZW50KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucG9zdGZpeCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5wcmVmaXg6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MucHJlZml4KTsKICAgICAgICBTdHJpbmcgb3AgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIGpzLkV4cHJlc3Npb24gYXJndW1lbnQgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5QcmVmaXgob3AsIGFyZ3VtZW50KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucHJlZml4KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmJpbmFyeToKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5iaW5hcnkpOwogICAgICAgIFN0cmluZyBvcCA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBsZWZ0ID0gcmVhZCgpOwogICAgICAgIGpzLkV4cHJlc3Npb24gcmlnaHQgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5CaW5hcnkob3AsIGxlZnQsIHJpZ2h0KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuYmluYXJ5KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmNhbGxFeHByZXNzaW9uOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmNhbGxFeHByZXNzaW9uKTsKICAgICAgICBqcy5FeHByZXNzaW9uIHRhcmdldCA9IHJlYWQoKTsKICAgICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IHJlYWRMaXN0KCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5DYWxsKHRhcmdldCwgYXJndW1lbnRzKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuY2FsbEV4cHJlc3Npb24pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubmV3RXhwcmVzc2lvbjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5uZXdFeHByZXNzaW9uKTsKICAgICAgICBqcy5FeHByZXNzaW9uIGNscyA9IHJlYWQoKTsKICAgICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IHJlYWRMaXN0KCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5OZXcoY2xzLCBhcmd1bWVudHMpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5uZXdFeHByZXNzaW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmNvbmRpdGlvbmFsOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmNvbmRpdGlvbmFsKTsKICAgICAgICBqcy5FeHByZXNzaW9uIGNvbmRpdGlvbiA9IHJlYWQoKTsKICAgICAgICBqcy5FeHByZXNzaW9uIHRoZW4gPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBvdGhlcndpc2UgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Db25kaXRpb25hbChjb25kaXRpb24sIHRoZW4sIG90aGVyd2lzZSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmNvbmRpdGlvbmFsKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnZhcmlhYmxlSW5pdGlhbGl6YXRpb246CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MudmFyaWFibGVJbml0aWFsaXphdGlvbik7CiAgICAgICAganMuRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiB2YWx1ZSA9IHNvdXJjZS5yZWFkVmFsdWVPck51bGwocmVhZCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKGRlY2xhcmF0aW9uLCB2YWx1ZSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnZhcmlhYmxlSW5pdGlhbGl6YXRpb24pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuYXNzaWdubWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5hc3NpZ25tZW50KTsKICAgICAgICBqcy5FeHByZXNzaW9uIGxlZnRIYW5kU2lkZSA9IHJlYWQoKTsKICAgICAgICBTdHJpbmcgb3AgPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogICAgICAgIGpzLkV4cHJlc3Npb24gdmFsdWUgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Bc3NpZ25tZW50LmNvbXBvdW5kKGxlZnRIYW5kU2lkZSwgb3AsIHZhbHVlKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuYXNzaWdubWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC52YXJpYWJsZURlY2xhcmF0aW9uTGlzdDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy52YXJpYWJsZURlY2xhcmF0aW9uTGlzdCk7CiAgICAgICAgTGlzdDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiBkZWNsYXJhdGlvbnMgPSByZWFkTGlzdCgpOwogICAgICAgIGJvb2wgaW5kZW50U3BsaXRzID0gc291cmNlLnJlYWRCb29sKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdChkZWNsYXJhdGlvbnMsCiAgICAgICAgICAgIGluZGVudFNwbGl0czogaW5kZW50U3BsaXRzKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbEV4cHJlc3Npb246CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbEV4cHJlc3Npb24pOwogICAgICAgIFN0cmluZyB0ZW1wbGF0ZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgTGlzdDxqcy5FeHByZXNzaW9uPiBpbnB1dHMgPSByZWFkTGlzdCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuTGl0ZXJhbEV4cHJlc3Npb24ud2l0aERhdGEodGVtcGxhdGUsIGlucHV0cyk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmxpdGVyYWxFeHByZXNzaW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmRhcnRZaWVsZDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5kYXJ0WWllbGQpOwogICAgICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHJlYWQoKTsKICAgICAgICBib29sIGhhc1N0YXIgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgICBub2RlID0gbmV3IGpzLkRhcnRZaWVsZChleHByZXNzaW9uLCBoYXNTdGFyKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZGFydFlpZWxkKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmxpdGVyYWxTdGF0ZW1lbnQ6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbFN0YXRlbWVudCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5MaXRlcmFsU3RhdGVtZW50KHNvdXJjZS5yZWFkU3RyaW5nKCkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5saXRlcmFsU3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmxhYmVsZWRTdGF0ZW1lbnQ6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGFiZWxlZFN0YXRlbWVudCk7CiAgICAgICAgU3RyaW5nIGxhYmVsID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICBqcy5TdGF0ZW1lbnQgYm9keSA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLkxhYmVsZWRTdGF0ZW1lbnQobGFiZWwsIGJvZHkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5sYWJlbGVkU3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MuZnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICAgICAganMuRGVjbGFyYXRpb24gbmFtZSA9IHJlYWQoKTsKICAgICAgICBqcy5GdW4gZnVuY3Rpb24gPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5GdW5jdGlvbkRlY2xhcmF0aW9uKG5hbWUsIGZ1bmN0aW9uKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5zd2l0Y2hEZWZhdWx0OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnN3aXRjaERlZmF1bHQpOwogICAgICAgIGpzLkJsb2NrIGJvZHkgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5EZWZhdWx0KGJvZHkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5zd2l0Y2hEZWZhdWx0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnN3aXRjaENhc2U6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3Muc3dpdGNoQ2FzZSk7CiAgICAgICAganMuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcmVhZCgpOwogICAgICAgIGpzLkJsb2NrIGJvZHkgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5DYXNlKGV4cHJlc3Npb24sIGJvZHkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5zd2l0Y2hDYXNlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnN3aXRjaFN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5zd2l0Y2hTdGF0ZW1lbnQpOwogICAgICAgIGpzLkV4cHJlc3Npb24ga2V5ID0gcmVhZCgpOwogICAgICAgIExpc3Q8anMuU3dpdGNoQ2xhdXNlPiBjYXNlcyA9IHJlYWRMaXN0KCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Td2l0Y2goa2V5LCBjYXNlcyk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnN3aXRjaFN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5jYXRjaENsYXVzZToKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5jYXRjaENsYXVzZSk7CiAgICAgICAganMuRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSByZWFkKCk7CiAgICAgICAganMuQmxvY2sgYm9keSA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLkNhdGNoKGRlY2xhcmF0aW9uLCBib2R5KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuY2F0Y2hDbGF1c2UpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQudHJ5U3RhdGVtZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnRyeVN0YXRlbWVudCk7CiAgICAgICAganMuQmxvY2sgYm9keSA9IHJlYWQoKTsKICAgICAgICBqcy5DYXRjaCBjYXRjaFBhcnQgPSBzb3VyY2UucmVhZFZhbHVlT3JOdWxsKHJlYWQpOwogICAgICAgIGpzLkJsb2NrIGZpbmFsbHlQYXJ0ID0gc291cmNlLnJlYWRWYWx1ZU9yTnVsbChyZWFkKTsKICAgICAgICBub2RlID0gbmV3IGpzLlRyeShib2R5LCBjYXRjaFBhcnQsIGZpbmFsbHlQYXJ0KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MudHJ5U3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnRocm93U3RhdGVtZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnRocm93U3RhdGVtZW50KTsKICAgICAgICBqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5UaHJvdyhleHByZXNzaW9uKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MudGhyb3dTdGF0ZW1lbnQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQucmV0dXJuU3RhdGVtZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnJldHVyblN0YXRlbWVudCk7CiAgICAgICAganMuRXhwcmVzc2lvbiB2YWx1ZSA9IHNvdXJjZS5yZWFkVmFsdWVPck51bGwocmVhZCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5SZXR1cm4odmFsdWUpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5yZXR1cm5TdGF0ZW1lbnQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuYnJlYWtTdGF0ZW1lbnQ6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MuYnJlYWtTdGF0ZW1lbnQpOwogICAgICAgIFN0cmluZyB0YXJnZXRMYWJlbCA9IHNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5CcmVhayh0YXJnZXRMYWJlbCk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmJyZWFrU3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmNvbnRpbnVlU3RhdGVtZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmNvbnRpbnVlU3RhdGVtZW50KTsKICAgICAgICBTdHJpbmcgdGFyZ2V0TGFiZWwgPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuQ29udGludWUodGFyZ2V0TGFiZWwpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5jb250aW51ZVN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5kb1N0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5kb1N0YXRlbWVudCk7CiAgICAgICAganMuU3RhdGVtZW50IGJvZHkgPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBjb25kaXRpb24gPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Ebyhib2R5LCBjb25kaXRpb24pOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5kb1N0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC53aGlsZVN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy53aGlsZVN0YXRlbWVudCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBjb25kaXRpb24gPSByZWFkKCk7CiAgICAgICAganMuU3RhdGVtZW50IGJvZHkgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5XaGlsZShjb25kaXRpb24sIGJvZHkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy53aGlsZVN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5mb3JJblN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5mb3JJblN0YXRlbWVudCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBsZWZ0SGFuZFNpZGUgPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBvYmplY3QgPSByZWFkKCk7CiAgICAgICAganMuU3RhdGVtZW50IGJvZHkgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Gb3JJbihsZWZ0SGFuZFNpZGUsIG9iamVjdCwgYm9keSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmZvckluU3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmZvclN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5mb3JTdGF0ZW1lbnQpOwogICAgICAgIGpzLkV4cHJlc3Npb24gaW5pdCA9IHJlYWQoYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgICBqcy5FeHByZXNzaW9uIGNvbmRpdGlvbiA9IHJlYWQoYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgICBqcy5FeHByZXNzaW9uIHVwZGF0ZSA9IHJlYWQoYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgICBqcy5TdGF0ZW1lbnQgYm9keSA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLkZvcihpbml0LCBjb25kaXRpb24sIHVwZGF0ZSwgYm9keSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmZvclN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5pZlN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5pZlN0YXRlbWVudCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBjb25kaXRpb24gPSByZWFkKCk7CiAgICAgICAganMuU3RhdGVtZW50IHRoZW4gPSByZWFkKCk7CiAgICAgICAganMuU3RhdGVtZW50IG90aGVyd2lzZSA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLklmKGNvbmRpdGlvbiwgdGhlbiwgb3RoZXJ3aXNlKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuaWZTdGF0ZW1lbnQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuZW1wdHlTdGF0ZW1lbnQ6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MuZW1wdHlTdGF0ZW1lbnQpOwogICAgICAgIG5vZGUgPSBuZXcganMuRW1wdHlTdGF0ZW1lbnQoKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZW1wdHlTdGF0ZW1lbnQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuZXhwcmVzc2lvblN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5leHByZXNzaW9uU3RhdGVtZW50KTsKICAgICAgICBub2RlID0gbmV3IGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQocmVhZCgpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZXhwcmVzc2lvblN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5ibG9jazoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5ibG9jayk7CiAgICAgICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSByZWFkTGlzdCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuQmxvY2soc3RhdGVtZW50cyk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmJsb2NrKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnByb2dyYW06CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MucHJvZ3JhbSk7CiAgICAgICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IGJvZHkgPSByZWFkTGlzdCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuUHJvZ3JhbShib2R5KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucHJvZ3JhbSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgc291cmNlLnJlYWRDYWNoZWQ8U291cmNlSW5mb3JtYXRpb24+KCgpIHsKICAgICAgcmV0dXJuIFNvdXJjZUluZm9ybWF0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICBub2RlID0gbm9kZS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBMaXN0PFQ+IHJlYWRMaXN0PFQgZXh0ZW5kcyBqcy5Ob2RlPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICByZXR1cm4gc291cmNlLnJlYWRMaXN0KHJlYWQsIGVtcHR5QXNOdWxsOiBlbXB0eUFzTnVsbCk7CiAgfQp9CgpjbGFzcyBDb2RlZ2VuUmVhZGVySW1wbCBpbXBsZW1lbnRzIENvZGVnZW5SZWFkZXIgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBMaXN0PE1vZHVsYXJOYW1lPiBtb2R1bGFyTmFtZXM7CiAgZmluYWwgTGlzdDxNb2R1bGFyRXhwcmVzc2lvbj4gbW9kdWxhckV4cHJlc3Npb25zOwoKICBDb2RlZ2VuUmVhZGVySW1wbCgKICAgICAgdGhpcy5jbG9zZWRXb3JsZCwgdGhpcy5tb2R1bGFyTmFtZXMsIHRoaXMubW9kdWxhckV4cHJlc3Npb25zKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZWFkQWJzdHJhY3RWYWx1ZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuTm9kZSByZWFkSnNOb2RlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICByZXR1cm4gSnNOb2RlRGVzZXJpYWxpemVyLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICBzb3VyY2UsIG1vZHVsYXJOYW1lcywgbW9kdWxhckV4cHJlc3Npb25zKTsKICB9CgogIEBvdmVycmlkZQogIE91dHB1dFVuaXQgcmVhZE91dHB1dFVuaXRSZWZlcmVuY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0c1tzb3VyY2UucmVhZEludCgpXTsKICB9Cn0KCmNsYXNzIENvZGVnZW5Xcml0ZXJJbXBsIGltcGxlbWVudHMgQ29kZWdlbldyaXRlciB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwoKICBDb2RlZ2VuV3JpdGVySW1wbCh0aGlzLmNsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWUoRGF0YVNpbmsgc2luaywgQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi53cml0ZUFic3RyYWN0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cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGpzX2FzdDsKCmFic3RyYWN0IGNsYXNzIE5vZGVWaXNpdG9yPFQ+IHsKICBUIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUpOwoKICBUIHZpc2l0QmxvY2soQmxvY2sgbm9kZSk7CiAgVCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKTsKICBUIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSk7CiAgVCB2aXNpdElmKElmIG5vZGUpOwogIFQgdmlzaXRGb3IoRm9yIG5vZGUpOwogIFQgdmlzaXRGb3JJbihGb3JJbiBub2RlKTsKICBUIHZpc2l0V2hpbGUoV2hpbGUgbm9kZSk7CiAgVCB2aXNpdERvKERvIG5vZGUpOwogIFQgdmlzaXRDb250aW51ZShDb250aW51ZSBub2RlKTsKICBUIHZpc2l0QnJlYWsoQnJlYWsgbm9kZSk7CiAgVCB2aXNpdFJldHVybihSZXR1cm4gbm9kZSk7CiAgVCB2aXNpdFRocm93KFRocm93IG5vZGUpOwogIFQgdmlzaXRUcnkoVHJ5IG5vZGUpOwogIFQgdmlzaXRDYXRjaChDYXRjaCBub2RlKTsKICBUIHZpc2l0U3dpdGNoKFN3aXRjaCBub2RlKTsKICBUIHZpc2l0Q2FzZShDYXNlIG5vZGUpOwogIFQgdmlzaXREZWZhdWx0KERlZmF1bHQgbm9kZSk7CiAgVCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKTsKICBUIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSk7CiAgVCB2aXNpdERhcnRZaWVsZChEYXJ0WWllbGQgbm9kZSk7CgogIFQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlKTsKICBUIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSk7CiAgVCB2aXNpdEFzc2lnbm1lbnQoQXNzaWdubWVudCBub2RlKTsKICBUIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihWYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUpOwogIFQgdmlzaXRDb25kaXRpb25hbChDb25kaXRpb25hbCBjb25kKTsKICBUIHZpc2l0TmV3KE5ldyBub2RlKTsKICBUIHZpc2l0Q2FsbChDYWxsIG5vZGUpOwogIFQgdmlzaXRCaW5hcnkoQmluYXJ5IG5vZGUpOwogIFQgdmlzaXRQcmVmaXgoUHJlZml4IG5vZGUpOwogIFQgdmlzaXRQb3N0Zml4KFBvc3RmaXggbm9kZSk7CgogIFQgdmlzaXRWYXJpYWJsZVVzZShWYXJpYWJsZVVzZSBub2RlKTsKICBUIHZpc2l0VGhpcyhUaGlzIG5vZGUpOwogIFQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSk7CiAgVCB2aXNpdFBhcmFtZXRlcihQYXJhbWV0ZXIgbm9kZSk7CiAgVCB2aXNpdEFjY2VzcyhQcm9wZXJ0eUFjY2VzcyBub2RlKTsKCiAgVCB2aXNpdE5hbWVkRnVuY3Rpb24oTmFtZWRGdW5jdGlvbiBub2RlKTsKICBUIHZpc2l0RnVuKEZ1biBub2RlKTsKCiAgVCB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihEZWZlcnJlZEV4cHJlc3Npb24gbm9kZSk7CiAgVCB2aXNpdERlZmVycmVkTnVtYmVyKERlZmVycmVkTnVtYmVyIG5vZGUpOwogIFQgdmlzaXREZWZlcnJlZFN0cmluZyhEZWZlcnJlZFN0cmluZyBub2RlKTsKCiAgVCB2aXNpdExpdGVyYWxCb29sKExpdGVyYWxCb29sIG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSk7CiAgVCB2aXNpdExpdGVyYWxOdW1iZXIoTGl0ZXJhbE51bWJlciBub2RlKTsKICBUIHZpc2l0TGl0ZXJhbE51bGwoTGl0ZXJhbE51bGwgbm9kZSk7CgogIFQgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSk7CgogIFQgdmlzaXROYW1lKE5hbWUgbm9kZSk7CgogIFQgdmlzaXRQYXJlbnRoZXNlcyhQYXJlbnRoZXNlcyBub2RlKTsKCiAgVCB2aXNpdEFycmF5SW5pdGlhbGl6ZXIoQXJyYXlJbml0aWFsaXplciBub2RlKTsKICBUIHZpc2l0QXJyYXlIb2xlKEFycmF5SG9sZSBub2RlKTsKICBUIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSk7CiAgVCB2aXNpdFByb3BlcnR5KFByb3BlcnR5IG5vZGUpOwogIFQgdmlzaXRSZWdFeHBMaXRlcmFsKFJlZ0V4cExpdGVyYWwgbm9kZSk7CgogIFQgdmlzaXRBd2FpdChBd2FpdCBub2RlKTsKCiAgVCB2aXNpdENvbW1lbnQoQ29tbWVudCBub2RlKTsKCiAgVCB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24oSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkTGl0ZXJhbChJbnRlcnBvbGF0ZWRMaXRlcmFsIG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIoSW50ZXJwb2xhdGVkUGFyYW1ldGVyIG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3RvcihJbnRlcnBvbGF0ZWRTZWxlY3RvciBub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkU3RhdGVtZW50KEludGVycG9sYXRlZFN0YXRlbWVudCBub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSk7Cn0KCmNsYXNzIEJhc2VWaXNpdG9yPFQ+IGltcGxlbWVudHMgTm9kZVZpc2l0b3I8VD4gewogIGNvbnN0IEJhc2VWaXNpdG9yKCk7CgogIFQgdmlzaXROb2RlKE5vZGUgbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBUIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUpID0+IHZpc2l0Tm9kZShub2RlKTsKCiAgVCB2aXNpdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSkgPT4gdmlzaXROb2RlKG5vZGUpOwogIFQgdmlzaXRMb29wKExvb3Agbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdEp1bXAoU3RhdGVtZW50IG5vZGUpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUpOwoKICBUIHZpc2l0QmxvY2soQmxvY2sgbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSA9PiB2aXNpdFN0YXRlbWVudChub2RlKTsKICBUIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdElmKElmIG5vZGUpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUpOwogIFQgdmlzaXRGb3IoRm9yIG5vZGUpID0+IHZpc2l0TG9vcChub2RlKTsKICBUIHZpc2l0Rm9ySW4oRm9ySW4gbm9kZSkgPT4gdmlzaXRMb29wKG5vZGUpOwogIFQgdmlzaXRXaGlsZShXaGlsZSBub2RlKSA9PiB2aXNpdExvb3Aobm9kZSk7CiAgVCB2aXNpdERvKERvIG5vZGUpID0+IHZpc2l0TG9vcChub2RlKTsKICBUIHZpc2l0Q29udGludWUoQ29udGludWUgbm9kZSkgPT4gdmlzaXRKdW1wKG5vZGUpOwogIFQgdmlzaXRCcmVhayhCcmVhayBub2RlKSA9PiB2aXNpdEp1bXAobm9kZSk7CiAgVCB2aXNpdFJldHVybihSZXR1cm4gbm9kZSkgPT4gdmlzaXRKdW1wKG5vZGUpOwogIFQgdmlzaXRUaHJvdyhUaHJvdyBub2RlKSA9PiB2aXNpdEp1bXAobm9kZSk7CiAgVCB2aXNpdFRyeShUcnkgbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdFN3aXRjaChTd2l0Y2ggbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSA9PiB2aXNpdFN0YXRlbWVudChub2RlKTsKICBUIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CgogIFQgdmlzaXRDYXRjaChDYXRjaCBub2RlKSA9PiB2aXNpdE5vZGUobm9kZSk7CiAgVCB2aXNpdENhc2UoQ2FzZSBub2RlKSA9PiB2aXNpdE5vZGUobm9kZSk7CiAgVCB2aXNpdERlZmF1bHQoRGVmYXVsdCBub2RlKSA9PiB2aXNpdE5vZGUobm9kZSk7CgogIFQgdmlzaXRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSkgPT4gdmlzaXROb2RlKG5vZGUpOwogIFQgdmlzaXRWYXJpYWJsZVJlZmVyZW5jZShWYXJpYWJsZVJlZmVyZW5jZSBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CgogIFQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUpID0+CiAgICAgIHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0QXNzaWdubWVudChBc3NpZ25tZW50IG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihWYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLnZhbHVlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHZpc2l0QXNzaWdubWVudChub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgICB9CiAgfQoKICBUIHZpc2l0Q29uZGl0aW9uYWwoQ29uZGl0aW9uYWwgbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXROZXcoTmV3IG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0Q2FsbChDYWxsIG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0QmluYXJ5KEJpbmFyeSBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdFByZWZpeChQcmVmaXggbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXRQb3N0Zml4KFBvc3RmaXggbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXRBY2Nlc3MoUHJvcGVydHlBY2Nlc3Mgbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwoKICBUIHZpc2l0VmFyaWFibGVVc2UoVmFyaWFibGVVc2Ugbm9kZSkgPT4gdmlzaXRWYXJpYWJsZVJlZmVyZW5jZShub2RlKTsKICBUIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpID0+CiAgICAgIHZpc2l0VmFyaWFibGVSZWZlcmVuY2Uobm9kZSk7CiAgVCB2aXNpdFBhcmFtZXRlcihQYXJhbWV0ZXIgbm9kZSkgPT4gdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpOwogIFQgdmlzaXRUaGlzKFRoaXMgbm9kZSkgPT4gdmlzaXRQYXJhbWV0ZXIobm9kZSk7CgogIFQgdmlzaXROYW1lZEZ1bmN0aW9uKE5hbWVkRnVuY3Rpb24gbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXRGdW4oRnVuIG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKCiAgVCB2aXNpdFRva2VuKERlZmVycmVkVG9rZW4gbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwoKICBUIHZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKERlZmVycmVkRXhwcmVzc2lvbiBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdERlZmVycmVkTnVtYmVyKERlZmVycmVkTnVtYmVyIG5vZGUpID0+IHZpc2l0VG9rZW4obm9kZSk7CiAgVCB2aXNpdERlZmVycmVkU3RyaW5nKERlZmVycmVkU3RyaW5nIG5vZGUpID0+IHZpc2l0VG9rZW4obm9kZSk7CgogIFQgdmlzaXRMaXRlcmFsKExpdGVyYWwgbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwoKICBUIHZpc2l0TGl0ZXJhbEJvb2woTGl0ZXJhbEJvb2wgbm9kZSkgPT4gdmlzaXRMaXRlcmFsKG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSkgPT4gdmlzaXRMaXRlcmFsKG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsTnVtYmVyKExpdGVyYWxOdW1iZXIgbm9kZSkgPT4gdmlzaXRMaXRlcmFsKG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsTnVsbChMaXRlcmFsTnVsbCBub2RlKSA9PiB2aXNpdExpdGVyYWwobm9kZSk7CgogIFQgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgPT4gdmlzaXRMaXRlcmFsKG5vZGUpOwoKICBUIHZpc2l0TmFtZShOYW1lIG5vZGUpID0+IHZpc2l0Tm9kZShub2RlKTsKCiAgVCB2aXNpdFBhcmVudGhlc2VzKFBhcmVudGhlc2VzIG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKCiAgVCB2aXNpdEFycmF5SW5pdGlhbGl6ZXIoQXJyYXlJbml0aWFsaXplciBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdEFycmF5SG9sZShBcnJheUhvbGUgbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXRPYmplY3RJbml0aWFsaXplcihPYmplY3RJbml0aWFsaXplciBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdFByb3BlcnR5KFByb3BlcnR5IG5vZGUpID0+IHZpc2l0Tm9kZShub2RlKTsKICBUIHZpc2l0UmVnRXhwTGl0ZXJhbChSZWdFeHBMaXRlcmFsIG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKCiAgVCB2aXNpdEludGVycG9sYXRlZE5vZGUoSW50ZXJwb2xhdGVkTm9kZSBub2RlKSA9PiB2aXNpdE5vZGUobm9kZSk7CgogIFQgdmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKEludGVycG9sYXRlZEV4cHJlc3Npb24gbm9kZSkgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKEludGVycG9sYXRlZExpdGVyYWwgbm9kZSkgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIoSW50ZXJwb2xhdGVkUGFyYW1ldGVyIG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3IoSW50ZXJwb2xhdGVkU2VsZWN0b3Igbm9kZSkgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQoSW50ZXJwb2xhdGVkU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKICB9CgogIC8vIElnbm9yZSBjb21tZW50cyBieSBkZWZhdWx0LgogIFQgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSkgPT4gbnVsbDsKCiAgVCB2aXNpdEF3YWl0KEF3YWl0IG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0RGFydFlpZWxkKERhcnRZaWVsZCBub2RlKSA9PiB2aXNpdFN0YXRlbWVudChub2RlKTsKfQoKYWJzdHJhY3QgY2xhc3MgTm9kZVZpc2l0b3IxPFIsIEE+IHsKICBSIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdEJsb2NrKEJsb2NrIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRJZihJZiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEZvcihGb3Igbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRGb3JJbihGb3JJbiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdFdoaWxlKFdoaWxlIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0RG8oRG8gbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRDb250aW51ZShDb250aW51ZSBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEJyZWFrKEJyZWFrIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0UmV0dXJuKFJldHVybiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdFRocm93KFRocm93IG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0VHJ5KFRyeSBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdENhdGNoKENhdGNoIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0U3dpdGNoKFN3aXRjaCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdENhc2UoQ2FzZSBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdERlZmF1bHQoRGVmYXVsdCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoTGl0ZXJhbFN0YXRlbWVudCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdERhcnRZaWVsZChEYXJ0WWllbGQgbm9kZSwgQSBhcmcpOwoKICBSIHZpc2l0TGl0ZXJhbEV4cHJlc3Npb24oTGl0ZXJhbEV4cHJlc3Npb24gbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEFzc2lnbm1lbnQoQXNzaWdubWVudCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdENvbmRpdGlvbmFsKENvbmRpdGlvbmFsIGNvbmQsIEEgYXJnKTsKICBSIHZpc2l0TmV3KE5ldyBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdENhbGwoQ2FsbCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEJpbmFyeShCaW5hcnkgbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRQcmVmaXgoUHJlZml4IG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0UG9zdGZpeChQb3N0Zml4IG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdFZhcmlhYmxlVXNlKFZhcmlhYmxlVXNlIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0VGhpcyhUaGlzIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0UGFyYW1ldGVyKFBhcmFtZXRlciBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEFjY2VzcyhQcm9wZXJ0eUFjY2VzcyBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXROYW1lZEZ1bmN0aW9uKE5hbWVkRnVuY3Rpb24gbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRGdW4oRnVuIG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihEZWZlcnJlZEV4cHJlc3Npb24gbm9kZSwgQSBhcmcpOwogIFIgdmlzaXREZWZlcnJlZE51bWJlcihEZWZlcnJlZE51bWJlciBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdERlZmVycmVkU3RyaW5nKERlZmVycmVkU3RyaW5nIG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdExpdGVyYWxCb29sKExpdGVyYWxCb29sIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0TGl0ZXJhbFN0cmluZyhMaXRlcmFsU3RyaW5nIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0TGl0ZXJhbE51bWJlcihMaXRlcmFsTnVtYmVyIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0TGl0ZXJhbE51bGwoTGl0ZXJhbE51bGwgbm9kZSwgQSBhcmcpOwoKICBSIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdE5hbWUoTmFtZSBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXRQYXJlbnRoZXNlcyhQYXJlbnRoZXNlcyBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXRBcnJheUluaXRpYWxpemVyKEFycmF5SW5pdGlhbGl6ZXIgbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRBcnJheUhvbGUoQXJyYXlIb2xlIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRQcm9wZXJ0eShQcm9wZXJ0eSBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdFJlZ0V4cExpdGVyYWwoUmVnRXhwTGl0ZXJhbCBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXRBd2FpdChBd2FpdCBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSwgQSBhcmcpOwoKICBSIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0SW50ZXJwb2xhdGVkTGl0ZXJhbChJbnRlcnBvbGF0ZWRMaXRlcmFsIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKEludGVycG9sYXRlZFBhcmFtZXRlciBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZFNlbGVjdG9yKEludGVycG9sYXRlZFNlbGVjdG9yIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0SW50ZXJwb2xhdGVkU3RhdGVtZW50KEludGVycG9sYXRlZFN0YXRlbWVudCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uKEludGVycG9sYXRlZERlY2xhcmF0aW9uIG5vZGUsIEEgYXJnKTsKfQoKY2xhc3MgQmFzZVZpc2l0b3IxPFIsIEE+IGltcGxlbWVudHMgTm9kZVZpc2l0b3IxPFIsIEE+IHsKICBjb25zdCBCYXNlVmlzaXRvcjEoKTsKCiAgUiB2aXNpdE5vZGUoTm9kZSBub2RlLCBBIGFyZykgewogICAgbm9kZS52aXNpdENoaWxkcmVuMSh0aGlzLCBhcmcpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBSIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUsIEEgYXJnKSA9PiB2aXNpdE5vZGUobm9kZSwgYXJnKTsKCiAgUiB2aXNpdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpID0+IHZpc2l0Tm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRMb29wKExvb3Agbm9kZSwgQSBhcmcpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEp1bXAoU3RhdGVtZW50IG5vZGUsIEEgYXJnKSA9PiB2aXNpdFN0YXRlbWVudChub2RlLCBhcmcpOwoKICBSIHZpc2l0QmxvY2soQmxvY2sgbm9kZSwgQSBhcmcpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdElmKElmIG5vZGUsIEEgYXJnKSA9PiB2aXNpdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRGb3IoRm9yIG5vZGUsIEEgYXJnKSA9PiB2aXNpdExvb3Aobm9kZSwgYXJnKTsKICBSIHZpc2l0Rm9ySW4oRm9ySW4gbm9kZSwgQSBhcmcpID0+IHZpc2l0TG9vcChub2RlLCBhcmcpOwogIFIgdmlzaXRXaGlsZShXaGlsZSBub2RlLCBBIGFyZykgPT4gdmlzaXRMb29wKG5vZGUsIGFyZyk7CiAgUiB2aXNpdERvKERvIG5vZGUsIEEgYXJnKSA9PiB2aXNpdExvb3Aobm9kZSwgYXJnKTsKICBSIHZpc2l0Q29udGludWUoQ29udGludWUgbm9kZSwgQSBhcmcpID0+IHZpc2l0SnVtcChub2RlLCBhcmcpOwogIFIgdmlzaXRCcmVhayhCcmVhayBub2RlLCBBIGFyZykgPT4gdmlzaXRKdW1wKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFJldHVybihSZXR1cm4gbm9kZSwgQSBhcmcpID0+IHZpc2l0SnVtcChub2RlLCBhcmcpOwogIFIgdmlzaXRUaHJvdyhUaHJvdyBub2RlLCBBIGFyZykgPT4gdmlzaXRKdW1wKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRyeShUcnkgbm9kZSwgQSBhcmcpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN3aXRjaChTd2l0Y2ggbm9kZSwgQSBhcmcpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CgogIFIgdmlzaXRDYXRjaChDYXRjaCBub2RlLCBBIGFyZykgPT4gdmlzaXROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdENhc2UoQ2FzZSBub2RlLCBBIGFyZykgPT4gdmlzaXROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdERlZmF1bHQoRGVmYXVsdCBub2RlLCBBIGFyZykgPT4gdmlzaXROb2RlKG5vZGUsIGFyZyk7CgogIFIgdmlzaXRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSwgQSBhcmcpID0+IHZpc2l0Tm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZVJlZmVyZW5jZShWYXJpYWJsZVJlZmVyZW5jZSBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CgogIFIgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0QXNzaWdubWVudChBc3NpZ25tZW50IG5vZGUsIEEgYXJnKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihWYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUsIEEgYXJnKSB7CiAgICBpZiAobm9kZS52YWx1ZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiB2aXNpdEFzc2lnbm1lbnQobm9kZSwgYXJnKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICAgIH0KICB9CgogIFIgdmlzaXRDb25kaXRpb25hbChDb25kaXRpb25hbCBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdE5ldyhOZXcgbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRDYWxsKENhbGwgbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRCaW5hcnkoQmluYXJ5IG5vZGUsIEEgYXJnKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0UHJlZml4KFByZWZpeCBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFBvc3RmaXgoUG9zdGZpeCBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFjY2VzcyhQcm9wZXJ0eUFjY2VzcyBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CgogIFIgdmlzaXRWYXJpYWJsZVVzZShWYXJpYWJsZVVzZSBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRWYXJpYWJsZVJlZmVyZW5jZShub2RlLCBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0VmFyaWFibGVSZWZlcmVuY2Uobm9kZSwgYXJnKTsKICBSIHZpc2l0UGFyYW1ldGVyKFBhcmFtZXRlciBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRoaXMoVGhpcyBub2RlLCBBIGFyZykgPT4gdmlzaXRQYXJhbWV0ZXIobm9kZSwgYXJnKTsKCiAgUiB2aXNpdE5hbWVkRnVuY3Rpb24oTmFtZWRGdW5jdGlvbiBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEZ1bihGdW4gbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwoKICBSIHZpc2l0VG9rZW4oRGVmZXJyZWRUb2tlbiBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CgogIFIgdmlzaXREZWZlcnJlZEV4cHJlc3Npb24oRGVmZXJyZWRFeHByZXNzaW9uIG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0RGVmZXJyZWROdW1iZXIoRGVmZXJyZWROdW1iZXIgbm9kZSwgQSBhcmcpID0+IHZpc2l0VG9rZW4obm9kZSwgYXJnKTsKICBSIHZpc2l0RGVmZXJyZWRTdHJpbmcoRGVmZXJyZWRTdHJpbmcgbm9kZSwgQSBhcmcpID0+IHZpc2l0VG9rZW4obm9kZSwgYXJnKTsKCiAgUiB2aXNpdExpdGVyYWwoTGl0ZXJhbCBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CgogIFIgdmlzaXRMaXRlcmFsQm9vbChMaXRlcmFsQm9vbCBub2RlLCBBIGFyZykgPT4gdmlzaXRMaXRlcmFsKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExpdGVyYWxTdHJpbmcoTGl0ZXJhbFN0cmluZyBub2RlLCBBIGFyZykgPT4gdmlzaXRMaXRlcmFsKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExpdGVyYWxOdW1iZXIoTGl0ZXJhbE51bWJlciBub2RlLCBBIGFyZykgPT4gdmlzaXRMaXRlcmFsKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExpdGVyYWxOdWxsKExpdGVyYWxOdWxsIG5vZGUsIEEgYXJnKSA9PiB2aXNpdExpdGVyYWwobm9kZSwgYXJnKTsKCiAgUiB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRMaXRlcmFsKG5vZGUsIGFyZyk7CgogIFIgdmlzaXROYW1lKE5hbWUgbm9kZSwgQSBhcmcpID0+IHZpc2l0Tm9kZShub2RlLCBhcmcpOwoKICBSIHZpc2l0UGFyZW50aGVzZXMoUGFyZW50aGVzZXMgbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwoKICBSIHZpc2l0QXJyYXlJbml0aWFsaXplcihBcnJheUluaXRpYWxpemVyIG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0QXJyYXlIb2xlKEFycmF5SG9sZSBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdE9iamVjdEluaXRpYWxpemVyKE9iamVjdEluaXRpYWxpemVyIG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0UHJvcGVydHkoUHJvcGVydHkgbm9kZSwgQSBhcmcpID0+IHZpc2l0Tm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRSZWdFeHBMaXRlcmFsKFJlZ0V4cExpdGVyYWwgbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwoKICBSIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShJbnRlcnBvbGF0ZWROb2RlIG5vZGUsIEEgYXJnKSA9PiB2aXNpdE5vZGUobm9kZSwgYXJnKTsKCiAgUiB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24oSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcihJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIgbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3RvcihJbnRlcnBvbGF0ZWRTZWxlY3RvciBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZFN0YXRlbWVudChJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbihJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbiBub2RlLCBBIGFyZykgewogICAgcmV0dXJuIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlLCBhcmcpOwogIH0KCiAgLy8gSWdub3JlIGNvbW1lbnRzIGJ5IGRlZmF1bHQuCiAgUiB2aXNpdENvbW1lbnQoQ29tbWVudCBub2RlLCBBIGFyZykgPT4gbnVsbDsKCiAgUiB2aXNpdEF3YWl0KEF3YWl0IG5vZGUsIEEgYXJnKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0RGFydFlpZWxkKERhcnRZaWVsZCBub2RlLCBBIGFyZykgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKfQoKLy8vIFRoaXMgdGFnIGludGVyZmFjZSBoYXMgbm8gYmVoYXZpb3VyIGJ1dCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGFueSBjbGFzcwovLy8gdGhhdCBpcyB0byBiZSBzdG9yZWQgb24gYSBbTm9kZV0gYXMgc291cmNlIGluZm9ybWF0aW9uLgphYnN0cmFjdCBjbGFzcyBKYXZhU2NyaXB0Tm9kZVNvdXJjZUluZm9ybWF0aW9uIHsKICBjb25zdCBKYXZhU2NyaXB0Tm9kZVNvdXJjZUluZm9ybWF0aW9uKCk7Cn0KCmFic3RyYWN0IGNsYXNzIE5vZGUgewogIEphdmFTY3JpcHROb2RlU291cmNlSW5mb3JtYXRpb24gZ2V0IHNvdXJjZUluZm9ybWF0aW9uID0+IF9zb3VyY2VJbmZvcm1hdGlvbjsKCiAgSmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbiBfc291cmNlSW5mb3JtYXRpb247CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpOwogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZyk7CiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpOwoKICAvLyBTaGFsbG93IGNsb25lIG9mIG5vZGUuICBEb2VzIG5vdCBjbG9uZSBwb3NpdGlvbnMgc2luY2UgdGhlIG9ubHkgdXNlIG9mIHRoaXMKICAvLyBwcml2YXRlIG1ldGhvZCBpcyBjcmVhdGUgYSBjb3B5IHdpdGggYSBuZXcgcG9zaXRpb24uCiAgTm9kZSBfY2xvbmUoKTsKCiAgLy8gUmV0dXJucyBhIG5vZGUgZXF1aXZhbGVudCB0byBbdGhpc10sIGJ1dCB3aXRoIG5ldyBzb3VyY2UgcG9zaXRpb24gYW5kIGVuZAogIC8vIHNvdXJjZSBwb3NpdGlvbi4KICBOb2RlIHdpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgSmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uID09IF9zb3VyY2VJbmZvcm1hdGlvbikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIE5vZGUgY2xvbmUgPSBfY2xvbmUoKTsKICAgIC8vIFRPRE8oc3JhKTogU2hvdWxkIGV4aXN0aW5nIGRhdGEgYmUgJ3N0aWNreScgaWYgd2UgdHJ5IHRvIG92ZXJ3cml0ZSB3aXRoCiAgICAvLyBgbnVsbGA/CiAgICBjbG9uZS5fc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIHJldHVybiBjbG9uZTsKICB9CgogIFZhcmlhYmxlVXNlIGFzVmFyaWFibGVVc2UoKSA9PiBudWxsOwoKICBib29sIGdldCBpc0NvbW1hT3BlcmF0b3IgPT4gZmFsc2U7CgogIFN0YXRlbWVudCB0b1N0YXRlbWVudCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCd0b1N0YXRlbWVudCcpOwogIH0KCiAgU3RyaW5nIGRlYnVnUHJpbnQoKSA9PiBEZWJ1Z1ByaW50KHRoaXMpOwp9CgpjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgZmluYWwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHk7CiAgUHJvZ3JhbSh0aGlzLmJvZHkpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UHJvZ3JhbSh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFByb2dyYW0odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoU3RhdGVtZW50IHN0YXRlbWVudCBpbiBib2R5KSBzdGF0ZW1lbnQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGZvciAoU3RhdGVtZW50IHN0YXRlbWVudCBpbiBib2R5KSBzdGF0ZW1lbnQuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgUHJvZ3JhbSBfY2xvbmUoKSA9PiBuZXcgUHJvZ3JhbShib2R5KTsKfQoKYWJzdHJhY3QgY2xhc3MgU3RhdGVtZW50IGV4dGVuZHMgTm9kZSB7CiAgU3RhdGVtZW50IHRvU3RhdGVtZW50KCkgPT4gdGhpczsKfQoKY2xhc3MgQmxvY2sgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzOwoKICBCbG9jayh0aGlzLnN0YXRlbWVudHMpOwoKICBCbG9jay5lbXB0eSgpIDogdGhpcy5zdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJsb2NrKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0QmxvY2sodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoU3RhdGVtZW50IHN0YXRlbWVudCBpbiBzdGF0ZW1lbnRzKSBzdGF0ZW1lbnQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGZvciAoU3RhdGVtZW50IHN0YXRlbWVudCBpbiBzdGF0ZW1lbnRzKSBzdGF0ZW1lbnQuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgQmxvY2sgX2Nsb25lKCkgPT4gbmV3IEJsb2NrKHN0YXRlbWVudHMpOwp9CgpjbGFzcyBFeHByZXNzaW9uU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIEV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcy5leHByZXNzaW9uKSB7CiAgICBhc3NlcnQodGhpcy5leHByZXNzaW9uICE9IG51bGwpOwogIH0KCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBleHByZXNzaW9uLmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBleHByZXNzaW9uLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIEV4cHJlc3Npb25TdGF0ZW1lbnQgX2Nsb25lKCkgPT4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbik7Cn0KCmNsYXNzIEVtcHR5U3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBFbXB0eVN0YXRlbWVudCgpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RW1wdHlTdGF0ZW1lbnQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRFbXB0eVN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikge30KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHt9CgogIEVtcHR5U3RhdGVtZW50IF9jbG9uZSgpID0+IG5ldyBFbXB0eVN0YXRlbWVudCgpOwp9CgpjbGFzcyBJZiBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgZmluYWwgU3RhdGVtZW50IHRoZW47CiAgZmluYWwgU3RhdGVtZW50IG90aGVyd2lzZTsKCiAgSWYodGhpcy5jb25kaXRpb24sIHRoaXMudGhlbiwgdGhpcy5vdGhlcndpc2UpOwoKICBJZi5ub0Vsc2UodGhpcy5jb25kaXRpb24sIHRoaXMudGhlbikgOiB0aGlzLm90aGVyd2lzZSA9IG5ldyBFbXB0eVN0YXRlbWVudCgpOwoKICBib29sIGdldCBoYXNFbHNlID0+IG90aGVyd2lzZSBpcyEgRW1wdHlTdGF0ZW1lbnQ7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJZih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdElmKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBjb25kaXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgdGhlbi5hY2NlcHQodmlzaXRvcik7CiAgICBvdGhlcndpc2UuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGNvbmRpdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICB0aGVuLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIG90aGVyd2lzZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBJZiBfY2xvbmUoKSA9PiBuZXcgSWYoY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UpOwp9CgphYnN0cmFjdCBjbGFzcyBMb29wIGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBTdGF0ZW1lbnQgYm9keTsKCiAgTG9vcCh0aGlzLmJvZHkpOwp9CgpjbGFzcyBGb3IgZXh0ZW5kcyBMb29wIHsKICBmaW5hbCBFeHByZXNzaW9uIGluaXQ7CiAgZmluYWwgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgZmluYWwgRXhwcmVzc2lvbiB1cGRhdGU7CgogIEZvcih0aGlzLmluaXQsIHRoaXMuY29uZGl0aW9uLCB0aGlzLnVwZGF0ZSwgU3RhdGVtZW50IGJvZHkpIDogc3VwZXIoYm9keSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGb3IodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRGb3IodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGlmIChpbml0ICE9IG51bGwpIGluaXQuYWNjZXB0KHZpc2l0b3IpOwogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSBjb25kaXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgaWYgKHVwZGF0ZSAhPSBudWxsKSB1cGRhdGUuYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgaWYgKGluaXQgIT0gbnVsbCkgaW5pdC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIGNvbmRpdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBpZiAodXBkYXRlICE9IG51bGwpIHVwZGF0ZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIEZvciBfY2xvbmUoKSA9PiBuZXcgRm9yKGluaXQsIGNvbmRpdGlvbiwgdXBkYXRlLCBib2R5KTsKfQoKY2xhc3MgRm9ySW4gZXh0ZW5kcyBMb29wIHsKICAvLyBOb3RlIHRoYXQgW1ZhcmlhYmxlRGVjbGFyYXRpb25MaXN0XSBpcyBhIHN1YmNsYXNzIG9mIFtFeHByZXNzaW9uXS4KICAvLyBUaGVyZWZvcmUgd2UgY2FuIHR5cGUgdGhlIGxlZnRIYW5kU2lkZSBhcyBbRXhwcmVzc2lvbl0uCiAgZmluYWwgRXhwcmVzc2lvbiBsZWZ0SGFuZFNpZGU7CiAgZmluYWwgRXhwcmVzc2lvbiBvYmplY3Q7CgogIEZvckluKHRoaXMubGVmdEhhbmRTaWRlLCB0aGlzLm9iamVjdCwgU3RhdGVtZW50IGJvZHkpIDogc3VwZXIoYm9keSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGb3JJbih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEZvckluKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBsZWZ0SGFuZFNpZGUuYWNjZXB0KHZpc2l0b3IpOwogICAgb2JqZWN0LmFjY2VwdCh2aXNpdG9yKTsKICAgIGJvZHkuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGxlZnRIYW5kU2lkZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBvYmplY3QuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgYm9keS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBGb3JJbiBfY2xvbmUoKSA9PiBuZXcgRm9ySW4obGVmdEhhbmRTaWRlLCBvYmplY3QsIGJvZHkpOwp9CgpjbGFzcyBXaGlsZSBleHRlbmRzIExvb3AgewogIGZpbmFsIE5vZGUgY29uZGl0aW9uOwoKICBXaGlsZSh0aGlzLmNvbmRpdGlvbiwgU3RhdGVtZW50IGJvZHkpIDogc3VwZXIoYm9keSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRXaGlsZSh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFdoaWxlKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBjb25kaXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgY29uZGl0aW9uLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIGJvZHkuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgV2hpbGUgX2Nsb25lKCkgPT4gbmV3IFdoaWxlKGNvbmRpdGlvbiwgYm9keSk7Cn0KCmNsYXNzIERvIGV4dGVuZHMgTG9vcCB7CiAgZmluYWwgRXhwcmVzc2lvbiBjb25kaXRpb247CgogIERvKFN0YXRlbWVudCBib2R5LCB0aGlzLmNvbmRpdGlvbikgOiBzdXBlcihib2R5KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdERvKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RG8odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGJvZHkuYWNjZXB0KHZpc2l0b3IpOwogICAgY29uZGl0aW9uLmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIGNvbmRpdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBEbyBfY2xvbmUoKSA9PiBuZXcgRG8oYm9keSwgY29uZGl0aW9uKTsKfQoKY2xhc3MgQ29udGludWUgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIFN0cmluZyB0YXJnZXRMYWJlbDsgLy8gQ2FuIGJlIG51bGwuCgogIENvbnRpbnVlKHRoaXMudGFyZ2V0TGFiZWwpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q29udGludWUodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRDb250aW51ZSh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikge30KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHt9CgogIENvbnRpbnVlIF9jbG9uZSgpID0+IG5ldyBDb250aW51ZSh0YXJnZXRMYWJlbCk7Cn0KCmNsYXNzIEJyZWFrIGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBTdHJpbmcgdGFyZ2V0TGFiZWw7IC8vIENhbiBiZSBudWxsLgoKICBCcmVhayh0aGlzLnRhcmdldExhYmVsKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJyZWFrKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0QnJlYWsodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBCcmVhayBfY2xvbmUoKSA9PiBuZXcgQnJlYWsodGFyZ2V0TGFiZWwpOwp9CgpjbGFzcyBSZXR1cm4gZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIEV4cHJlc3Npb24gdmFsdWU7IC8vIENhbiBiZSBudWxsLgoKICBSZXR1cm4oW3RoaXMudmFsdWUgPSBudWxsXSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRSZXR1cm4odGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRSZXR1cm4odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgaWYgKHZhbHVlICE9IG51bGwpIHZhbHVlLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIFJldHVybiBfY2xvbmUoKSA9PiBuZXcgUmV0dXJuKHZhbHVlKTsKfQoKY2xhc3MgVGhyb3cgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgVGhyb3codGhpcy5leHByZXNzaW9uKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFRocm93KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VGhyb3codGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgVGhyb3cgX2Nsb25lKCkgPT4gbmV3IFRocm93KGV4cHJlc3Npb24pOwp9CgpjbGFzcyBUcnkgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIEJsb2NrIGJvZHk7CiAgZmluYWwgQ2F0Y2ggY2F0Y2hQYXJ0OyAvLyBDYW4gYmUgbnVsbCBpZiBbZmluYWxseVBhcnRdIGlzIG5vbi1udWxsLgogIGZpbmFsIEJsb2NrIGZpbmFsbHlQYXJ0OyAvLyBDYW4gYmUgbnVsbCBpZiBbY2F0Y2hQYXJ0XSBpcyBub24tbnVsbC4KCiAgVHJ5KHRoaXMuYm9keSwgdGhpcy5jYXRjaFBhcnQsIHRoaXMuZmluYWxseVBhcnQpIHsKICAgIGFzc2VydChjYXRjaFBhcnQgIT0gbnVsbCB8fCBmaW5hbGx5UGFydCAhPSBudWxsKTsKICB9CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUcnkodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRUcnkodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGJvZHkuYWNjZXB0KHZpc2l0b3IpOwogICAgaWYgKGNhdGNoUGFydCAhPSBudWxsKSBjYXRjaFBhcnQuYWNjZXB0KHZpc2l0b3IpOwogICAgaWYgKGZpbmFsbHlQYXJ0ICE9IG51bGwpIGZpbmFsbHlQYXJ0LmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIGlmIChjYXRjaFBhcnQgIT0gbnVsbCkgY2F0Y2hQYXJ0LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIGlmIChmaW5hbGx5UGFydCAhPSBudWxsKSBmaW5hbGx5UGFydC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBUcnkgX2Nsb25lKCkgPT4gbmV3IFRyeShib2R5LCBjYXRjaFBhcnQsIGZpbmFsbHlQYXJ0KTsKfQoKY2xhc3MgQ2F0Y2ggZXh0ZW5kcyBOb2RlIHsKICBmaW5hbCBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKICBmaW5hbCBCbG9jayBib2R5OwoKICBDYXRjaCh0aGlzLmRlY2xhcmF0aW9uLCB0aGlzLmJvZHkpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q2F0Y2godGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRDYXRjaCh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgZGVjbGFyYXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgZGVjbGFyYXRpb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgYm9keS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBDYXRjaCBfY2xvbmUoKSA9PiBuZXcgQ2F0Y2goZGVjbGFyYXRpb24sIGJvZHkpOwp9CgpjbGFzcyBTd2l0Y2ggZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIEV4cHJlc3Npb24ga2V5OwogIGZpbmFsIExpc3Q8U3dpdGNoQ2xhdXNlPiBjYXNlczsKCiAgU3dpdGNoKHRoaXMua2V5LCB0aGlzLmNhc2VzKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN3aXRjaCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFN3aXRjaCh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAga2V5LmFjY2VwdCh2aXNpdG9yKTsKICAgIGZvciAoU3dpdGNoQ2xhdXNlIGNsYXVzZSBpbiBjYXNlcykgY2xhdXNlLmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBrZXkuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgZm9yIChTd2l0Y2hDbGF1c2UgY2xhdXNlIGluIGNhc2VzKSBjbGF1c2UuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgU3dpdGNoIF9jbG9uZSgpID0+IG5ldyBTd2l0Y2goa2V5LCBjYXNlcyk7Cn0KCmFic3RyYWN0IGNsYXNzIFN3aXRjaENsYXVzZSBleHRlbmRzIE5vZGUgewogIGZpbmFsIEJsb2NrIGJvZHk7CgogIFN3aXRjaENsYXVzZSh0aGlzLmJvZHkpOwp9CgpjbGFzcyBDYXNlIGV4dGVuZHMgU3dpdGNoQ2xhdXNlIHsKICBmaW5hbCBFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIENhc2UodGhpcy5leHByZXNzaW9uLCBCbG9jayBib2R5KSA6IHN1cGVyKGJvZHkpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q2FzZSh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdENhc2UodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgZXhwcmVzc2lvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIENhc2UgX2Nsb25lKCkgPT4gbmV3IENhc2UoZXhwcmVzc2lvbiwgYm9keSk7Cn0KCmNsYXNzIERlZmF1bHQgZXh0ZW5kcyBTd2l0Y2hDbGF1c2UgewogIERlZmF1bHQoQmxvY2sgYm9keSkgOiBzdXBlcihib2R5KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdERlZmF1bHQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXREZWZhdWx0KHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBib2R5LmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIERlZmF1bHQgX2Nsb25lKCkgPT4gbmV3IERlZmF1bHQoYm9keSk7Cn0KCmNsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb24gZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIERlY2xhcmF0aW9uIG5hbWU7CiAgZmluYWwgRnVuIGZ1bmN0aW9uOwoKICBGdW5jdGlvbkRlY2xhcmF0aW9uKHRoaXMubmFtZSwgdGhpcy5mdW5jdGlvbik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgbmFtZS5hY2NlcHQodmlzaXRvcik7CiAgICBmdW5jdGlvbi5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgbmFtZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBmdW5jdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBGdW5jdGlvbkRlY2xhcmF0aW9uIF9jbG9uZSgpID0+IG5ldyBGdW5jdGlvbkRlY2xhcmF0aW9uKG5hbWUsIGZ1bmN0aW9uKTsKfQoKY2xhc3MgTGFiZWxlZFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgU3RyaW5nIGxhYmVsOwogIGZpbmFsIFN0YXRlbWVudCBib2R5OwoKICBMYWJlbGVkU3RhdGVtZW50KHRoaXMubGFiZWwsIHRoaXMuYm9keSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMYWJlbGVkU3RhdGVtZW50KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TGFiZWxlZFN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgYm9keS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBMYWJlbGVkU3RhdGVtZW50IF9jbG9uZSgpID0+IG5ldyBMYWJlbGVkU3RhdGVtZW50KGxhYmVsLCBib2R5KTsKfQoKY2xhc3MgTGl0ZXJhbFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgU3RyaW5nIGNvZGU7CgogIExpdGVyYWxTdGF0ZW1lbnQodGhpcy5jb2RlKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExpdGVyYWxTdGF0ZW1lbnQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgTGl0ZXJhbFN0YXRlbWVudCBfY2xvbmUoKSA9PiBuZXcgTGl0ZXJhbFN0YXRlbWVudChjb2RlKTsKfQoKLy8gTm90IGEgcmVhbCBKYXZhU2NyaXB0IG5vZGUsIGJ1dCByZXByZXNlbnRzIHRoZSB5aWVsZCBzdGF0ZW1lbnQgZnJvbSBhIGRhcnQKLy8gcHJvZ3JhbSB0cmFuc2xhdGVkIHRvIEphdmFTY3JpcHQuCmNsYXNzIERhcnRZaWVsZCBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgRXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBmaW5hbCBib29sIGhhc1N0YXI7CgogIERhcnRZaWVsZCh0aGlzLmV4cHJlc3Npb24sIHRoaXMuaGFzU3Rhcik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXREYXJ0WWllbGQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXREYXJ0WWllbGQodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgRGFydFlpZWxkIF9jbG9uZSgpID0+IG5ldyBEYXJ0WWllbGQoZXhwcmVzc2lvbiwgaGFzU3Rhcik7Cn0KCmFic3RyYWN0IGNsYXNzIEV4cHJlc3Npb24gZXh0ZW5kcyBOb2RlIHsKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbDsKCiAgU3RhdGVtZW50IHRvU3RhdGVtZW50KCkgPT4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcyk7Cn0KCmFic3RyYWN0IGNsYXNzIERlY2xhcmF0aW9uIGltcGxlbWVudHMgVmFyaWFibGVSZWZlcmVuY2Uge30KCi8vLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBbTmFtZV0gcmVwcmVzZW50cyBhIHBvdGVudGlhbGx5IGxhdGUgYm91bmQgbmFtZSBpbgovLy8gdGhlIGdlbmVyYXRlZCBhc3QuCi8vLwovLy8gV2hpbGUgW05hbWVdIGltcGxlbWVudHMgY29tcGFyYWJsZSwgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgb24gdGhlIGFjdHVhbAovLy8gaW1wbGVtZW50YXRpb24gb2YgW2NvbXBhcmVUb10gb3RoZXIgdGhhbiB0aGF0IGl0IG5lZWRzIHRvIGJlIHN0YWJsZS4KLy8vIEluIHBhcnRpY3VsYXIsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGltcGxlbWVudGF0aW9ucyBvZiBbY29tcGFyZVRvXQovLy8gd2lsbCBpbXBsZW1lbnQgc29tZSBmb3JtIG9mIGxleGljb2dyYXBoaWMgb3JkZXJpbmcgbGlrZSBbU3RyaW5nLmNvbXBhcmVUb10uCmFic3RyYWN0IGNsYXNzIE5hbWUgZXh0ZW5kcyBMaXRlcmFsCiAgICBpbXBsZW1lbnRzIERlY2xhcmF0aW9uLCBQYXJhbWV0ZXIsIENvbXBhcmFibGU8TmFtZT4gewogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXROYW1lKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TmFtZSh0aGlzLCBhcmcpOwoKICBOYW1lIF9jbG9uZSgpOwoKICAvLy8gUmV0dXJucyBhIHVuaXF1ZSBba2V5XSBmb3IgdGhpcyBuYW1lLgogIC8vLwogIC8vLyBUaGUga2V5IGlzIHVucmVsYXRlZCB0byB0aGUgYWN0dWFsIG5hbWUgYW5kIGlzIG5vdCBpbnRlbmRlZCBmb3IgaHVtYW4KICAvLy8gY29uc3VtcHRpb24uIEFzIHN1Y2gsIGl0IG1pZ2h0IGJlIGxvbmcgb3IgY3J5cHRpYy4KICBTdHJpbmcgZ2V0IGtleTsKCiAgYm9vbCBnZXQgYWxsb3dSZW5hbWUgPT4gZmFsc2U7Cn0KCmNsYXNzIExpdGVyYWxTdHJpbmdGcm9tTmFtZSBleHRlbmRzIExpdGVyYWxTdHJpbmcgewogIE5hbWUgbmFtZTsKCiAgTGl0ZXJhbFN0cmluZ0Zyb21OYW1lKHRoaXMubmFtZSkgOiBzdXBlcihudWxsKTsKCiAgU3RyaW5nIGdldCB2YWx1ZSA9PiAnIiR7bmFtZS5uYW1lfSInOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgbmFtZS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgbmFtZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQp9CgpjbGFzcyBMaXRlcmFsRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIFN0cmluZyB0ZW1wbGF0ZTsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGlucHV0czsKCiAgTGl0ZXJhbEV4cHJlc3Npb24odGhpcy50ZW1wbGF0ZSkgOiBpbnB1dHMgPSBjb25zdCBbXTsKCiAgTGl0ZXJhbEV4cHJlc3Npb24ud2l0aERhdGEodGhpcy50ZW1wbGF0ZSwgdGhpcy5pbnB1dHMpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGl0ZXJhbEV4cHJlc3Npb24odGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsRXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgaWYgKGlucHV0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByIGluIGlucHV0cykgZXhwci5hY2NlcHQodmlzaXRvcik7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgaWYgKGlucHV0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByIGluIGlucHV0cykgZXhwci5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICB9CiAgfQoKICBMaXRlcmFsRXhwcmVzc2lvbiBfY2xvbmUoKSA9PgogICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24ud2l0aERhdGEodGVtcGxhdGUsIGlucHV0cyk7CgogIC8vIENvZGUgdGhhdCB1c2VzIEpTIG11c3QgdGFrZSBjYXJlIG9mIG9wZXJhdG9yIHByZWNlZGVuY2VzLCBhbmQKICAvLyBwdXQgcGFyZW50aGVzaXMgaWYgbmVlZGVkLgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCi8qKgogKiBbVmFyaWFibGVEZWNsYXJhdGlvbkxpc3RdIGlzIGEgc3ViY2xhc3Mgb2YgW0V4cHJlc3Npb25dIHRvIHNpbXBsaWZ5IHRoZQogKiBBU1QuCiAqLwpjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIExpc3Q8VmFyaWFibGVJbml0aWFsaXphdGlvbj4gZGVjbGFyYXRpb25zOwoKICAvLy8gV2hlbiBwcmV0dHktcHJpbnRpbmcgYSBkZWNsYXJhdGlvbiBsaXN0IHdpdGggbXVsdGlwbGUgZGVjbGFyYXRpb25zIG92ZXIKICAvLy8gc2V2ZXJhbCBsaW5lcywgdGhlIGRlY2xhcmF0aW9ucyBhcmUgdXN1YWxseSBpbmRlbnRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlCiAgLy8vIGB2YXJgIGtleXdvcmQuIFNldCBbaW5kZW50U3BsaXRzXSB0byBgZmFsc2VgIHRvIHN1cHByZXNzIHRoZSBpbmRlbnRhdGlvbi4KICBmaW5hbCBib29sIGluZGVudFNwbGl0czsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QodGhpcy5kZWNsYXJhdGlvbnMsIHt0aGlzLmluZGVudFNwbGl0cyA9IHRydWV9KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoVmFyaWFibGVJbml0aWFsaXphdGlvbiBkZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnMpIHsKICAgICAgZGVjbGFyYXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGZvciAoVmFyaWFibGVJbml0aWFsaXphdGlvbiBkZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnMpIHsKICAgICAgZGVjbGFyYXRpb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgfQogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgX2Nsb25lKCkgPT4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGRlY2xhcmF0aW9ucyk7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IEVYUFJFU1NJT047Cn0KCi8vLyBGb3JjZWQgcGFyZW50aGVzaXplZCBleHByZXNzaW9uLiBQcmV0dHktcHJpbnRpbmcgd2lsbCBlbWl0IHBhcmVudGhlc2VzIGJhc2VkCi8vLyBvbiBuZWVkLCBzbyB0aGlzIG5vZGUgaXMgdmVyeSByYXJlbHkgbmVlZGVkLgpjbGFzcyBQYXJlbnRoZXNlcyBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIEV4cHJlc3Npb24gZW5jbG9zZWQ7CgogIFBhcmVudGhlc2VzKHRoaXMuZW5jbG9zZWQpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UGFyZW50aGVzZXModGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRQYXJlbnRoZXNlcyh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgZW5jbG9zZWQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGVuY2xvc2VkLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIFBhcmVudGhlc2VzIF9jbG9uZSgpID0+IG5ldyBQYXJlbnRoZXNlcyhlbmNsb3NlZCk7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCmNsYXNzIEFzc2lnbm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBFeHByZXNzaW9uIGxlZnRIYW5kU2lkZTsKICBmaW5hbCBTdHJpbmcgb3A7IC8vIE51bGwsIGlmIHRoZSBhc3NpZ25tZW50IGlzIG5vdCBjb21wb3VuZC4KICBmaW5hbCBFeHByZXNzaW9uIHZhbHVlOyAvLyBNYXkgYmUgbnVsbCwgZm9yIFtWYXJpYWJsZUluaXRpYWxpemF0aW9uXXMuCgogIEFzc2lnbm1lbnQobGVmdEhhbmRTaWRlLCB2YWx1ZSkgOiB0aGlzLmNvbXBvdW5kKGxlZnRIYW5kU2lkZSwgbnVsbCwgdmFsdWUpOwoKICAvLyBJZiBgdGhpcy5vcCA9PSBudWxsYCB0aGlzIHdpbGwgYmUgYSBub24tY29tcG91bmQgYXNzaWdubWVudC4KICBBc3NpZ25tZW50LmNvbXBvdW5kKHRoaXMubGVmdEhhbmRTaWRlLCB0aGlzLm9wLCB0aGlzLnZhbHVlKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gQVNTSUdOTUVOVDsKCiAgYm9vbCBnZXQgaXNDb21wb3VuZCA9PiBvcCAhPSBudWxsOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QXNzaWdubWVudCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEFzc2lnbm1lbnQodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGxlZnRIYW5kU2lkZS5hY2NlcHQodmlzaXRvcik7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgdmFsdWUuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGxlZnRIYW5kU2lkZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgdmFsdWUuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgQXNzaWdubWVudCBfY2xvbmUoKSA9PiBuZXcgQXNzaWdubWVudC5jb21wb3VuZChsZWZ0SGFuZFNpZGUsIG9wLCB2YWx1ZSk7Cn0KCmNsYXNzIFZhcmlhYmxlSW5pdGlhbGl6YXRpb24gZXh0ZW5kcyBBc3NpZ25tZW50IHsKICAvKiogW3ZhbHVlXSBtYXkgYmUgbnVsbC4gKi8KICBWYXJpYWJsZUluaXRpYWxpemF0aW9uKERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uLCBFeHByZXNzaW9uIHZhbHVlKQogICAgICA6IHN1cGVyKGRlY2xhcmF0aW9uLCB2YWx1ZSk7CgogIERlY2xhcmF0aW9uIGdldCBkZWNsYXJhdGlvbiA9PiBsZWZ0SGFuZFNpZGU7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRWYXJpYWJsZUluaXRpYWxpemF0aW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbih0aGlzLCBhcmcpOwoKICBWYXJpYWJsZUluaXRpYWxpemF0aW9uIF9jbG9uZSgpID0+CiAgICAgIG5ldyBWYXJpYWJsZUluaXRpYWxpemF0aW9uKGRlY2xhcmF0aW9uLCB2YWx1ZSk7Cn0KCmNsYXNzIENvbmRpdGlvbmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgZmluYWwgRXhwcmVzc2lvbiB0aGVuOwogIGZpbmFsIEV4cHJlc3Npb24gb3RoZXJ3aXNlOwoKICBDb25kaXRpb25hbCh0aGlzLmNvbmRpdGlvbiwgdGhpcy50aGVuLCB0aGlzLm90aGVyd2lzZSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRDb25kaXRpb25hbCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdENvbmRpdGlvbmFsKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBjb25kaXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgdGhlbi5hY2NlcHQodmlzaXRvcik7CiAgICBvdGhlcndpc2UuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGNvbmRpdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICB0aGVuLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIG90aGVyd2lzZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBDb25kaXRpb25hbCBfY2xvbmUoKSA9PiBuZXcgQ29uZGl0aW9uYWwoY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UpOwoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiBBU1NJR05NRU5UOwp9CgpjbGFzcyBDYWxsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiB0YXJnZXQ7CiAgTGlzdDxFeHByZXNzaW9uPiBhcmd1bWVudHM7CgogIENhbGwodGhpcy50YXJnZXQsIHRoaXMuYXJndW1lbnRzLAogICAgICB7SmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIHRoaXMuX3NvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q2FsbCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdENhbGwodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIHRhcmdldC5hY2NlcHQodmlzaXRvcik7CiAgICBmb3IgKEV4cHJlc3Npb24gYXJnIGluIGFyZ3VtZW50cykgewogICAgICBhcmcuYWNjZXB0KHZpc2l0b3IpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIHRhcmdldC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBmb3IgKEV4cHJlc3Npb24gYXJnIGluIGFyZ3VtZW50cykgewogICAgICBhcmcuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgfQogIH0KCiAgQ2FsbCBfY2xvbmUoKSA9PiBuZXcgQ2FsbCh0YXJnZXQsIGFyZ3VtZW50cyk7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IENBTEw7Cn0KCmNsYXNzIE5ldyBleHRlbmRzIENhbGwgewogIE5ldyhFeHByZXNzaW9uIGNscywgTGlzdDxFeHByZXNzaW9uPiBhcmd1bWVudHMpIDogc3VwZXIoY2xzLCBhcmd1bWVudHMpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TmV3KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TmV3KHRoaXMsIGFyZyk7CgogIE5ldyBfY2xvbmUoKSA9PiBuZXcgTmV3KHRhcmdldCwgYXJndW1lbnRzKTsKfQoKY2xhc3MgQmluYXJ5IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG9wOwogIGZpbmFsIEV4cHJlc3Npb24gbGVmdDsKICBmaW5hbCBFeHByZXNzaW9uIHJpZ2h0OwoKICBCaW5hcnkodGhpcy5vcCwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJpbmFyeSh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEJpbmFyeSh0aGlzLCBhcmcpOwoKICBCaW5hcnkgX2Nsb25lKCkgPT4gbmV3IEJpbmFyeShvcCwgbGVmdCwgcmlnaHQpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgbGVmdC5hY2NlcHQodmlzaXRvcik7CiAgICByaWdodC5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgbGVmdC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICByaWdodC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBib29sIGdldCBpc0NvbW1hT3BlcmF0b3IgPT4gb3AgPT0gJywnOwoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCB7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogc3dpdGNoIHRvIGNvbnN0YW50IG1hcC4KICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAiKiI6CiAgICAgIGNhc2UgIi8iOgogICAgICBjYXNlICIlIjoKICAgICAgICByZXR1cm4gTVVMVElQTElDQVRJVkU7CiAgICAgIGNhc2UgIisiOgogICAgICBjYXNlICItIjoKICAgICAgICByZXR1cm4gQURESVRJVkU7CiAgICAgIGNhc2UgIjw8IjoKICAgICAgY2FzZSAiPj4iOgogICAgICBjYXNlICI+Pj4iOgogICAgICAgIHJldHVybiBTSElGVDsKICAgICAgY2FzZSAiPCI6CiAgICAgIGNhc2UgIj4iOgogICAgICBjYXNlICI8PSI6CiAgICAgIGNhc2UgIj49IjoKICAgICAgY2FzZSAiaW5zdGFuY2VvZiI6CiAgICAgIGNhc2UgImluIjoKICAgICAgICByZXR1cm4gUkVMQVRJT05BTDsKICAgICAgY2FzZSAiPT0iOgogICAgICBjYXNlICI9PT0iOgogICAgICBjYXNlICIhPSI6CiAgICAgIGNhc2UgIiE9PSI6CiAgICAgICAgcmV0dXJuIEVRVUFMSVRZOwogICAgICBjYXNlICImIjoKICAgICAgICByZXR1cm4gQklUX0FORDsKICAgICAgY2FzZSAiXiI6CiAgICAgICAgcmV0dXJuIEJJVF9YT1I7CiAgICAgIGNhc2UgInwiOgogICAgICAgIHJldHVybiBCSVRfT1I7CiAgICAgIGNhc2UgIiYmIjoKICAgICAgICByZXR1cm4gTE9HSUNBTF9BTkQ7CiAgICAgIGNhc2UgInx8IjoKICAgICAgICByZXR1cm4gTE9HSUNBTF9PUjsKICAgICAgY2FzZSAnLCc6CiAgICAgICAgcmV0dXJuIEVYUFJFU1NJT047CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgIkludGVybmFsIEVycm9yOiBVbmhhbmRsZWQgYmluYXJ5IG9wZXJhdG9yOiAkb3AiOwogICAgfQogIH0KfQoKY2xhc3MgUHJlZml4IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG9wOwogIGZpbmFsIEV4cHJlc3Npb24gYXJndW1lbnQ7CgogIFByZWZpeCh0aGlzLm9wLCB0aGlzLmFyZ3VtZW50KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFByZWZpeCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFByZWZpeCh0aGlzLCBhcmcpOwoKICBQcmVmaXggX2Nsb25lKCkgPT4gbmV3IFByZWZpeChvcCwgYXJndW1lbnQpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgYXJndW1lbnQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGFyZ3VtZW50LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFVOQVJZOwp9CgpjbGFzcyBQb3N0Zml4IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG9wOwogIGZpbmFsIEV4cHJlc3Npb24gYXJndW1lbnQ7CgogIFBvc3RmaXgodGhpcy5vcCwgdGhpcy5hcmd1bWVudCk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRQb3N0Zml4KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0UG9zdGZpeCh0aGlzLCBhcmcpOwoKICBQb3N0Zml4IF9jbG9uZSgpID0+IG5ldyBQb3N0Zml4KG9wLCBhcmd1bWVudCk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBhcmd1bWVudC5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgYXJndW1lbnQuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gVU5BUlk7Cn0KCmFic3RyYWN0IGNsYXNzIFZhcmlhYmxlUmVmZXJlbmNlIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIFZhcmlhYmxlUmVmZXJlbmNlKHRoaXMubmFtZSkgewogICAgYXNzZXJ0KF9pZGVudGlmaWVyUkUuaGFzTWF0Y2gobmFtZSksICJOb24taWRlbnRpZmllciBuYW1lICckbmFtZSciKTsKICB9CgogIHN0YXRpYyBSZWdFeHAgX2lkZW50aWZpZXJSRSA9IG5ldyBSZWdFeHAocideW0EtWmEtel8kXVtBLVphLXpfJDAtOV0qJCcpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQp9CgpjbGFzcyBWYXJpYWJsZVVzZSBleHRlbmRzIFZhcmlhYmxlUmVmZXJlbmNlIHsKICBWYXJpYWJsZVVzZShTdHJpbmcgbmFtZSkgOiBzdXBlcihuYW1lKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFZhcmlhYmxlVXNlKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVVc2UodGhpcywgYXJnKTsKCiAgVmFyaWFibGVVc2UgX2Nsb25lKCkgPT4gbmV3IFZhcmlhYmxlVXNlKG5hbWUpOwoKICBWYXJpYWJsZVVzZSBhc1ZhcmlhYmxlVXNlKCkgPT4gdGhpczsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1ZhcmlhYmxlVXNlKCRuYW1lKSc7Cn0KCmNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5kcyBWYXJpYWJsZVJlZmVyZW5jZSBpbXBsZW1lbnRzIERlY2xhcmF0aW9uIHsKICBmaW5hbCBib29sIGFsbG93UmVuYW1lOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uKFN0cmluZyBuYW1lLCB7dGhpcy5hbGxvd1JlbmFtZTogdHJ1ZX0pIDogc3VwZXIobmFtZSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbih0aGlzLCBhcmcpOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uIF9jbG9uZSgpID0+IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKG5hbWUpOwp9CgpjbGFzcyBQYXJhbWV0ZXIgZXh0ZW5kcyBWYXJpYWJsZURlY2xhcmF0aW9uIHsKICBQYXJhbWV0ZXIoU3RyaW5nIG5hbWUpIDogc3VwZXIobmFtZSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRQYXJhbWV0ZXIodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRQYXJhbWV0ZXIodGhpcywgYXJnKTsKCiAgUGFyYW1ldGVyIF9jbG9uZSgpID0+IG5ldyBQYXJhbWV0ZXIobmFtZSk7Cn0KCmNsYXNzIFRoaXMgZXh0ZW5kcyBQYXJhbWV0ZXIgewogIFRoaXMoKSA6IHN1cGVyKCJ0aGlzIik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUaGlzKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VGhpcyh0aGlzLCBhcmcpOwoKICBUaGlzIF9jbG9uZSgpID0+IG5ldyBUaGlzKCk7Cn0KCmNsYXNzIE5hbWVkRnVuY3Rpb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBEZWNsYXJhdGlvbiBuYW1lOwogIGZpbmFsIEZ1biBmdW5jdGlvbjsKCiAgTmFtZWRGdW5jdGlvbih0aGlzLm5hbWUsIHRoaXMuZnVuY3Rpb24pOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TmFtZWRGdW5jdGlvbih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdE5hbWVkRnVuY3Rpb24odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIG5hbWUuYWNjZXB0KHZpc2l0b3IpOwogICAgZnVuY3Rpb24uYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIG5hbWUuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgZnVuY3Rpb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgTmFtZWRGdW5jdGlvbiBfY2xvbmUoKSA9PiBuZXcgTmFtZWRGdW5jdGlvbihuYW1lLCBmdW5jdGlvbik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IExFRlRfSEFORF9TSURFOwp9CgpjbGFzcyBGdW4gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBMaXN0PFBhcmFtZXRlcj4gcGFyYW1zOwogIGZpbmFsIEJsb2NrIGJvZHk7CiAgZmluYWwgQXN5bmNNb2RpZmllciBhc3luY01vZGlmaWVyOwoKICBGdW4odGhpcy5wYXJhbXMsIHRoaXMuYm9keSwge3RoaXMuYXN5bmNNb2RpZmllcjogQXN5bmNNb2RpZmllci5zeW5jfSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGdW4odGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRGdW4odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoUGFyYW1ldGVyIHBhcmFtIGluIHBhcmFtcykgcGFyYW0uYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgZm9yIChQYXJhbWV0ZXIgcGFyYW0gaW4gcGFyYW1zKSBwYXJhbS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIEZ1biBfY2xvbmUoKSA9PiBuZXcgRnVuKHBhcmFtcywgYm9keSwgYXN5bmNNb2RpZmllcjogYXN5bmNNb2RpZmllcik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IExFRlRfSEFORF9TSURFOwp9CgpjbGFzcyBBc3luY01vZGlmaWVyIHsKICBmaW5hbCBpbnQgaW5kZXg7CiAgZmluYWwgYm9vbCBpc0FzeW5jOwogIGZpbmFsIGJvb2wgaXNZaWVsZGluZzsKICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247CgogIGNvbnN0IEFzeW5jTW9kaWZpZXIodGhpcy5pbmRleCwgdGhpcy5kZXNjcmlwdGlvbiwKICAgICAge3RoaXMuaXNBc3luYywgdGhpcy5pc1lpZWxkaW5nfSk7CgogIHN0YXRpYyBjb25zdCBBc3luY01vZGlmaWVyIHN5bmMgPQogICAgICBjb25zdCBBc3luY01vZGlmaWVyKDAsICJzeW5jIiwgaXNBc3luYzogZmFsc2UsIGlzWWllbGRpbmc6IGZhbHNlKTsKICBzdGF0aWMgY29uc3QgQXN5bmNNb2RpZmllciBhc3luYyA9CiAgICAgIGNvbnN0IEFzeW5jTW9kaWZpZXIoMSwgImFzeW5jIiwgaXNBc3luYzogdHJ1ZSwgaXNZaWVsZGluZzogZmFsc2UpOwogIHN0YXRpYyBjb25zdCBBc3luY01vZGlmaWVyIGFzeW5jU3RhciA9CiAgICAgIGNvbnN0IEFzeW5jTW9kaWZpZXIoMiwgImFzeW5jKiIsIGlzQXN5bmM6IHRydWUsIGlzWWllbGRpbmc6IHRydWUpOwogIHN0YXRpYyBjb25zdCBBc3luY01vZGlmaWVyIHN5bmNTdGFyID0KICAgICAgY29uc3QgQXN5bmNNb2RpZmllcigzLCAic3luYyoiLCBpc0FzeW5jOiBmYWxzZSwgaXNZaWVsZGluZzogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBMaXN0PEFzeW5jTW9kaWZpZXI+IHZhbHVlcyA9IFtzeW5jLCBhc3luYywgYXN5bmNTdGFyLCBzeW5jU3Rhcl07CgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlc2NyaXB0aW9uOwp9CgpjbGFzcyBQcm9wZXJ0eUFjY2VzcyBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIEV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgZmluYWwgRXhwcmVzc2lvbiBzZWxlY3RvcjsKCiAgUHJvcGVydHlBY2Nlc3ModGhpcy5yZWNlaXZlciwgdGhpcy5zZWxlY3Rvcik7CgogIFByb3BlcnR5QWNjZXNzLmZpZWxkKHRoaXMucmVjZWl2ZXIsIFN0cmluZyBmaWVsZE5hbWUpCiAgICAgIDogc2VsZWN0b3IgPSBuZXcgTGl0ZXJhbFN0cmluZygnIiRmaWVsZE5hbWUiJyk7CgogIFByb3BlcnR5QWNjZXNzLmluZGV4ZWQodGhpcy5yZWNlaXZlciwgaW50IGluZGV4KQogICAgICA6IHNlbGVjdG9yID0gbmV3IExpdGVyYWxOdW1iZXIoJyRpbmRleCcpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QWNjZXNzKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0QWNjZXNzKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICByZWNlaXZlci5hY2NlcHQodmlzaXRvcik7CiAgICBzZWxlY3Rvci5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgcmVjZWl2ZXIuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgc2VsZWN0b3IuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgUHJvcGVydHlBY2Nlc3MgX2Nsb25lKCkgPT4gbmV3IFByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBzZWxlY3Rvcik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IExFRlRfSEFORF9TSURFOwp9CgovLy8gQSBbRGVmZXJyZWRUb2tlbl0gaXMgYSBwbGFjZWhvbGRlciBmb3Igc29tZSBbRXhwcmVzc2lvbl0gdGhhdCBpcyBub3Qga25vd24KLy8vIGF0IGNvbnN0cnVjdGlvbiB0aW1lIG9mIGFuIGFzdC4gVW5saWtlIFtJbnRlcnBvbGF0ZWRFeHByZXNzaW9uXSwKLy8vIFtEZWZlcnJlZFRva2VuXSBpcyBub3QgbGltaXRlZCB0byB0ZW1wbGF0ZXMgYnV0IG1heSBhbHNvIG9jY3VyIGluCi8vLyBmdWxseSBpbnN0YW50aWF0ZWQgYXN0cy4KYWJzdHJhY3QgY2xhc3MgRGVmZXJyZWRUb2tlbiBleHRlbmRzIEV4cHJlc3Npb24gewogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgRGVmZXJyZWRUb2tlbiBfY2xvbmUoKSA9PiB0aGlzOwp9CgovLy8gSW50ZXJmYWNlIGZvciBhIGRlZmVycmVkIGludGVnZXIgdmFsdWUuIEFuIGltcGxlbWVudGF0aW9uIGhhcyB0byBwcm92aWRlCi8vLyBhIHZhbHVlIHZpYSB0aGUgW3ZhbHVlXSBnZXR0ZXIgdGhlIGxhdGVzdCB3aGVuIHRoZSBhc3QgaXMgcHJpbnRlZC4KYWJzdHJhY3QgY2xhc3MgRGVmZXJyZWROdW1iZXIgZXh0ZW5kcyBEZWZlcnJlZFRva2VuIGltcGxlbWVudHMgTGl0ZXJhbCB7CiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdERlZmVycmVkTnVtYmVyKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RGVmZXJyZWROdW1iZXIodGhpcywgYXJnKTsKCiAgaW50IGdldCB2YWx1ZTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gdmFsdWUuaXNOZWdhdGl2ZSA/IFVOQVJZIDogUFJJTUFSWTsKfQoKLy8vIEludGVyZmFjZSBmb3IgYSBkZWZlcnJlZCBzdHJpbmcgdmFsdWUuIEFuIGltcGxlbWVudGF0aW9uIGhhcyB0byBwcm92aWRlCi8vLyBhIHZhbHVlIHZpYSB0aGUgW3ZhbHVlXSBnZXR0ZXIgdGhlIGxhdGVzdCB3aGVuIHRoZSBhc3QgaXMgcHJpbnRlZC4KYWJzdHJhY3QgY2xhc3MgRGVmZXJyZWRTdHJpbmcgZXh0ZW5kcyBEZWZlcnJlZFRva2VuIGltcGxlbWVudHMgTGl0ZXJhbCB7CiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdERlZmVycmVkU3RyaW5nKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RGVmZXJyZWRTdHJpbmcodGhpcywgYXJnKTsKCiAgU3RyaW5nIGdldCB2YWx1ZTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKfQoKLy8vIEludGVyZmFjZSBmb3IgYSBkZWZlcnJlZCBbRXhwcmVzc2lvbl0gdmFsdWUuIEFuIGltcGxlbWVudGF0aW9uIGhhcyB0byBwcm92aWRlCi8vLyBhIHZhbHVlIHZpYSB0aGUgW3ZhbHVlXSBnZXR0ZXIgdGhlIGxhdGVzdCB3aGVuIHRoZSBhc3QgaXMgcHJpbnRlZC4KLy8vIEFsc28sIFtwcmVjZWRlbmNlTGV2ZWxdIGhhcyB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdAovLy8gW3ZhbHVlLnByZWNlZGVuY2VMZXZlbF0gcmV0dXJucyBvbmNlIFt2YWx1ZV0gaXMgYm91bmQgdG8gYW4gW0V4cHJlc3Npb25dLgphYnN0cmFjdCBjbGFzcyBEZWZlcnJlZEV4cHJlc3Npb24gZXh0ZW5kcyBEZWZlcnJlZFRva2VuIHsKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIEV4cHJlc3Npb24gZ2V0IHZhbHVlOwp9CgphYnN0cmFjdCBjbGFzcyBMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiBQUklNQVJZOwp9CgpjbGFzcyBMaXRlcmFsQm9vbCBleHRlbmRzIExpdGVyYWwgewogIGZpbmFsIGJvb2wgdmFsdWU7CgogIExpdGVyYWxCb29sKHRoaXMudmFsdWUpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGl0ZXJhbEJvb2wodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsQm9vbCh0aGlzLCBhcmcpOwoKICAvLyBbdmlzaXRDaGlsZHJlbl0gaW5oZXJpdGVkIGZyb20gW0xpdGVyYWxdLgoKICBMaXRlcmFsQm9vbCBfY2xvbmUoKSA9PiBuZXcgTGl0ZXJhbEJvb2wodmFsdWUpOwp9CgpjbGFzcyBMaXRlcmFsTnVsbCBleHRlbmRzIExpdGVyYWwgewogIExpdGVyYWxOdWxsKCk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMaXRlcmFsTnVsbCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdExpdGVyYWxOdWxsKHRoaXMsIGFyZyk7CgogIExpdGVyYWxOdWxsIF9jbG9uZSgpID0+IG5ldyBMaXRlcmFsTnVsbCgpOwp9CgpjbGFzcyBMaXRlcmFsU3RyaW5nIGV4dGVuZHMgTGl0ZXJhbCB7CiAgZmluYWwgU3RyaW5nIHZhbHVlOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgTGl0ZXJhbFN0cmluZyBmcm9tIGEgc3RyaW5nIHZhbHVlLgogICAqCiAgICogVGhlIGNvbnN0cnVjdG9yIGRvZXMgbm90IGFkZCB0aGUgcmVxdWlyZWQgcXVvdGVzLiAgSWYgW3ZhbHVlXSBpcyBub3QKICAgKiBzdXJyb3VuZGVkIGJ5IHF1b3RlcyBhbmQgcHJvcGVybHkgZXNjYXBlZCwgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW52YWxpZAogICAqIGFzIGEgSlMgdmFsdWUuCiAgICoKICAgKiBUT0RPKHNyYSk6IEludHJvZHVjZSB2YXJpYW50cyBmb3Iga25vd24gdmFsaWQgc3RyaW5ncyB0aGF0IGRvbid0IGFsbG9jYXRlIGEKICAgKiBuZXcgc3RyaW5nIGp1c3QgdG8gYWRkIHF1b3Rlcy4KICAgKi8KICBMaXRlcmFsU3RyaW5nKHRoaXMudmFsdWUpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGl0ZXJhbFN0cmluZyh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdExpdGVyYWxTdHJpbmcodGhpcywgYXJnKTsKCiAgTGl0ZXJhbFN0cmluZyBfY2xvbmUoKSA9PiBuZXcgTGl0ZXJhbFN0cmluZyh2YWx1ZSk7Cn0KCmNsYXNzIFN0cmluZ0NvbmNhdGVuYXRpb24gZXh0ZW5kcyBMaXRlcmFsIHsKICBmaW5hbCBMaXN0PExpdGVyYWw+IHBhcnRzOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgU3RyaW5nQ29uY2F0ZW5hdGlvbiBmcm9tIGEgbGlzdCBvZiBMaXRlcmFsIGVsZW1lbnRzLgogICAqIFRoZSBjb25zdHJ1Y3RvciBkb2VzIG5vdCBhZGQgc3Vycm91bmRpbmcgcXVvdGVzIHRvIHRoZSByZXN1bHRpbmcKICAgKiBjb25jYXRlbmF0ZWQgc3RyaW5nLgogICAqLwogIFN0cmluZ0NvbmNhdGVuYXRpb24odGhpcy5wYXJ0cyk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgZm9yIChMaXRlcmFsIHBhcnQgaW4gcGFydHMpIHBhcnQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGZvciAoTGl0ZXJhbCBwYXJ0IGluIHBhcnRzKSBwYXJ0LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIFN0cmluZ0NvbmNhdGVuYXRpb24gX2Nsb25lKCkgPT4gbmV3IFN0cmluZ0NvbmNhdGVuYXRpb24odGhpcy5wYXJ0cyk7Cn0KCmNsYXNzIExpdGVyYWxOdW1iZXIgZXh0ZW5kcyBMaXRlcmFsIHsKICBmaW5hbCBTdHJpbmcgdmFsdWU7IC8vIE11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IG51bWJlciBsaXRlcmFsLgoKICBMaXRlcmFsTnVtYmVyKHRoaXMudmFsdWUpOwoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiB2YWx1ZS5zdGFydHNXaXRoKCctJykgPyBVTkFSWSA6IFBSSU1BUlk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMaXRlcmFsTnVtYmVyKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TGl0ZXJhbE51bWJlcih0aGlzLCBhcmcpOwoKICBMaXRlcmFsTnVtYmVyIF9jbG9uZSgpID0+IG5ldyBMaXRlcmFsTnVtYmVyKHZhbHVlKTsKfQoKY2xhc3MgQXJyYXlJbml0aWFsaXplciBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gZWxlbWVudHM7CgogIEFycmF5SW5pdGlhbGl6ZXIodGhpcy5lbGVtZW50cykgOiBhc3NlcnQoIWVsZW1lbnRzLmNvbnRhaW5zKG51bGwpKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEFycmF5SW5pdGlhbGl6ZXIodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRBcnJheUluaXRpYWxpemVyKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBmb3IgKEV4cHJlc3Npb24gZWxlbWVudCBpbiBlbGVtZW50cykgZWxlbWVudC5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgZm9yIChFeHByZXNzaW9uIGVsZW1lbnQgaW4gZWxlbWVudHMpIGVsZW1lbnQuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgQXJyYXlJbml0aWFsaXplciBfY2xvbmUoKSA9PiBuZXcgQXJyYXlJbml0aWFsaXplcihlbGVtZW50cyk7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCi8qKgogKiBBbiBlbXB0eSBwbGFjZSBpbiBhbiBbQXJyYXlJbml0aWFsaXplcl0uCiAqIEZvciBleGFtcGxlIHRoZSBsaXN0IFsxLCAsICwgMl0gd291bGQgY29udGFpbiB0d28gaG9sZXMuCiAqLwpjbGFzcyBBcnJheUhvbGUgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QXJyYXlIb2xlKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0QXJyYXlIb2xlKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgQXJyYXlIb2xlIF9jbG9uZSgpID0+IG5ldyBBcnJheUhvbGUoKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKfQoKY2xhc3MgT2JqZWN0SW5pdGlhbGl6ZXIgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBMaXN0PFByb3BlcnR5PiBwcm9wZXJ0aWVzOwogIGZpbmFsIGJvb2wgaXNPbmVMaW5lcjsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBvYmplY3QtaW5pdGlhbGl6ZXIgY29udGFpbmluZyB0aGUgZ2l2ZW4gW3Byb3BlcnRpZXNdLgogICAqCiAgICogW2lzT25lTGluZXJdIGRlc2NyaWJlcyB0aGUgYmVoYXZpb3VyIHdoZW4gcHJldHR5LXByaW50aW5nIChub24tbWluaWZpZWQpLgogICAqIElmIHRydWUgcHJpbnQgYWxsIHByb3BlcnRpZXMgb24gdGhlIHNhbWUgbGluZS4KICAgKiBJZiBmYWxzZSBwcmludCBlYWNoIHByb3BlcnR5IG9uIGEgc2VwZXJhdGUgbGluZS4KICAgKi8KICBPYmplY3RJbml0aWFsaXplcih0aGlzLnByb3BlcnRpZXMsIHt0aGlzLmlzT25lTGluZXI6IHRydWV9KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdE9iamVjdEluaXRpYWxpemVyKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoUHJvcGVydHkgaW5pdCBpbiBwcm9wZXJ0aWVzKSBpbml0LmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBmb3IgKFByb3BlcnR5IGluaXQgaW4gcHJvcGVydGllcykgaW5pdC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBPYmplY3RJbml0aWFsaXplciBfY2xvbmUoKSA9PgogICAgICBuZXcgT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcywgaXNPbmVMaW5lcjogaXNPbmVMaW5lcik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCmNsYXNzIFByb3BlcnR5IGV4dGVuZHMgTm9kZSB7CiAgZmluYWwgRXhwcmVzc2lvbiBuYW1lOwogIGZpbmFsIEV4cHJlc3Npb24gdmFsdWU7CgogIFByb3BlcnR5KHRoaXMubmFtZSwgdGhpcy52YWx1ZSkKICAgICAgOiBhc3NlcnQobmFtZSBpcyBMaXRlcmFsIHx8IG5hbWUgaXMgRGVmZXJyZWRFeHByZXNzaW9uKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFByb3BlcnR5KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0UHJvcGVydHkodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIG5hbWUuYWNjZXB0KHZpc2l0b3IpOwogICAgdmFsdWUuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIG5hbWUuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgdmFsdWUuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgUHJvcGVydHkgX2Nsb25lKCkgPT4gbmV3IFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKfQoKLy8vIFRhZyBjbGFzcyBmb3IgYWxsIGludGVycG9sYXRlZCBwb3NpdGlvbnMuCmFic3RyYWN0IGNsYXNzIEludGVycG9sYXRlZE5vZGUgaW1wbGVtZW50cyBOb2RlIHsKICBnZXQgbmFtZU9yUG9zaXRpb247CgogIGJvb2wgZ2V0IGlzTmFtZWQgPT4gbmFtZU9yUG9zaXRpb24gaXMgU3RyaW5nOwoKICBib29sIGdldCBpc1Bvc2l0aW9uYWwgPT4gbmFtZU9yUG9zaXRpb24gaXMgaW50Owp9CgpjbGFzcyBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB3aXRoIEludGVycG9sYXRlZE5vZGUgewogIGZpbmFsIG5hbWVPclBvc2l0aW9uOwoKICBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKHRoaXMubmFtZU9yUG9zaXRpb24pOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIF9jbG9uZSgpID0+IG5ldyBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKG5hbWVPclBvc2l0aW9uKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKfQoKY2xhc3MgSW50ZXJwb2xhdGVkTGl0ZXJhbCBleHRlbmRzIExpdGVyYWwgd2l0aCBJbnRlcnBvbGF0ZWROb2RlIHsKICBmaW5hbCBuYW1lT3JQb3NpdGlvbjsKCiAgSW50ZXJwb2xhdGVkTGl0ZXJhbCh0aGlzLm5hbWVPclBvc2l0aW9uKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludGVycG9sYXRlZExpdGVyYWwodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgSW50ZXJwb2xhdGVkTGl0ZXJhbCBfY2xvbmUoKSA9PiBuZXcgSW50ZXJwb2xhdGVkTGl0ZXJhbChuYW1lT3JQb3NpdGlvbik7Cn0KCmNsYXNzIEludGVycG9sYXRlZFBhcmFtZXRlciBleHRlbmRzIEV4cHJlc3Npb24KICAgIHdpdGggSW50ZXJwb2xhdGVkTm9kZQogICAgaW1wbGVtZW50cyBQYXJhbWV0ZXIgewogIGZpbmFsIG5hbWVPclBvc2l0aW9uOwoKICBJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIodGhpcy5uYW1lT3JQb3NpdGlvbik7CgogIFN0cmluZyBnZXQgbmFtZSB7CiAgICB0aHJvdyAiSW50ZXJwb2xhdGVkUGFyYW1ldGVyLm5hbWUgbXVzdCBub3QgYmUgaW52b2tlZCI7CiAgfQoKICBib29sIGdldCBhbGxvd1JlbmFtZSA9PiBmYWxzZTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikge30KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHt9CgogIEludGVycG9sYXRlZFBhcmFtZXRlciBfY2xvbmUoKSA9PiBuZXcgSW50ZXJwb2xhdGVkUGFyYW1ldGVyKG5hbWVPclBvc2l0aW9uKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKfQoKY2xhc3MgSW50ZXJwb2xhdGVkU2VsZWN0b3IgZXh0ZW5kcyBFeHByZXNzaW9uIHdpdGggSW50ZXJwb2xhdGVkTm9kZSB7CiAgZmluYWwgbmFtZU9yUG9zaXRpb247CgogIEludGVycG9sYXRlZFNlbGVjdG9yKHRoaXMubmFtZU9yUG9zaXRpb24pOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3IodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3Rvcih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikge30KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHt9CgogIEludGVycG9sYXRlZFNlbGVjdG9yIF9jbG9uZSgpID0+IG5ldyBJbnRlcnBvbGF0ZWRTZWxlY3RvcihuYW1lT3JQb3NpdGlvbik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCmNsYXNzIEludGVycG9sYXRlZFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB3aXRoIEludGVycG9sYXRlZE5vZGUgewogIGZpbmFsIG5hbWVPclBvc2l0aW9uOwoKICBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQodGhpcy5uYW1lT3JQb3NpdGlvbik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgX2Nsb25lKCkgPT4gbmV3IEludGVycG9sYXRlZFN0YXRlbWVudChuYW1lT3JQb3NpdGlvbik7Cn0KCmNsYXNzIEludGVycG9sYXRlZERlY2xhcmF0aW9uIGV4dGVuZHMgRXhwcmVzc2lvbgogICAgd2l0aCBJbnRlcnBvbGF0ZWROb2RlCiAgICBpbXBsZW1lbnRzIERlY2xhcmF0aW9uIHsKICBmaW5hbCBuYW1lT3JQb3NpdGlvbjsKCiAgSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24odGhpcy5uYW1lT3JQb3NpdGlvbik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gX2Nsb25lKCkgewogICAgcmV0dXJuIG5ldyBJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbihuYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gdGhyb3cgIk5vIG5hbWUgZm9yIHRoZSBpbnRlcnBvbGF0ZWQgbm9kZSI7CgogIEBvdmVycmlkZQogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCi8qKgogKiBbUmVnRXhwTGl0ZXJhbF1zLCBkZXNwaXRlIGJlaW5nIGNhbGxlZCAiTGl0ZXJhbCIsIGRvIG5vdCBpbmhlcml0IGZyb20KICogW0xpdGVyYWxdLiBJbmRlZWQsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gSmF2YVNjcmlwdCBoYXZlIGEgc2lkZS1lZmZlY3QgYW5kCiAqIGFyZSB0aHVzIG5vdCBpbiB0aGUgc2FtZSBjYXRlZ29yeSBhcyBudW1iZXJzIG9yIHN0cmluZ3MuCiAqLwpjbGFzcyBSZWdFeHBMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgLyoqIENvbnRhaW5zIHRoZSBwYXR0ZXJuIGFuZCB0aGUgZmxhZ3MuKi8KICBmaW5hbCBTdHJpbmcgcGF0dGVybjsKCiAgUmVnRXhwTGl0ZXJhbCh0aGlzLnBhdHRlcm4pOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UmVnRXhwTGl0ZXJhbCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFJlZ0V4cExpdGVyYWwodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBSZWdFeHBMaXRlcmFsIF9jbG9uZSgpID0+IG5ldyBSZWdFeHBMaXRlcmFsKHBhdHRlcm4pOwoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiBQUklNQVJZOwp9CgovKioKICogQW4gYXN5bmNocm9ub3VzIGF3YWl0LgogKgogKiBOb3QgcGFydCBvZiBKYXZhU2NyaXB0LiBXZSBkZXN1Z2FyIHRoaXMgZXhwcmVzc2lvbiBiZWZvcmUgb3V0cHV0dGluZy4KICogU2hvdWxkIG9ubHkgb2NjdXIgaW4gYSBbRnVuXSB3aXRoIGBhc3luY01vZGlmaWVyYCBhc3luYyBvciBhc3luY1N0YXIuCiAqLwpjbGFzcyBBd2FpdCBleHRlbmRzIEV4cHJlc3Npb24gewogIC8qKiBUaGUgYXdhaXRlZCBleHByZXNzaW9uLiAqLwogIGZpbmFsIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgQXdhaXQodGhpcy5leHByZXNzaW9uKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gVU5BUlk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRBd2FpdCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEF3YWl0KHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiBleHByZXNzaW9uLmFjY2VwdCh2aXNpdG9yKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwoKICBBd2FpdCBfY2xvbmUoKSA9PiBuZXcgQXdhaXQoZXhwcmVzc2lvbik7Cn0KCi8qKgogKiBBIGNvbW1lbnQuCiAqCiAqIEV4dGVuZHMgW1N0YXRlbWVudF0gc28gd2UgY2FuIGFkZCBjb21tZW50cyBiZWZvcmUgc3RhdGVtZW50cyBpbgogKiBbQmxvY2tdIGFuZCBbUHJvZ3JhbV0uCiAqLwpjbGFzcyBDb21tZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBTdHJpbmcgY29tbWVudDsKCiAgQ29tbWVudCh0aGlzLmNvbW1lbnQpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q29tbWVudCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdENvbW1lbnQodGhpcywgYXJnKTsKCiAgQ29tbWVudCBfY2xvbmUoKSA9PiBuZXcgQ29tbWVudChjb21tZW50KTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQp9CgovLy8gUmV0dXJucyB0aGUgdmFsdWUgb2YgW25vZGVdIGlmIGl0IGlzIGEgW0RlZmVycmVkRXhwcmVzc2lvbl0uIE90aGVyd2lzZQovLy8gcmV0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ZWN0b3I7CgovLy8gW1N0cmluZ11zIGNvbW1vbmx5IHVzZWQuCmNsYXNzIElkZW50aWZpZXJzIHsKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGNhbGwgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBjYWxsID0gJ2NhbGwnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9wZXJ0eSB1c2VkIG9uIGl0ZXJhdG9ycyBpbiBmb3ItZWFjaAogIC8vLyBsb29wcy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGN1cnJlbnQgPSAnY3VycmVudCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgZnJvbSBlbnZpcm9ubWVudCBjb25zdHJ1Y3RvcnMgb24gJ2ludCcsICdib29sJyBhbmQKICAvLy8gJ1N0cmluZycuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBmcm9tRW52aXJvbm1lbnQgPSAnZnJvbUVudmlyb25tZW50JzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBpdGVyYXRvciBwcm9wZXJ0eSB1c2VkIGluIGZvci1lYWNoIGxvb3BzLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgaXRlcmF0b3IgPSAnaXRlcmF0b3InOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGBsb2FkTGlicmFyeWAgZ2V0dGVyIGRlZmluZWQgb24gZGVmZXJyZWQgcHJlZml4ZXMuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBsb2FkTGlicmFyeSA9ICdsb2FkTGlicmFyeSc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgbWFpbiBtZXRob2QuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBtYWluID0gJ21haW4nOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG5vIHN1Y2ggbWV0aG9kIGhhbmRsZXIgb24gJ09iamVjdCcuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBub1N1Y2hNZXRob2RfID0gJ25vU3VjaE1ldGhvZCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgcnVudGltZSB0eXBlIHByb3BlcnR5IG9uICdPYmplY3QnLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcnVudGltZVR5cGVfID0gJ3J1bnRpbWVUeXBlJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBnZXR0ZXIgcmV0dXJuaW5nIHRoZSBzaXplIG9mIGNvbnRhaW5lcnMgYW5kIHN0cmluZ3MuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBsZW5ndGggPSAnbGVuZ3RoJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBzaWduYXR1cmUgZnVuY3Rpb24gaW4gY2xvc3VyZSBjbGFzc2VzLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgc2lnbmF0dXJlID0gJzpzaWduYXR1cmUnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlICdKUycgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTID0gJ0pTJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSAnSlNfQlVJTFRJTicgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0JVSUxUSU4gPSAnSlNfQlVJTFRJTic7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgJ0pTX0VNQkVEREVEX0dMT0JBTCcgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0VNQkVEREVEX0dMT0JBTCA9ICdKU19FTUJFRERFRF9HTE9CQUwnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlICdKU19JTlRFUkNFUFRPUl9DT05TVEFOVCcgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UID0gJ0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSAnSlNfU1RSSU5HX0NPTkNBVCcgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX1NUUklOR19DT05DQVQgPSAnSlNfU1RSSU5HX0NPTkNBVCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgJ0RBUlRfQ0xPU1VSRV9UT19KUycgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIERBUlRfQ0xPU1VSRV9UT19KUyA9ICdEQVJUX0NMT1NVUkVfVE9fSlMnOwp9CgovLy8gW05hbWVdcyBjb21tb25seSB1c2VkLgpjbGFzcyBOYW1lcyB7CiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBjYWxsIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBOYW1lIGNhbGwgPSBjb25zdCBQdWJsaWNOYW1lKElkZW50aWZpZXJzLmNhbGwpOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9wZXJ0eSB1c2VkIG9uIGl0ZXJhdG9ycyBpbiBmb3ItZWFjaAogIC8vLyBsb29wcy4KICBzdGF0aWMgY29uc3QgTmFtZSBjdXJyZW50ID0gY29uc3QgUHVibGljTmFtZShJZGVudGlmaWVycy5jdXJyZW50KTsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBkeW5hbWljIHR5cGUuCiAgc3RhdGljIGNvbnN0IE5hbWUgZHluYW1pY18gPSBjb25zdCBQdWJsaWNOYW1lKCdkeW5hbWljJyk7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgaXRlcmF0b3IgcHJvcGVydHkgdXNlZCBpbiBmb3ItZWFjaCBsb29wcy4KICBzdGF0aWMgY29uc3QgTmFtZSBpdGVyYXRvciA9IGNvbnN0IFB1YmxpY05hbWUoSWRlbnRpZmllcnMuaXRlcmF0b3IpOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG1vdmUgbmV4dCBtZXRob2QgdXNlZCBvbiBpdGVyYXRvcnMgaW4gZm9yLWVhY2ggbG9vcHMuCiAgc3RhdGljIGNvbnN0IE5hbWUgbW92ZU5leHQgPSBjb25zdCBQdWJsaWNOYW1lKCdtb3ZlTmV4dCcpOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG5vIHN1Y2ggbWV0aG9kIGhhbmRsZXIgb24gJ09iamVjdCcuCiAgc3RhdGljIGNvbnN0IE5hbWUgbm9TdWNoTWV0aG9kXyA9IGNvbnN0IFB1YmxpY05hbWUoSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgdG8tc3RyaW5nIG1ldGhvZCBvbiAnT2JqZWN0Jy4KICBzdGF0aWMgY29uc3QgTmFtZSB0b1N0cmluZ18gPSBjb25zdCBQdWJsaWNOYW1lKCd0b1N0cmluZycpOwoKICBzdGF0aWMgY29uc3QgTmFtZSBJTkRFWF9OQU1FID0gY29uc3QgUHVibGljTmFtZSgiW10iKTsKICBzdGF0aWMgY29uc3QgTmFtZSBJTkRFWF9TRVRfTkFNRSA9IGNvbnN0IFB1YmxpY05hbWUoIltdPSIpOwogIHN0YXRpYyBjb25zdCBOYW1lIENBTExfTkFNRSA9IE5hbWVzLmNhbGw7CgogIHN0YXRpYyBjb25zdCBOYW1lIGxlbmd0aCA9IGNvbnN0IFB1YmxpY05hbWUoSWRlbnRpZmllcnMubGVuZ3RoKTsKCiAgc3RhdGljIGNvbnN0IE5hbWUgcnVudGltZVR5cGVfID0gY29uc3QgUHVibGljTmFtZShJZGVudGlmaWVycy5ydW50aW1lVHlwZV8pOwoKICBzdGF0aWMgY29uc3QgTmFtZSBnZW5lcmljSW5zdGFudGlhdGlvbiA9IGNvbnN0IFB1YmxpY05hbWUoJ2luc3RhbnRpYXRlJyk7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgc2lnbmF0dXJlIGZ1bmN0aW9uIGluIGNsb3N1cmUgY2xhc3Nlcy4KICBzdGF0aWMgY29uc3QgTmFtZSBzaWduYXR1cmUgPSBjb25zdCBQdWJsaWNOYW1lKElkZW50aWZpZXJzLnNpZ25hdHVyZSk7Cn0KCi8vLyBbU2VsZWN0b3JdcyBjb21tb25seSB1c2VkLgpjbGFzcyBTZWxlY3RvcnMgewogIC8vLyBUaGUgc2VsZWN0b3IgZm9yIGNhbGxpbmcgdGhlIGNhbmNlbCBtZXRob2Qgb24gJ1N0cmVhbUl0ZXJhdG9yJy4KICBzdGF0aWMgZmluYWwgU2VsZWN0b3IgY2FuY2VsID0KICAgICAgbmV3IFNlbGVjdG9yLmNhbGwoY29uc3QgUHVibGljTmFtZSgnY2FuY2VsJyksIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIC8vLyBUaGUgc2VsZWN0b3IgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9wZXJ0eSB1c2VkIGluIGZvci1lYWNoCiAgLy8vIGxvb3BzLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBjdXJyZW50ID0gbmV3IFNlbGVjdG9yLmdldHRlcihOYW1lcy5jdXJyZW50KTsKCiAgLy8vIFRoZSBzZWxlY3RvciBmb3IgZ2V0dGluZyB0aGUgaXRlcmF0b3IgcHJvcGVydHkgdXNlZCBpbiBmb3ItZWFjaCBsb29wcy4KICBzdGF0aWMgZmluYWwgU2VsZWN0b3IgaXRlcmF0b3IgPSBuZXcgU2VsZWN0b3IuZ2V0dGVyKE5hbWVzLml0ZXJhdG9yKTsKCiAgLy8vIFRoZSBzZWxlY3RvciBmb3IgY2FsbGluZyB0aGUgbW92ZSBuZXh0IG1ldGhvZCB1c2VkIGluIGZvci1lYWNoIGxvb3BzLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBtb3ZlTmV4dCA9CiAgICAgIG5ldyBTZWxlY3Rvci5jYWxsKE5hbWVzLm1vdmVOZXh0LCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpOwoKICAvLy8gVGhlIHNlbGVjdG9yIGZvciBjYWxsaW5nIHRoZSBubyBzdWNoIG1ldGhvZCBoYW5kbGVyIG9uICdPYmplY3QnLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBub1N1Y2hNZXRob2RfID0KICAgICAgbmV3IFNlbGVjdG9yLmNhbGwoTmFtZXMubm9TdWNoTWV0aG9kXywgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKTsKCiAgLy8vIFRoZSBzZWxlY3RvciBmb3IgdGVhcmluZyBvZmYgbm9TdWNoTWV0aG9kLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBub1N1Y2hNZXRob2RHZXR0ZXIgPQogICAgICBuZXcgU2VsZWN0b3IuZ2V0dGVyKE5hbWVzLm5vU3VjaE1ldGhvZF8pOwoKICAvLy8gVGhlIHNlbGVjdG9yIGZvciBjYWxsaW5nIHRoZSB0by1zdHJpbmcgbWV0aG9kIG9uICdPYmplY3QnLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciB0b1N0cmluZ18gPQogICAgICBuZXcgU2VsZWN0b3IuY2FsbChOYW1lcy50b1N0cmluZ18sIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIC8vLyBUaGUgc2VsZWN0b3IgZm9yIHRlYXJpbmcgb2ZmIHRvU3RyaW5nLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciB0b1N0cmluZ0dldHRlciA9IG5ldyBTZWxlY3Rvci5nZXR0ZXIoTmFtZXMudG9TdHJpbmdfKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGhhc2hDb2RlXyA9CiAgICAgIG5ldyBTZWxlY3Rvci5nZXR0ZXIoY29uc3QgUHVibGljTmFtZSgnaGFzaENvZGUnKSk7CgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBjb21wYXJlVG8gPQogICAgICBuZXcgU2VsZWN0b3IuY2FsbChjb25zdCBQdWJsaWNOYW1lKCJjb21wYXJlVG8iKSwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGVxdWFscyA9IG5ldyBTZWxlY3Rvci5iaW5hcnlPcGVyYXRvcignPT0nKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGxlbmd0aCA9IG5ldyBTZWxlY3Rvci5nZXR0ZXIoTmFtZXMubGVuZ3RoKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGNvZGVVbml0QXQgPQogICAgICBuZXcgU2VsZWN0b3IuY2FsbChjb25zdCBQdWJsaWNOYW1lKCdjb2RlVW5pdEF0JyksIENhbGxTdHJ1Y3R1cmUuT05FX0FSRyk7CgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBpbmRleCA9IG5ldyBTZWxlY3Rvci5pbmRleCgpOwoKICBzdGF0aWMgZmluYWwgU2VsZWN0b3IgcnVudGltZVR5cGVfID0gbmV3IFNlbGVjdG9yLmdldHRlcihOYW1lcy5ydW50aW1lVHlwZV8pOwoKICAvLy8gTGlzdCBvZiBhbGwgdGhlIHNlbGVjdG9ycyBoZWxkIGluIHN0YXRpYyBmaWVsZHMuCiAgLy8vCiAgLy8vIFRoZXNlIG9iamVjdHMgYXJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBydW5zIGluIGJhdGNoLW1vZGUgYW5kIG11c3QKICAvLy8gdGh1cyByZW1haW4gaW4gdGhlIFtTZWxlY3Rvci5jYW5vbmljYWxpemVkVmFsdWVzXSBtYXAuCiAgc3RhdGljIGZpbmFsIExpc3Q8U2VsZWN0b3I+IEFMTCA9IDxTZWxlY3Rvcj5bCiAgICBjYW5jZWwsCiAgICBjdXJyZW50LAogICAgaXRlcmF0b3IsCiAgICBtb3ZlTmV4dCwKICAgIG5vU3VjaE1ldGhvZF8sCiAgICBub1N1Y2hNZXRob2RHZXR0ZXIsCiAgICB0b1N0cmluZ18sCiAgICB0b1N0cmluZ0dldHRlciwKICAgIGhhc2hDb2RlXywKICAgIGNvbXBhcmVUbywKICAgIGVxdWFscywKICAgIGxlbmd0aCwKICAgIGNvZGVVbml0QXQsCiAgICBpbmRleCwKICAgIHJ1bnRpbWVUeXBlXwogIF07Cn0KCi8vLyBbVXJpXXMgY29tbW9ubHkgdXNlZC4KY2xhc3MgVXJpcyB7CiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmFzeW5jJy4KICBzdGF0aWMgZmluYWwgVXJpIGRhcnRfYXN5bmMgPSBuZXcgVXJpKHNjaGVtZTogJ2RhcnQnLCBwYXRoOiAnYXN5bmMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmNvbGxlY3Rpb24nLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9jb2xsZWN0aW9uID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2NvbGxlY3Rpb24nKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmNvcmUnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9jb3JlID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2NvcmUnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Omh0bWwnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9odG1sID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2h0bWwnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Omh0bWxfY29tbW9uJy4KICBzdGF0aWMgZmluYWwgVXJpIGRhcnRfaHRtbF9jb21tb24gPQogICAgICBuZXcgVXJpKHNjaGVtZTogJ2RhcnQnLCBwYXRoOiAnaHRtbF9jb21tb24nKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmluZGV4ZWRfZGInLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9pbmRleGVkX2RiID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2luZGV4ZWRfZGInKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Omlzb2xhdGUnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9pc29sYXRlID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2lzb2xhdGUnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Om1hdGgnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9tYXRoID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ21hdGgnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Om1pcnJvcnMnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9taXJyb3JzID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ21pcnJvcnMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9pbnRlcm5hbCcuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19pbnRlcm5hbCA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfaW50ZXJuYWwnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9uYXRpdmVfdHlwZWRfZGF0YScuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfbmF0aXZlX3R5cGVkX2RhdGEnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OnR5cGVkX2RhdGEnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF90eXBlZF9kYXRhID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ3R5cGVkX2RhdGEnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OnN2ZycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X3N2ZyA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdzdmcnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OndlYl9hdWRpbycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X3dlYl9hdWRpbyA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICd3ZWJfYXVkaW8nKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OndlYl9nbCcuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X3dlYl9nbCA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICd3ZWJfZ2wnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OndlYl9zcWwnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF93ZWJfc3FsID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ3dlYl9zcWwnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9qc19oZWxwZXInLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9fanNfaGVscGVyID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ19qc19oZWxwZXInKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9ydGknLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9fcnRpID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ19ydGknKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9pbnRlcmNlcHRvcnMnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9faW50ZXJjZXB0b3JzID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ19pbnRlcmNlcHRvcnMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9mb3JlaWduX2hlbHBlcicuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19mb3JlaWduX2hlbHBlciA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfZm9yZWlnbl9oZWxwZXInKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9qc19uYW1lcycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19qc19uYW1lcyA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfanNfbmFtZXMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9qc19lbWJlZGRlZF9uYW1lcycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19qc19lbWJlZGRlZF9uYW1lcyA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfanNfZW1iZWRkZWRfbmFtZXMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdwYWNrYWdlOmpzJy4KICBzdGF0aWMgZmluYWwgVXJpIHBhY2thZ2VfanMgPSBuZXcgVXJpKHNjaGVtZTogJ3BhY2thZ2UnLCBwYXRoOiAnanMvanMuZGFydCcpOwoKICAvLy8gVGhlIFVSSSBmb3IgJ3BhY2thZ2U6bWV0YS9kYXJ0MmpzLmRhcnQnLgogIHN0YXRpYyBmaW5hbCBVcmkgcGFja2FnZV9tZXRhX2RhcnQyanMgPQogICAgICBuZXcgVXJpKHNjaGVtZTogJ3BhY2thZ2UnLCBwYXRoOiAnbWV0YS9kYXJ0MmpzLmRhcnQnKTsKfQqBBQBOTjwBThIeATc9MgEdFCUlAU0NKwFJEDsBQC0BSTMBIyUBOjYBOTQBSykBPTABLSEBNTEBPUEBQksBOz0BPUECARsOJT8BTQ1FASQ8AUBHAUw9ATpRATQ+ATk+LAFDAU8BTAE9SQIBHxJGIUwBTQ1GAU1IAUwjQAFHKEUBMS0wAUEkQQEtTwEkOQEkTwFEAUQBJVABNgFQATcGTT0wDA0ODhMYDxQPDwwMEAsRBQIBGg0gSAElJTMBH0YBH0YBJiY0ASUlMwEiTAEfRgEiTAEkUAEtLTsBJSUzAR5EASRQASFKASJMASUlMwEfRgEoKDYBKio4ASRQAS0tOwEgUAEvKj0CASZwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vbmFtZXMuZGFydC5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb24vd29yay5kYXJ0geMvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNvbW1vbi53b3JrOwoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JyBzaG93IE1lbWJlckVudGl0eTsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcgc2hvdyBXb3JsZEltcGFjdDsKCmFic3RyYWN0IGNsYXNzIFdvcmtJdGVtIHsKICAvLy8gRWxlbWVudCBvbiB3aGljaCB0aGUgd29yayB3aWxsIGJlIGRvbmUuCiAgTWVtYmVyRW50aXR5IGdldCBlbGVtZW50OwoKICBXb3JsZEltcGFjdCBydW4oKTsKfQoRAE5OPAEdATY5ARouHAEVAgElcGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL3dvcmsuZGFydDJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb25fZWxlbWVudHMuZGFydMABJAovLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gVE9ETyhzaWdtdW5kKTogcmVuYW1lIGFuZCBtb3ZlIHRvIGNvbW1vbi9lbGVtZW50cy5kYXJ0CmxpYnJhcnkgZGFydDJqcy50eXBlX3N5c3RlbTsKCmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzLCBVcmlzOwppbXBvcnQgJ2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJ2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JyBzaG93IENvbnN0YW50RXhwcmVzc2lvbjsKaW1wb3J0ICdjb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdqc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnIHNob3cgTmF0aXZlQmFzaWNEYXRhOwppbXBvcnQgJ2pzX21vZGVsL2xvY2Fscy5kYXJ0JzsKaW1wb3J0ICdrZXJuZWwvZGFydDJqc190YXJnZXQuZGFydCc7CmltcG9ydCAnb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwoKLy8vIFRoZSBjb21tb24gZWxlbWVudHMgYW5kIHR5cGVzIGluIERhcnQuCmFic3RyYWN0IGNsYXNzIENvbW1vbkVsZW1lbnRzIHsKICAvLy8gVGhlIGBPYmplY3RgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgQ2xhc3NFbnRpdHkgZ2V0IG9iamVjdENsYXNzOwoKICAvLy8gVGhlIGBib29sYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBib29sQ2xhc3M7CgogIC8vLyBUaGUgYG51bWAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgbnVtQ2xhc3M7CgogIC8vLyBUaGUgYGludGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgaW50Q2xhc3M7CgogIC8vLyBUaGUgYGRvdWJsZWAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgZG91YmxlQ2xhc3M7CgogIC8vLyBUaGUgYFN0cmluZ2AgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgc3RyaW5nQ2xhc3M7CgogIC8vLyBUaGUgYEZ1bmN0aW9uYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBmdW5jdGlvbkNsYXNzOwoKICAvLy8gVGhlIGBSZXNvdXJjZWAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgcmVzb3VyY2VDbGFzczsKCiAgLy8vIFRoZSBgU3ltYm9sYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBzeW1ib2xDbGFzczsKCiAgLy8vIFRoZSBgTnVsbGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgbnVsbENsYXNzOwoKICAvLy8gVGhlIGBUeXBlYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCB0eXBlQ2xhc3M7CgogIC8vLyBUaGUgYFN0YWNrVHJhY2VgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZSc7CiAgQ2xhc3NFbnRpdHkgZ2V0IHN0YWNrVHJhY2VDbGFzczsKCiAgLy8vIFRoZSBgTGlzdGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJzsKICBDbGFzc0VudGl0eSBnZXQgbGlzdENsYXNzOwoKICAvLy8gVGhlIGBTZXRgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZSc7CiAgQ2xhc3NFbnRpdHkgZ2V0IHNldENsYXNzOwoKICAvLy8gVGhlIGBNYXBgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZSc7CiAgQ2xhc3NFbnRpdHkgZ2V0IG1hcENsYXNzOwoKICAvLy8gVGhlIGBTZXRgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZSc7CiAgQ2xhc3NFbnRpdHkgZ2V0IHVubW9kaWZpYWJsZVNldENsYXNzOwoKICAvLy8gVGhlIGBJdGVyYWJsZWAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJzsKICBDbGFzc0VudGl0eSBnZXQgaXRlcmFibGVDbGFzczsKCiAgLy8vIFRoZSBgRnV0dXJlYCBjbGFzcyBkZWZpbmVkIGluICdhc3luYyc7LgogIENsYXNzRW50aXR5IGdldCBmdXR1cmVDbGFzczsKCiAgLy8vIFRoZSBgU3RyZWFtYCBjbGFzcyBkZWZpbmVkIGluICdhc3luYyc7CiAgQ2xhc3NFbnRpdHkgZ2V0IHN0cmVhbUNsYXNzOwoKICAvLy8gVGhlIGRhcnQ6Y29yZSBsaWJyYXJ5LgogIExpYnJhcnlFbnRpdHkgZ2V0IGNvcmVMaWJyYXJ5OwoKICAvLy8gVGhlIGRhcnQ6YXN5bmMgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCBhc3luY0xpYnJhcnk7CgogIC8vLyBUaGUgZGFydDptaXJyb3JzIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgbWlycm9yc0xpYnJhcnk7CgogIC8vLyBUaGUgZGFydDp0eXBlZF9kYXRhIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgdHlwZWREYXRhTGlicmFyeTsKCiAgLy8vIFRoZSBkYXJ0Ol9qc19oZWxwZXIgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCBqc0hlbHBlckxpYnJhcnk7CgogIC8vLyBUaGUgZGFydDpfaW50ZXJjZXB0b3JzIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgaW50ZXJjZXB0b3JzTGlicmFyeTsKCiAgLy8vIFRoZSBkYXJ0Ol9mb3JlaWduX2hlbHBlciBsaWJyYXJ5LgogIExpYnJhcnlFbnRpdHkgZ2V0IGZvcmVpZ25MaWJyYXJ5OwoKICAvLy8gVGhlIGRhcnQ6X2ludGVybmFsIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgcnRpTGlicmFyeTsKCiAgLy8vIFRoZSBkYXJ0Ol9pbnRlcm5hbCBsaWJyYXJ5LgogIExpYnJhcnlFbnRpdHkgZ2V0IGludGVybmFsTGlicmFyeTsKCiAgLy8vIFRoZSBgTmF0aXZlVHlwZWREYXRhYCBjbGFzcyBmcm9tIGRhcnQ6dHlwZWRfZGF0YS4KICBDbGFzc0VudGl0eSBnZXQgdHlwZWREYXRhQ2xhc3M7CgogIC8vLyBDb25zdHJ1Y3RvciBvZiB0aGUgYFN5bWJvbGAgY2xhc3MgaW4gZGFydDppbnRlcm5hbC4KICAvLy8KICAvLy8gVGhpcyBnZXR0ZXIgd2lsbCBlbnN1cmUgdGhhdCBgU3ltYm9sYCBpcyByZXNvbHZlZCBhbmQgbG9va3VwIHRoZQogIC8vLyBjb25zdHJ1Y3RvciBvbiBkZW1hbmQuCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHN5bWJvbENvbnN0cnVjdG9yVGFyZ2V0OwoKICAvLy8gV2hldGhlciBbZWxlbWVudF0gaXMgdGhlIHNhbWUgYXMgW3N5bWJvbENvbnN0cnVjdG9yXS4KICAvLy8KICAvLy8gVXNlZCB0byBjaGVjayBmb3IgdGhlIGNvbnN0cnVjdG9yIHdpdGhvdXQgY29tcHV0aW5nIGl0IHVudGlsIGl0IGlzIGxpa2VseQogIC8vLyB0byBiZSBzZWVuLgogIGJvb2wgaXNTeW1ib2xDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFRoZSBmdW5jdGlvbiBgaWRlbnRpY2FsYCBpbiBkYXJ0OmNvcmUuCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGlkZW50aWNhbEZ1bmN0aW9uOwoKICAvLy8gV2hldGhlciBbZWxlbWVudF0gaXMgdGhlIGBGdW5jdGlvbi5hcHBseWAgbWV0aG9kLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGFwcGx5IG1ldGhvZCBpZiBpdCBoYXNuJ3QgYmVlbiBzZWVuIHlldCBkdXJpbmcKICAvLy8gY29tcGlsYXRpb24uCiAgYm9vbCBpc0Z1bmN0aW9uQXBwbHlNZXRob2QoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gVGhlIGBkeW5hbWljYCB0eXBlLgogIER5bmFtaWNUeXBlIGdldCBkeW5hbWljVHlwZTsKCiAgLy8vIFRoZSBgT2JqZWN0YCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgSW50ZXJmYWNlVHlwZSBnZXQgb2JqZWN0VHlwZTsKCiAgLy8vIFRoZSBgYm9vbGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IGJvb2xUeXBlOwoKICAvLy8gVGhlIGBudW1gIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBudW1UeXBlOwoKICAvLy8gVGhlIGBpbnRgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBpbnRUeXBlOwoKICAvLy8gVGhlIGBkb3VibGVgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBkb3VibGVUeXBlOwoKICAvLy8gVGhlIGBTdHJpbmdgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBzdHJpbmdUeXBlOwoKICAvLy8gVGhlIGBTeW1ib2xgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBzeW1ib2xUeXBlOwoKICAvLy8gVGhlIGBGdW5jdGlvbmAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IGZ1bmN0aW9uVHlwZTsKCiAgLy8vIFRoZSBgTnVsbGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IG51bGxUeXBlOwoKICAvLy8gVGhlIGBUeXBlYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgSW50ZXJmYWNlVHlwZSBnZXQgdHlwZVR5cGU7CgogIEludGVyZmFjZVR5cGUgZ2V0IHR5cGVMaXRlcmFsVHlwZTsKCiAgLy8vIFRoZSBgU3RhY2tUcmFjZWAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnOwogIEludGVyZmFjZVR5cGUgZ2V0IHN0YWNrVHJhY2VUeXBlOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYExpc3RgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJyB3aXRoCiAgLy8vIFtlbGVtZW50VHlwZV0gYXMgaXRzIHR5cGUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjYW5vbmljYWwgcmF3IHR5cGUgaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBsaXN0VHlwZShbRGFydFR5cGUgZWxlbWVudFR5cGVdKTsKCiAgLy8vIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGBTZXRgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJyB3aXRoCiAgLy8vIFtlbGVtZW50VHlwZV0gYXMgaXRzIHR5cGUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjYW5vbmljYWwgcmF3IHR5cGUgaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBzZXRUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYE1hcGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnIHdpdGgKICAvLy8gW2tleVR5cGVdIGFuZCBbdmFsdWVUeXBlXSBhcyBpdHMgdHlwZSBhcmd1bWVudHMuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIGNhbm9uaWNhbCByYXcgdHlwZSBpcyByZXR1cm5lZC4KICBJbnRlcmZhY2VUeXBlIG1hcFR5cGUoW0RhcnRUeXBlIGtleVR5cGUsIERhcnRUeXBlIHZhbHVlVHlwZV0pOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYEl0ZXJhYmxlYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScgd2l0aAogIC8vLyBbZWxlbWVudFR5cGVdIGFzIGl0cyB0eXBlIGFyZ3VtZW50LgogIC8vLwogIC8vLyBJZiBubyB0eXBlIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGUgY2Fub25pY2FsIHJhdyB0eXBlIGlzIHJldHVybmVkLgogIEludGVyZmFjZVR5cGUgaXRlcmFibGVUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYEZ1dHVyZWAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmFzeW5jJyB3aXRoCiAgLy8vIFtlbGVtZW50VHlwZV0gYXMgaXRzIHR5cGUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjYW5vbmljYWwgcmF3IHR5cGUgaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYFN0cmVhbWAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmFzeW5jJyB3aXRoCiAgLy8vIFtlbGVtZW50VHlwZV0gYXMgaXRzIHR5cGUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjYW5vbmljYWwgcmF3IHR5cGUgaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBzdHJlYW1UeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGEgc3VwZXJjbGFzcyBvZiBgU3RyaW5nYCBvciBgbnVtYC4KICBib29sIGlzTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGUoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgYSBzdXBlcmNsYXNzIG9mIGBTdHJpbmdgLgogIGJvb2wgaXNTdHJpbmdPbmx5U3VwZXJ0eXBlKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGEgc3VwZXJjbGFzcyBvZiBgTGlzdGAuCiAgYm9vbCBpc0xpc3RTdXBlcnR5cGUoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIEludGVyZmFjZVR5cGUgZ2V0Q29uc3RhbnRNYXBUeXBlRm9yKEludGVyZmFjZVR5cGUgc291cmNlVHlwZSwKICAgICAge2Jvb2wgaGFzUHJvdG9LZXk6IGZhbHNlLCBib29sIG9ubHlTdHJpbmdLZXlzOiBmYWxzZX0pOwoKICBJbnRlcmZhY2VUeXBlIGdldENvbnN0YW50U2V0VHlwZUZvcihJbnRlcmZhY2VUeXBlIHNvdXJjZVR5cGUpOwoKICBGaWVsZEVudGl0eSBnZXQgc3ltYm9sRmllbGQ7CgogIEludGVyZmFjZVR5cGUgZ2V0IHN5bWJvbEltcGxlbWVudGF0aW9uVHlwZTsKCiAgLy8gRnJvbSBkYXJ0OmNvcmUKICBDbGFzc0VudGl0eSBnZXQgbWFwTGl0ZXJhbENsYXNzOwogIENvbnN0cnVjdG9yRW50aXR5IGdldCBtYXBMaXRlcmFsQ29uc3RydWN0b3I7CiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IG1hcExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5OwogIEZ1bmN0aW9uRW50aXR5IGdldCBtYXBMaXRlcmFsVW50eXBlZE1ha2VyOwogIEZ1bmN0aW9uRW50aXR5IGdldCBtYXBMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXI7CgogIENsYXNzRW50aXR5IGdldCBzZXRMaXRlcmFsQ2xhc3M7CiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHNldExpdGVyYWxDb25zdHJ1Y3RvcjsKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHk7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNldExpdGVyYWxVbnR5cGVkTWFrZXI7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNldExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG9iamVjdE5vU3VjaE1ldGhvZDsKCiAgYm9vbCBpc0RlZmF1bHROb1N1Y2hNZXRob2RJbXBsZW1lbnRhdGlvbihGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8gRnJvbSBkYXJ0OmFzeW5jCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzeW5jSGVscGVyU3RhcnRTeW5jOwogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0hlbHBlckF3YWl0OwogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0hlbHBlclJldHVybjsKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNIZWxwZXJSZXRocm93OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgd3JhcEJvZHk7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB5aWVsZFN0YXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB5aWVsZFNpbmdsZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN5bmNTdGFyVW5jYXVnaHRFcnJvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzeW5jU3RhckhlbHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN0cmVhbU9mQ29udHJvbGxlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGVuZE9mSXRlcmF0aW9uOwoKICBDbGFzc0VudGl0eSBnZXQgc3luY1N0YXJJdGVyYWJsZTsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGZ1dHVyZUltcGxlbWVudGF0aW9uOwoKICBDbGFzc0VudGl0eSBnZXQgY29udHJvbGxlclN0cmVhbTsKCiAgQ2xhc3NFbnRpdHkgZ2V0IHN0cmVhbUl0ZXJhdG9yOwoKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3RvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN5bmNTdGFySXRlcmFibGVGYWN0b3J5OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNBd2FpdENvbXBsZXRlckZhY3Rvcnk7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRmFjdG9yeTsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSW50ZXJjZXB0b3JDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzU3RyaW5nQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc0FycmF5Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc051bWJlckNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNJbnRDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzRG91YmxlQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc051bGxDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzQm9vbENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc0phdmFTY3JpcHRPYmplY3RDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSW5kZXhhYmxlQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc011dGFibGVJbmRleGFibGVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzTXV0YWJsZUFycmF5Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc0ZpeGVkQXJyYXlDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzRXh0ZW5kYWJsZUFycmF5Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc1VubW9kaWZpYWJsZUFycmF5Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc1Bvc2l0aXZlSW50Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc1VJbnQzMkNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNVSW50MzFDbGFzczsKCiAgLy8vIFJldHVybnMgYHRydWVgIG1lbWJlciBpcyB0aGUgJ2ZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZScgbWV0aG9kCiAgLy8vIGRlY2xhcmVkIGluIGBkYXJ0Ol9pbnRlcmNlcHRvcnNgLgogIGJvb2wgaXNGaW5kSW5kZXhGb3JOYXRpdmVTdWJjbGFzc1R5cGUoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXROYXRpdmVJbnRlcmNlcHRvck1ldGhvZDsKCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IGpzQXJyYXlUeXBlZENvbnN0cnVjdG9yOwoKICAvLyBGcm9tIGRhcnQ6X2pzX2hlbHBlcgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSBuZWVkIGZvciB0aGlzIChmcm9tIFtDaGVja2VkTW9kZUhlbHBlcl0pLgogIEZ1bmN0aW9uRW50aXR5IGZpbmRIZWxwZXJGdW5jdGlvbihTdHJpbmcgbmFtZSk7CgogIENsYXNzRW50aXR5IGdldCBjbG9zdXJlQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBib3VuZENsb3N1cmVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVMaXRlcmFsQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBjb25zdE1hcExpdGVyYWxDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGNvbnN0U2V0TGl0ZXJhbENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgdHlwZVZhcmlhYmxlQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc0ludm9jYXRpb25NaXJyb3JDbGFzczsKCiAgTWVtYmVyRW50aXR5IGdldCBpbnZvY2F0aW9uVHlwZUFyZ3VtZW50R2V0dGVyOwoKICAvLy8gSW50ZXJmYWNlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBoYXMgdGhlIEphdmFTY3JpcHQKICAvLy8gaW5kZXhpbmcgYmVoYXZpb3IuIFRoZSBpbnRlcmZhY2UgaXMgb25seSB2aXNpYmxlIHRvIHNwZWNpZmljIGxpYnJhcmllcy4KICBDbGFzc0VudGl0eSBnZXQganNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlOwoKICBDbGFzc0VudGl0eSBnZXQgc3RhY2tUcmFjZUhlbHBlckNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgY29uc3RhbnRNYXBDbGFzczsKICBDbGFzc0VudGl0eSBnZXQgY29uc3RhbnRTdHJpbmdNYXBDbGFzczsKICBDbGFzc0VudGl0eSBnZXQgY29uc3RhbnRQcm90b01hcENsYXNzOwogIENsYXNzRW50aXR5IGdldCBnZW5lcmFsQ29uc3RhbnRNYXBDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGFubm90YXRpb25DcmVhdGVzQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBhbm5vdGF0aW9uUmV0dXJuc0NsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgYW5ub3RhdGlvbkpTTmFtZUNsYXNzOwoKICAvLy8gVGhlIGNsYXNzIGZvciBuYXRpdmUgYW5ub3RhdGlvbnMgZGVmaW5lZCBpbiBkYXJ0Ol9qc19oZWxwZXIuCiAgQ2xhc3NFbnRpdHkgZ2V0IG5hdGl2ZUFubm90YXRpb25DbGFzczsKCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHR5cGVWYXJpYWJsZUNvbnN0cnVjdG9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0VGVzdDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzc2VydFRocm93OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0SGVscGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0VW5yZWFjaGFibGVNZXRob2Q7CgogIC8vLyBIb2xkcyB0aGUgbWV0aG9kICJnZXRJc29sYXRlQWZmaW5pdHlUYWciIHdoZW4gZGFydDpfanNfaGVscGVyIGhhcyBiZWVuCiAgLy8vIGxvYWRlZC4KICBGdW5jdGlvbkVudGl0eSBnZXQgZ2V0SXNvbGF0ZUFmZmluaXR5VGFnTWFya2VyOwoKICAvLy8gSG9sZHMgdGhlIG1ldGhvZCAicmVxdWlyZXNQcmVhbWJsZSIgaW4gX2pzX2hlbHBlci4KICBGdW5jdGlvbkVudGl0eSBnZXQgcmVxdWlyZXNQcmVhbWJsZU1hcmtlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGxvYWRMaWJyYXJ5V3JhcHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGxvYWREZWZlcnJlZExpYnJhcnk7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBib29sQ29udmVyc2lvbkNoZWNrOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdHJhY2VIZWxwZXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjbG9zdXJlRnJvbVRlYXJPZmY7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBpc0pzSW5kZXhhYmxlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb247CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0luZGV4T3V0T2ZSYW5nZUV4Y2VwdGlvbjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGV4Y2VwdGlvblVud3JhcHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93UnVudGltZUVycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dVbnN1cHBvcnRlZEVycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dUeXBlRXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93Q29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3RyaW5nSW50ZXJwb2xhdGlvbkhlbHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHdyYXBFeGNlcHRpb25IZWxwZXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0V4cHJlc3Npb25IZWxwZXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjbG9zdXJlQ29udmVydGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdHJhY2VGcm9tRXhjZXB0aW9uOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc2V0UnVudGltZVR5cGVJbmZvOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2V0UnVudGltZVR5cGVJbmZvOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2V0VHlwZUFyZ3VtZW50QnlJbmRleDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNvbXB1dGVTaWduYXR1cmU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRSdW50aW1lVHlwZUFyZ3VtZW50czsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldFJ1bnRpbWVUeXBlQXJndW1lbnQ7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRSdW50aW1lVHlwZUFyZ3VtZW50SW50ZXJjZXB0ZWQ7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRJc1N1YnR5cGU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja1N1YnR5cGU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRTdWJ0eXBlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3VidHlwZUNhc3Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBmdW5jdGlvblR5cGVUZXN0OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZnV0dXJlT3JUZXN0OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY2hlY2tTdWJ0eXBlT2ZSdW50aW1lVHlwZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzc2VydFN1YnR5cGVPZlJ1bnRpbWVUeXBlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3VidHlwZU9mUnVudGltZVR5cGVDYXN0OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY2hlY2tEZWZlcnJlZElzTG9hZGVkOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dOb1N1Y2hNZXRob2Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVSdW50aW1lVHlwZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGZhbGxUaHJvdWdoRXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVJbnZvY2F0aW9uTWlycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGN5Y2xpY1Rocm93SGVscGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZGVmaW5lUHJvcGVydHk7CgogIGJvb2wgaXNFeHRyYWN0VHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBtZW1iZXIpOwoKICBDbGFzc0VudGl0eSBnZXRJbnN0YW50aWF0aW9uQ2xhc3MoaW50IHR5cGVBcmd1bWVudENvdW50KTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0SW5zdGFudGlhdGVGdW5jdGlvbihpbnQgdHlwZUFyZ3VtZW50Q291bnQpOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGV4dHJhY3RGdW5jdGlvblR5cGVPYmplY3RGcm9tSW50ZXJuYWw7CgogIC8vIEZyb20gZGFydDpfcnRpCgogIEZ1bmN0aW9uRW50aXR5IGdldCBmaW5kVHlwZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgaW5zdGFuY2VUeXBlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBhcnJheUluc3RhbmNlVHlwZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc2ltcGxlSW5zdGFuY2VUeXBlOwogIEZ1bmN0aW9uRW50aXR5IGdldCB0eXBlTGl0ZXJhbE1ha2VyOwogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja1R5cGVCb3VuZDsKICBGaWVsZEVudGl0eSBnZXQgcnRpQXNGaWVsZDsKICBGaWVsZEVudGl0eSBnZXQgcnRpQ2hlY2tGaWVsZDsKICBGaWVsZEVudGl0eSBnZXQgcnRpSXNGaWVsZDsKICBGaWVsZEVudGl0eSBnZXQgcnRpUmVzdEZpZWxkOwogIEZ1bmN0aW9uRW50aXR5IGdldCBydGlFdmFsTWV0aG9kOwogIEZ1bmN0aW9uRW50aXR5IGdldCBydGlCaW5kTWV0aG9kOwogIEZ1bmN0aW9uRW50aXR5IGdldCBydGlBZGRSdWxlc01ldGhvZDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbjsKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbjsKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2VuZXJhbFR5cGVDaGVja0ltcGxlbWVudGF0aW9uOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRJc0Jvb2w7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNCb29sTnVsbGFibGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tCb29sTnVsbGFibGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNEb3VibGVOdWxsYWJsZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja0RvdWJsZU51bGxhYmxlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZElzSW50OwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzSW50TnVsbGFibGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tJbnROdWxsYWJsZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRJc051bTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc051bU51bGxhYmxlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrTnVtTnVsbGFibGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkSXNTdHJpbmc7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNTdHJpbmdOdWxsYWJsZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja1N0cmluZ051bGxhYmxlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZU5ld1J0aTsKICBGdW5jdGlvbkVudGl0eSBnZXQgY2xvc3VyZUZ1bmN0aW9uVHlwZTsKCiAgLy8gRnJvbSBkYXJ0Ol9pbnRlcm5hbAoKICBDbGFzc0VudGl0eSBnZXQgc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzczsKCiAgLy8vIFVzZWQgdG8gYW5ub3RhdGUgaXRlbXMgdGhhdCBoYXZlIHRoZSBrZXl3b3JkICJuYXRpdmUiLgogIENsYXNzRW50aXR5IGdldCBleHRlcm5hbE5hbWVDbGFzczsKCiAgSW50ZXJmYWNlVHlwZSBnZXQgZXh0ZXJuYWxOYW1lVHlwZTsKCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHN5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yOwoKICAvLyBGcm9tIGRhcnQ6X2pzX2VtYmVkZGVkX25hbWVzCgogIC8vLyBIb2xkcyB0aGUgY2xhc3MgZm9yIHRoZSBbSnNHZXROYW1lXSBlbnVtLgogIENsYXNzRW50aXR5IGdldCBqc0dldE5hbWVFbnVtOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaXMgYSAiZm9yZWlnbiBoZWxwZXIiLCB0aGF0IGlzLCBhIG1lbWJlciB3aG9zZQogIC8vLyBzZW1hbnRpY3MgaXMgZGVmaW5lZCBzeW50aGV0aWNhbGx5IGFuZCBub3QgdGhyb3VnaCBEYXJ0IGNvZGUuCiAgLy8vCiAgLy8vIE1vc3QgZm9yZWlnbiBoZWxwZXJzIGFyZSBsb2NhdGVkIGluIHRoZSBgZGFydDpfZm9yZWlnbl9oZWxwZXJgIGxpYnJhcnkuCiAgYm9vbCBpc0ZvcmVpZ25IZWxwZXIoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIENsYXNzRW50aXR5IGdldERlZmF1bHRTdXBlcmNsYXNzKAogICAgICBDbGFzc0VudGl0eSBjbHMsIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGEpOwp9CgphYnN0cmFjdCBjbGFzcyBLQ29tbW9uRWxlbWVudHMgaW1wbGVtZW50cyBDb21tb25FbGVtZW50cyB7CiAgLy8gRnJvbSBwYWNrYWdlOmpzCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzQW5ub3RhdGlvbkNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNBbm9ueW1vdXNDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IHByYWdtYUNsYXNzOwogIEZpZWxkRW50aXR5IGdldCBwcmFnbWFDbGFzc05hbWVGaWVsZDsKICBGaWVsZEVudGl0eSBnZXQgcHJhZ21hQ2xhc3NPcHRpb25zRmllbGQ7CgogIGJvb2wgaXNDcmVhdGVJbnZvY2F0aW9uTWlycm9ySGVscGVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBib29sIGlzU3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3IoQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCk7CgogIENsYXNzRW50aXR5IGdldCBtZXRhTm9JbmxpbmVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IG1ldGFUcnlJbmxpbmVDbGFzczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtmdW5jdGlvbl0gaXMgYWxsb3dlZCB0byBiZSBleHRlcm5hbC4KICAvLy8KICAvLy8gVGhpcyByZXR1cm5zIGB0cnVlYCBmb3IgZm9yZWlnbiBoZWxwZXJzLCBmcm9tIGVudmlyb25tZW50IGNvbnN0cnVjdG9ycyBhbmQKICAvLy8gbWVtYmVycyBvZiBsaWJyYXJpZXMgdGhhdCBzdXBwb3J0IG5hdGl2ZS4KICAvLy8KICAvLy8gVGhpcyByZXR1cm5zIGBmYWxzZWAgZm9yIEpTIGludGVyb3AgbWVtYmVycyB3aGljaCB0aGVyZWZvcmUgbXVzdCBiZQogIC8vLyBhbGxvd2VkIHRvIGJlIGV4dGVybmFsIHRocm91Z2ggdGhlIEpTIGludGVyb3AgYW5ub3RhdGlvbiBoYW5kbGluZy4KICBib29sIGlzRXh0ZXJuYWxBbGxvd2VkKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKfQoKYWJzdHJhY3QgY2xhc3MgSkNvbW1vbkVsZW1lbnRzIGltcGxlbWVudHMgQ29tbW9uRWxlbWVudHMgewogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgdGhlIHVubmFtZWQgY29uc3RydWN0b3Igb2YgYExpc3RgLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGNvbnN0cnVjdG9yIGlmIGl0IGhhc24ndCBiZWVuIHNlZW4geWV0IGR1cmluZwogIC8vLyBjb21waWxhdGlvbi4KICBib29sIGlzVW5uYW1lZExpc3RDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyB0aGUgJ2ZpbGxlZCcgY29uc3RydWN0b3Igb2YgYExpc3RgLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGNvbnN0cnVjdG9yIGlmIGl0IGhhc24ndCBiZWVuIHNlZW4geWV0IGR1cmluZwogIC8vLyBjb21waWxhdGlvbi4KICBib29sIGlzRmlsbGVkTGlzdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpOwoKICBib29sIGlzRGVmYXVsdEVxdWFsaXR5SW1wbGVtZW50YXRpb24oTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3NlbGVjdG9yXSBhcHBsaWVzIHRvIGBKU0luZGV4YWJsZS5sZW5ndGhgLgogIGJvb2wgYXBwbGllc1RvSnNJbmRleGFibGVMZW5ndGgoU2VsZWN0b3Igc2VsZWN0b3IpOwoKICBGdW5jdGlvbkVudGl0eSBnZXQganNBcnJheVJlbW92ZUxhc3Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBqc0FycmF5QWRkOwoKICBib29sIGlzSnNTdHJpbmdTcGxpdChNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtzZWxlY3Rvcl0gYXBwbGllcyB0byBgSlNTdHJpbmcuc3BsaXRgIG9uIFtyZWNlaXZlcl0KICAvLy8gaW4gdGhlIGdpdmVuIFt3b3JsZF0uCiAgLy8vCiAgLy8vIFJldHVybnMgYGZhbHNlYCBpZiBgSlNTdHJpbmcuc3BsaXRgIGlzIG5vdCBhdmFpbGFibGUuCiAgYm9vbCBhcHBsaWVzVG9Kc1N0cmluZ1NwbGl0KFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pOwoKICBGdW5jdGlvbkVudGl0eSBnZXQganNTdHJpbmdTcGxpdDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGpzU3RyaW5nVG9TdHJpbmc7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBqc1N0cmluZ09wZXJhdG9yQWRkOwoKICBDbGFzc0VudGl0eSBnZXQganNDb25zdENsYXNzOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyB0aGUgJ2NoZWNrSW50JyBmdW5jdGlvbiBkZWZpbmVkIGluCiAgLy8vIGRhcnQ6X2pzX2hlbHBlcnMuCiAgYm9vbCBpc0NoZWNrSW50KE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyB0aGUgJ2NoZWNrTnVtJyBmdW5jdGlvbiBkZWZpbmVkIGluCiAgLy8vIGRhcnQ6X2pzX2hlbHBlcnMuCiAgYm9vbCBpc0NoZWNrTnVtKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyB0aGUgJ2NoZWNrU3RyaW5nJyBmdW5jdGlvbiBkZWZpbmVkIGluCiAgLy8vIGRhcnQ6X2pzX2hlbHBlcnMuCiAgYm9vbCBpc0NoZWNrU3RyaW5nKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBib29sIGlzSW5zdGFudGlhdGlvbkNsYXNzKENsYXNzRW50aXR5IGNscyk7CgogIC8vIEZyb20gZGFydDpfbmF0aXZlX3R5cGVkX2RhdGEKCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkQXJyYXlPZkludENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgdHlwZWRBcnJheU9mRG91YmxlQ2xhc3M7CgogIC8vLyBIb2xkcyB0aGUgY2xhc3MgZm9yIHRoZSBbSnNCdWlsdGluc10gZW51bS4KICBDbGFzc0VudGl0eSBnZXQganNCdWlsdGluRW51bTsKCiAgYm9vbCBpc0ZvcmVpZ24oTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnb3BlcmF0b3IgPT0nIFtmdW5jdGlvbl0gaXMKICAvLy8ga25vd24gdG8gaGFuZGxlIGBudWxsYCBhcyBhcmd1bWVudC4KICBib29sIG9wZXJhdG9yRXFIYW5kbGVzTnVsbEFyZ3VtZW50KEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKfQoKY2xhc3MgQ29tbW9uRWxlbWVudHNJbXBsCiAgICBpbXBsZW1lbnRzIENvbW1vbkVsZW1lbnRzLCBLQ29tbW9uRWxlbWVudHMsIEpDb21tb25FbGVtZW50cyB7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbnY7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwoKICBDb21tb25FbGVtZW50c0ltcGwodGhpcy5fZW52LCB0aGlzLl9vcHRpb25zKTsKCiAgQ2xhc3NFbnRpdHkgX29iamVjdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBvYmplY3RDbGFzcyA9PgogICAgICBfb2JqZWN0Q2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdPYmplY3QnKTsKCiAgQ2xhc3NFbnRpdHkgX2Jvb2xDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgYm9vbENsYXNzID0+IF9ib29sQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdib29sJyk7CgogIENsYXNzRW50aXR5IF9udW1DbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgbnVtQ2xhc3MgPT4gX251bUNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnbnVtJyk7CgogIENsYXNzRW50aXR5IF9pbnRDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgaW50Q2xhc3MgPT4gX2ludENsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnaW50Jyk7CgogIENsYXNzRW50aXR5IF9kb3VibGVDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgZG91YmxlQ2xhc3MgPT4KICAgICAgX2RvdWJsZUNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnZG91YmxlJyk7CgogIENsYXNzRW50aXR5IF9zdHJpbmdDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgc3RyaW5nQ2xhc3MgPT4KICAgICAgX3N0cmluZ0NsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnU3RyaW5nJyk7CgogIENsYXNzRW50aXR5IF9mdW5jdGlvbkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBmdW5jdGlvbkNsYXNzID0+CiAgICAgIF9mdW5jdGlvbkNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnRnVuY3Rpb24nKTsKCiAgQ2xhc3NFbnRpdHkgX3Jlc291cmNlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHJlc291cmNlQ2xhc3MgPT4KICAgICAgX3Jlc291cmNlQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdSZXNvdXJjZScpOwoKICBDbGFzc0VudGl0eSBfc3ltYm9sQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHN5bWJvbENsYXNzID0+CiAgICAgIF9zeW1ib2xDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhjb3JlTGlicmFyeSwgJ1N5bWJvbCcpOwoKICBDbGFzc0VudGl0eSBfbnVsbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBudWxsQ2xhc3MgPT4gX251bGxDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhjb3JlTGlicmFyeSwgJ051bGwnKTsKCiAgQ2xhc3NFbnRpdHkgX3R5cGVDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgdHlwZUNsYXNzID0+IF90eXBlQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdUeXBlJyk7CgogIENsYXNzRW50aXR5IF9zdGFja1RyYWNlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHN0YWNrVHJhY2VDbGFzcyA9PgogICAgICBfc3RhY2tUcmFjZUNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnU3RhY2tUcmFjZScpOwoKICBDbGFzc0VudGl0eSBfbGlzdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBsaXN0Q2xhc3MgPT4gX2xpc3RDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhjb3JlTGlicmFyeSwgJ0xpc3QnKTsKCiAgQ2xhc3NFbnRpdHkgX3NldENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBzZXRDbGFzcyA9PiBfc2V0Q2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdTZXQnKTsKCiAgQ2xhc3NFbnRpdHkgX21hcENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBtYXBDbGFzcyA9PiBfbWFwQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdNYXAnKTsKCiAgQ2xhc3NFbnRpdHkgX3VubW9kaWZpYWJsZVNldENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCB1bm1vZGlmaWFibGVTZXRDbGFzcyA9PiBfdW5tb2RpZmlhYmxlU2V0Q2xhc3MgPz89CiAgICAgIF9maW5kQ2xhc3MoX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9jb2xsZWN0aW9uKSwgJ19Vbm1vZGlmaWFibGVTZXQnKTsKCiAgQ2xhc3NFbnRpdHkgX2l0ZXJhYmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGl0ZXJhYmxlQ2xhc3MgPT4KICAgICAgX2l0ZXJhYmxlQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdJdGVyYWJsZScpOwoKICBDbGFzc0VudGl0eSBfZnV0dXJlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGZ1dHVyZUNsYXNzID0+CiAgICAgIF9mdXR1cmVDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhhc3luY0xpYnJhcnksICdGdXR1cmUnKTsKCiAgQ2xhc3NFbnRpdHkgX3N0cmVhbUNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBzdHJlYW1DbGFzcyA9PgogICAgICBfc3RyZWFtQ2xhc3MgPz89IF9maW5kQ2xhc3MoYXN5bmNMaWJyYXJ5LCAnU3RyZWFtJyk7CgogIExpYnJhcnlFbnRpdHkgX2NvcmVMaWJyYXJ5OwogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IGNvcmVMaWJyYXJ5ID0+CiAgICAgIF9jb3JlTGlicmFyeSA/Pz0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9jb3JlLCByZXF1aXJlZDogdHJ1ZSk7CgogIExpYnJhcnlFbnRpdHkgX2FzeW5jTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBhc3luY0xpYnJhcnkgPT4KICAgICAgX2FzeW5jTGlicmFyeSA/Pz0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9hc3luYyk7CgogIC8vLyBUaGUgZGFydDptaXJyb3JzIGxpYnJhcnkuCiAgLy8vCiAgLy8vIE51bGwgaWYgdGhlIHByb2dyYW0gZG9lc24ndCBhY2Nlc3MgZGFydDptaXJyb3JzLgogIExpYnJhcnlFbnRpdHkgX21pcnJvcnNMaWJyYXJ5OwogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IG1pcnJvcnNMaWJyYXJ5ID0+CiAgICAgIF9taXJyb3JzTGlicmFyeSA/Pz0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9taXJyb3JzKTsKCiAgTGlicmFyeUVudGl0eSBfdHlwZWREYXRhTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCB0eXBlZERhdGFMaWJyYXJ5ID0+CiAgICAgIF90eXBlZERhdGFMaWJyYXJ5ID8/PSBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSk7CgogIExpYnJhcnlFbnRpdHkgX2pzSGVscGVyTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBqc0hlbHBlckxpYnJhcnkgPT4KICAgICAgX2pzSGVscGVyTGlicmFyeSA/Pz0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9fanNfaGVscGVyKTsKCiAgTGlicmFyeUVudGl0eSBfaW50ZXJjZXB0b3JzTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBpbnRlcmNlcHRvcnNMaWJyYXJ5ID0+CiAgICAgIF9pbnRlcmNlcHRvcnNMaWJyYXJ5ID8/PSBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19pbnRlcmNlcHRvcnMpOwoKICBMaWJyYXJ5RW50aXR5IF9mb3JlaWduTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBmb3JlaWduTGlicmFyeSA9PgogICAgICBfZm9yZWlnbkxpYnJhcnkgPz89IF9lbnYubG9va3VwTGlicmFyeShVcmlzLmRhcnRfX2ZvcmVpZ25faGVscGVyKTsKCiAgTGlicmFyeUVudGl0eSBfcnRpTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBydGlMaWJyYXJ5ID0+CiAgICAgIF9ydGlMaWJyYXJ5ID8/PSBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19ydGksIHJlcXVpcmVkOiB0cnVlKTsKCiAgLy8vIFJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgbGlicmFyeSB0byBsb29rdXAgZnVuY3Rpb25zIHRvIGFsd2F5cyBpbmxpbmUuCiAgTGlicmFyeUVudGl0eSBfaW50ZXJuYWxMaWJyYXJ5OwogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IGludGVybmFsTGlicmFyeSA9PiBfaW50ZXJuYWxMaWJyYXJ5ID8/PQogICAgICBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19pbnRlcm5hbCwgcmVxdWlyZWQ6IHRydWUpOwoKICBDbGFzc0VudGl0eSBfdHlwZWREYXRhQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkRGF0YUNsYXNzID0+CiAgICAgIF90eXBlZERhdGFDbGFzcyA/Pz0gX2ZpbmRDbGFzcyh0eXBlZERhdGFMaWJyYXJ5LCAnTmF0aXZlVHlwZWREYXRhJyk7CgogIENvbnN0cnVjdG9yRW50aXR5IF9zeW1ib2xDb25zdHJ1Y3RvclRhcmdldDsKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc3ltYm9sQ29uc3RydWN0b3JUYXJnZXQgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogS2VybmVsIGRvZXMgbm90IGluY2x1ZGUgcmVkaXJlY3RpbmcgZmFjdG9yaWVzCiAgICAvLyBzbyB0aGlzIGNhbm5vdCBiZSBmb3VuZCBpbiBrZXJuZWwuIEZpbmQgYSBjb25zaXN0ZW50IHdheSB0byBoYW5kbGUKICAgIC8vIHRoaXMgYW5kIHNpbWlsYXIgY2FzZXMuCiAgICByZXR1cm4gX3N5bWJvbENvbnN0cnVjdG9yVGFyZ2V0ID8/PQogICAgICAgIF9maW5kQ29uc3RydWN0b3Ioc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcywgJycpOwogIH0KCiAgYm9vbCBfY29tcHV0ZWRTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llcyA9IGZhbHNlOwogIENvbnN0cnVjdG9yRW50aXR5IF9zeW1ib2xDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uVGFyZ2V0OwoKICB2b2lkIF9lbnN1cmVTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llcygpIHsKICAgIGlmIChfY29tcHV0ZWRTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llcykgcmV0dXJuOwogICAgX2NvbXB1dGVkU3ltYm9sQ29uc3RydWN0b3JEZXBlbmRlbmNpZXMgPSB0cnVlOwogICAgaWYgKF9zeW1ib2xDb25zdHJ1Y3RvclRhcmdldCA9PSBudWxsKSB7CiAgICAgIGlmIChfc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcyA9PSBudWxsKSB7CiAgICAgICAgX3N5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3MgPQogICAgICAgICAgICBfZmluZENsYXNzKGludGVybmFsTGlicmFyeSwgJ1N5bWJvbCcsIHJlcXVpcmVkOiBmYWxzZSk7CiAgICAgIH0KICAgICAgaWYgKF9zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzICE9IG51bGwpIHsKICAgICAgICBfc3ltYm9sQ29uc3RydWN0b3JUYXJnZXQgPQogICAgICAgICAgICBfZmluZENvbnN0cnVjdG9yKF9zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzLCAnJywgcmVxdWlyZWQ6IGZhbHNlKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zeW1ib2xDbGFzcyA9PSBudWxsKSB7CiAgICAgIF9zeW1ib2xDbGFzcyA9IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdTeW1ib2wnLCByZXF1aXJlZDogZmFsc2UpOwogICAgfQogICAgaWYgKF9zeW1ib2xDbGFzcyA9PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9zeW1ib2xDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uVGFyZ2V0ID0KICAgICAgICBfZmluZENvbnN0cnVjdG9yKHN5bWJvbENsYXNzLCAnJywgcmVxdWlyZWQ6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTeW1ib2xDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudCAhPSBudWxsKTsKICAgIF9lbnN1cmVTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llcygpOwogICAgcmV0dXJuIGVsZW1lbnQgPT0gX3N5bWJvbENvbnN0cnVjdG9ySW1wbGVtZW50YXRpb25UYXJnZXQgfHwKICAgICAgICBlbGVtZW50ID09IF9zeW1ib2xDb25zdHJ1Y3RvclRhcmdldDsKICB9CgogIEZ1bmN0aW9uRW50aXR5IF9pZGVudGljYWxGdW5jdGlvbjsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgaWRlbnRpY2FsRnVuY3Rpb24gPT4KICAgICAgX2lkZW50aWNhbEZ1bmN0aW9uID8/PSBfZmluZExpYnJhcnlNZW1iZXIoY29yZUxpYnJhcnksICdpZGVudGljYWwnKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1bmN0aW9uQXBwbHlNZXRob2QoTWVtYmVyRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIGVsZW1lbnQubmFtZSA9PSAnYXBwbHknICYmIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MgPT0gZnVuY3Rpb25DbGFzczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyB0aGUgdW5uYW1lZCBjb25zdHJ1Y3RvciBvZiBgTGlzdGAuCiAgLy8vCiAgLy8vIFRoaXMgd2lsbCBub3QgcmVzb2x2ZSB0aGUgY29uc3RydWN0b3IgaWYgaXQgaGFzbid0IGJlZW4gc2VlbiB5ZXQgZHVyaW5nCiAgLy8vIGNvbXBpbGF0aW9uLgogIEBvdmVycmlkZQogIGJvb2wgaXNVbm5hbWVkTGlzdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIChlbGVtZW50Lm5hbWUgPT0gJycgJiYgZWxlbWVudC5lbmNsb3NpbmdDbGFzcyA9PSBsaXN0Q2xhc3MpIHx8CiAgICAgIChlbGVtZW50Lm5hbWUgPT0gJ2xpc3QnICYmIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MgPT0ganNBcnJheUNsYXNzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyB0aGUgJ2ZpbGxlZCcgY29uc3RydWN0b3Igb2YgYExpc3RgLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGNvbnN0cnVjdG9yIGlmIGl0IGhhc24ndCBiZWVuIHNlZW4geWV0IGR1cmluZwogIC8vLyBjb21waWxhdGlvbi4KICBAb3ZlcnJpZGUKICBib29sIGlzRmlsbGVkTGlzdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIGVsZW1lbnQubmFtZSA9PSAnZmlsbGVkJyAmJiBlbGVtZW50LmVuY2xvc2luZ0NsYXNzID09IGxpc3RDbGFzczsKCiAgQG92ZXJyaWRlCiAgRHluYW1pY1R5cGUgZ2V0IGR5bmFtaWNUeXBlID0+IF9lbnYuZHluYW1pY1R5cGU7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IG9iamVjdFR5cGUgPT4gX2dldFJhd1R5cGUob2JqZWN0Q2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBib29sVHlwZSA9PiBfZ2V0UmF3VHlwZShib29sQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBudW1UeXBlID0+IF9nZXRSYXdUeXBlKG51bUNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgaW50VHlwZSA9PiBfZ2V0UmF3VHlwZShpbnRDbGFzcyk7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IGRvdWJsZVR5cGUgPT4gX2dldFJhd1R5cGUoZG91YmxlQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBzdHJpbmdUeXBlID0+IF9nZXRSYXdUeXBlKHN0cmluZ0NsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgc3ltYm9sVHlwZSA9PiBfZ2V0UmF3VHlwZShzeW1ib2xDbGFzcyk7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IGZ1bmN0aW9uVHlwZSA9PiBfZ2V0UmF3VHlwZShmdW5jdGlvbkNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgbnVsbFR5cGUgPT4gX2dldFJhd1R5cGUobnVsbENsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgdHlwZVR5cGUgPT4gX2dldFJhd1R5cGUodHlwZUNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgdHlwZUxpdGVyYWxUeXBlID0+IF9nZXRSYXdUeXBlKHR5cGVMaXRlcmFsQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBzdGFja1RyYWNlVHlwZSA9PiBfZ2V0UmF3VHlwZShzdGFja1RyYWNlQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGxpc3RUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pIHsKICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZ2V0UmF3VHlwZShsaXN0Q2xhc3MpOwogICAgfQogICAgcmV0dXJuIF9jcmVhdGVJbnRlcmZhY2VUeXBlKGxpc3RDbGFzcywgW2VsZW1lbnRUeXBlXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHNldFR5cGUoW0RhcnRUeXBlIGVsZW1lbnRUeXBlXSkgewogICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9nZXRSYXdUeXBlKHNldENsYXNzKTsKICAgIH0KICAgIHJldHVybiBfY3JlYXRlSW50ZXJmYWNlVHlwZShzZXRDbGFzcywgW2VsZW1lbnRUeXBlXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIG1hcFR5cGUoW0RhcnRUeXBlIGtleVR5cGUsIERhcnRUeXBlIHZhbHVlVHlwZV0pIHsKICAgIGlmIChrZXlUeXBlID09IG51bGwgJiYgdmFsdWVUeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9nZXRSYXdUeXBlKG1hcENsYXNzKTsKICAgIH0gZWxzZSBpZiAoa2V5VHlwZSA9PSBudWxsKSB7CiAgICAgIGtleVR5cGUgPSBkeW5hbWljVHlwZTsKICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09IG51bGwpIHsKICAgICAgdmFsdWVUeXBlID0gZHluYW1pY1R5cGU7CiAgICB9CiAgICByZXR1cm4gX2NyZWF0ZUludGVyZmFjZVR5cGUobWFwQ2xhc3MsIFtrZXlUeXBlLCB2YWx1ZVR5cGVdKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgaXRlcmFibGVUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pIHsKICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZ2V0UmF3VHlwZShpdGVyYWJsZUNsYXNzKTsKICAgIH0KICAgIHJldHVybiBfY3JlYXRlSW50ZXJmYWNlVHlwZShpdGVyYWJsZUNsYXNzLCBbZWxlbWVudFR5cGVdKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZnV0dXJlVHlwZShbRGFydFR5cGUgZWxlbWVudFR5cGVdKSB7CiAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2dldFJhd1R5cGUoZnV0dXJlQ2xhc3MpOwogICAgfQogICAgcmV0dXJuIF9jcmVhdGVJbnRlcmZhY2VUeXBlKGZ1dHVyZUNsYXNzLCBbZWxlbWVudFR5cGVdKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgc3RyZWFtVHlwZShbRGFydFR5cGUgZWxlbWVudFR5cGVdKSB7CiAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2dldFJhd1R5cGUoc3RyZWFtQ2xhc3MpOwogICAgfQogICAgcmV0dXJuIF9jcmVhdGVJbnRlcmZhY2VUeXBlKHN0cmVhbUNsYXNzLCBbZWxlbWVudFR5cGVdKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZWxlbWVudCA9PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnQ29tcGFyYWJsZScsIHJlcXVpcmVkOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU3RyaW5nT25seVN1cGVydHlwZShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZWxlbWVudCA9PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnUGF0dGVybicsIHJlcXVpcmVkOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTGlzdFN1cGVydHlwZShDbGFzc0VudGl0eSBlbGVtZW50KSA9PiBlbGVtZW50ID09IGl0ZXJhYmxlQ2xhc3M7CgogIENsYXNzRW50aXR5IF9maW5kQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IHRydWV9KSB7CiAgICBpZiAobGlicmFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfZW52Lmxvb2t1cENsYXNzKGxpYnJhcnksIG5hbWUsIHJlcXVpcmVkOiByZXF1aXJlZCk7CiAgfQoKICBNZW1iZXJFbnRpdHkgX2ZpbmRMaWJyYXJ5TWVtYmVyKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IHRydWV9KSB7CiAgICBpZiAobGlicmFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfZW52Lmxvb2t1cExpYnJhcnlNZW1iZXIobGlicmFyeSwgbmFtZSwKICAgICAgICBzZXR0ZXI6IHNldHRlciwgcmVxdWlyZWQ6IHJlcXVpcmVkKTsKICB9CgogIE1lbWJlckVudGl0eSBfZmluZENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IHRydWV9KSB7CiAgICByZXR1cm4gX2Vudi5sb29rdXBMb2NhbENsYXNzTWVtYmVyKGNscywgbmFtZSwKICAgICAgICBzZXR0ZXI6IHNldHRlciwgcmVxdWlyZWQ6IHJlcXVpcmVkKTsKICB9CgogIENvbnN0cnVjdG9yRW50aXR5IF9maW5kQ29uc3RydWN0b3IoQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IHRydWV9KSB7CiAgICByZXR1cm4gX2Vudi5sb29rdXBDb25zdHJ1Y3RvcihjbHMsIG5hbWUsIHJlcXVpcmVkOiByZXF1aXJlZCk7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSByYXcgdHlwZSBvZiBbY2xzXS4KICBJbnRlcmZhY2VUeXBlIF9nZXRSYXdUeXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9lbnYuZ2V0UmF3VHlwZShjbHMpOwogIH0KCiAgLy8vIENyZWF0ZSB0aGUgaW5zdGFudGlhdGlvbiBvZiBbY2xzXSB3aXRoIHRoZSBnaXZlbiBbdHlwZUFyZ3VtZW50c10uCiAgSW50ZXJmYWNlVHlwZSBfY3JlYXRlSW50ZXJmYWNlVHlwZSgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2Vudi5jcmVhdGVJbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldENvbnN0YW50TWFwVHlwZUZvcihJbnRlcmZhY2VUeXBlIHNvdXJjZVR5cGUsCiAgICAgIHtib29sIGhhc1Byb3RvS2V5OiBmYWxzZSwgYm9vbCBvbmx5U3RyaW5nS2V5czogZmFsc2V9KSB7CiAgICBDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQgPSBvbmx5U3RyaW5nS2V5cwogICAgICAgID8gKGhhc1Byb3RvS2V5ID8gY29uc3RhbnRQcm90b01hcENsYXNzIDogY29uc3RhbnRTdHJpbmdNYXBDbGFzcykKICAgICAgICA6IGdlbmVyYWxDb25zdGFudE1hcENsYXNzOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50ID0gc291cmNlVHlwZS50eXBlQXJndW1lbnRzOwogICAgaWYgKHNvdXJjZVR5cGUudHJlYXRBc1JhdykgewogICAgICByZXR1cm4gX2Vudi5nZXRSYXdUeXBlKGNsYXNzRWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2Vudi5jcmVhdGVJbnRlcmZhY2VUeXBlKGNsYXNzRWxlbWVudCwgdHlwZUFyZ3VtZW50KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0Q29uc3RhbnRTZXRUeXBlRm9yKEludGVyZmFjZVR5cGUgc291cmNlVHlwZSkgPT4KICAgICAgc291cmNlVHlwZS50cmVhdEFzUmF3CiAgICAgICAgICA/IF9lbnYuZ2V0UmF3VHlwZShjb25zdFNldExpdGVyYWxDbGFzcykKICAgICAgICAgIDogX2Vudi5jcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICAgICAgICAgIGNvbnN0U2V0TGl0ZXJhbENsYXNzLCBzb3VyY2VUeXBlLnR5cGVBcmd1bWVudHMpOwoKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXQgc3ltYm9sRmllbGQgPT4gc3ltYm9sSW1wbGVtZW50YXRpb25GaWVsZDsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgc3ltYm9sSW1wbGVtZW50YXRpb25UeXBlID0+CiAgICAgIF9lbnYuZ2V0UmF3VHlwZShzeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0RlZmF1bHRFcXVhbGl0eUltcGxlbWVudGF0aW9uKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5uYW1lID09ICc9PScpOwogICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgIHJldHVybiBjbGFzc0VsZW1lbnQgPT0gb2JqZWN0Q2xhc3MgfHwKICAgICAgICBjbGFzc0VsZW1lbnQgPT0ganNJbnRlcmNlcHRvckNsYXNzIHx8CiAgICAgICAgY2xhc3NFbGVtZW50ID09IGpzTnVsbENsYXNzOwogIH0KCiAgLy8gRnJvbSBkYXJ0OmNvcmUKCiAgQ2xhc3NFbnRpdHkgX21hcExpdGVyYWxDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgbWFwTGl0ZXJhbENsYXNzIHsKICAgIGlmIChfbWFwTGl0ZXJhbENsYXNzID09IG51bGwpIHsKICAgICAgX21hcExpdGVyYWxDbGFzcyA9IF9lbnYubG9va3VwQ2xhc3MoY29yZUxpYnJhcnksICdMaW5rZWRIYXNoTWFwJyk7CiAgICAgIGlmIChfbWFwTGl0ZXJhbENsYXNzID09IG51bGwpIHsKICAgICAgICBfbWFwTGl0ZXJhbENsYXNzID0gX2ZpbmRDbGFzcygKICAgICAgICAgICAgX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9jb2xsZWN0aW9uKSwgJ0xpbmtlZEhhc2hNYXAnKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9tYXBMaXRlcmFsQ2xhc3M7CiAgfQoKICBDb25zdHJ1Y3RvckVudGl0eSBfbWFwTGl0ZXJhbENvbnN0cnVjdG9yOwogIENvbnN0cnVjdG9yRW50aXR5IF9tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eTsKICBGdW5jdGlvbkVudGl0eSBfbWFwTGl0ZXJhbFVudHlwZWRNYWtlcjsKICBGdW5jdGlvbkVudGl0eSBfbWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyOwogIHZvaWQgX2Vuc3VyZU1hcExpdGVyYWxIZWxwZXJzKCkgewogICAgaWYgKF9tYXBMaXRlcmFsQ29uc3RydWN0b3IgIT0gbnVsbCkgcmV0dXJuOwoKICAgIF9tYXBMaXRlcmFsQ29uc3RydWN0b3IgPQogICAgICAgIF9lbnYubG9va3VwQ29uc3RydWN0b3IobWFwTGl0ZXJhbENsYXNzLCAnX2xpdGVyYWwnKTsKICAgIF9tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eSA9CiAgICAgICAgX2Vudi5sb29rdXBDb25zdHJ1Y3RvcihtYXBMaXRlcmFsQ2xhc3MsICdfZW1wdHknKTsKICAgIF9tYXBMaXRlcmFsVW50eXBlZE1ha2VyID0KICAgICAgICBfZW52Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIobWFwTGl0ZXJhbENsYXNzLCAnX21ha2VMaXRlcmFsJyk7CiAgICBfbWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyID0KICAgICAgICBfZW52Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIobWFwTGl0ZXJhbENsYXNzLCAnX21ha2VFbXB0eScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IG1hcExpdGVyYWxDb25zdHJ1Y3RvciB7CiAgICBfZW5zdXJlTWFwTGl0ZXJhbEhlbHBlcnMoKTsKICAgIHJldHVybiBfbWFwTGl0ZXJhbENvbnN0cnVjdG9yOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IG1hcExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5IHsKICAgIF9lbnN1cmVNYXBMaXRlcmFsSGVscGVycygpOwogICAgcmV0dXJuIF9tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBtYXBMaXRlcmFsVW50eXBlZE1ha2VyIHsKICAgIF9lbnN1cmVNYXBMaXRlcmFsSGVscGVycygpOwogICAgcmV0dXJuIF9tYXBMaXRlcmFsVW50eXBlZE1ha2VyOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG1hcExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlciB7CiAgICBfZW5zdXJlTWFwTGl0ZXJhbEhlbHBlcnMoKTsKICAgIHJldHVybiBfbWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyOwogIH0KCiAgQ2xhc3NFbnRpdHkgX3NldExpdGVyYWxDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgc2V0TGl0ZXJhbENsYXNzID0+IF9zZXRMaXRlcmFsQ2xhc3MgPz89CiAgICAgIF9maW5kQ2xhc3MoX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9jb2xsZWN0aW9uKSwgJ0xpbmtlZEhhc2hTZXQnKTsKCiAgQ29uc3RydWN0b3JFbnRpdHkgX3NldExpdGVyYWxDb25zdHJ1Y3RvcjsKICBDb25zdHJ1Y3RvckVudGl0eSBfc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHk7CiAgRnVuY3Rpb25FbnRpdHkgX3NldExpdGVyYWxVbnR5cGVkTWFrZXI7CiAgRnVuY3Rpb25FbnRpdHkgX3NldExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlcjsKCiAgdm9pZCBfZW5zdXJlU2V0TGl0ZXJhbEhlbHBlcnMoKSB7CiAgICBpZiAoX3NldExpdGVyYWxDb25zdHJ1Y3RvciAhPSBudWxsKSByZXR1cm47CgogICAgX3NldExpdGVyYWxDb25zdHJ1Y3RvciA9CiAgICAgICAgX2Vudi5sb29rdXBDb25zdHJ1Y3RvcihzZXRMaXRlcmFsQ2xhc3MsICdfbGl0ZXJhbCcpOwogICAgX3NldExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5ID0KICAgICAgICBfZW52Lmxvb2t1cENvbnN0cnVjdG9yKHNldExpdGVyYWxDbGFzcywgJ19lbXB0eScpOwogICAgX3NldExpdGVyYWxVbnR5cGVkTWFrZXIgPQogICAgICAgIF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcihzZXRMaXRlcmFsQ2xhc3MsICdfbWFrZUxpdGVyYWwnKTsKICAgIF9zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXIgPQogICAgICAgIF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcihzZXRMaXRlcmFsQ2xhc3MsICdfbWFrZUVtcHR5Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc2V0TGl0ZXJhbENvbnN0cnVjdG9yIHsKICAgIF9lbnN1cmVTZXRMaXRlcmFsSGVscGVycygpOwogICAgcmV0dXJuIF9zZXRMaXRlcmFsQ29uc3RydWN0b3I7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHkgewogICAgX2Vuc3VyZVNldExpdGVyYWxIZWxwZXJzKCk7CiAgICByZXR1cm4gX3NldExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5OwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNldExpdGVyYWxVbnR5cGVkTWFrZXIgewogICAgX2Vuc3VyZVNldExpdGVyYWxIZWxwZXJzKCk7CiAgICByZXR1cm4gX3NldExpdGVyYWxVbnR5cGVkTWFrZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc2V0TGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyIHsKICAgIF9lbnN1cmVTZXRMaXRlcmFsSGVscGVycygpOwogICAgcmV0dXJuIF9zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXI7CiAgfQoKICBGdW5jdGlvbkVudGl0eSBfb2JqZWN0Tm9TdWNoTWV0aG9kOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBvYmplY3ROb1N1Y2hNZXRob2QgewogICAgcmV0dXJuIF9vYmplY3ROb1N1Y2hNZXRob2QgPz89CiAgICAgICAgX2Vudi5sb29rdXBMb2NhbENsYXNzTWVtYmVyKG9iamVjdENsYXNzLCBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEZWZhdWx0Tm9TdWNoTWV0aG9kSW1wbGVtZW50YXRpb24oRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgIHJldHVybiBjbGFzc0VsZW1lbnQgPT0gb2JqZWN0Q2xhc3MgfHwKICAgICAgICBjbGFzc0VsZW1lbnQgPT0ganNJbnRlcmNlcHRvckNsYXNzIHx8CiAgICAgICAgY2xhc3NFbGVtZW50ID09IGpzTnVsbENsYXNzOwogIH0KCiAgLy8gRnJvbSBkYXJ0OmFzeW5jCiAgQ2xhc3NFbnRpdHkgX2ZpbmRBc3luY0hlbHBlckNsYXNzKFN0cmluZyBuYW1lKSA9PgogICAgICBfZmluZENsYXNzKGFzeW5jTGlicmFyeSwgbmFtZSk7CgogIEZ1bmN0aW9uRW50aXR5IF9maW5kQXN5bmNIZWxwZXJGdW5jdGlvbihTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRMaWJyYXJ5TWVtYmVyKGFzeW5jTGlicmFyeSwgbmFtZSk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0hlbHBlclN0YXJ0U3luYyA9PgogICAgICBfZmluZEFzeW5jSGVscGVyRnVuY3Rpb24oIl9hc3luY1N0YXJ0U3luYyIpOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0hlbHBlckF3YWl0ID0+CiAgICAgIF9maW5kQXN5bmNIZWxwZXJGdW5jdGlvbigiX2FzeW5jQXdhaXQiKTsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNIZWxwZXJSZXR1cm4gPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCJfYXN5bmNSZXR1cm4iKTsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNIZWxwZXJSZXRocm93ID0+CiAgICAgIF9maW5kQXN5bmNIZWxwZXJGdW5jdGlvbigiX2FzeW5jUmV0aHJvdyIpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgd3JhcEJvZHkgPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCJfd3JhcEpzRnVuY3Rpb25Gb3JBc3luYyIpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgeWllbGRTdGFyID0+IF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgX2ZpbmRBc3luY0hlbHBlckNsYXNzKCJfSXRlcmF0aW9uTWFya2VyIiksICJ5aWVsZFN0YXIiKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHlpZWxkU2luZ2xlID0+IF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgX2ZpbmRBc3luY0hlbHBlckNsYXNzKCJfSXRlcmF0aW9uTWFya2VyIiksICJ5aWVsZFNpbmdsZSIpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3luY1N0YXJVbmNhdWdodEVycm9yID0+IF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgX2ZpbmRBc3luY0hlbHBlckNsYXNzKCJfSXRlcmF0aW9uTWFya2VyIiksICJ1bmNhdWdodEVycm9yIik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY1N0YXJIZWxwZXIgPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCJfYXN5bmNTdGFySGVscGVyIik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzdHJlYW1PZkNvbnRyb2xsZXIgPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCJfc3RyZWFtT2ZDb250cm9sbGVyIik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBlbmRPZkl0ZXJhdGlvbiA9PiBfZW52Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoCiAgICAgIF9maW5kQXN5bmNIZWxwZXJDbGFzcygiX0l0ZXJhdGlvbk1hcmtlciIpLCAiZW5kT2ZJdGVyYXRpb24iKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHN5bmNTdGFySXRlcmFibGUgPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckNsYXNzKCJfU3luY1N0YXJJdGVyYWJsZSIpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgZnV0dXJlSW1wbGVtZW50YXRpb24gPT4gX2ZpbmRBc3luY0hlbHBlckNsYXNzKCdfRnV0dXJlJyk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb250cm9sbGVyU3RyZWFtID0+CiAgICAgIF9maW5kQXN5bmNIZWxwZXJDbGFzcygiX0NvbnRyb2xsZXJTdHJlYW0iKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHN0cmVhbUl0ZXJhdG9yID0+IF9maW5kQXN5bmNIZWxwZXJDbGFzcygiU3RyZWFtSXRlcmF0b3IiKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3IgPT4KICAgICAgX2Vudi5sb29rdXBDb25zdHJ1Y3RvcihzdHJlYW1JdGVyYXRvciwgIiIpOwoKICBGdW5jdGlvbkVudGl0eSBfc3luY1N0YXJJdGVyYWJsZUZhY3Rvcnk7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN5bmNTdGFySXRlcmFibGVGYWN0b3J5ID0+IF9zeW5jU3Rhckl0ZXJhYmxlRmFjdG9yeSA/Pz0KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCdfbWFrZVN5bmNTdGFySXRlcmFibGUnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2FzeW5jQXdhaXRDb21wbGV0ZXJGYWN0b3J5OwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0F3YWl0Q29tcGxldGVyRmFjdG9yeSA9PgogICAgICBfYXN5bmNBd2FpdENvbXBsZXRlckZhY3RvcnkgPz89CiAgICAgICAgICBfZmluZEFzeW5jSGVscGVyRnVuY3Rpb24oJ19tYWtlQXN5bmNBd2FpdENvbXBsZXRlcicpOwoKICBGdW5jdGlvbkVudGl0eSBfYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckZhY3Rvcnk7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJGYWN0b3J5ID0+CiAgICAgIF9hc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRmFjdG9yeSA/Pz0KICAgICAgICAgIF9maW5kQXN5bmNIZWxwZXJGdW5jdGlvbignX21ha2VBc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJyk7CgogIC8vIEZyb20gZGFydDpfaW50ZXJjZXB0b3JzCiAgQ2xhc3NFbnRpdHkgX2ZpbmRJbnRlcmNlcHRvcnNDbGFzcyhTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRDbGFzcyhpbnRlcmNlcHRvcnNMaWJyYXJ5LCBuYW1lKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2ZpbmRJbnRlcmNlcHRvcnNGdW5jdGlvbihTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRMaWJyYXJ5TWVtYmVyKGludGVyY2VwdG9yc0xpYnJhcnksIG5hbWUpOwoKICBDbGFzc0VudGl0eSBfanNJbnRlcmNlcHRvckNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0ludGVyY2VwdG9yQ2xhc3MgPT4KICAgICAgX2pzSW50ZXJjZXB0b3JDbGFzcyA/Pz0gX2ZpbmRJbnRlcmNlcHRvcnNDbGFzcygnSW50ZXJjZXB0b3InKTsKCiAgQ2xhc3NFbnRpdHkgX2pzU3RyaW5nQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzU3RyaW5nQ2xhc3MgPT4KICAgICAgX2pzU3RyaW5nQ2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTU3RyaW5nJyk7CgogIENsYXNzRW50aXR5IF9qc0FycmF5Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzQXJyYXlDbGFzcyA9PgogICAgICBfanNBcnJheUNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU0FycmF5Jyk7CgogIENsYXNzRW50aXR5IF9qc051bWJlckNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc051bWJlckNsYXNzID0+CiAgICAgIF9qc051bWJlckNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU051bWJlcicpOwoKICBDbGFzc0VudGl0eSBfanNJbnRDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNJbnRDbGFzcyA9PiBfanNJbnRDbGFzcyA/Pz0gX2ZpbmRJbnRlcmNlcHRvcnNDbGFzcygnSlNJbnQnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzRG91YmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzRG91YmxlQ2xhc3MgPT4KICAgICAgX2pzRG91YmxlQ2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTRG91YmxlJyk7CgogIENsYXNzRW50aXR5IF9qc051bGxDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNOdWxsQ2xhc3MgPT4KICAgICAgX2pzTnVsbENsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU051bGwnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzQm9vbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0Jvb2xDbGFzcyA9PgogICAgICBfanNCb29sQ2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTQm9vbCcpOwoKICBDbGFzc0VudGl0eSBfanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcyA9PgogICAgICBfanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcyA/Pz0KICAgICAgICAgIF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ1BsYWluSmF2YVNjcmlwdE9iamVjdCcpOwoKICBDbGFzc0VudGl0eSBfanNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Q2xhc3MgPT4KICAgICAgX2pzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzcyA/Pz0KICAgICAgICAgIF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Jyk7CgogIENsYXNzRW50aXR5IF9qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzID0+IF9qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzID8/PQogICAgICBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKYXZhU2NyaXB0RnVuY3Rpb24nKTsKCiAgQ2xhc3NFbnRpdHkgX2pzSmF2YVNjcmlwdE9iamVjdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0phdmFTY3JpcHRPYmplY3RDbGFzcyA9PgogICAgICBfanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0phdmFTY3JpcHRPYmplY3QnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzSW5kZXhhYmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSW5kZXhhYmxlQ2xhc3MgPT4KICAgICAgX2pzSW5kZXhhYmxlQ2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTSW5kZXhhYmxlJyk7CgogIENsYXNzRW50aXR5IF9qc011dGFibGVJbmRleGFibGVDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNNdXRhYmxlSW5kZXhhYmxlQ2xhc3MgPT4KICAgICAgX2pzTXV0YWJsZUluZGV4YWJsZUNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU011dGFibGVJbmRleGFibGUnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzTXV0YWJsZUFycmF5Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzTXV0YWJsZUFycmF5Q2xhc3MgPT4KICAgICAgX2pzTXV0YWJsZUFycmF5Q2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTTXV0YWJsZUFycmF5Jyk7CgogIENsYXNzRW50aXR5IF9qc0ZpeGVkQXJyYXlDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNGaXhlZEFycmF5Q2xhc3MgPT4KICAgICAgX2pzRml4ZWRBcnJheUNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU0ZpeGVkQXJyYXknKTsKCiAgQ2xhc3NFbnRpdHkgX2pzRXh0ZW5kYWJsZUFycmF5Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MgPT4KICAgICAgX2pzRXh0ZW5kYWJsZUFycmF5Q2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTRXh0ZW5kYWJsZUFycmF5Jyk7CgogIENsYXNzRW50aXR5IF9qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcyA9PiBfanNVbm1vZGlmaWFibGVBcnJheUNsYXNzID8/PQogICAgICBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU1VubW9kaWZpYWJsZUFycmF5Jyk7CgogIENsYXNzRW50aXR5IF9qc1Bvc2l0aXZlSW50Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzUG9zaXRpdmVJbnRDbGFzcyA9PgogICAgICBfanNQb3NpdGl2ZUludENsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU1Bvc2l0aXZlSW50Jyk7CgogIENsYXNzRW50aXR5IF9qc1VJbnQzMkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc1VJbnQzMkNsYXNzID0+CiAgICAgIF9qc1VJbnQzMkNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU1VJbnQzMicpOwoKICBDbGFzc0VudGl0eSBfanNVSW50MzFDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNVSW50MzFDbGFzcyA9PgogICAgICBfanNVSW50MzFDbGFzcyA/Pz0gX2ZpbmRJbnRlcmNlcHRvcnNDbGFzcygnSlNVSW50MzEnKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyLm5hbWUgPT0gJ2ZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZScgJiYKICAgICAgICBtZW1iZXIuaXNUb3BMZXZlbCAmJgogICAgICAgIG1lbWJlci5saWJyYXJ5ID09IGludGVyY2VwdG9yc0xpYnJhcnk7CiAgfQoKICBGdW5jdGlvbkVudGl0eSBfZ2V0TmF0aXZlSW50ZXJjZXB0b3JNZXRob2Q7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kID0+CiAgICAgIF9nZXROYXRpdmVJbnRlcmNlcHRvck1ldGhvZCA/Pz0KICAgICAgICAgIF9maW5kSW50ZXJjZXB0b3JzRnVuY3Rpb24oJ2dldE5hdGl2ZUludGVyY2VwdG9yJyk7CgogIEBvdmVycmlkZQogIGJvb2wgYXBwbGllc1RvSnNJbmRleGFibGVMZW5ndGgoU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIHJldHVybiBzZWxlY3Rvci5uYW1lID09ICdsZW5ndGgnICYmIChzZWxlY3Rvci5pc0dldHRlciB8fCBzZWxlY3Rvci5pc0NhbGwpOwogIH0KCiAgQ29uc3RydWN0b3JFbnRpdHkgX2pzQXJyYXlUeXBlZENvbnN0cnVjdG9yOwogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGdldCBqc0FycmF5VHlwZWRDb25zdHJ1Y3RvciA9PgogICAgICBfanNBcnJheVR5cGVkQ29uc3RydWN0b3IgPz89IF9maW5kQ29uc3RydWN0b3IoanNBcnJheUNsYXNzLCAndHlwZWQnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2pzQXJyYXlSZW1vdmVMYXN0OwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBqc0FycmF5UmVtb3ZlTGFzdCA9PgogICAgICBfanNBcnJheVJlbW92ZUxhc3QgPz89IF9maW5kQ2xhc3NNZW1iZXIoanNBcnJheUNsYXNzLCAncmVtb3ZlTGFzdCcpOwoKICBGdW5jdGlvbkVudGl0eSBfanNBcnJheUFkZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQganNBcnJheUFkZCA9PgogICAgICBfanNBcnJheUFkZCA/Pz0gX2ZpbmRDbGFzc01lbWJlcihqc0FycmF5Q2xhc3MsICdhZGQnKTsKCiAgYm9vbCBfaXNKc1N0cmluZ0NsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGNscy5uYW1lID09ICdKU1N0cmluZycgJiYgY2xzLmxpYnJhcnkgPT0gaW50ZXJjZXB0b3JzTGlicmFyeTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0cmluZ1NwbGl0KE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBtZW1iZXIubmFtZSA9PSAnc3BsaXQnICYmCiAgICAgICAgbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICBfaXNKc1N0cmluZ0NsYXNzKG1lbWJlci5lbmNsb3NpbmdDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFwcGxpZXNUb0pzU3RyaW5nU3BsaXQoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgaWYgKF9qc1N0cmluZ1NwbGl0ID09IG51bGwpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0KICAgICAgICAgIF9maW5kQ2xhc3MoaW50ZXJjZXB0b3JzTGlicmFyeSwgJ0pTU3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlKTsKICAgICAgaWYgKGNscyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIF9qc1N0cmluZ1NwbGl0ID0gX2ZpbmRDbGFzc01lbWJlcihjbHMsICdzcGxpdCcsIHJlcXVpcmVkOiBmYWxzZSk7CiAgICAgIGlmIChfanNTdHJpbmdTcGxpdCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gc2VsZWN0b3IuYXBwbGllcyhfanNTdHJpbmdTcGxpdCkgJiYKICAgICAgICAocmVjZWl2ZXIgPT0gbnVsbCB8fAogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgICAuaXNUYXJnZXRpbmdNZW1iZXIocmVjZWl2ZXIsIGpzU3RyaW5nU3BsaXQsIHNlbGVjdG9yLm1lbWJlck5hbWUpCiAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpOwogIH0KCiAgRnVuY3Rpb25FbnRpdHkgX2pzU3RyaW5nU3BsaXQ7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGpzU3RyaW5nU3BsaXQgPT4KICAgICAgX2pzU3RyaW5nU3BsaXQgPz89IF9maW5kQ2xhc3NNZW1iZXIoanNTdHJpbmdDbGFzcywgJ3NwbGl0Jyk7CgogIEZ1bmN0aW9uRW50aXR5IF9qc1N0cmluZ1RvU3RyaW5nOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBqc1N0cmluZ1RvU3RyaW5nID0+CiAgICAgIF9qc1N0cmluZ1RvU3RyaW5nID8/PSBfZmluZENsYXNzTWVtYmVyKGpzU3RyaW5nQ2xhc3MsICd0b1N0cmluZycpOwoKICBGdW5jdGlvbkVudGl0eSBfanNTdHJpbmdPcGVyYXRvckFkZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQganNTdHJpbmdPcGVyYXRvckFkZCA9PgogICAgICBfanNTdHJpbmdPcGVyYXRvckFkZCA/Pz0gX2ZpbmRDbGFzc01lbWJlcihqc1N0cmluZ0NsYXNzLCAnKycpOwoKICBDbGFzc0VudGl0eSBfanNDb25zdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0NvbnN0Q2xhc3MgPT4KICAgICAgX2pzQ29uc3RDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhmb3JlaWduTGlicmFyeSwgJ0pTX0NPTlNUJyk7CgogIC8vIEZyb20gcGFja2FnZTpqcwogIENsYXNzRW50aXR5IF9qc0Fubm90YXRpb25DbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNBbm5vdGF0aW9uQ2xhc3MgewogICAgaWYgKF9qc0Fubm90YXRpb25DbGFzcyA9PSBudWxsKSB7CiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IF9lbnYubG9va3VwTGlicmFyeShVcmlzLnBhY2thZ2VfanMpOwogICAgICBpZiAobGlicmFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgX2pzQW5ub3RhdGlvbkNsYXNzID0gX2ZpbmRDbGFzcyhsaWJyYXJ5LCAnSlMnKTsKICAgIH0KICAgIHJldHVybiBfanNBbm5vdGF0aW9uQ2xhc3M7CiAgfQoKICBDbGFzc0VudGl0eSBfanNBbm9ueW1vdXNDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNBbm9ueW1vdXNDbGFzcyB7CiAgICBpZiAoX2pzQW5vbnltb3VzQ2xhc3MgPT0gbnVsbCkgewogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5wYWNrYWdlX2pzKTsKICAgICAgaWYgKGxpYnJhcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIF9qc0Fub255bW91c0NsYXNzID0gX2ZpbmRDbGFzcyhsaWJyYXJ5LCAnX0Fub255bW91cycpOwogICAgfQogICAgcmV0dXJuIF9qc0Fub255bW91c0NsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZmluZEhlbHBlckZ1bmN0aW9uKFN0cmluZyBuYW1lKSA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKG5hbWUpOwoKICBGdW5jdGlvbkVudGl0eSBfZmluZEhlbHBlckZ1bmN0aW9uKFN0cmluZyBuYW1lKSA9PgogICAgICBfZmluZExpYnJhcnlNZW1iZXIoanNIZWxwZXJMaWJyYXJ5LCBuYW1lKTsKCiAgQ2xhc3NFbnRpdHkgX2ZpbmRIZWxwZXJDbGFzcyhTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRDbGFzcyhqc0hlbHBlckxpYnJhcnksIG5hbWUpOwoKICBDbGFzc0VudGl0eSBfY2xvc3VyZUNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjbG9zdXJlQ2xhc3MgPT4gX2Nsb3N1cmVDbGFzcyA/Pz0gX2ZpbmRIZWxwZXJDbGFzcygnQ2xvc3VyZScpOwoKICBDbGFzc0VudGl0eSBfYm91bmRDbG9zdXJlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGJvdW5kQ2xvc3VyZUNsYXNzID0+CiAgICAgIF9ib3VuZENsb3N1cmVDbGFzcyA/Pz0gX2ZpbmRIZWxwZXJDbGFzcygnQm91bmRDbG9zdXJlJyk7CgogIENsYXNzRW50aXR5IF90eXBlTGl0ZXJhbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCB0eXBlTGl0ZXJhbENsYXNzID0+CiAgICAgIF90eXBlTGl0ZXJhbENsYXNzID8/PSBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgICAgICA/IF9maW5kUnRpQ2xhc3MoJ19UeXBlJykKICAgICAgICAgIDogX2ZpbmRIZWxwZXJDbGFzcygnVHlwZUltcGwnKTsKCiAgQ2xhc3NFbnRpdHkgX2NvbnN0TWFwTGl0ZXJhbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb25zdE1hcExpdGVyYWxDbGFzcyA9PgogICAgICBfY29uc3RNYXBMaXRlcmFsQ2xhc3MgPz89IF9maW5kSGVscGVyQ2xhc3MoJ0NvbnN0YW50TWFwJyk7CgogIC8vIFRPRE8oZmlzaHl0aGVmaXNoKTogSW1wbGVtZW50IGEgYENvbnN0YW50U2V0YCBjbGFzcyBhbmQgdXBkYXRlIHRoZSBiYWNrZW5kCiAgLy8gaW1wYWN0cyArIGNvbnN0YW50IGVtaXR0ZXIgYWNjb3JkaW5nbHkuCiAgQ2xhc3NFbnRpdHkgX2NvbnN0U2V0TGl0ZXJhbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb25zdFNldExpdGVyYWxDbGFzcyA9PgogICAgICBfY29uc3RTZXRMaXRlcmFsQ2xhc3MgPz89IHVubW9kaWZpYWJsZVNldENsYXNzOwoKICBDbGFzc0VudGl0eSBfdHlwZVZhcmlhYmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVWYXJpYWJsZUNsYXNzID0+CiAgICAgIF90eXBlVmFyaWFibGVDbGFzcyA/Pz0gX2ZpbmRIZWxwZXJDbGFzcygnVHlwZVZhcmlhYmxlJyk7CgogIENsYXNzRW50aXR5IF9wcmFnbWFDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgcHJhZ21hQ2xhc3MgPT4KICAgICAgX3ByYWdtYUNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAncHJhZ21hJyk7CgogIEZpZWxkRW50aXR5IF9wcmFnbWFDbGFzc05hbWVGaWVsZDsKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXQgcHJhZ21hQ2xhc3NOYW1lRmllbGQgPT4KICAgICAgX3ByYWdtYUNsYXNzTmFtZUZpZWxkID8/PSBfZmluZENsYXNzTWVtYmVyKHByYWdtYUNsYXNzLCAnbmFtZScpOwoKICBGaWVsZEVudGl0eSBfcHJhZ21hQ2xhc3NPcHRpb25zRmllbGQ7CiAgQG92ZXJyaWRlCiAgRmllbGRFbnRpdHkgZ2V0IHByYWdtYUNsYXNzT3B0aW9uc0ZpZWxkID0+CiAgICAgIF9wcmFnbWFDbGFzc09wdGlvbnNGaWVsZCA/Pz0gX2ZpbmRDbGFzc01lbWJlcihwcmFnbWFDbGFzcywgJ29wdGlvbnMnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzSW52b2NhdGlvbk1pcnJvckNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0ludm9jYXRpb25NaXJyb3JDbGFzcyA9PgogICAgICBfanNJbnZvY2F0aW9uTWlycm9yQ2xhc3MgPz89IF9maW5kSGVscGVyQ2xhc3MoJ0pTSW52b2NhdGlvbk1pcnJvcicpOwoKICBNZW1iZXJFbnRpdHkgX2ludm9jYXRpb25UeXBlQXJndW1lbnRHZXR0ZXI7CiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGdldCBpbnZvY2F0aW9uVHlwZUFyZ3VtZW50R2V0dGVyID0+CiAgICAgIF9pbnZvY2F0aW9uVHlwZUFyZ3VtZW50R2V0dGVyID8/PQogICAgICAgICAgX2ZpbmRDbGFzc01lbWJlcihqc0ludm9jYXRpb25NaXJyb3JDbGFzcywgJ3R5cGVBcmd1bWVudHMnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzSW5kZXhpbmdCZWhhdmlvckludGVyZmFjZTsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlID0+CiAgICAgIF9qc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2UgPz89CiAgICAgICAgICBfZmluZEhlbHBlckNsYXNzKCdKYXZhU2NyaXB0SW5kZXhpbmdCZWhhdmlvcicpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgc3RhY2tUcmFjZUhlbHBlckNsYXNzID0+IF9maW5kSGVscGVyQ2xhc3MoJ19TdGFja1RyYWNlJyk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb25zdGFudE1hcENsYXNzID0+CiAgICAgIF9maW5kSGVscGVyQ2xhc3MoY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5EQVJUX0NMQVNTKTsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgY29uc3RhbnRTdHJpbmdNYXBDbGFzcyA9PgogICAgICBfZmluZEhlbHBlckNsYXNzKGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuREFSVF9TVFJJTkdfQ0xBU1MpOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb25zdGFudFByb3RvTWFwQ2xhc3MgPT4KICAgICAgX2ZpbmRIZWxwZXJDbGFzcyhjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkRBUlRfUFJPVE9fQ0xBU1MpOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBnZW5lcmFsQ29uc3RhbnRNYXBDbGFzcyA9PiBfZmluZEhlbHBlckNsYXNzKAogICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkRBUlRfR0VORVJBTF9DTEFTUyk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBhbm5vdGF0aW9uQ3JlYXRlc0NsYXNzID0+IF9maW5kSGVscGVyQ2xhc3MoJ0NyZWF0ZXMnKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGFubm90YXRpb25SZXR1cm5zQ2xhc3MgPT4gX2ZpbmRIZWxwZXJDbGFzcygnUmV0dXJucycpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgYW5ub3RhdGlvbkpTTmFtZUNsYXNzID0+IF9maW5kSGVscGVyQ2xhc3MoJ0pTTmFtZScpOwoKICBDbGFzc0VudGl0eSBfbmF0aXZlQW5ub3RhdGlvbkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBuYXRpdmVBbm5vdGF0aW9uQ2xhc3MgPT4KICAgICAgX25hdGl2ZUFubm90YXRpb25DbGFzcyA/Pz0gX2ZpbmRIZWxwZXJDbGFzcygnTmF0aXZlJyk7CgogIENvbnN0cnVjdG9yRW50aXR5IF90eXBlVmFyaWFibGVDb25zdHJ1Y3RvcjsKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgdHlwZVZhcmlhYmxlQ29uc3RydWN0b3IgPT4gX3R5cGVWYXJpYWJsZUNvbnN0cnVjdG9yID8/PQogICAgICBfZW52Lmxvb2t1cENvbnN0cnVjdG9yKHR5cGVWYXJpYWJsZUNsYXNzLCAnJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9hc3NlcnRUZXN0OwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRUZXN0ID0+CiAgICAgIF9hc3NlcnRUZXN0ID8/PSBfZmluZEhlbHBlckZ1bmN0aW9uKCdhc3NlcnRUZXN0Jyk7CgogIEZ1bmN0aW9uRW50aXR5IF9hc3NlcnRUaHJvdzsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0VGhyb3cgPT4KICAgICAgX2Fzc2VydFRocm93ID8/PSBfZmluZEhlbHBlckZ1bmN0aW9uKCdhc3NlcnRUaHJvdycpOwoKICBGdW5jdGlvbkVudGl0eSBfYXNzZXJ0SGVscGVyOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRIZWxwZXIgPT4KICAgICAgX2Fzc2VydEhlbHBlciA/Pz0gX2ZpbmRIZWxwZXJGdW5jdGlvbignYXNzZXJ0SGVscGVyJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9hc3NlcnRVbnJlYWNoYWJsZU1ldGhvZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0VW5yZWFjaGFibGVNZXRob2QgPT4KICAgICAgX2Fzc2VydFVucmVhY2hhYmxlTWV0aG9kID8/PSBfZmluZEhlbHBlckZ1bmN0aW9uKCdhc3NlcnRVbnJlYWNoYWJsZScpOwoKICBGdW5jdGlvbkVudGl0eSBfZ2V0SXNvbGF0ZUFmZmluaXR5VGFnTWFya2VyOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRJc29sYXRlQWZmaW5pdHlUYWdNYXJrZXIgPT4KICAgICAgX2dldElzb2xhdGVBZmZpbml0eVRhZ01hcmtlciA/Pz0KICAgICAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2dldElzb2xhdGVBZmZpbml0eVRhZycpOwoKICBGdW5jdGlvbkVudGl0eSBfcmVxdWlyZXNQcmVhbWJsZU1hcmtlcjsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgcmVxdWlyZXNQcmVhbWJsZU1hcmtlciA9PgogICAgICBfcmVxdWlyZXNQcmVhbWJsZU1hcmtlciA/Pz0gX2ZpbmRIZWxwZXJGdW5jdGlvbigncmVxdWlyZXNQcmVhbWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgbG9hZExpYnJhcnlXcmFwcGVyID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oIl9sb2FkTGlicmFyeVdyYXBwZXIiKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGxvYWREZWZlcnJlZExpYnJhcnkgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigibG9hZERlZmVycmVkTGlicmFyeSIpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYm9vbENvbnZlcnNpb25DaGVjayA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdib29sQ29udmVyc2lvbkNoZWNrJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCB0cmFjZUhlbHBlciA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKCd0cmFjZUhlbHBlcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgY2xvc3VyZUZyb21UZWFyT2ZmID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2Nsb3N1cmVGcm9tVGVhck9mZicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgaXNKc0luZGV4YWJsZSA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKCdpc0pzSW5kZXhhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdpYWUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2lvb3JlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBleGNlcHRpb25VbndyYXBwZXIgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigndW53cmFwRXhjZXB0aW9uJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd1J1bnRpbWVFcnJvciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCd0aHJvd1J1bnRpbWVFcnJvcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dVbnN1cHBvcnRlZEVycm9yID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ3Rocm93VW5zdXBwb3J0ZWRFcnJvcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dUeXBlRXJyb3IgPT4gX2ZpbmRIZWxwZXJGdW5jdGlvbigndGhyb3dUeXBlRXJyb3InKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCd0aHJvd0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3InKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2NhY2hlZENoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvciA9PgogICAgICBfY2FjaGVkQ2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IgPz89CiAgICAgICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigndGhyb3dDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3InKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NoZWNrSW50KE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBtZW1iZXIuaXNGdW5jdGlvbiAmJgogICAgICAgIG1lbWJlci5pc1RvcExldmVsICYmCiAgICAgICAgbWVtYmVyLmxpYnJhcnkgPT0ganNIZWxwZXJMaWJyYXJ5ICYmCiAgICAgICAgbWVtYmVyLm5hbWUgPT0gJ2NoZWNrSW50JzsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNDaGVja051bShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyLmlzRnVuY3Rpb24gJiYKICAgICAgICBtZW1iZXIuaXNUb3BMZXZlbCAmJgogICAgICAgIG1lbWJlci5saWJyYXJ5ID09IGpzSGVscGVyTGlicmFyeSAmJgogICAgICAgIG1lbWJlci5uYW1lID09ICdjaGVja051bSc7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzQ2hlY2tTdHJpbmcoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIG1lbWJlci5pc0Z1bmN0aW9uICYmCiAgICAgICAgbWVtYmVyLmlzVG9wTGV2ZWwgJiYKICAgICAgICBtZW1iZXIubGlicmFyeSA9PSBqc0hlbHBlckxpYnJhcnkgJiYKICAgICAgICBtZW1iZXIubmFtZSA9PSAnY2hlY2tTdHJpbmcnOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN0cmluZ0ludGVycG9sYXRpb25IZWxwZXIgPT4gX2ZpbmRIZWxwZXJGdW5jdGlvbignUycpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgd3JhcEV4Y2VwdGlvbkhlbHBlciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCd3cmFwRXhjZXB0aW9uJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0V4cHJlc3Npb25IZWxwZXIgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigndGhyb3dFeHByZXNzaW9uJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjbG9zdXJlQ29udmVydGVyID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2NvbnZlcnREYXJ0Q2xvc3VyZVRvSlMnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRyYWNlRnJvbUV4Y2VwdGlvbiA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdnZXRUcmFjZUZyb21FeGNlcHRpb24nKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNldFJ1bnRpbWVUeXBlSW5mbyA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdzZXRSdW50aW1lVHlwZUluZm8nKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldFJ1bnRpbWVUeXBlSW5mbyA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdnZXRSdW50aW1lVHlwZUluZm8nKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldFR5cGVBcmd1bWVudEJ5SW5kZXggPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignZ2V0VHlwZUFyZ3VtZW50QnlJbmRleCcpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgY29tcHV0ZVNpZ25hdHVyZSA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdjb21wdXRlU2lnbmF0dXJlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRSdW50aW1lVHlwZUFyZ3VtZW50cyA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdnZXRSdW50aW1lVHlwZUFyZ3VtZW50cycpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2V0UnVudGltZVR5cGVBcmd1bWVudCA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdnZXRSdW50aW1lVHlwZUFyZ3VtZW50Jyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRSdW50aW1lVHlwZUFyZ3VtZW50SW50ZXJjZXB0ZWQgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignZ2V0UnVudGltZVR5cGVBcmd1bWVudEludGVyY2VwdGVkJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRJc1N1YnR5cGUgPT4gX2ZpbmRIZWxwZXJGdW5jdGlvbignYXNzZXJ0SXNTdWJ0eXBlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja1N1YnR5cGUgPT4gX2ZpbmRIZWxwZXJGdW5jdGlvbignY2hlY2tTdWJ0eXBlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRTdWJ0eXBlID0+IF9maW5kSGVscGVyRnVuY3Rpb24oJ2Fzc2VydFN1YnR5cGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN1YnR5cGVDYXN0ID0+IF9maW5kSGVscGVyRnVuY3Rpb24oJ3N1YnR5cGVDYXN0Jyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBmdW5jdGlvblR5cGVUZXN0ID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2Z1bmN0aW9uVHlwZVRlc3QnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGZ1dHVyZU9yVGVzdCA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKCdmdXR1cmVPclRlc3QnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNoZWNrU3VidHlwZU9mUnVudGltZVR5cGUgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignY2hlY2tTdWJ0eXBlT2ZSdW50aW1lVHlwZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0U3VidHlwZU9mUnVudGltZVR5cGUgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignYXNzZXJ0U3VidHlwZU9mUnVudGltZVR5cGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN1YnR5cGVPZlJ1bnRpbWVUeXBlQ2FzdCA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdzdWJ0eXBlT2ZSdW50aW1lVHlwZUNhc3QnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNoZWNrRGVmZXJyZWRJc0xvYWRlZCA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdjaGVja0RlZmVycmVkSXNMb2FkZWQnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93Tm9TdWNoTWV0aG9kID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ3Rocm93Tm9TdWNoTWV0aG9kJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVSdW50aW1lVHlwZSA9PiBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgID8gX2ZpbmRSdGlGdW5jdGlvbignX2NyZWF0ZVJ1bnRpbWVUeXBlJykKICAgICAgOiBfZmluZEhlbHBlckZ1bmN0aW9uKCdjcmVhdGVSdW50aW1lVHlwZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZmFsbFRocm91Z2hFcnJvciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCJnZXRGYWxsVGhyb3VnaEVycm9yIik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVJbnZvY2F0aW9uTWlycm9yID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2NyZWF0ZUludm9jYXRpb25NaXJyb3InKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NyZWF0ZUludm9jYXRpb25NaXJyb3JIZWxwZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIG1lbWJlci5pc1RvcExldmVsICYmCiAgICAgICAgbWVtYmVyLm5hbWUgPT0gJ19jcmVhdGVJbnZvY2F0aW9uTWlycm9yJyAmJgogICAgICAgIG1lbWJlci5saWJyYXJ5ID09IGNvcmVMaWJyYXJ5OwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNyZWF0ZVVubWFuZ2xlZEludm9jYXRpb25NaXJyb3IgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgY3ljbGljVGhyb3dIZWxwZXIgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigidGhyb3dDeWNsaWNJbml0Iik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBkZWZpbmVQcm9wZXJ0eSA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKCdkZWZpbmVQcm9wZXJ0eScpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzRXh0cmFjdFR5cGVBcmd1bWVudHMoRnVuY3Rpb25FbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyLm5hbWUgPT0gJ2V4dHJhY3RUeXBlQXJndW1lbnRzJyAmJgogICAgICAgIG1lbWJlci5saWJyYXJ5ID09IGludGVybmFsTGlicmFyeTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcixzcmEpOiBTdXBwb3J0IGFyYml0cmFyeSB0eXBlIGFyZ3VtZW50IGNvdW50LgogIHZvaWQgX2NoZWNrVHlwZUFyZ3VtZW50Q291bnQoaW50IHR5cGVBcmd1bWVudENvdW50KSB7CiAgICBhc3NlcnQodHlwZUFyZ3VtZW50Q291bnQgPiAwKTsKICAgIGlmICh0eXBlQXJndW1lbnRDb3VudCA+IDIwKSB7CiAgICAgIGZhaWxlZEF0KAogICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgIlVuc3VwcG9ydGVkIGluc3RhbnRpYXRpb24gYXJndW1lbnQgY291bnQ6ICIKICAgICAgICAgICIke3R5cGVBcmd1bWVudENvdW50fSIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0SW5zdGFudGlhdGlvbkNsYXNzKGludCB0eXBlQXJndW1lbnRDb3VudCkgewogICAgX2NoZWNrVHlwZUFyZ3VtZW50Q291bnQodHlwZUFyZ3VtZW50Q291bnQpOwogICAgcmV0dXJuIF9maW5kSGVscGVyQ2xhc3MoJ0luc3RhbnRpYXRpb24kdHlwZUFyZ3VtZW50Q291bnQnKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldEluc3RhbnRpYXRlRnVuY3Rpb24oaW50IHR5cGVBcmd1bWVudENvdW50KSB7CiAgICBfY2hlY2tUeXBlQXJndW1lbnRDb3VudCh0eXBlQXJndW1lbnRDb3VudCk7CiAgICByZXR1cm4gX2ZpbmRIZWxwZXJGdW5jdGlvbignaW5zdGFudGlhdGUkdHlwZUFyZ3VtZW50Q291bnQnKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBpbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2luc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGV4dHJhY3RGdW5jdGlvblR5cGVPYmplY3RGcm9tSW50ZXJuYWwgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignZXh0cmFjdEZ1bmN0aW9uVHlwZU9iamVjdEZyb21JbnRlcm5hbCcpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW5zdGFudGlhdGlvbkNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGNscy5saWJyYXJ5ID09IF9qc0hlbHBlckxpYnJhcnkgJiYKICAgICAgICBjbHMubmFtZSAhPSAnSW5zdGFudGlhdGlvbicgJiYKICAgICAgICBjbHMubmFtZS5zdGFydHNXaXRoKCdJbnN0YW50aWF0aW9uJyk7CiAgfQoKICAvLyBGcm9tIGRhcnQ6X3J0aQoKICBDbGFzc0VudGl0eSBfZmluZFJ0aUNsYXNzKFN0cmluZyBuYW1lKSA9PiBfZmluZENsYXNzKHJ0aUxpYnJhcnksIG5hbWUpOwoKICBGdW5jdGlvbkVudGl0eSBfZmluZFJ0aUZ1bmN0aW9uKFN0cmluZyBuYW1lKSA9PgogICAgICBfZmluZExpYnJhcnlNZW1iZXIocnRpTGlicmFyeSwgbmFtZSk7CgogIEZ1bmN0aW9uRW50aXR5IF9maW5kVHlwZTsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZmluZFR5cGUgPT4gX2ZpbmRUeXBlID8/PSBfZmluZFJ0aUZ1bmN0aW9uKCdmaW5kVHlwZScpOwoKICBGdW5jdGlvbkVudGl0eSBfaW5zdGFuY2VUeXBlOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBpbnN0YW5jZVR5cGUgPT4KICAgICAgX2luc3RhbmNlVHlwZSA/Pz0gX2ZpbmRSdGlGdW5jdGlvbignaW5zdGFuY2VUeXBlJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9hcnJheUluc3RhbmNlVHlwZTsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXJyYXlJbnN0YW5jZVR5cGUgPT4KICAgICAgX2FycmF5SW5zdGFuY2VUeXBlID8/PSBfZmluZFJ0aUZ1bmN0aW9uKCdfYXJyYXlJbnN0YW5jZVR5cGUnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX3NpbXBsZUluc3RhbmNlVHlwZTsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc2ltcGxlSW5zdGFuY2VUeXBlID0+CiAgICAgIF9zaW1wbGVJbnN0YW5jZVR5cGUgPz89IF9maW5kUnRpRnVuY3Rpb24oJ19pbnN0YW5jZVR5cGUnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX3R5cGVMaXRlcmFsTWFrZXI7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHR5cGVMaXRlcmFsTWFrZXIgPT4KICAgICAgX3R5cGVMaXRlcmFsTWFrZXIgPz89IF9maW5kUnRpRnVuY3Rpb24oJ3R5cGVMaXRlcmFsJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9jaGVja1R5cGVCb3VuZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgY2hlY2tUeXBlQm91bmQgPT4KICAgICAgX2NoZWNrVHlwZUJvdW5kID8/PSBfZmluZFJ0aUZ1bmN0aW9uKCdjaGVja1R5cGVCb3VuZCcpOwoKICBDbGFzc0VudGl0eSBnZXQgX3J0aUltcGxDbGFzcyA9PiBfZmluZENsYXNzKHJ0aUxpYnJhcnksICdSdGknKTsKICBDbGFzc0VudGl0eSBnZXQgX3J0aVVuaXZlcnNlQ2xhc3MgPT4gX2ZpbmRDbGFzcyhydGlMaWJyYXJ5LCAnX1VuaXZlcnNlJyk7CiAgRmllbGRFbnRpdHkgX2ZpbmRSdGlDbGFzc0ZpZWxkKFN0cmluZyBuYW1lKSA9PgogICAgICBfZmluZENsYXNzTWVtYmVyKF9ydGlJbXBsQ2xhc3MsIG5hbWUpOwoKICBGaWVsZEVudGl0eSBfcnRpQXNGaWVsZDsKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXQgcnRpQXNGaWVsZCA9PiBfcnRpQXNGaWVsZCA/Pz0gX2ZpbmRSdGlDbGFzc0ZpZWxkKCdfYXMnKTsKCiAgRmllbGRFbnRpdHkgX3J0aUlzRmllbGQ7CiAgQG92ZXJyaWRlCiAgRmllbGRFbnRpdHkgZ2V0IHJ0aUlzRmllbGQgPT4gX3J0aUlzRmllbGQgPz89IF9maW5kUnRpQ2xhc3NGaWVsZCgnX2lzJyk7CgogIEZpZWxkRW50aXR5IF9ydGlDaGVja0ZpZWxkOwogIEBvdmVycmlkZQogIEZpZWxkRW50aXR5IGdldCBydGlDaGVja0ZpZWxkID0+CiAgICAgIF9ydGlDaGVja0ZpZWxkID8/PSBfZmluZFJ0aUNsYXNzRmllbGQoJ19jaGVjaycpOwoKICBGaWVsZEVudGl0eSBfcnRpUmVzdEZpZWxkOwogIEBvdmVycmlkZQogIEZpZWxkRW50aXR5IGdldCBydGlSZXN0RmllbGQgPT4gX3J0aVJlc3RGaWVsZCA/Pz0gX2ZpbmRSdGlDbGFzc0ZpZWxkKCdfcmVzdCcpOwoKICBGdW5jdGlvbkVudGl0eSBfcnRpRXZhbE1ldGhvZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgcnRpRXZhbE1ldGhvZCA9PgogICAgICBfcnRpRXZhbE1ldGhvZCA/Pz0gX2ZpbmRDbGFzc01lbWJlcihfcnRpSW1wbENsYXNzLCAnX2V2YWwnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX3J0aUJpbmRNZXRob2Q7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHJ0aUJpbmRNZXRob2QgPT4KICAgICAgX3J0aUJpbmRNZXRob2QgPz89IF9maW5kQ2xhc3NNZW1iZXIoX3J0aUltcGxDbGFzcywgJ19iaW5kJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9ydGlBZGRSdWxlc01ldGhvZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgcnRpQWRkUnVsZXNNZXRob2QgPT4KICAgICAgX3J0aUFkZFJ1bGVzTWV0aG9kID8/PSBfZmluZENsYXNzTWVtYmVyKF9ydGlVbml2ZXJzZUNsYXNzLCAnYWRkUnVsZXMnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2dlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbjsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2VuZXJhbElzVGVzdEltcGxlbWVudGF0aW9uID0+CiAgICAgIF9nZW5lcmFsSXNUZXN0SW1wbGVtZW50YXRpb24gPz89CiAgICAgICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfZ2VuZXJhbElzVGVzdEltcGxlbWVudGF0aW9uJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9nZW5lcmFsQXNDaGVja0ltcGxlbWVudGF0aW9uOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBnZW5lcmFsQXNDaGVja0ltcGxlbWVudGF0aW9uID0+CiAgICAgIF9nZW5lcmFsQXNDaGVja0ltcGxlbWVudGF0aW9uID8/PQogICAgICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2dlbmVyYWxBc0NoZWNrSW1wbGVtZW50YXRpb24nKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2dlbmVyYWxUeXBlQ2hlY2tJbXBsZW1lbnRhdGlvbjsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2VuZXJhbFR5cGVDaGVja0ltcGxlbWVudGF0aW9uID0+CiAgICAgIF9nZW5lcmFsVHlwZUNoZWNrSW1wbGVtZW50YXRpb24gPz89CiAgICAgICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfZ2VuZXJhbFR5cGVDaGVja0ltcGxlbWVudGF0aW9uJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZElzQm9vbCA9PiBfZmluZFJ0aUZ1bmN0aW9uKCdfaXNCb29sJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzQm9vbE51bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19hc0Jvb2xOdWxsYWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja0Jvb2xOdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfY2hlY2tCb29sTnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNEb3VibGVOdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfYXNEb3VibGVOdWxsYWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja0RvdWJsZU51bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19jaGVja0RvdWJsZU51bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZElzSW50ID0+IF9maW5kUnRpRnVuY3Rpb24oJ19pc0ludCcpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc0ludE51bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19hc0ludE51bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrSW50TnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2NoZWNrSW50TnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkSXNOdW0gPT4gX2ZpbmRSdGlGdW5jdGlvbignX2lzTnVtJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzTnVtTnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2FzTnVtTnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tOdW1OdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfY2hlY2tOdW1OdWxsYWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRJc1N0cmluZyA9PiBfZmluZFJ0aUZ1bmN0aW9uKCdfaXNTdHJpbmcnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNTdHJpbmdOdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfYXNTdHJpbmdOdWxsYWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja1N0cmluZ051bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19jaGVja1N0cmluZ051bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBpbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlTmV3UnRpID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ2luc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNsb3N1cmVGdW5jdGlvblR5cGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignY2xvc3VyZUZ1bmN0aW9uVHlwZScpOwoKICAvLyBGcm9tIGRhcnQ6X2ludGVybmFsCgogIENsYXNzRW50aXR5IF9zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBzeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzID0+CiAgICAgIF9zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzID8/PSBfZmluZENsYXNzKGludGVybmFsTGlicmFyeSwgJ1N5bWJvbCcpOwoKICBDbGFzc0VudGl0eSBfZXh0ZXJuYWxOYW1lQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGV4dGVybmFsTmFtZUNsYXNzID0+CiAgICAgIF9leHRlcm5hbE5hbWVDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhpbnRlcm5hbExpYnJhcnksICdFeHRlcm5hbE5hbWUnKTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBleHRlcm5hbE5hbWVUeXBlID0+IF9nZXRSYXdUeXBlKGV4dGVybmFsTmFtZUNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHN5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yID0+CiAgICAgIF9zeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3RvciA/Pz0KICAgICAgICAgIF9maW5kQ29uc3RydWN0b3Ioc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcywgJ3ZhbGlkYXRlZCcpOwoKICAvLy8gUmV0dXJucyB0aGUgZmllbGQgdGhhdCBob2xkcyB0aGUgaW50ZXJuYWwgbmFtZSBpbiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MKICAvLy8gZm9yIGBTeW1ib2xgLgogIEZpZWxkRW50aXR5IF9zeW1ib2xJbXBsZW1lbnRhdGlvbkZpZWxkOwogIEZpZWxkRW50aXR5IGdldCBzeW1ib2xJbXBsZW1lbnRhdGlvbkZpZWxkID0+IF9zeW1ib2xJbXBsZW1lbnRhdGlvbkZpZWxkID8/PQogICAgICBfZW52Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcywgJ19uYW1lJywKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlKTsKCiAgQ29uc3RydWN0b3JFbnRpdHkgX3N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yOwogIEBvdmVycmlkZQogIGJvb2wgaXNTeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoX3N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQgPT0gX3N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gRnJvbSBkYXJ0Ol9uYXRpdmVfdHlwZWRfZGF0YQoKICBDbGFzc0VudGl0eSBfdHlwZWRBcnJheU9mSW50Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkQXJyYXlPZkludENsYXNzID0+IF90eXBlZEFycmF5T2ZJbnRDbGFzcyA/Pz0gX2ZpbmRDbGFzcygKICAgICAgX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9fbmF0aXZlX3R5cGVkX2RhdGEsIHJlcXVpcmVkOiB0cnVlKSwKICAgICAgJ05hdGl2ZVR5cGVkQXJyYXlPZkludCcpOwoKICBDbGFzc0VudGl0eSBfdHlwZWRBcnJheU9mRG91YmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkQXJyYXlPZkRvdWJsZUNsYXNzID0+CiAgICAgIF90eXBlZEFycmF5T2ZEb3VibGVDbGFzcyA/Pz0gX2ZpbmRDbGFzcygKICAgICAgICAgIF9lbnYubG9va3VwTGlicmFyeShVcmlzLmRhcnRfX25hdGl2ZV90eXBlZF9kYXRhLCByZXF1aXJlZDogdHJ1ZSksCiAgICAgICAgICAnTmF0aXZlVHlwZWRBcnJheU9mRG91YmxlJyk7CgogIC8vIEZyb20gZGFydDpfanNfZW1iZWRkZWRfbmFtZXMKCiAgQ2xhc3NFbnRpdHkgX2pzR2V0TmFtZUVudW07CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzR2V0TmFtZUVudW0gPT4gX2pzR2V0TmFtZUVudW0gPz89IF9maW5kQ2xhc3MoCiAgICAgIF9lbnYubG9va3VwTGlicmFyeShVcmlzLmRhcnRfX2pzX2VtYmVkZGVkX25hbWVzLCByZXF1aXJlZDogdHJ1ZSksCiAgICAgICdKc0dldE5hbWUnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzQnVpbHRpbkVudW07CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzQnVpbHRpbkVudW0gPT4gX2pzQnVpbHRpbkVudW0gPz89IF9maW5kQ2xhc3MoCiAgICAgIF9lbnYubG9va3VwTGlicmFyeShVcmlzLmRhcnRfX2pzX2VtYmVkZGVkX25hbWVzLCByZXF1aXJlZDogdHJ1ZSksCiAgICAgICdKc0J1aWx0aW4nKTsKCiAgYm9vbCBfbWV0YUFubm90YXRpb25DaGVja2VkID0gZmFsc2U7CiAgQ2xhc3NFbnRpdHkgX21ldGFOb0lubGluZUNsYXNzOwogIENsYXNzRW50aXR5IF9tZXRhVHJ5SW5saW5lQ2xhc3M7CgogIHZvaWQgX2Vuc3VyZU1ldGFBbm5vdGF0aW9ucygpIHsKICAgIGlmICghX21ldGFBbm5vdGF0aW9uQ2hlY2tlZCkgewogICAgICBfbWV0YUFubm90YXRpb25DaGVja2VkID0gdHJ1ZTsKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMucGFja2FnZV9tZXRhX2RhcnQyanMpOwogICAgICBpZiAobGlicmFyeSAhPSBudWxsKSB7CiAgICAgICAgX21ldGFOb0lubGluZUNsYXNzID0gX2Vudi5sb29rdXBDbGFzcyhsaWJyYXJ5LCAnX05vSW5saW5lJyk7CiAgICAgICAgX21ldGFUcnlJbmxpbmVDbGFzcyA9IF9lbnYubG9va3VwQ2xhc3MobGlicmFyeSwgJ19UcnlJbmxpbmUnKTsKICAgICAgICBpZiAoX21ldGFOb0lubGluZUNsYXNzID09IG51bGwgfHwgX21ldGFUcnlJbmxpbmVDbGFzcyA9PSBudWxsKSB7CiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgcGFja2FnZSB5b3UncmUgbG9va2luZyBmb3IuCiAgICAgICAgICBfbWV0YU5vSW5saW5lQ2xhc3MgPSBudWxsOwogICAgICAgICAgX21ldGFUcnlJbmxpbmVDbGFzcyA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgbWV0YU5vSW5saW5lQ2xhc3MgewogICAgX2Vuc3VyZU1ldGFBbm5vdGF0aW9ucygpOwogICAgcmV0dXJuIF9tZXRhTm9JbmxpbmVDbGFzczsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBtZXRhVHJ5SW5saW5lQ2xhc3MgewogICAgX2Vuc3VyZU1ldGFBbm5vdGF0aW9ucygpOwogICAgcmV0dXJuIF9tZXRhVHJ5SW5saW5lQ2xhc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRm9yZWlnbihNZW1iZXJFbnRpdHkgZWxlbWVudCkgPT4gZWxlbWVudC5saWJyYXJ5ID09IGZvcmVpZ25MaWJyYXJ5OwoKICBAb3ZlcnJpZGUKICBib29sIGlzRm9yZWlnbkhlbHBlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyLmxpYnJhcnkgPT0gZm9yZWlnbkxpYnJhcnkgfHwKICAgICAgICBpc0NyZWF0ZUludm9jYXRpb25NaXJyb3JIZWxwZXIobWVtYmVyKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNFeHRlcm5hbEFsbG93ZWQoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiBpc0ZvcmVpZ25IZWxwZXIoZnVuY3Rpb24pIHx8CiAgICAgICAgKGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmCiAgICAgICAgICAgIGZ1bmN0aW9uLmlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IpIHx8CiAgICAgICAgbWF5YmVFbmFibGVOYXRpdmUoZnVuY3Rpb24ubGlicmFyeS5jYW5vbmljYWxVcmkpIHx8CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBpbXBvcnRpbmcgZGFydDptaXJyb3JzIGlzCiAgICAgICAgLy8gYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgICAgICAgZnVuY3Rpb24ubGlicmFyeS5jYW5vbmljYWxVcmkgPT0gVXJpcy5kYXJ0X21pcnJvcnM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yRXFIYW5kbGVzTnVsbEFyZ3VtZW50KEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICBhc3NlcnQoZnVuY3Rpb24ubmFtZSA9PSAnPT0nLAogICAgICAgIGZhaWxlZEF0KGZ1bmN0aW9uLCAiVW5leHBlY3RlZCBmdW5jdGlvbiAkZnVuY3Rpb24uIikpOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3M7CiAgICByZXR1cm4gY2xzID09IG9iamVjdENsYXNzIHx8CiAgICAgICAgY2xzID09IGpzSW50ZXJjZXB0b3JDbGFzcyB8fAogICAgICAgIGNscyA9PSBqc051bGxDbGFzczsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldERlZmF1bHRTdXBlcmNsYXNzKAogICAgICBDbGFzc0VudGl0eSBjbHMsIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGEpIHsKICAgIGlmIChuYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgIHJldHVybiBqc0phdmFTY3JpcHRPYmplY3RDbGFzczsKICAgIH0KICAgIC8vIE5hdGl2ZSBjbGFzc2VzIGluaGVyaXQgZnJvbSBJbnRlcmNlcHRvci4KICAgIHJldHVybiBuYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVDbGFzcyhjbHMpCiAgICAgICAgPyBqc0ludGVyY2VwdG9yQ2xhc3MKICAgICAgICA6IG9iamVjdENsYXNzOwogIH0KfQoKLy8vIEludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGxpYnJhcmllcywgY2xhc3NlcyBhbmQgbWVtYmVycy4KLy8vCi8vLyBUaGUgZWxlbWVudCBlbnZpcm9ubWVudCBtYWtlcyBwcml2YXRlIGFuZCBpbmplY3RlZCBtZW1iZXJzIGRpcmVjdGx5Ci8vLyBhdmFpbGFibGUgYW5kIHNob3VsZCB0aGVyZWZvcmUgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHNjb3Blcy4KLy8vCi8vLyBUaGUgcHJvcGVydGllcyBleHBvc2VkIGFyZSBEYXJ0LWNlbnRyaWMgYW5kIHNob3VsZCB0aGVyZWZvcmUsIGxvbmctdGVybSwgbm90Ci8vLyBiZSB1c2VkIGR1cmluZyBjb2RlZ2VuLCBleHBlY3QgZm9yIG1pcnJvcnMuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFNwbGl0IHRoaXMgaW50byBhbiBlbGVtZW50IGVudmlyb25tZW50IGFuZCBhIHR5cGUgcXVlcnkKLy8gaW50ZXJmYWNlLCB0aGUgZmlyc3Qgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVzb2x1dGlvbiBhbmQgdGhlIGxhdHRlciBpbgovLyBib3RoIHJlc29sdXRpb24gYW5kIGNvZGVnZW4uCmFic3RyYWN0IGNsYXNzIEVsZW1lbnRFbnZpcm9ubWVudCB7CiAgLy8vIFJldHVybnMgdGhlIG1haW4gbGlicmFyeSBmb3IgdGhlIGNvbXBpbGF0aW9uLgogIExpYnJhcnlFbnRpdHkgZ2V0IG1haW5MaWJyYXJ5OwoKICAvLy8gUmV0dXJucyB0aGUgbWFpbiBtZXRob2QgZm9yIHRoZSBjb21waWxhdGlvbi4KICBGdW5jdGlvbkVudGl0eSBnZXQgbWFpbkZ1bmN0aW9uOwoKICAvLy8gUmV0dXJucyBhbGwga25vd24gbGlicmFyaWVzLgogIEl0ZXJhYmxlPExpYnJhcnlFbnRpdHk+IGdldCBsaWJyYXJpZXM7CgogIC8vLyBSZXR1cm5zIHRoZSBsaWJyYXJ5IG5hbWUgb2YgW2xpYnJhcnldIG9yICcnIGlmIHRoZSBsaWJyYXJ5IGlzIHVubmFtZWQuCiAgU3RyaW5nIGdldExpYnJhcnlOYW1lKExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBMb29rdXAgdGhlIGxpYnJhcnkgd2l0aCB0aGUgY2Fub25pY2FsIFt1cmldLCBmYWlsIGlmIHRoZSBsaWJyYXJ5IGlzCiAgLy8vIG1pc3NpbmcgYW5kIFtyZXF1aXJlZF07CiAgTGlicmFyeUVudGl0eSBsb29rdXBMaWJyYXJ5KFVyaSB1cmksIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBldmVyeSBjbGFzcyBkZWNsYXJlZCBpbiBbbGlicmFyeV0uCiAgdm9pZCBmb3JFYWNoQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCB2b2lkIGYoQ2xhc3NFbnRpdHkgY2xzKSk7CgogIC8vLyBMb29rdXAgdGhlIGNsYXNzIFtuYW1lXSBpbiBbbGlicmFyeV0sIGZhaWwgaWYgdGhlIGNsYXNzIGlzIG1pc3NpbmcgYW5kCiAgLy8vIFtyZXF1aXJlZF0uCiAgQ2xhc3NFbnRpdHkgbG9va3VwQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGV2ZXJ5IHRvcCBsZXZlbCBtZW1iZXIgaW4gW2xpYnJhcnldLgogIHZvaWQgZm9yRWFjaExpYnJhcnlNZW1iZXIoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpOwoKICAvLy8gTG9va3VwIHRoZSBtZW1iZXIgW25hbWVdIGluIFtsaWJyYXJ5XSwgZmFpbCBpZiB0aGUgY2xhc3MgaXMgbWlzc2luZyBhbmQKICAvLy8gW3JlcXVpcmVkXS4KICBNZW1iZXJFbnRpdHkgbG9va3VwTGlicmFyeU1lbWJlcihMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlLCBib29sIHJlcXVpcmVkOiBmYWxzZX0pOwoKICAvLy8gTG9va3VwIHRoZSBtZW1iZXIgW25hbWVdIGluIFtjbHNdLCBmYWlsIGlmIHRoZSBjbGFzcyBpcyBtaXNzaW5nIGFuZAogIC8vLyBbcmVxdWlyZWRdLgogIE1lbWJlckVudGl0eSBsb29rdXBMb2NhbENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IGZhbHNlfSk7CgogIC8vLyBMb29rdXAgdGhlIG1lbWJlciBbbmFtZV0gaW4gW2Nsc10gYW5kIGl0cyBzdXBlcmNsYXNzZXMuCiAgLy8vCiAgLy8vIFJldHVybiBgbnVsbGAgaWYgdGhlIG1lbWJlciBpcyBub3QgZm91bmQgaW4gdGhlIGNsYXNzIG9yIGFueSBzdXBlcmNsYXNzLgogIE1lbWJlckVudGl0eSBsb29rdXBDbGFzc01lbWJlcihDbGFzc0VudGl0eSBjbHMsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgdmFyIGVudGl0eSA9IGxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoY2xzLCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICBpZiAoZW50aXR5ICE9IG51bGwpIHJldHVybiBlbnRpdHk7CgogICAgdmFyIHN1cGVyY2xhc3MgPSBnZXRTdXBlckNsYXNzKGNscyk7CiAgICBpZiAoc3VwZXJjbGFzcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICByZXR1cm4gbG9va3VwQ2xhc3NNZW1iZXIoc3VwZXJjbGFzcywgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogIH0KCiAgLy8vIExvb2t1cCB0aGUgY29uc3RydWN0b3IgW25hbWVdIGluIFtjbHNdLCBmYWlsIGlmIHRoZSBjbGFzcyBpcyBtaXNzaW5nIGFuZAogIC8vLyBbcmVxdWlyZWRdLgogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNsYXNzIG1lbWJlciBkZWNsYXJlZCBpbiBbY2xzXS4KICB2b2lkIGZvckVhY2hMb2NhbENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjbGFzcyBtZW1iZXIgZGVjbGFyZWQgb3IgaW5oZXJpdGVkIGluIFtjbHNdIHRvZ2V0aGVyCiAgLy8vIHdpdGggdGhlIGNsYXNzIHRoYXQgZGVjbGFyZWQgdGhlIG1lbWJlci4KICAvLy8KICAvLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGQgbm90IGluY2x1ZGUgc3RhdGljIG1lbWJlcnMgb2YKICAvLy8gc3VwZXJjbGFzc2VzLgogIHZvaWQgZm9yRWFjaENsYXNzTWVtYmVyKAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDbGFzc0VudGl0eSBkZWNsYXJlciwgTWVtYmVyRW50aXR5IG1lbWJlcikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBldmVyeSBjb25zdHJ1Y3RvciBkZWNsYXJlZCBpbiBbY2xzXS4KICAvLy8KICAvLy8gV2lsbCBlbnN1cmUgdGhhdCB0aGUgY2xhc3MgYW5kIGFsbCBjb25zdHJ1Y3RvcnMgYXJlIHJlc29sdmVkIGlmCiAgLy8vIFtlbnN1cmVSZXNvbHZlZF0gaXMgYHRydWVgLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikpOwoKICAvLy8gUmV0dXJucyB0aGUgc3VwZXJjbGFzcyBvZiBbY2xzXS4KICAvLy8KICAvLy8gSWYgW3NraXBVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbnNdIGlzIGB0cnVlYCwgdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbnMKICAvLy8gYXJlIGV4Y2x1ZGVkLCBmb3IgaW5zdGFuY2UgZm9yIHRoZXNlIGNsYXNzZXMKICAvLy8KICAvLy8gICAgIGNsYXNzIFMge30KICAvLy8gICAgIGNsYXNzIE0ge30KICAvLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBTIHdpdGggTSB7fQogIC8vLwogIC8vLyB0aGUgcmVzdWx0IG9mIGBnZXRTdXBlckNsYXNzKEMpYCBpcyB0aGUgdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbgogIC8vLyB0eXBpY2FsbHkgbmFtZWQgYFMrTWAgYW5kIGBnZXRTdXBlckNsYXNzKFMrTSlgIGlzIGBTYCwgd2hlcmVhcwogIC8vLyB0aGUgcmVzdWx0IG9mIGBnZXRTdXBlckNsYXNzKEMsIHNraXBVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbnM6IGZhbHNlKWAgaXMKICAvLy8gYFNgLgogIENsYXNzRW50aXR5IGdldFN1cGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzLAogICAgICB7Ym9vbCBza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zOiBmYWxzZX0pOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIHN1cGVydHlwZSBvZiBbY2xzXS4KICB2b2lkIGZvckVhY2hTdXBlcnR5cGUoQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpKTsKCiAgLy8vIENyZWF0ZSB0aGUgaW5zdGFudGlhdGlvbiBvZiBbY2xzXSB3aXRoIHRoZSBnaXZlbiBbdHlwZUFyZ3VtZW50c10uCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBDbGFzc0VudGl0eSBjbHMsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgYGR5bmFtaWNgIHR5cGUuCiAgRGFydFR5cGUgZ2V0IGR5bmFtaWNUeXBlOwoKICAvLy8gUmV0dXJucyB0aGUgJ3JhdyB0eXBlJyBvZiBbY2xzXS4gVGhhdCBpcywgdGhlIGluc3RhbnRpYXRpb24gb2YgW2Nsc10KICAvLy8gd2hlcmUgYWxsIHR5cGVzIGFyZ3VtZW50cyBhcmUgYGR5bmFtaWNgLgogIEludGVyZmFjZVR5cGUgZ2V0UmF3VHlwZShDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgJ3RoaXMgdHlwZScgb2YgW2Nsc10uIFRoYXQgaXMsIHRoZSBpbnN0YW50aWF0aW9uIG9mIFtjbHNdCiAgLy8vIHdoZXJlIHRoZSB0eXBlIGFyZ3VtZW50cyBhcmUgdGhlIHR5cGUgdmFyaWFibGVzIG9mIFtjbHNdLgogIEludGVyZmFjZVR5cGUgZ2V0VGhpc1R5cGUoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGdlbmVyaWMuCiAgYm9vbCBpc0dlbmVyaWNDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiAobmFtZWQgb3IgdW5uYW1lZCkuCiAgYm9vbCBpc01peGluQXBwbGljYXRpb24oQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGFuIHVubmFtZWQgbWl4aW4gYXBwbGljYXRpb24uCiAgYm9vbCBpc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBUaGUgdXBwZXIgYm91bmQgb24gdGhlIFt0eXBlVmFyaWFibGVdLiBJZiBub3QgZXhwbGljaXRseSBkZWNsYXJlZCwgdGhpcyBpcwogIC8vLyBgT2JqZWN0YC4KICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChUeXBlVmFyaWFibGVFbnRpdHkgdHlwZVZhcmlhYmxlKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgW2Z1bmN0aW9uXS4KICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKCiAgLy8vIFJldHVybnMgdGhlIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzIGRlZmluZWQgb24gW2Z1bmN0aW9uXS4KICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbik7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBbbG9jYWxdIGZ1bmN0aW9uLgogIEZ1bmN0aW9uVHlwZSBnZXRMb2NhbEZ1bmN0aW9uVHlwZShMb2NhbCBsb2NhbCk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIFtmaWVsZF0uCiAgRGFydFR5cGUgZ2V0RmllbGRUeXBlKEZpZWxkRW50aXR5IGZpZWxkKTsKCiAgLy8vIFJldHVybnMgdGhlICd1bmFsaWFzZWQnIHR5cGUgb2YgW3R5cGVdLiBGb3IgdHlwZWRlZnMgdGhpcyBpcyB0aGUgZnVuY3Rpb24KICAvLy8gdHlwZSBpdCBpcyBhbiBhbGlhcyBvZiwgZm9yIG90aGVyIHR5cGVzIGl0IGlzIHRoZSB0eXBlIGl0c2VsZi4KICAvLy8KICAvLy8gVXNlIHRoaXMgZHVyaW5nIHJlc29sdXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIGFsaWFzIGhhcyBiZWVuIGNvbXB1dGVkLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gdGhlIHJlc29sdmVyIGlzIHJlbW92ZWQuCiAgRGFydFR5cGUgZ2V0VW5hbGlhc2VkVHlwZShEYXJ0VHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGEgRGFydCBlbnVtIGNsYXNzLgogIGJvb2wgaXNFbnVtQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKfQoKYWJzdHJhY3QgY2xhc3MgS0VsZW1lbnRFbnZpcm9ubWVudCBleHRlbmRzIEVsZW1lbnRFbnZpcm9ubWVudCB7CiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjbGFzcyB0aGF0IGlzIG1peGVkIGludG8gW2Nsc10gb3Igb25lIG9mIGl0cwogIC8vLyBzdXBlcmNsYXNzZXMuCiAgdm9pZCBmb3JFYWNoTWl4aW4oQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgbWl4aW4pKTsKCiAgLy8vIEdldHMgdGhlIGNvbnN0YW50IHZhbHVlIG9mIFtmaWVsZF0sIG9yIGBudWxsYCBpZiBbZmllbGRdIGlzIG5vbi1jb25zdC4KICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudEZvclRlc3RpbmcoRmllbGRFbnRpdHkgZmllbGQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gYSB0aGUgc3ludGhldGljIGdldHRlciBgbG9hZExpYnJhcnlgIGluamVjdGVkCiAgLy8vIG9uIGRlZmVycmVkIGxpYnJhcmllcy4KICBib29sIGlzRGVmZXJyZWRMb2FkTGlicmFyeUdldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgdGhlIGltcG9ydHMgc2VlbiBpbiBbbGlicmFyeV0KICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IGdldEltcG9ydHMoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgLy8vIFJldHVybnMgdGhlIG1ldGFkYXRhIGNvbnN0YW50cyBkZWNsYXJlZCBvbiBbbGlicmFyeV0uCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TGlicmFyeU1ldGFkYXRhKExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBSZXR1cm5zIHRoZSBtZXRhZGF0YSBjb25zdGFudHMgZGVjbGFyZWQgb24gW2Nsc10uCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0Q2xhc3NNZXRhZGF0YShDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbWV0YWRhdGEgY29uc3RhbnRzIGRlY2xhcmVkIG9uIFttZW1iZXJdLgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldE1lbWJlck1ldGFkYXRhKE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIHtib29sIGluY2x1ZGVQYXJhbWV0ZXJNZXRhZGF0YTogZmFsc2V9KTsKfQoKYWJzdHJhY3QgY2xhc3MgSkVsZW1lbnRFbnZpcm9ubWVudCBleHRlbmRzIEVsZW1lbnRFbnZpcm9ubWVudCB7CiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjbGFzcyBtZW1iZXIgYWRkZWQgdG8gW2Nsc10gZHVyaW5nIGNvbXBpbGF0aW9uLgogIHZvaWQgZm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXIoQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBldmVyeSBjb25zdHJ1Y3RvciBib2R5IGluIFtjbHNdLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yQm9keSgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yQm9keSkpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIG5lc3RlZCBjbG9zdXJlIGluIFttZW1iZXJdLgogIHZvaWQgZm9yRWFjaE5lc3RlZENsb3N1cmUoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIHZvaWQgZihGdW5jdGlvbkVudGl0eSBjbG9zdXJlKSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBhIG1peGluIGFwcGxpY2F0aW9uIHRoYXQgbWl4ZXMgaW4gbWV0aG9kcyB3aXRoCiAgLy8vIHN1cGVyIGNhbGxzLgogIGJvb2wgaXNTdXBlck1peGluQXBwbGljYXRpb24oQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlICdlZmZlY3RpdmUnIG1peGluIGNsYXNzIGlmIFtjbHNdIGlzIGEgbWl4aW4gYXBwbGljYXRpb24sIGFuZAogIC8vLyBgbnVsbGAgb3RoZXJ3aXNlLgogIC8vLwogIC8vLyBUaGUgJ2VmZmVjdGl2ZScgbWl4aW4gY2xhc3MgaXMgdGhlIGNsYXNzIGZyb20gd2hpY2ggbWVtYmVycyBhcmUgbWl4ZWQgaW4uCiAgLy8vIE5vcm1hbGx5IHRoaXMgaXMgdGhlIG1peGluIGNsYXNzIGl0c2VsZiwgYnV0IG5vdCBpZiB0aGUgbWl4aW4gY2xhc3MgaXRzZWxmCiAgLy8vIGlzIGEgbWl4aW4gYXBwbGljYXRpb24uCiAgLy8vCiAgLy8vIENvbnNpZGVyIHRoaXMgaGllcmFyY2h5OgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiA9IE9iamVjdCB3aXRoIEEge30KICAvLy8gICAgIGNsYXNzIEMgPSBPYmplY3Qgd2l0aCBCIHt9CiAgLy8vCiAgLy8vIFRoZSBtaXhpbiBjbGFzc2VzIG9mIGBCYCBhbmQgYENgIGFyZSBgQWAgYW5kIGBCYCwgcmVzcGVjdGl2ZWx5LCBidXQgdGhlCiAgLy8vIF9lZmZlY3RpdmVfIG1peGluIGNsYXNzIG9mIGJvdGggaXMgYEFgLgogIENsYXNzRW50aXR5IGdldEVmZmVjdGl2ZU1peGluQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFRoZSBkZWZhdWx0IHR5cGUgb2YgdGhlIFt0eXBlVmFyaWFibGVdLgogIC8vLwogIC8vLyBUaGlzIGlzIHRoZSB0eXBlIHVzZWQgYXMgdGhlIGRlZmF1bHQgdHlwZSBhcmd1bWVudCB3aGVuIG5vIGV4cGxpY2l0IHR5cGUKICAvLy8gYXJndW1lbnQgaXMgcGFzc2VkLgogIERhcnRUeXBlIGdldFR5cGVWYXJpYWJsZURlZmF1bHRUeXBlKFR5cGVWYXJpYWJsZUVudGl0eSB0eXBlVmFyaWFibGUpOwoKICAvLy8gUmV0dXJucyB0aGUgJ2VsZW1lbnQnIHR5cGUgb2YgYSBmdW5jdGlvbiB3aXRoIHRoZSBhc3luYywgYXN5bmMqIG9yIHN5bmMqCiAgLy8vIG1hcmtlciBbbWFya2VyXS4gW3JldHVyblR5cGVdIGlzIHRoZSByZXR1cm4gdHlwZSBtYXJrZWQgZnVuY3Rpb24uCiAgRGFydFR5cGUgZ2V0QXN5bmNPclN5bmNTdGFyRWxlbWVudFR5cGUoCiAgICAgIEFzeW5jTWFya2VyIG1hcmtlciwgRGFydFR5cGUgcmV0dXJuVHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSAnZWxlbWVudCcgdHlwZSBvZiBhIGZ1bmN0aW9uIHdpdGggYW4gYXN5bmMsIGFzeW5jKiBvciBzeW5jKgogIC8vLyBtYXJrZXIuIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgbWV0aG9kIGlzIGluc3BlY3RlZCB0byBkZXRlcm1pbmUgdGhlIHR5cGUKICAvLy8gcGFyYW1ldGVyIG9mIHRoZSBGdXR1cmUsIFN0cmVhbSBvciBJdGVyYWJsZS4KICBEYXJ0VHlwZSBnZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKCiAgLy8vIENhbGxzIFtmXSB3aXRoIGV2ZXJ5IGluc3RhbmNlIGZpZWxkLCB0b2dldGhlciB3aXRoIGl0cyBkZWNsYXJlciwgaW4gYW4KICAvLy8gaW5zdGFuY2Ugb2YgW2Nsc10uIEFsbCBmaWVsZHMgaW5oZXJpdGVkIGZyb20gc3VwZXJjbGFzc2VzIGFuZCBtaXhpbnMgYXJlCiAgLy8vIGluY2x1ZGVkLgogIC8vLwogIC8vLyBJZiBbaXNFbGlkZWRdIGlzIGB0cnVlYCwgdGhlIGZpZWxkIGlzIG5vdCByZWFkIGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdAogIC8vLyBiZSBlbWl0dGVkLgogIHZvaWQgZm9yRWFjaEluc3RhbmNlRmllbGQoCiAgICAgIENsYXNzRW50aXR5IGNscywgdm9pZCBmKENsYXNzRW50aXR5IGRlY2xhcmVyLCBGaWVsZEVudGl0eSBmaWVsZCkpOwoKICAvLy8gQ2FsbHMgW2ZdIHdpdGggZXZlcnkgaW5zdGFuY2UgZmllbGQgZGVjbGFyZWQgZGlyZWN0bHkgaW4gY2xhc3MgW2Nsc10KICAvLy8gKGkuZS4gbm8gaW5oZXJpdGVkIGZpZWxkcykuIEZpZWxkcyBhcmUgcHJlc2VudGVkIGluIGluaXRpYWxpemF0aW9uCiAgLy8vIChpLmUuIHRleHR1YWwp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aG93IENvbW1vbkVsZW1lbnRzLCBFbGVtZW50RW52aXJvbm1lbnQsIEtFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnY29tcGlsZXIuZGFydCcgc2hvdyBDb21waWxlcjsKaW1wb3J0ICdjb25zdGFudHMvdmFsdWVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29uc3RhbnRWYWx1ZSwKICAgICAgICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUsCiAgICAgICAgVHlwZUNvbnN0YW50VmFsdWUsCiAgICAgICAgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlLAogICAgICAgIEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlOwppbXBvcnQgJ2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2tlcm5lbC9rZWxlbWVudHMuZGFydCcgc2hvdyBLTG9jYWxGdW5jdGlvbjsKaW1wb3J0ICdzZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS91c2UuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFVzZUNhc2UsIFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdFZpc2l0b3JJbXBsOwppbXBvcnQgJ3V0aWwvdXRpbC5kYXJ0JyBzaG93IG1ha2VVbmlxdWU7CmltcG9ydCAnd29ybGQuZGFydCcgc2hvdyBLQ2xvc2VkV29ybGQ7CgovLy8gQSAiaHVuayIgb2YgdGhlIHByb2dyYW0gdGhhdCB3aWxsIGJlIGxvYWRlZCB3aGVuZXZlciBvbmUgb2YgaXRzIFtpbXBvcnRzXQovLy8gYXJlIGxvYWRlZC4KLy8vCi8vLyBFbGVtZW50cyB0aGF0IGFyZSBvbmx5IHVzZWQgaW4gb25lIGRlZmVycmVkIGltcG9ydCwgaXMgaW4gYW4gT3V0cHV0VW5pdCB3aXRoCi8vLyB0aGUgZGVmZXJyZWQgaW1wb3J0IGFzIHNpbmdsZSBlbGVtZW50IGluIHRoZSBbaW1wb3J0c10gc2V0LgovLy8KLy8vIFdoZW5ldmVyIGEgZGVmZXJyZWQgRWxlbWVudCBpcyBzaGFyZWQgYmV0d2VlbiBzZXZlcmFsIGRlZmVycmVkIGltcG9ydHMgaXQgaXMKLy8vIGluIGFuIG91dHB1dCB1bml0IHdpdGggdGhvc2UgaW1wb3J0cyBpbiB0aGUgW2ltcG9ydHNdIFNldC4KLy8vCi8vLyBXZSBuZXZlciBjcmVhdGUgdHdvIE91dHB1dFVuaXRzIHNoYXJpbmcgdGhlIHNhbWUgc2V0IG9mIFtpbXBvcnRzXS4KY2xhc3MgT3V0cHV0VW5pdCBpbXBsZW1lbnRzIENvbXBhcmFibGU8T3V0cHV0VW5pdD4gewogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBvdXRwdXQgdW5pdCBpcyBmb3IgdGhlIG1haW4gb3V0cHV0IGZpbGUuCiAgZmluYWwgYm9vbCBpc01haW5PdXRwdXQ7CgogIC8vLyBBIHVuaXF1ZSBuYW1lIHJlcHJlc2VudGluZyB0aGlzIFtPdXRwdXRVbml0XS4KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFRoZSBkZWZlcnJlZCBpbXBvcnRzIHRoYXQgdXNlIHRoZSBlbGVtZW50cyBpbiB0aGlzIG91dHB1dCB1bml0LgogIGZpbmFsIFNldDxJbXBvcnRFbnRpdHk+IF9pbXBvcnRzOwoKICBPdXRwdXRVbml0KHRoaXMuaXNNYWluT3V0cHV0LCB0aGlzLm5hbWUsIHRoaXMuX2ltcG9ydHMpOwoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZVRvKE91dHB1dFVuaXQgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gMDsKICAgIGlmIChpc01haW5PdXRwdXQgJiYgIW90aGVyLmlzTWFpbk91dHB1dCkgcmV0dXJuIC0xOwogICAgaWYgKCFpc01haW5PdXRwdXQgJiYgb3RoZXIuaXNNYWluT3V0cHV0KSByZXR1cm4gMTsKICAgIHZhciBzaXplID0gX2ltcG9ydHMubGVuZ3RoOwogICAgdmFyIG90aGVyU2l6ZSA9IG90aGVyLl9pbXBvcnRzLmxlbmd0aDsKICAgIGlmIChzaXplICE9IG90aGVyU2l6ZSkgcmV0dXJuIHNpemUuY29tcGFyZVRvKG90aGVyU2l6ZSk7CiAgICB2YXIgaW1wb3J0cyA9IF9pbXBvcnRzLnRvTGlzdCgpOwogICAgdmFyIG90aGVySW1wb3J0cyA9IG90aGVyLl9pbXBvcnRzLnRvTGlzdCgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgaWYgKGltcG9ydHNbaV0gPT0gb3RoZXJJbXBvcnRzW2ldKSBjb250aW51ZTsKICAgICAgdmFyIGEgPSBpbXBvcnRzW2ldLnVyaS5wYXRoOwogICAgICB2YXIgYiA9IG90aGVySW1wb3J0c1tpXS51cmkucGF0aDsKICAgICAgdmFyIGNtcCA9IGEuY29tcGFyZVRvKGIpOwogICAgICBpZiAoY21wICE9IDApIHJldHVybiBjbXA7CiAgICB9CiAgICAvLyBUT0RPKHNpZ211bmQpOiBtYWtlIGNvbXBhcmUgc3RhYmxlLiAgSWYgd2UgaGl0IHRoaXMgcG9pbnQsIGFsbCBpbXBvcnRlZAogICAgLy8gbGlicmFyaWVzIGFyZSB0aGUgc2FtZSwgaG93ZXZlciBbdGhpc10gYW5kIFtvdGhlcl0gdXNlIGRpZmZlcmVudCBkZWZlcnJlZAogICAgLy8gaW1wb3J0cyBpbiB0aGUgcHJvZ3JhbS4gV2UgY2FuIG1ha2UgdGhpcyBzdGFibGUgaWYgd2Ugc29ydCBiYXNlZCBvbiB0aGUKICAgIC8vIGRlZmVycmVkIGltcG9ydHMgdGhlbXNlbHZlcyAoZS5nLiB0aGVpciBkZWNsYXJhdGlvbiBsb2NhdGlvbikuCiAgICByZXR1cm4gbmFtZS5jb21wYXJlVG8ob3RoZXIubmFtZSk7CiAgfQoKICBTZXQ8SW1wb3J0RW50aXR5PiBnZXQgaW1wb3J0c0ZvclRlc3RpbmcgPT4gX2ltcG9ydHM7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJPdXRwdXRVbml0KCRuYW1lLCAkX2ltcG9ydHMpIjsKfQoKLy8vIEZvciBlYWNoIGRlZmVycmVkIGltcG9ydCwgZmluZCBlbGVtZW50cyBhbmQgY29uc3RhbnRzIHRvIGJlIGxvYWRlZCB3aGVuIHRoYXQKLy8vIGltcG9ydCBpcyBsb2FkZWQuIEVsZW1lbnRzIHRoYXQgYXJlIHVzZWQgYnkgc2V2ZXJhbCBkZWZlcnJlZCBpbXBvcnRzIGFyZSBpbgovLy8gc2hhcmVkIE91dHB1dFVuaXRzLgphYnN0cmFjdCBjbGFzcyBEZWZlcnJlZExvYWRUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ0RlZmVycmVkIExvYWRpbmcnOwoKICAvLy8gVGhlIE91dHB1dFVuaXQgdGhhdCB3aWxsIGJlIGxvYWRlZCB3aGVuIHRoZSBwcm9ncmFtIHN0YXJ0cy4KICBPdXRwdXRVbml0IF9tYWluT3V0cHV0VW5pdDsKCiAgLy8vIEEgc2V0IGNvbnRhaW5pbmcgKGV2ZW50dWFsbHkpIGFsbCBvdXRwdXQgdW5pdHMgdGhhdCB3aWxsIHJlc3VsdCBmcm9tIHRoZQogIC8vLyBwcm9ncmFtLgogIGZpbmFsIExpc3Q8T3V0cHV0VW5pdD4gX2FsbE91dHB1dFVuaXRzID0gbmV3IExpc3Q8T3V0cHV0VW5pdD4oKTsKCiAgLy8vIFdpbGwgYmUgYHRydWVgIGlmIHRoZSBwcm9ncmFtIGNvbnRhaW5zIGRlZmVycmVkIGxpYnJhcmllcy4KICBib29sIGlzUHJvZ3JhbVNwbGl0ID0gZmFsc2U7CgogIHN0YXRpYyBjb25zdCBJbXBhY3RVc2VDYXNlIElNUEFDVF9VU0UgPSBjb25zdCBJbXBhY3RVc2VDYXNlKCdEZWZlcnJlZCBsb2FkJyk7CgogIC8vLyBBIGNhY2hlIG9mIHRoZSByZXN1bHQgb2YgY2FsbGluZyBgY29tcHV0ZUltcG9ydERlZmVyTmFtZWAgb24gdGhlIGtleXMgb2YKICAvLy8gdGhpcyBtYXAuCiAgZmluYWwgTWFwPEltcG9ydEVudGl0eSwgU3RyaW5nPiBfaW1wb3J0RGVmZXJOYW1lID0gPEltcG9ydEVudGl0eSwgU3RyaW5nPnt9OwoKICAvLy8gQSBtYXBwaW5nIGZyb20gY2xhc3NlcyB0byB0aGVpciBpbXBvcnQgc2V0LgogIE1hcDxDbGFzc0VudGl0eSwgSW1wb3J0U2V0PiBfY2xhc3NUb1NldCA9IG5ldyBNYXA8Q2xhc3NFbnRpdHksIEltcG9ydFNldD4oKTsKCiAgLy8vIEEgbWFwcGluZyBmcm9tIG1lbWJlcnMgdG8gdGhlaXIgaW1wb3J0IHNldC4KICBNYXA8TWVtYmVyRW50aXR5LCBJbXBvcnRTZXQ+IF9tZW1iZXJUb1NldCA9CiAgICAgIG5ldyBNYXA8TWVtYmVyRW50aXR5LCBJbXBvcnRTZXQ+KCk7CgogIC8vLyBBIG1hcHBpbmcgZnJvbSBsb2NhbCBmdW5jdGlvbnMgdG8gdGhlaXIgaW1wb3J0IHNldC4KICBNYXA8TG9jYWwsIEltcG9ydFNldD4gX2xvY2FsRnVuY3Rpb25Ub1NldCA9IG5ldyBNYXA8TG9jYWwsIEltcG9ydFNldD4oKTsKCiAgLy8vIEEgbWFwcGluZyBmcm9tIGNvbnN0YW50cyB0byB0aGVpciBpbXBvcnQgc2V0LgogIE1hcDxDb25zdGFudFZhbHVlLCBJbXBvcnRTZXQ+IF9jb25zdGFudFRvU2V0ID0KICAgICAgbmV3IE1hcDxDb25zdGFudFZhbHVlLCBJbXBvcnRTZXQ+KCk7CgogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gZ2V0IF9hbGxEZWZlcnJlZEltcG9ydHMgPT4KICAgICAgX2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zLmtleXM7CgogIC8vLyBCZWNhdXNlIHRoZSB0b2tlbi1zdHJlYW0gaXMgZm9yZ290dGVuIGxhdGVyIGluIHRoZSBwcm9ncmFtLCB3ZSBjYWNoZSBhCiAgLy8vIGRlc2NyaXB0aW9uIG9mIGVhY2ggZGVmZXJyZWQgaW1wb3J0LgogIGZpbmFsIE1hcDxJbXBvcnRFbnRpdHksIEltcG9ydERlc2NyaXB0aW9uPiBfZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMgPQogICAgICA8SW1wb3J0RW50aXR5LCBJbXBvcnREZXNjcmlwdGlvbj57fTsKCiAgLy8vIEEgbGF0dGljZSB0byBjb21wYWN0bHkgcmVwcmVzZW50IG11bHRpcGxlIHN1YnNldHMgb2YgaW1wb3J0cy4KICBmaW5hbCBJbXBvcnRTZXRMYXR0aWNlIGltcG9ydFNldHMgPSBuZXcgSW1wb3J0U2V0TGF0dGljZSgpOwoKICBmaW5hbCBDb21waWxlciBjb21waWxlcjsKCiAgYm9vbCBnZXQgZGlzYWJsZVByb2dyYW1TcGxpdCA9PiBjb21waWxlci5vcHRpb25zLmRpc2FibGVQcm9ncmFtU3BsaXQ7CiAgYm9vbCBnZXQgbmV3RGVmZXJyZWRTcGxpdCA9PiBjb21waWxlci5vcHRpb25zLm5ld0RlZmVycmVkU3BsaXQ7CiAgYm9vbCBnZXQgcmVwb3J0SW52YWxpZEluZmVycmVkRGVmZXJyZWRUeXBlcyA9PgogICAgICBjb21waWxlci5vcHRpb25zLnJlcG9ydEludmFsaWRJbmZlcnJlZERlZmVycmVkVHlwZXM7CgogIERlZmVycmVkTG9hZFRhc2sodGhpcy5jb21waWxlcikgOiBzdXBlcihjb21waWxlci5tZWFzdXJlcikgewogICAgX21haW5PdXRwdXRVbml0ID0gbmV3IE91dHB1dFVuaXQodHJ1ZSwgJ21haW4nLCBuZXcgU2V0PEltcG9ydEVudGl0eT4oKSk7CiAgICBpbXBvcnRTZXRzLm1haW5TZXQudW5pdCA9IF9tYWluT3V0cHV0VW5pdDsKICAgIF9hbGxPdXRwdXRVbml0cy5hZGQoX21haW5PdXRwdXRVbml0KTsKICB9CgogIEtFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBjb21waWxlci5mcm9udGVuZFN0cmF0ZWd5LmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IGNvbXBpbGVyLmZyb250ZW5kU3RyYXRlZ3kuY29tbW9uRWxlbWVudHM7CgogIERpYWdub3N0aWNSZXBvcnRlciBnZXQgcmVwb3J0ZXIgPT4gY29tcGlsZXIucmVwb3J0ZXI7CgogIC8vLyBHaXZlbiBbaW1wb3J0c10gdGhhdCByZWZlciB0byBhbiBlbGVtZW50IGZyb20gYSBsaWJyYXJ5LCBkZXRlcm1pbmUgd2hldGhlcgogIC8vLyB0aGUgZWxlbWVudCBpcyBleHBsaWNpdGx5IGRlZmVycmVkLgogIHN0YXRpYyBib29sIF9pc0V4cGxpY2l0bHlEZWZlcnJlZChJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IGltcG9ydHMpIHsKICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG5vdCBpbXBvcnRlZCBleHBsaWNpdGx5LCBpdCBpcyBpbXBsaWNpdGx5IGltcG9ydGVkCiAgICAvLyBub3QgZGVmZXJyZWQuCiAgICBpZiAoaW1wb3J0cy5pc0VtcHR5KSByZXR1cm4gZmFsc2U7CiAgICAvLyBBbiBlbGVtZW50IGNvdWxkIHBvdGVudGlhbGx5IGJlIGxvYWRlZCBieSBzZXZlcmFsIGltcG9ydHMuIElmIGFsbCBvZiB0aGVtCiAgICAvLyBpcyBleHBsaWNpdGx5IGRlZmVycmVkLCB3ZSBzYXkgdGhlIGVsZW1lbnQgaXMgZXhwbGljaXRseSBkZWZlcnJlZC4KICAgIC8vIFRPRE8oc2lndXJkbSk6IFdlIG1pZ2h0IHdhbnQgdG8gZ2l2ZSBhIHdhcm5pbmcgaWYgdGhlIGltcG9ydHMgZG8gbm90CiAgICAvLyBhZ3JlZS4KICAgIHJldHVybiBpbXBvcnRzLmV2ZXJ5KChJbXBvcnRFbnRpdHkgaW1wb3J0KSA9PiBpbXBvcnQuaXNEZWZlcnJlZCk7CiAgfQoKICAvLy8gUmV0dXJucyBldmVyeSBbSW1wb3J0RW50aXR5XSB0aGF0IGltcG9ydHMgW2VsZW1lbnRdIGludG8gW2xpYnJhcnldLgogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gY2xhc3NJbXBvcnRzVG8oCiAgICAgIENsYXNzRW50aXR5IGVsZW1lbnQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBSZXR1cm5zIGV2ZXJ5IFtJbXBvcnRFbnRpdHldIHRoYXQgaW1wb3J0cyBbZWxlbWVudF0gaW50byBbbGlicmFyeV0uCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBtZW1iZXJJbXBvcnRzVG8oCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LCBMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICAvLy8gUmV0dXJucyBldmVyeSBbSW1wb3J0RW50aXR5XSB0aGF0IGltcG9ydHMgW2VsZW1lbnRdIGludG8gW2xpYnJhcnldLgogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gdHlwZWRlZkltcG9ydHNUbygKICAgICAgVHlwZWRlZkVudGl0eSBlbGVtZW50LCBMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICAvLy8gQ29sbGVjdHMgYWxsIGRpcmVjdCBkZXBlbmRlbmNpZXMgb2YgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBUaGUgY29sbGVjdGVkIGRlcGVuZGVudCBlbGVtZW50cyBhbmQgY29uc3RhbnRzIGFyZSBhcmUgYWRkZWQgdG8KICAvLy8gW2VsZW1lbnRzXSBhbmQgW2NvbnN0YW50c10gcmVzcGVjdGl2ZWx5LgogIHZvaWQgX2NvbGxlY3REaXJlY3RNZW1iZXJEZXBlbmRlbmNpZXMoS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcykgewogICAgLy8gVE9ETyhzaWd1cmRtKTogV2Ugd2FudCB0byBiZSBtb3JlIHNwZWNpZmljIGFib3V0IHRoaXMgLSBuZWVkIGEgYmV0dGVyCiAgICAvLyB3YXkgdG8gcXVlcnkgImxpdmVuZXNzIi4KICAgIGlmICghY29tcGlsZXIucmVzb2x1dGlvbldvcmxkQnVpbGRlci5pc01lbWJlclVzZWQoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgX2NvbGxlY3REZXBlbmRlbmNpZXNGcm9tSW1wYWN0KGNsb3NlZFdvcmxkLCBlbGVtZW50LCBkZXBlbmRlbmNpZXMpOwogICAgY29sbGVjdENvbnN0YW50c0luQm9keShlbGVtZW50LCBkZXBlbmRlbmNpZXMpOwogIH0KCiAgLy8vIEZpbmRzIGFsbCBlbGVtZW50cyBhbmQgY29uc3RhbnRzIHRoYXQgW2VsZW1lbnRdIGRlcGVuZHMgZGlyZWN0bHkgb24uCiAgLy8vIChub3QgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZS4pCiAgLy8vCiAgLy8vIEFkZHMgdGhlIHJlc3VsdHMgdG8gW2VsZW1lbnRzXSBhbmQgW2NvbnN0YW50c10uCiAgdm9pZCBfY29sbGVjdEFsbEVsZW1lbnRzQW5kQ29uc3RhbnRzUmVzb2x2ZWRGcm9tQ2xhc3MoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCwKICAgICAgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcykgewogICAgLy8gSWYgd2Ugc2VlIGEgY2xhc3MsIGFkZCBldmVyeXRoaW5nIGl0cyBsaXZlIGluc3RhbmNlIG1lbWJlcnMgcmVmZXIKICAgIC8vIHRvLiAgU3RhdGljIG1lbWJlcnMgYXJlIG5vdCByZWxldmFudCwgdW5sZXNzIHdlIGFyZSBwcm9jZXNzaW5nCiAgICAvLyBleHRyYSBkZXBlbmRlbmNpZXMgZHVlIHRvIG1pcnJvcnMuCiAgICB2b2lkIGFkZExpdmVJbnN0YW5jZU1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlmICghY29tcGlsZXIucmVzb2x1dGlvbldvcmxkQnVpbGRlci5pc01lbWJlclVzZWQobWVtYmVyKSkgcmV0dXJuOwogICAgICBpZiAoIW1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm47CiAgICAgIGRlcGVuZGVuY2llcy5hZGRNZW1iZXIobWVtYmVyKTsKICAgICAgX2NvbGxlY3REaXJlY3RNZW1iZXJEZXBlbmRlbmNpZXMoY2xvc2VkV29ybGQsIG1lbWJlciwgZGVwZW5kZW5jaWVzKTsKICAgIH0KCiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50OwogICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywgYWRkTGl2ZUluc3RhbmNlTWVtYmVyKTsKICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoU3VwZXJ0eXBlKGNscywgKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgICBfY29sbGVjdFR5cGVEZXBlbmRlbmNpZXModHlwZSwgZGVwZW5kZW5jaWVzKTsKICAgIH0pOwogICAgZGVwZW5kZW5jaWVzLmFkZENsYXNzKGNscyk7CiAgfQoKICAvLy8gRmluZHMgYWxsIGVsZW1lbnRzIGFuZCBjb25zdGFudHMgdGhhdCBbZWxlbWVudF0gZGVwZW5kcyBkaXJlY3RseSBvbi4KICAvLy8gKG5vdCB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlLikKICAvLy8KICAvLy8gQWRkcyB0aGUgcmVzdWx0cyB0byBbZWxlbWVudHNdIGFuZCBbY29uc3RhbnRzXS4KICB2b2lkIF9jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21NZW1iZXIoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpIHsKICAgIGlmIChlbGVtZW50IGlzIEZ1bmN0aW9uRW50aXR5KSB7CiAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcygKICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZWxlbWVudCksIGRlcGVuZGVuY2llcyk7CiAgICB9CiAgICBpZiAoZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwgfHwgZWxlbWVudC5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIGRlcGVuZGVuY2llcy5hZGRNZW1iZXIoZWxlbWVudCk7CiAgICAgIF9jb2xsZWN0RGlyZWN0TWVtYmVyRGVwZW5kZW5jaWVzKGNsb3NlZFdvcmxkLCBlbGVtZW50LCBkZXBlbmRlbmNpZXMpOwogICAgfQogICAgaWYgKGVsZW1lbnQgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYgZWxlbWVudC5pc0dlbmVyYXRpdmVDb25zdHJ1Y3RvcikgewogICAgICAvLyBXaGVuIGluc3RhbnRpYXRpbmcgYSBjbGFzcywgd2UgcmVjb3JkIGEgcmVmZXJlbmNlIHRvIHRoZQogICAgICAvLyBjb25zdHJ1Y3Rvciwgbm90IHRoZSBjbGFzcyBpdHNlbGYuICBXZSBtdXN0IGFkZCBhbGwgdGhlCiAgICAgIC8vIGluc3RhbmNlIG1lbWJlcnMgb2YgdGhlIGNvbnN0cnVjdG9yJ3MgY2xhc3MuCiAgICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIF9jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21DbGFzcygKICAgICAgICAgIGNsb3NlZFdvcmxkLCBjbHMsIGRlcGVuZGVuY2llcyk7CiAgICB9CgogICAgLy8gT3RoZXIgZWxlbWVudHMsIGluIHBhcnRpY3VsYXIgaW5zdGFuY2UgbWVtYmVycywgYXJlIGlnbm9yZWQgYXMKICAgIC8vIHRoZXkgYXJlIHByb2Nlc3NlZCBhcyBwYXJ0IG9mIHRoZSBjbGFzcy4KICB9CgogIC8vLyBFeHRyYWN0IHRoZSBzZXQgb2YgY29uc3RhbnRzIHRoYXQgYXJlIHVzZWQgaW4gYW5ub3RhdGlvbnMgb2YgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBJZiB0aGUgdW5kZXJseWluZyBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IG1pcnJvcnMsIHRoZW4gbm8gY29uc3RhbnRzIGFyZQogIC8vLyBhZGRlZC4KICB2b2lkIGNvbGxlY3RDb25zdGFudHNGcm9tTWV0YWRhdGEoCiAgICAgIEVudGl0eSBlbGVtZW50LCBTZXQ8Q29uc3RhbnRWYWx1ZT4gY29uc3RhbnRzKTsKCiAgLy8vIEV4dHJhY3QgdGhlIHNldCBvZiBjb25zdGFudHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgYm9keSBvZiBbZWxlbWVudF0uCiAgdm9pZCBjb2xsZWN0Q29uc3RhbnRzSW5Cb2R5KE1lbWJlckVudGl0eSBlbGVtZW50LCBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKTsKCiAgLy8vIFJlY3Vyc2l2ZWx5IGNvbGxlY3RzIGFsbCB0aGUgZGVwZW5kZW5jaWVzIG9mIFt0eXBlXS4KICB2b2lkIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcyhEYXJ0VHlwZSB0eXBlLCBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLAogICAgICBbSW1wb3J0RW50aXR5IGltcG9ydF0pIHsKICAgIG5ldyBUeXBlRGVwZW5kZW5jeVZpc2l0b3IoZGVwZW5kZW5jaWVzLCBpbXBvcnQsIGNvbW1vbkVsZW1lbnRzKS52aXNpdCh0eXBlKTsKICB9CgogIHZvaWQgX2NvbGxlY3RUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMoCiAgICAgIEl0ZXJhYmxlPERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLCBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLAogICAgICBbSW1wb3J0RW50aXR5IGltcG9ydF0pIHsKICAgIGlmICh0eXBlQXJndW1lbnRzID09IG51bGwpIHJldHVybjsKICAgIG5ldyBUeXBlRGVwZW5kZW5jeVZpc2l0b3IoZGVwZW5kZW5jaWVzLCBpbXBvcnQsIGNvbW1vbkVsZW1lbnRzKQogICAgICAgIC52aXNpdExpc3QodHlwZUFyZ3VtZW50cyk7CiAgfQoKICAvLy8gRXh0cmFjdCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGtub3duIGZyb20gdGhlIGltcGFjdCBvZiBbZWxlbWVudF0uCiAgdm9pZCBfY29sbGVjdERlcGVuZGVuY2llc0Zyb21JbXBhY3QoS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcykgewogICAgV29ybGRJbXBhY3Qgd29ybGRJbXBhY3QgPSBjb21waWxlci5pbXBhY3RDYWNoZVtlbGVtZW50XTsKICAgIGNvbXBpbGVyLmltcGFjdFN0cmF0ZWd5LnZpc2l0SW1wYWN0KAogICAgICAgIGVsZW1lbnQsCiAgICAgICAgd29ybGRJbXBhY3QsCiAgICAgICAgbmV3IFdvcmxkSW1wYWN0VmlzaXRvckltcGwoCiAgICAgICAgICAgIHZpc2l0U3RhdGljVXNlOiAoTWVtYmVyRW50aXR5IG1lbWJlciwgU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgICAgICAgRW50aXR5IHVzZWRFbnRpdHkgPSBzdGF0aWNVc2UuZWxlbWVudDsKICAgICAgICAgIGlmICh1c2VkRW50aXR5IGlzIE1lbWJlckVudGl0eSkgewogICAgICAgICAgICBkZXBlbmRlbmNpZXMuYWRkTWVtYmVyKHVzZWRFbnRpdHksIHN0YXRpY1VzZS5kZWZlcnJlZEltcG9ydCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhc3NlcnQodXNlZEVudGl0eSBpcyBLTG9jYWxGdW5jdGlvbiwKICAgICAgICAgICAgICAgIGZhaWxlZEF0KHVzZWRFbnRpdHksICJVbmV4cGVjdGVkIHN0YXRpYyB1c2UgJHN0YXRpY1VzZS4iKSk7CiAgICAgICAgICAgIEtMb2NhbEZ1bmN0aW9uIGxvY2FsRnVuY3Rpb24gPSB1c2VkRW50aXR5OwogICAgICAgICAgICAvLyBUT0RPKHNyYSk6IENvbnN1bHQgS0Nsb3NlZFdvcmxkIHRvIHNlZSBpZiBzaWduYXR1cmUgaXMgbmVlZGVkLgogICAgICAgICAgICBfY29sbGVjdFR5cGVEZXBlbmRlbmNpZXMobG9jYWxGdW5jdGlvbi5mdW5jdGlvblR5cGUsIGRlcGVuZGVuY2llcyk7CiAgICAgICAgICAgIGRlcGVuZGVuY2llcy5sb2NhbEZ1bmN0aW9ucy5hZGQobG9jYWxGdW5jdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBzd2l0Y2ggKHN0YXRpY1VzZS5raW5kKSB7CiAgICAgICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DT05TVFJVQ1RPUl9JTlZPS0U6CiAgICAgICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9JTlZPS0U6CiAgICAgICAgICAgICAgLy8gVGhlIHJlY2VpdmVyIHR5cGUgb2YgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvcnMgaXMgYSBkZXBlbmRlbmN5IG9mCiAgICAgICAgICAgICAgLy8gdGhlIGNvbnN0cnVjdG9yIChoYW5kbGVkIGJ5IGBhZGRNZW1iZXJgIGFib3ZlKSBhbmQgbm90IGEKICAgICAgICAgICAgICAvLyBkZXBlbmRlbmN5IGF0IHRoZSBjYWxsIHNpdGUuCiAgICAgICAgICAgICAgLy8gRmFjdG9yeSBtZXRob2RzLCBvbiB0aGUgb3RoZXIgaGFuZCwgYXJlIGxpa2Ugc3RhdGljIG1ldGhvZHMgc28KICAgICAgICAgICAgICAvLyB0aGUgdGFyZ2V0IHR5cGUgaXMgbm90IHJlbGV2YW50LgogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBydGkgbmVlZCBkYXRhIHRvIHNraXAgdW5uZWVkZWQgdHlwZQogICAgICAgICAgICAgIC8vIGFyZ3VtZW50cy4KICAgICAgICAgICAgICBfY29sbGVjdFR5cGVBcmd1bWVudERlcGVuZGVuY2llcygKICAgICAgICAgICAgICAgICAgc3RhdGljVXNlLnR5cGUudHlwZUFyZ3VtZW50cywgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNUQVRJQ19JTlZPS0U6CiAgICAgICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DTE9TVVJFX0NBTEw6CiAgICAgICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5ESVJFQ1RfSU5WT0tFOgogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBydGkgbmVlZCBkYXRhIHRvIHNraXAgdW5uZWVkZWQgdHlwZQogICAgICAgICAgICAgIC8vIGFyZ3VtZW50cy4KICAgICAgICAgICAgICBfY29sbGVjdFR5cGVBcmd1bWVudERlcGVuZGVuY2llcygKICAgICAgICAgICAgICAgICAgc3RhdGljVXNlLnR5cGVBcmd1bWVudHMsIGRlcGVuZGVuY2llcyk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB9CiAgICAgICAgfSwgdmlzaXRUeXBlVXNlOiAoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB0eXBlVXNlKSB7CiAgICAgICAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZVVzZS50eXBlOwogICAgICAgICAgc3dpdGNoICh0eXBlVXNlLmtpbmQpIHsKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0xJVEVSQUw6CiAgICAgICAgICAgICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICAgICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZSA9IHR5cGU7CiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuYWRkQ2xhc3MoCiAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLmVsZW1lbnQsIHR5cGVVc2UuZGVmZXJyZWRJbXBvcnQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5DT05TVF9JTlNUQU5USUFUSU9OOgogICAgICAgICAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcygKICAgICAgICAgICAgICAgICAgdHlwZSwgZGVwZW5kZW5jaWVzLCB0eXBlVXNlLmRlZmVycmVkSW1wb3J0KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLk5BVElWRV9JTlNUQU5USUFUSU9OOgogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLklTX0NIRUNLOgogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLkNBVENIX1RZUEU6CiAgICAgICAgICAgICAgX2NvbGxlY3RUeXBlRGVwZW5kZW5jaWVzKHR5cGUsIGRlcGVuZGVuY2llcyk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQVNfQ0FTVDoKICAgICAgICAgICAgICBpZiAoY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAgIC5nZXRFeHBsaWNpdENhc3RDaGVja1BvbGljeShlbGVtZW50KQogICAgICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICBfY29sbGVjdFR5cGVEZXBlbmRlbmNpZXModHlwZSwgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSU1QTElDSVRfQ0FTVDoKICAgICAgICAgICAgICBpZiAoY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAgIC5nZXRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3koZWxlbWVudCkKICAgICAgICAgICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgICAgICAgICAgX2NvbGxlY3RUeXBlRGVwZW5kZW5jaWVzKHR5cGUsIGRlcGVuZGVuY2llcyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLlBBUkFNRVRFUl9DSEVDSzoKICAgICAgICAgICAgICBpZiAoY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShlbGVtZW50KQogICAgICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICBfY29sbGVjdFR5cGVEZXBlbmRlbmNpZXModHlwZSwgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuUlRJX1ZBTFVFOgogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfQVJHVU1FTlQ6CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFNRURfVFlQRV9WQVJJQUJMRV9ORVdfUlRJOgogICAgICAgICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJVbmV4cGVjdGVkIHR5cGUgdXNlOiAkdHlwZVVzZS4iKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9LCB2aXNpdER5bmFtaWNVc2U6IChNZW1iZXJFbnRpdHkgbWVtYmVyLCBEeW5hbWljVXNlIGR5bmFtaWNVc2UpIHsKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBydGkgbmVlZCBkYXRhIHRvIHNraXAgdW5uZWVkZWQgdHlwZQogICAgICAgICAgLy8gYXJndW1lbnRzLgogICAgICAgICAgX2NvbGxlY3RUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMoCiAgICAgICAgICAgICAgZHluYW1pY1VzZS50eXBlQXJndW1lbnRzLCBkZXBlbmRlbmNpZXMpOwogICAgICAgIH0pLAogICAgICAgIERlZmVycmVkTG9hZFRhc2suSU1QQUNUX1VTRSk7CiAgfQoKICAvLy8gVXBkYXRlIHRoZSBpbXBvcnQgc2V0IG9mIGFsbCBjb25zdGFudHMgcmVhY2hhYmxlIGZyb20gW2NvbnN0YW50XSwgYXMgbG9uZwogIC8vLyBhcyB0aGV5IGhhZCB0aGUgW29sZFNldF0uIEFzIHNvb24gYXMgd2Ugc2VlIGEgY29uc3RhbnQgd2l0aCBhIGRpZmZlcmVudAogIC8vLyBpbXBvcnQgc2V0LCB3ZSBzdG9wIGFuZCBlbnF1ZXVlIGEgbmV3IHJlY3Vyc2l2ZSB1cGRhdGUgaW4gW3F1ZXVlXS4KICAvLy8KICAvLy8gSW52YXJpYW50czogb2xkU2V0IGlzIGVpdGhlciBudWxsIG9yIGEgc3Vic2V0IG9mIG5ld1NldC4KICB2b2lkIF91cGRhdGVDb25zdGFudFJlY3Vyc2l2ZSgKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICBJbXBvcnRTZXQgb2xkU2V0LAogICAgICBJbXBvcnRTZXQgbmV3U2V0LAogICAgICBXb3JrUXVldWUgcXVldWUpIHsKICAgIGlmIChjb25zdGFudCA9PSBudWxsKSByZXR1cm47CiAgICB2YXIgY3VycmVudFNldCA9IF9jb25zdGFudFRvU2V0W2NvbnN0YW50XTsKCiAgICAvLyBBbHJlYWR5IHZpc2l0ZWQuCiAgICBpZiAoY3VycmVudFNldCA9PSBuZXdTZXQpIHJldHVybjsKCiAgICAvLyBFbGVtZW50cyBpbiB0aGUgbWFpbiBvdXRwdXQgdW5pdCBhbHdheXMgcmVtYWluIHRoZXJlLgogICAgaWYgKGN1cnJlbnRTZXQgPT0gaW1wb3J0U2V0cy5tYWluU2V0KSByZXR1cm47CgogICAgaWYgKGN1cnJlbnRTZXQgPT0gb2xkU2V0KSB7CiAgICAgIF9jb25zdGFudFRvU2V0W2NvbnN0YW50XSA9IG5ld1NldDsKICAgICAgaWYgKGNvbnN0YW50IGlzIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIENsYXNzRW50aXR5IGNscyA9IGNvbnN0YW50LnR5cGUuZWxlbWVudDsKICAgICAgICBfdXBkYXRlQ2xhc3NSZWN1cnNpdmUoY2xvc2VkV29ybGQsIGNscywgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlKTsKICAgICAgfQogICAgICBpZiAoY29uc3RhbnQgaXMgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUpIHsKICAgICAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gY29uc3RhbnQudHlwZUFyZ3VtZW50cykgewogICAgICAgICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgICBfdXBkYXRlQ2xhc3NSZWN1cnNpdmUoCiAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZCwgdHlwZS5lbGVtZW50LCBvbGRTZXQsIG5ld1NldCwgcXVldWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdGFudC5nZXREZXBlbmRlbmNpZXMoKS5mb3JFYWNoKChDb25zdGFudFZhbHVlIGRlcGVuZGVuY3kpIHsKICAgICAgICAvLyBDb25zdGFudHMgYXJlIG5vdCBhbGxvd2VkIHRvIHJlZmVyIHRvIGRlZmVycmVkIGNvbnN0YW50cywgc28KICAgICAgICAvLyBubyBuZWVkIHRvIGNoZWNrIGZvciBhIGRlZmVycmVkIHR5cGUgbGl0ZXJhbCBoZXJlLgogICAgICAgIF91cGRhdGVDb25zdGFudFJlY3Vyc2l2ZSgKICAgICAgICAgICAgY2xvc2VkV29ybGQsIGRlcGVuZGVuY3ksIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KAogICAgICAgICAgLy8gSW52YXJpYW50OiB3ZSBtdXN0IG1hcmsgbWFpbiBiZWZvcmUgd2UgbWFyayBhbnkgZGVmZXJyZWQgaW1wb3J0LgogICAgICAgICAgbmV3U2V0ICE9IGltcG9ydFNldHMubWFpblNldCB8fCBvbGRTZXQgIT0gbnVsbCwKICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAiVHJpZWQgdG8gYXNzaWduICR7Y29uc3RhbnQudG9EYXJ0VGV4dCgpfSB0byB0aGUgbWFpbiBvdXRwdXQgIgogICAgICAgICAgICAgICJ1bml0LCBidXQgaXQgd2FzIGFzc2lnbmVkIHRvICRjdXJyZW50U2V0LiIpKTsKICAgICAgcXVldWUuYWRkQ29uc3RhbnQoY29uc3RhbnQsIG5ld1NldCk7CiAgICB9CiAgfQoKICB2b2lkIF91cGRhdGVDbGFzc1JlY3Vyc2l2ZShLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIENsYXNzRW50aXR5IGVsZW1lbnQsCiAgICAgIEltcG9ydFNldCBvbGRTZXQsIEltcG9ydFNldCBuZXdTZXQsIFdvcmtRdWV1ZSBxdWV1ZSkgewogICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuOwoKICAgIEltcG9ydFNldCBjdXJyZW50U2V0ID0gX2NsYXNzVG9TZXRbZWxlbWVudF07CgogICAgLy8gQWxyZWFkeSB2aXNpdGVkLiBXZSBtYXkgdmlzaXQgc29tZSByb290IG5vZGVzIGEgc2Vjb25kIHRpbWUgd2l0aAogICAgLy8gW2lzTWlycm9yVXNhZ2VdIGluIG9yZGVyIHRvIG1hcmsgc3RhdGljIG1lbWJlcnMgdXNlZCByZWZsZWN0aXZlbHkuCiAgICBpZiAoY3VycmVudFNldCA9PSBuZXdTZXQpIHJldHVybjsKCiAgICAvLyBFbGVtZW50cyBpbiB0aGUgbWFpbiBvdXRwdXQgdW5pdCBhbHdheXMgcmVtYWluIHRoZXJlLgogICAgaWYgKGN1cnJlbnRTZXQgPT0gaW1wb3J0U2V0cy5tYWluU2V0KSByZXR1cm47CgogICAgaWYgKGN1cnJlbnRTZXQgPT0gb2xkU2V0KSB7CiAgICAgIC8vIENvbnRpbnVlIHJlY3Vyc2l2ZWx5IHVwZGF0aW5nIGZyb20gW29sZFNldF0gdG8gW25ld1NldF0uCiAgICAgIF9jbGFzc1RvU2V0W2VsZW1lbnRdID0gbmV3U2V0OwoKICAgICAgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcyA9IG5ldyBEZXBlbmRlbmNpZXMoKTsKICAgICAgX2NvbGxlY3RBbGxFbGVtZW50c0FuZENvbnN0YW50c1Jlc29sdmVkRnJvbUNsYXNzKAogICAgICAgICAgY2xvc2VkV29ybGQsIGVsZW1lbnQsIGRlcGVuZGVuY2llcyk7CiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IGVsZW1lbnQubGlicmFyeTsKICAgICAgX3Byb2Nlc3NEZXBlbmRlbmNpZXMoCiAgICAgICAgICBjbG9zZWRXb3JsZCwgbGlicmFyeSwgZGVwZW5kZW5jaWVzLCBvbGRTZXQsIG5ld1NldCwgcXVldWUsIGVsZW1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgcXVldWUuYWRkQ2xhc3MoZWxlbWVudCwgbmV3U2V0KTsKICAgIH0KICB9CgogIHZvaWQgX3VwZGF0ZU1lbWJlclJlY3Vyc2l2ZShLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIE1lbWJlckVudGl0eSBlbGVtZW50LAogICAgICBJbXBvcnRTZXQgb2xkU2V0LCBJbXBvcnRTZXQgbmV3U2V0LCBXb3JrUXVldWUgcXVldWUpIHsKICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybjsKCiAgICBJbXBvcnRTZXQgY3VycmVudFNldCA9IF9tZW1iZXJUb1NldFtlbGVtZW50XTsKCiAgICAvLyBBbHJlYWR5IHZpc2l0ZWQuIFdlIG1heSB2aXNpdCBzb21lIHJvb3Qgbm9kZXMgYSBzZWNvbmQgdGltZSB3aXRoCiAgICAvLyBbaXNNaXJyb3JVc2FnZV0gaW4gb3JkZXIgdG8gbWFyayBzdGF0aWMgbWVtYmVycyB1c2VkIHJlZmxlY3RpdmVseS4KICAgIGlmIChjdXJyZW50U2V0ID09IG5ld1NldCkgcmV0dXJuOwoKICAgIC8vIEVsZW1lbnRzIGluIHRoZSBtYWluIG91dHB1dCB1bml0IGFsd2F5cyByZW1haW4gdGhlcmUuCiAgICBpZiAoY3VycmVudFNldCA9PSBpbXBvcnRTZXRzLm1haW5TZXQpIHJldHVybjsKCiAgICBpZiAoY3VycmVudFNldCA9PSBvbGRTZXQpIHsKICAgICAgLy8gQ29udGludWUgcmVjdXJzaXZlbHkgdXBkYXRpbmcgZnJvbSBbb2xkU2V0XSB0byBbbmV3U2V0XS4KICAgICAgX21lbWJlclRvU2V0W2VsZW1lbnRdID0gbmV3U2V0OwoKICAgICAgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcyA9IG5ldyBEZXBlbmRlbmNpZXMoKTsKICAgICAgX2NvbGxlY3RBbGxFbGVtZW50c0FuZENvbnN0YW50c1Jlc29sdmVkRnJvbU1lbWJlcigKICAgICAgICAgIGNsb3NlZFdvcmxkLCBlbGVtZW50LCBkZXBlbmRlbmNpZXMpOwoKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gZWxlbWVudC5saWJyYXJ5OwogICAgICBfcHJvY2Vzc0RlcGVuZGVuY2llcygKICAgICAgICAgIGNsb3NlZFdvcmxkLCBsaWJyYXJ5LCBkZXBlbmRlbmNpZXMsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSwgZWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICBxdWV1ZS5hZGRNZW1iZXIoZWxlbWVudCwgbmV3U2V0KTsKICAgIH0KICB9CgogIHZvaWQgX3VwZGF0ZUxvY2FsRnVuY3Rpb24oCiAgICAgIExvY2FsIGxvY2FsRnVuY3Rpb24sIEltcG9ydFNldCBvbGRTZXQsIEltcG9ydFNldCBuZXdTZXQpIHsKICAgIEltcG9ydFNldCBjdXJyZW50U2V0ID0gX2xvY2FsRnVuY3Rpb25Ub1NldFtsb2NhbEZ1bmN0aW9uXTsKICAgIGlmIChjdXJyZW50U2V0ID09IG5ld1NldCkgcmV0dXJuOwoKICAgIC8vIEVsZW1lbnRzIGluIHRoZSBtYWluIG91dHB1dCB1bml0IGFsd2F5cyByZW1haW4gdGhlcmUuCiAgICBpZiAoY3VycmVudFNldCA9PSBpbXBvcnRTZXRzLm1haW5TZXQpIHJldHVybjsKCiAgICBpZiAoY3VycmVudFNldCA9PSBvbGRTZXQpIHsKICAgICAgX2xvY2FsRnVuY3Rpb25Ub1NldFtsb2NhbEZ1bmN0aW9uXSA9IG5ld1NldDsKICAgIH0gZWxzZSB7CiAgICAgIF9sb2NhbEZ1bmN0aW9uVG9TZXRbbG9jYWxGdW5jdGlvbl0gPSBpbXBvcnRTZXRzLnVuaW9uKGN1cnJlbnRTZXQsIG5ld1NldCk7CiAgICB9CiAgICAvLyBOb3RlOiBsb2NhbCBmdW5jdGlvbnMgYXJlIG5vdCB1cGRhdGVkIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlCiAgICAvLyBkZXBlbmRlbmNpZXMgYXJlIGFscmVhZHkgdmlzaXRlZCBhcyBkZXBlbmRlbmNpZXMgb2YgdGhlIGVuY2xvc2luZyBtZW1iZXIuCiAgfQoKICAvLy8gV2hldGhlciB0byBlbnF1ZXVlIGEgZGVmZXJyZWQgZGVwZW5kZW5jeS4KICAvLy8KICAvLy8gRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGFsZ29yaXRobSwgc29tZSBkZXBlbmRlbmNpZXMgbWF5IGJlIHZpc2l0ZWQgbW9yZQogIC8vLyB0aGFuIG9uY2UuIEhvd2V2ZXIsIHdlIGtub3cgdGhhdCBuZXcgZGVmZXJyZWQtaW1wb3J0cyBhcmUgb25seSBkaXNjb3ZlcmVkCiAgLy8vIHdoZW4gd2UgYXJlIHZpc2l0aW5nIHRoZSBtYWluIG91dHB1dCB1bml0IChzaXplID09IDApIG9yIGNvZGUgcmVhY2hhYmxlCiAgLy8vIGZyb20gYSBkZWZlcnJlZCBpbXBvcnQgKHNpemUgPT0gMSkuIEFmdGVyIHRoYXQsIHdlIGFyZSByZWRpc2NvdmVyaW5nIHRoZQogIC8vLyBzYW1lIG5vZGVzIHdlIGhhdmUgYWxyZWFkeSBzZWVuLgogIF9zaG91bGRBZGREZWZlcnJlZERlcGVuZGVuY3koSW1wb3J0U2V0IG5ld1NldCkgPT4gbmV3U2V0Lmxlbmd0aCA8PSAxOwoKICB2b2lkIF9maXhEZXBlbmRlbmN5SW5mbyhEZXBlbmRlbmN5SW5mbyBpbmZvLCBMaXN0PEltcG9ydEVudGl0eT4gaW1wb3J0cywKICAgICAgU3RyaW5nIHByZWZpeCwgU3RyaW5nIG5hbWUsIFNwYW5uYWJsZSBjb250ZXh0KSB7CiAgICB2YXIgaXNEZWZlcnJlZCA9IF9pc0V4cGxpY2l0bHlEZWZlcnJlZChpbXBvcnRzKTsKICAgIGlmIChpc0RlZmVycmVkKSB7CiAgICAgIGlmICghbmV3RGVmZXJyZWRTcGxpdCkgewogICAgICAgIGluZm8uaXNEZWZlcnJlZCA9IHRydWU7CiAgICAgICAgaW5mby5pbXBvcnRzID0gaW1wb3J0czsKICAgICAgfQogICAgICBpZiAocmVwb3J0SW52YWxpZEluZmVycmVkRGVmZXJyZWRUeXBlcykgewogICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZShjb250ZXh0LCBNZXNzYWdlS2luZC5HRU5FUklDLCB7CiAgICAgICAgICAndGV4dCc6ICIkcHJlZml4ICckbmFtZScgaXMgZGVmZXJyZWQgYnV0IGFwcGVhcnMgdG8gYmUgaW5mZXJyZWQgYXMiCiAgICAgICAgICAgICAgIiBhIHJldHVybiB0eXBlIG9yIGEgdHlwZSBwYXJhbWV0ZXIgKGRhcnRidWcuY29tLzM1MzExKS4iCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFRoZSBmb2xsb3dpbmcgMyBtZXRob2RzIGFyZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIG5ldyBkZWZlcnJlZCBzcGxpdAogIC8vIGFsZ29yaXRobSBhbmQgdGhlIG9sZCBvbmUgbWF0Y2guIEJlY2F1c2Ugb2YgYSBzb3VuZG5lc3MgYnVnIGluIHRoZSBvbGQKICAvLyBhbGdvcml0aG0gdGhlIG5ldyBhbGdvcml0aG0gY2FuIHB1bGwgaW4gYSBsb3Qgb2YgY29kZSB0byB0aGUgbWFpbiBvdXRwdXQKICAvLyB1bml0LiBUaGlzIGxvZ2ljIGRldGVjdHMgaXQgYW5kIHdpbGwgbWFrZSBpdCBlYXNpZXIgZm9yIHVzIHRvIG1pZ3JhdGUgY29kZQogIC8vIG9mZiBpdCBpbmNyZW1lbnRhbGx5LgogIC8vIE5vdGU6IHdlIG9ubHkgZXhwZWN0IGRpc2NyZXBhbmNpZXMgb24gY2xhc3MtZGVwZW5kZW5jeS1pbmZvIGR1ZSB0byBob3cKICAvLyBpbmZlcnJlZCB0eXBlcyBleHBvc2UgZGVmZXJyZWQgdHlwZXMgaW4gdHlwZS12YXJpYWJsZXMgYW5kIHJldHVybiB0eXBlcwogIC8vIChJc3N1ZSAjMzUzMTEpLiBXZSBhZGRlZCB0aGUgb3RoZXIgdHdvIG1ldGhvZHMgdG8gdGVzdCBvdXIgdHJhbnNpdGlvbiwgYnV0CiAgLy8gd2UgZG9uJ3QgZXhwZWN0IHRvIGRldGVjdCBhbnkgbWlzbWF0Y2hlcyB0aGVyZS4KICAvLwogIC8vIFRPRE8oc2lnbXVuZCk6IGRlbGV0ZSBvbmNlIHRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgb24gYnkgZGVmYXVsdC4KICB2b2lkIF9maXhDbGFzc0RlcGVuZGVuY3lJbmZvKERlcGVuZGVuY3lJbmZvIGluZm8sIENsYXNzRW50aXR5IGNscywKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTcGFubmFibGUgY29udGV4dCkgewogICAgaWYgKGluZm8uaXNEZWZlcnJlZCkgcmV0dXJuOwogICAgaWYgKG5ld0RlZmVycmVkU3BsaXQgJiYgIXJlcG9ydEludmFsaWRJbmZlcnJlZERlZmVycmVkVHlwZXMpIHJldHVybjsKICAgIHZhciBpbXBvcnRzID0gY2xhc3NJbXBvcnRzVG8oY2xzLCBsaWJyYXJ5KTsKICAgIF9maXhEZXBlbmRlbmN5SW5mbyhpbmZvLCBpbXBvcnRzLCAiQ2xhc3MiLCBjbHMubmFtZSwgY29udGV4dCk7CiAgfQoKICB2b2lkIF9maXhNZW1iZXJEZXBlbmRlbmN5SW5mbyhEZXBlbmRlbmN5SW5mbyBpbmZvLCBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFNwYW5uYWJsZSBjb250ZXh0KSB7CiAgICBpZiAoaW5mby5pc0RlZmVycmVkIHx8IGNvbXBpbGVyLm9wdGlvbnMubmV3RGVmZXJyZWRTcGxpdCkgcmV0dXJuOwogICAgdmFyIGltcG9ydHMgPSBtZW1iZXJJbXBvcnRzVG8obWVtYmVyLCBsaWJyYXJ5KTsKICAgIF9maXhEZXBlbmRlbmN5SW5mbyhpbmZvLCBpbXBvcnRzLCAiTWVtYmVyIiwgbWVtYmVyLm5hbWUsIGNvbnRleHQpOwogIH0KCiAgdm9pZCBfZml4Q29uc3RhbnREZXBlbmRlbmN5SW5mbyhEZXBlbmRlbmN5SW5mbyBpbmZvLCBDb25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFNwYW5uYWJsZSBjb250ZXh0KSB7CiAgICBpZiAoaW5mby5pc0RlZmVycmVkIHx8IGNvbXBpbGVyLm9wdGlvbnMubmV3RGVmZXJyZWRTcGxpdCkgcmV0dXJuOwogICAgaWYgKGNvbnN0YW50IGlzIFR5cGVDb25zdGFudFZhbHVlKSB7CiAgICAgIHZhciB0eXBlID0gY29uc3RhbnQucmVwcmVzZW50ZWRUeXBlOwogICAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgdmFyIGltcG9ydHMgPSBjbGFzc0ltcG9ydHNUbyh0eXBlLmVsZW1lbnQsIGxpYnJhcnkpOwogICAgICAgIF9maXhEZXBlbmRlbmN5SW5mbygKICAgICAgICAgICAgaW5mbywgaW1wb3J0cywgIkNsYXNzIChpbiBjb25zdGFudCkgIiwgdHlwZS5lbGVtZW50Lm5hbWUsIGNvbnRleHQpOwogICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgVHlwZWRlZlR5cGUpIHsKICAgICAgICB2YXIgaW1wb3J0cyA9IHR5cGVkZWZJbXBvcnRzVG8odHlwZS5lbGVtZW50LCBsaWJyYXJ5KTsKICAgICAgICBfZml4RGVwZW5kZW5jeUluZm8oCiAgICAgICAgICAgIGluZm8sIGltcG9ydHMsICJUeXBlZGVmICIsIHR5cGUuZWxlbWVudC5uYW1lLCBjb250ZXh0KTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfcHJvY2Vzc0RlcGVuZGVuY2llcygKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksCiAgICAgIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsCiAgICAgIEltcG9ydFNldCBvbGRTZXQsCiAgICAgIEltcG9ydFNldCBuZXdTZXQsCiAgICAgIFdvcmtRdWV1ZSBxdWV1ZSwKICAgICAgU3Bhbm5hYmxlIGNvbnRleHQpIHsKICAgIGRlcGVuZGVuY2llcy5jbGFzc2VzLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgRGVwZW5kZW5jeUluZm8gaW5mbykgewogICAgICBfZml4Q2xhc3NEZXBlbmRlbmN5SW5mbyhpbmZvLCBjbHMsIGxpYnJhcnksIGNvbnRleHQpOwogICAgICBpZiAoaW5mby5pc0RlZmVycmVkKSB7CiAgICAgICAgaWYgKF9zaG91bGRBZGREZWZlcnJlZERlcGVuZGVuY3kobmV3U2V0KSkgewogICAgICAgICAgZm9yIChJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgaW4gaW5mby5pbXBvcnRzKSB7CiAgICAgICAgICAgIHF1ZXVlLmFkZENsYXNzKGNscywgaW1wb3J0U2V0cy5zaW5nbGV0b24oZGVmZXJyZWRJbXBvcnQpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3VwZGF0ZUNsYXNzUmVjdXJzaXZlKGNsb3NlZFdvcmxkLCBjbHMsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSk7CiAgICAgIH0KICAgIH0pOwoKICAgIGRlcGVuZGVuY2llcy5tZW1iZXJzLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIERlcGVuZGVuY3lJbmZvIGluZm8pIHsKICAgICAgX2ZpeE1lbWJlckRlcGVuZGVuY3lJbmZvKGluZm8sIG1lbWJlciwgbGlicmFyeSwgY29udGV4dCk7CiAgICAgIGlmIChpbmZvLmlzRGVmZXJyZWQpIHsKICAgICAgICBpZiAoX3Nob3VsZEFkZERlZmVycmVkRGVwZW5kZW5jeShuZXdTZXQpKSB7CiAgICAgICAgICBmb3IgKEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCBpbiBpbmZvLmltcG9ydHMpIHsKICAgICAgICAgICAgcXVldWUuYWRkTWVtYmVyKG1lbWJlciwgaW1wb3J0U2V0cy5zaW5nbGV0b24oZGVmZXJyZWRJbXBvcnQpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3VwZGF0ZU1lbWJlclJlY3Vyc2l2ZShjbG9zZWRXb3JsZCwgbWVtYmVyLCBvbGRTZXQsIG5ld1NldCwgcXVldWUpOwogICAgICB9CiAgICB9KTsKCiAgICBmb3IgKExvY2FsIGxvY2FsRnVuY3Rpb24gaW4gZGVwZW5kZW5jaWVzLmxvY2FsRnVuY3Rpb25zKSB7CiAgICAgIF91cGRhdGVMb2NhbEZ1bmN0aW9uKGxvY2FsRnVuY3Rpb24sIG9sZFNldCwgbmV3U2V0KTsKICAgIH0KCiAgICBkZXBlbmRlbmNpZXMuY29uc3RhbnRzCiAgICAgICAgLmZvckVhY2goKENvbnN0YW50VmFsdWUgY29uc3RhbnQsIERlcGVuZGVuY3lJbmZvIGluZm8pIHsKICAgICAgX2ZpeENvbnN0YW50RGVwZW5kZW5jeUluZm8oaW5mbywgY29uc3RhbnQsIGxpYnJhcnksIGNvbnRleHQpOwogICAgICBpZiAoaW5mby5pc0RlZmVycmVkKSB7CiAgICAgICAgaWYgKF9zaG91bGRBZGREZWZlcnJlZERlcGVuZGVuY3kobmV3U2V0KSkgewogICAgICAgICAgZm9yIChJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgaW4gaW5mby5pbXBvcnRzKSB7CiAgICAgICAgICAgIHF1ZXVlLmFkZENvbnN0YW50KGNvbnN0YW50LCBpbXBvcnRTZXRzLnNpbmdsZXRvbihkZWZlcnJlZEltcG9ydCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfdXBkYXRlQ29uc3RhbnRSZWN1cnNpdmUoY2xvc2VkV29ybGQsIGNvbnN0YW50LCBvbGRTZXQsIG5ld1NldCwgcXVldWUpOwogICAgICB9CiAgICB9KTsKICB9CgogIC8vLyBDb21wdXRlcyBhIHVuaXF1ZSBzdHJpbmcgZm9yIHRoZSBuYW1lIGZpZWxkIGZvciBlYWNoIG91dHB1dFVuaXQuCiAgdm9pZCBfY3JlYXRlT3V0cHV0VW5pdHMoKSB7CiAgICBpbnQgY291bnRlciA9IDE7CiAgICB2b2lkIGFkZFVuaXQoSW1wb3J0U2V0IGltcG9ydFNldCkgewogICAgICBpZiAoaW1wb3J0U2V0LnVuaXQgIT0gbnVsbCkgcmV0dXJuOwogICAgICB2YXIgdW5pdCA9IG5ldyBPdXRwdXRVbml0KGZhbHNlLCAnJGNvdW50ZXInLAogICAgICAgICAgaW1wb3J0U2V0Ll9pbXBvcnRzLm1hcCgoaSkgPT4gaS5kZWNsYXJhdGlvbikudG9TZXQoKSk7CiAgICAgIGNvdW50ZXIrKzsKICAgICAgaW1wb3J0U2V0LnVuaXQgPSB1bml0OwogICAgICBfYWxsT3V0cHV0VW5pdHMuYWRkKHVuaXQpOwogICAgfQoKICAgIC8vIEdlbmVyYXRlIGFuIG91dHB1dCB1bml0IGZvciBhbGwgaW1wb3J0IHNldHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuCiAgICAvLyBlbGVtZW50IG9yIGNvbnN0YW50LgogICAgX2NsYXNzVG9TZXQudmFsdWVzLmZvckVhY2goYWRkVW5pdCk7CiAgICBfbWVtYmVyVG9TZXQudmFsdWVzLmZvckVhY2goYWRkVW5pdCk7CiAgICBfbG9jYWxGdW5jdGlvblRvU2V0LnZhbHVlcy5mb3JFYWNoKGFkZFVuaXQpOwogICAgX2NvbnN0YW50VG9TZXQudmFsdWVzLmZvckVhY2goYWRkVW5pdCk7CgogICAgLy8gU29ydCBvdXRwdXQgdW5pdHMgdG8gbWFrZSB0aGUgb3V0cHV0IG9mIHRoZSBjb21waWxlciBtb3JlIHN0YWJsZS4KICAgIF9hbGxPdXRwdXRVbml0cy5zb3J0KCk7CiAgfQoKICBNYXA8U3RyaW5nLCBMaXN0PE91dHB1dFVuaXQ+PiBfc2V0dXBIdW5rc1RvTG9hZCgpIHsKICAgIE1hcDxTdHJpbmcsIExpc3Q8T3V0cHV0VW5pdD4+IGh1bmtzVG9Mb2FkID0ge307CiAgICBTZXQ8U3RyaW5nPiB1c2VkSW1wb3J0TmFtZXMgPSBuZXcgU2V0PFN0cmluZz4oKTsKCiAgICBmb3IgKEltcG9ydEVudGl0eSBpbXBvcnQgaW4gX2FsbERlZmVycmVkSW1wb3J0cykgewogICAgICBTdHJpbmcgcmVzdWx0ID0gY29tcHV0ZUltcG9ydERlZmVyTmFtZShpbXBvcnQsIGNvbXBpbGVyKTsKICAgICAgYXNzZXJ0KHJlc3VsdCAhPSBudWxsKTsKICAgICAgLy8gTm90ZTogdG9vbHMgdGhhdCBwcm9jZXNzIHRoZSBqc29uIGZpbGUgdG8gYnVpbGQgbXVsdGktcGFydCBpbml0aWFsIGxvYWQKICAgICAgLy8gYnVuZGxlcyBkZXBlbmQgb24gdGhlIGZhY3QgdGhhdCBtYWtlVW5pcXVlIGFwcGVuZHMgb25seSBkaWdpdHMsIG9yIGEKICAgICAgLy8gcGVyaW9kIGZvbGxvd2VkIGJ5IGRpZ2l0cy4KICAgICAgX2ltcG9ydERlZmVyTmFtZVtpbXBvcnRdID0gbWFrZVVuaXF1ZShyZXN1bHQsIHVzZWRJbXBvcnROYW1lcywgJy4nKTsKICAgIH0KCiAgICAvLyBTb3J0IHRoZSBvdXRwdXQgdW5pdHMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiB0aGUgbnVtYmVyIG9mIGltcG9ydHMgdGhleQogICAgLy8gaW5jbHVkZS4KCiAgICAvLyBUaGUgbG9hZGluZyBvZiB0aGUgb3V0cHV0IHVuaXRzIG11c3QgYmUgb3JkZXJlZCBiZWNhdXNlIGEgc3VwZXJjbGFzcwogICAgLy8gbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyBzdWJjbGFzcy4KICAgIC8vIEJ1dCBhIGNsYXNzIGNhbiBvbmx5IGRlcGVuZCBvbiBhbm90aGVyIGNsYXNzIGluIGFuIG91dHB1dCB1bml0IHNoYXJlZCBieQogICAgLy8gYSBzdHJpY3Qgc3VwZXJzZXQgb2YgdGhlIGltcG9ydHM6CiAgICAvLyBCeSBjb250cmFkaWN0aW9uOiBBc3N1bWUgYSBjbGFzcyBDIGluIG91dHB1dCB1bml0IHNoYXJlZCBieSBpbXBvcnRzIGluCiAgICAvLyB0aGUgc2V0IFMxID0gKGxpYjEsLi4sIGxpYl9uKSBkZXBlbmRzIG9uIGEgY2xhc3MgRCBpbiBhbiBvdXRwdXQgdW5pdAogICAgLy8gc2hhcmVkIGJ5IFMyIHN1Y2ggdGhhdCBTMiBub3QgYSBzdXBlcnNldCBvZiBTMS4gTGV0IGxpYl9zIGJlIGEgbGlicmFyeSBpbgogICAgLy8gUzEgbm90IGluIFMyLiBsaWJfcyBtdXN0IGRlcGVuZCBvbiBDLCBhbmQgdGhlbiBpbiB0dXJuIG9uIEQuIFRoZXJlZm9yZSBECiAgICAvLyBpcyBub3QgaW4gdGhlIHJpZ2h0IG91dHB1dCB1bml0LgogICAgTGlzdDxPdXRwdXRVbml0PiBzb3J0ZWRPdXRwdXRVbml0cyA9IF9hbGxPdXRwdXRVbml0cy5yZXZlcnNlZC50b0xpc3QoKTsKCiAgICAvLyBGb3IgZWFjaCBkZWZlcnJlZCBpbXBvcnQgd2UgZmluZCBvdXQgd2hpY2ggb3V0cHV0VW5pdHMgdG8gbG9hZC4KICAgIGZvciAoSW1wb3J0RW50aXR5IGltcG9ydCBpbiBfYWxsRGVmZXJyZWRJbXBvcnRzKSB7CiAgICAgIC8vIFdlIGV4cGVjdCB0byBmaW5kIGFuIGVudHJ5IGZvciBhbnkgY2FsbCB0byBgbG9hZExpYnJhcnlgLCBldmVuIGlmCiAgICAgIC8vIHRoZXJlIGlzIG5vIGNvZGUgdG8gbG9hZC4gSW4gdGhhdCBjYXNlLCB0aGUgZW50cnkgd2lsbCBiZSBhbiBlbXB0eQogICAgICAvLyBsaXN0LgogICAgICBodW5rc1RvTG9hZFtfaW1wb3J0RGVmZXJOYW1lW2ltcG9ydF1dID0gbmV3IExpc3Q8T3V0cHV0VW5pdD4oKTsKICAgICAgZm9yIChPdXRwdXRVbml0IG91dHB1dFVuaXQgaW4gc29ydGVkT3V0cHV0VW5pdHMpIHsKICAgICAgICBpZiAob3V0cHV0VW5pdCA9PSBfbWFpbk91dHB1dFVuaXQpIGNvbnRpbnVlOwogICAgICAgIGlmIChvdXRwdXRVbml0Ll9pbXBvcnRzLmNvbnRhaW5zKGltcG9ydCkpIHsKICAgICAgICAgIGh1bmtzVG9Mb2FkW19pbXBvcnREZWZlck5hbWVbaW1wb3J0XV0uYWRkKG91dHB1dFVuaXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGh1bmtzVG9Mb2FkOwogIH0KCiAgLy8vIFJldHVybnMgYSBuYW1lIGZvciBhIGRlZmVycmVkIGltcG9ydC4KICBTdHJpbmcgY29tcHV0ZUltcG9ydERlZmVyTmFtZShJbXBvcnRFbnRpdHkgZGVjbGFyYXRpb24sIENvbXBpbGVyIGNvbXBpbGVyKSB7CiAgICBhc3NlcnQoZGVjbGFyYXRpb24uaXNEZWZlcnJlZCk7CiAgICBpZiAoZGVjbGFyYXRpb24ubmFtZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5uYW1lOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRlZmVycmVkIGltcG9ydCBpc24ndCBkZWNsYXJlZCB3aXRoIGEgcHJlZml4LgogICAgICBhc3NlcnQoY29tcGlsZXIuY29tcGlsYXRpb25GYWlsZWQpOwogICAgICByZXR1cm4gJyc7CiAgICB9CiAgfQoKICAvLy8gUGVyZm9ybXMgdGhlIGRlZmVycmVkIGxvYWRpbmcgYWxnb3JpdGhtLgogIC8vLwogIC8vLyBUaGUgZGVmZXJyZWQgbG9hZGluZyBhbGdvcml0aG0gbWFwcyBlbGVtZW50cyBhbmQgY29uc3RhbnRzIHRvIGFuIG91dHB1dAogIC8vLyB1bml0LiBFYWNoIG91dHB1dCB1bml0IGlzIGlkZW50aWZpZWQgYnkgYSBzdWJzZXQgb2YgZGVmZXJyZWQgaW1wb3J0cyAoYW4KICAvLy8gW0ltcG9ydFNldF0pLCBhbmQgdGhleSB3aWxsIGNvbnRhaW4gdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGluaGVyZW50bHkgdXNlZAogIC8vLyBieSBhbGwgdGhvc2UgZGVmZXJyZWQgaW1wb3J0cy4gQW4gZWxlbWVudCBpcyB1c2VkIGJ5IGEgZGVmZXJyZWQgaW1wb3J0IGlmCiAgLy8vIGl0IGlzIGVpdGhlciBsb2FkZWQgYnkgdGhhdCBpbXBvcnQgb3IgdHJhbnNpdGl2ZWx5IGFjY2Vzc2VkIGJ5IGFuIGVsZW1lbnQKICAvLy8gdGhhdCB0aGUgaW1wb3J0IGxvYWRzLiAgQW4gZW1wdHkgc2V0IHJlcHJlc2VudHMgdGhlIG1haW4gb3V0cHV0IHVuaXQsCiAgLy8vIHdoaWNoIGNvbnRhaW5zIGFueSBlbGVtZW50cyB0aGF0IGFyZSBhY2Nlc3NlZCBkaXJlY3RseSBhbmQgYXJlIG5vdAogIC8vLyBkZWZlcnJlZC4KICAvLy8KICAvLy8gVGhlIGFsZ29yaXRobSB0cmF2ZXJzZXMgdGhlIGVsZW1lbnQgbW9kZWwgcmVjdXJzaXZlbHkgbG9va2luZyBmb3IKICAvLy8gZGVwZW5kZW5jaWVzIGJldHdlZW4gZWxlbWVudHMuIFRoZXNlIGRlcGVuZGVuY2llcyBtYXkgYmUgZGVmZXJyZWQgb3IKICAvLy8gbm9uLWRlZmVycmVkLiBEZWZlcnJlZCBkZXBlbmRlbmNpZXMgYXJlIG1haW5seSB1c2VkIHRvIGRpc2NvdmVyIHRoZSByb290CiAgLy8vIGVsZW1lbnRzIHRoYXQgYXJlIGxvYWRlZCBmcm9tIGRlZmVycmVkIGltcG9ydHMsIHdoaWxlIG5vbi1kZWZlcnJlZAogIC8vLyBkZXBlbmRlbmNpZXMgYXJlIHVzZWQgdG8gcmVjdXJzaXZlbHkgYXNzb2NpYXRlIG1vcmUgZWxlbWVudHMgdG8gb3V0cHV0CiAgLy8vIHVuaXRzLgogIC8vLwogIC8vLyBOYWl2ZWx5LCB0aGUgYWxnb3JpdGhtIHRyYXZlcnNlcyBlYWNoIHJvb3Qgb2YgYSBkZWZlcnJlZCBpbXBvcnQgYW5kIG1hcmtzCiAgLy8vIGV2ZXJ5dGhpbmcgaXQgY2FuIHJlYWNoIGFzIGJlaW5nIHVzZWQgYnkgdGhhdCBpbXBvcnQuIFRvIHJlZHVjZSBob3cgbWFueQogIC8vLyB0aW1lcyB3ZSB2aXNpdCBhbiBlbGVtZW50LCB3ZSB1c2UgYW4gYWxnb3JpdGhtIHRoYXQgd29ya3MgaW4gc2VnbWVudHM6IGl0CiAgLy8vIG1hcmtzIGVsZW1lbnRzIHdpdGggYSBzdWJzZXQgb2YgZGVmZXJyZWQgaW1wb3J0cyBhdCBhIHRpbWUsIHVudGlsIGl0CiAgLy8vIGRldGVjdHMgYSBtZXJnZSBwb2ludCB3aGVyZSBtb3JlIGRlZmVycmVkIGltcG9ydHMgY291bGQgYmUgY29uc2lkZXJlZCBhdAogIC8vLyBvbmNlLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBkZXBlbmRlbmN5IGdyYXBoIChpZ25vcmluZyBlbGVtZW50cyBpbiB0aGUgbWFpbgogIC8vLyBvdXRwdXQgdW5pdCk6CiAgLy8vCiAgLy8vICAgZGVmZXJyZWQgaW1wb3J0IEE6IGExIC0tLT4gczEgLS0tPiBzMiAgLT4gczMKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgIF4KICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwKICAvLy8gICBkZWZlcnJlZCBpbXBvcnQgQjogYjEgLS0tLS0rICAgICAgIHwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAvLy8gICBkZWZlcnJlZCBpbXBvcnQgQzogYzEgLS0tPiBjMiAtLS0+IGMzCiAgLy8vCiAgLy8vIFRoZSBhbGdvcml0aG0gd2lsbCBjb21wdXRlIGEgcmVzdWx0IHdpdGggNSBkZWZlcnJlZCBvdXRwdXQgdW5pdHM6CiAgLy8KICAvLy8gICAqIHVuaXQge0F9OiAgICAgICAgY29udGFpbnMgYTEKICAvLy8gICAqIHVuaXQge0J9OiAgICAgICAgY29udGFpbnMgYjEKICAvLy8gICAqIHVuaXQge0N9OiAgICAgICAgY29udGFpbnMgYzEsIGMyLCBhbmQgYzMKICAvLy8gICAqIHVuaXQge0EsIEJ9OiAgICAgY29udGFpbnMgczEKICAvLy8gICAqIHVuaXQge0EsIEIsIEN9OiAgY29udGFpbnMgczIsIGFuZCBzMwogIC8vLwogIC8vLyBBZnRlciBtYXJraW5nIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20gbWFpbiBhcyBwYXJ0IG9mIHRoZSBtYWluIG91dHB1dAogIC8vLyB1bml0LCBvdXIgYWxnb3JpdGhtIHdpbGwgd29yayBhcyBmb2xsb3dzOgogIC8vLwogIC8vLyAgICogSW5pdGlhbGx5IGFsbCBkZWZlcnJlZCBlbGVtZW50cyBoYXZlIG5vIG1hcHBpbmcuCiAgLy8vICAgKiBXZSBtYWtlIG5vdGUgb2Ygd29yayB0byBkbywgaW5pdGlhbGx5IHRvIG1hcmsgdGhlIHJvb3Qgb2YgZWFjaAogIC8vLyAgICAgZGVmZXJyZWQgaW1wb3J0OgogIC8vLyAgICAgICAgKiBhMSB3aXRoIEEsIGFuZCByZWN1cnNlIGZyb20gdGhlcmUuCiAgLy8vICAgICAgICAqIGIxIHdpdGggQiwgYW5kIHJlY3Vyc2UgZnJvbSB0aGVyZS4KICAvLy8gICAgICAgICogYzEgd2l0aCBDLCBhbmQgcmVjdXJzZSBmcm9tIHRoZXJlLgogIC8vLyAgICogd2UgdXBkYXRlIGExLCBzMSwgczIsIHMzIGZyb20gbm8gbWFwcGluZyB0byB7QX0KICAvLy8gICAqIHdlIHVwZGF0ZSBiMSBmcm9tIG5vIG1hcHBpbmcgdG8ge0J9LCBhbmQgd2hlbiB3ZSBmaW5kIHMxIHdlIG5vdGljZQogIC8vLyAgICAgdGhhdCBzMSBpcyBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhbm90aGVyIGltcG9ydCBzZXQge0F9LCBzbyB3ZSBtYWtlCiAgLy8vICAgICBub3RlIG9mIGFkZGl0aW9uYWwgd29yayBmb3IgbGF0ZXIgdG8gbWFyayBzMSB3aXRoIHtBLCBCfQogIC8vLyAgICogd2UgdXBkYXRlIGMxLCBjMiwgYzMgdG8ge0N9LCBhbmQgbWFrZSBhIG5vdGUgdG8gdXBkYXRlIHMyIHdpdGgge0EsIEN9CiAgLy8vICAgKiB3ZSB1cGRhdGUgczEgdG8ge0EsIEJ9LCBhbmQgdXBkYXRlIHRoZSBleGlzdGluZyBub3RlIHRvIHVwZGF0ZSBzMiwgbm93CiAgLy8vICAgICB3aXRoIHtBLCBCLCBDfQogIC8vLyAgICogZmluYWxseSB3ZSB1cGRhdGUgczIgYW5kIHMzIHdpdGgge0EsIEIsIEN9IGluIG9uZSBnbywgd2l0aG91dCBldmVyCiAgLy8vICAgICB1cGRhdGluZyB0aGVtIHRvIHRoZSBpbnRlcm1lZGlhdGUgc3RhdGUge0EsIEN9LgogIC8vLwogIC8vLyBUaGUgaW1wbGVtZW50YXRpb24gYmVsb3cgZG9lcyBhdG9taWMgdXBkYXRlcyBmcm9tIG9uZSBpbXBvcnQtc2V0IHRvCiAgLy8vIGFub3RoZXIuICBBdCBmaXJzdCB3ZSBhZGQgb25lIGRlZmVycmVkIGltcG9ydCBhdCBhIHRpbWUsIGJ1dCBhcyB0aGUKICAvLy8gYWxnb3JpdGhtIHByb2dlc3NlcyBpdCBtYXkgdXBkYXRlIGEgc21hbGwgaW1wb3J0LXNldCB3aXRoIGEgbGFyZ2VyCiAgLy8vIGltcG9ydC1zZXQgaW4gb25lIGdvLiBUaGUga2V5IG9mIHRoaXMgYWxnb3JpdGhtIGlzIHRvIGRldGVjdCB3aGVuIHNoYXJpbmcKICAvLy8gYmVnaW5zLCBzbyB3ZSBjYW4gdXBkYXRlIHRob3NlIGVsZW1lbnRzIG1vcmUgZWZmaWNlbnRseS4KICAvLy8KICAvLy8gVG8gZGV0ZWN0IHRoZXNlIG1lcmdlIHBvaW50cyB3aGVyZSBzaGFyaW5nIGJlZ2lucywgdGhlIGltcGxlbWVudGF0aW9uCiAgLy8vIGJlbG93IHVzZXMgYGEgc3dhcCBvcGVyYXRpb25gOiB3ZSBmaXJzdCBjb21wYXJlIHdoYXQgdGhlIG9sZCBpbXBvcnQtc2V0CiAgLy8vIGlzLCBhbmQgaWYgaXQgbWF0Y2hlcyBvdXIgZXhwZWN0YXRpb24sIHRoZSBzd2FwIGlzIGRvbmUgYW5kIHdlIHJlY3Vyc2UsCiAgLy8vIG90aGVyd2lzZSBhIG1lcmdlIHJvb3Qgd2FzIGRldGVjdGVkIGFuZCB3ZSBlbnF1ZXVlIGEgbmV3IHNlZ21lbnQgb2YKICAvLy8gdXBkYXRlcyBmb3IgbGF0ZXIuCiAgLy8vCiAgLy8vIFRPRE8oc2lnbXVuZCk6IGludmVzdGlnYXRlIGRpZmZlcmVudCBoZXVyaXN0aWNzIGZvciBob3cgdG8gc2VsZWN0IHRoZSBuZXh0CiAgLy8vIHdvcmsgaXRlbSAoZS5nLiB3ZSBtaWdodCBjb252ZXJnZSBmYXN0ZXIgaWYgd2UgcGljayBmaXJzdCB0aGUgdXBkYXRlIHRoYXQKICAvLy8gY29udGFpbnMgYSBiaWdnZXIgZGVsdGEuKQogIE91dHB1dFVuaXREYXRhIHJ1bihGdW5jdGlvbkVudGl0eSBtYWluLCBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICghaXNQcm9ncmFtU3BsaXQgfHwgbWFpbiA9PSBudWxsIHx8IGRpc2FibGVQcm9ncmFtU3BsaXQpIHsKICAgICAgcmV0dXJuIF9idWlsZFJlc3VsdCgpOwogICAgfQoKICAgIHdvcmsoKSB7CiAgICAgIHZhciBxdWV1ZSA9IG5ldyBXb3JrUXVldWUodGhpcy5pbXBvcnRTZXRzKTsKCiAgICAgIC8vIEFkZCBgbWFpbmAgYW5kIHRoZWlyIHJlY3Vyc2l2ZSBkZXBlbmRlbmNpZXMgdG8gdGhlIG1haW4gb3V0cHV0IHVuaXQuCiAgICAgIC8vIFdlIGRvIHRoaXMgdXBmcm9udCB0byBhdm9pZCB3YXN0aW5nIHRpbWUgdmlzaXRpbmcgdGhlc2UgZWxlbWVudHMgd2hlbgogICAgICAvLyBhbmFseXppbmcgZGVmZXJyZWQgaW1wb3J0cy4KICAgICAgcXVldWUuYWRkTWVtYmVyKG1haW4sIGltcG9ydFNldHMubWFpblNldCk7CgogICAgICAvLyBBbHNvIGFkZCAiZ2xvYmFsIiBkZXBlbmRlbmNpZXMgdG8gdGhlIG1haW4gb3V0cHV0IHVuaXQuICBUaGVzZSBhcmUKICAgICAgLy8gdGhpbmdzIHRoYXQgdGhlIGJhY2tlbmQgbmVlZHMgYnV0IGNhbm5vdCBhc3NvY2lhdGUgd2l0aCBhIHBhcnRpY3VsYXIKICAgICAgLy8gZWxlbWVudC4gVGhpcyBzZXQgYWxzbyBjb250YWlucyBlbGVtZW50cyBmb3Igd2hpY2ggd2UgbGFjayBwcmVjaXNlCiAgICAgIC8vIGluZm9ybWF0aW9uLgogICAgICBmb3IgKE1lbWJlckVudGl0eSBlbGVtZW50CiAgICAgICAgICBpbiBjbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UuZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMpIHsKICAgICAgICBxdWV1ZS5hZGRNZW1iZXIoZWxlbWVudCwgaW1wb3J0U2V0cy5tYWluU2V0KTsKICAgICAgfQogICAgICBmb3IgKENsYXNzRW50aXR5IGVsZW1lbnQKICAgICAgICAgIGluIGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZS5nbG9iYWxDbGFzc0RlcGVuZGVuY2llcykgewogICAgICAgIHF1ZXVlLmFkZENsYXNzKGVsZW1lbnQsIGltcG9ydFNldHMubWFpblNldCk7CiAgICAgIH0KCiAgICAgIHZvaWQgZW1wdHlRdWV1ZSgpIHsKICAgICAgICB3aGlsZSAocXVldWUuaXNOb3RFbXB0eSkgewogICAgICAgICAgV29ya0l0ZW0gaXRlbSA9IHF1ZXVlLm5leHRJdGVtKCk7CiAgICAgICAgICBpdGVtLnVwZGF0ZSh0aGlzLCBjbG9zZWRXb3JsZCwgcXVldWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZW1wdHlRdWV1ZSgpOwogICAgfQoKICAgIHJlcG9ydGVyLndpdGhDdXJyZW50RWxlbWVudChtYWluLmxpYnJhcnksICgpID0+IG1lYXN1cmUod29yaykpOwoKICAgIC8vIE5vdGlmeSB0aGF0IHdlIG5vIGxvbmdlciBuZWVkIGltcGFjdHMgZm9yIGRlZmVycmVkIGxvYWQsIHNvIHRoZXkgY2FuIGJlCiAgICAvLyBkaXNjYXJkZWQgYXQgdGhpcyB0aW1lLgogICAgY29tcGlsZXIuaW1wYWN0U3RyYXRlZ3kub25JbXBhY3RVc2VkKERlZmVycmVkTG9hZFRhc2suSU1QQUNUX1VTRSk7CiAgICByZXR1cm4gX2J1aWxkUmVzdWx0KCk7CiAgfQoKICBPdXRwdXRVbml0RGF0YSBfYnVpbGRSZXN1bHQoKSB7CiAgICBfY3JlYXRlT3V0cHV0VW5pdHMoKTsKICAgIE1hcDxTdHJpbmcsIExpc3Q8T3V0cHV0VW5pdD4+IGh1bmtzVG9Mb2FkID0gX3NldHVwSHVua3NUb0xvYWQoKTsKICAgIE1hcDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD4gY2xhc3NNYXAgPSA8Q2xhc3NFbnRpdHksIE91dHB1dFVuaXQ+e307CiAgICBNYXA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0PiBtZW1iZXJNYXAgPSA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0Pnt9OwogICAgTWFwPExvY2FsLCBPdXRwdXRVbml0PiBsb2NhbEZ1bmN0aW9uTWFwID0gPExvY2FsLCBPdXRwdXRVbml0Pnt9OwogICAgTWFwPENvbnN0YW50VmFsdWUsIE91dHB1dFVuaXQ+IGNvbnN0YW50TWFwID0gPENvbnN0YW50VmFsdWUsIE91dHB1dFVuaXQ+e307CiAgICBfY2xhc3NUb1NldC5mb3JFYWNoKChjbHMsIHMpID0+IGNsYXNzTWFwW2Nsc10gPSBzLnVuaXQpOwogICAgX21lbWJlclRvU2V0LmZvckVhY2goKG1lbWJlciwgcykgPT4gbWVtYmVyTWFwW21lbWJlcl0gPSBzLnVuaXQpOwogICAgX2xvY2FsRnVuY3Rpb25Ub1NldC5mb3JFYWNoKAogICAgICAgIChsb2NhbEZ1bmN0aW9uLCBzKSA9PiBsb2NhbEZ1bmN0aW9uTWFwW2xvY2FsRnVuY3Rpb25dID0gcy51bml0KTsKICAgIF9jb25zdGFudFRvU2V0LmZvckVhY2goKGNvbnN0YW50LCBzKSA9PiBjb25zdGFudE1hcFtjb25zdGFudF0gPSBzLnVuaXQpOwoKICAgIF9jbGFzc1RvU2V0ID0gbnVsbDsKICAgIF9tZW1iZXJUb1NldCA9IG51bGw7CiAgICBfbG9jYWxGdW5jdGlvblRvU2V0ID0gbnVsbDsKICAgIF9jb25zdGFudFRvU2V0ID0gbnVsbDsKICAgIGNsZWFudXAoKTsKICAgIHJldHVybiBuZXcgT3V0cHV0VW5pdERhdGEoCiAgICAgICAgdGhpcy5pc1Byb2dyYW1TcGxpdCAmJiAhZGlzYWJsZVByb2dyYW1TcGxpdCwKICAgICAgICB0aGlzLl9tYWluT3V0cHV0VW5pdCwKICAgICAgICBjbGFzc01hcCwKICAgICAgICBtZW1iZXJNYXAsCiAgICAgICAgbG9jYWxGdW5jdGlvbk1hcCwKICAgICAgICBjb25zdGFudE1hcCwKICAgICAgICBfYWxsT3V0cHV0VW5pdHMsCiAgICAgICAgX2ltcG9ydERlZmVyTmFtZSwKICAgICAgICBodW5rc1RvTG9hZCwKICAgICAgICBfZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMpOwogIH0KCiAgLy8vIEZyZWVzIHVwIHN0cmF0ZWd5LXNwZWNpZmljIHRlbXBvcmFyeSBkYXRhLgogIHZvaWQgY2xlYW51cCgpIHt9CgogIHZvaWQgYmVmb3JlUmVzb2x1dGlvbihVcmkgcm9vdExpYnJhcnlVcmksIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKSB7CiAgICBtZWFzdXJlU3VidGFzaygncHJlcGFyZScsICgpIHsKICAgICAgZm9yIChVcmkgdXJpIGluIGxpYnJhcmllcykgewogICAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMaWJyYXJ5KHVyaSk7CiAgICAgICAgcmVwb3J0ZXIud2l0aEN1cnJlbnRFbGVtZW50KGxpYnJhcnksICgpIHsKICAgICAgICAgIGNoZWNrRm9yRGVmZXJyZWRFcnJvckNhc2VzKGxpYnJhcnkpOwogICAgICAgICAgZm9yIChJbXBvcnRFbnRpdHkgaW1wb3J0IGluIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRJbXBvcnRzKGxpYnJhcnkpKSB7CiAgICAgICAgICAgIGlmIChpbXBvcnQuaXNEZWZlcnJlZCkgewogICAgICAgICAgICAgIF9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9uc1tpbXBvcnRdID0KICAgICAgICAgICAgICAgICAgbmV3IEltcG9ydERlc2NyaXB0aW9uKGltcG9ydCwgbGlicmFyeSwgcm9vdExpYnJhcnlVcmkpOwogICAgICAgICAgICAgIGlzUHJvZ3JhbVNwbGl0ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICB9CgogIC8vLyBEZXRlY3RzIGVycm9ycyBsaWtlIGR1cGxpY2F0ZSB1c2VzIG9mIGEgcHJlZml4IG9yIHVzaW5nIHRoZSBvbGQgZGVmZXJyZWQKICAvLy8gbG9hZGluZyBzeW50YXguCiAgLy8vCiAgLy8vIFRoZXNlIGNoZWNrcyBhcmUgYWxyZWFkeSBkb25lIGJ5IHRoZSBzaGFyZWQgZnJvbnQtZW5kLCBzbyB0aGV5IGNhbiBiZQogIC8vLyBza2lwcGVkIGJ5IHRoZSBuZXcgY29tcGlsZXIgcGlwZWxpbmUuCiAgdm9pZCBjaGVja0ZvckRlZmVycmVkRXJyb3JDYXNlcyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICBib29sIGlnbm9yZUVudGl0eUluRHVtcChFbnRpdHkgZWxlbWVudCkgPT4gZmFsc2U7CgogIC8vLyBDcmVhdGVzIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3V0cHV0IHVuaXQgY29udGVudC4KICBTdHJpbmcgZHVtcCgpIHsKICAgIE1hcDxPdXRwdXRVbml0LCBMaXN0PFN0cmluZz4+IGVsZW1lbnRNYXAgPSA8T3V0cHV0VW5pdCwgTGlzdDxTdHJpbmc+Pnt9OwogICAgTWFwPE91dHB1dFVuaXQsIExpc3Q8U3RyaW5nPj4gY29uc3RhbnRNYXAgPSA8T3V0cHV0VW5pdCwgTGlzdDxTdHJpbmc+Pnt9OwogICAgX2NsYXNzVG9TZXQuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgZWxlbWVudCwgSW1wb3J0U2V0IGltcG9ydFNldCkgewogICAgICBpZiAoaWdub3JlRW50aXR5SW5EdW1wKGVsZW1lbnQpKSByZXR1cm47CiAgICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnRNYXAucHV0SWZBYnNlbnQoaW1wb3J0U2V0LnVuaXQsICgpID0+IDxTdHJpbmc+W10pOwogICAgICB2YXIgaWQgPSBlbGVtZW50Lm5hbWUgPz8gJyRlbGVtZW50JzsKICAgICAgaWQgPSAnJGlkIGNscyc7CiAgICAgIGVsZW1lbnRzLmFkZChpZCk7CiAgICB9KTsKICAgIF9tZW1iZXJUb1NldC5mb3JFYWNoKChNZW1iZXJFbnRpdHkgZWxlbWVudCwgSW1wb3J0U2V0IGltcG9ydFNldCkgewogICAgICBpZiAoaWdub3JlRW50aXR5SW5EdW1wKGVsZW1lbnQpKSByZXR1cm47CiAgICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnRNYXAucHV0SWZBYnNlbnQoaW1wb3J0U2V0LnVuaXQsICgpID0+IDxTdHJpbmc+W10pOwogICAgICB2YXIgaWQgPSBlbGVtZW50Lm5hbWUgPz8gJyRlbGVtZW50JzsKICAgICAgdmFyIGNscyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M/Lm5hbWU7CiAgICAgIGlmIChjbHMgIT0gbnVsbCkgaWQgPSAnJGNscy4kaWQnOwogICAgICBpZiAoZWxlbWVudC5pc1NldHRlcikgaWQgPSAnJGlkPSc7CiAgICAgIGlkID0gJyRpZCBtZW1iZXInOwogICAgICBlbGVtZW50cy5hZGQoaWQpOwogICAgfSk7CiAgICBfbG9jYWxGdW5jdGlvblRvU2V0LmZvckVhY2goKExvY2FsIGVsZW1lbnQsIEltcG9ydFNldCBpbXBvcnRTZXQpIHsKICAgICAgaWYgKGlnbm9yZUVudGl0eUluRHVtcChlbGVtZW50KSkgcmV0dXJuOwogICAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50TWFwLnB1dElmQWJzZW50KGltcG9ydFNldC51bml0LCAoKSA9PiA8U3RyaW5nPltdKTsKICAgICAgdmFyIGlkID0gZWxlbWVudC5uYW1lID8/ICckZWxlbWVudCc7CiAgICAgIHZhciBjb250ZXh0ID0gKGVsZW1lbnQgYXMgZHluYW1pYykubWVtYmVyQ29udGV4dC5uYW1lOwogICAgICBpZCA9IGVsZW1lbnQubmFtZSA9PSBudWxsIHx8IGVsZW1lbnQubmFtZSA9PSAnJyA/ICc8YW5vbnltb3VzPicgOiBpZDsKICAgICAgaWQgPSAnJGNvbnRleHQuJGlkJzsKICAgICAgaWQgPSAnJGlkIGxvY2FsJzsKICAgICAgZWxlbWVudHMuYWRkKGlkKTsKICAgIH0pOwogICAgX2NvbnN0YW50VG9TZXQuZm9yRWFjaCgoQ29uc3RhbnRWYWx1ZSB2YWx1ZSwgSW1wb3J0U2V0IGltcG9ydFNldCkgewogICAgICAvLyBTa2lwIHByaW1pdGl2ZSB2YWx1ZXM6IHRoZXkgYXJlIG5vdCBzdG9yZWQgaW4gdGhlIGNvbnN0YW50IHRhYmxlcyBhbmQKICAgICAgLy8gaWYgdGhleSBhcmUgc2hhcmVkLCB0aGV5IGVuZCB1cCBkdXBsaWNhdGVkIGFueXdheXMgYWNyb3NzIG91dHB1dCB1bml0cy4KICAgICAgaWYgKHZhbHVlLmlzUHJpbWl0aXZlKSByZXR1cm47CiAgICAgIGNvbnN0YW50TWFwCiAgICAgICAgICAucHV0SWZBYnNlbnQoaW1wb3J0U2V0LnVuaXQsICgpID0+IDxTdHJpbmc+W10pCiAgICAgICAgICAuYWRkKHZhbHVlLnRvU3RydWN0dXJlZFRleHQoKSk7CiAgICB9KTsKCiAgICBNYXA8T3V0cHV0VW5pdCwgU3RyaW5nPiB0ZXh0ID0ge307CiAgICBmb3IgKE91dHB1dFVuaXQgb3V0cHV0VW5pdCBpbiBfYWxsT3V0cHV0VW5pdHMpIHsKICAgICAgU3RyaW5nQnVmZmVyIHVuaXRUZXh0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICBpZiAob3V0cHV0VW5pdC5pc01haW5PdXRwdXQpIHsKICAgICAgICB1bml0VGV4dC53cml0ZSgnIDxNQUlOIFVOSVQ+Jyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdW5pdFRleHQud3JpdGUoJyBpbXBvcnRzOicpOwogICAgICAgIHZhciBpbXBvcnRzID0gb3V0cHV0VW5pdC5faW1wb3J0cwogICAgICAgICAgICAubWFwKChpKSA9PiAnJHtpLmVuY2xvc2luZ0xpYnJhcnlVcmkucmVzb2x2ZVVyaShpLnVyaSl9JykKICAgICAgICAgICAgLnRvTGlzdCgpOwogICAgICAgIGZvciAodmFyIGkgaW4gaW1wb3J0cy4uc29ydCgpKSB7CiAgICAgICAgICB1bml0VGV4dC53cml0ZSgnXG4gICAkaTonKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgTGlzdDxTdHJpbmc+IGVsZW1lbnRzID0gZWxlbWVudE1hcFtvdXRwdXRVbml0XTsKICAgICAgaWYgKGVsZW1lbnRzICE9IG51bGwpIHsKICAgICAgICB1bml0VGV4dC53cml0ZSgnXG4gZWxlbWVudHM6Jyk7CiAgICAgICAgZm9yIChTdHJpbmcgZWxlbWVudCBpbiBlbGVtZW50cy4uc29ydCgpKSB7CiAgICAgICAgICB1bml0VGV4dC53cml0ZSgnXG4gICRlbGVtZW50Jyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIExpc3Q8U3RyaW5nPiBjb25zdGFudHMgPSBjb25zdGFudE1hcFtvdXRwdXRVbml0XTsKICAgICAgaWYgKGNvbnN0YW50cyAhPSBudWxsKSB7CiAgICAgICAgdW5pdFRleHQud3JpdGUoJ1xuIGNvbnN0YW50czonKTsKICAgICAgICBmb3IgKFN0cmluZyB2YWx1ZSBpbiBjb25zdGFudHMuLnNvcnQoKSkgewogICAgICAgICAgdW5pdFRleHQud3JpdGUoJ1xuICAkdmFsdWUnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGV4dFtvdXRwdXRVbml0XSA9ICckdW5pdFRleHQnOwogICAgfQoKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoT3V0cHV0VW5pdCBvdXRwdXRVbml0IGluIF9hbGxPdXRwdXRVbml0cy50b0xpc3QoKQogICAgICAuLnNvcnQoKGEsIGIpID0+IHRleHRbYV0uY29tcGFyZVRvKHRleHRbYl0pKSkgewogICAgICBzYi53cml0ZSgnXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbicpOwogICAgICBzYi53cml0ZSgnT3V0cHV0IHVuaXQ6ICR7b3V0cHV0VW5pdC5uYW1lfScpOwogICAgICBzYi53cml0ZSgnXG4gJHt0ZXh0W291dHB1dFVuaXRdfScpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBJbXBvcnREZXNjcmlwdGlvbiB7CiAgLy8vIFJlbGF0aXZlIHVyaSB0byB0aGUgaW1wb3J0aW5nIGxpYnJhcnkuCiAgZmluYWwgU3RyaW5nIGltcG9ydGluZ1VyaTsKCiAgLy8vIFRoZSBwcmVmaXggdGhpcyBpbXBvcnQgaXMgaW1wb3J0ZWQgYXMuCiAgZmluYWwgU3RyaW5nIHByZWZpeDsKCiAgZmluYWwgTGlicmFyeUVudGl0eSBfaW1wb3J0aW5nTGlicmFyeTsKCiAgSW1wb3J0RGVzY3JpcHRpb24uaW50ZXJuYWwoCiAgICAgIHRoaXMuaW1wb3J0aW5nVXJpLCB0aGlzLnByZWZpeCwgdGhpcy5faW1wb3J0aW5nTGlicmFyeSk7CgogIEltcG9ydERlc2NyaXB0aW9uKAogICAgICBJbXBvcnRFbnRpdHkgaW1wb3J0LCBMaWJyYXJ5RW50aXR5IGltcG9ydGluZ0xpYnJhcnksIFVyaSBtYWluTGlicmFyeVVyaSkKICAgICAgOiB0aGlzLmludGVybmFsKAogICAgICAgICAgICBmZS5yZWxhdGl2aXplVXJpKAogICAgICAgICAgICAgICAgbWFpbkxpYnJhcnlVcmksIGltcG9ydGluZ0xpYnJhcnkuY2Fub25pY2FsVXJpLCBmYWxzZSksCiAgICAgICAgICAgIGltcG9ydC5uYW1lLAogICAgICAgICAgICBpbXBvcnRpbmdMaWJyYXJ5KTsKfQoKLy8vIEluZGlyZWN0bHkgcmVwcmVzZW50cyBhIGRlZmVycmVkIGltcG9ydCBpbiBhbiBbSW1wb3J0U2V0XS4KLy8vCi8vLyBXZSBjb3VsZCBkaXJlY3RseSBzdG9yZSB0aGUgW2RlY2xhcmF0aW9uXSBpbiBbSW1wb3J0U2V0XSwgYnV0IGFkZGluZyB0aGlzCi8vLyBjbGFzcyBtYWtlcyBzb21lIG9mIHRoZSBpbXBvcnQgc2V0IG9wZXJhdGlvbnMgbW9yZSBlZmZpY2llbnQuCmNsYXNzIF9EZWZlcnJlZEltcG9ydCB7CiAgZmluYWwgSW1wb3J0RW50aXR5IGRlY2xhcmF0aW9uOwoKICAvLy8gQ2Fub25pY2FsIGluZGV4IGFzc29jaWF0ZWQgd2l0aCBbZGVjbGFyYXRpb25dLiBUaGlzIGlzIHVzZWQgdG8gZWZmaWNpZW50bHkKICAvLy8gaW1wbGVtZW50IFtJbXBvcnRTZXRMYXR0aWNlLnVuaW9uXS4KICBmaW5hbCBpbnQgaW5kZXg7CgogIF9EZWZlcnJlZEltcG9ydCh0aGlzLmRlY2xhcmF0aW9uLCB0aGlzLmluZGV4KTsKfQoKLy8vIEEgY29tcGFjdCBsYXR0aWNlIHJlcHJlc2VudGF0aW9uIG9mIGltcG9ydCBzZXRzIGFuZCBzdWJzZXRzLgovLy8KLy8vIFdlIHVzZSBhIGdyYXBoIG9mIG5vZGVzIHRvIHJlcHJlc2VudCBlbGVtZW50cyBvZiB0aGUgbGF0dGljZSwgYnV0IG9ubHkKLy8vIGNyZWF0ZSBuZXcgbm9kZXMgb24tZGVtYW5kIGFzIHRoZXkgYXJlIG5lZWRlZCBieSB0aGUgZGVmZXJyZWQgbG9hZGluZwovLy8gYWxnb3JpdGhtLgovLy8KLy8vIFRoZSBjb25zdHJ1Y3Rpb25zIG9mIG5vZGVzIGlzIGNhcmVmdWxseSBkb25lIGJ5IHN0b3JpbmcgaW1wb3J0cyBpbiBhCi8vLyBzcGVjaWZpYyBvcmRlci4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGF2ZSBhIHVuaXF1ZSBhbmQgY2Fub25pY2FsCi8vLyByZXByZXNlbnRhdGlvbiBmb3IgZWFjaCBzdWJzZXQuCmNsYXNzIEltcG9ydFNldExhdHRpY2UgewogIC8vLyBJbmRleCBvZiBkZWZlcnJlZCBpbXBvcnRzIHRoYXQgZGVmaW5lcyB0aGUgY2Fub25pY2FsIG9yZGVyIHVzZWQgYnkgdGhlCiAgLy8vIG9wZXJhdGlvbnMgYmVsb3cuCiAgTWFwPEltcG9ydEVudGl0eSwgX0RlZmVycmVkSW1wb3J0PiBfaW1wb3J0SW5kZXggPSB7fTsKCiAgLy8vIFRoZSBjYW5vbmljYWwgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSBlbXB0eSBpbXBvcnQgc2V0LgogIEltcG9ydFNldCBfZW1wdHlTZXQgPSBuZXcgSW1wb3J0U2V0KCk7CgogIC8vLyBUaGUgaW1wb3J0IHNldCByZXByZXNlbnRpbmcgdGhlIG1haW4gb3V0cHV0IHVuaXQsIHdoaWNoIGhhcHBlbnMgdG8gYmUKICAvLy8gaW1wbGVtZW50ZWQgYXMgYW4gZW1wdHkgc2V0IGluIG91ciBhbGdvcml0aG0uCiAgSW1wb3J0U2V0IGdldCBtYWluU2V0ID0+IF9lbXB0eVNldDsKCiAgLy8vIEdldCB0aGUgc2luZ2xldG9uIGltcG9ydCBzZXQgdGhhdCBvbmx5IGNvbnRhaW5zIFtpbXBvcnRdLgogIEltcG9ydFNldCBzaW5nbGV0b24oSW1wb3J0RW50aXR5IGltcG9ydCkgewogICAgLy8gRW5zdXJlIHdlIGhhdmUgaW1wb3J0IGluIHRoZSBpbmRleC4KICAgIHJldHVybiBfZW1wdHlTZXQuX2FkZChfd3JhcChpbXBvcnQpKTsKICB9CgogIC8vLyBHZXQgdGhlIGltcG9ydCBzZXQgdGhhdCBpbmNsdWRlcyB0aGUgdW5pb24gb2YgW2FdIGFuZCBbYl0uCiAgSW1wb3J0U2V0IHVuaW9uKEltcG9ydFNldCBhLCBJbXBvcnRTZXQgYikgewogICAgaWYgKGEgPT0gbnVsbCB8fCBhID09IF9lbXB0eVNldCkgcmV0dXJuIGI7CiAgICBpZiAoYiA9PSBudWxsIHx8IGIgPT0gX2VtcHR5U2V0KSByZXR1cm4gYTsKCiAgICAvLyBXZSBjcmVhdGUgdGhlIHVuaW9uIGJ5IG1lcmdpbmcgdGhlIGltcG9ydHMgaW4gY2Fub25pY2FsIG9yZGVyIGZpcnN0LCBhbmQKICAgIC8vIHRoZW4gZ2V0dGluZyAob3IgY3JlYXRpbmcpIHRoZSBjYW5vbmljYWwgc2V0cyBieSBhZGRpbmcgYW4gaW1wb3J0IGF0IGEKICAgIC8vIHRpbWUuCiAgICBMaXN0PF9EZWZlcnJlZEltcG9ydD4gYUltcG9ydHMgPSBhLl9pbXBvcnRzOwogICAgTGlzdDxfRGVmZXJyZWRJbXBvcnQ+IGJJbXBvcnRzID0gYi5faW1wb3J0czsKICAgIGludCBpID0gMCwgaiA9IDAsIGxhc3RBSW5kZXggPSAwLCBsYXN0QkluZGV4ID0gMDsKICAgIHZhciByZXN1bHQgPSBfZW1wdHlTZXQ7CiAgICB3aGlsZSAoaSA8IGFJbXBvcnRzLmxlbmd0aCAmJiBqIDwgYkltcG9ydHMubGVuZ3RoKSB7CiAgICAgIHZhciBpbXBvcnRBID0gYUltcG9ydHNbaV07CiAgICAgIHZhciBpbXBvcnRCID0gYkltcG9ydHNbal07CiAgICAgIGFzc2VydChsYXN0QUluZGV4IDw9IGltcG9ydEEuaW5kZXgpOwogICAgICBhc3NlcnQobGFzdEJJbmRleCA8PSBpbXBvcnRCLmluZGV4KTsKICAgICAgaWYgKGltcG9ydEEuaW5kZXggPCBpbXBvcnRCLmluZGV4KSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0Ll9hZGQoaW1wb3J0QSk7CiAgICAgICAgaSsrOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5fYWRkKGltcG9ydEIpOwogICAgICAgIGorKzsKICAgICAgfQogICAgfQogICAgZm9yICg7IGkgPCBhSW1wb3J0cy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHQgPSByZXN1bHQuX2FkZChhSW1wb3J0c1tpXSk7CiAgICB9CiAgICBmb3IgKDsgaiA8IGJJbXBvcnRzLmxlbmd0aDsgaisrKSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC5fYWRkKGJJbXBvcnRzW2pdKTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIEdldCB0aGUgaW5kZXggZm9yIGFuIFtpbXBvcnRdIGFjY29yZGluZyB0byB0aGUgY2Fub25pY2FsIG9yZGVyLgogIF9EZWZlcnJlZEltcG9ydCBfd3JhcChJbXBvcnRFbnRpdHkgaW1wb3J0KSB7CiAgICByZXR1cm4gX2ltcG9ydEluZGV4LnB1dElmQWJzZW50KAogICAgICAgIGltcG9ydCwgKCkgPT4gbmV3IF9EZWZlcnJlZEltcG9ydChpbXBvcnQsIF9pbXBvcnRJbmRleC5sZW5ndGgpKTsKICB9Cn0KCi8vLyBBIGNhbm9uaWNhbCBzZXQgb2YgZGVmZXJyZWQgaW1wb3J0cy4KY2xhc3MgSW1wb3J0U2V0IHsKICAvLy8gSW1wb3J0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgc2V0LgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IHRoZSBvcmRlciBpbiB3aGljaCBlbGVtZW50cyBhcmUgYWRkZWQgbXVzdCByZXNwZWN0IHRoZQogIC8vLyBjYW5vbmljYWwgb3JkZXIgb2YgYWxsIGltcG9ydHMgaW4gW0ltcG9ydFNldExhdHRpY2VdLgogIGZpbmFsIExpc3Q8X0RlZmVycmVkSW1wb3J0PiBfaW1wb3J0czsKCiAgLy8vIExpbmtzIHRvIG90aGVyIGltcG9ydCBzZXRzIGluIHRoZSBsYXR0aWNlIGJ5IGFkZGluZyBvbmUgaW1wb3J0LgogIGZpbmFsIE1hcDxfRGVmZXJyZWRJbXBvcnQsIEltcG9ydFNldD4gX3RyYW5zaXRpb25zID0KICAgICAgPF9EZWZlcnJlZEltcG9ydCwgSW1wb3J0U2V0Pnt9OwoKICBJbXBvcnRTZXQoW3RoaXMuX2ltcG9ydHMgPSBjb25zdCA8X0RlZmVycmVkSW1wb3J0PltdXSk7CgogIC8vLyBUaGUgb3V0cHV0IHVuaXQgY29ycmVzcG9uZGluZyB0byB0aGlzIHNldCBvZiBpbXBvcnRzLCBpZiBhbnkuCiAgT3V0cHV0VW5pdCB1bml0OwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfaW1wb3J0cy5sZW5ndGg7CgogIC8vLyBDcmVhdGUgYW4gaW1wb3J0IHNldCB0aGF0IGFkZHMgW2ltcG9ydF0gdG8gYWxsIHRoZSBpbXBvcnRzIG9uIHRoaXMgc2V0LgogIC8vLyBUaGlzIGFzc3VtZXMgdGhhdCBpbXBvcnQncyBjYW5vbmljYWwgb3JkZXIgY29tZXMgYWZ0ZXIgYWxsIGltcG9ydHMgaW4KICAvLy8gdGhpcyBjdXJyZW50IHNldC4gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBbSW1wb3J0U2V0TGF0dGljZV0sCiAgLy8vIHNpbmNlIGl0IGlzIHdoZXJlIHdlIHByZXNlcnZlIHRoaXMgaW52YXJpYW50LgogIEltcG9ydFNldCBfYWRkKF9EZWZlcnJlZEltcG9ydCBpbXBvcnQpIHsKICAgIEltcG9ydFNldCByZXN1bHQgPSBfdHJhbnNpdGlvbnNbaW1wb3J0XTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICByZXN1bHQgPSBuZXcgSW1wb3J0U2V0KG5ldyBMaXN0LmZyb20oX2ltcG9ydHMpLi5hZGQoaW1wb3J0KSk7CiAgICAgIHJlc3VsdC5fdHJhbnNpdGlvbnNbaW1wb3J0XSA9IHJlc3VsdDsKICAgICAgX3RyYW5zaXRpb25zW2ltcG9ydF0gPSByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ0ltcG9ydFNldChzaXplOiAkbGVuZ3RoLCAnKTsKICAgIGZvciAodmFyIGltcG9ydCBpbiBfaW1wb3J0cykgewogICAgICBzYi53cml0ZSgnJHtpbXBvcnQuZGVjbGFyYXRpb24ubmFtZX0gJyk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuICckc2InOwogIH0KfQoKLy8vIFRoZSBhbGdvcml0aG0gd29yayBxdWV1ZS4KY2xhc3MgV29ya1F1ZXVlIHsKICAvLy8gVGhlIGFjdHVhbCBxdWV1ZSBvZiB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZS4KICBmaW5hbCBRdWV1ZTxXb3JrSXRlbT4gcXVldWUgPSBuZXcgUXVldWU8V29ya0l0ZW0+KCk7CgogIC8vLyBBbiBpbmRleCB0byBmaW5kIHdvcmsgaXRlbXMgaW4gdGhlIHF1ZXVlIGNvcnJlc3BvbmRpbmcgdG8gYSBjbGFzcy4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFdvcmtJdGVtPiBwZW5kaW5nQ2xhc3NlcyA9IDxDbGFzc0VudGl0eSwgV29ya0l0ZW0+e307CgogIC8vLyBBbiBpbmRleCB0byBmaW5kIHdvcmsgaXRlbXMgaW4gdGhlIHF1ZXVlIGNvcnJlc3BvbmRpbmcgdG8gYSBtZW1iZXIuCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgV29ya0l0ZW0+IHBlbmRpbmdNZW1iZXJzID0gPE1lbWJlckVudGl0eSwgV29ya0l0ZW0+e307CgogIC8vLyBBbiBpbmRleCB0byBmaW5kIHdvcmsgaXRlbXMgaW4gdGhlIHF1ZXVlIGNvcnJlc3BvbmRpbmcgdG8gYSBjb25zdGFudC4KICBmaW5hbCBNYXA8Q29uc3RhbnRWYWx1ZSwgV29ya0l0ZW0+IHBlbmRpbmdDb25zdGFudHMgPQogICAgICA8Q29uc3RhbnRWYWx1ZSwgV29ya0l0ZW0+e307CgogIC8vLyBMYXR0aWNlIHVzZWQgdG8gY29tcHV0ZSB1bmlvbnMgb2YgW0ltcG9ydFNldF1zLgogIGZpbmFsIEltcG9ydFNldExhdHRpY2UgX2ltcG9ydFNldHM7CgogIFdvcmtRdWV1ZSh0aGlzLl9pbXBvcnRTZXRzKTsKCiAgLy8vIFdoZXRoZXIgdGhlcmUgYXJlIG5vIG1vcmUgd29yayBpdGVtcyBpbiB0aGUgcXVldWUuCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBxdWV1ZS5pc05vdEVtcHR5OwoKICAvLy8gUG9wIHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLgogIFdvcmtJdGVtIG5leHRJdGVtKCkgewogICAgYXNzZXJ0KGlzTm90RW1wdHkpOwogICAgcmV0dXJuIHF1ZXVlLnJlbW92ZUZpcnN0KCk7CiAgfQoKICAvLy8gQWRkIHRvIHRoZSBxdWV1ZSB0aGF0IFtlbGVtZW50XSBzaG91bGQgYmUgdXBkYXRlZCB0byBpbmNsdWRlIGFsbCBpbXBvcnRzCiAgLy8vIGluIFtpbXBvcnRTZXRdLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgd29yayBpdGVtIGluIHRoZSBxdWV1ZSBmb3IKICAvLy8gW2VsZW1lbnRdLCB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgd29yayBpdGVtIG5vdyBpbmNsdWRlcyB0aGUgdW5pb24gb2YKICAvLy8gW2ltcG9ydFNldF0gYW5kIHRoZSBleGlzdGluZyB3b3JrIGl0ZW0ncyBpbXBvcnQgc2V0LgogIHZvaWQgYWRkQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCwgSW1wb3J0U2V0IGltcG9ydFNldCkgewogICAgdmFyIGl0ZW0gPSBwZW5kaW5nQ2xhc3Nlc1tlbGVtZW50XTsKICAgIGlmIChpdGVtID09IG51bGwpIHsKICAgICAgaXRlbSA9IG5ldyBDbGFzc1dvcmtJdGVtKGVsZW1lbnQsIGltcG9ydFNldCk7CiAgICAgIHBlbmRpbmdDbGFzc2VzW2VsZW1lbnRdID0gaXRlbTsKICAgICAgcXVldWUuYWRkKGl0ZW0pOwogICAgfSBlbHNlIHsKICAgICAgaXRlbS5pbXBvcnRzVG9BZGQgPSBfaW1wb3J0U2V0cy51bmlvbihpdGVtLmltcG9ydHNUb0FkZCwgaW1wb3J0U2V0KTsKICAgIH0KICB9CgogIC8vLyBBZGQgdG8gdGhlIHF1ZXVlIHRoYXQgW2VsZW1lbnRdIHNob3VsZCBiZSB1cGRhdGVkIHRvIGluY2x1ZGUgYWxsIGltcG9ydHMKICAvLy8gaW4gW2ltcG9ydFNldF0uIElmIHRoZXJlIGlzIGFscmVhZHkgYSB3b3JrIGl0ZW0gaW4gdGhlIHF1ZXVlIGZvcgogIC8vLyBbZWxlbWVudF0sIHRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSB3b3JrIGl0ZW0gbm93IGluY2x1ZGVzIHRoZSB1bmlvbiBvZgogIC8vLyBbaW1wb3J0U2V0XSBhbmQgdGhlIGV4aXN0aW5nIHdvcmsgaXRlbSdzIGltcG9ydCBzZXQuCiAgdm9pZCBhZGRNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQsIEltcG9ydFNldCBpbXBvcnRTZXQpIHsKICAgIHZhciBpdGVtID0gcGVuZGluZ01lbWJlcnNbZWxlbWVudF07CiAgICBpZiAoaXRlbSA9PSBudWxsKSB7CiAgICAgIGl0ZW0gPSBuZXcgTWVtYmVyV29ya0l0ZW0oZWxlbWVudCwgaW1wb3J0U2V0KTsKICAgICAgcGVuZGluZ01lbWJlcnNbZWxlbWVudF0gPSBpdGVtOwogICAgICBxdWV1ZS5hZGQoaXRlbSk7CiAgICB9IGVsc2UgewogICAgICBpdGVtLmltcG9ydHNUb0FkZCA9IF9pbXBvcnRTZXRzLnVuaW9uKGl0ZW0uaW1wb3J0c1RvQWRkLCBpbXBvcnRTZXQpOwogICAgfQogIH0KCiAgLy8vIEFkZCB0byB0aGUgcXVldWUgdGhhdCBbY29uc3RhbnRdIHNob3VsZCBiZSB1cGRhdGVkIHRvIGluY2x1ZGUgYWxsIGltcG9ydHMKICAvLy8gaW4gW2ltcG9ydFNldF0uIElmIHRoZXJlIGlzIGFscmVhZHkgYSB3b3JrIGl0ZW0gaW4gdGhlIHF1ZXVlIGZvcgogIC8vLyBbY29uc3RhbnRdLCB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgd29yayBpdGVtIG5vdyBpbmNsdWRlcyB0aGUgdW5pb24gb2YKICAvLy8gW2ltcG9ydFNldF0gYW5kIHRoZSBleGlzdGluZyB3b3JrIGl0ZW0ncyBpbXBvcnQgc2V0LgogIHZvaWQgYWRkQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSW1wb3J0U2V0IGltcG9ydFNldCkgewogICAgdmFyIGl0ZW0gPSBwZW5kaW5nQ29uc3RhbnRzW2NvbnN0YW50XTsKICAgIGlmIChpdGVtID09IG51bGwpIHsKICAgICAgaXRlbSA9IG5ldyBDb25zdGFudFdvcmtJdGVtKGNvbnN0YW50LCBpbXBvcnRTZXQpOwogICAgICBwZW5kaW5nQ29uc3RhbnRzW2NvbnN0YW50XSA9IGl0ZW07CiAgICAgIHF1ZXVlLmFkZChpdGVtKTsKICAgIH0gZWxzZSB7CiAgICAgIGl0ZW0uaW1wb3J0c1RvQWRkID0gX2ltcG9ydFNldHMudW5pb24oaXRlbS5pbXBvcnRzVG9BZGQsIGltcG9ydFNldCk7CiAgICB9CiAgfQp9CgovLy8gU3VtbWFyeSBvZiB0aGUgd29yayB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgb24gYSBjbGFzcywgbWVtYmVyLCBvciBjb25zdGFudC4KYWJzdHJhY3QgY2xhc3MgV29ya0l0ZW0gewogIC8vLyBBZGRpdGlvbmFsIGltcG9ydHMgdGhhdCB1c2UgW2VsZW1lbnRdIG9yIFt2YWx1ZV0gYW5kIG5lZWQgdG8gYmUgYWRkZWQgYnkKICAvLy8gdGhlIGFsZ29yaXRobS4KICAvLy8KICAvLy8gVGhpcyBpcyBub24tZmluYWwgaW4gY2FzZSB3ZSBhZGQgbW9yZSBkZWZlcnJlZCBpbXBvcnRzIHRvIHRoZSBzZXQgYmVmb3JlCiAgLy8vIHRoZSB3b3JrIGl0ZW0gaXMgYXBwbGllZCAoc2VlIFtXb3JrUXVldWUuYWRkRWxlbWVudF0gYW5kCiAgLy8vIFtXb3JrUXVldWUuYWRkQ29uc3RhbnRdKS4KICBJbXBvcnRTZXQgaW1wb3J0c1RvQWRkOwoKICBXb3JrSXRlbSh0aGlzLmltcG9ydHNUb0FkZCk7CgogIHZvaWQgdXBkYXRlKERlZmVycmVkTG9hZFRhc2sgdGFzaywgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBXb3JrUXVldWUgcXVldWUpOwp9CgovLy8gU3VtbWFyeSBvZiB0aGUgd29yayB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgb24gYSBjbGFzcy4KY2xhc3MgQ2xhc3NXb3JrSXRlbSBleHRlbmRzIFdvcmtJdGVtIHsKICAvLy8gQ2xhc3MgdG8gYmUgcmVjdXJzaXZlbHkgdXBkYXRlZC4KICBmaW5hbCBDbGFzc0VudGl0eSBjbHM7CgogIENsYXNzV29ya0l0ZW0odGhpcy5jbHMsIEltcG9ydFNldCBuZXdTZXQpIDogc3VwZXIobmV3U2V0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB1cGRhdGUoCiAgICAgIERlZmVycmVkTG9hZFRhc2sgdGFzaywgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBXb3JrUXVldWUgcXVldWUpIHsKICAgIHF1ZXVlLnBlbmRpbmdDbGFzc2VzLnJlbW92ZShjbHMpOwogICAgSW1wb3J0U2V0IG9sZFNldCA9IHRhc2suX2NsYXNzVG9TZXRbY2xzXTsKICAgIEltcG9ydFNldCBuZXdTZXQgPSB0YXNrLmltcG9ydFNldHMudW5pb24ob2xkU2V0LCBpbXBvcnRzVG9BZGQpOwogICAgdGFzay5fdXBkYXRlQ2xhc3NSZWN1cnNpdmUoY2xvc2VkV29ybGQsIGNscywgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlKTsKICB9Cn0KCi8vLyBTdW1tYXJ5IG9mIHRoZSB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBvbiBhIG1lbWJlci4KY2xhc3MgTWVtYmVyV29ya0l0ZW0gZXh0ZW5kcyBXb3JrSXRlbSB7CiAgLy8vIE1lbWJlciB0byBiZSByZWN1cnNpdmVseSB1cGRhdGVkLgogIGZpbmFsIE1lbWJlckVudGl0eSBtZW1iZXI7CgogIE1lbWJlcldvcmtJdGVtKHRoaXMubWVtYmVyLCBJbXBvcnRTZXQgbmV3U2V0KSA6IHN1cGVyKG5ld1NldCk7CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlKAogICAgICBEZWZlcnJlZExvYWRUYXNrIHRhc2ssIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgV29ya1F1ZXVlIHF1ZXVlKSB7CiAgICBxdWV1ZS5wZW5kaW5nTWVtYmVycy5yZW1vdmUobWVtYmVyKTsKICAgIEltcG9ydFNldCBvbGRTZXQgPSB0YXNrLl9tZW1iZXJUb1NldFttZW1iZXJdOwogICAgSW1wb3J0U2V0IG5ld1NldCA9IHRhc2suaW1wb3J0U2V0cy51bmlvbihvbGRTZXQsIGltcG9ydHNUb0FkZCk7CiAgICB0YXNrLl91cGRhdGVNZW1iZXJSZWN1cnNpdmUoY2xvc2VkV29ybGQsIG1lbWJlciwgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlKTsKICB9Cn0KCi8vLyBTdW1tYXJ5IG9mIHRoZSB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBvbiBhIGNvbnN0YW50LgpjbGFzcyBDb25zdGFudFdvcmtJdGVtIGV4dGVuZHMgV29ya0l0ZW0gewogIC8vLyBDb25zdGFudCB0byBiZSByZWN1cnNpdmVseSB1cGRhdGVkLgogIGZpbmFsIENvbnN0YW50VmFsdWUgY29uc3RhbnQ7CgogIENvbnN0YW50V29ya0l0ZW0odGhpcy5jb25zdGFudCwgSW1wb3J0U2V0IG5ld1NldCkgOiBzdXBlcihuZXdTZXQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHVwZGF0ZSgKICAgICAgRGVmZXJyZWRMb2FkVGFzayB0YXNrLCBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIFdvcmtRdWV1ZSBxdWV1ZSkgewogICAgcXVldWUucGVuZGluZ0NvbnN0YW50cy5yZW1vdmUoY29uc3RhbnQpOwogICAgSW1wb3J0U2V0IG9sZFNldCA9IHRhc2suX2NvbnN0YW50VG9TZXRbY29uc3RhbnRdOwogICAgSW1wb3J0U2V0IG5ld1NldCA9IHRhc2suaW1wb3J0U2V0cy51bmlvbihvbGRTZXQsIGltcG9ydHNUb0FkZCk7CiAgICB0YXNrLl91cGRhdGVDb25zdGFudFJlY3Vyc2l2ZShjbG9zZWRXb3JsZCwgY29uc3RhbnQsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciB1cGRhdGluZyBhbiBbT3V0cHV0VW5pdERhdGFdIG9iamVjdCB3aXRoIGRhdGEgZm9yIGxhdGUKLy8vIG1lbWJlcnMsIHRoYXQgaXMsIG1lbWJlcnMgY3JlYXRlZCBvbiBkZW1hbmQgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KY2xhc3MgTGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlciB7CiAgZmluYWwgT3V0cHV0VW5pdERhdGEgX291dHB1dFVuaXREYXRhOwoKICBMYXRlT3V0cHV0VW5pdERhdGFCdWlsZGVyKHRoaXMuX291dHB1dFVuaXREYXRhKTsKCiAgLy8vIFJlZ2lzdGVycyBbbmV3RW50aXR5XSB0byBiZSBlbWl0dGVkIGluIHRoZSBzYW1lIG91dHB1dCB1bml0IGFzCiAgLy8vIFtleGlzdGluZ0VudGl0eV07CiAgdm9pZCByZWdpc3RlckNvbG9jYXRlZE1lbWJlcnMoCiAgICAgIE1lbWJlckVudGl0eSBleGlzdGluZ0VudGl0eSwgTWVtYmVyRW50aXR5IG5ld0VudGl0eSkgewogICAgYXNzZXJ0KF9vdXRwdXRVbml0RGF0YS5fbWVtYmVyVG9Vbml0W25ld0VudGl0eV0gPT0gbnVsbCk7CiAgICBfb3V0cHV0VW5pdERhdGEuX21lbWJlclRvVW5pdFtuZXdFbnRpdHldID0KICAgICAgICBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvck1lbWJlcihleGlzdGluZ0VudGl0eSk7CiAgfQp9CgovLy8gUmVzdWx0cyBvZiB0aGUgZGVmZXJyZWQgbG9hZGluZyBhbGdvcml0aG0uCi8vLwovLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG91dHB1dCB1bml0IGFzc29jaWF0ZWQgd2l0aCBlbnRpdGllcyBhbmQKLy8vIGNvbnN0YW50cywgYXMgd2VsbCBhcyBvdGhlciBoZWxwZXIgbWV0aG9kcy4KLy8gVE9ETyhzaWdtdW5kKTogY29uc2lkZXIgbW92aW5nIGhlcmUgZXZlcnkgcGllY2Ugb2YgZGF0YSB1c2VkIGFzIGEgcmVzdWx0IG9mCi8vIGRlZmVycmVkIGxvYWRpbmcgKGluY2x1ZGluZyBodW5rc1RvTG9hZCwgZXRjKS4KY2xhc3MgT3V0cHV0VW5pdERhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbT3V0cHV0VW5pdERhdGFdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnb3V0cHV0LXVuaXQtZGF0YSc7CgogIGZpbmFsIGJvb2wgaXNQcm9ncmFtU3BsaXQ7CiAgZmluYWwgT3V0cHV0VW5pdCBtYWluT3V0cHV0VW5pdDsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIE91dHB1dFVuaXQ+IF9jbGFzc1RvVW5pdDsKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0PiBfbWVtYmVyVG9Vbml0OwogIGZpbmFsIE1hcDxMb2NhbCwgT3V0cHV0VW5pdD4gX2xvY2FsRnVuY3Rpb25Ub1VuaXQ7CiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIE91dHB1dFVuaXQ+IF9jb25zdGFudFRvVW5pdDsKICBmaW5hbCBMaXN0PE91dHB1dFVuaXQ+IG91dHB1dFVuaXRzOwogIGZpbmFsIE1hcDxJbXBvcnRFbnRpdHksIFN0cmluZz4gX2ltcG9ydERlZmVyTmFtZTsKCiAgLy8vIEEgbWFwcGluZyBmcm9tIHRoZSBuYW1lIG9mIGEgZGVmZXIgaW1wb3J0IHRvIGFsbCB0aGUgb3V0cHV0IHVuaXRzIGl0CiAgLy8vIGRlcGVuZHMgb24gaW4gYSBsaXN0IG9mIGxpc3RzIHRvIGJlIGxvYWRlZCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlIHsibGliMSI6IFtbbGliMV9saWIyX2xpYjNdLCBbbGliMV9saWIyLCBsaWIxX2xpYjNdLAogIC8vLyBbbGliMV1dfSB3b3VsZCBtZWFuIHRoYXQgaW4gb3JkZXIgdG8gbG9hZCAibGliMSIgZmlyc3QgdGhlIGh1bmsKICAvLy8gbGliMV9saWIyX2xpYjIgc2hvdWxkIGJlIGxvYWRlZCwgdGhlbiB0aGUgaHVua3MgbGliMV9saWIyIGFuZCBsaWIxX2xpYjMKICAvLy8gY2FuIGJlIGxvYWRlZCBpbiBwYXJhbGxlbC4gQW5kIGZpbmFsbHkgbGliMSBjYW4gYmUgbG9hZGVkLgogIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8T3V0cHV0VW5pdD4+IGh1bmtzVG9Mb2FkOwoKICAvLy8gQmVjYXVzZSB0aGUgdG9rZW4tc3RyZWFtIGlzIGZvcmdvdHRlbiBsYXRlciBpbiB0aGUgcHJvZ3JhbSwgd2UgY2FjaGUgYQogIC8vLyBkZXNjcmlwdGlvbiBvZiBlYWNoIGRlZmVycmVkIGltcG9ydC4KICBmaW5hbCBNYXA8SW1wb3J0RW50aXR5LCBJbXBvcnREZXNjcmlwdGlvbj4gX2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zOwoKICBPdXRwdXRVbml0RGF0YSgKICAgICAgdGhpcy5pc1Byb2dyYW1TcGxpdCwKICAgICAgdGhpcy5tYWluT3V0cHV0VW5pdCwKICAgICAgdGhpcy5fY2xhc3NUb1VuaXQsCiAgICAgIHRoaXMuX21lbWJlclRvVW5pdCwKICAgICAgdGhpcy5fbG9jYWxGdW5jdGlvblRvVW5pdCwKICAgICAgdGhpcy5fY29uc3RhbnRUb1VuaXQsCiAgICAgIHRoaXMub3V0cHV0VW5pdHMsCiAgICAgIHRoaXMuX2ltcG9ydERlZmVyTmFtZSwKICAgICAgdGhpcy5odW5rc1RvTG9hZCwKICAgICAgdGhpcy5fZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMpOwoKICAvLyBDcmVhdGVzIEotd29ybGQgZGF0YSBmcm9tIHRoZSBLLXdvcmxkIGRhdGEuCiAgZmFjdG9yeSBPdXRwdXRVbml0RGF0YS5mcm9tKAogICAgICBPdXRwdXRVbml0RGF0YSBvdGhlciwKICAgICAgTGlicmFyeUVudGl0eSBjb252ZXJ0TGlicmFyeShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpLAogICAgICBNYXA8Q2xhc3NFbnRpdHksIE91dHB1dFVuaXQ+IEZ1bmN0aW9uKAogICAgICAgICAgICAgIE1hcDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD4sIE1hcDxMb2NhbCwgT3V0cHV0VW5pdD4pCiAgICAgICAgICBjb252ZXJ0Q2xhc3NNYXAsCiAgICAgIE1hcDxNZW1iZXJFbnRpdHksIE91dHB1dFVuaXQ+IEZ1bmN0aW9uKAogICAgICAgICAgICAgIE1hcDxNZW1iZXJFbnRpdHksIE91dHB1dFVuaXQ+LCBNYXA8TG9jYWwsIE91dHB1dFVuaXQ+KQogICAgICAgICAgY29udmVydE1lbWJlck1hcCwKICAgICAgTWFwPENvbnN0YW50VmFsdWUsIE91dHB1dFVuaXQ+IEZ1bmN0aW9uKE1hcDxDb25zdGFudFZhbHVlLCBPdXRwdXRVbml0PikKICAgICAgICAgIGNvbnZlcnRDb25zdGFudE1hcCkgewogICAgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiBjbGFzc1RvVW5pdCA9CiAgICAgICAgY29udmVydENsYXNzTWFwKG90aGVyLl9jbGFzc1RvVW5pdCwgb3RoZXIuX2xvY2FsRnVuY3Rpb25Ub1VuaXQpOwogICAgTWFwPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD4gbWVtYmVyVG9Vbml0ID0KICAgICAgICBjb252ZXJ0TWVtYmVyTWFwKG90aGVyLl9tZW1iZXJUb1VuaXQsIG90aGVyLl9sb2NhbEZ1bmN0aW9uVG9Vbml0KTsKICAgIE1hcDxDb25zdGFudFZhbHVlLCBPdXRwdXRVbml0PiBjb25zdGFudFRvVW5pdCA9CiAgICAgICAgY29udmVydENvbnN0YW50TWFwKG90aGVyLl9jb25zdGFudFRvVW5pdCk7CiAgICBNYXA8SW1wb3J0RW50aXR5LCBJbXBvcnREZXNjcmlwdGlvbj4gZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMgPSB7fTsKICAgIG90aGVyLl9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucwogICAgICAgIC5mb3JFYWNoKChJbXBvcnRFbnRpdHkgaW1wb3J0LCBJbXBvcnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICBkZWZlcnJlZEltcG9ydERlc2NyaXB0aW9uc1tpbXBvcnRdID0gbmV3IEltcG9ydERlc2NyaXB0aW9uLmludGVybmFsKAogICAgICAgICAgZGVzY3JpcHRpb24uaW1wb3J0aW5nVXJpLAogICAgICAgICAgZGVzY3JpcHRpb24ucHJlZml4LAogICAgICAgICAgY29udmVydExpYnJhcnkoZGVzY3JpcHRpb24uX2ltcG9ydGluZ0xpYnJhcnkpKTsKICAgIH0pOwoKICAgIHJldHVybiBuZXcgT3V0cHV0VW5pdERhdGEoCiAgICAgICAgb3RoZXIuaXNQcm9ncmFtU3BsaXQsCiAgICAgICAgb3RoZXIubWFpbk91dHB1dFVuaXQsCiAgICAgICAgY2xhc3NUb1VuaXQsCiAgICAgICAgbWVtYmVyVG9Vbml0LAogICAgICAgIC8vIExvY2FsIGZ1bmN0aW9ucyBvbmx5IG1ha2Ugc2Vuc2UgaW4gdGhlIEstd29ybGQgbW9kZWwuCiAgICAgICAgY29uc3QgPExvY2FsLCBPdXRwdXRVbml0Pnt9LAogICAgICAgIGNvbnN0YW50VG9Vbml0LAogICAgICAgIG90aGVyLm91dHB1dFVuaXRzLAogICAgICAgIG90aGVyLl9pbXBvcnREZWZlck5hbWUsCiAgICAgICAgb3RoZXIuaHVua3NUb0xvYWQsCiAgICAgICAgZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMpOwogIH0KCiAgLy8vIERlc2VyaWFsaXplcyBhbiBbT3V0cHV0VW5pdERhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgT3V0cHV0VW5pdERhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGJvb2wgaXNQcm9ncmFtU3BsaXQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIExpc3Q8T3V0cHV0VW5pdD4gb3V0cHV0VW5pdHMgPSBzb3VyY2UucmVhZExpc3QoKCkgewogICAgICBib29sIGlzTWFpbk91dHB1dCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgIFNldDxJbXBvcnRFbnRpdHk+IGltcG9ydFNldCA9IHNvdXJjZS5yZWFkSW1wb3J0cygpLnRvU2V0KCk7CiAgICAgIHJldHVybiBuZXcgT3V0cHV0VW5pdChpc01haW5PdXRwdXQsIG5hbWUsIGltcG9ydFNldCk7CiAgICB9KTsKICAgIE91dHB1dFVuaXQgbWFpbk91dHB1dFVuaXQgPSBvdXRwdXRVbml0c1tzb3VyY2UucmVhZEludCgpXTsKCiAgICBNYXA8Q2xhc3NFbnRpdHksIE91dHB1dFVuaXQ+IGNsYXNzVG9Vbml0ID0gc291cmNlLnJlYWRDbGFzc01hcCgoKSB7CiAgICAgIHJldHVybiBvdXRwdXRVbml0c1tzb3VyY2UucmVhZEludCgpXTsKICAgIH0pOwogICAgTWFwPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD4gbWVtYmVyVG9Vbml0ID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck1hcCgoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICByZXR1cm4gb3V0cHV0VW5pdHNbc291cmNlLnJlYWRJbnQoKV07CiAgICB9KTsKICAgIE1hcDxDb25zdGFudFZhbHVlLCBPdXRwdXRVbml0PiBjb25zdGFudFRvVW5pdCA9IHNvdXJjZS5yZWFkQ29uc3RhbnRNYXAoKCkgewogICAgICByZXR1cm4gb3V0cHV0VW5pdHNbc291cmNlLnJlYWRJbnQoKV07CiAgICB9KTsKICAgIE1hcDxJbXBvcnRFbnRpdHksIFN0cmluZz4gaW1wb3J0RGVmZXJOYW1lID0KICAgICAgICBzb3VyY2UucmVhZEltcG9ydE1hcChzb3VyY2UucmVhZFN0cmluZyk7CiAgICBNYXA8U3RyaW5nLCBMaXN0PE91dHB1dFVuaXQ+PiBodW5rc1RvTG9hZCA9IHNvdXJjZS5yZWFkU3RyaW5nTWFwKCgpIHsKICAgICAgcmV0dXJuIHNvdXJjZS5yZWFkTGlzdCgoKSB7CiAgICAgICAgcmV0dXJuIG91dHB1dFVuaXRzW3NvdXJjZS5yZWFkSW50KCldOwogICAgICB9KTsKICAgIH0pOwogICAgTWFwPEltcG9ydEVudGl0eSwgSW1wb3J0RGVzY3JpcHRpb24+IGRlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zID0KICAgICAgICBzb3VyY2UucmVhZEltcG9ydE1hcCgoKSB7CiAgICAgIFN0cmluZyBpbXBvcnRpbmdVcmkgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICBTdHJpbmcgcHJlZml4ID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgTGlicmFyeUVudGl0eSBpbXBvcnRpbmdMaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5KCk7CiAgICAgIHJldHVybiBuZXcgSW1wb3J0RGVzY3JpcHRpb24uaW50ZXJuYWwoCiAgICAgICAgICBpbXBvcnRpbmdVcmksIHByZWZpeCwgaW1wb3J0aW5nTGlicmFyeSk7CiAgICB9KTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgT3V0cHV0VW5pdERhdGEoCiAgICAgICAgaXNQcm9ncmFtU3BsaXQsCiAgICAgICAgbWFpbk91dHB1dFVuaXQsCiAgICAgICAgY2xhc3NUb1VuaXQsCiAgICAgICAgbWVtYmVyVG9Vbml0LAogICAgICAgIC8vIExvY2FsIGZ1bmN0aW9ucyBvbmx5IG1ha2Ugc2Vuc2UgaW4gdGhlIEstd29ybGQgbW9kZWwuCiAgICAgICAgY29uc3QgPExvY2FsLCBPdXRwdXRVbml0Pnt9LAogICAgICAgIGNvbnN0YW50VG9Vbml0LAogICAgICAgIG91dHB1dFVuaXRzLAogICAgICAgIGltcG9ydERlZmVyTmFtZSwKICAgICAgICBodW5rc1RvTG9hZCwKICAgICAgICBkZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucyk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtPdXRwdXRVbml0RGF0YV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVCb29sKGlzUHJvZ3JhbVNwbGl0KTsKICAgIE1hcDxPdXRwdXRVbml0LCBpbnQ+IG91dHB1dFVuaXRJbmRpY2VzID0ge307CiAgICBzaW5rLndyaXRlTGlzdChvdXRwdXRVbml0cywgKE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgICBvdXRwdXRVbml0SW5kaWNlc1tvdXRwdXRVbml0XSA9IG91dHB1dFVuaXRJbmRpY2VzLmxlbmd0aDsKICAgICAgc2luay53cml0ZUJvb2wob3V0cHV0VW5pdC5pc01haW5PdXRwdXQpOwogICAgICBzaW5rLndyaXRlU3RyaW5nKG91dHB1dFVuaXQubmFtZSk7CiAgICAgIHNpbmsud3JpdGVJbXBvcnRzKG91dHB1dFVuaXQuX2ltcG9ydHMpOwogICAgfSk7CiAgICBzaW5rLndyaXRlSW50KG91dHB1dFVuaXRJbmRpY2VzW21haW5PdXRwdXRVbml0XSk7CiAgICBzaW5rLndyaXRlQ2xhc3NNYXAoX2NsYXNzVG9Vbml0LCAoT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICAgIHNpbmsud3JpdGVJbnQob3V0cHV0VW5pdEluZGljZXNbb3V0cHV0VW5pdF0pOwogICAgfSk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKF9tZW1iZXJUb1VuaXQsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgICBzaW5rLndyaXRlSW50KG91dHB1dFVuaXRJbmRpY2VzW291dHB1dFVuaXRdKTsKICAgIH0pOwogICAgc2luay53cml0ZUNvbnN0YW50TWFwKF9jb25zdGFudFRvVW5pdCwgKE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgICBzaW5rLndyaXRlSW50KG91dHB1dFVuaXRJbmRpY2VzW291dHB1dFVuaXRdKTsKICAgIH0pOwogICAgc2luay53cml0ZUltcG9ydE1hcChfaW1wb3J0RGVmZXJOYW1lLCBzaW5rLndyaXRlU3RyaW5nKTsKICAgIHNpbmsud3JpdGVTdHJpbmdNYXAoaHVua3NUb0xvYWQsIChMaXN0PE91dHB1dFVuaXQ+IG91dHB1dFVuaXRzKSB7CiAgICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgICAgb3V0cHV0VW5pdHMsCiAgICAgICAgICAoT3V0cHV0VW5pdCBvdXRwdXRVbml0KSA9PgogICAgICAgICAgICAgIHNpbmsud3JpdGVJbnQob3V0cHV0VW5pdEluZGljZXNbb3V0cHV0VW5pdF0pKTsKICAgIH0pOwogICAgc2luay53cml0ZUltcG9ydE1hcChfZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMsCiAgICAgICAgKEltcG9ydERlc2NyaXB0aW9uIGltcG9ydERlc2NyaXB0aW9uKSB7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcoaW1wb3J0RGVzY3JpcHRpb24uaW1wb3J0aW5nVXJpKTsKICAgICAgc2luay53cml0ZVN0cmluZyhpbXBvcnREZXNjcmlwdGlvbi5wcmVmaXgpOwogICAgICBzaW5rLndyaXRlTGlicmFyeShpbXBvcnREZXNjcmlwdGlvbi5faW1wb3J0aW5nTGlicmFyeSk7CiAgICB9KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW091dHB1dFVuaXRdIHdoZXJlIFtjbHNdIGJlbG9uZ3MuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZSBuZWVkIGZvciBbYWxsb3dOdWxsXS4gRHVtcC1pbmZvIGN1cnJlbnRseQogIC8vIG5lZWRzIGl0LgogIE91dHB1dFVuaXQgb3V0cHV0VW5pdEZvckNsYXNzKENsYXNzRW50aXR5IGNscywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICghaXNQcm9ncmFtU3BsaXQpIHJldHVybiBtYWluT3V0cHV0VW5pdDsKICAgIE91dHB1dFVuaXQgdW5pdCA9IF9jbGFzc1RvVW5pdFtjbHNdOwogICAgYXNzZXJ0KGFsbG93TnVsbCB8fCB1bml0ICE9IG51bGwsICdObyBvdXRwdXQgdW5pdCBmb3IgY2xhc3MgJGNscycpOwogICAgcmV0dXJuIHVuaXQgPz8gbWFpbk91dHB1dFVuaXQ7CiAgfQoKICBPdXRwdXRVbml0IG91dHB1dFVuaXRGb3JDbGFzc0ZvclRlc3RpbmcoQ2xhc3NFbnRpdHkgY2xzKSA9PiBfY2xhc3NUb1VuaXRbY2xzXTsKCiAgLy8vIFJldHVybnMgdGhlIFtPdXRwdXRVbml0XSB3aGVyZSBbbWVtYmVyXSBiZWxvbmdzLgogIE91dHB1dFVuaXQgb3V0cHV0VW5pdEZvck1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAoIWlzUHJvZ3JhbVNwbGl0KSByZXR1cm4gbWFpbk91dHB1dFVuaXQ7CiAgICBPdXRwdXRVbml0IHVuaXQgPSBfbWVtYmVyVG9Vbml0W21lbWJlcl07CiAgICBhc3NlcnQodW5pdCAhPSBudWxsLCAnTm8gb3V0cHV0IHVuaXQgZm9yIG1lbWJlciAkbWVtYmVyJyk7CiAgICByZXR1cm4gdW5pdCA/PyBtYWluT3V0cHV0VW5pdDsKICB9CgogIE91dHB1dFVuaXQgb3V0cHV0VW5pdEZvck1lbWJlckZvclRlc3RpbmcoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgX21lbWJlclRvVW5pdFttZW1iZXJdOwoKICAvLy8gRGlyZWN0IGFjY2VzcyB0byB0aGUgb3V0cHV0LXVuaXQgdG8gY29uc3RhbnRzIG1hcCB1c2VkIGZvciB0ZXN0aW5nLgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldCBjb25zdGFudHNGb3JUZXN0aW5nID0+IF9jb25zdGFudFRvVW5pdC5rZXlzOwoKICAvLy8gUmV0dXJucyB0aGUgW091dHB1dFVuaXRdIHdoZXJlIFtjb25zdGFudF0gYmVsb25ncy4KICBPdXRwdXRVbml0IG91dHB1dFVuaXRGb3JDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBpZiAoIWlzUHJvZ3JhbVNwbGl0KSByZXR1cm4gbWFpbk91dHB1dFVuaXQ7CiAgICByZXR1cm4gX2NvbnN0YW50VG9Vbml0W2NvbnN0YW50XTsKICB9CgogIE91dHB1dFVuaXQgb3V0cHV0VW5pdEZvckNvbnN0YW50Rm9yVGVzdGluZyhDb25zdGFudFZhbHVlIGNvbnN0YW50KSA9PgogICAgICBfY29uc3RhbnRUb1VuaXRbY29uc3RhbnRdOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgW2VsZW1lbnRdIGlzIGRlZmVycmVkLgogIGJvb2wgaXNEZWZlcnJlZENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBvdXRwdXRVbml0Rm9yQ2xhc3MoZWxlbWVudCkgIT0gbWFpbk91dHB1dFVuaXQ7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgZWxlbWVudCBbdG9dIGlzIHJlYWNoYWJsZSBmcm9tIGVsZW1lbnQgW2Zyb21dIHdpdGhvdXQKICAvLy8gY3Jvc3NpbmcgYSBkZWZlcnJlZCBpbXBvcnQuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIHR3byBkZWZlcnJlZCBsaWJyYXJpZXMgYEFgIGFuZCBgQmAgdGhhdCBib3RoCiAgLy8vIGltcG9ydCBhIGxpYnJhcnkgYENgLCB0aGVuIGV2ZW4gdGhvdWdoIGVsZW1lbnRzIGZyb20gYEFgIGFuZCBgQ2AgZW5kIHVwIGluCiAgLy8vIGRpZmZlcmVudCBvdXRwdXQgdW5pdHMsIHRoZXJlIGlzIGEgbm9uLWRlZmVycmVkIHBhdGggYmV0d2VlbiBgQWAgYW5kIGBDYC4KICBib29sIGhhc09ubHlOb25EZWZlcnJlZEltcG9ydFBhdGhzKE1lbWJlckVudGl0eSBmcm9tLCBNZW1iZXJFbnRpdHkgdG8pIHsKICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdEZyb20gPSBvdXRwdXRVbml0Rm9yTWVtYmVyKGZyb20pOwogICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0VG8gPSBvdXRwdXRVbml0Rm9yTWVtYmVyKHRvKTsKICAgIGlmIChvdXRwdXRVbml0VG8gPT0gbWFpbk91dHB1dFVuaXQpIHJldHVybiB0cnVlOwogICAgaWYgKG91dHB1dFVuaXRGcm9tID09IG1haW5PdXRwdXRVbml0KSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3V0cHV0VW5pdFRvLl9pbXBvcnRzLmNvbnRhaW5zQWxsKG91dHB1dFVuaXRGcm9tLl9pbXBvcnRzKTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBjb25zdGFudCBbdG9dIGlzIHJlYWNoYWJsZSBmcm9tIGVsZW1lbnQgW2Zyb21dIHdpdGhvdXQKICAvLy8gY3Jvc3NpbmcgYSBkZWZlcnJlZCBpbXBvcnQuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIHR3byBkZWZlcnJlZCBsaWJyYXJpZXMgYEFgIGFuZCBgQmAgdGhhdCBib3RoCiAgLy8vIGltcG9ydCBhIGxpYnJhcnkgYENgLCB0aGVuIGV2ZW4gdGhvdWdoIGVsZW1lbnRzIGZyb20gYEFgIGFuZCBgQ2AgZW5kIHVwIGluCiAgLy8vIGRpZmZlcmVudCBvdXRwdXQgdW5pdHMsIHRoZXJlIGlzIGEgbm9uLWRlZmVycmVkIHBhdGggYmV0d2VlbiBgQWAgYW5kIGBDYC4KICBib29sIGhhc09ubHlOb25EZWZlcnJlZEltcG9ydFBhdGhzVG9Db25zdGFudCgKICAgICAgTWVtYmVyRW50aXR5IGZyb20sIENvbnN0YW50VmFsdWUgdG8pIHsKICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdEZyb20gPSBvdXRwdXRVbml0Rm9yTWVtYmVyKGZyb20pOwogICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0VG8gPSBvdXRwdXRVbml0Rm9yQ29uc3RhbnQodG8pOwogICAgaWYgKG91dHB1dFVuaXRUbyA9PSBtYWluT3V0cHV0VW5pdCkgcmV0dXJuIHRydWU7CiAgICBpZiAob3V0cHV0VW5pdEZyb20gPT0gbWFpbk91dHB1dFVuaXQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBvdXRwdXRVbml0VG8uX2ltcG9ydHMuY29udGFpbnNBbGwob3V0cHV0VW5pdEZyb20uX2ltcG9ydHMpOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGF0IGEgY29uc3RhbnQgaXMgdXNlZCBpbiB0aGUgc2FtZSBkZWZlcnJlZCBvdXRwdXQgdW5pdCBhcwogIC8vLyBbZmllbGRdLgogIHZvaWQgcmVnaXN0ZXJDb25zdGFudERlZmVycmVkVXNlKERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgaWYgKCFpc1Byb2dyYW1TcGxpdCkgcmV0dXJuOwogICAgT3V0cHV0VW5pdCB1bml0ID0gY29uc3RhbnQudW5pdDsKICAgIGFzc2VydCgKICAgICAgICBfY29uc3RhbnRUb1VuaXRbY29uc3RhbnRdID09IG51bGwgfHwgX2NvbnN0YW50VG9Vbml0W2NvbnN0YW50XSA9PSB1bml0KTsKICAgIF9jb25zdGFudFRvVW5pdFtjb25zdGFudF0gPSB1bml0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHVuaXF1ZSBuYW1lIGZvciB0aGUgZ2l2ZW4gZGVmZXJyZWQgW2ltcG9ydF0uCiAgU3RyaW5nIGdldEltcG9ydERlZmVyTmFtZShTcGFubmFibGUgbm9kZSwgSW1wb3J0RW50aXR5IGltcG9ydCkgewogICAgU3RyaW5nIG5hbWUgPSBfaW1wb3J0RGVmZXJOYW1lW2ltcG9ydF07CiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlKAogICAgICAgICAgbm9kZSwgIk5vIGRlZmVycmVkIG5hbWUgZm9yICRpbXBvcnQuIik7CiAgICB9CiAgICByZXR1cm4gbmFtZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBuYW1lcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBkZWZlcnJlZCBpbXBvcnQgaW4gW3VuaXRdLgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0SW1wb3J0TmFtZXMoT3V0cHV0VW5pdCB1bml0KSB7CiAgICByZXR1cm4gdW5pdC5faW1wb3J0cy5tYXAoKGkpID0+IF9pbXBvcnREZWZlck5hbWVbaV0pOwogIH0KCiAgLy8vIFJldHVybnMgYSBqc29uLXN0eWxlIG1hcCBmb3IgZGVzY3JpYmluZyB3aGF0IGZpbGVzIHRoYXQgYXJlIGxvYWRlZCBieSBhCiAgLy8vIGdpdmVuIGRlZmVycmVkIGltcG9ydC4KICAvLy8gVGhlIG1hcHBpbmcgaXMgc3RydWN0dXJlZCBhczoKICAvLy8gbGlicmFyeSB1cmkgLT4geyJuYW1lIjogbGlicmFyeSBuYW1lLCAiZmlsZXMiOiAocHJlZml4IC0+IGxpc3Qgb2YgZmlsZXMpfQogIC8vLyBXaGVyZQogIC8vLwogIC8vLyAtIDxsaWJyYXJ5IHVyaT4gaXMgdGhlIHJlbGF0aXZlIHVyaSBvZiB0aGUgbGlicmFyeSBtYWtpbmcgYSBkZWZlcnJlZAogIC8vLyAgIGltcG9ydC4KICAvLy8gLSA8bGlicmFyeSBuYW1lPiBpcyB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgIjx1bm5hbWVkPiIgaWYgaXQgaXMKICAvLy8gICB1bm5hbWVkLgogIC8vLyAtIDxwcmVmaXg+IGlzIHRoZSBgYXNgIHByZWZpeCB1c2VkIGZvciBhIGdpdmVuIGRlZmVycmVkIGltcG9ydC4KICAvLy8gLSA8bGlzdCBvZiBmaWxlcz4gaXMgYSBsaXN0IG9mIHRoZSBmaWxlbmFtZXMgdGhlIG11c3QgYmUgbG9hZGVkIHdoZW4gdGhhdAogIC8vLyAgIGltcG9ydCBpcyBsb2FkZWQuCiAgTWFwPFN0cmluZywgTWFwPFN0cmluZywgZHluYW1pYz4+IGNvbXB1dGVEZWZlcnJlZE1hcCgKICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHtTZXQ8T3V0cHV0VW5pdD4gb21pdHRlZFVuaXRzfSkgewogICAgb21pdHRlZFVuaXRzID8/PSBTZXQoKTsKICAgIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIGR5bmFtaWM+PiBtYXBwaW5nID0ge307CgogICAgX2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zLmtleXMuZm9yRWFjaCgoSW1wb3J0RW50aXR5IGltcG9ydCkgewogICAgICBMaXN0PE91dHB1dFVuaXQ+IG91dHB1dFVuaXRzID0gaHVua3NUb0xvYWRbX2ltcG9ydERlZmVyTmFtZVtpbXBvcnRdXTsKICAgICAgSW1wb3J0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBfZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnNbaW1wb3J0XTsKICAgICAgU3RyaW5nIGdldE5hbWUoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICAgICAgdmFyIG5hbWUgPSBlbGVtZW50RW52aXJvbm1lbnQuZ2V0TGlicmFyeU5hbWUobGlicmFyeSk7CiAgICAgICAgcmV0dXJuIG5hbWUgPT0gJycgPyAnPHVubmFtZWQ+JyA6IG5hbWU7CiAgICAgIH0KCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGxpYnJhcnlNYXAgPSBtYXBwaW5nLnB1dElmQWJzZW50KAogICAgICAgICAgZGVzY3JpcHRpb24uaW1wb3J0aW5nVXJpLAogICAgICAgICAgKCkgPT4gPFN0cmluZywgZHluYW1pYz57CiAgICAgICAgICAgICAgICAibmFtZSI6IGdldE5hbWUoZGVzY3JpcHRpb24uX2ltcG9ydGluZ0xpYnJhcnkpLAogICAgICAgICAgICAgICAgImltcG9ydHMiOiA8U3RyaW5nLCBMaXN0PFN0cmluZz4+e30KICAgICAgICAgICAgICB9KTsKCiAgICAgIExpc3Q8U3RyaW5nPiBwYXJ0RmlsZU5hbWVzID0gb3V0cHV0VW5pdHMKICAgICAgICAgIC53aGVyZSgob3V0cHV0VW5pdCkgPT4gIW9taXR0ZWRVbml0cy5jb250YWlucyhvdXRwdXRVbml0KSkKICAgICAgICAgIC5tYXAoKG91dHB1dFVuaXQpID0+IGRlZmVycmVkUGFydEZpbGVOYW1lKG9wdGlvbnMsIG91dHB1dFVuaXQubmFtZSkpCiAgICAgICAgICAudG9MaXN0KCk7CiAgICAgIGxpYnJhcnlNYXBbImltcG9ydHMiXVtfaW1wb3J0RGVmZXJOYW1lW2ltcG9ydF1dID0gcGFydEZpbGVOYW1lczsKICAgIH0pOwogICAgcmV0dXJuIG1hcHBpbmc7CiAgfQp9CgovLy8gUmV0dXJucyB0aGUgZmlsZW5hbWUgZm9yIHRoZSBvdXRwdXQtdW5pdCBuYW1lZCBbbmFtZV0uCi8vLwovLy8gVGhlIGZpbGVuYW1lIGlzIG9mIHRoZSBmb3JtICI8bWFpbiBvdXRwdXQgZmlsZT5fPG5hbWU+LnBhcnQuanMiLgovLy8gSWYgW2FkZEV4dGVuc2lvbl0gaXMgZmFsc2UsIHRoZSAiLnBhcnQuanMiIHN1ZmZpeCBpcyBsZWZ0IG91dC4KU3RyaW5nIGRlZmVycmVkUGFydEZpbGVOYW1lKENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLCBTdHJpbmcgbmFtZSwKICAgIHtib29sIGFkZEV4dGVuc2lvbjogdHJ1ZX0pIHsKICBhc3NlcnQobmFtZSAhPSAiIik7CiAgU3RyaW5nIG91dFBhdGggPSBvcHRpb25zLm91dHB1dFVyaSAhPSBudWxsID8gb3B0aW9ucy5vdXRwdXRVcmkucGF0aCA6ICJvdXQiOwogIFN0cmluZyBvdXROYW1lID0gb3V0UGF0aC5zdWJzdHJpbmcob3V0UGF0aC5sYXN0SW5kZXhPZignLycpICsgMSk7CiAgU3RyaW5nIGV4dGVuc2lvbiA9IGFkZEV4dGVuc2lvbiA/ICIucGFydC5qcyIgOiAiIjsKICByZXR1cm4gIiR7b3V0TmFtZX1fJG5hbWUkZXh0ZW5zaW9uIjsKfQoKY2xhc3MgRGVwZW5kZW5jaWVzIHsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIERlcGVuZGVuY3lJbmZvPiBjbGFzc2VzID0ge307CiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgRGVwZW5kZW5jeUluZm8+IG1lbWJlcnMgPSB7fTsKICBmaW5hbCBTZXQ8TG9jYWw+IGxvY2FsRnVuY3Rpb25zID0gbmV3IFNldDxMb2NhbD4oKTsKICBmaW5hbCBNYXA8Q29uc3RhbnRWYWx1ZSwgRGVwZW5kZW5jeUluZm8+IGNvbnN0YW50cyA9IHt9OwoKICB2b2lkIGFkZENsYXNzKENsYXNzRW50aXR5IGNscywgW0ltcG9ydEVudGl0eSBpbXBvcnRdKSB7CiAgICAoY2xhc3Nlc1tjbHNdID8/PSBuZXcgRGVwZW5kZW5jeUluZm8oKSkucmVnaXN0ZXJJbXBvcnQoaW1wb3J0KTsKICB9CgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlckVudGl0eSBtLCBbSW1wb3J0RW50aXR5IGltcG9ydF0pIHsKICAgIChtZW1iZXJzW21dID8/PSBuZXcgRGVwZW5kZW5jeUluZm8oKSkucmVnaXN0ZXJJbXBvcnQoaW1wb3J0KTsKICB9CgogIHZvaWQgYWRkQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSBjLCBbSW1wb3J0RW50aXR5IGltcG9ydF0pIHsKICAgIChjb25zdGFudHNbY10gPz89IG5ldyBEZXBlbmRlbmN5SW5mbygpKS5yZWdpc3RlckltcG9ydChpbXBvcnQpOwogIH0KfQoKY2xhc3MgRGVwZW5kZW5jeUluZm8gewogIGJvb2wgaXNEZWZlcnJlZCA9IHRydWU7CiAgTGlzdDxJbXBvcnRFbnRpdHk+IGltcG9ydHM7CgogIHJlZ2lzdGVySW1wb3J0KEltcG9ydEVudGl0eSBpbXBvcnQpIHsKICAgIGlmICghaXNEZWZlcnJlZCkgcmV0dXJuOwogICAgLy8gQSBudWxsIGltcG9ydCByZXByZXNlbnRzIGEgZGlyZWN0IG5vbi1kZWZlcnJlZCBkZXBlbmRlbmN5LgogICAgaWYgKGltcG9ydCAhPSBudWxsKSB7CiAgICAgIChpbXBvcnRzID8/PSBbXSkuYWRkKGltcG9ydCk7CiAgICB9IGVsc2UgewogICAgICBpbXBvcnRzID0gbnVsbDsKICAgICAgaXNEZWZlcnJlZCA9IGZhbHNlOwogICAgfQogIH0KfQoKY2xhc3MgVHlwZURlcGVuZGVuY3lWaXNpdG9yIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPHZvaWQsIE51bGw+IHsKICBmaW5hbCBEZXBlbmRlbmNpZXMgX2RlcGVuZGVuY2llczsKICBmaW5hbCBJbXBvcnRFbnRpdHkgX2ltcG9ydDsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CgogIFR5cGVEZXBlbmRlbmN5VmlzaXRvcih0aGlzLl9kZXBlbmRlbmNpZXMsIHRoaXMuX2ltcG9ydCwgdGhpcy5fY29tbW9uRWxlbWVudHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0KERhcnRUeXBlIHR5cGUsIFtfXSkgewogICAgdHlwZS5hY2NlcHQodGhpcywgbnVsbCk7CiAgfQoKICB2b2lkIHZpc2l0TGlzdChMaXN0PERhcnRUeXBlPiB0eXBlcykgewogICAgdHlwZXMuZm9yRWFjaCh2aXNpdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnV0dXJlT3JUeXBlKEZ1dHVyZU9yVHlwZSB0eXBlLCBOdWxsIGFyZ3VtZW50KSB7CiAgICBfZGVwZW5kZW5jaWVzLmFkZENsYXNzKF9jb21tb25FbGVtZW50cy5mdXR1cmVDbGFzcyk7CiAgICB2aXNpdCh0eXBlLnR5cGVBcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgdHlwZSwgTnVsbCBhcmd1bWVudCkgewogICAgLy8gTm90aGluZyB0byBhZGQuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgdHlwZSwgTnVsbCBhcmd1bWVudCkgewogICAgdmlzaXRMaXN0KHR5cGUudHlwZUFyZ3VtZW50cyk7CiAgICB2aXNpdCh0eXBlLnVuYWxpYXNlZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsIE51bGwgYXJndW1lbnQpIHsKICAgIHZpc2l0TGlzdCh0eXBlLnR5cGVBcmd1bWVudHMpOwogICAgLy8gVE9ETyhzaWdtdW5kKTogd2hlbiB3ZSBhcmUgYWJsZSB0byBzcGxpdCBjbGFzc2VzIGZyb20gdHlwZXMgaW4gb3VyCiAgICAvLyBydW50aW1lLXR5cGUgcmVwcmVzZW50YXRpb24sIHRoaXMgc2hvdWxkIHRyYWNrIHR5cGUuZWxlbWVudCBhcyBhIHR5cGUKICAgIC8vIGRlcGVuZGVuY3kgaW5zdGVhZC4KICAgIF9kZXBlbmRlbmNpZXMuYWRkQ2xhc3ModHlwZS5lbGVtZW50LCBfaW1wb3J0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUsIE51bGwgYXJndW1lbnQpIHsKICAgIGZvciAoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICB2aXNpdCh0eXBlVmFyaWFibGUuYm91bmQpOwogICAgfQogICAgdmlzaXRMaXN0KHR5cGUucGFyYW1ldGVyVHlwZXMpOwogICAgdmlzaXRMaXN0KHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyk7CiAgICB2aXNpdExpc3QodHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzKTsKICAgIHZpc2l0KHR5cGUucmV0dXJuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgTnVsbCBhcmd1bWVudCkgewogICAgLy8gTm90aGluZyB0byBhZGQuIEhhbmRsZWQgaW4gW3Zpc2l0RnVuY3Rpb25UeXBlXS4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlVmFyaWFibGVUeXBlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgTnVsbCBhcmd1bWVudCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRG8gd2UgbmVlZCB0byBjb2xsZWN0IHRoZSBib3VuZD8KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSB0eXBlLCBOdWxsIGFyZ3VtZW50KSB7CiAgICAvLyBOb3RoaW5nIHRvIGFkZC4KICB9Cn0KhqQATk48ARcBJQFAAS4WHkImHwkXIhslJB4hNCsXHCQ9KScBThAEUUAEUT8ERzU+GwE0FQFGJAE7AQwkKjg3ICs9JTAlMyMoICAGT1FPRicEATcBDDcCAVFQGDcMKQFCHgFPD0MBQR8BUAFPEE8BMk8BMi4qATpLATQxKwE0KAFNK0srAUQ+ARsBSEIxOwE/TS8qBAEwNAFRATgBUSpGTBUnUUpMDkYEAUopMwFKKjQBSis1ATUGRi9COU0gQg4GSDMEAUskBjY5IBsjSUYqNkksJksGAR9MRDQIIAQBSyQGNjogHCMl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YXJ0MmpzLmRpYWdub3N0aWNzLmNvZGVfbG9jYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKCi8vLyBbQ29kZUxvY2F0aW9uXSBkaXZpZGVzIHVyaXMgaW50byBkaWZmZXJlbnQgY2xhc3Nlcy4KLy8vCi8vLyBUaGVzZSBhcmUgdXNlZCB0byBncm91cCB1cmlzIGZyb20gdXNlciBjb2RlLCBwbGF0Zm9ybSBsaWJyYXJpZXMgYW5kCi8vLyBwYWNrYWdlcy4KYWJzdHJhY3QgY2xhc3MgQ29kZUxvY2F0aW9uIHsKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3VyaV0gaXMgaW4gdGhpcyBjb2RlIGxvY2F0aW9uLgogIGJvb2wgaW5TYW1lTG9jYXRpb24oVXJpIHVyaSk7CgogIC8vLyBSZXR1cm5zIHRoZSB1cmkgb2YgdGhpcyBsb2NhdGlvbiByZWxhdGl2ZSB0byBbYmFzZVVyaV0uCiAgU3RyaW5nIHJlbGF0aXZpemUoVXJpIGJhc2VVcmkpOwoKICBmYWN0b3J5IENvZGVMb2NhdGlvbihVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSA9PSAncGFja2FnZScpIHsKICAgICAgaW50IHNsYXNoUG9zID0gdXJpLnBhdGguaW5kZXhPZignLycpOwogICAgICBpZiAoc2xhc2hQb3MgIT0gLTEpIHsKICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSB1cmkucGF0aC5zdWJzdHJpbmcoMCwgc2xhc2hQb3MpOwogICAgICAgIHJldHVybiBuZXcgUGFja2FnZUxvY2F0aW9uKHBhY2thZ2VOYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFVyaUxvY2F0aW9uKHVyaSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgU2NoZW1lTG9jYXRpb24odXJpKTsKICAgIH0KICB9Cn0KCi8vLyBBIGNvZGUgbG9jYXRpb24gZGVmaW5lZCBieSB0aGUgc2NoZW1lIG9mIHRoZSB1cmkuCi8vLwovLy8gVXNlZCBmb3Igbm9uLXBhY2thZ2UgdXJpcywgc3VjaCBhcyAnZGFydCcsICdmaWxlJywgYW5kICdodHRwJy4KY2xhc3MgU2NoZW1lTG9jYXRpb24gaW1wbGVtZW50cyBDb2RlTG9jYXRpb24gewogIGZpbmFsIFVyaSB1cmk7CgogIFNjaGVtZUxvY2F0aW9uKHRoaXMudXJpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpblNhbWVMb2NhdGlvbihVcmkgdXJpKSB7CiAgICByZXR1cm4gdGhpcy51cmkuc2NoZW1lID09IHVyaS5zY2hlbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVsYXRpdml6ZShVcmkgYmFzZVVyaSkgewogICAgcmV0dXJuIGZlLnJlbGF0aXZpemVVcmkoYmFzZVVyaSwgdXJpLCBmYWxzZSk7CiAgfQp9CgovLy8gQSBjb2RlIGxvY2F0aW9uIGRlZmluZWQgYnkgdGhlIHBhY2thZ2UgbmFtZS4KLy8vCi8vLyBVc2VkIGZvciBwYWNrYWdlIHVyaXMsIHNlcGFyYXRlZCBieSB0aGVpciBgcGFja2FnZSBuYW1lc2AsIHRoYXQgaXMsIHRoZQovLy8gJ2Zvbycgb2YgJ3BhY2thZ2U6Zm9vL2Jhci5kYXJ0Jy4KY2xhc3MgUGFja2FnZUxvY2F0aW9uIGltcGxlbWVudHMgQ29kZUxvY2F0aW9uIHsKICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWU7CgogIFBhY2thZ2VMb2NhdGlvbih0aGlzLnBhY2thZ2VOYW1lKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpblNhbWVMb2NhdGlvbihVcmkgdXJpKSB7CiAgICByZXR1cm4gdXJpLnNjaGVtZSA9PSAncGFja2FnZScgJiYgdXJpLnBhdGguc3RhcnRzV2l0aCgnJHBhY2thZ2VOYW1lLycpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHJlbGF0aXZpemUoVXJpIGJhc2VVcmkpID0+ICdwYWNrYWdlOiRwYWNrYWdlTmFtZSc7Cn0KCi8vLyBBIGNvZGUgbG9jYXRpb24gZGVmaW5lZCBieSB0aGUgd2hvbGUgdXJpLgovLy8KLy8vIFVzZWQgZm9yIHBhY2thZ2UgdXJpcyB3aXRoIG5vIHBhY2thZ2UgbmFtZS4gRm9yIGluc3RhbmNlICdwYWNrYWdlOmZvby5kYXJ0Jy4KY2xhc3MgVXJpTG9jYXRpb24gaW1wbGVtZW50cyBDb2RlTG9jYXRpb24gewogIGZpbmFsIFVyaSB1cmk7CgogIFVyaUxvY2F0aW9uKHRoaXMudXJpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpblNhbWVMb2NhdGlvbihVcmkgdXJpKSA9PiB0aGlzLnVyaSA9PSB1cmk7CgogIEBvdmVycmlkZQogIFN0cmluZyByZWxhdGl2aXplKFVyaSBiYXNlVXJpKSB7CiAgICByZXR1cm4gZmUucmVsYXRpdml6ZVVyaShiYXNlVXJpLCB1cmksIGZhbHNlKTsKICB9Cn0KCi8vLyBBIGNvZGUgbG9jYXRpb24gdGhhdCBjb250YWlucyBhbnkgdXJpLgpjbGFzcyBBbnlMb2NhdGlvbiBpbXBsZW1lbnRzIENvZGVMb2NhdGlvbiB7CiAgY29uc3QgQW55TG9jYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpblNhbWVMb2NhdGlvbihVcmkgdXJpKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVsYXRpdml6ZShVcmkgYmFzZVVyaSkgPT4gJyRiYXNlVXJpJzsKfQpkAE5OPAErAUABOARIDh44IAE+IgEiIywcPjEPJQgNJgYEAgE2BEMvEQEcAQwhKgQBDCMyBAIBMQRMJTAcASUBDCFMBAEMPAIBLgRRLBEBGQEMMwEMIzIEAgErLBcBDCgBDDACATNwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9jb2RlX2xvY2F0aW9uLmRhcnQsc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZHVtcF9pbmZvLmRhcnTAAGDOLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZHVtcF9pbmZvOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnCiAgICBzaG93IENodW5rZWRDb252ZXJzaW9uU2luaywgSnNvbkVuY29kZXIsIFN0cmluZ0NvbnZlcnNpb25TaW5rOwoKaW1wb3J0ICdwYWNrYWdlOmRhcnQyanNfaW5mby9pbmZvLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6ZGFydDJqc19pbmZvL2pzb25faW5mb19jb2RlYy5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmRhcnQyanNfaW5mby9iaW5hcnlfc2VyaWFsaXphdGlvbi5kYXJ0JyBhcyBkdW1wX2luZm87CgppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKaW1wb3J0ICdiYWNrZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICdjb21tb24vdGFza3MuZGFydCcgc2hvdyBDb21waWxlclRhc2s7CmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnY29tcGlsZXIuZGFydCcgc2hvdyBDb21waWxlcjsKaW1wb3J0ICdjb25zdGFudHMvdmFsdWVzLmRhcnQnIHNob3cgQ29uc3RhbnRWYWx1ZSwgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlOwppbXBvcnQgJ2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0LCBkZWZlcnJlZFBhcnRGaWxlTmFtZTsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnaW5mZXJyZXIvdHlwZXMuZGFydCcKICAgIHNob3cgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHM7CmltcG9ydCAnanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFVzZUNhc2UsIFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdFZpc2l0b3JJbXBsOwppbXBvcnQgJ3V0aWwvc2lua19hZGFwdGVyLmRhcnQnOwppbXBvcnQgJ3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKY2xhc3MgRWxlbWVudEluZm9Db2xsZWN0b3IgewogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICBmaW5hbCBEdW1wSW5mb1Rhc2sgZHVtcEluZm9UYXNrOwoKICBKRWxlbWVudEVudmlyb25tZW50IGdldCBlbnZpcm9ubWVudCA9PiBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgQ29kZWdlbldvcmxkQnVpbGRlciBnZXQgY29kZWdlbldvcmxkQnVpbGRlciA9PiBjb21waWxlci5jb2RlZ2VuV29ybGRCdWlsZGVyOwoKICBmaW5hbCBBbGxJbmZvIHJlc3VsdCA9IG5ldyBBbGxJbmZvKCk7CiAgZmluYWwgTWFwPEVudGl0eSwgSW5mbz4gX2VudGl0eVRvSW5mbyA9IDxFbnRpdHksIEluZm8+e307CiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIEluZm8+IF9jb25zdGFudFRvSW5mbyA9IDxDb25zdGFudFZhbHVlLCBJbmZvPnt9OwogIGZpbmFsIE1hcDxPdXRwdXRVbml0LCBPdXRwdXRVbml0SW5mbz4gX291dHB1dFRvSW5mbyA9IHt9OwoKICBFbGVtZW50SW5mb0NvbGxlY3Rvcih0aGlzLmNvbXBpbGVyLCB0aGlzLmR1bXBJbmZvVGFzaywgdGhpcy5jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CgogIHZvaWQgcnVuKCkgewogICAgZHVtcEluZm9UYXNrLl9jb25zdGFudFRvTm9kZS5mb3JFYWNoKChjb25zdGFudCwgbm9kZSkgewogICAgICAvLyBUT0RPKHNpZ211bmQpOiBhZGQgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbnN0YW50cwogICAgICB2YXIgc3BhbiA9IGR1bXBJbmZvVGFzay5fbm9kZURhdGFbbm9kZV07CiAgICAgIHZhciBpbmZvID0gbmV3IENvbnN0YW50SW5mbygKICAgICAgICAgIHNpemU6IHNwYW4uZW5kIC0gc3Bhbi5zdGFydCwKICAgICAgICAgIGNvZGU6IFtzcGFuXSwKICAgICAgICAgIG91dHB1dFVuaXQ6IF91bml0SW5mb0ZvckNvbnN0YW50KGNvbnN0YW50KSk7CiAgICAgIF9jb25zdGFudFRvSW5mb1tjb25zdGFudF0gPSBpbmZvOwogICAgICByZXN1bHQuY29uc3RhbnRzLmFkZChpbmZvKTsKICAgIH0pOwogICAgZW52aXJvbm1lbnQubGlicmFyaWVzLmZvckVhY2godmlzaXRMaWJyYXJ5KTsKICB9CgogIC8vLyBXaGV0aGVyIHRvIGVtaXQgaW5mb3JtYXRpb24gYWJvdXQgW2VudGl0eV0uCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQgd2UgZW1pdCBpbmZvcm1hdGlvbiBmb3IgYW55IGVudGl0eSB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZQogIC8vLyBvdXRwdXQgc2l6ZS4gRWl0aGVyIGJlY2F1c2UgaXQgaXMgYSBmdW5jdGlvbiBiZWluZyBlbWl0dGVkIG9yIGlubGluZWQsCiAgLy8vIG9yIGJlY2F1c2UgaXQgaXMgYW4gZW50aXR5IHRoYXQgaG9sZHMgZGVwZW5kZW5jaWVzIHRvIG90aGVyIGVudGl0aWVzLgogIGJvb2wgc2hvdWxkS2VlcChFbnRpdHkgZW50aXR5KSB7CiAgICByZXR1cm4gZHVtcEluZm9UYXNrLmltcGFjdHMuY29udGFpbnNLZXkoZW50aXR5KSB8fAogICAgICAgIGR1bXBJbmZvVGFzay5pbmxpbmVDb3VudC5jb250YWluc0tleShlbnRpdHkpOwogIH0KCiAgTGlicmFyeUluZm8gdmlzaXRMaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGliKSB7CiAgICBTdHJpbmcgbGlibmFtZSA9IGVudmlyb25tZW50LmdldExpYnJhcnlOYW1lKGxpYik7CiAgICBpZiAobGlibmFtZS5pc0VtcHR5KSB7CiAgICAgIGxpYm5hbWUgPSAnPHVubmFtZWQ+JzsKICAgIH0KICAgIGludCBzaXplID0gZHVtcEluZm9UYXNrLnNpemVPZihsaWIpOwogICAgTGlicmFyeUluZm8gaW5mbyA9IG5ldyBMaWJyYXJ5SW5mbyhsaWJuYW1lLCBsaWIuY2Fub25pY2FsVXJpLCBudWxsLCBzaXplKTsKICAgIF9lbnRpdHlUb0luZm9bbGliXSA9IGluZm87CgogICAgZW52aXJvbm1lbnQuZm9yRWFjaExpYnJhcnlNZW1iZXIobGliLCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24gfHwgbWVtYmVyLmlzR2V0dGVyIHx8IG1lbWJlci5pc1NldHRlcikgewogICAgICAgIEZ1bmN0aW9uSW5mbyBmdW5jdGlvbkluZm8gPSB2aXNpdEZ1bmN0aW9uKG1lbWJlcik7CiAgICAgICAgaWYgKGZ1bmN0aW9uSW5mbyAhPSBudWxsKSB7CiAgICAgICAgICBpbmZvLnRvcExldmVsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZm8pOwogICAgICAgICAgZnVuY3Rpb25JbmZvLnBhcmVudCA9IGluZm87CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgRmllbGRJbmZvIGZpZWxkSW5mbyA9IHZpc2l0RmllbGQobWVtYmVyKTsKICAgICAgICBpZiAoZmllbGRJbmZvICE9IG51bGwpIHsKICAgICAgICAgIGluZm8udG9wTGV2ZWxWYXJpYWJsZXMuYWRkKGZpZWxkSW5mbyk7CiAgICAgICAgICBmaWVsZEluZm8ucGFyZW50ID0gaW5mbzsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIGVudmlyb25tZW50LmZvckVhY2hDbGFzcyhsaWIsIChDbGFzc0VudGl0eSBjbGF6eikgewogICAgICBDbGFzc0luZm8gY2xhc3NJbmZvID0gdmlzaXRDbGFzcyhjbGF6eik7CiAgICAgIGlmIChjbGFzc0luZm8gIT0gbnVsbCkgewogICAgICAgIGluZm8uY2xhc3Nlcy5hZGQoY2xhc3NJbmZvKTsKICAgICAgICBjbGFzc0luZm8ucGFyZW50ID0gaW5mbzsKICAgICAgfQogICAgfSk7CgogICAgaWYgKGluZm8uaXNFbXB0eSAmJiAhc2hvdWxkS2VlcChsaWIpKSByZXR1cm4gbnVsbDsKICAgIHJlc3VsdC5saWJyYXJpZXMuYWRkKGluZm8pOwogICAgcmV0dXJuIGluZm87CiAgfQoKICBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IF9yZXN1bHRPZk1lbWJlcihNZW1iZXJFbnRpdHkgZSkgPT4KICAgICAgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMucmVzdWx0T2ZNZW1iZXIoZSk7CgogIEFic3RyYWN0VmFsdWUgX3Jlc3VsdE9mUGFyYW1ldGVyKExvY2FsIGUpID0+CiAgICAgIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLnJlc3VsdE9mUGFyYW1ldGVyKGUpOwoKICBGaWVsZEluZm8gdmlzaXRGaWVsZChGaWVsZEVudGl0eSBmaWVsZCwge0NsYXNzRW50aXR5IGNvbnRhaW5pbmdDbGFzc30pIHsKICAgIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRUeXBlID0gX3Jlc3VsdE9mTWVtYmVyKGZpZWxkKS50eXBlOwogICAgLy8gSWYgYSBmaWVsZCBoYXMgYW4gZW1wdHkgaW5mZXJyZWQgdHlwZSBpdCBpcyBuZXZlciB1c2VkLgogICAgaWYgKGluZmVycmVkVHlwZSA9PSBudWxsIHx8CiAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAuaXNFbXB0eShpbmZlcnJlZFR5cGUpCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGludCBzaXplID0gZHVtcEluZm9UYXNrLnNpemVPZihmaWVsZCk7CiAgICBMaXN0PENvZGVTcGFuPiBjb2RlID0gZHVtcEluZm9UYXNrLmNvZGVPZihmaWVsZCk7CgogICAgLy8gVE9ETyhoZXQpOiBXaHkgZG9lc24ndCBgc2l6ZWAgYWNjb3VudCBmb3IgdGhlIGNvZGUgc2l6ZSBhbHJlYWR5PwogICAgaWYgKGNvZGUgIT0gbnVsbCkgc2l6ZSArPSBjb2RlLmxlbmd0aDsKCiAgICBGaWVsZEluZm8gaW5mbyA9IG5ldyBGaWVsZEluZm8oCiAgICAgICAgbmFtZTogZmllbGQubmFtZSwKICAgICAgICB0eXBlOiAnJHtlbnZpcm9ubWVudC5nZXRGaWVsZFR5cGUoZmllbGQpfScsCiAgICAgICAgaW5mZXJyZWRUeXBlOiAnJGluZmVycmVkVHlwZScsCiAgICAgICAgY29kZTogY29kZSwKICAgICAgICBvdXRwdXRVbml0OiBfdW5pdEluZm9Gb3JNZW1iZXIoZmllbGQpLAogICAgICAgIGlzQ29uc3Q6IGZpZWxkLmlzQ29uc3QpOwogICAgX2VudGl0eVRvSW5mb1tmaWVsZF0gPSBpbmZvOwogICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpOwogICAgaWYgKGZpZWxkRGF0YS5pbml0aWFsVmFsdWUgIT0gbnVsbCkgewogICAgICBpbmZvLmluaXRpYWxpemVyID0gX2NvbnN0YW50VG9JbmZvW2ZpZWxkRGF0YS5pbml0aWFsVmFsdWVdOwogICAgfQoKICAgIGlmIChjb21waWxlci5vcHRpb25zLmV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uKSB7CiAgICAgIC8vIFdlIHVzZSBmaWVsZC5oYXNoQ29kZSBiZWNhdXNlIGl0IGlzIGdsb2JhbGx5IHVuaXF1ZSBhbmQgaXQgaXMKICAgICAgLy8gYXZhaWxhYmxlIHdoaWxlIHdlIGFyZSBkb2luZyBjb2RlZ2VuLgogICAgICBpbmZvLmNvdmVyYWdlSWQgPSAnJHtmaWVsZC5oYXNoQ29kZX0nOwogICAgfQoKICAgIGludCBjbG9zdXJlU2l6ZSA9IF9hZGRDbG9zdXJlSW5mbyhpbmZvLCBmaWVsZCk7CiAgICBpbmZvLnNpemUgPSBzaXplICsgY2xvc3VyZVNpemU7CgogICAgcmVzdWx0LmZpZWxkcy5hZGQoaW5mbyk7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIENsYXNzSW5mbyB2aXNpdENsYXNzKENsYXNzRW50aXR5IGNsYXp6KSB7CiAgICAvLyBPbWl0IGNsYXNzIGlmIGl0IGlzIG5vdCBuZWVkZWQuCiAgICBDbGFzc0luZm8gY2xhc3NJbmZvID0gbmV3IENsYXNzSW5mbygKICAgICAgICBuYW1lOiBjbGF6ei5uYW1lLAogICAgICAgIGlzQWJzdHJhY3Q6IGNsYXp6LmlzQWJzdHJhY3QsCiAgICAgICAgb3V0cHV0VW5pdDogX3VuaXRJbmZvRm9yQ2xhc3MoY2xhenopKTsKICAgIF9lbnRpdHlUb0luZm9bY2xhenpdID0gY2xhc3NJbmZvOwoKICAgIGludCBzaXplID0gZHVtcEluZm9UYXNrLnNpemVPZihjbGF6eik7CiAgICBlbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbGF6eiwgKG1lbWJlcikgewogICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24gfHwgbWVtYmVyLmlzR2V0dGVyIHx8IG1lbWJlci5pc1NldHRlcikgewogICAgICAgIEZ1bmN0aW9uSW5mbyBmdW5jdGlvbkluZm8gPSB2aXNpdEZ1bmN0aW9uKG1lbWJlcik7CiAgICAgICAgaWYgKGZ1bmN0aW9uSW5mbyAhPSBudWxsKSB7CiAgICAgICAgICBjbGFzc0luZm8uZnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZm8pOwogICAgICAgICAgZnVuY3Rpb25JbmZvLnBhcmVudCA9IGNsYXNzSW5mbzsKICAgICAgICAgIGZvciAodmFyIGNsb3N1cmVJbmZvIGluIGZ1bmN0aW9uSW5mby5jbG9zdXJlcykgewogICAgICAgICAgICBzaXplICs9IGNsb3N1cmVJbmZvLnNpemU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgRmllbGRJbmZvIGZpZWxkSW5mbyA9IHZpc2l0RmllbGQobWVtYmVyLCBjb250YWluaW5nQ2xhc3M6IGNsYXp6KTsKICAgICAgICBpZiAoZmllbGRJbmZvICE9IG51bGwpIHsKICAgICAgICAgIGNsYXNzSW5mby5maWVsZHMuYWRkKGZpZWxkSW5mbyk7CiAgICAgICAgICBmaWVsZEluZm8ucGFyZW50ID0gY2xhc3NJbmZvOwogICAgICAgICAgZm9yICh2YXIgY2xvc3VyZUluZm8gaW4gZmllbGRJbmZvLmNsb3N1cmVzKSB7CiAgICAgICAgICAgIHNpemUgKz0gY2xvc3VyZUluZm8uc2l6ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ0NsYXNzIG1lbWJlciBub3QgYSBmdW5jdGlvbiBvciBmaWVsZCcpOwogICAgICB9CiAgICB9KTsKICAgIGVudmlyb25tZW50LmZvckVhY2hDb25zdHJ1Y3RvcihjbGF6eiwgKGNvbnN0cnVjdG9yKSB7CiAgICAgIEZ1bmN0aW9uSW5mbyBmdW5jdGlvbkluZm8gPSB2aXNpdEZ1bmN0aW9uKGNvbnN0cnVjdG9yKTsKICAgICAgaWYgKGZ1bmN0aW9uSW5mbyAhPSBudWxsKSB7CiAgICAgICAgY2xhc3NJbmZvLmZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmZvKTsKICAgICAgICBmdW5jdGlvbkluZm8ucGFyZW50ID0gY2xhc3NJbmZvOwogICAgICAgIGZvciAodmFyIGNsb3N1cmVJbmZvIGluIGZ1bmN0aW9uSW5mby5jbG9zdXJlcykgewogICAgICAgICAgc2l6ZSArPSBjbG9zdXJlSW5mby5zaXplOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgY2xhc3NJbmZvLnNpemUgPSBzaXplOwoKICAgIGlmICghY29tcGlsZXIuYmFja2VuZFN0cmF0ZWd5LmVtaXR0ZXJUYXNrLm5lZWRlZENsYXNzZXMuY29udGFpbnMoY2xhenopICYmCiAgICAgICAgY2xhc3NJbmZvLmZpZWxkcy5pc0VtcHR5ICYmCiAgICAgICAgY2xhc3NJbmZvLmZ1bmN0aW9ucy5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJlc3VsdC5jbGFzc2VzLmFkZChjbGFzc0luZm8pOwogICAgcmV0dXJuIGNsYXNzSW5mbzsKICB9CgogIENsb3N1cmVJbmZvIHZpc2l0Q2xvc3VyZUNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIENsb3N1cmVJbmZvIGNsb3N1cmVJbmZvID0gbmV3IENsb3N1cmVJbmZvKAogICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSwKICAgICAgICBvdXRwdXRVbml0OiBfdW5pdEluZm9Gb3JDbGFzcyhlbGVtZW50KSwKICAgICAgICBzaXplOiBkdW1wSW5mb1Rhc2suc2l6ZU9mKGVsZW1lbnQpKTsKICAgIF9lbnRpdHlUb0luZm9bZWxlbWVudF0gPSBjbG9zdXJlSW5mbzsKCiAgICBGdW5jdGlvbkVudGl0eSBjYWxsTWV0aG9kID0gY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgLmxvb2t1cENsYXNzTWVtYmVyKGVsZW1lbnQsIElkZW50aWZpZXJzLmNhbGwpOwoKICAgIEZ1bmN0aW9uSW5mbyBmdW5jdGlvbkluZm8gPSB2aXNpdEZ1bmN0aW9uKGNhbGxNZXRob2QpOwogICAgaWYgKGZ1bmN0aW9uSW5mbyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGNsb3N1cmVJbmZvLmZ1bmN0aW9uID0gZnVuY3Rpb25JbmZvOwogICAgZnVuY3Rpb25JbmZvLnBhcmVudCA9IGNsb3N1cmVJbmZvOwoKICAgIHJlc3VsdC5jbG9zdXJlcy5hZGQoY2xvc3VyZUluZm8pOwogICAgcmV0dXJuIGNsb3N1cmVJbmZvOwogIH0KCiAgRnVuY3Rpb25JbmZvIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIGludCBzaXplID0gZHVtcEluZm9UYXNrLnNpemVPZihmdW5jdGlvbik7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBjb25zaWRlciBhZGRpbmcgYSBzbWFsbCBpbmZvIHRvIHJlcHJlc2VudCB1bnJlYWNoYWJsZQogICAgLy8gY29kZSBoZXJlLgogICAgaWYgKHNpemUgPT0gMCAmJiAhc2hvdWxkS2VlcChmdW5jdGlvbikpIHJldHVybiBudWxsOwoKICAgIC8vIFRPRE8oaGV0KTogdXNlICd0b1N0cmluZycgaW5zdGVhZCBvZiAndGV4dCc/IEl0IHdpbGwgYWRkICc9JyBmb3Igc2V0dGVycwogICAgU3RyaW5nIG5hbWUgPSBmdW5jdGlvbi5tZW1iZXJOYW1lLnRleHQ7CiAgICBpbnQga2luZDsKICAgIGlmIChmdW5jdGlvbi5pc1N0YXRpYyB8fCBmdW5jdGlvbi5pc1RvcExldmVsKSB7CiAgICAgIGtpbmQgPSBGdW5jdGlvbkluZm8uVE9QX0xFVkVMX0ZVTkNUSU9OX0tJTkQ7CiAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAga2luZCA9IEZ1bmN0aW9uSW5mby5NRVRIT0RfRlVOQ1RJT05fS0lORDsKICAgIH0KCiAgICBpZiAoZnVuY3Rpb24uaXNDb25zdHJ1Y3RvcikgewogICAgICBuYW1lID0gbmFtZSA9PSAiIgogICAgICAgICAgPyAiJHtmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcy5uYW1lfSIKICAgICAgICAgIDogIiR7ZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MubmFtZX0uJHtmdW5jdGlvbi5uYW1lfSI7CiAgICAgIGtpbmQgPSBGdW5jdGlvbkluZm8uQ09OU1RSVUNUT1JfRlVOQ1RJT05fS0lORDsKICAgIH0KCiAgICBhc3NlcnQoa2luZCAhPSBudWxsKTsKCiAgICBGdW5jdGlvbk1vZGlmaWVycyBtb2RpZmllcnMgPSBuZXcgRnVuY3Rpb25Nb2RpZmllcnMoCiAgICAgIGlzU3RhdGljOiBmdW5jdGlvbi5pc1N0YXRpYywKICAgICAgaXNDb25zdDogZnVuY3Rpb24uaXNDb25zdCwKICAgICAgaXNGYWN0b3J5OiBmdW5jdGlvbi5pc0NvbnN0cnVjdG9yCiAgICAgICAgICA/IChmdW5jdGlvbiBhcyBDb25zdHJ1Y3RvckVudGl0eSkuaXNGYWN0b3J5Q29uc3RydWN0b3IKICAgICAgICAgIDogZmFsc2UsCiAgICAgIGlzRXh0ZXJuYWw6IGZ1bmN0aW9uLmlzRXh0ZXJuYWwsCiAgICApOwogICAgTGlzdDxDb2RlU3Bhbj4gY29kZSA9IGR1bXBJbmZvVGFzay5jb2RlT2YoZnVuY3Rpb24pOwoKICAgIExpc3Q8UGFyYW1ldGVySW5mbz4gcGFyYW1ldGVycyA9IDxQYXJhbWV0ZXJJbmZvPltdOwogICAgTGlzdDxTdHJpbmc+IGluZmVycmVkUGFyYW1ldGVyVHlwZXMgPSA8U3RyaW5nPltdOwoKICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoUGFyYW1ldGVyQXNMb2NhbCgKICAgICAgICBjbG9zZWRXb3JsZC5nbG9iYWxMb2NhbHNNYXAsIGZ1bmN0aW9uLCAocGFyYW1ldGVyKSB7CiAgICAgIGluZmVycmVkUGFyYW1ldGVyVHlwZXMuYWRkKCcke19yZXN1bHRPZlBhcmFtZXRlcihwYXJhbWV0ZXIpfScpOwogICAgfSk7CiAgICBpbnQgcGFyYW1ldGVySW5kZXggPSAwOwogICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hQYXJhbWV0ZXIoZnVuY3Rpb24sICh0eXBlLCBuYW1lLCBfKSB7CiAgICAgIHBhcmFtZXRlcnMuYWRkKG5ldyBQYXJhbWV0ZXJJbmZvKAogICAgICAgICAgbmFtZSwgaW5mZXJyZWRQYXJhbWV0ZXJUeXBlc1twYXJhbWV0ZXJJbmRleCsrXSwgJyR0eXBlJykpOwogICAgfSk7CgogICAgdmFyIGZ1bmN0aW9uVHlwZSA9IGVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShmdW5jdGlvbik7CiAgICBTdHJpbmcgcmV0dXJuVHlwZSA9ICcke2Z1bmN0aW9uVHlwZS5yZXR1cm5UeXBlfSc7CgogICAgU3RyaW5nIGluZmVycmVkUmV0dXJuVHlwZSA9ICcke19yZXN1bHRPZk1lbWJlcihmdW5jdGlvbikucmV0dXJuVHlwZX0nOwogICAgU3RyaW5nIHNpZGVFZmZlY3RzID0KICAgICAgICAnJHtfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cy5pbmZlcnJlZERhdGEuZ2V0U2lkZUVmZmVjdHNPZkVsZW1lbnQoZnVuY3Rpb24pfSc7CgogICAgaW50IGlubGluZWRDb3VudCA9IGR1bXBJbmZvVGFzay5pbmxpbmVDb3VudFtmdW5jdGlvbl07CiAgICBpZiAoaW5saW5lZENvdW50ID09IG51bGwpIGlubGluZWRDb3VudCA9IDA7CgogICAgRnVuY3Rpb25JbmZvIGluZm8gPSBuZXcgRnVuY3Rpb25JbmZvKAogICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgZnVuY3Rpb25LaW5kOiBraW5kLAogICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLAogICAgICAgIHJldHVyblR5cGU6IHJldHVyblR5cGUsCiAgICAgICAgaW5mZXJyZWRSZXR1cm5UeXBlOiBpbmZlcnJlZFJldHVyblR5cGUsCiAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVycywKICAgICAgICBzaWRlRWZmZWN0czogc2lkZUVmZmVjdHMsCiAgICAgICAgaW5saW5lZENvdW50OiBpbmxpbmVkQ291bnQsCiAgICAgICAgY29kZTogY29kZSwKICAgICAgICB0eXBlOiBmdW5jdGlvblR5cGUudG9TdHJpbmcoKSwKICAgICAgICBvdXRwdXRVbml0OiBfdW5pdEluZm9Gb3JNZW1iZXIoZnVuY3Rpb24pKTsKICAgIF9lbnRpdHlUb0luZm9bZnVuY3Rpb25dID0gaW5mbzsKCiAgICBpbnQgY2xvc3VyZVNpemUgPSBfYWRkQ2xvc3VyZUluZm8oaW5mbywgZnVuY3Rpb24pOwogICAgc2l6ZSArPSBjbG9zdXJlU2l6ZTsKCiAgICBpZiAoY29tcGlsZXIub3B0aW9ucy5leHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbikgewogICAgICAvLyBXZSB1c2UgZnVuY3Rpb24uaGFzaENvZGUgYmVjYXVzZSBpdCBpcyBnbG9iYWxseSB1bmlxdWUgYW5kIGl0IGlzCiAgICAgIC8vIGF2YWlsYWJsZSB3aGlsZSB3ZSBhcmUgZG9pbmcgY29kZWdlbi4KICAgICAgaW5mby5jb3ZlcmFnZUlkID0gJyR7ZnVuY3Rpb24uaGFzaENvZGV9JzsKICAgIH0KCiAgICBpbmZvLnNpemUgPSBzaXplOwoKICAgIHJlc3VsdC5mdW5jdGlvbnMuYWRkKGluZm8pOwogICAgcmV0dXJuIGluZm87CiAgfQoKICAvLy8gQWRkcyBjbG9zdXJlIGluZm9ybWF0aW9uIHRvIFtpbmZvXSwgdXNpbmcgYWxsIG5lc3RlZCBjbG9zdXJlcyBpbiBbbWVtYmVyXS4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbmVzdGVkIGNsb3N1cmVzLCB0byBhZGQgdG8gdGhlIGluZm8gc2l6ZS4KICBpbnQgX2FkZENsb3N1cmVJbmZvKEluZm8gaW5mbywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgYXNzZXJ0KGluZm8gaXMgRnVuY3Rpb25JbmZvIHx8IGluZm8gaXMgRmllbGRJbmZvKTsKICAgIGludCBzaXplID0gMDsKICAgIExpc3Q8Q2xvc3VyZUluZm8+IG5lc3RlZENsb3N1cmVzID0gPENsb3N1cmVJbmZvPltdOwogICAgZW52aXJvbm1lbnQuZm9yRWFjaE5lc3RlZENsb3N1cmUobWVtYmVyLCAoY2xvc3VyZSkgewogICAgICBDbG9zdXJlSW5mbyBjbG9zdXJlSW5mbyA9IHZpc2l0Q2xvc3VyZUNsYXNzKGNsb3N1cmUuZW5jbG9zaW5nQ2xhc3MpOwogICAgICBpZiAoY2xvc3VyZUluZm8gIT0gbnVsbCkgewogICAgICAgIGNsb3N1cmVJbmZvLnBhcmVudCA9IGluZm87CiAgICAgICAgbmVzdGVkQ2xvc3VyZXMuYWRkKGNsb3N1cmVJbmZvKTsKICAgICAgICBzaXplICs9IGNsb3N1cmVJbmZvLnNpemU7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGluZm8gaXMgRnVuY3Rpb25JbmZvKSBpbmZvLmNsb3N1cmVzID0gbmVzdGVkQ2xvc3VyZXM7CiAgICBpZiAoaW5mbyBpcyBGaWVsZEluZm8pIGluZm8uY2xvc3VyZXMgPSBuZXN0ZWRDbG9zdXJlczsKCiAgICByZXR1cm4gc2l6ZTsKICB9CgogIE91dHB1dFVuaXRJbmZvIF9pbmZvRnJvbU91dHB1dFVuaXQoT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICByZXR1cm4gX291dHB1dFRvSW5mby5wdXRJZkFic2VudChvdXRwdXRVbml0LCAoKSB7CiAgICAgIC8vIER1bXAtaW5mbyBjdXJyZW50bHkgb25seSB3b3JrcyB3aXRoIHRoZSBmdWxsIGVtaXR0ZXIuIElmIGFub3RoZXIKICAgICAgLy8gZW1pdHRlciBpcyB1c2VkIGl0IHdpbGwgZmFpbCBoZXJlLgogICAgICBCYWNrZW5kU3RyYXRlZ3kgYmFja2VuZFN0cmF0ZWd5ID0gY29tcGlsZXIuYmFja2VuZFN0cmF0ZWd5OwogICAgICBhc3NlcnQob3V0cHV0VW5pdC5uYW1lICE9IG51bGwgfHwgb3V0cHV0VW5pdC5pc01haW5PdXRwdXQpOwogICAgICB2YXIgZmlsZW5hbWUgPSBvdXRwdXRVbml0LmlzTWFpbk91dHB1dAogICAgICAgICAgPyBjb21waWxlci5vcHRpb25zLm91dHB1dFVyaS5wYXRoU2VnbWVudHMubGFzdAogICAgICAgICAgOiBkZWZlcnJlZFBhcnRGaWxlTmFtZShjb21waWxlci5vcHRpb25zLCBvdXRwdXRVbml0Lm5hbWUpOwogICAgICBPdXRwdXRVbml0SW5mbyBpbmZvID0gbmV3IE91dHB1dFVuaXRJbmZvKGZpbGVuYW1lLCBvdXRwdXRVbml0Lm5hbWUsCiAgICAgICAgICBiYWNrZW5kU3RyYXRlZ3kuZW1pdHRlclRhc2suZW1pdHRlci5nZW5lcmF0ZWRTaXplKG91dHB1dFVuaXQpKTsKICAgICAgaW5mby5pbXBvcnRzCiAgICAgICAgICAuYWRkQWxsKGNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhLmdldEltcG9ydE5hbWVzKG91dHB1dFVuaXQpKTsKICAgICAgcmVzdWx0Lm91dHB1dFVuaXRzLmFkZChpbmZvKTsKICAgICAgcmV0dXJuIGluZm87CiAgICB9KTsKICB9CgogIE91dHB1dFVuaXRJbmZvIF91bml0SW5mb0Zvck1lbWJlcihNZW1iZXJFbnRpdHkgZW50aXR5KSB7CiAgICByZXR1cm4gX2luZm9Gcm9tT3V0cHV0VW5pdCgKICAgICAgICBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yTWVtYmVyKGVudGl0eSkpOwogIH0KCiAgT3V0cHV0VW5pdEluZm8gX3VuaXRJbmZvRm9yQ2xhc3MoQ2xhc3NFbnRpdHkgZW50aXR5KSB7CiAgICByZXR1cm4gX2luZm9Gcm9tT3V0cHV0VW5pdCgKICAgICAgICBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yQ2xhc3MoZW50aXR5LCBhbGxvd051bGw6IHRydWUpKTsKICB9CgogIE91dHB1dFVuaXRJbmZvIF91bml0SW5mb0ZvckNvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdCA9CiAgICAgICAgY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvckNvbnN0YW50KGNvbnN0YW50KTsKICAgIGlmIChvdXRwdXRVbml0ID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGNvbnN0YW50IGlzIEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIF9pbmZvRnJvbU91dHB1dFVuaXQob3V0cHV0VW5pdCk7CiAgfQp9CgpjbGFzcyBTZWxlY3Rpb24gewogIGZpbmFsIEVudGl0eSBzZWxlY3RlZEVudGl0eTsKICBmaW5hbCBPYmplY3QgcmVjZWl2ZXJDb25zdHJhaW50OwogIFNlbGVjdGlvbih0aGlzLnNlbGVjdGVkRW50aXR5LCB0aGlzLnJlY2VpdmVyQ29uc3RyYWludCk7Cn0KCi8vLyBJbnRlcmZhY2UgdXNlZCB0byByZWNvcmQgaW5mb3JtYXRpb24gZnJvbSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGNvbXBpbGVyIHNvCi8vLyB3ZSBjYW4gZW1pdCB0aGVtIGluIHRoZSBkdW1wLWluZm8gdGFzay4KLy8gVE9ETyhzaWdtdW5kLGhldCk6IG1vdmUgbW9yZSBmZWF0dXJlcyBoZXJlLiBJZGVhbGx5IHRoZSBkdW1wLWluZm8gdGFzawovLyBzaG91bGRuJ3QgcmVhY2ggaW50byBpbnRlcm5hbHMgb2Ygb3RoZXIgcGFydHMgb2YgdGhlIGNvbXBpbGVyLiBGb3IgZXhhbXBsZSwKLy8gd2UgY3VycmVudGx5IHJlYWNoIGludG8gdGhlIGZ1bGwgZW1pdHRlciBhbmQgYXMgYSByZXN1bHQgd2UgZG9uJ3Qgc3VwcG9ydAovLyBkdW1wLWluZm8gd2hlbiB1c2luZyB0aGUgc3RhcnR1cC1lbWl0dGVyIChpc3N1ZSAjMjQxOTApLgphYnN0cmFjdCBjbGFzcyBJbmZvUmVwb3J0ZXIgewogIHZvaWQgcmVwb3J0SW5saW5lZChGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBNZW1iZXJFbnRpdHkgaW5saW5lZEZyb20pOwp9CgpjbGFzcyBEdW1wSW5mb1Rhc2sgZXh0ZW5kcyBDb21waWxlclRhc2sgaW1wbGVtZW50cyBJbmZvUmVwb3J0ZXIgewogIHN0YXRpYyBjb25zdCBJbXBhY3RVc2VDYXNlIElNUEFDVF9VU0UgPSBjb25zdCBJbXBhY3RVc2VDYXNlKCdEdW1wIGluZm8nKTsKICBmaW5hbCBDb21waWxlciBjb21waWxlcjsKICBmaW5hbCBib29sIHVzZUJpbmFyeUZvcm1hdDsKCiAgRHVtcEluZm9UYXNrKHRoaXMuY29tcGlsZXIpCiAgICAgIDogdXNlQmluYXJ5Rm9ybWF0ID0gY29tcGlsZXIub3B0aW9ucy51c2VEdW1wSW5mb0JpbmFyeUZvcm1hdCwKICAgICAgICBzdXBlcihjb21waWxlci5tZWFzdXJlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAiRHVtcCBJbmZvIjsKCiAgRWxlbWVudEluZm9Db2xsZWN0b3IgaW5mb0NvbGxlY3RvcjsKCiAgLy8vIFRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LgogIGludCBfcHJvZ3JhbVNpemU7CgogIC8vLyBEYXRhIGFzc29jaWF0ZWQgd2l0aCBqYXZhc2NyaXB0IEFTVCBub2Rlcy4gVGhlIG1hcCBvbmx5IGNvbnRhaW5zIGtleXMgZm9yCiAgLy8vIG5vZGVzIHRoYXQgd2UgY2FyZSBhYm91dC4gIEtleXMgYXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbgogIC8vLyBbcmVnaXN0ZXJFbnRpdHlBc3RdIGlzIGNhbGxlZC4KICBmaW5hbCBNYXA8anNBc3QuTm9kZSwgQ29kZVNwYW4+IF9ub2RlRGF0YSA9IDxqc0FzdC5Ob2RlLCBDb2RlU3Bhbj57fTsKCiAgLy8gQSBtYXBwaW5nIGZyb20gRGFydCBFbnRpdGllcyB0byBKYXZhc2NyaXB0IEFTVCBOb2Rlcy4KICBmaW5hbCBNYXA8RW50aXR5LCBMaXN0PGpzQXN0Lk5vZGU+PiBfZW50aXR5VG9Ob2RlcyA9CiAgICAgIDxFbnRpdHksIExpc3Q8anNBc3QuTm9kZT4+e307CiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIGpzQXN0Lk5vZGU+IF9jb25zdGFudFRvTm9kZSA9CiAgICAgIDxDb25zdGFudFZhbHVlLCBqc0FzdC5Ob2RlPnt9OwoKICBmaW5hbCBNYXA8RW50aXR5LCBpbnQ+IGlubGluZUNvdW50ID0gPEVudGl0eSwgaW50Pnt9OwoKICAvLyBBIG1hcHBpbmcgZnJvbSBhbiBlbnRpdHkgdG8gYSBsaXN0IG9mIGVudGl0aWVzIHRoYXQgYXJlCiAgLy8gaW5saW5lZCBpbnNpZGUgb2YgaXQuCiAgZmluYWwgTWFwPEVudGl0eSwgTGlzdDxFbnRpdHk+PiBpbmxpbmVNYXAgPSA8RW50aXR5LCBMaXN0PEVudGl0eT4+e307CgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIFdvcmxkSW1wYWN0PiBpbXBhY3RzID0gPE1lbWJlckVudGl0eSwgV29ybGRJbXBhY3Q+e307CgogIC8vLyBSZWdpc3RlciB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIG91dHB1dC4KICB2b2lkIHJlcG9ydFNpemUoaW50IHByb2dyYW1TaXplKSB7CiAgICBfcHJvZ3JhbVNpemUgPSBwcm9ncmFtU2l6ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0SW5saW5lZChGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBNZW1iZXJFbnRpdHkgaW5saW5lZEZyb20pIHsKICAgIGlubGluZUNvdW50LnB1dElmQWJzZW50KGVsZW1lbnQsICgpID0+IDApOwogICAgaW5saW5lQ291bnRbZWxlbWVudF0gKz0gMTsKICAgIGlubGluZU1hcC5wdXRJZkFic2VudChpbmxpbmVkRnJvbSwgKCkgPT4gbmV3IExpc3Q8RW50aXR5PigpKTsKICAgIGlubGluZU1hcFtpbmxpbmVkRnJvbV0uYWRkKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZWdpc3RlckltcGFjdChNZW1iZXJFbnRpdHkgbWVtYmVyLCBXb3JsZEltcGFjdCBpbXBhY3QpIHsKICAgIGlmIChjb21waWxlci5vcHRpb25zLmR1bXBJbmZvKSB7CiAgICAgIGltcGFjdHNbbWVtYmVyXSA9IGltcGFjdDsKICAgIH0KICB9CgogIHZvaWQgdW5yZWdpc3RlckltcGFjdCh2YXIgaW1wYWN0U291cmNlKSB7CiAgICBpbXBhY3RzLnJlbW92ZShpbXBhY3RTb3VyY2UpOwogIH0KCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb2YgW1NlbGVjdGlvbl1zIHRoYXQgYXJlIHVzZWQgYnkgW2VudGl0eV0uIEVhY2gKICAvLy8gW1NlbGVjdGlvbl0gY29udGFpbnMgYW4gZW50aXR5IHRoYXQgaXMgdXNlZCBhbmQgdGhlIHNlbGVjdG9yIHRoYXQKICAvLy8gc2VsZWN0ZWQgdGhlIGVudGl0eS4KICBJdGVyYWJsZTxTZWxlY3Rpb24+IGdldFJldGFpbmluZyhFbnRpdHkgZW50aXR5LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFdvcmxkSW1wYWN0IGltcGFjdCA9IGltcGFjdHNbZW50aXR5XTsKICAgIGlmIChpbXBhY3QgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxTZWxlY3Rpb24+W107CgogICAgdmFyIHNlbGVjdGlvbnMgPSA8U2VsZWN0aW9uPltdOwogICAgY29tcGlsZXIuaW1wYWN0U3RyYXRlZ3kudmlzaXRJbXBhY3QoCiAgICAgICAgZW50aXR5LAogICAgICAgIGltcGFjdCwKICAgICAgICBuZXcgV29ybGRJbXBhY3RWaXNpdG9ySW1wbCh2aXNpdER5bmFtaWNVc2U6IChtZW1iZXIsIGR5bmFtaWNVc2UpIHsKICAgICAgICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IGR5bmFtaWNVc2UucmVjZWl2ZXJDb25zdHJhaW50OwogICAgICAgICAgc2VsZWN0aW9ucy5hZGRBbGwoY2xvc2VkV29ybGQKICAgICAgICAgICAgICAvLyBUT0RPKGhldCk6IEhhbmRsZSBgY2FsbGAgb24gYENsb3N1cmVgIHRocm91Z2gKICAgICAgICAgICAgICAvLyBgd29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbGAuCiAgICAgICAgICAgICAgLmxvY2F0ZU1lbWJlcnMoZHluYW1pY1VzZS5zZWxlY3RvciwgbWFzaykKICAgICAgICAgICAgICAubWFwKChNZW1iZXJFbnRpdHkgZSkgPT4gbmV3IFNlbGVjdGlvbihlLCBtYXNrKSkpOwogICAgICAgIH0sIHZpc2l0U3RhdGljVXNlOiAobWVtYmVyLCBzdGF0aWNVc2UpIHsKICAgICAgICAgIHNlbGVjdGlvbnMuYWRkKG5ldyBTZWxlY3Rpb24oc3RhdGljVXNlLmVsZW1lbnQsIG51bGwpKTsKICAgICAgICB9KSwKICAgICAgICBJTVBBQ1RfVVNFKTsKICAgIHJldHVybiBzZWxlY3Rpb25zOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGF0IGEgamF2YXNjcmlwdCBBU1Qgbm9kZSBbY29kZV0gd2FzIHByb2R1Y2VkIGJ5IHRoZSBkYXJ0CiAgLy8vIEVudGl0eSBbZW50aXR5XS4KICB2b2lkIHJlZ2lzdGVyRW50aXR5QXN0KEVudGl0eSBlbnRpdHksIGpzQXN0Lk5vZGUgY29kZSwKICAgICAge0xpYnJhcnlFbnRpdHkgbGlicmFyeX0pIHsKICAgIGlmIChjb21waWxlci5vcHRpb25zLmR1bXBJbmZvKSB7CiAgICAgIF9lbnRpdHlUb05vZGVzCiAgICAgICAgICAucHV0SWZBYnNlbnQoZW50aXR5LCAoKSA9PiBuZXcgTGlzdDxqc0FzdC5Ob2RlPigpKQogICAgICAgICAgLmFkZChjb2RlKTsKICAgICAgX25vZGVEYXRhW2NvZGVdID8/PSB1c2VCaW5hcnlGb3JtYXQgPyBuZXcgQ29kZVNwYW4oKSA6IG5ldyBfQ29kZURhdGEoKTsKICAgIH0KICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdGFudEFzdChDb25zdGFudFZhbHVlIGNvbnN0YW50LCBqc0FzdC5Ob2RlIGNvZGUpIHsKICAgIGlmIChjb21waWxlci5vcHRpb25zLmR1bXBJbmZvKSB7CiAgICAgIGFzc2VydChfY29uc3RhbnRUb05vZGVbY29uc3RhbnRdID09IG51bGwgfHwKICAgICAgICAgIF9jb25zdGFudFRvTm9kZVtjb25zdGFudF0gPT0gY29kZSk7CiAgICAgIF9jb25zdGFudFRvTm9kZVtjb25zdGFudF0gPSBjb2RlOwogICAgICBfbm9kZURhdGFbY29kZV0gPz89IHVzZUJpbmFyeUZvcm1hdCA/IG5ldyBDb2RlU3BhbigpIDogbmV3IF9Db2RlRGF0YSgpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgc2hvdWxkRW1pdFRleHQgPT4gIXVzZUJpbmFyeUZvcm1hdDsKICAvLyBUT0RPKHNpZ211bmQpOiBkZWxldGUgdGhlIHN0YWNrIG9uY2Ugd2Ugc3RvcCBlbWl0dGluZyB0aGUgc291cmNlIHRleHQuCiAgTGlzdDxfQ29kZURhdGE+IF9zdGFjayA9IFtdOwogIHZvaWQgZW50ZXJOb2RlKGpzQXN0Lk5vZGUgbm9kZSwgaW50IHN0YXJ0KSB7CiAgICB2YXIgZGF0YSA9IF9ub2RlRGF0YVtub2RlXTsKICAgIGRhdGE/LnN0YXJ0ID0gc3RhcnQ7CgogICAgaWYgKHNob3VsZEVtaXRUZXh0ICYmIGRhdGEgIT0gbnVsbCkgewogICAgICBfc3RhY2suYWRkKGRhdGEpOwogICAgfQogIH0KCiAgdm9pZCBlbWl0KFN0cmluZyBzdHJpbmcpIHsKICAgIGlmIChzaG91bGRFbWl0VGV4dCkgewogICAgICAvLyBOb3RlOiBoaXN0b3JpY2FsbHkgd2UgZW1pdHRlZCB0aGUgZnVsbCBib2R5IG9mIGNsYXNzZXMgYW5kIG1ldGhvZHMsIHNvCiAgICAgIC8vIGluc3RhbmNlIG1ldGhvZHMgZW5kZWQgdXAgZW1pdHRlZCB0d2ljZS4gIE9uY2Ugd2UgdXNlIGEgZGlmZmVyZW50CiAgICAgIC8vIGVuY29kaW5nIG9mIGR1bXAgaW5mbywgd2UgYWxzbyBwbGFuIHRvIHJlbW92ZSB0aGlzIGR1cGxpY2F0aW9uLgogICAgICBfc3RhY2suZm9yRWFjaCgoZikgPT4gZi5fdGV4dC53cml0ZShzdHJpbmcpKTsKICAgIH0KICB9CgogIHZvaWQgZXhpdE5vZGUoanNBc3QuTm9kZSBub2RlLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBjbG9zaW5nKSB7CiAgICB2YXIgZGF0YSA9IF9ub2RlRGF0YVtub2RlXTsKICAgIGRhdGE/LmVuZCA9IGVuZDsKICAgIGlmIChzaG91bGRFbWl0VGV4dCAmJiBkYXRhICE9IG51bGwpIHsKICAgICAgdmFyIGxhc3QgPSBfc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICBhc3NlcnQoZGF0YSA9PSBsYXN0KTsKICAgICAgYXNzZXJ0KGRhdGEuc3RhcnQgPT0gc3RhcnQpOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHNvdXJjZSBjb2RlIHRoYXQgd2FzIGdlbmVyYXRlZCBmb3IgYW4gZW50aXR5LgogIC8vLyBJZiBubyBzb3VyY2UgY29kZSB3YXMgcHJvZHVjZWQsIHJldHVybiAwLgogIGludCBzaXplT2YoRW50aXR5IGVudGl0eSkgewogICAgaWYgKF9lbnRpdHlUb05vZGVzLmNvbnRhaW5zS2V5KGVudGl0eSkpIHsKICAgICAgcmV0dXJuIF9lbnRpdHlUb05vZGVzW2VudGl0eV0ubWFwKHNpemVPZk5vZGUpLmZvbGQoMCwgKGEsIGIpID0+IGEgKyBiKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgaW50IHNpemVPZk5vZGUoanNBc3QuTm9kZSBub2RlKSB7CiAgICBDb2RlU3BhbiBzcGFuID0gX25vZGVEYXRhW25vZGVdOwogICAgaWYgKHNwYW4gPT0gbnVsbCkgcmV0dXJuIDA7CiAgICByZXR1cm4gc3Bhbi5lbmQgLSBzcGFuLnN0YXJ0OwogIH0KCiAgTGlzdDxDb2RlU3Bhbj4gY29kZU9mKE1lbWJlckVudGl0eSBlbnRpdHkpIHsKICAgIExpc3Q8anNBc3QuTm9kZT4gY29kZSA9IF9lbnRpdHlUb05vZGVzW2VudGl0eV07CiAgICBpZiAoY29kZSA9PSBudWxsKSByZXR1cm4gY29uc3QgW107CiAgICByZXR1cm4gY29kZS5tYXAoKGFzdCkgPT4gX25vZGVEYXRhW2FzdF0pLnRvTGlzdCgpOwogIH0KCiAgdm9pZCBkdW1wSW5mbyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMpIHsKICAgIG1lYXN1cmUoKCkgewogICAgICBpbmZvQ29sbGVjdG9yID0gbmV3IEVsZW1lbnRJbmZvQ29sbGVjdG9yKAogICAgICAgICAgY29tcGlsZXIsIHRoaXMsIGNsb3NlZFdvcmxkLCBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKQogICAgICAgIC4ucnVuKCk7CgogICAgICB2YXIgYWxsSW5mbyA9IGJ1aWxkRHVtcEluZm9EYXRhKGNsb3NlZFdvcmxkKTsKICAgICAgaWYgKHVzZUJpbmFyeUZvcm1hdCkgewogICAgICAgIGR1bXBJbmZvQmluYXJ5KGFsbEluZm8pOwogICAgICB9IGVsc2UgewogICAgICAgIGR1bXBJbmZvSnNvbihhbGxJbmZvKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBJbmZvSnNvbihBbGxJbmZvIGRhdGEpIHsKICAgIFN0cmluZ0J1ZmZlciBqc29uQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgSnNvbkVuY29kZXIgZW5jb2RlciA9IGNvbnN0IEpzb25FbmNvZGVyLndpdGhJbmRlbnQoJyAgJyk7CiAgICBDaHVua2VkQ29udmVyc2lvblNpbms8T2JqZWN0PiBzaW5rID0gZW5jb2Rlci5zdGFydENodW5rZWRDb252ZXJzaW9uKAogICAgICAgIG5ldyBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tU3RyaW5nU2luayhqc29uQnVmZmVyKSk7CiAgICBzaW5rLmFkZChuZXcgQWxsSW5mb0pzb25Db2RlYyhpc0JhY2t3YXJkQ29tcGF0aWJsZTogdHJ1ZSkuZW5jb2RlKGRhdGEpKTsKICAgIGNvbXBpbGVyLm91dHB1dFByb3ZpZGVyLmNyZWF0ZU91dHB1dFNpbmsoCiAgICAgICAgY29tcGlsZXIub3B0aW9ucy5vdXRwdXRVcmkucGF0aFNlZ21lbnRzLmxhc3QsCiAgICAgICAgJ2luZm8uanNvbicsCiAgICAgICAgT3V0cHV0VHlwZS5kdW1wSW5mbykKICAgICAgLi5hZGQoanNvbkJ1ZmZlci50b1N0cmluZygpKQogICAgICAuLmNsb3NlKCk7CiAgICBjb21waWxlci5yZXBvcnRlci5yZXBvcnRJbmZvKE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAndGV4dCc6ICJWaWV3IHRoZSBkdW1wZWQgLmluZm8uanNvbiBmaWxlIGF0ICIKICAgICAgICAgICJodHRwczovL2RhcnQtbGFuZy5naXRodWIuaW8vZHVtcC1pbmZvLXZpc3VhbGl6ZXIiCiAgICB9KTsKICB9CgogIHZvaWQgZHVtcEluZm9CaW5hcnkoQWxsSW5mbyBkYXRhKSB7CiAgICB2YXIgbmFtZSA9IGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0VXJpLnBhdGhTZWdtZW50cy5sYXN0ICsgIi5pbmZvLmRhdGEiOwogICAgU2luazxMaXN0PGludD4+IHNpbmsgPSBuZXcgQmluYXJ5T3V0cHV0U2lua0FkYXB0ZXIoY29tcGlsZXIub3V0cHV0UHJvdmlkZXIKICAgICAgICAuY3JlYXRlQmluYXJ5U2luayhjb21waWxlci5vcHRpb25zLm91dHB1dFVyaS5yZXNvbHZlKG5hbWUpKSk7CiAgICBkdW1wX2luZm8uZW5jb2RlKGRhdGEsIHNpbmspOwogICAgY29tcGlsZXIucmVwb3J0ZXIucmVwb3J0SW5mbyhOT19MT0NBVElPTl9TUEFOTkFCTEUsIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsKICAgICAgJ3RleHQnOiAiVXNlIGBwYWNrYWdlOmRhcnQyanNfaW5mb2AgdG8gcGFyc2UgYW5kIHByb2Nlc3MgdGhlIGR1bXBlZCAiCiAgICAgICAgICAiLmluZm8uZGF0YSBmaWxlLiIKICAgIH0pOwogIH0KCiAgQWxsSW5mbyBidWlsZER1bXBJbmZvRGF0YShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFN0b3B3YXRjaCBzdG9wd2F0Y2ggPSBuZXcgU3RvcHdhdGNoKCk7CiAgICBzdG9wd2F0Y2guc3RhcnQoKTsKCiAgICBBbGxJbmZvIHJlc3VsdCA9IGluZm9Db2xsZWN0b3IucmVzdWx0OwoKICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIGxpbmtzIHRvIGZ1bmN0aW9uIHVzZXMKICAgIEl0ZXJhYmxlPEVudGl0eT4gZnVuY3Rpb25FbnRpdGllcyA9CiAgICAgICAgaW5mb0NvbGxlY3Rvci5fZW50aXR5VG9JbmZvLmtleXMud2hlcmUoKGspID0+IGsgaXMgRnVuY3Rpb25FbnRpdHkpOwogICAgZm9yIChGdW5jdGlvbkVudGl0eSBlbnRpdHkgaW4gZnVuY3Rpb25FbnRpdGllcykgewogICAgICBGdW5jdGlvbkluZm8gaW5mbyA9IGluZm9Db2xsZWN0b3IuX2VudGl0eVRvSW5mb1tlbnRpdHldOwogICAgICBJdGVyYWJsZTxTZWxlY3Rpb24+IHVzZXMgPSBnZXRSZXRhaW5pbmcoZW50aXR5LCBjbG9zZWRXb3JsZCk7CiAgICAgIC8vIERvbid0IGJvdGhlciByZWNvcmRpbmcgYW4gZW1wdHkgbGlzdCBvZiBkZXBlbmRlbmNpZXMuCiAgICAgIGZvciAoU2VsZWN0aW9uIHNlbGVjdGlvbiBpbiB1c2VzKSB7CiAgICAgICAgLy8gRG9uJ3QgcmVnaXN0ZXIgZGFydDJqcyBidWlsdGluIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgcmVjb3JkZWQuCiAgICAgICAgSW5mbyB1c2VJbmZvID0gaW5mb0NvbGxlY3Rvci5fZW50aXR5VG9JbmZvW3NlbGVjdGlvbi5zZWxlY3RlZEVudGl0eV07CiAgICAgICAgaWYgKHVzZUluZm8gPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgaW5mby51c2VzLmFkZChuZXcgRGVwZW5kZW5jeUluZm8oCiAgICAgICAgICAgIHVzZUluZm8sIHNlbGVjdGlvbi5yZWNlaXZlckNvbnN0cmFpbnQ/LnRvU3RyaW5nKCkpKTsKICAgICAgfQogICAgfQoKICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIGxpbmtzIHRvIGZpZWxkIHVzZXMKICAgIEl0ZXJhYmxlPEVudGl0eT4gZmllbGRFbnRpdHkgPQogICAgICAgIGluZm9Db2xsZWN0b3IuX2VudGl0eVRvSW5mby5rZXlzLndoZXJlKChrKSA9PiBrIGlzIEZpZWxkRW50aXR5KTsKICAgIGZvciAoRmllbGRFbnRpdHkgZW50aXR5IGluIGZpZWxkRW50aXR5KSB7CiAgICAgIEZpZWxkSW5mbyBpbmZvID0gaW5mb0NvbGxlY3Rvci5fZW50aXR5VG9JbmZvW2VudGl0eV07CiAgICAgIEl0ZXJhYmxlPFNlbGVjdGlvbj4gdXNlcyA9IGdldFJldGFpbmluZyhlbnRpdHksIGNsb3NlZFdvcmxkKTsKICAgICAgLy8gRG9uJ3QgYm90aGVyIHJlY29yZGluZyBhbiBlbXB0eSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KICAgICAgZm9yIChTZWxlY3Rpb24gc2VsZWN0aW9uIGluIHVzZXMpIHsKICAgICAgICBJbmZvIHVzZUluZm8gPSBpbmZvQ29sbGVjdG9yLl9lbnRpdHlUb0luZm9bc2VsZWN0aW9uLnNlbGVjdGVkRW50aXR5XTsKICAgICAgICBpZiAodXNlSW5mbyA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICBpbmZvLnVzZXMuYWRkKG5ldyBEZXBlbmRlbmN5SW5mbygKICAgICAgICAgICAgdXNlSW5mbywgc2VsZWN0aW9uLnJlY2VpdmVyQ29uc3RyYWludD8udG9TdHJpbmcoKSkpOwogICAgICB9CiAgICB9CgogICAgLy8gTm90aWZ5IHRoZSBpbXBhY3Qgc3RyYXRlZ3kgaW1wYWN0cyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgZHVtcCBpbmZvLgogICAgY29tcGlsZXIuaW1wYWN0U3RyYXRlZ3kub25JbXBhY3RVc2VkKElNUEFDVF9VU0UpOwoKICAgIC8vIFRyYWNrIGRlcGVuZGVuY2llcyB0aGF0IGNvbWUgZnJvbSBpbmxpbmluZy4KICAgIGZvciAoRW50aXR5IGVudGl0eSBpbiBpbmxpbmVNYXAua2V5cykgewogICAgICBDb2RlSW5mbyBvdXRlckluZm8gPSBpbmZvQ29sbGVjdG9yLl9lbnRpdHlUb0luZm9bZW50aXR5XTsKICAgICAgaWYgKG91dGVySW5mbyA9PSBudWxsKSBjb250aW51ZTsKICAgICAgZm9yIChFbnRpdHkgaW5saW5lZCBpbiBpbmxpbmVNYXBbZW50aXR5XSkgewogICAgICAgIEluZm8gaW5saW5lZEluZm8gPSBpbmZvQ29sbGVjdG9yLl9lbnRpdHlUb0luZm9baW5saW5lZF07CiAgICAgICAgaWYgKGlubGluZWRJbmZvID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIG91dGVySW5mby51c2VzLmFkZChuZXcgRGVwZW5kZW5jeUluZm8oaW5saW5lZEluZm8sICdpbmxpbmVkJykpOwogICAgICB9CiAgICB9CgogICAgcmVzdWx0LmRlZmVycmVkRmlsZXMgPSBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YQogICAgICAgIC5jb21wdXRlRGVmZXJyZWRNYXAoY29tcGlsZXIub3B0aW9ucywgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50KTsKICAgIHN0b3B3YXRjaC5zdG9wKCk7CgogICAgcmVzdWx0LnByb2dyYW0gPSBuZXcgUHJvZ3JhbUluZm8oCiAgICAgICAgZW50cnlwb2ludDogaW5mb0NvbGxlY3RvcgogICAgICAgICAgICAuX2VudGl0eVRvSW5mb1tjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQubWFpbkZ1bmN0aW9uXSwKICAgICAgICBzaXplOiBfcHJvZ3JhbVNpemUsCiAgICAgICAgZGFydDJqc1ZlcnNpb246CiAgICAgICAgICAgIGNvbXBpbGVyLm9wdGlvbnMuaGFzQnVpbGRJZCA/IGNvbXBpbGVyLm9wdGlvbnMuYnVpbGRJZCA6IG51bGwsCiAgICAgICAgY29tcGlsYXRpb25Nb21lbnQ6IG5ldyBEYXRlVGltZS5ub3coKSwKICAgICAgICBjb21waWxhdGlvbkR1cmF0aW9uOiBjb21waWxlci5tZWFzdXJlci5lbGFwc2VkV2FsbENsb2NrLAogICAgICAgIHRvSnNvbkR1cmF0aW9uOgogICAgICAgICAgICBuZXcgRHVyYXRpb24obWlsbGlzZWNvbmRzOiBzdG9wd2F0Y2guZWxhcHNlZE1pbGxpc2Vjb25kcyksCiAgICAgICAgZHVtcEluZm9EdXJhdGlvbjogbmV3IER1cmF0aW9uKG1pbGxpc2Vjb25kczogdGhpcy50aW1pbmcpLAogICAgICAgIG5vU3VjaE1ldGhvZEVuYWJsZWQ6IGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZS5pc05vU3VjaE1ldGhvZFVzZWQsCiAgICAgICAgaXNSdW50aW1lVHlwZVVzZWQ6IGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZS5pc1J1bnRpbWVUeXBlVXNlZCwKICAgICAgICBpc0lzb2xhdGVJblVzZTogZmFsc2UsCiAgICAgICAgaXNGdW5jdGlvbkFwcGx5VXNlZDogY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmlzRnVuY3Rpb25BcHBseVVzZWQsCiAgICAgICAgaXNNaXJyb3JzVXNlZDogY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmlzTWlycm9yc1VzZWQsCiAgICAgICAgbWluaWZpZWQ6IGNvbXBpbGVyLm9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uKTsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLy8vIEhlbHBlciBjbGFzcyB0byBzdG9yZSB3aGF0IGR1bXAtaW5mbyB3aWxsIHNob3cgZm9yIGEgcGllY2Ugb2YgY29kZS4KLy8gVE9ETyhzaWdtdW5kKTogZGVsZXRlIG9uY2Ugd2Ugbm8gbG9uZ2VyIGVtaXQgdGV4dCBieSBkZWZhdWx0LgpjbGFzcyBfQ29kZURhdGEgZXh0ZW5kcyBDb2RlU3BhbiB7CiAgU3RyaW5nQnVmZmVyIF90ZXh0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgdGV4dCA9PiAnJF90ZXh0JzsKICBpbnQgZ2V0IGxlbmd0aCA9PiBlbmQgLSBzdGFydDsKfQqCrwBOTjwBEwEWQwEpNEYBHyAcLhY4Jk1DIS4dRh4pLiQ9IScBHRsiPCMBSU8BKDxMPAFLJQEPPDwvIycYNygiCDEEATIGTE1MIzc2BAEwNhsdBilPHwFCRTskNCYKIzIhMSMKCAgBOC8fJSEICAE3IBEEAUUxAS80AUs+PyAoIyETBgErNgFIKwEkGjQnFC8hIVEqQgYBOkcvLQYBNCQBHREEASwnKRomLyYBKzpFOyQxKzsmDAojSiErKDgmDAoPRggIOj4iLyk5JAoICAEbAU8kJxMGASMWBAE3LxwwLSoBPzcBOyspJwEmGAQBOC5MEjkBUCwONDMyMAYBIhguQDUGARoBOSMhKEETJwc5ATg2ATw9RggcUChFCAE+NgFLGVUBOzABKhQcHiAwICIkFCczJAE3GQE6Si8wBgEWASARBAFRBk44NxI4OUshIykiCAg+OwERBAE+NkosQkItOUVKShNKJBMIBAE7IEEEATkgUQQBQBxEHjQTBiwEAgESHyM7AgFRLEpPTTweSAIBQkwbHgEeRCIBDCIBJgEoFAFQQyVIATs3JDklATgBPRtIAVABMSUgBAEMSS8fQikEAUElIAYEASwiBAFKSBtOKjQBJCkQEEs+KD8uOEExQgwVFwQBSxc5ISUVPRZOBgQBRiUyLihOBgQBL0wfLyAZASoYBgQBHRpQS0k0BgQBRCAVKiYcIwYEAUwwHi5ODRAGBAEkJSAiBAEvNCc3BAEqOxEwPxEBNB0hDx8ICAQBJDI+ST5NLjYVHSMRTzQ9CAQBJkxPRiJPTB0IBAE4KxcBKwEwKEw2P0Q/KktOJypBCAYBLSNJLjxEPypOJypBCAYBTjYBMyxAJzJBK0gIBgE2TxYBJiJJHBhLL0EYR0NKRx9LPzgBEwQCAUhBIysMHyECASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9kdW1wX2luZm8uZGFydDRzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbGVtZW50cy9lbnRpdGllcy5kYXJ0soMvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBlbnRpdGllczsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIHNob3cgQXN5bmNNb2RpZmllcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ25hbWVzLmRhcnQnOwppbXBvcnQgJ3R5cGVzLmRhcnQnOwoKLy8vIEFic3RyYWN0IGludGVyZmFjZSBmb3IgZW50aXRpZXMuCi8vLwovLy8gSW1wbGVtZW50IHRoaXMgZGlyZWN0bHkgaWYgdGhlIGVudGl0eSBpcyBub3QgYSBEYXJ0IGxhbmd1YWdlIGVudGl0eS4KLy8vIEVudGl0aWVzIGRlZmluZWQgd2l0aGluIHRoZSBEYXJ0IGxhbmd1YWdlIHNob3VsZCBpbXBsZW1lbnQgW0VsZW1lbnRdLgovLy8KLy8vIEZvciBpbnN0YW5jZSwgdGhlIEphdmFTY3JpcHQgYmFja2VuZCBuZWVkIHRvIGNyZWF0ZSBzeW50aGV0aWMgdmFyaWFibGVzIGZvcgovLy8gY2FsbGluZyBpbnRlcmNlcHRlZCBjbGFzc2VzIGFuZCBzdWNoIHZhcmlhYmxlcyBkbyBub3QgY29ycmVzcG9uZCB0byBhbgovLy8gZW50aXR5IGluIHRoZSBEYXJ0IHNvdXJjZSBjb2RlIG5vciBpbiB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIERhcnQgbGFuZ3VhZ2UKLy8vIGFuZCBzaG91bGQgdGhlcmVmb3JlIGltcGxlbWVudCBbRW50aXR5XSBkaXJlY3RseS4KYWJzdHJhY3QgY2xhc3MgRW50aXR5IGltcGxlbWVudHMgU3Bhbm5hYmxlIHsKICBTdHJpbmcgZ2V0IG5hbWU7Cn0KCi8vLyBTdHJpcHBlZCBkb3duIHN1cGVyIGludGVyZmFjZSBmb3IgbGlicmFyeSBsaWtlIGVudGl0aWVzLgovLy8KLy8vIEN1cnJlbnRseSBvbmx5IFtMaWJyYXJ5RWxlbWVudF0gYnV0IGxhdGVyIGFsc28ga2VybmVsIGJhc2VkIERhcnQgY2xhc3NlcwovLy8gYW5kL29yIERhcnQtaW4tSlMgY2xhc3Nlcy4KYWJzdHJhY3QgY2xhc3MgTGlicmFyeUVudGl0eSBleHRlbmRzIEVudGl0eSB7CiAgLy8vIFJldHVybiB0aGUgY2Fub25pY2FsIHVyaSB0aGF0IGlkZW50aWZpZXMgdGhpcyBsaWJyYXJ5LgogIFVyaSBnZXQgY2Fub25pY2FsVXJpOwp9CgovLy8gU3RyaXBwZWQgZG93biBzdXBlciBpbnRlcmZhY2UgZm9yIGltcG9ydCBlbnRpdGllcy4KLy8vCi8vLyBUaGUgW25hbWVdIHByb3BlcnR5IGNvcnJlc3BvbmRzIHRvIHRoZSBwcmVmaXggbmFtZSwgaWYgYW55LgpjbGFzcyBJbXBvcnRFbnRpdHkgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIGNhbm9uaWNhbCBVUkkgb2YgdGhlIGxpYnJhcnkgd2hlcmUgdGhpcyBpbXBvcnQgb2NjdXJzCiAgLy8vICh3aGVyZSB0aGUgaW1wb3J0IGlzIGRlY2xhcmVkKS4KICBmaW5hbCBVcmkgZW5jbG9zaW5nTGlicmFyeVVyaTsKCiAgLy8vIFdoZXRoZXIgdGhlIGltcG9ydCBpcyBhIGRlZmVycmVkIGltcG9ydC4KICBmaW5hbCBib29sIGlzRGVmZXJyZWQ7CgogIC8vLyBUaGUgdGFyZ2V0IGltcG9ydCBVUkkuCiAgZmluYWwgVXJpIHVyaTsKCiAgSW1wb3J0RW50aXR5KHRoaXMuaXNEZWZlcnJlZCwgdGhpcy5uYW1lLCB0aGlzLnVyaSwgdGhpcy5lbmNsb3NpbmdMaWJyYXJ5VXJpKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ2ltcG9ydCgkbmFtZToke2lzRGVmZXJyZWQgPyAnIGRlZmVycmVkJyA6ICcnfSknOwp9CgovLy8gU3RyaXBwZWQgZG93biBzdXBlciBpbnRlcmZhY2UgZm9yIGNsYXNzIGxpa2UgZW50aXRpZXMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW0NsYXNzRWxlbWVudF0gYnV0IGxhdGVyIGFsc28ga2VybmVsIGJhc2VkIERhcnQgY2xhc3NlcwovLy8gYW5kL29yIERhcnQtaW4tSlMgY2xhc3Nlcy4KYWJzdHJhY3QgY2xhc3MgQ2xhc3NFbnRpdHkgZXh0ZW5kcyBFbnRpdHkgewogIC8vLyBJZiB0aGlzIGlzIGEgbm9ybWFsIGNsYXNzLCB0aGUgZW5jbG9zaW5nIGxpYnJhcnkgZm9yIHRoaXMgY2xhc3MuIElmIHRoaXMKICAvLy8gaXMgYSBjbG9zdXJlIGNsYXNzLCB0aGUgZW5jbG9zaW5nIGNsYXNzIG9mIHRoZSBjbG9zdXJlIGZvciB3aGljaCBpdCB3YXMKICAvLy8gY3JlYXRlZC4KICBMaWJyYXJ5RW50aXR5IGdldCBsaWJyYXJ5OwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgc3ludGhlc2l6ZWQgY2xhc3MgZm9yIGEgY2xvc3VyaXplZCBtZXRob2Qgb3IgbG9jYWwKICAvLy8gZnVuY3Rpb24uCiAgYm9vbCBnZXQgaXNDbG9zdXJlOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLgogIGJvb2wgZ2V0IGlzQWJzdHJhY3Q7Cn0KCmFic3RyYWN0IGNsYXNzIFR5cGVkZWZFbnRpdHkgZXh0ZW5kcyBFbnRpdHkgewogIC8vLyBUaGUgbGlicmFyeSBpbiB3aGljaCB0aGUgdHlwZWRlZiB3YXMgZGVjbGFyZWQuCiAgTGlicmFyeUVudGl0eSBnZXQgbGlicmFyeTsKfQoKYWJzdHJhY3QgY2xhc3MgVHlwZVZhcmlhYmxlRW50aXR5IGV4dGVuZHMgRW50aXR5IHsKICAvLy8gVGhlIGNsYXNzIG9yIGdlbmVyaWMgbWV0aG9kIHRoYXQgZGVjbGFyZWQgdGhpcyB0eXBlIHZhcmlhYmxlLgogIEVudGl0eSBnZXQgdHlwZURlY2xhcmF0aW9uOwoKICAvLy8gVGhlIGluZGV4IG9mIHRoaXMgdHlwZSB2YXJpYWJsZSBpbiB0aGUgdHlwZSB2YXJpYWJsZXMgb2YgaXRzCiAgLy8vIFt0eXBlRGVjbGFyYXRpb25dLgogIGludCBnZXQgaW5kZXg7Cn0KCi8vLyBTdHJpcHBlZCBkb3duIHN1cGVyIGludGVyZmFjZSBmb3IgbWVtYmVyIGxpa2UgZW50aXRpZXMsIHRoYXQgaXMsCi8vLyBjb25zdHJ1Y3RvcnMsIG1ldGhvZHMsIGZpZWxkcyBldGMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW01lbWJlckVsZW1lbnRdIGJ1dCBsYXRlciBhbHNvIGtlcm5lbCBiYXNlZCBEYXJ0IG1lbWJlcnMKLy8vIGFuZC9vciBEYXJ0LWluLUpTIHByb3BlcnRpZXMuCmFic3RyYWN0IGNsYXNzIE1lbWJlckVudGl0eSBleHRlbmRzIEVudGl0eSB7CiAgLy8vIFRoZSBbTmFtZV0gb2YgbWVtYmVyIHdoaWNoIHRha2VzIHByaXZhY3kgYW5kIGdldHRlci9zZXR0ZXIgbmFtaW5nIGludG8KICAvLy8gYWNjb3VudC4KICBOYW1lIGdldCBtZW1iZXJOYW1lOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgbWVtYmVyIG9mIGEgbGlicmFyeS4KICBib29sIGdldCBpc1RvcExldmVsOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgc3RhdGljIG1lbWJlciBvZiBhIGNsYXNzLgogIGJvb2wgZ2V0IGlzU3RhdGljOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGFuIGluc3RhbmNlIG1lbWJlciBvZiBhIGNsYXNzLgogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXI7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBjb25zdHJ1Y3Rvci4KICBib29sIGdldCBpc0NvbnN0cnVjdG9yOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgZmllbGQuCiAgYm9vbCBnZXQgaXNGaWVsZDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBpcyBhIG5vcm1hbCBtZXRob2QgKG5laXRoZXIgY29uc3RydWN0b3IsIGdldHRlciBvciBzZXR0ZXIpCiAgLy8vIG9yIG9wZXJhdG9yIG1ldGhvZC4KICBib29sIGdldCBpc0Z1bmN0aW9uOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgZ2V0dGVyLgogIGJvb2wgZ2V0IGlzR2V0dGVyOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgc2V0dGVyLgogIGJvb2wgZ2V0IGlzU2V0dGVyOwoKICAvLy8gV2hldGhlciB0aGlzIG1lbWJlciBpcyBhc3NpZ25hYmxlLCBpLmUuIGEgbm9uLWZpbmFsLCBub24tY29uc3QgZmllbGQuCiAgYm9vbCBnZXQgaXNBc3NpZ25hYmxlOwoKICAvLy8gV2hldGhlciB0aGlzIG1lbWJlciBpcyBjb25zdGFudCwgaS5lLiBhIGNvbnN0YW50IGZpZWxkIG9yIGNvbnN0cnVjdG9yLgogIGJvb2wgZ2V0IGlzQ29uc3Q7CgogIC8vLyBXaGV0aGVyIHRoaXMgbWVtYmVyIGlzIGFic3RyYWN0LCBpLmUuIGFuIGFic3RyYWN0IG1ldGhvZCwgZ2V0dGVyIG9yCiAgLy8vIHNldHRlci4KICBib29sIGdldCBpc0Fic3RyYWN0OwoKICAvLy8gVGhlIGVuY2xvc2luZyBjbGFzcyBpZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIGluc3RhbmNlIG1lbWJlciBvcgogIC8vLyBzdGF0aWMgbWVtYmVyIG9mIGEgY2xhc3MuCiAgQ2xhc3NFbnRpdHkgZ2V0IGVuY2xvc2luZ0NsYXNzOwoKICAvLy8gVGhlIGVuY2xvc2luZyBsaWJyYXJ5IGlmIHRoaXMgaXMgYSBsaWJyYXJ5IG1lbWJlciwgb3RoZXJ3aXNlIHRoZQogIC8vLyBlbmNsb3NpbmcgbGlicmFyeSBvZiB0aGUgW2VuY2xvc2luZ0NsYXNzXS4KICBMaWJyYXJ5RW50aXR5IGdldCBsaWJyYXJ5Owp9CgovLy8gU3RyaXBwZWQgZG93biBzdXBlciBpbnRlcmZhY2UgZm9yIGZpZWxkIGxpa2UgZW50aXRpZXMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW0ZpZWxkRWxlbWVudF0gYnV0IGxhdGVyIGFsc28ga2VybmVsIGJhc2VkIERhcnQgZmllbGRzCi8vLyBhbmQvb3IgRGFydC1pbi1KUyBmaWVsZC1saWtlIHByb3BlcnRpZXMuCmFic3RyYWN0IGNsYXNzIEZpZWxkRW50aXR5IGV4dGVuZHMgTWVtYmVyRW50aXR5IHt9CgovLy8gU3RyaXBwZWQgZG93biBzdXBlciBpbnRlcmZhY2UgZm9yIGZ1bmN0aW9uIGxpa2UgZW50aXRpZXMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW01ldGhvZEVsZW1lbnRdIGJ1dCBsYXRlciBhbHNvIGtlcm5lbCBiYXNlZCBEYXJ0IGNvbnN0cnVjdG9ycwovLy8gYW5kIG1ldGhvZHMgYW5kL29yIERhcnQtaW4tSlMgZnVuY3Rpb24tbGlrZSBwcm9wZXJ0aWVzLgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkVudGl0eSBleHRlbmRzIE1lbWJlckVudGl0eSB7CiAgLy8vIFdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBleHRlcm5hbCwgaS5lLiB0aGUgYm9keSBpcyBub3QgZGVmaW5lZCBpbiB0ZXJtcwogIC8vLyBvZiBEYXJ0IGNvZGUuCiAgYm9vbCBnZXQgaXNFeHRlcm5hbDsKCiAgLy8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCiAgUGFyYW1ldGVyU3RydWN0dXJlIGdldCBwYXJhbWV0ZXJTdHJ1Y3R1cmU7CgogIC8vLyBUaGUgc3luY2hyb25vdXMvYXN5bmNocm9ub3VzIG1hcmtlciBvbiB0aGlzIGZ1bmN0aW9uLgogIEFzeW5jTWFya2VyIGdldCBhc3luY01hcmtlcjsKfQoKLy8vIEVudW0gZm9yIHRoZSBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMgZnVuY3Rpb24gYm9keSBtb2RpZmllcnMuCmNsYXNzIEFzeW5jTWFya2VyIHsKICAvLy8gVGhlIGRlZmF1bHQgZnVuY3Rpb24gYm9keSBtYXJrZXIuCiAgc3RhdGljIGNvbnN0IEFzeW5jTWFya2VyIFNZTkMgPSBjb25zdCBBc3luY01hcmtlci5fKEFzeW5jTW9kaWZpZXIuU3luYyk7CgogIC8vLyBUaGUgYHN5bmMqYCBmdW5jdGlvbiBib2R5IG1hcmtlci4KICBzdGF0aWMgY29uc3QgQXN5bmNNYXJrZXIgU1lOQ19TVEFSID0KICAgICAgY29uc3QgQXN5bmNNYXJrZXIuXyhBc3luY01vZGlmaWVyLlN5bmNTdGFyLCBpc1lpZWxkaW5nOiB0cnVlKTsKCiAgLy8vIFRoZSBgYXN5bmNgIGZ1bmN0aW9uIGJvZHkgbWFya2VyLgogIHN0YXRpYyBjb25zdCBBc3luY01hcmtlciBBU1lOQyA9CiAgICAgIGNvbnN0IEFzeW5jTWFya2VyLl8oQXN5bmNNb2RpZmllci5Bc3luYywgaXNBc3luYzogdHJ1ZSk7CgogIC8vLyBUaGUgYGFzeW5jKmAgZnVuY3Rpb24gYm9keSBtYXJrZXIuCiAgc3RhdGljIGNvbnN0IEFzeW5jTWFya2VyIEFTWU5DX1NUQVIgPSBjb25zdCBBc3luY01hcmtlci5fKAogICAgICBBc3luY01vZGlmaWVyLkFzeW5jU3RhciwKICAgICAgaXNBc3luYzogdHJ1ZSwKICAgICAgaXNZaWVsZGluZzogdHJ1ZSk7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyBtYXJrZXIgZGVmaW5lcyB0aGUgZnVuY3Rpb24gYm9keSB0byBoYXZlIGFuCiAgLy8vIGFzeW5jaHJvbm91cyByZXN1bHQsIHRoYXQgaXMsIGVpdGhlciBhIFtGdXR1cmVdIG9yIGEgW1N0cmVhbV0uCiAgZmluYWwgYm9vbCBpc0FzeW5jOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgbWFya2VyIGRlZmluZXMgdGhlIGZ1bmN0aW9uIGJvZHkgdG8gaGF2ZSBhIHBsdXJhbAogIC8vLyByZXN1bHQsIHRoYXQgaXMsIGVpdGhlciBhbiBbSXRlcmFibGVdIG9yIGEgW1N0cmVhbV0uCiAgZmluYWwgYm9vbCBpc1lpZWxkaW5nOwoKICBmaW5hbCBBc3luY01vZGlmaWVyIGFzeW5jUGFyc2VyU3RhdGU7CgogIGNvbnN0IEFzeW5jTWFya2VyLl8odGhpcy5hc3luY1BhcnNlclN0YXRlLAogICAgICB7dGhpcy5pc0FzeW5jOiBmYWxzZSwgdGhpcy5pc1lpZWxkaW5nOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJyR7aXNBc3luYyA/ICdhc3luYycgOiAnc3luYyd9JHtpc1lpZWxkaW5nID8gJyonIDogJyd9JzsKICB9CgogIC8vLyBDYW5vbmljYWwgbGlzdCBvZiBtYXJrZXIgdmFsdWVzLgogIC8vLwogIC8vLyBBZGRlZCB0byBtYWtlIFtBc3luY01hcmtlcl0gZW51bS1saWtlLgogIHN0YXRpYyBjb25zdCBMaXN0PEFzeW5jTWFya2VyPiB2YWx1ZXMgPSBjb25zdCA8QXN5bmNNYXJrZXI+WwogICAgU1lOQywKICAgIFNZTkNfU1RBUiwKICAgIEFTWU5DLAogICAgQVNZTkNfU1RBUgogIF07CgogIC8vLyBJbmRleCB0byB0aGlzIG1hcmtlciB3aXRoaW4gW3ZhbHVlc10uCiAgLy8vCiAgLy8vIEFkZGVkIHRvIG1ha2UgW0FzeW5jTWFya2VyXSBlbnVtLWxpa2UuCiAgaW50IGdldCBpbmRleCA9PiB2YWx1ZXMuaW5kZXhPZih0aGlzKTsKfQoKLy8vIFN0cmlwcGVkIGRvd24gc3VwZXIgaW50ZXJmYWNlIGZvciBjb25zdHJ1Y3RvciBsaWtlIGVudGl0aWVzLgovLy8KLy8vIEN1cnJlbnRseSBvbmx5IFtDb25zdHJ1Y3RvckVsZW1lbnRdIGJ1dCBsYXRlciBhbHNvIGtlcm5lbCBiYXNlZCBEYXJ0Ci8vLyBjb25zdHJ1Y3RvcnMgYW5kL29yIERhcnQtaW4tSlMgY29uc3RydWN0b3ItbGlrZSBwcm9wZXJ0aWVzLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgZmFjdG9yeSBjb25zdHJ1Y3RvcnMgZnJvbSB0aGUgc2V0IG9mCi8vIGNvbnN0cnVjdG9ycy4KYWJzdHJhY3QgY2xhc3MgQ29uc3RydWN0b3JFbnRpdHkgZXh0ZW5kcyBGdW5jdGlvbkVudGl0eSB7CiAgLy8vIFdoZXRoZXIgdGhpcyBpcyBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IsIHBvc3NpYmx5IHJlZGlyZWN0aW5nLgogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgZmFjdG9yeSBjb25zdHJ1Y3RvciwgcG9zc2libHkgcmVkaXJlY3RpbmcuCiAgYm9vbCBnZXQgaXNGYWN0b3J5Q29uc3RydWN0b3I7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBgZnJvbUVudmlyb25tZW50YCBjb25zdCBjb25zdHJ1Y3RvciBpbiBgaW50YCwgYGJvb2xgIG9yCiAgLy8vIGBTdHJpbmdgLgogIGJvb2wgZ2V0IGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3I7Cn0KCi8vLyBUaGUgY29uc3RydWN0b3IgYm9keSBmb3IgYSBbQ29uc3RydWN0b3JFbnRpdHldLgovLy8KLy8vIFRoaXMgaXMgdXNlZCBvbmx5IGluIHRoZSBiYWNrZW5kIHRvIHNwbGl0IGVuY29kaW5nIG9mIGEgRGFydCBjb25zdHJ1Y3RvcgovLy8gaW50byB0d28gSmF2YVNjcmlwdCBmdW5jdGlvbnM7IHRoZSBjb25zdHJ1Y3RvciBhbmQgdGhlIGNvbnN0cnVjdG9yIGJvZHkuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gbW9kZWx4IGlzIHJlbW92ZWQuIENvbnN0cnVjdG9yIGJvZGllcwovLyBzaG91bGQgdGhlbiBiZSBjcmVhdGVkIGRpcmVjdGx5IHdpdGggdGhlIEotbW9kZWwuCmFic3RyYWN0IGNsYXNzIENvbnN0cnVjdG9yQm9keUVudGl0eSBleHRlbmRzIEZ1bmN0aW9uRW50aXR5IHsKICAvLy8gVGhlIGNvbnN0cnVjdG9yIGZvciB3aGljaCB0aGlzIGNvbnN0cnVjdG9yIGJvZHkgd2FzIGNyZWF0ZWQuCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IGNvbnN0cnVjdG9yOwp9CgovLy8gQW4gZW50aXR5IHRoYXQgZGVmaW5lcyBhIGxvY2FsIGVudGl0eSAobWVtb3J5IHNsb3QpIGluIGdlbmVyYXRlZCBjb2RlLgovLy8KLy8vIFBhcmFtZXRlcnMsIGxvY2FsIHZhcmlhYmxlcyBhbmQgbG9jYWwgZnVuY3Rpb25zIChjYW4pIGRlZmluZSBsb2NhbCBlbnRpdHkKLy8vIGFuZCB0aHVzIGltcGxlbWVudCBbTG9jYWxdIHRocm91Z2ggW0xvY2FsRWxlbWVudF0uIEZvciBub24tZWxlbWVudCBsb2NhbHMsCi8vLyBsaWtlIGB0aGlzYCBhbmQgYm94ZXMsIHNwZWNpYWxpemVkIFtMb2NhbF0gY2xhc3NlcyBhcmUgY3JlYXRlZC4KLy8vCi8vLyBUeXBlIHZhcmlhYmxlcyBjYW4gaW50cm9kdWNlIGxvY2FscyBpbiBmYWN0b3JpZXMgYW5kIGNvbnN0cnVjdG9ycwovLy8gYnV0IHNpbmNlIG9uZSB0eXBlIHZhcmlhYmxlIGNhbiBpbnRyb2R1Y2UgZGlmZmVyZW50IGxvY2FscyBpbiBkaWZmZXJlbnQKLy8vIGZhY3RvcmllcyBhbmQgY29uc3RydWN0b3JzIGl0IGlzIG5vdCBpdHNlbGYgYSBbTG9jYWxdIGJ1dCBpbnN0ZWFkCi8vLyBhIG5vbi1lbGVtZW50IFtMb2NhbF0gaXMgY3JlYXRlZCB0aHJvdWdoIGEgc3BlY2lhbGl6ZWQgY2xhc3MuCmFic3RyYWN0IGNsYXNzIExvY2FsIGV4dGVuZHMgRW50aXR5IHt9CgovLy8gVGhlIHN0cnVjdHVyZSBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzLgpjbGFzcyBQYXJhbWV0ZXJTdHJ1Y3R1cmUgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbUGFyYW1ldGVyU3RydWN0dXJlXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3BhcmFtZXRlci1zdHJ1Y3R1cmUnOwoKICAvLy8gVGhlIG51bWJlciBvZiByZXF1aXJlZCAocG9zaXRpb25hbCkgcGFyYW1ldGVycy4KICBmaW5hbCBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJzOwoKICAvLy8gVGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgZmluYWwgaW50IHBvc2l0aW9uYWxQYXJhbWV0ZXJzOwoKICAvLy8gVGhlIG5hbWVkIHBhcmFtZXRlcnMgc29ydGVkIGFscGhhYmV0aWNhbGx5LgogIGZpbmFsIExpc3Q8U3RyaW5nPiBuYW1lZFBhcmFtZXRlcnM7CgogIC8vLyBUaGUgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycy4KICBmaW5hbCBpbnQgdHlwZVBhcmFtZXRlcnM7CgogIGNvbnN0IFBhcmFtZXRlclN0cnVjdHVyZSh0aGlzLnJlcXVpcmVkUGFyYW1ldGVycywgdGhpcy5wb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgdGhpcy5uYW1lZFBhcmFtZXRlcnMsIHRoaXMudHlwZVBhcmFtZXRlcnMpOwoKICBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUuZ2V0dGVyKCkgOiB0aGlzKDAsIDAsIGNvbnN0IDxTdHJpbmc+W10sIDApOwoKICBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUuc2V0dGVyKCkgOiB0aGlzKDEsIDEsIGNvbnN0IDxTdHJpbmc+W10sIDApOwoKICBmYWN0b3J5IFBhcmFtZXRlclN0cnVjdHVyZS5mcm9tVHlwZShGdW5jdGlvblR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUoCiAgICAgICAgdHlwZS5wYXJhbWV0ZXJUeXBlcy5sZW5ndGgsCiAgICAgICAgdHlwZS5wYXJhbWV0ZXJUeXBlcy5sZW5ndGggKyB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMubGVuZ3RoLAogICAgICAgIHR5cGUubmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHR5cGUudHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogIH0KCiAgLy8vIERlc2VyaWFsaXplcyBhIFtQYXJhbWV0ZXJTdHJ1Y3R1cmVdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgUGFyYW1ldGVyU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJzID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGludCBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBMaXN0PFN0cmluZz4gbmFtZWRQYXJhbWV0ZXJzID0gc291cmNlLnJlYWRTdHJpbmdzKCk7CiAgICBpbnQgdHlwZVBhcmFtZXRlcnMgPSBzb3VyY2UucmVhZEludCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUocmVxdWlyZWRQYXJhbWV0ZXJzLCBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBuYW1lZFBhcmFtZXRlcnMsIHR5cGVQYXJhbWV0ZXJzKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1BhcmFtZXRlclN0cnVjdHVyZV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVJbnQocmVxdWlyZWRQYXJhbWV0ZXJzKTsKICAgIHNpbmsud3JpdGVJbnQocG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgc2luay53cml0ZVN0cmluZ3MobmFtZWRQYXJhbWV0ZXJzKTsKICAgIHNpbmsud3JpdGVJbnQodHlwZVBhcmFtZXRlcnMpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBUaGUgbnVtYmVyIG9mIG9wdGlvbmFsIHBhcmFtZXRlcnMgKHBvc2l0aW9uYWwgb3IgbmFtZWQpLgogIGludCBnZXQgb3B0aW9uYWxQYXJhbWV0ZXJzID0+CiAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzIC0gcmVxdWlyZWRQYXJhbWV0ZXJzICsgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsKCiAgLy8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFyYW1ldGVycyAocmVxdWlyZWQgb3Igb3B0aW9uYWwpLgogIGludCBnZXQgdG90YWxQYXJhbWV0ZXJzID0+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzICsgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsKCiAgLy8vIFJldHVybnMgdGhlIFtDYWxsU3RydWN0dXJlXSBjb3JyZXNwb25kaW5nIHRvIGEgY2FsbCBzaXRlIHBhc3NpbmcgYWxsCiAgLy8vIHBhcmFtZXRlcnMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwuCiAgQ2FsbFN0cnVjdHVyZSBnZXQgY2FsbFN0cnVjdHVyZSB7CiAgICByZXR1cm4gbmV3IENhbGxTdHJ1Y3R1cmUocG9zaXRpb25hbFBhcmFtZXRlcnMgKyBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgIG5hbWVkUGFyYW1ldGVycywgdHlwZVBhcmFtZXRlcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBIYXNoaW5nLmxpc3RIYXNoKAogICAgICBuYW1lZFBhcmFtZXRlcnMsCiAgICAgIEhhc2hpbmcub2JqZWN0SGFzaCgKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgICAgSGFzaGluZy5vYmplY3RIYXNoKAogICAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVycywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGVQYXJhbWV0ZXJzKSkpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBQYXJhbWV0ZXJTdHJ1Y3R1cmUpIHJldHVybiBmYWxzZTsKICAgIGlmIChyZXF1aXJlZFBhcmFtZXRlcnMgIT0gb3RoZXIucmVxdWlyZWRQYXJhbWV0ZXJzIHx8CiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgIT0gb3RoZXIucG9zaXRpb25hbFBhcmFtZXRlcnMgfHwKICAgICAgICB0eXBlUGFyYW1ldGVycyAhPSBvdGhlci50eXBlUGFyYW1ldGVycyB8fAogICAgICAgIG5hbWVkUGFyYW1ldGVycy5sZW5ndGggIT0gb3RoZXIubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVkUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBpZiAobmFtZWRQYXJhbWV0ZXJzW2ldICE9IG90aGVyLm5hbWVkUGFyYW1ldGVyc1tpXSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gU2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2UgZm9yIHRlc3RpbmcuCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IDApIHsKICAgICAgc2Iud3JpdGUoJzwnKTsKICAgICAgc2Iud3JpdGUodHlwZVBhcmFtZXRlcnMpOwogICAgICBzYi53cml0ZSgnPicpOwogICAgfQogICAgc2Iud3JpdGUoJygnKTsKICAgIHNiLndyaXRlKHBvc2l0aW9uYWxQYXJhbWV0ZXJzKTsKICAgIGlmIChuYW1lZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShuYW1lZFBhcmFtZXRlcnMuam9pbignLCcpKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdQYXJhbWV0ZXJTdHJ1Y3R1cmUoJyk7CiAgICBzYi53cml0ZSgncmVxdWlyZWRQYXJhbWV0ZXJzPSRyZXF1aXJlZFBhcmFtZXRlcnMsJyk7CiAgICBzYi53cml0ZSgncG9zaXRpb25hbFBhcmFtZXRlcnM9JHBvc2l0aW9uYWxQYXJhbWV0ZXJzLCcpOwogICAgc2Iud3JpdGUoJ25hbWVkUGFyYW1ldGVycz17JHtuYW1lZFBhcmFtZXRlcnMuam9pbignLCcpfX0sJyk7CiAgICBzYi53cml0ZSgndHlwZVBhcmFtZXRlcnM9JHR5cGVQYXJhbWV0ZXJzKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBpbnQgZ2V0IHNpemUgPT4KICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgKyB0eXBlUGFyYW1ldGVycyArIG5hbWVkUGFyYW1ldGVycy5sZW5ndGg7Cn0KgYYATk48ARIBTQEZLj0cFRUBJQRJSgRQS082LRMCAT0ETR8uPRgCATcEQBUVAUAmIQEvGQEdEQFQAQxJAgE7BEsfLE9ODx0BSxAWASkXAgEuNR0CATNEHgFDGRECAUUnBEwiLU0PFwEtFwEyFQE1HQElGgEfFAFOGhcBIBUBIBUBTBkBTRQBSg4XAUcgIgFHMR0CATsESi0zAT4EUTw1TxQXATAtATwfAgFDFChLASgnRQEoIz8BKT0fFRkBREUWAUo7GQEoAS02AQwWRAQBJwYtPwoPCw8FASwGLSkCAUEESUBEETpGJAFDIQFQECkCATQETU1PNT5DJQIBSwROT0QERkxGQicBKhtMHTMBNiABKyIBMiYBJRwBTzIBRwFHATsjJEkeJAQBQEUXLzE5KxVMKgQBNigVJykoIxMEAT8gSgE9TAFLLSRMKgQBDCgXGiAeSQEMHC00Oj4yQhQGNzwWCAYRBAE0GSofFSAVBhMkJhUrBhMaBAEMFiolOT1BMRoEARJGAgErcGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvZW50aXRpZXMuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbnF1ZXVlLmRhcnTAAEmULy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5lbnF1ZXVlOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgUXVldWU7CgppbXBvcnQgJ2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi90YXNrcy5kYXJ0JyBzaG93IENvbXBpbGVyVGFzazsKaW1wb3J0ICdjb21tb24vd29yay5kYXJ0JyBzaG93IFdvcmtJdGVtOwppbXBvcnQgJ2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICdjb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyL3R5cGVzLmRhcnQnOwppbXBvcnQgJ2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnIHNob3cgQ29kZWdlbklucHV0czsKaW1wb3J0ICdqc19iYWNrZW5kL2VucXVldWVyLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9yZXNvbHV0aW9uX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS91c2UuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdGFudFVzZSwKICAgICAgICBEeW5hbWljVXNlLAogICAgICAgIFN0YXRpY1VzZSwKICAgICAgICBTdGF0aWNVc2VLaW5kLAogICAgICAgIFR5cGVVc2UsCiAgICAgICAgVHlwZVVzZUtpbmQ7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFN0cmF0ZWd5LCBJbXBhY3RVc2VDYXNlLCBXb3JsZEltcGFjdCwgV29ybGRJbXBhY3RWaXNpdG9yOwppbXBvcnQgJ3V0aWwvZW51bXNldC5kYXJ0JzsKaW1wb3J0ICd1dGlsL3V0aWwuZGFydCcgc2hvdyBTZXRsZXQ7CmltcG9ydCAnd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgpjbGFzcyBFbnF1ZXVlVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgUmVzb2x1dGlvbkVucXVldWVyIF9yZXNvbHV0aW9uOwogIENvZGVnZW5FbnF1ZXVlciBjb2RlZ2VuRW5xdWV1ZXJGb3JUZXN0aW5nOwogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ0VucXVldWUnOwoKICBFbnF1ZXVlVGFzayhDb21waWxlciBjb21waWxlcikKICAgICAgOiB0aGlzLmNvbXBpbGVyID0gY29tcGlsZXIsCiAgICAgICAgc3VwZXIoY29tcGlsZXIubWVhc3VyZXIpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMuCiAgYm9vbCBnZXQgaGFzUmVzb2x1dGlvbiA9PiBfcmVzb2x1dGlvbiAhPSBudWxsOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMuCiAgUmVzb2x1dGlvbkVucXVldWVyIGdldCByZXNvbHV0aW9uIHsKICAgIGFzc2VydCgKICAgICAgICBfcmVzb2x1dGlvbiAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlJlc29sdXRpb25FbnF1ZXVlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuIikpOwogICAgcmV0dXJuIF9yZXNvbHV0aW9uOwogIH0KCiAgUmVzb2x1dGlvbkVucXVldWVyIGNyZWF0ZVJlc29sdXRpb25FbnF1ZXVlcigpIHsKICAgIHJldHVybiBfcmVzb2x1dGlvbiA/Pz0gY29tcGlsZXIuZnJvbnRlbmRTdHJhdGVneQogICAgICAgIC5jcmVhdGVSZXNvbHV0aW9uRW5xdWV1ZXIodGhpcywgY29tcGlsZXIpCiAgICAgICAgICAuLm9uRW1wdHlGb3JUZXN0aW5nID0gY29tcGlsZXIub25SZXNvbHV0aW9uUXVldWVFbXB0eUZvclRlc3Rpbmc7CiAgfQoKICBFbnF1ZXVlciBjcmVhdGVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzLAogICAgICBDb2RlZ2VuUmVzdWx0cyBjb2RlZ2VuUmVzdWx0cykgewogICAgRW5xdWV1ZXIgZW5xdWV1ZXIgPSBjb21waWxlci5iYWNrZW5kU3RyYXRlZ3kuY3JlYXRlQ29kZWdlbkVucXVldWVyKHRoaXMsCiAgICAgICAgY2xvc2VkV29ybGQsIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW5JbnB1dHMsIGNvZGVnZW5SZXN1bHRzKQogICAgICAuLm9uRW1wdHlGb3JUZXN0aW5nID0gY29tcGlsZXIub25Db2RlZ2VuUXVldWVFbXB0eUZvclRlc3Rpbmc7CiAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgY29kZWdlbkVucXVldWVyRm9yVGVzdGluZyA9IGVucXVldWVyOwogICAgfQogICAgcmV0dXJuIGVucXVldWVyOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRW5xdWV1ZXIgewogIC8vLyBJZiBgdHJ1ZWAgdGhlIGNoZWNraW5nIGZvciB1bmVucXVldWVkIG1lbWJlcnMgaXMgc2tpcHBlZC4gVGhlIGN1cnJlbnQKICAvLy8gaW1wbGVtZW50YXRpb24gcmVnaXN0ZXJzIHBhcmFtZXRlciB1c2FnZXMgYXMgYSBzaWRlLWVmZmVjdCBzbyB1bml0CiAgLy8vIHRlc3Rpbmcgb2YgbWVtYmVyIHVzYWdlIHdlIG5lZWQgdG8gdGVzdCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlCiAgLy8vIGVucXVldWVyIGNoZWNrLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFtjaGVja0VucXVldWVyQ29uc2lzdGVuY3ldIHNob3VsZCBub3QgaGF2ZQogIC8vIHNpZGUtZWZmZWN0cy4KICBzdGF0aWMgYm9vbCBza2lwRW5xdWV1ZXJDaGVja0ZvclRlc3RpbmcgPSBmYWxzZTsKCiAgV29ybGRCdWlsZGVyIGdldCB3b3JsZEJ1aWxkZXI7CgogIHZvaWQgb3BlbihJbXBhY3RTdHJhdGVneSBpbXBhY3RTdHJhdGVneSwgRnVuY3Rpb25FbnRpdHkgbWFpbk1ldGhvZCwKICAgICAgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpOwogIHZvaWQgY2xvc2UoKTsKCiAgLy8vIFJldHVybnMgWzp0cnVlOl0gaWYgdGhpcyBlbnF1ZXVlciBpcyB0aGUgcmVzb2x1dGlvbiBlbnF1ZXVlci4KICBib29sIGdldCBpc1Jlc29sdXRpb25RdWV1ZTsKCiAgYm9vbCBxdWV1ZUlzQ2xvc2VkOwoKICBib29sIGdldCBxdWV1ZUlzRW1wdHk7CgogIEltcGFjdFVzZUNhc2UgZ2V0IGltcGFjdFVzZTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihXb3JrSXRlbSB3b3JrKSk7CgogIC8vLyBBcHBseSB0aGUgW3dvcmxkSW1wYWN0XSB0byB0aGlzIGVucXVldWVyLiBJZiB0aGUgW2ltcGFjdFNvdXJjZV0gaXMKICAvLy8gcHJvdmlkZWQgdGhlIGltcGFjdCBzdHJhdGVneSB3aWxsIHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50IGltcGFjdCBjYWNoZSwKICAvLy8gaWYgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KICB2b2lkIGFwcGx5SW1wYWN0KFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0LCB7dmFyIGltcGFjdFNvdXJjZX0pOwogIGJvb2wgY2hlY2tOb0VucXVldWVkSW52b2tlZEluc3RhbmNlTWV0aG9kcygKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCk7CgogIC8vLyBDaGVjayB0aGUgZW5xdWV1ZXIgcXVldWUgaXMgZW1wdHkgb3IgZmFpbCBvdGhlcndpc2UuCiAgdm9pZCBjaGVja1F1ZXVlSXNFbXB0eSgpOwogIHZvaWQgbG9nU3VtbWFyeSh2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkpOwoKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBwcm9jZXNzZWRFbnRpdGllczsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBwcm9jZXNzZWRDbGFzc2VzOwp9CgphYnN0cmFjdCBjbGFzcyBFbnF1ZXVlckxpc3RlbmVyIHsKICAvLy8gQ2FsbGVkIHRvIGluc3RydWN0IHRvIHRoZSBiYWNrZW5kIHRoYXQgW3R5cGVdIGhhcyBiZWVuIGluc3RhbnRpYXRlZC4KICB2b2lkIHJlZ2lzdGVySW5zdGFudGlhdGVkVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIHtib29sIGlzR2xvYmFsOiBmYWxzZSwgYm9vbCBuYXRpdmVVc2FnZTogZmFsc2V9KTsKCiAgLy8vIENhbGxlZCB0byBub3RpZnkgdG8gdGhlIGJhY2tlbmQgdGhhdCBhIGNsYXNzIGlzIGJlaW5nIGluc3RhbnRpYXRlZC4gQW55CiAgLy8vIGJhY2tlbmQgc3BlY2lmaWMgW1dvcmxkSW1wYWN0XSBvZiB0aGlzIGlzIHJldHVybmVkLgogIFdvcmxkSW1wYWN0IHJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIENhbGxlZCB0byBub3RpZnkgdG8gdGhlIGJhY2tlbmQgdGhhdCBhIGNsYXNzIGlzIGltcGxlbWVudGVkIGJ5IGFuCiAgLy8vIGluc3RhbnRpYXRlZCBjbGFzcy4gQW55IGJhY2tlbmQgc3BlY2lmaWMgW1dvcmxkSW1wYWN0XSBvZiB0aGlzIGlzCiAgLy8vIHJldHVybmVkLgogIFdvcmxkSW1wYWN0IHJlZ2lzdGVySW1wbGVtZW50ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQ2FsbGVkIHRvIHJlZ2lzdGVyIHRoYXQgYSBzdGF0aWMgZnVuY3Rpb24gaGFzIGJlZW4gY2xvc3VyaXplZC4gQW55IGJhY2tlbmQKICAvLy8gc3BlY2lmaWMgW1dvcmxkSW1wYWN0XSBvZiB0aGlzIGlzIHJldHVybmVkLgogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyR2V0T2ZTdGF0aWNGdW5jdGlvbigpOwoKICAvLy8gQ2FsbGVkIHRvIHJlZ2lzdGVyIHRoYXQgW2Z1bmN0aW9uXSBoYXMgYmVlbiBjbG9zdXJpemVkLiBBbnkgYmFja2VuZAogIC8vLyBzcGVjaWZpYyBbV29ybGRJbXBhY3RdIG9mIHRoaXMgaXMgcmV0dXJuZWQuCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKCiAgLy8vIENhbGxlZCB0byByZWdpc3RlciB0aGF0IFtlbGVtZW50XSBpcyBzdGF0aWNhbGx5IGtub3duIHRvIGJlIHVzZWQuIEFueQogIC8vLyBiYWNrZW5kIHNwZWNpZmljIFtXb3JsZEltcGFjdF0gb2YgdGhpcyBpcyByZXR1cm5lZC4KICBXb3JsZEltcGFjdCByZWdpc3RlclVzZWRFbGVtZW50KE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gQ2FsbGVkIHRvIHJlZ2lzdGVyIHRoYXQgW3ZhbHVlXSBpcyBzdGF0aWNhbGx5IGtub3duIHRvIGJlIHVzZWQuIEFueQogIC8vLyBiYWNrZW5kIHNwZWNpZmljIFtXb3JsZEltcGFjdF0gb2YgdGhpcyBpcyByZXR1cm5lZC4KICBXb3JsZEltcGFjdCByZWdpc3RlclVzZWRDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKTsKCiAgdm9pZCBvblF1ZXVlT3BlbigKICAgICAgRW5xdWV1ZXIgZW5xdWV1ZXIsIEZ1bmN0aW9uRW50aXR5IG1haW5NZXRob2QsIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKTsKCiAgLy8vIENhbGxlZCB3aGVuIFtlbnF1ZXVlcl0ncyBxdWV1ZSBpcyBlbXB0eSwgYnV0IGJlZm9yZSBpdCBpcyBjbG9zZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIGJ5IHRoZSBKUyBiYWNrZW5kIHRvIGVucXVldWUgYWRkaXRpb25hbAogIC8vLyBlbGVtZW50cyBuZWVkZWQgZm9yIHJlZmxlY3Rpb24uIFtyZWNlbnRDbGFzc2VzXSBpcyBhIGNvbGxlY3Rpb24gb2YKICAvLy8gYWxsIGNsYXNzZXMgc2VlbiBmb3IgdGhlIGZpcnN0IHRpbWUgYnkgdGhlIFtlbnF1ZXVlcl0gc2luY2UgdGhlIGxhc3QgY2FsbAogIC8vLyB0byBbb25RdWV1ZUVtcHR5XS4KICAvLy8KICAvLy8gQSByZXR1cm4gdmFsdWUgb2YgYHRydWVgIGluZGljYXRlcyB0aGF0IFtyZWNlbnRDbGFzc2VzXSBoYXMgYmVlbgogIC8vLyBwcm9jZXNzZWQgYW5kIGl0cyBlbGVtZW50cyBkbyBub3QgbmVlZCB0byBiZSBzZWVuIGluIHRoZSBuZXh0IHJvdW5kLiBXaGVuCiAgLy8vIGBmYWxzZWAgaXMgcmV0dXJuZWQsIFtvblF1ZXVlRW1wdHldIHdpbGwgYmUgY2FsbGVkIGFnYWluIG9uY2UgdGhlCiAgLy8vIHJlc29sdXRpb24gcXVldWUgaGFzIGRyYWluZWQgYW5kIFtyZWNlbnRDbGFzc2VzXSB3aWxsIGJlIGEgc3VwZXJzZXQgb2YgdGhlCiAgLy8vIGN1cnJlbnQgdmFsdWUuCiAgLy8vCiAgLy8vIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGEgY2xhc3MgaXMgb25seSBwcmVzZW50IG9uY2UgaW4KICAvLy8gW3JlY2VudENsYXNzZXNdLCBidXQgZXZlcnkgY2xhc3Mgc2VlbiBieSB0aGUgW2VucXVldWVyXSB3aWxsIGJlIHByZXNlbnQgaW4KICAvLy8gW3JlY2VudENsYXNzZXNdIGF0IGxlYXN0IG9uY2UuCiAgYm9vbCBvblF1ZXVlRW1wdHkoRW5xdWV1ZXIgZW5xdWV1ZXIsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiByZWNlbnRDbGFzc2VzKTsKCiAgLy8vIENhbGxlZCB3aGVuIHRvIHRoZSBxdWV1ZSBoYXMgYmVlbiBjbG9zZWQuCiAgdm9pZCBvblF1ZXVlQ2xvc2VkKCk7CgogIC8vLyBDYWxsZWQgYWZ0ZXIgdGhlIHF1ZXVlIGhhcyBiZWVuIGVtcHRpZWQuCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSk7Cn0KCmFic3RyYWN0IGNsYXNzIEVucXVldWVySW1wbCBleHRlbmRzIEVucXVldWVyIHsKICBDb21waWxlclRhc2sgZ2V0IHRhc2s7CiAgdm9pZCBjaGVja0NsYXNzKENsYXNzRW50aXR5IGNscyk7CiAgdm9pZCBwcm9jZXNzU3RhdGljVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIFN0YXRpY1VzZSBzdGF0aWNVc2UpOwogIHZvaWQgcHJvY2Vzc1R5cGVVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB0eXBlVXNlKTsKICB2b2lkIHByb2Nlc3NEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSk7CiAgdm9pZCBwcm9jZXNzQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpOwogIEVucXVldWVyTGlzdGVuZXIgZ2V0IGxpc3RlbmVyOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbml0aWFsaXplIFtfaW1wYWN0U3RyYXRlZ3ldIHRvIGBudWxsYC4KICBJbXBhY3RTdHJhdGVneSBfaW1wYWN0U3RyYXRlZ3kgPSBjb25zdCBJbXBhY3RTdHJhdGVneSgpOwoKICBJbXBhY3RTdHJhdGVneSBnZXQgaW1wYWN0U3RyYXRlZ3kgPT4gX2ltcGFjdFN0cmF0ZWd5OwoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZW4oSW1wYWN0U3RyYXRlZ3kgaW1wYWN0U3RyYXRlZ3ksIEZ1bmN0aW9uRW50aXR5IG1haW5NZXRob2QsCiAgICAgIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKSB7CiAgICBfaW1wYWN0U3RyYXRlZ3kgPSBpbXBhY3RTdHJhdGVneTsKICAgIGxpc3RlbmVyLm9uUXVldWVPcGVuKHRoaXMsIG1haW5NZXRob2QsIGxpYnJhcmllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2V0IFtfaW1wYWN0U3RyYXRlZ3ldIHRvIGBudWxsYCBhbmQgW3F1ZXVlSXNDbG9zZWRdCiAgICAvLyB0byBgdHJ1ZWAgaGVyZS4KICAgIF9pbXBhY3RTdHJhdGVneSA9IGNvbnN0IEltcGFjdFN0cmF0ZWd5KCk7CiAgICBsaXN0ZW5lci5vblF1ZXVlQ2xvc2VkKCk7CiAgfQoKICAvLy8gQ2hlY2sgZW5xdWV1ZXIgY29uc2lzdGVuY3kgYWZ0ZXIgdGhlIHF1ZXVlIGhhcyBiZWVuIGNsb3NlZC4KICBib29sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeShFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdyZXNvbHV0aW9uLmNoZWNrJywgKCkgewogICAgICAvLyBSdW4gdGhyb3VnaCB0aGUgY2xhc3NlcyBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZW5xdWV1ZSBtb3JlIG1ldGhvZHMuCiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50CiAgICAgICAgICBpbiB3b3JsZEJ1aWxkZXIuZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzKSB7CiAgICAgICAgZm9yIChDbGFzc0VudGl0eSBjdXJyZW50Q2xhc3MgPSBjbGFzc0VsZW1lbnQ7CiAgICAgICAgICAgIGN1cnJlbnRDbGFzcyAhPSBudWxsOwogICAgICAgICAgICBjdXJyZW50Q2xhc3MgPSBlbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjdXJyZW50Q2xhc3MpKSB7CiAgICAgICAgICBjaGVja0NsYXNzKGN1cnJlbnRDbGFzcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8vIFtFbnF1ZXVlcl0gd2hpY2ggaXMgc3BlY2lmaWMgdG8gcmVzb2x1dGlvbi4KY2xhc3MgUmVzb2x1dGlvbkVucXVldWVyIGV4dGVuZHMgRW5xdWV1ZXJJbXBsIHsKICBzdGF0aWMgY29uc3QgSW1wYWN0VXNlQ2FzZSBJTVBBQ1RfVVNFID0KICAgICAgY29uc3QgSW1wYWN0VXNlQ2FzZSgnUmVzb2x1dGlvbkVucXVldWVyJyk7CgogIEBvdmVycmlkZQogIGZpbmFsIENvbXBpbGVyVGFzayB0YXNrOwogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIEVucXVldWVyTGlzdGVuZXIgbGlzdGVuZXI7CgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX3JlY2VudENsYXNzZXMgPSBuZXcgU2V0bGV0PENsYXNzRW50aXR5PigpOwogIGJvb2wgX3JlY2VudENvbnN0YW50cyA9IGZhbHNlOwogIGZpbmFsIFJlc29sdXRpb25FbnF1ZXVlcldvcmxkQnVpbGRlciBfd29ybGRCdWlsZGVyOwogIGZpbmFsIFdvcmtJdGVtQnVpbGRlciBfd29ya0l0ZW1CdWlsZGVyOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhIF9hbm5vdGF0aW9uc0RhdGE7CgogIEBvdmVycmlkZQogIGJvb2wgcXVldWVJc0Nsb3NlZCA9IGZhbHNlOwoKICBXb3JsZEltcGFjdFZpc2l0b3IgX2ltcGFjdFZpc2l0b3I7CgogIGZpbmFsIFF1ZXVlPFdvcmtJdGVtPiBfcXVldWUgPSBuZXcgUXVldWU8V29ya0l0ZW0+KCk7CgogIC8vIElmIG5vdCBgbnVsbGAgdGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaGFzIGJlZW4gZW1wdGllZC4gSXQgYWxsb3dzIGZvcgogIC8vIGFwcGx5aW5nIGFkZGl0aW9uYWwgaW1wYWN0cyBiZWZvcmUgcmUtZW1wdHlpbmcgdGhlIHF1ZXVlLgogIHZvaWQgRnVuY3Rpb24oKSBvbkVtcHR5Rm9yVGVzdGluZzsKCiAgUmVzb2x1dGlvbkVucXVldWVyKHRoaXMudGFzaywgdGhpcy5fcmVwb3J0ZXIsIHRoaXMubGlzdGVuZXIsCiAgICAgIHRoaXMuX3dvcmxkQnVpbGRlciwgdGhpcy5fd29ya0l0ZW1CdWlsZGVyLCB0aGlzLl9hbm5vdGF0aW9uc0RhdGEsCiAgICAgIFt0aGlzLm5hbWUgPSAncmVzb2x1dGlvbiBlbnF1ZXVlciddKSB7CiAgICBfaW1wYWN0VmlzaXRvciA9IG5ldyBFbnF1ZXVlckltcGxJbXBhY3RWaXNpdG9yKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmVzb2x1dGlvbldvcmxkQnVpbGRlciBnZXQgd29ybGRCdWlsZGVyID0+IF93b3JsZEJ1aWxkZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHF1ZXVlSXNFbXB0eSA9PiBfcXVldWUuaXNFbXB0eTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjaGVja1F1ZXVlSXNFbXB0eSgpIHsKICAgIGlmIChfcXVldWUuaXNOb3RFbXB0eSkgewogICAgICBmYWlsZWRBdChfcXVldWUuZmlyc3QuZWxlbWVudCwgIiRuYW1lIHF1ZXVlIGlzIG5vdCBlbXB0eS4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgcHJvY2Vzc2VkQ2xhc3NlcyA9PiBfd29ybGRCdWlsZGVyLnByb2Nlc3NlZENsYXNzZXM7CgogIEBvdmVycmlkZQogIHZvaWQgYXBwbHlJbXBhY3QoV29ybGRJbXBhY3Qgd29ybGRJbXBhY3QsIHt2YXIgaW1wYWN0U291cmNlfSkgewogICAgaWYgKHdvcmxkSW1wYWN0LmlzRW1wdHkpIHJldHVybjsKICAgIGltcGFjdFN0cmF0ZWd5LnZpc2l0SW1wYWN0KAogICAgICAgIGltcGFjdFNvdXJjZSwgd29ybGRJbXBhY3QsIF9pbXBhY3RWaXNpdG9yLCBpbXBhY3RVc2UpOwogIH0KCiAgdm9pZCBfcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAge0NvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yLAogICAgICBib29sIG5hdGl2ZVVzYWdlOiBmYWxzZSwKICAgICAgYm9vbCBnbG9iYWxEZXBlbmRlbmN5OiBmYWxzZX0pIHsKICAgIHRhc2subWVhc3VyZVN1YnRhc2soJ3Jlc29sdXRpb24udHlwZVVzZScsICgpIHsKICAgICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclR5cGVJbnN0YW50aWF0aW9uKHR5cGUsIF9hcHBseUNsYXNzVXNlLAogICAgICAgICAgY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yKTsKICAgICAgbGlzdGVuZXIucmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKHR5cGUsCiAgICAgICAgICBpc0dsb2JhbDogZ2xvYmFsRGVwZW5kZW5jeSwgbmF0aXZlVXNhZ2U6IG5hdGl2ZVVzYWdlKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVja05vRW5xdWV1ZWRJbnZva2VkSW5zdGFuY2VNZXRob2RzKAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSB7CiAgICBpZiAoRW5xdWV1ZXIuc2tpcEVucXVldWVyQ2hlY2tGb3JUZXN0aW5nKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBjaGVja0VucXVldWVyQ29uc2lzdGVuY3koZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2hlY2tDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIF93b3JsZEJ1aWxkZXIucHJvY2Vzc0NsYXNzTWVtYmVycyhjbHMsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQpIHsKICAgICAgaWYgKHVzZVNldC5pc05vdEVtcHR5KSB7CiAgICAgICAgX3JlcG9ydGVyLmludGVybmFsRXJyb3IobWVtYmVyLAogICAgICAgICAgICAnVW5lbnF1ZXVlZCB1c2Ugb2YgJG1lbWJlcjogJHt1c2VTZXQuaXRlcmFibGUoTWVtYmVyVXNlLnZhbHVlcyl9Jyk7CiAgICAgIH0KICAgIH0sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogdHJ1ZSk7CiAgfQoKICAvLy8gQ2FsbGJhY2sgZm9yIGFwcGx5aW5nIHRoZSB1c2Ugb2YgYSBbbWVtYmVyXS4KICB2b2lkIF9hcHBseU1lbWJlclVzZShFbnRpdHkgbWVtYmVyLCBFbnVtU2V0PE1lbWJlclVzZT4gdXNlU2V0KSB7CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKE1lbWJlclVzZS5OT1JNQUwpKSB7CiAgICAgIF9hZGRUb1dvcmtMaXN0KG1lbWJlcik7CiAgICB9CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKE1lbWJlclVzZS5DTE9TVVJJWkVfSU5TVEFOQ0UpKSB7CiAgICAgIF9yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIobWVtYmVyKTsKICAgIH0KICAgIGlmICh1c2VTZXQuY29udGFpbnMoTWVtYmVyVXNlLkNMT1NVUklaRV9TVEFUSUMpKSB7CiAgICAgIGFwcGx5SW1wYWN0KGxpc3RlbmVyLnJlZ2lzdGVyR2V0T2ZTdGF0aWNGdW5jdGlvbigpLAogICAgICAgICAgaW1wYWN0U291cmNlOiAnZ2V0IG9mIHN0YXRpYyBmdW5jdGlvbicpOwogICAgfQogIH0KCiAgLy8vIENhbGxiYWNrIGZvciBhcHBseWluZyB0aGUgdXNlIG9mIGEgW2Nsc10uCiAgdm9pZCBfYXBwbHlDbGFzc1VzZShDbGFzc0VudGl0eSBjbHMsIEVudW1TZXQ8Q2xhc3NVc2U+IHVzZVNldCkgewogICAgaWYgKHVzZVNldC5jb250YWlucyhDbGFzc1VzZS5JTlNUQU5USUFURUQpKSB7CiAgICAgIF9yZWNlbnRDbGFzc2VzLmFkZChjbHMpOwogICAgICBfd29ybGRCdWlsZGVyLnByb2Nlc3NDbGFzc01lbWJlcnMoY2xzLCBfYXBwbHlNZW1iZXJVc2UpOwogICAgICAvLyBXZSBvbmx5IHRlbGwgdGhlIGJhY2tlbmQgb25jZSB0aGF0IFtjbHNdIHdhcyBpbnN0YW50aWF0ZWQsIHNvCiAgICAgIC8vIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBtdXN0IGJlIHRyZWF0ZWQgYXMgZ2xvYmFsCiAgICAgIC8vIGRlcGVuZGVuY2llcy4KICAgICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhjbHMpLAogICAgICAgICAgaW1wYWN0U291cmNlOiAnaW5zdGFudGlhdGVkIGNsYXNzJyk7CiAgICB9CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKENsYXNzVXNlLklNUExFTUVOVEVEKSkgewogICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlckltcGxlbWVudGVkQ2xhc3MoY2xzKSwKICAgICAgICAgIGltcGFjdFNvdXJjZTogJ2ltcGxlbWVudGVkIGNsYXNzJyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygncmVzb2x1dGlvbi5keW5hbWljVXNlJywgKCkgewogICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShkeW5hbWljVXNlLCBfYXBwbHlNZW1iZXJVc2UpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NDb25zdGFudFVzZShDb25zdGFudFVzZSBjb25zdGFudFVzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygncmVzb2x1dGlvbi5jb25zdGFudFVzZScsICgpIHsKICAgICAgaWYgKF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudFVzZShjb25zdGFudFVzZSkpIHsKICAgICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlclVzZWRDb25zdGFudChjb25zdGFudFVzZS52YWx1ZSksCiAgICAgICAgICAgIGltcGFjdFNvdXJjZTogJ2NvbnN0YW50IHVzZScpOwogICAgICAgIF9yZWNlbnRDb25zdGFudHMgPSB0cnVlOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc1N0YXRpY1VzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdGF0aWNVc2Ugc3RhdGljVXNlKSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdyZXNvbHV0aW9uLnN0YXRpY1VzZScsICgpIHsKICAgICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UsIF9hcHBseU1lbWJlclVzZSk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFkZCBgUmVzb2x1dGlvbldvcmxkQnVpbGRlci5yZWdpc3RlckNvbnN0cnVjdG9yVXNlYAogICAgICAvLyBmb3IgdGhlc2U6CiAgICAgIHN3aXRjaCAoc3RhdGljVXNlLmtpbmQpIHsKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9JTlZPS0U6CiAgICAgICAgICBfcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKHN0YXRpY1VzZS50eXBlLAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBzdGF0aWNVc2UuZWxlbWVudCwgZ2xvYmFsRGVwZW5kZW5jeTogZmFsc2UpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc1R5cGVVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB0eXBlVXNlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZVVzZS50eXBlOwogICAgc3dpdGNoICh0eXBlVXNlLmtpbmQpIHsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICBjYXNlIFR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT046CiAgICAgICAgX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZSh0eXBlLCBnbG9iYWxEZXBlbmRlbmN5OiBmYWxzZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT046CiAgICAgICAgX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZSh0eXBlLAogICAgICAgICAgICBuYXRpdmVVc2FnZTogdHJ1ZSwgZ2xvYmFsRGVwZW5kZW5jeTogdHJ1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSVNfQ0hFQ0s6CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ0FUQ0hfVFlQRToKICAgICAgICBfcmVnaXN0ZXJJc0NoZWNrKHR5cGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLkFTX0NBU1Q6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLklNUExJQ0lUX0NBU1Q6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5KG1lbWJlcikuaXNFbWl0dGVkKSB7CiAgICAgICAgICBfcmVnaXN0ZXJJc0NoZWNrKHR5cGUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5QQVJBTUVURVJfQ0hFQ0s6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfTElURVJBTDoKICAgICAgICBpZiAodHlwZSBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyVHlwZVZhcmlhYmxlVHlwZUxpdGVyYWwodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlJUSV9WQUxVRToKICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UOgogICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIHR5cGUgdXNlOiAkdHlwZVVzZS4iKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5OQU1FRF9UWVBFX1ZBUklBQkxFX05FV19SVEk6CiAgICAgICAgYXNzZXJ0KHR5cGUgaXMgVHlwZVZhcmlhYmxlVHlwZSk7CiAgICAgICAgX3JlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGkodHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICB2b2lkIF9yZWdpc3RlcklzQ2hlY2soRGFydFR5cGUgdHlwZSkgewogICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgfQoKICB2b2lkIF9yZWdpc3Rlck5hbWVkVHlwZVZhcmlhYmxlTmV3UnRpKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgewogICAgX3dvcmxkQnVpbGRlci5yZWdpc3Rlck5hbWVkVHlwZVZhcmlhYmxlTmV3UnRpKHR5cGUpOwogIH0KCiAgdm9pZCBfcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyKTsKICAgIGFwcGx5SW1wYWN0KGxpc3RlbmVyLnJlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihlbGVtZW50KSwKICAgICAgICBpbXBhY3RTb3VyY2U6ICdjbG9zdXJpemVkIG1lbWJlcicpOwogICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoZWxlbWVudCk7CiAgfQoKICB2b2lkIF9mb3JFYWNoKHZvaWQgZihXb3JrSXRlbSB3b3JrKSkgewogICAgZG8gewogICAgICB3aGlsZSAoX3F1ZXVlLmlzTm90RW1wdHkpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGaW5kIGFuIG9wdGltYWwgcHJvY2VzcyBvcmRlci4KICAgICAgICBXb3JrSXRlbSB3b3JrID0gX3F1ZXVlLnJlbW92ZUxhc3QoKTsKICAgICAgICBpZiAoIV93b3JsZEJ1aWxkZXIuaXNNZW1iZXJQcm9jZXNzZWQod29yay5lbGVtZW50KSkgewogICAgICAgICAgZih3b3JrKTsKICAgICAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJQcm9jZXNzZWRNZW1iZXIod29yay5lbGVtZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgTGlzdDxDbGFzc0VudGl0eT4gcmVjZW50cyA9IF9yZWNlbnRDbGFzc2VzLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBfcmVjZW50Q2xhc3Nlcy5jbGVhcigpOwogICAgICBfcmVjZW50Q29uc3RhbnRzID0gZmFsc2U7CiAgICAgIGlmICghX29uUXVldWVFbXB0eShyZWNlbnRzKSkgewogICAgICAgIF9yZWNlbnRDbGFzc2VzLmFkZEFsbChyZWNlbnRzKTsKICAgICAgfQogICAgfSB3aGlsZSAoCiAgICAgICAgX3F1ZXVlLmlzTm90RW1wdHkgfHwgX3JlY2VudENsYXNzZXMuaXNOb3RFbXB0eSB8fCBfcmVjZW50Q29uc3RhbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGYoV29ya0l0ZW0gd29yaykpIHsKICAgIF9mb3JFYWNoKGYpOwogICAgaWYgKG9uRW1wdHlGb3JUZXN0aW5nICE9IG51bGwpIHsKICAgICAgb25FbXB0eUZvclRlc3RpbmcoKTsKICAgICAgX2ZvckVhY2goZik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxvZ1N1bW1hcnkodm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpKSB7CiAgICBsb2coJ1Jlc29sdmVkICR7cHJvY2Vzc2VkRW50aXRpZXMubGVuZ3RofSBlbGVtZW50cy4nKTsKICAgIGxpc3RlbmVyLmxvZ1N1bW1hcnkobG9nKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdFbnF1ZXVlcigkbmFtZSknOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBwcm9jZXNzZWRFbnRpdGllcyA9PgogICAgICBfd29ybGRCdWlsZGVyLnByb2Nlc3NlZE1lbWJlcnM7CgogIEBvdmVycmlkZQogIEltcGFjdFVzZUNhc2UgZ2V0IGltcGFjdFVzZSA9PiBJTVBBQ1RfVVNFOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Jlc29sdXRpb25RdWV1ZSA9PiB0cnVlOwoKICAvLy8gUmVnaXN0ZXJzIFtlbnRpdHldIGFzIHByb2Nlc3NlZCBieSB0aGUgcmVzb2x1dGlvbiBlbnF1ZXVlci4gVXNlZCBvbmx5IGZvcgogIC8vLyB0ZXN0aW5nLgogIHZvaWQgcmVnaXN0ZXJQcm9jZXNzZWRFbGVtZW50SW50ZXJuYWwoTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclByb2Nlc3NlZE1lbWJlcihlbnRpdHkpOwogIH0KCiAgLy8vIENyZWF0ZSBhIFtXb3JrSXRlbV0gZm9yIFtlbnRpdHldIGFuZCBhZGQgaXQgdG8gdGhlIHdvcmsgbGlzdCBpZiBpdCBoYXMgbm90CiAgLy8vIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQuCiAgdm9pZCBfYWRkVG9Xb3JrTGlzdChNZW1iZXJFbnRpdHkgZW50aXR5KSB7CiAgICBpZiAoX3dvcmxkQnVpbGRlci5pc01lbWJlclByb2Nlc3NlZChlbnRpdHkpKSByZXR1cm47CiAgICBXb3JrSXRlbSB3b3JrSXRlbSA9IF93b3JrSXRlbUJ1aWxkZXIuY3JlYXRlV29ya0l0ZW0oZW50aXR5KTsKICAgIGlmICh3b3JrSXRlbSA9PSBudWxsKSByZXR1cm47CgogICAgaWYgKHF1ZXVlSXNDbG9zZWQpIHsKICAgICAgZmFpbGVkQXQoCiAgICAgICAgICBlbnRpdHksICJSZXNvbHV0aW9uIHdvcmsgbGlzdCBpcyBjbG9zZWQuIFRyeWluZyB0byBhZGQgJGVudGl0eS4iKTsKICAgIH0KCiAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlclVzZWRFbGVtZW50KGVudGl0eSksCiAgICAgICAgaW1wYWN0U291cmNlOiAndXNlZCBlbGVtZW50Jyk7CiAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyVXNlZEVsZW1lbnQoZW50aXR5KTsKICAgIF9xdWV1ZS5hZGQod29ya0l0ZW0pOwogIH0KCiAgLy8vIFtfb25RdWV1ZUVtcHR5XSBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHF1ZXVlIGlzIGRyYWluZWQuIFtyZWNlbnRDbGFzc2VzXQogIC8vLyBjb250YWlucyB0aGUgc2V0IG9mIGFsbCBjbGFzc2VzIHNlZW4gZm9yIHRoZSBmaXJzdCB0aW1lIHNpbmNlCiAgLy8vIFtfb25RdWV1ZUVtcHR5XSB3YXMgY2FsbGVkIGxhc3QuIEEgcmV0dXJuIHZhbHVlIG9mIFt0cnVlXSBpbmRpY2F0ZXMgdGhhdAogIC8vLyB0aGUgW3JlY2VudENsYXNzZXNdIGhhdmUgYmVlbiBwcm9jZXNzZWQgYW5kIG1heSBiZSBjbGVhcmVkLiBJZiBbZmFsc2VdIGlzCiAgLy8vIHJldHVybmVkLCBbX29uUXVldWVFbXB0eV0gd2lsbCBiZSBjYWxsZWQgb25jZSB0aGUgcXVldWUgaXMgZW1wdHkgYWdhaW4gKG9yCiAgLy8vIHN0aWxsIGVtcHR5KSBhbmQgW3JlY2VudENsYXNzZXNdIHdpbGwgYmUgYSBzdXBlcnNldCBvZiB0aGUgY3VycmVudCB2YWx1ZS4KICBib29sIF9vblF1ZXVlRW1wdHkoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHJlY2VudENsYXNzZXMpIHsKICAgIHJldHVybiBsaXN0ZW5lci5vblF1ZXVlRW1wdHkodGhpcywgcmVjZW50Q2xhc3Nlcyk7CiAgfQp9CgpjbGFzcyBFbnF1ZXVlckltcGxJbXBhY3RWaXNpdG9yIGltcGxlbWVudHMgV29ybGRJbXBhY3RWaXNpdG9yIHsKICBmaW5hbCBFbnF1ZXVlckltcGwgZW5xdWV1ZXI7CgogIEVucXVldWVySW1wbEltcGFjdFZpc2l0b3IodGhpcy5lbnF1ZXVlcik7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIER5bmFtaWNVc2UgZHluYW1pY1VzZSkgewogICAgZW5xdWV1ZXIucHJvY2Vzc0R5bmFtaWNVc2UoZHluYW1pY1VzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIFN0YXRpY1VzZSBzdGF0aWNVc2UpIHsKICAgIGVucXVldWVyLnByb2Nlc3NTdGF0aWNVc2UobWVtYmVyLCBzdGF0aWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB0eXBlVXNlKSB7CiAgICBlbnF1ZXVlci5wcm9jZXNzVHlwZVVzZShtZW1iZXIsIHR5cGVVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0YW50VXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIENvbnN0YW50VXNlIGNvbnN0YW50VXNlKSB7CiAgICBlbnF1ZXVlci5wcm9jZXNzQ29uc3RhbnRVc2UoY29uc3RhbnRVc2UpOwogIH0KfQoKLy8vIEludGVyZmFjZSBmb3IgY3JlYXRpbmcgd29yayBpdGVtcyBmb3IgZW5xdWV1ZWQgbWVtYmVyIGVudGl0aWVzLgphYnN0cmFjdCBjbGFzcyBXb3JrSXRlbUJ1aWxkZXIgewogIFdvcmtJdGVtIGNyZWF0ZVdvcmtJdGVtKGNvdmFyaWFudCBNZW1iZXJFbnRpdHkgZW50aXR5KTsKfQqCMQBOTjwBGQElAR4uKRY3ICYhHh4mNSMlMSYbCRUUExcRFSRJHCUnASkiLRsBDCABISIiATQxATQmDB0oPhgEATI1MksEASIgOSMnTUxEICwGFQQCARpMSUgWRRMzASEBRiAQAUQeARYBGQEfAScBSVEhQS4uATscLQEwAS4CASJLNDgBTjo6AUhIEDkBUTItAUoyQQFMOjgBSjo5ARROAUgGSUlQGQZHUEhRFQZBUSVNATAYAS8tAgEvGSRDPTE0IQFCOwE4AQxGISY3BAEMEVAXLh4EAUJJMU0kOTYiTSQKCAgRBAIBMDAqMQEMGxUMIwFFITYqJioBDB4BJQE4AVE/JQE/SC06BAEMPAEMKwEMHR1DBgQBDFABDEIlID8EATUmHyczRCUuQQgEAQwuLzs5BAEMJSs7HyhQCCgEATNDLR4GOSkGNzozBgQBMEMyHz9HPxc7LwYxOi4GBAEMMjZFCAQBDDU3PEYrIQgIBAEMRDVDUhQgLzU0SBEREQgIBAEMPiIcJixCDy0oOA8hIyAPIE0iCg8mUSIKDyhKIgoPJSg/Cg8iJk8PNCowDwYEASkpBAFBOQQBOSY8LDUEASkJIj8tPhM/CghKHiAlKAgOTQQBDCgRJRsTBgQBDC47HgQBDCoBDDImAQwtAQwmAVAPPzMEAVEeLTlBIgEZEE0GATYnLxoEAU9ET1BRUDw3BAIBQB8BLAEMRSwEAQxCMgQBDDwuBAEMSC4EAgFEIToCASFwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbnF1ZXVlLmRhcnQ0c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZnJvbnRlbmRfc3RyYXRlZ3kuZGFydIudLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5mcm9udGVuZF9zdHJhdGVneTsKCmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi90YXNrcy5kYXJ0JzsKaW1wb3J0ICdjb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnY29tcGlsZXIuZGFydCcgc2hvdyBDb21waWxlcjsKaW1wb3J0ICdkZWZlcnJlZF9sb2FkLmRhcnQnIHNob3cgRGVmZXJyZWRMb2FkVGFzazsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICdlbnF1ZXVlLmRhcnQnOwppbXBvcnQgJ2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKaW1wb3J0ICdrZXJuZWwvbG9hZGVyLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JzsKCi8vLyBTdHJhdGVneSBwYXR0ZXJuIHRoYXQgZGVmaW5lcyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBpbnB1dCBmb3JtYXQgYW5kCi8vLyB0aGUgcmVzb2x2ZWQgZWxlbWVudCBtb2RlbC4KYWJzdHJhY3QgY2xhc3MgRnJvbnRlbmRTdHJhdGVneSB7CiAgLy8vIFJlZ2lzdGVycyBhIHNldCBvZiBsb2FkZWQgbGlicmFyaWVzIHdpdGggdGhpcyBzdHJhdGVneS4KICB2b2lkIHJlZ2lzdGVyTG9hZGVkTGlicmFyaWVzKEtlcm5lbFJlc3VsdCByZXN1bHQpOwoKICAvLy8gUmV0dXJucyB0aGUgW0VsZW1lbnRFbnZpcm9ubWVudF0gZm9yIHRoZSBlbGVtZW50IG1vZGVsIHVzZWQgaW4gdGhpcwogIC8vLyBzdHJhdGVneS4KICBFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudDsKCiAgLy8vIFJldHVybnMgdGhlIFtDb21tb25FbGVtZW50c10gZm9yIHRoZSBlbGVtZW50IG1vZGVsIHVzZWQgaW4gdGhpcwogIC8vLyBzdHJhdGVneS4KICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CgogIE5hdGl2ZUJhc2ljRGF0YSBnZXQgbmF0aXZlQmFzaWNEYXRhOwoKICAvLy8gQ3JlYXRlcyBhIFtEZWZlcnJlZExvYWRUYXNrXSBmb3IgdGhlIGVsZW1lbnQgbW9kZWwgdXNlZCBpbiB0aGlzIHN0cmF0ZWd5LgogIERlZmVycmVkTG9hZFRhc2sgY3JlYXRlRGVmZXJyZWRMb2FkVGFzayhDb21waWxlciBjb21waWxlcik7CgogIC8vLyBTdXBwb3J0IGZvciBjbGFzc2lmeWluZyBgbm9TdWNoTWV0aG9kYCBpbXBsZW1lbnRhdGlvbnMuCiAgTm9TdWNoTWV0aG9kUmVnaXN0cnkgZ2V0IG5vU3VjaE1ldGhvZFJlZ2lzdHJ5OwoKICAvLy8gQ2FsbGVkIGJlZm9yZSBwcm9jZXNzaW5nIG9mIHRoZSByZXNvbHV0aW9uIHF1ZXVlIGlzIHN0YXJ0ZWQuCiAgdm9pZCBvblJlc29sdXRpb25TdGFydCgpOwoKICBSZXNvbHV0aW9uRW5xdWV1ZXIgY3JlYXRlUmVzb2x1dGlvbkVucXVldWVyKAogICAgICBDb21waWxlclRhc2sgdGFzaywgQ29tcGlsZXIgY29tcGlsZXIpOwoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIHJlc29sdXRpb24gcXVldWUgaGFzIGJlZW4gY2xvc2VkLgogIHZvaWQgb25SZXNvbHV0aW9uRW5kKCk7CgogIC8vLyBDb21wdXRlcyB0aGUgbWFpbiBmdW5jdGlvbiBmcm9tIFttYWluTGlicmFyeV0gYWRkaW5nIGFkZGl0aW9uYWwgd29ybGQKICAvLy8gaW1wYWN0IHRvIFtpbXBhY3RCdWlsZGVyXS4KICBGdW5jdGlvbkVudGl0eSBjb21wdXRlTWFpbihXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcik7CgogIC8vLyBDcmVhdGVzIGEgW1NvdXJjZVNwYW5dIGZyb20gW3NwYW5uYWJsZV0gaW4gY29udGV4dCBvZiBbY3VycmVudEVsZW1lbnRdLgogIFNvdXJjZVNwYW4gc3BhbkZyb21TcGFubmFibGUoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgRW50aXR5IGN1cnJlbnRFbGVtZW50KTsKfQoKLy8vIENsYXNzIHRoYXQgcGVyZm9ybXMgdGhlIG1lY2hhbmljcyB0byBpbnZlc3RpZ2F0ZSBhbm5vdGF0aW9ucyBpbiB0aGUgY29kZS4KYWJzdHJhY3QgY2xhc3MgQW5ub3RhdGlvblByb2Nlc3NvciB7CiAgdm9pZCBleHRyYWN0TmF0aXZlQW5ub3RhdGlvbnMoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgdm9pZCBleHRyYWN0SnNJbnRlcm9wQW5ub3RhdGlvbnMoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgdm9pZCBwcm9jZXNzSnNJbnRlcm9wQW5ub3RhdGlvbnMoCiAgICAgIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGEsIE5hdGl2ZURhdGFCdWlsZGVyIG5hdGl2ZURhdGFCdWlsZGVyKTsKfQoKLy8vIENsYXNzIHRoYXQgZGVsZXRlcyB0aGUgY29udGVudHMgb2YgYW4gW1dvcmxkSW1wYWN0XSBjYWNoZS4KLy8gVE9ETyhyZWRlbXB0aW9uKTogdGhpcyBjYW4gYmUgZGVsZXRlZCB3aGVuIHdlIHN1bnNldCB0aGUgb2xkIGZyb250IGVuZC4KYWJzdHJhY3QgY2xhc3MgSW1wYWN0Q2FjaGVEZWxldGVyIHsKICAvLy8gUmVtb3ZlcyB0aGUgW1dvcmxkSW1wYWN0XSBmb3IgW2VsZW1lbnRdIGZyb20gdGhlIHJlc29sdXRpb24gY2FjaGUuIExhdGVyCiAgLy8vIGNhbGxzIHRvIFtnZXRXb3JsZEltcGFjdF0gb3IgW2NvbXB1dGVXb3JsZEltcGFjdF0gcmV0dXJucyBhbiBlbXB0eSBpbXBhY3QuCiAgdm9pZCB1bmNhY2hlV29ybGRJbXBhY3QoRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmVtb3ZlcyB0aGUgW1dvcmxkSW1wYWN0XXMgZm9yIGFsbCBbRWxlbWVudF1zIGluIHRoZSByZXNvbHV0aW9uIGNhY2hlLiAsCiAgLy8vIExhdGVyIGNhbGxzIHRvIFtnZXRXb3JsZEltcGFjdF0gb3IgW2NvbXB1dGVXb3JsZEltcGFjdF0gcmV0dXJucyBhbiBlbXB0eQogIC8vLyBpbXBhY3QuCiAgdm9pZCBlbXB0eUNhY2hlKCk7Cn0KUQBOTjwBIwEWHB8mMyEXJjIdJQFOICI+NQFKEC0BRhAlAScBUD4BPjEBQxwBLy0BOBoBTCFAAU5MAgFOJTgBOwEkTQIBP0skT1ErAU9PDhUCAStwYWNrYWdlOmNvbXBpbGVyL3NyYy9mcm9udGVuZF9zdHJhdGVneS5kYXJ0QXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0wABhhy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuYWJzdHJhY3RfdmFsdWVfZG9tYWluOwoKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnIHNob3cgQ29uc3RhbnRWYWx1ZSwgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZTsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JyBzaG93IERhcnRUeXBlOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwoKLy8vIEVudW0tbGlrZSB2YWx1ZXMgdXNlZCBmb3IgcmVwb3J0aW5nIGtub3duIGFuZCB1bmtub3duIHRydXRoIHZhbHVlcy4KY2xhc3MgQWJzdHJhY3RCb29sIHsKICBmaW5hbCBib29sIF92YWx1ZTsKCiAgY29uc3QgQWJzdHJhY3RCb29sLl8odGhpcy5fdmFsdWUpOwoKICBib29sIGdldCBpc0RlZmluaXRlbHlUcnVlID0+IF92YWx1ZSA9PSB0cnVlOwoKICBib29sIGdldCBpc1BvdGVudGlhbGx5VHJ1ZSA9PiBfdmFsdWUgIT0gZmFsc2U7CgogIGJvb2wgZ2V0IGlzRGVmaW5pdGVseUZhbHNlID0+IF92YWx1ZSA9PSBmYWxzZTsKCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWxseUZhbHNlID0+IF92YWx1ZSAhPSB0cnVlOwoKICAvLy8gQSB2YWx1ZSBvZiBgQWJzdHJhY3QuVHJ1ZWAgaXMgdXNlZCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBrbm93biBfYWx3YXlzXyB0bwogIC8vLyBiZSB0cnVlLgogIHN0YXRpYyBjb25zdCBBYnN0cmFjdEJvb2wgVHJ1ZSA9IGNvbnN0IEFic3RyYWN0Qm9vbC5fKHRydWUpOwoKICAvLy8gQSB2YWx1ZSBvZiBgQWJzdHJhY3QuRmFsc2VgIGlzIHVzZWQgd2hlbiB0aGUgcHJvcGVydHkgaXMga25vd24gX25ldmVyXyB0bwogIC8vLyBiZSB0cnVlLgogIHN0YXRpYyBjb25zdCBBYnN0cmFjdEJvb2wgRmFsc2UgPSBjb25zdCBBYnN0cmFjdEJvb2wuXyhmYWxzZSk7CgogIC8vLyBBIHZhbHVlIG9mIGBBYnN0cmFjdC5NYXliZWAgaXMgdXNlZCB3aGVuIHRoZSBwcm9wZXJ0eSBtaWdodCBvciBtaWdodCBub3QKICAvLy8gYmUgdHJ1ZS4KICBzdGF0aWMgY29uc3QgQWJzdHJhY3RCb29sIE1heWJlID0gY29uc3QgQWJzdHJhY3RCb29sLl8obnVsbCk7CgogIHN0YXRpYyBBYnN0cmFjdEJvb2wgdHJ1ZU9yTWF5YmUoYm9vbCB2YWx1ZSkgPT4gdmFsdWUgPyBUcnVlIDogTWF5YmU7CgogIHN0YXRpYyBBYnN0cmFjdEJvb2wgdHJ1ZU9yRmFsc2UoYm9vbCB2YWx1ZSkgPT4gdmFsdWUgPyBUcnVlIDogRmFsc2U7CgogIHN0YXRpYyBBYnN0cmFjdEJvb2wgbWF5YmVPckZhbHNlKGJvb2wgdmFsdWUpID0+IHZhbHVlID8gTWF5YmUgOiBGYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ0Fic3RyYWN0Qm9vbC4ke192YWx1ZSA9PSBudWxsID8gJ01heWJlJyA6IChfdmFsdWUgPyAnVHJ1ZScgOiAnRmFsc2UnKX0nOwp9CgovLy8gU3RyYXRlZ3kgZm9yIHRoZSBhYnN0cmFjdGlvbiBvZiBydW50aW1lIHZhbHVlcyB1c2VkIGJ5IHRoZSBnbG9iYWwgdHlwZQovLy8gaW5mZXJlbmNlLgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgewogIC8vLyBDcmVhdGVzIHRoZSBhYnN0cmFjdCB2YWx1ZSBkb21haW4gZm9yIFtjbG9zZWRXb3JsZF0uCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBjcmVhdGVEb21haW4oSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIENyZWF0ZXMgdGhlIFtTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3ldIHVzZWQgYnkgdGhlIGJhY2tlbmQgZW5xdWV1ZXIuCiAgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5IGNyZWF0ZVNlbGVjdG9yU3RyYXRlZ3koKTsKfQoKLy8vIEEgdmFsdWUgaW4gYW4gYWJzdHJhY3Rpb24gb2YgcnVudGltZSB2YWx1ZXMuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VmFsdWUge30KCi8vLyBBIHBhaXIgb2YgYW4gQWJzdHJhY3RWYWx1ZSBhbmQgYSBwcmVjaXNpb24gZmxhZy4gU2VlCi8vLyBbQWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVGcm9tU3RhdGljVHlwZV0gZm9yIHNlbWFudGljcyBvZiBbaXNQcmVjaXNlXS4KY2xhc3MgQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24gewogIGZpbmFsIEFic3RyYWN0VmFsdWUgYWJzdHJhY3RWYWx1ZTsKICBmaW5hbCBib29sIGlzUHJlY2lzZTsKCiAgY29uc3QgQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24odGhpcy5hYnN0cmFjdFZhbHVlLCB0aGlzLmlzUHJlY2lzZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbigkYWJzdHJhY3RWYWx1ZSwgaXNQcmVjaXNlOiAkaXNQcmVjaXNlKSc7Cn0KCi8vLyBBIHN5c3RlbSB0aGF0IGltcGxlbWVudHMgYW4gYWJzdHJhY3Rpb24gb3ZlciBydW50aW1lIHZhbHVlcy4KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RWYWx1ZURvbWFpbiB7CiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGFuIHVua25vd24gcnVudGltZSB2YWx1ZS4KICBBYnN0cmFjdFZhbHVlIGdldCBkeW5hbWljVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgc3VidHlwZSBvZiBgVHlwZWAgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCB0eXBlVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgc3VidHlwZSBvZiBgRnVuY3Rpb25gIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZnVuY3Rpb25UeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBib29sYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IGJvb2xUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBpbnRgIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgaW50VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgc3VidHlwZSBvZiBgZG91YmxlYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IGRvdWJsZVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHN1YnR5cGUgb2YgYG51bWAgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBudW1UeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBTdHJpbmdgIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgc3RyaW5nVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgc3VidHlwZSBvZiBgTGlzdGAgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBsaXN0VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgc3VidHlwZSBvZiBgU2V0YCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IHNldFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHN1YnR5cGUgb2YgYE1hcGAgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBtYXBUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCB2YWx1ZSBhdCBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IG5vbk51bGxUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgdGhlIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IG51bGxUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBncm93YWJsZSBKYXZhU2NyaXB0IGFycmF5CiAgLy8vIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZ3Jvd2FibGVMaXN0VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgZml4ZWQgc2l6ZSBKYXZhU2NyaXB0IGFycmF5CiAgLy8vIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZml4ZWRMaXN0VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgMzEtYml0IHVuc2lnbmVkIGludGVnZXIgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCB1aW50MzFUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IHVpbnQzMlR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHVuc2lnbmVkIGludGVnZXIgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBwb3NpdGl2ZUludFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGNvbnN0YW50IGxpc3QgbGl0ZXJhbCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IGNvbnN0TGlzdFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGNvbnN0YW50IHNldCBsaXRlcmFsIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgY29uc3RTZXRUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBjb25zdGFudCBtYXAgbGl0ZXJhbCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IGNvbnN0TWFwVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIHRoZSBlbXB0eSBzZXQgb2YgcnVudGltZSB2YWx1ZXMuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZW1wdHlUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBpbnN0YW5jZSBhdCBydW50aW1lIG9mIHRoZQogIC8vLyBgSXRlcmFibGVgIGNsYXNzIHVzZWQgZm9yIHRoZSBgc3luYypgIGltcGxlbWVudGF0aW9uLgogIEFic3RyYWN0VmFsdWUgZ2V0IHN5bmNTdGFySXRlcmFibGVUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBpbnN0YW5jZSBhdCBydW50aW1lIG9mIHRoZQogIC8vLyBgRnV0dXJlYCBjbGFzcyB1c2VkIGZvciB0aGUgYGFzeW5jYCBpbXBsZW1lbnRhdGlvbi4KICBBYnN0cmFjdFZhbHVlIGdldCBhc3luY0Z1dHVyZVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGluc3RhbmNlIGF0IHJ1bnRpbWUgb2YgdGhlCiAgLy8vIGBTdHJlYW1gIGNsYXNzIHVzZWQgZm9yIHRoZSBgYXN5bmMqYCBpbXBsZW1lbnRhdGlvbi4KICBBYnN0cmFjdFZhbHVlIGdldCBhc3luY1N0YXJTdHJlYW1UeXBlOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RWYWx1ZV0gYW5kIGEgcHJlY2lzaW9uIGZsYWcuCiAgLy8vCiAgLy8vIENyZWF0ZXMgYW4gW0Fic3RyYWN0VmFsdWVdIGNvcnJlc3BvbmRpbmcgdG8gYW4gZXhwcmVzc2lvbiBvZiB0aGUgZ2l2ZW4KICAvLy8gc3RhdGljIFt0eXBlXSBhbmQgW2NsYXNzUmVsYXRpb25dLCBhbmQgYW4gYGlzUHJlY2lzZWAgZmxhZyB0aGF0IGlzIGB0cnVlYAogIC8vLyBpZiB0aGUgW0Fic3RyYWN0VmFsdWVdIHByZWNpc2VseSByZXByZXNlbnRzIHRoZSBbdHlwZV0sIG9yIGBmYWxzZWAgaWYgdGhlCiAgLy8vIFtBYnN0cmFjdFZhbHVlXSBpcyBhbiBhcHByb3hpbWF0aW9uLgogIC8vLwogIC8vLyBJZiBgaXNQcmVjaXNlYCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIGFic3RyYWN0IHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gW3R5cGVdLgogIC8vLwogIC8vLyBJZiBgaXNQcmVjaXNlYCBpcyBgZmFsc2VgIHRoZW4gdGhlIGFic3RyYWN0IHZhbHVlIGNvbnRhaW5zIGFsbCB0eXBlcyBpbgogIC8vLyBbdHlwZV0gYnV0IG1pZ2h0IGNvbnRhaW4gbW9yZS4gVHdvIGRpZmZlcmVudCBEYXJ0IHR5cGVzIGNhbiBoYXZlIHRoZSBzYW1lCiAgLy8vIGFwcHJveGltYXRpb24sIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiBub3QgdG8gbWFrZSBzdWJ0eXBlIGp1ZGdlbWVudHMgZnJvbQogIC8vLyBpbXByZWNpc2UgYWJzdHJhY3QgdmFsdWVzLgogIC8vLwogIC8vLyBUaGUgdHlwZSBgVGAgd2hlcmUgYFRgIGlzIGEgdHlwZSBwYXJhbWV0ZXIgd291bGQgYmUgbW9kZWxsZWQgYnkgYW4KICAvLy8gaW1wcmVjaXNlIGFic3RyYWN0IHZhbHVlIHR5cGUgc2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgYFRgIGlzCiAgLy8vIGluc3RhbnRpYXRlZC4gSXQgbWlnaHQgYmUgYXBwcm94aW1hdGVkIGJ5IHRoZSBib3VuZCBvZiBgVGAuICBgTGlzdDxUPmAKICAvLy8gd2hlcmUgYFRgIGlzIGEgdHlwZSBwYXJhbWV0ZXIgd291bGQgYmUgbW9kZWxsZWQgYXMgaW1wcmVjaXNlIGZvciB0aGUgc2FtZQogIC8vLyByZWFzb24uCiAgLy8vCiAgLy8vIElmIHRoZSBhYnN0cmFjdCB2YWx1ZSBkb21haW4gZG9lcyBub3QgdHJhY2sgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgKGUuZy4KICAvLy8gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdHlwZS1tYXNrcyksIHRoZW4gYExpc3Q8aW50PmAgd291bGQgbmVlZCB0bwogIC8vLyBiZSBtb2RlbGxlZCBieSBhbiBpbXByZWNpc2UgYWJzdHJhY3QgdmFsdWUuIGBMaXN0PGR5bmFtaWM+YCBtaWdodCBiZSB0aGUKICAvLy8gaW1wcmVjaXNlIGFwcHJveGltYXRpb24uCiAgLy8vCiAgLy8vIEluIHRoZSBjb250ZXh0IG9mIGEgcnVuLXRpbWUgdHlwZSBjaGVjaywgYW4gaW1wcmVjaXNlIGFic3RyYWN0IHZhbHVlIGNhbgogIC8vLyBiZSB1c2VkIHRvIGNvbXB1dGUgYW4gb3V0cHV0IHR5cGUgYnkgbmFycm93aW5nIHRoZSBpbnB1dCB0eXBlLCBidXQgb25seSBhCiAgLy8vIHByZWNpc2UgYWJzdHJhY3QgdmFsdWUgY291bGQgYmUgdXNlZCB0byByZW1vdmUgdGhlIGNoZWNrIG9uIHRoZSBiYXNpcyBvZgogIC8vLyB0aGUgaW5wdXQncyBhYnN0cmFjdCB0eXBlLiBUaGUgY2hlY2sgY2FuIG9ubHkgYmUgcmVtb3ZlZCB3aXRoIGFkZGl0aW9uYWwKICAvLy8gcmVhc29uaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBhIGRvbWluYXRpbmcgY2hlY2sgdXNlcyB0aGUgc2FtZSB0eXBlCiAgLy8vIGV4cHJlc3Npb24uCiAgQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24gY3JlYXRlRnJvbVN0YXRpY1R5cGUoRGFydFR5cGUgdHlwZSwKICAgICAge0NsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbiA9IENsYXNzUmVsYXRpb24uc3VidHlwZSwgYm9vbCBudWxsYWJsZX0pOwoKICAvLy8gQ3JlYXRlcyBhbiBbQWJzdHJhY3RWYWx1ZV0gZm9yIGEgbm9uLW51bGwgZXhhY3QgaW5zdGFuY2Ugb2YgW2Nsc10uCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVOb25OdWxsRXhhY3QoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIENyZWF0ZXMgYW4gW0Fic3RyYWN0VmFsdWVdIGZvciBhIHBvdGVudGlhbGx5IG51bGwgZXhhY3QgaW5zdGFuY2Ugb2YgW2Nsc10uCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVOdWxsYWJsZUV4YWN0KENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBDcmVhdGVzIGFuIFtBYnN0cmFjdFZhbHVlXSBmb3IgYSBub24tbnVsbCBpbnN0YW5jZSB0aGF0IGV4dGVuZHMgW2Nsc10uCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVOb25OdWxsU3ViY2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIENyZWF0ZXMgYW4gW0Fic3RyYWN0VmFsdWVdIGZvciBhIG5vbi1udWxsIGluc3RhbmNlIHRoYXQgaW1wbGVtZW50cyBbY2xzXS4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU5vbk51bGxTdWJ0eXBlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBDcmVhdGVzIGFuIFtBYnN0cmFjdFZhbHVlXSBmb3IgYSBwb3RlbnRpYWxseSBudWxsIGluc3RhbmNlIHRoYXQgaW1wbGVtZW50cwogIC8vLyBbY2xzXS4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU51bGxhYmxlU3VidHlwZShDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBuYXRpdmUgdHlwZWQKICAvLy8gYXJyYXkgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzVHlwZWRBcnJheShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBjb3VsZCBiZSBhIG5hdGl2ZQogIC8vLyB0eXBlZCBhcnJheSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBjb3VsZEJlVHlwZWRBcnJheShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIHRoZSBhYnN0cmFjdCBbdmFsdWVdIHRoYXQgZXhjbHVkZXMgYG51bGxgLgogIEFic3RyYWN0VmFsdWUgZXhjbHVkZU51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyB0aGUgdmVyc2lvbiBvZiB0aGUgYWJzdHJhY3QgW3ZhbHVlXSB0aGF0IGluY2x1ZGVzIGBudWxsYC4KICBBYnN0cmFjdFZhbHVlIGluY2x1ZGVOdWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGNvbnRhaW5zCiAgLy8vIGluc3RhbmNlcyBvZiBbY2xzXSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBjb250YWluc1R5cGUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBvbmx5IGNvbnRhaW5zCiAgLy8vIHN1YnR5cGVzIG9mIFtjbHNdIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBjb250YWluc09ubHlUeXBlKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlLCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYW4gaW5zdGFuY2Ugb2YKICAvLy8gW2Nsc10gb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWVyZ2UgdGhpcyB3aXRoIFtpc0luc3RhbmNlT2ZdLgogIEFic3RyYWN0Qm9vbCBpc0luc3RhbmNlT2ZPck51bGwoCiAgICAgIGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlLCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMga25vd24gdG8gYmUgYW4KICAvLy8gaW5zdGFuY2Ugb2YgW2Nsc10gYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNJbnN0YW5jZU9mKEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBlbXB0eSBzZXQgb2YKICAvLy8gcnVudGltZSB2YWx1ZXMuCiAgQWJzdHJhY3RCb29sIGlzRW1wdHkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBub24tbnVsbAogIC8vLyBleGFjdCBjbGFzcyBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0V4YWN0KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGFuIGV4YWN0IGNsYXNzCiAgLy8vIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0V4YWN0T3JOdWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDbGFzc0VudGl0eV0gaWYgdGhpcyBbdmFsdWVdIGlzIGEgbm9uLW51bGwgaW5zdGFuY2Ugb2YgYW4KICAvLy8gZXhhY3QgY2xhc3MgYXQgcnVudGltZSwgYW5kIGBudWxsYCBvdGhlcndpc2UuCiAgQ2xhc3NFbnRpdHkgZ2V0RXhhY3RDbGFzcyhjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBgbnVsbGAgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNOdWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgSmF2YVNjcmlwdAogIC8vLyBib29sLCBudW1iZXIsIHN0cmluZywgYXJyYXkgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgSmF2YVNjcmlwdAogIC8vLyBudW1iZXIgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVOdW1iZXIoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIGJvb2wgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVCb29sZWFuKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgSmF2YVNjcmlwdAogIC8vLyBhcnJheSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZUFycmF5KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgSmF2YVNjcmlwdAogIC8vLyBzdHJpbmcsIGFycmF5LCBuYXRpdmUgSFRNTCBsaXN0IG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0luZGV4YWJsZVByaW1pdGl2ZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIGZpeGVkLXNpemUKICAvLy8gb3IgY29uc3RhbnQgSmF2YVNjcmlwdCBhcnJheSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNGaXhlZEFycmF5KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgZ3Jvd2FibGUKICAvLy8gSmF2YVNjcmlwdCBhcnJheSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNFeHRlbmRhYmxlQXJyYXkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBtdXRhYmxlCiAgLy8vIEphdmFTY3JpcHQgYXJyYXkgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUFycmF5KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgbXV0YWJsZQogIC8vLyBKYXZhU2NyaXB0IGFycmF5LCBuYXRpdmUgSFRNTCBsaXN0IG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc011dGFibGVJbmRleGFibGUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIGFycmF5IG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0FycmF5KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgSmF2YVNjcmlwdAogIC8vLyBzdHJpbmcgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVTdHJpbmcoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYW4gaW50ZXJjZXB0b3IKICAvLy8gYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNJbnRlcmNlcHRvcihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1udWxsCiAgLy8vIGludGVnZXIgdmFsdWUgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNJbnRlZ2VyKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgbm9uLW51bGwgMzIKICAvLy8gYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNVSW50MzIoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBub24tbnVsbCAzMQogIC8vLyBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1udWxsCiAgLy8vIHVuc2lnbmVkIGludGVnZXIgdmFsdWUgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNQb3NpdGl2ZUludGVnZXIoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYW4gdW5zaWduZWQKICAvLy8gaW50ZWdlciB2YWx1ZSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNQb3NpdGl2ZUludGVnZXJPck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYW4gaW50ZWdlcgogIC8vLyB2YWx1ZSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNJbnRlZ2VyT3JOdWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgbm9uLW51bGwKICAvLy8gSmF2YVNjcmlwdCBudW1iZXIgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNOdW1iZXIoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIG51bWJlciBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNOdW1iZXJPck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBub24taW50ZWdlcgogIC8vLyBudW1iZXIgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNEb3VibGUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBub24taW50ZWdlcgogIC8vLyBudW1iZXIgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzRG91YmxlT3JOdWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgSmF2YVNjcmlwdAogIC8vLyBib29sIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzQm9vbGVhbihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIEphdmFTY3JpcHQKICAvLy8gYm9vbCBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNCb29sZWFuT3JOdWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgSmF2YVNjcmlwdAogIC8vLyBzdHJpbmcgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNTdHJpbmcoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIHN0cmluZyBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNTdHJpbmdPck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gYSBKYXZhU2NyaXB0CiAgLy8vIHByaW1pdGl2ZSwgcG9zc2libGUgYG51bGxgLgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZU9yTnVsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIFtBYnN0cmFjdFZhbHVlXSBmb3IgdGhlIHJ1bnRpbWUgdmFsdWVzIGNvbnRhaW5lZCBpbiBlaXRoZXIgW2FdIG9yCiAgLy8vIFtiXS4KICBBYnN0cmFjdFZhbHVlIHVuaW9uKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIGEsIGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIGIpOwoKICAvLy8gUmV0dXJucyBbQWJzdHJhY3RWYWx1ZV0gZm9yIHRoZSBydW50aW1lIHZhbHVlcyBjb250YWluZWQgaW4gYXQgbGVhc3Qgb25lCiAgLy8vIG9mIFt2YWx1ZXNdLgogIEFic3RyYWN0VmFsdWUgdW5pb25PZk1hbnkoSXRlcmFibGU8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzKTsKCiAgLy8vIFJldHVybnMgW0Fic3RyYWN0VmFsdWVdIGZvciB0aGUgcnVudGltZSB2YWx1ZXMgdGhhdCBbYV0gYW5kIFtiXSBoYXZlIGluCiAgLy8vIGNvbW1vbi4KICBBYnN0cmFjdFZhbHVlIGludGVyc2VjdGlvbigKICAgICAgY292YXJpYW50IEFic3RyYWN0VmFsdWUgYSwgY292YXJpYW50IEFic3RyYWN0VmFsdWUgYik7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW2FdIGFuZCBbYl0gaGF2ZSBubwogIC8vLyBydW50aW1lIHZhbHVlcyBpbiBjb21tb24uCiAgQWJzdHJhY3RCb29sIGFyZURpc2pvaW50KAogICAgICBjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSBhLCBjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSBiKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbYV0gY29udGFpbnMgYWxsIG5vbi1udWxsCiAgLy8vIHJ1bnRpbWUgdmFsdWVzLgogIEFic3RyYWN0Qm9vbCBjb250YWluc0FsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSBhKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbQWJzdHJhY3RWYWx1ZV0gY29ycmVzcG9uZGluZyB0byB0aGUgY29uc3RhbnQgW3ZhbHVlXS4KICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVBYnN0cmFjdFZhbHVlRm9yQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIHJlcHJlc2VudHMgYSBjb250YWluZXIgdmFsdWUgYXQgcnVudGltZS4KICBib29sIGlzQ29udGFpbmVyKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIENyZWF0ZXMgYSBjb250YWluZXIgdmFsdWUgc3BlY2lhbGl6YXRpb24gb2YgW29yaWdpbmFsVmFsdWVdIHdpdGggdGhlCiAgLy8vIGluZmVycmVkIFtlbGVtZW50XSBydW50aW1lIHZhbHVlIGFuZCBpbmZlcnJlZCBydW50aW1lIFtsZW5ndGhdLgogIC8vLwogIC8vLyBUaGUgW2FsbG9jYXRpb25Ob2RlXSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgcGFydGljdWxhciBtYXAgYWxsb2NhdGlvbi4KICAvLy8gVGhlIFthbGxvY2F0aW9uRWxlbWVudF0gaXMgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcuCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVDb250YWluZXJWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlLAogICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZSwKICAgICAgaW50IGxlbmd0aCk7CgogIC8vLyBSZXR1cm5zIHRoZSBlbGVtZW50IHR5cGUgb2YgW3ZhbHVlXSBpZiBpdCByZXByZXNlbnRzIGEgY29udGFpbmVyIHZhbHVlCiAgLy8vIGF0IHJ1bnRpbWUuIFJldHVybnMgW2R5bmFtaWNUeXBlXSBvdGhlcndpc2UuCiAgQWJzdHJhY3RWYWx1ZSBnZXRDb250YWluZXJFbGVtZW50VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybiB0aGUga25vd24gbGVuZ3RoIG9mIFt2YWx1ZV0gaWYgaXQgcmVwcmVzZW50cyBhIGNvbnRhaW5lciB2YWx1ZQogIC8vLyBhdCBydW50aW1lLiBSZXR1cm5zIGBudWxsYCBpZiB0aGUgbGVuZ3RoIGlzIHVua25vd24gb3IgaWYgW3ZhbHVlXSBkb2Vzbid0CiAgLy8vIHJlcHJlc2VudCBhIGNvbnRhaW5lciB2YWx1ZSBhdCBydW50aW1lLgogIGludCBnZXRDb250YWluZXJMZW5ndGgoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIHJlcHJlc2VudHMgYSBzZXQgdmFsdWUgYXQgcnVudGltZS4KICBib29sIGlzU2V0KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIENyZWF0ZXMgYSBzZXQgdmFsdWUgc3BlY2lhbGl6YXRpb24gb2YgW29yaWdpbmFsVmFsdWVdIHdpdGggdGhlIGluZmVycmVkCiAgLy8vIFtlbGVtZW50VHlwZV0gcnVudGltZSB2YWx1ZS4KICAvLy8KICAvLy8gVGhlIFthbGxvY2F0aW9uTm9kZV0gaXMgdXNlZCB0byBpZGVudGlmeSB0aGlzIHBhcnRpY3VsYXIgc2V0IGFsbG9jYXRpb24uCiAgLy8vIFRoZSBbYWxsb2NhdGlvbkVsZW1lbnRdIGlzIHVzZWQgb25seSBmb3IgZGVidWdnaW5nLgogIEFic3RyYWN0VmFsdWUgY3JlYXRlU2V0VmFsdWUoCiAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSwKICAgICAgT2JqZWN0IGFsbG9jYXRpb25Ob2RlLAogICAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWUgZWxlbWVudFR5cGUpOwoKICAvLy8gUmV0dXJucyB0aGUgZWxlbWVudCB0eXBlIG9mIFt2YWx1ZV0gaWYgaXQgcmVwcmVzZW50cyBhIHNldCB2YWx1ZSBhdAogIC8vLyBydW50aW1lLiBSZXR1cm5zIFtkeW5hbWljVHlwZV0gb3RoZXJ3aXNlLgogIEFic3RyYWN0VmFsdWUgZ2V0U2V0RWxlbWVudFR5cGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIHJlcHJlc2VudHMgYSBtYXAgdmFsdWUgYXQgcnVudGltZS4KICBib29sIGlzTWFwKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIENyZWF0ZXMgYSBtYXAgdmFsdWUgc3BlY2lhbGl6YXRpb24gb2YgW29yaWdpbmFsVmFsdWVdIHdpdGggdGhlIGluZmVycmVkCiAgLy8vIFtrZXldIGFuZCBbdmFsdWVdIHJ1bnRpbWUgdmFsdWVzLgogIC8vLwogIC8vLyBUaGUgW2FsbG9jYXRpb25Ob2RlXSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgcGFydGljdWxhciBtYXAgYWxsb2NhdGlvbi4KICAvLy8gVGhlIFthbGxvY2F0aW9uRWxlbWVudF0gaXMgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcuCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVNYXBWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlLAogICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZSBrZXksCiAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyB0aGUga2V5IHR5cGUgb2YgW3ZhbHVlXSBpZiBpdCByZXByZXNlbnRzIGEgbWFwIHZhbHVlIGF0IHJ1bnRpbWUuCiAgLy8vIFJldHVybnMgW2R5bmFtaWNUeXBlXSBvdGhlcndpc2UuCiAgQWJzdHJhY3RWYWx1ZSBnZXRNYXBLZXlUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgdHlwZSBvZiBbdmFsdWVdIGlmIGl0IHJlcHJlc2VudHMgYSBtYXAgdmFsdWUgYXQgcnVudGltZS4KICAvLy8gUmV0dXJucyBbZHluYW1pY1R5cGVdIG90aGVyd2lzZS4KICBBYnN0cmFjdFZhbHVlIGdldE1hcFZhbHVlVHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt2YWx1ZV0gcmVwcmVzZW50cyBhIGRpY3Rpb25hcnkgdmFsdWUsIHRoYXQgaXMsIGEgbWFwCiAgLy8vIHdpdGggc3RyaW5ncyBhcyBrZXlzLCBhdCBydW50aW1lLgogIGJvb2wgaXNEaWN0aW9uYXJ5KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIENyZWF0ZXMgYSBkaWN0aW9uYXJ5IHZhbHVlIHNwZWNpYWxpemF0aW9uIG9mIFtvcmlnaW5hbFZhbHVlXSB3aXRoIHRoZQogIC8vLyBpbmZlcnJlZCBba2V5XSBhbmQgW3ZhbHVlXSBydW50aW1lIHZhbHVlcy4KICAvLy8KICAvLy8gVGhlIFthbGxvY2F0aW9uTm9kZV0gaXMgdXNlZCB0byBpZGVudGlmeSB0aGlzIHBhcnRpY3VsYXIgbWFwIGFsbG9jYXRpb24uCiAgLy8vIFRoZSBbYWxsb2NhdGlvbkVsZW1lbnRdIGlzIHVzZWQgb25seSBmb3IgZGVidWdnaW5nLgogIEFic3RyYWN0VmFsdWUgY3JlYXRlRGljdGlvbmFyeVZhbHVlKAogICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUsCiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlIGtleSwKICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSwKICAgICAgTWFwPFN0cmluZywgQWJzdHJhY3RWYWx1ZT4gbWFwcGluZ3MpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3ZhbHVlXSBpcyBhIGRpY3Rpb25hcnkgdmFsdWUgd2hpY2ggY29udGFpbnMgW2tleV0gYXMKICAvLy8gYSBrZXkuCiAgYm9vbCBjb250YWluc0RpY3Rpb25hcnlLZXkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgU3RyaW5nIGtleSk7CgogIC8vLyBSZXR1cm5zIHRoZSB2YWx1ZSB0eXBlIGZvciBba2V5XSBpbiBbdmFsdWVdIGlmIGl0IHJlcHJlc2VudHMgYSBkaWN0aW9uYXJ5CiAgLy8vIHZhbHVlIGF0IHJ1bnRpbWUuIFJldHVybnMgW2R5bmFtaWNUeXBlXSBvdGhlcndpc2UuCiAgQWJzdHJhY3RWYWx1ZSBnZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgU3RyaW5nIGtleSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbc3BlY2lhbGl6YXRpb25dIGlzIGEgc3BlY2lhbGl6YXRpb24gb2YKICAvLy8gW2dlbmVyYWxpemF0aW9uXS4KICAvLy8KICAvLy8gU3BlY2lhbGl6YXRpb25zIGFyZSBjcmVhdGVkIHRocm91Z2ggW2NyZWF0ZVByaW1pdGl2ZVZhbHVlXSwKICAvLy8gW2NyZWF0ZU1hcFZhbHVlXSwgW2NyZWF0ZURpY3Rpb25hcnlWYWx1ZV0gYW5kIFtjcmVhdGVDb250YWluZXJWYWx1ZV0uCiAgYm9vbCBpc1NwZWNpYWxpemF0aW9uT2YoCiAgICAgIEFic3RyYWN0VmFsdWUgc3BlY2lhbGl6YXRpb24sIEFic3RyYWN0VmFsdWUgZ2VuZXJhbGl6YXRpb24pOwoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgb2Ygd2hpY2ggW3ZhbHVlXSBpcyBhIHNwZWNpYWxpemF0aW9uLiBSZXR1cm4gYG51bGxgIGlmCiAgLy8vIFt2YWx1ZV0gaXMgbm90IGEgc3BlY2lhbGl6YXRpb24uCiAgLy8vCiAgLy8vIFNwZWNpYWxpemF0aW9ucyBhcmUgY3JlYXRlZCB0aHJvdWdoIFtjcmVhdGVQcmltaXRpdmVWYWx1ZV0sCiAgLy8vIFtjcmVhdGVNYXBWYWx1ZV0sIFtjcmVhdGVEaWN0aW9uYXJ5VmFsdWVdIGFuZCBbY3JlYXRlQ29udGFpbmVyVmFsdWVdLgogIEFic3RyYWN0VmFsdWUgZ2V0R2VuZXJhbGl6YXRpb24oQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm4gdGhlIG9iamVjdCBpZGVudGlmeWluZyB0aGUgYWxsb2NhdGlvbiBvZiBbdmFsdWVdIGlmIGl0IGlzIGFuCiAgLy8vIGFsbG9jYXRpb24gYmFzZWQgc3BlY2lhbGl6YXRpb24uIE90aGVyd2lzZSByZXR1cm5zIGBudWxsYC4KICAvLy8KICAvLy8gQWxsb2NhdGlvbiBiYXNlZCBzcGVjaWFsaXphdGlvbnMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBbY3JlYXRlTWFwVmFsdWVdLAogIC8vLyBbY3JlYXRlRGljdGlvbmFyeVZhbHVlXSBhbmQgW2NyZWF0ZUNvbnRhaW5lclZhbHVlXQogIE9iamVjdCBnZXRBbGxvY2F0aW9uTm9kZShBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybiB0aGUgYWxsb2NhdGlvbiBlbGVtZW50IG9mIFt2YWx1ZV0gaWYgaXQgaXMgYW4gYWxsb2NhdGlvbiBiYXNlZAogIC8vLyBzcGVjaWFsaXphdGlvbi4gT3RoZXJ3aXNlIHJldHVybnMgYG51bGxgLgogIC8vLwogIC8vLyBBbGxvY2F0aW9uIGJhc2VkIHNwZWNpYWxpemF0aW9ucyBhcmUgY3JlYXRlZCB0aHJvdWdoIFtjcmVhdGVNYXBWYWx1ZV0sCiAgLy8vIFtjcmVhdGVEaWN0aW9uYXJ5VmFsdWVdIGFuZCBbY3JlYXRlQ29udGFpbmVyVmFsdWVdCiAgTWVtYmVyRW50aXR5IGdldEFsbG9jYXRpb25FbGVtZW50KEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3ZhbHVlXSBhIGtub3duIHByaW1pdGl2ZSBKYXZhU2NyaXB0IHZhbHVlIGF0IHJ1bnRpbWUuCiAgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIENyZWF0ZXMgYSBwcmltaXRpdmUgdmFsdWUgc3BlY2lhbGl6YXRpb24gb2YgW29yaWdpbmFsVmFsdWVdIHdpdGggdGhlCiAgLy8vIGluZmVycmVkIHByaW1pdGl2ZSBjb25zdGFudCBbdmFsdWVdLgogIEFic3RyYWN0VmFsdWUgY3JlYXRlUHJpbWl0aXZlVmFsdWUoCiAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSwgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBwcmltaXRpdmUgSmF2YVNjcmlwdCB2YWx1ZSBvZiBbdmFsdWVdIGlmIGl0IHJlcHJlc2VudHMgYQogIC8vLyBwcmltaXRpdmUgSmF2YVNjcmlwdCB2YWx1ZSBhdCBydW50aW1lLCB2YWx1ZSBhdCBydW50aW1lLiBSZXR1cm5zIGBudWxsYAogIC8vLyBvdGhlcndpc2UuCiAgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSBnZXRQcmltaXRpdmVWYWx1ZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBDb21wdXRlIHRoZSB0eXBlIG9mIGFsbCBwb3RlbnRpYWwgcmVjZWl2ZXJzIG9mIHRoZSBzZXQgb2YgbGl2ZSBbbWVtYmVyc10uCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlUmVjZWl2ZXIoSXRlcmFibGU8TWVtYmVyRW50aXR5PiBtZW1iZXJzKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbbWVtYmVyXSBpcyBhIHBvdGVudGlhbAogIC8vLyB0YXJnZXQgd2hlbiBiZWluZyBpbnZva2VkIG9uIGEgW3JlY2VpdmVyXS4gW25hbWVdIGlzIHVzZWQgdG8gZW5zdXJlCiAgLy8vIGxpYnJhcnkgcHJpdmFjeSBpcyB0YWtlbiBpbnRvIGFjY291bnQuCiAgQWJzdHJhY3RCb29sIGlzVGFyZ2V0aW5nTWVtYmVyKAogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyLCBOYW1lIG5hbWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFtzZWxlY3Rvcl0gaW52b2tlZCBvbiBhCiAgLy8vIFtyZWNlaXZlcl0gY2FuIGhpdCBhIFtub1N1Y2hNZXRob2RdLgogIEFic3RyYWN0Qm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKAogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBTZWxlY3RvciBzZWxlY3Rvcik7CgogIC8vLyBSZXR1cm5zIHRoZSBbQWJzdHJhY3RWYWx1ZV0gZm9yIHRoZSBbcGFyYW1ldGVyVHlwZV0gb2YgYSBuYXRpdmUKICAvLy8gbWV0aG9kLiBNYXkgcmV0dXJuIGBudWxsYCwgZm9yIGV4YW1wbGUsIGlmIFtwYXJhbWV0ZXJUeXBlXSBpcyBub3QgbW9kZWxsZWQKICAvLy8gcHJlY2lzZWx5IGJ5IGFuIFtBYnN0cmFjdFZhbHVlXS4KICBBYnN0cmFjdFZhbHVlIGdldEFic3RyYWN0VmFsdWVGb3JOYXRpdmVNZXRob2RQYXJhbWV0ZXJUeXBlKERhcnRUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyBpZiB0aGUgc2V0IG9mIHJ1bnRpbWUgdmFsdWVzIG9mCiAgLy8vIFtzdWJzZXRdIGFyZSBrbm93biB0byBhbGwgYmUgaW4gdGhlIHNldCBvZiBydW50aW1lIHZhbHVlcyBvZiBbc3VwZXJzZXRdLgogIEFic3RyYWN0Qm9vbCBjb250YWlucyhBYnN0cmFjdFZhbHVlIHN1cGVyc2V0LCBBYnN0cmFjdFZhbHVlIHN1YnNldCk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIGlmIHRoZSBzZXQgb2YgcnVudGltZSB2YWx1ZXMgb2YKICAvLy8gW3N1YnNldF0gYXJlIGtub3duIHRvIGFsbCBiZSBpbiB0aGUgc2V0IG9mIHJ1bnRpbWUgdmFsdWVzIG9mIFtzdXBlcnNldF0uCiAgQWJzdHJhY3RCb29sIGlzSW4oQWJzdHJhY3RWYWx1ZSBzdWJzZXQsIEFic3RyYWN0VmFsdWUgc3VwZXJzZXQpOwoKICAvLy8gUmV0dXJucyB0aGUgW01lbWJlckVudGl0eV0gdGhhdCBpcyBrbm93biB0byBhbHdheXMgYmUgaGl0IGF0IHJ1bnRpbWUKICAvLy8gW3JlY2VpdmVyXS4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgMCBvciBtb3JlIHRoYW4gMSBtZW1iZXIgY2FuIGJlIGhpdCBhdCBydW50aW1lLgogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoQWJzdHJhY3RWYWx1ZSByZWNlaXZlciwgU2VsZWN0b3Igc2VsZWN0b3IpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyBpZiBbdmFsdWVdIGlzIGtub3duIHRvIGJlIGFuCiAgLy8vIGluZGV4YWJsZSBKYXZhU2NyaXB0IHZhbHVlIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzSnNJbmRleGFibGUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUlJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgaWYgW3ZhbHVlXSBpcyBrbm93biB0byBiZSBhbgogIC8vLyBpbmRleGFibGUgb3IgaXRlcmFibGUgSmF2YVNjcmlwdCB2YWx1ZSBhdCBydW50aW1lLgogIC8vLwogIC8vLyBKYXZhU2NyaXB0IGFycmF5cyBhcmUgYm90aCBpbmRleGFibGUgYW5kIGl0ZXJhYmxlIHdoZXJlYXMgSmF2YVNjcmlwdAogIC8vLyBzdHJpbmdzIGFyZSBpbmRleGFibGUgYnV0IG5vdCBpdGVyYWJsZS4KICBBYnN0cmFjdEJvb2wgaXNKc0luZGV4YWJsZUFuZEl0ZXJhYmxlKEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyBpZiBbdmFsdWVdIGlzIGtub3duIHRvIGJlIGEKICAvLy8gSmF2YVNjcmlwdCBpbmRleGFibGUgb2YgZml4ZWQgbGVuZ3RoLgogIEFic3RyYWN0Qm9vbCBpc0ZpeGVkTGVuZ3RoSnNJbmRleGFibGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGNvbXBhY3QgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGZvciBbdmFsdWVdIHVzZWQgZm9yIGRlYnVnZ2luZy4KICBTdHJpbmcgZ2V0Q29tcGFjdFRleHQoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYW4gW0Fic3RyYWN0VmFsdWVdIGZvciB0aGlzIGRvbWFpbiBmcm9tIFtzb3VyY2VdLgogIEFic3RyYWN0VmFsdWUgcmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSk7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW3ZhbHVlXSBmb3IgdGhpcyBkb21haW4gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVBYnN0cmFjdFZhbHVlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKfQqCWwBOTjwBJwFOJCEvIS4kKRgBSBUVASUBLwExATEBMQFQDz8BUA9BAU8PQAFHAUcBSQEMF1ACAUsPJzs+AU44AgExIAE5TSMlGAFIAQwXSwIBQSVEIQFKDx4BTg8iAUoPHgFJDx0BTA8gAUkPHQFMDyABSg8eAUkPHQFJDx0BRyEBQR4BTxImAVESIwFQDyABUA8gAUkPJQFODyMBTQ8iAU0PIgFLHwFQPCoBUDolAVA7KQE3Bk1QUCsGUQZOUE8hBklDTVAOBlBQTx8GT1BPT0kSQU0BSTUBUTYBTTgBUDcBUQ04AVEiPAFRHkEBSDwBSDwBSCVNAU0uUQFRIjojNwFRJEMBTxY3AU0eNwFRHD0BTTQ8AUwPNgFPODsBTxlBAU8XQgFPGEABTzxEAU85PAFNLUEBTC0+AUw/QgFPIjcBTxlBAVESPQFNIDkBUC04AVAtOAFNKUEBTipHAU0iPwFNJDgBTyM+AVAZOAFQIz4BTxc5AU8hPwFPGTgBTyM+AUwiQQFQC00BTxM9AU4OHj0BSyAcPQFRFjcBSkYBSTMBS0YGTzomIx0mIRMBTTM+AUxQLi8BQy0BTiMGTzogIx0mIgFKMDgBQy0BTigGTzogIx0mGRwBTyc0AVEnNgFOKDQBTDEGTzonIx0mGRssAU4NPwFQOUsBQBgGQkwbQwFPJwZCTDgBSkEGTTkxAUwwBk05OgFPOAFLKyZCAUtOEUsBUEEBT0otIj8BTysqMgFGUSdNAU9PRwFPT0MBSxIGR04BTC09AU05BksuPgFLLD4BTy4BRUQBOUkCAThwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90cml2aWFsLmRhcnS1Fi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCcgc2hvdyBDb25zdGFudFZhbHVlLCBQcmltaXRpdmVDb25zdGFudFZhbHVlOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnIHNob3cgRGFydFR5cGU7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKCmNsYXNzIFRyaXZpYWxBYnN0cmFjdFZhbHVlIGltcGxlbWVudHMgQWJzdHJhY3RWYWx1ZSB7CiAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJz8nOwp9CgpjbGFzcyBUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbiBpbXBsZW1lbnRzIEFic3RyYWN0VmFsdWVEb21haW4gewogIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGR5bmFtaWNUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVBYnN0cmFjdFZhbHVlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBBYnN0cmFjdFZhbHVlIHZhbHVlKSB7fQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRDb21wYWN0VGV4dChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiAnPyc7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0ZpeGVkTGVuZ3RoSnNJbmRleGFibGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNKc0luZGV4YWJsZUFuZEl0ZXJhYmxlKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSnNJbmRleGFibGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9jYXRlU2luZ2xlTWVtYmVyKEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIFNlbGVjdG9yIHNlbGVjdG9yKSA9PgogICAgICBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbihBYnN0cmFjdFZhbHVlIHN1YnNldCwgQWJzdHJhY3RWYWx1ZSBzdXBlcnNldCkgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgY29udGFpbnMoQWJzdHJhY3RWYWx1ZSBzdXBlcnNldCwgQWJzdHJhY3RWYWx1ZSBzdWJzZXQpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBTZWxlY3RvciBzZWxlY3RvcikgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNUYXJnZXRpbmdNZW1iZXIoCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyLCBOYW1lIG5hbWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlUmVjZWl2ZXIoSXRlcmFibGU8TWVtYmVyRW50aXR5PiBtZW1iZXJzKSA9PgogICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBQcmltaXRpdmVDb25zdGFudFZhbHVlIGdldFByaW1pdGl2ZVZhbHVlKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlUHJpbWl0aXZlVmFsdWUoCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUsIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgdmFsdWUpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNQcmltaXRpdmVWYWx1ZShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGdldEFsbG9jYXRpb25FbGVtZW50KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIE9iamVjdCBnZXRBbGxvY2F0aW9uTm9kZShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldEdlbmVyYWxpemF0aW9uKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNTcGVjaWFsaXphdGlvbk9mKAogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBzcGVjaWFsaXphdGlvbiwgQWJzdHJhY3RWYWx1ZSBnZW5lcmFsaXphdGlvbikgPT4KICAgICAgZmFsc2U7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0RGljdGlvbmFyeVZhbHVlRm9yS2V5KEFic3RyYWN0VmFsdWUgdmFsdWUsIFN0cmluZyBrZXkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXkiKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNEaWN0aW9uYXJ5S2V5KEFic3RyYWN0VmFsdWUgdmFsdWUsIFN0cmluZyBrZXkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0RpY3Rpb25hcnlLZXkiKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlRGljdGlvbmFyeVZhbHVlKAogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlLAogICAgICAgICAgT2JqZWN0IGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBrZXksCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlLAogICAgICAgICAgTWFwPFN0cmluZywgQWJzdHJhY3RWYWx1ZT4gbWFwcGluZ3MpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNEaWN0aW9uYXJ5KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldE1hcFZhbHVlVHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4uZ2V0TWFwVmFsdWVUeXBlIik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldE1hcEtleVR5cGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcEtleVR5cGUiKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlTWFwVmFsdWUoCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUsCiAgICAgICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIGtleSwKICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNNYXAoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0U2V0RWxlbWVudFR5cGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmdldFNldEVsZW1lbnRUeXBlIik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNyZWF0ZVNldFZhbHVlKAogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlLAogICAgICAgICAgT2JqZWN0IGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZSkgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1NldChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldENvbnRhaW5lckxlbmd0aChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldENvbnRhaW5lckVsZW1lbnRUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRDb250YWluZXJFbGVtZW50VHlwZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVDb250YWluZXJWYWx1ZSgKICAgICAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSwKICAgICAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgICAgIEFic3RyYWN0VmFsdWUgZWxlbWVudFR5cGUsCiAgICAgICAgICBpbnQgbGVuZ3RoKSA9PgogICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQ29udGFpbmVyKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVBYnN0cmFjdFZhbHVlRm9yQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRBYnN0cmFjdFZhbHVlRm9yTmF0aXZlTWV0aG9kUGFyYW1ldGVyVHlwZShEYXJ0VHlwZSB0eXBlKSA9PgogICAgICBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgY29udGFpbnNBbGwoQWJzdHJhY3RWYWx1ZSBhKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBhcmVEaXNqb2ludChBYnN0cmFjdFZhbHVlIGEsIEFic3RyYWN0VmFsdWUgYikgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGludGVyc2VjdGlvbihBYnN0cmFjdFZhbHVlIGEsIEFic3RyYWN0VmFsdWUgYikgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB1bmlvbk9mTWFueShJdGVyYWJsZTxBYnN0cmFjdFZhbHVlPiB2YWx1ZXMpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdW5pb24oQWJzdHJhY3RWYWx1ZSBhLCBBYnN0cmFjdFZhbHVlIGIpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZU9yTnVsbChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1N0cmluZ09yTnVsbChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1N0cmluZyhBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW5Pck51bGwoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNCb29sZWFuKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRG91YmxlT3JOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRG91YmxlKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTnVtYmVyT3JOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTnVtYmVyKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSW50ZWdlck9yTnVsbChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlck9yTnVsbChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlcihBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMihBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0ludGVnZXIoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbnRlcmNlcHRvcihBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZVN0cmluZyhBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0FycmF5KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUluZGV4YWJsZShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc011dGFibGVBcnJheShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0V4dGVuZGFibGVBcnJheShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0ZpeGVkQXJyYXkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbmRleGFibGVQcmltaXRpdmUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVBcnJheShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZUJvb2xlYW4oQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVOdW1iZXIoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0RXhhY3RDbGFzcyhBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNFeGFjdE9yTnVsbChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0V4YWN0KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRW1wdHkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbnN0YW5jZU9mKEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscykgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbnN0YW5jZU9mT3JOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscykgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgY29udGFpbnNPbmx5VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlLCBDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zVHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlLCBDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBpbmNsdWRlTnVsbChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PgogICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGV4Y2x1ZGVOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb3VsZEJlVHlwZWRBcnJheShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1R5cGVkQXJyYXkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU51bGxhYmxlU3VidHlwZShDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlTm9uTnVsbFN1YnR5cGUoQ2xhc3NFbnRpdHkgY2xzKSA9PgogICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU5vbk51bGxTdWJjbGFzcyhDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlTnVsbGFibGVFeGFjdChDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlTm9uTnVsbEV4YWN0KENsYXNzRW50aXR5IGNscykgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24gY3JlYXRlRnJvbVN0YXRpY1R5cGUoRGFydFR5cGUgdHlwZSwKICAgICAge0NsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbiA9IENsYXNzUmVsYXRpb24uc3VidHlwZSwgYm9vbCBudWxsYWJsZX0pIHsKICAgIGFzc2VydChudWxsYWJsZSAhPSBudWxsKTsKICAgIHJldHVybiBjb25zdCBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbigKICAgICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpLCBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBhc3luY1N0YXJTdHJlYW1UeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGFzeW5jRnV0dXJlVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBzeW5jU3Rhckl0ZXJhYmxlVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBlbXB0eVR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgY29uc3RNYXBUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGNvbnN0U2V0VHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBjb25zdExpc3RUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHBvc2l0aXZlSW50VHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCB1aW50MzJUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHVpbnQzMVR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZml4ZWRMaXN0VHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBncm93YWJsZUxpc3RUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IG51bGxUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IG5vbk51bGxUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IG1hcFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgc2V0VHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBsaXN0VHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBzdHJpbmdUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IG51bVR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZG91YmxlVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBpbnRUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGJvb2xUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGZ1bmN0aW9uVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCB0eXBlVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwp9CgpjbGFzcyBUcml2aWFsQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IGltcGxlbWVudHMgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IHsKICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5KCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWVEb21haW4gY3JlYXRlRG9tYWluKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgY3JlYXRlU2VsZWN0b3JTdHJhdGVneSgpIHsKICAgIHJldHVybiBjb25zdCBUcml2aWFsU2VsZWN0b3JTdHJhdGVneSgpOwogIH0KfQoKY2xhc3MgVHJpdmlhbFNlbGVjdG9yU3RyYXRlZ3kgaW1wbGVtZW50cyBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgewogIGNvbnN0IFRyaXZpYWxTZWxlY3RvclN0cmF0ZWd5KCk7CgogIEBvdmVycmlkZQogIFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cyBjcmVhdGVTZWxlY3RvckNvbnN0cmFpbnRzKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgT2JqZWN0IGluaXRpYWxDb25zdHJhaW50KSB7CiAgICByZXR1cm4gY29uc3QgVHJpdmlhbFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cygpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhcHBsaWVkVW5uYW1lZChEeW5hbWljVXNlIGR5bmFtaWNVc2UsIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIGNvdmFyaWFudCBKQ2xvc2VkV29ybGQgd29ybGQpIHsKICAgIHJldHVybiBkeW5hbWljVXNlLnNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKG1lbWJlcik7CiAgfQp9CgpjbGFzcyBUcml2aWFsVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzCiAgICBpbXBsZW1lbnRzIFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cyB7CiAgY29uc3QgVHJpdmlhbFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cygpOwoKICBAb3ZlcnJpZGUKICBib29sIGFkZFJlY2VpdmVyQ29uc3RyYWludChPYmplY3QgY29uc3RyYWludCkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgbmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhTZWxlY3RvciBzZWxlY3RvciwgV29ybGQgd29ybGQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuSGl0KE1lbWJlckVudGl0eSBlbGVtZW50LCBOYW1lIG5hbWUsIFdvcmxkIHdvcmxkKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVHJpdmlhbFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50czokaGFzaENvZGUnOwp9CoHpAE5OPAFOJCEvIS4kKR8YJQE2IAEMHAIBQiYBDEEBDEsBDEYkAQw1AQxAGgEMQBoBDEkBDFAMAQxFGgEMSRoBDCo4GgEMIkUaAQxDJAEMSQEMJkgkAQw3AQxCAQw5AQw6JAEMG0kNAQxMIEAEAQxAID0EAQwnJyEqHR8yJAEMMwEMN04EAQw1TAQBDCAnISodIiQBDCwBDDlQBAEMICchKigkAQwsAQw3AQw/ID8EAQwmJyEqJRkkAQwyAQxIJAEMTwwBDEMBDEAaAQxCJAEMPyQBDDskAQxNAQxKAQxEAQxLAQxFAQxKAQxEAQxKAQxEAQxLAQw/GgEMTQEMRAEMRAEMRQEMSQEMTQEMQwEMTgEMSgEMTQEMSAEMUAEMTAEMTgEMTQEMRwEMQgEMOgEMSQEMQwEMQwEMRRoBDEsaAQxJGgEMRRoBDDQkAQw0JAEMTQEMSAEMOiQBDDkkAQw6JAEMOCQBDDckAQxBTh4tLgQBDEkBDEUBDEoBDD8BDEIBDEIBDEMBDEUBDEABDEABDEMBDEYBDD4BDEEBDD0BDD0BDD4BDEABDD0BDEABDD0BDD4BDEIBDD4CAUYoAQw/LwQBDDksBAIBRyMBDDk1NwQBDEImNwQCASktLgEMOgEMSgEMRQEMRwIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3RyaXZpYWwuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3MvbWFza3MuZGFydMAAdPwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBtYXNrczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi8uLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHM7CmltcG9ydCAnLi4vLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9pci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vLi4vdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgRHluYW1pY1VzZTsKaW1wb3J0ICcuLi8uLi91bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnQnCiAgICBzaG93IFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cywgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5OwppbXBvcnQgJy4uLy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi8uLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICcuLi9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vdHlwZV9ncmFwaF9pbmZlcnJlci5kYXJ0JyBzaG93IFR5cGVHcmFwaEluZmVycmVyOwppbXBvcnQgJ2NvbnN0YW50cy5kYXJ0JzsKCnBhcnQgJ2NvbnRhaW5lcl90eXBlX21hc2suZGFydCc7CnBhcnQgJ2RpY3Rpb25hcnlfdHlwZV9tYXNrLmRhcnQnOwpwYXJ0ICdmbGF0X3R5cGVfbWFzay5kYXJ0JzsKcGFydCAnZm9yd2FyZGluZ190eXBlX21hc2suZGFydCc7CnBhcnQgJ21hcF90eXBlX21hc2suZGFydCc7CnBhcnQgJ3NldF90eXBlX21hc2suZGFydCc7CnBhcnQgJ3R5cGVfbWFzay5kYXJ0JzsKcGFydCAndW5pb25fdHlwZV9tYXNrLmRhcnQnOwpwYXJ0ICd2YWx1ZV90eXBlX21hc2suZGFydCc7CgpjbGFzcyBDb21tb25NYXNrcyBpbXBsZW1lbnRzIEFic3RyYWN0VmFsdWVEb21haW4gewogIC8vIFRPRE8oc2lnbXVuZCk6IG9uY2Ugd2Ugc3BsaXQgb3V0IHRoZSBiYWNrZW5kIGNvbW1vbiBlbGVtZW50cywgZGVwZW5kCiAgLy8gZGlyZWN0bHkgb24gdGhvc2UgaW5zdGVhZC4KICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwoKICBDb21tb25NYXNrcyh0aGlzLl9jbG9zZWRXb3JsZCk7CgogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CgogIFR5cGVNYXNrIF9keW5hbWljVHlwZTsKICBUeXBlTWFzayBfbm9uTnVsbFR5cGU7CiAgVHlwZU1hc2sgX251bGxUeXBlOwogIFR5cGVNYXNrIF9pbnRUeXBlOwogIFR5cGVNYXNrIF91aW50MzJUeXBlOwogIFR5cGVNYXNrIF91aW50MzFUeXBlOwogIFR5cGVNYXNrIF9wb3NpdGl2ZUludFR5cGU7CiAgVHlwZU1hc2sgX2RvdWJsZVR5cGU7CiAgVHlwZU1hc2sgX251bVR5cGU7CiAgVHlwZU1hc2sgX2Jvb2xUeXBlOwogIFR5cGVNYXNrIF9mdW5jdGlvblR5cGU7CiAgVHlwZU1hc2sgX2xpc3RUeXBlOwogIFR5cGVNYXNrIF9jb25zdExpc3RUeXBlOwogIFR5cGVNYXNrIF9maXhlZExpc3RUeXBlOwogIFR5cGVNYXNrIF9ncm93YWJsZUxpc3RUeXBlOwogIFR5cGVNYXNrIF9zZXRUeXBlOwogIFR5cGVNYXNrIF9jb25zdFNldFR5cGU7CiAgVHlwZU1hc2sgX21hcFR5cGU7CiAgVHlwZU1hc2sgX2NvbnN0TWFwVHlwZTsKICBUeXBlTWFzayBfc3RyaW5nVHlwZTsKICBUeXBlTWFzayBfdHlwZVR5cGU7CiAgVHlwZU1hc2sgX3N5bmNTdGFySXRlcmFibGVUeXBlOwogIFR5cGVNYXNrIF9hc3luY0Z1dHVyZVR5cGU7CiAgVHlwZU1hc2sgX2FzeW5jU3RhclN0cmVhbVR5cGU7CiAgVHlwZU1hc2sgX2luZGV4YWJsZVByaW1pdGl2ZVR5cGU7CiAgVHlwZU1hc2sgX3JlYWRhYmxlQXJyYXlUeXBlOwogIFR5cGVNYXNrIF9tdXRhYmxlQXJyYXlUeXBlOwogIFR5cGVNYXNrIF91bm1vZGlmaWFibGVBcnJheVR5cGU7CiAgVHlwZU1hc2sgX2ludGVyY2VwdG9yVHlwZTsKCiAgLy8vIENhY2hlIG9mIFtGbGF0VHlwZU1hc2tdcyBncm91cGVkIGJ5IHRoZSA4IHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUKICAvLy8gYEZsYXRUeXBlTWFzay5mbGFnc2AgcHJvcGVydHkuCiAgZmluYWwgTGlzdDxNYXA8Q2xhc3NFbnRpdHksIFR5cGVNYXNrPj4gX2Nhbm9uaWNhbGl6ZWRUeXBlTWFza3MgPQogICAgICBuZXcgTGlzdDxNYXA8Q2xhc3NFbnRpdHksIFR5cGVNYXNrPj4uZmlsbGVkKDgsIG51bGwpOwoKICAvLy8gUmV0dXJuIHRoZSBjYWNoZWQgbWFzayBmb3IgW2Jhc2VdIHdpdGggdGhlIGdpdmVuIGZsYWdzLCBvcgogIC8vLyBjYWxscyBbY3JlYXRlTWFza10gdG8gY3JlYXRlIHRoZSBtYXNrIGFuZCBjYWNoZSBpdC4KICBUeXBlTWFzayBnZXRDYWNoZWRNYXNrKENsYXNzRW50aXR5IGJhc2UsIGludCBmbGFncywgVHlwZU1hc2sgY3JlYXRlTWFzaygpKSB7CiAgICBNYXA8Q2xhc3NFbnRpdHksIFR5cGVNYXNrPiBjYWNoZWRNYXNrcyA9CiAgICAgICAgX2Nhbm9uaWNhbGl6ZWRUeXBlTWFza3NbZmxhZ3NdID8/PSA8Q2xhc3NFbnRpdHksIFR5cGVNYXNrPnt9OwogICAgcmV0dXJuIGNhY2hlZE1hc2tzLnB1dElmQWJzZW50KGJhc2UsIGNyZWF0ZU1hc2spOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGR5bmFtaWNUeXBlID0+IF9keW5hbWljVHlwZSA/Pz0gbmV3IFR5cGVNYXNrLnN1YmNsYXNzKAogICAgICBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBub25OdWxsVHlwZSA9PiBfbm9uTnVsbFR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoCiAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGludFR5cGUgPT4gX2ludFR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IHVpbnQzMlR5cGUgPT4gX3VpbnQzMlR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IHVpbnQzMVR5cGUgPT4gX3VpbnQzMVR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IHBvc2l0aXZlSW50VHlwZSA9PgogICAgICBfcG9zaXRpdmVJbnRUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKAogICAgICAgICAgY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgZG91YmxlVHlwZSA9PiBfZG91YmxlVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgbnVtVHlwZSA9PiBfbnVtVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyhjb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgYm9vbFR5cGUgPT4gX2Jvb2xUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgZnVuY3Rpb25UeXBlID0+IF9mdW5jdGlvblR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsU3VidHlwZShjb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgbGlzdFR5cGUgPT4gX2xpc3RUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGNvbnN0TGlzdFR5cGUgPT4gX2NvbnN0TGlzdFR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoCiAgICAgIGNvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGZpeGVkTGlzdFR5cGUgPT4gX2ZpeGVkTGlzdFR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBncm93YWJsZUxpc3RUeXBlID0+CiAgICAgIF9ncm93YWJsZUxpc3RUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KAogICAgICAgICAgY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IHNldFR5cGUgPT4gX3NldFR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsU3VidHlwZShjb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBjb25zdFNldFR5cGUgPT4gX2NvbnN0U2V0VHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKAogICAgICBjb21tb25FbGVtZW50cy5jb25zdFNldExpdGVyYWxDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IG1hcFR5cGUgPT4gX21hcFR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsU3VidHlwZShjb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBjb25zdE1hcFR5cGUgPT4gX2NvbnN0TWFwVHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKAogICAgICBjb21tb25FbGVtZW50cy5jb25zdE1hcExpdGVyYWxDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IHN0cmluZ1R5cGUgPT4gX3N0cmluZ1R5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IHR5cGVUeXBlID0+IF90eXBlVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgc3luY1N0YXJJdGVyYWJsZVR5cGUgPT4gX3N5bmNTdGFySXRlcmFibGVUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNvbW1vbkVsZW1lbnRzLnN5bmNTdGFySXRlcmFibGUsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBhc3luY0Z1dHVyZVR5cGUgPT4KICAgICAgX2FzeW5jRnV0dXJlVHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdCgKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmZ1dHVyZUltcGxlbWVudGF0aW9uLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgYXN5bmNTdGFyU3RyZWFtVHlwZSA9PiBfYXN5bmNTdGFyU3RyZWFtVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5jb250cm9sbGVyU3RyZWFtLCBfY2xvc2VkV29ybGQpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBc3NlcnQgdGhhdCB0aGUgbnVsbCB0eXBlIGhhcyBiZWVuIHJlc29sdmVkLgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBudWxsVHlwZSA9PiBfbnVsbFR5cGUgPz89IGNvbnN0IFR5cGVNYXNrLmVtcHR5KCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBlbXB0eVR5cGUgPT4gY29uc3QgVHlwZU1hc2subm9uTnVsbEVtcHR5KCk7CgogIFR5cGVNYXNrIGdldCBpbmRleGFibGVQcmltaXRpdmVUeXBlID0+CiAgICAgIF9pbmRleGFibGVQcmltaXRpdmVUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbFN1YnR5cGUoCiAgICAgICAgICBjb21tb25FbGVtZW50cy5qc0luZGV4YWJsZUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBUeXBlTWFzayBnZXQgcmVhZGFibGVBcnJheVR5cGUgPT4gX3JlYWRhYmxlQXJyYXlUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgVHlwZU1hc2sgZ2V0IG11dGFibGVBcnJheVR5cGUgPT4KICAgICAgX211dGFibGVBcnJheVR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoCiAgICAgICAgICBjb21tb25FbGVtZW50cy5qc011dGFibGVBcnJheUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBUeXBlTWFzayBnZXQgdW5tb2RpZmlhYmxlQXJyYXlUeXBlID0+CiAgICAgIF91bm1vZGlmaWFibGVBcnJheVR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoCiAgICAgICAgICBjb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIFR5cGVNYXNrIGdldCBpbnRlcmNlcHRvclR5cGUgPT4KICAgICAgX2ludGVyY2VwdG9yVHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcygKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmpzSW50ZXJjZXB0b3JDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzVHlwZWRBcnJheShUeXBlTWFzayBtYXNrKSB7CiAgICAvLyBKdXN0IGNoZWNraW5nIGZvciBgVHlwZWREYXRhYCBpcyBub3Qgc3VmZmljaWVudCwgYXMgaXQgaXMgYW4gYWJzdHJhY3QKICAgIC8vIGNsYXNzIGFueSB1c2VyLWRlZmluZWQgY2xhc3MgY2FuIGltcGxlbWVudC4gU28gd2UgYWxzbyBjaGVjayBmb3IgdGhlCiAgICAvLyBpbnRlcmZhY2UgYEphdmFTY3JpcHRJbmRleGluZ0JlaGF2aW9yYC4KICAgIENsYXNzRW50aXR5IHR5cGVkRGF0YUNsYXNzID0gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLnR5cGVkRGF0YUNsYXNzOwogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSh0eXBlZERhdGFDbGFzcyAhPSBudWxsICYmCiAgICAgICAgX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKHR5cGVkRGF0YUNsYXNzKSAmJgogICAgICAgIG1hc2suc2F0aXNmaWVzKHR5cGVkRGF0YUNsYXNzLCBfY2xvc2VkV29ybGQpICYmCiAgICAgICAgbWFzay5zYXRpc2ZpZXMoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzSW5kZXhpbmdCZWhhdmlvckludGVyZmFjZSwKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgY291bGRCZVR5cGVkQXJyYXkoVHlwZU1hc2sgbWFzaykgewogICAgYm9vbCBpbnRlcnNlY3RzKFR5cGVNYXNrIHR5cGUxLCBUeXBlTWFzayB0eXBlMikgPT4KICAgICAgICAhdHlwZTEuaW50ZXJzZWN0aW9uKHR5cGUyLCBfY2xvc2VkV29ybGQpLmlzRW1wdHk7CiAgICAvLyBUT0RPKGhlcmh1dCk6IE1heWJlIGNhY2hlIHRoZSBUeXBlTWFzayBmb3IgdHlwZWREYXRhQ2xhc3MgYW5kCiAgICAvLyAgICAgICAgICAgICAgIGpzSW5kZXhpbmdCZWhhdmlvdXJJbnRlcmZhY2UuCiAgICBDbGFzc0VudGl0eSB0eXBlZERhdGFDbGFzcyA9IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy50eXBlZERhdGFDbGFzczsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKHR5cGVkRGF0YUNsYXNzICE9IG51bGwgJiYKICAgICAgICBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQodHlwZWREYXRhQ2xhc3MpICYmCiAgICAgICAgaW50ZXJzZWN0cyhtYXNrLCBuZXcgVHlwZU1hc2suc3VidHlwZSh0eXBlZERhdGFDbGFzcywgX2Nsb3NlZFdvcmxkKSkgJiYKICAgICAgICBpbnRlcnNlY3RzKAogICAgICAgICAgICBtYXNrLAogICAgICAgICAgICBuZXcgVHlwZU1hc2suc3VidHlwZSgKICAgICAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICBfY2xvc2VkV29ybGQpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBjcmVhdGVOb25OdWxsRXhhY3QoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjbHMsIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBjcmVhdGVOdWxsYWJsZUV4YWN0KENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIG5ldyBUeXBlTWFzay5leGFjdChjbHMsIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBjcmVhdGVOb25OdWxsU3ViY2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyhjbHMsIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBjcmVhdGVOb25OdWxsU3VidHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbFN1YnR5cGUoY2xzLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgY3JlYXRlTnVsbGFibGVTdWJ0eXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIG5ldyBUeXBlTWFzay5zdWJ0eXBlKGNscywgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNyZWF0ZUZyb21TdGF0aWNUeXBlKERhcnRUeXBlIHR5cGUsCiAgICAgIHtDbGFzc1JlbGF0aW9uIGNsYXNzUmVsYXRpb24gPSBDbGFzc1JlbGF0aW9uLnN1YnR5cGUsIGJvb2wgbnVsbGFibGV9KSB7CiAgICBhc3NlcnQobnVsbGFibGUgIT0gbnVsbCk7CiAgICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBmaW5pc2goVHlwZU1hc2sgdmFsdWUsIGJvb2wgaXNQcmVjaXNlKSB7CiAgICAgIHJldHVybiBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbigKICAgICAgICAgIG51bGxhYmxlID8gdmFsdWUgOiB2YWx1ZS5ub25OdWxsYWJsZSgpLCBpc1ByZWNpc2UpOwogICAgfQoKICAgIGJvb2wgaXNQcmVjaXNlID0gdHJ1ZTsKICAgIHdoaWxlICh0eXBlIGlzIFR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUgPSB0eXBlOwogICAgICB0eXBlID0gX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgLmdldFR5cGVWYXJpYWJsZUJvdW5kKHR5cGVWYXJpYWJsZS5lbGVtZW50KTsKICAgICAgY2xhc3NSZWxhdGlvbiA9IENsYXNzUmVsYXRpb24uc3VidHlwZTsKICAgICAgaXNQcmVjaXNlID0gZmFsc2U7CiAgICB9CgogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAoaXNQcmVjaXNlKSB7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBDb3VsZCBiZSBwcmVjaXNlIGlmIGluc3RhbnRpYXRlZC10by1ib3VuZHMuCiAgICAgICAgZm9yIChEYXJ0VHlwZSBhcmd1bWVudCBpbiB0eXBlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgIGlmIChhcmd1bWVudCBpcyBEeW5hbWljVHlwZSkgY29udGludWU7CiAgICAgICAgICBpc1ByZWNpc2UgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3dpdGNoIChjbGFzc1JlbGF0aW9uKSB7CiAgICAgICAgY2FzZSBDbGFzc1JlbGF0aW9uLmV4YWN0OgogICAgICAgICAgcmV0dXJuIGZpbmlzaChUeXBlTWFzay5leGFjdCh0eXBlLmVsZW1lbnQsIF9jbG9zZWRXb3JsZCksIGlzUHJlY2lzZSk7CiAgICAgICAgY2FzZSBDbGFzc1JlbGF0aW9uLnRoaXNFeHByZXNzaW9uOgogICAgICAgICAgaWYgKCFfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbih0eXBlLmVsZW1lbnQpKSB7CiAgICAgICAgICAgIHJldHVybiBmaW5pc2goCiAgICAgICAgICAgICAgICBUeXBlTWFzay5zdWJjbGFzcyh0eXBlLmVsZW1lbnQsIF9jbG9zZWRXb3JsZCksIGlzUHJlY2lzZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENsYXNzUmVsYXRpb24uc3VidHlwZToKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBmaW5pc2goVHlwZU1hc2suc3VidHlwZSh0eXBlLmVsZW1lbnQsIF9jbG9zZWRXb3JsZCksIGlzUHJlY2lzZSk7CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIHJldHVybiBmaW5pc2goCiAgICAgICAgICBUeXBlTWFzay5zdWJ0eXBlKGNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3MsIF9jbG9zZWRXb3JsZCksIGZhbHNlKTsKICAgIH0gZWxzZSBpZiAodHlwZSBpcyBEeW5hbWljVHlwZSkgewogICAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24oZHluYW1pY1R5cGUsIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZpbmlzaChkeW5hbWljVHlwZSwgZmFsc2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZXhjbHVkZU51bGwoVHlwZU1hc2sgbWFzaykgPT4gbWFzay5ub25OdWxsYWJsZSgpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbmNsdWRlTnVsbChUeXBlTWFzayBtYXNrKSA9PiBtYXNrLm51bGxhYmxlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb250YWluc1R5cGUoVHlwZU1hc2sgdHlwZU1hc2ssIENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZShfY29udGFpbnNUeXBlKHR5cGVNYXNrLCBjbHMpKTsKICB9CgogIGJvb2wgX2NvbnRhaW5zVHlwZShUeXBlTWFzayB0eXBlTWFzaywgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGNscykgJiYKICAgICAgICB0eXBlTWFzay5jb250YWlucyhjbHMsIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgY29udGFpbnNPbmx5VHlwZShUeXBlTWFzayB0eXBlTWFzaywgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKF9jb250YWluc09ubHlUeXBlKHR5cGVNYXNrLCBjbHMpKTsKICB9CgogIGJvb2wgX2NvbnRhaW5zT25seVR5cGUoVHlwZU1hc2sgdHlwZU1hc2ssIENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChjbHMpICYmCiAgICAgICAgdHlwZU1hc2suY29udGFpbnNPbmx5KGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbnN0YW5jZU9mT3JOdWxsKFR5cGVNYXNrIHR5cGVNYXNrLCBDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZShfaXNJbnN0YW5jZU9mT3JOdWxsKHR5cGVNYXNrLCBjbHMpKTsKCiAgYm9vbCBfaXNJbnN0YW5jZU9mT3JOdWxsKFR5cGVNYXNrIHR5cGVNYXNrLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xvc2VkV29ybGQuaXNJbXBsZW1lbnRlZChjbHMpICYmCiAgICAgICAgdHlwZU1hc2suc2F0aXNmaWVzKGNscywgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0luc3RhbmNlT2YoCiAgICAgIGNvdmFyaWFudCBUeXBlTWFzayBleHByZXNzaW9uTWFzaywgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBBYnN0cmFjdFZhbHVlIHR5cGVNYXNrID0gKGNscyA9PSBjb21tb25FbGVtZW50cy5udWxsQ2xhc3MpCiAgICAgICAgPyBjcmVhdGVOdWxsYWJsZVN1YnR5cGUoY2xzKQogICAgICAgIDogY3JlYXRlTm9uTnVsbFN1YnR5cGUoY2xzKTsKICAgIGlmIChleHByZXNzaW9uTWFzay51bmlvbih0eXBlTWFzaywgX2Nsb3NlZFdvcmxkKSA9PSB0eXBlTWFzaykgewogICAgICByZXR1cm4gQWJzdHJhY3RCb29sLlRydWU7CiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb25NYXNrLmlzRGlzam9pbnQodHlwZU1hc2ssIF9jbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5GYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBBYnN0cmFjdEJvb2wuTWF5YmU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNFbXB0eShUeXBlTWFzayB2YWx1ZSkgPT4KICAgICAgQWJzdHJhY3RCb29sLnRydWVPck1heWJlKHZhbHVlLmlzRW1wdHkpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNFeGFjdChUeXBlTWFzayB2YWx1ZSkgPT4KICAgICAgQWJzdHJhY3RCb29sLnRydWVPck1heWJlKHZhbHVlLmlzRXhhY3QgJiYgIXZhbHVlLmlzTnVsbGFibGUpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNFeGFjdE9yTnVsbChUeXBlTWFzayB2YWx1ZSkgPT4KICAgICAgQWJzdHJhY3RCb29sLnRydWVPck1heWJlKHZhbHVlLmlzRXhhY3QgfHwgX2lzTnVsbCh2YWx1ZSkpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRFeGFjdENsYXNzKFR5cGVNYXNrIG1hc2spIHsKICAgIHJldHVybiBtYXNrLnNpbmdsZUNsYXNzKF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzUHJpbWl0aXZlVmFsdWUoVHlwZU1hc2sgdmFsdWUpID0+IHZhbHVlLmlzVmFsdWU7CgogIEBvdmVycmlkZQogIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgZ2V0UHJpbWl0aXZlVmFsdWUoVHlwZU1hc2sgbWFzaykgewogICAgaWYgKG1hc2suaXNWYWx1ZSkgewogICAgICBWYWx1ZVR5cGVNYXNrIHZhbHVlTWFzayA9IG1hc2s7CiAgICAgIHJldHVybiB2YWx1ZU1hc2sudmFsdWU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlUHJpbWl0aXZlVmFsdWUoCiAgICAgIGNvdmFyaWFudCBUeXBlTWFzayBvcmlnaW5hbFZhbHVlLCBQcmltaXRpdmVDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IFZhbHVlVHlwZU1hc2sob3JpZ2luYWxWYWx1ZSwgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTnVsbChUeXBlTWFzayB2YWx1ZSkgewogICAgaWYgKHZhbHVlLmlzTnVsbCkgewogICAgICByZXR1cm4gQWJzdHJhY3RCb29sLlRydWU7CiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVsbGFibGUpIHsKICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5NYXliZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBBYnN0cmFjdEJvb2wuRmFsc2U7CiAgICB9CiAgfQoKICBib29sIF9pc051bGwoVHlwZU1hc2sgdmFsdWUpID0+IHZhbHVlLmlzTnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLm1heWJlT3JGYWxzZShfY2FuQmVQcmltaXRpdmVOdW1iZXIodmFsdWUpIHx8CiAgICAgICAgX2NhbkJlUHJpbWl0aXZlQXJyYXkodmFsdWUpIHx8CiAgICAgICAgX2NhbkJlUHJpbWl0aXZlQm9vbGVhbih2YWx1ZSkgfHwKICAgICAgICBfY2FuQmVQcmltaXRpdmVTdHJpbmcodmFsdWUpIHx8CiAgICAgICAgX2lzTnVsbCh2YWx1ZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlTnVtYmVyKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKF9jYW5CZVByaW1pdGl2ZU51bWJlcih2YWx1ZSkpOwoKICBib29sIF9jYW5CZVByaW1pdGl2ZU51bWJlcihUeXBlTWFzayB2YWx1ZSkgewogICAgLy8gVE9ETyhzcmEpOiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gdGVzdCBvbmx5IGpzRG91YmxlQ2xhc3MgYW5kCiAgICAvLyBqc1VJbnQzMUNsYXNzLCBzaW5jZSBhbGwgb3RoZXJzIGFyZSBzdXBlcmNsYXNzZXMgb2YgdGhlc2UgdHdvLgogICAgcmV0dXJuIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpIHx8CiAgICAgICAgX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MpIHx8CiAgICAgICAgX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzKSB8fAogICAgICAgIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlQm9vbGVhbihUeXBlTWFzayB2YWx1ZSkgPT4KICAgICAgQWJzdHJhY3RCb29sLm1heWJlT3JGYWxzZShfY2FuQmVQcmltaXRpdmVCb29sZWFuKHZhbHVlKSk7CgogIGJvb2wgX2NhbkJlUHJpbWl0aXZlQm9vbGVhbihUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZUFycmF5KFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKF9jYW5CZVByaW1pdGl2ZUFycmF5KHZhbHVlKSk7CgogIGJvb2wgX2NhbkJlUHJpbWl0aXZlQXJyYXkoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpIHx8CiAgICAgICAgX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MpIHx8CiAgICAgICAgX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSW5kZXhhYmxlUHJpbWl0aXZlKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoX2lzSW5kZXhhYmxlUHJpbWl0aXZlKHZhbHVlKSk7CgogIGJvb2wgX2lzSW5kZXhhYmxlUHJpbWl0aXZlKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUuY29udGFpbnNPbmx5U3RyaW5nKF9jbG9zZWRXb3JsZCkgfHwKICAgICAgICBfaXNJbnN0YW5jZU9mT3JOdWxsKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0luZGV4YWJsZUNsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0ZpeGVkQXJyYXkoVHlwZU1hc2sgdmFsdWUpIHsKICAgIC8vIFRPRE8oc3JhKTogUmVjb2duaXplIHRoZSB1bmlvbiBvZiB0aGVzZSB0eXBlcyBhcyB3ZWxsLgogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSgKICAgICAgICBfY29udGFpbnNPbmx5VHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MpIHx8CiAgICAgICAgICAgIF9jb250YWluc09ubHlUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0V4dGVuZGFibGVBcnJheShUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSgKICAgICAgICBfY29udGFpbnNPbmx5VHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUFycmF5KFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc011dGFibGVJbmRleGFibGUoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgX2lzSW5zdGFuY2VPZk9yTnVsbCh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNNdXRhYmxlSW5kZXhhYmxlQ2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0FycmF5KFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlU3RyaW5nKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKF9jYW5CZVByaW1pdGl2ZVN0cmluZyh2YWx1ZSkpOwoKICBib29sIF9jYW5CZVByaW1pdGl2ZVN0cmluZyhUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSW50ZWdlcihUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSgKICAgICAgICB2YWx1ZS5jb250YWluc09ubHlJbnQoX2Nsb3NlZFdvcmxkKSAmJiAhdmFsdWUuaXNOdWxsYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNVSW50MzIoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoIXZhbHVlLmlzTnVsbGFibGUgJiYKICAgICAgICBfaXNJbnN0YW5jZU9mT3JOdWxsKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNVSW50MzEoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoIXZhbHVlLmlzTnVsbGFibGUgJiYKICAgICAgICBfaXNJbnN0YW5jZU9mT3JOdWxsKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQb3NpdGl2ZUludGVnZXIoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoIXZhbHVlLmlzTnVsbGFibGUgJiYKICAgICAgICBfaXNJbnN0YW5jZU9mT3JOdWxsKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlck9yTnVsbChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSgKICAgICAgICBfaXNJbnN0YW5jZU9mT3JOdWxsKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0ludGVnZXJPck51bGwoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodmFsdWUuY29udGFpbnNPbmx5SW50KF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTnVtYmVyKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIHZhbHVlLmNvbnRhaW5zT25seU51bShfY2xvc2VkV29ybGQpICYmICF2YWx1ZS5pc051bGxhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc051bWJlck9yTnVsbChUeXBlTWFzayB2YWx1ZSkgPT4KICAgICAgQWJzdHJhY3RCb29sLnRydWVPck1heWJlKF9pc051bWJlck9yTnVsbCh2YWx1ZSkpOwoKICBib29sIF9pc051bWJlck9yTnVsbChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlLmNvbnRhaW5zT25seU51bShfY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRG91YmxlKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIHZhbHVlLmNvbnRhaW5zT25seURvdWJsZShfY2xvc2VkV29ybGQpICYmICF2YWx1ZS5pc051bGxhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0RvdWJsZU9yTnVsbChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSh2YWx1ZS5jb250YWluc09ubHlEb3VibGUoX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNCb29sZWFuKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIHZhbHVlLmNvbnRhaW5zT25seUJvb2woX2Nsb3NlZFdvcmxkKSAmJiAhdmFsdWUuaXNOdWxsYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNCb29sZWFuT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoX2lzQm9vbGVhbk9yTnVsbCh2YWx1ZSkpOwoKICBib29sIF9pc0Jvb2xlYW5Pck51bGwoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZS5jb250YWluc09ubHlCb29sKF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNTdHJpbmcoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgdmFsdWUuY29udGFpbnNPbmx5U3RyaW5nKF9jbG9zZWRXb3JsZCkgJiYgIXZhbHVlLmlzTnVsbGFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzU3RyaW5nT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKHZhbHVlLmNvbnRhaW5zT25seVN0cmluZyhfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZU9yTnVsbChUeXBlTWFzayB2YWx1ZSkgPT4KICAgICAgQWJzdHJhY3RCb29sLnRydWVPck1heWJlKF9pc1ByaW1pdGl2ZU9yTnVsbCh2YWx1ZSkpOwoKICBib29sIF9pc1ByaW1pdGl2ZU9yTnVsbChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIF9pc0luZGV4YWJsZVByaW1pdGl2ZSh2YWx1ZSkgfHwKICAgICAgICBfaXNOdW1iZXJPck51bGwodmFsdWUpIHx8CiAgICAgICAgX2lzQm9vbGVhbk9yTnVsbCh2YWx1ZSkgfHwKICAgICAgICBfaXNOdWxsKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHVuaW9uKFR5cGVNYXNrIGEsIFR5cGVNYXNrIGIpID0+IGEudW5pb24oYiwgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKFR5cGVNYXNrIGEsIFR5cGVNYXNrIGIpID0+CiAgICAgIGEuaW50ZXJzZWN0aW9uKGIsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBhcmVEaXNqb2ludChUeXBlTWFzayBhLCBUeXBlTWFzayBiKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoYS5pc0Rpc2pvaW50KGIsIF9jbG9zZWRXb3JsZCkpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgY29udGFpbnNBbGwoVHlwZU1hc2sgYSkgPT4KICAgICAgQWJzdHJhY3RCb29sLm1heWJlT3JGYWxzZShhLmNvbnRhaW5zQWxsKF9jbG9zZWRXb3JsZCkpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVBYnN0cmFjdFZhbHVlRm9yQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgewogICAgcmV0dXJuIGNvbXB1dGVUeXBlTWFzayhfY2xvc2VkV29ybGQsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0TWFwS2V5VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgTWFwVHlwZU1hc2spIHsKICAgICAgcmV0dXJuIHZhbHVlLmtleVR5cGU7CiAgICB9CiAgICByZXR1cm4gZHluYW1pY1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldE1hcFZhbHVlVHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgTWFwVHlwZU1hc2spIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXNzZXJ0IHRoZSBgdmFsdWUudmFsdWVUeXBlYCBpcyBub3QgbnVsbC4KICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlVHlwZSA/PyBkeW5hbWljVHlwZTsKICAgIH0KICAgIHJldHVybiBkeW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0Q29udGFpbmVyRWxlbWVudFR5cGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIENvbnRhaW5lclR5cGVNYXNrKSB7CiAgICAgIHJldHVybiB2YWx1ZS5lbGVtZW50VHlwZSA/PyBkeW5hbWljVHlwZTsKICAgIH0KICAgIHJldHVybiBkeW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXRDb250YWluZXJMZW5ndGgoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlIGlzIENvbnRhaW5lclR5cGVNYXNrID8gdmFsdWUubGVuZ3RoIDogbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlQ29udGFpbmVyVmFsdWUoCiAgICAgIEFic3RyYWN0VmFsdWUgZm9yd2FyZFRvLAogICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZSwKICAgICAgaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBDb250YWluZXJUeXBlTWFzaygKICAgICAgICBmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwgZWxlbWVudFR5cGUsIGxlbmd0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHVuaW9uT2ZNYW55KEl0ZXJhYmxlPEFic3RyYWN0VmFsdWU+IHZhbHVlcykgewogICAgVHlwZU1hc2sgcmVzdWx0ID0gY29uc3QgVHlwZU1hc2subm9uTnVsbEVtcHR5KCk7CiAgICBmb3IgKFR5cGVNYXNrIHZhbHVlIGluIHZhbHVlcykgewogICAgICByZXN1bHQgPSByZXN1bHQudW5pb24odmFsdWUsIF9jbG9zZWRXb3JsZCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlUmVjZWl2ZXIoSXRlcmFibGU8TWVtYmVyRW50aXR5PiBtZW1iZXJzKSB7CiAgICBhc3NlcnQoX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgLmhhc0FueVN0cmljdFN1YmNsYXNzKF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykpOwogICAgcmV0dXJuIG5ldyBUeXBlTWFzay51bmlvbk9mKAogICAgICAgIG1lbWJlcnMuZXhwYW5kKChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgICAgIHJldHVybiBbY2xzXS4uYWRkQWxsKF9jbG9zZWRXb3JsZC5taXhpblVzZXNPZihjbHMpKTsKICAgICAgICB9KS5tYXAoKGNscykgewogICAgICAgICAgaWYgKF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc051bGxDbGFzcyA9PSBjbHMpIHsKICAgICAgICAgICAgcmV0dXJuIGNvbnN0IFR5cGVNYXNrLmVtcHR5KCk7CiAgICAgICAgICB9IGVsc2UgaWYgKF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChjbHMpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKGNscywgX2Nsb3NlZFdvcmxkKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSBuZWVkIGZvciB0aGlzIGNhc2UuCiAgICAgICAgICAgIHJldHVybiBjb25zdCBUeXBlTWFzay5lbXB0eSgpOwogICAgICAgICAgfQogICAgICAgIH0pLAogICAgICAgIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNUYXJnZXRpbmdNZW1iZXIoCiAgICAgIGNvdmFyaWFudCBUeXBlTWFzayByZWNlaXZlciwgTWVtYmVyRW50aXR5IG1lbWJlciwgTmFtZSBuYW1lKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLm1heWJlT3JGYWxzZSgKICAgICAgICByZWNlaXZlci5jYW5IaXQobWVtYmVyLCBuYW1lLCBfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKAogICAgICBjb3ZhcmlhbnQgVHlwZU1hc2sgcmVjZWl2ZXIsIFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPckZhbHNlKAogICAgICAgIHJlY2VpdmVyLm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoc2VsZWN0b3IsIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zKAogICAgICBjb3ZhcmlhbnQgVHlwZU1hc2sgc3VwZXJzZXQsIGNvdmFyaWFudCBUeXBlTWFzayBzdWJzZXQpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKAogICAgICAgIHN1cGVyc2V0LmNvbnRhaW5zTWFzayhzdWJzZXQsIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSW4oY292YXJpYW50IFR5cGVNYXNrIHN1YnNldCwgY292YXJpYW50IFR5cGVNYXNrIHN1cGVyc2V0KSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKHN1YnNldC5pc0luTWFzayhzdXBlcnNldCwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9jYXRlU2luZ2xlTWVtYmVyKAogICAgICBjb3ZhcmlhbnQgVHlwZU1hc2sgcmVjZWl2ZXIsIFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICByZXR1cm4gcmVjZWl2ZXIubG9jYXRlU2luZ2xlTWVtYmVyKHNlbGVjdG9yLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSnNJbmRleGFibGUoVHlwZU1hc2sgbWFzaykgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZShtYXNrLnNhdGlzZmllcygKICAgICAgICBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNJbmRleGFibGVDbGFzcywgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNKc0luZGV4YWJsZUFuZEl0ZXJhYmxlKGNvdmFyaWFudCBUeXBlTWFzayBtYXNrKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKG1hc2sgIT0gbnVsbCAmJgogICAgICAgIG1hc2suc2F0aXNmaWVzKAogICAgICAgICAgICBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNJbmRleGFibGVDbGFzcywgX2Nsb3NlZFdvcmxkKSAmJgogICAgICAgIC8vIFN0cmluZyBpcyBpbmRleGFibGUgYnV0IG5vdCBpdGVyYWJsZS4KICAgICAgICAhbWFzay5zYXRpc2ZpZXMoCiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzLCBfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0ZpeGVkTGVuZ3RoSnNJbmRleGFibGUoY292YXJpYW50IFR5cGVNYXNrIG1hc2spIHsKICAgIGlmIChtYXNrLmlzQ29udGFpbmVyICYmIChtYXNrIGFzIENvbnRhaW5lclR5cGVNYXNrKS5sZW5ndGggIT0gbnVsbCkgewogICAgICAvLyBBIGNvbnRhaW5lciBvbiB3aGljaCB3ZSBoYXZlIGluZmVycmVkIHRoZSBsZW5ndGguCiAgICAgIHJldHVybiBBYnN0cmFjdEJvb2wuVHJ1ZTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogUmVjb2duaXplIGFueSBjb21iaW5hdGlvbiBvZiBmaXhlZCBsZW5ndGggaW5kZXhhYmxlcy4KICAgIGlmIChtYXNrLmNvbnRhaW5zT25seShfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MpIHx8CiAgICAgICAgbWFzay5jb250YWluc09ubHkoCiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MpIHx8CiAgICAgICAgbWFzay5jb250YWluc09ubHlTdHJpbmcoX2Nsb3NlZFdvcmxkKSB8fAogICAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmlzVHlwZWRBcnJheShtYXNrKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBBYnN0cmFjdEJvb2wuVHJ1ZTsKICAgIH0KICAgIHJldHVybiBBYnN0cmFjdEJvb2wuTWF5YmU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbnRlcmNlcHRvcihUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UoCiAgICAgICAgIWludGVyY2VwdG9yVHlwZS5pc0Rpc2pvaW50KHZhbHVlLCBfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNNYXAoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZS5pc01hcDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTZXQoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZS5pc1NldDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNDb250YWluZXIoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZS5pc0NvbnRhaW5lcjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEaWN0aW9uYXJ5KFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUuaXNEaWN0aW9uYXJ5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0RpY3Rpb25hcnlLZXkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgU3RyaW5nIGtleSkgewogICAgcmV0dXJuIHZhbHVlIGlzIERpY3Rpb25hcnlUeXBlTWFzayAmJiB2YWx1ZS5jb250YWluc0tleShrZXkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgU3RyaW5nIGtleSkgewogICAgaWYgKHZhbHVlIGlzIERpY3Rpb25hcnlUeXBlTWFzaykgcmV0dXJuIHZhbHVlLmdldFZhbHVlRm9yS2V5KGtleSk7CiAgICByZXR1cm4gZHluYW1pY1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU1hcFZhbHVlKEFic3RyYWN0VmFsdWUgZm9yd2FyZFRvLCBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwgQWJzdHJhY3RWYWx1ZSBrZXksIEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIHJldHVybiBuZXcgTWFwVHlwZU1hc2soCiAgICAgICAgZm9yd2FyZFRvLCBhbGxvY2F0aW9uTm9kZSwgYWxsb2NhdGlvbkVsZW1lbnQsIGtleSwgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVEaWN0aW9uYXJ5VmFsdWUoCiAgICAgIEFic3RyYWN0VmFsdWUgZm9yd2FyZFRvLAogICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZSBrZXksCiAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUsCiAgICAgIE1hcDxTdHJpbmcsIEFic3RyYWN0VmFsdWU+IG1hcHBpbmdzKSB7CiAgICByZXR1cm4gbmV3IERpY3Rpb25hcnlUeXBlTWFzaygKICAgICAgICBmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwga2V5LCB2YWx1ZSwgbWFwcGluZ3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVTZXRWYWx1ZShBYnN0cmFjdFZhbHVlIGZvcndhcmRUbywgT2JqZWN0IGFsbG9jYXRpb25Ob2RlLAogICAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQsIEFic3RyYWN0VmFsdWUgZWxlbWVudFR5cGUpIHsKICAgIHJldHVybiBuZXcgU2V0VHlwZU1hc2soCiAgICAgICAgZm9yd2FyZFRvLCBhbGxvY2F0aW9uTm9kZSwgYWxsb2NhdGlvbkVsZW1lbnQsIGVsZW1lbnRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0U2V0RWxlbWVudFR5cGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIFNldFR5cGVNYXNrKSB7CiAgICAgIHJldHVybiB2YWx1ZS5lbGVtZW50VHlwZSA/PyBkeW5hbWljVHlwZTsKICAgIH0KICAgIHJldHVybiBkeW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTcGVjaWFsaXphdGlvbk9mKAogICAgICBBYnN0cmFjdFZhbHVlIHNwZWNpYWxpemF0aW9uLCBBYnN0cmFjdFZhbHVlIGdlbmVyYWxpemF0aW9uKSB7CiAgICByZXR1cm4gc3BlY2lhbGl6YXRpb24gaXMgRm9yd2FyZGluZ1R5cGVNYXNrICYmCiAgICAgICAgc3BlY2lhbGl6YXRpb24uZm9yd2FyZFRvID09IGdlbmVyYWxpemF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgT2JqZWN0IGdldEFsbG9jYXRpb25Ob2RlKEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBBbGxvY2F0aW9uVHlwZU1hc2spIHsKICAgICAgcmV0dXJuIHZhbHVlLmFsbG9jYXRpb25Ob2RlOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgZ2V0QWxsb2NhdGlvbkVsZW1lbnQoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIEFsbG9jYXRpb25UeXBlTWFzaykgewogICAgICByZXR1cm4gdmFsdWUuYWxsb2NhdGlvbkVsZW1lbnQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0R2VuZXJhbGl6YXRpb24oQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIEFsbG9jYXRpb25UeXBlTWFzaykgewogICAgICByZXR1cm4gdmFsdWUuZm9yd2FyZFRvOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldEFic3RyYWN0VmFsdWVGb3JOYXRpdmVNZXRob2RQYXJhbWV0ZXJUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgaWYgKHR5cGUudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSByZXR1cm4gbnVsbDsKICAgICAgLy8gVE9ETyhzcmEpOiBDb25zaWRlciB1c2luZyBhIHN0cmVuZ3RoZW5lZCB0eXBlIGNoZWNrIHRvIGF2b2lkIHBhc3NpbmcKICAgICAgLy8gYG51bGxgIHRvIHByaW1pdGl2ZSB0eXBlcyBzaW5jZSB0aGUgbmF0aXZlIG1ldGhvZHMgdXN1YWxseSBoYXZlCiAgICAgIC8vIG5vbi1udWxsYWJsZSBwcmltaXRpdmUgcGFyYW1ldGVyIHR5cGVzLgogICAgICByZXR1cm4gY3JlYXRlTnVsbGFibGVTdWJ0eXBlKHR5cGUuZWxlbWVudCk7CiAgICB9CiAgICBpZiAodHlwZSBpcyBEeW5hbWljVHlwZSkgcmV0dXJuIGR5bmFtaWNUeXBlOwogICAgLy8gVE9ETyhzcmEpOiBDb252ZXJ0IG90aGVyIFtEYXJ0VHlwZV1zIHRvIFtBYnN0cmFjdFZhbHVlXXMKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldENvbXBhY3RUZXh0KEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIHJldHVybiBmb3JtYXRUeXBlKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHJldHVybiBzb3VyY2UucmVhZENhY2hlZDxUeXBlTWFzaz4oCiAgICAgICAgKCkgPT4gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGNvdmFyaWFudCBUeXBlTWFzayB2YWx1ZSkgewogICAgc2luay53cml0ZUNhY2hlZDxUeXBlTWFzaz4oCiAgICAgICAgdmFsdWUsIChUeXBlTWFzayB2YWx1ZSkgPT4gdmFsdWUud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICB9Cn0KCi8vLyBDb252ZXJ0IHRoZSBnaXZlbiBUeXBlTWFzayB0byBhIGNvbXBhY3Qgc3RyaW5nIGZvcm1hdC4KLy8vCi8vLyBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgdG9vIHZlcmJvc2UgZm9yIHRoZSBncmFwaCBmb3JtYXQgc2luY2UgbG9uZyBzdHJpbmdzCi8vLyBjcmVhdGUgb2Jsb25nIG5vZGVzIHRoYXQgb2JzdHJ1Y3QgdGhlIGdyYXBoIGxheW91dC4KU3RyaW5nIGZvcm1hdFR5cGUoVHlwZU1hc2sgdHlwZSkgewogIGlmICh0eXBlIGlzIEZsYXRUeXBlTWFzaykgewogICAgLy8gVE9ETyhhc2dlcmYpOiBEaXNhbWJpZ3VhdGUgY2xhc3NlcyB3aG9zZSBuYW1lIGlzIG5vdCB1bmlxdWUuIFVzaW5nIHRoZQogICAgLy8gICAgIGxpYnJhcnkgbmFtZSBmb3IgYWxsIGNsYXNzZXMgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBsaWJyYXJ5IG5hbWVzCiAgICAvLyAgICAgY2FuIGJlIHJlYWxseSBsb25nIGFuZCBtZXNzIHVwIHRoZSBsYXlvdXQuCiAgICAvLyBDYXBpdGFsaXplIE51bGwgdG8gZW1waGFzaXplIHRoYXQgaXQncyB0aGUgbnVsbCB0eXBlIG1hc2sgYW5kIG5vdAogICAgLy8gYSBudWxsIHZhbHVlIHdlIGFjY2lkZW50YWxseSBwcmludGVkIG91dC4KICAgIGlmICh0eXBlLmlzRW1wdHlPck51bGwpIHJldHVybiB0eXBlLmlzTnVsbGFibGUgPyAnTnVsbCcgOiAnRW1wdHknOwogICAgU3RyaW5nIG51bGxGbGFnID0gdHlwZS5pc051bGxhYmxlID8gJz8nIDogJyc7CiAgICBTdHJpbmcgc3ViRmxhZyA9IHR5cGUuaXNFeGFjdCA/ICcnIDogdHlwZS5pc1N1YmNsYXNzID8gJysnIDogJyonOwogICAgcmV0dXJuICcke3R5cGUuYmFzZS5uYW1lfSRudWxsRmxhZyRzdWJGbGFnJzsKICB9CiAgaWYgKHR5cGUgaXMgVW5pb25UeXBlTWFzaykgewogICAgcmV0dXJuIHR5cGUuZGlzam9pbnRNYXNrcy5tYXAoZm9ybWF0VHlwZSkuam9pbignIHwgJyk7CiAgfQogIGlmICh0eXBlIGlzIENvbnRhaW5lclR5cGVNYXNrKSB7CiAgICBTdHJpbmcgY29udGFpbmVyID0gZm9ybWF0VHlwZSh0eXBlLmZvcndhcmRUbyk7CiAgICBTdHJpbmcgbWVtYmVyID0gZm9ybWF0VHlwZSh0eXBlLmVsZW1lbnRUeXBlKTsKICAgIHJldHVybiAnJGNvbnRhaW5lcjwkbWVtYmVyPic7CiAgfQogIGlmICh0eXBlIGlzIE1hcFR5cGVNYXNrKSB7CiAgICBTdHJpbmcgY29udGFpbmVyID0gZm9ybWF0VHlwZSh0eXBlLmZvcndhcmRUbyk7CiAgICBTdHJpbmcga2V5ID0gZm9ybWF0VHlwZSh0eXBlLmtleVR5cGUpOwogICAgU3RyaW5nIHZhbHVlID0gZm9ybWF0VHlwZSh0eXBlLnZhbHVlVHlwZSk7CiAgICByZXR1cm4gJyRjb250YWluZXI8JGtleSwkdmFsdWU+JzsKICB9CiAgaWYgKHR5cGUgaXMgVmFsdWVUeXBlTWFzaykgewogICAgU3RyaW5nIGJhc2VUeXBlID0gZm9ybWF0VHlwZSh0eXBlLmZvcndhcmRUbyk7CiAgICBTdHJpbmcgdmFsdWUgPSB0eXBlLnZhbHVlLnRvU3RydWN0dXJlZFRleHQoKTsKICAgIHJldHVybiAnJGJhc2VUeXBlPSR2YWx1ZSc7CiAgfQogIHJldHVybiAnJHR5cGUnOyAvLyBGYWxsIGJhY2sgb24gdG9TdHJpbmcgaWYgbm90IHN1cHBvcnRlZCBoZXJlLgp9CoOhAE5OPAEPASgBHDkmJyQkJDEuNTIrQx8tKD0ZASEiHCIbGxcdHQEzSiAjASIBRAEZGRYVGBgdGBUWGhYbGx4VGhUaGBYiHSEkHx4jHQFHJUM8AUE6Ty1GNgQBDEY+AQxNPgEMJ00BDC1QAQwtTQEMIjk8AQwtTQEMJ1ABDClLAQwxTwEMKUwBDE4+AQwzUQEMIzdAAQwnUQEMTjoBDCdRAQxOOgEMLU0BDClQAQxBUAEMIjY+AQw/UAFHDEEBDDsBKT86ATtPASM6PQEoPEIBIjk8AQwtTUwvTT5GOFAcBAEMMjc6RTNNP0ZQFBIiSSEEAQwxOQQBDDIyBAEMNDwEAQwzOwQBDDQ0BAEMQU4eSCk+BgEbJywtNy0ZBgEhF0I4MR0KCB8iUCs7G0sMESQRCE4nFVAmPA0pBgQBDD0BDDoBDEJDBAE7Pi4EAQxGRwQBPz4kBAEMSUQBQS4vBAEMHTw/JSVEIEQhDSEGBAEMKi8BDCpEAQwwQQEMLSsEAQw6AQw8GCYeBhEEAQwmSDQEAQwoGCAjIQ0hBgQBMAEMLUUnKSgZBAEMND8BL0dGQTtDPj48BAEMNUABMD0EAQwzPgEuQEJHRwQBDDc+AS81RQQBDC4+JUZQBAEMMyVKBAEMMCVJBAEMNCVNBAEMKSVCBAEMND8BLz8EAQwrJUMEAQwqOUMEAQwqOUMEAQwzOUgEAQw5JUgEAQwxSgQBDColQwQBDDE4ASkwBAEMKiVGBAEMME0EAQwrJUQEAQwyOQEqMQQBDColRgQBDDBNBAEMNDsBLCsiIxgEAQxGAQwzJwEMNj8BDCo+AQxHMQQBDDUgHAYYBAEMNyBILQYYBAEMPyYvBhgEAQwwPQQBDCYfHSYhFCJMBAEMPjUlMgYTBAEMQidJITA0PxdAK0hEE0IrDAwXBAEMIkUmNgQBDCo4JUUEAQwZQCY2BAEMTk4EAQwjOEAEAQwuNEYEAQxDNBhLMRlHBAEMQ0o7IAZITBtFMVAgBh8EAQwvJjsEAQwfGAQBDB8YBAEMJR4EAQwmHwQBDEBCBAEMTEcYBAEMT1AcQwQBDCcfHSYZGy0jTQQBDE9DHEQEAQw5IC8GGAQBDBtEMzQEAQwyJyMGEQQBDDsnJgYRBAEMOSceBhEEAQxOITZOSTEyBjFAEQQBDC8eBAEMQChGBAEMTyBBBAIBOwROOCMeTlA2STFHMkYxBB87BCMzMiIEHTMrLyYEHzIyHwRCAgEycGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL21hc2tzLmRhcnRJc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL2NvbnRhaW5lcl90eXBlX21hc2suZGFydJFiLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgbWFza3M7CgovLy8gQSBbVHlwZU1hc2tdIGZvciBhIHNwZWNpZmljIGFsbG9jYXRpb24gc2l0ZSBvZiBhIGNvbnRhaW5lciAoY3VycmVudGx5IG9ubHkKLy8vIExpc3QpIHRoYXQgd2lsbCBnZXQgc3BlY2lhbGl6ZWQgb25jZSB0aGUgW1R5cGVHcmFwaEluZmVycmVyXSBwaGFzZSBmaW5kcyBhbgovLy8gZWxlbWVudCB0eXBlIGZvciBpdC4KY2xhc3MgQ29udGFpbmVyVHlwZU1hc2sgZXh0ZW5kcyBBbGxvY2F0aW9uVHlwZU1hc2sgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ29udGFpbmVyVHlwZU1hc2tdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY29udGFpbmVyLXR5cGUtbWFzayc7CgogIEBvdmVycmlkZQogIGZpbmFsIFR5cGVNYXNrIGZvcndhcmRUbzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuTm9kZSBhbGxvY2F0aW9uTm9kZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50OwoKICAvLyBUaGUgZWxlbWVudCB0eXBlIG9mIHRoaXMgY29udGFpbmVyLgogIGZpbmFsIFR5cGVNYXNrIGVsZW1lbnRUeXBlOwoKICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBjb250YWluZXIuCiAgZmluYWwgaW50IGxlbmd0aDsKCiAgQ29udGFpbmVyVHlwZU1hc2sodGhpcy5mb3J3YXJkVG8sIHRoaXMuYWxsb2NhdGlvbk5vZGUsIHRoaXMuYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgIHRoaXMuZWxlbWVudFR5cGUsIHRoaXMubGVuZ3RoKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtDb250YWluZXJUeXBlTWFza10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDb250YWluZXJUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgVHlwZU1hc2sgZm9yd2FyZFRvID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIGlyLlRyZWVOb2RlIGFsbG9jYXRpb25Ob2RlID0gc291cmNlLnJlYWRUcmVlTm9kZU9yTnVsbCgpOwogICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50ID0gc291cmNlLnJlYWRNZW1iZXJPck51bGwoKTsKICAgIFR5cGVNYXNrIGVsZW1lbnRUeXBlID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIGludCBsZW5ndGggPSBzb3VyY2UucmVhZEludE9yTnVsbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDb250YWluZXJUeXBlTWFzaygKICAgICAgICBmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwgZWxlbWVudFR5cGUsIGxlbmd0aCk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtDb250YWluZXJUeXBlTWFza10gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKFR5cGVNYXNrS2luZC5jb250YWluZXIpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZm9yd2FyZFRvLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZU9yTnVsbChhbGxvY2F0aW9uTm9kZSk7CiAgICBzaW5rLndyaXRlTWVtYmVyT3JOdWxsKGFsbG9jYXRpb25FbGVtZW50KTsKICAgIGVsZW1lbnRUeXBlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVJbnRPck51bGwobGVuZ3RoKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBudWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlCiAgICAgICAgPyB0aGlzCiAgICAgICAgOiBuZXcgQ29udGFpbmVyVHlwZU1hc2soZm9yd2FyZFRvLm51bGxhYmxlKCksIGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgICBhbGxvY2F0aW9uRWxlbWVudCwgZWxlbWVudFR5cGUsIGxlbmd0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBub25OdWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlCiAgICAgICAgPyBuZXcgQ29udGFpbmVyVHlwZU1hc2soZm9yd2FyZFRvLm5vbk51bGxhYmxlKCksIGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgICBhbGxvY2F0aW9uRWxlbWVudCwgZWxlbWVudFR5cGUsIGxlbmd0aCkKICAgICAgICA6IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnRhaW5lciA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXhhY3QgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIENvbnRhaW5lclR5cGVNYXNrKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3VwZXIuZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgJiYKICAgICAgICBhbGxvY2F0aW9uTm9kZSA9PSBvdGhlci5hbGxvY2F0aW9uTm9kZSAmJgogICAgICAgIGVsZW1lbnRUeXBlID09IG90aGVyLmVsZW1lbnRUeXBlICYmCiAgICAgICAgbGVuZ3RoID09IG90aGVyLmxlbmd0aDsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGludGVyc2VjdGlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBUeXBlTWFzayBmb3J3YXJkSW50ZXJzZWN0aW9uID0gZm9yd2FyZFRvLmludGVyc2VjdGlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogICAgaWYgKGZvcndhcmRJbnRlcnNlY3Rpb24uaXNFbXB0eU9yTnVsbCkgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb247CiAgICByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbi5pc051bGxhYmxlID8gbnVsbGFibGUoKSA6IG5vbk51bGxhYmxlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB1bmlvbihkeW5hbWljIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICh0aGlzID09IG90aGVyKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIGlmIChlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IG90aGVyIDogdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IHRoaXMubnVsbGFibGUoKSA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzQ29udGFpbmVyICYmCiAgICAgICAgZWxlbWVudFR5cGUgIT0gbnVsbCAmJgogICAgICAgIG90aGVyLmVsZW1lbnRUeXBlICE9IG51bGwpIHsKICAgICAgVHlwZU1hc2sgbmV3RWxlbWVudFR5cGUgPQogICAgICAgICAgZWxlbWVudFR5cGUudW5pb24ob3RoZXIuZWxlbWVudFR5cGUsIGNsb3NlZFdvcmxkKTsKICAgICAgaW50IG5ld0xlbmd0aCA9IChsZW5ndGggPT0gb3RoZXIubGVuZ3RoKSA/IGxlbmd0aCA6IG51bGw7CiAgICAgIFR5cGVNYXNrIG5ld0ZvcndhcmRUbyA9IGZvcndhcmRUby51bmlvbihvdGhlci5mb3J3YXJkVG8sIGNsb3NlZFdvcmxkKTsKICAgICAgcmV0dXJuIG5ldyBDb250YWluZXJUeXBlTWFzaygKICAgICAgICAgIG5ld0ZvcndhcmRUbywKICAgICAgICAgIGFsbG9jYXRpb25Ob2RlID09IG90aGVyLmFsbG9jYXRpb25Ob2RlID8gYWxsb2NhdGlvbk5vZGUgOiBudWxsLAogICAgICAgICAgYWxsb2NhdGlvbkVsZW1lbnQgPT0gb3RoZXIuYWxsb2NhdGlvbkVsZW1lbnQKICAgICAgICAgICAgICA/IGFsbG9jYXRpb25FbGVtZW50CiAgICAgICAgICAgICAgOiBudWxsLAogICAgICAgICAgbmV3RWxlbWVudFR5cGUsCiAgICAgICAgICBuZXdMZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZvcndhcmRUby51bmlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gc3VwZXIgPT0gb3RoZXI7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIGNvbXB1dGVIYXNoQ29kZSgKICAgICAgICBhbGxvY2F0aW9uTm9kZSwgaXNOdWxsYWJsZSwgZWxlbWVudFR5cGUsIGxlbmd0aCwgZm9yd2FyZFRvKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnQ29udGFpbmVyKCRmb3J3YXJkVG8sIGVsZW1lbnQ6ICRlbGVtZW50VHlwZSwgbGVuZ3RoOiAkbGVuZ3RoKSc7CiAgfQp9CoCMAE5OPAEPAU9QGTVLHTMBDBwBDCABDCgBKR4BIhQBUSYBPzA1F08+QFEpFSJMBAE1DCgsFSUuLychEwQBDBgWD0Y1BAEMGxZJNBAEAQwgDBwBDCQzLzIsIAQBDERPR0gEAQw8GRMtLiY4JB8lID1ATSQYSjciFhoWDTIGBAEMLQEMFRxFBAEMFkwEAgFAcGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL2NvbnRhaW5lcl90eXBlX21hc2suZGFydEpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3MvZGljdGlvbmFyeV90eXBlX21hc2suZGFydJa7Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgbWFza3M7CgovLy8gQSBbRGljdGlvbmFyeVR5cGVNYXNrXSBpcyBhIFtUeXBlTWFza10gZm9yIGEgc3BlY2lmaWMgYWxsb2NhdGlvbgovLy8gc2l0ZSBvZiBhIG1hcCAoY3VycmVudGx5IG9ubHkgaW50ZXJuYWwgTWFwIGNsYXNzKSB0aGF0IGlzIHVzZWQgYXMKLy8vIGEgZGljdGlvbmFyeSwgaS5lLiBhIG1hcHBpbmcgZnJvbSBhIHNldCBvZiBzdGF0aWNhbGx5IGtub3duIHN0cmluZ3MKLy8vIHRvIHZhbHVlcy4gVGhlc2UgdHlwZW1hc2tzIG9ubHkgY29tZSBpbnRvIGV4aXN0ZW5jZSBhZnRlciB0aGUKLy8vIFtUeXBlR3JhcGhJbmZlcnJlcl0gaGFzIHN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkIHN1Y2ggYSB1c2FnZS4gT3RoZXJ3aXNlLAovLy8gdGhlIG1vcmUgZ2VuZXJhbCBbTWFwVHlwZU1hc2tdIGlzIHVzZWQuCmNsYXNzIERpY3Rpb25hcnlUeXBlTWFzayBleHRlbmRzIE1hcFR5cGVNYXNrIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0RpY3Rpb25hcnlUeXBlTWFza10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdkaWN0aW9uYXJ5LXR5cGUtbWFzayc7CgogIC8vIFRoZSB1bmRlcmx5aW5nIGtleS92YWx1ZSBtYXAgb2YgdGhpcyBkaWN0aW9uYXJ5LgogIGZpbmFsIE1hcDxTdHJpbmcsIEFic3RyYWN0VmFsdWU+IF90eXBlTWFwOwoKICBEaWN0aW9uYXJ5VHlwZU1hc2soCiAgICAgIFR5cGVNYXNrIGZvcndhcmRUbywKICAgICAgaXIuTm9kZSBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBUeXBlTWFzayBrZXlUeXBlLAogICAgICBUeXBlTWFzayB2YWx1ZVR5cGUsCiAgICAgIHRoaXMuX3R5cGVNYXApCiAgICAgIDogc3VwZXIoZm9yd2FyZFRvLCBhbGxvY2F0aW9uTm9kZSwgYWxsb2NhdGlvbkVsZW1lbnQsIGtleVR5cGUsIHZhbHVlVHlwZSk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbRGljdGlvbmFyeVR5cGVNYXNrXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IERpY3Rpb25hcnlUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgVHlwZU1hc2sgZm9yd2FyZFRvID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIGlyLlRyZWVOb2RlIGFsbG9jYXRpb25Ob2RlID0gc291cmNlLnJlYWRUcmVlTm9kZU9yTnVsbCgpOwogICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50ID0gc291cmNlLnJlYWRNZW1iZXJPck51bGwoKTsKICAgIFR5cGVNYXNrIGtleVR5cGUgPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgVHlwZU1hc2sgdmFsdWVUeXBlID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIE1hcDxTdHJpbmcsIEFic3RyYWN0VmFsdWU+IHR5cGVNYXAgPSBzb3VyY2UucmVhZFN0cmluZ01hcCgKICAgICAgICAoKSA9PiBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgRGljdGlvbmFyeVR5cGVNYXNrKGZvcndhcmRUbywgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LAogICAgICAgIGtleVR5cGUsIHZhbHVlVHlwZSwgdHlwZU1hcCk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtEaWN0aW9uYXJ5VHlwZU1hc2tdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShUeXBlTWFza0tpbmQuZGljdGlvbmFyeSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBmb3J3YXJkVG8ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZVRyZWVOb2RlT3JOdWxsKGFsbG9jYXRpb25Ob2RlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJPck51bGwoYWxsb2NhdGlvbkVsZW1lbnQpOwogICAga2V5VHlwZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB2YWx1ZVR5cGUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZVN0cmluZ01hcChfdHlwZU1hcCwgKEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgICAgVHlwZU1hc2sgdHlwZU1hc2sgPSB2YWx1ZTsKICAgICAgdHlwZU1hc2sud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZQogICAgICAgID8gdGhpcwogICAgICAgIDogbmV3IERpY3Rpb25hcnlUeXBlTWFzayhmb3J3YXJkVG8ubnVsbGFibGUoKSwgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICAgIGFsbG9jYXRpb25FbGVtZW50LCBrZXlUeXBlLCB2YWx1ZVR5cGUsIF90eXBlTWFwKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG5vbk51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUKICAgICAgICA/IG5ldyBEaWN0aW9uYXJ5VHlwZU1hc2soZm9yd2FyZFRvLm5vbk51bGxhYmxlKCksIGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgICBhbGxvY2F0aW9uRWxlbWVudCwga2V5VHlwZSwgdmFsdWVUeXBlLCBfdHlwZU1hcCkKICAgICAgICA6IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0RpY3Rpb25hcnkgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4YWN0ID0+IHRydWU7CgogIGJvb2wgY29udGFpbnNLZXkoU3RyaW5nIGtleSkgPT4gX3R5cGVNYXAuY29udGFpbnNLZXkoa2V5KTsKCiAgVHlwZU1hc2sgZ2V0VmFsdWVGb3JLZXkoU3RyaW5nIGtleSkgPT4gX3R5cGVNYXBba2V5XTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIERpY3Rpb25hcnlUeXBlTWFzaykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGFsbG9jYXRpb25Ob2RlID09IG90aGVyLmFsbG9jYXRpb25Ob2RlICYmCiAgICAgICAga2V5VHlwZSA9PSBvdGhlci5rZXlUeXBlICYmCiAgICAgICAgdmFsdWVUeXBlID09IG90aGVyLnZhbHVlVHlwZSAmJgogICAgICAgIF90eXBlTWFwLmtleXMuZXZlcnkoKGspID0+IG90aGVyLl90eXBlTWFwLmNvbnRhaW5zS2V5KGspKSAmJgogICAgICAgIG90aGVyLl90eXBlTWFwLmtleXMuZXZlcnkoCiAgICAgICAgICAgIChrKSA9PiBfdHlwZU1hcC5jb250YWluc0tleShrKSAmJiBfdHlwZU1hcFtrXSA9PSBvdGhlci5fdHlwZU1hcFtrXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgVHlwZU1hc2sgZm9yd2FyZEludGVyc2VjdGlvbiA9IGZvcndhcmRUby5pbnRlcnNlY3Rpb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIGlmIChmb3J3YXJkSW50ZXJzZWN0aW9uLmlzRW1wdHlPck51bGwpIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uOwogICAgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb24uaXNOdWxsYWJsZSA/IG51bGxhYmxlKCkgOiBub25OdWxsYWJsZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdW5pb24oZHluYW1pYyBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAodGhpcyA9PSBvdGhlcikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSBpZiAoZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyBvdGhlciA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyB0aGlzLm51bGxhYmxlKCkgOiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5pc0RpY3Rpb25hcnkpIHsKICAgICAgVHlwZU1hc2sgbmV3Rm9yd2FyZFRvID0gZm9yd2FyZFRvLnVuaW9uKG90aGVyLmZvcndhcmRUbywgY2xvc2VkV29ybGQpOwogICAgICBUeXBlTWFzayBuZXdLZXlUeXBlID0ga2V5VHlwZS51bmlvbihvdGhlci5rZXlUeXBlLCBjbG9zZWRXb3JsZCk7CiAgICAgIFR5cGVNYXNrIG5ld1ZhbHVlVHlwZSA9IHZhbHVlVHlwZS51bmlvbihvdGhlci52YWx1ZVR5cGUsIGNsb3NlZFdvcmxkKTsKICAgICAgTWFwPFN0cmluZywgVHlwZU1hc2s+IG1hcHBpbmdzID0gPFN0cmluZywgVHlwZU1hc2s+e307CiAgICAgIF90eXBlTWFwLmZvckVhY2goKGssIGR5bmFtaWMgdikgewogICAgICAgIGlmICghb3RoZXIuX3R5cGVNYXAuY29udGFpbnNLZXkoaykpIHsKICAgICAgICAgIG1hcHBpbmdzW2tdID0gdi5udWxsYWJsZSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIG90aGVyLl90eXBlTWFwLmZvckVhY2goKGssIHYpIHsKICAgICAgICBpZiAoX3R5cGVNYXAuY29udGFpbnNLZXkoaykpIHsKICAgICAgICAgIG1hcHBpbmdzW2tdID0gdi51bmlvbihfdHlwZU1hcFtrXSwgY2xvc2VkV29ybGQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtYXBwaW5nc1trXSA9IHYubnVsbGFibGUoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3IERpY3Rpb25hcnlUeXBlTWFzaygKICAgICAgICAgIG5ld0ZvcndhcmRUbywgbnVsbCwgbnVsbCwgbmV3S2V5VHlwZSwgbmV3VmFsdWVUeXBlLCBtYXBwaW5ncyk7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzTWFwICYmCiAgICAgICAgKG90aGVyLmtleVR5cGUgIT0gbnVsbCkgJiYKICAgICAgICAob3RoZXIudmFsdWVUeXBlICE9IG51bGwpKSB7CiAgICAgIFR5cGVNYXNrIG5ld0ZvcndhcmRUbyA9IGZvcndhcmRUby51bmlvbihvdGhlci5mb3J3YXJkVG8sIGNsb3NlZFdvcmxkKTsKICAgICAgVHlwZU1hc2sgbmV3S2V5VHlwZSA9IGtleVR5cGUudW5pb24ob3RoZXIua2V5VHlwZSwgY2xvc2VkV29ybGQpOwogICAgICBUeXBlTWFzayBuZXdWYWx1ZVR5cGUgPSB2YWx1ZVR5cGUudW5pb24ob3RoZXIudmFsdWVUeXBlLCBjbG9zZWRXb3JsZCk7CiAgICAgIHJldHVybiBuZXcgTWFwVHlwZU1hc2soCiAgICAgICAgICBuZXdGb3J3YXJkVG8sIG51bGwsIG51bGwsIG5ld0tleVR5cGUsIG5ld1ZhbHVlVHlwZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZm9yd2FyZFRvLnVuaW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBzdXBlciA9PSBvdGhlcjsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gY29tcHV0ZUhhc2hDb2RlKGFsbG9jYXRpb25Ob2RlLCBpc051bGxhYmxlLCBfdHlwZU1hcCwgZm9yd2FyZFRvKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnRGljdGlvbmFyeSgkZm9yd2FyZFRvLCBrZXk6ICRrZXlUeXBlLCAnCiAgICAgICAgJ3ZhbHVlOiAkdmFsdWVUeXBlLCBtYXA6ICRfdHlwZU1hcCknOwogIH0KfQqAoQBOTjwBDwFFRkhCTSwvTB00ATYtARYaHiYYGhVRAUAxNRdPPkBNTz9FFVAmBAE2DCgtFSUuLyMlOiEmCBMEAQwYFg9HPgQBDBsWSj0QBAEMIQwcAT0BOAEMJDQ1JChFI1EEAQxET0dIBAEMPBkTLS4mOCVNR009KC4mCgomJzsRJgoKJUkeIyVNR00ePw0yBgQBDC0BDBVNBAEMFjQuBAIBQXBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9kaWN0aW9uYXJ5X3R5cGVfbWFzay5kYXJ0RHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9mbGF0X3R5cGVfbWFzay5kYXJ0wABesy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIG1hc2tzOwoKLy8vIEEgZmxhdCB0eXBlIG1hc2sgaXMgYSB0eXBlIG1hc2sgdGhhdCBoYXMgYmVlbiBmbGF0dGVuZWQgdG8gY29udGFpbiBhCi8vLyBiYXNlIHR5cGUuCmNsYXNzIEZsYXRUeXBlTWFzayBpbXBsZW1lbnRzIFR5cGVNYXNrIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0ZsYXRUeXBlTWFza10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdmbGF0LXR5cGUtbWFzayc7CgogIHN0YXRpYyBjb25zdCBpbnQgRU1QVFkgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgRVhBQ1QgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgU1VCQ0xBU1MgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgU1VCVFlQRSA9IDM7CgogIGZpbmFsIENsYXNzRW50aXR5IGJhc2U7CiAgZmluYWwgaW50IGZsYWdzOwoKICBGbGF0VHlwZU1hc2soQ2xhc3NFbnRpdHkgYmFzZSwgaW50IGtpbmQsIGJvb2wgaXNOdWxsYWJsZSkKICAgICAgOiB0aGlzLmludGVybmFsKGJhc2UsIChraW5kIDw8IDEpIHwgKGlzTnVsbGFibGUgPyAxIDogMCkpOwoKICBGbGF0VHlwZU1hc2suZXhhY3QoQ2xhc3NFbnRpdHkgYmFzZSkgOiB0aGlzLmludGVybmFsKGJhc2UsIChFWEFDVCA8PCAxKSB8IDEpOwogIEZsYXRUeXBlTWFzay5zdWJjbGFzcyhDbGFzc0VudGl0eSBiYXNlKQogICAgICA6IHRoaXMuaW50ZXJuYWwoYmFzZSwgKFNVQkNMQVNTIDw8IDEpIHwgMSk7CiAgRmxhdFR5cGVNYXNrLnN1YnR5cGUoQ2xhc3NFbnRpdHkgYmFzZSkKICAgICAgOiB0aGlzLmludGVybmFsKGJhc2UsIChTVUJUWVBFIDw8IDEpIHwgMSk7CgogIGNvbnN0IEZsYXRUeXBlTWFzay5ub25OdWxsRW1wdHkoKQogICAgICA6IGJhc2UgPSBudWxsLAogICAgICAgIGZsYWdzID0gMDsKICBjb25zdCBGbGF0VHlwZU1hc2suZW1wdHkoKQogICAgICA6IGJhc2UgPSBudWxsLAogICAgICAgIGZsYWdzID0gMTsKCiAgRmxhdFR5cGVNYXNrLm5vbk51bGxFeGFjdChDbGFzc0VudGl0eSBiYXNlKSA6IHRoaXMuaW50ZXJuYWwoYmFzZSwgRVhBQ1QgPDwgMSk7CiAgRmxhdFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyhDbGFzc0VudGl0eSBiYXNlKQogICAgICA6IHRoaXMuaW50ZXJuYWwoYmFzZSwgU1VCQ0xBU1MgPDwgMSk7CiAgRmxhdFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKENsYXNzRW50aXR5IGJhc2UpCiAgICAgIDogdGhpcy5pbnRlcm5hbChiYXNlLCBTVUJUWVBFIDw8IDEpOwoKICBGbGF0VHlwZU1hc2suaW50ZXJuYWwodGhpcy5iYXNlLCB0aGlzLmZsYWdzKTsKCiAgLy8vIEVuc3VyZXMgdGhhdCB0aGUgZ2VuZXJhdGVkIG1hc2sgaXMgbm9ybWFsaXplZCwgaS5lLiwgYSBjYWxsIHRvCiAgLy8vIFtUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWRdIHdpdGggdGhlIGZhY3RvcnkncyByZXN1bHQgcmV0dXJucyBgdHJ1ZWAuCiAgZmFjdG9yeSBGbGF0VHlwZU1hc2subm9ybWFsaXplZCgKICAgICAgQ2xhc3NFbnRpdHkgYmFzZSwgaW50IGZsYWdzLCBKQ2xvc2VkV29ybGQgd29ybGQpIHsKICAgIGlmICgoZmxhZ3MgPj4gMSkgPT0gRU1QVFkgfHwgKChmbGFncyA+PiAxKSA9PSBFWEFDVCkpIHsKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2suaW50ZXJuYWwoYmFzZSwgZmxhZ3MpOwogICAgfQogICAgaWYgKChmbGFncyA+PiAxKSA9PSBTVUJUWVBFKSB7CiAgICAgIGlmICghd29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzQW55U3RyaWN0U3VidHlwZShiYXNlKSB8fAogICAgICAgICAgd29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzT25seVN1YmNsYXNzZXMoYmFzZSkpIHsKICAgICAgICBmbGFncyA9IChmbGFncyAmIDB4MSkgfCAoU1VCQ0xBU1MgPDwgMSk7CiAgICAgIH0KICAgIH0KICAgIGlmICgoKGZsYWdzID4+IDEpID09IFNVQkNMQVNTKSAmJgogICAgICAgICF3b3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJjbGFzcyhiYXNlKSkgewogICAgICBmbGFncyA9IChmbGFncyAmIDB4MSkgfCAoRVhBQ1QgPDwgMSk7CiAgICB9CiAgICBDb21tb25NYXNrcyBjb21tb25NYXNrcyA9IHdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICByZXR1cm4gY29tbW9uTWFza3MuZ2V0Q2FjaGVkTWFzaygKICAgICAgICBiYXNlLCBmbGFncywgKCkgPT4gbmV3IEZsYXRUeXBlTWFzay5pbnRlcm5hbChiYXNlLCBmbGFncykpOwogIH0KCiAgLy8vIERlc2VyaWFsaXplcyBhIFtGbGF0VHlwZU1hc2tdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgRmxhdFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBDbGFzc0VudGl0eSBiYXNlID0gc291cmNlLnJlYWRDbGFzc09yTnVsbCgpOwogICAgaW50IGZsYWdzID0gc291cmNlLnJlYWRJbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIENvbW1vbk1hc2tzIGNvbW1vbk1hc2tzID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIHJldHVybiBjb21tb25NYXNrcy5nZXRDYWNoZWRNYXNrKAogICAgICAgIGJhc2UsIGZsYWdzLCAoKSA9PiBuZXcgRmxhdFR5cGVNYXNrLmludGVybmFsKGJhc2UsIGZsYWdzKSk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtGbGF0VHlwZU1hc2tdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShUeXBlTWFza0tpbmQuZmxhdCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NPck51bGwoYmFzZSk7CiAgICBzaW5rLndyaXRlSW50KGZsYWdzKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBDbGFzc1F1ZXJ5IGdldCBfY2xhc3NRdWVyeSA9PiBpc0V4YWN0CiAgICAgID8gQ2xhc3NRdWVyeS5FWEFDVAogICAgICA6IChpc1N1YmNsYXNzID8gQ2xhc3NRdWVyeS5TVUJDTEFTUyA6IENsYXNzUXVlcnkuU1VCVFlQRSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gaXNFbXB0eU9yTnVsbCAmJiAhaXNOdWxsYWJsZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGwgPT4gaXNFbXB0eU9yTnVsbCAmJiBpc051bGxhYmxlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHlPck51bGwgPT4gKGZsYWdzID4+IDEpID09IEVNUFRZOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXhhY3QgPT4gKGZsYWdzID4+IDEpID09IEVYQUNUOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gKGZsYWdzICYgMSkgIT0gMDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVbmlvbiA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnRhaW5lciA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldCA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01hcCA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0RpY3Rpb25hcnkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGb3J3YXJkaW5nID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVmFsdWUgPT4gZmFsc2U7CgogIC8vIFRPRE8oa2FzcGVybCk6IEdldCByaWQgb2YgdGhlc2UuIFRoZXkgc2hvdWxkIG5vdCBiZSBhIHZpc2libGUKICAvLyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIHRoZXkgbWFrZSBpdCBoYXJkIHRvIGFkZAogIC8vIHByb3BlciB1bmlvbiB0eXBlcyBpZiB3ZSBldmVyIHdhbnQgdG8uCiAgYm9vbCBnZXQgaXNTdWJjbGFzcyA9PiAoZmxhZ3MgPj4gMSkgPT0gU1VCQ0xBU1M7CiAgYm9vbCBnZXQgaXNTdWJ0eXBlID0+IChmbGFncyA+PiAxKSA9PSBTVUJUWVBFOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBudWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlID8gdGhpcyA6IG5ldyBGbGF0VHlwZU1hc2suaW50ZXJuYWwoYmFzZSwgZmxhZ3MgfCAxKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG5vbk51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUgPyBuZXcgRmxhdFR5cGVNYXNrLmludGVybmFsKGJhc2UsIGZsYWdzICYgfjEpIDogdGhpczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnMoQ2xhc3NFbnRpdHkgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoYmFzZSwgb3RoZXIpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChpc0V4YWN0KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSBpZiAoaXNTdWJjbGFzcykgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKG90aGVyLCBiYXNlKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChpc1N1YnR5cGUpOwogICAgICByZXR1cm4gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2Yob3RoZXIsIGJhc2UpOwogICAgfQogIH0KCiAgYm9vbCBpc1NpbmdsZUltcGxlbWVudGF0aW9uT2YoQ2xhc3NFbnRpdHkgY2xzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIFNwZWNpYWwgY2FzZSBiYXNpYyB0eXBlcyBzbyB0aGF0LCBmb3IgZXhhbXBsZSwgSlNTdHJpbmcgaXMgdGhlCiAgICAvLyBzaW5nbGUgaW1wbGVtZW50YXRpb24gb2YgU3RyaW5nLgogICAgLy8gVGhlIGdlbmVyYWwgb3B0aW1pemF0aW9uIGlzIHRvIHJlYWxpemUgdGhlcmUgaXMgb25seSBvbmUgY2xhc3MgdGhhdAogICAgLy8gaW1wbGVtZW50cyBbYmFzZV0gYW5kIFtiYXNlXSBpcyBub3QgaW5zdGFudGlhdGVkLiBXZSBob3dldmVyIGRvCiAgICAvLyBub3QgdHJhY2sgY29ycmVjdGx5IHRoZSBsaXN0IG9mIHRydWx5IGluc3RhbnRpYXRlZCBjbGFzc2VzLgogICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKICAgIGlmIChjb250YWluc09ubHlTdHJpbmcoY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbHMgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBjb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzOwogICAgfQogICAgaWYgKGNvbnRhaW5zT25seUJvb2woY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbHMgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuYm9vbENsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3M7CiAgICB9CiAgICBpZiAoY29udGFpbnNPbmx5SW50KGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xzID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmludENsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyB8fAogICAgICAgICAgY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcyB8fAogICAgICAgICAgY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBjb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzOwogICAgfQogICAgaWYgKGNvbnRhaW5zT25seURvdWJsZShjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNscyA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgICAgY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3M7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW5NYXNrKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpc0VtcHR5T3JOdWxsKSByZXR1cm4gaXNOdWxsYWJsZSA/IG90aGVyLmlzTnVsbGFibGUgOiB0cnVlOwogICAgLy8gVGhlIGVtcHR5IHR5cGUgY29udGFpbnMgbm8gY2xhc3Nlcy4KICAgIGlmIChvdGhlci5pc0VtcHR5T3JOdWxsKSByZXR1cm4gZmFsc2U7CiAgICAvLyBRdWljayBjaGVjayB3aGV0aGVyIHRvIGhhbmRsZSBudWxsLgogICAgaWYgKGlzTnVsbGFibGUgJiYgIW90aGVyLmlzTnVsbGFibGUpIHJldHVybiBmYWxzZTsKICAgIG90aGVyID0gVHlwZU1hc2subm9uRm9yd2FyZGluZ01hc2sob3RoZXIpOwogICAgLy8gSWYgb3RoZXIgaXMgdW5pb24sIGRlbGVnYXRlIHRvIFVuaW9uVHlwZU1hc2suY29udGFpbnNNYXNrLgogICAgaWYgKG90aGVyIGlzISBGbGF0VHlwZU1hc2spIHJldHVybiBvdGhlci5jb250YWluc01hc2sodGhpcywgY2xvc2VkV29ybGQpOwogICAgLy8gVGhlIG90aGVyIG11c3QgYmUgZmxhdCwgc28gY29tcGFyZSBiYXNlIGFuZCBmbGFncy4KICAgIEZsYXRUeXBlTWFzayBmbGF0T3RoZXIgPSBvdGhlcjsKICAgIENsYXNzRW50aXR5IG90aGVyQmFzZSA9IGZsYXRPdGhlci5iYXNlOwogICAgLy8gSWYgb3RoZXIgaXMgZXhhY3QsIGl0IG9ubHkgY29udGFpbnMgaXRzIGJhc2UuCiAgICAvLyBUT0RPKGhlcmh1dCk6IEdldCByaWQgb2YgaXNTaW5nbGVJbXBsZW1lbnRhdGlvbk9mLgogICAgaWYgKGZsYXRPdGhlci5pc0V4YWN0KSB7CiAgICAgIHJldHVybiAoaXNFeGFjdCAmJiBiYXNlID09IG90aGVyQmFzZSkgfHwKICAgICAgICAgIGlzU2luZ2xlSW1wbGVtZW50YXRpb25PZihvdGhlckJhc2UsIGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIC8vIElmIG90aGVyIGlzIHN1YmNsYXNzLCB0aGlzIGhhcyB0byBiZSBzdWJjbGFzcywgYXMgd2VsbC4gVW5sZXNzCiAgICAvLyBmbGF0T3RoZXIuYmFzZSBjb3ZlcnMgYWxsIHN1YnR5cGVzIG9mIHRoaXMuIEN1cnJlbnRseSwgd2Ugb25seQogICAgLy8gY29uc2lkZXIgb2JqZWN0IHRvIGJlaGF2ZSB0aGF0IHdheS4KICAgIC8vIFRPRE8oaGVyaHV0KTogQWRkIGNoZWNrIHdoZXRoZXIgZmxhdE90aGVyLmJhc2UgaXMgc3VwZXJjbGFzcyBvZgogICAgLy8gICAgICAgICAgICAgICBhbGwgc3ViY2xhc3NlcyBvZiB0aGlzLmJhc2UuCiAgICBpZiAoZmxhdE90aGVyLmlzU3ViY2xhc3MpIHsKICAgICAgaWYgKGlzU3VidHlwZSkKICAgICAgICByZXR1cm4gKG90aGVyQmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyk7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2YoYmFzZSwgb3RoZXJCYXNlKTsKICAgIH0KICAgIGFzc2VydChmbGF0T3RoZXIuaXNTdWJ0eXBlKTsKICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyBUeXBlTWFzayBzYXRpc2ZpZXMgb3RoZXJCYXNlJ3MgaW50ZXJmYWNlLgogICAgcmV0dXJuIHNhdGlzZmllcyhvdGhlckJhc2UsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNNYXNrKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBvdGhlci5pc0luTWFzayh0aGlzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seUludChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgICByZXR1cm4gYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pbnRDbGFzcyB8fAogICAgICAgIGJhc2UgPT0gY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyB8fAogICAgICAgIGJhc2UgPT0gY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzIHx8CiAgICAgICAgYmFzZSA9PSBjb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzIHx8CiAgICAgICAgYmFzZSA9PSBjb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlEb3VibGUoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5TnVtKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNvbnRhaW5zT25seUludChjbG9zZWRXb3JsZCkgfHwKICAgICAgICBjb250YWluc09ubHlEb3VibGUoY2xvc2VkV29ybGQpIHx8CiAgICAgICAgYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5udW1DbGFzcyB8fAogICAgICAgIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5Qm9vbChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcyB8fAogICAgICAgIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seVN0cmluZyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzIHx8CiAgICAgICAgYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHkoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gYmFzZSA9PSBjbHM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHNhdGlzZmllcyhDbGFzc0VudGl0eSBjbHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlzRW1wdHlPck51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YnR5cGVPZihiYXNlLCBjbHMpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IHNpbmdsZUNsYXNzKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlzRW1wdHlPck51bGwpIHJldHVybiBudWxsOwogICAgaWYgKGlzTnVsbGFibGUpIHJldHVybiBudWxsOyAvLyBJdCBpcyBOdWxsIGFuZCBzb21lIG90aGVyIGNsYXNzLgogICAgaWYgKGlzRXhhY3QpIHsKICAgICAgcmV0dXJuIGJhc2U7CiAgICB9IGVsc2UgaWYgKGlzU3ViY2xhc3MpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YmNsYXNzKGJhc2UpCiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogYmFzZTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChpc1N1YnR5cGUpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNBbGwoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaXNFbXB0eU9yTnVsbCB8fCBpc0V4YWN0KSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gaWRlbnRpY2FsKGJhc2UsIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHVuaW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydChvdGhlciAhPSBudWxsKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQodGhpcywgY2xvc2VkV29ybGQpKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQob3RoZXIsIGNsb3NlZFdvcmxkKSk7CiAgICBpZiAob3RoZXIgaXMhIEZsYXRUeXBlTWFzaykgcmV0dXJuIG90aGVyLnVuaW9uKHRoaXMsIGNsb3NlZFdvcmxkKTsKICAgIEZsYXRUeXBlTWFzayBmbGF0T3RoZXIgPSBvdGhlcjsKICAgIGlmIChpc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBpc051bGxhYmxlID8gZmxhdE90aGVyLm51bGxhYmxlKCkgOiBmbGF0T3RoZXI7CiAgICB9IGVsc2UgaWYgKGZsYXRPdGhlci5pc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBmbGF0T3RoZXIuaXNOdWxsYWJsZSA/IG51bGxhYmxlKCkgOiB0aGlzOwogICAgfSBlbHNlIGlmIChiYXNlID09IGZsYXRPdGhlci5iYXNlKSB7CiAgICAgIHJldHVybiB1bmlvblNhbWUoZmxhdE90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihmbGF0T3RoZXIuYmFzZSwgYmFzZSkpIHsKICAgICAgcmV0dXJuIHVuaW9uU3RyaWN0U3ViY2xhc3MoZmxhdE90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihiYXNlLCBmbGF0T3RoZXIuYmFzZSkpIHsKICAgICAgcmV0dXJuIGZsYXRPdGhlci51bmlvblN0cmljdFN1YmNsYXNzKHRoaXMsIGNsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2YoZmxhdE90aGVyLmJhc2UsIGJhc2UpKSB7CiAgICAgIHJldHVybiB1bmlvblN0cmljdFN1YnR5cGUoZmxhdE90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKGJhc2UsIGZsYXRPdGhlci5iYXNlKSkgewogICAgICByZXR1cm4gZmxhdE90aGVyLnVuaW9uU3RyaWN0U3VidHlwZSh0aGlzLCBjbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFVuaW9uVHlwZU1hc2suX2ludGVybmFsKDxGbGF0VHlwZU1hc2s+W3RoaXMsIGZsYXRPdGhlcl0pOwogICAgfQogIH0KCiAgVHlwZU1hc2sgdW5pb25TYW1lKEZsYXRUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoYmFzZSA9PSBvdGhlci5iYXNlKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQodGhpcywgY2xvc2VkV29ybGQpKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQob3RoZXIsIGNsb3NlZFdvcmxkKSk7CiAgICAvLyBUaGUgdHdvIG1hc2tzIHNoYXJlIHRoZSBiYXNlIHR5cGUsIHNvIHdlIG11c3QgY2hvc2UgdGhlIGxlYXN0CiAgICAvLyBjb25zdHJhaW5pbmcga2luZCAodGhlIGhpZ2hlc3QpIG9mIHRoZSB0d28uIElmIGVpdGhlciBvbmUgb2YKICAgIC8vIHRoZSBtYXNrcyBhcmUgbnVsbGFibGUgdGhlIHJlc3VsdCBzaG91bGQgYmUgbnVsbGFibGUgdG9vLgogICAgLy8gQXMgYm90aCBtYXNrcyBhcmUgbm9ybWFsaXplZCwgdGhlIHJlc3VsdCB3aWxsIGJlLCB0b28uCiAgICBpbnQgY29tYmluZWQgPSAoZmxhZ3MgPiBvdGhlci5mbGFncykKICAgICAgICA/IGZsYWdzIHwgKG90aGVyLmZsYWdzICYgMSkKICAgICAgICA6IG90aGVyLmZsYWdzIHwgKGZsYWdzICYgMSk7CiAgICBpZiAoZmxhZ3MgPT0gY29tYmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmZsYWdzID09IGNvbWJpbmVkKSB7CiAgICAgIHJldHVybiBvdGhlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLm5vcm1hbGl6ZWQoYmFzZSwgY29tYmluZWQsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIFR5cGVNYXNrIHVuaW9uU3RyaWN0U3ViY2xhc3MoRmxhdFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydChiYXNlICE9IG90aGVyLmJhc2UpOwogICAgYXNzZXJ0KGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihvdGhlci5iYXNlLCBiYXNlKSk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKHRoaXMsIGNsb3NlZFdvcmxkKSk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKG90aGVyLCBjbG9zZWRXb3JsZCkpOwogICAgaW50IGNvbWJpbmVkOwogICAgaWYgKChpc0V4YWN0ICYmIG90aGVyLmlzRXhhY3QpIHx8CiAgICAgICAgYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICAvLyBTaW5jZSB0aGUgb3RoZXIgbWFzayBpcyBhIHN1YmNsYXNzIG9mIHRoaXMgbWFzaywgd2UgbmVlZCB0aGUKICAgICAgLy8gcmVzdWx0aW5nIHVuaW9uIHRvIGJlIGEgc3ViY2xhc3MgdG9vLiBJZiBlaXRoZXIgb25lIG9mIHRoZQogICAgICAvLyBtYXNrcyBhcmUgbnVsbGFibGUgdGhlIHJlc3VsdCBzaG91bGQgYmUgbnVsbGFibGUgdG9vLgogICAgICBjb21iaW5lZCA9IChTVUJDTEFTUyA8PCAxKSB8ICgoZmxhZ3MgfCBvdGhlci5mbGFncykgJiAxKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEJvdGggbWFza3MgYXJlIGF0IGxlYXN0IHN1YmNsYXNzIG1hc2tzLCBzbyB3ZSBwaWNrIHRoZSBsZWFzdAogICAgICAvLyBjb25zdHJhaW5pbmcga2luZCAodGhlIGhpZ2hlc3QpIG9mIHRoZSB0d28uIElmIGVpdGhlciBvbmUgb2YKICAgICAgLy8gdGhlIG1hc2tzIGFyZSBudWxsYWJsZSB0aGUgcmVzdWx0IHNob3VsZCBiZSBudWxsYWJsZSB0b28uCiAgICAgIGNvbWJpbmVkID0gKGZsYWdzID4gb3RoZXIuZmxhZ3MpCiAgICAgICAgICA/IGZsYWdzIHwgKG90aGVyLmZsYWdzICYgMSkKICAgICAgICAgIDogb3RoZXIuZmxhZ3MgfCAoZmxhZ3MgJiAxKTsKICAgIH0KICAgIC8vIElmIHdlIHdlYWtlbiB0aGUgY29uc3RyYWludCBvbiB0aGlzIHR5cGUsIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQKICAgIC8vIHRoZSByZXN1bHQgaXMgbm9ybWFsaXplZC4KICAgIHJldHVybiAoZmxhZ3MgIT0gY29tYmluZWQpCiAgICAgICAgPyBuZXcgRmxhdFR5cGVNYXNrLm5vcm1hbGl6ZWQoYmFzZSwgY29tYmluZWQsIGNsb3NlZFdvcmxkKQogICAgICAgIDogdGhpczsKICB9CgogIFR5cGVNYXNrIHVuaW9uU3RyaWN0U3VidHlwZShGbGF0VHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KGJhc2UgIT0gb3RoZXIuYmFzZSk7CiAgICBhc3NlcnQoIWNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihvdGhlci5iYXNlLCBiYXNlKSk7CiAgICBhc3NlcnQoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2Yob3RoZXIuYmFzZSwgYmFzZSkpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZCh0aGlzLCBjbG9zZWRXb3JsZCkpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZChvdGhlciwgY2xvc2VkV29ybGQpKTsKICAgIC8vIFNpbmNlIHRoZSBvdGhlciBtYXNrIGlzIGEgc3VidHlwZSBvZiB0aGlzIG1hc2ssIHdlIG5lZWQgdGhlCiAgICAvLyByZXN1bHRpbmcgdW5pb24gdG8gYmUgYSBzdWJ0eXBlIHRvby4gSWYgZWl0aGVyIG9uZSBvZiB0aGUgbWFza3MKICAgIC8vIGFyZSBudWxsYWJsZSB0aGUgcmVzdWx0IHNob3VsZCBiZSBudWxsYWJsZSB0b28uCiAgICBpbnQgY29tYmluZWQgPSAoU1VCVFlQRSA8PCAxKSB8ICgoZmxhZ3MgfCBvdGhlci5mbGFncykgJiAxKTsKICAgIC8vIFdlIGtub3cgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHN1YnR5cGUsIFtvdGhlci5iYXNlXSwgc28gbm8gbmVlZAogICAgLy8gdG8gbm9ybWFsaXplLgogICAgcmV0dXJuIChmbGFncyAhPSBjb21iaW5lZCkKICAgICAgICA/IG5ldyBGbGF0VHlwZU1hc2subm9ybWFsaXplZChiYXNlLCBjb21iaW5lZCwgY2xvc2VkV29ybGQpCiAgICAgICAgOiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydChvdGhlciAhPSBudWxsKTsKICAgIGlmIChvdGhlciBpcyEgRmxhdFR5cGVNYXNrKSByZXR1cm4gb3RoZXIuaW50ZXJzZWN0aW9uKHRoaXMsIGNsb3NlZFdvcmxkKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQodGhpcywgY2xvc2VkV29ybGQpKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQob3RoZXIsIGNsb3NlZFdvcmxkKSk7CiAgICBGbGF0VHlwZU1hc2sgZmxhdE90aGVyID0gb3RoZXI7CgogICAgQ2xhc3NFbnRpdHkgb3RoZXJCYXNlID0gZmxhdE90aGVyLmJhc2U7CgogICAgYm9vbCBpbmNsdWRlTnVsbCA9IGlzTnVsbGFibGUgJiYgZmxhdE90aGVyLmlzTnVsbGFibGU7CgogICAgaWYgKGlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsID8gdGhpcyA6IG5vbk51bGxhYmxlKCk7CiAgICB9IGVsc2UgaWYgKGZsYXRPdGhlci5pc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBpbmNsdWRlTnVsbCA/IG90aGVyIDogb3RoZXIubm9uTnVsbGFibGUoKTsKICAgIH0KCiAgICBTdWJjbGFzc1Jlc3VsdCByZXN1bHQgPSBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeQogICAgICAgIC5jb21tb25TdWJjbGFzc2VzKGJhc2UsIF9jbGFzc1F1ZXJ5LCBvdGhlckJhc2UsIGZsYXRPdGhlci5fY2xhc3NRdWVyeSk7CgogICAgc3dpdGNoIChyZXN1bHQua2luZCkgewogICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5FTVBUWToKICAgICAgICByZXR1cm4gaW5jbHVkZU51bGwKICAgICAgICAgICAgPyBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLm51bGxUeXBlCiAgICAgICAgICAgIDogY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGU7CiAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLkVYQUNUMToKICAgICAgICBhc3NlcnQoaXNFeGFjdCk7CiAgICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsID8gdGhpcyA6IG5vbk51bGxhYmxlKCk7CiAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLkVYQUNUMjoKICAgICAgICBhc3NlcnQob3RoZXIuaXNFeGFjdCk7CiAgICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsID8gb3RoZXIgOiBvdGhlci5ub25OdWxsYWJsZSgpOwogICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TVUJDTEFTUzE6CiAgICAgICAgYXNzZXJ0KGlzU3ViY2xhc3MpOwogICAgICAgIHJldHVybiBpbmNsdWRlTnVsbCA/IHRoaXMgOiBub25OdWxsYWJsZSgpOwogICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TVUJDTEFTUzI6CiAgICAgICAgYXNzZXJ0KGZsYXRPdGhlci5pc1N1YmNsYXNzKTsKICAgICAgICByZXR1cm4gaW5jbHVkZU51bGwgPyBvdGhlciA6IG90aGVyLm5vbk51bGxhYmxlKCk7CiAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNVQlRZUEUxOgogICAgICAgIGFzc2VydChpc1N1YnR5cGUpOwogICAgICAgIHJldHVybiBpbmNsdWRlTnVsbCA/IHRoaXMgOiBub25OdWxsYWJsZSgpOwogICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TVUJUWVBFMjoKICAgICAgICBhc3NlcnQoZmxhdE90aGVyLmlzU3VidHlwZSk7CiAgICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsID8gb3RoZXIgOiBvdGhlci5ub25OdWxsYWJsZSgpOwogICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TRVQ6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgaWYgKHJlc3VsdC5jbGFzc2VzLmlzRW1wdHkpIHsKICAgICAgICAgIHJldHVybiBpbmNsdWRlTnVsbAogICAgICAgICAgICAgID8gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5udWxsVHlwZQogICAgICAgICAgICAgIDogY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGU7CiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuY2xhc3Nlcy5sZW5ndGggPT0gMSkgewogICAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gcmVzdWx0LmNsYXNzZXMuZmlyc3Q7CiAgICAgICAgICByZXR1cm4gaW5jbHVkZU51bGwKICAgICAgICAgICAgICA/IG5ldyBUeXBlTWFzay5zdWJjbGFzcyhjbHMsIGNsb3NlZFdvcmxkKQogICAgICAgICAgICAgIDogbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyhjbHMsIGNsb3NlZFdvcmxkKTsKICAgICAgICB9CgogICAgICAgIExpc3Q8RmxhdFR5cGVNYXNrPiBtYXNrcyA9IDxGbGF0VHlwZU1hc2s+W107CiAgICAgICAgaWYgKGluY2x1ZGVOdWxsKSB7CiAgICAgICAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiByZXN1bHQuY2xhc3NlcykgewogICAgICAgICAgICBtYXNrcy5hZGQobmV3IFR5cGVNYXNrLnN1YmNsYXNzKGNscywgY2xvc2VkV29ybGQpKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gcmVzdWx0LmNsYXNzZXMpIHsKICAgICAgICAgICAgbWFza3MuYWRkKG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoY2xzLCBjbG9zZWRXb3JsZCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobWFza3MubGVuZ3RoID4gVW5pb25UeXBlTWFzay5NQVhfVU5JT05fTEVOR1RIKSB7CiAgICAgICAgICByZXR1cm4gVW5pb25UeXBlTWFzay5mbGF0dGVuKG1hc2tzLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgVW5pb25UeXBlTWFzay5faW50ZXJuYWwobWFza3MpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Rpc2pvaW50KFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChvdGhlciBpcyEgRmxhdFR5cGVNYXNrKSByZXR1cm4gb3RoZXIuaXNEaXNqb2ludCh0aGlzLCBjbG9zZWRXb3JsZCk7CiAgICBGbGF0VHlwZU1hc2sgZmxhdE90aGVyID0gb3RoZXI7CgogICAgaWYgKGlzTnVsbGFibGUgJiYgZmxhdE90aGVyLmlzTnVsbGFibGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChpc0VtcHR5T3JOdWxsIHx8IGZsYXRPdGhlci5pc0VtcHR5T3JOdWxsKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChiYXNlID09IGZsYXRPdGhlci5iYXNlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNFeGFjdCAmJiBmbGF0T3RoZXIuaXNFeGFjdCkgcmV0dXJuIHRydWU7CgogICAgaWYgKGlzRXhhY3QpIHJldHVybiAhZmxhdE90aGVyLmNvbnRhaW5zKGJhc2UsIGNsb3NlZFdvcmxkKTsKICAgIGlmIChmbGF0T3RoZXIuaXNFeGFjdCkgcmV0dXJuICFjb250YWlucyhmbGF0T3RoZXIuYmFzZSwgY2xvc2VkV29ybGQpOwoKICAgIC8vIE5vcm1hbGl6YXRpb24gZ3VhcmFudGVlcyB0aGF0IGlzRXhhY3QgPT09ICFpc1N1YmNsYXNzICYmICFpc1N1YnR5cGUuCiAgICAvLyBCb3RoIGFyZSBzdWJjbGFzcyBvciBzdWJ0eXBlIG1hc2tzLCBzbyBpZiB0aGVyZSBpcyBhIHN1YmNsYXNzCiAgICAvLyByZWxhdGlvbnNoaXAsIHRoZXkgYXJlIG5vdCBkaXNqb2ludC4KICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2YoZmxhdE90aGVyLmJhc2UsIGJhc2UpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2YoYmFzZSwgZmxhdE90aGVyLmJhc2UpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBUd28gZGlmZmVyZW50IGJhc2UgY2xhc3NlcyBoYXZlIG5vIGNvbW1vbiBzdWJjbGFzcyB1bmxlc3Mgb25lIGlzIGEKICAgIC8vIHN1YmNsYXNzIG9mIHRoZSBvdGhlciAoY2hlY2tlZCBhYm92ZSkuCiAgICBpZiAoaXNTdWJjbGFzcyAmJiBmbGF0T3RoZXIuaXNTdWJjbGFzcykgcmV0dXJuIHRydWU7CgogICAgcmV0dXJuIF9pc0Rpc2pvaW50SGVscGVyKHRoaXMsIGZsYXRPdGhlciwgY2xvc2VkV29ybGQpOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzRGlzam9pbnRIZWxwZXIoCiAgICAgIEZsYXRUeXBlTWFzayBhLCBGbGF0VHlwZU1hc2sgYiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoIWEuaXNTdWJjbGFzcyAmJiBiLmlzU3ViY2xhc3MpIHsKICAgICAgcmV0dXJuIF9pc0Rpc2pvaW50SGVscGVyKGIsIGEsIGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIGFzc2VydChhLmlzU3ViY2xhc3MgfHwgYS5pc1N1YnR5cGUpOwogICAgYXNzZXJ0KGIuaXNTdWJ0eXBlKTsKICAgIHZhciBlbGVtZW50cyA9IGEuaXNTdWJjbGFzcwogICAgICAgID8gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuc3RyaWN0U3ViY2xhc3Nlc09mKGEuYmFzZSkKICAgICAgICA6IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LnN0cmljdFN1YnR5cGVzT2YoYS5iYXNlKTsKICAgIGZvciAodmFyIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKGVsZW1lbnQsIGIuYmFzZSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uU2FtZShGbGF0VHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KGJhc2UgPT0gb3RoZXIuYmFzZSk7CiAgICAvLyBUaGUgdHdvIG1hc2tzIHNoYXJlIHRoZSBiYXNlIHR5cGUsIHNvIHdlIG11c3QgY2hvc2UgdGhlIG1vc3QKICAgIC8vIGNvbnN0cmFpbmluZyBraW5kICh0aGUgbG93ZXN0KSBvZiB0aGUgdHdvLiBPbmx5IGlmIGJvdGggbWFza3MKICAgIC8vIGFyZSBudWxsYWJsZSwgd2lsbCB0aGUgcmVzdWx0IGJlIG51bGxhYmxlIHRvby4KICAgIC8vIFRoZSByZXN1bHQgd2lsbCBiZSBub3JtYWxpemVkLCBhcyB0aGUgdHdvIGlucHV0cyBhcmUgbm9ybWFsaXplZCwgdG9vLgogICAgaW50IGNvbWJpbmVkID0gKGZsYWdzIDwgb3RoZXIuZmxhZ3MpCiAgICAgICAgPyBmbGFncyAmICgob3RoZXIuZmxhZ3MgJiAxKSB8IH4xKQogICAgICAgIDogb3RoZXIuZmxhZ3MgJiAoKGZsYWdzICYgMSkgfCB+MSk7CiAgICBpZiAoZmxhZ3MgPT0gY29tYmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmZsYWdzID09IGNvbWJpbmVkKSB7CiAgICAgIHJldHVybiBvdGhlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLm5vcm1hbGl6ZWQoYmFzZSwgY29tYmluZWQsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIFR5cGVNYXNrIGludGVyc2VjdGlvblN0cmljdFN1YmNsYXNzKAogICAgICBGbGF0VHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KGJhc2UgIT0gb3RoZXIuYmFzZSk7CiAgICBhc3NlcnQoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKG90aGVyLmJhc2UsIGJhc2UpKTsKICAgIC8vIElmIHRoaXMgbWFzayBpc24ndCBhdCBsZWFzdCBhIHN1YmNsYXNzIG1hc2ssIHRoZW4gdGhlCiAgICAvLyBpbnRlcnNlY3Rpb24gd2l0aCB0aGUgb3RoZXIgbWFzayBpcyBlbXB0eS4KICAgIGlmIChpc0V4YWN0KSByZXR1cm4gaW50ZXJzZWN0aW9uRW1wdHkob3RoZXIpOwogICAgLy8gT25seSB0aGUgb3RoZXIgbWFzayBwdXRzIGNvbnN0cmFpbnRzIG9uIHRoZSBpbnRlcnNlY3Rpb24gbWFzaywKICAgIC8vIHNvIGJhc2UgdGhlIGNvbWJpbmVkIGZsYWdzIG9uIHRoZSBvdGhlciBtYXNrLiBPbmx5IGlmIGJvdGgKICAgIC8vIG1hc2tzIGFyZSBudWxsYWJsZSwgd2lsbCB0aGUgcmVzdWx0IGJlIG51bGxhYmxlIHRvby4KICAgIC8vIFRoZSByZXN1bHQgaXMgZ3VhcmFudGVlZCB0byBiZSBub3JtYWxpemVkLCBhcyB0aGUgb3RoZXIgdHlwZQogICAgLy8gd2FzIG5vcm1hbGl6ZWQuCiAgICBpbnQgY29tYmluZWQgPSBvdGhlci5mbGFncyAmICgoZmxhZ3MgJiAxKSB8IH4xKTsKICAgIGlmIChvdGhlci5mbGFncyA9PSBjb21iaW5lZCkgewogICAgICByZXR1cm4gb3RoZXI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5ub3JtYWxpemVkKG90aGVyLmJhc2UsIGNvbWJpbmVkLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBUeXBlTWFzayBpbnRlcnNlY3Rpb25FbXB0eShGbGF0VHlwZU1hc2sgb3RoZXIpIHsKICAgIHJldHVybiBpc051bGxhYmxlICYmIG90aGVyLmlzTnVsbGFibGUKICAgICAgICA/IG5ldyBUeXBlTWFzay5lbXB0eSgpCiAgICAgICAgOiBuZXcgVHlwZU1hc2subm9uTnVsbEVtcHR5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNhbkhpdChNZW1iZXJFbnRpdHkgZWxlbWVudCwgTmFtZSBuYW1lLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgICBhc3NlcnQoZWxlbWVudC5uYW1lID09IG5hbWUudGV4dCk7CiAgICBpZiAoaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGlzTnVsbCkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuaGFzRWxlbWVudEluKAogICAgICAgICAgY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MsIG5hbWUsIGVsZW1lbnQpOwogICAgfQoKICAgIENsYXNzRW50aXR5IG90aGVyID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgIGlmIChvdGhlciA9PSBjb21tb25FbGVtZW50cy5qc051bGxDbGFzcykgewogICAgICByZXR1cm4gaXNOdWxsYWJsZTsKICAgIH0gZWxzZSBpZiAoaXNFeGFjdCkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuaGFzRWxlbWVudEluKGJhc2UsIG5hbWUsIGVsZW1lbnQpOwogICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5oYXNFbGVtZW50SW4oYmFzZSwgbmFtZSwgZWxlbWVudCkgfHwKICAgICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihvdGhlciwgYmFzZSkgfHwKICAgICAgICAgIGNsb3NlZFdvcmxkLmhhc0FueVN1YmNsYXNzVGhhdE1peGVzKGJhc2UsIG90aGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChpc1N1YnR5cGUpOwogICAgICBib29sIHJlc3VsdCA9IGNsb3NlZFdvcmxkLmhhc0VsZW1lbnRJbihiYXNlLCBuYW1lLCBlbGVtZW50KSB8fAogICAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2Yob3RoZXIsIGJhc2UpIHx8CiAgICAgICAgICBjbG9zZWRXb3JsZC5oYXNBbnlTdWJjbGFzc1RoYXRJbXBsZW1lbnRzKG90aGVyLCBiYXNlKSB8fAogICAgICAgICAgY2xvc2VkV29ybGQuaGFzQW55U3ViY2xhc3NPZk1peGluVXNlVGhhdEltcGxlbWVudHMob3RoZXIsIGJhc2UpOwogICAgICBpZiAocmVzdWx0KSByZXR1cm4gdHJ1ZTsKICAgICAgLy8gSWYgdGhlIGNsYXNzIGlzIHVzZWQgYXMgYSBtaXhpbiwgd2UgaGF2ZSB0byBjaGVjayBpZiB0aGUgZWxlbWVudAogICAgICAvLyBjYW4gYmUgaGl0IGZyb20gYW55IG9mIHRoZSBtaXhpbiBhcHBsaWNhdGlvbnMuCiAgICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBtaXhpblVzZXMgPSBjbG9zZWRXb3JsZC5taXhpblVzZXNPZihiYXNlKTsKICAgICAgcmV0dXJuIG1peGluVXNlcy5hbnkoKG1peGluQXBwbGljYXRpb24pID0+CiAgICAgICAgICBjbG9zZWRXb3JsZC5oYXNFbGVtZW50SW4obWl4aW5BcHBsaWNhdGlvbiwgbmFtZSwgZWxlbWVudCkgfHwKICAgICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihvdGhlciwgbWl4aW5BcHBsaWNhdGlvbikgfHwKICAgICAgICAgIGNsb3NlZFdvcmxkLmhhc0FueVN1YmNsYXNzVGhhdE1peGVzKG1peGluQXBwbGljYXRpb24sIG90aGVyKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBjb3ZhcmlhbnQgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBBIGNhbGwgb24gYW4gZW1wdHkgdHlwZSBtYXNrIGlzIGVpdGhlciBkZWFkIGNvZGUsIG9yIGEgY2FsbCBvbgogICAgLy8gYG51bGxgLgogICAgaWYgKGlzRW1wdHlPck51bGwpIHJldHVybiBmYWxzZTsKICAgIC8vIEEgY2FsbCBvbiBhbiBleGFjdCBtYXNrIGZvciBhbiBhYnN0cmFjdCBjbGFzcyBpcyBkZWFkIGNvZGUuCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBIHR5cGUgbWFzayBjYW5ub3QgYmUgYWJzdHJhY3QuIFJlbW92ZSB0aGUgbmVlZAogICAgLy8gZm9yIHRoaXMgbm9pc2UgKGN1cnJlbnRseSB1c2VkIGZvciBzdXBlci1jYWxscyBpbiBpbmZlcmVuY2UgYW5kIG1pcnJvcgogICAgLy8gdXNhZ2UpLgogICAgaWYgKGlzRXhhY3QgJiYgYmFzZS5pc0Fic3RyYWN0KSByZXR1cm4gZmFsc2U7CgogICAgcmV0dXJuIGNsb3NlZFdvcmxkLm5lZWRzTm9TdWNoTWV0aG9kKGJhc2UsIHNlbGVjdG9yLCBfY2xhc3NRdWVyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9jYXRlU2luZ2xlTWVtYmVyKFNlbGVjdG9yIHNlbGVjdG9yLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpc0VtcHR5T3JOdWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChjbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCB0aGlzKSkgcmV0dXJuIG51bGw7CiAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IHRhcmdldHMgPSBjbG9zZWRXb3JsZC5sb2NhdGVNZW1iZXJzKHNlbGVjdG9yLCB0aGlzKTsKICAgIGlmICh0YXJnZXRzLmxlbmd0aCAhPSAxKSByZXR1cm4gbnVsbDsKICAgIE1lbWJlckVudGl0eSByZXN1bHQgPSB0YXJnZXRzLmZpcnN0OwogICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nID0gcmVzdWx0LmVuY2xvc2luZ0NsYXNzOwogICAgLy8gV2Ugb25seSByZXR1cm4gdGhlIGZvdW5kIGVsZW1lbnQgaWYgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSBpbXBsZW1lbnRlZCBvbgogICAgLy8gYWxsIGNsYXNzZXMgaW4gdGhlIHJlY2VpdmVyIHR5cGUgW3RoaXNdLiBJdCBjb3VsZCBiZSBmb3VuZCBvbmx5IGluIGEKICAgIC8vIHN1YmNsYXNzIG9yIGluIGFuIGluaGVyaXRhbmNlLXdpc2UgdW5yZWxhdGVkIGNsYXNzIGluIGNhc2Ugb2Ygc3VidHlwZQogICAgLy8gc2VsZWN0b3JzLgogICAgaWYgKGlzU3VidHlwZSkgewogICAgICAvLyBpZiAoY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihlbmNsb3NpbmcpKSB7CiAgICAgIGlmIChjbG9zZWRXb3JsZC5ldmVyeVN1YnR5cGVJc1N1YmNsYXNzT2ZPck1peGluVXNlT2YoYmFzZSwgZW5jbG9zaW5nKSkgewogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgLy99CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihiYXNlLCBlbmNsb3NpbmcpKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBpZiAoY2xvc2VkV29ybGQuaXNTdWJjbGFzc09mTWl4aW5Vc2VPZihiYXNlLCBlbmNsb3NpbmcpKSByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBGbGF0VHlwZU1hc2spIHJldHVybiBmYWxzZTsKICAgIEZsYXRUeXBlTWFzayBvdGhlck1hc2sgPSBvdGhlcjsKICAgIHJldHVybiAoZmxhZ3MgPT0gb3RoZXJNYXNrLmZsYWdzKSAmJiAoYmFzZSA9PSBvdGhlck1hc2suYmFzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiAoYmFzZSA9PSBudWxsID8gMCA6IGJhc2UuaGFzaENvZGUpICsgMzEgKiBmbGFncy5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChpc0VtcHR5T3JOdWxsKSByZXR1cm4gaXNOdWxsYWJsZSA/ICdbbnVsbF0nIDogJ1tlbXB0eV0nOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChpc051bGxhYmxlKSBidWZmZXIud3JpdGUoJ251bGx8Jyk7CiAgICBpZiAoaXNFeGFjdCkgYnVmZmVyLndyaXRlKCdleGFjdD0nKTsKICAgIGlmIChpc1N1YmNsYXNzKSBidWZmZXIud3JpdGUoJ3N1YmNsYXNzPScpOwogICAgaWYgKGlzU3VidHlwZSkgYnVmZmVyLndyaXRlKCdzdWJ0eXBlPScpOwogICAgYnVmZmVyLndyaXRlKGJhc2UubmFtZSk7CiAgICByZXR1cm4gIlskYnVmZmVyXSI7CiAgfQp9CoKJAE5OPAEPAUkPKUYdLgEeHiEgARoTATxBAVAqMikxASQVEx0VEwFRMSwwKwEwAUVOIzk8NQYjPToxCAYmPCwGOSZEBAE6KzUXMSIVPyZEBAEwDCgnFSEaEwQBKBlBAQw0DDIMMwwtDCsBDB0MIQwbDBsMIgwiDB0BQ0EsMzEBDBhLBAEMG0wEAQw/GRQpExoUHUMNGUIGBAFNRihLR0NAKz4vBik8LQYoOy42MS8GKz4vBhIEAQw8RCsrKzcvQk46JCw1Oh0vPAZGRitHMiAVRkcGIUQuBAEMQC4EAQwzQDotNTAuBAEMNj06BAEMMysrNzoEAQw0OzgEAQw2PToEAQwnGAQBDD4lSBIEAQw2JEUTEx1DERINGRMGBAEMLzBEBAEMPRs8PUckGTwqNykwUDpQP085Tz4NSwYEAUUgPD1FREE+KSQlHRMqFA1HBgQBTyBHPD0SJjpGRD9ADUZGQycmJwZLIR9DEAQBTiBIRjw9Q0c3QUcVH0MQBAEMRBtOPD0kASwBOwEZMSo4BgE3UAEbJRs3OSYZMyYfOikcMykmOigbMyglOiMPJh05OzEyHThACgE1GzRADBE0RwwKPTwKMwYEAQw+TCQBOj8uMwFASgFMRSxJFAZJFAYBSi45ATwEASFCKTMGKRkgQD8kUQYRBAFMIERFNk0pKywdEyoUDUcGBAEnNiBHPTIyRkI8RBc1IxQNTQYEATMqHycEAQxLQCcfEic2BgEwLxkaPB0+QjwNGUVBQ0sfSjhHMUdOSQYEAQwiP0YPJUNMTg8yAUcEAQxRJEZQKikzUUxNEhU1TxcIChMNRhcITgYRBAEMIC0uJEMEAQwVRQQBDBZBLispLy0dGAQCATtwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvZmxhdF90eXBlX21hc2suZGFydEpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3MvZm9yd2FyZGluZ190eXBlX21hc2suZGFydJDCLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgbWFza3M7CgovLy8gQSB0eXBlIG1hc2sgdGhhdCB3cmFwcyBhbiBvdGhlciBvbmUsIGFuZCBkZWxlZ2F0ZSBhbGwgaXRzCi8vLyBpbXBsZW1lbnRhdGlvbiBtZXRob2RzIHRvIGl0LgphYnN0cmFjdCBjbGFzcyBGb3J3YXJkaW5nVHlwZU1hc2sgaW1wbGVtZW50cyBUeXBlTWFzayB7CiAgVHlwZU1hc2sgZ2V0IGZvcndhcmRUbzsKCiAgRm9yd2FyZGluZ1R5cGVNYXNrKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHlPck51bGwgPT4gZm9yd2FyZFRvLmlzRW1wdHlPck51bGw7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBmb3J3YXJkVG8uaXNFbXB0eTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IGZvcndhcmRUby5pc051bGxhYmxlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbCA9PiBmb3J3YXJkVG8uaXNOdWxsOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXhhY3QgPT4gZm9yd2FyZFRvLmlzRXhhY3Q7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVW5pb24gPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb250YWluZXIgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTZXQgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYXAgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEaWN0aW9uYXJ5ID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVmFsdWUgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGb3J3YXJkaW5nID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbk1hc2soVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5pc0luTWFzayhvdGhlciwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc01hc2soVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5jb250YWluc01hc2sob3RoZXIsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5SW50KEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5jb250YWluc09ubHlJbnQoY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlEb3VibGUoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNvbnRhaW5zT25seURvdWJsZShjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seU51bShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY29udGFpbnNPbmx5TnVtKGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5Qm9vbChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY29udGFpbnNPbmx5Qm9vbChjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seVN0cmluZyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY29udGFpbnNPbmx5U3RyaW5nKGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5KENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGZvcndhcmRUby5jb250YWluc09ubHkoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgc2F0aXNmaWVzKENsYXNzRW50aXR5IGNscywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLnNhdGlzZmllcyhjbHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnMoQ2xhc3NFbnRpdHkgY2xzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY29udGFpbnMoY2xzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zQWxsKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5jb250YWluc0FsbChjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBzaW5nbGVDbGFzcyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uc2luZ2xlQ2xhc3MoY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdW5pb24ob3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKHRoaXMgPT0gb3RoZXIpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gb3RoZXIgOiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5pc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gdGhpcy5udWxsYWJsZSgpIDogdGhpczsKICAgIH0KICAgIHJldHVybiBmb3J3YXJkVG8udW5pb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEaXNqb2ludChUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmlzRGlzam9pbnQob3RoZXIsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGludGVyc2VjdGlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmludGVyc2VjdGlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgY292YXJpYW50IEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5uZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKHNlbGVjdG9yLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNhbkhpdChNZW1iZXJFbnRpdHkgZWxlbWVudCwgTmFtZSBuYW1lLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY2FuSGl0KGVsZW1lbnQsIG5hbWUsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoU2VsZWN0b3Igc2VsZWN0b3IsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5sb2NhdGVTaW5nbGVNZW1iZXIoc2VsZWN0b3IsIGNsb3NlZFdvcmxkKTsKICB9CgogIGJvb2wgZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBGb3J3YXJkaW5nVHlwZU1hc2spIHJldHVybiBmYWxzZTsKICAgIGlmIChmb3J3YXJkVG8uaXNOdWxsYWJsZSkgewogICAgICByZXR1cm4gZm9yd2FyZFRvID09IG90aGVyLmZvcndhcmRUby5udWxsYWJsZSgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZvcndhcmRUbyA9PSBvdGhlci5mb3J3YXJkVG8ubm9uTnVsbGFibGUoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSAmJiBpc051bGxhYmxlID09IG90aGVyLmlzTnVsbGFibGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93ICJTdWJjbGFzcyBzaG91bGQgaW1wbGVtZW50IGhhc2hDb2RlIGdldHRlciI7Cn0KCmFic3RyYWN0IGNsYXNzIEFsbG9jYXRpb25UeXBlTWFzayBleHRlbmRzIEZvcndhcmRpbmdUeXBlTWFzayB7CiAgLy8gVGhlIFtpci5Ob2RlXSB3aGVyZSB0aGlzIHR5cGUgbWFzayB3YXMgY3JlYXRlZC4KICBpci5Ob2RlIGdldCBhbGxvY2F0aW9uTm9kZTsKCiAgLy8gVGhlIFtFbnRpdHldIHdoZXJlIHRoaXMgdHlwZSBtYXNrIHdhcyBjcmVhdGVkLgogIE1lbWJlckVudGl0eSBnZXQgYWxsb2NhdGlvbkVsZW1lbnQ7Cn0KgKQATk48AQ8BPiI4GgEYAQw1DCkMLwwnDCkBDB0MIQwbDBsMIgwdDCEBDDwzBAEMQDcEAQwzMwQBDDY2BAEMMzMEAQw0NAQBDDY2BAEMJygEAQw+MgQBDD0xBAEMLy8EAQw2LwQBDDQZEy0uJjgGMAQBDD41BAEMRDcEAQwiP0cEAQxLOQQBDFFABAEkNCA2DTkGBAEMHEkEAQxJAgE/NR4BNCYCAUFwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvZm9yd2FyZGluZ190eXBlX21hc2suZGFydENzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3MvbWFwX3R5cGVfbWFzay5kYXJ0lEAvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBtYXNrczsKCi8vLyBBIFtNYXBUeXBlTWFza10gaXMgYSBbVHlwZU1hc2tdIGZvciBhIHNwZWNpZmljIGFsbG9jYXRpb24KLy8vIHNpdGUgb2YgYSBtYXAgKGN1cnJlbnRseSBvbmx5IGludGVybmFsIE1hcCBjbGFzcykgdGhhdCB3aWxsIGdldCBzcGVjaWFsaXplZAovLy8gb25jZSB0aGUgW1R5cGVHcmFwaEluZmVycmVyXSBwaGFzZSBmaW5kcyBhIGtleSBhbmQvb3IgdmFsdWUgdHlwZSBmb3IgaXQuCmNsYXNzIE1hcFR5cGVNYXNrIGV4dGVuZHMgQWxsb2NhdGlvblR5cGVNYXNrIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW01hcFR5cGVNYXNrXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ21hcC10eXBlLW1hc2snOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBUeXBlTWFzayBmb3J3YXJkVG87CgogIEBvdmVycmlkZQogIGZpbmFsIGlyLk5vZGUgYWxsb2NhdGlvbk5vZGU7CgogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudDsKCiAgLy8gVGhlIHZhbHVlIHR5cGUgb2YgdGhpcyBtYXAuCiAgZmluYWwgVHlwZU1hc2sgdmFsdWVUeXBlOwoKICAvLyBUaGUga2V5IHR5cGUgb2YgdGhpcyBtYXAuCiAgZmluYWwgVHlwZU1hc2sga2V5VHlwZTsKCiAgTWFwVHlwZU1hc2sodGhpcy5mb3J3YXJkVG8sIHRoaXMuYWxsb2NhdGlvbk5vZGUsIHRoaXMuYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgIHRoaXMua2V5VHlwZSwgdGhpcy52YWx1ZVR5cGUpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW01hcFR5cGVNYXNrXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IE1hcFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBUeXBlTWFzayBmb3J3YXJkVG8gPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgaXIuVHJlZU5vZGUgYWxsb2NhdGlvbk5vZGUgPSBzb3VyY2UucmVhZFRyZWVOb2RlT3JOdWxsKCk7CiAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQgPSBzb3VyY2UucmVhZE1lbWJlck9yTnVsbCgpOwogICAgVHlwZU1hc2sga2V5VHlwZSA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBUeXBlTWFzayB2YWx1ZVR5cGUgPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBNYXBUeXBlTWFzaygKICAgICAgICBmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwga2V5VHlwZSwgdmFsdWVUeXBlKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW01hcFR5cGVNYXNrXSB0byBbc2lua10uCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oVHlwZU1hc2tLaW5kLm1hcCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBmb3J3YXJkVG8ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZVRyZWVOb2RlT3JOdWxsKGFsbG9jYXRpb25Ob2RlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJPck51bGwoYWxsb2NhdGlvbkVsZW1lbnQpOwogICAga2V5VHlwZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB2YWx1ZVR5cGUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUKICAgICAgICA/IHRoaXMKICAgICAgICA6IG5ldyBNYXBUeXBlTWFzayhmb3J3YXJkVG8ubnVsbGFibGUoKSwgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICAgIGFsbG9jYXRpb25FbGVtZW50LCBrZXlUeXBlLCB2YWx1ZVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbm9uTnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZQogICAgICAgID8gbmV3IE1hcFR5cGVNYXNrKGZvcndhcmRUby5ub25OdWxsYWJsZSgpLCBhbGxvY2F0aW9uTm9kZSwKICAgICAgICAgICAgYWxsb2NhdGlvbkVsZW1lbnQsIGtleVR5cGUsIHZhbHVlVHlwZSkKICAgICAgICA6IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnRhaW5lciA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01hcCA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXhhY3QgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIE1hcFR5cGVNYXNrKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3VwZXIuZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgJiYKICAgICAgICBhbGxvY2F0aW9uTm9kZSA9PSBvdGhlci5hbGxvY2F0aW9uTm9kZSAmJgogICAgICAgIGtleVR5cGUgPT0gb3RoZXIua2V5VHlwZSAmJgogICAgICAgIHZhbHVlVHlwZSA9PSBvdGhlci52YWx1ZVR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgVHlwZU1hc2sgZm9yd2FyZEludGVyc2VjdGlvbiA9IGZvcndhcmRUby5pbnRlcnNlY3Rpb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIGlmIChmb3J3YXJkSW50ZXJzZWN0aW9uLmlzRW1wdHlPck51bGwpIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uOwogICAgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb24uaXNOdWxsYWJsZSA/IG51bGxhYmxlKCkgOiBub25OdWxsYWJsZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdW5pb24oZHluYW1pYyBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAodGhpcyA9PSBvdGhlcikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSBpZiAoZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyBvdGhlciA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyB0aGlzLm51bGxhYmxlKCkgOiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5pc01hcCAmJgogICAgICAgIGtleVR5cGUgIT0gbnVsbCAmJgogICAgICAgIG90aGVyLmtleVR5cGUgIT0gbnVsbCAmJgogICAgICAgIHZhbHVlVHlwZSAhPSBudWxsICYmCiAgICAgICAgb3RoZXIudmFsdWVUeXBlICE9IG51bGwpIHsKICAgICAgVHlwZU1hc2sgbmV3S2V5VHlwZSA9IGtleVR5cGUudW5pb24ob3RoZXIua2V5VHlwZSwgY2xvc2VkV29ybGQpOwogICAgICBUeXBlTWFzayBuZXdWYWx1ZVR5cGUgPSB2YWx1ZVR5cGUudW5pb24ob3RoZXIudmFsdWVUeXBlLCBjbG9zZWRXb3JsZCk7CiAgICAgIFR5cGVNYXNrIG5ld0ZvcndhcmRUbyA9IGZvcndhcmRUby51bmlvbihvdGhlci5mb3J3YXJkVG8sIGNsb3NlZFdvcmxkKTsKICAgICAgcmV0dXJuIG5ldyBNYXBUeXBlTWFzaygKICAgICAgICAgIG5ld0ZvcndhcmRUbywgbnVsbCwgbnVsbCwgbmV3S2V5VHlwZSwgbmV3VmFsdWVUeXBlKTsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNEaWN0aW9uYXJ5KSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpbmQgYW5vdGhlciB3YXkgdG8gY2hlY2sgdGhpcyBpbnZhcmlhbnQgdGhhdAogICAgICAvLyBkb2Vzbid0IG5lZWQgdGhlIGNvbXBpbGVyLgogICAgICBhc3NlcnQob3RoZXIua2V5VHlwZSA9PQogICAgICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdCgKICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzLCBjbG9zZWRXb3JsZCkpOwogICAgICBUeXBlTWFzayBuZXdLZXlUeXBlID0ga2V5VHlwZS51bmlvbihvdGhlci5rZXlUeXBlLCBjbG9zZWRXb3JsZCk7CiAgICAgIFR5cGVNYXNrIG5ld1ZhbHVlVHlwZSA9CiAgICAgICAgICBvdGhlci50eXBlTWFwLnZhbHVlcy5mb2xkKGtleVR5cGUsIChwLCBuKSA9PiBwLnVuaW9uKG4sIGNsb3NlZFdvcmxkKSk7CiAgICAgIFR5cGVNYXNrIG5ld0ZvcndhcmRUbyA9IGZvcndhcmRUby51bmlvbihvdGhlci5mb3J3YXJkVG8sIGNsb3NlZFdvcmxkKTsKICAgICAgTWFwVHlwZU1hc2sgbmV3TWFwVHlwZU1hc2sgPSBuZXcgTWFwVHlwZU1hc2soCiAgICAgICAgICBuZXdGb3J3YXJkVG8sCiAgICAgICAgICBhbGxvY2F0aW9uTm9kZSA9PSBvdGhlci5hbGxvY2F0aW9uTm9kZSA/IGFsbG9jYXRpb25Ob2RlIDogbnVsbCwKICAgICAgICAgIGFsbG9jYXRpb25FbGVtZW50ID09IG90aGVyLmFsbG9jYXRpb25FbGVtZW50CiAgICAgICAgICAgICAgPyBhbGxvY2F0aW9uRWxlbWVudAogICAgICAgICAgICAgIDogbnVsbCwKICAgICAgICAgIG5ld0tleVR5cGUsCiAgICAgICAgICBuZXdWYWx1ZVR5cGUpOwogICAgICByZXR1cm4gbmV3TWFwVHlwZU1hc2s7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZm9yd2FyZFRvLnVuaW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBzdXBlciA9PSBvdGhlcjsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gY29tcHV0ZUhhc2hDb2RlKAogICAgICAgIGFsbG9jYXRpb25Ob2RlLCBpc051bGxhYmxlLCBrZXlUeXBlLCB2YWx1ZVR5cGUsIGZvcndhcmRUbyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ01hcCgkZm9yd2FyZFRvLCBrZXk6ICRrZXlUeXBlLCB2YWx1ZTogJHZhbHVlVHlwZSknOwogIH0KfQqAnABOTjwBDwE+UE0vRR0tAQwcAQwgAQwoASEcAR8aAUslATkqNRdPPkBNTxUcSwQBLwwoJhUlLi8jJRMEAQwYFg9ANAQBDBsWQzMQBAEMIQwaDBwBDCQtLzIkJgQBDERPR0gEAQw8GRMtLiY4HhshHSNHTU0ePyVMJB4lR0ceUU00GEo3IhYWGR0NMgYEAQwtAQwVHEQEAQwWQAQCATpwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvbWFwX3R5cGVfbWFzay5kYXJ0Q3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9zZXRfdHlwZV9tYXNrLmRhcnSO3i8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIG1hc2tzOwoKLy8vIEEgW1NldFR5cGVNYXNrXSBpcyBhIFtUeXBlTWFza10gZm9yIGEgc3BlY2lmaWMgYWxsb2NhdGlvbiBzaXRlIG9mIGEgc2V0Ci8vLyAoY3VycmVudGx5IG9ubHkgdGhlIGludGVybmFsIFNldCBjbGFzcykgdGhhdCB3aWxsIGdldCBzcGVjaWFsaXplZCBvbmNlIHRoZQovLy8gW1R5cGVHcmFwaEluZmVycmVyXSBwaGFzZSBmaW5kcyBhbiBlbGVtZW50IHR5cGUgZm9yIGl0LgpjbGFzcyBTZXRUeXBlTWFzayBleHRlbmRzIEFsbG9jYXRpb25UeXBlTWFzayB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtTZXRUeXBlTWFza10gb2JqZWN0cyBpbiBhIGRlYnVnZ2luZwogIC8vLyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdzZXQtdHlwZS1tYXNrJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgVHlwZU1hc2sgZm9yd2FyZFRvOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5Ob2RlIGFsbG9jYXRpb25Ob2RlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQ7CgogIC8vIFRoZSBlbGVtZW50IHR5cGUgb2YgdGhpcyBzZXQuCiAgZmluYWwgVHlwZU1hc2sgZWxlbWVudFR5cGU7CgogIFNldFR5cGVNYXNrKHRoaXMuZm9yd2FyZFRvLCB0aGlzLmFsbG9jYXRpb25Ob2RlLCB0aGlzLmFsbG9jYXRpb25FbGVtZW50LAogICAgICB0aGlzLmVsZW1lbnRUeXBlKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtTZXRUeXBlTWFza10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBTZXRUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgVHlwZU1hc2sgZm9yd2FyZFRvID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIGlyLlRyZWVOb2RlIGFsbG9jYXRpb25Ob2RlID0gc291cmNlLnJlYWRUcmVlTm9kZU9yTnVsbCgpOwogICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50ID0gc291cmNlLnJlYWRNZW1iZXJPck51bGwoKTsKICAgIFR5cGVNYXNrIGVsZW1lbnRUeXBlID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgU2V0VHlwZU1hc2soCiAgICAgICAgZm9yd2FyZFRvLCBhbGxvY2F0aW9uTm9kZSwgYWxsb2NhdGlvbkVsZW1lbnQsIGVsZW1lbnRUeXBlKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1NldFR5cGVNYXNrXSB0byBbc2lua10uCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oVHlwZU1hc2tLaW5kLnNldCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBmb3J3YXJkVG8ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZVRyZWVOb2RlT3JOdWxsKGFsbG9jYXRpb25Ob2RlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJPck51bGwoYWxsb2NhdGlvbkVsZW1lbnQpOwogICAgZWxlbWVudFR5cGUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG51bGxhYmxlKCkgPT4gaXNOdWxsYWJsZQogICAgICA/IHRoaXMKICAgICAgOiBuZXcgU2V0VHlwZU1hc2soCiAgICAgICAgICBmb3J3YXJkVG8ubnVsbGFibGUoKSwgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LCBlbGVtZW50VHlwZSk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG5vbk51bGxhYmxlKCkgPT4gaXNOdWxsYWJsZQogICAgICA/IG5ldyBTZXRUeXBlTWFzayhmb3J3YXJkVG8ubm9uTnVsbGFibGUoKSwgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICBhbGxvY2F0aW9uRWxlbWVudCwgZWxlbWVudFR5cGUpCiAgICAgIDogdGhpczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTZXQgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeGFjdCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgU2V0VHlwZU1hc2spIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdXBlci5lcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSAmJgogICAgICAgIGFsbG9jYXRpb25Ob2RlID09IG90aGVyLmFsbG9jYXRpb25Ob2RlICYmCiAgICAgICAgZWxlbWVudFR5cGUgPT0gb3RoZXIuZWxlbWVudFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgVHlwZU1hc2sgZm9yd2FyZEludGVyc2VjdGlvbiA9IGZvcndhcmRUby5pbnRlcnNlY3Rpb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIGlmIChmb3J3YXJkSW50ZXJzZWN0aW9uLmlzRW1wdHlPck51bGwpIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uOwogICAgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb24uaXNOdWxsYWJsZSA/IG51bGxhYmxlKCkgOiBub25OdWxsYWJsZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdW5pb24oZHluYW1pYyBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAodGhpcyA9PSBvdGhlcikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSBpZiAoZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyBvdGhlciA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyB0aGlzLm51bGxhYmxlKCkgOiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5pc1NldCAmJgogICAgICAgIGVsZW1lbnRUeXBlICE9IG51bGwgJiYKICAgICAgICBvdGhlci5lbGVtZW50VHlwZSAhPSBudWxsKSB7CiAgICAgIFR5cGVNYXNrIG5ld0VsZW1lbnRUeXBlID0KICAgICAgICAgIGVsZW1lbnRUeXBlLnVuaW9uKG90aGVyLmVsZW1lbnRUeXBlLCBjbG9zZWRXb3JsZCk7CiAgICAgIFR5cGVNYXNrIG5ld0ZvcndhcmRUbyA9IGZvcndhcmRUby51bmlvbihvdGhlci5mb3J3YXJkVG8sIGNsb3NlZFdvcmxkKTsKICAgICAgcmV0dXJuIG5ldyBTZXRUeXBlTWFzayhuZXdGb3J3YXJkVG8sIG51bGwsIG51bGwsIG5ld0VsZW1lbnRUeXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmb3J3YXJkVG8udW5pb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpID0+IHN1cGVyID09IG90aGVyOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+CiAgICAgIGNvbXB1dGVIYXNoQ29kZShhbGxvY2F0aW9uTm9kZSwgaXNOdWxsYWJsZSwgZWxlbWVudFR5cGUsIGZvcndhcmRUbyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTZXQoJGZvcndhcmRUbywgZWxlbWVudDogJGVsZW1lbnRUeXBlKSc7Cn0KdwBOTjwBDwFMTzwvTxMtAQwcAQwgAQwoASMeAUsZATkqNRdPPkBRFRxEBAEvDCgmFSUuLycTBAEMJA0ZUQEMJ0EqDgEMGgEMHAEMJC0vMioEAQxET0dIBAEMPBkTLS4mOB4fJSA9TUgNMgYEAQwtAQwWSwEMQQIBOnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9zZXRfdHlwZV9tYXNrLmRhcnQ/c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL3R5cGVfbWFzay5kYXJ0uVovLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBtYXNrczsKCi8vLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIFtVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHNdIHRoYXQgaXMgY29uc2lzdHMgaWYgYW4KLy8vIG9ubHkgaW5jcmVhc2luZyBzZXQgb2YgW1R5cGVNYXNrXXMsIHRoYXQgaXMsIG9uY2UgYSBtYXNrIGlzIGFkZGVkIGl0IGNhbm5vdAovLy8gYmUgcmVtb3ZlZC4KY2xhc3MgSW5jcmVhc2luZ1R5cGVNYXNrU2V0IGV4dGVuZHMgVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzIHsKICBib29sIGlzQWxsID0gZmFsc2U7CiAgU2V0PFR5cGVNYXNrPiBfbWFza3M7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuSGl0KE1lbWJlckVudGl0eSBlbGVtZW50LCBOYW1lIG5hbWUsIEpDbG9zZWRXb3JsZCB3b3JsZCkgewogICAgaWYgKGlzQWxsKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChfbWFza3MgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChUeXBlTWFzayBtYXNrIGluIF9tYXNrcykgewogICAgICBpZiAobWFzay5jYW5IaXQoZWxlbWVudCwgbmFtZSwgd29ybGQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgbmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhTZWxlY3RvciBzZWxlY3RvciwgSkNsb3NlZFdvcmxkIHdvcmxkKSB7CiAgICBpZiAoaXNBbGwpIHsKICAgICAgVHlwZU1hc2sgbWFzayA9CiAgICAgICAgICBuZXcgVHlwZU1hc2suc3ViY2xhc3Mod29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MsIHdvcmxkKTsKICAgICAgcmV0dXJuIG1hc2submVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhzZWxlY3Rvciwgd29ybGQpOwogICAgfQogICAgZm9yIChUeXBlTWFzayBtYXNrIGluIF9tYXNrcykgewogICAgICBpZiAobWFzay5uZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKHNlbGVjdG9yLCB3b3JsZCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhZGRSZWNlaXZlckNvbnN0cmFpbnQoVHlwZU1hc2sgbWFzaykgewogICAgaWYgKGlzQWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobWFzayA9PSBudWxsKSB7CiAgICAgIGlzQWxsID0gdHJ1ZTsKICAgICAgX21hc2tzID0gbnVsbDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfbWFza3MgPz89IG5ldyBTZXQ8VHlwZU1hc2s+KCk7CiAgICByZXR1cm4gX21hc2tzLmFkZChtYXNrKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChpc0FsbCkgewogICAgICByZXR1cm4gJzxhbGw+JzsKICAgIH0gZWxzZSBpZiAoX21hc2tzICE9IG51bGwpIHsKICAgICAgcmV0dXJuICckX21hc2tzJzsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAnPG5vbmU+JzsKICAgIH0KICB9Cn0KCmNsYXNzIFR5cGVNYXNrU3RyYXRlZ3kgaW1wbGVtZW50cyBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgewogIGNvbnN0IFR5cGVNYXNrU3RyYXRlZ3koKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBjcmVhdGVEb21haW4oSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IENvbW1vbk1hc2tzKGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFNlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneSBjcmVhdGVTZWxlY3RvclN0cmF0ZWd5KCkgewogICAgcmV0dXJuIG5ldyBUeXBlTWFza1NlbGVjdG9yU3RyYXRlZ3koKTsKICB9Cn0KCmNsYXNzIFR5cGVNYXNrU2VsZWN0b3JTdHJhdGVneSBpbXBsZW1lbnRzIFNlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneSB7CiAgY29uc3QgVHlwZU1hc2tTZWxlY3RvclN0cmF0ZWd5KCk7CgogIEBvdmVycmlkZQogIFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cyBjcmVhdGVTZWxlY3RvckNvbnN0cmFpbnRzKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgT2JqZWN0IGluaXRpYWxDb25zdHJhaW50KSB7CiAgICByZXR1cm4gbmV3IEluY3JlYXNpbmdUeXBlTWFza1NldCgpCiAgICAgIC4uYWRkUmVjZWl2ZXJDb25zdHJhaW50KGluaXRpYWxDb25zdHJhaW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYXBwbGllZFVubmFtZWQoRHluYW1pY1VzZSBkeW5hbWljVXNlLCBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBjb3ZhcmlhbnQgSkNsb3NlZFdvcmxkIHdvcmxkKSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGR5bmFtaWNVc2Uuc2VsZWN0b3I7CiAgICBUeXBlTWFzayBtYXNrID0gZHluYW1pY1VzZS5yZWNlaXZlckNvbnN0cmFpbnQ7CiAgICByZXR1cm4gc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSAmJgogICAgICAgIChtYXNrID09IG51bGwgfHwgbWFzay5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCB3b3JsZCkpOwogIH0KfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW1R5cGVNYXNrXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gVHlwZU1hc2tLaW5kIHsKICBmbGF0LAogIHVuaW9uLAogIGNvbnRhaW5lciwKICBzZXQsCiAgbWFwLAogIGRpY3Rpb25hcnksCiAgdmFsdWUsCn0KCi8vLyBBIHR5cGUgbWFzayByZXByZXNlbnRzIGEgc2V0IG9mIGNvbnRhaW5lZCBjbGFzc2VzLCBidXQgdGhlCi8vLyBvcGVyYXRpb25zIG9uIGl0IGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBwcmVjaXNlIGFuZCB0aGV5IG1heQovLy8geWllbGQgY29uc2VydmF0aXZlIGFuc3dlcnMgdGhhdCBjb250YWluIHRvbyBtYW55IGNsYXNzZXMuCmFic3RyYWN0IGNsYXNzIFR5cGVNYXNrIGltcGxlbWVudHMgQWJzdHJhY3RWYWx1ZSB7CiAgZmFjdG9yeSBUeXBlTWFzaygKICAgICAgQ2xhc3NFbnRpdHkgYmFzZSwgaW50IGtpbmQsIGJvb2wgaXNOdWxsYWJsZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5ub3JtYWxpemVkKAogICAgICAgIGJhc2UsIChraW5kIDw8IDEpIHwgKGlzTnVsbGFibGUgPyAxIDogMCksIGNsb3NlZFdvcmxkKTsKICB9CgogIGNvbnN0IGZhY3RvcnkgVHlwZU1hc2suZW1wdHkoKSA9IEZsYXRUeXBlTWFzay5lbXB0eTsKCiAgZmFjdG9yeSBUeXBlTWFzay5leGFjdChDbGFzc0VudGl0eSBiYXNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydCgKICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChiYXNlKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgYmFzZSA/PyBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiQ2Fubm90IGNyZWF0ZSBleGFjdCB0eXBlIG1hc2sgZm9yIHVuaW5zdGFudGlhdGVkICIKICAgICAgICAgICAgImNsYXNzICRiYXNlLlxuJHtjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5kdW1wKGJhc2UpfSIpKTsKICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLmV4YWN0KGJhc2UpOwogIH0KCiAgZmFjdG9yeSBUeXBlTWFzay5leGFjdE9yRW1wdHkoQ2xhc3NFbnRpdHkgYmFzZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoYmFzZSkpCiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLmV4YWN0KGJhc2UpOwogICAgcmV0dXJuIGNvbnN0IFR5cGVNYXNrLmVtcHR5KCk7CiAgfQoKICBmYWN0b3J5IFR5cGVNYXNrLnN1YmNsYXNzKENsYXNzRW50aXR5IGJhc2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KAogICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGJhc2UpLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBiYXNlID8/IENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICJDYW5ub3QgY3JlYXRlIHN1YmNsYXNzIHR5cGUgbWFzayBmb3IgdW5pbnN0YW50aWF0ZWQgIgogICAgICAgICAgICAiY2xhc3MgJGJhc2UuXG4ke2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmR1bXAoYmFzZSl9IikpOwogICAgQ2xhc3NFbnRpdHkgdG9wbW9zdCA9IGNsb3NlZFdvcmxkLmdldEx1Yk9mSW5zdGFudGlhdGVkU3ViY2xhc3NlcyhiYXNlKTsKICAgIGlmICh0b3Btb3N0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5lbXB0eSgpOwogICAgfSBlbHNlIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJjbGFzcyh0b3Btb3N0KSkgewogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5zdWJjbGFzcyh0b3Btb3N0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2suZXhhY3QodG9wbW9zdCwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgZmFjdG9yeSBUeXBlTWFzay5zdWJ0eXBlKENsYXNzRW50aXR5IGJhc2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgQ2xhc3NFbnRpdHkgdG9wbW9zdCA9IGNsb3NlZFdvcmxkLmdldEx1Yk9mSW5zdGFudGlhdGVkU3VidHlwZXMoYmFzZSk7CiAgICBpZiAodG9wbW9zdCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2suZW1wdHkoKTsKICAgIH0KICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNPbmx5U3ViY2xhc3Nlcyh0b3Btb3N0KSkgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLnN1YmNsYXNzKHRvcG1vc3QsIGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJ0eXBlKHRvcG1vc3QpKSB7CiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLnN1YnR5cGUodG9wbW9zdCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLmV4YWN0KHRvcG1vc3QsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIGNvbnN0IGZhY3RvcnkgVHlwZU1hc2subm9uTnVsbEVtcHR5KCkgPSBGbGF0VHlwZU1hc2subm9uTnVsbEVtcHR5OwoKICBmYWN0b3J5IFR5cGVNYXNrLm5vbk51bGxFeGFjdChDbGFzc0VudGl0eSBiYXNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydCgKICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChiYXNlKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgYmFzZSA/PyBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiQ2Fubm90IGNyZWF0ZSBleGFjdCB0eXBlIG1hc2sgZm9yIHVuaW5zdGFudGlhdGVkICIKICAgICAgICAgICAgImNsYXNzICRiYXNlLlxuJHtjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5kdW1wKGJhc2UpfSIpKTsKICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLm5vbk51bGxFeGFjdChiYXNlKTsKICB9CgogIGZhY3RvcnkgVHlwZU1hc2subm9uTnVsbEV4YWN0T3JFbXB0eSgKICAgICAgQ2xhc3NFbnRpdHkgYmFzZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoYmFzZSkpIHsKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2subm9uTnVsbEV4YWN0KGJhc2UpOwogICAgfQogICAgcmV0dXJuIGNvbnN0IFR5cGVNYXNrLm5vbk51bGxFbXB0eSgpOwogIH0KCiAgZmFjdG9yeSBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoQ2xhc3NFbnRpdHkgYmFzZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoCiAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoYmFzZSksCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGJhc2UgPz8gQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIkNhbm5vdCBjcmVhdGUgc3ViY2xhc3MgdHlwZSBtYXNrIGZvciB1bmluc3RhbnRpYXRlZCAiCiAgICAgICAgICAgICJjbGFzcyAkYmFzZS5cbiR7Y2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuZHVtcChiYXNlKX0iKSk7CiAgICBDbGFzc0VudGl0eSB0b3Btb3N0ID0gY2xvc2VkV29ybGQuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKGJhc2UpOwogICAgaWYgKHRvcG1vc3QgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxFbXB0eSgpOwogICAgfSBlbHNlIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJjbGFzcyh0b3Btb3N0KSkgewogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5ub25OdWxsU3ViY2xhc3ModG9wbW9zdCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdCh0b3Btb3N0LCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBmYWN0b3J5IFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKENsYXNzRW50aXR5IGJhc2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgQ2xhc3NFbnRpdHkgdG9wbW9zdCA9IGNsb3NlZFdvcmxkLmdldEx1Yk9mSW5zdGFudGlhdGVkU3VidHlwZXMoYmFzZSk7CiAgICBpZiAodG9wbW9zdCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbEVtcHR5KCk7CiAgICB9CiAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzT25seVN1YmNsYXNzZXModG9wbW9zdCkpIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3ModG9wbW9zdCwgY2xvc2VkV29ybGQpOwogICAgfQogICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YnR5cGUodG9wbW9zdCkpIHsKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2subm9uTnVsbFN1YnR5cGUodG9wbW9zdCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdCh0b3Btb3N0LCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBmYWN0b3J5IFR5cGVNYXNrLnVuaW9uT2YoSXRlcmFibGU8VHlwZU1hc2s+IG1hc2tzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBVbmlvblR5cGVNYXNrLnVuaW9uT2YobWFza3MsIGNsb3NlZFdvcmxkKTsKICB9CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbVHlwZU1hc2tdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBUeXBlTWFza0tpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShUeXBlTWFza0tpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFR5cGVNYXNrS2luZC5mbGF0OgogICAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgICAgY2FzZSBUeXBlTWFza0tpbmQudW5pb246CiAgICAgICAgcmV0dXJuIG5ldyBVbmlvblR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgICAgY2FzZSBUeXBlTWFza0tpbmQuY29udGFpbmVyOgogICAgICAgIHJldHVybiBuZXcgQ29udGFpbmVyVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgICBjYXNlIFR5cGVNYXNrS2luZC5zZXQ6CiAgICAgICAgcmV0dXJuIG5ldyBTZXRUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICAgIGNhc2UgVHlwZU1hc2tLaW5kLm1hcDoKICAgICAgICByZXR1cm4gbmV3IE1hcFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgICAgY2FzZSBUeXBlTWFza0tpbmQuZGljdGlvbmFyeToKICAgICAgICByZXR1cm4gbmV3IERpY3Rpb25hcnlUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICAgIGNhc2UgVHlwZU1hc2tLaW5kLnZhbHVlOgogICAgICAgIHJldHVybiBuZXcgVmFsdWVUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBUeXBlTWFza0tpbmQgJGtpbmQuIik7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtUeXBlTWFza10gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gSWYgW21hc2tdIGlzIGZvcndhcmRpbmcsIHJldHVybnMgdGhlIGZpcnN0IG5vbi1mb3J3YXJkaW5nIFtUeXBlTWFza10gaW4KICAvLy8gW21hc2tdJ3MgZm9yd2FyZGluZyBjaGFpbi4KICBzdGF0aWMgVHlwZU1hc2sgbm9uRm9yd2FyZGluZ01hc2sobWFzaykgewogICAgd2hpbGUgKG1hc2suaXNGb3J3YXJkaW5nKSB7CiAgICAgIG1hc2sgPSBtYXNrLmZvcndhcmRUbzsKICAgIH0KICAgIHJldHVybiBtYXNrOwogIH0KCiAgLy8vIEFzc2VydHMgdGhhdCB0aGlzIG1hc2sgdXNlcyB0aGUgc21hbGxlc3QgcG9zc2libGUgcmVwcmVzZW50YXRpb24gZm9yCiAgLy8vIGl0cyB0eXBlcy4gQ3VycmVudGx5LCB3ZSBub3JtYWxpemUgc3VidHlwZSBhbmQgc3ViY2xhc3MgdG8gZXhhY3QgaWYgbm8KICAvLy8gc3VidHlwZXMgb3Igc3ViY2xhc3NlcyBhcmUgcHJlc2VudCBhbmQgc3VidHlwZSB0byBzdWJjbGFzcyBpZiBvbmx5CiAgLy8vIHN1YmNsYXNzZXMgZXhpc3QuIFdlIGFsc28gbm9ybWFsaXplIGV4YWN0IHRvIGVtcHR5IGlmIHRoZSBjb3JyZXNwb25kaW5nCiAgLy8vIGJhc2VjbGFzcyB3YXMgbmV2ZXIgaW5zdGFudGlhdGVkLgogIHN0YXRpYyBib29sIGFzc2VydElzTm9ybWFsaXplZChUeXBlTWFzayBtYXNrLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFN0cmluZyByZWFzb24gPSBnZXROb3ROb3JtYWxpemVkUmVhc29uKG1hc2ssIGNsb3NlZFdvcmxkKTsKICAgIGFzc2VydChyZWFzb24gPT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsICckbWFzayBpcyBub3Qgbm9ybWFsaXplZDogJHJlYXNvbicpKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgc3RhdGljIFN0cmluZyBnZXROb3ROb3JtYWxpemVkUmVhc29uKAogICAgICBUeXBlTWFzayBtYXNrLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIG1hc2sgPSBub25Gb3J3YXJkaW5nTWFzayhtYXNrKTsKICAgIGlmIChtYXNrIGlzIEZsYXRUeXBlTWFzaykgewogICAgICBpZiAobWFzay5pc0VtcHR5T3JOdWxsKSByZXR1cm4gbnVsbDsKICAgICAgaWYgKG1hc2suaXNFeGFjdCkgewogICAgICAgIGlmICghY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQobWFzay5iYXNlKSkgewogICAgICAgICAgcmV0dXJuICdFeGFjdCAke21hc2suYmFzZX0gaXMgbm90IGluc3RhbnRpYXRlZC4nOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAobWFzay5pc1N1YmNsYXNzKSB7CiAgICAgICAgaWYgKCFjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJjbGFzcyhtYXNrLmJhc2UpKSB7CiAgICAgICAgICByZXR1cm4gJ1N1YmNsYXNzICR7bWFzay5iYXNlfSBkb2VzIG5vdCBoYXZlIGFueSBzdWJjbGFzc2VzLic7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGFzc2VydChtYXNrLmlzU3VidHlwZSk7CiAgICAgIGlmICghY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzQW55U3RyaWN0U3VidHlwZShtYXNrLmJhc2UpKSB7CiAgICAgICAgcmV0dXJuICdTdWJ0eXBlICR7bWFzay5iYXNlfSBkb2VzIG5vdCBoYXZlIGFueSBzdWJjbGFzc2VzLic7CiAgICAgIH0KICAgICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc09ubHlTdWJjbGFzc2VzKG1hc2suYmFzZSkpIHsKICAgICAgICByZXR1cm4gJ1N1YnR5cGUgJHttYXNrLmJhc2V9IG9ubHkgaGFzIHN1YmNsYXNzZXMuJzsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAobWFzayBpcyBVbmlvblR5cGVNYXNrKSB7CiAgICAgIGZvciAoVHlwZU1hc2sgc3VibWFzayBpbiBtYXNrLmRpc2pvaW50TWFza3MpIHsKICAgICAgICBTdHJpbmcgc3VibWFza1JlYXNvbiA9IGdldE5vdE5vcm1hbGl6ZWRSZWFzb24oc3VibWFzaywgY2xvc2VkV29ybGQpOwogICAgICAgIGlmIChzdWJtYXNrUmVhc29uICE9IG51bGwpIHsKICAgICAgICAgIHJldHVybiAnU3VibWFzayAkc3VibWFzayBpbiAkbWFzazogJHN1Ym1hc2tSZWFzb24uJzsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gJ1Vua25vd24gdHlwZSBtYXNrICRtYXNrLic7CiAgfQoKICAvLy8gUmV0dXJucyBhIG51bGxhYmxlIHZhcmlhbnQgb2YgW3RoaXNdIHR5cGUgbWFzay4KICBUeXBlTWFzayBudWxsYWJsZSgpOwoKICAvLy8gUmV0dXJucyBhIG5vbi1udWxsYWJsZSB2YXJpYW50IG9mIFt0aGlzXSB0eXBlIG1hc2suCiAgVHlwZU1hc2sgbm9uTnVsbGFibGUoKTsKCiAgLy8vIFdoZXRoZXIgbm90aGluZyBtYXRjaGVzIHRoaXMgbWFzaywgbm90IGV2ZW4gbnVsbC4KICBib29sIGdldCBpc0VtcHR5OwoKICAvLy8gV2hldGhlciBudWxsIGlzIGEgdmFsaWQgdmFsdWUgb2YgdGhpcyBtYXNrLgogIGJvb2wgZ2V0IGlzTnVsbGFibGU7CgogIC8vLyBXaGV0aGVyIHRoZSBvbmx5IHBvc3NpYmxlIHZhbHVlIGluIHRoaXMgbWFzayBpcyBOdWxsLgogIGJvb2wgZ2V0IGlzTnVsbDsKCiAgLy8vIFdoZXRoZXIgW2lzRW1wdHldIG9yIFtpc051bGxdIGlzIHRydWUuCiAgYm9vbCBnZXQgaXNFbXB0eU9yTnVsbDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBtYXNrIG9ubHkgaW5jbHVkZXMgaW5zdGFuY2VzIG9mIGFuIGV4YWN0IGNsYXNzLCBhbmQgbm9uZSBvZgogIC8vLyBpdCdzIHN1YmNsYXNzZXMgb3Igc3VidHlwZXMuCiAgYm9vbCBnZXQgaXNFeGFjdDsKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG1hc2sgaXMgYSB1bmlvbiB0eXBlLgogIGJvb2wgZ2V0IGlzVW5pb247CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIG1hc2sgaXMgYSBbQ29udGFpbmVyVHlwZU1hc2tdLgogIGJvb2wgZ2V0IGlzQ29udGFpbmVyOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBtYXNrIGlzIGEgW1NldFR5cGVNYXNrXS4KICBib29sIGdldCBpc1NldDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbWFzayBpcyBhIFtNYXBUeXBlTWFza10uCiAgYm9vbCBnZXQgaXNNYXA7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIG1hc2sgaXMgYSBbTWFwVHlwZU1hc2tdIGluIGRpY3Rpb25hcnkgbW9kZSwgaS5lLiwKICAvLy8gYWxsIGtleXMgYXJlIGtub3duIHN0cmluZyB2YWx1ZXMgYW5kIHdlIGhhdmUgc3BlY2lmaWMgdHlwZSBpbmZvcm1hdGlvbiBmb3IKICAvLy8gY29ycmVzcG9uZGluZyB2YWx1ZXMuCiAgYm9vbCBnZXQgaXNEaWN0aW9uYXJ5OwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBtYXNrIGlzIHdyYXBwaW5nIGFub3RoZXIgbWFzayBmb3IgdGhlIHB1cnBvc2Ugb2YKICAvLy8gdHJhY2luZy4KICBib29sIGdldCBpc0ZvcndhcmRpbmc7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIG1hc2sgaG9sZHMgZW5jb2RlcyBhbiBleGFjdCB2YWx1ZSB3aXRoaW4gYSB0eXBlLgogIGJvb2wgZ2V0IGlzVmFsdWU7CgogIGJvb2wgY29udGFpbnNPbmx5SW50KEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CiAgYm9vbCBjb250YWluc09ubHlEb3VibGUoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKICBib29sIGNvbnRhaW5zT25seU51bShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwogIGJvb2wgY29udGFpbnNPbmx5Qm9vbChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwogIGJvb2wgY29udGFpbnNPbmx5U3RyaW5nKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CiAgYm9vbCBjb250YWluc09ubHkoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIENvbXBhcmVzIHR3byBbVHlwZU1hc2tdIG9iamVjdHMgZm9yIHN0cnVjdHVyYWwgZXF1YWxpdHkuCiAgLy8vCiAgLy8vIE5vdGU6IFRoaXMgbWF5IGRpZmZlciBmcm9tIHNlbWFudGljIGVxdWFsaXR5IGluIHRoZSBzZXQgY29udGFpbm1lbnQgc2Vuc2UuCiAgLy8vICAgVXNlIFtjb250YWluc01hc2tdIGFuZCBbaXNJbk1hc2tdIGZvciB0aGF0LCBpbnN0ZWFkLgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvLy8gSWYgdGhpcyByZXR1cm5zIGB0cnVlYCwgW290aGVyXSBpcyBndWFyYW50ZWVkIHRvIGJlIGEgc3VwZXJ0eXBlIG9mIHRoaXMKICAvLy8gbWFzaywgaS5lLiwgdGhpcyBtYXNrIGlzIGluIFtvdGhlcl0uIEhvd2V2ZXIsIHRoZSBpbnZlcnNlIGRvZXMgbm90IGhvbGQuCiAgLy8vIEVuYWJsZSBbVW5pb25UeXBlTWFzay5QRVJGT1JNX0VYVFJBX0NPTlRBSU5TX0NIRUNLXSB0byBiZSBub3RpZmllZCBvZgogIC8vLyBmYWxzZSBuZWdhdGl2ZXMuCiAgYm9vbCBpc0luTWFzayhUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIElmIHRoaXMgcmV0dXJucyBgdHJ1ZWAsIFtvdGhlcl0gaXMgZ3VhcmFudGVlZCB0byBiZSBhIHN1YnR5cGUgb2YgdGhpcwogIC8vLyBtYXNrLCBpLmUuIHRoaXMgbWFzayBjb250YWlucyBbb3RoZXJdLiBIb3dldmVyLCB0aGUgaW52ZXJzZSBkb2VzIG5vdCBob2xkLgogIC8vLyBFbmFibGUgW1VuaW9uVHlwZU1hc2suUEVSRk9STV9FWFRSQV9DT05UQUlOU19DSEVDS10gdG8gYmUgbm90aWZpZWQgb2YKICAvLy8gZmFsc2UgbmVnYXRpdmVzLgogIGJvb2wgY29udGFpbnNNYXNrKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIHRoaXMgdHlwZSBtYXNrIGlzIGFuIGluc3RhbmNlIG9mIFtjbHNdLgogIGJvb2wgc2F0aXNmaWVzKENsYXNzRW50aXR5IGNscywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBvciBub3QgdGhpcyB0eXBlIG1hc2sgY29udGFpbnMgdGhlIGdpdmVuIGNsYXNzIFtjbHNdLgogIGJvb2wgY29udGFpbnMoQ2xhc3NFbnRpdHkgY2xzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGlzIHR5cGUgbWFzayBjb250YWlucyBhbGwgdHlwZXMuCiAgYm9vbCBjb250YWluc0FsbChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NsYXNzRW50aXR5XSBpZiB0aGlzIHR5cGUgcmVwcmVzZW50cyBhIHNpbmdsZSBjbGFzcywKICAvLy8gb3RoZXJ3aXNlIHJldHVybnMgYG51bGxgLiAgVGhpcyBtZXRob2QgaXMgY29uc2VydmF0aXZlLgogIENsYXNzRW50aXR5IHNpbmdsZUNsYXNzKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBSZXR1cm5zIGEgdHlwZSBtYXNrIHJlcHJlc2VudGluZyB0aGUgdW5pb24gb2YgW3RoaXNdIGFuZCBbb3RoZXJdLgogIFR5cGVNYXNrIHVuaW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBhbmQgW290aGVyXSBpcyBlbXB0eS4KICBib29sIGlzRGlzam9pbnQoVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBSZXR1cm5zIGEgdHlwZSBtYXNrIHJlcHJlc2VudGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIFt0aGlzXSBhbmQgW290aGVyXS4KICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW2VsZW1lbnRdIGlzIGEgcG90ZW50aWFsIHRhcmdldCB3aGVuIGJlaW5nIGludm9rZWQgb24gdGhpcwogIC8vLyB0eXBlIG1hc2suCiAgLy8vCiAgLy8vCiAgLy8vIFtuYW1lXSBpcyB1c2VkIHRvIGVuc3VyZSBsaWJyYXJ5IHByaXZhY3kgaXMgdGFrZW4gaW50byBhY2NvdW50LgogIGJvb2wgY2FuSGl0KE1lbWJlckVudGl0eSBlbGVtZW50LCBOYW1lIG5hbWUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhpcyBbVHlwZU1hc2tdIGFwcGxpZWQgdG8gW3NlbGVjdG9yXSBjYW4gaGl0IGEKICAvLy8gW25vU3VjaE1ldGhvZF0uCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKFNlbGVjdG9yIHNlbGVjdG9yLCBKQ2xvc2VkV29ybGQgd29ybGQpOwoKICAvLy8gUmV0dXJucyB0aGUgW2VsZW1lbnRdIHRoYXQgaXMga25vd24gdG8gYWx3YXlzIGJlIGhpdCBhdCBydW50aW1lCiAgLy8vIG9uIHRoaXMgbWFzay4gUmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCiAgTWVtYmVyRW50aXR5IGxvY2F0ZVNpbmdsZU1lbWJlcihTZWxlY3RvciBzZWxlY3RvciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKfQqBogBOTjwBDwFQUBBCFhgBDEUcJiQ6BhIEAQxKERZKPgYkPRUIBhIEAQwuHRgUFRMGJB0EAQwWERYhGA0XBgQCATocAQw/KQQBDDkrBAIBSCQBDDk1JzIEAQxCJi0zLksEAgFGFAgJDQcHDgkCAT9DPjMUTyhABAE3AUcMORIvQEgpBAFOOSsjBAFKDDkSL0NITBsjSzENNwYEAUlKGyMGQToGQzANNwYEAUUBTgw5Ei9ASDAEASg0OzIGKgQBUQw5Ei9DSEwbKks4DT4GBAFQShsqBkFBBkM3DT4GBAFRNgQBNic1PhQeSR9KI04dSB1IJE8fSgZCBAEsJwFOISwgHQYRBAFLTUlOKEw/G04RBAEoMSQgKxpFPAoVCB1LSAoVCB5IRQhFPAgTKDVNJT8KCBMGJwQBNhcBOhoBOBQBMhcBPBMBLRoBTyMUATEUATwYATYSATYSAU9RHBkBTg8ZAU4UATI1MjM1JgE/BlE9DBsBTk9MFzsBTFFMFz8BPj0BTDwBQC4BSD41AUg8AUU9AU9DAVERBgZGSgFGFkkBRjNQAgE2cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL3R5cGVfbWFzay5kYXJ0RXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy91bmlvbl90eXBlX21hc2suZGFydLyBLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgbWFza3M7CgpjbGFzcyBVbmlvblR5cGVNYXNrIGltcGxlbWVudHMgVHlwZU1hc2sgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbVW5pb25UeXBlTWFza10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICd1bmlvbi10eXBlLW1hc2snOwoKICBzdGF0aWMgY29uc3QgaW50IE1BWF9VTklPTl9MRU5HVEggPSA0OwoKICAvLyBTZXQgdGhpcyBmbGFnIHRvIGB0cnVlYCB0byBwZXJmb3JtIGEgc2V0LW1lbWJlcnNoaXAgYmFzZWQgY29udGFpbm1lbnQgY2hlY2sKICAvLyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbm9ybWFsaXplZCB0eXBlcy4gVGhpcyBpcyBxdWl0ZSBzbG93IGJ1dCBjYW4gYmUKICAvLyBoZWxwZnVsIGluIGRlYnVnZ2luZy4KICBzdGF0aWMgY29uc3QgYm9vbCBQRVJGT1JNX0VYVFJBX0NPTlRBSU5TX0NIRUNLID0gZmFsc2U7CgogIGZpbmFsIExpc3Q8RmxhdFR5cGVNYXNrPiBkaXNqb2ludE1hc2tzOwoKICBVbmlvblR5cGVNYXNrLl9pbnRlcm5hbCh0aGlzLmRpc2pvaW50TWFza3MpIHsKICAgIGFzc2VydChkaXNqb2ludE1hc2tzLmxlbmd0aCA+IDEpOwogICAgYXNzZXJ0KGRpc2pvaW50TWFza3MuZXZlcnkoKFR5cGVNYXNrIG1hc2spID0+ICFtYXNrLmlzVW5pb24pKTsKICB9CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbVW5pb25UeXBlTWFza10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBVbmlvblR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBMaXN0PEZsYXRUeXBlTWFzaz4gZGlzam9pbnRNYXNrcyA9IHNvdXJjZQogICAgICAgIC5yZWFkTGlzdCgoKSA9PiBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgVW5pb25UeXBlTWFzay5faW50ZXJuYWwoZGlzam9pbnRNYXNrcyk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtVbmlvblR5cGVNYXNrXSB0byBbc2lua10uCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oVHlwZU1hc2tLaW5kLnVuaW9uKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIGRpc2pvaW50TWFza3MsIChGbGF0VHlwZU1hc2sgbWFzaykgPT4gbWFzay53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIHN0YXRpYyBUeXBlTWFzayB1bmlvbk9mKEl0ZXJhYmxlPFR5cGVNYXNrPiBtYXNrcywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoCiAgICAgICAgbWFza3MuZXZlcnkoKG1hc2spID0+IFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZChtYXNrLCBjbG9zZWRXb3JsZCkpKTsKICAgIExpc3Q8RmxhdFR5cGVNYXNrPiBkaXNqb2ludCA9IDxGbGF0VHlwZU1hc2s+W107CiAgICB1bmlvbk9mSGVscGVyKG1hc2tzLCBkaXNqb2ludCwgY2xvc2VkV29ybGQpOwogICAgaWYgKGRpc2pvaW50LmlzRW1wdHkpIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbEVtcHR5KCk7CiAgICBpZiAoZGlzam9pbnQubGVuZ3RoID4gTUFYX1VOSU9OX0xFTkdUSCkgewogICAgICByZXR1cm4gZmxhdHRlbihkaXNqb2ludCwgY2xvc2VkV29ybGQpOwogICAgfQogICAgaWYgKGRpc2pvaW50Lmxlbmd0aCA9PSAxKSByZXR1cm4gZGlzam9pbnRbMF07CiAgICBVbmlvblR5cGVNYXNrIHVuaW9uID0gbmV3IFVuaW9uVHlwZU1hc2suX2ludGVybmFsKGRpc2pvaW50KTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQodW5pb24sIGNsb3NlZFdvcmxkKSk7CiAgICByZXR1cm4gdW5pb247CiAgfQoKICBzdGF0aWMgdm9pZCB1bmlvbk9mSGVscGVyKEl0ZXJhYmxlPFR5cGVNYXNrPiBtYXNrcywKICAgICAgTGlzdDxGbGF0VHlwZU1hc2s+IGRpc2pvaW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcG9zZSBhbiBvcmRlciBvbiB0aGUgbWFzayB0byBlbnN1cmUgc3ViY2xhc3MgbWFza3MKICAgIC8vIGFyZSBwcmVmZXJyZWQgdG8gc3VidHlwZSBtYXNrcy4KICAgIGZvciAoVHlwZU1hc2sgbWFzayBpbiBtYXNrcykgewogICAgICBtYXNrID0gVHlwZU1hc2subm9uRm9yd2FyZGluZ01hc2sobWFzayk7CiAgICAgIGlmIChtYXNrLmlzVW5pb24pIHsKICAgICAgICBVbmlvblR5cGVNYXNrIHVuaW9uID0gbWFzazsKICAgICAgICB1bmlvbk9mSGVscGVyKHVuaW9uLmRpc2pvaW50TWFza3MsIGRpc2pvaW50LCBjbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSBpZiAobWFzay5pc0VtcHR5KSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgRmxhdFR5cGVNYXNrIGZsYXRNYXNrID0gbWFzazsKICAgICAgICBpbnQgaW5MaXN0SW5kZXggPSAtMTsKICAgICAgICBib29sIGNvdmVyZWQgPSBmYWxzZTsKCiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIFtkaXNqb2ludF0gdG8gZmluZCBvdXQgaWYgb25lIG9mIHRoZSBtYXNrCiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcnMgW21hc2tdLgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlzam9pbnQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIEZsYXRUeXBlTWFzayBjdXJyZW50ID0gZGlzam9pbnRbaV07CiAgICAgICAgICBpZiAoY3VycmVudCA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgIFR5cGVNYXNrIG5ld01hc2sgPSBmbGF0TWFzay51bmlvbihjdXJyZW50LCBjbG9zZWRXb3JsZCk7CiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGZvdW5kIGEgZGlzam9pbnQgdW5pb24sIGNvbnRpbnVlIGl0ZXJhdGluZy4KICAgICAgICAgIGlmIChuZXdNYXNrLmlzVW5pb24pIGNvbnRpbnVlOwogICAgICAgICAgY292ZXJlZCA9IHRydWU7CiAgICAgICAgICAvLyBXZSBmb3VuZCBhIG1hc2sgdGhhdCBpcyBlaXRoZXIgZXF1YWwgdG8gW21hc2tdIG9yIGlzIGEKICAgICAgICAgIC8vIHN1cGVydHlwZSBvZiBbbWFza10uCiAgICAgICAgICBpZiAoY3VycmVudCA9PSBuZXdNYXNrKSBicmVhazsKCiAgICAgICAgICAvLyBbbWFza10gaXMgYSBzdXBlcnR5cGUgb2YgW2N1cnJlbnRdLCByZXBsYWNlIHRoZSBbZGlzam9pbnRdCiAgICAgICAgICAvLyBsaXN0IHdpdGggW25ld01hc2tdIGluc3RlYWQgb2YgW2N1cnJlbnRdLiBOb3RlIHRoYXQKICAgICAgICAgIC8vIFtuZXdNYXNrXSBtYXkgY29udGFpbiBkaWZmZXJlbnQgaW5mb3JtYXRpb24gdGhhbiBbbWFza10sCiAgICAgICAgICAvLyBsaWtlIG51bGxhYmlsaXR5LgogICAgICAgICAgZGlzam9pbnRbaV0gPSBuZXdNYXNrOwogICAgICAgICAgZmxhdE1hc2sgPSBuZXdNYXNrOwoKICAgICAgICAgIGlmIChpbkxpc3RJbmRleCAhPSAtMSkgewogICAgICAgICAgICAvLyBJZiB0aGUgbWFzayB3YXMgYWxyZWFkeSBjb3ZlcmVkLCB3ZSByZW1vdmUgdGhlIHByZXZpb3VzCiAgICAgICAgICAgIC8vIHBsYWNlIHdoZXJlIGl0IHdhcyBpbnNlcnRlZC4gVGhpcyBuZXcgbWFzayBzdWJzdW1lcyB0aGUKICAgICAgICAgICAgLy8gcHJldmlvdXNseSBjb3ZlcmVkIG9uZS4KICAgICAgICAgICAgZGlzam9pbnQucmVtb3ZlQXQoaW5MaXN0SW5kZXgpOwogICAgICAgICAgICBpLS07CiAgICAgICAgICB9CiAgICAgICAgICAvLyBSZWNvcmQgd2hlcmUgdGhlIG1hc2sgd2FzIGluc2VydGVkLgogICAgICAgICAgaW5MaXN0SW5kZXggPSBpOwogICAgICAgIH0KICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBtYXNrcyBpbiBbZGlzam9pbnRdIGNvdmVycyBbbWFza10sIHdlIGp1c3QKICAgICAgICAvLyBhZGQgW21hc2tdIHRvIHRoZSBsaXN0LgogICAgICAgIGlmICghY292ZXJlZCkgZGlzam9pbnQuYWRkKGZsYXRNYXNrKTsKICAgICAgfQogICAgfQogIH0KCiAgc3RhdGljIFR5cGVNYXNrIGZsYXR0ZW4oTGlzdDxGbGF0VHlwZU1hc2s+IG1hc2tzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1vdmUgdGhpcyBjb21wdXRhdGlvbiB0byBbQ2xvc2VkV29ybGRdIGFuZCB1c2UgdGhlCiAgICAvLyBjbGFzcyBzZXQgc3RydWN0dXJlcy4KICAgIGlmIChtYXNrcy5pc0VtcHR5KSB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKG1hc2tzLCAnbWFza3MnKTsKICAgIC8vIElmIGVpdGhlciB0eXBlIG1hc2sgaXMgYSBzdWJ0eXBlIHR5cGUgbWFzaywgd2UgY2Fubm90IHVzZSBhCiAgICAvLyBzdWJjbGFzcyB0eXBlIG1hc2sgdG8gcmVwcmVzZW50IHRoZWlyIHVuaW9uLgogICAgYm9vbCB1c2VTdWJjbGFzcyA9IG1hc2tzLmV2ZXJ5KChlKSA9PiAhZS5pc1N1YnR5cGUpOwogICAgYm9vbCBpc051bGxhYmxlID0gbWFza3MuYW55KChlKSA9PiBlLmlzTnVsbGFibGUpOwoKICAgIExpc3Q8Q2xhc3NFbnRpdHk+IG1hc2tzQmFzZXMgPSBtYXNrcy5tYXAoKG1hc2spID0+IG1hc2suYmFzZSkudG9MaXN0KCk7CiAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2FuZGlkYXRlcyA9CiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uU3VwZXJ0eXBlc09mKG1hc2tzQmFzZXMpOwoKICAgIC8vIENvbXB1dGUgdGhlIGJlc3QgY2FuZGlkYXRlIGFuZCBpdHMga2luZC4KICAgIENsYXNzRW50aXR5IGJlc3RFbGVtZW50OwogICAgaW50IGJlc3RLaW5kOwogICAgaW50IGJlc3RTaXplOwogICAgZm9yIChDbGFzc0VudGl0eSBjYW5kaWRhdGUgaW4gY2FuZGlkYXRlcykgewogICAgICBib29sIGlzSW5zdGFudGlhdGVkU3RyaWN0U3ViY2xhc3MoY2xzKSA9PgogICAgICAgICAgY2xzICE9IGNhbmRpZGF0ZSAmJgogICAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkKGNscykgJiYKICAgICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihjbHMsIGNhbmRpZGF0ZSk7CgogICAgICBpbnQgc2l6ZTsKICAgICAgaW50IGtpbmQ7CiAgICAgIGlmICh1c2VTdWJjbGFzcyAmJiBtYXNrc0Jhc2VzLmV2ZXJ5KGlzSW5zdGFudGlhdGVkU3RyaWN0U3ViY2xhc3MpKSB7CiAgICAgICAgLy8gSWYgYm90aCBbdGhpc10gYW5kIFtvdGhlcl0gYXJlIHN1YmNsYXNzZXMgb2YgdGhlIHN1cGVydHlwZSwKICAgICAgICAvLyB0aGVuIHdlIHByZWZlciB0byBjb25zdHJ1Y3QgYSBzdWJjbGFzcyB0eXBlIG1hc2sgYmVjYXVzZSBpdAogICAgICAgIC8vIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IGFzIHNtYWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgICAgLy8gc3VidHlwZSB0eXBlIG1hc2suCiAgICAgICAga2luZCA9IEZsYXRUeXBlTWFzay5TVUJDTEFTUzsKICAgICAgICAvLyBUT0RPKHNpZ211bmQsIGpvaG5uaXdpbnRoZXIpOiBjb21wdXRpbmcgbGVuZ3RoIGhlcmUgKGFuZCBiZWxvdykgaXMKICAgICAgICAvLyBleHBlbnNpdmUuIElmIHdlIGNhbid0IHByZXZlbnQgYGZsYXR0ZW5gIGZyb20gYmVpbmcgY2FsbGVkIGEgbG90LCBpdAogICAgICAgIC8vIG1pZ2h0IGJlIHdvcnRoIGNhY2hpbmcgcmVzdWx0cy4KICAgICAgICBzaXplID0gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuc3RyaWN0U3ViY2xhc3NDb3VudChjYW5kaWRhdGUpOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgc2l6ZSA8PSBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5zdHJpY3RTdWJ0eXBlQ291bnQoY2FuZGlkYXRlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAga2luZCA9IEZsYXRUeXBlTWFzay5TVUJUWVBFOwogICAgICAgIHNpemUgPSBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5zdHJpY3RTdWJ0eXBlQ291bnQoY2FuZGlkYXRlKTsKICAgICAgfQogICAgICAvLyBVcGRhdGUgdGhlIGJlc3QgY2FuZGlkYXRlIGlmIHRoZSBuZXcgb25lIGlzIGJldHRlci4KICAgICAgaWYgKGJlc3RFbGVtZW50ID09IG51bGwgfHwgc2l6ZSA8IGJlc3RTaXplKSB7CiAgICAgICAgYmVzdEVsZW1lbnQgPSBjYW5kaWRhdGU7CiAgICAgICAgYmVzdFNpemUgPSBzaXplOwogICAgICAgIGJlc3RLaW5kID0ga2luZDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlTWFzayhiZXN0RWxlbWVudCwgYmVzdEtpbmQsIGlzTnVsbGFibGUsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHVuaW9uKGR5bmFtaWMgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgb3RoZXIgPSBUeXBlTWFzay5ub25Gb3J3YXJkaW5nTWFzayhvdGhlcik7CiAgICBpZiAoIW90aGVyLmlzVW5pb24gJiYgZGlzam9pbnRNYXNrcy5jb250YWlucyhvdGhlcikpIHJldHVybiB0aGlzOwoKICAgIExpc3Q8RmxhdFR5cGVNYXNrPiBuZXdMaXN0ID0gbmV3IExpc3Q8RmxhdFR5cGVNYXNrPi5mcm9tKGRpc2pvaW50TWFza3MpOwogICAgaWYgKCFvdGhlci5pc1VuaW9uKSB7CiAgICAgIG5ld0xpc3QuYWRkKG90aGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChvdGhlciBpcyBVbmlvblR5cGVNYXNrKTsKICAgICAgbmV3TGlzdC5hZGRBbGwob3RoZXIuZGlzam9pbnRNYXNrcyk7CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLnVuaW9uT2YobmV3TGlzdCwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKGR5bmFtaWMgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgb3RoZXIgPSBUeXBlTWFzay5ub25Gb3J3YXJkaW5nTWFzayhvdGhlcik7CiAgICBpZiAoIW90aGVyLmlzVW5pb24gJiYgZGlzam9pbnRNYXNrcy5jb250YWlucyhvdGhlcikpIHJldHVybiBvdGhlcjsKICAgIGlmIChvdGhlci5pc1VuaW9uICYmIHRoaXMgPT0gb3RoZXIpIHJldHVybiB0aGlzOwoKICAgIExpc3Q8VHlwZU1hc2s+IGludGVyc2VjdGlvbnMgPSA8VHlwZU1hc2s+W107CiAgICBmb3IgKFR5cGVNYXNrIGN1cnJlbnQgaW4gZGlzam9pbnRNYXNrcykgewogICAgICBpZiAob3RoZXIuaXNVbmlvbikgewogICAgICAgIGlmIChvdGhlci5kaXNqb2ludE1hc2tzLmNvbnRhaW5zKGN1cnJlbnQpKSB7CiAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFkZChjdXJyZW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yIChGbGF0VHlwZU1hc2sgZmxhdE90aGVyIGluIG90aGVyLmRpc2pvaW50TWFza3MpIHsKICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hZGQoY3VycmVudC5pbnRlcnNlY3Rpb24oZmxhdE90aGVyLCBjbG9zZWRXb3JsZCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpbnRlcnNlY3Rpb25zLmFkZChjdXJyZW50LmludGVyc2VjdGlvbihvdGhlciwgY2xvc2VkV29ybGQpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlTWFzay51bmlvbk9mKGludGVyc2VjdGlvbnMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEaXNqb2ludChUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBmb3IgKHZhciBjdXJyZW50IGluIGRpc2pvaW50TWFza3MpIHsKICAgICAgaWYgKCFjdXJyZW50LmlzRGlzam9pbnQob3RoZXIsIGNsb3NlZFdvcmxkKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBudWxsYWJsZSgpIHsKICAgIGlmIChpc051bGxhYmxlKSByZXR1cm4gdGhpczsKICAgIExpc3Q8RmxhdFR5cGVNYXNrPiBuZXdMaXN0ID0gbmV3IExpc3Q8RmxhdFR5cGVNYXNrPi5mcm9tKGRpc2pvaW50TWFza3MpOwogICAgbmV3TGlzdFswXSA9IG5ld0xpc3RbMF0ubnVsbGFibGUoKTsKICAgIHJldHVybiBuZXcgVW5pb25UeXBlTWFzay5faW50ZXJuYWwobmV3TGlzdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBub25OdWxsYWJsZSgpIHsKICAgIGlmICghaXNOdWxsYWJsZSkgcmV0dXJuIHRoaXM7CiAgICBJdGVyYWJsZTxGbGF0VHlwZU1hc2s+IG5ld0l0ZXJhYmxlID0gZGlzam9pbnRNYXNrcy5tYXAoKGUpIHsKICAgICAgRmxhdFR5cGVNYXNrIHIgPSBlLm5vbk51bGxhYmxlKCk7CiAgICAgIHJldHVybiByOwogICAgfSkudG9MaXN0KCk7CiAgICByZXR1cm4gbmV3IFVuaW9uVHlwZU1hc2suX2ludGVybmFsKG5ld0l0ZXJhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHlPck51bGwgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGwgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiBkaXNqb2ludE1hc2tzLmFueSgoZSkgPT4gZS5pc051bGxhYmxlKTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4YWN0ID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVW5pb24gPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnRhaW5lciA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldCA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01hcCA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0RpY3Rpb25hcnkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGb3J3YXJkaW5nID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVmFsdWUgPT4gZmFsc2U7CgogIC8vLyBDaGVja3Mgd2hldGhlciBbb3RoZXJdIGlzIGNvbnRhaW5lZCBpbiB0aGlzIHVuaW9uLgogIC8vLwogIC8vLyBJbnZhcmlhbnRzOgogIC8vLyAtIFtvdGhlcl0gbWF5IG5vdCBiZSBhIFtVbmlvblR5cGVNYXNrXSBpdHNlbGYKICAvLy8gLSB0aGUgY2hlYXAgdGVzdCBtYXRjaGluZyBhZ2FpbnN0IGluZGl2aWR1YWwgbWVtYmVycyBvZiBbZGlzam9pbnRNYXNrc10KICAvLy8gICBtdXN0IGhhdmUgZmFpbGVkLgogIGJvb2wgc2xvd0NvbnRhaW5zQ2hlY2soVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gVW5pb25zIHNob3VsZCBuZXZlciBtYWtlIGl0IGhlcmUuCiAgICBhc3NlcnQoIW90aGVyLmlzVW5pb24pOwogICAgLy8gRW5zdXJlIHRoZSBjaGVhcCB0ZXN0IGZhaWxzLgogICAgYXNzZXJ0KCFkaXNqb2ludE1hc2tzLmFueSgobWFzaykgPT4gbWFzay5jb250YWluc01hc2sob3RoZXIsIGNsb3NlZFdvcmxkKSkpOwogICAgLy8gSWYgd2UgY292ZXIgb2JqZWN0LCB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuCiAgICBhc3NlcnQoIWNvbnRhaW5zKGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzLCBjbG9zZWRXb3JsZCkpOwogICAgLy8gTGlrZXdpc2UsIG51bGxuZXNzIHNob3VsZCBiZSBjb3ZlcmVkLgogICAgYXNzZXJ0KGlzTnVsbGFibGUgfHwgIW90aGVyLmlzTnVsbGFibGUpOwogICAgLy8gVGhlIGZhc3QgdGVzdCBpcyBwcmVjaXNlIGZvciBleGFjdCB0eXBlcy4KICAgIGlmIChvdGhlci5pc0V4YWN0KSByZXR1cm4gZmFsc2U7CiAgICAvLyBXZSBjYW5ub3QgY29udGFpbiBvYmplY3QuCiAgICBpZiAob3RoZXIuY29udGFpbnMoY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MsIGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBGbGF0VHlwZU1hc2sgZmxhdCA9IFR5cGVNYXNrLm5vbkZvcndhcmRpbmdNYXNrKG90aGVyKTsKICAgIC8vIENoZWNrIHdlIGNvdmVyIHRoZSBiYXNlIGNsYXNzLgogICAgaWYgKCFjb250YWlucyhmbGF0LmJhc2UsIGNsb3NlZFdvcmxkKSkgcmV0dXJuIGZhbHNlOwogICAgLy8gQ2hlY2sgZm9yIG90aGVyIG1lbWJlcnMuCiAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gbWVtYmVyczsKICAgIGlmIChmbGF0LmlzU3ViY2xhc3MpIHsKICAgICAgbWVtYmVycyA9IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LnN0cmljdFN1YmNsYXNzZXNPZihmbGF0LmJhc2UpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGZsYXQuaXNTdWJ0eXBlKTsKICAgICAgbWVtYmVycyA9IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LnN0cmljdFN1YnR5cGVzT2YoZmxhdC5iYXNlKTsKICAgIH0KICAgIHJldHVybiBtZW1iZXJzLmV2ZXJ5KChDbGFzc0VudGl0eSBjbHMpID0+IHRoaXMuY29udGFpbnMoY2xzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0luTWFzayhUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBvdGhlciA9IFR5cGVNYXNrLm5vbkZvcndhcmRpbmdNYXNrKG90aGVyKTsKICAgIGlmIChpc051bGxhYmxlICYmICFvdGhlci5pc051bGxhYmxlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAob3RoZXIuaXNVbmlvbikgewogICAgICBVbmlvblR5cGVNYXNrIHVuaW9uID0gb3RoZXI7CiAgICAgIGJvb2wgY29udGFpbmVkSW5BbnlPZihGbGF0VHlwZU1hc2sgbWFzaywgSXRlcmFibGU8RmxhdFR5cGVNYXNrPiBtYXNrcykgewogICAgICAgIC8vIG51bGwgaXMgbm90IGNhbm9uaWNhbGl6ZWQgZm9yIHRoZSB1bmlvbiBidXQgc3RvcmVkIG9ubHkgb24gc29tZQogICAgICAgIC8vIG1hc2tzIGluIFtkaXNqb2ludE1hc2tdLiBJdCBoYXMgYmVlbiBjaGVja2VkIGluIHRoZSBzdXJyb3VuZGluZwogICAgICAgIC8vIGNvbnRleHQsIHNvIHdlIGNhbiBzYWZlbHkgaWdub3JlIGl0IGhlcmUuCiAgICAgICAgRmxhdFR5cGVNYXNrIG1hc2tEaXNyZWdhcmROdWxsID0gbWFzay5ub25OdWxsYWJsZSgpOwogICAgICAgIHJldHVybiBtYXNrcy5hbnkoKEZsYXRUeXBlTWFzayBvdGhlcikgewogICAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRhaW5zTWFzayhtYXNrRGlzcmVnYXJkTnVsbCwgY2xvc2VkV29ybGQpOwogICAgICAgIH0pOwogICAgICB9CgogICAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5ldmVyeSgoRmxhdFR5cGVNYXNrIGRpc2pvaW50TWFzaykgewogICAgICAgIGJvb2wgY29udGFpbmVkID0gY29udGFpbmVkSW5BbnlPZihkaXNqb2ludE1hc2ssIHVuaW9uLmRpc2pvaW50TWFza3MpOwogICAgICAgIGlmIChQRVJGT1JNX0VYVFJBX0NPTlRBSU5TX0NIRUNLICYmCiAgICAgICAgICAgICFjb250YWluZWQgJiYKICAgICAgICAgICAgdW5pb24uc2xvd0NvbnRhaW5zQ2hlY2soZGlzam9pbnRNYXNrLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgICAgIHRocm93ICJUeXBlTWFzayBiYXNlZCBjb250YWlubWVudCBjaGVjayBmYWlsZWQgZm9yICR0aGlzIGFuZCAkb3RoZXIuIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbnRhaW5lZDsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5ldmVyeSgobWFzaykgPT4gbWFzay5pc0luTWFzayhvdGhlciwgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNNYXNrKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIG90aGVyID0gVHlwZU1hc2subm9uRm9yd2FyZGluZ01hc2sob3RoZXIpOwogICAgaWYgKG90aGVyLmlzTnVsbGFibGUgJiYgIWlzTnVsbGFibGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChvdGhlci5pc1VuaW9uKSByZXR1cm4gb3RoZXIuaXNJbk1hc2sodGhpcywgY2xvc2VkV29ybGQpOwogICAgb3RoZXIgPSBvdGhlci5ub25OdWxsYWJsZSgpOyAvLyBudWxsYWJsZSBpcyBub3QgY2Fub25pY2FsaXplZCwgc28gZHJvcCBpdC4KICAgIGJvb2wgY29udGFpbmVkID0KICAgICAgICBkaXNqb2ludE1hc2tzLmFueSgobWFzaykgPT4gbWFzay5jb250YWluc01hc2sob3RoZXIsIGNsb3NlZFdvcmxkKSk7CiAgICBpZiAoUEVSRk9STV9FWFRSQV9DT05UQUlOU19DSEVDSyAmJgogICAgICAgICFjb250YWluZWQgJiYKICAgICAgICBzbG93Q29udGFpbnNDaGVjayhvdGhlciwgY2xvc2VkV29ybGQpKSB7CiAgICAgIHRocm93ICJUeXBlTWFzayBiYXNlZCBjb250YWlubWVudCBjaGVjayBmYWlsZWQgZm9yICR0aGlzIGFuZCAkb3RoZXIuIjsKICAgIH0KICAgIHJldHVybiBjb250YWluZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seUludChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmV2ZXJ5KChtYXNrKSA9PiBtYXNrLmNvbnRhaW5zT25seUludChjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlEb3VibGUoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5ldmVyeSgobWFzaykgPT4gbWFzay5jb250YWluc09ubHlEb3VibGUoY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5TnVtKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuZXZlcnkoKG1hc2spIHsKICAgICAgcmV0dXJuIG1hc2suY29udGFpbnNPbmx5TnVtKGNsb3NlZFdvcmxkKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlCb29sKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuZXZlcnkoKG1hc2spID0+IG1hc2suY29udGFpbnNPbmx5Qm9vbChjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlTdHJpbmcoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5ldmVyeSgobWFzaykgPT4gbWFzay5jb250YWluc09ubHlTdHJpbmcoY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5KENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmV2ZXJ5KChtYXNrKSA9PiBtYXNrLmNvbnRhaW5zT25seShlbGVtZW50KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHNhdGlzZmllcyhDbGFzc0VudGl0eSBjbHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuZXZlcnkoKG1hc2spID0+IG1hc2suc2F0aXNmaWVzKGNscywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnMoQ2xhc3NFbnRpdHkgY2xzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmFueSgoZSkgPT4gZS5jb250YWlucyhjbHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zQWxsKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuYW55KChtYXNrKSA9PiBtYXNrLmNvbnRhaW5zQWxsKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBzaW5nbGVDbGFzcyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IG51bGw7CgogIEBvdmVycmlkZQogIGJvb2wgbmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhTZWxlY3RvciBzZWxlY3RvciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcwogICAgICAgIC5hbnkoKGUpID0+IGUubmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhzZWxlY3RvciwgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2FuSGl0KE1lbWJlckVudGl0eSBlbGVtZW50LCBOYW1lIG5hbWUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuYW55KChlKSA9PiBlLmNhbkhpdChlbGVtZW50LCBuYW1lLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvY2F0ZVNpbmdsZU1lbWJlcihTZWxlY3RvciBzZWxlY3RvciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBNZW1iZXJFbnRpdHkgY2FuZGlkYXRlOwogICAgZm9yIChGbGF0VHlwZU1hc2sgbWFzayBpbiBkaXNqb2ludE1hc2tzKSB7CiAgICAgIE1lbWJlckVudGl0eSBjdXJyZW50ID0gbWFzay5sb2NhdGVTaW5nbGVNZW1iZXIoc2VsZWN0b3IsIGNsb3NlZFdvcmxkKTsKICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9IGVsc2UgaWYgKGNhbmRpZGF0ZSA9PSBudWxsKSB7CiAgICAgICAgY2FuZGlkYXRlID0gY3VycmVudDsKICAgICAgfSBlbHNlIGlmIChjYW5kaWRhdGUgIT0gY3VycmVudCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2FuZGlkYXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nIG1hc2tzU3RyaW5nID0KICAgICAgICAoZGlzam9pbnRNYXNrcy5tYXAoKFR5cGVNYXNrIG1hc2spID0+IG1hc2sudG9TdHJpbmcoKSkudG9MaXN0KCkuLnNvcnQoKSkKICAgICAgICAgICAgLmpvaW4oIiwgIik7CiAgICByZXR1cm4gJ1VuaW9uKCRtYXNrc1N0cmluZyknOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwoKICAgIGJvb2wgY29udGFpbnNBbGwoKSB7CiAgICAgIHJldHVybiBvdGhlci5kaXNqb2ludE1hc2tzLmV2ZXJ5KChlKSB7CiAgICAgICAgdmFyIG1hcCA9IGRpc2pvaW50TWFza3MubWFwKChlKSA9PiBlLm5vbk51bGxhYmxlKCkpOwogICAgICAgIHJldHVybiBtYXAuY29udGFpbnMoZS5ub25OdWxsYWJsZSgpKTsKICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIG90aGVyIGlzIFVuaW9uVHlwZU1hc2sgJiYKICAgICAgICBvdGhlci5pc051bGxhYmxlID09IGlzTnVsbGFibGUgJiYKICAgICAgICBvdGhlci5kaXNqb2ludE1hc2tzLmxlbmd0aCA9PSBkaXNqb2ludE1hc2tzLmxlbmd0aCAmJgogICAgICAgIGNvbnRhaW5zQWxsKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoQ29kZSA9IGlzTnVsbGFibGUgPyA4NiA6IDQzOwogICAgLy8gVGhlIG9yZGVyIG9mIHRoZSBtYXNrcyBpbiBbZGlzam9pbnRNYXNrc10gbXVzdCBub3QgYWZmZWN0IHRoZQogICAgLy8gaGFzaENvZGUuCiAgICBmb3IgKHZhciBtYXNrIGluIGRpc2pvaW50TWFza3MpIHsKICAgICAgaGFzaENvZGUgPSAoaGFzaENvZGUgXiBtYXNrLm5vbk51bGxhYmxlKCkuaGFzaENvZGUpICYgMHgzZmZmZmZmZjsKICAgIH0KICAgIHJldHVybiBoYXNoQ29kZTsKICB9Cn0KgcAATk48AQ8BKkcdLwEpAVFLGzoBKgEwJkMEATssNRcuTxU3BAExDCgoFRRLEwQBUAxQNDE+Li0GMkE9EgQBNj9RJyMvGiRDIRIPJh4eAUIiNC4pQ0QpGkQiKQFIQUYfIR4BI0dHJywRDDEbCkUjLggGBAFQTx1CQzQ5NgFMJzQBMB0SEjAwHkZDARAQS0dHQR4mTlArShBPDyVJCD00IRkZCAZJBAEMPC9GAU0aGg0mKwY3BAEMQy9HNQExLhs1JhFATQwKD0UIBj0EAQw+KUEGEQQBDBghTSgxBAEMGyJBKBARNQQBDCMMHQwcDEEMHQwcDCEMGwwbDCIMIgwdATkGEjROGkUpHCRRNUwtLTElIU8UBjsmOSAjG0oNHkgGUAQBDDwvNxkjT0tLNT0wRQwIAT9OLBpCUQoaCgZNBAEMQC83QU8VTCgWMU0GFgQBDDNNBAEMNlAEAQwzKDAIBAEMNE4EAQw2UAQBDCtGBAEMPkwEAQw9QwQBDC9HBAEMPQEMUBlJBAEMS0sEAQxRHC9NHRUmHSkVCAYWBAEMFhlRGSIEAQwcLQEZLT0uCgYBJSo+FwQBDBUpRREmSAYVBAIBPHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy91bmlvbl90eXBlX21hc2suZGFydEVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3MvdmFsdWVfdHlwZV9tYXNrLmRhcnSIty8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIG1hc2tzOwoKY2xhc3MgVmFsdWVUeXBlTWFzayBleHRlbmRzIEZvcndhcmRpbmdUeXBlTWFzayB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtWYWx1ZVR5cGVNYXNrXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3ZhbHVlLXR5cGUtbWFzayc7CgogIEBvdmVycmlkZQogIGZpbmFsIFR5cGVNYXNrIGZvcndhcmRUbzsKICBmaW5hbCBQcmltaXRpdmVDb25zdGFudFZhbHVlIHZhbHVlOwoKICBWYWx1ZVR5cGVNYXNrKHRoaXMuZm9yd2FyZFRvLCB0aGlzLnZhbHVlKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtWYWx1ZVR5cGVNYXNrXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IFZhbHVlVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFR5cGVNYXNrIGZvcndhcmRUbyA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gc291cmNlLnJlYWRDb25zdGFudCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBWYWx1ZVR5cGVNYXNrKGZvcndhcmRUbywgY29uc3RhbnQpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbVmFsdWVUeXBlTWFza10gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKFR5cGVNYXNrS2luZC52YWx1ZSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBmb3J3YXJkVG8ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZUNvbnN0YW50KHZhbHVlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBudWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlID8gdGhpcyA6IG5ldyBWYWx1ZVR5cGVNYXNrKGZvcndhcmRUby5udWxsYWJsZSgpLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBub25OdWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlCiAgICAgICAgPyBuZXcgVmFsdWVUeXBlTWFzayhmb3J3YXJkVG8ubm9uTnVsbGFibGUoKSwgdmFsdWUpCiAgICAgICAgOiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNWYWx1ZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgVmFsdWVUeXBlTWFzaykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1cGVyLmVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpICYmIHZhbHVlID09IG90aGVyLnZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFR5cGVNYXNrIGZvcndhcmRJbnRlcnNlY3Rpb24gPSBmb3J3YXJkVG8uaW50ZXJzZWN0aW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICBpZiAoZm9yd2FyZEludGVyc2VjdGlvbi5pc0VtcHR5T3JOdWxsKSByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbjsKICAgIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uLmlzTnVsbGFibGUgPyBudWxsYWJsZSgpIDogbm9uTnVsbGFibGUoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpID0+IHN1cGVyID09IG90aGVyOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBjb21wdXRlSGFzaENvZGUodmFsdWUsIGlzTnVsbGFibGUsIGZvcndhcmRUbyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1ZhbHVlKCRmb3J3YXJkVG8sIHZhbHVlOiAke3ZhbHVlLnRvRGFydFRleHQoKX0pJzsKICB9Cn0KUABOTjwBDwExRx0vAQwcJgEtATssNRdPNBUzBAExDCgoFSUfEwQBDBhPBAEMGxY8EAQBDBwBDCQvRQQBDERPR0gEAQwtAQwVOgQBDBY+BAIBPHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy92YWx1ZV90eXBlX21hc2suZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlcy5kYXJ0wABXhC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnIHNob3cgZmFpbGVkQXQsIHJldGFpbkRhdGFGb3JUZXN0aW5nOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCcgc2hvdyBDb21waWxlclRhc2s7CmltcG9ydCAnLi4vY29tcGlsZXIuZGFydCcgc2hvdyBDb21waWxlcjsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZV9ncmFwaF9pbmZlcnJlci5kYXJ0JyBzaG93IFR5cGVHcmFwaEluZmVycmVyOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9pbmZlcnJlcl9lbmdpbmUuZGFydCc7CgovLy8gUmVzdWx0cyBhYm91dCBhIHNpbmdsZSBlbGVtZW50IChlLmcuIGEgbWV0aG9kLCBwYXJhbWV0ZXIsIG9yIGZpZWxkKQovLy8gcHJvZHVjZWQgYnkgdGhlIGdsb2JhbCB0eXBlLWluZmVyZW5jZSBhbGdvcml0aG0uCi8vLwovLy8gQWxsIHF1ZXJpZXMgaW4gdGhpcyBjbGFzcyBtYXkgY29udGFpbiByZXN1bHRzIHRoYXQgYXNzdW1lIHdob2xlLXByb2dyYW0KLy8vIGNsb3NlZC13b3JsZCBzZW1hbnRpY3MuIEFueSBbVHlwZU1hc2tdIGZvciBhbiBlbGVtZW50IG9yIG5vZGUgdGhhdCB3ZSByZXR1cm4KLy8vIHdhcyBpbmZlcnJlZCB0byBiZSBhICJndWFyYW50ZWVkIHR5cGUiLCB0aGF0IG1lYW5zLCBpdCBpcyBhIHR5cGUgdGhhdCB3ZQovLy8gY2FuIHByb3ZlIHRvIGJlIGNvcnJlY3QgZm9yIGFsbCBleGVjdXRpb25zIG9mIHRoZSBwcm9ncmFtLiAgQSB0cml2aWFsCi8vLyBpbXBsZW1lbnRhdGlvbiB3b3VsZCByZXR1cm4gZmFsc2Ugb24gYWxsIGJvb2xlYW4gcHJvcGVydGllcyAoZ2l2aW5nIG5vCi8vLyBndWFyYW50ZWVzKSBhbmQgdGhlIGBzdWJjbGFzcyBvZiBPYmplY3Qgb3IgbnVsbGAgdHlwZSBtYXNrIGZvciB0aGUgdHlwZQovLy8gYmFzZWQgcXVlcmllcyAodGhlIHJ1bnRpbWUgdmFsdWUgY291bGQgYmUgYW55dGhpbmcpLgphYnN0cmFjdCBjbGFzcyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0dsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UsCiAgICAgICAgICBpci5NZW1iZXIgY29udGV4dCwgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSA9CiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdF0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGlyLk1lbWJlciBjb250ZXh0LAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pOwoKICAvLy8gVGhlIGluZmVycmVkIHR5cGUgd2hlbiB0aGlzIHJlc3VsdCBiZWxvbmdzIHRvIGEgZmllbGQsIG51bGwgb3RoZXJ3aXNlLgogIEFic3RyYWN0VmFsdWUgZ2V0IHR5cGU7CgogIC8vLyBXaGV0aGVyIHRoZSBtZW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzdWx0IGlzIG9ubHkgY2FsbGVkIG9uY2UgaW4gb25lCiAgLy8vIGxvY2F0aW9uIGluIHRoZSBlbnRpcmUgcHJvZ3JhbS4KICBib29sIGdldCBpc0NhbGxlZE9uY2U7CgogIC8vLyBXaGV0aGVyIHRoZSBtZXRob2QgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXN1bHQgYWx3YXlzIHRocm93cy4KICBib29sIGdldCB0aHJvd3NBbHdheXM7CgogIC8vLyBUaGUgaW5mZXJyZWQgcmV0dXJuIHR5cGUgd2hlbiB0aGlzIHJlc3VsdCBiZWxvbmdzIHRvIGEgZnVuY3Rpb24gZWxlbWVudC4KICBBYnN0cmFjdFZhbHVlIGdldCByZXR1cm5UeXBlOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiBhIHNlbmQgW25vZGVdLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbmFtZSB0aGlzLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mU2VuZChpci5UcmVlTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGdldHRlciBpbiBhIGNvbXBsZXggc2VuZC1zZXQgW25vZGVdLCBmb3IgZXhhbXBsZSwKICAvLy8gdGhlIHR5cGUgb2YgdGhlIGBhLmZgIGdldHRlciBpbiBgYS5mICs9IGJgLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mR2V0dGVyKGlyLlRyZWVOb2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgaXRlcmF0b3IgaW4gYSBbbG9vcF0uCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvcihpci5UcmVlTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGBtb3ZlTmV4dGAgY2FsbCBvZiBhbiBpdGVyYXRvciBpbiBhIFtsb29wXS4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yTW92ZU5leHQoaXIuVHJlZU5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBgY3VycmVudGAgZ2V0dGVyIG9mIGFuIGl0ZXJhdG9yIGluIGEgW2xvb3BdLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JDdXJyZW50KGlyLlRyZWVOb2RlIG5vZGUpOwp9CgovLy8gSW50ZXJuYWwgZGF0YSB1c2VkIGR1cmluZyB0eXBlLWluZmVyZW5jZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyBhYm91dAovLy8gYSBzaW5nbGUgZWxlbWVudC4KYWJzdHJhY3QgY2xhc3MgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0dsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlLAogICAgICAgICAgaXIuTWVtYmVyIGNvbnRleHQsIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgPQogICAgICBLZXJuZWxHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBpci5NZW1iZXIgY29udGV4dCwKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKTsKCiAgLy8vIENvbXByZXNzZXMgdGhlIGlubmVyIHJlcHJlc2VudGF0aW9uIGJ5IHJlbW92aW5nIFtBYnN0cmFjdFZhbHVlXSBtYXBwaW5ncwogIC8vLyB0byBgbnVsbGAuIFJldHVybnMgdGhlIGRhdGEgb2JqZWN0IGl0c2VsZiBvciBgbnVsbGAgaWYgdGhlIGRhdGEgb2JqZWN0CiAgLy8vIHdhcyBlbXB0eSBhZnRlciBjb21wcmVzc2lvbi4KICBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEgY29tcHJlc3MoKTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMuIE1heWJlIHNwbGl0IGJ5IGFjY2Vzcy9pbnZva2UuCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZTZW5kKGlyLlRyZWVOb2RlIG5vZGUpOwogIEFic3RyYWN0VmFsdWUgdHlwZU9mR2V0dGVyKGlyLlRyZWVOb2RlIG5vZGUpOwoKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yKGlyLlRyZWVOb2RlIG5vZGUpOwoKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yTW92ZU5leHQoaXIuVHJlZU5vZGUgbm9kZSk7CgogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JDdXJyZW50KGlyLlRyZWVOb2RlIG5vZGUpOwp9CgovLy8gQVBJIHRvIGludGVyYWN0IHdpdGggdGhlIGdsb2JhbCB0eXBlLWluZmVyZW5jZSBlbmdpbmUuCmFic3RyYWN0IGNsYXNzIFR5cGVzSW5mZXJyZXIgewogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGFuYWx5emVNYWluKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwp9CgovLy8gUmVzdWx0cyBwcm9kdWNlZCBieSB0aGUgZ2xvYmFsIHR5cGUtaW5mZXJlbmNlIGFsZ29yaXRobS4KLy8vCi8vLyBBbGwgcXVlcmllcyBpbiB0aGlzIGNsYXNzIG1heSBjb250YWluIHJlc3VsdHMgdGhhdCBhc3N1bWUgd2hvbGUtcHJvZ3JhbQovLy8gY2xvc2VkLXdvcmxkIHNlbWFudGljcy4gQW55IFtBYnN0cmFjdFZhbHVlXSBmb3IgYW4gZWxlbWVudCBvciBub2RlIHRoYXQgd2UKLy8vIHJldHVybiB3YXMgaW5mZXJyZWQgdG8gYmUgYSAiZ3VhcmFudGVlZCB0eXBlIiwgdGhhdCBtZWFucywgaXQgaXMgYSB0eXBlIHRoYXQKLy8vIHdlIGNhbiBwcm92ZSB0byBiZSBjb3JyZWN0IGZvciBhbGwgZXhlY3V0aW9ucyBvZiB0aGUgcHJvZ3JhbS4KYWJzdHJhY3QgY2xhc3MgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwKICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBJbmZlcnJlZERhdGEgaW5mZXJyZWREYXRhKSB7CiAgICBib29sIGlzVHJpdmlhbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgaWYgKGlzVHJpdmlhbCkgewogICAgICByZXR1cm4gbmV3IFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhjbG9zZWRXb3JsZCk7CiAgICB9CiAgICByZXR1cm4gbmV3IEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgc291cmNlLCBlbGVtZW50TWFwLCBjbG9zZWRXb3JsZCwgaW5mZXJyZWREYXRhKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0dsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIEpDbG9zZWRXb3JsZCBnZXQgY2xvc2VkV29ybGQ7CgogIEluZmVycmVkRGF0YSBnZXQgaW5mZXJyZWREYXRhOwoKICBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IHJlc3VsdE9mTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBBYnN0cmFjdFZhbHVlIHJlc3VsdE9mUGFyYW1ldGVyKExvY2FsIHBhcmFtZXRlcik7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgW3NlbGVjdG9yXSB0byBhIHJlY2VpdmVyIHdpdGgKICAvLy8gdGhlIGdpdmVuIFtyZWNlaXZlcl0gdHlwZS4KICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGVPZlNlbGVjdG9yKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBhIGZpeGVkLWxlbmd0aCBjb25zdHJ1Y3RvciBjYWxsIGdvZXMgdGhyb3VnaCBhIGdyb3dhYmxlCiAgLy8vIGNoZWNrLgogIGJvb2wgaXNGaXhlZEFycmF5Q2hlY2tlZEZvckdyb3dhYmxlKGlyLlRyZWVOb2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiBhIGxpc3QgbmV3IGV4cHJlc3Npb24gW25vZGVdLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mTmV3TGlzdChpci5UcmVlTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgYSBsaXN0IGxpdGVyYWwgW25vZGVdLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mTGlzdExpdGVyYWwoaXIuVHJlZU5vZGUgbm9kZSk7Cn0KCi8vLyBHbG9iYWwgYW5hbHlzaXMgdGhhdCBpbmZlcnMgY29uY3JldGUgdHlwZXMuCmNsYXNzIEdsb2JhbFR5cGVJbmZlcmVuY2VUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICAvLyBUT0RPKHNpZ211bmQpOiByZW5hbWUgYXQgdGhlIHNhbWUgdGltZSBhcyBvdXIgYmVuY2htYXJraW5nIHRvb2xzLgogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJ1R5cGUgaW5mZXJlbmNlJzsKCiAgZmluYWwgQ29tcGlsZXIgY29tcGlsZXI7CgogIC8vLyBUaGUgW1R5cGVHcmFwaEluZmVycmVyXSB1c2VkIGJ5IHRoZSBnbG9iYWwgdHlwZSBpbmZlcmVuY2UuIFRoaXMgc2hvdWxkIGJ5CiAgLy8vIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSB0aGlzIGNsYXNzIGZvciB0ZXN0aW5nIG9ubHkuCiAgVHlwZUdyYXBoSW5mZXJyZXIgdHlwZXNJbmZlcnJlckludGVybmFsOwoKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzRm9yVGVzdGluZzsKCiAgR2xvYmFsVHlwZUluZmVyZW5jZVRhc2soQ29tcGlsZXIgY29tcGlsZXIpCiAgICAgIDogY29tcGlsZXIgPSBjb21waWxlciwKICAgICAgICBzdXBlcihjb21waWxlci5tZWFzdXJlcik7CgogIC8vLyBSdW5zIHRoZSBnbG9iYWwgdHlwZS1pbmZlcmVuY2UgYWxnb3JpdGhtIG9uY2UuCiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcnVuR2xvYmFsVHlwZUluZmVyZW5jZShGdW5jdGlvbkVudGl0eSBtYWluRWxlbWVudCwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBJbmZlcnJlZERhdGFCdWlsZGVyIGluZmVycmVkRGF0YUJ1aWxkZXIpIHsKICAgIHJldHVybiBtZWFzdXJlKCgpIHsKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0czsKICAgICAgaWYgKGNvbXBpbGVyLmRpc2FibGVUeXBlSW5mZXJlbmNlKSB7CiAgICAgICAgcmVzdWx0cyA9IG5ldyBUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMoY2xvc2VkV29ybGQpOwogICAgICB9IGVsc2UgewogICAgICAgIHR5cGVzSW5mZXJyZXJJbnRlcm5hbCA/Pz0gY29tcGlsZXIuYmFja2VuZFN0cmF0ZWd5CiAgICAgICAgICAgIC5jcmVhdGVUeXBlc0luZmVycmVyKGNsb3NlZFdvcmxkLCBpbmZlcnJlZERhdGFCdWlsZGVyKTsKICAgICAgICByZXN1bHRzID0gdHlwZXNJbmZlcnJlckludGVybmFsLmFuYWx5emVNYWluKG1haW5FbGVtZW50KTsKICAgICAgfQogICAgICBjbG9zZWRXb3JsZC5ub1N1Y2hNZXRob2REYXRhLmNhdGVnb3JpemVDb21wbGV4SW1wbGVtZW50YXRpb25zKHJlc3VsdHMpOwogICAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgICByZXN1bHRzRm9yVGVzdGluZyA9IHJlc3VsdHM7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9KTsKICB9Cn0KCmNsYXNzIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzSW1wbCBpbXBsZW1lbnRzIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0dsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzXSBvYmplY3RzCiAgLy8vIGluIGEgZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2dsb2JhbC10eXBlLWluZmVyZW5jZS1yZXN1bHRzJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIEBvdmVycmlkZQogIGZpbmFsIEluZmVycmVkRGF0YSBpbmZlcnJlZERhdGE7CiAgZmluYWwgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCBfZGVhZEZpZWxkUmVzdWx0OwogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgX2RlYWRNZXRob2RSZXN1bHQ7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBfdHJpdmlhbFBhcmFtZXRlclJlc3VsdDsKCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdD4gbWVtYmVyUmVzdWx0czsKICBmaW5hbCBNYXA8TG9jYWwsIEFic3RyYWN0VmFsdWU+IHBhcmFtZXRlclJlc3VsdHM7CiAgZmluYWwgU2V0PGlyLlRyZWVOb2RlPiBjaGVja2VkRm9yR3Jvd2FibGVMaXN0czsKICBmaW5hbCBTZXQ8U2VsZWN0b3I+IHJldHVybnNMaXN0RWxlbWVudFR5cGVTZXQ7CiAgZmluYWwgTWFwPGlyLlRyZWVOb2RlLCBBYnN0cmFjdFZhbHVlPiBfYWxsb2NhdGVkTGlzdHM7CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzSW1wbCgKICAgICAgdGhpcy5jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5pbmZlcnJlZERhdGEsCiAgICAgIHRoaXMubWVtYmVyUmVzdWx0cywKICAgICAgdGhpcy5wYXJhbWV0ZXJSZXN1bHRzLAogICAgICB0aGlzLmNoZWNrZWRGb3JHcm93YWJsZUxpc3RzLAogICAgICB0aGlzLnJldHVybnNMaXN0RWxlbWVudFR5cGVTZXQsCiAgICAgIHRoaXMuX2FsbG9jYXRlZExpc3RzKQogICAgICA6IF9kZWFkRmllbGRSZXN1bHQgPSBuZXcgRGVhZEZpZWxkR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdCgKICAgICAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbiksCiAgICAgICAgX2RlYWRNZXRob2RSZXN1bHQgPSBuZXcgRGVhZE1ldGhvZEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHQoCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLAogICAgICAgIF90cml2aWFsUGFyYW1ldGVyUmVzdWx0ID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKCiAgZmFjdG9yeSBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c0ltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwKICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBJbmZlcnJlZERhdGEgaW5mZXJyZWREYXRhKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQ+IG1lbWJlclJlc3VsdHMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICAgICAgICBuZXcgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICAgICAgICBzb3VyY2UsCiAgICAgICAgICAgICAgICBlbGVtZW50TWFwLmdldE1lbWJlckNvbnRleHROb2RlKG1lbWJlciksCiAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICBNYXA8TG9jYWwsIEFic3RyYWN0VmFsdWU+IHBhcmFtZXRlclJlc3VsdHMgPSBzb3VyY2UucmVhZExvY2FsTWFwKCgpID0+CiAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIFNldDxpci5UcmVlTm9kZT4gY2hlY2tlZEZvckdyb3dhYmxlTGlzdHMgPSBzb3VyY2UucmVhZFRyZWVOb2RlcygpLnRvU2V0KCk7CiAgICBTZXQ8U2VsZWN0b3I+IHJldHVybnNMaXN0RWxlbWVudFR5cGVTZXQgPQogICAgICAgIHNvdXJjZS5yZWFkTGlzdCgoKSA9PiBuZXcgU2VsZWN0b3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpLnRvU2V0KCk7CiAgICBNYXA8aXIuVHJlZU5vZGUsIEFic3RyYWN0VmFsdWU+IGFsbG9jYXRlZExpc3RzID0gc291cmNlLnJlYWRUcmVlTm9kZU1hcCgKICAgICAgICAoKSA9PiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgIC5yZWFkQWJzdHJhY3RWYWx1ZUZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c0ltcGwoCiAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgaW5mZXJyZWREYXRhLAogICAgICAgIG1lbWJlclJlc3VsdHMsCiAgICAgICAgcGFyYW1ldGVyUmVzdWx0cywKICAgICAgICBjaGVja2VkRm9yR3Jvd2FibGVMaXN0cywKICAgICAgICByZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0LAogICAgICAgIGFsbG9jYXRlZExpc3RzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHNpbmsud3JpdGVCb29sKGZhbHNlKTsgLy8gSXMgX25vdF8gdHJpdmlhbC4KICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAoCiAgICAgICAgbWVtYmVyUmVzdWx0cywKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCByZXN1bHQpID0+CiAgICAgICAgICAgIHJlc3VsdC53cml0ZVRvRGF0YVNpbmsoCiAgICAgICAgICAgICAgICBzaW5rLAogICAgICAgICAgICAgICAgZWxlbWVudE1hcC5nZXRNZW1iZXJDb250ZXh0Tm9kZShtZW1iZXIpLAogICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgc2luay53cml0ZUxvY2FsTWFwKAogICAgICAgIHBhcmFtZXRlclJlc3VsdHMsCiAgICAgICAgKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgLndyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmsoc2luaywgdmFsdWUpKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZXMoY2hlY2tlZEZvckdyb3dhYmxlTGlzdHMpOwogICAgc2luay53cml0ZUxpc3QocmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldCwKICAgICAgICAoU2VsZWN0b3Igc2VsZWN0b3IpID0+IHNlbGVjdG9yLndyaXRlVG9EYXRhU2luayhzaW5rKSk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVNYXAoCiAgICAgICAgX2FsbG9jYXRlZExpc3RzLAogICAgICAgIChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgIC53cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKHNpbmssIHZhbHVlKSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCByZXN1bHRPZk1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBhc3NlcnQoCiAgICAgICAgbWVtYmVyIGlzISBDb25zdHJ1Y3RvckJvZHlFbnRpdHksCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIG1lbWJlciwKICAgICAgICAgICAgInVuZXhwZWN0ZWQgaW5wdXQ6IENvbnN0cnVjdG9yQm9keUVsZW1lbnRzIGFyZSBjcmVhdGVkIgogICAgICAgICAgICAiIGFmdGVyIGdsb2JhbCB0eXBlIGluZmVyZW5jZSwgbm8gZGF0YSBpcyBhdmFpYWJsZSBmb3IgdGhlbS4iKSk7CiAgICAvLyBUT0RPKHNpZ211bmQsam9obm5pd2ludGhlcik6IE1ha2UgaXQgYW4gZXJyb3IgdG8gcXVlcnkgZm9yIHJlc3VsdHMgdGhhdAogICAgLy8gZG9uJ3QgZXhpc3QuLgogICAgLyphc3NlcnQobWVtYmVyUmVzdWx0cy5jb250YWluc0tleShtZW1iZXIpIHx8IG1lbWJlciBpcyBKU2lnbmF0dXJlTWV0aG9kLAogICAgICAgICJObyBpbmZlcmVuY2UgcmVzdWx0IGZvciBtZW1iZXIgJG1lbWJlciIpOyovCiAgICByZXR1cm4gbWVtYmVyUmVzdWx0c1ttZW1iZXJdID8/CiAgICAgICAgKG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSA/IF9kZWFkTWV0aG9kUmVzdWx0IDogX2RlYWRGaWVsZFJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlc3VsdE9mUGFyYW1ldGVyKExvY2FsIHBhcmFtZXRlcikgewogICAgLy8gVE9ETyhzaWdtdW5kLGpvaG5uaXdpbnRoZXIpOiBNYWtlIGl0IGFuIGVycm9yIHRvIHF1ZXJ5IGZvciByZXN1bHRzIHRoYXQKICAgIC8vIGRvbid0IGV4aXN0LgogICAgLyphc3NlcnQocGFyYW1ldGVyUmVzdWx0cy5jb250YWluc0tleShwYXJhbWV0ZXIpLAogICAgICAgICJObyBpbmZlcmVuY2UgcmVzdWx0IGZvciBwYXJhbWV0ZXIgJHBhcmFtZXRlciIpOyovCiAgICByZXR1cm4gcGFyYW1ldGVyUmVzdWx0c1twYXJhbWV0ZXJdID8/IF90cml2aWFsUGFyYW1ldGVyUmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlT2ZTZWxlY3RvcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpIHsKICAgIC8vIEJhaWxvdXQgZm9yIGNsb3N1cmUgY2FsbHMuIFdlJ3JlIG5vdCB0cmFja2luZyB0eXBlcyBvZgogICAgLy8gY2xvc3VyZXMuCiAgICBpZiAoc2VsZWN0b3IuaXNDbG9zdXJlQ2FsbCkKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIgfHwgc2VsZWN0b3IuaXNJbmRleFNldCkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgIH0KICAgIGlmIChyZXR1cm5zTGlzdEVsZW1lbnRUeXBlKHNlbGVjdG9yLCByZWNlaXZlcikpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyRWxlbWVudFR5cGUocmVjZWl2ZXIpOwogICAgfQogICAgaWYgKHJldHVybnNNYXBWYWx1ZVR5cGUoc2VsZWN0b3IsIHJlY2VpdmVyKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRNYXBWYWx1ZVR5cGUocmVjZWl2ZXIpOwogICAgfQoKICAgIGlmIChjbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCByZWNlaXZlcikpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICB9IGVsc2UgewogICAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGVsZW1lbnRzID0KICAgICAgICAgIGNsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoc2VsZWN0b3IsIHJlY2VpdmVyKTsKICAgICAgTGlzdDxBYnN0cmFjdFZhbHVlPiB0eXBlcyA9IDxBYnN0cmFjdFZhbHVlPltdOwogICAgICBmb3IgKE1lbWJlckVudGl0eSBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0gdHlwZU9mTWVtYmVyV2l0aFNlbGVjdG9yKGVsZW1lbnQsIHNlbGVjdG9yKTsKICAgICAgICB0eXBlcy5hZGQodHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udW5pb25PZk1hbnkodHlwZXMpOwogICAgfQogIH0KCiAgYm9vbCByZXR1cm5zTGlzdEVsZW1lbnRUeXBlKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIHJldHVybiBtYXNrICE9IG51bGwgJiYKICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmlzQ29udGFpbmVyKG1hc2spICYmCiAgICAgICAgcmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldC5jb250YWlucyhzZWxlY3Rvcik7CiAgfQoKICBib29sIHJldHVybnNNYXBWYWx1ZVR5cGUoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgcmV0dXJuIG1hc2sgIT0gbnVsbCAmJgogICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaXNNYXAobWFzaykgJiYKICAgICAgICBzZWxlY3Rvci5pc0luZGV4OwogIH0KCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZNZW1iZXJXaXRoU2VsZWN0b3IoCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LCBTZWxlY3RvciBzZWxlY3RvcikgewogICAgaWYgKGVsZW1lbnQubmFtZSA9PSBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfICYmCiAgICAgICAgc2VsZWN0b3IubmFtZSAhPSBlbGVtZW50Lm5hbWUpIHsKICAgICAgLy8gQW4gaW52b2NhdGlvbiBjYW4gcmVzb2x2ZSB0byBhIFtub1N1Y2hNZXRob2RdLCBpbiB3aGljaCBjYXNlCiAgICAgIC8vIHdlIGdldCB0aGUgcmV0dXJuIHR5cGUgb2YgW25vU3VjaE1ldGhvZF0uCiAgICAgIHJldHVybiByZXN1bHRPZk1lbWJlcihlbGVtZW50KS5yZXR1cm5UeXBlOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0dldHRlcikgewogICAgICBpZiAoZWxlbWVudC5pc0Z1bmN0aW9uKSB7CiAgICAgICAgLy8gW2Z1bmN0aW9uVHlwZV0gaXMgbnVsbCBpZiB0aGUgaW5mZXJyZXIgZGlkIG5vdCBydW4uCiAgICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZnVuY3Rpb25UeXBlOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNGaWVsZCkgewogICAgICAgIHJldHVybiByZXN1bHRPZk1lbWJlcihlbGVtZW50KS50eXBlOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNHZXR0ZXIpIHsKICAgICAgICByZXR1cm4gcmVzdWx0T2ZNZW1iZXIoZWxlbWVudCkucmV0dXJuVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoZmFsc2UsIGZhaWxlZEF0KGVsZW1lbnQsICJVbmV4cGVjdGVkIG1lbWJlciAkZWxlbWVudCIpKTsKICAgICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzR2V0dGVyIHx8IGVsZW1lbnQuaXNGaWVsZCkgewogICAgICBhc3NlcnQoc2VsZWN0b3IuaXNDYWxsIHx8IHNlbGVjdG9yLmlzU2V0dGVyKTsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcmVzdWx0T2ZNZW1iZXIoZWxlbWVudCkucmV0dXJuVHlwZTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgYSBmaXhlZC1sZW5ndGggY29uc3RydWN0b3IgY2FsbCBnb2VzIHRocm91Z2ggYSBncm93YWJsZQogIC8vLyBjaGVjay4KICAvLyBUT0RPKHNpZ211bmQpOiBtb3ZlIGludG8gdGhlIHJlc3VsdCBvZiB0aGUgZWxlbWVudCBjb250YWluaW5nIHN1Y2gKICAvLyBjb25zdHJ1Y3RvciBjYWxsLgogIEBvdmVycmlkZQogIGJvb2wgaXNGaXhlZEFycmF5Q2hlY2tlZEZvckdyb3dhYmxlKGlyLk5vZGUgY3RvckNhbGwpID0+CiAgICAgIGNoZWNrZWRGb3JHcm93YWJsZUxpc3RzLmNvbnRhaW5zKGN0b3JDYWxsKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZOZXdMaXN0KGlyLk5vZGUgbm9kZSkgPT4gX2FsbG9jYXRlZExpc3RzW25vZGVdOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkxpc3RMaXRlcmFsKGlyLk5vZGUgbm9kZSkgPT4gX2FsbG9jYXRlZExpc3RzW25vZGVdOwp9CgpjbGFzcyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0SW1wbAogICAgaW1wbGVtZW50cyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0dsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRdCiAgLy8vIG9iamVjdHMgaW4gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2xvYmFsLXR5cGUtaW5mZXJlbmNlLW1lbWJlci1yZXN1bHQnOwoKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEgX2RhdGE7CiAgQG92ZXJyaWRlCiAgZmluYWwgQWJzdHJhY3RWYWx1ZSByZXR1cm5UeXBlOwogIEBvdmVycmlkZQogIGZpbmFsIEFic3RyYWN0VmFsdWUgdHlwZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIHRocm93c0Fsd2F5czsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQ2FsbGVkT25jZTsKCiAgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdEltcGwodGhpcy5fZGF0YSwgdGhpcy5yZXR1cm5UeXBlLCB0aGlzLnR5cGUsCiAgICAgIHt0aGlzLnRocm93c0Fsd2F5cywgdGhpcy5pc0NhbGxlZE9uY2V9KTsKCiAgZmFjdG9yeSBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0SW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLAogICAgICBpci5NZW1iZXIgY29udGV4dCwKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBkYXRhID0gc291cmNlLnJlYWRWYWx1ZU9yTnVsbCgoKSB7CiAgICAgIHJldHVybiBuZXcgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgIHNvdXJjZSwgY29udGV4dCwgYWJzdHJhY3RWYWx1ZURvbWFpbik7CiAgICB9KTsKICAgIEFic3RyYWN0VmFsdWUgcmV0dXJuVHlwZSA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5yZWFkQWJzdHJhY3RWYWx1ZUZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPQogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4ucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgYm9vbCB0aHJvd3NBbHdheXMgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNDYWxsZWRPbmNlID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRJbXBsKGRhdGEsIHJldHVyblR5cGUsIHR5cGUsCiAgICAgICAgdGhyb3dzQWx3YXlzOiB0aHJvd3NBbHdheXMsIGlzQ2FsbGVkT25jZTogaXNDYWxsZWRPbmNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGlyLk1lbWJlciBjb250ZXh0LAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVWYWx1ZU9yTnVsbChfZGF0YSwgKEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBkYXRhKSB7CiAgICAgIGRhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmssIGNvbnRleHQsIGFic3RyYWN0VmFsdWVEb21haW4pOwogICAgfSk7CiAgICBhYnN0cmFjdFZhbHVlRG9tYWluLndyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmsoc2luaywgcmV0dXJuVHlwZSk7CiAgICBhYnN0cmFjdFZhbHVlRG9tYWluLndyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmsoc2luaywgdHlwZSk7CiAgICBzaW5rLndyaXRlQm9vbCh0aHJvd3NBbHdheXMpOwogICAgc2luay53cml0ZUJvb2woaXNDYWxsZWRPbmNlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZlNlbmQoaXIuTm9kZSBub2RlKSA9PiBfZGF0YT8udHlwZU9mU2VuZChub2RlKTsKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkdldHRlcihpci5Ob2RlIG5vZGUpID0+IF9kYXRhPy50eXBlT2ZHZXR0ZXIobm9kZSk7CiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvcihpci5Ob2RlIG5vZGUpID0+IF9kYXRhPy50eXBlT2ZJdGVyYXRvcihub2RlKTsKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yTW92ZU5leHQoaXIuTm9kZSBub2RlKSA9PgogICAgICBfZGF0YT8udHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChub2RlKTsKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yQ3VycmVudChpci5Ob2RlIG5vZGUpID0+CiAgICAgIF9kYXRhPy50eXBlT2ZJdGVyYXRvckN1cnJlbnQobm9kZSk7Cn0KCmNsYXNzIFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBpbXBsZW1lbnRzIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgZmluYWwgVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgX3RyaXZpYWxNZW1iZXJSZXN1bHQ7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBfdHJpdmlhbFBhcmFtZXRlclJlc3VsdDsKICBAb3ZlcnJpZGUKICBmaW5hbCBJbmZlcnJlZERhdGEgaW5mZXJyZWREYXRhID0gbmV3IFRyaXZpYWxJbmZlcnJlZERhdGEoKTsKCiAgVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKHRoaXMuY2xvc2VkV29ybGQpCiAgICAgIDogX3RyaXZpYWxNZW1iZXJSZXN1bHQgPSBuZXcgVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQoCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpLAogICAgICAgIF90cml2aWFsUGFyYW1ldGVyUmVzdWx0ID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgc2luay53cml0ZUJvb2wodHJ1ZSk7IC8vIElzIHRyaXZpYWwuCiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRml4ZWRBcnJheUNoZWNrZWRGb3JHcm93YWJsZShpci5Ob2RlIG5vZGUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGVPZlNlbGVjdG9yKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZXN1bHRPZlBhcmFtZXRlcihMb2NhbCBwYXJhbWV0ZXIpIHsKICAgIHJldHVybiBfdHJpdmlhbFBhcmFtZXRlclJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgcmVzdWx0T2ZNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF90cml2aWFsTWVtYmVyUmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZMaXN0TGl0ZXJhbChpci5UcmVlTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZk5ld0xpc3QoaXIuVHJlZU5vZGUgbm9kZSkgPT4gbnVsbDsKfQoKY2xhc3MgVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQKICAgIGltcGxlbWVudHMgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBkeW5hbWljVHlwZTsKCiAgVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQodGhpcy5keW5hbWljVHlwZSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHR5cGUgPT4gZHluYW1pY1R5cGU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHJldHVyblR5cGUgPT4gZHluYW1pY1R5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHRocm93c0Fsd2F5cyA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvckN1cnJlbnQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yTW92ZU5leHQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZHZXR0ZXIoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZlNlbmQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NhbGxlZE9uY2UgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGlyLk1lbWJlciBjb250ZXh0LAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdC53cml0ZVRvRGF0YVNpbmsiKTsKICB9Cn0KCmNsYXNzIERlYWRGaWVsZEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHQKICAgIGltcGxlbWVudHMgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBkeW5hbWljVHlwZTsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIGVtcHR5VHlwZTsKCiAgRGVhZEZpZWxkR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikKICAgICAgOiB0aGlzLmR5bmFtaWNUeXBlID0gZG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgIHRoaXMuZW1wdHlUeXBlID0gZG9tYWluLmVtcHR5VHlwZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgdHlwZSA9PiBlbXB0eVR5cGU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHJldHVyblR5cGUgPT4gZHluYW1pY1R5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHRocm93c0Fsd2F5cyA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvckN1cnJlbnQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yTW92ZU5leHQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZHZXR0ZXIoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZlNlbmQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NhbGxlZE9uY2UgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGlyLk1lbWJlciBjb250ZXh0LAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJEZWFkRmllbGRHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0LndyaXRlVG9EYXRhU2luayIpOwogIH0KfQoKY2xhc3MgRGVhZE1ldGhvZEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHQKICAgIGltcGxlbWVudHMgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBlbXB0eVR5cGU7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBmdW5jdGlvblR5cGU7CgogIERlYWRNZXRob2RHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKQogICAgICA6IHRoaXMuZnVuY3Rpb25UeXBlID0gZG9tYWluLmZ1bmN0aW9uVHlwZSwKICAgICAgICB0aGlzLmVtcHR5VHlwZSA9IGRvbWFpbi5lbXB0eVR5cGU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHR5cGUgPT4gZnVuY3Rpb25UeXBlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCByZXR1cm5UeXBlID0+IGVtcHR5VHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdGhyb3dzQWx3YXlzID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yQ3VycmVudChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3IoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkdldHRlcihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mU2VuZChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ2FsbGVkT25jZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgaXIuTWVtYmVyIGNvbnRleHQsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkRlYWRGaWVsZEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHQud3JpdGVUb0RhdGFTaW5rIik7CiAgfQp9CoJ3AE5OPAEPASg9HzEpJCsnRi4yKiUrAUg1BExRTUpLTDkxTVBIPgFDOTABTRoBUCYZAUwZAU8gASknLgFQMjABNDIBSjoBSzkCAVEWMExPSD8BQjkwAU9NIy0BRS4wATIBOgE5AgE7H0ICAT0ETE9RQixIORkhICMoFUEGQjgEAT5CASABIQFHATQBTyFRAU4NOQE4MQExNQIBMDVHDCgBGwFQOSsBMAEtHSIBNVBLGCorRg87REIITiIlCBYIBAIBTU8iPQEMIgwjOjsvAUo0MjE5ASIYGRodJCYcQy5FLk8BPRkhICMXRzZEGDkzSyg3Ty5QTS43FS8VFhcaISMZBAEMQzAVGRdJJBY5MxgaQTkyLkAbGUE5EwQBDEgMKhIURE1PFU41JEsEAQw1TxQ2O0MEAQwmMz4RIDo0OgY2UAYzSAYBPzoNKDk1L0oZCEEGBAFHGz02BAFEGzcaBAEqMTUpRjMxJCA/PSQtJTMPSDwINjQ6DTEGBAFODUgXDDsyAQxGAQxKAgEqMUwqQwEuDCIMHAwbDBsBTi8BQhkZMRdGRDEIH0UZRSsrFUtBBAEMOTEVSUAISEIiIhMEAQxFDEkMTQw4Kww3KgIBUAwiRS8MPwE2SzpPAQxDKQQBDD4BDE44BAEMNSQEAQxIIQQBDD0BDDkCAS0xIwE8AQwpAQwvAQwiAQw9AQw+AQw2AQw0AQwyAQwiAQw5MSBDBAIBKTEjIQFBLysBDCcBDC8BDCIBDD0BDD4BDDYBDDQBDDIBDCIBDDkxID8EAgEqMSEkAUIxKwEMKgEMLQEMIgEMPQEMPgEMNgEMNAEMMgEMIgEMOTEgPwQCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlcy5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0wABAXS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuc291cmNlX2luZm9ybWF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cgSmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbjsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnc291cmNlX2ZpbGUuZGFydCc7CmltcG9ydCAncG9zaXRpb25faW5mb3JtYXRpb24uZGFydCc7CgovLy8gSW50ZXJmYWNlIGZvciBwYXNzaW5nIHNvdXJjZSBpbmZvcm1hdGlvbiwgZm9yIGluc3RhbmNlIGZvciB1c2UgaW4gc291cmNlCi8vLyBtYXBzLCB0aHJvdWdoIHRoZSBiYWNrZW5kLgphYnN0cmFjdCBjbGFzcyBTb3VyY2VJbmZvcm1hdGlvbiBleHRlbmRzIEphdmFTY3JpcHROb2RlU291cmNlSW5mb3JtYXRpb24gewogIGNvbnN0IFNvdXJjZUluZm9ybWF0aW9uKCk7CgogIHN0YXRpYyBTb3VyY2VJbmZvcm1hdGlvbiByZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIGludCBoYXNTb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBpZiAoaGFzU291cmNlSW5mb3JtYXRpb24gPT0gMCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoaGFzU291cmNlSW5mb3JtYXRpb24gPT0gMSkgewogICAgICByZXR1cm4gY29uc3QgU291cmNlTWFwcGVkTWFya2VyKCk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoaGFzU291cmNlSW5mb3JtYXRpb24gPT0gMik7CiAgICAgIHJldHVybiBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogIH0KCiAgc3RhdGljIHZvaWQgd3JpdGVUb0RhdGFTaW5rKAogICAgICBEYXRhU2luayBzaW5rLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uID09IG51bGwpIHsKICAgICAgc2luay53cml0ZUludCgwKTsKICAgIH0gZWxzZSBpZiAoc291cmNlSW5mb3JtYXRpb24gaXMgU291cmNlTWFwcGVkTWFya2VyKSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMSk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlSW50KDIpOwogICAgICBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uIHBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgcG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbi53cml0ZVRvRGF0YVNpbmtJbnRlcm5hbChzaW5rKTsKICAgIH0KICB9CgogIFNvdXJjZVNwYW4gZ2V0IHNvdXJjZVNwYW47CgogIC8vLyBUaGUgc291cmNlIGxvY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIEpTIG5vZGUuCiAgU291cmNlTG9jYXRpb24gZ2V0IHN0YXJ0UG9zaXRpb24gPT4gbnVsbDsKCiAgLy8vIFRoZSBzb3VyY2UgbG9jYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIGlubmVyIG9mIHRoZSBKUyBub2RlLgogIC8vLwogIC8vLyBUaGUgaW5uZXIgcG9zaXRpb24gaXMgZm9yIGluc3RhbmNlIGBmb28oKWAgaW4gYG8uZm9vKClgLgogIFNvdXJjZUxvY2F0aW9uIGdldCBpbm5lclBvc2l0aW9uID0+IG51bGw7CgogIC8vLyBUaGUgc291cmNlIGxvY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW5kIG9mIHRoZSBKUyBub2RlLgogIFNvdXJjZUxvY2F0aW9uIGdldCBlbmRQb3NpdGlvbiA9PiBudWxsOwoKICAvLy8gQSBsaXN0IGNvbnRhaW5pbmcgc3RhcnQsIGlubmVyLCBhbmQgZW5kIHBvc2l0aW9ucy4KICBMaXN0PFNvdXJjZUxvY2F0aW9uPiBnZXQgc291cmNlTG9jYXRpb25zOwoKICAvLy8gQSBsaXN0IG9mIGlubGluaW5nIGNvbnRleHQgbG9jYXRpb25zLgogIExpc3Q8RnJhbWVDb250ZXh0PiBnZXQgaW5saW5pbmdDb250ZXh0ID0+IG51bGw7CgogIC8vLyBSZXR1cm4gYSBzaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzb3VyY2UgbG9jYXRpb24uCiAgU3RyaW5nIGdldCBzaG9ydFRleHQ7Cn0KCi8vLyBDb250ZXh0IGluZm9ybWF0aW9uIGFib3V0IGlubGluZWQgY2FsbHMuCi8vLwovLy8gVGhpcyBpcyBhc3NvY2lhdGVkIHdpdGggU291cmNlSW5mb3JtYXRpb24gb2JqZWN0cyB0byBiZSBhYmxlIHRvIGVtaXQKLy8vIHByZWNpc2UgZGF0YSBhYm91dCBpbmxpbmluZyB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgYnkgZGVmb2J1c2NhdGlvbiB0b29scwovLy8gd2hlbiByZWNvbnN0cnVjdGluZyBhIHNvdXJjZSBzdGFjayBmcm9tIGEgcHJvZHVjdGlvbiBzdGFjayB0cmFjZS4KY2xhc3MgRnJhbWVDb250ZXh0IHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdmcmFtZS1jb250ZXh0JzsKCiAgLy8vIExvY2F0aW9uIG9mIHRoZSBjYWxsIHRoYXQgd2FzIGlubGluZWQuCiAgZmluYWwgU291cmNlSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uOwoKICAvLy8gTmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2FzIGlubGluZWQuCiAgZmluYWwgU3RyaW5nIGlubGluZWRNZXRob2ROYW1lOwoKICBGcmFtZUNvbnRleHQodGhpcy5jYWxsSW5mb3JtYXRpb24sIHRoaXMuaW5saW5lZE1ldGhvZE5hbWUpOwoKICBmYWN0b3J5IEZyYW1lQ29udGV4dC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU291cmNlSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uID0gc291cmNlLnJlYWRDYWNoZWQ8U291cmNlSW5mb3JtYXRpb24+KAogICAgICAgICgpID0+IFNvdXJjZUluZm9ybWF0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIFN0cmluZyBpbmxpbmVkTWV0aG9kTmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEZyYW1lQ29udGV4dChjYWxsSW5mb3JtYXRpb24sIGlubGluZWRNZXRob2ROYW1lKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDYWNoZWQ8U291cmNlSW5mb3JtYXRpb24+KAogICAgICAgIGNhbGxJbmZvcm1hdGlvbiwKICAgICAgICAoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pID0+CiAgICAgICAgICAgIFNvdXJjZUluZm9ybWF0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgc2luay53cml0ZVN0cmluZyhpbmxpbmVkTWV0aG9kTmFtZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIihGcmFtZUNvbnRleHQ6ICRjYWxsSW5mb3JtYXRpb24sICRpbmxpbmVkTWV0aG9kTmFtZSkiOwp9CgovLy8gU3RyYXRlZ3kgZm9yIGNyZWF0aW5nLCBwcm9jZXNzaW5nIGFuZCBhcHBseWluZyBbU291cmNlSW5mb3JtYXRpb25dLgpjbGFzcyBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHsKICBjb25zdCBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KCk7CgogIC8vLyBDcmVhdGUgYSBbU291cmNlSW5mb3JtYXRpb25CdWlsZGVyXSBmb3IgW21lbWJlcl0uCiAgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIGNyZWF0ZUJ1aWxkZXJGb3JDb250ZXh0KAogICAgICBjb3ZhcmlhbnQgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIG5ldyBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIoKTsKICB9CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIG1hcmtlciBmb3Igbm9uLXByZWFtYmxlIGNvZGUuCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRTb3VyY2VNYXBwZWRNYXJrZXIoKSA9PiBudWxsOwoKICAvLy8gQ2FsbGVkIHdoZW4gY29tcGlsYXRpb24gaGFzIGNvbXBsZXRlZC4KICB2b2lkIG9uQ29tcGxldGUoKSB7fQp9CgovLy8gSW50ZXJmYWNlIGZvciBnZW5lcmF0aW5nIFtTb3VyY2VJbmZvcm1hdGlvbl0uCmNsYXNzIFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciB7CiAgY29uc3QgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyKCk7CgogIC8vLyBDcmVhdGUgYSBbU291cmNlSW5mb3JtYXRpb25CdWlsZGVyXSBmb3IgW21lbWJlcl0gd2l0aCBhZGRpdGlvbmFsIGlubGluaW5nCiAgLy8vIFtjb250ZXh0XS4KICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgZm9yQ29udGV4dCgKICAgICAgICAgIGNvdmFyaWFudCBNZW1iZXJFbnRpdHkgbWVtYmVyLCBTb3VyY2VJbmZvcm1hdGlvbiBjb250ZXh0KSA9PgogICAgICB0aGlzOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBbbWVtYmVyXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZERlY2xhcmF0aW9uKGNvdmFyaWFudCBNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHN0dWIgb2YgW2NhbGxTdHJ1Y3R1cmVdIGZvciBbbWVtYmVyXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN0dWIoCiAgICAgICAgICBjb3ZhcmlhbnQgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgPT4KICAgICAgbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBnZW5lcmljIFtub2RlXS4KICBAZGVwcmVjYXRlZAogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkR2VuZXJpYyhpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciBhbiBpbnN0YW50aWF0aW9uIG9mIGEgY2xhc3MgdXNpbmcgW25vZGVdCiAgLy8vIGZvciB0aGUgc291cmNlIHBvc2l0aW9uLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQ3JlYXRlKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSByZXR1cm4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkUmV0dXJuKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGFuIGltcGxpY2l0IHJldHVybiBpbiBbZWxlbWVudF0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRJbXBsaWNpdFJldHVybihjb3ZhcmlhbnQgTWVtYmVyRW50aXR5IGVsZW1lbnQpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgbG9vcCBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRMb29wKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGEgcmVhZCBhY2Nlc3MgbGlrZSBgYS5iYC4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEdldChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciBhIHdyaXRlIGFjY2VzcyBsaWtlIGBhLmIgPSAzYC4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFNldChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciBhIGNhbGwgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQ2FsbChpci5Ob2RlIHJlY2VpdmVyLCBpci5Ob2RlIGNhbGwpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgaWYgc3RhdGVtZW50IGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZElmKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZE5ldyhpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgdGhyb3cgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkVGhyb3coaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGFzc2VydCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3NlcnQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGFzc2lnbm1lbnQgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXNzaWdubWVudChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gaW5zZXJ0ZWQgYXMKICAvLy8gZmlyc3Qgc3RhdGVtZW50IG9mIGEgZnVuY3Rpb24uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRWYXJpYWJsZURlY2xhcmF0aW9uKCkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBhd2FpdCBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBd2FpdChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgeWllbGQgb3IgeWllbGQqIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFlpZWxkKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGFzeW5jL2F3YWl0IGJvaWxlciBwbGF0ZSBjb2RlLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXN5bmNCb2R5KCkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGV4aXRpbmcgYXN5bmMvYXdhaXQgY29kZS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEFzeW5jRXhpdCgpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciBhbiBpbnZvY2F0aW9uIG9mIGEgZm9yZWlnbiBtZXRob2QuCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRGb3JlaWduQ29kZShpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciBhIHN0cmluZyBpbnRlcnBvbGF0aW9uIG9mIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN0cmluZ0ludGVycG9sYXRpb24oaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGZvci1pbiBgaXRlcmF0b3JgIGFjY2VzcyBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRGb3JJbkl0ZXJhdG9yKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBmb3ItaW4gYG1vdmVOZXh0YCBjYWxsIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluTW92ZU5leHQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGZvci1pbiBgY3VycmVudGAgYWNjZXNzIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluQ3VycmVudChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgZm9yLWluIHZhcmlhYmxlIGFzc2lnbm1lbnQgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRm9ySW5TZXQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIG9wZXJhdG9yIGBbXWAgYWNjZXNzIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEluZGV4KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBvcGVyYXRvciBgW109YCBhc3NpZ25tZW50IGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEluZGV4U2V0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBiaW5hcnkgb3BlcmF0aW9uIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEJpbmFyeShpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgdW5hcnkgb3BlcmF0aW9uIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFVuYXJ5KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSB0cnkgc3RhdGVtZW50IGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFRyeShpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgdW5hcnkgb3BlcmF0b3IgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQ2F0Y2goaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGlzLXRlc3QgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSXMoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGFzLWNhc3QgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXMoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU3dpdGNoKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBzd2l0Y2ggY2FzZSBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRTd2l0Y2hDYXNlKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBsaXN0IGxpdGVyYWwgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkTGlzdExpdGVyYWwoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGJyZWFrL2NvbnRpbnVlIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEdvdG8oaXIuTm9kZSBub2RlKSA9PiBudWxsOwp9CgovLy8gQSBsb2NhdGlvbiBpbiBhIHNvdXJjZSBmaWxlLgphYnN0cmFjdCBjbGFzcyBTb3VyY2VMb2NhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc291cmNlLWxvY2F0aW9uJzsKCiAgY29uc3QgU291cmNlTG9jYXRpb24oKTsKCiAgLy8vIFRoZSBhYnNvbHV0ZSBVUkkgb2YgdGhlIHNvdXJjZSBmaWxlIG9mIHRoaXMgc291cmNlIGxvY2F0aW9uLgogIFVyaSBnZXQgc291cmNlVXJpOwoKICAvLy8gVGhlIGNoYXJhY3RlciBvZmZzZXQgb2YgdGhlIHRoaXMgc291cmNlIGxvY2F0aW9uIGludG8gdGhlIHNvdXJjZSBmaWxlLgogIGludCBnZXQgb2Zmc2V0OwoKICAvLy8gVGhlIDEtYmFzZWQgbGluZSBudW1iZXIgb2YgdGhlIFtvZmZzZXRdLgogIGludCBnZXQgbGluZTsKCiAgLy8vIFRoZSAxLWJhc2VkIGNvbHVtbiBudW1iZXIgb2YgdGhlIFtvZmZzZXRdIHdpdGggaXRzIGxpbmUuCiAgaW50IGdldCBjb2x1bW47CgogIC8vLyBUaGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzb3VyY2UgbG9jYXRpb24sIGlmIGFueS4KICBTdHJpbmcgZ2V0IHNvdXJjZU5hbWU7CgogIHN0YXRpYyBTb3VyY2VMb2NhdGlvbiByZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIGludCBoYXNTb3VyY2VMb2NhdGlvbiA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBpZiAoaGFzU291cmNlTG9jYXRpb24gPT0gMCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoaGFzU291cmNlTG9jYXRpb24gPT0gMSkgewogICAgICByZXR1cm4gY29uc3QgTm9Tb3VyY2VMb2NhdGlvbk1hcmtlcigpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGhhc1NvdXJjZUxvY2F0aW9uID09IDIpOwogICAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgICAgVXJpIHNvdXJjZVVyaSA9IHNvdXJjZS5yZWFkVXJpKCk7CiAgICAgIGludCBvZmZzZXQgPSBzb3VyY2UucmVhZEludCgpOwogICAgICBpbnQgbGluZSA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgIGludCBjb2x1bW4gPSBzb3VyY2UucmVhZEludCgpOwogICAgICBTdHJpbmcgc291cmNlTmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgIHNvdXJjZS5lbmQodGFnKTsKICAgICAgcmV0dXJuIG5ldyBEaXJlY3RTb3VyY2VMb2NhdGlvbigKICAgICAgICAgIHNvdXJjZVVyaSwgb2Zmc2V0LCBsaW5lLCBjb2x1bW4sIHNvdXJjZU5hbWUpOwogICAgfQogIH0KCiAgc3RhdGljIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uKSB7CiAgICBpZiAoc291cmNlTG9jYXRpb24gPT0gbnVsbCkgewogICAgICBzaW5rLndyaXRlSW50KDApOwogICAgfSBlbHNlIGlmIChzb3VyY2VMb2NhdGlvbiBpcyBOb1NvdXJjZUxvY2F0aW9uTWFya2VyKSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMSk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlSW50KDIpOwogICAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICAgIHNpbmsud3JpdGVVcmkoc291cmNlTG9jYXRpb24uc291cmNlVXJpKTsKICAgICAgc2luay53cml0ZUludChzb3VyY2VMb2NhdGlvbi5vZmZzZXQpOwogICAgICBzaW5rLndyaXRlSW50KHNvdXJjZUxvY2F0aW9uLmxpbmUpOwogICAgICBzaW5rLndyaXRlSW50KHNvdXJjZUxvY2F0aW9uLmNvbHVtbik7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcoc291cmNlTG9jYXRpb24uc291cmNlTmFtZSk7CiAgICAgIHNpbmsuZW5kKHRhZyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBzb3VyY2VVcmkuaGFzaENvZGUgKiAxNyArCiAgICAgICAgb2Zmc2V0Lmhhc2hDb2RlICogMTkgKwogICAgICAgIHNvdXJjZU5hbWUuaGFzaENvZGUgKiAyMzsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBTb3VyY2VMb2NhdGlvbiAmJgogICAgICAgIHNvdXJjZVVyaSA9PSBvdGhlci5zb3VyY2VVcmkgJiYKICAgICAgICBvZmZzZXQgPT0gb3RoZXIub2Zmc2V0ICYmCiAgICAgICAgc291cmNlTmFtZSA9PSBvdGhlci5zb3VyY2VOYW1lOwogIH0KCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgPT4gJyR7c291cmNlVXJpPy5wYXRoU2VnbWVudHM/Lmxhc3R9OlskbGluZSwkY29sdW1uXSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke3NvdXJjZVVyaX06WyR7bGluZX0sJHtjb2x1bW59XSc7Cn0KCmNsYXNzIERpcmVjdFNvdXJjZUxvY2F0aW9uIGV4dGVuZHMgU291cmNlTG9jYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFVyaSBzb3VyY2VVcmk7CgogIEBvdmVycmlkZQogIGZpbmFsIGludCBvZmZzZXQ7CgogIEBvdmVycmlkZQogIGZpbmFsIGludCBsaW5lOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgY29sdW1uOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgc291cmNlTmFtZTsKCiAgRGlyZWN0U291cmNlTG9jYXRpb24oCiAgICAgIHRoaXMuc291cmNlVXJpLCB0aGlzLm9mZnNldCwgdGhpcy5saW5lLCB0aGlzLmNvbHVtbiwgdGhpcy5zb3VyY2VOYW1lKTsKfQoKLy8vIEEgbG9jYXRpb24gaW4gYSBzb3VyY2UgZmlsZS4KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTb3VyY2VMb2NhdGlvbiBleHRlbmRzIFNvdXJjZUxvY2F0aW9uIHsKICBmaW5hbCBTb3VyY2VGaWxlIF9zb3VyY2VGaWxlOwogIGlyLkxvY2F0aW9uIF9sb2NhdGlvbjsKCiAgQWJzdHJhY3RTb3VyY2VMb2NhdGlvbih0aGlzLl9zb3VyY2VGaWxlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgb2Zmc2V0IDwgX3NvdXJjZUZpbGUubGVuZ3RoLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBuZXcgU291cmNlU3Bhbihzb3VyY2VVcmksIDAsIDApLAogICAgICAgICAgICAiSW52YWxpZCBzb3VyY2UgbG9jYXRpb24gaW4gJHtzb3VyY2VVcml9OiAiCiAgICAgICAgICAgICJvZmZzZXQ9JG9mZnNldCwgbGVuZ3RoPSR7X3NvdXJjZUZpbGUubGVuZ3RofS4iKSk7CiAgfQoKICBBYnN0cmFjdFNvdXJjZUxvY2F0aW9uLmZyb21Mb2NhdGlvbih0aGlzLl9sb2NhdGlvbikgOiBfc291cmNlRmlsZSA9IG51bGw7CgogIEFic3RyYWN0U291cmNlTG9jYXRpb24uZnJvbU90aGVyKEFic3RyYWN0U291cmNlTG9jYXRpb24gbG9jYXRpb24pCiAgICAgIDogdGhpcy5mcm9tTG9jYXRpb24obG9jYXRpb24uX2xvY2F0aW9uKTsKCiAgQG92ZXJyaWRlCiAgVXJpIGdldCBzb3VyY2VVcmkgPT4gX3NvdXJjZUZpbGUudXJpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IG9mZnNldDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsaW5lID0+IChfbG9jYXRpb24gPz89IF9zb3VyY2VGaWxlLmdldExvY2F0aW9uKG9mZnNldCkpLmxpbmU7CgogIEBvdmVycmlkZQogIGludCBnZXQgY29sdW1uID0+IChfbG9jYXRpb24gPz89IF9zb3VyY2VGaWxlLmdldExvY2F0aW9uKG9mZnNldCkpLmNvbHVtbjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzb3VyY2VOYW1lOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHNob3J0VGV4dCA9PiAnJHtzb3VyY2VVcmkucGF0aFNlZ21lbnRzLmxhc3R9OlskbGluZSwkY29sdW1uXSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke3NvdXJjZVVyaX06WyRsaW5lLCRjb2x1bW5dJzsKfQoKY2xhc3MgT2Zmc2V0U291cmNlTG9jYXRpb24gZXh0ZW5kcyBBYnN0cmFjdFNvdXJjZUxvY2F0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgb2Zmc2V0OwogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBzb3VyY2VOYW1lOwoKICBPZmZzZXRTb3VyY2VMb2NhdGlvbihTb3VyY2VGaWxlIHNvdXJjZUZpbGUsIHRoaXMub2Zmc2V0LCB0aGlzLnNvdXJjZU5hbWUpCiAgICAgIDogc3VwZXIoc291cmNlRmlsZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc2hvcnRUZXh0ID0+ICcke3N1cGVyLnNob3J0VGV4dH06JHNvdXJjZU5hbWUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtzdXBlci50b1N0cmluZygpfTokc291cmNlTmFtZSc7Cn0KCi8vLyBDb21wdXRlIHRoZSBzb3VyY2UgbWFwIG5hbWUgZm9yIFtlbGVtZW50XS4gSWYgW2NhbGxTdHJ1Y3R1cmVdIGlzIG5vbi1udWxsCi8vLyBpdCBpcyB1c2VkIHRvIG5hbWUgdGhlIHBhcmFtZXRlciBzdHViIGZvciBbZWxlbWVudF0uCi8vIFRPRE8oam9obm5pd2ludGhlcik6IE1lcmdlIHRoaXMgd2l0aCBgY29tcHV0ZUtlcm5lbEVsZW1lbnROYW1lRm9yU291cmNlTWFwc2AKLy8gd2hlbiB0aGUgb2xkIGZyb250ZW5kIGlzIHJlbW92ZWQuClN0cmluZyBjb21wdXRlRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKEVudGl0eSBlbGVtZW50LAogICAgW0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZV0pIHsKICBpZiAoZWxlbWVudCBpcyBDbGFzc0VudGl0eSkgewogICAgcmV0dXJuIGVsZW1lbnQubmFtZTsKICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgTWVtYmVyRW50aXR5KSB7CiAgICBTdHJpbmcgc3VmZml4ID0gY29tcHV0ZVN0dWJTdWZmaXgoY2FsbFN0cnVjdHVyZSk7CiAgICBpZiAoZWxlbWVudCBpcyBDb25zdHJ1Y3RvckVudGl0eSB8fCBlbGVtZW50IGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSkgewogICAgICBTdHJpbmcgY2xhc3NOYW1lID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lOwogICAgICBpZiAoZWxlbWVudC5uYW1lID09ICcnKSB7CiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKICAgICAgfQogICAgICByZXR1cm4gJyRjbGFzc05hbWUuJHtlbGVtZW50Lm5hbWV9JHN1ZmZpeCc7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBpZiAoZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5pc0Nsb3N1cmUpIHsKICAgICAgICByZXR1cm4gY29tcHV0ZUVsZW1lbnROYW1lRm9yU291cmNlTWFwcygKICAgICAgICAgICAgZWxlbWVudC5lbmNsb3NpbmdDbGFzcywgY2FsbFN0cnVjdHVyZSk7CiAgICAgIH0KICAgICAgcmV0dXJuICcke2VsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZX0uJHtlbGVtZW50Lm5hbWV9JHN1ZmZpeCc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJyR7ZWxlbWVudC5uYW1lfSRzdWZmaXgnOwogICAgfQogIH0KICAvLyBUT0RPKHJlZGVtcHRpb24pOiBDcmVhdGUgZWxlbWVudCBuYW1lcyBmcm9tIGtlcm5lbCBsb2NhbHMgYW5kIGNsb3N1cmVzLgogIHJldHVybiBlbGVtZW50Lm5hbWU7Cn0KCi8vLyBDb21wdXRlIHRoZSBzdWZmaXggdXNlZCBmb3IgYSBwYXJhbWV0ZXIgc3R1YiBmb3IgW2NhbGxTdHJ1Y3R1cmVdLgpTdHJpbmcgY29tcHV0ZVN0dWJTdWZmaXgoQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgaWYgKGNhbGxTdHJ1Y3R1cmUgPT0gbnVsbCkgcmV0dXJuICcnOwogIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBzYi53cml0ZShyJ1tmdW5jdGlvbi1lbnRyeSQnKTsKICBzYi53cml0ZShjYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50KTsKICBpZiAoY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICBzYi53cml0ZShyJyQnKTsKICAgIHNiLndyaXRlKGNhbGxTdHJ1Y3R1cmUuZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCkuam9pbihyJyQnKSk7CiAgfQogIHNiLndyaXRlKCddJyk7CiAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Cn0KCmNsYXNzIE5vU291cmNlTG9jYXRpb25NYXJrZXIgZXh0ZW5kcyBTb3VyY2VMb2NhdGlvbiB7CiAgY29uc3QgTm9Tb3VyY2VMb2NhdGlvbk1hcmtlcigpOwoKICBAb3ZlcnJpZGUKICBVcmkgZ2V0IHNvdXJjZVVyaSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHNvdXJjZU5hbWUgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjb2x1bW4gPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsaW5lID0+IG51bGw7CgogIEBvdmVycmlkZQogIGludCBnZXQgb2Zmc2V0ID0+IG51bGw7CgogIFN0cmluZyBnZXQgc2hvcnROYW1lID0+ICc8bm8tbG9jYXRpb24+JzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJzxuby1sb2NhdGlvbj4nOwp9CgovLy8gSW5mb3JtYXRpb24gdHJhY2tlZCBhYm91dCBpbmxpbmVkIGZyYW1lcy4KLy8vCi8vLyBEYXJ0MmpzIGFkZHMgYW4gZXh0ZW5zaW9uIHRvIHNvdXJjZS1tYXAgZmlsZXMgdG8gdHJhY2sgd2hlcmUgY2FsbHMgYXJlCi8vLyBpbmxpbmVkLiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gaW1wcm92ZSB0aGUgcHJlY2lzaW9uIG9mIHRvb2xzIHRoYXQKLy8vIGRlb2JmdXNjYXRlIHByb2R1Y3Rpb24gc3RhY2sgdHJhY2VzLgpjbGFzcyBGcmFtZUVudHJ5IHsKICAvLy8gRm9yIHB1c2ggb3BlcmF0aW9ucywgdGhlIGxvY2F0aW9uIG9mIHRoZSBpbmxpbmluZyBjYWxsLCBvdGhlcndpc2UgbnVsbC4KICBmaW5hbCBTb3VyY2VMb2NhdGlvbiBwdXNoTG9jYXRpb247CgogIC8vLyBGb3IgcHVzaCBvcGVyYXRpb25zLCB0aGUgaW5saW5lZCBtZXRob2QgbmFtZSwgb3RoZXJ3aXNlIG51bGwuCiAgZmluYWwgU3RyaW5nIGlubGluZWRNZXRob2ROYW1lOwoKICAvLy8gV2hldGhlciBhIHBvcCBpcyB0aGUgbGFzdCBwb3AgdGhhdCBtYWtlcyB0aGUgaW5saW5pbmcgc3RhY2sgZW1wdHkuCiAgZmluYWwgYm9vbCBpc0VtcHR5UG9wOwoKICBGcmFtZUVudHJ5LnB1c2godGhpcy5wdXNoTG9jYXRpb24sIHRoaXMuaW5saW5lZE1ldGhvZE5hbWUpCiAgICAgIDogaXNFbXB0eVBvcCA9IGZhbHNlOwoKICBGcmFtZUVudHJ5LnBvcCh0aGlzLmlzRW1wdHlQb3ApCiAgICAgIDogcHVzaExvY2F0aW9uID0gbnVsbCwKICAgICAgICBpbmxpbmVkTWV0aG9kTmFtZSA9IG51bGw7CgogIGJvb2wgZ2V0IGlzUHVzaCA9PiBwdXNoTG9jYXRpb24gIT0gbnVsbDsKICBib29sIGdldCBpc1BvcCA9PiBwdXNoTG9jYXRpb24gPT0gbnVsbDsKfQqB+gBOTjwBJAEoGSQ9LiobJAFNH0sdAUMxJRMsKQ0pQwYEAR88JRg6GA0YTz8GBAEdAUQsAUMGPywBQioBOSwBLDIBRBgCAS0ESU1GFS0BLSsBKyIBPgE/F049NBVBBAEoFSkZMUkpEwQBDE8CAUgiJQE4NCcrBAFBNwEtFwIBMiEkAVARJ0cMAUhNAVEfTQwBOw44AVAfNwE6NwFIUQE4NQFBNAFGNAE5RwFDMwFNNAE8NgE9NwFBOwFMJTgBOTYBQzYBRi4BQS4BSjwBSUQBTz4BTT4BTj0BUTkBSzYBUDkBRzcBRjYBRDQBRTYBPjMBPjMBRDcBQjsBQzwBRTUCASEgLwEaAUMVAU0SAS8QAT8SAT0ZAUAuIhMpLQ0mGSglIyUvFyc4BgQBTiIYOxgNGBcvLCosMxUGBAEMFSUfIgQBDBwtJigiKAQBTgEMOwIBNAwXAQwUAQwSAQwUAQwbARhNAgEhPyAZAS0MJRItOD8EAUwBRC8BDCgBDBIBDEgBDEwBDBkBDEwBDDcCATwMFAwbAUwbAQw8AQw6AgFOOVAlNyUgGSg2TDYgGggyMS4wNAhGDScGBE0XAgFGOCgoITMxFEMEERgCATYiAQwdAQwhAQwaAQwYAQwaASsBDCgCAS4ES00pE04lAUQiAUkZAT0cASIdIgErKgIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0NXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0qcsvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19iYWNrZW5kLmJhY2tlbmQ7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnIHNob3cgRGVmZXJyZWRMb2FkVGFzazsKaW1wb3J0ICcuLi9kdW1wX2luZm8uZGFydCcgc2hvdyBEdW1wSW5mb1Rhc2s7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZW5xdWV1ZS5kYXJ0JyBzaG93IFJlc29sdXRpb25FbnF1ZXVlcjsKaW1wb3J0ICcuLi9mcm9udGVuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi90cmFjZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFN0cmF0ZWd5LCBJbXBhY3RVc2VDYXNlLCBXb3JsZEltcGFjdCwgV29ybGRJbXBhY3RWaXNpdG9yOwppbXBvcnQgJ2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJ2NoZWNrZWRfbW9kZV9oZWxwZXJzLmRhcnQnOwppbXBvcnQgJ25hbWVyLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXMuZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgRnVuY3Rpb25Db21waWxlciB7CiAgdm9pZCBpbml0aWFsaXplKAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4pOwoKICAvLy8gR2VuZXJhdGVzIEphdmFTY3JpcHQgY29kZSBmb3IgW21lbWJlcl0uCiAgQ29kZWdlblJlc3VsdCBjb21waWxlKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBJdGVyYWJsZSBnZXQgdGFza3M7Cn0KCi8qCiAqIEludmFyaWFudHM6CiAqICAgY2FuSW5saW5lKGZ1bmN0aW9uKSBpbXBsaWVzIGNhbklubGluZShmdW5jdGlvbiwgaW5zaWRlTG9vcDp0cnVlKQogKiAgICFjYW5JbmxpbmUoZnVuY3Rpb24sIGluc2lkZUxvb3A6IHRydWUpIGltcGxpZXMgIWNhbklubGluZShmdW5jdGlvbikKICovCmNsYXNzIEZ1bmN0aW9uSW5saW5lQ2FjaGUgewogIHN0YXRpYyBjb25zdCBpbnQgX3Vua25vd24gPSAtMTsKICBzdGF0aWMgY29uc3QgaW50IF9tdXN0Tm90SW5saW5lID0gMDsKICAvLyBNYXktaW5saW5lLWluLWxvb3AgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IG5vdCBiZSBpbmxpbmVkIG91dHNpZGUgbG9vcHMKICAvLyBidXQgbWF5IGJlIGlubGluZWQgaW4gYSBsb29wLgogIHN0YXRpYyBjb25zdCBpbnQgX21heUlubGluZUluTG9vcE11c3ROb3RPdXRzaWRlID0gMTsKICAvLyBUaGUgZnVuY3Rpb24gY2FuIGJlIGlubGluZWQgaW4gYSBsb29wLCBidXQgbm90IG91dHNpZGUuCiAgc3RhdGljIGNvbnN0IGludCBfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGUgPSAyOwogIC8vIE1heS1pbmxpbmUgbWVhbnMgdGhhdCB3ZSBrbm93IHRoYXQgaXQgY2FuIGJlIGlubGluZWQgaW5zaWRlIGEgbG9vcCwgYnV0CiAgLy8gZG9uJ3Qga25vdyBhYm91dCB0aGUgZ2VuZXJhbCBjYXNlIHlldC4KICBzdGF0aWMgY29uc3QgaW50IF9jYW5JbmxpbmVJbkxvb3BNYXlJbmxpbmVPdXRzaWRlID0gMzsKICBzdGF0aWMgY29uc3QgaW50IF9jYW5JbmxpbmUgPSA0OwoKICBmaW5hbCBNYXA8RnVuY3Rpb25FbnRpdHksIGludD4gX2NhY2hlZERlY2lzaW9ucyA9CiAgICAgIG5ldyBNYXA8RnVuY3Rpb25FbnRpdHksIGludD4oKTsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfbm9JbmxpbmVGdW5jdGlvbnMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX3RyeUlubGluZUZ1bmN0aW9ucyA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIEZ1bmN0aW9uSW5saW5lQ2FjaGUoQW5ub3RhdGlvbnNEYXRhIGFubm90YXRpb25zRGF0YSkgewogICAgYW5ub3RhdGlvbnNEYXRhLmZvckVhY2hOb0lubGluZSgoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgICAgbWFya0FzTm9JbmxpbmUoZnVuY3Rpb24pOwogICAgfSk7CiAgICBhbm5vdGF0aW9uc0RhdGEuZm9yRWFjaFRyeUlubGluZSgoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgICAgbWFya0FzVHJ5SW5saW5lKGZ1bmN0aW9uKTsKICAgIH0pOwogIH0KCiAgLy8vIENoZWNrcyB0aGF0IFttZXRob2RdIGlzIHRoZSBjYW5vbmljYWwgcmVwcmVzZW50YXRpdmUgZm9yIHRoaXMgbWV0aG9kLgogIC8vLwogIC8vLyBGb3IgYSBbTWV0aG9kRWxlbWVudF0gdGhpcyBtZWFucyBpdCBtdXN0IGJlIHRoZSBkZWNsYXJhdGlvbiBlbGVtZW50LgogIGJvb2wgY2hlY2tGdW5jdGlvbihGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIHJldHVybiAnJG1ldGhvZCcuc3RhcnRzV2l0aChqc0VsZW1lbnRQcmVmaXgpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGN1cnJlbnQgY2FjaGUgZGVjaXNpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZy4KICBpbnQgZ2V0Q3VycmVudENhY2hlRGVjaXNpb25Gb3JUZXN0aW5nKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChjaGVja0Z1bmN0aW9uKGVsZW1lbnQpLCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICByZXR1cm4gX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XTsKICB9CgogIC8vIFJldHVybnMgYHRydWVgL2BmYWxzZWAgaWYgd2UgaGF2ZSBhIGNhY2hlZCBkZWNpc2lvbi4KICAvLyBSZXR1cm5zIGBudWxsYCBvdGhlcndpc2UuCiAgYm9vbCBjYW5JbmxpbmUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwge2Jvb2wgaW5zaWRlTG9vcH0pIHsKICAgIGFzc2VydChjaGVja0Z1bmN0aW9uKGVsZW1lbnQpLCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICBpbnQgZGVjaXNpb24gPSBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdOwoKICAgIGlmIChkZWNpc2lvbiA9PSBudWxsKSB7CiAgICAgIC8vIFRPRE8oc3JhKTogSGF2ZSBhbm5vdGF0aW9ucyBmb3IgbXVzdElubGluZSAvIG5vSW5saW5lIGZvciBjb25zdHJ1Y3RvcgogICAgICAvLyBib2RpZXMuIChUaGVyZSB1c2VkIHRvIGJlIHNvbWUgbG9naWMgaGVyZSB0byBoYXZlIGNvbnN0cnVjdG9yIGJvZGllcywKICAgICAgLy8gaW5oZXJpdCB0aGUgc2V0dGluZ3MgZnJvbSBhbm5vdGF0aW9ucyBvbiB0aGUgZ2VuZXJhdGl2ZQogICAgICAvLyBjb25zdHJ1Y3Rvci4gVGhpcyB3YXMgY29uZmxhdGVkIHdpdGggdGhlIGhldXJpc3RpYyBkZWNpc2lvbnMsIGxlYWRpbmcKICAgICAgLy8gdG8gbGFjayBvZiBpbmxpbmluZyB3aGVyZSBpdCB3YXMgYmVuZWZpY2lhbC4pCiAgICAgIGRlY2lzaW9uID0gX3Vua25vd247CiAgICB9CgogICAgaWYgKGluc2lkZUxvb3ApIHsKICAgICAgc3dpdGNoIChkZWNpc2lvbikgewogICAgICAgIGNhc2UgX211c3ROb3RJbmxpbmU6CiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGNhc2UgX3Vua25vd246CiAgICAgICAgY2FzZSBfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgICAvLyBXZSBrbm93IHdlIGNhbid0IGlubGluZSBvdXRzaWRlIGEgbG9vcCwgYnV0IGRvbid0IGtub3cgZm9yIHRoZQogICAgICAgICAgLy8gbG9vcCBjYXNlLiBSZXR1cm4gYG51bGxgIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qga25vdyB5ZXQuCiAgICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZToKICAgICAgICBjYXNlIF9jYW5JbmxpbmU6CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc3dpdGNoIChkZWNpc2lvbikgewogICAgICAgIGNhc2UgX211c3ROb3RJbmxpbmU6CiAgICAgICAgY2FzZSBfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGNhc2UgX3Vua25vd246CiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZToKICAgICAgICAgIC8vIFdlIGtub3cgd2UgY2FuIGlubGluZSBpbnNpZGUgYSBsb29wLCBidXQgZG9uJ3Qga25vdyBmb3IgdGhlCiAgICAgICAgICAvLyBub24tbG9vcCBjYXNlLiBSZXR1cm4gYG51bGxgIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qga25vdyB5ZXQuCiAgICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgICAgY2FzZSBfY2FuSW5saW5lOgogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBRdWlldCBzdGF0aWMgY2hlY2tlci4KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBtYXJrQXNJbmxpbmFibGUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwge2Jvb2wgaW5zaWRlTG9vcH0pIHsKICAgIGFzc2VydChjaGVja0Z1bmN0aW9uKGVsZW1lbnQpLCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICBpbnQgb2xkRGVjaXNpb24gPSBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdOwoKICAgIGlmIChvbGREZWNpc2lvbiA9PSBudWxsKSB7CiAgICAgIG9sZERlY2lzaW9uID0gX3Vua25vd247CiAgICB9CgogICAgaWYgKGluc2lkZUxvb3ApIHsKICAgICAgc3dpdGNoIChvbGREZWNpc2lvbikgewogICAgICAgIGNhc2UgX211c3ROb3RJbmxpbmU6CiAgICAgICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAgICJDYW4ndCBtYXJrICRlbGVtZW50IGFzIG5vbi1pbmxpbmFibGUgYW5kIGlubGluYWJsZSBhdCB0aGUgIgogICAgICAgICAgICAgICJzYW1lIHRpbWUuIik7CgogICAgICAgIGNhc2UgX3Vua25vd246CiAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgaXQgY2FuIGJlIGlubGluZWQgaW4gYSBsb29wLCBidXQgZG9uJ3Qga25vdyBhYm91dCB0aGUKICAgICAgICAgIC8vIG5vbi1sb29wIGNhc2UgeWV0LgogICAgICAgICAgX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XSA9IF9jYW5JbmxpbmVJbkxvb3BNYXlJbmxpbmVPdXRzaWRlOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX21heUlubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgICAgX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XSA9IF9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNYXlJbmxpbmVPdXRzaWRlOgogICAgICAgIGNhc2UgX2NhbklubGluZToKICAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc3dpdGNoIChvbGREZWNpc2lvbikgewogICAgICAgIGNhc2UgX211c3ROb3RJbmxpbmU6CiAgICAgICAgY2FzZSBfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAgICJDYW4ndCBtYXJrICRlbGVtZW50IGFzIG5vbi1pbmxpbmFibGUgYW5kIGlubGluYWJsZSBhdCB0aGUgIgogICAgICAgICAgICAgICJzYW1lIHRpbWUuIik7CgogICAgICAgIGNhc2UgX3Vua25vd246CiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZToKICAgICAgICAgIF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF0gPSBfY2FuSW5saW5lOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX2NhbklubGluZToKICAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBtYXJrQXNOb25JbmxpbmFibGUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwge2Jvb2wgaW5zaWRlTG9vcDogdHJ1ZX0pIHsKICAgIGFzc2VydChjaGVja0Z1bmN0aW9uKGVsZW1lbnQpLCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICBpbnQgb2xkRGVjaXNpb24gPSBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdOwoKICAgIGlmIChvbGREZWNpc2lvbiA9PSBudWxsKSB7CiAgICAgIG9sZERlY2lzaW9uID0gX3Vua25vd247CiAgICB9CgogICAgaWYgKGluc2lkZUxvb3ApIHsKICAgICAgc3dpdGNoIChvbGREZWNpc2lvbikgewogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE1heUlubGluZU91dHNpZGU6CiAgICAgICAgY2FzZSBfY2FuSW5saW5lOgogICAgICAgICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgICAiQ2FuJ3QgbWFyayAkZWxlbWVudCBhcyBub24taW5saW5hYmxlIGFuZCBpbmxpbmFibGUgYXQgdGhlICIKICAgICAgICAgICAgICAic2FtZSB0aW1lLiIpOwoKICAgICAgICBjYXNlIF9tYXlJbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICBjYXNlIF91bmtub3duOgogICAgICAgICAgX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XSA9IF9tdXN0Tm90SW5saW5lOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX211c3ROb3RJbmxpbmU6CiAgICAgICAgICAvLyBEbyBub3RoaW5nLgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHN3aXRjaCAob2xkRGVjaXNpb24pIHsKICAgICAgICBjYXNlIF9jYW5JbmxpbmU6CiAgICAgICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAgICJDYW4ndCBtYXJrICRlbGVtZW50IGFzIG5vbi1pbmxpbmFibGUgYW5kIGlubGluYWJsZSBhdCB0aGUgIgogICAgICAgICAgICAgICJzYW1lIHRpbWUuIik7CgogICAgICAgIGNhc2UgX3Vua25vd246CiAgICAgICAgICAvLyBXZSBjYW4ndCBpbmxpbmUgb3V0c2lkZSBhIGxvb3AsIGJ1dCB3ZSBtaWdodCBzdGlsbCBiZSBhbGxvd2VkIHRvIGRvCiAgICAgICAgICAvLyBzbyBvdXRzaWRlLgogICAgICAgICAgX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XSA9IF9tYXlJbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNYXlJbmxpbmVPdXRzaWRlOgogICAgICAgICAgLy8gV2UgYWxyZWFkeSBrbmV3IHRoYXQgdGhlIGZ1bmN0aW9uIGNvdWxkIGJlIGlubGluZWQgaW5zaWRlIGEgbG9vcCwKICAgICAgICAgIC8vIGJ1dCBkaWRuJ3QgaGF2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9uLWxvb3AgY2FzZS4gTm93IHdlIGtub3cKICAgICAgICAgIC8vIHRoYXQgaXQgY2FuJ3QgYmUgaW5saW5lZCBvdXRzaWRlIGEgbG9vcC4KICAgICAgICAgIF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF0gPSBfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgY2FzZSBfbXVzdE5vdElubGluZToKICAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBtYXJrQXNOb0lubGluZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoY2hlY2tGdW5jdGlvbihlbGVtZW50KSwgZmFpbGVkQXQoZWxlbWVudCkpOwogICAgX25vSW5saW5lRnVuY3Rpb25zLmFkZChlbGVtZW50KTsKICB9CgogIGJvb2wgbWFya2VkQXNOb0lubGluZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoY2hlY2tGdW5jdGlvbihlbGVtZW50KSwgZmFpbGVkQXQoZWxlbWVudCkpOwogICAgcmV0dXJuIF9ub0lubGluZUZ1bmN0aW9ucy5jb250YWlucyhlbGVtZW50KTsKICB9CgogIHZvaWQgbWFya0FzVHJ5SW5saW5lKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChjaGVja0Z1bmN0aW9uKGVsZW1lbnQpLCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICBfdHJ5SW5saW5lRnVuY3Rpb25zLmFkZChlbGVtZW50KTsKICB9CgogIGJvb2wgbWFya2VkQXNUcnlJbmxpbmUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGNoZWNrRnVuY3Rpb24oZWxlbWVudCksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIHJldHVybiBfdHJ5SW5saW5lRnVuY3Rpb25zLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KfQoKY2xhc3MgSmF2YVNjcmlwdEltcGFjdFN0cmF0ZWd5IGV4dGVuZHMgSW1wYWN0U3RyYXRlZ3kgewogIGZpbmFsIEltcGFjdENhY2hlRGVsZXRlciBpbXBhY3RDYWNoZURlbGV0ZXI7CiAgZmluYWwgRHVtcEluZm9UYXNrIGR1bXBJbmZvVGFzazsKICBmaW5hbCBib29sIHN1cHBvcnREZWZlcnJlZExvYWQ7CiAgZmluYWwgYm9vbCBzdXBwb3J0RHVtcEluZm87CgogIEphdmFTY3JpcHRJbXBhY3RTdHJhdGVneSh0aGlzLmltcGFjdENhY2hlRGVsZXRlciwgdGhpcy5kdW1wSW5mb1Rhc2ssCiAgICAgIHt0aGlzLnN1cHBvcnREZWZlcnJlZExvYWQsIHRoaXMuc3VwcG9ydER1bXBJbmZvfSk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbXBhY3QodmFyIGltcGFjdFNvdXJjZSwgV29ybGRJbXBhY3QgaW1wYWN0LAogICAgICBXb3JsZEltcGFjdFZpc2l0b3IgdmlzaXRvciwgSW1wYWN0VXNlQ2FzZSBpbXBhY3RVc2UpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENvbXB1dGUgdGhlIGFwcGxpY2F0aW9uIHN0cmF0ZWd5IG9uY2UgZm9yIGVhY2ggdXNlLgogICAgaWYgKGltcGFjdFVzZSA9PSBSZXNvbHV0aW9uRW5xdWV1ZXIuSU1QQUNUX1VTRSkgewogICAgICBpZiAoc3VwcG9ydERlZmVycmVkTG9hZCkgewogICAgICAgIGltcGFjdC5hcHBseSh2aXNpdG9yKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbXBhY3QuYXBwbHkodmlzaXRvcik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaW1wYWN0VXNlID09IERlZmVycmVkTG9hZFRhc2suSU1QQUNUX1VTRSkgewogICAgICBpbXBhY3QuYXBwbHkodmlzaXRvcik7CiAgICAgIC8vIEltcGFjdHMgYXJlIHVuY2FjaGVkIGdsb2JhbGx5IGluIFtvbkltcGFjdFVzZWRdLgogICAgfSBlbHNlIGlmIChpbXBhY3RVc2UgPT0gRHVtcEluZm9UYXNrLklNUEFDVF9VU0UpIHsKICAgICAgaW1wYWN0LmFwcGx5KHZpc2l0b3IpOwogICAgICBkdW1wSW5mb1Rhc2sudW5yZWdpc3RlckltcGFjdChpbXBhY3RTb3VyY2UpOwogICAgfSBlbHNlIHsKICAgICAgaW1wYWN0LmFwcGx5KHZpc2l0b3IpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvbkltcGFjdFVzZWQoSW1wYWN0VXNlQ2FzZSBpbXBhY3RVc2UpIHsKICAgIGlmIChpbXBhY3RVc2UgPT0gRGVmZXJyZWRMb2FkVGFzay5JTVBBQ1RfVVNFKSB7CiAgICAgIGltcGFjdENhY2hlRGVsZXRlci5lbXB0eUNhY2hlKCk7CiAgICB9CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciByZXNvdXJjZXMgb25seSB1c2VkIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uCmFic3RyYWN0IGNsYXNzIENvZGVnZW5JbnB1dHMgewogIENoZWNrZWRNb2RlSGVscGVycyBnZXQgY2hlY2tlZE1vZGVIZWxwZXJzOwogIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgZ2V0IHJ0aVN1YnN0aXR1dGlvbnM7CiAgUnVudGltZVR5cGVzRW5jb2RlciBnZXQgcnRpRW5jb2RlcjsKICBSZWNpcGVFbmNvZGVyIGdldCBydGlSZWNpcGVFbmNvZGVyOwogIFRyYWNlciBnZXQgdHJhY2VyOwogIFJ1bnRpbWVUeXBlVGFncyBnZXQgcnRpVGFnczsKICBGaXhlZE5hbWVzIGdldCBmaXhlZE5hbWVzOwp9CgpjbGFzcyBDb2RlZ2VuSW5wdXRzSW1wbCBpbXBsZW1lbnRzIENvZGVnZW5JbnB1dHMgewogIEBvdmVycmlkZQogIGZpbmFsIENoZWNrZWRNb2RlSGVscGVycyBjaGVja2VkTW9kZUhlbHBlcnMgPSBuZXcgQ2hlY2tlZE1vZGVIZWxwZXJzKCk7CgogIEBvdmVycmlkZQogIGZpbmFsIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgcnRpU3Vic3RpdHV0aW9uczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgUnVudGltZVR5cGVzRW5jb2RlciBydGlFbmNvZGVyOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBSZWNpcGVFbmNvZGVyIHJ0aVJlY2lwZUVuY29kZXI7CgogIEBvdmVycmlkZQogIGZpbmFsIFRyYWNlciB0cmFjZXI7CgogIEBvdmVycmlkZQogIGZpbmFsIFJ1bnRpbWVUeXBlVGFncyBydGlUYWdzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBGaXhlZE5hbWVzIGZpeGVkTmFtZXM7CgogIENvZGVnZW5JbnB1dHNJbXBsKHRoaXMucnRpU3Vic3RpdHV0aW9ucywgdGhpcy5ydGlFbmNvZGVyLAogICAgICB0aGlzLnJ0aVJlY2lwZUVuY29kZXIsIHRoaXMudHJhY2VyLCB0aGlzLnJ0aVRhZ3MsIHRoaXMuZml4ZWROYW1lcyk7Cn0KgVYATk48ARwBGSE2LiQyJCEkGSdJGyQVHSUhASITUQEuLgEWAgEDD0ZJBBwiJ1EjNz03TSw5IwE0JgFMTQE5QCAIQSEIBAFMBksuMgQBUEI3JgQBOh8+Ny4BHE9PQU83GwYBFhodGAEXLUxKFwEtLxkXCA0aHS0tGAEXL0lOFwEZFwgGAR0RBAFENzEBHx4GARYdHRoXSx0BF1AgSBEBLUYRAS0vGRkRCA0dHS0tGhdLHQEXLzIRARkZEQgGBAFNNzEBHx4GARYdLS8ZGhdLHQEtFzYRAR0ZEQgNHRkaF0sdARdRGUYRAS9PTjZGEQEtLR0ZEQgGBAEwNyUEATI3MQQBMTcmBAEzNzIEAgE4LyMiHgFHOQEMOT1QNiEfDx8IOx06Nx0zDR0GBAEMLzQnBgQCAT4fLTImJhUfHQIBMwxKAQw0AQwoAQwoAQwXAQwhAQwfATxKAgEscGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9iYWNrZW5kLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnSt6i8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBRdWV1ZTsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2lkZV9lZmZlY3RzLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2Fubm90YXRpb25zLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgSW5mZXJyZWREYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0luZmVycmVkRGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBJbmZlcnJlZERhdGEucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBib29sIGlzVHJpdmlhbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgaWYgKGlzVHJpdmlhbCkgewogICAgICByZXR1cm4gbmV3IFRyaXZpYWxJbmZlcnJlZERhdGEoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgSW5mZXJyZWREYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtJbmZlcnJlZERhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgdGhlIHNpZGUgZWZmZWN0cyBvZiBleGVjdXRpbmcgW2VsZW1lbnRdLgogIFNpZGVFZmZlY3RzIGdldFNpZGVFZmZlY3RzT2ZFbGVtZW50KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgc2lkZSBlZmZlY3RzIG9mIGNhbGxpbmcgW3NlbGVjdG9yXSBvbiB0aGUgW3JlY2VpdmVyXS4KICBTaWRlRWZmZWN0cyBnZXRTaWRlRWZmZWN0c09mU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyBndWFyYW50ZWVkIG5vdCB0byB0aHJvdyBhbiBleGNlcHRpb24uCiAgYm9vbCBnZXRDYW5ub3RUaHJvdyhGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyBjYWxsZWQgaW4gYSBsb29wLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IElzIHRoaXMgJ3BvdGVudGlhbGx5IGNhbGxlZCcgb3IgJ2tub3duIHRvIGJlIGNhbGxlZCc/CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hhbmdlIFtNZW1iZXJFbnRpdHldIHRvIFtGdW5jdGlvbkVudGl0eV0uCiAgYm9vbCBpc0NhbGxlZEluTG9vcChNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gbWlnaHQgYmUgcGFzc2VkIHRvIGBGdW5jdGlvbi5hcHBseWAuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXMgdGhpcyAncGFzc2VkIGludm9jYXRpb24gdGFyZ2V0YCBvcgogIC8vIGBwYXNzZWQgYXMgYXJndW1lbnRgPwogIGJvb2wgZ2V0TWlnaHRCZVBhc3NlZFRvQXBwbHkoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7Cn0KCmFic3RyYWN0IGNsYXNzIEluZmVycmVkRGF0YUJ1aWxkZXIgewogIC8vLyBSZWdpc3RlcnMgdGhlIGV4ZWN1dGluZyBvZiBbZWxlbWVudF0gYXMgd2l0aG91dCBzaWRlIGVmZmVjdHMuCiAgdm9pZCByZWdpc3RlclNpZGVFZmZlY3RzRnJlZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIFtTaWRlRWZmZWN0QnVpbGRlcl0gYXNzb2NpYXRlZCB3aXRoIFtlbGVtZW50XS4KICBTaWRlRWZmZWN0c0J1aWxkZXIgZ2V0U2lkZUVmZmVjdHNCdWlsZGVyKEZ1bmN0aW9uRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBbZWxlbWVudF0gbWlnaHQgYmUgcGFzc2VkIHRvIGBGdW5jdGlvbi5hcHBseWAuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXMgdGhpcyAncGFzc2VkIGludm9jYXRpb24gdGFyZ2V0YCBvcgogIC8vIGBwYXNzZWQgYXMgYXJndW1lbnRgPwogIHZvaWQgcmVnaXN0ZXJNaWdodEJlUGFzc2VkVG9BcHBseShGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBtaWdodCBiZSBwYXNzZWQgdG8gYEZ1bmN0aW9uLmFwcGx5YCBnaXZlbiB0aGUKICAvLy8gY3VycmVudGx5IGluZmVycmVkIGluZm9ybWF0aW9uLgogIGJvb2wgZ2V0Q3VycmVudGx5S25vd25NaWdodEJlUGFzc2VkVG9BcHBseShGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IFtlbGVtZW50XSBpcyBjYWxsZWQgaW4gYSBsb29wLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IElzIHRoaXMgJ3BvdGVudGlhbGx5IGNhbGxlZCcgb3IgJ2tub3duIHRvIGJlIGNhbGxlZCc/CiAgdm9pZCBhZGRGdW5jdGlvbkNhbGxlZEluTG9vcChNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBbZWxlbWVudF0gaXMgZ3VhcmFudGVlZCBub3QgdG8gdGhyb3cgYW4gZXhjZXB0aW9uLgogIHZvaWQgcmVnaXN0ZXJDYW5ub3RUaHJvdyhGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIENyZWF0ZSBhIFtJbmZlcnJlZERhdGFdIG9iamVjdCBmb3IgdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbi4KICBJbmZlcnJlZERhdGEgY2xvc2UoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKfQoKY2xhc3MgSW5mZXJyZWREYXRhSW1wbCBpbXBsZW1lbnRzIEluZmVycmVkRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtJbmZlcnJlZERhdGFdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnaW5mZXJyZWQtZGF0YSc7CgogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgU2V0PE1lbWJlckVudGl0eT4gX2Z1bmN0aW9uc0NhbGxlZEluTG9vcDsKICBmaW5hbCBNYXA8RnVuY3Rpb25FbnRpdHksIFNpZGVFZmZlY3RzPiBfc2lkZUVmZmVjdHM7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX3NpZGVFZmZlY3RzRnJlZUVsZW1lbnRzOwoKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9lbGVtZW50c1RoYXRDYW5ub3RUaHJvdzsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5OwoKICBJbmZlcnJlZERhdGFJbXBsKAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fZnVuY3Rpb25zQ2FsbGVkSW5Mb29wLAogICAgICB0aGlzLl9zaWRlRWZmZWN0cywKICAgICAgdGhpcy5fc2lkZUVmZmVjdHNGcmVlRWxlbWVudHMsCiAgICAgIHRoaXMuX2VsZW1lbnRzVGhhdENhbm5vdFRocm93LAogICAgICB0aGlzLl9mdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkpOwoKICBmYWN0b3J5IEluZmVycmVkRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFNldDxNZW1iZXJFbnRpdHk+IGZ1bmN0aW9uc0NhbGxlZEluTG9vcCA9IHNvdXJjZS5yZWFkTWVtYmVycygpLnRvU2V0KCk7CiAgICBNYXA8RnVuY3Rpb25FbnRpdHksIFNpZGVFZmZlY3RzPiBzaWRlRWZmZWN0cyA9IHNvdXJjZS5yZWFkTWVtYmVyTWFwKAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBuZXcgU2lkZUVmZmVjdHMucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBzaWRlRWZmZWN0c0ZyZWVFbGVtZW50cyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpLnRvU2V0KCk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGVsZW1lbnRzVGhhdENhbm5vdFRocm93ID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5ID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSW5mZXJyZWREYXRhSW1wbCgKICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICBmdW5jdGlvbnNDYWxsZWRJbkxvb3AsCiAgICAgICAgc2lkZUVmZmVjdHMsCiAgICAgICAgc2lkZUVmZmVjdHNGcmVlRWxlbWVudHMsCiAgICAgICAgZWxlbWVudHNUaGF0Q2Fubm90VGhyb3csCiAgICAgICAgZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVCb29sKGZhbHNlKTsgLy8gSXMgX25vdF8gdHJpdmlhbC4KICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKF9mdW5jdGlvbnNDYWxsZWRJbkxvb3ApOwogICAgc2luay53cml0ZU1lbWJlck1hcCgKICAgICAgICBfc2lkZUVmZmVjdHMsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIFNpZGVFZmZlY3RzIHNpZGVFZmZlY3RzKSA9PgogICAgICAgICAgICBzaWRlRWZmZWN0cy53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgc2luay53cml0ZU1lbWJlcnMoX3NpZGVFZmZlY3RzRnJlZUVsZW1lbnRzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKF9lbGVtZW50c1RoYXRDYW5ub3RUaHJvdyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhfZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTaWRlRWZmZWN0cyBnZXRTaWRlRWZmZWN0c09mU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKSB7CiAgICAvLyBXZSdyZSBub3QgdHJhY2tpbmcgc2lkZSBlZmZlY3RzIG9mIGNsb3N1cmVzLgogICAgaWYgKHNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwgfHwKICAgICAgICBfY2xvc2VkV29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbChzZWxlY3RvciwgcmVjZWl2ZXIpKSB7CiAgICAgIHJldHVybiBuZXcgU2lkZUVmZmVjdHMoKTsKICAgIH0KICAgIFNpZGVFZmZlY3RzIHNpZGVFZmZlY3RzID0gbmV3IFNpZGVFZmZlY3RzLmVtcHR5KCk7CiAgICBmb3IgKE1lbWJlckVudGl0eSBlIGluIF9jbG9zZWRXb3JsZC5sb2NhdGVNZW1iZXJzKHNlbGVjdG9yLCByZWNlaXZlcikpIHsKICAgICAgaWYgKGUuaXNGaWVsZCkgewogICAgICAgIGlmIChzZWxlY3Rvci5pc0dldHRlcikgewogICAgICAgICAgaWYgKCFfY2xvc2VkV29ybGQuZmllbGROZXZlckNoYW5nZXMoZSkpIHsKICAgICAgICAgICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICAgICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KHNlbGVjdG9yLmlzQ2FsbCk7CiAgICAgICAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgICAgICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHNpZGVFZmZlY3RzLmFkZChnZXRTaWRlRWZmZWN0c09mRWxlbWVudChlKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzaWRlRWZmZWN0czsKICB9CgogIEBvdmVycmlkZQogIFNpZGVFZmZlY3RzIGdldFNpZGVFZmZlY3RzT2ZFbGVtZW50KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChfc2lkZUVmZmVjdHMgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiU2lkZSBlZmZlY3RzIGhhdmUgbm90IGJlZW4gY29tcHV0ZWQgeWV0LiIpKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENoZWNrIHRoYXQgW19tYWtlU2lkZUVmZmVjdHNdIGlzIG9ubHkgY2FsbGVkIGlmCiAgICAvLyB0eXBlIGluZmVyZW5jZSBoYXMgYmVlbiBkaXNhYmxlZCAoZXhwbGljaXRseSBvciBiZWNhdXNlIG9mIGNvbXBpbGUgdGltZQogICAgLy8gZXJyb3JzKS4KICAgIHJldHVybiBfc2lkZUVmZmVjdHMucHV0SWZBYnNlbnQoZWxlbWVudCwgX21ha2VTaWRlRWZmZWN0cyk7CiAgfQoKICBzdGF0aWMgU2lkZUVmZmVjdHMgX21ha2VTaWRlRWZmZWN0cygpID0+IG5ldyBTaWRlRWZmZWN0cygpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQ2FsbGVkSW5Mb29wKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2Z1bmN0aW9uc0NhbGxlZEluTG9vcC5jb250YWlucyhlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0Q2Fubm90VGhyb3coRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9lbGVtZW50c1RoYXRDYW5ub3RUaHJvdy5jb250YWlucyhlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0TWlnaHRCZVBhc3NlZFRvQXBwbHkoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgLy8gV2UgYXNzdW1lIGFsbCBmdW5jdGlvbnMgcmVhY2ggRnVuY3Rpb24uYXBwbHkgaWYgbm8gZnVuY3Rpb25zIGFyZQogICAgLy8gcmVnaXN0ZXJlZCBzby4gIFdlIGdldCBhbiBlbXB0eSBzZXQgaW4gdHdvIGNpcmN1bXN0YW5jZXMgKDEpIGEgdHJpdmlhbAogICAgLy8gcHJvZ3JhbSBhbmQgKDIpIHdoZW4gY29tcGlsaW5nIHdpdGhvdXQgdHlwZSBpbmZlcmVuY2UKICAgIC8vIChpLmUuIC0tZGlzYWJsZS10eXBlLWluZmVyZW5jZSkuIFJldHVybmluZyBgdHJ1ZWAgaGFzIGNvbnNlcXVlbmNlcyAoZXh0cmEKICAgIC8vIG1ldGFkYXRhIGZvciBGdW5jdGlvbi5hcHBseSkgb25seSB3aGVuIEZ1bmN0aW9uLmFwcGx5IGlzIGFsc28gcGFydCBvZiB0aGUKICAgIC8vIHByb2dyYW0uIEl0IGlzIGFuIHVudXN1YWwgdHJpdmlhbCBwcm9ncmFtIHRoYXQgaW5jbHVkZXMgRnVuY3Rpb24uYXBwbHkKICAgIC8vIGJ1dCBkb2VzIG5vdCBjYWxsIGl0IG9uIGEgZnVuY3Rpb24uCiAgICAvLwogICAgLy8gVE9ETyhzcmEpOiBXZSBzaG91bGQgcmV2ZXJzZSB0aGUgc2Vuc2Ugb2YgdGhpcyBzZXQgYW5kIHJlZ2lzdGVyIGZ1bmN0aW9ucwogICAgLy8gdGhhdCB3ZSBoYXZlIHByb3ZlbiBkbyBub3QgcmVhY2ggRnVuY3Rpb24uYXBwbHkuCiAgICBpZiAoX2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseS5pc0VtcHR5KSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBfZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5LmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KfQoKY2xhc3MgSW5mZXJyZWREYXRhQnVpbGRlckltcGwgaW1wbGVtZW50cyBJbmZlcnJlZERhdGFCdWlsZGVyIHsKICBmaW5hbCBTZXQ8TWVtYmVyRW50aXR5PiBfZnVuY3Rpb25zQ2FsbGVkSW5Mb29wID0gbmV3IFNldDxNZW1iZXJFbnRpdHk+KCk7CiAgTWFwPE1lbWJlckVudGl0eSwgU2lkZUVmZmVjdHNCdWlsZGVyPiBfc2lkZUVmZmVjdHNCdWlsZGVycyA9CiAgICAgIDxNZW1iZXJFbnRpdHksIFNpZGVFZmZlY3RzQnVpbGRlcj57fTsKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IHByZW1hdHVyZVNpZGVFZmZlY3RBY2Nlc3NlcyA9CiAgICAgIG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX3NpZGVFZmZlY3RzRnJlZUVsZW1lbnRzID0KICAgICAgbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfZWxlbWVudHNUaGF0Q2Fubm90VGhyb3cgPQogICAgICBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9mdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkgPQogICAgICBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICBJbmZlcnJlZERhdGFCdWlsZGVySW1wbChBbm5vdGF0aW9uc0RhdGEgYW5ub3RhdGlvbnNEYXRhKSB7CiAgICBhbm5vdGF0aW9uc0RhdGEuZm9yRWFjaE5vVGhyb3dzKHJlZ2lzdGVyQ2Fubm90VGhyb3cpOwogICAgYW5ub3RhdGlvbnNEYXRhLmZvckVhY2hOb1NpZGVFZmZlY3RzKHJlZ2lzdGVyU2lkZUVmZmVjdHNGcmVlKTsKICB9CgogIEBvdmVycmlkZQogIFNpZGVFZmZlY3RzQnVpbGRlciBnZXRTaWRlRWZmZWN0c0J1aWxkZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9zaWRlRWZmZWN0c0J1aWxkZXJzW21lbWJlcl0gPz89IG5ldyBTaWRlRWZmZWN0c0J1aWxkZXIobWVtYmVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTaWRlRWZmZWN0c0ZyZWUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgX3NpZGVFZmZlY3RzRnJlZUVsZW1lbnRzLmFkZChlbGVtZW50KTsKICAgIGFzc2VydCghX3NpZGVFZmZlY3RzQnVpbGRlcnMuY29udGFpbnNLZXkoZWxlbWVudCkpOwogICAgX3NpZGVFZmZlY3RzQnVpbGRlcnNbZWxlbWVudF0gPSBuZXcgU2lkZUVmZmVjdHNCdWlsZGVyLmZyZWUoZWxlbWVudCk7CiAgfQoKICAvLy8gQ29tcHV0ZSBbU2lkZUVmZmVjdHNdIGZvciBhbGwgcmVnaXN0ZXJlZCBbU2lkZUVmZmVjdEJ1aWxkZXJdcy4KICBAb3ZlcnJpZGUKICBJbmZlcnJlZERhdGEgY2xvc2UoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoX3NpZGVFZmZlY3RzQnVpbGRlcnMgIT0gbnVsbCwKICAgICAgICAiSW5mZXJyZWQgZGF0YSBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLiIpOwogICAgTWFwPEZ1bmN0aW9uRW50aXR5LCBTaWRlRWZmZWN0cz4gX3NpZGVFZmZlY3RzID0KICAgICAgICA8RnVuY3Rpb25FbnRpdHksIFNpZGVFZmZlY3RzPnt9OwogICAgSXRlcmFibGU8U2lkZUVmZmVjdHNCdWlsZGVyPiBzaWRlRWZmZWN0c0J1aWxkZXJzID0KICAgICAgICBfc2lkZUVmZmVjdHNCdWlsZGVycy52YWx1ZXM7CiAgICBlbXB0eVdvcmtMaXN0KHNpZGVFZmZlY3RzQnVpbGRlcnMpOwogICAgZm9yIChTaWRlRWZmZWN0c0J1aWxkZXIgc2lkZUVmZmVjdHNCdWlsZGVyIGluIHNpZGVFZmZlY3RzQnVpbGRlcnMpIHsKICAgICAgX3NpZGVFZmZlY3RzW3NpZGVFZmZlY3RzQnVpbGRlci5tZW1iZXJdID0gc2lkZUVmZmVjdHNCdWlsZGVyLnNpZGVFZmZlY3RzOwogICAgfQogICAgX3NpZGVFZmZlY3RzQnVpbGRlcnMgPSBudWxsOwoKICAgIHJldHVybiBuZXcgSW5mZXJyZWREYXRhSW1wbCgKICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICBfZnVuY3Rpb25zQ2FsbGVkSW5Mb29wLAogICAgICAgIF9zaWRlRWZmZWN0cywKICAgICAgICBfc2lkZUVmZmVjdHNGcmVlRWxlbWVudHMsCiAgICAgICAgX2VsZW1lbnRzVGhhdENhbm5vdFRocm93LAogICAgICAgIF9mdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkpOwogIH0KCiAgc3RhdGljIHZvaWQgZW1wdHlXb3JrTGlzdChJdGVyYWJsZTxTaWRlRWZmZWN0c0J1aWxkZXI+IHNpZGVFZmZlY3RzQnVpbGRlcnMpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE9wdGltaXplIHRoaXMgYWxnb3JpdGhtLgogICAgUXVldWU8U2lkZUVmZmVjdHNCdWlsZGVyPiBxdWV1ZSA9IG5ldyBRdWV1ZTxTaWRlRWZmZWN0c0J1aWxkZXI+KCk7CiAgICBTZXQ8U2lkZUVmZmVjdHNCdWlsZGVyPiBpblF1ZXVlID0gbmV3IFNldDxTaWRlRWZmZWN0c0J1aWxkZXI+KCk7CgogICAgZm9yIChTaWRlRWZmZWN0c0J1aWxkZXIgYnVpbGRlciBpbiBzaWRlRWZmZWN0c0J1aWxkZXJzKSB7CiAgICAgIHF1ZXVlLmFkZExhc3QoYnVpbGRlcik7CiAgICAgIGluUXVldWUuYWRkKGJ1aWxkZXIpOwogICAgfQogICAgd2hpbGUgKHF1ZXVlLmlzTm90RW1wdHkpIHsKICAgICAgU2lkZUVmZmVjdHNCdWlsZGVyIHNpZGVFZmZlY3RzQnVpbGRlciA9IHF1ZXVlLnJlbW92ZUZpcnN0KCk7CiAgICAgIGluUXVldWUucmVtb3ZlKHNpZGVFZmZlY3RzQnVpbGRlcik7CiAgICAgIGZvciAoU2lkZUVmZmVjdHNCdWlsZGVyIGRlcGVuZGVudCBpbiBzaWRlRWZmZWN0c0J1aWxkZXIuZGVwZW5kaW5nKSB7CiAgICAgICAgaWYgKGRlcGVuZGVudC5hZGQoc2lkZUVmZmVjdHNCdWlsZGVyLnNpZGVFZmZlY3RzKSkgewogICAgICAgICAgaWYgKGluUXVldWUuYWRkKGRlcGVuZGVudCkpIHsKICAgICAgICAgICAgcXVldWUuYWRkTGFzdChkZXBlbmRlbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRGdW5jdGlvbkNhbGxlZEluTG9vcChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgX2Z1bmN0aW9uc0NhbGxlZEluTG9vcC5hZGQoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2Fubm90VGhyb3coRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgX2VsZW1lbnRzVGhhdENhbm5vdFRocm93LmFkZChlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJNaWdodEJlUGFzc2VkVG9BcHBseShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBfZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5LmFkZChlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0Q3VycmVudGx5S25vd25NaWdodEJlUGFzc2VkVG9BcHBseShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseS5jb250YWlucyhlbGVtZW50KTsKICB9Cn0KCmNsYXNzIFRyaXZpYWxJbmZlcnJlZERhdGEgaW1wbGVtZW50cyBJbmZlcnJlZERhdGEgewogIGZpbmFsIFNpZGVFZmZlY3RzIF9hbGxTaWRlRWZmZWN0cyA9IG5ldyBTaWRlRWZmZWN0cygpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlQm9vbCh0cnVlKTsgLy8gSXMgdHJpdmlhbC4KICB9CgogIEBvdmVycmlkZQogIFNpZGVFZmZlY3RzIGdldFNpZGVFZmZlY3RzT2ZFbGVtZW50KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfYWxsU2lkZUVmZmVjdHM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldE1pZ2h0QmVQYXNzZWRUb0FwcGx5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaXNDYWxsZWRJbkxvb3AoTWVtYmVyRW50aXR5IGVsZW1lbnQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0Q2Fubm90VGhyb3coRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFNpZGVFZmZlY3RzIGdldFNpZGVFZmZlY3RzT2ZTZWxlY3RvcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpIHsKICAgIHJldHVybiBfYWxsU2lkZUVmZmVjdHM7CiAgfQp9CoFQAE5OPAElARkkMS4kKBgbAR46KzUoFSgNSwYEATAnATc/AUgoMgFLLwE3UEUtAUdAGzgCASVEOAFBQwFEQBs9AVAmRgE0UDYBSDQBRDACATFGHS0BIzI3ATYBNgFAARQZIxklJTABLzUXTElOMjYyNjw2FSEVHxUhISwEAQwoMBUvGRY6MDExOxMEAQwoMzQiQCAGN00XITQ9DCg0ESMrLwoPNQgGGAQBDEAhSExPEEAEAT4BDC41BAEMMDcEAQw5SE49UVFOKwdROEFBBAIBP0w/LDohATchATchAUEhAT06QwQBDEJMBAEMOSs4SgQBRQwxKTU0KTclKElQBiEBIRUgFiIiLQQBUDVHRQE+HhwGH0MqSz0oJgwKCAYEAQw3KQQBDDUrBAEMPjUEAQxHQQQCATQ5AQwoKQQBDEAcBAEMQAEMNQEMOAEMKDMcBAIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvaW5mZXJyZWRfZGF0YS5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX21vZGVsL2pzX3N0cmF0ZWd5LmRhcnTAAFRaLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19tb2RlbC5zdHJhdGVneTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9iYWNrZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL3dvcmsuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHMsIEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnIGhpZGUgV29ya0l0ZW07CmltcG9ydCAnLi4vZHVtcF9pbmZvLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vaW8va2VybmVsX3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JwogICAgc2hvdyBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5OwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZV9ncmFwaF9pbmZlcnJlci5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qc19zb3VyY2VfbWFwcGluZy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmQuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kX2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2NvZGVnZW5fbGlzdGVuZXIuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9jdXN0b21fZWxlbWVudHNfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9lbnF1ZXVlci5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ltcGFjdF90cmFuc2Zvcm1lci5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19uZXcuZGFydCcKICAgIHNob3cgUmVjaXBlRW5jb2RlciwgUmVjaXBlRW5jb2RlckltcGw7CmltcG9ydCAnLi4vanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IE1vZHVsYXJFbWl0dGVyOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvanNfZW1pdHRlci5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzazsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvZW5xdWV1ZS5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9zc2EvYnVpbGRlcl9rZXJuZWwuZGFydCc7CmltcG9ydCAnLi4vc3NhL25vZGVzLmRhcnQnOwppbXBvcnQgJy4uL3NzYS9zc2EuZGFydCc7CmltcG9ydCAnLi4vc3NhL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3RyYWNlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXBfaW1wbC5kYXJ0JzsKaW1wb3J0ICdqc193b3JsZC5kYXJ0JzsKaW1wb3J0ICdqc193b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ2xvY2Fscy5kYXJ0JzsKCmNsYXNzIEpzQmFja2VuZFN0cmF0ZWd5IGltcGxlbWVudHMgQmFja2VuZFN0cmF0ZWd5IHsKICBmaW5hbCBDb21waWxlciBfY29tcGlsZXI7CiAgSnNLZXJuZWxUb0VsZW1lbnRNYXAgX2VsZW1lbnRNYXA7CgogIC8vLyBDb2RlZ2VuIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgdGFibGUgb2YgaW50ZXJjZXB0b3JzIGFuZAogIC8vLyBjb25zdHJ1Y3RvcnMgZm9yIGN1c3RvbSBlbGVtZW50cy4KICBDdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcyBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXM7CgogIE5hdGl2ZUNvZGVnZW5FbnF1ZXVlciBfbmF0aXZlQ29kZWdlbkVucXVldWVyOwoKICBOYW1lciBfbmFtZXI7CgogIENvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lciBfY29kZWdlbkltcGFjdFRyYW5zZm9ybWVyOwoKICBDb2RlRW1pdHRlclRhc2sgX2VtaXR0ZXJUYXNrOwoKICBSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIF9ydGlDaGVja3NCdWlsZGVyOwoKICBGdW5jdGlvbkNvbXBpbGVyIF9mdW5jdGlvbkNvbXBpbGVyOwoKICBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CgogIC8vLyBUaGUgZ2VuZXJhdGVkIGNvZGUgYXMgYSBqcyBBU1QgZm9yIGNvbXBpbGVkIG1ldGhvZHMuCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwganMuRXhwcmVzc2lvbj4gZ2VuZXJhdGVkQ29kZSA9CiAgICAgIDxNZW1iZXJFbnRpdHksIGpzLkV4cHJlc3Npb24+e307CgogIEpzQmFja2VuZFN0cmF0ZWd5KHRoaXMuX2NvbXBpbGVyKSB7CiAgICBib29sIGdlbmVyYXRlU291cmNlTWFwID0gX2NvbXBpbGVyLm9wdGlvbnMuZ2VuZXJhdGVTb3VyY2VNYXA7CiAgICBpZiAoIWdlbmVyYXRlU291cmNlTWFwKSB7CiAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgPSBjb25zdCBKYXZhU2NyaXB0U291cmNlSW5mb3JtYXRpb25TdHJhdGVneSgpOwogICAgfSBlbHNlIHsKICAgICAgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSA9IG5ldyBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KHRoaXMpOwogICAgfQogICAgX2VtaXR0ZXJUYXNrID0gbmV3IENvZGVFbWl0dGVyVGFzayhfY29tcGlsZXIsIGdlbmVyYXRlU291cmNlTWFwKTsKICAgIF9mdW5jdGlvbkNvbXBpbGVyID0gbmV3IFNzYUZ1bmN0aW9uQ29tcGlsZXIoCiAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgX2NvbXBpbGVyLnJlcG9ydGVyLAogICAgICAgIHRoaXMsCiAgICAgICAgX2NvbXBpbGVyLm1lYXN1cmVyLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb21waWxlclRhc2s+IGdldCB0YXNrcyB7CiAgICBMaXN0PENvbXBpbGVyVGFzaz4gcmVzdWx0ID0gZnVuY3Rpb25Db21waWxlci50YXNrczsKICAgIHJlc3VsdC5hZGQoZW1pdHRlclRhc2spOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uQ29tcGlsZXIgZ2V0IGZ1bmN0aW9uQ29tcGlsZXIgPT4gX2Z1bmN0aW9uQ29tcGlsZXI7CgogIEBvdmVycmlkZQogIENvZGVFbWl0dGVyVGFzayBnZXQgZW1pdHRlclRhc2sgPT4gX2VtaXR0ZXJUYXNrOwoKICBOYW1lciBnZXQgbmFtZXJGb3JUZXN0aW5nID0+IF9uYW1lcjsKCiAgTmF0aXZlRW5xdWV1ZXIgZ2V0IG5hdGl2ZUNvZGVnZW5FbnF1ZXVlciA9PiBfbmF0aXZlQ29kZWdlbkVucXVldWVyOwoKICBSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIGdldCBydGlDaGVja3NCdWlsZGVyRm9yVGVzdGluZyA9PiBfcnRpQ2hlY2tzQnVpbGRlcjsKCiAgTWFwPE1lbWJlckVudGl0eSwgV29ybGRJbXBhY3Q+IGNvZGVnZW5JbXBhY3RzRm9yVGVzdGluZzsKCiAgU3RyaW5nIGdldEdlbmVyYXRlZENvZGVGb3JUZXN0aW5nKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4ganMucHJldHR5UHJpbnQoZ2VuZXJhdGVkQ29kZVtlbGVtZW50XSwKICAgICAgICBlbmFibGVNaW5pZmljYXRpb246IF9jb21waWxlci5vcHRpb25zLmVuYWJsZU1pbmlmaWNhdGlvbik7CiAgfQoKICBAZGVwcmVjYXRlZAogIEpzVG9FbGVtZW50TWFwIGdldCBlbGVtZW50TWFwIHsKICAgIGFzc2VydChfZWxlbWVudE1hcCAhPSBudWxsLAogICAgICAgICJKc0JhY2tlbmRTdHJhdGVneS5lbGVtZW50TWFwIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC4iKTsKICAgIHJldHVybiBfZWxlbWVudE1hcDsKICB9CgogIC8vLyBDb2RlZ2VuIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgdGFibGUgb2YgaW50ZXJjZXB0b3JzIGFuZAogIC8vLyBjb25zdHJ1Y3RvcnMgZm9yIGN1c3RvbSBlbGVtZW50cy4KICBDdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcyBnZXQgY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgewogICAgYXNzZXJ0KAogICAgICAgIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcyAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIkN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC4iKSk7CiAgICByZXR1cm4gX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzOwogIH0KCiAgUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlciBnZXQgcnRpQ2hlY2tzQnVpbGRlciB7CiAgICBhc3NlcnQoCiAgICAgICAgX3J0aUNoZWNrc0J1aWxkZXIgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgIV9ydGlDaGVja3NCdWlsZGVyLnJ0aUNoZWNrc0J1aWxkZXJDbG9zZWQsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAiUnVudGltZVR5cGVzQ2hlY2tzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQuIikpOwogICAgcmV0dXJuIF9ydGlDaGVja3NCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgSkNsb3NlZFdvcmxkIGNyZWF0ZUpDbG9zZWRXb3JsZCgKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBPdXRwdXRVbml0RGF0YSBvdXRwdXRVbml0RGF0YSkgewogICAgS2VybmVsRnJvbnRlbmRTdHJhdGVneSBzdHJhdGVneSA9IF9jb21waWxlci5mcm9udGVuZFN0cmF0ZWd5OwogICAgX2VsZW1lbnRNYXAgPSBuZXcgSnNLZXJuZWxUb0VsZW1lbnRNYXAoCiAgICAgICAgX2NvbXBpbGVyLnJlcG9ydGVyLAogICAgICAgIF9jb21waWxlci5lbnZpcm9ubWVudCwKICAgICAgICBzdHJhdGVneS5lbGVtZW50TWFwLAogICAgICAgIGNsb3NlZFdvcmxkLmxpdmVNZW1iZXJVc2FnZSwKICAgICAgICBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEpOwogICAgR2xvYmFsTG9jYWxzTWFwIF9nbG9iYWxMb2NhbHNNYXAgPSBuZXcgR2xvYmFsTG9jYWxzTWFwKCk7CiAgICBDbG9zdXJlRGF0YUJ1aWxkZXIgY2xvc3VyZURhdGFCdWlsZGVyID0gbmV3IENsb3N1cmVEYXRhQnVpbGRlcigKICAgICAgICBfZWxlbWVudE1hcCwgX2dsb2JhbExvY2Fsc01hcCwgY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhKTsKICAgIEpzQ2xvc2VkV29ybGRCdWlsZGVyIGNsb3NlZFdvcmxkQnVpbGRlciA9IG5ldyBKc0Nsb3NlZFdvcmxkQnVpbGRlcigKICAgICAgICBfZWxlbWVudE1hcCwKICAgICAgICBfZ2xvYmFsTG9jYWxzTWFwLAogICAgICAgIGNsb3N1cmVEYXRhQnVpbGRlciwKICAgICAgICBfY29tcGlsZXIub3B0aW9ucywKICAgICAgICBfY29tcGlsZXIuYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5KTsKICAgIEpDbG9zZWRXb3JsZCBqQ2xvc2VkV29ybGQgPSBjbG9zZWRXb3JsZEJ1aWxkZXIuY29udmVydENsb3NlZFdvcmxkKAogICAgICAgIGNsb3NlZFdvcmxkLCBzdHJhdGVneS5jbG9zdXJlTW9kZWxzLCBvdXRwdXRVbml0RGF0YSk7CiAgICBfZWxlbWVudE1hcC5sYXRlT3V0cHV0VW5pdERhdGFCdWlsZGVyID0KICAgICAgICBuZXcgTGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlcihqQ2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEpOwogICAgcmV0dXJuIGpDbG9zZWRXb3JsZDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJKQ2xvc2VkV29ybGQoY292YXJpYW50IEpzQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIF9lbGVtZW50TWFwID0gY2xvc2VkV29ybGQuZWxlbWVudE1hcDsKICB9CgogIEBvdmVycmlkZQogIENvZGVnZW5JbnB1dHMgb25Db2RlZ2VuU3RhcnQoCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKSB7CiAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cy5jbG9zZWRXb3JsZDsKICAgIFJ1bnRpbWVUeXBlVGFncyBydGlUYWdzID0gY29uc3QgUnVudGltZVR5cGVUYWdzKCk7CiAgICBGaXhlZE5hbWVzIGZpeGVkTmFtZXMgPSBfY29tcGlsZXIub3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24KICAgICAgICA/IGNvbnN0IE1pbmlmaWVkRml4ZWROYW1lcygpCiAgICAgICAgOiBjb25zdCBGaXhlZE5hbWVzKCk7CgogICAgVHJhY2VyIHRyYWNlciA9IG5ldyBUcmFjZXIoY2xvc2VkV29ybGQsIF9jb21waWxlci5vdXRwdXRQcm92aWRlcik7CiAgICBSdW50aW1lVHlwZXNFbmNvZGVyIHJ0aUVuY29kZXIgPSBuZXcgUnVudGltZVR5cGVzRW5jb2RlckltcGwoCiAgICAgICAgcnRpVGFncywKICAgICAgICBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLAogICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICBjbG9zZWRXb3JsZC5ydGlOZWVkKTsKCiAgICBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zIHJ0aVN1YnN0aXR1dGlvbnM7CiAgICBpZiAoX2NvbXBpbGVyLm9wdGlvbnMuZGlzYWJsZVJ0aU9wdGltaXphdGlvbikgewogICAgICBydGlTdWJzdGl0dXRpb25zID0gbmV3IFRyaXZpYWxSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zKGNsb3NlZFdvcmxkKTsKICAgICAgX3J0aUNoZWNrc0J1aWxkZXIgPQogICAgICAgICAgbmV3IFRyaXZpYWxSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyKGNsb3NlZFdvcmxkLCBydGlTdWJzdGl0dXRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgIFJ1bnRpbWVUeXBlc0ltcGwgcnVudGltZVR5cGVzSW1wbCA9IG5ldyBSdW50aW1lVHlwZXNJbXBsKGNsb3NlZFdvcmxkKTsKICAgICAgX3J0aUNoZWNrc0J1aWxkZXIgPSBydW50aW1lVHlwZXNJbXBsOwogICAgICBydGlTdWJzdGl0dXRpb25zID0gcnVudGltZVR5cGVzSW1wbDsKICAgIH0KCiAgICBSZWNpcGVFbmNvZGVyIHJ0aVJlY2lwZUVuY29kZXIgPSBfY29tcGlsZXIub3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgICAgPyBuZXcgUmVjaXBlRW5jb2RlckltcGwoCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgICAgICBydGlTdWJzdGl0dXRpb25zLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5ydGlOZWVkKQogICAgICAgIDogbnVsbDsKCiAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4gPSBuZXcgQ29kZWdlbklucHV0c0ltcGwocnRpU3Vic3RpdHV0aW9ucywgcnRpRW5jb2RlciwKICAgICAgICBydGlSZWNpcGVFbmNvZGVyLCB0cmFjZXIsIHJ0aVRhZ3MsIGZpeGVkTmFtZXMpOwoKICAgIGZ1bmN0aW9uQ29tcGlsZXIuaW5pdGlhbGl6ZShnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywgY29kZWdlbik7CiAgICByZXR1cm4gY29kZWdlbjsKICB9CgogIEBvdmVycmlkZQogIENvZGVnZW5FbnF1ZXVlciBjcmVhdGVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyVGFzayB0YXNrLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMpIHsKICAgIGFzc2VydChfZWxlbWVudE1hcCAhPSBudWxsLAogICAgICAgICJKc0JhY2tlbmRTdHJhdGVneS5lbGVtZW50TWFwIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC4iKTsKICAgIE9uZVNob3RJbnRlcmNlcHRvckRhdGEgb25lU2hvdEludGVyY2VwdG9yRGF0YSA9IG5ldyBPbmVTaG90SW50ZXJjZXB0b3JEYXRhKAogICAgICAgIGNsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YSwKICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhKTsKICAgIF9vbkNvZGVnZW5FbnF1ZXVlclN0YXJ0KAogICAgICAgIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW4sIG9uZVNob3RJbnRlcmNlcHRvckRhdGEpOwogICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCA9IGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgICBCYWNrZW5kSW1wYWN0cyBpbXBhY3RzID0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdHMoY29tbW9uRWxlbWVudHMsIF9jb21waWxlci5vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpOwogICAgX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzID0gbmV3IEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLCBlbGVtZW50RW52aXJvbm1lbnQsIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEpOwogICAgcmV0dXJuIG5ldyBDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgICAgdGFzaywKICAgICAgICBuZXcgQ29kZWdlbldvcmxkQnVpbGRlckltcGwoCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgICAgICBfY29tcGlsZXIuYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LmNyZWF0ZVNlbGVjdG9yU3RyYXRlZ3koKSwKICAgICAgICAgICAgb25lU2hvdEludGVyY2VwdG9yRGF0YSksCiAgICAgICAgbmV3IEtlcm5lbENvZGVnZW5Xb3JrSXRlbUJ1aWxkZXIoCiAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgICAgICBjb2RlZ2VuUmVzdWx0cywKICAgICAgICAgICAgbmV3IENsb3NlZEVudGl0eUxvb2t1cChfZWxlbWVudE1hcCksCiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSBuZWVkIGZvciBhIFtDb21wb25lbnRMb29rdXBdLiBUaGlzCiAgICAgICAgICAgIC8vIGlzIGNhdXNlZCBieSBzb21lIHR5cGUgbWFza3MgaG9sZGluZyBhIGtlcm5lbCBub2RlIGZvciB1c2luZyBpbgogICAgICAgICAgICAvLyB0cmFjaW5nLgogICAgICAgICAgICBuZXcgQ29tcG9uZW50TG9va3VwKF9lbGVtZW50TWFwLnByb2dyYW1FbnYubWFpbkNvbXBvbmVudCkpLAogICAgICAgIG5ldyBDb2RlZ2VuRW5xdWV1ZXJMaXN0ZW5lcigKICAgICAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgICAgY29tbW9uRWxlbWVudHMsCiAgICAgICAgICAgIGltcGFjdHMsCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZSwKICAgICAgICAgICAgY2xvc2VkV29ybGQucnRpTmVlZCwKICAgICAgICAgICAgY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMsCiAgICAgICAgICAgIG5hdGl2ZUNvZGVnZW5FbnF1ZXVlciksCiAgICAgICAgY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhKTsKICB9CgogIC8vLyBDYWxsZWQgYmVmb3JlIHRoZSBjb21waWxlciBzdGFydHMgcnVubmluZyB0aGUgY29kZWdlbiBlbnF1ZXVlci4KICB2b2lkIF9vbkNvZGVnZW5FbnF1ZXVlclN0YXJ0KAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBPbmVTaG90SW50ZXJjZXB0b3JEYXRhIG9uZVNob3RJbnRlcmNlcHRvckRhdGEpIHsKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLmNsb3NlZFdvcmxkOwogICAgUnVudGltZVR5cGVUYWdzIHJ0aVRhZ3MgPSBjb2RlZ2VuLnJ0aVRhZ3M7CiAgICBGaXhlZE5hbWVzIGZpeGVkTmFtZXMgPSBjb2RlZ2VuLmZpeGVkTmFtZXM7CiAgICBfbmFtZXIgPSBfY29tcGlsZXIub3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24KICAgICAgICA/IF9jb21waWxlci5vcHRpb25zLnVzZUZyZXF1ZW5jeU5hbWVyCiAgICAgICAgICAgID8gbmV3IEZyZXF1ZW5jeUJhc2VkTmFtZXIoY2xvc2VkV29ybGQsIHJ0aVRhZ3MsIGZpeGVkTmFtZXMpCiAgICAgICAgICAgIDogbmV3IE1pbmlmeU5hbWVyKGNsb3NlZFdvcmxkLCBydGlUYWdzLCBmaXhlZE5hbWVzKQogICAgICAgIDogbmV3IE5hbWVyKGNsb3NlZFdvcmxkLCBydGlUYWdzLCBmaXhlZE5hbWVzKTsKICAgIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIgPSBuZXcgTmF0aXZlQ29kZWdlbkVucXVldWVyKAogICAgICAgIF9jb21waWxlci5vcHRpb25zLAogICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICBjbG9zZWRXb3JsZC5kYXJ0VHlwZXMsCiAgICAgICAgZW1pdHRlclRhc2ssCiAgICAgICAgY2xvc2VkV29ybGQubGl2ZU5hdGl2ZUNsYXNzZXMsCiAgICAgICAgY2xvc2VkV29ybGQubmF0aXZlRGF0YSk7CiAgICBlbWl0dGVyVGFzay5jcmVhdGVFbWl0dGVyKF9uYW1lciwgY29kZWdlbiwgY2xvc2VkV29ybGQpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hhcmUgdGhlIGltcGFjdCBvYmplY3QgY3JlYXRlZCBpbgogICAgLy8gY3JlYXRlQ29kZWdlbkVucXVldWVyLgogICAgQmFja2VuZEltcGFjdHMgaW1wYWN0cyA9IG5ldyBCYWNrZW5kSW1wYWN0cygKICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgX2NvbXBpbGVyLm9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSk7CgogICAgX2NvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lciA9IG5ldyBDb2RlZ2VuSW1wYWN0VHJhbnNmb3JtZXIoCiAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgIGltcGFjdHMsCiAgICAgICAgY2xvc2VkV29ybGQubmF0aXZlRGF0YSwKICAgICAgICBjbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UsCiAgICAgICAgY2xvc2VkV29ybGQucnRpTmVlZCwKICAgICAgICBuYXRpdmVDb2RlZ2VuRW5xdWV1ZXIsCiAgICAgICAgX25hbWVyLAogICAgICAgIG9uZVNob3RJbnRlcmNlcHRvckRhdGEsCiAgICAgICAgcnRpQ2hlY2tzQnVpbGRlciwKICAgICAgICBlbWl0dGVyVGFzay5uYXRpdmVFbWl0dGVyKTsKICB9CgogIFdvcmxkSW1wYWN0IGdlbmVyYXRlQ29kZSgKICAgICAgV29ya0l0ZW0gd29yaywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBDb2RlZ2VuUmVzdWx0cyBjb2RlZ2VuUmVzdWx0cywKICAgICAgRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCwKICAgICAgQ29tcG9uZW50TG9va3VwIGNvbXBvbmVudExvb2t1cCkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IHdvcmsuZWxlbWVudDsKICAgIENvZGVnZW5SZXN1bHQgcmVzdWx0ID0gY29kZWdlblJlc3VsdHMuZ2V0Q29kZWdlblJlc3VsdHMobWVtYmVyKTsKICAgIGlmIChfY29tcGlsZXIub3B0aW9ucy50ZXN0TW9kZSkgewogICAgICBib29sIHVzZURhdGFLaW5kcyA9IHRydWU7CiAgICAgIExpc3Q8T2JqZWN0PiBkYXRhID0gW107CiAgICAgIERhdGFTaW5rIHNpbmsgPSBuZXcgT2JqZWN0U2luayhkYXRhLCB1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CiAgICAgIHNpbmsucmVnaXN0ZXJDb2RlZ2VuV3JpdGVyKG5ldyBDb2RlZ2VuV3JpdGVySW1wbChjbG9zZWRXb3JsZCkpOwogICAgICByZXN1bHQud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgICBEYXRhU291cmNlIHNvdXJjZSA9IG5ldyBPYmplY3RTb3VyY2UoZGF0YSwgdXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwogICAgICBMaXN0PE1vZHVsYXJOYW1lPiBtb2R1bGFyTmFtZXMgPSBbXTsKICAgICAgTGlzdDxNb2R1bGFyRXhwcmVzc2lvbj4gbW9kdWxhckV4cHJlc3Npb24gPSBbXTsKICAgICAgc291cmNlLnJlZ2lzdGVyQ29kZWdlblJlYWRlcigKICAgICAgICAgIG5ldyBDb2RlZ2VuUmVhZGVySW1wbChjbG9zZWRXb3JsZCwgbW9kdWxhck5hbWVzLCBtb2R1bGFyRXhwcmVzc2lvbikpOwogICAgICBzb3VyY2UucmVnaXN0ZXJFbnRpdHlMb29rdXAoZW50aXR5TG9va3VwKTsKICAgICAgc291cmNlLnJlZ2lzdGVyQ29tcG9uZW50TG9va3VwKGNvbXBvbmVudExvb2t1cCk7CiAgICAgIHJlc3VsdCA9IENvZGVnZW5SZXN1bHQucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgICAgc291cmNlLCBtb2R1bGFyTmFtZXMsIG1vZHVsYXJFeHByZXNzaW9uKTsKICAgIH0KICAgIGlmIChyZXN1bHQuY29kZSAhPSBudWxsKSB7CiAgICAgIGdlbmVyYXRlZENvZGVbbWVtYmVyXSA9IHJlc3VsdC5jb2RlOwogICAgfQogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgIGNvZGVnZW5JbXBhY3RzRm9yVGVzdGluZyA/Pz0gPE1lbWJlckVudGl0eSwgV29ybGRJbXBhY3Q+e307CiAgICAgIGNvZGVnZW5JbXBhY3RzRm9yVGVzdGluZ1ttZW1iZXJdID0gcmVzdWx0LmltcGFjdDsKICAgIH0KICAgIFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0ID0KICAgICAgICBfY29kZWdlbkltcGFjdFRyYW5zZm9ybWVyLnRyYW5zZm9ybUNvZGVnZW5JbXBhY3QocmVzdWx0LmltcGFjdCk7CiAgICBfY29tcGlsZXIuZHVtcEluZm9UYXNrLnJlZ2lzdGVySW1wYWN0KG1lbWJlciwgd29ybGRJbXBhY3QpOwogICAgcmVzdWx0LmFwcGx5TW9kdWxhclN0YXRlKF9uYW1lciwgZW1pdHRlclRhc2suZW1pdHRlcik7CiAgICByZXR1cm4gd29ybGRJbXBhY3Q7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uQ29kZWdlbkVuZChDb2RlZ2VuSW5wdXRzIGNvZGVnZW4pIHsKICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kub25Db21wbGV0ZSgpOwogICAgY29kZWdlbi50cmFjZXIuY2xvc2UoKTsKICB9CgogIEBvdmVycmlkZQogIGludCBhc3NlbWJsZVByb2dyYW0oSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBJbmZlcnJlZERhdGEgaW5mZXJyZWREYXRhLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW5JbnB1dHMsIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQpIHsKICAgIGludCBwcm9ncmFtU2l6ZSA9IGVtaXR0ZXJUYXNrLmFzc2VtYmxlUHJvZ3JhbSgKICAgICAgICBfbmFtZXIsIGNsb3NlZFdvcmxkLCBpbmZlcnJlZERhdGEsIGNvZGVnZW5JbnB1dHMsIGNvZGVnZW5Xb3JsZCk7CiAgICBjbG9zZWRXb3JsZC5ub1N1Y2hNZXRob2REYXRhLmVtaXREaWFnbm9zdGljKF9jb21waWxlci5yZXBvcnRlcik7CiAgICByZXR1cm4gcHJvZ3JhbVNpemU7CiAgfQoKICBAb3ZlcnJpZGUKICBTc2FCdWlsZGVyIGNyZWF0ZVNzYUJ1aWxkZXIoCiAgICAgIENvbXBpbGVyVGFzayB0YXNrLCBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpIHsKICAgIHJldHVybiBuZXcgS2VybmVsU3NhQnVpbGRlcigKICAgICAgICB0YXNrLAogICAgICAgIF9jb21waWxlci5vcHRpb25zLAogICAgICAgIF9jb21waWxlci5yZXBvcnRlciwKICAgICAgICBfY29tcGlsZXIuZHVtcEluZm9UYXNrLAogICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICBlbGVtZW50TWFwLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlU3BhbiBzcGFuRnJvbVNwYW5uYWJsZShTcGFubmFibGUgc3Bhbm5hYmxlLCBFbnRpdHkgY3VycmVudEVsZW1lbnQpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC5nZXRTb3VyY2VTcGFuKHNwYW5uYWJsZSwgY3VycmVudEVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZXNJbmZlcnJlciBjcmVhdGVUeXBlc0luZmVycmVyKAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIEluZmVycmVkRGF0YUJ1aWxkZXIgaW5mZXJyZWREYXRhQnVpbGRlcikgewogICAgcmV0dXJuIG5ldyBUeXBlR3JhcGhJbmZlcnJlcihfY29tcGlsZXIsIGNsb3NlZFdvcmxkLCBpbmZlcnJlZERhdGFCdWlsZGVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJlcGFyZUNvZGVnZW5SZWFkZXIoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5yZWdpc3RlckVudGl0eVJlYWRlcihuZXcgQ2xvc2VkRW50aXR5UmVhZGVyKF9lbGVtZW50TWFwKSk7CiAgICBzb3VyY2UucmVnaXN0ZXJFbnRpdHlMb29rdXAobmV3IENsb3NlZEVudGl0eUxvb2t1cChfZWxlbWVudE1hcCkpOwogICAgc291cmNlLnJlZ2lzdGVyQ29tcG9uZW50TG9va3VwKAogICAgICAgIG5ldyBDb21wb25lbnRMb29rdXAoX2VsZW1lbnRNYXAucHJvZ3JhbUVudi5tYWluQ29tcG9uZW50KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFbnRpdHlXcml0ZXIgZm9yRWFjaENvZGVnZW5NZW1iZXIodm9pZCBGdW5jdGlvbihNZW1iZXJFbnRpdHkgbWVtYmVyKSBmKSB7CiAgICBpbnQgZWFybHlNZW1iZXJJbmRleExpbWl0ID0gX2VsZW1lbnRNYXAucHJlcGFyZUZvckNvZGVnZW5TZXJpYWxpemF0aW9uKCk7CiAgICBDbG9zZWRFbnRpdHlXcml0ZXIgZW50aXR5V3JpdGVyID0KICAgICAgICBuZXcgQ2xvc2VkRW50aXR5V3JpdGVyKF9lbGVtZW50TWFwLCBlYXJseU1lbWJlckluZGV4TGltaXQpOwogICAgZm9yIChpbnQgbWVtYmVySW5kZXggPSAwOwogICAgICAgIG1lbWJlckluZGV4IDwgX2VsZW1lbnRNYXAubWVtYmVycy5sZW5ndGg7CiAgICAgICAgbWVtYmVySW5kZXgrKykgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gX2VsZW1lbnRNYXAubWVtYmVycy5nZXRFbnRpdHkobWVtYmVySW5kZXgpOwogICAgICBpZiAobWVtYmVyID09IG51bGwgfHwgbWVtYmVyLmlzQWJzdHJhY3QpIGNvbnRpbnVlOwogICAgICBmKG1lbWJlcik7CiAgICB9CiAgICByZXR1cm4gZW50aXR5V3JpdGVyOwogIH0KfQoKY2xhc3MgS2VybmVsQ29kZWdlbldvcmtJdGVtQnVpbGRlciBpbXBsZW1lbnRzIFdvcmtJdGVtQnVpbGRlciB7CiAgZmluYWwgSnNCYWNrZW5kU3RyYXRlZ3kgX2JhY2tlbmRTdHJhdGVneTsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvZGVnZW5SZXN1bHRzIF9jb2RlZ2VuUmVzdWx0czsKICBmaW5hbCBFbnRpdHlMb29rdXAgX2VudGl0eUxvb2t1cDsKICBmaW5hbCBDb21wb25lbnRMb29rdXAgX2NvbXBvbmVudExvb2t1cDsKCiAgS2VybmVsQ29kZWdlbldvcmtJdGVtQnVpbGRlcih0aGlzLl9iYWNrZW5kU3RyYXRlZ3ksIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9jb2RlZ2VuUmVzdWx0cywgdGhpcy5fZW50aXR5TG9va3VwLCB0aGlzLl9jb21wb25lbnRMb29rdXApOwoKICBAb3ZlcnJpZGUKICBXb3JrSXRlbSBjcmVhdGVXb3JrSXRlbShNZW1iZXJFbnRpdHkgZW50aXR5KSB7CiAgICBpZiAoZW50aXR5LmlzQWJzdHJhY3QpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBLZXJuZWxDb2RlZ2VuV29ya0l0ZW0oX2JhY2tlbmRTdHJhdGVneSwgX2Nsb3NlZFdvcmxkLAogICAgICAgIF9jb2RlZ2VuUmVzdWx0cywgX2VudGl0eUxvb2t1cCwgX2NvbXBvbmVudExvb2t1cCwgZW50aXR5KTsKICB9Cn0KCmNsYXNzIEtlcm5lbENvZGVnZW5Xb3JrSXRlbSBleHRlbmRzIFdvcmtJdGVtIHsKICBmaW5hbCBKc0JhY2tlbmRTdHJhdGVneSBfYmFja2VuZFN0cmF0ZWd5OwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgQ29kZWdlblJlc3VsdHMgX2NvZGVnZW5SZXN1bHRzOwogIGZpbmFsIEVudGl0eUxvb2t1cCBfZW50aXR5TG9va3VwOwogIGZpbmFsIENvbXBvbmVudExvb2t1cCBfY29tcG9uZW50TG9va3VwOwogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckVudGl0eSBlbGVtZW50OwoKICBLZXJuZWxDb2RlZ2VuV29ya0l0ZW0oCiAgICAgIHRoaXMuX2JhY2tlbmRTdHJhdGVneSwKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2NvZGVnZW5SZXN1bHRzLAogICAgICB0aGlzLl9lbnRpdHlMb29rdXAsCiAgICAgIHRoaXMuX2NvbXBvbmVudExvb2t1cCwKICAgICAgdGhpcy5lbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcnVuKCkgewogICAgcmV0dXJuIF9iYWNrZW5kU3RyYXRlZ3kuZ2VuZXJhdGVDb2RlKAogICAgICAgIHRoaXMsIF9jbG9zZWRXb3JsZCwgX2NvZGVnZW5SZXN1bHRzLCBfZW50aXR5TG9va3VwLCBfY29tcG9uZW50TG9va3VwKTsKICB9Cn0KCi8vLyBUYXNrIGZvciBidWlsZGluZyBTU0EgZnJvbSBrZXJuZWwgSVIgbG9hZGVkIGZyb20gLmRpbGwuCmNsYXNzIEtlcm5lbFNzYUJ1aWxkZXIgaW1wbGVtZW50cyBTc2FCdWlsZGVyIHsKICBmaW5hbCBDb21waWxlclRhc2sgX3Rhc2s7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgZmluYWwgRHVtcEluZm9UYXNrIF9kdW1wSW5mb1Rhc2s7CiAgZmluYWwgSnNUb0VsZW1lbnRNYXAgX2VsZW1lbnRNYXA7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKCiAgRnVuY3Rpb25JbmxpbmVDYWNoZSBfaW5saW5lQ2FjaGU7CiAgSW5saW5lRGF0YUNhY2hlIF9pbmxpbmVEYXRhQ2FjaGU7CgogIEtlcm5lbFNzYUJ1aWxkZXIodGhpcy5fdGFzaywgdGhpcy5fb3B0aW9ucywgdGhpcy5fcmVwb3J0ZXIsCiAgICAgIHRoaXMuX2R1bXBJbmZvVGFzaywgdGhpcy5fZWxlbWVudE1hcCwgdGhpcy5fc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSk7CgogIEBvdmVycmlkZQogIEhHcmFwaCBidWlsZCgKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBfaW5saW5lQ2FjaGUgPz89IG5ldyBGdW5jdGlvbklubGluZUNhY2hlKGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YSk7CiAgICBfaW5saW5lRGF0YUNhY2hlID8/PSBuZXcgSW5saW5lRGF0YUNhY2hlKAogICAgICAgIGVuYWJsZVVzZXJBc3NlcnRpb25zOiBfb3B0aW9ucy5lbmFibGVVc2VyQXNzZXJ0aW9ucywKICAgICAgICBvbWl0SW1wbGljaXRDYXN0czogX29wdGlvbnMub21pdEltcGxpY2l0Q2hlY2tzKTsKICAgIHJldHVybiBfdGFzay5tZWFzdXJlKCgpIHsKICAgICAgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgS2VybmVsU3NhR3JhcGhCdWlsZGVyKAogICAgICAgICAgX29wdGlvbnMsCiAgICAgICAgICBfcmVwb3J0ZXIsCiAgICAgICAgICBtZW1iZXIsCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRNZW1iZXJUaGlzVHlwZShtZW1iZXIpLAogICAgICAgICAgX2R1bXBJbmZvVGFzaywKICAgICAgICAgIF9lbGVtZW50TWFwLAogICAgICAgICAgcmVzdWx0cywKICAgICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgICAgcmVnaXN0cnksCiAgICAgICAgICBuYW1lciwKICAgICAgICAgIGVtaXR0ZXIsCiAgICAgICAgICBjb2RlZ2VuLnRyYWNlciwKICAgICAgICAgIGNvZGVnZW4ucnRpRW5jb2RlciwKICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LAogICAgICAgICAgX2lubGluZUNhY2hlLAogICAgICAgICAgX2lubGluZURhdGFDYWNoZSk7CiAgICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7CiAgICB9KTsKICB9Cn0KCmNsYXNzIEtlcm5lbFRvVHlwZUluZmVyZW5jZU1hcEltcGwgaW1wbGVtZW50cyBLZXJuZWxUb1R5cGVJbmZlcmVuY2VNYXAgewogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzOwogIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgX3RhcmdldFJlc3VsdHM7CgogIEtlcm5lbFRvVHlwZUluZmVyZW5jZU1hcEltcGwoCiAgICAgIE1lbWJlckVudGl0eSB0YXJnZXQsIHRoaXMuX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpIHsKICAgIF90YXJnZXRSZXN1bHRzID0gX3Jlc3VsdE9mKHRhcmdldCk7CiAgfQoKICBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IF9yZXN1bHRPZihNZW1iZXJFbnRpdHkgZSkgPT4KICAgICAgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMKICAgICAgICAgIC5yZXN1bHRPZk1lbWJlcihlIGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSA/IGUuY29uc3RydWN0b3IgOiBlKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRSZXR1cm5UeXBlT2YoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFJldHVyblR5cGVGb3JFbGVtZW50KAogICAgICAgIGZ1bmN0aW9uLCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZU9mSW52b2NhdGlvbigKICAgICAgaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlLCBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIHJldHVybiBfdGFyZ2V0UmVzdWx0cy50eXBlT2ZTZW5kKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGVPZkdldChpci5Qcm9wZXJ0eUdldCBub2RlKSB7CiAgICByZXR1cm4gX3RhcmdldFJlc3VsdHMudHlwZU9mU2VuZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlT2ZEaXJlY3RHZXQoaXIuRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgewogICAgcmV0dXJuIF90YXJnZXRSZXN1bHRzLnR5cGVPZlNlbmQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZU9mU2V0KAogICAgICBpci5Qcm9wZXJ0eVNldCBub2RlLCBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIHJldHVybiBfdGFyZ2V0UmVzdWx0cy50eXBlT2ZTZW5kKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZMaXN0TGl0ZXJhbCgKICAgICAgaXIuTGlzdExpdGVyYWwgbGlzdExpdGVyYWwsIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgcmV0dXJuIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLnR5cGVPZkxpc3RMaXRlcmFsKGxpc3RMaXRlcmFsKSA/PwogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yKGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBfdGFyZ2V0UmVzdWx0cy50eXBlT2ZJdGVyYXRvcihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JDdXJyZW50KGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBfdGFyZ2V0UmVzdWx0cy50eXBlT2ZJdGVyYXRvckN1cnJlbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yTW92ZU5leHQoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIF90YXJnZXRSZXN1bHRzLnR5cGVPZkl0ZXJhdG9yTW92ZU5leHQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbmRleGFibGVJdGVyYXRvcigKICAgICAgaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSwgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSB0eXBlT2ZJdGVyYXRvcihub2RlKTsKICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmlzSnNJbmRleGFibGVBbmRJdGVyYWJsZShtYXNrKS5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZEluZGV4VHlwZShpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRSZXN1bHRUeXBlRm9yU2VsZWN0b3IoCiAgICAgICAgbmV3IFNlbGVjdG9yLmluZGV4KCksIHR5cGVPZkl0ZXJhdG9yKG5vZGUpLCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldEluZmVycmVkVHlwZU9mKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgICAgbWVtYmVyLCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldEluZmVycmVkVHlwZU9mUGFyYW1ldGVyKExvY2FsIHBhcmFtZXRlcikgewogICAgcmV0dXJuIEFic3RyYWN0VmFsdWVGYWN0b3J5LmluZmVycmVkVHlwZUZvclBhcmFtZXRlcigKICAgICAgICBwYXJhbWV0ZXIsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZU9mU2VsZWN0b3IoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgcmV0dXJuIEFic3RyYWN0VmFsdWVGYWN0b3J5LmluZmVycmVkUmVzdWx0VHlwZUZvclNlbGVjdG9yKAogICAgICAgIHNlbGVjdG9yLCBtYXNrLCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVGcm9tTmF0aXZlQmVoYXZpb3IoCiAgICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBBYnN0cmFjdFZhbHVlRmFjdG9yeS5mcm9tTmF0aXZlQmVoYXZpb3IobmF0aXZlQmVoYXZpb3IsIGNsb3NlZFdvcmxkKTsKICB9Cn0Kgm4ATk48ASMBKAEjGSEfHkobLhwkGi4qKDEvISclLC42JjArLiMrMy4rQz0eKSIhGi4lHBocGTEkKBgXGyAYIBYBNRwkAT8oQAEwARABNgEgAS8BJgE3ATs5JwEmQh5PDU0GRjEbHA4cJAQBDCE4HRMEAQw+AQwzAScBRgFRATsBPDJDBAEOIiBDGAQBPyhEDDAoSSsEATMMIyhFDDMoPx4EAQwjQUIsHB8dJSY+REVIFRocGypHPixEGQQBDEMqBAEMID9HN0ElHgFHQhEgKCQeATA0TBpPDU0sKwYBSCEZHiQsKCEQAVA4AUYUBAEMKRkgOR0nIENQJSQhHUJMQB1QSEUgDiUZRiUqEhkcMVFPGEglHyAcFSYhKyQmBAFGID0dN0cvMDIuSEA3OBsoJB8VJyE9Px4xSQE+FSgkESAiHR8QIBokBAEcFSAlISkoRSYgHkhGJE4rNiRQMTcxNAYfKwYgQjgGHklAOxgEAQwtLBwEAQxLQDNJRRgEAQwfUCEOGxwgOhQkBAEMTUEEAQwlS08EAQwxRkYkRAQBDExOJkQeMhlIOREGGQQCAUAsIygkKgFJSAEMMShFQwQCAS8sIygkKgweARkdGRwaHRUBDBYqTwQCATwvHCImJCQ+ASQkAT5OAQwQGyAqHSAaIEsuPTkeQRQVEjEZFxMXFBETGh4mGB0eCAQCAUk8MgEgOygEAT8eSwEMOz4sBAEMKkssBAEMOSwEAQxFLAQBDCNGLAQBDCNNRSkEAQw5MAQBDEA3BAEMQTgEAQweSS9QBAEMPD9OBAEMOTcqBAEMPjotBAEMTj8yBAEMKEFRBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2pzX3N0cmF0ZWd5LmRhcnQ5c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2tlcm5lbF9zdHJhdGVneS5kYXJ0wABD4y8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMua2VybmVsLmZyb250ZW5kX3N0cmF0ZWd5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vYmFja2VuZF9hcGkuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgVXJpczsKaW1wb3J0ICcuLi9jb21tb24vcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL3dvcmsuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbXBpbGVyLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBEZWZlcnJlZExvYWRUYXNrOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vZW52aXJvbm1lbnQuZGFydCcgYXMgZW52OwppbXBvcnQgJy4uL2Zyb250ZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL2lyL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2lyL2Nsb3N1cmUuZGFydCcgc2hvdyBDbG9zdXJlU2NvcGVNb2RlbDsKaW1wb3J0ICcuLi9pci9pbXBhY3QuZGFydCc7CmltcG9ydCAnLi4vaXIvbW9kdWxhci5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zY29wZS5kYXJ0JyBzaG93IFNjb3BlTW9kZWw7CmltcG9ydCAnLi4vanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmRfaW1wYWN0LmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2N1c3RvbV9lbGVtZW50c19hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnIHNob3cgS0ZpZWxkQW5hbHlzaXM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbXBhY3RfdHJhbnNmb3JtZXIuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3Jlc29sdXRpb25fbGlzdGVuZXIuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2RhcnQyanNfdGFyZ2V0LmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9lbnF1ZXVlLmRhcnQnIHNob3cgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyOwppbXBvcnQgJy4uL25hdGl2ZS9yZXNvbHZlci5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9yZXNvbHV0aW9uX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCc7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJ2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXBfaW1wbC5kYXJ0JzsKaW1wb3J0ICdsb2FkZXIuZGFydCc7CgovLy8gRnJvbnQgZW5kIHN0cmF0ZWd5IHRoYXQgbG9hZHMgJy5kaWxsJyBmaWxlcyBhbmQgYnVpbGRzIGEgcmVzb2x2ZWQgZWxlbWVudAovLy8gbW9kZWwgZnJvbSBrZXJuZWwgSVIgbm9kZXMuCmNsYXNzIEtlcm5lbEZyb250ZW5kU3RyYXRlZ3kgZXh0ZW5kcyBGcm9udGVuZFN0cmF0ZWd5IHsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGFCdWlsZGVySW1wbCBuYXRpdmVCYXNpY0RhdGFCdWlsZGVyID0KICAgICAgbmV3IE5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXJJbXBsKCk7CiAgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVCYXNpY0RhdGE7CiAgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIENvbXBpbGVyVGFzayBfY29tcGlsZXJUYXNrOwogIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgX2VsZW1lbnRNYXA7CiAgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgX3J1bnRpbWVUeXBlc05lZWRCdWlsZGVyOwoKICBLZXJuZWxBbm5vdGF0aW9uUHJvY2Vzc29yIF9hbm5vdGF0aW9uUHJvY2Vzc29yOwoKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBDbG9zdXJlU2NvcGVNb2RlbD4gY2xvc3VyZU1vZGVscyA9IHt9OwoKICBNb2R1bGFyU3RyYXRlZ3kgX21vZHVsYXJTdHJhdGVneTsKICBJckFubm90YXRpb25EYXRhIF9pckFubm90YXRpb25EYXRhOwoKICBOYXRpdmVEYXRhQnVpbGRlckltcGwgX25hdGl2ZURhdGFCdWlsZGVyOwogIE5hdGl2ZURhdGFCdWlsZGVyIGdldCBuYXRpdmVEYXRhQnVpbGRlciA9PiBfbmF0aXZlRGF0YUJ1aWxkZXI7CgogIEJhY2tlbmRVc2FnZUJ1aWxkZXIgX2JhY2tlbmRVc2FnZUJ1aWxkZXI7CgogIE5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciBfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyOwoKICAvLy8gUmVzb2x1dGlvbiBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIHRhYmxlIG9mIGludGVyY2VwdG9ycyBhbmQKICAvLy8gY29uc3RydWN0b3JzIGZvciBjdXN0b20gZWxlbWVudHMuCiAgQ3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMgX2N1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzOwoKICBLRmllbGRBbmFseXNpcyBfZmllbGRBbmFseXNpczsKCiAgLy8vIEJhY2tlbmQgdHJhbnNmb3JtYXRpb24gbWV0aG9kcyBmb3IgdGhlIHdvcmxkIGltcGFjdHMuCiAgSW1wYWN0VHJhbnNmb3JtZXIgaW1wYWN0VHJhbnNmb3JtZXI7CgogIEBvdmVycmlkZQogIE5vU3VjaE1ldGhvZFJlZ2lzdHJ5IG5vU3VjaE1ldGhvZFJlZ2lzdHJ5OwoKICBLZXJuZWxGcm9udGVuZFN0cmF0ZWd5KHRoaXMuX2NvbXBpbGVyVGFzaywgdGhpcy5fb3B0aW9ucywKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLCBlbnYuRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIGFzc2VydChfY29tcGlsZXJUYXNrICE9IG51bGwpOwogICAgX2VsZW1lbnRNYXAgPQogICAgICAgIG5ldyBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsKHJlcG9ydGVyLCBlbnZpcm9ubWVudCwgdGhpcywgX29wdGlvbnMpOwogICAgX21vZHVsYXJTdHJhdGVneSA9IG5ldyBLZXJuZWxNb2R1bGFyU3RyYXRlZ3koX2NvbXBpbGVyVGFzaywgX2VsZW1lbnRNYXApOwogICAgX2JhY2tlbmRVc2FnZUJ1aWxkZXIgPSBuZXcgQmFja2VuZFVzYWdlQnVpbGRlckltcGwodGhpcyk7CiAgICBub1N1Y2hNZXRob2RSZWdpc3RyeSA9IG5ldyBOb1N1Y2hNZXRob2RSZWdpc3RyeUltcGwoCiAgICAgICAgY29tbW9uRWxlbWVudHMsIG5ldyBLZXJuZWxOb1N1Y2hNZXRob2RSZXNvbHZlcihfZWxlbWVudE1hcCkpOwogIH0KCiAgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyIGdldCBuYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXJGb3JUZXN0aW5nID0+CiAgICAgIF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXI7CgogIEtGaWVsZEFuYWx5c2lzIGdldCBmaWVsZEFuYWx5c2lzRm9yVGVzdGluZyA9PiBfZmllbGRBbmFseXNpczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBvblJlc29sdXRpb25TdGFydCgpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSBjb21waWxlci5lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUKICAgIC8vIGNhbGxzLiBDdXJyZW50bHkgbmVlZGVkIHRvIGVuc3VyZSByZXNvbHV0aW9uIG9mIHRoZSBjbGFzc2VzIGZvciB2YXJpb3VzCiAgICAvLyBxdWVyaWVzIGluIG5hdGl2ZSBiZWhhdmlvciBjb21wdXRhdGlvbiwgaW5mZXJlbmNlIGFuZCBjb2RlZ2VuLgogICAgZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyk7CiAgICBlbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcyk7CgogICAgX3ZhbGlkYXRlSW50ZXJjZXB0b3JJbXBsZW1lbnRzQWxsT2JqZWN0TWV0aG9kcygKICAgICAgICBjb21tb25FbGVtZW50cy5qc0ludGVyY2VwdG9yQ2xhc3MpOwogICAgLy8gVGhlIG51bGwtaW50ZXJjZXB0b3IgbXVzdCBhbHNvIGltcGxlbWVudCAqYWxsKiBtZXRob2RzLgogICAgX3ZhbGlkYXRlSW50ZXJjZXB0b3JJbXBsZW1lbnRzQWxsT2JqZWN0TWV0aG9kcyhjb21tb25FbGVtZW50cy5qc051bGxDbGFzcyk7CiAgfQoKICB2b2lkIF92YWxpZGF0ZUludGVyY2VwdG9ySW1wbGVtZW50c0FsbE9iamVjdE1ldGhvZHMoCiAgICAgIENsYXNzRW50aXR5IGludGVyY2VwdG9yQ2xhc3MpIHsKICAgIGlmIChpbnRlcmNlcHRvckNsYXNzID09IG51bGwpIHJldHVybjsKICAgIENsYXNzRW50aXR5IG9iamVjdENsYXNzID0gY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3M7CiAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzTWVtYmVyKG9iamVjdENsYXNzLAogICAgICAgIChfLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIE1lbWJlckVudGl0eSBpbnRlcmNlcHRvck1lbWJlciA9IGVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgLmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoaW50ZXJjZXB0b3JDbGFzcywgbWVtYmVyLm5hbWUpOwogICAgICAvLyBJbnRlcmNlcHRvcnMgbXVzdCBvdmVycmlkZSBhbGwgT2JqZWN0IG1ldGhvZHMgZHVlIHRvIGNhbGxpbmcgY29udmVudGlvbgogICAgICAvLyBkaWZmZXJlbmNlcy4KICAgICAgYXNzZXJ0KAogICAgICAgICAgaW50ZXJjZXB0b3JNZW1iZXIuZW5jbG9zaW5nQ2xhc3MgPT0gaW50ZXJjZXB0b3JDbGFzcywKICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgIGludGVyY2VwdG9yTWVtYmVyLAogICAgICAgICAgICAgICJNZW1iZXIgJHttZW1iZXIubmFtZX0gbm90IG92ZXJyaWRkZW4gaW4gJHtpbnRlcmNlcHRvckNsYXNzfS4gIgogICAgICAgICAgICAgICJGb3VuZCAkaW50ZXJjZXB0b3JNZW1iZXIgZnJvbSAiCiAgICAgICAgICAgICAgIiR7aW50ZXJjZXB0b3JNZW1iZXIuZW5jbG9zaW5nQ2xhc3N9LiIpKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgUmVzb2x1dGlvbkVucXVldWVyIGNyZWF0ZVJlc29sdXRpb25FbnF1ZXVlcigKICAgICAgQ29tcGlsZXJUYXNrIHRhc2ssIENvbXBpbGVyIGNvbXBpbGVyKSB7CiAgICBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciBydGlOZWVkQnVpbGRlciA9IF9jcmVhdGVSdW50aW1lVHlwZXNOZWVkQnVpbGRlcigpOwogICAgQmFja2VuZEltcGFjdHMgaW1wYWN0cyA9CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3RzKGNvbW1vbkVsZW1lbnRzLCBjb21waWxlci5vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpOwogICAgX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciA9IG5ldyBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIoCiAgICAgICAgY29tcGlsZXIub3B0aW9ucywKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgY29tbW9uRWxlbWVudHMsCiAgICAgICAgX2VsZW1lbnRNYXAudHlwZXMsCiAgICAgICAgbmV3IEJhc2VOYXRpdmVDbGFzc0ZpbmRlcihlbGVtZW50RW52aXJvbm1lbnQsIG5hdGl2ZUJhc2ljRGF0YSkpOwogICAgX25hdGl2ZURhdGFCdWlsZGVyID0gbmV3IE5hdGl2ZURhdGFCdWlsZGVySW1wbChuYXRpdmVCYXNpY0RhdGEpOwogICAgX2N1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzID0gbmV3IEN1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzKAogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICBuYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgX2JhY2tlbmRVc2FnZUJ1aWxkZXIpOwogICAgX2ZpZWxkQW5hbHlzaXMgPSBuZXcgS0ZpZWxkQW5hbHlzaXModGhpcyk7CiAgICBDbGFzc1F1ZXJpZXMgY2xhc3NRdWVyaWVzID0gbmV3IEtlcm5lbENsYXNzUXVlcmllcyhlbGVtZW50TWFwKTsKICAgIENsYXNzSGllcmFyY2h5QnVpbGRlciBjbGFzc0hpZXJhcmNoeUJ1aWxkZXIgPQogICAgICAgIG5ldyBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIoY29tbW9uRWxlbWVudHMsIGNsYXNzUXVlcmllcyk7CiAgICBBbm5vdGF0aW9uc0RhdGFCdWlsZGVyIGFubm90YXRpb25zRGF0YUJ1aWxkZXIgPQogICAgICAgIG5ldyBBbm5vdGF0aW9uc0RhdGFCdWlsZGVyKCk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIGlzIGEgaGFjay4gVGhlIGFubm90YXRpb24gZGF0YSBpcyBidWlsdCB3aGlsZQogICAgLy8gdXNpbmcgaXQuIFdpdGggQ0ZFIGNvbnN0YW50cyB0aGUgYW5ub3RhdGlvbnMgZGF0YSBjYW4gYmUgYnVpbHQgZnVsbHkKICAgIC8vIGJlZm9yZSBjcmVhdGluZyB0aGUgcmVzb2x1dGlvbiBlbnF1ZXVlci4KICAgIEFubm90YXRpb25zRGF0YSBhbm5vdGF0aW9uc0RhdGEgPSBuZXcgQW5ub3RhdGlvbnNEYXRhSW1wbCgKICAgICAgICBjb21waWxlci5vcHRpb25zLCBhbm5vdGF0aW9uc0RhdGFCdWlsZGVyLnByYWdtYUFubm90YXRpb25zKTsKICAgIGltcGFjdFRyYW5zZm9ybWVyID0gbmV3IEphdmFTY3JpcHRJbXBhY3RUcmFuc2Zvcm1lcigKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgY29tbW9uRWxlbWVudHMsCiAgICAgICAgaW1wYWN0cywKICAgICAgICBuYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciwKICAgICAgICBfYmFja2VuZFVzYWdlQnVpbGRlciwKICAgICAgICBfY3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMsCiAgICAgICAgcnRpTmVlZEJ1aWxkZXIsCiAgICAgICAgY2xhc3NIaWVyYXJjaHlCdWlsZGVyLAogICAgICAgIGFubm90YXRpb25zRGF0YSk7CiAgICBJbnRlcmNlcHRvckRhdGFCdWlsZGVyIGludGVyY2VwdG9yRGF0YUJ1aWxkZXIgPQogICAgICAgIG5ldyBJbnRlcmNlcHRvckRhdGFCdWlsZGVySW1wbCgKICAgICAgICAgICAgbmF0aXZlQmFzaWNEYXRhLCBlbGVtZW50RW52aXJvbm1lbnQsIGNvbW1vbkVsZW1lbnRzKTsKICAgIHJldHVybiBuZXcgUmVzb2x1dGlvbkVucXVldWVyKAogICAgICAgIHRhc2ssCiAgICAgICAgY29tcGlsZXIucmVwb3J0ZXIsCiAgICAgICAgbmV3IFJlc29sdXRpb25FbnF1ZXVlckxpc3RlbmVyKAogICAgICAgICAgICBjb21waWxlci5vcHRpb25zLAogICAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgICBpbXBhY3RzLAogICAgICAgICAgICBuYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgICAgIGludGVyY2VwdG9yRGF0YUJ1aWxkZXIsCiAgICAgICAgICAgIF9iYWNrZW5kVXNhZ2VCdWlsZGVyLAogICAgICAgICAgICBub1N1Y2hNZXRob2RSZWdpc3RyeSwKICAgICAgICAgICAgX2N1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzLAogICAgICAgICAgICBfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyLAogICAgICAgICAgICBfZmllbGRBbmFseXNpcywKICAgICAgICAgICAgY29tcGlsZXIuZGVmZXJyZWRMb2FkVGFzayksCiAgICAgICAgbmV3IFJlc29sdXRpb25Xb3JsZEJ1aWxkZXJJbXBsKAogICAgICAgICAgICBfb3B0aW9ucywKICAgICAgICAgICAgZWxlbWVudE1hcCwKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICBfZWxlbWVudE1hcC50eXBlcywKICAgICAgICAgICAgY29tbW9uRWxlbWVudHMsCiAgICAgICAgICAgIG5hdGl2ZUJhc2ljRGF0YSwKICAgICAgICAgICAgbmF0aXZlRGF0YUJ1aWxkZXIsCiAgICAgICAgICAgIGludGVyY2VwdG9yRGF0YUJ1aWxkZXIsCiAgICAgICAgICAgIF9iYWNrZW5kVXNhZ2VCdWlsZGVyLAogICAgICAgICAgICBydGlOZWVkQnVpbGRlciwKICAgICAgICAgICAgX2ZpZWxkQW5hbHlzaXMsCiAgICAgICAgICAgIF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIsCiAgICAgICAgICAgIG5vU3VjaE1ldGhvZFJlZ2lzdHJ5LAogICAgICAgICAgICBhbm5vdGF0aW9uc0RhdGFCdWlsZGVyLAogICAgICAgICAgICBjb25zdCBTdHJvbmdNb2RlV29ybGRTdHJhdGVneSgpLAogICAgICAgICAgICBjbGFzc0hpZXJhcmNoeUJ1aWxkZXIsCiAgICAgICAgICAgIGNsYXNzUXVlcmllcyksCiAgICAgICAgbmV3IEtlcm5lbFdvcmtJdGVtQnVpbGRlcigKICAgICAgICAgICAgX2NvbXBpbGVyVGFzaywKICAgICAgICAgICAgZWxlbWVudE1hcCwKICAgICAgICAgICAgbmF0aXZlQmFzaWNEYXRhLAogICAgICAgICAgICBuYXRpdmVEYXRhQnVpbGRlciwKICAgICAgICAgICAgYW5ub3RhdGlvbnNEYXRhQnVpbGRlciwKICAgICAgICAgICAgaW1wYWN0VHJhbnNmb3JtZXIsCiAgICAgICAgICAgIGNsb3N1cmVNb2RlbHMsCiAgICAgICAgICAgIGNvbXBpbGVyLmltcGFjdENhY2hlLAogICAgICAgICAgICBfZmllbGRBbmFseXNpcywKICAgICAgICAgICAgX21vZHVsYXJTdHJhdGVneSwKICAgICAgICAgICAgX2lyQW5ub3RhdGlvbkRhdGEpLAogICAgICAgIGFubm90YXRpb25zRGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uUmVzb2x1dGlvbkVuZCgpIHsKICAgIGFzc2VydChfYW5ub3RhdGlvblByb2Nlc3NvciAhPSBudWxsLAogICAgICAgICJBbm5vdGF0aW9uUHJvY2Vzc29yIGhhcyBub3QgYmVlbiBjcmVhdGVkLiIpOwogICAgX2Fubm90YXRpb25Qcm9jZXNzb3IucHJvY2Vzc0pzSW50ZXJvcEFubm90YXRpb25zKAogICAgICAgIG5hdGl2ZUJhc2ljRGF0YSwgbmF0aXZlRGF0YUJ1aWxkZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmFzaWNEYXRhIGdldCBuYXRpdmVCYXNpY0RhdGEgewogICAgaWYgKF9uYXRpdmVCYXNpY0RhdGEgPT0gbnVsbCkgewogICAgICBfbmF0aXZlQmFzaWNEYXRhID0gbmF0aXZlQmFzaWNEYXRhQnVpbGRlci5jbG9zZShlbGVtZW50RW52aXJvbm1lbnQpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBfbmF0aXZlQmFzaWNEYXRhICE9IG51bGwsCiAgICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgIk5hdGl2ZUJhc2ljRGF0YSBoYXMgbm90IGJlZW4gY29tcHV0ZWQgeWV0LiIpKTsKICAgIH0KICAgIHJldHVybiBfbmF0aXZlQmFzaWNEYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvYWRlZExpYnJhcmllcyhLZXJuZWxSZXN1bHQga2VybmVsUmVzdWx0KSB7CiAgICBfZWxlbWVudE1hcC5hZGRDb21wb25lbnQoa2VybmVsUmVzdWx0LmNvbXBvbmVudCk7CiAgICBpZiAoX29wdGlvbnMudXNlQ0ZFQ29uc3RhbnRzKSB7CiAgICAgIF9pckFubm90YXRpb25EYXRhID0gcHJvY2Vzc0Fubm90YXRpb25zKG5ldyBNb2R1bGFyQ29yZSgKICAgICAgICAgIGtlcm5lbFJlc3VsdC5jb21wb25lbnQsIF9lbGVtZW50TWFwLmNvbnN0YW50RXZhbHVhdG9yKSk7CiAgICB9CiAgICBfYW5ub3RhdGlvblByb2Nlc3NvciA9IG5ldyBLZXJuZWxBbm5vdGF0aW9uUHJvY2Vzc29yKAogICAgICAgIGVsZW1lbnRNYXAsIG5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIsIF9pckFubm90YXRpb25EYXRhKTsKICAgIGZvciAoVXJpIHVyaSBpbiBrZXJuZWxSZXN1bHQubGlicmFyaWVzKSB7CiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMaWJyYXJ5KHVyaSk7CiAgICAgIGlmIChtYXliZUVuYWJsZU5hdGl2ZShsaWJyYXJ5LmNhbm9uaWNhbFVyaSkpIHsKICAgICAgICBfYW5ub3RhdGlvblByb2Nlc3Nvci5leHRyYWN0TmF0aXZlQW5ub3RhdGlvbnMobGlicmFyeSk7CiAgICAgIH0KICAgICAgX2Fubm90YXRpb25Qcm9jZXNzb3IuZXh0cmFjdEpzSW50ZXJvcEFubm90YXRpb25zKGxpYnJhcnkpOwogICAgICBpZiAodXJpID09IFVyaXMuZGFydF9odG1sKSB7CiAgICAgICAgX2JhY2tlbmRVc2FnZUJ1aWxkZXIucmVnaXN0ZXJIdG1sSXNMb2FkZWQoKTsKICAgICAgfQogICAgfQogIH0KCiAgSXJBbm5vdGF0aW9uRGF0YSBnZXQgaXJBbm5vdGF0aW9uRGF0YUZvclRlc3RpbmcgPT4gX2lyQW5ub3RhdGlvbkRhdGE7CgogIE1vZHVsYXJTdHJhdGVneSBnZXQgbW9kdWxhclN0cmF0ZWd5Rm9yVGVzdGluZyA9PiBfbW9kdWxhclN0cmF0ZWd5OwoKICBAb3ZlcnJpZGUKICBFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudCA9PiBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgS2VybmVsVG9FbGVtZW50TWFwIGdldCBlbGVtZW50TWFwID0+IF9lbGVtZW50TWFwOwoKICBAb3ZlcnJpZGUKICBEZWZlcnJlZExvYWRUYXNrIGNyZWF0ZURlZmVycmVkTG9hZFRhc2soQ29tcGlsZXIgY29tcGlsZXIpID0+CiAgICAgIG5ldyBLZXJuZWxEZWZlcnJlZExvYWRUYXNrKGNvbXBpbGVyLCBfZWxlbWVudE1hcCk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGNvbXB1dGVNYWluKFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKSB7CiAgICByZXR1cm4gZWxlbWVudEVudmlyb25tZW50Lm1haW5GdW5jdGlvbjsKICB9CgogIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIF9jcmVhdGVSdW50aW1lVHlwZXNOZWVkQnVpbGRlcigpIHsKICAgIHJldHVybiBfcnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgPz89IF9vcHRpb25zLmRpc2FibGVSdGlPcHRpbWl6YXRpb24KICAgICAgICA/IGNvbnN0IFRyaXZpYWxSdW50aW1lVHlwZXNOZWVkQnVpbGRlcigpCiAgICAgICAgOiBuZXcgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXJJbXBsKGVsZW1lbnRFbnZpcm9ubWVudCk7CiAgfQoKICBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciBnZXQgcnVudGltZVR5cGVzTmVlZEJ1aWxkZXJGb3JUZXN0aW5nID0+CiAgICAgIF9ydW50aW1lVHlwZXNOZWVkQnVpbGRlcjsKCiAgQG92ZXJyaWRlCiAgU291cmNlU3BhbiBzcGFuRnJvbVNwYW5uYWJsZShTcGFubmFibGUgc3Bhbm5hYmxlLCBFbnRpdHkgY3VycmVudEVsZW1lbnQpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC5nZXRTb3VyY2VTcGFuKHNwYW5uYWJsZSwgY3VycmVudEVsZW1lbnQpOwogIH0KfQoKY2xhc3MgS2VybmVsV29ya0l0ZW1CdWlsZGVyIGltcGxlbWVudHMgV29ya0l0ZW1CdWlsZGVyIHsKICBmaW5hbCBDb21waWxlclRhc2sgX2NvbXBpbGVyVGFzazsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIF9lbGVtZW50TWFwOwogIGZpbmFsIEltcGFjdFRyYW5zZm9ybWVyIF9pbXBhY3RUcmFuc2Zvcm1lcjsKICBmaW5hbCBOYXRpdmVNZW1iZXJSZXNvbHZlciBfbmF0aXZlTWVtYmVyUmVzb2x2ZXI7CiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhQnVpbGRlciBfYW5ub3RhdGlvbnNEYXRhQnVpbGRlcjsKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBDbG9zdXJlU2NvcGVNb2RlbD4gX2Nsb3N1cmVNb2RlbHM7CiAgZmluYWwgTWFwPEVudGl0eSwgV29ybGRJbXBhY3Q+IF9pbXBhY3RDYWNoZTsKICBmaW5hbCBLRmllbGRBbmFseXNpcyBfZmllbGRBbmFseXNpczsKICBmaW5hbCBNb2R1bGFyU3RyYXRlZ3kgX21vZHVsYXJTdHJhdGVneTsKICBmaW5hbCBJckFubm90YXRpb25EYXRhIF9pckFubm90YXRpb25EYXRhOwoKICBLZXJuZWxXb3JrSXRlbUJ1aWxkZXIoCiAgICAgIHRoaXMuX2NvbXBpbGVyVGFzaywKICAgICAgdGhpcy5fZWxlbWVudE1hcCwKICAgICAgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSwKICAgICAgTmF0aXZlRGF0YUJ1aWxkZXIgbmF0aXZlRGF0YUJ1aWxkZXIsCiAgICAgIHRoaXMuX2Fubm90YXRpb25zRGF0YUJ1aWxkZXIsCiAgICAgIHRoaXMuX2ltcGFjdFRyYW5zZm9ybWVyLAogICAgICB0aGlzLl9jbG9zdXJlTW9kZWxzLAogICAgICB0aGlzLl9pbXBhY3RDYWNoZSwKICAgICAgdGhpcy5fZmllbGRBbmFseXNpcywKICAgICAgdGhpcy5fbW9kdWxhclN0cmF0ZWd5LAogICAgICB0aGlzLl9pckFubm90YXRpb25EYXRhKQogICAgICA6IF9uYXRpdmVNZW1iZXJSZXNvbHZlciA9IG5ldyBLZXJuZWxOYXRpdmVNZW1iZXJSZXNvbHZlcigKICAgICAgICAgICAgX2VsZW1lbnRNYXAsIG5hdGl2ZUJhc2ljRGF0YSwgbmF0aXZlRGF0YUJ1aWxkZXIpOwoKICBAb3ZlcnJpZGUKICBXb3JrSXRlbSBjcmVhdGVXb3JrSXRlbShNZW1iZXJFbnRpdHkgZW50aXR5KSB7CiAgICByZXR1cm4gbmV3IEtlcm5lbFdvcmtJdGVtKAogICAgICAgIF9jb21waWxlclRhc2ssCiAgICAgICAgX2VsZW1lbnRNYXAsCiAgICAgICAgX2ltcGFjdFRyYW5zZm9ybWVyLAogICAgICAgIF9uYXRpdmVNZW1iZXJSZXNvbHZlciwKICAgICAgICBfYW5ub3RhdGlvbnNEYXRhQnVpbGRlciwKICAgICAgICBlbnRpdHksCiAgICAgICAgX2Nsb3N1cmVNb2RlbHMsCiAgICAgICAgX2ltcGFjdENhY2hlLAogICAgICAgIF9maWVsZEFuYWx5c2lzLAogICAgICAgIF9tb2R1bGFyU3RyYXRlZ3ksCiAgICAgICAgX2lyQW5ub3RhdGlvbkRhdGEpOwogIH0KfQoKY2xhc3MgS2VybmVsV29ya0l0ZW0gaW1wbGVtZW50cyBXb3JrSXRlbSB7CiAgZmluYWwgQ29tcGlsZXJUYXNrIF9jb21waWxlclRhc2s7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBfZWxlbWVudE1hcDsKICBmaW5hbCBJbXBhY3RUcmFuc2Zvcm1lciBfaW1wYWN0VHJhbnNmb3JtZXI7CiAgZmluYWwgTmF0aXZlTWVtYmVyUmVzb2x2ZXIgX25hdGl2ZU1lbWJlclJlc29sdmVyOwogIGZpbmFsIEFubm90YXRpb25zRGF0YUJ1aWxkZXIgX2Fubm90YXRpb25zRGF0YUJ1aWxkZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IGVsZW1lbnQ7CiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgQ2xvc3VyZVNjb3BlTW9kZWw+IF9jbG9zdXJlTW9kZWxzOwogIGZpbmFsIE1hcDxFbnRpdHksIFdvcmxkSW1wYWN0PiBfaW1wYWN0Q2FjaGU7CiAgZmluYWwgS0ZpZWxkQW5hbHlzaXMgX2ZpZWxkQW5hbHlzaXM7CiAgZmluYWwgTW9kdWxhclN0cmF0ZWd5IF9tb2R1bGFyU3RyYXRlZ3k7CiAgZmluYWwgSXJBbm5vdGF0aW9uRGF0YSBfaXJBbm5vdGF0aW9uRGF0YTsKCiAgS2VybmVsV29ya0l0ZW0oCiAgICAgIHRoaXMuX2NvbXBpbGVyVGFzaywKICAgICAgdGhpcy5fZWxlbWVudE1hcCwKICAgICAgdGhpcy5faW1wYWN0VHJhbnNmb3JtZXIsCiAgICAgIHRoaXMuX25hdGl2ZU1lbWJlclJlc29sdmVyLAogICAgICB0aGlzLl9hbm5vdGF0aW9uc0RhdGFCdWlsZGVyLAogICAgICB0aGlzLmVsZW1lbnQsCiAgICAgIHRoaXMuX2Nsb3N1cmVNb2RlbHMsCiAgICAgIHRoaXMuX2ltcGFjdENhY2hlLAogICAgICB0aGlzLl9maWVsZEFuYWx5c2lzLAogICAgICB0aGlzLl9tb2R1bGFyU3RyYXRlZ3ksCiAgICAgIHRoaXMuX2lyQW5ub3RhdGlvbkRhdGEpOwoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCBydW4oKSB7CiAgICByZXR1cm4gX2NvbXBpbGVyVGFzay5tZWFzdXJlKCgpIHsKICAgICAgaXIuTWVtYmVyIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKGVsZW1lbnQpOwogICAgICBfbmF0aXZlTWVtYmVyUmVzb2x2ZXIucmVzb2x2ZU5hdGl2ZU1lbWJlcihub2RlLCBfaXJBbm5vdGF0aW9uRGF0YSk7CgogICAgICBMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPiBwcmFnbWFBbm5vdGF0aW9uRGF0YSA9CiAgICAgICAgICBfbW9kdWxhclN0cmF0ZWd5LmdldFByYWdtYUFubm90YXRpb25EYXRhKG5vZGUpOwoKICAgICAgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucyA9IHByb2Nlc3NNZW1iZXJBbm5vdGF0aW9ucygKICAgICAgICAgIF9lbGVtZW50TWFwLm9wdGlvbnMsCiAgICAgICAgICBfZWxlbWVudE1hcC5yZXBvcnRlciwKICAgICAgICAgIF9lbGVtZW50TWFwLmdldE1lbWJlck5vZGUoZWxlbWVudCksCiAgICAgICAgICBwcmFnbWFBbm5vdGF0aW9uRGF0YSk7CiAgICAgIF9hbm5vdGF0aW9uc0RhdGFCdWlsZGVyLnJlZ2lzdGVyUHJhZ21hQW5ub3RhdGlvbnMoZWxlbWVudCwgYW5ub3RhdGlvbnMpOwoKICAgICAgTW9kdWxhck1lbWJlckRhdGEgbW9kdWxhck1lbWJlckRhdGEgPQogICAgICAgICAgX21vZHVsYXJTdHJhdGVneS5nZXRNb2R1bGFyTWVtYmVyRGF0YShub2RlLCBhbm5vdGF0aW9ucyk7CiAgICAgIFNjb3BlTW9kZWwgc2NvcGVNb2RlbCA9IG1vZHVsYXJNZW1iZXJEYXRhLnNjb3BlTW9kZWw7CiAgICAgIGlmIChzY29wZU1vZGVsLmNsb3N1cmVTY29wZU1vZGVsICE9IG51bGwpIHsKICAgICAgICBfY2xvc3VyZU1vZGVsc1tlbGVtZW50XSA9IHNjb3BlTW9kZWwuY2xvc3VyZVNjb3BlTW9kZWw7CiAgICAgIH0KICAgICAgaWYgKGVsZW1lbnQuaXNGaWVsZCAmJiAhZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgX2ZpZWxkQW5hbHlzaXMucmVnaXN0ZXJTdGF0aWNGaWVsZCgKICAgICAgICAgICAgZWxlbWVudCwgc2NvcGVNb2RlbC5pbml0aWFsaXplckNvbXBsZXhpdHkpOwogICAgICB9CiAgICAgIEltcGFjdEJ1aWxkZXJEYXRhIGltcGFjdEJ1aWxkZXJEYXRhID0gbW9kdWxhck1lbWJlckRhdGEuaW1wYWN0QnVpbGRlckRhdGE7CiAgICAgIHJldHVybiBfY29tcGlsZXJUYXNrLm1lYXN1cmVTdWJ0YXNrKCd3b3JsZEltcGFjdCcsICgpIHsKICAgICAgICBSZXNvbHV0aW9uSW1wYWN0IGltcGFjdCA9IF9lbGVtZW50TWFwLmNvbXB1dGVXb3JsZEltcGFjdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgc2NvcGVNb2RlbC52YXJpYWJsZVNjb3BlTW9kZWwsCiAgICAgICAgICAgIG5ldyBTZXQ8UHJhZ21hQW5ub3RhdGlvbj4uZnJvbSgKICAgICAgICAgICAgICAgIGFubm90YXRpb25zLml0ZXJhYmxlKFByYWdtYUFubm90YXRpb24udmFsdWVzKSksCiAgICAgICAgICAgIGltcGFjdEJ1aWxkZXJEYXRhOiBpbXBhY3RCdWlsZGVyRGF0YSk7CiAgICAgICAgV29ybGRJbXBhY3Qgd29ybGRJbXBhY3QgPQogICAgICAgICAgICBfaW1wYWN0VHJhbnNmb3JtZXIudHJhbnNmb3JtUmVzb2x1dGlvbkltcGFjdChpbXBhY3QpOwogICAgICAgIGlmIChfaW1wYWN0Q2FjaGUgIT0gbnVsbCkgewogICAgICAgICAgX2ltcGFjdENhY2hlW2VsZW1lbnRdID0gd29ybGRJbXBhY3Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiB3b3JsZEltcGFjdDsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdLZXJuZWxXb3JrSXRlbSgkZWxlbWVudCknOwp9CgovLy8gSWYgYHRydWVgIGtlcm5lbCBpbXBhY3RzIGFyZSBjb21wdXRlZCBhcyBbSW1wYWN0RGF0YV0gZGlyZWN0bHkgb24ga2VybmVsCi8vLyBhbmQgY29udmVydGVkIHRvIHRoZSBLIG1vZGVsIGFmdGVyd2FyZHMuIFRoaXMgaXMgYSBwcmUtc3RlcCB0byBtb2R1bGFyaXppbmcKLy8vIHRoZSB3b3JsZCBpbXBhY3QgY29tcHV0YXRpb24uCmJvb2wgdXNlSW1wYWN0RGF0YUZvclRlc3RpbmcgPSBmYWxzZTsKCmNsYXNzIEtlcm5lbE1vZHVsYXJTdHJhdGVneSBleHRlbmRzIE1vZHVsYXJTdHJhdGVneSB7CiAgZmluYWwgQ29tcGlsZXJUYXNrIF9jb21waWxlclRhc2s7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBfZWxlbWVudE1hcDsKCiAgS2VybmVsTW9kdWxhclN0cmF0ZWd5KHRoaXMuX2NvbXBpbGVyVGFzaywgdGhpcy5fZWxlbWVudE1hcCk7CgogIEBvdmVycmlkZQogIExpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IGdldFByYWdtYUFubm90YXRpb25EYXRhKGlyLk1lbWJlciBub2RlKSB7CiAgICBpZiAoX2VsZW1lbnRNYXAub3B0aW9ucy51c2VDRkVDb25zdGFudHMpIHsKICAgICAgcmV0dXJuIGNvbXB1dGVQcmFnbWFBbm5vdGF0aW9uRGF0YUZyb21Jcihub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjb21wdXRlUHJhZ21hQW5ub3RhdGlvbkRhdGEoX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMsCiAgICAgICAgICBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQsIF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBNb2R1bGFyTWVtYmVyRGF0YSBnZXRNb2R1bGFyTWVtYmVyRGF0YSgKICAgICAgaXIuTWVtYmVyIG5vZGUsIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gYW5ub3RhdGlvbnMpIHsKICAgIFNjb3BlTW9kZWwgc2NvcGVNb2RlbCA9IF9jb21waWxlclRhc2subWVhc3VyZVN1YnRhc2soJ2Nsb3N1cmVzJywKICAgICAgICAoKSA9PiBuZXcgU2NvcGVNb2RlbC5mcm9tKG5vZGUsIF9lbGVtZW50TWFwLmNvbnN0YW50RXZhbHVhdG9yKSk7CiAgICBJbXBhY3RCdWlsZGVyRGF0YSBpbXBhY3RCdWlsZGVyRGF0YTsKICAgIGlmICh1c2VJbXBhY3REYXRhRm9yVGVzdGluZykgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBbHdheXMgY3JlYXRlIGFuZCB1c2UgdGhlIFtJbXBhY3RCdWlsZGVyRGF0YV0uCiAgICAgIC8vIEN1cnJlbnRseSBpdCBpcyBhIGJpdCBoYWxmLWJha2VkIHNpbmNlIHdlIGNhbm5vdCBjb21wdXRlIGRhdGEgdGhhdAogICAgICAvLyBkZXBlbmQgb24gbWV0YWRhdGEsIHNvIHRoZXNlIHBhcnRzIG9mIHRoZSBpbXBhY3QgZGF0YSBuZWVkIHRvIGJlCiAgICAgIC8vIGNvbXB1dGVkIGR1cmluZyBjb252ZXJzaW9uIHRvIFtSZXNvbHV0aW9uSW1wYWN0XS4KICAgICAgaW1wYWN0QnVpbGRlckRhdGEgPSBfY29tcGlsZXJUYXNrLm1lYXN1cmVTdWJ0YXNrKCd3b3JsZEltcGFjdCcsICgpIHsKICAgICAgICBJbXBhY3RCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgSW1wYWN0QnVpbGRlcihfZWxlbWVudE1hcC50eXBlRW52aXJvbm1lbnQsCiAgICAgICAgICAgIF9lbGVtZW50TWFwLmNsYXNzSGllcmFyY2h5LCBzY29wZU1vZGVsLnZhcmlhYmxlU2NvcGVNb2RlbCwKICAgICAgICAgICAgdXNlQXNzZXJ0czogX2VsZW1lbnRNYXAub3B0aW9ucy5lbmFibGVVc2VyQXNzZXJ0aW9ucywKICAgICAgICAgICAgaW5mZXJFZmZlY3RpdmVseUZpbmFsVmFyaWFibGVUeXBlczoKICAgICAgICAgICAgICAgICFhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLmRpc2FibGVGaW5hbCkpOwogICAgICAgIHJldHVybiBidWlsZGVyLmNvbXB1dGVJbXBhY3Qobm9kZSk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIG5ldyBNb2R1bGFyTWVtYmVyRGF0YShzY29wZU1vZGVsLCBpbXBhY3RCdWlsZGVyRGF0YSk7CiAgfQp9CoHYAE5OPAEqASgBGSUpJB8eIhs2JBolJCE0HB0rKSwrNkAwLik1MTYoPyIaKzQpKB8dGyAWAU4gODwoJBweJjQBMgFBASQmASxBASwBNgFCKEYBIQE8JwEMLQE8QiMSS04+OUYEAUUhAUABDB1OT0ZBSwE0LD9QBAE3Jio6NyM6QlEWDkAUIU4vOAgEAQwvLk8dTz4aHBgbSUVOHBgZHy9EMkE0Jk9MMD9FORwYERkjHisYHxo0KEIjDhsoHiAcFR0kIiIvJxwoKBYYIB8cHR8kIhwcJyIkLSMbIxsYHR8kHxsiHB4gGgQBDBspNjYtBAEMKCRLDiQqPgYdBAEMPDYkPkMGOkAuRTVACEEjNQgGBAFIAUUBDE8BDEMBNAEMQDkBDEEsBAE9SDE/BAFDIAEMTUEEAgE5JCwuNDg9LycqLAEZGhgnKyQfGxkbHR5APgEMMR8XFRwfIRAYFhgaHAQCASskLC40OAwePS8nKiwBEhoYHyIkFBsZGx0fAQwWJjtKATg6AUgfIC4hTwEsRDwyQAg6LDgIUT5CFSssQDMiQiQvChwKCAQBDDMCAU1QIiYBNiQsAT8BDEcvNg1FSAYEAQwqP0VJKSNNTEo7S09HQjBHLAoGQQQCATBwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VybmVsX3N0cmF0ZWd5LmRhcnQwc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2xvYWRlci5kYXJ0nEgvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmxpYnJhcnlfbG9hZGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC91dGlscy5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JyBzaG93IEJpbmFyeUJ1aWxkZXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydCcgc2hvdyBCaW5hcnlQcmludGVyOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgYXMgZmU7CmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnIGhpZGUgTGlicmFyeURlcGVuZGVuY3ksIENvbWJpbmF0b3I7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydCcgaGlkZSBEaWFnbm9zdGljUmVwb3J0ZXI7CgppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrLCBNZWFzdXJlcjsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3NpbmtfYWRhcHRlci5kYXJ0JzsKCmltcG9ydCAnZnJvbnRfZW5kX2FkYXB0ZXIuZGFydCc7CmltcG9ydCAnZGFydDJqc190YXJnZXQuZGFydCcgc2hvdyBEYXJ0MmpzVGFyZ2V0OwoKLy8vIEEgdGFzayB0aGF0IHByb2R1Y2VzIHRoZSBrZXJuZWwgSVIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLgovLy8KLy8vIEl0IHN1cHBvcnRzIGxvYWRpbmcgYm90aCAuZGFydCBzb3VyY2UgZmlsZXMgb3IgcHJlLWNvbXBpbGVkIC5kaWxsIGZpbGVzLgovLy8gV2hlbiBnaXZlbiAuZGFydCBzb3VyY2UgZmlsZXMsIGl0IGludm9rZXMgdGhlIGNvbW1vbiBmcm9udC1lbmQgKENGRSkKLy8vIHRvIHByb2R1Y2UgdGhlIGNvcnJlc3BvbmRpbmcga2VybmVsIElSIHJlcHJlc2VudGF0aW9uLgpjbGFzcyBLZXJuZWxMb2FkZXJUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgX3JlcG9ydGVyOwoKICBmaW5hbCBhcGkuQ29tcGlsZXJJbnB1dCBfY29tcGlsZXJJbnB1dDsKICBmaW5hbCBhcGkuQ29tcGlsZXJPdXRwdXQgX2NvbXBpbGVyT3V0cHV0OwoKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CgogIC8vLyBTaGFyZWQgc3RhdGUgYmV0d2VlbiBjb21waWxhdGlvbnMuCiAgZmUuSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIGluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiAjMzQ5NDIgaXMgZml4ZWQuCiAgLy8vIEZvcmNlIGluLW1lbW9yeSBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBvZiB0aGUgbG9hZGVkIGNvbXBvbmVudC4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciB0ZXN0aW5nLgogIGJvb2wgZm9yY2VTZXJpYWxpemF0aW9uID0gZmFsc2U7CgogIEtlcm5lbExvYWRlclRhc2sodGhpcy5fb3B0aW9ucywgdGhpcy5fY29tcGlsZXJJbnB1dCwgdGhpcy5fY29tcGlsZXJPdXRwdXQsCiAgICAgIHRoaXMuX3JlcG9ydGVyLCBNZWFzdXJlciBtZWFzdXJlcikKICAgICAgOiBpbml0aWFsaXplZENvbXBpbGVyU3RhdGUgPSBfb3B0aW9ucy5rZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUsCiAgICAgICAgc3VwZXIobWVhc3VyZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ2tlcm5lbCBsb2FkZXInOwoKICAvLy8gTG9hZHMgYW4gZW50aXJlIEtlcm5lbCBbQ29tcG9uZW50XSBmcm9tIGEgZmlsZSBvbiBkaXNrLgogIEZ1dHVyZTxLZXJuZWxSZXN1bHQ+IGxvYWQoVXJpIHJlc29sdmVkVXJpKSB7CiAgICByZXR1cm4gbWVhc3VyZSgoKSBhc3luYyB7CiAgICAgIFN0cmluZyB0YXJnZXROYW1lID0KICAgICAgICAgIF9vcHRpb25zLmNvbXBpbGVGb3JTZXJ2ZXIgPyAiZGFydDJqc19zZXJ2ZXIiIDogImRhcnQyanMiOwogICAgICBTdHJpbmcgcGxhdGZvcm0gPSAnJHt0YXJnZXROYW1lfV9wbGF0Zm9ybS5kaWxsJzsKICAgICAgdmFyIGlzRGlsbCA9IHJlc29sdmVkVXJpLnBhdGguZW5kc1dpdGgoJy5kaWxsJyk7CiAgICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQ7CiAgICAgIGlmIChpc0RpbGwpIHsKICAgICAgICBjb21wb25lbnQgPSBuZXcgaXIuQ29tcG9uZW50KCk7CiAgICAgICAgRnV0dXJlPHZvaWQ+IHJlYWQoVXJpIHVyaSkgYXN5bmMgewogICAgICAgICAgYXBpLklucHV0IGlucHV0ID0gYXdhaXQgX2NvbXBpbGVySW5wdXQucmVhZEZyb21VcmkodXJpLAogICAgICAgICAgICAgIGlucHV0S2luZDogYXBpLklucHV0S2luZC5iaW5hcnkpOwogICAgICAgICAgbmV3IEJpbmFyeUJ1aWxkZXIoaW5wdXQuZGF0YSkucmVhZENvbXBvbmVudChjb21wb25lbnQpOwogICAgICAgIH0KCiAgICAgICAgYXdhaXQgcmVhZChyZXNvbHZlZFVyaSk7CiAgICAgICAgaWYgKF9vcHRpb25zLmRpbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkgewogICAgICAgICAgLy8gTW9kdWxhciBjb21waWxlcyBkbyBub3QgaW5jbHVkZSB0aGUgcGxhdGZvcm0gb24gdGhlIGlucHV0IGRpbGwKICAgICAgICAgIC8vIGVpdGhlci4KICAgICAgICAgIGlmIChfb3B0aW9ucy5wbGF0Zm9ybUJpbmFyaWVzICE9IG51bGwpIHsKICAgICAgICAgICAgYXdhaXQgcmVhZChfb3B0aW9ucy5wbGF0Zm9ybUJpbmFyaWVzLnJlc29sdmUocGxhdGZvcm0pKTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAoVXJpIGRlcGVuZGVuY3kgaW4gX29wdGlvbnMuZGlsbERlcGVuZGVuY2llcykgewogICAgICAgICAgICBhd2FpdCByZWFkKGRlcGVuZGVuY3kpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVGhpcyBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbnVsbCB3aGVuIGNyZWF0aW5nIGEgd2hvbGUtcHJvZ3JhbSAuZGlsbAogICAgICAgIC8vIGZpbGUsIGJ1dCBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBtb2R1bGFyIGlucHV0cy4KICAgICAgICBpZiAoY29tcG9uZW50Lm1haW5NZXRob2QgPT0gbnVsbCkgewogICAgICAgICAgLy8gVE9ETyhzaWdtdW5kKTogbW92ZSB0aGlzIHNvIHRoYXQgd2UgdXNlIHRoZSBzYW1lIGVycm9yIHRlbXBsYXRlCiAgICAgICAgICAvLyBmcm9tIHRoZSBDRkUuCiAgICAgICAgICBfcmVwb3J0ZXIucmVwb3J0RXJyb3IoX3JlcG9ydGVyLmNyZWF0ZU1lc3NhZ2UoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsndGV4dCc6ICJObyAnbWFpbicgbWV0aG9kIGZvdW5kLiJ9KSk7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTGlzdDxVcmk+IGRlcGVuZGVuY2llcyA9IFtdOwogICAgICAgIGlmIChfb3B0aW9ucy5wbGF0Zm9ybUJpbmFyaWVzICE9IG51bGwpIHsKICAgICAgICAgIGRlcGVuZGVuY2llcy5hZGQoX29wdGlvbnMucGxhdGZvcm1CaW5hcmllcy5yZXNvbHZlKHBsYXRmb3JtKSk7CiAgICAgICAgfQogICAgICAgIGlmIChfb3B0aW9ucy5kaWxsRGVwZW5kZW5jaWVzICE9IG51bGwpIHsKICAgICAgICAgIGRlcGVuZGVuY2llcy5hZGRBbGwoX29wdGlvbnMuZGlsbERlcGVuZGVuY2llcyk7CiAgICAgICAgfQogICAgICAgIGluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSA9IGZlLmluaXRpYWxpemVDb21waWxlcigKICAgICAgICAgICAgaW5pdGlhbGl6ZWRDb21waWxlclN0YXRlLAogICAgICAgICAgICBuZXcgRGFydDJqc1RhcmdldCh0YXJnZXROYW1lLCBuZXcgVGFyZ2V0RmxhZ3MoKSksCiAgICAgICAgICAgIF9vcHRpb25zLmxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksCiAgICAgICAgICAgIGRlcGVuZGVuY2llcywKICAgICAgICAgICAgX29wdGlvbnMucGFja2FnZUNvbmZpZywKICAgICAgICAgICAgZXhwZXJpbWVudGFsRmxhZ3M6IF9vcHRpb25zLmxhbmd1YWdlRXhwZXJpbWVudHMpOwogICAgICAgIGNvbXBvbmVudCA9IGF3YWl0IGZlLmNvbXBpbGUoCiAgICAgICAgICAgIGluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSwKICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgIG5ldyBDb21waWxlckZpbGVTeXN0ZW0oX2NvbXBpbGVySW5wdXQpLAogICAgICAgICAgICAoZSkgPT4gcmVwb3J0RnJvbnRFbmRNZXNzYWdlKF9yZXBvcnRlciwgZSksCiAgICAgICAgICAgIHJlc29sdmVkVXJpKTsKICAgICAgfQogICAgICBpZiAoY29tcG9uZW50ID09IG51bGwpIHJldHVybiBudWxsOwoKICAgICAgaWYgKF9vcHRpb25zLmNmZU9ubHkpIHsKICAgICAgICBtZWFzdXJlU3VidGFzaygnc2VyaWFsaXplIGRpbGwnLCAoKSB7CiAgICAgICAgICBfcmVwb3J0ZXIubG9nKCdXcml0aW5nIGRpbGwgdG8gJHtfb3B0aW9ucy5vdXRwdXRVcml9Jyk7CiAgICAgICAgICBhcGkuQmluYXJ5T3V0cHV0U2luayBkaWxsT3V0cHV0ID0KICAgICAgICAgICAgICBfY29tcGlsZXJPdXRwdXQuY3JlYXRlQmluYXJ5U2luayhfb3B0aW9ucy5vdXRwdXRVcmkpOwogICAgICAgICAgQmluYXJ5T3V0cHV0U2lua0FkYXB0ZXIgaXJTaW5rID0KICAgICAgICAgICAgICBuZXcgQmluYXJ5T3V0cHV0U2lua0FkYXB0ZXIoZGlsbE91dHB1dCk7CiAgICAgICAgICBCaW5hcnlQcmludGVyIHByaW50ZXIgPSBuZXcgQmluYXJ5UHJpbnRlcihpclNpbmspOwogICAgICAgICAgcHJpbnRlci53cml0ZUNvbXBvbmVudEZpbGUoY29tcG9uZW50KTsKICAgICAgICAgIGlyU2luay5jbG9zZSgpOwogICAgICAgIH0pOwogICAgICB9CgogICAgICBpZiAoZm9yY2VTZXJpYWxpemF0aW9uKSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiAjMzQ5NDIgaXMgZml4ZWQuCiAgICAgICAgTGlzdDxpbnQ+IGRhdGEgPSBzZXJpYWxpemVDb21wb25lbnQoY29tcG9uZW50KTsKICAgICAgICBjb21wb25lbnQgPSBuZXcgaXIuQ29tcG9uZW50KCk7CiAgICAgICAgbmV3IEJpbmFyeUJ1aWxkZXIoZGF0YSkucmVhZENvbXBvbmVudChjb21wb25lbnQpOwogICAgICB9CiAgICAgIHJldHVybiBfdG9SZXN1bHQoY29tcG9uZW50KTsKICAgIH0pOwogIH0KCiAgS2VybmVsUmVzdWx0IF90b1Jlc3VsdChpci5Db21wb25lbnQgY29tcG9uZW50KSB7CiAgICBVcmkgcm9vdExpYnJhcnlVcmkgPSBudWxsOwogICAgSXRlcmFibGU8aXIuTGlicmFyeT4gbGlicmFyaWVzID0gY29tcG9uZW50LmxpYnJhcmllczsKICAgIGlmIChjb21wb25lbnQubWFpbk1ldGhvZCAhPSBudWxsKSB7CiAgICAgIHZhciByb290ID0gY29tcG9uZW50Lm1haW5NZXRob2QuZW5jbG9zaW5nTGlicmFyeTsKICAgICAgcm9vdExpYnJhcnlVcmkgPSByb290LmltcG9ydFVyaTsKCiAgICAgIC8vIEZpbHRlciB1bnJlYWNoYWJsZSBsaWJyYXJpZXM6IFtDb21wb25lbnRdIHdhcyBidWlsdCBieSBsaW5raW5nIGluIHRoZQogICAgICAvLyBlbnRpcmUgU0RLIGxpYnJhcmllcywgbm90IGFsbCBvZiB0aGVtIGFyZSB1c2VkLiBXZSBpbmNsdWRlIGFueXRoaW5nCiAgICAgIC8vIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYG1haW5gLiBOb3RlIHRoYXQgYWxsIGludGVybmFsIGxpYnJhcmllcyB0aGF0CiAgICAgIC8vIHRoZSBjb21waWxlciByZWxpZXMgb24gYXJlIHJlYWNoYWJsZSBmcm9tIGBkYXJ0OmNvcmVgLgogICAgICB2YXIgc2VlbiA9IG5ldyBTZXQ8TGlicmFyeT4oKTsKICAgICAgc2VhcmNoKGlyLkxpYnJhcnkgY3VycmVudCkgewogICAgICAgIGlmICghc2Vlbi5hZGQoY3VycmVudCkpIHJldHVybjsKICAgICAgICBmb3IgKGlyLkxpYnJhcnlEZXBlbmRlbmN5IGRlcCBpbiBjdXJyZW50LmRlcGVuZGVuY2llcykgewogICAgICAgICAgc2VhcmNoKGRlcC50YXJnZXRMaWJyYXJ5KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHNlYXJjaChyb290KTsKCiAgICAgIC8vIExpYnJhcmllcyBkZXBlbmRlbmNpZXMgZG8gbm90IHNob3cgaW1wbGljaXQgaW1wb3J0cyB0byBgZGFydDpjb3JlYC4KICAgICAgdmFyIGRhcnRDb3JlID0gY29tcG9uZW50LmxpYnJhcmllcy5maXJzdFdoZXJlKChsaWIpIHsKICAgICAgICByZXR1cm4gbGliLmltcG9ydFVyaS5zY2hlbWUgPT0gJ2RhcnQnICYmIGxpYi5pbXBvcnRVcmkucGF0aCA9PSAnY29yZSc7CiAgICAgIH0pOwogICAgICBzZWFyY2goZGFydENvcmUpOwoKICAgICAgbGlicmFyaWVzID0gbGlicmFyaWVzLndoZXJlKHNlZW4uY29udGFpbnMpOwogICAgfQogICAgcmV0dXJuIG5ldyBLZXJuZWxSZXN1bHQoY29tcG9uZW50LCByb290TGlicmFyeVVyaSwKICAgICAgICBsaWJyYXJpZXMubWFwKChsaWIpID0+IGxpYi5pbXBvcnRVcmkpLnRvTGlzdCgpKTsKICB9Cn0KCi8vLyBSZXN1bHQgb2YgaW52b2tpbmcgdGhlIENGRSB0byBwcm9kdWNlIHRoZSBrZXJuZWwgSVIuCmNsYXNzIEtlcm5lbFJlc3VsdCB7CiAgZmluYWwgaXIuQ29tcG9uZW50IGNvbXBvbmVudDsKCiAgLy8vIFRoZSBbVXJpXSBvZiB0aGUgcm9vdCBsaWJyYXJ5IGNvbnRhaW5pbmcgbWFpbi4KICBmaW5hbCBVcmkgcm9vdExpYnJhcnlVcmk7CgogIC8vLyBSZXR1cm5zIHRoZSBbVXJpXXMgb2YgYWxsIGxpYnJhcmllcyB0aGF0IGhhdmUgYmVlbiBsb2FkZWQgdGhhdCBhcmUKICAvLy8gcmVhY2hhYmxlIGZyb20gdGhlIFtyb290TGlicmFyeVVyaV0uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBbY29tcG9uZW50XSBtYXkgY29udGFpbiBzb21lIGxpYnJhcmllcyB0aGF0IGFyZSBleGNsdWRlZCBoZXJlLgogIGZpbmFsIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzOwoKICBLZXJuZWxSZXN1bHQodGhpcy5jb21wb25lbnQsIHRoaXMucm9vdExpYnJhcnlVcmksIHRoaXMubGlicmFyaWVzKSB7CiAgICBhc3NlcnQocm9vdExpYnJhcnlVcmkgIT0gbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAncm9vdD0kcm9vdExpYnJhcnlVcmksbGlicmFyaWVzPSR7bGlicmFyaWVzfSc7Cn0KgMQATk48ASABFQE4KEhGAUBIRQEpOxkaJAEhMQFKBE1JOy4mASosASIBKTgBPE0GICMBTSlMGQEMJgE+Lx4aRDc3HhQoK0IwQgoBITFMFTNFDD4kDAoBTz0sTRtPShcKDyUxSQoxOgo6Jj4wGiQ+JiYTNDgaCCoBHi5CLEQrNz0xGgwIASBCOCg6CCMIBAEzHzooOCcBT01OQCUjKEElCggBFAFNPE8KGAEyBjc5BAIBORUgATUcAUkrBk8hAUYkBAEMRgIBJ3BhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9sb2FkZXIuZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL3Rhc2suZGFydJ3yLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKaW1wb3J0ICcuLi9iYWNrZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi90YXNrcy5kYXJ0JzsKaW1wb3J0ICcuLi9kaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2Vudmlyb25tZW50LmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmQuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2pzX3dvcmxkLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC9zaW5rX2FkYXB0ZXIuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCnZvaWQgc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMoCiAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBEYXRhU2luayBzaW5rKSB7CiAgSnNDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IHJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgSW5mZXJyZWREYXRhIGluZmVycmVkRGF0YSA9IHJlc3VsdHMuaW5mZXJyZWREYXRhOwogIGNsb3NlZFdvcmxkLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICBpbmZlcnJlZERhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogIHJlc3VsdHMud3JpdGVUb0RhdGFTaW5rKHNpbmssIGNsb3NlZFdvcmxkLmVsZW1lbnRNYXApOwogIHNpbmsuY2xvc2UoKTsKfQoKR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cygKICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LAogICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCwKICAgIERhdGFTb3VyY2Ugc291cmNlKSB7CiAgSnNDbG9zZWRXb3JsZCBuZXdDbG9zZWRXb3JsZCA9IG5ldyBKc0Nsb3NlZFdvcmxkLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgb3B0aW9ucywgcmVwb3J0ZXIsIGVudmlyb25tZW50LCBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksIGNvbXBvbmVudCwgc291cmNlKTsKICBJbmZlcnJlZERhdGEgbmV3SW5mZXJyZWREYXRhID0KICAgICAgbmV3IEluZmVycmVkRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBuZXdDbG9zZWRXb3JsZCk7CiAgcmV0dXJuIG5ldyBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cy5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIHNvdXJjZSwgbmV3Q2xvc2VkV29ybGQuZWxlbWVudE1hcCwgbmV3Q2xvc2VkV29ybGQsIG5ld0luZmVycmVkRGF0YSk7Cn0KCmNsYXNzIFNlcmlhbGl6YXRpb25UYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKICBmaW5hbCBhcGkuQ29tcGlsZXJJbnB1dCBfcHJvdmlkZXI7CiAgZmluYWwgYXBpLkNvbXBpbGVyT3V0cHV0IF9vdXRwdXRQcm92aWRlcjsKCiAgU2VyaWFsaXphdGlvblRhc2sodGhpcy5fb3B0aW9ucywgdGhpcy5fcmVwb3J0ZXIsIHRoaXMuX3Byb3ZpZGVyLAogICAgICB0aGlzLl9vdXRwdXRQcm92aWRlciwgTWVhc3VyZXIgbWVhc3VyZXIpCiAgICAgIDogc3VwZXIobWVhc3VyZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ1NlcmlhbGl6YXRpb24nOwoKICB2b2lkIHNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2UoR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgbWVhc3VyZVN1YnRhc2soJ3NlcmlhbGl6ZSBkaWxsJywgKCkgewogICAgICAvLyBUT0RPKHNpZ211bmQpOiByZW1vdmUgZW50aXJlbHk6IHdlIHdpbGwgZG8gdGhpcyBpbW1lZGlhdGVseSBhcyBzb29uIGFzCiAgICAgIC8vIHdlIGdldCB0aGUgY29tcG9uZW50IGluIHRoZSBrZXJuZWwvbG9hZGVyLmRhcnQgdGFzayBvbmNlIHdlIHJlZmFjdG9yCiAgICAgIC8vIGhvdyB3ZSBhcHBseSBvdXIgbW9kdWxhciBrZXJuZWwgdHJhbnNmb3JtYXRpb24gZm9yIHN1cGVyIG1peGluIGNhbGxzLgogICAgICBfcmVwb3J0ZXIubG9nKCdXcml0aW5nIGRpbGwgdG8gJHtfb3B0aW9ucy5vdXRwdXRVcml9Jyk7CiAgICAgIGFwaS5CaW5hcnlPdXRwdXRTaW5rIGRpbGxPdXRwdXQgPQogICAgICAgICAgX291dHB1dFByb3ZpZGVyLmNyZWF0ZUJpbmFyeVNpbmsoX29wdGlvbnMub3V0cHV0VXJpKTsKICAgICAgSnNDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IHJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQgPSBjbG9zZWRXb3JsZC5lbGVtZW50TWFwLnByb2dyYW1FbnYubWFpbkNvbXBvbmVudDsKICAgICAgQmluYXJ5T3V0cHV0U2lua0FkYXB0ZXIgaXJTaW5rID0gbmV3IEJpbmFyeU91dHB1dFNpbmtBZGFwdGVyKGRpbGxPdXRwdXQpOwogICAgICBpci5CaW5hcnlQcmludGVyIHByaW50ZXIgPSBuZXcgaXIuQmluYXJ5UHJpbnRlcihpclNpbmspOwogICAgICBwcmludGVyLndyaXRlQ29tcG9uZW50RmlsZShjb21wb25lbnQpOwogICAgICBpclNpbmsuY2xvc2UoKTsKICAgIH0pOwoKICAgIG1lYXN1cmVTdWJ0YXNrKCdzZXJpYWxpemUgZGF0YScsICgpIHsKICAgICAgX3JlcG9ydGVyLmxvZygnV3JpdGluZyBkYXRhIHRvICR7X29wdGlvbnMud3JpdGVEYXRhVXJpfScpOwogICAgICBhcGkuQmluYXJ5T3V0cHV0U2luayBkYXRhT3V0cHV0ID0KICAgICAgICAgIF9vdXRwdXRQcm92aWRlci5jcmVhdGVCaW5hcnlTaW5rKF9vcHRpb25zLndyaXRlRGF0YVVyaSk7CiAgICAgIERhdGFTaW5rIHNpbmsgPSBuZXcgQmluYXJ5U2luayhuZXcgQmluYXJ5T3V0cHV0U2lua0FkYXB0ZXIoZGF0YU91dHB1dCkpOwogICAgICBzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhyZXN1bHRzLCBzaW5rKTsKICAgIH0pOwogIH0KCiAgRnV0dXJlPEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzPiBkZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2UoCiAgICAgIEVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5KSBhc3luYyB7CiAgICBpci5Db21wb25lbnQgY29tcG9uZW50ID0KICAgICAgICBhd2FpdCBtZWFzdXJlSW9TdWJ0YXNrKCdkZXNlcmlhbGl6ZSBkaWxsJywgKCkgYXN5bmMgewogICAgICBfcmVwb3J0ZXIubG9nKCdSZWFkaW5nIGRpbGwgZnJvbSAke19vcHRpb25zLmVudHJ5UG9pbnR9Jyk7CiAgICAgIGFwaS5JbnB1dDxMaXN0PGludD4+IGRpbGxJbnB1dCA9IGF3YWl0IF9wcm92aWRlcgogICAgICAgICAgLnJlYWRGcm9tVXJpKF9vcHRpb25zLmVudHJ5UG9pbnQsIGlucHV0S2luZDogYXBpLklucHV0S2luZC5iaW5hcnkpOwogICAgICBpci5Db21wb25lbnQgY29tcG9uZW50ID0gbmV3IGlyLkNvbXBvbmVudCgpOwogICAgICBuZXcgaXIuQmluYXJ5QnVpbGRlcihkaWxsSW5wdXQuZGF0YSkucmVhZENvbXBvbmVudChjb21wb25lbnQpOwogICAgICByZXR1cm4gY29tcG9uZW50OwogICAgfSk7CgogICAgcmV0dXJuIGF3YWl0IG1lYXN1cmVJb1N1YnRhc2soJ2Rlc2VyaWFsaXplIGRhdGEnLCAoKSBhc3luYyB7CiAgICAgIF9yZXBvcnRlci5sb2coJ1JlYWRpbmcgZGF0YSBmcm9tICR7X29wdGlvbnMucmVhZERhdGFVcml9Jyk7CiAgICAgIGFwaS5JbnB1dDxMaXN0PGludD4+IGRhdGFJbnB1dCA9IGF3YWl0IF9wcm92aWRlcgogICAgICAgICAgLnJlYWRGcm9tVXJpKF9vcHRpb25zLnJlYWREYXRhVXJpLCBpbnB1dEtpbmQ6IGFwaS5JbnB1dEtpbmQuYmluYXJ5KTsKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UgPSBuZXcgQmluYXJ5U291cmNlSW1wbChkYXRhSW5wdXQuZGF0YSk7CiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKF9vcHRpb25zLCBfcmVwb3J0ZXIsCiAgICAgICAgICBlbnZpcm9ubWVudCwgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LCBjb21wb25lbnQsIHNvdXJjZSk7CiAgICB9KTsKICB9CgogIHZvaWQgc2VyaWFsaXplQ29kZWdlbigKICAgICAgQmFja2VuZFN0cmF0ZWd5IGJhY2tlbmRTdHJhdGVneSwgQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMpIHsKICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzID0KICAgICAgICBjb2RlZ2VuUmVzdWx0cy5nbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0czsKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLmNsb3NlZFdvcmxkOwogICAgaW50IHNoYXJkID0gX29wdGlvbnMuY29kZWdlblNoYXJkOwogICAgaW50IHNoYXJkcyA9IF9vcHRpb25zLmNvZGVnZW5TaGFyZHM7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBDb2RlZ2VuUmVzdWx0PiByZXN1bHRzID0ge307CiAgICBpbnQgaW5kZXggPSAwOwogICAgRW50aXR5V3JpdGVyIGVudGl0eVdyaXRlciA9CiAgICAgICAgYmFja2VuZFN0cmF0ZWd5LmZvckVhY2hDb2RlZ2VuTWVtYmVyKChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlmIChpbmRleCAlIHNoYXJkcyA9PSBzaGFyZCkgewogICAgICAgIENvZGVnZW5SZXN1bHQgY29kZWdlblJlc3VsdCA9IGNvZGVnZW5SZXN1bHRzLmdldENvZGVnZW5SZXN1bHRzKG1lbWJlcik7CiAgICAgICAgcmVzdWx0c1ttZW1iZXJdID0gY29kZWdlblJlc3VsdDsKICAgICAgfQogICAgICBpbmRleCsrOwogICAgfSk7CiAgICBtZWFzdXJlU3VidGFzaygnc2VyaWFsaXplIGNvZGVnZW4nLCAoKSB7CiAgICAgIFVyaSB1cmkgPSBVcmkucGFyc2UoJyR7X29wdGlvbnMud3JpdGVDb2RlZ2VuVXJpfSRzaGFyZCcpOwogICAgICBhcGkuQmluYXJ5T3V0cHV0U2luayBkYXRhT3V0cHV0ID0gX291dHB1dFByb3ZpZGVyLmNyZWF0ZUJpbmFyeVNpbmsodXJpKTsKICAgICAgRGF0YVNpbmsgc2luayA9IG5ldyBCaW5hcnlTaW5rKG5ldyBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlcihkYXRhT3V0cHV0KSk7CiAgICAgIF9yZXBvcnRlci5sb2coJ1dyaXRpbmcgZGF0YSB0byAke3VyaX0nKTsKICAgICAgc2luay5yZWdpc3RlckVudGl0eVdyaXRlcihlbnRpdHlXcml0ZXIpOwogICAgICBzaW5rLnJlZ2lzdGVyQ29kZWdlbldyaXRlcihuZXcgQ29kZWdlbldyaXRlckltcGwoY2xvc2VkV29ybGQpKTsKICAgICAgc2luay53cml0ZU1lbWJlck1hcCgKICAgICAgICAgIHJlc3VsdHMsCiAgICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgQ29kZWdlblJlc3VsdCByZXN1bHQpID0+CiAgICAgICAgICAgICAgcmVzdWx0LndyaXRlVG9EYXRhU2luayhzaW5rKSk7CiAgICAgIHNpbmsuY2xvc2UoKTsKICAgIH0pOwogIH0KCiAgRnV0dXJlPENvZGVnZW5SZXN1bHRzPiBkZXNlcmlhbGl6ZUNvZGVnZW4oCiAgICAgIEJhY2tlbmRTdHJhdGVneSBiYWNrZW5kU3RyYXRlZ3ksCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW5JbnB1dHMpIGFzeW5jIHsKICAgIGludCBzaGFyZHMgPSBfb3B0aW9ucy5jb2RlZ2VuU2hhcmRzOwogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBDb2RlZ2VuUmVzdWx0PiByZXN1bHRzID0ge307CiAgICBmb3IgKGludCBzaGFyZCA9IDA7IHNoYXJkIDwgc2hhcmRzOyBzaGFyZCsrKSB7CiAgICAgIFVyaSB1cmkgPSBVcmkucGFyc2UoJyR7X29wdGlvbnMucmVhZENvZGVnZW5Vcml9JHNoYXJkJyk7CiAgICAgIGF3YWl0IG1lYXN1cmVJb1N1YnRhc2soJ2Rlc2VyaWFsaXplIGNvZGVnZW4nLCAoKSBhc3luYyB7CiAgICAgICAgX3JlcG9ydGVyLmxvZygnUmVhZGluZyBkYXRhIGZyb20gJHt1cml9Jyk7CiAgICAgICAgYXBpLklucHV0PExpc3Q8aW50Pj4gZGF0YUlucHV0ID0KICAgICAgICAgICAgYXdhaXQgX3Byb3ZpZGVyLnJlYWRGcm9tVXJpKHVyaSwgaW5wdXRLaW5kOiBhcGkuSW5wdXRLaW5kLmJpbmFyeSk7CiAgICAgICAgRGF0YVNvdXJjZSBzb3VyY2UgPSBuZXcgQmluYXJ5U291cmNlSW1wbChkYXRhSW5wdXQuZGF0YSk7CiAgICAgICAgYmFja2VuZFN0cmF0ZWd5LnByZXBhcmVDb2RlZ2VuUmVhZGVyKHNvdXJjZSk7CiAgICAgICAgTWFwPE1lbWJlckVudGl0eSwgQ29kZWdlblJlc3VsdD4gY29kZWdlblJlc3VsdHMgPQogICAgICAgICAgICBzb3VyY2UucmVhZE1lbWJlck1hcCgoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgICAgTGlzdDxNb2R1bGFyTmFtZT4gbW9kdWxhck5hbWVzID0gW107CiAgICAgICAgICBMaXN0PE1vZHVsYXJFeHByZXNzaW9uPiBtb2R1bGFyRXhwcmVzc2lvbnMgPSBbXTsKICAgICAgICAgIENvZGVnZW5SZWFkZXIgcmVhZGVyID0gbmV3IENvZGVnZW5SZWFkZXJJbXBsKAogICAgICAgICAgICAgIGNsb3NlZFdvcmxkLCBtb2R1bGFyTmFtZXMsIG1vZHVsYXJFeHByZXNzaW9ucyk7CiAgICAgICAgICBzb3VyY2UucmVnaXN0ZXJDb2RlZ2VuUmVhZGVyKHJlYWRlcik7CiAgICAgICAgICBDb2RlZ2VuUmVzdWx0IHJlc3VsdCA9IENvZGVnZW5SZXN1bHQucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgICAgICAgIHNvdXJjZSwgbW9kdWxhck5hbWVzLCBtb2R1bGFyRXhwcmVzc2lvbnMpOwogICAgICAgICAgc291cmNlLmRlcmVnaXN0ZXJDb2RlZ2VuUmVhZGVyKHJlYWRlcik7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0pOwogICAgICAgIF9yZXBvcnRlci5sb2coJ1JlYWQgJHtjb2RlZ2VuUmVzdWx0cy5sZW5ndGh9IG1lbWJlcnMgZnJvbSAke3VyaX0nKTsKICAgICAgICByZXN1bHRzLmFkZEFsbChjb2RlZ2VuUmVzdWx0cyk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIG5ldyBEZXNlcmlhbGl6ZWRDb2RlZ2VuUmVzdWx0cygKICAgICAgICBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywgY29kZWdlbklucHV0cywgcmVzdWx0cyk7CiAgfQp9CoC0AE5OPAEVKDs5KSMhHzIkHjEhJSskGiQYHQEqOTM0JSY5EAIBQh0hHTEcGUdRIUM8SwIBLyImJSwBQy8ZAQwmAUoqUE5PPihAN1BQPy0WCAEqQShDTzoIBAFFHzsdPkE3TjNFGAgBQUI3T0BIQggEARlIPDNHJykzEyBFJVApCA8ILUBPTy8vRhsTOS0UCAQBLSc9KylHMzM/PzMpT0I2OjkvOzg+MEM5MhkMTCgKBis9BAIBLHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vdGFzay5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vc3RyYXRlZ2llcy5kYXJ0kd0vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC91dGlscy5kYXJ0JyBhcyBpcgogICAgc2hvdyBzZXJpYWxpemVDb21wb25lbnQ7CmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC91dGlscy5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JyBzaG93IEJpbmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL2RpYWdub3N0aWNzL2RpYWdub3N0aWNfbGlzdGVuZXIuZGFydCc7CmltcG9ydCAnLi4vZW52aXJvbm1lbnQuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2pzX3dvcmxkLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vc291cmNlX2ZpbGVfcHJvdmlkZXIuZGFydCc7CmltcG9ydCAnLi4vdXRpbC9zaW5rX2FkYXB0ZXIuZGFydCc7CmltcG9ydCAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICd0YXNrLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgU2VyaWFsaXphdGlvblN0cmF0ZWd5PFQ+IHsKICBjb25zdCBTZXJpYWxpemF0aW9uU3RyYXRlZ3koKTsKCiAgTGlzdDxpbnQ+IHNlcmlhbGl6ZUNvbXBvbmVudChHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzKSB7CiAgICBKc0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gcmVzdWx0cy5jbG9zZWRXb3JsZDsKICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQgPSBjbG9zZWRXb3JsZC5lbGVtZW50TWFwLnByb2dyYW1FbnYubWFpbkNvbXBvbmVudDsKICAgIHJldHVybiBpci5zZXJpYWxpemVDb21wb25lbnQoY29tcG9uZW50KTsKICB9CgogIExpc3Q8VD4gc2VyaWFsaXplRGF0YShHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzKTsKCiAgaXIuQ29tcG9uZW50IGRlc2VyaWFsaXplQ29tcG9uZW50KExpc3Q8aW50PiBkYXRhKSB7CiAgICBpci5Db21wb25lbnQgY29tcG9uZW50ID0gbmV3IGlyLkNvbXBvbmVudCgpOwogICAgbmV3IEJpbmFyeUJ1aWxkZXIoZGF0YSkucmVhZENvbXBvbmVudChjb21wb25lbnQpOwogICAgcmV0dXJuIGNvbXBvbmVudDsKICB9CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGRlc2VyaWFsaXplRGF0YSgKICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgICAgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWVTdHJhdGVneSBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIExpc3Q8VD4gZGF0YSk7Cn0KCmNsYXNzIEJ5dGVzSW5NZW1vcnlTZXJpYWxpemF0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBTZXJpYWxpemF0aW9uU3RyYXRlZ3k8aW50PiB7CiAgZmluYWwgYm9vbCB1c2VEYXRhS2luZHM7CgogIGNvbnN0IEJ5dGVzSW5NZW1vcnlTZXJpYWxpemF0aW9uU3RyYXRlZ3koe3RoaXMudXNlRGF0YUtpbmRzOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBMaXN0PGludD4gc2VyaWFsaXplRGF0YShHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzKSB7CiAgICBCeXRlU2luayBieXRlU2luayA9IG5ldyBCeXRlU2luaygpOwogICAgRGF0YVNpbmsgc2luayA9IG5ldyBCaW5hcnlTaW5rKGJ5dGVTaW5rLCB1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CiAgICBzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhyZXN1bHRzLCBzaW5rKTsKICAgIHJldHVybiBieXRlU2luay5idWlsZGVyLnRha2VCeXRlcygpOwogIH0KCiAgQG92ZXJyaWRlCiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZGVzZXJpYWxpemVEYXRhKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgICBFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IGFic3RyYWN0VmFsdWVTdHJhdGVneSwKICAgICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAgTGlzdDxpbnQ+IGRhdGEpIHsKICAgIERhdGFTb3VyY2Ugc291cmNlID0gbmV3IEJpbmFyeVNvdXJjZUltcGwoZGF0YSwgdXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwogICAgcmV0dXJuIGRlc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMob3B0aW9ucywgcmVwb3J0ZXIsIGVudmlyb25tZW50LAogICAgICAgIGFic3RyYWN0VmFsdWVTdHJhdGVneSwgY29tcG9uZW50LCBzb3VyY2UpOwogIH0KfQoKY2xhc3MgQnl0ZXNPbkRpc2tTZXJpYWxpemF0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBTZXJpYWxpemF0aW9uU3RyYXRlZ3k8aW50PiB7CiAgZmluYWwgYm9vbCB1c2VEYXRhS2luZHM7CgogIGNvbnN0IEJ5dGVzT25EaXNrU2VyaWFsaXphdGlvblN0cmF0ZWd5KHt0aGlzLnVzZURhdGFLaW5kczogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxpbnQ+IHNlcmlhbGl6ZURhdGEoR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgVXJpIHVyaSA9IFVyaS5iYXNlLnJlc29sdmUoJ3dvcmxkLmRhdGEnKTsKICAgIERhdGFTaW5rIHNpbmsgPSBuZXcgQmluYXJ5U2luaygKICAgICAgICBuZXcgQmluYXJ5T3V0cHV0U2lua0FkYXB0ZXIobmV3IFJhbmRvbUFjY2Vzc0JpbmFyeU91dHB1dFNpbmsodXJpKSksCiAgICAgICAgdXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwogICAgc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMocmVzdWx0cywgc2luayk7CiAgICByZXR1cm4gbmV3IEZpbGUuZnJvbVVyaSh1cmkpLnJlYWRBc0J5dGVzU3luYygpOwogIH0KCiAgQG92ZXJyaWRlCiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZGVzZXJpYWxpemVEYXRhKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgICBFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IGFic3RyYWN0VmFsdWVTdHJhdGVneSwKICAgICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAgTGlzdDxpbnQ+IGRhdGEpIHsKICAgIERhdGFTb3VyY2Ugc291cmNlID0gbmV3IEJpbmFyeVNvdXJjZUltcGwoZGF0YSwgdXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwogICAgcmV0dXJuIGRlc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMob3B0aW9ucywgcmVwb3J0ZXIsIGVudmlyb25tZW50LAogICAgICAgIGFic3RyYWN0VmFsdWVTdHJhdGVneSwgY29tcG9uZW50LCBzb3VyY2UpOwogIH0KfQoKY2xhc3MgT2JqZWN0c0luTWVtb3J5U2VyaWFsaXphdGlvblN0cmF0ZWd5CiAgICBleHRlbmRzIFNlcmlhbGl6YXRpb25TdHJhdGVneTxPYmplY3Q+IHsKICBmaW5hbCBib29sIHVzZURhdGFLaW5kczsKCiAgY29uc3QgT2JqZWN0c0luTWVtb3J5U2VyaWFsaXphdGlvblN0cmF0ZWd5KHt0aGlzLnVzZURhdGFLaW5kczogdHJ1ZX0pOwoKICBAb3ZlcnJpZGUKICBMaXN0PE9iamVjdD4gc2VyaWFsaXplRGF0YShHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzKSB7CiAgICBMaXN0PE9iamVjdD4gZGF0YSA9IFtdOwogICAgRGF0YVNpbmsgc2luayA9IG5ldyBPYmplY3RTaW5rKGRhdGEsIHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzKTsKICAgIHNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKHJlc3VsdHMsIHNpbmspOwogICAgcmV0dXJuIGRhdGE7CiAgfQoKICBAb3ZlcnJpZGUKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBkZXNlcmlhbGl6ZURhdGEoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICAgIEVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LAogICAgICBpci5Db21wb25lbnQgY29tcG9uZW50LAogICAgICBMaXN0PE9iamVjdD4gZGF0YSkgewogICAgRGF0YVNvdXJjZSBzb3VyY2UgPSBuZXcgT2JqZWN0U291cmNlKGRhdGEsIHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzKTsKICAgIHJldHVybiBkZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKG9wdGlvbnMsIHJlcG9ydGVyLCBlbnZpcm9ubWVudCwKICAgICAgICBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksIGNvbXBvbmVudCwgc291cmNlKTsKICB9Cn0KgIYATk48ARIBPR04KEgBMh4xISQaJyQdFAEqIQFFNU4tBAE9ATYxNhYEAS4fIx8zHhUCAU4bAUgBDEAoSjgpBAEMLh8jHzMeGFBRMwQCAUwbAUYBDEAuJEwlODQEAQwuHyMfMx4YUFEzBAIBKywbAUkBDEMcRjgRBAEMLh8jHzMeG0xRMwQCATJwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL3N0cmF0ZWdpZXMuZGFydCxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2Evbm9kZXMuZGFydMACPRMvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgc2hvdyBMaW5rOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2p1bXBzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanNfbW9kZWwvdHlwZV9yZWNpcGUuZGFydCcgc2hvdyBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUsIFR5cGVSZWNpcGU7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2lkZV9lZmZlY3RzLmRhcnQnIHNob3cgU2lkZUVmZmVjdHM7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ2ludm9rZV9keW5hbWljX3NwZWNpYWxpemVycy5kYXJ0JzsKaW1wb3J0ICd2YWxpZGF0ZS5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIEhWaXNpdG9yPFI+IHsKICBSIHZpc2l0QWJzKEhBYnMgbm9kZSk7CiAgUiB2aXNpdEFkZChIQWRkIG5vZGUpOwogIFIgdmlzaXRBd2FpdChIQXdhaXQgbm9kZSk7CiAgUiB2aXNpdEJpdEFuZChIQml0QW5kIG5vZGUpOwogIFIgdmlzaXRCaXROb3QoSEJpdE5vdCBub2RlKTsKICBSIHZpc2l0Qml0T3IoSEJpdE9yIG5vZGUpOwogIFIgdmlzaXRCaXRYb3IoSEJpdFhvciBub2RlKTsKICBSIHZpc2l0Qm91bmRzQ2hlY2soSEJvdW5kc0NoZWNrIG5vZGUpOwogIFIgdmlzaXRCcmVhayhIQnJlYWsgbm9kZSk7CiAgUiB2aXNpdENvbnN0YW50KEhDb25zdGFudCBub2RlKTsKICBSIHZpc2l0Q29udGludWUoSENvbnRpbnVlIG5vZGUpOwogIFIgdmlzaXRDcmVhdGUoSENyZWF0ZSBub2RlKTsKICBSIHZpc2l0Q3JlYXRlQm94KEhDcmVhdGVCb3ggbm9kZSk7CiAgUiB2aXNpdERpdmlkZShIRGl2aWRlIG5vZGUpOwogIFIgdmlzaXRFeGl0KEhFeGl0IG5vZGUpOwogIFIgdmlzaXRFeGl0VHJ5KEhFeGl0VHJ5IG5vZGUpOwogIFIgdmlzaXRGaWVsZEdldChIRmllbGRHZXQgbm9kZSk7CiAgUiB2aXNpdEZpZWxkU2V0KEhGaWVsZFNldCBub2RlKTsKICBSIHZpc2l0Rm9yZWlnbkNvZGUoSEZvcmVpZ25Db2RlIG5vZGUpOwogIFIgdmlzaXRHZXRMZW5ndGgoSEdldExlbmd0aCBub2RlKTsKICBSIHZpc2l0R290byhIR290byBub2RlKTsKICBSIHZpc2l0R3JlYXRlcihIR3JlYXRlciBub2RlKTsKICBSIHZpc2l0R3JlYXRlckVxdWFsKEhHcmVhdGVyRXF1YWwgbm9kZSk7CiAgUiB2aXNpdElkZW50aXR5KEhJZGVudGl0eSBub2RlKTsKICBSIHZpc2l0SWYoSElmIG5vZGUpOwogIFIgdmlzaXRJbmRleChISW5kZXggbm9kZSk7CiAgUiB2aXNpdEluZGV4QXNzaWduKEhJbmRleEFzc2lnbiBub2RlKTsKICBSIHZpc2l0SW50ZXJjZXB0b3IoSEludGVyY2VwdG9yIG5vZGUpOwogIFIgdmlzaXRJbnZva2VDbG9zdXJlKEhJbnZva2VDbG9zdXJlIG5vZGUpOwogIFIgdmlzaXRJbnZva2VEeW5hbWljR2V0dGVyKEhJbnZva2VEeW5hbWljR2V0dGVyIG5vZGUpOwogIFIgdmlzaXRJbnZva2VEeW5hbWljTWV0aG9kKEhJbnZva2VEeW5hbWljTWV0aG9kIG5vZGUpOwogIFIgdmlzaXRJbnZva2VEeW5hbWljU2V0dGVyKEhJbnZva2VEeW5hbWljU2V0dGVyIG5vZGUpOwogIFIgdmlzaXRJbnZva2VTdGF0aWMoSEludm9rZVN0YXRpYyBub2RlKTsKICBSIHZpc2l0SW52b2tlU3VwZXIoSEludm9rZVN1cGVyIG5vZGUpOwogIFIgdmlzaXRJbnZva2VDb25zdHJ1Y3RvckJvZHkoSEludm9rZUNvbnN0cnVjdG9yQm9keSBub2RlKTsKICBSIHZpc2l0SW52b2tlR2VuZXJhdG9yQm9keShISW52b2tlR2VuZXJhdG9yQm9keSBub2RlKTsKICBSIHZpc2l0SXMoSElzIG5vZGUpOwogIFIgdmlzaXRJc1ZpYUludGVyY2VwdG9yKEhJc1ZpYUludGVyY2VwdG9yIG5vZGUpOwogIFIgdmlzaXRMYXRlVmFsdWUoSExhdGVWYWx1ZSBub2RlKTsKICBSIHZpc2l0TGF6eVN0YXRpYyhITGF6eVN0YXRpYyBub2RlKTsKICBSIHZpc2l0TGVzcyhITGVzcyBub2RlKTsKICBSIHZpc2l0TGVzc0VxdWFsKEhMZXNzRXF1YWwgbm9kZSk7CiAgUiB2aXNpdExpdGVyYWxMaXN0KEhMaXRlcmFsTGlzdCBub2RlKTsKICBSIHZpc2l0TG9jYWxHZXQoSExvY2FsR2V0IG5vZGUpOwogIFIgdmlzaXRMb2NhbFNldChITG9jYWxTZXQgbm9kZSk7CiAgUiB2aXNpdExvY2FsVmFsdWUoSExvY2FsVmFsdWUgbm9kZSk7CiAgUiB2aXNpdExvb3BCcmFuY2goSExvb3BCcmFuY2ggbm9kZSk7CiAgUiB2aXNpdE11bHRpcGx5KEhNdWx0aXBseSBub2RlKTsKICBSIHZpc2l0TmVnYXRlKEhOZWdhdGUgbm9kZSk7CiAgUiB2aXNpdE5vdChITm90IG5vZGUpOwogIFIgdmlzaXRPbmVTaG90SW50ZXJjZXB0b3IoSE9uZVNob3RJbnRlcmNlcHRvciBub2RlKTsKICBSIHZpc2l0UGFyYW1ldGVyVmFsdWUoSFBhcmFtZXRlclZhbHVlIG5vZGUpOwogIFIgdmlzaXRQaGkoSFBoaSBub2RlKTsKICBSIHZpc2l0UmFuZ2VDb252ZXJzaW9uKEhSYW5nZUNvbnZlcnNpb24gbm9kZSk7CiAgUiB2aXNpdFJlYWRNb2RpZnlXcml0ZShIUmVhZE1vZGlmeVdyaXRlIG5vZGUpOwogIFIgdmlzaXRSZWYoSFJlZiBub2RlKTsKICBSIHZpc2l0UmVtYWluZGVyKEhSZW1haW5kZXIgbm9kZSk7CiAgUiB2aXNpdFJldHVybihIUmV0dXJuIG5vZGUpOwogIFIgdmlzaXRTaGlmdExlZnQoSFNoaWZ0TGVmdCBub2RlKTsKICBSIHZpc2l0U2hpZnRSaWdodChIU2hpZnRSaWdodCBub2RlKTsKICBSIHZpc2l0U3RhdGljKEhTdGF0aWMgbm9kZSk7CiAgUiB2aXNpdFN0YXRpY1N0b3JlKEhTdGF0aWNTdG9yZSBub2RlKTsKICBSIHZpc2l0U3RyaW5nQ29uY2F0KEhTdHJpbmdDb25jYXQgbm9kZSk7CiAgUiB2aXNpdFN0cmluZ2lmeShIU3RyaW5naWZ5IG5vZGUpOwogIFIgdmlzaXRTdWJ0cmFjdChIU3VidHJhY3Qgbm9kZSk7CiAgUiB2aXNpdFN3aXRjaChIU3dpdGNoIG5vZGUpOwogIFIgdmlzaXRUaGlzKEhUaGlzIG5vZGUpOwogIFIgdmlzaXRUaHJvdyhIVGhyb3cgbm9kZSk7CiAgUiB2aXNpdFRocm93RXhwcmVzc2lvbihIVGhyb3dFeHByZXNzaW9uIG5vZGUpOwogIFIgdmlzaXRUcnVuY2F0aW5nRGl2aWRlKEhUcnVuY2F0aW5nRGl2aWRlIG5vZGUpOwogIFIgdmlzaXRUcnkoSFRyeSBub2RlKTsKICBSIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIG5vZGUpOwogIFIgdmlzaXRQcmltaXRpdmVDaGVjayhIUHJpbWl0aXZlQ2hlY2sgbm9kZSk7CiAgUiB2aXNpdEJvb2xDb252ZXJzaW9uKEhCb29sQ29udmVyc2lvbiBub2RlKTsKICBSIHZpc2l0VHlwZUtub3duKEhUeXBlS25vd24gbm9kZSk7CiAgUiB2aXNpdFlpZWxkKEhZaWVsZCBub2RlKTsKCiAgUiB2aXNpdFR5cGVJbmZvUmVhZFJhdyhIVHlwZUluZm9SZWFkUmF3IG5vZGUpOwogIFIgdmlzaXRUeXBlSW5mb1JlYWRWYXJpYWJsZShIVHlwZUluZm9SZWFkVmFyaWFibGUgbm9kZSk7CiAgUiB2aXNpdFR5cGVJbmZvRXhwcmVzc2lvbihIVHlwZUluZm9FeHByZXNzaW9uIG5vZGUpOwoKICAvLyBJbnN0cnVjdGlvbnMgZm9yICdkYXJ0Ol9ydGknLgogIFIgdmlzaXRJc1Rlc3QoSElzVGVzdCBub2RlKTsKICBSIHZpc2l0QXNDaGVjayhIQXNDaGVjayBub2RlKTsKICBSIHZpc2l0QXNDaGVja1NpbXBsZShIQXNDaGVja1NpbXBsZSBub2RlKTsKICBSIHZpc2l0U3VidHlwZUNoZWNrKEhTdWJ0eXBlQ2hlY2sgbm9kZSk7CiAgUiB2aXNpdExvYWRUeXBlKEhMb2FkVHlwZSBub2RlKTsKICBSIHZpc2l0SW5zdGFuY2VFbnZpcm9ubWVudChISW5zdGFuY2VFbnZpcm9ubWVudCBub2RlKTsKICBSIHZpc2l0VHlwZUV2YWwoSFR5cGVFdmFsIG5vZGUpOwogIFIgdmlzaXRUeXBlQmluZChIVHlwZUJpbmQgbm9kZSk7Cn0KCmFic3RyYWN0IGNsYXNzIEhHcmFwaFZpc2l0b3IgewogIHZpc2l0RG9taW5hdG9yVHJlZShIR3JhcGggZ3JhcGgpIHsKICAgIC8vIFJlY3Vyc2lvbiBmcmVlIHZlcnNpb24gb2Y6CiAgICAvLwogICAgLy8gICAgIHZvaWQgdmlzaXRCYXNpY0Jsb2NrQW5kU3VjY2Vzc29ycyhIQmFzaWNCbG9jayBibG9jaykgewogICAgLy8gICAgICAgdmlzaXRCYXNpY0Jsb2NrKGJsb2NrKTsKICAgIC8vICAgICAgIExpc3QgZG9taW5hdGVkID0gYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgLy8gICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkb21pbmF0ZWQubGVuZ3RoOyBpKyspIHsKICAgIC8vICAgICAgICAgdmlzaXRCYXNpY0Jsb2NrQW5kU3VjY2Vzc29ycyhkb21pbmF0ZWRbaV0pOwogICAgLy8gICAgICAgfQogICAgLy8gICAgIH0KICAgIC8vICAgICB2aXNpdEJhc2ljQmxvY2tBbmRTdWNjZXNzb3JzKGdyYXBoLmVudHJ5KTsKCiAgICBfRnJhbWUgZnJhbWUgPSBuZXcgX0ZyYW1lKG51bGwpOwogICAgZnJhbWUuYmxvY2sgPSBncmFwaC5lbnRyeTsKICAgIGZyYW1lLmluZGV4ID0gMDsKCiAgICB2aXNpdEJhc2ljQmxvY2soZnJhbWUuYmxvY2spOwoKICAgIHdoaWxlIChmcmFtZSAhPSBudWxsKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gZnJhbWUuYmxvY2s7CiAgICAgIGludCBpbmRleCA9IGZyYW1lLmluZGV4OwogICAgICBpZiAoaW5kZXggPCBibG9jay5kb21pbmF0ZWRCbG9ja3MubGVuZ3RoKSB7CiAgICAgICAgZnJhbWUuaW5kZXggPSBpbmRleCArIDE7CiAgICAgICAgZnJhbWUgPSBmcmFtZS5uZXh0ID8/PSBuZXcgX0ZyYW1lKGZyYW1lKTsKICAgICAgICBmcmFtZS5ibG9jayA9IGJsb2NrLmRvbWluYXRlZEJsb2Nrc1tpbmRleF07CiAgICAgICAgZnJhbWUuaW5kZXggPSAwOwogICAgICAgIHZpc2l0QmFzaWNCbG9jayhmcmFtZS5ibG9jayk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZnJhbWUgPSBmcmFtZS5wcmV2aW91czsKICAgIH0KICB9CgogIHZpc2l0UG9zdERvbWluYXRvclRyZWUoSEdyYXBoIGdyYXBoKSB7CiAgICAvLyBSZWN1c2lvbiBmcmVlIHZlcnNpb24gb2Y6CiAgICAvLwogICAgLy8gICAgIHZvaWQgdmlzaXRCYXNpY0Jsb2NrQW5kU3VjY2Vzc29ycyhIQmFzaWNCbG9jayBibG9jaykgewogICAgLy8gICAgICAgTGlzdCBkb21pbmF0ZWQgPSBibG9jay5kb21pbmF0ZWRCbG9ja3M7CiAgICAvLyAgICAgICBmb3IgKGludCBpID0gZG9taW5hdGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAvLyAgICAgICAgIHZpc2l0QmFzaWNCbG9ja0FuZFN1Y2Nlc3NvcnMoZG9taW5hdGVkW2ldKTsKICAgIC8vICAgICAgIH0KICAgIC8vICAgICAgIHZpc2l0QmFzaWNCbG9jayhibG9jayk7CiAgICAvLyAgICAgfQogICAgLy8gICAgIHZpc2l0QmFzaWNCbG9ja0FuZFN1Y2Nlc3NvcnMoZ3JhcGguZW50cnkpOwoKICAgIF9GcmFtZSBmcmFtZSA9IG5ldyBfRnJhbWUobnVsbCk7CiAgICBmcmFtZS5ibG9jayA9IGdyYXBoLmVudHJ5OwogICAgZnJhbWUuaW5kZXggPSBmcmFtZS5ibG9jay5kb21pbmF0ZWRCbG9ja3MubGVuZ3RoOwoKICAgIHdoaWxlIChmcmFtZSAhPSBudWxsKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gZnJhbWUuYmxvY2s7CiAgICAgIGludCBpbmRleCA9IGZyYW1lLmluZGV4OwogICAgICBpZiAoaW5kZXggPiAwKSB7CiAgICAgICAgZnJhbWUuaW5kZXggPSBpbmRleCAtIDE7CiAgICAgICAgZnJhbWUgPSBmcmFtZS5uZXh0ID8/PSBuZXcgX0ZyYW1lKGZyYW1lKTsKICAgICAgICBmcmFtZS5ibG9jayA9IGJsb2NrLmRvbWluYXRlZEJsb2Nrc1tpbmRleCAtIDFdOwogICAgICAgIGZyYW1lLmluZGV4ID0gZnJhbWUuYmxvY2suZG9taW5hdGVkQmxvY2tzLmxlbmd0aDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB2aXNpdEJhc2ljQmxvY2soYmxvY2spOwogICAgICBmcmFtZSA9IGZyYW1lLnByZXZpb3VzOwogICAgfQogIH0KCiAgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKTsKfQoKY2xhc3MgX0ZyYW1lIHsKICBmaW5hbCBfRnJhbWUgcHJldmlvdXM7CiAgX0ZyYW1lIG5leHQ7CiAgSEJhc2ljQmxvY2sgYmxvY2s7CiAgaW50IGluZGV4OwogIF9GcmFtZSh0aGlzLnByZXZpb3VzKTsKfQoKYWJzdHJhY3QgY2xhc3MgSEluc3RydWN0aW9uVmlzaXRvciBleHRlbmRzIEhHcmFwaFZpc2l0b3IgewogIEhCYXNpY0Jsb2NrIGN1cnJlbnRCbG9jazsKCiAgdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gbm9kZSk7CgogIEBvdmVycmlkZQogIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBub2RlKSB7CiAgICB2b2lkIHZpc2l0SW5zdHJ1Y3Rpb25MaXN0KEhJbnN0cnVjdGlvbkxpc3QgbGlzdCkgewogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBsaXN0LmZpcnN0OwogICAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICAgIHZpc2l0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogICAgICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gIT0gbGlzdC5maXJzdCk7CiAgICAgIH0KICAgIH0KCiAgICBjdXJyZW50QmxvY2sgPSBub2RlOwogICAgdmlzaXRJbnN0cnVjdGlvbkxpc3Qobm9kZSk7CiAgfQp9CgpjbGFzcyBIR3JhcGggewogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHRoaXMgc2hvdWxkIGJlIFtNZW1iZXJMaWtlXS4KICBFbnRpdHkgZWxlbWVudDsgLy8gVXNlZCBmb3IgZGVidWcgcHJpbnRpbmcuCiAgSEJhc2ljQmxvY2sgZW50cnk7CiAgSEJhc2ljQmxvY2sgZXhpdDsKICBIVGhpcyB0aGlzSW5zdHJ1Y3Rpb247CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBncmFwaCBzaG91bGQgYmUgdHJhbnNmb3JtZWQgYnkgYSBzeW5jKi9hc3luYy9hc3luYyoKICAvLy8gcmV3cml0ZS4KICBib29sIG5lZWRzQXN5bmNSZXdyaXRlID0gZmFsc2U7CgogIC8vLyBJZiB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGFuIGFzeW5jIHJld3JpdGUsIHRoaXMgaXMgdGhlIGVsZW1lbnQgdHlwZSBvZgogIC8vLyB0aGUgZ2VuZXJhdG9yLgogIERhcnRUeXBlIGFzeW5jRWxlbWVudFR5cGU7CgogIC8vLyBSZWNlaXZlciBwYXJhbWV0ZXIsIHNldCBmb3IgbWV0aG9kcyB1c2luZyBpbnRlcmNlcHRvciBjYWxsaW5nIGNvbnZlbnRpb24uCiAgSFBhcmFtZXRlclZhbHVlIGV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXI7CiAgYm9vbCBpc1JlY3Vyc2l2ZU1ldGhvZCA9IGZhbHNlOwogIGJvb2wgY2FsbGVkSW5Mb29wID0gZmFsc2U7CgogIGZpbmFsIExpc3Q8SEJhc2ljQmxvY2s+IGJsb2NrcyA9IDxIQmFzaWNCbG9jaz5bXTsKCiAgLy8vIE5vZGVzIGNvbnRhaW5pbmcgbGlzdCBhbGxvY2F0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgYSBrbm93biBmaXhlZCBsZW5ndGguCiAgLy8gVE9ETyhzaWdtdW5kLHNyYSk6IGNvbnNpZGVyIG5vdCBzdG9yaW5nIHRoaXMgZXhwbGljaXRseSBoZXJlIChlLmcuIG1heWJlCiAgLy8gc3RvcmUgaXQgb24gSEluc3RydWN0aW9uLCBvciBtYXliZSB0aGlzIGNhbiBiZSBjb21wdXRlZCBvbiBkZW1hbmQpLgogIGZpbmFsIFNldDxISW5zdHJ1Y3Rpb24+IGFsbG9jYXRlZEZpeGVkTGlzdHMgPSBuZXcgU2V0PEhJbnN0cnVjdGlvbj4oKTsKCiAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb247CgogIC8vIFdlIGNhbm9uaWNhbGl6ZSBhbGwgY29uc3RhbnRzIHVzZWQgd2l0aGluIGEgZ3JhcGggc28gd2UgZG8gbm90CiAgLy8gaGF2ZSB0byB3b3JyeSBhYm91dCB0aGVtIGZvciBnbG9iYWwgdmFsdWUgbnVtYmVyaW5nLgogIE1hcDxDb25zdGFudFZhbHVlLCBIQ29uc3RhbnQ+IGNvbnN0YW50cyA9IG5ldyBNYXA8Q29uc3RhbnRWYWx1ZSwgSENvbnN0YW50PigpOwoKICBIR3JhcGgoKSB7CiAgICBlbnRyeSA9IGFkZE5ld0Jsb2NrKCk7CiAgICAvLyBUaGUgZXhpdCBibG9jayB3aWxsIGJlIGFkZGVkIGxhdGVyLCBzbyBpdCBoYXMgYW4gaWQgdGhhdCBpcwogICAgLy8gYWZ0ZXIgYWxsIG90aGVycyBpbiB0aGUgc3lzdGVtLgogICAgZXhpdCA9IG5ldyBIQmFzaWNCbG9jaygpOwogIH0KCiAgdm9pZCBhZGRCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgaW50IGlkID0gYmxvY2tzLmxlbmd0aDsKICAgIGJsb2NrLmlkID0gaWQ7CiAgICBibG9ja3MuYWRkKGJsb2NrKTsKICAgIGFzc2VydChpZGVudGljYWwoYmxvY2tzW2lkXSwgYmxvY2spKTsKICB9CgogIEhCYXNpY0Jsb2NrIGFkZE5ld0Jsb2NrKCkgewogICAgSEJhc2ljQmxvY2sgcmVzdWx0ID0gbmV3IEhCYXNpY0Jsb2NrKCk7CiAgICBhZGRCbG9jayhyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEhCYXNpY0Jsb2NrIGFkZE5ld0xvb3BIZWFkZXJCbG9jaygKICAgICAgSnVtcFRhcmdldCB0YXJnZXQsIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBsYWJlbHMpIHsKICAgIEhCYXNpY0Jsb2NrIHJlc3VsdCA9IGFkZE5ld0Jsb2NrKCk7CiAgICByZXN1bHQubG9vcEluZm9ybWF0aW9uID0gbmV3IEhMb29wSW5mb3JtYXRpb24ocmVzdWx0LCB0YXJnZXQsIGxhYmVscyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSENvbnN0YW50IGFkZENvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgSENvbnN0YW50IHJlc3VsdCA9IGNvbnN0YW50c1tjb25zdGFudF07CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHNvdXJjZSBpbmZvcm1hdGlvbiBwZXIgY29uc3RhbnQgcmVmZXJlbmNlLgogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIGlmICghY29uc3RhbnQuaXNDb25zdGFudCkgewogICAgICAgIC8vIFdlIHVzZSBgbnVsbGAgYXMgdGhlIHZhbHVlIGZvciBpbnZhbGlkIGNvbnN0YW50IGV4cHJlc3Npb25zLgogICAgICAgIGNvbnN0YW50ID0gY29uc3QgTnVsbENvbnN0YW50VmFsdWUoKTsKICAgICAgfQogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudChjb25zdGFudCk7CiAgICAgIHJlc3VsdCA9IG5ldyBIQ29uc3RhbnQuaW50ZXJuYWwoY29uc3RhbnQsIHR5cGUpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgICBlbnRyeS5hZGRBdEV4aXQocmVzdWx0KTsKICAgICAgY29uc3RhbnRzW2NvbnN0YW50XSA9IHJlc3VsdDsKICAgIH0gZWxzZSBpZiAocmVzdWx0LmJsb2NrID09IG51bGwpIHsKICAgICAgLy8gVGhlIGNvbnN0YW50IHdhcyBub3QgdXNlZCBhbnltb3JlLgogICAgICBlbnRyeS5hZGRBdEV4aXQocmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBIQ29uc3RhbnQgYWRkRGVmZXJyZWRDb25zdGFudChEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBhZGRDb25zdGFudChjb25zdGFudCwgY2xvc2VkV29ybGQsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEhDb25zdGFudCBhZGRDb25zdGFudEludChpbnQgaSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYWRkQ29uc3RhbnQoY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludEZyb21JbnQoaSksIGNsb3NlZFdvcmxkKTsKICB9CgogIEhDb25zdGFudCBhZGRDb25zdGFudEludEFzVW5zaWduZWQoaW50IGksIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGFkZENvbnN0YW50KAogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQobmV3IEJpZ0ludC5mcm9tKGkpLnRvVW5zaWduZWQoNjQpKSwKICAgICAgICBjbG9zZWRXb3JsZCk7CiAgfQoKICBIQ29uc3RhbnQgYWRkQ29uc3RhbnREb3VibGUoZG91YmxlIGQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGFkZENvbnN0YW50KGNvbnN0YW50X3N5c3RlbS5jcmVhdGVEb3VibGUoZCksIGNsb3NlZFdvcmxkKTsKICB9CgogIEhDb25zdGFudCBhZGRDb25zdGFudFN0cmluZyhTdHJpbmcgc3RyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBhZGRDb25zdGFudChjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKHN0ciksIGNsb3NlZFdvcmxkKTsKICB9CgogIEhDb25zdGFudCBhZGRDb25zdGFudFN0cmluZ0Zyb21OYW1lKGpzLk5hbWUgbmFtZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYWRkQ29uc3RhbnQoCiAgICAgICAgbmV3IEpzTmFtZUNvbnN0YW50VmFsdWUoanMucXVvdGVOYW1lKG5hbWUpKSwgY2xvc2VkV29ybGQpOwogIH0KCiAgSENvbnN0YW50IGFkZENvbnN0YW50Qm9vbChib29sIHZhbHVlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBhZGRDb25zdGFudChjb25zdGFudF9zeXN0ZW0uY3JlYXRlQm9vbCh2YWx1ZSksIGNsb3NlZFdvcmxkKTsKICB9CgogIEhDb25zdGFudCBhZGRDb25zdGFudE51bGwoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYWRkQ29uc3RhbnQoY29uc3RhbnRfc3lzdGVtLmNyZWF0ZU51bGwoKSwgY2xvc2VkV29ybGQpOwogIH0KCiAgSENvbnN0YW50IGFkZENvbnN0YW50VW5yZWFjaGFibGUoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBBIGNvbnN0YW50IHdpdGggYW4gZW1wdHkgdHlwZSB1c2VkIGFzIHRoZSBISW5zdHJ1Y3Rpb24gb2YgYW4gZXhwcmVzc2lvbgogICAgLy8gaW4gYW4gdW5yZWFjaGFibGUgY29udGV4dC4KICAgIHJldHVybiBhZGRDb25zdGFudChjb25zdCBVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUoKSwgY2xvc2VkV29ybGQpOwogIH0KCiAgdm9pZCBmaW5hbGl6ZShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgYWRkQmxvY2soZXhpdCk7CiAgICBleGl0Lm9wZW4oKTsKICAgIGV4aXQuY2xvc2UobmV3IEhFeGl0KGRvbWFpbikpOwogICAgYXNzaWduRG9taW5hdG9ycygpOwogIH0KCiAgdm9pZCBhc3NpZ25Eb21pbmF0b3JzKCkgewogICAgLy8gUnVuIHRocm91Z2ggdGhlIGJsb2NrcyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGlkcyBzbyB3ZSBhcmUKICAgIC8vIGd1YXJhbnRlZWQgdGhhdCB3ZSBoYXZlIGNvbXB1dGVkIGRvbWluYXRvcnMgZm9yIGFsbCBibG9ja3MKICAgIC8vIGhpZ2hlciB1cCBpbiB0aGUgZG9taW5hdG9yIHRyZWUuCiAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gYmxvY2tzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gYmxvY2tzW2ldOwogICAgICBMaXN0PEhCYXNpY0Jsb2NrPiBwcmVkZWNlc3NvcnMgPSBibG9jay5wcmVkZWNlc3NvcnM7CiAgICAgIGlmIChibG9jay5pc0xvb3BIZWFkZXIoKSkgewogICAgICAgIGJsb2NrLmFzc2lnbkNvbW1vbkRvbWluYXRvcihwcmVkZWNlc3NvcnNbMF0pOwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoaW50IGogPSBwcmVkZWNlc3NvcnMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHsKICAgICAgICAgIGJsb2NrLmFzc2lnbkNvbW1vbkRvbWluYXRvcihwcmVkZWNlc3NvcnNbal0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXNzaWduRG9taW5hdG9yUmFuZ2VzKCk7CiAgfQoKICB2b2lkIGFzc2lnbkRvbWluYXRvclJhbmdlcygpIHsKICAgIC8vIERGUyB3YWxrIG9mIGRvbWluYXRvciB0cmVlIHRvIGFzc2lnbiBkZnMtaW4gYW5kIGRmcy1vdXQgbnVtYmVycyB0byBiYXNpYwogICAgLy8gYmxvY2tzLiBBIGRvbWluYXRvciBoYXMgYSBkZnMtaW4uLmRmcy1vdXQgcmFuZ2UgdGhhdCBpbmNsdWRlcyB0aGUgcmFuZ2UKICAgIC8vIG9mIHRoZSBkb21pbmF0ZWQgYmxvY2suIFNlZSBbSEdyYXBoVmlzaXRvci52aXNpdERvbWluYXRvclRyZWVdIGZvcgogICAgLy8gcmVjdXJzaW9uLWZyZWUgc2NoZW1hLgogICAgX0ZyYW1lIGZyYW1lID0gbmV3IF9GcmFtZShudWxsKTsKICAgIGZyYW1lLmJsb2NrID0gZW50cnk7CiAgICBmcmFtZS5pbmRleCA9IDA7CgogICAgaW50IGRmc051bWJlciA9IDA7CiAgICBmcmFtZS5ibG9jay5kb21pbmF0b3JEZnNJbiA9IGRmc051bWJlcjsKCiAgICB3aGlsZSAoZnJhbWUgIT0gbnVsbCkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGZyYW1lLmJsb2NrOwogICAgICBpbnQgaW5kZXggPSBmcmFtZS5pbmRleDsKICAgICAgaWYgKGluZGV4IDwgYmxvY2suZG9taW5hdGVkQmxvY2tzLmxlbmd0aCkgewogICAgICAgIGZyYW1lLmluZGV4ID0gaW5kZXggKyAxOwogICAgICAgIGZyYW1lID0gZnJhbWUubmV4dCA/Pz0gbmV3IF9GcmFtZShmcmFtZSk7CiAgICAgICAgZnJhbWUuYmxvY2sgPSBibG9jay5kb21pbmF0ZWRCbG9ja3NbaW5kZXhdOwogICAgICAgIGZyYW1lLmluZGV4ID0gMDsKICAgICAgICBmcmFtZS5ibG9jay5kb21pbmF0b3JEZnNJbiA9ICsrZGZzTnVtYmVyOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGJsb2NrLmRvbWluYXRvckRmc091dCA9IGRmc051bWJlcjsKICAgICAgZnJhbWUgPSBmcmFtZS5wcmV2aW91czsKICAgIH0KICB9CgogIGJvb2wgaXNWYWxpZCgpIHsKICAgIEhWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEhWYWxpZGF0b3IoKTsKICAgIHZhbGlkYXRvci52aXNpdEdyYXBoKHRoaXMpOwogICAgcmV0dXJuIHZhbGlkYXRvci5pc1ZhbGlkOwogIH0KCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnSEdyYXBoKCRlbGVtZW50KSc7Cn0KCmNsYXNzIEhCYXNlVmlzaXRvciBleHRlbmRzIEhHcmFwaFZpc2l0b3IgaW1wbGVtZW50cyBIVmlzaXRvciB7CiAgSEJhc2ljQmxvY2sgY3VycmVudEJsb2NrOwoKICBAb3ZlcnJpZGUKICB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgbm9kZSkgewogICAgY3VycmVudEJsb2NrID0gbm9kZTsKCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBub2RlLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQ7CiAgICB9CiAgfQoKICB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikge30KCiAgdmlzaXRCaW5hcnlBcml0aG1ldGljKEhCaW5hcnlBcml0aG1ldGljIG5vZGUpID0+IHZpc2l0SW52b2tlQmluYXJ5KG5vZGUpOwogIHZpc2l0QmluYXJ5Qml0T3AoSEJpbmFyeUJpdE9wIG5vZGUpID0+IHZpc2l0SW52b2tlQmluYXJ5KG5vZGUpOwogIHZpc2l0SW52b2tlKEhJbnZva2Ugbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICB2aXNpdEludm9rZUJpbmFyeShISW52b2tlQmluYXJ5IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgdmlzaXRJbnZva2VEeW5hbWljKEhJbnZva2VEeW5hbWljIG5vZGUpID0+IHZpc2l0SW52b2tlKG5vZGUpOwogIHZpc2l0SW52b2tlRHluYW1pY0ZpZWxkKEhJbnZva2VEeW5hbWljRmllbGQgbm9kZSkgPT4gdmlzaXRJbnZva2VEeW5hbWljKG5vZGUpOwogIHZpc2l0SW52b2tlVW5hcnkoSEludm9rZVVuYXJ5IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgdmlzaXRDb25kaXRpb25hbEJyYW5jaChIQ29uZGl0aW9uYWxCcmFuY2ggbm9kZSkgPT4gdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICB2aXNpdENvbnRyb2xGbG93KEhDb250cm9sRmxvdyBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIHZpc2l0RmllbGRBY2Nlc3MoSEZpZWxkQWNjZXNzIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgdmlzaXRSZWxhdGlvbmFsKEhSZWxhdGlvbmFsIG5vZGUpID0+IHZpc2l0SW52b2tlQmluYXJ5KG5vZGUpOwoKICBAb3ZlcnJpZGUKICB2aXNpdEFicyhIQWJzIG5vZGUpID0+IHZpc2l0SW52b2tlVW5hcnkobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRBZGQoSEFkZCBub2RlKSA9PiB2aXNpdEJpbmFyeUFyaXRobWV0aWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXRBbmQoSEJpdEFuZCBub2RlKSA9PiB2aXNpdEJpbmFyeUJpdE9wKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Qml0Tm90KEhCaXROb3Qgbm9kZSkgPT4gdmlzaXRJbnZva2VVbmFyeShub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEJpdE9yKEhCaXRPciBub2RlKSA9PiB2aXNpdEJpbmFyeUJpdE9wKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Qml0WG9yKEhCaXRYb3Igbm9kZSkgPT4gdmlzaXRCaW5hcnlCaXRPcChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBub2RlKSA9PiB2aXNpdENoZWNrKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0QnJlYWsoSEJyZWFrIG5vZGUpID0+IHZpc2l0SnVtcChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdENvbnRpbnVlKEhDb250aW51ZSBub2RlKSA9PiB2aXNpdEp1bXAobm9kZSk7CiAgdmlzaXRDaGVjayhIQ2hlY2sgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdENvbnN0YW50KEhDb25zdGFudCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Q3JlYXRlKEhDcmVhdGUgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdENyZWF0ZUJveChIQ3JlYXRlQm94IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXREaXZpZGUoSERpdmlkZSBub2RlKSA9PiB2aXNpdEJpbmFyeUFyaXRobWV0aWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRFeGl0KEhFeGl0IG5vZGUpID0+IHZpc2l0Q29udHJvbEZsb3cobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRFeGl0VHJ5KEhFeGl0VHJ5IG5vZGUpID0+IHZpc2l0Q29udHJvbEZsb3cobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRGaWVsZEdldChIRmllbGRHZXQgbm9kZSkgPT4gdmlzaXRGaWVsZEFjY2Vzcyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEZpZWxkU2V0KEhGaWVsZFNldCBub2RlKSA9PiB2aXNpdEZpZWxkQWNjZXNzKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Rm9yZWlnbkNvZGUoSEZvcmVpZ25Db2RlIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRHZXRMZW5ndGgoSEdldExlbmd0aCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0R290byhIR290byBub2RlKSA9PiB2aXNpdENvbnRyb2xGbG93KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0R3JlYXRlcihIR3JlYXRlciBub2RlKSA9PiB2aXNpdFJlbGF0aW9uYWwobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRHcmVhdGVyRXF1YWwoSEdyZWF0ZXJFcXVhbCBub2RlKSA9PiB2aXNpdFJlbGF0aW9uYWwobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJZGVudGl0eShISWRlbnRpdHkgbm9kZSkgPT4gdmlzaXRSZWxhdGlvbmFsKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SWYoSElmIG5vZGUpID0+IHZpc2l0Q29uZGl0aW9uYWxCcmFuY2gobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbmRleChISW5kZXggbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEluZGV4QXNzaWduKEhJbmRleEFzc2lnbiBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJjZXB0b3IoSEludGVyY2VwdG9yIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VDbG9zdXJlKEhJbnZva2VDbG9zdXJlIG5vZGUpID0+IHZpc2l0SW52b2tlRHluYW1pYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUNvbnN0cnVjdG9yQm9keShISW52b2tlQ29uc3RydWN0b3JCb2R5IG5vZGUpID0+CiAgICAgIHZpc2l0SW52b2tlU3RhdGljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlR2VuZXJhdG9yQm9keShISW52b2tlR2VuZXJhdG9yQm9keSBub2RlKSA9PgogICAgICB2aXNpdEludm9rZVN0YXRpYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUR5bmFtaWNNZXRob2QoSEludm9rZUR5bmFtaWNNZXRob2Qgbm9kZSkgPT4KICAgICAgdmlzaXRJbnZva2VEeW5hbWljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlRHluYW1pY0dldHRlcihISW52b2tlRHluYW1pY0dldHRlciBub2RlKSA9PgogICAgICB2aXNpdEludm9rZUR5bmFtaWNGaWVsZChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUR5bmFtaWNTZXR0ZXIoSEludm9rZUR5bmFtaWNTZXR0ZXIgbm9kZSkgPT4KICAgICAgdmlzaXRJbnZva2VEeW5hbWljRmllbGQobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VTdGF0aWMoSEludm9rZVN0YXRpYyBub2RlKSA9PiB2aXNpdEludm9rZShub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZVN1cGVyKEhJbnZva2VTdXBlciBub2RlKSA9PiB2aXNpdEludm9rZVN0YXRpYyhub2RlKTsKICB2aXNpdEp1bXAoSEp1bXAgbm9kZSkgPT4gdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExhenlTdGF0aWMoSExhenlTdGF0aWMgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExlc3MoSExlc3Mgbm9kZSkgPT4gdmlzaXRSZWxhdGlvbmFsKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TGVzc0VxdWFsKEhMZXNzRXF1YWwgbm9kZSkgPT4gdmlzaXRSZWxhdGlvbmFsKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TGl0ZXJhbExpc3QoSExpdGVyYWxMaXN0IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgdmlzaXRMb2NhbEFjY2VzcyhITG9jYWxBY2Nlc3Mgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExvY2FsR2V0KEhMb2NhbEdldCBub2RlKSA9PiB2aXNpdExvY2FsQWNjZXNzKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TG9jYWxTZXQoSExvY2FsU2V0IG5vZGUpID0+IHZpc2l0TG9jYWxBY2Nlc3Mobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMb2NhbFZhbHVlKEhMb2NhbFZhbHVlIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMb29wQnJhbmNoKEhMb29wQnJhbmNoIG5vZGUpID0+IHZpc2l0Q29uZGl0aW9uYWxCcmFuY2gobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXROZWdhdGUoSE5lZ2F0ZSBub2RlKSA9PiB2aXNpdEludm9rZVVuYXJ5KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Tm90KEhOb3Qgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpID0+IHZpc2l0SW52b2tlRHluYW1pYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFBoaShIUGhpIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRNdWx0aXBseShITXVsdGlwbHkgbm9kZSkgPT4gdmlzaXRCaW5hcnlBcml0aG1ldGljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0UGFyYW1ldGVyVmFsdWUoSFBhcmFtZXRlclZhbHVlIG5vZGUpID0+IHZpc2l0TG9jYWxWYWx1ZShub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFJhbmdlQ29udmVyc2lvbihIUmFuZ2VDb252ZXJzaW9uIG5vZGUpID0+IHZpc2l0Q2hlY2sobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRSZWFkTW9kaWZ5V3JpdGUoSFJlYWRNb2RpZnlXcml0ZSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0UmVmKEhSZWYgbm9kZSkgPT4gbm9kZS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRSZW1haW5kZXIoSFJlbWFpbmRlciBub2RlKSA9PiB2aXNpdEJpbmFyeUFyaXRobWV0aWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRSZXR1cm4oSFJldHVybiBub2RlKSA9PiB2aXNpdENvbnRyb2xGbG93KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0U2hpZnRMZWZ0KEhTaGlmdExlZnQgbm9kZSkgPT4gdmlzaXRCaW5hcnlCaXRPcChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFNoaWZ0UmlnaHQoSFNoaWZ0UmlnaHQgbm9kZSkgPT4gdmlzaXRCaW5hcnlCaXRPcChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFN1YnRyYWN0KEhTdWJ0cmFjdCBub2RlKSA9PiB2aXNpdEJpbmFyeUFyaXRobWV0aWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTd2l0Y2goSFN3aXRjaCBub2RlKSA9PiB2aXNpdENvbnRyb2xGbG93KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljKEhTdGF0aWMgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY1N0b3JlKEhTdGF0aWNTdG9yZSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0U3RyaW5nQ29uY2F0KEhTdHJpbmdDb25jYXQgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFN0cmluZ2lmeShIU3RyaW5naWZ5IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUaGlzKEhUaGlzIG5vZGUpID0+IHZpc2l0UGFyYW1ldGVyVmFsdWUobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUaHJvdyhIVGhyb3cgbm9kZSkgPT4gdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFRocm93RXhwcmVzc2lvbihIVGhyb3dFeHByZXNzaW9uIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUcnVuY2F0aW5nRGl2aWRlKEhUcnVuY2F0aW5nRGl2aWRlIG5vZGUpID0+IHZpc2l0QmluYXJ5QXJpdGhtZXRpYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFRyeShIVHJ5IG5vZGUpID0+IHZpc2l0Q29udHJvbEZsb3cobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJcyhISXMgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExhdGVWYWx1ZShITGF0ZVZhbHVlIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJc1ZpYUludGVyY2VwdG9yKEhJc1ZpYUludGVyY2VwdG9yIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlQ29udmVyc2lvbihIVHlwZUNvbnZlcnNpb24gbm9kZSkgPT4gdmlzaXRDaGVjayhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEJvb2xDb252ZXJzaW9uKEhCb29sQ29udmVyc2lvbiBub2RlKSA9PiB2aXNpdENoZWNrKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0UHJpbWl0aXZlQ2hlY2soSFByaW1pdGl2ZUNoZWNrIG5vZGUpID0+IHZpc2l0Q2hlY2sobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlS25vd24oSFR5cGVLbm93biBub2RlKSA9PiB2aXNpdENoZWNrKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0QXdhaXQoSEF3YWl0IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRZaWVsZChIWWllbGQgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlSW5mb1JlYWRSYXcoSFR5cGVJbmZvUmVhZFJhdyBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VHlwZUluZm9SZWFkVmFyaWFibGUoSFR5cGVJbmZvUmVhZFZhcmlhYmxlIG5vZGUpID0+CiAgICAgIHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZUluZm9FeHByZXNzaW9uKEhUeXBlSW5mb0V4cHJlc3Npb24gbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRJc1Rlc3QoSElzVGVzdCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0QXNDaGVjayhIQXNDaGVjayBub2RlKSA9PiB2aXNpdENoZWNrKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0QXNDaGVja1NpbXBsZShIQXNDaGVja1NpbXBsZSBub2RlKSA9PiB2aXNpdENoZWNrKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0U3VidHlwZUNoZWNrKEhTdWJ0eXBlQ2hlY2sgbm9kZSkgPT4gdmlzaXRDaGVjayhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExvYWRUeXBlKEhMb2FkVHlwZSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW5zdGFuY2VFbnZpcm9ubWVudChISW5zdGFuY2VFbnZpcm9ubWVudCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VHlwZUV2YWwoSFR5cGVFdmFsIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlQmluZChIVHlwZUJpbmQgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKfQoKY2xhc3MgU3ViR3JhcGggewogIC8vIFRoZSBmaXJzdCBhbmQgbGFzdCBibG9jayBvZiB0aGUgc3ViLWdyYXBoLgogIGZpbmFsIEhCYXNpY0Jsb2NrIHN0YXJ0OwogIGZpbmFsIEhCYXNpY0Jsb2NrIGVuZDsKCiAgY29uc3QgU3ViR3JhcGgodGhpcy5zdGFydCwgdGhpcy5lbmQpOwoKICBib29sIGNvbnRhaW5zKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBhc3NlcnQoc3RhcnQgIT0gbnVsbCk7CiAgICBhc3NlcnQoZW5kICE9IG51bGwpOwogICAgYXNzZXJ0KGJsb2NrICE9IG51bGwpOwogICAgcmV0dXJuIHN0YXJ0LmlkIDw9IGJsb2NrLmlkICYmIGJsb2NrLmlkIDw9IGVuZC5pZDsKICB9Cn0KCmNsYXNzIFN1YkV4cHJlc3Npb24gZXh0ZW5kcyBTdWJHcmFwaCB7CiAgY29uc3QgU3ViRXhwcmVzc2lvbihIQmFzaWNCbG9jayBzdGFydCwgSEJhc2ljQmxvY2sgZW5kKSA6IHN1cGVyKHN0YXJ0LCBlbmQpOwoKICAvLy8gRmluZCB0aGUgY29uZGl0aW9uIGV4cHJlc3Npb24gaWYgdGhpcyBzdWItZXhwcmVzc2lvbiBpcyBhIGNvbmRpdGlvbi4KICBISW5zdHJ1Y3Rpb24gZ2V0IGNvbmRpdGlvbkV4cHJlc3Npb24gewogICAgSEluc3RydWN0aW9uIGxhc3QgPSBlbmQubGFzdDsKICAgIGlmIChsYXN0IGlzIEhDb25kaXRpb25hbEJyYW5jaCB8fCBsYXN0IGlzIEhTd2l0Y2gpIHJldHVybiBsYXN0LmlucHV0c1swXTsKICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgSEluc3RydWN0aW9uTGlzdCB7CiAgSEluc3RydWN0aW9uIGZpcnN0ID0gbnVsbDsKICBISW5zdHJ1Y3Rpb24gbGFzdCA9IG51bGw7CgogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIGZpcnN0ID09IG51bGw7CiAgfQoKICB2b2lkIGludGVybmFsQWRkQWZ0ZXIoSEluc3RydWN0aW9uIGN1cnNvciwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoY3Vyc29yID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGlzRW1wdHkpOwogICAgICBmaXJzdCA9IGxhc3QgPSBpbnN0cnVjdGlvbjsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKGN1cnNvciwgbGFzdCkpIHsKICAgICAgbGFzdC5uZXh0ID0gaW5zdHJ1Y3Rpb247CiAgICAgIGluc3RydWN0aW9uLnByZXZpb3VzID0gbGFzdDsKICAgICAgbGFzdCA9IGluc3RydWN0aW9uOwogICAgfSBlbHNlIHsKICAgICAgaW5zdHJ1Y3Rpb24ucHJldmlvdXMgPSBjdXJzb3I7CiAgICAgIGluc3RydWN0aW9uLm5leHQgPSBjdXJzb3IubmV4dDsKICAgICAgY3Vyc29yLm5leHQucHJldmlvdXMgPSBpbnN0cnVjdGlvbjsKICAgICAgY3Vyc29yLm5leHQgPSBpbnN0cnVjdGlvbjsKICAgIH0KICB9CgogIHZvaWQgaW50ZXJuYWxBZGRCZWZvcmUoSEluc3RydWN0aW9uIGN1cnNvciwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoY3Vyc29yID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGlzRW1wdHkpOwogICAgICBmaXJzdCA9IGxhc3QgPSBpbnN0cnVjdGlvbjsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKGN1cnNvciwgZmlyc3QpKSB7CiAgICAgIGZpcnN0LnByZXZpb3VzID0gaW5zdHJ1Y3Rpb247CiAgICAgIGluc3RydWN0aW9uLm5leHQgPSBmaXJzdDsKICAgICAgZmlyc3QgPSBpbnN0cnVjdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIGluc3RydWN0aW9uLm5leHQgPSBjdXJzb3I7CiAgICAgIGluc3RydWN0aW9uLnByZXZpb3VzID0gY3Vyc29yLnByZXZpb3VzOwogICAgICBjdXJzb3IucHJldmlvdXMubmV4dCA9IGluc3RydWN0aW9uOwogICAgICBjdXJzb3IucHJldmlvdXMgPSBpbnN0cnVjdGlvbjsKICAgIH0KICB9CgogIHZvaWQgZGV0YWNoKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KF90cnVuY2F0ZWRDb250YWluc0ZvckFzc2VydChpbnN0cnVjdGlvbikpOwogICAgYXNzZXJ0KGluc3RydWN0aW9uLmlzSW5CYXNpY0Jsb2NrKCkpOwogICAgaWYgKGluc3RydWN0aW9uLnByZXZpb3VzID09IG51bGwpIHsKICAgICAgZmlyc3QgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgfSBlbHNlIHsKICAgICAgaW5zdHJ1Y3Rpb24ucHJldmlvdXMubmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICB9CiAgICBpZiAoaW5zdHJ1Y3Rpb24ubmV4dCA9PSBudWxsKSB7CiAgICAgIGxhc3QgPSBpbnN0cnVjdGlvbi5wcmV2aW91czsKICAgIH0gZWxzZSB7CiAgICAgIGluc3RydWN0aW9uLm5leHQucHJldmlvdXMgPSBpbnN0cnVjdGlvbi5wcmV2aW91czsKICAgIH0KICAgIGluc3RydWN0aW9uLnByZXZpb3VzID0gbnVsbDsKICAgIGluc3RydWN0aW9uLm5leHQgPSBudWxsOwogIH0KCiAgdm9pZCByZW1vdmUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24udXNlZEJ5LmlzRW1wdHkpOwogICAgZGV0YWNoKGluc3RydWN0aW9uKTsKICB9CgogIC8vLyBMaW5lYXIgc2VhcmNoIGZvciBbaW5zdHJ1Y3Rpb25dLgogIGJvb2wgY29udGFpbnMoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gY3Vyc29yID0gZmlyc3Q7CiAgICB3aGlsZSAoY3Vyc29yICE9IG51bGwpIHsKICAgICAgaWYgKGlkZW50aWNhbChjdXJzb3IsIGluc3RydWN0aW9uKSkgcmV0dXJuIHRydWU7CiAgICAgIGN1cnNvciA9IGN1cnNvci5uZXh0OwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBMaW5lYXIgc2VhcmNoIGZvciBbaW5zdHJ1Y3Rpb25dLCB1cCB0byBhIGxpbWl0IG9mIDEwMC4gUmV0dXJucyB3aGV0aGVyCiAgLy8vIHRoZSBpbnN0cnVjdGlvbiBpcyBmb3VuZCBvciB0aGUgbGlzdCBpcyB0b28gYmlnLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIGFzc2VydGlvbnMgb25seTogc29tZSB0ZXN0cyBoYXZlIHBhdGhvbG9naWNhbCBjYXNlcyB3aGVyZQogIC8vLyB0aGUgYmFzaWMgYmxvY2tzIGFyZSBodWdlICg1MEsgbm9kZXMhKSwgYW5kIHdlIGZvdW5kIHRoYXQgY2hlY2tpbmcgZm9yCiAgLy8vIFtjb250YWluc10gd2l0aGluIG91ciBhc3NlcnRpb25zIG1hZGUgY29tcGlsYXRpb24gcmVhbGx5IHNsb3cuCiAgYm9vbCBfdHJ1bmNhdGVkQ29udGFpbnNGb3JBc3NlcnQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gY3Vyc29yID0gZmlyc3Q7CiAgICBpbnQgY291bnQgPSAwOwogICAgd2hpbGUgKGN1cnNvciAhPSBudWxsKSB7CiAgICAgIGNvdW50Kys7CiAgICAgIGlmIChjb3VudCA+IDEwMCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpZGVudGljYWwoY3Vyc29yLCBpbnN0cnVjdGlvbikpIHJldHVybiB0cnVlOwogICAgICBjdXJzb3IgPSBjdXJzb3IubmV4dDsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgpjbGFzcyBIQmFzaWNCbG9jayBleHRlbmRzIEhJbnN0cnVjdGlvbkxpc3QgewogIC8vIFRoZSBbaWRdIG11c3QgYmUgc3VjaCB0aGF0IGFueSBzdWNjZXNzb3IncyBpZCBpcyBncmVhdGVyIHRoYW4KICAvLyB0aGlzIFtpZF0uIFRoZSBleGNlcHRpb24gYXJlIGJhY2stZWRnZXMuCiAgaW50IGlkOwoKICBzdGF0aWMgY29uc3QgaW50IFNUQVRVU19ORVcgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgU1RBVFVTX09QRU4gPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgU1RBVFVTX0NMT1NFRCA9IDI7CiAgaW50IHN0YXR1cyA9IFNUQVRVU19ORVc7CgogIEhJbnN0cnVjdGlvbkxpc3QgcGhpczsKCiAgSExvb3BJbmZvcm1hdGlvbiBsb29wSW5mb3JtYXRpb24gPSBudWxsOwogIEhCbG9ja0Zsb3cgYmxvY2tGbG93ID0gbnVsbDsKICBIQmFzaWNCbG9jayBwYXJlbnRMb29wSGVhZGVyID0gbnVsbDsKICBib29sIGlzTGl2ZSA9IHRydWU7CgogIGZpbmFsIExpc3Q8SEJhc2ljQmxvY2s+IHByZWRlY2Vzc29yczsKICBMaXN0PEhCYXNpY0Jsb2NrPiBzdWNjZXNzb3JzOwoKICBIQmFzaWNCbG9jayBkb21pbmF0b3IgPSBudWxsOwogIGZpbmFsIExpc3Q8SEJhc2ljQmxvY2s+IGRvbWluYXRlZEJsb2NrczsKICBpbnQgZG9taW5hdG9yRGZzSW47CiAgaW50IGRvbWluYXRvckRmc091dDsKCiAgSEJhc2ljQmxvY2soKSA6IHRoaXMud2l0aElkKG51bGwpOwogIEhCYXNpY0Jsb2NrLndpdGhJZCh0aGlzLmlkKQogICAgICA6IHBoaXMgPSBuZXcgSEluc3RydWN0aW9uTGlzdCgpLAogICAgICAgIHByZWRlY2Vzc29ycyA9IDxIQmFzaWNCbG9jaz5bXSwKICAgICAgICBzdWNjZXNzb3JzID0gY29uc3QgPEhCYXNpY0Jsb2NrPltdLAogICAgICAgIGRvbWluYXRlZEJsb2NrcyA9IDxIQmFzaWNCbG9jaz5bXTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBpZDsKCiAgYm9vbCBpc05ldygpID0+IHN0YXR1cyA9PSBTVEFUVVNfTkVXOwogIGJvb2wgaXNPcGVuKCkgPT4gc3RhdHVzID09IFNUQVRVU19PUEVOOwogIGJvb2wgaXNDbG9zZWQoKSA9PiBzdGF0dXMgPT0gU1RBVFVTX0NMT1NFRDsKCiAgYm9vbCBpc0xvb3BIZWFkZXIoKSB7CiAgICByZXR1cm4gbG9vcEluZm9ybWF0aW9uICE9IG51bGw7CiAgfQoKICB2b2lkIHNldEJsb2NrRmxvdyhIQmxvY2tJbmZvcm1hdGlvbiBibG9ja0luZm8sIEhCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbikgewogICAgYmxvY2tGbG93ID0gbmV3IEhCbG9ja0Zsb3coYmxvY2tJbmZvLCBjb250aW51YXRpb24pOwogIH0KCiAgYm9vbCBpc0xhYmVsZWRCbG9jaygpID0+CiAgICAgIGJsb2NrRmxvdyAhPSBudWxsICYmIGJsb2NrRmxvdy5ib2R5IGlzIEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbjsKCiAgSEJhc2ljQmxvY2sgZ2V0IGVuY2xvc2luZ0xvb3BIZWFkZXIgewogICAgaWYgKGlzTG9vcEhlYWRlcigpKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBwYXJlbnRMb29wSGVhZGVyOwogIH0KCiAgdm9pZCBvcGVuKCkgewogICAgYXNzZXJ0KGlzTmV3KCkpOwogICAgc3RhdHVzID0gU1RBVFVTX09QRU47CiAgfQoKICB2b2lkIGNsb3NlKEhDb250cm9sRmxvdyBlbmQpIHsKICAgIGFzc2VydChpc09wZW4oKSk7CiAgICBhZGRBZnRlcihsYXN0LCBlbmQpOwogICAgc3RhdHVzID0gU1RBVFVTX0NMT1NFRDsKICB9CgogIHZvaWQgYWRkQXRFbnRyeShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpbnN0cnVjdGlvbiBpcyEgSFBoaSk7CiAgICBpbnRlcm5hbEFkZEJlZm9yZShmaXJzdCwgaW5zdHJ1Y3Rpb24pOwogICAgaW5zdHJ1Y3Rpb24ubm90aWZ5QWRkZWRUb0Jsb2NrKHRoaXMpOwogIH0KCiAgdm9pZCBhZGRBdEV4aXQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoaXNDbG9zZWQoKSk7CiAgICBhc3NlcnQobGFzdCBpcyBIQ29udHJvbEZsb3cpOwogICAgYXNzZXJ0KGluc3RydWN0aW9uIGlzISBIUGhpKTsKICAgIGludGVybmFsQWRkQmVmb3JlKGxhc3QsIGluc3RydWN0aW9uKTsKICAgIGluc3RydWN0aW9uLm5vdGlmeUFkZGVkVG9CbG9jayh0aGlzKTsKICB9CgogIHZvaWQgbW92ZUF0RXhpdChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpbnN0cnVjdGlvbiBpcyEgSFBoaSk7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24uaXNJbkJhc2ljQmxvY2soKSk7CiAgICBhc3NlcnQoaXNDbG9zZWQoKSk7CiAgICBhc3NlcnQobGFzdCBpcyBIQ29udHJvbEZsb3cpOwogICAgaW50ZXJuYWxBZGRCZWZvcmUobGFzdCwgaW5zdHJ1Y3Rpb24pOwogICAgaW5zdHJ1Y3Rpb24uYmxvY2sgPSB0aGlzOwogICAgYXNzZXJ0KGlzVmFsaWQoKSk7CiAgfQoKICB2b2lkIGFkZChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpbnN0cnVjdGlvbiBpcyEgSENvbnRyb2xGbG93KTsKICAgIGFzc2VydChpbnN0cnVjdGlvbiBpcyEgSFBoaSk7CiAgICBpbnRlcm5hbEFkZEFmdGVyKGxhc3QsIGluc3RydWN0aW9uKTsKICAgIGluc3RydWN0aW9uLm5vdGlmeUFkZGVkVG9CbG9jayh0aGlzKTsKICB9CgogIHZvaWQgYWRkUGhpKEhQaGkgcGhpKSB7CiAgICBhc3NlcnQocGhpLmlucHV0cy5sZW5ndGggPT0gMCB8fCBwaGkuaW5wdXRzLmxlbmd0aCA9PSBwcmVkZWNlc3NvcnMubGVuZ3RoKTsKICAgIGFzc2VydChwaGkuYmxvY2sgPT0gbnVsbCk7CiAgICBwaGlzLmludGVybmFsQWRkQWZ0ZXIocGhpcy5sYXN0LCBwaGkpOwogICAgcGhpLm5vdGlmeUFkZGVkVG9CbG9jayh0aGlzKTsKICB9CgogIHZvaWQgcmVtb3ZlUGhpKEhQaGkgcGhpKSB7CiAgICBwaGlzLnJlbW92ZShwaGkpOwogICAgYXNzZXJ0KHBoaS5ibG9jayA9PSB0aGlzKTsKICAgIHBoaS5ub3RpZnlSZW1vdmVkRnJvbUJsb2NrKCk7CiAgfQoKICB2b2lkIGFkZEFmdGVyKEhJbnN0cnVjdGlvbiBjdXJzb3IsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGN1cnNvciBpcyEgSFBoaSk7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMhIEhQaGkpOwogICAgYXNzZXJ0KGlzT3BlbigpIHx8IGlzQ2xvc2VkKCkpOwogICAgaW50ZXJuYWxBZGRBZnRlcihjdXJzb3IsIGluc3RydWN0aW9uKTsKICAgIGluc3RydWN0aW9uLm5vdGlmeUFkZGVkVG9CbG9jayh0aGlzKTsKICB9CgogIHZvaWQgYWRkQmVmb3JlKEhJbnN0cnVjdGlvbiBjdXJzb3IsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGN1cnNvciBpcyEgSFBoaSk7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMhIEhQaGkpOwogICAgYXNzZXJ0KGlzT3BlbigpIHx8IGlzQ2xvc2VkKCkpOwogICAgaW50ZXJuYWxBZGRCZWZvcmUoY3Vyc29yLCBpbnN0cnVjdGlvbik7CiAgICBpbnN0cnVjdGlvbi5ub3RpZnlBZGRlZFRvQmxvY2sodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpc09wZW4oKSB8fCBpc0Nsb3NlZCgpKTsKICAgIGFzc2VydChpbnN0cnVjdGlvbiBpcyEgSFBoaSk7CiAgICBzdXBlci5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgYXNzZXJ0KGluc3RydWN0aW9uLmJsb2NrID09IHRoaXMpOwogICAgaW5zdHJ1Y3Rpb24ubm90aWZ5UmVtb3ZlZEZyb21CbG9jaygpOwogIH0KCiAgdm9pZCBhZGRTdWNjZXNzb3IoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmIChzdWNjZXNzb3JzLmlzRW1wdHkpIHsKICAgICAgc3VjY2Vzc29ycyA9IFtibG9ja107CiAgICB9IGVsc2UgewogICAgICBzdWNjZXNzb3JzLmFkZChibG9jayk7CiAgICB9CiAgICBibG9jay5wcmVkZWNlc3NvcnMuYWRkKHRoaXMpOwogIH0KCiAgdm9pZCBwb3N0UHJvY2Vzc0xvb3BIZWFkZXIoKSB7CiAgICBhc3NlcnQoaXNMb29wSGVhZGVyKCkpOwogICAgLy8gT25seSB0aGUgZmlyc3QgZW50cnkgaW50byB0aGUgbG9vcCBpcyBmcm9tIG91dHNpZGUgdGhlCiAgICAvLyBsb29wLiBBbGwgb3RoZXIgZW50cmllcyBtdXN0IGJlIGJhY2sgZWRnZXMuCiAgICBmb3IgKGludCBpID0gMSwgbGVuZ3RoID0gcHJlZGVjZXNzb3JzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGxvb3BJbmZvcm1hdGlvbi5hZGRCYWNrRWRnZShwcmVkZWNlc3NvcnNbaV0pOwogICAgfQogIH0KCiAgLy8vIFJld3JpdGVzIGFsbCB1c2VzIG9mIHRoZSBbZnJvbV0gaW5zdHJ1Y3Rpb24gdG8gdXNpbmcgdGhlIFt0b10KICAvLy8gaW5zdHJ1Y3Rpb24gaW5zdGVhZC4KICB2b2lkIHJld3JpdGUoSEluc3RydWN0aW9uIGZyb20sIEhJbnN0cnVjdGlvbiB0bykgewogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlIGluIGZyb20udXNlZEJ5KSB7CiAgICAgIHVzZS5yZXdyaXRlSW5wdXQoZnJvbSwgdG8pOwogICAgfQogICAgdG8udXNlZEJ5LmFkZEFsbChmcm9tLnVzZWRCeSk7CiAgICBmcm9tLnVzZWRCeS5jbGVhcigpOwogIH0KCiAgLy8vIFJld3JpdGVzIGFsbCB1c2VzIG9mIHRoZSBbZnJvbV0gaW5zdHJ1Y3Rpb24gdG8gdXNpbmcgZWl0aGVyIHRoZQogIC8vLyBbdG9dIGluc3RydWN0aW9uLCBvciBhIFtIQ2hlY2tdIGluc3RydWN0aW9uIHRoYXQgaGFzIGJldHRlciB0eXBlCiAgLy8vIGluZm9ybWF0aW9uIG9uIFt0b10sIGFuZCB0aGF0IGRvbWluYXRlcyB0aGUgdXNlci4KICB2b2lkIHJld3JpdGVXaXRoQmV0dGVyVXNlcihISW5zdHJ1Y3Rpb24gZnJvbSwgSEluc3RydWN0aW9uIHRvKSB7CiAgICAvLyBCVUcoMTE4NDEpOiBUdXJuIHRoaXMgbWV0aG9kIGludG8gYSBwaGFzZSB0byBiZSBydW4gYWZ0ZXIgR1ZOIHBoYXNlcy4KICAgIExpbms8SENoZWNrPiBiZXR0ZXIgPSBjb25zdCBMaW5rPEhDaGVjaz4oKTsKICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gdG8udXNlZEJ5KSB7CiAgICAgIGlmICh1c2VyID09IGZyb20gfHwgdXNlciBpcyEgSENoZWNrKSBjb250aW51ZTsKICAgICAgSENoZWNrIGNoZWNrID0gdXNlcjsKICAgICAgaWYgKGNoZWNrLmNoZWNrZWRJbnB1dCA9PSB0bykgewogICAgICAgIGJldHRlciA9IGJldHRlci5wcmVwZW5kKHVzZXIpOwogICAgICB9CiAgICB9CgogICAgaWYgKGJldHRlci5pc0VtcHR5KSByZXR1cm4gcmV3cml0ZShmcm9tLCB0byk7CgogICAgTDE6CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIGZyb20udXNlZEJ5KSB7CiAgICAgIGZvciAoSENoZWNrIGNoZWNrIGluIGJldHRlcikgewogICAgICAgIGlmIChjaGVjay5kb21pbmF0ZXModXNlcikpIHsKICAgICAgICAgIHVzZXIucmV3cml0ZUlucHV0KGZyb20sIGNoZWNrKTsKICAgICAgICAgIGNoZWNrLnVzZWRCeS5hZGQodXNlcik7CiAgICAgICAgICBjb250aW51ZSBMMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdXNlci5yZXdyaXRlSW5wdXQoZnJvbSwgdG8pOwogICAgICB0by51c2VkQnkuYWRkKHVzZXIpOwogICAgfQogICAgZnJvbS51c2VkQnkuY2xlYXIoKTsKICB9CgogIGJvb2wgaXNFeGl0QmxvY2soKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKGZpcnN0LCBsYXN0KSAmJiBmaXJzdCBpcyBIRXhpdDsKICB9CgogIHZvaWQgYWRkRG9taW5hdGVkQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGFzc2VydChpc0Nsb3NlZCgpKTsKICAgIGFzc2VydChpZCAhPSBudWxsICYmIGJsb2NrLmlkICE9IG51bGwpOwogICAgYXNzZXJ0KGRvbWluYXRlZEJsb2Nrcy5pbmRleE9mKGJsb2NrKSA8IDApOwogICAgLy8gS2VlcCB0aGUgbGlzdCBvZiBkb21pbmF0ZWQgYmxvY2tzIHNvcnRlZCBzdWNoIHRoYXQgaWYgdGhlcmUgYXJlIHR3bwogICAgLy8gc3VjY2VlZGluZyBibG9ja3MgaW4gdGhlIGxpc3QsIHRoZSBwcmVkZWNlc3NvciBpcyBiZWZvcmUgdGhlIHN1Y2Nlc3Nvci4KICAgIC8vIEFzc3VtZSB0aGF0IHdlIGFkZCB0aGUgZG9taW5hdGVkIGJsb2NrcyBpbiB0aGUgcmlnaHQgb3JkZXIuCiAgICBpbnQgaW5kZXggPSBkb21pbmF0ZWRCbG9ja3MubGVuZ3RoOwogICAgd2hpbGUgKGluZGV4ID4gMCAmJiBkb21pbmF0ZWRCbG9ja3NbaW5kZXggLSAxXS5pZCA+IGJsb2NrLmlkKSB7CiAgICAgIGluZGV4LS07CiAgICB9CiAgICBpZiAoaW5kZXggPT0gZG9taW5hdGVkQmxvY2tzLmxlbmd0aCkgewogICAgICBkb21pbmF0ZWRCbG9ja3MuYWRkKGJsb2NrKTsKICAgIH0gZWxzZSB7CiAgICAgIGRvbWluYXRlZEJsb2Nrcy5pbnNlcnQoaW5kZXgsIGJsb2NrKTsKICAgIH0KICAgIGFzc2VydChibG9jay5kb21pbmF0b3IgPT0gbnVsbCk7CiAgICBibG9jay5kb21pbmF0b3IgPSB0aGlzOwogIH0KCiAgdm9pZCByZW1vdmVEb21pbmF0ZWRCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgYXNzZXJ0KGlzQ2xvc2VkKCkpOwogICAgYXNzZXJ0KGlkICE9IG51bGwgJiYgYmxvY2suaWQgIT0gbnVsbCk7CiAgICBpbnQgaW5kZXggPSBkb21pbmF0ZWRCbG9ja3MuaW5kZXhPZihibG9jayk7CiAgICBhc3NlcnQoaW5kZXggPj0gMCk7CiAgICBpZiAoaW5kZXggPT0gZG9taW5hdGVkQmxvY2tzLmxlbmd0aCAtIDEpIHsKICAgICAgZG9taW5hdGVkQmxvY2tzLnJlbW92ZUxhc3QoKTsKICAgIH0gZWxzZSB7CiAgICAgIGRvbWluYXRlZEJsb2Nrcy5yZW1vdmVSYW5nZShpbmRleCwgaW5kZXggKyAxKTsKICAgIH0KICAgIGFzc2VydChpZGVudGljYWwoYmxvY2suZG9taW5hdG9yLCB0aGlzKSk7CiAgICBibG9jay5kb21pbmF0b3IgPSBudWxsOwogIH0KCiAgdm9pZCBhc3NpZ25Db21tb25Eb21pbmF0b3IoSEJhc2ljQmxvY2sgcHJlZGVjZXNzb3IpIHsKICAgIGFzc2VydChpc0Nsb3NlZCgpKTsKICAgIGlmIChkb21pbmF0b3IgPT0gbnVsbCkgewogICAgICAvLyBJZiB0aGlzIGJhc2ljIGJsb2NrIGRvZXNuJ3QgaGF2ZSBhIGRvbWluYXRvciB5ZXQgd2UgdXNlIHRoZQogICAgICAvLyBnaXZlbiBwcmVkZWNlc3NvciBhcyB0aGUgZG9taW5hdG9yLgogICAgICBwcmVkZWNlc3Nvci5hZGREb21pbmF0ZWRCbG9jayh0aGlzKTsKICAgIH0gZWxzZSBpZiAocHJlZGVjZXNzb3IuZG9taW5hdG9yICE9IG51bGwpIHsKICAgICAgLy8gSWYgdGhlIHByZWRlY2Vzc29yIGhhcyBhIGRvbWluYXRvciBhbmQgdGhpcyBiYXNpYyBibG9jayBoYXMgYQogICAgICAvLyBkb21pbmF0b3IsIHdlIGZpbmQgYSBjb21tb24gcGFyZW50IGluIHRoZSBkb21pbmF0b3IgdHJlZSBhbmQKICAgICAgLy8gdXNlIHRoYXQgYXMgdGhlIGRvbWluYXRvci4KICAgICAgSEJhc2ljQmxvY2sgYmxvY2swID0gZG9taW5hdG9yOwogICAgICBIQmFzaWNCbG9jayBibG9jazEgPSBwcmVkZWNlc3NvcjsKICAgICAgd2hpbGUgKCFpZGVudGljYWwoYmxvY2swLCBibG9jazEpKSB7CiAgICAgICAgaWYgKGJsb2NrMC5pZCA+IGJsb2NrMS5pZCkgewogICAgICAgICAgYmxvY2swID0gYmxvY2swLmRvbWluYXRvcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYmxvY2sxID0gYmxvY2sxLmRvbWluYXRvcjsKICAgICAgICB9CiAgICAgICAgYXNzZXJ0KGJsb2NrMCAhPSBudWxsICYmIGJsb2NrMSAhPSBudWxsKTsKICAgICAgfQogICAgICBpZiAoIWlkZW50aWNhbChkb21pbmF0b3IsIGJsb2NrMCkpIHsKICAgICAgICBkb21pbmF0b3IucmVtb3ZlRG9taW5hdGVkQmxvY2sodGhpcyk7CiAgICAgICAgYmxvY2swLmFkZERvbWluYXRlZEJsb2NrKHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGZvckVhY2hQaGkodm9pZCBmKEhQaGkgcGhpKSkgewogICAgSFBoaSBjdXJyZW50ID0gcGhpcy5maXJzdDsKICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIHNhdmVkID0gY3VycmVudC5uZXh0OwogICAgICBmKGN1cnJlbnQpOwogICAgICBjdXJyZW50ID0gc2F2ZWQ7CiAgICB9CiAgfQoKICB2b2lkIGZvckVhY2hJbnN0cnVjdGlvbih2b2lkIGYoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSkgewogICAgSEluc3RydWN0aW9uIGN1cnJlbnQgPSBmaXJzdDsKICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIHNhdmVkID0gY3VycmVudC5uZXh0OwogICAgICBmKGN1cnJlbnQpOwogICAgICBjdXJyZW50ID0gc2F2ZWQ7CiAgICB9CiAgfQoKICBib29sIGlzVmFsaWQoKSB7CiAgICBhc3NlcnQoaXNDbG9zZWQoKSk7CiAgICBIVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBIVmFsaWRhdG9yKCk7CiAgICB2YWxpZGF0b3IudmlzaXRCYXNpY0Jsb2NrKHRoaXMpOwogICAgcmV0dXJuIHZhbGlkYXRvci5pc1ZhbGlkOwogIH0KCiAgYm9vbCBkb21pbmF0ZXMoSEJhc2ljQmxvY2sgb3RoZXIpIHsKICAgIHJldHVybiB0aGlzLmRvbWluYXRvckRmc0luIDw9IG90aGVyLmRvbWluYXRvckRmc0luICYmCiAgICAgICAgb3RoZXIuZG9taW5hdG9yRGZzT3V0IDw9IHRoaXMuZG9taW5hdG9yRGZzT3V0OwogIH0KCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnSEJhc2ljQmxvY2soJGlkKSc7Cn0KCmFic3RyYWN0IGNsYXNzIEhJbnN0cnVjdGlvbiBpbXBsZW1lbnRzIFNwYW5uYWJsZSB7CiAgRW50aXR5IHNvdXJjZUVsZW1lbnQ7CiAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb247CgogIGZpbmFsIGludCBpZDsKICBzdGF0aWMgaW50IGlkQ291bnRlcjsKCiAgZmluYWwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0czsKICBmaW5hbCBMaXN0PEhJbnN0cnVjdGlvbj4gdXNlZEJ5OwoKICBIQmFzaWNCbG9jayBibG9jazsKICBISW5zdHJ1Y3Rpb24gcHJldmlvdXMgPSBudWxsOwogIEhJbnN0cnVjdGlvbiBuZXh0ID0gbnVsbDsKCiAgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMuZW1wdHkoKTsKICBib29sIF91c2VHdm4gPSBmYWxzZTsKCiAgLy8gVHlwZSBjb2Rlcy4KICBzdGF0aWMgY29uc3QgaW50IFVOREVGSU5FRF9UWVBFQ09ERSA9IC0xOwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9HVUFSRF9UWVBFQ09ERSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBCT1VORFNfQ0hFQ0tfVFlQRUNPREUgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgSU5URUdFUl9DSEVDS19UWVBFQ09ERSA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBJTlRFUkNFUFRPUl9UWVBFQ09ERSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBBRERfVFlQRUNPREUgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgRElWSURFX1RZUEVDT0RFID0gNjsKICBzdGF0aWMgY29uc3QgaW50IE1VTFRJUExZX1RZUEVDT0RFID0gNzsKICBzdGF0aWMgY29uc3QgaW50IFNVQlRSQUNUX1RZUEVDT0RFID0gODsKICBzdGF0aWMgY29uc3QgaW50IFNISUZUX0xFRlRfVFlQRUNPREUgPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgQklUX09SX1RZUEVDT0RFID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBCSVRfQU5EX1RZUEVDT0RFID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBCSVRfWE9SX1RZUEVDT0RFID0gMTI7CiAgc3RhdGljIGNvbnN0IGludCBORUdBVEVfVFlQRUNPREUgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IEJJVF9OT1RfVFlQRUNPREUgPSAxNDsKICBzdGF0aWMgY29uc3QgaW50IE5PVF9UWVBFQ09ERSA9IDE1OwogIHN0YXRpYyBjb25zdCBpbnQgSURFTlRJVFlfVFlQRUNPREUgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IEdSRUFURVJfVFlQRUNPREUgPSAxNzsKICBzdGF0aWMgY29uc3QgaW50IEdSRUFURVJfRVFVQUxfVFlQRUNPREUgPSAxODsKICBzdGF0aWMgY29uc3QgaW50IExFU1NfVFlQRUNPREUgPSAxOTsKICBzdGF0aWMgY29uc3QgaW50IExFU1NfRVFVQUxfVFlQRUNPREUgPSAyMDsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRJQ19UWVBFQ09ERSA9IDIxOwogIHN0YXRpYyBjb25zdCBpbnQgU1RBVElDX1NUT1JFX1RZUEVDT0RFID0gMjI7CiAgc3RhdGljIGNvbnN0IGludCBGSUVMRF9HRVRfVFlQRUNPREUgPSAyMzsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfQ09OVkVSU0lPTl9UWVBFQ09ERSA9IDI0OwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9LTk9XTl9UWVBFQ09ERSA9IDI1OwogIHN0YXRpYyBjb25zdCBpbnQgSU5WT0tFX1NUQVRJQ19UWVBFQ09ERSA9IDI2OwogIHN0YXRpYyBjb25zdCBpbnQgSU5ERVhfVFlQRUNPREUgPSAyNzsKICBzdGF0aWMgY29uc3QgaW50IElTX1RZUEVDT0RFID0gMjg7CiAgc3RhdGljIGNvbnN0IGludCBJTlZPS0VfRFlOQU1JQ19UWVBFQ09ERSA9IDI5OwogIHN0YXRpYyBjb25zdCBpbnQgU0hJRlRfUklHSFRfVFlQRUNPREUgPSAzMDsKCiAgc3RhdGljIGNvbnN0IGludCBUUlVOQ0FUSU5HX0RJVklERV9UWVBFQ09ERSA9IDM2OwogIHN0YXRpYyBjb25zdCBpbnQgSVNfVklBX0lOVEVSQ0VQVE9SX1RZUEVDT0RFID0gMzc7CgogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9JTkZPX1JFQURfUkFXX1RZUEVDT0RFID0gMzg7CiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0lORk9fUkVBRF9WQVJJQUJMRV9UWVBFQ09ERSA9IDM5OwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9JTkZPX0VYUFJFU1NJT05fVFlQRUNPREUgPSA0MDsKCiAgc3RhdGljIGNvbnN0IGludCBGT1JFSUdOX0NPREVfVFlQRUNPREUgPSA0MTsKICBzdGF0aWMgY29uc3QgaW50IFJFTUFJTkRFUl9UWVBFQ09ERSA9IDQyOwogIHN0YXRpYyBjb25zdCBpbnQgR0VUX0xFTkdUSF9UWVBFQ09ERSA9IDQzOwogIHN0YXRpYyBjb25zdCBpbnQgQUJTX1RZUEVDT0RFID0gNDQ7CiAgc3RhdGljIGNvbnN0IGludCBCT09MX0NPTlZFUlNJT05fVFlQRUNPREUgPSA0NTsKICBzdGF0aWMgY29uc3QgaW50IFBSSU1JVElWRV9DSEVDS19UWVBFQ09ERSA9IDQ2OwoKICBzdGF0aWMgY29uc3QgaW50IElTX1RFU1RfVFlQRUNPREUgPSA0NzsKICBzdGF0aWMgY29uc3QgaW50IEFTX0NIRUNLX1RZUEVDT0RFID0gNDg7CiAgc3RhdGljIGNvbnN0IGludCBBU19DSEVDS19TSU1QTEVfVFlQRUNPREUgPSA0OTsKICBzdGF0aWMgY29uc3QgaW50IFNVQlRZUEVfQ0hFQ0tfVFlQRUNPREUgPSA1MDsKICBzdGF0aWMgY29uc3QgaW50IExPQURfVFlQRV9UWVBFQ09ERSA9IDUxOwogIHN0YXRpYyBjb25zdCBpbnQgSU5TVEFOQ0VfRU5WSVJPTk1FTlRfVFlQRUNPREUgPSA1MjsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfRVZBTF9UWVBFQ09ERSA9IDUzOwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9CSU5EX1RZUEVDT0RFID0gNTQ7CgogIEhJbnN0cnVjdGlvbih0aGlzLmlucHV0cywgdGhpcy5pbnN0cnVjdGlvblR5cGUpCiAgICAgIDogaWQgPSBpZENvdW50ZXIrKywKICAgICAgICB1c2VkQnkgPSA8SEluc3RydWN0aW9uPltdIHsKICAgIGFzc2VydChpbnB1dHMuZXZlcnkoKGUpID0+IGUgIT0gbnVsbCksICJpbnB1dHM6ICRpbnB1dHMiKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaWQ7CgogIGJvb2wgdXNlR3ZuKCkgPT4gX3VzZUd2bjsKICB2b2lkIHNldFVzZUd2bigpIHsKICAgIF91c2VHdm4gPSB0cnVlOwogIH0KCiAgYm9vbCBnZXQgaXNNb3ZhYmxlID0+IHVzZUd2bigpOwoKICAvLy8gQSBwdXJlIGluc3RydWN0aW9uIGlzIGFuIGluc3RydWN0aW9uIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgc2lkZQogIC8vLyBlZmZlY3QsIG5vciBhbnkgZGVwZW5kZW5jeS4gVGhleSBjYW4gYmUgbW92ZWQgYW55d2hlcmUgaW4gdGhlCiAgLy8vIGdyYXBoLgogIGJvb2wgaXNQdXJlKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICByZXR1cm4gIXNpZGVFZmZlY3RzLmhhc1NpZGVFZmZlY3RzKCkgJiYKICAgICAgICAhc2lkZUVmZmVjdHMuZGVwZW5kc09uU29tZXRoaW5nKCkgJiYKICAgICAgICAhY2FuVGhyb3coZG9tYWluKTsKICB9CgogIC8vLyBBbiBpbnN0cnVjdGlvbiBpcyBhbiAnYWxsb2NhdGlvbicgaXMgaXQgaXMgdGhlIHNvbGUgYWxpYXMgZm9yIGFuIG9iamVjdC4KICAvLy8gVGhpcyBhcHBsaWVzIHRvIGluc3RydWN0aW9ucyB0aGF0IGFsbG9jYXRlIG5ldyBvYmplY3RzIGFuZCBjYW4gYmUgZXh0ZW5kZWQKICAvLy8gdG8gbWV0aG9kcyB0aGF0IHJldHVybiBvdGhlciBhbGxvY2F0aW9ucyB3aXRob3V0IGVzY2FwaW5nIHRoZW0uCiAgYm9vbCBpc0FsbG9jYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IGZhbHNlOwoKICAvLy8gT3ZlcnJpZGRlbiBieSBbSENoZWNrXSB0byByZXR1cm4gdGhlIGFjdHVhbCBub24tW0hDaGVja10KICAvLy8gaW5zdHJ1Y3Rpb24gaXQgY2hlY2tzIGFnYWluc3QuCiAgSEluc3RydWN0aW9uIG5vbkNoZWNrKCkgPT4gdGhpczsKCiAgLy8vIENhbiB0aGlzIG5vZGUgdGhyb3cgYW4gZXhjZXB0aW9uPwogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IGZhbHNlOwoKICAvLy8gRG9lcyB0aGlzIG5vZGUgcG90ZW50aWFsbHkgYWZmZWN0IGNvbnRyb2wgZmxvdy4KICBib29sIGlzQ29udHJvbEZsb3coKSA9PiBmYWxzZTsKCiAgYm9vbCBpc1ZhbHVlKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNQcmltaXRpdmVWYWx1ZShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNOdWxsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNOdWxsKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0NvbmZsaWN0aW5nKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNFbXB0eShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmUoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1ByaW1pdGl2ZShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVOdW1iZXIoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1ByaW1pdGl2ZU51bWJlcihpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVCb29sZWFuKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNQcmltaXRpdmVCb29sZWFuKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZUFycmF5KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNQcmltaXRpdmVBcnJheShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNJbmRleGFibGVQcmltaXRpdmUoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0luZGV4YWJsZVByaW1pdGl2ZShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNGaXhlZEFycmF5KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNGaXhlZEFycmF5KGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0V4dGVuZGFibGVBcnJheShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzRXh0ZW5kYWJsZUFycmF5KGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc011dGFibGVBcnJheShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzTXV0YWJsZUFycmF5KGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc011dGFibGVJbmRleGFibGUoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc011dGFibGVJbmRleGFibGUoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzQXJyYXkoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0FycmF5KGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZVN0cmluZyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzUHJpbWl0aXZlU3RyaW5nKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0ludGVnZXIoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0ludGVnZXIoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzVUludDMyKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNVSW50MzIoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzVUludDMxKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNVSW50MzEoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzUG9zaXRpdmVJbnRlZ2VyKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNQb3NpdGl2ZUludGVnZXIoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzUG9zaXRpdmVJbnRlZ2VyT3JOdWxsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNQb3NpdGl2ZUludGVnZXJPck51bGwoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzSW50ZWdlck9yTnVsbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzSW50ZWdlck9yTnVsbChpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNOdW1iZXIoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc051bWJlcihpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNOdW1iZXJPck51bGwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc051bWJlck9yTnVsbChpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNEb3VibGUoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0RvdWJsZShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNEb3VibGVPck51bGwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0RvdWJsZU9yTnVsbChpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNCb29sZWFuKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNCb29sZWFuKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW5Pck51bGwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0Jvb2xlYW5Pck51bGwoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzU3RyaW5nKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNTdHJpbmcoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzU3RyaW5nT3JOdWxsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNTdHJpbmdPck51bGwoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlT3JOdWxsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNQcmltaXRpdmVPck51bGwoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgLy8vIFR5cGUgb2YgdGhlIGluc3RydWN0aW9uLgogIEFic3RyYWN0VmFsdWUgaW5zdHJ1Y3Rpb25UeXBlOwoKICBTZWxlY3RvciBnZXQgc2VsZWN0b3IgPT4gbnVsbDsKICBISW5zdHJ1Y3Rpb24gZ2V0RGFydFJlY2VpdmVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gbnVsbDsKICBib29sIG9ubHlUaHJvd3NOU00oKSA9PiBmYWxzZTsKCiAgYm9vbCBpc0luQmFzaWNCbG9jaygpID0+IGJsb2NrICE9IG51bGw7CgogIGJvb2wgZ3ZuRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgewogICAgYXNzZXJ0KHVzZUd2bigpICYmIG90aGVyLnVzZUd2bigpKTsKICAgIC8vIENoZWNrIHRoYXQgdGhlIHR5cGUgYW5kIHRoZSBzaWRlRWZmZWN0cyBtYXRjaC4KICAgIGJvb2wgaGFzU2FtZVR5cGUgPSB0eXBlRXF1YWxzKG90aGVyKTsKICAgIGFzc2VydChoYXNTYW1lVHlwZSA9PSAodHlwZUNvZGUoKSA9PSBvdGhlci50eXBlQ29kZSgpKSk7CiAgICBpZiAoIWhhc1NhbWVUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoc2lkZUVmZmVjdHMgIT0gb3RoZXIuc2lkZUVmZmVjdHMpIHJldHVybiBmYWxzZTsKICAgIC8vIENoZWNrIHRoYXQgdGhlIGlucHV0cyBtYXRjaC4KICAgIGZpbmFsIGludCBpbnB1dHNMZW5ndGggPSBpbnB1dHMubGVuZ3RoOwogICAgZmluYWwgTGlzdDxISW5zdHJ1Y3Rpb24+IG90aGVySW5wdXRzID0gb3RoZXIuaW5wdXRzOwogICAgaWYgKGlucHV0c0xlbmd0aCAhPSBvdGhlcklucHV0cy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzTGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFpZGVudGljYWwoaW5wdXRzW2ldLm5vbkNoZWNrKCksIG90aGVySW5wdXRzW2ldLm5vbkNoZWNrKCkpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICAvLyBDaGVjayB0aGF0IHRoZSBkYXRhIGluIHRoZSBpbnN0cnVjdGlvbiBtYXRjaGVzLgogICAgcmV0dXJuIGRhdGFFcXVhbHMob3RoZXIpOwogIH0KCiAgaW50IGd2bkhhc2hDb2RlKCkgewogICAgaW50IHJlc3VsdCA9IHR5cGVDb2RlKCk7CiAgICBpbnQgbGVuZ3RoID0gaW5wdXRzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0ID0gKHJlc3VsdCAqIDE5KSArIChpbnB1dHNbaV0ubm9uQ2hlY2soKS5pZCkgKyAocmVzdWx0ID4+IDcpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGluc3RydWN0aW9ucyB0aGF0CiAgLy8gcGFydGljaXBhdGUgaW4gZ2xvYmFsIHZhbHVlIG51bWJlcmluZy4KICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uVU5ERUZJTkVEX1RZUEVDT0RFOwogIGJvb2wgdHlwZUVxdWFscyhjb3ZhcmlhbnQgSEluc3RydWN0aW9uIG90aGVyKSA9PiBmYWxzZTsKICBib29sIGRhdGFFcXVhbHMoY292YXJpYW50IEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gZmFsc2U7CgogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKTsKCiAgdm9pZCBub3RpZnlBZGRlZFRvQmxvY2soSEJhc2ljQmxvY2sgdGFyZ2V0QmxvY2spIHsKICAgIGFzc2VydCghaXNJbkJhc2ljQmxvY2soKSk7CiAgICBhc3NlcnQoYmxvY2sgPT0gbnVsbCk7CiAgICAvLyBBZGQgW3RoaXNdIHRvIHRoZSBpbnB1dHMnIHVzZXMuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICBhc3NlcnQoaW5wdXRzW2ldLmlzSW5CYXNpY0Jsb2NrKCkpOwogICAgICBpbnB1dHNbaV0udXNlZEJ5LmFkZCh0aGlzKTsKICAgIH0KICAgIGJsb2NrID0gdGFyZ2V0QmxvY2s7CiAgICBhc3NlcnQoaXNWYWxpZCgpKTsKICB9CgogIHZvaWQgbm90aWZ5UmVtb3ZlZEZyb21CbG9jaygpIHsKICAgIGFzc2VydChpc0luQmFzaWNCbG9jaygpKTsKICAgIGFzc2VydCh1c2VkQnkuaXNFbXB0eSk7CgogICAgLy8gUmVtb3ZlIFt0aGlzXSBmcm9tIHRoZSBpbnB1dHMnIHVzZXMuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICBpbnB1dHNbaV0ucmVtb3ZlVXNlcih0aGlzKTsKICAgIH0KICAgIHRoaXMuYmxvY2sgPSBudWxsOwogICAgYXNzZXJ0KGlzVmFsaWQoKSk7CiAgfQoKICAvLy8gRG8gYSBpbi1wbGFjZSBjaGFuZ2Ugb2YgW2Zyb21dIHRvIFt0b10uIFdhcm5pbmc6IHRoaXMgZnVuY3Rpb24KICAvLy8gZG9lcyBub3QgdXBkYXRlIFtpbnB1dHNdIGFuZCBbdXNlZEJ5XS4gVXNlIFtjaGFuZ2VVc2VdIGluc3RlYWQuCiAgdm9pZCByZXdyaXRlSW5wdXQoSEluc3RydWN0aW9uIGZyb20sIEhJbnN0cnVjdGlvbiB0bykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGlkZW50aWNhbChpbnB1dHNbaV0sIGZyb20pKSBpbnB1dHNbaV0gPSB0bzsKICAgIH0KICB9CgogIC8vLyBSZW1vdmVzIGFsbCBvY2N1cnJlbmNlcyBvZiBbaW5zdHJ1Y3Rpb25dIGZyb20gW2xpc3RdLgogIHZvaWQgcmVtb3ZlRnJvbUxpc3QoTGlzdDxISW5zdHJ1Y3Rpb24+IGxpc3QsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaW50IGxlbmd0aCA9IGxpc3QubGVuZ3RoOwogICAgaW50IGkgPSAwOwogICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAgaWYgKGluc3RydWN0aW9uID09IGxpc3RbaV0pIHsKICAgICAgICBsaXN0W2ldID0gbGlzdFtsZW5ndGggLSAxXTsKICAgICAgICBsZW5ndGgtLTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpKys7CiAgICAgIH0KICAgIH0KICAgIGxpc3QubGVuZ3RoID0gbGVuZ3RoOwogIH0KCiAgLy8vIFJlbW92ZXMgYWxsIG9jY3VycmVuY2VzIG9mIFt1c2VyXSBmcm9tIFt1c2VkQnldLgogIHZvaWQgcmVtb3ZlVXNlcihISW5zdHJ1Y3Rpb24gdXNlcikgewogICAgcmVtb3ZlRnJvbUxpc3QodXNlZEJ5LCB1c2VyKTsKICB9CgogIC8vIENoYW5nZSBhbGwgdXNlcyBvZiBbb2xkSW5wdXRdIGJ5IFt0aGlzXSB0byBbbmV3SW5wdXRdLiBBbHNvCiAgLy8gdXBkYXRlcyB0aGUgW3VzZWRCeV0gb2YgW29sZElucHV0XSBhbmQgW25ld0lucHV0XS4KICB2b2lkIGNoYW5nZVVzZShISW5zdHJ1Y3Rpb24gb2xkSW5wdXQsIEhJbnN0cnVjdGlvbiBuZXdJbnB1dCkgewogICAgYXNzZXJ0KG5ld0lucHV0ICE9IG51bGwgJiYgIWlkZW50aWNhbChvbGRJbnB1dCwgbmV3SW5wdXQpKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChpZGVudGljYWwoaW5wdXRzW2ldLCBvbGRJbnB1dCkpIHsKICAgICAgICBpbnB1dHNbaV0gPSBuZXdJbnB1dDsKICAgICAgICBuZXdJbnB1dC51c2VkQnkuYWRkKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZW1vdmVGcm9tTGlzdChvbGRJbnB1dC51c2VkQnksIHRoaXMpOwogIH0KCiAgdm9pZCByZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeSgKICAgICAgSEluc3RydWN0aW9uIGN1cnNvciwgSEluc3RydWN0aW9uIG5ld0luc3RydWN0aW9uKSB7CiAgICBEb21pbmF0ZWRVc2VzLm9mKHRoaXMsIGN1cnNvcikucmVwbGFjZVdpdGgobmV3SW5zdHJ1Y3Rpb24pOwogIH0KCiAgdm9pZCBtb3ZlQmVmb3JlKEhJbnN0cnVjdGlvbiBvdGhlcikgewogICAgYXNzZXJ0KHRoaXMgaXMhIEhDb250cm9sRmxvdyk7CiAgICBhc3NlcnQodGhpcyBpcyEgSFBoaSk7CiAgICBhc3NlcnQob3RoZXIgaXMhIEhQaGkpOwogICAgYmxvY2suZGV0YWNoKHRoaXMpOwogICAgb3RoZXIuYmxvY2suaW50ZXJuYWxBZGRCZWZvcmUob3RoZXIsIHRoaXMpOwogICAgYmxvY2sgPSBvdGhlci5ibG9jazsKICB9CgogIGJvb2wgaXNDb25zdGFudCgpID0+IGZhbHNlOwogIGJvb2wgaXNDb25zdGFudEJvb2xlYW4oKSA9PiBmYWxzZTsKICBib29sIGlzQ29uc3RhbnROdWxsKCkgPT4gZmFsc2U7CiAgYm9vbCBpc0NvbnN0YW50TnVtYmVyKCkgPT4gZmFsc2U7CiAgYm9vbCBpc0NvbnN0YW50SW50ZWdlcigpID0+IGZhbHNlOwogIGJvb2wgaXNDb25zdGFudFN0cmluZygpID0+IGZhbHNlOwogIGJvb2wgaXNDb25zdGFudExpc3QoKSA9PiBmYWxzZTsKICBib29sIGlzQ29uc3RhbnRNYXAoKSA9PiBmYWxzZTsKICBib29sIGlzQ29uc3RhbnRGYWxzZSgpID0+IGZhbHNlOwogIGJvb2wgaXNDb25zdGFudFRydWUoKSA9PiBmYWxzZTsKCiAgYm9vbCBpc0ludGVyY2VwdG9yKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gZmFsc2U7CgogIGJvb2wgaXNWYWxpZCgpIHsKICAgIEhWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEhWYWxpZGF0b3IoKTsKICAgIHZhbGlkYXRvci5jdXJyZW50QmxvY2sgPSBibG9jazsKICAgIHZhbGlkYXRvci52aXNpdEluc3RydWN0aW9uKHRoaXMpOwogICAgcmV0dXJuIHZhbGlkYXRvci5pc1ZhbGlkOwogIH0KCiAgYm9vbCBpc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSA9PiBmYWxzZTsKCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gZmFsc2U7CgogIGJvb2wgZG9taW5hdGVzKEhJbnN0cnVjdGlvbiBvdGhlcikgewogICAgLy8gQW4gaW5zdHJ1Y3Rpb24gZG9lcyBub3QgZG9taW5hdGVzIGl0c2VsZi4KICAgIGlmICh0aGlzID09IG90aGVyKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoYmxvY2sgIT0gb3RoZXIuYmxvY2spIHJldHVybiBibG9jay5kb21pbmF0ZXMob3RoZXIuYmxvY2spOwoKICAgIEhJbnN0cnVjdGlvbiBjdXJyZW50ID0gdGhpcy5uZXh0OwogICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICBpZiAoY3VycmVudCA9PSBvdGhlcikgcmV0dXJuIHRydWU7CiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBISW5zdHJ1Y3Rpb24gY29udmVydFR5cGUoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBEYXJ0VHlwZSB0eXBlLCBpbnQga2luZCkgewogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIHRoaXM7CiAgICB0eXBlID0gdHlwZS51bmFsaWFzZWQ7CiAgICAvLyBPbmx5IHRoZSBidWlsZGVyIGtub3dzIGhvdyB0byBjcmVhdGUgW0hUeXBlQ29udmVyc2lvbl0KICAgIC8vIGluc3RydWN0aW9ucyB3aXRoIGdlbmVyaWNzLiBJdCBoYXMgdGhlIGdlbmVyaWMgdHlwZSBjb250ZXh0CiAgICAvLyBhdmFpbGFibGUuCiAgICBhc3NlcnQoIXR5cGUuaXNUeXBlVmFyaWFibGUpOwogICAgYXNzZXJ0KHR5cGUudHJlYXRBc1JhdyB8fCB0eXBlLmlzRnVuY3Rpb25UeXBlKTsKICAgIGlmICh0eXBlLmlzRHluYW1pYykgcmV0dXJuIHRoaXM7CiAgICBpZiAodHlwZS5pc1ZvaWQpIHJldHVybiB0aGlzOwogICAgaWYgKHR5cGUgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSkgcmV0dXJuIHRoaXM7CiAgICBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSB8fCB0eXBlLmlzRnV0dXJlT3IpIHsKICAgICAgcmV0dXJuIG5ldyBIVHlwZUNvbnZlcnNpb24odHlwZSwga2luZCwKICAgICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIHRoaXMsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICAgIGFzc2VydCh0eXBlLmlzSW50ZXJmYWNlVHlwZSk7CiAgICBpZiAoa2luZCA9PSBIVHlwZUNvbnZlcnNpb24uVFlQRV9DSEVDSyAmJiAhdHlwZS50cmVhdEFzUmF3KSB7CiAgICAgIHRocm93ICdjcmVhdGluZyBjb21wb3VuZCBjaGVjayB0byAkdHlwZSAodGhpcyA9ICR7dGhpc30pJzsKICAgIH0gZWxzZSB7CiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICAgIEFic3RyYWN0VmFsdWUgc3VidHlwZSA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5jcmVhdGVOdWxsYWJsZVN1YnR5cGUoaW50ZXJmYWNlVHlwZS5lbGVtZW50KTsKICAgICAgcmV0dXJuIG5ldyBIVHlwZUNvbnZlcnNpb24odHlwZSwga2luZCwgc3VidHlwZSwgdGhpcywgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgLy8vIFJldHVybiB3aGV0aGVyIHRoZSBpbnN0cnVjdGlvbnMgZG8gbm90IGJlbG9uZyB0byBhIGxvb3Agb3IKICAvLy8gYmVsb25nIHRvIHRoZSBzYW1lIGxvb3AuCiAgYm9vbCBoYXNTYW1lTG9vcEhlYWRlckFzKEhJbnN0cnVjdGlvbiBvdGhlcikgewogICAgcmV0dXJuIGJsb2NrLmVuY2xvc2luZ0xvb3BIZWFkZXIgPT0gb3RoZXIuYmxvY2suZW5jbG9zaW5nTG9vcEhlYWRlcjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke3RoaXMucnVudGltZVR5cGV9KCknOwp9CgovLy8gVGhlIHNldCBvZiB1c2VzIG9mIFtzb3VyY2VdIHRoYXQgYXJlIGRvbWluYXRlZCBieSBbZG9taW5hdG9yXS4KY2xhc3MgRG9taW5hdGVkVXNlcyB7CiAgZmluYWwgSEluc3RydWN0aW9uIF9zb3VyY2U7CgogIC8vIFR3byBsaXN0IG9mIG1hdGNoaW5nIGxlbmd0aCBob2xkaW5nIChpbnN0cnVjdGlvbiwgaW5wdXQtaW5kZXgpIHBhaXJzIGZvcgogIC8vIHRoZSBkb21pbmF0ZWQgdXNlcy4KICBmaW5hbCBMaXN0PEhJbnN0cnVjdGlvbj4gX2luc3RydWN0aW9ucyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgZmluYWwgTGlzdDxpbnQ+IF9pbmRleGVzID0gPGludD5bXTsKCiAgRG9taW5hdGVkVXNlcy5fKHRoaXMuX3NvdXJjZSk7CgogIC8vLyBUaGUgdXNlcyBvZiBbc291cmNlXSB0aGF0IGFyZSBkb21pbmF0ZWQgYnkgW2RvbWluYXRvcl0uCiAgLy8vCiAgLy8vIFRoZSB1c2VzIGJ5IFtkb21pbmF0b3JdIGFyZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LCB1bmxlc3MKICAvLy8gW2V4Y2x1ZGVEb21pbmF0b3JdIGlzIGB0cnVlYCwgc28gYHRydWVgIHNlbGVjdHMgdXNlcyBmb2xsb3dpbmcKICAvLy8gW2RvbWluYXRvcl0uCiAgLy8vCiAgLy8vIFRoZSB1c2VzIGluY2x1ZGUgdGhlIGluLWVkZ2VzIG9mIGEgSFBoaSBub2RlIHRoYXQgY29ycmVzcG9uZHMgdG8gYQogIC8vLyBkb21pbmF0ZWQgYmxvY2suIChUaGVyZSBjYW4gYmUgbWFueSBzdWNoIGVkZ2VzIG9uIGEgc2luZ2xlIHBoaSBhdCB0aGUgZXhpdAogIC8vLyBvZiBhIGxvb3Agd2l0aCBtYW55IGJyZWFrIHN0YXRlbWVudHMpLiAgSWYgW2V4Y2x1ZGVQaGlPdXRFZGdlc10gaXMgYHRydWVgCiAgLy8vIHRoZW4gdGhlc2UgZWRnZSB1c2VzIGFyZSBub3QgaW5jbHVkZWQuCiAgc3RhdGljIERvbWluYXRlZFVzZXMgb2YoSEluc3RydWN0aW9uIHNvdXJjZSwgSEluc3RydWN0aW9uIGRvbWluYXRvciwKICAgICAge2Jvb2wgZXhjbHVkZURvbWluYXRvcjogZmFsc2UsIGJvb2wgZXhjbHVkZVBoaU91dEVkZ2VzOiBmYWxzZX0pIHsKICAgIHJldHVybiBuZXcgRG9taW5hdGVkVXNlcy5fKHNvdXJjZSkKICAgICAgLi5fY29tcHV0ZShzb3VyY2UsIGRvbWluYXRvciwgZXhjbHVkZURvbWluYXRvciwgZXhjbHVkZVBoaU91dEVkZ2VzKTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2luc3RydWN0aW9ucy5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CiAgaW50IGdldCBsZW5ndGggPT4gX2luc3RydWN0aW9ucy5sZW5ndGg7CgogIC8vLyBDaGFuZ2VzIGFsbCB0aGUgdXNlcyBpbiB0aGUgc2V0IHRvIFtuZXdJbnN0cnVjdGlvbl0uCiAgdm9pZCByZXBsYWNlV2l0aChISW5zdHJ1Y3Rpb24gbmV3SW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydCghaWRlbnRpY2FsKG5ld0luc3RydWN0aW9uLCBfc291cmNlKSk7CiAgICBpZiAoaXNFbXB0eSkgcmV0dXJuOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfaW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgIEhJbnN0cnVjdGlvbiB1c2VyID0gX2luc3RydWN0aW9uc1tpXTsKICAgICAgaW50IGluZGV4ID0gX2luZGV4ZXNbaV07CiAgICAgIEhJbnN0cnVjdGlvbiBvbGRJbnN0cnVjdGlvbiA9IHVzZXIuaW5wdXRzW2luZGV4XTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgaWRlbnRpY2FsKG9sZEluc3RydWN0aW9uLCBfc291cmNlKSwKICAgICAgICAgICdJbnB1dCAke2luZGV4fSBvZiAke3VzZXJ9IGNoYW5nZWQuJwogICAgICAgICAgJ1xuICBGb3VuZDogJHtvbGRJbnN0cnVjdGlvbn1cbiAgRXhwZWN0ZWQ6ICR7X3NvdXJjZX0nKTsKICAgICAgdXNlci5pbnB1dHNbaW5kZXhdID0gbmV3SW5zdHJ1Y3Rpb247CiAgICAgIG9sZEluc3RydWN0aW9uLnVzZWRCeS5yZW1vdmUodXNlcik7CiAgICAgIG5ld0luc3RydWN0aW9uLnVzZWRCeS5hZGQodXNlcik7CiAgICB9CiAgfQoKICBib29sIGdldCBpc1NpbmdsZXRvbiA9PiBfaW5zdHJ1Y3Rpb25zLmxlbmd0aCA9PSAxOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHNpbmdsZSA9PiBfaW5zdHJ1Y3Rpb25zLnNpbmdsZTsKCiAgSXRlcmFibGU8SEluc3RydWN0aW9uPiBnZXQgaW5zdHJ1Y3Rpb25zID0+IF9pbnN0cnVjdGlvbnM7CgogIHZvaWQgX2FkZFVzZShISW5zdHJ1Y3Rpb24gdXNlciwgaW50IGlucHV0SW5kZXgpIHsKICAgIF9pbnN0cnVjdGlvbnMuYWRkKHVzZXIpOwogICAgX2luZGV4ZXMuYWRkKGlucHV0SW5kZXgpOwogIH0KCiAgdm9pZCBfY29tcHV0ZShISW5zdHJ1Y3Rpb24gc291cmNlLCBISW5zdHJ1Y3Rpb24gZG9taW5hdG9yLAogICAgICBib29sIGV4Y2x1ZGVEb21pbmF0b3IsIGJvb2wgZXhjbHVkZVBoaU91dEVkZ2VzKSB7CiAgICAvLyBLZWVwIHRyYWNrIG9mIGFsbCBpbnN0cnVjdGlvbnMgdGhhdCB3ZSBoYXZlIHRvIGRlYWwgd2l0aCBsYXRlciBhbmQgY291bnQKICAgIC8vIHRoZSBudW1iZXIgb2YgdGhlbSB0aGF0IGFyZSBpbiB0aGUgY3VycmVudCBibG9jay4KICAgIFNldDxISW5zdHJ1Y3Rpb24+IHVzZXJzID0gbmV3IFNldGxldDxISW5zdHJ1Y3Rpb24+KCk7CiAgICBTZXQ8SEluc3RydWN0aW9uPiBzZWVuID0gbmV3IFNldGxldDxISW5zdHJ1Y3Rpb24+KCk7CiAgICBpbnQgdXNlcnNJbkN1cnJlbnRCbG9jayA9IDA7CgogICAgSEJhc2ljQmxvY2sgZG9taW5hdG9yQmxvY2sgPSBkb21pbmF0b3IuYmxvY2s7CgogICAgLy8gUnVuIHRocm91Z2ggYWxsIHRoZSB1c2VycyBhbmQgc2VlIGlmIHRoZXkgYXJlIGRvbWluYXRlZCwgb3IgcG90ZW50aWFsbHkKICAgIC8vIGRvbWluYXRlZCwgb3IgcGFydGlhbGx5IGRvbWluYXRlZCBieSBbZG9taW5hdG9yXS4gSXQgaXMgZWFzaWVyIHRvCiAgICAvLyBkZS1kdXBsaWNhdGUgW3VzZWRCeV0gYW5kIHByb2Nlc3MgYWxsIGlucHV0cyBvZiBhbiBpbnN0cnVjdGlvbiB0aGFuIHRvCiAgICAvLyB0cmFjayB0aGUgcmVwZWF0ZWQgZWxlbWVudHMgb2YgdXNlZEJ5IGFuZCBtYXRjaCB0aGVtIHVwIGJ5IGluZGV4LgogICAgZm9yIChISW5zdHJ1Y3Rpb24gY3VycmVudCBpbiBzb3VyY2UudXNlZEJ5KSB7CiAgICAgIGlmICghc2Vlbi5hZGQoY3VycmVudCkpIGNvbnRpbnVlOwogICAgICBIQmFzaWNCbG9jayBjdXJyZW50QmxvY2sgPSBjdXJyZW50LmJsb2NrOwogICAgICBpZiAoZG9taW5hdG9yQmxvY2suZG9taW5hdGVzKGN1cnJlbnRCbG9jaykpIHsKICAgICAgICB1c2Vycy5hZGQoY3VycmVudCk7CiAgICAgICAgaWYgKGlkZW50aWNhbChjdXJyZW50QmxvY2ssIGRvbWluYXRvckJsb2NrKSkgdXNlcnNJbkN1cnJlbnRCbG9jaysrOwogICAgICB9IGVsc2UgaWYgKCFleGNsdWRlUGhpT3V0RWRnZXMgJiYgY3VycmVudCBpcyBIUGhpKSB7CiAgICAgICAgLy8gQSBub24tZG9taW5hdGVkIEhQaGkuCiAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGEgZG9taW5hdGVkIGVkZ2UgaW50byB0aGUgcGhpLiBUaGUgaW5wdXQgbXVzdCBiZQogICAgICAgIC8vIFtzb3VyY2VdIGFuZCB0aGUgcG9zaXRpb24gbXVzdCBjb3JyZXNwb25kIHRvIGEgZG9taW5hdGVkIGJsb2NrLgogICAgICAgIExpc3Q8SEJhc2ljQmxvY2s+IHByZWRlY2Vzc29ycyA9IGN1cnJlbnRCbG9jay5wcmVkZWNlc3NvcnM7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGlmIChjdXJyZW50LmlucHV0c1tpXSAhPSBzb3VyY2UpIGNvbnRpbnVlOwogICAgICAgICAgSEJhc2ljQmxvY2sgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3NvcnNbaV07CiAgICAgICAgICBpZiAoZG9taW5hdG9yQmxvY2suZG9taW5hdGVzKHByZWRlY2Vzc29yKSkgewogICAgICAgICAgICBfYWRkVXNlKGN1cnJlbnQsIGkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFJ1biB0aHJvdWdoIGFsbCB0aGUgcGhpcyBpbiB0aGUgc2FtZSBibG9jayBhcyBbZG9taW5hdG9yXSBhbmQgcmVtb3ZlIHRoZW0KICAgIC8vIGZyb20gdGhlIHVzZXJzIHNldC4gVGhlc2UgY29tZSBiZWZvcmUgW2RvbWluYXRvcl0uCiAgICAvLyBUT0RPKHNyYSk6IENvdWxkIHdlIHNpbXBseSBub3QgYWRkIHRoZW0gaW4gdGhlIGZpcnN0IHBsYWNlPwogICAgaWYgKHVzZXJzSW5DdXJyZW50QmxvY2sgPiAwKSB7CiAgICAgIGZvciAoSFBoaSBwaGkgPSBkb21pbmF0b3JCbG9jay5waGlzLmZpcnN0OyBwaGkgIT0gbnVsbDsgcGhpID0gcGhpLm5leHQpIHsKICAgICAgICBpZiAodXNlcnMucmVtb3ZlKHBoaSkpIHsKICAgICAgICAgIGlmICgtLXVzZXJzSW5DdXJyZW50QmxvY2sgPT0gMCkgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gUnVuIHRocm91Z2ggYWxsIHRoZSBpbnN0cnVjdGlvbnMgYmVmb3JlIFtkb21pbmF0b3JdIGFuZCByZW1vdmUgdGhlbSBmcm9tCiAgICAvLyB0aGUgdXNlcnMgc2V0LgogICAgaWYgKHVzZXJzSW5DdXJyZW50QmxvY2sgPiAwKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBjdXJyZW50ID0gZG9taW5hdG9yQmxvY2suZmlyc3Q7CiAgICAgIHdoaWxlICghaWRlbnRpY2FsKGN1cnJlbnQsIGRvbWluYXRvcikpIHsKICAgICAgICBpZiAodXNlcnMuY29udGFpbnMoY3VycmVudCkpIHsKICAgICAgICAgIC8vIFRPRE8oMjkzMDIpOiBVc2UgJ3VzZXIucmVtb3ZlKGN1cnJlbnQpJyBhcyB0aGUgY29uZGl0aW9uLgogICAgICAgICAgdXNlcnMucmVtb3ZlKGN1cnJlbnQpOwogICAgICAgICAgaWYgKC0tdXNlcnNJbkN1cnJlbnRCbG9jayA9PSAwKSBicmVhazsKICAgICAgICB9CiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDsKICAgICAgfQogICAgICBpZiAoZXhjbHVkZURvbWluYXRvcikgewogICAgICAgIHVzZXJzLnJlbW92ZShkb21pbmF0b3IpOwogICAgICB9CiAgICB9CgogICAgLy8gQ29udmVydCB1c2VycyBpbnRvIGEgbGlzdCBvZiAodXNlciwgaW5wdXQtaW5kZXgpIHVzZXMuCiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIHVzZXJzKSB7CiAgICAgIHZhciBpbnB1dHMgPSB1c2VyLmlucHV0czsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaW5wdXRzW2ldID09IHNvdXJjZSkgewogICAgICAgICAgX2FkZFVzZSh1c2VyLCBpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vLyBBIHJlZmVyZW5jZSB0byBhIFtISW5zdHJ1Y3Rpb25dIHRoYXQgY2FuIGhvbGQgaXRzIG93biBzb3VyY2UgaW5mb3JtYXRpb24uCi8vLwovLy8gVGhpcyB1c2VkIGZvciBhdHRhY2hpbmcgc291cmNlIGluZm9ybWF0aW9uIHRvIHJlYWRzIG9mIGxvY2Fscy4KY2xhc3MgSFJlZiBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSFJlZihISW5zdHJ1Y3Rpb24gdmFsdWUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKFt2YWx1ZV0sIHZhbHVlLmluc3RydWN0aW9uVHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCB2YWx1ZSA9PiBpbnB1dHNbMF07CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBjb252ZXJ0VHlwZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIERhcnRUeXBlIHR5cGUsIGludCBraW5kKSB7CiAgICBISW5zdHJ1Y3Rpb24gY29udmVydGVkID0gdmFsdWUuY29udmVydFR5cGUoY2xvc2VkV29ybGQsIHR5cGUsIGtpbmQpOwogICAgaWYgKGNvbnZlcnRlZCA9PSB2YWx1ZSkgcmV0dXJuIHRoaXM7CiAgICBIVHlwZUNvbnZlcnNpb24gY29udmVyc2lvbiA9IGNvbnZlcnRlZDsKICAgIGNvbnZlcnNpb24uaW5wdXRzWzBdID0gdGhpczsKICAgIHJldHVybiBjb252ZXJzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRSZWYodGhpcyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIUmVmKCR7dmFsdWV9KSc7Cn0KCi8vLyBMYXRlIGluc3RydWN0aW9ucyBhcmUgdXNlZCBhZnRlciB0aGUgbWFpbiBvcHRpbWl6YXRpb24gcGhhc2VzLiAgVGhleSBjYXB0dXJlCi8vLyBjb2RlZ2VuIGRlY2lzaW9ucyBqdXN0IHByaW9yIHRvIGdlbmVyYXRpbmcgSmF2YVNjcmlwdC4KYWJzdHJhY3QgY2xhc3MgSExhdGVJbnN0cnVjdGlvbiBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSExhdGVJbnN0cnVjdGlvbihMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKTsKfQoKLy8vIEEgW0hDaGVja10gaW5zdHJ1Y3Rpb24gaXMgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBtaWdodCBkbyBhIGR5bmFtaWMKLy8vIGNoZWNrIGF0IHJ1bnRpbWUgb24gYW5vdGhlciBpbnN0cnVjdGlvbi4gVG8gaGF2ZSBwcm9wZXIgaW5zdHJ1Y3Rpb24KLy8vIGRlcGVuZGVuY2llcyBpbiB0aGUgZ3JhcGgsIGluc3RydWN0aW9ucyB0aGF0IGRlcGVuZCBvbiB0aGUgY2hlY2sKLy8vIGJlaW5nIGRvbmUgcmVmZXJlbmNlIHRoZSBbSENoZWNrXSBpbnN0cnVjdGlvbiBpbnN0ZWFkIG9mIHRoZQovLy8gaW5zdHJ1Y3Rpb24gaXRzZWxmLgphYnN0cmFjdCBjbGFzcyBIQ2hlY2sgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhDaGVjayhpbnB1dHMsIHR5cGUpIDogc3VwZXIoaW5wdXRzLCB0eXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CiAgSEluc3RydWN0aW9uIGdldCBjaGVja2VkSW5wdXQgPT4gaW5wdXRzWzBdOwogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5vbkNoZWNrKCkgPT4gY2hlY2tlZElucHV0Lm5vbkNoZWNrKCk7Cn0KCmNsYXNzIEhCb3VuZHNDaGVjayBleHRlbmRzIEhDaGVjayB7CiAgc3RhdGljIGNvbnN0IGludCBBTFdBWVNfRkFMU0UgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgRlVMTF9DSEVDSyA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBBTFdBWVNfQUJPVkVfWkVSTyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBBTFdBWVNfQkVMT1dfTEVOR1RIID0gMzsKICBzdGF0aWMgY29uc3QgaW50IEFMV0FZU19UUlVFID0gNDsKCiAgLy8vIERldGFpbHMgd2hpY2ggdGVzdHMgaGF2ZSBiZWVuIGRvbmUgc3RhdGljYWxseSBkdXJpbmcgY29tcGlsYXRpb24uCiAgLy8vIERlZmF1bHQgaXMgdGhhdCBhbGwgY2hlY2tzIG11c3QgYmUgcGVyZm9ybWVkIGR5bmFtaWNhbGx5LgogIGludCBzdGF0aWNDaGVja3MgPSBGVUxMX0NIRUNLOwoKICBIQm91bmRzQ2hlY2sobGVuZ3RoLCBpbmRleCwgYXJyYXksIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bbGVuZ3RoLCBpbmRleCwgYXJyYXldLCB0eXBlKTsKCiAgSEluc3RydWN0aW9uIGdldCBsZW5ndGggPT4gaW5wdXRzWzFdOwogIEhJbnN0cnVjdGlvbiBnZXQgaW5kZXggPT4gaW5wdXRzWzBdOwogIEhJbnN0cnVjdGlvbiBnZXQgYXJyYXkgPT4gaW5wdXRzWzJdOwogIC8vIFRoZXJlIGNhbiBiZSBhbiBhZGRpdGlvbmFsIGZvdXJ0aCBpbnB1dCB3aGljaCBpcyB0aGUgaW5kZXggdG8gcmVwb3J0IHRvCiAgLy8gW2lvb3JlXS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBleHBhbnNpb24gb2YgW0pTQXJyYXkucmVtb3ZlTGFzdF0uCiAgSEluc3RydWN0aW9uIGdldCByZXBvcnRlZEluZGV4ID0+IGlucHV0cy5sZW5ndGggPiAzID8gaW5wdXRzWzNdIDogaW5kZXg7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnRyb2xGbG93KCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRCb3VuZHNDaGVjayh0aGlzKTsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQk9VTkRTX0NIRUNLX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEJvdW5kc0NoZWNrOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmFic3RyYWN0IGNsYXNzIEhDb25kaXRpb25hbEJyYW5jaCBleHRlbmRzIEhDb250cm9sRmxvdyB7CiAgSENvbmRpdGlvbmFsQnJhbmNoKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzKQogICAgICA6IHN1cGVyKGRvbWFpbiwgaW5wdXRzKTsKICBISW5zdHJ1Y3Rpb24gZ2V0IGNvbmRpdGlvbiA9PiBpbnB1dHNbMF07CiAgSEJhc2ljQmxvY2sgZ2V0IHRydWVCcmFuY2ggPT4gYmxvY2suc3VjY2Vzc29yc1swXTsKICBIQmFzaWNCbG9jayBnZXQgZmFsc2VCcmFuY2ggPT4gYmxvY2suc3VjY2Vzc29yc1sxXTsKfQoKYWJzdHJhY3QgY2xhc3MgSENvbnRyb2xGbG93IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIQ29udHJvbEZsb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMpCiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heSBvbmx5IGV4cHJlc3Npb24tbGlrZSBbSEluc3RydWN0aW9uXXMgc2hvdWxkCiAgICAgIC8vIGhhdmUgYW4gYGluc3RydWN0aW9uVHlwZWAsIG9yIHN0YXRlbWVudC1saWtlIFtISW5zdHJ1Y3Rpb25dcyBzaG91bGQKICAgICAgLy8gaGF2ZSBhIHRocm93aW5nIGdldHRlci4KICAgICAgOiBzdXBlcihpbnB1dHMsIGRvbWFpbi5lbXB0eVR5cGUpOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb250cm9sRmxvdygpID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gdHJ1ZTsKfQoKLy8gQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhbiBpbnN0YW5jZS4KY2xhc3MgSENyZWF0ZSBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgZmluYWwgQ2xhc3NFbnRpdHkgZWxlbWVudDsKCiAgLy8vIERvZXMgdGhpcyBpbnN0cnVjdGlvbiBoYXZlIHJlaWZpZWQgdHlwZSBpbmZvcm1hdGlvbiBhcyB0aGUgbGFzdCBpbnB1dD8KICBmaW5hbCBib29sIGhhc1J0aUlucHV0OwoKICAvLy8gSWYgdGhpcyBmaWVsZCBpcyBub3QgYG51bGxgLCB0aGlzIGNhbGwgaXMgZnJvbSBhbiBpbmxpbmVkIGNvbnN0cnVjdG9yIGFuZAogIC8vLyB3ZSBoYXZlIHRvIHJlZ2lzdGVyIHRoZSBpbnN0YW50aWF0ZWQgdHlwZSBpbiB0aGUgY29kZSBnZW5lcmF0b3IuIFRoZQogIC8vLyBbaW5zdHJ1Y3Rpb25UeXBlXSBvZiB0aGlzIG5vZGUgaXMgbm90IGVub3VnaCwgYmVjYXVzZSB3ZSBhbHNvIG5lZWQgdGhlCiAgLy8vIHR5cGUgYXJndW1lbnRzLiBTZWUgYWxzbyBbU3NhRnJvbUFzdE1peGluLmN1cnJlbnRJbmxpbmVkSW5zdGFudGlhdGlvbnNdLgogIExpc3Q8SW50ZXJmYWNlVHlwZT4gaW5zdGFudGlhdGVkVHlwZXM7CgogIC8vLyBJZiB0aGlzIG5vZGUgY3JlYXRlcyBhIGNsb3N1cmUgY2xhc3MsIFtjYWxsTWV0aG9kXSBpcyB0aGUgY2FsbCBtZXRob2Qgb2YKICAvLy8gdGhlIGNsb3N1cmUgY2xhc3MuCiAgRnVuY3Rpb25FbnRpdHkgY2FsbE1ldGhvZDsKCiAgSENyZWF0ZSh0aGlzLmVsZW1lbnQsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHt0aGlzLmluc3RhbnRpYXRlZFR5cGVzLCB0aGlzLmhhc1J0aUlucHV0OiBmYWxzZSwgdGhpcy5jYWxsTWV0aG9kfSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNBbGxvY2F0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiB0cnVlOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHJ0aUlucHV0IHsKICAgIGFzc2VydChoYXNSdGlJbnB1dCk7CiAgICByZXR1cm4gaW5wdXRzLmxhc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdENyZWF0ZSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hDcmVhdGUoJGVsZW1lbnQsICR7aW5zdGFudGlhdGVkVHlwZXN9KSc7Cn0KCi8vIEFsbG9jYXRlcyBhIGJveCB0byBob2xkIG11dGF0ZWQgY2FwdHVyZWQgdmFyaWFibGVzLgpjbGFzcyBIQ3JlYXRlQm94IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIQ3JlYXRlQm94KEFic3RyYWN0VmFsdWUgdHlwZSkgOiBzdXBlcig8SEluc3RydWN0aW9uPltdLCB0eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0FsbG9jYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IHRydWU7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q3JlYXRlQm94KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSENyZWF0ZUJveCgpJzsKfQoKYWJzdHJhY3QgY2xhc3MgSEludm9rZSBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgYm9vbCBfaXNBbGxvY2F0aW9uID0gZmFsc2U7CgogIC8vLyBbaXNJbnRlcmNlcHRlZENhbGxdIGlzIHRydWUgaWYgdGhpcyBpbnZvY2F0aW9uIHVzZXMgdGhlIGludGVyY2VwdG9yCiAgLy8vIGNhbGxpbmcgY29udmVudGlvbiB3aGVyZSB0aGUgZmlyc3QgaW5wdXQgaXMgdGhlIG1ldGhvZHMgYW5kIHRoZSBzZWNvbmQKICAvLy8gaW5wdXQgaXMgdGhlIERhcnQgcmVjZWl2ZXIuCiAgYm9vbCBpc0ludGVyY2VwdGVkQ2FsbCA9IGZhbHNlOwoKICBISW52b2tlKExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHJlc3VsdFR5cGUpIHsKICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICB9CiAgc3RhdGljIGNvbnN0IGludCBBUkdVTUVOVFNfT0ZGU0VUID0gMTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0FsbG9jYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IF9pc0FsbG9jYXRpb247CgogIHZvaWQgc2V0QWxsb2NhdGlvbihib29sIHZhbHVlKSB7CiAgICBfaXNBbGxvY2F0aW9uID0gdmFsdWU7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBISW52b2tlRHluYW1pYyBleHRlbmRzIEhJbnZva2UgewogIGZpbmFsIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciBzcGVjaWFsaXplcjsKICBAb3ZlcnJpZGUKICBTZWxlY3RvciBzZWxlY3RvcjsKICBBYnN0cmFjdFZhbHVlIF9yZWNlaXZlclR5cGU7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBfb3JpZ2luYWxSZWNlaXZlclR5cGU7CiAgTWVtYmVyRW50aXR5IGVsZW1lbnQ7CgogIEhJbnZva2VEeW5hbWljKFNlbGVjdG9yIHNlbGVjdG9yLCB0aGlzLl9yZWNlaXZlclR5cGUsIHRoaXMuZWxlbWVudCwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgYm9vbCBpc0ludGVyY2VwdGVkLCBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUpCiAgICAgIDogdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLAogICAgICAgIHRoaXMuX29yaWdpbmFsUmVjZWl2ZXJUeXBlID0gX3JlY2VpdmVyVHlwZSwKICAgICAgICBzcGVjaWFsaXplciA9IGlzSW50ZXJjZXB0ZWQKICAgICAgICAgICAgPyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIubG9va3VwU3BlY2lhbGl6ZXIoc2VsZWN0b3IpCiAgICAgICAgICAgIDogY29uc3QgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyKCksCiAgICAgICAgc3VwZXIoaW5wdXRzLCByZXN1bHRUeXBlKSB7CiAgICBhc3NlcnQoaXNJbnRlcmNlcHRlZCAhPSBudWxsKTsKICAgIGFzc2VydChfcmVjZWl2ZXJUeXBlICE9IG51bGwpOwogICAgaXNJbnRlcmNlcHRlZENhbGwgPSBpc0ludGVyY2VwdGVkOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBnZXQgcmVjZWl2ZXJUeXBlID0+IF9yZWNlaXZlclR5cGU7CgogIHZvaWQgdXBkYXRlUmVjZWl2ZXJUeXBlKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIF9yZWNlaXZlclR5cGUgPQogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKF9vcmlnaW5hbFJlY2VpdmVyVHlwZSwgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ2ludm9rZSBkeW5hbWljOiBzZWxlY3Rvcj0kc2VsZWN0b3IsIG1hc2s9JHJlY2VpdmVyVHlwZSc7CgogIEhJbnN0cnVjdGlvbiBnZXQgcmVjZWl2ZXIgPT4gaW5wdXRzWzBdOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0RGFydFJlY2VpdmVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGlzQ2FsbE9uSW50ZXJjZXB0b3IoY2xvc2VkV29ybGQpID8gaW5wdXRzWzFdIDogaW5wdXRzWzBdOwogIH0KCiAgLy8vIFRoZSB0eXBlIGFyZ3VtZW50cyBwYXNzZWQgaW4gdGhpcyBkeW5hbWljIGludm9jYXRpb24uCiAgTGlzdDxEYXJ0VHlwZT4gZ2V0IHR5cGVBcmd1bWVudHM7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjYWxsIGlzIG9uIGFuIGludGVyY2VwdG9yIG9iamVjdC4KICBib29sIGlzQ2FsbE9uSW50ZXJjZXB0b3IoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gaXNJbnRlcmNlcHRlZENhbGwgJiYgcmVjZWl2ZXIuaXNJbnRlcmNlcHRvcihjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uSU5WT0tFX0RZTkFNSUNfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEludm9rZUR5bmFtaWM7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW52b2tlRHluYW1pYyBvdGhlcikgewogICAgLy8gVXNlIHRoZSBuYW1lIGFuZCB0aGUga2luZCBpbnN0ZWFkIG9mIFtTZWxlY3Rvci5vcGVyYXRvcj09XQogICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBhcml0eSAoYWxyZWFkeSBjaGVja2VkIGluCiAgICAvLyBbZ3ZuRXF1YWxzXSksIGFuZCB0aGUgcmVjZWl2ZXIgdHlwZXMgbWF5IG5vdCBiZSBpbiBzeW5jLgogICAgcmV0dXJuIHNlbGVjdG9yLm5hbWUgPT0gb3RoZXIuc2VsZWN0b3IubmFtZSAmJgogICAgICAgIHNlbGVjdG9yLmtpbmQgPT0gb3RoZXIuc2VsZWN0b3Iua2luZDsKICB9Cn0KCmNsYXNzIEhJbnZva2VDbG9zdXJlIGV4dGVuZHMgSEludm9rZUR5bmFtaWMgewogIEBvdmVycmlkZQogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIEhJbnZva2VDbG9zdXJlKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlLCB0aGlzLnR5cGVBcmd1bWVudHMpCiAgICAgIDogc3VwZXIoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgbnVsbCwgaW5wdXRzLCBmYWxzZSwgcmVzdWx0VHlwZSkgewogICAgYXNzZXJ0KHNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwpOwogICAgYXNzZXJ0KHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgPT0gdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgYXNzZXJ0KCFpc0ludGVyY2VwdGVkQ2FsbCk7CiAgfQogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW52b2tlQ2xvc3VyZSh0aGlzKTsKfQoKY2xhc3MgSEludm9rZUR5bmFtaWNNZXRob2QgZXh0ZW5kcyBISW52b2tlRHluYW1pYyB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgSEludm9rZUR5bmFtaWNNZXRob2QoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlLAogICAgICB0aGlzLnR5cGVBcmd1bWVudHMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7Ym9vbCBpc0ludGVyY2VwdGVkOiBmYWxzZX0pCiAgICAgIDogc3VwZXIoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgbnVsbCwgaW5wdXRzLCBpc0ludGVyY2VwdGVkLCByZXN1bHRUeXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBhc3NlcnQoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnaW52b2tlIGR5bmFtaWMgbWV0aG9kOiBzZWxlY3Rvcj0kc2VsZWN0b3IsIG1hc2s9JHJlY2VpdmVyVHlwZSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnZva2VEeW5hbWljTWV0aG9kKHRoaXMpOwp9CgphYnN0cmFjdCBjbGFzcyBISW52b2tlRHluYW1pY0ZpZWxkIGV4dGVuZHMgSEludm9rZUR5bmFtaWMgewogIEhJbnZva2VEeW5hbWljRmllbGQoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSwKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIGJvb2wgaXNJbnRlcmNlcHRlZCwKICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlKQogICAgICA6IHN1cGVyKAogICAgICAgICAgICBzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBlbGVtZW50LCBpbnB1dHMsIGlzSW50ZXJjZXB0ZWQsIHJlc3VsdFR5cGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnaW52b2tlIGR5bmFtaWMgZmllbGQ6IHNlbGVjdG9yPSRzZWxlY3RvciwgbWFzaz0kcmVjZWl2ZXJUeXBlJzsKfQoKY2xhc3MgSEludm9rZUR5bmFtaWNHZXR0ZXIgZXh0ZW5kcyBISW52b2tlRHluYW1pY0ZpZWxkIHsKICBISW52b2tlRHluYW1pY0dldHRlcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlLAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgYm9vbCBpc0ludGVyY2VwdGVkLAogICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGVsZW1lbnQsIGlucHV0cywgaXNJbnRlcmNlcHRlZCwKICAgICAgICAgICAgcmVzdWx0VHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnZva2VEeW5hbWljR2V0dGVyKHRoaXMpOwoKICBib29sIGdldCBpc1RlYXJPZmYgPT4gZWxlbWVudCAhPSBudWxsICYmIGVsZW1lbnQuaXNGdW5jdGlvbjsKCiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gZ2V0IHR5cGVBcmd1bWVudHMgPT4gY29uc3QgPERhcnRUeXBlPltdOwoKICAvLyBUaGVyZSBtaWdodCBiZSBhbiBpbnRlcmNlcHRvciBpbnB1dCwgc28gYGlucHV0cy5sYXN0YCBpcyB0aGUgZGFydCByZWNlaXZlci4KICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBpc1RlYXJPZmYKICAgICAgPyBpbnB1dHMubGFzdC5pc051bGwoZG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZQogICAgICA6IHN1cGVyLmNhblRocm93KGRvbWFpbik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdpbnZva2UgZHluYW1pYyBnZXR0ZXI6IHNlbGVjdG9yPSRzZWxlY3RvciwgbWFzaz0kcmVjZWl2ZXJUeXBlJzsKfQoKY2xhc3MgSEludm9rZUR5bmFtaWNTZXR0ZXIgZXh0ZW5kcyBISW52b2tlRHluYW1pY0ZpZWxkIHsKICAvLy8gSWYgYHRydWVgIGEgY2FsbCB0byB0aGUgc2V0dGVyIGlzIG5lZWRlZCBmb3IgY2hlY2tpbmcgdGhlIHR5cGUgZXZlbgogIC8vLyB0aG91Z2ggdGhlIHRhcmdldCBmaWVsZCBpcyBrbm93bi4KICBib29sIG5lZWRzQ2hlY2sgPSBmYWxzZTsKCiAgSEludm9rZUR5bmFtaWNTZXR0ZXIoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSwKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIGJvb2wgaXNJbnRlcmNlcHRlZCwKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhlIHJlc3VsdCB0eXBlIGZvciBhIHNldHRlciBzaG91bGQgYmUgdGhlIGVtcHR5CiAgICAgIC8vIHR5cGUuCiAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgZWxlbWVudCwgaW5wdXRzLCBpc0ludGVyY2VwdGVkLAogICAgICAgICAgICByZXN1bHRUeXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludm9rZUR5bmFtaWNTZXR0ZXIodGhpcyk7CgogIEBvdmVycmlkZQogIExpc3Q8RGFydFR5cGU+IGdldCB0eXBlQXJndW1lbnRzID0+IGNvbnN0IDxEYXJ0VHlwZT5bXTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ2ludm9rZSBkeW5hbWljIHNldHRlcjogc2VsZWN0b3I9JHNlbGVjdG9yLCBtYXNrPSRyZWNlaXZlclR5cGUsIGVsZW1lbnQ9JGVsZW1lbnQnOwp9CgpjbGFzcyBISW52b2tlU3RhdGljIGV4dGVuZHMgSEludm9rZSB7CiAgZmluYWwgTWVtYmVyRW50aXR5IGVsZW1lbnQ7CgogIC8vLyBUaGUgdHlwZSBhcmd1bWVudHMgcGFzc2VkIGluIHRoaXMgc3RhdGljIGludm9jYXRpb24uCiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgZmluYWwgYm9vbCB0YXJnZXRDYW5UaHJvdzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gdGFyZ2V0Q2FuVGhyb3c7CgogIC8vLyBJZiB0aGlzIGluc3RydWN0aW9uIGlzIGEgY2FsbCB0byBhIGNvbnN0cnVjdG9yLCBbaW5zdGFudGlhdGVkVHlwZXNdCiAgLy8vIGNvbnRhaW5zIHRoZSB0eXBlKHMpIHVzZWQgaW4gdGhlIChEYXJ0KSBgTmV3YCBleHByZXNzaW9uKHMpLiBUaGUKICAvLy8gW2luc3RydWN0aW9uVHlwZV0gb2YgdGhpcyBub2RlIGlzIG5vdCBlbm91Z2gsIGJlY2F1c2Ugd2UgYWxzbyBuZWVkIHRoZQogIC8vLyB0eXBlIGFyZ3VtZW50cy4gU2VlIGFsc28gW1NzYUZyb21Bc3RNaXhpbi5jdXJyZW50SW5saW5lZEluc3RhbnRpYXRpb25zXS4KICBMaXN0PEludGVyZmFjZVR5cGU+IGluc3RhbnRpYXRlZFR5cGVzOwoKICAvLy8gVGhlIGZpcnN0IGlucHV0IG11c3QgYmUgdGhlIHRhcmdldC4KICBISW52b2tlU3RhdGljKHRoaXMuZWxlbWVudCwgaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUsIHRoaXMudHlwZUFyZ3VtZW50cywKICAgICAge3RoaXMudGFyZ2V0Q2FuVGhyb3c6IHRydWUsIGJvb2wgaXNJbnRlcmNlcHRlZDogZmFsc2V9KQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSkgewogICAgaXNJbnRlcmNlcHRlZENhbGwgPSBpc0ludGVyY2VwdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnZva2VTdGF0aWModGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JTlZPS0VfU1RBVElDX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnaW52b2tlIHN0YXRpYzogJGVsZW1lbnQnOwp9CgpjbGFzcyBISW52b2tlU3VwZXIgZXh0ZW5kcyBISW52b2tlU3RhdGljIHsKICAvLy8gVGhlIGNsYXNzIHdoZXJlIHRoZSBjYWxsIHRvIHN1cGVyIGlzIGJlaW5nIGRvbmUuCiAgZmluYWwgQ2xhc3NFbnRpdHkgY2FsbGVyOwogIGZpbmFsIGJvb2wgaXNTZXR0ZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CgogIEhJbnZva2VTdXBlcigKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIHRoaXMuY2FsbGVyLAogICAgICB0aGlzLnNlbGVjdG9yLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBib29sIGlzSW50ZXJjZXB0ZWQsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHt0aGlzLmlzU2V0dGVyfSkKICAgICAgOiBzdXBlcihlbGVtZW50LCBpbnB1dHMsIHR5cGUsIHR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgIGlzSW50ZXJjZXB0ZWQ6IGlzSW50ZXJjZXB0ZWQpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgcmVjZWl2ZXIgPT4gaW5wdXRzWzBdOwogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXREYXJ0UmVjZWl2ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gaXNDYWxsT25JbnRlcmNlcHRvcihjbG9zZWRXb3JsZCkgPyBpbnB1dHNbMV0gOiBpbnB1dHNbMF07CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIHRoaXMgY2FsbCBpcyBvbiBhbiBpbnRlcmNlcHRvciBvYmplY3QuCiAgYm9vbCBpc0NhbGxPbkludGVyY2VwdG9yKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGlzSW50ZXJjZXB0ZWRDYWxsICYmIHJlY2VpdmVyLmlzSW50ZXJjZXB0b3IoY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnaW52b2tlIHN1cGVyOiAkZWxlbWVudCc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnZva2VTdXBlcih0aGlzKTsKCiAgSEluc3RydWN0aW9uIGdldCB2YWx1ZSB7CiAgICBhc3NlcnQoaXNTZXR0ZXIpOwogICAgLy8gVGhlICdpbnB1dHMnIGFyZSBbcmVjZWl2ZXIsIHZhbHVlXSBvciBbaW50ZXJjZXB0b3IsIHJlY2VpdmVyLCB2YWx1ZV0uCiAgICByZXR1cm4gaW5wdXRzLmxhc3Q7CiAgfQp9CgpjbGFzcyBISW52b2tlQ29uc3RydWN0b3JCb2R5IGV4dGVuZHMgSEludm9rZVN0YXRpYyB7CiAgLy8gVGhlICdpbnB1dHMnIGFyZQogIC8vICAgICBbcmVjZWl2ZXIsIGFyZzEsIC4uLiwgYXJnTl0gb3IKICAvLyAgICAgW2ludGVyY2VwdG9yLCByZWNlaXZlciwgYXJnMSwgLi4uIGFyZ05dLgogIEhJbnZva2VDb25zdHJ1Y3RvckJvZHkoCiAgICAgIENvbnN0cnVjdG9yQm9keUVudGl0eSBlbGVtZW50LAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKGVsZW1lbnQsIGlucHV0cywgdHlwZSwgY29uc3QgPERhcnRUeXBlPltdKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnaW52b2tlIGNvbnN0cnVjdG9yIGJvZHk6ICR7ZWxlbWVudC5uYW1lfSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnZva2VDb25zdHJ1Y3RvckJvZHkodGhpcyk7Cn0KCmNsYXNzIEhJbnZva2VHZW5lcmF0b3JCb2R5IGV4dGVuZHMgSEludm9rZVN0YXRpYyB7CiAgLy8gRGlyZWN0bHkgY2FsbCB0aGUgSkdlbmVyYXRvckJvZHkgbWV0aG9kLiBUaGUgZ2VuZXJhdG9yIGJvZHkgY2FuIGJlIGEgc3RhdGljCiAgLy8gbWV0aG9kIG9yIGEgbWVtYmVyLiBUaGUgdGFyZ2V0IGlzIGRpcmVjdGx5IGNhbGxlZC4KICAvLyBUaGUgJ2lucHV0cycgYXJlCiAgLy8gICAgIFthcmcxLCAuLi4sIGFyZ05dIG9yCiAgLy8gICAgIFtyZWNlaXZlciwgYXJnMSwgLi4uLCBhcmdOXSBvcgogIC8vICAgICBbaW50ZXJjZXB0b3IsIHJlY2VpdmVyLCBhcmcxLCAuLi4gYXJnTl0uCiAgLy8gVGhlICdpbnB1dHMnIG1heSBvciBtYXkgbm90IGhhdmUgYW4gYWRkaXRpb25hbCB0eXBlIGFyZ3VtZW50IHVzZWQgZm9yCiAgLy8gY3JlYXRpbmcgdGhlIGdlbmVyYXRvciAoVCBmb3IgbmV3IENvbXBsZXRlcjxUPigpIGluc2lkZSB0aGUgYm9keSkuCiAgSEludm9rZUdlbmVyYXRvckJvZHkoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcihlbGVtZW50LCBpbnB1dHMsIHR5cGUsIGNvbnN0IDxEYXJ0VHlwZT5bXSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hJbnZva2VHZW5lcmF0b3JCb2R5KCR7ZWxlbWVudC5uYW1lfSknOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW52b2tlR2VuZXJhdG9yQm9keSh0aGlzKTsKfQoKYWJzdHJhY3QgY2xhc3MgSEZpZWxkQWNjZXNzIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBmaW5hbCBGaWVsZEVudGl0eSBlbGVtZW50OwoKICBIRmllbGRBY2Nlc3ModGhpcy5lbGVtZW50LCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKTsKCiAgSEluc3RydWN0aW9uIGdldCByZWNlaXZlciA9PiBpbnB1dHNbMF07Cn0KCmNsYXNzIEhGaWVsZEdldCBleHRlbmRzIEhGaWVsZEFjY2VzcyB7CiAgZmluYWwgYm9vbCBpc0Fzc2lnbmFibGU7CgogIEhGaWVsZEdldChGaWVsZEVudGl0eSBlbGVtZW50LCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIGlzQXNzaWduYWJsZX0pCiAgICAgIDogdGhpcy5pc0Fzc2lnbmFibGUgPQogICAgICAgICAgICAoaXNBc3NpZ25hYmxlICE9IG51bGwpID8gaXNBc3NpZ25hYmxlIDogZWxlbWVudC5pc0Fzc2lnbmFibGUsCiAgICAgICAgc3VwZXIoZWxlbWVudCwgPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLCB0eXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2V0VXNlR3ZuKCk7CiAgICBpZiAodGhpcy5pc0Fzc2lnbmFibGUpIHsKICAgICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJjZXB0b3IoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoc291cmNlRWxlbWVudCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAvLyBJbiBjYXNlIG9mIGEgY2xvc3VyZSBpbnNpZGUgYW4gaW50ZXJjZXB0b3IgY2xhc3MsIFs6dGhpczpdIGlzCiAgICAvLyBzdG9yZWQgaW4gdGhlIGdlbmVyYXRlZCBjbG9zdXJlIGNsYXNzLCBhbmQgYWNjZXNzZWQgdGhyb3VnaCBhCiAgICAvLyBbSEZpZWxkR2V0XS4KICAgIGlmIChzb3VyY2VFbGVtZW50IGlzIFRoaXNMb2NhbCkgewogICAgICBUaGlzTG9jYWwgdGhpc0xvY2FsID0gc291cmNlRWxlbWVudDsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YQogICAgICAgICAgLmlzSW50ZXJjZXB0ZWRDbGFzcyh0aGlzTG9jYWwuZW5jbG9zaW5nQ2xhc3MpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgcmVjZWl2ZXIuaXNOdWxsKGRvbWFpbikuaXNQb3RlbnRpYWxseVRydWU7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXREYXJ0UmVjZWl2ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiByZWNlaXZlcjsKICBAb3ZlcnJpZGUKICBib29sIG9ubHlUaHJvd3NOU00oKSA9PiB0cnVlOwogIGJvb2wgZ2V0IGlzTnVsbENoZWNrID0+IGVsZW1lbnQgPT0gbnVsbDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGaWVsZEdldCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkZJRUxEX0dFVF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhGaWVsZEdldDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEZpZWxkR2V0IG90aGVyKSA9PiBlbGVtZW50ID09IG90aGVyLmVsZW1lbnQ7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkZpZWxkR2V0KGVsZW1lbnQ9JGVsZW1lbnQsdHlwZT0kaW5zdHJ1Y3Rpb25UeXBlKSI7Cn0KCmNsYXNzIEhGaWVsZFNldCBleHRlbmRzIEhGaWVsZEFjY2VzcyB7CiAgSEZpZWxkU2V0KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBGaWVsZEVudGl0eSBlbGVtZW50LAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiB2YWx1ZSkKICAgICAgOiBzdXBlcihlbGVtZW50LCA8SEluc3RydWN0aW9uPltyZWNlaXZlciwgdmFsdWVdLCBkb21haW4uZW1wdHlUeXBlKSB7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIHJlY2VpdmVyLmlzTnVsbChkb21haW4pLmlzUG90ZW50aWFsbHlUcnVlOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0RGFydFJlY2VpdmVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gcmVjZWl2ZXI7CiAgQG92ZXJyaWRlCiAgYm9vbCBvbmx5VGhyb3dzTlNNKCkgPT4gdHJ1ZTsKCiAgSEluc3RydWN0aW9uIGdldCB2YWx1ZSA9PiBpbnB1dHNbMV07CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGaWVsZFNldCh0aGlzKTsKCiAgLy8gSEZpZWxkU2V0IGlzIGFuIGV4cHJlc3Npb24gaWYgaXQgaGFzIGEgdXNlci4KICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiB1c2VkQnkuaXNFbXB0eTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkZpZWxkU2V0KGVsZW1lbnQ9JGVsZW1lbnQsdHlwZT0kaW5zdHJ1Y3Rpb25UeXBlKSI7Cn0KCmNsYXNzIEhHZXRMZW5ndGggZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGZpbmFsIGJvb2wgaXNBc3NpZ25hYmxlOwogIEhHZXRMZW5ndGgoSEluc3RydWN0aW9uIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIHtib29sIHRoaXMuaXNBc3NpZ25hYmxlfSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltyZWNlaXZlcl0sIHR5cGUpIHsKICAgIGFzc2VydChpc0Fzc2lnbmFibGUgIT0gbnVsbCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2V0VXNlR3ZuKCk7CiAgICBpZiAodGhpcy5pc0Fzc2lnbmFibGUpIHsKICAgICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCk7CiAgICB9CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IHJlY2VpdmVyID0+IGlucHV0cy5zaW5nbGU7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIHJlY2VpdmVyLmlzTnVsbChkb21haW4pLmlzUG90ZW50aWFsbHlUcnVlOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0RGFydFJlY2VpdmVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gcmVjZWl2ZXI7CiAgQG92ZXJyaWRlCiAgYm9vbCBvbmx5VGhyb3dzTlNNKCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRHZXRMZW5ndGgodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5HRVRfTEVOR1RIX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEdldExlbmd0aDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEdldExlbmd0aCBvdGhlcikgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiR2V0TGVuZ3RoKCkiOwp9CgovLy8gSFJlYWRNb2RpZnlXcml0ZSBpcyBhIGxhdGUgc3RhZ2UgaW5zdHJ1Y3Rpb24gZm9yIGEgZmllbGQgKHByb3BlcnR5KSB1cGRhdGUKLy8vIHZpYSBhbiBhc3NpZ25tZW50IG9wZXJhdGlvbiBvciBwcmUtIG9yIHBvc3QtaW5jcmVtZW50LgpjbGFzcyBIUmVhZE1vZGlmeVdyaXRlIGV4dGVuZHMgSExhdGVJbnN0cnVjdGlvbiB7CiAgc3RhdGljIGNvbnN0IEFTU0lHTl9PUCA9IDA7CiAgc3RhdGljIGNvbnN0IFBSRV9PUCA9IDE7CiAgc3RhdGljIGNvbnN0IFBPU1RfT1AgPSAyOwogIGZpbmFsIEZpZWxkRW50aXR5IGVsZW1lbnQ7CiAgZmluYWwgU3RyaW5nIGpzT3A7CiAgZmluYWwgaW50IG9wS2luZDsKCiAgSFJlYWRNb2RpZnlXcml0ZS5fKHRoaXMuZWxlbWVudCwgdGhpcy5qc09wLCB0aGlzLm9wS2luZCwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSkgewogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNpZGVFZmZlY3RzLnNldENoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCk7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKTsKICB9CgogIEhSZWFkTW9kaWZ5V3JpdGUuYXNzaWduT3AoRmllbGRFbnRpdHkgZWxlbWVudCwgU3RyaW5nIGpzT3AsCiAgICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgSEluc3RydWN0aW9uIG9wZXJhbmQsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiB0aGlzLl8oCiAgICAgICAgICAgIGVsZW1lbnQsIGpzT3AsIEFTU0lHTl9PUCwgPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXIsIG9wZXJhbmRdLCB0eXBlKTsKCiAgSFJlYWRNb2RpZnlXcml0ZS5wcmVPcChGaWVsZEVudGl0eSBlbGVtZW50LCBTdHJpbmcganNPcCwKICAgICAgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogdGhpcy5fKGVsZW1lbnQsIGpzT3AsIFBSRV9PUCwgPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLCB0eXBlKTsKCiAgSFJlYWRNb2RpZnlXcml0ZS5wb3N0T3AoRmllbGRFbnRpdHkgZWxlbWVudCwgU3RyaW5nIGpzT3AsCiAgICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHRoaXMuXyhlbGVtZW50LCBqc09wLCBQT1NUX09QLCA8SEluc3RydWN0aW9uPltyZWNlaXZlcl0sIHR5cGUpOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHJlY2VpdmVyID0+IGlucHV0c1swXTsKCiAgYm9vbCBnZXQgaXNQcmVPcCA9PiBvcEtpbmQgPT0gUFJFX09QOwogIGJvb2wgZ2V0IGlzUG9zdE9wID0+IG9wS2luZCA9PSBQT1NUX09QOwogIGJvb2wgZ2V0IGlzQXNzaWduT3AgPT4gb3BLaW5kID09IEFTU0lHTl9PUDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgcmVjZWl2ZXIuaXNOdWxsKGRvbWFpbikuaXNQb3RlbnRpYWxseVRydWU7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXREYXJ0UmVjZWl2ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiByZWNlaXZlcjsKICBAb3ZlcnJpZGUKICBib29sIG9ubHlUaHJvd3NOU00oKSA9PiB0cnVlOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHZhbHVlID0+IGlucHV0c1sxXTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFJlYWRNb2RpZnlXcml0ZSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gaXNBc3NpZ25PcDsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiUmVhZE1vZGlmeVdyaXRlICRqc09wICRvcEtpbmQgJGVsZW1lbnQiOwp9CgphYnN0cmFjdCBjbGFzcyBITG9jYWxBY2Nlc3MgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGZpbmFsIExvY2FsIHZhcmlhYmxlOwoKICBITG9jYWxBY2Nlc3ModGhpcy52YXJpYWJsZSwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSk7CgogIEhJbnN0cnVjdGlvbiBnZXQgcmVjZWl2ZXIgPT4gaW5wdXRzWzBdOwp9CgpjbGFzcyBITG9jYWxHZXQgZXh0ZW5kcyBITG9jYWxBY2Nlc3MgewogIC8vIE5vIG5lZWQgdG8gdXNlIEdWTiBmb3IgYSBbSExvY2FsR2V0XSwgaXQgaXMganVzdCBhIGxvY2FsCiAgLy8gYWNjZXNzLgogIEhMb2NhbEdldChMb2NhbCB2YXJpYWJsZSwgSExvY2FsVmFsdWUgbG9jYWwsIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIodmFyaWFibGUsIDxISW5zdHJ1Y3Rpb24+W2xvY2FsXSwgdHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMb2NhbEdldCh0aGlzKTsKCiAgSExvY2FsVmFsdWUgZ2V0IGxvY2FsID0+IGlucHV0c1swXTsKfQoKY2xhc3MgSExvY2FsU2V0IGV4dGVuZHMgSExvY2FsQWNjZXNzIHsKICBITG9jYWxTZXQoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIExvY2FsIHZhcmlhYmxlLCBITG9jYWxWYWx1ZSBsb2NhbCwKICAgICAgSEluc3RydWN0aW9uIHZhbHVlKQogICAgICA6IHN1cGVyKHZhcmlhYmxlLCA8SEluc3RydWN0aW9uPltsb2NhbCwgdmFsdWVdLCBkb21haW4uZW1wdHlUeXBlKTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMb2NhbFNldCh0aGlzKTsKCiAgSExvY2FsVmFsdWUgZ2V0IGxvY2FsID0+IGlucHV0c1swXTsKICBISW5zdHJ1Y3Rpb24gZ2V0IHZhbHVlID0+IGlucHV0c1sxXTsKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiB0cnVlOwp9CgphYnN0cmFjdCBjbGFzcyBIRm9yZWlnbiBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSEZvcmVpZ24oQWJzdHJhY3RWYWx1ZSB0eXBlLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzKSA6IHN1cGVyKGlucHV0cywgdHlwZSk7CgogIGJvb2wgZ2V0IGlzU3RhdGVtZW50ID0+IGZhbHNlOwogIE5hdGl2ZUJlaGF2aW9yIGdldCBuYXRpdmVCZWhhdmlvciA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICByZXR1cm4gc2lkZUVmZmVjdHMuaGFzU2lkZUVmZmVjdHMoKSB8fCBzaWRlRWZmZWN0cy5kZXBlbmRzT25Tb21ldGhpbmcoKTsKICB9Cn0KCmNsYXNzIEhGb3JlaWduQ29kZSBleHRlbmRzIEhGb3JlaWduIHsKICBmaW5hbCBqcy5UZW1wbGF0ZSBjb2RlVGVtcGxhdGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc1N0YXRlbWVudDsKICBAb3ZlcnJpZGUKICBmaW5hbCBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvcjsKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHRocm93QmVoYXZpb3I7CiAgZmluYWwgRnVuY3Rpb25FbnRpdHkgZm9yZWlnbkZ1bmN0aW9uOwoKICBIRm9yZWlnbkNvZGUodGhpcy5jb2RlVGVtcGxhdGUsIEFic3RyYWN0VmFsdWUgdHlwZSwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAge3RoaXMuaXNTdGF0ZW1lbnQ6IGZhbHNlLAogICAgICBTaWRlRWZmZWN0cyBlZmZlY3RzLAogICAgICBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciwKICAgICAgTmF0aXZlVGhyb3dCZWhhdmlvciB0aHJvd0JlaGF2aW9yLAogICAgICB0aGlzLmZvcmVpZ25GdW5jdGlvbn0pCiAgICAgIDogdGhpcy5uYXRpdmVCZWhhdmlvciA9IG5hdGl2ZUJlaGF2aW9yLAogICAgICAgIHRoaXMudGhyb3dCZWhhdmlvciA9IHRocm93QmVoYXZpb3IsCiAgICAgICAgc3VwZXIodHlwZSwgaW5wdXRzKSB7CiAgICBhc3NlcnQoY29kZVRlbXBsYXRlICE9IG51bGwpOwogICAgaWYgKGVmZmVjdHMgPT0gbnVsbCAmJiBuYXRpdmVCZWhhdmlvciAhPSBudWxsKSB7CiAgICAgIGVmZmVjdHMgPSBuYXRpdmVCZWhhdmlvci5zaWRlRWZmZWN0czsKICAgIH0KICAgIGlmICh0aGlzLnRocm93QmVoYXZpb3IgPT0gbnVsbCkgewogICAgICB0aGlzLnRocm93QmVoYXZpb3IgPSAobmF0aXZlQmVoYXZpb3IgPT0gbnVsbCkKICAgICAgICAgID8gTmF0aXZlVGhyb3dCZWhhdmlvci5NQVkKICAgICAgICAgIDogbmF0aXZlQmVoYXZpb3IudGhyb3dCZWhhdmlvcjsKICAgIH0KICAgIGFzc2VydCh0aGlzLnRocm93QmVoYXZpb3IgIT0gbnVsbCk7CgogICAgaWYgKGVmZmVjdHMgIT0gbnVsbCkgc2lkZUVmZmVjdHMuYWRkKGVmZmVjdHMpOwogICAgaWYgKG5hdGl2ZUJlaGF2aW9yICE9IG51bGwgJiYgbmF0aXZlQmVoYXZpb3IudXNlR3ZuKSB7CiAgICAgIHNldFVzZUd2bigpOwogICAgfQogIH0KCiAgSEZvcmVpZ25Db2RlLnN0YXRlbWVudChqcy5UZW1wbGF0ZSBjb2RlVGVtcGxhdGUsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIFNpZGVFZmZlY3RzIGVmZmVjdHMsIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogdGhpcyhjb2RlVGVtcGxhdGUsIHR5cGUsIGlucHV0cywKICAgICAgICAgICAgaXNTdGF0ZW1lbnQ6IHRydWUsCiAgICAgICAgICAgIGVmZmVjdHM6IGVmZmVjdHMsCiAgICAgICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBuYXRpdmVCZWhhdmlvcik7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Rm9yZWlnbkNvZGUodGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IGlzU3RhdGVtZW50OwogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIGlmIChpbnB1dHMubGVuZ3RoID4gMCkgewogICAgICByZXR1cm4gaW5wdXRzLmZpcnN0LmlzTnVsbChkb21haW4pLmlzUG90ZW50aWFsbHlUcnVlCiAgICAgICAgICA/IHRocm93QmVoYXZpb3IuY2FuVGhyb3cKICAgICAgICAgIDogdGhyb3dCZWhhdmlvci5vbk5vbk51bGwuY2FuVGhyb3c7CiAgICB9CiAgICByZXR1cm4gdGhyb3dCZWhhdmlvci5jYW5UaHJvdzsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb25seVRocm93c05TTSgpID0+IHRocm93QmVoYXZpb3IuaXNPbmx5TnVsbE5TTUd1YXJkOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQWxsb2NhdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgbmF0aXZlQmVoYXZpb3IgIT0gbnVsbCAmJgogICAgICBuYXRpdmVCZWhhdmlvci5pc0FsbG9jYXRpb24gJiYKICAgICAgaXNOdWxsKGRvbWFpbikuaXNEZWZpbml0ZWx5RmFsc2U7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5GT1JFSUdOX0NPREVfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIRm9yZWlnbkNvZGU7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhGb3JlaWduQ29kZSBvdGhlcikgewogICAgcmV0dXJuIGNvZGVUZW1wbGF0ZS5zb3VyY2UgIT0gbnVsbCAmJgogICAgICAgIGNvZGVUZW1wbGF0ZS5zb3VyY2UgPT0gb3RoZXIuY29kZVRlbXBsYXRlLnNvdXJjZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIRm9yZWlnbkNvZGUoIiR7Y29kZVRlbXBsYXRlLnNvdXJjZX0iKSc7Cn0KCmFic3RyYWN0IGNsYXNzIEhJbnZva2VCaW5hcnkgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIEhJbnZva2VCaW5hcnkoCiAgICAgIEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIHRoaXMuc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltsZWZ0LCByaWdodF0sIHR5cGUpIHsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgbGVmdCA9PiBpbnB1dHNbMF07CiAgSEluc3RydWN0aW9uIGdldCByaWdodCA9PiBpbnB1dHNbMV07CgogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCk7Cn0KCmFic3RyYWN0IGNsYXNzIEhCaW5hcnlBcml0aG1ldGljIGV4dGVuZHMgSEludm9rZUJpbmFyeSB7CiAgSEJpbmFyeUFyaXRobWV0aWMoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCk7Cn0KCmNsYXNzIEhBZGQgZXh0ZW5kcyBIQmluYXJ5QXJpdGhtZXRpYyB7CiAgSEFkZChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRBZGQodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmFkZDsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQUREX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEFkZDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIRGl2aWRlIGV4dGVuZHMgSEJpbmFyeUFyaXRobWV0aWMgewogIEhEaXZpZGUoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RGl2aWRlKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5kaXZpZGU7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkRJVklERV9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhEaXZpZGU7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSE11bHRpcGx5IGV4dGVuZHMgSEJpbmFyeUFyaXRobWV0aWMgewogIEhNdWx0aXBseShISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRNdWx0aXBseSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0ubXVsdGlwbHk7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLk1VTFRJUExZX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSE11bHRpcGx5OwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhTdWJ0cmFjdCBleHRlbmRzIEhCaW5hcnlBcml0aG1ldGljIHsKICBIU3VidHJhY3QoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0U3VidHJhY3QodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLnN1YnRyYWN0OwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5TVUJUUkFDVF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhTdWJ0cmFjdDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIVHJ1bmNhdGluZ0RpdmlkZSBleHRlbmRzIEhCaW5hcnlBcml0aG1ldGljIHsKICBIVHJ1bmNhdGluZ0RpdmlkZShISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUcnVuY2F0aW5nRGl2aWRlKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+CiAgICAgIGNvbnN0YW50X3N5c3RlbS50cnVuY2F0aW5nRGl2aWRlOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5UUlVOQ0FUSU5HX0RJVklERV9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhUcnVuY2F0aW5nRGl2aWRlOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhSZW1haW5kZXIgZXh0ZW5kcyBIQmluYXJ5QXJpdGhtZXRpYyB7CiAgSFJlbWFpbmRlcihISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRSZW1haW5kZXIodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLnJlbWFpbmRlcjsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uUkVNQUlOREVSX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSFJlbWFpbmRlcjsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgovLy8gQW4gW0hTd2l0Y2hdIGluc3RydWN0aW9uIGhhcyBvbmUgaW5wdXQgZm9yIHRoZSBpbmNvbWluZwovLy8gdmFsdWUsIGFuZCBvbmUgaW5wdXQgcGVyIGNvbnN0YW50IHRoYXQgaXQgY2FuIHN3aXRjaCBvbi4KLy8vIEl0cyBibG9jayBoYXMgb25lIHN1Y2Nlc3NvciBwZXIgY29uc3RhbnQsIGFuZCBvbmUgZm9yIHRoZSBkZWZhdWx0LgpjbGFzcyBIU3dpdGNoIGV4dGVuZHMgSENvbnRyb2xGbG93IHsKICBIU3dpdGNoKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzKQogICAgICA6IHN1cGVyKGRvbWFpbiwgaW5wdXRzKTsKCiAgSENvbnN0YW50IGNvbnN0YW50KGludCBpbmRleCkgPT4gaW5wdXRzW2luZGV4ICsgMV07CiAgSEluc3RydWN0aW9uIGdldCBleHByZXNzaW9uID0+IGlucHV0c1swXTsKCiAgLy8vIFByb3ZpZGVzIHRoZSB0YXJnZXQgdG8ganVtcCB0byBpZiBub25lIG9mIHRoZSBjb25zdGFudHMgbWF0Y2gKICAvLy8gdGhlIGV4cHJlc3Npb24uIElmIHRoZSBzd2l0Y2ggaGFkIG5vIGRlZmF1bHQgY2FzZSwgdGhpcyBpcyB0aGUKICAvLy8gZm9sbG93aW5nIGpvaW4tYmxvY2suCiAgSEJhc2ljQmxvY2sgZ2V0IGRlZmF1bHRUYXJnZXQgPT4gYmxvY2suc3VjY2Vzc29ycy5sYXN0OwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN3aXRjaCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkhTd2l0Y2ggY2FzZXMgPSAkaW5wdXRzIjsKfQoKYWJzdHJhY3QgY2xhc3MgSEJpbmFyeUJpdE9wIGV4dGVuZHMgSEludm9rZUJpbmFyeSB7CiAgSEJpbmFyeUJpdE9wKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKfQoKY2xhc3MgSFNoaWZ0TGVmdCBleHRlbmRzIEhCaW5hcnlCaXRPcCB7CiAgSFNoaWZ0TGVmdChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTaGlmdExlZnQodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLnNoaWZ0TGVmdDsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uU0hJRlRfTEVGVF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhTaGlmdExlZnQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSFNoaWZ0UmlnaHQgZXh0ZW5kcyBIQmluYXJ5Qml0T3AgewogIEhTaGlmdFJpZ2h0KEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFNoaWZ0UmlnaHQodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLnNoaWZ0UmlnaHQ7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlNISUZUX1JJR0hUX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSFNoaWZ0UmlnaHQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSEJpdE9yIGV4dGVuZHMgSEJpbmFyeUJpdE9wIHsKICBIQml0T3IoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Qml0T3IodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmJpdE9yOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5CSVRfT1JfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIQml0T3I7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSEJpdEFuZCBleHRlbmRzIEhCaW5hcnlCaXRPcCB7CiAgSEJpdEFuZChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRCaXRBbmQodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmJpdEFuZDsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQklUX0FORF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhCaXRBbmQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSEJpdFhvciBleHRlbmRzIEhCaW5hcnlCaXRPcCB7CiAgSEJpdFhvcihISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRCaXRYb3IodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmJpdFhvcjsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQklUX1hPUl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhCaXRYb3I7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKYWJzdHJhY3QgY2xhc3MgSEludm9rZVVuYXJ5IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTZWxlY3RvciBzZWxlY3RvcjsKICBISW52b2tlVW5hcnkoSEluc3RydWN0aW9uIGlucHV0LCB0aGlzLnNlbGVjdG9yLCB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2lucHV0XSwgdHlwZSkgewogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCBvcGVyYW5kID0+IGlucHV0c1swXTsKCiAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpOwp9CgpjbGFzcyBITmVnYXRlIGV4dGVuZHMgSEludm9rZVVuYXJ5IHsKICBITmVnYXRlKEhJbnN0cnVjdGlvbiBpbnB1dCwgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihpbnB1dCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TmVnYXRlKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uVW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLm5lZ2F0ZTsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uTkVHQVRFX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSE5lZ2F0ZTsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIQWJzIGV4dGVuZHMgSEludm9rZVVuYXJ5IHsKICBIQWJzKEhJbnN0cnVjdGlvbiBpbnB1dCwgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihpbnB1dCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QWJzKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uVW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmFiczsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQUJTX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEFiczsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIQml0Tm90IGV4dGVuZHMgSEludm9rZVVuYXJ5IHsKICBIQml0Tm90KEhJbnN0cnVjdGlvbiBpbnB1dCwgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihpbnB1dCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Qml0Tm90KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uVW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmJpdE5vdDsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQklUX05PVF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhCaXROb3Q7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSEV4aXQgZXh0ZW5kcyBIQ29udHJvbEZsb3cgewogIEhFeGl0KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA6IHN1cGVyKGRvbWFpbiwgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnZXhpdCc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRFeGl0KHRoaXMpOwp9CgpjbGFzcyBIR290byBleHRlbmRzIEhDb250cm9sRmxvdyB7CiAgSEdvdG8oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIDogc3VwZXIoZG9tYWluLCBjb25zdCA8SEluc3RydWN0aW9uPltdKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdnb3RvJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEdvdG8odGhpcyk7Cn0KCmFic3RyYWN0IGNsYXNzIEhKdW1wIGV4dGVuZHMgSENvbnRyb2xGbG93IHsKICBmaW5hbCBKdW1wVGFyZ2V0IHRhcmdldDsKICBmaW5hbCBMYWJlbERlZmluaXRpb24gbGFiZWw7CiAgSEp1bXAoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIHRoaXMudGFyZ2V0LAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBsYWJlbCA9IG51bGwsCiAgICAgICAgc3VwZXIoZG9tYWluLCBjb25zdCA8SEluc3RydWN0aW9uPltdKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQogIEhKdW1wLnRvTGFiZWwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIExhYmVsRGVmaW5pdGlvbiBsYWJlbCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogbGFiZWwgPSBsYWJlbCwKICAgICAgICB0YXJnZXQgPSBsYWJlbC50YXJnZXQsCiAgICAgICAgc3VwZXIoZG9tYWluLCBjb25zdCA8SEluc3RydWN0aW9uPltdKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQp9CgpjbGFzcyBIQnJlYWsgZXh0ZW5kcyBISnVtcCB7CiAgLy8vIFNpZ25hbHMgdGhhdCB0aGlzIGlzIGEgc3BlY2lhbCBicmVhayBpbnN0cnVjdGlvbiBmb3IgdGhlIHN5bnRoZXRpYyBsb29wCiAgLy8vIGdlbmVyYXRlZCBmb3IgYSBzd2l0Y2ggc3RhdGVtZW50IHdpdGggY29udGludWUgc3RhdGVtZW50cy4gU2VlCiAgLy8vIFtTc2FGcm9tQXN0TWl4aW4uYnVpbGRDb21wbGV4U3dpdGNoU3RhdGVtZW50XSBmb3IgZGV0YWlsLgogIGZpbmFsIGJvb2wgYnJlYWtTd2l0Y2hDb250aW51ZUxvb3A7CgogIEhCcmVhayhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgSnVtcFRhcmdldCB0YXJnZXQsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7Ym9vbCB0aGlzLmJyZWFrU3dpdGNoQ29udGludWVMb29wOiBmYWxzZX0pCiAgICAgIDogc3VwZXIoZG9tYWluLCB0YXJnZXQsIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgSEJyZWFrLnRvTGFiZWwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIExhYmVsRGVmaW5pdGlvbiBsYWJlbCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogYnJlYWtTd2l0Y2hDb250aW51ZUxvb3AgPSBmYWxzZSwKICAgICAgICBzdXBlci50b0xhYmVsKGRvbWFpbiwgbGFiZWwsIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gKGxhYmVsICE9IG51bGwpID8gJ2JyZWFrICR7bGFiZWwubGFiZWxOYW1lfScgOiAnYnJlYWsnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJyZWFrKHRoaXMpOwp9CgpjbGFzcyBIQ29udGludWUgZXh0ZW5kcyBISnVtcCB7CiAgSENvbnRpbnVlKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBKdW1wVGFyZ2V0IHRhcmdldCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoZG9tYWluLCB0YXJnZXQsIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgSENvbnRpbnVlLnRvTGFiZWwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIExhYmVsRGVmaW5pdGlvbiBsYWJlbCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIudG9MYWJlbChkb21haW4sIGxhYmVsLCBzb3VyY2VJbmZvcm1hdGlvbik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgIChsYWJlbCAhPSBudWxsKSA/ICdjb250aW51ZSAke2xhYmVsLmxhYmVsTmFtZX0nIDogJ2NvbnRpbnVlJzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRDb250aW51ZSh0aGlzKTsKfQoKY2xhc3MgSFRyeSBleHRlbmRzIEhDb250cm9sRmxvdyB7CiAgSExvY2FsVmFsdWUgZXhjZXB0aW9uOwogIEhCYXNpY0Jsb2NrIGNhdGNoQmxvY2s7CiAgSEJhc2ljQmxvY2sgZmluYWxseUJsb2NrOwogIEhUcnkoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIDogc3VwZXIoZG9tYWluLCBjb25zdCA8SEluc3RydWN0aW9uPltdKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICd0cnknOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VHJ5KHRoaXMpOwogIEhCYXNpY0Jsb2NrIGdldCBqb2luQmxvY2sgPT4gdGhpcy5ibG9jay5zdWNjZXNzb3JzLmxhc3Q7Cn0KCi8vIEFuIFtIRXhpdFRyeV0gY29udHJvbCBmbG93IG5vZGUgaXMgdXNlZCB3aGVuIHRoZSBib2R5IG9mIGEgdHJ5IG9yCi8vIHRoZSBib2R5IG9mIGEgY2F0Y2ggY29udGFpbnMgYSByZXR1cm4sIGJyZWFrIG9yIGNvbnRpbnVlLiBUbyBidWlsZAovLyB0aGUgY29udHJvbCBmbG93IGdyYXBoLCB3ZSBleHBsaWNpdGx5IG1hcmsgdGhlIGJvZHkgdGhhdAovLyBsZWFkcyB0byBvbmUgb2YgdGhpcyBpbnN0cnVjdGlvbiBhIHByZWRlY2Vzc29yIG9mIGNhdGNoIGFuZAovLyBmaW5hbGx5LgpjbGFzcyBIRXhpdFRyeSBleHRlbmRzIEhDb250cm9sRmxvdyB7CiAgSEV4aXRUcnkoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIDogc3VwZXIoZG9tYWluLCBjb25zdCA8SEluc3RydWN0aW9uPltdKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdleGl0IHRyeSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRFeGl0VHJ5KHRoaXMpOwogIEhCYXNpY0Jsb2NrIGdldCBib2R5VHJ5U3VjY2Vzc29yID0+IGJsb2NrLnN1Y2Nlc3NvcnNbMF07Cn0KCmNsYXNzIEhJZiBleHRlbmRzIEhDb25kaXRpb25hbEJyYW5jaCB7CiAgSEJsb2NrRmxvdyBibG9ja0luZm9ybWF0aW9uID0gbnVsbDsKICBISWYoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEhJbnN0cnVjdGlvbiBjb25kaXRpb24pCiAgICAgIDogc3VwZXIoZG9tYWluLCA8SEluc3RydWN0aW9uPltjb25kaXRpb25dKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdpZic7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJZih0aGlzKTsKCiAgSEJhc2ljQmxvY2sgZ2V0IHRoZW5CbG9jayB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKGJsb2NrLmRvbWluYXRlZEJsb2Nrc1swXSwgYmxvY2suc3VjY2Vzc29yc1swXSkpOwogICAgcmV0dXJuIGJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgfQoKICBIQmFzaWNCbG9jayBnZXQgZWxzZUJsb2NrIHsKICAgIGFzc2VydChpZGVudGljYWwoYmxvY2suZG9taW5hdGVkQmxvY2tzWzFdLCBibG9jay5zdWNjZXNzb3JzWzFdKSk7CiAgICByZXR1cm4gYmxvY2suc3VjY2Vzc29yc1sxXTsKICB9CgogIEhCYXNpY0Jsb2NrIGdldCBqb2luQmxvY2sgPT4gYmxvY2tJbmZvcm1hdGlvbi5jb250aW51YXRpb247Cn0KCmNsYXNzIEhMb29wQnJhbmNoIGV4dGVuZHMgSENvbmRpdGlvbmFsQnJhbmNoIHsKICBzdGF0aWMgY29uc3QgaW50IENPTkRJVElPTl9GSVJTVF9MT09QID0gMDsKICBzdGF0aWMgY29uc3QgaW50IERPX1dISUxFX0xPT1AgPSAxOwoKICBmaW5hbCBpbnQga2luZDsKICBITG9vcEJyYW5jaChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgSEluc3RydWN0aW9uIGNvbmRpdGlvbiwKICAgICAgW3RoaXMua2luZCA9IENPTkRJVElPTl9GSVJTVF9MT09QXSkKICAgICAgOiBzdXBlcihkb21haW4sIDxISW5zdHJ1Y3Rpb24+W2NvbmRpdGlvbl0pOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2xvb3AtYnJhbmNoJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExvb3BCcmFuY2godGhpcyk7Cn0KCmNsYXNzIEhDb25zdGFudCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgZmluYWwgQ29uc3RhbnRWYWx1ZSBjb25zdGFudDsKICBIQ29uc3RhbnQuaW50ZXJuYWwodGhpcy5jb25zdGFudCwgQWJzdHJhY3RWYWx1ZSBjb25zdGFudFR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bXSwgY29uc3RhbnRUeXBlKTsKCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnbGl0ZXJhbDogJHtjb25zdGFudC50b1N0cnVjdHVyZWRUZXh0KCl9JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdENvbnN0YW50KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnQoKSA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudEJvb2xlYW4oKSA9PiBjb25zdGFudC5pc0Jvb2w7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50TnVsbCgpID0+IGNvbnN0YW50LmlzTnVsbDsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnROdW1iZXIoKSA9PiBjb25zdGFudC5pc051bTsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnRJbnRlZ2VyKCkgPT4gY29uc3RhbnQuaXNJbnQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50U3RyaW5nKCkgPT4gY29uc3RhbnQuaXNTdHJpbmc7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50TGlzdCgpID0+IGNvbnN0YW50LmlzTGlzdDsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnRNYXAoKSA9PiBjb25zdGFudC5pc01hcDsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnRGYWxzZSgpID0+IGNvbnN0YW50LmlzRmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50VHJ1ZSgpID0+IGNvbnN0YW50LmlzVHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyY2VwdG9yKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gY29uc3RhbnQuaXNJbnRlcmNlcHRvcjsKCiAgLy8gTWF5YmUgYXZvaWQgdGhpcyBpZiB0aGUgbGl0ZXJhbCBpcyBiaWc/CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBzZXQgaW5zdHJ1Y3Rpb25UeXBlKHR5cGUpIHsKICAgIC8vIE9ubHkgbGlzdHMgY2FuIGJlIHNwZWNpYWxpemVkLiBUaGUgU1NBIGJ1aWxkZXIgdXNlcyB0aGUKICAgIC8vIGluZmVycmVyIGZvciBmaW5kaW5nIHRoZSB0eXBlIG9mIGEgY29uc3RhbnQgbGlzdC4gV2Ugc2hvdWxkCiAgICAvLyBoYXZlIHRoZSBjb25zdGFudCBrbm93IGl0cyB0eXBlIGluc3RlYWQuCiAgICBpZiAoIWlzQ29uc3RhbnRMaXN0KCkpIHJldHVybjsKICAgIHN1cGVyLmluc3RydWN0aW9uVHlwZSA9IHR5cGU7CiAgfQp9CgpjbGFzcyBITm90IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBITm90KEhJbnN0cnVjdGlvbiB2YWx1ZSwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3ZhbHVlXSwgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdE5vdCh0aGlzKTsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uTk9UX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSE5vdDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgovLy8gQW4gW0hMb2NhbFZhbHVlXSByZXByZXNlbnRzIGEgbG9jYWwuIFVubGlrZSBbSFBhcmFtZXRlclZhbHVlXXMgaXRzCi8vLyBmaXJzdCB1c2UgbXVzdCBiZSBpbiBhbiBITG9jYWxTZXQuIFRoYXQgaXMsIFtIUGFyYW1ldGVyVmFsdWVdcyBoYXZlIGEKLy8vIHZhbHVlIGZyb20gdGhlIHN0YXJ0LCB3aGVyZWFzIFtITG9jYWxWYWx1ZV1zIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZmlyc3QuCmNsYXNzIEhMb2NhbFZhbHVlIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBITG9jYWxWYWx1ZShFbnRpdHkgdmFyaWFibGUsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltdLCB0eXBlKSB7CiAgICBzb3VyY2VFbGVtZW50ID0gdmFyaWFibGU7CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdsb2NhbCAke3NvdXJjZUVsZW1lbnQubmFtZX0nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TG9jYWxWYWx1ZSh0aGlzKTsKfQoKY2xhc3MgSFBhcmFtZXRlclZhbHVlIGV4dGVuZHMgSExvY2FsVmFsdWUgewogIEhQYXJhbWV0ZXJWYWx1ZShFbnRpdHkgdmFyaWFibGUsIEFic3RyYWN0VmFsdWUgdHlwZSkgOiBzdXBlcih2YXJpYWJsZSwgdHlwZSk7CgogIC8vIFtIUGFyYW1ldGVyVmFsdWVdcyBhcmUgZWl0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIChpbiBmdWxseSBTU0EKICAvLyBjb252ZXJ0ZWQgY29kZSksIG9yIHRoZSBtdXRhYmxlIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHZhbHVlIChpbgogIC8vIGluY29tcGxldGVseSBTU0EgY29udmVydGVkIGNvZGUsIGUuZy4gbWV0aG9kcyBjb250YWluaW5nIGV4Y2VwdGlvbnMpLgogIGJvb2wgdXNlZEFzVmFyaWFibGUoKSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIHVzZWRCeSkgewogICAgICBpZiAodXNlciBpcyBITG9jYWxHZXQpIHJldHVybiB0cnVlOwogICAgICBpZiAodXNlciBpcyBITG9jYWxTZXQgJiYgdXNlci5sb2NhbCA9PSB0aGlzKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ3BhcmFtZXRlciAke3NvdXJjZUVsZW1lbnQubmFtZX0nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UGFyYW1ldGVyVmFsdWUodGhpcyk7Cn0KCmNsYXNzIEhUaGlzIGV4dGVuZHMgSFBhcmFtZXRlclZhbHVlIHsKICBIVGhpcyhUaGlzTG9jYWwgZWxlbWVudCwgQWJzdHJhY3RWYWx1ZSB0eXBlKSA6IHN1cGVyKGVsZW1lbnQsIHR5cGUpOwoKICBAb3ZlcnJpZGUKICBUaGlzTG9jYWwgZ2V0IHNvdXJjZUVsZW1lbnQgPT4gc3VwZXIuc291cmNlRWxlbWVudDsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXQgc291cmNlRWxlbWVudChjb3ZhcmlhbnQgVGhpc0xvY2FsIGxvY2FsKSB7CiAgICBzdXBlci5zb3VyY2VFbGVtZW50ID0gbG9jYWw7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFRoaXModGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNDb2RlTW90aW9uSW52YXJpYW50KCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyY2VwdG9yKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YQogICAgICAgIC5pc0ludGVyY2VwdGVkQ2xhc3Moc291cmNlRWxlbWVudC5lbmNsb3NpbmdDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAndGhpcyc7Cn0KCmNsYXNzIEhQaGkgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIHN0YXRpYyBjb25zdCBJU19OT1RfTE9HSUNBTF9PUEVSQVRPUiA9IDA7CiAgc3RhdGljIGNvbnN0IElTX0FORCA9IDE7CiAgc3RhdGljIGNvbnN0IElTX09SID0gMjsKCiAgaW50IGxvZ2ljYWxPcGVyYXRvclR5cGUgPSBJU19OT1RfTE9HSUNBTF9PUEVSQVRPUjsKCiAgLy8gVGhlIG9yZGVyIG9mIHRoZSBbaW5wdXRzXSBtdXN0IGNvcnJlc3BvbmQgdG8gdGhlIG9yZGVyIG9mIHRoZQogIC8vIHByZWRlY2Vzc29yLWVkZ2VzLiBUaGF0IGlzIGlmIGFuIGlucHV0IGNvbWVzIGZyb20gdGhlIGZpcnN0IHByZWRlY2Vzc29yCiAgLy8gb2YgdGhlIHN1cnJvdW5kaW5nIGJsb2NrLCB0aGVuIHRoZSBpbnB1dCBtdXN0IGJlIHRoZSBmaXJzdCBpbiB0aGUgW0hQaGldLgogIEhQaGkoTG9jYWwgdmFyaWFibGUsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHR5cGUpIHsKICAgIHNvdXJjZUVsZW1lbnQgPSB2YXJpYWJsZTsKICB9CiAgSFBoaS5ub0lucHV0cyhMb2NhbCB2YXJpYWJsZSwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHRoaXModmFyaWFibGUsIDxISW5zdHJ1Y3Rpb24+W10sIHR5cGUpOwogIEhQaGkuc2luZ2xlSW5wdXQoTG9jYWwgdmFyaWFibGUsIEhJbnN0cnVjdGlvbiBpbnB1dCwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHRoaXModmFyaWFibGUsIDxISW5zdHJ1Y3Rpb24+W2lucHV0XSwgdHlwZSk7CiAgSFBoaS5tYW55SW5wdXRzKExvY2FsIHZhcmlhYmxlLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogdGhpcyh2YXJpYWJsZSwgaW5wdXRzLCB0eXBlKTsKCiAgdm9pZCBhZGRJbnB1dChISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIGFzc2VydChpc0luQmFzaWNCbG9jaygpKTsKICAgIGlucHV0cy5hZGQoaW5wdXQpOwogICAgYXNzZXJ0KGlucHV0cy5sZW5ndGggPD0gYmxvY2sucHJlZGVjZXNzb3JzLmxlbmd0aCk7CiAgICBpbnB1dC51c2VkQnkuYWRkKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAncGhpICRpZCc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRQaGkodGhpcyk7Cn0KCmFic3RyYWN0IGNsYXNzIEhSZWxhdGlvbmFsIGV4dGVuZHMgSEludm9rZUJpbmFyeSB7CiAgYm9vbCB1c2VzQm9vbGlmaWVkSW50ZXJjZXB0b3IgPSBmYWxzZTsKICBIUmVsYXRpb25hbChsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKfQoKY2xhc3MgSElkZW50aXR5IGV4dGVuZHMgSFJlbGF0aW9uYWwgewogIC8vIENhY2hlZCBjb2RlZ2VuIGRlY2lzaW9uLgogIFN0cmluZyBzaW5nbGVDb21wYXJpc29uT3A7IC8vIG51bGwsICc9PT0nLCAnPT0nCgogIEhJZGVudGl0eShsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdElkZW50aXR5KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5pZGVudGl0eTsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uSURFTlRJVFlfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBISWRlbnRpdHk7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSEdyZWF0ZXIgZXh0ZW5kcyBIUmVsYXRpb25hbCB7CiAgSEdyZWF0ZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKSA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRHcmVhdGVyKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5ncmVhdGVyOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5HUkVBVEVSX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEdyZWF0ZXI7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSEdyZWF0ZXJFcXVhbCBleHRlbmRzIEhSZWxhdGlvbmFsIHsKICBIR3JlYXRlckVxdWFsKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0R3JlYXRlckVxdWFsKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5ncmVhdGVyRXF1YWw7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkdSRUFURVJfRVFVQUxfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIR3JlYXRlckVxdWFsOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhMZXNzIGV4dGVuZHMgSFJlbGF0aW9uYWwgewogIEhMZXNzKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSkgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGVzcyh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0ubGVzczsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uTEVTU19UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhMZXNzOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhMZXNzRXF1YWwgZXh0ZW5kcyBIUmVsYXRpb25hbCB7CiAgSExlc3NFcXVhbChsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExlc3NFcXVhbCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0ubGVzc0VxdWFsOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5MRVNTX0VRVUFMX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSExlc3NFcXVhbDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIUmV0dXJuIGV4dGVuZHMgSENvbnRyb2xGbG93IHsKICBIUmV0dXJuKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBISW5zdHJ1Y3Rpb24gdmFsdWUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKGRvbWFpbiwgPEhJbnN0cnVjdGlvbj5bdmFsdWVdKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ3JldHVybic7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRSZXR1cm4odGhpcyk7Cn0KCmNsYXNzIEhUaHJvd0V4cHJlc3Npb24gZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhUaHJvd0V4cHJlc3Npb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEhJbnN0cnVjdGlvbiB2YWx1ZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bdmFsdWVdLCBkb21haW4uZW1wdHlUeXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ3Rocm93IGV4cHJlc3Npb24nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VGhyb3dFeHByZXNzaW9uKHRoaXMpOwogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IHRydWU7Cn0KCmNsYXNzIEhBd2FpdCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSEF3YWl0KEhJbnN0cnVjdGlvbiB2YWx1ZSwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3ZhbHVlXSwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnYXdhaXQnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QXdhaXQodGhpcyk7CiAgLy8gQW4gYXdhaXQgd2lsbCB0aHJvdyBpZiBpdHMgYXJndW1lbnQgaXMgbm90IGEgcmVhbCBmdXR1cmUuCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0cyA9IG5ldyBTaWRlRWZmZWN0cygpOwp9CgpjbGFzcyBIWWllbGQgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhZaWVsZChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgSEluc3RydWN0aW9uIHZhbHVlLCB0aGlzLmhhc1N0YXIsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3ZhbHVlXSwgZG9tYWluLmVtcHR5VHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KICBib29sIGhhc1N0YXI7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAneWllbGQnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0WWllbGQodGhpcyk7CiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMoKTsKfQoKY2xhc3MgSFRocm93IGV4dGVuZHMgSENvbnRyb2xGbG93IHsKICBmaW5hbCBib29sIGlzUmV0aHJvdzsKICBIVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEhJbnN0cnVjdGlvbiB2YWx1ZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHt0aGlzLmlzUmV0aHJvdzogZmFsc2V9KQogICAgICA6IHN1cGVyKGRvbWFpbiwgPEhJbnN0cnVjdGlvbj5bdmFsdWVdKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ3Rocm93JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFRocm93KHRoaXMpOwp9CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgdGhpcyB0byBhICJIU3RhdGljTG9hZCIgb2YgYSBmaWVsZCB3aGVuIHdlIHVzZQovLyBDRkUgY29uc3RhbnRzLiBJdCBoYXMgYmVlbiB1c2VkIGZvciBzdGF0aWMgdGVhci1vZmZzIGV2ZW4gdGhvdWdoIHRoZXNlIHNob3VsZAovLyBoYXZlIGJlZW4gY29uc3RhbnRzLgpjbGFzcyBIU3RhdGljIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBmaW5hbCBNZW1iZXJFbnRpdHkgZWxlbWVudDsKCiAgSFN0YXRpYyh0aGlzLmVsZW1lbnQsIEFic3RyYWN0VmFsdWUgdHlwZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bXSwgdHlwZSkgewogICAgYXNzZXJ0KGVsZW1lbnQgIT0gbnVsbCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgaWYgKGVsZW1lbnQuaXNBc3NpZ25hYmxlKSB7CiAgICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKTsKICAgIH0KICAgIHNldFVzZUd2bigpOwogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdzdGF0aWMgJHtlbGVtZW50Lm5hbWV9JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN0YXRpYyh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IGd2bkhhc2hDb2RlKCkgPT4gc3VwZXIuZ3ZuSGFzaENvZGUoKSBeIGVsZW1lbnQuaGFzaENvZGU7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlNUQVRJQ19UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhTdGF0aWM7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhTdGF0aWMgb3RoZXIpID0+IGVsZW1lbnQgPT0gb3RoZXIuZWxlbWVudDsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29kZU1vdGlvbkludmFyaWFudCgpID0+ICFlbGVtZW50LmlzQXNzaWduYWJsZTsKfQoKY2xhc3MgSEludGVyY2VwdG9yIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICAvLyBUaGlzIGZpZWxkIHNob3VsZCBvcmlnaW5hbGx5IGJlIG51bGwgdG8gYWxsb3cgR1ZOJ2luZyBhbGwKICAvLyBbSEludGVyY2VwdG9yXSBvbiB0aGUgc2FtZSBpbnB1dC4KICBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkQ2xhc3NlczsKCiAgLy8gaW5wdXRzWzBdIGlzIGluaXRpYWxseSB0aGUgb25seSBpbnB1dCwgdGhlIHJlY2VpdmVyLgoKICAvLyBpbnB1dHNbMV0gaXMgYSBjb25zdGFudCBpbnRlcmNlcHRvciB3aGVuIHRoZSBpbnRlcmNlcHRvciBpcyBhIGNvbnN0YW50CiAgLy8gZXhjZXB0IGZvciBhIGBudWxsYCByZWNlaXZlci4gIFRoaXMgaXMgdXNlZCB3aGVuIHRoZSByZWNlaXZlciBjYW4ndCBiZQogIC8vIGZhbHN5LCBleGNlcHQgZm9yIGBudWxsYCwgYWxsb3dpbmcgdGhlIGdlbmVyYXRpb24gb2YgY29kZSBsaWtlCiAgLy8KICAvLyAgICAgKGEgJiYgQy5KU0FycmF5X21ldGhvZHMpLmdldCRmaXJzdChhKQogIC8vCgogIEhJbnRlcmNlcHRvcihISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltyZWNlaXZlcl0sIHR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSByZWNlaXZlci5zb3VyY2VJbmZvcm1hdGlvbjsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdpbnRlcmNlcHRvciBvbiAkaW50ZXJjZXB0ZWRDbGFzc2VzJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludGVyY2VwdG9yKHRoaXMpOwogIEhJbnN0cnVjdGlvbiBnZXQgcmVjZWl2ZXIgPT4gaW5wdXRzWzBdOwoKICBib29sIGdldCBpc0NvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvciA9PiBpbnB1dHMubGVuZ3RoID09IDI7CiAgSEluc3RydWN0aW9uIGdldCBjb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3IgPT4gaW5wdXRzWzFdOwogIHZvaWQgc2V0IGNvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvcihIQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIGFzc2VydCghaXNDb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3IpOwogICAgaW5wdXRzLmFkZChjb25zdGFudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJjZXB0b3IoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uSU5URVJDRVBUT1JfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBISW50ZXJjZXB0b3I7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnRlcmNlcHRvciBvdGhlcikgewogICAgcmV0dXJuIGludGVyY2VwdGVkQ2xhc3NlcyA9PSBvdGhlci5pbnRlcmNlcHRlZENsYXNzZXMgfHwKICAgICAgICAoaW50ZXJjZXB0ZWRDbGFzc2VzLmxlbmd0aCA9PSBvdGhlci5pbnRlcmNlcHRlZENsYXNzZXMubGVuZ3RoICYmCiAgICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWluc0FsbChvdGhlci5pbnRlcmNlcHRlZENsYXNzZXMpKTsKICB9Cn0KCi8vLyBBICJvbmUtc2hvdCIgaW50ZXJjZXB0b3IgaXMgYSBjYWxsIHRvIGEgc3ludGhldGl6ZWQgbWV0aG9kIHRoYXQKLy8vIHdpbGwgZmV0Y2ggdGhlIGludGVyY2VwdG9yIG9mIGl0cyBmaXJzdCBwYXJhbWV0ZXIsIGFuZCBtYWtlIGEgY2FsbAovLy8gb24gYSBnaXZlbiBzZWxlY3RvciB3aXRoIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycy4KLy8vCi8vLyBJbiBvcmRlciB0byBzaGFyZSB0aGUgc2FtZSBvcHRpbWl6YXRpb25zIHdpdGggcmVndWxhciBpbnRlcmNlcHRvcgovLy8gY2FsbHMsIHRoaXMgY2xhc3MgZXh0ZW5kcyBbSEludm9rZUR5bmFtaWNdIGFuZCBhbHNvIGhhcyB0aGUgbnVsbAovLy8gY29uc3RhbnQgYXMgdGhlIGZpcnN0IGlucHV0LgpjbGFzcyBIT25lU2hvdEludGVyY2VwdG9yIGV4dGVuZHMgSEludm9rZUR5bmFtaWMgewogIEBvdmVycmlkZQogIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRlZENsYXNzZXM7CgogIEhPbmVTaG90SW50ZXJjZXB0b3IoCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSwKICAgICAgdGhpcy50eXBlQXJndW1lbnRzLAogICAgICB0aGlzLmludGVyY2VwdGVkQ2xhc3NlcykKICAgICAgOiBzdXBlcihzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBudWxsLCBpbnB1dHMsIHRydWUsIHJlc3VsdFR5cGUpIHsKICAgIGFzc2VydChpbnB1dHNbMF0gaXMgSENvbnN0YW50KTsKICAgIGFzc2VydChpbnB1dHNbMF0uaW5zdHJ1Y3Rpb25UeXBlID09IGRvbWFpbi5udWxsVHlwZSk7CiAgICBhc3NlcnQoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgfQogIEBvdmVycmlkZQogIGJvb2wgaXNDYWxsT25JbnRlcmNlcHRvcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdvbmUgc2hvdCBpbnRlcmNlcHRvcjogc2VsZWN0b3I9JHNlbGVjdG9yLCBtYXNrPSRyZWNlaXZlclR5cGUnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0T25lU2hvdEludGVyY2VwdG9yKHRoaXMpOwp9CgovLy8gQW4gW0hMYXp5U3RhdGljXSBpcyBhIHN0YXRpYyB0aGF0IGlzIGluaXRpYWxpemVkIGxhemlseSBhdCBmaXJzdCByZWFkLgpjbGFzcyBITGF6eVN0YXRpYyBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgZmluYWwgRmllbGRFbnRpdHkgZWxlbWVudDsKCiAgSExhenlTdGF0aWMoCiAgICAgIHRoaXMuZWxlbWVudCwgQWJzdHJhY3RWYWx1ZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltdLCB0eXBlKSB7CiAgICAvLyBUT0RPKDQ5MzEpOiBUaGUgZmlyc3QgYWNjZXNzIGhhcyBzaWRlLWVmZmVjdHMsIGJ1dCB3ZSBhZnRlcndhcmRzIHdlCiAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBHVk4uCiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdsYXp5IHN0YXRpYyAke2VsZW1lbnQubmFtZX0nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGF6eVN0YXRpYyh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gMzA7CiAgLy8gVE9ETyg0OTMxKTogY2FuIHdlIGRvIGJldHRlciBoZXJlPwogIEBvdmVycmlkZQogIGJvb2wgaXNDb2RlTW90aW9uSW52YXJpYW50KCkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gdHJ1ZTsKfQoKY2xhc3MgSFN0YXRpY1N0b3JlIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBNZW1iZXJFbnRpdHkgZWxlbWVudDsKICBIU3RhdGljU3RvcmUoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIHRoaXMuZWxlbWVudCwgSEluc3RydWN0aW9uIHZhbHVlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3ZhbHVlXSwgZG9tYWluLmVtcHR5VHlwZSkgewogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNpZGVFZmZlY3RzLnNldENoYW5nZXNTdGF0aWNQcm9wZXJ0eSgpOwogIH0KICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdzdGF0aWMgc3RvcmUgJHtlbGVtZW50Lm5hbWV9JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN0YXRpY1N0b3JlKHRoaXMpOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHZhbHVlID0+IGlucHV0cy5zaW5nbGU7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5TVEFUSUNfU1RPUkVfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIU3RhdGljU3RvcmU7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhTdGF0aWNTdG9yZSBvdGhlcikgPT4gZWxlbWVudCA9PSBvdGhlci5lbGVtZW50OwogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IHVzZWRCeS5pc0VtcHR5Owp9CgpjbGFzcyBITGl0ZXJhbExpc3QgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhMaXRlcmFsTGlzdChMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdsaXRlcmFsIGxpc3QnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGl0ZXJhbExpc3QodGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNBbGxvY2F0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiB0cnVlOwp9CgovLy8gVGhlIHByaW1pdGl2ZSBhcnJheSBpbmRleGluZyBvcGVyYXRpb24uIE5vdGUgdGhhdCB0aGlzIGluc3RydWN0aW9uCi8vLyBkb2VzIG5vdCB0aHJvdyBiZWNhdXNlIHdlIGdlbmVyYXRlIHRoZSBjaGVja3MgZXhwbGljaXRseS4KY2xhc3MgSEluZGV4IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTZWxlY3RvciBzZWxlY3RvcjsKICBISW5kZXgoSEluc3RydWN0aW9uIHJlY2VpdmVyLCBISW5zdHJ1Y3Rpb24gaW5kZXgsIHRoaXMuc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltyZWNlaXZlciwgaW5kZXhdLCB0eXBlKSB7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uSW5kZXhTdG9yZSgpOwogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnaW5kZXggb3BlcmF0b3InOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW5kZXgodGhpcyk7CgogIEhJbnN0cnVjdGlvbiBnZXQgcmVjZWl2ZXIgPT4gaW5wdXRzWzBdOwogIEhJbnN0cnVjdGlvbiBnZXQgaW5kZXggPT4gaW5wdXRzWzFdOwoKICAvLyBJbXBsaWNpdCBkZXBlbmRlbmN5IG9uIEhCb3VuZHNDaGVjayBvciBjb25zdHJhaW50cyBvbiBpbmRleC4KICAvLyBUT0RPKDI3MjcyKTogTWFrZSBISW5kZXggZGVwZW5kZW50IG9uIGJvdW5kcyBjaGVja2luZy4KICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01vdmFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXREYXJ0UmVjZWl2ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiByZWNlaXZlcjsKICBAb3ZlcnJpZGUKICBib29sIG9ubHlUaHJvd3NOU00oKSA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIHJlY2VpdmVyLmlzTnVsbChkb21haW4pLmlzUG90ZW50aWFsbHlUcnVlOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uSU5ERVhfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSEluZGV4OwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5kZXggb3RoZXIpID0+IHRydWU7Cn0KCi8vLyBUaGUgcHJpbWl0aXZlIGFycmF5IGFzc2lnbm1lbnQgb3BlcmF0aW9uLiBOb3RlIHRoYXQgdGhpcyBpbnN0cnVjdGlvbgovLy8gZG9lcyBub3QgdGhyb3cgYmVjYXVzZSB3ZSBnZW5lcmF0ZSB0aGUgY2hlY2tzIGV4cGxpY2l0bHkuCmNsYXNzIEhJbmRleEFzc2lnbiBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgSEluZGV4QXNzaWduKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsCiAgICAgIEhJbnN0cnVjdGlvbiBpbmRleCwgSEluc3RydWN0aW9uIHZhbHVlLCB0aGlzLnNlbGVjdG9yKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyLCBpbmRleCwgdmFsdWVdLCBkb21haW4uZW1wdHlUeXBlKSB7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luZGV4KCk7CiAgfQogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdpbmRleCBhc3NpZ24gb3BlcmF0b3InOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW5kZXhBc3NpZ24odGhpcyk7CgogIEhJbnN0cnVjdGlvbiBnZXQgcmVjZWl2ZXIgPT4gaW5wdXRzWzBdOwogIEhJbnN0cnVjdGlvbiBnZXQgaW5kZXggPT4gaW5wdXRzWzFdOwogIEhJbnN0cnVjdGlvbiBnZXQgdmFsdWUgPT4gaW5wdXRzWzJdOwoKICAvLyBJbXBsaWNpdCBkZXBlbmRlbmN5IG9uIEhCb3VuZHNDaGVjayBvciBjb25zdHJhaW50cyBvbiBpbmRleC4KICAvLyBUT0RPKDI3MjcyKTogTWFrZSBISW5kZXggZGVwZW5kZW50IG9uIGJvdW5kcyBjaGVja2luZy4KICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01vdmFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXREYXJ0UmVjZWl2ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiByZWNlaXZlcjsKICBAb3ZlcnJpZGUKICBib29sIG9ubHlUaHJvd3NOU00oKSA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIHJlY2VpdmVyLmlzTnVsbChkb21haW4pLmlzUG90ZW50aWFsbHlUcnVlOwp9CgovLy8gSXMtdGVzdCB1c2luZyBsZWdhY3kgY29uc3RydWN0b3IgYmFzZWQgdHlwIHJlcHJlc2VudGF0aW9uLgpjbGFzcyBISXMgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIC8vLyBBIGNoZWNrIGFnYWluc3QgYSByYXcgdHlwZTogJ28gaXMgaW50JywgJ28gaXMgQScuCiAgc3RhdGljIGNvbnN0IGludCBSQVdfQ0hFQ0sgPSAwOwoKICAvLy8gQSBjaGVjayBhZ2FpbnN0IGEgdHlwZSB3aXRoIHR5cGUgYXJndW1lbnRzOiAnbyBpcyBMaXN0PGludD4nLCAnbyBpcyBDPFQ+Jy4KICBzdGF0aWMgY29uc3QgaW50IENPTVBPVU5EX0NIRUNLID0gMTsKCiAgLy8vIEEgY2hlY2sgYWdhaW5zdCBhIHNpbmdsZSB0eXBlIHZhcmlhYmxlOiAnbyBpcyBUJy4KICBzdGF0aWMgY29uc3QgaW50IFZBUklBQkxFX0NIRUNLID0gMjsKCiAgZmluYWwgRGFydFR5cGUgdHlwZUV4cHJlc3Npb247CiAgZmluYWwgaW50IGtpbmQ7CiAgZmluYWwgYm9vbCB1c2VJbnN0YW5jZU9mOwoKICBISXMuZGlyZWN0KERhcnRUeXBlIHR5cGVFeHByZXNzaW9uLCBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiB0aGlzLmludGVybmFsKAogICAgICAgICAgICB0eXBlRXhwcmVzc2lvbiwgW2V4cHJlc3Npb25dLCBSQVdfQ0hFQ0ssIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgLy8gUHJlLXZlcmlmaWVkIHRoYXQgdGhlIGNoZWNrIGNhbiBiZSBkb25lIHVzaW5nICdpbnN0YW5jZW9mJy4KICBISXMuaW5zdGFuY2VPZihEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbiwgSEluc3RydWN0aW9uIGV4cHJlc3Npb24sCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogdGhpcy5pbnRlcm5hbCgKICAgICAgICAgICAgdHlwZUV4cHJlc3Npb24sIFtleHByZXNzaW9uXSwgUkFXX0NIRUNLLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgdXNlSW5zdGFuY2VPZjogdHJ1ZSk7CgogIGZhY3RvcnkgSElzLnJhdygKICAgICAgRGFydFR5cGUgdHlwZUV4cHJlc3Npb24sCiAgICAgIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uLAogICAgICBISW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHJlLWFkZCBgJiYgdHlwZUV4cHJlc3Npb24udHJlYXRBc1Jhd2Agb3Igc29tZXRoaW5nCiAgICAvLyBlcXVpdmFsZW50ICh3aGljaCBzdGFydGVkIGZhaWxpbmcgb25jZSB3ZSBhbGxvd2VkIHR5cGVFeHByZXNzaW9ucyB0aGF0CiAgICAvLyBjb250YWluIHR5cGUgcGFyYW1ldGVycyBtYXRjaGluZyB0aGUgb3JpZ2luYWwgYm91bmRzIG9mIHRoZSB0eXBlKS4KICAgIGFzc2VydCgodHlwZUV4cHJlc3Npb24uaXNGdW5jdGlvblR5cGUgfHwgdHlwZUV4cHJlc3Npb24uaXNJbnRlcmZhY2VUeXBlKSwKICAgICAgICAiVW5leHBlY3RlZCByYXcgaXMtdGVzdCB0eXBlOiAkdHlwZUV4cHJlc3Npb24iKTsKICAgIHJldHVybiBuZXcgSElzLmludGVybmFsKHR5cGVFeHByZXNzaW9uLCBbZXhwcmVzc2lvbiwgaW50ZXJjZXB0b3JdLAogICAgICAgIFJBV19DSEVDSywgdHlwZSwgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgSElzLmNvbXBvdW5kKAogICAgICBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbiwKICAgICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24sCiAgICAgIEhJbnN0cnVjdGlvbiBjYWxsLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHRoaXMuaW50ZXJuYWwodHlwZUV4cHJlc3Npb24sIFtleHByZXNzaW9uLCBjYWxsXSwgQ09NUE9VTkRfQ0hFQ0ssIHR5cGUsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgSElzLnZhcmlhYmxlKAogICAgICBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbiwKICAgICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24sCiAgICAgIEhJbnN0cnVjdGlvbiBjYWxsLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHRoaXMuaW50ZXJuYWwodHlwZUV4cHJlc3Npb24sIFtleHByZXNzaW9uLCBjYWxsXSwgVkFSSUFCTEVfQ0hFQ0ssIHR5cGUsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgSElzLmludGVybmFsKHRoaXMudHlwZUV4cHJlc3Npb24sIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIHRoaXMua2luZCwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgdGhpcy51c2VJbnN0YW5jZU9mOiBmYWxzZX0pCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKSB7CiAgICBhc3NlcnQoa2luZCA+PSBSQVdfQ0hFQ0sgJiYga2luZCA8PSBWQVJJQUJMRV9DSEVDSyk7CiAgICBzZXRVc2VHdm4oKTsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgZXhwcmVzc2lvbiA9PiBpbnB1dHNbMF07CgogIEhJbnN0cnVjdGlvbiBnZXQgaW50ZXJjZXB0b3IgewogICAgYXNzZXJ0KGtpbmQgPT0gUkFXX0NIRUNLKTsKICAgIHJldHVybiBpbnB1dHMubGVuZ3RoID4gMSA/IGlucHV0c1sxXSA6IG51bGw7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IGNoZWNrQ2FsbCB7CiAgICBhc3NlcnQoa2luZCA9PSBWQVJJQUJMRV9DSEVDSyB8fCBraW5kID09IENPTVBPVU5EX0NIRUNLKTsKICAgIHJldHVybiBpbnB1dHNbMV07CiAgfQoKICBib29sIGdldCBpc1Jhd0NoZWNrID0+IGtpbmQgPT0gUkFXX0NIRUNLOwogIGJvb2wgZ2V0IGlzVmFyaWFibGVDaGVjayA9PiBraW5kID09IFZBUklBQkxFX0NIRUNLOwogIGJvb2wgZ2V0IGlzQ29tcG91bmRDaGVjayA9PiBraW5kID09IENPTVBPVU5EX0NIRUNLOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdElzKHRoaXMpOwoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICIkZXhwcmVzc2lvbiBpcyAkdHlwZUV4cHJlc3Npb24iOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uSVNfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhJczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJcyBvdGhlcikgewogICAgcmV0dXJuIHR5cGVFeHByZXNzaW9uID09IG90aGVyLnR5cGVFeHByZXNzaW9uICYmIGtpbmQgPT0gb3RoZXIua2luZDsKICB9Cn0KCi8vLyBISXNWaWFJbnRlcmNlcHRvciBpcyBhIGxhdGUtc3RhZ2UgaW5zdHJ1Y3Rpb24gZm9yIGEgdHlwZSB0ZXN0IHRoYXQgY2FuIGJlCi8vLyBkb25lIGVudGlyZWx5IG9uIGFuIGludGVyY2VwdG9yLiAgSXQgaXMgbm90IGEgSENoZWNrIGJlY2F1c2UgdGhlIGNoZWNrZWQKLy8vIGlucHV0IGlzIG5vdCBvbmUgb2YgdGhlIGlucHV0cy4KY2xhc3MgSElzVmlhSW50ZXJjZXB0b3IgZXh0ZW5kcyBITGF0ZUluc3RydWN0aW9uIHsKICBmaW5hbCBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbjsKICBISXNWaWFJbnRlcmNlcHRvcigKICAgICAgdGhpcy50eXBlRXhwcmVzc2lvbiwgSEluc3RydWN0aW9uIGludGVyY2VwdG9yLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5baW50ZXJjZXB0b3JdLCB0eXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgaW50ZXJjZXB0b3IgPT4gaW5wdXRzWzBdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdElzVmlhSW50ZXJjZXB0b3IodGhpcyk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAiJGludGVyY2VwdG9yIGlzICR0eXBlRXhwcmVzc2lvbiI7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLklTX1ZJQV9JTlRFUkNFUFRPUl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBISXNWaWFJbnRlcmNlcHRvcjsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSElzIG90aGVyKSB7CiAgICByZXR1cm4gdHlwZUV4cHJlc3Npb24gPT0gb3RoZXIudHlwZUV4cHJlc3Npb247CiAgfQp9CgovLy8gSExhdGVWYWx1ZSBpcyBhIGxhdGUtc3RhZ2UgaW5zdHJ1Y3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmb3JjZSBhIHZhbHVlCi8vLyBpbnRvIGEgdGVtcG9yYXJ5LgovLy8KLy8vIEhMYXRlVmFsdWUgaXMgdXNlZnVsIGZvciBuYW1pbmcgdmFsdWVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGdlbmVyYXRlZCBhdAovLy8gdXNlIHNpdGUsIGZvciBleGFtcGxlLCBpZiAndGhpcycgaXMgdXNlZCBtYW55IHRpbWVzLCByZXBsYWNpbmcgdXNlcyBvZgovLy8gJ3RoaXMnIHdpdGggSExhdGVWYWx1ZShIVGhpcykgd2lsbCBoYXZlIHRoZSBlZmZlY3Qgb2YgY29weWluZyAndGhpcycgdG8gYQovLy8gdGVtcG9yYXJ5IHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIG1pbmlmaWVkIGNvZGUuCmNsYXNzIEhMYXRlVmFsdWUgZXh0ZW5kcyBITGF0ZUluc3RydWN0aW9uIHsKICBITGF0ZVZhbHVlKEhJbnN0cnVjdGlvbiB0YXJnZXQpIDogc3VwZXIoW3RhcmdldF0sIHRhcmdldC5pbnN0cnVjdGlvblR5cGUpOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHRhcmdldCA9PiBpbnB1dHMuc2luZ2xlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExhdGVWYWx1ZSh0aGlzKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdITGF0ZVZhbHVlKCR0YXJnZXQpJzsKfQoKLy8vIFR5cGUgY2hlY2sgb3IgY2FzdCB1c2luZyBsZWdhY3kgY29uc3RydWN0b3ItYmFzZWQgdHlwZSByZXByZXNlbnRhdGlvbi4KY2xhc3MgSFR5cGVDb252ZXJzaW9uIGV4dGVuZHMgSENoZWNrIHsKICAvLyBWYWx1ZXMgZm9yIFtraW5kXS4KICBzdGF0aWMgY29uc3QgaW50IFRZUEVfQ0hFQ0sgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgQ0FTVF9DSEVDSyA9IDE7CgogIGZpbmFsIERhcnRUeXBlIHR5cGVFeHByZXNzaW9uOwogIGZpbmFsIGludCBraW5kOwoKICBBYnN0cmFjdFZhbHVlIGNoZWNrZWRUeXBlOyAvLyBOb3QgZmluYWwgYmVjYXVzZSB3ZSByZWZpbmUgaXQuCiAgQWJzdHJhY3RWYWx1ZQogICAgICBpbnB1dFR5cGU7IC8vIEhvbGRzIGlucHV0IHR5cGUgZm9yIGNvZGVnZW4gYWZ0ZXIgSFR5cGVLbm93biByZW1vdmFsLgoKICBIVHlwZUNvbnZlcnNpb24odGhpcy50eXBlRXhwcmVzc2lvbiwgdGhpcy5raW5kLCBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogY2hlY2tlZFR5cGUgPSB0eXBlLAogICAgICAgIHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2lucHV0XSwgdHlwZSkgewogICAgYXNzZXJ0KHR5cGVFeHByZXNzaW9uID09IG51bGwgfHwgIXR5cGVFeHByZXNzaW9uLmlzVHlwZWRlZik7CiAgICB0aGlzLnNvdXJjZUVsZW1lbnQgPSBpbnB1dC5zb3VyY2VFbGVtZW50OwogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgSFR5cGVDb252ZXJzaW9uLndpdGhUeXBlUmVwcmVzZW50YXRpb24odGhpcy50eXBlRXhwcmVzc2lvbiwgdGhpcy5raW5kLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsIEhJbnN0cnVjdGlvbiBpbnB1dCwgSEluc3RydWN0aW9uIHR5cGVSZXByZXNlbnRhdGlvbikKICAgICAgOiBjaGVja2VkVHlwZSA9IHR5cGUsCiAgICAgICAgc3VwZXIoPEhJbnN0cnVjdGlvbj5baW5wdXQsIHR5cGVSZXByZXNlbnRhdGlvbl0sIHR5cGUpIHsKICAgIGFzc2VydCghdHlwZUV4cHJlc3Npb24uaXNUeXBlZGVmKTsKICAgIHNvdXJjZUVsZW1lbnQgPSBpbnB1dC5zb3VyY2VFbGVtZW50OwogIH0KCiAgYm9vbCBnZXQgaGFzVHlwZVJlcHJlc2VudGF0aW9uIHsKICAgIHJldHVybiB0eXBlRXhwcmVzc2lvbiAhPSBudWxsICYmCiAgICAgICAgdHlwZUV4cHJlc3Npb24uaXNJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgaW5wdXRzLmxlbmd0aCA+IDE7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IHR5cGVSZXByZXNlbnRhdGlvbiA9PiBpbnB1dHNbMV07CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXQgY2hlY2tlZElucHV0ID0+IHN1cGVyLmNoZWNrZWRJbnB1dDsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGNvbnZlcnRUeXBlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgRGFydFR5cGUgdHlwZSwgaW50IGtpbmQpIHsKICAgIGlmICh0eXBlRXhwcmVzc2lvbiA9PSB0eXBlKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbnZlcnRUeXBlKGNsb3NlZFdvcmxkLCB0eXBlLCBraW5kKTsKICB9CgogIGJvb2wgZ2V0IGlzVHlwZUNoZWNrID0+IGtpbmQgPT0gVFlQRV9DSEVDSzsKICBib29sIGdldCBpc0Nhc3RDaGVjayA9PiBraW5kID09IENBU1RfQ0hFQ0s7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VHlwZUNvbnZlcnNpb24odGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IGlzQ29udHJvbEZsb3coKTsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29udHJvbEZsb3coKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlRZUEVfQ09OVkVSU0lPTl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIVHlwZUNvbnZlcnNpb247CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhUeXBlQ29udmVyc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGtpbmQgPT0gb3RoZXIua2luZCAmJgogICAgICAgIHR5cGVFeHByZXNzaW9uID09IG90aGVyLnR5cGVFeHByZXNzaW9uICYmCiAgICAgICAgY2hlY2tlZFR5cGUgPT0gb3RoZXIuY2hlY2tlZFR5cGU7CiAgfQoKICBib29sIGlzUmVkdW5kYW50KEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlRXhwcmVzc2lvbjsKICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgaWYgKHR5cGUuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHR5cGUuaXNGdXR1cmVPcikgewogICAgICAgIC8vIGBudWxsYCBhbHdheXMgcGFzc2VzIHR5cGUgY29udmVyc2lvbi4KICAgICAgICBpZiAoY2hlY2tlZElucHV0LmlzTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogT3B0aW1pemUgRnV0dXJlT3IgdHlwZSBjb252ZXJzaW9ucy4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKCF0eXBlLnRyZWF0QXNSYXcpIHsKICAgICAgICAvLyBgbnVsbGAgYWx3YXlzIHBhc3NlcyB0eXBlIGNvbnZlcnNpb24uCiAgICAgICAgaWYgKGNoZWNrZWRJbnB1dC5pc051bGwoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSkgewogICAgICAgIC8vIGBudWxsYCBhbHdheXMgcGFzc2VzIHR5cGUgY29udmVyc2lvbi4KICAgICAgICBpZiAoY2hlY2tlZElucHV0LmlzTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogT3B0aW1pemUgZnVuY3Rpb24gdHlwZSBjb252ZXJzaW9ucy4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIC8vIFR5cGUgaXMgcmVmaW5lZCBmcm9tIGBkeW5hbWljYCwgc28gaXQgbWlnaHQgYmVjb21lIG5vbi1yZWR1bmRhbnQuCiAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0FsbChjaGVja2VkVHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBjaGVja2VkSW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaXNJbihpbnB1dFR5cGUsIGNoZWNrZWRUeXBlKS5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hUeXBlQ29udmVyc2lvbih0eXBlPSR0eXBlRXhwcmVzc2lvbiwga2luZD0ka2luZCwgJwogICAgICAnJHtoYXNUeXBlUmVwcmVzZW50YXRpb24gPyAncmVwcmVzZW50YXRpb249JHR5cGVSZXByZXNlbnRhdGlvbiwgJyA6ICcnfScKICAgICAgJ2NoZWNrZWRJbnB1dD0kY2hlY2tlZElucHV0KSc7Cn0KCi8vLyBDaGVjayBmb3IgcmVjZWl2ZXIgb3IgYXJndW1lbnQgdHlwZSB3aGVuIGxvd2VyaW5nIG9wZXJhdGlvbiB0byBhIHByaW1pdGl2ZSwKLy8vIGUuZy4gbG93ZXJpbmcgYCtgIHRvIFtIQWRkXS4KLy8vCi8vLyBBZnRlciBOTkJELCBgYSArIGJgIHdpbGwgcmVxdWlyZSBgYWAgYW5kIGBiYCBhcmUgbm9uLW51bGxhYmxlIGFuZCB0aGVzZQovLy8gY2hlY2tzIHdpbGwgYmVjb21lIGV4cGxpY2l0IGluIHRoZSBzb3VyY2UgKGUuZy4gYGEhICsgYiFgKS4gQXQgdGhhdCB0aW1lLAovLy8gdGhpcyBjaGVjayBzaG91bGQgYmUgcmVtb3ZlZC4gIElmIG5lZWRlZCwgdGhlIGAhYCBjaGVjayBjYW4gYmUgb3B0aW1pemVkCi8vLyBnaXZlIHRoZSBzYW1lIHNpZ25hbHMgdG8gdGhlIEphdmFTY3JpcHQgVk0uCmNsYXNzIEhQcmltaXRpdmVDaGVjayBleHRlbmRzIEhDaGVjayB7CiAgLy8gVmFsdWVzIGZvciBba2luZF0uCiAgc3RhdGljIGNvbnN0IGludCBBUkdVTUVOVF9UWVBFX0NIRUNLID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFJFQ0VJVkVSX1RZUEVfQ0hFQ0sgPSAzOwoKICBmaW5hbCBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbjsKICBmaW5hbCBpbnQga2luZDsKCiAgLy8gW3JlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3JdIGlzIHRoZSBzZWxlY3RvciB1c2VkIGZvciBhIHJlY2VpdmVyIHR5cGUgY2hlY2sKICAvLyBvbiBvcGVuLWNvZGVkIG9wZXJhdG9ycywgZS5nLiB0aGUgbm90LW51bGwgY2hlY2sgb24gYHhgIGluIGB4ICsgMWAgd291bGQgYmUKICAvLyBjb21waWxlZCB0byB0aGUgZm9sbG93aW5nLCBmb3Igd2hpY2ggd2UgbmVlZCB0aGUgc2VsZWN0b3IgYCRhZGRgLgogIC8vCiAgLy8gICAgIGlmICh0eXBlb2YgeCAhPSAibnVtYmVyIikgeC4kYWRkKCk7CiAgLy8KICBmaW5hbCBTZWxlY3RvciByZWNlaXZlclR5cGVDaGVja1NlbGVjdG9yOwoKICBBYnN0cmFjdFZhbHVlIGNoZWNrZWRUeXBlOyAvLyBOb3QgZmluYWwgYmVjYXVzZSB3ZSByZWZpbmUgaXQuCiAgQWJzdHJhY3RWYWx1ZQogICAgICBpbnB1dFR5cGU7IC8vIEhvbGRzIGlucHV0IHR5cGUgZm9yIGNvZGVnZW4gYWZ0ZXIgSFR5cGVLbm93biByZW1vdmFsLgoKICBIUHJpbWl0aXZlQ2hlY2sodGhpcy50eXBlRXhwcmVzc2lvbiwgdGhpcy5raW5kLCBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHt0aGlzLnJlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3J9KQogICAgICA6IGNoZWNrZWRUeXBlID0gdHlwZSwKICAgICAgICBzdXBlcig8SEluc3RydWN0aW9uPltpbnB1dF0sIHR5cGUpIHsKICAgIGFzc2VydChpc1JlY2VpdmVyVHlwZUNoZWNrID09IChyZWNlaXZlclR5cGVDaGVja1NlbGVjdG9yICE9IG51bGwpKTsKICAgIHRoaXMuc291cmNlRWxlbWVudCA9IGlucHV0LnNvdXJjZUVsZW1lbnQ7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gY29udmVydFR5cGUoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBEYXJ0VHlwZSB0eXBlLCBpbnQga2luZCkgewogICAgaWYgKHR5cGVFeHByZXNzaW9uID09IHR5cGUpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29udmVydFR5cGUoY2xvc2VkV29ybGQsIHR5cGUsIGtpbmQpOwogIH0KCiAgYm9vbCBnZXQgaXNBcmd1bWVudFR5cGVDaGVjayA9PiBraW5kID09IEFSR1VNRU5UX1RZUEVfQ0hFQ0s7CiAgYm9vbCBnZXQgaXNSZWNlaXZlclR5cGVDaGVjayA9PiBraW5kID09IFJFQ0VJVkVSX1RZUEVfQ0hFQ0s7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UHJpbWl0aXZlQ2hlY2sodGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnRyb2xGbG93KCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlBSSU1JVElWRV9DSEVDS19UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIUHJpbWl0aXZlQ2hlY2s7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhQcmltaXRpdmVDaGVjayBvdGhlcikgewogICAgcmV0dXJuIGtpbmQgPT0gb3RoZXIua2luZCAmJgogICAgICAgIGNoZWNrZWRUeXBlID09IG90aGVyLmNoZWNrZWRUeXBlICYmCiAgICAgICAgcmVjZWl2ZXJUeXBlQ2hlY2tTZWxlY3RvciA9PSBvdGhlci5yZWNlaXZlclR5cGVDaGVja1NlbGVjdG9yOwogIH0KCiAgYm9vbCBpc1JlZHVuZGFudChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICAvLyBUeXBlIGlzIHJlZmluZWQgZnJvbSBgZHluYW1pY2AsIHNvIGl0IG1pZ2h0IGJlY29tZSBub24tcmVkdW5kYW50LgogICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnNBbGwoY2hlY2tlZFR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gY2hlY2tlZElucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmlzSW4oaW5wdXRUeXBlLCBjaGVja2VkVHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIUHJpbWl0aXZlQ2hlY2soY2hlY2tlZFR5cGU9JGNoZWNrZWRUeXBlLCBraW5kPSRraW5kLCAnCiAgICAgICdjaGVja2VkSW5wdXQ9JGNoZWNrZWRJbnB1dCknOwp9CgovLy8gQSBjaGVjayB0aGF0IHRoZSBpbnB1dCB0byBhIGNvbmRpdGlvbiAoaWYsID86LCB3aGlsZSwgZXRjKSBpcyBub24tbnVsbC4gVGhlCi8vLyBmcm9udC1lbmQgZ2VuZXJhdGVzICdhcyBib29sJyBjaGVja3MsIGJ1dCB1bnRpbCB0aGUgdHJhbnNpdGlvbiB0byBOTkJEIGlzCi8vLyBjb21wbGV0ZSwgdGhpcyBhbGxvd3MgYG51bGxgIHRvIGJlIHBhc3NlZCB0byB0aGUgY29uZGl0aW9uLgovLy8KLy8gVE9ETyhzcmEpOiBPbmNlIE5OREIgaXMgZmFyIGVub3VnaCBhbG9uZyB0aGF0IHRoZSBmcm9udC1lbmQgY2FuIGdlbmVyYXRlIGBhcwovLyBib29sIWAgY2hlY2tzIGFuZCB0aGUgYmFja2VuZCBjaGVja3MgdGhlbSBjb3JyZWN0bHksIHRoaXMgaW5zdHJ1Y3Rpb24gd2lsbAovLyBiZWNvbWUgdW5uZWNlc3NhcnkgYW5kIHNob3VsZCBiZSByZW1vdmVkLgpjbGFzcyBIQm9vbENvbnZlcnNpb24gZXh0ZW5kcyBIQ2hlY2sgewogIEhCb29sQ29udmVyc2lvbihISW5zdHJ1Y3Rpb24gaW5wdXQsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltpbnB1dF0sIHR5cGUpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRCb29sQ29udmVyc2lvbih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkJPT0xfQ09OVkVSU0lPTl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIQm9vbENvbnZlcnNpb247CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhCb29sQ29udmVyc2lvbiBvdGhlcikgPT4gdHJ1ZTsKCiAgYm9vbCBpc1JlZHVuZGFudChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSA9IGNoZWNrZWRJbnB1dC5pbnN0cnVjdGlvblR5cGU7CiAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5pc0luKGlucHV0VHlwZSwgaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnSEJvb2xDb252ZXJzaW9uKCRjaGVja2VkSW5wdXQpJzsKfQoKLy8vIFRoZSBbSFR5cGVLbm93bl0gaW5zdHJ1Y3Rpb24gbWFya3MgYSB2YWx1ZSB3aXRoIGEgcmVmaW5lZCB0eXBlLgpjbGFzcyBIVHlwZUtub3duIGV4dGVuZHMgSENoZWNrIHsKICBBYnN0cmFjdFZhbHVlIGtub3duVHlwZTsKICBmaW5hbCBib29sIF9pc01vdmFibGU7CgogIEhUeXBlS25vd24ucGlubmVkKEFic3RyYWN0VmFsdWUga25vd25UeXBlLCBISW5zdHJ1Y3Rpb24gaW5wdXQpCiAgICAgIDogdGhpcy5rbm93blR5cGUgPSBrbm93blR5cGUsCiAgICAgICAgdGhpcy5faXNNb3ZhYmxlID0gZmFsc2UsCiAgICAgICAgc3VwZXIoPEhJbnN0cnVjdGlvbj5baW5wdXRdLCBrbm93blR5cGUpOwoKICBIVHlwZUtub3duLndpdG5lc3NlZCgKICAgICAgQWJzdHJhY3RWYWx1ZSBrbm93blR5cGUsIEhJbnN0cnVjdGlvbiBpbnB1dCwgSEluc3RydWN0aW9uIHdpdG5lc3MpCiAgICAgIDogdGhpcy5rbm93blR5cGUgPSBrbm93blR5cGUsCiAgICAgICAgdGhpcy5faXNNb3ZhYmxlID0gdHJ1ZSwKICAgICAgICBzdXBlcig8SEluc3RydWN0aW9uPltpbnB1dCwgd2l0bmVzc10sIGtub3duVHlwZSk7CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ1R5cGVLbm93biAka25vd25UeXBlJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFR5cGVLbm93bih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnRyb2xGbG93KCkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzUGlubmVkID0+IGlucHV0cy5sZW5ndGggPT0gMTsKCiAgSEluc3RydWN0aW9uIGdldCB3aXRuZXNzID0+IGlucHV0cy5sZW5ndGggPT0gMiA/IGlucHV0c1sxXSA6IG51bGw7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5UWVBFX0tOT1dOX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhUeXBlS25vd247CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTW92YWJsZSA9PiBfaXNNb3ZhYmxlICYmIHVzZUd2bigpOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFR5cGVLbm93biBvdGhlcikgewogICAgcmV0dXJuIGtub3duVHlwZSA9PSBvdGhlci5rbm93blR5cGUgJiYKICAgICAgICBpbnN0cnVjdGlvblR5cGUgPT0gb3RoZXIuaW5zdHJ1Y3Rpb25UeXBlOwogIH0KCiAgYm9vbCBpc1JlZHVuZGFudChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0FsbChrbm93blR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gY2hlY2tlZElucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmlzSW4oaW5wdXRUeXBlLCBrbm93blR5cGUpLmlzRGVmaW5pdGVseVRydWU7CiAgfQp9CgpjbGFzcyBIUmFuZ2VDb252ZXJzaW9uIGV4dGVuZHMgSENoZWNrIHsKICBIUmFuZ2VDb252ZXJzaW9uKEhJbnN0cnVjdGlvbiBpbnB1dCwgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltpbnB1dF0sIHR5cGUpIHsKICAgIHNvdXJjZUVsZW1lbnQgPSBpbnB1dC5zb3VyY2VFbGVtZW50OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNb3ZhYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFJhbmdlQ29udmVyc2lvbih0aGlzKTsKfQoKY2xhc3MgSFN0cmluZ0NvbmNhdCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSFN0cmluZ0NvbmNhdChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bbGVmdCwgcmlnaHRdLCB0eXBlKSB7CiAgICAvLyBUT0RPKHNyYSk6IFVudGlsIElzc3VlIDkyOTMgaXMgZml4ZWQsIHRoaXMgZmFsc2UgZGVwZW5kZW5jeSBrZWVwcyB0aGUKICAgIC8vIGNvbmNhdHMgYnVuY2hlZCB3aXRoIHN0cmluZ2lmaWVkIGlucHV0cyBmb3IgbXVjaCBiZXR0ZXIgbG9va2luZyBjb2RlIHdpdGgKICAgIC8vIGZld2VyIHRlbXBzLgogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IGxlZnQgPT4gaW5wdXRzWzBdOwogIEhJbnN0cnVjdGlvbiBnZXQgcmlnaHQgPT4gaW5wdXRzWzFdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN0cmluZ0NvbmNhdCh0aGlzKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICJzdHJpbmcgY29uY2F0IjsKfQoKLy8vIFRoZSBwYXJ0IG9mIHN0cmluZyBpbnRlcnBvbGF0aW9uIHdoaWNoIGNvbnZlcnRzIGFuZCBpbnRlcnBvbGF0ZWQgZXhwcmVzc2lvbgovLy8gaW50byBhIFN0cmluZyB2YWx1ZS4KY2xhc3MgSFN0cmluZ2lmeSBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSFN0cmluZ2lmeShISW5zdHJ1Y3Rpb24gaW5wdXQsIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltpbnB1dF0sIHJlc3VsdFR5cGUpIHsKICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0U3RyaW5naWZ5KHRoaXMpOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gInN0cmluZ2lmeSI7Cn0KCi8vLyBOb24tYmxvY2stYmFzZWQgKGFrYS4gdHJhZGl0aW9uYWwpIGxvb3AgaW5mb3JtYXRpb24uCmNsYXNzIEhMb29wSW5mb3JtYXRpb24gewogIGZpbmFsIEhCYXNpY0Jsb2NrIGhlYWRlcjsKICBmaW5hbCBMaXN0PEhCYXNpY0Jsb2NrPiBibG9ja3M7CiAgZmluYWwgTGlzdDxIQmFzaWNCbG9jaz4gYmFja0VkZ2VzOwogIGZpbmFsIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBsYWJlbHM7CiAgZmluYWwgSnVtcFRhcmdldCB0YXJnZXQ7CgogIC8vLyBDb3JyZXNwb25kaW5nIGJsb2NrIGluZm9ybWF0aW9uIGZvciB0aGUgbG9vcC4KICBITG9vcEJsb2NrSW5mb3JtYXRpb24gbG9vcEJsb2NrSW5mb3JtYXRpb247CgogIEhMb29wSW5mb3JtYXRpb24odGhpcy5oZWFkZXIsIHRoaXMudGFyZ2V0LCB0aGlzLmxhYmVscykKICAgICAgOiBibG9ja3MgPSBuZXcgTGlzdDxIQmFzaWNCbG9jaz4oKSwKICAgICAgICBiYWNrRWRnZXMgPSBuZXcgTGlzdDxIQmFzaWNCbG9jaz4oKTsKCiAgdm9pZCBhZGRCYWNrRWRnZShIQmFzaWNCbG9jayBwcmVkZWNlc3NvcikgewogICAgYmFja0VkZ2VzLmFkZChwcmVkZWNlc3Nvcik7CiAgICBMaXN0PEhCYXNpY0Jsb2NrPiB3b3JrUXVldWUgPSA8SEJhc2ljQmxvY2s+W3ByZWRlY2Vzc29yXTsKICAgIGRvIHsKICAgICAgSEJhc2ljQmxvY2sgY3VycmVudCA9IHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CiAgICAgIGFkZEJsb2NrKGN1cnJlbnQsIHdvcmtRdWV1ZSk7CiAgICB9IHdoaWxlICghd29ya1F1ZXVlLmlzRW1wdHkpOwogIH0KCiAgLy8gQWRkcyBhIGJsb2NrIGFuZCB0cmFuc2l0aXZlbHkgYWxsIGl0cyBwcmVkZWNlc3NvcnMgaW4gdGhlIGxvb3AgYXMKICAvLyBsb29wIGJsb2Nrcy4KICB2b2lkIGFkZEJsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrLCBMaXN0PEhCYXNpY0Jsb2NrPiB3b3JrUXVldWUpIHsKICAgIGlmIChpZGVudGljYWwoYmxvY2ssIGhlYWRlcikpIHJldHVybjsKICAgIEhCYXNpY0Jsb2NrIHBhcmVudEhlYWRlciA9IGJsb2NrLnBhcmVudExvb3BIZWFkZXI7CiAgICBpZiAoaWRlbnRpY2FsKHBhcmVudEhlYWRlciwgaGVhZGVyKSkgewogICAgICAvLyBOb3RoaW5nIHRvIGRvIGluIHRoaXMgY2FzZS4KICAgIH0gZWxzZSBpZiAocGFyZW50SGVhZGVyICE9IG51bGwpIHsKICAgICAgd29ya1F1ZXVlLmFkZChwYXJlbnRIZWFkZXIpOwogICAgfSBlbHNlIHsKICAgICAgYmxvY2sucGFyZW50TG9vcEhlYWRlciA9IGhlYWRlcjsKICAgICAgYmxvY2tzLmFkZChibG9jayk7CiAgICAgIHdvcmtRdWV1ZS5hZGRBbGwoYmxvY2sucHJlZGVjZXNzb3JzKTsKICAgIH0KICB9Cn0KCi8vLyBFbWJlZGRpbmcgb2YgYSBbSEJsb2NrSW5mb3JtYXRpb25dIGZvciBibG9jay1zdHJ1Y3R1cmUgYmFzZWQgdHJhdmVyc2FsCi8vLyBpbiBhIGRvbWluYXRvciBiYXNlZCBmbG93IHRyYXZlcnNhbCBieSBhdHRhY2hpbmcgaXQgdG8gYSBiYXNpYyBibG9jay4KLy8vIFRvIGdvIGJhY2sgdG8gZG9taW5hdG9yLWJhc2VkIHRyYXZlcnNhbCwgYSBbSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbl0KLy8vIHN0cnVjdHVyZSBjYW4gYmUgYWRkZWQgaW4gdGhlIGJsb2NrIHN0cnVjdHVyZS4KY2xhc3MgSEJsb2NrRmxvdyB7CiAgZmluYWwgSEJsb2NrSW5mb3JtYXRpb24gYm9keTsKICBmaW5hbCBIQmFzaWNCbG9jayBjb250aW51YXRpb247CiAgSEJsb2NrRmxvdyh0aGlzLmJvZHksIHRoaXMuY29udGludWF0aW9uKTsKfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGEgc3ludGFjdGljLWxpa2Ugc3RydWN0dXJlLgphYnN0cmFjdCBjbGFzcyBIQmxvY2tJbmZvcm1hdGlvbiB7CiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0OwogIEhCYXNpY0Jsb2NrIGdldCBlbmQ7CiAgYm9vbCBhY2NlcHQoSEJsb2NrSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYSBzdGF0ZW1lbnQtbGlrZSBzdHJ1Y3R1cmUuCmFic3RyYWN0IGNsYXNzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiBleHRlbmRzIEhCbG9ja0luZm9ybWF0aW9uIHsKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYW4gZXhwcmVzc2lvbi1saWtlIHN0cnVjdHVyZS4KYWJzdHJhY3QgY2xhc3MgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBleHRlbmRzIEhCbG9ja0luZm9ybWF0aW9uIHsKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIRXhwcmVzc2lvbkluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKTsKICBISW5zdHJ1Y3Rpb24gZ2V0IGNvbmRpdGlvbkV4cHJlc3Npb247Cn0KCmFic3RyYWN0IGNsYXNzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IgewogIGJvb2wgdmlzaXRMYWJlbGVkQmxvY2tJbmZvKEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbiBpbmZvKTsKICBib29sIHZpc2l0TG9vcEluZm8oSExvb3BCbG9ja0luZm9ybWF0aW9uIGluZm8pOwogIGJvb2wgdmlzaXRJZkluZm8oSElmQmxvY2tJbmZvcm1hdGlvbiBpbmZvKTsKICBib29sIHZpc2l0VHJ5SW5mbyhIVHJ5QmxvY2tJbmZvcm1hdGlvbiBpbmZvKTsKICBib29sIHZpc2l0U3dpdGNoSW5mbyhIU3dpdGNoQmxvY2tJbmZvcm1hdGlvbiBpbmZvKTsKICBib29sIHZpc2l0U2VxdWVuY2VJbmZvKEhTdGF0ZW1lbnRTZXF1ZW5jZUluZm9ybWF0aW9uIGluZm8pOwogIC8vIFBzZXVkby1zdHJ1Y3R1cmUgZW1iZWRkaW5nIGEgZG9taW5hdG9yLWJhc2VkIHRyYXZlcnNhbCBpbnRvCiAgLy8gdGhlIGJsb2NrLXN0cnVjdHVyZSB0cmF2ZXJzYWwuIFRoaXMgd2lsbCBldmVudHVhbGx5IGdvIGF3YXkuCiAgYm9vbCB2aXNpdFN1YkdyYXBoSW5mbyhIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uIGluZm8pOwp9CgphYnN0cmFjdCBjbGFzcyBIRXhwcmVzc2lvbkluZm9ybWF0aW9uVmlzaXRvciB7CiAgYm9vbCB2aXNpdEFuZE9ySW5mbyhIQW5kT3JCbG9ja0luZm9ybWF0aW9uIGluZm8pOwogIGJvb2wgdmlzaXRTdWJFeHByZXNzaW9uSW5mbyhIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gaW5mbyk7Cn0KCmFic3RyYWN0IGNsYXNzIEhCbG9ja0luZm9ybWF0aW9uVmlzaXRvcgogICAgaW1wbGVtZW50cyBIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yLCBIRXhwcmVzc2lvbkluZm9ybWF0aW9uVmlzaXRvciB7fQoKLy8vIEdlbmVyaWMgY2xhc3Mgd3JhcHBpbmcgYSBbU3ViR3JhcGhdIGFzIGEgYmxvY2staW5mb3JtYXRpb24gdW50aWwKLy8vIGFsbCBzdHJ1Y3R1cmVzIGFyZSBoYW5kbGVkIHByb3Blcmx5LgpjbGFzcyBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uIGltcGxlbWVudHMgSFN0YXRlbWVudEluZm9ybWF0aW9uIHsKICBmaW5hbCBTdWJHcmFwaCBzdWJHcmFwaDsKICBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uKHRoaXMuc3ViR3JhcGgpOwoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQgPT4gc3ViR3JhcGguc3RhcnQ7CiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IGVuZCA9PiBzdWJHcmFwaC5lbmQ7CgogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdFN1YkdyYXBoSW5mbyh0aGlzKTsKfQoKLy8vIEdlbmVyaWMgY2xhc3Mgd3JhcHBpbmcgYSBbU3ViRXhwcmVzc2lvbl0gYXMgYSBibG9jay1pbmZvcm1hdGlvbiB1bnRpbAovLy8gZXhwcmVzc2lvbnMgc3RydWN0dXJlcyBhcmUgaGFuZGxlZCBwcm9wZXJseS4KY2xhc3MgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uIGltcGxlbWVudHMgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiB7CiAgZmluYWwgU3ViRXhwcmVzc2lvbiBzdWJFeHByZXNzaW9uOwogIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbih0aGlzLnN1YkV4cHJlc3Npb24pOwoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQgPT4gc3ViRXhwcmVzc2lvbi5zdGFydDsKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgZW5kID0+IHN1YkV4cHJlc3Npb24uZW5kOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0IGNvbmRpdGlvbkV4cHJlc3Npb24gPT4gc3ViRXhwcmVzc2lvbi5jb25kaXRpb25FeHByZXNzaW9uOwoKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIRXhwcmVzc2lvbkluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0U3ViRXhwcmVzc2lvbkluZm8odGhpcyk7Cn0KCi8vLyBBIHNlcXVlbmNlIG9mIHNlcGFyYXRlIHN0YXRlbWVudHMuCmNsYXNzIEhTdGF0ZW1lbnRTZXF1ZW5jZUluZm9ybWF0aW9uIGltcGxlbWVudHMgSFN0YXRlbWVudEluZm9ybWF0aW9uIHsKICBmaW5hbCBMaXN0PEhTdGF0ZW1lbnRJbmZvcm1hdGlvbj4gc3RhdGVtZW50czsKICBIU3RhdGVtZW50U2VxdWVuY2VJbmZvcm1hdGlvbih0aGlzLnN0YXRlbWVudHMpOwoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQgPT4gc3RhdGVtZW50c1swXS5zdGFydDsKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgZW5kID0+IHN0YXRlbWVudHMubGFzdC5lbmQ7CgogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdFNlcXVlbmNlSW5mbyh0aGlzKTsKfQoKY2xhc3MgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uIGltcGxlbWVudHMgSFN0YXRlbWVudEluZm9ybWF0aW9uIHsKICBmaW5hbCBIU3RhdGVtZW50SW5mb3JtYXRpb24gYm9keTsKICBmaW5hbCBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzOwogIGZpbmFsIEp1bXBUYXJnZXQgdGFyZ2V0OwogIGZpbmFsIGJvb2wgaXNDb250aW51ZTsKCiAgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uKHRoaXMuYm9keSwgTGlzdDxMYWJlbERlZmluaXRpb24+IGxhYmVscywKICAgICAge3RoaXMuaXNDb250aW51ZTogZmFsc2V9KQogICAgICA6IHRoaXMubGFiZWxzID0gbGFiZWxzLAogICAgICAgIHRoaXMudGFyZ2V0ID0gbGFiZWxzWzBdLnRhcmdldDsKCiAgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uLmltcGxpY2l0KHRoaXMuYm9keSwgdGhpcy50YXJnZXQsCiAgICAgIHt0aGlzLmlzQ29udGludWU6IGZhbHNlfSkKICAgICAgOiB0aGlzLmxhYmVscyA9IGNvbnN0IDxMYWJlbERlZmluaXRpb24+W107CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBzdGFydCA9PiBib2R5LnN0YXJ0OwogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBlbmQgPT4gYm9keS5lbmQ7CgogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdExhYmVsZWRCbG9ja0luZm8odGhpcyk7Cn0KCmNsYXNzIEhMb29wQmxvY2tJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiB7CiAgc3RhdGljIGNvbnN0IGludCBXSElMRV9MT09QID0gMDsKICBzdGF0aWMgY29uc3QgaW50IEZPUl9MT09QID0gMTsKICBzdGF0aWMgY29uc3QgaW50IERPX1dISUxFX0xPT1AgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgRk9SX0lOX0xPT1AgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgU1dJVENIX0NPTlRJTlVFX0xPT1AgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgTk9UX0FfTE9PUCA9IC0xOwoKICBmaW5hbCBpbnQga2luZDsKICBmaW5hbCBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIGluaXRpYWxpemVyOwogIGZpbmFsIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gY29uZGl0aW9uOwogIGZpbmFsIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiBib2R5OwogIGZpbmFsIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gdXBkYXRlczsKICBmaW5hbCBKdW1wVGFyZ2V0IHRhcmdldDsKICBmaW5hbCBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uOwoKICBITG9vcEJsb2NrSW5mb3JtYXRpb24odGhpcy5raW5kLCB0aGlzLmluaXRpYWxpemVyLCB0aGlzLmNvbmRpdGlvbiwgdGhpcy5ib2R5LAogICAgICB0aGlzLnVwZGF0ZXMsIHRoaXMudGFyZ2V0LCB0aGlzLmxhYmVscywgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbikgewogICAgYXNzZXJ0KAogICAgICAgIChraW5kID09IERPX1dISUxFX0xPT1AgPyBib2R5LnN0YXJ0IDogY29uZGl0aW9uLnN0YXJ0KS5pc0xvb3BIZWFkZXIoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQgewogICAgaWYgKGluaXRpYWxpemVyICE9IG51bGwpIHJldHVybiBpbml0aWFsaXplci5zdGFydDsKICAgIGlmIChraW5kID09IERPX1dISUxFX0xPT1ApIHsKICAgICAgcmV0dXJuIGJvZHkuc3RhcnQ7CiAgICB9CiAgICByZXR1cm4gY29uZGl0aW9uLnN0YXJ0OwogIH0KCiAgSEJhc2ljQmxvY2sgZ2V0IGxvb3BIZWFkZXIgewogICAgcmV0dXJuIGtpbmQgPT0gRE9fV0hJTEVfTE9PUCA/IGJvZHkuc3RhcnQgOiBjb25kaXRpb24uc3RhcnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgZW5kIHsKICAgIGlmICh1cGRhdGVzICE9IG51bGwpIHJldHVybiB1cGRhdGVzLmVuZDsKICAgIGlmIChraW5kID09IERPX1dISUxFX0xPT1AgJiYgY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbmRpdGlvbi5lbmQ7CiAgICB9CiAgICByZXR1cm4gYm9keS5lbmQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRMb29wSW5mbyh0aGlzKTsKfQoKY2xhc3MgSElmQmxvY2tJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiB7CiAgZmluYWwgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBjb25kaXRpb247CiAgZmluYWwgSFN0YXRlbWVudEluZm9ybWF0aW9uIHRoZW5HcmFwaDsKICBmaW5hbCBIU3RhdGVtZW50SW5mb3JtYXRpb24gZWxzZUdyYXBoOwogIEhJZkJsb2NrSW5mb3JtYXRpb24odGhpcy5jb25kaXRpb24sIHRoaXMudGhlbkdyYXBoLCB0aGlzLmVsc2VHcmFwaCk7CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBzdGFydCA9PiBjb25kaXRpb24uc3RhcnQ7CiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IGVuZCA9PiBlbHNlR3JhcGggPT0gbnVsbCA/IHRoZW5HcmFwaC5lbmQgOiBlbHNlR3JhcGguZW5kOwoKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJZkluZm8odGhpcyk7Cn0KCmNsYXNzIEhBbmRPckJsb2NrSW5mb3JtYXRpb24gaW1wbGVtZW50cyBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIHsKICBmaW5hbCBib29sIGlzQW5kOwogIGZpbmFsIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gbGVmdDsKICBmaW5hbCBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIHJpZ2h0OwogIEhBbmRPckJsb2NrSW5mb3JtYXRpb24odGhpcy5pc0FuZCwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTsKCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0ID0+IGxlZnQuc3RhcnQ7CiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IGVuZCA9PiByaWdodC5lbmQ7CgogIC8vIFdlIGRvbid0IGN1cnJlbnRseSB1c2UgSEFuZE9yQmxvY2tJbmZvcm1hdGlvbi4KICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0IGNvbmRpdGlvbkV4cHJlc3Npb24gewogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIRXhwcmVzc2lvbkluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0QW5kT3JJbmZvKHRoaXMpOwp9CgpjbGFzcyBIVHJ5QmxvY2tJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiB7CiAgZmluYWwgSFN0YXRlbWVudEluZm9ybWF0aW9uIGJvZHk7CiAgZmluYWwgSExvY2FsVmFsdWUgY2F0Y2hWYXJpYWJsZTsKICBmaW5hbCBIU3RhdGVtZW50SW5mb3JtYXRpb24gY2F0Y2hCbG9jazsKICBmaW5hbCBIU3RhdGVtZW50SW5mb3JtYXRpb24gZmluYWxseUJsb2NrOwogIEhUcnlCbG9ja0luZm9ybWF0aW9uKAogICAgICB0aGlzLmJvZHksIHRoaXMuY2F0Y2hWYXJpYWJsZSwgdGhpcy5jYXRjaEJsb2NrLCB0aGlzLmZpbmFsbHlCbG9jayk7CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBzdGFydCA9PiBib2R5LnN0YXJ0OwogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBlbmQgPT4KICAgICAgZmluYWxseUJsb2NrID09IG51bGwgPyBjYXRjaEJsb2NrLmVuZCA6IGZpbmFsbHlCbG9jay5lbmQ7CgogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdFRyeUluZm8odGhpcyk7Cn0KCmNsYXNzIEhTd2l0Y2hCbG9ja0luZm9ybWF0aW9uIGltcGxlbWVudHMgSFN0YXRlbWVudEluZm9ybWF0aW9uIHsKICBmaW5hbCBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIGV4cHJlc3Npb247CiAgZmluYWwgTGlzdDxIU3RhdGVtZW50SW5mb3JtYXRpb24+IHN0YXRlbWVudHM7CiAgZmluYWwgSnVtcFRhcmdldCB0YXJnZXQ7CiAgZmluYWwgTGlzdDxMYWJlbERlZmluaXRpb24+IGxhYmVsczsKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbjsKCiAgSFN3aXRjaEJsb2NrSW5mb3JtYXRpb24odGhpcy5leHByZXNzaW9uLCB0aGlzLnN0YXRlbWVudHMsIHRoaXMudGFyZ2V0LAogICAgICB0aGlzLmxhYmVscywgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbik7CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBzdGFydCA9PiBleHByZXNzaW9uLnN0YXJ0OwogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBlbmQgewogICAgLy8gV2UgZG9uJ3QgY3JlYXRlIGEgc3dpdGNoIGJsb2NrIGlmIHRoZXJlIGFyZSBubyBjYXNlcy4KICAgIGFzc2VydCghc3RhdGVtZW50cy5pc0VtcHR5KTsKICAgIHJldHVybiBzdGF0ZW1lbnRzLmxhc3QuZW5kOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0U3dpdGNoSW5mbyh0aGlzKTsKfQoKLy8vIFJlYWRzIHJhdyByZWlmaWVkIHR5cGUgaW5mbyBmcm9tIGFuIG9iamVjdC4KY2xhc3MgSFR5cGVJbmZvUmVhZFJhdyBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSFR5cGVJbmZvUmVhZFJhdyhISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWUgaW5zdHJ1Y3Rpb25UeXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwgaW5zdHJ1Y3Rpb25UeXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VHlwZUluZm9SZWFkUmF3KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlRZUEVfSU5GT19SRUFEX1JBV19UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIVHlwZUluZm9SZWFkUmF3OwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFR5cGVJbmZvUmVhZFJhdyBvdGhlcikgewogICAgcmV0dXJuIHRydWU7CiAgfQp9CgovLy8gUmVhZHMgYSB0eXBlIHZhcmlhYmxlIGZyb20gYW4gb2JqZWN0LiBUaGUgcmVhZCBtYXkgYmUgYSBzaW1wbGUgaW5kZXhpbmcgb2YKLy8vIHRoZSB0eXBlIHBhcmFtZXRlcnMgb3IgaXQgbWF5IHJlcXVpcmUgJ3N1YnN0aXR1dGlvbicuIFRoZXJlIG1heSBiZSBhbgovLy8gaW50ZXJjZXB0b3IgYXJndW1lbnQgdG8gYWNjZXNzIHRoZSBzdWJzdGl0dXRpb24gb2YgbmF0aXZlIGNsYXNzZXMuCmNsYXNzIEhUeXBlSW5mb1JlYWRWYXJpYWJsZSBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgLy8vIFRoZSB0eXBlIHZhcmlhYmxlIGJlaW5nIHJlYWQuCiAgZmluYWwgVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZTsKICBmaW5hbCBib29sIGlzSW50ZXJjZXB0ZWQ7CgogIEhUeXBlSW5mb1JlYWRWYXJpYWJsZS5pbnRlcmNlcHRlZCh0aGlzLnZhcmlhYmxlLCBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3IsCiAgICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGUpCiAgICAgIDogaXNJbnRlcmNlcHRlZCA9IHRydWUsCiAgICAgICAgc3VwZXIoPEhJbnN0cnVjdGlvbj5baW50ZXJjZXB0b3IsIHJlY2VpdmVyXSwgaW5zdHJ1Y3Rpb25UeXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEhUeXBlSW5mb1JlYWRWYXJpYWJsZS5ub0ludGVyY2VwdG9yKAogICAgICB0aGlzLnZhcmlhYmxlLCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWUgaW5zdHJ1Y3Rpb25UeXBlKQogICAgICA6IGlzSW50ZXJjZXB0ZWQgPSBmYWxzZSwKICAgICAgICBzdXBlcig8SEluc3RydWN0aW9uPltyZWNlaXZlcl0sIGluc3RydWN0aW9uVHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IGludGVyY2VwdG9yIHsKICAgIGFzc2VydChpc0ludGVyY2VwdGVkKTsKICAgIHJldHVybiBpbnB1dHMuZmlyc3Q7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IG9iamVjdCA9PiBpbnB1dHMubGFzdDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUeXBlSW5mb1JlYWRWYXJpYWJsZSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5UWVBFX0lORk9fUkVBRF9WQVJJQUJMRV9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIVHlwZUluZm9SZWFkVmFyaWFibGU7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIVHlwZUluZm9SZWFkVmFyaWFibGUgb3RoZXIpIHsKICAgIHJldHVybiB2YXJpYWJsZSA9PSBvdGhlci52YXJpYWJsZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIVHlwZUluZm9SZWFkVmFyaWFibGUoJHZhcmlhYmxlKSc7Cn0KCmVudW0gVHlwZUluZm9FeHByZXNzaW9uS2luZCB7IENPTVBMRVRFLCBJTlNUQU5DRSB9CgovLy8gQ29uc3RydWN0cyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgY2xvc2VkIG9yIGdyb3VuZC10ZXJtIHR5cGUgKHRoYXQgaXMsIGEgdHlwZQovLy8gd2l0aG91dCB0eXBlIHZhcmlhYmxlcykuCi8vLwovLy8gVGhlcmUgYXJlIHR3byBmb3JtczoKLy8vCi8vLyAtIENPTVBMRVRFOiBBIGNvbXBsZXRlIGZvcm0gdGhhdCBpcyBzZWxmIGNvbnRhaW5lZCwgdXNlZCBmb3IgdGhlIHZhbHVlcyBvZgovLy8gICB0eXBlIHBhcmFtZXRlcnMgYW5kIG5vbi1yYXcgaXMtY2hlY2tzLgovLy8KLy8vIC0gSU5TVEFOQ0U6IEEgaGVhZGxlc3MgZmxhdCBmb3JtIGZvciByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyBvZgovLy8gICB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFuIGluc3RhbmNlIG9mIGEgZ2VuZXJpYyB0eXBlLgovLy8KLy8vIFRoZSBDT01QTEVURSBmb3JtIHZhbHVlIGlzIGNvbnN0cnVjdGVkIGZyb20gW2RhcnRUeXBlXSBieSByZXBsYWNpbmcgdGhlIHR5cGUKLy8vIHZhcmlhYmxlcyB3aXRoIGNvbnNlY3V0aXZlIHZhbHVlcyBmcm9tIFtpbnB1dHNdLCBpbiB0aGUgb3JkZXIgZ2VuZXJhdGVkIGJ5Ci8vLyBbRGFydFR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZV0uICBUaGUgdHlwZSB2YXJpYWJsZXMgaW4gW2RhcnRUeXBlXSBhcmUKLy8vIHRyZWF0ZWQgYXMgJ2hvbGVzJyBpbiB0aGUgdGVybSwgd2hpY2ggbWVhbnMgdGhhdCBpdCBtdXN0IGJlIGVuc3VyZWQgYXQKLy8vIGNvbnN0cnVjdGlvbiwgdGhhdCBkdXBsaWNhdGUgb2NjdXJlbmNlcyBvZiBhIHR5cGUgdmFyaWFibGUgaW4gW2RhcnRUeXBlXSBhcmUKLy8vIGFzc2lnbmVkIHRoZSBzYW1lIHZhbHVlLgovLy8KLy8vIFRoZSBJTlNUQU5DRSBmb3JtIGlzIGNvbnN0cnVjdGVkIGFzIGEgbGlzdCBvZiBbaW5wdXRzXS4gVGhpcyBpcyB0aGUgc2FtZSBhcwovLy8gdGhlIENPTVBMRVRFIGZvcm0gZm9yIHRoZSAndGhpc1R5cGUnLCBleGNlcHQgdGhlIHJvb3QgdGVybSdzIHR5cGUgaXMKLy8vIG1pc3Npbmc7IHRoaXMgaXMgaW1wbGljaXQgYXMgdGhlIHJhdyB0eXBlIG9mIGluc3RhbmNlLiAgVGhlIFtkYXJ0VHlwZV0gb2YKLy8vIHRoZSBJTlNUQU5DRSBmb3JtIG11c3QgYmUgdGhlIHRoaXNUeXBlIG9mIHNvbWUgY2xhc3MuCi8vLwovLy8gV2Ugd2FudCB0byByZW1vdmUgdGhlIGNvbnN0cmFpbnMgb24gdGhlIElOU1RBTkNFIGZvcm0uIEluIHRoZSBtZWFudGltZSB3ZQovLy8gZ2V0IGJ5IHdpdGggYSB0cmVlIG9mIFR5cGVFeHByZXNzaW9ucy4gIENvbnNpZGVyOgovLy8KLy8vICAgICBjbGFzcyBGb288VD4gewovLy8gICAgICAgLi4uIG5ldyBTZXQ8TGlzdDxUPj4oKQovLy8gICAgIH0KLy8vICAgICBjbGFzcyBTZXQ8RTE+IHsKLy8vICAgICAgIGZhY3RvcnkgU2V0KCkgPT4gbmV3IF9MaW5rZWRIYXNoU2V0PEUxPigpOwovLy8gICAgIH0KLy8vICAgICBjbGFzcyBMaXN0PEUyPiB7IC4uLiB9Ci8vLyAgICAgY2xhc3MgX0xpbmtlZEhhc2hTZXQ8RTM+IHsgLi4uIH0KLy8vCi8vLyBBZnRlciBpbmxpbmluZyB0aGUgZmFjdG9yeSBjb25zdHJ1Y3RvciBmb3IgYFNldDxFMT5gLCB0aGUgSENyZWF0ZSBzaG91bGQKLy8vIGhhdmUgdHlwZSBgX0xpbmtlZEhhc2hTZXQ8TGlzdDxUPj5gIGFuZCB0aGUgVHlwZUV4cHJlc3Npb24gc2hvdWxkIGJlIGEgdHJlZToKLy8vCi8vLyAgICBIQ3JlYXRlKGRhcnRUeXBlOiBfTGlua2VkSGFzaFNldDxMaXN0PFQ+PiwKLy8vICAgICAgICBbXSwgLy8gTm8gYXJndW1lbnRzCi8vLyAgICAgICAgSFR5cGVJbmZvRXhwcmVzc2lvbihJTlNUQU5DRSwKLy8vICAgICAgICAgICAgZGFydFR5cGU6IF9MaW5rZWRIYXNoU2V0PEUzPiwgLy8gX0xpbmtlZEhhc2hTZXQncyB0aGlzVHlwZQovLy8gICAgICAgICAgICBIVHlwZUluZm9FeHByZXNzaW9uKENPTVBMRVRFLCAgLy8gRTMgPSBMaXN0PFQ+Ci8vLyAgICAgICAgICAgICAgICBkYXJ0VHlwZTogTGlzdDxFMj4sCi8vLyAgICAgICAgICAgICAgICBIVHlwZUluZm9SZWFkVmFyaWFibGUodGhpcywgVCkpKSkgLy8gRTIgPSBUCgovLyBUT0RPKHNyYSk6IFRoZSBJTlNUQU5DRSBmb3JtIHJlcXVpcmVzIHRoZSBhY3R1YWwgaW5zdGFuY2UgZm9yIGZ1bGwKLy8gaW50ZXJwcmV0YXRpb24uIElmIHRoZSBDT01QTEVURSBmb3JtIHdhcyB1c2VkIG9uIGluc3RhbmNlcywgdGhlbiB3ZSBjb3VsZAovLyBzaW1wbGlmeSBIVHlwZUluZm9SZWFkVmFyaWFibGUgd2l0aG91dCBhbiBvYmplY3QuCgpjbGFzcyBIVHlwZUluZm9FeHByZXNzaW9uIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBmaW5hbCBUeXBlSW5mb0V4cHJlc3Npb25LaW5kIGtpbmQ7CiAgZmluYWwgRGFydFR5cGUgZGFydFR5cGU7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcwogIGZpbmFsIGJvb2wgaXNUeXBlVmFyaWFibGVSZXBsYWNlbWVudDsKCiAgSFR5cGVJbmZvRXhwcmVzc2lvbih0aGlzLmtpbmQsIHRoaXMuZGFydFR5cGUsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIEFic3RyYWN0VmFsdWUgaW5zdHJ1Y3Rpb25UeXBlLAogICAgICB7dGhpcy5pc1R5cGVWYXJpYWJsZVJlcGxhY2VtZW50OiBmYWxzZX0pCiAgICAgIDogc3VwZXIoaW5wdXRzLCBpbnN0cnVjdGlvblR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUeXBlSW5mb0V4cHJlc3Npb24odGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uVFlQRV9JTkZPX0VYUFJFU1NJT05fVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSFR5cGVJbmZvRXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhUeXBlSW5mb0V4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBraW5kID09IG90aGVyLmtpbmQgJiYgZGFydFR5cGUgPT0gb3RoZXIuZGFydFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSFR5cGVJbmZvRXhwcmVzc2lvbigka2luZEFzU3RyaW5nLCAkZGFydFR5cGUpJzsKCiAgLy8gaWdub3JlOiBNSVNTSU5HX1JFVFVSTgogIFN0cmluZyBnZXQga2luZEFzU3RyaW5nIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEU6CiAgICAgICAgcmV0dXJuICdDT01QTEVURSc7CiAgICAgIGNhc2UgVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRToKICAgICAgICByZXR1cm4gJ0lOU1RBTkNFJzsKICAgIH0KICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLy8gSXMtdGVzdCB1c2luZyBSdGkgZm9ybSBvZiB0eXBlIGV4cHJlc3Npb24uCi8vLwovLy8gVGhpcyBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZCBmb3IgYW55IHR5cGUuIFRlc3RzIGZvciBzaW1wbGUgdHlwZXMgYXJlCi8vLyBsb3dlcmVkIHRvIG90aGVyIGluc3RydWN0aW9ucywgc28gdGhpcyBpbnN0cnVjdGlvbiByZW1haW5zIGZvciB0eXBlcyB0aGF0Ci8vLyBkZXBlbmQgb24gdHlwZSB2YXJpYWJsZXMgYW5kIGNvbXBsZXggdHlwZXMuCmNsYXNzIEhJc1Rlc3QgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGZpbmFsIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNoZWNrZWRBYnN0cmFjdFZhbHVlOwogIGZpbmFsIERhcnRUeXBlIGRhcnRUeXBlOwoKICBISXNUZXN0KHRoaXMuZGFydFR5cGUsIHRoaXMuY2hlY2tlZEFic3RyYWN0VmFsdWUsIEhJbnN0cnVjdGlvbiBjaGVja2VkLAogICAgICBISW5zdHJ1Y3Rpb24gcnRpLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoW3J0aSwgY2hlY2tlZF0sIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgLy8gVGhlIHR5cGUgaW5wdXQgaXMgZmlyc3QgdG8gZmFjaWxpdGF0ZSB0aGUgYHR5cGUuaXModmFsdWUpYCBjb2RlZ2VuIHBhdHRlcm4uCiAgSEluc3RydWN0aW9uIGdldCB0eXBlSW5wdXQgPT4gaW5wdXRzWzBdOwogIEhJbnN0cnVjdGlvbiBnZXQgY2hlY2tlZElucHV0ID0+IGlucHV0c1sxXTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJc1Rlc3QodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JU19URVNUX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBISXNUZXN0OwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSElzVGVzdCBvdGhlcikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hJc1Rlc3QoKSc7Cn0KCi8vLyBUeXBlIGNhc3Qgb3IgdHlwZSBjaGVjayB1c2luZyBSdGkgZm9ybSBvZiB0eXBlIGV4cHJlc3Npb24uCmNsYXNzIEhBc0NoZWNrIGV4dGVuZHMgSENoZWNrIHsKICBmaW5hbCBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjaGVja2VkVHlwZTsKICBmaW5hbCBEYXJ0VHlwZSBjaGVja2VkVHlwZUV4cHJlc3Npb247CiAgZmluYWwgYm9vbCBpc1R5cGVFcnJvcjsKCiAgSEFzQ2hlY2soCiAgICAgIEhJbnN0cnVjdGlvbiBjaGVja2VkLAogICAgICBISW5zdHJ1Y3Rpb24gcnRpLAogICAgICB0aGlzLmNoZWNrZWRUeXBlLAogICAgICB0aGlzLmNoZWNrZWRUeXBlRXhwcmVzc2lvbiwKICAgICAgdGhpcy5pc1R5cGVFcnJvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGUpCiAgICAgIDogYXNzZXJ0KGlzVHlwZUVycm9yICE9IG51bGwpLAogICAgICAgIHN1cGVyKFtydGksIGNoZWNrZWRdLCBpbnN0cnVjdGlvblR5cGUpOwoKICAvLyBUaGUgdHlwZSBpbnB1dCBpcyBmaXJzdCB0byBmYWNpbGl0YXRlIHRoZSBgdHlwZS5hcyh2YWx1ZSlgIGNvZGVnZW4gcGF0dGVybi4KICBISW5zdHJ1Y3Rpb24gZ2V0IHR5cGVJbnB1dCA9PiBpbnB1dHNbMF07CiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldCBjaGVja2VkSW5wdXQgPT4gaW5wdXRzWzFdOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRBc0NoZWNrKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQVNfQ0hFQ0tfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhBc0NoZWNrOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEFzQ2hlY2sgb3RoZXIpIHsKICAgIHJldHVybiBpc1R5cGVFcnJvciA9PSBvdGhlci5pc1R5cGVFcnJvcjsKICB9CgogIGJvb2wgaXNSZWR1bmRhbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoIWNoZWNrZWRUeXBlLmlzUHJlY2lzZSkgcmV0dXJuIGZhbHNlOwogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gY2hlY2tlZElucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmlzSW4oaW5wdXRUeXBlLCBjaGVja2VkVHlwZS5hYnN0cmFjdFZhbHVlKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nIGVycm9yID0gaXNUeXBlRXJyb3IgPyAnVHlwZUVycm9yJyA6ICdDYXN0RXJyb3InOwogICAgcmV0dXJuICdIQXNDaGVjaygkZXJyb3IpJzsKICB9Cn0KCi8vLyBUeXBlIGNhc3Qgb3IgdHlwZSBjaGVjayBmb3Igc2ltcGxlIGtub3duIHR5cGVzIHRoYXQgYXJlIGFjaGlldmVkIHZpYSBhCi8vLyBzaW1wbGUgc3RhdGljIGNhbGwuCmNsYXNzIEhBc0NoZWNrU2ltcGxlIGV4dGVuZHMgSENoZWNrIHsKICBmaW5hbCBEYXJ0VHlwZSBkYXJ0VHlwZTsKICBmaW5hbCBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjaGVja2VkVHlwZTsKICBmaW5hbCBib29sIGlzVHlwZUVycm9yOwogIGZpbmFsIE1lbWJlckVudGl0eSBtZXRob2Q7CgogIEhBc0NoZWNrU2ltcGxlKEhJbnN0cnVjdGlvbiBjaGVja2VkLCB0aGlzLmRhcnRUeXBlLCB0aGlzLmNoZWNrZWRUeXBlLAogICAgICB0aGlzLmlzVHlwZUVycm9yLCB0aGlzLm1ldGhvZCwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IGFzc2VydChpc1R5cGVFcnJvciAhPSBudWxsKSwKICAgICAgICBzdXBlcihbY2hlY2tlZF0sIHR5cGUpOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0IGNoZWNrZWRJbnB1dCA9PiBpbnB1dHNbMF07CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEFzQ2hlY2tTaW1wbGUodGhpcyk7CgogIGJvb2wgaXNSZWR1bmRhbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoIWNoZWNrZWRUeXBlLmlzUHJlY2lzZSkgcmV0dXJuIGZhbHNlOwogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gY2hlY2tlZElucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmlzSW4oaW5wdXRUeXBlLCBjaGVja2VkVHlwZS5hYnN0cmFjdFZhbHVlKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkFTX0NIRUNLX1NJTVBMRV9UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSEFzQ2hlY2tTaW1wbGU7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIQXNDaGVja1NpbXBsZSBvdGhlcikgewogICAgcmV0dXJuIGlzVHlwZUVycm9yID09IG90aGVyLmlzVHlwZUVycm9yICYmIGRhcnRUeXBlID09IG90aGVyLmRhcnRUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nIGVycm9yID0gaXNUeXBlRXJyb3IgPyAnVHlwZUVycm9yJyA6ICdDYXN0RXJyb3InOwogICAgcmV0dXJuICdIQXNDaGVjaygkZXJyb3IpJzsKICB9Cn0KCi8vLyBTdWJ0eXBlIGNoZWNrIGNvbXBhcmluZyB0d28gUnRpIHR5cGVzLgpjbGFzcyBIU3VidHlwZUNoZWNrIGV4dGVuZHMgSENoZWNrIHsKICBIU3VidHlwZUNoZWNrKAogICAgICBISW5zdHJ1Y3Rpb24gc3VidHlwZSwgSEluc3RydWN0aW9uIHN1cGVydHlwZSwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKFtzdWJ0eXBlLCBzdXBlcnR5cGVdLCB0eXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgdHlwZUlucHV0ID0+IGlucHV0c1sxXTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTdWJ0eXBlQ2hlY2sodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5TVUJUWVBFX0NIRUNLX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIU3VidHlwZUNoZWNrOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFN1YnR5cGVDaGVjayBvdGhlcikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hTdWJ0eXBlQ2hlY2soKSc7Cn0KCi8vLyBDb21tb24gc3VwZXJjbGFzcyBmb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgZ2VuZXJhdGUgUnRpIHZhbHVlcy4KYWJzdHJhY3QgY2xhc3MgSFJ0aUluc3RydWN0aW9uIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIUnRpSW5zdHJ1Y3Rpb24oTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSk7Cn0KCi8vLyBFdmFsdWF0ZXMgYW4gUnRpIHR5cGUgcmVjaXBlIGluIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQuCmNsYXNzIEhMb2FkVHlwZSBleHRlbmRzIEhSdGlJbnN0cnVjdGlvbiB7CiAgRGFydFR5cGUgdHlwZUV4cHJlc3Npb247IC8vIFRPRE8oc3JhKTogQWxsb3cgYSB0eXBlIGVudmlyb25tZW50IGV4cHJlc3Npb24uCgogIEhMb2FkVHlwZSh0aGlzLnR5cGVFeHByZXNzaW9uLCBBYnN0cmFjdFZhbHVlIHR5cGUpIDogc3VwZXIoW10sIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMb2FkVHlwZSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkxPQURfVFlQRV9UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSExvYWRUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSExvYWRUeXBlIG90aGVyKSB7CiAgICByZXR1cm4gdHlwZUV4cHJlc3Npb24gPT0gb3RoZXIudHlwZUV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSExvYWRUeXBlKCR0eXBlRXhwcmVzc2lvbiknOwp9CgovLy8gVGhlIHJlaWZpZWQgUnRpIGVudmlyb25tZW50IHN0b3JlZCBvbiBhIGNsYXNzIGluc3RhbmNlLgovLy8KLy8vIENsYXNzZXMgd2l0aCByZWlmaWVkIHR5cGUgYXJndW1lbnRzIGhhdmUgdGhlIHR5cGUgZW52aXJvbm1lbnQgc3RvcmVkIG9uIHRoZQovLy8gaW5zdGFuY2UuIFRoZSByZWlmaWVkIGVudmlyb25tZW50IGlzIHR5cGljYWxseSBzdG9yZWQgYXMgdGhlIGluc3RhbmNlIHR5cGUsCi8vLyBlLmcuICJVbm1vZGlmaWFibGVMaXN0VmlldzxpbnQ+Ii4KY2xhc3MgSEluc3RhbmNlRW52aXJvbm1lbnQgZXh0ZW5kcyBIUnRpSW5zdHJ1Y3Rpb24gewogIEhJbnN0YW5jZUVudmlyb25tZW50KEhJbnN0cnVjdGlvbiBpbnN0YW5jZSwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKFtpbnN0YW5jZV0sIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnN0YW5jZUVudmlyb25tZW50KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uSU5TVEFOQ0VfRU5WSVJPTk1FTlRfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhJbnN0YW5jZUVudmlyb25tZW50OwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RhbmNlRW52aXJvbm1lbnQgb3RoZXIpID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdISW5zdGFuY2VFbnZpcm9ubWVudCgpJzsKfQoKLy8vIEV2YWx1YXRlcyBhbiBSdGkgdHlwZSByZWNpcGUgaW4gYW4gUnRpIGVudmlyb25tZW50LgpjbGFzcyBIVHlwZUV2YWwgZXh0ZW5kcyBIUnRpSW5zdHJ1Y3Rpb24gewogIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBlbnZTdHJ1Y3R1cmU7CiAgVHlwZVJlY2lwZSB0eXBlRXhwcmVzc2lvbjsKCiAgSFR5cGVFdmFsKEhJbnN0cnVjdGlvbiBlbnZpcm9ubWVudCwgdGhpcy5lbnZTdHJ1Y3R1cmUsIHRoaXMudHlwZUV4cHJlc3Npb24sCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihbZW52aXJvbm1lbnRdLCB0eXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VHlwZUV2YWwodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5UWVBFX0VWQUxfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhUeXBlRXZhbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhUeXBlRXZhbCBvdGhlcikgewogICAgcmV0dXJuIFR5cGVSZWNpcGUueWllbGRzU2FtZVR5cGUoCiAgICAgICAgdHlwZUV4cHJlc3Npb24sIGVudlN0cnVjdHVyZSwgb3RoZXIudHlwZUV4cHJlc3Npb24sIG90aGVyLmVudlN0cnVjdHVyZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSFR5cGVFdmFsKCR0eXBlRXhwcmVzc2lvbiknOwp9CgovLy8gRXh0ZW5kcyBhbiBSdGkgdHlwZSBlbnZpcm9ubWVudCB3aXRoIGdlbmVyaWMgZnVuY3Rpb24gdHlwZXMuCmNsYXNzIEhUeXBlQmluZCBleHRlbmRzIEhSdGlJbnN0cnVjdGlvbiB7CiAgSFR5cGVCaW5kKAogICAgICBISW5zdHJ1Y3Rpb24gZW52aXJvbm1lbnQsIEhJbnN0cnVjdGlvbiB0eXBlQXJndW1lbnRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoW2Vudmlyb25tZW50LCB0eXBlQXJndW1lbnRzXSwgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFR5cGVCaW5kKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uVFlQRV9CSU5EX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIVHlwZUJpbmQ7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIVHlwZUJpbmQgb3RoZXIpID0+IHRydWU7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HQFIOSUgAQwuAQwhAQxAAS8uTzwfNBsEAQw7AQxCAQwqSwQBDBY8HwQCASslEUgsEQQBKwEMPwEMOQEMQQEMMAEMKgIBQTZBHQIBPCpOAUkRBAEMOwEMNQEMPQEMJTMEAQw1AgE8BFBQJjVCIhEEAQxGAQxAAQxIAQw3AQwxAgE4KikdAU4aJREEAQw7AQw1AQw9AQwlJlEEAQw1AgFBKg1QNBEEAQw7AQw1AQw9AQwsAQwmAgEjcGFja2FnZTpjb21waWxlci9zcmMvc3NhL25vZGVzLmRhcnQ0c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2Uvc2VsZWN0b3IuZGFydK6xLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5zZWxlY3RvcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IE5hbWVzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0JyBhcyB1dGlsczsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9vcGVyYXRvcnMuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2ludm9jYXRpb25fbWlycm9yX2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgSGFzaGluZzsKaW1wb3J0ICdjYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CgpjbGFzcyBTZWxlY3RvcktpbmQgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZTsKICBjb25zdCBTZWxlY3RvcktpbmQodGhpcy5uYW1lLCB0aGlzLmhhc2hDb2RlKTsKCiAgc3RhdGljIGNvbnN0IFNlbGVjdG9yS2luZCBHRVRURVIgPSBjb25zdCBTZWxlY3RvcktpbmQoJ2dldHRlcicsIDApOwogIHN0YXRpYyBjb25zdCBTZWxlY3RvcktpbmQgU0VUVEVSID0gY29uc3QgU2VsZWN0b3JLaW5kKCdzZXR0ZXInLCAxKTsKICBzdGF0aWMgY29uc3QgU2VsZWN0b3JLaW5kIENBTEwgPSBjb25zdCBTZWxlY3RvcktpbmQoJ2NhbGwnLCAyKTsKICBzdGF0aWMgY29uc3QgU2VsZWN0b3JLaW5kIE9QRVJBVE9SID0gY29uc3QgU2VsZWN0b3JLaW5kKCdvcGVyYXRvcicsIDMpOwogIHN0YXRpYyBjb25zdCBTZWxlY3RvcktpbmQgSU5ERVggPSBjb25zdCBTZWxlY3RvcktpbmQoJ2luZGV4JywgNCk7CiAgc3RhdGljIGNvbnN0IFNlbGVjdG9yS2luZCBTUEVDSUFMID0gY29uc3QgU2VsZWN0b3JLaW5kKCdzcGVjaWFsJywgNSk7CgogIGludCBnZXQgaW5kZXggPT4gaGFzaENvZGU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7CgogIHN0YXRpYyBMaXN0PFNlbGVjdG9yS2luZD4gdmFsdWVzID0gY29uc3QgPFNlbGVjdG9yS2luZD5bCiAgICBHRVRURVIsCiAgICBTRVRURVIsCiAgICBDQUxMLAogICAgT1BFUkFUT1IsCiAgICBJTkRFWCwKICAgIFNQRUNJQUwKICBdOwp9CgpjbGFzcyBTZWxlY3RvciB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtTZWxlY3Rvcl0gb2JqZWN0cyBpbiBhIGRlYnVnZ2luZwogIC8vLyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdzZWxlY3Rvcic7CgogIGZpbmFsIFNlbGVjdG9yS2luZCBraW5kOwogIGZpbmFsIE5hbWUgbWVtYmVyTmFtZTsKICBmaW5hbCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CgogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZTsKCiAgaW50IGdldCBhcmd1bWVudENvdW50ID0+IGNhbGxTdHJ1Y3R1cmUuYXJndW1lbnRDb3VudDsKICBpbnQgZ2V0IG5hbWVkQXJndW1lbnRDb3VudCA9PiBjYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRDb3VudDsKICBpbnQgZ2V0IHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID0+IGNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQ7CiAgaW50IGdldCB0eXBlQXJndW1lbnRDb3VudCA9PiBjYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50OwogIExpc3Q8U3RyaW5nPiBnZXQgbmFtZWRBcmd1bWVudHMgPT4gY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50czsKCiAgU3RyaW5nIGdldCBuYW1lID0+IG1lbWJlck5hbWUudGV4dDsKCiAgTGlicmFyeUVudGl0eSBnZXQgbGlicmFyeSA9PiBtZW1iZXJOYW1lLmxpYnJhcnk7CgogIHN0YXRpYyBib29sIGlzT3BlcmF0b3JOYW1lKFN0cmluZyBuYW1lKSB7CiAgICBpZiAobmFtZSA9PSBOYW1lcy5JTkRFWF9TRVRfTkFNRS50ZXh0KSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChuYW1lID09IFVuYXJ5T3BlcmF0b3IuTkVHQVRFLnNlbGVjdG9yTmFtZSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSBVbmFyeU9wZXJhdG9yLkNPTVBMRU1FTlQuc2VsZWN0b3JOYW1lKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIEJpbmFyeU9wZXJhdG9yLnBhcnNlVXNlckRlZmluYWJsZShuYW1lKSAhPSBudWxsOwogICAgfQogIH0KCiAgU2VsZWN0b3IuaW50ZXJuYWwoCiAgICAgIHRoaXMua2luZCwgdGhpcy5tZW1iZXJOYW1lLCB0aGlzLmNhbGxTdHJ1Y3R1cmUsIHRoaXMuaGFzaENvZGUpIHsKICAgIGFzc2VydCgKICAgICAgICBraW5kID09IFNlbGVjdG9yS2luZC5JTkRFWCB8fAogICAgICAgICAgICAobWVtYmVyTmFtZSAhPSBOYW1lcy5JTkRFWF9OQU1FICYmCiAgICAgICAgICAgICAgICBtZW1iZXJOYW1lICE9IE5hbWVzLklOREVYX1NFVF9OQU1FKSwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJraW5kPSRraW5kLG1lbWJlck5hbWU9JG1lbWJlck5hbWUsY2FsbFN0cnVjdHVyZTokY2FsbFN0cnVjdHVyZSIpKTsKICAgIGFzc2VydCgKICAgICAgICBraW5kID09IFNlbGVjdG9yS2luZC5PUEVSQVRPUiB8fAogICAgICAgICAgICBraW5kID09IFNlbGVjdG9yS2luZC5JTkRFWCB8fAogICAgICAgICAgICAhaXNPcGVyYXRvck5hbWUobWVtYmVyTmFtZS50ZXh0KSB8fAogICAgICAgICAgICBtZW1iZXJOYW1lLnRleHQgPT0gJz8/JywKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJraW5kPSRraW5kLG1lbWJlck5hbWU9JG1lbWJlck5hbWUsY2FsbFN0cnVjdHVyZTokY2FsbFN0cnVjdHVyZSIpKTsKICAgIGFzc2VydCgKICAgICAgICBraW5kID09IFNlbGVjdG9yS2luZC5DQUxMIHx8CiAgICAgICAgICAgIGtpbmQgPT0gU2VsZWN0b3JLaW5kLkdFVFRFUiB8fAogICAgICAgICAgICBraW5kID09IFNlbGVjdG9yS2luZC5TRVRURVIgfHwKICAgICAgICAgICAgaXNPcGVyYXRvck5hbWUobWVtYmVyTmFtZS50ZXh0KSB8fAogICAgICAgICAgICBtZW1iZXJOYW1lLnRleHQgPT0gJz8/JywKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJraW5kPSRraW5kLG1lbWJlck5hbWU9JG1lbWJlck5hbWUsY2FsbFN0cnVjdHVyZTokY2FsbFN0cnVjdHVyZSIpKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEV4dHJhY3QgY2FjaGluZy4KICBzdGF0aWMgTWFwPGludCwgTGlzdDxTZWxlY3Rvcj4+IGNhbm9uaWNhbGl6ZWRWYWx1ZXMgPQogICAgICBuZXcgTWFwPGludCwgTGlzdDxTZWxlY3Rvcj4+KCk7CgogIGZhY3RvcnkgU2VsZWN0b3IoU2VsZWN0b3JLaW5kIGtpbmQsIE5hbWUgbmFtZSwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB1c2UgZXF1YWxpdHkgaW5zdGVhZCBvZiBpbXBsaWNpdCBoYXNoaW5nLgogICAgaW50IGhhc2hDb2RlID0gY29tcHV0ZUhhc2hDb2RlKGtpbmQsIG5hbWUsIGNhbGxTdHJ1Y3R1cmUpOwogICAgTGlzdDxTZWxlY3Rvcj4gbGlzdCA9CiAgICAgICAgY2Fub25pY2FsaXplZFZhbHVlcy5wdXRJZkFic2VudChoYXNoQ29kZSwgKCkgPT4gPFNlbGVjdG9yPltdKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICBTZWxlY3RvciBleGlzdGluZyA9IGxpc3RbaV07CiAgICAgIGlmIChleGlzdGluZy5tYXRjaChraW5kLCBuYW1lLCBjYWxsU3RydWN0dXJlKSkgewogICAgICAgIGFzc2VydChleGlzdGluZy5oYXNoQ29kZSA9PSBoYXNoQ29kZSk7CiAgICAgICAgcmV0dXJuIGV4aXN0aW5nOwogICAgICB9CiAgICB9CiAgICBTZWxlY3RvciByZXN1bHQgPQogICAgICAgIG5ldyBTZWxlY3Rvci5pbnRlcm5hbChraW5kLCBuYW1lLCBjYWxsU3RydWN0dXJlLCBoYXNoQ29kZSk7CiAgICBsaXN0LmFkZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZhY3RvcnkgU2VsZWN0b3IuZnJvbUVsZW1lbnQoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIE5hbWUgbmFtZSA9IGVsZW1lbnQubWVtYmVyTmFtZTsKICAgIGlmIChlbGVtZW50LmlzRnVuY3Rpb24pIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBlbGVtZW50OwogICAgICBpZiAobmFtZSA9PSBOYW1lcy5JTkRFWF9OQU1FKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5pbmRleCgpOwogICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gTmFtZXMuSU5ERVhfU0VUX05BTUUpIHsKICAgICAgICByZXR1cm4gbmV3IFNlbGVjdG9yLmluZGV4U2V0KCk7CiAgICAgIH0KICAgICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmU7CiAgICAgIGlmIChpc09wZXJhdG9yTmFtZShlbGVtZW50Lm5hbWUpKSB7CiAgICAgICAgLy8gT3BlcmF0b3JzIGNhbm5vdCBoYXZlIG5hbWVkIGFyZ3VtZW50cywgaG93ZXZlciwgdGhhdCBkb2Vzbid0IHByZXZlbnQKICAgICAgICAvLyBhIHVzZXIgZnJvbSBkZWNsYXJpbmcgc3VjaCBhbiBvcGVyYXRvci4KICAgICAgICByZXR1cm4gbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5PUEVSQVRPUiwgbmFtZSwgY2FsbFN0cnVjdHVyZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5jYWxsKG5hbWUsIGNhbGxTdHJ1Y3R1cmUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5zZXR0ZXIobmFtZSk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNHZXR0ZXIpIHsKICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5nZXR0ZXIobmFtZSk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNGaWVsZCkgewogICAgICByZXR1cm4gbmV3IFNlbGVjdG9yLmdldHRlcihuYW1lKTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IuY2FsbENvbnN0cnVjdG9yKG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgZmFpbGVkQXQoZWxlbWVudCwgIkNhbid0IGdldCBzZWxlY3RvciBmcm9tICRlbGVtZW50Iik7CiAgICB9CiAgfQoKICBmYWN0b3J5IFNlbGVjdG9yLmdldHRlcihOYW1lIG5hbWUpID0+CiAgICAgIG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuR0VUVEVSLCBuYW1lLmdldHRlciwgQ2FsbFN0cnVjdHVyZS5OT19BUkdTKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci5zZXR0ZXIoTmFtZSBuYW1lKSA9PgogICAgICBuZXcgU2VsZWN0b3IoU2VsZWN0b3JLaW5kLlNFVFRFUiwgbmFtZS5zZXR0ZXIsIENhbGxTdHJ1Y3R1cmUuT05FX0FSRyk7CgogIGZhY3RvcnkgU2VsZWN0b3IudW5hcnlPcGVyYXRvcihTdHJpbmcgbmFtZSkgPT4gbmV3IFNlbGVjdG9yKAogICAgICBTZWxlY3RvcktpbmQuT1BFUkFUT1IsCiAgICAgIG5ldyBQdWJsaWNOYW1lKHV0aWxzLmNvbnN0cnVjdE9wZXJhdG9yTmFtZShuYW1lLCB0cnVlKSksCiAgICAgIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIGZhY3RvcnkgU2VsZWN0b3IuYmluYXJ5T3BlcmF0b3IoU3RyaW5nIG5hbWUpID0+IG5ldyBTZWxlY3RvcigKICAgICAgU2VsZWN0b3JLaW5kLk9QRVJBVE9SLAogICAgICBuZXcgUHVibGljTmFtZSh1dGlscy5jb25zdHJ1Y3RPcGVyYXRvck5hbWUobmFtZSwgZmFsc2UpKSwKICAgICAgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci5pbmRleCgpID0+CiAgICAgIG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuSU5ERVgsIE5hbWVzLklOREVYX05BTUUsIENhbGxTdHJ1Y3R1cmUuT05FX0FSRyk7CgogIGZhY3RvcnkgU2VsZWN0b3IuaW5kZXhTZXQoKSA9PiBuZXcgU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yS2luZC5JTkRFWCwgTmFtZXMuSU5ERVhfU0VUX05BTUUsIENhbGxTdHJ1Y3R1cmUuVFdPX0FSR1MpOwoKICBmYWN0b3J5IFNlbGVjdG9yLmNhbGwoTmFtZSBuYW1lLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpID0+CiAgICAgIG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuQ0FMTCwgbmFtZSwgY2FsbFN0cnVjdHVyZSk7CgogIGZhY3RvcnkgU2VsZWN0b3IuY2FsbENsb3N1cmUoaW50IGFyaXR5LAogICAgICAgICAgW0xpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywgaW50IHR5cGVBcmd1bWVudENvdW50ID0gMF0pID0+CiAgICAgIG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuQ0FMTCwgTmFtZXMuY2FsbCwKICAgICAgICAgIG5ldyBDYWxsU3RydWN0dXJlKGFyaXR5LCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50Q291bnQpKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci5jYWxsQ2xvc3VyZUZyb20oU2VsZWN0b3Igc2VsZWN0b3IpID0+CiAgICAgIG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuQ0FMTCwgTmFtZXMuY2FsbCwgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSk7CgogIGZhY3RvcnkgU2VsZWN0b3IuY2FsbENvbnN0cnVjdG9yKE5hbWUgbmFtZSwKICAgICAgICAgIFtpbnQgYXJpdHkgPSAwLCBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHNdKSA9PgogICAgICBuZXcgU2VsZWN0b3IoCiAgICAgICAgICBTZWxlY3RvcktpbmQuQ0FMTCwgbmFtZSwgbmV3IENhbGxTdHJ1Y3R1cmUoYXJpdHksIG5hbWVkQXJndW1lbnRzKSk7CgogIGZhY3RvcnkgU2VsZWN0b3IuY2FsbERlZmF1bHRDb25zdHJ1Y3RvcigpID0+IG5ldyBTZWxlY3RvcigKICAgICAgU2VsZWN0b3JLaW5kLkNBTEwsIGNvbnN0IFB1YmxpY05hbWUoJycpLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpOwoKICAvLyBUT0RPKDMxOTUzKTogUmVtb3ZlIHRoaXMgaWYgd2UgY2FuIGltcGxlbWVudCB2aWEgc3RhdGljIGNhbGxzLgogIGZhY3RvcnkgU2VsZWN0b3IuZ2VuZXJpY0luc3RhbnRpYXRpb24oaW50IHR5cGVBcmd1bWVudHMpID0+IG5ldyBTZWxlY3RvcigKICAgICAgU2VsZWN0b3JLaW5kLlNQRUNJQUwsCiAgICAgIE5hbWVzLmdlbmVyaWNJbnN0YW50aWF0aW9uLAogICAgICBuZXcgQ2FsbFN0cnVjdHVyZSgwLCBudWxsLCB0eXBlQXJndW1lbnRzKSk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbU2VsZWN0b3JdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgU2VsZWN0b3IucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFNlbGVjdG9yS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFNlbGVjdG9yS2luZC52YWx1ZXMpOwogICAgYm9vbCBpc1NldHRlciA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5T3JOdWxsKCk7CiAgICBTdHJpbmcgdGV4dCA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgQ2FsbFN0cnVjdHVyZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgU2VsZWN0b3IoCiAgICAgICAga2luZCwgbmV3IE5hbWUodGV4dCwgbGlicmFyeSwgaXNTZXR0ZXI6IGlzU2V0dGVyKSwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtTZWxlY3Rvcl0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVFbnVtKGtpbmQpOwogICAgc2luay53cml0ZUJvb2wobWVtYmVyTmFtZS5pc1NldHRlcik7CiAgICBzaW5rLndyaXRlTGlicmFyeU9yTnVsbChtZW1iZXJOYW1lLmxpYnJhcnkpOwogICAgc2luay53cml0ZVN0cmluZyhtZW1iZXJOYW1lLnRleHQpOwogICAgY2FsbFN0cnVjdHVyZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4ga2luZCA9PSBTZWxlY3RvcktpbmQuR0VUVEVSOwogIGJvb2wgZ2V0IGlzU2V0dGVyID0+IGtpbmQgPT0gU2VsZWN0b3JLaW5kLlNFVFRFUjsKICBib29sIGdldCBpc0NhbGwgPT4ga2luZCA9PSBTZWxlY3RvcktpbmQuQ0FMTDsKICBib29sIGdldCBpc0Nsb3N1cmVDYWxsID0+IGlzQ2FsbCAmJiBtZW1iZXJOYW1lID09IE5hbWVzLkNBTExfTkFNRTsKCiAgYm9vbCBnZXQgaXNJbmRleCA9PiBraW5kID09IFNlbGVjdG9yS2luZC5JTkRFWCAmJiBhcmd1bWVudENvdW50ID09IDE7CiAgYm9vbCBnZXQgaXNJbmRleFNldCA9PiBraW5kID09IFNlbGVjdG9yS2luZC5JTkRFWCAmJiBhcmd1bWVudENvdW50ID09IDI7CgogIGJvb2wgZ2V0IGlzT3BlcmF0b3IgPT4ga2luZCA9PSBTZWxlY3RvcktpbmQuT1BFUkFUT1I7CiAgYm9vbCBnZXQgaXNVbmFyeU9wZXJhdG9yID0+IGlzT3BlcmF0b3IgJiYgYXJndW1lbnRDb3VudCA9PSAwOwoKICAvLy8gVGhlIG1lbWJlciBuYW1lIGZvciBpbnZvY2F0aW9uIG1pcnJvcnMgY3JlYXRlZCBmcm9tIHRoaXMgc2VsZWN0b3IuCiAgU3RyaW5nIGdldCBpbnZvY2F0aW9uTWlycm9yTWVtYmVyTmFtZSA9PiBpc1NldHRlciA/ICckbmFtZT0nIDogbmFtZTsKCiAgaW50IGdldCBpbnZvY2F0aW9uTWlycm9yS2luZCB7CiAgICBpbnQga2luZCA9IGludm9jYXRpb25NaXJyb3JNZXRob2RLaW5kOwogICAgaWYgKGlzR2V0dGVyKSB7CiAgICAgIGtpbmQgPSBpbnZvY2F0aW9uTWlycm9yR2V0dGVyS2luZDsKICAgIH0gZWxzZSBpZiAoaXNTZXR0ZXIpIHsKICAgICAga2luZCA9IGludm9jYXRpb25NaXJyb3JTZXR0ZXJLaW5kOwogICAgfQogICAgcmV0dXJuIGtpbmQ7CiAgfQoKICBib29sIGFwcGxpZXNVbm5hbWVkKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQobmFtZSA9PSBlbGVtZW50Lm5hbWUpOwogICAgaWYgKG1lbWJlck5hbWUuaXNQcml2YXRlICYmIG1lbWJlck5hbWUubGlicmFyeSAhPSBlbGVtZW50LmxpYnJhcnkpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdGhpcyBzaG91bGQgYmUKICAgICAgLy8gYG1lbWJlck5hbWUgIT0gZWxlbWVudC5tZW1iZXJOYW1lYC4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKGVsZW1lbnQuaXNTZXR0ZXIpIHJldHVybiBpc1NldHRlcjsKICAgIGlmIChlbGVtZW50LmlzR2V0dGVyKSByZXR1cm4gaXNHZXR0ZXIgfHwgaXNDYWxsOwogICAgaWYgKGVsZW1lbnQuaXNGaWVsZCkgewogICAgICByZXR1cm4gaXNTZXR0ZXIgPyBlbGVtZW50LmlzQXNzaWduYWJsZSA6IGlzR2V0dGVyIHx8IGlzQ2FsbDsKICAgIH0KICAgIGlmIChpc0dldHRlcikgcmV0dXJuIHRydWU7CiAgICBpZiAoaXNTZXR0ZXIpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzaWduYXR1cmVBcHBsaWVzKGVsZW1lbnQpOwogIH0KCiAgLy8vIFdoZXRoZXIgW3RoaXNdIGNvdWxkIGJlIGEgdmFsaWQgc2VsZWN0b3Igb24gYE51bGxgIHdpdGhvdXQgdGhyb3dpbmcuCiAgYm9vbCBhcHBsaWVzVG9OdWxsV2l0aG91dFRocm93KCkgewogICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7CiAgICBpZiAoaXNPcGVyYXRvciAmJiBuYW1lID09ICI9PSIpIHJldHVybiB0cnVlOwogICAgLy8gS25vd24gZ2V0dGVycyBhbmQgdmFsaWQgdGVhci1vZmZzLgogICAgaWYgKGlzR2V0dGVyICYmCiAgICAgICAgKG5hbWUgPT0gImhhc2hDb2RlIiB8fAogICAgICAgICAgICBuYW1lID09ICJydW50aW1lVHlwZSIgfHwKICAgICAgICAgICAgbmFtZSA9PSAidG9TdHJpbmciIHx8CiAgICAgICAgICAgIG5hbWUgPT0gIm5vU3VjaE1ldGhvZCIpKSByZXR1cm4gdHJ1ZTsKICAgIC8vIENhbGxpbmcgdG9TdHJpbmcgYWx3YXlzIHN1Y2NlZWRzLCBjYWxscyB0byBgbm9TdWNoTWV0aG9kYCAoZXZlbiB3ZWxsCiAgICAvLyBmb3JtZWQgY2FsbHMpIGFsd2F5cyB0aHJvdy4KICAgIGlmIChpc0NhbGwgJiYKICAgICAgICBuYW1lID09ICJ0b1N0cmluZyIgJiYKICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9PSAwICYmCiAgICAgICAgbmFtZWRBcmd1bWVudENvdW50ID09IDApIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIHNpZ25hdHVyZUFwcGxpZXMoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiBjYWxsU3RydWN0dXJlLnNpZ25hdHVyZUFwcGxpZXMoZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlKTsKICB9CgogIGJvb2wgYXBwbGllcyhNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKG5hbWUgIT0gZWxlbWVudC5uYW1lKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gYXBwbGllc1VubmFtZWQoZWxlbWVudCk7CiAgfQoKICBib29sIG1hdGNoKFNlbGVjdG9yS2luZCBraW5kLCBOYW1lIG1lbWJlck5hbWUsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgcmV0dXJuIHRoaXMua2luZCA9PSBraW5kICYmCiAgICAgICAgdGhpcy5tZW1iZXJOYW1lID09IG1lbWJlck5hbWUgJiYKICAgICAgICB0aGlzLmNhbGxTdHJ1Y3R1cmUubWF0Y2goY2FsbFN0cnVjdHVyZSk7CiAgfQoKICBzdGF0aWMgaW50IGNvbXB1dGVIYXNoQ29kZSgKICAgICAgU2VsZWN0b3JLaW5kIGtpbmQsIE5hbWUgbmFtZSwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICAvLyBBZGQgYml0cyBmcm9tIG5hbWUgYW5kIGtpbmQuCiAgICBpbnQgaGFzaCA9IEhhc2hpbmcubWl4SGFzaENvZGVCaXRzKG5hbWUuaGFzaENvZGUsIGtpbmQuaGFzaENvZGUpOwogICAgLy8gQWRkIGJpdHMgZnJvbSB0aGUgY2FsbCBzdHJ1Y3R1cmUuCiAgICByZXR1cm4gSGFzaGluZy5taXhIYXNoQ29kZUJpdHMoaGFzaCwgY2FsbFN0cnVjdHVyZS5oYXNoQ29kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1NlbGVjdG9yKCRraW5kLCAkbmFtZSwgJHtjYWxsU3RydWN0dXJlLnN0cnVjdHVyZVRvU3RyaW5nKCl9KSc7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoaXMgc2VsZWN0b3IuCiAgLy8vCiAgLy8vIEEgc2VsZWN0b3IgaXMgbm9ybWFsaXplZCBpZiBpdHMgY2FsbCBzdHJ1Y3R1cmUgaXMgbm9ybWFsaXplZC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2Ugbm9ybWFsaXplZCBzZWxlY3RvcnMgYXMgbXVjaCBhcyBwb3NzaWJsZSwKICAvLyBlc3BlY2lhbGx5IHdoZXJlIHNlbGVjdG9ycyBhcmUgdXNlZCBpbiBzZXRzIG9yIGFzIGtleXMgaW4gbWFwcy4KICBTZWxlY3RvciB0b05vcm1hbGl6ZWQoKSA9PiBjYWxsU3RydWN0dXJlLmlzTm9ybWFsaXplZAogICAgICA/IHRoaXMKICAgICAgOiBuZXcgU2VsZWN0b3Ioa2luZCwgbWVtYmVyTmFtZSwgY2FsbFN0cnVjdHVyZS50b05vcm1hbGl6ZWQoKSk7CgogIFNlbGVjdG9yIHRvQ2FsbFNlbGVjdG9yKCkgPT4gbmV3IFNlbGVjdG9yLmNhbGxDbG9zdXJlRnJvbSh0aGlzKTsKCiAgLy8vIFJldHVybnMgdGhlIG5vbi1nZW5lcmljIFtTZWxlY3Rvcl0gY29ycmVzcG9uZGluZyB0byB0aGlzIHNlbGVjdG9yLgogIFNlbGVjdG9yIHRvTm9uR2VuZXJpYygpIHsKICAgIHJldHVybiBjYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID4gMAogICAgICAgID8gbmV3IFNlbGVjdG9yKGtpbmQsIG1lbWJlck5hbWUsIGNhbGxTdHJ1Y3R1cmUubm9uR2VuZXJpYykKICAgICAgICA6IHRoaXM7CiAgfQp9CoFRAE5OPAEaARkqJDEhJTUuKTEBFRUMFjABRkZCSkRIAR0BDB0BOwwMCg4LDAUCARFMEygBGxklAQwWAThCTEBDASYBMwEsLRM8E0ATDT4GBAEVRwwmLzUoUAwpKjAlKFAMJSsrLyUoUAQBKzgmAVBMPxpHLCM3LxkIBhZEFhMEATckHikmJTEoCE8qUDNJDzcIIygjKCIoKDENQwYEAShNAShNAT8dPx4BQB1AHgEeUQEvSQFDPAEqRzJIATlLAS47FE4BPUcBREwcIjIBNjsXPic4J1AVGUsEASwoFRopMScpEwQBNDQwRQFISwE4QAFJRwEhKxQpGykGEQQBLiJJMy0UBis1G0MGHyAmBAFLJRoxKhQfJSIyTCMSHigjEwYSBAEzSAQBJywkBAFQICkxBAEeQyRGKUIEAQwWSwQBNwZESEU4DUYBQwFJHC9DEAQCAStwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0QXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0wAB9GS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVyczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCcgc2hvdyBPbmVTaG90SW50ZXJjZXB0b3JEYXRhOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCcgc2hvdyBOYXRpdmVCYXNpY0RhdGE7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdjYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICdtZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICd1c2UuZGFydCcKICAgIHNob3cgQ29uc3RhbnRVc2UsIER5bmFtaWNVc2UsIER5bmFtaWNVc2VLaW5kLCBTdGF0aWNVc2UsIFN0YXRpY1VzZUtpbmQ7CmltcG9ydCAnd29ybGRfYnVpbGRlci5kYXJ0JzsKCi8vLyBXb3JsZCBidWlsZGVyIHNwZWNpZmljIHRvIGNvZGVnZW4uCi8vLwovLy8gVGhpcyBhZGRzIGFkZGl0aW9uYWwgYWNjZXNzIHRvIGxpdmVuZXNzIG9mIHNlbGVjdG9ycyBhbmQgZWxlbWVudHMuCmFic3RyYWN0IGNsYXNzIENvZGVnZW5Xb3JsZEJ1aWxkZXIgaW1wbGVtZW50cyBXb3JsZEJ1aWxkZXIgewogIC8vLyBSZWdpc3RlciBbY29uc3RhbnRdIGFzIG5lZWRlZCBmb3IgZW1pc3Npb24uCiAgdm9pZCBhZGRDb21waWxlVGltZUNvbnN0YW50Rm9yRW1pc3Npb24oQ29uc3RhbnRWYWx1ZSBjb25zdGFudCk7CgogIC8vLyBDbG9zZSB0aGUgY29kZWdlbiB3b3JsZCBidWlsZGVyIGFuZCByZXR1cm4gdGhlIGltbXV0YWJsZSBbQ29kZWdlbldvcmxkXQogIC8vLyBhcyB0aGUgcmVzdWx0LgogIENvZGVnZW5Xb3JsZCBjbG9zZSgpOwp9CgovLyBUaGUgaW1tdXRhYmxlIHJlc3VsdCBvZiB0aGUgW0NvZGVnZW5Xb3JsZEJ1aWxkZXJdLgphYnN0cmFjdCBjbGFzcyBDb2RlZ2VuV29ybGQgZXh0ZW5kcyBCdWlsdFdvcmxkIHsKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGdlbmVyaWMgY2FsbCBtZXRob2Qgb24gYSBsaXZlIGNsb3N1cmUgY2xhc3MuCiAgdm9pZCBmb3JFYWNoR2VuZXJpY0Nsb3N1cmVDYWxsTWV0aG9kKHZvaWQgRnVuY3Rpb24oRnVuY3Rpb25FbnRpdHkpIGYpOwoKICBib29sIGhhc0ludm9rZWRHZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyBpbnZva2VkIGFzIGEgc2V0dGVyLgogIGJvb2wgaGFzSW52b2tlZFNldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBpbnZvY2F0aW9uc0J5TmFtZShTdHJpbmcgbmFtZSk7CgogIEl0ZXJhYmxlPFNlbGVjdG9yPiBnZXR0ZXJJbnZvY2F0aW9uc0J5TmFtZShTdHJpbmcgbmFtZSk7CgogIEl0ZXJhYmxlPFNlbGVjdG9yPiBzZXR0ZXJJbnZvY2F0aW9uc0J5TmFtZShTdHJpbmcgbmFtZSk7CgogIHZvaWQgZm9yRWFjaEludm9rZWROYW1lKAogICAgICBmKFN0cmluZyBuYW1lLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycykpOwoKICB2b2lkIGZvckVhY2hJbnZva2VkR2V0dGVyKAogICAgICBmKFN0cmluZyBuYW1lLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycykpOwoKICB2b2lkIGZvckVhY2hJbnZva2VkU2V0dGVyKAogICAgICBmKFN0cmluZyBuYW1lLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycykpOwoKICAvLy8gQWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzc2VzLCB0aGF0IGlzLCBjbGFzc2VzIHdpdGggYSBnZW5lcmF0aXZlCiAgLy8vIGNvbnN0cnVjdG9yIHRoYXQgaGFzIGJlZW4gY2FsbGVkIGRpcmVjdGx5IGFuZCBub3Qgb25seSB0aHJvdWdoIGEKICAvLy8gc3VwZXItY2FsbC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHNlbWFudGljIHByZWNpc2lvbi4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlczsKCiAgLy8vIEFsbCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzc2VzLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgaW5zdGFudGlhdGVkQ2xhc3NlczsKCiAgYm9vbCBtZXRob2RzTmVlZHNTdXBlckdldHRlcihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbik7CgogIC8vLyBUaGUgY2FsbHMgW2ZdIGZvciBhbGwgc3RhdGljIGZpZWxkcy4KICB2b2lkIGZvckVhY2hTdGF0aWNGaWVsZCh2b2lkIEZ1bmN0aW9uKEZpZWxkRW50aXR5KSBmKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGVzIHRoYXQgYXJlIGxpdmUgYXMgY29uc3RhbnQgdHlwZSBsaXRlcmFscy4KICBJdGVyYWJsZTxEYXJ0VHlwZT4gZ2V0IGNvbnN0VHlwZUxpdGVyYWxzOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZXMgdGhhdCBhcmUgbGl2ZSBhcyBjb25zdGFudCB0eXBlIGFyZ3VtZW50cy4KICBJdGVyYWJsZTxEYXJ0VHlwZT4gZ2V0IGxpdmVUeXBlQXJndW1lbnRzOwoKICAvLy8gUmV0dXJucyBhIGxpc3Qgb2YgY29uc3RhbnRzIHRvcG9sb2dpY2FsbHkgc29ydGVkIHNvIHRoYXQgZGVwZW5kZW5jaWVzCiAgLy8vIGFwcGVhciBiZWZvcmUgdGhlIGRlcGVuZGVudCBjb25zdGFudC4KICAvLy8KICAvLy8gW3ByZVNvcnRDb21wYXJlXSBpcyBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdGhhdCBnaXZlcyB0aGUgY29uc3RhbnRzIGEKICAvLy8gY29uc2lzdGVudCBvcmRlciBwcmlvciB0byB0aGUgdG9wb2xvZ2ljYWwgc29ydCB3aGljaCBnaXZlcyB0aGUgY29uc3RhbnRzCiAgLy8vIGFuIG9yZGVyaW5nIHRoYXQgaXMgbGVzcyBzZW5zaXRpdmUgdG8gcGVydHVyYmF0aW9ucyBpbiB0aGUgc291cmNlIGNvZGUuCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0Q29uc3RhbnRzRm9yRW1pc3Npb24oCiAgICAgIFtDb21wYXJhdG9yPENvbnN0YW50VmFsdWU+IHByZVNvcnRDb21wYXJlXSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyBjYWxsZWQgZnJvbSBhIHN1YmNsYXNzIHZpYSBgc3VwZXJgLgogIGJvb2wgaXNBbGlhc2VkU3VwZXJNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIE9uZVNob3RJbnRlcmNlcHRvckRhdGEgZ2V0IG9uZVNob3RJbnRlcmNlcHRvckRhdGE7Cn0KCmNsYXNzIENvZGVnZW5Xb3JsZEJ1aWxkZXJJbXBsIGV4dGVuZHMgV29ybGRCdWlsZGVyQmFzZQogICAgaW1wbGVtZW50cyBDb2RlZ2VuV29ybGRCdWlsZGVyIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIE9uZVNob3RJbnRlcmNlcHRvckRhdGEgX29uZVNob3RJbnRlcmNlcHRvckRhdGE7CgogIC8vLyBUaGUgc2V0IG9mIGFsbCBkaXJlY3RseSBpbnN0YW50aWF0ZWQgY2xhc3NlcywgdGhhdCBpcywgY2xhc3NlcyB3aXRoIGEKICAvLy8gZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciB0aGF0IGhhcyBiZWVuIGNhbGxlZCBkaXJlY3RseSBhbmQgbm90IG9ubHkgdGhyb3VnaAogIC8vLyBhIHN1cGVyLWNhbGwuCiAgLy8vCiAgLy8vIEludmFyaWFudDogRWxlbWVudHMgYXJlIGRlY2xhcmF0aW9uIGVsZW1lbnRzLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFtfZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzXSBhbmQKICAvLyBbX2luc3RhbnRpYXRlZFR5cGVzXSBzZXRzIHNob3VsZCBiZSBtZXJnZWQuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgLy8vIFRoZSBzZXQgb2YgYWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZCB0eXBlcywgdGhhdCBpcywgdGhlIHR5cGVzIG9mIHRoZQogIC8vLyBkaXJlY3RseSBpbnN0YW50aWF0ZWQgY2xhc3Nlcy4KICAvLy8KICAvLy8gU2VlIFtfZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzXS4KICBmaW5hbCBTZXQ8SW50ZXJmYWNlVHlwZT4gX2luc3RhbnRpYXRlZFR5cGVzID0gbmV3IFNldDxJbnRlcmZhY2VUeXBlPigpOwoKICAvLy8gQ2xhc3NlcyBpbXBsZW1lbnRlZCBieSBkaXJlY3RseSBpbnN0YW50aWF0ZWQgY2xhc3Nlcy4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9pbXBsZW1lbnRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBfaW52b2tlZE5hbWVzID0KICAgICAgPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj57fTsKICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBfaW52b2tlZEdldHRlcnMgPQogICAgICA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+Pnt9OwogIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IF9pbnZva2VkU2V0dGVycyA9CiAgICAgIDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+e307CgogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NVc2FnZT4gX3Byb2Nlc3NlZENsYXNzZXMgPQogICAgICA8Q2xhc3NFbnRpdHksIENsYXNzVXNhZ2U+e307CgogIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NVc2FnZT4gZ2V0IGNsYXNzVXNhZ2VGb3JUZXN0aW5nID0+IF9wcm9jZXNzZWRDbGFzc2VzOwoKICAvLy8gTWFwIG9mIHJlZ2lzdGVyZWQgdXNhZ2Ugb2Ygc3RhdGljIGFuZCBpbnN0YW5jZSBtZW1iZXJzLgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBfbWVtYmVyVXNhZ2UgPQogICAgICA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT57fTsKCiAgLy8vIE1hcCBjb250YWluaW5nIGluc3RhbmNlIG1lbWJlcnMgb2YgbGl2ZSBjbGFzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KICAvLy8gZnVsbHkgaW52b2tlZCBkeW5hbWljYWxseS4KICAvLy8KICAvLy8gQSBtZXRob2QgaXMgZnVsbHkgaW52b2tlZCBpZiBhbGwgaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGhhdmUgYmVlbiBwYXNzZWQKICAvLy8gaW4gc29tZSBpbnZvY2F0aW9uLgogIGZpbmFsIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IF9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUgPQogICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+Pnt9OwoKICAvLy8gTWFwIGNvbnRhaW5pbmcgaW5zdGFuY2UgbWVtYmVycyBvZiBsaXZlIGNsYXNzZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgogIC8vLyByZWFkIGZyb20gZHluYW1pY2FsbHkuCiAgZmluYWwgTWFwPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj4gX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lID0KICAgICAgPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj57fTsKCiAgLy8vIE1hcCBjb250YWluaW5nIGluc3RhbmNlIG1lbWJlcnMgb2YgbGl2ZSBjbGFzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KICAvLy8gd3JpdHRlbiB0byBkeW5hbWljYWxseS4KICBmaW5hbCBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUgPQogICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+Pnt9OwoKICBmaW5hbCBTZXQ8RGFydFR5cGU+IF9pc0NoZWNrcyA9IG5ldyBTZXQ8RGFydFR5cGU+KCk7CgogIGZpbmFsIFNlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneSBfc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5OwoKICBmaW5hbCBTZXQ8Q29uc3RhbnRWYWx1ZT4gX2NvbnN0YW50VmFsdWVzID0gbmV3IFNldDxDb25zdGFudFZhbHVlPigpOwoKICBmaW5hbCBTZXQ8RGFydFR5cGU+IF9jb25zdFR5cGVMaXRlcmFscyA9IG5ldyBTZXQ8RGFydFR5cGU+KCk7CiAgZmluYWwgU2V0PERhcnRUeXBlPiBfbGl2ZVR5cGVBcmd1bWVudHMgPSBuZXcgU2V0PERhcnRUeXBlPigpOwogIGZpbmFsIFNldDxUeXBlVmFyaWFibGVUeXBlPiBfbmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpID0ge307CgogIENvZGVnZW5Xb3JsZEJ1aWxkZXJJbXBsKHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLl9zZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3ksCiAgICAgIHRoaXMuX29uZVNob3RJbnRlcmNlcHRvckRhdGEpOwoKICBFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4gX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgTmF0aXZlQmFzaWNEYXRhIGdldCBfbmF0aXZlQmFzaWNEYXRhID0+IF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhOwoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGluc3RhbnRpYXRlZENsYXNzZXMgPT4gX3Byb2Nlc3NlZENsYXNzZXMua2V5cwogICAgICAud2hlcmUoKGNscykgPT4gX3Byb2Nlc3NlZENsYXNzZXNbY2xzXS5pc0luc3RhbnRpYXRlZCk7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcHJvdmUgc2VtYW50aWMgcHJlY2lzaW9uLgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzIHsKICAgIHJldHVybiBfZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzOwogIH0KCiAgLy8vIFJlZ2lzdGVyIFt0eXBlXSBhcyAoZGlyZWN0bHkpIGluc3RhbnRpYXRlZC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGdWxseSBlbmZvcmNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZXhhY3QsIHRocm91Z2gKICAvLyBzdWJjbGFzcyBhbmQgdGhyb3VnaCBzdWJ0eXBlIGluc3RhbnRpYXRlZCB0eXBlcy9jbGFzc2VzLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgdW5rbm93biB0eXBlIGFyZ3VtZW50cyBmb3IgZ2VuZXJpYyB0eXBlcy4KICB2b2lkIHJlZ2lzdGVyVHlwZUluc3RhbnRpYXRpb24oCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NVc2VkQ2FsbGJhY2sgY2xhc3NVc2VkKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSB0eXBlLmVsZW1lbnQ7CiAgICBib29sIGlzTmF0aXZlID0gX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKGNscyk7CiAgICBfaW5zdGFudGlhdGVkVHlwZXMuYWRkKHR5cGUpOwogICAgLy8gV2UgY2FuJ3QgdXNlIHRoZSBjbG9zZWQtd29ybGQgYXNzdW1wdGlvbiB3aXRoIG5hdGl2ZSBhYnN0cmFjdAogICAgLy8gY2xhc3NlczsgYSBuYXRpdmUgYWJzdHJhY3QgY2xhc3MgbWF5IGhhdmUgbm9uLWFic3RyYWN0IHN1YmNsYXNzZXMKICAgIC8vIG5vdCBkZWNsYXJlZCB0byB0aGUgcHJvZ3JhbS4gIEluc3RhbmNlcyBvZiB0aGVzZSBjbGFzc2VzIGFyZQogICAgLy8gaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgYWJzdHJhY3QgY2xhc3MuCiAgICBpZiAoIWNscy5pc0Fic3RyYWN0IHx8IGlzTmF0aXZlKSB7CiAgICAgIF9kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXMuYWRkKGNscyk7CiAgICAgIF9wcm9jZXNzSW5zdGFudGlhdGVkQ2xhc3MoY2xzLCBjbGFzc1VzZWQpOwogICAgfQoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlcGxhY2UgdGhpcyBieSBzZXBhcmF0ZSBtb3JlIHNwZWNpZmljIG1hcHBpbmdzIHRoYXQKICAgIC8vIGluY2x1ZGUgdGhlIHR5cGUgYXJndW1lbnRzLgogICAgaWYgKF9pbXBsZW1lbnRlZENsYXNzZXMuYWRkKGNscykpIHsKICAgICAgY2xhc3NVc2VkKGNscywgX2dldENsYXNzVXNhZ2UoY2xzKS5pbXBsZW1lbnQoKSk7CiAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFN1cGVydHlwZShjbHMsIChJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkgewogICAgICAgIGlmIChfaW1wbGVtZW50ZWRDbGFzc2VzLmFkZChzdXBlcnR5cGUuZWxlbWVudCkpIHsKICAgICAgICAgIGNsYXNzVXNlZCgKICAgICAgICAgICAgICBzdXBlcnR5cGUuZWxlbWVudCwgX2dldENsYXNzVXNhZ2Uoc3VwZXJ0eXBlLmVsZW1lbnQpLmltcGxlbWVudCgpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KCiAgYm9vbCBfaGFzTWF0Y2hpbmdTZWxlY3RvcihNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycywKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgSkNsb3NlZFdvcmxkIHdvcmxkKSB7CiAgICBpZiAoc2VsZWN0b3JzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzLmtleXMpIHsKICAgICAgaWYgKHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKG1lbWJlcikpIHsKICAgICAgICBTZWxlY3RvckNvbnN0cmFpbnRzIG1hc2tzID0gc2VsZWN0b3JzW3NlbGVjdG9yXTsKICAgICAgICBpZiAobWFza3MuY2FuSGl0KG1lbWJlciwgc2VsZWN0b3IubWVtYmVyTmFtZSwgd29ybGQpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEl0ZXJhYmxlPENhbGxTdHJ1Y3R1cmU+IF9nZXRNYXRjaGluZ0NhbGxTdHJ1Y3R1cmVzKAogICAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKHNlbGVjdG9ycyA9PSBudWxsKSByZXR1cm4gY29uc3QgPENhbGxTdHJ1Y3R1cmU+W107CiAgICBTZXQ8Q2FsbFN0cnVjdHVyZT4gY2FsbFN0cnVjdHVyZXM7CiAgICBmb3IgKFNlbGVjdG9yIHNlbGVjdG9yIGluIHNlbGVjdG9ycy5rZXlzKSB7CiAgICAgIGlmIChzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpKSB7CiAgICAgICAgU2VsZWN0b3JDb25zdHJhaW50cyBtYXNrcyA9IHNlbGVjdG9yc1tzZWxlY3Rvcl07CiAgICAgICAgaWYgKG1hc2tzLmNhbkhpdChtZW1iZXIsIHNlbGVjdG9yLm1lbWJlck5hbWUsIF9jbG9zZWRXb3JsZCkpIHsKICAgICAgICAgIGNhbGxTdHJ1Y3R1cmVzID8/PSBuZXcgU2V0PENhbGxTdHJ1Y3R1cmU+KCk7CiAgICAgICAgICBjYWxsU3RydWN0dXJlcy5hZGQoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2FsbFN0cnVjdHVyZXMgPz8gY29uc3QgPENhbGxTdHJ1Y3R1cmU+W107CiAgfQoKICBJdGVyYWJsZTxDYWxsU3RydWN0dXJlPiBfZ2V0SW52b2NhdGlvbkNhbGxTdHJ1Y3R1cmVzKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBfZ2V0TWF0Y2hpbmdDYWxsU3RydWN0dXJlcyhfaW52b2tlZE5hbWVzW21lbWJlci5uYW1lXSwgbWVtYmVyKTsKICB9CgogIGJvb2wgX2hhc0ludm9rZWRHZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9oYXNNYXRjaGluZ1NlbGVjdG9yKAogICAgICAgIF9pbnZva2VkR2V0dGVyc1ttZW1iZXIubmFtZV0sIG1lbWJlciwgX2Nsb3NlZFdvcmxkKTsKICB9CgogIGJvb2wgX2hhc0ludm9rZWRTZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9oYXNNYXRjaGluZ1NlbGVjdG9yKAogICAgICAgIF9pbnZva2VkU2V0dGVyc1ttZW1iZXIubmFtZV0sIG1lbWJlciwgX2Nsb3NlZFdvcmxkKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICBEeW5hbWljVXNlIGR5bmFtaWNVc2UsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkKSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGR5bmFtaWNVc2Uuc2VsZWN0b3I7CiAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IHNlbGVjdG9yLm5hbWU7CgogICAgdm9pZCBfcHJvY2VzcygKICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBtZW1iZXJNYXAsCiAgICAgICAgRW51bVNldDxNZW1iZXJVc2U+IGFjdGlvbihNZW1iZXJVc2FnZSB1c2FnZSksCiAgICAgICAgYm9vbCBzaG91bGRCZVJlbW92ZWQoTWVtYmVyVXNhZ2UgdXNhZ2UpKSB7CiAgICAgIF9wcm9jZXNzU2V0KG1lbWJlck1hcCwgbWV0aG9kTmFtZSwgKE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKHVzYWdlLmVudGl0eSkgJiYKICAgICAgICAgICAgX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneS5hcHBsaWVkVW5uYW1lZCgKICAgICAgICAgICAgICAgIGR5bmFtaWNVc2UsIHVzYWdlLmVudGl0eSwgX2Nsb3NlZFdvcmxkKSkgewogICAgICAgICAgbWVtYmVyVXNlZCh1c2FnZS5lbnRpdHksIGFjdGlvbih1c2FnZSkpOwogICAgICAgICAgcmV0dXJuIHNob3VsZEJlUmVtb3ZlZCh1c2FnZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSk7CiAgICB9CgogICAgc3dpdGNoIChkeW5hbWljVXNlLmtpbmQpIHsKICAgICAgY2FzZSBEeW5hbWljVXNlS2luZC5JTlZPS0U6CiAgICAgICAgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgICAgICAgZHluYW1pY1VzZS5zZWxlY3RvciwgZHluYW1pY1VzZS50eXBlQXJndW1lbnRzKTsKICAgICAgICBpZiAoX3JlZ2lzdGVyTmV3U2VsZWN0b3IoZHluYW1pY1VzZSwgX2ludm9rZWROYW1lcykpIHsKICAgICAgICAgIF9wcm9jZXNzKAogICAgICAgICAgICAgIF9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUsCiAgICAgICAgICAgICAgKG0pID0+IG0uaW52b2tlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MsIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUpLAogICAgICAgICAgICAgIC8vIElmIG5vdCBhbGwgb3B0aW9uYWwgcGFyYW1ldGVycyBoYXZlIGJlZW4gcGFzc2VkIGluIGludm9jYXRpb25zCiAgICAgICAgICAgICAgLy8gd2UgbXVzdCBrZWVwIHRoZSBtZW1iZXIgaW4gW19pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVdLgogICAgICAgICAgICAgICh1KSA9PiAhdS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIER5bmFtaWNVc2VLaW5kLkdFVDoKICAgICAgICBpZiAoX3JlZ2lzdGVyTmV3U2VsZWN0b3IoZHluYW1pY1VzZSwgX2ludm9rZWRHZXR0ZXJzKSkgewogICAgICAgICAgX3Byb2Nlc3MoCiAgICAgICAgICAgICAgX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lLAogICAgICAgICAgICAgIChtKSA9PiBtLnJlYWQoQWNjZXNzZXMuZHluYW1pY0FjY2VzcyksCiAgICAgICAgICAgICAgKHUpID0+ICF1Lmhhc1BlbmRpbmdEeW5hbWljUmVhZCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIER5bmFtaWNVc2VLaW5kLlNFVDoKICAgICAgICBpZiAoX3JlZ2lzdGVyTmV3U2VsZWN0b3IoZHluYW1pY1VzZSwgX2ludm9rZWRTZXR0ZXJzKSkgewogICAgICAgICAgX3Byb2Nlc3MoCiAgICAgICAgICAgICAgX3dyaXRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lLAogICAgICAgICAgICAgIChtKSA9PiBtLndyaXRlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MpLAogICAgICAgICAgICAgICh1KSA9PiAhdS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBib29sIF9yZWdpc3Rlck5ld1NlbGVjdG9yKER5bmFtaWNVc2UgZHluYW1pY1VzZSwKICAgICAgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gc2VsZWN0b3JNYXApIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZHluYW1pY1VzZS5zZWxlY3RvcjsKICAgIFN0cmluZyBuYW1lID0gc2VsZWN0b3IubmFtZTsKICAgIE9iamVjdCBjb25zdHJhaW50ID0gZHluYW1pY1VzZS5yZWNlaXZlckNvbnN0cmFpbnQ7CiAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycyA9CiAgICAgICAgc2VsZWN0b3JNYXBbbmFtZV0gPz89IG5ldyBNYXBsZXQ8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+KCk7CiAgICBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMgY29uc3RyYWludHMgPSBzZWxlY3RvcnNbc2VsZWN0b3JdOwogICAgaWYgKGNvbnN0cmFpbnRzID09IG51bGwpIHsKICAgICAgc2VsZWN0b3JzW3NlbGVjdG9yXSA9IF9zZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kKICAgICAgICAgIC5jcmVhdGVTZWxlY3RvckNvbnN0cmFpbnRzKHNlbGVjdG9yLCBjb25zdHJhaW50KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gY29uc3RyYWludHMuYWRkUmVjZWl2ZXJDb25zdHJhaW50KGNvbnN0cmFpbnQpOwogIH0KCiAgdm9pZCByZWdpc3RlcklzQ2hlY2soY292YXJpYW50IERhcnRUeXBlIHR5cGUpIHsKICAgIF9pc0NoZWNrcy5hZGQodHlwZS51bmFsaWFzZWQpOwogIH0KCiAgdm9pZCByZWdpc3Rlck5hbWVkVHlwZVZhcmlhYmxlTmV3UnRpKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgewogICAgX25hbWVkVHlwZVZhcmlhYmxlc05ld1J0aS5hZGQodHlwZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkKSB7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCA9IG5ldyBFbnVtU2V0PE1lbWJlclVzZT4oKTsKICAgIE1lbWJlclVzYWdlIHVzYWdlID0gX2dldE1lbWJlclVzYWdlKGVsZW1lbnQsIHVzZVNldCk7CiAgICBzd2l0Y2ggKHN0YXRpY1VzZS5raW5kKSB7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfVEVBUl9PRkY6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfR0VUOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfU0VUOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0FMTF9NRVRIT0Q6CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhpcy4gQ3VycmVudGx5IFtGSUVMRF9HRVRdIGFuZAogICAgICAgIC8vIFtGSUVMRF9TRVRdIGNvbnRhaW5zIFtCb3hGaWVsZEVsZW1lbnRdcyB3aGljaCB3ZSBjYW5ub3QgZW5xdWV1ZS4KICAgICAgICAvLyBBbHNvIFtDTE9TVVJFXSBjb250YWlucyBbTG9jYWxGdW5jdGlvbkVsZW1lbnRdIHdoaWNoIHdlIGNhbm5vdAogICAgICAgIC8vIGVucXVldWUuCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9JTlZPS0U6CiAgICAgICAgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKHN0YXRpY1VzZSk7CiAgICAgICAgdXNlU2V0LmFkZEFsbCgKICAgICAgICAgICAgdXNhZ2UuaW52b2tlKEFjY2Vzc2VzLnN1cGVyQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRToKICAgICAgICByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oc3RhdGljVXNlKTsKICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICB1c2FnZS5pbnZva2UoQWNjZXNzZXMuc3RhdGljQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfRklFTERfU0VUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuc3VwZXJBY2Nlc3MpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX1NFVFRFUl9TRVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS53cml0ZShBY2Nlc3Nlcy5zdXBlckFjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX1NFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLndyaXRlKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfVEVBUl9PRkY6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN1cGVyQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9HRVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN1cGVyQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfR0VUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5zdGF0aWNBY2Nlc3MpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkZJRUxEX0lOSVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5pbml0KCkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRklFTERfQ09OU1RBTlRfSU5JVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmNvbnN0YW50SW5pdChzdGF0aWNVc2UuY29uc3RhbnQpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICAvLyBXZSBkb24ndCB0cmFjayBwYXJhbWV0ZXJzIGluIHRoZSBjb2RlZ2VuIHdvcmxkIGJ1aWxkZXIsIHNvIHdlCiAgICAgICAgLy8gcGFzcyBgbnVsbGAgaW5zdGVhZCBvZiB0aGUgY29uY3JldGUgY2FsbCBzdHJ1Y3R1cmUuCiAgICAgICAgdXNlU2V0LmFkZEFsbCgKICAgICAgICAgICAgdXNhZ2UuaW52b2tlKEFjY2Vzc2VzLnN0YXRpY0FjY2Vzcywgc3RhdGljVXNlLmNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkRJUkVDVF9JTlZPS0U6CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgICAgIC8vIFdlIGRvbid0IHRyYWNrIHBhcmFtZXRlcnMgaW4gdGhlIGNvZGVnZW4gd29ybGQgYnVpbGRlciwgc28gd2UKICAgICAgICAvLyBwYXNzIGBudWxsYCBpbnN0ZWFkIG9mIHRoZSBjb25jcmV0ZSBjYWxsIHN0cnVjdHVyZS4KICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICB1c2FnZS5pbnZva2UoQWNjZXNzZXMuc3RhdGljQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGlmIChzdGF0aWNVc2UudHlwZUFyZ3VtZW50cz8uaXNOb3RFbXB0eSA/PyBmYWxzZSkgewogICAgICAgICAgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgICAgICAgICBuZXcgU2VsZWN0b3IuY2FsbChtZW1iZXIubWVtYmVyTmFtZSwgc3RhdGljVXNlLmNhbGxTdHJ1Y3R1cmUpLAogICAgICAgICAgICAgIHN0YXRpY1VzZS50eXBlQXJndW1lbnRzKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTkxJTklORzoKICAgICAgICByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oc3RhdGljVXNlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkU6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DTE9TVVJFX0NBTEw6CiAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlN0YXRpYyB1c2UgJHtzdGF0aWNVc2Uua2luZH0gaXMgbm90IHN1cHBvcnRlZCBkdXJpbmcgY29kZWdlbi4iKTsKICAgIH0KICAgIGlmICh1c2VTZXQuaXNOb3RFbXB0eSkgewogICAgICBtZW1iZXJVc2VkKHVzYWdlLmVudGl0eSwgdXNlU2V0KTsKICAgIH0KICB9CgogIHZvaWQgcHJvY2Vzc0NsYXNzTWVtYmVycyhDbGFzc0VudGl0eSBjbHMsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkLAogICAgICB7Ym9vbCBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGZhbHNlfSkgewogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3NNZW1iZXIoY2xzLAogICAgICAgIChDbGFzc0VudGl0eSBjbHMsIE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzc01lbWJlcihjbHMsIG1lbWJlciwgbWVtYmVyVXNlZCwKICAgICAgICAgIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KTsKICAgIH0pOwogIH0KCiAgdm9pZCBfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzTWVtYmVyKAogICAgICBDbGFzc0VudGl0eSBjbHMsIE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkLAogICAgICB7Ym9vbCBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGZhbHNlfSkgewogICAgaWYgKCFtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuOwogICAgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCA9IG5ldyBFbnVtU2V0PE1lbWJlclVzZT4oKTsKICAgIE1lbWJlclVzYWdlIHVzYWdlID0gX2dldE1lbWJlclVzYWdlKG1lbWJlciwgdXNlU2V0KTsKICAgIGlmICh1c2VTZXQuaXNOb3RFbXB0eSkgewogICAgICBpZiAoY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgdGhyb3cgbmV3IFNwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmUobWVtYmVyLAogICAgICAgICAgICAnVW5lbnF1ZXVlZCB1c2FnZSBvZiAkbWVtYmVyOiBcbmJlZm9yZTogPG5vbmU+XG5hZnRlciA6ICR1c2FnZScpOwogICAgICB9IGVsc2UgewogICAgICAgIG1lbWJlclVzZWQobWVtYmVyLCB1c2VTZXQpOwogICAgICB9CiAgICB9CiAgfQoKICBNZW1iZXJVc2FnZSBfZ2V0TWVtYmVyVXNhZ2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCwKICAgICAge2Jvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBmYWxzZX0pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENoYW5nZSBbVHlwZU1hc2tdIHRvIG5vdCBhcHBseSB0byBhIHN1cGVyY2xhc3MKICAgIC8vIG1lbWJlciB1bmxlc3MgdGhlIGNsYXNzIGhhcyBiZWVuIGluc3RhbnRpYXRlZC4gU2ltaWxhciB0bwogICAgLy8gW1N0cm9uZ01vZGVDb25zdHJhaW50XS4KICAgIE1lbWJlclVzYWdlIHVzYWdlID0gX21lbWJlclVzYWdlW21lbWJlcl07CiAgICBpZiAodXNhZ2UgPT0gbnVsbCkgewogICAgICBNZW1iZXJBY2Nlc3MgcG90ZW50aWFsQWNjZXNzID0gX2Nsb3NlZFdvcmxkLmdldE1lbWJlckFjY2VzcyhtZW1iZXIpOwogICAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBTdHJpbmcgbWVtYmVyTmFtZSA9IG1lbWJlci5uYW1lOwogICAgICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgICAgICBib29sIGlzTmF0aXZlID0gX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKGNscyk7CiAgICAgICAgdXNhZ2UgPSBuZXcgTWVtYmVyVXNhZ2UobWVtYmVyLCBwb3RlbnRpYWxBY2Nlc3M6IHBvdGVudGlhbEFjY2Vzcyk7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmICFpc05hdGl2ZSkgewogICAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5pbml0KCkpOwogICAgICAgIH0KICAgICAgICBpZiAobWVtYmVyIGlzIEpTaWduYXR1cmVNZXRob2QpIHsKICAgICAgICAgIC8vIFdlIG1hcmsgc2lnbmF0dXJlIG1ldGhvZHMgYXMgImFsd2F5cyB1c2VkIiB0byBwcmV2ZW50IHRoZW0gZnJvbQogICAgICAgICAgLy8gYmVpbmcgb3B0aW1pemVkIGF3YXkuCiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYWtlIHRoaXMgYSBwYXJ0IG9mIHRoZSByZWd1bGFyIGVucXVldWVpbmcuCiAgICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICAgIHVzYWdlLmludm9rZShBY2Nlc3Nlcy5keW5hbWljQWNjZXNzLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpKTsKICAgICAgICB9CgogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1JlYWQgJiYgX2hhc0ludm9rZWRHZXR0ZXIobWVtYmVyKSkgewogICAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MpKTsKICAgICAgICB9CiAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljV3JpdGUgJiYgX2hhc0ludm9rZWRTZXR0ZXIobWVtYmVyKSkgewogICAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS53cml0ZShBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSk7CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gY2FsbFN0cnVjdHVyZXMgPQogICAgICAgICAgICAgIF9nZXRJbnZvY2F0aW9uQ2FsbFN0cnVjdHVyZXMobWVtYmVyKTsKICAgICAgICAgIGZvciAoQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlIGluIGNhbGxTdHJ1Y3R1cmVzKSB7CiAgICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuaW52b2tlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MsIGNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSkgewogICAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljSW52b2tlKSB7CiAgICAgICAgICAgIF9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChtZW1iZXJOYW1lLCAoKSA9PiB7fSkKICAgICAgICAgICAgICAgIC5hZGQodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljUmVhZCkgewogICAgICAgICAgICBfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChtZW1iZXJOYW1lLCAoKSA9PiB7fSkKICAgICAgICAgICAgICAgIC5hZGQodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljV3JpdGUpIHsKICAgICAgICAgICAgX3dyaXRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQobWVtYmVyTmFtZSwgKCkgPT4ge30pCiAgICAgICAgICAgICAgICAuYWRkKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdXNhZ2UgPSBuZXcgTWVtYmVyVXNhZ2UobWVtYmVyLCBwb3RlbnRpYWxBY2Nlc3M6IHBvdGVudGlhbEFjY2Vzcyk7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmluaXQoKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgX21lbWJlclVzYWdlW21lbWJlcl0gPSB1c2FnZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSkgewogICAgICAgIHVzYWdlID0gdXNhZ2UuY2xvbmUoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHVzYWdlOwogIH0KCiAgdm9pZCBfcHJvY2Vzc1NldChNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBtYXAsIFN0cmluZyBtZW1iZXJOYW1lLAogICAgICBib29sIGYoTWVtYmVyVXNhZ2UgZSkpIHsKICAgIFNldDxNZW1iZXJVc2FnZT4gbWVtYmVycyA9IG1hcFttZW1iZXJOYW1lXTsKICAgIGlmIChtZW1iZXJzID09IG51bGwpIHJldHVybjsKICAgIC8vIFtmXSBtaWdodCBhZGQgZWxlbWVudHMgdG8gWzogbWFwW21lbWJlck5hbWVdIDpdIGR1cmluZyB0aGUgbG9vcCBiZWxvdwogICAgLy8gc28gd2UgY3JlYXRlIGEgbmV3IGxpc3QgZm9yIFs6IG1hcFttZW1iZXJOYW1lXSA6XSBhbmQgcHJlcGVuZCB0aGUKICAgIC8vIFtyZW1haW5pbmddIG1lbWJlcnMgYWZ0ZXIgdGhlIGxvb3AuCiAgICBtYXBbbWVtYmVyTmFtZV0gPSBuZXcgU2V0PE1lbWJlclVzYWdlPigpOwogICAgU2V0PE1lbWJlclVzYWdlPiByZW1haW5pbmcgPSBuZXcgU2V0PE1lbWJlclVzYWdlPigpOwogICAgZm9yIChNZW1iZXJVc2FnZSBtZW1iZXIgaW4gbWVtYmVycykgewogICAgICBpZiAoIWYobWVtYmVyKSkgcmVtYWluaW5nLmFkZChtZW1iZXIpOwogICAgfQogICAgbWFwW21lbWJlck5hbWVdLmFkZEFsbChyZW1haW5pbmcpOwogIH0KCiAgLy8vIFJldHVybiB0aGUgY2Fub25pY2FsIFtDbGFzc1VzYWdlXSBmb3IgW2Nsc10uCiAgQ2xhc3NVc2FnZSBfZ2V0Q2xhc3NVc2FnZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfcHJvY2Vzc2VkQ2xhc3Nlcy5wdXRJZkFic2VudChjbHMsICgpID0+IG5ldyBDbGFzc1VzYWdlKGNscykpOwogIH0KCiAgdm9pZCBfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzKENsYXNzRW50aXR5IGNscywgQ2xhc3NVc2VkQ2FsbGJhY2sgY2xhc3NVc2VkKSB7CiAgICAvLyBSZWdpc3RlcnMgW3N1cGVyY2xhc3NdIGFzIGluc3RhbnRpYXRlZC4gUmV0dXJucyBgdHJ1ZWAgaWYgaXQgd2Fzbid0CiAgICAvLyBhbHJlYWR5IGluc3RhbnRpYXRlZCBhbmQgd2UgdGhlcmVmb3JlIGhhdmUgdG8gcHJvY2VzcyBpdHMgc3VwZXJjbGFzcyBhcwogICAgLy8gd2VsbC4KICAgIGJvb2wgcHJvY2Vzc0NsYXNzKENsYXNzRW50aXR5IHN1cGVyY2xhc3MpIHsKICAgICAgQ2xhc3NVc2FnZSB1c2FnZSA9IF9nZXRDbGFzc1VzYWdlKHN1cGVyY2xhc3MpOwogICAgICBpZiAoIXVzYWdlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgY2xhc3NVc2VkKHVzYWdlLmNscywgdXNhZ2UuaW5zdGFudGlhdGUoKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHdoaWxlIChjbHMgIT0gbnVsbCAmJiBwcm9jZXNzQ2xhc3MoY2xzKSkgewogICAgICBjbHMgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgIH0KICB9CgogIC8vLyBTZXQgb2YgYWxsIHJlZ2lzdGVyZWQgY29tcGlsZWQgY29uc3RhbnRzLgogIGZpbmFsIFNldDxDb25zdGFudFZhbHVlPiBfY29tcGlsZWRDb25zdGFudHMgPSBuZXcgU2V0PENvbnN0YW50VmFsdWU+KCk7CgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldCBjb21waWxlZENvbnN0YW50c0ZvclRlc3RpbmcgPT4gX2NvbXBpbGVkQ29uc3RhbnRzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZENvbXBpbGVUaW1lQ29uc3RhbnRGb3JFbWlzc2lvbihDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBfY29tcGlsZWRDb25zdGFudHMuYWRkKGNvbnN0YW50KTsKICB9CgogIC8vLyBSZWdpc3RlciB0aGUgY29uc3RhbnQgW3VzZV0gd2l0aCB0aGlzIHdvcmxkIGJ1aWxkZXIuIFJldHVybnMgYHRydWVgIGlmCiAgLy8vIHRoZSBjb25zdGFudCB1c2Ugd2FzIG5ldyB0byB0aGUgd29ybGQuCiAgYm9vbCByZWdpc3RlckNvbnN0YW50VXNlKENvbnN0YW50VXNlIHVzZSkgewogICAgYWRkQ29tcGlsZVRpbWVDb25zdGFudEZvckVtaXNzaW9uKHVzZS52YWx1ZSk7CiAgICByZXR1cm4gX2NvbnN0YW50VmFsdWVzLmFkZCh1c2UudmFsdWUpOwogIH0KCiAgdm9pZCByZWdpc3RlckNvbnN0VHlwZUxpdGVyYWwoRGFydFR5cGUgdHlwZSkgewogICAgX2NvbnN0VHlwZUxpdGVyYWxzLmFkZCh0eXBlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlQXJndW1lbnQoRGFydFR5cGUgdHlwZSkgewogICAgX2xpdmVUeXBlQXJndW1lbnRzLmFkZCh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIENvZGVnZW5Xb3JsZCBjbG9zZSgpIHsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBsaXZlTWVtYmVyVXNhZ2UgPSB7fTsKICAgIF9tZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICBpZiAodXNhZ2UuaGFzVXNlKSB7CiAgICAgICAgbGl2ZU1lbWJlclVzYWdlW21lbWJlcl0gPSB1c2FnZTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gbmV3IENvZGVnZW5Xb3JsZEltcGwoX2Nsb3NlZFdvcmxkLCBsaXZlTWVtYmVyVXNhZ2UsCiAgICAgICAgY29uc3RUeXBlTGl0ZXJhbHM6IF9jb25zdFR5cGVMaXRlcmFscywKICAgICAgICBkaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXM6IGRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlcywKICAgICAgICB0eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHM6IHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFscywKICAgICAgICBpbnN0YW50aWF0ZWRDbGFzc2VzOiBpbnN0YW50aWF0ZWRDbGFzc2VzLAogICAgICAgIGlzQ2hlY2tzOiBfaXNDaGVja3MsCiAgICAgICAgbmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpOiBfbmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpLAogICAgICAgIGluc3RhbnRpYXRlZFR5cGVzOiBfaW5zdGFudGlhdGVkVHlwZXMsCiAgICAgICAgbGl2ZVR5cGVBcmd1bWVudHM6IF9saXZlVHlwZUFyZ3VtZW50cywKICAgICAgICBjb21waWxlZENvbnN0YW50czogX2NvbXBpbGVkQ29uc3RhbnRzLAogICAgICAgIGludm9rZWROYW1lczogX2ludm9rZWROYW1lcywKICAgICAgICBpbnZva2VkR2V0dGVyczogX2ludm9rZWRHZXR0ZXJzLAogICAgICAgIGludm9rZWRTZXR0ZXJzOiBfaW52b2tlZFNldHRlcnMsCiAgICAgICAgc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzOiBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMsCiAgICAgICAgZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llczogZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgICBvbmVTaG90SW50ZXJjZXB0b3JEYXRhOiBfb25lU2hvdEludGVyY2VwdG9yRGF0YSk7CiAgfQp9CgpjbGFzcyBDb2RlZ2VuV29ybGRJbXBsIGltcGxlbWVudHMgQ29kZWdlbldvcmxkIHsKICBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwoKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gX2xpdmVNZW1iZXJVc2FnZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8RGFydFR5cGU+IGNvbnN0VHlwZUxpdGVyYWxzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxUeXBlVmFyaWFibGVUeXBlPiB0eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBpbnN0YW50aWF0ZWRDbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxEYXJ0VHlwZT4gaXNDaGVja3M7CgogIEBvdmVycmlkZQogIGZpbmFsIFNldDxUeXBlVmFyaWFibGVUeXBlPiBuYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGk7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGluc3RhbnRpYXRlZFR5cGVzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxEYXJ0VHlwZT4gbGl2ZVR5cGVBcmd1bWVudHM7CgogIGZpbmFsIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IF9jb21waWxlZENvbnN0YW50czsKCiAgZmluYWwgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gX2ludm9rZWROYW1lczsKCiAgZmluYWwgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gX2ludm9rZWRHZXR0ZXJzOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBfaW52b2tlZFNldHRlcnM7CgogIGZpbmFsIE1hcDxFbnRpdHksIFNldDxEYXJ0VHlwZT4+IF9zdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXM7CgogIGZpbmFsIE1hcDxTZWxlY3RvciwgU2V0PERhcnRUeXBlPj4gX2R5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIE9uZVNob3RJbnRlcmNlcHRvckRhdGEgb25lU2hvdEludGVyY2VwdG9yRGF0YTsKCiAgQ29kZWdlbldvcmxkSW1wbCh0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5fbGl2ZU1lbWJlclVzYWdlLAogICAgICB7dGhpcy5jb25zdFR5cGVMaXRlcmFscywKICAgICAgdGhpcy5kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXMsCiAgICAgIHRoaXMudHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzLAogICAgICB0aGlzLmluc3RhbnRpYXRlZENsYXNzZXMsCiAgICAgIHRoaXMuaXNDaGVja3MsCiAgICAgIHRoaXMubmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpLAogICAgICB0aGlzLmluc3RhbnRpYXRlZFR5cGVzLAogICAgICB0aGlzLmxpdmVUeXBlQXJndW1lbnRzLAogICAgICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBjb21waWxlZENvbnN0YW50cywKICAgICAgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gaW52b2tlZE5hbWVzLAogICAgICBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBpbnZva2VkR2V0dGVycywKICAgICAgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gaW52b2tlZFNldHRlcnMsCiAgICAgIE1hcDxFbnRpdHksIFNldDxEYXJ0VHlwZT4+IHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgTWFwPFNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+PiBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLAogICAgICB0aGlzLm9uZVNob3RJbnRlcmNlcHRvckRhdGF9KQogICAgICA6IF9jb21waWxlZENvbnN0YW50cyA9IGNvbXBpbGVkQ29uc3RhbnRzLAogICAgICAgIF9pbnZva2VkTmFtZXMgPSBpbnZva2VkTmFtZXMsCiAgICAgICAgX2ludm9rZWRHZXR0ZXJzID0gaW52b2tlZEdldHRlcnMsCiAgICAgICAgX2ludm9rZWRTZXR0ZXJzID0gaW52b2tlZFNldHRlcnMsCiAgICAgICAgX3N0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcyA9IHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgICBfZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcyA9IGR5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXM7CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFN0YXRpY0ZpZWxkKHZvaWQgRnVuY3Rpb24oRmllbGRFbnRpdHkpIGYpIHsKICAgIGJvb2wgZmFpbHVyZSA9IGZhbHNlOwogICAgX2xpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICBpZiAobWVtYmVyIGlzIEZpZWxkRW50aXR5ICYmIChtZW1iZXIuaXNTdGF0aWMgfHwgbWVtYmVyLmlzVG9wTGV2ZWwpKSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9CiAgICB9KTsKICAgIGlmIChmYWlsdXJlKSB0aHJvdyAnZmFpbHVyZSc7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hHZW5lcmljTWV0aG9kKEZ1bmN0aW9uIGYpIHsKICAgIF9saXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgaWYgKG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSAmJgogICAgICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgICAgIC5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMobWVtYmVyKQogICAgICAgICAgICAgIC5pc05vdEVtcHR5KSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEdlbmVyaWNJbnN0YW5jZU1ldGhvZChGdW5jdGlvbiBmKSB7CiAgICBfbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgIGlmIChtZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkgJiYKICAgICAgICAgIG1lbWJlci5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgICAgLmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZW1iZXIpCiAgICAgICAgICAgICAgLmlzTm90RW1wdHkpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoR2VuZXJpY0Nsb3N1cmVDYWxsTWV0aG9kKEZ1bmN0aW9uIGYpIHsKICAgIF9saXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgaWYgKG1lbWJlci5uYW1lID09IElkZW50aWZpZXJzLmNhbGwgJiYKICAgICAgICAgIG1lbWJlci5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICBtZW1iZXIuZW5jbG9zaW5nQ2xhc3MuaXNDbG9zdXJlICYmCiAgICAgICAgICBtZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkgJiYKICAgICAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgICAgICAuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKG1lbWJlcikKICAgICAgICAgICAgICAuaXNOb3RFbXB0eSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBMaXN0PEZ1bmN0aW9uRW50aXR5PiBfdXNlck5vU3VjaE1ldGhvZHNDYWNoZTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCB1c2VyTm9TdWNoTWV0aG9kcyB7CiAgICBpZiAoX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGUgPT0gbnVsbCkgewogICAgICBfdXNlck5vU3VjaE1ldGhvZHNDYWNoZSA9IDxGdW5jdGlvbkVudGl0eT5bXTsKCiAgICAgIF9saXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UpIHsKICAgICAgICBpZiAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5KSB7CiAgICAgICAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICAgICAgICBtZW1iZXIubmFtZSA9PSBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfICYmCiAgICAgICAgICAgICAgIV9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cwogICAgICAgICAgICAgICAgICAuaXNEZWZhdWx0Tm9TdWNoTWV0aG9kSW1wbGVtZW50YXRpb24obWVtYmVyKSkgewogICAgICAgICAgICBfdXNlck5vU3VjaE1ldGhvZHNDYWNoZS5hZGQobWVtYmVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiBfdXNlck5vU3VjaE1ldGhvZHNDYWNoZTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPExvY2FsPiBnZXQgZ2VuZXJpY0xvY2FsRnVuY3Rpb25zID0+IGNvbnN0IFtdOwoKICBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9jbG9zdXJpemVkTWVtYmVyc0NhY2hlOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IGNsb3N1cml6ZWRNZW1iZXJzIHsKICAgIGlmIChfY2xvc3VyaXplZE1lbWJlcnNDYWNoZSA9PSBudWxsKSB7CiAgICAgIF9jbG9zdXJpemVkTWVtYmVyc0NhY2hlID0ge307CiAgICAgIF9saXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgICBpZiAoKG1lbWJlci5pc0Z1bmN0aW9uIHx8IG1lbWJlciBpcyBKR2VuZXJhdG9yQm9keSkgJiYKICAgICAgICAgICAgbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICAgICAgdXNhZ2UuaGFzUmVhZCkgewogICAgICAgICAgX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGUuYWRkKG1lbWJlcik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZTsKICB9CgogIFNldDxGdW5jdGlvbkVudGl0eT4gX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGU7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgY2xvc3VyaXplZFN0YXRpY3MgewogICAgaWYgKF9jbG9zdXJpemVkU3RhdGljc0NhY2hlID09IG51bGwpIHsKICAgICAgX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGUgPSB7fTsKICAgICAgX2xpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbiAmJgogICAgICAgICAgICAobWVtYmVyLmlzU3RhdGljIHx8IG1lbWJlci5pc1RvcExldmVsKSAmJgogICAgICAgICAgICB1c2FnZS5oYXNSZWFkKSB7CiAgICAgICAgICBfY2xvc3VyaXplZFN0YXRpY3NDYWNoZS5hZGQobWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9jbG9zdXJpemVkU3RhdGljc0NhY2hlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoU3RhdGljVHlwZUFyZ3VtZW50KAogICAgICB2b2lkIGYoRW50aXR5IGZ1bmN0aW9uLCBTZXQ8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpKSB7CiAgICBfc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hEeW5hbWljVHlwZUFyZ3VtZW50KAogICAgICB2b2lkIGYoU2VsZWN0b3Igc2VsZWN0b3IsIFNldDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykpIHsKICAgIF9keW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hJbnZva2VkTmFtZSgKICAgICAgZihTdHJpbmcgbmFtZSwgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMpKSB7CiAgICBfaW52b2tlZE5hbWVzLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hJbnZva2VkR2V0dGVyKAogICAgICBmKFN0cmluZyBuYW1lLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycykpIHsKICAgIF9pbnZva2VkR2V0dGVycy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoSW52b2tlZFNldHRlcigKICAgICAgZihTdHJpbmcgbmFtZSwgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMpKSB7CiAgICBfaW52b2tlZFNldHRlcnMuZm9yRWFjaChmKTsKICB9CgogIGJvb2wgX2hhc01hdGNoaW5nU2VsZWN0b3IoTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMsCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIEpDbG9zZWRXb3JsZCB3b3JsZCkgewogICAgaWYgKHNlbGVjdG9ycyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKFNlbGVjdG9yIHNlbGVjdG9yIGluIHNlbGVjdG9ycy5rZXlzKSB7CiAgICAgIGlmIChzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpKSB7CiAgICAgICAgU2VsZWN0b3JDb25zdHJhaW50cyBtYXNrcyA9IHNlbGVjdG9yc1tzZWxlY3Rvcl07CiAgICAgICAgaWYgKG1hc2tzLmNhbkhpdChtZW1iZXIsIHNlbGVjdG9yLm1lbWJlck5hbWUsIHdvcmxkKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0ludm9rZWRHZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UgPSBfbGl2ZU1lbWJlclVzYWdlW21lbWJlcl07CiAgICBpZiAobWVtYmVyVXNhZ2UgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG1lbWJlclVzYWdlLnJlYWRzLmNvbnRhaW5zKEFjY2Vzcy5keW5hbWljQWNjZXNzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgbWV0aG9kc05lZWRzU3VwZXJHZXR0ZXIoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIE1lbWJlclVzYWdlIG1lbWJlclVzYWdlID0gX2xpdmVNZW1iZXJVc2FnZVtmdW5jdGlvbl07CiAgICBpZiAobWVtYmVyVXNhZ2UgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG1lbWJlclVzYWdlLnJlYWRzLmNvbnRhaW5zKEFjY2Vzcy5zdXBlckFjY2Vzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0ludm9rZWRTZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UgPSBfbGl2ZU1lbWJlclVzYWdlW21lbWJlcl07CiAgICBpZiAobWVtYmVyVXNhZ2UgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG1lbWJlclVzYWdlLndyaXRlcy5jb250YWlucyhBY2Nlc3MuZHluYW1pY0FjY2Vzcyk7CiAgfQoKICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IF9hc1VubW9kaWZpYWJsZSgKICAgICAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBtYXApIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IFVubW9kaWZpYWJsZU1hcFZpZXcobWFwKTsKICB9CgogIEBvdmVycmlkZQogIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gaW52b2NhdGlvbnNCeU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBfYXNVbm1vZGlmaWFibGUoX2ludm9rZWROYW1lc1tuYW1lXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxTZWxlY3Rvcj4gZ2V0dGVySW52b2NhdGlvbnNCeU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBfaW52b2tlZEdldHRlcnNbbmFtZV0/LmtleXM7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxTZWxlY3Rvcj4gc2V0dGVySW52b2NhdGlvbnNCeU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBfaW52b2tlZFNldHRlcnNbbmFtZV0/LmtleXM7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRDb25zdGFudHNGb3JFbWlzc2lvbigKICAgICAgW0NvbXBhcmF0b3I8Q29uc3RhbnRWYWx1ZT4gcHJlU29ydENvbXBhcmVdKSB7CiAgICAvLyBXZSBtdXN0IGVtaXQgZGVwZW5kZW5jaWVzIGJlZm9yZSB0aGVpciB1c2VzLgogICAgU2V0PENvbnN0YW50VmFsdWU+IHNlZW5Db25zdGFudHMgPSBuZXcgU2V0PENvbnN0YW50VmFsdWU+KCk7CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IHJlc3VsdCA9IG5ldyBMaXN0PENvbnN0YW50VmFsdWU+KCk7CgogICAgdm9pZCBhZGRDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICAgIGlmICghc2VlbkNvbnN0YW50cy5jb250YWlucyhjb25zdGFudCkpIHsKICAgICAgICBjb25zdGFudC5nZXREZXBlbmRlbmNpZXMoKS5mb3JFYWNoKGFkZENvbnN0YW50KTsKICAgICAgICBhc3NlcnQoIXNlZW5Db25zdGFudHMuY29udGFpbnMoY29uc3RhbnQpKTsK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LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzLCBOYW1lczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCcgc2hvdyBLRmllbGRBbmFseXNpczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmRfdXNhZ2UuZGFydCcKICAgIHNob3cgQmFja2VuZFVzYWdlLCBCYWNrZW5kVXNhZ2VCdWlsZGVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JyBzaG93IEludGVyY2VwdG9yRGF0YUJ1aWxkZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JyBzaG93IE5hdGl2ZUJhc2ljRGF0YSwgTmF0aXZlRGF0YUJ1aWxkZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwvZWxlbWVudF9tYXBfaW1wbC5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3dvcmxkLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9lbnF1ZXVlLmRhcnQnIHNob3cgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEtDbG9zZWRXb3JsZCwgT3BlbldvcmxkOwppbXBvcnQgJ2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJ2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlciwgQ2xhc3NRdWVyaWVzOwppbXBvcnQgJ2NsYXNzX3NldC5kYXJ0JzsKaW1wb3J0ICdtZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICd1c2UuZGFydCcKICAgIHNob3cgQ29uc3RhbnRVc2UsIER5bmFtaWNVc2UsIER5bmFtaWNVc2VLaW5kLCBTdGF0aWNVc2UsIFN0YXRpY1VzZUtpbmQ7CmltcG9ydCAnd29ybGRfYnVpbGRlci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIFJlc29sdXRpb25Xb3JsZEJ1aWxkZXIgaW1wbGVtZW50cyBXb3JsZEJ1aWxkZXIsIE9wZW5Xb3JsZCB7CiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGhhcyBiZWVuIG1hcmtlZCBhcyB1c2VkIChjYWxsZWQsIHJlYWQsIGV0Yy4pIGluCiAgLy8vIHRoaXMgd29ybGQgYnVpbGRlci4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIFtDbG9zZWRXb3JsZF0gKGluc3RlYWQpLgogIGJvb2wgaXNNZW1iZXJVc2VkKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gVGhlIGNsb3NlZCB3b3JsZCBjb21wdXRlZCBieSB0aGlzIHdvcmxkIGJ1aWxkZXIuCiAgLy8vCiAgLy8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgYWZ0ZXIgdGhlIHdvcmxkIGJ1aWxkZXIgaGFzIGJlZW4gY2xvc2VkLgogIEtDbG9zZWRXb3JsZCBnZXQgY2xvc2VkV29ybGRGb3JUZXN0aW5nOwoKICB2b2lkIHJlZ2lzdGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKfQoKLy8vIEV4dGVuZGVkIFtSZXNvbHV0aW9uV29ybGRCdWlsZGVyXSBpbnRlcmZhY2UgdXNlZCBieSB0aGUKLy8vIFtSZXNvbHV0aW9uRW5xdWV1ZXJdLgphYnN0cmFjdCBjbGFzcyBSZXNvbHV0aW9uRW5xdWV1ZXJXb3JsZEJ1aWxkZXIgZXh0ZW5kcyBSZXNvbHV0aW9uV29ybGRCdWlsZGVyIHsKICAvLy8gUmV0dXJucyB0aGUgY2xhc3NlcyByZWdpc3RlcmVkIGFzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5zdGFudGlhdGVkLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgcHJvY2Vzc2VkQ2xhc3NlczsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IFtlbGVtZW50XSBoYXMgYmVlbiBjbG9zdXJpemVkLgogIHZvaWQgcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJlZ2lzdGVyIFt0eXBlXSBhcyAoZGlyZWN0bHkpIGluc3RhbnRpYXRlZC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGdWxseSBlbmZvcmNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZXhhY3QsIHRocm91Z2gKICAvLyBzdWJjbGFzcyBhbmQgdGhyb3VnaCBzdWJ0eXBlIGluc3RhbnRpYXRlZCB0eXBlcy9jbGFzc2VzLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgdW5rbm93biB0eXBlIGFyZ3VtZW50cyBmb3IgZ2VuZXJpYyB0eXBlcy4KICB2b2lkIHJlZ2lzdGVyVHlwZUluc3RhbnRpYXRpb24oCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NVc2VkQ2FsbGJhY2sgY2xhc3NVc2VkLAogICAgICB7Q29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3J9KTsKCiAgLy8vIENvbXB1dGVzIHVzYWdlIGZvciBhbGwgbWVtYmVycyBkZWNsYXJlZCBieSBbY2xzXS4gQ2FsbHMgW21lbWJlcnNVc2VkXSB3aXRoCiAgLy8vIHRoZSB1c2FnZSBjaGFuZ2VzIGZvciBlYWNoIG1lbWJlci4KICAvLy8KICAvLy8gSWYgW2NoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeV0gaXMgYHRydWVgIHdlIGNoZWNrIHRoYXQgbm8gbmV3IG1lbWJlcgogIC8vLyB1c2FnZSBjYW4gYmUgZm91bmQuIFRoaXMgY2hlY2sgaXMgcGVyZm9ybWVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFscmVhZHkKICAvLy8gY29sbGVjdGVkIG1lbWJlciB1c2FnZS4KICB2b2lkIHByb2Nlc3NDbGFzc01lbWJlcnMoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJVc2VkQ2FsbGJhY2sgbWVtYmVyVXNlZCwKICAgICAge2Jvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBmYWxzZX0pOwoKICAvLy8gQXBwbGllcyB0aGUgW2R5bmFtaWNVc2VdIHRvIGFwcGxpY2FibGUgaW5zdGFuY2UgbWVtYmVycy4gQ2FsbHMKICAvLy8gW21lbWJlcnNVc2VkXSB3aXRoIHRoZSB1c2FnZSBjaGFuZ2VzIGZvciBlYWNoIG1lbWJlci4KICB2b2lkIHJlZ2lzdGVyRHluYW1pY1VzZShEeW5hbWljVXNlIGR5bmFtaWNVc2UsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkKTsKCiAgLy8vIEFwcGxpZXMgdGhlIFtzdGF0aWNVc2VdIHRvIGFwcGxpY2FibGUgbWVtYmVycy4gQ2FsbHMgW21lbWJlcnNVc2VkXSB3aXRoCiAgLy8vIHRoZSB1c2FnZSBjaGFuZ2VzIGZvciBlYWNoIG1lbWJlci4KICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkKTsKCiAgLy8vIFJlZ2lzdGVyIHRoZSBjb25zdGFudCBbdXNlXSB3aXRoIHRoaXMgd29ybGQgYnVpbGRlci4gUmV0dXJucyBgdHJ1ZWAgaWYKICAvLy8gdGhlIGNvbnN0YW50IHVzZSB3YXMgbmV3IHRvIHRoZSB3b3JsZC4KICBib29sIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgdXNlKTsKCiAgYm9vbCBpc01lbWJlclByb2Nlc3NlZChNZW1iZXJFbnRpdHkgbWVtYmVyKTsKICB2b2lkIHJlZ2lzdGVyUHJvY2Vzc2VkTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IHByb2Nlc3NlZE1lbWJlcnM7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBbdHlwZV0gaXMgY2hlY2tlZCBpbiB0aGlzIHdvcmxkIGJ1aWxkZXIuIFRoZSB1bmFsaWFzZWQgdHlwZQogIC8vLyBpcyByZXR1cm5lZC4KICB2b2lkIHJlZ2lzdGVySXNDaGVjayhEYXJ0VHlwZSB0eXBlKTsKCiAgdm9pZCByZWdpc3Rlck5hbWVkVHlwZVZhcmlhYmxlTmV3UnRpKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKTsKCiAgdm9pZCByZWdpc3RlclR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKTsKfQoKLy8vIFRoZSB0eXBlIGFuZCBraW5kIG9mIGFuIGluc3RhbnRpYXRpb24gcmVnaXN0ZXJlZCB0aHJvdWdoCi8vLyBgUmVzb2x1dGlvbldvcmxkQnVpbGRlci5yZWdpc3RlclR5cGVJbnN0YW50aWF0aW9uYC4KY2xhc3MgSW5zdGFuY2UgewogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKICBmaW5hbCBJbnN0YW50aWF0aW9uIGtpbmQ7CgogIEluc3RhbmNlKHRoaXMudHlwZSwgdGhpcy5raW5kKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gSGFzaGluZy5vYmplY3RIYXNoKHR5cGUsIEhhc2hpbmcub2JqZWN0SGFzaChraW5kKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEluc3RhbmNlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHlwZSA9PSBvdGhlci50eXBlICYmIGtpbmQgPT0gb3RoZXIua2luZDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKHR5cGUpOwogICAgaWYgKGtpbmQgPT0gSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQpIHsKICAgICAgc2Iud3JpdGUoJyBkaXJlY3RseScpOwogICAgfSBlbHNlIGlmIChraW5kID09IEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQpIHsKICAgICAgc2Iud3JpdGUoJyBhYnN0cmFjdGx5Jyk7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCkgewogICAgICBzYi53cml0ZSgnIG5vbmUnKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGluc3RhbnRpYXRpb25zIG9mIGEgY2xhc3MuCmNsYXNzIEluc3RhbnRpYXRpb25JbmZvIHsKICAvLy8gQSBtYXAgZnJvbSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MgdG8gdGhlaXIgaW5zdGFudGlhdGVkIHR5cGVzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UKICAvLy8KICAvLy8gICAgaW1wb3J0ICdkYXJ0Omh0bWwnOwogIC8vLwogIC8vLyAgICBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENsYXNzPFM+IHsKICAvLy8gICAgICBmYWN0b3J5IEFic3RyYWN0Q2xhc3MuYSgpID0gQ2xhc3M8Uz4uYTsKICAvLy8gICAgICBmYWN0b3J5IEFic3RyYWN0Q2xhc3MuYigpID0+IG5ldyBDbGFzczxTPi5iKCk7CiAgLy8vICAgIH0KICAvLy8gICAgY2xhc3MgQ2xhc3M8VD4gaW1wbGVtZW50cyBBYnN0cmFjdENsYXNzPFQ+IHsKICAvLy8gICAgICBDbGFzcy5hKCk7CiAgLy8vICAgICAgQ2xhc3MuYigpOwogIC8vLyAgICAgIGZhY3RvcnkgQ2xhc3MuYygpID0gQ2xhc3MuYjxUPjsKICAvLy8gICAgfQogIC8vLwogIC8vLwogIC8vLyAgICBtYWluKCkgewogIC8vLyAgICAgIG5ldyBDbGFzcy5hKCk7CiAgLy8vICAgICAgbmV3IENsYXNzPGludD4uYSgpOwogIC8vLyAgICAgIG5ldyBDbGFzczxTdHJpbmc+LmIoKTsKICAvLy8gICAgICBuZXcgQ2xhc3M8bnVtPi5jKCk7CiAgLy8vICAgICAgbmV3IEFic3RyYWN0Q2xhc3M8ZG91YmxlPi5hKCk7CiAgLy8vICAgICAgbmV3IEFic3RyYWN0Q2xhc3M8Ym9vbD4uYigpOwogIC8vLyAgICAgIG5ldyBEaXZFbGVtZW50KCk7IC8vIG5hdGl2ZSBpbnN0YW50aWF0aW9uCiAgLy8vICAgIH0KICAvLy8KICAvLy8gd2lsbCBnZW5lcmF0ZSB0aGUgbWFwcGluZ3MKICAvLy8KICAvLy8gICAgQWJzdHJhY3RDbGFzczogewogIC8vLyAgICAgIEFic3RyYWN0Q2xhc3MuYTogewogIC8vLyAgICAgICAgQWJzdHJhY3RDbGFzczxkb3VibGU+IG5vbmUsIC8vIGZyb20gYG5ldyBBYnN0cmFjdENsYXNzPGRvdWJsZT4uYSgpYAogIC8vLyAgICAgIH0sCiAgLy8vICAgICAgQWJzdHJhY3RDbGFzcy5iOiB7CiAgLy8vICAgICAgICBBYnN0cmFjdENsYXNzPGJvb2w+IG5vbmUsIC8vIGZyb20gYG5ldyBBYnN0cmFjdENsYXNzPGJvb2w+LmIoKWAKICAvLy8gICAgICB9LAogIC8vLyAgICB9LAogIC8vLyAgICBDbGFzczogewogIC8vLyAgICAgIENsYXNzLmE6IHsKICAvLy8gICAgICAgIENsYXNzIGRpcmVjdGx5LCAvLyBmcm9tIGBuZXcgQ2xhc3MuYSgpYAogIC8vLyAgICAgICAgQ2xhc3M8aW50PiBkaXJlY3RseSwgLy8gZnJvbSBgbmV3IENsYXNzPGludD4uYSgpYAogIC8vLyAgICAgICAgQ2xhc3M8Uz4gZGlyZWN0bHkgcmVkaXJlY3QsIC8vIGZyb20gYGZhY3RvcnkgQWJzdHJhY3RDbGFzcy5hYAogIC8vLyAgICAgIH0sCiAgLy8vICAgICAgQ2xhc3MuYjogewogIC8vLyAgICAgICAgQ2xhc3M8U3RyaW5nPiBkaXJlY3RseSwgLy8gZnJvbSBgbmV3IENsYXNzPFN0cmluZz4uYigpYAogIC8vLyAgICAgICAgQ2xhc3M8VD4gZGlyZWN0bHkgcmVkaXJlY3QsIC8vIGZyb20gYGZhY3RvcnkgQ2xhc3MuY2AKICAvLy8gICAgICAgIENsYXNzPFM+IGRpcmVjdGx5LCAvLyBmcm9tIGBmYWN0b3J5IEFic3RyYWN0Q2xhc3MuYmAKICAvLy8gICAgICB9LAogIC8vLyAgICAgIENsYXNzLmM6IHsKICAvLy8gICAgICAgIENsYXNzPG51bT4gZGlyZWN0bHksIC8vIGZyb20gYG5ldyBDbGFzczxudW0+LmMoKWAKICAvLy8gICAgICB9LAogIC8vLyAgICB9LAogIC8vLyAgICBEaXZFbGVtZW50OiB7CiAgLy8vICAgICAgRGl2RWxlbWVudDogewogIC8vLyAgICAgICAgRGl2RWxlbWVudCBhYnN0cmFjdGx5LCAvLyBmcm9tIGBuZXcgRGl2RWxlbWVudCgpYAogIC8vLyAgICAgIH0sCiAgLy8vICAgIH0KICAvLy8KICAvLy8gSWYgdGhlIGNvbnN0cnVjdG9yIGlzIHVua25vd24sIGZvciBpbnN0YW5jZSBmb3IgbmF0aXZlIG9yIG1pcnJvciB1c2FnZSwKICAvLy8gYG51bGxgIGlzIHVzZWQgYXMga2V5LgogIE1hcDxDb25zdHJ1Y3RvckVudGl0eSwgU2V0PEluc3RhbmNlPj4gaW5zdGFudGlhdGlvbk1hcDsKCiAgLy8vIFJlZ2lzdGVyIFt0eXBlXSBhcyB0aGUgaW5zdGFudGlhdGlvbiBba2luZF0gdXNpbmcgW2NvbnN0cnVjdG9yXS4KICB2b2lkIGFkZEluc3RhbnRpYXRpb24oCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yLCBJbnRlcmZhY2VUeXBlIHR5cGUsIEluc3RhbnRpYXRpb24ga2luZCkgewogICAgaW5zdGFudGlhdGlvbk1hcCA/Pz0gPENvbnN0cnVjdG9yRW50aXR5LCBTZXQ8SW5zdGFuY2U+Pnt9OwogICAgaW5zdGFudGlhdGlvbk1hcAogICAgICAgIC5wdXRJZkFic2VudChjb25zdHJ1Y3RvciwgKCkgPT4gbmV3IFNldDxJbnN0YW5jZT4oKSkKICAgICAgICAuYWRkKG5ldyBJbnN0YW5jZSh0eXBlLCBraW5kKSk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBJbnN0YW50aWF0aW9uLkRJUkVDVExZX0lOU1RBTlRJQVRFRDoKICAgICAgICBpc0RpcmVjdGx5SW5zdGFudGlhdGVkID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBJbnN0YW50aWF0aW9uLkFCU1RSQUNUTFlfSU5TVEFOVElBVEVEOgogICAgICAgIGlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCA9IHRydWU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRDoKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiSW5zdGFudGlhdGlvbiAka2luZCBpcyBub3QgYWxsb3dlZC4iKTsKICAgIH0KICB9CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGNsYXNzIGlzIGVpdGhlciBkaXJlY3RseSBvciBhYnN0cmFjdGx5IGluc3RhbnRpYXRlZC4KICBib29sIGdldCBoYXNJbnN0YW50aWF0aW9uID0+CiAgICAgIGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQgfHwgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkOwoKICAvLy8gYHRydWVgIGlmIHRoZSBjbGFzcyBpcyBkaXJlY3RseSBpbnN0YW50aWF0ZWQuCiAgYm9vbCBpc0RpcmVjdGx5SW5zdGFudGlhdGVkID0gZmFsc2U7CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGNsYXNzIGlzIGFic3RyYWN0bHkgaW5zdGFudGlhdGVkLgogIGJvb2wgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkID0gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdJbnN0YW50aWF0aW9uSW5mb1snKTsKICAgIGlmIChpbnN0YW50aWF0aW9uTWFwICE9IG51bGwpIHsKICAgICAgYm9vbCBuZWVkc0NvbW1hID0gZmFsc2U7CiAgICAgIGluc3RhbnRpYXRpb25NYXAKICAgICAgICAgIC5mb3JFYWNoKChDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciwgU2V0PEluc3RhbmNlPiBzZXQpIHsKICAgICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgICAgc2Iud3JpdGUoJywgJyk7CiAgICAgICAgfQogICAgICAgIGlmIChjb25zdHJ1Y3RvciAhPSBudWxsKSB7CiAgICAgICAgICBzYi53cml0ZShjb25zdHJ1Y3Rvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNiLndyaXRlKCc8dW5rbm93bj4nKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUoJzogJyk7CiAgICAgICAgc2Iud3JpdGUoc2V0KTsKICAgICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgICAgfSk7CiAgICB9CiAgICBzYi53cml0ZSgnXScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW1Jlc29sdXRpb25FbnF1ZXVlcldvcmxkQnVpbGRlcl0uCmNsYXNzIFJlc29sdXRpb25Xb3JsZEJ1aWxkZXJJbXBsIGV4dGVuZHMgV29ybGRCdWlsZGVyQmFzZQogICAgaW1wbGVtZW50cyBSZXNvbHV0aW9uRW5xdWV1ZXJXb3JsZEJ1aWxkZXIgewogIC8vLyBJbnN0YW50aWF0aW9uIGluZm9ybWF0aW9uIGZvciBhbGwgY2xhc3NlcyB3aXRoIGluc3RhbnRpYXRlZCB0eXBlcy4KICAvLy8KICAvLy8gSW52YXJpYW50OiBFbGVtZW50cyBhcmUgZGVjbGFyYXRpb24gZWxlbWVudHMuCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBJbnN0YW50aWF0aW9uSW5mbz4gX2luc3RhbnRpYXRpb25JbmZvID0KICAgICAgPENsYXNzRW50aXR5LCBJbnN0YW50aWF0aW9uSW5mbz57fTsKCiAgLy8vIENsYXNzZXMgaW1wbGVtZW50ZWQgYnkgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfaW1wbGVtZW50ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgLy8vIFRoZSBzZXQgb2YgYWxsIHJlZmVyZW5jZWQgc3RhdGljIGZpZWxkcy4KICAvLy8KICAvLy8gSW52YXJpYW50OiBFbGVtZW50cyBhcmUgZGVjbGFyYXRpb24gZWxlbWVudHMuCiAgZmluYWwgU2V0PEZpZWxkRW50aXR5PiBfYWxsUmVmZXJlbmNlZFN0YXRpY0ZpZWxkcyA9IG5ldyBTZXQ8RmllbGRFbnRpdHk+KCk7CgogIC8vLyBEb2N1bWVudGF0aW9uIHdhbnRlZCAtLSBqb2hubml3aW50aGVyCiAgLy8vCiAgLy8vIEludmFyaWFudDogRWxlbWVudHMgYXJlIGRlY2xhcmF0aW9uIGVsZW1lbnRzLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX21ldGhvZHNOZWVkaW5nU3VwZXJHZXR0ZXIgPQogICAgICBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwogIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IF9pbnZva2VkTmFtZXMgPQogICAgICA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+Pnt9OwogIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IF9pbnZva2VkR2V0dGVycyA9CiAgICAgIDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+e307CiAgZmluYWwgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gX2ludm9rZWRTZXR0ZXJzID0KICAgICAgPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj57fTsKCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBDbGFzc1VzYWdlPiBfcHJvY2Vzc2VkQ2xhc3NlcyA9CiAgICAgIDxDbGFzc0VudGl0eSwgQ2xhc3NVc2FnZT57fTsKCiAgTWFwPENsYXNzRW50aXR5LCBDbGFzc1VzYWdlPiBnZXQgY2xhc3NVc2FnZUZvclRlc3RpbmcgPT4gX3Byb2Nlc3NlZENsYXNzZXM7CgogIC8vLyBNYXAgb2YgcmVnaXN0ZXJlZCB1c2FnZSBvZiBtZW1iZXJzIG9mIGxpdmUgY2xhc3Nlcy4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gX21lbWJlclVzYWdlID0KICAgICAgPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+e307CgogIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBnZXQgbWVtYmVyVXNhZ2VGb3JUZXN0aW5nID0+IF9tZW1iZXJVc2FnZTsKCiAgLy8vIE1hcCBjb250YWluaW5nIGluc3RhbmNlIG1lbWJlcnMgb2YgbGl2ZSBjbGFzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KICAvLy8gZnVsbHkgaW52b2tlZCBkeW5hbWljYWxseS4KICAvLy8KICAvLy8gQSBtZXRob2QgaXMgZnVsbHkgaW52b2tlZCBpZiBhbGwgaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGhhdmUgYmVlbiBwYXNzZWQKICAvLy8gaW4gc29tZSBpbnZvY2F0aW9uLgogIGZpbmFsIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IF9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUgPQogICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+Pnt9OwoKICAvLy8gTWFwIGNvbnRhaW5pbmcgaW5zdGFuY2UgbWVtYmVycyBvZiBsaXZlIGNsYXNzZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgogIC8vLyByZWFkIGZyb20gZHluYW1pY2FsbHkuCiAgZmluYWwgTWFwPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj4gX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lID0KICAgICAgPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj57fTsKCiAgLy8vIE1hcCBjb250YWluaW5nIGluc3RhbmNlIG1lbWJlcnMgb2YgbGl2ZSBjbGFzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KICAvLy8gd3JpdHRlbiB0byBkeW5hbWljYWxseS4KICBmaW5hbCBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUgPQogICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+Pnt9OwoKICBmaW5hbCBTZXQ8RmllbGRFbnRpdHk+IF9maWVsZFNldHRlcnMgPSBuZXcgU2V0PEZpZWxkRW50aXR5PigpOwoKICBmaW5hbCBTZXQ8RGFydFR5cGU+IF9pc0NoZWNrcyA9IG5ldyBTZXQ8RGFydFR5cGU+KCk7CiAgZmluYWwgU2V0PFR5cGVWYXJpYWJsZVR5cGU+IF9uYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkgPSB7fTsKCiAgLy8vIFNldCBvZiBhbGwgY2xvc3VyZXMgaW4gdGhlIHByb2dyYW0uIFVzZWQgYnkgdGhlIG1pcnJvciB0cmFja2luZyBzeXN0ZW0KICAvLy8gdG8gZmluZCBhbGwgbGl2ZSBjbG9zdXJlIGluc3RhbmNlcy4KICBmaW5hbCBTZXQ8TG9jYWw+IF9sb2NhbEZ1bmN0aW9ucyA9IG5ldyBTZXQ8TG9jYWw+KCk7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX2Nsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzID0KICAgICAgbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIERhcnRUeXBlcyBfZGFydFR5cGVzOwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKCiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVCYXNpY0RhdGE7CiAgZmluYWwgTmF0aXZlRGF0YUJ1aWxkZXIgX25hdGl2ZURhdGFCdWlsZGVyOwogIGZpbmFsIEludGVyY2VwdG9yRGF0YUJ1aWxkZXIgX2ludGVyY2VwdG9yRGF0YUJ1aWxkZXI7CiAgZmluYWwgQmFja2VuZFVzYWdlQnVpbGRlciBfYmFja2VuZFVzYWdlQnVpbGRlcjsKICBmaW5hbCBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciBfcnRpTmVlZEJ1aWxkZXI7CiAgZmluYWwgS0ZpZWxkQW5hbHlzaXMgX2FsbG9jYXRvckFuYWx5c2lzOwogIGZpbmFsIE5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciBfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyOwogIGZpbmFsIE5vU3VjaE1ldGhvZFJlZ2lzdHJ5IF9ub1N1Y2hNZXRob2RSZWdpc3RyeTsKICBmaW5hbCBBbm5vdGF0aW9uc0RhdGFCdWlsZGVyIF9hbm5vdGF0aW9uc0RhdGFCdWlsZGVyOwoKICBmaW5hbCBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneTsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgX2NsYXNzSGllcmFyY2h5QnVpbGRlcjsKICBmaW5hbCBDbGFzc1F1ZXJpZXMgX2NsYXNzUXVlcmllczsKCiAgYm9vbCBfY2xvc2VkID0gZmFsc2U7CiAgS0Nsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZENhY2hlOwogIGZpbmFsIFNldDxNZW1iZXJFbnRpdHk+IF9saXZlSW5zdGFuY2VNZW1iZXJzID0gbmV3IFNldDxNZW1iZXJFbnRpdHk+KCk7CgogIGZpbmFsIFNldDxDb25zdGFudFZhbHVlPiBfY29uc3RhbnRWYWx1ZXMgPSBuZXcgU2V0PENvbnN0YW50VmFsdWU+KCk7CgogIGZpbmFsIFNldDxMb2NhbD4gX2dlbmVyaWNMb2NhbEZ1bmN0aW9ucyA9IG5ldyBTZXQ8TG9jYWw+KCk7CgogIFNldDxNZW1iZXJFbnRpdHk+IF9wcm9jZXNzZWRNZW1iZXJzID0gbmV3IFNldDxNZW1iZXJFbnRpdHk+KCk7CgogIGJvb2wgZ2V0IGlzQ2xvc2VkID0+IF9jbG9zZWQ7CgogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgX2VsZW1lbnRNYXA7CgogIFJlc29sdXRpb25Xb3JsZEJ1aWxkZXJJbXBsKAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9lbGVtZW50TWFwLAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuX2RhcnRUeXBlcywKICAgICAgdGhpcy5fY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMuX25hdGl2ZUJhc2ljRGF0YSwKICAgICAgdGhpcy5fbmF0aXZlRGF0YUJ1aWxkZXIsCiAgICAgIHRoaXMuX2ludGVyY2VwdG9yRGF0YUJ1aWxkZXIsCiAgICAgIHRoaXMuX2JhY2tlbmRVc2FnZUJ1aWxkZXIsCiAgICAgIHRoaXMuX3J0aU5lZWRCdWlsZGVyLAogICAgICB0aGlzLl9hbGxvY2F0b3JBbmFseXNpcywKICAgICAgdGhpcy5fbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyLAogICAgICB0aGlzLl9ub1N1Y2hNZXRob2RSZWdpc3RyeSwKICAgICAgdGhpcy5fYW5ub3RhdGlvbnNEYXRhQnVpbGRlciwKICAgICAgdGhpcy5fc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5LAogICAgICB0aGlzLl9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIsCiAgICAgIHRoaXMuX2NsYXNzUXVlcmllcyk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgcHJvY2Vzc2VkQ2xhc3NlcyA9PiBfcHJvY2Vzc2VkQ2xhc3Nlcy5rZXlzCiAgICAgIC53aGVyZSgoY2xzKSA9PiBfcHJvY2Vzc2VkQ2xhc3Nlc1tjbHNdLmlzSW5zdGFudGlhdGVkKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc01lbWJlclByb2Nlc3NlZChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICBfcHJvY2Vzc2VkTWVtYmVycy5jb250YWlucyhtZW1iZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUHJvY2Vzc2VkTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIF9wcm9jZXNzZWRNZW1iZXJzLmFkZChtZW1iZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgcHJvY2Vzc2VkTWVtYmVycyA9PiBfcHJvY2Vzc2VkTWVtYmVyczsKCiAgQG92ZXJyaWRlCiAgS0Nsb3NlZFdvcmxkIGdldCBjbG9zZWRXb3JsZEZvclRlc3RpbmcgewogICAgaWYgKCFfY2xvc2VkKSB7CiAgICAgIGZhaWxlZEF0KAogICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAiVGhlIHdvcmxkIGJ1aWxkZXIgaGFzIG5vdCB5ZXQgYmVlbiBjbG9zZWQuIik7CiAgICB9CiAgICByZXR1cm4gX2Nsb3NlZFdvcmxkQ2FjaGU7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHNlbWFudGljIHByZWNpc2lvbi4KICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlcyB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgZ2V0SW5zdGFudGlhdGlvbk1hcCgpLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgSW5zdGFudGlhdGlvbkluZm8gaW5mbykgewogICAgICBpZiAoaW5mby5oYXNJbnN0YW50aWF0aW9uKSB7CiAgICAgICAgY2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gY2xhc3NlczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBGdW5jdGlvblR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnQpOwogICAgaWYgKHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKSB7CiAgICAgIF9jbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlcy5hZGQoZWxlbWVudCk7CiAgICB9CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGdWxseSBlbmZvcmNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZXhhY3QsIHRocm91Z2gKICAvLyBzdWJjbGFzcyBhbmQgdGhyb3VnaCBzdWJ0eXBlIGluc3RhbnRpYXRlZCB0eXBlcy9jbGFzc2VzLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgdW5rbm93biB0eXBlIGFyZ3VtZW50cyBmb3IgZ2VuZXJpYyB0eXBlcy4KICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVHlwZUluc3RhbnRpYXRpb24oCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NVc2VkQ2FsbGJhY2sgY2xhc3NVc2VkLAogICAgICB7Q29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3J9KSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSB0eXBlLmVsZW1lbnQ7CiAgICBJbnN0YW50aWF0aW9uSW5mbyBpbmZvID0KICAgICAgICBfaW5zdGFudGlhdGlvbkluZm8ucHV0SWZBYnNlbnQoY2xzLCAoKSA9PiBuZXcgSW5zdGFudGlhdGlvbkluZm8oKSk7CiAgICBJbnN0YW50aWF0aW9uIGtpbmQgPSBJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEOwogICAgYm9vbCBpc05hdGl2ZSA9IF9uYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVDbGFzcyhjbHMpOwogICAgLy8gV2UgY2FuJ3QgdXNlIHRoZSBjbG9zZWQtd29ybGQgYXNzdW1wdGlvbiB3aXRoIG5hdGl2ZSBhYnN0cmFjdAogICAgLy8gY2xhc3NlczsgYSBuYXRpdmUgYWJzdHJhY3QgY2xhc3MgbWF5IGhhdmUgbm9uLWFic3RyYWN0IHN1YmNsYXNzZXMKICAgIC8vIG5vdCBkZWNsYXJlZCB0byB0aGUgcHJvZ3JhbS4gIEluc3RhbmNlcyBvZiB0aGVzZSBjbGFzc2VzIGFyZQogICAgLy8gaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgYWJzdHJhY3QgY2xhc3MuCiAgICBpZiAoIWNscy5pc0Fic3RyYWN0IHx8IGlzTmF0aXZlKSB7CiAgICAgIGlmIChpc05hdGl2ZSkgewogICAgICAgIGtpbmQgPSBJbnN0YW50aWF0aW9uLkFCU1RSQUNUTFlfSU5TVEFOVElBVEVEOwogICAgICB9IGVsc2UgewogICAgICAgIGtpbmQgPSBJbnN0YW50aWF0aW9uLkRJUkVDVExZX0lOU1RBTlRJQVRFRDsKICAgICAgfQogICAgfQogICAgaW5mby5hZGRJbnN0YW50aWF0aW9uKGNvbnN0cnVjdG9yLCB0eXBlLCBraW5kKTsKICAgIGlmIChraW5kICE9IEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpIHsKICAgICAgX2NsYXNzSGllcmFyY2h5QnVpbGRlci51cGRhdGVDbGFzc0hpZXJhcmNoeU5vZGVGb3JDbGFzcyhjbHMsCiAgICAgICAgICBkaXJlY3RseUluc3RhbnRpYXRlZDogaW5mby5pc0RpcmVjdGx5SW5zdGFudGlhdGVkLAogICAgICAgICAgYWJzdHJhY3RseUluc3RhbnRpYXRlZDogaW5mby5pc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQpOwogICAgICBfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzKGNscywgY2xhc3NVc2VkKTsKICAgIH0KCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgW19pbnN0YW50aWF0aW9uSW5mb10gdG8gY29tcHV0ZSB0aGlzIGluZm9ybWF0aW9uCiAgICAvLyBpbnN0ZWFkLgogICAgaWYgKF9pbXBsZW1lbnRlZENsYXNzZXMuYWRkKGNscykpIHsKICAgICAgY2xhc3NVc2VkKGNscywgX2dldENsYXNzVXNhZ2UoY2xzKS5pbXBsZW1lbnQoKSk7CiAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFN1cGVydHlwZShjbHMsIChJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkgewogICAgICAgIGlmIChfaW1wbGVtZW50ZWRDbGFzc2VzLmFkZChzdXBlcnR5cGUuZWxlbWVudCkpIHsKICAgICAgICAgIGNsYXNzVXNlZCgKICAgICAgICAgICAgICBzdXBlcnR5cGUuZWxlbWVudCwgX2dldENsYXNzVXNhZ2Uoc3VwZXJ0eXBlLmVsZW1lbnQpLmltcGxlbWVudCgpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KCiAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gX2dldE1hdGNoaW5nQ2FsbFN0cnVjdHVyZXMoCiAgICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAoc2VsZWN0b3JzID09IG51bGwpIHJldHVybiBjb25zdCA8Q2FsbFN0cnVjdHVyZT5bXTsKICAgIFNldDxDYWxsU3RydWN0dXJlPiBjYWxsU3RydWN0dXJlczsKICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzLmtleXMpIHsKICAgICAgaWYgKHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKG1lbWJlcikpIHsKICAgICAgICBTZWxlY3RvckNvbnN0cmFpbnRzIG1hc2tzID0gc2VsZWN0b3JzW3NlbGVjdG9yXTsKICAgICAgICBpZiAobWFza3MuY2FuSGl0KG1lbWJlciwgc2VsZWN0b3IubWVtYmVyTmFtZSwgdGhpcykpIHsKICAgICAgICAgIGNhbGxTdHJ1Y3R1cmVzID8/PSBuZXcgU2V0PENhbGxTdHJ1Y3R1cmU+KCk7CiAgICAgICAgICBjYWxsU3RydWN0dXJlcy5hZGQoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2FsbFN0cnVjdHVyZXMgPz8gY29uc3QgPENhbGxTdHJ1Y3R1cmU+W107CiAgfQoKICBib29sIF9oYXNNYXRjaGluZ1NlbGVjdG9yKAogICAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKHNlbGVjdG9ycyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKFNlbGVjdG9yIHNlbGVjdG9yIGluIHNlbGVjdG9ycy5rZXlzKSB7CiAgICAgIGlmIChzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpKSB7CiAgICAgICAgU2VsZWN0b3JDb25zdHJhaW50cyBtYXNrcyA9IHNlbGVjdG9yc1tzZWxlY3Rvcl07CiAgICAgICAgaWYgKG1hc2tzLmNhbkhpdChtZW1iZXIsIHNlbGVjdG9yLm1lbWJlck5hbWUsIHRoaXMpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBpbnN0YW50aWF0aW9uIG1hcCB1c2VkIGZvciBjb21wdXRpbmcgdGhlIGNsb3NlZCB3b3JsZC4KICBNYXA8Q2xhc3NFbnRpdHksIEluc3RhbnRpYXRpb25JbmZvPiBnZXRJbnN0YW50aWF0aW9uTWFwKCkgewogICAgcmV0dXJuIF9pbnN0YW50aWF0aW9uSW5mbzsKICB9CgogIEl0ZXJhYmxlPENhbGxTdHJ1Y3R1cmU+IF9nZXRJbnZvY2F0aW9uQ2FsbFN0cnVjdHVyZXMoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9nZXRNYXRjaGluZ0NhbGxTdHJ1Y3R1cmVzKF9pbnZva2VkTmFtZXNbbWVtYmVyLm5hbWVdLCBtZW1iZXIpOwogIH0KCiAgYm9vbCBfaGFzSW52b2tlZEdldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX2hhc01hdGNoaW5nU2VsZWN0b3IoX2ludm9rZWRHZXR0ZXJzW21lbWJlci5uYW1lXSwgbWVtYmVyKTsKICB9CgogIGJvb2wgX2hhc0ludm9rZWRTZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9oYXNNYXRjaGluZ1NlbGVjdG9yKF9pbnZva2VkU2V0dGVyc1ttZW1iZXIubmFtZV0sIG1lbWJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgRHluYW1pY1VzZSBkeW5hbWljVXNlLCBNZW1iZXJVc2VkQ2FsbGJhY2sgbWVtYmVyVXNlZCkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBkeW5hbWljVXNlLnNlbGVjdG9yOwogICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBzZWxlY3Rvci5uYW1lOwoKICAgIHZvaWQgX3Byb2Nlc3MoCiAgICAgICAgTWFwPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj4gbWVtYmVyTWFwLAogICAgICAgIEVudW1TZXQ8TWVtYmVyVXNlPiBhY3Rpb24oTWVtYmVyVXNhZ2UgdXNhZ2UpLAogICAgICAgIGJvb2wgc2hvdWxkQmVSZW1vdmVkKE1lbWJlclVzYWdlIHVzYWdlKSkgewogICAgICBfcHJvY2Vzc1NldChtZW1iZXJNYXAsIG1ldGhvZE5hbWUsIChNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICAgIGlmIChzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZCh1c2FnZS5lbnRpdHkpICYmCiAgICAgICAgICAgIF9zZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kuYXBwbGllZFVubmFtZWQoCiAgICAgICAgICAgICAgICBkeW5hbWljVXNlLCB1c2FnZS5lbnRpdHksIHRoaXMpKSB7CiAgICAgICAgICBtZW1iZXJVc2VkKHVzYWdlLmVudGl0eSwgYWN0aW9uKHVzYWdlKSk7CiAgICAgICAgICByZXR1cm4gc2hvdWxkQmVSZW1vdmVkKHVzYWdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KTsKICAgIH0KCiAgICBzd2l0Y2ggKGR5bmFtaWNVc2Uua2luZCkgewogICAgICBjYXNlIER5bmFtaWNVc2VLaW5kLklOVk9LRToKICAgICAgICByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgICBkeW5hbWljVXNlLnNlbGVjdG9yLCBkeW5hbWljVXNlLnR5cGVBcmd1bWVudHMpOwogICAgICAgIGlmIChfcmVnaXN0ZXJOZXdTZWxlY3RvcihkeW5hbWljVXNlLCBfaW52b2tlZE5hbWVzKSkgewogICAgICAgICAgX3Byb2Nlc3MoCiAgICAgICAgICAgICAgX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSwKICAgICAgICAgICAgICAobSkgPT4gbS5pbnZva2UoCiAgICAgICAgICAgICAgICAgIEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MsIGR5bmFtaWNVc2Uuc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSksCiAgICAgICAgICAgICAgLy8gSWYgbm90IGFsbCBvcHRpb25hbCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwYXNzZWQgaW4gaW52b2NhdGlvbnMKICAgICAgICAgICAgICAvLyB3ZSBtdXN0IGtlZXAgdGhlIG1lbWJlciBpbiBbX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZV0uCiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWxzbyByZW1vdmUgZnJvbQogICAgICAgICAgICAgIC8vIFtfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVdIGluIGNhc2Ugb2YgZ2V0dGVycy9zZXR0ZXJzLgogICAgICAgICAgICAgICh1KSA9PiAhdS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIER5bmFtaWNVc2VLaW5kLkdFVDoKICAgICAgICBpZiAoX3JlZ2lzdGVyTmV3U2VsZWN0b3IoZHluYW1pY1VzZSwgX2ludm9rZWRHZXR0ZXJzKSkgewogICAgICAgICAgX3Byb2Nlc3MoCiAgICAgICAgICAgICAgX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lLAogICAgICAgICAgICAgIChtKSA9PiBtLnJlYWQoQWNjZXNzZXMuZHluYW1pY0FjY2VzcyksCiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWVtYmVycyBjYW5ub3QgYmUgcGFydGlhbGx5IHJlYWQgc28KICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQgYWx3YXlzIHJlbW92ZSB0aGVtLgogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFsc28gcmVtb3ZlIGZyb20KICAgICAgICAgICAgICAvLyBbX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZV0gaW4gY2FzZSBvZiBtZXRob2RzLgogICAgICAgICAgICAgICh1KSA9PiAhdS5oYXNQZW5kaW5nRHluYW1pY1JlYWQpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBEeW5hbWljVXNlS2luZC5TRVQ6CiAgICAgICAgaWYgKF9yZWdpc3Rlck5ld1NlbGVjdG9yKGR5bmFtaWNVc2UsIF9pbnZva2VkU2V0dGVycykpIHsKICAgICAgICAgIF9wcm9jZXNzKAogICAgICAgICAgICAgIF93cml0YWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSwKICAgICAgICAgICAgICAobSkgPT4gbS53cml0ZShBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSwKICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNZW1iZXJzIGNhbm5vdCBiZSBwYXJ0aWFsbHkgd3JpdHRlbiBzbwogICAgICAgICAgICAgIC8vIHdlIHNob3VsZCBhbHdheXMgcmVtb3ZlIHRoZW0uCiAgICAgICAgICAgICAgKHUpID0+ICF1Lmhhc1BlbmRpbmdEeW5hbWljV3JpdGUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICB9CgogIGJvb2wgX3JlZ2lzdGVyTmV3U2VsZWN0b3IoRHluYW1pY1VzZSBkeW5hbWljVXNlLAogICAgICBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBzZWxlY3Rvck1hcCkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBkeW5hbWljVXNlLnNlbGVjdG9yOwogICAgU3RyaW5nIG5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgT2JqZWN0IGNvbnN0cmFpbnQgPSBkeW5hbWljVXNlLnJlY2VpdmVyQ29uc3RyYWludDsKICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzID0gc2VsZWN0b3JNYXAucHV0SWZBYnNlbnQoCiAgICAgICAgbmFtZSwgKCkgPT4gbmV3IE1hcGxldDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4oKSk7CiAgICBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMgY29uc3RyYWludHMgPSBzZWxlY3RvcnNbc2VsZWN0b3JdOwogICAgaWYgKGNvbnN0cmFpbnRzID09IG51bGwpIHsKICAgICAgc2VsZWN0b3JzW3NlbGVjdG9yXSA9IF9zZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kKICAgICAgICAgIC5jcmVhdGVTZWxlY3RvckNvbnN0cmFpbnRzKHNlbGVjdG9yLCBjb25zdHJhaW50KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gY29uc3RyYWludHMuYWRkUmVjZWl2ZXJDb25zdHJhaW50KGNvbnN0cmFpbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlcklzQ2hlY2soY292YXJpYW50IERhcnRUeXBlIHR5cGUpIHsKICAgIF9pc0NoZWNrcy5hZGQodHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGkoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICBfbmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpLmFkZCh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgcmVnaXN0ZXJDb25zdGFudFVzZShDb25zdGFudFVzZSB1c2UpIHsKICAgIHJldHVybiBfY29uc3RhbnRWYWx1ZXMuYWRkKHVzZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkKSB7CiAgICBpZiAoc3RhdGljVXNlLmtpbmQgPT0gU3RhdGljVXNlS2luZC5DTE9TVVJFKSB7CiAgICAgIExvY2FsIGxvY2FsRnVuY3Rpb24gPSBzdGF0aWNVc2UuZWxlbWVudDsKICAgICAgRnVuY3Rpb25UeXBlIHR5cGUgPQogICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRMb2NhbEZ1bmN0aW9uVHlwZShsb2NhbEZ1bmN0aW9uKTsKICAgICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgICAgX2dlbmVyaWNMb2NhbEZ1bmN0aW9ucy5hZGQobG9jYWxGdW5jdGlvbik7CiAgICAgIH0KICAgICAgX2xvY2FsRnVuY3Rpb25zLmFkZChzdGF0aWNVc2UuZWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAoc3RhdGljVXNlLmtpbmQgPT0gU3RhdGljVXNlS2luZC5DTE9TVVJFX0NBTEwpIHsKICAgICAgaWYgKHN0YXRpY1VzZS50eXBlQXJndW1lbnRzPy5pc05vdEVtcHR5ID8/IGZhbHNlKSB7CiAgICAgICAgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgICAgICAgbmV3IFNlbGVjdG9yLmNhbGwoTmFtZXMuY2FsbCwgc3RhdGljVXNlLmNhbGxTdHJ1Y3R1cmUpLAogICAgICAgICAgICBzdGF0aWNVc2UudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQoKICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0gc3RhdGljVXNlLmVsZW1lbnQ7CiAgICBFbnVtU2V0PE1lbWJlclVzZT4gdXNlU2V0ID0gbmV3IEVudW1TZXQ8TWVtYmVyVXNlPigpOwogICAgTWVtYmVyVXNhZ2UgdXNhZ2UgPSBfZ2V0TWVtYmVyVXNhZ2UoZWxlbWVudCwgdXNlU2V0KTsKCiAgICBpZiAoKGVsZW1lbnQuaXNTdGF0aWMgfHwgZWxlbWVudC5pc1RvcExldmVsKSAmJiBlbGVtZW50LmlzRmllbGQpIHsKICAgICAgX2FsbFJlZmVyZW5jZWRTdGF0aWNGaWVsZHMuYWRkKHN0YXRpY1VzZS5lbGVtZW50KTsKICAgIH0KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoaXMuIEN1cnJlbnRseSBbRklFTERfR0VUXSBhbmQKICAgIC8vIFtGSUVMRF9TRVRdIGNvbnRhaW5zIFtCb3hGaWVsZEVsZW1lbnRdcyB3aGljaCB3ZSBjYW5ub3QgZW5xdWV1ZS4KICAgIC8vIEFsc28gW0NMT1NVUkVdIGNvbnRhaW5zIFtMb2NhbEZ1bmN0aW9uRWxlbWVudF0gd2hpY2ggd2UgY2Fubm90CiAgICAvLyBlbnF1ZXVlLgoKICAgIHN3aXRjaCAoc3RhdGljVXNlLmtpbmQpIHsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX0dFVDoKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX1NFVDoKICAgICAgICBfZmllbGRTZXR0ZXJzLmFkZChzdGF0aWNVc2UuZWxlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DTE9TVVJFOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRV9DQUxMOgogICAgICAgIC8vIEFscmVhZHkgaGFuZGxlZCBhYm92ZS4KICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX1RFQVJfT0ZGOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5zdXBlckFjY2VzcykpOwogICAgICAgIF9tZXRob2RzTmVlZGluZ1N1cGVyR2V0dGVyLmFkZChzdGF0aWNVc2UuZWxlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9GSUVMRF9TRVQ6CiAgICAgICAgX2ZpZWxkU2V0dGVycy5hZGQoc3RhdGljVXNlLmVsZW1lbnQpOwogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuc3VwZXJBY2Nlc3MpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX0dFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLnJlYWQoQWNjZXNzZXMuc3VwZXJBY2Nlc3MpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNUQVRJQ19HRVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX1RFQVJfT0ZGOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5zdGF0aWNBY2Nlc3MpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX1NFVFRFUl9TRVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS53cml0ZShBY2Nlc3Nlcy5zdXBlckFjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX1NFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLndyaXRlKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRklFTERfSU5JVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmluaXQoKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5GSUVMRF9DT05TVEFOVF9JTklUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuY29uc3RhbnRJbml0KHN0YXRpY1VzZS5jb25zdGFudCkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfSU5WT0tFOgogICAgICAgIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbihzdGF0aWNVc2UpOwogICAgICAgIHVzZVNldC5hZGRBbGwoCiAgICAgICAgICAgIHVzYWdlLmludm9rZShBY2Nlc3Nlcy5zdXBlckFjY2Vzcywgc3RhdGljVXNlLmNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNUQVRJQ19JTlZPS0U6CiAgICAgICAgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKHN0YXRpY1VzZSk7CiAgICAgICAgdXNlU2V0LmFkZEFsbCgKICAgICAgICAgICAgdXNhZ2UuaW52b2tlKEFjY2Vzc2VzLnN0YXRpY0FjY2Vzcywgc3RhdGljVXNlLmNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICB1c2FnZS5pbnZva2UoQWNjZXNzZXMuc3RhdGljQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRElSRUNUX0lOVk9LRToKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAnRGlyZWN0IHN0YXRpYyB1c2UgaXMgbm90IHN1cHBvcnRlZCBmb3IgcmVzb2x1dGlvbi4nKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLklOTElOSU5HOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0FMTF9NRVRIT0Q6CiAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlN0YXRpYyB1c2UgJHtzdGF0aWNVc2Uua2luZH0gaXMgbm90IHN1cHBvcnRlZCBkdXJpbmcgcmVzb2x1dGlvbi4iKTsKICAgIH0KICAgIGlmICh1c2VTZXQuaXNOb3RFbXB0eSkgewogICAgICBtZW1iZXJVc2VkKHVzYWdlLmVudGl0eSwgdXNlU2V0KTsKICAgIH0KICB9CgogIC8vLyBDYWxsZWQgdG8gY3JlYXRlIGEgW0NsYXNzVXNhZ2VdIGZvciBbY2xzXS4KICAvLy8KICAvLy8gU3ViY2xhc3NlcyBvdmVycmlkZSB0aGlzIHRvIGVuc3VyZSBuZWVkZWQgaW52YXJpYW50cyBvbiBbY2xzXS4KICBDbGFzc1VzYWdlIF9jcmVhdGVDbGFzc1VzYWdlKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIG5ldyBDbGFzc1VzYWdlKGNscyk7CgogIC8vLyBSZXR1cm4gdGhlIGNhbm9uaWNhbCBbQ2xhc3NVc2FnZV0gZm9yIFtjbHNdLgogIENsYXNzVXNhZ2UgX2dldENsYXNzVXNhZ2UoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX3Byb2Nlc3NlZENsYXNzZXMucHV0SWZBYnNlbnQoY2xzLCAoKSB7CiAgICAgIHJldHVybiBfY3JlYXRlQ2xhc3NVc2FnZShjbHMpOwogICAgfSk7CiAgfQoKICAvLy8gUmVnaXN0ZXIgW2Nsc10gYW5kIGFsbCBpdHMgc3VwZXJjbGFzc2VzIGFzIGluc3RhbnRpYXRlZC4KICB2b2lkIF9wcm9jZXNzSW5zdGFudGlhdGVkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc1VzZWRDYWxsYmFjayBjbGFzc1VzZWQpIHsKICAgIC8vIFJlZ2lzdGVycyBbc3VwZXJjbGFzc10gYXMgaW5zdGFudGlhdGVkLiBSZXR1cm5zIGB0cnVlYCBpZiBpdCB3YXNuJ3QKICAgIC8vIGFscmVhZHkgaW5zdGFudGlhdGVkIGFuZCB3ZSB0aGVyZWZvcmUgaGF2ZSB0byBwcm9jZXNzIGl0cyBzdXBlcmNsYXNzIGFzCiAgICAvLyB3ZWxsLgogICAgYm9vbCBwcm9jZXNzQ2xhc3MoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcykgewogICAgICBDbGFzc1VzYWdlIHVzYWdlID0gX2dldENsYXNzVXNhZ2Uoc3VwZXJjbGFzcyk7CiAgICAgIGlmICghdXNhZ2UuaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgICBjbGFzc1VzZWQodXNhZ2UuY2xzLCB1c2FnZS5pbnN0YW50aWF0ZSgpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgd2hpbGUgKGNscyAhPSBudWxsICYmIHByb2Nlc3NDbGFzcyhjbHMpKSB7CiAgICAgIGNscyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcm9jZXNzQ2xhc3NNZW1iZXJzKENsYXNzRW50aXR5IGNscywgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQsCiAgICAgIHtib29sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogZmFsc2V9KSB7CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzc01lbWJlcihjbHMsCiAgICAgICAgKENsYXNzRW50aXR5IGNscywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzTWVtYmVyKGNscywgbWVtYmVyLCBtZW1iZXJVc2VkLAogICAgICAgICAgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpOwogICAgfSk7CiAgfQoKICAvLy8gQ2FsbCBbdXBkYXRlVXNhZ2VdIG9uIGFsbCBbTWVtYmVyVXNhZ2VdcyBpbiB0aGUgc2V0IGluIFttYXBdIGZvcgogIC8vLyBbbWVtYmVyTmFtZV0uIElmIFt1cGRhdGVVc2FnZV0gcmV0dXJucyBgdHJ1ZWAgdGhlIHVzYWdlIGlzIHJlbW92ZWQgZnJvbQogIC8vLyB0aGUgc2V0LgogIHZvaWQgX3Byb2Nlc3NTZXQoTWFwPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj4gbWFwLCBTdHJpbmcgbWVtYmVyTmFtZSwKICAgICAgYm9vbCB1cGRhdGVVc2FnZShNZW1iZXJVc2FnZSBlKSkgewogICAgU2V0PE1lbWJlclVzYWdlPiBtZW1iZXJzID0gbWFwW21lbWJlck5hbWVdOwogICAgaWYgKG1lbWJlcnMgPT0gbnVsbCkgcmV0dXJuOwogICAgLy8gW2ZdIG1pZ2h0IGFkZCBlbGVtZW50cyB0byBbOiBtYXBbbWVtYmVyTmFtZV0gOl0gZHVyaW5nIHRoZSBsb29wIGJlbG93CiAgICAvLyBzbyB3ZSBjcmVhdGUgYSBuZXcgbGlzdCBmb3IgWzogbWFwW21lbWJlck5hbWVdIDpdIGFuZCBwcmVwZW5kIHRoZQogICAgLy8gW3JlbWFpbmluZ10gbWVtYmVycyBhZnRlciB0aGUgbG9vcC4KICAgIG1hcFttZW1iZXJOYW1lXSA9IG5ldyBTZXQ8TWVtYmVyVXNhZ2U+KCk7CiAgICBTZXQ8TWVtYmVyVXNhZ2U+IHJlbWFpbmluZyA9IG5ldyBTZXQ8TWVtYmVyVXNhZ2U+KCk7CiAgICBmb3IgKE1lbWJlclVzYWdlIHVzYWdlIGluIG1lbWJlcnMpIHsKICAgICAgaWYgKCF1cGRhdGVVc2FnZSh1c2FnZSkpIHsKICAgICAgICByZW1haW5pbmcuYWRkKHVzYWdlKTsKICAgICAgfQogICAgfQogICAgbWFwW21lbWJlck5hbWVdLmFkZEFsbChyZW1haW5pbmcpOwogIH0KCiAgTWVtYmVyVXNhZ2UgX2dldE1lbWJlclVzYWdlKE1lbWJlckVudGl0eSBtZW1iZXIsIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQsCiAgICAgIHtib29sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogZmFsc2V9KSB7CiAgICBNZW1iZXJVc2FnZSB1c2FnZSA9IF9tZW1iZXJVc2FnZVttZW1iZXJdOwogICAgaWYgKHVzYWdlID09IG51bGwpIHsKICAgICAgaWYgKG1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgU3RyaW5nIG1lbWJlck5hbWUgPSBtZW1iZXIubmFtZTsKICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hhbmdlIHRoaXMgdG8gdXNlIGlzTmF0aXZlTWVtYmVyIHdoZW4gd2UgdXNlCiAgICAgICAgLy8gQ0ZFIGNvbnN0YW50cy4KICAgICAgICAvLyBUaGUgb2J2aW91cyB0aGluZyB0byB0ZXN0IGhlcmUgd291bGQgYmUgIm1lbWJlci5pc05hdGl2ZSIsCiAgICAgICAgLy8gaG93ZXZlciwgdGhhdCBvbmx5IHdvcmtzIGFmdGVyIG1ldGFkYXRhIGhhcyBiZWVuIHBhcnNlZC9hbmFseXplZCwKICAgICAgICAvLyBhbmQgdGhhdCBtYXkgbm90IGhhdmUgaGFwcGVuZWQgeWV0LgogICAgICAgIC8vIFNvIGluc3RlYWQgd2UgdXNlIHRoZSBlbmNsb3NpbmcgY2xhc3MsIHdoaWNoIHdlIGtub3cgaGF2ZSBoYWQKICAgICAgICAvLyBpdHMgbWV0YWRhdGEgcGFyc2VkIGFuZCBhbmFseXplZC4KICAgICAgICAvLyBOb3RlOiB0aGlzIGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgbm8gbm9uLW5hdGl2ZSBmaWVsZHMgb24gbmF0aXZlCiAgICAgICAgLy8gY2xhc3Nlcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgY2FzZSB3aGVuIGEgbmF0aXZlIGNsYXNzIGlzIHN1YmNsYXNzZWQuCiAgICAgICAgYm9vbCBpc05hdGl2ZSA9IF9uYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVDbGFzcyhjbHMpOwogICAgICAgIHVzYWdlID0gbmV3IE1lbWJlclVzYWdlKG1lbWJlcik7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmICFpc05hdGl2ZSkgewogICAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5pbml0KCkpOwogICAgICAgIH0KICAgICAgICBpZiAoIWNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSkgewogICAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmIGlzTmF0aXZlKSB7CiAgICAgICAgICAgIHJlZ2lzdGVyVXNlZEVsZW1lbnQobWVtYmVyKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbiAmJgogICAgICAgICAgICAgIG1lbWJlci5uYW1lID09IElkZW50aWZpZXJzLmNhbGwgJiYKICAgICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmlzR2VuZXJpY0NsYXNzKGNscykpIHsKICAgICAgICAgICAgX2Nsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzLmFkZChtZW1iZXIpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljUmVhZCAmJiBfaGFzSW52b2tlZEdldHRlcihtZW1iZXIpKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLnJlYWQoQWNjZXNzZXMuZHluYW1pY0FjY2VzcykpOwogICAgICAgIH0KICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UpIHsKICAgICAgICAgIEl0ZXJhYmxlPENhbGxTdHJ1Y3R1cmU+IGNhbGxTdHJ1Y3R1cmVzID0KICAgICAgICAgICAgICBfZ2V0SW52b2NhdGlvbkNhbGxTdHJ1Y3R1cmVzKG1lbWJlcik7CiAgICAgICAgICBmb3IgKENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSBpbiBjYWxsU3RydWN0dXJlcykgewogICAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmludm9rZShBY2Nlc3Nlcy5keW5hbWljQWNjZXNzLCBjYWxsU3RydWN0dXJlKSk7CiAgICAgICAgICAgIGlmICghdXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNXcml0ZSAmJiBfaGFzSW52b2tlZFNldHRlcihtZW1iZXIpKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLndyaXRlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MpKTsKICAgICAgICB9CgogICAgICAgIGlmICghY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UpIHsKICAgICAgICAgICAgX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZQogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KG1lbWJlck5hbWUsICgpID0+IHt9KQogICAgICAgICAgICAgICAgLmFkZCh1c2FnZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNSZWFkKSB7CiAgICAgICAgICAgIF9yZWFkYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZQogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KG1lbWJlck5hbWUsICgpID0+IHt9KQogICAgICAgICAgICAgICAgLmFkZCh1c2FnZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNXcml0ZSkgewogICAgICAgICAgICBfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChtZW1iZXJOYW1lLCAoKSA9PiB7fSkKICAgICAgICAgICAgICAgIC5hZGQodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB1c2FnZSA9IG5ldyBNZW1iZXJVc2FnZShtZW1iZXIpOwogICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5pbml0KCkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSkgewogICAgICAgIF9tZW1iZXJVc2FnZVttZW1iZXJdID0gdXNhZ2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB1c2FnZTsKICB9CgogIHZvaWQgX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzc01lbWJlcigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2VkQ2FsbGJhY2sgbWVtYmVyVXNlZCwKICAgICAge2Jvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBmYWxzZX0pIHsKICAgIGlmICghbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybjsKICAgIFN0cmluZyBtZW1iZXJOYW1lID0gbWVtYmVyLm5hbWU7CgogICAgTWVtYmVyVXNhZ2UgdXNhZ2UgPSBfbWVtYmVyVXNhZ2VbbWVtYmVyXTsKICAgIGlmICh1c2FnZSA9PSBudWxsKSB7CiAgICAgIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQgPSBuZXcgRW51bVNldDxNZW1iZXJVc2U+KCk7CiAgICAgIHVzYWdlID0gX2dldE1lbWJlclVzYWdlKG1lbWJlciwgdXNlU2V0LAogICAgICAgICAgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpOwogICAgICBpZiAodXNlU2V0LmlzTm90RW1wdHkpIHsKICAgICAgICBpZiAoY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgICB0aHJvdyBuZXcgU3Bhbm5hYmxlQXNzZXJ0aW9uRmFpbHVyZShtZW1iZXIsCiAgICAgICAgICAgICAgJ1VuZW5xdWV1ZWQgdXNhZ2Ugb2YgJG1lbWJlcjogXG5iZWZvcmU6IDxub25lPlxuYWZ0ZXIgOiAkdXNhZ2UnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVtYmVyVXNlZCh1c2FnZS5lbnRpdHksIHVzZVNldCk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBNZW1iZXJVc2FnZSBvcmlnaW5hbCA9IHVzYWdlOwogICAgICBpZiAoY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgdXNhZ2UgPSB1c2FnZS5jbG9uZSgpOwogICAgICB9CiAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1VzZSkgewogICAgICAgIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQgPSBuZXcgRW51bVNldDxNZW1iZXJVc2U+KCk7CiAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljUmVhZCAmJiBfaGFzSW52b2tlZEdldHRlcihtZW1iZXIpKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLnJlYWQoQWNjZXNzZXMuZHluYW1pY0FjY2VzcykpOwogICAgICAgIH0KICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UpIHsKICAgICAgICAgIEl0ZXJhYmxlPENhbGxTdHJ1Y3R1cmU+IGNhbGxTdHJ1Y3R1cmVzID0KICAgICAgICAgICAgICBfZ2V0SW52b2NhdGlvbkNhbGxTdHJ1Y3R1cmVzKG1lbWJlcik7CiAgICAgICAgICBmb3IgKENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSBpbiBjYWxsU3RydWN0dXJlcykgewogICAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmludm9rZShBY2Nlc3Nlcy5keW5hbWljQWNjZXNzLCBjYWxsU3RydWN0dXJlKSk7CiAgICAgICAgICAgIGlmICghdXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNXcml0ZSAmJiBfaGFzSW52b2tlZFNldHRlcihtZW1iZXIpKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLndyaXRlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpIHsKICAgICAgICAgIGlmICghdXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNSZWFkKSB7CiAgICAgICAgICAgIF9yZWFkYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZVttZW1iZXJOYW1lXT8ucmVtb3ZlKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UpIHsKICAgICAgICAgICAgX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZVttZW1iZXJOYW1lXT8ucmVtb3ZlKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNXcml0ZSkgewogICAgICAgICAgICBfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVbbWVtYmVyTmFtZV0/LnJlbW92ZSh1c2FnZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjaGVja0VucXVldWVyQ29uc2lzdGVuY3kgJiYgIW9yaWdpbmFsLmRhdGFFcXVhbHModXNhZ2UpKSB7CiAgICAgICAgICBfZWxlbWVudE1hcC5yZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICAgIG1lbWJlciwKICAgICAgICAgICAgICAnVW5lbnF1ZXVlZCB1c2FnZSBvZiAkbWVtYmVyOiBcbicKICAgICAgICAgICAgICAnYmVmb3JlOiAkb3JpZ2luYWxcbmFmdGVyIDogJHVzYWdlJyk7CiAgICAgICAgfQogICAgICAgIG1lbWJlclVzZWQodXNhZ2UuZW50aXR5LCB1c2VTZXQpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gYWxsTWl4aW5Vc2VzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gdXNlcyA9IF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIubWl4aW5Vc2VzW2Nsc107CiAgICByZXR1cm4gdXNlcyAhPSBudWxsID8gdXNlcyA6IGNvbnN0IDxDbGFzc0VudGl0eT5bXTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJVc2VkRWxlbWVudChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciAmJiAhZWxlbWVudC5pc0Fic3RyYWN0KSB7CiAgICAgIF9saXZlSW5zdGFuY2VNZW1iZXJzLmFkZChlbGVtZW50KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNNZW1iZXJVc2VkKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBfbWVtYmVyVXNhZ2VbbWVtYmVyXT8uaGFzVXNlID8/IGZhbHNlOwogIH0KCiAgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiBwb3B1bGF0ZUhpZXJhcmNoeU5vZGVzKCkgewogICAgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzID0KICAgICAgICBuZXcgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PigpOwoKICAgIC8vIFVwZGF0ZXMgdGhlIGBpc0RpcmVjdGx5SW5zdGFudGlhdGVkYCBhbmQgYGlzSW5kaXJlY3RseUluc3RhbnRpYXRlZGAKICAgIC8vIHByb3BlcnRpZXMgb2YgdGhlIFtDbGFzc0hpZXJhcmNoeU5vZGVdIGZvciBbY2xzXS4KCiAgICB2b2lkIGFkZFN1YnR5cGVzKENsYXNzRW50aXR5IGNscywgSW5zdGFudGlhdGlvbkluZm8gaW5mbykgewogICAgICBpZiAoIWluZm8uaGFzSW5zdGFudGlhdGlvbikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLnVwZGF0ZUNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzKGNscywKICAgICAgICAgIGRpcmVjdGx5SW5zdGFudGlhdGVkOiBpbmZvLmlzRGlyZWN0bHlJbnN0YW50aWF0ZWQsCiAgICAgICAgICBhYnN0cmFjdGx5SW5zdGFudGlhdGVkOiBpbmZvLmlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCk7CgogICAgICAvLyBXYWxrIHRocm91Z2ggdGhlIHN1cGVyY2xhc3NlcywgYW5kIHJlY29yZCB0aGUgdHlwZXMKICAgICAgLy8gaW1wbGVtZW50ZWQgYnkgdGhhdCB0eXBlIG9uIHRoZSBzdXBlcmNsYXNzZXMuCiAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfY2xhc3NRdWVyaWVzLmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgd2hpbGUgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICAgIFNldDxDbGFzc0VudGl0eT4gdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3Nlc09mQ2xzID0KICAgICAgICAgICAgdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3Nlcy5wdXRJZkFic2VudCgKICAgICAgICAgICAgICAgIHN1cGVyY2xhc3MsICgpID0+IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCkpOwogICAgICAgIGZvciAoSW50ZXJmYWNlVHlwZSBjdXJyZW50IGluIF9jbGFzc1F1ZXJpZXMuZ2V0U3VwZXJ0eXBlcyhjbHMpKSB7CiAgICAgICAgICB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzT2ZDbHMuYWRkKGN1cnJlbnQuZWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHN1cGVyY2xhc3MgPSBfY2xhc3NRdWVyaWVzLmdldFN1cGVyQ2xhc3Moc3VwZXJjbGFzcyk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBVc2UgdGhlIFs6c2VlbkNsYXNzZXM6XSBzZXQgdG8gaW5jbHVkZSBub24taW5zdGFudGlhdGVkCiAgICAvLyBjbGFzc2VzOiBpZiB0aGUgc3VwZXJjbGFzcyBvZiB0aGVzZSBjbGFzc2VzIHJlcXVpcmUgUlRJLCB0aGVuCiAgICAvLyB0aGV5IGFsc28gbmVlZCBSVEksIHNvIHRoYXQgYSBjb25zdHJ1Y3RvciBwYXNzZXMgdGhlIHR5cGUKICAgIC8vIHZhcmlhYmxlcyB0byB0aGUgc3VwZXIgY29uc3RydWN0b3IuCiAgICBnZXRJbnN0YW50aWF0aW9uTWFwKCkuZm9yRWFjaChhZGRTdWJ0eXBlcyk7CgogICAgcmV0dXJuIHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXM7CiAgfQoKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGNvbXB1dGVBc3NpZ25lZEluc3RhbmNlTWVtYmVycygpIHsKICAgIFNldDxNZW1iZXJFbnRpdHk+IGFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzID0gbmV3IFNldDxNZW1iZXJFbnRpdHk+KCk7CiAgICBmb3IgKE1lbWJlckVudGl0eSBpbnN0YW5jZU1lbWJlciBpbiBfbGl2ZUluc3RhbmNlTWVtYmVycykgewogICAgICBpZiAoX2hhc0ludm9rZWRTZXR0ZXIoaW5zdGFuY2VNZW1iZXIpKSB7CiAgICAgICAgYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMuYWRkKGluc3RhbmNlTWVtYmVyKTsKICAgICAgfQogICAgfQogICAgYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMuYWRkQWxsKF9maWVsZFNldHRlcnMpOwogICAgcmV0dXJuIGFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgX2NsYXNzSGllcmFyY2h5QnVpbGRlci5yZWdpc3RlckNsYXNzKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW5oZXJpdGVkSW4oCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIENsYXNzRW50aXR5IHR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGUgW21lbWJlcl0gaXRzZWxmIHRvIGF2b2lkIGVucXVldWVpbmcgbWVtYmVycwogICAgLy8gdGhhdCBhcmUgb3ZlcnJpZGRlbi4KICAgIHJldHVybiBpc0luaGVyaXRlZEluQ2xhc3MobWVtYmVyLmVuY2xvc2luZ0NsYXNzLCB0eXBlLCByZWxhdGlvbik7CiAgfQoKICBib29sIGlzSW5oZXJpdGVkSW5DbGFzcyhDbGFzc0VudGl0eSBtZW1iZXJIb2xkaW5nQ2xhc3MsIENsYXNzRW50aXR5IHR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24pIHsKICAgIHN3aXRjaCAocmVsYXRpb24pIHsKICAgICAgY2FzZSBDbGFzc1JlbGF0aW9uLmV4YWN0OgogICAgICAgIHJldHVybiBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLmlzSW5oZXJpdGVkSW5FeGFjdENsYXNzKAogICAgICAgICAgICBtZW1iZXJIb2xkaW5nQ2xhc3MsIHR5cGUpOwogICAgICBjYXNlIENsYXNzUmVsYXRpb24udGhpc0V4cHJlc3Npb246CiAgICAgICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIuaXNJbmhlcml0ZWRJblRoaXNDbGFzcygKICAgICAgICAgICAgbWVtYmVySG9sZGluZ0NsYXNzLCB0eXBlKTsKICAgICAgY2FzZSBDbGFzc1JlbGF0aW9uLnN1YnR5cGU6CiAgICAgICAgaWYgKG1lbWJlckhvbGRpbmdDbGFzcyA9PSBfY29tbW9uRWxlbWVudHMubnVsbENsYXNzIHx8CiAgICAgICAgICAgIG1lbWJlckhvbGRpbmdDbGFzcyA9PSBfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpIHsKICAgICAgICAgIC8vIE1lbWJlcnMgb2YgYE51bGxgIGFuZCBgSlNOdWxsYCBhcmUgYWx3YXlzIHBvdGVudGlhbCB0YXJnZXRzLgogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLmlzSW5oZXJpdGVkSW5TdWJ0eXBlT2YoCiAgICAgICAgICAgIG1lbWJlckhvbGRpbmdDbGFzcywgdHlwZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBDbGFzc1JlbGF0aW9uICRyZWxhdGlvbi4iKTsKICB9CgogIEBvdmVycmlkZQogIEtDbG9zZWRXb3JsZCBjbG9zZVdvcmxkKERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcikgewogICAgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzID0KICAgICAgICBwb3B1bGF0ZUhpZXJhcmNoeU5vZGVzKCk7CgogICAgQmFja2VuZFVzYWdlIGJhY2tlbmRVc2FnZSA9IF9iYWNrZW5kVXNhZ2VCdWlsZGVyLmNsb3NlKCk7CiAgICBfY2xvc2VkID0gdHJ1ZTsKCiAgICBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gbGl2ZU1lbWJlclVzYWdlID0ge307CiAgICBfbWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UpIHsKICAgICAgaWYgKG1lbWJlclVzYWdlLmhhc1VzZSkgewogICAgICAgIGxpdmVNZW1iZXJVc2FnZVttZW1iZXJdID0gbWVtYmVyVXNhZ2U7CiAgICAgICAgYXNzZXJ0KF9wcm9jZXNzZWRNZW1iZXJzLmNvbnRhaW5zKG1lbWJlciksCiAgICAgICAgICAgICJNZW1iZXIgJG1lbWJlciBpcyB1c2VkIGJ1dCBub3QgcHJvY2Vzc2VkOiAkbWVtYmVyVXNhZ2UuIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KCFfcHJvY2Vzc2VkTWVtYmVycy5jb250YWlucyhtZW1iZXIpLAogICAgICAgICAgICAiTWVtYmVyICRtZW1iZXIgaXMgcHJvY2Vzc2VkIGJ1dCBub3QgdXNlZDogJG1lbWJlclVzYWdlLiIpOwogICAgICB9CiAgICB9KTsKICAgIGZvciAoTWVtYmVyRW50aXR5IG1lbWJlciBpbiBfcHJvY2Vzc2VkTWVtYmVycykgewogICAgICBhc3NlcnQoX21lbWJlclVzYWdlLmNvbnRhaW5zS2V5KG1lbWJlciksCiAgICAgICAgICAiTWVtYmVyICRtZW1iZXIgaXMgcHJvY2Vzc2VkIGJ1dCBoYXMgbm90IHVzYWdlLiIpOwogICAgfQoKICAgIFNldDxJbnRlcmZhY2VUeXBlPiBpbnN0YW50aWF0ZWRUeXBlcyA9IG5ldyBTZXQ8SW50ZXJmYWNlVHlwZT4oKTsKICAgIGdldEluc3RhbnRpYXRpb25NYXAoKS5mb3JFYWNoKChfLCBJbnN0YW50aWF0aW9uSW5mbyBpbmZvKSB7CiAgICAgIGlmIChpbmZvLmluc3RhbnRpYXRpb25NYXAgIT0gbnVsbCkgewogICAgICAgIGZvciAoU2V0PEluc3RhbmNlPiBpbnN0YW5jZXMgaW4gaW5mby5pbnN0YW50aWF0aW9uTWFwLnZhbHVlcykgewogICAgICAgICAgZm9yIChJbnN0YW5jZSBpbnN0YW5jZSBpbiBpbnN0YW5jZXMpIHsKICAgICAgICAgICAgaW5zdGFudGlhdGVkVHlwZXMuYWRkKGluc3RhbmNlLnR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gbmV3IEtDbG9zZWRXb3JsZEltcGwoX2VsZW1lbnRNYXAsCiAgICAgICAgb3B0aW9uczogX29wdGlvbnMsCiAgICAgICAgZWxlbWVudEVudmlyb25tZW50OiBfZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGRhcnRUeXBlczogX2RhcnRUeXBlcywKICAgICAgICBjb21tb25FbGVtZW50czogX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIG5hdGl2ZURhdGE6IF9uYXRpdmVEYXRhQnVpbGRlci5jbG9zZSgpLAogICAgICAgIGludGVyY2VwdG9yRGF0YTogX2ludGVyY2VwdG9yRGF0YUJ1aWxkZXIuY2xvc2UoKSwKICAgICAgICBiYWNrZW5kVXNhZ2U6IGJhY2tlbmRVc2FnZSwKICAgICAgICBub1N1Y2hNZXRob2REYXRhOiBfbm9TdWNoTWV0aG9kUmVnaXN0cnkuY2xvc2UoKSwKICAgICAgICBydGlOZWVkQnVpbGRlcjogX3J0aU5lZWRCdWlsZGVyLAogICAgICAgIGZpZWxkQW5hbHlzaXM6IF9hbGxvY2F0b3JBbmFseXNpcywKICAgICAgICBpbXBsZW1lbnRlZENsYXNzZXM6IF9pbXBsZW1lbnRlZENsYXNzZXMsCiAgICAgICAgbGl2ZU5hdGl2ZUNsYXNzZXM6IF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIubGl2ZU5hdGl2ZUNsYXNzZXMsCiAgICAgICAgbGl2ZUluc3RhbmNlTWVtYmVyczogX2xpdmVJbnN0YW5jZU1lbWJlcnMsCiAgICAgICAgYXNzaWduZWRJbnN0YW5jZU1lbWJlcnM6IGNvbXB1dGVBc3NpZ25lZEluc3RhbmNlTWVtYmVycygpLAogICAgICAgIGxpdmVNZW1iZXJVc2FnZTogbGl2ZU1lbWJlclVzYWdlLAogICAgICAgIG1peGluVXNlczogX2NsYXNzSGllcmFyY2h5QnVpbGRlci5taXhpblVzZXMsCiAgICAgICAgdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlczogdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlcywKICAgICAgICBjbGFzc0hpZXJhcmNoeTogX2NsYXNzSGllcmFyY2h5QnVpbGRlci5jbG9zZSgpLAogICAgICAgIGFubm90YXRpb25zRGF0YTogX2Fubm90YXRpb25zRGF0YUJ1aWxkZXIuY2xvc2UoX29wdGlvbnMpLAogICAgICAgIGlzQ2hlY2tzOiBfaXNDaGVja3MsCiAgICAgICAgc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzOiBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMsCiAgICAgICAgZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llczogZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgICB0eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHM6IHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFscywKICAgICAgICBnZW5lcmljTG9jYWxGdW5jdGlvbnM6IF9nZW5lcmljTG9jYWxGdW5jdGlvbnMsCiAgICAgICAgY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXM6CiAgICAgICAgICAgIF9jbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlcywKICAgICAgICBsb2NhbEZ1bmN0aW9uczogX2xvY2FsRnVuY3Rpb25zLAogICAgICAgIGluc3RhbnRpYXRlZFR5cGVzOiBpbnN0YW50aWF0ZWRUeXBlcyk7CiAgICBpZiAocmV0YWlu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aG93IGEgcHJvZ3JhbSBlbGVtZW50IGFmZmVjdHMgb3VyCi8vLyB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBsaXZlIGluIGEgcHJvZ3JhbS4gRm9yIGV4YW1wbGUsIGl0IGNhbiBpbmRpY2F0ZQovLy8gdGhhdCBhIG1ldGhvZCB1c2VzIGEgY2VydGFpbiBmZWF0dXJlLCBvciBhbGxvY2F0ZXMgYSBzcGVjaWZpYyB0eXBlLgovLy8KLy8vIFRoZSBpbXBhY3Qgb2JqZWN0IGNhbiBiZSBjb21wdXRlZCBsb2NhbGx5IGJ5IGluc3BlY3RpbmcganVzdCB0aGUgcmVzb2x1dGlvbgovLy8gaW5mb3JtYXRpb24gb2YgdGhhdCBlbGVtZW50IGFsb25lLiBUaGUgY29tcGlsZXIgdXNlcyBbVW5pdmVyc2VdIGFuZAovLy8gW1dvcmxkXSB0byBjb21iaW5lIHRoZSBpbmZvcm1hdGlvbiBkaXNjb3ZlcmVkIGluIHRoZSBpbXBhY3Qgb2JqZWN0cyBvZgovLy8gYWxsIGVsZW1lbnRzIHJlYWNoYWJsZSBpbiBhbiBhcHBsaWNhdGlvbi4KY2xhc3MgV29ybGRJbXBhY3QgewogIGNvbnN0IFdvcmxkSW1wYWN0KCk7CgogIE1lbWJlckVudGl0eSBnZXQgbWVtYmVyID0+IG51bGw7CgogIEl0ZXJhYmxlPER5bmFtaWNVc2U+IGdldCBkeW5hbWljVXNlcyA9PiBjb25zdCA8RHluYW1pY1VzZT5bXTsKCiAgSXRlcmFibGU8U3RhdGljVXNlPiBnZXQgc3RhdGljVXNlcyA9PiBjb25zdCA8U3RhdGljVXNlPltdOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXBsYWNlIHRoaXMgYnkgY2FsbGVkIGNvbnN0cnVjdG9ycyB3aXRoIHR5cGUKICAvLyBhcmd1bWVudHMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ29sbGVjdCBhbGwgY2hlY2tlZCB0eXBlcyBmb3IgY2hlY2tlZCBtb2RlIHNlcGFyYXRlbHkKICAvLyB0byBzdXBwb3J0IHNlcmlhbGl6YXRpb24uCgogIEl0ZXJhYmxlPFR5cGVVc2U+IGdldCB0eXBlVXNlcyA9PiBjb25zdCA8VHlwZVVzZT5bXTsKCiAgSXRlcmFibGU8Q29uc3RhbnRVc2U+IGdldCBjb25zdGFudFVzZXMgPT4gY29uc3QgPENvbnN0YW50VXNlPltdOwoKICBib29sIGdldCBpc0VtcHR5ID0+IHRydWU7CgogIHZvaWQgYXBwbHkoV29ybGRJbXBhY3RWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHN0YXRpY1VzZXMuZm9yRWFjaCgoU3RhdGljVXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdFN0YXRpY1VzZShtZW1iZXIsIHVzZSkpOwogICAgZHluYW1pY1VzZXMKICAgICAgICAuZm9yRWFjaCgoRHluYW1pY1VzZSB1c2UpID0+IHZpc2l0b3IudmlzaXREeW5hbWljVXNlKG1lbWJlciwgdXNlKSk7CiAgICB0eXBlVXNlcy5mb3JFYWNoKChUeXBlVXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdFR5cGVVc2UobWVtYmVyLCB1c2UpKTsKICAgIGNvbnN0YW50VXNlcwogICAgICAgIC5mb3JFYWNoKChDb25zdGFudFVzZSB1c2UpID0+IHZpc2l0b3IudmlzaXRDb25zdGFudFVzZShtZW1iZXIsIHVzZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gZHVtcCh0aGlzKTsKCiAgc3RhdGljIFN0cmluZyBkdW1wKFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBwcmludE9uKHNiLCB3b3JsZEltcGFjdCk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyB2b2lkIHByaW50T24oU3RyaW5nQnVmZmVyIHNiLCBXb3JsZEltcGFjdCB3b3JsZEltcGFjdCkgewogICAgc2Iud3JpdGUoJ21lbWJlcjogJHt3b3JsZEltcGFjdC5tZW1iZXJ9Jyk7CgogICAgdm9pZCBhZGQoU3RyaW5nIHRpdGxlLCBJdGVyYWJsZSBpdGVyYWJsZSkgewogICAgICBpZiAoaXRlcmFibGUuaXNOb3RFbXB0eSkgewogICAgICAgIHNiLndyaXRlKCdcbiAkdGl0bGU6Jyk7CiAgICAgICAgaXRlcmFibGUuZm9yRWFjaCgoZSkgPT4gc2Iud3JpdGUoJ1xuICAkZScpKTsKICAgICAgfQogICAgfQoKICAgIGFkZCgnZHluYW1pYyB1c2VzJywgd29ybGRJbXBhY3QuZHluYW1pY1VzZXMpOwogICAgYWRkKCdzdGF0aWMgdXNlcycsIHdvcmxkSW1wYWN0LnN0YXRpY1VzZXMpOwogICAgYWRkKCd0eXBlIHVzZXMnLCB3b3JsZEltcGFjdC50eXBlVXNlcyk7CiAgICBhZGQoJ2NvbnN0YW50IHVzZXMnLCB3b3JsZEltcGFjdC5jb25zdGFudFVzZXMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgV29ybGRJbXBhY3RCdWlsZGVyIHsKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1VzZShEeW5hbWljVXNlIGR5bmFtaWNVc2UpOwogIHZvaWQgcmVnaXN0ZXJUeXBlVXNlKFR5cGVVc2UgdHlwZVVzZSk7CiAgdm9pZCByZWdpc3RlclN0YXRpY1VzZShTdGF0aWNVc2Ugc3RhdGljVXNlKTsKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpOwp9CgpjbGFzcyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGV4dGVuZHMgV29ybGRJbXBhY3QgaW1wbGVtZW50cyBXb3JsZEltcGFjdEJ1aWxkZXIgewogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IERvIHdlIGJlbmVmaXQgZnJvbSBsYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZQogIC8vIFtTZXRsZXRdcz8KICBTZXQ8RHluYW1pY1VzZT4gX2R5bmFtaWNVc2VzOwogIFNldDxTdGF0aWNVc2U+IF9zdGF0aWNVc2VzOwogIFNldDxUeXBlVXNlPiBfdHlwZVVzZXM7CiAgU2V0PENvbnN0YW50VXNlPiBfY29uc3RhbnRVc2VzOwoKICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CgogIFdvcmxkSW1wYWN0QnVpbGRlckltcGwuaW50ZXJuYWwoCiAgICAgIHRoaXMuX2R5bmFtaWNVc2VzLCB0aGlzLl9zdGF0aWNVc2VzLCB0aGlzLl90eXBlVXNlcywgdGhpcy5fY29uc3RhbnRVc2VzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PgogICAgICBfZHluYW1pY1VzZXMgPT0gbnVsbCAmJgogICAgICBfc3RhdGljVXNlcyA9PSBudWxsICYmCiAgICAgIF90eXBlVXNlcyA9PSBudWxsICYmCiAgICAgIF9jb25zdGFudFVzZXMgPT0gbnVsbDsKCiAgLy8vIENvcHkgdXNlcyBpbiBbaW1wYWN0XSB0byB0aGlzIGltcGFjdCBidWlsZGVyLgogIHZvaWQgYWRkSW1wYWN0KFdvcmxkSW1wYWN0IGltcGFjdCkgewogICAgaWYgKGltcGFjdC5pc0VtcHR5KSByZXR1cm47CiAgICBpbXBhY3QuZHluYW1pY1VzZXMuZm9yRWFjaChyZWdpc3RlckR5bmFtaWNVc2UpOwogICAgaW1wYWN0LnN0YXRpY1VzZXMuZm9yRWFjaChyZWdpc3RlclN0YXRpY1VzZSk7CiAgICBpbXBhY3QudHlwZVVzZXMuZm9yRWFjaChyZWdpc3RlclR5cGVVc2UpOwogICAgaW1wYWN0LmNvbnN0YW50VXNlcy5mb3JFYWNoKHJlZ2lzdGVyQ29uc3RhbnRVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNVc2UoRHluYW1pY1VzZSBkeW5hbWljVXNlKSB7CiAgICBhc3NlcnQoZHluYW1pY1VzZSAhPSBudWxsKTsKICAgIF9keW5hbWljVXNlcyA/Pz0gbmV3IFNldGxldDxEeW5hbWljVXNlPigpOwogICAgX2R5bmFtaWNVc2VzLmFkZChkeW5hbWljVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPER5bmFtaWNVc2U+IGdldCBkeW5hbWljVXNlcyB7CiAgICByZXR1cm4gX2R5bmFtaWNVc2VzICE9IG51bGwgPyBfZHluYW1pY1VzZXMgOiBjb25zdCA8RHluYW1pY1VzZT5bXTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJUeXBlVXNlKFR5cGVVc2UgdHlwZVVzZSkgewogICAgYXNzZXJ0KHR5cGVVc2UgIT0gbnVsbCk7CiAgICBfdHlwZVVzZXMgPz89IG5ldyBTZXRsZXQ8VHlwZVVzZT4oKTsKICAgIF90eXBlVXNlcy5hZGQodHlwZVVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUeXBlVXNlPiBnZXQgdHlwZVVzZXMgewogICAgcmV0dXJuIF90eXBlVXNlcyAhPSBudWxsID8gX3R5cGVVc2VzIDogY29uc3QgPFR5cGVVc2U+W107CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UpIHsKICAgIGFzc2VydChzdGF0aWNVc2UgIT0gbnVsbCk7CiAgICBfc3RhdGljVXNlcyA/Pz0gbmV3IFNldGxldDxTdGF0aWNVc2U+KCk7CiAgICBfc3RhdGljVXNlcy5hZGQoc3RhdGljVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFN0YXRpY1VzZT4gZ2V0IHN0YXRpY1VzZXMgewogICAgcmV0dXJuIF9zdGF0aWNVc2VzICE9IG51bGwgPyBfc3RhdGljVXNlcyA6IGNvbnN0IDxTdGF0aWNVc2U+W107CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpIHsKICAgIGFzc2VydChjb25zdGFudFVzZSAhPSBudWxsKTsKICAgIF9jb25zdGFudFVzZXMgPz89IG5ldyBTZXRsZXQ8Q29uc3RhbnRVc2U+KCk7CiAgICBfY29uc3RhbnRVc2VzLmFkZChjb25zdGFudFVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb25zdGFudFVzZT4gZ2V0IGNvbnN0YW50VXNlcyB7CiAgICByZXR1cm4gX2NvbnN0YW50VXNlcyAhPSBudWxsID8gX2NvbnN0YW50VXNlcyA6IGNvbnN0IDxDb25zdGFudFVzZT5bXTsKICB9Cn0KCi8vLyBbV29ybGRJbXBhY3RCdWlsZGVyXSB0aGF0IGNhbiBjcmVhdGUgYW5kIGNvbGxlY3QgYSBzZXF1ZW5jZSBvZgovLy8gW1dvcmxkSW1wYWN0XXMuCmNsYXNzIFN0YWdlZFdvcmxkSW1wYWN0QnVpbGRlciBpbXBsZW1lbnRzIFdvcmxkSW1wYWN0QnVpbGRlciB7CiAgZmluYWwgYm9vbCBjb2xsZWN0SW1wYWN0czsKICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIF9jdXJyZW50QnVpbGRlcjsKICBMaXN0PFdvcmxkSW1wYWN0QnVpbGRlckltcGw+IF9idWlsZGVycyA9IDxXb3JsZEltcGFjdEJ1aWxkZXJJbXBsPltdOwoKICBTdGFnZWRXb3JsZEltcGFjdEJ1aWxkZXIoe3RoaXMuY29sbGVjdEltcGFjdHM6IGZhbHNlfSk7CgogIHZvaWQgX2Vuc3VyZUJ1aWxkZXIoKSB7CiAgICBpZiAoX2N1cnJlbnRCdWlsZGVyID09IG51bGwpIHsKICAgICAgX2N1cnJlbnRCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgICAgaWYgKGNvbGxlY3RJbXBhY3RzKSB7CiAgICAgICAgX2J1aWxkZXJzLmFkZChfY3VycmVudEJ1aWxkZXIpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVHlwZVVzZShUeXBlVXNlIHR5cGVVc2UpIHsKICAgIF9lbnN1cmVCdWlsZGVyKCk7CiAgICBfY3VycmVudEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKHR5cGVVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNVc2UoRHluYW1pY1VzZSBkeW5hbWljVXNlKSB7CiAgICBfZW5zdXJlQnVpbGRlcigpOwogICAgX2N1cnJlbnRCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShkeW5hbWljVXNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgX2Vuc3VyZUJ1aWxkZXIoKTsKICAgIF9jdXJyZW50QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0YW50VXNlKENvbnN0YW50VXNlIGNvbnN0YW50VXNlKSB7CiAgICBfZW5zdXJlQnVpbGRlcigpOwogICAgX2N1cnJlbnRCdWlsZGVyLnJlZ2lzdGVyQ29uc3RhbnRVc2UoY29uc3RhbnRVc2UpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtXb3JsZEltcGFjdF0gYnVpbHQgc28gZmFyIHdpdGggdGhpcyBidWlsZGVyLiBUaGUgYnVpbGRlcgogIC8vLyBpcyByZXNldCwgYW5kIGlmIFtjb2xsZWN0SW1wYWN0c10gaXMgYHRydWVgIHRoZSBpbXBhY3QgaXMgY2FjaGVkIGZvcgogIC8vLyBbd29ybGRJbXBhY3RzXS4KICBXb3JsZEltcGFjdCBmbHVzaCgpIHsKICAgIGlmIChfY3VycmVudEJ1aWxkZXIgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IFdvcmxkSW1wYWN0KCk7CiAgICBXb3JsZEltcGFjdCB3b3JsZEltcGFjdCA9IF9jdXJyZW50QnVpbGRlcjsKICAgIF9jdXJyZW50QnVpbGRlciA9IG51bGw7CiAgICByZXR1cm4gd29ybGRJbXBhY3Q7CiAgfQoKICAvLy8gSWYgW2NvbGxlY3RJbXBhY3RzXSBpcyBgdHJ1ZWAgdGhpcyByZXR1cm5zIGFsbCBbV29ybGRJbXBhY3RdcyBidWlsdCB3aXRoCiAgLy8vIHRoaXMgYnVpbGRlci4KICBJdGVyYWJsZTxXb3JsZEltcGFjdD4gZ2V0IHdvcmxkSW1wYWN0cyA9PiBfYnVpbGRlcnM7Cn0KCi8vLyBNdXRhYmxlIGltcGxlbWVudGF0aW9uIG9mIFtXb3JsZEltcGFjdF0gdXNlZCB0byB0cmFuc2Zvcm0KLy8vIFtSZXNvbHV0aW9uSW1wYWN0XSBvciBbQ29kZWdlbkltcGFjdF0gdG8gW1dvcmxkSW1wYWN0XS4KY2xhc3MgVHJhbnNmb3JtZWRXb3JsZEltcGFjdCBpbXBsZW1lbnRzIFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXIgewogIGZpbmFsIFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0OwoKICBTZXRsZXQ8U3RhdGljVXNlPiBfc3RhdGljVXNlczsKICBTZXRsZXQ8VHlwZVVzZT4gX3R5cGVVc2VzOwogIFNldGxldDxEeW5hbWljVXNlPiBfZHluYW1pY1VzZXM7CiAgU2V0bGV0PENvbnN0YW50VXNlPiBfY29uc3RhbnRVc2VzOwoKICBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0KHRoaXMud29ybGRJbXBhY3QpOwoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgZ2V0IG1lbWJlciA9PiB3b3JsZEltcGFjdC5tZW1iZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIHdvcmxkSW1wYWN0LmlzRW1wdHkgJiYKICAgICAgICBfc3RhdGljVXNlcyA9PSBudWxsICYmCiAgICAgICAgX3R5cGVVc2VzID09IG51bGwgJiYKICAgICAgICBfZHluYW1pY1VzZXMgPT0gbnVsbCAmJgogICAgICAgIF9jb25zdGFudFVzZXMgPT0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPER5bmFtaWNVc2U+IGdldCBkeW5hbWljVXNlcyB7CiAgICByZXR1cm4gX2R5bmFtaWNVc2VzICE9IG51bGwgPyBfZHluYW1pY1VzZXMgOiB3b3JsZEltcGFjdC5keW5hbWljVXNlczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSkgewogICAgaWYgKF9keW5hbWljVXNlcyA9PSBudWxsKSB7CiAgICAgIF9keW5hbWljVXNlcyA9IG5ldyBTZXRsZXQ8RHluYW1pY1VzZT4oKTsKICAgICAgX2R5bmFtaWNVc2VzLmFkZEFsbCh3b3JsZEltcGFjdC5keW5hbWljVXNlcyk7CiAgICB9CiAgICBfZHluYW1pY1VzZXMuYWRkKGR5bmFtaWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclR5cGVVc2UoVHlwZVVzZSB0eXBlVXNlKSB7CiAgICBpZiAoX3R5cGVVc2VzID09IG51bGwpIHsKICAgICAgX3R5cGVVc2VzID0gbmV3IFNldGxldDxUeXBlVXNlPigpOwogICAgICBfdHlwZVVzZXMuYWRkQWxsKHdvcmxkSW1wYWN0LnR5cGVVc2VzKTsKICAgIH0KICAgIF90eXBlVXNlcy5hZGQodHlwZVVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUeXBlVXNlPiBnZXQgdHlwZVVzZXMgewogICAgcmV0dXJuIF90eXBlVXNlcyAhPSBudWxsID8gX3R5cGVVc2VzIDogd29ybGRJbXBhY3QudHlwZVVzZXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UpIHsKICAgIGlmIChfc3RhdGljVXNlcyA9PSBudWxsKSB7CiAgICAgIF9zdGF0aWNVc2VzID0gbmV3IFNldGxldDxTdGF0aWNVc2U+KCk7CiAgICAgIF9zdGF0aWNVc2VzLmFkZEFsbCh3b3JsZEltcGFjdC5zdGF0aWNVc2VzKTsKICAgIH0KICAgIF9zdGF0aWNVc2VzLmFkZChzdGF0aWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U3RhdGljVXNlPiBnZXQgc3RhdGljVXNlcyB7CiAgICByZXR1cm4gX3N0YXRpY1VzZXMgIT0gbnVsbCA/IF9zdGF0aWNVc2VzIDogd29ybGRJbXBhY3Quc3RhdGljVXNlczsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VXNlPiBnZXQgY29uc3RhbnRVc2VzIHsKICAgIHJldHVybiBfY29uc3RhbnRVc2VzICE9IG51bGwgPyBfY29uc3RhbnRVc2VzIDogd29ybGRJbXBhY3QuY29uc3RhbnRVc2VzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0YW50VXNlKENvbnN0YW50VXNlIGNvbnN0YW50VXNlKSB7CiAgICBpZiAoX2NvbnN0YW50VXNlcyA9PSBudWxsKSB7CiAgICAgIF9jb25zdGFudFVzZXMgPSBuZXcgU2V0bGV0PENvbnN0YW50VXNlPigpOwogICAgICBfY29uc3RhbnRVc2VzLmFkZEFsbCh3b3JsZEltcGFjdC5jb25zdGFudFVzZXMpOwogICAgfQogICAgX2NvbnN0YW50VXNlcy5hZGQoY29uc3RhbnRVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseShXb3JsZEltcGFjdFZpc2l0b3IgdmlzaXRvcikgewogICAgc3RhdGljVXNlcy5mb3JFYWNoKChTdGF0aWNVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0U3RhdGljVXNlKG1lbWJlciwgdXNlKSk7CiAgICBkeW5hbWljVXNlcwogICAgICAgIC5mb3JFYWNoKChEeW5hbWljVXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdER5bmFtaWNVc2UobWVtYmVyLCB1c2UpKTsKICAgIHR5cGVVc2VzLmZvckVhY2goKFR5cGVVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0VHlwZVVzZShtZW1iZXIsIHVzZSkpOwogICAgY29uc3RhbnRVc2VzCiAgICAgICAgLmZvckVhY2goKENvbnN0YW50VXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdENvbnN0YW50VXNlKG1lbWJlciwgdXNlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnVHJhbnNmb3JtZWRXb3JsZEltcGFjdCgkd29ybGRJbXBhY3QpJyk7CiAgICBXb3JsZEltcGFjdC5wcmludE9uKHNiLCB0aGlzKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIENvbnN0YW50IHVzZWQgdG8gZGVub3RlIGEgc3BlY2lmaWMgdXNlIG9mIGEgW1dvcmxkSW1wYWN0XS4KY2xhc3MgSW1wYWN0VXNlQ2FzZSB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIGNvbnN0IEltcGFjdFVzZUNhc2UodGhpcy5uYW1lKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0ltcGFjdFVzZUNhc2UoJG5hbWUpJzsKfQoKLy8vIFN0cmF0ZWd5IHVzZWQgZm9yIHByb2Nlc3NpbmcgW1dvcmxkSW1wYWN0XSBvYmplY3QgaW4gdmFyaW91cyB1c2UgY2FzZXMuCmNsYXNzIEltcGFjdFN0cmF0ZWd5IHsKICBjb25zdCBJbXBhY3RTdHJhdGVneSgpOwoKICAvLy8gQXBwbGllcyBbaW1wYWN0XSB0byBbdmlzaXRvcl0gZm9yIHRoZSBbaW1wYWN0VXNlQ2FzZV0gb2YgW2ltcGFjdFNvdXJjZV0uCiAgdm9pZCB2aXNpdEltcGFjdCh2YXIgaW1wYWN0U291cmNlLCBXb3JsZEltcGFjdCBpbXBhY3QsCiAgICAgIFdvcmxkSW1wYWN0VmlzaXRvciB2aXNpdG9yLCBJbXBhY3RVc2VDYXNlIGltcGFjdFVzZUNhc2UpIHsKICAgIC8vIEFwcGx5IHVuY29uZGl0aW9uYWxseS4KICAgIGltcGFjdC5hcHBseSh2aXNpdG9yKTsKICB9CgogIC8vLyBOb3RpZmllcyB0aGUgc3RyYXRlZ3kgdGhhdCBubyBtb3JlIGltcGFjdHMgb2YgW2ltcGFjdFVzZUNhc2VdIHdpbGwgYmUKICAvLy8gYXBwbGllZC4KICB2b2lkIG9uSW1wYWN0VXNlZChJbXBhY3RVc2VDYXNlIGltcGFjdFVzZUNhc2UpIHsKICAgIC8vIERvIG5vdGhpbmcuCiAgfQp9CgovLy8gVmlzaXRvciB1c2VkIHRvIHByb2Nlc3MgdGhlIHVzZXMgb2YgYSBbV29ybGRJbXBhY3RdLgphYnN0cmFjdCBjbGFzcyBXb3JsZEltcGFjdFZpc2l0b3IgewogIHZvaWQgdmlzaXRTdGF0aWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgU3RhdGljVXNlIHN0YXRpY1VzZSk7CiAgdm9pZCB2aXNpdER5bmFtaWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRHluYW1pY1VzZSBkeW5hbWljVXNlKTsKICB2b2lkIHZpc2l0VHlwZVVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBUeXBlVXNlIHR5cGVVc2UpOwogIHZvaWQgdmlzaXRDb25zdGFudFVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBDb25zdGFudFVzZSB0eXBlVXNlKTsKfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZXNlIHdoZW4gd2UgZ2V0IGFub255bW91cyBsb2NhbCBjbGFzc2VzLgp0eXBlZGVmIHZvaWQgVmlzaXRVc2U8VT4oTWVtYmVyRW50aXR5IG1lbWJlciwgVSB1c2UpOwoKY2xhc3MgV29ybGRJbXBhY3RWaXNpdG9ySW1wbCBpbXBsZW1lbnRzIFdvcmxkSW1wYWN0VmlzaXRvciB7CiAgZmluYWwgVmlzaXRVc2U8U3RhdGljVXNlPiBfdmlzaXRTdGF0aWNVc2U7CiAgZmluYWwgVmlzaXRVc2U8RHluYW1pY1VzZT4gX3Zpc2l0RHluYW1pY1VzZTsKICBmaW5hbCBWaXNpdFVzZTxUeXBlVXNlPiBfdmlzaXRUeXBlVXNlOwogIGZpbmFsIFZpc2l0VXNlPENvbnN0YW50VXNlPiBfdmlzaXRDb25zdGFudFVzZTsKCiAgV29ybGRJbXBhY3RWaXNpdG9ySW1wbCgKICAgICAge1Zpc2l0VXNlPFN0YXRpY1VzZT4gdmlzaXRTdGF0aWNVc2UsCiAgICAgIFZpc2l0VXNlPER5bmFtaWNVc2U+IHZpc2l0RHluYW1pY1VzZSwKICAgICAgVmlzaXRVc2U8VHlwZVVzZT4gdmlzaXRUeXBlVXNlLAogICAgICBWaXNpdFVzZTxDb25zdGFudFVzZT4gdmlzaXRDb25zdGFudFVzZX0pCiAgICAgIDogX3Zpc2l0U3RhdGljVXNlID0gdmlzaXRTdGF0aWNVc2UsCiAgICAgICAgX3Zpc2l0RHluYW1pY1VzZSA9IHZpc2l0RHluYW1pY1VzZSwKICAgICAgICBfdmlzaXRUeXBlVXNlID0gdmlzaXRUeXBlVXNlLAogICAgICAgIF92aXNpdENvbnN0YW50VXNlID0gdmlzaXRDb25zdGFudFVzZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY1VzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdGF0aWNVc2UgdXNlKSB7CiAgICBpZiAoX3Zpc2l0U3RhdGljVXNlICE9IG51bGwpIHsKICAgICAgX3Zpc2l0U3RhdGljVXNlKG1lbWJlciwgdXNlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIER5bmFtaWNVc2UgdXNlKSB7CiAgICBpZiAoX3Zpc2l0RHluYW1pY1VzZSAhPSBudWxsKSB7CiAgICAgIF92aXNpdER5bmFtaWNVc2UobWVtYmVyLCB1c2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB1c2UpIHsKICAgIGlmIChfdmlzaXRUeXBlVXNlICE9IG51bGwpIHsKICAgICAgX3Zpc2l0VHlwZVVzZShtZW1iZXIsIHVzZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RhbnRVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgQ29uc3RhbnRVc2UgdXNlKSB7CiAgICBpZiAoX3Zpc2l0Q29uc3RhbnRVc2UgIT0gbnVsbCkgewogICAgICBfdmlzaXRDb25zdGFudFVzZShtZW1iZXIsIHVzZSk7CiAgICB9CiAgfQp9CoGSAE5OPAEnASQoEwFGHARRTEgEUEhLLhQXASMBQAE9AUgQUB8BNwFDARwBK1AQTEoRTgQBDCMBMCoeGgQBQi8BMCEgNQgGATIwLDQEAgEkMikvNQIBUUgQIB4aIgEcASNQAQwWHh0bHQE0JyA0Mi42BAEMMyAvIgQBDClHBAEMKh0pHAQBDCM+BAEMMB8tIAQBDCdEBAEMNiExJAQBDCtKBAIBQxQ/HSpHAToBGiM2HCgIBgQBDCoWLgQBDDMWNAQBDDAWMgQBDDYWNgQBTEsWGD0vHBgEAU8UNwIBPjxKIQEhHSMlASwBDDEBDBUiHx0gHwQBDClKBAEMMyAvNAYiBAEMKh0pLgYcBAEMI0EEAQwwHy0yBiAEAQwnRwQBDCtNBAEMNiExNgYkBAEMK1AQTEoRTgQBDBYqNiMaBAIBPxYVASIBDC8CAUwXGgFPOUEeGwQBTA8zEwQCATkkQUQ7QwIBSjYBPS0vKTEBGissJi8qLCYuAQw8IyQGBAEMPiQlBgQBDDghIgYEAQxAJSYGBAIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0KHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3dvcmxkLmRhcnSykS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMud29ybGQ7CgppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbl9lbGVtZW50cy5kYXJ0JwogICAgc2hvdwogICAgICAgIEpDb21tb25FbGVtZW50cywKICAgICAgICBKRWxlbWVudEVudmlyb25tZW50LAogICAgICAgIEtDb21tb25FbGVtZW50cywKICAgICAgICBLRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJ2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnZGlhZ25vc3RpY3MvZGlhZ25vc3RpY19saXN0ZW5lci5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICdqc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnIHNob3cgSkZpZWxkQW5hbHlzaXMsIEtGaWVsZEFuYWx5c2lzOwppbXBvcnQgJ2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0JyBzaG93IEJhY2tlbmRVc2FnZTsKaW1wb3J0ICdqc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCcgc2hvdyBJbnRlcmNlcHRvckRhdGE7CmltcG9ydCAnanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JyBzaG93IE5hdGl2ZURhdGE7CmltcG9ydCAnanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JyBzaG93IE5vU3VjaE1ldGhvZERhdGE7CmltcG9ydCAnanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCcgc2hvdyBSdW50aW1lVHlwZXNOZWVkOwppbXBvcnQgJ2pzX21vZGVsL2xvY2Fscy5kYXJ0JzsKaW1wb3J0ICdqc19lbWl0dGVyL3NvcnRlci5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAndW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CgovLy8gQ29tbW9uIHN1cGVyaW50ZXJmYWNlIGZvciBbT3BlbldvcmxkXSBhbmQgW0pDbG9zZWRXb3JsZF0uCmFic3RyYWN0IGNsYXNzIFdvcmxkIHt9CgovLy8gVGhlIFtKQ2xvc2VkV29ybGRdIHJlcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uIGtub3duIGFib3V0IGEgcHJvZ3JhbSB3aGVuCi8vLyBjb21waWxpbmcgd2l0aCBjbG9zZWQtd29ybGQgc2VtYW50aWNzLgovLy8KLy8vIEdpdmVuIHRoZSBlbnRyeXBvaW50IG9mIGFuIGFwcGxpY2F0aW9uLCB3ZSBjYW4gdHJhY2sgd2hhdCdzIHJlYWNoYWJsZSBmcm9tCi8vLyBpdCwgd2hhdCBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgd2hhdCBjbGFzc2VzIGFyZSBhbGxvY2F0ZWQsIHdoaWNoIG5hdGl2ZQovLy8gSmF2YVNjcmlwdCB0eXBlcyBhcmUgdG91Y2hlZCwgd2hhdCBsYW5ndWFnZSBmZWF0dXJlcyBhcmUgdXNlZCwgYW5kIHNvIG9uLgovLy8gVGhpcyBwcmVjaXNlIGtub3dsZWRnZSBhYm91dCB3aGF0J3MgbGl2ZSBpbiB0aGUgcHJvZ3JhbSBpcyBsYXRlciB1c2VkIGluCi8vLyBvcHRpbWl6YXRpb25zIGFuZCBvdGhlciBjb21waWxlciBkZWNpc2lvbnMgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdGhpcyBzaG91bGQganVzdCBiZSBjYWxsZWQgdGhlIEpXb3JsZC4KYWJzdHJhY3QgY2xhc3MgSkNsb3NlZFdvcmxkIGltcGxlbWVudHMgV29ybGQgewogIEpGaWVsZEFuYWx5c2lzIGdldCBmaWVsZEFuYWx5c2lzOwoKICBCYWNrZW5kVXNhZ2UgZ2V0IGJhY2tlbmRVc2FnZTsKCiAgTmF0aXZlRGF0YSBnZXQgbmF0aXZlRGF0YTsKCiAgSW50ZXJjZXB0b3JEYXRhIGdldCBpbnRlcmNlcHRvckRhdGE7CgogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudDsKCiAgRGFydFR5cGVzIGdldCBkYXJ0VHlwZXM7CgogIEpDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CgogIC8vLyBSZXR1cm5zIHRoZSBbQWJzdHJhY3RWYWx1ZURvbWFpbl0gdXNlZCBpbiB0aGUgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlLgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IGFic3RyYWN0VmFsdWVEb21haW47CgogIFJ1bnRpbWVUeXBlc05lZWQgZ2V0IHJ0aU5lZWQ7CgogIE5vU3VjaE1ldGhvZERhdGEgZ2V0IG5vU3VjaE1ldGhvZERhdGE7CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgbGl2ZU5hdGl2ZUNsYXNzZXM7CgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IHByb2Nlc3NlZE1lbWJlcnM7CgogIENsYXNzSGllcmFyY2h5IGdldCBjbGFzc0hpZXJhcmNoeTsKCiAgQW5ub3RhdGlvbnNEYXRhIGdldCBhbm5vdGF0aW9uc0RhdGE7CgogIEdsb2JhbExvY2Fsc01hcCBnZXQgZ2xvYmFsTG9jYWxzTWFwOwogIENsb3N1cmVEYXRhIGdldCBjbG9zdXJlRGF0YUxvb2t1cDsKCiAgT3V0cHV0VW5pdERhdGEgZ2V0IG91dHB1dFVuaXREYXRhOwoKICAvLy8gVGhlIFtTb3J0ZXJdIHVzZWQgZm9yIHNvcnRpbmcgZWxlbWVudHMgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLgogIFNvcnRlciBnZXQgc29ydGVyOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgaW1wbGVtZW50ZWQgYnkgYW4gaW5zdGFudGlhdGVkIGNsYXNzLgogIGJvb2wgaXNJbXBsZW1lbnRlZChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbW9zdCBzcGVjaWZpYyBzdWJjbGFzcyBvZiBbY2xzXSAoaW5jbHVkaW5nIFtjbHNdKSB0aGF0IGlzCiAgLy8vIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBvciBhIHN1cGVyY2xhc3Mgb2YgYWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZAogIC8vLyBzdWJjbGFzc2VzLiBJZiBbY2xzXSBpcyBub3QgaW5zdGFudGlhdGVkLCBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgQ2xhc3NFbnRpdHkgZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBtb3N0IHNwZWNpZmljIHN1YnR5cGUgb2YgW2Nsc10gKGluY2x1ZGluZyBbY2xzXSkgdGhhdCBpcwogIC8vLyBkaXJlY3RseSBpbnN0YW50aWF0ZWQgb3IgYSBzdXBlcmNsYXNzIG9mIGFsbCBkaXJlY3RseSBpbnN0YW50aWF0ZWQKICAvLy8gc3VidHlwZXMuIElmIG5vIHN1YnR5cGVzIG9mIFtjbHNdIGFyZSBpbnN0YW50aWF0ZWQsIGBudWxsYCBpcyByZXR1cm5lZC4KICBDbGFzc0VudGl0eSBnZXRMdWJPZkluc3RhbnRpYXRlZFN1YnR5cGVzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGNvbW1vbiBzdXBlcnR5cGVzIG9mIHRoZSBbY2xhc3Nlc10uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNvbW1vblN1cGVydHlwZXNPZihJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3Nlcyk7CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGxpdmUgbWl4aW4gYXBwbGljYXRpb25zIHRoYXQgbWl4aW4gW2Nsc10uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IG1peGluVXNlc09mKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBtaXhlZCBpbnRvIGEgbGl2ZSBjbGFzcy4KICBib29sIGlzVXNlZEFzTWl4aW4oQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFueSBsaXZlIGNsYXNzIHRoYXQgbWl4ZXMgaW4gW2Nsc10gaW1wbGVtZW50cyBbdHlwZV0uCiAgYm9vbCBoYXNBbnlTdWJjbGFzc09mTWl4aW5Vc2VUaGF0SW1wbGVtZW50cygKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0VudGl0eSB0eXBlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFueSBsaXZlIGNsYXNzIHRoYXQgbWl4ZXMgaW4gW21peGluXSBpcyBhbHNvIGEgc3ViY2xhc3MKICAvLy8gb2YgW3N1cGVyY2xhc3NdLgogIGJvb2wgaGFzQW55U3ViY2xhc3NUaGF0TWl4ZXMoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcywgQ2xhc3NFbnRpdHkgbWl4aW4pOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gb3IgYW55IHN1cGVyY2xhc3MgbWl4ZXMgaW4gW21peGluXS4KICBib29sIGlzU3ViY2xhc3NPZk1peGluVXNlT2YoQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0VudGl0eSBtaXhpbik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBldmVyeSBzdWJ0eXBlIG9mIFt4XSBpcyBhIHN1YmNsYXNzIG9mIFt5XSBvciBhIHN1YmNsYXNzCiAgLy8vIG9mIGEgbWl4aW4gYXBwbGljYXRpb24gb2YgW3ldLgogIGJvb2wgZXZlcnlTdWJ0eXBlSXNTdWJjbGFzc09mT3JNaXhpblVzZU9mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IHN1YmNsYXNzIG9mIFtzdXBlcmNsYXNzXSBpbXBsZW1lbnRzIFt0eXBlXS4KICBib29sIGhhc0FueVN1YmNsYXNzVGhhdEltcGxlbWVudHMoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcywgQ2xhc3NFbnRpdHkgdHlwZSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhIGNhbGwgb2YgW3NlbGVjdG9yXSBvbiBbY2xzXSBhbmQvb3Igc3ViY2xhc3Nlcy9zdWJ0eXBlcwogIC8vLyBuZWVkIG5vU3VjaE1ldGhvZCBoYW5kbGluZy4KICAvLy8KICAvLy8gSWYgdGhlIHJlY2VpdmVyIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhIG1lbWJlciB0aGF0IG1hdGNoZXMgd2hhdCB3ZSdyZQogIC8vLyBsb29raW5nIGZvciwgdGhlcmUncyBubyBuZWVkIHRvIGludHJvZHVjZSBhIG5vU3VjaE1ldGhvZCBoYW5kbGVyLiBJdCB3aWxsCiAgLy8vIG5ldmVyIGJlIGNhbGxlZC4KICAvLy8KICAvLy8gQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBjbGFzcyBoaWVyYXJjaHk6CiAgLy8vCiAgLy8vICAgICAgICAgICAgICAgICAgIEEgICAgPC0tIG5vU3VjaE1ldGhvZAogIC8vLyAgICAgICAgICAgICAgICAgIC8gXAogIC8vLyAgICAgICAgICAgICAgICAgQyAgIEIgIDwtLSBmb28KICAvLy8KICAvLy8gSWYgd2Uga25vdyB3ZSdyZSBjYWxsaW5nIGZvbyBvbiBhbiBvYmplY3Qgb2YgdHlwZSBCIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKICAvLy8gYWJvdXQgdGhlIG5vU3VjaE1ldGhvZCBtZXRob2QgaW4gQSBiZWNhdXNlIG9iamVjdHMgb2YgdHlwZSBCIGltcGxlbWVudAogIC8vLyBmb28uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBlbmQgdXAgY2FsbGluZyBmb28gb24gc29tZXRoaW5nIG9mIHR5cGUgQyB3ZQogIC8vLyBoYXZlIHRvIGFkZCBhIGhhbmRsZXIgZm9yIGl0LgogIC8vLwogIC8vLyBJZiB0aGUgaG9sZGVycyBvZiBhbGwgdXNlci1kZWZpbmVkIG5vU3VjaE1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBtaWdodAogIC8vLyBiZSBhcHBsaWNhYmxlIHRvIHRoZSByZWNlaXZlciB0eXBlIGhhdmUgYSBtYXRjaGluZyBtZW1iZXIgZm9yIHRoZSBjdXJyZW50CiAgLy8vIG5hbWUgYW5kIHNlbGVjdG9yLCB3ZSBhdm9pZCBpbnRyb2R1Y2luZyBhIG5vU3VjaE1ldGhvZCBoYW5kbGVyLgogIC8vLwogIC8vLyBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGlzIGNsYXNzIGhpZXJhcmNoeToKICAvLy8KICAvLy8gICAgICAgICAgICAgICAgICAgICAgICBBICAgIDwtLSBmb28KICAvLy8gICAgICAgICAgICAgICAgICAgICAgIC8gXAogIC8vLyAgICBub1N1Y2hNZXRob2QgLS0+ICBCICAgQyAgPC0tIGJhcgogIC8vLyAgICAgICAgICAgICAgICAgICAgICB8ICAgfAogIC8vLyAgICAgICAgICAgICAgICAgICAgICBDICAgRCAgPC0tIG5vU3VjaE1ldGhvZAogIC8vLwogIC8vLyBXaGVuIGNhbGxpbmcgZm9vIG9uIGFuIG9iamVjdCBvZiB0eXBlIEEsIHdlIGtub3cgdGhhdCB0aGUgaW1wbGVtZW50YXRpb25zCiAgLy8vIG9mIG5vU3VjaE1ldGhvZCBhcmUgaW4gdGhlIGNsYXNzZXMgQiBhbmQgRCB0aGF0IGFsc28gKGluZGlyZWN0bHkpCiAgLy8vIGltcGxlbWVudCBmb28sIHNvIHdlIGRvIG5vdCBuZWVkIGEgaGFuZGxlciBmb3IgaXQuCiAgLy8vCiAgLy8vIElmIHdlJ3JlIGNhbGxpbmcgYmFyIG9uIGFuIG9iamVjdCBvZiB0eXBlIEQsIHdlIGRvbid0IG5lZWQgdGhlIGhhbmRsZXIKICAvLy8gZWl0aGVyIGJlY2F1c2UgYWxsIG9iamVjdHMgb2YgdHlwZSBEIGltcGxlbWVudCBiYXIgdGhyb3VnaCBpbmhlcml0YW5jZS4KICAvLy8KICAvLy8gSWYgd2UncmUgY2FsbGluZyBiYXIgb24gYW4gb2JqZWN0IG9mIHR5cGUgQSB3ZSBkbyBuZWVkIHRoZSBoYW5kbGVyIGJlY2F1c2UKICAvLy8gd2UgbWF5IGhhdmUgdG8gY2FsbCBCLm5vU3VjaE1ldGhvZCBzaW5jZSBCIGRvZXMgbm90IGltcGxlbWVudCBiYXIuCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZChDbGFzc0VudGl0eSBjbHMsIFNlbGVjdG9yIHNlbGVjdG9yLCBDbGFzc1F1ZXJ5IHF1ZXJ5KTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbZWxlbWVudF0gd2lsbCBiZSB0aGUgb25lIHVzZWQgYXQgcnVudGltZSB3aGVuIGJlaW5nCiAgLy8vIGludm9rZWQgb24gYW4gaW5zdGFuY2Ugb2YgW2Nsc10uIFtuYW1lXSBpcyB1c2VkIHRvIGVuc3VyZSBsaWJyYXJ5CiAgLy8vIHByaXZhY3kgaXMgdGFrZW4gaW50byBhY2NvdW50LgogIGJvb2wgaGFzRWxlbWVudEluKENsYXNzRW50aXR5IGNscywgTmFtZSBuYW1lLCBNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZmllbGQgW2VsZW1lbnRdIGlzIGtub3duIHRvIGJlIGVmZmVjdGl2ZWx5IGZpbmFsLgogIGJvb2wgZmllbGROZXZlckNoYW5nZXMoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3NlbGVjdG9yXSBvbiBbcmVjZWl2ZXJdIGNhbiBoaXQgYSBgY2FsbGAgbWV0aG9kIG9uIGEKICAvLy8gc3ViY2xhc3Mgb2YgYENsb3N1cmVgLgogIC8vLwogIC8vLyBFdmVyeSBpbXBsZW1lbnRhdGlvbiBvZiBgQ2xvc3VyZWAgaGFzIGEgJ2NhbGwnIG1ldGhvZCB3aXRoIGl0cyBvd24KICAvLy8gc2lnbmF0dXJlIHNvIGl0IGNhbm5vdCBiZSBtb2RlbGxlZCBieSBhIFtGdW5jdGlvbkVudGl0eV0uIEFsc28sCiAgLy8vIGNhbGwtbWV0aG9kcyBmb3IgdGVhci1vZmYgYXJlIG5vdCBwYXJ0IG9mIHRoZSBlbGVtZW50IG1vZGVsLgogIGJvb2wgaW5jbHVkZXNDbG9zdXJlQ2FsbChTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBtYXNrIGZvciB0aGUgcG90ZW50aWFsIHJlY2VpdmVycyBvZiBhIGR5bmFtaWMgY2FsbCB0bwogIC8vLyBbc2VsZWN0b3JdIG9uIFtyZWNlaXZlcl0uCiAgLy8vCiAgLy8vIFRoaXMgd2lsbCBuYXJyb3cgdGhlIGNvbnN0cmFpbnRzIG9mIFtyZWNlaXZlcl0gdG8gYW4gW0Fic3RyYWN0VmFsdWVdIG9mCiAgLy8vIHRoZSBzZXQgb2YgY2xhc3NlcyB0aGF0IGFjdHVhbGx5IGltcGxlbWVudCB0aGUgc2VsZWN0ZWQgbWVtYmVyIG9yCiAgLy8vIGltcGxlbWVudCB0aGUgaGFuZGxpbmcgJ25vU3VjaE1ldGhvZCcgd2hlcmUgdGhlIHNlbGVjdGVkIG1lbWJlciBpcwogIC8vLyB1bmltcGxlbWVudGVkLgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVJlY2VpdmVyVHlwZShTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcik7CgogIC8vLyBSZXR1cm5zIGFsbCB0aGUgaW5zdGFuY2UgbWVtYmVycyB0aGF0IG1heSBiZSBpbnZva2VkIHdpdGggdGhlIFtzZWxlY3Rvcl0KICAvLy8gb24gdGhlIGdpdmVuIFtyZWNlaXZlcl0uIFRoZSByZXR1cm5lZCBlbGVtZW50cyBtYXkgaW5jbHVkZSBub1N1Y2hNZXRob2QKICAvLy8gaGFuZGxlcnMgdGhhdCBhcmUgcG90ZW50aWFsIHRhcmdldHMgaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBub1N1Y2hNZXRob2QKICAvLy8gbWVjaGFuaXNtLgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gbG9jYXRlTWVtYmVycygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgc2luZ2xlIFtNZW1iZXJFbnRpdHldIHRoYXQgbWF0Y2hlcyBhIGNhbGwgdG8gW3NlbGVjdG9yXSBvbiB0aGUKICAvLy8gW3JlY2VpdmVyXS4gSWYgbXVsdGlwbGUgdGFyZ2V0cyBleGlzdCwgYG51bGxgIGlzIHJldHVybmVkLgogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIHJlYWQsIHdyaXRlLCBhbmQgaW52b2NhdGlvbiBhY2Nlc3NlcyBmb3VuZCBvbiBbbWVtYmVyXQogIC8vLyBkdXJpbmcgdGhlIGNsb3NlZCB3b3JsZCBjb21wdXRhdGlvbi4KICBNZW1iZXJBY2Nlc3MgZ2V0TWVtYmVyQWNjZXNzKE1lbWJlckVudGl0eSBtZW1iZXIpOwp9CgphYnN0cmFjdCBjbGFzcyBPcGVuV29ybGQgaW1wbGVtZW50cyBXb3JsZCB7CiAgdm9pZCByZWdpc3RlclVzZWRFbGVtZW50KE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgS0Nsb3NlZFdvcmxkIGNsb3NlV29ybGQoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyKTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciBhbGwgbWl4aW4gYXBwbGljYXRpb25zIHRoYXQgbWl4aW4gW2Nsc10uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGFsbE1peGluVXNlc09mKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyBpbmhlcml0ZWQgaW50byBhIHN1YnR5cGUgb2YgW3R5cGVdLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2U6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHsgbSgpIHt9IH0KICAvLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIGltcGxlbWVudHMgSSB7fQogIC8vLyAgICAgY2xhc3MgQyBleHRlbmRzIE9iamVjdCB3aXRoIEEgaW1wbGVtZW50cyBJIHt9CiAgLy8vICAgICBhYnN0cmFjdCBjbGFzcyBJIHsgbSgpOyB9CiAgLy8vICAgICBhYnN0cmFjdCBjbGFzcyBKIGltcGxlbWVudHMgQSB7IH0KICAvLy8KICAvLy8gSGVyZSBgQS5tYCBpcyBpbmhlcml0ZWQgaW50byBgQWAsIGBCYCwgYW5kIGBDYC4gQmVjYXVzZSBgQmAgYW5kCiAgLy8vIGBDYCBpbXBsZW1lbnQgYElgLCBgaXNJbmhlcml0ZWRJblN1YnR5cGVPZihBLm0sIEkpYCBpcyB0cnVlLCBidXQKICAvLy8gYGlzSW5oZXJpdGVkSW5TdWJ0eXBlT2YoQS5tLCBKKWAgaXMgZmFsc2UuCiAgYm9vbCBpc0luaGVyaXRlZEluKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCBDbGFzc0VudGl0eSB0eXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uKTsKfQoKLy8vIEEgW0J1aWx0V29ybGRdIGlzIGFuIGltbXV0YWJsZSByZXN1bHQgb2YgYSBbV29ybGRCdWlsZGVyXS4KYWJzdHJhY3QgY2xhc3MgQnVpbHRXb3JsZCB7CiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBsaXZlIGdlbmVyaWMgbWV0aG9kLgogIHZvaWQgZm9yRWFjaEdlbmVyaWNNZXRob2Qodm9pZCBGdW5jdGlvbihGdW5jdGlvbkVudGl0eSkgZik7CgogIC8vLyBBbGwgdHlwZXMgdGhhdCBhcmUgY2hlY2tlZCBlaXRoZXIgdGhyb3VnaCBpcywgYXMgb3IgY2hlY2tlZCBtb2RlIGNoZWNrcy4KICBJdGVyYWJsZTxEYXJ0VHlwZT4gZ2V0IGlzQ2hlY2tzOwoKICAvLy8gQWxsIHR5cGUgdmFyaWFibGVzIG5hbWVkIGluIHJlY2lwZXMuCiAgU2V0PFR5cGVWYXJpYWJsZVR5cGU+IGdldCBuYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGk7CgogIC8vLyBBbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkIHR5cGVzLCB0aGF0IGlzLCB0aGUgdHlwZXMgb2YKICAvLy8gW2RpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlc10uCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW1wcm92ZSBzZW1hbnRpYyBwcmVjaXNpb24uCiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0IGluc3RhbnRpYXRlZFR5cGVzOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDbGVhbiB1cCB0aGVzZSBnZXR0ZXJzLgogIC8vLyBNZXRob2RzIGluIGluc3RhbnRpYXRlZCBjbGFzc2VzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGNsb3N1cml6ZWQuCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBjbG9zdXJpemVkTWVtYmVyczsKCiAgLy8vIFN0YXRpYyBvciB0b3AgbGV2ZWwgbWV0aG9kcyB0aGF0IGFyZSBjbG9zdXJpemVkLgogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgY2xvc3VyaXplZFN0YXRpY3M7CgogIC8vLyBUeXBlIHZhcmlhYmxlcyB1c2VkIGFzIHR5cGUgbGl0ZXJhbHMuCiAgSXRlcmFibGU8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0IHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsczsKCiAgLy8vIExpdmUgdXNlci1kZWZpbmVkICdub1N1Y2hNZXRob2QnIGltcGxlbWVudGF0aW9ucy4KICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IHVzZXJOb1N1Y2hNZXRob2RzOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGxpdmUgZ2VuZXJpYyBpbnN0YW5jZSBtZXRob2RzLgogIHZvaWQgZm9yRWFjaEdlbmVyaWNJbnN0YW5jZU1ldGhvZCh2b2lkIEZ1bmN0aW9uKEZ1bmN0aW9uRW50aXR5KSBmKTsKCiAgLy8vIExpdmUgZ2VuZXJpYyBsb2NhbCBmdW5jdGlvbnMuCiAgSXRlcmFibGU8TG9jYWw+IGdldCBnZW5lcmljTG9jYWxGdW5jdGlvbnM7CgogIC8vLyBDYWxsIFtmXSBmb3IgZWFjaCBnZW5lcmljIFtmdW5jdGlvbl0gd2l0aCB0aGUgdHlwZSBhcmd1bWVudHMgcGFzc2VkCiAgLy8vIHRocm91Z2ggc3RhdGljIGNhbGxzIHRvIFtmdW5jdGlvbl0uCiAgdm9pZCBmb3JFYWNoU3RhdGljVHlwZUFyZ3VtZW50KAogICAgICB2b2lkIGYoRW50aXR5IGZ1bmN0aW9uLCBTZXQ8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpKTsKCiAgLy8vIENhbGwgW2ZdIGZvciBlYWNoIGdlbmVyaWMgW3NlbGVjdG9yXSB3aXRoIHRoZSB0eXBlIGFyZ3VtZW50cyBwYXNzZWQKICAvLy8gdGhyb3VnaCBkeW5hbWljIGNhbGxzIHRvIFtzZWxlY3Rvcl0uCiAgdm9pZCBmb3JFYWNoRHluYW1pY1R5cGVBcmd1bWVudCgKICAgICAgdm9pZCBmKFNlbGVjdG9yIHNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpKTsKfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVuYW1lIHRoaXMgdG8gYFJlc29sdXRpb25Xb3JsZGAgb3IgYEtXb3JsZGA/Ci8vIFRoZSBpbW11dGFibGUgcmVzdWx0IG9mIHRoZSBbUmVzb2x1dGlvbldvcmxkQnVpbGRlcl0uCmFic3RyYWN0IGNsYXNzIEtDbG9zZWRXb3JsZCBpbXBsZW1lbnRzIEJ1aWx0V29ybGQgewogIERhcnRUeXBlcyBnZXQgZGFydFR5cGVzOwogIEtGaWVsZEFuYWx5c2lzIGdldCBmaWVsZEFuYWx5c2lzOwogIEJhY2tlbmRVc2FnZSBnZXQgYmFja2VuZFVzYWdlOwogIE5hdGl2ZURhdGEgZ2V0IG5hdGl2ZURhdGE7CiAgSW50ZXJjZXB0b3JEYXRhIGdldCBpbnRlcmNlcHRvckRhdGE7CiAgS0VsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50OwogIEtDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CiAgQ2xhc3NIaWVyYXJjaHkgZ2V0IGNsYXNzSGllcmFyY2h5OwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgaW1wbGVtZW50ZWQgYnkgYW4gaW5zdGFudGlhdGVkIGNsYXNzLgogIGJvb2wgaXNJbXBsZW1lbnRlZChDbGFzc0VudGl0eSBjbHMpOwoKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBsaXZlSW5zdGFuY2VNZW1iZXJzOwogIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gZ2V0IG1peGluVXNlczsKICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IGdldCB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzOwoKICAvLy8gTWVtYmVycyB0aGF0IGFyZSB3cml0dGVuIGVpdGhlciBkaXJlY3RseSBvciB0aHJvdWdoIGEgc2V0dGVyIHNlbGVjdG9yLgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzOwoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGxpdmVOYXRpdmVDbGFzc2VzOwogIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBnZXQgbGl2ZU1lbWJlclVzYWdlOwogIFJ1bnRpbWVUeXBlc05lZWQgZ2V0IHJ0aU5lZWQ7CiAgTm9TdWNoTWV0aG9kRGF0YSBnZXQgbm9TdWNoTWV0aG9kRGF0YTsKCiAgQW5ub3RhdGlvbnNEYXRhIGdldCBhbm5vdGF0aW9uc0RhdGE7CgogIC8vLyBTZXQgb2YgbGl2ZSBjbG9zdXJpemVkIG1lbWJlcnMgd2hvc2Ugc2lnbmF0dXJlcyByZWZlcmVuY2UgdHlwZSB2YXJpYWJsZXMuCiAgLy8vCiAgLy8vIEEgY2xvc3VyaXplZCBtZXRob2QgaXMgY29uc2lkZXJlZCBsaXZlIGlmIHRoZSBlbmNsb3NpbmcgY2xhc3MgaGFzIGJlZW4KICAvLy8gaW5zdGFudGlhdGVkLgogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXM7CgogIC8vLyBTZXQgb2YgKGxpdmUpIGxvY2FsIGZ1bmN0aW9ucyAoY2xvc3VyZXMpLgogIC8vLwogIC8vLyBBIGxpdmUgZnVuY3Rpb24gaXMgb25lIHdob3NlIGVuY2xvc2luZyBtZW1iZXIgZnVuY3Rpb24gaGFzIGJlZW4gZW5xdWV1ZWQuCiAgSXRlcmFibGU8TG9jYWw+IGdldCBsb2NhbEZ1bmN0aW9uczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGhhcyBiZWVuIG1hcmtlZCBhcyB1c2VkIChjYWxsZWQsIHJlYWQsIGV0Yy4pIGluCiAgLy8vIHRoaXMgd29ybGQgYnVpbGRlci4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIFtDbG9zZWRXb3JsZF0gKGluc3RlYWQpLgogIGJvb2wgaXNNZW1iZXJVc2VkKE1lbWJlckVudGl0eSBtZW1iZXIpOwp9CoFEAE5OPAEXARcWHgkZHRkdHS8hHh4uHiZNOkA2SEkfISglLwE+GAFNKwRPTE5NR0UvJAEhAR0BJwEuARsBJgFLLwEgASkBLwEvASUBJwEnJQElAUQVAUcnAUxJRD8BS0lOPQFHSwFNNgE6JwFOLyoBUBdLAUJDAVAlSwFITwFRIgZNUBcGNAYuGyUGUU1RJAZRUEYGNAYqICohMwZQSDkGTU4GUUlQAUtIJUcBTjABTh0GSUZDRwFIIAZOSEkVUAFPTk4RKDIBUUFOAVArNQIBLDIBOAFIOQFIBhQGHSw4JCwGRkcxFkYCAT8cLj4BTyMBKzYBPSU2MQEyRzIBNzIBLDsBODIBOEYBJC0BSioiPQFKKyM/AgFGOTQbJCEdJy4mJQFHJwEyNEcBTTYBLzYgKQEnAVAGTRRHATAGUCYBURpQKgIBH3BhY2thZ2U6Y29tcGlsZXIvc3JjL3dvcmxkLmRhcnRIc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZGlhZ25vc3RpY3MvZ2VuZXJhdGVkL3NoYXJlZF9tZXNzYWdlcy5kYXJ0oK0vLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgovKgpET04nVCBFRElULiBHRU5FUkFURUQuIERPTidUIEVESVQuClRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgJ3B1Ymxpc2guZGFydCcgaW4gdGhlIGRhcnRfbWVzc2FnZXMgcGFja2FnZS4KCk1lc3NhZ2VzIGFyZSBtYWludGFpbmVkIGluIGBsaWIvc2hhcmVkX21lc3NhZ2VzLmRhcnRgIG9mIHRoYXQgc2FtZSBwYWNrYWdlLgpBZnRlciBhbnkgY2hhbmdlIHRvIHRoYXQgZmlsZSwgcnVuIGBiaW4vcHVibGlzaC5kYXJ0YCB0byBnZW5lcmF0ZSBhIG5ldyB2ZXJzaW9uCm9mIHRoZSBqc29uLCBkYXJ0MmpzIGFuZCBhbmFseXplciByZXByZXNlbnRhdGlvbnMuCiovCmltcG9ydCAnLi4vbWVzc2FnZXMuZGFydCcgc2hvdyBNZXNzYWdlS2luZCwgTWVzc2FnZVRlbXBsYXRlOwoKY29uc3QgTWFwPE1lc3NhZ2VLaW5kLCBNZXNzYWdlVGVtcGxhdGU+IFRFTVBMQVRFUyA9CiAgICBjb25zdCA8TWVzc2FnZUtpbmQsIE1lc3NhZ2VUZW1wbGF0ZT57CiAgTWVzc2FnZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfV0lUSF9CT0RZOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX1dJVEhfQk9EWSwKICAgICAgIkNvbnN0IGNvbnN0cnVjdG9yIGNhbid0IGhhdmUgYSBib2R5LiIsCiAgICAgIGhvd1RvRml4OiAiVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQgb3IgdGhlIGJvZHkuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICByIiIiCiAgICAgICAgIGNsYXNzIEMgewogICAgICAgICAgIGNvbnN0IEMoKSB7fQogICAgICAgICB9CgogICAgICAgICBtYWluKCkgPT4gbmV3IEMoKTsiIiIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuQ09OU1RfRkFDVE9SWTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKE1lc3NhZ2VLaW5kLkNPTlNUX0ZBQ1RPUlksCiAgICAgICJPbmx5IHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3JzIGNhbiBiZSBkZWNsYXJlZCB0byBiZSAnY29uc3QnLiIsCiAgICAgIGhvd1RvRml4OgogICAgICAgICAgIlRyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBrZXl3b3JkIG9yIHJlcGxhY2luZyB0aGUgYm9keSB3aXRoICc9JyBmb2xsb3dlZCBieSBhIHZhbGlkIHRhcmdldC4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgIHIiIiIKICAgICAgICAgY2xhc3MgQyB7CiAgICAgICAgICAgY29uc3QgZmFjdG9yeSBDKCkge30KICAgICAgICAgfQoKICAgICAgICAgbWFpbigpID0+IG5ldyBDKCk7IiIiLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLkVYVFJBTkVPVVNfTU9ESUZJRVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuRVhUUkFORU9VU19NT0RJRklFUiwKICAgICAgIkNhbid0IGhhdmUgbW9kaWZpZXIgJyN7bW9kaWZpZXJ9JyBoZXJlLiIsCiAgICAgIGhvd1RvRml4OiAiVHJ5IHJlbW92aW5nICcje21vZGlmaWVyfScuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAidmFyIFN0cmluZyBmb287IG1haW4oKXt9IiwKICAgICAgICAidmFyIGZpbmFsIGZvbzsgbWFpbigpe30iLAogICAgICAgICJ2YXIgdmFyIGZvbzsgbWFpbigpe30iLAogICAgICAgICJ2YXIgY29uc3QgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgInZhciBhYnN0cmFjdCBmb287IG1haW4oKXt9IiwKICAgICAgICAidmFyIHN0YXRpYyBmb287IG1haW4oKXt9IiwKICAgICAgICAidmFyIGV4dGVybmFsIGZvbzsgbWFpbigpe30iLAogICAgICAgICJmaW5hbCB2YXIgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgInZhciB2YXIgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgImNvbnN0IHZhciBmb287IG1haW4oKXt9IiwKICAgICAgICAiYWJzdHJhY3QgdmFyIGZvbzsgbWFpbigpe30iLAogICAgICAgICJzdGF0aWMgdmFyIGZvbzsgbWFpbigpe30iLAogICAgICAgICJleHRlcm5hbCB2YXIgZm9vOyBtYWluKCl7fSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuRVhUUkFORU9VU19NT0RJRklFUl9SRVBMQUNFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLkVYVFJBTkVPVVNfTU9ESUZJRVJfUkVQTEFDRSwKICAgICAgIkNhbid0IGhhdmUgbW9kaWZpZXIgJyN7bW9kaWZpZXJ9JyBoZXJlLiIsCiAgICAgIGhvd1RvRml4OgogICAgICAgICAgIlRyeSByZXBsYWNpbmcgbW9kaWZpZXIgJyN7bW9kaWZpZXJ9JyB3aXRoICd2YXInLCAnZmluYWwnLCBvciBhIHR5cGUuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAic2V0IGZvbzsgbWFpbigpe30iLAogICAgICAgICJhYnN0cmFjdCBmb287IG1haW4oKXt9IiwKICAgICAgICAic3RhdGljIGZvbzsgbWFpbigpe30iLAogICAgICAgICJleHRlcm5hbCBmb287IG1haW4oKXt9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5DT05TVFJVQ1RPUl9XSVRIX1JFVFVSTl9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLkNPTlNUUlVDVE9SX1dJVEhfUkVUVVJOX1RZUEUsCiAgICAgICJDb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIHJldHVybiB0eXBlLiIsCiAgICAgIGhvd1RvRml4OiAiVHJ5IHJlbW92aW5nIHRoZSByZXR1cm4gdHlwZS4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICJjbGFzcyBBIHsgaW50IEEoKSB7fSB9IG1haW4oKSB7IG5ldyBBKCk7IH0iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLk1JU1NJTkdfRVhQUkVTU0lPTl9JTl9USFJPVzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5NSVNTSU5HX0VYUFJFU1NJT05fSU5fVEhST1csCiAgICAgICJNaXNzaW5nIGV4cHJlc3Npb24gYWZ0ZXIgJ3Rocm93Jy4iLAogICAgICBob3dUb0ZpeDogIkRpZCB5b3UgbWVhbiAncmV0aHJvdyc/IiksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5SRVRIUk9XX09VVFNJREVfQ0FUQ0g6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuUkVUSFJPV19PVVRTSURFX0NBVENILAogICAgICAiUmV0aHJvdyBtdXN0IGJlIGluc2lkZSBvZiBjYXRjaCBjbGF1c2UuIiwKICAgICAgaG93VG9GaXg6CiAgICAgICAgICAiVHJ5IG1vdmluZyB0aGUgZXhwcmVzc2lvbiBpbnRvIGEgY2F0Y2ggY2xhdXNlLCBvciB1c2luZyBhICd0aHJvdycgZXhwcmVzc2lvbi4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICJtYWluKCkgeyByZXRocm93OyB9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5SRVRVUk5fSU5fR0VORVJBVElWRV9DT05TVFJVQ1RPUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5SRVRVUk5fSU5fR0VORVJBVElWRV9DT05TVFJVQ1RPUiwKICAgICAgIkNvbnN0cnVjdG9ycyBjYW4ndCByZXR1cm4gdmFsdWVzLiIsCiAgICAgIGhvd1RvRml4OgogICAgICAgICAgIlRyeSByZW1vdmluZyB0aGUgcmV0dXJuIHN0YXRlbWVudCBvciB1c2luZyBhIGZhY3RvcnkgY29uc3RydWN0b3IuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICByIiIiCiAgICAgICAgY2xhc3MgQyB7CiAgICAgICAgICBDKCkgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG1haW4oKSA9PiBuZXcgQygpOyIiIiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5SRVRVUk5fSU5fR0VORVJBVE9SOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlJFVFVSTl9JTl9HRU5FUkFUT1IsCiAgICAgICJDYW4ndCByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uICh1c2luZyB0aGUgJyN7bW9kaWZpZXJ9JyBtb2RpZmllcikuIiwKICAgICAgaG93VG9GaXg6CiAgICAgICAgICAiVHJ5IHJlbW92aW5nIHRoZSB2YWx1ZSwgcmVwbGFjaW5nICdyZXR1cm4nIHdpdGggJ3lpZWxkJyBvciBjaGFuZ2luZyB0aGUgbWV0aG9kIGJvZHkgbW9kaWZpZXIuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICByIiIiCiAgICAgICAgZm9vKCkgYXN5bmMqIHsgcmV0dXJuIDA7IH0KICAgICAgICBtYWluKCkgPT4gZm9vKCk7CiAgICAgICAgIiIiLAogICAgICAgIHIiIiIKICAgICAgICBmb28oKSBzeW5jKiB7IHJldHVybiAwOyB9CiAgICAgICAgbWFpbigpID0+IGZvbygpOwogICAgICAgICIiIiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5OT1RfQVNTSUdOQUJMRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKE1lc3NhZ2VLaW5kLk5PVF9BU1NJR05BQkxFLAogICAgICAiJyN7ZnJvbVR5cGV9JyBpcyBub3QgYXNzaWduYWJsZSB0byAnI3t0b1R5cGV9Jy4iKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLkZPUklOX05PVF9BU1NJR05BQkxFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLkZPUklOX05PVF9BU1NJR05BQkxFLAogICAgICAiVGhlIGVsZW1lbnQgdHlwZSAnI3tjdXJyZW50VHlwZX0nIG9mICcje2V4cHJlc3Npb25UeXBlfScgaXMgbm90IGFzc2lnbmFibGUgdG8gJyN7ZWxlbWVudFR5cGV9Jy4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgIHIiIiIKICAgICAgICBtYWluKCkgewogICAgICAgICAgTGlzdDxpbnQ+IGxpc3QgPSA8aW50PlsxLCAyXTsKICAgICAgICAgIGZvciAoU3RyaW5nIHggaW4gbGlzdCkgeDsKICAgICAgICB9CiAgICAgICAgIiIiLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLkNBTk5PVF9SRVNPTFZFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoTWVzc2FnZUtpbmQuQ0FOTk9UX1JFU09MVkUsCiAgICAgICJDYW4ndCByZXNvbHZlICcje25hbWV9Jy4iKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9NRVRIT0Q6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX01FVEhPRCwKICAgICAgIlRoZSBtZXRob2QgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN7Y2xhc3NOYW1lfScuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICByIiIiCiAgICAgICAgY2xhc3MgQSB7CiAgICAgICAgICBmb28oKSB7IGJhcigpOyB9CiAgICAgICAgfQogICAgICAgIG1haW4oKSB7IG5ldyBBKCkuZm9vKCk7IH0KICAgICAgICAiIiIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX0dFVFRFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfR0VUVEVSLAogICAgICAiVGhlIGdldHRlciAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3tjbGFzc05hbWV9Jy4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICJjbGFzcyBBIHt9IG1haW4oKSB7IG5ldyBBKCkueDsgfSIsCiAgICAgICAgImNsYXNzIEEge30gbWFpbigpIHsgQS54OyB9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5VTkRFRklORURfSU5TVEFOQ0VfR0VUVEVSX0JVVF9TRVRURVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX0lOU1RBTkNFX0dFVFRFUl9CVVRfU0VUVEVSLAogICAgICAiVGhlIHNldHRlciAnI3ttZW1iZXJOYW1lfScgaW4gY2xhc3MgJyN7Y2xhc3NOYW1lfScgY2FuIG5vdCBiZSB1c2VkIGFzIGEgZ2V0dGVyLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgImNsYXNzIEEgeyBzZXQgeCh5KSB7fSB9IG1haW4oKSB7IG5ldyBBKCkueDsgfSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX09QRVJBVE9SOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9PUEVSQVRPUiwKICAgICAgIlRoZSBvcGVyYXRvciAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3tjbGFzc05hbWV9Jy4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICJjbGFzcyBBIHt9IG1haW4oKSB7IG5ldyBBKCkgKyAzOyB9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5VTkRFRklORURfU0VUVEVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TRVRURVIsCiAgICAgICJUaGUgc2V0dGVyICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcje2NsYXNzTmFtZX0nLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgImNsYXNzIEEge30gbWFpbigpIHsgbmV3IEEoKS54ID0gNDk5OyB9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5OT19TVUNIX1NVUEVSX01FTUJFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5OT19TVUNIX1NVUEVSX01FTUJFUiwKICAgICAgIkNhbid0IHJlc29sdmUgJyN7bWVtYmVyTmFtZX0nIGluIGEgc3VwZXJjbGFzcyBvZiAnI3tjbGFzc05hbWV9Jy4iKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TVVBFUl9TRVRURVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NVUEVSX1NFVFRFUiwKICAgICAgIlRoZSBzZXR0ZXIgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGluIGEgc3VwZXJjbGFzcyBvZiAnI3tjbGFzc05hbWV9Jy4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgIHIiIiIKICAgICAgICBjbGFzcyBBIHt9CiAgICAgICAgY2xhc3MgQiBleHRlbmRzIEEgewogICAgICAgICAgZm9vKCkgeyBzdXBlci54ID0gNDk5OyB9CiAgICAgICAgfQogICAgICAgIG1haW4oKSB7IG5ldyBCKCkuZm9vKCk7IH0KICAgICAgICAiIiIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NUQVRJQ19HRVRURVJfQlVUX1NFVFRFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX0dFVFRFUl9CVVRfU0VUVEVSLAogICAgICAiQ2Fubm90IHJlc29sdmUgZ2V0dGVyICcje25hbWV9Jy4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICJzZXQgZm9vKHgpIHt9ICBtYWluKCkgeyBmb287IH0iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TVEFUSUNfU0VUVEVSX0JVVF9HRVRURVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NUQVRJQ19TRVRURVJfQlVUX0dFVFRFUiwKICAgICAgIkNhbm5vdCByZXNvbHZlIHNldHRlciAnI3tuYW1lfScuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICByIiIiCiAgICAgICAgbWFpbigpIHsKICAgICAgICAgIGZpbmFsIHggPSAxOwogICAgICAgICAgeCA9IDI7CiAgICAgICAgfSIiIiwKICAgICAgICByIiIiCiAgICAgICAgbWFpbigpIHsKICAgICAgICAgIGNvbnN0IHggPSAxOwogICAgICAgICAgeCA9IDI7CiAgICAgICAgfQogICAgICAgICIiIiwKICAgICAgICByIiIiCiAgICAgICAgZmluYWwgeCA9IDE7CiAgICAgICAgbWFpbigpIHsgeCA9IDM7IH0KICAgICAgICAiIiIsCiAgICAgICAgciIiIgogICAgICAgIGNvbnN0IHggPSAxOwogICAgICAgIG1haW4oKSB7IHggPSAzOyB9CiAgICAgICAgIiIiLAogICAgICAgICJnZXQgZm9vID0+IG51bGwgIG1haW4oKSB7IGZvbyA9IDU7IH0iLAogICAgICAgICJjb25zdCBmb28gPSAwICBtYWluKCkgeyBmb28gPSA1OyB9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KfTsKgNsATk48AyNNAUxQMwM9ATQqQi8uQRgNExgLASAkTk4QaRgNEyALASAkOicxLxgkIyEjJiQmIyEjJiQmJEIvMRBSGB0iICIkQzAwMRg2JEIvK0Y8KTEQWxgfJEc0KxBPGA0SEBYMCgEfJDonXBBrGA0jGQ0NIhkNJFBUOyhpGA0RKCQKDSRQPTckURgNEhsKIg0kNyRRGCwmJEs4WRg5JDkmUxguJDckURgyJDsoZT0qVhgNExwjCiINJEk2KhgqJEk2KhgNERcRDg0RFxEKDQ0VGg0NFRoNMC4kAwE/cGFja2FnZTpjb21waWxlci9zcmMvZGlhZ25vc3RpY3MvZ2VuZXJhdGVkL3NoYXJlZF9tZXNzYWdlcy5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0wAEnsi8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29uc3RhbnRzLmV4cHJlc3Npb25zOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL29wZXJhdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICdldmFsdWF0aW9uLmRhcnQnOwppbXBvcnQgJ3ZhbHVlcy5kYXJ0JzsKCmVudW0gQ29uc3RhbnRFeHByZXNzaW9uS2luZCB7CiAgQVMsCiAgQklOQVJZLAogIEJPT0wsCiAgQk9PTF9GUk9NX0VOVklST05NRU5ULAogIENPTkNBVEVOQVRFLAogIENPTkRJVElPTkFMLAogIENPTlNUUlVDVEVELAogIERPVUJMRSwKICBFUlJPTkVPVVMsCiAgRlVOQ1RJT04sCiAgRklFTEQsCiAgSURFTlRJQ0FMLAogIElOVCwKICBJTlRfRlJPTV9FTlZJUk9OTUVOVCwKICBMSVNULAogIFNFVCwKICBNQVAsCiAgTlVMTCwKICBTVFJJTkcsCiAgU1RSSU5HX0ZST01fRU5WSVJPTk1FTlQsCiAgU1RSSU5HX0xFTkdUSCwKICBTWU1CT0wsCiAgVFlQRSwKICBVTkFSWSwKICBMT0NBTF9WQVJJQUJMRSwKICBQT1NJVElPTkFMX1JFRkVSRU5DRSwKICBOQU1FRF9SRUZFUkVOQ0UsCiAgQVNTRVJULAogIElOU1RBTlRJQVRJT04sCn0KCi8vLyBBbiBleHByZXNzaW9uIHRoYXQgaXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQuCi8vLwovLy8gV2hlcmVhcyBbQ29uc3RhbnRWYWx1ZV0gcmVwcmVzZW50IGEgY29tcGlsZS10aW1lIHZhbHVlLCBhCi8vLyBbQ29uc3RhbnRFeHByZXNzaW9uXSByZXByZXNlbnRzIGFuIGV4cHJlc3Npb24gZm9yIGNyZWF0aW5nIGEgY29uc3RhbnQuCi8vLwovLy8gVGhlcmUgaXMgbm8gb25lLXRvLW9uZSBtYXBwaW5nIGJldHdlZW4gW0NvbnN0YW50RXhwcmVzc2lvbl0gYW5kCi8vLyBbQ29uc3RhbnRWYWx1ZV0sIGJlY2F1c2UgZGlmZmVyZW50IGV4cHJlc3Npb25zIGNhbiBkZW5vdGUgdGhlIHNhbWUgY29uc3RhbnQuCi8vLyBGb3IgaW5zdGFuY2UsIG11bHRpcGxlIGBjb25zdGAgY29uc3RydWN0b3JzIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgc2FtZQovLy8gb2JqZWN0LCBhbmQgZGlmZmVyZW50IGBjb25zdGAgdmFyaWFibGVzIG1heSBob2xkIHRoZSBzYW1lIHZhbHVlLgphYnN0cmFjdCBjbGFzcyBDb25zdGFudEV4cHJlc3Npb24gewogIGludCBfaGFzaENvZGU7CgogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQ7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVuaWZ5IHByZWNlZGVuY2UgaGFuZGxlZCBiZXR3ZWVuIGNvbnN0YW50cywgZnJvbnQtZW5kCiAgLy8gYW5kIGJhY2stZW5kLgogIGludCBnZXQgcHJlY2VkZW5jZSA9PiAxNjsKCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKTsKCiAgLy8vIFN1YnN0aXR1dGUgZnJlZSB2YXJpYWJsZXMgdXNpbmcgYXJndW1lbnRzLgogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgPT4gdGhpczsKCiAgLy8vIENvbXB1dGUgdGhlIFtDb25zdGFudFZhbHVlXSBmb3IgdGhpcyBleHByZXNzaW9uIHVzaW5nIHRoZSBbZW52aXJvbm1lbnRdLgogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhpcyBjb25zdGFudCBleHByZXNzaW9uLCBpZiBpdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUKICAvLy8gZW52aXJvbm1lbnQgdmFsdWVzLgogIERhcnRUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4gbnVsbDsKCiAgLy8vIFJldHVybnMgYSB0ZXh0IHN0cmluZyByZXNlbWJsaW5nIHRoZSBEYXJ0IGNvZGUgY3JlYXRpbmcgdGhpcyBjb25zdGFudC4KICBTdHJpbmcgdG9EYXJ0VGV4dCgpIHsKICAgIENvbnN0RXhwUHJpbnRlciBwcmludGVyID0gbmV3IENvbnN0RXhwUHJpbnRlcigpOwogICAgYWNjZXB0KHByaW50ZXIpOwogICAgcmV0dXJuIHByaW50ZXIudG9TdHJpbmcoKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgdGV4dCBzdHJpbmcgc2hvd2luZyB0aGUgc3RydWN0dXJlIG9mIHRoaXMgY29uc3RhbnQuCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gV3JpdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnN0YW50IGludG8gW3NiXS4KICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpOwoKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9oYXNoQ29kZSA/Pz0gX2NvbXB1dGVIYXNoQ29kZSgpOwoKICBib29sIF9lcXVhbHMoY292YXJpYW50IENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcik7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgQ29uc3RhbnRFeHByZXNzaW9uKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoa2luZCAhPSBvdGhlci5raW5kKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaGFzaENvZGUgIT0gb3RoZXIuaGFzaENvZGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfZXF1YWxzKG90aGVyKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGFzc2VydERlYnVnTW9kZSgnVXNlIENvbnN0YW50RXhwcmVzc2lvbi50b0RhcnRUZXh0KCkgb3IgJwogICAgICAgICdDb25zdGFudEV4cHJlc3Npb24udG9TdHJ1Y3R1cmVkVGV4dCgpIGluc3RlYWQgb2YgJwogICAgICAgICdDb25zdGFudEV4cHJlc3Npb24udG9TdHJpbmcoKScpOwogICAgcmV0dXJuIHRvRGFydFRleHQoKTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGV4cHJlc3Npb24gaXMgaW1wbGljaXRseSBjb25zdGFudCwgdGhhdCBpcywgdGhhdAogIC8vLyBpdCBkb2Vzbid0IGRlY2xhcmUgaXRzIGNvbnN0bmVzcyB3aXRoIHRoZSAnY29uc3QnIGtleXdvcmQuCiAgLy8vCiAgLy8vIEltcGxpY2l0IGNvbnN0YW50cyBhcmUgc2ltcGxlIGxpdGVyYWxzLCBsaWtlIGJvb2wsIGludCBhbmQgc3RyaW5nCiAgLy8vIGxpdGVyYWxzLCBjb25zdGFudCByZWZlcmVuY2VzIGFuZCBjb21wb3NpdGlvbnMgb2YgaW1wbGljaXQgY29uc3RhbnRzLgogIC8vLyBFeHBsaWNpdCBjb25zdGFudHMgYXJlIGNvbnN0cnVjdG9yIGNvbnN0YW50cywgYW5kIGNvbnN0YW50IG1hcCBhbmQgbGlzdAogIC8vLyBsaXRlcmFscy4KICBib29sIGdldCBpc0ltcGxpY2l0ID0+IHRydWU7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGV4cHJlc3Npb24gaXMgb25seSBwb3RlbnRpYWxseSBjb25zdGFudCwgdGhhdCBpcywKICAvLy8gaWYgaXQgY29udGFpbnMgcG9zaXRpb25hbCBvciBuYW1lZCByZWZlcmVuY2VzLCB1c2VkIHRvIGRlZmluZSBjb25zdGFudAogIC8vLyBjb25zdHJ1Y3RvcnMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgbWFrZSB0aGlzIGZpbmFsIGlmIHdlIHVzZSBpdCBvdXRzaWRlIGFzc2VydGlvbnMuCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgPT4gZmFsc2U7Cn0KCi8vLyBBIHN5bnRoZXRpYyBjb25zdGFudCB1c2VkIHRvIHJlY292ZXIgZnJvbSBlcnJvcnMuCmNsYXNzIEVycm9uZW91c0NvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkVSUk9ORU9VUzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICAvLyBEbyBub3RoaW5nLiBUaGlzIGlzIGFuIGVycm9yLgogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBub24tY29uc3RhbnQgdmFsdWVzIGZvciBlcnJvcnMuCiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0Vycm9uZW91cygpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRXJyb25lb3VzQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSA9PiB0cnVlOwp9CgovLy8gQm9vbGVhbiBsaXRlcmFsIGNvbnN0YW50LgpjbGFzcyBCb29sQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBib29sIGJvb2xWYWx1ZTsKCiAgQm9vbENvbnN0YW50RXhwcmVzc2lvbih0aGlzLmJvb2xWYWx1ZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5CT09MOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Qm9vbCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0Jvb2wodmFsdWU9JHtib29sVmFsdWV9KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlQm9vbChib29sVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMyAqIGJvb2xWYWx1ZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEJvb2xDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBib29sVmFsdWUgPT0gb3RoZXIuYm9vbFZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLmJvb2xUeXBlOwp9CgovLy8gSW50ZWdlciBsaXRlcmFsIGNvbnN0YW50LgpjbGFzcyBJbnRDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIEJpZ0ludCBpbnRWYWx1ZTsKCiAgSW50Q29uc3RhbnRFeHByZXNzaW9uKHRoaXMuaW50VmFsdWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuSU5UOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW50KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnSW50KHZhbHVlPSR7aW50VmFsdWV9KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KGludFZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTcgKiBpbnRWYWx1ZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEludENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGludFZhbHVlID09IG90aGVyLmludFZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLmludFR5cGU7Cn0KCi8vLyBEb3VibGUgbGl0ZXJhbCBjb25zdGFudC4KY2xhc3MgRG91YmxlQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBkb3VibGUgZG91YmxlVmFsdWU7CgogIERvdWJsZUNvbnN0YW50RXhwcmVzc2lvbih0aGlzLmRvdWJsZVZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkRPVUJMRTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdERvdWJsZSh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0RvdWJsZSh2YWx1ZT0ke2RvdWJsZVZhbHVlfSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZURvdWJsZShkb3VibGVWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDE5ICogZG91YmxlVmFsdWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEb3VibGVDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBkb3VibGVWYWx1ZSA9PSBvdGhlci5kb3VibGVWYWx1ZTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlOwp9CgovLy8gU3RyaW5nIGxpdGVyYWwgY29uc3RhbnQuCmNsYXNzIFN0cmluZ0NvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIHN0cmluZ1ZhbHVlOwoKICBTdHJpbmdDb25zdGFudEV4cHJlc3Npb24odGhpcy5zdHJpbmdWYWx1ZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TVFJJTkc7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdHJpbmcodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdTdHJpbmcodmFsdWU9JHtzdHJpbmdWYWx1ZX0pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTdHJpbmcoc3RyaW5nVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAyMyAqIHN0cmluZ1ZhbHVlLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoU3RyaW5nQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gc3RyaW5nVmFsdWUgPT0gb3RoZXIuc3RyaW5nVmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZTsKfQoKLy8vIE51bGwgbGl0ZXJhbCBjb25zdGFudC4KY2xhc3MgTnVsbENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgTnVsbENvbnN0YW50RXhwcmVzc2lvbigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuTlVMTDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdE51bGwodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdOdWxsKCknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZU51bGwoKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMjk7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhOdWxsQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMubnVsbFR5cGU7Cn0KCi8vLyBMaXRlcmFsIGxpc3QgY29uc3RhbnQuCmNsYXNzIExpc3RDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKICBmaW5hbCBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gdmFsdWVzOwoKICBMaXN0Q29uc3RhbnRFeHByZXNzaW9uKHRoaXMudHlwZSwgdGhpcy52YWx1ZXMpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuTElTVDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdExpc3QodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdMaXN0KHR5cGU9JHR5cGUsdmFsdWVzPVsnKTsKICAgIFN0cmluZyBkZWxpbWl0ZXIgPSAnJzsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlIGluIHZhbHVlcykgewogICAgICBzYi53cml0ZShkZWxpbWl0ZXIpOwogICAgICB2YWx1ZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgICBkZWxpbWl0ZXIgPSAnLCc7CiAgICB9CiAgICBzYi53cml0ZSgnXSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUxpc3QoCiAgICAgICAgdHlwZSwgdmFsdWVzLm1hcCgodikgPT4gdi5ldmFsdWF0ZShlbnZpcm9ubWVudCkpLnRvTGlzdCgpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBMaXN0Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIHR5cGUsIHZhbHVlcy5tYXAoKHYpID0+IHYuYXBwbHkoYXJndW1lbnRzKSkudG9MaXN0KCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICBpbnQgaGFzaENvZGUgPSAxMyAqIHR5cGUuaGFzaENvZGUgKyAxNyAqIHZhbHVlcy5sZW5ndGg7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgaGFzaENvZGUgXj0gMTkgKiB2YWx1ZS5oYXNoQ29kZTsKICAgIH0KICAgIHJldHVybiBoYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhMaXN0Q29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICBpZiAodHlwZSAhPSBvdGhlci50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodmFsdWVzLmxlbmd0aCAhPSBvdGhlci52YWx1ZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodmFsdWVzW2ldICE9IG90aGVyLnZhbHVlc1tpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+IHR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW1wbGljaXQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsID0+IHZhbHVlcy5hbnkoKGUpID0+IGUuaXNQb3RlbnRpYWwpOwp9CgovLy8gTGl0ZXJhbCBzZXQgY29uc3RhbnQuCmNsYXNzIFNldENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiB2YWx1ZXM7CgogIFNldENvbnN0YW50RXhwcmVzc2lvbih0aGlzLnR5cGUsIHRoaXMudmFsdWVzKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLlNFVDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFNldCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgPT4KICAgICAgbmV3IFNldENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICAgIHR5cGUsIHZhbHVlcy5tYXAoKHYpID0+IHYuYXBwbHkoYXJndW1lbnRzKSkudG9MaXN0KCkpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBEZWxldGUgb25jZSB0aGUgQ0ZFIHByb3ZpZGVzIHRoZXNlIGVycm9yIG1lc3NhZ2VzLgogICAgU2V0PENvbnN0YW50VmFsdWU+IHNldCA9IG5ldyBMaW5rZWRIYXNoU2V0PENvbnN0YW50VmFsdWU+KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gdmFsdWVzW2ldLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgICAgaWYgKCF2YWx1ZS5pc0NvbnN0YW50KSByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgICAgaWYgKCFzZXQuYWRkKHZhbHVlKSkgewogICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKHZhbHVlc1tpXSwgTWVzc2FnZUtpbmQuRVFVQUxfU0VUX0VOVFJZLCB7fSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVNldCgKICAgICAgICBlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cywgdHlwZSwgc2V0LnRvTGlzdCgpKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4gdHlwZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnU2V0KHR5cGU9JHR5cGUsdmFsdWVzPVsnKTsKICAgIFN0cmluZyBkZWxpbWl0ZXIgPSAnJzsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlIGluIHZhbHVlcykgewogICAgICBzYi53cml0ZShkZWxpbWl0ZXIpOwogICAgICB2YWx1ZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgICBkZWxpbWl0ZXIgPSAnLCc7CiAgICB9CiAgICBzYi53cml0ZSgnXSknKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gSGFzaGluZy5saXN0SGFzaCh2YWx1ZXMsIEhhc2hpbmcub2JqZWN0SGFzaCh0eXBlKSk7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhTZXRDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIGlmICh0eXBlICE9IG90aGVyLnR5cGUpIHJldHVybiBmYWxzZTsKICAgIGlmICh2YWx1ZXMubGVuZ3RoICE9IG90aGVyLnZhbHVlcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh2YWx1ZXNbaV0gIT0gb3RoZXIudmFsdWVzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW1wbGljaXQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsID0+IHZhbHVlcy5hbnkoKHYpID0+IHYuaXNQb3RlbnRpYWwpOwp9CgovLy8gTGl0ZXJhbCBtYXAgY29uc3RhbnQuCmNsYXNzIE1hcENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBrZXlzOwogIGZpbmFsIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiB2YWx1ZXM7CgogIE1hcENvbnN0YW50RXhwcmVzc2lvbih0aGlzLnR5cGUsIHRoaXMua2V5cywgdGhpcy52YWx1ZXMpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuTUFQOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TWFwKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnTWFwKHR5cGU9JHR5cGUsZW50cmllcz1bJyk7CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwga2V5cy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgaWYgKGluZGV4ID4gMCkgewogICAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgIH0KICAgICAga2V5c1tpbmRleF0uX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgICAgc2Iud3JpdGUoJy0+Jyk7CiAgICAgIHZhbHVlc1tpbmRleF0uX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIH0KICAgIHNiLndyaXRlKCddKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IGRlbGV0ZSBvbmNlIHRoZSBDRkUgcHJvdmlkZXMgdGhlc2UgZXJyb3IgbWVzc2FnZXMuCiAgICByZXR1cm4gZW52aXJvbm1lbnQuZXZhbHVhdGVNYXBCb2R5KCgpIHsKICAgICAgTWFwPENvbnN0YW50VmFsdWUsIENvbnN0YW50VmFsdWU+IG1hcCA9IDxDb25zdGFudFZhbHVlLCBDb25zdGFudFZhbHVlPnt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBDb25zdGFudFZhbHVlIGtleSA9IGtleXNbaV0uZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgICAgIGlmICgha2V5LmlzQ29uc3RhbnQpIHsKICAgICAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgICAgIH0KICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gdmFsdWVzW2ldLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgICAgICBpZiAoIXZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgICAgIH0KICAgICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKGtleXNbaV0sIE1lc3NhZ2VLaW5kLkVRVUFMX01BUF9FTlRSWV9LRVksIHt9KTsKICAgICAgICB9CiAgICAgICAgbWFwW2tleV0gPSB2YWx1ZTsKICAgICAgfQogICAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZU1hcChlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cywgdHlwZSwKICAgICAgICAgIG1hcC5rZXlzLnRvTGlzdCgpLCBtYXAudmFsdWVzLnRvTGlzdCgpKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IE1hcENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICB0eXBlLAogICAgICAgIGtleXMubWFwKChrKSA9PiBrLmFwcGx5KGFyZ3VtZW50cykpLnRvTGlzdCgpLAogICAgICAgIHZhbHVlcy5tYXAoKHYpID0+IHYuYXBwbHkoYXJndW1lbnRzKSkudG9MaXN0KCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICBpbnQgaGFzaENvZGUgPSAxMyAqIHR5cGUuaGFzaENvZGUgKyAxNyAqIHZhbHVlcy5sZW5ndGg7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgaGFzaENvZGUgXj0gMTkgKiB2YWx1ZS5oYXNoQ29kZTsKICAgIH0KICAgIHJldHVybiBoYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhNYXBDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIGlmICh0eXBlICE9IG90aGVyLnR5cGUpIHJldHVybiBmYWxzZTsKICAgIGlmICh2YWx1ZXMubGVuZ3RoICE9IG90aGVyLnZhbHVlcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChrZXlzW2ldICE9IG90aGVyLmtleXNbaV0pIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHZhbHVlc1tpXSAhPSBvdGhlci52YWx1ZXNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PiB0eXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ltcGxpY2l0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4ga2V5cy5hbnkoKGUpID0+IGUuaXNQb3RlbnRpYWwpIHx8IHZhbHVlcy5hbnkoKGUpID0+IGUuaXNQb3RlbnRpYWwpOwogIH0KfQoKLy8vIEludm9jYXRpb24gb2YgYSBjb25zdCBjb25zdHJ1Y3Rvci4KY2xhc3MgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKICBmaW5hbCBDb25zdHJ1Y3RvckVudGl0eSB0YXJnZXQ7CiAgZmluYWwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwogIGZpbmFsIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHM7CgogIENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICB0aGlzLnR5cGUsIHRoaXMudGFyZ2V0LCB0aGlzLmNhbGxTdHJ1Y3R1cmUsIHRoaXMuYXJndW1lbnRzKSB7CiAgICBhc3NlcnQodHlwZS5lbGVtZW50ID09IHRhcmdldC5lbmNsb3NpbmdDbGFzcyk7CiAgICBhc3NlcnQoIWFyZ3VtZW50cy5jb250YWlucyhudWxsKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuQ09OU1RSVUNURUQ7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb25zdHJ1Y3RlZCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0NvbnN0cnVjdGVkKHR5cGU9JHR5cGUsY29uc3RydWN0b3I9JHRhcmdldCwnCiAgICAgICAgJ2NhbGxTdHJ1Y3R1cmU9JGNhbGxTdHJ1Y3R1cmUsYXJndW1lbnRzPVsnKTsKICAgIFN0cmluZyBkZWxpbWl0ZXIgPSAnJzsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlIGluIGFyZ3VtZW50cykgewogICAgICBzYi53cml0ZShkZWxpbWl0ZXIpOwogICAgICB2YWx1ZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgICBkZWxpbWl0ZXIgPSAnLCc7CiAgICB9CiAgICBzYi53cml0ZSgnXSknKTsKICB9CgogIEluc3RhbmNlRGF0YSBjb21wdXRlSW5zdGFuY2VEYXRhKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRDb25zdHJ1Y3RvciBjb25zdGFudENvbnN0cnVjdG9yID0KICAgICAgICBlbnZpcm9ubWVudC5nZXRDb25zdHJ1Y3RvckNvbnN0YW50KHRhcmdldCk7CiAgICBhc3NlcnQoY29uc3RhbnRDb25zdHJ1Y3RvciAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KHRhcmdldCwgIk5vIGNvbnN0YW50IGNvbnN0cnVjdG9yIGNvbXB1dGVkIGZvciAkdGFyZ2V0LiIpKTsKICAgIHJldHVybiBjb25zdGFudENvbnN0cnVjdG9yLmNvbXB1dGVJbnN0YW5jZURhdGEoCiAgICAgICAgZW52aXJvbm1lbnQsIGFyZ3VtZW50cywgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIGNvbXB1dGVJbnN0YW5jZVR5cGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQKICAgICAgICAuZ2V0Q29uc3RydWN0b3JDb25zdGFudCh0YXJnZXQpCiAgICAgICAgLmNvbXB1dGVJbnN0YW5jZVR5cGUoZW52aXJvbm1lbnQsIHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24odHlwZSwgdGFyZ2V0LCBjYWxsU3RydWN0dXJlLAogICAgICAgIHRoaXMuYXJndW1lbnRzLm1hcCgoYSkgPT4gYS5hcHBseShhcmd1bWVudHMpKS50b0xpc3QoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGUgPSBjb21wdXRlSW5zdGFuY2VUeXBlKGVudmlyb25tZW50KTsKICAgIHJldHVybiBlbnZpcm9ubWVudC5ldmFsdWF0ZUNvbnN0cnVjdG9yKHRhcmdldCwgaW5zdGFuY2VUeXBlLCAoKSB7CiAgICAgIEluc3RhbmNlRGF0YSBpbnN0YW5jZURhdGEgPSBjb21wdXRlSW5zdGFuY2VEYXRhKGVudmlyb25tZW50KTsKICAgICAgaWYgKGluc3RhbmNlRGF0YSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICAgIH0KICAgICAgYm9vbCBpc1ZhbGlkQXNDb25zdGFudCA9IHRydWU7CiAgICAgIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT4gZmllbGRWYWx1ZXMgPQogICAgICAgICAgPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPnt9OwogICAgICBpbnN0YW5jZURhdGEuZmllbGRNYXAKICAgICAgICAgIC5mb3JFYWNoKChGaWVsZEVudGl0eSBmaWVsZCwgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50KSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGNvbnN0YW50LmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgIHZhbHVlICE9IG51bGwsCiAgICAgICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgICAiTm8gdmFsdWUgY29tcHV0ZWQgZm9yICR7Y29uc3RhbnQudG9TdHJ1Y3R1cmVkVGV4dCgpfS4iKSk7CiAgICAgICAgaWYgKHZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgICAgIGZpZWxkVmFsdWVzW2ZpZWxkXSA9IHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpc1ZhbGlkQXNDb25zdGFudCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGZvciAoQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uIGFzc2VydGlvbiBpbiBpbnN0YW5jZURhdGEuYXNzZXJ0aW9ucykgewogICAgICAgIGlmICghYXNzZXJ0aW9uLmV2YWx1YXRlKGVudmlyb25tZW50KS5pc0NvbnN0YW50KSB7CiAgICAgICAgICBpc1ZhbGlkQXNDb25zdGFudCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNWYWxpZEFzQ29uc3RhbnQpIHsKICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZShpbnN0YW5jZVR5cGUsIGZpZWxkVmFsdWVzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIGludCBoYXNoQ29kZSA9CiAgICAgICAgMTMgKiB0eXBlLmhhc2hDb2RlICsgMTcgKiB0YXJnZXQuaGFzaENvZGUgKyAxOSAqIGNhbGxTdHJ1Y3R1cmUuaGFzaENvZGU7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSBpbiBhcmd1bWVudHMpIHsKICAgICAgaGFzaENvZGUgXj0gMjMgKiB2YWx1ZS5oYXNoQ29kZTsKICAgIH0KICAgIHJldHVybiBoYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgaWYgKHR5cGUgIT0gb3RoZXIudHlwZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHRhcmdldCAhPSBvdGhlci50YXJnZXQpIHJldHVybiBmYWxzZTsKICAgIGlmIChjYWxsU3RydWN0dXJlICE9IG90aGVyLmNhbGxTdHJ1Y3R1cmUpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChhcmd1bWVudHNbaV0gIT0gb3RoZXIuYXJndW1lbnRzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW1wbGljaXQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBhcmd1bWVudHMuYW55KChlKSA9PiBlLmlzUG90ZW50aWFsKTsKICB9Cn0KCi8vLyBTdHJpbmcgbGl0ZXJhbCB3aXRoIGp1eHRhcG9zaXRpb24gYW5kL29yIGludGVycG9sYXRpb25zLgpjbGFzcyBDb25jYXRlbmF0ZUNvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGV4cHJlc3Npb25zOwoKICBDb25jYXRlbmF0ZUNvbnN0YW50RXhwcmVzc2lvbih0aGlzLmV4cHJlc3Npb25zKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkNPTkNBVEVOQVRFOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29uY2F0ZW5hdGUodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdDb25jYXRlbmF0ZShleHByZXNzaW9ucz1bJyk7CiAgICBTdHJpbmcgZGVsaW1pdGVyID0gJyc7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSBpbiBleHByZXNzaW9ucykgewogICAgICBzYi53cml0ZShkZWxpbWl0ZXIpOwogICAgICB2YWx1ZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgICBkZWxpbWl0ZXIgPSAnLCc7CiAgICB9CiAgICBzYi53cml0ZSgnXSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBDb25jYXRlbmF0ZUNvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICBleHByZXNzaW9ucy5tYXAoKGEpID0+IGEuYXBwbHkoYXJndW1lbnRzKSkudG9MaXN0KCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBleHByZXNzaW9uLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgICAgaWYgKCF2YWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIC8vIFVzZSBgY29udGludWVgIGluc3RlYWQgb2YgYHJldHVybmAgaGVyZSB0byByZXBvcnQgYWxsIGVycm9ycyBpbiB0aGUKICAgICAgICAvLyBleHByZXNzaW9uIGFuZCBub3QganVzdCB0aGUgZmlyc3QuCiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlLmlzUHJpbWl0aXZlKSB7CiAgICAgICAgaWYgKHZhbHVlIGlzIFN0cmluZ0NvbnN0YW50VmFsdWUpIHsKICAgICAgICAgIHNiLndyaXRlKHZhbHVlLnN0cmluZ1ZhbHVlKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIEludENvbnN0YW50VmFsdWUpIHsKICAgICAgICAgIHNiLndyaXRlKHZhbHVlLmludFZhbHVlKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIERvdWJsZUNvbnN0YW50VmFsdWUpIHsKICAgICAgICAgIHNiLndyaXRlKHZhbHVlLmRvdWJsZVZhbHVlKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIEJvb2xDb25zdGFudFZhbHVlKSB7CiAgICAgICAgICBzYi53cml0ZSh2YWx1ZS5ib29sVmFsdWUpOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgTnVsbENvbnN0YW50VmFsdWUpIHsKICAgICAgICAgIHNiLndyaXRlKG51bGwpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgZXhwcmVzc2lvbiwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9JTlRFUlBPTEFUSU9OX1RZUEUsIHsKICAgICAgICAgICdjb25zdGFudCc6IGV4cHJlc3Npb24sCiAgICAgICAgICAndHlwZSc6IHZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgICAgfSk7CiAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIC8vIFVzZSBgY29udGludWVgIGluc3RlYWQgb2YgYHJldHVybmAgaGVyZSB0byByZXBvcnQgYWxsIGVycm9ycyBpbiB0aGUKICAgICAgICAvLyBleHByZXNzaW9uIGFuZCBub3QganVzdCB0aGUgZmlyc3QuCiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc1ZhbGlkKSB7CiAgICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKHNiLnRvU3RyaW5nKCkpOwogICAgfQogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIGludCBoYXNoQ29kZSA9IDE3ICogZXhwcmVzc2lvbnMubGVuZ3RoOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgaGFzaENvZGUgXj0gMTkgKiB2YWx1ZS5oYXNoQ29kZTsKICAgIH0KICAgIHJldHVybiBoYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhDb25jYXRlbmF0ZUNvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgaWYgKGV4cHJlc3Npb25zLmxlbmd0aCAhPSBvdGhlci5leHByZXNzaW9ucy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGV4cHJlc3Npb25zW2ldICE9IG90aGVyLmV4cHJlc3Npb25zW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5zdHJpbmdUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4gZXhwcmVzc2lvbnMuYW55KChlKSA9PiBlLmlzUG90ZW50aWFsKTsKICB9Cn0KCi8vLyBTeW1ib2wgbGl0ZXJhbC4KY2xhc3MgU3ltYm9sQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgU3ltYm9sQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMubmFtZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TWU1CT0w7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTeW1ib2wodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdTeW1ib2wobmFtZT0kbmFtZSknKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTMgKiBuYW1lLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoU3ltYm9sQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gbmFtZSA9PSBvdGhlci5uYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3ltYm9sKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzLCBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5zeW1ib2xUeXBlOwp9CgovLy8gVHlwZSBsaXRlcmFsLgpjbGFzcyBUeXBlQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICAvLy8gRWl0aGVyIFtEeW5hbWljVHlwZV0gb3IgYSByYXcgW0dlbmVyaWNUeXBlXS4KICBmaW5hbCBEYXJ0VHlwZSB0eXBlOwogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBUeXBlQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMudHlwZSwgdGhpcy5uYW1lKSB7CiAgICBhc3NlcnQodHlwZS5pc0ludGVyZmFjZVR5cGUgfHwgdHlwZS5pc1R5cGVkZWYgfHwgdHlwZS5pc0R5bmFtaWMsCiAgICAgICAgIlVuZXhwZWN0ZWQgdHlwZSBjb25zdGFudCB0eXBlOiAkdHlwZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLlRZUEU7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRUeXBlKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnVHlwZSh0eXBlPSR0eXBlKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlVHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cywgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzICogdHlwZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKFR5cGVDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMudHlwZVR5cGU7Cn0KCi8vLyBDYXN0IGV4cHJlc3Npb25zOiB0aGVzZSBtYXkgYmUgZnJvbSBlaXRoZXIgZXhwbGljaXQgb3IgaW1wbGljaXQgYGFzYAovLy8gY2hlY2tzLgpjbGFzcyBBc0NvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb247CiAgZmluYWwgRGFydFR5cGUgdHlwZTsKCiAgQXNDb25zdGFudEV4cHJlc3Npb24odGhpcy5leHByZXNzaW9uLCB0aGlzLnR5cGUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuQVM7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRBcyh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0FzKHZhbHVlPScpOwogICAgZXhwcmVzc2lvbi5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyx0eXBlPSR0eXBlKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIC8vIFJ1bm5pbmcgZXhhbXBsZSBmb3IgY29tbWVudHM6CiAgICAvLwogICAgLy8gICAgIGNsYXNzIEE8VD4gewogICAgLy8gICAgICAgZmluYWwgVCB0OwogICAgLy8gICAgICAgY29uc3QgQShkeW5hbWljIHQpIDogdGhpcy50ID0gdDsgLy8gaW1wbGljaXRseSBgdCBhcyBBLlRgCiAgICAvLyAgICAgfQogICAgLy8gICAgIGNsYXNzIEI8Uz4gZXh0ZW5kcyBBPFM+IHsKICAgIC8vICAgICAgIGNvbnN0IEIoZHluYW1pYyBzKSA6IHN1cGVyKHMpOwogICAgLy8gICAgIH0KICAgIC8vICAgICBtYWluKCkgPT4gY29uc3QgQjxudW0+KDApOwogICAgLy8KICAgIC8vIFdlIHZpc2l0IGB0IGFzIEEuVGAgd2hpbGUgZXZhbHVhdGluZyBgY29uc3QgQjxudW0+KDApYC4KCiAgICAvLyBUaGUgZXhwcmVzc2lvbiB2YWx1ZSBpcyBgMGAuCiAgICBDb25zdGFudFZhbHVlIGV4cHJlc3Npb25WYWx1ZSA9IGV4cHJlc3Npb24uZXZhbHVhdGUoZW52aXJvbm1lbnQpOwoKICAgIGlmICghZW52aXJvbm1lbnQuY2hlY2tDYXN0cykgcmV0dXJuIGV4cHJlc3Npb25WYWx1ZTsKCiAgICAvLyBUaGUgZXhwcmVzc2lvbiB0eXBlIGlzIGBpbnRgLgogICAgRGFydFR5cGUgZXhwcmVzc2lvblR5cGUgPQogICAgICAgIGV4cHJlc3Npb25WYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKTsKCiAgICAvLyBUaGUgYGFzYCB0eXBlIGBBLlRgIGluIHRoZSBjb250ZXh0IG9mIGBCPG51bT5gIGlzIGBudW1gLgogICAgRGFydFR5cGUgdHlwZUluQ29udGV4dCA9IGVudmlyb25tZW50LmdldFR5cGVJbkNvbnRleHQodHlwZSk7CgogICAgLy8gQ2hlY2sgdGhhdCB0aGUgZXhwcmVzc2lvbiB0eXBlLCBgaW50YCwgaXMgYSBzdWJ0eXBlIG9mIHRoZSB0eXBlIGluCiAgICAvLyBjb250ZXh0LCBgbnVtYC4KICAgIGlmICghY29uc3RhbnRfc3lzdGVtLmlzU3VidHlwZSgKICAgICAgICBlbnZpcm9ubWVudC50eXBlcywgZXhwcmVzc2lvblR5cGUsIHR5cGVJbkNvbnRleHQpKSB7CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNvbnNpZGVyIHJlcG9ydGluZyBkaWZmZXJlbnQgbWVzc2FnZXMgYW5kIGVycm9yCiAgICAgIC8vIGxvY2F0aW9ucyBmb3IgaW1wbGljaXQgdnMgZXhwbGljaXQgY2FzdHMuCiAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ0FTVCwKICAgICAgICAgIHsnY29uc3RhbnQnOiBleHByZXNzaW9uLCAndHlwZSc6IGV4cHJlc3Npb25UeXBlLCAnY2FzdFR5cGUnOiB0eXBlfSk7CiAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgfQogICAgcmV0dXJuIGV4cHJlc3Npb25WYWx1ZTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBBc0NvbnN0YW50RXhwcmVzc2lvbihleHByZXNzaW9uLmFwcGx5KGFyZ3VtZW50cyksIHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMyAqIHR5cGUuaGFzaENvZGUgKyAxNyAqIGV4cHJlc3Npb24uaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhBc0NvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGV4cHJlc3Npb24gPT0gb3RoZXIuZXhwcmVzc2lvbiAmJiB0eXBlID09IG90aGVyLnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgZXhwcmVzc2lvbi5nZXRLbm93blR5cGUoY29tbW9uRWxlbWVudHMpOwp9CgovLy8gUmVmZXJlbmNlIHRvIGEgY29uc3RhbnQgdG9wLWxldmVsIG9yIHN0YXRpYyBmaWVsZC4KY2xhc3MgRmllbGRDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIEZpZWxkRW50aXR5IGVsZW1lbnQ7CgogIEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuZWxlbWVudCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5GSUVMRDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEZpZWxkKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnRmllbGQoZWxlbWVudD0kZWxlbWVudCknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuZXZhbHVhdGVGaWVsZChlbGVtZW50LCAoKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCA9IGVudmlyb25tZW50LmdldEZpZWxkQ29uc3RhbnQoZWxlbWVudCk7CiAgICAgIHJldHVybiBjb25zdGFudC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTMgKiBlbGVtZW50Lmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRmllbGRDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBlbGVtZW50ID09IG90aGVyLmVsZW1lbnQ7CiAgfQp9CgovLy8gUmVmZXJlbmNlIHRvIGEgY29uc3RhbnQgbG9jYWwgdmFyaWFibGUuCmNsYXNzIExvY2FsVmFyaWFibGVDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIExvY2FsIGVsZW1lbnQ7CgogIExvY2FsVmFyaWFibGVDb25zdGFudEV4cHJlc3Npb24odGhpcy5lbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkxPQ0FMX1ZBUklBQkxFOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TG9jYWxWYXJpYWJsZSh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0xvY2FsVmFyaWFibGUoZWxlbWVudD0kZWxlbWVudCknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgPSBlbnZpcm9ubWVudC5nZXRMb2NhbENvbnN0YW50KGVsZW1lbnQpOwogICAgcmV0dXJuIGNvbnN0YW50LmV2YWx1YXRlKGVudmlyb25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTMgKiBlbGVtZW50Lmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoTG9jYWxWYXJpYWJsZUNvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGVsZW1lbnQgPT0gb3RoZXIuZWxlbWVudDsKICB9Cn0KCi8vLyBSZWZlcmVuY2UgdG8gYSB0b3AtbGV2ZWwgb3Igc3RhdGljIGZ1bmN0aW9uLgpjbGFzcyBGdW5jdGlvbkNvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgRnVuY3Rpb25FbnRpdHkgZWxlbWVudDsKICBmaW5hbCBGdW5jdGlvblR5cGUgdHlwZTsKCiAgRnVuY3Rpb25Db25zdGFudEV4cHJlc3Npb24odGhpcy5lbGVtZW50LCB0aGlzLnR5cGUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuRlVOQ1RJT047CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRGdW5jdGlvbih0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0Z1bmN0aW9uKGVsZW1lbnQ9JGVsZW1lbnQpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIG5ldyBGdW5jdGlvbkNvbnN0YW50VmFsdWUoZWxlbWVudCwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzICogZWxlbWVudC5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEZ1bmN0aW9uQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gZWxlbWVudCA9PSBvdGhlci5lbGVtZW50OwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uVHlwZTsKfQoKLy8vIEEgY29uc3RhbnQgYmluYXJ5IGV4cHJlc3Npb24gbGlrZSBgYSAqIGJgLgpjbGFzcyBCaW5hcnlDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBsZWZ0OwogIGZpbmFsIEJpbmFyeU9wZXJhdG9yIG9wZXJhdG9yOwogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiByaWdodDsKCiAgQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uKHRoaXMubGVmdCwgdGhpcy5vcGVyYXRvciwgdGhpcy5yaWdodCkgewogICAgYXNzZXJ0KFBSRUNFREVOQ0VfTUFQW29wZXJhdG9yLmtpbmRdICE9IG51bGwsCiAgICAgICAgIk1pc3NpbmcgcHJlY2VuZGVuY2UgZm9yIGJpbmFyeSBvcGVyYXRvcjogJyRvcGVyYXRvcicuIik7CiAgfQoKICBzdGF0aWMgYm9vbCBwb3RlbnRpYWxPcGVyYXRvcihCaW5hcnlPcGVyYXRvciBvcGVyYXRvcikgPT4KICAgICAgUFJFQ0VERU5DRV9NQVBbb3BlcmF0b3Iua2luZF0gIT0gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkJJTkFSWTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEJpbmFyeSh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0JpbmFyeShsZWZ0PScpOwogICAgbGVmdC5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyxvcD0kb3BlcmF0b3IscmlnaHQ9Jyk7CiAgICByaWdodC5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudFZhbHVlIGxlZnRWYWx1ZSA9IGxlZnQuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgaWYgKCFsZWZ0VmFsdWUuaXNDb25zdGFudCkgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICBDb25zdGFudFZhbHVlIHJpZ2h0VmFsdWU7CiAgICAvLyBTaG9ydC1jaXJjdWl0ICYmIGFuZCB8fCBvcGVyYXRvcnMuCiAgICBzd2l0Y2ggKG9wZXJhdG9yLmtpbmQpIHsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9BTkQ6CiAgICAgICAgaWYgKGxlZnRWYWx1ZS5pc0Jvb2wgJiYgbGVmdFZhbHVlLmlzRmFsc2UpIHsKICAgICAgICAgIHJpZ2h0VmFsdWUgPSBuZXcgRmFsc2VDb25zdGFudFZhbHVlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJpZ2h0VmFsdWUgPSByaWdodC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9PUjoKICAgICAgICBpZiAobGVmdFZhbHVlLmlzQm9vbCAmJiBsZWZ0VmFsdWUuaXNUcnVlKSB7CiAgICAgICAgICByaWdodFZhbHVlID0gbmV3IFRydWVDb25zdGFudFZhbHVlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJpZ2h0VmFsdWUgPSByaWdodC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHJpZ2h0VmFsdWUgPSByaWdodC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICB9CgogICAgaWYgKCFyaWdodFZhbHVlLmlzQ29uc3RhbnQpIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKICAgIHN3aXRjaCAob3BlcmF0b3Iua2luZCkgewogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5FUToKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTk9UX0VROgogICAgICAgIGlmICghbGVmdFZhbHVlLmlzUHJpbWl0aXZlKSB7CiAgICAgICAgICBpZiAoIXJpZ2h0VmFsdWUuaXNOdWxsKSB7CiAgICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgICAgbGVmdCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfUFJJTUlUSVZFX1RZUEUsIHsKICAgICAgICAgICAgICAnY29uc3RhbnQnOiBsZWZ0LAogICAgICAgICAgICAgICd0eXBlJzogbGVmdFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghcmlnaHRWYWx1ZS5pc1ByaW1pdGl2ZSkgewogICAgICAgICAgaWYgKCFsZWZ0VmFsdWUuaXNOdWxsKSB7CiAgICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgICAgcmlnaHQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX1BSSU1JVElWRV9UWVBFLCB7CiAgICAgICAgICAgICAgJ2NvbnN0YW50JzogcmlnaHQsCiAgICAgICAgICAgICAgJ3R5cGUnOiByaWdodFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5BREQ6CiAgICAgICAgaWYgKGxlZnRWYWx1ZS5pc1N0cmluZykgewogICAgICAgICAgaWYgKCFyaWdodFZhbHVlLmlzU3RyaW5nKSB7CiAgICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgICAgcmlnaHQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0FERF9UWVBFLCB7CiAgICAgICAgICAgICAgJ2NvbnN0YW50JzogcmlnaHQsCiAgICAgICAgICAgICAgJ3R5cGUnOiByaWdodFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChsZWZ0VmFsdWUuaXNOdW0pIHsKICAgICAgICAgIGlmICghcmlnaHRWYWx1ZS5pc051bSkgewogICAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICAgIHJpZ2h0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05VTV9BRERfVFlQRSwgewogICAgICAgICAgICAgICdjb25zdGFudCc6IHJpZ2h0LAogICAgICAgICAgICAgICd0eXBlJzogcmlnaHRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocmlnaHRWYWx1ZS5pc1N0cmluZykgewogICAgICAgICAgaWYgKCFsZWZ0VmFsdWUuaXNTdHJpbmcpIHsKICAgICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgICBsZWZ0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NUUklOR19BRERfVFlQRSwgewogICAgICAgICAgICAgICdjb25zdGFudCc6IGxlZnQsCiAgICAgICAgICAgICAgJ3R5cGUnOiBsZWZ0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0VmFsdWUuaXNOdW0pIHsKICAgICAgICAgIGlmICghbGVmdFZhbHVlLmlzTnVtKSB7CiAgICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgICAgbGVmdCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9OVU1fQUREX1RZUEUsIHsKICAgICAgICAgICAgICAnY29uc3RhbnQnOiBsZWZ0LAogICAgICAgICAgICAgICd0eXBlJzogbGVmdFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVudmlyb25tZW50CiAgICAgICAgICAgICAgLnJlcG9ydEVycm9yKHRoaXMsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQUREX1RZUEVTLCB7CiAgICAgICAgICAgICdsZWZ0Q29uc3RhbnQnOiBsZWZ0LAogICAgICAgICAgICAnbGVmdFR5cGUnOiBsZWZ0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdyaWdodENvbnN0YW50JzogcmlnaHQsCiAgICAgICAgICAgICdyaWdodFR5cGUnOiByaWdodFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNVQjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTVVMOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5ESVY6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklESVY6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk1PRDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuR1RFUToKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuR1Q6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxURVE6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxUOgogICAgICAgIGlmICghbGVmdFZhbHVlLmlzTnVtKSB7CiAgICAgICAgICBlbnZpcm9ubWVudAogICAgICAgICAgICAgIC5yZXBvcnRFcnJvcihsZWZ0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9OVU1fVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiBsZWZ0LAogICAgICAgICAgICAndHlwZSc6IGxlZnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIXJpZ2h0VmFsdWUuaXNOdW0pIHsKICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgIHJpZ2h0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9OVU1fVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiByaWdodCwKICAgICAgICAgICAgJ3R5cGUnOiByaWdodFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChpc1ZhbGlkICYmCiAgICAgICAgICAgIChvcGVyYXRvci5raW5kID09IEJpbmFyeU9wZXJhdG9yS2luZC5JRElWIHx8CiAgICAgICAgICAgICAgICBvcGVyYXRvci5raW5kID09IEJpbmFyeU9wZXJhdG9yS2luZC5NT0QpKSB7CiAgICAgICAgICBpZiAocmlnaHRWYWx1ZS5pc1plcm8pIHsKICAgICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IocmlnaHQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfRElWLAogICAgICAgICAgICAgICAgeydsZWZ0JzogbGVmdCwgJ3JpZ2h0JzogcmlnaHQsICdvcGVyYXRvcic6IG9wZXJhdG9yfSk7CiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNITDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hSOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TSFJVOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5BTkQ6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk9SOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5YT1I6CiAgICAgICAgaWYgKCFsZWZ0VmFsdWUuaXNJbnQpIHsKICAgICAgICAgIGVudmlyb25tZW50CiAgICAgICAgICAgICAgLnJlcG9ydEVycm9yKGxlZnQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX0lOVF9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IGxlZnQsCiAgICAgICAgICAgICd0eXBlJzogbGVmdFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghcmlnaHRWYWx1ZS5pc0ludCkgewogICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgcmlnaHQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX0lOVF9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IHJpZ2h0LAogICAgICAgICAgICAndHlwZSc6IHJpZ2h0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzVmFsaWQgJiYKICAgICAgICAgICAgKG9wZXJhdG9yLmtpbmQgPT0gQmluYXJ5T3BlcmF0b3JLaW5kLlNITCB8fAogICAgICAgICAgICAgICAgb3BlcmF0b3Iua2luZCA9PSBCaW5hcnlPcGVyYXRvcktpbmQuU0hSIHx8CiAgICAgICAgICAgICAgICBvcGVyYXRvci5raW5kID09IEJpbmFyeU9wZXJhdG9yS2luZC5TSFJVKSkgewogICAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSBzaGlmdCA9IHJpZ2h0VmFsdWU7CiAgICAgICAgICBpZiAoc2hpZnQuaW50VmFsdWUgPCBCaWdJbnQuemVybykgewogICAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcihyaWdodCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TSElGVCwKICAgICAgICAgICAgICAgIHsnbGVmdCc6IGxlZnQsICdyaWdodCc6IHJpZ2h0LCAnb3BlcmF0b3InOiBvcGVyYXRvcn0pOwogICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX0FORDoKICAgICAgICBpZiAoIWxlZnRWYWx1ZS5pc0Jvb2wpIHsKICAgICAgICAgIGVudmlyb25tZW50CiAgICAgICAgICAgICAgLnJlcG9ydEVycm9yKGxlZnQsIE1lc3NhZ2VLaW5kLklOVkFMSURfTE9HSUNBTF9BTkRfT1BFUkFORF9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IGxlZnQsCiAgICAgICAgICAgICd0eXBlJzogbGVmdFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghcmlnaHRWYWx1ZS5pc0Jvb2wpIHsKICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgIHJpZ2h0LCBNZXNzYWdlS2luZC5JTlZBTElEX0xPR0lDQUxfQU5EX09QRVJBTkRfVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiByaWdodCwKICAgICAgICAgICAgJ3R5cGUnOiByaWdodFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX09SOgogICAgICAgIGlmICghbGVmdFZhbHVlLmlzQm9vbCkgewogICAgICAgICAgZW52aXJvbm1lbnQKICAgICAgICAgICAgICAucmVwb3J0RXJyb3IobGVmdCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX09SX09QRVJBTkRfVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiBsZWZ0LAogICAgICAgICAgICAndHlwZSc6IGxlZnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIXJpZ2h0VmFsdWUuaXNCb29sKSB7CiAgICAgICAgICBlbnZpcm9ubWVudAogICAgICAgICAgICAgIC5yZXBvcnRFcnJvcihyaWdodCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX09SX09QRVJBTkRfVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiByaWdodCwKICAgICAgICAgICAgJ3R5cGUnOiByaWdodFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JTkRFWDoKICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcih0aGlzLCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0lOREVYLCB7fSk7CiAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JRl9OVUxMOgogICAgICAgIC8vIFZhbGlkIHNpbmNlIFtsZWZ0VmFsdWVdIGFuZCBbcmlnaHRWYWx1ZV0gYXJlIGNvbnN0YW50cy4KICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChpc1ZhbGlkKSB7CiAgICAgIHN3aXRjaCAob3BlcmF0b3Iua2luZCkgewogICAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk5PVF9FUToKICAgICAgICAgIEJvb2xDb25zdGFudFZhbHVlIGVxdWFscyA9CiAgICAgICAgICAgICAgY29uc3RhbnRfc3lzdGVtLmVxdWFsLmZvbGQobGVmdFZhbHVlLCByaWdodFZhbHVlKTsKICAgICAgICAgIHJldHVybiBlcXVhbHMubmVnYXRlKCk7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBjb25zdGFudF9zeXN0ZW0KICAgICAgICAgICAgICAubG9va3VwQmluYXJ5KG9wZXJhdG9yKQogICAgICAgICAgICAgIC5mb2xkKGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSk7CiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBlbnZpcm9ubWVudAogICAgICAgICAgICAgIC5yZXBvcnRFcnJvcih0aGlzLCBNZXNzYWdlS2luZC5OT1RfQV9DT01QSUxFX1RJTUVfQ09OU1RBTlQsIHt9KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIGxlZnQuYXBwbHkoYXJndW1lbnRzKSwgb3BlcmF0b3IsIHJpZ2h0LmFwcGx5KGFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgLy8gaWdub3JlOiBNSVNTSU5HX1JFVFVSTgogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICBEYXJ0VHlwZSBrbm93bkxlZnRUeXBlID0gbGVmdC5nZXRLbm93blR5cGUoY29tbW9uRWxlbWVudHMpOwogICAgRGFydFR5cGUga25vd25SaWdodFR5cGUgPSByaWdodC5nZXRLbm93blR5cGUoY29tbW9uRWxlbWVudHMpOwogICAgc3dpdGNoIChvcGVyYXRvci5raW5kKSB7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkVROgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5OT1RfRVE6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfQU5EOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX09SOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5HVDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTFQ6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkdURVE6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxURVE6CiAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmJvb2xUeXBlOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5BREQ6CiAgICAgICAgaWYgKGtub3duTGVmdFR5cGUgPT0gY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZSkgewogICAgICAgICAgYXNzZXJ0KGtub3duUmlnaHRUeXBlID09IGNvbW1vbkVsZW1lbnRzLnN0cmluZ1R5cGUpOwogICAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLnN0cmluZ1R5cGU7CiAgICAgICAgfSBlbHNlIGlmIChrbm93bkxlZnRUeXBlID09IGNvbW1vbkVsZW1lbnRzLmludFR5cGUgJiYKICAgICAgICAgICAga25vd25SaWdodFR5cGUgPT0gY29tbW9uRWxlbWVudHMuaW50VHlwZSkgewogICAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmludFR5cGU7CiAgICAgICAgfQogICAgICAgIGFzc2VydChrbm93bkxlZnRUeXBlID09IGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGUgfHwKICAgICAgICAgICAga25vd25SaWdodFR5cGUgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZSk7CiAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGU7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNVQjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTVVMOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5NT0Q6CiAgICAgICAgaWYgKGtub3duTGVmdFR5cGUgPT0gY29tbW9uRWxlbWVudHMuaW50VHlwZSAmJgogICAgICAgICAgICBrbm93blJpZ2h0VHlwZSA9PSBjb21tb25FbGVtZW50cy5pbnRUeXBlKSB7CiAgICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuaW50VHlwZTsKICAgICAgICB9CiAgICAgICAgYXNzZXJ0KGtub3duTGVmdFR5cGUgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZSB8fAogICAgICAgICAgICBrbm93blJpZ2h0VHlwZSA9PSBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlKTsKICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuRElWOgogICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JRElWOgogICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5pbnRUeXBlOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5BTkQ6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk9SOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5YT1I6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNITDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hSOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TSFJVOgogICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5pbnRUeXBlOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JRl9OVUxMOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JTkRFWDoKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgY29uc3RhbnQgYmluYXJ5IG9wZXJhdG9yOiAkb3BlcmF0b3InKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgcHJlY2VkZW5jZSA9PiBQUkVDRURFTkNFX01BUFtvcGVyYXRvci5raW5kXTsKCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICByZXR1cm4gMTMgKiBvcGVyYXRvci5oYXNoQ29kZSArIDE3ICogbGVmdC5oYXNoQ29kZSArIDE5ICogcmlnaHQuaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gb3BlcmF0b3IgPT0gb3RoZXIub3BlcmF0b3IgJiYKICAgICAgICBsZWZ0ID09IG90aGVyLmxlZnQgJiYKICAgICAgICByaWdodCA9PSBvdGhlci5yaWdodDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBsZWZ0LmlzUG90ZW50aWFsIHx8IHJpZ2h0LmlzUG90ZW50aWFsOwogIH0KCiAgc3RhdGljIGNvbnN0IE1hcDxCaW5hcnlPcGVyYXRvcktpbmQsIGludD4gUFJFQ0VERU5DRV9NQVAgPSBjb25zdCB7CiAgICBCaW5hcnlPcGVyYXRvcktpbmQuRVE6IDYsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuTk9UX0VROiA2LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfQU5EOiA1LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfT1I6IDQsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuWE9SOiA5LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkFORDogMTAsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuT1I6IDgsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuU0hMOiAxMSwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5TSFI6IDExLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLlNIUlU6IDExLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkFERDogMTIsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuU1VCOiAxMiwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5NVUw6IDEzLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkRJVjogMTMsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuSURJVjogMTMsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuR1Q6IDcsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuTFQ6IDcsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuR1RFUTogNywKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5MVEVROiA3LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLk1PRDogMTMsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuSUZfTlVMTDogMywKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5JTkRFWDogMywKICB9Owp9CgovLy8gQSBjb25zdGFudCBpZGVudGljYWwgaW52b2NhdGlvbiBsaWtlIGBpZGVudGljYWwoYSwgYilgLgpjbGFzcyBJZGVudGljYWxDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBsZWZ0OwogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiByaWdodDsKCiAgSWRlbnRpY2FsQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMubGVmdCwgdGhpcy5yaWdodCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5JREVOVElDQUw7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJZGVudGljYWwodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdJZGVudGljYWwobGVmdD0nKTsKICAgIGxlZnQuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcscmlnaHQ9Jyk7CiAgICByaWdodC5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudFZhbHVlIGxlZnRWYWx1ZSA9IGxlZnQuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgQ29uc3RhbnRWYWx1ZSByaWdodFZhbHVlID0gcmlnaHQuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgaWYgKGxlZnRWYWx1ZS5pc0NvbnN0YW50ICYmIHJpZ2h0VmFsdWUuaXNDb25zdGFudCkgewogICAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmlkZW50aXR5LmZvbGQobGVmdFZhbHVlLCByaWdodFZhbHVlKTsKICAgIH0KICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IElkZW50aWNhbENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICBsZWZ0LmFwcGx5KGFyZ3VtZW50cyksIHJpZ2h0LmFwcGx5KGFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBwcmVjZWRlbmNlID0+IDE1OwoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIHJldHVybiAxNyAqIGxlZnQuaGFzaENvZGUgKyAxOSAqIHJpZ2h0Lmhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKElkZW50aWNhbENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGxlZnQgPT0gb3RoZXIubGVmdCAmJiByaWdodCA9PSBvdGhlci5yaWdodDsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5ib29sVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIGxlZnQuaXNQb3RlbnRpYWwgfHwgcmlnaHQuaXNQb3RlbnRpYWw7CiAgfQp9CgovLy8gQSB1bmFyeSBjb25zdGFudCBleHByZXNzaW9uIGxpa2UgYC1hYC4KY2xhc3MgVW5hcnlDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIFVuYXJ5T3BlcmF0b3Igb3BlcmF0b3I7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIFVuYXJ5Q29uc3RhbnRFeHByZXNzaW9uKHRoaXMub3BlcmF0b3IsIHRoaXMuZXhwcmVzc2lvbikgewogICAgYXNzZXJ0KFBSRUNFREVOQ0VfTUFQW29wZXJhdG9yLmtpbmRdICE9IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLlVOQVJZOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0VW5hcnkodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdVbmFyeShvcD0kb3BlcmF0b3IsZXhwcmVzc2lvbj0nKTsKICAgIGV4cHJlc3Npb24uX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRWYWx1ZSBleHByZXNzaW9uVmFsdWUgPSBleHByZXNzaW9uLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CiAgICBzd2l0Y2ggKG9wZXJhdG9yLmtpbmQpIHsKICAgICAgY2FzZSBVbmFyeU9wZXJhdG9yS2luZC5OT1Q6CiAgICAgICAgaWYgKCFleHByZXNzaW9uVmFsdWUuaXNCb29sKSB7CiAgICAgICAgICBlbnZpcm9ubWVudAogICAgICAgICAgICAgIC5yZXBvcnRFcnJvcihleHByZXNzaW9uLCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05PVF9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IGV4cHJlc3Npb24sCiAgICAgICAgICAgICd0eXBlJzogZXhwcmVzc2lvblZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFVuYXJ5T3BlcmF0b3JLaW5kLk5FR0FURToKICAgICAgICBpZiAoIWV4cHJlc3Npb25WYWx1ZS5pc051bSkgewogICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgZXhwcmVzc2lvbiwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9ORUdBVEVfVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiBleHByZXNzaW9uLAogICAgICAgICAgICAndHlwZSc6IGV4cHJlc3Npb25WYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBVbmFyeU9wZXJhdG9yS2luZC5DT01QTEVNRU5UOgogICAgICAgIGlmICghZXhwcmVzc2lvblZhbHVlLmlzSW50KSB7CiAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICBleHByZXNzaW9uLCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTVBMRU1FTlRfVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiBleHByZXNzaW9uLAogICAgICAgICAgICAndHlwZSc6IGV4cHJlc3Npb25WYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChpc1ZhbGlkKSB7CiAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPQogICAgICAgICAgY29uc3RhbnRfc3lzdGVtLmxvb2t1cFVuYXJ5KG9wZXJhdG9yKS5mb2xkKGV4cHJlc3Npb25WYWx1ZSk7CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBVbmFyeUNvbnN0YW50RXhwcmVzc2lvbihvcGVyYXRvciwgZXhwcmVzc2lvbi5hcHBseShhcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgcHJlY2VkZW5jZSA9PiBQUkVDRURFTkNFX01BUFtvcGVyYXRvci5raW5kXTsKCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICByZXR1cm4gMTMgKiBvcGVyYXRvci5oYXNoQ29kZSArIDE3ICogZXhwcmVzc2lvbi5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhVbmFyeUNvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIG9wZXJhdG9yID09IG90aGVyLm9wZXJhdG9yICYmIGV4cHJlc3Npb24gPT0gb3RoZXIuZXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgcmV0dXJuIGV4cHJlc3Npb24uZ2V0S25vd25UeXBlKGNvbW1vbkVsZW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBleHByZXNzaW9uLmlzUG90ZW50aWFsOwogIH0KCiAgc3RhdGljIGNvbnN0IE1hcDxVbmFyeU9wZXJhdG9yS2luZCwgaW50PiBQUkVDRURFTkNFX01BUCA9IGNvbnN0IHsKICAgIFVuYXJ5T3BlcmF0b3JLaW5kLk5PVDogMTQsCiAgICBVbmFyeU9wZXJhdG9yS2luZC5DT01QTEVNRU5UOiAxNCwKICAgIFVuYXJ5T3BlcmF0b3JLaW5kLk5FR0FURTogMTQsCiAgfTsKfQoKLy8vIEEgc3RyaW5nIGxlbmd0aCBjb25zdGFudCBleHByZXNzaW9uIGxpa2UgYGEubGVuZ3RoYC4KY2xhc3MgU3RyaW5nTGVuZ3RoQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgU3RyaW5nTGVuZ3RoQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuZXhwcmVzc2lvbik7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TVFJJTkdfTEVOR1RIOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3RyaW5nTGVuZ3RoKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnU3RyaW5nTGVuZ3RoKGV4cHJlc3Npb249Jyk7CiAgICBleHByZXNzaW9uLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBleHByZXNzaW9uLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIGlmICghdmFsdWUuaXNTdHJpbmcpIHsKICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICBleHByZXNzaW9uLCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NUUklOR19MRU5HVEhfVFlQRSwgewogICAgICAgICdjb25zdGFudCc6IGV4cHJlc3Npb24sCiAgICAgICAgJ3R5cGUnOiB2YWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmdDb25zdGFudFZhbHVlIHN0cmluZ1ZhbHVlID0gdmFsdWU7CiAgICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0KICAgICAgICAgIC5jcmVhdGVJbnQobmV3IEJpZ0ludC5mcm9tKHN0cmluZ1ZhbHVlLnN0cmluZ1ZhbHVlLmxlbmd0aCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFN0cmluZ0xlbmd0aENvbnN0YW50RXhwcmVzc2lvbihleHByZXNzaW9uLmFwcGx5KGFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBwcmVjZWRlbmNlID0+IDE1OwoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIHJldHVybiAyMyAqIGV4cHJlc3Npb24uaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoU3RyaW5nTGVuZ3RoQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gZXhwcmVzc2lvbiA9PSBvdGhlci5leHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLmludFR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBleHByZXNzaW9uLmlzUG90ZW50aWFsOwogIH0KfQoKLy8vIEEgY29uc3RhbnQgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBsaWtlIGBhID8gYiA6IGNgLgpjbGFzcyBDb25kaXRpb25hbENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGNvbmRpdGlvbjsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gdHJ1ZUV4cDsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gZmFsc2VFeHA7CgogIENvbmRpdGlvbmFsQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuY29uZGl0aW9uLCB0aGlzLnRydWVFeHAsIHRoaXMuZmFsc2VFeHApOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuQ09ORElUSU9OQUw7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb25kaXRpb25hbCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0NvbmRpdGlvbmFsKGNvbmRpdGlvbj0nKTsKICAgIGNvbmRpdGlvbi5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyx0cnVlPScpOwogICAgdHJ1ZUV4cC5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyxmYWxzZT0nKTsKICAgIGZhbHNlRXhwLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsQ29uc3RhbnRFeHByZXNzaW9uKGNvbmRpdGlvbi5hcHBseShhcmd1bWVudHMpLAogICAgICAgIHRydWVFeHAuYXBwbHkoYXJndW1lbnRzKSwgZmFsc2VFeHAuYXBwbHkoYXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHByZWNlZGVuY2UgPT4gMzsKCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICByZXR1cm4gMTMgKiBjb25kaXRpb24uaGFzaENvZGUgKwogICAgICAgIDE3ICogdHJ1ZUV4cC5oYXNoQ29kZSArCiAgICAgICAgMTkgKiBmYWxzZUV4cC5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhDb25kaXRpb25hbENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGNvbmRpdGlvbiA9PSBvdGhlci5jb25kaXRpb24gJiYKICAgICAgICB0cnVlRXhwID09IG90aGVyLnRydWVFeHAgJiYKICAgICAgICBmYWxzZUV4cCA9PSBvdGhlci5mYWxzZUV4cDsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudFZhbHVlIGNvbmRpdGlvblZhbHVlID0gY29uZGl0aW9uLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIENvbnN0YW50VmFsdWUgdHJ1ZVZhbHVlID0gdHJ1ZUV4cC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBDb25zdGFudFZhbHVlIGZhbHNlVmFsdWUgPSBmYWxzZUV4cC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBib29sIGlzVmFsaWQgPSB0cnVlOwogICAgaWYgKCFjb25kaXRpb25WYWx1ZS5pc0Jvb2wpIHsKICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICBjb25kaXRpb24sIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09ORElUSU9OQUxfVFlQRSwgewogICAgICAgICdjb25zdGFudCc6IGNvbmRpdGlvbiwKICAgICAgICAndHlwZSc6IGNvbmRpdGlvblZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgIH0pOwogICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICB9CiAgICBpZiAoaXNWYWxpZCkgewogICAgICBpZiAoY29uZGl0aW9uVmFsdWUuaXNUcnVlKSB7CiAgICAgICAgcmV0dXJuIHRydWVWYWx1ZTsKICAgICAgfSBlbHNlIGlmIChjb25kaXRpb25WYWx1ZS5pc0ZhbHNlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlVmFsdWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICBEYXJ0VHlwZSB0cnVlVHlwZSA9IHRydWVFeHAuZ2V0S25vd25UeXBlKGNvbW1vbkVsZW1lbnRzKTsKICAgIERhcnRUeXBlIGZhbHNlVHlwZSA9IGZhbHNlRXhwLmdldEtub3duVHlwZShjb21tb25FbGVtZW50cyk7CiAgICBpZiAodHJ1ZVR5cGUgPT0gZmFsc2VUeXBlKSB7CiAgICAgIHJldHVybiB0cnVlVHlwZTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIGNvbmRpdGlvbi5pc1BvdGVudGlhbCB8fCB0cnVlRXhwLmlzUG90ZW50aWFsIHx8IGZhbHNlRXhwLmlzUG90ZW50aWFsOwogIH0KfQoKLy8vIEEgcmVmZXJlbmNlIHRvIGEgcG9zaXRpb24gcGFyYW1ldGVyLgpjbGFzcyBQb3NpdGlvbmFsQXJndW1lbnRSZWZlcmVuY2UgZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIGludCBpbmRleDsKCiAgUG9zaXRpb25hbEFyZ3VtZW50UmVmZXJlbmNlKHRoaXMuaW5kZXgpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kIHsKICAgIHJldHVybiBDb25zdGFudEV4cHJlc3Npb25LaW5kLlBPU0lUSU9OQUxfUkVGRVJFTkNFOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFBvc2l0aW9uYWwodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdQb3NpdGlvbmFsKGluZGV4PSRpbmRleCknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGFyZ3VtZW50cy5nZXRQb3NpdGlvbmFsQXJndW1lbnQoaW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMyAqIGluZGV4Lmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoUG9zaXRpb25hbEFyZ3VtZW50UmVmZXJlbmNlIG90aGVyKSA9PiBpbmRleCA9PSBvdGhlci5pbmRleDsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgPT4gdHJ1ZTsKfQoKLy8vIEEgcmVmZXJlbmNlIHRvIGEgbmFtZWQgcGFyYW1ldGVyLgpjbGFzcyBOYW1lZEFyZ3VtZW50UmVmZXJlbmNlIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgTmFtZWRBcmd1bWVudFJlZmVyZW5jZSh0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kIHsKICAgIHJldHVybiBDb25zdGFudEV4cHJlc3Npb25LaW5kLk5BTUVEX1JFRkVSRU5DRTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXROYW1lZCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ05hbWVkKG5hbWU9JG5hbWUpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBhcmd1bWVudHMuZ2V0TmFtZWRBcmd1bWVudChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTMgKiBuYW1lLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoTmFtZWRBcmd1bWVudFJlZmVyZW5jZSBvdGhlcikgPT4gbmFtZSA9PSBvdGhlci5uYW1lOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCA9PiB0cnVlOwp9CgphYnN0cmFjdCBjbGFzcyBGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBuYW1lOwogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBkZWZhdWx0VmFsdWU7CgogIEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbih0aGlzLm5hbWUsIHRoaXMuZGVmYXVsdFZhbHVlKTsKCiAgYm9vbCBfY2hlY2tOYW1lRnJvbUVudmlyb25tZW50KEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIG5hbWUsIENvbnN0YW50VmFsdWUgbmFtZVZhbHVlKSB7CiAgICBpZiAoIW5hbWVWYWx1ZS5pc1N0cmluZykgewogICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgIG5hbWUsIE1lc3NhZ2VLaW5kLklOVkFMSURfRlJPTV9FTlZJUk9OTUVOVF9OQU1FX1RZUEUsIHsKICAgICAgICAnY29uc3RhbnQnOiBuYW1lLAogICAgICAgICd0eXBlJzogbmFtZVZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgIH0pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgcmV0dXJuIDEzICogbmFtZS5oYXNoQ29kZSArIDE3ICogZGVmYXVsdFZhbHVlLmhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIG5hbWUgPT0gb3RoZXIubmFtZSAmJiBkZWZhdWx0VmFsdWUgPT0gb3RoZXIuZGVmYXVsdFZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbXBsaWNpdCB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4gbmFtZS5pc1BvdGVudGlhbCB8fAogICAgICAgIChkZWZhdWx0VmFsdWUgIT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUuaXNQb3RlbnRpYWwpOwogIH0KfQoKLy8vIEEgYGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50YCBjb25zdGFudC4KY2xhc3MgQm9vbEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbgogICAgZXh0ZW5kcyBGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gewogIEJvb2xGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBuYW1lLCBDb25zdGFudEV4cHJlc3Npb24gZGVmYXVsdFZhbHVlKQogICAgICA6IHN1cGVyKG5hbWUsIGRlZmF1bHRWYWx1ZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgewogICAgcmV0dXJuIENvbnN0YW50RXhwcmVzc2lvbktpbmQuQk9PTF9GUk9NX0VOVklST05NRU5UOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEJvb2xGcm9tRW52aXJvbm1lbnQodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdib29sLmZyb21FbnZpcm9ubWVudChuYW1lPScpOwogICAgbmFtZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyxkZWZhdWx0VmFsdWU9Jyk7CiAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgZGVmYXVsdFZhbHVlLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICB9IGVsc2UgewogICAgICBzYi53cml0ZSgnbnVsbCcpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudFZhbHVlIG5hbWVDb25zdGFudFZhbHVlID0gbmFtZS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBDb25zdGFudFZhbHVlIGRlZmF1bHRDb25zdGFudFZhbHVlOwogICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGRlZmF1bHRDb25zdGFudFZhbHVlID0gZGVmYXVsdFZhbHVlLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGRlZmF1bHRDb25zdGFudFZhbHVlID0gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUJvb2woZmFsc2UpOwogICAgfQogICAgaWYgKCFuYW1lQ29uc3RhbnRWYWx1ZS5pc0NvbnN0YW50IHx8ICFkZWZhdWx0Q29uc3RhbnRWYWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgfQogICAgYm9vbCBpc1ZhbGlkID0KICAgICAgICBfY2hlY2tOYW1lRnJvbUVudmlyb25tZW50KGVudmlyb25tZW50LCBuYW1lLCBuYW1lQ29uc3RhbnRWYWx1ZSk7CiAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgaWYgKCFkZWZhdWx0Q29uc3RhbnRWYWx1ZS5pc0Jvb2wgJiYgIWRlZmF1bHRDb25zdGFudFZhbHVlLmlzTnVsbCkgewogICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKGRlZmF1bHRWYWx1ZSwKICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9CT09MX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLCB7CiAgICAgICAgICAnY29uc3RhbnQnOiBkZWZhdWx0VmFsdWUsCiAgICAgICAgICAndHlwZSc6IGRlZmF1bHRDb25zdGFudFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgICAgfSk7CiAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNWYWxpZCkgewogICAgICBTdHJpbmdDb25zdGFudFZhbHVlIG5hbWVTdHJpbmdDb25zdGFudFZhbHVlID0gbmFtZUNvbnN0YW50VmFsdWU7CiAgICAgIFN0cmluZyB0ZXh0ID0KICAgICAgICAgIGVudmlyb25tZW50LnJlYWRGcm9tRW52aXJvbm1lbnQobmFtZVN0cmluZ0NvbnN0YW50VmFsdWUuc3RyaW5nVmFsdWUpOwogICAgICBpZiAodGV4dCA9PSAndHJ1ZScpIHsKICAgICAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUJvb2wodHJ1ZSk7CiAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnZmFsc2UnKSB7CiAgICAgICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVCb29sKGZhbHNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0YW50VmFsdWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEJvb2xGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24obmFtZS5hcHBseShhcmd1bWVudHMpLAogICAgICAgIGRlZmF1bHRWYWx1ZSAhPSBudWxsID8gZGVmYXVsdFZhbHVlLmFwcGx5KGFyZ3VtZW50cykgOiBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5ib29sVHlwZTsKfQoKLy8vIEEgYGNvbnN0IGludC5mcm9tRW52aXJvbm1lbnRgIGNvbnN0YW50LgpjbGFzcyBJbnRGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24KICAgIGV4dGVuZHMgRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIHsKICBJbnRGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBuYW1lLCBDb25zdGFudEV4cHJlc3Npb24gZGVmYXVsdFZhbHVlKQogICAgICA6IHN1cGVyKG5hbWUsIGRlZmF1bHRWYWx1ZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgewogICAgcmV0dXJuIENvbnN0YW50RXhwcmVzc2lvbktpbmQuSU5UX0ZST01fRU5WSVJPTk1FTlQ7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW50RnJvbUVudmlyb25tZW50KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnaW50LmZyb21FbnZpcm9ubWVudChuYW1lPScpOwogICAgbmFtZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyxkZWZhdWx0VmFsdWU9Jyk7CiAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgZGVmYXVsdFZhbHVlLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICB9IGVsc2UgewogICAgICBzYi53cml0ZSgnbnVsbCcpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudFZhbHVlIG5hbWVDb25zdGFudFZhbHVlID0gbmFtZS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBDb25zdGFudFZhbHVlIGRlZmF1bHRDb25zdGFudFZhbHVlOwogICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGRlZmF1bHRDb25zdGFudFZhbHVlID0gZGVmYXVsdFZhbHVlLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGRlZmF1bHRDb25zdGFudFZhbHVlID0gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZU51bGwoKTsKICAgIH0KICAgIGlmICghbmFtZUNvbnN0YW50VmFsdWUuaXNDb25zdGFudCB8fCAhZGVmYXVsdENvbnN0YW50VmFsdWUuaXNDb25zdGFudCkgewogICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgIH0KICAgIGJvb2wgaXNWYWxpZCA9CiAgICAgICAgX2NoZWNrTmFtZUZyb21FbnZpcm9ubWVudChlbnZpcm9ubWVudCwgbmFtZSwgbmFtZUNvbnN0YW50VmFsdWUpOwogICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGlmICghZGVmYXVsdENvbnN0YW50VmFsdWUuaXNJbnQgJiYgIWRlZmF1bHRDb25zdGFudFZhbHVlLmlzTnVsbCkgewogICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKGRlZmF1bHRWYWx1ZSwKICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9JTlRfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEUsIHsKICAgICAgICAgICdjb25zdGFudCc6IGRlZmF1bHRWYWx1ZSwKICAgICAgICAgICd0eXBlJzogZGVmYXVsdENvbnN0YW50VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgICB9KTsKICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc1ZhbGlkKSB7CiAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgbmFtZVN0cmluZ0NvbnN0YW50VmFsdWUgPSBuYW1lQ29uc3RhbnRWYWx1ZTsKICAgICAgU3RyaW5nIHRleHQgPQogICAgICAgICAgZW52aXJvbm1lbnQucmVhZEZyb21FbnZpcm9ubWVudChuYW1lU3RyaW5nQ29uc3RhbnRWYWx1ZS5zdHJpbmdWYWx1ZSk7CiAgICAgIEJpZ0ludCB2YWx1ZTsKICAgICAgaWYgKHRleHQgIT0gbnVsbCkgewogICAgICAgIHZhbHVlID0gQmlnSW50LnRyeVBhcnNlKHRleHQpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25zdGFudFZhbHVlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KHZhbHVlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgSW50RnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKG5hbWUuYXBwbHkoYXJndW1lbnRzKSwKICAgICAgICBkZWZhdWx0VmFsdWUgIT0gbnVsbCA/IGRlZmF1bHRWYWx1ZS5hcHBseShhcmd1bWVudHMpIDogbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuaW50VHlwZTsKfQoKLy8vIEEgYGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnRgIGNvbnN0YW50LgpjbGFzcyBTdHJpbmdGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24KICAgIGV4dGVuZHMgRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIHsKICBTdHJpbmdGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBuYW1lLCBDb25zdGFudEV4cHJlc3Npb24gZGVmYXVsdFZhbHVlKQogICAgICA6IHN1cGVyKG5hbWUsIGRlZmF1bHRWYWx1ZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgewogICAgcmV0dXJuIENvbnN0YW50RXhwcmVzc2lvbktpbmQuU1RSSU5HX0ZST01fRU5WSVJPTk1FTlQ7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3RyaW5nRnJvbUVudmlyb25tZW50KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnU3RyaW5nLmZyb21FbnZpcm9ubWVudChuYW1lPScpOwogICAgbmFtZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyxkZWZhdWx0VmFsdWU9Jyk7CiAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgZGVmYXVsdFZhbHVlLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICB9IGVsc2UgewogICAgICBzYi53cml0ZSgnbnVsbCcpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudFZhbHVlIG5hbWVDb25zdGFudFZhbHVlID0gbmFtZS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBDb25zdGFudFZhbHVlIGRlZmF1bHRDb25zdGFudFZhbHVlOwogICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGRlZmF1bHRDb25zdGFudFZhbHVlID0gZGVmYXVsdFZhbHVlLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGRlZmF1bHRDb25zdGFudFZhbHVlID0gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZU51bGwoKTsKICAgIH0KICAgIGlmICghbmFtZUNvbnN0YW50VmFsdWUuaXNDb25zdGFudCB8fCAhZGVmYXVsdENvbnN0YW50VmFsdWUuaXNDb25zdGFudCkgewogICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgIH0KICAgIGJvb2wgaXNWYWxpZCA9CiAgICAgICAgX2NoZWNrTmFtZUZyb21FbnZpcm9ubWVudChlbnZpcm9ubWVudCwgbmFtZSwgbmFtZUNvbnN0YW50VmFsdWUpOwogICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGlmICghZGVmYXVsdENvbnN0YW50VmFsdWUuaXNTdHJpbmcgJiYgIWRlZmF1bHRDb25zdGFudFZhbHVlLmlzTnVsbCkgewogICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKGRlZmF1bHRWYWx1ZSwKICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9TVFJJTkdfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEUsIHsKICAgICAgICAgICdjb25zdGFudCc6IGRlZmF1bHRWYWx1ZSwKICAgICAgICAgICd0eXBlJzogZGVmYXVsdENvbnN0YW50VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgICB9KTsKICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc1ZhbGlkKSB7CiAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgbmFtZVN0cmluZ0NvbnN0YW50VmFsdWUgPSBuYW1lQ29uc3RhbnRWYWx1ZTsKICAgICAgU3RyaW5nIHRleHQgPQogICAgICAgICAgZW52aXJvbm1lbnQucmVhZEZyb21FbnZpcm9ubWVudChuYW1lU3RyaW5nQ29uc3RhbnRWYWx1ZS5zdHJpbmdWYWx1ZSk7CiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0YW50VmFsdWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTdHJpbmcodGV4dCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFN0cmluZ0Zyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbihuYW1lLmFwcGx5KGFyZ3VtZW50cyksCiAgICAgICAgZGVmYXVsdFZhbHVlICE9IG51bGwgPyBkZWZhdWx0VmFsdWUuYXBwbHkoYXJndW1lbnRzKSA6IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLnN0cmluZ1R5cGU7Cn0KCmNsYXNzIEFzc2VydENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGNvbmRpdGlvbjsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gbWVzc2FnZTsKCiAgQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uKHRoaXMuY29uZGl0aW9uLCB0aGlzLm1lc3NhZ2UpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuQVNTRVJUOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gY29uZGl0aW9uID09IG90aGVyLmNvbmRpdGlvbiAmJiBtZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIHJldHVybiAxMyAqIGNvbmRpdGlvbi5oYXNoQ29kZSArIDE3ICogbWVzc2FnZS5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ2Fzc2VydCgnKTsKICAgIGNvbmRpdGlvbi5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyxtZXNzYWdlPScpOwogICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewogICAgICBtZXNzYWdlLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICB9IGVsc2UgewogICAgICBzYi53cml0ZSgnbnVsbCcpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudFZhbHVlIGNvbmRpdGlvblZhbHVlID0gY29uZGl0aW9uLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIGJvb2wgdmFsaWRBc3NlcnQ7CiAgICBpZiAoZW52aXJvbm1lbnQuZW5hYmxlQXNzZXJ0aW9ucykgewogICAgICAvLyBCb29sZWFuIGNvbnZlcnNpb246CiAgICAgIHZhbGlkQXNzZXJ0ID0KICAgICAgICAgIGNvbmRpdGlvblZhbHVlIGlzIEJvb2xDb25zdGFudFZhbHVlICYmIGNvbmRpdGlvblZhbHVlLmJvb2xWYWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHZhbGlkQXNzZXJ0ID0gdHJ1ZTsKICAgIH0KICAgIGlmICghdmFsaWRBc3NlcnQpIHsKICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewogICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBtZXNzYWdlLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgICAgICBpZiAodmFsdWUgaXMgU3RyaW5nQ29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgU3RyaW5nIHRleHQgPSAnJHt2YWx1ZS5zdHJpbmdWYWx1ZX0nOwogICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IodGhpcywKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0FTU0VSVF9WQUxVRV9NRVNTQUdFLCB7J21lc3NhZ2UnOiB0ZXh0fSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKHRoaXMsIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFLAogICAgICAgICAgICAgIHsnYXNzZXJ0aW9uJzogY29uZGl0aW9uLnRvRGFydFRleHQoKX0pOwogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwb3J0IGludmFsaWQgY29uc3RhbnQgbWVzc2FnZT8KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IodGhpcywgTWVzc2FnZUtpbmQuSU5WQUxJRF9BU1NFUlRfVkFMVUUsCiAgICAgICAgICAgIHsnYXNzZXJ0aW9uJzogY29uZGl0aW9uLnRvRGFydFRleHQoKX0pOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgfQoKICAgIC8vIFJldHVybiBhIHZhbGlkIGNvbnN0YW50IHZhbHVlIHRvIHNpZ25hbCB0aGF0IGFzc2VydGlvbiBkaWRuJ3QgZmFpbC4KICAgIHJldHVybiBuZXcgTnVsbENvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRBc3NlcnQodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIGNvbmRpdGlvbi5hcHBseShhcmd1bWVudHMpLCBtZXNzYWdlPy5hcHBseShhcmd1bWVudHMpKTsKICB9Cn0KCmNsYXNzIEluc3RhbnRpYXRpb25Db25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIEluc3RhbnRpYXRpb25Db25zdGFudEV4cHJlc3Npb24odGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLmV4cHJlc3Npb24pOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuSU5TVEFOVElBVElPTjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnSW5zdGFudGlhdGlvbih0eXBlQXJndW1lbnRzPSR0eXBlQXJndW1lbnRzLGV4cHJlc3Npb249Jyk7CiAgICBleHByZXNzaW9uLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHNJbkNvbnRleHQgPQogICAgICAgIHR5cGVBcmd1bWVudHMubWFwKGVudmlyb25tZW50LmdldFR5cGVJbkNvbnRleHQpLnRvTGlzdCgpOwogICAgcmV0dXJuIG5ldyBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSgKICAgICAgICB0eXBlQXJndW1lbnRzSW5Db250ZXh0LCBleHByZXNzaW9uLmV2YWx1YXRlKGVudmlyb25tZW50KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIHJldHVybiBIYXNoaW5nLm9iamVjdEhhc2goZXhwcmVzc2lvbiwgSGFzaGluZy5saXN0SGFzaCh0eXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbkNvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICB0eXBlQXJndW1lbnRzLCBleHByZXNzaW9uLmFwcGx5KGFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEluc3RhbnRpYXRpb25Db25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBlcXVhbEVsZW1lbnRzKHR5cGVBcmd1bWVudHMsIG90aGVyLnR5cGVBcmd1bWVudHMpICYmCiAgICAgICAgZXhwcmVzc2lvbiA9PSBvdGhlci5leHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEluc3RhbnRpYXRpb24odGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4gZXhwcmVzc2lvbi5pc1BvdGVudGlhbDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3I8UiwgQT4gewogIGNvbnN0IENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IoKTsKCiAgUiB2aXNpdChDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQsIEEgY29udGV4dCkgewogICAgcmV0dXJuIGNvbnN0YW50LmFjY2VwdCh0aGlzLCBjb250ZXh0KTsKICB9CgogIFIgdmlzaXRBcyhBc0NvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdEJvb2woQm9vbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdEludChJbnRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXREb3VibGUoRG91YmxlQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0U3RyaW5nKFN0cmluZ0NvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdE51bGwoTnVsbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdExpc3QoTGlzdENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdFNldChTZXRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRNYXAoTWFwQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0Q29uc3RydWN0ZWQoQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRDb25jYXRlbmF0ZShDb25jYXRlbmF0ZUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdFN5bWJvbChTeW1ib2xDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRUeXBlKFR5cGVDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRMb2NhbFZhcmlhYmxlKExvY2FsVmFyaWFibGVDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRGaWVsZChGaWVsZENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0QmluYXJ5KEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdElkZW50aWNhbChJZGVudGljYWxDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRVbmFyeShVbmFyeUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdFN0cmluZ0xlbmd0aChTdHJpbmdMZW5ndGhDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRDb25kaXRpb25hbChDb25kaXRpb25hbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdEJvb2xGcm9tRW52aXJvbm1lbnQoCiAgICAgIEJvb2xGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRJbnRGcm9tRW52aXJvbm1lbnQoCiAgICAgIEludEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdFN0cmluZ0Zyb21FbnZpcm9ubWVudCgKICAgICAgU3RyaW5nRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0QXNzZXJ0KEFzc2VydENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbkNvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CgogIFIgdmlzaXRQb3NpdGlvbmFsKFBvc2l0aW9uYWxBcmd1bWVudFJlZmVyZW5jZSBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdE5hbWVkKE5hbWVkQXJndW1lbnRSZWZlcmVuY2UgZXhwLCBBIGNvbnRleHQpOwp9CgpjbGFzcyBDb25zdEV4cFByaW50ZXIgZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHsKICBmaW5hbCBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogIHZvaWQgd3JpdGUoQ29uc3RhbnRFeHByZXNzaW9uIHBhcmVudCwgQ29uc3RhbnRFeHByZXNzaW9uIGNoaWxkLAogICAgICB7Ym9vbCBsZWZ0QXNzb2NpYXRpdmU6IHRydWV9KSB7CiAgICBpZiAoY2hpbGQucHJlY2VkZW5jZSA8IHBhcmVudC5wcmVjZWRlbmNlIHx8CiAgICAgICAgIWxlZnRBc3NvY2lhdGl2ZSAmJiBjaGlsZC5wcmVjZWRlbmNlID09IHBhcmVudC5wcmVjZWRlbmNlKSB7CiAgICAgIHNiLndyaXRlKCcoJyk7CiAgICAgIGNoaWxkLmFjY2VwdCh0aGlzKTsKICAgICAgc2Iud3JpdGUoJyknKTsKICAgIH0gZWxzZSB7CiAgICAgIGNoaWxkLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVUeXBlQXJndW1lbnRzKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUudHJlYXRBc1JhdykgcmV0dXJuOwogICAgc2Iud3JpdGUoJzwnKTsKICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwogICAgZm9yIChEYXJ0VHlwZSB2YWx1ZSBpbiB0eXBlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCAnKTsKICAgICAgfQogICAgICBzYi53cml0ZSh2YWx1ZSk7CiAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgfQogICAgc2Iud3JpdGUoJz4nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXQoQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50LCBbX10pIHsKICAgIHJldHVybiBjb25zdGFudC5hY2NlcHQodGhpcywgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXMoQXNDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHZpc2l0KGV4cC5leHByZXNzaW9uKTsKICAgIHNiLndyaXRlKCcgYXMgJyk7CiAgICBzYi53cml0ZShleHAudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbChCb29sQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZShleHAuYm9vbFZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGUoRG91YmxlQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZShleHAuZG91YmxlVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludChJbnRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKGV4cC5pbnRWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TnVsbChOdWxsQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZShudWxsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmcoU3RyaW5nQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBFbnN1cmUgY29ycmVjdCBlc2NhcGluZy4KICAgIHNiLndyaXRlKCciJHtleHAuc3RyaW5nVmFsdWV9IicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3QoTGlzdENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoJ2NvbnN0ICcpOwogICAgd3JpdGVUeXBlQXJndW1lbnRzKGV4cC50eXBlKTsKICAgIHNiLndyaXRlKCdbJyk7CiAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlIGluIGV4cC52YWx1ZXMpIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCAnKTsKICAgICAgfQogICAgICB2aXNpdCh2YWx1ZSk7CiAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgfQogICAgc2Iud3JpdGUoJ10nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXQoU2V0Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZSgnY29uc3QgJyk7CiAgICB3cml0ZVR5cGVBcmd1bWVudHMoZXhwLnR5cGUpOwogICAgc2Iud3JpdGUoJ3snKTsKICAgIHNiLndyaXRlQWxsKGV4cC52YWx1ZXMsICcsICcpOwogICAgc2Iud3JpdGUoJ30nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXAoTWFwQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZSgnY29uc3QgJyk7CiAgICB3cml0ZVR5cGVBcmd1bWVudHMoZXhwLnR5cGUpOwogICAgc2Iud3JpdGUoJ3snKTsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleHAua2V5cy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgaWYgKGluZGV4ID4gMCkgewogICAgICAgIHNiLndyaXRlKCcsICcpOwogICAgICB9CiAgICAgIHZpc2l0KGV4cC5rZXlzW2luZGV4XSk7CiAgICAgIHNiLndyaXRlKCc6ICcpOwogICAgICB2aXNpdChleHAudmFsdWVzW2luZGV4XSk7CiAgICB9CiAgICBzYi53cml0ZSgnfScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdGVkKENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZSgnY29uc3QgJyk7CiAgICBzYi53cml0ZShleHAudGFyZ2V0LmVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgd3JpdGVUeXBlQXJndW1lbnRzKGV4cC50eXBlKTsKICAgIGlmIChleHAudGFyZ2V0Lm5hbWUgIT0gJycpIHsKICAgICAgc2Iud3JpdGUoJy4nKTsKICAgICAgc2Iud3JpdGUoZXhwLnRhcmdldC5uYW1lKTsKICAgIH0KICAgIHNiLndyaXRlKCcoJyk7CiAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKCiAgICBpbnQgbmFtZWRPZmZzZXQgPSBleHAuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRDb3VudDsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lZE9mZnNldDsgaW5kZXgrKykgewogICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgIHNiLndyaXRlKCcsICcpOwogICAgICB9CiAgICAgIHZpc2l0KGV4cC5hcmd1bWVudHNbaW5kZXhdKTsKICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICB9CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhwLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudENvdW50OyBpbmRleCsrKSB7CiAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgc2Iud3JpdGUoJywgJyk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoZXhwLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHNbaW5kZXhdKTsKICAgICAgc2Iud3JpdGUoJzogJyk7CiAgICAgIHZpc2l0KGV4cC5hcmd1bWVudHNbbmFtZWRPZmZzZXQgKyBpbmRleF0pOwogICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uY2F0ZW5hdGUoQ29uY2F0ZW5hdGVDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKCciJyk7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cC5leHByZXNzaW9ucykgewogICAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IENvbnN0YW50RXhwcmVzc2lvbktpbmQuU1RSSU5HKSB7CiAgICAgICAgU3RyaW5nQ29uc3RhbnRFeHByZXNzaW9uIHN0cmluZyA9IGV4cHJlc3Npb247CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRW5zdXJlIGNvcnJlY3QgZXNjYXBpbmcuCiAgICAgICAgc2Iud3JpdGUoJyR7c3RyaW5nLnN0cmluZ1ZhbHVlfScpOwogICAgICB9IGVsc2UgewogICAgICAgIHNiLndyaXRlKHIiJHsiKTsKICAgICAgICB2aXNpdChleHByZXNzaW9uKTsKICAgICAgICBzYi53cml0ZSgifSIpOwogICAgICB9CiAgICB9CiAgICBzYi53cml0ZSgnIicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN5bWJvbChTeW1ib2xDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKCcjJyk7CiAgICBzYi53cml0ZShleHAubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZShUeXBlQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZShleHAubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RmllbGQoRmllbGRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIGlmIChleHAuZWxlbWVudC5pc1N0YXRpYykgewogICAgICBzYi53cml0ZShleHAuZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lKTsKICAgICAgc2Iud3JpdGUoJy4nKTsKICAgIH0KICAgIHNiLndyaXRlKGV4cC5lbGVtZW50Lm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExvY2FsVmFyaWFibGUoTG9jYWxWYXJpYWJsZUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoZXhwLmVsZW1lbnQubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25Db25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIGlmIChleHAuZWxlbWVudC5pc1N0YXRpYykgewogICAgICBzYi53cml0ZShleHAuZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lKTsKICAgICAgc2Iud3JpdGUoJy4nKTsKICAgIH0KICAgIHNiLndyaXRlKGV4cC5lbGVtZW50Lm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJpbmFyeShCaW5hcnlDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHdyaXRlKGV4cCwgZXhwLmxlZnQpOwogICAgc2Iud3JpdGUoJyAnKTsKICAgIHNiLndyaXRlKGV4cC5vcGVyYXRvci5uYW1lKTsKICAgIHNiLndyaXRlKCcgJyk7CiAgICB3cml0ZShleHAsIGV4cC5yaWdodCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SWRlbnRpY2FsKElkZW50aWNhbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoJ2lkZW50aWNhbCgnKTsKICAgIHZpc2l0KGV4cC5sZWZ0KTsKICAgIHNiLndyaXRlKCcsICcpOwogICAgdmlzaXQoZXhwLnJpZ2h0KTsKICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VW5hcnkoVW5hcnlDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKGV4cC5vcGVyYXRvcik7CiAgICB3cml0ZShleHAsIGV4cC5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdMZW5ndGgoU3RyaW5nTGVuZ3RoQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICB3cml0ZShleHAsIGV4cC5leHByZXNzaW9uLCBsZWZ0QXNzb2NpYXRpdmU6IGZhbHNlKTsKICAgIHNiLndyaXRlKCcubGVuZ3RoJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uZGl0aW9uYWwoQ29uZGl0aW9uYWxDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHdyaXRlKGV4cCwgZXhwLmNvbmRpdGlvbiwgbGVmdEFzc29jaWF0aXZlOiBmYWxzZSk7CiAgICBzYi53cml0ZSgnID8gJyk7CiAgICB3cml0ZShleHAsIGV4cC50cnVlRXhwKTsKICAgIHNiLndyaXRlKCcgOiAnKTsKICAgIHdyaXRlKGV4cCwgZXhwLmZhbHNlRXhwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQb3NpdGlvbmFsKFBvc2l0aW9uYWxBcmd1bWVudFJlZmVyZW5jZSBleHAsIFtfXSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdGhpcyBzaG91bGQgdGhyb3cuCiAgICBzYi53cml0ZSgnYXJnc1ske2V4cC5pbmRleH1dJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFtZWQoTmFtZWRBcmd1bWVudFJlZmVyZW5jZSBleHAsIFtfXSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdGhpcyBzaG91bGQgdGhyb3cuCiAgICBzYi53cml0ZSgnYXJnc1ske2V4cC5uYW1lfV0nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sRnJvbUVudmlyb25tZW50KEJvb2xGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gZXhwLAogICAgICBbX10pIHsKICAgIHNiLndyaXRlKCdjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgnKTsKICAgIHZpc2l0KGV4cC5uYW1lKTsKICAgIGlmIChleHAuZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJywgZGVmYXVsdFZhbHVlOiAnKTsKICAgICAgdmlzaXQoZXhwLmRlZmF1bHRWYWx1ZSk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludEZyb21FbnZpcm9ubWVudChJbnRGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKCdjb25zdCBpbnQuZnJvbUVudmlyb25tZW50KCcpOwogICAgdmlzaXQoZXhwLm5hbWUpOwogICAgaWYgKGV4cC5kZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnLCBkZWZhdWx0VmFsdWU6ICcpOwogICAgICB2aXNpdChleHAuZGVmYXVsdFZhbHVlKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nRnJvbUVudmlyb25tZW50KFN0cmluZ0Zyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiBleHAsCiAgICAgIFtfXSkgewogICAgc2Iud3JpdGUoJ2NvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnQoJyk7CiAgICB2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X291dHB1dDsKCmltcG9ydCAnLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnOwppbXBvcnQgJ3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKCi8vLyBMaXN0ZW5lciBpbnRlcmZhY2UgZm9yIFtDb2RlT3V0cHV0XSBhY3Rpdml0eS4KYWJzdHJhY3QgY2xhc3MgQ29kZU91dHB1dExpc3RlbmVyIHsKICAvLy8gQ2FsbGVkIHdoZW4gW3RleHRdIGlzIGFkZGVkIHRvIHRoZSBvdXRwdXQuCiAgdm9pZCBvblRleHQoU3RyaW5nIHRleHQpOwoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIG91dHB1dCBpcyBjbG9zZWQgd2l0aCBhIGZpbmFsIGxlbmd0aCBvZiBbbGVuZ3RoXS4KICB2b2lkIG9uRG9uZShpbnQgbGVuZ3RoKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgYSBtYXBwaW5nIG9mIHRhcmdldCBvZmZzZXRzIHRvIHNvdXJjZSBsb2NhdGlvbnMgYW5kIGZvcgovLy8gdHJhY2tpbmcgaW5saW5pbmcgZnJhbWUgZGF0YS4KLy8vCi8vLyBTb3VyY2UtbG9jYXRpb24gbWFwcGluZyBpcyB1c2VkIHRvIGJ1aWxkIHN0YW5kYXJkIHNvdXJjZS1tYXBzIGZpbGVzLgovLy8gSW5saW5pbmcgZnJhbWVzIGlzIHVzZWQgdG8gYXR0YWNoIGFuIGV4dGVuc2lvbiB0byBzb3VyY2UtbWFwIGZpbGVzIHRvCi8vLyBpbXByb3ZlIGRlb2JmdXNjYXRpb24gb2YgcHJvZHVjdGlvbiBzdGFjayB0cmFjZXMuCmFic3RyYWN0IGNsYXNzIFNvdXJjZUxvY2F0aW9ucyB7CiAgLy8vIFRoZSBuYW1lIGlkZW50aWZ5aW5nIHRoaXMgc291cmNlIG1hcHBpbmcuCiAgU3RyaW5nIGdldCBuYW1lOwoKICAvLy8gQWRkcyBhIFtzb3VyY2VMb2NhdGlvbl0gYXQgdGhlIHNwZWNpZmllZCBbdGFyZ2V0T2Zmc2V0XS4KICB2b2lkIGFkZFNvdXJjZUxvY2F0aW9uKGludCB0YXJnZXRPZmZzZXQsIFNvdXJjZUxvY2F0aW9uIHNvdXJjZVBvc2l0aW9uKTsKCiAgLy8vIFJlY29yZCBhbiBpbmxpbmluZyBjYWxsIGF0IHRoZSBbdGFyZ2V0T2Zmc2V0XS4KICAvLy8KICAvLy8gVGhlIGlubGluaW5nIGNhbGwtc2l0ZSB3YXMgbWFkZSBmcm9tIFtwdXNoTG9jYXRpb25dIGFuZCBjYWxscwogIC8vLyBbaW5saW5lZE1ldGhvZE5hbWVdLgogIHZvaWQgYWRkUHVzaCgKICAgICAgaW50IHRhcmdldE9mZnNldCwgU291cmNlTG9jYXRpb24gcHVzaFBvc2l0aW9uLCBTdHJpbmcgaW5saW5lZE1ldGhvZE5hbWUpOwoKICAvLy8gUmVjb3JkIGEgcmV0dXJuIG9mIGFuIGlubGluaW5nIGNhbGwgYXQgdGhlIFt0YXJnZXRPZmZzZXRdLgogIC8vLwogIC8vLyBbaXNFbXB0eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyByZXR1cm4gYWxzbyBtYWtlcyB0aGUgaW5saW5pbmcgc3RhY2sgZW1wdHkuCiAgdm9pZCBhZGRQb3AoaW50IHRhcmdldE9mZnNldCwgYm9vbCBpc0VtcHR5KTsKCiAgLy8vIEFwcGxpZXMgW2ZdIHRvIGV2ZXJ5IHRhcmdldCBvZmZzZXQgYW5kIGFzc29jaWF0ZWQgc291cmNlIGxvY2F0aW9uLgogIHZvaWQgZm9yRWFjaFNvdXJjZUxvY2F0aW9uKAogICAgICB2b2lkIGYoaW50IHRhcmdldE9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24pKTsKCiAgLy8vIFJlY29yZGVkIGlubGluaW5nIGRhdGEgcGVyIHRhcmdldC1vZmZzZXQuCiAgTWFwPGludCwgTGlzdDxGcmFtZUVudHJ5Pj4gZ2V0IGZyYW1lTWFya2VyczsKfQoKY2xhc3MgX1NvdXJjZUxvY2F0aW9uc0ltcGwgaW1wbGVtZW50cyBTb3VyY2VMb2NhdGlvbnMgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIEFic3RyYWN0Q29kZU91dHB1dCBjb2RlT3V0cHV0OwogIE1hcDxpbnQsIExpc3Q8U291cmNlTG9jYXRpb24+PiBtYXJrZXJzID0gPGludCwgTGlzdDxTb3VyY2VMb2NhdGlvbj4+e307CiAgQG92ZXJyaWRlCiAgTWFwPGludCwgTGlzdDxGcmFtZUVudHJ5Pj4gZnJhbWVNYXJrZXJzID0gPGludCwgTGlzdDxGcmFtZUVudHJ5Pj57fTsKCiAgX1NvdXJjZUxvY2F0aW9uc0ltcGwodGhpcy5uYW1lLCB0aGlzLmNvZGVPdXRwdXQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFNvdXJjZUxvY2F0aW9uKGludCB0YXJnZXRPZmZzZXQsIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uKSB7CiAgICBhc3NlcnQodGFyZ2V0T2Zmc2V0IDw9IGNvZGVPdXRwdXQubGVuZ3RoKTsKICAgIExpc3Q8U291cmNlTG9jYXRpb24+IHNvdXJjZUxvY2F0aW9ucyA9CiAgICAgICAgbWFya2Vycy5wdXRJZkFic2VudCh0YXJnZXRPZmZzZXQsICgpID0+IDxTb3VyY2VMb2NhdGlvbj5bXSk7CiAgICBzb3VyY2VMb2NhdGlvbnMuYWRkKHNvdXJjZUxvY2F0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkUHVzaChpbnQgdGFyZ2V0T2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbiwKICAgICAgU3RyaW5nIGlubGluZWRNZXRob2ROYW1lKSB7CiAgICBhc3NlcnQodGFyZ2V0T2Zmc2V0IDw9IGNvZGVPdXRwdXQubGVuZ3RoKTsKICAgIExpc3Q8RnJhbWVFbnRyeT4gZnJhbWVzID0gZnJhbWVNYXJrZXJzW3RhcmdldE9mZnNldF0gPz89IFtdOwogICAgZnJhbWVzLmFkZChuZXcgRnJhbWVFbnRyeS5wdXNoKHNvdXJjZUxvY2F0aW9uLCBpbmxpbmVkTWV0aG9kTmFtZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRQb3AoaW50IHRhcmdldE9mZnNldCwgYm9vbCBpc0VtcHR5KSB7CiAgICBhc3NlcnQodGFyZ2V0T2Zmc2V0IDw9IGNvZGVPdXRwdXQubGVuZ3RoKTsKICAgIExpc3Q8RnJhbWVFbnRyeT4gZnJhbWVzID0gZnJhbWVNYXJrZXJzW3RhcmdldE9mZnNldF0gPz89IFtdOwogICAgZnJhbWVzLmFkZChuZXcgRnJhbWVFbnRyeS5wb3AoaXNFbXB0eSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoU291cmNlTG9jYXRpb24oCiAgICAgIHZvaWQgZihpbnQgdGFyZ2V0T2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikpIHsKICAgIG1hcmtlcnMuZm9yRWFjaCgoaW50IHRhcmdldE9mZnNldCwgTGlzdDxTb3VyY2VMb2NhdGlvbj4gc291cmNlTG9jYXRpb25zKSB7CiAgICAgIGZvciAoU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24gaW4gc291cmNlTG9jYXRpb25zKSB7CiAgICAgICAgZih0YXJnZXRPZmZzZXQsIHNvdXJjZUxvY2F0aW9uKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIF9tZXJnZShfU291cmNlTG9jYXRpb25zSW1wbCBvdGhlcikgewogICAgYXNzZXJ0KG5hbWUgPT0gb3RoZXIubmFtZSk7CiAgICBpbnQgbGVuZ3RoID0gY29kZU91dHB1dC5sZW5ndGg7CiAgICBpZiAob3RoZXIubWFya2Vycy5sZW5ndGggPiAwKSB7CiAgICAgIG90aGVyLm1hcmtlcnMKICAgICAgICAgIC5mb3JFYWNoKChpbnQgdGFyZ2V0T2Zmc2V0LCBMaXN0PFNvdXJjZUxvY2F0aW9uPiBzb3VyY2VMb2NhdGlvbnMpIHsKICAgICAgICAobWFya2Vyc1tsZW5ndGggKyB0YXJnZXRPZmZzZXRdID8/PSA8U291cmNlTG9jYXRpb24+W10pCiAgICAgICAgICAgIC5hZGRBbGwoc291cmNlTG9jYXRpb25zKTsKICAgICAgfSk7CiAgICB9CgogICAgaWYgKG90aGVyLmZyYW1lTWFya2Vycy5sZW5ndGggPiAwKSB7CiAgICAgIG90aGVyLmZyYW1lTWFya2Vycy5mb3JFYWNoKChpbnQgdGFyZ2V0T2Zmc2V0LCBMaXN0PEZyYW1lRW50cnk+IGZyYW1lcykgewogICAgICAgIChmcmFtZU1hcmtlcnNbbGVuZ3RoICsgdGFyZ2V0T2Zmc2V0XSA/Pz0gPEZyYW1lRW50cnk+W10pLmFkZEFsbChmcmFtZXMpOwogICAgICB9KTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIFNvdXJjZUxvY2F0aW9uc1Byb3ZpZGVyIHsKICAvLy8gQ3JlYXRlcyBhIFtTb3VyY2VMb2NhdGlvbnNdIG1hcHBpbmcgaWRlbnRpZmllZCBieSBbbmFtZV0gYW5kIGFzc29jaWF0ZXMKICAvLy8gaXQgd2l0aCB0aGlzIGNvZGUgb3V0cHV0LgogIFNvdXJjZUxvY2F0aW9ucyBjcmVhdGVTb3VyY2VMb2NhdGlvbnMoU3RyaW5nIG5hbWUpOwoKICAvLy8gUmV0dXJucyB0aGUgc291cmNlIGxvY2F0aW9uIG1hcHBpbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUgb3V0cHV0LgogIEl0ZXJhYmxlPFNvdXJjZUxvY2F0aW9ucz4gZ2V0IHNvdXJjZUxvY2F0aW9uczsKfQoKYWJzdHJhY3QgY2xhc3MgQ29kZU91dHB1dCBpbXBsZW1lbnRzIFNvdXJjZUxvY2F0aW9uc1Byb3ZpZGVyIHsKICAvLy8gV3JpdGUgW3RleHRdIHRvIHRoaXMgb3V0cHV0LgogIC8vLwogIC8vLyBJZiB0aGUgb3V0cHV0IGlzIGNsb3NlZCwgYSBbU3RhdGVFcnJvcl0gaXMgdGhyb3duLgogIHZvaWQgYWRkKFN0cmluZyB0ZXh0KTsKCiAgLy8vIEFkZHMgdGhlIGNvbnRlbnQgb2YgW2J1ZmZlcl0gdG8gdGhlIG91dHB1dCBhbmQgYWRkcyBpdHMgbWFya2VycyB0bwogIC8vLyBbbWFya2Vyc10uCiAgLy8vCiAgLy8vIElmIHRoZSBvdXRwdXQgaXMgY2xvc2VkLCBhIFtTdGF0ZUVycm9yXSBpcyB0aHJvd24uCiAgdm9pZCBhZGRCdWZmZXIoQ29kZUJ1ZmZlciBidWZmZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY3VycmVudGx5IHdyaXR0ZW4gdG8gdGhpcyBvdXRwdXQuCiAgaW50IGdldCBsZW5ndGg7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIG91dHB1dCBoYXMgYmVlbiBjbG9zZWQuCiAgYm9vbCBnZXQgaXNDbG9zZWQ7CgogIC8vLyBDbG9zZXMgdGhlIG91dHB1dC4gRnVydGhlciB3cml0ZXMgd2lsbCBjYXVzZSBhIFtTdGF0ZUVycm9yXS4KICB2b2lkIGNsb3NlKCk7Cn0KCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q29kZU91dHB1dCBleHRlbmRzIENvZGVPdXRwdXQgewogIE1hcDxTdHJpbmcsIF9Tb3VyY2VMb2NhdGlvbnNJbXBsPiBzb3VyY2VMb2NhdGlvbnNNYXAgPQogICAgICA8U3RyaW5nLCBfU291cmNlTG9jYXRpb25zSW1wbD57fTsKICBAb3ZlcnJpZGUKICBib29sIGlzQ2xvc2VkID0gZmFsc2U7CgogIHZvaWQgX2FkZEludGVybmFsKFN0cmluZyB0ZXh0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGQoU3RyaW5nIHRleHQpIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiQ29kZSBvdXRwdXQgaXMgY2xvc2VkLiBUcnlpbmcgdG8gd3JpdGUgJyR0ZXh0Jy4iKTsKICAgIH0KICAgIF9hZGRJbnRlcm5hbCh0ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQnVmZmVyKENvZGVCdWZmZXIgb3RoZXIpIHsKICAgIG90aGVyLnNvdXJjZUxvY2F0aW9uc01hcC5mb3JFYWNoKChTdHJpbmcgbmFtZSwgX1NvdXJjZUxvY2F0aW9uc0ltcGwgb3RoZXIpIHsKICAgICAgY3JlYXRlU291cmNlTG9jYXRpb25zKG5hbWUpLl9tZXJnZShvdGhlcik7CiAgICB9KTsKICAgIGlmICghb3RoZXIuaXNDbG9zZWQpIHsKICAgICAgb3RoZXIuY2xvc2UoKTsKICAgIH0KICAgIF9hZGRJbnRlcm5hbChvdGhlci5nZXRUZXh0KCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiQ29kZSBvdXRwdXQgaXMgYWxyZWFkeSBjbG9zZWQuIik7CiAgICB9CiAgICBpc0Nsb3NlZCA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxTb3VyY2VMb2NhdGlvbnM+IGdldCBzb3VyY2VMb2NhdGlvbnMgPT4gc291cmNlTG9jYXRpb25zTWFwLnZhbHVlczsKCiAgQG92ZXJyaWRlCiAgX1NvdXJjZUxvY2F0aW9uc0ltcGwgY3JlYXRlU291cmNlTG9jYXRpb25zKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gc291cmNlTG9jYXRpb25zTWFwW25hbWVdID8/PSBuZXcgX1NvdXJjZUxvY2F0aW9uc0ltcGwobmFtZSwgdGhpcyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBCdWZmZXJlZENvZGVPdXRwdXQgewogIFN0cmluZyBnZXRUZXh0KCk7Cn0KCi8vLyBbQ29kZU91dHB1dF0gdXNpbmcgYSBbU3RyaW5nQnVmZmVyXSBhcyBiYWNrZW5kLgpjbGFzcyBDb2RlQnVmZmVyIGV4dGVuZHMgQWJzdHJhY3RDb2RlT3V0cHV0IGltcGxlbWVudHMgQnVmZmVyZWRDb2RlT3V0cHV0IHsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9hZGRJbnRlcm5hbChTdHJpbmcgdGV4dCkgewogICAgYnVmZmVyLndyaXRlKHRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gYnVmZmVyLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldFRleHQoKSB7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICB0aHJvdyAiRG9uJ3QgdXNlIENvZGVCdWZmZXIudG9TdHJpbmcoKSBzaW5jZSBpdCBkcm9wcyBzb3VyY2VtYXAgZGF0YS4iOwogIH0KfQoKLy8vIFtDb2RlT3V0cHV0XSB1c2luZyBhIFtDb21waWxhdGlvbk91dHB1dF0gYXMgYmFja2VuZC4KY2xhc3MgU3RyZWFtQ29kZU91dHB1dCBleHRlbmRzIEFic3RyYWN0Q29kZU91dHB1dCB7CiAgQG92ZXJyaWRlCiAgaW50IGxlbmd0aCA9IDA7CiAgZmluYWwgT3V0cHV0U2luayBvdXRwdXQ7CiAgZmluYWwgTGlzdDxDb2RlT3V0cHV0TGlzdGVuZXI+IF9saXN0ZW5lcnM7CgogIFN0cmVhbUNvZGVPdXRwdXQodGhpcy5vdXRwdXQsIFt0aGlzLl9saXN0ZW5lcnNdKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfYWRkSW50ZXJuYWwoU3RyaW5nIHRleHQpIHsKICAgIG91dHB1dC5hZGQodGV4dCk7CiAgICBsZW5ndGggKz0gdGV4dC5sZW5ndGg7CiAgICBpZiAoX2xpc3RlbmVycyAhPSBudWxsKSB7CiAgICAgIF9saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyLm9uVGV4dCh0ZXh0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgb3V0cHV0LmNsb3NlKCk7CiAgICBzdXBlci5jbG9zZSgpOwogICAgaWYgKF9saXN0ZW5lcnMgIT0gbnVsbCkgewogICAgICBfbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lci5vbkRvbmUobGVuZ3RoKSk7CiAgICB9CiAgfQp9CoD0AE5OPAEdASIiATIkMRwBSBsCAUoiBElKNiEwEwE/SwE1BkQbEFABQQZQLwFJHkABMC8CATgMFSdKDEcBNAEMTC8rRSkEAQxAIi9BSAQBDDAvQS0EAQweQU8/KQgIBAEsICQkFE5AJgoGASlPUQoGBAIBKU4gNgFNMQIBPyMGORkBSREGOSUBSRIBNRUBQxACATc5KAwZASIBDBoUTwYYBAEMJVExCBsVBiMEAQwRFD4GFQQBDE4BDDxOBAIBJBQCATRMLAEMIxgEAQwjAQwVHgQBDBZMBAIBOTQMEhstATQBDCMWGx4/BgQBDBEUEx5BBgQCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9jb2RlX291dHB1dC5kYXJ0NHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9zY2FubmVyL2ludGVybmVyLmRhcnSC4S8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovKioKICogVGhlIGludGVyZmFjZSBgSW50ZXJuZXJgIGRlZmluZXMgdGhlIGJlaGF2aW9yIG9mIG9iamVjdHMgdGhhdCBjYW4gaW50ZXJuCiAqIHN0cmluZ3MuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnRlcm5lciB7CiAgLyoqCiAgICogUmV0dXJuIGEgc3RyaW5nIHRoYXQgaXMgaWRlbnRpY2FsIHRvIGFsbCBvZiB0aGUgb3RoZXIgc3RyaW5ncyB0aGF0IGhhdmUKICAgKiBiZWVuIGludGVybmVkIHRoYXQgYXJlIGVxdWFsIHRvIHRoZSBnaXZlbiBbc3RyaW5nXS4KICAgKi8KICBTdHJpbmcgaW50ZXJuKFN0cmluZyBzdHJpbmcpOwp9CgovKioKICogVGhlIGNsYXNzIGBOdWxsSW50ZXJuZXJgIGltcGxlbWVudHMgYW4gaW50ZXJuZXIgdGhhdCBkb2VzIG5vdGhpbmcgKGRvZXMgbm90CiAqIGFjdHVhbGx5IGludGVybiBhbnkgc3RyaW5ncykuCiAqLwpjbGFzcyBOdWxsSW50ZXJuZXIgaW1wbGVtZW50cyBJbnRlcm5lciB7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGludGVybihTdHJpbmcgc3RyaW5nKSA9PiBzdHJpbmc7Cn0KGgBOTjwBBEwMBBoGTTkGIAIBBE8hBCkMKgIBK3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9zY2FubmVyL2ludGVybmVyLmRhcnQnc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvdXRpbC9ncmFwaC5kYXJ0ipAvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmdyYXBoOwoKYWJzdHJhY3QgY2xhc3MgR3JhcGg8VD4gewogIEl0ZXJhYmxlPFQ+IGdldCB2ZXJ0aWNlczsKCiAgSXRlcmFibGU8VD4gbmVpZ2hib3JzT2YoVCB2ZXJ0ZXgpOwp9CgovLy8gQ29tcHV0ZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIG9mIFtncmFwaF0uCi8vLwovLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBbRGlqa3N0cmEncyBwYXRoLWJhc2VkIHN0cm9uZyBjb21wb25lbnQKLy8vIGFsZ29yaXRobV0KLy8vIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXRoLWJhc2VkX3N0cm9uZ19jb21wb25lbnRfYWxnb3JpdGhtI0Rlc2NyaXB0aW9uKS4KTGlzdDxMaXN0PFQ+PiBjb21wdXRlU3Ryb25nQ29tcG9uZW50czxUPihHcmFwaDxUPiBncmFwaCkgewogIExpc3Q8TGlzdDxUPj4gcmVzdWx0ID0gPExpc3Q8VD4+W107CiAgaW50IGNvdW50ID0gMDsKICBNYXA8VCwgaW50PiBwcmVvcmRlck51bWJlcnMgPSA8VCwgaW50Pnt9OwogIExpc3Q8VD4gdW5hc3NpZ25lZCA9IDxUPltdOwogIExpc3Q8VD4gY2FuZGlkYXRlcyA9IDxUPltdOwogIFNldDxUPiBhc3NpZ25lZCA9IG5ldyBTZXQ8VD4oKTsKCiAgdm9pZCByZWN1cnNpdmVseVNlYXJjaChUIHZlcnRleCkgewogICAgLy8gU3RlcCAxOiBTZXQgdGhlIHByZW9yZGVyIG51bWJlciBvZiBbdmVydGV4XSB0byBbY291bnRdLCBhbmQgaW5jcmVtZW50CiAgICAvLyBbY291bnRdLgogICAgcHJlb3JkZXJOdW1iZXJzW3ZlcnRleF0gPSBjb3VudCsrOwoKICAgIC8vIFN0ZXAgMjogUHVzaCBbdmVydGV4XSBvbnRvIFt1bmFzc2lnbmVkXSBhbmQgYWxzbyBvbnRvIFtjYW5kaWRhdGVzXS4KICAgIHVuYXNzaWduZWQuYWRkKHZlcnRleCk7CiAgICBjYW5kaWRhdGVzLmFkZCh2ZXJ0ZXgpOwoKICAgIC8vIFN0ZXAgMzogRm9yIGVhY2ggZWRnZSBmcm9tIFt2ZXJ0ZXhdIHRvIGEgbmVpZ2hib3JpbmcgdmVydGV4IFtuZWlnaGJvcl06CiAgICBmb3IgKFQgbmVpZ2hib3IgaW4gZ3JhcGgubmVpZ2hib3JzT2YodmVydGV4KSkgewogICAgICBpbnQgbmVpZ2hib3JQcmVvcmRlck51bWJlciA9IHByZW9yZGVyTnVtYmVyc1tuZWlnaGJvcl07CiAgICAgIGlmIChuZWlnaGJvclByZW9yZGVyTnVtYmVyID09IG51bGwpIHsKICAgICAgICAvLyBJZiB0aGUgcHJlb3JkZXIgbnVtYmVyIG9mIFtuZWlnaGJvcl0gaGFzIG5vdCB5ZXQgYmVlbiBhc3NpZ25lZCwKICAgICAgICAvLyByZWN1cnNpdmVseSBzZWFyY2ggW25laWdoYm9yXTsKICAgICAgICByZWN1cnNpdmVseVNlYXJjaChuZWlnaGJvcik7CiAgICAgIH0gZWxzZSBpZiAoIWFzc2lnbmVkLmNvbnRhaW5zKG5laWdoYm9yKSkgewogICAgICAgIC8vIE90aGVyd2lzZSwgaWYgW25laWdoYm9yXSBoYXMgbm90IHlldCBiZWVuIGFzc2lnbmVkIHRvIGEgc3Ryb25nbHkKICAgICAgICAvLyBjb25uZWN0ZWQgY29tcG9uZW50OgogICAgICAgIC8vCiAgICAgICAgLy8gKiBSZXBlYXRlZGx5IHBvcCB2ZXJ0aWNlcyBmcm9tIFtjYW5kaWRhdGVzXSB1bnRpbCB0aGUgdG9wIGVsZW1lbnQgb2YKICAgICAgICAvLyAgIFtjYW5kaWRhdGVzXSBoYXMgYSBwcmVvcmRlciBudW1iZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQogICAgICAgIC8vICAgcHJlb3JkZXIgbnVtYmVyIG9mIFtuZWlnaGJvcl0uCiAgICAgICAgd2hpbGUgKHByZW9yZGVyTnVtYmVyc1tjYW5kaWRhdGVzLmxhc3RdID4gbmVpZ2hib3JQcmVvcmRlck51bWJlcikgewogICAgICAgICAgY2FuZGlkYXRlcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBTdGVwIDQ6IElmIFt2ZXJ0ZXhdIGlzIHRoZSB0b3AgZWxlbWVudCBvZiBbY2FuZGlkYXRlc106CiAgICBpZiAoY2FuZGlkYXRlcy5sYXN0ID09IHZlcnRleCkgewogICAgICAvLyBQb3AgdmVydGljZXMgZnJvbSBbdW5hc3NpZ25lZF0gdW50aWwgW3ZlcnRleF0gaGFzIGJlZW4gcG9wcGVkLCBhbmQKICAgICAgLy8gYXNzaWduIHRoZSBwb3BwZWQgdmVydGljZXMgdG8gYSBuZXcgY29tcG9uZW50LgogICAgICBMaXN0PFQ+IGNvbXBvbmVudCA9IDxUPltdOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIFQgdG9wID0gdW5hc3NpZ25lZC5yZW1vdmVMYXN0KCk7CiAgICAgICAgY29tcG9uZW50LmFkZCh0b3ApOwogICAgICAgIGFzc2lnbmVkLmFkZCh0b3ApOwogICAgICAgIGlmICh0b3AgPT0gdmVydGV4KSBicmVhazsKICAgICAgfQogICAgICByZXN1bHQuYWRkKGNvbXBvbmVudCk7CgogICAgICAvLyBQb3AgW3ZlcnRleF0gZnJvbSBbY2FuZGlkYXRlc10uCiAgICAgIGNhbmRpZGF0ZXMucmVtb3ZlTGFzdCgpOwogICAgfQogIH0KCiAgZm9yIChUIHZlcnRleCBpbiBncmFwaC52ZXJ0aWNlcykgewogICAgaWYgKHByZW9yZGVyTnVtYmVyc1t2ZXJ0ZXhdID09IG51bGwpIHsKICAgICAgcmVjdXJzaXZlbHlTZWFyY2godmVydGV4KTsKICAgIH0KICB9CgogIHJldHVybiByZXN1bHQ7Cn0KUQBNTj8BFQEaHAElAgE7BEwPVzsmESweHiIBJU0QJwFLHBwBTzQ+LEsqJTFMIAtQSixMIwoIBj8lTDghFSkcGyIIHQEpHwYEASUrIQYEARECAR5wYWNrYWdlOmtlcm5lbC91dGlsL2dyYXBoLmRhcnRIc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9jbGFzc19oaWVyYXJjaHlfYnVpbGRlci5kYXJ0wAFcrC8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmNsYXNzX2hpZXJhcmNoeV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZSwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgUHJvY2VkdXJlS2luZCwKICAgICAgICBTdXBlcnR5cGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICcuLi9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTWVtYmVyQnVpbGRlcjsKCmltcG9ydCAnLi4vbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICcuLi9tZXNzYWdlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlciwKICAgICAgICBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2UsCiAgICAgICAgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdCwKICAgICAgICBtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UxLAogICAgICAgIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTIsCiAgICAgICAgbWVzc2FnZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3QsCiAgICAgICAgbWVzc2FnZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZSwKICAgICAgICB0ZW1wbGF0ZUNhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcywKICAgICAgICB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcywKICAgICAgICB0ZW1wbGF0ZUNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UsCiAgICAgICAgdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZSwKICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbk5vdEFic3RyYWN0OwoKaW1wb3J0ICcuLi9uYW1lcy5kYXJ0JyBzaG93IG5vU3VjaE1ldGhvZE5hbWU7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JyBzaG93IFNjb3BlOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xvYWRlci5kYXJ0JyBzaG93IFNvdXJjZUxvYWRlcjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2Uvc3RhbmRhcmRfYm91bmRzLmRhcnQnIHNob3cgU3RhbmRhcmRCb3VuZHM7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfY29uc3RyYWludF9nYXRoZXJlci5kYXJ0JwogICAgc2hvdyBUeXBlQ29uc3RyYWludEdhdGhlcmVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQnIHNob3cgTWl4aW5JbmZlcnJlcjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWEuZGFydCcgc2hvdyBVbmtub3duVHlwZTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcgc2hvdyBUeXBlQ29uc3RyYWludDsKCmltcG9ydCAnZm9yd2FyZGluZ19ub2RlLmRhcnQnIHNob3cgRm9yd2FyZGluZ05vZGU7CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQnVpbGRlciwKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIEltcGxpY2l0RmllbGRUeXBlLAogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBGaWVsZEJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBQcm9jZWR1cmVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmltcG9ydCAndHlwZXMuZGFydCcgc2hvdyBUeXBlczsKCmNvbnN0IERlYnVnTG9nZ2VyIGRlYnVnID0KICAgIGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkZWJ1Zy5oaWVyYXJjaHkiKSA/IGNvbnN0IERlYnVnTG9nZ2VyKCkgOiBudWxsOwoKY2xhc3MgRGVidWdMb2dnZXIgewogIGNvbnN0IERlYnVnTG9nZ2VyKCk7CiAgdm9pZCBsb2coT2JqZWN0IG1lc3NhZ2UpID0+IHByaW50KG1lc3NhZ2UpOwp9CgppbnQgY29tcGFyZURlY2xhcmF0aW9ucyhCdWlsZGVyIGEsIEJ1aWxkZXIgYikgewogIHJldHVybiBDbGFzc0hpZXJhcmNoeS5jb21wYXJlTWVtYmVycyhhLnRhcmdldCwgYi50YXJnZXQpOwp9CgpQcm9jZWR1cmVLaW5kIG1lbWJlcktpbmQoTWVtYmVyIG1lbWJlcikgewogIHJldHVybiBtZW1iZXIgaXMgUHJvY2VkdXJlID8gbWVtYmVyLmtpbmQgOiBudWxsOwp9Cgpib29sIGlzTmFtZVZpc2libGVJbihOYW1lIG5hbWUsIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICByZXR1cm4gIW5hbWUuaXNQcml2YXRlIHx8IG5hbWUubGlicmFyeSA9PSBsaWJyYXJ5LnRhcmdldDsKfQoKLy8vIFJldHVybnMgdHJ1ZSBpZiBbYV0gaXMgYSBjbGFzcyBtZW1iZXIgY29uZmxpY3Qgd2l0aCBbYl0uICBbYV0gaXMgYXNzdW1lZCB0bwovLy8gYmUgZGVjbGFyZWQgaW4gdGhlIGNsYXNzLCBbYl0gaXMgYXNzdW1lZCB0byBiZSBpbmhlcml0ZWQuCi8vLwovLy8gU2VlIHRoZSBzZWN0aW9uIG5hbWVkICJDbGFzcyBNZW1iZXIgQ29uZmxpY3RzIiBpbiBbRGFydCBQcm9ncmFtbWluZwovLy8gTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbl0oCi8vLyAuLi8uLi8uLi8uLi8uLi8uLi9kb2NzL2xhbmd1YWdlL2RhcnRMYW5nU3BlYy50ZXgjY2xhc3NNZW1iZXJDb25mbGljdHMpLgpib29sIGlzSW5oZXJpdGFuY2VDb25mbGljdChCdWlsZGVyIGEsIEJ1aWxkZXIgYikgewogIGlmIChhLmlzU3RhdGljKSByZXR1cm4gdHJ1ZTsKICBpZiAobWVtYmVyS2luZChhLnRhcmdldCkgPT0gbWVtYmVyS2luZChiLnRhcmdldCkpIHJldHVybiBmYWxzZTsKICBpZiAoYS5pc0ZpZWxkKSByZXR1cm4gIShiLmlzRmllbGQgfHwgYi5pc0dldHRlciB8fCBiLmlzU2V0dGVyKTsKICBpZiAoYi5pc0ZpZWxkKSByZXR1cm4gIShhLmlzRmllbGQgfHwgYS5pc0dldHRlciB8fCBhLmlzU2V0dGVyKTsKICBpZiAoYS5pc1NldHRlcikgcmV0dXJuICEoYi5pc0dldHRlciB8fCBiLmlzU2V0dGVyKTsKICBpZiAoYi5pc1NldHRlcikgcmV0dXJuICEoYS5pc0dldHRlciB8fCBhLmlzU2V0dGVyKTsKICBpZiAoYSBpcyBJbnRlcmZhY2VDb25mbGljdCB8fCBiIGlzIEludGVyZmFjZUNvbmZsaWN0KSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgaW1wbGllc1NldHRlcihCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgcmV0dXJuIGRlY2xhcmF0aW9uLmlzRmllbGQgJiYgIShkZWNsYXJhdGlvbi5pc0ZpbmFsIHx8IGRlY2xhcmF0aW9uLmlzQ29uc3QpOwp9Cgpib29sIGhhc1NhbWVTaWduYXR1cmUoRnVuY3Rpb25Ob2RlIGEsIEZ1bmN0aW9uTm9kZSBiKSB7CiAgTGlzdDxUeXBlUGFyYW1ldGVyPiBhVHlwZVBhcmFtZXRlcnMgPSBhLnR5cGVQYXJhbWV0ZXJzOwogIExpc3Q8VHlwZVBhcmFtZXRlcj4gYlR5cGVQYXJhbWV0ZXJzID0gYi50eXBlUGFyYW1ldGVyczsKICBpbnQgdHlwZVBhcmFtZXRlckNvdW50ID0gYVR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICBpZiAodHlwZVBhcmFtZXRlckNvdW50ICE9IGJUeXBlUGFyYW1ldGVycy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uOwogIGlmICh0eXBlUGFyYW1ldGVyQ291bnQgIT0gMCkgewogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZXMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4odHlwZVBhcmFtZXRlckNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlckNvdW50OyBpKyspIHsKICAgICAgdHlwZXNbaV0gPSBuZXcgVHlwZVBhcmFtZXRlclR5cGUoYVR5cGVQYXJhbWV0ZXJzW2ldKTsKICAgIH0KICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoYlR5cGVQYXJhbWV0ZXJzLCB0eXBlcyk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJDb3VudDsgaSsrKSB7CiAgICAgIERhcnRUeXBlIGFCb3VuZCA9IGFUeXBlUGFyYW1ldGVyc1tpXS5ib3VuZDsKICAgICAgRGFydFR5cGUgYkJvdW5kID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlUGFyYW1ldGVyc1tpXS5ib3VuZCk7CiAgICAgIGlmIChhQm91bmQgIT0gYkJvdW5kKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBpZiAoYS5yZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9IGIucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgcmV0dXJuIGZhbHNlOwogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gYVBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gYS5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGJQb3NpdGlvbmFsUGFyYW1ldGVycyA9IGIucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgaWYgKGFQb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggIT0gYlBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBmb3IgKGludCBpID0gMDsgaSA8IGFQb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBhUGFyYW1ldGVyID0gYVBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBiUGFyYW1ldGVyID0gYlBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgaWYgKGFQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQgIT0gYlBhcmFtZXRlci5pc0NvdmFyaWFudCkgcmV0dXJuIGZhbHNlOwogICAgRGFydFR5cGUgYVR5cGUgPSBhUGFyYW1ldGVyLnR5cGU7CiAgICBEYXJ0VHlwZSBiVHlwZSA9IGJQYXJhbWV0ZXIudHlwZTsKICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICBiVHlwZSA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShiVHlwZSk7CiAgICB9CiAgICBpZiAoYVR5cGUgIT0gYlR5cGUpIHJldHVybiBmYWxzZTsKICB9CgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gYU5hbWVkUGFyYW1ldGVycyA9IGEubmFtZWRQYXJhbWV0ZXJzOwogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gYk5hbWVkUGFyYW1ldGVycyA9IGIubmFtZWRQYXJhbWV0ZXJzOwogIGlmIChhTmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAhPSBiTmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoaW50IGkgPSAwOyBpIDwgYU5hbWVkUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBhUGFyYW1ldGVyID0gYU5hbWVkUGFyYW1ldGVyc1tpXTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYlBhcmFtZXRlciA9IGJOYW1lZFBhcmFtZXRlcnNbaV07CiAgICBpZiAoYVBhcmFtZXRlci5pc0NvdmFyaWFudCAhPSBiUGFyYW1ldGVyLmlzQ292YXJpYW50KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoYVBhcmFtZXRlci5uYW1lICE9IGJQYXJhbWV0ZXIubmFtZSkgcmV0dXJuIGZhbHNlOwogICAgRGFydFR5cGUgYVR5cGUgPSBhUGFyYW1ldGVyLnR5cGU7CiAgICBEYXJ0VHlwZSBiVHlwZSA9IGJQYXJhbWV0ZXIudHlwZTsKICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICBiVHlwZSA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShiVHlwZSk7CiAgICB9CiAgICBpZiAoYVR5cGUgIT0gYlR5cGUpIHJldHVybiBmYWxzZTsKICB9CgogIERhcnRUeXBlIGFSZXR1cm5UeXBlID0gYS5yZXR1cm5UeXBlOwogIERhcnRUeXBlIGJSZXR1cm5UeXBlID0gYi5yZXR1cm5UeXBlOwogIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgYlJldHVyblR5cGUgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlJldHVyblR5cGUpOwogIH0KCiAgcmV0dXJuIGFSZXR1cm5UeXBlID09IGJSZXR1cm5UeXBlOwp9CgpjbGFzcyBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgewogIGZpbmFsIE1hcDxDbGFzcywgQ2xhc3NIaWVyYXJjaHlOb2RlPiBub2RlcyA9IDxDbGFzcywgQ2xhc3NIaWVyYXJjaHlOb2RlPnt9OwoKICBmaW5hbCBDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3M7CgogIGZpbmFsIExvYWRlciBsb2FkZXI7CgogIGZpbmFsIENsYXNzIG9iamVjdEtlcm5lbENsYXNzOwoKICBmaW5hbCBDbGFzcyBmdXR1cmVLZXJuZWxDbGFzczsKCiAgZmluYWwgQ2xhc3MgZnV0dXJlT3JLZXJuZWxDbGFzczsKCiAgZmluYWwgQ2xhc3MgZnVuY3Rpb25LZXJuZWxDbGFzczsKCiAgZmluYWwgQ2xhc3MgbnVsbEtlcm5lbENsYXNzOwoKICBmaW5hbCBMaXN0PERlbGF5ZWRPdmVycmlkZUNoZWNrPiBvdmVycmlkZUNoZWNrcyA9IDxEZWxheWVkT3ZlcnJpZGVDaGVjaz5bXTsKCiAgZmluYWwgTGlzdDxEZWxheWVkTWVtYmVyPiBkZWxheWVkTWVtYmVyQ2hlY2tzID0gPERlbGF5ZWRNZW1iZXI+W107CgogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMuCiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKCiAgVHlwZXMgdHlwZXM7CgogIENsYXNzSGllcmFyY2h5QnVpbGRlcih0aGlzLm9iamVjdENsYXNzLCB0aGlzLmxvYWRlciwgdGhpcy5jb3JlVHlwZXMpCiAgICAgIDogb2JqZWN0S2VybmVsQ2xhc3MgPSBvYmplY3RDbGFzcy50YXJnZXQsCiAgICAgICAgZnV0dXJlS2VybmVsQ2xhc3MgPSBjb3JlVHlwZXMuZnV0dXJlQ2xhc3MsCiAgICAgICAgZnV0dXJlT3JLZXJuZWxDbGFzcyA9IGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzLAogICAgICAgIGZ1bmN0aW9uS2VybmVsQ2xhc3MgPSBjb3JlVHlwZXMuZnVuY3Rpb25DbGFzcywKICAgICAgICBudWxsS2VybmVsQ2xhc3MgPSBjb3JlVHlwZXMubnVsbENsYXNzIHsKICAgIHR5cGVzID0gbmV3IFR5cGVzKHRoaXMpOwogIH0KCiAgQ2xhc3NIaWVyYXJjaHlOb2RlIGdldE5vZGVGcm9tQ2xhc3MoQ2xhc3NCdWlsZGVyIGNscykgewogICAgcmV0dXJuIG5vZGVzW2Nscy50YXJnZXRdID8/PQogICAgICAgIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGVCdWlsZGVyKHRoaXMsIGNscykuYnVpbGQoKTsKICB9CgogIENsYXNzSGllcmFyY2h5Tm9kZSBnZXROb2RlRnJvbVR5cGUoVHlwZUJ1aWxkZXIgdHlwZSkgewogICAgQ2xhc3NCdWlsZGVyIGNscyA9IGdldENsYXNzKHR5cGUpOwogICAgcmV0dXJuIGNscyA9PSBudWxsID8gbnVsbCA6IGdldE5vZGVGcm9tQ2xhc3MoY2xzKTsKICB9CgogIENsYXNzSGllcmFyY2h5Tm9kZSBnZXROb2RlRnJvbUtlcm5lbENsYXNzKENsYXNzIGNscykgewogICAgcmV0dXJuIG5vZGVzW2Nsc10gPz8KICAgICAgICBnZXROb2RlRnJvbUNsYXNzKGxvYWRlci5jb21wdXRlQ2xhc3NCdWlsZGVyRnJvbVRhcmdldENsYXNzKGNscykpOwogIH0KCiAgVHlwZUJ1aWxkZXIgYXNTdXBlcnR5cGVPZihDbGFzcyBjbHMsIENsYXNzIHN1cGVydHlwZSkgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGNsc05vZGUgPSBnZXROb2RlRnJvbUtlcm5lbENsYXNzKGNscyk7CiAgICBpZiAoY2xzID09IHN1cGVydHlwZSkgewogICAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoY2xzTm9kZS5jbHMubmFtZSwgbnVsbCkuLmJpbmQoY2xzTm9kZS5jbHMpOwogICAgfQogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1cGVydHlwZU5vZGUgPSBnZXROb2RlRnJvbUtlcm5lbENsYXNzKHN1cGVydHlwZSk7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBzdXBlcnR5cGVzID0gY2xzTm9kZS5zdXBlcmNsYXNzZXM7CiAgICBpbnQgZGVwdGggPSBzdXBlcnR5cGVOb2RlLmRlcHRoOwogICAgQnVpbGRlciBzdXBlcnR5cGVEZWNsYXJhdGlvbiA9IHN1cGVydHlwZU5vZGUuY2xzOwogICAgaWYgKGRlcHRoIDwgc3VwZXJ0eXBlcy5sZW5ndGgpIHsKICAgICAgVHlwZUJ1aWxkZXIgYXNTdXBlcnR5cGVPZiA9IHN1cGVydHlwZXNbZGVwdGhdOwogICAgICBpZiAoYXNTdXBlcnR5cGVPZi5kZWNsYXJhdGlvbiA9PSBzdXBlcnR5cGVEZWNsYXJhdGlvbikgewogICAgICAgIHJldHVybiBhc1N1cGVydHlwZU9mOwogICAgICB9CiAgICB9CiAgICBzdXBlcnR5cGVzID0gY2xzTm9kZS5pbnRlcmZhY2VzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdXBlcnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFR5cGVCdWlsZGVyIHR5cGUgPSBzdXBlcnR5cGVzW2ldOwogICAgICBpZiAodHlwZS5kZWNsYXJhdGlvbiA9PSBzdXBlcnR5cGVEZWNsYXJhdGlvbikgcmV0dXJuIHR5cGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEludGVyZmFjZVR5cGUgZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZigKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICBDbGFzcyBrZXJuZWxDbGFzcyA9IHR5cGUuY2xhc3NOb2RlOwogICAgaWYgKGtlcm5lbENsYXNzID09IHN1cGVyY2xhc3MpIHJldHVybiB0eXBlOwogICAgaWYgKGtlcm5lbENsYXNzID09IG51bGxLZXJuZWxDbGFzcykgewogICAgICBpZiAoc3VwZXJjbGFzcy50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgcmV0dXJuIHN1cGVyY2xhc3MucmF3VHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaGlzIGlzIGEgc2FmZSBmYWxsLWJhY2sgZm9yIGRlYWxpbmcgd2l0aCBgTnVsbGAuIEl0IHdpbGwgbGlrZWx5IGJlCiAgICAgICAgLy8gZmFzdGVyIHRvIGNoZWNrIGZvciBgTnVsbGAgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuCiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgICAgICBzdXBlcmNsYXNzLAogICAgICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICAgICAgc3VwZXJjbGFzcy50eXBlUGFyYW1ldGVycy5sZW5ndGgsIG51bGxLZXJuZWxDbGFzcy5yYXdUeXBlKSk7CiAgICAgIH0KICAgIH0KICAgIE5hbWVkVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gYXNTdXBlcnR5cGVPZihrZXJuZWxDbGFzcywgc3VwZXJjbGFzcyk7CiAgICBpZiAoc3VwZXJ0eXBlID09IG51bGwpIHJldHVybiBudWxsOwogICAgaWYgKHN1cGVydHlwZS5hcmd1bWVudHMgPT0gbnVsbCAmJiBzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIHN1cGVyY2xhc3MucmF3VHlwZTsKICAgIH0KICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUodHlwZSkKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoc3VwZXJ0eXBlLmJ1aWxkKG51bGwpKTsKICB9CgogIEludGVyZmFjZVR5cGUgZ2V0S2VybmVsTGVnYWN5TGVhc3RVcHBlckJvdW5kKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUxLCBJbnRlcmZhY2VUeXBlIHR5cGUyKSB7CiAgICBpZiAodHlwZTEgPT0gdHlwZTIpIHJldHVybiB0eXBlMTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlMSA9IGdldE5vZGVGcm9tS2VybmVsQ2xhc3ModHlwZTEuY2xhc3NOb2RlKTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlMiA9IGdldE5vZGVGcm9tS2VybmVsQ2xhc3ModHlwZTIuY2xhc3NOb2RlKTsKICAgIFNldDxDbGFzc0hpZXJhcmNoeU5vZGU+IG5vZGVzMSA9IG5vZGUxLmNvbXB1dGVBbGxTdXBlck5vZGVzKHRoaXMpLnRvU2V0KCk7CiAgICBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4gbm9kZXMyID0gbm9kZTIuY29tcHV0ZUFsbFN1cGVyTm9kZXModGhpcyk7CiAgICBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4gY29tbW9uID0gPENsYXNzSGllcmFyY2h5Tm9kZT5bXTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzMi5sZW5ndGg7IGkrKykgewogICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IG5vZGVzMltpXTsKICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgY29udGludWU7CiAgICAgIGlmIChub2RlczEuY29udGFpbnMobm9kZSkpIHsKICAgICAgICBEYXJ0VHlwZSBjYW5kaWRhdGUxID0gZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZih0eXBlMSwgbm9kZS5jbHMudGFyZ2V0KTsKICAgICAgICBEYXJ0VHlwZSBjYW5kaWRhdGUyID0gZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZih0eXBlMiwgbm9kZS5jbHMudGFyZ2V0KTsKICAgICAgICBpZiAoY2FuZGlkYXRlMSA9PSBjYW5kaWRhdGUyKSB7CiAgICAgICAgICBjb21tb24uYWRkKG5vZGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChjb21tb24ubGVuZ3RoID09IDEpIHJldHVybiBvYmplY3RLZXJuZWxDbGFzcy5yYXdUeXBlOwogICAgY29tbW9uLnNvcnQoQ2xhc3NIaWVyYXJjaHlOb2RlLmNvbXBhcmVNYXhJbmhlcml0YW5jZVBhdGgpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tbW9uLmxlbmd0aCAtIDE7IGkrKykgewogICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IGNvbW1vbltpXTsKICAgICAgaWYgKG5vZGUubWF4SW5oZXJpdGFuY2VQYXRoICE9IGNvbW1vbltpICsgMV0ubWF4SW5oZXJpdGFuY2VQYXRoKSB7CiAgICAgICAgcmV0dXJuIGdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YodHlwZTEsIG5vZGUuY2xzLnRhcmdldCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG8gewogICAgICAgICAgaSsrOwogICAgICAgIH0gd2hpbGUgKG5vZGUubWF4SW5oZXJpdGFuY2VQYXRoID09IGNvbW1vbltpICsgMV0ubWF4SW5oZXJpdGFuY2VQYXRoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG9iamVjdEtlcm5lbENsYXNzLnJhd1R5cGU7CiAgfQoKICBNZW1iZXIgZ2V0SW50ZXJmYWNlTWVtYmVyS2VybmVsKENsYXNzIGNscywgTmFtZSBuYW1lLCBib29sIGlzU2V0dGVyKSB7CiAgICByZXR1cm4gZ2V0Tm9kZUZyb21LZXJuZWxDbGFzcyhjbHMpCiAgICAgICAgLmdldEludGVyZmFjZU1lbWJlcihuYW1lLCBpc1NldHRlcikKICAgICAgICA/LnRhcmdldDsKICB9CgogIE1lbWJlciBnZXREaXNwYXRjaFRhcmdldEtlcm5lbChDbGFzcyBjbHMsIE5hbWUgbmFtZSwgYm9vbCBpc1NldHRlcikgewogICAgcmV0dXJuIGdldE5vZGVGcm9tS2VybmVsQ2xhc3MoY2xzKQogICAgICAgIC5nZXREaXNwYXRjaFRhcmdldChuYW1lLCBpc1NldHRlcikKICAgICAgICA/LnRhcmdldDsKICB9CgogIE1lbWJlciBnZXRDb21iaW5lZE1lbWJlclNpZ25hdHVyZUtlcm5lbChDbGFzcyBjbHMsIE5hbWUgbmFtZSwgYm9vbCBpc1NldHRlciwKICAgICAgaW50IGNoYXJPZmZzZXQsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPQogICAgICAgIGdldE5vZGVGcm9tS2VybmVsQ2xhc3MoY2xzKS5nZXRJbnRlcmZhY2VNZW1iZXIobmFtZSwgaXNTZXR0ZXIpOwogICAgaWYgKGRlY2xhcmF0aW9uPy5pc1N0YXRpYyA/PyB0cnVlKSByZXR1cm4gbnVsbDsKICAgIGlmIChkZWNsYXJhdGlvbi5uZXh0ICE9IG51bGwpIHsKICAgICAgbGlicmFyeT8uYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlLndpdGhBcmd1bWVudHMobmFtZS5uYW1lKSwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBuYW1lLm5hbWUubGVuZ3RoLAogICAgICAgICAgbGlicmFyeS5maWxlVXJpKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgRGVsYXllZE1lbWJlcikgewogICAgICByZXR1cm4gZGVjbGFyYXRpb24uY2hlY2sodGhpcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZGVjbGFyYXRpb24udGFyZ2V0OwogICAgfQogIH0KCiAgc3RhdGljIENsYXNzSGllcmFyY2h5QnVpbGRlciBidWlsZChDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MsCiAgICAgIExpc3Q8Q2xhc3NCdWlsZGVyPiBjbGFzc2VzLCBTb3VyY2VMb2FkZXIgbG9hZGVyLCBDb3JlVHlwZXMgY29yZVR5cGVzKSB7CiAgICBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5ID0KICAgICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyKG9iamVjdENsYXNzLCBsb2FkZXIsIGNvcmVUeXBlcyk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKICAgICAgQ2xhc3NCdWlsZGVyIGNscyA9IGNsYXNzZXNbaV07CiAgICAgIGlmICghY2xzLmlzUGF0Y2gpIHsKICAgICAgICBoaWVyYXJjaHkubm9kZXNbY2xzLnRhcmdldF0gPQogICAgICAgICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlQnVpbGRlcihoaWVyYXJjaHksIGNscykuYnVpbGQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKGFoZSk6IE1lcmdlIHRoZSBpbmplY3RlZCBtZW1iZXJzIG9mIHBhdGNoIGludG8gdGhlIGhpZXJhcmNoeQogICAgICAgIC8vIG5vZGUgb2YgYGNscy5vcmlnaW5gLgogICAgICB9CiAgICB9CiAgICByZXR1cm4gaGllcmFyY2h5OwogIH0KfQoKY2xhc3MgQ2xhc3NIaWVyYXJjaHlOb2RlQnVpbGRlciB7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeTsKCiAgZmluYWwgQ2xhc3NCdWlsZGVyIGNsczsKCiAgYm9vbCBoYXNOb1N1Y2hNZXRob2QgPSBmYWxzZTsKCiAgTGlzdDxCdWlsZGVyPiBhYnN0cmFjdE1lbWJlcnMgPSBudWxsOwoKICBDbGFzc0hpZXJhcmNoeU5vZGVCdWlsZGVyKHRoaXMuaGllcmFyY2h5LCB0aGlzLmNscyk7CgogIENsYXNzQnVpbGRlciBnZXQgb2JqZWN0Q2xhc3MgPT4gaGllcmFyY2h5Lm9iamVjdENsYXNzOwoKICBmaW5hbCBNYXA8Q2xhc3MsIFN1YnN0aXR1dGlvbj4gc3Vic3RpdHV0aW9ucyA9IDxDbGFzcywgU3Vic3RpdHV0aW9uPnt9OwoKICAvLy8gV2hlbiBtZXJnaW5nIGBhTGlzdGAgYW5kIGBiTGlzdGAsIFthXSAoZnJvbSBgYUxpc3RgKSBhbmQgW2JdIChmcm9tCiAgLy8vIGBiTGlzdGApIGVhY2ggaGF2ZSB0aGUgc2FtZSBuYW1lLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVyY2xhc3NgLCBbYV0gc2hvdWxkIG92ZXJyaWRlIFtiXS4KICAvLy8KICAvLy8gSWYgW21lcmdlS2luZF0gaXMgYE1lcmdlS2luZC5pbnRlcmZhY2VzYCwgd2UgbmVlZCB0byByZWNvcmQgdGhlbSBhbmQKICAvLy8gc29sdmUgdGhlIGNvbmZsaWN0IGxhdGVyLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVydHlwZXNgLCBbYV0gc2hvdWxkIGltcGxlbWVudCBbYl0sIGFuZAogIC8vLyBbYl0gaXMgaW1wbGljaXRseSBhYnN0cmFjdC4KICBCdWlsZGVyIGhhbmRsZU1lcmdlQ29uZmxpY3QoQnVpbGRlciBhLCBCdWlsZGVyIGIsIE1lcmdlS2luZCBtZXJnZUtpbmQpIHsKICAgIGRlYnVnPy5sb2coCiAgICAgICAgImhhbmRsZU1lcmdlQ29uZmxpY3Q6ICR7ZnVsbE5hbWUoYSl9ICR7ZnVsbE5hbWUoYil9ICR7bWVyZ2VLaW5kfSIpOwogICAgLy8gVE9ETyhhaGUpOiBFbmFibGUgdGhpcyBvcHRpbWl6YXRpb24sIGJ1dCBiZSBjYXJlZnVsIGFib3V0IGFic3RyYWN0CiAgICAvLyBtZXRob2RzIG92ZXJyaWRpbmcgY29uY3JldGUgbWV0aG9kcy4KICAgIC8vIGlmIChjbHMgaXMgRGlsbENsYXNzQnVpbGRlcikgcmV0dXJuIGE7CiAgICBpZiAoYSA9PSBiKSByZXR1cm4gYTsKICAgIGlmIChhLm5leHQgIT0gbnVsbCB8fCBiLm5leHQgIT0gbnVsbCkgewogICAgICAvLyBEb24ndCBjaGVjayBvdmVycmlkZXMgaW52b2x2aW5nIGR1cGxpY2F0ZWQgbWVtYmVycy4KICAgICAgcmV0dXJuIGE7CiAgICB9CiAgICBCdWlsZGVyIHJlc3VsdCA9IGNoZWNrSW5oZXJpdGFuY2VDb25mbGljdChhLCBiKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIHJlc3VsdCA9IGE7CiAgICBzd2l0Y2ggKG1lcmdlS2luZCkgewogICAgICBjYXNlIE1lcmdlS2luZC5zdXBlcmNsYXNzTWVtYmVyczoKICAgICAgY2FzZSBNZXJnZUtpbmQuc3VwZXJjbGFzc1NldHRlcnM6CiAgICAgICAgLy8gW2FdIGlzIGEgbWV0aG9kIGRlY2xhcmVkIGluIFtjbHNdLiBUaGlzIG1lYW5zIGl0IGRlZmluZXMgdGhlCiAgICAgICAgLy8gaW50ZXJmYWNlIG9mIHRoaXMgY2xhc3MgcmVnYXJkbGVzcyBpZiBpdHMgYWJzdHJhY3QuCiAgICAgICAgZGVidWc/LmxvZygic3VwZXJjbGFzczogY2hlY2tWYWxpZE92ZXJyaWRlKCR7Y2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSwgIgogICAgICAgICAgICAiJHtmdWxsTmFtZShhKX0sICR7ZnVsbE5hbWUoYil9KSIpOwogICAgICAgIGNoZWNrVmFsaWRPdmVycmlkZSgKICAgICAgICAgICAgYSwgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24uc2VsZWN0QWJzdHJhY3QoYikpOwoKICAgICAgICBpZiAoaXNBYnN0cmFjdChhKSkgewogICAgICAgICAgaWYgKGlzQWJzdHJhY3QoYikpIHsKICAgICAgICAgICAgcmVjb3JkQWJzdHJhY3RNZW1iZXIoYSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWNscy5pc0Fic3RyYWN0KSB7CiAgICAgICAgICAgICAgLy8gVGhlIGludGVyZmFjZSBvZiB0aGlzIGNsYXNzIGlzIFthXS4gQnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcwogICAgICAgICAgICAgIC8vIFtiXS4gU28gW2JdIG11c3QgaW1wbGVtZW50IFthXSwgdW5sZXNzIFtjbHNdIGlzIGFic3RyYWN0LgogICAgICAgICAgICAgIGNoZWNrVmFsaWRPdmVycmlkZShiLCBhKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHQgPSBuZXcgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24oCiAgICAgICAgICAgICAgICBjbHMsCiAgICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgICAgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24uc2VsZWN0Q29uY3JldGUoYiksCiAgICAgICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVyY2xhc3NTZXR0ZXJzLAogICAgICAgICAgICAgICAgY2xzLmxpYnJhcnkubG9hZGVyID09IGhpZXJhcmNoeS5sb2FkZXIpOwogICAgICAgICAgICBoaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy5hZGQocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNscy5pc01peGluQXBwbGljYXRpb24gJiYgYS5wYXJlbnQgIT0gY2xzKSB7CiAgICAgICAgICByZXN1bHQgPSBJbmhlcml0ZWRJbXBsZW1lbnRhdGlvbkludGVyZmFjZUNvbmZsaWN0LmNvbWJpbmVkKAogICAgICAgICAgICAgIGNscywKICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcmNsYXNzU2V0dGVycywKICAgICAgICAgICAgICBjbHMubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlciwKICAgICAgICAgICAgICBpc0luaGVyaXRhYmxlQ29uZmxpY3Q6IGZhbHNlKTsKICAgICAgICAgIGlmIChyZXN1bHQgaXMgRGVsYXllZE1lbWJlcikgewogICAgICAgICAgICBoaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy5hZGQocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIE1lbWJlciB0YXJnZXQgPSByZXN1bHQudGFyZ2V0OwogICAgICAgIGlmICh0YXJnZXQuZW5jbG9zaW5nQ2xhc3MgIT0gb2JqZWN0Q2xhc3MuY2xzICYmCiAgICAgICAgICAgIHRhcmdldC5uYW1lID09IG5vU3VjaE1ldGhvZE5hbWUpIHsKICAgICAgICAgIGhhc05vU3VjaE1ldGhvZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBNZXJnZUtpbmQubWVtYmVyc1dpdGhTZXR0ZXJzOgogICAgICBjYXNlIE1lcmdlS2luZC5zZXR0ZXJzV2l0aE1lbWJlcnM6CiAgICAgICAgaWYgKGEucGFyZW50ID09IGNscyAmJiBiLnBhcmVudCAhPSBjbHMpIHsKICAgICAgICAgIGlmIChhIGlzIEZpZWxkQnVpbGRlcikgewogICAgICAgICAgICBpZiAoYS5pc0ZpbmFsICYmIGIuaXNTZXR0ZXIpIHsKICAgICAgICAgICAgICBoaWVyYXJjaHkub3ZlcnJpZGVDaGVja3MuYWRkKG5ldyBEZWxheWVkT3ZlcnJpZGVDaGVjayhjbHMsIGEsIGIpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoIWluZmVyRmllbGRUeXBlcyhhLCBiKSkgewogICAgICAgICAgICAgICAgaGllcmFyY2h5Lm92ZXJyaWRlQ2hlY2tzCiAgICAgICAgICAgICAgICAgICAgLmFkZChuZXcgRGVsYXllZE92ZXJyaWRlQ2hlY2soY2xzLCBhLCBiKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGEgaXMgUHJvY2VkdXJlQnVpbGRlcikgewogICAgICAgICAgICBpZiAoIWluZmVyTWV0aG9kVHlwZXMoYSwgYikpIHsKICAgICAgICAgICAgICBoaWVyYXJjaHkub3ZlcnJpZGVDaGVja3MuYWRkKG5ldyBEZWxheWVkT3ZlcnJpZGVDaGVjayhjbHMsIGEsIGIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgTWVyZ2VLaW5kLmludGVyZmFjZXNNZW1iZXJzOgogICAgICAgIHJlc3VsdCA9IEludGVyZmFjZUNvbmZsaWN0LmNvbWJpbmVkKAogICAgICAgICAgICBjbHMsIGEsIGIsIGZhbHNlLCBjbHMubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlcik7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIE1lcmdlS2luZC5pbnRlcmZhY2VzU2V0dGVyczoKICAgICAgICByZXN1bHQgPSBJbnRlcmZhY2VDb25mbGljdC5jb21iaW5lZCgKICAgICAgICAgICAgY2xzLCBhLCBiLCB0cnVlLCBjbHMubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlcik7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIE1lcmdlS2luZC5zdXBlcnR5cGVzTWVtYmVyczoKICAgICAgY2FzZSBNZXJnZUtpbmQuc3VwZXJ0eXBlc1NldHRlcnM6CiAgICAgICAgLy8gW2JdIGlzIGluaGVyaXRlZCBmcm9tIGFuIGludGVyZmFjZSBzbyBpdCBpcyBpbXBsaWNpdGx5IGFic3RyYWN0LgoKICAgICAgICBhID0gQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24uc2VsZWN0QWJzdHJhY3QoYSk7CiAgICAgICAgYiA9IEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uLnNlbGVjdEFic3RyYWN0KGIpOwoKICAgICAgICAvLyBJZiBbYV0gaXMgZGVjbGFyZWQgaW4gdGhpcyBjbGFzcywgaXQgZGVmaW5lcyB0aGUgaW50ZXJmYWNlLgogICAgICAgIGlmIChhLnBhcmVudCA9PSBjbHMpIHsKICAgICAgICAgIGRlYnVnPy5sb2coInN1cGVydHlwZXM6IGNoZWNrVmFsaWRPdmVycmlkZSgke2Nscy5mdWxsTmFtZUZvckVycm9yc30sICIKICAgICAgICAgICAgICAiJHtmdWxsTmFtZShhKX0sICR7ZnVsbE5hbWUoYil9KSIpOwogICAgICAgICAgY2hlY2tWYWxpZE92ZXJyaWRlKGEsIGIpOwogICAgICAgICAgaWYgKGEgaXMgRGVsYXllZE1lbWJlciAmJiAhYS5pc0luaGVyaXRhYmxlQ29uZmxpY3QpIHsKICAgICAgICAgICAgaWYgKGIgaXMgRGVsYXllZE1lbWJlcikgewogICAgICAgICAgICAgIGIuYWRkQWxsRGVjbGFyYXRpb25zVG8oYS5kZWNsYXJhdGlvbnMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFkZERlY2xhcmF0aW9uSWZEaWZmZXJlbnQoYiwgYS5kZWNsYXJhdGlvbnMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChpc0Fic3RyYWN0KGEpKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IEludGVyZmFjZUNvbmZsaWN0LmNvbWJpbmVkKAogICAgICAgICAgICAgICAgY2xzLAogICAgICAgICAgICAgICAgYSwKICAgICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVydHlwZXNTZXR0ZXJzLAogICAgICAgICAgICAgICAgY2xzLmxpYnJhcnkubG9hZGVyID09IGhpZXJhcmNoeS5sb2FkZXIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gSW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdC5jb21iaW5lZCgKICAgICAgICAgICAgICAgIGNscywKICAgICAgICAgICAgICAgIGEsCiAgICAgICAgICAgICAgICBiLAogICAgICAgICAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcnR5cGVzU2V0dGVycywKICAgICAgICAgICAgICAgIGNscy5saWJyYXJ5LmxvYWRlciA9PSBoaWVyYXJjaHkubG9hZGVyKTsKICAgICAgICAgIH0KICAgICAgICAgIGRlYnVnPy5sb2coInN1cGVydHlwZXM6ICR7cmVzdWx0fSIpOwogICAgICAgICAgaWYgKHJlc3VsdCBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgICAgICAgIGhpZXJhcmNoeS5kZWxheWVkTWVtYmVyQ2hlY2tzLmFkZChyZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQnVpbGRlciBjaGVja0luaGVyaXRhbmNlQ29uZmxpY3QoQnVpbGRlciBhLCBCdWlsZGVyIGIpIHsKICAgIGlmIChhIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgQnVpbGRlciByZXN1bHQ7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYS5kZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBCdWlsZGVyIGQgPSBjaGVja0luaGVyaXRhbmNlQ29uZmxpY3QoYS5kZWNsYXJhdGlvbnNbaV0sIGIpOwogICAgICAgIHJlc3VsdCA/Pz0gZDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaWYgKGIgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBCdWlsZGVyIHJlc3VsdDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiLmRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIEJ1aWxkZXIgZCA9IGNoZWNrSW5oZXJpdGFuY2VDb25mbGljdChhLCBiLmRlY2xhcmF0aW9uc1tpXSk7CiAgICAgICAgcmVzdWx0ID8/PSBkOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBpZiAoaXNJbmhlcml0YW5jZUNvbmZsaWN0KGEsIGIpKSB7CiAgICAgIHJlcG9ydEluaGVyaXRhbmNlQ29uZmxpY3QoYSwgYik7CiAgICAgIHJldHVybiBhOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBib29sIGluZmVyTWV0aG9kVHlwZXMoUHJvY2VkdXJlQnVpbGRlciBhLCBCdWlsZGVyIGIpIHsKICAgIGRlYnVnPy5sb2coCiAgICAgICAgIlRyeWluZyB0byBpbmZlciB0eXBlcyBmb3IgJHtmdWxsTmFtZShhKX0gYmFzZWQgb24gJHtmdWxsTmFtZShiKX0iKTsKICAgIGlmIChiIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgYm9vbCBoYXNTYW1lU2lnbmF0dXJlID0gdHJ1ZTsKICAgICAgTGlzdDxCdWlsZGVyPiBkZWNsYXJhdGlvbnMgPSBiLmRlY2xhcmF0aW9uczsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoIWluZmVyTWV0aG9kVHlwZXMoYSwgZGVjbGFyYXRpb25zW2ldKSkgewogICAgICAgICAgaGFzU2FtZVNpZ25hdHVyZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaGFzU2FtZVNpZ25hdHVyZTsKICAgIH0KICAgIGlmIChhLmlzR2V0dGVyKSB7CiAgICAgIHJldHVybiBpbmZlckdldHRlclR5cGUoYSwgYik7CiAgICB9IGVsc2UgaWYgKGEuaXNTZXR0ZXIpIHsKICAgICAgcmV0dXJuIGluZmVyU2V0dGVyVHlwZShhLCBiKTsKICAgIH0KICAgIGJvb2wgaGFkVHlwZXNJbmZlcnJlZCA9IGEuaGFkVHlwZXNJbmZlcnJlZDsKICAgIENsYXNzQnVpbGRlciBhQ2xzID0gYS5wYXJlbnQ7CiAgICBTdWJzdGl0dXRpb24gYVN1YnN0aXR1dGlvbjsKICAgIGlmIChjbHMgIT0gYUNscykgewogICAgICBhc3NlcnQoc3Vic3RpdHV0aW9ucy5jb250YWluc0tleShhQ2xzLnRhcmdldCksCiAgICAgICAgICAiJHtjbHMuZnVsbE5hbWVGb3JFcnJvcnN9ICR7YUNscy5mdWxsTmFtZUZvckVycm9yc30iKTsKICAgICAgYVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnNbYUNscy50YXJnZXRdOwogICAgICBkZWJ1Zz8ubG9nKCIke2Nscy5mdWxsTmFtZUZvckVycm9yc30gLT4gJHthQ2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAiCiAgICAgICAgICAiJGFTdWJzdGl0dXRpb24iKTsKICAgIH0KICAgIENsYXNzQnVpbGRlciBiQ2xzID0gYi5wYXJlbnQ7CiAgICBTdWJzdGl0dXRpb24gYlN1YnN0aXR1dGlvbjsKICAgIGlmIChjbHMgIT0gYkNscykgewogICAgICBhc3NlcnQoc3Vic3RpdHV0aW9ucy5jb250YWluc0tleShiQ2xzLnRhcmdldCksCiAgICAgICAgICAiJHtjbHMuZnVsbE5hbWVGb3JFcnJvcnN9ICR7YkNscy5mdWxsTmFtZUZvckVycm9yc30iKTsKICAgICAgYlN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnNbYkNscy50YXJnZXRdOwogICAgICBkZWJ1Zz8ubG9nKCIke2Nscy5mdWxsTmFtZUZvckVycm9yc30gLT4gJHtiQ2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAiCiAgICAgICAgICAiJGJTdWJzdGl0dXRpb24iKTsKICAgIH0KICAgIFByb2NlZHVyZSBhUHJvY2VkdXJlID0gYS50YXJnZXQ7CiAgICBpZiAoYi50YXJnZXQgaXMhIFByb2NlZHVyZSkgewogICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgMSIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBQcm9jZWR1cmUgYlByb2NlZHVyZSA9IGIudGFyZ2V0OwogICAgRnVuY3Rpb25Ob2RlIGFGdW5jdGlvbiA9IGFQcm9jZWR1cmUuZnVuY3Rpb247CiAgICBGdW5jdGlvbk5vZGUgYkZ1bmN0aW9uID0gYlByb2NlZHVyZS5mdW5jdGlvbjsKCiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGFUeXBlUGFyYW1ldGVycyA9IGFGdW5jdGlvbi50eXBlUGFyYW1ldGVyczsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gYlR5cGVQYXJhbWV0ZXJzID0gYkZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgaW50IHR5cGVQYXJhbWV0ZXJDb3VudCA9IGFUeXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgICBpZiAodHlwZVBhcmFtZXRlckNvdW50ICE9IGJUeXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDIiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKICAgIGlmICh0eXBlUGFyYW1ldGVyQ291bnQgIT0gMCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgY29weVR5cGVQYXJhbWV0ZXJDb3ZhcmlhbmNlKAogICAgICAgICAgICBhLnBhcmVudCwgYVR5cGVQYXJhbWV0ZXJzW2ldLCBiVHlwZVBhcmFtZXRlcnNbaV0pOwogICAgICB9CiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzID0gbmV3IExpc3Q8RGFydFR5cGU+KHR5cGVQYXJhbWV0ZXJDb3VudCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlckNvdW50OyBpKyspIHsKICAgICAgICB0eXBlc1tpXSA9IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShhVHlwZVBhcmFtZXRlcnNbaV0pOwogICAgICB9CiAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoYlR5cGVQYXJhbWV0ZXJzLCB0eXBlcyk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlckNvdW50OyBpKyspIHsKICAgICAgICBEYXJ0VHlwZSBhQm91bmQgPSBhVHlwZVBhcmFtZXRlcnNbaV0uYm91bmQ7CiAgICAgICAgRGFydFR5cGUgYkJvdW5kID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlUGFyYW1ldGVyc1tpXS5ib3VuZCk7CiAgICAgICAgaWYgKGFCb3VuZCAhPSBiQm91bmQpIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAzIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgRGFydFR5cGUgYVJldHVyblR5cGUgPSBhRnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgIGlmIChhU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgYVJldHVyblR5cGUgPSBhU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGFSZXR1cm5UeXBlKTsKICAgIH0KICAgIERhcnRUeXBlIGJSZXR1cm5UeXBlID0gYkZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICBpZiAoYlN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgIGJSZXR1cm5UeXBlID0gYlN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShiUmV0dXJuVHlwZSk7CiAgICB9CiAgICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgYlJldHVyblR5cGUgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlJldHVyblR5cGUpOwogICAgfQogICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgaWYgKGFGdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID4gYkZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDQiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBhUG9zaXRpb25hbCA9IGFGdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gYlBvc2l0aW9uYWwgPSBiRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICBpZiAoYVBvc2l0aW9uYWwubGVuZ3RoIDwgYlBvc2l0aW9uYWwubGVuZ3RoKSB7CiAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCA1Iik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoYVJldHVyblR5cGUgIT0gYlJldHVyblR5cGUpIHsKICAgICAgaWYgKGEucGFyZW50ID09IGNscyAmJiBhLnJldHVyblR5cGUgPT0gbnVsbCkgewogICAgICAgIHJlc3VsdCA9CiAgICAgICAgICAgIGluZmVyUmV0dXJuVHlwZShjbHMsIGEsIGJSZXR1cm5UeXBlLCBoYWRUeXBlc0luZmVycmVkLCBoaWVyYXJjaHkpOwogICAgICB9IGVsc2UgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCA2Iik7CiAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGJQb3NpdGlvbmFsLmxlbmd0aDsgaSsrKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYVBhcmFtZXRlciA9IGFQb3NpdGlvbmFsW2ldOwogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGJQYXJhbWV0ZXIgPSBiUG9zaXRpb25hbFtpXTsKICAgICAgY29weVBhcmFtZXRlckNvdmFyaWFuY2UoYS5wYXJlbnQsIGFQYXJhbWV0ZXIsIGJQYXJhbWV0ZXIpOwogICAgICBEYXJ0VHlwZSBhVHlwZSA9IGFQYXJhbWV0ZXIudHlwZTsKICAgICAgaWYgKGFTdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIGFUeXBlID0gYVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShhVHlwZSk7CiAgICAgIH0KICAgICAgRGFydFR5cGUgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICAgIGlmIChiU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgICBiVHlwZSA9IGJTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlR5cGUpOwogICAgICB9CiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIGJUeXBlID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlKTsKICAgICAgfQogICAgICBpZiAoYVR5cGUgIT0gYlR5cGUpIHsKICAgICAgICBpZiAoYS5wYXJlbnQgPT0gY2xzICYmIGEuZm9ybWFsc1tpXS50eXBlID09IG51bGwpIHsKICAgICAgICAgIHJlc3VsdCA9IGluZmVyUGFyYW1ldGVyVHlwZSgKICAgICAgICAgICAgICBjbHMsIGEsIGEuZm9ybWFsc1tpXSwgYlR5cGUsIGhhZFR5cGVzSW5mZXJyZWQsIGhpZXJhcmNoeSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCA4Iik7CiAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGFOYW1lZCA9IGFGdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnM7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGJOYW1lZCA9IGJGdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnM7CiAgICBuYW1lZDoKICAgIGlmIChhTmFtZWQuaXNOb3RFbXB0eSB8fCBiTmFtZWQuaXNOb3RFbXB0eSkgewogICAgICBpZiAoYVBvc2l0aW9uYWwubGVuZ3RoICE9IGJQb3NpdGlvbmFsLmxlbmd0aCkgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCA5Iik7CiAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgYnJlYWsgbmFtZWQ7CiAgICAgIH0KICAgICAgaWYgKGFGdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9CiAgICAgICAgICBiRnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAxMCIpOwogICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgIGJyZWFrIG5hbWVkOwogICAgICB9CgogICAgICBhTmFtZWQgPSBhTmFtZWQudG9MaXN0KCkuLnNvcnQoY29tcGFyZU5hbWVkUGFyYW1ldGVycyk7CiAgICAgIGJOYW1lZCA9IGJOYW1lZC50b0xpc3QoKS4uc29ydChjb21wYXJlTmFtZWRQYXJhbWV0ZXJzKTsKICAgICAgaW50IGFDb3VudCA9IDA7CiAgICAgIGZvciAoaW50IGJDb3VudCA9IDA7IGJDb3VudCA8IGJOYW1lZC5sZW5ndGg7IGJDb3VudCsrKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBiTmFtZWRbYkNvdW50XS5uYW1lOwogICAgICAgIGZvciAoOyBhQ291bnQgPCBhTmFtZWQubGVuZ3RoOyBhQ291bnQrKykgewogICAgICAgICAgaWYgKGFOYW1lZFthQ291bnRdLm5hbWUgPT0gbmFtZSkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChhQ291bnQgPT0gYU5hbWVkLmxlbmd0aCkgewogICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDExIik7CiAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrIG5hbWVkOwogICAgICAgIH0KICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGFQYXJhbWV0ZXIgPSBhTmFtZWRbYUNvdW50XTsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGJQYXJhbWV0ZXIgPSBiTmFtZWRbYkNvdW50XTsKICAgICAgICBjb3B5UGFyYW1ldGVyQ292YXJpYW5jZShhLnBhcmVudCwgYVBhcmFtZXRlciwgYlBhcmFtZXRlcik7CiAgICAgICAgRGFydFR5cGUgYVR5cGUgPSBhUGFyYW1ldGVyLnR5cGU7CiAgICAgICAgaWYgKGFTdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgICAgYVR5cGUgPSBhU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGFUeXBlKTsKICAgICAgICB9CiAgICAgICAgRGFydFR5cGUgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICAgICAgaWYgKGJTdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgICAgYlR5cGUgPSBiU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBiVHlwZSA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShiVHlwZSk7CiAgICAgICAgfQogICAgICAgIGlmIChhVHlwZSAhPSBiVHlwZSkgewogICAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXI7CiAgICAgICAgICBmb3IgKGludCBpID0gYVBvc2l0aW9uYWwubGVuZ3RoOyBpIDwgYS5mb3JtYWxzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIGlmIChhLmZvcm1hbHNbaV0ubmFtZSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgcGFyYW1ldGVyID0gYS5mb3JtYWxzW2ldOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5wYXJlbnQgPT0gY2xzICYmIHBhcmFtZXRlci50eXBlID09IG51bGwpIHsKICAgICAgICAgICAgcmVzdWx0ID0gaW5mZXJQYXJhbWV0ZXJUeXBlKAogICAgICAgICAgICAgICAgY2xzLCBhLCBwYXJhbWV0ZXIsIGJUeXBlLCBoYWRUeXBlc0luZmVycmVkLCBoaWVyYXJjaHkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDEyIik7CiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZGVidWc/LmxvZygiSW5mZXJyaW5nIHR5cGVzIGZvciAke2Z1bGxOYW1lKGEpfSBiYXNlZCBvbiAke2Z1bGxOYW1lKGIpfSAiICsKICAgICAgICAocmVzdWx0ID8gInN1Y2NlZWRlZC4iIDogImZhaWxlZC4iKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgYm9vbCBpbmZlckdldHRlclR5cGUoUHJvY2VkdXJlQnVpbGRlciBhLCBCdWlsZGVyIGIpIHsKICAgIGRlYnVnPy5sb2coCiAgICAgICAgIkluZmVycmluZyBnZXR0ZXIgdHlwZXMgZm9yICR7ZnVsbE5hbWUoYSl9IGJhc2VkIG9uICR7ZnVsbE5hbWUoYil9Iik7CiAgICBNZW1iZXIgYlRhcmdldCA9IGIudGFyZ2V0OwogICAgRGFydFR5cGUgYlR5cGU7CiAgICBpZiAoYlRhcmdldCBpcyBGaWVsZCkgewogICAgICBiVHlwZSA9IGJUYXJnZXQudHlwZTsKICAgIH0gZWxzZSBpZiAoYlRhcmdldCBpcyBQcm9jZWR1cmUpIHsKICAgICAgaWYgKGIuaXNTZXR0ZXIpIHsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGJQYXJhbWV0ZXIgPQogICAgICAgICAgICBiVGFyZ2V0LmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLnNpbmdsZTsKICAgICAgICBiVHlwZSA9IGJQYXJhbWV0ZXIudHlwZTsKICAgICAgICBpZiAoIWhhc0V4cGxpY2l0bHlUeXBlZEZvcm1hbFBhcmFtZXRlcihiLCAwKSkgewogICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwICh0eXBlIG1heSBiZSBpbmZlcnJlZCkiKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoYi5pc0dldHRlcikgewogICAgICAgIGJUeXBlID0gYlRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgICAgIGlmICghaGFzRXhwbGljaXRSZXR1cm5UeXBlKGIpKSB7CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKHJldHVybiB0eXBlIG1heSBiZSBpbmZlcnJlZCkiKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIChub3QgYWNjZXNzb3I6ICR7YlRhcmdldC5raW5kfSkiKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAobm90IGZpZWxkL3Byb2NlZHVyZTogJHtiVGFyZ2V0LnJ1bnRpbWVUeXBlfSkiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIGEudGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGUgPT0gYlR5cGU7CiAgfQoKICBib29sIGluZmVyU2V0dGVyVHlwZShQcm9jZWR1cmVCdWlsZGVyIGEsIEJ1aWxkZXIgYikgewogICAgZGVidWc/LmxvZygKICAgICAgICAiSW5mZXJyaW5nIHNldHRlciB0eXBlcyBmb3IgJHtmdWxsTmFtZShhKX0gYmFzZWQgb24gJHtmdWxsTmFtZShiKX0iKTsKICAgIE1lbWJlciBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICBQcm9jZWR1cmUgYVByb2NlZHVyZSA9IGEudGFyZ2V0OwogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBhUGFyYW1ldGVyID0KICAgICAgICBhUHJvY2VkdXJlLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLnNpbmdsZTsKICAgIERhcnRUeXBlIGJUeXBlOwogICAgaWYgKGJUYXJnZXQgaXMgRmllbGQpIHsKICAgICAgYlR5cGUgPSBiVGFyZ2V0LnR5cGU7CiAgICAgIGNvcHlQYXJhbWV0ZXJDb3ZhcmlhbmNlRnJvbUZpZWxkKGEucGFyZW50LCBhUGFyYW1ldGVyLCBiVGFyZ2V0KTsKICAgIH0KICAgIGlmIChiVGFyZ2V0IGlzIFByb2NlZHVyZSkgewogICAgICBpZiAoYi5pc1NldHRlcikgewogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYlBhcmFtZXRlciA9CiAgICAgICAgICAgIGJUYXJnZXQuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuc2luZ2xlOwogICAgICAgIGJUeXBlID0gYlBhcmFtZXRlci50eXBlOwogICAgICAgIGNvcHlQYXJhbWV0ZXJDb3ZhcmlhbmNlKGEucGFyZW50LCBhUGFyYW1ldGVyLCBiUGFyYW1ldGVyKTsKICAgICAgICBpZiAoIWhhc0V4cGxpY2l0bHlUeXBlZEZvcm1hbFBhcmFtZXRlcihiLCAwKSB8fAogICAgICAgICAgICAhaGFzRXhwbGljaXRseVR5cGVkRm9ybWFsUGFyYW1ldGVyKGEsIDApKSB7CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKHR5cGUgbWF5IGJlIGluZmVycmVkKSIpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChiLmlzR2V0dGVyKSB7CiAgICAgICAgYlR5cGUgPSBiVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgICAgaWYgKCFoYXNFeHBsaWNpdFJldHVyblR5cGUoYikpIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAocmV0dXJuIHR5cGUgbWF5IGJlIGluZmVycmVkKSIpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKG5vdCBhY2Nlc3NvcjogJHtiVGFyZ2V0LmtpbmR9KSIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIChub3QgZmllbGQvcHJvY2VkdXJlOiAke2JUYXJnZXQucnVudGltZVR5cGV9KSIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gYVBhcmFtZXRlci50eXBlID09IGJUeXBlOwogIH0KCiAgdm9pZCBjaGVja1ZhbGlkT3ZlcnJpZGUoQnVpbGRlciBhLCBCdWlsZGVyIGIpIHsKICAgIGRlYnVnPy5sb2coCiAgICAgICAgImNoZWNrVmFsaWRPdmVycmlkZSgke2Z1bGxOYW1lKGEpfSwgJHtmdWxsTmFtZShiKX0pICR7YS5ydW50aW1lVHlwZX0iKTsKICAgIGlmIChhIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgaWYgKGluZmVyTWV0aG9kVHlwZXMoYSwgYikpIHJldHVybjsKICAgIH0gZWxzZSBpZiAoYS5pc0ZpZWxkKSB7CiAgICAgIGlmIChpbmZlckZpZWxkVHlwZXMoYSwgYikpIHJldHVybjsKICAgIH0KICAgIE1lbWJlciBhVGFyZ2V0ID0gYS50YXJnZXQ7CiAgICBNZW1iZXIgYlRhcmdldCA9IGIudGFyZ2V0OwogICAgaWYgKGFUYXJnZXQgaXMgUHJvY2VkdXJlICYmICFhVGFyZ2V0LmlzQWNjZXNzb3IgJiYgYlRhcmdldCBpcyBQcm9jZWR1cmUpIHsKICAgICAgaWYgKGhhc1NhbWVTaWduYXR1cmUoYVRhcmdldC5mdW5jdGlvbiwgYlRhcmdldC5mdW5jdGlvbikpIHJldHVybjsKICAgIH0KCiAgICBpZiAoYiBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYi5kZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBoaWVyYXJjaHkub3ZlcnJpZGVDaGVja3MKICAgICAgICAgICAgLmFkZChuZXcgRGVsYXllZE92ZXJyaWRlQ2hlY2soY2xzLCBhLCBiLmRlY2xhcmF0aW9uc1tpXSkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBoaWVyYXJjaHkub3ZlcnJpZGVDaGVja3MuYWRkKG5ldyBEZWxheWVkT3ZlcnJpZGVDaGVjayhjbHMsIGEsIGIpKTsKICAgIH0KICB9CgogIGJvb2wgaW5mZXJGaWVsZFR5cGVzKE1lbWJlckJ1aWxkZXIgYSwgQnVpbGRlciBiKSB7CiAgICBkZWJ1Zz8ubG9nKCJUcnlpbmcgdG8gaW5mZXIgZmllbGQgdHlwZXMgZm9yICR7ZnVsbE5hbWUoYSl9ICIKICAgICAgICAiYmFzZWQgb24gJHtmdWxsTmFtZShiKX0iKTsKICAgIGlmIChiIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgYm9vbCBoYXNTYW1lU2lnbmF0dXJlID0gdHJ1ZTsKICAgICAgTGlzdDxCdWlsZGVyPiBkZWNsYXJhdGlvbnMgPSBiLmRlY2xhcmF0aW9uczsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoIWluZmVyRmllbGRUeXBlcyhhLCBkZWNsYXJhdGlvbnNbaV0pKSB7CiAgICAgICAgICBoYXNTYW1lU2lnbmF0dXJlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBoYXNTYW1lU2lnbmF0dXJlOwogICAgfQogICAgTWVtYmVyIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgIERhcnRUeXBlIGluaGVyaXRlZFR5cGU7CiAgICBpZiAoYlRhcmdldCBpcyBQcm9jZWR1cmUpIHsKICAgICAgaWYgKGJUYXJnZXQuaXNTZXR0ZXIpIHsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9CiAgICAgICAgICAgIGJUYXJnZXQuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuc2luZ2xlOwogICAgICAgIC8vIGluaGVyaXRlZFR5cGUgPSBwYXJhbWV0ZXIudHlwZTsKICAgICAgICBjb3B5RmllbGRDb3ZhcmlhbmNlRnJvbVBhcmFtZXRlcihhLnBhcmVudCwgYS50YXJnZXQsIHBhcmFtZXRlcik7CiAgICAgICAgaWYgKCFoYXNFeHBsaWNpdGx5VHlwZWRGb3JtYWxQYXJhbWV0ZXIoYiwgMCkpIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAodHlwZSBtYXkgYmUgaW5mZXJyZWQpIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGJUYXJnZXQuaXNHZXR0ZXIpIHsKICAgICAgICBpZiAoIWhhc0V4cGxpY2l0UmV0dXJuVHlwZShiKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGluaGVyaXRlZFR5cGUgPSBiVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYlRhcmdldCBpcyBGaWVsZCkgewogICAgICBjb3B5RmllbGRDb3ZhcmlhbmNlKGEucGFyZW50LCBhLnRhcmdldCwgYlRhcmdldCk7CiAgICAgIGluaGVyaXRlZFR5cGUgPSBiVGFyZ2V0LnR5cGU7CiAgICB9CiAgICBpZiAoaW5oZXJpdGVkVHlwZSA9PSBudWxsKSB7CiAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAoaW5oZXJpdGVkVHlwZSA9PSBudWxsKVxuJHtTdGFja1RyYWNlLmN1cnJlbnR9Iik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIENsYXNzQnVpbGRlciBhQ2xzID0gYS5wYXJlbnQ7CiAgICBTdWJzdGl0dXRpb24gYVN1YnN0aXR1dGlvbjsKICAgIGlmIChjbHMgIT0gYUNscykgewogICAgICBhc3NlcnQoc3Vic3RpdHV0aW9ucy5jb250YWluc0tleShhQ2xzLnRhcmdldCksCiAgICAgICAgICAiJHtjbHMuZnVsbE5hbWVGb3JFcnJvcnN9ICR7YUNscy5mdWxsTmFtZUZvckVycm9yc30iKTsKICAgICAgYVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnNbYUNscy50YXJnZXRdOwogICAgICBkZWJ1Zz8ubG9nKCIke2Nscy5mdWxsTmFtZUZvckVycm9yc30gLT4gJHthQ2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAiCiAgICAgICAgICAiJGFTdWJzdGl0dXRpb24iKTsKICAgIH0KICAgIENsYXNzQnVpbGRlciBiQ2xzID0gYi5wYXJlbnQ7CiAgICBTdWJzdGl0dXRpb24gYlN1YnN0aXR1dGlvbjsKICAgIGlmIChjbHMgIT0gYkNscykgewogICAgICBhc3NlcnQoc3Vic3RpdHV0aW9ucy5jb250YWluc0tleShiQ2xzLnRhcmdldCksCiAgICAgICAgICAiJHtjbHMuZnVsbE5hbWVGb3JFcnJvcnN9ICR7YkNscy5mdWxsTmFtZUZvckVycm9yc30iKTsKICAgICAgYlN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnNbYkNscy50YXJnZXRdOwogICAgICBkZWJ1Zz8ubG9nKCIke2Nscy5mdWxsTmFtZUZvckVycm9yc30gLT4gJHtiQ2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAiCiAgICAgICAgICAiJGJTdWJzdGl0dXRpb24iKTsKICAgIH0KICAgIGlmIChiU3Vic3RpdHV0aW9uICE9IG51bGwgJiYgaW5oZXJpdGVkVHlwZSBpcyEgSW1wbGljaXRGaWVsZFR5cGUpIHsKICAgICAgaW5oZXJpdGVkVHlwZSA9IGJTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoaW5oZXJpdGVkVHlwZSk7CiAgICB9CgogICAgRGFydFR5cGUgZGVjbGFyZWRUeXBlID0gYS50YXJnZXQudHlwZTsKICAgIGlmIChhU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgZGVjbGFyZWRUeXBlID0gYVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShkZWNsYXJlZFR5cGUpOwogICAgfQogICAgaWYgKGRlY2xhcmVkVHlwZSA9PSBpbmhlcml0ZWRUeXBlKSByZXR1cm4gdHJ1ZTsKCiAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgaWYgKGEgaXMgRmllbGRCdWlsZGVyKSB7CiAgICAgIGlmIChhLnBhcmVudCA9PSBjbHMgJiYgYS50eXBlID09IG51bGwpIHsKICAgICAgICBpZiAoYS5oYWRUeXBlc0luZmVycmVkKSB7CiAgICAgICAgICByZXBvcnRDYW50SW5mZXJGaWVsZFR5cGUoY2xzLCBhKTsKICAgICAgICAgIGluaGVyaXRlZFR5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgYS5oYWRUeXBlc0luZmVycmVkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGluaGVyaXRlZFR5cGUgaXMgSW1wbGljaXRGaWVsZFR5cGUpIHsKICAgICAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBjbHMubGlicmFyeTsKICAgICAgICAgIChsaWJyYXJ5LmltcGxpY2l0bHlUeXBlZEZpZWxkcyA/Pz0gPEZpZWxkQnVpbGRlcj5bXSkuYWRkKGEpOwogICAgICAgIH0KICAgICAgICBhLnRhcmdldC50eXBlID0gaW5oZXJpdGVkVHlwZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgY29weVBhcmFtZXRlckNvdmFyaWFuY2UoQnVpbGRlciBwYXJlbnQsIFZhcmlhYmxlRGVjbGFyYXRpb24gYVBhcmFtZXRlciwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBiUGFyYW1ldGVyKSB7CiAgICBpZiAocGFyZW50ID09IGNscykgewogICAgICBpZiAoYlBhcmFtZXRlci5pc0NvdmFyaWFudCkgewogICAgICAgIGFQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChiUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNvcHlQYXJhbWV0ZXJDb3ZhcmlhbmNlRnJvbUZpZWxkKAogICAgICBCdWlsZGVyIHBhcmVudCwgVmFyaWFibGVEZWNsYXJhdGlvbiBhUGFyYW1ldGVyLCBGaWVsZCBiRmllbGQpIHsKICAgIGlmIChwYXJlbnQgPT0gY2xzKSB7CiAgICAgIGlmIChiRmllbGQuaXNDb3ZhcmlhbnQpIHsKICAgICAgICBhUGFyYW1ldGVyLmlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoYkZpZWxkLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNvcHlGaWVsZENvdmFyaWFuY2UoQnVpbGRlciBwYXJlbnQsIEZpZWxkIGFGaWVsZCwgRmllbGQgYkZpZWxkKSB7CiAgICBpZiAocGFyZW50ID09IGNscykgewogICAgICBpZiAoYkZpZWxkLmlzQ292YXJpYW50KSB7CiAgICAgICAgYUZpZWxkLmlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoYkZpZWxkLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhRmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY29weUZpZWxkQ292YXJpYW5jZUZyb21QYXJhbWV0ZXIoCiAgICAgIEJ1aWxkZXIgcGFyZW50LCBGaWVsZCBhRmllbGQsIFZhcmlhYmxlRGVjbGFyYXRpb24gYlBhcmFtZXRlcikgewogICAgaWYgKHBhcmVudCA9PSBjbHMpIHsKICAgICAgaWYgKGJQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHsKICAgICAgICBhRmllbGQuaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChiUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhRmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY29weVR5cGVQYXJhbWV0ZXJDb3ZhcmlhbmNlKAogICAgICBCdWlsZGVyIHBhcmVudCwgVHlwZVBhcmFtZXRlciBhUGFyYW1ldGVyLCBUeXBlUGFyYW1ldGVyIGJQYXJhbWV0ZXIpIHsKICAgIGlmIChwYXJlbnQgPT0gY2xzKSB7CiAgICAgIGlmIChiUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlcG9ydEluaGVyaXRhbmNlQ29uZmxpY3QoQnVpbGRlciBhLCBCdWlsZGVyIGIpIHsKICAgIFN0cmluZyBuYW1lID0gYS5mdWxsTmFtZUZvckVycm9yczsKICAgIGlmIChhLnBhcmVudCAhPSBiLnBhcmVudCkgewogICAgICBpZiAoYS5wYXJlbnQgPT0gY2xzKSB7CiAgICAgICAgY2xzLmFkZFByb2JsZW0obWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlciwKICAgICAgICAgICAgYS5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCwKICAgICAgICAgICAgY29udGV4dDogPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICAgICAgICBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2UKICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihiLmZpbGVVcmksIGIuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpCiAgICAgICAgICAgIF0pOwogICAgICB9IGVsc2UgewogICAgICAgIGNscy5hZGRQcm9ibGVtKG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3QsIGNscy5jaGFyT2Zmc2V0LAogICAgICAgICAgICBjbHMuZnVsbE5hbWVGb3JFcnJvcnMubGVuZ3RoLAogICAgICAgICAgICBjb250ZXh0OiBpbmhlcml0ZWRDb25mbGljdENvbnRleHQoYSwgYikpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGEuaXNTdGF0aWMgIT0gYi5pc1N0YXRpYykgewogICAgICBCdWlsZGVyIHN0YXRpY01lbWJlcjsKICAgICAgQnVpbGRlciBpbnN0YW5jZU1lbWJlcjsKICAgICAgaWYgKGEuaXNTdGF0aWMpIHsKICAgICAgICBzdGF0aWNNZW1iZXIgPSBhOwogICAgICAgIGluc3RhbmNlTWVtYmVyID0gYjsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0aWNNZW1iZXIgPSBiOwogICAgICAgIGluc3RhbmNlTWVtYmVyID0gYTsKICAgICAgfQogICAgICBjbHMubGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0LAogICAgICAgICAgc3RhdGljTWVtYmVyLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoLCBzdGF0aWNNZW1iZXIuZmlsZVVyaSwKICAgICAgICAgIGNvbnRleHQ6IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgIG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0Q2F1c2Uud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgaW5zdGFuY2VNZW1iZXIuZmlsZVVyaSwgaW5zdGFuY2VNZW1iZXIuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpCiAgICAgICAgICBdKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoaXMgbWVzc2FnZSBjYW4gYmUgcmVwb3J0ZWQgdHdpY2UgKHdoZW4gbWVyZ2luZyBsb2NhbE1lbWJlcnMgd2l0aAogICAgICAvLyBjbGFzc1NldHRlcnMsIG9yIGxvY2FsU2V0dGVycyB3aXRoIGNsYXNzTWVtYmVycykuIEJ5IGVuc3VyaW5nIHRoYXQKICAgICAgLy8gd2UgYWx3YXlzIHJlcG9ydCB0aGUgb25lIHdpdGggaGlnaGVyIGNoYXJPZmZzZXQgYXMgdGhlIGR1cGxpY2F0ZSwKICAgICAgLy8gdGhlIG1lc3NhZ2UgZHVwbGljYXRpb24gbG9naWMgZW5zdXJlcyB0aGF0IHdlIG9ubHkgcmVwb3J0IHRoaXMKICAgICAgLy8gcHJvYmxlbSBvbmNlLgogICAgICBCdWlsZGVyIGV4aXN0aW5nOwogICAgICBCdWlsZGVyIGR1cGxpY2F0ZTsKICAgICAgYXNzZXJ0KGEuZmlsZVVyaSA9PSBiLmZpbGVVcmkpOwogICAgICBpZiAoYS5jaGFyT2Zmc2V0IDwgYi5jaGFyT2Zmc2V0KSB7CiAgICAgICAgZXhpc3RpbmcgPSBhOwogICAgICAgIGR1cGxpY2F0ZSA9IGI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZXhpc3RpbmcgPSBiOwogICAgICAgIGR1cGxpY2F0ZSA9IGE7CiAgICAgIH0KICAgICAgY2xzLmxpYnJhcnkuYWRkUHJvYmxlbSh0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbi53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgZHVwbGljYXRlLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoLCBkdXBsaWNhdGUuZmlsZVVyaSwKICAgICAgICAgIGNvbnRleHQ6IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2Uud2l0aEFyZ3VtZW50cyhuYW1lKS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICBleGlzdGluZy5maWxlVXJpLCBleGlzdGluZy5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkKICAgICAgICAgIF0pOwogICAgfQogIH0KCiAgLy8vIFdoZW4gbWVyZ2luZyBgYUxpc3RgIGFuZCBgYkxpc3RgLCBbbWVtYmVyXSB3YXMgb25seSBmb3VuZCBpbiBgYUxpc3RgLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVyY2xhc3NgIFttZW1iZXJdIGlzIGRlY2xhcmVkIGluIGN1cnJlbnQKICAvLy8gY2xhc3MsIGFuZCBpc24ndCBvdmVycmlkaW5nIGEgbWV0aG9kIGZyb20gdGhlIHN1cGVyY2xhc3MuCiAgLy8vCiAgLy8vIElmIFttZXJnZUtpbmRdIGlzIGBNZXJnZUtpbmQuaW50ZXJmYWNlc2AsIFttZW1iZXJdIGlzIGlnbm9yZWQgZm9yIG5vdy4KICAvLy8KICAvLy8gSWYgW21lcmdlS2luZF0gaXMgYE1lcmdlS2luZC5zdXBlcnR5cGVzYCwgW21lbWJlcl0gaXNuJ3QKICAvLy8gaW1wbGVtZW50aW5nL292ZXJyaWRpbmcgYW55dGhpbmcuCiAgdm9pZCBoYW5kbGVPbmx5QShCdWlsZGVyIG1lbWJlciwgTWVyZ2VLaW5kIG1lcmdlS2luZCkgewogICAgaWYgKG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnMgfHwKICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXNTZXR0ZXJzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFRPRE8oYWhlKTogRW5hYmxlIHRoaXMgb3B0aW1pemF0aW9uOgogICAgLy8gaWYgKGNscyBpcyBEaWxsQ2xhc3NCdWlsZGVyKSByZXR1cm47CiAgICAvLyBhc3NlcnQobWVyZ2VLaW5kID09IE1lcmdlS2luZC5pbnRlcmZhY2VzIHx8CiAgICAvLyAgICBtZW1iZXIgaXMhIEludGVyZmFjZUNvbmZsaWN0KTsKICAgIGlmICgobWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcmNsYXNzTWVtYmVycyB8fAogICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVyY2xhc3NTZXR0ZXJzKSAmJgogICAgICAgIGlzQWJzdHJhY3QobWVtYmVyKSkgewogICAgICByZWNvcmRBYnN0cmFjdE1lbWJlcihtZW1iZXIpOwogICAgfQogIH0KCiAgLy8vIFdoZW4gbWVyZ2luZyBgYUxpc3RgIGFuZCBgYkxpc3RgLCBbbWVtYmVyXSB3YXMgb25seSBmb3VuZCBpbiBgYkxpc3RgLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVyY2xhc3NgIFttZW1iZXJdIGlzIGJlaW5nIGluaGVyaXRlZCBmcm9tCiAgLy8vIGEgc3VwZXJjbGFzcy4KICAvLy8KICAvLy8gSWYgW21lcmdlS2luZF0gaXMgYE1lcmdlS2luZC5pbnRlcmZhY2VzYCwgW21lbWJlcl0gaXMgaWdub3JlZCBmb3Igbm93LgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVydHlwZXNgLCBbbWVtYmVyXSBpcyBpbXBsaWNpdGx5CiAgLy8vIGFic3RyYWN0LCBhbmQgbm90IGltcGxlbWVudGVkLgogIEJ1aWxkZXIgaGFuZGxlT25seUIoQnVpbGRlciBtZW1iZXIsIE1lcmdlS2luZCBtZXJnZUtpbmQpIHsKICAgIGlmIChtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXNNZW1iZXJzIHx8CiAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5pbnRlcmZhY2VzU2V0dGVycykgewogICAgICByZXR1cm4gbWVtYmVyOwogICAgfQogICAgLy8gVE9ETyhhaGUpOiBFbmFibGUgdGhpcyBvcHRpbWl6YXRpb246CiAgICAvLyBpZiAoY2xzIGlzIERpbGxDbGFzc0J1aWxkZXIpIHJldHVybiBtZW1iZXI7CiAgICBNZW1iZXIgdGFyZ2V0ID0gbWVtYmVyLnRhcmdldDsKICAgIGlmICgobWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcnR5cGVzTWVtYmVycyB8fAogICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVydHlwZXNTZXR0ZXJzKSB8fAogICAgICAgICgobWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcmNsYXNzTWVtYmVycyB8fAogICAgICAgICAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcmNsYXNzU2V0dGVycykgJiYKICAgICAgICAgICAgdGFyZ2V0LmlzQWJzdHJhY3QpKSB7CiAgICAgIGlmIChpc05hbWVWaXNpYmxlSW4odGFyZ2V0Lm5hbWUsIGNscy5saWJyYXJ5KSkgewogICAgICAgIHJlY29yZEFic3RyYWN0TWVtYmVyKG1lbWJlcik7CiAgICAgIH0KICAgIH0KICAgIGlmIChtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVyY2xhc3NNZW1iZXJzICYmCiAgICAgICAgdGFyZ2V0LmVuY2xvc2luZ0NsYXNzICE9IG9iamVjdENsYXNzLmNscyAmJgogICAgICAgIHRhcmdldC5uYW1lID09IG5vU3VjaE1ldGhvZE5hbWUpIHsKICAgICAgaGFzTm9TdWNoTWV0aG9kID0gdHJ1ZTsKICAgIH0KICAgIGlmIChtZXJnZUtpbmQgIT0gTWVyZ2VLaW5kLm1lbWJlcnNXaXRoU2V0dGVycyAmJgogICAgICAgIG1lcmdlS2luZCAhPSBNZXJnZUtpbmQuc2V0dGVyc1dpdGhNZW1iZXJzICYmCiAgICAgICAgbWVtYmVyIGlzIERlbGF5ZWRNZW1iZXIgJiYKICAgICAgICBtZW1iZXIuaXNJbmhlcml0YWJsZUNvbmZsaWN0KSB7CiAgICAgIGhpZXJhcmNoeS5kZWxheWVkTWVtYmVyQ2hlY2tzLmFkZChtZW1iZXIud2l0aFBhcmVudChjbHMpKTsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICB2b2lkIHJlY29yZEFic3RyYWN0TWVtYmVyKEJ1aWxkZXIgbWVtYmVyKSB7CiAgICBhYnN0cmFjdE1lbWJlcnMgPz89IDxCdWlsZGVyPltdOwogICAgaWYgKG1lbWJlciBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIGFic3RyYWN0TWVtYmVycy5hZGRBbGwobWVtYmVyLmRlY2xhcmF0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBhYnN0cmFjdE1lbWJlcnMuYWRkKG1lbWJlcik7CiAgICB9CiAgfQoKICBDbGFzc0hpZXJhcmNoeU5vZGUgYnVpbGQoKSB7CiAgICBhc3NlcnQoIWNscy5pc1BhdGNoKTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBzdXBlcm5vZGU7CiAgICBpZiAob2JqZWN0Q2xhc3MgIT0gY2xzLm9yaWdpbikgewogICAgICBzdXBlcm5vZGUgPSBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKGNscy5zdXBlcnR5cGUpOwogICAgICBpZiAoc3VwZXJub2RlID09IG51bGwpIHsKICAgICAgICBzdXBlcm5vZGUgPSBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21DbGFzcyhvYmplY3RDbGFzcyk7CiAgICAgIH0KICAgICAgYXNzZXJ0KHN1cGVybm9kZSAhPSBudWxsKTsKICAgIH0KCiAgICBTY29wZSBzY29wZSA9IGNscy5zY29wZTsKICAgIGlmIChjbHMuaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgIEJ1aWxkZXIgbWl4aW4gPSBjbHMubWl4ZWRJblR5cGUuZGVjbGFyYXRpb247CiAgICAgIGluZmVyTWl4aW5BcHBsaWNhdGlvbigpOwogICAgICAvLyByZWNvcmRTdXBlcnR5cGUoY2xzLm1peGVkSW5UeXBlKTsKICAgICAgd2hpbGUgKG1peGluLmlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgQ2xhc3NCdWlsZGVyIG5hbWVkID0gbWl4aW47CiAgICAgICAgLy8gcmVjb3JkU3VwZXJ0eXBlKG5hbWVkLm1peGVkSW5UeXBlKTsKICAgICAgICBtaXhpbiA9IG5hbWVkLm1peGVkSW5UeXBlLmRlY2xhcmF0aW9uOwogICAgICB9CiAgICAgIGlmIChtaXhpbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICBzY29wZSA9IG1peGluLnNjb3BlLmNvbXB1dGVNaXhpblNjb3BlKCk7CiAgICAgIH0KICAgIH0KCiAgICAvLy8gTWVtYmVycyAoZXhjbHVkaW5nIHNldHRlcnMpIGRlY2xhcmVkIGluIFtjbHNdLgogICAgTGlzdDxCdWlsZGVyPiBsb2NhbE1lbWJlcnMgPSBuZXcgTGlzdDxCdWlsZGVyPi5mcm9tKHNjb3BlLmxvY2FsLnZhbHVlcykKICAgICAgLi5zb3J0KGNvbXBhcmVEZWNsYXJhdGlvbnMpOwoKICAgIC8vLyBTZXR0ZXJzIGRlY2xhcmVkIGluIFtjbHNdLgogICAgTGlzdDxCdWlsZGVyPiBsb2NhbFNldHRlcnMgPSBuZXcgTGlzdDxCdWlsZGVyPi5mcm9tKHNjb3BlLnNldHRlcnMudmFsdWVzKQogICAgICAuLnNvcnQoY29tcGFyZURlY2xhcmF0aW9ucyk7CgogICAgLy8gQWRkIGltcGxpZWQgc2V0dGVycyBmcm9tIGZpZWxkcyBpbiBbbG9jYWxNZW1iZXJzXS4KICAgIGxvY2FsU2V0dGVycyA9IG1lcmdlQWNjZXNzb3JzKGxvY2FsTWVtYmVycywgbG9jYWxTZXR0ZXJzKTsKCiAgICAvLy8gTWVtYmVycyAoZXhjbHVkaW5nIHNldHRlcnMpIGRlY2xhcmVkIGluIFtjbHNdIG9yIGl0cyBzdXBlcmNsYXNzZXMuIFRoaXMKICAgIC8vLyBpbmNsdWRlcyBzdGF0aWMgbWV0aG9kcyBvZiBbY2xzXSwgYnV0IG5vdCBpdHMgc3VwZXJjbGFzc2VzLgogICAgTGlzdDxCdWlsZGVyPiBjbGFzc01lbWJlcnM7CgogICAgLy8vIFNldHRlcnMgZGVjbGFyZWQgaW4gW2Nsc10gb3IgaXRzIHN1cGVyY2xhc3Nlcy4gVGhpcyBpbmNsdWRlcyBzdGF0aWMKICAgIC8vLyBzZXR0ZXJzIG9mIFtjbHNdLCBidXQgbm90IGl0cyBzdXBlcmNsYXNzZXMuCiAgICBMaXN0PEJ1aWxkZXI+IGNsYXNzU2V0dGVyczsKCiAgICAvLy8gTWVtYmVycyAoZXhjbHVkaW5nIHNldHRlcnMpIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZXMuIFRoaXMgY29udGFpbnMgbm8KICAgIC8vLyBzdGF0aWMgbWVtYmVycy4gSXMgbnVsbCBpZiBubyBpbnRlcmZhY2VzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGlzIGNsYXNzCiAgICAvLy8gb3IgaXRzIHN1cGVyY2xhc3Nlcy4KICAgIExpc3Q8QnVpbGRlcj4gaW50ZXJmYWNlTWVtYmVyczsKCiAgICAvLy8gU2V0dGVycyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2VzLiBUaGlzIGNvbnRhaW5zIG5vIHN0YXRpYyBzZXR0ZXJzLiBJcwogICAgLy8vIG51bGwgaWYgbm8gaW50ZXJmYWNlcyBhcmUgaW1wbGVtZW50ZWQgYnkgdGhpcyBjbGFzcyBvciBpdHMKICAgIC8vLyBzdXBlcmNsYXNzZXMuCiAgICBMaXN0PEJ1aWxkZXI+IGludGVyZmFjZVNldHRlcnM7CgogICAgTGlzdDxUeXBlQnVpbGRlcj4gc3VwZXJjbGFzc2VzOwoKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXM7CgogICAgaW50IG1heEluaGVyaXRhbmNlUGF0aDsKCiAgICBpZiAoc3VwZXJub2RlID09IG51bGwpIHsKICAgICAgLy8gVGhpcyBzaG91bGQgYmUgT2JqZWN0LgogICAgICBjbGFzc01lbWJlcnMgPSBsb2NhbE1lbWJlcnM7CiAgICAgIGNsYXNzU2V0dGVycyA9IGxvY2FsU2V0dGVyczsKICAgICAgc3VwZXJjbGFzc2VzID0gbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KDApOwogICAgICBpbnRlcmZhY2VzID0gbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KDApOwogICAgICBtYXhJbmhlcml0YW5jZVBhdGggPSAwOwogICAgfSBlbHNlIHsKICAgICAgbWF4SW5oZXJpdGFuY2VQYXRoID0gc3VwZXJub2RlLm1heEluaGVyaXRhbmNlUGF0aCArIDE7CiAgICAgIHN1cGVyY2xhc3NlcyA9IG5ldyBMaXN0PFR5cGVCdWlsZGVyPihzdXBlcm5vZGUuc3VwZXJjbGFzc2VzLmxlbmd0aCArIDEpOwogICAgICBzdXBlcmNsYXNzZXMuc2V0UmFuZ2UoMCwgc3VwZXJjbGFzc2VzLmxlbmd0aCAtIDEsCiAgICAgICAgICBzdWJzdFN1cGVydHlwZXMoY2xzLnN1cGVydHlwZSwgc3VwZXJub2RlLnN1cGVyY2xhc3NlcykpOwogICAgICBzdXBlcmNsYXNzZXNbc3VwZXJjbGFzc2VzLmxlbmd0aCAtIDFdID0gcmVjb3JkU3VwZXJ0eXBlKGNscy5zdXBlcnR5cGUpOwoKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gZGlyZWN0SW50ZXJmYWNlcyA9IGlnbm9yZUZ1bmN0aW9uKGNscy5pbnRlcmZhY2VzKTsKICAgICAgaWYgKGNscy5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgICBpZiAoZGlyZWN0SW50ZXJmYWNlcyA9PSBudWxsKSB7CiAgICAgICAgICBkaXJlY3RJbnRlcmZhY2VzID0gPFR5cGVCdWlsZGVyPltjbHMubWl4ZWRJblR5cGVdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkaXJlY3RJbnRlcmZhY2VzID0gPFR5cGVCdWlsZGVyPltjbHMubWl4ZWRJblR5cGVdCiAgICAgICAgICAgIC4uYWRkQWxsKGRpcmVjdEludGVyZmFjZXMpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZGlyZWN0SW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJlY3RJbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICByZWNvcmRTdXBlcnR5cGUoZGlyZWN0SW50ZXJmYWNlc1tpXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHN1cGVyY2xhc3NJbnRlcmZhY2VzID0gc3VwZXJub2RlLmludGVyZmFjZXM7CiAgICAgIGlmIChzdXBlcmNsYXNzSW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgc3VwZXJjbGFzc0ludGVyZmFjZXMgPQogICAgICAgICAgICBzdWJzdFN1cGVydHlwZXMoY2xzLnN1cGVydHlwZSwgc3VwZXJjbGFzc0ludGVyZmFjZXMpOwogICAgICB9CgogICAgICBjbGFzc01lbWJlcnMgPSBtZXJnZSgKICAgICAgICAgIGxvY2FsTWVtYmVycywgc3VwZXJub2RlLmNsYXNzTWVtYmVycywgTWVyZ2VLaW5kLnN1cGVyY2xhc3NNZW1iZXJzKTsKICAgICAgY2xhc3NTZXR0ZXJzID0gbWVyZ2UoCiAgICAgICAgICBsb2NhbFNldHRlcnMsIHN1cGVybm9kZS5jbGFzc1NldHRlcnMsIE1lcmdlS2luZC5zdXBlcmNsYXNzU2V0dGVycyk7CgogICAgICBpZiAoZGlyZWN0SW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgTWVyZ2VSZXN1bHQgcmVzdWx0ID0gbWVyZ2VJbnRlcmZhY2VzKHN1cGVybm9kZSwgZGlyZWN0SW50ZXJmYWNlcyk7CiAgICAgICAgaW50ZXJmYWNlTWVtYmVycyA9IHJlc3VsdC5tZXJnZWRNZW1iZXJzOwogICAgICAgIGludGVyZmFjZVNldHRlcnMgPSByZXN1bHQubWVyZ2VkU2V0dGVyczsKICAgICAgICBpbnRlcmZhY2VzID0gPFR5cGVCdWlsZGVyPltdOwogICAgICAgIGlmIChzdXBlcmNsYXNzSW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVyY2xhc3NJbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGFkZEludGVyZmFjZShpbnRlcmZhY2VzLCBzdXBlcmNsYXNzZXMsIHN1cGVyY2xhc3NJbnRlcmZhY2VzW2ldKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJlY3RJbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBUeXBlQnVpbGRlciBkaXJlY3RJbnRlcmZhY2UgPSBkaXJlY3RJbnRlcmZhY2VzW2ldOwogICAgICAgICAgYWRkSW50ZXJmYWNlKGludGVyZmFjZXMsIHN1cGVyY2xhc3NlcywgZGlyZWN0SW50ZXJmYWNlKTsKICAgICAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBpbnRlcmZhY2VOb2RlID0KICAgICAgICAgICAgICBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKGRpcmVjdEludGVyZmFjZSk7CiAgICAgICAgICBpZiAoaW50ZXJmYWNlTm9kZSAhPSBudWxsKSB7CiAgICAgICAgICAgIGlmIChtYXhJbmhlcml0YW5jZVBhdGggPCBpbnRlcmZhY2VOb2RlLm1heEluaGVyaXRhbmNlUGF0aCArIDEpIHsKICAgICAgICAgICAgICBtYXhJbmhlcml0YW5jZVBhdGggPSBpbnRlcmZhY2VOb2RlLm1heEluaGVyaXRhbmNlUGF0aCArIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gdHlwZXMgPQogICAgICAgICAgICAgICAgc3Vic3RTdXBlcnR5cGVzKGRpcmVjdEludGVyZmFjZSwgaW50ZXJmYWNlTm9kZS5zdXBlcmNsYXNzZXMpOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgYWRkSW50ZXJmYWNlKGludGVyZmFjZXMsIHN1cGVyY2xhc3NlcywgdHlwZXNbaV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaW50ZXJmYWNlTm9kZS5pbnRlcmZhY2VzICE9IG51bGwpIHsKICAgICAgICAgICAgICBMaXN0PFR5cGVCdWlsZGVyPiB0eXBlcyA9CiAgICAgICAgICAgICAgICAgIHN1YnN0U3VwZXJ0eXBlcyhkaXJlY3RJbnRlcmZhY2UsIGludGVyZmFjZU5vZGUuaW50ZXJmYWNlcyk7CiAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgYWRkSW50ZXJmYWNlKGludGVyZmFjZXMsIHN1cGVyY2xhc3NlcywgdHlwZXNbaV0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpbnRlcmZhY2VNZW1iZXJzID0gc3VwZXJub2RlLmludGVyZmFjZU1lbWJlcnM7CiAgICAgICAgaW50ZXJmYWNlU2V0dGVycyA9IHN1cGVybm9kZS5pbnRlcmZhY2VTZXR0ZXJzOwogICAgICAgIGludGVyZmFjZXMgPSBzdXBlcmNsYXNzSW50ZXJmYWNlczsKICAgICAgfQoKICAgICAgLy8gQ2hlY2sgaWYgbG9jYWwgbWVtYmVycyBjb25mbGljdCB3aXRoIGluaGVyaXRlZCBzZXR0ZXJzLiBUaGlzIGNoZWNrIGhhcwogICAgICAvLyBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkIGluIHRoZSBzdXBlcmNsYXNzLCBzbyB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlCiAgICAgIC8vIGxvY2FsIG1lbWJlcnMuIFRoZXNlIGNoZWNrcyBoYXZlIHRvIG9jY3VyIGxhdGUgdG8gZW5hYmxlIGluZmVycmluZwogICAgICAvLyB0eXBlcyBiZXR3ZWVuIHNldHRlcnMgYW5kIGdldHRlcnMsIG9yIGZyb20gYSBzZXR0ZXIgdG8gYSBmaW5hbCBmaWVsZC4KICAgICAgbWVyZ2UobG9jYWxNZW1iZXJzLCBjbGFzc1NldHRlcnMsIE1lcmdlS2luZC5tZW1iZXJzV2l0aFNldHRlcnMpOwoKICAgICAgLy8gQ2hlY2sgaWYgbG9jYWwgc2V0dGVycyBjb25mbGljdCB3aXRoIGluaGVyaXRlZCBtZW1iZXJzLiBBcyBhYm92ZSwgd2UKICAgICAgLy8gb25seSBuZWVkIHRvIGNoZWNrIHRoZSBsb2NhbCBzZXR0ZXJzLgogICAgICBtZXJnZShsb2NhbFNldHRlcnMsIGNsYXNzTWVtYmVycywgTWVyZ2VLaW5kLnNldHRlcnNXaXRoTWVtYmVycyk7CgogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVycyAhPSBudWxsKSB7CiAgICAgICAgaW50ZXJmYWNlTWVtYmVycyA9CiAgICAgICAgICAgIG1lcmdlKGNsYXNzTWVtYmVycywgaW50ZXJmYWNlTWVtYmVycywgTWVyZ2VLaW5kLnN1cGVydHlwZXNNZW1iZXJzKTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgY2xhc3Mgc2V0dGVycyBjb25mbGljdCB3aXRoIG1lbWJlcnMgaW5oZXJpdGVkIGZyb20KICAgICAgICAvLyBpbnRlcmZhY2VzLgogICAgICAgIG1lcmdlKGNsYXNzU2V0dGVycywgaW50ZXJmYWNlTWVtYmVycywgTWVyZ2VLaW5kLnNldHRlcnNXaXRoTWVtYmVycyk7CiAgICAgIH0KICAgICAgaWYgKGludGVyZmFjZVNldHRlcnMgIT0gbnVsbCkgewogICAgICAgIGludGVyZmFjZVNldHRlcnMgPQogICAgICAgICAgICBtZXJnZShjbGFzc1NldHRlcnMsIGludGVyZmFjZVNldHRlcnMsIE1lcmdlS2luZC5zdXBlcnR5cGVzU2V0dGVycyk7CgogICAgICAgIC8vIENoZWNrIGlmIGNsYXNzIG1lbWJlcnMgY29uZmxpY3Qgd2l0aCBzZXR0ZXJzIGluaGVyaXRlZCBmcm9tCiAgICAgICAgLy8gaW50ZXJmYWNlcy4KICAgICAgICBtZXJnZShjbGFzc01lbWJlcnMsIGludGVyZmFjZVNldHRlcnMsIE1lcmdlS2luZC5tZW1iZXJzV2l0aFNldHRlcnMpOwogICAgICB9CiAgICB9CiAgICBpZiAoYWJzdHJhY3RNZW1iZXJzICE9IG51bGwgJiYgIWNscy5pc0Fic3RyYWN0KSB7CiAgICAgIGlmICghaGFzTm9TdWNoTWV0aG9kKSB7CiAgICAgICAgcmVwb3J0TWlzc2luZ01lbWJlcnMoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnN0YWxsTnNtSGFuZGxlcnMoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGUoCiAgICAgIGNscywKICAgICAgY2xhc3NNZW1iZXJzLAogICAgICBjbGFzc1NldHRlcnMsCiAgICAgIGludGVyZmFjZU1lbWJlcnMsCiAgICAgIGludGVyZmFjZVNldHRlcnMsCiAgICAgIHN1cGVyY2xhc3NlcywKICAgICAgaW50ZXJmYWNlcywKICAgICAgbWF4SW5oZXJpdGFuY2VQYXRoLAogICAgICBoYXNOb1N1Y2hNZXRob2QsCiAgICApOwogIH0KCiAgVHlwZUJ1aWxkZXIgcmVjb3JkU3VwZXJ0eXBlKFR5cGVCdWlsZGVyIHN1cGVydHlwZSkgewogICAgaWYgKHN1cGVydHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgIGRlYnVnPy5sb2coIkluICR7dGhpcy5jbHMuZnVsbE5hbWVGb3JFcnJvcnN9ICIKICAgICAgICAgICJyZWNvcmRTdXBlcnR5cGUoJHtzdXBlcnR5cGUuZnVsbE5hbWVGb3JFcnJvcnN9KSIpOwogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gc3VwZXJ0eXBlLmRlY2xhcmF0aW9uOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMhIENsYXNzQnVpbGRlcikgcmV0dXJuIHN1cGVydHlwZTsKICAgICAgQ2xhc3NCdWlsZGVyIGNscyA9IGRlY2xhcmF0aW9uOwogICAgICBpZiAoY2xzLmlzTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgIHJlY29yZFN1cGVydHlwZShjbHMubWl4ZWRJblR5cGUpOwogICAgICB9CiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IGNscy50eXBlVmFyaWFibGVzOwogICAgICBpZiAodHlwZVZhcmlhYmxlcyA9PSBudWxsKSB7CiAgICAgICAgc3Vic3RpdHV0aW9uc1tjbHMudGFyZ2V0XSA9IFN1YnN0aXR1dGlvbi5lbXB0eTsKICAgICAgICBhc3NlcnQoY2xzLnRhcmdldC50eXBlUGFyYW1ldGVycy5pc0VtcHR5KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMgPQogICAgICAgICAgICBzdXBlcnR5cGUuYXJndW1lbnRzID8/IGNvbXB1dGVEZWZhdWx0VHlwZUFyZ3VtZW50cyhzdXBlcnR5cGUpOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IHR5cGVWYXJpYWJsZXMubGVuZ3RoKSB7CiAgICAgICAgICBhcmd1bWVudHMgPSBjb21wdXRlRGVmYXVsdFR5cGVBcmd1bWVudHMoc3VwZXJ0eXBlKTsKICAgICAgICB9CiAgICAgICAgTGlzdDxEYXJ0VHlwZT4ga2VybmVsQXJndW1lbnRzID0gbmV3IExpc3Q8RGFydFR5cGU+KGFyZ3VtZW50cy5sZW5ndGgpOwogICAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4ga2VybmVsUGFyYW1ldGVycyA9CiAgICAgICAgICAgIG5ldyBMaXN0PFR5cGVQYXJhbWV0ZXI+KGFyZ3VtZW50cy5sZW5ndGgpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBrZXJuZWxQYXJhbWV0ZXJzW2ldID0gdHlwZVZhcmlhYmxlc1tpXS50YXJnZXQ7CiAgICAgICAgICBrZXJuZWxBcmd1bWVudHNbaV0gPSBhcmd1bWVudHNbaV0uYnVpbGQodGhpcy5jbHMucGFyZW50KTsKICAgICAgICB9CiAgICAgICAgc3Vic3RpdHV0aW9uc1tjbHMudGFyZ2V0XSA9CiAgICAgICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoa2VybmVsUGFyYW1ldGVycywga2VybmVsQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVydHlwZTsKICB9CgogIExpc3Q8VHlwZUJ1aWxkZXI+IHN1YnN0U3VwZXJ0eXBlcygKICAgICAgTmFtZWRUeXBlQnVpbGRlciBzdXBlcnR5cGUsIExpc3Q8VHlwZUJ1aWxkZXI+IHN1cGVydHlwZXMpIHsKICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBzdXBlcnR5cGUuZGVjbGFyYXRpb247CiAgICBpZiAoZGVjbGFyYXRpb24gaXMhIENsYXNzQnVpbGRlcikgcmV0dXJuIHN1cGVydHlwZXM7CiAgICBDbGFzc0J1aWxkZXIgY2xzID0gZGVjbGFyYXRpb247CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBjbHMudHlwZVZhcmlhYmxlczsKICAgIGlmICh0eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgZGVidWc/LmxvZygiSW4gJHt0aGlzLmNscy5mdWxsTmFtZUZvckVycm9yc30gJHN1cGVydHlwZXMgYXJlbid0IHN1YnN0ZWQiKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdXBlcnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmVjb3JkU3VwZXJ0eXBlKHN1cGVydHlwZXNbaV0pOwogICAgICB9CiAgICAgIHJldHVybiBzdXBlcnR5cGVzOwogICAgfQogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBzdWJzdGl0dXRpb24gPQogICAgICAgIDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj57fTsKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cyA9CiAgICAgICAgc3VwZXJ0eXBlLmFyZ3VtZW50cyA/PyBjb21wdXRlRGVmYXVsdFR5cGVBcmd1bWVudHMoc3VwZXJ0eXBlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7IGkrKykgewogICAgICBzdWJzdGl0dXRpb25bdHlwZVZhcmlhYmxlc1tpXV0gPSBhcmd1bWVudHNbaV07CiAgICB9CiAgICBMaXN0PFR5cGVCdWlsZGVyPiByZXN1bHQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gc3VwZXJ0eXBlc1tpXTsKICAgICAgVHlwZUJ1aWxkZXIgc3Vic3RlZCA9IHJlY29yZFN1cGVydHlwZShzdXBlcnR5cGUuc3Vic3Qoc3Vic3RpdHV0aW9uKSk7CiAgICAgIGlmIChzdXBlcnR5cGUgIT0gc3Vic3RlZCkgewogICAgICAgIGRlYnVnPy5sb2coIkluICR7dGhpcy5jbHMuZnVsbE5hbWVGb3JFcnJvcnN9ICRzdXBlcnR5cGUgLT4gJHN1YnN0ZWQiKTsKICAgICAgICByZXN1bHQgPz89IHN1cGVydHlwZXMudG9MaXN0KCk7CiAgICAgICAgcmVzdWx0W2ldID0gc3Vic3RlZDsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWJ1Zz8ubG9nKCJJbiAke3RoaXMuY2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAkc3VwZXJ0eXBlIGlzbid0IHN1YnN0ZWQiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdCA/PyBzdXBlcnR5cGVzOwogIH0KCiAgTGlzdDxUeXBlQnVpbGRlcj4gY29tcHV0ZURlZmF1bHRUeXBlQXJndW1lbnRzKFR5cGVCdWlsZGVyIHR5cGUpIHsKICAgIENsYXNzQnVpbGRlciBjbHMgPSB0eXBlLmRlY2xhcmF0aW9uOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gcmVzdWx0ID0gbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KGNscy50eXBlVmFyaWFibGVzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgewogICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIHR2ID0gY2xzLnR5cGVWYXJpYWJsZXNbaV07CiAgICAgIHJlc3VsdFtpXSA9IHR2LmRlZmF1bHRUeXBlID8/CiAgICAgICAgICBjbHMubGlicmFyeS5sb2FkZXIuY29tcHV0ZVR5cGVCdWlsZGVyKHR2LnRhcmdldC5kZWZhdWx0VHlwZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgVHlwZUJ1aWxkZXIgYWRkSW50ZXJmYWNlKExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHN1cGVyY2xhc3NlcywgVHlwZUJ1aWxkZXIgdHlwZSkgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKHR5cGUpOwogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpbnQgZGVwdGggPSBub2RlLmRlcHRoOwogICAgaW50IG15RGVwdGggPSBzdXBlcmNsYXNzZXMubGVuZ3RoOwogICAgaWYgKGRlcHRoIDwgbXlEZXB0aCAmJiBzdXBlcmNsYXNzZXNbZGVwdGhdLmRlY2xhcmF0aW9uID09IG5vZGUuY2xzKSB7CiAgICAgIC8vIFRoaXMgaXMgYSBwb3RlbnRpYWwgY29uZmxpY3QuCiAgICAgIHJldHVybiBzdXBlcmNsYXNzZXNbZGVwdGhdOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgLy8gVGhpcyBpcyBhIHF1YWRyYXRpYyBhbGdvcml0aG0sIGJ1dCBub3JtYWxseSwgdGhlIG51bWJlciBvZgogICAgICAgIC8vIGludGVyZmFjZXMgaXMgcmVhbGx5IHNtYWxsLgogICAgICAgIGlmIChpbnRlcmZhY2VzW2ldLmRlY2xhcmF0aW9uID09IHR5cGUuZGVjbGFyYXRpb24pIHsKICAgICAgICAgIC8vIFRoaXMgaXMgYSBwb3RlbnRpYWwgY29uZmxpY3QuCiAgICAgICAgICByZXR1cm4gaW50ZXJmYWNlc1tpXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGludGVyZmFjZXMuYWRkKHR5cGUpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBNZXJnZVJlc3VsdCBtZXJnZUludGVyZmFjZXMoCiAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBzdXBlcm5vZGUsIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMpIHsKICAgIGRlYnVnPy5sb2coIm1lcmdlSW50ZXJmYWNlcygkY2xzICgke3RoaXMuY2xzfSkgIgogICAgICAgICIke3N1cGVybm9kZS5pbnRlcmZhY2VzfSAke2ludGVyZmFjZXN9Iik7CiAgICBMaXN0PExpc3Q8QnVpbGRlcj4+IG1lbWJlckxpc3RzID0KICAgICAgICBuZXcgTGlzdDxMaXN0PEJ1aWxkZXI+PihpbnRlcmZhY2VzLmxlbmd0aCArIDEpOwogICAgTGlzdDxMaXN0PEJ1aWxkZXI+PiBzZXR0ZXJMaXN0cyA9CiAgICAgICAgbmV3IExpc3Q8TGlzdDxCdWlsZGVyPj4oaW50ZXJmYWNlcy5sZW5ndGggKyAxKTsKICAgIG1lbWJlckxpc3RzWzBdID0gc3VwZXJub2RlLmludGVyZmFjZU1lbWJlcnM7CiAgICBzZXR0ZXJMaXN0c1swXSA9IHN1cGVybm9kZS5pbnRlcmZhY2VTZXR0ZXJzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBpbnRlcmZhY2VOb2RlID0KICAgICAgICAgIGhpZXJhcmNoeS5nZXROb2RlRnJvbVR5cGUoaW50ZXJmYWNlc1tpXSk7CiAgICAgIGlmIChpbnRlcmZhY2VOb2RlID09IG51bGwpIHsKICAgICAgICBtZW1iZXJMaXN0c1tpICsgMV0gPSBudWxsOwogICAgICAgIHNldHRlckxpc3RzW2kgKyAxXSA9IG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWVtYmVyTGlzdHNbaSArIDFdID0KICAgICAgICAgICAgaW50ZXJmYWNlTm9kZS5pbnRlcmZhY2VNZW1iZXJzID8/IGludGVyZmFjZU5vZGUuY2xhc3NNZW1iZXJzOwogICAgICAgIHNldHRlckxpc3RzW2kgKyAxXSA9CiAgICAgICAgICAgIGludGVyZmFjZU5vZGUuaW50ZXJmYWNlU2V0dGVycyA/PyBpbnRlcmZhY2VOb2RlLmNsYXNzU2V0dGVyczsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBNZXJnZVJlc3VsdChtZXJnZUxpc3RzKG1lbWJlckxpc3RzLCBNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnMpLAogICAgICAgIG1lcmdlTGlzdHMoc2V0dGVyTGlzdHMsIE1lcmdlS2luZC5pbnRlcmZhY2VzU2V0dGVycykpOwogIH0KCiAgTGlzdDxCdWlsZGVyPiBtZXJnZUxpc3RzKExpc3Q8TGlzdDxCdWlsZGVyPj4gaW5wdXQsIE1lcmdlS2luZCBtZXJnZUtpbmQpIHsKICAgIC8vIFRoaXMgaXMgYSBrLXdheSBtZXJnZSBzb3J0ICh3aGVyZSBrIGlzIGBpbnB1dC5sZW5ndGggKyAxYCkuIFdlIG1lcmdlIHRoZQogICAgLy8gbGlzdHMgcGFpcndpc2UsIHdoaWNoIHJlZHVjZXMgdGhlIG51bWJlciBvZiBsaXN0cyB0byBtZXJnZSBieSBoYWxmIG9uCiAgICAvLyBlYWNoIGl0ZXJhdGlvbi4gQ29uc2VxdWVudGx5LCB3ZSBwZXJmb3JtIE8obG9nIGspIG1lcmdlcy4KICAgIHdoaWxlIChpbnB1dC5sZW5ndGggPiAxKSB7CiAgICAgIExpc3Q8TGlzdDxCdWlsZGVyPj4gb3V0cHV0ID0gPExpc3Q8QnVpbGRlcj4+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoIC0gMTsgaSArPSAyKSB7CiAgICAgICAgTGlzdDxCdWlsZGVyPiBmaXJzdCA9IGlucHV0W2ldOwogICAgICAgIExpc3Q8QnVpbGRlcj4gc2Vjb25kID0gaW5wdXRbaSArIDFdOwogICAgICAgIGlmIChmaXJzdCA9PSBudWxsKSB7CiAgICAgICAgICBvdXRwdXQuYWRkKHNlY29uZCk7CiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmQgPT0gbnVsbCkgewogICAgICAgICAgb3V0cHV0LmFkZChmaXJzdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG91dHB1dC5hZGQobWVyZ2UoZmlyc3QsIHNlY29uZCwgbWVyZ2VLaW5kKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpbnB1dC5sZW5ndGguaXNPZGQpIHsKICAgICAgICBvdXRwdXQuYWRkKGlucHV0Lmxhc3QpOwogICAgICB9CiAgICAgIGlucHV0ID0gb3V0cHV0OwogICAgfQogICAgcmV0dXJuIGlucHV0LnNpbmdsZTsKICB9CgogIC8vLyBNZXJnZSBbYW5kIGNoZWNrXSBhY2Nlc3NvcnMuIFRoaXMgZW50YWlscyBjb3B5aW5nIG11dGFibGUgZmllbGRzIHRvCiAgLy8vIHNldHRlcnMgdG8gc2ltdWxhdGUgaW1wbGllZCBzZXR0ZXJzLCBhbmQgY2hlY2tpbmcgdGhhdCBzZXR0ZXJzIGRvbid0CiAgLy8vIG92ZXJyaWRlIHJlZ3VsYXIgbWV0aG9kcy4KICBMaXN0PEJ1aWxkZXI+IG1lcmdlQWNjZXNzb3JzKExpc3Q8QnVpbGRlcj4gbWVtYmVycywgTGlzdDxCdWlsZGVyPiBzZXR0ZXJzKSB7CiAgICBmaW5hbCBMaXN0PEJ1aWxkZXI+IG1lcmdlZFNldHRlcnMgPSBuZXcgTGlzdDxCdWlsZGVyPi5maWxsZWQoCiAgICAgICAgbWVtYmVycy5sZW5ndGggKyBzZXR0ZXJzLmxlbmd0aCwgbnVsbCwKICAgICAgICBncm93YWJsZTogdHJ1ZSk7CiAgICBpbnQgc3RvcmVJbmRleCA9IDA7CiAgICBpbnQgaSA9IDA7CiAgICBpbnQgaiA9IDA7CiAgICB3aGlsZSAoaSA8IG1lbWJlcnMubGVuZ3RoICYmIGogPCBzZXR0ZXJzLmxlbmd0aCkgewogICAgICBmaW5hbCBCdWlsZGVyIG1lbWJlciA9IG1lbWJlcnNbaV07CiAgICAgIGZpbmFsIEJ1aWxkZXIgc2V0dGVyID0gc2V0dGVyc1tqXTsKICAgICAgZmluYWwgaW50IGNvbXBhcmUgPSBjb21wYXJlRGVjbGFyYXRpb25zKG1lbWJlciwgc2V0dGVyKTsKICAgICAgaWYgKGNvbXBhcmUgPT0gMCkgewogICAgICAgIG1lcmdlZFNldHRlcnNbc3RvcmVJbmRleCsrXSA9IHNldHRlcjsKICAgICAgICBpKys7CiAgICAgICAgaisrOwogICAgICB9IGVsc2UgaWYgKGNvbXBhcmUgPCAwKSB7CiAgICAgICAgaWYgKGltcGxpZXNTZXR0ZXIobWVtYmVyKSkgewogICAgICAgICAgbWVyZ2VkU2V0dGVyc1tzdG9yZUluZGV4KytdID0gbWVtYmVyOwogICAgICAgIH0KICAgICAgICBpKys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWVyZ2VkU2V0dGVyc1tzdG9yZUluZGV4KytdID0gc2V0dGVyc1tqXTsKICAgICAgICBqKys7CiAgICAgIH0KICAgIH0KICAgIHdoaWxlIChpIDwgbWVtYmVycy5sZW5ndGgpIHsKICAgICAgZmluYWwgQnVpbGRlciBtZW1iZXIgPSBtZW1iZXJzW2ldOwogICAgICBpZiAoaW1wbGllc1NldHRlcihtZW1iZXIpKSB7CiAgICAgICAgbWVyZ2VkU2V0dGVyc1tzdG9yZUluZGV4KytdID0gbWVtYmVyOwogICAgICB9CiAgICAgIGkrKzsKICAgIH0KICAgIHdoaWxlIChqIDwgc2V0dGVycy5sZW5ndGgpIHsKICAgICAgbWVyZ2VkU2V0dGVyc1tzdG9yZUluZGV4KytdID0gc2V0dGVyc1tqXTsKICAgICAgaisrOwogICAgfQoKICAgIGlmIChzdG9yZUluZGV4ID09IGopIHsKICAgICAgcmV0dXJuIHNldHRlcnM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbWVyZ2VkU2V0dGVycy4ubGVuZ3RoID0gc3RvcmVJbmRleDsKICAgIH0KICB9CgogIHZvaWQgcmVwb3J0TWlzc2luZ01lbWJlcnMoKSB7CiAgICBNYXA8U3RyaW5nLCBMb2NhdGVkTWVzc2FnZT4gY29udGV4dE1hcCA9IDxTdHJpbmcsIExvY2F0ZWRNZXNzYWdlPnt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdE1lbWJlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGFic3RyYWN0TWVtYmVyc1tpXTsKICAgICAgTWVtYmVyIHRhcmdldCA9IGRlY2xhcmF0aW9uLnRhcmdldDsKICAgICAgaWYgKGlzTmFtZVZpc2libGVJbih0YXJnZXQubmFtZSwgY2xzLmxpYnJhcnkpKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBkZWNsYXJhdGlvbi5mdWxsTmFtZUZvckVycm9yczsKICAgICAgICBTdHJpbmcgcGFyZW50TmFtZSA9IGRlY2xhcmF0aW9uLnBhcmVudC5mdWxsTmFtZUZvckVycm9yczsKICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWUgPQogICAgICAgICAgICBkZWNsYXJhdGlvbi5pc1NldHRlciA/ICIkcGFyZW50TmFtZS4kbmFtZT0iIDogIiRwYXJlbnROYW1lLiRuYW1lIjsKICAgICAgICBjb250ZXh0TWFwW2Rpc3BsYXlOYW1lXSA9IHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UKICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZGlzcGxheU5hbWUpCiAgICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5maWxlVXJpLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb250ZXh0TWFwLmlzRW1wdHkpIHJldHVybjsKICAgIExpc3Q8U3RyaW5nPiBuYW1lcyA9IG5ldyBMaXN0PFN0cmluZz4uZnJvbShjb250ZXh0TWFwLmtleXMpLi5zb3J0KCk7CiAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPltdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewogICAgICBjb250ZXh0LmFkZChjb250ZXh0TWFwW25hbWVzW2ldXSk7CiAgICB9CiAgICBjbHMuYWRkUHJvYmxlbSgKICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbk5vdEFic3RyYWN0LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgIGNscy5mdWxsTmFtZUZvckVycm9ycywgbmFtZXMpLAogICAgICAgIGNscy5jaGFyT2Zmc2V0LAogICAgICAgIGNscy5mdWxsTmFtZUZvckVycm9ycy5sZW5ndGgsCiAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgfQoKICB2b2lkIGluc3RhbGxOc21IYW5kbGVycygpIHsKICAgIC8vIFRPRE8oYWhlKTogSW1wbGVtZW50IHRoaXMuCiAgfQoKICBMaXN0PEJ1aWxkZXI+IG1lcmdlKAogICAgICBMaXN0PEJ1aWxkZXI+IGFMaXN0LCBMaXN0PEJ1aWxkZXI+IGJMaXN0LCBNZXJnZUtpbmQgbWVyZ2VLaW5kKSB7CiAgICBmaW5hbCBMaXN0PEJ1aWxkZXI+IHJlc3VsdCA9IG5ldyBMaXN0PEJ1aWxkZXI+LmZpbGxlZCgKICAgICAgICBhTGlzdC5sZW5ndGggKyBiTGlzdC5sZW5ndGgsIG51bGwsCiAgICAgICAgZ3Jvd2FibGU6IHRydWUpOwogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgaW50IGkgPSAwOwogICAgaW50IGogPSAwOwogICAgd2hpbGUgKGkgPCBhTGlzdC5sZW5ndGggJiYgaiA8IGJMaXN0Lmxlbmd0aCkgewogICAgICBmaW5hbCBCdWlsZGVyIGEgPSBhTGlzdFtpXTsKICAgICAgZmluYWwgQnVpbGRlciBiID0gYkxpc3Rbal07CiAgICAgIGlmICgobWVyZ2VLaW5kID09IE1lcmdlS2luZC5pbnRlcmZhY2VzTWVtYmVycyB8fAogICAgICAgICAgICAgIG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuaW50ZXJmYWNlc1NldHRlcnMpICYmCiAgICAgICAgICBhLmlzU3RhdGljKSB7CiAgICAgICAgaSsrOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChiLmlzU3RhdGljKSB7CiAgICAgICAgaisrOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZpbmFsIGludCBjb21wYXJlID0gY29tcGFyZURlY2xhcmF0aW9ucyhhLCBiKTsKICAgICAgaWYgKGNvbXBhcmUgPT0gMCkgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaGFuZGxlTWVyZ2VDb25mbGljdChhLCBiLCBtZXJnZUtpbmQpOwogICAgICAgIGkrKzsKICAgICAgICBqKys7CiAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA8IDApIHsKICAgICAgICBoYW5kbGVPbmx5QShhLCBtZXJnZUtpbmQpOwogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gYTsKICAgICAgICBpKys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBoYW5kbGVPbmx5QihiLCBtZXJnZUtpbmQpOwogICAgICAgIGorKzsKICAgICAgfQogICAgfQogICAgd2hpbGUgKGkgPCBhTGlzdC5sZW5ndGgpIHsKICAgICAgZmluYWwgQnVpbGRlciBhID0gYUxpc3RbaV07CiAgICAgIGlmICghKG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnMgfHwKICAgICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXNTZXR0ZXJzKSB8fAogICAgICAgICAgIWEuaXNTdGF0aWMpIHsKICAgICAgICBoYW5kbGVPbmx5QShhLCBtZXJnZUtpbmQpOwogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gYTsKICAgICAgfQogICAgICBpKys7CiAgICB9CiAgICB3aGlsZSAoaiA8IGJMaXN0Lmxlbmd0aCkgewogICAgICBmaW5hbCBCdWlsZGVyIGIgPSBiTGlzdFtqXTsKICAgICAgaWYgKCFiLmlzU3RhdGljKSB7CiAgICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBoYW5kbGVPbmx5QihiLCBtZXJnZUtpbmQpOwogICAgICB9CiAgICAgIGorKzsKICAgIH0KICAgIGlmIChhTGlzdC5pc0VtcHR5ICYmIHN0b3JlSW5kZXggPT0gYkxpc3QubGVuZ3RoKSByZXR1cm4gYkxpc3Q7CiAgICBpZiAoYkxpc3QuaXNFbXB0eSAmJiBzdG9yZUluZGV4ID09IGFMaXN0Lmxlbmd0aCkgcmV0dXJuIGFMaXN0OwogICAgcmV0dXJuIHJlc3VsdC4ubGVuZ3RoID0gc3RvcmVJbmRleDsKICB9CgogIHZvaWQgaW5mZXJNaXhpbkFwcGxpY2F0aW9uKCkgewogICAgQ2xhc3Mga2VybmVsQ2xhc3MgPSBjbHMudGFyZ2V0OwogICAgU3VwZXJ0eXBlIGtlcm5lbE1peGVkSW5UeXBlID0ga2VybmVsQ2xhc3MubWl4ZWRJblR5cGU7CiAgICBpZiAoa2VybmVsTWl4ZWRJblR5cGUgPT0gbnVsbCkgcmV0dXJuOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IGtlcm5lbE1peGVkSW5UeXBlLnR5cGVBcmd1bWVudHM7CiAgICBpZiAodHlwZUFyZ3VtZW50cy5pc0VtcHR5IHx8IHR5cGVBcmd1bWVudHMuZmlyc3QgaXMhIFVua25vd25UeXBlKSByZXR1cm47CiAgICBuZXcgQnVpbGRlck1peGluSW5mZXJyZXIoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgaGllcmFyY2h5LmNvcmVUeXBlcywKICAgICAgICAgICAgbmV3IFR5cGVCdWlsZGVyQ29uc3RyYWludEdhdGhlcmVyKAogICAgICAgICAgICAgICAgaGllcmFyY2h5LCBrZXJuZWxNaXhlZEluVHlwZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMpKQogICAgICAgIC5pbmZlcihrZXJuZWxDbGFzcyk7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbmZlcnJlZEFyZ3VtZW50cyA9CiAgICAgICAgbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpbmZlcnJlZEFyZ3VtZW50c1tpXSA9CiAgICAgICAgICBoaWVyYXJjaHkubG9hZGVyLmNvbXB1dGVUeXBlQnVpbGRlcih0eXBlQXJndW1lbnRzW2ldKTsKICAgIH0KICAgIE5hbWVkVHlwZUJ1aWxkZXIgbWl4ZWRJblR5cGUgPSBjbHMubWl4ZWRJblR5cGU7CiAgICBtaXhlZEluVHlwZS5hcmd1bWVudHMgPSBpbmZlcnJlZEFyZ3VtZW50czsKICB9CgogIC8vLyBUaGUgY2xhc3MgRnVuY3Rpb24gZnJvbSBkYXJ0OmNvcmUgaXMgc3VwcG9zZWQgdG8gYmUgaWdub3JlZCB3aGVuIHVzZWQgYXMKICAvLy8gYW4gaW50ZXJmYWNlLgogIExpc3Q8VHlwZUJ1aWxkZXI+IGlnbm9yZUZ1bmN0aW9uKExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMpIHsKICAgIGlmIChpbnRlcmZhY2VzID09IG51bGwpIHJldHVybiBudWxsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIENsYXNzQnVpbGRlciBjbHMgPSBnZXRDbGFzcyhpbnRlcmZhY2VzW2ldKTsKICAgICAgaWYgKGNscyAhPSBudWxsICYmIGNscy50YXJnZXQgPT0gaGllcmFyY2h5LmZ1bmN0aW9uS2VybmVsQ2xhc3MpIHsKICAgICAgICBpZiAoaW50ZXJmYWNlcy5sZW5ndGggPT0gMSkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGludGVyZmFjZXMgPSBpbnRlcmZhY2VzLnRvTGlzdCgpOwogICAgICAgICAgaW50ZXJmYWNlcy5yZW1vdmVBdChpKTsKICAgICAgICAgIHJldHVybiBpZ25vcmVGdW5jdGlvbihpbnRlcmZhY2VzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbnRlcmZhY2VzOwogIH0KfQoKY2xhc3MgQ2xhc3NIaWVyYXJjaHlOb2RlIHsKICAvLy8gVGhlIGNsYXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBoaWVyYXJjaHkgbm9kZS4KICBmaW5hbCBDbGFzc0J1aWxkZXIgY2xzOwoKICAvLy8gQWxsIHRoZSBtZW1iZXJzIG9mIHRoaXMgY2xhc3MgaW5jbHVkaW5nIFtjbGFzc01lbWJlcnNdIG9mIGl0cwogIC8vLyBzdXBlcmNsYXNzZXMuIFRoZSBtZW1iZXJzIGFyZSBzb3J0ZWQgYnkgW2NvbXBhcmVEZWNsYXJhdGlvbnNdLgogIGZpbmFsIExpc3Q8QnVpbGRlcj4gY2xhc3NNZW1iZXJzOwoKICAvLy8gU2ltaWxhciB0byBbY2xhc3NNZW1iZXJzXSBidXQgZm9yIHNldHRlcnMuCiAgZmluYWwgTGlzdDxCdWlsZGVyPiBjbGFzc1NldHRlcnM7CgogIC8vLyBBbGwgdGhlIGludGVyZmFjZSBtZW1iZXJzIG9mIHRoaXMgY2xhc3MgaW5jbHVkaW5nIFtpbnRlcmZhY2VNZW1iZXJzXSBvZgogIC8vLyBpdHMgc3VwZXJ0eXBlcy4gVGhlIG1lbWJlcnMgYXJlIHNvcnRlZCBieSBbY29tcGFyZURlY2xhcmF0aW9uc10uCiAgLy8vCiAgLy8vIEluIGFkZGl0aW9uIHRvIHRoZSBtZW1iZXJzIG9mIFtjbGFzc01lbWJlcnNdIHRoaXMgYWxzbyBjb250YWlucyBtZW1iZXJzCiAgLy8vIGZyb20gaW50ZXJmYWNlcy4KICAvLy8KICAvLy8gVGhpcyBtYXkgYmUgbnVsbCwgaW4gd2hpY2ggY2FzZSBbY2xhc3NNZW1iZXJzXSBpcyB0aGUgaW50ZXJmYWNlIG1lbWJlcnMuCiAgZmluYWwgTGlzdDxCdWlsZGVyPiBpbnRlcmZhY2VNZW1iZXJzOwoKICAvLy8gU2ltaWxhciB0byBbaW50ZXJmYWNlTWVtYmVyc10gYnV0IGZvciBzZXR0ZXJzLgogIC8vLwogIC8vLyBUaGlzIG1heSBiZSBudWxsLCBpbiB3aGljaCBjYXNlIFtjbGFzc1NldHRlcnNdIGlzIHRoZSBpbnRlcmZhY2Ugc2V0dGVycy4KICBmaW5hbCBMaXN0PEJ1aWxkZXI+IGludGVyZmFjZVNldHRlcnM7CgogIC8vLyBBbGwgc3VwZXJjbGFzc2VzIG9mIFtjbHNdIGV4Y2x1ZGluZyBpdHNlbGYuIFRoZSBjbGFzc2VzIGFyZSBzb3J0ZWQgYnkKICAvLy8gZGVwdGggZnJvbSB0aGUgcm9vdCAoT2JqZWN0KSBpbiBhc2NlbmRpbmcgb3JkZXIuCiAgZmluYWwgTGlzdDxUeXBlQnVpbGRlcj4gc3VwZXJjbGFzc2VzOwoKICAvLy8gVGhlIGxpc3Qgb2YgYWxsIGNsYXNzZXMgaW1wbGVtZW50ZWQgYnkgW2Nsc10gYW5kIGl0cyBzdXBlcnR5cGVzIGV4Y2x1ZGluZwogIC8vLyBhbnkgY2xhc3NlcyBmcm9tIFtzdXBlcmNsYXNzZXNdLgogIGZpbmFsIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXM7CgogIC8vLyBUaGUgbG9uZ2VzdCBpbmhlcml0YW5jZSBwYXRoIGZyb20gW2Nsc10gdG8gYE9iamVjdGAuCiAgZmluYWwgaW50IG1heEluaGVyaXRhbmNlUGF0aDsKCiAgaW50IGdldCBkZXB0aCA9PiBzdXBlcmNsYXNzZXMubGVuZ3RoOwoKICBmaW5hbCBib29sIGhhc05vU3VjaE1ldGhvZDsKCiAgQ2xhc3NIaWVyYXJjaHlOb2RlKAogICAgICB0aGlzLmNscywKICAgICAgdGhpcy5jbGFzc01lbWJlcnMsCiAgICAgIHRoaXMuY2xhc3NTZXR0ZXJzLAogICAgICB0aGlzLmludGVyZmFjZU1lbWJlcnMsCiAgICAgIHRoaXMuaW50ZXJmYWNlU2V0dGVycywKICAgICAgdGhpcy5zdXBlcmNsYXNzZXMsCiAgICAgIHRoaXMuaW50ZXJmYWNlcywKICAgICAgdGhpcy5tYXhJbmhlcml0YW5jZVBhdGgsCiAgICAgIHRoaXMuaGFzTm9TdWNoTWV0aG9kKTsKCiAgLy8vIFJldHVybnMgYSBsaXN0IG9mIGFsbCBzdXBlcnR5cGVzIG9mIFtjbHNdLCBpbmNsdWRpbmcgdGhpcyBub2RlLgogIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBjb21wdXRlQWxsU3VwZXJOb2RlcygKICAgICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSkgewogICAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IHJlc3VsdCA9IG5ldyBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4oCiAgICAgICAgMSArIHN1cGVyY2xhc3Nlcy5sZW5ndGggKyBpbnRlcmZhY2VzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVyY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gc3VwZXJjbGFzc2VzW2ldLmRlY2xhcmF0aW9uOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgcmVzdWx0W2ldID0gaGllcmFyY2h5LmdldE5vZGVGcm9tQ2xhc3MoZGVjbGFyYXRpb24pOwogICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGludGVyZmFjZXMubGVuZ3RoOyBpKyspIHsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGludGVyZmFjZXNbaV0uZGVjbGFyYXRpb247CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICByZXN1bHRbaSArIHN1cGVyY2xhc3Nlcy5sZW5ndGhdID0KICAgICAgICAgICAgaGllcmFyY2h5LmdldE5vZGVGcm9tQ2xhc3MoZGVjbGFyYXRpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Li5sYXN0ID0gdGhpczsKICB9CgogIFN0cmluZyB0b1N0cmluZyhbU3RyaW5nQnVmZmVyIHNiXSkgewogICAgc2IgPz89IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiCiAgICAgIC4ud3JpdGUoY2xzLmZ1bGxOYW1lRm9yRXJyb3JzKQogICAgICAuLndyaXRlbG4oIjoiKTsKICAgIGlmIChtYXhJbmhlcml0YW5jZVBhdGggIT0gdGhpcy5kZXB0aCkgewogICAgICBzYgogICAgICAgIC4ud3JpdGUoIiAgTG9uZ2VzdCBwYXRoIHRvIE9iamVjdDogIikKICAgICAgICAuLndyaXRlbG4obWF4SW5oZXJpdGFuY2VQYXRoKTsKICAgIH0KICAgIHNiLi53cml0ZWxuKCIgIHN1cGVyY2xhc3NlczoiKTsKICAgIGludCBkZXB0aCA9IDA7CiAgICBmb3IgKFR5cGVCdWlsZGVyIHN1cGVyY2xhc3MgaW4gc3VwZXJjbGFzc2VzKSB7CiAgICAgIHNiLndyaXRlKCIgICIgKiAoZGVwdGggKyAyKSk7CiAgICAgIGlmIChkZXB0aCAhPSAwKSBzYi53cml0ZSgiLT4gIik7CiAgICAgIHN1cGVyY2xhc3MucHJpbnRPbihzYik7CiAgICAgIHNiLndyaXRlbG4oKTsKICAgICAgZGVwdGgrKzsKICAgIH0KICAgIGlmIChpbnRlcmZhY2VzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoIiAgaW50ZXJmYWNlczoiKTsKICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgIGZvciAoVHlwZUJ1aWxkZXIgaSBpbiBpbnRlcmZhY2VzKSB7CiAgICAgICAgaWYgKCFmaXJzdCkgc2Iud3JpdGUoIiwiKTsKICAgICAgICBzYi53cml0ZSgiICIpOwogICAgICAgIGkucHJpbnRPbihzYik7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICBzYi53cml0ZWxuKCk7CiAgICB9CiAgICBwcmludE1lbWJlcnMoY2xhc3NNZW1iZXJzLCBzYiwgImNsYXNzTWVtYmVycyIpOwogICAgcHJpbnRNZW1iZXJzKGNsYXNzU2V0dGVycywgc2IsICJjbGFzc1NldHRlcnMiKTsKICAgIGlmIChpbnRlcmZhY2VNZW1iZXJzICE9IG51bGwpIHsKICAgICAgcHJpbnRNZW1iZXJzKGludGVyZmFjZU1lbWJlcnMsIHNiLCAiaW50ZXJmYWNlTWVtYmVycyIpOwogICAgfQogICAgaWYgKGludGVyZmFjZVNldHRlcnMgIT0gbnVsbCkgewogICAgICBwcmludE1lbWJlcnMoaW50ZXJmYWNlU2V0dGVycywgc2IsICJpbnRlcmZhY2VTZXR0ZXJzIik7CiAgICB9CiAgICByZXR1cm4gIiRzYiI7CiAgfQoKICB2b2lkIHByaW50TWVtYmVycyhMaXN0PEJ1aWxkZXI+IG1lbWJlcnMsIFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGhlYWRpbmcpIHsKICAgIHNiLndyaXRlKCIgICIpOwogICAgc2Iud3JpdGUoaGVhZGluZyk7CiAgICBzYi53cml0ZWxuKCI6Iik7CiAgICBmb3IgKEJ1aWxkZXIgbWVtYmVyIGluIG1lbWJlcnMpIHsKICAgICAgc2IKICAgICAgICAuLndyaXRlKCIgICAgIikKICAgICAgICAuLndyaXRlKG1lbWJlci5wYXJlbnQuZnVsbE5hbWVGb3JFcnJvcnMpCiAgICAgICAgLi53cml0ZSgiLiIpCiAgICAgICAgLi53cml0ZShtZW1iZXIuZnVsbE5hbWVGb3JFcnJvcnMpCiAgICAgICAgLi53cml0ZWxuKCk7CiAgICB9CiAgfQoKICBCdWlsZGVyIGdldEludGVyZmFjZU1lbWJlcihOYW1lIG5hbWUsIGJvb2wgaXNTZXR0ZXIpIHsKICAgIHJldHVybiBmaW5kTWVtYmVyKAogICAgICAgIG5hbWUsCiAgICAgICAgaXNTZXR0ZXIKICAgICAgICAgICAgPyBpbnRlcmZhY2VTZXR0ZXJzID8/IGNsYXNzU2V0dGVycwogICAgICAgICAgICA6IGludGVyZmFjZU1lbWJlcnMgPz8gY2xhc3NNZW1iZXJzKTsKICB9CgogIEJ1aWxkZXIgZmluZE1lbWJlcihOYW1lIG5hbWUsIExpc3Q8QnVpbGRlcj4gZGVjbGFyYXRpb25zKSB7CiAgICAvLyBUT0RPKGFoZSk6IENvbnNpZGVyIGNyZWF0aW5nIGEgbWFwIG9yIHNjb3BlLiBUaGUgb2J2aW91cyBjaG9pY2Ugd291bGQgYmUKICAgIC8vIHRvIHVzZSBzY29wZXMsIGJ1dCB0aGV5IGRvbid0IGhhbmRsZSBwcml2YXRlIG5hbWVzIGNvcnJlY3RseS4KCiAgICAvLyBUaGlzIGlzIGEgY29weSBvZiBgQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZWAuCiAgICBpbnQgbG93ID0gMCwgaGlnaCA9IGRlY2xhcmF0aW9ucy5sZW5ndGggLSAxOwogICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7CiAgICAgIGludCBtaWQgPSBsb3cgKyAoKGhpZ2ggLSBsb3cpID4+IDEpOwogICAgICBCdWlsZGVyIHBpdm90ID0gZGVjbGFyYXRpb25zW21pZF07CiAgICAgIGludCBjb21wYXJpc29uID0gQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU5hbWVzKG5hbWUsIHBpdm90LnRhcmdldC5uYW1lKTsKICAgICAgaWYgKGNvbXBhcmlzb24gPCAwKSB7CiAgICAgICAgaGlnaCA9IG1pZCAtIDE7CiAgICAgIH0gZWxzZSBpZiAoY29tcGFyaXNvbiA+IDApIHsKICAgICAgICBsb3cgPSBtaWQgKyAxOwogICAgICB9IGVsc2UgaWYgKGhpZ2ggIT0gbWlkKSB7CiAgICAgICAgLy8gRW5zdXJlIHdlIGZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGdpdmVuIG5hbWUuCiAgICAgICAgaGlnaCA9IG1pZDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcGl2b3Q7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQnVpbGRlciBnZXREaXNwYXRjaFRhcmdldChOYW1lIG5hbWUsIGJvb2wgaXNTZXR0ZXIpIHsKICAgIHJldHVybiBmaW5kTWVtYmVyKG5hbWUsIGlzU2V0dGVyID8gY2xhc3NTZXR0ZXJzIDogY2xhc3NNZW1iZXJzKTsKICB9CgogIHN0YXRpYyBpbnQgY29tcGFyZU1heEluaGVyaXRhbmNlUGF0aCgKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGEsIENsYXNzSGllcmFyY2h5Tm9kZSBiKSB7CiAgICByZXR1cm4gYi5tYXhJbmhlcml0YW5jZVBhdGguY29tcGFyZVRvKGEubWF4SW5oZXJpdGFuY2VQYXRoKTsKICB9Cn0KCmNsYXNzIE1lcmdlUmVzdWx0IHsKICBmaW5hbCBMaXN0PEJ1aWxkZXI+IG1lcmdlZE1lbWJlcnM7CgogIGZpbmFsIExpc3Q8QnVpbGRlcj4gbWVyZ2VkU2V0dGVyczsKCiAgTWVyZ2VSZXN1bHQodGhpcy5tZXJnZWRNZW1iZXJzLCB0aGlzLm1lcmdlZFNldHRlcnMpOwp9CgplbnVtIE1lcmdlS2luZCB7CiAgLy8vIE1lcmdpbmcgc3VwZXJjbGFzcyBtZW1iZXJzIHdpdGggdGhlIGN1cnJlbnQgY2xhc3MuCiAgc3VwZXJjbGFzc01lbWJlcnMsCgogIC8vLyBNZXJnaW5nIHN1cGVyY2xhc3Mgc2V0dGVycyB3aXRoIHRoZSBjdXJyZW50IGNsYXNzLgogIHN1cGVyY2xhc3NTZXR0ZXJzLAoKICAvLy8gTWVyZ2luZyBtZW1iZXJzIG9mIHR3byBpbnRlcmZhY2VzLgogIGludGVyZmFjZXNNZW1iZXJzLAoKICAvLy8gTWVyZ2luZyBzZXR0ZXJzIG9mIHR3byBpbnRlcmZhY2VzLgogIGludGVyZmFjZXNTZXR0ZXJzLAoKICAvLy8gTWVyZ2luZyBjbGFzcyBtZW1iZXJzIHdpdGggaW50ZXJmYWNlIG1lbWJlcnMuCiAgc3VwZXJ0eXBlc01lbWJlcnMsCgogIC8vLyBNZXJnaW5nIGNsYXNzIHNldHRlcnMgd2l0aCBpbnRlcmZhY2Ugc2V0dGVycy4KICBzdXBlcnR5cGVzU2V0dGVycywKCiAgLy8vIE1lcmdpbmcgbWVtYmVycyB3aXRoIGluaGVyaXRlZCBzZXR0ZXJzLgogIG1lbWJlcnNXaXRoU2V0dGVycywKCiAgLy8vIE1lcmdpbmcgc2V0dGVycyB3aXRoIGluaGVyaXRlZCBtZW1iZXJzLgogIHNldHRlcnNXaXRoTWVtYmVycywKfQoKTGlzdDxMb2NhdGVkTWVzc2FnZT4gaW5oZXJpdGVkQ29uZmxpY3RDb250ZXh0KEJ1aWxkZXIgYSwgQnVpbGRlciBiKSB7CiAgcmV0dXJuIGluaGVyaXRlZENvbmZsaWN0Q29udGV4dEtlcm5lbCgKICAgICAgYS50YXJnZXQsIGIudGFyZ2V0LCBhLmZ1bGxOYW1lRm9yRXJyb3JzLmxlbmd0aCk7Cn0KCkxpc3Q8TG9jYXRlZE1lc3NhZ2U+IGluaGVyaXRlZENvbmZsaWN0Q29udGV4dEtlcm5lbCgKICAgIE1lbWJlciBhLCBNZW1iZXIgYiwgaW50IGxlbmd0aCkgewogIC8vIFRPRE8oYWhlKTogRGVsZXRlIHRoaXMgbWV0aG9kIHdoZW4gaXQgaXNuJ3QgdXNlZCBieSBbSW50ZXJmYWNlUmVzb2x2ZXJdLgogIGludCBjb21wYXJlID0gIiR7YS5maWxlVXJpfSIuY29tcGFyZVRvKCIke2IuZmlsZVVyaX0iKTsKICBpZiAoY29tcGFyZSA9PSAwKSB7CiAgICBjb21wYXJlID0gYS5maWxlT2Zmc2V0LmNvbXBhcmVUbyhiLmZpbGVPZmZzZXQpOwogIH0KICBNZW1iZXIgZmlyc3Q7CiAgTWVtYmVyIHNlY29uZDsKICBpZiAoY29tcGFyZSA8IDApIHsKICAgIGZpcnN0ID0gYTsKICAgIHNlY29uZCA9IGI7CiAgfSBlbHNlIHsKICAgIGZpcnN0ID0gYjsKICAgIHNlY29uZCA9IGE7CiAgfQogIHJldHVybiA8TG9jYXRlZE1lc3NhZ2U+WwogICAgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMS53aXRoTG9jYXRpb24oCiAgICAgICAgZmlyc3QuZmlsZVVyaSwgZmlyc3QuZmlsZU9mZnNldCwgbGVuZ3RoKSwKICAgIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTIud2l0aExvY2F0aW9uKAogICAgICAgIHNlY29uZC5maWxlVXJpLCBzZWNvbmQuZmlsZU9mZnNldCwgbGVuZ3RoKSwKICBdOwp9CgpjbGFzcyBCdWlsZGVyTWl4aW5JbmZlcnJlciBleHRlbmRzIE1peGluSW5mZXJyZXIgewogIGZpbmFsIENsYXNzQnVpbGRlciBjbHM7CgogIEJ1aWxkZXJNaXhpbkluZmVycmVyKAogICAgICB0aGlzLmNscywgQ29yZVR5cGVzIGNvcmVUeXBlcywgVHlwZUJ1aWxkZXJDb25zdHJhaW50R2F0aGVyZXIgZ2F0aGVyZXIpCiAgICAgIDogc3VwZXIoY29yZVR5cGVzLCBnYXRoZXJlcik7CgogIFN1cGVydHlwZSBhc0luc3RhbnRpYXRpb25PZihTdXBlcnR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0KICAgICAgICBnYXRoZXJlci5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGUuYXNJbnRlcmZhY2VUeXBlLCBzdXBlcmNsYXNzKTsKICAgIGlmIChpbnRlcmZhY2VUeXBlID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBTdXBlcnR5cGUoaW50ZXJmYWNlVHlwZS5jbGFzc05vZGUsIGludGVyZmFjZVR5cGUudHlwZUFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIHJlcG9ydFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBDbGFzcyBrZXJuZWxDbGFzcykgewogICAgaW50IGxlbmd0aCA9IGNscy5pc01peGluQXBwbGljYXRpb24gPyAxIDogY2xzLmZ1bGxOYW1lRm9yRXJyb3JzLmxlbmd0aDsKICAgIGNscy5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNscy5jaGFyT2Zmc2V0LCBsZW5ndGgpOwogIH0KfQoKY2xhc3MgVHlwZUJ1aWxkZXJDb25zdHJhaW50R2F0aGVyZXIgZXh0ZW5kcyBUeXBlQ29uc3RyYWludEdhdGhlcmVyCiAgICB3aXRoIFN0YW5kYXJkQm91bmRzIHsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5OwoKICBUeXBlQnVpbGRlckNvbnN0cmFpbnRHYXRoZXJlcigKICAgICAgdGhpcy5oaWVyYXJjaHksIEl0ZXJhYmxlPFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKQogICAgICA6IHN1cGVyLnN1YmNsYXNzaW5nKHR5cGVQYXJhbWV0ZXJzKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IG9iamVjdENsYXNzID0+IGhpZXJhcmNoeS5vYmplY3RLZXJuZWxDbGFzczsKCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IGZ1bmN0aW9uQ2xhc3MgPT4gaGllcmFyY2h5LmZ1bmN0aW9uS2VybmVsQ2xhc3M7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBmdXR1cmVDbGFzcyA9PiBoaWVyYXJjaHkuZnV0dXJlS2VybmVsQ2xhc3M7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBmdXR1cmVPckNsYXNzID0+IGhpZXJhcmNoeS5mdXR1cmVPcktlcm5lbENsYXNzOwoKICBAb3ZlcnJpZGUKICBDbGFzcyBnZXQgbnVsbENsYXNzID0+IGhpZXJhcmNoeS5udWxsS2VybmVsQ2xhc3M7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IG51bGxUeXBlID0+IG51bGxDbGFzcy5yYXdUeXBlOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBvYmplY3RUeXBlID0+IG9iamVjdENsYXNzLnJhd1R5cGU7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IHJhd0Z1bmN0aW9uVHlwZSA9PiBmdW5jdGlvbkNsYXNzLnJhd1R5cGU7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkTG93ZXJCb3VuZChUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSBsb3dlcikgewogICAgY29uc3RyYWludC5sb3dlciA9IGdldFN0YW5kYXJkVXBwZXJCb3VuZChjb25zdHJhaW50Lmxvd2VyLCBsb3dlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFVwcGVyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgdXBwZXIpIHsKICAgIGNvbnN0cmFpbnQudXBwZXIgPSBnZXRTdGFuZGFyZExvd2VyQm91bmQoY29uc3RyYWludC51cHBlciwgdXBwZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyIGdldEludGVyZmFjZU1lbWJlcihDbGFzcyBjbGFzc18sIE5hbWUgbmFtZSwge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgcmV0dXJuIGhpZXJhcmNoeS5nZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKHR5cGUsIHN1cGVyY2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShoaWVyYXJjaHkuZnV0dXJlS2VybmVsQ2xhc3MsIDxEYXJ0VHlwZT5bdHlwZV0pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YnR5cGVPZihEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIHJldHVybiBoaWVyYXJjaHkudHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoc3VidHlwZSwgc3VwZXJ0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TGVnYWN5TGVhc3RVcHBlckJvdW5kKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUxLCBJbnRlcmZhY2VUeXBlIHR5cGUyKSB7CiAgICByZXR1cm4gaGllcmFyY2h5LmdldEtlcm5lbExlZ2FjeUxlYXN0VXBwZXJCb3VuZCh0eXBlMSwgdHlwZTIpOwogIH0KfQoKY2xhc3MgRGVsYXllZE92ZXJyaWRlQ2hlY2sgewogIGZpbmFsIENsYXNzQnVpbGRlciBjbHM7CiAgZmluYWwgQnVpbGRlciBhOwogIGZpbmFsIEJ1aWxkZXIgYjsKCiAgY29uc3QgRGVsYXllZE92ZXJyaWRlQ2hlY2sodGhpcy5jbHMsIHRoaXMuYSwgdGhpcy5iKTsKCiAgdm9pZCBjaGVjayhDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgICB2b2lkIGNhbGxiYWNrKAogICAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwgTWVtYmVyIGludGVyZmFjZU1lbWJlciwgYm9vbCBpc1NldHRlcikgewogICAgICBjbHMuY2hlY2tPdmVycmlkZSgKICAgICAgICAgIGhpZXJhcmNoeS50eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgaXNTZXR0ZXIsIGNhbGxiYWNrLAogICAgICAgICAgaXNJbnRlcmZhY2VDaGVjazogIWNscy5pc01peGluQXBwbGljYXRpb24pOwogICAgfQoKICAgIEJ1aWxkZXIgYSA9IHRoaXMuYTsKICAgIGRlYnVnPy5sb2coIkRlbGF5ZWQgb3ZlcnJpZGUgY2hlY2sgb2YgJHtmdWxsTmFtZShhKX0gIgogICAgICAgICIke2Z1bGxOYW1lKGIpfSB3cnQuICR7Y2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSIpOwogICAgaWYgKGNscyA9PSBhLnBhcmVudCkgewogICAgICBpZiAoYSBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgICAgaWYgKGEuaXNHZXR0ZXIgJiYgIWhhc0V4cGxpY2l0UmV0dXJuVHlwZShhKSkgewogICAgICAgICAgRGFydFR5cGUgdHlwZTsKICAgICAgICAgIGlmIChiLmlzR2V0dGVyKSB7CiAgICAgICAgICAgIFByb2NlZHVyZSBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgICAgICB9IGVsc2UgaWYgKGIuaXNTZXR0ZXIpIHsKICAgICAgICAgICAgUHJvY2VkdXJlIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgICAgdHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuc2luZ2xlLnR5cGU7CiAgICAgICAgICB9IGVsc2UgaWYgKGIuaXNGaWVsZCkgewogICAgICAgICAgICBGaWVsZCBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LnR5cGU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAgICAgIHR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoCiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICAgICAgICAgICAgICAgIGNscy5jbHMudGhpc1R5cGUsIGIudGFyZ2V0LmVuY2xvc2luZ0NsYXNzKSkKICAgICAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlKTsKICAgICAgICAgICAgaWYgKCFhLmhhZFR5cGVzSW5mZXJyZWQgfHwgIWIuaXNTZXR0ZXIpIHsKICAgICAgICAgICAgICBpbmZlclJldHVyblR5cGUoY2xzLCBhLCB0eXBlLCBhLmhhZFR5cGVzSW5mZXJyZWQsIGhpZXJhcmNoeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGEuaXNTZXR0ZXIgJiYgIWhhc0V4cGxpY2l0bHlUeXBlZEZvcm1hbFBhcmFtZXRlcihhLCAwKSkgewogICAgICAgICAgRGFydFR5cGUgdHlwZTsKICAgICAgICAgIGlmIChiLmlzR2V0dGVyKSB7CiAgICAgICAgICAgIFByb2NlZHVyZSBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgICAgICB9IGVsc2UgaWYgKGIuaXNTZXR0ZXIpIHsKICAgICAgICAgICAgUHJvY2VkdXJlIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgICAgdHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuc2luZ2xlLnR5cGU7CiAgICAgICAgICB9IGVsc2UgaWYgKGIuaXNGaWVsZCkgewogICAgICAgICAgICBGaWVsZCBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LnR5cGU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAgICAgIHR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoCiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICAgICAgICAgICAgICAgIGNscy5jbHMudGhpc1R5cGUsIGIudGFyZ2V0LmVuY2xvc2luZ0NsYXNzKSkKICAgICAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlKTsKICAgICAgICAgICAgaWYgKCFhLmhhZFR5cGVzSW5mZXJyZWQgfHwgIWIuaXNHZXR0ZXIpIHsKICAgICAgICAgICAgICBpbmZlclBhcmFtZXRlclR5cGUoY2xzLCBhLCBhLmZvcm1hbHMuc2luZ2xlLCB0eXBlLAogICAgICAgICAgICAgICAgICBhLmhhZFR5cGVzSW5mZXJyZWQsIGhpZXJhcmNoeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYS5oYWRUeXBlc0luZmVycmVkID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChhIGlzIEZpZWxkQnVpbGRlciAmJiBhLnR5cGUgPT0gbnVsbCkgewogICAgICAgIERhcnRUeXBlIHR5cGU7CiAgICAgICAgaWYgKGIuaXNHZXR0ZXIpIHsKICAgICAgICAgIFByb2NlZHVyZSBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICB0eXBlID0gYlRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgICAgIH0gZWxzZSBpZiAoYi5pc1NldHRlcikgewogICAgICAgICAgUHJvY2VkdXJlIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLnNpbmdsZS50eXBlOwogICAgICAgIH0gZWxzZSBpZiAoYi5pc0ZpZWxkKSB7CiAgICAgICAgICBGaWVsZCBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICB0eXBlID0gYlRhcmdldC50eXBlOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAgICB0eXBlID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKAogICAgICAgICAgICAgICAgICBoaWVyYXJjaHkuZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZigKICAgICAgICAgICAgICAgICAgICAgIGNscy5jbHMudGhpc1R5cGUsIGIudGFyZ2V0LmVuY2xvc2luZ0NsYXNzKSkKICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodHlwZSk7CiAgICAgICAgICBpZiAodHlwZSAhPSBhLnRhcmdldC50eXBlKSB7CiAgICAgICAgICAgIGlmIChhLmhhZFR5cGVzSW5mZXJyZWQpIHsKICAgICAgICAgICAgICBpZiAoYi5pc1NldHRlciAmJgogICAgICAgICAgICAgICAgICAoIWltcGxpZXNTZXR0ZXIoYSkgfHwKICAgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeS50eXBlcy5pc1N1YnR5cGVPZktlcm5lbCh0eXBlLCBhLnRhcmdldC50eXBlKSkpIHsKICAgICAgICAgICAgICAgIHR5cGUgPSBhLnRhcmdldC50eXBlOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXBvcnRDYW50SW5mZXJGaWVsZFR5cGUoY2xzLCBhKTsKICAgICAgICAgICAgICAgIHR5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBkZWJ1Zz8ubG9nKCJJbmZlcnJlZCB0eXBlICR7dHlwZX0gZm9yICR7ZnVsbE5hbWUoYSl9Iik7CiAgICAgICAgICAgIGEudGFyZ2V0LnR5cGUgPSB0eXBlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhLmhhZFR5cGVzSW5mZXJyZWQgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgY2FsbGJhY2soYS50YXJnZXQsIGIudGFyZ2V0LCBhLmlzU2V0dGVyKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIERlbGF5ZWRNZW1iZXIgZXh0ZW5kcyBCdWlsZGVyIHsKICAvLy8gVGhlIGNsYXNzIHdoaWNoIGhhcyBpbmhlcml0ZWQgW2RlY2xhcmF0aW9uc10uCiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NCdWlsZGVyIHBhcmVudDsKCiAgLy8vIENvbmZsaWN0aW5nIGRlY2xhcmF0aW9ucy4KICBmaW5hbCBMaXN0PEJ1aWxkZXI+IGRlY2xhcmF0aW9uczsKCiAgZmluYWwgaXNTZXR0ZXI7CgogIGZpbmFsIGJvb2wgbW9kaWZ5S2VybmVsOwoKICBEZWxheWVkTWVtYmVyKAogICAgICB0aGlzLnBhcmVudCwgdGhpcy5kZWNsYXJhdGlvbnMsIHRoaXMuaXNTZXR0ZXIsIHRoaXMubW9kaWZ5S2VybmVsKTsKCiAgdm9pZCBhZGRBbGxEZWNsYXJhdGlvbnNUbyhMaXN0PEJ1aWxkZXI+IGRlY2xhcmF0aW9ucykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICBhZGREZWNsYXJhdGlvbklmRGlmZmVyZW50KHRoaXMuZGVjbGFyYXRpb25zW2ldLCBkZWNsYXJhdGlvbnMpOwogICAgfQogICAgYXNzZXJ0KGRlY2xhcmF0aW9ucy50b1NldCgpLmxlbmd0aCA9PSBkZWNsYXJhdGlvbnMubGVuZ3RoKTsKICB9CgogIE1lbWJlciBjaGVjayhDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KTsKCiAgRGVsYXllZE1lbWJlciB3aXRoUGFyZW50KENsYXNzQnVpbGRlciBwYXJlbnQpOwoKICBAb3ZlcnJpZGUKICBVcmkgZ2V0IGZpbGVVcmkgPT4gcGFyZW50LmZpbGVVcmk7CgogIEBvdmVycmlkZQogIGludCBnZXQgY2hhck9mZnNldCA9PiBwYXJlbnQuY2hhck9mZnNldDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiBkZWNsYXJhdGlvbnMubWFwKGZ1bGxOYW1lKS5qb2luKCIlIik7CgogIGJvb2wgZ2V0IGlzSW5oZXJpdGFibGVDb25mbGljdCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBNZW1iZXIgZ2V0IHRhcmdldCA9PiBkZWNsYXJhdGlvbnMuZmlyc3QudGFyZ2V0Owp9CgovLy8gVGhpcyByZXByZXNlbnRzIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gaW5oZXJpdGVkIGZyb20gYSBzdXBlcmNsYXNzIHRoYXQKLy8vIGhhcyBjb25mbGljdHMgd2l0aCBtZXRob2RzIGluaGVyaXRlZCBmcm9tIGFuIGludGVyZmFjZS4gVGhlIGNvbmNyZXRlCi8vLyBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBbZGVjbGFyYXRpb25zXS4KY2xhc3MgSW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdCBleHRlbmRzIERlbGF5ZWRNZW1iZXIgewogIE1lbWJlciBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0luaGVyaXRhYmxlQ29uZmxpY3Q7CgogIEluaGVyaXRlZEltcGxlbWVudGF0aW9uSW50ZXJmYWNlQ29uZmxpY3QoQ2xhc3NCdWlsZGVyIHBhcmVudCwKICAgICAgTGlzdDxCdWlsZGVyPiBkZWNsYXJhdGlvbnMsIGJvb2wgaXNTZXR0ZXIsIGJvb2wgbW9kaWZ5S2VybmVsLAogICAgICB7dGhpcy5pc0luaGVyaXRhYmxlQ29uZmxpY3QgPSB0cnVlfSkKICAgICAgOiBzdXBlcihwYXJlbnQsIGRlY2xhcmF0aW9ucywgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiSW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdCgiCiAgICAgICAgIiR7cGFyZW50LmZ1bGxOYW1lRm9yRXJyb3JzfSwgIgogICAgICAgICJbJHtkZWNsYXJhdGlvbnMubWFwKGZ1bGxOYW1lKS5qb2luKCcsICcpfV0pIjsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlciBjaGVjayhDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgICBpZiAoY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQgIT0gbnVsbCkgewogICAgICByZXR1cm4gY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQ7CiAgICB9CiAgICBpZiAoIXBhcmVudC5pc0Fic3RyYWN0KSB7CiAgICAgIEJ1aWxkZXIgY29uY3JldGVJbXBsZW1lbnRhdGlvbiA9IGRlY2xhcmF0aW9ucy5maXJzdDsKICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBkZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBuZXcgRGVsYXllZE92ZXJyaWRlQ2hlY2soCiAgICAgICAgICAgICAgICBwYXJlbnQsIGNvbmNyZXRlSW1wbGVtZW50YXRpb24sIGRlY2xhcmF0aW9uc1tpXSkKICAgICAgICAgICAgLmNoZWNrKGhpZXJhcmNoeSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdCA9CiAgICAgICAgbmV3IEludGVyZmFjZUNvbmZsaWN0KHBhcmVudCwgZGVjbGFyYXRpb25zLCBpc1NldHRlciwgbW9kaWZ5S2VybmVsKQogICAgICAgICAgICAuY2hlY2soaGllcmFyY2h5KTsKICB9CgogIEBvdmVycmlkZQogIERlbGF5ZWRNZW1iZXIgd2l0aFBhcmVudChDbGFzc0J1aWxkZXIgcGFyZW50KSB7CiAgICByZXR1cm4gcGFyZW50ID09IHRoaXMucGFyZW50CiAgICAgICAgPyB0aGlzCiAgICAgICAgOiBuZXcgSW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdCgKICAgICAgICAgICAgcGFyZW50LCBkZWNsYXJhdGlvbnMsIGlzU2V0dGVyLCBtb2RpZnlLZXJuZWwpOwogIH0KCiAgc3RhdGljIEJ1aWxkZXIgY29tYmluZWQoQ2xhc3NCdWlsZGVyIHBhcmVudCwgQnVpbGRlciBjb25jcmV0ZUltcGxlbWVudGF0aW9uLAogICAgICBCdWlsZGVyIG90aGVyLCBib29sIGlzU2V0dGVyLCBib29sIGNyZWF0ZUZvcndhcmRlcnMsCiAgICAgIHtib29sIGlzSW5oZXJpdGFibGVDb25mbGljdCA9IHRydWV9KSB7CiAgICBMaXN0PEJ1aWxkZXI+IGRlY2xhcmF0aW9ucyA9IDxCdWlsZGVyPltdOwogICAgaWYgKGNvbmNyZXRlSW1wbGVtZW50YXRpb24gaXMgRGVsYXllZE1lbWJlcikgewogICAgICBjb25jcmV0ZUltcGxlbWVudGF0aW9uLmFkZEFsbERlY2xhcmF0aW9uc1RvKGRlY2xhcmF0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBkZWNsYXJhdGlvbnMuYWRkKGNvbmNyZXRlSW1wbGVtZW50YXRpb24pOwogICAgfQogICAgaWYgKG90aGVyIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgb3RoZXIuYWRkQWxsRGVjbGFyYXRpb25zVG8oZGVjbGFyYXRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZERlY2xhcmF0aW9uSWZEaWZmZXJlbnQob3RoZXIsIGRlY2xhcmF0aW9ucyk7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PSAxKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbnMuc2luZ2xlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBJbmhlcml0ZWRJbXBsZW1lbnRhdGlvbkludGVyZmFjZUNvbmZsaWN0KAogICAgICAgICAgcGFyZW50LCBkZWNsYXJhdGlvbnMsIGlzU2V0dGVyLCBjcmVhdGVGb3J3YXJkZXJzLAogICAgICAgICAgaXNJbmhlcml0YWJsZUNvbmZsaWN0OiBpc0luaGVyaXRhYmxlQ29uZmxpY3QpOwogICAgfQogIH0KfQoKY2xhc3MgSW50ZXJmYWNlQ29uZmxpY3QgZXh0ZW5kcyBEZWxheWVkTWVtYmVyIHsKICBJbnRlcmZhY2VDb25mbGljdChDbGFzc0J1aWxkZXIgcGFyZW50LCBMaXN0PEJ1aWxkZXI+IGRlY2xhcmF0aW9ucywKICAgICAgYm9vbCBpc1NldHRlciwgYm9vbCBtb2RpZnlLZXJuZWwpCiAgICAgIDogc3VwZXIocGFyZW50LCBkZWNsYXJhdGlvbnMsIGlzU2V0dGVyLCBtb2RpZnlLZXJuZWwpOwoKICBNZW1iZXIgY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiSW50ZXJmYWNlQ29uZmxpY3QoJHtwYXJlbnQuZnVsbE5hbWVGb3JFcnJvcnN9LCAiCiAgICAgICAgIlske2RlY2xhcmF0aW9ucy5tYXAoZnVsbE5hbWUpLmpvaW4oJywgJyl9XSkiOwogIH0KCiAgRGFydFR5cGUgY29tcHV0ZU1lbWJlclR5cGUoCiAgICAgIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHksIERhcnRUeXBlIHRoaXNUeXBlLCBNZW1iZXIgbWVtYmVyKSB7CiAgICBEYXJ0VHlwZSB0eXBlOwogICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgaWYgKG1lbWJlci5pc0dldHRlcikgewogICAgICAgIHR5cGUgPSBtZW1iZXIuZ2V0dGVyVHlwZTsKICAgICAgfSBlbHNlIGlmIChtZW1iZXIuaXNTZXR0ZXIpIHsKICAgICAgICB0eXBlID0gbWVtYmVyLnNldHRlclR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHlwZSA9IG1lbWJlci5mdW5jdGlvbi5mdW5jdGlvblR5cGU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIHR5cGUgPSBtZW1iZXIudHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIHVuaGFuZGxlZCgiJHttZW1iZXIucnVudGltZVR5cGV9IiwgIiRtZW1iZXIiLCBwYXJlbnQuY2hhck9mZnNldCwKICAgICAgICAgIHBhcmVudC5maWxlVXJpKTsKICAgIH0KICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoaGllcmFyY2h5LmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICAgIHRoaXNUeXBlLCBtZW1iZXIuZW5jbG9zaW5nQ2xhc3MpKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlKTsKICB9CgogIGJvb2wgaXNNb3JlU3BlY2lmaWMoQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSwgRGFydFR5cGUgYSwgRGFydFR5cGUgYikgewogICAgaWYgKGlzU2V0dGVyKSB7CiAgICAgIHJldHVybiBoaWVyYXJjaHkudHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoYiwgYSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaGllcmFyY2h5LnR5cGVzLmlzU3VidHlwZU9mS2VybmVsKGEsIGIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyIGNoZWNrKENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkpIHsKICAgIGlmIChjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdDsKICAgIH0KICAgIGlmIChwYXJlbnQubGlicmFyeSBpcyEgU291cmNlTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgcmV0dXJuIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0ID0gZGVjbGFyYXRpb25zLmZpcnN0LnRhcmdldDsKICAgIH0KICAgIERhcnRUeXBlIHRoaXNUeXBlID0gcGFyZW50LmNscy50aGlzVHlwZTsKICAgIEJ1aWxkZXIgYmVzdFNvRmFyOwogICAgRGFydFR5cGUgYmVzdFR5cGVTb0ZhcjsKICAgIGZvciAoaW50IGkgPSBkZWNsYXJhdGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgQnVpbGRlciBjYW5kaWRhdGUgPSBkZWNsYXJhdGlvbnNbaV07CiAgICAgIE1lbWJlciB0YXJnZXQgPSBjYW5kaWRhdGUudGFyZ2V0OwogICAgICBEYXJ0VHlwZSBjYW5kaWRhdGVUeXBlID0gY29tcHV0ZU1lbWJlclR5cGUoaGllcmFyY2h5LCB0aGlzVHlwZSwgdGFyZ2V0KTsKICAgICAgaWYgKGJlc3RTb0ZhciA9PSBudWxsKSB7CiAgICAgICAgYmVzdFNvRmFyID0gY2FuZGlkYXRlOwogICAgICAgIGJlc3RUeXBlU29GYXIgPSBjYW5kaWRhdGVUeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpc01vcmVTcGVjaWZpYyhoaWVyYXJjaHksIGNhbmRpZGF0ZVR5cGUsIGJlc3RUeXBlU29GYXIpKSB7CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlOiAke2Z1bGxOYW1lKGNhbmRpZGF0ZSl9ICIKICAgICAgICAgICAgICAiJHtjYW5kaWRhdGVUeXBlfSA8OiAke2Z1bGxOYW1lKGJlc3RTb0Zhcil9ICR7YmVzdFR5cGVTb0Zhcn0iKTsKICAgICAgICAgIGJlc3RTb0ZhciA9IGNhbmRpZGF0ZTsKICAgICAgICAgIGJlc3RUeXBlU29GYXIgPSBjYW5kaWRhdGVUeXBlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlOiAiCiAgICAgICAgICAgICAgIiR7ZnVsbE5hbWUoY2FuZGlkYXRlKX0gITw6ICR7ZnVsbE5hbWUoYmVzdFNvRmFyKX0iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChiZXN0U29GYXIgIT0gbnVsbCkgewogICAgICBkZWJ1Zz8ubG9nKCJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlIGJlc3RTb0ZhcjogJHtmdWxsTmFtZShiZXN0U29GYXIpfSIpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIEJ1aWxkZXIgY2FuZGlkYXRlID0gZGVjbGFyYXRpb25zW2ldOwogICAgICAgIE1lbWJlciB0YXJnZXQgPSBjYW5kaWRhdGUudGFyZ2V0OwogICAgICAgIERhcnRUeXBlIGNhbmRpZGF0ZVR5cGUgPSBjb21wdXRlTWVtYmVyVHlwZShoaWVyYXJjaHksIHRoaXNUeXBlLCB0YXJnZXQpOwogICAgICAgIGlmICghaXNNb3JlU3BlY2lmaWMoaGllcmFyY2h5LCBiZXN0VHlwZVNvRmFyLCBjYW5kaWRhdGVUeXBlKSkgewogICAgICAgICAgZGVidWc/LmxvZygiQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZTogIgogICAgICAgICAgICAgICIke2Z1bGxOYW1lKGJlc3RTb0Zhcil9ICE8OiAke2Z1bGxOYW1lKGNhbmRpZGF0ZSl9Iik7CgogICAgICAgICAgU3RyaW5nIHVyaSA9ICcke3BhcmVudC5saWJyYXJ5LnVyaX0nOwogICAgICAgICAgaWYgKHVyaSA9PSAnZGFydDpqcycgJiYKICAgICAgICAgICAgICAgICAgcGFyZW50LmZpbGVVcmkucGF0aFNlZ21lbnRzLmxhc3QgPT0gJ2pzX2RhcnQyanMuZGFydCcgfHwKICAgICAgICAgICAgICB1cmkgPT0gJ2RhcnQ6X2ludGVyY2VwdG9ycycgJiYKICAgICAgICAgICAgICAgICAgcGFyZW50LmZpbGVVcmkucGF0aFNlZ21lbnRzLmxhc3QgPT0gJ2pzX251bWJlci5kYXJ0JykgewogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGaXggdGhlIGRhcnQyanMgbGlicmFyaWVzIGFuZCByZW1vdmUgdGhlCiAgICAgICAgICAgIC8vIGFib3ZlIFVSSXMuCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiZXN0U29GYXIgPSBudWxsOwogICAgICAgICAgICBiZXN0VHlwZVNvRmFyID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGJlc3RTb0ZhciA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBuYW1lID0gcGFyZW50LmZ1bGxOYW1lRm9yRXJyb3JzOwogICAgICBpbnQgbGVuZ3RoID0gcGFyZW50LmlzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbiA/IDEgOiBuYW1lLmxlbmd0aDsKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCA9IGRlY2xhcmF0aW9ucy5tYXAoKEJ1aWxkZXIgZCkgewogICAgICAgIHJldHVybiBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2UKICAgICAgICAgICAgLndpdGhMb2NhdGlvbihkLmZpbGVVcmksIGQuY2hhck9mZnNldCwgZC5mdWxsTmFtZUZvckVycm9ycy5sZW5ndGgpOwogICAgICB9KS50b0xpc3QoKTsKCiAgICAgIHBhcmVudC5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgIHBhcmVudC5mdWxsTmFtZUZvckVycm9ycywgZGVjbGFyYXRpb25zLmZpcnN0LmZ1bGxOYW1lRm9yRXJyb3JzKSwKICAgICAgICAgIHBhcmVudC5jaGFyT2Zmc2V0LAogICAgICAgICAgbGVuZ3RoLAogICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZGVidWc/LmxvZygiQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZSBvZiAke2Z1bGxOYW1lRm9yRXJyb3JzfTogIgogICAgICAgICIke2Z1bGxOYW1lKGJlc3RTb0Zhcil9Iik7CgogICAgUHJvY2VkdXJlS2luZCBraW5kID0gUHJvY2VkdXJlS2luZC5NZXRob2Q7CiAgICBpZiAoYmVzdFNvRmFyLmlzRmllbGQgfHwgYmVzdFNvRmFyLmlzU2V0dGVyIHx8IGJlc3RTb0Zhci5pc0dldHRlcikgewogICAgICBraW5kID0gaXNTZXR0ZXIgPyBQcm9jZWR1cmVLaW5kLlNldHRlciA6IFByb2NlZHVyZUtpbmQuR2V0dGVyOwogICAgfSBlbHNlIGlmIChiZXN0U29GYXIudGFyZ2V0IGlzIFByb2NlZHVyZSAmJgogICAgICAgIGJlc3RTb0Zhci50YXJnZXQua2luZCA9PSBQcm9jZWR1cmVLaW5kLk9wZXJhdG9yKSB7CiAgICAgIGtpbmQgPSBQcm9jZWR1cmVLaW5kLk9wZXJhdG9yOwogICAgfQoKICAgIGlmIChtb2RpZnlLZXJuZWwpIHsKICAgICAgZGVidWc/LmxvZygiQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZSBvZiAke2Z1bGxOYW1lRm9yRXJyb3JzfTogIgogICAgICAgICAgIm5ldyBGb3J3YXJkaW5nTm9kZSgkcGFyZW50LCAkYmVzdFNvRmFyLCAkZGVjbGFyYXRpb25zLCAka2luZCkiKTsKICAgICAgTWVtYmVyIHN0dWIgPQogICAgICAgICAgbmV3IEZvcndhcmRpbmdOb2RlKGhpZXJhcmNoeSwgcGFyZW50LCBiZXN0U29GYXIsIGRlY2xhcmF0aW9ucywga2luZCkKICAgICAgICAgICAgICAuZmluYWxpemUoKTsKICAgICAgaWYgKHBhcmVudC5jbHMgPT0gc3R1Yi5lbmNsb3NpbmdDbGFzcykgewogICAgICAgIHBhcmVudC5jbHMuYWRkTWVtYmVyKHN0dWIpOwogICAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBwYXJlbnQubGlicmFyeTsKICAgICAgICBpZiAoYmVzdFNvRmFyLnRhcmdldCBpcyBQcm9jZWR1cmUpIHsKICAgICAgICAgIGxpYnJhcnkuZm9yd2FyZGVyc09yaWdpbnMuLmFkZChzdHViKS4uYWRkKGJlc3RTb0Zhci50YXJnZXQpOwogICAgICAgIH0KICAgICAgICBkZWJ1Zz8ubG9nKCJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlIG9mICR7ZnVsbE5hbWVGb3JFcnJvcnN9OiAiCiAgICAgICAgICAgICJhZGRlZCBzdHViICRzdHViIik7CiAgICAgICAgaWYgKHBhcmVudC5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgICAgIHJldHVybiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdCA9IGJlc3RTb0Zhci50YXJnZXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdCA9IHN0dWI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZGVidWc/LmxvZygKICAgICAgICAiQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZSBvZiAke2Z1bGxOYW1lRm9yRXJyb3JzfTogcGlja2VkIGJlc3RTb0ZhciIpOwogICAgcmV0dXJuIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0ID0gYmVzdFNvRmFyLnRhcmdldDsKICB9CgogIEBvdmVycmlkZQogIERlbGF5ZWRNZW1iZXIgd2l0aFBhcmVudChDbGFzc0J1aWxkZXIgcGFyZW50KSB7CiAgICByZXR1cm4gcGFyZW50ID09IHRoaXMucGFyZW50CiAgICAgICAgPyB0aGlzCiAgICAgICAgOiBuZXcgSW50ZXJmYWNlQ29uZmxpY3QocGFyZW50LCBkZWNsYXJhdGlvbnMsIGlzU2V0dGVyLCBtb2RpZnlLZXJuZWwpOwogIH0KCiAgc3RhdGljIEJ1aWxkZXIgY29tYmluZWQoQ2xhc3NCdWlsZGVyIHBhcmVudCwgQnVpbGRlciBhLCBCdWlsZGVyIGIsCiAgICAgIGJvb2wgaXNTZXR0ZXIsIGJvb2wgY3JlYXRlRm9yd2FyZGVycykgewogICAgTGlzdDxCdWlsZGVyPiBkZWNsYXJhdGlvbnMgPSA8QnVpbGRlcj5bXTsKICAgIGlmIChhIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgYS5hZGRBbGxEZWNsYXJhdGlvbnNUbyhkZWNsYXJhdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgZGVjbGFyYXRpb25zLmFkZChhKTsKICAgIH0KICAgIGlmIChiIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgYi5hZGRBbGxEZWNsYXJhdGlvbnNUbyhkZWNsYXJhdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgYWRkRGVjbGFyYXRpb25JZkRpZmZlcmVudChiLCBkZWNsYXJhdGlvbnMpOwogICAgfQogICAgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT0gMSkgewogICAgICByZXR1cm4gZGVjbGFyYXRpb25zLnNpbmdsZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgSW50ZXJmYWNlQ29uZmxpY3QoCiAgICAgICAgICBwYXJlbnQsIGRlY2xhcmF0aW9ucywgaXNTZXR0ZXIsIGNyZWF0ZUZvcndhcmRlcnMpOwogICAgfQogIH0KfQoKY2xhc3MgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBEZWxheWVkTWVtYmVyIHsKICBBYnN0cmFjdE1lbWJlck92ZXJyaWRpbmdJbXBsZW1lbnRhdGlvbigKICAgICAgQ2xhc3NCdWlsZGVyIHBhcmVudCwKICAgICAgQnVpbGRlciBhYnN0cmFjdE1lbWJlciwKICAgICAgQnVpbGRlciBjb25jcmV0ZUltcGxlbWVudGF0aW9uLAogICAgICBib29sIGlzU2V0dGVyLAogICAgICBib29sIG1vZGlmeUtlcm5lbCkKICAgICAgOiBzdXBlcihwYXJlbnQsIDxCdWlsZGVyPltjb25jcmV0ZUltcGxlbWVudGF0aW9uLCBhYnN0cmFjdE1lbWJlcl0sCiAgICAgICAgICAgIGlzU2V0dGVyLCBtb2RpZnlLZXJuZWwpOwoKICBCdWlsZGVyIGdldCBjb25jcmV0ZUltcGxlbWVudGF0aW9uID0+IGRlY2xhcmF0aW9uc1swXTsKCiAgQnVpbGRlciBnZXQgYWJzdHJhY3RNZW1iZXIgPT4gZGVjbGFyYXRpb25zWzFdOwoKICBNZW1iZXIgY2hlY2soQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSkgewogICAgaWYgKCFwYXJlbnQuaXNBYnN0cmFjdCAmJiAhaGllcmFyY2h5Lm5vZGVzW3BhcmVudC5jbHNdLmhhc05vU3VjaE1ldGhvZCkgewogICAgICBuZXcgRGVsYXllZE92ZXJyaWRlQ2hlY2socGFyZW50LCBjb25jcmV0ZUltcGxlbWVudGF0aW9uLCBhYnN0cmFjdE1lbWJlcikKICAgICAgICAgIC5jaGVjayhoaWVyYXJjaHkpOwogICAgfQoKICAgIFByb2NlZHVyZUtpbmQga2luZCA9IFByb2NlZHVyZUtpbmQuTWV0aG9kOwogICAgaWYgKGFic3RyYWN0TWVtYmVyLmlzU2V0dGVyIHx8IGFic3RyYWN0TWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgIGtpbmQgPSBpc1NldHRlciA/IFByb2NlZHVyZUtpbmQuU2V0dGVyIDogUHJvY2VkdXJlS2luZC5HZXR0ZXI7CiAgICB9CiAgICBpZiAobW9kaWZ5S2VybmVsKSB7CiAgICAgIC8vIFRoaXMgY2FsbCB3aWxsIGFkZCBhIGJvZHkgdG8gdGhlIGFic3RyYWN0IG1ldGhvZCBpZiBuZWVkZWQgZm9yCiAgICAgIC8vIGlzR2VuZXJpY0NvdmFyaWFudEltcGwgY2hlY2tzLgogICAgICBuZXcgRm9yd2FyZGluZ05vZGUoaGllcmFyY2h5LCBwYXJlbnQsIGFic3RyYWN0TWVtYmVyLCBkZWNsYXJhdGlvbnMsIGtpbmQpCiAgICAgICAgICAuZmluYWxpemUoKTsKICAgIH0KICAgIHJldHVybiBhYnN0cmFjdE1lbWJlci50YXJnZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBEZWxheWVkTWVtYmVyIHdpdGhQYXJlbnQoQ2xhc3NCdWlsZGVyIHBhcmVudCkgewogICAgcmV0dXJuIHBhcmVudCA9PSB0aGlzLnBhcmVudAogICAgICAgID8gdGhpcwogICAgICAgIDogbmV3IEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uKHBhcmVudCwgYWJzdHJhY3RNZW1iZXIsCiAgICAgICAgICAgIGNvbmNyZXRlSW1wbGVtZW50YXRpb24sIGlzU2V0dGVyLCBtb2RpZnlLZXJuZWwpOwogIH0KCiAgc3RhdGljIEJ1aWxkZXIgc2VsZWN0QWJzdHJhY3QoQnVpbGRlciBkZWNsYXJhdGlvbikgewogICAgaWYgKGRlY2xhcmF0aW9uIGlzIEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5hYnN0cmFjdE1lbWJlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICAgIH0KICB9CgogIHN0YXRpYyBCdWlsZGVyIHNlbGVjdENvbmNyZXRlKEJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICAgIGlmIChkZWNsYXJhdGlvbiBpcyBBYnN0cmFjdE1lbWJlck92ZXJyaWRpbmdJbXBsZW1lbnRhdGlvbikgewogICAgICByZXR1cm4gZGVjbGFyYXRpb24uY29uY3JldGVJbXBsZW1lbnRhdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICAgIH0KICB9Cn0KCnZvaWQgYWRkRGVjbGFyYXRpb25JZkRpZmZlcmVudCgKICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24sIExpc3Q8QnVpbGRlcj4gZGVjbGFyYXRpb25zKSB7CiAgTWVtYmVyIHRhcmdldCA9IGRlY2xhcmF0aW9uLnRhcmdldDsKICBpZiAodGFyZ2V0IGlzIFByb2NlZHVyZSkgewogICAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gdGFyZ2V0LmZ1bmN0aW9uOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgTWVtYmVyIG90aGVyID0gZGVjbGFyYXRpb25zW2ldLnRhcmdldDsKICAgICAgaWYgKG90aGVyIGlzIFByb2NlZHVyZSkgewogICAgICAgIGlmIChoYXNTYW1lU2lnbmF0dXJlKGZ1bmN0aW9uLCBvdGhlci5mdW5jdGlvbikpIHJldHVybjsKICAgICAgfQogICAgfQogIH0gZWxzZSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZGVjbGFyYXRpb24gPT0gZGVjbGFyYXRpb25zW2ldKSByZXR1cm47CiAgICB9CiAgfQogIGRlY2xhcmF0aW9ucy5hZGQoZGVjbGFyYXRpb24pOwp9CgpTdHJpbmcgZnVsbE5hbWUoQnVpbGRlciBkZWNsYXJhdGlvbikgewogIFN0cmluZyBzdWZmaXggPSBkZWNsYXJhdGlvbi5pc1NldHRlciA/ICI9IiA6ICIiOwogIGlmIChkZWNsYXJhdGlvbiBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICByZXR1cm4gIiR7ZGVjbGFyYXRpb24uZnVsbE5hbWVGb3JFcnJvcnN9JHN1ZmZpeCI7CiAgfQogIEJ1aWxkZXIgcGFyZW50ID0gZGVjbGFyYXRpb24ucGFyZW50OwogIHJldHVybiBwYXJlbnQgPT0gbnVsbAogICAgICA/ICIke2RlY2xhcmF0aW9uLmZ1bGxOYW1lRm9yRXJyb3JzfSRzdWZmaXgiCiAgICAgIDogIiR7cGFyZW50LmZ1bGxOYW1lRm9yRXJyb3JzfS4ke2RlY2xhcmF0aW9uLmZ1bGxOYW1lRm9yRXJyb3JzfSRzdWZmaXgiOwp9CgppbnQgY29tcGFyZU5hbWVkUGFyYW1ldGVycyhWYXJpYWJsZURlY2xhcmF0aW9uIGEsIFZhcmlhYmxlRGVjbGFyYXRpb24gYikgewogIHJldHVybiBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSk7Cn0KCmJvb2wgaXNBYnN0cmFjdChCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgcmV0dXJuIGRlY2xhcmF0aW9uLnRhcmdldC5pc0Fic3RyYWN0IHx8IGRlY2xhcmF0aW9uIGlzIEludGVyZmFjZUNvbmZsaWN0Owp9Cgpib29sIGluZmVyUGFyYW1ldGVyVHlwZSgKICAgIENsYXNzQnVpbGRlciBjbHMsCiAgICBQcm9jZWR1cmVCdWlsZGVyIG1lbWJlciwKICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgcGFyYW1ldGVyLAogICAgRGFydFR5cGUgdHlwZSwKICAgIGJvb2wgaGFkVHlwZXNJbmZlcnJlZCwKICAgIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkpIHsKICBkZWJ1Zz8ubG9nKCJJbmZlcnJlZCB0eXBlICR7dHlwZX0gZm9yICR7cGFyYW1ldGVyfSIpOwogIGlmICh0eXBlID09IHBhcmFtZXRlci50YXJnZXQudHlwZSkgcmV0dXJuIHRydWU7CiAgYm9vbCByZXN1bHQgPSB0cnVlOwogIGlmIChoYWRUeXBlc0luZmVycmVkKSB7CiAgICByZXBvcnRDYW50SW5mZXJQYXJhbWV0ZXJUeXBlKGNscywgbWVtYmVyLCBwYXJhbWV0ZXIsIGhpZXJhcmNoeSk7CiAgICB0eXBlID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgIHJlc3VsdCA9IGZhbHNlOwogIH0KICBwYXJhbWV0ZXIudGFyZ2V0LnR5cGUgPSB0eXBlOwogIG1lbWJlci5oYWRUeXBlc0luZmVycmVkID0gdHJ1ZTsKICByZXR1cm4gcmVzdWx0Owp9Cgp2b2lkIHJlcG9ydENhbnRJbmZlclBhcmFtZXRlclR5cGUoQ2xhc3NCdWlsZGVyIGNscywgTWVtYmVyQnVpbGRlciBtZW1iZXIsCiAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlciwgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSkgewogIFN0cmluZyBuYW1lID0gcGFyYW1ldGVyLm5hbWU7CiAgY2xzLmFkZFByb2JsZW0oCiAgICAgIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgIHBhcmFtZXRlci5jaGFyT2Zmc2V0LAogICAgICBuYW1lLmxlbmd0aCwKICAgICAgd2FzSGFuZGxlZDogdHJ1ZSk7Cn0KCmJvb2wgaW5mZXJSZXR1cm5UeXBlKENsYXNzQnVpbGRlciBjbHMsIFByb2NlZHVyZUJ1aWxkZXIgbWVtYmVyLCBEYXJ0VHlwZSB0eXBlLAogICAgYm9vbCBoYWRUeXBlc0luZmVycmVkLCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgaWYgKHR5cGUgPT0gbWVtYmVyLnRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlKSByZXR1cm4gdHJ1ZTsKICBib29sIHJlc3VsdCA9IHRydWU7CiAgaWYgKGhhZFR5cGVzSW5mZXJyZWQpIHsKICAgIHJlcG9ydENhbnRJbmZlclJldHVyblR5cGUoY2xzLCBtZW1iZXIsIGhpZXJhcmNoeSk7CiAgICB0eXBlID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgIHJlc3VsdCA9IGZhbHNlOwogIH0gZWxzZSB7CiAgICBtZW1iZXIuaGFkVHlwZXNJbmZlcnJlZCA9IHRydWU7CiAgfQogIG1lbWJlci50YXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZSA9IHR5cGU7CiAgcmV0dXJuIHJlc3VsdDsKfQoKdm9pZCByZXBvcnRDYW50SW5mZXJSZXR1cm5UeXBlKAogICAgQ2xhc3NCdWlsZGVyIGNscywgTWVtYmVyQnVpbGRlciBtZW1iZXIsIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkpIHsKICBTdHJpbmcgbmFtZSA9IG1lbWJlci5mdWxsTmFtZUZvckVycm9yczsKICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0OwogIC8vIC8vIFRPRE8oYWhlKTogVGhlIGZvbGxvd2luZyBpcyBmb3IgZGVidWdnaW5nLCBidXQgY291bGQgYmUgY2xlYW5lZCB1cCBhbmQKICAvLyAvLyB1c2VkIHRvIGltcHJvdmUgdGhpcyBlcnJvciBtZXNzYWdlIGluIGdlbmVyYWwuCiAgLy8KICAvLyBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPltdOwogIC8vIENsYXNzSGllcmFyY2h5Tm9kZSBzdXBlcm5vZGUgPSBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKGNscy5zdXBlcnR5cGUpOwogIC8vIC8vIFRPRE8oYWhlKTogV3JvbmcgdGVtcGxhdGUuCiAgLy8gVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcpPiB0ZW1wbGF0ZSA9CiAgLy8gICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2U7CiAgLy8gaWYgKHN1cGVybm9kZSAhPSBudWxsKSB7CiAgLy8gICBEZWNsYXJhdGlvbiBzdXBlck1lbWJlciA9CiAgLy8gICAgICAgc3VwZXJub2RlLmdldEludGVyZmFjZU1lbWJlcihuZXcgTmFtZShuYW1lKSwgZmFsc2UpOwogIC8vICAgaWYgKHN1cGVyTWVtYmVyICE9IG51bGwpIHsKICAvLyAgICAgY29udGV4dC5hZGQodGVtcGxhdGUKICAvLyAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgLy8gICAgICAgICAud2l0aExvY2F0aW9uKAogIC8vICAgICAgICAgICAgIHN1cGVyTWVtYmVyLmZpbGVVcmksIHN1cGVyTWVtYmVyLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKSk7CiAgLy8gICB9CiAgLy8gICBzdXBlck1lbWJlciA9IHN1cGVybm9kZS5nZXRJbnRlcmZhY2VNZW1iZXIobmV3IE5hbWUobmFtZSksIHRydWUpOwogIC8vICAgaWYgKHN1cGVyTWVtYmVyICE9IG51bGwpIHsKICAvLyAgICAgY29udGV4dC5hZGQodGVtcGxhdGUKICAvLyAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgLy8gICAgICAgICAud2l0aExvY2F0aW9uKAogIC8vICAgICAgICAgICAgIHN1cGVyTWVtYmVyLmZpbGVVcmksIHN1cGVyTWVtYmVyLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKSk7CiAgLy8gICB9CiAgLy8gfQogIC8vIExpc3Q8VHlwZUJ1aWxkZXI+IGRpcmVjdEludGVyZmFjZXMgPSBjbHMuaW50ZXJmYWNlczsKICAvLyBmb3IgKGludCBpID0gMDsgaSA8IGRpcmVjdEludGVyZmFjZXMubGVuZ3RoOyBpKyspIHsKICAvLyAgIENsYXNzSGllcmFyY2h5Tm9kZSBzdXBlcm5vZGUgPQogIC8vICAgICAgIGhpZXJhcmNoeS5nZXROb2RlRnJvbVR5cGUoZGlyZWN0SW50ZXJmYWNlc1tpXSk7CiAgLy8gICBpZiAoc3VwZXJub2RlICE9IG51bGwpIHsKICAvLyAgICAgRGVjbGFyYXRpb24gc3VwZXJNZW1iZXIgPQogIC8vICAgICAgICAgc3VwZXJub2RlLmdldEludGVyZmFjZU1lbWJlcihuZXcgTmFtZShuYW1lKSwgZmFsc2UpOwogIC8vICAgICBpZiAoc3VwZXJNZW1iZXIgIT0gbnVsbCkgewogIC8vICAgICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlCiAgLy8gICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgLy8gICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgLy8gICAgICAgICAgICAgICBzdXBlck1lbWJlci5maWxlVXJpLCBzdXBlck1lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkpOwogIC8vICAgICB9CiAgLy8gICAgIHN1cGVyTWVtYmVyID0gc3VwZXJub2RlLmdldEludGVyZmFjZU1lbWJlcihuZXcgTmFtZShuYW1lKSwgdHJ1ZSk7CiAgLy8gICAgIGlmIChzdXBlck1lbWJlciAhPSBudWxsKSB7CiAgLy8gICAgICAgY29udGV4dC5hZGQodGVtcGxhdGUKICAvLyAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAvLyAgICAgICAgICAgLndpdGhMb2NhdGlvbigKICAvLyAgICAgICAgICAgICAgIHN1cGVyTWVtYmVyLmZpbGVVcmksIHN1cGVyTWVtYmVyLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKSk7CiAgLy8gICAgIH0KICAvLyAgIH0KICAvLyB9CiAgY2xzLmFkZFByb2JsZW0oCiAgICAgIHRlbXBsYXRlQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LAogICAgICBuYW1lLmxlbmd0aCwKICAgICAgd2FzSGFuZGxlZDogdHJ1ZSwKICAgICAgY29udGV4dDogY29udGV4dCk7Cn0KCnZvaWQgcmVwb3J0Q2FudEluZmVyRmllbGRUeXBlKENsYXNzQnVpbGRlciBjbHMsIEZpZWxkQnVpbGRlciBtZW1iZXIpIHsKICBTdHJpbmcgbmFtZSA9IG1lbWJlci5mdWxsTmFtZUZvckVycm9yczsKICBjbHMuYWRkUHJvYmxlbSgKICAgICAgdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgbWVtYmVyLmNoYXJPZmZzZXQsCiAgICAgIG5hbWUubGVuZ3RoLAogICAgICB3YXNIYW5kbGVkOiB0cnVlKTsKfQoKQ2xhc3NCdWlsZGVyIGdldENsYXNzKFR5cGVCdWlsZGVyIHR5cGUpIHsKICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gdHlwZS5kZWNsYXJhdGlvbjsKICByZXR1cm4gZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyID8gZGVjbGFyYXRpb24gOiBudWxsOwp9Cgpib29sIGhhc0V4cGxpY2l0UmV0dXJuVHlwZShCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgYXNzZXJ0KGRlY2xhcmF0aW9uIGlzIFByb2NlZHVyZUJ1aWxkZXIgfHwgZGVjbGFyYXRpb24gaXMgRGlsbE1lbWJlckJ1aWxkZXIsCiAgICAgICIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIpOwogIHJldHVybiBkZWNsYXJhdGlvbiBpcyBQcm9jZWR1cmVCdWlsZGVyCiAgICAgID8gZGVjbGFyYXRpb24ucmV0dXJuVHlwZSAhPSBudWxsCiAgICAgIDogdHJ1ZTsKfQoKYm9vbCBoYXNFeHBsaWNpdGx5VHlwZWRGb3JtYWxQYXJhbWV0ZXIoQnVpbGRlciBkZWNsYXJhdGlvbiwgaW50IGluZGV4KSB7CiAgYXNzZXJ0KGRlY2xhcmF0aW9uIGlzIFByb2NlZHVyZUJ1aWxkZXIgfHwgZGVjbGFyYXRpb24gaXMgRGlsbE1lbWJlckJ1aWxkZXIsCiAgICAgICIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIpOwogIHJldHVybiBkZWNsYXJhdGlvbiBpcyBQcm9jZWR1cmVCdWlsZGVyCiAgICAgID8gZGVjbGFyYXRpb24uZm9ybWFsc1tpbmRleF0udHlwZSAhPSBudWxsCiAgICAgIDogdHJ1ZTsKfQqKLQBOTjwBJwEhCQ8SDxYXFRAOExcTFxsdAUIBOAE9AUIBJQEaCRgRO0ApLy8qLz85LycsKiwyAS4BKgEjAUoBOQFFATkhAUIBPgFNATMBHQkRIBsWFhoaGBcVHQEgARpQARQXLgIBMDwCASozAgE6PAIBUD4ESB1MMx9CQkI2NkYPAgEqTwIBODo6M0IdIUMzPAZDMzJPKgYEAUpMTEYSBDs/P0gmJiAyBiYEAUJCSDY6Okg6JiYgMgYmBAEnJx48BAElAgEeTgEiARcBIQEhASMBIwEfAU4BRQEdHQEPAUcwMzc3MB0EATohOgQBOSc3BAE5GUoEATo+HE4GSjklNiU1Px4IBiUyKEEGEQQBKy4oMCovIw9PQiIYJ00IBkkoTCEGMDAEATAyJkhIT0g+AS4rIiNRUSgcCggGAT4/ATIrSUIPDQ9PCAYmBAFJJywSBAFIJysSBAFPNhpINCQbRRYcHBMGKCYNIQYEAT9OJkMvJRomQw9NIQgGFgQCASIpARoBIAEoATcBOQFKAUkoBkkGSyAGTiJLEExKLC4aLD0QBjUnEBkoKEg/TzAcSgEdHyUTI09LKA5BFRNKOjk3DEBGExERODYtKTcMCgEnOC8iCg8BKSkyIytRFSwpPxAOLitRDgwKDwEoLUcPASgtRg8BKChMAUZGAUcfUTIkQCY2FTwODBEfMRUTEzo5E0gVExM6OQwvKTcMCg8GARMEATseFjhEFggVBh4WOEQWCBUGJycQBhEEATkQTR4kMzY1JAoIHwYWJB0kBjAiIBc1QTJKHQYiIBc1QTJKHQYlIiEUBiUyMgFERDU4IRQGHyM1JT8IRTU+CEU1NFEgJRgKCAYBMSE/BjEhPwYgPgYYTyEUBkxMMyEUBgEmNRFPDyMYCAYBMzc3QSgjNQgoIzUIIjQIHDwnSRElGgoIBgFCQgsyNiMYFQguLiQYFQgBPj4WPyszMgonJhoXCjk5QyolNwoqJTcKJDYKHixILSgVDgw7KUgTKBwMCggGTy4TBAE4EE4fFBwcJxgpOiE4OhgKHy0pQRgKD0EWCA1NFAYyBAE4EE4fJSU5FBwcRwYgGCk6IUM4ODoYCh8tKUEYCg9BFggNTRQGJQQBMhBQISocKQYfH09IBgEeOCFHCA1JBgQBNUEkHiQzNjQkCggfBh8cIB4oOitJODoYCiU1NQgjOCQGIU4UBiIgFzVBMkodBiIgFzVBMkodBkhDBgErIUEGNAEZHS8iLC8RGSUKMjZHCicIBhMEAU8oGSQnCC8yCAYEASlGGSAnCCsyCAYEAUkZICMIKy4IBgQBKUYZJCMILy4IBgQBJEwZLzIIBgQBOScgHUonJ0VGEA9IKjYIKxweGBocDxocCD9GJUBQDg1MTEtIFxgZJikWFw8WFwhQQCVRRA4GBAFMBk9ABk0GPyg6NDQOBiwsMyk1OR4kBgQBTAZQFAZNBkclPTQ0FQYsMyM1OTY9IjcmCAY0NCseBjU1IyhBBhMEAS4lIzMNIwYEAR8aIiU8Hz0IIQYBHSIzHysuJC8vCCMxCAYBN0wjASNOIwE6PwFQRCABTDQgAVBPHSQBT0MWJAEkASIBHAEdICMjLy0eDT1POENOAUskKD0RPCgKCCY8MAoIRSofQggBHE4cTgEmSzExJixCTQwKPD1DLTonTUkOJk41QA4BNChON0IQDgwKDzc3KwgBUFBMT0cBTi9HASYbUAFHF00IJhtQAUcXTQgGNh4gDx4IBiMLFBQYGBQSGhcHBAE3KTU+MzomJCoIQyM4Mw8mSzg+Ck8vNzU5RAokRwgGFgQBJUIxOSRBIVE0KAgZBjkuIkc1NQYeMi1MIk8oHQ9RCAYhBAFEKVAuNSRIBhMEATk6PyMcJ0onIg00Ric9KyAKCAYaEQQBH0Q1MiY4JjgxMTIpNCMjIw8dSh1KCAZRPwQBTVBNQR82NigtHR4lHRE3CgggIAgWBhkEAUpLIE9CLxkYDw83KSk/Gi4NDSAlMAoNDzINCAYhKSMuCAsGITALBgEbFg0xBgQBIEk3MCo3NUIdT0UoG0sIBiRJNy0pBhRAKxgmGwQBHiIEARdHOysZGA8PMyIiNzsYDRIIGA0SCDUaRQ0NICMiDQ86DQgGHyI4OxkjIggLBh8iGToICwZDQygEASEkOytETh4RIS9IHSo1NR1BBjQvBAFPFEMpMjJIJhcRLCItCggGFwQCARs2GgFERSQBMSQBTkcGThcGTygBNQZPKAFMNygBUCcmATsgASgBHgEWEBkZHR0ZFx8dAUYxKUQ2NDkpPQgGMjcpKjUIBiAEAScfByUWLAkuJwYkEzMkJx4UDwYeIRkqIxcXFwgUBjQ0JD4GJD4GEgQBThQXFSYJGDEVKhUGBAE5Fw4RLzEEAT5QRQE8MRorKU0cGCMXID8UDxYIBhEEAThFBAEoNEEEAgEUJQElATcCARE5FQE5FQEpFQEpFQE0FQE0FQEuFgEuFgIBRik3AgE1Jk46FjQEEBEVDxALDxAEGzgyODQFAgEzGgEYTSQBQiJILFAEATtMNQQCAUMaKQEhPisBDDgBDDwBDDgBDDwBDDQBDDMBDDcBDD4BDEJHBAEMQkcEAQxNEQQBDExCBAEMLE0EAQw7QgQBDCoyQwQCAR0aExMBOAEwE0gZUDYGARg7ORsjNxkcKjAjKkYiJiEMHjM5RCc2TA4MTRkcKjAjKkYiJiEMHjM5RCc2QTIODAojOBcaKC4hKEQgJB8KHDE3QiUnJiAoUSYXMiwQDkQiDAojCAYBLgQCAS80DB0BICQBEgEbARFJATo5RQZABAExATEBDCUBDCsBDEgBKgEMMgIBT0k7RygBDCQBQEQrPQEMFjcoNwQBDDIxLAYeOzYiQR8IBitMHwQBDDIhDzg7BAFPOy0uM0ENMAYiMA02BiQiDTs8OQYEAgEwRSg9ASgBDBY9NwQBHksTHx0iJCIPLQgiGg1HGwZPLh8EAVEUNg02BgQBDDIxLAYzSAYtFxw5KyhPHx8nD0dKTiEpETNECggGHVE2LSpRSDNEATAiSy1KTRsTHiIMEQoIBh0uSURGUBMBGT9PHRIdEwZFIwEvSUUwOyUGARhHTBRPGy8kNy1HCkkhKUMRNwoIBgEQUD0EAQwyIQ9PBAFFLi4eLA0bBh4sDTIGJCINJD0GBAIBRSobHiYVGUklATkBMQEyTk8dBgEvPkUGGEgoUBcGIgQBDDIhD009BAE3QSkNGgYEATdBMQ0aBgQCASA3Jh0tNC0gQAgGCzQyBgQhAgEnMyY2BCcYMk8CAUsjAgEnTAIBGRYdJhMbJzgyFhpFIBQEICIRAgFKSSASSxwTGQIBTz4+Fho3IBQLJAQsEQIBIE8qIE83BSNOIzMtHiFAIh4iHE0JSSIeIhxNCQc6OSY7ICNCJCAkHk8LSyQgJB5PCwkHElEZExgZAgFHKhJLGRMZAgEqKjsCATJOJSknDgIBSU4lKTAOAgE/cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jbGFzc19oaWVyYXJjaHlfYnVpbGRlci5kYXJ0SHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS9zdGFuZGFyZF9ib3VuZHMuZGFydMAASKQvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgppbXBvcnQgJ2RhcnQ6bWF0aCcgYXMgbWF0aDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVm9pZFR5cGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IFN1YnN0aXR1dGlvbjsKCmltcG9ydCAndHlwZV9zY2hlbWEuZGFydCcgc2hvdyBVbmtub3duVHlwZTsKCmFic3RyYWN0IGNsYXNzIFN0YW5kYXJkQm91bmRzIHsKICBDbGFzcyBnZXQgZnVuY3Rpb25DbGFzczsKICBDbGFzcyBnZXQgZnV0dXJlQ2xhc3M7CiAgQ2xhc3MgZ2V0IGZ1dHVyZU9yQ2xhc3M7CiAgSW50ZXJmYWNlVHlwZSBnZXQgbnVsbFR5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgb2JqZWN0VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCByYXdGdW5jdGlvblR5cGU7CgogIGJvb2wgaXNTdWJ0eXBlT2YoRGFydFR5cGUgc3VidHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlKTsKCiAgSW50ZXJmYWNlVHlwZSBnZXRMZWdhY3lMZWFzdFVwcGVyQm91bmQoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZTEsIEludGVyZmFjZVR5cGUgdHlwZTIpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIHN0YW5kYXJkIGxvd2VyIGJvdW5kIG9mIFt0eXBlMV0gYW5kIFt0eXBlMl0uCiAgLy8vCiAgLy8vIFN0YW5kYXJkIGxvd2VyIGJvdW5kIGlzIGEgbG93ZXIgYm91bmQgZnVuY3Rpb24gdGhhdCBpbXBvc2VzIGFuCiAgLy8vIG9yZGVyaW5nIG9uIHRoZSB0b3AgdHlwZXMgYHZvaWRgLCBgZHluYW1pY2AsIGFuZCBgb2JqZWN0YC4gIFRoaXMgZnVuY3Rpb24KICAvLy8gYWRkaXRpb25hbGx5IGhhbmRsZXMgdGhlIHVua25vd24gdHlwZSB0aGF0IGFwcGVhcnMgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgogIERhcnRUeXBlIGdldFN0YW5kYXJkTG93ZXJCb3VuZChEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIC8vIEZvciBhbGwgdHlwZXMgVCwgU0xCKFQsVCkgPSBULiAgTm90ZSB0aGF0IHdlIGRvbid0IHRlc3QgZm9yIGVxdWFsaXR5CiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbWFrZSB0aGUgYWxnb3JpdGhtIHF1YWRyYXRpYy4gIFRoaXMgaXMgb2sKICAgIC8vIGJlY2F1c2UgdGhlIGNoZWNrIGlzIG5vdCBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzOyBpdCdzIGp1c3QgYSBzcGVlZAogICAgLy8gb3B0aW1pemF0aW9uLgogICAgaWYgKGlkZW50aWNhbCh0eXBlMSwgdHlwZTIpKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KCiAgICAvLyBGb3IgYW55IHR5cGUgVCwgU0xCKD8sIFQpID0gU0xCKFQsID8pID0gVC4KICAgIGlmICh0eXBlMSBpcyBVbmtub3duVHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CiAgICBpZiAodHlwZTIgaXMgVW5rbm93blR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQoKICAgIC8vIFNMQih2b2lkLCBUKSA9IFNMQihULCB2b2lkKSA9IFQuCiAgICBpZiAodHlwZTEgaXMgVm9pZFR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUyOwogICAgfQogICAgaWYgKHR5cGUyIGlzIFZvaWRUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KCiAgICAvLyBTTEIoZHluYW1pYywgVCkgPSBTTEIoVCwgZHluYW1pYykgPSBUIGlmIFQgaXMgbm90IHZvaWQuCiAgICBpZiAodHlwZTEgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUyOwogICAgfQogICAgaWYgKHR5cGUyIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KCiAgICAvLyBTTEIoT2JqZWN0LCBUKSA9IFNMQihULCBPYmplY3QpID0gVCBpZiBUIGlzIG5vdCB2b2lkIG9yIGR5bmFtaWMuCiAgICBpZiAodHlwZTEgPT0gb2JqZWN0VHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CiAgICBpZiAodHlwZTIgPT0gb2JqZWN0VHlwZSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CgogICAgLy8gU0xCKGJvdHRvbSwgVCkgPSBTTEIoVCwgYm90dG9tKSA9IGJvdHRvbS4KICAgIGlmICh0eXBlMSBpcyBCb3R0b21UeXBlKSByZXR1cm4gdHlwZTE7CiAgICBpZiAodHlwZTIgaXMgQm90dG9tVHlwZSkgcmV0dXJuIHR5cGUyOwogICAgaWYgKHR5cGUxID09IG51bGxUeXBlKSByZXR1cm4gdHlwZTE7CiAgICBpZiAodHlwZTIgPT0gbnVsbFR5cGUpIHJldHVybiB0eXBlMjsKCiAgICAvLyBGdW5jdGlvbiB0eXBlcyBoYXZlIHN0cnVjdHVyYWwgbG93ZXIgYm91bmRzLgogICAgaWYgKHR5cGUxIGlzIEZ1bmN0aW9uVHlwZSAmJiB0eXBlMiBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIF9mdW5jdGlvblN0YW5kYXJkTG93ZXJCb3VuZCh0eXBlMSwgdHlwZTIpOwogICAgfQoKICAgIC8vIE90aGVyd2lzZSwgdGhlIGxvd2VyIGJvdW5kcyAgb2YgdHdvIHR5cGVzIGlzIG9uZSBvZiB0aGVtIGl0IGlmIGl0IGlzIGEKICAgIC8vIHN1YnR5cGUgb2YgdGhlIG90aGVyLgogICAgaWYgKGlzU3VidHlwZU9mKHR5cGUxLCB0eXBlMikpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQoKICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMiwgdHlwZTEpKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KCiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzM3NDM5I2lzc3VlY29tbWVudC01MTk2NTQ5NTkuCiAgICBpZiAodHlwZTEgaXMgSW50ZXJmYWNlVHlwZSAmJiB0eXBlMS5jbGFzc05vZGUgPT0gZnV0dXJlT3JDbGFzcykgewogICAgICBpZiAodHlwZTIgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIGlmICh0eXBlMi5jbGFzc05vZGUgPT0gZnV0dXJlT3JDbGFzcykgewogICAgICAgICAgLy8gR0xCKEZ1dHVyZU9yPEE+LCBGdXR1cmVPcjxCPikgPT0gRnV0dXJlT3I8R0xCKEEsIEIpPgogICAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGZ1dHVyZU9yQ2xhc3MsIDxEYXJ0VHlwZT5bCiAgICAgICAgICAgIGdldFN0YW5kYXJkTG93ZXJCb3VuZCgKICAgICAgICAgICAgICAgIHR5cGUxLnR5cGVBcmd1bWVudHNbMF0sIHR5cGUyLnR5cGVBcmd1bWVudHNbMF0pCiAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGUyLmNsYXNzTm9kZSA9PSBmdXR1cmVDbGFzcykgewogICAgICAgICAgLy8gR0xCKEZ1dHVyZU9yPEE+LCBGdXR1cmU8Qj4pID09IEZ1dHVyZTxHTEIoQSwgQik+CiAgICAgICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoZnV0dXJlQ2xhc3MsIDxEYXJ0VHlwZT5bCiAgICAgICAgICAgIGdldFN0YW5kYXJkTG93ZXJCb3VuZCgKICAgICAgICAgICAgICAgIHR5cGUxLnR5cGVBcmd1bWVudHNbMF0sIHR5cGUyLnR5cGVBcmd1bWVudHNbMF0pCiAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gR0xCKEZ1dHVyZU9yPEE+LCBCKSA9PSBHTEIoQSwgQikKICAgICAgcmV0dXJuIGdldFN0YW5kYXJkTG93ZXJCb3VuZCh0eXBlMS50eXBlQXJndW1lbnRzWzBdLCB0eXBlMik7CiAgICB9CiAgICAvLyBUaGUgaWYtc3RhdGVtZW50IGJlbG93IGhhbmRsZXMgdGhlIGZvbGxvd2luZyBydWxlOgogICAgLy8gICAgIEdMQihBLCBGdXR1cmVPcjxCPikgPT0gIEdMQihGdXR1cmVPcjxCPiwgQSkKICAgIC8vIEl0J3MgYnJva2VuIGRvd24gaW50byBzdWItY2FzZXMgaW5zdGVhZCBvZiBtYWtpbmcgYSByZWN1cnNpdmUgY2FsbCB0bwogICAgLy8gYXZvaWQgbWFraW5nIHRoZSBjaGVja3MgdGhhdCB3ZXJlIGFscmVhZHkgbWFkZSBhYm92ZS4gIE5vdGUgdGhhdCBhdCB0aGlzCiAgICAvLyBwb2ludCBpdCdzIG5vdCBwb3NzaWJsZSBmb3IgdHlwZTEgdG8gYmUgYSBGdXR1cmVPci4KICAgIGlmICh0eXBlMiBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUyLmNsYXNzTm9kZSA9PSBmdXR1cmVPckNsYXNzKSB7CiAgICAgIGlmICh0eXBlMSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUxLmNsYXNzTm9kZSA9PSBmdXR1cmVDbGFzcykgewogICAgICAgIC8vIEdMQihGdXR1cmU8QT4sIEZ1dHVyZU9yPEI+KSA9PSBGdXR1cmU8R0xCKEIsIEEpPgogICAgICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShmdXR1cmVDbGFzcywgPERhcnRUeXBlPlsKICAgICAgICAgIGdldFN0YW5kYXJkTG93ZXJCb3VuZCh0eXBlMi50eXBlQXJndW1lbnRzWzBdLCB0eXBlMS50eXBlQXJndW1lbnRzWzBdKQogICAgICAgIF0pOwogICAgICB9CiAgICAgIC8vIEdMQihBLCBGdXR1cmVPcjxCPikgPT0gR0xCKEIsIEEpCiAgICAgIHJldHVybiBnZXRTdGFuZGFyZExvd2VyQm91bmQodHlwZTIudHlwZUFyZ3VtZW50c1swXSwgdHlwZTEpOwogICAgfQoKICAgIC8vIE5vIHN1YnR5cGUgcmVsYXRpb24sIHNvIHRoZSBsb3dlciBib3VuZCBpcyBib3R0b20uCiAgICByZXR1cm4gY29uc3QgQm90dG9tVHlwZSgpOwogIH0KCiAgLy8vIENvbXB1dGVzIHRoZSBzdGFuZGFyZCB1cHBlciBib3VuZCBvZiB0d28gdHlwZXMuCiAgLy8vCiAgLy8vIFN0YW5kYXJkIHVwcGVyIGJvdW5kIGlzIGFuIHVwcGVyIGJvdW5kIGZ1bmN0aW9uIHRoYXQgaW1wb3NlcyBhbiBvcmRlcmluZwogIC8vLyBvbiB0aGUgdG9wIHR5cGVzICd2b2lkJywgJ2R5bmFtaWMnLCBhbmQgYG9iamVjdGAuICBUaGlzIGZ1bmN0aW9uCiAgLy8vIGFkZGl0aW9uYWxseSBoYW5kbGVzIHRoZSB1bmtub3duIHR5cGUgdGhhdCBhcHBlYXJzIGR1cmluZyB0eXBlIGluZmVyZW5jZS4KICBEYXJ0VHlwZSBnZXRTdGFuZGFyZFVwcGVyQm91bmQoRGFydFR5cGUgdHlwZTEsIERhcnRUeXBlIHR5cGUyKSB7CiAgICAvLyBGb3IgYWxsIHR5cGVzIFQsIFNVQihULFQpID0gVC4gIE5vdGUgdGhhdCB3ZSBkb24ndCB0ZXN0IGZvciBlcXVhbGl0eQogICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIG1ha2UgdGhlIGFsZ29yaXRobSBxdWFkcmF0aWMuICBUaGlzIGlzIG9rCiAgICAvLyBiZWNhdXNlIHRoZSBjaGVjayBpcyBub3QgbmVlZGVkIGZvciBjb3JyZWN0bmVzczsgaXQncyBqdXN0IGEgc3BlZWQKICAgIC8vIG9wdGltaXphdGlvbi4KICAgIGlmIChpZGVudGljYWwodHlwZTEsIHR5cGUyKSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CgogICAgLy8gRm9yIGFueSB0eXBlIFQsIFNVQig/LCBUKSA9IFNVQihULCA/KSA9IFQuCiAgICBpZiAodHlwZTEgaXMgVW5rbm93blR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUyOwogICAgfQogICAgaWYgKHR5cGUyIGlzIFVua25vd25UeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KCiAgICAvLyBTVUIodm9pZCwgVCkgPSBTVUIoVCwgdm9pZCkgPSB2b2lkLgogICAgaWYgKHR5cGUxIGlzIFZvaWRUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KICAgIGlmICh0eXBlMiBpcyBWb2lkVHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CgogICAgLy8gU1VCKGR5bmFtaWMsIFQpID0gU1VCKFQsIGR5bmFtaWMpID0gZHluYW1pYyBpZiBUIGlzIG5vdCB2b2lkLgogICAgaWYgKHR5cGUxIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KICAgIGlmICh0eXBlMiBpcyBEeW5hbWljVHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CgogICAgLy8gU1VCKE9iamVjdCwgVCkgPSBTVUIoVCwgT2JqZWN0KSA9IE9iamVjdCBpZiBUIGlzIG5vdCB2b2lkIG9yIGR5bmFtaWMuCiAgICBpZiAodHlwZTEgPT0gb2JqZWN0VHlwZSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CiAgICBpZiAodHlwZTIgPT0gb2JqZWN0VHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CgogICAgLy8gU1VCKGJvdHRvbSwgVCkgPSBTVUIoVCwgYm90dG9tKSA9IFQuCiAgICBpZiAodHlwZTEgaXMgQm90dG9tVHlwZSkgcmV0dXJuIHR5cGUyOwogICAgaWYgKHR5cGUyIGlzIEJvdHRvbVR5cGUpIHJldHVybiB0eXBlMTsKICAgIGlmICh0eXBlMSA9PSBudWxsVHlwZSkgcmV0dXJuIHR5cGUyOwogICAgaWYgKHR5cGUyID09IG51bGxUeXBlKSByZXR1cm4gdHlwZTE7CgogICAgaWYgKHR5cGUxIGlzIFR5cGVQYXJhbWV0ZXJUeXBlIHx8IHR5cGUyIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIHJldHVybiBfdHlwZVBhcmFtZXRlclN0YW5kYXJkVXBwZXJCb3VuZCh0eXBlMSwgdHlwZTIpOwogICAgfQoKICAgIC8vIFRoZSBzdGFuZGFyZCB1cHBlciBib3VuZCBvZiBhIGZ1bmN0aW9uIHR5cGUgYW5kIGFuIGludGVyZmFjZSB0eXBlIFQgaXMKICAgIC8vIHRoZSBzdGFuZGFyZCB1cHBlciBib3VuZCBvZiBGdW5jdGlvbiBhbmQgVC4KICAgIGlmICh0eXBlMSBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZTIgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB0eXBlMSA9IHJhd0Z1bmN0aW9uVHlwZTsKICAgIH0KICAgIGlmICh0eXBlMiBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZTEgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB0eXBlMiA9IHJhd0Z1bmN0aW9uVHlwZTsKICAgIH0KCiAgICAvLyBBdCB0aGlzIHBvaW50IHR5cGUxIGFuZCB0eXBlMiBzaG91bGQgYm90aCBlaXRoZXIgYmUgaW50ZXJmYWNlIHR5cGVzIG9yCiAgICAvLyBmdW5jdGlvbiB0eXBlcy4KICAgIGlmICh0eXBlMSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUyIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgcmV0dXJuIF9pbnRlcmZhY2VTdGFuZGFyZFVwcGVyQm91bmQodHlwZTEsIHR5cGUyKTsKICAgIH0KCiAgICBpZiAodHlwZTEgaXMgRnVuY3Rpb25UeXBlICYmIHR5cGUyIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICByZXR1cm4gX2Z1bmN0aW9uU3RhbmRhcmRVcHBlckJvdW5kKHR5cGUxLCB0eXBlMik7CiAgICB9CgogICAgaWYgKHR5cGUxIGlzIEludmFsaWRUeXBlIHx8IHR5cGUyIGlzIEludmFsaWRUeXBlKSB7CiAgICAgIHJldHVybiBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgfQoKICAgIC8vIFNob3VsZCBuZXZlciBoYXBwZW4uIEFzIGEgZGVmZW5zaXZlIG1lYXN1cmUsIHJldHVybiB0aGUgZHluYW1pYyB0eXBlLgogICAgYXNzZXJ0KGZhbHNlLCAidHlwZTEgPSAkdHlwZTE7IHR5cGUyID0gJHR5cGUyIik7CiAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICB9CgogIC8vLyBDb21wdXRlIHRoZSBzdGFuZGFyZCBsb3dlciBib3VuZCBvZiBmdW5jdGlvbiB0eXBlcyBbZl0gYW5kIFtnXS4KICAvLy8KICAvLy8gVGhlIHNwZWMgcnVsZXMgZm9yIFNMQiBvbiBmdW5jdGlvbiB0eXBlcywgaW5mb3JtYWxseSwgYXJlIHByZXR0eSBzaW1wbGU6CiAgLy8vCiAgLy8vIC0gSWYgYSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaW4gYm90aCwgaXQgc3RheXMgcmVxdWlyZWQuCiAgLy8vCiAgLy8vIC0gSWYgYSBwb3NpdGlvbmFsIHBhcmFtZXRlciBpcyBvcHRpb25hbCBvciBtaXNzaW5nIGluIG9uZSwgaXQgYmVjb21lcwogIC8vLyAgIG9wdGlvbmFsLiAgKFRoaXMgaXMgYmVjYXVzZSB3ZSdyZSB0cnlpbmcgdG8gYnVpbGQgYSBmdW5jdGlvbiB0eXBlIHdoaWNoCiAgLy8vICAgaXMgYSBzdWJ0eXBlIG9mIGJvdGggW2ZdIGFuZCBbZ10sIG1lYW5pbmcgaXQgYWNjZXB0cyBhbGwgcG9zc2libGUgaW5wdXRzCiAgLy8vICAgdGhhdCBbZl0gYW5kIFtnXSBhY2NlcHQuKQogIC8vLwogIC8vLyAtIE5hbWVkIHBhcmFtZXRlcnMgYXJlIHVuaW9uZWQgdG9nZXRoZXIuCiAgLy8vCiAgLy8vIC0gRm9yIGFueSBwYXJhbWV0ZXIgdGhhdCBleGlzdHMgaW4gYm90aCBmdW5jdGlvbnMsIHVzZSB0aGUgU1VCIG9mIHRoZW0gYXMKICAvLy8gICB0aGUgcmVzdWx0aW5nIHBhcmFtZXRlciB0eXBlLgogIC8vLwogIC8vLyAtIFVzZSB0aGUgU0xCIG9mIHRoZWlyIHJldHVybiB0eXBlcy4KICBEYXJ0VHlwZSBfZnVuY3Rpb25TdGFuZGFyZExvd2VyQm91bmQoRnVuY3Rpb25UeXBlIGYsIEZ1bmN0aW9uVHlwZSBnKSB7CiAgICAvLyBUT0RPKHJueXN0cm9tLHBhdWxiZXJyeSk6IFJpZ2h0IG5vdywgdGhpcyBhc3N1bWVzIGYgYW5kIGcgZG8gbm90IGhhdmUgYW55CiAgICAvLyB0eXBlIHBhcmFtZXRlcnMuIFJldmlzaXQgdGhhdCBpbiB0aGUgcHJlc2VuY2Ugb2YgZ2VuZXJpYyBtZXRob2RzLgoKICAgIC8vIENhbGN1bGF0ZSB0aGUgU1VCIG9mIGVhY2ggY29ycmVzcG9uZGluZyBwYWlyIG9mIHBhcmFtZXRlcnMuCiAgICBpbnQgdG90YWxQb3NpdGlvbmFsID0KICAgICAgICBtYXRoLm1heChmLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCwgZy5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpOwogICAgdmFyIHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbmV3IExpc3Q8RGFydFR5cGU+KHRvdGFsUG9zaXRpb25hbCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsUG9zaXRpb25hbDsgaSsrKSB7CiAgICAgIGlmIChpIDwgZi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICB2YXIgZlR5cGUgPSBmLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAgIGlmIChpIDwgZy5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgIHZhciBnVHlwZSA9IGcucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSA9IGdldFN0YW5kYXJkVXBwZXJCb3VuZChmVHlwZSwgZ1R5cGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSA9IGZUeXBlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSA9IGcucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgIH0KICAgIH0KCiAgICAvLyBQYXJhbWV0ZXJzIHRoYXQgYXJlIHJlcXVpcmVkIGluIGJvdGggZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBpbiB0aGUKICAgIC8vIHJlc3VsdC4gIFBhcmFtZXRlcnMgdGhhdCBhcmUgb3B0aW9uYWwgb3IgbWlzc2luZyBpbiBlaXRoZXIgZW5kIHVwCiAgICAvLyBvcHRpb25hbC4KICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0KICAgICAgICBtYXRoLm1pbihmLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIGcucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICBib29sIGhhc1Bvc2l0aW9uYWwgPSByZXF1aXJlZFBhcmFtZXRlckNvdW50IDwgdG90YWxQb3NpdGlvbmFsOwoKICAgIC8vIFVuaW9uIHRoZSBuYW1lZCBwYXJhbWV0ZXJzIHRvZ2V0aGVyLgogICAgTGlzdDxOYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVycyA9IFtdOwogICAgewogICAgICBpbnQgaSA9IDA7CiAgICAgIGludCBqID0gMDsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoaSA8IGYubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgICAgaWYgKGogPCBnLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgICAgdmFyIGZOYW1lID0gZi5uYW1lZFBhcmFtZXRlcnNbaV0ubmFtZTsKICAgICAgICAgICAgdmFyIGdOYW1lID0gZy5uYW1lZFBhcmFtZXRlcnNbal0ubmFtZTsKICAgICAgICAgICAgaW50IG9yZGVyID0gZk5hbWUuY29tcGFyZVRvKGdOYW1lKTsKICAgICAgICAgICAgaWYgKG9yZGVyIDwgMCkgewogICAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGQoZi5uYW1lZFBhcmFtZXRlcnNbaSsrXSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob3JkZXIgPiAwKSB7CiAgICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZChnLm5hbWVkUGFyYW1ldGVyc1tqKytdKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkKG5ldyBOYW1lZFR5cGUoCiAgICAgICAgICAgICAgICAgIGZOYW1lLAogICAgICAgICAgICAgICAgICBnZXRTdGFuZGFyZFVwcGVyQm91bmQoZi5uYW1lZFBhcmFtZXRlcnNbaSsrXS50eXBlLAogICAgICAgICAgICAgICAgICAgICAgZy5uYW1lZFBhcmFtZXRlcnNbaisrXS50eXBlKSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkQWxsKGYubmFtZWRQYXJhbWV0ZXJzLnNraXAoaSkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZEFsbChnLm5hbWVkUGFyYW1ldGVycy5za2lwKGopKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYm9vbCBoYXNOYW1lZCA9IG5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5OwoKICAgIC8vIEVkZ2UgY2FzZS4gRGFydCBkb2VzIG5vdCBzdXBwb3J0IGZ1bmN0aW9ucyB3aXRoIGJvdGggb3B0aW9uYWwgcG9zaXRpb25hbAogICAgLy8gYW5kIG5hbWVkIHBhcmFtZXRlcnMuIElmIHdlIHdvdWxkIHN5bnRoZXNpemUgdGhhdCwgZ2l2ZSB1cC4KICAgIGlmIChoYXNQb3NpdGlvbmFsICYmIGhhc05hbWVkKSByZXR1cm4gY29uc3QgQm90dG9tVHlwZSgpOwoKICAgIC8vIENhbGN1bGF0ZSB0aGUgU0xCIG9mIHRoZSByZXR1cm4gdHlwZS4KICAgIERhcnRUeXBlIHJldHVyblR5cGUgPSBnZXRTdGFuZGFyZExvd2VyQm91bmQoZi5yZXR1cm5UeXBlLCBnLnJldHVyblR5cGUpOwogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUocG9zaXRpb25hbFBhcmFtZXRlcnMsIHJldHVyblR5cGUsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgfQoKICAvLy8gQ29tcHV0ZSB0aGUgc3RhbmRhcmQgdXBwZXIgYm91bmQgb2YgZnVuY3Rpb24gdHlwZXMgW2ZdIGFuZCBbZ10uCiAgLy8vCiAgLy8vIFRoZSBydWxlcyBmb3IgU1VCIG9uIGZ1bmN0aW9uIHR5cGVzLCBpbmZvcm1hbGx5LCBhcmUgcHJldHR5IHNpbXBsZToKICAvLy8KICAvLy8gLSBJZiB0aGUgZnVuY3Rpb25zIGRvbid0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHJlcXVpcmVkIHBhcmFtZXRlcnMsCiAgLy8vICAgYWx3YXlzIHJldHVybiBgRnVuY3Rpb25gLgogIC8vLwogIC8vLyAtIERpc2NhcmQgYW55IG9wdGlvbmFsIG5hbWVkIG9yIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0aGUgdHdvIHR5cGVzIGRvIG5vdAogIC8vLyAgIGhhdmUgaW4gY29tbW9uLgogIC8vLwogIC8vLyAtIENvbXB1dGUgdGhlIFNMQiBvZiBlYWNoIGNvcnJlc3BvbmRpbmcgcGFpciBvZiBwYXJhbWV0ZXIgdHlwZXMsIGFuZCB0aGUKICAvLy8gICBTVUIgb2YgdGhlIHJldHVybiB0eXBlcy4gIFJldHVybiBhIGZ1bmN0aW9uIHR5cGUgd2l0aCB0aG9zZSB0eXBlcy4KICBEYXJ0VHlwZSBfZnVuY3Rpb25TdGFuZGFyZFVwcGVyQm91bmQoRnVuY3Rpb25UeXBlIGYsIEZ1bmN0aW9uVHlwZSBnKSB7CiAgICAvLyBUT0RPKHJueXN0cm9tKTogUmlnaHQgbm93LCB0aGlzIGFzc3VtZXMgZiBhbmQgZyBkbyBub3QgaGF2ZSBhbnkgdHlwZQogICAgLy8gcGFyYW1ldGVycy4gUmV2aXNpdCB0aGF0IGluIHRoZSBwcmVzZW5jZSBvZiBnZW5lcmljIG1ldGhvZHMuCgogICAgLy8gSWYgRiBhbmQgRyBkaWZmZXIgaW4gdGhlaXIgbnVtYmVyIG9mIHJlcXVpcmVkIHBhcmFtZXRlcnMsIHRoZW4gdGhlCiAgICAvLyBzdGFuZGFyZCB1cHBlciBib3VuZCBvZiBGIGFuZCBHIGlzIEZ1bmN0aW9uLgogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSwgZS5nLjoKICAgIC8vICAgU1VCKChbaW50XSkgLT4gdm9pZCwgKGludCkgLT4gdm9pZCkgPSAoaW50KSAtPiB2b2lkCiAgICBpZiAoZi5yZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9IGcucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICByZXR1cm4gZnVuY3Rpb25DbGFzcy5yYXdUeXBlOwogICAgfQogICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSBmLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CgogICAgLy8gQ2FsY3VsYXRlIHRoZSBTTEIgb2YgZWFjaCBjb3JyZXNwb25kaW5nIHBhaXIgb2YgcGFyYW1ldGVycy4KICAgIC8vIElnbm9yZSBhbnkgZXh0cmEgb3B0aW9uYWwgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGlmIG9uZSBoYXMgbW9yZSB0aGFuIHRoZQogICAgLy8gb3RoZXIuCiAgICBpbnQgdG90YWxQb3NpdGlvbmFsID0KICAgICAgICBtYXRoLm1pbihmLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCwgZy5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpOwogICAgdmFyIHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbmV3IExpc3Q8RGFydFR5cGU+KHRvdGFsUG9zaXRpb25hbCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsUG9zaXRpb25hbDsgaSsrKSB7CiAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldID0gZ2V0U3RhbmRhcmRMb3dlckJvdW5kKAogICAgICAgICAgZi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSwgZy5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSk7CiAgICB9CgogICAgLy8gSW50ZXJzZWN0IHRoZSBuYW1lZCBwYXJhbWV0ZXJzLgogICAgTGlzdDxOYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVycyA9IFtdOwogICAgewogICAgICBpbnQgaSA9IDA7CiAgICAgIGludCBqID0gMDsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoaSA8IGYubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgICAgaWYgKGogPCBnLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgICAgdmFyIGZOYW1lID0gZi5uYW1lZFBhcmFtZXRlcnNbaV0ubmFtZTsKICAgICAgICAgICAgdmFyIGdOYW1lID0gZy5uYW1lZFBhcmFtZXRlcnNbal0ubmFtZTsKICAgICAgICAgICAgaW50IG9yZGVyID0gZk5hbWUuY29tcGFyZVRvKGdOYW1lKTsKICAgICAgICAgICAgaWYgKG9yZGVyIDwgMCkgewogICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgfSBlbHNlIGlmIChvcmRlciA+IDApIHsKICAgICAgICAgICAgICBqKys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZChuZXcgTmFtZWRUeXBlKAogICAgICAgICAgICAgICAgICBmTmFtZSwKICAgICAgICAgICAgICAgICAgZ2V0U3RhbmRhcmRMb3dlckJvdW5kKGYubmFtZWRQYXJhbWV0ZXJzW2krK10udHlwZSwKICAgICAgICAgICAgICAgICAgICAgIGcubmFtZWRQYXJhbWV0ZXJzW2orK10udHlwZSkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIENhbGN1bGF0ZSB0aGUgU1VCIG9mIHRoZSByZXR1cm4gdHlwZS4KICAgIERhcnRUeXBlIHJldHVyblR5cGUgPSBnZXRTdGFuZGFyZFVwcGVyQm91bmQoZi5yZXR1cm5UeXBlLCBnLnJldHVyblR5cGUpOwogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUocG9zaXRpb25hbFBhcmFtZXRlcnMsIHJldHVyblR5cGUsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgfQoKICBEYXJ0VHlwZSBfaW50ZXJmYWNlU3RhbmRhcmRVcHBlckJvdW5kKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUxLCBJbnRlcmZhY2VUeXBlIHR5cGUyKSB7CiAgICAvLyBUaGlzIGN1cnJlbnRseSBkb2VzIG5vdCBpbXBsZW1lbnQgYSB2ZXJ5IGNvbXBsZXRlIHN0YW5kYXJkIHVwcGVyIGJvdW5kCiAgICAvLyBhbGdvcml0aG0sIGJ1dCBoYW5kbGVzIGEgY291cGxlIG9mIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlcyB0aGF0IGFyZQogICAgLy8gY2F1c2luZyBwYWluIGluIHJlYWwgY29kZS4gIFRoZSBjdXJyZW50IGFsZ29yaXRobSBpczoKICAgIC8vIDEuIElmIGVpdGhlciBvZiB0aGUgdHlwZXMgaXMgYSBzdXBlcnR5cGUgb2YgdGhlIG90aGVyLCByZXR1cm4gaXQuCiAgICAvLyAgICBUaGlzIGlzIGluIGZhY3QgdGhlIGJlc3QgcmVzdWx0IGluIHRoaXMgY2FzZS4KICAgIC8vIDIuIElmIHRoZSB0d28gdHlwZXMgaGF2ZSB0aGUgc2FtZSBjbGFzcyBlbGVtZW50LCB0aGVuIHRha2UgdGhlCiAgICAvLyAgICBwb2ludHdpc2Ugc3RhbmRhcmQgdXBwZXIgYm91bmQgb2YgdGhlIHR5cGUgYXJndW1lbnRzLiAgVGhpcyBpcyBhZ2FpbgogICAgLy8gICAgdGhlIGJlc3QgcmVzdWx0LCBleGNlcHQgdGhhdCB0aGUgcmVjdXJzaXZlIGNhbGxzIG1heSBub3QgcmV0dXJuCiAgICAvLyAgICB0aGUgdHJ1ZSBzdGFuZGFyZCB1cHBlciBib3VuZHMuICBUaGUgcmVzdWx0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYQogICAgLy8gICAgd2VsbC1mb3JtZWQgdHlwZSB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBpbnB1dCB0eXBlcyB3ZXJlCiAgICAvLyAgICB3ZWxsLWZvcm1lZCAoYW5kIGFzc3VtaW5nIHRoYXQgdGhlIHJlY3Vyc2l2ZSBjYWxscyByZXR1cm4KICAgIC8vICAgIHdlbGwtZm9ybWVkIHR5cGVzKS4KICAgIC8vIDMuIE90aGVyd2lzZSByZXR1cm4gdGhlIHNwZWMtZGVmaW5lZCBzdGFuZGFyZCB1cHBlciBib3VuZC4gIFRoaXMgd2lsbAogICAgLy8gICAgYmUgYW4gdXBwZXIgYm91bmQsIG1pZ2h0IChvciBtaWdodCBub3QpIGJlIGxlYXN0LCBhbmQgbWlnaHQKICAgIC8vICAgIChvciBtaWdodCBub3QpIGJlIGEgd2VsbC1mb3JtZWQgdHlwZS4KICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMSwgdHlwZTIpKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMiwgdHlwZTEpKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KICAgIGlmICh0eXBlMSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgdHlwZTIgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbCh0eXBlMS5jbGFzc05vZGUsIHR5cGUyLmNsYXNzTm9kZSkpIHsKICAgICAgTGlzdDxEYXJ0VHlwZT4gdEFyZ3MxID0gdHlwZTEudHlwZUFyZ3VtZW50czsKICAgICAgTGlzdDxEYXJ0VHlwZT4gdEFyZ3MyID0gdHlwZTIudHlwZUFyZ3VtZW50czsKCiAgICAgIGFzc2VydCh0QXJnczEubGVuZ3RoID09IHRBcmdzMi5sZW5ndGgpOwogICAgICBMaXN0PERhcnRUeXBlPiB0QXJncyA9IG5ldyBMaXN0KHRBcmdzMS5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRBcmdzMS5sZW5ndGg7IGkrKykgewogICAgICAgIHRBcmdzW2ldID0gZ2V0U3RhbmRhcmRVcHBlckJvdW5kKHRBcmdzMVtpXSwgdEFyZ3MyW2ldKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUodHlwZTEuY2xhc3NOb2RlLCB0QXJncyk7CiAgICB9CiAgICByZXR1cm4gZ2V0TGVnYWN5TGVhc3RVcHBlckJvdW5kKHR5cGUxLCB0eXBlMik7CiAgfQoKICBEYXJ0VHlwZSBfdHlwZVBhcmFtZXRlclN0YW5kYXJkVXBwZXJCb3VuZChEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIC8vIFRoaXMgY3VycmVudGx5IGp1c3QgaW1wbGVtZW50cyBhIHNpbXBsZSBzdGFuZGFyZCB1cHBlciBib3VuZCB0bwogICAgLy8gaGFuZGxlIHNvbWUgY29tbW9uIGNhc2VzLiAgSXQgYWxzbyBhdm9pZHMgc29tZSB0ZXJtaW5hdGlvbiBpc3N1ZXMKICAgIC8vIHdpdGggdGhlIG5haXZlIHNwZWMgYWxnb3JpdGhtLiAgVGhlIHN0YW5kYXJkIHVwcGVyIGJvdW5kIG9mIHR3byB0eXBlcwogICAgLy8gKGF0IGxlYXN0IG9uZSBvZiB3aGljaCBpcyBhIHR5cGUgcGFyYW1ldGVyKSBpcyBjb21wdXRlZCBoZXJlIGFzOgogICAgLy8gMS4gSWYgZWl0aGVyIHR5cGUgaXMgYSBzdXBlcnR5cGUgb2YgdGhlIG90aGVyLCByZXR1cm4gaXQuCiAgICAvLyAyLiBJZiB0aGUgZmlyc3QgdHlwZSBpcyBhIHR5cGUgcGFyYW1ldGVyLCByZXBsYWNlIGl0IHdpdGggaXRzIGJvdW5kLAogICAgLy8gICAgd2l0aCByZWN1cnNpdmUgb2NjdXJyZW5jZXMgb2YgaXRzZWxmIHJlcGxhY2VkIHdpdGggT2JqZWN0LgogICAgLy8gICAgVGhlIHNlY29uZCBwYXJ0IG9mIHRoaXMgc2hvdWxkIGVuc3VyZSB0ZXJtaW5hdGlvbi4gIEluZm9ybWFsbHksCiAgICAvLyAgICBlYWNoIHR5cGUgdmFyaWFibGUgaW5zdGFudGlhdGlvbiBpbiBvbmUgb2YgdGhlIGFyZ3VtZW50cyB0byB0aGUKICAgIC8vICAgIHN0YW5kYXJkIHVwcGVyIGJvdW5kIGFsZ29yaXRobSBub3cgc3RyaWN0bHkgcmVkdWNlcyB0aGUgbnVtYmVyCiAgICAvLyAgICBvZiBib3VuZCB2YXJpYWJsZXMgaW4gc2NvcGUgaW4gdGhhdCBhcmd1bWVudCBwb3NpdGlvbi4KICAgIC8vIDMuIElmIHRoZSBzZWNvbmQgdHlwZSBpcyBhIHR5cGUgcGFyYW1ldGVyLCBkbyB0aGUgc3ltbWV0cmljIG9wZXJhdGlvbgogICAgLy8gICAgdG8gIzIuCiAgICAvLwogICAgLy8gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aHkgdGhpcyBpcyBzeW1tZXRyaWMgaW4gdGhlIGNhc2UgdGhhdCBib3RoCiAgICAvLyBvZiB0aGVtIGFyZSB0eXBlIHBhcmFtZXRlcnMuICBGb3IgIzEsIHN5bW1ldHJ5IGhvbGRzIHNpbmNlIHN1YnR5cGUKICAgIC8vIGlzIGFudGlzeW1tZXRyaWMuICBGb3IgIzIsIGl0J3MgY2xlYXJseSBub3Qgc3ltbWV0cmljIGlmIHVwcGVyIGJvdW5kcyBvZgogICAgLy8gYm90dG9tIGFyZSBhbGxvd2VkLiAgSWdub3JpbmcgdGhpcyAoZm9yIHZhcmlvdXMgcmVhc29ucywgbm90IGxlYXN0CiAgICAvLyBvZiB3aGljaCB0aGF0IHRoZXJlJ3Mgbm8gd2F5IHRvIHdyaXRlIGl0KSwgdGhlcmUncyBhbiBpbmZvcm1hbAogICAgLy8gYXJndW1lbnQgKHRoYXQgbWlnaHQgZXZlbiBiZSByaWdodCkgdGhhdCB5b3Ugd2lsbCBhbHdheXMgZWl0aGVyCiAgICAvLyBlbmQgdXAgZXhwYW5kaW5nIGJvdGggb2YgdGhlbSBvciBlbHNlIHJldHVybmluZyB0aGUgc2FtZSByZXN1bHQgbm8gbWF0dGVyCiAgICAvLyB3aGljaCBvcmRlciB5b3UgZXhwYW5kIHRoZW0gaW4uICBBIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0CiAgICAvLyBpZGVudGljYWwoZXhwYW5kKHR5cGUxKSwgdHlwZTIpID0+IHN1YnR5cGUodHlwZTEsIHR5cGUyKQogICAgLy8gYW5kIGhlbmNlIHRoZSBjb250cmEtcG9zaXRpdmUuCiAgICAvLwogICAgLy8gVE9ETyhsZWFmcCk6IFRoaW5rIHRoaXMgdGhyb3VnaCBhbmQgZmlndXJlIG91dCB3aGF0J3MgdGhlIHJpZ2h0CiAgICAvLyBkZWZpbml0aW9uLiAgQmUgY2FyZWZ1bCBhYm91dCB0ZXJtaW5hdGlvbi4KICAgIC8vCiAgICAvLyBJIHN1c3BlY3QgaW4gZ2VuZXJhbCBhIHJlYXNvbmFibGUgYWxnb3JpdGhtIGlzIHRvIGV4cGFuZCB0aGUgaW5uZXJtb3N0CiAgICAvLyB0eXBlIHZhcmlhYmxlIGZpcnN0LiAgQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkIHByb2JhYmx5IGNob29zZSB0byB0cmVhdAogICAgLy8gaXQgYXMganVzdCBhbiBpbnN0YW5jZSBvZiB0aGUgaW50ZXJmYWNlIHR5cGUgdXBwZXIgYm91bmQgcHJvYmxlbSwgd2l0aAogICAgLy8gdGhlICJpbmhlcml0YW5jZSIgY2hhaW4gZXh0ZW5kZWQgYnkgdGhlIGJvdW5kcyBwbGFjZWQgb24gdGhlIHZhcmlhYmxlcy4KICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMSwgdHlwZTIpKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMiwgdHlwZTEpKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KICAgIGlmICh0eXBlMSBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IEFuYWx5emVyIGNvbGxhcHNlcyBzaW1wbGUgYm91bmRzIGluIG9uZSBzdGVwLCBpLmUuIGZvcgogICAgICAvLyBDPFQgZXh0ZW5kcyBVLCBVIGV4dGVuZHMgTGlzdD4sIFQgZ2V0cyByZXNvbHZlZCBkaXJlY3RseSB0byBMaXN0LiAgRG8KICAgICAgLy8gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhhdCBiZWhhdmlvcj8KICAgICAgcmV0dXJuIGdldFN0YW5kYXJkVXBwZXJCb3VuZCgKICAgICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tTWFwKHt0eXBlMS5wYXJhbWV0ZXI6IG9iamVjdFR5cGV9KQogICAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlMS5wYXJhbWV0ZXIuYm91bmQpLAogICAgICAgICAgdHlwZTIpOwogICAgfSBlbHNlIGlmICh0eXBlMiBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICByZXR1cm4gZ2V0U3RhbmRhcmRVcHBlckJvdW5kKAogICAgICAgICAgdHlwZTEsCiAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbU1hcCh7dHlwZTIucGFyYW1ldGVyOiBvYmplY3RUeXBlfSkKICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodHlwZTIucGFyYW1ldGVyLmJvdW5kKSk7CiAgICB9IGVsc2UgewogICAgICAvLyBXZSBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIHR5cGVzIGlzIGEKICAgICAgLy8gVHlwZVBhcmFtZXRlclR5cGUKICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgfQp9CoHsAE1OPwEcASEJFA8SFRYXFRMbEgE9ASwBIBsZGx4gJQE6ASoxAUAGRVBQQ0xKShUjFAYBMiAUBiAUBgEoHRQGHRQGAT8gFAYgFAYBSB8UBh8UBgExKyspKQE0OjgGAU4dJRQGASUUBgFRRiQwQj4jQA4KLj48I0AOCggqQwY6N01QO0ZGPDpQDAgqQwYBOh8EATYGT0dQQ0xKShUjFAYBMiAUBiAUBgErHRQGHRQGAUUgFAYgFAYBTR8UBh8UBgEsKyspKQFEPQYBTjM7HwY7HwYBThc8OQYBOjgGATgiBgFNNSAEAUYGTwY/BkxQUSIGLwZQJgYrSVFJAUMaUEQwLy8xMUkRKwoPPQgGAUpJESFGQwEsKgYRERUsLjMzMB07JDsVMRlFNg4TPxMMET0RCggGMAFQQz4BLU0+KjkEAUYGSgZMIgZRGAZPS0lMRAFKNDc9QCQGOwFDUA4aUEQwN0EGAScqBhERFSwuMzMwHRMkExUxGUU2DhMTDBERCggGAS1NPio5BAEpMk5JPUk4Rk9KTEpEHk1GMCUUBiUUBiIiNzMzAS42MEAIOAYzBAFOR0lNSEFMRUpKSUFNEQdQSlBKRkdRQkAmB0cyB05PTk8lFAYlFAYmUU8tJD42Ei0kET43DUYbFSIGBAIBP3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS9zdGFuZGFyZF9ib3VuZHMuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2ltcGxpY2l0X2ZpZWxkX3R5cGUuZGFydIRLLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuaW1wbGljaXRfdHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IERhcnRUeXBlLCBEYXJ0VHlwZVZpc2l0b3IsIERhcnRUeXBlVmlzaXRvcjEsIFZpc2l0b3I7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bnN1cHBvcnRlZDsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBNZW1iZXJCdWlsZGVyOwoKY2xhc3MgSW1wbGljaXRGaWVsZFR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgTWVtYmVyQnVpbGRlciBtZW1iZXI7CiAgVG9rZW4gaW5pdGlhbGl6ZXJUb2tlbjsKICBib29sIGlzU3RhcnRlZCA9IGZhbHNlOwoKICBnZXQgbnVsbGFiaWxpdHkgPT4KICAgICAgdW5zdXBwb3J0ZWQoIm51bGxhYmlsaXR5IiwgbWVtYmVyLmNoYXJPZmZzZXQsIG1lbWJlci5maWxlVXJpKTsKCiAgSW1wbGljaXRGaWVsZFR5cGUodGhpcy5tZW1iZXIsIHRoaXMuaW5pdGlhbGl6ZXJUb2tlbik7CgogIGFjY2VwdChEYXJ0VHlwZVZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB1bnN1cHBvcnRlZCgiYWNjZXB0IiwgbWVtYmVyLmNoYXJPZmZzZXQsIG1lbWJlci5maWxlVXJpKTsKICB9CgogIGFjY2VwdDEoRGFydFR5cGVWaXNpdG9yMTxPYmplY3QsIE9iamVjdD4gdiwgYXJnKSB7CiAgICB1bnN1cHBvcnRlZCgiYWNjZXB0MSIsIG1lbWJlci5jaGFyT2Zmc2V0LCBtZW1iZXIuZmlsZVVyaSk7CiAgfQoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB1bnN1cHBvcnRlZCgidmlzaXRDaGlsZHJlbiIsIG1lbWJlci5jaGFyT2Zmc2V0LCBtZW1iZXIuZmlsZVVyaSk7CiAgfQp9CicATk48AR0BIT8BLgEsATEBKx4aGgEVRQE5ASY+BAE1PwQBJUUEAgE7cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9pbXBsaWNpdF9maWVsZF90eXBlLmRhcnRIc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfdmFyaWFibGVfYnVpbGRlci5kYXJ0g2MvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5rZXJuZWxfdmFyaWFibGVfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBCdWlsZGVyOwoKY2xhc3MgVmFyaWFibGVCdWlsZGVyIGV4dGVuZHMgQnVpbGRlciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgQnVpbGRlciBwYXJlbnQ7CgogIEBvdmVycmlkZQogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOwoKICBWYXJpYWJsZUJ1aWxkZXIodGhpcy52YXJpYWJsZSwgdGhpcy5wYXJlbnQsIHRoaXMuZmlsZVVyaSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgY2hhck9mZnNldCA9PiB2YXJpYWJsZS5maWxlT2Zmc2V0OwoKICBib29sIGdldCBpc0xvY2FsID0+IHRydWU7CgogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gdmFyaWFibGUuaXNDb25zdDsKCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiB2YXJpYWJsZS5pc0ZpbmFsOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uIGdldCB0YXJnZXQgPT4gdmFyaWFibGU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gdmFyaWFibGUubmFtZSA/PyAiPHVubmFtZWQ+IjsKfQolAE5OPAEnATsBKwEoDBgBDBUBJgE9AQwtARwBKAEoAS4BDEACAT9wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF92YXJpYWJsZV9idWlsZGVyLmRhcnRFc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9sb2FkX2xpYnJhcnlfYnVpbGRlci5kYXJ0iF4vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25Ob2RlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGlicmFyeURlcGVuZGVuY3ksCiAgICAgICAgTG9hZExpYnJhcnksCiAgICAgICAgTWVtYmVyLAogICAgICAgIE5hbWUsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgUmV0dXJuU3RhdGVtZW50OwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IEJ1aWxkZXI7CgppbXBvcnQgJ2ZvcmVzdC5kYXJ0JyBzaG93IEZvcmVzdDsKCi8vLyBCdWlsZGVyIHRvIHJlcHJlc2VudCB0aGUgYGRlZmVyTGlicmFyeS5sb2FkTGlicmFyeWAgY2FsbHMgYW5kIHRlYXItb2Zmcy4KY2xhc3MgTG9hZExpYnJhcnlCdWlsZGVyIGV4dGVuZHMgQnVpbGRlciB7CiAgZmluYWwgU291cmNlTGlicmFyeUJ1aWxkZXIgcGFyZW50OwoKICBmaW5hbCBMaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnREZXBlbmRlbmN5OwoKICAvLy8gT2Zmc2V0IG9mIHRoZSBpbXBvcnQgcHJlZml4LgogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICAvLy8gU3ludGhldGljIHN0YXRpYyBtZXRob2QgdG8gcmVwcmVzZW50IHRoZSB0ZWFyLW9mZiBvZiAnbG9hZExpYnJhcnknLiAgSWYKICAvLy8gbnVsbCwgbm8gdGVhci1vZmZzIHdlcmUgc2VlbiBpbiB0aGUgY29kZSBhbmQgbm8gbWV0aG9kIGlzIGdlbmVyYXRlZC4KICBNZW1iZXIgdGVhcm9mZjsKCiAgTG9hZExpYnJhcnlCdWlsZGVyKHRoaXMucGFyZW50LCB0aGlzLmltcG9ydERlcGVuZGVuY3ksIHRoaXMuY2hhck9mZnNldCk7CgogIFVyaSBnZXQgZmlsZVVyaSA9PiBwYXJlbnQuZmlsZVVyaTsKCiAgTG9hZExpYnJhcnkgY3JlYXRlTG9hZExpYnJhcnkoCiAgICAgIGludCBjaGFyT2Zmc2V0LCBGb3Jlc3QgZm9yZXN0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gZm9yZXN0LmNyZWF0ZUxvYWRMaWJyYXJ5KGltcG9ydERlcGVuZGVuY3ksIGFyZ3VtZW50cykKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIFByb2NlZHVyZSBjcmVhdGVUZWFyb2ZmTWV0aG9kKEZvcmVzdCBmb3Jlc3QpIHsKICAgIGlmICh0ZWFyb2ZmICE9IG51bGwpIHJldHVybiB0ZWFyb2ZmOwogICAgTG9hZExpYnJhcnkgZXhwcmVzc2lvbiA9IGNyZWF0ZUxvYWRMaWJyYXJ5KGNoYXJPZmZzZXQsIGZvcmVzdCwgbnVsbCk7CiAgICBTdHJpbmcgcHJlZml4ID0gZXhwcmVzc2lvbi5pbXBvcnQubmFtZTsKICAgIHRlYXJvZmYgPSBuZXcgUHJvY2VkdXJlKAogICAgICAgIG5ldyBOYW1lKCdfX2xvYWRMaWJyYXJ5XyRwcmVmaXgnLCBwYXJlbnQudGFyZ2V0KSwKICAgICAgICBQcm9jZWR1cmVLaW5kLk1ldGhvZCwKICAgICAgICBuZXcgRnVuY3Rpb25Ob2RlKG5ldyBSZXR1cm5TdGF0ZW1lbnQoZXhwcmVzc2lvbiksCiAgICAgICAgICAgIHJldHVyblR5cGU6IG5ldyBJbnRlcmZhY2VUeXBlKHBhcmVudC5sb2FkZXIuY29yZVR5cGVzLmZ1dHVyZUNsYXNzLAogICAgICAgICAgICAgICAgPERhcnRUeXBlPltjb25zdCBEeW5hbWljVHlwZSgpXSkpLAogICAgICAgIGZpbGVVcmk6IHBhcmVudC50YXJnZXQuZmlsZVVyaSwKICAgICAgICBpc1N0YXRpYzogdHJ1ZSkKICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICByZXR1cm4gdGVhcm9mZjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gJ2xvYWRMaWJyYXJ5JzsKfQpGAE5OPAEhCRMSFRYXGxUQDhMXGQFKASsBIgFNKyUBLAEjGAFOSxIBSwElASE8QSEEATEpSiwdOh46TzMoGCUhFAQBDDECATxwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2xvYWRfbGlicmFyeV9idWlsZGVyLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC91bmxpbmtlZF9zY29wZS5kYXJ0hFovLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IEJ1aWxkZXIsIFNjb3BlOwoKLy8vIFNjb3BlIHRoYXQgcmV0dXJucyBhbiBbVW5saW5rZWREZWNsYXJhdGlvbl0gaWYgYSBuYW1lIGNhbid0IGJlIHJlc29sdmVkLgovLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRoZSBgZW5jbG9zaW5nU2NvcGVgIGluIGBCb2R5QnVpbGRlcmAgdG8KLy8vIGNyZWF0ZSBBU1RzIHdpdGggYnVpbGRpbmcgb3V0bGluZXMuCmNsYXNzIFVubGlua2VkU2NvcGUgZXh0ZW5kcyBTY29wZSB7CiAgVW5saW5rZWRTY29wZSgpIDogc3VwZXIudG9wKGlzTW9kaWZpYWJsZTogZmFsc2UpOwoKICBCdWlsZGVyIGxvb2t1cEluKFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmksCiAgICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IG1hcCwgYm9vbCBpc0luc3RhbmNlU2NvcGUpIHsKICAgIHJldHVybiBuZXcgVW5saW5rZWREZWNsYXJhdGlvbihuYW1lLCBpc0luc3RhbmNlU2NvcGUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KfQoKY2xhc3MgVW5saW5rZWREZWNsYXJhdGlvbiBleHRlbmRzIEJ1aWxkZXIgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBmaW5hbCBib29sIGlzSW5zdGFuY2VTY29wZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIEBvdmVycmlkZQogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBVbmxpbmtlZERlY2xhcmF0aW9uKAogICAgICB0aGlzLm5hbWUsIHRoaXMuaXNJbnN0YW5jZVNjb3BlLCB0aGlzLmNoYXJPZmZzZXQsIHRoaXMuZmlsZVVyaSk7CgogIEBvdmVycmlkZQogIEJ1aWxkZXIgZ2V0IHBhcmVudCA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7Cn0KKABOTjwBMgFNTCgkNAE9OFAEAgEsFQEeAQwYAQwVARdHAQweAQwoAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC91bmxpbmtlZF9zY29wZS5kYXJ0OnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9yZXdyaXRlX3NldmVyaXR5LmRhcnSFHi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJ21lc3NhZ2VzLmRhcnQnIGFzIG1zZzsKClNldmVyaXR5IHJld3JpdGVTZXZlcml0eSgKICAgIFNldmVyaXR5IHNldmVyaXR5LCBtc2cuQ29kZTxPYmplY3Q+IGNvZGUsIFVyaSBmaWxlVXJpKSB7CiAgaWYgKHNldmVyaXR5ICE9IFNldmVyaXR5Lmlnbm9yZWQpIHsKICAgIHJldHVybiBzZXZlcml0eTsKICB9CgogIFN0cmluZyBwYXRoID0gZmlsZVVyaS5wYXRoOwogIFN0cmluZyBmYXN0YVBhdGggPSAiL3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS8iOwogIGludCBpbmRleCA9IHBhdGguaW5kZXhPZihmYXN0YVBhdGgpOwogIGlmIChpbmRleCA9PSAtMSkgewogICAgZmFzdGFQYXRoID0gIi9wa2cvZnJvbnRfZW5kL3Rvb2wvX2Zhc3RhLyI7CiAgICBpbmRleCA9IHBhdGguaW5kZXhPZihmYXN0YVBhdGgpOwogICAgaWYgKGluZGV4ID09IC0xKSByZXR1cm4gc2V2ZXJpdHk7CiAgfQogIGlmIChjb2RlID09IG1zZy5jb2RlVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllcikgewogICAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhlIGV4Y2VwdGlvbnMgYmVsb3cuCiAgICAvLyBXZSBwbGFuIHRvIHJlbW92ZSBhbGwgdXNlcyBvZiBkZXByZWNhdGVkIGlkZW50aWZpZXJzIGZyb20gRmFzdGEuIFRoZQogICAgLy8gc3RyYXRlZ3kgaXMgdG8gcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGxpc3QgYmVsb3cgb25lIGJ5IG9uZS4gVG8gZ2V0CiAgICAvLyBzdGFydGVkIG9uIGNsZWFuaW5nIHVwIGEgZ2l2ZW4gZmlsZSwgc2ltcGx5IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0CiAgICAvLyBiZWxvdyBhbmQgY29tcGlsZSBGYXN0YSB3aXRoIGl0c2VsZiB0byBnZXQgYSBsaXN0IG9mIHJlbWFpbmluZyBjYWxsCiAgICAvLyBzaXRlcy4KICAgIHN3aXRjaCAocGF0aC5zdWJzdHJpbmcoZmFzdGFQYXRoLmxlbmd0aCArIGluZGV4KSkgewogICAgICBjYXNlICJjb21tYW5kX2xpbmUuZGFydCI6CiAgICAgIGNhc2UgImtlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCI6CiAgICAgICAgcmV0dXJuIHNldmVyaXR5OwogICAgfQogIH0KICByZXR1cm4gU2V2ZXJpdHkuZXJyb3I7Cn0KJwBOTjwBJgEfARo9JhUEAR42JxUvJSYEMy9MSktLDjggJxkGBBkCATFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcmV3cml0ZV9zZXZlcml0eS5kYXJ0MHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90YXJnZXQuZGFydIMuLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudGFyZ2V0OwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgQ29tcG9uZW50OwoKaW1wb3J0ICd0aWNrZXIuZGFydCcgc2hvdyBUaWNrZXI7CgovLy8gQSBjb21waWxhdGlvbiB0YXJnZXQuCi8vLwovLy8gQSB0YXJnZXQgcmVhZHMgc291cmNlIGZpbGVzIHdpdGggW3JlYWRdLCBidWlsZHMgb3V0bGluZXMgd2hlbgovLy8gW2J1aWxkT3V0bGluZXNdIGlzIGNhbGxlZCBhbmQgYnVpbGRzIHRoZSBmdWxsIGNvbXBvbmVudCB3aGVuCi8vLyBbYnVpbGRDb21wb25lbnRdIGlzIGNhbGxlZC4KYWJzdHJhY3QgY2xhc3MgVGFyZ2V0IHsKICBmaW5hbCBUaWNrZXIgdGlja2VyOwoKICBUYXJnZXQodGhpcy50aWNrZXIpOwoKICAvLy8gQnVpbGQgYW5kIHJldHVybiBvdXRsaW5lcyBmb3IgYWxsIGxpYnJhcmllcy4KICBGdXR1cmU8Q29tcG9uZW50PiBidWlsZE91dGxpbmVzKCk7CgogIC8vLyBCdWlsZCBhbmQgcmV0dXJuIHRoZSBmdWxsIGNvbXBvbmVudCBmb3IgYWxsIGxpYnJhcmllcy4KICBGdXR1cmU8Q29tcG9uZW50PiBidWlsZENvbXBvbmVudCgpOwp9Ch4ATk48ARYBIQExASIBGgRCQSAYFwEXATMlAT0mAgEncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3RhcmdldC5kYXJ0QXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9kaWxsL2RpbGxfY2xhc3NfYnVpbGRlci5kYXJ0kw8vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5kaWxsX2NsYXNzX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBDbGFzcywgRGFydFR5cGUsIE1lbWJlciwgU3VwZXJ0eXBlLCBUeXBlUGFyYW1ldGVyOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaW1wbGVtZW50ZWQ7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZW1iZXJCdWlsZGVyLAogICAgICAgIFNjb3BlLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnIHNob3cgYWJzdHJhY3RNYXNrOwoKaW1wb3J0ICdkaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnZGlsbF9tZW1iZXJfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxNZW1iZXJCdWlsZGVyOwoKY2xhc3MgRGlsbENsYXNzQnVpbGRlciBleHRlbmRzIENsYXNzQnVpbGRlciB7CiAgZmluYWwgQ2xhc3MgY2xzOwoKICBEaWxsQ2xhc3NCdWlsZGVyKENsYXNzIGNscywgRGlsbExpYnJhcnlCdWlsZGVyIHBhcmVudCkKICAgICAgOiBjbHMgPSBjbHMsCiAgICAgICAgc3VwZXIoCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIGNvbXB1dGVNb2RpZmllcnMoY2xzKSwKICAgICAgICAgICAgY2xzLm5hbWUsCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIG5ldyBTY29wZSg8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9LCA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9LAogICAgICAgICAgICAgICAgcGFyZW50LnNjb3BlLCAiY2xhc3MgJHtjbHMubmFtZX0iLCBpc01vZGlmaWFibGU6IGZhbHNlKSwKICAgICAgICAgICAgbmV3IFNjb3BlKDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30sIG51bGwsIG51bGwsIGNscy5uYW1lLAogICAgICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBmYWxzZSksCiAgICAgICAgICAgIHBhcmVudCwKICAgICAgICAgICAgY2xzLmZpbGVPZmZzZXQpOwoKICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IGdldCB0eXBlVmFyaWFibGVzIHsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHN1cGVyLnR5cGVWYXJpYWJsZXM7CiAgICBpZiAodHlwZVZhcmlhYmxlcyA9PSBudWxsICYmIGNscy50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIHR5cGVWYXJpYWJsZXMgPSBzdXBlci50eXBlVmFyaWFibGVzID0KICAgICAgICAgIGNvbXB1dGVUeXBlVmFyaWFibGVCdWlsZGVycyhsaWJyYXJ5LCBjbHMudHlwZVBhcmFtZXRlcnMpOwogICAgfQogICAgcmV0dXJuIHR5cGVWYXJpYWJsZXM7CiAgfQoKICBVcmkgZ2V0IGZpbGVVcmkgPT4gY2xzLmZpbGVVcmk7CgogIFR5cGVCdWlsZGVyIGdldCBzdXBlcnR5cGUgewogICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gc3VwZXIuc3VwZXJ0eXBlOwogICAgaWYgKHN1cGVydHlwZSA9PSBudWxsKSB7CiAgICAgIFN1cGVydHlwZSB0YXJnZXRTdXBlcnR5cGUgPSBjbHMuc3VwZXJ0eXBlOwogICAgICBpZiAodGFyZ2V0U3VwZXJ0eXBlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBzdXBlci5zdXBlcnR5cGUgPQogICAgICAgICAgc3VwZXJ0eXBlID0gY29tcHV0ZVR5cGVCdWlsZGVyKGxpYnJhcnksIHRhcmdldFN1cGVydHlwZSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXJ0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IGFjdHVhbENscyA9PiBjbHM7CgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIERpbGxNZW1iZXJCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgRGlsbE1lbWJlckJ1aWxkZXIobWVtYmVyLCB0aGlzKTsKICAgIFN0cmluZyBuYW1lID0gbWVtYmVyLm5hbWUubmFtZTsKICAgIGlmIChidWlsZGVyLmlzQ29uc3RydWN0b3IgfHwgYnVpbGRlci5pc0ZhY3RvcnkpIHsKICAgICAgY29uc3RydWN0b3JTY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChidWlsZGVyLmlzU2V0dGVyKSB7CiAgICAgIHNjb3BlQnVpbGRlci5hZGRTZXR0ZXIobmFtZSwgYnVpbGRlcik7CiAgICB9IGVsc2UgewogICAgICBzY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGJ1aWxkZXIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCB0eXBlVmFyaWFibGVzQ291bnQgPT4gY2xzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gYnVpbGRUeXBlQXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBbdHlwZVZhcmlhYmxlc10gYXJlbid0IHJlc3RvcmVkIGZyb20gW3RhcmdldF0uCiAgICAvLyBTbywgaWYgW2FyZ3VtZW50c10gaXMgbnVsbCwgdGhlIGRlZmF1bHQgdHlwZXMgc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9tCiAgICAvLyBbY2xzLnR5cGVQYXJhbWV0ZXJzXS4KICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPSBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgY2xzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgbnVsbCwKICAgICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgICByZXN1bHRbaV0gPSBjbHMudHlwZVBhcmFtZXRlcnNbaV0uZGVmYXVsdFR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICAvLyBbYXJndW1lbnRzXSAhPSBudWxsCiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoYXJndW1lbnRzLmxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gYXJndW1lbnRzW2ldLmJ1aWxkKGxpYnJhcnkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBjbGFzcyBpcyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGEgbWl4aW4gdG8gaXRzCiAgLy8vIHN1cGVyY2xhc3MuCiAgYm9vbCBnZXQgaXNNaXhpbkFwcGxpY2F0aW9uID0+IGNscy5pc01peGluQXBwbGljYXRpb247CgogIFR5cGVCdWlsZGVyIGdldCBtaXhlZEluVHlwZSB7CiAgICByZXR1cm4gY29tcHV0ZVR5cGVCdWlsZGVyKGxpYnJhcnksIGNscy5taXhlZEluVHlwZSk7CiAgfQoKICBMaXN0PFR5cGVCdWlsZGVyPiBnZXQgaW50ZXJmYWNlcyB7CiAgICBpZiAoY2xzLmltcGxlbWVudGVkVHlwZXMuaXNFbXB0eSkgcmV0dXJuIG51bGw7CiAgICBpZiAoc3VwZXIuaW50ZXJmYWNlcyA9PSBudWxsKSB7CiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHJlc3VsdCA9CiAgICAgICAgICBuZXcgTGlzdDxUeXBlQnVpbGRlcj4oY2xzLmltcGxlbWVudGVkVHlwZXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHsKICAgICAgICByZXN1bHRbaV0gPSBjb21wdXRlVHlwZUJ1aWxkZXIobGlicmFyeSwgY2xzLmltcGxlbWVudGVkVHlwZXNbaV0pOwogICAgICB9CiAgICAgIHN1cGVyLmludGVyZmFjZXMgPSByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuaW50ZXJmYWNlczsKICB9CgogIHZvaWQgc2V0IG1peGVkSW5UeXBlKFR5cGVCdWlsZGVyIG1peGluKSB7CiAgICB1bmltcGxlbWVudGVkKCJtaXhlZEluVHlwZT0iLCAtMSwgbnVsbCk7CiAgfQp9CgppbnQgY29tcHV0ZU1vZGlmaWVycyhDbGFzcyBjbHMpIHsKICByZXR1cm4gY2xzLmlzQWJzdHJhY3QgPyBhYnN0cmFjdE1hc2sgOiAwOwp9CgpUeXBlQnVpbGRlciBjb21wdXRlVHlwZUJ1aWxkZXIoCiAgICBEaWxsTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgU3VwZXJ0eXBlIHN1cGVydHlwZSkgewogIHJldHVybiBzdXBlcnR5cGUgPT0gbnVsbAogICAgICA/IG51bGwKICAgICAgOiBsaWJyYXJ5LmxvYWRlci5jb21wdXRlVHlwZUJ1aWxkZXIoc3VwZXJ0eXBlLmFzSW50ZXJmYWNlVHlwZSk7Cn0KCkxpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gY29tcHV0ZVR5cGVWYXJpYWJsZUJ1aWxkZXJzKAogICAgRGlsbExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpIHsKICBpZiAodHlwZVBhcmFtZXRlcnMgPT0gbnVsbCB8fCB0eXBlUGFyYW1ldGVycy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7CiAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiByZXN1bHQgPQogICAgICBuZXcgTGlzdC5maWxsZWQodHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBudWxsKTsKICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0W2ldID0gbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIuZnJvbUtlcm5lbCh0eXBlUGFyYW1ldGVyc1tpXSwgbGlicmFyeSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KgKAATk48ASIBITwBLgEnCRYVGBcPHQEtATwBOgEuEwE5Ew8SIxYSEhISTElHJhQdATBDQixEBhoEASIBHi0dMTAYRAYWBAEMHgEiRSQ2OCMtDS0GBAEMOwEMJT1PTh0dOSsbMDcIFQYBGxxLLi8GEwQBShI5ASA5BAElMyQhPjBKCCEGHQQBLC0EAgEiLAIBIDcbDUYCATdGSSU0LFAEEQIBOHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfY2xhc3NfYnVpbGRlci5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9kaWxsL2RpbGxfdHlwZV9hbGlhc19idWlsZGVyLmRhcnSH7S8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmRpbGxfdHlwZWRlZl9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZSwgVHlwZWRlZjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgVHlwZUFsaWFzQnVpbGRlciwKICAgICAgICBGdW5jdGlvblR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlcjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmltcGxlbWVudGVkOwoKaW1wb3J0ICdkaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIERpbGxUeXBlQWxpYXNCdWlsZGVyIGV4dGVuZHMgVHlwZUFsaWFzQnVpbGRlciB7CiAgRGlsbFR5cGVBbGlhc0J1aWxkZXIoVHlwZWRlZiB0eXBlZGVmLCBEaWxsTGlicmFyeUJ1aWxkZXIgcGFyZW50KQogICAgICA6IHN1cGVyKG51bGwsIHR5cGVkZWYubmFtZSwgbnVsbCwgbnVsbCwgcGFyZW50LCB0eXBlZGVmLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIHR5cGVkZWYpOwoKICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gZ2V0IG1ldGFkYXRhIHsKICAgIHJldHVybiB1bmltcGxlbWVudGVkKCJtZXRhZGF0YSIsIC0xLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgdHlwZVZhcmlhYmxlc0NvdW50ID0+IHRhcmdldC50eXBlUGFyYW1ldGVycy5sZW5ndGg7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZUJ1aWxkZXIgZ2V0IHR5cGUgewogICAgcmV0dXJuIHVuaW1wbGVtZW50ZWQoInR5cGUiLCAtMSwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBidWlsZFRoaXNUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHJldHVybiB0aGlzVHlwZSA/Pz0gdGFyZ2V0LnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PERhcnRUeXBlPiBidWlsZFR5cGVBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIFt0eXBlVmFyaWFibGVzXSBhcmVuJ3QgcmVzdG9yZWQgZnJvbSBbdGFyZ2V0XS4KICAgIC8vIFNvLCBpZiBbYXJndW1lbnRzXSBpcyBudWxsLCB0aGUgZGVmYXVsdCB0eXBlcyBzaG91bGQgYmUgcmV0cmlldmVkIGZyb20KICAgIC8vIFtjbHMudHlwZVBhcmFtZXRlcnNdLgogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIExpc3Q8RGFydFR5cGU+IHJlc3VsdCA9IG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICB0YXJnZXQudHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBudWxsLAogICAgICAgICAgZ3Jvd2FibGU6IHRydWUpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgewogICAgICAgIHJlc3VsdFtpXSA9IHRhcmdldC50eXBlUGFyYW1ldGVyc1tpXS5kZWZhdWx0VHlwZTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIC8vIFthcmd1bWVudHNdICE9IG51bGwKICAgIExpc3Q8RGFydFR5cGU+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZChhcmd1bWVudHMubGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSBhcmd1bWVudHNbaV0uYnVpbGQobGlicmFyeSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQpFAE5OPAEkATkBJwkaHRUYGQEuATwBNkNKFgEnMAQBDD4BDCEsBAEMMyUEAQwlPU9OHR05LhswOggVBgEbHEsuLwYTBAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfdHlwZV9hbGlhc19idWlsZGVyLmRhcnRGc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2J1aWxkZXJfY29tcHV0ZXIuZGFydJA/Ly8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudHlwZV9idWlsZGVyX2NvbXB1dGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBCb3R0b21UeXBlLAogICAgICAgIENsYXNzLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIERhcnRUeXBlVmlzaXRvciwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBMaWJyYXJ5LAogICAgICAgIE5hbWVkVHlwZSwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlLAogICAgICAgIFR5cGVkZWZUeXBlLAogICAgICAgIFZvaWRUeXBlOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBEeW5hbWljVHlwZUJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciwKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVm9pZFR5cGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JyBzaG93IEZvcm1hbFBhcmFtZXRlcktpbmQ7CgpjbGFzcyBUeXBlQnVpbGRlckNvbXB1dGVyIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPFR5cGVCdWlsZGVyPiB7CiAgZmluYWwgTG9hZGVyIGxvYWRlcjsKCiAgY29uc3QgVHlwZUJ1aWxkZXJDb21wdXRlcih0aGlzLmxvYWRlcik7CgogIFR5cGVCdWlsZGVyIGRlZmF1bHREYXJ0VHlwZShEYXJ0VHlwZSBub2RlKSB7CiAgICB0aHJvdyAiVW5zdXBwb3J0ZWQiOwogIH0KCiAgVHlwZUJ1aWxkZXIgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSB7CiAgICB0aHJvdyAiTm90IGltcGxlbWVudGVkIjsKICB9CgogIFR5cGVCdWlsZGVyIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgewogICAgcmV0dXJuIG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJkeW5hbWljIiwgbnVsbCkKICAgICAgLi5iaW5kKAogICAgICAgICAgbmV3IER5bmFtaWNUeXBlQnVpbGRlcihjb25zdCBEeW5hbWljVHlwZSgpLCBsb2FkZXIuY29yZUxpYnJhcnksIC0xKSk7CiAgfQoKICBUeXBlQnVpbGRlciB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcigidm9pZCIsIG51bGwpCiAgICAgIC4uYmluZChuZXcgVm9pZFR5cGVCdWlsZGVyKGNvbnN0IFZvaWRUeXBlKCksIGxvYWRlci5jb3JlTGlicmFyeSwgLTEpKTsKICB9CgogIFR5cGVCdWlsZGVyIHZpc2l0Qm90dG9tVHlwZShCb3R0b21UeXBlIG5vZGUpIHsKICAgIHRocm93ICJOb3QgaW1wbGVtZW50ZWQiOwogIH0KCiAgVHlwZUJ1aWxkZXIgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgQ2xhc3NCdWlsZGVyIGNscyA9CiAgICAgICAgbG9hZGVyLmNvbXB1dGVDbGFzc0J1aWxkZXJGcm9tVGFyZ2V0Q2xhc3Mobm9kZS5jbGFzc05vZGUpOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzOwogICAgTGlzdDxEYXJ0VHlwZT4ga2VybmVsQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzOwogICAgaWYgKGtlcm5lbEFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIGFyZ3VtZW50cyA9IG5ldyBMaXN0PFR5cGVCdWlsZGVyPihrZXJuZWxBcmd1bWVudHMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXJuZWxBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBhcmd1bWVudHNbaV0gPSBrZXJuZWxBcmd1bWVudHNbaV0uYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoY2xzLm5hbWUsIGFyZ3VtZW50cykuLmJpbmQoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVCdWlsZGVyIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gbm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKTsKICAgIC8vIFdlIGNvdWxkIGNvbXB1dGUgdGhlIHR5cGUgdmFyaWFibGVzIGhlcmUuIEhvd2V2ZXIsIHRoZSBjdXJyZW50CiAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiBbdmlzaXRUeXBlUGFyYW1ldGVyVHlwZV0gaXMgc3VmZmljaWVudC4KICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IG51bGw7CiAgICBMaXN0PERhcnRUeXBlPiBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICBMaXN0PE5hbWVkVHlwZT4gbmFtZWRQYXJhbWV0ZXJzID0gbm9kZS5uYW1lZFBhcmFtZXRlcnM7CiAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPSBuZXcgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggKyBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgRm9ybWFsUGFyYW1ldGVyS2luZCBraW5kID0gRm9ybWFsUGFyYW1ldGVyS2luZC5tYW5kYXRvcnk7CiAgICAgIGlmIChpID49IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAgIGtpbmQgPSBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbDsKICAgICAgfQogICAgICBmb3JtYWxzW2ldID0gbmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIobnVsbCwgMCwgdHlwZSwgbnVsbCwgbnVsbCwgLTEpCiAgICAgICAgLi5raW5kID0ga2luZDsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIE5hbWVkVHlwZSBwYXJhbWV0ZXIgPSBuYW1lZFBhcmFtZXRlcnNbaV07CiAgICAgIFR5cGVCdWlsZGVyIHR5cGUgPSBwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXS5hY2NlcHQodGhpcyk7CiAgICAgIGZvcm1hbHNbaSArIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aF0gPQogICAgICAgICAgbmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIobnVsbCwgMCwgdHlwZSwgcGFyYW1ldGVyLm5hbWUsIG51bGwsIC0xKQogICAgICAgICAgICAuLmtpbmQgPSBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsTmFtZWQ7CiAgICB9CgogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGVCdWlsZGVyKHJldHVyblR5cGUsIHR5cGVWYXJpYWJsZXMsIGZvcm1hbHMpOwogIH0KCiAgVHlwZUJ1aWxkZXIgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICBUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciA9IG5vZGUucGFyYW1ldGVyOwogICAgQ2xhc3Mga2VybmVsQ2xhc3MgPSBwYXJhbWV0ZXIucGFyZW50OwogICAgTGlicmFyeSBrZXJuZWxMaWJyYXJ5ID0ga2VybmVsQ2xhc3MuZW5jbG9zaW5nTGlicmFyeTsKICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBsb2FkZXIuYnVpbGRlcnNba2VybmVsTGlicmFyeS5pbXBvcnRVcmldOwogICAgcmV0dXJuIG5ldyBOYW1lZFR5cGVCdWlsZGVyKHBhcmFtZXRlci5uYW1lLCBudWxsKQogICAgICAuLmJpbmQobmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIuZnJvbUtlcm5lbChwYXJhbWV0ZXIsIGxpYnJhcnkpKTsKICB9CgogIFR5cGVCdWlsZGVyIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkgewogICAgdGhyb3cgIk5vdCBpbXBsZW1lbnRlZCI7CiAgfQp9Cn4ATk48ASUBIQkUDxIZFRYXFRETFxsVEgEnCRwdFiAaHRgVGQElATIBRBcBKgEvGQQBMx0EATMxDlAEAS0uTQQBMR0EATcXQyE5JkE5OAgGQQQBDDU7RkE0RTxNPzw/QC43CE0XBjcwPzFOOAYBSAQBPy4qOkc2RgQBMx0EAgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2J1aWxkZXJfY29tcHV0ZXIuZGFydD1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYmFzZS9yZXNvbHZlX3JlbGF0aXZlX3VyaS5kYXJ0g7wvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoqCiAqIFJlc29sdmUgdGhlIFtjb250YWluZWRVcmldIGFnYWluc3QgW2Jhc2VVcmldIHVzaW5nIERhcnQgcnVsZXMuCiAqCiAqIFRoaXMgZnVuY3Rpb24gYmVoYXZlcyBzaW1pbGFybHkgdG8gW1VyaS5yZXNvbHZlVXJpXSwgZXhjZXB0IHRoYXQgaXQgcHJvcGVybHkKICogaGFuZGxlcyBzaXR1YXRpb25zIGxpa2UgdGhlIGZvbGxvd2luZzoKICoKICogICAgIHJlc29sdmVSZWxhdGl2ZVVyaShkYXJ0OmNvcmUsIGJvb2wuZGFydCkgLT4gZGFydDpjb3JlL2Jvb2wuZGFydAogKiAgICAgcmVzb2x2ZVJlbGF0aXZlVXJpKHBhY2thZ2U6YS9iLmRhcnQsIC4uL2MuZGFydCkgLT4gcGFja2FnZTphL2MuZGFydAogKi8KVXJpIHJlc29sdmVSZWxhdGl2ZVVyaShVcmkgYmFzZVVyaSwgVXJpIGNvbnRhaW5lZFVyaSkgewogIGlmIChjb250YWluZWRVcmkuaXNBYnNvbHV0ZSkgewogICAgcmV0dXJuIGNvbnRhaW5lZFVyaTsKICB9CiAgU3RyaW5nIHNjaGVtZSA9IGJhc2VVcmkuc2NoZW1lOwogIC8vIGRhcnQ6Y29yZSA9PiBkYXJ0OmNvcmUvY29yZS5kYXJ0CiAgaWYgKHNjaGVtZSA9PSAnZGFydCcpIHsKICAgIFN0cmluZyBwYXJ0ID0gYmFzZVVyaS5wYXRoOwogICAgaWYgKHBhcnQuaW5kZXhPZignLycpIDwgMCkgewogICAgICBiYXNlVXJpID0gVXJpLnBhcnNlKCckc2NoZW1lOiRwYXJ0LyRwYXJ0LmRhcnQnKTsKICAgIH0KICB9CiAgcmV0dXJuIGJhc2VVcmkucmVzb2x2ZVVyaShjb250YWluZWRVcmkpOwp9Ch0ATk48AQRCA1AqA0dLBDghGQQiJhogITcGBCsCATRwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9yZXNvbHZlX3JlbGF0aXZlX3VyaS5kYXJ0Q3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2V4dGVuc2lvbl9idWlsZGVyLmRhcnSHuC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnOwppbXBvcnQgJ2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnbGlicmFyeV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ21ldGFkYXRhX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndHlwZV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3R5cGVfdmFyaWFibGVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbjsKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JzsKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIEV4dGVuc2lvbkJ1aWxkZXIgZXh0ZW5kcyBEZWNsYXJhdGlvbkJ1aWxkZXIgewogIGZpbmFsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgZmluYWwgVHlwZUJ1aWxkZXIgb25UeXBlOwoKICBFeHRlbnNpb25CdWlsZGVyKAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaWJyYXJ5QnVpbGRlciBwYXJlbnQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBTY29wZSBzY29wZSwKICAgICAgdGhpcy50eXBlUGFyYW1ldGVycywKICAgICAgdGhpcy5vblR5cGUpCiAgICAgIDogc3VwZXIobWV0YWRhdGEsIG1vZGlmaWVycywgbmFtZSwgcGFyZW50LCBjaGFyT2Zmc2V0LCBzY29wZSk7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGJ1aWxkVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJFeHRlbnNpb25CdWlsZGVyLmJ1aWxkVHlwZSBpcyBub3Qgc3VwcG9ydGVkLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiRXh0ZW5zaW9uQnVpbGRlci5idWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzICIKICAgICAgICAiaXMgbm90IHN1cHBvcnRlZC4iKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXh0ZW5zaW9uID0+IHRydWU7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IHRoaXNUeXBlID0+IG51bGw7CgogIEBvdmVycmlkZQogIEJ1aWxkZXIgbG9va3VwTG9jYWxNZW1iZXIoU3RyaW5nIG5hbWUsIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgcGF0Y2hpbmcgb24gZXh0ZW5zaW9ucy4KICAgIEJ1aWxkZXIgYnVpbGRlciA9IHNjb3BlLmxvY2FsW25hbWVdOwogICAgaWYgKHJlcXVpcmVkICYmIGJ1aWxkZXIgPT0gbnVsbCkgewogICAgICBpbnRlcm5hbFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4ud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICBuYW1lLCBmdWxsTmFtZUZvckVycm9ycyksCiAgICAgICAgICAtMSwKICAgICAgICAgIG51bGwpOwogICAgfQogICAgcmV0dXJuIGJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRXh0ZW5zaW9uQnVpbGRlciI7Cn0KRgBOTjwBIgEiARcjHyAcJUUYGwE9MhwBFCYVEx0WExsTRQEMTFAEAQwpOlAeBAEMIAEMJgEMQzwpJxc7KA4RBhQEAQwuAgE6cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZXh0ZW5zaW9uX2J1aWxkZXIuZGFydDdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvY29uZmlndXJhdGlvbi5kYXJ0gdAvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5jb25maWd1cmF0aW9uOwoKY2xhc3MgQ29uZmlndXJhdGlvbiB7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgZmluYWwgU3RyaW5nIGRvdHRlZE5hbWU7CiAgZmluYWwgU3RyaW5nIGNvbmRpdGlvbjsKICBmaW5hbCBTdHJpbmcgaW1wb3J0VXJpOwogIENvbmZpZ3VyYXRpb24oCiAgICAgIHRoaXMuY2hhck9mZnNldCwgdGhpcy5kb3R0ZWROYW1lLCB0aGlzLmNvbmRpdGlvbiwgdGhpcy5pbXBvcnRVcmkpOwp9ChAATk48AR0BFhgbGhoRSQIBLnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb25maWd1cmF0aW9uLmRhcnQwc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2V4cG9ydC5kYXJ0hC8vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5leHBvcnQ7CgppbXBvcnQgJ2J1aWxkZXIvYnVpbGRlci5kYXJ0JyBzaG93IEJ1aWxkZXIsIExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdjb21iaW5hdG9yLmRhcnQnIHNob3cgQ29tYmluYXRvcjsKCmNsYXNzIEV4cG9ydCB7CiAgLy8vIFRoZSBsaWJyYXJ5IHRoYXQgaXMgZXhwb3J0aW5nIFtleHBvcnRlZF07CiAgZmluYWwgTGlicmFyeUJ1aWxkZXIgZXhwb3J0ZXI7CgogIC8vLyBUaGUgbGlicmFyeSBiZWluZyBleHBvcnRlZC4KICBmaW5hbCBMaWJyYXJ5QnVpbGRlciBleHBvcnRlZDsKCiAgZmluYWwgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9yczsKCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIEV4cG9ydCh0aGlzLmV4cG9ydGVyLCB0aGlzLmV4cG9ydGVkLCB0aGlzLmNvbWJpbmF0b3JzLCB0aGlzLmNoYXJPZmZzZXQpOwoKICBVcmkgZ2V0IGZpbGVVcmkgPT4gZXhwb3J0ZXIuZmlsZVVyaTsKCiAgYm9vbCBhZGRUb0V4cG9ydFNjb3BlKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgaWYgKGNvbWJpbmF0b3JzICE9IG51bGwpIHsKICAgICAgZm9yIChDb21iaW5hdG9yIGNvbWJpbmF0b3IgaW4gY29tYmluYXRvcnMpIHsKICAgICAgICBpZiAoY29tYmluYXRvci5pc1Nob3cgJiYgIWNvbWJpbmF0b3IubmFtZXMuY29udGFpbnMobmFtZSkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoY29tYmluYXRvci5pc0hpZGUgJiYgY29tYmluYXRvci5uYW1lcy5jb250YWlucyhuYW1lKSkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXhwb3J0ZXIuYWRkVG9FeHBvcnRTY29wZShuYW1lLCBtZW1iZXIsIGNoYXJPZmZzZXQpOwogIH0KfQolAE5OPAEWATwBKgEPMCEBIiEBJgEYAUsBJwE3HzNRUAgGQAQCASdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZXhwb3J0LmRhcnQwc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2ltcG9ydC5kYXJ0jHAvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5pbXBvcnQ7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IExpYnJhcnlEZXBlbmRlbmN5OwoKaW1wb3J0ICdidWlsZGVyL2J1aWxkZXIuZGFydCcgc2hvdyBCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlci9wcmVmaXhfYnVpbGRlci5kYXJ0JyBzaG93IFByZWZpeEJ1aWxkZXI7CgppbXBvcnQgJ2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IHRvS2VybmVsQ29tYmluYXRvcnM7CgppbXBvcnQgJ2NvbWJpbmF0b3IuZGFydCcgc2hvdyBDb21iaW5hdG9yOwoKaW1wb3J0ICdjb25maWd1cmF0aW9uLmRhcnQnIHNob3cgQ29uZmlndXJhdGlvbjsKCmNsYXNzIEltcG9ydCB7CiAgLy8vIFRoZSBsaWJyYXJ5IHRoYXQgaXMgaW1wb3J0aW5nIFtpbXBvcnRlZF07CiAgZmluYWwgTGlicmFyeUJ1aWxkZXIgaW1wb3J0ZXI7CgogIC8vLyBUaGUgbGlicmFyeSBiZWluZyBpbXBvcnRlZC4KICBmaW5hbCBMaWJyYXJ5QnVpbGRlciBpbXBvcnRlZDsKCiAgZmluYWwgUHJlZml4QnVpbGRlciBwcmVmaXhCdWlsZGVyOwoKICBmaW5hbCBib29sIGRlZmVycmVkOwoKICBmaW5hbCBTdHJpbmcgcHJlZml4OwoKICBmaW5hbCBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzOwoKICBmaW5hbCBMaXN0PENvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25zOwoKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgZmluYWwgaW50IHByZWZpeENoYXJPZmZzZXQ7CgogIC8vIFRoZSBMaWJyYXJ5QnVpbGRlciBmb3IgdGhlIGltcG9ydGVkIGxpYnJhcnkgKCdpbXBvcnRlZCcpIG1heSBiZSBudWxsIHdoZW4KICAvLyB0aGlzIGZpZWxkIGlzIHNldC4KICBmaW5hbCBTdHJpbmcgbmF0aXZlSW1wb3J0UGF0aDsKCiAgSW1wb3J0KAogICAgICB0aGlzLmltcG9ydGVyLAogICAgICB0aGlzLmltcG9ydGVkLAogICAgICB0aGlzLmRlZmVycmVkLAogICAgICB0aGlzLnByZWZpeCwKICAgICAgdGhpcy5jb21iaW5hdG9ycywKICAgICAgdGhpcy5jb25maWd1cmF0aW9ucywKICAgICAgdGhpcy5jaGFyT2Zmc2V0LAogICAgICB0aGlzLnByZWZpeENoYXJPZmZzZXQsCiAgICAgIGludCBpbXBvcnRJbmRleCwKICAgICAge3RoaXMubmF0aXZlSW1wb3J0UGF0aH0pCiAgICAgIDogcHJlZml4QnVpbGRlciA9IGNyZWF0ZVByZWZpeEJ1aWxkZXIocHJlZml4LCBpbXBvcnRlciwgaW1wb3J0ZWQsCiAgICAgICAgICAgIGNvbWJpbmF0b3JzLCBkZWZlcnJlZCwgY2hhck9mZnNldCwgcHJlZml4Q2hhck9mZnNldCwgaW1wb3J0SW5kZXgpOwoKICBVcmkgZ2V0IGZpbGVVcmkgPT4gaW1wb3J0ZXIuZmlsZVVyaTsKCiAgdm9pZCBmaW5hbGl6ZUltcG9ydHMoTGlicmFyeUJ1aWxkZXIgaW1wb3J0ZXIpIHsKICAgIGlmIChuYXRpdmVJbXBvcnRQYXRoICE9IG51bGwpIHJldHVybjsKICAgIHZvaWQgRnVuY3Rpb24oU3RyaW5nLCBCdWlsZGVyKSBhZGQ7CiAgICBpZiAocHJlZml4QnVpbGRlciA9PSBudWxsKSB7CiAgICAgIGFkZCA9IChTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIpIHsKICAgICAgICBpbXBvcnRlci5hZGRUb1Njb3BlKG5hbWUsIG1lbWJlciwgY2hhck9mZnNldCwgdHJ1ZSk7CiAgICAgIH07CiAgICB9IGVsc2UgewogICAgICBhZGQgPSAoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgICAgcHJlZml4QnVpbGRlci5hZGRUb0V4cG9ydFNjb3BlKG5hbWUsIG1lbWJlciwgY2hhck9mZnNldCk7CiAgICAgIH07CiAgICB9CiAgICBpbXBvcnRlZC5leHBvcnRTY29wZS5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIpIHsKICAgICAgaWYgKGNvbWJpbmF0b3JzICE9IG51bGwpIHsKICAgICAgICBmb3IgKENvbWJpbmF0b3IgY29tYmluYXRvciBpbiBjb21iaW5hdG9ycykgewogICAgICAgICAgaWYgKGNvbWJpbmF0b3IuaXNTaG93ICYmICFjb21iaW5hdG9yLm5hbWVzLmNvbnRhaW5zKG5hbWUpKSByZXR1cm47CiAgICAgICAgICBpZiAoY29tYmluYXRvci5pc0hpZGUgJiYgY29tYmluYXRvci5uYW1lcy5jb250YWlucyhuYW1lKSkgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBhZGQobmFtZSwgbWVtYmVyKTsKICAgIH0pOwogICAgaWYgKHByZWZpeEJ1aWxkZXIgIT0gbnVsbCkgewogICAgICBCdWlsZGVyIGV4aXN0aW5nID0KICAgICAgICAgIGltcG9ydGVyLmFkZEJ1aWxkZXIocHJlZml4LCBwcmVmaXhCdWlsZGVyLCBwcmVmaXhDaGFyT2Zmc2V0KTsKICAgICAgaWYgKGV4aXN0aW5nID09IHByZWZpeEJ1aWxkZXIpIHsKICAgICAgICBpbXBvcnRlci5hZGRUb1Njb3BlKHByZWZpeCwgcHJlZml4QnVpbGRlciwgcHJlZml4Q2hhck9mZnNldCwgdHJ1ZSk7CiAgICAgIH0KICAgIH0KICB9Cn0KClByZWZpeEJ1aWxkZXIgY3JlYXRlUHJlZml4QnVpbGRlcigKICAgIFN0cmluZyBwcmVmaXgsCiAgICBMaWJyYXJ5QnVpbGRlciBpbXBvcnRlciwKICAgIExpYnJhcnlCdWlsZGVyIGltcG9ydGVkLAogICAgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycywKICAgIGJvb2wgZGVmZXJyZWQsCiAgICBpbnQgY2hhck9mZnNldCwKICAgIGludCBwcmVmaXhDaGFyT2Zmc2V0LAogICAgaW50IGltcG9ydEluZGV4KSB7CiAgaWYgKHByZWZpeCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICBMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5ID0gbnVsbDsKICBpZiAoZGVmZXJyZWQpIHsKICAgIGRlcGVuZGVuY3kgPSBuZXcgTGlicmFyeURlcGVuZGVuY3kuZGVmZXJyZWRJbXBvcnQoaW1wb3J0ZWQudGFyZ2V0LCBwcmVmaXgsCiAgICAgICAgY29tYmluYXRvcnM6IHRvS2VybmVsQ29tYmluYXRvcnMoY29tYmluYXRvcnMpKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KICByZXR1cm4gbmV3IFByZWZpeEJ1aWxkZXIoCiAgICAgIHByZWZpeCwgZGVmZXJyZWQsIGltcG9ydGVyLCBkZXBlbmRlbmN5LCBwcmVmaXhDaGFyT2Zmc2V0LCBpbXBvcnRJbmRleCk7Cn0KbwBOTjwBFgE5ATwBOQE+ASoBMAEPMCEBIiEBJQEXARcBJgEsARgBHgFPGCEBChUVFRMYGxcdFx9ITwEnATIqKCEsPQkNLEIJBkEhNU1MCggZCCEZSCdMCAYEAgEjEx0dIhMUGhcjJxJPNyEEHE4CASdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvaW1wb3J0LmRhcnRJc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfZXh0ZW5zaW9uX2J1aWxkZXIuZGFydJEKLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JzsKaW1wb3J0ICcuLi9idWlsZGVyL2RlY2xhcmF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2J1aWxkZXIvZXh0ZW5zaW9uX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vYnVpbGRlci9saWJyYXJ5X2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vYnVpbGRlci9tZXRhZGF0YV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL2J1aWxkZXIvcHJvY2VkdXJlX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vYnVpbGRlci90eXBlX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vYnVpbGRlci90eXBlX3ZhcmlhYmxlX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vc2NvcGUuZGFydCc7CmltcG9ydCAnc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCc7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5leHBlY3RlZCwgdW5oYW5kbGVkOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlciwKICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlciwKICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nOwoKY2xhc3MgU291cmNlRXh0ZW5zaW9uQnVpbGRlciBleHRlbmRzIEV4dGVuc2lvbkJ1aWxkZXIgewogIGZpbmFsIEV4dGVuc2lvbiBfZXh0ZW5zaW9uOwoKICBTb3VyY2VFeHRlbnNpb25CdWlsZGVyKAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBUeXBlQnVpbGRlciBvblR5cGUsCiAgICAgIFNjb3BlIHNjb3BlLAogICAgICBMaWJyYXJ5QnVpbGRlciBwYXJlbnQsCiAgICAgIGludCBzdGFydE9mZnNldCwKICAgICAgaW50IG5hbWVPZmZzZXQsCiAgICAgIGludCBlbmRPZmZzZXQpCiAgICAgIDogX2V4dGVuc2lvbiA9IG5ldyBFeHRlbnNpb24oCiAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgIGZpbGVVcmk6IHBhcmVudC5maWxlVXJpLAogICAgICAgICAgICB0eXBlUGFyYW1ldGVyczoKICAgICAgICAgICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIudHlwZVBhcmFtZXRlcnNGcm9tQnVpbGRlcnModHlwZVBhcmFtZXRlcnMpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gbmFtZU9mZnNldCwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCBuYW1lLCBwYXJlbnQsIG5hbWVPZmZzZXQsIHNjb3BlLAogICAgICAgICAgICB0eXBlUGFyYW1ldGVycywgb25UeXBlKTsKCiAgRXh0ZW5zaW9uIGJ1aWxkKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpYnJhcnlCdWlsZGVyIGNvcmVMaWJyYXJ5KSB7CiAgICB2b2lkIGJ1aWxkQnVpbGRlcnMoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICAgICAgZG8gewogICAgICAgIGlmIChkZWNsYXJhdGlvbi5wYXJlbnQgIT0gdGhpcykgewogICAgICAgICAgaWYgKGZpbGVVcmkgIT0gZGVjbGFyYXRpb24ucGFyZW50LmZpbGVVcmkpIHsKICAgICAgICAgICAgdW5leHBlY3RlZCgiJGZpbGVVcmkiLCAiJHtkZWNsYXJhdGlvbi5wYXJlbnQuZmlsZVVyaX0iLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1bmV4cGVjdGVkKGZ1bGxOYW1lRm9yRXJyb3JzLCBkZWNsYXJhdGlvbi5wYXJlbnQ/LmZ1bGxOYW1lRm9yRXJyb3JzLAogICAgICAgICAgICAgICAgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBGaWVsZEJ1aWxkZXIpIHsKICAgICAgICAgIEZpZWxkIGZpZWxkID0gZGVjbGFyYXRpb24uYnVpbGQobGlicmFyeSk7CiAgICAgICAgICBsaWJyYXJ5LnRhcmdldC5hZGRNZW1iZXIoZmllbGQpOwogICAgICAgICAgX2V4dGVuc2lvbi5tZW1iZXJzLmFkZChuZXcgRXh0ZW5zaW9uTWVtYmVyRGVzY3JpcHRvcigKICAgICAgICAgICAgICBuYW1lOiBuZXcgTmFtZShkZWNsYXJhdGlvbi5uYW1lLCBsaWJyYXJ5LnRhcmdldCksCiAgICAgICAgICAgICAgbWVtYmVyOiBmaWVsZC5yZWZlcmVuY2UsCiAgICAgICAgICAgICAgaXNTdGF0aWM6IGRlY2xhcmF0aW9uLmlzU3RhdGljKSk7CiAgICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBGdW5jdGlvbkJ1aWxkZXIpIHsKICAgICAgICAgIE1lbWJlciBmdW5jdGlvbiA9IGRlY2xhcmF0aW9uLmJ1aWxkKGxpYnJhcnkpOwogICAgICAgICAgbGlicmFyeS50YXJnZXQuYWRkTWVtYmVyKGZ1bmN0aW9uKTsKICAgICAgICAgIF9leHRlbnNpb24ubWVtYmVycy5hZGQobmV3IEV4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3IoCiAgICAgICAgICAgICAgbmFtZTogbmV3IE5hbWUoZGVjbGFyYXRpb24ubmFtZSwgbGlicmFyeS50YXJnZXQpLAogICAgICAgICAgICAgIG1lbWJlcjogZnVuY3Rpb24ucmVmZXJlbmNlLAogICAgICAgICAgICAgIGlzU3RhdGljOiBkZWNsYXJhdGlvbi5pc1N0YXRpYywKICAgICAgICAgICAgICBpc0V4dGVybmFsOiBkZWNsYXJhdGlvbi5pc0V4dGVybmFsLAogICAgICAgICAgICAgIGtpbmQ6IGRlY2xhcmF0aW9uLmtpbmQpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdW5oYW5kbGVkKCIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIsICJidWlsZEJ1aWxkZXJzIiwKICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBkZWNsYXJhdGlvbi5maWxlVXJpKTsKICAgICAgICB9CiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi5uZXh0OwogICAgICB9IHdoaWxlIChkZWNsYXJhdGlvbiAhPSBudWxsKTsKICAgIH0KCiAgICBzY29wZS5mb3JFYWNoKGJ1aWxkQnVpbGRlcnMpOwoKICAgIHNjb3BlLnNldHRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgc2V0dGVyKSB7CiAgICAgIEJ1aWxkZXIgbWVtYmVyID0gc2NvcGVCdWlsZGVyW25hbWVdOwogICAgICBpZiAobWVtYmVyID09IG51bGwgfHwKICAgICAgICAgICEobWVtYmVyLmlzRmllbGQgJiYgIW1lbWJlci5pc0ZpbmFsICYmICFtZW1iZXIuaXNDb25zdCB8fAogICAgICAgICAgICAgIG1lbWJlci5pc1JlZ3VsYXJNZXRob2QgJiYgbWVtYmVyLmlzU3RhdGljICYmIHNldHRlci5pc1N0YXRpYykpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKG1lbWJlci5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIgPT0KICAgICAgICAgIHNldHRlci5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlci53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBzZXR0ZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICAgIC8vIFRPRE8oYWhlKTogQ29udGV4dCBhcmd1bWVudCB0byBwcmV2aW91cyBtZXNzYWdlPwogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIHNldHRlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBDb250ZXh0IGFyZ3VtZW50IHRvIHByZXZpb3VzIG1lc3NhZ2U/CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0pOwoKICAgIF9leHRlbnNpb24ub25UeXBlID0gb25UeXBlPy5idWlsZChsaWJyYXJ5KTsKCiAgICByZXR1cm4gX2V4dGVuc2lvbjsKICB9Cn0KdQBOTjwBIiImLCorLCcwGCYoATYBHQkSJSwlLAE4HgEaJhUTMBoTHRcWFSQYJRxQJUQlAU47Cyo3UBoTUSYMMjQrQEAnMDU4LkBAKi4yKBFDPAooJQYBIgE6KxxETxAIMDBEKjxEKg9LKjxLKggIATABFwQCAUBwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3NvdXJjZV9leHRlbnNpb25fYnVpbGRlci5kYXJ0OHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9iYXNlL2luc3RydW1lbnRhdGlvbi5kYXJ0isYvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZSwgTWVtYmVyOwoKLy8vIENvbnZlcnQgJ+KGkicgdG8gJy0+JyBiZWNhdXNlICfihpInIGRvZXNuJ3Qgc2hvdyB1cCBpbiBzb21lIHRlcm1pbmFscy4KLy8vIFJlbW92ZSBwcmVmaXhlcyB0aGF0IGFyZSB1c2VkIHZlcnkgb2Z0ZW4gaW4gdGVzdHMuClN0cmluZyBfc2hvcnRlbkluc3RydW1lbnRhdGlvblN0cmluZyhTdHJpbmcgcykgPT4gcwogICAgLnJlcGxhY2VBbGwoJ+KGkicsICctPicpCiAgICAucmVwbGFjZUFsbCgnZGFydC5jb3JlOjonLCAnJykKICAgIC5yZXBsYWNlQWxsKCdkYXJ0LmFzeW5jOjonLCAnJykKICAgIC5yZXBsYWNlQWxsKCd0ZXN0OjonLCAnJyk7CgovLy8gSW50ZXJmYWNlIHByb3ZpZGluZyB0aGUgYWJpbGl0eSB0byByZWNvcmQgcHJvcGVydHkvdmFsdWUgcGFpcnMgYXNzb2NpYXRlZAovLy8gd2l0aCBzb3VyY2UgZmlsZSBsb2NhdGlvbnMuICBJbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCmFic3RyYWN0IGNsYXNzIEluc3RydW1lbnRhdGlvbiB7CiAgLy8vIFJlY29yZHMgYSBwcm9wZXJ0eS92YWx1ZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gVVJJIGFuZCBvZmZzZXQuCiAgdm9pZCByZWNvcmQoVXJpIHVyaSwgaW50IG9mZnNldCwgU3RyaW5nIHByb3BlcnR5LCBJbnN0cnVtZW50YXRpb25WYWx1ZSB2YWx1ZSk7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHZhbHVlcyByZWNvcmRlZCBieSBbSW5zdHJ1bWVudGF0aW9uXS4KYWJzdHJhY3QgY2xhc3MgSW5zdHJ1bWVudGF0aW9uVmFsdWUgewogIGNvbnN0IEluc3RydW1lbnRhdGlvblZhbHVlKCk7CgogIC8vLyBDaGVja3MgaWYgdGhlIGdpdmVuIFN0cmluZyBpcyBhbiBhY2N1cmF0ZSBkZXNjcmlwdGlvbiBvZiB0aGlzIHZhbHVlLgogIC8vLwogIC8vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBqdXN0IGNoZWNrcyBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgcmV0dXJuIHZhbHVlCiAgLy8vIG9mIFt0b1N0cmluZ10sIGhvd2V2ZXIgZGVyaXZlZCBjbGFzc2VzIG1heSB3YW50IGEgbW9yZSBzb3BoaXN0aWNhdGVkCiAgLy8vIGltcGxlbWVudGF0aW9uIChlLmcuIHRvIGFsbG93IGFiYnJldmlhdGlvbnMgaW4gdGhlIGRlc2NyaXB0aW9uKS4KICAvLy8KICAvLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgaW52YXJpYW50IGhvbGRzOgogIC8vLyBgdGhpcy5tYXRjaGVzKHRoaXMudG9TdHJpbmcoKSlgIHNob3VsZCBhbHdheXMgcmV0dXJuIGB0cnVlYC4KICBib29sIG1hdGNoZXMoU3RyaW5nIGRlc2NyaXB0aW9uKSA9PiBkZXNjcmlwdGlvbiA9PSB0b1N0cmluZygpOwp9CgovLy8gSW5zdGFuY2Ugb2YgW0luc3RydW1lbnRhdGlvblZhbHVlXSBkZXNjcmliaW5nIGEgW01lbWJlcl0uCmNsYXNzIEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVmFsdWUgewogIGZpbmFsIE1lbWJlciBtZW1iZXI7CgogIEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKHRoaXMubWVtYmVyKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX3Nob3J0ZW5JbnN0cnVtZW50YXRpb25TdHJpbmcobWVtYmVyLnRvU3RyaW5nKCkpOwp9CgovLy8gSW5zdGFuY2Ugb2YgW0luc3RydW1lbnRhdGlvblZhbHVlXSBkZXNjcmliaW5nIGEgW0RhcnRUeXBlXS4KY2xhc3MgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVmFsdWUgewogIGZpbmFsIERhcnRUeXBlIHR5cGU7CgogIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZSh0aGlzLnR5cGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfc2hvcnRlbkluc3RydW1lbnRhdGlvblN0cmluZyh0eXBlLnRvU3RyaW5nKCkpOwp9CgovLy8gSW5zdGFuY2Ugb2YgW0luc3RydW1lbnRhdGlvblZhbHVlXSBkZXNjcmliaW5nIGEgbGlzdCBvZiBbRGFydFR5cGVdcy4KY2xhc3MgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJncyBleHRlbmRzIEluc3RydW1lbnRhdGlvblZhbHVlIHsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlczsKCiAgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJncyh0aGlzLnR5cGVzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gdHlwZXMKICAgICAgLm1hcCgodHlwZSkgPT4gbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZSh0eXBlKS50b1N0cmluZygpKQogICAgICAuam9pbignLCAnKTsKfQoKLy8vIEluc3RhbmNlIG9mIFtJbnN0cnVtZW50YXRpb25WYWx1ZV0gd2hpY2ggb25seSBtYXRjaGVzIHRoZSBnaXZlbiBsaXRlcmFsCi8vLyBzdHJpbmcuCmNsYXNzIEluc3RydW1lbnRhdGlvblZhbHVlTGl0ZXJhbCBleHRlbmRzIEluc3RydW1lbnRhdGlvblZhbHVlIHsKICBmaW5hbCBTdHJpbmcgdmFsdWU7CgogIGNvbnN0IEluc3RydW1lbnRhdGlvblZhbHVlTGl0ZXJhbCh0aGlzLnZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gdmFsdWU7Cn0KUABOTjwBOAFHNzQbIyQfAU5BIU5RAgE4JiABSwZQS0cGPkNBAgE+QxcBLgEMSQIBQEEXASoBDEcCAUlFHgEvAQwdRxMCAUwMQRYBMQEMHgIBL3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9iYXNlL2luc3RydW1lbnRhdGlvbi5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdHJhbnNmb3JtX2NvbGxlY3Rpb25zLmRhcnTAAFzALy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudHJhbnNmb3JtX2NvbGxlY3Rpb25zOwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBBc0V4cHJlc3Npb24sCiAgICAgICAgQmxvY2ssCiAgICAgICAgQmxvY2tFeHByZXNzaW9uLAogICAgICAgIENsYXNzLAogICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbiwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQsCiAgICAgICAgRmllbGQsCiAgICAgICAgRm9ySW5TdGF0ZW1lbnQsCiAgICAgICAgRm9yU3RhdGVtZW50LAogICAgICAgIElmU3RhdGVtZW50LAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGV0LAogICAgICAgIExpc3RDb25jYXRlbmF0aW9uLAogICAgICAgIExpc3RMaXRlcmFsLAogICAgICAgIE1hcENvbmNhdGVuYXRpb24sCiAgICAgICAgTWFwRW50cnksCiAgICAgICAgTWFwTGl0ZXJhbCwKICAgICAgICBNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIE5hbWUsCiAgICAgICAgTm90LAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9wZXJ0eUdldCwKICAgICAgICBTZXRDb25jYXRlbmF0aW9uLAogICAgICAgIFNldExpdGVyYWwsCiAgICAgICAgU3RhdGVtZW50LAogICAgICAgIFN0YXRpY0ludm9jYXRpb24sCiAgICAgICAgdHJhbnNmb3JtTGlzdCwKICAgICAgICBUcmVlTm9kZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZhcmlhYmxlR2V0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC92aXNpdG9yLmRhcnQnIHNob3cgVHJhbnNmb3JtZXI7CgppbXBvcnQgJ2NvbGxlY3Rpb25zLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29udHJvbEZsb3dFbGVtZW50LAogICAgICAgIENvbnRyb2xGbG93TWFwRW50cnksCiAgICAgICAgRm9yRWxlbWVudCwKICAgICAgICBGb3JJbkVsZW1lbnQsCiAgICAgICAgRm9ySW5NYXBFbnRyeSwKICAgICAgICBGb3JNYXBFbnRyeSwKICAgICAgICBJZkVsZW1lbnQsCiAgICAgICAgSWZNYXBFbnRyeSwKICAgICAgICBTcHJlYWRFbGVtZW50LAogICAgICAgIFNwcmVhZE1hcEVudHJ5OwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IGdldEZpbGVVcmksIHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgppbXBvcnQgJ3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JyBzaG93IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHk7CgpjbGFzcyBDb2xsZWN0aW9uVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7CiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKICBmaW5hbCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50OwogIGZpbmFsIFByb2NlZHVyZSBsaXN0QWRkOwogIGZpbmFsIFByb2NlZHVyZSBzZXRGYWN0b3J5OwogIGZpbmFsIFByb2NlZHVyZSBzZXRBZGQ7CiAgZmluYWwgUHJvY2VkdXJlIG9iamVjdEVxdWFsczsKICBmaW5hbCBQcm9jZWR1cmUgbWFwRW50cmllczsKICBmaW5hbCBQcm9jZWR1cmUgbWFwUHV0OwogIGZpbmFsIENsYXNzIG1hcEVudHJ5Q2xhc3M7CiAgZmluYWwgRmllbGQgbWFwRW50cnlLZXk7CiAgZmluYWwgRmllbGQgbWFwRW50cnlWYWx1ZTsKCiAgc3RhdGljIFByb2NlZHVyZSBfZmluZFNldEZhY3RvcnkoQ29yZVR5cGVzIGNvcmVUeXBlcykgewogICAgUHJvY2VkdXJlIGZhY3RvcnkgPSBjb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnU2V0JywgJycpOwogICAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSBib2R5ID0gZmFjdG9yeT8uZnVuY3Rpb24/LmJvZHk7CiAgICByZXR1cm4gYm9keT8udGFyZ2V0OwogIH0KCiAgQ29sbGVjdGlvblRyYW5zZm9ybWVyKFNvdXJjZUxvYWRlciBsb2FkZXIpCiAgICAgIDogY29yZVR5cGVzID0gbG9hZGVyLmNvcmVUeXBlcywKICAgICAgICB0eXBlRW52aXJvbm1lbnQgPSBsb2FkZXIudHlwZUluZmVyZW5jZUVuZ2luZS50eXBlU2NoZW1hRW52aXJvbm1lbnQsCiAgICAgICAgbGlzdEFkZCA9IGxvYWRlci5jb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnTGlzdCcsICdhZGQnKSwKICAgICAgICBzZXRGYWN0b3J5ID0gX2ZpbmRTZXRGYWN0b3J5KGxvYWRlci5jb3JlVHlwZXMpLAogICAgICAgIHNldEFkZCA9IGxvYWRlci5jb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnU2V0JywgJ2FkZCcpLAogICAgICAgIG9iamVjdEVxdWFscyA9CiAgICAgICAgICAgIGxvYWRlci5jb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnT2JqZWN0JywgJz09JyksCiAgICAgICAgbWFwRW50cmllcyA9CiAgICAgICAgICAgIGxvYWRlci5jb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnTWFwJywgJ2dldDplbnRyaWVzJyksCiAgICAgICAgbWFwUHV0ID0gbG9hZGVyLmNvcmVUeXBlcy5pbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdNYXAnLCAnW109JyksCiAgICAgICAgbWFwRW50cnlDbGFzcyA9CiAgICAgICAgICAgIGxvYWRlci5jb3JlVHlwZXMuaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdNYXBFbnRyeScpLAogICAgICAgIG1hcEVudHJ5S2V5ID0KICAgICAgICAgICAgbG9hZGVyLmNvcmVUeXBlcy5pbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdNYXBFbnRyeScsICdrZXknKSwKICAgICAgICBtYXBFbnRyeVZhbHVlID0KICAgICAgICAgICAgbG9hZGVyLmNvcmVUeXBlcy5pbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdNYXBFbnRyeScsICd2YWx1ZScpOwoKICBUcmVlTm9kZSBfdHJhbnNsYXRlTGlzdE9yU2V0KAogICAgICBFeHByZXNzaW9uIG5vZGUsIERhcnRUeXBlIGVsZW1lbnRUeXBlLCBMaXN0PEV4cHJlc3Npb24+IGVsZW1lbnRzLAogICAgICB7Ym9vbCBpc1NldDogZmFsc2V9KSB7CiAgICAvLyBUcmFuc2xhdGUgZWxlbWVudHMgaW4gcGxhY2UgdXAgdG8gdGhlIGZpcnN0IG5vbi1leHByZXNzaW9uLCBpZiBhbnkuCiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGlmIChlbGVtZW50c1tpXSBpcyBDb250cm9sRmxvd0VsZW1lbnQpIGJyZWFrOwogICAgICBlbGVtZW50c1tpXSA9IGVsZW1lbnRzW2ldLmFjY2VwdCh0aGlzKS4ucGFyZW50ID0gbm9kZTsKICAgIH0KCiAgICAvLyBJZiB0aGVyZSB3ZXJlIG9ubHkgZXhwcmVzc2lvbnMsIHdlIGFyZSBkb25lLgogICAgaWYgKGkgPT0gZWxlbWVudHMubGVuZ3RoKSByZXR1cm4gbm9kZTsKCiAgICAvLyBCdWlsZCBhIGJsb2NrIGV4cHJlc3Npb24gYW5kIGNyZWF0ZSBhbiBlbXB0eSBsaXN0IG9yIHNldC4KICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVzdWx0OwogICAgaWYgKGlzU2V0KSB7CiAgICAgIC8vIFRPRE8oa21pbGxpa2luKTogV2hlbiBhbGwgdGhlIGJhY2sgZW5kcyBoYW5kbGUgc2V0IGxpdGVyYWxzIHdlIGNhbiB1c2UKICAgICAgLy8gb25lIGhlcmUuCiAgICAgIHJlc3VsdCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgICAgbmV3IFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICAgICAgc2V0RmFjdG9yeSwgbmV3IEFyZ3VtZW50cyhbXSwgdHlwZXM6IFtlbGVtZW50VHlwZV0pKSwKICAgICAgICAgIHR5cGU6IG5ldyBJbnRlcmZhY2VUeXBlKGNvcmVUeXBlcy5zZXRDbGFzcywgW2VsZW1lbnRUeXBlXSksCiAgICAgICAgICBpc0ZpbmFsOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgICAgbmV3IExpc3RMaXRlcmFsKFtdLCB0eXBlQXJndW1lbnQ6IGVsZW1lbnRUeXBlKSwKICAgICAgICAgIHR5cGU6IG5ldyBJbnRlcmZhY2VUeXBlKGNvcmVUeXBlcy5saXN0Q2xhc3MsIFtlbGVtZW50VHlwZV0pLAogICAgICAgICAgaXNGaW5hbDogdHJ1ZSk7CiAgICB9CiAgICBMaXN0PFN0YXRlbWVudD4gYm9keSA9IFtyZXN1bHRdOwogICAgLy8gQWRkIHRoZSBlbGVtZW50cyB1cCB0byB0aGUgZmlyc3Qgbm9uLWV4cHJlc3Npb24uCiAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7ICsraikgewogICAgICBfYWRkRXhwcmVzc2lvbkVsZW1lbnQoZWxlbWVudHNbal0sIGlzU2V0LCByZXN1bHQsIGJvZHkpOwogICAgfQogICAgLy8gVHJhbnNsYXRlIHRoZSBlbGVtZW50cyBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBub24tZXhwcmVzc2lvbi4KICAgIGZvciAoOyBpIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgX3RyYW5zbGF0ZUVsZW1lbnQoZWxlbWVudHNbaV0sIGVsZW1lbnRUeXBlLCBpc1NldCwgcmVzdWx0LCBib2R5KTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEJsb2NrRXhwcmVzc2lvbihuZXcgQmxvY2soYm9keSksIG5ldyBWYXJpYWJsZUdldChyZXN1bHQpKTsKICB9CgogIHZvaWQgX3RyYW5zbGF0ZUVsZW1lbnQoRXhwcmVzc2lvbiBlbGVtZW50LCBEYXJ0VHlwZSBlbGVtZW50VHlwZSwgYm9vbCBpc1NldCwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiByZXN1bHQsIExpc3Q8U3RhdGVtZW50PiBib2R5KSB7CiAgICBpZiAoZWxlbWVudCBpcyBTcHJlYWRFbGVtZW50KSB7CiAgICAgIF90cmFuc2xhdGVTcHJlYWRFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnRUeXBlLCBpc1NldCwgcmVzdWx0LCBib2R5KTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpcyBJZkVsZW1lbnQpIHsKICAgICAgX3RyYW5zbGF0ZUlmRWxlbWVudChlbGVtZW50LCBlbGVtZW50VHlwZSwgaXNTZXQsIHJlc3VsdCwgYm9keSk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgRm9yRWxlbWVudCkgewogICAgICBfdHJhbnNsYXRlRm9yRWxlbWVudChlbGVtZW50LCBlbGVtZW50VHlwZSwgaXNTZXQsIHJlc3VsdCwgYm9keSk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgRm9ySW5FbGVtZW50KSB7CiAgICAgIF90cmFuc2xhdGVGb3JJbkVsZW1lbnQoZWxlbWVudCwgZWxlbWVudFR5cGUsIGlzU2V0LCByZXN1bHQsIGJvZHkpOwogICAgfSBlbHNlIHsKICAgICAgX2FkZEV4cHJlc3Npb25FbGVtZW50KGVsZW1lbnQuYWNjZXB0KHRoaXMpLCBpc1NldCwgcmVzdWx0LCBib2R5KTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEV4cHJlc3Npb25FbGVtZW50KEV4cHJlc3Npb24gZWxlbWVudCwgYm9vbCBpc1NldCwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiByZXN1bHQsIExpc3Q8U3RhdGVtZW50PiBib2R5KSB7CiAgICBib2R5LmFkZChuZXcgRXhwcmVzc2lvblN0YXRlbWVudChuZXcgTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBuZXcgVmFyaWFibGVHZXQocmVzdWx0KSwKICAgICAgICBuZXcgTmFtZSgnYWRkJyksCiAgICAgICAgbmV3IEFyZ3VtZW50cyhbZWxlbWVudF0pLAogICAgICAgIGlzU2V0ID8gc2V0QWRkIDogbGlzdEFkZCkpKTsKICB9CgogIHZvaWQgX3RyYW5zbGF0ZUlmRWxlbWVudChJZkVsZW1lbnQgZWxlbWVudCwgRGFydFR5cGUgZWxlbWVudFR5cGUsIGJvb2wgaXNTZXQsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVzdWx0LCBMaXN0PFN0YXRlbWVudD4gYm9keSkgewogICAgTGlzdDxTdGF0ZW1lbnQ+IHRoZW5TdGF0ZW1lbnRzID0gW107CiAgICBfdHJhbnNsYXRlRWxlbWVudChlbGVtZW50LnRoZW4sIGVsZW1lbnRUeXBlLCBpc1NldCwgcmVzdWx0LCB0aGVuU3RhdGVtZW50cyk7CiAgICBMaXN0PFN0YXRlbWVudD4gZWxzZVN0YXRlbWVudHM7CiAgICBpZiAoZWxlbWVudC5vdGhlcndpc2UgIT0gbnVsbCkgewogICAgICBfdHJhbnNsYXRlRWxlbWVudChlbGVtZW50Lm90aGVyd2lzZSwgZWxlbWVudFR5cGUsIGlzU2V0LCByZXN1bHQsCiAgICAgICAgICBlbHNlU3RhdGVtZW50cyA9IDxTdGF0ZW1lbnQ+W10pOwogICAgfQogICAgU3RhdGVtZW50IHRoZW5Cb2R5ID0gdGhlblN0YXRlbWVudHMubGVuZ3RoID09IDEKICAgICAgICA/IHRoZW5TdGF0ZW1lbnRzLmZpcnN0CiAgICAgICAgOiBuZXcgQmxvY2sodGhlblN0YXRlbWVudHMpOwogICAgU3RhdGVtZW50IGVsc2VCb2R5OwogICAgaWYgKGVsc2VTdGF0ZW1lbnRzICE9IG51bGwgJiYgZWxzZVN0YXRlbWVudHMuaXNOb3RFbXB0eSkgewogICAgICBlbHNlQm9keSA9IGVsc2VTdGF0ZW1lbnRzLmxlbmd0aCA9PSAxCiAgICAgICAgICA/IGVsc2VTdGF0ZW1lbnRzLmZpcnN0CiAgICAgICAgICA6IG5ldyBCbG9jayhlbHNlU3RhdGVtZW50cyk7CiAgICB9CiAgICBib2R5LmFkZChuZXcgSWZTdGF0ZW1lbnQoZWxlbWVudC5jb25kaXRpb24uYWNjZXB0KHRoaXMpLCB0aGVuQm9keSwgZWxzZUJvZHkpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVsZW1lbnQuZmlsZU9mZnNldCk7CiAgfQoKICB2b2lkIF90cmFuc2xhdGVGb3JFbGVtZW50KEZvckVsZW1lbnQgZWxlbWVudCwgRGFydFR5cGUgZWxlbWVudFR5cGUsCiAgICAgIGJvb2wgaXNTZXQsIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVzdWx0LCBMaXN0PFN0YXRlbWVudD4gYm9keSkgewogICAgTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSA8U3RhdGVtZW50PltdOwogICAgX3RyYW5zbGF0ZUVsZW1lbnQoZWxlbWVudC5ib2R5LCBlbGVtZW50VHlwZSwgaXNTZXQsIHJlc3VsdCwgc3RhdGVtZW50cyk7CiAgICBTdGF0ZW1lbnQgbG9vcEJvZHkgPQogICAgICAgIHN0YXRlbWVudHMubGVuZ3RoID09IDEgPyBzdGF0ZW1lbnRzLmZpcnN0IDogbmV3IEJsb2NrKHN0YXRlbWVudHMpOwogICAgRm9yU3RhdGVtZW50IGxvb3AgPSBuZXcgRm9yU3RhdGVtZW50KGVsZW1lbnQudmFyaWFibGVzLAogICAgICAgIGVsZW1lbnQuY29uZGl0aW9uPy5hY2NlcHQodGhpcyksIGVsZW1lbnQudXBkYXRlcywgbG9vcEJvZHkpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVsZW1lbnQuZmlsZU9mZnNldDsKICAgIHRyYW5zZm9ybUxpc3QobG9vcC52YXJpYWJsZXMsIHRoaXMsIGxvb3ApOwogICAgdHJhbnNmb3JtTGlzdChsb29wLnVwZGF0ZXMsIHRoaXMsIGxvb3ApOwogICAgYm9keS5hZGQobG9vcCk7CiAgfQoKICB2b2lkIF90cmFuc2xhdGVGb3JJbkVsZW1lbnQoRm9ySW5FbGVtZW50IGVsZW1lbnQsIERhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICBib29sIGlzU2V0LCBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkpIHsKICAgIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzOwogICAgU3RhdGVtZW50IHByb2xvZ3VlID0gZWxlbWVudC5wcm9sb2d1ZTsKICAgIGlmIChwcm9sb2d1ZSA9PSBudWxsKSB7CiAgICAgIHN0YXRlbWVudHMgPSA8U3RhdGVtZW50PltdOwogICAgfSBlbHNlIHsKICAgICAgcHJvbG9ndWUgPSBwcm9sb2d1ZS5hY2NlcHQodGhpcyk7CiAgICAgIHN0YXRlbWVudHMgPQogICAgICAgICAgcHJvbG9ndWUgaXMgQmxvY2sgPyBwcm9sb2d1ZS5zdGF0ZW1lbnRzIDogPFN0YXRlbWVudD5bcHJvbG9ndWVdOwogICAgfQogICAgX3RyYW5zbGF0ZUVsZW1lbnQoZWxlbWVudC5ib2R5LCBlbGVtZW50VHlwZSwgaXNTZXQsIHJlc3VsdCwgc3RhdGVtZW50cyk7CiAgICBTdGF0ZW1lbnQgbG9vcEJvZHkgPQogICAgICAgIHN0YXRlbWVudHMubGVuZ3RoID09IDEgPyBzdGF0ZW1lbnRzLmZpcnN0IDogbmV3IEJsb2NrKHN0YXRlbWVudHMpOwogICAgaWYgKGVsZW1lbnQucHJvYmxlbSAhPSBudWxsKSB7CiAgICAgIGJvZHkuYWRkKG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KGVsZW1lbnQucHJvYmxlbS5hY2NlcHQodGhpcykpKTsKICAgIH0KICAgIGJvZHkuYWRkKG5ldyBGb3JJblN0YXRlbWVudCgKICAgICAgICBlbGVtZW50LnZhcmlhYmxlLCBlbGVtZW50Lml0ZXJhYmxlLmFjY2VwdCh0aGlzKSwgbG9vcEJvZHksCiAgICAgICAgaXNBc3luYzogZWxlbWVudC5pc0FzeW5jKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbGVtZW50LmZpbGVPZmZzZXQpOwogIH0KCiAgdm9pZCBfdHJhbnNsYXRlU3ByZWFkRWxlbWVudChTcHJlYWRFbGVtZW50IGVsZW1lbnQsIERhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICBib29sIGlzU2V0LCBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkpIHsKICAgIEV4cHJlc3Npb24gdmFsdWUgPSBlbGVtZW50LmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpOwogICAgLy8gTnVsbC1hd2FyZSBzcHJlYWRzIHJlcXVpcmUgdGVzdGluZyB0aGUgc3ViZXhwcmVzc2lvbidzIHZhbHVlLgogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB0ZW1wOwogICAgaWYgKGVsZW1lbnQuaXNOdWxsQXdhcmUpIHsKICAgICAgdGVtcCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHZhbHVlLAogICAgICAgICAgdHlwZTogY29uc3QgRHluYW1pY1R5cGUoKSwgaXNGaW5hbDogdHJ1ZSk7CiAgICAgIGJvZHkuYWRkKHRlbXApOwogICAgICB2YWx1ZSA9IG5ldyBWYXJpYWJsZUdldCh0ZW1wKTsKICAgIH0KCiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGVsdDsKICAgIFN0YXRlbWVudCBsb29wQm9keTsKICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09IG51bGwgfHwKICAgICAgICAhdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKGVsZW1lbnQuZWxlbWVudFR5cGUsIGVsZW1lbnRUeXBlKSkgewogICAgICBlbHQgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihudWxsLAogICAgICAgICAgdHlwZTogY29uc3QgRHluYW1pY1R5cGUoKSwgaXNGaW5hbDogdHJ1ZSk7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gY2FzdGVkVmFyID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoCiAgICAgICAgICBuZXcgQXNFeHByZXNzaW9uKG5ldyBWYXJpYWJsZUdldChlbHQpLCBlbGVtZW50VHlwZSkKICAgICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZWxlbWVudC5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSk7CiAgICAgIGxvb3BCb2R5ID0gbmV3IEJsb2NrKDxTdGF0ZW1lbnQ+WwogICAgICAgIGNhc3RlZFZhciwKICAgICAgICBuZXcgRXhwcmVzc2lvblN0YXRlbWVudChuZXcgTWV0aG9kSW52b2NhdGlvbigKICAgICAgICAgICAgbmV3IFZhcmlhYmxlR2V0KHJlc3VsdCksCiAgICAgICAgICAgIG5ldyBOYW1lKCdhZGQnKSwKICAgICAgICAgICAgbmV3IEFyZ3VtZW50cyhbbmV3IFZhcmlhYmxlR2V0KGNhc3RlZFZhcildKSwKICAgICAgICAgICAgaXNTZXQgPyBzZXRBZGQgOiBsaXN0QWRkKSkKICAgICAgXSk7CiAgICB9IGVsc2UgewogICAgICBlbHQgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihudWxsLCB0eXBlOiBlbGVtZW50VHlwZSwgaXNGaW5hbDogdHJ1ZSk7CiAgICAgIGxvb3BCb2R5ID0gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQobmV3IE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICBuZXcgVmFyaWFibGVHZXQocmVzdWx0KSwKICAgICAgICAgIG5ldyBOYW1lKCdhZGQnKSwKICAgICAgICAgIG5ldyBBcmd1bWVudHMoW25ldyBWYXJpYWJsZUdldChlbHQpXSksCiAgICAgICAgICBpc1NldCA/IHNldEFkZCA6IGxpc3RBZGQpKTsKICAgIH0KICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBuZXcgRm9ySW5TdGF0ZW1lbnQoZWx0LCB2YWx1ZSwgbG9vcEJvZHkpOwoKICAgIGlmIChlbGVtZW50LmlzTnVsbEF3YXJlKSB7CiAgICAgIHN0YXRlbWVudCA9IG5ldyBJZlN0YXRlbWVudCgKICAgICAgICAgIG5ldyBOb3QobmV3IE1ldGhvZEludm9jYXRpb24obmV3IFZhcmlhYmxlR2V0KHRlbXApLCBuZXcgTmFtZSgnPT0nKSwKICAgICAgICAgICAgICBuZXcgQXJndW1lbnRzKFtuZXcgTnVsbExpdGVyYWwoKV0pLCBvYmplY3RFcXVhbHMpKSwKICAgICAgICAgIHN0YXRlbWVudCwKICAgICAgICAgIG51bGwpOwogICAgfQogICAgYm9keS5hZGQoc3RhdGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIFRyZWVOb2RlIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gX3RyYW5zbGF0ZUNvbnN0TGlzdE9yU2V0KG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCBub2RlLmV4cHJlc3Npb25zLAogICAgICAgICAgaXNTZXQ6IGZhbHNlKTsKICAgIH0KCiAgICByZXR1cm4gX3RyYW5zbGF0ZUxpc3RPclNldChub2RlLCBub2RlLnR5cGVBcmd1bWVudCwgbm9kZS5leHByZXNzaW9ucywKICAgICAgICBpc1NldDogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHJlZU5vZGUgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gX3RyYW5zbGF0ZUNvbnN0TGlzdE9yU2V0KG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCBub2RlLmV4cHJlc3Npb25zLAogICAgICAgICAgaXNTZXQ6IHRydWUpOwogICAgfQoKICAgIHJldHVybiBfdHJhbnNsYXRlTGlzdE9yU2V0KG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCBub2RlLmV4cHJlc3Npb25zLAogICAgICAgIGlzU2V0OiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIFRyZWVOb2RlIHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIF90cmFuc2xhdGVDb25zdE1hcChub2RlKTsKICAgIH0KCiAgICAvLyBUcmFuc2xhdGUgZW50cmllcyBpbiBwbGFjZSB1cCB0byB0aGUgZmlyc3QgY29udHJvbC1mbG93IGVudHJ5LCBpZiBhbnkuCiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKDsgaSA8IG5vZGUuZW50cmllcy5sZW5ndGg7ICsraSkgewogICAgICBpZiAobm9kZS5lbnRyaWVzW2ldIGlzIENvbnRyb2xGbG93TWFwRW50cnkpIGJyZWFrOwogICAgICBub2RlLmVudHJpZXNbaV0gPSBub2RlLmVudHJpZXNbaV0uYWNjZXB0KHRoaXMpLi5wYXJlbnQgPSBub2RlOwogICAgfQoKICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gY29udHJvbC1mbG93IGVudHJpZXMgd2UgYXJlIGRvbmUuCiAgICBpZiAoaSA9PSBub2RlLmVudHJpZXMubGVuZ3RoKSByZXR1cm4gbm9kZTsKCiAgICAvLyBCdWlsZCBhIGJsb2NrIGV4cHJlc3Npb24gYW5kIGNyZWF0ZSBhbiBlbXB0eSBtYXAuCiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgIG5ldyBNYXBMaXRlcmFsKFtdLCBrZXlUeXBlOiBub2RlLmtleVR5cGUsIHZhbHVlVHlwZTogbm9kZS52YWx1ZVR5cGUpLAogICAgICAgIHR5cGU6IG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgICAgICBjb3JlVHlwZXMubWFwQ2xhc3MsIFtub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlXSksCiAgICAgICAgaXNGaW5hbDogdHJ1ZSk7CiAgICBMaXN0PFN0YXRlbWVudD4gYm9keSA9IFtyZXN1bHRdOwogICAgLy8gQWRkIGFsbCB0aGUgZW50cmllcyB1cCB0byB0aGUgZmlyc3QgY29udHJvbC1mbG93IGVudHJ5LgogICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyArK2opIHsKICAgICAgX2FkZE5vcm1hbEVudHJ5KG5vZGUuZW50cmllc1tqXSwgcmVzdWx0LCBib2R5KTsKICAgIH0KICAgIGZvciAoOyBpIDwgbm9kZS5lbnRyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgIF90cmFuc2xhdGVFbnRyeSgKICAgICAgICAgIG5vZGUuZW50cmllc1tpXSwgbm9kZS5rZXlUeXBlLCBub2RlLnZhbHVlVHlwZSwgcmVzdWx0LCBib2R5KTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEJsb2NrRXhwcmVzc2lvbihuZXcgQmxvY2soYm9keSksIG5ldyBWYXJpYWJsZUdldChyZXN1bHQpKTsKICB9CgogIHZvaWQgX3RyYW5zbGF0ZUVudHJ5KE1hcEVudHJ5IGVudHJ5LCBEYXJ0VHlwZSBrZXlUeXBlLCBEYXJ0VHlwZSB2YWx1ZVR5cGUsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVzdWx0LCBMaXN0PFN0YXRlbWVudD4gYm9keSkgewogICAgaWYgKGVudHJ5IGlzIFNwcmVhZE1hcEVudHJ5KSB7CiAgICAgIF90cmFuc2xhdGVTcHJlYWRFbnRyeShlbnRyeSwga2V5VHlwZSwgdmFsdWVUeXBlLCByZXN1bHQsIGJvZHkpOwogICAgfSBlbHNlIGlmIChlbnRyeSBpcyBJZk1hcEVudHJ5KSB7CiAgICAgIF90cmFuc2xhdGVJZkVudHJ5KGVudHJ5LCBrZXlUeXBlLCB2YWx1ZVR5cGUsIHJlc3VsdCwgYm9keSk7CiAgICB9IGVsc2UgaWYgKGVudHJ5IGlzIEZvck1hcEVudHJ5KSB7CiAgICAgIF90cmFuc2xhdGVGb3JFbnRyeShlbnRyeSwga2V5VHlwZSwgdmFsdWVUeXBlLCByZXN1bHQsIGJvZHkpOwogICAgfSBlbHNlIGlmIChlbnRyeSBpcyBGb3JJbk1hcEVudHJ5KSB7CiAgICAgIF90cmFuc2xhdGVGb3JJbkVudHJ5KGVudHJ5LCBrZXlUeXBlLCB2YWx1ZVR5cGUsIHJlc3VsdCwgYm9keSk7CiAgICB9IGVsc2UgewogICAgICBfYWRkTm9ybWFsRW50cnkoZW50cnkuYWNjZXB0KHRoaXMpLCByZXN1bHQsIGJvZHkpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkTm9ybWFsRW50cnkoCiAgICAgIE1hcEVudHJ5IGVudHJ5LCBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkpIHsKICAgIGJvZHkuYWRkKG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KG5ldyBNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIG5ldyBWYXJpYWJsZUdldChyZXN1bHQpLAogICAgICAgIG5ldyBOYW1lKCdbXT0nKSwKICAgICAgICBuZXcgQXJndW1lbnRzKFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSksCiAgICAgICAgbWFwUHV0KSkpOwogIH0KCiAgdm9pZCBfdHJhbnNsYXRlSWZFbnRyeShJZk1hcEVudHJ5IGVudHJ5LCBEYXJ0VHlwZSBrZXlUeXBlLCBEYXJ0VHlwZSB2YWx1ZVR5cGUsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVzdWx0LCBMaXN0PFN0YXRlbWVudD4gYm9keSkgewogICAgTGlzdDxTdGF0ZW1lbnQ+IHRoZW5Cb2R5ID0gW107CiAgICBfdHJhbnNsYXRlRW50cnkoZW50cnkudGhlbiwga2V5VHlwZSwgdmFsdWVUeXBlLCByZXN1bHQsIHRoZW5Cb2R5KTsKICAgIExpc3Q8U3RhdGVtZW50PiBlbHNlQm9keTsKICAgIGlmIChlbnRyeS5vdGhlcndpc2UgIT0gbnVsbCkgewogICAgICBfdHJhbnNsYXRlRW50cnkoZW50cnkub3RoZXJ3aXNlLCBrZXlUeXBlLCB2YWx1ZVR5cGUsIHJlc3VsdCwKICAgICAgICAgIGVsc2VCb2R5ID0gPFN0YXRlbWVudD5bXSk7CiAgICB9CiAgICBTdGF0ZW1lbnQgdGhlblN0YXRlbWVudCA9CiAgICAgICAgdGhlbkJvZHkubGVuZ3RoID09IDEgPyB0aGVuQm9keS5maXJzdCA6IG5ldyBCbG9jayh0aGVuQm9keSk7CiAgICBTdGF0ZW1lbnQgZWxzZVN0YXRlbWVudDsKICAgIGlmIChlbHNlQm9keSAhPSBudWxsICYmIGVsc2VCb2R5LmlzTm90RW1wdHkpIHsKICAgICAgZWxzZVN0YXRlbWVudCA9CiAgICAgICAgICBlbHNlQm9keS5sZW5ndGggPT0gMSA/IGVsc2VCb2R5LmZpcnN0IDogbmV3IEJsb2NrKGVsc2VCb2R5KTsKICAgIH0KICAgIGJvZHkuYWRkKG5ldyBJZlN0YXRlbWVudCgKICAgICAgICBlbnRyeS5jb25kaXRpb24uYWNjZXB0KHRoaXMpLCB0aGVuU3RhdGVtZW50LCBlbHNlU3RhdGVtZW50KSk7CiAgfQoKICB2b2lkIF90cmFuc2xhdGVGb3JFbnRyeShGb3JNYXBFbnRyeSBlbnRyeSwgRGFydFR5cGUga2V5VHlwZSwKICAgICAgRGFydFR5cGUgdmFsdWVUeXBlLCBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkpIHsKICAgIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKICAgIF90cmFuc2xhdGVFbnRyeShlbnRyeS5ib2R5LCBrZXlUeXBlLCB2YWx1ZVR5cGUsIHJlc3VsdCwgc3RhdGVtZW50cyk7CiAgICBTdGF0ZW1lbnQgbG9vcEJvZHkgPQogICAgICAgIHN0YXRlbWVudHMubGVuZ3RoID09IDEgPyBzdGF0ZW1lbnRzLmZpcnN0IDogbmV3IEJsb2NrKHN0YXRlbWVudHMpOwogICAgRm9yU3RhdGVtZW50IGxvb3AgPSBuZXcgRm9yU3RhdGVtZW50KAogICAgICAgIGVudHJ5LnZhcmlhYmxlcywgZW50cnkuY29uZGl0aW9uPy5hY2NlcHQodGhpcyksIGVudHJ5LnVwZGF0ZXMsIGxvb3BCb2R5KQogICAgICAuLmZpbGVPZmZzZXQgPSBlbnRyeS5maWxlT2Zmc2V0OwogICAgdHJhbnNmb3JtTGlzdChsb29wLnZhcmlhYmxlcywgdGhpcywgbG9vcCk7CiAgICB0cmFuc2Zvcm1MaXN0KGxvb3AudXBkYXRlcywgdGhpcywgbG9vcCk7CiAgICBib2R5LmFkZChsb29wKTsKICB9CgogIHZvaWQgX3RyYW5zbGF0ZUZvckluRW50cnkoRm9ySW5NYXBFbnRyeSBlbnRyeSwgRGFydFR5cGUga2V5VHlwZSwKICAgICAgRGFydFR5cGUgdmFsdWVUeXBlLCBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkpIHsKICAgIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzOwogICAgU3RhdGVtZW50IHByb2xvZ3VlID0gZW50cnkucHJvbG9ndWU7CiAgICBpZiAocHJvbG9ndWUgPT0gbnVsbCkgewogICAgICBzdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKICAgIH0gZWxzZSB7CiAgICAgIHByb2xvZ3VlID0gcHJvbG9ndWUuYWNjZXB0KHRoaXMpOwogICAgICBzdGF0ZW1lbnRzID0KICAgICAgICAgIHByb2xvZ3VlIGlzIEJsb2NrID8gcHJvbG9ndWUuc3RhdGVtZW50cyA6IDxTdGF0ZW1lbnQ+W3Byb2xvZ3VlXTsKICAgIH0KICAgIF90cmFuc2xhdGVFbnRyeShlbnRyeS5ib2R5LCBrZXlUeXBlLCB2YWx1ZVR5cGUsIHJlc3VsdCwgc3RhdGVtZW50cyk7CiAgICBTdGF0ZW1lbnQgbG9vcEJvZHkgPQogICAgICAgIHN0YXRlbWVudHMubGVuZ3RoID09IDEgPyBzdGF0ZW1lbnRzLmZpcnN0IDogbmV3IEJsb2NrKHN0YXRlbWVudHMpOwogICAgaWYgKGVudHJ5LnByb2JsZW0gIT0gbnVsbCkgewogICAgICBib2R5LmFkZChuZXcgRXhwcmVzc2lvblN0YXRlbWVudChlbnRyeS5wcm9ibGVtLmFjY2VwdCh0aGlzKSkpOwogICAgfQogICAgYm9keS5hZGQobmV3IEZvckluU3RhdGVtZW50KAogICAgICAgIGVudHJ5LnZhcmlhYmxlLCBlbnRyeS5pdGVyYWJsZS5hY2NlcHQodGhpcyksIGxvb3BCb2R5LAogICAgICAgIGlzQXN5bmM6IGVudHJ5LmlzQXN5bmMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVudHJ5LmZpbGVPZmZzZXQpOwogIH0KCiAgdm9pZCBfdHJhbnNsYXRlU3ByZWFkRW50cnkoU3ByZWFkTWFwRW50cnkgZW50cnksIERhcnRUeXBlIGtleVR5cGUsCiAgICAgIERhcnRUeXBlIHZhbHVlVHlwZSwgVmFyaWFibGVEZWNsYXJhdGlvbiByZXN1bHQsIExpc3Q8U3RhdGVtZW50PiBib2R5KSB7CiAgICBFeHByZXNzaW9uIHZhbHVlID0gZW50cnkuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICAvLyBOdWxsLWF3YXJlIHNwcmVhZHMgcmVxdWlyZSB0ZXN0aW5nIHRoZSBzdWJleHByZXNzaW9uJ3MgdmFsdWUuCiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHRlbXA7CiAgICBpZiAoZW50cnkuaXNOdWxsQXdhcmUpIHsKICAgICAgdGVtcCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHZhbHVlLAogICAgICAgICAgdHlwZTogY29yZVR5cGVzLm1hcENsYXNzLnJhd1R5cGUpOwogICAgICBib2R5LmFkZCh0ZW1wKTsKICAgICAgdmFsdWUgPSBuZXcgVmFyaWFibGVHZXQodGVtcCk7CiAgICB9CgogICAgRGFydFR5cGUgZW50cnlUeXBlID0KICAgICAgICBuZXcgSW50ZXJmYWNlVHlwZShtYXBFbnRyeUNsYXNzLCA8RGFydFR5cGU+W2tleVR5cGUsIHZhbHVlVHlwZV0pOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBlbHQ7CiAgICBTdGF0ZW1lbnQgbG9vcEJvZHk7CiAgICBpZiAoZW50cnkuZW50cnlUeXBlID09IG51bGwgfHwKICAgICAgICAhdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKGVudHJ5LmVudHJ5VHlwZSwgZW50cnlUeXBlKSkgewogICAgICBlbHQgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihudWxsLAogICAgICAgICAgdHlwZTogbmV3IEludGVyZmFjZVR5cGUobWFwRW50cnlDbGFzcywKICAgICAgICAgICAgICA8RGFydFR5cGU+W2NvbnN0IER5bmFtaWNUeXBlKCksIGNvbnN0IER5bmFtaWNUeXBlKCldKSwKICAgICAgICAgIGlzRmluYWw6IHRydWUpOwogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGtleVZhciA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgICAgbmV3IEFzRXhwcmVzc2lvbigKICAgICAgICAgICAgICBuZXcgUHJvcGVydHlHZXQoCiAgICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChlbHQpLCBuZXcgTmFtZSgna2V5JyksIG1hcEVudHJ5S2V5KSwKICAgICAgICAgICAgICBrZXlUeXBlKQogICAgICAgICAgICAuLmlzVHlwZUVycm9yID0gdHJ1ZQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICB0eXBlOiBrZXlUeXBlKTsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YWx1ZVZhciA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgICAgbmV3IEFzRXhwcmVzc2lvbigKICAgICAgICAgICAgICBuZXcgUHJvcGVydHlHZXQoCiAgICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChlbHQpLCBuZXcgTmFtZSgndmFsdWUnKSwgbWFwRW50cnlWYWx1ZSksCiAgICAgICAgICAgICAgdmFsdWVUeXBlKQogICAgICAgICAgICAuLmlzVHlwZUVycm9yID0gdHJ1ZQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICB0eXBlOiB2YWx1ZVR5cGUpOwogICAgICBsb29wQm9keSA9IG5ldyBCbG9jayg8U3RhdGVtZW50PlsKICAgICAgICBrZXlWYXIsCiAgICAgICAgdmFsdWVWYXIsCiAgICAgICAgbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQobmV3IE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChyZXN1bHQpLAogICAgICAgICAgICBuZXcgTmFtZSgnW109JyksCiAgICAgICAgICAgIG5ldyBBcmd1bWVudHMoW25ldyBWYXJpYWJsZUdldChrZXlWYXIpLCBuZXcgVmFyaWFibGVHZXQodmFsdWVWYXIpXSksCiAgICAgICAgICAgIG1hcFB1dCkpCiAgICAgIF0pOwogICAgfSBlbHNlIHsKICAgICAgZWx0ID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obnVsbCwgdHlwZTogZW50cnlUeXBlLCBpc0ZpbmFsOiB0cnVlKTsKICAgICAgbG9vcEJvZHkgPSBuZXcgRXhwcmVzc2lvblN0YXRlbWVudChuZXcgTWV0aG9kSW52b2NhdGlvbigKICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChyZXN1bHQpLAogICAgICAgICAgbmV3IE5hbWUoJ1tdPScpLAogICAgICAgICAgbmV3IEFyZ3VtZW50cyhbCiAgICAgICAgICAgIG5ldyBQcm9wZXJ0eUdldChuZXcgVmFyaWFibGVHZXQoZWx0KSwgbmV3IE5hbWUoJ2tleScpLCBtYXBFbnRyeUtleSksCiAgICAgICAgICAgIG5ldyBQcm9wZXJ0eUdldCgKICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChlbHQpLCBuZXcgTmFtZSgndmFsdWUnKSwgbWFwRW50cnlWYWx1ZSkKICAgICAgICAgIF0pLAogICAgICAgICAgbWFwUHV0KSk7CiAgICB9CiAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0gbmV3IEZvckluU3RhdGVtZW50KAogICAgICAgIGVsdCwgbmV3IFByb3BlcnR5R2V0KHZhbHVlLCBuZXcgTmFtZSgnZW50cmllcycpLCBtYXBFbnRyaWVzKSwgbG9vcEJvZHkpOwoKICAgIGlmIChlbnRyeS5pc051bGxBd2FyZSkgewogICAgICBzdGF0ZW1lbnQgPSBuZXcgSWZTdGF0ZW1lbnQoCiAgICAgICAgICBuZXcgTm90KG5ldyBNZXRob2RJbnZvY2F0aW9uKG5ldyBWYXJpYWJsZUdldCh0ZW1wKSwgbmV3IE5hbWUoJz09JyksCiAgICAgICAgICAgICAgbmV3IEFyZ3VtZW50cyhbbmV3IE51bGxMaXRlcmFsKCldKSwgb2JqZWN0RXF1YWxzKSksCiAgICAgICAgICBzdGF0ZW1lbnQsCiAgICAgICAgICBudWxsKTsKICAgIH0KICAgIGJvZHkuYWRkKHN0YXRlbWVudCk7CiAgfQoKICBUcmVlTm9kZSBfdHJhbnNsYXRlQ29uc3RMaXN0T3JTZXQoCiAgICAgIEV4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgZWxlbWVudFR5cGUsIExpc3Q8RXhwcmVzc2lvbj4gZWxlbWVudHMsCiAgICAgIHtib29sIGlzU2V0OiBmYWxzZX0pIHsKICAgIC8vIFRyYW5zbGF0ZSBlbGVtZW50cyBpbiBwbGFjZSB1cCB0byB0aGUgZmlyc3Qgbm9uLWV4cHJlc3Npb24sIGlmIGFueS4KICAgIGludCBpID0gMDsKICAgIGZvciAoOyBpIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgaWYgKGVsZW1lbnRzW2ldIGlzIENvbnRyb2xGbG93RWxlbWVudCkgYnJlYWs7CiAgICAgIGVsZW1lbnRzW2ldID0gZWxlbWVudHNbaV0uYWNjZXB0KHRoaXMpLi5wYXJlbnQgPSBub2RlOwogICAgfQoKICAgIC8vIElmIHRoZXJlIHdlcmUgb25seSBleHByZXNzaW9ucywgd2UgYXJlIGRvbmUuCiAgICBpZiAoaSA9PSBlbGVtZW50cy5sZW5ndGgpIHJldHVybiBub2RlOwoKICAgIEV4cHJlc3Npb24gbWFrZUxpdGVyYWwoTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucykgewogICAgICByZXR1cm4gaXNTZXQKICAgICAgICAgID8gbmV3IFNldExpdGVyYWwoZXhwcmVzc2lvbnMsCiAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50OiBlbGVtZW50VHlwZSwgaXNDb25zdDogdHJ1ZSkKICAgICAgICAgIDogbmV3IExpc3RMaXRlcmFsKGV4cHJlc3Npb25zLAogICAgICAgICAgICAgIHR5cGVBcmd1bWVudDogZWxlbWVudFR5cGUsIGlzQ29uc3Q6IHRydWUpOwogICAgfQoKICAgIC8vIEJ1aWxkIGEgY29uY2F0ZW5hdGlvbiBub2RlLgogICAgTGlzdDxFeHByZXNzaW9uPiBwYXJ0cyA9IFtdOwogICAgTGlzdDxFeHByZXNzaW9uPiBjdXJyZW50UGFydCA9IGkgPiAwID8gZWxlbWVudHMuc3VibGlzdCgwLCBpKSA6IG51bGw7CgogICAgZm9yICg7IGkgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkgewogICAgICBFeHByZXNzaW9uIGVsZW1lbnQgPSBlbGVtZW50c1tpXTsKICAgICAgaWYgKGVsZW1lbnQgaXMgU3ByZWFkRWxlbWVudCkgewogICAgICAgIGlmIChjdXJyZW50UGFydCAhPSBudWxsKSB7CiAgICAgICAgICBwYXJ0cy5hZGQobWFrZUxpdGVyYWwoY3VycmVudFBhcnQpKTsKICAgICAgICAgIGN1cnJlbnRQYXJ0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgRXhwcmVzc2lvbiBzcHJlYWRFeHByZXNzaW9uID0gZWxlbWVudC5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgICAgICBpZiAoZWxlbWVudC5pc051bGxBd2FyZSkgewogICAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB0ZW1wID0KICAgICAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihudWxsLCBpbml0aWFsaXplcjogc3ByZWFkRXhwcmVzc2lvbik7CiAgICAgICAgICBwYXJ0cy5hZGQobmV3IExldCgKICAgICAgICAgICAgICB0ZW1wLAogICAgICAgICAgICAgIG5ldyBDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgICAgICAgICAgIG5ldyBNZXRob2RJbnZvY2F0aW9uKG5ldyBWYXJpYWJsZUdldCh0ZW1wKSwgbmV3IE5hbWUoJz09JyksCiAgICAgICAgICAgICAgICAgICAgICBuZXcgQXJndW1lbnRzKFtuZXcgTnVsbExpdGVyYWwoKV0pKSwKICAgICAgICAgICAgICAgICAgbWFrZUxpdGVyYWwoW10pLAogICAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQodGVtcCksCiAgICAgICAgICAgICAgICAgIGNvbnN0IER5bmFtaWNUeXBlKCkpKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHBhcnRzLmFkZChzcHJlYWRFeHByZXNzaW9uKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpcyBJZkVsZW1lbnQpIHsKICAgICAgICBpZiAoY3VycmVudFBhcnQgIT0gbnVsbCkgewogICAgICAgICAgcGFydHMuYWRkKG1ha2VMaXRlcmFsKGN1cnJlbnRQYXJ0KSk7CiAgICAgICAgICBjdXJyZW50UGFydCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gZWxlbWVudC5jb25kaXRpb24uYWNjZXB0KHRoaXMpOwogICAgICAgIEV4cHJlc3Npb24gdGhlbiA9IG1ha2VMaXRlcmFsKFtlbGVtZW50LnRoZW5dKS5hY2NlcHQodGhpcyk7CiAgICAgICAgRXhwcmVzc2lvbiBvdGhlcndpc2UgPSBlbGVtZW50Lm90aGVyd2lzZSAhPSBudWxsCiAgICAgICAgICAgID8gbWFrZUxpdGVyYWwoW2VsZW1lbnQub3RoZXJ3aXNlXSkuYWNjZXB0KHRoaXMpCiAgICAgICAgICAgIDogbWFrZUxpdGVyYWwoW10pOwogICAgICAgIHBhcnRzLmFkZChuZXcgQ29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgICAgICBjb25kaXRpb24sIHRoZW4sIG90aGVyd2lzZSwgY29uc3QgRHluYW1pY1R5cGUoKSkpOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgRm9yRWxlbWVudCB8fCBlbGVtZW50IGlzIEZvckluRWxlbWVudCkgewogICAgICAgIC8vIFJlamVjdGVkIGVhcmxpZXIuCiAgICAgICAgdW5oYW5kbGVkKCIke2VsZW1lbnQucnVudGltZVR5cGV9IiwgIl90cmFuc2xhdGVDb25zdExpc3RPclNldCIsCiAgICAgICAgICAgIGVsZW1lbnQuZmlsZU9mZnNldCwgZ2V0RmlsZVVyaShlbGVtZW50KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFBhcnQgPz89IDxFeHByZXNzaW9uPltdOwogICAgICAgIGN1cnJlbnRQYXJ0LmFkZChlbGVtZW50LmFjY2VwdCh0aGlzKSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UGFydCAhPSBudWxsKSB7CiAgICAgIHBhcnRzLmFkZChtYWtlTGl0ZXJhbChjdXJyZW50UGFydCkpOwogICAgfQogICAgcmV0dXJuIGlzU2V0CiAgICAgICAgPyBuZXcgU2V0Q29uY2F0ZW5hdGlvbihwYXJ0cywgdHlwZUFyZ3VtZW50OiBlbGVtZW50VHlwZSkKICAgICAgICA6IG5ldyBMaXN0Q29uY2F0ZW5hdGlvbihwYXJ0cywgdHlwZUFyZ3VtZW50OiBlbGVtZW50VHlwZSk7CiAgfQoKICBUcmVlTm9kZSBfdHJhbnNsYXRlQ29uc3RNYXAoTWFwTGl0ZXJhbCBub2RlKSB7CiAgICAvLyBUcmFuc2xhdGUgZW50cmllcyBpbiBwbGFjZSB1cCB0byB0aGUgZmlyc3QgY29udHJvbC1mbG93IGVudHJ5LCBpZiBhbnkuCiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKDsgaSA8IG5vZGUuZW50cmllcy5sZW5ndGg7ICsraSkgewogICAgICBpZiAobm9kZS5lbnRyaWVzW2ldIGlzIENvbnRyb2xGbG93TWFwRW50cnkpIGJyZWFrOwogICAgICBub2RlLmVudHJpZXNbaV0gPSBub2RlLmVudHJpZXNbaV0uYWNjZXB0KHRoaXMpLi5wYXJlbnQgPSBub2RlOwogICAgfQoKICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gY29udHJvbC1mbG93IGVudHJpZXMgd2UgYXJlIGRvbmUuCiAgICBpZiAoaSA9PSBub2RlLmVudHJpZXMubGVuZ3RoKSByZXR1cm4gbm9kZTsKCiAgICBNYXBMaXRlcmFsIG1ha2VMaXRlcmFsKExpc3Q8TWFwRW50cnk+IGVudHJpZXMpIHsKICAgICAgcmV0dXJuIG5ldyBNYXBMaXRlcmFsKGVudHJpZXMsCiAgICAgICAgICBrZXlUeXBlOiBub2RlLmtleVR5cGUsIHZhbHVlVHlwZTogbm9kZS52YWx1ZVR5cGUsIGlzQ29uc3Q6IHRydWUpOwogICAgfQoKICAgIC8vIEJ1aWxkIGEgY29uY2F0ZW5hdGlvbiBub2RlLgogICAgTGlzdDxFeHByZXNzaW9uPiBwYXJ0cyA9IFtdOwogICAgTGlzdDxNYXBFbnRyeT4gY3VycmVudFBhcnQgPSBpID4gMCA/IG5vZGUuZW50cmllcy5zdWJsaXN0KDAsIGkpIDogbnVsbDsKCiAgICBmb3IgKDsgaSA8IG5vZGUuZW50cmllcy5sZW5ndGg7ICsraSkgewogICAgICBNYXBFbnRyeSBlbnRyeSA9IG5vZGUuZW50cmllc1tpXTsKICAgICAgaWYgKGVudHJ5IGlzIFNwcmVhZE1hcEVudHJ5KSB7CiAgICAgICAgaWYgKGN1cnJlbnRQYXJ0ICE9IG51bGwpIHsKICAgICAgICAgIHBhcnRzLmFkZChtYWtlTGl0ZXJhbChjdXJyZW50UGFydCkpOwogICAgICAgICAgY3VycmVudFBhcnQgPSBudWxsOwogICAgICAgIH0KICAgICAgICBFeHByZXNzaW9uIHNwcmVhZEV4cHJlc3Npb24gPSBlbnRyeS5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgICAgICBpZiAoZW50cnkuaXNOdWxsQXdhcmUpIHsKICAgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdGVtcCA9CiAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obnVsbCwgaW5pdGlhbGl6ZXI6IHNwcmVhZEV4cHJlc3Npb24pOwogICAgICAgICAgcGFydHMuYWRkKG5ldyBMZXQoCiAgICAgICAgICAgICAgdGVtcCwKICAgICAgICAgICAgICBuZXcgQ29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgICAgICAgICAgICBuZXcgTWV0aG9kSW52b2NhdGlvbihuZXcgVmFyaWFibGVHZXQodGVtcCksIG5ldyBOYW1lKCc9PScpLAogICAgICAgICAgICAgICAgICAgICAgbmV3IEFyZ3VtZW50cyhbbmV3IE51bGxMaXRlcmFsKCldKSksCiAgICAgICAgICAgICAgICAgIG1ha2VMaXRlcmFsKFtdKSwKICAgICAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlR2V0KHRlbXApLAogICAgICAgICAgICAgICAgICBjb25zdCBEeW5hbWljVHlwZSgpKSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYXJ0cy5hZGQoc3ByZWFkRXhwcmVzc2lvbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGVudHJ5IGlzIElmTWFwRW50cnkpIHsKICAgICAgICBpZiAoY3VycmVudFBhcnQgIT0gbnVsbCkgewogICAgICAgICAgcGFydHMuYWRkKG1ha2VMaXRlcmFsKGN1cnJlbnRQYXJ0KSk7CiAgICAgICAgICBjdXJyZW50UGFydCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gZW50cnkuY29uZGl0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgICBFeHByZXNzaW9uIHRoZW4gPSBtYWtlTGl0ZXJhbChbZW50cnkudGhlbl0pLmFjY2VwdCh0aGlzKTsKICAgICAgICBFeHByZXNzaW9uIG90aGVyd2lzZSA9IGVudHJ5Lm90aGVyd2lzZSAhPSBudWxsCiAgICAgICAgICAgID8gbWFrZUxpdGVyYWwoW2VudHJ5Lm90aGVyd2lzZV0pLmFjY2VwdCh0aGlzKQogICAgICAgICAgICA6IG1ha2VMaXRlcmFsKFtdKTsKICAgICAgICBwYXJ0cy5hZGQobmV3IENvbmRpdGlvbmFsRXhwcmVzc2lvbigKICAgICAgICAgICAgY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UsIGNvbnN0IER5bmFtaWNUeXBlKCkpKTsKICAgICAgfSBlbHNlIGlmIChlbnRyeSBpcyBGb3JNYXBFbnRyeSB8fCBlbnRyeSBpcyBGb3JJbk1hcEVudHJ5KSB7CiAgICAgICAgLy8gUmVqZWN0ZWQgZWFybGllci4KICAgICAgICB1bmhhbmRsZWQoIiR7ZW50cnkucnVudGltZVR5cGV9IiwgIl90cmFuc2xhdGVDb25zdE1hcCIsCiAgICAgICAgICAgIGVudHJ5LmZpbGVPZmZzZXQsIGdldEZpbGVVcmkoZW50cnkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjdXJyZW50UGFydCA/Pz0gPE1hcEVudHJ5PltdOwogICAgICAgIGN1cnJlbnRQYXJ0LmFkZChlbnRyeS5hY2NlcHQodGhpcykpOwogICAgICB9CiAgICB9CiAgICBpZiAoY3VycmVudFBhcnQgIT0gbnVsbCkgewogICAgICBwYXJ0cy5hZGQobWFrZUxpdGVyYWwoY3VycmVudFBhcnQpKTsKICAgIH0KICAgIHJldHVybiBuZXcgTWFwQ29uY2F0ZW5hdGlvbihwYXJ0cywKICAgICAgICBrZXlUeXBlOiBub2RlLmtleVR5cGUsIHZhbHVlVHlwZTogbm9kZS52YWx1ZVR5cGUpOwogIH0KfQqCggBOTjwBJQEiASEJExYPGQ8fEhUUHQ8YFhUXDRsVGhIUGg4NFRMVGhQTGhcSHRUBOAFEATcBGgkcHRQWFxUTFBcYATYBOQFEATIdKRseGiAeGh0bHQE6SzsZBAEtJkxQOE4XSxVRThhGFk4YUAEgSB1LDyc0PQYBNCsBQSARUBMxIERGGg0xOkcaBiU4Ij8GRidIBgFKBAFPOiRKJ0YoRypJDUgGBAE9OjshGSIlBAFQOilRJCVHKwY0HyUYPywhJwZRKgQBRkYwTRlLPEQpLy0UBAFKRiArHCINKBNLBk0ZSyNHBiFDIioEAUxGOEUeHzU1FiUGAR0YJ0oqNUg+IToeKBM2JR05JwoNTT8jGzEmBkQBHyNOQhURBhkEAQwwGFEZBgFKFwQBDC4YURgGAUoWBAEMLhgnBgFODys5RQYBOi8BOUNOIUEYJT8iNgYrF0gGAUoEAU06I0YmQidDKUUNOQYEARhKOyEZMRMEAVE6I0ceI0MlBh5FHTMWRwYeRgQBP04wSRlLKlEnLy0UBAFDTiApHCINKBNLBkkZSyFFBiE/ICgEAUVONkUeHTUtFiUGARlKHRgjRCoxRRpFHB9HFyE4GkccH0sZITgcKBASNiUdURUKDUs/IxsaUR1IDhQGLlEBHSNOQhURBhkEASVIHUsPJzQ9BgE0KwE7Eyg4KTkGASMhSgEnKCYjLx4KRyMlTB0UKU47IykqEScKKSMvHgo/RDk8Hy0/RR1INg8oLwgGHysGEUFDBAExTg8rOUUGATovATUlTAYBIyFMASsoJSMvHgpFISVMHRQpTjsjKSoRJwooIy8eCj1CNzofLT9DHUAyDyYtCAYfKwYnOwQCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3RyYW5zZm9ybV9jb2xsZWN0aW9ucy5kYXJ0R3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdHJhbnNmb3JtX3NldF9saXRlcmFscy5kYXJ0kbMvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS50cmFuc2Zvcm1fc2V0X2xpdGVyYWxzOwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDbGFzcywKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBDb25zdHJ1Y3Rvckludm9jYXRpb24sCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExldCwKICAgICAgICBMaWJyYXJ5LAogICAgICAgIE1hcEVudHJ5LAogICAgICAgIE1hcExpdGVyYWwsCiAgICAgICAgTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBOYW1lLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBTZXRMaXRlcmFsLAogICAgICAgIFN0YXRpY0ludm9jYXRpb24sCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBWYXJpYWJsZUdldDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdmlzaXRvci5kYXJ0JyBzaG93IFRyYW5zZm9ybWVyOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xvYWRlci5kYXJ0JyBzaG93IFNvdXJjZUxvYWRlcjsKCmltcG9ydCAncmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnQnIHNob3cgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keTsKCi8vIFRPRE8oYXNrZXNjKTogRGVsZXRlIHRoaXMgY2xhc3Mgd2hlbiBhbGwgYmFja2VuZHMgc3VwcG9ydCBzZXQgbGl0ZXJhbHMuCmNsYXNzIFNldExpdGVyYWxUcmFuc2Zvcm1lciBleHRlbmRzIFRyYW5zZm9ybWVyIHsKICBmaW5hbCBDb3JlVHlwZXMgY29yZVR5cGVzOwogIGZpbmFsIERhcnRUeXBlIG51bGxUeXBlOwogIGZpbmFsIFByb2NlZHVyZSBzZXRGYWN0b3J5OwogIGZpbmFsIFByb2NlZHVyZSBhZGRNZXRob2Q7CiAgZmluYWwgQ29uc3RydWN0b3IgdW5tb2RpZmlhYmxlU2V0Q29uc3RydWN0b3I7CiAgZmluYWwgYm9vbCB0cmFuc2Zvcm1Db25zdDsKCiAgc3RhdGljIFByb2NlZHVyZSBfZmluZFNldEZhY3RvcnkoQ29yZVR5cGVzIGNvcmVUeXBlcykgewogICAgUHJvY2VkdXJlIGZhY3RvcnkgPSBjb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnU2V0JywgJycpOwogICAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSBib2R5ID0gZmFjdG9yeT8uZnVuY3Rpb24/LmJvZHk7CiAgICByZXR1cm4gYm9keT8udGFyZ2V0OwogIH0KCiAgc3RhdGljIFByb2NlZHVyZSBfZmluZEFkZE1ldGhvZChDb3JlVHlwZXMgY29yZVR5cGVzKSB7CiAgICByZXR1cm4gY29yZVR5cGVzLmluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ1NldCcsICdhZGQnKTsKICB9CgogIHN0YXRpYyBDb25zdHJ1Y3RvciBfZmluZFVubW9kaWZpYWJsZVNldENvbnN0cnVjdG9yKFNvdXJjZUxvYWRlciBsb2FkZXIpIHsKICAgIC8vIFdlIHNob3VsZCBub3QgZ2VuZXJhbGx5IGRpZyBpbnRvIGxpYnJhcmllcyBsaWtlIHRoaXMsIGFuZCB3ZSBzaG91bGQKICAgIC8vIGF2b2lkIGRlcGVuZGVuY2llcyBvbiBsaWJyYXJpZXMgb3RoZXIgdGhhbiB0aGUgb25lcyBpbmRleGVkIGJ5CiAgICAvLyBDb3JlVHlwZXMuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdW50aWwgYWxsIGJhY2tlbmRzIGhhdmUKICAgIC8vIGltcGxlbWVudGVkIHN1cHBvcnQgZm9yIHNldCBsaXRlcmFscy4KICAgIFVyaSBjb2xsZWN0aW9uVXJpID0gVXJpLnBhcnNlKCJkYXJ0OmNvbGxlY3Rpb24iKTsKICAgIExpYnJhcnkgY29sbGVjdGlvbkxpYnJhcnkgPSBsb2FkZXIuYnVpbGRlcnNbY29sbGVjdGlvblVyaV0udGFyZ2V0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uTGlicmFyeS5jbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIENsYXNzIGNsYXNzTm9kZSA9IGNvbGxlY3Rpb25MaWJyYXJ5LmNsYXNzZXNbaV07CiAgICAgIGlmIChjbGFzc05vZGUubmFtZSA9PSAiX1VubW9kaWZpYWJsZVNldCIpIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvbGxlY3Rpb25MaWJyYXJ5LmNsYXNzZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gY2xhc3NOb2RlLmNvbnN0cnVjdG9yc1tqXTsKICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5uYW1lLm5hbWUuaXNFbXB0eSkgewogICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFNldExpdGVyYWxUcmFuc2Zvcm1lcihTb3VyY2VMb2FkZXIgbG9hZGVyLCB7dGhpcy50cmFuc2Zvcm1Db25zdDogdHJ1ZX0pCiAgICAgIDogY29yZVR5cGVzID0gbG9hZGVyLmNvcmVUeXBlcywKICAgICAgICBudWxsVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGxvYWRlci5jb3JlVHlwZXMubnVsbENsYXNzLCBbXSksCiAgICAgICAgc2V0RmFjdG9yeSA9IF9maW5kU2V0RmFjdG9yeShsb2FkZXIuY29yZVR5cGVzKSwKICAgICAgICBhZGRNZXRob2QgPSBfZmluZEFkZE1ldGhvZChsb2FkZXIuY29yZVR5cGVzKSwKICAgICAgICB1bm1vZGlmaWFibGVTZXRDb25zdHJ1Y3RvciA9IF9maW5kVW5tb2RpZmlhYmxlU2V0Q29uc3RydWN0b3IobG9hZGVyKTsKCiAgVHJlZU5vZGUgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICBpZiAoIXRyYW5zZm9ybUNvbnN0KSByZXR1cm4gbm9kZTsKICAgICAgTGlzdDxNYXBFbnRyeT4gZW50cmllcyA9IG5ldyBMaXN0PE1hcEVudHJ5Pihub2RlLmV4cHJlc3Npb25zLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIC8vIGV4cHJlc3Npb25faTogbnVsbAogICAgICAgIEV4cHJlc3Npb24gZW50cnkgPSBub2RlLmV4cHJlc3Npb25zW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgICBlbnRyaWVzW2ldID0gbmV3IE1hcEVudHJ5KGVudHJ5LCBuZXcgTnVsbExpdGVyYWwoKSk7CiAgICAgIH0KICAgICAgRXhwcmVzc2lvbiBtYXBFeHAgPSBuZXcgTWFwTGl0ZXJhbChlbnRyaWVzLAogICAgICAgICAga2V5VHlwZTogbm9kZS50eXBlQXJndW1lbnQsIHZhbHVlVHlwZTogbnVsbFR5cGUsIGlzQ29uc3Q6IHRydWUpOwogICAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbih1bm1vZGlmaWFibGVTZXRDb25zdHJ1Y3RvciwKICAgICAgICAgIG5ldyBBcmd1bWVudHMoW21hcEV4cF0sIHR5cGVzOiBbbm9kZS50eXBlQXJndW1lbnRdKSwKICAgICAgICAgIGlzQ29uc3Q6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgLy8gT3V0ZXJtb3N0IGRlY2xhcmF0aW9uIG9mIGxldCBjaGFpbjogU2V0PEU+IHNldFZhciA9IG5ldyBTZXQ8RT4oKTsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBzZXRWYXIgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSgKICAgICAgICAgIG5ldyBTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICAgIHNldEZhY3RvcnksIG5ldyBBcmd1bWVudHMoW10sIHR5cGVzOiBbbm9kZS50eXBlQXJndW1lbnRdKSksCiAgICAgICAgICB0eXBlOiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMuc2V0Q2xhc3MsIFtub2RlLnR5cGVBcmd1bWVudF0pKTsKICAgICAgLy8gSW5uZXJtb3N0IGJvZHkgb2YgbGV0IGNoYWluOiBzZXRWYXIKICAgICAgRXhwcmVzc2lvbiBzZXRFeHAgPSBuZXcgVmFyaWFibGVHZXQoc2V0VmFyKTsKICAgICAgZm9yIChpbnQgaSA9IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAvLyBsZXQgXyA9IHNldFZhci5hZGQoZXhwcmVzc2lvbikgaW4gcmVzdAogICAgICAgIEV4cHJlc3Npb24gZW50cnkgPSBub2RlLmV4cHJlc3Npb25zW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgICBzZXRFeHAgPSBuZXcgTGV0KAogICAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShuZXcgTWV0aG9kSW52b2NhdGlvbigKICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChzZXRWYXIpLAogICAgICAgICAgICAgICAgbmV3IE5hbWUoImFkZCIpLAogICAgICAgICAgICAgICAgbmV3IEFyZ3VtZW50cyhbZW50cnldKSwKICAgICAgICAgICAgICAgIGFkZE1ldGhvZCkpLAogICAgICAgICAgICBzZXRFeHApOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgTGV0KHNldFZhciwgc2V0RXhwKTsKICAgIH0KICB9Cn0KfQBOTjwBJgEiASEJEw8VHxIUFw0REhQaDhUTFBoSHRUBOAE3ATkBRAFLMh0bHh0wHQE6SzsZBAE5QQQBTEtGRy02R0E2MkU/LyAMCggGEQQBSiZGODZOAS4YKEw6Hj09CDJLQz8aDUtFIEpNLTM/Mj0aQykhKB0VCCYGBAIBPnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdHJhbnNmb3JtX3NldF9saXRlcmFscy5kYXJ0RHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvY2xhc3NfbWVtYmVyX3BhcnNlci5kYXJ0h6YvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIuY2xhc3NfbWVtYmVyX3BhcnNlcjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICdlcnJvcl9kZWxlZ2F0aW9uX2xpc3RlbmVyLmRhcnQnIHNob3cgRXJyb3JEZWxlZ2F0aW9uTGlzdGVuZXI7CgppbXBvcnQgJ2xpc3RlbmVyLmRhcnQnIHNob3cgTGlzdGVuZXI7CgppbXBvcnQgJ3BhcnNlci5kYXJ0JyBzaG93IFBhcnNlcjsKCi8vLyBQYXJzZXIgc2ltaWxhciB0byBbVG9wTGV2ZWxQYXJzZXJdIGJ1dCBhbHNvIHBhcnNlcyBjbGFzcyBtZW1iZXJzIChleGNsdWRpbmcKLy8vIHRoZWlyIGJvZGllcykuCmNsYXNzIENsYXNzTWVtYmVyUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHsKICBQYXJzZXIgc2tpcFBhcnNlcjsKCiAgQ2xhc3NNZW1iZXJQYXJzZXIoTGlzdGVuZXIgbGlzdGVuZXIpIDogc3VwZXIobGlzdGVuZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBza2lwRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZUlkZW50aWZpZXJFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gdG9rZW4ubmV4dDsKICB9CgogIFRva2VuIHNraXBFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICAvLyBUT0RPKGFza2VzYyk6IFdlIGxpc3RlbiB0byBlcnJvcnMgb2NjdXJyaW5nIGR1cmluZyBleHByZXNzaW9uIHBhcnNpbmcsCiAgICAvLyBzaW5jZSB0aGUgcGFyc2VyIG1heSByZXdyaXRlIHRoZSB0b2tlbiBzdHJlYW0gc3VjaCB0aGF0IHRoZSBlcnJvciBpcwogICAgLy8gbm90IHRyaWdnZXJlZCBkdXJpbmcgdGhlIHNlY29uZCBwYXJzZS4KICAgIC8vIFdoZW4gdGhlIHBhcnNlciBzdXBwb3J0cyBub3QgZG9pbmcgdG9rZW4gc3RyZWFtIHJld3JpdGluZywgdXNlIHRoYXQKICAgIC8vIGZlYXR1cmUgdG9nZXRoZXIgd2l0aCBhIG5vLW9wIGxpc3RlbmVyIGluc3RlYWQuCiAgICBza2lwUGFyc2VyID8/PSBuZXcgUGFyc2VyKG5ldyBFcnJvckRlbGVnYXRpb25MaXN0ZW5lcihsaXN0ZW5lcikpOwogICAgc2tpcFBhcnNlci5tYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBza2lwUGFyc2VyLmFzeW5jU3RhdGUgPSBhc3luY1N0YXRlOwogICAgc2tpcFBhcnNlci5sb29wU3RhdGUgPSBsb29wU3RhdGU7CiAgICByZXR1cm4gc2tpcFBhcnNlci5wYXJzZUV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgLy8gVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBmb3IgdHdvIHJlYXNvbnM6CiAgLy8gMS4gQXZvaWQgZ2VuZXJhdGluZyBldmVudHMgZm9yIGFyZ3VtZW50cy4KICAvLyAyLiBBdm9pZCBjYWxsaW5nIHNraXAgZXhwcmVzc2lvbiBmb3IgZWFjaCBhcmd1bWVudCAod2hpY2ggZG9lc24ndCB3b3JrKS4KICBUb2tlbiBwYXJzZUFyZ3VtZW50c09wdChUb2tlbiB0b2tlbikgPT4gc2tpcEFyZ3VtZW50c09wdCh0b2tlbik7CgogIFRva2VuIHBhcnNlRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuLCBib29sIGlzRXhwcmVzc2lvbiwgYm9vbCBhbGxvd0Fic3RyYWN0KSB7CiAgICByZXR1cm4gc2tpcEZ1bmN0aW9uQm9keSh0b2tlbiwgaXNFeHByZXNzaW9uLCBhbGxvd0Fic3RyYWN0KTsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlSW52YWxpZEJsb2NrKFRva2VuIHRva2VuKSA9PiBza2lwQmxvY2sodG9rZW4pOwp9CjoATk48ASoBLgFGASYBIgFQEykVAToBDCciBAEMMRcEASZOTC5LN0ZKKCYuBAEwL05DAVBBBAEMPAIBO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvY2xhc3NfbWVtYmVyX3BhcnNlci5kYXJ0PnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zb3VyY2UvZGlldF9saXN0ZW5lci5kYXJ0wAB6vi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmRpZXRfbGlzdGVuZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFzeW5jTWFya2VyLAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBMaWJyYXJ5LAogICAgICAgIExpYnJhcnlEZXBlbmRlbmN5LAogICAgICAgIExpYnJhcnlQYXJ0LAogICAgICAgIFRyZWVOb2RlLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2J1aWxkZXIvYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAnLi4vYnVpbGRlci9kZWNsYXJhdGlvbl9idWlsZGVyLmRhcnQnOwoKaW1wb3J0ICcuLi9jb25zdGFudF9jb250ZXh0LmRhcnQnIHNob3cgQ29uc3RhbnRDb250ZXh0OwoKaW1wb3J0ICcuLi9jcmFzaC5kYXJ0JyBzaG93IENyYXNoOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIENvZGUsCiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlRXhwZWN0ZWRCbG9ja1RvU2tpcCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kOwoKaW1wb3J0ICcuLi9pZ25vcmVkX3BhcnNlcl9lcnJvcnMuZGFydCcgc2hvdyBpc0lnbm9yZWRQYXJzZXJFcnJvcjsKCmltcG9ydCAnLi4va2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0JyBzaG93IEJvZHlCdWlsZGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciwgVHlwZUFsaWFzQnVpbGRlciwgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JyBzaG93IEFzc2VydCwgQ2xhc3NLaW5kLCBNZW1iZXJLaW5kLCBQYXJzZXIsIG9wdGlvbmFsOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JwogICAgc2hvdyBEZWJ1Z0Fib3J0LCBpbnRlcm5hbFByb2JsZW0sIHVuZXhwZWN0ZWQsIHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcmVuY2VfZW5naW5lLmRhcnQnIHNob3cgVHlwZUluZmVyZW5jZUVuZ2luZTsKCmltcG9ydCAnc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdzdGFja19saXN0ZW5lci5kYXJ0JwogICAgc2hvdyBGaXhlZE51bGxhYmxlTGlzdCwgTnVsbFZhbHVlLCBQYXJzZXJSZWNvdmVyeSwgU3RhY2tMaXN0ZW5lcjsKCmltcG9ydCAnLi4vc291cmNlL3ZhbHVlX2tpbmRzLmRhcnQnOwoKaW1wb3J0ICcuLi9xdW90ZS5kYXJ0JyBzaG93IHVuZXNjYXBlU3RyaW5nOwoKY2xhc3MgRGlldExpc3RlbmVyIGV4dGVuZHMgU3RhY2tMaXN0ZW5lciB7CiAgZmluYWwgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeTsKCiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwoKICBmaW5hbCBDb3JlVHlwZXMgY29yZVR5cGVzOwoKICBmaW5hbCBib29sIGVuYWJsZU5hdGl2ZTsKCiAgZmluYWwgYm9vbCBzdHJpbmdFeHBlY3RlZEFmdGVyTmF0aXZlOwoKICBmaW5hbCBUeXBlSW5mZXJlbmNlRW5naW5lIHR5cGVJbmZlcmVuY2VFbmdpbmU7CgogIGludCBpbXBvcnRFeHBvcnREaXJlY3RpdmVJbmRleCA9IDA7CiAgaW50IHBhcnREaXJlY3RpdmVJbmRleCA9IDA7CgogIERlY2xhcmF0aW9uQnVpbGRlciBfY3VycmVudERlY2xhcmF0aW9uOwogIENsYXNzQnVpbGRlciBfY3VycmVudENsYXNzOwoKICBib29sIGN1cnJlbnRDbGFzc0lzUGFyc2VyUmVjb3ZlcnkgPSBmYWxzZTsKCiAgLy8vIENvdW50ZXIgdXNlZCBmb3IgbmFtaW5nIHVubmFtZWQgZXh0ZW5zaW9uIGRlY2xhcmF0aW9ucy4KICBpbnQgdW5uYW1lZEV4dGVuc2lvbkNvdW50ZXIgPSAwOwoKICAvLy8gRm9yIHRvcC1sZXZlbCBkZWNsYXJhdGlvbnMsIHRoaXMgaXMgdGhlIGxpYnJhcnkgc2NvcGUuIEZvciBjbGFzcyBtZW1iZXJzLAogIC8vLyB0aGlzIGlzIHRoZSBpbnN0YW5jZSBzY29wZSBvZiBbY3VycmVudERlY2xhcmF0aW9uXS4KICBTY29wZSBtZW1iZXJTY29wZTsKCiAgQG92ZXJyaWRlCiAgVXJpIHVyaTsKCiAgRGlldExpc3RlbmVyKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnksIHRoaXMuaGllcmFyY2h5LCB0aGlzLmNvcmVUeXBlcywKICAgICAgdGhpcy50eXBlSW5mZXJlbmNlRW5naW5lKQogICAgICA6IGxpYnJhcnkgPSBsaWJyYXJ5LAogICAgICAgIHVyaSA9IGxpYnJhcnkuZmlsZVVyaSwKICAgICAgICBtZW1iZXJTY29wZSA9IGxpYnJhcnkuc2NvcGUsCiAgICAgICAgZW5hYmxlTmF0aXZlID0KICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQuZW5hYmxlTmF0aXZlKGxpYnJhcnkudXJpKSwKICAgICAgICBzdHJpbmdFeHBlY3RlZEFmdGVyTmF0aXZlID0KICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQubmF0aXZlRXh0ZW5zaW9uRXhwZWN0c1N0cmluZzsKCiAgRGVjbGFyYXRpb25CdWlsZGVyIGdldCBjdXJyZW50RGVjbGFyYXRpb24gPT4gX2N1cnJlbnREZWNsYXJhdGlvbjsKCiAgdm9pZCBzZXQgY3VycmVudERlY2xhcmF0aW9uKERlY2xhcmF0aW9uQnVpbGRlciBidWlsZGVyKSB7CiAgICBpZiAoYnVpbGRlciA9PSBudWxsKSB7CiAgICAgIF9jdXJyZW50Q2xhc3MgPSBfY3VycmVudERlY2xhcmF0aW9uID0gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIF9jdXJyZW50RGVjbGFyYXRpb24gPSBidWlsZGVyOwogICAgICBfY3VycmVudENsYXNzID0gYnVpbGRlciBpcyBDbGFzc0J1aWxkZXIgPyBidWlsZGVyIDogbnVsbDsKICAgIH0KICB9CgogIENsYXNzQnVpbGRlciBnZXQgY3VycmVudENsYXNzID0+IF9jdXJyZW50Q2xhc3M7CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGFTdGFyKGludCBjb3VudCkgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUobnVsbCwgcmVwZWF0ZWRLaW5kcyhWYWx1ZUtpbmQuVG9rZW4sIGNvdW50KSkpOwogICAgZGVidWdFdmVudCgiTWV0YWRhdGFTdGFyIik7CiAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgIGRpc2NhcmQoY291bnQgLSAxKTsKICAgICAgcHVzaChwb3AoTnVsbFZhbHVlLlRva2VuKSA/PyBOdWxsVmFsdWUuVG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChOdWxsVmFsdWUuVG9rZW4pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRhZGF0YShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiTWV0YWRhdGEiKTsKICAgIGRpc2NhcmQocGVyaW9kQmVmb3JlTmFtZSA9PSBudWxsID8gMSA6IDIpOwogICAgcHVzaChiZWdpblRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUGFydE9mKAogICAgICBUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gb2ZLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24sIGJvb2wgaGFzTmFtZSkgewogICAgZGVidWdFdmVudCgiUGFydE9mIik7CiAgICBpZiAoaGFzTmFtZSkgZGlzY2FyZCgxKTsKICAgIGRpc2NhcmQoMSk7IC8vIE1ldGFkYXRhLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiBiZWdpblRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbiIpOwogICAgcG9wKCk7IC8vIG1ldGFkYXRhIHN0YXIKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Bcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9UeXBlQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlKFRva2VuIGxhc3RDb25zdW1lZCkgewogICAgZGVidWdFdmVudCgiTm9UeXBlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVR5cGUoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlIik7CiAgICBkaXNjYXJkKDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlTGlzdChpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVMaXN0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UoVG9rZW4gd2l0aEtleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIk5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc1dpdGhDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NOb1dpdGhDbGF1c2UoKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc05vV2l0aENsYXVzZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlQXJndW1lbnRzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVBcmd1bWVudHMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRUeXBlQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gYXNzaWdubWVudE9wZXJhdG9yLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRmllbGRJbml0aWFsaXplciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0ZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vRmllbGRJbml0aWFsaXplciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1R5cGVWYXJpYWJsZXMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vVHlwZVZhcmlhYmxlcyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJzKAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlcnMiKTsKICAgIGFzc2VydChjb3VudCA9PSAwKTsgLy8gQ291bnQgaXMgYWx3YXlzIDAgYXMgdGhlIGRpZXQgcGFyc2VyIHNraXBzIGZvcm1hbHMuCiAgICBpZiAoa2luZCAhPSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlICYmCiAgICAgICAgaWRlbnRpY2FsKHBlZWsoKSwgIi0iKSAmJgogICAgICAgIGlkZW50aWNhbChiZWdpblRva2VuLm5leHQsIGVuZFRva2VuKSkgewogICAgICBwb3AoKTsKICAgICAgcHVzaCgidW5hcnktIik7CiAgICB9CiAgICBwdXNoKGJlZ2luVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgZGVidWdFdmVudCgiTm9Gb3JtYWxQYXJhbWV0ZXJzIik7CiAgICBpZiAoaWRlbnRpY2FsKHBlZWsoKSwgIi0iKSkgewogICAgICBwb3AoKTsKICAgICAgcHVzaCgidW5hcnktIik7CiAgICB9CiAgICBwdXNoKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgZGVidWdFdmVudCgiRnVuY3Rpb25UeXBlIik7CiAgICBkaXNjYXJkKDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVBbGlhcygKICAgICAgVG9rZW4gdHlwZWRlZktleXdvcmQsIFRva2VuIGVxdWFscywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uVHlwZUFsaWFzIik7CgogICAgaWYgKGVxdWFscyA9PSBudWxsKSBwb3AoKTsgLy8gZW5kVG9rZW4KICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eSh0eXBlZGVmS2V5d29yZC5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CgogICAgQnVpbGRlciB0eXBlZGVmQnVpbGRlciA9IGxvb2t1cEJ1aWxkZXIodHlwZWRlZktleXdvcmQsIG51bGwsIG5hbWUpOwogICAgcGFyc2VNZXRhZGF0YSh0eXBlZGVmQnVpbGRlciwgbWV0YWRhdGEsIHR5cGVkZWZCdWlsZGVyLnRhcmdldCk7CiAgICBpZiAodHlwZWRlZkJ1aWxkZXIgaXMgVHlwZUFsaWFzQnVpbGRlcikgewogICAgICBUeXBlQnVpbGRlciB0eXBlID0gdHlwZWRlZkJ1aWxkZXIudHlwZTsKICAgICAgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscyA9IHR5cGUuZm9ybWFsczsKICAgICAgICBpZiAoZm9ybWFscyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvcm1hbHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgPSBmb3JtYWxzW2ldOwogICAgICAgICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBmb3JtYWwubWV0YWRhdGE7CiAgICAgICAgICAgIGlmIChtZXRhZGF0YSAhPSBudWxsICYmIG1ldGFkYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAvLyBbcGFyc2VNZXRhZGF0YV0gaXMgdXNpbmcgW1BhcnNlci5wYXJzZU1ldGFkYXRhU3Rhcl0gdW5kZXIgdGhlCiAgICAgICAgICAgICAgLy8gaG9vZCwgc28gd2Ugb25seSBuZWVkIHRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGFubm90YXRpb24uCiAgICAgICAgICAgICAgVG9rZW4gbWV0YWRhdGFUb2tlbiA9IHRva2VuRm9yT2Zmc2V0KAogICAgICAgICAgICAgICAgICB0eXBlZGVmS2V5d29yZCwgZW5kVG9rZW4sIG1ldGFkYXRhWzBdLmNoYXJPZmZzZXQpOwogICAgICAgICAgICAgIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPQogICAgICAgICAgICAgICAgICBwYXJzZU1ldGFkYXRhKHR5cGVkZWZCdWlsZGVyLCBtZXRhZGF0YVRva2VuLCBudWxsKTsKICAgICAgICAgICAgICBpZiAoZm9ybWFsLmlzUG9zaXRpb25hbCkgewogICAgICAgICAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPQogICAgICAgICAgICAgICAgICAgIHR5cGVkZWZCdWlsZGVyLnRhcmdldC5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgICAgICAgICAgIGZvciAoRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIGFubm90YXRpb25zKSB7CiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gbmFtZWQKICAgICAgICAgICAgICAgICAgICBpbiB0eXBlZGVmQnVpbGRlci50YXJnZXQubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgICAgIGlmIChuYW1lZC5uYW1lID09IGZvcm1hbC5uYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChFeHByZXNzaW9uIGFubm90YXRpb24gaW4gYW5ub3RhdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWVkLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGVkZWZCdWlsZGVyICE9IG51bGwpIHsKICAgICAgdW5oYW5kbGVkKCIke3R5cGVkZWZCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSIsICJlbmRGdW5jdGlvblR5cGVBbGlhcyIsCiAgICAgICAgICB0eXBlZGVmS2V5d29yZC5jaGFyT2Zmc2V0LCB1cmkpOwogICAgfQoKICAgIGNoZWNrRW1wdHkodHlwZWRlZktleXdvcmQuY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZpZWxkcyhUb2tlbiBzdGF0aWNUb2tlbiwgVG9rZW4gY292YXJpYW50VG9rZW4sIFRva2VuIGxhdGVUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LCBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGaWVsZHMiKTsKICAgIGJ1aWxkRmllbGRzKGNvdW50LCBiZWdpblRva2VuLCBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzeW5jTW9kaWZpZXIoVG9rZW4gYXN5bmNUb2tlbiwgVG9rZW4gc3RhcnRUb2tlbikgewogICAgZGVidWdFdmVudCgiQXN5bmNNb2RpZmllciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUb3BMZXZlbE1ldGhvZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBnZXRPclNldCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlRvcExldmVsTWV0aG9kIik7CiAgICBUb2tlbiBib2R5VG9rZW4gPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHJldHVybjsKCiAgICBmaW5hbCBTdGFja0xpc3RlbmVyIGxpc3RlbmVyID0KICAgICAgICBjcmVhdGVGdW5jdGlvbkxpc3RlbmVyKGxvb2t1cEJ1aWxkZXIoYmVnaW5Ub2tlbiwgZ2V0T3JTZXQsIG5hbWUpKTsKICAgIGJ1aWxkRnVuY3Rpb25Cb2R5KGxpc3RlbmVyLCBib2R5VG9rZW4sIG1ldGFkYXRhLCBNZW1iZXJLaW5kLlRvcExldmVsTWV0aG9kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vRnVuY3Rpb25Cb2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRvcExldmVsRmllbGRzKAogICAgICBUb2tlbiBzdGF0aWNUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sCiAgICAgIFRva2VuIGxhdGVUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LAogICAgICBpbnQgY291bnQsCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sCiAgICAgIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJUb3BMZXZlbEZpZWxkcyIpOwogICAgYnVpbGRGaWVsZHMoY291bnQsIGJlZ2luVG9rZW4sIHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVWb2lkS2V5d29yZChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiVm9pZEtleXdvcmQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Jbml0aWFsaXplcnMoKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0luaXRpYWxpemVycyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcnMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiSW5pdGlhbGl6ZXJzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVF1YWxpZmllZChUb2tlbiBwZXJpb2QpIHsKICAgIGFzc2VydChjaGVja1N0YXRlKHBlcmlvZCwgWwogICAgICAvKnN1ZmZpeCovIFZhbHVlS2luZC5OYW1lT3JQYXJzZXJSZWNvdmVyeSwKICAgICAgLypwcmVmaXgqLyB1bmlvbk9mS2luZHMoWwogICAgICAgIFZhbHVlS2luZC5OYW1lLAogICAgICAgIFZhbHVlS2luZC5HZW5lcmF0b3IsCiAgICAgICAgVmFsdWVLaW5kLlBhcnNlclJlY292ZXJ5LAogICAgICAgIFZhbHVlS2luZC5RdWFsaWZpZWROYW1lLAogICAgICBdKSwKICAgIF0pKTsKICAgIGRlYnVnRXZlbnQoImhhbmRsZVF1YWxpZmllZCIpOwogICAgT2JqZWN0IHN1ZmZpeCA9IHBvcCgpOwogICAgT2JqZWN0IHByZWZpeCA9IHBvcCgpOwogICAgaWYgKHByZWZpeCBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKHByZWZpeCk7CiAgICB9IGVsc2UgaWYgKHN1ZmZpeCBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKHN1ZmZpeCk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKHN1ZmZpeCwgcGVyaW9kLm5leHQubGV4ZW1lKSk7CiAgICAgIHB1c2gobmV3IFF1YWxpZmllZE5hbWUocHJlZml4LCBwZXJpb2QubmV4dCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaWJyYXJ5TmFtZShUb2tlbiBsaWJyYXJ5S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRMaWJyYXJ5TmFtZSIpOwogICAgcG9wKCk7IC8vIE5hbWUuCiAgICBwb3AoKTsgLy8gQW5ub3RhdGlvbnMuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5MaXRlcmFsU3RyaW5nIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ1BhcnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlN0cmluZ1BhcnQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGl0ZXJhbFN0cmluZyhpbnQgaW50ZXJwb2xhdGlvbkNvdW50LCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kTGl0ZXJhbFN0cmluZyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVDbGF1c2UoVG9rZW4gbmF0aXZlVG9rZW4sIGJvb2wgaGFzTmFtZSkgewogICAgZGVidWdFdmVudCgiTmF0aXZlQ2xhdXNlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNjcmlwdChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU2NyaXB0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb24oaW50IGxpdGVyYWxDb3VudCkgewogICAgZGVidWdFdmVudCgiU3RyaW5nSnV4dGFwb3NpdGlvbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEb3R0ZWROYW1lKGludCBjb3VudCwgVG9rZW4gZmlyc3RJZGVudGlmaWVyKSB7CiAgICBkZWJ1Z0V2ZW50KCJEb3R0ZWROYW1lIik7CiAgICBkaXNjYXJkKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uZGl0aW9uYWxVcmkoVG9rZW4gaWZLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW4sIFRva2VuIGVxdWFsU2lnbikgewogICAgZGVidWdFdmVudCgiQ29uZGl0aW9uYWxVcmkiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uZGl0aW9uYWxVcmlzKGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiQ29uZGl0aW9uYWxVcmlzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU9wZXJhdG9yTmFtZShUb2tlbiBvcGVyYXRvcktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJPcGVyYXRvck5hbWUiKTsKICAgIHB1c2godG9rZW4uc3RyaW5nVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkT3BlcmF0b3JOYW1lKFRva2VuIG9wZXJhdG9yS2V5d29yZCwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRPcGVyYXRvck5hbWUiKTsKICAgIHB1c2goJ2ludmFsaWQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSWRlbnRpZmllckxpc3QoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJJZGVudGlmaWVyTGlzdCIpOwogICAgZGlzY2FyZChjb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFNob3coVG9rZW4gc2hvd0tleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIlNob3ciKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSGlkZShUb2tlbiBoaWRlS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiSGlkZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb21iaW5hdG9ycyhpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkNvbWJpbmF0b3JzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUltcG9ydFByZWZpeChUb2tlbiBkZWZlcnJlZEtleXdvcmQsIFRva2VuIGFzS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiSW1wb3J0UHJlZml4Iik7CiAgICBwdXNoSWZOdWxsKGFzS2V5d29yZCwgTnVsbFZhbHVlLlByZWZpeCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIkltcG9ydCIpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoTnVsbFZhbHVlLlByZWZpeCk7CgogICAgVG9rZW4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGNoZWNrRW1wdHkoaW1wb3J0S2V5d29yZC5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CgogICAgLy8gTmF0aXZlIGltcG9ydHMgbXVzdCBiZSBza2lwcGVkIGJlY2F1c2UgdGhleSBhcmVuJ3QgYXNzaWduZWQgY29ycmVzcG9uZGluZwogICAgLy8gTGlicmFyeURlcGVuZGVuY3kgbm9kZXMuCiAgICBUb2tlbiBpbXBvcnRVcmlUb2tlbiA9IGltcG9ydEtleXdvcmQubmV4dDsKICAgIFN0cmluZyBpbXBvcnRVcmkgPQogICAgICAgIHVuZXNjYXBlU3RyaW5nKGltcG9ydFVyaVRva2VuLmxleGVtZSwgaW1wb3J0VXJpVG9rZW4sIHRoaXMpOwogICAgaWYgKGltcG9ydFVyaS5zdGFydHNXaXRoKCJkYXJ0LWV4dDoiKSkgcmV0dXJuOwoKICAgIExpYnJhcnkgbGlicmFyeU5vZGUgPSBsaWJyYXJ5LnRhcmdldDsKICAgIExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgPQogICAgICAgIGxpYnJhcnlOb2RlLmRlcGVuZGVuY2llc1tpbXBvcnRFeHBvcnREaXJlY3RpdmVJbmRleCsrXTsKICAgIHBhcnNlTWV0YWRhdGEobGlicmFyeSwgbWV0YWRhdGEsIGRlcGVuZGVuY3kpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVySW1wb3J0KFRva2VuIHNlbWljb2xvbikgewogICAgcG9wKE51bGxWYWx1ZS5QcmVmaXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFeHBvcnQoVG9rZW4gZXhwb3J0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJFeHBvcnQiKTsKCiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgTGlicmFyeSBsaWJyYXJ5Tm9kZSA9IGxpYnJhcnkudGFyZ2V0OwogICAgTGlicmFyeURlcGVuZGVuY3kgZGVwZW5kZW5jeSA9CiAgICAgICAgbGlicmFyeU5vZGUuZGVwZW5kZW5jaWVzW2ltcG9ydEV4cG9ydERpcmVjdGl2ZUluZGV4KytdOwogICAgcGFyc2VNZXRhZGF0YShsaWJyYXJ5LCBtZXRhZGF0YSwgZGVwZW5kZW5jeSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFBhcnQoVG9rZW4gcGFydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiUGFydCIpOwoKICAgIFRva2VuIG1ldGFkYXRhID0gcG9wKCk7CiAgICBMaWJyYXJ5IGxpYnJhcnlOb2RlID0gbGlicmFyeS50YXJnZXQ7CiAgICBpZiAobGlicmFyeU5vZGUucGFydHMubGVuZ3RoID4gcGFydERpcmVjdGl2ZUluZGV4KSB7CiAgICAgIC8vIElmIHBhcnREaXJlY3RpdmVJbmRleCA+PSBsaWJyYXJ5Tm9kZS5wYXJ0cy5sZW5ndGggd2UgYXJlIGluIGEgY2FzZSBvZgogICAgICAvLyBvbiBwYXJ0IGhhdmluZyBvdGhlciBwYXJ0cy4gQW4gZXJyb3IgaGFzIGFscmVhZHkgYmVlbiBpc3N1ZWQuCiAgICAgIC8vIERvbid0IHRyeSB0byBwYXJzZSBtZXRhZGF0YSBpbnRvIG90aGVyIHBhcnRzIHRoYXQgaGF2ZSBub3RoaW5nIHRvIGRvCiAgICAgIC8vIHdpdGggdGhlIG9uZSB0aGlzIGtleXdvcmQgaXMgdGFsa2luZyBhYm91dC4KICAgICAgTGlicmFyeVBhcnQgcGFydCA9IGxpYnJhcnlOb2RlLnBhcnRzW3BhcnREaXJlY3RpdmVJbmRleCsrXTsKICAgICAgcGFyc2VNZXRhZGF0YShsaWJyYXJ5LCBtZXRhZGF0YSwgcGFydCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVHlwZVZhcmlhYmxlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpblR5cGVWYXJpYWJsZSIpOwogICAgZGlzY2FyZCgyKTsgLy8gTmFtZSBhbmQgbWV0YWRhdGEuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbiwgaW50IGluZGV4LCBUb2tlbiBleHRlbmRzT3JTdXBlcikgewogICAgZGVidWdFdmVudCgiZW5kVHlwZVZhcmlhYmxlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZXMoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVWYXJpYWJsZXMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgIFRva2VuIHN0YXJ0LCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQ29uc3RydWN0b3JSZWZlcmVuY2UiKTsKICAgIHBvcElmTm90TnVsbChwZXJpb2RCZWZvcmVOYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRmFjdG9yeU1ldGhvZCgKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZmFjdG9yeUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGYWN0b3J5TWV0aG9kIik7CiAgICBUb2tlbiBib2R5VG9rZW4gPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkgfHwgY3VycmVudENsYXNzSXNQYXJzZXJSZWNvdmVyeSkgcmV0dXJuOwoKICAgIEZ1bmN0aW9uQnVpbGRlciBidWlsZGVyID0gbG9va3VwQ29uc3RydWN0b3IoYmVnaW5Ub2tlbiwgbmFtZSk7CiAgICBpZiAoYm9keVRva2VuID09IG51bGwgfHwgb3B0aW9uYWwoIj0iLCBib2R5VG9rZW4uZW5kR3JvdXAubmV4dCkpIHsKICAgICAgYnVpbGRSZWRpcmVjdGluZ0ZhY3RvcnlNZXRob2QoCiAgICAgICAgICBib2R5VG9rZW4sIGJ1aWxkZXIsIE1lbWJlcktpbmQuRmFjdG9yeSwgbWV0YWRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgYnVpbGRGdW5jdGlvbkJvZHkoY3JlYXRlRnVuY3Rpb25MaXN0ZW5lcihidWlsZGVyKSwgYm9keVRva2VuLCBtZXRhZGF0YSwKICAgICAgICAgIE1lbWJlcktpbmQuRmFjdG9yeSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlJlZGlyZWN0aW5nRmFjdG9yeUJvZHkiKTsKICAgIGRpc2NhcmQoMSk7IC8vIENvbnN0cnVjdG9yUmVmZXJlbmNlLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHkoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiTmF0aXZlRnVuY3Rpb25Cb2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkKFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQiKTsKICAgIGlmICghZW5hYmxlTmF0aXZlKSB7CiAgICAgIHN1cGVyLmhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBtZXNzYWdlRXhwZWN0ZWRCbG9ja1RvU2tpcCwgbmF0aXZlVG9rZW4sIG5hdGl2ZVRva2VuKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0aG9kKFRva2VuIGdldE9yU2V0LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBiZWdpblBhcmFtLAogICAgICBUb2tlbiBiZWdpbkluaXRpYWxpemVycywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk1ldGhvZCIpOwogICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIHJlbW92aW5nIHRoZSBiZWdpblBhcmFtIHBhcmFtZXRlcgogICAgLy8gYW5kIHVzaW5nIGJvZHlUb2tlbiwgYnV0IHB1c2hpbmcgYSBOdWxsVmFsdWUgb24gdGhlIHN0YWNrCiAgICAvLyBpbiBoYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMgcmF0aGVyIHRoYW4gdGhlIHN1cHBsaWVkIHRva2VuLgogICAgcG9wKCk7IC8vIGJvZHlUb2tlbgogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIFRva2VuIG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGJlZ2luVG9rZW4uY2hhck9mZnNldCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSB8fCBjdXJyZW50Q2xhc3NJc1BhcnNlclJlY292ZXJ5KSByZXR1cm47CiAgICBGdW5jdGlvbkJ1aWxkZXIgYnVpbGRlcjsKICAgIGlmIChuYW1lIGlzIFF1YWxpZmllZE5hbWUgfHwKICAgICAgICAoZ2V0T3JTZXQgPT0gbnVsbCAmJiBuYW1lID09IGN1cnJlbnRDbGFzcz8ubmFtZSkpIHsKICAgICAgYnVpbGRlciA9IGxvb2t1cENvbnN0cnVjdG9yKGJlZ2luVG9rZW4sIG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgYnVpbGRlciA9IGxvb2t1cEJ1aWxkZXIoYmVnaW5Ub2tlbiwgZ2V0T3JTZXQsIG5hbWUpOwogICAgfQogICAgYnVpbGRGdW5jdGlvbkJvZHkoCiAgICAgICAgY3JlYXRlRnVuY3Rpb25MaXN0ZW5lcihidWlsZGVyKSwKICAgICAgICBiZWdpblBhcmFtLAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIGJ1aWxkZXIuaXNTdGF0aWMKICAgICAgICAgICAgPyBNZW1iZXJLaW5kLlN0YXRpY01ldGhvZAogICAgICAgICAgICA6IE1lbWJlcktpbmQuTm9uU3RhdGljTWV0aG9kKTsKICB9CgogIFN0YWNrTGlzdGVuZXIgY3JlYXRlTGlzdGVuZXIoTW9kaWZpZXJCdWlsZGVyIGJ1aWxkZXIsIFNjb3BlIG1lbWJlclNjb3BlLAogICAgICB7Ym9vbCBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5zaW9uVGhpcywKICAgICAgU2NvcGUgZm9ybWFsUGFyYW1ldGVyU2NvcGV9KSB7CiAgICAvLyBOb3RlOiB3ZSBzZXQgdGhpc1R5cGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGFyZSBidWlsZGluZyBhIHN0YXRpYwogICAgLy8gbWVtYmVyLCBzaW5jZSB0aGF0IHByb3ZpZGVzIGJldHRlciBlcnJvciByZWNvdmVyeS4KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFByb3ZpZGUgYSBkdW1teSB0aGlzIG9uIHN0YXRpYyBleHRlbnNpb24gbWV0aG9kcwogICAgLy8gZm9yIGJldHRlciBlcnJvciByZWNvdmVyeT8KICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPQogICAgICAgIGV4dGVuc2lvblRoaXMgPT0gbnVsbCA/IGN1cnJlbnREZWNsYXJhdGlvbj8udGhpc1R5cGUgOiBudWxsOwogICAgdmFyIHR5cGVJbmZlcnJlciA9CiAgICAgICAgdHlwZUluZmVyZW5jZUVuZ2luZT8uY3JlYXRlTG9jYWxUeXBlSW5mZXJyZXIodXJpLCB0aGlzVHlwZSwgbGlicmFyeSk7CiAgICBDb25zdGFudENvbnRleHQgY29uc3RhbnRDb250ZXh0ID0gYnVpbGRlci5pc0NvbnN0cnVjdG9yICYmIGJ1aWxkZXIuaXNDb25zdAogICAgICAgID8gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkCiAgICAgICAgOiBDb25zdGFudENvbnRleHQubm9uZTsKICAgIHJldHVybiBuZXcgQm9keUJ1aWxkZXIoCiAgICAgICAgbGlicmFyeTogbGlicmFyeSwKICAgICAgICBtZW1iZXI6IGJ1aWxkZXIsCiAgICAgICAgZW5jbG9zaW5nU2NvcGU6IG1lbWJlclNjb3BlLAogICAgICAgIGZvcm1hbFBhcmFtZXRlclNjb3BlOiBmb3JtYWxQYXJhbWV0ZXJTY29wZSwKICAgICAgICBoaWVyYXJjaHk6IGhpZXJhcmNoeSwKICAgICAgICBjb3JlVHlwZXM6IGNvcmVUeXBlcywKICAgICAgICBkZWNsYXJhdGlvbkJ1aWxkZXI6IGN1cnJlbnREZWNsYXJhdGlvbiwKICAgICAgICBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXI6IGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciwKICAgICAgICBleHRlbnNpb25UaGlzOiBleHRlbnNpb25UaGlzLAogICAgICAgIHVyaTogdXJpLAogICAgICAgIHR5cGVJbmZlcnJlcjogdHlwZUluZmVycmVyKQogICAgICAuLmNvbnN0YW50Q29udGV4dCA9IGNvbnN0YW50Q29udGV4dDsKICB9CgogIFN0YWNrTGlzdGVuZXIgY3JlYXRlRnVuY3Rpb25MaXN0ZW5lcihGdW5jdGlvbkJ1aWxkZXIgYnVpbGRlcikgewogICAgZmluYWwgU2NvcGUgdHlwZVBhcmFtZXRlclNjb3BlID0KICAgICAgICBidWlsZGVyLmNvbXB1dGVUeXBlUGFyYW1ldGVyU2NvcGUobWVtYmVyU2NvcGUpOwogICAgZmluYWwgU2NvcGUgZm9ybWFsUGFyYW1ldGVyU2NvcGUgPQogICAgICAgIGJ1aWxkZXIuY29tcHV0ZUZvcm1hbFBhcmFtZXRlclNjb3BlKHR5cGVQYXJhbWV0ZXJTY29wZSk7CiAgICBhc3NlcnQodHlwZVBhcmFtZXRlclNjb3BlICE9IG51bGwpOwogICAgYXNzZXJ0KGZvcm1hbFBhcmFtZXRlclNjb3BlICE9IG51bGwpOwogICAgcmV0dXJuIGNyZWF0ZUxpc3RlbmVyKGJ1aWxkZXIsIHR5cGVQYXJhbWV0ZXJTY29wZSwKICAgICAgICBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXI6IGJ1aWxkZXIuaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyLAogICAgICAgIGV4dGVuc2lvblRoaXM6IGJ1aWxkZXIuZXh0ZW5zaW9uVGhpcywKICAgICAgICBmb3JtYWxQYXJhbWV0ZXJTY29wZTogZm9ybWFsUGFyYW1ldGVyU2NvcGUpOwogIH0KCiAgdm9pZCBidWlsZFJlZGlyZWN0aW5nRmFjdG9yeU1ldGhvZCgKICAgICAgVG9rZW4gdG9rZW4sIEZ1bmN0aW9uQnVpbGRlciBidWlsZGVyLCBNZW1iZXJLaW5kIGtpbmQsIFRva2VuIG1ldGFkYXRhKSB7CiAgICBmaW5hbCBTdGFja0xpc3RlbmVyIGxpc3RlbmVyID0gY3JlYXRlRnVuY3Rpb25MaXN0ZW5lcihidWlsZGVyKTsKICAgIHRyeSB7CiAgICAgIFBhcnNlciBwYXJzZXIgPSBuZXcgUGFyc2VyKGxpc3RlbmVyKTsKICAgICAgaWYgKG1ldGFkYXRhICE9IG51bGwpIHsKICAgICAgICBwYXJzZXIucGFyc2VNZXRhZGF0YVN0YXIocGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4obWV0YWRhdGEpKTsKICAgICAgICBsaXN0ZW5lci5wb3AoKTsgLy8gUG9wcyBtZXRhZGF0YSBjb25zdGFudHMuCiAgICAgIH0KCiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRm9ybWFsUGFyYW1ldGVyc09wdCgKICAgICAgICAgIHBhcnNlci5zeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSwgTWVtYmVyS2luZC5GYWN0b3J5KTsKICAgICAgbGlzdGVuZXIucG9wKCk7IC8vIFBvcHMgZm9ybWFsIHBhcmFtZXRlcnMuCiAgICAgIGxpc3RlbmVyLmNoZWNrRW1wdHkodG9rZW4ubmV4dC5jaGFyT2Zmc2V0KTsKICAgIH0gb24gRGVidWdBYm9ydCB7CiAgICAgIHJldGhyb3c7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIHRocm93IG5ldyBDcmFzaCh1cmksIHRva2VuLmNoYXJPZmZzZXQsIGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBidWlsZEZpZWxkcyhpbnQgY291bnQsIFRva2VuIHRva2VuLCBib29sIGlzVG9wTGV2ZWwpIHsKICAgIExpc3Q8U3RyaW5nPiBuYW1lcyA9IGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PFN0cmluZz4oKS5wb3Aoc3RhY2ssIGNvdW50KTsKICAgIFRva2VuIG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KHRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWVzID09IG51bGwgfHwgY3VycmVudENsYXNzSXNQYXJzZXJSZWNvdmVyeSkgcmV0dXJuOwoKICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBsb29rdXBCdWlsZGVyKHRva2VuLCBudWxsLCBuYW1lcy5maXJzdCk7CiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGRvbid0IHJlLXBhcnNlIHRoZSBmaWVsZCBpZiB3ZSd2ZSBhbHJlYWR5IHBhcnNlZCBpdAogICAgLy8gZm9yIHR5cGUgaW5mZXJlbmNlLgogICAgcGFyc2VGaWVsZHMoCiAgICAgICAgY3JlYXRlTGlzdGVuZXIoZGVjbGFyYXRpb24sIG1lbWJlclNjb3BlLAogICAgICAgICAgICBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXI6CiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIpLAogICAgICAgIHRva2VuLAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIGlzVG9wTGV2ZWwpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZE1lbWJlcihUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiSW52YWxpZE1lbWJlciIpOwogICAgcG9wKCk7IC8vIG1ldGFkYXRhIHN0YXIKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWVtYmVyKCkgewogICAgZGVidWdFdmVudCgiTWVtYmVyIik7CiAgICBjaGVja0VtcHR5KC0xKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQXNzZXJ0KFRva2VuIGFzc2VydEtleXdvcmQsIEFzc2VydCBraW5kLCBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIFRva2VuIGNvbW1hVG9rZW4sIFRva2VuIHNlbWljb2xvblRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc3NlcnQiKTsKICAgIC8vIERvIG5vdGhpbmcKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DbGFzc09yTWl4aW5Cb2R5KENsYXNzS2luZCBraW5kLCBUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUodG9rZW4sIFsKICAgICAgVmFsdWVLaW5kLlRva2VuLAogICAgICBWYWx1ZUtpbmQuTmFtZU9yUGFyc2VyUmVjb3ZlcnksCiAgICAgIFZhbHVlS2luZC5Ub2tlbk9yTnVsbAogICAgXSkpOwogICAgZGVidWdFdmVudCgiYmVnaW5DbGFzc09yTWl4aW5Cb2R5Iik7CiAgICBUb2tlbiBiZWdpblRva2VuID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgcG9wKCk7IC8vIEFubm90YXRpb24gYmVnaW4gdG9rZW4uCiAgICBhc3NlcnQoY3VycmVudERlY2xhcmF0aW9uID09IG51bGwpOwogICAgYXNzZXJ0KG1lbWJlclNjb3BlID09IGxpYnJhcnkuc2NvcGUpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgY3VycmVudENsYXNzSXNQYXJzZXJSZWNvdmVyeSA9IHRydWU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGN1cnJlbnREZWNsYXJhdGlvbiA9IGxvb2t1cEJ1aWxkZXIoYmVnaW5Ub2tlbiwgbnVsbCwgbmFtZSk7CiAgICBtZW1iZXJTY29wZSA9IGN1cnJlbnREZWNsYXJhdGlvbi5zY29wZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NPck1peGluQm9keSgKICAgICAgQ2xhc3NLaW5kIGtpbmQsIGludCBtZW1iZXJDb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNsYXNzT3JNaXhpbkJvZHkiKTsKICAgIGN1cnJlbnREZWNsYXJhdGlvbiA9IG51bGw7CiAgICBjdXJyZW50Q2xhc3NJc1BhcnNlclJlY292ZXJ5ID0gZmFsc2U7CiAgICBtZW1iZXJTY29wZSA9IGxpYnJhcnkuc2NvcGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkgewogICAgZGVidWdFdmVudCgiYmVnaW5DbGFzc0RlY2xhcmF0aW9uIik7CiAgICBwdXNoKGJlZ2luKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kQ2xhc3NEZWNsYXJhdGlvbiIpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1peGluRGVjbGFyYXRpb24oVG9rZW4gbWl4aW5LZXl3b3JkLCBUb2tlbiBuYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbk1peGluRGVjbGFyYXRpb24iKTsKICAgIHB1c2gobWl4aW5LZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRNaXhpbkRlY2xhcmF0aW9uIik7CiAgICBjaGVja0VtcHR5KG1peGluS2V5d29yZC5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbihUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBuYW1lVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb24iKTsKICAgIFN0cmluZyBuYW1lID0gbmFtZVRva2VuPy5sZXhlbWUgPz8KICAgICAgICAvLyBTeW50aGVzaXplZCBuYW1lIHVzZWQgaW50ZXJuYWxseS4KICAgICAgICAnZXh0ZW5zaW9uIyR7dW5uYW1lZEV4dGVuc2lvbkNvdW50ZXIrK30nOwogICAgcHVzaChuYW1lKTsKICAgIHB1c2goZXh0ZW5zaW9uS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4dGVuc2lvbkRlY2xhcmF0aW9uKAogICAgICBUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBvbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRFeHRlbnNpb25EZWNsYXJhdGlvbiIpOwogICAgY2hlY2tFbXB0eShleHRlbnNpb25LZXl3b3JkLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFbnVtKFRva2VuIGVudW1LZXl3b3JkLCBUb2tlbiBsZWZ0QnJhY2UsIGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiRW51bSIpOwogICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8T2JqZWN0PigpLnBvcChzdGFjaywgY291bnQgKiAyKTsKICAgIHBvcCgpOyAvLyBOYW1lLgogICAgcG9wKCk7IC8vIEFubm90YXRpb25zIGJlZ2luIHRva2VuLgogICAgY2hlY2tFbXB0eShlbnVtS2V5d29yZC5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGNsYXNzS2V5d29yZCwKICAgICAgVG9rZW4gZXF1YWxzLCBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5hbWVkTWl4aW5BcHBsaWNhdGlvbiIpOwoKICAgIHBvcCgpOyAvLyBOYW1lLgogICAgcG9wKCk7IC8vIEFubm90YXRpb25zIGJlZ2luIHRva2VuLgogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQXN5bmNNYXJrZXIgZ2V0QXN5bmNNYXJrZXIoU3RhY2tMaXN0ZW5lciBsaXN0ZW5lcikgPT4gbGlzdGVuZXIucG9wKCk7CgogIC8vLyBJbnZva2VzIHRoZSBsaXN0ZW5lcidzIFtmaW5pc2hGdW5jdGlvbl0gbWV0aG9kLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgc2VwYXJhdGUgbWV0aG9kIHNvIHRoYXQgaXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgYSBkZXJpdmVkIGNsYXNzCiAgLy8vIGlmIG1vcmUgY29tcHV0YXRpb24gbXVzdCBiZSBkb25lIGJlZm9yZSBmaW5pc2hpbmcgdGhlIGZ1bmN0aW9uLgogIHZvaWQgbGlzdGVuZXJGaW5pc2hGdW5jdGlvbigKICAgICAgU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciwKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIE1lbWJlcktpbmQga2luZCwKICAgICAgZHluYW1pYyBmb3JtYWxzLAogICAgICBBc3luY01hcmtlciBhc3luY01vZGlmaWVyLAogICAgICBkeW5hbWljIGJvZHkpIHsKICAgIGxpc3RlbmVyLmZpbmlzaEZ1bmN0aW9uKGZvcm1hbHMsIGFzeW5jTW9kaWZpZXIsIGJvZHkpOwogIH0KCiAgLy8vIEludm9rZXMgdGhlIGxpc3RlbmVyJ3MgW2ZpbmlzaEZpZWxkc10gbWV0aG9kLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgc2VwYXJhdGUgbWV0aG9kIHNvIHRoYXQgaXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgYSBkZXJpdmVkIGNsYXNzCiAgLy8vIGlmIG1vcmUgY29tcHV0YXRpb24gbXVzdCBiZSBkb25lIGJlZm9yZSBmaW5pc2hpbmcgdGhlIGZ1bmN0aW9uLgogIHZvaWQgbGlzdGVuZXJGaW5pc2hGaWVsZHMoU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciwgVG9rZW4gc3RhcnRUb2tlbiwKICAgICAgVG9rZW4gbWV0YWRhdGEsIGJvb2wgaXNUb3BMZXZlbCkgewogICAgbGlzdGVuZXIuZmluaXNoRmllbGRzKCk7CiAgfQoKICB2b2lkIGJ1aWxkRnVuY3Rpb25Cb2R5KFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIsIFRva2VuIHN0YXJ0VG9rZW4sCiAgICAgIFRva2VuIG1ldGFkYXRhLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIFRva2VuIHRva2VuID0gc3RhcnRUb2tlbjsKICAgIHRyeSB7CiAgICAgIFBhcnNlciBwYXJzZXIgPSBuZXcgUGFyc2VyKGxpc3RlbmVyKTsKICAgICAgaWYgKG1ldGFkYXRhICE9IG51bGwpIHsKICAgICAgICBwYXJzZXIucGFyc2VNZXRhZGF0YVN0YXIocGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4obWV0YWRhdGEpKTsKICAgICAgICBsaXN0ZW5lci5wb3AoKTsgLy8gQW5ub3RhdGlvbnMuCiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VGb3JtYWxQYXJhbWV0ZXJzT3B0KAogICAgICAgICAgcGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pLCBraW5kKTsKICAgICAgdmFyIGZvcm1hbHMgPSBsaXN0ZW5lci5wb3AoKTsKICAgICAgbGlzdGVuZXIuY2hlY2tFbXB0eSh0b2tlbi5uZXh0LmNoYXJPZmZzZXQpOwogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUluaXRpYWxpemVyc09wdCh0b2tlbik7CiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlQXN5bmNNb2RpZmllck9wdCh0b2tlbik7CiAgICAgIEFzeW5jTWFya2VyIGFzeW5jTW9kaWZpZXIgPSBnZXRBc3luY01hcmtlcihsaXN0ZW5lcikgPz8gQXN5bmNNYXJrZXIuU3luYzsKICAgICAgYm9vbCBpc0V4cHJlc3Npb24gPSBmYWxzZTsKICAgICAgYm9vbCBhbGxvd0Fic3RyYWN0ID0gYXN5bmNNb2RpZmllciA9PSBBc3luY01hcmtlci5TeW5jOwogICAgICBwYXJzZXIucGFyc2VGdW5jdGlvbkJvZHkodG9rZW4sIGlzRXhwcmVzc2lvbiwgYWxsb3dBYnN0cmFjdCk7CiAgICAgIHZhciBib2R5ID0gbGlzdGVuZXIucG9wKCk7CiAgICAgIGxpc3RlbmVyLmNoZWNrRW1wdHkodG9rZW4uY2hhck9mZnNldCk7CiAgICAgIGxpc3RlbmVyRmluaXNoRnVuY3Rpb24oCiAgICAgICAgICBsaXN0ZW5lciwgc3RhcnRUb2tlbiwga2luZCwgZm9ybWFscywgYXN5bmNNb2RpZmllciwgYm9keSk7CiAgICB9IG9uIERlYnVnQWJvcnQgewogICAgICByZXRocm93OwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICB0aHJvdyBuZXcgQ3Jhc2godXJpLCB0b2tlbi5jaGFyT2Zmc2V0LCBlLCBzKTsKICAgIH0KICB9CgogIHZvaWQgcGFyc2VGaWVsZHMoU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciwgVG9rZW4gc3RhcnRUb2tlbiwgVG9rZW4gbWV0YWRhdGEsCiAgICAgIGJvb2wgaXNUb3BMZXZlbCkgewogICAgVG9rZW4gdG9rZW4gPSBzdGFydFRva2VuOwogICAgUGFyc2VyIHBhcnNlciA9IG5ldyBQYXJzZXIobGlzdGVuZXIpOwogICAgaWYgKGlzVG9wTGV2ZWwpIHsKICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VUb3BMZXZlbE1lbWJlcihtZXRhZGF0YSA/PyB0b2tlbik7CiAgICB9IGVsc2UgewogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUNsYXNzT3JNaXhpbk1lbWJlcihtZXRhZGF0YSA/PyB0b2tlbikubmV4dDsKICAgIH0KICAgIGxpc3RlbmVyRmluaXNoRmllbGRzKGxpc3RlbmVyLCBzdGFydFRva2VuLCBtZXRhZGF0YSwgaXNUb3BMZXZlbCk7CiAgICBsaXN0ZW5lci5jaGVja0VtcHR5KHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQnVpbGRlciBsb29rdXBCdWlsZGVyKFRva2VuIHRva2VuLCBUb2tlbiBnZXRPclNldCwgU3RyaW5nIG5hbWUpIHsKICAgIC8vIFRPRE8oYWhlKTogQ2FuIEkgbW92ZSB0aGlzIHRvIFNjb3BlIG9yIFNjb3BlQnVpbGRlcj8KICAgIEJ1aWxkZXIgZGVjbGFyYXRpb247CiAgICBpZiAoY3VycmVudERlY2xhcmF0aW9uICE9IG51bGwpIHsKICAgICAgaWYgKHVyaSAhPSBjdXJyZW50RGVjbGFyYXRpb24uZmlsZVVyaSkgewogICAgICAgIHVuZXhwZWN0ZWQoIiR1cmkiLCAiJHtjdXJyZW50RGVjbGFyYXRpb24uZmlsZVVyaX0iLAogICAgICAgICAgICBjdXJyZW50RGVjbGFyYXRpb24uY2hhck9mZnNldCwgY3VycmVudERlY2xhcmF0aW9uLmZpbGVVcmkpOwogICAgICB9CgogICAgICBpZiAoZ2V0T3JTZXQgIT0gbnVsbCAmJiBvcHRpb25hbCgic2V0IiwgZ2V0T3JTZXQpKSB7CiAgICAgICAgZGVjbGFyYXRpb24gPSBjdXJyZW50RGVjbGFyYXRpb24uc2NvcGUuc2V0dGVyc1tuYW1lXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWNsYXJhdGlvbiA9IGN1cnJlbnREZWNsYXJhdGlvbi5zY29wZS5sb2NhbFtuYW1lXTsKICAgICAgfQogICAgfSBlbHNlIGlmIChnZXRPclNldCAhPSBudWxsICYmIG9wdGlvbmFsKCJzZXQiLCBnZXRPclNldCkpIHsKICAgICAgZGVjbGFyYXRpb24gPSBsaWJyYXJ5LnNjb3BlLnNldHRlcnNbbmFtZV07CiAgICB9IGVsc2UgewogICAgICBkZWNsYXJhdGlvbiA9IGxpYnJhcnkuc2NvcGVCdWlsZGVyW25hbWVdOwogICAgfQogICAgZGVjbGFyYXRpb24gPSBoYW5kbGVEdXBsaWNhdGVkTmFtZShkZWNsYXJhdGlvbiwgdG9rZW4pOwogICAgY2hlY2tCdWlsZGVyKHRva2VuLCBkZWNsYXJhdGlvbiwgbmFtZSk7CiAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgfQoKICBCdWlsZGVyIGxvb2t1cENvbnN0cnVjdG9yKFRva2VuIHRva2VuLCBPYmplY3QgbmFtZU9yUXVhbGlmaWVkKSB7CiAgICBhc3NlcnQoY3VycmVudENsYXNzICE9IG51bGwpOwogICAgQnVpbGRlciBkZWNsYXJhdGlvbjsKICAgIFN0cmluZyBzdWZmaXg7CiAgICBpZiAobmFtZU9yUXVhbGlmaWVkIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgc3VmZml4ID0gbmFtZU9yUXVhbGlmaWVkLm5hbWU7CiAgICB9IGVsc2UgewogICAgICBzdWZmaXggPSBuYW1lT3JRdWFsaWZpZWQgPT0gY3VycmVudENsYXNzLm5hbWUgPyAiIiA6IG5hbWVPclF1YWxpZmllZDsKICAgIH0KICAgIGRlY2xhcmF0aW9uID0gY3VycmVudENsYXNzLmNvbnN0cnVjdG9ycy5sb2NhbFtzdWZmaXhdOwogICAgZGVjbGFyYXRpb24gPSBoYW5kbGVEdXBsaWNhdGVkTmFtZShkZWNsYXJhdGlvbiwgdG9rZW4pOwogICAgY2hlY2tCdWlsZGVyKHRva2VuLCBkZWNsYXJhdGlvbiwgbmFtZU9yUXVhbGlmaWVkKTsKICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIEJ1aWxkZXIgaGFuZGxlRHVwbGljYXRlZE5hbWUoQnVpbGRlciBkZWNsYXJhdGlvbiwgVG9rZW4gdG9rZW4pIHsKICAgIGludCBvZmZzZXQgPSB0b2tlbi5jaGFyT2Zmc2V0OwogICAgaWYgKGRlY2xhcmF0aW9uPy5uZXh0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgfSBlbHNlIHsKICAgICAgQnVpbGRlciBuZWFyZXN0RGVjbGFyYXRpb247CiAgICAgIGludCBtaW5EaXN0YW5jZSA9IC0xOwogICAgICBkbyB7CiAgICAgICAgLy8gT25seSBsb29rIGF0IGRlY2xhcmF0aW9ucyBmcm9tIHRoaXMgZmlsZSAocGFydCkuCiAgICAgICAgaWYgKHVyaSA9PSBkZWNsYXJhdGlvbi5maWxlVXJpKSB7CiAgICAgICAgICAvLyBbZGlzdGFuY2VdIHdpbGwgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZSBhcyB3ZSBlbnN1cmUgW3Rva2VuXSBpcwogICAgICAgICAgLy8gYWx3YXlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRlY2xhcmF0aW9uLiBUaGUgbWluaW11bSBkaXN0YW5jZQogICAgICAgICAgLy8gd2lsbCBvZnRlbiBiZSBsYXJnZXIgdGhhbiAwLCBmb3IgZXhhbXBsZSwgaW4gYSBjbGFzcyBkZWNsYXJhdGlvbgogICAgICAgICAgLy8gd2hlcmUgW3Rva2VuXSB3aWxsIHBvaW50IHRvIGBhYnN0cmFjdGAgb3IgYGNsYXNzYCwgYnV0IHRoZQogICAgICAgICAgLy8gZGVjbGFyYXRpb24ncyBvZmZzZXQgcG9pbnRzIHRvIHRoZSBuYW1lIG9mIHRoZSBjbGFzcy4KICAgICAgICAgIGludCBkaXN0YW5jZSA9IGRlY2xhcmF0aW9uLmNoYXJPZmZzZXQgLSBvZmZzZXQ7CiAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gMCkgewogICAgICAgICAgICBpZiAobWluRGlzdGFuY2UgPT0gLTEgfHwgZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkgewogICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7CiAgICAgICAgICAgICAgbmVhcmVzdERlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi5uZXh0OwogICAgICB9IHdoaWxlIChkZWNsYXJhdGlvbiAhPSBudWxsKTsKICAgICAgcmV0dXJuIG5lYXJlc3REZWNsYXJhdGlvbjsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tCdWlsZGVyKFRva2VuIHRva2VuLCBCdWlsZGVyIGRlY2xhcmF0aW9uLCBPYmplY3QgbmFtZSkgewogICAgaWYgKGRlY2xhcmF0aW9uID09IG51bGwpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQud2l0aEFyZ3VtZW50cygiJG5hbWUiKSwKICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgICB9CiAgICBpZiAodXJpICE9IGRlY2xhcmF0aW9uLmZpbGVVcmkpIHsKICAgICAgdW5leHBlY3RlZCgiJHVyaSIsICIke2RlY2xhcmF0aW9uLmZpbGVVcml9IiwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwKICAgICAgICAgIGRlY2xhcmF0aW9uLmZpbGVVcmkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgdXJpLAogICAgICAgIHdhc0hhbmRsZWQ6IHdhc0hhbmRsZWQsIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWJ1Z0V2ZW50KFN0cmluZyBuYW1lKSB7CiAgICAvLyBwcmludEV2ZW50KCdEaWV0TGlzdGVuZXI6ICRuYW1lJyk7CiAgfQoKICAvLy8gSWYgdGhlIFttZXRhZGF0YV0gaXMgbm90IGBudWxsYCwgcmV0dXJuIHRoZSBwYXJzZWQgbWV0YWRhdGEgW0V4cHJlc3Npb25dcy4KICAvLy8gT3RoZXJ3aXNlLCByZXR1cm4gYG51bGxgLgogIExpc3Q8RXhwcmVzc2lvbj4gcGFyc2VNZXRhZGF0YSgKICAgICAgTW9kaWZpZXJCdWlsZGVyIGJ1aWxkZXIsIFRva2VuIG1ldGFkYXRhLCBUcmVlTm9kZSBwYXJlbnQpIHsKICAgIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgIHZhciBsaXN0ZW5lciA9IGNyZWF0ZUxpc3RlbmVyKGJ1aWxkZXIsIG1lbWJlclNjb3BlLAogICAgICAgICAgaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyOiBmYWxzZSk7CiAgICAgIHZhciBwYXJzZXIgPSBuZXcgUGFyc2VyKGxpc3RlbmVyKTsKICAgICAgcGFyc2VyLnBhcnNlTWV0YWRhdGFTdGFyKHBhcnNlci5zeW50aGV0aWNQcmV2aW91c1Rva2VuKG1ldGFkYXRhKSk7CiAgICAgIHJldHVybiBsaXN0ZW5lci5maW5pc2hNZXRhZGF0YShwYXJlbnQpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyBbVG9rZW5dIGZvdW5kIGJldHdlZW4gW3N0YXJ0XSAoaW5jbHVzaXZlKSBhbmQgW2VuZF0KICAvLy8gKG5vbi1pbmNsdXNpdmUpIHRoYXQgaGFzIGl0cyBbVG9rZW4uY2hhck9mZnNldF0gZXF1YWwgdG8gW29mZnNldF0uICBJZgogIC8vLyB0aGVyZSBpcyBubyBzdWNoIHRva2VuLCBudWxsIGlzIHJldHVybmVkLgogIFRva2VuIHRva2VuRm9yT2Zmc2V0KFRva2VuIHN0YXJ0LCBUb2tlbiBlbmQsIGludCBvZmZzZXQpIHsKICAgIGlmIChvZmZzZXQgPCBzdGFydC5jaGFyT2Zmc2V0IHx8IG9mZnNldCA+PSBlbmQuY2hhck9mZnNldCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHdoaWxlIChzdGFydCAhPSBlbmQpIHsKICAgICAgaWYgKG9mZnNldCA9PSBzdGFydC5jaGFyT2Zmc2V0KSB7CiAgICAgICAgcmV0dXJuIHN0YXJ0OwogICAgICB9CiAgICAgIHN0YXJ0ID0gc3RhcnQubmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgbGlzdCBvZiBbVG9rZW5dcyBmb3VuZCBiZXR3ZWVuIFtzdGFydF0gKGluY2x1c2l2ZSkgYW5kIFtlbmRdCiAgLy8vIChub24taW5jbHVzaXZlKSB0aGF0IGNvcnJlc3BvbmQgdG8gW29mZnNldHNdLiAgSWYgdGhlcmUncyBubyB0b2tlbiBiZXR3ZWVuCiAgLy8vIFtzdGFydF0gYW5kIFtlbmRdIGZvciB0aGUgZ2l2ZW4gb2Zmc2V0LCB0aGUgY29ycmVzcG9uZGluZyBpdGVtIGluIHRoZQogIC8vLyByZXN1bHRpbmcgbGlzdCBpcyBzZXQgdG8gbnVsbC4gIFtvZmZzZXRzXSBhcmUgYXNzdW1lZCB0byBiZSBpbiBhc2NlbmRpbmcKICAvLy8gb3JkZXIuCiAgTGlzdDxUb2tlbj4gdG9rZW5zRm9yT2Zmc2V0cyhUb2tlbiBzdGFydCwgVG9rZW4gZW5kLCBMaXN0PGludD4gb2Zmc2V0cykgewogICAgTGlzdDxUb2tlbj4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxUb2tlbj4uZmlsbGVkKG9mZnNldHMubGVuZ3RoLCBudWxsLCBncm93YWJsZTogZmFsc2UpOwogICAgZm9yIChpbnQgaSA9IDA7IHN0YXJ0ICE9IGVuZCAmJiBpIDwgb2Zmc2V0cy5sZW5ndGg7KSB7CiAgICAgIGludCBvZmZzZXQgPSBvZmZzZXRzW2ldOwogICAgICBpZiAob2Zmc2V0IDwgc3RhcnQuY2hhck9mZnNldCkgewogICAgICAgICsraTsKICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPT0gc3RhcnQuY2hhck9mZnNldCkgewogICAgICAgIHJlc3VsdFtpXSA9IHN0YXJ0OwogICAgICAgIHN0YXJ0ID0gc3RhcnQubmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGFydCA9IHN0YXJ0Lm5leHQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSWdub3JlZEVycm9yKENvZGU8ZHluYW1pYz4gY29kZSwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBpc0lnbm9yZWRQYXJzZXJFcnJvcihjb2RlLCB0b2tlbikgfHwKICAgICAgICBzdXBlci5pc0lnbm9yZWRFcnJvcihjb2RlLCB0b2tlbik7CiAgfQp9CoQSAE5OPAEdASEJFRQXERsVEh0BQgE4AS4BIgEuATgBIwEdCQ4YESQpAUIBNwEnQAFOARo9AVABQAEdRgElASwBKyYBIgEdARsBKAExASYeASoeAS0BPiMBUDoVAQwLAU0gGx8lF0skTgFEATwbMg0lQAYEATIBDCRFIBUaNQ0dBgQBDE8cLxYEAQwSSxodHQQBDDwuHAQBDCgfBAEMLCMEAQxRSAQBDCoaBAEMOhgQBAEMIBwEAQxCMwQBDDIjBAEMIyUEAQxHIQQBDDEoBAEMRCQEAQwvJgQBDCwjBAEMHEYkTzYiMA0WBhYEAQxAJiINFgYRBAEMQiAQBAEMHTwlASsZHCsoAUhELi4pPR81OD47T0s0RS1GKTBDPTcSFy9AM0E3FhQSEA4MCggpTysGASsEAQxLTBorBAEMQSEEAQxNIh0ZHCcoASNLUQQBDCsiBAEMGhkcFx0RGBgiKgQBDCgfBAEMICIEAQxGIAQBDCcgMSAYHSIhCgkjGxskFCsUDTU0BgQBDD8iFBsEAQwpJgQBDCceBAEMQiQEAQw9IAQBDCMaBAEMNScEAQw8HhQEAQxOIgQBDCcjBAEMQCAdBAEMRycVBAEMKSIUBAEMJBgEAQwkGAQBDCMfBAEMRCAtBAEMORopARwqKAFRIC8XRTMBKiNAMgQBDC4bBAEMORoBHCojQDIEAQw1GAEcKjlPR041Qi4GBAEMKCUmBAEMRyMEAQw8IQQBDCA9KCQEAQwZQCEdGRwnSAFDRyU9DU4fBgQBDEUqKQQBDEYmBAEMTS0EAQxNLRkkQQYEAQxFMRpCQUMYGRwnSB0hPDUNOwYXKRQSGSYrBAFLKSklTDpNIh1FF05PIyAcGhklNB4eMEImEiQrBAFCJTgnQSgqN0ouNQQBJk9ECiweSzQIAS9FMTIWDxU0BgQBPk4cIj8BQ0wbETEpOg8SFSIEAQwtIRwEAQwVGhQEAQxKMBoSBAEMPB8XJhwJKR4ZJigqIisOBkAsBAEMHEskHyohBAEMTSkRBAEMPycnBAEMPykYBAEMQScpBAEMTC0nLTIQHAQBDCBBKy0EAQxAGD0UJygEAQxGPykBFCcnBAFIATYGUEYfHhMXFyEWOwQBNAZQRkYpHQQBQykeCiweSygILzckMjIzUCE+RCEtHkUWDxU0BgQBTRkeKhY9DUYGRisEAUQ8GSYvPEgIATs+DzwIQDENMAY8LBgEAUMiGRMsJQ1MBjs8NxgEAUMjJRoNIhwLPCpMTk5IQzofPyYwDgwKKCUhBgQBRR9OIgYmSyAGBAEMP0A5MwQBDCEqBAFRICJCHDovKUkuBhEEAUJNMD1BEwYbKBYIGgYRBAFLUUxPDUwZRzsfJw0vGxwPHAgGEwQBDDkwKwQCATVwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL2RpZXRfbGlzdGVuZXIuZGFydDxzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc291cmNlL2RpZXRfcGFyc2VyLmRhcnSCcS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmRpZXRfcGFyc2VyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JyBzaG93IENsYXNzTWVtYmVyUGFyc2VyLCBMaXN0ZW5lciwgTWVtYmVyS2luZDsKCi8vIFRPRE8oYWhlKTogTW92ZSB0aGlzIHRvIHBhcnNlciBwYWNrYWdlLgpjbGFzcyBEaWV0UGFyc2VyIGV4dGVuZHMgQ2xhc3NNZW1iZXJQYXJzZXIgewogIERpZXRQYXJzZXIoTGlzdGVuZXIgbGlzdGVuZXIpIDogc3VwZXIobGlzdGVuZXIpOwoKICBUb2tlbiBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXN0KFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIHJldHVybiBza2lwRm9ybWFsUGFyYW1ldGVyc1Jlc3QodG9rZW4sIGtpbmQpOwogIH0KfQoUAE5OPAEbAS4BRgErLTMBQjIEAgEzcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9kaWV0X3BhcnNlci5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zb3VyY2Uvb3V0bGluZV9idWlsZGVyLmRhcnTAAOfvLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEub3V0bGluZV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBQcm9jZWR1cmVLaW5kOwoKaW1wb3J0ICcuLi9idWlsZGVyL2J1aWxkZXIuZGFydCc7CgppbXBvcnQgJy4uL2NvbWJpbmF0b3IuZGFydCcgc2hvdyBDb21iaW5hdG9yOwoKaW1wb3J0ICcuLi9jb25maWd1cmF0aW9uLmRhcnQnIHNob3cgQ29uZmlndXJhdGlvbjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBDb2RlLAogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoQm9keSwKICAgICAgICBtZXNzYWdlQ29uc3RJbnN0YW5jZUZpZWxkLAogICAgICAgIG1lc3NhZ2VDb25zdE1ldGhvZCwKICAgICAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZSwKICAgICAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoVHlwZVBhcmFtZXRlcnMsCiAgICAgICAgbWVzc2FnZUV4cGVjdGVkQmxvY2tUb1NraXAsCiAgICAgICAgbWVzc2FnZUludGVycG9sYXRpb25JblVyaSwKICAgICAgICBtZXNzYWdlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzLAogICAgICAgIG1lc3NhZ2VTdGF0aWNDb25zdHJ1Y3RvciwKICAgICAgICBtZXNzYWdlVHlwZWRlZk5vdEZ1bmN0aW9uLAogICAgICAgIHRlbXBsYXRlQ3ljbGVJblR5cGVWYXJpYWJsZXMsCiAgICAgICAgdGVtcGxhdGVEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcywKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZSwKICAgICAgICB0ZW1wbGF0ZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaCwKICAgICAgICB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwLAogICAgICAgIHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEsCiAgICAgICAgdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMjsKCmltcG9ydCAnLi4vaWdub3JlZF9wYXJzZXJfZXJyb3JzLmRhcnQnIHNob3cgaXNJZ25vcmVkUGFyc2VyRXJyb3I7CgovLyBUT0RPKGFoZSk6IFRoZSBvdXRsaW5lIGlzbid0IHN1cHBvc2VkIHRvIGltcG9ydCBrZXJuZWwtc3BlY2lmaWMgYnVpbGRlcnMuCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIE1peGluQXBwbGljYXRpb25CdWlsZGVyLAogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29uc3QsCiAgICAgICAgQ292YXJpYW50LAogICAgICAgIEV4dGVybmFsLAogICAgICAgIEZpbmFsLAogICAgICAgIE1vZGlmaWVyLAogICAgICAgIFN0YXRpYywKICAgICAgICBWYXIsCiAgICAgICAgYWJzdHJhY3RNYXNrLAogICAgICAgIGNvbnN0TWFzaywKICAgICAgICBjb3ZhcmlhbnRNYXNrLAogICAgICAgIGV4dGVybmFsTWFzaywKICAgICAgICBmaW5hbE1hc2ssCiAgICAgICAgbGF0ZU1hc2ssCiAgICAgICAgbWl4aW5EZWNsYXJhdGlvbk1hc2ssCiAgICAgICAgcmVxdWlyZWRNYXNrLAogICAgICAgIHN0YXRpY01hc2s7CgppbXBvcnQgJy4uL29wZXJhdG9yLmRhcnQnCiAgICBzaG93CiAgICAgICAgT3BlcmF0b3IsCiAgICAgICAgb3BlcmF0b3JGcm9tU3RyaW5nLAogICAgICAgIG9wZXJhdG9yVG9TdHJpbmcsCiAgICAgICAgb3BlcmF0b3JSZXF1aXJlZEFyZ3VtZW50Q291bnQ7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JwogICAgc2hvdwogICAgICAgIEFzc2VydCwKICAgICAgICBDbGFzc0tpbmQsCiAgICAgICAgRm9ybWFsUGFyYW1ldGVyS2luZCwKICAgICAgICBJZGVudGlmaWVyQ29udGV4dCwKICAgICAgICBsZW5ndGhPZlNwYW4sCiAgICAgICAgTWVtYmVyS2luZCwKICAgICAgICBvZmZzZXRGb3JUb2tlbiwKICAgICAgICBvcHRpb25hbDsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3F1b3RlLmRhcnQnIHNob3cgdW5lc2NhcGVTdHJpbmc7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZCwKICAgICAgICBGaWVsZEluZm8sCiAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ3N0YWNrX2xpc3RlbmVyLmRhcnQnCiAgICBzaG93IEZpeGVkTnVsbGFibGVMaXN0LCBOdWxsVmFsdWUsIFBhcnNlclJlY292ZXJ5LCBTdGFja0xpc3RlbmVyOwoKaW1wb3J0ICd2YWx1ZV9raW5kcy5kYXJ0JzsKCmVudW0gTWV0aG9kQm9keSB7CiAgQWJzdHJhY3QsCiAgUmVndWxhciwKICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LAp9CgpjbGFzcyBPdXRsaW5lQnVpbGRlciBleHRlbmRzIFN0YWNrTGlzdGVuZXIgewogIGZpbmFsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnk7CgogIGZpbmFsIGJvb2wgZW5hYmxlTmF0aXZlOwogIGZpbmFsIGJvb2wgc3RyaW5nRXhwZWN0ZWRBZnRlck5hdGl2ZTsKICBib29sIGluQ29uc3RydWN0b3IgPSBmYWxzZTsKICBib29sIGluQ29uc3RydWN0b3JOYW1lID0gZmFsc2U7CiAgaW50IGltcG9ydEluZGV4ID0gMDsKCiAgU3RyaW5nIG5hdGl2ZU1ldGhvZE5hbWU7CgogIC8vLyBDb3VudGVyIHVzZWQgZm9yIG5hbWluZyB1bm5hbWVkIGV4dGVuc2lvbiBkZWNsYXJhdGlvbnMuCiAgaW50IHVubmFtZWRFeHRlbnNpb25Db3VudGVyID0gMDsKCiAgT3V0bGluZUJ1aWxkZXIoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkKICAgICAgOiBsaWJyYXJ5ID0gbGlicmFyeSwKICAgICAgICBlbmFibGVOYXRpdmUgPQogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuYmFja2VuZFRhcmdldC5lbmFibGVOYXRpdmUobGlicmFyeS51cmkpLAogICAgICAgIHN0cmluZ0V4cGVjdGVkQWZ0ZXJOYXRpdmUgPQogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuYmFja2VuZFRhcmdldC5uYXRpdmVFeHRlbnNpb25FeHBlY3RzU3RyaW5nOwoKICBAb3ZlcnJpZGUKICBVcmkgZ2V0IHVyaSA9PiBsaWJyYXJ5LmZpbGVVcmk7CgogIGludCBwb3BDaGFyT2Zmc2V0KCkgPT4gcG9wKCk7CgogIExpc3Q8U3RyaW5nPiBwb3BJZGVudGlmaWVyTGlzdChpbnQgY291bnQpIHsKICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IExpc3Q8U3RyaW5nPihjb3VudCk7CiAgICBib29sIGlzUGFyc2VyUmVjb3ZlcnkgPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHBvcENoYXJPZmZzZXQoKTsKICAgICAgT2JqZWN0IGlkZW50aWZpZXIgPSBwb3AoKTsKICAgICAgaWYgKGlkZW50aWZpZXIgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgICBpc1BhcnNlclJlY292ZXJ5ID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsaXN0W2ldID0gaWRlbnRpZmllcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlzUGFyc2VyUmVjb3ZlcnkgPyBudWxsIDogbGlzdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGEoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk1ldGFkYXRhIik7CiAgICBwb3AoKTsgLy8gYXJndW1lbnRzCiAgICBpZiAocGVyaW9kQmVmb3JlTmFtZSAhPSBudWxsKSB7CiAgICAgIHBvcCgpOyAvLyBvZmZzZXQKICAgICAgcG9wKCk7IC8vIGNvbnN0cnVjdG9yIG5hbWUKICAgIH0KICAgIHBvcCgpOyAvLyB0eXBlIGFyZ3VtZW50cwogICAgcG9wKCk7IC8vIG9mZnNldAogICAgT2JqZWN0IHNlbnRpbmVsID0gcG9wKCk7IC8vIHByZWZpeCBvciBjb25zdHJ1Y3RvcgogICAgcHVzaChzZW50aW5lbCBpcyBQYXJzZXJSZWNvdmVyeQogICAgICAgID8gc2VudGluZWwKICAgICAgICA6IG5ldyBNZXRhZGF0YUJ1aWxkZXIoYmVnaW5Ub2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRhZGF0YVN0YXIoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJNZXRhZGF0YVN0YXIiKTsKICAgIHB1c2goY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8TWV0YWRhdGFCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgTnVsbFZhbHVlLk1ldGFkYXRhKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uIik7CiAgICBwb3AoKTsgLy8gbWV0YWRhdGEgc3RhcgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRIaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJIaWRlIik7CiAgICBPYmplY3QgbmFtZXMgPSBwb3AoKTsKICAgIGlmIChuYW1lcyBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5hbWVzKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IENvbWJpbmF0b3IuaGlkZShuYW1lcywgaGlkZUtleXdvcmQuY2hhck9mZnNldCwgbGlicmFyeS5maWxlVXJpKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFNob3coVG9rZW4gc2hvd0tleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIlNob3ciKTsKICAgIE9iamVjdCBuYW1lcyA9IHBvcCgpOwogICAgaWYgKG5hbWVzIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmFtZXMpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgQ29tYmluYXRvci5zaG93KG5hbWVzLCBzaG93S2V5d29yZC5jaGFyT2Zmc2V0LCBsaWJyYXJ5LmZpbGVVcmkpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29tYmluYXRvcnMoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJDb21iaW5hdG9ycyIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxDb21iaW5hdG9yPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgTnVsbFZhbHVlLkNvbWJpbmF0b3JzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRXhwb3J0KFRva2VuIGV4cG9ydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiRXhwb3J0Iik7CiAgICBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzID0gcG9wKCk7CiAgICBMaXN0PENvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25zID0gcG9wKCk7CiAgICBpbnQgdXJpT2Zmc2V0ID0gcG9wQ2hhck9mZnNldCgpOwogICAgU3RyaW5nIHVyaSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBsaWJyYXJ5LmFkZEV4cG9ydChtZXRhZGF0YSwgdXJpLCBjb25maWd1cmF0aW9ucywgY29tYmluYXRvcnMsCiAgICAgICAgZXhwb3J0S2V5d29yZC5jaGFyT2Zmc2V0LCB1cmlPZmZzZXQpOwogICAgY2hlY2tFbXB0eShleHBvcnRLZXl3b3JkLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbXBvcnRQcmVmaXgoVG9rZW4gZGVmZXJyZWRLZXl3b3JkLCBUb2tlbiBhc0tleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIkltcG9ydFByZWZpeCIpOwogICAgaWYgKGFzS2V5d29yZCA9PSBudWxsKSB7CiAgICAgIC8vIElmIGFzS2V5d29yZCBpcyBudWxsLCB0aGVuIG5vIHByZWZpeCBoYXMgYmVlbiBwdXNoZWQgb24gdGhlIHN0YWNrLgogICAgICAvLyBQdXNoIGEgcGxhY2Vob2xkZXIgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGlzIG5vIHByZWZpeC4KICAgICAgcHVzaChOdWxsVmFsdWUuUHJlZml4KTsKICAgICAgcHVzaCgtMSk7CiAgICB9CiAgICBwdXNoKGRlZmVycmVkS2V5d29yZCAhPSBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW1wb3J0KFRva2VuIGltcG9ydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiRW5kSW1wb3J0Iik7CiAgICBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzID0gcG9wKCk7CiAgICBib29sIGlzRGVmZXJyZWQgPSBwb3AoKTsKICAgIGludCBwcmVmaXhPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBwcmVmaXggPSBwb3AoTnVsbFZhbHVlLlByZWZpeCk7CiAgICBMaXN0PENvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25zID0gcG9wKCk7CiAgICBpbnQgdXJpT2Zmc2V0ID0gcG9wQ2hhck9mZnNldCgpOwogICAgU3RyaW5nIHVyaSA9IHBvcCgpOyAvLyBGb3IgYSBjb25kaXRpb25hbCBpbXBvcnQsIHRoaXMgaXMgdGhlIGRlZmF1bHQgVVJJLgogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGltcG9ydEtleXdvcmQuY2hhck9mZnNldCk7CiAgICBpZiAocHJlZml4IGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CiAgICBsaWJyYXJ5LmFkZEltcG9ydCgKICAgICAgICBtZXRhZGF0YSwKICAgICAgICB1cmksCiAgICAgICAgY29uZmlndXJhdGlvbnMsCiAgICAgICAgcHJlZml4LAogICAgICAgIGNvbWJpbmF0b3JzLAogICAgICAgIGlzRGVmZXJyZWQsCiAgICAgICAgaW1wb3J0S2V5d29yZC5jaGFyT2Zmc2V0LAogICAgICAgIHByZWZpeE9mZnNldCwKICAgICAgICB1cmlPZmZzZXQsCiAgICAgICAgaW1wb3J0SW5kZXgrKyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpcyhpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkVuZENvbmRpdGlvbmFsVXJpcyIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxDb25maWd1cmF0aW9uPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgTnVsbFZhbHVlLkNvbmRpdGlvbmFsVXJpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpKFRva2VuIGlmS2V5d29yZCwgVG9rZW4gbGVmdFBhcmVuLCBUb2tlbiBlcXVhbFNpZ24pIHsKICAgIGRlYnVnRXZlbnQoIkVuZENvbmRpdGlvbmFsVXJpIik7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcENoYXJPZmZzZXQoKTsKICAgIFN0cmluZyB1cmkgPSBwb3AoKTsKICAgIGlmIChlcXVhbFNpZ24gIT0gbnVsbCkgcG9wQ2hhck9mZnNldCgpOwogICAgU3RyaW5nIGNvbmRpdGlvbiA9IHBvcElmTm90TnVsbChlcXVhbFNpZ24pID8/ICJ0cnVlIjsKICAgIE9iamVjdCBkb3R0ZWROYW1lID0gcG9wKCk7CiAgICBpZiAoZG90dGVkTmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKGRvdHRlZE5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgQ29uZmlndXJhdGlvbihjaGFyT2Zmc2V0LCBkb3R0ZWROYW1lLCBjb25kaXRpb24sIHVyaSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEb3R0ZWROYW1lKGludCBjb3VudCwgVG9rZW4gZmlyc3RJZGVudGlmaWVyKSB7CiAgICBkZWJ1Z0V2ZW50KCJEb3R0ZWROYW1lIik7CiAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBwb3BJZGVudGlmaWVyTGlzdChjb3VudCk7CiAgICBpZiAobmFtZXMgPT0gbnVsbCkgewogICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShmaXJzdElkZW50aWZpZXIuY2hhck9mZnNldCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuYW1lcy5qb2luKCcuJykpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVySW1wb3J0KFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiUmVjb3ZlckltcG9ydCIpOwogICAgcG9wKCk7IC8vIGNvbWJpbmF0b3JzCiAgICBwb3AoTnVsbFZhbHVlLkRlZmVycmVkKTsgLy8gZGVmZXJyZWRLZXl3b3JkCiAgICBwb3AoKTsgLy8gcHJlZml4T2Zmc2V0CiAgICBwb3AoTnVsbFZhbHVlLlByZWZpeCk7IC8vIHByZWZpeAogICAgcG9wKCk7IC8vIGNvbmRpdGlvbmFsVXJpcwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRQYXJ0KFRva2VuIHBhcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIlBhcnQiKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wQ2hhck9mZnNldCgpOwogICAgU3RyaW5nIHVyaSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBsaWJyYXJ5LmFkZFBhcnQobWV0YWRhdGEsIHVyaSwgY2hhck9mZnNldCk7CiAgICBjaGVja0VtcHR5KHBhcnRLZXl3b3JkLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiT3BlcmF0b3JOYW1lIik7CiAgICBwdXNoKG9wZXJhdG9yRnJvbVN0cmluZyh0b2tlbi5zdHJpbmdWYWx1ZSkpOwogICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZShUb2tlbiBvcGVyYXRvcktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbnZhbGlkT3BlcmF0b3JOYW1lIik7CiAgICBwdXNoKCdpbnZhbGlkJyk7CiAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBpZiAoY29udGV4dCA9PSBJZGVudGlmaWVyQ29udGV4dC5lbnVtVmFsdWVEZWNsYXJhdGlvbikgewogICAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVJZGVudGlmaWVyIik7CiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgICBpZiAodG9rZW4uaXNTeW50aGV0aWMpIHsKICAgICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeSh0b2tlbi5jaGFyT2Zmc2V0KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaChuZXcgRW51bUNvbnN0YW50SW5mbyhtZXRhZGF0YSwgdG9rZW4ubGV4ZW1lLCB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICBnZXREb2N1bWVudGF0aW9uQ29tbWVudCh0b2tlbikpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc3VwZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CiAgICAgIHB1c2godG9rZW4uY2hhck9mZnNldCk7CiAgICB9CiAgICBpZiAoaW5Db25zdHJ1Y3RvciAmJiBjb250ZXh0ID09IElkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uKSB7CiAgICAgIGluQ29uc3RydWN0b3JOYW1lID0gdHJ1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9OYW1lKFRva2VuIHRva2VuKSB7CiAgICBzdXBlci5oYW5kbGVOb05hbWUodG9rZW4pOwogICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nUGFydChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU3RyaW5nUGFydCIpOwogICAgLy8gSWdub3JlIHN0cmluZyBwYXJ0cyAtIHJlcG9ydCBlcnJvciBsYXRlci4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGl0ZXJhbFN0cmluZyhpbnQgaW50ZXJwb2xhdGlvbkNvdW50LCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kTGl0ZXJhbFN0cmluZyIpOwogICAgaWYgKGludGVycG9sYXRpb25Db3VudCA9PSAwKSB7CiAgICAgIFRva2VuIHRva2VuID0gcG9wKCk7CiAgICAgIHB1c2godW5lc2NhcGVTdHJpbmcodG9rZW4ubGV4ZW1lLCB0b2tlbiwgdGhpcykpOwogICAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiA9IHBvcCgpOwogICAgICBpbnQgY2hhck9mZnNldCA9IGJlZ2luVG9rZW4uY2hhck9mZnNldDsKICAgICAgcHVzaCgiJHtTb3VyY2VMaWJyYXJ5QnVpbGRlci5NQUxGT1JNRURfVVJJX1NDSEVNRX06YmFkJHtjaGFyT2Zmc2V0fSIpOwogICAgICBwdXNoKGNoYXJPZmZzZXQpOwogICAgICAvLyBQb2ludCB0byBkb2xsYXIgc2lnbgogICAgICBpbnQgaW50ZXJwb2xhdGlvbk9mZnNldCA9IGNoYXJPZmZzZXQgKyBiZWdpblRva2VuLmxleGVtZS5sZW5ndGg7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZUludGVycG9sYXRpb25JblVyaSwgaW50ZXJwb2xhdGlvbk9mZnNldCwgMSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUNsYXVzZShUb2tlbiBuYXRpdmVUb2tlbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVDbGF1c2UiKTsKICAgIGlmIChoYXNOYW1lKSB7CiAgICAgIC8vIFBvcCB0aGUgbmF0aXZlIGNsYXVzZSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgYSBTdHJpbmdMaXRlcmFsLgogICAgICBwb3AoKTsgLy8gQ2hhciBvZmZzZXQuCiAgICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSA9ICcnOwogICAgICB9IGVsc2UgewogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUgPSBuYW1lOyAvLyBTdHJpbmcuCiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG5hdGl2ZU1ldGhvZE5hbWUgPSAnJzsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nSnV4dGFwb3NpdGlvbihpbnQgbGl0ZXJhbENvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJTdHJpbmdKdXh0YXBvc2l0aW9uIik7CiAgICBMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBMaXN0PFN0cmluZz4obGl0ZXJhbENvdW50KTsKICAgIGludCBjaGFyT2Zmc2V0ID0gLTE7CiAgICBmb3IgKGludCBpID0gbGl0ZXJhbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgY2hhck9mZnNldCA9IHBvcCgpOwogICAgICBsaXN0W2ldID0gcG9wKCk7CiAgICB9CiAgICBwdXNoKGxpc3Quam9pbigiIikpOwogICAgcHVzaChjaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSWRlbnRpZmllckxpc3QoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRJZGVudGlmaWVyTGlzdCIpOwogICAgcHVzaChwb3BJZGVudGlmaWVyTGlzdChjb3VudCkgPz8KICAgICAgICAoY291bnQgPT0gMCA/IE51bGxWYWx1ZS5JZGVudGlmaWVyTGlzdCA6IG5ldyBQYXJzZXJSZWNvdmVyeSgtMSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUXVhbGlmaWVkKFRva2VuIHBlcmlvZCkgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUocGVyaW9kLCBbCiAgICAgIC8qc3VmZml4IG9mZnNldCovIFZhbHVlS2luZC5JbnRlZ2VyLAogICAgICAvKnN1ZmZpeCovIFZhbHVlS2luZC5OYW1lT3JQYXJzZXJSZWNvdmVyeSwKICAgICAgLypwcmVmaXggb2Zmc2V0Ki8gVmFsdWVLaW5kLkludGVnZXIsCiAgICAgIC8qcHJlZml4Ki8gdW5pb25PZktpbmRzKAogICAgICAgICAgW1ZhbHVlS2luZC5OYW1lLCBWYWx1ZUtpbmQuUGFyc2VyUmVjb3ZlcnksIFZhbHVlS2luZC5RdWFsaWZpZWROYW1lXSksCiAgICBdKSk7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVRdWFsaWZpZWQiKTsKICAgIGludCBzdWZmaXhPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBzdWZmaXggPSBwb3AoKTsKICAgIGludCBvZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBwcmVmaXggPSBwb3AoKTsKICAgIGlmIChwcmVmaXggaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChwcmVmaXgpOwogICAgfSBlbHNlIGlmIChzdWZmaXggaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChzdWZmaXgpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChzdWZmaXgsIHBlcmlvZC5uZXh0LmxleGVtZSkpOwogICAgICBhc3NlcnQoc3VmZml4T2Zmc2V0ID09IHBlcmlvZC5uZXh0LmNoYXJPZmZzZXQpOwogICAgICBwdXNoKG5ldyBRdWFsaWZpZWROYW1lKHByZWZpeCwgcGVyaW9kLm5leHQpKTsKICAgIH0KICAgIHB1c2gob2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGlicmFyeU5hbWUoVG9rZW4gbGlicmFyeUtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiZW5kTGlicmFyeU5hbWUiKTsKICAgIHBvcENoYXJPZmZzZXQoKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGxpYnJhcnlLZXl3b3JkKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGxpYnJhcnkuZG9jdW1lbnRhdGlvbkNvbW1lbnQgPSBkb2N1bWVudGF0aW9uQ29tbWVudDsKICAgIGlmIChuYW1lIGlzISBQYXJzZXJSZWNvdmVyeSkgewogICAgICBsaWJyYXJ5Lm5hbWUgPSBmbGF0dGVuTmFtZShuYW1lLCBvZmZzZXRGb3JUb2tlbihsaWJyYXJ5S2V5d29yZCksIHVyaSk7CiAgICB9CiAgICBsaWJyYXJ5Lm1ldGFkYXRhID0gbWV0YWRhdGE7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uIik7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5jbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICAgICJjbGFzcyBvciBtaXhpbiBhcHBsaWNhdGlvbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNsYXNzRGVjbGFyYXRpb24oVG9rZW4gYmVnaW4sIFRva2VuIGFic3RyYWN0VG9rZW4sIFRva2VuIG5hbWUpIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luQ2xhc3NEZWNsYXJhdGlvbiIpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBwdXNoKHR5cGVWYXJpYWJsZXMgPz8gTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogICAgbGlicmFyeS5jdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcgogICAgICAgIC5tYXJrQXNDbGFzc0RlY2xhcmF0aW9uKG5hbWUubGV4ZW1lLCBuYW1lLmNoYXJPZmZzZXQsIHR5cGVWYXJpYWJsZXMpOwogICAgcHVzaChhYnN0cmFjdFRva2VuICE9IG51bGwgPyBhYnN0cmFjdE1hc2sgOiAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5NaXhpbkRlY2xhcmF0aW9uKFRva2VuIG1peGluS2V5d29yZCwgVG9rZW4gbmFtZSkgewogICAgZGVidWdFdmVudCgiYmVnaW5NaXhpbkRlY2xhcmF0aW9uIik7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIHB1c2godHlwZVZhcmlhYmxlcyA/PyBOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgICBsaWJyYXJ5LmN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyCiAgICAgICAgLm1hcmtBc01peGluRGVjbGFyYXRpb24obmFtZS5sZXhlbWUsIG5hbWUuY2hhck9mZnNldCwgdHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NPck1peGluQm9keShDbGFzc0tpbmQga2luZCwgVG9rZW4gdG9rZW4pIHsKICAgIGlmIChraW5kID09IENsYXNzS2luZC5FeHRlbnNpb24pIHsKICAgICAgYXNzZXJ0KGNoZWNrU3RhdGUodG9rZW4sIFtWYWx1ZUtpbmQuVHlwZUJ1aWxkZXJdKSk7CiAgICAgIFR5cGVCdWlsZGVyIGV4dGVuc2lvblRoaXNUeXBlID0gcGVlaygpOwogICAgICBsaWJyYXJ5LmN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJFeHRlbnNpb25UaGlzVHlwZShleHRlbnNpb25UaGlzVHlwZSk7CiAgICB9CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNsYXNzT3JNaXhpbkJvZHkiKTsKICAgIC8vIFJlc29sdmUgdW5yZXNvbHZlZCB0eXBlcyBmcm9tIHRoZSBjbGFzcyBoZWFkZXIgKGkuZS4sIHN1cGVyY2xhc3MsIG1peGlucywKICAgIC8vIGFuZCBpbXBsZW1lbnRlZCB0eXBlcykgYmVmb3JlIGFkZGluZyBtZW1iZXJzIGZyb20gdGhlIGNsYXNzIGJvZHkgd2hpY2gKICAgIC8vIHNob3VsZCBub3Qgc2hhZG93IHRoZXNlIHVucmVzb2x2ZWQgdHlwZXMuCiAgICBsaWJyYXJ5LmN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLnJlc29sdmVUeXBlcygKICAgICAgICBsaWJyYXJ5LmN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLnR5cGVWYXJpYWJsZXMsIGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk5hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgVG9rZW4gYmVnaW4sIFRva2VuIGFic3RyYWN0VG9rZW4sIFRva2VuIG5hbWUpIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTmFtZWRNaXhpbkFwcGxpY2F0aW9uIik7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIHB1c2godHlwZVZhcmlhYmxlcyA/PyBOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgICBsaWJyYXJ5LmN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLm1hcmtBc05hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgICBuYW1lLmxleGVtZSwgbmFtZS5jaGFyT2Zmc2V0LCB0eXBlVmFyaWFibGVzKTsKICAgIHB1c2goYWJzdHJhY3RUb2tlbiAhPSBudWxsID8gYWJzdHJhY3RNYXNrIDogMCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzT3JNaXhpbkltcGxlbWVudHMoCiAgICAgIFRva2VuIGltcGxlbWVudHNLZXl3b3JkLCBpbnQgaW50ZXJmYWNlc0NvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc09yTWl4aW5JbXBsZW1lbnRzIik7CiAgICBwdXNoKGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+KCkKICAgICAgICAgICAgLnBvcChzdGFjaywgaW50ZXJmYWNlc0NvdW50KSA/PwogICAgICAgIE51bGxWYWx1ZS5UeXBlQnVpbGRlckxpc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVyQ2xhc3NIZWFkZXIoKSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVSZWNvdmVyQ2xhc3NIZWFkZXIiKTsKICAgIHBvcChOdWxsVmFsdWUuVHlwZUJ1aWxkZXJMaXN0KTsgLy8gSW50ZXJmYWNlcy4KICAgIHBvcCgpOyAvLyBTdXBlcnR5cGUgb2Zmc2V0LgogICAgcG9wKCk7IC8vIFN1cGVydHlwZS4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3Zlck1peGluSGVhZGVyKCkgewogICAgZGVidWdFdmVudCgiaGFuZGxlUmVjb3Zlck1peGluSGVhZGVyIik7CiAgICBwb3AoTnVsbFZhbHVlLlR5cGVCdWlsZGVyTGlzdCk7IC8vIEludGVyZmFjZXMuCiAgICBwb3AoTnVsbFZhbHVlLlR5cGVCdWlsZGVyTGlzdCk7IC8vIFN1cGVydHlwZSBjb25zdHJhaW50cy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NFeHRlbmRzKFRva2VuIGV4dGVuZHNLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVDbGFzc0V4dGVuZHMiKTsKICAgIHB1c2goZXh0ZW5kc0tleXdvcmQ/LmNoYXJPZmZzZXQgPz8gLTEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVNaXhpbk9uKFRva2VuIG9uS2V5d29yZCwgaW50IHR5cGVDb3VudCkgewogICAgZGVidWdFdmVudCgiaGFuZGxlTWl4aW5PbiIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxOYW1lZFR5cGVCdWlsZGVyPigpLnBvcChzdGFjaywgdHlwZUNvdW50KSA/PwogICAgICAgIG5ldyBQYXJzZXJSZWNvdmVyeShvZmZzZXRGb3JUb2tlbihvbktleXdvcmQpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzRGVjbGFyYXRpb24oVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZENsYXNzRGVjbGFyYXRpb24iKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcyA9IHBvcChOdWxsVmFsdWUuVHlwZUJ1aWxkZXJMaXN0KTsKICAgIGludCBzdXBlcnR5cGVPZmZzZXQgPSBwb3AoKTsKICAgIFR5cGVCdWlsZGVyIHN1cGVydHlwZSA9IG51bGxJZlBhcnNlclJlY292ZXJ5KHBvcCgpKTsKICAgIGludCBtb2RpZmllcnMgPSBwb3AoKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgaW50IG5hbWVPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsICYmIHN1cGVydHlwZSBpcyBNaXhpbkFwcGxpY2F0aW9uQnVpbGRlcikgewogICAgICBzdXBlcnR5cGUudHlwZVZhcmlhYmxlcyA9IHR5cGVWYXJpYWJsZXM7CiAgICB9CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGNoZWNrRW1wdHkoYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIGxpYnJhcnkuZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmNsYXNzRGVjbGFyYXRpb24sICI8c3ludGF4LWVycm9yPiIpOwogICAgICByZXR1cm47CiAgICB9CgogICAgZmluYWwgaW50IHN0YXJ0Q2hhck9mZnNldCA9CiAgICAgICAgbWV0YWRhdGEgPT0gbnVsbCA/IGJlZ2luVG9rZW4uY2hhck9mZnNldCA6IG1ldGFkYXRhLmZpcnN0LmNoYXJPZmZzZXQ7CgogICAgbGlicmFyeS5hZGRDbGFzcygKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgICBtZXRhZGF0YSwKICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIHN1cGVydHlwZSwKICAgICAgICBpbnRlcmZhY2VzLAogICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZFRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgc3VwZXJ0eXBlT2Zmc2V0KTsKICB9CgogIE9iamVjdCBudWxsSWZQYXJzZXJSZWNvdmVyeShPYmplY3Qgbm9kZSkgewogICAgcmV0dXJuIG5vZGUgaXMgUGFyc2VyUmVjb3ZlcnkgPyBudWxsIDogbm9kZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kTWl4aW5EZWNsYXJhdGlvbiIpOwogICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50ID0gZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQobWl4aW5Ub2tlbik7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzID0gcG9wKE51bGxWYWx1ZS5UeXBlQnVpbGRlckxpc3QpOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gc3VwZXJ0eXBlQ29uc3RyYWludHMgPSBudWxsSWZQYXJzZXJSZWNvdmVyeShwb3AoKSk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogICAgaW50IG5hbWVPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoTnVsbFZhbHVlLk1ldGFkYXRhKTsKICAgIGNoZWNrRW1wdHkobWl4aW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIGxpYnJhcnkuZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLm1peGluRGVjbGFyYXRpb24sICI8c3ludGF4LWVycm9yPiIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgc3RhcnRPZmZzZXQgPQogICAgICAgIG1ldGFkYXRhID09IG51bGwgPyBtaXhpblRva2VuLmNoYXJPZmZzZXQgOiBtZXRhZGF0YS5maXJzdC5jaGFyT2Zmc2V0OwogICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlOwogICAgaWYgKHN1cGVydHlwZUNvbnN0cmFpbnRzICE9IG51bGwgJiYgc3VwZXJ0eXBlQ29uc3RyYWludHMuaXNOb3RFbXB0eSkgewogICAgICBpZiAoc3VwZXJ0eXBlQ29uc3RyYWludHMubGVuZ3RoID09IDEpIHsKICAgICAgICBzdXBlcnR5cGUgPSBzdXBlcnR5cGVDb25zdHJhaW50cy5maXJzdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdXBlcnR5cGUgPSBuZXcgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXIoCiAgICAgICAgICAgIHN1cGVydHlwZUNvbnN0cmFpbnRzLmZpcnN0LCBzdXBlcnR5cGVDb25zdHJhaW50cy5za2lwKDEpLnRvTGlzdCgpKTsKICAgICAgfQogICAgfQogICAgbGlicmFyeS5hZGRNaXhpbkRlY2xhcmF0aW9uKAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1peGluRGVjbGFyYXRpb25NYXNrLAogICAgICAgIG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgaW50ZXJmYWNlcywKICAgICAgICBzdGFydE9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZFRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgLTEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uKFRva2VuIGV4dGVuc2lvbktleXdvcmQsIFRva2VuIG5hbWVUb2tlbikgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUoZXh0ZW5zaW9uS2V5d29yZCwKICAgICAgICBbVmFsdWVLaW5kLlR5cGVWYXJpYWJsZUxpc3RPck51bGwsIFZhbHVlS2luZC5NZXRhZGF0YUxpc3RPck51bGxdKSk7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uIik7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5leHRlbnNpb25EZWNsYXJhdGlvbiwgImV4dGVuc2lvbiIpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBpbnQgb2Zmc2V0ID0gbmFtZVRva2VuPy5jaGFyT2Zmc2V0ID8/IGV4dGVuc2lvbktleXdvcmQuY2hhck9mZnNldDsKICAgIFN0cmluZyBuYW1lID0gbmFtZVRva2VuPy5sZXhlbWUgPz8KICAgICAgICAvLyBTeW50aGVzaXplZCBuYW1lIHVzZWQgaW50ZXJuYWxseS4KICAgICAgICAnZXh0ZW5zaW9uIyR7dW5uYW1lZEV4dGVuc2lvbkNvdW50ZXIrK30nOwogICAgcHVzaChuYW1lKTsKICAgIHB1c2gob2Zmc2V0KTsKICAgIHB1c2godHlwZVZhcmlhYmxlcyA/PyBOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgICBsaWJyYXJ5LmN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyCiAgICAgICAgLm1hcmtBc0V4dGVuc2lvbkRlY2xhcmF0aW9uKG5hbWUsIG9mZnNldCwgdHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4dGVuc2lvbkRlY2xhcmF0aW9uKAogICAgICBUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBvbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBhc3NlcnQoY2hlY2tTdGF0ZShleHRlbnNpb25LZXl3b3JkLCBbCiAgICAgIFZhbHVlS2luZC5UeXBlQnVpbGRlciwKICAgICAgVmFsdWVLaW5kLlR5cGVWYXJpYWJsZUxpc3RPck51bGwsCiAgICAgIFZhbHVlS2luZC5JbnRlZ2VyLAogICAgICBWYWx1ZUtpbmQuTmFtZU9yTnVsbCwKICAgICAgVmFsdWVLaW5kLk1ldGFkYXRhTGlzdE9yTnVsbAogICAgXSkpOwogICAgZGVidWdFdmVudCgiZW5kRXh0ZW5zaW9uRGVjbGFyYXRpb24iKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGV4dGVuc2lvbktleXdvcmQpOwogICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogICAgaW50IG5hbWVPZmZzZXQgPSBwb3AoKTsKICAgIFN0cmluZyBuYW1lID0gcG9wKE51bGxWYWx1ZS5OYW1lKTsKICAgIGlmIChuYW1lID09IG51bGwpIHsKICAgICAgbmFtZU9mZnNldCA9IGV4dGVuc2lvbktleXdvcmQuY2hhck9mZnNldDsKICAgICAgbmFtZSA9ICckbmFtZU9mZnNldCc7CiAgICB9CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoTnVsbFZhbHVlLk1ldGFkYXRhKTsKICAgIGNoZWNrRW1wdHkoZXh0ZW5zaW9uS2V5d29yZC5jaGFyT2Zmc2V0KTsKICAgIGludCBzdGFydE9mZnNldCA9IG1ldGFkYXRhID09IG51bGwKICAgICAgICA/IGV4dGVuc2lvbktleXdvcmQuY2hhck9mZnNldAogICAgICAgIDogbWV0YWRhdGEuZmlyc3QuY2hhck9mZnNldDsKICAgIGxpYnJhcnkuYWRkRXh0ZW5zaW9uRGVjbGFyYXRpb24oCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBtb2RpZmllcnMgb24gZXh0ZW5zaW9ucz8KICAgICAgICAwLAogICAgICAgIG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgc3RhcnRPZmZzZXQsCiAgICAgICAgbmFtZU9mZnNldCwKICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIFByb2NlZHVyZUtpbmQgY29tcHV0ZVByb2NlZHVyZUtpbmQoVG9rZW4gdG9rZW4pIHsKICAgIGlmICh0b2tlbiA9PSBudWxsKSByZXR1cm4gUHJvY2VkdXJlS2luZC5NZXRob2Q7CiAgICBpZiAob3B0aW9uYWwoImdldCIsIHRva2VuKSkgcmV0dXJuIFByb2NlZHVyZUtpbmQuR2V0dGVyOwogICAgaWYgKG9wdGlvbmFsKCJzZXQiLCB0b2tlbikpIHJldHVybiBQcm9jZWR1cmVLaW5kLlNldHRlcjsKICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgdG9rZW4ubGV4ZW1lLCAiY29tcHV0ZVByb2NlZHVyZUtpbmQiLCB0b2tlbi5jaGFyT2Zmc2V0LCB1cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblRvcExldmVsTWV0aG9kKFRva2VuIGxhc3RDb25zdW1lZCwgVG9rZW4gZXh0ZXJuYWxUb2tlbikgewogICAgbGlicmFyeS5iZWdpbk5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQudG9wTGV2ZWxNZXRob2QsICIjbWV0aG9kIiwKICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgICBwdXNoKGV4dGVybmFsVG9rZW4gIT0gbnVsbCA/IGV4dGVybmFsTWFzayA6IDApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUb3BMZXZlbE1ldGhvZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBnZXRPclNldCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZFRvcExldmVsTWV0aG9kIik7CiAgICBNZXRob2RCb2R5IGtpbmQgPSBwb3AoKTsKICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscyA9IHBvcCgpOwogICAgaW50IGZvcm1hbHNPZmZzZXQgPSBwb3AoKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgaW50IGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gcG9wKCk7CiAgICBib29sIGlzQWJzdHJhY3QgPSBraW5kID09IE1ldGhvZEJvZHkuQWJzdHJhY3Q7CiAgICBpZiAoZ2V0T3JTZXQgIT0gbnVsbCAmJiBvcHRpb25hbCgic2V0IiwgZ2V0T3JTZXQpKSB7CiAgICAgIGlmIChmb3JtYWxzID09IG51bGwgfHwgZm9ybWFscy5sZW5ndGggIT0gMSkgewogICAgICAgIC8vIFRoaXMgaXNuJ3QgYWJzdHJhY3QgYXMgd2UnbGwgYWRkIGFuIGVycm9yLXJlY292ZXJ5IG5vZGUgaW4KICAgICAgICAvLyBbQm9keUJ1aWxkZXIuZmluaXNoRnVuY3Rpb25dLgogICAgICAgIGlzQWJzdHJhY3QgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaW50IG1vZGlmaWVycyA9IHBvcCgpOwogICAgaWYgKGlzQWJzdHJhY3QpIHsKICAgICAgbW9kaWZpZXJzIHw9IGFic3RyYWN0TWFzazsKICAgIH0KICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgbW9kaWZpZXJzIHw9IGV4dGVybmFsTWFzazsKICAgIH0KICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgbGlicmFyeQogICAgICAgIC5lbmROZXN0ZWREZWNsYXJhdGlvbihUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnRvcExldmVsTWV0aG9kLCAiI21ldGhvZCIpCiAgICAgICAgLnJlc29sdmVUeXBlcyh0eXBlVmFyaWFibGVzLCBsaWJyYXJ5KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CiAgICBmaW5hbCBpbnQgc3RhcnRDaGFyT2Zmc2V0ID0KICAgICAgICBtZXRhZGF0YSA9PSBudWxsID8gYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0IDogbWV0YWRhdGEuZmlyc3QuY2hhck9mZnNldDsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgbGlicmFyeS5hZGRQcm9jZWR1cmUoCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIGZvcm1hbHMsCiAgICAgICAgY29tcHV0ZVByb2NlZHVyZUtpbmQoZ2V0T3JTZXQpLAogICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGZvcm1hbHNPZmZzZXQsCiAgICAgICAgZW5kVG9rZW4uY2hhck9mZnNldCwKICAgICAgICBuYXRpdmVNZXRob2ROYW1lLAogICAgICAgIGlzVG9wTGV2ZWw6IHRydWUpOwogICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keShUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHkiKTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgcHVzaChNZXRob2RCb2R5LlJlZ3VsYXIpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChNZXRob2RCb2R5LkFic3RyYWN0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZChUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgaWYgKCFlbmFibGVOYXRpdmUpIHsKICAgICAgc3VwZXIuaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIG1lc3NhZ2VFeHBlY3RlZEJsb2NrVG9Ta2lwLCBuYXRpdmVUb2tlbiwgbmF0aXZlVG9rZW4pOwogICAgfQogICAgcHVzaChNZXRob2RCb2R5LlJlZ3VsYXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Z1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9GdW5jdGlvbkJvZHkiKTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgcHVzaChNZXRob2RCb2R5LlJlZ3VsYXIpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChNZXRob2RCb2R5LkFic3RyYWN0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRnVuY3Rpb25Cb2R5U2tpcHBlZChUb2tlbiB0b2tlbiwgYm9vbCBpc0V4cHJlc3Npb25Cb2R5KSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkIik7CiAgICBwdXNoKE1ldGhvZEJvZHkuUmVndWxhcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWV0aG9kKFRva2VuIGV4dGVybmFsVG9rZW4sIFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LCBUb2tlbiBnZXRPclNldCwgVG9rZW4gbmFtZSkgewogICAgaW5Db25zdHJ1Y3RvciA9CiAgICAgICAgbmFtZT8ubGV4ZW1lID09IGxpYnJhcnkuY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZSAmJgogICAgICAgICAgICBnZXRPclNldCA9PSBudWxsOwogICAgTGlzdDxNb2RpZmllcj4gbW9kaWZpZXJzOwogICAgaWYgKGV4dGVybmFsVG9rZW4gIT0gbnVsbCkgewogICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgbW9kaWZpZXJzLmFkZChFeHRlcm5hbCk7CiAgICB9CiAgICBpZiAoc3RhdGljVG9rZW4gIT0gbnVsbCkgewogICAgICBpZiAoaW5Db25zdHJ1Y3RvcikgewogICAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIG1lc3NhZ2VTdGF0aWNDb25zdHJ1Y3Rvciwgc3RhdGljVG9rZW4sIHN0YXRpY1Rva2VuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgICBtb2RpZmllcnMuYWRkKFN0YXRpYyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsKSB7CiAgICAgIG1vZGlmaWVycyA/Pz0gPE1vZGlmaWVyPltdOwogICAgICBtb2RpZmllcnMuYWRkKENvdmFyaWFudCk7CiAgICB9CiAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwpIHsKICAgICAgU3RyaW5nIGxleGVtZSA9IHZhckZpbmFsT3JDb25zdC5sZXhlbWU7CiAgICAgIGlmIChpZGVudGljYWwoJ3ZhcicsIGxleGVtZSkpIHsKICAgICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgICBtb2RpZmllcnMuYWRkKFZhcik7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdmaW5hbCcsIGxleGVtZSkpIHsKICAgICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgICBtb2RpZmllcnMuYWRkKEZpbmFsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgICBtb2RpZmllcnMuYWRkKENvbnN0KTsKICAgICAgfQogICAgfQogICAgcHVzaCh2YXJGaW5hbE9yQ29uc3Q/LmNoYXJPZmZzZXQgPz8gLTEpOwogICAgcHVzaChtb2RpZmllcnMgPz8gTnVsbFZhbHVlLk1vZGlmaWVycyk7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5zdGF0aWNPckluc3RhbmNlTWV0aG9kT3JDb25zdHJ1Y3RvciwgIiNtZXRob2QiLAogICAgICAgIGhhc01lbWJlcnM6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0aG9kKFRva2VuIGdldE9yU2V0LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBiZWdpblBhcmFtLAogICAgICBUb2tlbiBiZWdpbkluaXRpYWxpemVycywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGFzc2VydChjaGVja1N0YXRlKGJlZ2luVG9rZW4sIFtWYWx1ZUtpbmQuTWV0aG9kQm9keV0pKTsKICAgIGRlYnVnRXZlbnQoIk1ldGhvZCIpOwogICAgTWV0aG9kQm9keSBib2R5S2luZCA9IHBvcCgpOwogICAgaWYgKGJvZHlLaW5kID09IE1ldGhvZEJvZHkuUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSkgewogICAgICAvLyBUaGlzIHdpbGwgY2F1c2UgYW4gZXJyb3IgbGF0ZXIuCiAgICAgIHBvcCgpOwogICAgfQogICAgYXNzZXJ0KGNoZWNrU3RhdGUoYmVnaW5Ub2tlbiwgWwogICAgICBWYWx1ZUtpbmQuRm9ybWFsc09yTnVsbCwKICAgICAgVmFsdWVLaW5kLkludGVnZXIsIC8vIGZvcm1hbHMgb2Zmc2V0CiAgICAgIFZhbHVlS2luZC5UeXBlVmFyaWFibGVMaXN0T3JOdWxsLAogICAgICBWYWx1ZUtpbmQuSW50ZWdlciwgLy8gbmFtZSBvZmZzZXQKICAgICAgdW5pb25PZktpbmRzKFsKICAgICAgICBWYWx1ZUtpbmQuTmFtZSwKICAgICAgICBWYWx1ZUtpbmQuUXVhbGlmaWVkTmFtZSwKICAgICAgICBWYWx1ZUtpbmQuT3BlcmF0b3IsCiAgICAgICAgVmFsdWVLaW5kLlBhcnNlclJlY292ZXJ5LAogICAgICBdKSwKICAgICAgVmFsdWVLaW5kLlR5cGVCdWlsZGVyT3JOdWxsLAogICAgICBWYWx1ZUtpbmQuTW9kaWZpZXJzT3JOdWxsLAogICAgICBWYWx1ZUtpbmQuSW50ZWdlciwgLy8gdmFyL2ZpbmFsL2NvbnN0IG9mZnNldAogICAgICBWYWx1ZUtpbmQuTWV0YWRhdGFMaXN0T3JOdWxsLAogICAgXSkpOwogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0gcG9wKCk7CiAgICBpbnQgZm9ybWFsc09mZnNldCA9IHBvcCgpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWVPck9wZXJhdG9yID0gcG9wKCk7CiAgICBpZiAoT3BlcmF0b3Iuc3VidHJhY3QgPT0gbmFtZU9yT3BlcmF0b3IgJiYgZm9ybWFscyA9PSBudWxsKSB7CiAgICAgIG5hbWVPck9wZXJhdG9yID0gT3BlcmF0b3IudW5hcnlNaW51czsKICAgIH0KICAgIE9iamVjdCBuYW1lOwogICAgUHJvY2VkdXJlS2luZCBraW5kOwogICAgaWYgKG5hbWVPck9wZXJhdG9yIGlzIE9wZXJhdG9yKSB7CiAgICAgIG5hbWUgPSBvcGVyYXRvclRvU3RyaW5nKG5hbWVPck9wZXJhdG9yKTsKICAgICAga2luZCA9IFByb2NlZHVyZUtpbmQuT3BlcmF0b3I7CiAgICAgIGludCByZXF1aXJlZEFyZ3VtZW50Q291bnQgPSBvcGVyYXRvclJlcXVpcmVkQXJndW1lbnRDb3VudChuYW1lT3JPcGVyYXRvcik7CiAgICAgIGlmICgoZm9ybWFscz8ubGVuZ3RoID8/IDApICE9IHJlcXVpcmVkQXJndW1lbnRDb3VudCkgewogICAgICAgIHZhciB0ZW1wbGF0ZTsKICAgICAgICBzd2l0Y2ggKHJlcXVpcmVkQXJndW1lbnRDb3VudCkgewogICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDA7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgaWYgKE9wZXJhdG9yLnN1YnRyYWN0ID09IG5hbWVPck9wZXJhdG9yKSB7CiAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDI7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHVuaGFuZGxlZCgiJHJlcXVpcmVkQXJndW1lbnRDb3VudCIsICJvcGVyYXRvclJlcXVpcmVkQXJndW1lbnRDb3VudCIsCiAgICAgICAgICAgICAgICBjaGFyT2Zmc2V0LCB1cmkpOwogICAgICAgIH0KICAgICAgICBTdHJpbmcgc3RyaW5nID0gbmFtZTsKICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlLndpdGhBcmd1bWVudHMobmFtZSksIGNoYXJPZmZzZXQsIHN0cmluZy5sZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICAgICAgICBpZiAoIWZvcm1hbC5pc1JlcXVpcmVkKSB7CiAgICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzLCBmb3JtYWwuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgZm9ybWFsLm5hbWUubGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgbmFtZSA9IG5hbWVPck9wZXJhdG9yOwogICAgICBraW5kID0gY29tcHV0ZVByb2NlZHVyZUtpbmQoZ2V0T3JTZXQpOwogICAgfQogICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSA9IHBvcCgpOwogICAgYm9vbCBpc0Fic3RyYWN0ID0gYm9keUtpbmQgPT0gTWV0aG9kQm9keS5BYnN0cmFjdDsKICAgIGlmIChnZXRPclNldCAhPSBudWxsICYmIG9wdGlvbmFsKCJzZXQiLCBnZXRPclNldCkpIHsKICAgICAgaWYgKGZvcm1hbHMgPT0gbnVsbCB8fCBmb3JtYWxzLmxlbmd0aCAhPSAxKSB7CiAgICAgICAgLy8gVGhpcyBpc24ndCBhYnN0cmFjdCBhcyB3ZSdsbCBhZGQgYW4gZXJyb3ItcmVjb3Zlcnkgbm9kZSBpbgogICAgICAgIC8vIFtCb2R5QnVpbGRlci5maW5pc2hGdW5jdGlvbl0uCiAgICAgICAgaXNBYnN0cmFjdCA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpbnQgbW9kaWZpZXJzID0gTW9kaWZpZXIudmFsaWRhdGUocG9wKCksIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogICAgaWYgKG5hdGl2ZU1ldGhvZE5hbWUgIT0gbnVsbCkgewogICAgICBtb2RpZmllcnMgfD0gZXh0ZXJuYWxNYXNrOwogICAgfQogICAgaWYgKChtb2RpZmllcnMgJiBleHRlcm5hbE1hc2spICE9IDApIHsKICAgICAgbW9kaWZpZXJzICY9IH5hYnN0cmFjdE1hc2s7CiAgICB9CiAgICBib29sIGlzQ29uc3QgPSAobW9kaWZpZXJzICYgY29uc3RNYXNrKSAhPSAwOwogICAgaW50IHZhckZpbmFsT3JDb25zdE9mZnNldCA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQgPSBnZXREb2N1bWVudGF0aW9uQ29tbWVudChiZWdpblRva2VuKTsKCiAgICBUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyIGRlY2xhcmF0aW9uQnVpbGRlciA9IGxpYnJhcnkuZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5zdGF0aWNPckluc3RhbmNlTWV0aG9kT3JDb25zdHJ1Y3RvciwgIiNtZXRob2QiKTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIG5hdGl2ZU1ldGhvZE5hbWUgPSBudWxsOwogICAgICBpbkNvbnN0cnVjdG9yID0gZmFsc2U7CiAgICAgIGRlY2xhcmF0aW9uQnVpbGRlci5yZXNvbHZlVHlwZXModHlwZVZhcmlhYmxlcywgbGlicmFyeSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lID0KICAgICAgICBraW5kID09IFByb2NlZHVyZUtpbmQuR2V0dGVyIHx8IGtpbmQgPT0gUHJvY2VkdXJlS2luZC5TZXR0ZXIKICAgICAgICAgICAgPyBudWxsCiAgICAgICAgICAgIDogbGlicmFyeS5jb21wdXRlQW5kVmFsaWRhdGVDb25zdHJ1Y3Rvck5hbWUobmFtZSwgY2hhck9mZnNldCk7CiAgICBpZiAoY29uc3RydWN0b3JOYW1lID09IG51bGwgJiYKICAgICAgICAobW9kaWZpZXJzICYgc3RhdGljTWFzaykgPT0gMCAmJgogICAgICAgIGxpYnJhcnkuY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIua2luZCA9PQogICAgICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmV4dGVuc2lvbkRlY2xhcmF0aW9uKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgZXh0ZW5zaW9uID0KICAgICAgICAgIGxpYnJhcnkuY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXI7CiAgICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gc3Vic3RpdHV0aW9uOwogICAgICBpZiAoZXh0ZW5zaW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgIC8vIFdlIHN5bnRoZXNpemUgdGhlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgW1R5cGVQYXJhbWV0ZXJdcywgaS5lLgogICAgICAgIC8vIHJlbmFtZSAnVCcgdG8gJyNUJy4gV2UgY2Fubm90IGRvIGl0IG9uIHRoZSBidWlsZGVycyBiZWNhdXNlIHRoZWlyCiAgICAgICAgLy8gbmFtZXMgYXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBzY29wZS4KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBIYW5kbGUgc2hhZG93aW5nIG9mIGV4dGVuc2lvbiB0eXBlIHZhcmlhYmxlcy4KICAgICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHN5bnRoZXNpemVkVHlwZVZhcmlhYmxlcyA9IGxpYnJhcnkKICAgICAgICAgICAgLmNvcHlUeXBlVmFyaWFibGVzKGV4dGVuc2lvbi50eXBlVmFyaWFibGVzLCBkZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgICAgICAgICBzeW50aGVzaXplVHlwZVBhcmFtZXRlck5hbWVzOiB0cnVlKTsKICAgICAgICBzdWJzdGl0dXRpb24gPSB7fTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN5bnRoZXNpemVkVHlwZVZhcmlhYmxlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgc3Vic3RpdHV0aW9uW2V4dGVuc2lvbi50eXBlVmFyaWFibGVzW2ldXSA9CiAgICAgICAgICAgICAgbmV3IE5hbWVkVHlwZUJ1aWxkZXIuZnJvbVR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIoCiAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVkVHlwZVZhcmlhYmxlc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgIHR5cGVWYXJpYWJsZXMgPSBzeW50aGVzaXplZFR5cGVWYXJpYWJsZXMuLmFkZEFsbCh0eXBlVmFyaWFibGVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHlwZVZhcmlhYmxlcyA9IHN5bnRoZXNpemVkVHlwZVZhcmlhYmxlczsKICAgICAgICB9CiAgICAgIH0KICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBzeW50aGVzaXplZEZvcm1hbHMgPSBbXTsKICAgICAgVHlwZUJ1aWxkZXIgdGhpc1R5cGUgPSBleHRlbnNpb24uZXh0ZW5zaW9uVGhpc1R5cGU7CiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIHRoaXNUeXBlID0gdGhpc1R5cGUuc3Vic3Qoc3Vic3RpdHV0aW9uKTsKICAgICAgICBkZWNsYXJhdGlvbkJ1aWxkZXIuYWRkVHlwZShuZXcgVW5yZXNvbHZlZFR5cGUodGhpc1R5cGUsIC0xLCBudWxsKSk7CiAgICAgIH0KICAgICAgc3ludGhlc2l6ZWRGb3JtYWxzLmFkZChuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcigKICAgICAgICAgIG51bGwsIGZpbmFsTWFzaywgdGhpc1R5cGUsICIjdGhpcyIsIG51bGwsIGNoYXJPZmZzZXQpKTsKICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgIHN5bnRoZXNpemVkRm9ybWFscy5hZGRBbGwoZm9ybWFscyk7CiAgICAgIH0KICAgICAgZm9ybWFscyA9IHN5bnRoZXNpemVkRm9ybWFsczsKICAgIH0KCiAgICBkZWNsYXJhdGlvbkJ1aWxkZXIucmVzb2x2ZVR5cGVzKHR5cGVWYXJpYWJsZXMsIGxpYnJhcnkpOwogICAgaWYgKGNvbnN0cnVjdG9yTmFtZSAhPSBudWxsKSB7CiAgICAgIGlmIChpc0NvbnN0ICYmIGJvZHlLaW5kICE9IE1ldGhvZEJvZHkuQWJzdHJhY3QpIHsKICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yV2l0aEJvZHksIHZhckZpbmFsT3JDb25zdE9mZnNldCwgNSk7CiAgICAgICAgbW9kaWZpZXJzICY9IH5jb25zdE1hc2s7CiAgICAgIH0KICAgICAgaWYgKHJldHVyblR5cGUgIT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZXBvcnQgdGhpcyBlcnJvciBvbiB0aGUgcmV0dXJuIHR5cGUKICAgICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZSwgYmVnaW5Ub2tlbiwgYmVnaW5Ub2tlbik7CiAgICAgICAgcmV0dXJuVHlwZSA9IG51bGw7CiAgICAgIH0KICAgICAgZmluYWwgaW50IHN0YXJ0Q2hhck9mZnNldCA9CiAgICAgICAgICBtZXRhZGF0YSA9PSBudWxsID8gYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0IDogbWV0YWRhdGEuZmlyc3QuY2hhck9mZnNldDsKICAgICAgbGlicmFyeS5hZGRDb25zdHJ1Y3RvcigKICAgICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgICByZXR1cm5UeXBlLAogICAgICAgICAgbmFtZSwKICAgICAgICAgIGNvbnN0cnVjdG9yTmFtZSwKICAgICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgICBmb3JtYWxzLAogICAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIGZvcm1hbHNPZmZzZXQsCiAgICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSwKICAgICAgICAgIGJlZ2luSW5pdGlhbGl6ZXJzOiBiZWdpbkluaXRpYWxpemVycyk7CiAgICB9IGVsc2UgewogICAgICBpZiAoaXNDb25zdCkgewogICAgICAgIGFkZFByb2JsZW0obWVzc2FnZUNvbnN0TWV0aG9kLCB2YXJGaW5hbE9yQ29uc3RPZmZzZXQsIDUpOwogICAgICAgIG1vZGlmaWVycyAmPSB+Y29uc3RNYXNrOwogICAgICB9CiAgICAgIGZpbmFsIGludCBzdGFydENoYXJPZmZzZXQgPQogICAgICAgICAgbWV0YWRhdGEgPT0gbnVsbCA/IGJlZ2luVG9rZW4uY2hhck9mZnNldCA6IG1ldGFkYXRhLmZpcnN0LmNoYXJPZmZzZXQ7CiAgICAgIGxpYnJhcnkuYWRkUHJvY2VkdXJlKAogICAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgICBtZXRhZGF0YSwKICAgICAgICAgIG1vZGlmaWVycywKICAgICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgICBuYW1lLAogICAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICAgIGZvcm1hbHMsCiAgICAgICAgICBraW5kLAogICAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIGZvcm1hbHNPZmZzZXQsCiAgICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSwKICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlKTsKICAgIH0KICAgIG5hdGl2ZU1ldGhvZE5hbWUgPSBudWxsOwogICAgaW5Db25zdHJ1Y3RvciA9IGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNlIik7CiAgICBPYmplY3QgbWl4aW5zID0gcG9wKCk7CiAgICBPYmplY3Qgc3VwZXJ0eXBlID0gcG9wKCk7CiAgICBpZiAobWl4aW5zIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobWl4aW5zKTsKICAgIH0gZWxzZSBpZiAoc3VwZXJ0eXBlIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2goc3VwZXJ0eXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobGlicmFyeS5hZGRNaXhpbkFwcGxpY2F0aW9uKAogICAgICAgICAgc3VwZXJ0eXBlLCBtaXhpbnMsIHdpdGhLZXl3b3JkLmNoYXJPZmZzZXQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGNsYXNzS2V5d29yZCwKICAgICAgVG9rZW4gZXF1YWxzLCBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZE5hbWVkTWl4aW5BcHBsaWNhdGlvbiIpOwogICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50ID0gZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoYmVnaW5Ub2tlbik7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzID0gcG9wSWZOb3ROdWxsKGltcGxlbWVudHNLZXl3b3JkKTsKICAgIE9iamVjdCBtaXhpbkFwcGxpY2F0aW9uID0gcG9wKCk7CiAgICBpbnQgbW9kaWZpZXJzID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGJlZ2luVG9rZW4uY2hhck9mZnNldCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSB8fCBtaXhpbkFwcGxpY2F0aW9uIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIGxpYnJhcnkuZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLm5hbWVkTWl4aW5BcHBsaWNhdGlvbiwgIjxzeW50YXgtZXJyb3I+Iik7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0ID0gYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0OwogICAgaW50IGNoYXJFbmRPZmZzZXQgPSBlbmRUb2tlbi5jaGFyT2Zmc2V0OwogICAgbGlicmFyeS5hZGROYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICBtaXhpbkFwcGxpY2F0aW9uLAogICAgICAgIGludGVyZmFjZXMsCiAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhckVuZE9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVBcmd1bWVudHMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVHlwZUFyZ3VtZW50cyIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxUeXBlQnVpbGRlcj4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PwogICAgICAgIE51bGxWYWx1ZS5UeXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRUeXBlQXJndW1lbnRzIik7CiAgICBwb3AoTnVsbFZhbHVlLlR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTY3JpcHQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlNjcmlwdCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbihUb2tlbiBiYW5nKSB7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnROb25OdWxsQXNzZXJ0RXhwcmVzc2lvbk5vdEVuYWJsZWQoYmFuZyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVR5cGUoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlIik7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnRFcnJvcklmTnVsbGFibGVUeXBlKHF1ZXN0aW9uTWFyayk7CiAgICB9CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMgPSBwb3AoKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobGlicmFyeS5hZGROYW1lZFR5cGUobmFtZSwgYXJndW1lbnRzLCBjaGFyT2Zmc2V0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVMaXN0KGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiVHlwZUxpc3QiKTsKICAgIHB1c2goY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8TmFtZWRUeXBlQnVpbGRlcj4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PwogICAgICAgIG5ldyBQYXJzZXJSZWNvdmVyeSgtMSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1R5cGVWYXJpYWJsZXMoVG9rZW4gdG9rZW4pIHsKICAgIHN1cGVyLmhhbmRsZU5vVHlwZVZhcmlhYmxlcyh0b2tlbik7CiAgICBpbkNvbnN0cnVjdG9yTmFtZSA9IGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVWb2lkS2V5d29yZChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiVm9pZEtleXdvcmQiKTsKICAgIHB1c2gobGlicmFyeS5hZGRWb2lkVHlwZSh0b2tlbi5jaGFyT2Zmc2V0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ybWFsUGFyYW1ldGVyKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQsIFRva2VuIHJlcXVpcmVkVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiB2YXJGaW5hbE9yQ29uc3QpIHsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBoYW5kbGUgcmVxdWlyZWQgdG9rZW4KICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydE5vbk51bGxhYmxlTW9kaWZpZXJFcnJvcihyZXF1aXJlZFRva2VuKTsKICAgIH0KICAgIHB1c2goKGNvdmFyaWFudFRva2VuICE9IG51bGwgPyBjb3ZhcmlhbnRNYXNrIDogMCkgfAogICAgICAgIChyZXF1aXJlZFRva2VuICE9IG51bGwgPyByZXF1aXJlZE1hc2sgOiAwKSB8CiAgICAgICAgTW9kaWZpZXIudmFsaWRhdGVWYXJGaW5hbE9yQ29uc3QodmFyRmluYWxPckNvbnN0Py5sZXhlbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVyKAogICAgICBUb2tlbiB0aGlzS2V5d29yZCwKICAgICAgVG9rZW4gcGVyaW9kQWZ0ZXJUaGlzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIGluaXRpYWxpemVyU3RhcnQsCiAgICAgIFRva2VuIGluaXRpYWxpemVyRW5kLAogICAgICBGb3JtYWxQYXJhbWV0ZXJLaW5kIGtpbmQsCiAgICAgIE1lbWJlcktpbmQgbWVtYmVyS2luZCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVyIik7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIFR5cGVCdWlsZGVyIHR5cGUgPSBudWxsSWZQYXJzZXJSZWNvdmVyeShwb3AoKSk7CiAgICBpbnQgbW9kaWZpZXJzID0gcG9wKCk7CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmFtZSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGxpYnJhcnkuYWRkRm9ybWFsUGFyYW1ldGVyKG1ldGFkYXRhLCBtb2RpZmllcnMsIHR5cGUsIG5hbWUsCiAgICAgICAgICB0aGlzS2V5d29yZCAhPSBudWxsLCBjaGFyT2Zmc2V0LCBpbml0aWFsaXplclN0YXJ0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpIHsKICAgIC8vIElnbm9yZWQgZm9yIG5vdy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24iKTsKICAgIC8vIElnbm9yZWQgZm9yIG5vdy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIGVxdWFscywgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlZhbHVlZEZvcm1hbFBhcmFtZXRlciIpOwogICAgLy8gSWdub3JlZCBmb3Igbm93LgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JtYWxQYXJhbWV0ZXJXaXRob3V0VmFsdWUoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlcldpdGhvdXRWYWx1ZSIpOwogICAgLy8gSWdub3JlZCBmb3Igbm93LgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyIpOwogICAgRm9ybWFsUGFyYW1ldGVyS2luZCBraW5kID0gb3B0aW9uYWwoInsiLCBiZWdpblRva2VuKQogICAgICAgID8gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkCiAgICAgICAgOiBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbDsKICAgIC8vIFdoZW4gcmVjb3ZlcmluZyBmcm9tIGFuIGVtcHR5IGxpc3Qgb2Ygb3B0aW9uYWwgYXJndW1lbnRzLCBjb3VudCBtYXkgYmUKICAgIC8vIDAuIEl0IG1pZ2h0IGJlIHNpbXBsZXIgaWYgdGhlIHBhcnNlciBkaWRuJ3QgY2FsbCB0aGlzIG1ldGhvZCBpbiB0aGF0CiAgICAvLyBjYXNlLCBob3dldmVyLCB0aGVuIFtiZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVyc10gd291bGRuJ3QgYWx3YXlzIGJlCiAgICAvLyBtYXRjaGVkIGJ5IHRoaXMgbWV0aG9kLgogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBwYXJhbWV0ZXJzID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpOwogICAgaWYgKHBhcmFtZXRlcnMgPT0gbnVsbCkgewogICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShvZmZzZXRGb3JUb2tlbihiZWdpblRva2VuKSkpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlciBpbiBwYXJhbWV0ZXJzKSB7CiAgICAgICAgcGFyYW1ldGVyLmtpbmQgPSBraW5kOwogICAgICB9CiAgICAgIHB1c2gocGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVycyIpOwogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzOwogICAgaWYgKGNvdW50ID09IDEpIHsKICAgICAgT2JqZWN0IGxhc3QgPSBwb3AoKTsKICAgICAgaWYgKGxhc3QgaXMgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPikgewogICAgICAgIGZvcm1hbHMgPSBsYXN0OwogICAgICB9IGVsc2UgaWYgKGxhc3QgaXMhIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgYXNzZXJ0KGxhc3QgIT0gbnVsbCk7CiAgICAgICAgZm9ybWFscyA9IG5ldyBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KDEpOwogICAgICAgIGZvcm1hbHNbMF0gPSBsYXN0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNvdW50ID4gMSkgewogICAgICBPYmplY3QgbGFzdCA9IHBvcCgpOwogICAgICBjb3VudC0tOwogICAgICBpZiAobGFzdCBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICAgIGRpc2NhcmQoY291bnQpOwogICAgICB9IGVsc2UgaWYgKGxhc3QgaXMgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPikgewogICAgICAgIGZvcm1hbHMgPSBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigpCiAgICAgICAgICAgIC5wb3BQYWRkZWQoc3RhY2ssIGNvdW50LCBsYXN0Lmxlbmd0aCk7CiAgICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgZm9ybWFscy5zZXRSYW5nZShjb3VudCwgZm9ybWFscy5sZW5ndGgsIGxhc3QpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmb3JtYWxzID0gY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4oKQogICAgICAgICAgICAucG9wUGFkZGVkKHN0YWNrLCBjb3VudCwgMSk7CiAgICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgZm9ybWFsc1tjb3VudF0gPSBsYXN0OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICBhc3NlcnQoZm9ybWFscy5pc05vdEVtcHR5KTsKICAgICAgaWYgKGZvcm1hbHMubGVuZ3RoID09IDIpIHsKICAgICAgICAvLyBUaGUgbmFtZSBtYXkgYmUgbnVsbCBmb3IgZ2VuZXJhbGl6ZWQgZnVuY3Rpb24gdHlwZXMuCiAgICAgICAgaWYgKGZvcm1hbHNbMF0ubmFtZSAhPSBudWxsICYmIGZvcm1hbHNbMF0ubmFtZSA9PSBmb3JtYWxzWzFdLm5hbWUpIHsKICAgICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZS53aXRoQXJndW1lbnRzKGZvcm1hbHNbMV0ubmFtZSksCiAgICAgICAgICAgICAgZm9ybWFsc1sxXS5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIGZvcm1hbHNbMV0ubmFtZS5sZW5ndGgsCiAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZm9ybWFsc1sxXS5uYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwgZm9ybWFsc1swXS5jaGFyT2Zmc2V0LCBmb3JtYWxzWzBdLm5hbWUubGVuZ3RoKQogICAgICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChmb3JtYWxzLmxlbmd0aCA+IDIpIHsKICAgICAgICBNYXA8U3RyaW5nLCBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBzZWVuTmFtZXMgPQogICAgICAgICAgICA8U3RyaW5nLCBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPnt9OwogICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICAgICAgaWYgKGZvcm1hbC5uYW1lID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHNlZW5OYW1lcy5jb250YWluc0tleShmb3JtYWwubmFtZSkpIHsKICAgICAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWUud2l0aEFyZ3VtZW50cyhmb3JtYWwubmFtZSksCiAgICAgICAgICAgICAgICBmb3JtYWwuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGZvcm1hbC5uYW1lLmxlbmd0aCwKICAgICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlCiAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmb3JtYWwubmFtZSkKICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBzZWVuTmFtZXNbZm9ybWFsLm5hbWVdLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbk5hbWVzW2Zvcm1hbC5uYW1lXS5uYW1lLmxlbmd0aCkKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2Vlbk5hbWVzW2Zvcm1hbC5uYW1lXSA9IGZvcm1hbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHB1c2goYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICAgIHB1c2goZm9ybWFscyA/PyBOdWxsVmFsdWUuRm9ybWFsUGFyYW1ldGVycyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogICAgc3VwZXIuaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzKHRva2VuLCBraW5kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQXNzZXJ0KFRva2VuIGFzc2VydEtleXdvcmQsIEFzc2VydCBraW5kLCBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIFRva2VuIGNvbW1hVG9rZW4sIFRva2VuIHNlbWljb2xvblRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc3NlcnQiKTsKICAgIC8vIERvIG5vdGhpbmcKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRW51bShUb2tlbiBlbnVtS2V5d29yZCwgVG9rZW4gbGVmdEJyYWNlLCBpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkVudW0iKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGVudW1LZXl3b3JkKTsKICAgIExpc3Q8RW51bUNvbnN0YW50SW5mbz4gZW51bUNvbnN0YW50SW5mb3MgPQogICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PEVudW1Db25zdGFudEluZm8+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOyAvLyBpZGVudGlmaWVyIGNoYXIgb2Zmc2V0LgogICAgaW50IHN0YXJ0Q2hhck9mZnNldCA9IGVudW1LZXl3b3JkLmNoYXJPZmZzZXQ7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGVudW1LZXl3b3JkLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHJldHVybjsKICAgIGxpYnJhcnkuYWRkRW51bShkb2N1bWVudGF0aW9uQ29tbWVudCwgbWV0YWRhdGEsIG5hbWUsIGVudW1Db25zdGFudEluZm9zLAogICAgICAgIHN0YXJ0Q2hhck9mZnNldCwgY2hhck9mZnNldCwgbGVmdEJyYWNlPy5lbmRHcm91cD8uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlQWxpYXMoVG9rZW4gdG9rZW4pIHsKICAgIGxpYnJhcnkuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbihUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnR5cGVkZWYsICIjdHlwZWRlZiIsCiAgICAgICAgaGFzTWVtYmVyczogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZShUb2tlbiBiZWdpblRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkZ1bmN0aW9uVHlwZSIpOwogICAgbGlicmFyeS5iZWdpbk5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZnVuY3Rpb25UeXBlLCAiI2Z1bmN0aW9uX3R5cGUiLAogICAgICAgIGhhc01lbWJlcnM6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIiKTsKICAgIGxpYnJhcnkuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmZ1bmN0aW9uVHlwZSwgIiNmdW5jdGlvbl90eXBlIiwKICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZShUb2tlbiBmdW5jdGlvblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uVHlwZSIpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZShxdWVzdGlvbk1hcmspOwogICAgfQogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0gcG9wKCk7CiAgICBwb3AoKTsgLy8gZm9ybWFscyBvZmZzZXQKICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUgPSBwb3AoKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgcHVzaChsaWJyYXJ5LmFkZEZ1bmN0aW9uVHlwZSgKICAgICAgICByZXR1cm5UeXBlLCB0eXBlVmFyaWFibGVzLCBmb3JtYWxzLCBmdW5jdGlvblRva2VuLmNoYXJPZmZzZXQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiBuYW1lVG9rZW4sIFRva2VuIHF1ZXN0aW9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyIik7CiAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPSBwb3AoKTsKICAgIGludCBmb3JtYWxzT2Zmc2V0ID0gcG9wKCk7CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydEVycm9ySWZOdWxsYWJsZVR5cGUocXVlc3Rpb24pOwogICAgfQogICAgcHVzaChsaWJyYXJ5LmFkZEZ1bmN0aW9uVHlwZSgKICAgICAgICByZXR1cm5UeXBlLCB0eXBlVmFyaWFibGVzLCBmb3JtYWxzLCBmb3JtYWxzT2Zmc2V0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZUFsaWFzKAogICAgICBUb2tlbiB0eXBlZGVmS2V5d29yZCwgVG9rZW4gZXF1YWxzLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kRnVuY3Rpb25UeXBlQWxpYXMiKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KHR5cGVkZWZLZXl3b3JkKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlczsKICAgIE9iamVjdCBuYW1lOwogICAgaW50IGNoYXJPZmZzZXQ7CiAgICBGdW5jdGlvblR5cGVCdWlsZGVyIGZ1bmN0aW9uVHlwZTsKICAgIGlmIChlcXVhbHMgPT0gbnVsbCkgewogICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPSBwb3AoKTsKICAgICAgcG9wKCk7IC8vIGZvcm1hbHMgb2Zmc2V0CiAgICAgIHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgICAgY2hhck9mZnNldCA9IHBvcCgpOwogICAgICBuYW1lID0gcG9wKCk7CiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUgPSBwb3AoKTsKICAgICAgLy8gQ3JlYXRlIGEgbmVzdGVkIGRlY2xhcmF0aW9uIHRoYXQgaXMgZW5kZWQgYmVsb3cgYnkKICAgICAgLy8gYGxpYnJhcnkuYWRkRnVuY3Rpb25UeXBlYC4KICAgICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgICBwb3AoKTsgLy8gTWV0YWRhdGEuCiAgICAgICAgbGlicmFyeS5lbmROZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC50eXBlZGVmLCAiPHN5bnRheC1lcnJvcj4iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGlicmFyeS5iZWdpbk5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5mdW5jdGlvblR5cGUsICIjZnVuY3Rpb25fdHlwZSIsCiAgICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgICAgIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgICBsaWJyYXJ5LmFkZEZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBudWxsLCBmb3JtYWxzLCBjaGFyT2Zmc2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciB0eXBlID0gcG9wKCk7CiAgICAgIHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgICAgY2hhck9mZnNldCA9IHBvcCgpOwogICAgICBuYW1lID0gcG9wKCk7CiAgICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgcG9wKCk7IC8vIE1ldGFkYXRhLgogICAgICAgIGxpYnJhcnkuZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZnVuY3Rpb25UeXBlLCAiPHN5bnRheC1lcnJvcj4iKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICAgIC8vIFRPRE8oYWhlKTogV2UgbmVlZCB0byBzdGFydCBhIG5lc3RlZCBkZWNsYXJhdGlvbiB3aGVuIHBhcnNpbmcgdGhlCiAgICAgICAgLy8gZm9ybWFscyBhbmQgcmV0dXJuIHR5cGUgc28gd2UgY2FuIGNvcnJlY3RseSBiaW5kCiAgICAgICAgLy8gYHR5cGUudHlwZVZhcmlhYmxlc2AuIEEgdHlwZWRlZiBjYW4gaGF2ZSB0eXBlIHZhcmlhYmxlcywgYW5kIGEgbmV3CiAgICAgICAgLy8gZnVuY3Rpb24gdHlwZSBjYW4gYWxzbyBoYXZlIHR5cGUgdmFyaWFibGVzIChyZXByZXNlbnRpbmcgdGhlIHR5cGUgb2YKICAgICAgICAvLyBhIGdlbmVyaWMgZnVuY3Rpb24pLgogICAgICAgIGZ1bmN0aW9uVHlwZSA9IHR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBJbXByb3ZlIHRoaXMgZXJyb3IgbWVzc2FnZS4KICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VUeXBlZGVmTm90RnVuY3Rpb24sIGVxdWFscy5jaGFyT2Zmc2V0LCBlcXVhbHMubGVuZ3RoKTsKICAgICAgfQogICAgfQogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KHR5cGVkZWZLZXl3b3JkLmNoYXJPZmZzZXQpOwogICAgbGlicmFyeS5hZGRGdW5jdGlvblR5cGVBbGlhcyhkb2N1bWVudGF0aW9uQ29tbWVudCwgbWV0YWRhdGEsIG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywgZnVuY3Rpb25UeXBlLCBjaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxGaWVsZHMoCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIGludCBjb3VudCwKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZFRvcExldmVsRmllbGRzIik7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3IobGF0ZVRva2VuKTsKICAgIH0KICAgIExpc3Q8RmllbGRJbmZvPiBmaWVsZEluZm9zID0gcG9wRmllbGRJbmZvcyhjb3VudCk7CiAgICBUeXBlQnVpbGRlciB0eXBlID0gbnVsbElmUGFyc2VyUmVjb3ZlcnkocG9wKCkpOwogICAgaW50IG1vZGlmaWVycyA9IChzdGF0aWNUb2tlbiAhPSBudWxsID8gc3RhdGljTWFzayA6IDApIHwKICAgICAgICAoY292YXJpYW50VG9rZW4gIT0gbnVsbCA/IGNvdmFyaWFudE1hc2sgOiAwKSB8CiAgICAgICAgKGxhdGVUb2tlbiAhPSBudWxsID8gbGF0ZU1hc2sgOiAwKSB8CiAgICAgICAgTW9kaWZpZXIudmFsaWRhdGVWYXJGaW5hbE9yQ29uc3QodmFyRmluYWxPckNvbnN0Py5sZXhlbWUpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGJlZ2luVG9rZW4uY2hhck9mZnNldCk7CiAgICBpZiAoZmllbGRJbmZvcyA9PSBudWxsKSByZXR1cm47CiAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQgPSBnZXREb2N1bWVudGF0aW9uQ29tbWVudChiZWdpblRva2VuKTsKICAgIGxpYnJhcnkuYWRkRmllbGRzKAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LCBtZXRhZGF0YSwgbW9kaWZpZXJzLCB0eXBlLCBmaWVsZEluZm9zKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRmllbGRzKFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZpZWxkcyIpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKGxhdGVUb2tlbik7CiAgICB9CiAgICBMaXN0PEZpZWxkSW5mbz4gZmllbGRJbmZvcyA9IHBvcEZpZWxkSW5mb3MoY291bnQpOwogICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHBvcCgpOwogICAgaW50IG1vZGlmaWVycyA9IChzdGF0aWNUb2tlbiAhPSBudWxsID8gc3RhdGljTWFzayA6IDApIHwKICAgICAgICAoY292YXJpYW50VG9rZW4gIT0gbnVsbCA/IGNvdmFyaWFudE1hc2sgOiAwKSB8CiAgICAgICAgKGxhdGVUb2tlbiAhPSBudWxsID8gbGF0ZU1hc2sgOiAwKSB8CiAgICAgICAgTW9kaWZpZXIudmFsaWRhdGVWYXJGaW5hbE9yQ29uc3QodmFyRmluYWxPckNvbnN0Py5sZXhlbWUpOwogICAgaWYgKHN0YXRpY1Rva2VuID09IG51bGwgJiYgbW9kaWZpZXJzICYgY29uc3RNYXNrICE9IDApIHsKICAgICAgLy8gSXQgaXMgYSBjb21waWxlLXRpbWUgZXJyb3IgaWYgYW4gaW5zdGFuY2UgdmFyaWFibGUgaXMgZGVjbGFyZWQgdG8gYmUKICAgICAgLy8gY29uc3RhbnQuCiAgICAgIGFkZFByb2JsZW0obWVzc2FnZUNvbnN0SW5zdGFuY2VGaWVsZCwgdmFyRmluYWxPckNvbnN0LmNoYXJPZmZzZXQsCiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QubGVuZ3RoKTsKICAgICAgbW9kaWZpZXJzICY9IH5jb25zdE1hc2s7CiAgICB9CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGlmIChmaWVsZEluZm9zID09IG51bGwpIHJldHVybjsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgbGlicmFyeS5hZGRGaWVsZHMoCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsIG1ldGFkYXRhLCBtb2RpZmllcnMsIHR5cGUsIGZpZWxkSW5mb3MpOwogIH0KCiAgTGlzdDxGaWVsZEluZm8+IHBvcEZpZWxkSW5mb3MoaW50IGNvdW50KSB7CiAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEZpZWxkSW5mbz4gZmllbGRJbmZvcyA9IG5ldyBMaXN0PEZpZWxkSW5mbz4oY291bnQpOwogICAgYm9vbCBpc1BhcnNlclJlY292ZXJ5ID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpICE9IC0xOyBpLS0pIHsKICAgICAgaW50IGNoYXJFbmRPZmZzZXQgPSBwb3AoKTsKICAgICAgVG9rZW4gYmVmb3JlTGFzdCA9IHBvcCgpOwogICAgICBUb2tlbiBpbml0aWFsaXplclRva2VuRm9ySW5mZXJlbmNlID0gcG9wKCk7CiAgICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wKCk7CiAgICAgIE9iamVjdCBuYW1lID0gcG9wKE51bGxWYWx1ZS5JZGVudGlmaWVyKTsKICAgICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgICBpc1BhcnNlclJlY292ZXJ5ID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmaWVsZEluZm9zW2ldID0gbmV3IEZpZWxkSW5mbyhuYW1lLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICBpbml0aWFsaXplclRva2VuRm9ySW5mZXJlbmNlLCBiZWZvcmVMYXN0LCBjaGFyRW5kT2Zmc2V0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlzUGFyc2VyUmVjb3ZlcnkgPyBudWxsIDogZmllbGRJbmZvczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luVHlwZVZhcmlhYmxlIik7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogdHlwZSB2YXJpYWJsZSBtZXRhZGF0YSBzaG91bGQgbm90IGJlIGlnbm9yZWQuICBTZWUKICAgIC8vIGRhcnRidWcuY29tLzI4OTgxLgogICAgLyogTGlzdDxNZXRhZGF0YUJ1aWxkZXI8VHlwZUJ1aWxkZXI+PiBtZXRhZGF0YSA9ICovIHBvcCgpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobGlicmFyeS5hZGRUeXBlVmFyaWFibGUobmFtZSwgbnVsbCwgY2hhck9mZnNldCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUeXBlVmFyaWFibGVzRGVmaW5lZChUb2tlbiB0b2tlbiwgaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlVmFyaWFibGVzRGVmaW5lZCIpOwogICAgYXNzZXJ0KGNvdW50ID4gMCk7CiAgICBwdXNoKGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+KCkucG9wKHN0YWNrLCBjb3VudCkgPz8KICAgICAgICBOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbiwgaW50IGluZGV4LCBUb2tlbiBleHRlbmRzT3JTdXBlcikgewogICAgZGVidWdFdmVudCgiZW5kVHlwZVZhcmlhYmxlIik7CiAgICBUeXBlQnVpbGRlciBib3VuZCA9IG51bGxJZlBhcnNlclJlY292ZXJ5KHBvcCgpKTsKICAgIC8vIFBlZWsgdG8gbGVhdmUgdHlwZSBwYXJhbWV0ZXJzIG9uIHRvcCBvZiBzdGFjay4KICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnMgPSBwZWVrKCk7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICB0eXBlUGFyYW1ldGVyc1tpbmRleF0uYm91bmQgPSBib3VuZDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZVZhcmlhYmxlcyhUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kVHlwZVZhcmlhYmxlcyIpOwoKICAgIC8vIFBlZWsgdG8gbGVhdmUgdHlwZSBwYXJhbWV0ZXJzIG9uIHRvcCBvZiBzdGFjay4KICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnMgPSBwZWVrKCk7CgogICAgTWFwPFN0cmluZywgVHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlc0J5TmFtZTsKICAgIGlmICh0eXBlUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIHR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgaWYgKGJ1aWxkZXIuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgaWYgKHR5cGVWYXJpYWJsZXNCeU5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICB0eXBlVmFyaWFibGVzQnlOYW1lID0gbmV3IE1hcDxTdHJpbmcsIFR5cGVWYXJpYWJsZUJ1aWxkZXI+KCk7CiAgICAgICAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIHR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgdHlwZVZhcmlhYmxlc0J5TmFtZVtidWlsZGVyLm5hbWVdID0gYnVpbGRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIC8vIEZpbmQgY3ljbGU6IElmIHRoZXJlJ3Mgbm8gY3ljbGUgd2UgY2FuIGF0IG1vc3Qgc3RlcCB0aHJvdWdoIGFsbAogICAgICAgICAgLy8gYHR5cGVQYXJhbWV0ZXJzYCAoYXQgd2hpY2ggcG9pbnQgdGhlIGxhc3QgYnVpbGRlcnMgYm91bmQgd2lsbCBiZQogICAgICAgICAgLy8gbnVsbCkuCiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGN5Y2xlIHdpdGggYGJ1aWxkZXJgICdpbnNpZGUnIHRoZSBzdGVwcyB0byBnZXQgYmFjawogICAgICAgICAgLy8gdG8gaXQgd2lsbCBhbHNvIGJlIGJvdW5kIGJ5IGB0eXBlUGFyYW1ldGVycy5sZW5ndGhgLgogICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBjeWNsZSB3aXRob3V0IGBidWlsZGVyYCAnaW5zaWRlJyB3ZSB3aWxsIGp1c3QgaWdub3JlCiAgICAgICAgICAvLyBpdCBmb3Igbm93LiBJdCB3aWxsIGJlIHJlcG9ydGVkIHdoZW4gcHJvY2Vzc2luZyBvbmUgb2YgdGhlCiAgICAgICAgICAvLyBgYnVpbGRlcmBzIHRoYXQgaXMgaW4gZmFjdCBgaW5zaWRlYCB0aGUgY3ljbGUuIFRoaXMgbWF0Y2hlcyB0aGUKICAgICAgICAgIC8vIGN5Y2xpYyBjbGFzcyBoaWVyYXJjaHkgZXJyb3IuCiAgICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIGJvdW5kID0gYnVpbGRlcjsKICAgICAgICAgIGZvciAoaW50IHN0ZXBzID0gMDsKICAgICAgICAgICAgICBib3VuZC5ib3VuZCAhPSBudWxsICYmIHN0ZXBzIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOwogICAgICAgICAgICAgICsrc3RlcHMpIHsKICAgICAgICAgICAgYm91bmQgPSB0eXBlVmFyaWFibGVzQnlOYW1lW2JvdW5kLmJvdW5kLm5hbWVdOwogICAgICAgICAgICBpZiAoYm91bmQgPT0gbnVsbCB8fCBib3VuZCA9PSBidWlsZGVyKSBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChib3VuZCA9PSBidWlsZGVyICYmIGJvdW5kLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgICAgLy8gV3JpdGUgb3V0IGN5Y2xlLgogICAgICAgICAgICBMaXN0PFN0cmluZz4gdmlhID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgICAgICAgICBib3VuZCA9IHR5cGVWYXJpYWJsZXNCeU5hbWVbYnVpbGRlci5ib3VuZC5uYW1lXTsKICAgICAgICAgICAgd2hpbGUgKGJvdW5kICE9IGJ1aWxkZXIpIHsKICAgICAgICAgICAgICB2aWEuYWRkKGJvdW5kLm5hbWUpOwogICAgICAgICAgICAgIGJvdW5kID0gdHlwZVZhcmlhYmxlc0J5TmFtZVtib3VuZC5ib3VuZC5uYW1lXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB2aWEuaXNFbXB0eQogICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZURpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzLndpdGhBcmd1bWVudHMoYnVpbGRlci5uYW1lKQogICAgICAgICAgICAgICAgOiB0ZW1wbGF0ZUN5Y2xlSW5UeXBlVmFyaWFibGVzLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5uYW1lLCB2aWEuam9pbigiJywgJyIpKTsKICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBidWlsZGVyLmNoYXJPZmZzZXQsIGJ1aWxkZXIubmFtZS5sZW5ndGgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChpbkNvbnN0cnVjdG9yTmFtZSkgewogICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhUeXBlUGFyYW1ldGVycywKICAgICAgICAgIG9mZnNldEZvclRva2VuKGJlZ2luVG9rZW4pLCBsZW5ndGhPZlNwYW4oYmVnaW5Ub2tlbiwgZW5kVG9rZW4pKTsKICAgICAgaW5Db25zdHJ1Y3Rvck5hbWUgPSBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUGFydE9mKAogICAgICBUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gb2ZLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24sIGJvb2wgaGFzTmFtZSkgewogICAgZGVidWdFdmVudCgiZW5kUGFydE9mIik7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcENoYXJPZmZzZXQoKTsKICAgIE9iamVjdCBjb250YWluaW5nTGlicmFyeSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBpZiAoaGFzTmFtZSkgewogICAgICBsaWJyYXJ5LmFkZFBhcnRPZihtZXRhZGF0YSwKICAgICAgICAgIGZsYXR0ZW5OYW1lKGNvbnRhaW5pbmdMaWJyYXJ5LCBjaGFyT2Zmc2V0LCB1cmkpLCBudWxsLCBjaGFyT2Zmc2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIGxpYnJhcnkuYWRkUGFydE9mKG1ldGFkYXRhLCBudWxsLCBjb250YWluaW5nTGlicmFyeSwgY2hhck9mZnNldCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbnN0cnVjdG9yUmVmZXJlbmNlKAogICAgICBUb2tlbiBzdGFydCwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNvbnN0cnVjdG9yUmVmZXJlbmNlIik7CiAgICBwb3BJZk5vdE51bGwocGVyaW9kQmVmb3JlTmFtZSk7IC8vIGNoYXJPZmZzZXQuCiAgICBTdHJpbmcgc3VmZml4ID0gcG9wSWZOb3ROdWxsKHBlcmlvZEJlZm9yZU5hbWUpOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gdHlwZUFyZ3VtZW50cyA9IHBvcCgpOwogICAgaW50IGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChsaWJyYXJ5LmFkZENvbnN0cnVjdG9yUmVmZXJlbmNlKAogICAgICAgICAgbmFtZSwgdHlwZUFyZ3VtZW50cywgc3VmZml4LCBjaGFyT2Zmc2V0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRmFjdG9yeU1ldGhvZCgKICAgICAgVG9rZW4gbGFzdENvbnN1bWVkLCBUb2tlbiBleHRlcm5hbFRva2VuLCBUb2tlbiBjb25zdFRva2VuKSB7CiAgICBpbkNvbnN0cnVjdG9yID0gdHJ1ZTsKICAgIGxpYnJhcnkuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmZhY3RvcnlNZXRob2QsICIjZmFjdG9yeV9tZXRob2QiLAogICAgICAgIGhhc01lbWJlcnM6IGZhbHNlKTsKICAgIHB1c2goKGV4dGVybmFsVG9rZW4gIT0gbnVsbCA/IGV4dGVybmFsTWFzayA6IDApIHwKICAgICAgICAoY29uc3RUb2tlbiAhPSBudWxsID8gY29uc3RNYXNrIDogMCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBmYWN0b3J5S2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZhY3RvcnlNZXRob2QiKTsKICAgIE1ldGhvZEJvZHkga2luZCA9IHBvcCgpOwogICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyIHJlZGlyZWN0aW9uVGFyZ2V0OwogICAgaWYgKGtpbmQgPT0gTWV0aG9kQm9keS5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KSB7CiAgICAgIHJlZGlyZWN0aW9uVGFyZ2V0ID0gbnVsbElmUGFyc2VyUmVjb3ZlcnkocG9wKCkpOwogICAgfQogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0gcG9wKCk7CiAgICBpbnQgZm9ybWFsc09mZnNldCA9IHBvcCgpOwogICAgcG9wKCk7IC8vIHR5cGUgdmFyaWFibGVzCiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIGludCBtb2RpZmllcnMgPSBwb3AoKTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgbW9kaWZpZXJzIHw9IGV4dGVybmFsTWFzazsKICAgIH0KICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgbGlicmFyeS5lbmROZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZmFjdG9yeU1ldGhvZCwgIjxzeW50YXgtZXJyb3I+Iik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgbGlicmFyeS5hZGRGYWN0b3J5TWV0aG9kKAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICBuYW1lLAogICAgICAgIGZvcm1hbHMsCiAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQsCiAgICAgICAgYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgZm9ybWFsc09mZnNldCwKICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUpOwogICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgICBpbkNvbnN0cnVjdG9yID0gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlJlZGlyZWN0aW5nRmFjdG9yeUJvZHkiKTsKICAgIHB1c2goTWV0aG9kQm9keS5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRmllbGRJbml0aWFsaXplcihUb2tlbiBhc3NpZ25tZW50T3BlcmF0b3IsIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGaWVsZEluaXRpYWxpemVyIik7CiAgICBUb2tlbiBiZWZvcmVMYXN0ID0gYXNzaWdubWVudE9wZXJhdG9yLm5leHQ7CiAgICBUb2tlbiBuZXh0ID0gYmVmb3JlTGFzdC5uZXh0OwogICAgd2hpbGUgKG5leHQgIT0gdG9rZW4gJiYgIW5leHQuaXNFb2YpIHsKICAgICAgLy8gVG8gYXZvaWQgc3RvcmluZyB0aGUgcmVzdCBvZiB0aGUgdG9rZW4gc3RyZWFtLCB3ZSBuZWVkIHRvIGlkZW50aWZ5IHRoZQogICAgICAvLyB0b2tlbiBiZWZvcmUgW3Rva2VuXS4gVGhhdCB0b2tlbiB3aWxsIGJlIHRoZSBsYXN0IHRva2VuIG9mIHRoZQogICAgICAvLyBpbml0aWFsaXplciBleHByZXNzaW9uIGFuZCBieSBzZXR0aW5nIGl0cyB0YWlsIHRvIEVPRiB3ZSBvbmx5IHN0b3JlCiAgICAgIC8vIHRoZSB0b2tlbnMgZm9yIHRoZSBleHByZXNzaW9uLgogICAgICAvLyBUT0RPKGFoZSk6IE1pZ2h0IGJlIGNsZWFyZXIgaWYgdGhpcyBzZWFyY2ggd2FzIG1vdmVkIHRvCiAgICAgIC8vIGBsaWJyYXJ5LmFkZEZpZWxkc2AuCiAgICAgIC8vIFRPRE8oYWhlKTogSSBkb24ndCBldmVuIHRoaW5rIHRoaXMgaXMgbmVjZXNzYXJ5LiBbdG9rZW5dIHBvaW50cyB0byA7CiAgICAgIC8vIG9yICwgYW5kIHdlIGRvbid0IG90aGVyd2lzZSBzdG9yZSB0b2tlbnMuCiAgICAgIGJlZm9yZUxhc3QgPSBuZXh0OwogICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgfQogICAgcHVzaChhc3NpZ25tZW50T3BlcmF0b3IubmV4dCk7CiAgICBwdXNoKGJlZm9yZUxhc3QpOwogICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0ZpZWxkSW5pdGlhbGl6ZXIiKTsKICAgIHB1c2goTnVsbFZhbHVlLkZpZWxkSW5pdGlhbGl6ZXIpOwogICAgcHVzaChOdWxsVmFsdWUuRmllbGRJbml0aWFsaXplcik7CiAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcnMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiSW5pdGlhbGl6ZXJzIik7CiAgICAvLyBJZ25vcmVkIGZvciBub3cuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vSW5pdGlhbGl6ZXJzKCkgewogICAgZGVidWdFdmVudCgiTm9Jbml0aWFsaXplcnMiKTsKICAgIC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBpbml0aWFsaXplciBhbmQgaXQncyBpZ25vcmVkIGZvciBub3cuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRNZW1iZXIoVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRNZW1iZXIiKTsKICAgIHBvcCgpOyAvLyBtZXRhZGF0YSBzdGFyCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1lbWJlcigpIHsKICAgIGRlYnVnRXZlbnQoIk1lbWJlciIpOwogICAgYXNzZXJ0KG5hdGl2ZU1ldGhvZE5hbWUgPT0gbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzV2l0aENsYXVzZShUb2tlbiB3aXRoS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NXaXRoQ2xhdXNlIik7CgogICAgT2JqZWN0IG1peGlucyA9IHBvcCgpOwogICAgaW50IGV4dGVuZHNPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBzdXBlcnR5cGUgPSBwb3AoKTsKICAgIGlmIChzdXBlcnR5cGUgaXMgUGFyc2VyUmVjb3ZlcnkgfHwgbWl4aW5zIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KHdpdGhLZXl3b3JkLmNoYXJPZmZzZXQpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobGlicmFyeS5hZGRNaXhpbkFwcGxpY2F0aW9uKAogICAgICAgICAgc3VwZXJ0eXBlLCBtaXhpbnMsIHdpdGhLZXl3b3JkLmNoYXJPZmZzZXQpKTsKICAgIH0KICAgIHB1c2goZXh0ZW5kc09mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzTm9XaXRoQ2xhdXNlKCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NOb1dpdGhDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NIZWFkZXIoVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCwgVG9rZW4gbmF0aXZlVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNsYXNzSGVhZGVyIik7CiAgICBuYXRpdmVNZXRob2ROYW1lID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5IZWFkZXIoVG9rZW4gbWl4aW5LZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVNaXhpbkhlYWRlciIpOwogICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzT3JNaXhpbkJvZHkoCiAgICAgIENsYXNzS2luZCBraW5kLCBpbnQgbWVtYmVyQ291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc09yTWl4aW5Cb2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzeW5jTW9kaWZpZXIoVG9rZW4gYXN5bmNUb2tlbiwgVG9rZW4gc3RhclRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc3luY01vZGlmaWVyIik7CiAgfQoKICB2b2lkIGFkZFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCB1cmksCiAgICAgICAgd2FzSGFuZGxlZDogd2FzSGFuZGxlZCwgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSWdub3JlZEVycm9yKENvZGU8ZHluYW1pYz4gY29kZSwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBpc0lnbm9yZWRQYXJzZXJFcnJvcihjb2RlLCB0b2tlbikgfHwKICAgICAgICBzdXBlci5pc0lnbm9yZWRFcnJvcihjb2RlLCB0b2tlbik7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBkb2N1bWVudGF0aW9uIGNvbW1lbnQgZm9yIHRoZSBlbnRpdHkgdGhhdCBzdGFydHMgYXQgdGhlCiAgLy8vIGdpdmVuIFt0b2tlbl0sIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyBwcmVjZWRpbmcgZG9jdW1lbnRhdGlvbiBjb21tZW50LgogIHN0YXRpYyBTdHJpbmcgZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGRvY1Rva2VuID0gdG9rZW4ucHJlY2VkaW5nQ29tbWVudHM7CiAgICBpZiAoZG9jVG9rZW4gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBib29sIGluU2xhc2ggPSBmYWxzZTsKICAgIHZhciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICB3aGlsZSAoZG9jVG9rZW4gIT0gbnVsbCkgewogICAgICBTdHJpbmcgbGV4ZW1lID0gZG9jVG9rZW4ubGV4ZW1lOwogICAgICBpZiAobGV4ZW1lLnN0YXJ0c1dpdGgoJy8qKicpKSB7CiAgICAgICAgaW5TbGFzaCA9IGZhbHNlOwogICAgICAgIGJ1ZmZlci5jbGVhcigpOwogICAgICAgIGJ1ZmZlci53cml0ZShsZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGxleGVtZS5zdGFydHNXaXRoKCcvLy8nKSkgewogICAgICAgIGlmICghaW5TbGFzaCkgewogICAgICAgICAgaW5TbGFzaCA9IHRydWU7CiAgICAgICAgICBidWZmZXIuY2xlYXIoKTsKICAgICAgICB9CiAgICAgICAgaWYgKGJ1ZmZlci5pc05vdEVtcHR5KSB7CiAgICAgICAgICBidWZmZXIud3JpdGVsbigpOwogICAgICAgIH0KICAgICAgICBidWZmZXIud3JpdGUobGV4ZW1lKTsKICAgICAgfQogICAgICBkb2NUb2tlbiA9IGRvY1Rva2VuLm5leHQ7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlYnVnRXZlbnQoU3RyaW5nIG5hbWUpIHsKICAgIC8vIHByaW50RXZlbnQoJ091dGxpbmVCdWlsZGVyOiAkbmFtZScpOwogIH0KfQqHPABOTjwBHwE1ASIBLQEzAR0JDhgRKSMcKi4kIywiIyYsKS4w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CiEcCh4IIAYeBAEMISwEAgE3cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9vdXRsaW5lX2J1aWxkZXIuZGFydElzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvaW5mZXJlbmNlX2hlbHBlci5kYXJ0hIYvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBBcmd1bWVudHMsIEV4cHJlc3Npb24sIEZ1bmN0aW9uVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyBMb2NhdGVkTWVzc2FnZSwgTWVzc2FnZTsKCmFic3RyYWN0IGNsYXNzIEluZmVyZW5jZUhlbHBlciB7CiAgQ29yZVR5cGVzIGdldCBjb3JlVHlwZXM7CgogIFVyaSBnZXQgdXJpOwoKICBzZXQgdHJhbnNmb3JtU2V0TGl0ZXJhbHMoYm9vbCB2YWx1ZSk7CgogIEV4cHJlc3Npb24gYnVpbGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0LCBib29sIHN1cHByZXNzTWVzc2FnZX0pOwoKICBMb2NhdGVkTWVzc2FnZSBjaGVja0FyZ3VtZW50c0ZvclR5cGUoCiAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCk7CgogIHZvaWQgYWRkUHJvYmxlbShNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLAogICAgICB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCwgYm9vbCB3YXNIYW5kbGVkfSk7CgogIEV4cHJlc3Npb24gd3JhcEluUHJvYmxlbShFeHByZXNzaW9uIGV4cHJlc3Npb24sIE1lc3NhZ2UgbWVzc2FnZSwgaW50IGxlbmd0aCwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KTsKCiAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZUZvckRpYWdub3N0aWNzKFN0cmluZyBuYW1lLAogICAgICB7U3RyaW5nIGNsYXNzTmFtZSwgYm9vbCBpc1N1cGVyfSk7CgogIEV4cHJlc3Npb24gZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKTsKfQokAE5OPAFLATgBOwEhGwEPASgBRz0BKD8BPzgBTycBNCkBOgIBQHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS9pbmZlcmVuY2VfaGVscGVyLmRhcnROc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0mhkvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIERhcnRUeXBlVmlzaXRvciwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBNZW1iZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAnLi4vLi4vYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydCcgc2hvdyBJbnN0cnVtZW50YXRpb247CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdyBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIsIEltcGxpY2l0RmllbGRUeXBlLCBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAndHlwZV9pbmZlcnJlci5kYXJ0JyBzaG93IFR5cGVJbmZlcnJlcjsKCmltcG9ydCAndHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcgc2hvdyBUeXBlU2NoZW1hRW52aXJvbm1lbnQ7CgplbnVtIFZhcmlhbmNlIHsKICBjb3ZhcmlhbnQsCiAgY29udHJhdmFyaWFudCwKICBpbnZhcmlhbnQsCn0KClZhcmlhbmNlIGludmVydFZhcmlhbmNlKFZhcmlhbmNlIHZhcmlhbmNlKSB7CiAgc3dpdGNoICh2YXJpYW5jZSkgewogICAgY2FzZSBWYXJpYW5jZS5jb3ZhcmlhbnQ6CiAgICAgIHJldHVybiBWYXJpYW5jZS5jb250cmF2YXJpYW50OwogICAgY2FzZSBWYXJpYW5jZS5jb250cmF2YXJpYW50OgogICAgICByZXR1cm4gVmFyaWFuY2UuY292YXJpYW50OwogICAgY2FzZSBWYXJpYW5jZS5pbnZhcmlhbnQ6CiAgfQogIHJldHVybiB2YXJpYW5jZTsKfQoKLy8vIFZpc2l0b3IgdG8gY2hlY2sgd2hldGhlciBhIGdpdmVuIHR5cGUgbWVudGlvbnMgYW55IG9mIGEgY2xhc3MncyB0eXBlCi8vLyBwYXJhbWV0ZXJzIGluIGEgbm9uLWNvdmFyaWFudCBmYXNoaW9uLgpjbGFzcyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkgZXh0ZW5kcyBEYXJ0VHlwZVZpc2l0b3I8Ym9vbD4gewogIFZhcmlhbmNlIF92YXJpYW5jZTsKCiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiBfdHlwZVBhcmFtZXRlcnNUb1NlYXJjaEZvcjsKCiAgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5KHRoaXMuX3R5cGVQYXJhbWV0ZXJzVG9TZWFyY2hGb3IsCiAgICAgIHtWYXJpYW5jZSBpbml0aWFsVmFyaWFuY2V9KQogICAgICA6IF92YXJpYW5jZSA9IGluaXRpYWxWYXJpYW5jZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGlmIChub2RlLnJldHVyblR5cGUuYWNjZXB0KHRoaXMpKSByZXR1cm4gdHJ1ZTsKICAgIFZhcmlhbmNlIG9sZFZhcmlhbmNlID0gX3ZhcmlhbmNlOwogICAgX3ZhcmlhbmNlID0gVmFyaWFuY2UuaW52YXJpYW50OwogICAgZm9yICh2YXIgcGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgaWYgKHBhcmFtZXRlci5ib3VuZC5hY2NlcHQodGhpcykpIHJldHVybiB0cnVlOwogICAgfQogICAgX3ZhcmlhbmNlID0gaW52ZXJ0VmFyaWFuY2Uob2xkVmFyaWFuY2UpOwogICAgZm9yICh2YXIgcGFyYW1ldGVyIGluIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgaWYgKHBhcmFtZXRlci5hY2NlcHQodGhpcykpIHJldHVybiB0cnVlOwogICAgfQogICAgZm9yICh2YXIgcGFyYW1ldGVyIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIGlmIChwYXJhbWV0ZXIudHlwZS5hY2NlcHQodGhpcykpIHJldHVybiB0cnVlOwogICAgfQogICAgX3ZhcmlhbmNlID0gb2xkVmFyaWFuY2U7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIGZvciAodmFyIGFyZ3VtZW50IGluIG5vZGUudHlwZUFyZ3VtZW50cykgewogICAgICBpZiAoYXJndW1lbnQuYWNjZXB0KHRoaXMpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS51bmFsaWFzLmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICByZXR1cm4gX3ZhcmlhbmNlICE9IFZhcmlhbmNlLmNvdmFyaWFudCAmJgogICAgICAgIF90eXBlUGFyYW1ldGVyc1RvU2VhcmNoRm9yLmNvbnRhaW5zKG5vZGUucGFyYW1ldGVyKTsKICB9Cn0KCi8vLyBLZWVwcyB0cmFjayBvZiB0aGUgZ2xvYmFsIHN0YXRlIGZvciB0aGUgdHlwZSBpbmZlcmVuY2UgdGhhdCBvY2N1cnMgb3V0c2lkZQovLy8gb2YgbWV0aG9kIGJvZGllcyBhbmQgaW5pdGlhbGl6ZXJzLgovLy8KLy8vIFRoaXMgY2xhc3MgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgZm9yIHVzZSBieSBjbGllbnRzIG9mIHR5cGUgaW5mZXJlbmNlCi8vLyAoZS5nLiBEaWV0TGlzdGVuZXIpLiAgRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBkZXJpdmUgZnJvbQovLy8gW1R5cGVJbmZlcmVuY2VFbmdpbmVJbXBsXS4KYWJzdHJhY3QgY2xhc3MgVHlwZUluZmVyZW5jZUVuZ2luZSB7CiAgQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHk7CgogIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHlCdWlsZGVyOwoKICBDb3JlVHlwZXMgY29yZVR5cGVzOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlICJwcmVwYXJlIiBwaGFzZSBvZiB0eXBlIGluZmVyZW5jZSBpcyBjb21wbGV0ZS4KICBib29sIGlzVHlwZUluZmVyZW5jZVByZXBhcmVkID0gZmFsc2U7CgogIFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQ7CgogIC8vLyBBIG1hcCBjb250YWluaW5nIGNvbnN0cnVjdG9ycyB3aXRoIGluaXRpYWxpemluZyBmb3JtYWxzIHdob3NlIHR5cGVzCiAgLy8vIG5lZWQgdG8gYmUgaW5mZXJyZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgcmVwcmVzZW50ZWQgYXMgYSBtYXAgZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGl0cyBsaWJyYXJ5CiAgLy8vIGJ1aWxkZXIgYmVjYXVzZSB0aGUgYnVpbGRlciBpcyB1c2VkIHRvIHJlcG9ydCBlcnJvcnMgZHVlIHRvIGN5Y2xpYwogIC8vLyBpbmZlcmVuY2UgZGVwZW5kZW5jaWVzLgogIGZpbmFsIE1hcDxDb25zdHJ1Y3RvciwgTGlicmFyeUJ1aWxkZXI+IHRvQmVJbmZlcnJlZCA9IHt9OwoKICAvLy8gQSBtYXAgY29udGFpbmluZyBjb25zdHJ1Y3RvcnMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgaW5mZXJyZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBkZXRlY3QgY3ljbGljIGluZmVyZW5jZSBkZXBlbmRlbmNpZXMuICBJdCBpcyByZXByZXNlbnRlZAogIC8vLyBhcyBhIG1hcCBmcm9tIGEgY29uc3RydWN0b3IgdG8gaXRzIGxpYnJhcnkgYnVpbGRlciBiZWNhdXNlIHRoZSBidWlsZGVyCiAgLy8vIGlzIHVzZWQgdG8gcmVwb3J0IGVycm9ycy4KICBmaW5hbCBNYXA8Q29uc3RydWN0b3IsIExpYnJhcnlCdWlsZGVyPiBiZWluZ0luZmVycmVkID0ge307CgogIGZpbmFsIEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb247CgogIFR5cGVJbmZlcmVuY2VFbmdpbmUodGhpcy5pbnN0cnVtZW50YXRpb24pOwoKICAvLy8gQ3JlYXRlcyBhIHR5cGUgaW5mZXJyZXIgZm9yIHVzZSBpbnNpZGUgb2YgYSBtZXRob2QgYm9keSBkZWNsYXJlZCBpbiBhIGZpbGUKICAvLy8gd2l0aCB0aGUgZ2l2ZW4gW3VyaV0uCiAgVHlwZUluZmVycmVyIGNyZWF0ZUxvY2FsVHlwZUluZmVycmVyKAogICAgICBVcmkgdXJpLCBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KTsKCiAgLy8vIENyZWF0ZXMgYSBbVHlwZUluZmVycmVyXSBvYmplY3Qgd2hpY2ggaXMgcmVhZHkgdG8gcGVyZm9ybSB0eXBlIGluZmVyZW5jZQogIC8vLyBvbiB0aGUgZ2l2ZW4gW2ZpZWxkXS4KICBUeXBlSW5mZXJyZXIgY3JlYXRlVG9wTGV2ZWxUeXBlSW5mZXJyZXIoCiAgICAgIFVyaSB1cmksIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpOwoKICAvLy8gUGVyZm9ybXMgdGhlIHRoaXJkIHBoYXNlIG9mIHRvcCBsZXZlbCBpbmZlcmVuY2UsIHdoaWNoIGlzIHRvIHZpc2l0IGFsbAogIC8vLyBjb25zdHJ1Y3RvcnMgc3RpbGwgbmVlZGluZyBpbmZlcmVuY2UgYW5kIGluZmVyIHRoZSB0eXBlcyBvZiB0aGVpcgogIC8vLyBpbml0aWFsaXppbmcgZm9ybWFscyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcy4KICB2b2lkIGZpbmlzaFRvcExldmVsSW5pdGlhbGl6aW5nRm9ybWFscygpIHsKICAgIC8vIEZpZWxkIHR5cGVzIGhhdmUgYWxsIGJlZW4gaW5mZXJyZWQgc28gdGhlcmUgY2Fubm90IGJlIGEgY3ljbGljCiAgICAvLyBkZXBlbmRlbmN5LgogICAgZm9yIChDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiB0b0JlSW5mZXJyZWQua2V5cykgewogICAgICBmb3IgKHZhciBkZWNsYXJhdGlvbiBpbiBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgIGluZmVySW5pdGlhbGl6aW5nRm9ybWFsKGRlY2xhcmF0aW9uLCBjb25zdHJ1Y3Rvcik7CiAgICAgIH0KICAgICAgZm9yICh2YXIgZGVjbGFyYXRpb24gaW4gY29uc3RydWN0b3IuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgaW5mZXJJbml0aWFsaXppbmdGb3JtYWwoZGVjbGFyYXRpb24sIGNvbnN0cnVjdG9yKTsKICAgICAgfQogICAgfQogICAgdG9CZUluZmVycmVkLmNsZWFyKCk7CiAgfQoKICB2b2lkIGluZmVySW5pdGlhbGl6aW5nRm9ybWFsKFZhcmlhYmxlRGVjbGFyYXRpb24gZm9ybWFsLCBDb25zdHJ1Y3RvciBwYXJlbnQpIHsKICAgIGlmIChmb3JtYWwudHlwZSA9PSBudWxsKSB7CiAgICAgIGZvciAoRmllbGQgZmllbGQgaW4gcGFyZW50LmVuY2xvc2luZ0NsYXNzLmZpZWxkcykgewogICAgICAgIGlmIChmaWVsZC5uYW1lLm5hbWUgPT0gZm9ybWFsLm5hbWUpIHsKICAgICAgICAgIFR5cGVJbmZlcmVuY2VFbmdpbmUucmVzb2x2ZUluZmVyZW5jZU5vZGUoZmllbGQpOwogICAgICAgICAgZm9ybWFsLnR5cGUgPSBmaWVsZC50eXBlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBXZSBkaWQgbm90IGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQsIHNvIHRoZSBwcm9ncmFtIGlzIGVycm9uZW91cy4KICAgICAgLy8gVGhlIGVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmVwb3J0ZWQgZWxzZXdoZXJlIGFuZCB0eXBlIGluZmVyZW5jZQogICAgICAvLyBzaG91bGQgY29udGludWUgYnkgaW5mZXJyaW5nIGR5bmFtaWMuCiAgICAgIGZvcm1hbC50eXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICB9CgogIC8vLyBHZXRzIHJlYWR5IHRvIGRvIHRvcCBsZXZlbCB0eXBlIGluZmVyZW5jZSBmb3IgdGhlIGNvbXBvbmVudCBoYXZpbmcgdGhlCiAgLy8vIGdpdmVuIFtoaWVyYXJjaHldLCB1c2luZyB0aGUgZ2l2ZW4gW2NvcmVUeXBlc10uCiAgdm9pZCBwcmVwYXJlVG9wTGV2ZWwoQ29yZVR5cGVzIGNvcmVUeXBlcywgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5KSB7CiAgICB0aGlzLmNvcmVUeXBlcyA9IGNvcmVUeXBlczsKICAgIHRoaXMuY2xhc3NIaWVyYXJjaHkgPSBoaWVyYXJjaHk7CiAgICB0aGlzLnR5cGVTY2hlbWFFbnZpcm9ubWVudCA9CiAgICAgICAgbmV3IFR5cGVTY2hlbWFFbnZpcm9ubWVudChjb3JlVHlwZXMsIGhpZXJhcmNoeSk7CiAgfQoKICBzdGF0aWMgTWVtYmVyIHJlc29sdmVJbmZlcmVuY2VOb2RlKE1lbWJlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgaXMgRmllbGQpIHsKICAgICAgRGFydFR5cGUgdHlwZSA9IG1lbWJlci50eXBlOwogICAgICBpZiAodHlwZSBpcyBJbXBsaWNpdEZpZWxkVHlwZSkgewogICAgICAgIGlmICh0eXBlLm1lbWJlci50YXJnZXQgIT0gbWVtYmVyKSB7CiAgICAgICAgICB0eXBlLm1lbWJlci5pbmZlckNvcGllZFR5cGUobWVtYmVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHlwZS5tZW1iZXIuaW5mZXJUeXBlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbWVtYmVyOwogIH0KfQqA0QBNTj8BIQkVEhkVDxYXEBcbFR0BQgE4AT8BJ0MBSgEvAUIBEA0RDQIBLRYdJSEhHQQTAgFJK0sWATgBSCIlAQwwAQwuMyYkMTUGLTcvBjI0Bh0SBAEMMC8uBhIEAQwsJgQBDDguPQQCAU8nBEw9HyUhASoBFwFLKAEvAUobBkVJHjwBRgZPTSA9ASkBLQFRHChGAU8cK0YBTUg6LUYTOUs7CEY7CAYaBAFRHzouOyQSCghPSi8pBgQBTTZIICUhOQQBNhsjJywvESMKCAYTBAIBRXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2luZmVyZW5jZV9lbmdpbmUuZGFydFBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZWxpbWluYXRpb24uZGFydJT5Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cgRGFydFR5cGUsIER5bmFtaWNUeXBlLCBGdW5jdGlvblR5cGUsIEludGVyZmFjZVR5cGUsIE5hbWVkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAndHlwZV9zY2hlbWEuZGFydCcgc2hvdyBUeXBlU2NoZW1hVmlzaXRvciwgVW5rbm93blR5cGU7CgovLy8gUmV0dXJucyB0aGUgZ3JlYXRlc3QgY2xvc3VyZSBvZiB0aGUgZ2l2ZW4gdHlwZSBbc2NoZW1hXSB3aXRoIHJlc3BlY3QgdG8gYD9gLgovLy8KLy8vIFRoZSBncmVhdGVzdCBjbG9zdXJlIG9mIGEgdHlwZSBzY2hlbWEgYFBgIHdpdGggcmVzcGVjdCB0byBgP2AgaXMgZGVmaW5lZCBhcwovLy8gYFBgIHdpdGggZXZlcnkgY292YXJpYW50IG9jY3VycmVuY2Ugb2YgYD9gIHJlcGxhY2VkIHdpdGggYE51bGxgLCBhbmQgZXZlcnkKLy8vIGNvbnRyYXZhcmlhbnQgb2NjdXJyZW5jZSBvZiBgP2AgcmVwbGFjZWQgd2l0aCBgT2JqZWN0YC4KLy8vCi8vLyBJZiB0aGUgc2NoZW1hIGNvbnRhaW5zIG5vIGluc3RhbmNlcyBvZiBgP2AsIHRoZSBvcmlnaW5hbCBzY2hlbWEgb2JqZWN0IGlzCi8vLyByZXR1cm5lZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uLgovLy8KLy8vIE5vdGUgdGhhdCB0aGUgY2xvc3VyZSBvZiBhIHR5cGUgc2NoZW1hIGlzIGEgcHJvcGVyIHR5cGUuCi8vLwovLy8gTm90ZSB0aGF0IHRoZSBncmVhdGVzdCBjbG9zdXJlIG9mIGEgdHlwZSBzY2hlbWEgaXMgYWx3YXlzIGEgc3VwZXJ0eXBlIG9mIGFueQovLy8gdHlwZSB3aGljaCBtYXRjaGVzIHRoZSBzY2hlbWEuCkRhcnRUeXBlIGdyZWF0ZXN0Q2xvc3VyZShDb3JlVHlwZXMgY29yZVR5cGVzLCBEYXJ0VHlwZSBzY2hlbWEpID0+CiAgICBfVHlwZVNjaGVtYUVsaW1pbmF0aW9uVmlzaXRvci5ydW4oY29yZVR5cGVzLCBmYWxzZSwgc2NoZW1hKTsKCi8vLyBSZXR1cm5zIHRoZSBsZWFzdCBjbG9zdXJlIG9mIHRoZSBnaXZlbiB0eXBlIFtzY2hlbWFdIHdpdGggcmVzcGVjdCB0byBgP2AuCi8vLwovLy8gVGhlIGxlYXN0IGNsb3N1cmUgb2YgYSB0eXBlIHNjaGVtYSBgUGAgd2l0aCByZXNwZWN0IHRvIGA/YCBpcyBkZWZpbmVkIGFzCi8vLyBgUGAgd2l0aCBldmVyeSBjb3ZhcmlhbnQgb2NjdXJyZW5jZSBvZiBgP2AgcmVwbGFjZWQgd2l0aCBgT2JqZWN0YCwgYW5kIGV2ZXJ5Ci8vLyBjb250cmF2YXJpYW50IG9jY3VycmVuY2Ugb2YgYD9gIHJlcGxhY2VkIHdpdGggYE51bGxgLgovLy8KLy8vIElmIHRoZSBzY2hlbWEgY29udGFpbnMgbm8gaW5zdGFuY2VzIG9mIGA/YCwgdGhlIG9yaWdpbmFsIHNjaGVtYSBvYmplY3QgaXMKLy8vIHJldHVybmVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24uCi8vLwovLy8gTm90ZSB0aGF0IHRoZSBjbG9zdXJlIG9mIGEgdHlwZSBzY2hlbWEgaXMgYSBwcm9wZXIgdHlwZS4KLy8vCi8vLyBOb3RlIHRoYXQgdGhlIGxlYXN0IGNsb3N1cmUgb2YgYSB0eXBlIHNjaGVtYSBpcyBhbHdheXMgYSBzdWJ0eXBlIG9mIGFueSB0eXBlCi8vLyB3aGljaCBtYXRjaGVzIHRoZSBzY2hlbWEuCkRhcnRUeXBlIGxlYXN0Q2xvc3VyZShDb3JlVHlwZXMgY29yZVR5cGVzLCBEYXJ0VHlwZSBzY2hlbWEpID0+CiAgICBfVHlwZVNjaGVtYUVsaW1pbmF0aW9uVmlzaXRvci5ydW4oY29yZVR5cGVzLCB0cnVlLCBzY2hlbWEpOwoKLy8vIFZpc2l0b3IgdGhhdCBjb21wdXRlcyBsZWFzdCBhbmQgZ3JlYXRlc3QgY2xvc3VyZXMgb2YgYSB0eXBlIHNjaGVtYS4KLy8vCi8vLyBFYWNoIHZpc2l0b3IgbWV0aG9kIHJldHVybnMgYG51bGxgIGlmIHRoZXJlIGFyZSBubyBgP2BzIGNvbnRhaW5lZCBpbiB0aGUKLy8vIHR5cGUsIG90aGVyd2lzZSBpdCByZXR1cm5zIHRoZSByZXN1bHQgb2Ygc3Vic3RpdHV0aW5nIGA/YCB3aXRoIGBOdWxsYCBvcgovLy8gYE9iamVjdGAsIGFzIGFwcHJvcHJpYXRlLgpjbGFzcyBfVHlwZVNjaGVtYUVsaW1pbmF0aW9uVmlzaXRvciBleHRlbmRzIFR5cGVTY2hlbWFWaXNpdG9yPERhcnRUeXBlPiB7CiAgZmluYWwgRGFydFR5cGUgbnVsbFR5cGU7CgogIGJvb2wgaXNMZWFzdENsb3N1cmU7CgogIF9UeXBlU2NoZW1hRWxpbWluYXRpb25WaXNpdG9yKENvcmVUeXBlcyBjb3JlVHlwZXMsIHRoaXMuaXNMZWFzdENsb3N1cmUpCiAgICAgIDogbnVsbFR5cGUgPSBjb3JlVHlwZXMubnVsbENsYXNzLnJhd1R5cGU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBEYXJ0VHlwZSBuZXdSZXR1cm5UeXBlID0gbm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKTsKICAgIGlzTGVhc3RDbG9zdXJlID0gIWlzTGVhc3RDbG9zdXJlOwogICAgTGlzdDxEYXJ0VHlwZT4gbmV3UG9zaXRpb25hbFBhcmFtZXRlcnMgPSBudWxsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIERhcnRUeXBlIHN1YnN0aXR1dGlvbiA9IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0uYWNjZXB0KHRoaXMpOwogICAgICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgICBuZXdQb3NpdGlvbmFsUGFyYW1ldGVycyA/Pz0KICAgICAgICAgICAgbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgICBuZXdQb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSA9IHN1YnN0aXR1dGlvbjsKICAgICAgfQogICAgfQogICAgTGlzdDxOYW1lZFR5cGU+IG5ld05hbWVkUGFyYW1ldGVycyA9IG51bGw7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIERhcnRUeXBlIHN1YnN0aXR1dGlvbiA9IG5vZGUubmFtZWRQYXJhbWV0ZXJzW2ldLnR5cGUuYWNjZXB0KHRoaXMpOwogICAgICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgICBuZXdOYW1lZFBhcmFtZXRlcnMgPz89IG5vZGUubmFtZWRQYXJhbWV0ZXJzLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICAgIG5ld05hbWVkUGFyYW1ldGVyc1tpXSA9IG5ldyBOYW1lZFR5cGUoCiAgICAgICAgICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzW2ldLm5hbWUsIHN1YnN0aXR1dGlvbiwKICAgICAgICAgICAgaXNSZXF1aXJlZDogbm9kZS5uYW1lZFBhcmFtZXRlcnNbaV0uaXNSZXF1aXJlZCk7CiAgICAgIH0KICAgIH0KICAgIGlzTGVhc3RDbG9zdXJlID0gIWlzTGVhc3RDbG9zdXJlOwogICAgRGFydFR5cGUgdHlwZWRlZlR5cGUgPSBub2RlLnR5cGVkZWZUeXBlPy5hY2NlcHQodGhpcyk7CiAgICBpZiAobmV3UmV0dXJuVHlwZSA9PSBudWxsICYmCiAgICAgICAgbmV3UG9zaXRpb25hbFBhcmFtZXRlcnMgPT0gbnVsbCAmJgogICAgICAgIG5ld05hbWVkUGFyYW1ldGVycyA9PSBudWxsICYmCiAgICAgICAgdHlwZWRlZlR5cGUgPT0gbnVsbCkgewogICAgICAvLyBObyB0eXBlcyBoYWQgdG8gYmUgc3Vic3RpdHV0ZWQuCiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUoCiAgICAgICAgICBuZXdQb3NpdGlvbmFsUGFyYW1ldGVycyA/PyBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgICAgbmV3UmV0dXJuVHlwZSA/PyBub2RlLnJldHVyblR5cGUsCiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5ld05hbWVkUGFyYW1ldGVycyA/PyBub2RlLm5hbWVkUGFyYW1ldGVycywKICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgICAgdHlwZWRlZlR5cGU6IHR5cGVkZWZUeXBlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIExpc3Q8RGFydFR5cGU+IG5ld1R5cGVBcmd1bWVudHMgPSBudWxsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgRGFydFR5cGUgc3Vic3RpdHV0aW9uID0gbm9kZS50eXBlQXJndW1lbnRzW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAgbmV3VHlwZUFyZ3VtZW50cyA/Pz0gbm9kZS50eXBlQXJndW1lbnRzLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICAgIG5ld1R5cGVBcmd1bWVudHNbaV0gPSBzdWJzdGl0dXRpb247CiAgICAgIH0KICAgIH0KICAgIGlmIChuZXdUeXBlQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgLy8gTm8gdHlwZSBhcmd1bWVudHMgbmVlZGVkIHRvIGJlIHN1YnN0aXR1dGVkLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShub2RlLmNsYXNzTm9kZSwgbmV3VHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFVua25vd25UeXBlKFVua25vd25UeXBlIG5vZGUpID0+CiAgICAgIGlzTGVhc3RDbG9zdXJlID8gbnVsbFR5cGUgOiBjb25zdCBEeW5hbWljVHlwZSgpOwoKICAvLy8gUnVucyBhbiBpbnN0YW5jZSBvZiB0aGUgdmlzaXRvciBvbiB0aGUgZ2l2ZW4gW3NjaGVtYV0gYW5kIHJldHVybnMgdGhlCiAgLy8vIHJlc3VsdGluZyB0eXBlLiAgSWYgdGhlIHNjaGVtYSBjb250YWlucyBubyBpbnN0YW5jZXMgb2YgYD9gLCB0aGUgb3JpZ2luYWwKICAvLy8gc2NoZW1hIG9iamVjdCBpcyByZXR1cm5lZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uLgogIHN0YXRpYyBEYXJ0VHlwZSBydW4oCiAgICAgIENvcmVUeXBlcyBjb3JlVHlwZXMsIGJvb2wgaXNMZWFzdENsb3N1cmUsIERhcnRUeXBlIHNjaGVtYSkgewogICAgdmFyIHZpc2l0b3IgPSBuZXcgX1R5cGVTY2hlbWFFbGltaW5hdGlvblZpc2l0b3IoY29yZVR5cGVzLCBpc0xlYXN0Q2xvc3VyZSk7CiAgICB2YXIgcmVzdWx0ID0gc2NoZW1hLmFjY2VwdCh2aXNpdG9yKTsKICAgIGFzc2VydCh2aXNpdG9yLmlzTGVhc3RDbG9zdXJlID09IGlzTGVhc3RDbG9zdXJlKTsKICAgIHJldHVybiByZXN1bHQgPz8gc2NoZW1hOwogIH0KfQqAhQBNTj8BIUgBOAE/AVEEUE88BE4uBD0EUSNCQQFOBE1ROgROLgQ9BFEeP0ABSARNTR5KGwEXAUowAQwyOyYzQUkiJD8zCAYvPEkiTS84PQgGJjshKyYfKRMNH0AsRy8/JQYEAQw0LDpCIkksCAYkNRMNQgYEAQwxNwFMUEEXQ1ApNh0EAgFHcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hX2VsaW1pbmF0aW9uLmRhcnRQc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hX2Vudmlyb25tZW50LmRhcnS9Cy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3MsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBUeXBlUGFyYW1ldGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvaGllcmFyY2h5X2Jhc2VkX3R5cGVfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cgSGllcmFyY2h5QmFzZWRUeXBlRW52aXJvbm1lbnQ7CgppbXBvcnQgJ3N0YW5kYXJkX2JvdW5kcy5kYXJ0JyBzaG93IFN0YW5kYXJkQm91bmRzOwoKaW1wb3J0ICd0eXBlX2NvbnN0cmFpbnRfZ2F0aGVyZXIuZGFydCcgc2hvdyBUeXBlQ29uc3RyYWludEdhdGhlcmVyOwoKaW1wb3J0ICd0eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlLCB0eXBlU2NoZW1hVG9TdHJpbmcsIGlzS25vd247CgppbXBvcnQgJ3R5cGVfc2NoZW1hX2VsaW1pbmF0aW9uLmRhcnQnIHNob3cgZ3JlYXRlc3RDbG9zdXJlLCBsZWFzdENsb3N1cmU7CgovLyBUT0RPKHBhdWxiZXJyeSk6IHRyeSB0byBwdXNoIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnRvIGtlcm5lbC4KRnVuY3Rpb25UeXBlIHN1YnN0aXR1dGVUeXBlUGFyYW1zKAogICAgRnVuY3Rpb25UeXBlIHR5cGUsCiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbk1hcCwKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gbmV3VHlwZVBhcmFtZXRlcnMpIHsKICB2YXIgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21NYXAoc3Vic3RpdHV0aW9uTWFwKTsKICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZSgKICAgICAgdHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5tYXAoc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKS50b0xpc3QoKSwKICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHR5cGUucmV0dXJuVHlwZSksCiAgICAgIG5hbWVkUGFyYW1ldGVyczogdHlwZS5uYW1lZFBhcmFtZXRlcnMKICAgICAgICAgIC5tYXAoKG5hbWVkKSA9PiBuZXcgTmFtZWRUeXBlKAogICAgICAgICAgICAgIG5hbWVkLm5hbWUsIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShuYW1lZC50eXBlKSwKICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBuYW1lZC5pc1JlcXVpcmVkKSkKICAgICAgICAgIC50b0xpc3QoKSwKICAgICAgdHlwZVBhcmFtZXRlcnM6IG5ld1R5cGVQYXJhbWV0ZXJzLAogICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiB0eXBlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgIHR5cGVkZWZUeXBlOiB0eXBlLnR5cGVkZWZUeXBlID09IG51bGwKICAgICAgICAgID8gbnVsbAogICAgICAgICAgOiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUodHlwZS50eXBlZGVmVHlwZSkpOwp9CgovLy8gR2l2ZW4gYSBbRnVuY3Rpb25UeXBlXSwgZ2V0cyB0aGUgdHlwZSBvZiB0aGUgbmFtZWQgcGFyYW1ldGVyIHdpdGggdGhlIGdpdmVuCi8vLyBbbmFtZV0sIG9yIGBkeW5hbWljYCBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KRGFydFR5cGUgZ2V0TmFtZWRQYXJhbWV0ZXJUeXBlKEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUsIFN0cmluZyBuYW1lKSB7CiAgcmV0dXJuIGZ1bmN0aW9uVHlwZS5nZXROYW1lZFBhcmFtZXRlcihuYW1lKSA/PyBjb25zdCBEeW5hbWljVHlwZSgpOwp9CgovLy8gR2l2ZW4gYSBbRnVuY3Rpb25UeXBlXSwgZ2V0cyB0aGUgdHlwZSBvZiB0aGUgW2lddGggcG9zaXRpb25hbCBwYXJhbWV0ZXIsIG9yCi8vLyBgZHluYW1pY2AgaWYgdGhlcmUgaXMgbm8gcGFyYW1ldGVyIHdpdGggdGhhdCBpbmRleC4KRGFydFR5cGUgZ2V0UG9zaXRpb25hbFBhcmFtZXRlclR5cGUoRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwgaW50IGkpIHsKICBpZiAoaSA8IGZ1bmN0aW9uVHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgIHJldHVybiBmdW5jdGlvblR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgfSBlbHNlIHsKICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KfQoKLy8vIEEgY29uc3RyYWludCBvbiBhIHR5cGUgcGFyYW1ldGVyIHRoYXQgd2UncmUgaW5mZXJyaW5nLgpjbGFzcyBUeXBlQ29uc3RyYWludCB7CiAgLy8vIFRoZSBsb3dlciBib3VuZCBvZiB0aGUgdHlwZSBiZWluZyBjb25zdHJhaW5lZC4gIFRoaXMgYm91bmQgbXVzdCBiZSBhCiAgLy8vIHN1YnR5cGUgb2YgdGhlIHR5cGUgYmVpbmcgY29uc3RyYWluZWQuCiAgRGFydFR5cGUgbG93ZXI7CgogIC8vLyBUaGUgdXBwZXIgYm91bmQgb2YgdGhlIHR5cGUgYmVpbmcgY29uc3RyYWluZWQuICBUaGUgdHlwZSBiZWluZyBjb25zdHJhaW5lZAogIC8vLyBtdXN0IGJlIGEgc3VidHlwZSBvZiB0aGlzIGJvdW5kLgogIERhcnRUeXBlIHVwcGVyOwoKICBUeXBlQ29uc3RyYWludCgpCiAgICAgIDogbG93ZXIgPSBjb25zdCBVbmtub3duVHlwZSgpLAogICAgICAgIHVwcGVyID0gY29uc3QgVW5rbm93blR5cGUoKTsKCiAgVHlwZUNvbnN0cmFpbnQuXyh0aGlzLmxvd2VyLCB0aGlzLnVwcGVyKTsKCiAgVHlwZUNvbnN0cmFpbnQgY2xvbmUoKSA9PiBuZXcgVHlwZUNvbnN0cmFpbnQuXyhsb3dlciwgdXBwZXIpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnJHt0eXBlU2NoZW1hVG9TdHJpbmcobG93ZXIpfSA8OiA8dHlwZT4gPDogJHt0eXBlU2NoZW1hVG9TdHJpbmcodXBwZXIpfSc7Cn0KCmNsYXNzIFR5cGVTY2hlbWFFbnZpcm9ubWVudCBleHRlbmRzIEhpZXJhcmNoeUJhc2VkVHlwZUVudmlyb25tZW50CiAgICB3aXRoIFN0YW5kYXJkQm91bmRzIHsKICBUeXBlU2NoZW1hRW52aXJvbm1lbnQoQ29yZVR5cGVzIGNvcmVUeXBlcywgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5KQogICAgICA6IHN1cGVyKGNvcmVUeXBlcywgaGllcmFyY2h5KTsKCiAgQ2xhc3MgZ2V0IGZ1bmN0aW9uQ2xhc3MgPT4gY29yZVR5cGVzLmZ1bmN0aW9uQ2xhc3M7CgogIENsYXNzIGdldCBmdXR1cmVDbGFzcyA9PiBjb3JlVHlwZXMuZnV0dXJlQ2xhc3M7CgogIENsYXNzIGdldCBmdXR1cmVPckNsYXNzID0+IGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzOwoKICBJbnRlcmZhY2VUeXBlIGdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZCgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlMSwgSW50ZXJmYWNlVHlwZSB0eXBlMikgewogICAgcmV0dXJuIGhpZXJhcmNoeS5nZXRMZWdhY3lMZWFzdFVwcGVyQm91bmQodHlwZTEsIHR5cGUyKTsKICB9CgogIC8vLyBNb2RpZnkgdGhlIGdpdmVuIFtjb25zdHJhaW50XSdzIGxvd2VyIGJvdW5kIHRvIGluY2x1ZGUgW2xvd2VyXS4KICB2b2lkIGFkZExvd2VyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgbG93ZXIpIHsKICAgIGNvbnN0cmFpbnQubG93ZXIgPSBnZXRTdGFuZGFyZFVwcGVyQm91bmQoY29uc3RyYWludC5sb3dlciwgbG93ZXIpOwogIH0KCiAgLy8vIE1vZGlmeSB0aGUgZ2l2ZW4gW2NvbnN0cmFpbnRdJ3MgdXBwZXIgYm91bmQgdG8gaW5jbHVkZSBbdXBwZXJdLgogIHZvaWQgYWRkVXBwZXJCb3VuZChUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSB1cHBlcikgewogICAgY29uc3RyYWludC51cHBlciA9IGdldFN0YW5kYXJkTG93ZXJCb3VuZChjb25zdHJhaW50LnVwcGVyLCB1cHBlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlT2ZPdmVybG9hZGVkQXJpdGhtZXRpYyhEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogdGhpcyBtYXRjaGVzIHdoYXQgaXMgZGVmaW5lZCBpbiB0aGUgc3BlYy4gIEl0IHdvdWxkIGJlCiAgICAvLyBuaWNlIGlmIHdlIGNvdWxkIGNoYW5nZSBrZXJuZWwgdG8gbWF0Y2ggdGhlIHNwZWMgYW5kIG5vdCBoYXZlIHRvCiAgICAvLyBvdmVycmlkZS4KICAgIGlmICh0eXBlMSA9PSBpbnRUeXBlKSB7CiAgICAgIGlmICh0eXBlMiA9PSBpbnRUeXBlKSByZXR1cm4gdHlwZTI7CiAgICAgIGlmICh0eXBlMiA9PSBkb3VibGVUeXBlKSByZXR1cm4gdHlwZTI7CiAgICB9CiAgICByZXR1cm4gbnVtVHlwZTsKICB9CgogIC8vLyBJbmZlcnMgYSBnZW5lcmljIHR5cGUsIGZ1bmN0aW9uLCBtZXRob2QsIG9yIGxpc3QvbWFwIGxpdGVyYWwKICAvLy8gaW5zdGFudGlhdGlvbiwgdXNpbmcgdGhlIGRvd253YXJkIGNvbnRleHQgdHlwZSBhcyB3ZWxsIGFzIHRoZSBhcmd1bWVudAogIC8vLyB0eXBlcyBpZiBhdmFpbGFibGUuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBnaXZlbiBhIGZ1bmN0aW9uIHR5cGUgd2l0aCBnZW5lcmljIHR5cGUgcGFyYW1ldGVycywgdGhpcwogIC8vLyBpbmZlcnMgdGhlIHR5cGUgcGFyYW1ldGVycyBmcm9tIHRoZSBhY3R1YWwgYXJndW1lbnQgdHlwZXMuCiAgLy8vCiAgLy8vIENvbmNyZXRlbHksIGdpdmVuIGEgZnVuY3Rpb24gdHlwZSB3aXRoIHBhcmFtZXRlciB0eXBlcyBQMCwgUDEsIC4uLiBQbiwKICAvLy8gcmVzdWx0IHR5cGUgUiwgYW5kIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzIFQwLCBUMSwgLi4uIFRtLCB1c2UgdGhlCiAgLy8vIGFyZ3VtZW50IHR5cGVzIEEwLCBBMSwgLi4uIEFuIHRvIHNvbHZlIGZvciB0aGUgdHlwZSBwYXJhbWV0ZXJzLgogIC8vLwogIC8vLyBGb3IgZWFjaCBwYXJhbWV0ZXIgUGksIHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgQWkgPDogUGkuIFdlIGNhbiBkbyB0aGlzIGJ5CiAgLy8vIHJ1bm5pbmcgdGhlIHN1YnR5cGUgYWxnb3JpdGhtLCBhbmQgd2hlbiB3ZSByZWFjaCBhIHR5cGUgcGFyYW1ldGVyIFRqLAogIC8vLyByZWNvcmRpbmcgdGhlIGxvd2VyIG9yIHVwcGVyIGJvdW5kIGl0IG11c3Qgc2F0aXNmeS4gQXQgdGhlIGVuZCwgYWxsCiAgLy8vIGNvbnN0cmFpbnRzIGNhbiBiZSBjb21iaW5lZCB0byBkZXRlcm1pbmUgdGhlIHR5cGUuCiAgLy8vCiAgLy8vIEFsbCBjb25zdHJhaW50cyBvbiBlYWNoIHR5cGUgcGFyYW1ldGVyIFRqIGFyZSB0cmFja2VkLCBhcyB3ZWxsIGFzIHdoZXJlCiAgLy8vIHRoZXkgb3JpZ2luYXRlZCwgc28gd2UgY2FuIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UgdHJhY2luZyBiYWNrIHRvIHRoZQogIC8vLyBhcmd1bWVudCB2YWx1ZXMsIHR5cGUgcGFyYW1ldGVyICJleHRlbmRzIiBjbGF1c2UsIG9yIHRoZSByZXR1cm4gdHlwZQogIC8vLyBjb250ZXh0LgogIC8vLwogIC8vLyBJZiBub24tbnVsbCB2YWx1ZXMgZm9yIFtmb3JtYWxUeXBlc10gYW5kIFthY3R1YWxUeXBlc10gYXJlIHByb3ZpZGVkLCB0aGlzCiAgLy8vIGlzIHVwd2FyZHMgaW5mZXJlbmNlLiAgT3RoZXJ3aXNlIGl0IGlzIGRvd253YXJkIGluZmVyZW5jZS4KICB2b2lkIGluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICBEYXJ0VHlwZSBkZWNsYXJlZFJldHVyblR5cGUsCiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnNUb0luZmVyLAogICAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlcywKICAgICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXMsCiAgICAgIERhcnRUeXBlIHJldHVybkNvbnRleHRUeXBlLAogICAgICBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzLAogICAgICB7Ym9vbCBpc0NvbnN0OiBmYWxzZX0pIHsKICAgIGlmICh0eXBlUGFyYW1ldGVyc1RvSW5mZXIuaXNFbXB0eSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gQ3JlYXRlIGEgVHlwZUNvbnN0cmFpbnRHYXRoZXJlciB0aGF0IHdpbGwgYWxsb3cgY2VydGFpbiB0eXBlIHBhcmFtZXRlcnMKICAgIC8vIHRvIGJlIGluZmVycmVkLiBJdCB3aWxsIG9wdGltaXN0aWNhbGx5IGFzc3VtZSB0aGVzZSB0eXBlIHBhcmFtZXRlcnMgY2FuCiAgICAvLyBiZSBzdWJ0eXBlcyAob3Igc3VwZXJ0eXBlcykgYXMgbmVjZXNzYXJ5LCBhbmQgdHJhY2sgdGhlIGNvbnN0cmFpbnRzIHRoYXQKICAgIC8vIGFyZSBpbXBsaWVkIGJ5IHRoaXMuCiAgICB2YXIgZ2F0aGVyZXIgPSBuZXcgVHlwZUNvbnN0cmFpbnRHYXRoZXJlcih0aGlzLCB0eXBlUGFyYW1ldGVyc1RvSW5mZXIpOwoKICAgIGlmICghaXNFbXB0eUNvbnRleHQocmV0dXJuQ29udGV4dFR5cGUpKSB7CiAgICAgIGlmIChpc0NvbnN0KSB7CiAgICAgICAgcmV0dXJuQ29udGV4dFR5cGUgPSBuZXcgVHlwZVZhcmlhYmxlRWxpbWluYXRvcihjb3JlVHlwZXMpCiAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShyZXR1cm5Db250ZXh0VHlwZSk7CiAgICAgIH0KICAgICAgZ2F0aGVyZXIudHJ5U3VidHlwZU1hdGNoKGRlY2xhcmVkUmV0dXJuVHlwZSwgcmV0dXJuQ29udGV4dFR5cGUpOwogICAgfQoKICAgIGlmIChmb3JtYWxUeXBlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWFsVHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAvLyBUcnkgdG8gcGFzcyBlYWNoIGFyZ3VtZW50IHRvIGVhY2ggcGFyYW1ldGVyLCByZWNvcmRpbmcgYW55IHR5cGUKICAgICAgICAvLyBwYXJhbWV0ZXIgYm91bmRzIHRoYXQgd2VyZSBpbXBsaWVkIGJ5IHRoaXMgYXNzaWdubWVudC4KICAgICAgICBnYXRoZXJlci50cnlTdWJ0eXBlTWF0Y2goYWN0dWFsVHlwZXNbaV0sIGZvcm1hbFR5cGVzW2ldKTsKICAgICAgfQogICAgfQoKICAgIGluZmVyVHlwZUZyb21Db25zdHJhaW50cygKICAgICAgICBnYXRoZXJlci5jb21wdXRlQ29uc3RyYWludHMoKSwgdHlwZVBhcmFtZXRlcnNUb0luZmVyLCBpbmZlcnJlZFR5cGVzLAogICAgICAgIGRvd253YXJkc0luZmVyUGhhc2U6IGZvcm1hbFR5cGVzID09IG51bGwpOwogIH0KCiAgYm9vbCBoYXNPbWl0dGVkQm91bmQoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIpIHsKICAgIC8vIElmIHRoZSBib3VuZCB3YXMgb21pdHRlZCBieSB0aGUgcHJvZ3JhbW1lciwgdGhlIEtlcm5lbCByZXByZXNlbnRhdGlvbiBmb3IKICAgIC8vIHRoZSBwYXJhbWV0ZXIgd2lsbCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKICAgIC8vCiAgICAvLyAgICAgVCBleHRlbmRzIE9iamVjdCA9IGR5bmFtaWMKICAgIC8vCiAgICAvLyBOb3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVjZWl2ZSBbT2JqZWN0XSBhcyBbVHlwZVBhcmFtZXRlci5ib3VuZF0KICAgIC8vIGFuZCBgZHluYW1pY2AgYXMgW1R5cGVQYXJhbWV0ZXIuZGVmYXVsdFR5cGVdIGZyb20gdGhlIGZyb250IGVuZCBpbiBhbnkKICAgIC8vIG90aGVyIHdheS4KICAgIERhcnRUeXBlIGJvdW5kID0gcGFyYW1ldGVyLmJvdW5kOwogICAgcmV0dXJuIGJvdW5kIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICBpZGVudGljYWwoYm91bmQuY2xhc3NOb2RlLCBjb3JlVHlwZXMub2JqZWN0Q2xhc3MpICYmCiAgICAgICAgcGFyYW1ldGVyLmRlZmF1bHRUeXBlIGlzIER5bmFtaWNUeXBlOwogIH0KCiAgLy8vIFVzZSB0aGUgZ2l2ZW4gW2NvbnN0cmFpbnRzXSB0byBzdWJzdGl0dXRlIGZvciB0eXBlIHZhcmlhYmxlcy4KICAvLy8KICAvLy8gW3R5cGVQYXJhbWV0ZXJzVG9JbmZlcl0gaXMgdGhlIHNldCBvZiB0eXBlIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUKICAvLy8gc3Vic3RpdHV0ZWQgZm9yLiAgW2luZmVycmVkVHlwZXNdIHNob3VsZCBiZSBhIGxpc3Qgb2YgdGhlIHNhbWUgbGVuZ3RoLgogIC8vLwogIC8vLyBJZiBbZG93bndhcmRzSW5mZXJQaGFzZV0gaXMgYHRydWVgLCB0aGVuIHdlIGFyZSBpbiB0aGUgZmlyc3QgcGFzcyBvZgogIC8vLyBpbmZlcmVuY2UsIHB1c2hpbmcgY29udGV4dCB0eXBlcyBkb3duLiAgVGhpcyBtZWFucyB3ZSBhcmUgYWxsb3dlZCB0byBwdXNoCiAgLy8vIGRvd24gYD9gIHRvIHByZWNpc2VseSByZXByZXNlbnQgYW4gdW5rbm93biB0eXBlLiAgW2luZmVycmVkVHlwZXNdIHNob3VsZAogIC8vLyBiZSBpbml0aWFsbHkgcG9wdWxhdGVkIHdpdGggYD9gLiAgVGhlc2UgYD9gcyB3aWxsIGJlIHJlcGxhY2VkLCBpZgogIC8vLyBhcHByb3ByaWF0ZSwgd2l0aCB0aGUgdHlwZXMgdGhhdCB3ZXJlIGluZmVycmVkIGJ5IGRvd253YXJkcyBpbmZlcmVuY2UuCiAgLy8vCiAgLy8vIElmIFtkb3dud2FyZHNJbmZlclBoYXNlXSBpcyBgZmFsc2VgLCB0aGVuIHdlIGFyZSBpbiB0aGUgc2Vjb25kIHBhc3Mgb2YKICAvLy8gaW5mZXJlbmNlLCBhbmQgbXVzdCBub3QgY29uY2x1ZGUgYD9gIGZvciBhbnkgdHlwZSBmb3JtYWwuICBJbiB0aGlzIHBhc3MsCiAgLy8vIFtpbmZlcnJlZFR5cGVzXSBzaG91bGQgY29udGFpbiB0aGUgdmFsdWVzIGZyb20gdGhlIGZpcnN0IHBhc3MuICBUaGV5IHdpbGwKICAvLy8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgZmluYWwgaW5mZXJyZWQgdHlwZXMuCiAgdm9pZCBpbmZlclR5cGVGcm9tQ29uc3RyYWludHMoTWFwPFR5cGVQYXJhbWV0ZXIsIFR5cGVDb25zdHJhaW50PiBjb25zdHJhaW50cywKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyc1RvSW5mZXIsIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXMsCiAgICAgIHtib29sIGRvd253YXJkc0luZmVyUGhhc2U6IGZhbHNlfSkgewogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZXNGcm9tRG93bndhcmRzSW5mZXJlbmNlID0KICAgICAgICBkb3dud2FyZHNJbmZlclBoYXNlID8gbnVsbCA6IGluZmVycmVkVHlwZXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVyc1RvSW5mZXIubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW0gPSB0eXBlUGFyYW1ldGVyc1RvSW5mZXJbaV07CgogICAgICB2YXIgdHlwZVBhcmFtQm91bmQgPSB0eXBlUGFyYW0uYm91bmQ7CiAgICAgIERhcnRUeXBlIGV4dGVuZHNDb25zdHJhaW50OwogICAgICBpZiAoIWhhc09taXR0ZWRCb3VuZCh0eXBlUGFyYW0pKSB7CiAgICAgICAgZXh0ZW5kc0NvbnN0cmFpbnQgPQogICAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKHR5cGVQYXJhbWV0ZXJzVG9JbmZlciwgaW5mZXJyZWRUeXBlcykKICAgICAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlUGFyYW1Cb3VuZCk7CiAgICAgIH0KCiAgICAgIHZhciBjb25zdHJhaW50ID0gY29uc3RyYWludHNbdHlwZVBhcmFtXTsKICAgICAgaWYgKGRvd253YXJkc0luZmVyUGhhc2UpIHsKICAgICAgICBpbmZlcnJlZFR5cGVzW2ldID0KICAgICAgICAgICAgX2luZmVyVHlwZVBhcmFtZXRlckZyb21Db250ZXh0KGNvbnN0cmFpbnQsIGV4dGVuZHNDb25zdHJhaW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbmZlcnJlZFR5cGVzW2ldID0gX2luZmVyVHlwZVBhcmFtZXRlckZyb21BbGwoCiAgICAgICAgICAgIHR5cGVzRnJvbURvd253YXJkc0luZmVyZW5jZVtpXSwgY29uc3RyYWludCwgZXh0ZW5kc0NvbnN0cmFpbnQpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgdGhlIGRvd253YXJkcyBpbmZlciBwaGFzZSBoYXMgZmFpbGVkLCB3ZSdsbCBjYXRjaCB0aGlzIGluIHRoZSB1cHdhcmRzCiAgICAvLyBwaGFzZSBsYXRlciBvbi4KICAgIGlmIChkb3dud2FyZHNJbmZlclBoYXNlKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBDaGVjayB0aGUgaW5mZXJyZWQgdHlwZXMgYWdhaW5zdCBhbGwgb2YgdGhlIGNvbnN0cmFpbnRzLgogICAgdmFyIGtub3duVHlwZXMgPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzVG9JbmZlci5sZW5ndGg7IGkrKykgewogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbSA9IHR5cGVQYXJhbWV0ZXJzVG9JbmZlcltpXTsKICAgICAgdmFyIGNvbnN0cmFpbnQgPSBjb25zdHJhaW50c1t0eXBlUGFyYW1dOwogICAgICB2YXIgdHlwZVBhcmFtQm91bmQgPQogICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycyh0eXBlUGFyYW1ldGVyc1RvSW5mZXIsIGluZmVycmVkVHlwZXMpCiAgICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHR5cGVQYXJhbS5ib3VuZCk7CgogICAgICB2YXIgaW5mZXJyZWQgPSBpbmZlcnJlZFR5cGVzW2ldOwogICAgICBib29sIHN1Y2Nlc3MgPSB0eXBlU2F0aXNmaWVzQ29uc3RyYWludChpbmZlcnJlZCwgY29uc3RyYWludCk7CiAgICAgIGlmIChzdWNjZXNzICYmICFoYXNPbWl0dGVkQm91bmQodHlwZVBhcmFtKSkgewogICAgICAgIC8vIElmIGV2ZXJ5dGhpbmcgZWxzZSBzdWNjZWVkZWQsIGNoZWNrIHRoZSBgZXh0ZW5kc2AgY29uc3RyYWludC4KICAgICAgICB2YXIgZXh0ZW5kc0NvbnN0cmFpbnQgPSB0eXBlUGFyYW1Cb3VuZDsKICAgICAgICBzdWNjZXNzID0gaXNTdWJ0eXBlT2YoaW5mZXJyZWQsIGV4dGVuZHNDb25zdHJhaW50KTsKICAgICAgfQoKICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiByZXBvcnQgZXJyb3IuCgogICAgICAgIC8vIEhldXJpc3RpYzogZXZlbiBpZiB3ZSBmYWlsZWQsIGtlZXAgdGhlIGVycm9uZW91cyB0eXBlLgogICAgICAgIC8vIEl0IHNob3VsZCBzYXRpc2Z5IGF0IGxlYXN0IHNvbWUgb2YgdGhlIGNvbnN0cmFpbnRzIChlLmcuIHRoZSByZXR1cm4KICAgICAgICAvLyBjb250ZXh0KS4gSWYgd2UgZmFsbCBiYWNrIHRvIGluc3RhbnRpYXRlVG9Cb3VuZHMsIHdlJ2xsIHR5cGljYWxseSBnZXQKICAgICAgICAvLyBtb3JlIGVycm9ycyAoZS5nLiBiZWNhdXNlIGBkeW5hbWljYCBpcyB0aGUgbW9zdCBjb21tb24gYm91bmQpLgogICAgICB9CgogICAgICBpZiAoaXNLbm93bihpbmZlcnJlZCkpIHsKICAgICAgICBrbm93blR5cGVzW3R5cGVQYXJhbV0gPSBpbmZlcnJlZDsKICAgICAgfQogICAgfQoKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogcmVwb3J0IGFueSBlcnJvcnMgZnJvbSBpbnN0YW50aWF0ZVRvQm91bmRzLgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YnR5cGVPZihEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIGlmIChzdWJ0eXBlIGlzIFVua25vd25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChzdWJ0eXBlID09IE51bGwgJiYgc3VwZXJ0eXBlIGlzIFVua25vd25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBzdXBlci5pc1N1YnR5cGVPZihzdWJ0eXBlLCBzdXBlcnR5cGUpOwogIH0KCiAgYm9vbCBpc0VtcHR5Q29udGV4dChEYXJ0VHlwZSBjb250ZXh0KSB7CiAgICBpZiAoY29udGV4dCBpcyBEeW5hbWljVHlwZSkgewogICAgICAvLyBBbmFseXplciB0cmVhdHMgYSB0eXBlIGNvbnRleHQgb2YgYGR5bmFtaWNgIGFzIGVxdWl2YWxlbnQgdG8gYW4gZW1wdHkKICAgICAgLy8gY29udGV4dC4gIFRPRE8ocGF1bGJlcnJ5KTogdGhpcyBpcyBub3Qgc3BlYydlZCBhbnl3aGVyZTsgZG8gd2Ugc3RpbGwKICAgICAgLy8gd2FudCB0byBkbyB0aGlzPwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjb250ZXh0ID09IG51bGw7CiAgfQoKICAvLy8gVHJ1ZSBpZiBbbWVtYmVyXSBpcyBhIGJpbmFyeSBvcGVyYXRvciB0aGF0IHJldHVybnMgYW4gYGludGAgaWYgYm90aAogIC8vLyBvcGVyYW5kcyBhcmUgYGludGAsIGFuZCBvdGhlcndpc2UgcmV0dXJucyBgZG91YmxlYC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcmVjZWl2ZXIgdHlwZSwgc28gd2UgY2FuIG9ubHkgbWFrZQogIC8vLyB0aGlzIGRldGVybWluYXRpb24gaWYgd2Uga25vdyB0aGUgdHlwZSBvZiB0aGUgcmVjZWl2ZXIuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjYXNlIG9mIHR5cGUtYmFzZWQgb3ZlcmxvYWRpbmcsIHdoaWNoIGluIERhcnQgaXMgb25seSBzdXBwb3J0ZWQKICAvLy8gYnkgZ2l2aW5nIHNwZWNpYWwgdHJlYXRtZW50IHRvIGNlcnRhaW4gYXJpdGhtZXRpYyBvcGVyYXRvcnMuCiAgYm9vbCBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3JBbmRUeXBlKAogICAgICBQcm9jZWR1cmUgbWVtYmVyLCBEYXJ0VHlwZSByZWNlaXZlclR5cGUpIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogdGhpcyBtYXRjaGVzIHdoYXQgaXMgZGVmaW5lZCBpbiB0aGUgc3BlYy4gIEl0IHdvdWxkIGJlCiAgICAvLyBuaWNlIGlmIHdlIGNvdWxkIGNoYW5nZSBrZXJuZWwgdG8gbWF0Y2ggdGhlIHNwZWMgYW5kIG5vdCBoYXZlIHRvCiAgICAvLyBvdmVycmlkZS4KICAgIGlmIChtZW1iZXIubmFtZS5uYW1lID09ICdyZW1haW5kZXInKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIShyZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChyZWNlaXZlclR5cGUuY2xhc3NOb2RlLCBjb3JlVHlwZXMuaW50Q2xhc3MpKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKG1lbWJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVG9wKERhcnRUeXBlIHQpIHsKICAgIGlmICh0IGlzIFVua25vd25UeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHN1cGVyLmlzVG9wKHQpOwogICAgfQogIH0KCiAgLy8vIENvbXB1dGVzIHRoZSBjb25zdHJhaW50IHNvbHV0aW9uIGZvciBhIHR5cGUgdmFyaWFibGUgYmFzZWQgb24gYSBnaXZlbiBzZXQKICAvLy8gb2YgY29uc3RyYWludHMuCiAgLy8vCiAgLy8vIElmIFtncm91bmRlZF0gaXMgYHRydWVgLCB0aGVuIHRoZSByZXR1cm5lZCB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgYQogIC8vLyBrbm93biB0eXBlIChpLmUuIGl0IHdpbGwgbm90IGNvbnRhaW4gYW55IGluc3RhbmNlcyBvZiBgP2ApLgogIERhcnRUeXBlIHNvbHZlVHlwZUNvbnN0cmFpbnQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwKICAgICAge2Jvb2wgZ3JvdW5kZWQ6IGZhbHNlfSkgewogICAgLy8gUHJlZmVyIHRoZSBrbm93biBib3VuZCwgaWYgYW55LgogICAgaWYgKGlzS25vd24oY29uc3RyYWludC5sb3dlcikpIHJldHVybiBjb25zdHJhaW50Lmxvd2VyOwogICAgaWYgKGlzS25vd24oY29uc3RyYWludC51cHBlcikpIHJldHVybiBjb25zdHJhaW50LnVwcGVyOwoKICAgIC8vIE90aGVyd2lzZSB0YWtlIHdoYXRldmVyIGJvdW5kIGhhcyBwYXJ0aWFsIGluZm9ybWF0aW9uLCBlLmcuIGBJdGVyYWJsZTw/PmAKICAgIGlmIChjb25zdHJhaW50Lmxvd2VyIGlzISBVbmtub3duVHlwZSkgewogICAgICByZXR1cm4gZ3JvdW5kZWQKICAgICAgICAgID8gbGVhc3RDbG9zdXJlKGNvcmVUeXBlcywgY29uc3RyYWludC5sb3dlcikKICAgICAgICAgIDogY29uc3RyYWludC5sb3dlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBncm91bmRlZAogICAgICAgICAgPyBncmVhdGVzdENsb3N1cmUoY29yZVR5cGVzLCBjb25zdHJhaW50LnVwcGVyKQogICAgICAgICAgOiBjb25zdHJhaW50LnVwcGVyOwogICAgfQogIH0KCiAgLy8vIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gW3R5cGVdIHNhdGlzZmllcyB0aGUgZ2l2ZW4gdHlwZSBbY29uc3RyYWludF0uCiAgYm9vbCB0eXBlU2F0aXNmaWVzQ29uc3RyYWludChEYXJ0VHlwZSB0eXBlLCBUeXBlQ29uc3RyYWludCBjb25zdHJhaW50KSB7CiAgICByZXR1cm4gaXNTdWJ0eXBlT2YoY29uc3RyYWludC5sb3dlciwgdHlwZSkgJiYKICAgICAgICBpc1N1YnR5cGVPZih0eXBlLCBjb25zdHJhaW50LnVwcGVyKTsKICB9CgogIERhcnRUeXBlIF9pbmZlclR5cGVQYXJhbWV0ZXJGcm9tQWxsKERhcnRUeXBlIHR5cGVGcm9tQ29udGV4dEluZmVyZW5jZSwKICAgICAgVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgZXh0ZW5kc0NvbnN0cmFpbnQpIHsKICAgIC8vIFNlZSBpZiB3ZSBhbHJlYWR5IGZpeGVkIHRoaXMgdHlwZSBmcm9tIGRvd253YXJkcyBpbmZlcmVuY2UuCiAgICAvLyBJZiBzbywgdGhlbiB3ZSBhcmVuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgaXQgYmFzZWQgb24gYXJndW1lbnQgdHlwZXMuCiAgICBpZiAoaXNLbm93bih0eXBlRnJvbUNvbnRleHRJbmZlcmVuY2UpKSB7CiAgICAgIHJldHVybiB0eXBlRnJvbUNvbnRleHRJbmZlcmVuY2U7CiAgICB9CgogICAgaWYgKGV4dGVuZHNDb25zdHJhaW50ICE9IG51bGwpIHsKICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnQuY2xvbmUoKTsKICAgICAgYWRkVXBwZXJCb3VuZChjb25zdHJhaW50LCBleHRlbmRzQ29uc3RyYWludCk7CiAgICB9CgogICAgcmV0dXJuIHNvbHZlVHlwZUNvbnN0cmFpbnQoY29uc3RyYWludCwgZ3JvdW5kZWQ6IHRydWUpOwogIH0KCiAgRGFydFR5cGUgX2luZmVyVHlwZVBhcmFtZXRlckZyb21Db250ZXh0KAogICAgICBUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSBleHRlbmRzQ29uc3RyYWludCkgewogICAgRGFydFR5cGUgdCA9IHNvbHZlVHlwZUNvbnN0cmFpbnQoY29uc3RyYWludCk7CiAgICBpZiAoIWlzS25vd24odCkpIHsKICAgICAgcmV0dXJuIHQ7CiAgICB9CgogICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gbWFrZSBvdXIgZmluYWwgY2hvaWNlLCBhcHBseSB0aGUgZXh0ZW5kcyBjbGF1c2UuCiAgICAvLyBUaGlzIGdpdmVzIHVzIGEgY2hhbmNlIHRvIHJlZmluZSB0aGUgY2hvaWNlLCBpbiBjYXNlIGl0IHdvdWxkIHZpb2xhdGUKICAgIC8vIHRoZSBgZXh0ZW5kc2AgY2xhdXNlLiBGb3IgZXhhbXBsZToKICAgIC8vCiAgICAvLyAgICAgT2JqZWN0IG9iaiA9IG1hdGgubWluLyo8aW5mZXIgT2JqZWN0LCBlcnJvcj4qLygxLCAyKTsKICAgIC8vCiAgICAvLyBJZiB3ZSBjb25zaWRlciB0aGUgYFQgZXh0ZW5kcyBudW1gIHdlIGNvbmNsdWRlIGA8bnVtPmAsIHdoaWNoIHdvcmtzLgogICAgaWYgKGV4dGVuZHNDb25zdHJhaW50ICE9IG51bGwpIHsKICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnQuY2xvbmUoKTsKICAgICAgYWRkVXBwZXJCb3VuZChjb25zdHJhaW50LCBleHRlbmRzQ29uc3RyYWludCk7CiAgICAgIHJldHVybiBzb2x2ZVR5cGVDb25zdHJhaW50KGNvbnN0cmFpbnQpOwogICAgfQogICAgcmV0dXJuIHQ7CiAgfQp9CgpjbGFzcyBUeXBlVmFyaWFibGVFbGltaW5hdG9yIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHsKICBmaW5hbCBDb3JlVHlwZXMgX2NvcmVUeXBlczsKCiAgVHlwZVZhcmlhYmxlRWxpbWluYXRvcih0aGlzLl9jb3JlVHlwZXMpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRTdWJzdGl0dXRlKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpIHsKICAgIHJldHVybiB1cHBlckJvdW5kCiAgICAgICAgPyBfY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlCiAgICAgICAgOiBfY29yZVR5cGVzLm9iamVjdENsYXNzLnJhd1R5cGU7CiAgfQp9CoGhAE1OPwEhCQ8SFRYXExMXAUIBOAE9AUIoATMBRAFJAUoBQCMXMi08G0s0LClDLRUpOywRPAIBUEdJRgIBUDhINjELIAQCATsXSy0SAVEnEgETJSUBLAFAARdQAgFCGkclATYBMgE2ASoyPQQBRkJHBAFGQkcEAQxLT0gRHCotBhQEAUNNGgZMQQZNSUYGUExKOQZOTEsPBlBBIyMxIiIiJB8pDgYBT09QHEwBLhVCMAhHBgEfNUtCQggGAR5NMwQBMlE5ByYHUE4SJiU9LgQBRAZLTQZLUE9ITQZNT1AxUE8rMUwBPToBLCIpHEkxCAEvIRtLDzdMCAYBUBcfDgYBQDI9Oi8bRzABJ0Q0STA8CAEWKgFCT1FKCAEfKggGAUQEAQw7LUIyBAEqIk9OGhMGHAQBSjoGUD4GUEMuMU9IETcrQhQGMwQBDBscEw0dBgQBUBYGTEI6ICc8PAFRLBY2Hg0WOR4GBAFLSzItBAFJP0NLLScGASUnNAYBPAQBKz8yFxAGAUpNKgdBB0wlJzQuBg4EAgE0HgErAQxFFicqBAIBR3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYV9lbnZpcm9ubWVudC5kYXJ0NXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9pZGVudGlmaWVycy5kYXJ0j0UvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5xdWFsaWZpZWRfbmFtZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRXhwcmVzc2lvbjsKCmltcG9ydCAncHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQsIHVuc3VwcG9ydGVkOwoKaW1wb3J0ICdzY2FubmVyLmRhcnQnIHNob3cgVG9rZW47CgpjbGFzcyBJZGVudGlmaWVyIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgSWRlbnRpZmllcihUb2tlbiB0b2tlbikKICAgICAgOiBuYW1lID0gdG9rZW4ubGV4ZW1lLAogICAgICAgIGNoYXJPZmZzZXQgPSB0b2tlbi5jaGFyT2Zmc2V0OwoKICBJZGVudGlmaWVyLl8odGhpcy5uYW1lLCB0aGlzLmNoYXJPZmZzZXQpOwoKICBmYWN0b3J5IElkZW50aWZpZXIucHJlc2VydmVUb2tlbihUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBfVG9rZW5JZGVudGlmaWVyKHRva2VuKTsKICB9CgogIEV4cHJlc3Npb24gZ2V0IGluaXRpYWxpemVyID0+IG51bGw7CgogIGludCBnZXQgZW5kQ2hhck9mZnNldCA9PiBjaGFyT2Zmc2V0ICsgbmFtZS5sZW5ndGg7CgogIFF1YWxpZmllZE5hbWUgd2l0aFF1YWxpZmllcihPYmplY3QgcXVhbGlmaWVyKSB7CiAgICByZXR1cm4gbmV3IFF1YWxpZmllZE5hbWUuXyhxdWFsaWZpZXIsIG5hbWUsIGNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gImlkZW50aWZpZXIoJG5hbWUpIjsKfQoKY2xhc3MgX1Rva2VuSWRlbnRpZmllciBpbXBsZW1lbnRzIElkZW50aWZpZXIgewogIGZpbmFsIFRva2VuIHRva2VuOwoKICBfVG9rZW5JZGVudGlmaWVyKHRoaXMudG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gdG9rZW4ubGV4ZW1lOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGNoYXJPZmZzZXQgPT4gdG9rZW4uY2hhck9mZnNldDsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBnZXQgaW5pdGlhbGl6ZXIgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBlbmRDaGFyT2Zmc2V0ID0+IGNoYXJPZmZzZXQgKyBuYW1lLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgUXVhbGlmaWVkTmFtZSB3aXRoUXVhbGlmaWVyKE9iamVjdCBxdWFsaWZpZXIpIHsKICAgIHJldHVybiBuZXcgX1Rva2VuUXVhbGlmaWVkTmFtZShxdWFsaWZpZXIsIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJ0b2tlbi1pZGVudGlmaWVyKCRuYW1lKSI7Cn0KCmNsYXNzIEluaXRpYWxpemVkSWRlbnRpZmllciBleHRlbmRzIF9Ub2tlbklkZW50aWZpZXIgewogIEBvdmVycmlkZQogIGZpbmFsIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXI7CgogIEluaXRpYWxpemVkSWRlbnRpZmllcihfVG9rZW5JZGVudGlmaWVyIGlkZW50aWZpZXIsIHRoaXMuaW5pdGlhbGl6ZXIpCiAgICAgIDogc3VwZXIoaWRlbnRpZmllci50b2tlbik7CgogIEBvdmVycmlkZQogIFF1YWxpZmllZE5hbWUgd2l0aFF1YWxpZmllcihPYmplY3QgcXVhbGlmaWVyKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoIndpdGhRdWFsaWZpZXIiLCBjaGFyT2Zmc2V0LCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJpbml0aWFsaXplZC1pZGVudGlmaWVyKCRuYW1lLCAkaW5pdGlhbGl6ZXIpIjsKfQoKY2xhc3MgUXVhbGlmaWVkTmFtZSBleHRlbmRzIElkZW50aWZpZXIgewogIGZpbmFsIE9iamVjdCBxdWFsaWZpZXI7CgogIFF1YWxpZmllZE5hbWUodGhpcy5xdWFsaWZpZXIsIFRva2VuIHN1ZmZpeCkgOiBzdXBlcihzdWZmaXgpOwoKICBRdWFsaWZpZWROYW1lLl8odGhpcy5xdWFsaWZpZXIsIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlci5fKG5hbWUsIGNoYXJPZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBRdWFsaWZpZWROYW1lIHdpdGhRdWFsaWZpZXIoT2JqZWN0IHF1YWxpZmllcikgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJ3aXRoUXVhbGlmaWVyIiwgY2hhck9mZnNldCwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAicXVhbGlmaWVkLW5hbWUoJHF1YWxpZmllciwgJG5hbWUpIjsKfQoKY2xhc3MgX1Rva2VuUXVhbGlmaWVkTmFtZSBleHRlbmRzIF9Ub2tlbklkZW50aWZpZXIgaW1wbGVtZW50cyBRdWFsaWZpZWROYW1lIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBPYmplY3QgcXVhbGlmaWVyOwoKICBfVG9rZW5RdWFsaWZpZWROYW1lKHRoaXMucXVhbGlmaWVyLCBUb2tlbiBzdWZmaXgpCiAgICAgIDogYXNzZXJ0KHF1YWxpZmllciBpcyEgSWRlbnRpZmllciB8fCBxdWFsaWZpZXIgaXMgX1Rva2VuSWRlbnRpZmllciksCiAgICAgICAgc3VwZXIoc3VmZml4KTsKCiAgQG92ZXJyaWRlCiAgUXVhbGlmaWVkTmFtZSB3aXRoUXVhbGlmaWVyKE9iamVjdCBxdWFsaWZpZXIpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgid2l0aFF1YWxpZmllciIsIGNoYXJPZmZzZXQsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gInRva2VuLXF1YWxpZmllZC1uYW1lKCRxdWFsaWZpZXIsICRuYW1lKSI7Cn0KCnZvaWQgZmxhdHRlblF1YWxpZmllZE5hbWVPbigKICAgIFF1YWxpZmllZE5hbWUgbmFtZSwgU3RyaW5nQnVmZmVyIGJ1ZmZlciwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgZmluYWwgT2JqZWN0IHF1YWxpZmllciA9IG5hbWUucXVhbGlmaWVyOwogIGlmIChxdWFsaWZpZXIgaXMgUXVhbGlmaWVkTmFtZSkgewogICAgZmxhdHRlblF1YWxpZmllZE5hbWVPbihxdWFsaWZpZXIsIGJ1ZmZlciwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfSBlbHNlIGlmIChxdWFsaWZpZXIgaXMgSWRlbnRpZmllcikgewogICAgYnVmZmVyLndyaXRlKHF1YWxpZmllci5uYW1lKTsKICB9IGVsc2UgaWYgKHF1YWxpZmllciBpcyBTdHJpbmcpIHsKICAgIGJ1ZmZlci53cml0ZShxdWFsaWZpZXIpOwogIH0gZWxzZSB7CiAgICB1bmhhbmRsZWQoIiR7cXVhbGlmaWVyLnJ1bnRpbWVUeXBlfSIsICJmbGF0dGVuUXVhbGlmaWVkTmFtZU9uIiwgY2hhck9mZnNldCwKICAgICAgICBmaWxlVXJpKTsKICB9CiAgYnVmZmVyLndyaXRlKCIuIik7CiAgYnVmZmVyLndyaXRlKG5hbWUubmFtZSk7Cn0KClN0cmluZyBmbGF0dGVuTmFtZShPYmplY3QgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgaWYgKG5hbWUgaXMgU3RyaW5nKSB7CiAgICByZXR1cm4gbmFtZTsKICB9IGVsc2UgaWYgKG5hbWUgaXMgUXVhbGlmaWVkTmFtZSkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZsYXR0ZW5RdWFsaWZpZWROYW1lT24obmFtZSwgYnVmZmVyLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIHJldHVybiAiJGJ1ZmZlciI7CiAgfSBlbHNlIGlmIChuYW1lIGlzIElkZW50aWZpZXIpIHsKICAgIHJldHVybiBuYW1lLm5hbWU7CiAgfSBlbHNlIHsKICAgIHJldHVybiB1bmhhbmRsZWQoIiR7bmFtZS5ydW50aW1lVHlwZX0iLCAiZmxhdHRlbk5hbWUiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9Cn0KClRva2VuIGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuKElkZW50aWZpZXIgaWRlbnRpZmllcikgewogIF9Ub2tlbklkZW50aWZpZXIgdG9rZW5JZGVudGlmaWVyID0gaWRlbnRpZmllcjsKICByZXR1cm4gdG9rZW5JZGVudGlmaWVyPy50b2tlbjsKfQqAlwBOTjwBHgEyATQBIgETFRgBGh0nASwBMigEASYBNQEyPQQBDCwCAS8VASABDCMBDCoBDCYBDDUBDDI2BAEMMgIBNwwgAUchAQwyOwQBDEYCASkaAT8BPyMBDDI7BAEMPAIBTgwaATRLFwEMMjsEAQxCAgEdTCskRCgiJB0LUBIEFRsCAT8YESYuPxYjFgtRBAIBNzEhAgEscGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2lkZW50aWZpZXJzLmRhcnRGc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvYnVpbHRpbl90eXBlX2J1aWxkZXIuZGFydIOALy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuYnVpbHRpbl90eXBlX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IERhcnRUeXBlOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXIsIFR5cGVCdWlsZGVyLCBUeXBlRGVjbGFyYXRpb25CdWlsZGVyOwoKYWJzdHJhY3QgY2xhc3MgQnVpbHRpblR5cGVCdWlsZGVyIGV4dGVuZHMgVHlwZURlY2xhcmF0aW9uQnVpbGRlciB7CiAgZmluYWwgRGFydFR5cGUgdHlwZTsKCiAgQnVpbHRpblR5cGVCdWlsZGVyKAogICAgICBTdHJpbmcgbmFtZSwgdGhpcy50eXBlLCBMaWJyYXJ5QnVpbGRlciBjb21waWxhdGlvblVuaXQsIGludCBjaGFyT2Zmc2V0KQogICAgICA6IHN1cGVyKG51bGwsIDAsIG5hbWUsIGNvbXBpbGF0aW9uVW5pdCwgY2hhck9mZnNldCk7CgogIERhcnRUeXBlIGJ1aWxkVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpID0+CiAgICAgIHR5cGU7CgogIERhcnRUeXBlIGJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cykgewogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiQnVpbHRpblR5cGVCdWlsZGVyIjsKfQodAE5OPAEkATABUAFDFwEWTjsBTQwBKToRBAEwAgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvYnVpbHRpbl90eXBlX2J1aWxkZXIuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9jbGFzc19idWlsZGVyLmRhcnTAAQ5mLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY2xhc3NfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIEFzRXhwcmVzc2lvbiwKICAgICAgICBDbGFzcywKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIEludmFsaWRUeXBlLAogICAgICAgIExpc3RMaXRlcmFsLAogICAgICAgIE1lbWJlciwKICAgICAgICBNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIE5hbWUsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IsCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFN0YXRpY0dldCwKICAgICAgICBTdXBlcnR5cGUsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZvaWRUeXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBGdW5jdGlvblR5cGUsIFR5cGVQYXJhbWV0ZXJUeXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xvbmUuZGFydCcgc2hvdyBDbG9uZVdpdGhvdXRCb2R5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0JwogICAgc2hvdyBUeXBlQXJndW1lbnRJc3N1ZSwgZmluZFR5cGVBcmd1bWVudElzc3VlcywgZ2V0R2VuZXJpY1R5cGVOYW1lOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBTdWJzdGl0dXRpb24sIHN1YnN0aXR1dGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBhcyB0eXBlX2FsZ2VicmEKICAgIHNob3cgZ2V0U3Vic3RpdHV0aW9uTWFwOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICcuLi9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTWVtYmVyQnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIFNjb3BlLAogICAgICAgIFNjb3BlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICdkZWNsYXJhdGlvbl9idWlsZGVyLmRhcnQnOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQsCiAgICAgICAgbWVzc2FnZUltcGxlbWVudHNGdXR1cmVPciwKICAgICAgICBtZXNzYWdlUGF0Y2hDbGFzc09yaWdpbiwKICAgICAgICBtZXNzYWdlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaCwKICAgICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoLAogICAgICAgIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2luLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlLAogICAgICAgIHRlbXBsYXRlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQsCiAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycywKICAgICAgICB0ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2UsCiAgICAgICAgdGVtcGxhdGVJbXBsZW1lbnRzUmVwZWF0ZWQsCiAgICAgICAgdGVtcGxhdGVJbXBsZW1lbnRzU3VwZXJDbGFzcywKICAgICAgICB0ZW1wbGF0ZUltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHQsCiAgICAgICAgdGVtcGxhdGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50LAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkLAogICAgICAgIHRlbXBsYXRlSW50ZXJmYWNlQ2hlY2tDb250ZXh0LAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbiwKICAgICAgICB0ZW1wbGF0ZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUsCiAgICAgICAgdGVtcGxhdGVOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0LAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGRlbk1ldGhvZENhdXNlLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgdGVtcGxhdGVPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXIsCiAgICAgICAgdGVtcGxhdGVPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50cywKICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQsCiAgICAgICAgdGVtcGxhdGVSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kLAogICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2g7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIEZ1bmN0aW9uQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIFByb2NlZHVyZUJ1aWxkZXIsCiAgICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlciwKICAgICAgICBTY29wZSwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnQnCiAgICBzaG93IGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHksIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHk7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfdGFyZ2V0LmRhcnQnIHNob3cgS2VybmVsVGFyZ2V0OwoKaW1wb3J0ICcuLi9rZXJuZWwvdHlwZXMuZGFydCcgc2hvdyBUeXBlczsKCmltcG9ydCAnLi4vbmFtZXMuZGFydCcgc2hvdyBub1N1Y2hNZXRob2ROYW1lOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JwogICAgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuZXhwZWN0ZWQsIHVuaGFuZGxlZCwgdW5pbXBsZW1lbnRlZDsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBBbWJpZ3VvdXNCdWlsZGVyOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlOwoKYWJzdHJhY3QgY2xhc3MgQ2xhc3NCdWlsZGVyIGV4dGVuZHMgRGVjbGFyYXRpb25CdWlsZGVyIHsKICAvLy8gVGhlIHR5cGUgdmFyaWFibGVzIGRlY2xhcmVkIG9uIGEgY2xhc3MsIGV4dGVuc2lvbiBvciBtaXhpbiBkZWNsYXJhdGlvbi4KICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXM7CgogIC8vLyBUaGUgdHlwZSBpbiB0aGUgYGV4dGVuZHNgIGNsYXVzZSBvZiBhIGNsYXNzIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBDdXJyZW50bHkgdGhpcyBhbHNvIGhvbGRzIHRoZSBzeW50aGVzaXplZCBzdXBlciBjbGFzcyBmb3IgYSBtaXhpbgogIC8vLyBkZWNsYXJhdGlvbi4KICBUeXBlQnVpbGRlciBzdXBlcnR5cGU7CgogIC8vLyBUaGUgdHlwZSBpbiB0aGUgYGltcGxlbWVudHNgIGNsYXVzZSBvZiBhIGNsYXNzIG9yIG1peGluIGRlY2xhcmF0aW9uLgogIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXM7CgogIC8vLyBUaGUgdHlwZXMgaW4gdGhlIGBvbmAgY2xhdXNlIG9mIGFuIGV4dGVuc2lvbiBvciBtaXhpbiBkZWNsYXJhdGlvbi4KICBMaXN0PFR5cGVCdWlsZGVyPiBvblR5cGVzOwoKICBmaW5hbCBTY29wZSBjb25zdHJ1Y3RvcnM7CgogIGZpbmFsIFNjb3BlQnVpbGRlciBjb25zdHJ1Y3RvclNjb3BlQnVpbGRlcjsKCiAgTWFwPFN0cmluZywgQ29uc3RydWN0b3JSZWRpcmVjdGlvbj4gcmVkaXJlY3RpbmdDb25zdHJ1Y3RvcnM7CgogIENsYXNzQnVpbGRlciBhY3R1YWxPcmlnaW47CgogIENsYXNzQnVpbGRlcigKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgdGhpcy50eXBlVmFyaWFibGVzLAogICAgICB0aGlzLnN1cGVydHlwZSwKICAgICAgdGhpcy5pbnRlcmZhY2VzLAogICAgICB0aGlzLm9uVHlwZXMsCiAgICAgIFNjb3BlIHNjb3BlLAogICAgICB0aGlzLmNvbnN0cnVjdG9ycywKICAgICAgTGlicmFyeUJ1aWxkZXIgcGFyZW50LAogICAgICBpbnQgY2hhck9mZnNldCkKICAgICAgOiBjb25zdHJ1Y3RvclNjb3BlQnVpbGRlciA9IG5ldyBTY29wZUJ1aWxkZXIoY29uc3RydWN0b3JzKSwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCBuYW1lLCBwYXJlbnQsIGNoYXJPZmZzZXQsIHNjb3BlKTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkNsYXNzQnVpbGRlciI7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBjbGFzcyBpcyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGEgbWl4aW4gdG8gaXRzCiAgLy8vIHN1cGVyY2xhc3MuCiAgYm9vbCBnZXQgaXNNaXhpbkFwcGxpY2F0aW9uID0+IG1peGVkSW5UeXBlICE9IG51bGw7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uIHsKICAgIHJldHVybiBpc01peGluQXBwbGljYXRpb24gJiYgc3VwZXIuaXNOYW1lZE1peGluQXBwbGljYXRpb247CiAgfQoKICBUeXBlQnVpbGRlciBnZXQgbWl4ZWRJblR5cGU7CgogIHZvaWQgc2V0IG1peGVkSW5UeXBlKFR5cGVCdWlsZGVyIG1peGluKTsKCiAgTGlzdDxDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXI+IGdldCBjb25zdHJ1Y3RvclJlZmVyZW5jZXMgPT4gbnVsbDsKCiAgdm9pZCBidWlsZE91dGxpbmVFeHByZXNzaW9ucyhMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICB2b2lkIGJ1aWxkKFN0cmluZyBpZ25vcmUsIEJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICAgICAgTWVtYmVyQnVpbGRlciBtZW1iZXIgPSBkZWNsYXJhdGlvbjsKICAgICAgbWVtYmVyLmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKGxpYnJhcnkpOwogICAgfQoKICAgIE1ldGFkYXRhQnVpbGRlci5idWlsZEFubm90YXRpb25zKAogICAgICAgIGlzUGF0Y2ggPyBvcmlnaW4udGFyZ2V0IDogY2xzLCBtZXRhZGF0YSwgbGlicmFyeSwgdGhpcywgbnVsbCk7CiAgICBjb25zdHJ1Y3RvcnMuZm9yRWFjaChidWlsZCk7CiAgICBzY29wZS5mb3JFYWNoKGJ1aWxkKTsKICB9CgogIC8vLyBSZWdpc3RlcnMgYSBjb25zdHJ1Y3RvciByZWRpcmVjdGlvbiBmb3IgdGhpcyBjbGFzcyBhbmQgcmV0dXJucyB0cnVlIGlmCiAgLy8vIHRoaXMgcmVkaXJlY3Rpb24gZ2l2ZXMgcmlzZSB0byBhIGN5Y2xlIHRoYXQgaGFzIG5vdCBiZWVuIHJlcG9ydGVkIGJlZm9yZS4KICBib29sIGNoZWNrQ29uc3RydWN0b3JDeWNsaWMoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIHRhcmdldCkgewogICAgQ29uc3RydWN0b3JSZWRpcmVjdGlvbiByZWRpcmVjdCA9IG5ldyBDb25zdHJ1Y3RvclJlZGlyZWN0aW9uKHRhcmdldCk7CiAgICByZWRpcmVjdGluZ0NvbnN0cnVjdG9ycyA/Pz0gPFN0cmluZywgQ29uc3RydWN0b3JSZWRpcmVjdGlvbj57fTsKICAgIHJlZGlyZWN0aW5nQ29uc3RydWN0b3JzW3NvdXJjZV0gPSByZWRpcmVjdDsKICAgIHdoaWxlIChyZWRpcmVjdCAhPSBudWxsKSB7CiAgICAgIGlmIChyZWRpcmVjdC5jeWNsZVJlcG9ydGVkKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChyZWRpcmVjdC50YXJnZXQgPT0gc291cmNlKSB7CiAgICAgICAgcmVkaXJlY3QuY3ljbGVSZXBvcnRlZCA9IHRydWU7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmVkaXJlY3QgPSByZWRpcmVjdGluZ0NvbnN0cnVjdG9yc1tyZWRpcmVjdC50YXJnZXRdOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHJlc29sdmVDb25zdHJ1Y3RvcnMoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgaWYgKGNvbnN0cnVjdG9yUmVmZXJlbmNlcyA9PSBudWxsKSByZXR1cm4gMDsKICAgIGZvciAoQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyIHJlZiBpbiBjb25zdHJ1Y3RvclJlZmVyZW5jZXMpIHsKICAgICAgcmVmLnJlc29sdmVJbihzY29wZSwgbGlicmFyeSk7CiAgICB9CiAgICBpbnQgY291bnQgPSBjb25zdHJ1Y3RvclJlZmVyZW5jZXMubGVuZ3RoOwogICAgaWYgKGNvdW50ICE9IDApIHsKICAgICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gY29uc3RydWN0b3JzID0gdGhpcy5jb25zdHJ1Y3RvcnMubG9jYWw7CiAgICAgIC8vIENvcHkga2V5cyB0byBhdm9pZCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBlcnJvci4KICAgICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gY29uc3RydWN0b3JzLmtleXMudG9MaXN0KCk7CiAgICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gbmFtZXMpIHsKICAgICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gY29uc3RydWN0b3JzW25hbWVdOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5wYXJlbnQgIT0gdGhpcykgewogICAgICAgICAgICB1bmV4cGVjdGVkKCIkZmlsZVVyaSIsICIke2RlY2xhcmF0aW9uLnBhcmVudC5maWxlVXJpfSIsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyKSB7CiAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIGltbWVkaWF0ZSByZWRpcmVjdGlvbiB0YXJnZXQsIG5vdCB0aGUgZWZmZWN0aXZlLgogICAgICAgICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVkaXJlY3Rpb25UYXJnZXQgPQogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24ucmVkaXJlY3Rpb25UYXJnZXQ7CiAgICAgICAgICAgIGlmIChyZWRpcmVjdGlvblRhcmdldCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgQnVpbGRlciB0YXJnZXRCdWlsZGVyID0gcmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0OwogICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgIC8vIE9ubHkgdGhlIGZpcnN0IG9uZSAodGhhdCBpcywgdGhlIGxhc3Qgb24gaW4gdGhlIGxpbmtlZCBsaXN0KQogICAgICAgICAgICAgICAgLy8gaXMgYWN0dWFsbHkgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGlzIGNhbGwgY3JlYXRlcyBhIFN0YXRpY0dldAogICAgICAgICAgICAgICAgLy8gdG8gW2RlY2xhcmF0aW9uLnRhcmdldF0gaW4gYSBmaWVsZCBgX3JlZGlyZWN0aW5nI2Agd2hpY2ggaXMKICAgICAgICAgICAgICAgIC8vIG9ubHkgbGVnYWwgdG8gZG8gdG8gdGhpbmdzIGluIHRoZSBrZXJuZWwgdHJlZS4KICAgICAgICAgICAgICAgIGFkZFJlZGlyZWN0aW5nQ29uc3RydWN0b3IoZGVjbGFyYXRpb24sIGxpYnJhcnkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodGFyZ2V0QnVpbGRlciBpcyBGdW5jdGlvbkJ1aWxkZXIpIHsKICAgICAgICAgICAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBkZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzOwogICAgICAgICAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAvLyBUT0RPKDMyMDQ5KSBJZiB0eXBlIGFyZ3VtZW50cyBhcmVuJ3Qgc3BlY2lmaWVkLCB0aGV5IHNob3VsZAogICAgICAgICAgICAgICAgICAvLyBiZSBpbmZlcnJlZC4gIEN1cnJlbnRseSwgdGhlIGluZmVyZW5jZSBpcyBub3QgcGVyZm9ybWVkLgogICAgICAgICAgICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBpcyBhIHdvcmthcm91bmQuCiAgICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVudHMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnVpbGRlci50YXJnZXQuZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnNldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnVpbGRlci50YXJnZXQsIHR5cGVBcmd1bWVudHMpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0QnVpbGRlciBpcyBEaWxsTWVtYmVyQnVpbGRlcikgewogICAgICAgICAgICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IGRlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHM7CiAgICAgICAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgIC8vIFRPRE8oMzIwNDkpIElmIHR5cGUgYXJndW1lbnRzIGFyZW4ndCBzcGVjaWZpZWQsIHRoZXkgc2hvdWxkCiAgICAgICAgICAgICAgICAgIC8vIGJlIGluZmVycmVkLiAgQ3VycmVudGx5LCB0aGUgaW5mZXJlbmNlIGlzIG5vdCBwZXJmb3JtZWQuCiAgICAgICAgICAgICAgICAgIC8vIFRoZSBjb2RlIGJlbG93IGlzIGEgd29ya2Fyb3VuZC4KICAgICAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyA9IG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCdWlsZGVyLnRhcmdldC5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICAgICAgICAgICAgICAgICAgZ3Jvd2FibGU6IHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uc2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keSgKICAgICAgICAgICAgICAgICAgICB0YXJnZXRCdWlsZGVyLm1lbWJlciwgdHlwZUFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRCdWlsZGVyIGlzIEFtYmlndW91c0J1aWxkZXIpIHsKICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMocmVkaXJlY3Rpb25UYXJnZXQuZnVsbE5hbWVGb3JFcnJvcnMpOwogICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlzQ29uc3QpIHsKICAgICAgICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGRlY2xhcmF0aW9uLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIENvcmVUeXBlcyBhcmVuJ3QgY29tcHV0ZWQgeWV0LCBhbmQgdGhpcyBpcyB0aGUgb3V0bGluZQogICAgICAgICAgICAgICAgLy8gcGhhc2UuIFNvIHdlIGNhbid0IGFuZCBzaG91bGRuJ3QgY3JlYXRlIGEgbWV0aG9kIGJvZHkuCiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5ib2R5ID0gbmV3IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkudW5yZXNvbHZlZCgKICAgICAgICAgICAgICAgICAgICByZWRpcmVjdGlvblRhcmdldC5mdWxsTmFtZUZvckVycm9ycyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZAogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHJlZGlyZWN0aW9uVGFyZ2V0LmZ1bGxOYW1lRm9yRXJyb3JzKTsKICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pc0NvbnN0KSB7CiAgICAgICAgICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBDb3JlVHlwZXMgYXJlbid0IGNvbXB1dGVkIHlldCwgYW5kIHRoaXMgaXMgdGhlIG91dGxpbmUKICAgICAgICAgICAgICAgIC8vIHBoYXNlLiBTbyB3ZSBjYW4ndCBhbmQgc2hvdWxkbid0IGNyZWF0ZSBhIG1ldGhvZCBib2R5LgogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uYm9keSA9IG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LnVucmVzb2x2ZWQoCiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQuZnVsbE5hbWVGb3JFcnJvcnMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi5uZXh0OwogICAgICAgIH0gd2hpbGUgKGRlY2xhcmF0aW9uICE9IG51bGwpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICAvLy8gVXNlZCB0byBsb29rdXAgYSBzdGF0aWMgbWVtYmVyIG9mIHRoaXMgY2xhc3MuCiAgQnVpbGRlciBmaW5kU3RhdGljQnVpbGRlcigKICAgICAgU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSwgTGlicmFyeUJ1aWxkZXIgYWNjZXNzaW5nTGlicmFyeSwKICAgICAge2Jvb2wgaXNTZXR0ZXI6IGZhbHNlfSkgewogICAgaWYgKGFjY2Vzc2luZ0xpYnJhcnkub3JpZ2luICE9IGxpYnJhcnkub3JpZ2luICYmIG5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGlzU2V0dGVyCiAgICAgICAgPyBzY29wZS5sb29rdXBTZXR0ZXIobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgaXNJbnN0YW5jZVNjb3BlOiBmYWxzZSkKICAgICAgICA6IHNjb3BlLmxvb2t1cChuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBpc0luc3RhbmNlU2NvcGU6IGZhbHNlKTsKICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsICYmIGlzUGF0Y2gpIHsKICAgICAgcmV0dXJuIG9yaWdpbi5maW5kU3RhdGljQnVpbGRlcigKICAgICAgICAgIG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGFjY2Vzc2luZ0xpYnJhcnksCiAgICAgICAgICBpc1NldHRlcjogaXNTZXR0ZXIpOwogICAgfQogICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogIH0KCiAgQnVpbGRlciBmaW5kQ29uc3RydWN0b3JPckZhY3RvcnkoCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgYWNjZXNzaW5nTGlicmFyeSkgewogICAgaWYgKGFjY2Vzc2luZ0xpYnJhcnkub3JpZ2luICE9IGxpYnJhcnkub3JpZ2luICYmIG5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9ycy5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgdXJpKTsKICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsICYmIGlzUGF0Y2gpIHsKICAgICAgcmV0dXJuIG9yaWdpbi5maW5kQ29uc3RydWN0b3JPckZhY3RvcnkoCiAgICAgICAgICBuYW1lLCBjaGFyT2Zmc2V0LCB1cmksIGFjY2Vzc2luZ0xpYnJhcnkpOwogICAgfQogICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihTdHJpbmcgbmFtZSwgQnVpbGRlciBidWlsZGVyKSkgewogICAgc2NvcGUuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIEJ1aWxkZXIgbG9va3VwTG9jYWxNZW1iZXIoU3RyaW5nIG5hbWUsIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pIHsKICAgIEJ1aWxkZXIgYnVpbGRlciA9IHNjb3BlLmxvY2FsW25hbWVdOwogICAgaWYgKGJ1aWxkZXIgPT0gbnVsbCAmJiBpc1BhdGNoKSB7CiAgICAgIGJ1aWxkZXIgPSBvcmlnaW4uc2NvcGUubG9jYWxbbmFtZV07CiAgICB9CiAgICBpZiAocmVxdWlyZWQgJiYgYnVpbGRlciA9PSBudWxsKSB7CiAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbi53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgIG5hbWUsIGZ1bGxOYW1lRm9yRXJyb3JzKSwKICAgICAgICAgIC0xLAogICAgICAgICAgbnVsbCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlcjsKICB9CgogIC8vLyBGaW5kIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhpcyBjbGFzcyB3aXRoIFtuYW1lXS4gVGhpcyBtZXRob2QgaXNuJ3QKICAvLy8gc3VpdGFibGUgZm9yIHNjb3BlIGxvb2t1cHMgYXMgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgbmFtZSBpc24ndAogIC8vLyBkZWNsYXJlZC4gVGhlIFtzY29wZV0gc2hvdWxkIGJlIHVzZWQgZm9yIHRoYXQuIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8KICAvLy8gZmluZCBhIG1lbWJlciB0aGF0IGlzIGtub3duIHRvIGV4aXN0IGFuZCBpdCB3aWxsIHBpY2sgdGhlIGZpcnN0CiAgLy8vIGRlY2xhcmF0aW9uIGlmIHRoZSBuYW1lIGlzIGFtYmlndW91cy4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIHRoaXMgbWV0aG9kIGlzIGNvbnZlbmllbnQgZm9yIHVzZSB3aGVuIGJ1aWxkaW5nIHN5bnRoZXRpYwogIC8vLyBtZW1iZXJzLCBzdWNoIGFzIHRob3NlIG9mIGFuIGVudW0uCiAgTWVtYmVyQnVpbGRlciBmaXJzdE1lbWJlck5hbWVkKFN0cmluZyBuYW1lKSB7CiAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gbG9va3VwTG9jYWxNZW1iZXIobmFtZSwgcmVxdWlyZWQ6IHRydWUpOwogICAgd2hpbGUgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCkgewogICAgICBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uLm5leHQ7CiAgICB9CiAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgfQoKICBDbGFzcyBnZXQgY2xzOwoKICBDbGFzcyBnZXQgdGFyZ2V0ID0+IGNsczsKCiAgQ2xhc3MgZ2V0IGFjdHVhbENsczsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NCdWlsZGVyIGdldCBvcmlnaW4gPT4gYWN0dWFsT3JpZ2luID8/IHRoaXM7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IHRoaXNUeXBlID0+IGNscy50aGlzVHlwZTsKCiAgLy8vIFthcmd1bWVudHNdIGhhdmUgYWxyZWFkeSBiZWVuIGJ1aWx0LgogIEludGVyZmFjZVR5cGUgYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzKSB7CiAgICBhc3NlcnQoYXJndW1lbnRzID09IG51bGwgfHwgY2xzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA9PSBhcmd1bWVudHMubGVuZ3RoKTsKICAgIHJldHVybiBhcmd1bWVudHMgPT0gbnVsbCA/IGNscy5yYXdUeXBlIDogbmV3IEludGVyZmFjZVR5cGUoY2xzLCBhcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCB0eXBlVmFyaWFibGVzQ291bnQgPT4gdHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDA7CgogIExpc3Q8RGFydFR5cGU+IGJ1aWxkVHlwZUFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSB7CiAgICBpZiAoYXJndW1lbnRzID09IG51bGwgJiYgdHlwZVZhcmlhYmxlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiA8RGFydFR5cGU+W107CiAgICB9CgogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsICYmIHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCh0eXBlVmFyaWFibGVzLmxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgewogICAgICAgIHJlc3VsdFtpXSA9IHR5cGVWYXJpYWJsZXNbaV0uZGVmYXVsdFR5cGUuYnVpbGQobGlicmFyeSk7CiAgICAgIH0KICAgICAgaWYgKGxpYnJhcnkgaXMgU291cmNlTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICBsaWJyYXJ5LmluZmVycmVkVHlwZXMuYWRkQWxsKHJlc3VsdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwgJiYgYXJndW1lbnRzLmxlbmd0aCAhPSAodHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDApKSB7CiAgICAgIC8vIFRoYXQgc2hvdWxkIGJlIGNhdWdodCBhbmQgcmVwb3J0ZWQgYXMgYSBjb21waWxlLXRpbWUgZXJyb3IgZWFybGllci4KICAgICAgcmV0dXJuIHVuaGFuZGxlZCgKICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2gKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlVmFyaWFibGVzLmxlbmd0aCkKICAgICAgICAgICAgICAubWVzc2FnZSwKICAgICAgICAgICJidWlsZFR5cGVBcmd1bWVudHMiLAogICAgICAgICAgLTEsCiAgICAgICAgICBudWxsKTsKICAgIH0KCiAgICAvLyBhcmd1bWVudHMubGVuZ3RoID09IHR5cGVWYXJpYWJsZXMubGVuZ3RoCiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoYXJndW1lbnRzLmxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gYXJndW1lbnRzW2ldLmJ1aWxkKGxpYnJhcnkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBJZiBbYXJndW1lbnRzXSBhcmUgbnVsbCwgdGhlIGRlZmF1bHQgdHlwZXMgZm9yIHRoZSB2YXJpYWJsZXMgYXJlIHVzZWQuCiAgSW50ZXJmYWNlVHlwZSBidWlsZFR5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgICBsaWJyYXJ5LCBidWlsZFR5cGVBcmd1bWVudHMobGlicmFyeSwgYXJndW1lbnRzKSk7CiAgfQoKICBTdXBlcnR5cGUgYnVpbGRTdXBlcnR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgQ2xhc3MgY2xzID0gaXNQYXRjaCA/IG9yaWdpbi50YXJnZXQgOiB0aGlzLmNsczsKICAgIHJldHVybiBuZXcgU3VwZXJ0eXBlKGNscywgYnVpbGRUeXBlQXJndW1lbnRzKGxpYnJhcnksIGFyZ3VtZW50cykpOwogIH0KCiAgU3VwZXJ0eXBlIGJ1aWxkTWl4ZWRJblR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgQ2xhc3MgY2xzID0gaXNQYXRjaCA/IG9yaWdpbi50YXJnZXQgOiB0aGlzLmNsczsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IFN1cGVydHlwZShjbHMsIGJ1aWxkVHlwZUFyZ3VtZW50cyhsaWJyYXJ5LCBhcmd1bWVudHMpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgU3VwZXJ0eXBlKAogICAgICAgICAgY2xzLAogICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgICBjbHMudHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBVbmtub3duVHlwZSgpLAogICAgICAgICAgICAgIGdyb3dhYmxlOiB0cnVlKSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrU3VwZXJ0eXBlcyhDb3JlVHlwZXMgY29yZVR5cGVzKSB7CiAgICAvLyBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNsYXNzICh0aGF0J3MgYmVpbmcgYnVpbHQpIGl0cyBzdXBlcgogICAgLy8gY2xhc3MgYXBwZWFycyBib3RoIGluICdleHRlbmRzJyBhbmQgJ2ltcGxlbWVudHMnIGNsYXVzZXMgYW5kIHdoZXRoZXIgYW55CiAgICAvLyBpbnRlcmZhY2UgYXBwZWFycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgJ2ltcGxlbWVudHMnIGNsYXVzZS4KICAgIGlmIChpbnRlcmZhY2VzID09IG51bGwpIHJldHVybjsKCiAgICAvLyBFeHRyYWN0IHN1cGVyIGNsYXNzIChpZiBpdCBleGlzdHMpLgogICAgQ2xhc3NCdWlsZGVyIHN1cGVyQ2xhc3M7CiAgICBUeXBlQnVpbGRlciBzdXBlckNsYXNzVHlwZSA9IHN1cGVydHlwZTsKICAgIGlmIChzdXBlckNsYXNzVHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgIEJ1aWxkZXIgZGVjbCA9IHN1cGVyQ2xhc3NUeXBlLmRlY2xhcmF0aW9uOwogICAgICBpZiAoZGVjbCBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICBzdXBlckNsYXNzID0gZGVjbDsKICAgICAgfQogICAgfQoKICAgIC8vIFZhbGlkYXRlIGludGVyZmFjZXMuCiAgICBNYXA8Q2xhc3NCdWlsZGVyLCBpbnQ+IHByb2JsZW1zOwogICAgTWFwPENsYXNzQnVpbGRlciwgaW50PiBwcm9ibGVtc09mZnNldHM7CiAgICBTZXQ8Q2xhc3NCdWlsZGVyPiBpbXBsZW1lbnRlZCA9IG5ldyBTZXQ8Q2xhc3NCdWlsZGVyPigpOwogICAgZm9yIChUeXBlQnVpbGRlciB0eXBlIGluIGludGVyZmFjZXMpIHsKICAgICAgaWYgKHR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICAgIGludCBjaGFyT2Zmc2V0ID0gLTE7IC8vIFRPRE8oYWhlKTogR2V0IG9mZnNldCBmcm9tIHR5cGUuCiAgICAgICAgQnVpbGRlciBkZWNsID0gdHlwZS5kZWNsYXJhdGlvbjsKICAgICAgICBpZiAoZGVjbCBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICAgIENsYXNzQnVpbGRlciBpbnRlcmZhY2UgPSBkZWNsOwogICAgICAgICAgaWYgKHN1cGVyQ2xhc3MgPT0gaW50ZXJmYWNlKSB7CiAgICAgICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUltcGxlbWVudHNTdXBlckNsYXNzLndpdGhBcmd1bWVudHMoaW50ZXJmYWNlLm5hbWUpLAogICAgICAgICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaW1wbGVtZW50ZWQuY29udGFpbnMoaW50ZXJmYWNlKSkgewogICAgICAgICAgICAvLyBBZ2dyZWdhdGUgcmVwZXRpdGlvbnMuCiAgICAgICAgICAgIHByb2JsZW1zID8/PSBuZXcgTWFwPENsYXNzQnVpbGRlciwgaW50PigpOwogICAgICAgICAgICBwcm9ibGVtc1tpbnRlcmZhY2VdID8/PSAwOwogICAgICAgICAgICBwcm9ibGVtc1tpbnRlcmZhY2VdICs9IDE7CgogICAgICAgICAgICBwcm9ibGVtc09mZnNldHMgPz89IG5ldyBNYXA8Q2xhc3NCdWlsZGVyLCBpbnQ+KCk7CiAgICAgICAgICAgIHByb2JsZW1zT2Zmc2V0c1tpbnRlcmZhY2VdID8/PSBjaGFyT2Zmc2V0OwogICAgICAgICAgfSBlbHNlIGlmIChpbnRlcmZhY2UudGFyZ2V0ID09IGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzKSB7CiAgICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZUltcGxlbWVudHNGdXR1cmVPciwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGludGVyZmFjZS50YXJnZXQubmFtZS5sZW5ndGgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW1wbGVtZW50ZWQuYWRkKGludGVyZmFjZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAocHJvYmxlbXMgIT0gbnVsbCkgewogICAgICBwcm9ibGVtcy5mb3JFYWNoKChDbGFzc0J1aWxkZXIgaW50ZXJmYWNlLCBpbnQgcmVwZXRpdGlvbnMpIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUltcGxlbWVudHNSZXBlYXRlZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgaW50ZXJmYWNlLm5hbWUsIHJlcGV0aXRpb25zKSwKICAgICAgICAgICAgcHJvYmxlbXNPZmZzZXRzW2ludGVyZmFjZV0sCiAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5TdXBlcnR5cGUoCiAgICAgIFN1cGVydHlwZSBzdXBlcnR5cGUsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQpIHsKICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSB0aGlzLmxpYnJhcnk7CgogICAgTGlzdDxUeXBlQXJndW1lbnRJc3N1ZT4gaXNzdWVzID0gZmluZFR5cGVBcmd1bWVudElzc3VlcygKICAgICAgICBuZXcgSW50ZXJmYWNlVHlwZShzdXBlcnR5cGUuY2xhc3NOb2RlLCBzdXBlcnR5cGUudHlwZUFyZ3VtZW50cyksCiAgICAgICAgdHlwZUVudmlyb25tZW50LAogICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiBmYWxzZSk7CiAgICBpZiAoaXNzdWVzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlQXJndW1lbnRJc3N1ZSBpc3N1ZSBpbiBpc3N1ZXMpIHsKICAgICAgICBNZXNzYWdlIG1lc3NhZ2U7CiAgICAgICAgRGFydFR5cGUgYXJndW1lbnQgPSBpc3N1ZS5hcmd1bWVudDsKICAgICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBpc3N1ZS50eXBlUGFyYW1ldGVyOwogICAgICAgIGJvb2wgaW5mZXJyZWQgPSBsaWJyYXJ5LmluZmVycmVkVHlwZXMuY29udGFpbnMoYXJndW1lbnQpOwogICAgICAgIGlmIChhcmd1bWVudCBpcyBGdW5jdGlvblR5cGUgJiYgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICAgICAgaWYgKGluZmVycmVkKSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50CiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhhcmd1bWVudCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQ7CiAgICAgICAgICB9CiAgICAgICAgICB0eXBlUGFyYW1ldGVyID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGluZmVycmVkKSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPQogICAgICAgICAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQsCiAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5ib3VuZCwKICAgICAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgZ2V0R2VuZXJpY1R5cGVOYW1lKGlzc3VlLmVuY2xvc2luZ1R5cGUpLAogICAgICAgICAgICAgICAgICAgIHN1cGVydHlwZS5jbGFzc05vZGUubmFtZSwKICAgICAgICAgICAgICAgICAgICBuYW1lKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBhcmd1bWVudCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgICAgICBnZXRHZW5lcmljVHlwZU5hbWUoaXNzdWUuZW5jbG9zaW5nVHlwZSksCiAgICAgICAgICAgICAgICBzdXBlcnR5cGUuY2xhc3NOb2RlLm5hbWUsCiAgICAgICAgICAgICAgICBuYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGxpYnJhcnkucmVwb3J0VHlwZUFyZ3VtZW50SXNzdWUoCiAgICAgICAgICAgIG1lc3NhZ2UsIGZpbGVVcmksIGNoYXJPZmZzZXQsIHR5cGVQYXJhbWV0ZXIpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5PdXRsaW5lKFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQpIHsKICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSB0aGlzLmxpYnJhcnk7CgogICAgLy8gQ2hlY2sgaW4gYm91bmRzIG9mIG93biB0eXBlIHZhcmlhYmxlcy4KICAgIGZvciAoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIgaW4gY2xzLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IGlzc3VlcyA9IGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMoCiAgICAgICAgICBwYXJhbWV0ZXIuYm91bmQsIHR5cGVFbnZpcm9ubWVudCwKICAgICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICAgICAgaWYgKGlzc3VlcyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChUeXBlQXJndW1lbnRJc3N1ZSBpc3N1ZSBpbiBpc3N1ZXMpIHsKICAgICAgICAgIERhcnRUeXBlIGFyZ3VtZW50ID0gaXNzdWUuYXJndW1lbnQ7CiAgICAgICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBpc3N1ZS50eXBlUGFyYW1ldGVyOwogICAgICAgICAgaWYgKGxpYnJhcnkuaW5mZXJyZWRUeXBlcy5jb250YWlucyhhcmd1bWVudCkpIHsKICAgICAgICAgICAgLy8gSW5mZXJlbmNlIGluIHR5cGUgZXhwcmVzc2lvbnMgaW4gdGhlIHN1cGVydHlwZXMgYm9pbHMgZG93biB0bwogICAgICAgICAgICAvLyBpbnN0YW50aWF0ZS10by1ib3VuZCB3aGljaCBzaG91bGRuJ3QgcHJvZHVjZSBhbnl0aGluZyB0aGF0IGJyZWFrcwogICAgICAgICAgICAvLyB0aGUgYm91bmRzIGFmdGVyIHRoZSBub24tc2ltcGxpY2l0eSBjaGVja3MgYXJlIGRvbmUuICBTbywgYW55CiAgICAgICAgICAgIC8vIHZpb2xhdGlvbiBoZXJlIGlzIHRoZSByZXN1bHQgb2Ygbm9uLXNpbXBsZSBib3VuZHMsIGFuZCB0aGUgZXJyb3IKICAgICAgICAgICAgLy8gaXMgcmVwb3J0ZWQgZWxzZXdoZXJlLgogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KCiAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2U7CiAgICAgICAgICBpZiAoYXJndW1lbnQgaXMgRnVuY3Rpb25UeXBlICYmIGFyZ3VtZW50LnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50OwogICAgICAgICAgICB0eXBlUGFyYW1ldGVyID0gbnVsbDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgYXJndW1lbnQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLmJvdW5kLAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLAogICAgICAgICAgICAgICAgZ2V0R2VuZXJpY1R5cGVOYW1lKGlzc3VlLmVuY2xvc2luZ1R5cGUpKTsKICAgICAgICAgIH0KCiAgICAgICAgICBsaWJyYXJ5LnJlcG9ydFR5cGVBcmd1bWVudElzc3VlKAogICAgICAgICAgICAgIG1lc3NhZ2UsIGZpbGVVcmksIHBhcmFtZXRlci5maWxlT2Zmc2V0LCB0eXBlUGFyYW1ldGVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBDaGVjayBpbiBzdXBlcnMuCiAgICBpZiAoY2xzLnN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIGNoZWNrQm91bmRzSW5TdXBlcnR5cGUoY2xzLnN1cGVydHlwZSwgdHlwZUVudmlyb25tZW50KTsKICAgIH0KICAgIGlmIChjbHMubWl4ZWRJblR5cGUgIT0gbnVsbCkgewogICAgICBjaGVja0JvdW5kc0luU3VwZXJ0eXBlKGNscy5taXhlZEluVHlwZSwgdHlwZUVudmlyb25tZW50KTsKICAgIH0KICAgIGlmIChjbHMuaW1wbGVtZW50ZWRUeXBlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoU3VwZXJ0eXBlIHN1cGVydHlwZSBpbiBjbHMuaW1wbGVtZW50ZWRUeXBlcykgewogICAgICAgIGNoZWNrQm91bmRzSW5TdXBlcnR5cGUoc3VwZXJ0eXBlLCB0eXBlRW52aXJvbm1lbnQpOwogICAgICB9CiAgICB9CgogICAgLy8gQ2hlY2sgaW4gbWVtYmVycy4KICAgIGZvciAoRmllbGQgZmllbGQgaW4gY2xzLmZpZWxkcykgewogICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5GaWVsZChmaWVsZCwgdHlwZUVudmlyb25tZW50KTsKICAgIH0KICAgIGZvciAoUHJvY2VkdXJlIHByb2NlZHVyZSBpbiBjbHMucHJvY2VkdXJlcykgewogICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGUoCiAgICAgICAgICBwcm9jZWR1cmUuZnVuY3Rpb24sIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSk7CiAgICB9CiAgICBmb3IgKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGluIGNscy5jb25zdHJ1Y3RvcnMpIHsKICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlKAogICAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24sIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSk7CiAgICB9CiAgICBmb3IgKFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIHJlZGlyZWN0aW5nCiAgICAgICAgaW4gY2xzLnJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycykgewogICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGVQYXJ0cygKICAgICAgICAgIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgcmVkaXJlY3RpbmcuZmlsZU9mZnNldCwKICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiByZWRpcmVjdGluZy50eXBlUGFyYW1ldGVycywKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiByZWRpcmVjdGluZy5wb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICAgIG5hbWVkUGFyYW1ldGVyczogcmVkaXJlY3RpbmcubmFtZWRQYXJhbWV0ZXJzKTsKICAgIH0KICB9CgogIHZvaWQgYWRkUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcigKICAgICAgUHJvY2VkdXJlQnVpbGRlciBjb25zdHJ1Y3RvciwgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgLy8gQWRkIGEgbmV3IHN5bnRoZXRpYyBmaWVsZCB0byB0aGlzIGNsYXNzIGZvciByZXByZXNlbnRpbmcgZmFjdG9yeQogICAgLy8gY29uc3RydWN0b3JzLiBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCByZXNvbHZpbmcgc3VjaCBjb25zdHJ1Y3RvcnMgaW4KICAgIC8vIHNvdXJjZSBjb2RlLgogICAgLy8KICAgIC8vIFRoZSBzeW50aGV0aWMgZmllbGQgbG9va3MgbGlrZSB0aGlzOgogICAgLy8KICAgIC8vICAgICBmaW5hbCBfcmVkaXJlY3RpbmcjID0gW2MxLCAuLi4sIGNuXTsKICAgIC8vCiAgICAvLyBXaGVyZSBlYWNoIGMxIC4uLiBjbiBhcmUgYW4gaW5zdGFuY2Ugb2YgW1N0YXRpY0dldF0gd2hvc2UgdGFyZ2V0IGlzCiAgICAvLyBbY29uc3RydWN0b3IudGFyZ2V0XS4KICAgIC8vCiAgICAvLyBUT0RPKGFoZSk6IEFkZCBhIGtlcm5lbCBub2RlIHRvIHJlcHJlc2VudCByZWRpcmVjdGluZyBmYWN0b3J5IGJvZGllcy4KICAgIERpbGxNZW1iZXJCdWlsZGVyIGNvbnN0cnVjdG9yc0ZpZWxkID0KICAgICAgICBvcmlnaW4uc2NvcGUubG9jYWwucHV0SWZBYnNlbnQoIl9yZWRpcmVjdGluZyMiLCAoKSB7CiAgICAgIExpc3RMaXRlcmFsIGxpdGVyYWwgPSBuZXcgTGlzdExpdGVyYWwoPEV4cHJlc3Npb24+W10pOwogICAgICBOYW1lIG5hbWUgPSBuZXcgTmFtZSgiX3JlZGlyZWN0aW5nIyIsIGxpYnJhcnkubGlicmFyeSk7CiAgICAgIEZpZWxkIGZpZWxkID0gbmV3IEZpZWxkKG5hbWUsCiAgICAgICAgICBpc1N0YXRpYzogdHJ1ZSwgaW5pdGlhbGl6ZXI6IGxpdGVyYWwsIGZpbGVVcmk6IGNscy5maWxlVXJpKQogICAgICAgIC4uZmlsZU9mZnNldCA9IGNscy5maWxlT2Zmc2V0OwogICAgICBjbHMuYWRkTWVtYmVyKGZpZWxkKTsKICAgICAgcmV0dXJuIG5ldyBEaWxsTWVtYmVyQnVpbGRlcihmaWVsZCwgdGhpcyk7CiAgICB9KTsKICAgIEZpZWxkIGZpZWxkID0gY29uc3RydWN0b3JzRmllbGQudGFyZ2V0OwogICAgTGlzdExpdGVyYWwgbGl0ZXJhbCA9IGZpZWxkLmluaXRpYWxpemVyOwogICAgbGl0ZXJhbC5leHByZXNzaW9ucwogICAgICAgIC5hZGQobmV3IFN0YXRpY0dldChjb25zdHJ1Y3Rvci50YXJnZXQpLi5wYXJlbnQgPSBsaXRlcmFsKTsKICB9CgogIHZvaWQgaGFuZGxlU2VlbkNvdmFyaWFudCgKICAgICAgVHlwZXMgdHlwZXMsCiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwKICAgICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciwKICAgICAgYm9vbCBpc1NldHRlciwKICAgICAgY2FsbGJhY2soTWVtYmVyIGRlY2xhcmVkTWVtYmVyLCBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzU2V0dGVyKSkgewogICAgLy8gV2hlbiBhIHBhcmFtZXRlciBpcyBjb3ZhcmlhbnQgd2UgaGF2ZSB0byBjaGVjayB0aGF0IHdlIGFsc28KICAgIC8vIG92ZXJyaWRlIHRoZSBzYW1lIG1lbWJlciBpbiBhbGwgcGFyZW50cy4KICAgIGZvciAoU3VwZXJ0eXBlIHN1cGVydHlwZSBpbiBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3Muc3VwZXJzKSB7CiAgICAgIE1lbWJlciBtID0gdHlwZXMuaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcktlcm5lbCgKICAgICAgICAgIHN1cGVydHlwZS5jbGFzc05vZGUsIGludGVyZmFjZU1lbWJlci5uYW1lLCBpc1NldHRlcik7CiAgICAgIGlmIChtICE9IG51bGwpIHsKICAgICAgICBjYWxsYmFjayhkZWNsYXJlZE1lbWJlciwgbSwgaXNTZXR0ZXIpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrT3ZlcnJpZGUoCiAgICAgIFR5cGVzIHR5cGVzLAogICAgICBNZW1iZXIgZGVjbGFyZWRNZW1iZXIsCiAgICAgIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIsCiAgICAgIGJvb2wgaXNTZXR0ZXIsCiAgICAgIGNhbGxiYWNrKE1lbWJlciBkZWNsYXJlZE1lbWJlciwgTWVtYmVyIGludGVyZmFjZU1lbWJlciwgYm9vbCBpc1NldHRlciksCiAgICAgIHtib29sIGlzSW50ZXJmYWNlQ2hlY2sgPSBmYWxzZX0pIHsKICAgIGlmIChkZWNsYXJlZE1lbWJlciA9PSBpbnRlcmZhY2VNZW1iZXIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRlY2xhcmVkTWVtYmVyIGlzIENvbnN0cnVjdG9yIHx8IGludGVyZmFjZU1lbWJlciBpcyBDb25zdHJ1Y3RvcikgewogICAgICB1bmltcGxlbWVudGVkKAogICAgICAgICAgIkNvbnN0cnVjdG9yIGluIG92ZXJyaWRlIGNoZWNrLiIsIGRlY2xhcmVkTWVtYmVyLmZpbGVPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogICAgaWYgKGRlY2xhcmVkTWVtYmVyIGlzIFByb2NlZHVyZSAmJiBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChkZWNsYXJlZE1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kICYmCiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICAgIGJvb2wgc2VlbkNvdmFyaWFudCA9IGNoZWNrTWV0aG9kT3ZlcnJpZGUoCiAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc0ludGVyZmFjZUNoZWNrKTsKICAgICAgICBpZiAoc2VlbkNvdmFyaWFudCkgewogICAgICAgICAgaGFuZGxlU2VlbkNvdmFyaWFudCgKICAgICAgICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgaXNTZXR0ZXIsIGNhbGxiYWNrKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRlY2xhcmVkTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5HZXR0ZXIgJiYKICAgICAgICAgIGludGVyZmFjZU1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuR2V0dGVyKSB7CiAgICAgICAgY2hlY2tHZXR0ZXJPdmVycmlkZSgKICAgICAgICAgICAgdHlwZXMsIGRlY2xhcmVkTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIsIGlzSW50ZXJmYWNlQ2hlY2spOwogICAgICB9CiAgICAgIGlmIChkZWNsYXJlZE1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyICYmCiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcikgewogICAgICAgIGJvb2wgc2VlbkNvdmFyaWFudCA9IGNoZWNrU2V0dGVyT3ZlcnJpZGUoCiAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc0ludGVyZmFjZUNoZWNrKTsKICAgICAgICBpZiAoc2VlbkNvdmFyaWFudCkgewogICAgICAgICAgaGFuZGxlU2VlbkNvdmFyaWFudCgKICAgICAgICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgaXNTZXR0ZXIsIGNhbGxiYWNrKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJvb2wgZGVjbGFyZWRNZW1iZXJIYXNHZXR0ZXIgPSBkZWNsYXJlZE1lbWJlciBpcyBGaWVsZCB8fAogICAgICAgICAgZGVjbGFyZWRNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGRlY2xhcmVkTWVtYmVyLmlzR2V0dGVyOwogICAgICBib29sIGludGVyZmFjZU1lbWJlckhhc0dldHRlciA9IGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCB8fAogICAgICAgICAgaW50ZXJmYWNlTWVtYmVyIGlzIFByb2NlZHVyZSAmJiBpbnRlcmZhY2VNZW1iZXIuaXNHZXR0ZXI7CiAgICAgIGJvb2wgZGVjbGFyZWRNZW1iZXJIYXNTZXR0ZXIgPSAoZGVjbGFyZWRNZW1iZXIgaXMgRmllbGQgJiYKICAgICAgICAgICAgICAhZGVjbGFyZWRNZW1iZXIuaXNGaW5hbCAmJgogICAgICAgICAgICAgICFkZWNsYXJlZE1lbWJlci5pc0NvbnN0KSB8fAogICAgICAgICAgZGVjbGFyZWRNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGRlY2xhcmVkTWVtYmVyLmlzU2V0dGVyOwogICAgICBib29sIGludGVyZmFjZU1lbWJlckhhc1NldHRlciA9IChpbnRlcmZhY2VNZW1iZXIgaXMgRmllbGQgJiYKICAgICAgICAgICAgICAhaW50ZXJmYWNlTWVtYmVyLmlzRmluYWwgJiYKICAgICAgICAgICAgICAhaW50ZXJmYWNlTWVtYmVyLmlzQ29uc3QpIHx8CiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGludGVyZmFjZU1lbWJlci5pc1NldHRlcjsKICAgICAgaWYgKGRlY2xhcmVkTWVtYmVySGFzR2V0dGVyICYmIGludGVyZmFjZU1lbWJlckhhc0dldHRlcikgewogICAgICAgIGNoZWNrR2V0dGVyT3ZlcnJpZGUoCiAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc0ludGVyZmFjZUNoZWNrKTsKICAgICAgfQogICAgICBpZiAoZGVjbGFyZWRNZW1iZXJIYXNTZXR0ZXIgJiYgaW50ZXJmYWNlTWVtYmVySGFzU2V0dGVyKSB7CiAgICAgICAgYm9vbCBzZWVuQ292YXJpYW50ID0gY2hlY2tTZXR0ZXJPdmVycmlkZSgKICAgICAgICAgICAgdHlwZXMsIGRlY2xhcmVkTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIsIGlzSW50ZXJmYWNlQ2hlY2spOwogICAgICAgIGlmIChzZWVuQ292YXJpYW50KSB7CiAgICAgICAgICBoYW5kbGVTZWVuQ292YXJpYW50KAogICAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc1NldHRlciwgY2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLy8gVE9ETyhhaGUpOiBIYW5kbGUgb3RoZXIgY2FzZXM6IGFjY2Vzc29ycywgb3BlcmF0b3JzLCBhbmQgZmllbGRzLgogIH0KCiAgdm9pZCBjaGVja092ZXJyaWRlcygKICAgICAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7fQoKICB2b2lkIGNoZWNrQWJzdHJhY3RNZW1iZXJzKENvcmVUeXBlcyBjb3JlVHlwZXMsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwKICAgICAgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkge30KCiAgYm9vbCBoYXNVc2VyRGVmaW5lZE5vU3VjaE1ldGhvZCgKICAgICAgQ2xhc3Mga2xhc3MsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwgQ2xhc3Mgb2JqZWN0Q2xhc3MpIHsKICAgIE1lbWJlciBub1N1Y2hNZXRob2QgPSBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXQoa2xhc3MsIG5vU3VjaE1ldGhvZE5hbWUpOwogICAgcmV0dXJuIG5vU3VjaE1ldGhvZCAhPSBudWxsICYmIG5vU3VjaE1ldGhvZC5lbmNsb3NpbmdDbGFzcyAhPSBvYmplY3RDbGFzczsKICB9CgogIHZvaWQgdHJhbnNmb3JtUHJvY2VkdXJlVG9Ob1N1Y2hNZXRob2RGb3J3YXJkZXIoCiAgICAgIE1lbWJlciBub1N1Y2hNZXRob2RJbnRlcmZhY2UsIEtlcm5lbFRhcmdldCB0YXJnZXQsIFByb2NlZHVyZSBwcm9jZWR1cmUpIHsKICAgIFN0cmluZyBwcmVmaXggPQogICAgICAgIHByb2NlZHVyZS5pc0dldHRlciA/ICdnZXQ6JyA6IHByb2NlZHVyZS5pc1NldHRlciA/ICdzZXQ6JyA6ICcnOwogICAgRXhwcmVzc2lvbiBpbnZvY2F0aW9uID0gdGFyZ2V0LmJhY2tlbmRUYXJnZXQuaW5zdGFudGlhdGVJbnZvY2F0aW9uKAogICAgICAgIHRhcmdldC5sb2FkZXIuY29yZVR5cGVzLAogICAgICAgIG5ldyBUaGlzRXhwcmVzc2lvbigpLAogICAgICAgIHByZWZpeCArIHByb2NlZHVyZS5uYW1lLm5hbWUsCiAgICAgICAgbmV3IEFyZ3VtZW50cy5mb3J3YXJkZWQocHJvY2VkdXJlLmZ1bmN0aW9uKSwKICAgICAgICBwcm9jZWR1cmUuZmlsZU9mZnNldCwKICAgICAgICAvKmlzU3VwZXI9Ki8gZmFsc2UpOwogICAgRXhwcmVzc2lvbiByZXN1bHQgPSBuZXcgTWV0aG9kSW52b2NhdGlvbihuZXcgVGhpc0V4cHJlc3Npb24oKSwKICAgICAgICBub1N1Y2hNZXRob2ROYW1lLCBuZXcgQXJndW1lbnRzKFtpbnZvY2F0aW9uXSksIG5vU3VjaE1ldGhvZEludGVyZmFjZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gcHJvY2VkdXJlLmZpbGVPZmZzZXQ7CiAgICBpZiAocHJvY2VkdXJlLmZ1bmN0aW9uLnJldHVyblR5cGUgaXMhIFZvaWRUeXBlKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBBc0V4cHJlc3Npb24ocmVzdWx0LCBwcm9jZWR1cmUuZnVuY3Rpb24ucmV0dXJuVHlwZSkKICAgICAgICAuLmlzVHlwZUVycm9yID0gdHJ1ZQogICAgICAgIC4uZmlsZU9mZnNldCA9IHByb2NlZHVyZS5maWxlT2Zmc2V0OwogICAgfQogICAgcHJvY2VkdXJlLmZ1bmN0aW9uLmJvZHkgPSBuZXcgUmV0dXJuU3RhdGVtZW50KHJlc3VsdCkKICAgICAgLi5maWxlT2Zmc2V0ID0gcHJvY2VkdXJlLmZpbGVPZmZzZXQ7CiAgICBwcm9jZWR1cmUuZnVuY3Rpb24uYm9keS5wYXJlbnQgPSBwcm9jZWR1cmUuZnVuY3Rpb247CgogICAgcHJvY2VkdXJlLmlzQWJzdHJhY3QgPSBmYWxzZTsKICAgIHByb2NlZHVyZS5pc05vU3VjaE1ldGhvZEZvcndhcmRlciA9IHRydWU7CiAgICBwcm9jZWR1cmUuaXNGb3J3YXJkaW5nU3R1YiA9IGZhbHNlOwogICAgcHJvY2VkdXJlLmlzRm9yd2FyZGluZ1NlbWlTdHViID0gZmFsc2U7CiAgfQoKICB2b2lkIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckZvclByb2NlZHVyZShNZW1iZXIgbm9TdWNoTWV0aG9kLAogICAgICBLZXJuZWxUYXJnZXQgdGFyZ2V0LCBQcm9jZWR1cmUgcHJvY2VkdXJlLCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHkpIHsKICAgIENsb25lV2l0aG91dEJvZHkgY2xvbmVyID0gbmV3IENsb25lV2l0aG91dEJvZHkoCiAgICAgICAgdHlwZVN1YnN0aXR1dGlvbjogdHlwZV9hbGdlYnJhLmdldFN1YnN0aXR1dGlvbk1hcCgKICAgICAgICAgICAgaGllcmFyY2h5LmdldENsYXNzQXNJbnN0YW5jZU9mKGNscywgcHJvY2VkdXJlLmVuY2xvc2luZ0NsYXNzKSksCiAgICAgICAgY2xvbmVBbm5vdGF0aW9uczogZmFsc2UpOwogICAgUHJvY2VkdXJlIGNsb25lZCA9IGNsb25lci5jbG9uZShwcm9jZWR1cmUpLi5pc0V4dGVybmFsID0gZmFsc2U7CiAgICB0cmFuc2Zvcm1Qcm9jZWR1cmVUb05vU3VjaE1ldGhvZEZvcndhcmRlcihub1N1Y2hNZXRob2QsIHRhcmdldCwgY2xvbmVkKTsKICAgIGNscy5wcm9jZWR1cmVzLmFkZChjbG9uZWQpOwogICAgY2xvbmVkLnBhcmVudCA9IGNsczsKCiAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gdGhpcy5saWJyYXJ5OwogICAgbGlicmFyeS5mb3J3YXJkZXJzT3JpZ2lucy5hZGQoY2xvbmVkKTsKICAgIGxpYnJhcnkuZm9yd2FyZGVyc09yaWdpbnMuYWRkKHByb2NlZHVyZSk7CiAgfQoKICB2b2lkIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckdldHRlckZvckZpZWxkKE1lbWJlciBub1N1Y2hNZXRob2QsCiAgICAgIEtlcm5lbFRhcmdldCB0YXJnZXQsIEZpZWxkIGZpZWxkLCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHkpIHsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZSgKICAgICAgICBoaWVyYXJjaHkuZ2V0Q2xhc3NBc0luc3RhbmNlT2YoY2xzLCBmaWVsZC5lbmNsb3NpbmdDbGFzcykpOwogICAgUHJvY2VkdXJlIGdldHRlciA9IG5ldyBQcm9jZWR1cmUoCiAgICAgICAgZmllbGQubmFtZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLkdldHRlciwKICAgICAgICBuZXcgRnVuY3Rpb25Ob2RlKG51bGwsCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdLAogICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdLAogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiAwLAogICAgICAgICAgICByZXR1cm5UeXBlOiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZmllbGQudHlwZSkpLAogICAgICAgIGZpbGVVcmk6IGZpZWxkLmZpbGVVcmkpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpZWxkLmZpbGVPZmZzZXQ7CiAgICB0cmFuc2Zvcm1Qcm9jZWR1cmVUb05vU3VjaE1ldGhvZEZvcndhcmRlcihub1N1Y2hNZXRob2QsIHRhcmdldCwgZ2V0dGVyKTsKICAgIGNscy5wcm9jZWR1cmVzLmFkZChnZXR0ZXIpOwogICAgZ2V0dGVyLnBhcmVudCA9IGNsczsKICB9CgogIHZvaWQgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyU2V0dGVyRm9yRmllbGQoTWVtYmVyIG5vU3VjaE1ldGhvZCwKICAgICAgS2VybmVsVGFyZ2V0IHRhcmdldCwgRmllbGQgZmllbGQsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tU3VwZXJ0eXBlKAogICAgICAgIGhpZXJhcmNoeS5nZXRDbGFzc0FzSW5zdGFuY2VPZihjbHMsIGZpZWxkLmVuY2xvc2luZ0NsYXNzKSk7CiAgICBQcm9jZWR1cmUgc2V0dGVyID0gbmV3IFByb2NlZHVyZSgKICAgICAgICBmaWVsZC5uYW1lLAogICAgICAgIFByb2NlZHVyZUtpbmQuU2V0dGVyLAogICAgICAgIG5ldyBGdW5jdGlvbk5vZGUobnVsbCwKICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnM6IDxUeXBlUGFyYW1ldGVyPltdLAogICAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogPFZhcmlhYmxlRGVjbGFyYXRpb24+WwogICAgICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKCJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShmaWVsZC50eXBlKSkKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXSwKICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogMSwKICAgICAgICAgICAgcmV0dXJuVHlwZTogY29uc3QgVm9pZFR5cGUoKSksCiAgICAgICAgZmlsZVVyaTogZmllbGQuZmlsZVVyaSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZmllbGQuZmlsZU9mZnNldDsKICAgIHRyYW5zZm9ybVByb2NlZHVyZVRvTm9TdWNoTWV0aG9kRm9yd2FyZGVyKG5vU3VjaE1ldGhvZCwgdGFyZ2V0LCBzZXR0ZXIpOwogICAgY2xzLnByb2NlZHVyZXMuYWRkKHNldHRlcik7CiAgICBzZXR0ZXIucGFyZW50ID0gY2xzOwogIH0KCiAgLy8vIEFkZHMgbm9TdWNoTWV0aG9kIGZvcndhcmRpbmcgc3R1YnMgdG8gdGhpcyBjbGFzcy4gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlCiAgLy8vIGNsYXNzIHdhcyBtb2RpZmllZC4KICBib29sIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlcnMoCiAgICAgIEtlcm5lbFRhcmdldCB0YXJnZXQsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgaWYgKGNscy5pc0Fic3RyYWN0KSByZXR1cm4gZmFsc2U7CgogICAgU2V0PE5hbWU+IGV4aXN0aW5nRm9yd2FyZGVyc05hbWVzID0gbmV3IFNldDxOYW1lPigpOwogICAgU2V0PE5hbWU+IGV4aXN0aW5nU2V0dGVyRm9yd2FyZGVyc05hbWVzID0gbmV3IFNldDxOYW1lPigpOwogICAgQ2xhc3MgbGVhc3RDb25jcmV0ZVN1cGVyY2xhc3MgPSBjbHMuc3VwZXJjbGFzczsKICAgIHdoaWxlICgKICAgICAgICBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcyAhPSBudWxsICYmIGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzLmlzQWJzdHJhY3QpIHsKICAgICAgbGVhc3RDb25jcmV0ZVN1cGVyY2xhc3MgPSBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcy5zdXBlcmNsYXNzOwogICAgfQogICAgaWYgKGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzICE9IG51bGwpIHsKICAgICAgYm9vbCBzdXBlckhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kID0gaGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2QoCiAgICAgICAgICBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcywgaGllcmFyY2h5LCB0YXJnZXQub2JqZWN0Q2xhc3MpOwogICAgICBMaXN0PE1lbWJlcj4gY29uY3JldGUgPQogICAgICAgICAgaGllcmFyY2h5LmdldERpc3BhdGNoVGFyZ2V0cyhsZWFzdENvbmNyZXRlU3VwZXJjbGFzcyk7CiAgICAgIGZvciAoTWVtYmVyIG1lbWJlcgogICAgICAgICAgaW4gaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcnMobGVhc3RDb25jcmV0ZVN1cGVyY2xhc3MpKSB7CiAgICAgICAgaWYgKChzdXBlckhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kIHx8CiAgICAgICAgICAgICAgICBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcy5lbmNsb3NpbmdMaWJyYXJ5LmNvbXBhcmVUbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlci5lbmNsb3NpbmdDbGFzcy5lbmNsb3NpbmdMaWJyYXJ5KSAhPQogICAgICAgICAgICAgICAgICAgICAgICAwICYmCiAgICAgICAgICAgICAgICAgICAgbWVtYmVyLm5hbWUuaXNQcml2YXRlKSAmJgogICAgICAgICAgICBDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGNvbmNyZXRlLCBtZW1iZXIubmFtZSkgPT0gbnVsbCkgewogICAgICAgICAgZXhpc3RpbmdGb3J3YXJkZXJzTmFtZXMuYWRkKG1lbWJlci5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIExpc3Q8TWVtYmVyPiBjb25jcmV0ZVNldHRlcnMgPQogICAgICAgICAgaGllcmFyY2h5LmdldERpc3BhdGNoVGFyZ2V0cyhsZWFzdENvbmNyZXRlU3VwZXJjbGFzcywgc2V0dGVyczogdHJ1ZSk7CiAgICAgIGZvciAoTWVtYmVyIG1lbWJlciBpbiBoaWVyYXJjaHkKICAgICAgICAgIC5nZXRJbnRlcmZhY2VNZW1iZXJzKGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzLCBzZXR0ZXJzOiB0cnVlKSkgewogICAgICAgIGlmIChDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGNvbmNyZXRlU2V0dGVycywgbWVtYmVyLm5hbWUpID09CiAgICAgICAgICAgIG51bGwpIHsKICAgICAgICAgIGV4aXN0aW5nU2V0dGVyRm9yd2FyZGVyc05hbWVzLmFkZChtZW1iZXIubmFtZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTWVtYmVyIG5vU3VjaE1ldGhvZCA9IENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoCiAgICAgICAgaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcnMoY2xzKSwgbm9TdWNoTWV0aG9kTmFtZSk7CgogICAgTGlzdDxNZW1iZXI+IGNvbmNyZXRlID0gaGllcmFyY2h5LmdldERpc3BhdGNoVGFyZ2V0cyhjbHMpOwogICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkID0gaGllcmFyY2h5LmdldERlY2xhcmVkTWVtYmVycyhjbHMpOwoKICAgIGJvb2wgY2xzSGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2QgPQogICAgICAgIGhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kKGNscywgaGllcmFyY2h5LCB0YXJnZXQub2JqZWN0Q2xhc3MpOwogICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICBmb3IgKE1lbWJlciBtZW1iZXIgaW4gaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcnMoY2xzKSkgewogICAgICAvLyBXZSBnZW5lcmF0ZSBhIG5vU3VjaE1ldGhvZCBmb3J3YXJkZXIgZm9yIFttZW1iZXJdIGluIFtjbHNdIGlmIHRoZQogICAgICAvLyBmb2xsb3dpbmcgdGhyZWUgY29uZGl0aW9ucyBhcmUgc2F0aXNmaWVkIHNpbXVsdGFuZW91c2x5OgogICAgICAvLyAxKSBUaGVyZSBpcyBhIHVzZXItZGVmaW5lZCBub1N1Y2hNZXRob2QgaW4gW2Nsc10gb3IgW21lbWJlcl0gaXMgcHJpdmF0ZQogICAgICAvLyAgICBhbmQgdGhlIGVuY2xvc2luZyBsaWJyYXJ5IG9mIFttZW1iZXJdIGlzIGRpZmZlcmVudCBmcm9tIHRoYXQgb2YKICAgICAgLy8gICAgW2Nsc10uCiAgICAgIC8vIDIpIFRoZXJlIGlzIG5vIGltcGxlbWVudGF0aW9uIG9mIFttZW1iZXJdIGluIFtjbHNdLgogICAgICAvLyAzKSBUaGUgc3VwZXJjbGFzcyBvZiBbY2xzXSBoYXMgbm8gZm9yd2FyZGVyIGZvciBbbWVtYmVyXS4KICAgICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgIChjbHNIYXNVc2VyRGVmaW5lZE5vU3VjaE1ldGhvZCB8fAogICAgICAgICAgICAgIGNscy5lbmNsb3NpbmdMaWJyYXJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbXBhcmVUbyhtZW1iZXIuZW5jbG9zaW5nQ2xhc3MuZW5jbG9zaW5nTGlicmFyeSkgIT0KICAgICAgICAgICAgICAgICAgICAgIDAgJiYKICAgICAgICAgICAgICAgICAgbWVtYmVyLm5hbWUuaXNQcml2YXRlKSAmJgogICAgICAgICAgQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZShjb25jcmV0ZSwgbWVtYmVyLm5hbWUpID09IG51bGwgJiYKICAgICAgICAgICFleGlzdGluZ0ZvcndhcmRlcnNOYW1lcy5jb250YWlucyhtZW1iZXIubmFtZSkpIHsKICAgICAgICBpZiAoQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZShkZWNsYXJlZCwgbWVtYmVyLm5hbWUpICE9IG51bGwpIHsKICAgICAgICAgIHRyYW5zZm9ybVByb2NlZHVyZVRvTm9TdWNoTWV0aG9kRm9yd2FyZGVyKAogICAgICAgICAgICAgIG5vU3VjaE1ldGhvZCwgdGFyZ2V0LCBtZW1iZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhZGROb1N1Y2hNZXRob2RGb3J3YXJkZXJGb3JQcm9jZWR1cmUoCiAgICAgICAgICAgICAgbm9TdWNoTWV0aG9kLCB0YXJnZXQsIG1lbWJlciwgaGllcmFyY2h5KTsKICAgICAgICB9CiAgICAgICAgZXhpc3RpbmdGb3J3YXJkZXJzTmFtZXMuYWRkKG1lbWJlci5uYW1lKTsKICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgaWYgKG1lbWJlciBpcyBGaWVsZCAmJgogICAgICAgICAgQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZShjb25jcmV0ZSwgbWVtYmVyLm5hbWUpID09IG51bGwgJiYKICAgICAgICAgICFleGlzdGluZ0ZvcndhcmRlcnNOYW1lcy5jb250YWlucyhtZW1iZXIubmFtZSkpIHsKICAgICAgICBhZGROb1N1Y2hNZXRob2RGb3J3YXJkZXJHZXR0ZXJGb3JGaWVsZCgKICAgICAgICAgICAgbm9TdWNoTWV0aG9kLCB0YXJnZXQsIG1lbWJlciwgaGllcmFyY2h5KTsKICAgICAgICBleGlzdGluZ0ZvcndhcmRlcnNOYW1lcy5hZGQobWVtYmVyLm5hbWUpOwogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgTGlzdDxNZW1iZXI+IGNvbmNyZXRlU2V0dGVycyA9CiAgICAgICAgaGllcmFyY2h5LmdldERpc3BhdGNoVGFyZ2V0cyhjbHMsIHNldHRlcnM6IHRydWUpOwogICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkU2V0dGVycyA9CiAgICAgICAgaGllcmFyY2h5LmdldERlY2xhcmVkTWVtYmVycyhjbHMsIHNldHRlcnM6IHRydWUpOwogICAgZm9yIChNZW1iZXIgbWVtYmVyIGluIGhpZXJhcmNoeS5nZXRJbnRlcmZhY2VNZW1iZXJzKGNscywgc2V0dGVyczogdHJ1ZSkpIHsKICAgICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgIENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoY29uY3JldGVTZXR0ZXJzLCBtZW1iZXIubmFtZSkgPT0KICAgICAgICAgICAgICBudWxsICYmCiAgICAgICAgICAhZXhpc3RpbmdTZXR0ZXJGb3J3YXJkZXJzTmFtZXMuY29udGFpbnMobWVtYmVyLm5hbWUpKSB7CiAgICAgICAgaWYgKENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoZGVjbGFyZWRTZXR0ZXJzLCBtZW1iZXIubmFtZSkgIT0KICAgICAgICAgICAgbnVsbCkgewogICAgICAgICAgdHJhbnNmb3JtUHJvY2VkdXJlVG9Ob1N1Y2hNZXRob2RGb3J3YXJkZXIoCiAgICAgICAgICAgICAgbm9TdWNoTWV0aG9kLCB0YXJnZXQsIG1lbWJlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckZvclByb2NlZHVyZSgKICAgICAgICAgICAgICBub1N1Y2hNZXRob2QsIHRhcmdldCwgbWVtYmVyLCBoaWVyYXJjaHkpOwogICAgICAgIH0KICAgICAgICBleGlzdGluZ1NldHRlckZvcndhcmRlcnNOYW1lcy5hZGQobWVtYmVyLm5hbWUpOwogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChtZW1iZXIgaXMgRmllbGQgJiYKICAgICAgICAgIENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoY29uY3JldGVTZXR0ZXJzLCBtZW1iZXIubmFtZSkgPT0KICAgICAgICAgICAgICBudWxsICYmCiAgICAgICAgICAhZXhpc3RpbmdTZXR0ZXJGb3J3YXJkZXJzTmFtZXMuY29udGFpbnMobWVtYmVyLm5hbWUpKSB7CiAgICAgICAgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyU2V0dGVyRm9yRmllbGQoCiAgICAgICAgICAgIG5vU3VjaE1ldGhvZCwgdGFyZ2V0LCBtZW1iZXIsIGhpZXJhcmNoeSk7CiAgICAgICAgZXhpc3RpbmdTZXR0ZXJGb3J3YXJkZXJzTmFtZXMuYWRkKG1lbWJlci5uYW1lKTsKICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBjaGFuZ2VkOwogIH0KCiAgVXJpIF9nZXRNZW1iZXJVcmkoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBGaWVsZCkgcmV0dXJuIG1lbWJlci5maWxlVXJpOwogICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHJldHVybiBtZW1iZXIuZmlsZVVyaTsKICAgIC8vIE90aGVyIG1lbWJlciB0eXBlcyB3b24ndCBiZSBzZWVuIGJlY2F1c2UgY29uc3RydWN0b3JzIGRvbid0IHBhcnRpY2lwYXRlCiAgICAvLyBpbiBvdmVycmlkZSByZWxhdGlvbnNoaXBzCiAgICByZXR1cm4gdW5oYW5kbGVkKCcke21lbWJlci5ydW50aW1lVHlwZX0nLCAnX2dldE1lbWJlclVyaScsIC0xLCBudWxsKTsKICB9CgogIFN1YnN0aXR1dGlvbiBfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbigKICAgICAgVHlwZXMgdHlwZXMsCiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwKICAgICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciwKICAgICAgRnVuY3Rpb25Ob2RlIGRlY2xhcmVkRnVuY3Rpb24sCiAgICAgIEZ1bmN0aW9uTm9kZSBpbnRlcmZhY2VGdW5jdGlvbiwKICAgICAgYm9vbCBpc0ludGVyZmFjZUNoZWNrKSB7CiAgICBTdWJzdGl0dXRpb24gaW50ZXJmYWNlU3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmVtcHR5OwogICAgaWYgKGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSh0eXBlcy5oaWVyYXJjaHkKICAgICAgICAgIC5nZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKAogICAgICAgICAgICAgIGNscy50aGlzVHlwZSwgaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzKSk7CiAgICB9CiAgICBpZiAoZGVjbGFyZWRGdW5jdGlvbj8udHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCAhPQogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uPy50eXBlUGFyYW1ldGVycz8ubGVuZ3RoKSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2gud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oX2dldE1lbWJlclVyaShpbnRlcmZhY2VNZW1iZXIpLAogICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgXSArCiAgICAgICAgICAgICAgaW5oZXJpdGVkQ29udGV4dChpc0ludGVyZmFjZUNoZWNrLCBkZWNsYXJlZE1lbWJlcikpOwogICAgfSBlbHNlIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQubGVnYWN5TW9kZSAmJgogICAgICAgIGRlY2xhcmVkRnVuY3Rpb24/LnR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb25NYXAgPQogICAgICAgICAgPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2xhcmVkRnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICBzdWJzdGl0dXRpb25NYXBbaW50ZXJmYWNlRnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV1dID0KICAgICAgICAgICAgbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGRlY2xhcmVkRnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV0pOwogICAgICB9CiAgICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbU1hcChzdWJzdGl0dXRpb25NYXApOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2xhcmVkRnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICBUeXBlUGFyYW1ldGVyIGRlY2xhcmVkUGFyYW1ldGVyID0gZGVjbGFyZWRGdW5jdGlvbi50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICBUeXBlUGFyYW1ldGVyIGludGVyZmFjZVBhcmFtZXRlciA9IGludGVyZmFjZUZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIGlmICghaW50ZXJmYWNlUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIERhcnRUeXBlIGRlY2xhcmVkQm91bmQgPSBkZWNsYXJlZFBhcmFtZXRlci5ib3VuZDsKICAgICAgICAgIERhcnRUeXBlIGludGVyZmFjZUJvdW5kID0gaW50ZXJmYWNlUGFyYW1ldGVyLmJvdW5kOwogICAgICAgICAgaWYgKGludGVyZmFjZVN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgIGRlY2xhcmVkQm91bmQgPSBpbnRlcmZhY2VTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZGVjbGFyZWRCb3VuZCk7CiAgICAgICAgICAgIGludGVyZmFjZUJvdW5kID0KICAgICAgICAgICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShpbnRlcmZhY2VCb3VuZCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZGVjbGFyZWRCb3VuZCAhPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlQm91bmQpKSB7CiAgICAgICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2gud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oX2dldE1lbWJlclVyaShpbnRlcmZhY2VNZW1iZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgXSArCiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkQ29udGV4dChpc0ludGVyZmFjZUNoZWNrLCBkZWNsYXJlZE1lbWJlcikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpbnRlcmZhY2VTdWJzdGl0dXRpb24gPQogICAgICAgICAgU3Vic3RpdHV0aW9uLmNvbWJpbmUoaW50ZXJmYWNlU3Vic3RpdHV0aW9uLCBzdWJzdGl0dXRpb24pOwogICAgfQogICAgcmV0dXJuIGludGVyZmFjZVN1YnN0aXR1dGlvbjsKICB9CgogIFN1YnN0aXR1dGlvbiBfY29tcHV0ZURlY2xhcmVkU3Vic3RpdHV0aW9uKAogICAgICBUeXBlcyB0eXBlcywgTWVtYmVyIGRlY2xhcmVkTWVtYmVyKSB7CiAgICBTdWJzdGl0dXRpb24gZGVjbGFyZWRTdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZW1wdHk7CiAgICBpZiAoZGVjbGFyZWRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSh0eXBlcy5oaWVyYXJjaHkKICAgICAgICAgIC5nZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKAogICAgICAgICAgICAgIGNscy50aGlzVHlwZSwgZGVjbGFyZWRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MpKTsKICAgIH0KICAgIHJldHVybiBkZWNsYXJlZFN1YnN0aXR1dGlvbjsKICB9CgogIHZvaWQgX2NoZWNrVHlwZXMoCiAgICAgIFR5cGVzIHR5cGVzLAogICAgICBTdWJzdGl0dXRpb24gaW50ZXJmYWNlU3Vic3RpdHV0aW9uLAogICAgICBTdWJzdGl0dXRpb24gZGVjbGFyZWRTdWJzdGl0dXRpb24sCiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwKICAgICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciwKICAgICAgRGFydFR5cGUgZGVjbGFyZWRUeXBlLAogICAgICBEYXJ0VHlwZSBpbnRlcmZhY2VUeXBlLAogICAgICBib29sIGlzQ292YXJpYW50LAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmVkUGFyYW1ldGVyLAogICAgICBib29sIGlzSW50ZXJmYWNlQ2hlY2ssCiAgICAgIHtib29sIGFzSWZEZWNsYXJlZFBhcmFtZXRlciA9IGZhbHNlfSkgewogICAgaWYgKGxpYnJhcnkubG9hZGVyLnRhcmdldC5iYWNrZW5kVGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKCiAgICBpZiAoaW50ZXJmYWNlU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgaW50ZXJmYWNlVHlwZSA9IGludGVyZmFjZVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShpbnRlcmZhY2VUeXBlKTsKICAgIH0KICAgIGlmIChkZWNsYXJlZFN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgIGRlY2xhcmVkVHlwZSA9IGRlY2xhcmVkU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGRlY2xhcmVkVHlwZSk7CiAgICB9CgogICAgYm9vbCBpblBhcmFtZXRlciA9IGRlY2xhcmVkUGFyYW1ldGVyICE9IG51bGwgfHwgYXNJZkRlY2xhcmVkUGFyYW1ldGVyOwogICAgRGFydFR5cGUgc3VidHlwZSA9IGluUGFyYW1ldGVyID8gaW50ZXJmYWNlVHlwZSA6IGRlY2xhcmVkVHlwZTsKICAgIERhcnRUeXBlIHN1cGVydHlwZSA9IGluUGFyYW1ldGVyID8gZGVjbGFyZWRUeXBlIDogaW50ZXJmYWNlVHlwZTsKCiAgICBpZiAodHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoc3VidHlwZSwgc3VwZXJ0eXBlKSkgewogICAgICAvLyBObyBwcm9ibGVtLS10aGUgcHJvcGVyIHN1YnR5cGluZyByZWxhdGlvbiBpcyBzYXRpc2ZpZWQuCiAgICB9IGVsc2UgaWYgKGlzQ292YXJpYW50ICYmIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHN1cGVydHlwZSwgc3VidHlwZSkpIHsKICAgICAgLy8gTm8gcHJvYmxlbS0tdGhlIG92ZXJyaWRpbmcgcGFyYW1ldGVyIGlzIG1hcmtlZCAiY292YXJpYW50IiBhbmQgaGFzCiAgICAgIC8vIGEgdHlwZSB3aGljaCBpcyBhIHN1YnR5cGUgb2YgdGhlIHBhcmFtZXRlciBpdCBvdmVycmlkZXMuCiAgICB9IGVsc2UgaWYgKHN1YnR5cGUgaXMgSW52YWxpZFR5cGUgfHwgc3VwZXJ0eXBlIGlzIEludmFsaWRUeXBlKSB7CiAgICAgIC8vIERvbid0IHJlcG9ydCBhIHByb2JsZW0gYXMgc29tZXRoaW5nIGVsc2UgaXMgd3JvbmcgdGhhdCBoYXMgYWxyZWFkeQogICAgICAvLyBiZWVuIHJlcG9ydGVkLgogICAgfSBlbHNlIHsKICAgICAgLy8gUmVwb3J0IGFuIGVycm9yLgogICAgICBTdHJpbmcgZGVjbGFyZWRNZW1iZXJOYW1lID0KICAgICAgICAgICcke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7ZGVjbGFyZWRNZW1iZXIubmFtZS5uYW1lfSc7CiAgICAgIFN0cmluZyBpbnRlcmZhY2VNZW1iZXJOYW1lID0KICAgICAgICAgICcke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9JzsKICAgICAgTWVzc2FnZSBtZXNzYWdlOwogICAgICBpbnQgZmlsZU9mZnNldDsKICAgICAgaWYgKGRlY2xhcmVkUGFyYW1ldGVyID09IG51bGwpIHsKICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgZGVjbGFyZWRNZW1iZXJOYW1lLAogICAgICAgICAgICBkZWNsYXJlZFR5cGUsCiAgICAgICAgICAgIGludGVyZmFjZVR5cGUsCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlck5hbWUpOwogICAgICAgIGZpbGVPZmZzZXQgPSBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0OwogICAgICB9IGVsc2UgewogICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgIGRlY2xhcmVkUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgIGRlY2xhcmVkTWVtYmVyTmFtZSwKICAgICAgICAgICAgZGVjbGFyZWRUeXBlLAogICAgICAgICAgICBpbnRlcmZhY2VUeXBlLAogICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXJOYW1lKTsKICAgICAgICBmaWxlT2Zmc2V0ID0gZGVjbGFyZWRQYXJhbWV0ZXIuZmlsZU9mZnNldDsKICAgICAgfQogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgZmlsZU9mZnNldCwgbm9MZW5ndGgsIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZQogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihfZ2V0TWVtYmVyVXJpKGludGVyZmFjZU1lbWJlciksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIGEgY292YXJpYW50IHBhcmFtZXRlciB3YXMgc2VlbiBhbmQgbW9yZSBtZXRob2RzIHRodXMgaGF2ZQogIC8vLyB0byBiZSBjaGVja2VkLgogIGJvb2wgY2hlY2tNZXRob2RPdmVycmlkZShUeXBlcyB0eXBlcywgUHJvY2VkdXJlIGRlY2xhcmVkTWVtYmVyLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzSW50ZXJmYWNlQ2hlY2spIHsKICAgIGFzc2VydChkZWNsYXJlZE1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kKTsKICAgIGFzc2VydChpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCk7CiAgICBib29sIHNlZW5Db3ZhcmlhbnQgPSBmYWxzZTsKICAgIEZ1bmN0aW9uTm9kZSBkZWNsYXJlZEZ1bmN0aW9uID0gZGVjbGFyZWRNZW1iZXIuZnVuY3Rpb247CiAgICBGdW5jdGlvbk5vZGUgaW50ZXJmYWNlRnVuY3Rpb24gPSBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb247CgogICAgU3Vic3RpdHV0aW9uIGludGVyZmFjZVN1YnN0aXR1dGlvbiA9IF9jb21wdXRlSW50ZXJmYWNlU3Vic3RpdHV0aW9uKAogICAgICAgIHR5cGVzLAogICAgICAgIGRlY2xhcmVkTWVtYmVyLAogICAgICAgIGludGVyZmFjZU1lbWJlciwKICAgICAgICBkZWNsYXJlZEZ1bmN0aW9uLAogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uLAogICAgICAgIGlzSW50ZXJmYWNlQ2hlY2spOwoKICAgIFN1YnN0aXR1dGlvbiBkZWNsYXJlZFN1YnN0aXR1dGlvbiA9CiAgICAgICAgX2NvbXB1dGVEZWNsYXJlZFN1YnN0aXR1dGlvbih0eXBlcywgZGVjbGFyZWRNZW1iZXIpOwoKICAgIF9jaGVja1R5cGVzKAogICAgICAgIHR5cGVzLAogICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZE1lbWJlciwKICAgICAgICBpbnRlcmZhY2VNZW1iZXIsCiAgICAgICAgZGVjbGFyZWRGdW5jdGlvbi5yZXR1cm5UeXBlLAogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uLnJldHVyblR5cGUsCiAgICAgICAgZmFsc2UsCiAgICAgICAgbnVsbCwKICAgICAgICBpc0ludGVyZmFjZUNoZWNrKTsKICAgIGlmIChkZWNsYXJlZEZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCA8CiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oaW50ZXJmYWNlTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICB9CiAgICBpZiAoaW50ZXJmYWNlRnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA8CiAgICAgICAgZGVjbGFyZWRGdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oaW50ZXJmYWNlTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsKICAgICAgICBpIDwgZGVjbGFyZWRGdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggJiYKICAgICAgICAgICAgaSA8IGludGVyZmFjZUZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICBpKyspIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsYXJlZFBhcmFtZXRlciA9CiAgICAgICAgICBkZWNsYXJlZEZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGludGVyZmFjZVBhcmFtZXRlciA9CiAgICAgICAgICBpbnRlcmZhY2VGdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgX2NoZWNrVHlwZXMoCiAgICAgICAgICB0eXBlcywKICAgICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiwKICAgICAgICAgIGRlY2xhcmVkU3Vic3RpdHV0aW9uLAogICAgICAgICAgZGVjbGFyZWRNZW1iZXIsCiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIsCiAgICAgICAgICBkZWNsYXJlZFBhcmFtZXRlci50eXBlLAogICAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0udHlwZSwKICAgICAgICAgIGRlY2xhcmVkUGFyYW1ldGVyLmlzQ292YXJpYW50IHx8IGludGVyZmFjZVBhcmFtZXRlci5pc0NvdmFyaWFudCwKICAgICAgICAgIGRlY2xhcmVkUGFyYW1ldGVyLAogICAgICAgICAgaXNJbnRlcmZhY2VDaGVjayk7CiAgICAgIGlmIChkZWNsYXJlZFBhcmFtZXRlci5pc0NvdmFyaWFudCkgc2VlbkNvdmFyaWFudCA9IHRydWU7CiAgICB9CiAgICBpZiAoZGVjbGFyZWRGdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMuaXNFbXB0eSAmJgogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBzZWVuQ292YXJpYW50OwogICAgfQogICAgaWYgKGRlY2xhcmVkRnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCA8CiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cy53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7ZGVjbGFyZWRNZW1iZXIubmFtZS5uYW1lfSIsCiAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZX0iKSwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZQogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihpbnRlcmZhY2VNZW1iZXIuZmlsZVVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgICAgIF0gKwogICAgICAgICAgICAgIGluaGVyaXRlZENvbnRleHQoaXNJbnRlcmZhY2VDaGVjaywgZGVjbGFyZWRNZW1iZXIpKTsKICAgIH0KICAgIGludCBjb21wYXJlTmFtZWRQYXJhbWV0ZXJzKFZhcmlhYmxlRGVjbGFyYXRpb24gcDAsIFZhcmlhYmxlRGVjbGFyYXRpb24gcDEpIHsKICAgICAgcmV0dXJuIHAwLm5hbWUuY29tcGFyZVRvKHAxLm5hbWUpOwogICAgfQoKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gc29ydGVkRnJvbURlY2xhcmVkID0KICAgICAgICBuZXcgTGlzdC5mcm9tKGRlY2xhcmVkRnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKQogICAgICAgICAgLi5zb3J0KGNvbXBhcmVOYW1lZFBhcmFtZXRlcnMpOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBzb3J0ZWRGcm9tSW50ZXJmYWNlID0KICAgICAgICBuZXcgTGlzdC5mcm9tKGludGVyZmFjZUZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykKICAgICAgICAgIC4uc29ydChjb21wYXJlTmFtZWRQYXJhbWV0ZXJzKTsKICAgIEl0ZXJhdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+IGRlY2xhcmVkTmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICBzb3J0ZWRGcm9tRGVjbGFyZWQuaXRlcmF0b3I7CiAgICBJdGVyYXRvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiBpbnRlcmZhY2VOYW1lZFBhcmFtZXRlcnMgPQogICAgICAgIHNvcnRlZEZyb21JbnRlcmZhY2UuaXRlcmF0b3I7CiAgICBvdXRlcjoKICAgIHdoaWxlIChkZWNsYXJlZE5hbWVkUGFyYW1ldGVycy5tb3ZlTmV4dCgpICYmCiAgICAgICAgaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzLm1vdmVOZXh0KCkpIHsKICAgICAgd2hpbGUgKGRlY2xhcmVkTmFtZWRQYXJhbWV0ZXJzLmN1cnJlbnQubmFtZSAhPQogICAgICAgICAgaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzLmN1cnJlbnQubmFtZSkgewogICAgICAgIGlmICghZGVjbGFyZWROYW1lZFBhcmFtZXRlcnMubW92ZU5leHQoKSkgewogICAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lZFBhcmFtZXRlcnMuY3VycmVudC5uYW1lLAogICAgICAgICAgICAgICAgICAiJHtpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MubmFtZX0uIgogICAgICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZX0iKSwKICAgICAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGRlbk1ldGhvZENhdXNlCiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oaW50ZXJmYWNlTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgICAgIF0gKwogICAgICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICAgICAgICBicmVhayBvdXRlcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsYXJlZFBhcmFtZXRlciA9IGRlY2xhcmVkTmFtZWRQYXJhbWV0ZXJzLmN1cnJlbnQ7CiAgICAgIF9jaGVja1R5cGVzKAogICAgICAgICAgdHlwZXMsCiAgICAgICAgICBpbnRlcmZhY2VTdWJzdGl0dXRpb24sCiAgICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLAogICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLAogICAgICAgICAgZGVjbGFyZWRQYXJhbWV0ZXIudHlwZSwKICAgICAgICAgIGludGVyZmFjZU5hbWVkUGFyYW1ldGVycy5jdXJyZW50LnR5cGUsCiAgICAgICAgICBkZWNsYXJlZFBhcmFtZXRlci5pc0NvdmFyaWFudCwKICAgICAgICAgIGRlY2xhcmVkUGFyYW1ldGVyLAogICAgICAgICAgaXNJbnRlcmZhY2VDaGVjayk7CiAgICAgIGlmIChkZWNsYXJlZFBhcmFtZXRlci5pc0NvdmFyaWFudCkgc2VlbkNvdmFyaWFudCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gc2VlbkNvdmFyaWFudDsKICB9CgogIHZvaWQgY2hlY2tHZXR0ZXJPdmVycmlkZShUeXBlcyB0eXBlcywgTWVtYmVyIGRlY2xhcmVkTWVtYmVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzSW50ZXJmYWNlQ2hlY2spIHsKICAgIFN1YnN0aXR1dGlvbiBpbnRlcmZhY2VTdWJzdGl0dXRpb24gPSBfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbigKICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgbnVsbCwgbnVsbCwgaXNJbnRlcmZhY2VDaGVjayk7CiAgICBTdWJzdGl0dXRpb24gZGVjbGFyZWRTdWJzdGl0dXRpb24gPQogICAgICAgIF9jb21wdXRlRGVjbGFyZWRTdWJzdGl0dXRpb24odHlwZXMsIGRlY2xhcmVkTWVtYmVyKTsKICAgIERhcnRUeXBlIGRlY2xhcmVkVHlwZSA9IGRlY2xhcmVkTWVtYmVyLmdldHRlclR5cGU7CiAgICBEYXJ0VHlwZSBpbnRlcmZhY2VUeXBlID0gaW50ZXJmYWNlTWVtYmVyLmdldHRlclR5cGU7CiAgICBfY2hlY2tUeXBlcygKICAgICAgICB0eXBlcywKICAgICAgICBpbnRlcmZhY2VTdWJzdGl0dXRpb24sCiAgICAgICAgZGVjbGFyZWRTdWJzdGl0dXRpb24sCiAgICAgICAgZGVjbGFyZWRNZW1iZXIsCiAgICAgICAgaW50ZXJmYWNlTWVtYmVyLAogICAgICAgIGRlY2xhcmVkVHlwZSwKICAgICAgICBpbnRlcmZhY2VUeXBlLAogICAgICAgIGZhbHNlLAogICAgICAgIG51bGwsCiAgICAgICAgaXNJbnRlcmZhY2VDaGVjayk7CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIGEgY292YXJpYW50IHBhcmFtZXRlciB3YXMgc2VlbiBhbmQgbW9yZSBtZXRob2RzIHRodXMgaGF2ZQogIC8vLyB0byBiZSBjaGVja2VkLgogIGJvb2wgY2hlY2tTZXR0ZXJPdmVycmlkZShUeXBlcyB0eXBlcywgTWVtYmVyIGRlY2xhcmVkTWVtYmVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzSW50ZXJmYWNlQ2hlY2spIHsKICAgIFN1YnN0aXR1dGlvbiBpbnRlcmZhY2VTdWJzdGl0dXRpb24gPSBfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbigKICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgbnVsbCwgbnVsbCwgaXNJbnRlcmZhY2VDaGVjayk7CiAgICBTdWJzdGl0dXRpb24gZGVjbGFyZWRTdWJzdGl0dXRpb24gPQogICAgICAgIF9jb21wdXRlRGVjbGFyZWRTdWJzdGl0dXRpb24odHlwZXMsIGRlY2xhcmVkTWVtYmVyKTsKICAgIERhcnRUeXBlIGRlY2xhcmVkVHlwZSA9IGRlY2xhcmVkTWVtYmVyLnNldHRlclR5cGU7CiAgICBEYXJ0VHlwZSBpbnRlcmZhY2VUeXBlID0gaW50ZXJmYWNlTWVtYmVyLnNldHRlclR5cGU7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmVkUGFyYW1ldGVyID0KICAgICAgICBkZWNsYXJlZE1lbWJlci5mdW5jdGlvbj8ucG9zaXRpb25hbFBhcmFtZXRlcnM/LmVsZW1lbnRBdCgwKTsKICAgIGJvb2wgaXNDb3ZhcmlhbnQgPSBkZWNsYXJlZFBhcmFtZXRlcj8uaXNDb3ZhcmlhbnQgPz8gZmFsc2U7CiAgICBpZiAoIWlzQ292YXJpYW50ICYmIGRlY2xhcmVkTWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIGlzQ292YXJpYW50ID0gZGVjbGFyZWRNZW1iZXIuaXNDb3ZhcmlhbnQ7CiAgICB9CiAgICBpZiAoIWlzQ292YXJpYW50ICYmIGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCkgewogICAgICBpc0NvdmFyaWFudCA9IGludGVyZmFjZU1lbWJlci5pc0NvdmFyaWFudDsKICAgIH0KICAgIF9jaGVja1R5cGVzKAogICAgICAgIHR5cGVzLAogICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZE1lbWJlciwKICAgICAgICBpbnRlcmZhY2VNZW1iZXIsCiAgICAgICAgZGVjbGFyZWRUeXBlLAogICAgICAgIGludGVyZmFjZVR5cGUsCiAgICAgICAgaXNDb3ZhcmlhbnQsCiAgICAgICAgZGVjbGFyZWRQYXJhbWV0ZXIsCiAgICAgICAgaXNJbnRlcmZhY2VDaGVjaywKICAgICAgICBhc0lmRGVjbGFyZWRQYXJhbWV0ZXI6IHRydWUpOwogICAgcmV0dXJuIGlzQ292YXJpYW50OwogIH0KCiAgLy8gRXh0cmEgY29udGV4dCBvbiBvdmVycmlkZSBtZXNzYWdlcyB3aGVuIHRoZSBvdmVycmlkaW5nIG1lbWJlciBpcyBpbmhlcml0ZWQKICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBpbmhlcml0ZWRDb250ZXh0KAogICAgICBib29sIGlzSW50ZXJmYWNlQ2hlY2ssIE1lbWJlciBkZWNsYXJlZE1lbWJlcikgewogICAgaWYgKGRlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IGNscykgewogICAgICAvLyBPcmRpbmFyeSBvdmVycmlkZQogICAgICByZXR1cm4gY29uc3QgW107CiAgICB9CiAgICBpZiAoaXNJbnRlcmZhY2VDaGVjaykgewogICAgICAvLyBJbnRlcmZhY2UgY2hlY2sKICAgICAgcmV0dXJuIFsKICAgICAgICB0ZW1wbGF0ZUludGVyZmFjZUNoZWNrQ29udGV4dAogICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhjbHMubmFtZSkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbihjbHMuZmlsZVVyaSwgY2xzLmZpbGVPZmZzZXQsIGNscy5uYW1lLmxlbmd0aCkKICAgICAgXTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjbHMuaXNBbm9ueW1vdXNNaXhpbikgewogICAgICAgIC8vIEltcGxpY2l0IG1peGluIGFwcGxpY2F0aW9uIGNsYXNzCiAgICAgICAgU3RyaW5nIGJhc2VOYW1lID0gY2xzLnN1cGVyY2xhc3MuZGVtYW5nbGVkTmFtZTsKICAgICAgICBTdHJpbmcgbWl4aW5OYW1lID0gY2xzLm1peGVkSW5DbGFzcy5uYW1lOwogICAgICAgIGludCBjbGFzc05hbWVMZW5ndGggPSBjbHMubmFtZUFzTWl4aW5BcHBsaWNhdGlvblN1YmNsYXNzLmxlbmd0aDsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgdGVtcGxhdGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobWl4aW5OYW1lLCBiYXNlTmFtZSkKICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKGNscy5maWxlVXJpLCBjbHMuZmlsZU9mZnNldCwgY2xhc3NOYW1lTGVuZ3RoKQogICAgICAgIF07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTmFtZWQgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MKICAgICAgICByZXR1cm4gWwogICAgICAgICAgdGVtcGxhdGVOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoY2xzLm5hbWUpCiAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihjbHMuZmlsZVVyaSwgY2xzLmZpbGVPZmZzZXQsIGNscy5uYW1lLmxlbmd0aCkKICAgICAgICBdOwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzIHsKICAgIHJldHVybiBpc01peGluQXBwbGljYXRpb24gJiYgIWlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgPyAiJHtzdXBlcnR5cGUuZnVsbE5hbWVGb3JFcnJvcnN9IHdpdGggJHttaXhlZEluVHlwZS5mdWxsTmFtZUZvckVycm9yc30iCiAgICAgICAgOiBuYW1lOwogIH0KCiAgdm9pZCBjaGVja01peGluRGVjbGFyYXRpb24oKSB7CiAgICBhc3NlcnQoY2xzLmlzTWl4aW5EZWNsYXJhdGlvbik7CiAgICBmb3IgKEJ1aWxkZXIgY29uc3RydWN0b3IgaW4gY29uc3RydWN0b3JzLmxvY2FsLnZhbHVlcykgewogICAgICBpZiAoIWNvbnN0cnVjdG9yLmlzU3ludGhldGljICYmCiAgICAgICAgICAoY29uc3RydWN0b3IuaXNGYWN0b3J5IHx8IGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IpKSB7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycwogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZQogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdWxsTmFtZUZvckVycm9ycykKICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmZpbGVVcmksIGNvbnN0cnVjdG9yLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgICBdKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBjaGVja01peGluQXBwbGljYXRpb24oQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5KSB7CiAgICAvLyBBIG1peGluIGRlY2xhcmF0aW9uIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYSBjbGFzcyB0aGF0IGltcGxlbWVudHMgYWxsCiAgICAvLyB0aGUgZGVjbGFyYXRpb24ncyBzdXBlcmNsYXNzIGNvbnN0cmFpbnRzLgogICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBjbHMuc3VwZXJ0eXBlLmFzSW50ZXJmYWNlVHlwZTsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZShjbHMubWl4ZWRJblR5cGUpOwogICAgZm9yIChTdXBlcnR5cGUgY29uc3RyYWludCBpbiBjbHMubWl4ZWRJbkNsYXNzLnN1cGVyY2xhc3NDb25zdHJhaW50cygpKSB7CiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlID0KICAgICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlU3VwZXJ0eXBlKGNvbnN0cmFpbnQpLmFzSW50ZXJmYWNlVHlwZTsKICAgICAgaWYgKGhpZXJhcmNoeS5nZXRUeXBlQXNJbnN0YW5jZU9mKHN1cGVydHlwZSwgaW50ZXJmYWNlLmNsYXNzTm9kZSkgIT0KICAgICAgICAgIGludGVyZmFjZSkgewogICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBzdXBlcnR5cGUsIGludGVyZmFjZSwgY2xzLm1peGVkSW5UeXBlLmFzSW50ZXJmYWNlVHlwZSksCiAgICAgICAgICAgIGNscy5maWxlT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgY2xzLmZpbGVVcmkpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFwcGx5UGF0Y2goQnVpbGRlciBwYXRjaCkgewogICAgaWYgKHBhdGNoIGlzIENsYXNzQnVpbGRlcikgewogICAgICBwYXRjaC5hY3R1YWxPcmlnaW4gPSB0aGlzOwogICAgICAvLyBUT0RPKGFoZSk6IENvbXBsYWluIGlmIGBwYXRjaC5zdXBlcnR5cGVgIGlzbid0IG51bGwuCiAgICAgIHNjb3BlLmxvY2FsLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgIEJ1aWxkZXIgbWVtYmVyUGF0Y2ggPSBwYXRjaC5zY29wZS5sb2NhbFtuYW1lXTsKICAgICAgICBpZiAobWVtYmVyUGF0Y2ggIT0gbnVsbCkgewogICAgICAgICAgbWVtYmVyLmFwcGx5UGF0Y2gobWVtYmVyUGF0Y2gpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHNjb3BlLnNldHRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgICAgQnVpbGRlciBtZW1iZXJQYXRjaCA9IHBhdGNoLnNjb3BlLnNldHRlcnNbbmFtZV07CiAgICAgICAgaWYgKG1lbWJlclBhdGNoICE9IG51bGwpIHsKICAgICAgICAgIG1lbWJlci5hcHBseVBhdGNoKG1lbWJlclBhdGNoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBjb25zdHJ1Y3RvcnMubG9jYWwuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgICAgQnVpbGRlciBtZW1iZXJQYXRjaCA9IHBhdGNoLmNvbnN0cnVjdG9ycy5sb2NhbFtuYW1lXTsKICAgICAgICBpZiAobWVtYmVyUGF0Y2ggIT0gbnVsbCkgewogICAgICAgICAgbWVtYmVyLmFwcGx5UGF0Y2gobWVtYmVyUGF0Y2gpOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICBpbnQgb3JpZ2luTGVuZ3RoID0gdHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDA7CiAgICAgIGludCBwYXRjaExlbmd0aCA9IHBhdGNoLnR5cGVWYXJpYWJsZXM/Lmxlbmd0aCA/PyAwOwogICAgICBpZiAob3JpZ2luTGVuZ3RoICE9IHBhdGNoTGVuZ3RoKSB7CiAgICAgICAgcGF0Y2guYWRkUHJvYmxlbShtZXNzYWdlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaCwKICAgICAgICAgICAgcGF0Y2guY2hhck9mZnNldCwgbm9MZW5ndGgsIGNvbnRleHQ6IFsKICAgICAgICAgIG1lc3NhZ2VQYXRjaENsYXNzT3JpZ2luLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICBdKTsKICAgICAgfSBlbHNlIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0IGluIHBhdGNoLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgIHR5cGVWYXJpYWJsZXNbY291bnQrK10uYXBwbHlQYXRjaCh0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoLCBwYXRjaC5jaGFyT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsIHBhdGNoLmZpbGVVcmksIGNvbnRleHQ6IFsKICAgICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbi53aXRoTG9jYXRpb24oCiAgICAgICAgICAgIGZpbGVVcmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKQogICAgICBdKTsKICAgIH0KICB9CgogIC8vIENvbXB1dGVzIHRoZSBmdW5jdGlvbiB0eXBlIG9mIGEgZ2l2ZW4gcmVkaXJlY3Rpb24gdGFyZ2V0LiBSZXR1cm5zIFtudWxsXSBpZgogIC8vIHRoZSB0eXBlIG9mIHRoZSB0YXJnZXQgY291bGQgbm90IGJlIGNvbXB1dGVkLgogIEZ1bmN0aW9uVHlwZSBjb21wdXRlUmVkaXJlY3RlZVR5cGUoCiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIgZmFjdG9yeSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyIHJlZGlyZWN0aW9uVGFyZ2V0ID0gZmFjdG9yeS5yZWRpcmVjdGlvblRhcmdldDsKICAgIEZ1bmN0aW9uTm9kZSB0YXJnZXQ7CiAgICBpZiAocmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldCBpcyBGdW5jdGlvbkJ1aWxkZXIpIHsKICAgICAgRnVuY3Rpb25CdWlsZGVyIHRhcmdldEJ1aWxkZXIgPSByZWRpcmVjdGlvblRhcmdldC50YXJnZXQ7CiAgICAgIHRhcmdldCA9IHRhcmdldEJ1aWxkZXIuZnVuY3Rpb247CiAgICB9IGVsc2UgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldCBpcyBEaWxsTWVtYmVyQnVpbGRlciAmJgogICAgICAgIChyZWRpcmVjdGlvblRhcmdldC50YXJnZXQuaXNDb25zdHJ1Y3RvciB8fAogICAgICAgICAgICByZWRpcmVjdGlvblRhcmdldC50YXJnZXQuaXNGYWN0b3J5KSkgewogICAgICBEaWxsTWVtYmVyQnVpbGRlciB0YXJnZXRCdWlsZGVyID0gcmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0OwogICAgICAvLyBJdCBzZWVtcyB0aGF0IHRoZSBbcmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0XSBpcyBhbiBpbnN0YW5jZSBvZgogICAgICAvLyBbRGlsbE1lbWJlckJ1aWxkZXJdIHdoZW5ldmVyIHRoZSByZWRpcmVjdGVlIGlzIGFuIGltcGxpY2l0IGNvbnN0cnVjdG9yLAogICAgICAvLyBlLmcuCiAgICAgIC8vCiAgICAgIC8vICAgY2xhc3MgQSB7CiAgICAgIC8vICAgICBmYWN0b3J5IEEoKSA9IEI7CiAgICAgIC8vICAgfQogICAgICAvLyAgIGNsYXNzIEIgaW1wbGVtZW50cyBBIHt9CiAgICAgIC8vCiAgICAgIHRhcmdldCA9IHRhcmdldEJ1aWxkZXIubWVtYmVyLmZ1bmN0aW9uOwogICAgfSBlbHNlIGlmIChyZWRpcmVjdGlvblRhcmdldC50YXJnZXQgaXMgQW1iaWd1b3VzQnVpbGRlcikgewogICAgICAvLyBNdWx0aXBsZSBkZWZpbml0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWU6IEFuIGVycm9yIGhhcyBhbHJlYWR5IGJlZW4KICAgICAgLy8gaXNzdWVkLgogICAgICAvLyBUT0RPKGh0dHA6Ly9kYXJ0YnVnLmNvbS8zNTI5NCk6IFVuZm9ydHVuYXRlIGVycm9yOyBzZWUgYWxzbwogICAgICAvLyBodHRwczovL2RhcnQtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vYy9zZGsvKy84NTM5MC8uCiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke3JlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldH0iLCAiY29tcHV0ZVJlZGlyZWN0ZWVUeXBlIiwKICAgICAgICAgIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQoKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgIGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoZmFjdG9yeS50YXJnZXQpLnR5cGVBcmd1bWVudHM7CiAgICBGdW5jdGlvblR5cGUgdGFyZ2V0RnVuY3Rpb25UeXBlID0gdGFyZ2V0LmZ1bmN0aW9uVHlwZTsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwgJiYKICAgICAgICB0YXJnZXRGdW5jdGlvblR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IHR5cGVBcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModGFyZ2V0RnVuY3Rpb25UeXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCksCiAgICAgICAgICByZWRpcmVjdGlvblRhcmdldC5jaGFyT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvLyBDb21wdXRlIHRoZSBzdWJzdGl0dXRpb24gb2YgdGhlIHRhcmdldCBjbGFzcyB0eXBlIHBhcmFtZXRlcnMgaWYKICAgIC8vIFtyZWRpcmVjdGlvblRhcmdldF0gaGFzIGFueSB0eXBlIGFyZ3VtZW50cy4KICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb247CiAgICBib29sIGhhc1Byb2JsZW0gPSBmYWxzZTsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwgJiYgdHlwZUFyZ3VtZW50cy5sZW5ndGggPiAwKSB7CiAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICB0YXJnZXRGdW5jdGlvblR5cGUudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldEZ1bmN0aW9uVHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IHRhcmdldEZ1bmN0aW9uVHlwZS50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICBEYXJ0VHlwZSB0eXBlUGFyYW1ldGVyQm91bmQgPQogICAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUodHlwZVBhcmFtZXRlci5ib3VuZCk7CiAgICAgICAgRGFydFR5cGUgdHlwZUFyZ3VtZW50ID0gdHlwZUFyZ3VtZW50c1tpXTsKICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBbdHlwZUFyZ3VtZW50XSByZXNwZWN0cyB0aGUgYm91bmRzIG9mCiAgICAgICAgLy8gW3R5cGVQYXJhbWV0ZXJdLgogICAgICAgIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKHR5cGVBcmd1bWVudCwgdHlwZVBhcmFtZXRlckJvdW5kKSkgewogICAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICB0eXBlQXJndW1lbnQsIHR5cGVQYXJhbWV0ZXJCb3VuZCksCiAgICAgICAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQuY2hhck9mZnNldCwKICAgICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgICAgICBoYXNQcm9ibGVtID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZUFyZ3VtZW50cyA9PSBudWxsICYmCiAgICAgICAgdGFyZ2V0RnVuY3Rpb25UeXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHsKICAgICAgLy8gVE9ETyhoaWxsZXJzdHJvbSk6IEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBwZXJmb3JtIHR5cGUgaW5mZXJlbmNlIG9uCiAgICAgIC8vIHRoZSByZWRpcmVjdGVlIHRvIG9idGFpbiBhY3R1YWwgdHlwZSBhcmd1bWVudHMgd2hpY2ggd291bGQgYWxsb3cgdGhlCiAgICAgIC8vIGZvbGxvd2luZyBwcm9ncmFtIHRvIHR5cGUgY2hlY2s6CiAgICAgIC8vCiAgICAgIC8vICAgIGNsYXNzIEE8VD4gewogICAgICAvLyAgICAgICBmYWN0b3J5IEEoKSA9IEI7CiAgICAgIC8vICAgIH0KICAgICAgLy8gICAgY2xhc3MgQjxUPiBpbXBsZW1lbnRzIEE8VD4gewogICAgICAvLyAgICAgICBCKCk7CiAgICAgIC8vICAgIH0KICAgICAgLy8KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLy8gU3Vic3RpdHV0ZSBpZiBuZWNlc3NhcnkuCiAgICB0YXJnZXRGdW5jdGlvblR5cGUgPSBzdWJzdGl0dXRpb24gPT0gbnVsbAogICAgICAgID8gdGFyZ2V0RnVuY3Rpb25UeXBlCiAgICAgICAgOiAoc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHRhcmdldEZ1bmN0aW9uVHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnMpCiAgICAgICAgICAgIGFzIEZ1bmN0aW9uVHlwZSk7CgogICAgcmV0dXJuIGhhc1Byb2JsZW0gPyBudWxsIDogdGFyZ2V0RnVuY3Rpb25UeXBlOwogIH0KCiAgU3RyaW5nIGNvbXB1dGVSZWRpcmVjdGVlTmFtZShDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVkaXJlY3Rpb25UYXJnZXQpIHsKICAgIFN0cmluZyB0YXJnZXROYW1lID0gcmVkaXJlY3Rpb25UYXJnZXQuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICBpZiAodGFyZ2V0TmFtZSA9PSAiIikgewogICAgICByZXR1cm4gcmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0LnBhcmVudC5mdWxsTmFtZUZvckVycm9yczsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0YXJnZXROYW1lOwogICAgfQogIH0KCiAgdm9pZCBjaGVja1JlZGlyZWN0aW5nRmFjdG9yeSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlciBmYWN0b3J5LCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICAvLyBUaGUgZmFjdG9yeSB0eXBlIGNhbm5vdCBjb250YWluIGFueSB0eXBlIHBhcmFtZXRlcnMgb3RoZXIgdGhhbiB0aG9zZSBvZgogICAgLy8gaXRzIGVuY2xvc2luZyBjbGFzcywgYmVjYXVzZSBjb25zdHJ1Y3RvcnMgY2Fubm90IHNwZWNpZnkgdHlwZSBwYXJhbWV0ZXJzCiAgICAvLyBvZiB0aGVpciBvd24uCiAgICBGdW5jdGlvblR5cGUgZmFjdG9yeVR5cGUgPQogICAgICAgIGZhY3RvcnkucHJvY2VkdXJlLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnM7CiAgICBGdW5jdGlvblR5cGUgcmVkaXJlY3RlZVR5cGUgPQogICAgICAgIGNvbXB1dGVSZWRpcmVjdGVlVHlwZShmYWN0b3J5LCB0eXBlRW52aXJvbm1lbnQpOwoKICAgIC8vIFRPRE8oaGlsbGVyc3Ryb20pOiBJdCB3b3VsZCBiZSBwcmVmZXJhYmxlIHRvIGtub3cgd2hldGhlciBhIGZhaWx1cmUKICAgIC8vIGhhcHBlbmVkIGR1cmluZyBbX2NvbXB1dGVSZWRpcmVjdGVlVHlwZV0uCiAgICBpZiAocmVkaXJlY3RlZVR5cGUgPT0gbnVsbCkgcmV0dXJuOwoKICAgIC8vIENoZWNrIHdoZXRoZXIgW3JlZGlyZWN0ZWVUeXBlXSA8OiBbZmFjdG9yeVR5cGVdLgogICAgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YocmVkaXJlY3RlZVR5cGUsIGZhY3RvcnlUeXBlKSkgewogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgcmVkaXJlY3RlZVR5cGUsIGZhY3RvcnlUeXBlKSwKICAgICAgICAgIGZhY3RvcnkucmVkaXJlY3Rpb25UYXJnZXQuY2hhck9mZnNldCwKICAgICAgICAgIG5vTGVuZ3RoKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tSZWRpcmVjdGluZ0ZhY3RvcmllcyhUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBjb25zdHJ1Y3RvcnMgPSB0aGlzLmNvbnN0cnVjdG9ycy5sb2NhbDsKICAgIEl0ZXJhYmxlPFN0cmluZz4gbmFtZXMgPSBjb25zdHJ1Y3RvcnMua2V5czsKICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gbmFtZXMpIHsKICAgICAgQnVpbGRlciBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yc1tuYW1lXTsKICAgICAgZG8gewogICAgICAgIGlmIChjb25zdHJ1Y3RvciBpcyBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyKSB7CiAgICAgICAgICBjaGVja1JlZGlyZWN0aW5nRmFjdG9yeShjb25zdHJ1Y3RvciwgdHlwZUVudmlyb25tZW50KTsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5uZXh0OwogICAgICB9IHdoaWxlIChjb25zdHJ1Y3RvciAhPSBudWxsKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgbWFwIHdoaWNoIG1hcHMgdGhlIHR5cGUgdmFyaWFibGVzIG9mIFtzdXBlcmNsYXNzXSB0byB0aGVpcgogIC8vLyByZXNwZWN0aXZlIHZhbHVlcyBhcyBkZWZpbmVkIGJ5IHRoZSBzdXBlcmNsYXNzIGNsYXVzZSBvZiB0aGlzIGNsYXNzIChhbmQKICAvLy8gaXRzIHN1cGVyY2xhc3NlcykuCiAgLy8vCiAgLy8vIEl0J3MgYXNzdW1lZCB0aGF0IFtzdXBlcmNsYXNzXSBpcyBhIHN1cGVyY2xhc3Mgb2YgdGhpcyBjbGFzcy4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGdpdmVuOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQm94PFQ+IHt9CiAgLy8vICAgICBjbGFzcyBCZWF0Qm94IGV4dGVuZHMgQm94PEJlYXQ+IHt9CiAgLy8vICAgICBjbGFzcyBCZWF0IHt9CiAgLy8vCiAgLy8vIFdlIGhhdmU6CiAgLy8vCiAgLy8vICAgICBbW0JlYXRCb3hdXS5nZXRTdWJzdGl0dXRpb25NYXAoW1tCb3hdXSkgLT4ge1tbQm94OjpUXV06IEJlYXRdXX0uCiAgLy8vCiAgLy8vIEl0J3MgYW4gZXJyb3IgaWYgW3N1cGVyY2xhc3NdIGlzbid0IGEgc3VwZXJjbGFzcy4KICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IGdldFN1YnN0aXR1dGlvbk1hcChDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICBTdXBlcnR5cGUgc3VwZXJ0eXBlID0gdGFyZ2V0LnN1cGVydHlwZTsKICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uTWFwID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB2YXJpYWJsZXM7CiAgICBDbGFzcyBjbGFzc05vZGU7CgogICAgd2hpbGUgKGNsYXNzTm9kZSAhPSBzdXBlcmNsYXNzKSB7CiAgICAgIGNsYXNzTm9kZSA9IHN1cGVydHlwZS5jbGFzc05vZGU7CiAgICAgIGFyZ3VtZW50cyA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzOwogICAgICB2YXJpYWJsZXMgPSBjbGFzc05vZGUudHlwZVBhcmFtZXRlcnM7CiAgICAgIHN1cGVydHlwZSA9IGNsYXNzTm9kZS5zdXBlcnR5cGU7CiAgICAgIGlmICh2YXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gZGlyZWN0U3Vic3RpdHV0aW9uTWFwID0KICAgICAgICAgICAgPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBEYXJ0VHlwZSBhcmd1bWVudCA9CiAgICAgICAgICAgICAgaSA8IGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbaV0gOiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk1hcCAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIFRPRE8oYWhlKTogSW52ZXN0aWdhdGUgaWYgcmVxdWlyaW5nIHRoZSBjYWxsZXIgdG8gdXNlCiAgICAgICAgICAgIC8vIGBzdWJzdGl0dXRlRGVlcGAgZnJvbSBgcGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnRgIGluc3RlYWQKICAgICAgICAgICAgLy8gb2YgYHN1YnN0aXR1dGVgIGlzIGZhc3Rlci4gSWYgc28sIHdlIGNhbiBzaW1wbHkgdGhpcyBjb2RlLgogICAgICAgICAgICBhcmd1bWVudCA9IHN1YnN0aXR1dGUoYXJndW1lbnQsIHN1YnN0aXR1dGlvbk1hcCk7CiAgICAgICAgICB9CiAgICAgICAgICBkaXJlY3RTdWJzdGl0dXRpb25NYXBbdmFyaWFibGVzW2ldXSA9IGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgICBzdWJzdGl0dXRpb25NYXAgPSBkaXJlY3RTdWJzdGl0dXRpb25NYXA7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gc3Vic3RpdHV0aW9uTWFwOwogIH0KCiAgLy8vIExvb2tzIHVwIHRoZSBtZW1iZXIgYnkgW25hbWVdIG9uIHRoZSBjbGFzcyBidWlsdCBieSB0aGlzIGNsYXNzIGJ1aWxkZXIuCiAgLy8vCiAgLy8vIElmIFtpc1NldHRlcl0gaXMgYGZhbHNlYCwgb25seSBmaWVsZHMsIG1ldGhvZHMsIGFuZCBnZXR0ZXJzIHdpdGggdGhhdCBuYW1lCiAgLy8vIHdpbGwgYmUgZm91bmQuICBJZiBbaXNTZXR0ZXJdIGlzIGB0cnVlYCwgb25seSBub24tZmluYWwgZmllbGRzIGFuZCBzZXR0ZXJzCiAgLy8vIHdpbGwgYmUgZm91bmQuCiAgLy8vCiAgLy8vIElmIFtpc1N1cGVyXSBpcyBgZmFsc2VgLCB0aGUgbWVtYmVyIGlzIGZvdW5kIGFtb25nIHRoZSBpbnRlcmZhY2UgbWVtYmVycwogIC8vLyB0aGUgY2xhc3MgYnVpbHQgYnkgdGhpcyBjbGFzcyBidWlsZGVyLiBJZiBbaXNTdXBlcl0gaXMgYHRydWVgLCB0aGUgbWVtYmVyCiAgLy8vIGlzIGZvdW5kIGFtb25nIHRoZSBjbGFzcyBtZW1iZXJzIG9mIHRoZSBzdXBlcmNsYXNzLgogIC8vLwogIC8vLyBJZiB0aGlzIGNsYXNzIGJ1aWxkZXIgaXMgYSBwYXRjaCwgaW50ZXJmYWNlIG1lbWJlcnMgZGVjbGFyZWQgaW4gdGhpcwogIC8vLyBwYXRjaCBhcmUgc2VhcmNoZWQgYmVmb3JlIHNlYXJjaGluZyB0aGUgaW50ZXJmYWNlIG1lbWJlcnMgaW4gdGhlIG9yaWdpbgogIC8vLyBjbGFzcy4KICBNZW1iZXIgbG9va3VwSW5zdGFuY2VNZW1iZXIoQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LCBOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU2V0dGVyOiBmYWxzZSwgYm9vbCBpc1N1cGVyOiBmYWxzZX0pIHsKICAgIENsYXNzIGluc3RhbmNlQ2xhc3MgPSBjbHM7CiAgICBpZiAoaXNQYXRjaCkgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKGluc3RhbmNlQ2xhc3MsIG9yaWdpbi5jbHMpLAogICAgICAgICAgIkZvdW5kICR7b3JpZ2luLmNsc30gZXhwZWN0ZWQgJGluc3RhbmNlQ2xhc3MiKTsKICAgICAgaWYgKGlzU3VwZXIpIHsKICAgICAgICAvLyBUaGUgc3VwZXIgY2xhc3MgaXMgb25seSBjb3JyZWN0bHkgZm91bmQgdGhyb3VnaCB0aGUgb3JpZ2luIGNsYXNzLgogICAgICAgIGluc3RhbmNlQ2xhc3MgPSBvcmlnaW4uY2xzOwogICAgICB9IGVsc2UgewogICAgICAgIE1lbWJlciBtZW1iZXIgPQogICAgICAgICAgICBoaWVyYXJjaHkuZ2V0SW50ZXJmYWNlTWVtYmVyKGluc3RhbmNlQ2xhc3MsIG5hbWUsIHNldHRlcjogaXNTZXR0ZXIpOwogICAgICAgIGlmIChtZW1iZXI/LnBhcmVudCA9PSBpbnN0YW5jZUNsYXNzKSB7CiAgICAgICAgICAvLyBPbmx5IGlmIHRoZSBtZW1iZXIgaXMgZm91bmQgaW4gdGhlIHBhdGNoIGNhbiB3ZSB1c2UgaXQuCiAgICAgICAgICByZXR1cm4gbWVtYmVyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIG5lZWQgdG8ga2VlcCBzZWFyY2hpbmcgaW4gdGhlIG9yaWdpbiBjbGFzcy4KICAgICAgICAgIGluc3RhbmNlQ2xhc3MgPSBvcmlnaW4uY2xzOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChpc1N1cGVyKSB7CiAgICAgIGluc3RhbmNlQ2xhc3MgPSBpbnN0YW5jZUNsYXNzLnN1cGVyY2xhc3M7CiAgICAgIGlmIChpbnN0YW5jZUNsYXNzID09IG51bGwpIHJldHVybiBudWxsOwogICAgfQogICAgTWVtYmVyIHRhcmdldCA9IGlzU3VwZXIKICAgICAgICA/IGhpZXJhcmNoeS5nZXREaXNwYXRjaFRhcmdldChpbnN0YW5jZUNsYXNzLCBuYW1lLCBzZXR0ZXI6IGlzU2V0dGVyKQogICAgICAgIDogaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihpbnN0YW5jZUNsYXNzLCBuYW1lLCBzZXR0ZXI6IGlzU2V0dGVyKTsKICAgIGlmIChpc1N1cGVyICYmIHRhcmdldCA9PSBudWxsKSB7CiAgICAgIGlmIChjbHMuaXNNaXhpbkRlY2xhcmF0aW9uIHx8CiAgICAgICAgICAobGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQuZW5hYmxlU3VwZXJNaXhpbnMgJiYKICAgICAgICAgICAgICB0aGlzLmlzQWJzdHJhY3QpKSB7CiAgICAgICAgdGFyZ2V0ID0KICAgICAgICAgICAgaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihpbnN0YW5jZUNsYXNzLCBuYW1lLCBzZXR0ZXI6IGlzU2V0dGVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vLyBMb29rcyB1cCB0aGUgY29uc3RydWN0b3IgYnkgW25hbWVdIG9uIHRoZSB0aGUgY2xhc3MgYnVpbHQgYnkgdGhpcyBjbGFzcwogIC8vLyBidWlsZGVyLgogIC8vLwogIC8vLyBJZiBbaXNTdXBlcl0gaXMgYHRydWVgLCBjb25zdHJ1Y3RvcnMgaW4gdGhlIHN1cGVyY2xhc3MgYXJlIHNlYXJjaGVkLgogIENvbnN0cnVjdG9yIGxvb2t1cENvbnN0cnVjdG9yKE5hbWUgbmFtZSwge2Jvb2wgaXNTdXBlcjogZmFsc2V9KSB7CiAgICBDbGFzcyBpbnN0YW5jZUNsYXNzID0gY2xzOwogICAgaWYgKGlzU3VwZXIpIHsKICAgICAgaW5zdGFuY2VDbGFzcyA9IGluc3RhbmNlQ2xhc3Muc3VwZXJjbGFzczsKICAgIH0KICAgIGlmIChpbnN0YW5jZUNsYXNzICE9IG51bGwpIHsKICAgICAgZm9yIChDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiBpbnN0YW5jZUNsYXNzLmNvbnN0cnVjdG9ycykgewogICAgICAgIGlmIChjb25zdHJ1Y3Rvci5uYW1lID09IG5hbWUpIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICAgfQogICAgfQoKICAgIC8vLyBQZXJmb3JtcyBhIHNpbWlsYXIgbG9va3VwIHRvIFtsb29rdXBDb25zdHJ1Y3Rvcl0sIGJ1dCB1c2luZyBhIHNsb3dlcgogICAgLy8vIGltcGxlbWVudGF0aW9uLgogICAgQ29uc3RydWN0b3IgbG9va3VwQ29uc3RydWN0b3JXaXRoUGF0Y2hlcyhOYW1lIG5hbWUsIGJvb2wgaXNTdXBlcikgewogICAgICBDbGFzc0J1aWxkZXIgYnVpbGRlciA9IHRoaXMub3JpZ2luOwoKICAgICAgQ2xhc3NCdWlsZGVyIGdldFN1cGVyY2xhc3MoQ2xhc3NCdWlsZGVyIGJ1aWxkZXIpIHsKICAgICAgICAvLyBUaGlzIHdheSBvZiBjb21wdXRpbmcgdGhlIHN1cGVyY2xhc3MgaXMgc2xvd2VyIHRoYW4gdXNpbmcgdGhlIGtlcm5lbAogICAgICAgIC8vIG9iamVjdHMgZGlyZWN0bHkuCiAgICAgICAgT2JqZWN0IHN1cGVydHlwZSA9IGJ1aWxkZXIuc3VwZXJ0eXBlOwogICAgICAgIGlmIChzdXBlcnR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICAgICAgT2JqZWN0IGJ1aWxkZXIgPSBzdXBlcnR5cGUuZGVjbGFyYXRpb247CiAgICAgICAgICBpZiAoYnVpbGRlciBpcyBDbGFzc0J1aWxkZXIpIHJldHVybiBidWlsZGVyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgaWYgKGlzU3VwZXIpIHsKICAgICAgICBidWlsZGVyID0gZ2V0U3VwZXJjbGFzcyhidWlsZGVyKT8ub3JpZ2luOwogICAgICB9CiAgICAgIGlm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bmQ7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBQcmVmaXhCdWlsZGVyLAogICAgICAgIFF1YWxpZmllZE5hbWUsCiAgICAgICAgU2NvcGUsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgZmxhdHRlbk5hbWU7CgpjbGFzcyBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgewogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBmaW5hbCBVcmkgZmlsZVVyaTsKCiAgZmluYWwgT2JqZWN0IG5hbWU7CgogIGZpbmFsIExpc3Q8VHlwZUJ1aWxkZXI+IHR5cGVBcmd1bWVudHM7CgogIC8vLyBUaGlzIGlzIHRoZSBuYW1lIG9mIGEgbmFtZWQgY29uc3RydWN0b3IuIEFzIGBiYXJgIGluIGBuZXcgRm9vPFQ+LmJhcigpYC4KICBmaW5hbCBTdHJpbmcgc3VmZml4OwoKICBCdWlsZGVyIHRhcmdldDsKCiAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyKHRoaXMubmFtZSwgdGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLnN1ZmZpeCwKICAgICAgQnVpbGRlciBwYXJlbnQsIHRoaXMuY2hhck9mZnNldCkKICAgICAgOiBmaWxlVXJpID0gcGFyZW50LmZpbGVVcmk7CgogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgewogICAgcmV0dXJuICIke2ZsYXR0ZW5OYW1lKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpfSIKICAgICAgICAiJHtzdWZmaXggPT0gbnVsbCA/ICcnIDogJy4kc3VmZml4J30iOwogIH0KCiAgdm9pZCByZXNvbHZlSW4oU2NvcGUgc2NvcGUsIExpYnJhcnlCdWlsZGVyIGFjY2Vzc2luZ0xpYnJhcnkpIHsKICAgIGZpbmFsIG5hbWUgPSB0aGlzLm5hbWU7CiAgICBCdWlsZGVyIGRlY2xhcmF0aW9uOwogICAgaWYgKG5hbWUgaXMgUXVhbGlmaWVkTmFtZSkgewogICAgICBTdHJpbmcgcHJlZml4ID0gbmFtZS5xdWFsaWZpZXI7CiAgICAgIFN0cmluZyBtaWRkbGUgPSBuYW1lLm5hbWU7CiAgICAgIGRlY2xhcmF0aW9uID0gc2NvcGUubG9va3VwKHByZWZpeCwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgUHJlZml4QnVpbGRlciBwcmVmaXggPSBkZWNsYXJhdGlvbjsKICAgICAgICBkZWNsYXJhdGlvbiA9IHByZWZpeC5sb29rdXAobWlkZGxlLCBuYW1lLmNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgIENsYXNzQnVpbGRlciBjbHMgPSBkZWNsYXJhdGlvbjsKICAgICAgICBkZWNsYXJhdGlvbiA9IGNscy5maW5kQ29uc3RydWN0b3JPckZhY3RvcnkoCiAgICAgICAgICAgIG1pZGRsZSwgbmFtZS5jaGFyT2Zmc2V0LCBmaWxlVXJpLCBhY2Nlc3NpbmdMaWJyYXJ5KTsKICAgICAgICBpZiAoc3VmZml4ID09IG51bGwpIHsKICAgICAgICAgIHRhcmdldCA9IGRlY2xhcmF0aW9uOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZGVjbGFyYXRpb24gPSBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIHRhcmdldCA9IGRlY2xhcmF0aW9uLmZpbmRDb25zdHJ1Y3Rvck9yRmFjdG9yeSgKICAgICAgICAgIHN1ZmZpeCA/PyAiIiwgY2hhck9mZnNldCwgZmlsZVVyaSwgYWNjZXNzaW5nTGlicmFyeSk7CiAgICB9CiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKICAgICAgYWNjZXNzaW5nTGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVDb25zdHJ1Y3Rvck5vdEZvdW5kLndpdGhBcmd1bWVudHMoZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgZmlsZVVyaSk7CiAgICB9CiAgfQp9Ck8ATk48AS0BRgEWCRYRGBcXDxUVASQYARUBFQEpAU8XARIBSiciASE3LwQBQRwZISYhPyosRzAoNEEeIBIKCA09Bic1QAYaI0gWFBQGBAIBRnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2NvbnN0cnVjdG9yX3JlZmVyZW5jZV9idWlsZGVyLmRhcnQ9c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvZGVjbGFyYXRpb24uZGFydJgbLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGVjbGFyYXRpb247CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgphYnN0cmFjdCBjbGFzcyBCdWlsZGVyIHsKICAvLy8gVXNlZCB3aGVuIG11bHRpcGxlIHRoaW5ncyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIGRlY2xhcmVkIHdpdGhpbiB0aGUgc2FtZQogIC8vLyBwYXJlbnQuIE9ubHkgdXNlZCBmb3IgdG9wLWxldmVsIGFuZCBjbGFzcy1tZW1iZXIgZGVjbGFyYXRpb25zLCBub3QgZm9yCiAgLy8vIGJsb2NrIHNjb3Blcy4KICBCdWlsZGVyIG5leHQ7CgogIEJ1aWxkZXIoKTsKCiAgQnVpbGRlciBnZXQgcGFyZW50OwoKICBVcmkgZ2V0IGZpbGVVcmk7CgogIGludCBnZXQgY2hhck9mZnNldDsKCiAgZ2V0IHRhcmdldCA9PiB1bnN1cHBvcnRlZCgiJHtydW50aW1lVHlwZX0udGFyZ2V0IiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIEJ1aWxkZXIgZ2V0IG9yaWdpbiA9PiB0aGlzOwoKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzOwoKICBib29sIGdldCBoYXNQcm9ibGVtID0+IGZhbHNlOwoKICBib29sIGdldCBpc0NvbnN0ID0+IGZhbHNlOwoKICBib29sIGdldCBpc0NvbnN0cnVjdG9yID0+IGZhbHNlOwoKICBib29sIGdldCBpc0ZhY3RvcnkgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzRmllbGQgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzRmluYWwgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IGZhbHNlOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBidWlsZGVyIGlzIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBCYCBpbjoKICAvLy8KICAvLy8gICAgY2xhc3MgQSB7fQogIC8vLyAgICBleHRlbnNpb24gQiBvbiBBIHt9CiAgLy8vCiAgYm9vbCBnZXQgaXNFeHRlbnNpb24gPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGJ1aWxkZXIgaXMgYSBtZW1iZXIgb2YgYSBjbGFzcywgbWl4aW4sIG9yIGV4dGVuc2lvbgogIC8vLyBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBLmNvbnN0cnVjdG9yYCwgYG1ldGhvZDFhYCwgYG1ldGhvZDFiYCwgYG1ldGhvZDJhYCwKICAvLy8gYG1ldGhvZDJiYCwgYG1ldGhvZDNhYCwgYW5kIGBtZXRob2QzYmAgaW46CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHsKICAvLy8gICAgICAgQS5jb25zdHJ1Y3RvcigpOwogIC8vLyAgICAgICBtZXRob2QxYSgpIHt9CiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QxYigpIHt9CiAgLy8vICAgICB9CiAgLy8vICAgICBtaXhpbiBCIHsKICAvLy8gICAgICAgbWV0aG9kMmEoKSB7fQogIC8vLyAgICAgICBzdGF0aWMgbWV0aG9kMmIoKSB7fQogIC8vLyAgICAgfQogIC8vLyAgICAgZXh0ZW5kcyBDIG9uIEEgewogIC8vLyAgICAgICBtZXRob2QzYSgpIHt9CiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QzYigpIHt9CiAgLy8vICAgICB9CiAgLy8vCiAgYm9vbCBnZXQgaXNEZWNsYXJhdGlvbk1lbWJlciA9PiBmYWxzZTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgYnVpbGRlciBpcyBhIG1lbWJlciBvZiBhIGNsYXNzIG9yIG1peGluCiAgLy8vIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYEEuY29uc3RydWN0b3JgLCBgbWV0aG9kMWFgLCBgbWV0aG9kMWJgLCBgbWV0aG9kMmFgIGFuZAogIC8vLyBgbWV0aG9kMmJgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7CiAgLy8vICAgICAgIEEuY29uc3RydWN0b3IoKTsKICAvLy8gICAgICAgbWV0aG9kMWEoKSB7fQogIC8vLyAgICAgICBzdGF0aWMgbWV0aG9kMWIoKSB7fQogIC8vLyAgICAgfQogIC8vLyAgICAgbWl4aW4gQiB7CiAgLy8vICAgICAgIG1ldGhvZDJhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDJiKCkge30KICAvLy8gICAgIH0KICAvLy8gICAgIGV4dGVuZHMgQyBvbiBBIHsKICAvLy8gICAgICAgbWV0aG9kM2EoKSB7fSAgICAgICAgLy8gTm90IGEgY2xhc3MgbWVtYmVyLgogIC8vLyAgICAgICBzdGF0aWMgbWV0aG9kM2IoKSB7fSAvLyBOb3QgYSBjbGFzcyBtZW1iZXIuCiAgLy8vICAgICB9CiAgLy8vCiAgYm9vbCBnZXQgaXNDbGFzc01lbWJlciA9PiBmYWxzZTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgYnVpbGRlciBpcyBhIG1lbWJlciBvZiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgbWV0aG9kM2FgIGFuZCBgbWV0aG9kM2JgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7CiAgLy8vICAgICAgIEEuY29uc3RydWN0b3IoKTsgICAgIC8vIE5vdCBhbiBleHRlbnNpb24gbWVtYmVyLgogIC8vLyAgICAgICBtZXRob2QxYSgpIHt9ICAgICAgICAvLyBOb3QgYW4gZXh0ZW5zaW9uIG1lbWJlci4KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDFiKCkge30gLy8gTm90IGFuIGV4dGVuc2lvbiBtZW1iZXIuCiAgLy8vICAgICB9CiAgLy8vICAgICBtaXhpbiBCIHsKICAvLy8gICAgICAgbWV0aG9kMmEoKSB7fSAgICAgICAgLy8gTm90IGFuIGV4dGVuc2lvbiBtZW1iZXIuCiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QyYigpIHt9IC8vIE5vdCBhbiBleHRlbnNpb24gbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgZXh0ZW5kcyBDIG9uIEEgewogIC8vLyAgICAgICBtZXRob2QzYSgpIHt9CiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QzYigpIHt9CiAgLy8vICAgICB9CiAgLy8vCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXIgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGJ1aWxkZXIgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGEgY2xhc3MsIG1peGluLCBvcgogIC8vLyBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgbWV0aG9kMWFgLCBgbWV0aG9kMmFgLCBhbmQgYG1ldGhvZDNhYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEgewogIC8vLyAgICAgICBBLmNvbnN0cnVjdG9yKCk7ICAgICAvLyBOb3QgYSBkZWNsYXJhdGlvbiBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICAgIG1ldGhvZDFhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDFiKCkge30gLy8gTm90IGEgZGVjbGFyYXRpb24gaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgbWl4aW4gQiB7CiAgLy8vICAgICAgIG1ldGhvZDJhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDJiKCkge30gLy8gTm90IGEgZGVjbGFyYXRpb24gaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgZXh0ZW5kcyBDIG9uIEEgewogIC8vLyAgICAgICBtZXRob2QzYSgpIHt9CiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QzYigpIHt9IC8vIE5vdCBhIGRlY2xhcmF0aW9uIGluc3RhbmNlIG1lbWJlci4KICAvLy8gICAgIH0KICAvLy8KICBib29sIGdldCBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGJ1aWxkZXIgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGEgY2xhc3Mgb3IgbWl4aW4KICAvLy8gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYG1ldGhvZDFhYCBhbmQgYG1ldGhvZDJhYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEgewogIC8vLyAgICAgICBBLmNvbnN0cnVjdG9yKCk7ICAgICAvLyBOb3QgYSBjbGFzcyBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICAgIG1ldGhvZDFhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDFiKCkge30gLy8gTm90IGEgY2xhc3MgaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgbWl4aW4gQiB7CiAgLy8vICAgICAgIG1ldGhvZDJhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDJiKCkge30gLy8gTm90IGEgY2xhc3MgaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgZXh0ZW5kcyBDIG9uIEEgewogIC8vLyAgICAgICBtZXRob2QzYSgpIHt9ICAgICAgICAvLyBOb3QgYSBjbGFzcyBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QzYigpIHt9IC8vIE5vdCBhIGNsYXNzIGluc3RhbmNlIG1lbWJlci4KICAvLy8gICAgIH0KICAvLy8KICBib29sIGdldCBpc0NsYXNzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGJ1aWxkZXIgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGFuIGV4dGVuc2lvbgogIC8vLyBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBtZXRob2QzYWAgaW46CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHsKICAvLy8gICAgICAgQS5jb25zdHJ1Y3RvcigpOyAgICAgLy8gTm90IGFuIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICAgIG1ldGhvZDFhKCkge30gICAgICAgIC8vIE5vdCBhbiBleHRlbnNpb24gaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgICBzdGF0aWMgbWV0aG9kMWIoKSB7fSAvLyBOb3QgYW4gZXh0ZW5zaW9uIGluc3RhbmNlIG1lbWJlci4KICAvLy8gICAgIH0KICAvLy8gICAgIG1peGluIEIgewogIC8vLyAgICAgICBtZXRob2QyYSgpIHt9ICAgICAgICAvLyBOb3QgYW4gZXh0ZW5zaW9uIGluc3RhbmNlIG1lbWJlci4KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDJiKCkge30gLy8gTm90IGFuIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICB9CiAgLy8vICAgICBleHRlbmRzIEMgb24gQSB7CiAgLy8vICAgICAgIG1ldGhvZDNhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDNiKCkge30gLy8gTm90IGFuIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICB9CiAgLy8vCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25JbnN0YW5jZU1lbWJlciA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNMb2NhbCA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNQYXRjaCA9PiB0aGlzICE9IG9yaWdpbjsKCiAgYm9vbCBnZXQgaXNSZWd1bGFyTWV0aG9kID0+IGZhbHNlOwoKICBib29sIGdldCBpc1NldHRlciA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IGZhbHNlOwoKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwoKICBib29sIGdldCBpc1R5cGVEZWNsYXJhdGlvbiA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNUeXBlVmFyaWFibGUgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzTWl4aW5BcHBsaWNhdGlvbiA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNOYW1lZE1peGluQXBwbGljYXRpb24gPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbiB7CiAgICByZXR1cm4gaXNNaXhpbkFwcGxpY2F0aW9uICYmICFpc05hbWVkTWl4aW5BcHBsaWNhdGlvbjsKICB9CgogIC8vLyBBcHBsaWVzIFtwYXRjaF0gdG8gdGhpcyBkZWNsYXJhdGlvbi4KICB2b2lkIGFwcGx5UGF0Y2goQnVpbGRlciBwYXRjaCkgewogICAgdW5zdXBwb3J0ZWQoIiR7cnVudGltZVR5cGV9LmFwcGx5UGF0Y2giLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGF0Y2hlcyB0aGF0IHdhcyBmaW5pc2hlZC4KICBpbnQgZmluaXNoUGF0Y2goKSB7CiAgICBpZiAoIWlzUGF0Y2gpIHJldHVybiAwOwogICAgdW5zdXBwb3J0ZWQoIiR7cnVudGltZVR5cGV9LmZpbmlzaFBhdGNoIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICByZXR1cm4gMDsKICB9CgogIC8vLyBSZXNvbHZlIGNvbnN0cnVjdG9ycyAobG9va3VwIG5hbWVzIGluIHNjb3BlKSByZWNvcmRlZCBpbiB0aGlzIGJ1aWxkZXIgYW5kCiAgLy8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbnN0cnVjdG9ycyByZXNvbHZlZC4KICBpbnQgcmVzb2x2ZUNvbnN0cnVjdG9ycyhjb3ZhcmlhbnQgQnVpbGRlciBwYXJlbnQpID0+IDA7Cn0KgN4ATk48ARsBLAEZUE0UEAENARYBEwEWAUsBHgEgASABHQEjAR8BHQEdAR4BQgYbBhQdBiEBURMGSDEGFB0aIQwUGiEMGxohDAYpAUUTBksVBhQdGiEMFBohDBs4OAwGIwFOBjEGFD09PQwUPT0MGxohDAYnAVEdBj4GFEcaRwwUGkcMGxpHDAYxAU8dBjEGFEEaQQwUGkEMG0FBDAYrAUsTBiIGFEZGRgwURkYMGxpGDAYvAR0BJgElAR4BHgEhASABJwEkASgBLQEpOwQBKyNDBAE3FhxEDgQBUDI6AgE0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZGVjbGFyYXRpb24uZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9keW5hbWljX3R5cGVfYnVpbGRlci5kYXJ0gnAvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5keW5hbWljX3R5cGVfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGU7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlciwgQnVpbHRpblR5cGVCdWlsZGVyOwoKY2xhc3MgRHluYW1pY1R5cGVCdWlsZGVyIGV4dGVuZHMgQnVpbHRpblR5cGVCdWlsZGVyIHsKICBEeW5hbWljVHlwZUJ1aWxkZXIoCiAgICAgIERhcnRUeXBlIHR5cGUsIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIoImR5bmFtaWMiLCB0eXBlLCBjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRHluYW1pY1R5cGVCdWlsZGVyIjsKfQoTAE5OPAEkATABPwE2FkU9ATACAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9keW5hbWljX3R5cGVfYnVpbGRlci5kYXJ0PnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2VudW1fYnVpbGRlci5kYXJ0sTovLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5lbnVtX2J1aWxkZXI7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBDbGFzc0J1aWxkZXIsIE1ldGFkYXRhQnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIENsYXNzLAogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiwKICAgICAgICBEaXJlY3RQcm9wZXJ0eUdldCwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgSW50TGl0ZXJhbCwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExpc3RMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFN0YXRpY0dldCwKICAgICAgICBTdHJpbmdMaXRlcmFsLAogICAgICAgIFN1cGVySW5pdGlhbGl6ZXIsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVmFyaWFibGVHZXQ7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb24sCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlLAogICAgICAgIHRlbXBsYXRlRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZzsKCmltcG9ydCAnLi4vbW9kaWZpZXIuZGFydCcKICAgIHNob3cKICAgICAgICBjb25zdE1hc2ssCiAgICAgICAgZmluYWxNYXNrLAogICAgICAgIGhhc0luaXRpYWxpemVyTWFzaywKICAgICAgICBpbml0aWFsaXppbmdGb3JtYWxNYXNrLAogICAgICAgIHN0YXRpY01hc2s7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUNsYXNzQnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQnVpbGRlciwKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBDb25zdHJ1Y3RvckJ1aWxkZXIsCiAgICAgICAgRmllbGRCdWlsZGVyLAogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIsCiAgICAgICAgUHJvY2VkdXJlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZW1iZXJCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBTY29wZTsKCmltcG9ydCAnLi4va2VybmVsL21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0JzsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIEVudW1CdWlsZGVyIGV4dGVuZHMgU291cmNlQ2xhc3NCdWlsZGVyIHsKICBmaW5hbCBMaXN0PEVudW1Db25zdGFudEluZm8+IGVudW1Db25zdGFudEluZm9zOwoKICBmaW5hbCBOYW1lZFR5cGVCdWlsZGVyIGludFR5cGU7CgogIGZpbmFsIE5hbWVkVHlwZUJ1aWxkZXIgc3RyaW5nVHlwZTsKCiAgZmluYWwgTmFtZWRUeXBlQnVpbGRlciBvYmplY3RUeXBlOwoKICBmaW5hbCBOYW1lZFR5cGVCdWlsZGVyIGxpc3RUeXBlOwoKICBFbnVtQnVpbGRlci5pbnRlcm5hbCgKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgU2NvcGUgc2NvcGUsCiAgICAgIFNjb3BlIGNvbnN0cnVjdG9ycywKICAgICAgQ2xhc3MgY2xzLAogICAgICB0aGlzLmVudW1Db25zdGFudEluZm9zLAogICAgICB0aGlzLmludFR5cGUsCiAgICAgIHRoaXMubGlzdFR5cGUsCiAgICAgIHRoaXMub2JqZWN0VHlwZSwKICAgICAgdGhpcy5zdHJpbmdUeXBlLAogICAgICBMaWJyYXJ5QnVpbGRlciBwYXJlbnQsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCkKICAgICAgOiBzdXBlcihtZXRhZGF0YSwgMCwgbmFtZSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgc2NvcGUsIGNvbnN0cnVjdG9ycywKICAgICAgICAgICAgcGFyZW50LCBudWxsLCBzdGFydENoYXJPZmZzZXQsIGNoYXJPZmZzZXQsIGNoYXJFbmRPZmZzZXQsCiAgICAgICAgICAgIGNsczogY2xzKTsKCiAgZmFjdG9yeSBFbnVtQnVpbGRlcigKICAgICAgTWV0YWRhdGFDb2xsZWN0b3IgbWV0YWRhdGFDb2xsZWN0b3IsCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8RW51bUNvbnN0YW50SW5mbz4gZW51bUNvbnN0YW50SW5mb3MsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcmVudCwKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0KSB7CiAgICBhc3NlcnQoZW51bUNvbnN0YW50SW5mb3MgPT0gbnVsbCB8fCBlbnVtQ29uc3RhbnRJbmZvcy5pc05vdEVtcHR5KTsKICAgIC8vIFRPRE8oYWhlKTogVGhlc2UgdHlwZXMgc2hvdWxkbid0IGJlIGxvb2tlZCB1cCBpbiBzY29wZSwgdGhleSBjb21lCiAgICAvLyBkaXJlY3RseSBmcm9tIGRhcnQ6Y29yZS4KICAgIFR5cGVCdWlsZGVyIGludFR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiaW50IiwgbnVsbCk7CiAgICBUeXBlQnVpbGRlciBzdHJpbmdUeXBlID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoIlN0cmluZyIsIG51bGwpOwogICAgTmFtZWRUeXBlQnVpbGRlciBvYmplY3RUeXBlID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoIk9iamVjdCIsIG51bGwpOwogICAgQ2xhc3MgY2xzID0gbmV3IENsYXNzKG5hbWU6IG5hbWUpOwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gbWVtYmVycyA9IDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e307CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBjb25zdHJ1Y3RvcnMgPSA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9OwogICAgTmFtZWRUeXBlQnVpbGRlciBzZWxmVHlwZSA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIG51bGwpOwogICAgVHlwZUJ1aWxkZXIgbGlzdFR5cGUgPQogICAgICAgIG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJMaXN0IiwgPFR5cGVCdWlsZGVyPltzZWxmVHlwZV0pOwoKICAgIC8vLyBtZXRhZGF0YSBjbGFzcyBFIHsKICAgIC8vLyAgIGZpbmFsIGludCBpbmRleDsKICAgIC8vLyAgIGZpbmFsIFN0cmluZyBfbmFtZTsKICAgIC8vLyAgIGNvbnN0IEUodGhpcy5pbmRleCwgdGhpcy5fbmFtZSk7CiAgICAvLy8gICBzdGF0aWMgY29uc3QgRSBpZDAgPSBjb25zdCBFKDAsICdFLmlkMCcpOwogICAgLy8vICAgLi4uCiAgICAvLy8gICBzdGF0aWMgY29uc3QgRSBpZG4tMSA9IGNvbnN0IEUobiAtIDEsICdFLmlkbi0xJyk7CiAgICAvLy8gICBzdGF0aWMgY29uc3QgTGlzdDxFPiB2YWx1ZXMgPSBjb25zdCA8RT5baWQwLCAuLi4sIGlkbi0xXTsKICAgIC8vLyAgIFN0cmluZyB0b1N0cmluZygpID0+IF9uYW1lOwogICAgLy8vIH0KCiAgICBtZW1iZXJzWyJpbmRleCJdID0gbmV3IEZpZWxkQnVpbGRlcihudWxsLCBpbnRUeXBlLCAiaW5kZXgiLAogICAgICAgIGZpbmFsTWFzayB8IGhhc0luaXRpYWxpemVyTWFzaywgcGFyZW50LCBjaGFyT2Zmc2V0LCBjaGFyT2Zmc2V0KTsKICAgIG1lbWJlcnNbIl9uYW1lIl0gPSBuZXcgRmllbGRCdWlsZGVyKG51bGwsIHN0cmluZ1R5cGUsICJfbmFtZSIsCiAgICAgICAgZmluYWxNYXNrIHwgaGFzSW5pdGlhbGl6ZXJNYXNrLCBwYXJlbnQsIGNoYXJPZmZzZXQsIGNoYXJPZmZzZXQpOwogICAgQ29uc3RydWN0b3JCdWlsZGVyIGNvbnN0cnVjdG9yQnVpbGRlciA9IG5ldyBDb25zdHJ1Y3RvckJ1aWxkZXIoCiAgICAgICAgbnVsbCwKICAgICAgICBjb25zdE1hc2ssCiAgICAgICAgbnVsbCwKICAgICAgICAiIiwKICAgICAgICBudWxsLAogICAgICAgIDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPlsKICAgICAgICAgIG5ldyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyKG51bGwsIGluaXRpYWxpemluZ0Zvcm1hbE1hc2ssIGludFR5cGUsCiAgICAgICAgICAgICAgImluZGV4IiwgcGFyZW50LCBjaGFyT2Zmc2V0KSwKICAgICAgICAgIG5ldyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyKG51bGwsIGluaXRpYWxpemluZ0Zvcm1hbE1hc2ssIHN0cmluZ1R5cGUsCiAgICAgICAgICAgICAgIl9uYW1lIiwgcGFyZW50LCBjaGFyT2Zmc2V0KQogICAgICAgIF0sCiAgICAgICAgcGFyZW50LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJFbmRPZmZzZXQpOwogICAgY29uc3RydWN0b3JzWyIiXSA9IGNvbnN0cnVjdG9yQnVpbGRlcjsKICAgIEZpZWxkQnVpbGRlciB2YWx1ZXNCdWlsZGVyID0gbmV3IEZpZWxkQnVpbGRlcigKICAgICAgICBudWxsLAogICAgICAgIGxpc3RUeXBlLAogICAgICAgICJ2YWx1ZXMiLAogICAgICAgIGNvbnN0TWFzayB8IHN0YXRpY01hc2sgfCBoYXNJbml0aWFsaXplck1hc2ssCiAgICAgICAgcGFyZW50LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldCk7CiAgICBtZW1iZXJzWyJ2YWx1ZXMiXSA9IHZhbHVlc0J1aWxkZXI7CiAgICBQcm9jZWR1cmVCdWlsZGVyIHRvU3RyaW5nQnVpbGRlciA9IG5ldyBQcm9jZWR1cmVCdWlsZGVyKAogICAgICAgIG51bGwsCiAgICAgICAgMCwKICAgICAgICBzdHJpbmdUeXBlLAogICAgICAgICJ0b1N0cmluZyIsCiAgICAgICAgbnVsbCwKICAgICAgICBudWxsLAogICAgICAgIFByb2NlZHVyZUtpbmQuTWV0aG9kLAogICAgICAgIHBhcmVudCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBjaGFyRW5kT2Zmc2V0KTsKICAgIG1lbWJlcnNbInRvU3RyaW5nIl0gPSB0b1N0cmluZ0J1aWxkZXI7CiAgICBTdHJpbmcgY2xhc3NOYW1lID0gbmFtZTsKICAgIGlmIChlbnVtQ29uc3RhbnRJbmZvcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW51bUNvbnN0YW50SW5mb3MubGVuZ3RoOyBpKyspIHsKICAgICAgICBFbnVtQ29uc3RhbnRJbmZvIGVudW1Db25zdGFudEluZm8gPSBlbnVtQ29uc3RhbnRJbmZvc1tpXTsKICAgICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBlbnVtQ29uc3RhbnRJbmZvLm1ldGFkYXRhOwogICAgICAgIFN0cmluZyBuYW1lID0gZW51bUNvbnN0YW50SW5mby5uYW1lOwogICAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGVudW1Db25zdGFudEluZm8uZG9jdW1lbnRhdGlvbkNvbW1lbnQ7CiAgICAgICAgTWVtYmVyQnVpbGRlciBleGlzdGluZyA9IG1lbWJlcnNbbmFtZV07CiAgICAgICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgICAgIC8vIFRoZSBleGlzdGluZyBkZWNsYXJhdGlvbiBpcyBzeW50aGV0aWMgaWYgaXQgaGFzIHRoZSBzYW1lCiAgICAgICAgICAvLyBjaGFyT2Zmc2V0IGFzIHRoZSBlbmNsb3NpbmcgZW51bS4KICAgICAgICAgIGJvb2wgaXNTeW50aGV0aWMgPSBleGlzdGluZy5jaGFyT2Zmc2V0ID09IGNoYXJPZmZzZXQ7CiAgICAgICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gaXNTeW50aGV0aWMKICAgICAgICAgICAgICA/IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2UKICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5maWxlVXJpLCBjaGFyT2Zmc2V0LCBjbGFzc05hbWUubGVuZ3RoKQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIDogPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZQogICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LmZpbGVVcmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgIHBhcmVudC5hZGRQcm9ibGVtKHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgZW51bUNvbnN0YW50SW5mby5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCwgcGFyZW50LmZpbGVVcmksCiAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICAgICAgICBlbnVtQ29uc3RhbnRJbmZvc1tpXSA9IG51bGw7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09IGNsYXNzTmFtZSkgewogICAgICAgICAgcGFyZW50LmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgdGVtcGxhdGVFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgZW51bUNvbnN0YW50SW5mby5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIG5hbWUubGVuZ3RoLAogICAgICAgICAgICAgIHBhcmVudC5maWxlVXJpKTsKICAgICAgICB9CiAgICAgICAgRmllbGRCdWlsZGVyIGZpZWxkQnVpbGRlciA9IG5ldyBGaWVsZEJ1aWxkZXIoCiAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICBzZWxmVHlwZSwKICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgY29uc3RNYXNrIHwgc3RhdGljTWFzayB8IGhhc0luaXRpYWxpemVyTWFzaywKICAgICAgICAgICAgcGFyZW50LAogICAgICAgICAgICBlbnVtQ29uc3RhbnRJbmZvLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIGVudW1Db25zdGFudEluZm8uY2hhck9mZnNldCk7CiAgICAgICAgbWV0YWRhdGFDb2xsZWN0b3I/LnNldERvY3VtZW50YXRpb25Db21tZW50KAogICAgICAgICAgICBmaWVsZEJ1aWxkZXIudGFyZ2V0LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CiAgICAgICAgbWVtYmVyc1tuYW1lXSA9IGZpZWxkQnVpbGRlci4ubmV4dCA9IGV4aXN0aW5nOwogICAgICB9CiAgICB9CiAgICBmaW5hbCBpbnQgc3RhcnRDaGFyT2Zmc2V0Q29tcHV0ZWQgPQogICAgICAgIG1ldGFkYXRhID09IG51bGwgPyBzdGFydENoYXJPZmZzZXQgOiBtZXRhZGF0YS5maXJzdC5jaGFyT2Zmc2V0OwogICAgRW51bUJ1aWxkZXIgZW51bUJ1aWxkZXIgPSBuZXcgRW51bUJ1aWxkZXIuaW50ZXJuYWwoCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbmFtZSwKICAgICAgICBuZXcgU2NvcGUobWVtYmVycywgbnVsbCwgcGFyZW50LnNjb3BlLCAiZW51bSAkbmFtZSIsCiAgICAgICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpLAogICAgICAgIG5ldyBTY29wZShjb25zdHJ1Y3RvcnMsIG51bGwsIG51bGwsIG5hbWUsIGlzTW9kaWZpYWJsZTogZmFsc2UpLAogICAgICAgIGNscywKICAgICAgICBlbnVtQ29uc3RhbnRJbmZvcywKICAgICAgICBpbnRUeXBlLAogICAgICAgIGxpc3RUeXBlLAogICAgICAgIG9iamVjdFR5cGUsCiAgICAgICAgc3RyaW5nVHlwZSwKICAgICAgICBwYXJlbnQsCiAgICAgICAgc3RhcnRDaGFyT2Zmc2V0Q29tcHV0ZWQsCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBjaGFyRW5kT2Zmc2V0KTsKICAgIHZvaWQgc2V0UGFyZW50KFN0cmluZyBuYW1lLCBNZW1iZXJCdWlsZGVyIGJ1aWxkZXIpIHsKICAgICAgZG8gewogICAgICAgIGJ1aWxkZXIucGFyZW50ID0gZW51bUJ1aWxkZXI7CiAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIubmV4dDsKICAgICAgfSB3aGlsZSAoYnVpbGRlciAhPSBudWxsKTsKICAgIH0KCiAgICBtZW1iZXJzLmZvckVhY2goc2V0UGFyZW50KTsKICAgIGNvbnN0cnVjdG9ycy5mb3JFYWNoKHNldFBhcmVudCk7CiAgICBzZWxmVHlwZS5iaW5kKGVudW1CdWlsZGVyKTsKICAgIHJldHVybiBlbnVtQnVpbGRlcjsKICB9CgogIFR5cGVCdWlsZGVyIGdldCBtaXhlZEluVHlwZSA9PiBudWxsOwoKICBJbnRlcmZhY2VUeXBlIGJ1aWxkVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIHJldHVybiBjbHMucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzIGJ1aWxkKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeSkgewogICAgY2xzLmlzRW51bSA9IHRydWU7CiAgICBpbnRUeXBlLnJlc29sdmVJbihjb3JlTGlicmFyeS5zY29wZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgbGlicmFyeUJ1aWxkZXIpOwogICAgc3RyaW5nVHlwZS5yZXNvbHZlSW4oCiAgICAgICAgY29yZUxpYnJhcnkuc2NvcGUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGxpYnJhcnlCdWlsZGVyKTsKICAgIG9iamVjdFR5cGUucmVzb2x2ZUluKAogICAgICAgIGNvcmVMaWJyYXJ5LnNjb3BlLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBsaWJyYXJ5QnVpbGRlcik7CiAgICBsaXN0VHlwZS5yZXNvbHZlSW4oY29yZUxpYnJhcnkuc2NvcGUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGxpYnJhcnlCdWlsZGVyKTsKCiAgICBGaWVsZEJ1aWxkZXIgaW5kZXhGaWVsZEJ1aWxkZXIgPSBmaXJzdE1lbWJlck5hbWVkKCJpbmRleCIpOwogICAgRmllbGQgaW5kZXhGaWVsZCA9IGluZGV4RmllbGRCdWlsZGVyLmJ1aWxkKGxpYnJhcnlCdWlsZGVyKTsKICAgIEZpZWxkQnVpbGRlciBuYW1lRmllbGRCdWlsZGVyID0gZmlyc3RNZW1iZXJOYW1lZCgiX25hbWUiKTsKICAgIEZpZWxkIG5hbWVGaWVsZCA9IG5hbWVGaWVsZEJ1aWxkZXIuYnVpbGQobGlicmFyeUJ1aWxkZXIpOwogICAgUHJvY2VkdXJlQnVpbGRlciB0b1N0cmluZ0J1aWxkZXIgPSBmaXJzdE1lbWJlck5hbWVkKCJ0b1N0cmluZyIpOwogICAgdG9TdHJpbmdCdWlsZGVyLmJvZHkgPSBuZXcgUmV0dXJuU3RhdGVtZW50KAogICAgICAgIG5ldyBEaXJlY3RQcm9wZXJ0eUdldChuZXcgVGhpc0V4cHJlc3Npb24oKSwgbmFtZUZpZWxkKSk7CiAgICBMaXN0PEV4cHJlc3Npb24+IHZhbHVlcyA9IDxFeHByZXNzaW9uPltdOwogICAgaWYgKGVudW1Db25zdGFudEluZm9zICE9IG51bGwpIHsKICAgICAgZm9yIChFbnVtQ29uc3RhbnRJbmZvIGVudW1Db25zdGFudEluZm8gaW4gZW51bUNvbnN0YW50SW5mb3MpIHsKICAgICAgICBpZiAoZW51bUNvbnN0YW50SW5mbyAhPSBudWxsKSB7CiAgICAgICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gZmlyc3RNZW1iZXJOYW1lZChlbnVtQ29uc3RhbnRJbmZvLm5hbWUpOwogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlzRmllbGQpIHsKICAgICAgICAgICAgRmllbGRCdWlsZGVyIGZpZWxkID0gZGVjbGFyYXRpb247CiAgICAgICAgICAgIHZhbHVlcy5hZGQobmV3IFN0YXRpY0dldChmaWVsZC5idWlsZChsaWJyYXJ5QnVpbGRlcikpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIEZpZWxkQnVpbGRlciB2YWx1ZXNCdWlsZGVyID0gZmlyc3RNZW1iZXJOYW1lZCgidmFsdWVzIik7CiAgICB2YWx1ZXNCdWlsZGVyLmJ1aWxkKGxpYnJhcnlCdWlsZGVyKTsKICAgIHZhbHVlc0J1aWxkZXIuaW5pdGlhbGl6ZXIgPQogICAgICAgIG5ldyBMaXN0TGl0ZXJhbCh2YWx1ZXMsIHR5cGVBcmd1bWVudDogY2xzLnJhd1R5cGUsIGlzQ29uc3Q6IHRydWUpOwogICAgQ29uc3RydWN0b3JCdWlsZGVyIGNvbnN0cnVjdG9yQnVpbGRlciA9IGNvbnN0cnVjdG9yU2NvcGVCdWlsZGVyWyIiXTsKICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JCdWlsZGVyLmJ1aWxkKGxpYnJhcnlCdWlsZGVyKTsKICAgIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5pbnNlcnQoCiAgICAgICAgMCwKICAgICAgICBuZXcgRmllbGRJbml0aWFsaXplcihpbmRleEZpZWxkLAogICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQoY29uc3RydWN0b3IuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbMF0pKQogICAgICAgICAgLi5wYXJlbnQgPSBjb25zdHJ1Y3Rvcik7CiAgICBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMuaW5zZXJ0KAogICAgICAgIDEsCiAgICAgICAgbmV3IEZpZWxkSW5pdGlhbGl6ZXIobmFtZUZpZWxkLAogICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQoY29uc3RydWN0b3IuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbMV0pKQogICAgICAgICAgLi5wYXJlbnQgPSBjb25zdHJ1Y3Rvcik7CiAgICBDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MgPSBvYmplY3RUeXBlLmRlY2xhcmF0aW9uOwogICAgTWVtYmVyQnVpbGRlciBzdXBlckNvbnN0cnVjdG9yID0gb2JqZWN0Q2xhc3MuZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5KAogICAgICAgICIiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBsaWJyYXJ5QnVpbGRlcik7CiAgICBpZiAoc3VwZXJDb25zdHJ1Y3RvciA9PSBudWxsIHx8ICFzdXBlckNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBJZGVhbGx5LCB3ZSB3b3VsZCBhbHNvIHdhbnQgdG8gY2hlY2sgdGhhdCBbT2JqZWN0XSdzCiAgICAgIC8vIHVubmFtZWQgY29uc3RydWN0b3IgcmVxdWlyZXMgbm8gYXJndW1lbnRzLiBCdXQgdGhhdCBpbmZvcm1hdGlvbiBpc24ndAogICAgICAvLyBhbHdheXMgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQsIGFuZCBpdCdzIG5vdCByZWFsbHkgYSBzaXR1YXRpb24gdGhhdAogICAgICAvLyBjYW4gaGFwcGVuIHVubGVzcyB5b3Ugc3RhcnQgbW9kaWZ5aW5nIHRoZSBTREsgc291cmNlcy4KICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2VOb1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0LAogICAgICAgICAgb2JqZWN0Q2xhc3MuY2hhck9mZnNldCwgb2JqZWN0Q2xhc3MubmFtZS5sZW5ndGgsIG9iamVjdENsYXNzLmZpbGVVcmkpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmFkZCgKICAgICAgICAgIG5ldyBTdXBlckluaXRpYWxpemVyKHN1cGVyQ29uc3RydWN0b3IudGFyZ2V0LCBuZXcgQXJndW1lbnRzLmVtcHR5KCkpCiAgICAgICAgICAgIC4ucGFyZW50ID0gY29uc3RydWN0b3IpOwogICAgfQogICAgaW50IGluZGV4ID0gMDsKICAgIGlmIChlbnVtQ29uc3RhbnRJbmZvcyAhPSBudWxsKSB7CiAgICAgIGZvciAoRW51bUNvbnN0YW50SW5mbyBlbnVtQ29uc3RhbnRJbmZvIGluIGVudW1Db25zdGFudEluZm9zKSB7CiAgICAgICAgaWYgKGVudW1Db25zdGFudEluZm8gIT0gbnVsbCkgewogICAgICAgICAgU3RyaW5nIGNvbnN0YW50ID0gZW51bUNvbnN0YW50SW5mby5uYW1lOwogICAgICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGZpcnN0TWVtYmVyTmFtZWQoY29uc3RhbnQpOwogICAgICAgICAgRmllbGRCdWlsZGVyIGZpZWxkOwogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlzRmllbGQpIHsKICAgICAgICAgICAgZmllbGQgPSBkZWNsYXJhdGlvbjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cyA9IG5ldyBBcmd1bWVudHMoPEV4cHJlc3Npb24+WwogICAgICAgICAgICBuZXcgSW50TGl0ZXJhbChpbmRleCsrKSwKICAgICAgICAgICAgbmV3IFN0cmluZ0xpdGVyYWwoIiRuYW1lLiRjb25zdGFudCIpCiAgICAgICAgICBdKTsKICAgICAgICAgIGZpZWxkLmluaXRpYWxpemVyID0KICAgICAgICAgICAgICBuZXcgQ29uc3RydWN0b3JJbnZvY2F0aW9uKGNvbnN0cnVjdG9yLCBhcmd1bWVudHMsIGlzQ29uc3Q6IHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVyLmJ1aWxkKGxpYnJhcnlCdWlsZGVyLCBjb3JlTGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGZpbmRDb25zdHJ1Y3Rvck9yRmFjdG9yeSgKICAgICAgU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIEVudW1Db25zdGFudEluZm8gewogIGZpbmFsIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YTsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKICBmaW5hbCBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQ7CiAgY29uc3QgRW51bUNvbnN0YW50SW5mbygKICAgICAgdGhpcy5tZXRhZGF0YSwgdGhpcy5uYW1lLCB0aGlzLmNoYXJPZmZzZXQsIHRoaXMuZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwp9CoFqAE5OPAEcAToBIQkTDxUfGxQPGhQXFRcZExcaGBUBHQkYLScsNTEBGgkTExwgFAFGAScJESAWHBYaGhUYFxkPASwBSgEvMgEiASUBJQEjARgmExMaER4UFRcXHRsWGU5GFwEXKyYTMCMbFhtHSSA9Q0gnRElCGz8BGxseKzQOPEQmCgFASUNJRA4TDgwOIkwsTysLEBQUFBgrMw4SEjUQFBUnPQ4LFBQODh4QFBQUGCsdJTtCRC1NMCBGL0A1Ij4rJUgSIjUrJUwTT0ghJygdSysbHwo2FhYSORQpKjQ4NwgGKEg4Eg49IkgNGxESFBQQIRQYOQsmICEGASAlIBgEAScBURgEAQxRF08aQRpBUAFAQD8+RTBBLiVFKEklLkQMCggGPSkgS0lIJQspSyMlCyhLIzdLMkdJT05APlENJE8lBhMlRSgzPB4lIRMWDDwlMQ4eUAoIBjUEAQwkRhEEAgEZKBUYJRpNAgE1cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZW51bV9idWlsZGVyLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvZmllbGRfYnVpbGRlci5kYXJ0oNwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5maWVsZF9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZSwgRXhwcmVzc2lvbjsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IExpYnJhcnlCdWlsZGVyLCBNZW1iZXJCdWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cgQ2xhc3MsIERhcnRUeXBlLCBFeHByZXNzaW9uLCBGaWVsZCwgSW52YWxpZFR5cGUsIE5hbWUsIE51bGxMaXRlcmFsOwoKaW1wb3J0ICcuLi9jb25zdGFudF9jb250ZXh0LmRhcnQnIHNob3cgQ29uc3RhbnRDb250ZXh0OwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWQsCiAgICAgICAgdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9DaXJjdWxhcml0eTsKCmltcG9ydCAnLi4va2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0JyBzaG93IEJvZHlCdWlsZGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgQnVpbGRlciwKICAgICAgICBJbXBsaWNpdEZpZWxkVHlwZSwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXI7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgaW50ZXJuYWxQcm9ibGVtOwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgU2NvcGU7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbG9hZGVyLmRhcnQnIHNob3cgU291cmNlTG9hZGVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVyZW5jZV9lbmdpbmUuZGFydCcKICAgIHNob3cgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5LCBWYXJpYW5jZTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcnJlci5kYXJ0JyBzaG93IFR5cGVJbmZlcnJlckltcGw7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hLmRhcnQnIHNob3cgVW5rbm93blR5cGU7CgppbXBvcnQgJ2V4dGVuc2lvbl9idWlsZGVyLmRhcnQnOwoKY2xhc3MgRmllbGRCdWlsZGVyIGV4dGVuZHMgTWVtYmVyQnVpbGRlciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIGZpbmFsIGludCBtb2RpZmllcnM7CgogIGZpbmFsIEZpZWxkIGZpZWxkOwogIGZpbmFsIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YTsKICBmaW5hbCBUeXBlQnVpbGRlciB0eXBlOwogIFRva2VuIGNvbnN0SW5pdGlhbGl6ZXJUb2tlbjsKCiAgYm9vbCBoYWRUeXBlc0luZmVycmVkID0gZmFsc2U7CgogIEZpZWxkQnVpbGRlcih0aGlzLm1ldGFkYXRhLCB0aGlzLnR5cGUsIHRoaXMubmFtZSwgdGhpcy5tb2RpZmllcnMsCiAgICAgIEJ1aWxkZXIgY29tcGlsYXRpb25Vbml0LCBpbnQgY2hhck9mZnNldCwgaW50IGNoYXJFbmRPZmZzZXQpCiAgICAgIDogZmllbGQgPSBuZXcgRmllbGQobnVsbCwgZmlsZVVyaTogY29tcGlsYXRpb25Vbml0Py5maWxlVXJpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldAogICAgICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gY2hhckVuZE9mZnNldCwKICAgICAgICBzdXBlcihjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRmllbGRCdWlsZGVyIjsKCiAgYm9vbCBnZXQgaXNGaWVsZCA9PiB0cnVlOwoKICB2b2lkIHNldCBpbml0aWFsaXplcihFeHByZXNzaW9uIHZhbHVlKSB7CiAgICBpZiAoIWhhc0luaXRpYWxpemVyICYmIHZhbHVlIGlzISBOdWxsTGl0ZXJhbCAmJiAhaXNDb25zdCAmJiAhaXNGaW5hbCkgewogICAgICBpbnRlcm5hbFByb2JsZW0oCiAgICAgICAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQWxyZWFkeUluaXRpYWxpemVkLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICAgIGZpZWxkLmluaXRpYWxpemVyID0gdmFsdWUuLnBhcmVudCA9IGZpZWxkOwogIH0KCiAgYm9vbCBnZXQgaXNFbGlnaWJsZUZvckluZmVyZW5jZSB7CiAgICByZXR1cm4gIWxpYnJhcnkubGVnYWN5TW9kZSAmJgogICAgICAgIHR5cGUgPT0gbnVsbCAmJgogICAgICAgIChoYXNJbml0aWFsaXplciB8fCBpc0NsYXNzSW5zdGFuY2VNZW1iZXIpOwogIH0KCiAgRmllbGQgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgZmllbGQKICAgICAgLi5pc0NvdmFyaWFudCA9IGlzQ292YXJpYW50CiAgICAgIC4uaXNGaW5hbCA9IGlzRmluYWwKICAgICAgLi5pc0NvbnN0ID0gaXNDb25zdAogICAgICAuLmlzTGF0ZSA9IGlzTGF0ZTsKICAgIGlmIChpc0V4dGVuc2lvbk1lbWJlcikgewogICAgICBFeHRlbnNpb25CdWlsZGVyIGV4dGVuc2lvbiA9IHBhcmVudDsKICAgICAgZmllbGQubmFtZSA9IG5ldyBOYW1lKCcke2V4dGVuc2lvbi5uYW1lfXwkbmFtZScsIGxpYnJhcnkudGFyZ2V0KTsKICAgICAgZmllbGQKICAgICAgICAuLmhhc0ltcGxpY2l0R2V0dGVyID0gZmFsc2UKICAgICAgICAuLmhhc0ltcGxpY2l0U2V0dGVyID0gZmFsc2UKICAgICAgICAuLmlzU3RhdGljID0gdHJ1ZQogICAgICAgIC4uaXNFeHRlbnNpb25NZW1iZXIgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSG93IGNhbiB0aGUgbmFtZSBhbHJlYWR5IGhhdmUgYmVlbiBjb21wdXRlZC4KICAgICAgZmllbGQubmFtZSA/Pz0gbmV3IE5hbWUobmFtZSwgbGlicmFyeS50YXJnZXQpOwogICAgICBib29sIGlzSW5zdGFuY2VNZW1iZXIgPSAhaXNTdGF0aWMgJiYgIWlzVG9wTGV2ZWw7CiAgICAgIGZpZWxkCiAgICAgICAgLi5oYXNJbXBsaWNpdEdldHRlciA9IGlzSW5zdGFuY2VNZW1iZXIKICAgICAgICAuLmhhc0ltcGxpY2l0U2V0dGVyID0gaXNJbnN0YW5jZU1lbWJlciAmJiAhaXNDb25zdCAmJiAhaXNGaW5hbAogICAgICAgIC4uaXNTdGF0aWMgPSAhaXNJbnN0YW5jZU1lbWJlcgogICAgICAgIC4uaXNFeHRlbnNpb25NZW1iZXIgPSBmYWxzZTsKICAgIH0KICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgZmllbGQudHlwZSA9IHR5cGUuYnVpbGQobGlicmFyeSk7CgogICAgICBpZiAoIWlzRmluYWwgJiYgIWlzQ29uc3QpIHsKICAgICAgICBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkgbmVlZHNDaGVja1Zpc2l0b3I7CiAgICAgICAgaWYgKHBhcmVudCBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICAgIENsYXNzIGVuY2xvc2luZ0NsYXNzID0gcGFyZW50LnRhcmdldDsKICAgICAgICAgIGlmIChlbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgICAgIG5lZWRzQ2hlY2tWaXNpdG9yID0gbmV3IEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSgKICAgICAgICAgICAgICAgIGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICAgICAgLy8gV2UgYXJlIGNoZWNraW5nIHRoZSBmaWVsZCB0eXBlIGFzIGlmIGl0IGlzIHRoZSB0eXBlIG9mIHRoZQogICAgICAgICAgICAgICAgLy8gcGFyYW1ldGVyIG9mIHRoZSBpbXBsaWNpdCBzZXR0ZXIgYW5kIHRoaXMgaXMgYSBjb250cmF2YXJpYW50CiAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbi4KICAgICAgICAgICAgICAgIGluaXRpYWxWYXJpYW5jZTogVmFyaWFuY2UuY29udHJhdmFyaWFudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChuZWVkc0NoZWNrVmlzaXRvciAhPSBudWxsKSB7CiAgICAgICAgICBpZiAoZmllbGQudHlwZS5hY2NlcHQobmVlZHNDaGVja1Zpc2l0b3IpKSB7CiAgICAgICAgICAgIGZpZWxkLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGZpZWxkOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBidWlsZE91dGxpbmVFeHByZXNzaW9ucyhMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyID0gaXNDbGFzc01lbWJlciA/IHBhcmVudCA6IG51bGw7CiAgICBNZXRhZGF0YUJ1aWxkZXIuYnVpbGRBbm5vdGF0aW9ucygKICAgICAgICBmaWVsZCwgbWV0YWRhdGEsIGxpYnJhcnksIGNsYXNzQnVpbGRlciwgdGhpcyk7CgogICAgLy8gRm9yIG1vZHVsYXIgY29tcGlsYXRpb24gd2UgbmVlZCB0byBpbmNsdWRlIGluaXRpYWxpemVycyBvZiBhbGwgY29uc3QKICAgIC8vIGZpZWxkcyBhbmQgYWxsIG5vbi1zdGF0aWMgZmluYWwgZmllbGRzIGluIGNsYXNzZXMgd2l0aCBjb25zdCBjb25zdHJ1Y3RvcnMKICAgIC8vIGludG8gdGhlIG91dGxpbmUuCiAgICBpZiAoKGlzQ29uc3QgfHwKICAgICAgICAgICAgKGlzRmluYWwgJiYKICAgICAgICAgICAgICAgICFpc1N0YXRpYyAmJgogICAgICAgICAgICAgICAgaXNDbGFzc01lbWJlciAmJgogICAgICAgICAgICAgICAgY2xhc3NCdWlsZGVyLmhhc0NvbnN0Q29uc3RydWN0b3IpKSAmJgogICAgICAgIGNvbnN0SW5pdGlhbGl6ZXJUb2tlbiAhPSBudWxsKSB7CiAgICAgIFNjb3BlIHNjb3BlID0gY2xhc3NCdWlsZGVyPy5zY29wZSA/PyBsaWJyYXJ5LnNjb3BlOwogICAgICBCb2R5QnVpbGRlciBib2R5QnVpbGRlciA9IG5ldyBCb2R5QnVpbGRlci5mb3JPdXRsaW5lRXhwcmVzc2lvbigKICAgICAgICAgIGxpYnJhcnksIGNsYXNzQnVpbGRlciwgdGhpcywgc2NvcGUsIGZpbGVVcmkpOwogICAgICBib2R5QnVpbGRlci5jb25zdGFudENvbnRleHQgPQogICAgICAgICAgaXNDb25zdCA/IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZCA6IENvbnN0YW50Q29udGV4dC5ub25lOwogICAgICBpbml0aWFsaXplciA9IGJvZHlCdWlsZGVyLnBhcnNlRmllbGRJbml0aWFsaXplcihjb25zdEluaXRpYWxpemVyVG9rZW4pCiAgICAgICAgLi5wYXJlbnQgPSBmaWVsZDsKICAgICAgYm9keUJ1aWxkZXIudHlwZUluZmVycmVyCiAgICAgICAgICA/LmluZmVyRmllbGRJbml0aWFsaXplcihib2R5QnVpbGRlciwgZmllbGQudHlwZSwgZmllbGQuaW5pdGlhbGl6ZXIpOwogICAgICBpZiAobGlicmFyeS5sb2FkZXIgaXMgU291cmNlTG9hZGVyKSB7CiAgICAgICAgU291cmNlTG9hZGVyIGxvYWRlciA9IGxpYnJhcnkubG9hZGVyOwogICAgICAgIGxvYWRlci50cmFuc2Zvcm1Qb3N0SW5mZXJlbmNlKGZpZWxkLCBib2R5QnVpbGRlci50cmFuc2Zvcm1TZXRMaXRlcmFscywKICAgICAgICAgICAgYm9keUJ1aWxkZXIudHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgICB9CiAgICAgIGJvZHlCdWlsZGVyLnJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzKCk7CiAgICB9CiAgICBjb25zdEluaXRpYWxpemVyVG9rZW4gPSBudWxsOwogIH0KCiAgRmllbGQgZ2V0IHRhcmdldCA9PiBmaWVsZDsKCiAgQG92ZXJyaWRlCiAgdm9pZCBpbmZlclR5cGUoKSB7CiAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gdGhpcy5saWJyYXJ5OwogICAgaWYgKGZpZWxkLnR5cGUgaXMhIEltcGxpY2l0RmllbGRUeXBlKSB7CiAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBpbmZlcnJlZCBhIHR5cGUuCiAgICAgIHJldHVybjsKICAgIH0KICAgIEltcGxpY2l0RmllbGRUeXBlIHR5cGUgPSBmaWVsZC50eXBlOwogICAgaWYgKHR5cGUubWVtYmVyICE9IHRoaXMpIHsKICAgICAgLy8gVGhlIGltcGxpY2l0IHR5cGUgd2FzIGluaGVyaXRlZC4KICAgICAgRmllbGRCdWlsZGVyIG90aGVyID0gdHlwZS5tZW1iZXI7CiAgICAgIG90aGVyLmluZmVyQ29waWVkVHlwZShmaWVsZCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0eXBlLmlzU3RhcnRlZCkgewogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgbmFtZS5sZW5ndGgsCiAgICAgICAgICBmaWxlVXJpKTsKICAgICAgZmllbGQudHlwZSA9IGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHR5cGUuaXNTdGFydGVkID0gdHJ1ZTsKICAgIFR5cGVJbmZlcnJlckltcGwgdHlwZUluZmVycmVyID0gbGlicmFyeS5sb2FkZXIudHlwZUluZmVyZW5jZUVuZ2luZQogICAgICAgIC5jcmVhdGVUb3BMZXZlbFR5cGVJbmZlcnJlcigKICAgICAgICAgICAgZmlsZVVyaSwgZmllbGQuZW5jbG9zaW5nQ2xhc3M/LnRoaXNUeXBlLCBudWxsKTsKICAgIEJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyID0gbmV3IEJvZHlCdWlsZGVyLmZvckZpZWxkKHRoaXMsIHR5cGVJbmZlcnJlcik7CiAgICBib2R5QnVpbGRlci5jb25zdGFudENvbnRleHQgPQogICAgICAgIGlzQ29uc3QgPyBDb25zdGFudENvbnRleHQuaW5mZXJyZWQgOiBDb25zdGFudENvbnRleHQubm9uZTsKICAgIGluaXRpYWxpemVyID0gYm9keUJ1aWxkZXIucGFyc2VGaWVsZEluaXRpYWxpemVyKHR5cGUuaW5pdGlhbGl6ZXJUb2tlbik7CiAgICB0eXBlLmluaXRpYWxpemVyVG9rZW4gPSBudWxsOwoKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9IHR5cGVJbmZlcnJlci5pbmZlckRlY2xhcmF0aW9uVHlwZSh0eXBlSW5mZXJyZXIKICAgICAgICAuaW5mZXJFeHByZXNzaW9uKGZpZWxkLmluaXRpYWxpemVyLCBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKSk7CgogICAgaWYgKGZpZWxkLnR5cGUgaXMgSW1wbGljaXRGaWVsZFR5cGUpIHsKICAgICAgLy8gYGZpZWxkLnR5cGVgIG1heSBoYXZlIGNoYW5nZWQgaWYgYSBjaXJjdWxhcml0eSB3YXMgZGV0ZWN0ZWQgd2hlbgogICAgICAvLyBbaW5mZXJyZWRUeXBlXSB3YXMgY29tcHV0ZWQuCiAgICAgIGZpZWxkLnR5cGUgPSBpbmZlcnJlZFR5cGU7CgogICAgICBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkgbmVlZHNDaGVja1Zpc2l0b3I7CiAgICAgIGlmIChwYXJlbnQgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgQ2xhc3MgZW5jbG9zaW5nQ2xhc3MgPSBwYXJlbnQudGFyZ2V0OwogICAgICAgIGlmIChlbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBuZWVkc0NoZWNrVmlzaXRvciA9IG5ldyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgICAgZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgLy8gV2UgYXJlIGNoZWNraW5nIHRoZSBmaWVsZCB0eXBlIGFzIGlmIGl0IGlzIHRoZSB0eXBlIG9mIHRoZQogICAgICAgICAgICAgIC8vIHBhcmFtZXRlciBvZiB0aGUgaW1wbGljaXQgc2V0dGVyIGFuZCB0aGlzIGlzIGEgY29udHJhdmFyaWFudAogICAgICAgICAgICAgIC8vIHBvc2l0aW9uLgogICAgICAgICAgICAgIGluaXRpYWxWYXJpYW5jZTogVmFyaWFuY2UuY29udHJhdmFyaWFudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChuZWVkc0NoZWNrVmlzaXRvciAhPSBudWxsKSB7CiAgICAgICAgaWYgKGZpZWxkLnR5cGUuYWNjZXB0KG5lZWRzQ2hlY2tWaXNpdG9yKSkgewogICAgICAgICAgZmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gVGhlIGZvbGxvd2luZyBpcyBhIGhhY2suIFRoZSBvdXRsaW5lIHNob3VsZCBjb250YWluIHRoZSBjb21waWxlZAogICAgLy8gaW5pdGlhbGl6ZXJzLCBob3dldmVyLCBhcyB0b3AtbGV2ZWwgaW5mZXJlbmNlIGlzIHN1YnRseSBkaWZmZXJlbnQgZnJvbQogICAgLy8gd2UgbmVlZCB0byBjb21waWxlIHRoZSBmaWVsZCBpbml0aWFsaXplciBhZ2FpbiB3aGVuIGV2ZXJ5dGhpbmcgZWxzZSBpcwogICAgLy8gY29tcGlsZWQuCiAgICBmaWVsZC5pbml0aWFsaXplciA9IG51bGw7CiAgfQoKICB2b2lkIGluZmVyQ29waWVkVHlwZShGaWVsZCBvdGhlcikgewogICAgaW5mZXJUeXBlKCk7CiAgICBvdGhlci50eXBlID0gZmllbGQudHlwZTsKICAgIG90aGVyLmluaXRpYWxpemVyID0gbnVsbDsKICB9CgogIERhcnRUeXBlIGdldCBidWlsdFR5cGUgPT4gZmllbGQudHlwZTsKfQqA+wBOTjwBHQE8AToBIU0BOAEdCTIvATcBJwkWERsVGBkBMAElASMBSgE5ATY5AUUBPgEhASsVARcBFSgaHwEhAURCQyQrLAEqARwBK0wXSgYvBAEkIhgzBAEuCiIaGhkdK0gMJCQaJA1LNTgML0cnJQYYKAEiQCYwOkovTlAdOgwKKTYxDAoIBhIEAQw5PyY3AUxRGRQYHSE2KTpGOCRFTRofTywuTy8INgYiBAEdAQwVMSwqDgYpHyooJA4GGhpFFhcUKA4GG0clPEwiQ0wiAUtHIwErSiYhAT4kLjhILUxOGzgKCCc0LwoIBgFITk4RHgQBJhEdHgQBKAIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2ZpZWxkX2J1aWxkZXIuZGFydEpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9mb3JtYWxfcGFyYW1ldGVyX2J1aWxkZXIuZGFydJe7Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZm9ybWFsX3BhcmFtZXRlcl9idWlsZGVyOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcgc2hvdyBGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICcuLi9wYXJzZXIvZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnQnCiAgICBzaG93CiAgICAgICAgaXNNYW5kYXRvcnlGb3JtYWxQYXJhbWV0ZXJLaW5kLAogICAgICAgIGlzT3B0aW9uYWxOYW1lZEZvcm1hbFBhcmFtZXRlcktpbmQsCiAgICAgICAgaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnCiAgICBzaG93IExpYnJhcnlCdWlsZGVyLCBNZXRhZGF0YUJ1aWxkZXIsIE1vZGlmaWVyQnVpbGRlciwgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnIHNob3cgZmluYWxNYXNrLCBpbml0aWFsaXppbmdGb3JtYWxNYXNrLCByZXF1aXJlZE1hc2s7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBTY29wZTsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgQ29uc3RydWN0b3JCdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfc2hhZG93X2FzdC5kYXJ0JyBzaG93IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudDsKCi8vLyBBIGJ1aWxkZXIgZm9yIGEgZm9ybWFsIHBhcmFtZXRlciwgaS5lLiBhIHBhcmFtZXRlciBvbiBhIG1ldGhvZCBvcgovLy8gY29uc3RydWN0b3IuCmNsYXNzIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZXh0ZW5kcyBNb2RpZmllckJ1aWxkZXIgewogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGJ1aWxkZXJzIGZvciB0aGUgbWV0YWRhdGEgZGVjbGFyZWQgb24gdGhpcyBwYXJhbWV0ZXIuCiAgZmluYWwgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhOwoKICBmaW5hbCBpbnQgbW9kaWZpZXJzOwoKICBmaW5hbCBUeXBlQnVpbGRlciB0eXBlOwoKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFRoZSBraW5kIG9mIHRoaXMgcGFyYW1ldGVyLCBpLmUuIGlmIGl0J3MgcmVxdWlyZWQsIHBvc2l0aW9uYWwgb3B0aW9uYWwsCiAgLy8vIG9yIG5hbWVkIG9wdGlvbmFsLgogIEZvcm1hbFBhcmFtZXRlcktpbmQga2luZCA9IEZvcm1hbFBhcmFtZXRlcktpbmQubWFuZGF0b3J5OwoKICAvLy8gVGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGNyZWF0ZWQgZm9yIHRoaXMgZm9ybWFsIHBhcmFtZXRlci4KICBWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwoKICAvLy8gVGhlIGZpcnN0IHRva2VuIG9mIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBhbnkuCiAgLy8vCiAgLy8vIFRoaXMgaXMgc3RvcmVkIHVudGlsIG91dGxpbmVzIGhhdmUgYmVlbiBidWlsdCB0aHJvdWdoCiAgLy8vIFtidWlsZE91dGxpbmVFeHByZXNzaW9uc10uCiAgVG9rZW4gaW5pdGlhbGl6ZXJUb2tlbjsKCiAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcih0aGlzLm1ldGFkYXRhLCB0aGlzLm1vZGlmaWVycywgdGhpcy50eXBlLCB0aGlzLm5hbWUsCiAgICAgIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIoY29tcGlsYXRpb25Vbml0LCBjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkZvcm1hbFBhcmFtZXRlckJ1aWxkZXIiOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDbGVhbnVwIGBpc1JlcXVpcmVkYCBzZW1hbnRpY3MgaW4gZmFjZSBvZiByZXF1aXJlZAogIC8vIG5hbWVkIHBhcmFtZXRlcnMuCiAgYm9vbCBnZXQgaXNSZXF1aXJlZCA9PiBpc01hbmRhdG9yeUZvcm1hbFBhcmFtZXRlcktpbmQoa2luZCk7CgogIGJvb2wgZ2V0IGlzTmFtZWRSZXF1aXJlZCA9PiAobW9kaWZpZXJzICYgcmVxdWlyZWRNYXNrKSAhPSAwOwoKICBib29sIGdldCBpc1Bvc2l0aW9uYWwgewogICAgcmV0dXJuIGlzT3B0aW9uYWxQb3NpdGlvbmFsRm9ybWFsUGFyYW1ldGVyS2luZChraW5kKSB8fAogICAgICAgIGlzTWFuZGF0b3J5Rm9ybWFsUGFyYW1ldGVyS2luZChraW5kKTsKICB9CgogIGJvb2wgZ2V0IGlzTmFtZWQgPT4gaXNPcHRpb25hbE5hbWVkRm9ybWFsUGFyYW1ldGVyS2luZChraW5kKTsKCiAgYm9vbCBnZXQgaXNPcHRpb25hbCA9PiAhaXNSZXF1aXJlZDsKCiAgYm9vbCBnZXQgaXNMb2NhbCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gZ2V0IHRhcmdldCA9PiBkZWNsYXJhdGlvbjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBidWlsZCgKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCkgewogICAgICBkZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQobmFtZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgICAgICB0eXBlOiB0eXBlPy5idWlsZChsaWJyYXJ5KSwKICAgICAgICAgIGlzRmluYWw6IGlzRmluYWwsCiAgICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgICAgaXNGaWVsZEZvcm1hbDogaXNJbml0aWFsaXppbmdGb3JtYWwsCiAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQsCiAgICAgICAgICBpc1JlcXVpcmVkOiBpc05hbWVkUmVxdWlyZWQpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIH0KICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgY2xvbmUoTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMpIHsKICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiAgSXQncyBub3QgY2xlYXIgaG93IFttZXRhZGF0YV0gaXMgdXNlZCBjdXJyZW50bHksIGFuZAogICAgLy8gaG93IGl0IHNob3VsZCBiZSBjbG9uZWQuICBDb25zaWRlciBjbG9uaW5nIGl0IGluc3RlYWQgb2YgcmV1c2luZyBpdC4KICAgIHJldHVybiBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcigKICAgICAgICBtZXRhZGF0YSwgbW9kaWZpZXJzLCB0eXBlPy5jbG9uZShuZXdUeXBlcyksIG5hbWUsIHBhcmVudCwgY2hhck9mZnNldCkKICAgICAgLi5raW5kID0ga2luZDsKICB9CgogIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9yRm9ybWFsUGFyYW1ldGVySW5pdGlhbGl6ZXJTY29wZSgpIHsKICAgIGFzc2VydChkZWNsYXJhdGlvbiAhPSBudWxsKTsKICAgIHJldHVybiAhaXNJbml0aWFsaXppbmdGb3JtYWwKICAgICAgICA/IHRoaXMKICAgICAgICA6IChuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcigKICAgICAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgICAgIG1vZGlmaWVycyB8IGZpbmFsTWFzayB8IGluaXRpYWxpemluZ0Zvcm1hbE1hc2ssCiAgICAgICAgICAgIHR5cGUsCiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIGNoYXJPZmZzZXQpCiAgICAgICAgICAuLnBhcmVudCA9IHBhcmVudAogICAgICAgICAgLi5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uKTsKICB9CgogIHZvaWQgZmluYWxpemVJbml0aWFsaXppbmdGb3JtYWwoKSB7CiAgICBPYmplY3QgY2xzID0gcGFyZW50LnBhcmVudDsKICAgIGlmIChjbHMgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIEJ1aWxkZXIgZmllbGQgPSBjbHMuc2NvcGUubG9va3VwKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICBpZiAoZmllbGQgaXMgRmllbGRCdWlsZGVyKSB7CiAgICAgICAgdGFyZ2V0LnR5cGUgPSBmaWVsZC50YXJnZXQudHlwZTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIEJ1aWxkcyB0aGUgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoaXMgW2luaXRpYWxpemVyVG9rZW5dIGlmIHRoaXMgaXMgYQogIC8vLyBmb3JtYWwgcGFyYW1ldGVyIG9uIGEgY29uc3QgY29uc3RydWN0b3Igb3IgaW5zdGFuY2UgbWV0aG9kLgogIHZvaWQgYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgLy8gRm9yIG1vZHVsYXIgY29tcGlsYXRpb24gd2UgbmVlZCB0byBpbmNsdWRlIGluaXRpYWxpemVycyBmb3Igb3B0aW9uYWwKICAgIC8vIGFuZCBuYW1lZCBwYXJhbWV0ZXJzIG9mIGNvbnN0IGNvbnN0cnVjdG9ycyBpbnRvIHRoZSBvdXRsaW5lIC0gdG8gZW5hYmxlCiAgICAvLyBjb25zdGFudCBldmFsdWF0aW9uLiBTaW1pbGFybHkgd2UgbmVlZCB0byBpbmNsdWRlIGluaXRpYWxpemVycyBmb3IKICAgIC8vIG9wdGlvbmFsIGFuZCBuYW1lZCBwYXJhbWV0ZXJzIG9mIGluc3RhbmNlIG1ldGhvZHMgYmVjYXVzZSB0aGVzZSBtaWdodCBiZQogICAgLy8gbmVlZGVkIHRvIGdlbmVyYXRlZCBub1N1Y2hNZXRob2QgZm9yd2FyZGVycy4KICAgIGZpbmFsIGJvb2wgaXNDb25zdENvbnN0cnVjdG9yUGFyYW1ldGVyID0KICAgICAgICAocGFyZW50IGlzIENvbnN0cnVjdG9yQnVpbGRlciAmJiBwYXJlbnQudGFyZ2V0LmlzQ29uc3QpOwogICAgaWYgKChpc0NvbnN0Q29uc3RydWN0b3JQYXJhbWV0ZXIgfHwgcGFyZW50LmlzQ2xhc3NJbnN0YW5jZU1lbWJlcikgJiYKICAgICAgICBpbml0aWFsaXplclRva2VuICE9IG51bGwpIHsKICAgICAgZmluYWwgQ2xhc3NCdWlsZGVyIGNsYXNzQnVpbGRlciA9IHBhcmVudC5wYXJlbnQ7CiAgICAgIFNjb3BlIHNjb3BlID0gY2xhc3NCdWlsZGVyLnNjb3BlOwogICAgICBCb2R5QnVpbGRlciBib2R5QnVpbGRlciA9IG5ldyBCb2R5QnVpbGRlci5mb3JPdXRsaW5lRXhwcmVzc2lvbigKICAgICAgICAgIGxpYnJhcnksIGNsYXNzQnVpbGRlciwgdGhpcywgc2NvcGUsIGZpbGVVcmkpOwogICAgICBib2R5QnVpbGRlci5jb25zdGFudENvbnRleHQgPSBDb25zdGFudENvbnRleHQucmVxdWlyZWQ7CiAgICAgIHRhcmdldC5pbml0aWFsaXplciA9IGJvZHlCdWlsZGVyLnBhcnNlRmllbGRJbml0aWFsaXplcihpbml0aWFsaXplclRva2VuKQogICAgICAgIC4ucGFyZW50ID0gdGFyZ2V0OwogICAgICBib2R5QnVpbGRlci50eXBlSW5mZXJyZXI/LmluZmVyUGFyYW1ldGVySW5pdGlhbGl6ZXIoCiAgICAgICAgICBib2R5QnVpbGRlciwgdGFyZ2V0LmluaXRpYWxpemVyLCB0YXJnZXQudHlwZSk7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciBpcyBTb3VyY2VMb2FkZXIpIHsKICAgICAgICBTb3VyY2VMb2FkZXIgbG9hZGVyID0gbGlicmFyeS5sb2FkZXI7CiAgICAgICAgbG9hZGVyLnRyYW5zZm9ybVBvc3RJbmZlcmVuY2UodGFyZ2V0LCBib2R5QnVpbGRlci50cmFuc2Zvcm1TZXRMaXRlcmFscywKICAgICAgICAgICAgYm9keUJ1aWxkZXIudHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgICB9CiAgICAgIGJvZHlCdWlsZGVyLnJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzKCk7CiAgICB9CiAgICBpbml0aWFsaXplclRva2VuID0gbnVsbDsKICB9Cn0KgLMATk48ASgBMgEuCSgsMQEWSAE7ATgBUAElASMBSgE5ATcBJwkWERwWGBkVAUwBRhE3TSgBFwEaARUBThk8AUIjATQGPCEaAU42LAE0AU0XPwE/ARo8LgQBQAEmARwBDCgBMQEdQB9QJhwcLyQnIwYYBAE9TUwnThUEAUAhIQ8nFjwSEhIYHCgEASYgH0MjKQgGBAFJQjlMT0pQNC1BSSQ3KEY4Pk8bOzksLlAvCDYGHQQCAUFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9mb3JtYWxfcGFyYW1ldGVyX2J1aWxkZXIuZGFydENzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9wcm9jZWR1cmVfYnVpbGRlci5kYXJ0wAB2TC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnByb2NlZHVyZV9idWlsZGVyOwoKLy8gTm90ZTogd2UncmUgZGVsaWJlcmF0ZWx5IHVzaW5nIEFzeW5jTWFya2VyIGFuZCBQcm9jZWR1cmVLaW5kIGZyb20ga2VybmVsCi8vIG91dHNpZGUgdGhlIGtlcm5lbC1zcGVjaWZpYyBidWlsZGVycy4gVGhpcyBpcyBzaW1wbGVyIHRoYW4gY3JlYXRpbmcKLy8gYWRkaXRpb25hbCBlbnVtcy4KaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cgQXN5bmNNYXJrZXIsIFByb2NlZHVyZUtpbmQsIFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IGNvbnRhaW5zVHlwZVZhcmlhYmxlLCBzdWJzdGl0dXRlOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JzsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZW1iZXJCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBTY29wZSwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICdleHRlbnNpb25fYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIEFzeW5jTWFya2VyLAogICAgICAgIENsYXNzLAogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBFbXB0eVN0YXRlbWVudCwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbml0aWFsaXplciwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIE1lbWJlciwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIsCiAgICAgICAgU3RhdGVtZW50LAogICAgICAgIFN0YXRpY0ludm9jYXRpb24sCiAgICAgICAgU3RyaW5nTGl0ZXJhbCwKICAgICAgICBTdXBlckluaXRpYWxpemVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBzZXRQYXJlbnRzOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlci5kYXJ0JwogICAgc2hvdyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyLAogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciwKICAgICAgICBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9ySW1wbGVtZW50YXRpb247CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfc2hhZG93X2FzdC5kYXJ0JyBzaG93IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudDsKCmltcG9ydCAnLi4va2VybmVsL3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JyBzaG93IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHk7CgppbXBvcnQgJy4uL2xvYWRlci5kYXJ0JyBzaG93IExvYWRlcjsKCmltcG9ydCAnLi4vbWVzc2FnZXMuZGFydCcKICAgIHNob3cKICAgICAgICBNZXNzYWdlLAogICAgICAgIG1lc3NhZ2VDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3QsCiAgICAgICAgbWVzc2FnZU1vcmVUaGFuT25lU3VwZXJPclRoaXNJbml0aWFsaXplciwKICAgICAgICBtZXNzYWdlTm9uSW5zdGFuY2VUeXBlVmFyaWFibGVVc2UsCiAgICAgICAgbWVzc2FnZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaCwKICAgICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbiwKICAgICAgICBtZXNzYWdlUGF0Y2hOb25FeHRlcm5hbCwKICAgICAgICBtZXNzYWdlU3VwZXJJbml0aWFsaXplck5vdExhc3QsCiAgICAgICAgbWVzc2FnZVRoaXNJbml0aWFsaXplck5vdEFsb25lLAogICAgICAgIG5vTGVuZ3RoOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuZXhwZWN0ZWQ7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0JwogICAgc2hvdyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHksIFZhcmlhbmNlOwoKLy8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBjb25zdHJ1Y3RvciBhbmQgcHJvY2VkdXJlIGJ1aWxkZXJzLgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkJ1aWxkZXIgZXh0ZW5kcyBNZW1iZXJCdWlsZGVyIHsKICBmaW5hbCBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGE7CgogIGZpbmFsIGludCBtb2RpZmllcnM7CgogIGZpbmFsIFR5cGVCdWlsZGVyIHJldHVyblR5cGU7CgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBmaW5hbCBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXM7CgogIGZpbmFsIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFsczsKCiAgLy8vIElmIHRoaXMgcHJvY2VkdXJlIGlzIGFuIGluc3RhbmNlIG1lbWJlciBkZWNsYXJlZCBpbiBhbiBleHRlbnNpb24KICAvLy8gZGVjbGFyYXRpb24sIFtfZXh0ZW5zaW9uVGhpc10gaG9sZHMgdGhlIHN5bnRoZXRpY2FsbHkgYWRkZWQgYHRoaXNgCiAgLy8vIHBhcmFtZXRlci4KICBWYXJpYWJsZURlY2xhcmF0aW9uIF9leHRlbnNpb25UaGlzOwoKICBGdW5jdGlvbkJ1aWxkZXIoCiAgICAgIHRoaXMubWV0YWRhdGEsCiAgICAgIHRoaXMubW9kaWZpZXJzLAogICAgICB0aGlzLnJldHVyblR5cGUsCiAgICAgIHRoaXMubmFtZSwKICAgICAgdGhpcy50eXBlVmFyaWFibGVzLAogICAgICB0aGlzLmZvcm1hbHMsCiAgICAgIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIHRoaXMubmF0aXZlTWV0aG9kTmFtZSkKICAgICAgOiBzdXBlcihjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpIHsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZm9ybWFsc1tpXS5wYXJlbnQgPSB0aGlzOwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRnVuY3Rpb25CdWlsZGVyIjsKCiAgQXN5bmNNYXJrZXIgZ2V0IGFzeW5jTW9kaWZpZXI7CgogIFByb2NlZHVyZUtpbmQgZ2V0IGtpbmQ7CgogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5NZXRob2QsIGtpbmQpOwoKICBib29sIGdldCBpc0dldHRlciA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5HZXR0ZXIsIGtpbmQpOwoKICBib29sIGdldCBpc1NldHRlciA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5TZXR0ZXIsIGtpbmQpOwoKICBib29sIGdldCBpc09wZXJhdG9yID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLk9wZXJhdG9yLCBraW5kKTsKCiAgYm9vbCBnZXQgaXNGYWN0b3J5ID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLkZhY3RvcnksIGtpbmQpOwoKICAvLy8gVGhpcyBpcyB0aGUgZm9ybWFsIHBhcmFtZXRlciBzY29wZSBhcyBzcGVjaWZpZWQgaW4gdGhlIERhcnQgUHJvZ3JhbW1pbmcKICAvLy8gTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiwgNHRoIGVkLCBzZWN0aW9uIDkuMi4KICBTY29wZSBjb21wdXRlRm9ybWFsUGFyYW1ldGVyU2NvcGUoU2NvcGUgcGFyZW50KSB7CiAgICBpZiAoZm9ybWFscyA9PSBudWxsKSByZXR1cm4gcGFyZW50OwogICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbG9jYWwgPSA8U3RyaW5nLCBCdWlsZGVyPnt9OwogICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgIGlmICghaXNDb25zdHJ1Y3RvciB8fCAhZm9ybWFsLmlzSW5pdGlhbGl6aW5nRm9ybWFsKSB7CiAgICAgICAgbG9jYWxbZm9ybWFsLm5hbWVdID0gZm9ybWFsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFNjb3BlKGxvY2FsLCBudWxsLCBwYXJlbnQsICJmb3JtYWwgcGFyYW1ldGVyIiwKICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKTsKICB9CgogIFNjb3BlIGNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJJbml0aWFsaXplclNjb3BlKFNjb3BlIHBhcmVudCkgewogICAgLy8gRnJvbQogICAgLy8gW2RhcnRMYW5nU3BlYy50ZXhdKC4uLy4uLy4uLy4uLy4uLy4uL2RvY3MvbGFuZ3VhZ2UvZGFydExhbmdTcGVjLnRleCkgYXQKICAgIC8vIHJldmlzaW9uIDk0YjIzZDNiMTI1ZTlkMjQ2ZTA3YTJiNDNiNjE3NDA3NTlhMGRhY2U6CiAgICAvLwogICAgLy8gV2hlbiB0aGUgZm9ybWFsIHBhcmFtZXRlciBsaXN0IG9mIGEgbm9uLXJlZGlyZWN0aW5nIGdlbmVyYXRpdmUKICAgIC8vIGNvbnN0cnVjdG9yIGNvbnRhaW5zIGFueSBpbml0aWFsaXppbmcgZm9ybWFscywgYSBuZXcgc2NvcGUgaXMKICAgIC8vIGludHJvZHVjZWQsIHRoZSBfZm9ybWFsIHBhcmFtZXRlciBpbml0aWFsaXplciBzY29wZV8sIHdoaWNoIGlzIHRoZQogICAgLy8gY3VycmVudCBzY29wZSBvZiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBvZiB0aGUgY29uc3RydWN0b3IsIGFuZCB3aGljaCBpcwogICAgLy8gZW5jbG9zZWQgaW4gdGhlIHNjb3BlIHdoZXJlIHRoZSBjb25zdHJ1Y3RvciBpcyBkZWNsYXJlZC4gIEVhY2gKICAgIC8vIGluaXRpYWxpemluZyBmb3JtYWwgaW4gdGhlIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdCBpbnRyb2R1Y2VzIGEgZmluYWwKICAgIC8vIGxvY2FsIHZhcmlhYmxlIGludG8gdGhlIGZvcm1hbCBwYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgc2NvcGUsIGJ1dCBub3QgaW50bwogICAgLy8gdGhlIGZvcm1hbCBwYXJhbWV0ZXIgc2NvcGU7IGV2ZXJ5IG90aGVyIGZvcm1hbCBwYXJhbWV0ZXIgaW50cm9kdWNlcyBhCiAgICAvLyBsb2NhbCB2YXJpYWJsZSBpbnRvIGJvdGggdGhlIGZvcm1hbCBwYXJhbWV0ZXIgc2NvcGUgYW5kIHRoZSBmb3JtYWwKICAgIC8vIHBhcmFtZXRlciBpbml0aWFsaXplciBzY29wZS4KCiAgICBpZiAoZm9ybWFscyA9PSBudWxsKSByZXR1cm4gcGFyZW50OwogICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbG9jYWwgPSA8U3RyaW5nLCBCdWlsZGVyPnt9OwogICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgIGxvY2FsW2Zvcm1hbC5uYW1lXSA9IGZvcm1hbC5mb3JGb3JtYWxQYXJhbWV0ZXJJbml0aWFsaXplclNjb3BlKCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFNjb3BlKGxvY2FsLCBudWxsLCBwYXJlbnQsICJmb3JtYWwgcGFyYW1ldGVyIGluaXRpYWxpemVyIiwKICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKTsKICB9CgogIC8vLyBUaGlzIHNjb3BlIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgc2NvcGUgc3BlY2lmaWVkIGluIHRoZSBEYXJ0CiAgLy8vIFByb2dyYW1taW5nIExhbmd1YWdlIFNwZWNpZmljYXRpb24sIDR0aCBlZC4gSXQncyBhbiB1bnNwZWNpZmllZCBleHRlbnNpb24KICAvLy8gdG8gc3VwcG9ydCBnZW5lcmljIG1ldGhvZHMuCiAgU2NvcGUgY29tcHV0ZVR5cGVQYXJhbWV0ZXJTY29wZShTY29wZSBwYXJlbnQpIHsKICAgIGlmICh0eXBlVmFyaWFibGVzID09IG51bGwpIHJldHVybiBwYXJlbnQ7CiAgICBNYXA8U3RyaW5nLCBCdWlsZGVyPiBsb2NhbCA9IDxTdHJpbmcsIEJ1aWxkZXI+e307CiAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICBsb2NhbFt2YXJpYWJsZS5uYW1lXSA9IHZhcmlhYmxlOwogICAgfQogICAgcmV0dXJuIG5ldyBTY29wZShsb2NhbCwgbnVsbCwgcGFyZW50LCAidHlwZSBwYXJhbWV0ZXIiLAogICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpOwogIH0KCiAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBnZXRGb3JtYWwoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgaWYgKGZvcm1hbC5uYW1lID09IG5hbWUpIHJldHVybiBmb3JtYWw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgZmluYWwgU3RyaW5nIG5hdGl2ZU1ldGhvZE5hbWU7CgogIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbjsKCiAgU3RhdGVtZW50IGFjdHVhbEJvZHk7CgogIEZ1bmN0aW9uQnVpbGRlciBnZXQgYWN0dWFsT3JpZ2luOwoKICB2b2lkIHNldCBib2R5KFN0YXRlbWVudCBuZXdCb2R5KSB7Ci8vICAgIGlmIChuZXdCb2R5ICE9IG51bGwpIHsKLy8gICAgICBpZiAoaXNBYnN0cmFjdCkgewovLyAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IElzIHRoaXMgY2hlY2sgbmVlZGVkPwovLyAgICAgICAgcmV0dXJuIGludGVybmFsUHJvYmxlbShtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQm9keU9uQWJzdHJhY3RNZXRob2QsCi8vICAgICAgICAgICAgbmV3Qm9keS5maWxlT2Zmc2V0LCBmaWxlVXJpKTsKLy8gICAgICB9Ci8vICAgIH0KICAgIGFjdHVhbEJvZHkgPSBuZXdCb2R5OwogICAgaWYgKGZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgLy8gQSBmb3J3YXJkaW5nIHNlbWktc3R1YiBpcyBhIG1ldGhvZCB0aGF0IGlzIGFic3RyYWN0IGluIHRoZSBzb3VyY2UgY29kZSwKICAgICAgLy8gYnV0IHdoaWNoIG5lZWRzIHRvIGhhdmUgYSBmb3J3YXJkaW5nIHN0dWIgYm9keSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdAogICAgICAvLyBjb3ZhcmlhbmNlIGNoZWNrcyBvY2N1ci4gIFdlIGRvbid0IHdhbnQgdG8gcmVwbGFjZSB0aGUgZm9yd2FyZGluZyBzdHViCiAgICAgIC8vIGJvZHkgd2l0aCBudWxsLgogICAgICB2YXIgcGFyZW50ID0gZnVuY3Rpb24ucGFyZW50OwogICAgICBpZiAoIShuZXdCb2R5ID09IG51bGwgJiYKICAgICAgICAgIHBhcmVudCBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgIHBhcmVudC5pc0ZvcndhcmRpbmdTZW1pU3R1YikpIHsKICAgICAgICBmdW5jdGlvbi5ib2R5ID0gbmV3Qm9keTsKICAgICAgICBuZXdCb2R5Py5wYXJlbnQgPSBmdW5jdGlvbjsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBzZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KE1lbWJlciB0YXJnZXQsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIGlmIChhY3R1YWxCb2R5ICE9IG51bGwpIHsKICAgICAgdW5leHBlY3RlZCgibnVsbCIsICIke2FjdHVhbEJvZHkucnVudGltZVR5cGV9IiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBhY3R1YWxCb2R5ID0gbmV3IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodGFyZ2V0LCB0eXBlQXJndW1lbnRzKTsKICAgIGZ1bmN0aW9uLmJvZHkgPSBhY3R1YWxCb2R5OwogICAgYWN0dWFsQm9keT8ucGFyZW50ID0gZnVuY3Rpb247CiAgICBpZiAoaXNQYXRjaCkgewogICAgICBhY3R1YWxPcmlnaW4uc2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keSh0YXJnZXQsIHR5cGVBcmd1bWVudHMpOwogICAgfQogIH0KCiAgU3RhdGVtZW50IGdldCBib2R5ID0+IGFjdHVhbEJvZHkgPz89IG5ldyBFbXB0eVN0YXRlbWVudCgpOwoKICBib29sIGdldCBpc05hdGl2ZSA9PiBuYXRpdmVNZXRob2ROYW1lICE9IG51bGw7CgogIEZ1bmN0aW9uTm9kZSBidWlsZEZ1bmN0aW9uKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIGFzc2VydChmdW5jdGlvbiA9PSBudWxsKTsKICAgIEZ1bmN0aW9uTm9kZSByZXN1bHQgPSBuZXcgRnVuY3Rpb25Ob2RlKGJvZHksIGFzeW5jTWFya2VyOiBhc3luY01vZGlmaWVyKTsKICAgIEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSBuZWVkc0NoZWNrVmlzaXRvcjsKICAgIGlmICghaXNDb25zdHJ1Y3RvciAmJiAhaXNGYWN0b3J5ICYmIHBhcmVudCBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgQ2xhc3MgZW5jbG9zaW5nQ2xhc3MgPSBwYXJlbnQudGFyZ2V0OwogICAgICBpZiAoZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgIG5lZWRzQ2hlY2tWaXNpdG9yID0gbmV3IEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSgKICAgICAgICAgICAgZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgIC8vIFdlIGFyZSBjaGVja2luZyB0aGUgcGFyYW1ldGVyIHR5cGVzIHdoaWNoIGFyZSBpbiBhCiAgICAgICAgICAgIC8vIGNvbnRyYXZhcmlhbnQgcG9zaXRpb24uCiAgICAgICAgICAgIGluaXRpYWxWYXJpYW5jZTogVmFyaWFuY2UuY29udHJhdmFyaWFudCk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHQgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgIFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyID0gdC5wYXJhbWV0ZXI7CiAgICAgICAgcmVzdWx0LnR5cGVQYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwogICAgICAgIGlmIChuZWVkc0NoZWNrVmlzaXRvciAhPSBudWxsKSB7CiAgICAgICAgICBpZiAocGFyYW1ldGVyLmJvdW5kLmFjY2VwdChuZWVkc0NoZWNrVmlzaXRvcikpIHsKICAgICAgICAgICAgcGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBzZXRQYXJlbnRzKHJlc3VsdC50eXBlUGFyYW1ldGVycywgcmVzdWx0KTsKICAgIH0KICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPSBmb3JtYWwuYnVpbGQobGlicmFyeSwgMCk7CiAgICAgICAgaWYgKG5lZWRzQ2hlY2tWaXNpdG9yICE9IG51bGwpIHsKICAgICAgICAgIGlmIChwYXJhbWV0ZXIudHlwZS5hY2NlcHQobmVlZHNDaGVja1Zpc2l0b3IpKSB7CiAgICAgICAgICAgIHBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGZvcm1hbC5pc05hbWVkKSB7CiAgICAgICAgICByZXN1bHQubmFtZWRQYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQucG9zaXRpb25hbFBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7CiAgICAgICAgfQogICAgICAgIHBhcmFtZXRlci5wYXJlbnQgPSByZXN1bHQ7CiAgICAgICAgaWYgKGZvcm1hbC5pc1JlcXVpcmVkKSB7CiAgICAgICAgICByZXN1bHQucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCsrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKCFpc0V4dGVuc2lvbk1lbWJlciAmJgogICAgICAgIGlzU2V0dGVyICYmCiAgICAgICAgKGZvcm1hbHM/Lmxlbmd0aCAhPSAxIHx8IGZvcm1hbHNbMF0uaXNPcHRpb25hbCkpIHsKICAgICAgLy8gUmVwbGFjZSBpbGxlZ2FsIHBhcmFtZXRlcnMgYnkgc2luZ2xlIGR1bW15IHBhcmFtZXRlci4KICAgICAgLy8gRG8gdGhpcyBhZnRlciBidWlsZGluZyB0aGUgcGFyYW1ldGVycywgc2luY2UgdGhlIGRpZXQgbGlzdGVuZXIKICAgICAgLy8gYXNzdW1lcyB0aGF0IHBhcmFtZXRlcnMgYXJlIGJ1aWx0LCBldmVuIGlmIGlsbGVnYWwgaW4gbnVtYmVyLgogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9CiAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KCIjc3ludGhldGljIiwgMCk7CiAgICAgIHJlc3VsdC5wb3NpdGlvbmFsUGFyYW1ldGVycy5jbGVhcigpOwogICAgICByZXN1bHQucG9zaXRpb25hbFBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7CiAgICAgIHBhcmFtZXRlci5wYXJlbnQgPSByZXN1bHQ7CiAgICAgIHJlc3VsdC5uYW1lZFBhcmFtZXRlcnMuY2xlYXIoKTsKICAgICAgcmVzdWx0LnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSAxOwogICAgfQogICAgaWYgKHJldHVyblR5cGUgIT0gbnVsbCkgewogICAgICByZXN1bHQucmV0dXJuVHlwZSA9IHJldHVyblR5cGUuYnVpbGQobGlicmFyeSk7CiAgICB9CiAgICBpZiAoIWlzQ29uc3RydWN0b3IgJiYKICAgICAgICAhaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyICYmCiAgICAgICAgcGFyZW50IGlzIENsYXNzQnVpbGRlcikgewogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gcGFyZW50LnRhcmdldC50eXBlUGFyYW1ldGVyczsKICAgICAgaWYgKHR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbjsKICAgICAgICBEYXJ0VHlwZSByZW1vdmVUeXBlVmFyaWFibGVzKERhcnRUeXBlIHR5cGUpIHsKICAgICAgICAgIGlmIChzdWJzdGl0dXRpb24gPT0gbnVsbCkgewogICAgICAgICAgICBzdWJzdGl0dXRpb24gPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICAgICAgICAgIGZvciAoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIgaW4gdHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICAgICAgICBzdWJzdGl0dXRpb25bcGFyYW1ldGVyXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICBtZXNzYWdlTm9uSW5zdGFuY2VUeXBlVmFyaWFibGVVc2UsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRlKHR5cGUsIHN1YnN0aXR1dGlvbik7CiAgICAgICAgfQoKICAgICAgICBTZXQ8VHlwZVBhcmFtZXRlcj4gc2V0ID0gdHlwZVBhcmFtZXRlcnMudG9TZXQoKTsKICAgICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIHJlc3VsdC5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgICAgaWYgKGNvbnRhaW5zVHlwZVZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCBzZXQpKSB7CiAgICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gcmVtb3ZlVHlwZVZhcmlhYmxlcyhwYXJhbWV0ZXIudHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgaW4gcmVzdWx0Lm5hbWVkUGFyYW1ldGVycykgewogICAgICAgICAgaWYgKGNvbnRhaW5zVHlwZVZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCBzZXQpKSB7CiAgICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gcmVtb3ZlVHlwZVZhcmlhYmxlcyhwYXJhbWV0ZXIudHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjb250YWluc1R5cGVWYXJpYWJsZShyZXN1bHQucmV0dXJuVHlwZSwgc2V0KSkgewogICAgICAgICAgcmVzdWx0LnJldHVyblR5cGUgPSByZW1vdmVUeXBlVmFyaWFibGVzKHJlc3VsdC5yZXR1cm5UeXBlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChpc0V4dGVuc2lvbkluc3RhbmNlTWVtYmVyKSB7CiAgICAgIF9leHRlbnNpb25UaGlzID0gcmVzdWx0LnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZpcnN0OwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uID0gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHBhcmFtZXRlciBmb3IgJ3RoaXMnIHN5bnRoZXRpY2FsbHkgYWRkZWQgdG8gZXh0ZW5zaW9uCiAgLy8vIGluc3RhbmNlIG1lbWJlcnMuCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBnZXQgZXh0ZW5zaW9uVGhpcyB7CiAgICBhc3NlcnQoX2V4dGVuc2lvblRoaXMgIT0gbnVsbCB8fCAhaXNFeHRlbnNpb25JbnN0YW5jZU1lbWJlciwKICAgICAgICAiUHJvY2VkdXJlQnVpbGRlci5leHRlbnNpb25UaGlzIGhhcyBub3QgYmVlbiBzZXQuIik7CiAgICByZXR1cm4gX2V4dGVuc2lvblRoaXM7CiAgfQoKICBNZW1iZXIgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSk7CgogIEBvdmVycmlkZQogIHZvaWQgYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgTWV0YWRhdGFCdWlsZGVyLmJ1aWxkQW5ub3RhdGlvbnMoCiAgICAgICAgdGFyZ2V0LCBtZXRhZGF0YSwgbGlicmFyeSwgaXNDbGFzc01lbWJlciA/IHBhcmVudCA6IG51bGwsIHRoaXMpOwoKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgLy8gRm9yIGNvbnN0IGNvbnN0cnVjdG9ycyB3ZSBuZWVkIHRvIGluY2x1ZGUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzCiAgICAgIC8vIGludG8gdGhlIG91dGxpbmUuIEZvciBhbGwgb3RoZXIgZm9ybWFscyB3ZSBuZWVkIHRvIGNhbGwKICAgICAgLy8gYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMgdG8gY2xlYXIgaW5pdGlhbGl6ZXJUb2tlbiB0byBwcmV2ZW50CiAgICAgIC8vIGNvbnN1bWluZyB0b28gbXVjaCBtZW1vcnkuCiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICAgIGZvcm1hbC5idWlsZE91dGxpbmVFeHByZXNzaW9ucyhsaWJyYXJ5KTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBiZWNvbWVOYXRpdmUoTG9hZGVyIGxvYWRlcikgewogICAgQnVpbGRlciBjb25zdHJ1Y3RvciA9IGxvYWRlci5nZXROYXRpdmVBbm5vdGF0aW9uKCk7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0KICAgICAgICBuZXcgQXJndW1lbnRzKDxFeHByZXNzaW9uPltuZXcgU3RyaW5nTGl0ZXJhbChuYXRpdmVNZXRob2ROYW1lKV0pOwogICAgRXhwcmVzc2lvbiBhbm5vdGF0aW9uOwogICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IpIHsKICAgICAgYW5ub3RhdGlvbiA9IG5ldyBDb25zdHJ1Y3Rvckludm9jYXRpb24oY29uc3RydWN0b3IudGFyZ2V0LCBhcmd1bWVudHMpCiAgICAgICAgLi5pc0NvbnN0ID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGFubm90YXRpb24gPSBuZXcgU3RhdGljSW52b2NhdGlvbihjb25zdHJ1Y3Rvci50YXJnZXQsIGFyZ3VtZW50cykKICAgICAgICAuLmlzQ29uc3QgPSB0cnVlOwogICAgfQogICAgdGFyZ2V0LmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7CiAgfQoKICBib29sIGNoZWNrUGF0Y2goRnVuY3Rpb25CdWlsZGVyIHBhdGNoKSB7CiAgICBpZiAoIWlzRXh0ZXJuYWwpIHsKICAgICAgcGF0Y2gubGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZVBhdGNoTm9uRXh0ZXJuYWwsIHBhdGNoLmNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBwYXRjaC5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbi53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICBmaWxlVXJpLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgIF0pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgcmVwb3J0UGF0Y2hNaXNtYXRjaChCdWlsZGVyIHBhdGNoKSB7CiAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaCwgcGF0Y2guY2hhck9mZnNldCwKICAgICAgICBub0xlbmd0aCwgcGF0Y2guZmlsZVVyaSwgY29udGV4dDogWwogICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbi53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbm9MZW5ndGgpCiAgICBdKTsKICB9Cn0KCmNsYXNzIFByb2NlZHVyZUJ1aWxkZXIgZXh0ZW5kcyBGdW5jdGlvbkJ1aWxkZXIgewogIGZpbmFsIFByb2NlZHVyZSBwcm9jZWR1cmU7CiAgZmluYWwgaW50IGNoYXJPcGVuUGFyZW5PZmZzZXQ7CiAgZmluYWwgUHJvY2VkdXJlS2luZCBraW5kOwoKICBBc3luY01hcmtlciBhY3R1YWxBc3luY01vZGlmaWVyID0gQXN5bmNNYXJrZXIuU3luYzsKCiAgQG92ZXJyaWRlCiAgUHJvY2VkdXJlQnVpbGRlciBhY3R1YWxPcmlnaW47CgogIGJvb2wgaGFkVHlwZXNJbmZlcnJlZCA9IGZhbHNlOwoKICBQcm9jZWR1cmVCdWlsZGVyKAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscywKICAgICAgdGhpcy5raW5kLAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBjb21waWxhdGlvblVuaXQsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICB0aGlzLmNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0LAogICAgICBbU3RyaW5nIG5hdGl2ZU1ldGhvZE5hbWVdKQogICAgICA6IHByb2NlZHVyZSA9CiAgICAgICAgICAgIG5ldyBQcm9jZWR1cmUobnVsbCwga2luZCwgbnVsbCwgZmlsZVVyaTogY29tcGlsYXRpb25Vbml0Py5maWxlVXJpKQogICAgICAgICAgICAgIC4uc3RhcnRGaWxlT2Zmc2V0ID0gc3RhcnRDaGFyT2Zmc2V0CiAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldAogICAgICAgICAgICAgIC4uZmlsZUVuZE9mZnNldCA9IGNoYXJFbmRPZmZzZXQsCiAgICAgICAgc3VwZXIobWV0YWRhdGEsIG1vZGlmaWVycywgcmV0dXJuVHlwZSwgbmFtZSwgdHlwZVZhcmlhYmxlcywgZm9ybWFscywKICAgICAgICAgICAgY29tcGlsYXRpb25Vbml0LCBjaGFyT2Zmc2V0LCBuYXRpdmVNZXRob2ROYW1lKTsKCiAgQG92ZXJyaWRlCiAgUHJvY2VkdXJlQnVpbGRlciBnZXQgb3JpZ2luID0+IGFjdHVhbE9yaWdpbiA/PyB0aGlzOwoKICBBc3luY01hcmtlciBnZXQgYXN5bmNNb2RpZmllciA9PiBhY3R1YWxBc3luY01vZGlmaWVyOwoKICBTdGF0ZW1lbnQgZ2V0IGJvZHkgewogICAgaWYgKGFjdHVhbEJvZHkgPT0gbnVsbCAmJiAhaXNBYnN0cmFjdCAmJiAhaXNFeHRlcm5hbCkgewogICAgICBhY3R1YWxCb2R5ID0gbmV3IEVtcHR5U3RhdGVtZW50KCk7CiAgICB9CiAgICByZXR1cm4gYWN0dWFsQm9keTsKICB9CgogIHZvaWQgc2V0IGFzeW5jTW9kaWZpZXIoQXN5bmNNYXJrZXIgbmV3TW9kaWZpZXIpIHsKICAgIGFjdHVhbEFzeW5jTW9kaWZpZXIgPSBuZXdNb2RpZmllcjsKICAgIGlmIChmdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIC8vIE5vIHBhcmVudCwgaXQncyBhbiBlbnVtLgogICAgICBmdW5jdGlvbi5hc3luY01hcmtlciA9IGFjdHVhbEFzeW5jTW9kaWZpZXI7CiAgICAgIGZ1bmN0aW9uLmRhcnRBc3luY01hcmtlciA9IGFjdHVhbEFzeW5jTW9kaWZpZXI7CiAgICB9CiAgfQoKICBib29sIGdldCBpc0VsaWdpYmxlRm9yVG9wTGV2ZWxJbmZlcmVuY2UgewogICAgaWYgKGxpYnJhcnkubGVnYWN5TW9kZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlcikgewogICAgICBpZiAocmV0dXJuVHlwZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgIGZvciAodmFyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgICBpZiAoZm9ybWFsLnR5cGUgPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBwcm9jZWR1cmUgaXMgZGVjbGFyZWQgaW4gYW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLgogIGJvb2wgZ2V0IGlzRXh0ZW5zaW9uTWV0aG9kIHsKICAgIHJldHVybiBwYXJlbnQgaXMgRXh0ZW5zaW9uQnVpbGRlcjsKICB9CgogIFByb2NlZHVyZSBidWlsZChTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAvLyBUT0RPKGFoZSk6IEkgdGhpbmsgd2UgbWF5IGNhbGwgdGhpcyB0d2ljZSBvbiBwYXJ0cy4gSW52ZXN0aWdhdGUuCiAgICBpZiAocHJvY2VkdXJlLm5hbWUgPT0gbnVsbCkgewogICAgICBwcm9jZWR1cmUuZnVuY3Rpb24gPSBidWlsZEZ1bmN0aW9uKGxpYnJhcnkpOwogICAgICBwcm9jZWR1cmUuZnVuY3Rpb24ucGFyZW50ID0gcHJvY2VkdXJlOwogICAgICBwcm9jZWR1cmUuZnVuY3Rpb24uZmlsZU9mZnNldCA9IGNoYXJPcGVuUGFyZW5PZmZzZXQ7CiAgICAgIHByb2NlZHVyZS5mdW5jdGlvbi5maWxlRW5kT2Zmc2V0ID0gcHJvY2VkdXJlLmZpbGVFbmRPZmZzZXQ7CiAgICAgIHByb2NlZHVyZS5pc0Fic3RyYWN0ID0gaXNBYnN0cmFjdDsKICAgICAgcHJvY2VkdXJlLmlzRXh0ZXJuYWwgPSBpc0V4dGVybmFsOwogICAgICBwcm9jZWR1cmUuaXNDb25zdCA9IGlzQ29uc3Q7CiAgICAgIGlmIChpc0V4dGVuc2lvbk1ldGhvZCkgewogICAgICAgIEV4dGVuc2lvbkJ1aWxkZXIgZXh0ZW5zaW9uID0gcGFyZW50OwogICAgICAgIHByb2NlZHVyZS5pc1N0YXRpYyA9IGZhbHNlOwogICAgICAgIHByb2NlZHVyZS5pc0V4dGVuc2lvbk1lbWJlciA9IHRydWU7CiAgICAgICAgU3RyaW5nIGtpbmRJbmZpeDsKICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5HZXR0ZXI6CiAgICAgICAgICAgIGtpbmRJbmZpeCA9ICdnZXQjJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFByb2NlZHVyZUtpbmQuU2V0dGVyOgogICAgICAgICAgICBraW5kSW5maXggPSAnc2V0Iyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLk1ldGhvZDoKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5PcGVyYXRvcjoKICAgICAgICAgICAga2luZEluZml4ID0gJyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLkZhY3Rvcnk6CiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZXh0ZW5zaW9uIG1ldGhvZCBraW5kICR7a2luZH0nKTsKICAgICAgICB9CiAgICAgICAgcHJvY2VkdXJlLmtpbmQgPSBQcm9jZWR1cmVLaW5kLk1ldGhvZDsKCiAgICAgICAgcHJvY2VkdXJlLm5hbWUgPQogICAgICAgICAgICBuZXcgTmFtZSgnJHtleHRlbnNpb24ubmFtZX18JHtraW5kSW5maXh9JHtuYW1lfScsIGxpYnJhcnkudGFyZ2V0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcm9jZWR1cmUuaXNTdGF0aWMgPSBpc1N0YXRpYzsKICAgICAgICBwcm9jZWR1cmUubmFtZSA9IG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkudGFyZ2V0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHByb2NlZHVyZTsKICB9CgogIFByb2NlZHVyZSBnZXQgdGFyZ2V0ID0+IG9yaWdpbi5wcm9jZWR1cmU7CgogIEBvdmVycmlkZQogIGludCBmaW5pc2hQYXRjaCgpIHsKICAgIGlmICghaXNQYXRjaCkgcmV0dXJuIDA7CgogICAgLy8gVE9ETyhhaGUpOiByZXN0b3JlIGZpbGUtb2Zmc2V0IG9uY2Ugd2UgdHJhY2sgYm90aCBvcmlnaW4gYW5kIHBhdGNoIGZpbGUKICAgIC8vIFVSSXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzE1NzkKICAgIG9yaWdpbi5wcm9jZWR1cmUuZmlsZVVyaSA9IGZpbGVVcmk7CiAgICBvcmlnaW4ucHJvY2VkdXJlLnN0YXJ0RmlsZU9mZnNldCA9IHByb2NlZHVyZS5zdGFydEZpbGVPZmZzZXQ7CiAgICBvcmlnaW4ucHJvY2VkdXJlLmZpbGVPZmZzZXQgPSBwcm9jZWR1cmUuZmlsZU9mZnNldDsKICAgIG9yaWdpbi5wcm9jZWR1cmUuZmlsZUVuZE9mZnNldCA9IHByb2NlZHVyZS5maWxlRW5kT2Zmc2V0OwogICAgb3JpZ2luLnByb2NlZHVyZS5hbm5vdGF0aW9ucwogICAgICAgIC5mb3JFYWNoKChtKSA9PiBtLmZpbGVPZmZzZXQgPSBwcm9jZWR1cmUuZmlsZU9mZnNldCk7CgogICAgb3JpZ2luLnByb2NlZHVyZS5pc0Fic3RyYWN0ID0gcHJvY2VkdXJlLmlzQWJzdHJhY3Q7CiAgICBvcmlnaW4ucHJvY2VkdXJlLmlzRXh0ZXJuYWwgPSBwcm9jZWR1cmUuaXNFeHRlcm5hbDsKICAgIG9yaWdpbi5wcm9jZWR1cmUuZnVuY3Rpb24gPSBwcm9jZWR1cmUuZnVuY3Rpb247CiAgICBvcmlnaW4ucHJvY2VkdXJlLmZ1bmN0aW9uLnBhcmVudCA9IG9yaWdpbi5wcm9jZWR1cmU7CiAgICByZXR1cm4gMTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVjb21lTmF0aXZlKExvYWRlciBsb2FkZXIpIHsKICAgIHByb2NlZHVyZS5pc0V4dGVybmFsID0gdHJ1ZTsKICAgIHN1cGVyLmJlY29tZU5hdGl2ZShsb2FkZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseVBhdGNoKEJ1aWxkZXIgcGF0Y2gpIHsKICAgIGlmIChwYXRjaCBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgIGlmIChjaGVja1BhdGNoKHBhdGNoKSkgewogICAgICAgIHBhdGNoLmFjdHVhbE9yaWdpbiA9IHRoaXM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydFBhdGNoTWlzbWF0Y2gocGF0Y2gpOwogICAgfQogIH0KfQoKLy8gVE9ETyhhaGUpOiBNb3ZlIHRoaXMgdG8gb3duIGZpbGU/CmNsYXNzIENvbnN0cnVjdG9yQnVpbGRlciBleHRlbmRzIEZ1bmN0aW9uQnVpbGRlciB7CiAgZmluYWwgQ29uc3RydWN0b3IgY29uc3RydWN0b3I7CgogIGZpbmFsIGludCBjaGFyT3BlblBhcmVuT2Zmc2V0OwoKICBib29sIGhhc01vdmVkU3VwZXJJbml0aWFsaXplciA9IGZhbHNlOwoKICBTdXBlckluaXRpYWxpemVyIHN1cGVySW5pdGlhbGl6ZXI7CgogIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgcmVkaXJlY3RpbmdJbml0aWFsaXplcjsKCiAgVG9rZW4gYmVnaW5Jbml0aWFsaXplcnM7CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yQnVpbGRlciBhY3R1YWxPcmlnaW47CgogIENvbnN0cnVjdG9yQnVpbGRlcigKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIHRoaXMuY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFtTdHJpbmcgbmF0aXZlTWV0aG9kTmFtZV0pCiAgICAgIDogY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IobnVsbCwgZmlsZVVyaTogY29tcGlsYXRpb25Vbml0Py5maWxlVXJpKQogICAgICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBzdGFydENoYXJPZmZzZXQKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQKICAgICAgICAgIC4uZmlsZUVuZE9mZnNldCA9IGNoYXJFbmRPZmZzZXQsCiAgICAgICAgc3VwZXIobWV0YWRhdGEsIG1vZGlmaWVycywgcmV0dXJuVHlwZSwgbmFtZSwgdHlwZVZhcmlhYmxlcywgZm9ybWFscywKICAgICAgICAgICAgY29tcGlsYXRpb25Vbml0LCBjaGFyT2Zmc2V0LCBuYXRpdmVNZXRob2ROYW1lKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JCdWlsZGVyIGdldCBvcmlnaW4gPT4gYWN0dWFsT3JpZ2luID8/IHRoaXM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDbGFzc0luc3RhbmNlTWVtYmVyID0+IGZhbHNlOwoKICBib29sIGdldCBpc0NvbnN0cnVjdG9yID0+IHRydWU7CgogIEFzeW5jTWFya2VyIGdldCBhc3luY01vZGlmaWVyID0+IEFzeW5jTWFya2VyLlN5bmM7CgogIFByb2NlZHVyZUtpbmQgZ2V0IGtpbmQgPT4gbnVsbDsKCiAgYm9vbCBnZXQgaXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gaXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yKTsKICB9CgogIGJvb2wgZ2V0IGlzRWxpZ2libGVGb3JUb3BMZXZlbEluZmVyZW5jZSB7CiAgICBpZiAobGlicmFyeS5sZWdhY3lNb2RlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAodmFyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgaWYgKGZvcm1hbC50eXBlID09IG51bGwgJiYgZm9ybWFsLmlzSW5pdGlhbGl6aW5nRm9ybWFsKSByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQ29uc3RydWN0b3IgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgaWYgKGNvbnN0cnVjdG9yLm5hbWUgPT0gbnVsbCkgewogICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbiA9IGJ1aWxkRnVuY3Rpb24obGlicmFyeSk7CiAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLnBhcmVudCA9IGNvbnN0cnVjdG9yOwogICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5maWxlT2Zmc2V0ID0gY2hhck9wZW5QYXJlbk9mZnNldDsKICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24uZmlsZUVuZE9mZnNldCA9IGNvbnN0cnVjdG9yLmZpbGVFbmRPZmZzZXQ7CiAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzID0gY29uc3QgPFR5cGVQYXJhbWV0ZXI+W107CiAgICAgIGNvbnN0cnVjdG9yLmlzQ29uc3QgPSBpc0NvbnN0OwogICAgICBjb25zdHJ1Y3Rvci5pc0V4dGVybmFsID0gaXNFeHRlcm5hbDsKICAgICAgY29uc3RydWN0b3IubmFtZSA9IG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkudGFyZ2V0KTsKICAgIH0KICAgIGlmIChpc0VsaWdpYmxlRm9yVG9wTGV2ZWxJbmZlcmVuY2UpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgaWYgKGZvcm1hbC50eXBlID09IG51bGwgJiYgZm9ybWFsLmlzSW5pdGlhbGl6aW5nRm9ybWFsKSB7CiAgICAgICAgICBmb3JtYWwuZGVjbGFyYXRpb24udHlwZSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxpYnJhcnkubG9hZGVyLnR5cGVJbmZlcmVuY2VFbmdpbmUudG9CZUluZmVycmVkW2NvbnN0cnVjdG9yXSA9IGxpYnJhcnk7CiAgICB9CiAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHN1cGVyLmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKGxpYnJhcnkpOwoKICAgIC8vIEZvciBtb2R1bGFyIGNvbXBpbGF0aW9uIHB1cnBvc2VzIHdlIG5lZWQgdG8gaW5jbHVkZSBpbml0aWFsaXplcnMKICAgIC8vIGZvciBjb25zdCBjb25zdHJ1Y3RvcnMgaW50byB0aGUgb3V0bGluZS4KICAgIGlmIChpc0NvbnN0ICYmIGJlZ2luSW5pdGlhbGl6ZXJzICE9IG51bGwpIHsKICAgICAgQ2xhc3NCdWlsZGVyIGNsYXNzQnVpbGRlciA9IHBhcmVudDsKICAgICAgQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIgPSBuZXcgQm9keUJ1aWxkZXIuZm9yT3V0bGluZUV4cHJlc3Npb24oCiAgICAgICAgICBsaWJyYXJ5LCBjbGFzc0J1aWxkZXIsIHRoaXMsIGNsYXNzQnVpbGRlci5zY29wZSwgZmlsZVVyaSk7CiAgICAgIGJvZHlCdWlsZGVyLmNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZDsKICAgICAgYm9keUJ1aWxkZXIucGFyc2VJbml0aWFsaXplcnMoYmVnaW5Jbml0aWFsaXplcnMpOwogICAgICBib2R5QnVpbGRlci5yZXNvbHZlUmVkaXJlY3RpbmdGYWN0b3J5VGFyZ2V0cygpOwogICAgfQogICAgYmVnaW5Jbml0aWFsaXplcnMgPSBudWxsOwogIH0KCiAgRnVuY3Rpb25Ob2RlIGJ1aWxkRnVuY3Rpb24oTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIMKnOS4zIHRoZSByZXR1cm4gdHlwZSBvZiBhIGNvbnN0cnVjdG9yCiAgICAvLyBmdW5jdGlvbiBpcyBpdHMgZW5jbG9zaW5nIGNsYXNzLgogICAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSA9IHN1cGVyLmJ1aWxkRnVuY3Rpb24obGlicmFyeSk7CiAgICBDbGFzc0J1aWxkZXIgZW5jbG9zaW5nQ2xhc3MgPSBwYXJlbnQ7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlUGFyYW1ldGVyVHlwZXMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW5jbG9zaW5nQ2xhc3MudGFyZ2V0LnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IGVuY2xvc2luZ0NsYXNzLnRhcmdldC50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgdHlwZVBhcmFtZXRlclR5cGVzLmFkZChuZXcgVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpOwogICAgfQogICAgZnVuY3Rpb25Ob2RlLnJldHVyblR5cGUgPQogICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKGVuY2xvc2luZ0NsYXNzLnRhcmdldCwgdHlwZVBhcmFtZXRlclR5cGVzKTsKICAgIHJldHVybiBmdW5jdGlvbk5vZGU7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgdGFyZ2V0ID0+IG9yaWdpbi5jb25zdHJ1Y3RvcjsKCiAgdm9pZCBpbmplY3RJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyKSB7CiAgICBMaXN0PEluaXRpYWxpemVyPiBpbml0aWFsaXplcnMgPSBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnM7CiAgICBJbml0aWFsaXplciBsYXN0SW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcnMucmVtb3ZlTGFzdCgpOwogICAgYXNzZXJ0KGxhc3RJbml0aWFsaXplciA9PSBzdXBlckluaXRpYWxpemVyIHx8CiAgICAgICAgbGFzdEluaXRpYWxpemVyID09IHJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpOwogICAgSW5pdGlhbGl6ZXIgZXJyb3IgPSBoZWxwZXIuYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICBoZWxwZXIuYnVpbGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKSksCiAgICAgICAgY2hhck9mZnNldCk7CiAgICBpbml0aWFsaXplcnMuYWRkKGVycm9yLi5wYXJlbnQgPSBjb25zdHJ1Y3Rvcik7CiAgICBpbml0aWFsaXplcnMuYWRkKGxhc3RJbml0aWFsaXplcik7CiAgfQoKICB2b2lkIGFkZEluaXRpYWxpemVyKAogICAgICBJbml0aWFsaXplciBpbml0aWFsaXplciwgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIpIHsKICAgIExpc3Q8SW5pdGlhbGl6ZXI+IGluaXRpYWxpemVycyA9IGNvbnN0cnVjdG9yLmluaXRpYWxpemVyczsKICAgIGlmIChpbml0aWFsaXplciBpcyBTdXBlckluaXRpYWxpemVyKSB7CiAgICAgIGlmIChzdXBlckluaXRpYWxpemVyICE9IG51bGwgfHwgcmVkaXJlY3RpbmdJbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgaW5qZWN0SW52YWxpZEluaXRpYWxpemVyKG1lc3NhZ2VNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXIsCiAgICAgICAgICAgIGluaXRpYWxpemVyLmZpbGVPZmZzZXQsIGhlbHBlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5pdGlhbGl6ZXJzLmFkZChpbml0aWFsaXplci4ucGFyZW50ID0gY29uc3RydWN0b3IpOwogICAgICAgIHN1cGVySW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcjsKICAgICAgfQogICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBSZWRpcmVjdGluZ0luaXRpYWxpemVyKSB7CiAgICAgIGlmIChzdXBlckluaXRpYWxpemVyICE9IG51bGwgfHwgcmVkaXJlY3RpbmdJbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgaW5qZWN0SW52YWxpZEluaXRpYWxpemVyKG1lc3NhZ2VNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXIsCiAgICAgICAgICAgIGluaXRpYWxpemVyLmZpbGVPZmZzZXQsIGhlbHBlcik7CiAgICAgIH0gZWxzZSBpZiAoY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICBJbml0aWFsaXplciBmaXJzdCA9IGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5maXJzdDsKICAgICAgICBJbml0aWFsaXplciBlcnJvciA9IGhlbHBlci5idWlsZEludmFsaWRJbml0aWFsaXplcigKICAgICAgICAgICAgaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGhlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICBtZXNzYWdlVGhpc0luaXRpYWxpemVyTm90QWxvbmUsIGZpcnN0LmZpbGVPZmZzZXQsIG5vTGVuZ3RoKSksCiAgICAgICAgICAgIGZpcnN0LmZpbGVPZmZzZXQpOwogICAgICAgIGluaXRpYWxpemVycy5hZGQoZXJyb3IuLnBhcmVudCA9IGNvbnN0cnVjdG9yKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0aWFsaXplcnMuYWRkKGluaXRpYWxpemVyLi5wYXJlbnQgPSBjb25zdHJ1Y3Rvcik7CiAgICAgICAgcmVkaXJlY3RpbmdJbml0aWFsaXplciA9IGluaXRpYWxpemVyOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICBpbmplY3RJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgICBtZXNzYWdlVGhpc0luaXRpYWxpemVyTm90QWxvbmUsIGluaXRpYWxpemVyLmZpbGVPZmZzZXQsIGhlbHBlcik7CiAgICB9IGVsc2UgaWYgKHN1cGVySW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICBpbmplY3RJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgICBtZXNzYWdlU3VwZXJJbml0aWFsaXplck5vdExhc3QsIHN1cGVySW5pdGlhbGl6ZXIuZmlsZU9mZnNldCwgaGVscGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGluaXRpYWxpemVycy5hZGQoaW5pdGlhbGl6ZXIuLnBhcmVudCA9IGNvbnN0cnVjdG9yKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBmaW5pc2hQYXRjaCgpIHsKICAgIGlmICghaXNQYXRjaCkgcmV0dXJuIDA7CgogICAgLy8gVE9ETyhhaGUpOiByZXN0b3JlIGZpbGUtb2Zmc2V0IG9uY2Ugd2UgdHJhY2sgYm90aCBvcmlnaW4gYW5kIHBhdGNoIGZpbGUKICAgIC8vIFVSSXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzE1NzkKICAgIG9yaWdpbi5jb25zdHJ1Y3Rvci5maWxlVXJpID0gZmlsZVVyaTsKICAgIG9yaWdpbi5jb25zdHJ1Y3Rvci5zdGFydEZpbGVPZmZzZXQgPSBjb25zdHJ1Y3Rvci5zdGFydEZpbGVPZmZzZXQ7CiAgICBvcmlnaW4uY29uc3RydWN0b3IuZmlsZU9mZnNldCA9IGNvbnN0cnVjdG9yLmZpbGVPZmZzZXQ7CiAgICBvcmlnaW4uY29uc3RydWN0b3IuZmlsZUVuZE9mZnNldCA9IGNvbnN0cnVjdG9yLmZpbGVFbmRPZmZzZXQ7CiAgICBvcmlnaW4uY29uc3RydWN0b3IuYW5ub3RhdGlvbnMKICAgICAgICAuZm9yRWFjaCgobSkgPT4gbS5maWxlT2Zmc2V0ID0gY29uc3RydWN0b3IuZmlsZU9mZnNldCk7CgogICAgb3JpZ2luLmNvbnN0cnVjdG9yLmlzRXh0ZXJuYWwgPSBjb25zdHJ1Y3Rvci5pc0V4dGVybmFsOwogICAgb3JpZ2luLmNvbnN0cnVjdG9yLmZ1bmN0aW9uID0gY29uc3RydWN0b3IuZnVuY3Rpb247CiAgICBvcmlnaW4uY29uc3RydWN0b3IuZnVuY3Rpb24ucGFyZW50ID0gb3JpZ2luLmNvbnN0cnVjdG9yOwogICAgb3JpZ2luLmNvbnN0cnVjdG9yLmluaXRpYWxpemVycyA9IGNvbnN0cnVjdG9yLmluaXRpYWxpemVyczsKICAgIHNldFBhcmVudHMob3JpZ2luLmNvbnN0cnVjdG9yLmluaXRpYWxpemVycywgb3JpZ2luLmNvbnN0cnVjdG9yKTsKICAgIHJldHVybiAxOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWNvbWVOYXRpdmUoTG9hZGVyIGxvYWRlcikgewogICAgY29uc3RydWN0b3IuaXNFeHRlcm5hbCA9IHRydWU7CiAgICBzdXBlci5iZWNvbWVOYXRpdmUobG9hZGVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYXBwbHlQYXRjaChCdWlsZGVyIHBhdGNoKSB7CiAgICBpZiAocGF0Y2ggaXMgQ29uc3RydWN0b3JCdWlsZGVyKSB7CiAgICAgIGlmIChjaGVja1BhdGNoKHBhdGNoKSkgewogICAgICAgIHBhdGNoLmFjdHVhbE9yaWdpbiA9IHRoaXM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydFBhdGNoTWlzbWF0Y2gocGF0Y2gpOwogICAgfQogIH0KCiAgdm9pZCBwcmVwYXJlSW5pdGlhbGl6ZXJzKCkgewogICAgLy8gRm9yIGNvbnN0IGNvbnN0cnVjdG9ycyB3ZSBwYXJzZSBpbml0aWFsaXplcnMgYWxyZWFkeSBhdCB0aGUgb3V0bGluaW5nCiAgICAvLyBzdGFnZSwgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gbWFrZSBib2R5IGJ1aWxkaW5nIHN0YWdlIHNraXAgaW5pdGlhbGl6ZXIKICAgIC8vIHBhcnNpbmcsIHNvIHdlIHNpbXBseSBjbGVhciBwYXJzZWQgaW5pdGlhbGl6ZXJzIGFuZCByZWJ1aWxkIHRoZW0KICAgIC8vIGFnYWluLgogICAgLy8gTm90ZTogdGhpcyBtZXRob2QgY2xlYXJzIGJvdGggaW5pdGlhbGl6ZXJzIGZyb20gdGhlIHRhcmdldCBLZXJuZWwgbm9kZQogICAgLy8gYW5kIGludGVybmFsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBwYXJzaW5nIGluaXRpYWxpemVycy4KICAgIGlmICh0YXJnZXQuaXNDb25zdCkgewogICAgICB0YXJnZXQuaW5pdGlhbGl6ZXJzLmxlbmd0aCA9IDA7CiAgICAgIHJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgPSBudWxsOwogICAgICBzdXBlckluaXRpYWxpemVyID0gbnVsbDsKICAgICAgaGFzTW92ZWRTdXBlckluaXRpYWxpemVyID0gZmFsc2U7CiAgICB9CiAgfQp9CgpjbGFzcyBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyIGV4dGVuZHMgUHJvY2VkdXJlQnVpbGRlciB7CiAgZmluYWwgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyIHJlZGlyZWN0aW9uVGFyZ2V0OwogIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSwKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzLAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBjb21waWxhdGlvblVuaXQsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFtTdHJpbmcgbmF0aXZlTWV0aG9kTmFtZSwKICAgICAgdGhpcy5yZWRpcmVjdGlvblRhcmdldF0pCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgICAgIGZvcm1hbHMsCiAgICAgICAgICAgIFByb2NlZHVyZUtpbmQuRmFjdG9yeSwKICAgICAgICAgICAgY29tcGlsYXRpb25Vbml0LAogICAgICAgICAgICBzdGFydENoYXJPZmZzZXQsCiAgICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICAgIGNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgICAgICAgIGNoYXJFbmRPZmZzZXQsCiAgICAgICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUpOwoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgZ2V0IGJvZHkgPT4gYWN0dWFsQm9keTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KE1lbWJlciB0YXJnZXQsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIGlmIChhY3R1YWxCb2R5ICE9IG51bGwpIHsKICAgICAgdW5leHBlY3RlZCgibnVsbCIsICIke2FjdHVhbEJvZHkucnVudGltZVR5cGV9IiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CgogICAgLy8gRW5zdXJlIHRoYXQgY29uc3RhbnQgZmFjdG9yaWVzIG9ubHkgaGF2ZSBjb25zdGFudCB0YXJnZXRzL2JvZGllcy4KICAgIGlmIChpc0NvbnN0ICYmICF0YXJnZXQuaXNDb25zdCkgewogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZUNvbnN0RmFjdG9yeVJlZGlyZWN0aW9uVG9Ob25Db25zdCwgY2hhck9mZnNldCwKICAgICAgICAgIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgIH0KCiAgICBhY3R1YWxCb2R5ID0gbmV3IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodGFyZ2V0LCB0eXBlQXJndW1lbnRzKTsKICAgIGZ1bmN0aW9uLmJvZHkgPSBhY3R1YWxCb2R5OwogICAgYWN0dWFsQm9keT8ucGFyZW50ID0gZnVuY3Rpb247CiAgICBpZiAoaXNQYXRjaCkgewogICAgICBpZiAoZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHN1YnN0aXR1dGlvbltmdW5jdGlvbi50eXBlUGFyYW1ldGVyc1tpXV0gPQogICAgICAgICAgICAgIG5ldyBUeXBlUGFyYW1ldGVyVHlwZShhY3R1YWxPcmlnaW4uZnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV0pOwogICAgICAgIH0KICAgICAgICBMaXN0PERhcnRUeXBlPiBuZXdUeXBlQXJndW1lbnRzID0KICAgICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+KHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld1R5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIG5ld1R5cGVBcmd1bWVudHNbaV0gPSBzdWJzdGl0dXRlKHR5cGVBcmd1bWVudHNbaV0sIHN1YnN0aXR1dGlvbik7CiAgICAgICAgfQogICAgICAgIHR5cGVBcmd1bWVudHMgPSBuZXdUeXBlQXJndW1lbnRzOwogICAgICB9CiAgICAgIGFjdHVhbE9yaWdpbi5zZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRhcmdldCwgdHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBQcm9jZWR1cmUgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgUHJvY2VkdXJlIHJlc3VsdCA9IHN1cGVyLmJ1aWxkKGxpYnJhcnkpOwogICAgcmVzdWx0LmlzUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgPSB0cnVlOwogICAgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0LnR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICB0eXBlQXJndW1lbnRz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ZnVuY3Rpb25fdHlwZV9idWlsZGVyOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXIsIFR5cGVCdWlsZGVyLCBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFN1cGVydHlwZSwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVkZWZUeXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdyBMb2NhdGVkTWVzc2FnZSwgbWVzc2FnZVN1cGVydHlwZUlzRnVuY3Rpb24sIG5vTGVuZ3RoOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuc3VwcG9ydGVkOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgpjbGFzcyBGdW5jdGlvblR5cGVCdWlsZGVyIGV4dGVuZHMgVHlwZUJ1aWxkZXIgewogIGZpbmFsIFR5cGVCdWlsZGVyIHJldHVyblR5cGU7CiAgZmluYWwgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzOwogIGZpbmFsIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFsczsKCiAgRnVuY3Rpb25UeXBlQnVpbGRlcih0aGlzLnJldHVyblR5cGUsIHRoaXMudHlwZVZhcmlhYmxlcywgdGhpcy5mb3JtYWxzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+IG51bGw7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJGdW5jdGlvbiI7CgogIEBvdmVycmlkZQogIFN0cmluZ0J1ZmZlciBwcmludE9uKFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgYnVmZmVyLndyaXRlKCI8Iik7CiAgICAgIGJvb2wgaXNGaXJzdCA9IHRydWU7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBpZiAoIWlzRmlyc3QpIHsKICAgICAgICAgIGJ1ZmZlci53cml0ZSgiLCAiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBidWZmZXIud3JpdGUodC5uYW1lKTsKICAgICAgfQogICAgICBidWZmZXIud3JpdGUoIj4iKTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZSgiKCIpOwogICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICBib29sIGlzRmlyc3QgPSB0cnVlOwogICAgICBmb3IgKGR5bmFtaWMgdCBpbiBmb3JtYWxzKSB7CiAgICAgICAgaWYgKCFpc0ZpcnN0KSB7CiAgICAgICAgICBidWZmZXIud3JpdGUoIiwgIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyLndyaXRlKHQ/LmZ1bGxOYW1lRm9yRXJyb3JzKTsKICAgICAgfQogICAgfQogICAgYnVmZmVyLndyaXRlKCIpIC0+ICIpOwogICAgYnVmZmVyLndyaXRlKHJldHVyblR5cGU/LmZ1bGxOYW1lRm9yRXJyb3JzKTsKICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBGdW5jdGlvblR5cGUgYnVpbGQoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgW1R5cGVkZWZUeXBlIG9yaWdpbl0pIHsKICAgIERhcnRUeXBlIGJ1aWx0UmV0dXJuVHlwZSA9CiAgICAgICAgcmV0dXJuVHlwZT8uYnVpbGQobGlicmFyeSkgPz8gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIExpc3Q8RGFydFR5cGU+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gPERhcnRUeXBlPltdOwogICAgTGlzdDxOYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVyczsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gMDsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IGZvcm1hbC50eXBlPy5idWlsZChsaWJyYXJ5KSA/PyBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICAgIGlmIChmb3JtYWwuaXNQb3NpdGlvbmFsKSB7CiAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycy5hZGQodHlwZSk7CiAgICAgICAgICBpZiAoZm9ybWFsLmlzUmVxdWlyZWQpIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQrKzsKICAgICAgICB9IGVsc2UgaWYgKGZvcm1hbC5pc05hbWVkKSB7CiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMgPz89IDxOYW1lZFR5cGU+W107CiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkKG5ldyBOYW1lZFR5cGUoZm9ybWFsLm5hbWUsIHR5cGUsCiAgICAgICAgICAgICAgaXNSZXF1aXJlZDogZm9ybWFsLmlzTmFtZWRSZXF1aXJlZCkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobmFtZWRQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgICBuYW1lZFBhcmFtZXRlcnMuc29ydCgpOwogICAgICB9CiAgICB9CiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzOwogICAgaWYgKHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICB0eXBlUGFyYW1ldGVycyA9IDxUeXBlUGFyYW1ldGVyPltdOwogICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdCBpbiB0eXBlVmFyaWFibGVzKSB7CiAgICAgICAgdHlwZVBhcmFtZXRlcnMuYWRkKHQucGFyYW1ldGVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUocG9zaXRpb25hbFBhcmFtZXRlcnMsIGJ1aWx0UmV0dXJuVHlwZSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycyA/PyBjb25zdCA8TmFtZWRUeXBlPltdLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVycyA/PyBjb25zdCA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgIHR5cGVkZWZUeXBlOiBvcmlnaW4pOwogIH0KCiAgU3VwZXJ0eXBlIGJ1aWxkU3VwZXJ0eXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICBtZXNzYWdlU3VwZXJ0eXBlSXNGdW5jdGlvbiwgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBTdXBlcnR5cGUgYnVpbGRNaXhlZEluVHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICByZXR1cm4gYnVpbGRTdXBlcnR5cGUobGlicmFyeSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBidWlsZEludmFsaWRUeXBlKExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZEludmFsaWRUeXBlIiwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLnVyaSk7CiAgfQoKICBGdW5jdGlvblR5cGVCdWlsZGVyIGNsb25lKExpc3Q8VHlwZUJ1aWxkZXI+IG5ld1R5cGVzKSB7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IGNsb25lZFR5cGVWYXJpYWJsZXM7CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGNsb25lZFR5cGVWYXJpYWJsZXMgPSBuZXcgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPih0eXBlVmFyaWFibGVzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xvbmVkVHlwZVZhcmlhYmxlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNsb25lZFR5cGVWYXJpYWJsZXNbaV0gPSB0eXBlVmFyaWFibGVzW2ldLmNsb25lKG5ld1R5cGVzKTsKICAgICAgfQogICAgfQogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBjbG9uZWRGb3JtYWxzOwogICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICBjbG9uZWRGb3JtYWxzID0gbmV3IExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4oZm9ybWFscy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsb25lZEZvcm1hbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCA9IGZvcm1hbHNbaV07CiAgICAgICAgY2xvbmVkRm9ybWFsc1tpXSA9IGZvcm1hbC5jbG9uZShuZXdUeXBlcyk7CiAgICAgIH0KICAgIH0KICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIgbmV3VHlwZSA9IG5ldyBGdW5jdGlvblR5cGVCdWlsZGVyKAogICAgICAgIHJldHVyblR5cGU/LmNsb25lKG5ld1R5cGVzKSwgY2xvbmVkVHlwZVZhcmlhYmxlcywgY2xvbmVkRm9ybWFscyk7CiAgICBuZXdUeXBlcy5hZGQobmV3VHlwZSk7CiAgICByZXR1cm4gbmV3VHlwZTsKICB9Cn0KgJgATk48ASUBTQEhCRIVFhMTFxUBHT8BLAEnCSAYFR0BMCAxLgFKAQwbAQwmAQwuIRkbNRgeERsKHggZBhcbGyMYHhEbCiwIBhsxEwQBRR87OCUkGzdMIyo7JS0/NAoIJSAIBighKjUpCAZDQUM4HgQBHD0YRBEEAR49OQQBDE1NBAE6MyFRPUMIBjAbSDc0MwgGO0obFAQCAT5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9mdW5jdGlvbl90eXBlX2J1aWxkZXIuZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9pbnZhbGlkX3R5cGVfYnVpbGRlci5kYXJ0hYwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5pbnZhbGlkX3R5cGVfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGUsIEludmFsaWRUeXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgVHlwZURlY2xhcmF0aW9uQnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgVHlwZUJ1aWxkZXIsIExpYnJhcnlCdWlsZGVyOwoKY2xhc3MgSW52YWxpZFR5cGVCdWlsZGVyIGV4dGVuZHMgVHlwZURlY2xhcmF0aW9uQnVpbGRlciB7CiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkludmFsaWRUeXBlQnVpbGRlciI7CgogIGZpbmFsIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CgogIGZpbmFsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQ7CgogIGZpbmFsIGJvb2wgc3VwcHJlc3NNZXNzYWdlOwoKICBJbnZhbGlkVHlwZUJ1aWxkZXIoU3RyaW5nIG5hbWUsIHRoaXMubWVzc2FnZSwKICAgICAge3RoaXMuY29udGV4dCwgdGhpcy5zdXBwcmVzc01lc3NhZ2U6IHRydWV9KQogICAgICA6IHN1cGVyKG51bGwsIDAsIG5hbWUsIG51bGwsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS51cmkpOwoKICBAb3ZlcnJpZGUKICBJbnZhbGlkVHlwZSBnZXQgdGFyZ2V0ID0+IGNvbnN0IEludmFsaWRUeXBlKCk7CgogIERhcnRUeXBlIGJ1aWxkVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIHJldHVybiBidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzKGxpYnJhcnksIG51bGwpOwogIH0KCiAgLy8vIFtBcmd1bWVudHNdIGhhdmUgYWxyZWFkeSBiZWVuIGJ1aWx0LgogIERhcnRUeXBlIGJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cykgewogICAgaWYgKCFzdXBwcmVzc01lc3NhZ2UpIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UubWVzc2FnZU9iamVjdCwgbWVzc2FnZS5jaGFyT2Zmc2V0LAogICAgICAgICAgbWVzc2FnZS5sZW5ndGgsIG1lc3NhZ2UudXJpLAogICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW52YWxpZFR5cGUoKTsKICB9Cn0KLwBOTjwBJAE9ATIBMwFJATowASABJgEeATAyRQEMMQFMOAQBKyk6HEQnHQYgBAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2ludmFsaWRfdHlwZV9idWlsZGVyLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvbGlicmFyeV9idWlsZGVyLmRhcnSjZS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmxpYnJhcnlfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgTGlicmFyeTsKCmltcG9ydCAnLi4vY29tYmluYXRvci5kYXJ0JyBzaG93IENvbWJpbmF0b3I7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgaW50ZXJuYWxQcm9ibGVtLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vZXhwb3J0LmRhcnQnIHNob3cgRXhwb3J0OwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9ybWF0dGVkTWVzc2FnZSwKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4sCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3M7CgppbXBvcnQgJy4uL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgQnVpbGRlciwKICAgICAgICBGaWVsZEJ1aWxkZXIsCiAgICAgICAgTW9kaWZpZXJCdWlsZGVyLAogICAgICAgIE5hbWVJdGVyYXRvciwKICAgICAgICBQcmVmaXhCdWlsZGVyLAogICAgICAgIFNjb3BlLAogICAgICAgIFNjb3BlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlcjsKCmFic3RyYWN0IGNsYXNzIExpYnJhcnlCdWlsZGVyIGV4dGVuZHMgTW9kaWZpZXJCdWlsZGVyIHsKICBmaW5hbCBTY29wZSBzY29wZTsKCiAgZmluYWwgU2NvcGUgZXhwb3J0U2NvcGU7CgogIGZpbmFsIFNjb3BlQnVpbGRlciBzY29wZUJ1aWxkZXI7CgogIGZpbmFsIFNjb3BlQnVpbGRlciBleHBvcnRTY29wZUJ1aWxkZXI7CgogIGZpbmFsIExpc3Q8RXhwb3J0PiBleHBvcnRlcnMgPSA8RXhwb3J0PltdOwoKICBMaWJyYXJ5QnVpbGRlciBwYXJ0T2ZMaWJyYXJ5OwoKICBib29sIG1heUltcGxlbWVudFJlc3RyaWN0ZWRUeXBlcyA9IGZhbHNlOwoKICBMaWJyYXJ5QnVpbGRlcihVcmkgZmlsZVVyaSwgdGhpcy5zY29wZSwgdGhpcy5leHBvcnRTY29wZSkKICAgICAgOiBzY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKHNjb3BlKSwKICAgICAgICBleHBvcnRTY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKGV4cG9ydFNjb3BlKSwKICAgICAgICBzdXBlcihudWxsLCAtMSwgZmlsZVVyaSk7CgogIGJvb2wgZ2V0IGxlZ2FjeU1vZGUgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IGZhbHNlOwoKICAvLy8gU2V0IHRoZSBsYW5nYXVnZSB2ZXJzaW9uIHRvIGEgc3BlY2lmaWMgbm9uLW51bGwgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24uCiAgLy8vCiAgLy8vIElmIHRoZSBsYW5ndWFnZSB2ZXJzaW9uIGhhcyBwcmV2aW91c2x5IGJlZW4gZXhwbGljaXRseSBzZXQgc2V0IChpLmUuIHdpdGgKICAvLy8gW2V4cGxpY2l0XSBzZXQgdG8gdHJ1ZSksIGFueSBzdWJzZXF1ZW50IGNhbGwgKGV4cGxpY2l0IG9yIG5vdCkgc2hvdWxkIGJlCiAgLy8vIGlnbm9yZWQuCiAgLy8vIE11bHRpcGxlIGNhbGxzIHdpdGggW2V4cGxpY2l0XSBzZXQgdG8gZmFsc2Ugc2hvdWxkIGJlIGFsbG93ZWQgdGhvdWdoLgogIC8vLwogIC8vLyBUaGUgbWFpbiBpZGVhIGlzIHRoYXQgdGhlIC5wYWNrYWdlcyBmaWxlIHNwZWNpZmllcyBhIGRlZmF1bHQgbGFuZ3VhZ2UKICAvLy8gdmVyc2lvbiwgYnV0IHRoYXQgdGhlIGxpYnJhcnkgY2FuIGhhdmUgc291cmNlIGNvZGUgdGhhdCBzcGVjaWZpZXMgYW5vdGhlcgogIC8vLyBvbmUgd2hpY2ggc2hvdWxkIGJlIHN1cHBvcnRlZCwgYnV0IHNwZWNpZnlpbmcgc2V2ZXJhbCBpbiBjb2RlIHNob3VsZCBub3QKICAvLy8gY2hhbmdlIGFueXRoaW5nLgogIC8vLwogIC8vLyBbb2Zmc2V0XSBhbmQgW2xlbmd0aF0gcmVmZXJzIHRvIHRoZSBvZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgc291cmNlIGNvZGUKICAvLy8gc3BlY2lmeWluZyB0aGUgbGFuZ3VhZ2UgdmVyc2lvbi4KICB2b2lkIHNldExhbmd1YWdlVmVyc2lvbihpbnQgbWFqb3IsIGludCBtaW5vciwKICAgICAge2ludCBvZmZzZXQ6IDAsIGludCBsZW5ndGgsIGJvb2wgZXhwbGljaXR9KTsKCiAgQG92ZXJyaWRlCiAgQnVpbGRlciBnZXQgcGFyZW50ID0+IG51bGw7CgogIGJvb2wgZ2V0IGlzUGFydCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkxpYnJhcnlCdWlsZGVyIjsKCiAgTG9hZGVyIGdldCBsb2FkZXI7CgogIEBvdmVycmlkZQogIGludCBnZXQgbW9kaWZpZXJzID0+IDA7CgogIEBvdmVycmlkZQogIExpYnJhcnkgZ2V0IHRhcmdldDsKCiAgVXJpIGdldCB1cmk7CgogIEl0ZXJhdG9yPEJ1aWxkZXI+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gTGlicmFyeUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvcih0aGlzKTsKICB9CgogIE5hbWVJdGVyYXRvciBnZXQgbmFtZUl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgTGlicmFyeUxvY2FsRGVjbGFyYXRpb25OYW1lSXRlcmF0b3IodGhpcyk7CiAgfQoKICBCdWlsZGVyIGFkZEJ1aWxkZXIoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgZGVjbGFyYXRpb24sIGludCBjaGFyT2Zmc2V0KTsKCiAgdm9pZCBhZGRFeHBvcnRlcigKICAgICAgTGlicmFyeUJ1aWxkZXIgZXhwb3J0ZXIsIExpc3Q8Q29tYmluYXRvcj4gY29tYmluYXRvcnMsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBleHBvcnRlcnMuYWRkKG5ldyBFeHBvcnQoZXhwb3J0ZXIsIHRoaXMsIGNvbWJpbmF0b3JzLCBjaGFyT2Zmc2V0KSk7CiAgfQoKICAvLy8gQWRkIGEgcHJvYmxlbSB3aXRoIGEgc2V2ZXJpdHkgZGV0ZXJtaW5lZCBieSB0aGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCiAgLy8vCiAgLy8vIElmIFtmaWxlVXJpXSBpcyBudWxsLCBpdCBkZWZhdWx0cyB0byBgdGhpcy5maWxlVXJpYC4KICAvLy8KICAvLy8gU2VlIGBMb2FkZXIuYWRkTWVzc2FnZWAgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZQogIC8vLyBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLgogIEZvcm1hdHRlZE1lc3NhZ2UgYWRkUHJvYmxlbSgKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLAogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0LAogICAgICBTZXZlcml0eSBzZXZlcml0eSwKICAgICAgYm9vbCBwcm9ibGVtT25MaWJyYXJ5OiBmYWxzZX0pIHsKICAgIGZpbGVVcmkgPz89IHRoaXMuZmlsZVVyaTsKCiAgICByZXR1cm4gbG9hZGVyLmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCBmaWxlVXJpLAogICAgICAgIHdhc0hhbmRsZWQ6IHdhc0hhbmRsZWQsCiAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICBzZXZlcml0eTogc2V2ZXJpdHksCiAgICAgICAgcHJvYmxlbU9uTGlicmFyeTogdHJ1ZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBleHBvcnQgc2NvcGUgd2FzIG1vZGlmaWVkLgogIGJvb2wgYWRkVG9FeHBvcnRTY29wZShTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIsIFtpbnQgY2hhck9mZnNldCA9IC0xXSkgewogICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiXyIpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobWVtYmVyIGlzIFByZWZpeEJ1aWxkZXIpIHJldHVybiBmYWxzZTsKICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IG1hcCA9CiAgICAgICAgbWVtYmVyLmlzU2V0dGVyID8gZXhwb3J0U2NvcGUuc2V0dGVycyA6IGV4cG9ydFNjb3BlLmxvY2FsOwogICAgQnVpbGRlciBleGlzdGluZyA9IG1hcFtuYW1lXTsKICAgIGlmIChleGlzdGluZyA9PSBtZW1iZXIpIHJldHVybiBmYWxzZTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIEJ1aWxkZXIgcmVzdWx0ID0gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICAgICAgbmFtZSwgZXhpc3RpbmcsIG1lbWJlciwgY2hhck9mZnNldCwKICAgICAgICAgIGlzRXhwb3J0OiB0cnVlKTsKICAgICAgbWFwW25hbWVdID0gcmVzdWx0OwogICAgICByZXR1cm4gcmVzdWx0ICE9IGV4aXN0aW5nOwogICAgfSBlbHNlIHsKICAgICAgbWFwW25hbWVdID0gbWVtYmVyOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIGFkZFRvU2NvcGUoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyLCBpbnQgY2hhck9mZnNldCwgYm9vbCBpc0ltcG9ydCk7CgogIEJ1aWxkZXIgY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgQnVpbGRlciBkZWNsYXJhdGlvbiwgQnVpbGRlciBvdGhlciwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtib29sIGlzRXhwb3J0OiBmYWxzZSwgYm9vbCBpc0ltcG9ydDogZmFsc2V9KTsKCiAgaW50IGZpbmlzaERlZmVycmVkTG9hZFRlYXJvZmZzKCkgPT4gMDsKCiAgaW50IGZpbmlzaEZvcndhcmRlcnMoKSA9PiAwOwoKICBpbnQgZmluaXNoTmF0aXZlTWV0aG9kcygpID0+IDA7CgogIGludCBmaW5pc2hQYXRjaE1ldGhvZHMoKSA9PiAwOwoKICAvLy8gTG9va3MgdXAgW2NvbnN0cnVjdG9yTmFtZV0gaW4gdGhlIGNsYXNzIG5hbWVkIFtjbGFzc05hbWVdLgogIC8vLwogIC8vLyBUaGUgY2xhc3MgaXMgbG9va2VkIHVwIGluIHRoaXMgbGlicmFyeSdzIGV4cG9ydCBzY29wZSB1bmxlc3MKICAvLy8gW2J5cGFzc0xpYnJhcnlQcml2YWN5XSBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGl0IGlzIGxvb2tlZCB1cCBpbiB0aGUKICAvLy8gbGlicmFyeSBzY29wZSBvZiB0aGlzIGxpYnJhcnkuCiAgLy8vCiAgLy8vIEl0IGlzIGFuIGVycm9yIGlmIG5vIHN1Y2ggY2xhc3MgaXMgZm91bmQsIG9yIGlmIHRoZSBjbGFzcyBkb2Vzbid0IGhhdmUgYQogIC8vLyBtYXRjaGluZyBjb25zdHJ1Y3RvciAob3IgZmFjdG9yeSkuCiAgLy8vCiAgLy8vIElmIFtjb25zdHJ1Y3Rvck5hbWVdIGlzIG51bGwgb3IgdGhlIGVtcHR5IHN0cmluZywgaXQncyBhc3N1bWVkIHRvIGJlIGFuCiAgLy8vIHVubmFtZWQgY29uc3RydWN0b3IuIGl0J3MgYW4gZXJyb3IgaWYgW2NvbnN0cnVjdG9yTmFtZV0gc3RhcnRzIHdpdGgKICAvLy8gYCJfImAsIGFuZCBbYnlwYXNzTGlicmFyeVByaXZhY3ldIGlzIGZhbHNlLgogIEJ1aWxkZXIgZ2V0Q29uc3RydWN0b3IoU3RyaW5nIGNsYXNzTmFtZSwKICAgICAge1N0cmluZyBjb25zdHJ1Y3Rvck5hbWUsIGJvb2wgYnlwYXNzTGlicmFyeVByaXZhY3k6IGZhbHNlfSkgewogICAgY29uc3RydWN0b3JOYW1lID8/PSAiIjsKICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUuc3RhcnRzV2l0aCgiXyIpICYmICFieXBhc3NMaWJyYXJ5UHJpdmFjeSkgewogICAgICByZXR1cm4gaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3MKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhjb25zdHJ1Y3Rvck5hbWUpLAogICAgICAgICAgLTEsCiAgICAgICAgICBudWxsKTsKICAgIH0KICAgIEJ1aWxkZXIgY2xzID0gKGJ5cGFzc0xpYnJhcnlQcml2YWN5ID8gc2NvcGUgOiBleHBvcnRTY29wZSkKICAgICAgICAubG9va3VwKGNsYXNzTmFtZSwgLTEsIG51bGwpOwogICAgaWYgKGNscyBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBUaGlzIGNvZGUgaXMgc2ltaWxhciB0byBjb2RlIGluIGBlbmROZXdFeHByZXNzaW9uYCBpbgogICAgICAvLyBgYm9keV9idWlsZGVyLmRhcnRgLCB0cnkgdG8gc2hhcmUgaXQuCiAgICAgIEJ1aWxkZXIgY29uc3RydWN0b3IgPQogICAgICAgICAgY2xzLmZpbmRDb25zdHJ1Y3Rvck9yRmFjdG9yeShjb25zdHJ1Y3Rvck5hbWUsIC0xLCBudWxsLCB0aGlzKTsKICAgICAgaWYgKGNvbnN0cnVjdG9yID09IG51bGwpIHsKICAgICAgICAvLyBGYWxsLXRocm91Z2ggdG8gaW50ZXJuYWwgZXJyb3IgYmVsb3cuCiAgICAgIH0gZWxzZSBpZiAoY29uc3RydWN0b3IuaXNDb25zdHJ1Y3RvcikgewogICAgICAgIGlmICghY2xzLmlzQWJzdHJhY3QpIHsKICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY29uc3RydWN0b3IuaXNGYWN0b3J5KSB7CiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgICB9CiAgICB9CiAgICB0aHJvdyBpbnRlcm5hbFByb2JsZW0oCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICIkY2xhc3NOYW1lLiRjb25zdHJ1Y3Rvck5hbWUiLCB1cmkpLAogICAgICAgIC0xLAogICAgICAgIG51bGwpOwogIH0KCiAgaW50IGZpbmlzaFR5cGVWYXJpYWJsZXMoQ2xhc3NCdWlsZGVyIG9iamVjdCwgVHlwZUJ1aWxkZXIgZHluYW1pY1R5cGUpID0+IDA7CgogIC8vLyBUaGlzIG1ldGhvZCBpbnN0YW50aWF0ZXMgdHlwZSBwYXJhbWV0ZXJzIHRvIHRoZWlyIGJvdW5kcyBpbiBzb21lIGNhc2VzCiAgLy8vIHdoZXJlIHRoZXkgd2VyZSBvbWl0dGVkIGJ5IHRoZSBwcm9ncmFtbWVyIGFuZCBub3QgcHJvdmlkZWQgYnkgdGhlIHR5cGUKICAvLy8gaW5mZXJlbmNlLiAgVGhlIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlzdGluY3QgdHlwZSB2YXJpYWJsZXMKICAvLy8gdGhhdCB3ZXJlIGluc3RhbnRpYXRlZCBpbiB0aGlzIGxpYnJhcnkuCiAgaW50IGNvbXB1dGVEZWZhdWx0VHlwZXMoVHlwZUJ1aWxkZXIgZHluYW1pY1R5cGUsIFR5cGVCdWlsZGVyIGJvdHRvbVR5cGUsCiAgICAgIENsYXNzQnVpbGRlciBvYmplY3RDbGFzcykgewogICAgcmV0dXJuIDA7CiAgfQoKICB2b2lkIGJlY29tZUNvcmVMaWJyYXJ5KCkgewogICAgaWYgKHNjb3BlLmxvY2FsWyJkeW5hbWljIl0gPT0gbnVsbCkgewogICAgICBhZGRTeW50aGV0aWNEZWNsYXJhdGlvbk9mRHluYW1pYygpOwogICAgfQogIH0KCiAgdm9pZCBhZGRTeW50aGV0aWNEZWNsYXJhdGlvbk9mRHluYW1pYygpOwoKICAvLy8gTG9va3VwcyB0aGUgbWVtYmVyIFtuYW1lXSBkZWNsYXJlZCBpbiB0aGlzIGxpYnJhcnkuCiAgLy8vCiAgLy8vIElmIFtyZXF1aXJlZF0gaXMgYHRydWVgIGFuZCBubyBtZW1iZXIgaXMgZm91bmQgYW4gaW50ZXJuYWwgcHJvYmxlbSBpcwogIC8vLyByZXBvcnRlZC4KICBCdWlsZGVyIGxvb2t1cExvY2FsTWVtYmVyKFN0cmluZyBuYW1lLCB7Ym9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBCdWlsZGVyIGJ1aWxkZXIgPSBzY29wZS5sb2NhbFtuYW1lXTsKICAgIGlmIChyZXF1aXJlZCAmJiBidWlsZGVyID09IG51bGwpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgbmFtZSwgZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgLTEsCiAgICAgICAgICBudWxsKTsKICAgIH0KICAgIHJldHVybiBidWlsZGVyOwogIH0KCiAgQnVpbGRlciBsb29rdXAoU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgcmV0dXJuIHNjb3BlLmxvb2t1cChuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIC8vLyBJZiB0aGlzIGlzIGEgcGF0Y2ggbGlicmFyeSwgYXBwbHkgaXRzIHBhdGNoZXMgdG8gW29yaWdpbl0uCiAgdm9pZCBhcHBseVBhdGNoZXMoKSB7CiAgICBpZiAoIWlzUGF0Y2gpIHJldHVybjsKICAgIHVuc3VwcG9ydGVkKCIke3J1bnRpbWVUeXBlfS5hcHBseVBhdGNoZXMiLCAtMSwgZmlsZVVyaSk7CiAgfQoKICB2b2lkIHJlY29yZEFjY2VzcyhpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwgVXJpIGZpbGVVcmkpIHt9CgogIHZvaWQgYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoKSB7fQoKICBMaXN0PEZpZWxkQnVpbGRlcj4gdGFrZUltcGxpY2l0bHlUeXBlZEZpZWxkcygpID0+IG51bGw7Cn0KCmNsYXNzIExpYnJhcnlMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxCdWlsZGVyPiB7CiAgZmluYWwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeTsKICBmaW5hbCBJdGVyYXRvcjxCdWlsZGVyPiBpdGVyYXRvcjsKCiAgTGlicmFyeUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvcih0aGlzLmxpYnJhcnkpCiAgICAgIDogaXRlcmF0b3IgPSBsaWJyYXJ5LnNjb3BlLml0ZXJhdG9yOwoKICBCdWlsZGVyIGdldCBjdXJyZW50ID0+IGl0ZXJhdG9yLmN1cnJlbnQ7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBpZiAoY3VycmVudC5wYXJlbnQgPT0gbGlicmFyeSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgpjbGFzcyBMaWJyYXJ5TG9jYWxEZWNsYXJhdGlvbk5hbWVJdGVyYXRvciBpbXBsZW1lbnRzIE5hbWVJdGVyYXRvciB7CiAgZmluYWwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeTsKICBmaW5hbCBOYW1lSXRlcmF0b3IgaXRlcmF0b3I7CgogIExpYnJhcnlMb2NhbERlY2xhcmF0aW9uTmFtZUl0ZXJhdG9yKHRoaXMubGlicmFyeSkKICAgICAgOiBpdGVyYXRvciA9IGxpYnJhcnkuc2NvcGUubmFtZUl0ZXJhdG9yOwoKICBCdWlsZGVyIGdldCBjdXJyZW50ID0+IGl0ZXJhdG9yLmN1cnJlbnQ7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBpdGVyYXRvci5uYW1lOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKGN1cnJlbnQucGFyZW50ID09IGxpYnJhcnkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQqBLwBOTjwBHwEvAS0BPQElASUBGgkaGBE0KzkBKQEWCRYRFhkWFw8WFQE4FQEbASMBKQEtASABLAE8MDwiASABIQFPBlBPD0wGTFBPFwZPJzAzAQweARwBDCwBFQEMGgEMFgEPASMyBAEiOgQBSAEUT0gEAU8GOwY4Jx9AHyQZJx4BQyAaHCEEATVOLC8fQyIqHDQuGxohDRoGEQQBTwEnRzUBKQEfASIBIQFBBkNLJQZPKQZOSjIrRBxEHjovDhEGPyYfSi8cSSExLh8eCiocCAYbQjEMDwQBTgFNTUsuSyIOBAEdKioGBAErAToGTBBDKScXOygOEQYUBAE9NAQBQRgaPQQBQAEkAToCAUUgJAEwKwErARQiMgYSBAIBRCAfATQvASsBJAEUIjIGEgQCAThwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9saWJyYXJ5X2J1aWxkZXIuZGFydEBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9tZW1iZXJfYnVpbGRlci5kYXJ0h6IvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5tZW1iZXJfYnVpbGRlcjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bnN1cHBvcnRlZDsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdyBDbGFzc0J1aWxkZXIsIEJ1aWxkZXIsIExpYnJhcnlCdWlsZGVyLCBNb2RpZmllckJ1aWxkZXI7CgppbXBvcnQgJ2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnZXh0ZW5zaW9uX2J1aWxkZXIuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBNZW1iZXJCdWlsZGVyIGV4dGVuZHMgTW9kaWZpZXJCdWlsZGVyIHsKICAvLy8gRm9yIHRvcC1sZXZlbCBtZW1iZXJzLCB0aGUgcGFyZW50IGlzIHNldCBjb3JyZWN0bHkgZHVyaW5nCiAgLy8vIGNvbnN0cnVjdGlvbi4gSG93ZXZlciwgZm9yIGNsYXNzIG1lbWJlcnMsIHRoZSBwYXJlbnQgaXMgaW5pdGlhbGx5IHRoZQogIC8vLyBsaWJyYXJ5IGFuZCB1cGRhdGVkIGxhdGVyLgogIEBvdmVycmlkZQogIEJ1aWxkZXIgcGFyZW50OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWU7CgogIE1lbWJlckJ1aWxkZXIodGhpcy5wYXJlbnQsIGludCBjaGFyT2Zmc2V0KSA6IHN1cGVyKHBhcmVudCwgY2hhck9mZnNldCk7CgogIGJvb2wgZ2V0IGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciA9PiBpc0RlY2xhcmF0aW9uTWVtYmVyICYmICFpc1N0YXRpYzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDbGFzc0luc3RhbmNlTWVtYmVyID0+IGlzQ2xhc3NNZW1iZXIgJiYgIWlzU3RhdGljOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4dGVuc2lvbkluc3RhbmNlTWVtYmVyID0+IGlzRXh0ZW5zaW9uTWVtYmVyICYmICFpc1N0YXRpYzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEZWNsYXJhdGlvbk1lbWJlciA9PiBwYXJlbnQgaXMgRGVjbGFyYXRpb25CdWlsZGVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NsYXNzTWVtYmVyID0+IHBhcmVudCBpcyBDbGFzc0J1aWxkZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXh0ZW5zaW9uTWVtYmVyID0+IHBhcmVudCBpcyBFeHRlbnNpb25CdWlsZGVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsID0+ICFpc0RlY2xhcmF0aW9uTWVtYmVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05hdGl2ZSA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvciA9PiBmYWxzZTsKCiAgTGlicmFyeUJ1aWxkZXIgZ2V0IGxpYnJhcnkgewogICAgaWYgKHBhcmVudCBpcyBMaWJyYXJ5QnVpbGRlcikgewogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gcGFyZW50OwogICAgICByZXR1cm4gbGlicmFyeS5wYXJ0T2ZMaWJyYXJ5ID8/IGxpYnJhcnk7CiAgICB9IGVsc2UgewogICAgICBDbGFzc0J1aWxkZXIgY2xzID0gcGFyZW50OwogICAgICByZXR1cm4gY2xzLmxpYnJhcnk7CiAgICB9CiAgfQoKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHt9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gbmFtZTsKCiAgdm9pZCBpbmZlclR5cGUoKSA9PiB1bnN1cHBvcnRlZCgiaW5mZXJUeXBlIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIHZvaWQgaW5mZXJDb3BpZWRUeXBlKGNvdmFyaWFudCBPYmplY3Qgb3RoZXIpIHsKICAgIHVuc3VwcG9ydGVkKCJpbmZlclR5cGUiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9Cn0KSgBOTjwBHgEsARZBASMhATdATCEMEgEMEwFKAUwBDEABDEgBDEABDDQBDDwBDC8BDB4BOAEfJCcvDSEaBgQBOgEMKAFFATEzBAIBN3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL21lbWJlcl9idWlsZGVyLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvbWV0YWRhdGFfYnVpbGRlci5kYXJ0hlEvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5tZXRhZGF0YV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBBbm5vdGF0YWJsZSwgQ2xhc3MsIExpYnJhcnk7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgQ2xhc3NCdWlsZGVyLCBNZW1iZXJCdWlsZGVyOwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgU2NvcGU7CgpjbGFzcyBNZXRhZGF0YUJ1aWxkZXIgewogIGZpbmFsIFRva2VuIGJlZ2luVG9rZW47CgogIGludCBnZXQgY2hhck9mZnNldCA9PiBiZWdpblRva2VuLmNoYXJPZmZzZXQ7CgogIE1ldGFkYXRhQnVpbGRlcih0aGlzLmJlZ2luVG9rZW4pOwoKICBzdGF0aWMgdm9pZCBidWlsZEFubm90YXRpb25zKAogICAgICBBbm5vdGF0YWJsZSBwYXJlbnQsCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwKICAgICAgQ2xhc3NCdWlsZGVyIGNsYXNzQnVpbGRlciwKICAgICAgTWVtYmVyQnVpbGRlciBtZW1iZXIpIHsKICAgIGlmIChtZXRhZGF0YSA9PSBudWxsKSByZXR1cm47CiAgICBVcmkgZmlsZVVyaSA9IG1lbWJlcj8uZmlsZVVyaSA/PyBjbGFzc0J1aWxkZXI/LmZpbGVVcmkgPz8gbGlicmFyeS5maWxlVXJpOwogICAgU2NvcGUgc2NvcGUgPSBwYXJlbnQgaXMgTGlicmFyeSB8fCBwYXJlbnQgaXMgQ2xhc3MgfHwgY2xhc3NCdWlsZGVyID09IG51bGwKICAgICAgICA/IGxpYnJhcnkuc2NvcGUKICAgICAgICA6IGNsYXNzQnVpbGRlci5zY29wZTsKICAgIEJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyID0gbmV3IEJvZHlCdWlsZGVyLmZvck91dGxpbmVFeHByZXNzaW9uKAogICAgICAgIGxpYnJhcnksIGNsYXNzQnVpbGRlciwgbWVtYmVyLCBzY29wZSwgZmlsZVVyaSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1ldGFkYXRhLmxlbmd0aDsgKytpKSB7CiAgICAgIE1ldGFkYXRhQnVpbGRlciBhbm5vdGF0aW9uQnVpbGRlciA9IG1ldGFkYXRhW2ldOwogICAgICBwYXJlbnQuYWRkQW5ub3RhdGlvbigKICAgICAgICAgIGJvZHlCdWlsZGVyLnBhcnNlQW5ub3RhdGlvbihhbm5vdGF0aW9uQnVpbGRlci5iZWdpblRva2VuKSk7CiAgICB9CiAgICBib2R5QnVpbGRlci5pbmZlckFubm90YXRpb25zKHBhcmVudC5hbm5vdGF0aW9ucyk7CiAgICBib2R5QnVpbGRlci5yZXNvbHZlUmVkaXJlY3RpbmdGYWN0b3J5VGFyZ2V0cygpOwogIH0KfQoxAE5OPAEgAUMBNwFJASUBSgEjARgaAS8BJAEgGiYkIR4iT08YHkQ4MDccRgY2NAQCATlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9tZXRhZGF0YV9idWlsZGVyLmRhcnRLc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvbWl4aW5fYXBwbGljYXRpb25fYnVpbGRlci5kYXJ0iBwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5taXhpbl9hcHBsaWNhdGlvbl9idWlsZGVyOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXIsIFR5cGVCdWlsZGVyLCBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBJbnRlcmZhY2VUeXBlLCBTdXBlcnR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTG9jYXRlZE1lc3NhZ2U7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgpjbGFzcyBNaXhpbkFwcGxpY2F0aW9uQnVpbGRlciBleHRlbmRzIFR5cGVCdWlsZGVyIHsKICBmaW5hbCBUeXBlQnVpbGRlciBzdXBlcnR5cGU7CiAgZmluYWwgTGlzdDxUeXBlQnVpbGRlcj4gbWl4aW5zOwogIFN1cGVydHlwZSBidWlsdFR5cGU7CgogIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlczsKCiAgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXIodGhpcy5zdXBlcnR5cGUsIHRoaXMubWl4aW5zKTsKCiAgU3RyaW5nIGdldCBuYW1lID0+IG51bGw7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJNaXhpbkFwcGxpY2F0aW9uQnVpbGRlciI7CgogIFN0cmluZ0J1ZmZlciBwcmludE9uKFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKICAgIGJ1ZmZlci53cml0ZShzdXBlcnR5cGUpOwogICAgYnVmZmVyLndyaXRlKCIgd2l0aCAiKTsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChUeXBlQnVpbGRlciB0IGluIG1peGlucykgewogICAgICBpZiAoIWZpcnN0KSBidWZmZXIud3JpdGUoIiwgIik7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIHQucHJpbnRPbihidWZmZXIpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgYnVpbGQoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgaW50IGNoYXJPZmZzZXQgPSAtMTsgLy8gVE9ETyhhaGUpOiBQcm92aWRlIHRoZXNlLgogICAgVXJpIGZpbGVVcmkgPSBudWxsOyAvLyBUT0RPKGFoZSk6IFByb3ZpZGUgdGhlc2UuCiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdXBlcnR5cGUgYnVpbGRTdXBlcnR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZFN1cGVydHlwZSIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3VwZXJ0eXBlIGJ1aWxkTWl4ZWRJblR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZE1peGVkSW5UeXBlIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBidWlsZEludmFsaWRUeXBlKExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZEludmFsaWRUeXBlIiwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLnVyaSk7CiAgfQoKICBNaXhpbkFwcGxpY2F0aW9uQnVpbGRlciBjbG9uZShMaXN0PFR5cGVCdWlsZGVyPiBuZXdUeXBlcykgewogICAgaW50IGNoYXJPZmZzZXQgPSAtMTsgLy8gVE9ETyhkbWl0cnlhcyk6IFByb3ZpZGUgdGhlc2UuCiAgICBVcmkgZmlsZVVyaSA9IG51bGw7IC8vIFRPRE8oZG1pdHJ5YXMpOiBQcm92aWRlIHRoZXNlLgogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJjbG9uZSIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KfQpHAE5OPAEpAU0BQAEyASwBNB8iFwErATgBGwE1AS4dHBckJhUZBhMEAQwwNjU2BAEMHD0/BAEMHj1BBAEMTU0EAT47OjYEAgFCcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbWl4aW5fYXBwbGljYXRpb25fYnVpbGRlci5kYXJ0QnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL21vZGlmaWVyX2J1aWxkZXIuZGFydIhHLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubW9kaWZpZXJfYnVpbGRlcjsKCmltcG9ydCAnLi4vbW9kaWZpZXIuZGFydCcKICAgIHNob3cKICAgICAgICBhYnN0cmFjdE1hc2ssCiAgICAgICAgY29uc3RNYXNrLAogICAgICAgIGNvdmFyaWFudE1hc2ssCiAgICAgICAgZXh0ZXJuYWxNYXNrLAogICAgICAgIGZpbmFsTWFzaywKICAgICAgICBoYXNDb25zdENvbnN0cnVjdG9yTWFzaywKICAgICAgICBoYXNJbml0aWFsaXplck1hc2ssCiAgICAgICAgaW5pdGlhbGl6aW5nRm9ybWFsTWFzaywKICAgICAgICBsYXRlTWFzaywKICAgICAgICBtaXhpbkRlY2xhcmF0aW9uTWFzaywKICAgICAgICBuYW1lZE1peGluQXBwbGljYXRpb25NYXNrLAogICAgICAgIHN0YXRpY01hc2s7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBCdWlsZGVyOwoKYWJzdHJhY3QgY2xhc3MgTW9kaWZpZXJCdWlsZGVyIGV4dGVuZHMgQnVpbGRlciB7CiAgQnVpbGRlciBwYXJlbnQ7CgogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBmaW5hbCBVcmkgZmlsZVVyaTsKCiAgTW9kaWZpZXJCdWlsZGVyKHRoaXMucGFyZW50LCB0aGlzLmNoYXJPZmZzZXQsIFtVcmkgZmlsZVVyaV0pCiAgICAgIDogZmlsZVVyaSA9IGZpbGVVcmkgPz8gcGFyZW50Py5maWxlVXJpOwoKICBpbnQgZ2V0IG1vZGlmaWVyczsKCiAgYm9vbCBnZXQgaXNBYnN0cmFjdCA9PiAobW9kaWZpZXJzICYgYWJzdHJhY3RNYXNrKSAhPSAwOwoKICBib29sIGdldCBpc0NvbnN0ID0+IChtb2RpZmllcnMgJiBjb25zdE1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGlzQ292YXJpYW50ID0+IChtb2RpZmllcnMgJiBjb3ZhcmlhbnRNYXNrKSAhPSAwOwoKICBib29sIGdldCBpc0V4dGVybmFsID0+IChtb2RpZmllcnMgJiBleHRlcm5hbE1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGlzRmluYWwgPT4gKG1vZGlmaWVycyAmIGZpbmFsTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gKG1vZGlmaWVycyAmIHN0YXRpY01hc2spICE9IDA7CgogIGJvb2wgZ2V0IGlzTGF0ZSA9PiAobW9kaWZpZXJzICYgbGF0ZU1hc2spICE9IDA7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFkZCB0aGlzIHdoZW4gc2VtYW50aWNzIGZvcgogIC8vIGBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLmlzUmVxdWlyZWRgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gc3VwcG9ydCByZXF1aXJlZAogIC8vIG5hbWVkIHBhcmFtZXRlcnMuCiAgLy9ib29sIGdldCBpc1JlcXVpcmVkID0+IChtb2RpZmllcnMgJiByZXF1aXJlZE1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uIHsKICAgIHJldHVybiAobW9kaWZpZXJzICYgbmFtZWRNaXhpbkFwcGxpY2F0aW9uTWFzaykgIT0gMDsKICB9CgogIGJvb2wgZ2V0IGhhc0luaXRpYWxpemVyID0+IChtb2RpZmllcnMgJiBoYXNJbml0aWFsaXplck1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGlzSW5pdGlhbGl6aW5nRm9ybWFsID0+IChtb2RpZmllcnMgJiBpbml0aWFsaXppbmdGb3JtYWxNYXNrKSAhPSAwOwoKICBib29sIGdldCBoYXNDb25zdENvbnN0cnVjdG9yID0+IChtb2RpZmllcnMgJiBoYXNDb25zdENvbnN0cnVjdG9yTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNNaXhpbiA9PiAobW9kaWZpZXJzICYgbWl4aW5EZWNsYXJhdGlvbk1hc2spICE9IDA7CgogIFN0cmluZyBnZXQgbmFtZTsKCiAgYm9vbCBnZXQgaXNOYXRpdmUgPT4gZmFsc2U7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lOwoKICBTdHJpbmdCdWZmZXIgcHJpbnRPbihTdHJpbmdCdWZmZXIgYnVmZmVyKSB7CiAgICByZXR1cm4gYnVmZmVyLi53cml0ZShuYW1lID8/IGZ1bGxOYW1lRm9yRXJyb3JzKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICIkZGVidWdOYW1lKCR7cHJpbnRPbihuZXcgU3RyaW5nQnVmZmVyKCkpfSkiOwp9ClAATk48ASABGgkWExcWEyEcIBIeIxQBJAExEgEYARUBPy4BFQE6ATQBPAE6ATQBNgEyATZOFzwBJTkEAUQBTgFOAT8BEwEeARgBLjUEAUUCATlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9tb2RpZmllcl9idWlsZGVyLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvbmFtZV9pdGVyYXRvci5kYXJ0gWwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5uYW1lX2l0ZXJhdG9yOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgQnVpbGRlcjsKCmFic3RyYWN0IGNsYXNzIE5hbWVJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPEJ1aWxkZXI+IHsKICBTdHJpbmcgZ2V0IG5hbWU7Cn0KDQBOTjwBHQEkATsTAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbmFtZV9pdGVyYXRvci5kYXJ0RHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL25hbWVkX3R5cGVfYnVpbGRlci5kYXJ0o5ovLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5uYW1lZF90eXBlX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IERhcnRUeXBlLCBTdXBlcnR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTWVzc2FnZSwKICAgICAgICBUZW1wbGF0ZSwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMsCiAgICAgICAgbWVzc2FnZU5vdEFUeXBlQ29udGV4dCwKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICB0ZW1wbGF0ZU5vdEFUeXBlLAogICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUsCiAgICAgICAgdGVtcGxhdGVUeXBlTm90Rm91bmQ7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93IG5vTGVuZ3RoLCB0ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbCwgdGVtcGxhdGVTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBCdWlsZGVyLAogICAgICAgIElkZW50aWZpZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgUHJlZml4QnVpbGRlciwKICAgICAgICBRdWFsaWZpZWROYW1lLAogICAgICAgIFNjb3BlLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciwKICAgICAgICBmbGF0dGVuTmFtZTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEludmFsaWRUeXBlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIsCiAgICAgICAgZmxhdHRlbk5hbWU7CgpjbGFzcyBOYW1lZFR5cGVCdWlsZGVyIGV4dGVuZHMgVHlwZUJ1aWxkZXIgewogIGZpbmFsIE9iamVjdCBuYW1lOwoKICBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb247CgogIE5hbWVkVHlwZUJ1aWxkZXIodGhpcy5uYW1lLCB0aGlzLmFyZ3VtZW50cyk7CgogIE5hbWVkVHlwZUJ1aWxkZXIuZnJvbVR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIodGhpcy5kZWNsYXJhdGlvbiwKICAgICAgW3RoaXMuYXJndW1lbnRzXSkKICAgICAgOiB0aGlzLm5hbWUgPSBkZWNsYXJhdGlvbi5uYW1lOwoKICBAb3ZlcnJpZGUKICB2b2lkIGJpbmQoVHlwZURlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbikgewogICAgdGhpcy5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uPy5vcmlnaW47CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlc29sdmVJbigKICAgICAgU2NvcGUgc2NvcGUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgaWYgKGRlY2xhcmF0aW9uICE9IG51bGwpIHJldHVybjsKICAgIGZpbmFsIG5hbWUgPSB0aGlzLm5hbWU7CiAgICBCdWlsZGVyIG1lbWJlcjsKICAgIGlmIChuYW1lIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgT2JqZWN0IHF1YWxpZmllciA9IG5hbWUucXVhbGlmaWVyOwogICAgICBTdHJpbmcgcHJlZml4TmFtZSA9IGZsYXR0ZW5OYW1lKHF1YWxpZmllciwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIEJ1aWxkZXIgcHJlZml4ID0gc2NvcGUubG9va3VwKHByZWZpeE5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICBpZiAocHJlZml4IGlzIFByZWZpeEJ1aWxkZXIpIHsKICAgICAgICBtZW1iZXIgPSBwcmVmaXgubG9va3VwKG5hbWUubmFtZSwgbmFtZS5jaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChuYW1lIGlzIFN0cmluZykgewogICAgICBtZW1iZXIgPSBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9IGVsc2UgewogICAgICB1bmhhbmRsZWQoIiR7bmFtZS5ydW50aW1lVHlwZX0iLCAicmVzb2x2ZUluIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBpZiAobWVtYmVyIGlzIFR5cGVWYXJpYWJsZUJ1aWxkZXIpIHsKICAgICAgZGVjbGFyYXRpb24gPSBtZW1iZXIub3JpZ2luOwogICAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICBTdHJpbmcgdHlwZU5hbWU7CiAgICAgICAgaW50IHR5cGVOYW1lT2Zmc2V0OwogICAgICAgIGlmIChuYW1lIGlzIElkZW50aWZpZXIpIHsKICAgICAgICAgIHR5cGVOYW1lID0gbmFtZS5uYW1lOwogICAgICAgICAgdHlwZU5hbWVPZmZzZXQgPSBuYW1lLmNoYXJPZmZzZXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHR5cGVOYW1lID0gbmFtZTsKICAgICAgICAgIHR5cGVOYW1lT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgICAgICB9CiAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0KICAgICAgICAgICAgdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUud2l0aEFyZ3VtZW50cyh0eXBlTmFtZSk7CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIHR5cGVOYW1lT2Zmc2V0LCB0eXBlTmFtZS5sZW5ndGgsIGZpbGVVcmkpOwogICAgICAgIGRlY2xhcmF0aW9uID0gYnVpbGRJbnZhbGlkVHlwZSgKICAgICAgICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24oZmlsZVVyaSwgdHlwZU5hbWVPZmZzZXQsIHR5cGVOYW1lLmxlbmd0aCkpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIpIHsKICAgICAgZGVjbGFyYXRpb24gPSBtZW1iZXIub3JpZ2luOwogICAgICBpZiAoIWRlY2xhcmF0aW9uLmlzRXh0ZW5zaW9uKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsICYmIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXNDb3VudCAhPSAwKSB7CiAgICAgICAgICBTdHJpbmcgdHlwZU5hbWU7CiAgICAgICAgICBpbnQgdHlwZU5hbWVPZmZzZXQ7CiAgICAgICAgICBpZiAobmFtZSBpcyBJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIHR5cGVOYW1lID0gbmFtZS5uYW1lOwogICAgICAgICAgICB0eXBlTmFtZU9mZnNldCA9IG5hbWUuY2hhck9mZnNldDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHR5cGVOYW1lID0gbmFtZTsKICAgICAgICAgICAgdHlwZU5hbWVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgICAgICAgfQogICAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cwogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzQ291bnQpLAogICAgICAgICAgICAgIHR5cGVOYW1lT2Zmc2V0LAogICAgICAgICAgICAgIHR5cGVOYW1lLmxlbmd0aCwKICAgICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGUgPQogICAgICAgIG1lbWJlciA9PSBudWxsID8gdGVtcGxhdGVUeXBlTm90Rm91bmQgOiB0ZW1wbGF0ZU5vdEFUeXBlOwogICAgU3RyaW5nIGZsYXROYW1lID0gZmxhdHRlbk5hbWUobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0OwogICAgaWYgKG1lbWJlciAhPSBudWxsKSB7CiAgICAgIGNvbnRleHQgPSA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgIG1lc3NhZ2VOb3RBVHlwZUNvbnRleHQud2l0aExvY2F0aW9uKG1lbWJlci5maWxlVXJpLCBtZW1iZXIuY2hhck9mZnNldCwKICAgICAgICAgICAgbmFtZSBpcyBJZGVudGlmaWVyID8gbmFtZS5uYW1lLmxlbmd0aCA6ICIkbmFtZSIubGVuZ3RoKQogICAgICBdOwogICAgfQogICAgaW50IGxlbmd0aCA9CiAgICAgICAgbmFtZSBpcyBJZGVudGlmaWVyID8gbmFtZS5lbmRDaGFyT2Zmc2V0IC0gY2hhck9mZnNldCA6IGZsYXROYW1lLmxlbmd0aDsKICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlLndpdGhBcmd1bWVudHMoZmxhdE5hbWUpOwogICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSwgY29udGV4dDogY29udGV4dCk7CiAgICBkZWNsYXJhdGlvbiA9IGJ1aWxkSW52YWxpZFR5cGUoCiAgICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKSwKICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2hlY2soTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwgJiYKICAgICAgICBhcmd1bWVudHMubGVuZ3RoICE9IGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXNDb3VudCkgewogICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoCiAgICAgICAgICAud2l0aEFyZ3VtZW50cyhkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzQ291bnQpOwogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICBkZWNsYXJhdGlvbiA9CiAgICAgICAgICBidWlsZEludmFsaWRUeXBlKG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG5vcm1hbGl6ZShpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCAmJgogICAgICAgIGFyZ3VtZW50cy5sZW5ndGggIT0gZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc0NvdW50KSB7CiAgICAgIC8vIFthcmd1bWVudHNdIHdpbGwgYmUgbm9ybWFsaXplZCBsYXRlciBpZiB0aGV5IGFyZSBudWxsLgogICAgICBhcmd1bWVudHMgPSBudWxsOwogICAgfQogIH0KCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIk5hbWVkVHlwZUJ1aWxkZXIiOwoKICBTdHJpbmdCdWZmZXIgcHJpbnRPbihTdHJpbmdCdWZmZXIgYnVmZmVyKSB7CiAgICBidWZmZXIud3JpdGUobmFtZSk7CiAgICBpZiAoYXJndW1lbnRzPy5pc0VtcHR5ID8/IHRydWUpIHJldHVybiBidWZmZXI7CiAgICBidWZmZXIud3JpdGUoIjwiKTsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChUeXBlQnVpbGRlciB0IGluIGFyZ3VtZW50cykgewogICAgICBpZiAoIWZpcnN0KSBidWZmZXIud3JpdGUoIiwgIik7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIHQucHJpbnRPbihidWZmZXIpOwogICAgfQogICAgYnVmZmVyLndyaXRlKCI+Iik7CiAgICByZXR1cm4gYnVmZmVyOwogIH0KCiAgSW52YWxpZFR5cGVCdWlsZGVyIGJ1aWxkSW52YWxpZFR5cGUoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICAvLyBUT0RPKGFoZSk6IENvbnNpZGVyIGlmIGl0IG1ha2VzIHNlbnNlIHRvIHBhc3MgYSBRdWFsaWZpZWROYW1lIHRvCiAgICAvLyBJbnZhbGlkVHlwZUJ1aWxkZXI/CiAgICByZXR1cm4gbmV3IEludmFsaWRUeXBlQnVpbGRlcigKICAgICAgICBmbGF0dGVuTmFtZShuYW1lLCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UudXJpKSwgbWVzc2FnZSwKICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIFN1cGVydHlwZSBoYW5kbGVJbnZhbGlkU3VwZXJ0eXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIHZhciB0ZW1wbGF0ZSA9IGRlY2xhcmF0aW9uLmlzVHlwZVZhcmlhYmxlCiAgICAgICAgPyB0ZW1wbGF0ZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlCiAgICAgICAgOiB0ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbDsKICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKGZsYXR0ZW5OYW1lKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpKSwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIGZpbGVVcmkpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBEYXJ0VHlwZSBidWlsZChMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBhc3NlcnQoZGVjbGFyYXRpb24gIT0gbnVsbCwgIkRlY2xhcmF0aW9uIGhhcyBub3QgYmVlbiByZXNvbHZlZCBvbiAkdGhpcy4iKTsKICAgIHJldHVybiBkZWNsYXJhdGlvbi5idWlsZFR5cGUobGlicmFyeSwgYXJndW1lbnRzKTsKICB9CgogIFN1cGVydHlwZSBidWlsZFN1cGVydHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gdGhpcy5kZWNsYXJhdGlvbjsKICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLmJ1aWxkU3VwZXJ0eXBlKGxpYnJhcnksIGFyZ3VtZW50cyk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEludmFsaWRUeXBlQnVpbGRlcikgewogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICBkZWNsYXJhdGlvbi5tZXNzYWdlLm1lc3NhZ2VPYmplY3QsCiAgICAgICAgICBkZWNsYXJhdGlvbi5tZXNzYWdlLmNoYXJPZmZzZXQsCiAgICAgICAgICBkZWNsYXJhdGlvbi5tZXNzYWdlLmxlbmd0aCwKICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UudXJpLAogICAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaGFuZGxlSW52YWxpZFN1cGVydHlwZShsaWJyYXJ5LCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICB9CgogIFN1cGVydHlwZSBidWlsZE1peGVkSW5UeXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24gPSB0aGlzLmRlY2xhcmF0aW9uOwogICAgaWYgKGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlcikgewogICAgICByZXR1cm4gZGVjbGFyYXRpb24uYnVpbGRNaXhlZEluVHlwZShsaWJyYXJ5LCBhcmd1bWVudHMpOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBJbnZhbGlkVHlwZUJ1aWxkZXIpIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgZGVjbGFyYXRpb24ubWVzc2FnZS5tZXNzYWdlT2JqZWN0LAogICAgICAgICAgZGVjbGFyYXRpb24ubWVzc2FnZS5jaGFyT2Zmc2V0LAogICAgICAgICAgZGVjbGFyYXRpb24ubWVzc2FnZS5sZW5ndGgsCiAgICAgICAgICBkZWNsYXJhdGlvbi5tZXNzYWdlLnVyaSwKICAgICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGhhbmRsZUludmFsaWRTdXBlcnR5cGUobGlicmFyeSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgfQoKICBUeXBlQnVpbGRlciBzdWJzdChNYXA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+IHN1YnN0aXR1dGlvbikgewogICAgVHlwZUJ1aWxkZXIgcmVzdWx0ID0gc3Vic3RpdHV0aW9uW2RlY2xhcmF0aW9uXTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICBhc3NlcnQoZGVjbGFyYXRpb24gaXMgVHlwZVZhcmlhYmxlQnVpbGRlcik7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50czsKICAgICAgaW50IGkgPSAwOwogICAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHRoaXMuYXJndW1lbnRzKSB7CiAgICAgICAgVHlwZUJ1aWxkZXIgdHlwZSA9IGFyZ3VtZW50LnN1YnN0KHN1YnN0aXR1dGlvbik7CiAgICAgICAgaWYgKHR5cGUgIT0gYXJndW1lbnQpIHsKICAgICAgICAgIGFyZ3VtZW50cyA/Pz0gdGhpcy5hcmd1bWVudHMudG9MaXN0KCk7CiAgICAgICAgICBhcmd1bWVudHNbaV0gPSB0eXBlOwogICAgICAgIH0KICAgICAgICBpKys7CiAgICAgIH0KICAgICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIGFyZ3VtZW50cykuLmJpbmQoZGVjbGFyYXRpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIE5hbWVkVHlwZUJ1aWxkZXIgY2xvbmUoTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMpIHsKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGNsb25lZEFyZ3VtZW50czsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBjbG9uZWRBcmd1bWVudHMgPSBuZXcgTGlzdDxUeXBlQnVpbGRlcj4oYXJndW1lbnRzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xvbmVkQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY2xvbmVkQXJndW1lbnRzW2ldID0gYXJndW1lbnRzW2ldLmNsb25lKG5ld1R5cGVzKTsKICAgICAgfQogICAgfQogICAgTmFtZWRUeXBlQnVpbGRlciBuZXdUeXBlID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIobmFtZSwgY2xvbmVkQXJndW1lbnRzKTsKICAgIG5ld1R5cGVzLmFkZChuZXdUeXBlKTsKICAgIHJldHVybiBuZXdUeXBlOwogIH0KfQqBHwBOTjwBIgE7AR0JERISLiAYGiYtHgEaUAEqASkBFgkRFBgXFw8VIB0VAScJFhwYFSAdFQEtFQEfAQwmAS8BQBgmAQwyLAQBDBJKJRwUISlHRiVFCCE4DUoGKSMfGRwiICwRGycKGklPKE0IDjMjJkgbHiQiLhMdKQweM0IeHxgKEAgGN0I+IhoiT0QJBhFQOFAkOxsEAQxEHT41OkIUUQYEAQwwHT5AGAYEAS4BLhgzFxcnJhUZBhcTBAE+KEgbI0UbBAEkPS4qJhhIFBISEQQBK1A2BAEcPTsnPTQaLSomIyUTDUMGBAEePTsnPzQaLSomIyUTDUMGBAFKNBoyFSQjETU5IDEfCg0IH0kIBhEEATcnHUE5OwgGTBsUBAIBO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL25hbWVkX3R5cGVfYnVpbGRlci5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL3ByZWZpeF9idWlsZGVyLmRhcnSGxC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnByZWZpeF9idWlsZGVyOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgQnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIFNjb3BlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMaWJyYXJ5RGVwZW5kZW5jeTsKCmltcG9ydCAnLi4vYnVpbGRlci9idWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9sb2FkX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IExvYWRMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIFByZWZpeEJ1aWxkZXIgZXh0ZW5kcyBCdWlsZGVyIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgZmluYWwgU2NvcGUgZXhwb3J0U2NvcGUgPSBuZXcgU2NvcGUudG9wKCk7CgogIGZpbmFsIExpYnJhcnlCdWlsZGVyIHBhcmVudDsKCiAgZmluYWwgYm9vbCBkZWZlcnJlZDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGZpbmFsIGludCBpbXBvcnRJbmRleDsKCiAgZmluYWwgTGlicmFyeURlcGVuZGVuY3kgZGVwZW5kZW5jeTsKCiAgTG9hZExpYnJhcnlCdWlsZGVyIGxvYWRMaWJyYXJ5QnVpbGRlcjsKCiAgUHJlZml4QnVpbGRlcih0aGlzLm5hbWUsIHRoaXMuZGVmZXJyZWQsIHRoaXMucGFyZW50LCB0aGlzLmRlcGVuZGVuY3ksCiAgICAgIHRoaXMuY2hhck9mZnNldCwgdGhpcy5pbXBvcnRJbmRleCkgewogICAgaWYgKGRlZmVycmVkKSB7CiAgICAgIGxvYWRMaWJyYXJ5QnVpbGRlciA9CiAgICAgICAgICBuZXcgTG9hZExpYnJhcnlCdWlsZGVyKHBhcmVudCwgZGVwZW5kZW5jeSwgY2hhck9mZnNldCk7CiAgICAgIGFkZFRvRXhwb3J0U2NvcGUoJ2xvYWRMaWJyYXJ5JywgbG9hZExpYnJhcnlCdWlsZGVyLCBjaGFyT2Zmc2V0KTsKICAgIH0KICB9CgogIFVyaSBnZXQgZmlsZVVyaSA9PiBwYXJlbnQuZmlsZVVyaTsKCiAgQnVpbGRlciBsb29rdXAoU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgcmV0dXJuIGV4cG9ydFNjb3BlLmxvb2t1cChuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIHZvaWQgYWRkVG9FeHBvcnRTY29wZShTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBNYXA8U3RyaW5nLCBCdWlsZGVyPiBtYXAgPQogICAgICAgIG1lbWJlci5pc1NldHRlciA/IGV4cG9ydFNjb3BlLnNldHRlcnMgOiBleHBvcnRTY29wZS5sb2NhbDsKICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBtYXBbbmFtZV07CiAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICBtYXBbbmFtZV0gPSBwYXJlbnQuY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICAgICAgbmFtZSwgZXhpc3RpbmcsIG1lbWJlciwgY2hhck9mZnNldCwKICAgICAgICAgIGlzRXhwb3J0OiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIG1hcFtuYW1lXSA9IG1lbWJlcjsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gbmFtZTsKfQpBAE5OPAEeATsBOQE2AUYBJhUBLQEfARcBDBgBGQEmASkBSCsUG0JHBgQBJQE9OgQBRx9DIhw2LhsNGgYEAQwoAgE3cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvcHJlZml4X2J1aWxkZXIuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci90eXBlX2FsaWFzX2J1aWxkZXIuZGFydJsaLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZnVuY3Rpb25fdHlwZV9hbGlhc19idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlZGVmLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JwogICAgc2hvdyBGcmVzaFR5cGVQYXJhbWV0ZXJzLCBnZXRGcmVzaFR5cGVQYXJhbWV0ZXJzLCBzdWJzdGl0dXRlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdyBub0xlbmd0aCwgdGVtcGxhdGVDeWNsaWNUeXBlZGVmLCB0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBGdW5jdGlvblR5cGVCdWlsZGVyLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmNsYXNzIFR5cGVBbGlhc0J1aWxkZXIgZXh0ZW5kcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIHsKICBmaW5hbCBUeXBlQnVpbGRlciB0eXBlOwoKICBmaW5hbCBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXM7CgogIGZpbmFsIFR5cGVkZWYgdGFyZ2V0OwoKICBEYXJ0VHlwZSB0aGlzVHlwZTsKCiAgVHlwZUFsaWFzQnVpbGRlcihMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsIFN0cmluZyBuYW1lLAogICAgICB0aGlzLnR5cGVWYXJpYWJsZXMsIHRoaXMudHlwZSwgTGlicmFyeUJ1aWxkZXIgcGFyZW50LCBpbnQgY2hhck9mZnNldCwKICAgICAgW1R5cGVkZWYgdGFyZ2V0XSkKICAgICAgOiB0YXJnZXQgPSB0YXJnZXQgPz8KICAgICAgICAgICAgKG5ldyBUeXBlZGVmKG5hbWUsIG51bGwsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyczogVHlwZVZhcmlhYmxlQnVpbGRlci50eXBlUGFyYW1ldGVyc0Zyb21CdWlsZGVycygKICAgICAgICAgICAgICAgICAgICB0eXBlVmFyaWFibGVzKSwKICAgICAgICAgICAgICAgIGZpbGVVcmk6IHBhcmVudC50YXJnZXQuZmlsZVVyaSkKICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0KSwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgMCwgbmFtZSwgcGFyZW50LCBjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIlR5cGVBbGlhc0J1aWxkZXIiOwoKICBMaWJyYXJ5QnVpbGRlciBnZXQgcGFyZW50ID0+IHN1cGVyLnBhcmVudDsKCiAgVHlwZWRlZiBidWlsZChTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5QnVpbGRlcikgewogICAgdGFyZ2V0Li50eXBlID8/PSBidWlsZFRoaXNUeXBlKGxpYnJhcnlCdWlsZGVyKTsKCiAgICBUeXBlQnVpbGRlciB0eXBlID0gdGhpcy50eXBlOwogICAgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0KICAgICAgICAgIG5ldyBMaXN0PFR5cGVQYXJhbWV0ZXI+KHR5cGUudHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDApOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciB0eXBlVmFyaWFibGUgPSB0eXBlLnR5cGVWYXJpYWJsZXNbaV07CiAgICAgICAgdHlwZVBhcmFtZXRlcnNbaV0gPSB0eXBlVmFyaWFibGUucGFyYW1ldGVyOwogICAgICB9CiAgICAgIEZyZXNoVHlwZVBhcmFtZXRlcnMgZnJlc2hUeXBlUGFyYW1ldGVycyA9CiAgICAgICAgICBnZXRGcmVzaFR5cGVQYXJhbWV0ZXJzKHR5cGVQYXJhbWV0ZXJzKTsKICAgICAgdGFyZ2V0LnR5cGVQYXJhbWV0ZXJzT2ZGdW5jdGlvblR5cGUKICAgICAgICAgIC5hZGRBbGwoZnJlc2hUeXBlUGFyYW1ldGVycy5mcmVzaFR5cGVQYXJhbWV0ZXJzKTsKCiAgICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gdHlwZS5mb3JtYWxzKSB7CiAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9IGZvcm1hbC5idWlsZChsaWJyYXJ5QnVpbGRlciwgMCk7CiAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9IGZyZXNoVHlwZVBhcmFtZXRlcnMuc3Vic3RpdHV0ZShwYXJhbWV0ZXIudHlwZSk7CiAgICAgICAgICBpZiAoZm9ybWFsLmlzTmFtZWQpIHsKICAgICAgICAgICAgdGFyZ2V0Lm5hbWVkUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRhcmdldC5wb3NpdGlvbmFsUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgIHVuaGFuZGxlZCgiJHt0eXBlLmZ1bGxOYW1lRm9yRXJyb3JzfSIsICJidWlsZCIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQoKICAgIHJldHVybiB0YXJnZXQ7CiAgfQoKICBEYXJ0VHlwZSBidWlsZFRoaXNUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIGlmICh0aGlzVHlwZSAhPSBudWxsKSB7CiAgICAgIGlmIChpZGVudGljYWwodGhpc1R5cGUsIGN5Y2xpY1R5cGVBbGlhc01hcmtlcikpIHsKICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW0odGVtcGxhdGVDeWNsaWNUeXBlZGVmLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgICByZXR1cm4gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpc1R5cGU7CiAgICB9CiAgICAvLyBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYW4gYWxpYXMgKHR5cGVkZWYpIHRvIHJlZmVyIHRvIGl0c2VsZi4gV2UKICAgIC8vIGRldGVjdCBjeWNsZXMgYnkgZGV0ZWN0aW5nIHJlY3Vyc2l2ZSBjYWxscyB0byB0aGlzIG1ldGhvZCB1c2luZyBhbgogICAgLy8gaW5zdGFuY2Ugb2YgSW52YWxpZFR5cGUgdGhhdCBpc24ndCBpZGVudGljYWwgdG8gYGNvbnN0IEludmFsaWRUeXBlKClgLgogICAgdGhpc1R5cGUgPSBjeWNsaWNUeXBlQWxpYXNNYXJrZXI7CiAgICBUeXBlQnVpbGRlciB0eXBlID0gdGhpcy50eXBlOwogICAgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICBGdW5jdGlvblR5cGUgYnVpbHRUeXBlID0gdHlwZT8uYnVpbGQobGlicmFyeSwgdGFyZ2V0LnRoaXNUeXBlKTsKICAgICAgaWYgKGJ1aWx0VHlwZSAhPSBudWxsKSB7CiAgICAgICAgaWYgKHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHR2IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgICAgLy8gRm9sbG93IGJvdW5kIGluIG9yZGVyIHRvIGZpbmQgYWxsIGN5Y2xlcwogICAgICAgICAgICB0di5ib3VuZD8uYnVpbGQobGlicmFyeSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzVHlwZSA9IGJ1aWx0VHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdGhpc1R5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gdGhpc1R5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgKICAgICAgICAgICIke3R5cGUuZnVsbE5hbWVGb3JFcnJvcnN9IiwgImJ1aWxkVGhpc1R5cGUiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICB9CgogIC8vLyBbYXJndW1lbnRzXSBoYXZlIGFscmVhZHkgYmVlbiBidWlsdC4KICBEYXJ0VHlwZSBidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMpIHsKICAgIHZhciB0aGlzVHlwZSA9IGJ1aWxkVGhpc1R5cGUobGlicmFyeSk7CiAgICBpZiAoY29uc3QgRHluYW1pY1R5cGUoKSA9PSB0aGlzVHlwZSkgcmV0dXJuIHRoaXNUeXBlOwogICAgRnVuY3Rpb25UeXBlIHJlc3VsdCA9IHRoaXNUeXBlOwogICAgaWYgKHRhcmdldC50eXBlUGFyYW1ldGVycy5pc0VtcHR5ICYmIGFyZ3VtZW50cyA9PSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb24gPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldC50eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBzdWJzdGl0dXRpb25bdGFyZ2V0LnR5cGVQYXJhbWV0ZXJzW2ldXSA9IGFyZ3VtZW50c1tpXTsKICAgIH0KICAgIHJldHVybiBzdWJzdGl0dXRlKHJlc3VsdCwgc3Vic3RpdHV0aW9uKTsKICB9CgogIExpc3Q8RGFydFR5cGU+IGJ1aWxkVHlwZUFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSB7CiAgICBpZiAoYXJndW1lbnRzID09IG51bGwgJiYgdHlwZVZhcmlhYmxlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiA8RGFydFR5cGU+W107CiAgICB9CgogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsICYmIHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCh0eXBlVmFyaWFibGVzLmxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgewogICAgICAgIHJlc3VsdFtpXSA9IHR5cGVWYXJpYWJsZXNbaV0uZGVmYXVsdFR5cGUuYnVpbGQobGlicmFyeSk7CiAgICAgIH0KICAgICAgaWYgKGxpYnJhcnkgaXMgU291cmNlTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICBsaWJyYXJ5LmluZmVycmVkVHlwZXMuYWRkQWxsKHJlc3VsdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwgJiYgYXJndW1lbnRzLmxlbmd0aCAhPSAodHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDApKSB7CiAgICAgIC8vIFRoYXQgc2hvdWxkIGJlIGNhdWdodCBhbmQgcmVwb3J0ZWQgYXMgYSBjb21waWxlLXRpbWUgZXJyb3IgZWFybGllci4KICAgICAgcmV0dXJuIHVuaGFuZGxlZCgKICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2gKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlVmFyaWFibGVzLmxlbmd0aCkKICAgICAgICAgICAgICAubWVzc2FnZSwKICAgICAgICAgICJidWlsZFR5cGVBcmd1bWVudHMiLAogICAgICAgICAgLTEsCiAgICAgICAgICBudWxsKTsKICAgIH0KCiAgICAvLyBhcmd1bWVudHMubGVuZ3RoID09IHR5cGVWYXJpYWJsZXMubGVuZ3RoCiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoYXJndW1lbnRzLmxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gYXJndW1lbnRzW2ldLmJ1aWxkKGxpYnJhcnkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBJZiBbYXJndW1lbnRzXSBhcmUgbnVsbCwgdGhlIGRlZmF1bHQgdHlwZXMgZm9yIHRoZSB2YXJpYWJsZXMgYXJlIHVzZWQuCiAgQG92ZXJyaWRlCiAgaW50IGdldCB0eXBlVmFyaWFibGVzQ291bnQgPT4gdHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDA7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGJ1aWxkVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIHZhciB0aGlzVHlwZSA9IGJ1aWxkVGhpc1R5cGUobGlicmFyeSk7CiAgICBpZiAodGhpc1R5cGUgaXMgSW52YWxpZFR5cGUpIHJldHVybiB0aGlzVHlwZTsKICAgIEZ1bmN0aW9uVHlwZSByZXN1bHQgPSB0aGlzVHlwZTsKICAgIGlmICh0YXJnZXQudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSAmJiBhcmd1bWVudHMgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIC8vIE90aGVyd2lzZSwgc3Vic3RpdHV0ZS4KICAgIHJldHVybiBidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzKAogICAgICAgIGxpYnJhcnksIGJ1aWxkVHlwZUFyZ3VtZW50cyhsaWJyYXJ5LCBhcmd1bWVudHMpKTsKICB9Cn0KCmZpbmFsIEludmFsaWRUeXBlIGN5Y2xpY1R5cGVBbGlhc01hcmtlciA9IG5ldyBJbnZhbGlkVHlwZSgpOwqAzwBOTjwBKwEhCRIVFhUXER0BKkIBHUgBJwkdIBgZFR0BKgFKARYJGBkVIB0BOBoBMQEYARUBQEwYGyVQJDAqNgEuAS0BNzQBIicrRDhCNAgwMio8ASI+S0sgMxM4DAoIH0wGARMEATMcOEYsJAgXBlBKTiYiJ0YfJTo4JgwKJQ8vCB8tDRhOBgQBKyk6KzokS009PQYtBAElPTYbBgE2HlEwQQgtLggVBgFRTRgnMxggDhEGATAcSy4vBhMEAU0MPAEMTCsyJEseKToEAgE9ATtwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci90eXBlX2FsaWFzX2J1aWxkZXIuZGFydD5zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci90eXBlX2J1aWxkZXIuZGFydIdPLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudHlwZV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZSwgU3VwZXJ0eXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnCiAgICBzaG93IExpYnJhcnlCdWlsZGVyLCBTY29wZSwgVHlwZURlY2xhcmF0aW9uQnVpbGRlciwgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmFic3RyYWN0IGNsYXNzIFR5cGVCdWlsZGVyIHsKICBjb25zdCBUeXBlQnVpbGRlcigpOwoKICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGdldCBkZWNsYXJhdGlvbiA9PiBudWxsOwoKICB2b2lkIHJlc29sdmVJbigKICAgICAgU2NvcGUgc2NvcGUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkge30KCiAgLy8vIFNlZSBgVW5yZXNvbHZlZFR5cGUuY2hlY2tUeXBlYC4KICB2b2lkIGNoZWNrKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkge30KCiAgLy8vIFNlZSBgVW5yZXNvbHZlZFR5cGUubm9ybWFsaXplVHlwZWAuCiAgdm9pZCBub3JtYWxpemUoaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7fQoKICB2b2lkIGJpbmQoVHlwZURlY2xhcmF0aW9uQnVpbGRlciBidWlsZGVyKSB7fQoKICAvLy8gTWF5IHJldHVybiBudWxsLCBmb3IgZXhhbXBsZSwgZm9yIG1peGluIGFwcGxpY2F0aW9ucy4KICBPYmplY3QgZ2V0IG5hbWU7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lOwoKICBTdHJpbmdCdWZmZXIgcHJpbnRPbihTdHJpbmdCdWZmZXIgYnVmZmVyKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIiRkZWJ1Z05hbWUoJHtwcmludE9uKG5ldyBTdHJpbmdCdWZmZXIoKSl9KSI7CgogIFR5cGVCdWlsZGVyIHN1YnN0KE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gc3Vic3RpdHV0aW9uKSA9PiB0aGlzOwoKICAvLy8gQ2xvbmVzIHRoZSB0eXBlIGJ1aWxkZXIgcmVjdXJzaXZlbHkgd2l0aG91dCBiaW5kaW5nIHRoZSBzdWJ0ZXJtcyB0bwogIC8vLyBleGlzdGluZyBkZWNsYXJhdGlvbiBvciB0eXBlIHZhcmlhYmxlIGJ1aWxkZXJzLiAgQWxsIG5ld2x5IGJ1aWx0IHR5cGVzCiAgLy8vIGFyZSBhZGRlZCB0byBbbmV3VHlwZXNdLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGFkZGVkIHRvIGEgcHJvcGVyIHNjb3BlIGFuZAogIC8vLyByZXNvbHZlZCBsYXRlci4KICBUeXBlQnVpbGRlciBjbG9uZShMaXN0PFR5cGVCdWlsZGVyPiBuZXdUeXBlcyk7CgogIGJ1aWxkSW52YWxpZFR5cGUoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KTsKCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiAiJHtwcmludE9uKG5ldyBTdHJpbmdCdWZmZXIoKSl9IjsKCiAgRGFydFR5cGUgYnVpbGQoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSk7CgogIFN1cGVydHlwZSBidWlsZFN1cGVydHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpOwoKICBTdXBlcnR5cGUgYnVpbGRNaXhlZEluVHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKTsKfQo7AE5OPAEcATsBMgEWTQEdFwEyARJLASZFASoxAS8BPBMBGAEtAUUBUQFKTU8WMQFMAUQBKgFRAR48AgE1cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9idWlsZGVyLmRhcnRKc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9kZWNsYXJhdGlvbl9idWlsZGVyLmRhcnSEbC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnR5cGVfZGVjbGFyYXRpb25fYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGU7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cgQnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIE1ldGFkYXRhQnVpbGRlciwgTW9kaWZpZXJCdWlsZGVyLCBUeXBlQnVpbGRlcjsKCmFic3RyYWN0IGNsYXNzIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZXh0ZW5kcyBNb2RpZmllckJ1aWxkZXIgewogIGZpbmFsIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YTsKCiAgZmluYWwgaW50IG1vZGlmaWVyczsKCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIEJ1aWxkZXIgcGFyZW50OwoKICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyKAogICAgICB0aGlzLm1ldGFkYXRhLCB0aGlzLm1vZGlmaWVycywgdGhpcy5uYW1lLCB0aGlzLnBhcmVudCwgaW50IGNoYXJPZmZzZXQsCiAgICAgIFtVcmkgZmlsZVVyaV0pCiAgICAgIDogYXNzZXJ0KG1vZGlmaWVycyAhPSBudWxsKSwKICAgICAgICBzdXBlcihwYXJlbnQsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICBib29sIGdldCBpc1R5cGVEZWNsYXJhdGlvbiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7CgogIGludCBnZXQgdHlwZVZhcmlhYmxlc0NvdW50ID0+IDA7CgogIERhcnRUeXBlIGJ1aWxkVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpOwoKICAvLy8gW2FyZ3VtZW50c10gaGF2ZSBhbHJlYWR5IGJlZW4gYnVpbHQuCiAgRGFydFR5cGUgYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzKTsKfQopAE5OPAEoATABFlEBQCgBFwEVARIBGk0VIywBJgEMKAEjAUsBKyk5AgFBcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9kZWNsYXJhdGlvbl9idWlsZGVyLmRhcnRHc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV92YXJpYWJsZV9idWlsZGVyLmRhcnSSCy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnR5cGVfdmFyaWFibGVfYnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IExpYnJhcnlCdWlsZGVyLCBUeXBlQnVpbGRlciwgVHlwZURlY2xhcmF0aW9uQnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IERhcnRUeXBlLCBUeXBlUGFyYW1ldGVyLCBUeXBlUGFyYW1ldGVyVHlwZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyB0ZW1wbGF0ZVR5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93IENsYXNzQnVpbGRlciwgTmFtZWRUeXBlQnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIFR5cGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKY2xhc3MgVHlwZVZhcmlhYmxlQnVpbGRlciBleHRlbmRzIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgewogIFR5cGVCdWlsZGVyIGJvdW5kOwoKICBUeXBlQnVpbGRlciBkZWZhdWx0VHlwZTsKCiAgZmluYWwgVHlwZVBhcmFtZXRlciBhY3R1YWxQYXJhbWV0ZXI7CgogIFR5cGVWYXJpYWJsZUJ1aWxkZXIgYWN0dWFsT3JpZ2luOwoKICBUeXBlVmFyaWFibGVCdWlsZGVyKAogICAgICBTdHJpbmcgbmFtZSwgU291cmNlTGlicmFyeUJ1aWxkZXIgY29tcGlsYXRpb25Vbml0LCBpbnQgY2hhck9mZnNldCwKICAgICAge3RoaXMuYm91bmQsIGJvb2wgc3ludGhlc2l6ZVR5cGVQYXJhbWV0ZXJOYW1lOiBmYWxzZX0pCiAgICAgIDogYWN0dWFsUGFyYW1ldGVyID0gbmV3IFR5cGVQYXJhbWV0ZXIoCiAgICAgICAgICAgIHN5bnRoZXNpemVUeXBlUGFyYW1ldGVyTmFtZSA/ICcjJG5hbWUnIDogbmFtZSwgbnVsbCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQsCiAgICAgICAgc3VwZXIobnVsbCwgMCwgbmFtZSwgY29tcGlsYXRpb25Vbml0LCBjaGFyT2Zmc2V0KTsKCiAgVHlwZVZhcmlhYmxlQnVpbGRlci5mcm9tS2VybmVsKAogICAgICBUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgTGlicmFyeUJ1aWxkZXIgY29tcGlsYXRpb25Vbml0KQogICAgICA6IGFjdHVhbFBhcmFtZXRlciA9IHBhcmFtZXRlciwKICAgICAgICBzdXBlcihudWxsLCAwLCBwYXJhbWV0ZXIubmFtZSwgY29tcGlsYXRpb25Vbml0LCBwYXJhbWV0ZXIuZmlsZU9mZnNldCk7CgogIGJvb2wgZ2V0IGlzVHlwZVZhcmlhYmxlID0+IHRydWU7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJUeXBlVmFyaWFibGVCdWlsZGVyIjsKCiAgU3RyaW5nQnVmZmVyIHByaW50T24oU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewogICAgYnVmZmVyLndyaXRlKG5hbWUpOwogICAgaWYgKGJvdW5kICE9IG51bGwpIHsKICAgICAgYnVmZmVyLndyaXRlKCIgZXh0ZW5kcyAiKTsKICAgICAgYm91bmQucHJpbnRPbihidWZmZXIpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICIke3ByaW50T24obmV3IFN0cmluZ0J1ZmZlcigpKX0iOwoKICBUeXBlVmFyaWFibGVCdWlsZGVyIGdldCBvcmlnaW4gPT4gYWN0dWFsT3JpZ2luID8/IHRoaXM7CgogIFR5cGVQYXJhbWV0ZXIgZ2V0IHBhcmFtZXRlciA9PiBvcmlnaW4uYWN0dWFsUGFyYW1ldGVyOwoKICBUeXBlUGFyYW1ldGVyIGdldCB0YXJnZXQgPT4gcGFyYW1ldGVyOwoKICBEYXJ0VHlwZSBidWlsZFR5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgaW50IGNoYXJPZmZzZXQgPSAtMTsgLy8gVE9ETyhhaGUpOiBQcm92aWRlIHRoZXNlLgogICAgICBVcmkgZmlsZVVyaSA9IG51bGw7IC8vIFRPRE8oYWhlKTogUHJvdmlkZSB0aGVzZS4KICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBuYW1lLmxlbmd0aCwKICAgICAgICAgIGZpbGVVcmkpOwogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVyVHlwZShwYXJhbWV0ZXIpOwogIH0KCiAgRGFydFR5cGUgYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzKSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgaW50IGNoYXJPZmZzZXQgPSAtMTsgLy8gVE9ETyhhaGUpOiBQcm92aWRlIHRoZXNlLgogICAgICBVcmkgZmlsZVVyaSA9IG51bGw7IC8vIFRPRE8oYWhlKTogUHJvdmlkZSB0aGVzZS4KICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBuYW1lLmxlbmd0aCwKICAgICAgICAgIGZpbGVVcmkpOwogICAgfQogICAgcmV0dXJuIGJ1aWxkVHlwZShsaWJyYXJ5LCBudWxsKTsKICB9CgogIFR5cGVCdWlsZGVyIGFzVHlwZUJ1aWxkZXIoKSB7CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIobmFtZSwgbnVsbCkuLmJpbmQodGhpcyk7CiAgfQoKICB2b2lkIGZpbmlzaCgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgQ2xhc3NCdWlsZGVyIG9iamVjdCwgVHlwZUJ1aWxkZXIgZHluYW1pY1R5cGUpIHsKICAgIGlmIChpc1BhdGNoKSByZXR1cm47CiAgICBEYXJ0VHlwZSBvYmplY3RUeXBlID0gb2JqZWN0LmJ1aWxkVHlwZShsaWJyYXJ5LCBudWxsKTsKICAgIHBhcmFtZXRlci5ib3VuZCA/Pz0gYm91bmQ/LmJ1aWxkKGxpYnJhcnkpID8/IG9iamVjdFR5cGU7CiAgICAvLyBJZiBkZWZhdWx0VHlwZSBpcyBub3Qgc2V0LCBpbml0aWFsaXplIGl0IHRvIGR5bmFtaWMsIHVubGVzcyB0aGUgYm91bmQgaXMKICAgIC8vIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIE9iamVjdCwgaW4gd2hpY2ggY2FzZSBkZWZhdWx0VHlwZSBzaG91bGQgYWxzbyBiZQogICAgLy8gT2JqZWN0LiBUaGlzIG1ha2VzIHN1cmUgaW5zdGFudGlhdGlvbiBvZiBnZW5lcmljIGZ1bmN0aW9uIHR5cGVzIHdpdGggYW4KICAgIC8vIGV4cGxpY2l0IE9iamVjdCBib3VuZCByZXN1bHRzIGluIE9iamVjdCBhcyB0aGUgaW5zdGFudGlhdGVkIHR5cGUuCiAgICBwYXJhbWV0ZXIuZGVmYXVsdFR5cGUgPz89IGRlZmF1bHRUeXBlPy5idWlsZChsaWJyYXJ5KSA/PwogICAgICAgIChib3VuZCAhPSBudWxsICYmIHBhcmFtZXRlci5ib3VuZCA9PSBvYmplY3RUeXBlCiAgICAgICAgICAgID8gb2JqZWN0VHlwZQogICAgICAgICAgICA6IGR5bmFtaWNUeXBlLmJ1aWxkKGxpYnJhcnkpKTsKICB9CgogIHZvaWQgYXBwbHlQYXRjaChjb3ZhcmlhbnQgVHlwZVZhcmlhYmxlQnVpbGRlciBwYXRjaCkgewogICAgcGF0Y2guYWN0dWFsT3JpZ2luID0gdGhpczsKICB9CgogIFR5cGVWYXJpYWJsZUJ1aWxkZXIgY2xvbmUoTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMpIHsKICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBGaWd1cmUgb3V0IGlmIHVzaW5nIFtjaGFyT2Zmc2V0XSBoZXJlIGlzIGEgZ29vZCBpZGVhLgogICAgLy8gQW4gYWx0ZXJuYXRpdmUgaXMgdG8gdXNlIHRoZSBvZmZzZXQgb2YgdGhlIG5vZGUgdGhlIGNsb25lZCB0eXBlIHZhcmlhYmxlCiAgICAvLyBpcyBkZWNsYXJlZCBvbi4KICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlQnVpbGRlcihuYW1lLCBwYXJlbnQsIGNoYXJPZmZzZXQsCiAgICAgICAgYm91bmQ6IGJvdW5kLmNsb25lKG5ld1R5cGVzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFR5cGVWYXJpYWJsZUJ1aWxkZXIgJiYgdGFyZ2V0ID09IG90aGVyLnRhcmdldDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGFyZ2V0Lmhhc2hDb2RlOwoKICBzdGF0aWMgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyc0Zyb21CdWlsZGVycygKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBidWlsZGVycykgewogICAgaWYgKGJ1aWxkZXJzID09IG51bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PFR5cGVQYXJhbWV0ZXI+LmZpbGxlZChidWlsZGVycy5sZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVpbGRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0W2ldID0gYnVpbGRlcnNbaV0udGFyZ2V0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KgIwATk48ASUBUAEhNQFHASdGAUoBOxUBGwEnASQBF0k9LUElOwEiPyVPASMBMQEuGBkhHQYTBAE5AToBOQEpAUwdODcaQxYXFAYtBAEpOh04NxpDFhcUBiUEASA5BAEPThk7PVBQT0k9OBkrBAE5HwQBOk1QFz0nBAEMI0MEAQwnATksJyFPMCYGEwQCAT5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci90eXBlX3ZhcmlhYmxlX2J1aWxkZXIuZGFydEFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci91bnJlc29sdmVkX3R5cGUuZGFydIP5Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudW5yZXNvbHZlZF90eXBlOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXIsIFNjb3BlLCBUeXBlQnVpbGRlcjsKCi8vLyBBIHdyYXBwZXIgYXJvdW5kIGEgdHlwZSB0aGF0IGlzIHlldCB0byBiZSByZXNvbHZlZC4KY2xhc3MgVW5yZXNvbHZlZFR5cGUgewogIGZpbmFsIFR5cGVCdWlsZGVyIGJ1aWxkZXI7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgZmluYWwgVXJpIGZpbGVVcmk7CgogIFVucmVzb2x2ZWRUeXBlKHRoaXMuYnVpbGRlciwgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmZpbGVVcmkpOwoKICB2b2lkIHJlc29sdmVJbihTY29wZSBzY29wZSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgPT4KICAgICAgYnVpbGRlci5yZXNvbHZlSW4oc2NvcGUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGxpYnJhcnkpOwoKICAvLy8gUGVyZm9ybXMgY2hlY2tzIG9uIHRoZSB0eXBlIGFmdGVyIGl0J3MgcmVzb2x2ZWQuCiAgdm9pZCBjaGVja1R5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY2hlY2sobGlicmFyeSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICAvLy8gTm9ybWFsaXplcyB0aGUgdHlwZSBhcmd1bWVudHMgaW4gYWNjb3JkYW5jZSB3aXRoIERhcnQgMSBzZW1hbnRpY3MuCiAgdm9pZCBub3JtYWxpemVUeXBlKCkgPT4gYnVpbGRlci5ub3JtYWxpemUoY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJVbnJlc29sdmVkVHlwZShAJGNoYXJPZmZzZXQsICRidWlsZGVyKSI7Cn0KHwBOTjwBHwE/ATgXHRgVAT8BOT4BNys4BAFJQgFBAgE4cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdW5yZXNvbHZlZF90eXBlLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvdm9pZF90eXBlX2J1aWxkZXIuZGFydIJaLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudm9pZF90eXBlX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IERhcnRUeXBlOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgQnVpbHRpblR5cGVCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIFZvaWRUeXBlQnVpbGRlciBleHRlbmRzIEJ1aWx0aW5UeXBlQnVpbGRlciB7CiAgVm9pZFR5cGVCdWlsZGVyKERhcnRUeXBlIHR5cGUsIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIoInZvaWQiLCB0eXBlLCBjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiVm9pZFR5cGVCdWlsZGVyIjsKfQoSAE5OPAEhATABPwEzUToBLQIBOnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3ZvaWRfdHlwZV9idWlsZGVyLmRhcnQ5c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9saXN0ZW5lci5kYXJ0wACxeC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci5saXN0ZW5lcjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdyBNZXNzYWdlLCBNZXNzYWdlQ29kZSwgdGVtcGxhdGVFeHBlcmltZW50Tm90RW5hYmxlZDsKCmltcG9ydCAnLi4vcXVvdGUuZGFydCcgc2hvdyBVbmVzY2FwZUVycm9yTGlzdGVuZXI7CgppbXBvcnQgJy4uL3NjYW5uZXIvZXJyb3JfdG9rZW4uZGFydCcgc2hvdyBFcnJvclRva2VuOwoKaW1wb3J0ICdhc3NlcnQuZGFydCcgc2hvdyBBc3NlcnQ7CgppbXBvcnQgJ2Zvcm1hbF9wYXJhbWV0ZXJfa2luZC5kYXJ0JyBzaG93IEZvcm1hbFBhcmFtZXRlcktpbmQ7CgppbXBvcnQgJ2lkZW50aWZpZXJfY29udGV4dC5kYXJ0JyBzaG93IElkZW50aWZpZXJDb250ZXh0OwoKaW1wb3J0ICdjbGFzc19raW5kLmRhcnQnIHNob3cgQ2xhc3NLaW5kOwoKaW1wb3J0ICdtZW1iZXJfa2luZC5kYXJ0JyBzaG93IE1lbWJlcktpbmQ7CgppbXBvcnQgJ3V0aWwuZGFydCcgc2hvdyBvcHRpb25hbDsKCi8vLyBBIHBhcnNlciBldmVudCBsaXN0ZW5lciB0aGF0IGRvZXMgbm90aGluZyBleGNlcHQgdGhyb3cgZXhjZXB0aW9ucwovLy8gb24gcGFyc2VyIGVycm9ycy4KLy8vCi8vLyBFdmVudHMgYXJlIG1ldGhvZHMgdGhhdCBiZWdpbiB3aXRoIG9uZSBvZjogYGJlZ2luYCwgYGVuZGAsIG9yIGBoYW5kbGVgLgovLy8KLy8vIEV2ZW50cyBzdGFydGluZyB3aXRoIGBiZWdpbmAgYW5kIGBlbmRgIGNvbWUgaW4gcGFpcnMuIE5vcm1hbGx5LCBhCi8vLyBgYmVnaW5Gb29gIGV2ZW50IGlzIGZvbGxvd2VkIGJ5IGFuIGBlbmRGb29gIGV2ZW50LiBUaGVyZSdzIGEgZmV3IGV4Y2VwdGlvbnMKLy8vIGRvY3VtZW50ZWQgYmVsb3cuCi8vLwovLy8gRXZlbnRzIHN0YXJ0aW5nIHdpdGggYGhhbmRsZWAgYXJlIHVzZWQgd2hlbiBpc24ndCBwb3NzaWJsZSB0byBoYXZlIGEgYmVnaW4KLy8vIGV2ZW50LgpjbGFzcyBMaXN0ZW5lciBpbXBsZW1lbnRzIFVuZXNjYXBlRXJyb3JMaXN0ZW5lciB7CiAgVXJpIGdldCB1cmkgPT4gbnVsbDsKCiAgdm9pZCBsb2dFdmVudChTdHJpbmcgbmFtZSkge30KCiAgc2V0IHN1cHByZXNzUGFyc2VFcnJvcnMoYm9vbCB2YWx1ZSkge30KCiAgdm9pZCBiZWdpbkFyZ3VtZW50cyhUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRBcmd1bWVudHMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkFyZ3VtZW50cyIpOwogIH0KCiAgLy8vIEhhbmRsZSBhc3luYyBtb2RpZmllcnMgYGFzeW5jYCwgYGFzeW5jKmAsIGBzeW5jYC4KICB2b2lkIGhhbmRsZUFzeW5jTW9kaWZpZXIoVG9rZW4gYXN5bmNUb2tlbiwgVG9rZW4gc3RhclRva2VuKSB7CiAgICBsb2dFdmVudCgiQXN5bmNNb2RpZmllciIpOwogIH0KCiAgdm9pZCBiZWdpbkF3YWl0RXhwcmVzc2lvbihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRBd2FpdEV4cHJlc3Npb24oVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJBd2FpdEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgZW5kSW52YWxpZEF3YWl0RXhwcmVzc2lvbigKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4sIE1lc3NhZ2VDb2RlIGVycm9yQ29kZSkgewogICAgbG9nRXZlbnQoIkludmFsaWRBd2FpdEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgYmVnaW5CbG9jayhUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRCbG9jayhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQmxvY2siKTsKICB9CgogIC8vLyBDYWxsZWQgdG8gaGFuZGxlIGEgYmxvY2sgdGhhdCBoYXMgYmVlbiBwYXJzZWQgYnV0IGlzIG5vdCBhc3NvY2lhdGVkCiAgLy8vIHdpdGggYW55IHRvcCBsZXZlbCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4gU3Vic3RydWN0dXJlczoKICAvLy8gLSBibG9jawogIHZvaWQgaGFuZGxlSW52YWxpZFRvcExldmVsQmxvY2soVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgYmVnaW5DYXNjYWRlKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZENhc2NhZGUoKSB7CiAgICBsb2dFdmVudCgiQ2FzY2FkZSIpOwogIH0KCiAgdm9pZCBiZWdpbkNhc2VFeHByZXNzaW9uKFRva2VuIGNhc2VLZXl3b3JkKSB7fQoKICB2b2lkIGVuZENhc2VFeHByZXNzaW9uKFRva2VuIGNvbG9uKSB7CiAgICBsb2dFdmVudCgiQ2FzZUV4cHJlc3Npb24iKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIHN0YXJ0IG9mIHRoZSBib2R5IG9mIGEgY2xhc3MsIG1peGluIG9yIGV4dGVuc2lvbiBkZWNsYXJhdGlvbgogIC8vLyBiZWdpbm5pbmcgYXQgW3Rva2VuXS4gVGhlIGFjdHVhbCBraW5kIG9mIGRlY2xhcmF0aW9uIGlzIGluZGljYXRlZCBieQogIC8vLyBba2luZF0uCiAgdm9pZCBiZWdpbkNsYXNzT3JNaXhpbkJvZHkoQ2xhc3NLaW5kIGtpbmQsIFRva2VuIHRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgdGhlIGJvZHkgb2YgYSBjbGFzcywgbWl4aW4gb3IgZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLgogIC8vLyBUaGUgb25seSBzdWJzdHJ1Y3R1cmVzIGFyZSB0aGUgY2xhc3MsIG1peGluIG9yIGV4dGVuc2lvbiBtZW1iZXJzLgogIC8vLwogIC8vLyBUaGUgYWN0dWFsIGtpbmQgb2YgZGVjbGFyYXRpb24gaXMgaW5kaWNhdGVkIGJ5IFtraW5kXS4KICB2b2lkIGVuZENsYXNzT3JNaXhpbkJvZHkoCiAgICAgIENsYXNzS2luZCBraW5kLCBpbnQgbWVtYmVyQ291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQ2xhc3NPck1peGluQm9keSIpOwogIH0KCiAgLy8vIENhbGxlZCBiZWZvcmUgcGFyc2luZyBhIGNsYXNzIG9yIG5hbWVkIG1peGluIGFwcGxpY2F0aW9uLgogIHZvaWQgYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIHRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBiZWdpbm5pbmcgb2YgYSBjbGFzcyBkZWNsYXJhdGlvbi4KICAvLy8gW2JlZ2luXSBtYXkgYmUgdGhlIHNhbWUgYXMgW25hbWVdLCBvciBtYXkgcG9pbnQgdG8gbW9kaWZpZXJzCiAgLy8vIChvciBleHRyYW5lb3VzIG1vZGlmaWVycyBpbiB0aGUgY2FzZSBvZiByZWNvdmVyeSkgcHJlY2VkaW5nIFtuYW1lXS4KICB2b2lkIGJlZ2luQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkge30KCiAgLy8vIEhhbmRsZSBhbiBleHRlbmRzIGNsYXVzZSBpbiBhIGNsYXNzIGRlY2xhcmF0aW9uLiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHN1cGVydHlwZSAobWF5IGJlIGEgbWl4aW4gYXBwbGljYXRpb24pCiAgdm9pZCBoYW5kbGVDbGFzc0V4dGVuZHMoVG9rZW4gZXh0ZW5kc0tleXdvcmQpIHsKICAgIGxvZ0V2ZW50KCJDbGFzc0V4dGVuZHMiKTsKICB9CgogIC8vLyBIYW5kbGUgYW4gaW1wbGVtZW50cyBjbGF1c2UgaW4gYSBjbGFzcyBvciBtaXhpbiBkZWNsYXJhdGlvbi4KICAvLy8gU3Vic3RydWN0dXJlczoKICAvLy8gLSBpbXBsZW1lbnRlZCB0eXBlcwogIHZvaWQgaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cygKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIGludCBpbnRlcmZhY2VzQ291bnQpIHsKICAgIGxvZ0V2ZW50KCJDbGFzc0ltcGxlbWVudHMiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGhlYWRlciBvZiBhIGNsYXNzIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIG1vZGlmaWVycwogIC8vLyAtIGNsYXNzIG5hbWUKICAvLy8gLSB0eXBlIHZhcmlhYmxlcwogIC8vLyAtIHN1cGVydHlwZQogIC8vLyAtIHdpdGggY2xhdXNlCiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMKICAvLy8gLSBuYXRpdmUgY2xhdXNlCiAgdm9pZCBoYW5kbGVDbGFzc0hlYWRlcihUb2tlbiBiZWdpbiwgVG9rZW4gY2xhc3NLZXl3b3JkLCBUb2tlbiBuYXRpdmVUb2tlbikgewogICAgbG9nRXZlbnQoIkNsYXNzSGVhZGVyIik7CiAgfQoKICAvLy8gSGFuZGxlIHJlY292ZXJ5IGFzc29jaWF0ZWQgd2l0aCBhIGNsYXNzIGhlYWRlci4KICAvLy8gVGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGFmdGVyIFtoYW5kbGVDbGFzc0hlYWRlcl0KICAvLy8gdG8gcmVjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXMgY2xhc3MgaGVhZGVyLgogIC8vLyBUaGUgc3Vic3RydWN0dXJlcyBhcmUgYSBzdWJzZXQgb2YKICAvLy8gYW5kIGluIHRoZSBzYW1lIG9yZGVyIGFzIFtoYW5kbGVDbGFzc0hlYWRlcl06CiAgLy8vIC0gc3VwZXJ0eXBlCiAgLy8vIC0gd2l0aCBjbGF1c2UKICAvLy8gLSBpbXBsZW1lbnRlZCB0eXBlcwogIHZvaWQgaGFuZGxlUmVjb3ZlckNsYXNzSGVhZGVyKCkgewogICAgbG9nRXZlbnQoIlJlY292ZXJDbGFzc0hlYWRlciIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgY2xhc3MgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIGNsYXNzIGhlYWRlcgogIC8vLyAtIGNsYXNzIGJvZHkKICB2b2lkIGVuZENsYXNzRGVjbGFyYXRpb24oVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDbGFzc0RlY2xhcmF0aW9uIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBiZWdpbm5pbmcgb2YgYSBtaXhpbiBkZWNsYXJhdGlvbi4KICB2b2lkIGJlZ2luTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIG5hbWUpIHt9CgogIC8vLyBIYW5kbGUgYW4gb24gY2xhdXNlIGluIGEgbWl4aW4gZGVjbGFyYXRpb24uIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMKICB2b2lkIGhhbmRsZU1peGluT24oVG9rZW4gb25LZXl3b3JkLCBpbnQgdHlwZUNvdW50KSB7CiAgICBsb2dFdmVudCgiTWl4aW5PbiIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgaGVhZGVyIG9mIGEgbWl4aW4gZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gbWl4aW4gbmFtZQogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gb24gdHlwZXMKICAvLy8gLSBpbXBsZW1lbnRlZCB0eXBlcwogIHZvaWQgaGFuZGxlTWl4aW5IZWFkZXIoVG9rZW4gbWl4aW5LZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiTWl4aW5IZWFkZXIiKTsKICB9CgogIC8vLyBIYW5kbGUgcmVjb3ZlcnkgYXNzb2NpYXRlZCB3aXRoIGEgbWl4aW4gaGVhZGVyLgogIC8vLyBUaGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgYWZ0ZXIgW2hhbmRsZU1peGluSGVhZGVyXQogIC8vLyB0byByZWNvdmVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyBtaXhpbiBoZWFkZXIuCiAgLy8vIFRoZSBzdWJzdHJ1Y3R1cmVzIGFyZSBhIHN1YnNldCBvZgogIC8vLyBhbmQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgW2hhbmRsZU1peGluSGVhZGVyXQogIC8vLyAtIG9uIHR5cGVzCiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMKICB2b2lkIGhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcigpIHsKICAgIGxvZ0V2ZW50KCJSZWNvdmVyTWl4aW5IZWFkZXIiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIG1peGluIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtaXhpbiBoZWFkZXIKICAvLy8gLSBjbGFzcyBvciBtaXhpbiBib2R5CiAgdm9pZCBlbmRNaXhpbkRlY2xhcmF0aW9uKFRva2VuIG1peGluS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJNaXhpbkRlY2xhcmF0aW9uIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBiZWdpbm5pbmcgb2YgYW4gZXh0ZW5zaW9uIG1ldGhvZHMgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gdHlwZSB2YXJpYWJsZXMKICB2b2lkIGJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb24oVG9rZW4gZXh0ZW5zaW9uS2V5d29yZCwgVG9rZW4gbmFtZSkge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGFuIGV4dGVuc2lvbiBtZXRob2RzIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBzdWJzdHJ1Y3R1cmVzIGZyb20gW2JlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb25dCiAgLy8vIC0gb24gdHlwZQogIC8vLyAtIGJvZHkKICB2b2lkIGVuZEV4dGVuc2lvbkRlY2xhcmF0aW9uKAogICAgICBUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBvbktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgnRXh0ZW5zaW9uRGVjbGFyYXRpb24nKTsKICB9CgogIHZvaWQgYmVnaW5Db21iaW5hdG9ycyhUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRDb21iaW5hdG9ycyhpbnQgY291bnQpIHsKICAgIGxvZ0V2ZW50KCJDb21iaW5hdG9ycyIpOwogIH0KCiAgdm9pZCBiZWdpbkNvbXBpbGF0aW9uVW5pdChUb2tlbiB0b2tlbikge30KCiAgLy8vIFRoaXMgbWV0aG9kIGV4aXN0cyBmb3IgYW5hbHl6ZXIgY29tcGF0aWJpbGl0eSBvbmx5CiAgLy8vIGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSBhbmFseXplci9mYXN0YSBpbnRlZ3JhdGlvbiBpcyBjb21wbGV0ZS4KICAvLy8KICAvLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBbcGFyc2VEaXJlY3RpdmVzXSBoYXMgcGFyc2VkIGFsbCBkaXJlY3RpdmVzCiAgLy8vIGFuZCBpcyBza2lwcGluZyB0aGUgcmVtYWluZGVyIG9mIHRoZSBmaWxlLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIHZvaWQgaGFuZGxlRGlyZWN0aXZlc09ubHkoKSB7fQoKICB2b2lkIGVuZENvbXBpbGF0aW9uVW5pdChpbnQgY291bnQsIFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29tcGlsYXRpb25Vbml0Iik7CiAgfQoKICB2b2lkIGJlZ2luQ29uc3RMaXRlcmFsKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZENvbnN0TGl0ZXJhbChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkNvbnN0TGl0ZXJhbCIpOwogIH0KCiAgdm9pZCBiZWdpbkNvbnN0cnVjdG9yUmVmZXJlbmNlKFRva2VuIHN0YXJ0KSB7fQoKICB2b2lkIGVuZENvbnN0cnVjdG9yUmVmZXJlbmNlKAogICAgICBUb2tlbiBzdGFydCwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDb25zdHJ1Y3RvclJlZmVyZW5jZSIpOwogIH0KCiAgdm9pZCBiZWdpbkRvV2hpbGVTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kRG9XaGlsZVN0YXRlbWVudCgKICAgICAgVG9rZW4gZG9LZXl3b3JkLCBUb2tlbiB3aGlsZUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRG9XaGlsZVN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBiZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZERvV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRG9XaGlsZVN0YXRlbWVudEJvZHkiKTsKICB9CgogIHZvaWQgYmVnaW5XaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiV2hpbGVTdGF0ZW1lbnRCb2R5Iik7CiAgfQoKICB2b2lkIGJlZ2luRW51bShUb2tlbiBlbnVtS2V5d29yZCkge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGFuIGVudW0gZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gRW51bSBuYW1lIChpZGVudGlmaWVyKQogIC8vLyAtIFtjb3VudF0gdGltZXM6CiAgLy8vICAgLSBFbnVtIHZhbHVlIChpZGVudGlmaWVyKQogIHZvaWQgZW5kRW51bShUb2tlbiBlbnVtS2V5d29yZCwgVG9rZW4gbGVmdEJyYWNlLCBpbnQgY291bnQpIHsKICAgIGxvZ0V2ZW50KCJFbnVtIik7CiAgfQoKICB2b2lkIGJlZ2luRXhwb3J0KFRva2VuIHRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYW4gZXhwb3J0IGRpcmVjdGl2ZS4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gbWV0YWRhdGEKICAvLy8gLSB1cmkKICAvLy8gLSBjb25kaXRpb25hbCB1cmlzCiAgLy8vIC0gY29tYmluYXRvcnMKICB2b2lkIGVuZEV4cG9ydChUb2tlbiBleHBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJFeHBvcnQiKTsKICB9CgogIC8vLyBDYWxsZWQgYnkgW1BhcnNlcl0gYWZ0ZXIgcGFyc2luZyBhbiBleHRyYW5lb3VzIGV4cHJlc3Npb24gYXMgZXJyb3IKICAvLy8gcmVjb3ZlcnkuIEZvciBhIHN0YWNrLWJhc2VkIGxpc3RlbmVyLCB0aGUgc3VnZ2VzdGVkIGFjdGlvbiBpcyB0byBkaXNjYXJkCiAgLy8vIGFuIGV4cHJlc3Npb24gZnJvbSB0aGUgc3RhY2suCiAgdm9pZCBoYW5kbGVFeHRyYW5lb3VzRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBsb2dFdmVudCgiRXh0cmFuZW91c0V4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlRXhwcmVzc2lvblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkV4cHJlc3Npb25TdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgYmVnaW5GYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBsYXN0Q29uc3VtZWQsIFRva2VuIGV4dGVybmFsVG9rZW4sIFRva2VuIGNvbnN0VG9rZW4pIHt9CgogIHZvaWQgZW5kRmFjdG9yeU1ldGhvZCgKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZmFjdG9yeUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRmFjdG9yeU1ldGhvZCIpOwogIH0KCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlcihUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kLCBUb2tlbiByZXF1aXJlZFRva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7fQoKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlcigKICAgICAgVG9rZW4gdGhpc0tleXdvcmQsCiAgICAgIFRva2VuIHBlcmlvZEFmdGVyVGhpcywKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBpbml0aWFsaXplclN0YXJ0LAogICAgICBUb2tlbiBpbml0aWFsaXplckVuZCwKICAgICAgRm9ybWFsUGFyYW1ldGVyS2luZCBraW5kLAogICAgICBNZW1iZXJLaW5kIG1lbWJlcktpbmQpIHsKICAgIGxvZ0V2ZW50KCJGb3JtYWxQYXJhbWV0ZXIiKTsKICB9CgogIHZvaWQgaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGxvZ0V2ZW50KCJOb0Zvcm1hbFBhcmFtZXRlcnMiKTsKICB9CgogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHt9CgogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVycygKICAgICAgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBsb2dFdmVudCgiRm9ybWFsUGFyYW1ldGVycyIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgZmllbGQgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gTW9kaWZpZXJzCiAgLy8vIC0gVHlwZQogIC8vLyAtIFZhcmlhYmxlIGRlY2xhcmF0aW9ucyAoY291bnQgdGltZXMpCiAgLy8vCiAgLy8vIERvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYmVnaW4gZXZlbnQsIHVzZSBbYmVnaW5NZW1iZXJdIGluc3RlYWQuCiAgdm9pZCBlbmRGaWVsZHMoVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkZpZWxkcyIpOwogIH0KCiAgLy8vIE1hcmtzIHRoYXQgdGhlIGdyYW1tYXIgdGVybSBgZm9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRgIGhhcyBiZWVuIHBhcnNlZCBhbmQKICAvLy8gaXQgd2FzIGFuIGVtcHR5IHN0YXRlbWVudC4KICB2b2lkIGhhbmRsZUZvckluaXRpYWxpemVyRW1wdHlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50Iik7CiAgfQoKICAvLy8gTWFya3MgdGhhdCB0aGUgZ3JhbW1hciB0ZXJtIGBmb3JJbml0aWFsaXplclN0YXRlbWVudGAgaGFzIGJlZW4gcGFyc2VkIGFuZAogIC8vLyBpdCB3YXMgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnQuCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckV4cHJlc3Npb25TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGb3JJbml0aWFsaXplckV4cHJlc3Npb25TdGF0ZW1lbnQiKTsKICB9CgogIC8vLyBNYXJrcyB0aGF0IHRoZSBncmFtbWFyIHRlcm0gYGZvckluaXRpYWxpemVyU3RhdGVtZW50YCBoYXMgYmVlbiBwYXJzZWQgYW5kCiAgLy8vIGl0IHdhcyBhIGBsb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25gLgogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGb3JJbml0aWFsaXplckxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiIpOwogIH0KCiAgLy8vIE1hcmtzIHRoZSBzdGFydCBvZiBhIGZvciBzdGF0ZW1lbnQgd2hpY2ggaXMgZW5kZWQgYnkgZWl0aGVyCiAgLy8vIFtlbmRGb3JTdGF0ZW1lbnRdIG9yIFtlbmRGb3JJbl0uCiAgdm9pZCBiZWdpbkZvclN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgLy8vIE1hcmtzIHRoZSBlbmQgb2YgcGFyc2luZyB0aGUgY29udHJvbCBzdHJ1Y3R1cmUgb2YgYSBmb3Igc3RhdGVtZW50CiAgLy8vIG9yIGZvciBjb250cm9sIGZsb3cgZW50cnkgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcy4KICAvLy8gYGZvcmAgYChgIGluaXRpYWxpemF0aW9uIGA7YCBjb25kaXRpb24gYDtgIHVwZGF0ZXJzIGApYAogIHZvaWQgaGFuZGxlRm9yTG9vcFBhcnRzKFRva2VuIGZvcktleXdvcmQsIFRva2VuIGxlZnRQYXJlbiwKICAgICAgVG9rZW4gbGVmdFNlcGFyYXRvciwgaW50IHVwZGF0ZUV4cHJlc3Npb25Db3VudCkge30KCiAgdm9pZCBlbmRGb3JTdGF0ZW1lbnQoVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGb3JTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgYmVnaW5Gb3JTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEZvclN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGb3JTdGF0ZW1lbnRCb2R5Iik7CiAgfQoKICAvLy8gTWFya3MgdGhlIGVuZCBvZiBwYXJzaW5nIHRoZSBjb250cm9sIHN0cnVjdHVyZSBvZiBhIGZvci1pbiBzdGF0ZW1lbnQKICAvLy8gb3IgZm9yIGNvbnRyb2wgZmxvdyBlbnRyeSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzLgogIC8vLyBgZm9yYCBgKGAgKHR5cGUpPyBpZGVudGlmaWVyIGBpbmAgaXRlcmF0b3IgYClgCiAgdm9pZCBoYW5kbGVGb3JJbkxvb3BQYXJ0cyhUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbiwKICAgICAgVG9rZW4gbGVmdFBhcmVudGhlc2lzLCBUb2tlbiBpbktleXdvcmQpIHt9CgogIC8vIE9uZSBvZiB0aGUgdHdvIHBvc3NpYmxlIGNvcnJlc3BvbmRpbmcgZW5kIGV2ZW50cyBmb3IgW2JlZ2luRm9yU3RhdGVtZW50XS4KICB2b2lkIGVuZEZvckluKFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ySW4iKTsKICB9CgogIHZvaWQgYmVnaW5Gb3JJbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kRm9ySW5FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ySW5FeHByZXNzaW9uIik7CiAgfQoKICB2b2lkIGJlZ2luRm9ySW5Cb2R5KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEZvckluQm9keShUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkZvckluQm9keSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW5uaW5nIG9mIGEgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aGljaCBpc24ndCBsZWdhbAogIC8vLyBzeW50YXggaW4gRGFydC4gIFVzZWZ1bCBmb3IgcmVjb3ZlcmluZyBmcm9tIEphdmFzY3JpcHQgY29kZSBiZWluZyBwYXN0ZWQKICAvLy8gaW50byBhIERhcnQgcHJvZ3JhbSwgYXMgaXQgd2lsbCBpbnRlcnByZXQgYGZ1bmN0aW9uIGZvbygpIHt9YCBhcyBhIG5hbWVkCiAgLy8vIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2l0aCByZXR1cm4gdHlwZSBgZnVuY3Rpb25gIGFuZCBuYW1lIGBmb29gLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIFR5cGUgdmFyaWFibGVzCiAgdm9pZCBiZWdpbk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICAvLy8gQSBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIHdoaWNoIGlzbid0IGxlZ2FsIHN5bnRheCBpbiBEYXJ0LgogIC8vLyBVc2VmdWwgZm9yIHJlY292ZXJpbmcgZnJvbSBKYXZhc2NyaXB0IGNvZGUgYmVpbmcgcGFzdGVkIGludG8gYSBEYXJ0CiAgLy8vIHByb2dyYW0sIGFzIGl0IHdpbGwgaW50ZXJwcmV0IGBmdW5jdGlvbiBmb28oKSB7fWAgYXMgYSBuYW1lZCBmdW5jdGlvbgogIC8vLyBleHByZXNzaW9uIHdpdGggcmV0dXJuIHR5cGUgYGZ1bmN0aW9uYCBhbmQgbmFtZSBgZm9vYC4KICAvLy8KICAvLy8gU3Vic3RydWN0dXJlczoKICAvLy8gLSBUeXBlIHZhcmlhYmxlcwogIC8vLyAtIE1vZGlmaWVycwogIC8vLyAtIFJldHVybiB0eXBlCiAgLy8vIC0gTmFtZQogIC8vLyAtIEZvcm1hbHMKICAvLy8gLSBJbml0aWFsaXplcnMKICAvLy8gLSBBc3luYyBtb2RpZmllcgogIC8vLyAtIEZ1bmN0aW9uIGJvZHkgKGJsb2NrIG9yIGFycm93IGV4cHJlc3Npb24pLgogIHZvaWQgZW5kTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW5uaW5nIG9mIGEgbG9jYWwgZnVuY3Rpb24gZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gVHlwZSB2YXJpYWJsZXMKICB2b2lkIGJlZ2luTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7fQoKICAvLy8gQSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gU3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIFR5cGUgdmFyaWFibGVzCiAgLy8vIC0gUmV0dXJuIHR5cGUKICAvLy8gLSBOYW1lCiAgLy8vIC0gVHlwZSB2YXJpYWJsZXMKICAvLy8gLSBGb3JtYWxzCiAgLy8vIC0gSW5pdGlhbGl6ZXJzCiAgLy8vIC0gQXN5bmMgbW9kaWZpZXIKICAvLy8gLSBGdW5jdGlvbiBib2R5IChibG9jayBvciBhcnJvdyBleHByZXNzaW9uKS4KICB2b2lkIGVuZExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkZ1bmN0aW9uRGVjbGFyYXRpb24iKTsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIHdoZW4gdGhlIHBhcnNlciBzZWVzIHRoYXQgYSBmdW5jdGlvbiBoYXMgYQogIC8vLyBibG9jayBmdW5jdGlvbiBib2R5LiAgVGhpcyBtZXRob2QgaXMgbm90IGludm9rZWQgZm9yIGVtcHR5IG9yIGV4cHJlc3Npb24KICAvLy8gZnVuY3Rpb24gYm9kaWVzLCBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBbaGFuZGxlRW1wdHlGdW5jdGlvbkJvZHldCiAgLy8vIGFuZCBbaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keV0uCiAgdm9pZCBiZWdpbkJsb2NrRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7fQoKICAvLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCBieSB0aGUgcGFyc2VyIGFmdGVyIGl0IGZpbmlzaGVkIHBhcnNpbmcgYSBibG9jawogIC8vLyBmdW5jdGlvbiBib2R5LiAgVGhpcyBtZXRob2QgaXMgbm90IGludm9rZWQgZm9yIGVtcHR5IG9yIGV4cHJlc3Npb24KICAvLy8gZnVuY3Rpb24gYm9kaWVzLCBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBbaGFuZGxlRW1wdHlGdW5jdGlvbkJvZHldCiAgLy8vIGFuZCBbaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keV0uICBUaGUgW2JlZ2luVG9rZW5dIGlzIHRoZSAneycgdG9rZW4sCiAgLy8vIGFuZCB0aGUgW2VuZFRva2VuXSBpcyB0aGUgJ30nIHRva2VuIG9mIHRoZSBibG9jay4gIFRoZSBudW1iZXIgb2YKICAvLy8gc3RhdGVtZW50cyBpcyBnaXZlbiBhcyB0aGUgW2NvdW50XSBwYXJhbWV0ZXIuCiAgdm9pZCBlbmRCbG9ja0Z1bmN0aW9uQm9keShpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQmxvY2tGdW5jdGlvbkJvZHkiKTsKICB9CgogIHZvaWQgaGFuZGxlTm9GdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOb0Z1bmN0aW9uQm9keSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgZnVuY3Rpb24gYm9keSB0aGF0IHdhcyBza2lwcGVkIGJ5IHRoZSBwYXJzZXIuCiAgLy8vCiAgLy8vIFRoZSBib29sZWFuIFtpc0V4cHJlc3Npb25Cb2R5XSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gYm9keSB0aGF0CiAgLy8vIHdhcyBza2lwcGVkIHVzZWQgIj0+IiBzeW50YXguCiAgdm9pZCBoYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkKFRva2VuIHRva2VuLCBib29sIGlzRXhwcmVzc2lvbkJvZHkpIHt9CgogIHZvaWQgYmVnaW5GdW5jdGlvbk5hbWUoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kRnVuY3Rpb25OYW1lKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRnVuY3Rpb25OYW1lIik7CiAgfQoKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlQWxpYXMoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHR5cGVkZWYgZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIElmIFtlcXVhbHNdIGlzIG51bGwsIHRoZW4gd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBSZXR1cm4gdHlwZQogIC8vLyAtIE5hbWUgKGlkZW50aWZpZXIpCiAgLy8vIC0gQWxpYXMgdHlwZSB2YXJpYWJsZXMKICAvLy8gLSBGb3JtYWwgcGFyYW1ldGVycwogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBpcyBub3QgbnVsbCwgdGhlbiB0aGUgaGF2ZSB0aGUgZm9sbG93aW5nIHN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBOYW1lIChpZGVudGlmaWVyKQogIC8vLyAtIEFsaWFzIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gVHlwZSAoRnVuY3Rpb25UeXBlQW5ub3RhdGlvbikKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZUFsaWFzKAogICAgICBUb2tlbiB0eXBlZGVmS2V5d29yZCwgVG9rZW4gZXF1YWxzLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkZ1bmN0aW9uVHlwZUFsaWFzIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSB3aXRoIGNsYXVzZSAoZS5nLiAid2l0aCBCLCBDIikuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gbWl4aW4gdHlwZXMgKFR5cGVMaXN0KQogIHZvaWQgaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiQ2xhc3NXaXRoQ2xhdXNlIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBhYnNlbmNlIG9mIGEgd2l0aCBjbGF1c2UuCiAgdm9pZCBoYW5kbGVDbGFzc05vV2l0aENsYXVzZSgpIHsKICAgIGxvZ0V2ZW50KCJDbGFzc05vV2l0aENsYXVzZSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW5uaW5nIG9mIGEgbmFtZWQgbWl4aW4gYXBwbGljYXRpb24uCiAgLy8vIFtiZWdpblRva2VuXSBtYXkgYmUgdGhlIHNhbWUgYXMgW25hbWVdLCBvciBtYXkgcG9pbnQgdG8gbW9kaWZpZXJzCiAgLy8vIChvciBleHRyYW5lb3VzIG1vZGlmaWVycyBpbiB0aGUgY2FzZSBvZiByZWNvdmVyeSkgcHJlY2VkaW5nIFtuYW1lXS4KICB2b2lkIGJlZ2luTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICBUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkge30KCiAgLy8vIEhhbmRsZSBhIG5hbWVkIG1peGluIGFwcGxpY2F0aW9uIHdpdGggY2xhdXNlIChlLmcuICJBIHdpdGggQiwgQyIpLgogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHN1cGVydHlwZQogIC8vLyAtIG1peGluIHR5cGVzIChUeXBlTGlzdCkKICB2b2lkIGhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UoVG9rZW4gd2l0aEtleXdvcmQpIHsKICAgIGxvZ0V2ZW50KCJOYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNlIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBuYW1lZCBtaXhpbiBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gbWV0YWRhdGEKICAvLy8gLSBtb2RpZmllcnMKICAvLy8gLSBjbGFzcyBuYW1lCiAgLy8vIC0gdHlwZSB2YXJpYWJsZXMKICAvLy8gLSBzdXBlcnR5cGUKICAvLy8gLSB3aXRoIGNsYXVzZQogIC8vLyAtIGltcGxlbWVudGVkIHR5cGVzIChUeXBlTGlzdCkKICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnksYWhlKTogaXQgc2VlbXMgaW5jb25zaXN0ZW50IHRoYXQgZm9yIGEgbmFtZWQgbWl4aW4KICAvLy8gYXBwbGljYXRpb24sIHRoZSBpbXBsZW1lbnRlZCB0eXBlcyBhcmUgYSBUeXBlTGlzdCwgd2hlcmVhcyBmb3IgYSBjbGFzcwogIC8vLyBkZWNsYXJhdGlvbiwgZWFjaCBpbXBsZW1lbnRlZCB0eXBlIGlzIGxpc3RlZCBzZXBhcmF0ZWx5IG9uIHRoZSBzdGFjaywgYW5kCiAgLy8vIHRoZSBudW1iZXIgb2YgaW1wbGVtZW50ZWQgdHlwZXMgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLgogIHZvaWQgZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIGJlZ2luLCBUb2tlbiBjbGFzc0tleXdvcmQsIFRva2VuIGVxdWFscywKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiTmFtZWRNaXhpbkFwcGxpY2F0aW9uIik7CiAgfQoKICB2b2lkIGJlZ2luSGlkZShUb2tlbiBoaWRlS2V5d29yZCkge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgImhpZGUiIGNvbWJpbmF0b3IuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIGhpZGRlbiBuYW1lcyAoSWRlbnRpZmllckxpc3QpCiAgdm9pZCBlbmRIaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiSGlkZSIpOwogIH0KCiAgdm9pZCBoYW5kbGVJZGVudGlmaWVyTGlzdChpbnQgY291bnQpIHsKICAgIGxvZ0V2ZW50KCJJZGVudGlmaWVyTGlzdCIpOwogIH0KCiAgdm9pZCBiZWdpblR5cGVMaXN0KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFR5cGVMaXN0KGludCBjb3VudCkgewogICAgbG9nRXZlbnQoIlR5cGVMaXN0Iik7CiAgfQoKICB2b2lkIGJlZ2luSWZTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kSWZTdGF0ZW1lbnQoVG9rZW4gaWZUb2tlbiwgVG9rZW4gZWxzZVRva2VuKSB7CiAgICBsb2dFdmVudCgiSWZTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgYmVnaW5UaGVuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFRoZW5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJUaGVuU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luRWxzZVN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRFbHNlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRWxzZVN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBiZWdpbkltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkKSB7fQoKICAvLy8gU2lnbmFscyB0aGF0IHRoZSBjdXJyZW50IGltcG9ydCBpcyBkZWZlcnJlZCBhbmQvb3IgaGFzIGEgcHJlZml4CiAgLy8vIGRlcGVuZGluZyB1cG9uIHdoZXRoZXIgW2RlZmVycmVkS2V5d29yZF0gYW5kIFthc0tleXdvcmRdCiAgLy8vIGFyZSBub3QgYG51bGxgIHJlc3BlY3RpdmVseS4gU3Vic3RydWN0dXJlczoKICAvLy8gLSBwcmVmaXggaWRlbnRpZmllciAob25seSBpZiBhc0tleXdvcmQgIT0gbnVsbCkKICB2b2lkIGhhbmRsZUltcG9ydFByZWZpeChUb2tlbiBkZWZlcnJlZEtleXdvcmQsIFRva2VuIGFzS2V5d29yZCkgewogICAgbG9nRXZlbnQoIkltcG9ydFByZWZpeCIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGFuIGltcG9ydCBkaXJlY3RpdmUuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gdXJpCiAgLy8vIC0gY29uZGl0aW9uYWwgdXJpcwogIC8vLyAtIHByZWZpeCBpZGVudGlmaWVyCiAgLy8vIC0gY29tYmluYXRvcnMKICB2b2lkIGVuZEltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJJbXBvcnQiKTsKICB9CgogIC8vLyBIYW5kbGUgcmVjb3ZlcnkgYXNzb2NpYXRlZCB3aXRoIGFuIGltcG9ydCBkaXJlY3RpdmUuCiAgLy8vIFRoaXMgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBhZnRlciBbZW5kSW1wb3J0XQogIC8vLyB0byByZWNvdmVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyBpbXBvcnQgZGlyZWN0aXZlLgogIC8vLyBUaGUgc3Vic3RydWN0dXJlcyBhcmUgYSBzdWJzZXQgb2YgYW5kIGluIHRoZSBzYW1lIG9yZGVyIGFzIFtlbmRJbXBvcnRdOgogIC8vLyAtIGNvbmRpdGlvbmFsIHVyaXMKICAvLy8gLSBwcmVmaXggaWRlbnRpZmllcgogIC8vLyAtIGNvbWJpbmF0b3JzCiAgdm9pZCBoYW5kbGVSZWNvdmVySW1wb3J0KFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIkltcG9ydFJlY292ZXJ5Iik7CiAgfQoKICB2b2lkIGJlZ2luQ29uZGl0aW9uYWxVcmlzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpcyhpbnQgY291bnQpIHsKICAgIGxvZ0V2ZW50KCJDb25kaXRpb25hbFVyaXMiKTsKICB9CgogIHZvaWQgYmVnaW5Db25kaXRpb25hbFVyaShUb2tlbiBpZktleXdvcmQpIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGNvbmRpdGlvbmFsIFVSSSBjb25zdHJ1Y3QuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIERvdHRlZCBuYW1lCiAgLy8vIC0gQ29uZGl0aW9uIChsaXRlcmFsIHN0cmluZzsgb25seSBpZiBbZXF1YWxTaWduXSAhPSBudWxsKQogIC8vLyAtIFVSSSAobGl0ZXJhbCBzdHJpbmcpCiAgdm9pZCBlbmRDb25kaXRpb25hbFVyaShUb2tlbiBpZktleXdvcmQsIFRva2VuIGxlZnRQYXJlbiwgVG9rZW4gZXF1YWxTaWduKSB7CiAgICBsb2dFdmVudCgiQ29uZGl0aW9uYWxVcmkiKTsKICB9CgogIHZvaWQgaGFuZGxlRG90dGVkTmFtZShpbnQgY291bnQsIFRva2VuIGZpcnN0SWRlbnRpZmllcikgewogICAgbG9nRXZlbnQoIkRvdHRlZE5hbWUiKTsKICB9CgogIHZvaWQgYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uIik7CiAgfQoKICB2b2lkIGJlZ2luSW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEluaXRpYWxpemVkSWRlbnRpZmllcihUb2tlbiBuYW1lVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJbml0aWFsaXplZElkZW50aWZpZXIiKTsKICB9CgogIHZvaWQgYmVnaW5GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBmaWVsZCBpbml0aWFsaXplci4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gSW5pdGlhbGl6ZXIgZXhwcmVzc2lvbgogIHZvaWQgZW5kRmllbGRJbml0aWFsaXplcihUb2tlbiBhc3NpZ25tZW50LCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkZpZWxkSW5pdGlhbGl6ZXIiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGxhY2sgb2YgYSBmaWVsZCBpbml0aWFsaXplci4KICB2b2lkIGhhbmRsZU5vRmllbGRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vRmllbGRJbml0aWFsaXplciIpOwogIH0KCiAgdm9pZCBiZWdpblZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHZhcmlhYmxlIGluaXRpYWxpemVyLiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIEluaXRpYWxpemVyIGV4cHJlc3Npb24uCiAgdm9pZCBlbmRWYXJpYWJsZUluaXRpYWxpemVyKFRva2VuIGFzc2lnbm1lbnRPcGVyYXRvcikgewogICAgbG9nRXZlbnQoIlZhcmlhYmxlSW5pdGlhbGl6ZXIiKTsKICB9CgogIC8vLyBVc2VkIHdoZW4gYSB2YXJpYWJsZSBoYXMgbm8gaW5pdGlhbGl6ZXIuCiAgdm9pZCBoYW5kbGVOb1ZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOb1ZhcmlhYmxlSW5pdGlhbGl6ZXIiKTsKICB9CgogIHZvaWQgYmVnaW5Jbml0aWFsaXplcihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkNvbnN0cnVjdG9ySW5pdGlhbGl6ZXIiKTsKICB9CgogIHZvaWQgYmVnaW5Jbml0aWFsaXplcnMoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kSW5pdGlhbGl6ZXJzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJbml0aWFsaXplcnMiKTsKICB9CgogIHZvaWQgaGFuZGxlTm9Jbml0aWFsaXplcnMoKSB7CiAgICBsb2dFdmVudCgiTm9Jbml0aWFsaXplcnMiKTsKICB9CgogIC8vLyBDYWxsZWQgYWZ0ZXIgdGhlIGxpc3RlbmVyIGhhcyByZWNvdmVyZWQgZnJvbSBhbiBpbnZhbGlkIGV4cHJlc3Npb24uIFRoZQogIC8vLyBwYXJzZXIgd2lsbCByZXN1bWUgcGFyc2luZyBmcm9tIFt0b2tlbl0uIEV4YWN0bHkgd2hlcmUgdGhlIHBhcnNlciB3aWxsCiAgLy8vIHJlc3VtZSBwYXJzaW5nIGlzIHVuc3BlY2lmaWVkLgogIHZvaWQgaGFuZGxlSW52YWxpZEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJbnZhbGlkRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIENhbGxlZCBhZnRlciB0aGUgbGlzdGVuZXIgaGFzIHJlY292ZXJlZCBmcm9tIGFuIGludmFsaWQgZnVuY3Rpb24KICAvLy8gYm9keS4gVGhlIHBhcnNlciBleHBlY3RlZCBhbiBvcGVuIGN1cmx5IGJyYWNlIGB7YCBhbmQgd2lsbCByZXN1bWUgcGFyc2luZwogIC8vLyBmcm9tIFt0b2tlbl0gYXMgaWYgYSBmdW5jdGlvbiBib2R5IGhhZCBwcmVjZWRlZCBpdC4KICB2b2lkIGhhbmRsZUludmFsaWRGdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJbnZhbGlkRnVuY3Rpb25Cb2R5Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHRoZSBsaXN0ZW5lciBoYXMgcmVjb3ZlcmVkIGZyb20gYW4gaW52YWxpZCB0eXBlLiBUaGUgcGFyc2VyCiAgLy8vIGV4cGVjdGVkIGFuIGlkZW50aWZpZXIsIGFuZCB3aWxsIHJlc3VtZSBwYXJzaW5nIHR5cGUgYXJndW1lbnRzIGZyb20KICAvLy8gW3Rva2VuXS4KICB2b2lkIGhhbmRsZUludmFsaWRUeXBlUmVmZXJlbmNlKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZFR5cGVSZWZlcmVuY2UiKTsKICB9CgogIHZvaWQgaGFuZGxlTGFiZWwoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJMYWJlbCIpOwogIH0KCiAgdm9pZCBiZWdpbkxhYmVsZWRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4sIGludCBsYWJlbENvdW50KSB7fQoKICB2b2lkIGVuZExhYmVsZWRTdGF0ZW1lbnQoaW50IGxhYmVsQ291bnQpIHsKICAgIGxvZ0V2ZW50KCJMYWJlbGVkU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luTGlicmFyeU5hbWUoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGxpYnJhcnkgZGlyZWN0aXZlLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIExpYnJhcnkgbmFtZSAoYSBxdWFsaWZpZWQgaWRlbnRpZmllcikKICB2b2lkIGVuZExpYnJhcnlOYW1lKFRva2VuIGxpYnJhcnlLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJMaWJyYXJ5TmFtZSIpOwogIH0KCiAgdm9pZCBoYW5kbGVMaXRlcmFsTWFwRW50cnkoVG9rZW4gY29sb24sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbE1hcEVudHJ5Iik7CiAgfQoKICB2b2lkIGJlZ2luTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikge30KCiAgdm9pZCBoYW5kbGVJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihUb2tlbiBsZWZ0QnJhY2tldCwgVG9rZW4gcmlnaHRCcmFja2V0KSB7fQoKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJMaXRlcmFsU3RyaW5nIik7CiAgfQoKICB2b2lkIGhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb24oaW50IGxpdGVyYWxDb3VudCkgewogICAgbG9nRXZlbnQoIlN0cmluZ0p1eHRhcG9zaXRpb24iKTsKICB9CgogIHZvaWQgYmVnaW5NZW1iZXIoKSB7fQoKICAvLy8gSGFuZGxlIGFuIGludmFsaWQgbWVtYmVyIGRlY2xhcmF0aW9uLiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgdm9pZCBoYW5kbGVJbnZhbGlkTWVtYmVyKFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZE1lbWJlciIpOwogIH0KCiAgLy8vIFRoaXMgZXZlbnQgaXMgYWRkZWQgZm9yIGNvbnZlbmllbmNlLiBOb3JtYWxseSwgb25lIHNob3VsZCBvdmVycmlkZQogIC8vLyBbZW5kTWV0aG9kXSBvciBbZW5kRmllbGRzXSBpbnN0ZWFkLgogIHZvaWQgZW5kTWVtYmVyKCkgewogICAgbG9nRXZlbnQoIk1lbWJlciIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW5uaW5nIG9mIGEgbWV0aG9kIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIHZvaWQgYmVnaW5NZXRob2QoVG9rZW4gZXh0ZXJuYWxUb2tlbiwgVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIFRva2VuIGdldE9yU2V0LCBUb2tlbiBuYW1lKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBtZXRob2QgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gcmV0dXJuIHR5cGUKICAvLy8gLSBtZXRob2QgbmFtZSAoaWRlbnRpZmllciwgcG9zc2libHkgcXVhbGlmaWVkKQogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gZm9ybWFsIHBhcmFtZXRlcnMKICAvLy8gLSBpbml0aWFsaXplcnMKICAvLy8gLSBhc3luYyBtYXJrZXIKICAvLy8gLSBib2R5CiAgdm9pZCBlbmRNZXRob2QoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIk1ldGhvZCIpOwogIH0KCiAgdm9pZCBiZWdpbk1ldGFkYXRhU3RhcihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRNZXRhZGF0YVN0YXIoaW50IGNvdW50KSB7CiAgICBsb2dFdmVudCgiTWV0YWRhdGFTdGFyIik7CiAgfQoKICB2b2lkIGJlZ2luTWV0YWRhdGEoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIG1ldGFkYXRhIGFubm90YXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIElkZW50aWZpZXIKICAvLy8gLSBUeXBlIGFyZ3VtZW50cwogIC8vLyAtIENvbnN0cnVjdG9yIG5hbWUgKG9ubHkgaWYgW3BlcmlvZEJlZm9yZU5hbWVdIGlzIG5vdCBgbnVsbGApCiAgLy8vIC0gQXJndW1lbnRzCiAgdm9pZCBlbmRNZXRhZGF0YShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIk1ldGFkYXRhIik7CiAgfQoKICB2b2lkIGJlZ2luT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZE9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycygKICAgICAgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyIpOwogIH0KCiAgdm9pZCBiZWdpblBhcnQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHBhcnQgZGlyZWN0aXZlLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIHVyaQogIHZvaWQgZW5kUGFydChUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsb2dFdmVudCgiUGFydCIpOwogIH0KCiAgdm9pZCBiZWdpblBhcnRPZihUb2tlbiB0b2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgInBhcnQgb2YiIGRpcmVjdGl2ZS4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBMaWJyYXJ5IG5hbWUgKGEgcXVhbGlmaWVkIGlkZW50aWZpZXIpCiAgLy8vCiAgLy8vIElmIFtoYXNOYW1lXSBpcyB0cnVlLCB0aGlzIHBhcnQgcmVmZXJzIHRvIGl0cyBsaWJyYXJ5IGJ5IG5hbWUsIG90aGVyd2lzZSwKICAvLy8gYnkgVVJJLgogIHZvaWQgZW5kUGFydE9mKAogICAgICBUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gb2ZLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24sIGJvb2wgaGFzTmFtZSkgewogICAgbG9nRXZlbnQoIlBhcnRPZiIpOwogIH0KCiAgdm9pZCBiZWdpblJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlJlZGlyZWN0aW5nRmFjdG9yeUJvZHkiKTsKICB9CgogIHZvaWQgYmVnaW5SZXR1cm5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGBuYXRpdmVgIGZ1bmN0aW9uLgogIC8vLyBUaGUgW2hhbmRsZU5hdGl2ZUNsYXVzZV0gZXZlbnQgaXMgc2VudCBwcmlvciB0byB0aGlzIGV2ZW50LgogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5KFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHkiKTsKICB9CgogIC8vLyBDYWxsZWQgYWZ0ZXIgdGhlIFtoYW5kbGVOYXRpdmVDbGF1c2VdIGV2ZW50IHdoZW4gdGhlIHBhcnNlciBkZXRlcm1pbmVzCiAgLy8vIHRoYXQgdGhlIG5hdGl2ZSBjbGF1c2Ugc2hvdWxkIGJlIGRpc2NhcmRlZCAvIGlnbm9yZWQuCiAgLy8vIEZvciBleGFtcGxlLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYSBuYXRpdmUgY2xhdXNlIGlzIGZvbGxvd2VkIGJ5CiAgLy8vIGEgZnVuY3Rpb24gYm9keS4KICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGBuYXRpdmVgIGZ1bmN0aW9uIHRoYXQgd2FzIHNraXBwZWQgYnkgdGhlIHBhcnNlci4KICAvLy8gVGhlIFtoYW5kbGVOYXRpdmVDbGF1c2VdIGV2ZW50IGlzIHNlbnQgcHJpb3IgdG8gdGhpcyBldmVudC4KICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQiKTsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIHdoZW4gYSBmdW5jdGlvbiBoYXMgdGhlIGVtcHR5IGJvZHkuCiAgdm9pZCBoYW5kbGVFbXB0eUZ1bmN0aW9uQm9keShUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJFbXB0eUZ1bmN0aW9uQm9keSIpOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgd2hlbiBwYXJzZXIgZmluaXNoZXMgcGFyc2luZyB0aGUgY29ycmVzcG9uZGluZwogIC8vLyBleHByZXNzaW9uIG9mIHRoZSBleHByZXNzaW9uIGZ1bmN0aW9uIGJvZHkuCiAgdm9pZCBoYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KFRva2VuIGFycm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRXhwcmVzc2lvbkZ1bmN0aW9uQm9keSIpOwogIH0KCiAgdm9pZCBlbmRSZXR1cm5TdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzRXhwcmVzc2lvbiwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJSZXR1cm5TdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlU2VuZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlNlbmQiKTsKICB9CgogIHZvaWQgYmVnaW5TaG93KFRva2VuIHNob3dLZXl3b3JkKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSAic2hvdyIgY29tYmluYXRvci4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gc2hvd24gbmFtZXMgKElkZW50aWZpZXJMaXN0KQogIHZvaWQgZW5kU2hvdyhUb2tlbiBzaG93S2V5d29yZCkgewogICAgbG9nRXZlbnQoIlNob3ciKTsKICB9CgogIHZvaWQgYmVnaW5Td2l0Y2hTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kU3dpdGNoU3RhdGVtZW50KFRva2VuIHN3aXRjaEtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiU3dpdGNoU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luU3dpdGNoQmxvY2soVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kU3dpdGNoQmxvY2soaW50IGNhc2VDb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJTd2l0Y2hCbG9jayIpOwogIH0KCiAgdm9pZCBiZWdpbkxpdGVyYWxTeW1ib2woVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kTGl0ZXJhbFN5bWJvbChUb2tlbiBoYXNoVG9rZW4sIGludCBpZGVudGlmaWVyQ291bnQpIHsKICAgIGxvZ0V2ZW50KCJMaXRlcmFsU3ltYm9sIik7CiAgfQoKICB2b2lkIGhhbmRsZVRocm93RXhwcmVzc2lvbihUb2tlbiB0aHJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlRocm93RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBiZWdpblJldGhyb3dTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kUmV0aHJvd1N0YXRlbWVudChUb2tlbiByZXRocm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiUmV0aHJvd1N0YXRlbWVudCIpOwogIH0KCiAgLy8vIFRoaXMgZXZlbnQgaXMgYWRkZWQgZm9yIGNvbnZlbmllbmNlLiBOb3JtYWxseSwgb25lIHNob3VsZCB1c2UKICAvLy8gW2VuZENsYXNzRGVjbGFyYXRpb25dLCBbZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uXSwgW2VuZEVudW1dLAogIC8vLyBbZW5kRnVuY3Rpb25UeXBlQWxpYXNdLCBbZW5kTGlicmFyeU5hbWVdLCBbZW5kSW1wb3J0XSwgW2VuZEV4cG9ydF0sCiAgLy8vIFtlbmRQYXJ0XSwgW2VuZFBhcnRPZl0sIFtlbmRUb3BMZXZlbEZpZWxkc10sIG9yIFtlbmRUb3BMZXZlbE1ldGhvZF0uCiAgdm9pZCBlbmRUb3BMZXZlbERlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiVG9wTGV2ZWxEZWNsYXJhdGlvbiIpOwogIH0KCiAgLy8vIENhbGxlZCBieSB0aGUgW1BhcnNlcl0gd2hlbiBpdCByZWNvdmVycyBmcm9tIGFuIGludmFsaWQgdG9wIGxldmVsCiAgLy8vIGRlY2xhcmF0aW9uLCB3aGVyZSBbZW5kVG9rZW5dIGlzIHRoZSBsYXN0IHRva2VuIGluIHRoZSBkZWNsYXJhdGlvbgogIC8vLyBUaGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgYmVnaW4vZW5kIG1ldGFkYXRhIHN0YXIgZXZlbnRzLAogIC8vLyBhbmQgaXMgZm9sbG93ZWQgYnkgW2VuZFRvcExldmVsRGVjbGFyYXRpb25dLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uIik7CiAgfQoKICAvLy8gTWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIHRvcCBsZXZlbCBmaWVsZCBvciBtZXRob2QgZGVjbGFyYXRpb24uCiAgLy8vIERvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZW5kIGV2ZW50LgogIC8vLyBTZWUgW2VuZFRvcExldmVsRmllbGRzXSBhbmQgW2VuZFRvcExldmVsTWV0aG9kXS4KICB2b2lkIGJlZ2luVG9wTGV2ZWxNZW1iZXIoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHRvcCBsZXZlbCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBUeXBlCiAgLy8vIC0gUmVwZWF0ZWQgW2NvdW50XSB0aW1lczoKICAvLy8gICAtIFZhcmlhYmxlIG5hbWUgKGlkZW50aWZpZXIpCiAgLy8vICAgLSBGaWVsZCBpbml0aWFsaXplcgogIC8vLyBEb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJlZ2luIGV2ZW50LgogIC8vLyBVc2UgW2JlZ2luVG9wTGV2ZWxNZW1iZXJdIGluc3RlYWQuCiAgdm9pZCBlbmRUb3BMZXZlbEZpZWxkcygKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgaW50IGNvdW50LAogICAgICBUb2tlbiBiZWdpblRva2VuLAogICAgICBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlRvcExldmVsRmllbGRzIik7CiAgfQoKICB2b2lkIGJlZ2luVG9wTGV2ZWxNZXRob2QoVG9rZW4gbGFzdENvbnN1bWVkLCBUb2tlbiBleHRlcm5hbFRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSB0b3AgbGV2ZWwgbWV0aG9kLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIG1vZGlmaWVycwogIC8vLyAtIHJldHVybiB0eXBlCiAgLy8vIC0gaWRlbnRpZmllcgogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gZm9ybWFsIHBhcmFtZXRlcnMKICAvLy8gLSBhc3luYyBtYXJrZXIKICAvLy8gLSBib2R5CiAgdm9pZCBlbmRUb3BMZXZlbE1ldGhvZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBnZXRPclNldCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJUb3BMZXZlbE1ldGhvZCIpOwogIH0KCiAgdm9pZCBiZWdpblRyeVN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBoYW5kbGVDYXNlTWF0Y2goVG9rZW4gY2FzZUtleXdvcmQsIFRva2VuIGNvbG9uKSB7CiAgICBsb2dFdmVudCgiQ2FzZU1hdGNoIik7CiAgfQoKICB2b2lkIGJlZ2luQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDYXRjaENsYXVzZSIpOwogIH0KCiAgdm9pZCBoYW5kbGVDYXRjaEJsb2NrKFRva2VuIG9uS2V5d29yZCwgVG9rZW4gY2F0Y2hLZXl3b3JkLCBUb2tlbiBjb21tYSkgewogICAgbG9nRXZlbnQoIkNhdGNoQmxvY2siKTsKICB9CgogIHZvaWQgaGFuZGxlRmluYWxseUJsb2NrKFRva2VuIGZpbmFsbHlLZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiRmluYWxseUJsb2NrIik7CiAgfQoKICB2b2lkIGVuZFRyeVN0YXRlbWVudChpbnQgY2F0Y2hDb3VudCwgVG9rZW4gdHJ5S2V5d29yZCwgVG9rZW4gZmluYWxseUtleXdvcmQpIHsKICAgIGxvZ0V2ZW50KCJUcnlTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlVHlwZShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIGxvZ0V2ZW50KCJUeXBlIik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gcGFyc2VyIGVuY291bnRlcnMgYSAnIScKICAvLy8gdXNlZCBhcyBhIG5vbi1udWxsIHBvc3RmaXggYXNzZXJ0aW9uIGluIGFuIGV4cHJlc3Npb24uCiAgdm9pZCBoYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbihUb2tlbiBiYW5nKSB7CiAgICBsb2dFdmVudCgiTm9uTnVsbEFzc2VydEV4cHJlc3Npb24iKTsKICB9CgogIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBsaXN0ZW5lcnMgaGF2ZSBiZWVuIHVwZGF0ZWQKICAvLyB0byBwcm9wZXJseSBoYW5kbGUgbnVsbGFibGUgdHlwZXMKICB2b2lkIHJlcG9ydEVycm9ySWZOdWxsYWJsZVR5cGUoVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBpZiAocXVlc3Rpb25NYXJrICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KG9wdGlvbmFsKCc/JywgcXVlc3Rpb25NYXJrKSk7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB0ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkLndpdGhBcmd1bWVudHMoJ25vbi1udWxsYWJsZScpLAogICAgICAgICAgcXVlc3Rpb25NYXJrLAogICAgICAgICAgcXVlc3Rpb25NYXJrKTsKICAgIH0KICB9CgogIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBsaXN0ZW5lcnMgaGF2ZSBiZWVuIHVwZGF0ZWQKICAvLyB0byBwcm9wZXJseSBoYW5kbGUgbnVsbGFibGUgdHlwZXMKICB2b2lkIHJlcG9ydE5vbk51bGxhYmxlTW9kaWZpZXJFcnJvcihUb2tlbiBtb2RpZmllclRva2VuKSB7CiAgICBpZiAobW9kaWZpZXJUb2tlbiAhPSBudWxsKSB7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB0ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkLndpdGhBcmd1bWVudHMoJ25vbi1udWxsYWJsZScpLAogICAgICAgICAgbW9kaWZpZXJUb2tlbiwKICAgICAgICAgIG1vZGlmaWVyVG9rZW4pOwogICAgfQogIH0KCiAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlbW92ZSB0aGlzIG9uY2UgYWxsIGxpc3RlbmVycyBoYXZlIGJlZW4gdXBkYXRlZAogIC8vIHRvIHByb3Blcmx5IGhhbmRsZSBub24tbnVsbCBhc3NlcnQgZXhwcmVzc2lvbnMKICB2b2lkIHJlcG9ydE5vbk51bGxBc3NlcnRFeHByZXNzaW9uTm90RW5hYmxlZChUb2tlbiBiYW5nKSB7CiAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIHRlbXBsYXRlRXhwZXJpbWVudE5vdEVuYWJsZWQud2l0aEFyZ3VtZW50cygnbm9uLW51bGxhYmxlJyksIGJhbmcsIGJhbmcpOwogIH0KCiAgdm9pZCBoYW5kbGVOb05hbWUoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOb05hbWUiKTsKICB9CgogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGUoVG9rZW4gYmVnaW5Ub2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIFR5cGUgdmFyaWFibGVzCiAgLy8vIC0gUmV0dXJuIHR5cGUKICAvLy8gLSBGb3JtYWwgcGFyYW1ldGVycwogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgbG9nRXZlbnQoIkZ1bmN0aW9uVHlwZSIpOwogIH0KCiAgdm9pZCBiZWdpblR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kVHlwZUFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiVHlwZUFyZ3VtZW50cyIpOwogIH0KCiAgLy8vIEFmdGVyIGVuZFR5cGVBcmd1bWVudHMgaGFzIGJlZW4gY2FsbGVkLAogIC8vLyB0aGlzIGV2ZW50IGlzIGNhbGxlZCBpZiB0aG9zZSB0eXBlIGFyZ3VtZW50cyBhcmUgaW52YWxpZC4KICB2b2lkIGhhbmRsZUludmFsaWRUeXBlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTm9UeXBlQXJndW1lbnRzIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vVHlwZUFyZ3VtZW50cyIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW4gb2YgYSB0eXBlIGZvcm1hbCBwYXJhbWV0ZXIgKGUuZy4gIlggZXh0ZW5kcyBZIikuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBOYW1lIChpZGVudGlmaWVyKQogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBDYWxsZWQgd2hlbiBbYmVnaW5UeXBlVmFyaWFibGVdIGhhcyBiZWVuIGNhbGxlZCBmb3IgYWxsIG9mIHRoZSB2YXJpYWJsZXMKICAvLy8gaW4gYSBncm91cCwgYW5kIGJlZm9yZSBbZW5kVHlwZVZhcmlhYmxlXSBoYXMgYmVlbiBjYWxsZWQgZm9yIGFueSBvZiB0aGUKICAvLy8gdmFyaWFibGVzIGluIHRoYXQgc2FtZSBncm91cC4KICB2b2lkIGhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkKFRva2VuIHRva2VuLCBpbnQgY291bnQpIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHR5cGUgZm9ybWFsIHBhcmFtZXRlciAoZS5nLiAiWCBleHRlbmRzIFkiKQogIC8vLyB3aGVyZSBbaW5kZXhdIGlzIHRoZSBpbmRleCBvZiB0aGUgdHlwZSB2YXJpYWJsZSBpbiB0aGUgbGlzdCBvZgogIC8vLyB0eXBlIHZhcmlhYmxlcyBiZWluZyBkZWNsYXJlZC4KICAvLy8KICAvLy8gU3Vic3RydWN0dXJlczoKICAvLy8gLSBUeXBlIGJvdW5kCiAgLy8vCiAgLy8vIFNlZSBbYmVnaW5UeXBlVmFyaWFibGVdIGZvciBhZGRpdGlvbmFsIHN1YnN0cnVjdHVyZXMuCiAgdm9pZCBlbmRUeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4sIGludCBpbmRleCwgVG9rZW4gZXh0ZW5kc09yU3VwZXIpIHsKICAgIGxvZ0V2ZW50KCJUeXBlVmFyaWFibGUiKTsKICB9CgogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFR5cGVWYXJpYWJsZXMoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJUeXBlVmFyaWFibGVzIik7CiAgfQoKICB2b2lkIGJlZ2luRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBmdW5jdGlvbiBleHByZXNzaW9uIChlLmcuICIoKSB7IC4uLiB9IikuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gVHlwZSB2YXJpYWJsZXMKICAvLy8gLSBGb3JtYWwgcGFyYW1ldGVycwogIC8vLyAtIEFzeW5jIG1hcmtlcgogIC8vLyAtIEJvZHkKICB2b2lkIGVuZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkZ1bmN0aW9uRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgc3RhcnQgb2YgYSB2YXJpYWJsZXMgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gVHlwZQogIHZvaWQgYmVnaW5WYXJpYWJsZXNEZWNsYXJhdGlvbigKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIGxhdGVUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7fQoKICB2b2lkIGVuZFZhcmlhYmxlc0RlY2xhcmF0aW9uKGludCBjb3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJWYXJpYWJsZXNEZWNsYXJhdGlvbiIpOwogIH0KCiAgdm9pZCBiZWdpbldoaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFdoaWxlU3RhdGVtZW50KFRva2VuIHdoaWxlS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJXaGlsZVN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBoYW5kbGVBc09wZXJhdG9yKFRva2VuIG9wZXJhdG9yKSB7CiAgICBsb2dFdmVudCgiQXNPcGVyYXRvciIpOwogIH0KCiAgdm9pZCBoYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkFzc2lnbm1lbnRFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIHBhcnNlciBlbmNvdW50ZXJzIGEgYmluYXJ5IG9wZXJhdG9yLCBpbiBiZXR3ZWVuIHRoZSBMSFMKICAvLy8gYW5kIFJIUyBzdWJleHByZXNzaW9ucy4KICAvLy8KICAvLy8gTm90IGNhbGxlZCB3aGVuIHRoZSBiaW5hcnkgb3BlcmF0b3IgaXMgYC5gLCBgPy5gLCBvciBgLi5gLgogIHZvaWQgYmVnaW5CaW5hcnlFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJCaW5hcnlFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIHBhcnNlciBlbmNvdW50ZXJzIGEgYD9gIG9wZXJhdG9yIGFuZCBiZWdpbnMgcGFyc2luZyBhCiAgLy8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCiAgdm9pZCBiZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbihUb2tlbiBxdWVzdGlvbikge30KCiAgLy8vIENhbGxlZCB3aGVuIHRoZSBwYXJzZXIgZW5jb3VudGVycyBhIGA6YCBvcGVyYXRvciBpbiBhIGNvbmRpdGlvbmFsCiAgLy8vIGV4cHJlc3Npb24uCiAgdm9pZCBoYW5kbGVDb25kaXRpb25hbEV4cHJlc3Npb25Db2xvbigpIHt9CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgcGFyc2VyIGZpbmlzaGVzIHByb2Nlc3NpbmcgYSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogIHZvaWQgZW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRva2VuIHF1ZXN0aW9uLCBUb2tlbiBjb2xvbikgewogICAgbG9nRXZlbnQoIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBiZWdpbkNvbnN0RXhwcmVzc2lvbihUb2tlbiBjb25zdEtleXdvcmQpIHt9CgogIHZvaWQgZW5kQ29uc3RFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29uc3RFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIGJlZm9yZSBwYXJzaW5nIGEgImZvciIgY29udHJvbCBmbG93IGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5LgogIHZvaWQgYmVnaW5Gb3JDb250cm9sRmxvdyhUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbikge30KCiAgLy8vIENhbGxlZCBhZnRlciBwYXJzaW5nIGEgImZvciIgY29udHJvbCBmbG93IGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5LgogIHZvaWQgZW5kRm9yQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCdlbmRGb3JDb250cm9sRmxvdycpOwogIH0KCiAgLy8vIENhbGxlZCBhZnRlciBwYXJzaW5nIGEgImZvci1pbiIgY29udHJvbCBmbG93IGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5LgogIHZvaWQgZW5kRm9ySW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoJ2VuZEZvckluQ29udHJvbEZsb3cnKTsKICB9CgogIC8vLyBDYWxsZWQgYmVmb3JlIHBhcnNpbmcgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkuCiAgdm9pZCBiZWdpbklmQ29udHJvbEZsb3coVG9rZW4gaWZUb2tlbikge30KCiAgLy8vIENhbGxlZCBiZWZvcmUgcGFyc2luZyB0aGUgYHRoZW5gIHBvcnRpb24gb2YgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwKICAvLy8gc2V0LCBvciBtYXAgZW50cnkuCiAgdm9pZCBiZWdpblRoZW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikge30KCiAgLy8vIENhbGxlZCBiZWZvcmUgcGFyc2luZyB0aGUgYGVsc2VgIHBvcnRpb24gb2YgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwKICAvLy8gc2V0LCBvciBtYXAgZW50cnkuCiAgdm9pZCBoYW5kbGVFbHNlQ29udHJvbEZsb3coVG9rZW4gZWxzZVRva2VuKSB7CiAgICBsb2dFdmVudCgiRWxzZUNvbnRyb2xGbG93Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHBhcnNpbmcgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaWYgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogIC8vLyAtIGV4cHJlc3Npb24KICB2b2lkIGVuZElmQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJlbmRJZkNvbnRyb2xGbG93Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHBhcnNpbmcgYW4gaWYtZWxzZSBjb250cm9sIGZsb3cgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaWYgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogIC8vLyAtIHRoZW4gZXhwcmVzc2lvbgogIC8vLyAtIGVsc2UgZXhwcmVzc2lvbgogIHZvaWQgZW5kSWZFbHNlQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJlbmRJZkVsc2VDb250cm9sRmxvdyIpOwogIH0KCiAgLy8vIENhbGxlZCBhZnRlciBwYXJzaW5nIGEgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkgdGhhdCBzdGFydHMgd2l0aAogIC8vLyBvbmUgb2YgdGhlIHNwcmVhZCBjb2xsZWN0aW9uIHRva2VucyBgLi4uYCBvciBgLi4uP2AuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIGV4cHJlc3Npb24KICB2b2lkIGhhbmRsZVNwcmVhZEV4cHJlc3Npb24oVG9rZW4gc3ByZWFkVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJTcHJlYWRFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBzdGFydCBvZiBhIGZ1bmN0aW9uIHR5cGVkIGZvcm1hbCBwYXJhbWV0ZXIuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIHR5cGVkIGZvcm1hbCBwYXJhbWV0ZXIuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gcmV0dXJuIHR5cGUKICAvLy8gLSBmb3JtYWwgcGFyYW1ldGVycwogIHZvaWQgZW5kRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiBuYW1lVG9rZW4sIFRva2VuIHF1ZXN0aW9uKSB7CiAgICBsb2dFdmVudCgiRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlciIpOwogIH0KCiAgLy8vIEhhbmRsZSBhbiBpZGVudGlmaWVyIHRva2VuLgogIC8vLwogIC8vLyBbY29udGV4dF0gaW5kaWNhdGVzIHdoYXQga2luZCBvZiBjb25zdHJ1Y3QgdGhlIGlkZW50aWZpZXIgYXBwZWFycyBpbi4KICB2b2lkIGhhbmRsZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGxvZ0V2ZW50KCJJZGVudGlmaWVyIik7CiAgfQoKICB2b2lkIGhhbmRsZUluZGV4ZWRFeHByZXNzaW9uKAogICAgICBUb2tlbiBvcGVuU3F1YXJlQnJhY2tldCwgVG9rZW4gY2xvc2VTcXVhcmVCcmFja2V0KSB7CiAgICBsb2dFdmVudCgiSW5kZXhlZEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlSXNPcGVyYXRvcihUb2tlbiBpc09wZXJhdG9yLCBUb2tlbiBub3QpIHsKICAgIGxvZ0V2ZW50KCJJc09wZXJhdG9yIik7CiAgfQoKICB2b2lkIGhhbmRsZUxpdGVyYWxCb29sKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbEJvb2wiKTsKICB9CgogIHZvaWQgaGFuZGxlQnJlYWtTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBicmVha0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQnJlYWtTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlQ29udGludWVTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBjb250aW51ZUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29udGludWVTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlRW1wdHlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJFbXB0eVN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBiZWdpbkFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCkge30KCiAgdm9pZCBlbmRBc3NlcnQoVG9rZW4gYXNzZXJ0S2V5d29yZCwgQXNzZXJ0IGtpbmQsIFRva2VuIGxlZnRQYXJlbnRoZXNpcywKICAgICAgVG9rZW4gY29tbWFUb2tlbiwgVG9rZW4gc2VtaWNvbG9uVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJBc3NlcnQiKTsKICB9CgogIC8qKiBDYWxsZWQgd2l0aCBlaXRoZXIgdGhlIHRva2VuIGNvbnRhaW5pbmcgYSBkb3VibGUgbGl0ZXJhbCwgb3IKICAgICogYW4gaW1tZWRpYXRlbHkgcHJlY2VkaW5nICJ1bmFyeSBwbHVzIiB0b2tlbi4KICAgICovCiAgdm9pZCBoYW5kbGVMaXRlcmFsRG91YmxlKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbERvdWJsZSIpOwogIH0KCiAgLyoqIENhbGxlZCB3aXRoIGVpdGhlciB0aGUgdG9rZW4gY29udGFpbmluZyBhbiBpbnRlZ2VyIGxpdGVyYWwsCiAgICAqIG9yIGFuIGltbWVkaWF0ZWx5IHByZWNlZGluZyAidW5hcnkgcGx1cyIgdG9rZW4uCiAgICAqLwogIHZvaWQgaGFuZGxlTGl0ZXJhbEludChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkxpdGVyYWxJbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlTGl0ZXJhbExpc3QoCiAgICAgIGludCBjb3VudCwgVG9rZW4gbGVmdEJyYWNrZXQsIFRva2VuIGNvbnN0S2V5d29yZCwgVG9rZW4gcmlnaHRCcmFja2V0KSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbExpc3QiKTsKICB9CgogIHZvaWQgaGFuZGxlTGl0ZXJhbFNldE9yTWFwKAogICAgaW50IGNvdW50LAogICAgVG9rZW4gbGVmdEJyYWNlLAogICAgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgVG9rZW4gcmlnaHRCcmFjZSwKICAgIC8vIFRPRE8oZGFucnViZWwpOiBoYXNTZXRFbnRyeSBwYXJhbWV0ZXIgZXhpc3RzIGZvciByZXBsaWNhdGluZyBleGlzdGluZwogICAgLy8gYmVoYXZpb3IgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHVuaWZpZWQgY29sbGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkCiAgICBib29sIGhhc1NldEVudHJ5LAogICkgewogICAgbG9nRXZlbnQoJ0xpdGVyYWxTZXRPck1hcCcpOwogIH0KCiAgdm9pZCBoYW5kbGVMaXRlcmFsTnVsbChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkxpdGVyYWxOdWxsIik7CiAgfQoKICB2b2lkIGhhbmRsZU5hdGl2ZUNsYXVzZShUb2tlbiBuYXRpdmVUb2tlbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBsb2dFdmVudCgiTmF0aXZlQ2xhdXNlIik7CiAgfQoKICB2b2lkIGhhbmRsZU5hbWVkQXJndW1lbnQoVG9rZW4gY29sb24pIHsKICAgIGxvZ0V2ZW50KCJOYW1lZEFyZ3VtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luTmV3RXhwcmVzc2lvbihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmROZXdFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTmV3RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBoYW5kbGVOb0FyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vQXJndW1lbnRzIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vVHlwZShUb2tlbiBsYXN0Q29uc3VtZWQpIHsKICAgIGxvZ0V2ZW50KCJOb1R5cGUiKTsKICB9CgogIHZvaWQgaGFuZGxlTm9UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTm9UeXBlVmFyaWFibGVzIik7CiAgfQoKICB2b2lkIGhhbmRsZU9wZXJhdG9yKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiT3BlcmF0b3IiKTsKICB9CgogIHZvaWQgaGFuZGxlU3ltYm9sVm9pZChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIlN5bWJvbFZvaWQiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGNvbnN0cnVjdCBvZiB0aGUgZm9ybSAib3BlcmF0b3IgPHRva2VuPiIuCiAgdm9pZCBoYW5kbGVPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk9wZXJhdG9yTmFtZSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgY29uc3RydWN0IG9mIHRoZSBmb3JtICJvcGVyYXRvciA8dG9rZW4+IgogIC8vLyB3aGVyZSA8dG9rZW4+IGlzIG5vdCBhIHZhbGlkIG9wZXJhdG9yIHRva2VuLgogIHZvaWQgaGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZShUb2tlbiBvcGVyYXRvcktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZE9wZXJhdG9yTmFtZSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgY29uZGl0aW9uIGluIGEgY29udHJvbCBzdHJ1Y3R1cmU6CiAgLy8vIC0gaWYgc3RhdGVtZW50CiAgLy8vIC0gZG8gd2hpbGUgbG9vcAogIC8vLyAtIHN3aXRjaCBzdGF0ZW1lbnQKICAvLy8gLSB3aGlsZSBsb29wCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiUGFyZW50aGVzaXplZENvbmRpdGlvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbi4KICAvLy8gVGhlc2UgbWF5IGJlIHdpdGhpbiB0aGUgY29uZGl0aW9uIGV4cHJlc3Npb24gb2YgYSBjb250cm9sIHN0cnVjdHVyZQogIC8vLyBidXQgd2lsbCBub3QgYmUgdGhlIGNvbmRpdGlvbiBvZiBhIGNvbnRyb2wgc3RydWN0dXJlLgogIHZvaWQgaGFuZGxlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSBhIGNvbnN0cnVjdCBvZiB0aGUgZm9ybSAiaWRlbnRpZmllci5pZGVudGlmaWVyIiBvY2N1cnJpbmcgaW4gYSBwYXJ0CiAgLy8vIG9mIHRoZSBncmFtbWFyIHdoZXJlIGV4cHJlc3Npb25zIGluIGdlbmVyYWwgYXJlIG5vdCBhbGxvd2VkLgogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIFF1YWxpZmllZCBpZGVudGlmaWVyIChiZWZvcmUgdGhlIHBlcmlvZCkKICAvLy8gLSBJZGVudGlmaWVyIChhZnRlciB0aGUgcGVyaW9kKQogIHZvaWQgaGFuZGxlUXVhbGlmaWVkKFRva2VuIHBlcmlvZCkgewogICAgbG9nRXZlbnQoIlF1YWxpZmllZCIpOwogIH0KCiAgdm9pZCBoYW5kbGVTdHJpbmdQYXJ0KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiU3RyaW5nUGFydCIpOwogIH0KCiAgdm9pZCBoYW5kbGVTdXBlckV4cHJlc3Npb24oVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGxvZ0V2ZW50KCJTdXBlckV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgYmVnaW5Td2l0Y2hDYXNlKGludCBsYWJlbENvdW50LCBpbnQgZXhwcmVzc2lvbkNvdW50LCBUb2tlbiBmaXJzdFRva2VuKSB7fQoKICB2b2lkIGVuZFN3aXRjaENhc2UoCiAgICAgIGludCBsYWJlbENvdW50LAogICAgICBpbnQgZXhwcmVzc2lvbkNvdW50LAogICAgICBUb2tlbiBkZWZhdWx0S2V5d29yZCwKICAgICAgVG9rZW4gY29sb25BZnRlckRlZmF1bHQsCiAgICAgIGludCBzdGF0ZW1lbnRDb3VudCwKICAgICAgVG9rZW4gZmlyc3RUb2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJTd2l0Y2hDYXNlIik7CiAgfQoKICB2b2lkIGhhbmRsZVRoaXNFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBsb2dFdmVudCgiVGhpc0V4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlVW5hcnlQb3N0Zml4QXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBoYW5kbGVVbmFyeVByZWZpeEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJVbmFyeVByZWZpeEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIlVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkge30KCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkgewogICAgbG9nRXZlbnQoIkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIGVxdWFscywgVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJWYWx1ZWRGb3JtYWxQYXJhbWV0ZXIiKTsKICB9CgogIHZvaWQgaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlIik7CiAgfQoKICB2b2lkIGhhbmRsZVZvaWRLZXl3b3JkKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiVm9pZEtleXdvcmQiKTsKICB9CgogIHZvaWQgYmVnaW5ZaWVsZFN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRZaWVsZFN0YXRlbWVudChUb2tlbiB5aWVsZFRva2VuLCBUb2tlbiBzdGFyVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiWWllbGRTdGF0ZW1lbnQiKTsKICB9CgogIC8vLyBUaGUgcGFyc2VyIG5vdGljZWQgYSBzeW50YXggZXJyb3IsIGJ1dCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gaXQuIFRoZQogIC8vLyBlcnJvciBzaG91bGQgYmUgcmVwb3J0ZWQgdXNpbmcgdGhlIFttZXNzYWdlXSwgYW5kIHRoZSBjb2RlIGJldHdlZW4gdGhlCiAgLy8vIGJlZ2lubmluZyBvZiB0aGUgW3N0YXJ0VG9rZW5dIGFuZCB0aGUgZW5kIG9mIHRoZSBbZW5kVG9rZW5dIHNob3VsZCBiZQogIC8vLyBoaWdobGlnaHRlZC4gVGhlIFtzdGFydFRva2VuXSBhbmQgW2VuZFRva2VuXSBjYW4gYmUgdGhlIHNhbWUgdG9rZW4uCiAgdm9pZCBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIHN0YXJ0VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7fQoKICAvLy8gVGhlIHBhcnNlciBlbmNvdW50ZXJlZCBhbiBbRXJyb3JUb2tlbl0gcmVwcmVzZW50aW5nIGFuIGVycm9yCiAgLy8vIGZyb20gdGhlIHNjYW5uZXIgYnV0IHJlY292ZXJlZCBmcm9tIGl0LiBCeSBkZWZhdWx0LCB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQKICAvLy8gYnkgY2FsbGluZyBbaGFuZGxlUmVjb3ZlcmFibGVFcnJvcl0gd2l0aCB0aGUgbWVzc2FnZSBhc3NvY2lhdGVkCiAgLy8vIHdpdGggdGhlIGVycm9yIFt0b2tlbl0uCiAgdm9pZCBoYW5kbGVFcnJvclRva2VuKEVycm9yVG9rZW4gdG9rZW4pIHsKICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IodG9rZW4uYXNzZXJ0aW9uTWVzc2FnZSwgdG9rZW4sIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBsb2NhdGlvbiwgaW50IHN0cmluZ09mZnNldCwgaW50IGxlbmd0aCkgewogICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbiwgbG9jYXRpb24pOwogIH0KCiAgLy8vIFNpZ25hbHMgdG8gdGhlIGxpc3RlbmVyIHRoYXQgdGhlIHByZXZpb3VzIHN0YXRlbWVudCBjb250YWluZWQgYSBzZW1hbnRpYwogIC8vLyBlcnJvciAoZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBbbWVzc2FnZV0pLiBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSBjYWxsZWQKICAvLy8gYWZ0ZXIgW2hhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHldLCBpbiB3aGljaCBjYXNlIGl0IHNpZ25hbHMgdGhhdCB0aGUKICAvLy8gaW1wbGljaXQgcmV0dXJuIHN0YXRlbWVudCBvZiB0aGUgZnVuY3Rpb24gY29udGFpbmVkIGEgc2VtYW50aWMgZXJyb3IuCiAgdm9pZCBoYW5kbGVJbnZhbGlkU3RhdGVtZW50KFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IobWVzc2FnZSwgdG9rZW4sIHRva2VuKTsKICB9CgogIHZvaWQgaGFuZGxlU2NyaXB0KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiU2NyaXB0Iik7CiAgfQoKICAvLy8gQSB0eXBlIGhhcyBiZWVuIGp1c3QgcGFyc2VkLCBhbmQgdGhlIHBhcnNlciBub3RpY2VkIHRoYXQgdGhlIG5leHQgdG9rZW4KICAvLy8gaGFzIGEgdHlwZSBzdWJzdGl0dXRpb24gY29tbWVudCAvKj1UKi4gU28sIHRoZSB0eXBlIHRoYXQgaGFzIGJlZW4ganVzdAogIC8vLyBwYXJzZWQgc2hvdWxkIGJlIGRpc2NhcmRlZCwgYW5kIGEgbmV3IHR5cGUgc2hvdWxkIGJlIHBhcnNlZCBpbnN0ZWFkLgogIHZvaWQgZGlzY2FyZFR5cGVSZXBsYWNlZFdpdGhDb21tZW50VHlwZUFzc2lnbigpIHt9CgogIC8vLyBBIHNpbmdsZSBjb21tZW50IHJlZmVyZW5jZSBoYXMgYmVlbiBmb3VuZAogIC8vLyB3aGVyZSBbcmVmZXJlbmNlU291cmNlXSBpcyB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBgW2AgYW5kIGBdYAogIC8vLyBhbmQgW3JlZmVyZW5jZU9mZnNldF0gaXMgdGhlIGNoYXJhY3RlciBvZmZzZXQgaW4gdGhlIHRva2VuIHN0cmVhbS4KICAvLy8KICAvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHBhcnNlciB3aGVuIHRoZSBwYXJzZXIncwogIC8vLyBgcGFyc2VDb21tZW50UmVmZXJlbmNlc2AgbWV0aG9kIGlzIGNhbGxlZC4gRm9yIGZ1cnRoZXIgcHJvY2Vzc2luZywKICAvLy8gYSBsaXN0ZW5lciBtYXkgc2NhbiB0aGUgW3JlZmVyZW5jZVNvdXJjZV0gYW5kIHRoZW4gcGFzcyB0aGUgcmVzdWx0aW5nCiAgLy8vIHRva2VuIHN0cmVhbSB0byB0aGUgcGFyc2VyJ3MgYHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZWAgbWV0aG9kLgogIHZvaWQgaGFuZGxlQ29tbWVudFJlZmVyZW5jZVRleHQoU3RyaW5nIHJlZmVyZW5jZVNvdXJjZSwgaW50IHJlZmVyZW5jZU9mZnNldCkgewogICAgbG9nRXZlbnQoIkNvbW1lbnRSZWZlcmVuY2VUZXh0Iik7CiAgfQoKICAvLy8gQSBzaW5nbGUgY29tbWVudCByZWZlcmVuY2UgaGFzIGJlZW4gcGFyc2VkLgogIC8vLyAqIFtuZXdLZXl3b3JkXSBtYXkgYmUgbnVsbC4KICAvLy8gKiBbcHJlZml4XSBhbmQgW3BlcmlvZF0gYXJlIGVpdGhlciBib3RoIHRva2VucyBvciBib3RoIGBudWxsYC4KICAvLy8gKiBbdG9rZW5dIGNhbiBiZSBhbiBpZGVudGlmaWVyIG9yIGFuIG9wZXJhdG9yLgogIC8vLwogIC8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBieSB0aGUgcGFyc2VyIHdoZW4gdGhlIHBhcnNlcidzCiAgLy8vIGBwYXJzZU9uZUNvbW1lbnRSZWZlcmVuY2VgIG1ldGhvZCBpcyBjYWxs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c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9wYXJzZXIuZGFydMADk7wvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIucGFyc2VyOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IE1lc3NhZ2UsIFRlbXBsYXRlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBhcyBmYXN0YTsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IEVycm9yVG9rZW4sIFRva2VuOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnCiAgICBzaG93CiAgICAgICAgQVNTSUdOTUVOVF9QUkVDRURFTkNFLAogICAgICAgIEJlZ2luVG9rZW4sCiAgICAgICAgQ0FTQ0FERV9QUkVDRURFTkNFLAogICAgICAgIEVRVUFMSVRZX1BSRUNFREVOQ0UsCiAgICAgICAgS2V5d29yZCwKICAgICAgICBQT1NURklYX1BSRUNFREVOQ0UsCiAgICAgICAgUkVMQVRJT05BTF9QUkVDRURFTkNFLAogICAgICAgIFNFTEVDVE9SX1BSRUNFREVOQ0UsCiAgICAgICAgU3ludGhldGljQmVnaW5Ub2tlbiwKICAgICAgICBTeW50aGV0aWNLZXl3b3JkVG9rZW4sCiAgICAgICAgU3ludGhldGljU3RyaW5nVG9rZW4sCiAgICAgICAgU3ludGhldGljVG9rZW4sCiAgICAgICAgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0JwogICAgc2hvdwogICAgICAgIEJBTkdfRVFfRVFfVE9LRU4sCiAgICAgICAgQ09NTUFfVE9LRU4sCiAgICAgICAgRE9VQkxFX1RPS0VOLAogICAgICAgIEVPRl9UT0tFTiwKICAgICAgICBFUV9FUV9FUV9UT0tFTiwKICAgICAgICBFUV9UT0tFTiwKICAgICAgICBGVU5DVElPTl9UT0tFTiwKICAgICAgICBIQVNIX1RPS0VOLAogICAgICAgIEhFWEFERUNJTUFMX1RPS0VOLAogICAgICAgIElERU5USUZJRVJfVE9LRU4sCiAgICAgICAgSU5UX1RPS0VOLAogICAgICAgIEtFWVdPUkRfVE9LRU4sCiAgICAgICAgTFRfVE9LRU4sCiAgICAgICAgT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOLAogICAgICAgIE9QRU5fUEFSRU5fVE9LRU4sCiAgICAgICAgT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTiwKICAgICAgICBTRU1JQ09MT05fVE9LRU4sCiAgICAgICAgU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUl9UT0tFTiwKICAgICAgICBTVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTiwKICAgICAgICBTVFJJTkdfVE9LRU47CgppbXBvcnQgJ2Fzc2VydC5kYXJ0JyBzaG93IEFzc2VydDsKCmltcG9ydCAnYXN5bmNfbW9kaWZpZXIuZGFydCcgc2hvdyBBc3luY01vZGlmaWVyOwoKaW1wb3J0ICdjbGFzc19raW5kLmRhcnQnIHNob3cgQ2xhc3NLaW5kOwoKaW1wb3J0ICdkaXJlY3RpdmVfY29udGV4dC5kYXJ0JzsKCmltcG9ydCAnZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9ybWFsUGFyYW1ldGVyS2luZCwKICAgICAgICBpc01hbmRhdG9yeUZvcm1hbFBhcmFtZXRlcktpbmQsCiAgICAgICAgaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICdmb3J3YXJkaW5nX2xpc3RlbmVyLmRhcnQnIHNob3cgRm9yd2FyZGluZ0xpc3RlbmVyOwoKaW1wb3J0ICdpZGVudGlmaWVyX2NvbnRleHQuZGFydCcKICAgIHNob3cgSWRlbnRpZmllckNvbnRleHQsIGxvb2tzTGlrZUV4cHJlc3Npb25TdGFydDsKCmltcG9ydCAnbGlzdGVuZXIuZGFydCcgc2hvdyBMaXN0ZW5lcjsKCmltcG9ydCAnbGl0ZXJhbF9lbnRyeV9pbmZvLmRhcnQnCiAgICBzaG93CiAgICAgICAgTGl0ZXJhbEVudHJ5SW5mbywKICAgICAgICBjb21wdXRlTGl0ZXJhbEVudHJ5LAogICAgICAgIGxvb2tzTGlrZUxpdGVyYWxFbnRyeSwKICAgICAgICBzaW1wbGVFbnRyeTsKCmltcG9ydCAnbG9vcF9zdGF0ZS5kYXJ0JyBzaG93IExvb3BTdGF0ZTsKCmltcG9ydCAnbWVtYmVyX2tpbmQuZGFydCcgc2hvdyBNZW1iZXJLaW5kOwoKaW1wb3J0ICdtb2RpZmllcl9jb250ZXh0LmRhcnQnIHNob3cgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQsIGlzTW9kaWZpZXI7CgppbXBvcnQgJ3JlY292ZXJ5X2xpc3RlbmVycy5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lciwKICAgICAgICBJbXBvcnRSZWNvdmVyeUxpc3RlbmVyLAogICAgICAgIE1peGluSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lcjsKCmltcG9ydCAndG9rZW5fc3RyZWFtX3Jld3JpdGVyLmRhcnQnIHNob3cgVG9rZW5TdHJlYW1SZXdyaXRlcjsKCmltcG9ydCAndHlwZV9pbmZvLmRhcnQnCiAgICBzaG93CiAgICAgICAgVHlwZUluZm8sCiAgICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvLAogICAgICAgIGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzLAogICAgICAgIGNvbXB1dGVUeXBlLAogICAgICAgIGNvbXB1dGVUeXBlUGFyYW1PckFyZywKICAgICAgICBpc1ZhbGlkVHlwZVJlZmVyZW5jZSwKICAgICAgICBub1R5cGUsCiAgICAgICAgbm9UeXBlUGFyYW1PckFyZzsKCmltcG9ydCAndXRpbC5kYXJ0JwogICAgc2hvdwogICAgICAgIGZpbmROb25aZXJvTGVuZ3RoVG9rZW4sCiAgICAgICAgZmluZFByZXZpb3VzTm9uWmVyb0xlbmd0aFRva2VuLAogICAgICAgIGlzTGV0dGVyLAogICAgICAgIGlzTGV0dGVyT3JEaWdpdCwKICAgICAgICBpc09uZU9mLAogICAgICAgIGlzT25lT2ZPckVvZiwKICAgICAgICBpc1doaXRlc3BhY2UsCiAgICAgICAgb3B0aW9uYWw7CgovLy8gQW4gZXZlbnQgZ2VuZXJhdGluZyBwYXJzZXIgb2YgRGFydCBwcm9ncmFtcy4gVGhpcyBwYXJzZXIgZXhwZWN0cyBhbGwgdG9rZW5zCi8vLyBpbiBhIGxpbmtlZCBsaXN0IChha2EgYSB0b2tlbiBzdHJlYW0pLgovLy8KLy8vIFRoZSBjbGFzcyBbU2Nhbm5lcl0gaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHRva2VuIHN0cmVhbS4gU2VlIHRoZSBmaWxlCi8vLyBbc2Nhbm5lci5kYXJ0XSguLi9zY2FubmVyLmRhcnQpLgovLy8KLy8vIFN1YmNsYXNzZXMgb2YgdGhlIGNsYXNzIFtMaXN0ZW5lcl0gYXJlIHVzZWQgdG8gbGlzdGVuIHRvIGV2ZW50cy4KLy8vCi8vLyBNb3N0IG1ldGhvZHMgb2YgdGhpcyBjbGFzcyBiZWxvbmcgaW4gb25lIG9mIGZvdXIgbWFqb3IgY2F0ZWdvcmllczogcGFyc2UKLy8vIG1ldGhvZHMsIHBlZWsgbWV0aG9kcywgZW5zdXJlIG1ldGhvZHMsIGFuZCBza2lwIG1ldGhvZHMuCi8vLwovLy8gUGFyc2UgbWV0aG9kcyBhbGwgaGF2ZSB0aGUgcHJlZml4IGBwYXJzZWAsIGdlbmVyYXRlIGV2ZW50cwovLy8gKGJ5IGNhbGxpbmcgbWV0aG9kcyBvbiBbbGlzdGVuZXJdKSwgYW5kIHJldHVybiB0aGUgbmV4dCB0b2tlbiB0byBwYXJzZS4KLy8vIFNvbWUgZXhjZXB0aW9ucyB0byB0aGlzIGxhc3QgcG9pbnQgYXJlIG1ldGhvZHMgc3VjaCBhcyBbcGFyc2VGdW5jdGlvbkJvZHldCi8vLyBhbmQgW3BhcnNlQ2xhc3NPck1peGluQm9keV0gd2hpY2ggcmV0dXJuIHRoZSBsYXN0IHRva2VuIHBhcnNlZAovLy8gcmF0aGVyIHRoYW4gdGhlIG5leHQgdG9rZW4gdG8gYmUgcGFyc2VkLgovLy8gUGFyc2UgbWV0aG9kcyBhcmUgZ2VuZXJhbGx5IG5hbWVkIGBwYXJzZUdyYW1tYXJQcm9kdWN0aW9uU3VmZml4YC4KLy8vIFRoZSBzdWZmaXggY2FuIGJlIG9uZSBvZiBgb3B0YCwgb3IgYHN0YXJgLgovLy8gYG9wdGAgbWVhbnMgemVybyBvciBvbmUgbWF0Y2hlcywgYHN0YXJgIG1lYW5zIHplcm8gb3IgbW9yZSBtYXRjaGVzLgovLy8gRm9yIGV4YW1wbGUsIFtwYXJzZU1ldGFkYXRhU3Rhcl0gY29ycmVzcG9uZHMgdG8gdGhpcyBncmFtbWFyIHNuaXBwZXQ6Ci8vLyBgbWV0YWRhdGEqYCwgYW5kIFtwYXJzZUFyZ3VtZW50c09wdF0gY29ycmVzcG9uZHMgdG86IGBhcmd1bWVudHM/YC4KLy8vCi8vLyBQZWVrIG1ldGhvZHMgYWxsIGhhdmUgdGhlIHByZWZpeCBgcGVla2AsIGRvIG5vdCBnZW5lcmF0ZSBldmVudHMKLy8vIChleGNlcHQgZm9yIGVycm9ycykgYW5kIG1heSByZXR1cm4gbnVsbC4KLy8vCi8vLyBFbnN1cmUgbWV0aG9kcyBhbGwgaGF2ZSB0aGUgcHJlZml4IGBlbnN1cmVgIGFuZCBtYXkgZ2VuZXJhdGUgZXZlbnRzLgovLy8gVGhleSByZXR1cm4gdGhlIGN1cnJlbnQgdG9rZW4sIG9yIGluc2VydCBhbmQgcmV0dXJuIGEgc3ludGhldGljIHRva2VuCi8vLyBpZiB0aGUgY3VycmVudCB0b2tlbiBkb2VzIG5vdCBtYXRjaC4gRm9yIGV4YW1wbGUsCi8vLyBbZW5zdXJlU2VtaWNvbG9uXSByZXR1cm5zIHRoZSBjdXJyZW50IHRva2VuIGlmIHRoZSBjdXJyZW50IHRva2VuIGlzIGEKLy8vIHNlbWljb2xvbiwgb3RoZXJ3aXNlIGluc2VydHMgYSBzeW50aGV0aWMgc2VtaWNvbG9uIGluIHRoZSB0b2tlbiBzdHJlYW0KLy8vIGJlZm9yZSB0aGUgY3VycmVudCB0b2tlbiBhbmQgdGhlbiByZXR1cm5zIHRoYXQgbmV3IHN5bnRoZXRpYyB0b2tlbi4KLy8vCi8vLyBTa2lwIG1ldGhvZHMgYXJlIGxpa2UgcGFyc2UgbWV0aG9kcywgYnV0IGFsbCBoYXZlIHRoZSBwcmVmaXggYHNraXBgCi8vLyBhbmQgc2tpcCBvdmVyIHNvbWUgcGFydHMgb2YgdGhlIGZpbGUgYmVpbmcgcGFyc2VkLgovLy8gVHlwaWNhbGx5LCBza2lwIG1ldGhvZHMgZ2VuZXJhdGUgYW4gZXZlbnQgZm9yIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgc2tpcHBlZCwKLy8vIGJ1dCBub3QgZm9yIGl0cyBzdWJzdHJ1Y3R1cmVzLgovLy8KLy8vICMjIEN1cnJlbnQgVG9rZW4KLy8vCi8vLyBUaGUgY3VycmVudCB0b2tlbiBpcyBhbHdheXMgdG8gYmUgZm91bmQgaW4gYSBmb3JtYWwgcGFyYW1ldGVyIG5hbWVkCi8vLyBgdG9rZW5gLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgdGhlIGZpcnN0IGFzIHRoaXMgaW5jcmVhc2VzIHRoZSBjaGFuY2UKLy8vIHRoYXQgYSBjb21waWxlciB3aWxsIHBsYWNlIGl0IGluIGEgcmVnaXN0ZXIuCi8vLwovLy8gIyMgSW1wbGVtZW50YXRpb24gTm90ZXMKLy8vCi8vLyBUaGUgcGFyc2VyIGFzc3VtZXMgdGhhdCBrZXl3b3JkcywgYnVpbHQtaW4gaWRlbnRpZmllcnMsIGFuZCBvdGhlciBzcGVjaWFsCi8vLyB3b3JkcyAocHNldWRvLWtleXdvcmRzKSBhcmUgYWxsIGNhbm9uaWNhbGl6ZWQuIFRvIGV4dGVuZCB0aGUgcGFyc2VyIHRvCi8vLyByZWNvZ25pemUgYSBuZXcgaWRlbnRpZmllciwgb25lIHNob3VsZCBtb2RpZnkKLy8vIFtrZXl3b3JkLmRhcnRdKC4uL3NjYW5uZXIva2V5d29yZC5kYXJ0KSBhbmQgZW5zdXJlIHRoZSBpZGVudGlmaWVyIGlzIGFkZGVkCi8vLyB0byB0aGUga2V5d29yZCB0YWJsZS4KLy8vCi8vLyBBcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMsIG9uZSBzaG91bGQgbm90IHVzZSBgPT1gIHRvIGNvbXBhcmUgc3RyaW5ncyBpbiB0aGUKLy8vIHBhcnNlci4gT25lIHNob3VsZCBmYXZvciB0aGUgbWV0aG9kcyBbb3B0aW9uYWxdIGFuZCBbZXhwZWN0XSB0byByZWNvZ25pemUKLy8vIGtleXdvcmRzIG9yIGlkZW50aWZpZXJzLiBJbiBzb21lIGNhc2VzLCBpdCdzIHBvc3NpYmxlIHRvIGNvbXBhcmUgYSB0b2tlbidzCi8vLyBgc3RyaW5nVmFsdWVgIHVzaW5nIFtpZGVudGljYWxdLCBidXQgbm9ybWFsbHkgW29wdGlvbmFsXSB3aWxsIHN1ZmZpY2UuCi8vLwovLy8gSGlzdG9yaWNhbGx5LCB3ZSBvdmVyLXVzZWQgaWRlbnRpY2FsLCBhbmQgd2hlbiBpZGVudGljYWwgaXMgdXNlZCBvbiBvYmplY3RzCi8vLyBvdGhlciB0aGFuIHN0cmluZ3MsIGl0IGNhbiBvZnRlbiBiZSByZXBsYWNlZCBieSBgPT1gLgovLy8KLy8vICMjIEZsZXhpYmlsaXR5LCBFeHRlbnNpYmlsaXR5LCBhbmQgU3BlY2lmaWNhdGlvbgovLy8KLy8vIFRoZSBwYXJzZXIgaXMgZGVzaWduZWQgdG8gYmUgZmxleGlibGUgYW5kIGV4dGVuc2libGUuIEl0cyBtZXRob2RzIGFyZQovLy8gZGVzaWduZWQgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzLCBzbyBpdCBjYW4gYmUgZXh0ZW5kZWQgdG8gaGFuZGxlCi8vLyB1bnNwZWNpZmllZCBsYW5ndWFnZSBleHRlbnNpb24gb3IgZXhwZXJpbWVudHMgd2hpbGUgZXZlcnl0aGluZyBpbiB0aGlzIGZpbGUKLy8vIGF0dGVtcHRzIHRvIGZvbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiAodW5sZXNzIHdoZW4gaXQgaW50ZXJmZXJlcyB3aXRoIGVycm9yCi8vLyByZWNvdmVyeSkuCi8vLwovLy8gV2UgYWNoaWV2ZSBmbGV4aWJpbGl0eSwgZXh0ZW5zaWJsZSwgYW5kIHNwZWNpZmljYXRpb24gY29tcGxpYW5jZSBieQovLy8gZm9sbG93aW5nIGEgZmV3IHJ1bGVzLW9mLXRodW1iOgovLy8KLy8vIDEuIEFsbCBtZXRob2RzIGluIHRoZSBwYXJzZXIgc2hvdWxkIGJlIHB1YmxpYy4KLy8vCi8vLyAyLiBUaGUgbWV0aG9kcyBmb2xsb3cgdGhlIHNwZWNpZmllZCBncmFtbWFyLCBhbmQgZG8gbm90IGltcGxlbWVudCBjdXN0b20KLy8vIGV4dGVuc2lvbnMsIGZvciBleGFtcGxlLCBgbmF0aXZlYC4KLy8vCi8vLyAzLiBUaGUgcGFyc2VyIGRvZXNuJ3QgcmV3cml0ZSB0aGUgdG9rZW4gc3RyZWFtICh3aGVuIGRlYWxpbmcgd2l0aCBgPj5gKS4KLy8vCi8vLyAjIyMgSW1wbGVtZW50aW5nIEV4dGVuc2lvbnMKLy8vCi8vLyBGb3IgdmFyaW91cyByZWFzb25zLCBzb21lIERhcnQgbGFuZ3VhZ2UgaW1wbGVtZW50YXRpb25zIGhhdmUgdXNlZAovLy8gY3VzdG9tL3Vuc3BlY2lmaWVkIGV4dGVuc2lvbnMgdG8gdGhlIERhcnQgZ3JhbW1hci4gRXhhbXBsZXMgb2YgdGhpcwovLy8gaW5jbHVkZXMgZGlldCBwYXJzaW5nLCBwYXRjaCBmaWxlcywgYG5hdGl2ZWAga2V5d29yZCwgYW5kIGdlbmVyaWMKLy8vIGNvbW1lbnRzLiBUaGlzIGNsYXNzIGlzbid0IHN1cHBvc2VkIHRvIGltcGxlbWVudCBhbnkgb2YgdGhlc2UKLy8vIGZlYXR1cmVzLiBJbnN0ZWFkIGl0IHByb3ZpZGVzIGhvb2tzIGZvciB0aG9zZSBleHRlbnNpb25zIHRvIGJlIGltcGxlbWVudGVkCi8vLyBpbiBzdWJjbGFzc2VzIG9yIGxpc3RlbmVycy4gTGV0J3MgZXhhbWluZSBob3cgZGlldCBwYXJzaW5nIGFuZCBgbmF0aXZlYAovLy8ga2V5d29yZCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IEZhc3RhLgovLy8KLy8vICMjIyMgTGVnYWN5IEltcGxlbWVudGF0aW9uIG9mIGBuYXRpdmVgIEtleXdvcmQKLy8vCi8vLyBUT0RPKGFoZSxkYW5ydWJlbCk6IFJlbW92ZSB0aGlzIHNlY3Rpb24uCi8vLwovLy8gQm90aCBkYXJ0MmpzIGFuZCB0aGUgRGFydCBWTSBoYXZlIHVzZWQgdGhlIGBuYXRpdmVgIGtleXdvcmQgdG8gbWFyayBtZXRob2RzCi8vLyB0aGF0IGNvdWxkbid0IGJlIGltcGxlbWVudGVkIGluIHRoZSBEYXJ0IGxhbmd1YWdlIGFuZCBuZWVkZWQgdG8gYmUKLy8vIGltcGxlbWVudGVkIGluIEphdmFTY3JpcHQgb3IgQysrLCByZXNwZWN0aXZlbHkuIEFuIGV4YW1wbGUgb2YgdGhlIHN5bnRheAovLy8gZXh0ZW5zaW9uIHVzZWQgYnkgdGhlIERhcnQgVk0gaXM6Ci8vLwovLy8gICAgIG5hdGl2ZUZ1bmN0aW9uKCkgbmF0aXZlICJOYXRpdmVGdW5jdGlvbiI7Ci8vLwovLy8gV2hlbiBhdHRlbXB0aW5nIHRvIHBhcnNlIHRoaXMgZnVuY3Rpb24sIHRoZSBwYXJzZXIgZXZlbnR1YWxseSBjYWxscwovLy8gW3BhcnNlRnVuY3Rpb25Cb2R5XS4gVGhpcyBtZXRob2Qgd2lsbCByZXBvcnQgYW4gdW5yZWNvdmVyYWJsZSBlcnJvciB0byB0aGUKLy8vIGxpc3RlbmVyIHdpdGggdGhlIGNvZGUgW2Zhc3RhLm1lc3NhZ2VFeHBlY3RlZEZ1bmN0aW9uQm9keV0uIFRoZSBsaXN0ZW5lciBjYW4KLy8vIHRoZW4gbG9vayBhdCB0aGUgZXJyb3IgY29kZSBhbmQgdGhlIHRva2VuIGFuZCB1c2UgdGhlIG1ldGhvZHMgaW4KLy8vIFtuYXRpdmVfc3VwcG9ydC5kYXJ0XShuYXRpdmVfc3VwcG9ydC5kYXJ0KSB0byBwYXJzZSB0aGUgbmF0aXZlIHN5bnRheC4KLy8vCi8vLyAjIyMjIEltcGxlbWVudGF0aW9uIG9mIERpZXQgUGFyc2luZwovLy8KLy8vIFdlIGNhbGwgaXQgX2RpZXRfIF9wYXJzaW5nXyB3aGVuIHRoZSBwYXJzZXIgc2tpcHMgcGFydHMgb2YgYSBmaWxlLiBCb3RoCi8vLyBkYXJ0MmpzIGFuZCB0aGUgRGFydCBWTSBoYXZlIGJlZW4gcmVseWluZyBvbiB0aGlzIGZyb20gZWFybHkgb24gYXMgaXQgYWxsb3dzCi8vLyB0aGVtIHRvIG1vcmUgcXVpY2tseSBjb21waWxlIHNtYWxsIHByb2dyYW1zIHRoYXQgdXNlIHNtYWxsIHBhcnRzIG9mIGJpZwovLy8gbGlicmFyaWVzLiBJdCdzIGFsc28gYmVjb21lIGFuIGludGVncmF0ZWQgcGFydCBvZiBob3cgRmFzdGEgYnVpbGRzIHVwCi8vLyBvdXRsaW5lcyBiZWZvcmUgc3RhcnRpbmcgdG8gcGFyc2UgbWV0aG9kIGJvZGllcy4KLy8vCi8vLyBXaGVuIGxvb2tpbmcgdGhyb3VnaCB0aGlzIHBhcnNlciwgeW91J2xsIGZpbmQgYSBudW1iZXIgb2YgdW51c2VkIG1ldGhvZHMKLy8vIHN0YXJ0aW5nIHdpdGggYHNraXBgLiBUaGVzZSBtZXRob2RzIGFyZSBvbmx5IHVzZWQgYnkgc3ViY2xhc3Nlcywgc3VjaCBhcwovLy8gW0NsYXNzTWVtYmVyUGFyc2VyXShjbGFzc19tZW1iZXJfcGFyc2VyLmRhcnQpIGFuZAovLy8gW1RvcExldmVsUGFyc2VyXSh0b3BfbGV2ZWxfcGFyc2VyLmRhcnQpLiBUaGVzZSBtZXRob2RzIHZpb2xhdGUgdGhlCi8vLyBwcmluY2lwbGUgYWJvdmUgYWJvdXQgZm9sbG93aW5nIHRoZSBzcGVjaWZpZWQgZ3JhbW1hciwgYW5kIG9yaWdpbmFsbHkgbGl2ZWQKLy8vIGluIHN1YmNsYXNzZXMuIEhvd2V2ZXIsIHdlIHJlYWxpemVkIHRoYXQgdGhlc2UgbWV0aG9kcyB3ZXJlIHNvIHdpZGVseSB1c2VkCi8vLyBhbmQgaGFyZCB0byBtYWludGFpbiBpbiBzdWJjbGFzc2VzLCB0aGF0IGl0IG1hZGUgc2Vuc2UgdG8gbW92ZSB0aGVtIGhlcmUuCi8vLwovLy8gIyMjIFNwZWNpZmljYXRpb24gYW5kIEVycm9yIFJlY292ZXJ5Ci8vLwovLy8gVG8gaW1wcm92ZSBlcnJvciByZWNvdmVyeSwgdGhlIHBhcnNlciB3aWxsIGluZm9ybSB0aGUgbGlzdGVuZXIgb2YKLy8vIHJlY292ZXJhYmxlIGVycm9ycyBhbmQgY29udGludWUgdG8gcGFyc2UuICBBbiBleGFtcGxlIG9mIGEgcmVjb3ZlcmFibGUKLy8vIGVycm9yIGlzOgovLy8KLy8vICAgICBFcnJvcjogQXN5bmNocm9ub3VzIGZvci1sb29wIGNhbiBvbmx5IGJlIHVzZWQgaW4gJ2FzeW5jJyBvciAnYXN5bmMqJy4uLgovLy8gICAgIG1haW4oKSB7IGF3YWl0IGZvciAodmFyIHggaW4gW10pIHt9IH0KLy8vICAgICAgICAgICAgICBeXl5eXgovLy8KLy8vICMjIyBMZWdhY3kgRXJyb3IgUmVjb3ZlcnkKLy8vCi8vLyBXaGF0J3MgZGVzY3JpYmVkIGJlbG93IHdpbGwgYmUgcGhhc2VkIG91dCBpbiBwcmVmZXJlbmNlIG9mIHRoZSBwYXJzZXIKLy8vIHJlcG9ydGluZyBhbmQgcmVjb3ZlcmluZyBmcm9tIHN5bnRheCBlcnJvcnMuIFRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIGlzCi8vLyB0aGF0IHdlIGhhdmUgbXVsdGlwbGUgbGlzdGVuZXJzIHRoYXQgdXNlIHRoZSBwYXJzZXIsIGFuZCB0aGlzIHdpbGwgZW5zdXJlCi8vLyBjb25zaXN0ZW5jeS4KLy8vCi8vLyBGb3IgdW5yZWNvdmVyYWJsZSBlcnJvcnMsIHRoZSBwYXJzZXIgd2lsbCBhc2sgdGhlIGxpc3RlbmVyIGZvciBoZWxwIHRvCi8vLyByZWNvdmVyIGZyb20gdGhlIGVycm9yLiBXZSBoYXZlbid0IG1hZGUgbXVjaCBwcm9ncmVzcyBvbiB0aGVzZSBraW5kcyBvZgovLy8gZXJyb3JzLCBzbyBpbiBtb3N0IGNhc2VzLCB0aGUgcGFyc2VyIGFib3J0cyBieSBza2lwcGluZyB0byB0aGUgZW5kIG9mIGZpbGUuCi8vLwovLy8gSGlzdG9yaWNhbGx5LCB0aGlzIHBhcnNlciBoYXMgYmVlbiByYXRoZXIgbGF4IGluIHdoYXQgaXQgYWxsb3dzLCBhbmQKLy8vIGRlZmVycmVkIHRoZSBlbmZvcmNlbWVudCBvZiBzb21lIHN5bnRhY3RpY2FsIHJ1bGVzIHRvIHN1YnNlcXVlbnQgcGhhc2VzLiBJdAovLy8gZG9lc24ndCBtYXR0ZXIgaG93IHdlIGdvdCB0aGVyZSwgb25seSB0aGF0IHdlJ3ZlIGlkZW50aWZpZWQgdGhhdCBpdCdzCi8vLyBlYXNpZXIgaWYgdGhlIHBhcnNlciByZXBvcnRzIGFzIG1hbnkgZXJyb3JzIGl0IGNhbiwgYnV0IGluZm9ybXMgdGhlCi8vLyBsaXN0ZW5lciBpZiB0aGUgZXJyb3IgaXMgcmVjb3ZlcmFibGUgb3Igbm90LgpjbGFzcyBQYXJzZXIgewogIExpc3RlbmVyIGxpc3RlbmVyOwoKICBVcmkgZ2V0IHVyaSA9PiBsaXN0ZW5lci51cmk7CgogIGJvb2wgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gdHJ1ZTsKCiAgLy8vIFJlcHJlc2VudHMgcGFyc2VyIHN0YXRlOiB3aGF0IGFzeW5jaHJvbm91cyBzeW50YXggaXMgYWxsb3dlZCBpbiB0aGUKICAvLy8gZnVuY3Rpb24gYmVpbmcgY3VycmVudGx5IHBhcnNlZC4gSW4gcmFyZSBzaXR1YXRpb25zLCB0aGlzIGNhbiBiZSBzZXQgYnkKICAvLy8gZXh0ZXJuYWwgY2xpZW50cywgZm9yIGV4YW1wbGUsIHRvIHBhcnNlIGFuIGV4cHJlc3Npb24gb3V0c2lkZSBhIGZ1bmN0aW9uLgogIEFzeW5jTW9kaWZpZXIgYXN5bmNTdGF0ZSA9IEFzeW5jTW9kaWZpZXIuU3luYzsKCiAgLy8gVE9ETyhkYW5ydWJlbCk6IFRoZSBbbG9vcFN0YXRlXSBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5IGluIHRoZQogIC8vIFtQYXJzZXJdIGR1cGxpY2F0ZXMgd29yayB0aGF0IHRoZSByZXNvbHZlciBuZWVkcyB0byBkbyB3aGVuIHJlc29sdmluZwogIC8vIGJyZWFrL2NvbnRpbnVlIHRhcmdldHMuIExvbmcgdGVybSwgdGhpcyBzdGF0ZSBhbmQgZnVuY3Rpb25hbGl0eSB3aWxsIGJlCiAgLy8gcmVtb3ZlZCBmcm9tIHRoZSBbUGFyc2VyXSBjbGFzcyBhbmQgdGhlIHJlc29sdmVyIHdpbGwgYmUgcmVzcG9uc2libGUKICAvLyBmb3IgZ2VuZXJhdGluZyBhbGwgYnJlYWsvY29udGludWUgZXJyb3IgbWVzc2FnZXMuCgogIC8vLyBSZXByZXNlbnRzIHBhcnNlciBzdGF0ZTogd2hldGhlciBwYXJzaW5nIG91dHNpZGUgYSBsb29wLAogIC8vLyBpbnNpZGUgYSBsb29wLCBvciBpbnNpZGUgYSBzd2l0Y2guIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlcgogIC8vLyBicmVhayBhbmQgY29udGludWUgc3RhdGVtZW50cyBhcmUgYWxsb3dlZC4KICBMb29wU3RhdGUgbG9vcFN0YXRlID0gTG9vcFN0YXRlLk91dHNpZGVMb29wOwoKICAvLy8gQSByZXdyaXRlciBmb3IgaW5zZXJ0aW5nIHN5bnRoZXRpYyB0b2tlbnMuCiAgLy8vIEFjY2VzcyB1c2luZyBbcmV3cml0ZXJdIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLgogIFRva2VuU3RyZWFtUmV3cml0ZXIgY2FjaGVkUmV3cml0ZXI7CgogIFRva2VuU3RyZWFtUmV3cml0ZXIgZ2V0IHJld3JpdGVyIHsKICAgIGNhY2hlZFJld3JpdGVyID8/PSBuZXcgVG9rZW5TdHJlYW1SZXdyaXRlcigpOwogICAgcmV0dXJuIGNhY2hlZFJld3JpdGVyOwogIH0KCiAgUGFyc2VyKHRoaXMubGlzdGVuZXIpOwoKICBib29sIGdldCBpbkdlbmVyYXRvciB7CiAgICByZXR1cm4gYXN5bmNTdGF0ZSA9PSBBc3luY01vZGlmaWVyLkFzeW5jU3RhciB8fAogICAgICAgIGFzeW5jU3RhdGUgPT0gQXN5bmNNb2RpZmllci5TeW5jU3RhcjsKICB9CgogIGJvb2wgZ2V0IGluQXN5bmMgewogICAgcmV0dXJuIGFzeW5jU3RhdGUgPT0gQXN5bmNNb2RpZmllci5Bc3luYyB8fAogICAgICAgIGFzeW5jU3RhdGUgPT0gQXN5bmNNb2RpZmllci5Bc3luY1N0YXI7CiAgfQoKICBib29sIGdldCBpblBsYWluU3luYyA9PiBhc3luY1N0YXRlID09IEFzeW5jTW9kaWZpZXIuU3luYzsKCiAgYm9vbCBnZXQgaXNCcmVha0FsbG93ZWQgPT4gbG9vcFN0YXRlICE9IExvb3BTdGF0ZS5PdXRzaWRlTG9vcDsKCiAgYm9vbCBnZXQgaXNDb250aW51ZUFsbG93ZWQgPT4gbG9vcFN0YXRlID09IExvb3BTdGF0ZS5JbnNpZGVMb29wOwoKICBib29sIGdldCBpc0NvbnRpbnVlV2l0aExhYmVsQWxsb3dlZCA9PiBsb29wU3RhdGUgIT0gTG9vcFN0YXRlLk91dHNpZGVMb29wOwoKICAvLy8gUGFyc2UgYSBjb21waWxhdGlvbiB1bml0LgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoZSBwYXJzZXIuIEFzIGEgcmVzdWx0LCB0aGlzCiAgLy8vIG1ldGhvZCB0YWtlcyB0aGUgbmV4dCB0b2tlbiB0byBiZSBjb25zdW1lZCByYXRoZXIgdGhhbiB0aGUgbGFzdCBjb25zdW1lZAogIC8vLyB0b2tlbiBhbmQgcmV0dXJucyB0aGUgdG9rZW4gYWZ0ZXIgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4gcmF0aGVyIHRoYW4gdGhlCiAgLy8vIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgLy8vCiAgLy8vIGBgYAogIC8vLyBsaWJyYXJ5RGVmaW5pdGlvbjoKICAvLy8gICBzY3JpcHRUYWc/CiAgLy8vICAgbGlicmFyeU5hbWU/CiAgLy8vICAgaW1wb3J0T3JFeHBvcnQqCiAgLy8vICAgcGFydERpcmVjdGl2ZSoKICAvLy8gICB0b3BMZXZlbERlZmluaXRpb24qCiAgLy8vIDsKICAvLy8KICAvLy8gcGFydERlY2xhcmF0aW9uOgogIC8vLyAgIHBhcnRIZWFkZXIgdG9wTGV2ZWxEZWZpbml0aW9uKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlVW5pdChUb2tlbiB0b2tlbikgewogICAgLy8gU2tpcCBvdmVyIGVycm9yIHRva2VucyBhbmQgcmVwb3J0IHRoZW0gYXQgdGhlIGVuZAogICAgLy8gc28gdGhhdCB0aGUgcGFyc2VyIGhhcyB0aGUgY2hhbmNlIHRvIGFkanVzdCB0aGUgZXJyb3IgbG9jYXRpb24uCiAgICBUb2tlbiBlcnJvclRva2VuID0gdG9rZW47CiAgICB0b2tlbiA9IHNraXBFcnJvclRva2VucyhlcnJvclRva2VuKTsKCiAgICBsaXN0ZW5lci5iZWdpbkNvbXBpbGF0aW9uVW5pdCh0b2tlbik7CiAgICBpbnQgY291bnQgPSAwOwogICAgRGlyZWN0aXZlQ29udGV4dCBkaXJlY3RpdmVTdGF0ZSA9IG5ldyBEaXJlY3RpdmVDb250ZXh0KCk7CiAgICB0b2tlbiA9IHN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pOwogICAgaWYgKGlkZW50aWNhbCh0b2tlbi5uZXh0LnR5cGUsIFRva2VuVHlwZS5TQ1JJUFRfVEFHKSkgewogICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tTY3JpcHRUYWcodGhpcywgdG9rZW4ubmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VTY3JpcHQodG9rZW4pOwogICAgfQogICAgd2hpbGUgKCF0b2tlbi5uZXh0LmlzRW9mKSB7CiAgICAgIGZpbmFsIFRva2VuIHN0YXJ0ID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBwYXJzZVRvcExldmVsRGVjbGFyYXRpb25JbXBsKHRva2VuLCBkaXJlY3RpdmVTdGF0ZSk7CiAgICAgIGxpc3RlbmVyLmVuZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4ubmV4dCk7CiAgICAgIGNvdW50Kys7CiAgICAgIGlmIChzdGFydCA9PSB0b2tlbi5uZXh0KSB7CiAgICAgICAgLy8gUmVjb3Zlcnk6CiAgICAgICAgLy8gSWYgcHJvZ3Jlc3MgaGFzIG5vdCBiZWVuIG1hZGUgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgdG9rZW4gc3RyZWFtLAogICAgICAgIC8vIHRoZW4gcmVwb3J0IGFuIGVycm9yIGFuZCBza2lwIHRoZSBjdXJyZW50IHRva2VuLgogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICBsaXN0ZW5lci5iZWdpbk1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICAgICAgbGlzdGVuZXIuZW5kTWV0YWRhdGFTdGFyKDApOwogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkRGVjbGFyYXRpb24pOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKTsKICAgICAgICBsaXN0ZW5lci5lbmRUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuLm5leHQpOwogICAgICAgIGNvdW50Kys7CiAgICAgIH0KICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIHJlcG9ydEFsbEVycm9yVG9rZW5zKGVycm9yVG9rZW4pOwogICAgbGlzdGVuZXIuZW5kQ29tcGlsYXRpb25Vbml0KGNvdW50LCB0b2tlbik7CiAgICAvLyBDbGVhciBmaWVsZHMgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrLgogICAgY2FjaGVkUmV3cml0ZXIgPSBudWxsOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIGV4aXN0cyBmb3IgYW5hbHl6ZXIgY29tcGF0aWJpbGl0eSBvbmx5CiAgLy8vIGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSBhbmFseXplci9mYXN0YSBpbnRlZ3JhdGlvbiBpcyBjb21wbGV0ZS4KICAvLy8KICAvLy8gU2ltaWxhciB0byBbcGFyc2VVbml0XSwgdGhpcyBtZXRob2QgcGFyc2VzIGEgY29tcGlsYXRpb24gdW5pdCwKICAvLy8gYnV0IHN0b3BzIHdoZW4gaXQgcmVhY2hlcyB0aGUgZmlyc3QgZGVjbGFyYXRpb24gb3IgRU9GLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoZSBwYXJzZXIuIEFzIGEgcmVzdWx0LCB0aGlzCiAgLy8vIG1ldGhvZCB0YWtlcyB0aGUgbmV4dCB0b2tlbiB0byBiZSBjb25zdW1lZCByYXRoZXIgdGhhbiB0aGUgbGFzdCBjb25zdW1lZAogIC8vLyB0b2tlbiBhbmQgcmV0dXJucyB0aGUgdG9rZW4gYWZ0ZXIgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4gcmF0aGVyIHRoYW4gdGhlCiAgLy8vIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgVG9rZW4gcGFyc2VEaXJlY3RpdmVzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lci5iZWdpbkNvbXBpbGF0aW9uVW5pdCh0b2tlbik7CiAgICBpbnQgY291bnQgPSAwOwogICAgRGlyZWN0aXZlQ29udGV4dCBkaXJlY3RpdmVTdGF0ZSA9IG5ldyBEaXJlY3RpdmVDb250ZXh0KCk7CiAgICB0b2tlbiA9IHN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pOwogICAgd2hpbGUgKCF0b2tlbi5uZXh0LmlzRW9mKSB7CiAgICAgIGZpbmFsIFRva2VuIHN0YXJ0ID0gdG9rZW4ubmV4dDsKICAgICAgZmluYWwgU3RyaW5nIG5leHRWYWx1ZSA9IHN0YXJ0Lm5leHQuc3RyaW5nVmFsdWU7CgogICAgICAvLyBJZiBhIGJ1aWx0LWluIGtleXdvcmQgaXMgYmVpbmcgdXNlZCBhcyBmdW5jdGlvbiBuYW1lLCB0aGVuIHN0b3AuCiAgICAgIGlmIChpZGVudGljYWwobmV4dFZhbHVlLCAnLicpIHx8CiAgICAgICAgICBpZGVudGljYWwobmV4dFZhbHVlLCAnPCcpIHx8CiAgICAgICAgICBpZGVudGljYWwobmV4dFZhbHVlLCAnKCcpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGlmIChpZGVudGljYWwodG9rZW4ubmV4dC50eXBlLCBUb2tlblR5cGUuU0NSSVBUX1RBRykpIHsKICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tTY3JpcHRUYWcodGhpcywgdG9rZW4ubmV4dCk7CiAgICAgICAgdG9rZW4gPSBwYXJzZVNjcmlwdCh0b2tlbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICAgICAgVG9rZW4ga2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICAgICAgZmluYWwgU3RyaW5nIHZhbHVlID0ga2V5d29yZC5zdHJpbmdWYWx1ZTsKICAgICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnaW1wb3J0JykpIHsKICAgICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0ltcG9ydCh0aGlzLCBrZXl3b3JkKTsKICAgICAgICAgIHRva2VuID0gcGFyc2VJbXBvcnQoa2V5d29yZCk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdleHBvcnQnKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRXhwb3J0KHRoaXMsIGtleXdvcmQpOwogICAgICAgICAgdG9rZW4gPSBwYXJzZUV4cG9ydChrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2xpYnJhcnknKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrTGlicmFyeSh0aGlzLCBrZXl3b3JkKTsKICAgICAgICAgIHRva2VuID0gcGFyc2VMaWJyYXJ5TmFtZShrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3BhcnQnKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZVBhcnRPclBhcnRPZihrZXl3b3JkLCBkaXJlY3RpdmVTdGF0ZSk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICc7JykpIHsKICAgICAgICAgIHRva2VuID0gc3RhcnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZURpcmVjdGl2ZXNPbmx5KCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGlzdGVuZXIuZW5kVG9wTGV2ZWxEZWNsYXJhdGlvbih0b2tlbi5uZXh0KTsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmVuZENvbXBpbGF0aW9uVW5pdChjb3VudCwgdG9rZW4pOwogICAgLy8gQ2xlYXIgZmllbGRzIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVhay4KICAgIGNhY2hlZFJld3JpdGVyID0gbnVsbDsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSBhIHRvcC1sZXZlbCBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgb25seSBpbnZva2VkIGZyb20gb3V0c2lkZSB0aGUgcGFyc2VyLiBBcyBhIHJlc3VsdCwgdGhpcwogIC8vLyBtZXRob2QgdGFrZXMgdGhlIG5leHQgdG9rZW4gdG8gYmUgY29uc3VtZWQgcmF0aGVyIHRoYW4gdGhlIGxhc3QgY29uc3VtZWQKICAvLy8gdG9rZW4gYW5kIHJldHVybnMgdGhlIHRva2VuIGFmdGVyIHRoZSBsYXN0IGNvbnN1bWVkIHRva2VuIHJhdGhlciB0aGFuIHRoZQogIC8vLyBsYXN0IGNvbnN1bWVkIHRva2VuLgogIFRva2VuIHBhcnNlVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPQogICAgICAgIHBhcnNlVG9wTGV2ZWxEZWNsYXJhdGlvbkltcGwoc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbiksIG51bGwpLm5leHQ7CiAgICBsaXN0ZW5lci5lbmRUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gdG9wTGV2ZWxEZWZpbml0aW9uOgogIC8vLyAgIGNsYXNzRGVmaW5pdGlvbiB8CiAgLy8vICAgZW51bVR5cGUgfAogIC8vLyAgIHR5cGVBbGlhcyB8CiAgLy8vICAgJ2V4dGVybmFsJz8gZnVuY3Rpb25TaWduYXR1cmUgJzsnIHwKICAvLy8gICAnZXh0ZXJuYWwnPyBnZXR0ZXJTaWduYXR1cmUgJzsnIHwKICAvLy8gICAnZXh0ZXJuYWwnJz8gc2V0dGVyU2lnbmF0dXJlICc7JyB8CiAgLy8vICAgZnVuY3Rpb25TaWduYXR1cmUgZnVuY3Rpb25Cb2R5IHwKICAvLy8gICByZXR1cm5UeXBlPyAnZ2V0JyBpZGVudGlmaWVyIGZ1bmN0aW9uQm9keSB8CiAgLy8vICAgcmV0dXJuVHlwZT8gJ3NldCcgaWRlbnRpZmllciBmb3JtYWxQYXJhbWV0ZXJMaXN0IGZ1bmN0aW9uQm9keSB8CiAgLy8vICAgKCdmaW5hbCcgfCAnY29uc3QnKSB0eXBlPyBzdGF0aWNGaW5hbERlY2xhcmF0aW9uTGlzdCAnOycgfAogIC8vLyAgIHZhcmlhYmxlRGVjbGFyYXRpb24gJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VUb3BMZXZlbERlY2xhcmF0aW9uSW1wbCgKICAgICAgVG9rZW4gdG9rZW4sIERpcmVjdGl2ZUNvbnRleHQgZGlyZWN0aXZlU3RhdGUpIHsKICAgIHRva2VuID0gcGFyc2VNZXRhZGF0YVN0YXIodG9rZW4pOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAobmV4dC5pc1RvcExldmVsS2V5d29yZCkgewogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbEtleXdvcmREZWNsYXJhdGlvbih0b2tlbiwgbmV4dCwgZGlyZWN0aXZlU3RhdGUpOwogICAgfQogICAgVG9rZW4gc3RhcnQgPSB0b2tlbjsKICAgIC8vIFNraXAgbW9kaWZpZXJzIHRvIGZpbmQgYSB0b3AgbGV2ZWwga2V5d29yZCBvciBpZGVudGlmaWVyCiAgICBpZiAobmV4dC5pc01vZGlmaWVyKSB7CiAgICAgIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkgfHwKICAgICAgICAgIG9wdGlvbmFsKCdsYXRlJywgbmV4dCkgfHwKICAgICAgICAgICgob3B0aW9uYWwoJ2NvbnN0JywgbmV4dCkgfHwgb3B0aW9uYWwoJ2ZpbmFsJywgbmV4dCkpICYmCiAgICAgICAgICAgICAgLy8gSWdub3JlIGBjb25zdCBjbGFzc2AgYW5kIGBmaW5hbCBjbGFzc2Agc28gdGhhdCBpdCBpcyByZXBvcnRlZAogICAgICAgICAgICAgIC8vIGJlbG93IGFzIGFuIGludmFsaWQgbW9kaWZpZXIgb24gYSBjbGFzcy4KICAgICAgICAgICAgICAhb3B0aW9uYWwoJ2NsYXNzJywgbmV4dC5uZXh0KSkpIHsKICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICAgIHJldHVybiBwYXJzZVRvcExldmVsTWVtYmVySW1wbCh0b2tlbik7CiAgICAgIH0KICAgICAgd2hpbGUgKHRva2VuLm5leHQuaXNNb2RpZmllcikgewogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfQogICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAobmV4dC5pc1RvcExldmVsS2V5d29yZCkgewogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbEtleXdvcmREZWNsYXJhdGlvbihzdGFydCwgbmV4dCwgZGlyZWN0aXZlU3RhdGUpOwogICAgfSBlbHNlIGlmIChuZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaW1wcm92ZSBwYXJzZVRvcExldmVsTWVtYmVyCiAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgcGFyc2UgbW9kaWZpZXJzIHR3aWNlLgogICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1lbWJlckltcGwoc3RhcnQpOwogICAgfSBlbHNlIGlmIChzdGFydC5uZXh0ICE9IG5leHQpIHsKICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgLy8gSGFuZGxlIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYSBtb2RpZmllciBpcyBiZWluZyB1c2VkIGFzIGFuIGlkZW50aWZpZXIKICAgICAgcmV0dXJuIHBhcnNlVG9wTGV2ZWxNZW1iZXJJbXBsKHN0YXJ0KTsKICAgIH0KICAgIC8vIFJlY292ZXJ5CiAgICBpZiAobmV4dC5pc09wZXJhdG9yICYmIG9wdGlvbmFsKCcoJywgbmV4dC5uZXh0KSkgewogICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgYSB0b3AgbGV2ZWwgb3BlcmF0b3IgZGVjbGFyYXRpb24sIHdoaWNoIGlzIGludmFsaWQuCiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZVRvcExldmVsT3BlcmF0b3IpOwogICAgICAvLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllcgogICAgICAvLyBhbmQgY29udGludWUgcGFyc2luZyBhcyBhIHRvcCBsZXZlbCBmdW5jdGlvbi4KICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICAgIG5leHQsICcjc3ludGhldGljX2Z1bmN0aW9uXyR7bmV4dC5jaGFyT2Zmc2V0fScpOwogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1lbWJlckltcGwobmV4dCk7CiAgICB9CiAgICAvLyBJZ25vcmUgYW55IHByZWNlZGluZyBtb2RpZmllcnMgYW5kIGp1c3QgcmVwb3J0IHRoZSB1bmV4cGVjdGVkIHRva2VuCiAgICBsaXN0ZW5lci5iZWdpblRvcExldmVsTWVtYmVyKG5leHQpOwogICAgcmV0dXJuIHBhcnNlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pOwogIH0KCiAgLy8vIFBhcnNlIHRoZSBtb2RpZmllcnMgYmVmb3JlIHRoZSBgY2xhc3NgIGtleXdvcmQuCiAgLy8vIFJldHVybiB0aGUgZmlyc3QgYGFic3RyYWN0YCBtb2RpZmllciBvciBgbnVsbGAgaWYgbm90IGZvdW5kLgogIFRva2VuIHBhcnNlQ2xhc3NEZWNsYXJhdGlvbk1vZGlmaWVycyhUb2tlbiBzdGFydCwgVG9rZW4ga2V5d29yZCkgewogICAgVG9rZW4gbW9kaWZpZXIgPSBzdGFydC5uZXh0OwogICAgd2hpbGUgKG1vZGlmaWVyICE9IGtleXdvcmQpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdhYnN0cmFjdCcsIG1vZGlmaWVyKSkgewogICAgICAgIHBhcnNlVG9wTGV2ZWxLZXl3b3JkTW9kaWZpZXJzKG1vZGlmaWVyLCBrZXl3b3JkKTsKICAgICAgICByZXR1cm4gbW9kaWZpZXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICByZXBvcnRUb3BMZXZlbE1vZGlmaWVyRXJyb3IobW9kaWZpZXIsIGtleXdvcmQpOwogICAgICB9CiAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIubmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJlcG9ydCBlcnJvcnMgb24gYW55IG1vZGlmaWVycyBiZWZvcmUgdGhlIHNwZWNpZmllZCBrZXl3b3JkLgogIHZvaWQgcGFyc2VUb3BMZXZlbEtleXdvcmRNb2RpZmllcnMoVG9rZW4gc3RhcnQsIFRva2VuIGtleXdvcmQpIHsKICAgIFRva2VuIG1vZGlmaWVyID0gc3RhcnQubmV4dDsKICAgIHdoaWxlIChtb2RpZmllciAhPSBrZXl3b3JkKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIHJlcG9ydFRvcExldmVsTW9kaWZpZXJFcnJvcihtb2RpZmllciwga2V5d29yZCk7CiAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIubmV4dDsKICAgIH0KICB9CgogIC8vIFJlcG9ydCBhbiBlcnJvciBmb3IgdGhlIGdpdmVuIG1vZGlmaWVyIHByZWNlZGluZyBhIHRvcCBsZXZlbCBrZXl3b3JkCiAgLy8gc3VjaCBhcyBgaW1wb3J0YCBvciBgY2xhc3NgLgogIHZvaWQgcmVwb3J0VG9wTGV2ZWxNb2RpZmllckVycm9yKFRva2VuIG1vZGlmaWVyLCBUb2tlbiBhZnRlck1vZGlmaWVycykgewogICAgaWYgKG9wdGlvbmFsKCdjb25zdCcsIG1vZGlmaWVyKSAmJiBvcHRpb25hbCgnY2xhc3MnLCBhZnRlck1vZGlmaWVycykpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihtb2RpZmllciwgZmFzdGEubWVzc2FnZUNvbnN0Q2xhc3MpOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnZXh0ZXJuYWwnLCBtb2RpZmllcikpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdjbGFzcycsIGFmdGVyTW9kaWZpZXJzKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobW9kaWZpZXIsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbENsYXNzKTsKICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnZW51bScsIGFmdGVyTW9kaWZpZXJzKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobW9kaWZpZXIsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbEVudW0pOwogICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd0eXBlZGVmJywgYWZ0ZXJNb2RpZmllcnMpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihtb2RpZmllciwgZmFzdGEubWVzc2FnZUV4dGVybmFsVHlwZWRlZik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgbW9kaWZpZXIsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG1vZGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICB9CiAgfQoKICAvLy8gUGFyc2UgYW55IHRvcC1sZXZlbCBkZWNsYXJhdGlvbiB0aGF0IGJlZ2lucyB3aXRoIGEga2V5d29yZC4KICAvLy8gW3N0YXJ0XSBpcyB0aGUgdG9rZW4gYmVmb3JlIGFueSBtb2RpZmllcnMgcHJlY2VkaW5nIFtrZXl3b3JkXS4KICBUb2tlbiBwYXJzZVRvcExldmVsS2V5d29yZERlY2xhcmF0aW9uKAogICAgICBUb2tlbiBzdGFydCwgVG9rZW4ga2V5d29yZCwgRGlyZWN0aXZlQ29udGV4dCBkaXJlY3RpdmVTdGF0ZSkgewogICAgYXNzZXJ0KGtleXdvcmQuaXNUb3BMZXZlbEtleXdvcmQpOwogICAgZmluYWwgU3RyaW5nIHZhbHVlID0ga2V5d29yZC5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwodmFsdWUsICdjbGFzcycpKSB7CiAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgIFRva2VuIGFic3RyYWN0VG9rZW4gPSBwYXJzZUNsYXNzRGVjbGFyYXRpb25Nb2RpZmllcnMoc3RhcnQsIGtleXdvcmQpOwogICAgICByZXR1cm4gcGFyc2VDbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uKGFic3RyYWN0VG9rZW4sIGtleXdvcmQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdlbnVtJykpIHsKICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgcGFyc2VUb3BMZXZlbEtleXdvcmRNb2RpZmllcnMoc3RhcnQsIGtleXdvcmQpOwogICAgICByZXR1cm4gcGFyc2VFbnVtKGtleXdvcmQpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhlIHJlbWFpbmluZyB0b3AgbGV2ZWwga2V5d29yZHMgYXJlIGJ1aWx0LWluIGtleXdvcmRzCiAgICAgIC8vIGFuZCBjYW4gYmUgdXNlZCBpbiBhIHRvcCBsZXZlbCBkZWNsYXJhdGlvbgogICAgICAvLyBhcyBhbiBpZGVudGlmaWVyIHN1Y2ggYXMgImFic3RyYWN0PFQ+KCkgPT4gMDsiCiAgICAgIC8vIG9yIGFzIGEgcHJlZml4IHN1Y2ggYXMgImFic3RyYWN0LkEgYigpID0+IDA7Ii4KICAgICAgU3RyaW5nIG5leHRWYWx1ZSA9IGtleXdvcmQubmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0VmFsdWUsICcoJykgfHwgaWRlbnRpY2FsKG5leHRWYWx1ZSwgJy4nKSkgewogICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgICAgcmV0dXJuIHBhcnNlVG9wTGV2ZWxNZW1iZXJJbXBsKHN0YXJ0KTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dFZhbHVlLCAnPCcpKSB7CiAgICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2V4dGVuc2lvbicpKSB7CiAgICAgICAgICAvLyBUaGUgbmFtZSBpbiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24gaXMgb3B0aW9uYWw6CiAgICAgICAgICAvLyBgZXh0ZW5zaW9uPFQ+IG9uIC4uLmAKICAgICAgICAgIFRva2VuIGVuZEdyb3VwID0ga2V5d29yZC5uZXh0LmVuZEdyb3VwOwogICAgICAgICAgaWYgKGVuZEdyb3VwICE9IG51bGwgJiYgb3B0aW9uYWwoJ29uJywgZW5kR3JvdXAubmV4dCkpIHsKICAgICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXh0ZW5zaW9uKGtleXdvcmQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICAgIHJldHVybiBwYXJzZVRvcExldmVsTWVtYmVySW1wbChzdGFydCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFyc2VUb3BMZXZlbEtleXdvcmRNb2RpZmllcnMoc3RhcnQsIGtleXdvcmQpOwogICAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdpbXBvcnQnKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrSW1wb3J0KHRoaXMsIGtleXdvcmQpOwogICAgICAgICAgcmV0dXJuIHBhcnNlSW1wb3J0KGtleXdvcmQpOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZXhwb3J0JykpIHsKICAgICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0V4cG9ydCh0aGlzLCBrZXl3b3JkKTsKICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydChrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3R5cGVkZWYnKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVkZWYoa2V5d29yZCk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdtaXhpbicpKSB7CiAgICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICAgICAgcmV0dXJuIHBhcnNlTWl4aW4oa2V5d29yZCk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdleHRlbnNpb24nKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgICAgIHJldHVybiBwYXJzZUV4dGVuc2lvbihrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3BhcnQnKSkgewogICAgICAgICAgcmV0dXJuIHBhcnNlUGFydE9yUGFydE9mKGtleXdvcmQsIGRpcmVjdGl2ZVN0YXRlKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2xpYnJhcnknKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrTGlicmFyeSh0aGlzLCBrZXl3b3JkKTsKICAgICAgICAgIHJldHVybiBwYXJzZUxpYnJhcnlOYW1lKGtleXdvcmQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHRocm93ICJJbnRlcm5hbCBlcnJvcjogVW5oYW5kbGVkIHRvcCBsZXZlbCBrZXl3b3JkICckdmFsdWUnLiI7CiAgfQoKICAvLy8gYGBgCiAgLy8vIGxpYnJhcnlEaXJlY3RpdmU6CiAgLy8vICAgJ2xpYnJhcnknIHF1YWxpZmllZCAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUxpYnJhcnlOYW1lKFRva2VuIGxpYnJhcnlLZXl3b3JkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2xpYnJhcnknLCBsaWJyYXJ5S2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5MaWJyYXJ5TmFtZShsaWJyYXJ5S2V5d29yZCk7CiAgICBUb2tlbiB0b2tlbiA9IHBhcnNlUXVhbGlmaWVkKGxpYnJhcnlLZXl3b3JkLCBJZGVudGlmaWVyQ29udGV4dC5saWJyYXJ5TmFtZSwKICAgICAgICBJZGVudGlmaWVyQ29udGV4dC5saWJyYXJ5TmFtZUNvbnRpbnVhdGlvbik7CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRMaWJyYXJ5TmFtZShsaWJyYXJ5S2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBpbXBvcnRQcmVmaXg6CiAgLy8vICAgJ2RlZmVycmVkJz8gJ2FzJyBpZGVudGlmaWVyCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VJbXBvcnRQcmVmaXhPcHQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCdkZWZlcnJlZCcsIG5leHQpICYmIG9wdGlvbmFsKCdhcycsIG5leHQubmV4dCkpIHsKICAgICAgVG9rZW4gZGVmZXJyZWRUb2tlbiA9IG5leHQ7CiAgICAgIFRva2VuIGFzS2V5d29yZCA9IG5leHQubmV4dDsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgICAgYXNLZXl3b3JkLCBJZGVudGlmaWVyQ29udGV4dC5pbXBvcnRQcmVmaXhEZWNsYXJhdGlvbik7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUltcG9ydFByZWZpeChkZWZlcnJlZFRva2VuLCBhc0tleXdvcmQpOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnYXMnLCBuZXh0KSkgewogICAgICBUb2tlbiBhc0tleXdvcmQgPSBuZXh0OwogICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIobmV4dCwgSWRlbnRpZmllckNvbnRleHQuaW1wb3J0UHJlZml4RGVjbGFyYXRpb24pOwogICAgICBsaXN0ZW5lci5oYW5kbGVJbXBvcnRQcmVmaXgobnVsbCwgYXNLZXl3b3JkKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUltcG9ydFByZWZpeChudWxsLCBudWxsKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gaW1wb3J0RGlyZWN0aXZlOgogIC8vLyAgICdpbXBvcnQnIHVyaSAoJ2lmJyAnKCcgdGVzdCAnKScgdXJpKSogaW1wb3J0UHJlZml4PyBjb21iaW5hdG9yKiAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2ltcG9ydCcsIGltcG9ydEtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luSW1wb3J0KGltcG9ydEtleXdvcmQpOwogICAgVG9rZW4gdG9rZW4gPSBlbnN1cmVMaXRlcmFsU3RyaW5nKGltcG9ydEtleXdvcmQpOwogICAgVG9rZW4gdXJpID0gdG9rZW47CiAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxVcmlTdGFyKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VJbXBvcnRQcmVmaXhPcHQodG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUNvbWJpbmF0b3JTdGFyKHRva2VuKS5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCc7JywgdG9rZW4pKSB7CiAgICAgIGxpc3RlbmVyLmVuZEltcG9ydChpbXBvcnRLZXl3b3JkLCB0b2tlbik7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIGxpc3RlbmVyLmVuZEltcG9ydChpbXBvcnRLZXl3b3JkLCBudWxsKTsKICAgICAgcmV0dXJuIHBhcnNlSW1wb3J0UmVjb3ZlcnkodXJpKTsKICAgIH0KICB9CgogIC8vLyBSZWNvdmVyIGdpdmVuIG91dC1vZi1vcmRlciBjbGF1c2VzIGluIGFuIGltcG9ydCBkaXJlY3RpdmUgd2hlcmUgW3Rva2VuXSBpcwogIC8vLyB0aGUgaW1wb3J0IGtleXdvcmQuCiAgVG9rZW4gcGFyc2VJbXBvcnRSZWNvdmVyeShUb2tlbiB0b2tlbikgewogICAgZmluYWwgcHJpbWFyeUxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICBmaW5hbCByZWNvdmVyeUxpc3RlbmVyID0gbmV3IEltcG9ydFJlY292ZXJ5TGlzdGVuZXIoKTsKCiAgICAvLyBSZXBhcnNlIHRvIGRldGVybWluZSB3aGljaCBjbGF1c2VzIGhhdmUgYWxyZWFkeSBiZWVuIHBhcnNlZAogICAgLy8gYnV0IGludGVyY2VwdCB0aGUgZXZlbnRzIHNvIHRoZXkgYXJlIG5vdCBzZW50IHRvIHRoZSBwcmltYXJ5IGxpc3RlbmVyCiAgICBsaXN0ZW5lciA9IHJlY292ZXJ5TGlzdGVuZXI7CiAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxVcmlTdGFyKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VJbXBvcnRQcmVmaXhPcHQodG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUNvbWJpbmF0b3JTdGFyKHRva2VuKTsKCiAgICBUb2tlbiBmaXJzdERlZmVycmVkS2V5d29yZCA9IHJlY292ZXJ5TGlzdGVuZXIuZGVmZXJyZWRLZXl3b3JkOwogICAgYm9vbCBoYXNQcmVmaXggPSByZWNvdmVyeUxpc3RlbmVyLmFzS2V5d29yZCAhPSBudWxsOwogICAgYm9vbCBoYXNDb21iaW5hdG9yID0gcmVjb3ZlcnlMaXN0ZW5lci5oYXNDb21iaW5hdG9yOwoKICAgIC8vIFVwZGF0ZSB0aGUgcmVjb3ZlcnkgbGlzdGVuZXIgdG8gZm9yd2FyZCBzdWJzZXF1ZW50IGV2ZW50cwogICAgLy8gdG8gdGhlIHByaW1hcnkgbGlzdGVuZXIKICAgIHJlY292ZXJ5TGlzdGVuZXIubGlzdGVuZXIgPSBwcmltYXJ5TGlzdGVuZXI7CgogICAgLy8gUGFyc2UgYWRkaXRpb25hbCBvdXQtb2Ytb3JkZXIgY2xhdXNlcy4KICAgIFRva2VuIHNlbWljb2xvbjsKICAgIGRvIHsKICAgICAgVG9rZW4gc3RhcnQgPSB0b2tlbi5uZXh0OwoKICAgICAgLy8gQ2hlY2sgZm9yIGV4dHJhbmVvdXMgdG9rZW4gaW4gdGhlIG1pZGRsZSBvZiBhbiBpbXBvcnQgc3RhdGVtZW50LgogICAgICB0b2tlbiA9IHNraXBVbmV4cGVjdGVkVG9rZW5PcHQoCiAgICAgICAgICB0b2tlbiwgY29uc3QgPFN0cmluZz5bJ2lmJywgJ2RlZmVycmVkJywgJ2FzJywgJ2hpZGUnLCAnc2hvdycsICc7J10pOwoKICAgICAgLy8gRHVyaW5nIHJlY292ZXJ5LCBjbGF1c2VzIGFyZSBwYXJzZWQgaW4gdGhlIHNhbWUgb3JkZXIKICAgICAgLy8gYW5kIGdlbmVyYXRlIHRoZSBzYW1lIGV2ZW50cyBhcyBpbiB0aGUgcGFyc2VJbXBvcnQgbWV0aG9kIGFib3ZlLgogICAgICByZWNvdmVyeUxpc3RlbmVyLmNsZWFyKCk7CiAgICAgIHRva2VuID0gcGFyc2VDb25kaXRpb25hbFVyaVN0YXIodG9rZW4pOwogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci5pZktleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChmaXJzdERlZmVycmVkS2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVwb3J0IGVycm9yIGluZGljYXRpbmcgY29uZGl0aW9uYWwgc2hvdWxkCiAgICAgICAgICAvLyBiZSBtb3ZlZCBiZWZvcmUgZGVmZXJyZWQga2V5d29yZAogICAgICAgIH0gZWxzZSBpZiAoaGFzUHJlZml4KSB7CiAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVwb3J0IGVycm9yIGluZGljYXRpbmcgY29uZGl0aW9uYWwgc2hvdWxkCiAgICAgICAgICAvLyBiZSBtb3ZlZCBiZWZvcmUgcHJlZml4IGNsYXVzZQogICAgICAgIH0gZWxzZSBpZiAoaGFzQ29tYmluYXRvcikgewogICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlcG9ydCBlcnJvciBpbmRpY2F0aW5nIGNvbmRpdGlvbmFsIHNob3VsZAogICAgICAgICAgLy8gYmUgbW92ZWQgYmVmb3JlIGNvbWJpbmF0b3JzCiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAob3B0aW9uYWwoJ2RlZmVycmVkJywgdG9rZW4ubmV4dCkgJiYKICAgICAgICAgICFvcHRpb25hbCgnYXMnLCB0b2tlbi5uZXh0Lm5leHQpKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW1wb3J0UHJlZml4KHRva2VuLm5leHQsIG51bGwpOwogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0b2tlbiA9IHBhcnNlSW1wb3J0UHJlZml4T3B0KHRva2VuKTsKICAgICAgfQogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci5kZWZlcnJlZEtleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChmaXJzdERlZmVycmVkS2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIHJlY292ZXJ5TGlzdGVuZXIuZGVmZXJyZWRLZXl3b3JkLCBmYXN0YS5tZXNzYWdlRHVwbGljYXRlRGVmZXJyZWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaGFzUHJlZml4KSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IocmVjb3ZlcnlMaXN0ZW5lci5kZWZlcnJlZEtleXdvcmQsCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlRGVmZXJyZWRBZnRlclByZWZpeCk7CiAgICAgICAgICB9CiAgICAgICAgICBmaXJzdERlZmVycmVkS2V5d29yZCA9IHJlY292ZXJ5TGlzdGVuZXIuZGVmZXJyZWRLZXl3b3JkOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci5hc0tleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChoYXNQcmVmaXgpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgcmVjb3ZlcnlMaXN0ZW5lci5hc0tleXdvcmQsIGZhc3RhLm1lc3NhZ2VEdXBsaWNhdGVQcmVmaXgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaGFzQ29tYmluYXRvcikgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgcmVjb3ZlcnlMaXN0ZW5lci5hc0tleXdvcmQsIGZhc3RhLm1lc3NhZ2VQcmVmaXhBZnRlckNvbWJpbmF0b3IpOwogICAgICAgICAgfQogICAgICAgICAgaGFzUHJlZml4ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRva2VuID0gcGFyc2VDb21iaW5hdG9yU3Rhcih0b2tlbik7CiAgICAgIGhhc0NvbWJpbmF0b3IgPSBoYXNDb21iaW5hdG9yIHx8IHJlY292ZXJ5TGlzdGVuZXIuaGFzQ29tYmluYXRvcjsKCiAgICAgIGlmIChvcHRpb25hbCgnOycsIHRva2VuLm5leHQpKSB7CiAgICAgICAgc2VtaWNvbG9uID0gdG9rZW4ubmV4dDsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoc3RhcnQsIHRva2VuLm5leHQpKSB7CiAgICAgICAgLy8gSWYgbm8gZm9yd2FyZCBwcm9ncmVzcyB3YXMgbWFkZSwgaW5zZXJ0ICc7JyBzbyB0aGF0IHdlIGV4aXQgbG9vcC4KICAgICAgICBzZW1pY29sb24gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgICB9CiAgICAgIGxpc3RlbmVyLmhhbmRsZVJlY292ZXJJbXBvcnQoc2VtaWNvbG9uKTsKICAgIH0gd2hpbGUgKHNlbWljb2xvbiA9PSBudWxsKTsKCiAgICBpZiAoZmlyc3REZWZlcnJlZEtleXdvcmQgIT0gbnVsbCAmJiAhaGFzUHJlZml4KSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmaXJzdERlZmVycmVkS2V5d29yZCwgZmFzdGEubWVzc2FnZU1pc3NpbmdQcmVmaXhJbkRlZmVycmVkSW1wb3J0KTsKICAgIH0KCiAgICByZXR1cm4gc2VtaWNvbG9uOwogIH0KCiAgLy8vIGBgYAogIC8vLyBjb25kaXRpb25hbFVyaXM6CiAgLy8vICAgY29uZGl0aW9uYWxVcmkqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VDb25kaXRpb25hbFVyaVN0YXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyLmJlZ2luQ29uZGl0aW9uYWxVcmlzKHRva2VuLm5leHQpOwogICAgaW50IGNvdW50ID0gMDsKICAgIHdoaWxlIChvcHRpb25hbCgnaWYnLCB0b2tlbi5uZXh0KSkgewogICAgICBjb3VudCsrOwogICAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxVcmkodG9rZW4pOwogICAgfQogICAgbGlzdGVuZXIuZW5kQ29uZGl0aW9uYWxVcmlzKGNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gY29uZGl0aW9uYWxVcmk6CiAgLy8vICAgJ2lmJyAnKCcgZG90dGVkTmFtZSAoJz09JyBsaXRlcmFsU3RyaW5nKT8gJyknIHVyaQogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ29uZGl0aW9uYWxVcmkoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGlmS2V5d29yZCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnaWYnLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5Db25kaXRpb25hbFVyaSh0b2tlbik7CiAgICBUb2tlbiBsZWZ0UGFyZW4gPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnKCcsIGxlZnRQYXJlbikpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGxlZnRQYXJlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcoJykpOwogICAgICBsZWZ0UGFyZW4gPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIHRydWUpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZURvdHRlZE5hbWUobGVmdFBhcmVuKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgVG9rZW4gZXF1YWxpdHlTaWduOwogICAgaWYgKG9wdGlvbmFsKCc9PScsIG5leHQpKSB7CiAgICAgIGVxdWFsaXR5U2lnbiA9IG5leHQ7CiAgICAgIHRva2VuID0gZW5zdXJlTGl0ZXJhbFN0cmluZyhuZXh0KTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgICBpZiAobmV4dCAhPSBsZWZ0UGFyZW4uZW5kR3JvdXApIHsKICAgICAgVG9rZW4gZW5kR3JvdXAgPSBsZWZ0UGFyZW4uZW5kR3JvdXA7CiAgICAgIGlmIChlbmRHcm91cC5pc1N5bnRoZXRpYykgewogICAgICAgIC8vIFRoZSBzY2FubmVyIGRpZCBub3QgcGxhY2UgdGhlIHN5bnRoZXRpYyAnKScgY29ycmVjdGx5LCBzbyBtb3ZlIGl0LgogICAgICAgIG5leHQgPSByZXdyaXRlci5tb3ZlU3ludGhldGljKHRva2VuLCBlbmRHcm91cCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgbmV4dCA9IGVuZEdyb3VwOwogICAgICB9CiAgICB9CiAgICB0b2tlbiA9IG5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJyknLCB0b2tlbikpOwoKICAgIHRva2VuID0gZW5zdXJlTGl0ZXJhbFN0cmluZyh0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRDb25kaXRpb25hbFVyaShpZktleXdvcmQsIGxlZnRQYXJlbiwgZXF1YWxpdHlTaWduKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZG90dGVkTmFtZToKICAvLy8gICBpZGVudGlmaWVyICgnLicgaWRlbnRpZmllcikqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VEb3R0ZWROYW1lKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmRvdHRlZE5hbWUpOwogICAgVG9rZW4gZmlyc3RJZGVudGlmaWVyID0gdG9rZW47CiAgICBpbnQgY291bnQgPSAxOwogICAgd2hpbGUgKG9wdGlvbmFsKCcuJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgICAgdG9rZW4ubmV4dCwgSWRlbnRpZmllckNvbnRleHQuZG90dGVkTmFtZUNvbnRpbnVhdGlvbik7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVEb3R0ZWROYW1lKGNvdW50LCBmaXJzdElkZW50aWZpZXIpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBleHBvcnREaXJlY3RpdmU6CiAgLy8vICAgJ2V4cG9ydCcgdXJpIGNvbmRpdGlvbmFsLXVyaXMqIGNvbWJpbmF0b3IqICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRXhwb3J0KFRva2VuIGV4cG9ydEtleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnZXhwb3J0JywgZXhwb3J0S2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5FeHBvcnQoZXhwb3J0S2V5d29yZCk7CiAgICBUb2tlbiB0b2tlbiA9IGVuc3VyZUxpdGVyYWxTdHJpbmcoZXhwb3J0S2V5d29yZCk7CiAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxVcmlTdGFyKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDb21iaW5hdG9yU3Rhcih0b2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRFeHBvcnQoZXhwb3J0S2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBjb21iaW5hdG9yczoKICAvLy8gICAoaGlkZUNvbWJpbmF0b3IgfCBzaG93Q29tYmluYXRvcikqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VDb21iaW5hdG9yU3RhcihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5iZWdpbkNvbWJpbmF0b3JzKG5leHQpOwogICAgaW50IGNvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICAgIGlmIChpZGVudGljYWwoJ2hpZGUnLCB2YWx1ZSkpIHsKICAgICAgICB0b2tlbiA9IHBhcnNlSGlkZSh0b2tlbik7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdzaG93JywgdmFsdWUpKSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZVNob3codG9rZW4pOwogICAgICB9IGVsc2UgewogICAgICAgIGxpc3RlbmVyLmVuZENvbWJpbmF0b3JzKGNvdW50KTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgY291bnQrKzsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gaGlkZUNvbWJpbmF0b3I6CiAgLy8vICAgJ2hpZGUnIGlkZW50aWZpZXJMaXN0CiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VIaWRlKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBoaWRlS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2hpZGUnLCBoaWRlS2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5IaWRlKGhpZGVLZXl3b3JkKTsKICAgIHRva2VuID0gcGFyc2VJZGVudGlmaWVyTGlzdChoaWRlS2V5d29yZCk7CiAgICBsaXN0ZW5lci5lbmRIaWRlKGhpZGVLZXl3b3JkKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gc2hvd0NvbWJpbmF0b3I6CiAgLy8vICAgJ3Nob3cnIGlkZW50aWZpZXJMaXN0CiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VTaG93KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBzaG93S2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3Nob3cnLCBzaG93S2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5TaG93KHNob3dLZXl3b3JkKTsKICAgIHRva2VuID0gcGFyc2VJZGVudGlmaWVyTGlzdChzaG93S2V5d29yZCk7CiAgICBsaXN0ZW5lci5lbmRTaG93KHNob3dLZXl3b3JkKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gaWRlbnRpZmllckxpc3Q6CiAgLy8vICAgaWRlbnRpZmllciAoJywnIGlkZW50aWZpZXIpKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSWRlbnRpZmllckxpc3QoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuY29tYmluYXRvcik7CiAgICBpbnQgY291bnQgPSAxOwogICAgd2hpbGUgKG9wdGlvbmFsKCcsJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLm5leHQsIElkZW50aWZpZXJDb250ZXh0LmNvbWJpbmF0b3IpOwogICAgICBjb3VudCsrOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllckxpc3QoY291bnQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0eXBlTGlzdDoKICAvLy8gICB0eXBlICgnLCcgdHlwZSkqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VUeXBlTGlzdChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXIuYmVnaW5UeXBlTGlzdCh0b2tlbi5uZXh0KTsKICAgIHRva2VuID0gY29tcHV0ZVR5cGUodG9rZW4sIHRydWUpLmVuc3VyZVR5cGVPclZvaWQodG9rZW4sIHRoaXMpOwogICAgaW50IGNvdW50ID0gMTsKICAgIHdoaWxlIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gY29tcHV0ZVR5cGUodG9rZW4ubmV4dCwgdHJ1ZSkuZW5zdXJlVHlwZU9yVm9pZCh0b2tlbi5uZXh0LCB0aGlzKTsKICAgICAgY291bnQrKzsKICAgIH0KICAgIGxpc3RlbmVyLmVuZFR5cGVMaXN0KGNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlUGFydE9yUGFydE9mKFRva2VuIHBhcnRLZXl3b3JkLCBEaXJlY3RpdmVDb250ZXh0IGRpcmVjdGl2ZVN0YXRlKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3BhcnQnLCBwYXJ0S2V5d29yZCkpOwogICAgaWYgKG9wdGlvbmFsKCdvZicsIHBhcnRLZXl3b3JkLm5leHQpKSB7CiAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja1BhcnRPZih0aGlzLCBwYXJ0S2V5d29yZCk7CiAgICAgIHJldHVybiBwYXJzZVBhcnRPZihwYXJ0S2V5d29yZCk7CiAgICB9IGVsc2UgewogICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tQYXJ0KHRoaXMsIHBhcnRLZXl3b3JkKTsKICAgICAgcmV0dXJuIHBhcnNlUGFydChwYXJ0S2V5d29yZCk7CiAgICB9CiAgfQoKICAvLy8gYGBgCiAgLy8vIHBhcnREaXJlY3RpdmU6CiAgLy8vICAgJ3BhcnQnIHVyaSAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVBhcnQoVG9rZW4gcGFydEtleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgncGFydCcsIHBhcnRLZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpblBhcnQocGFydEtleXdvcmQpOwogICAgVG9rZW4gdG9rZW4gPSBlbnN1cmVMaXRlcmFsU3RyaW5nKHBhcnRLZXl3b3JkKTsKICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZFBhcnQocGFydEtleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gcGFydE9mRGlyZWN0aXZlOgogIC8vLyAgICdwYXJ0JyAnb2YnIChxdWFsaWZpZWQgfCB1cmkpICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlUGFydE9mKFRva2VuIHBhcnRLZXl3b3JkKSB7CiAgICBUb2tlbiBvZktleXdvcmQgPSBwYXJ0S2V5d29yZC5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdwYXJ0JywgcGFydEtleXdvcmQpKTsKICAgIGFzc2VydChvcHRpb25hbCgnb2YnLCBvZktleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luUGFydE9mKHBhcnRLZXl3b3JkKTsKICAgIGJvb2wgaGFzTmFtZSA9IG9mS2V5d29yZC5uZXh0LmlzSWRlbnRpZmllcjsKICAgIFRva2VuIHRva2VuOwogICAgaWYgKGhhc05hbWUpIHsKICAgICAgdG9rZW4gPSBwYXJzZVF1YWxpZmllZChvZktleXdvcmQsIElkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lLAogICAgICAgICAgSWRlbnRpZmllckNvbnRleHQucGFydE5hbWVDb250aW51YXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBlbnN1cmVMaXRlcmFsU3RyaW5nKG9mS2V5d29yZCk7CiAgICB9CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRQYXJ0T2YocGFydEtleXdvcmQsIG9mS2V5d29yZCwgdG9rZW4sIGhhc05hbWUpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBtZXRhZGF0YToKICAvLy8gICBhbm5vdGF0aW9uKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTWV0YWRhdGFTdGFyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lci5iZWdpbk1ldGFkYXRhU3Rhcih0b2tlbi5uZXh0KTsKICAgIGludCBjb3VudCA9IDA7CiAgICB3aGlsZSAob3B0aW9uYWwoJ0AnLCB0b2tlbi5uZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlTWV0YWRhdGEodG9rZW4pOwogICAgICBjb3VudCsrOwogICAgfQogICAgbGlzdGVuZXIuZW5kTWV0YWRhdGFTdGFyKGNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gYW5ub3RhdGlvbjoKICAvLy8gICAnQCcgcXVhbGlmaWVkICgnLicgaWRlbnRpZmllcik/IGFyZ3VtZW50cz8KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU1ldGFkYXRhKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBhdFRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnQCcsIGF0VG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luTWV0YWRhdGEoYXRUb2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIoYXRUb2tlbiwgSWRlbnRpZmllckNvbnRleHQubWV0YWRhdGFSZWZlcmVuY2UpOwogICAgdG9rZW4gPQogICAgICAgIHBhcnNlUXVhbGlmaWVkUmVzdE9wdCh0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubWV0YWRhdGFDb250aW51YXRpb24pOwogICAgaWYgKG9wdGlvbmFsKCI8IiwgdG9rZW4ubmV4dCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbi5uZXh0LCBmYXN0YS5tZXNzYWdlTWV0YWRhdGFUeXBlQXJndW1lbnRzKTsKICAgIH0KICAgIHRva2VuID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuKS5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICBUb2tlbiBwZXJpb2QgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCcuJywgdG9rZW4ubmV4dCkpIHsKICAgICAgcGVyaW9kID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgICAgcGVyaW9kLCBJZGVudGlmaWVyQ29udGV4dC5tZXRhZGF0YUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlQXJndW1lbnRzT3B0KHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZE1ldGFkYXRhKGF0VG9rZW4sIHBlcmlvZCwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHNjcmlwdFRhZzoKICAvLy8gICAnIyEnICjLnE5FV0xJTkUpKiBORVdMSU5FCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VTY3JpcHQoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGljYWwodG9rZW4udHlwZSwgVG9rZW5UeXBlLlNDUklQVF9UQUcpKTsKICAgIGxpc3RlbmVyLmhhbmRsZVNjcmlwdCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHR5cGVBbGlhczoKICAvLy8gICBtZXRhZGF0YSAndHlwZWRlZicgdHlwZUFsaWFzQm9keSB8CiAgLy8vICAgbWV0YWRhdGEgJ3R5cGVkZWYnIGlkZW50aWZpZXIgdHlwZVBhcmFtZXRlcnM/ICc9JyBmdW5jdGlvblR5cGUgJzsnCiAgLy8vIDsKICAvLy8KICAvLy8gZnVuY3Rpb25UeXBlOgogIC8vLyAgIHJldHVyblR5cGU/ICdGdW5jdGlvbicgdHlwZVBhcmFtZXRlcnM/IHBhcmFtZXRlclR5cGVMaXN0CiAgLy8vCiAgLy8vIHR5cGVBbGlhc0JvZHk6CiAgLy8vICAgZnVuY3Rpb25UeXBlQWxpYXMKICAvLy8gOwogIC8vLwogIC8vLyBmdW5jdGlvblR5cGVBbGlhczoKICAvLy8gICBmdW5jdGlvblByZWZpeCB0eXBlUGFyYW1ldGVycz8gZm9ybWFsUGFyYW1ldGVyTGlzdCDigJg74oCZCiAgLy8vIDsKICAvLy8KICAvLy8gZnVuY3Rpb25QcmVmaXg6CiAgLy8vICAgcmV0dXJuVHlwZT8gaWRlbnRpZmllcgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlVHlwZWRlZihUb2tlbiB0eXBlZGVmS2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCd0eXBlZGVmJywgdHlwZWRlZktleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luRnVuY3Rpb25UeXBlQWxpYXModHlwZWRlZktleXdvcmQpOwogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0eXBlZGVmS2V5d29yZCwgZmFsc2UpOwogICAgVG9rZW4gdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZSh0eXBlZGVmS2V5d29yZCkubmV4dDsKICAgIFRva2VuIGVxdWFsczsKICAgIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlUGFyYW0gPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcodG9rZW4sIHRydWUpOwogICAgaWYgKHR5cGVJbmZvID09IG5vVHlwZSAmJgogICAgICAgICh0b2tlbi5raW5kID09IElERU5USUZJRVJfVE9LRU4gfHwgdG9rZW4udHlwZS5pc1BzZXVkbykgJiYKICAgICAgICBvcHRpb25hbCgnPScsIHR5cGVQYXJhbS5za2lwKHRva2VuKS5uZXh0KSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlZGVmRGVjbGFyYXRpb24pOwogICAgICBlcXVhbHMgPSB0eXBlUGFyYW0ucGFyc2VWYXJpYWJsZXModG9rZW4sIHRoaXMpLm5leHQ7CiAgICAgIGFzc2VydChvcHRpb25hbCgnPScsIGVxdWFscykpOwogICAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKGVxdWFscywgdHJ1ZSkuZW5zdXJlVHlwZU9yVm9pZChlcXVhbHMsIHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5wYXJzZVR5cGUodHlwZWRlZktleXdvcmQsIHRoaXMpOwogICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnR5cGVkZWZEZWNsYXJhdGlvbik7CiAgICAgIHRva2VuID0gdHlwZVBhcmFtLnBhcnNlVmFyaWFibGVzKHRva2VuLCB0aGlzKTsKICAgICAgdG9rZW4gPQogICAgICAgICAgcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVxdWlyZWRPcHQodG9rZW4sIE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlQWxpYXMpOwogICAgfQogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kRnVuY3Rpb25UeXBlQWxpYXModHlwZWRlZktleXdvcmQsIGVxdWFscywgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIGEgbWl4aW4gYXBwbGljYXRpb24gc3RhcnRpbmcgZnJvbSBgd2l0aGAuIEFzc3VtZXMgdGhhdCB0aGUgZmlyc3QKICAvLy8gdHlwZSBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZC4KICBUb2tlbiBwYXJzZU1peGluQXBwbGljYXRpb25SZXN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiB3aXRoS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCd3aXRoJywgd2l0aEtleXdvcmQpKSB7CiAgICAgIC8vIFJlY292ZXJ5OiBSZXBvcnQgYW4gZXJyb3IgYW5kIGluc2VydCBzeW50aGV0aWMgYHdpdGhgIGNsYXVzZS4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIHdpdGhLZXl3b3JkLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ3dpdGgnKSk7CiAgICAgIHdpdGhLZXl3b3JkID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljS2V5d29yZCh0b2tlbiwgS2V5d29yZC5XSVRIKTsKICAgICAgaWYgKCFpc1ZhbGlkVHlwZVJlZmVyZW5jZSh3aXRoS2V5d29yZC5uZXh0KSkgewogICAgICAgIHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIod2l0aEtleXdvcmQpOwogICAgICB9CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlVHlwZUxpc3Qod2l0aEtleXdvcmQpOwogICAgbGlzdGVuZXIuaGFuZGxlTmFtZWRNaXhpbkFwcGxpY2F0aW9uV2l0aENsYXVzZSh3aXRoS2V5d29yZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVdpdGhDbGF1c2VPcHQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIHdpdGhLZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnd2l0aCcsIHdpdGhLZXl3b3JkKSkgewogICAgICB0b2tlbiA9IHBhcnNlVHlwZUxpc3Qod2l0aEtleXdvcmQpOwogICAgICBsaXN0ZW5lci5oYW5kbGVDbGFzc1dpdGhDbGF1c2Uod2l0aEtleXdvcmQpOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlQ2xhc3NOb1dpdGhDbGF1c2UoKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSB0aGUgZm9ybWFsIHBhcmFtZXRlcnMgb2YgYSBnZXR0ZXIgKHdoaWNoIHNob3VsZG4ndCBoYXZlIHBhcmFtZXRlcnMpCiAgLy8vIG9yIGZ1bmN0aW9uIG9yIG1ldGhvZC4KICBUb2tlbiBwYXJzZUdldHRlck9yRm9ybWFsUGFyYW1ldGVycygKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIG5hbWUsIGJvb2wgaXNHZXR0ZXIsIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoIigiLCBuZXh0KSkgewogICAgICBpZiAoaXNHZXR0ZXIpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VHZXR0ZXJXaXRoRm9ybWFscyk7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnModG9rZW4sIGtpbmQpOwogICAgfSBlbHNlIGlmIChpc0dldHRlcikgewogICAgICBsaXN0ZW5lci5oYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMobmV4dCwga2luZCk7CiAgICB9IGVsc2UgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAob3B0aW9uYWwoJ29wZXJhdG9yJywgbmFtZSkpIHsKICAgICAgICBUb2tlbiBuZXh0ID0gbmFtZS5uZXh0OwogICAgICAgIGlmIChuZXh0LmlzT3BlcmF0b3IpIHsKICAgICAgICAgIG5hbWUgPSBuZXh0OwogICAgICAgIH0gZWxzZSBpZiAoaXNVbmFyeU1pbnVzKG5leHQpKSB7CiAgICAgICAgICBuYW1lID0gbmV4dC5uZXh0OwogICAgICAgIH0KICAgICAgfQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5hbWUsIG1pc3NpbmdQYXJhbWV0ZXJNZXNzYWdlKGtpbmQpKTsKICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgICAgdG9rZW4gPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXN0KHRva2VuLCBraW5kKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRm9ybWFsUGFyYW1ldGVyc09wdChUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIHRva2VuID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKHRva2VuLCBraW5kKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyhuZXh0LCBraW5kKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHNraXBGb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIHJldHVybiBza2lwRm9ybWFsUGFyYW1ldGVyc1Jlc3QodG9rZW4ubmV4dCwga2luZCk7CiAgfQoKICBUb2tlbiBza2lwRm9ybWFsUGFyYW1ldGVyc1Jlc3QoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgdG9rZW4pKTsKICAgIC8vIFRPRE8oYWhlKTogU2hvdWxkbid0IHRoaXMgYmUgYGJlZ2luRm9ybWFsUGFyYW1ldGVyc2A/CiAgICBsaXN0ZW5lci5iZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyh0b2tlbik7CiAgICBUb2tlbiBjbG9zZUJyYWNlID0gdG9rZW4uZW5kR3JvdXA7CiAgICBhc3NlcnQob3B0aW9uYWwoJyknLCBjbG9zZUJyYWNlKSk7CiAgICBsaXN0ZW5lci5lbmRGb3JtYWxQYXJhbWV0ZXJzKDAsIHRva2VuLCBjbG9zZUJyYWNlLCBraW5kKTsKICAgIHJldHVybiBjbG9zZUJyYWNlOwogIH0KCiAgLy8vIFBhcnNlcyB0aGUgZm9ybWFsIHBhcmFtZXRlciBsaXN0IG9mIGEgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIElmIGBraW5kID09IE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGVgLCB0aGVuIG5hbWVzIG1heSBiZQogIC8vLyBvbWl0dGVkIChleGNlcHQgZm9yIG5hbWVkIGFyZ3VtZW50cykuIE90aGVyd2lzZSwgdHlwZXMgbWF5IGJlIG9taXR0ZWQuCiAgVG9rZW4gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVxdWlyZWRPcHQoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBtaXNzaW5nUGFyYW1ldGVyTWVzc2FnZShraW5kKSk7CiAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXN0KG5leHQsIGtpbmQpOwogIH0KCiAgLy8vIFBhcnNlcyB0aGUgZm9ybWFsIHBhcmFtZXRlciBsaXN0IG9mIGEgZnVuY3Rpb24gZ2l2ZW4gdGhhdCB0aGUgbGVmdAogIC8vLyBwYXJlbnRoZXNpcyBpcyBrbm93biB0byBleGlzdC4KICAvLy8KICAvLy8gSWYgYGtpbmQgPT0gTWVtYmVyS2luZC5HZW5lcmFsaXplZEZ1bmN0aW9uVHlwZWAsIHRoZW4gbmFtZXMgbWF5IGJlCiAgLy8vIG9taXR0ZWQgKGV4Y2VwdCBmb3IgbmFtZWQgYXJndW1lbnRzKS4gT3RoZXJ3aXNlLCB0eXBlcyBtYXkgYmUgb21pdHRlZC4KICBUb2tlbiBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgcmV0dXJuIHBhcnNlRm9ybWFsUGFyYW1ldGVyc1Jlc3QodG9rZW4ubmV4dCwga2luZCk7CiAgfQoKICAvLy8gUGFyc2VzIHRoZSBmb3JtYWwgcGFyYW1ldGVyIGxpc3Qgb2YgYSBmdW5jdGlvbiBnaXZlbiB0aGF0IHRoZSBsZWZ0CiAgLy8vIHBhcmVudGhlc2lzIHBhc3NlZCBpbiBhcyBbdG9rZW5dLgogIC8vLwogIC8vLyBJZiBga2luZCA9PSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlYCwgdGhlbiBuYW1lcyBtYXkgYmUKICAvLy8gb21pdHRlZCAoZXhjZXB0IGZvciBuYW1lZCBhcmd1bWVudHMpLiBPdGhlcndpc2UsIHR5cGVzIG1heSBiZSBvbWl0dGVkLgogIFRva2VuIHBhcnNlRm9ybWFsUGFyYW1ldGVyc1Jlc3QoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbjsKICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbkZvcm1hbFBhcmFtZXRlcnMoYmVnaW4sIGtpbmQpOwogICAgaW50IHBhcmFtZXRlckNvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJyknLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICArK3BhcmFtZXRlckNvdW50OwogICAgICBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnWycpKSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZU9wdGlvbmFsUG9zaXRpb25hbFBhcmFtZXRlcnModG9rZW4sIGtpbmQpOwogICAgICAgIHRva2VuID0gZW5zdXJlQ2xvc2VQYXJlbih0b2tlbiwgYmVnaW4pOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3snKSkgewogICAgICAgIHRva2VuID0gcGFyc2VPcHRpb25hbE5hbWVkUGFyYW1ldGVycyh0b2tlbiwga2luZCk7CiAgICAgICAgdG9rZW4gPSBlbnN1cmVDbG9zZVBhcmVuKHRva2VuLCBiZWdpbik7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnW10nKSkgewogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgdG9rZW4gPSByZXdyaXRlU3F1YXJlQnJhY2tldHModG9rZW4pOwogICAgICAgIHRva2VuID0gcGFyc2VPcHRpb25hbFBvc2l0aW9uYWxQYXJhbWV0ZXJzKHRva2VuLCBraW5kKTsKICAgICAgICB0b2tlbiA9IGVuc3VyZUNsb3NlUGFyZW4odG9rZW4sIGJlZ2luKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyKHRva2VuLCBGb3JtYWxQYXJhbWV0ZXJLaW5kLm1hbmRhdG9yeSwga2luZCk7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAoIW9wdGlvbmFsKCcsJywgbmV4dCkpIHsKICAgICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAob3B0aW9uYWwoJyknLCBuZXh0KSkgewogICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgaWYgKGJlZ2luLmVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgIC8vIFNjYW5uZXIgaGFzIGFscmVhZHkgcmVwb3J0ZWQgYSBtaXNzaW5nIGApYCBlcnJvciwKICAgICAgICAgICAgLy8gYnV0IHBsYWNlZCB0aGUgYClgIGluIHRoZSB3cm9uZyBsb2NhdGlvbiwgc28gbW92ZSBpdC4KICAgICAgICAgICAgdG9rZW4gPSByZXdyaXRlci5tb3ZlU3ludGhldGljKHRva2VuLCBiZWdpbi5lbmRHcm91cCk7CiAgICAgICAgICB9IGVsc2UgaWYgKG5leHQua2luZCA9PSBJREVOVElGSUVSX1RPS0VOICYmCiAgICAgICAgICAgICAgbmV4dC5uZXh0LmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTikgewogICAgICAgICAgICAvLyBMb29rcyBsaWtlIGEgbWlzc2luZyBjb21tYQogICAgICAgICAgICB0b2tlbiA9IHJld3JpdGVBbmRSZWNvdmVyKAogICAgICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKSwKICAgICAgICAgICAgICAgIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuQ09NTUEsIG5leHQuY2hhck9mZnNldCkpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRva2VuID0gZW5zdXJlQ2xvc2VQYXJlbih0b2tlbiwgYmVnaW4pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0b2tlbiA9IG5leHQ7CiAgICB9CiAgICBhc3NlcnQob3B0aW9uYWwoJyknLCB0b2tlbikpOwogICAgbGlzdGVuZXIuZW5kRm9ybWFsUGFyYW1ldGVycyhwYXJhbWV0ZXJDb3VudCwgYmVnaW4sIHRva2VuLCBraW5kKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBSZXR1cm4gdGhlIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgcHJvZHVjZWQgd2hlbiB0aGUgZm9ybWFsIHBhcmFtZXRlcnMgYXJlCiAgLy8vIG1pc3NpbmcuCiAgTWVzc2FnZSBtaXNzaW5nUGFyYW1ldGVyTWVzc2FnZShNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGlmIChraW5kID09IE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlQWxpYXMpIHsKICAgICAgcmV0dXJuIGZhc3RhLm1lc3NhZ2VNaXNzaW5nVHlwZWRlZlBhcmFtZXRlcnM7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gTWVtYmVyS2luZC5Ob25TdGF0aWNNZXRob2QgfHwKICAgICAgICBraW5kID09IE1lbWJlcktpbmQuU3RhdGljTWV0aG9kKSB7CiAgICAgIHJldHVybiBmYXN0YS5tZXNzYWdlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnM7CiAgICB9CiAgICByZXR1cm4gZmFzdGEubWVzc2FnZU1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnM7CiAgfQoKICAvLy8gYGBgCiAgLy8vIG5vcm1hbEZvcm1hbFBhcmFtZXRlcjoKICAvLy8gICBmdW5jdGlvbkZvcm1hbFBhcmFtZXRlciB8CiAgLy8vICAgZmllbGRGb3JtYWxQYXJhbWV0ZXIgfAogIC8vLyAgIHNpbXBsZUZvcm1hbFBhcmFtZXRlcgogIC8vLyA7CiAgLy8vCiAgLy8vIGZ1bmN0aW9uRm9ybWFsUGFyYW1ldGVyOgogIC8vLyAgIG1ldGFkYXRhICdjb3ZhcmlhbnQnPyByZXR1cm5UeXBlPyBpZGVudGlmaWVyIGZvcm1hbFBhcmFtZXRlckxpc3QKICAvLy8gOwogIC8vLwogIC8vLyBzaW1wbGVGb3JtYWxQYXJhbWV0ZXI6CiAgLy8vICAgbWV0YWRhdGEgJ2NvdmFyaWFudCc/IGZpbmFsQ29uc3RWYXJPclR5cGU/IGlkZW50aWZpZXIgfAogIC8vLyA7CiAgLy8vCiAgLy8vIGZpZWxkRm9ybWFsUGFyYW1ldGVyOgogIC8vLyAgIG1ldGFkYXRhIGZpbmFsQ29uc3RWYXJPclR5cGU/ICd0aGlzJyAnLicgaWRlbnRpZmllciBmb3JtYWxQYXJhbWV0ZXJMaXN0PwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRm9ybWFsUGFyYW1ldGVyKAogICAgICBUb2tlbiB0b2tlbiwgRm9ybWFsUGFyYW1ldGVyS2luZCBwYXJhbWV0ZXJLaW5kLCBNZW1iZXJLaW5kIG1lbWJlcktpbmQpIHsKICAgIGFzc2VydChwYXJhbWV0ZXJLaW5kICE9IG51bGwpOwogICAgdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIFRva2VuIHN0YXJ0ID0gbmV4dDsKCiAgICBmaW5hbCBib29sIGluRnVuY3Rpb25UeXBlID0KICAgICAgICBtZW1iZXJLaW5kID09IE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGU7CgogICAgVG9rZW4gcmVxdWlyZWRUb2tlbjsKICAgIFRva2VuIGNvdmFyaWFudFRva2VuOwogICAgVG9rZW4gdmFyRmluYWxPckNvbnN0OwogICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdyZXF1aXJlZCcsIG5leHQpKSB7CiAgICAgICAgaWYgKHBhcmFtZXRlcktpbmQgPT0gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkKSB7CiAgICAgICAgICByZXF1aXJlZFRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgIGlmIChvcHRpb25hbCgnY292YXJpYW50JywgbmV4dCkpIHsKICAgICAgICAgIGlmIChtZW1iZXJLaW5kICE9IE1lbWJlcktpbmQuU3RhdGljTWV0aG9kICYmCiAgICAgICAgICAgICAgbWVtYmVyS2luZCAhPSBNZW1iZXJLaW5kLlRvcExldmVsTWV0aG9kKSB7CiAgICAgICAgICAgIGNvdmFyaWFudFRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgICAgICBpZiAoIWluRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkpIHsKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2ZpbmFsJywgbmV4dCkpIHsKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgICBNb2RpZmllclJlY292ZXJ5Q29udGV4dCBjb250ZXh0ID0gbmV3IE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0KHRoaXMpCiAgICAgICAgICAgICAgLi5jb3ZhcmlhbnRUb2tlbiA9IGNvdmFyaWFudFRva2VuCiAgICAgICAgICAgICAgLi5yZXF1aXJlZFRva2VuID0gcmVxdWlyZWRUb2tlbgogICAgICAgICAgICAgIC4udmFyRmluYWxPckNvbnN0ID0gdmFyRmluYWxPckNvbnN0OwoKICAgICAgICAgICAgdG9rZW4gPSBjb250ZXh0LnBhcnNlRm9ybWFsUGFyYW1ldGVyTW9kaWZpZXJzKAogICAgICAgICAgICAgICAgdG9rZW4sIHBhcmFtZXRlcktpbmQsIG1lbWJlcktpbmQpOwogICAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICAgICAgICAgIGNvdmFyaWFudFRva2VuID0gY29udGV4dC5jb3ZhcmlhbnRUb2tlbjsKICAgICAgICAgICAgcmVxdWlyZWRUb2tlbiA9IGNvbnRleHQucmVxdWlyZWRUb2tlbjsKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gY29udGV4dC52YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBsaXN0ZW5lci5iZWdpbkZvcm1hbFBhcmFtZXRlcigKICAgICAgICBzdGFydCwgbWVtYmVyS2luZCwgcmVxdWlyZWRUb2tlbiwgY292YXJpYW50VG9rZW4sIHZhckZpbmFsT3JDb25zdCk7CgogICAgLy8gVHlwZSBpcyByZXF1aXJlZCBpbiBhIGdlbmVyYWxpemVkIGZ1bmN0aW9uIHR5cGUsIGJ1dCBvcHRpb25hbCBvdGhlcndpc2UuCiAgICBmaW5hbCBUb2tlbiBiZWZvcmVUeXBlID0gdG9rZW47CiAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKHRva2VuLCBpbkZ1bmN0aW9uVHlwZSk7CiAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKHRva2VuKTsKICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKHR5cGVJbmZvID09IG5vVHlwZSAmJgogICAgICAgIChvcHRpb25hbCgnLicsIG5leHQpIHx8CiAgICAgICAgICAgIChuZXh0LmlzSWRlbnRpZmllciAmJiBvcHRpb25hbCgnLicsIG5leHQubmV4dCkpKSkgewogICAgICAvLyBSZWNvdmVyeTogTWFsZm9ybWVkIHR5cGUgcmVmZXJlbmNlLgogICAgICB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKGJlZm9yZVR5cGUsIHRydWUpOwogICAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKGJlZm9yZVR5cGUpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KCiAgICBmaW5hbCBib29sIGlzTmFtZWRQYXJhbWV0ZXIgPQogICAgICAgIHBhcmFtZXRlcktpbmQgPT0gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkOwoKICAgIFRva2VuIHRoaXNLZXl3b3JkOwogICAgVG9rZW4gcGVyaW9kQWZ0ZXJUaGlzOwogICAgSWRlbnRpZmllckNvbnRleHQgbmFtZUNvbnRleHQgPQogICAgICAgIElkZW50aWZpZXJDb250ZXh0LmZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uOwoKICAgIGlmICghaW5GdW5jdGlvblR5cGUgJiYgb3B0aW9uYWwoJ3RoaXMnLCBuZXh0KSkgewogICAgICB0aGlzS2V5d29yZCA9IHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmICghb3B0aW9uYWwoJy4nLCBuZXh0KSkgewogICAgICAgIC8vIFJlY292ZXIgZnJvbSBhIG1pc3NpbmcgcGVyaW9kIGJ5IGluc2VydGluZyBvbmUuCiAgICAgICAgbmV4dCA9IHJld3JpdGVBbmRSZWNvdmVyKAogICAgICAgICAgICB0b2tlbiwKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcuJyksCiAgICAgICAgICAgIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuUEVSSU9ELCBuZXh0LmNoYXJPZmZzZXQpKTsKICAgICAgfQogICAgICBwZXJpb2RBZnRlclRoaXMgPSB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBuYW1lQ29udGV4dCA9IElkZW50aWZpZXJDb250ZXh0LmZpZWxkSW5pdGlhbGl6ZXI7CiAgICB9CgogICAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgICBUb2tlbiBiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGU7CiAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtID0gbm9UeXBlUGFyYW1PckFyZzsKICAgIGlmIChvcHRpb25hbCgiPCIsIG5leHQpKSB7CiAgICAgIHR5cGVQYXJhbSA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbik7CiAgICAgIGlmICh0eXBlUGFyYW0gIT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIFRva2VuIGNsb3NlciA9IHR5cGVQYXJhbS5za2lwKHRva2VuKTsKICAgICAgICBpZiAob3B0aW9uYWwoIigiLCBjbG9zZXIubmV4dCkpIHsKICAgICAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCkgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlRnVuY3Rpb25UeXBlZFBhcmFtZXRlclZhcik7CiAgICAgICAgICB9CiAgICAgICAgICBiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGUgPSB0b2tlbjsKICAgICAgICAgIHRva2VuID0gY2xvc2VyLm5leHQuZW5kR3JvdXA7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoIigiLCBuZXh0KSkgewogICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VGdW5jdGlvblR5cGVkUGFyYW1ldGVyVmFyKTsKICAgICAgfQogICAgICBiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGUgPSB0b2tlbjsKICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIGlmICh0eXBlSW5mbyAhPSBub1R5cGUgJiYKICAgICAgICB2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJgogICAgICAgIG9wdGlvbmFsKCd2YXInLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlVHlwZUFmdGVyVmFyKTsKICAgIH0KCiAgICBUb2tlbiBlbmRJbmxpbmVGdW5jdGlvblR5cGU7CiAgICBpZiAoYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlICE9IG51bGwpIHsKICAgICAgZW5kSW5saW5lRnVuY3Rpb25UeXBlID0KICAgICAgICAgIHR5cGVQYXJhbS5wYXJzZVZhcmlhYmxlcyhiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGUsIHRoaXMpOwogICAgICBsaXN0ZW5lci5iZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlLm5leHQpOwogICAgICB0b2tlbiA9IHR5cGVJbmZvLnBhcnNlVHlwZShiZWZvcmVUeXBlLCB0aGlzKTsKICAgICAgZW5kSW5saW5lRnVuY3Rpb25UeXBlID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVxdWlyZWRPcHQoCiAgICAgICAgICBlbmRJbmxpbmVGdW5jdGlvblR5cGUsIE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlZFBhcmFtZXRlcik7CiAgICAgIFRva2VuIHF1ZXN0aW9uOwogICAgICBpZiAob3B0aW9uYWwoJz8nLCBlbmRJbmxpbmVGdW5jdGlvblR5cGUubmV4dCkpIHsKICAgICAgICBxdWVzdGlvbiA9IGVuZElubGluZUZ1bmN0aW9uVHlwZSA9IGVuZElubGluZUZ1bmN0aW9uVHlwZS5uZXh0OwogICAgICB9CiAgICAgIGxpc3RlbmVyLmVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoCiAgICAgICAgICBiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGUsIHF1ZXN0aW9uKTsKCiAgICAgIC8vIEdlbmVyYWxpemVkIGZ1bmN0aW9uIHR5cGVzIGRvbid0IGFsbG93IGlubGluZSBmdW5jdGlvbiB0eXBlcy4KICAgICAgLy8gVGhlIGZvbGxvd2luZyBpc24ndCBhbGxvd2VkOgogICAgICAvLyAgICBpbnQgRnVuY3Rpb24oaW50IGJhcihTdHJpbmcgeCkpLgogICAgICBpZiAoaW5GdW5jdGlvblR5cGUpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGJlZm9yZUlubGluZUZ1bmN0aW9uVHlwZS5uZXh0LAogICAgICAgICAgICBmYXN0YS5tZXNzYWdlSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaW5GdW5jdGlvblR5cGUpIHsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5lbnN1cmVUeXBlT3JWb2lkKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5wYXJzZVR5cGUoYmVmb3JlVHlwZSwgdGhpcyk7CiAgICB9CgogICAgVG9rZW4gbmFtZVRva2VuOwogICAgaWYgKHBlcmlvZEFmdGVyVGhpcyAhPSBudWxsKSB7CiAgICAgIHRva2VuID0gcGVyaW9kQWZ0ZXJUaGlzOwogICAgfQogICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoaW5GdW5jdGlvblR5cGUgJiYgIWlzTmFtZWRQYXJhbWV0ZXIgJiYgIW5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgIG5hbWVUb2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vTmFtZShuYW1lVG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgbmFtZVRva2VuID0gdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBuYW1lQ29udGV4dCk7CiAgICAgIGlmIChpc05hbWVkUGFyYW1ldGVyICYmIG5hbWVUb2tlbi5sZXhlbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuYW1lVG9rZW4sIGZhc3RhLm1lc3NhZ2VQcml2YXRlTmFtZWRQYXJhbWV0ZXIpOwogICAgICB9CiAgICB9CiAgICBpZiAoZW5kSW5saW5lRnVuY3Rpb25UeXBlICE9IG51bGwpIHsKICAgICAgdG9rZW4gPSBlbmRJbmxpbmVGdW5jdGlvblR5cGU7CiAgICB9CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgVG9rZW4gaW5pdGlhbGl6ZXJTdGFydCwgaW5pdGlhbGl6ZXJFbmQ7CiAgICBpZiAoKGlkZW50aWNhbCgnPScsIHZhbHVlKSkgfHwgKGlkZW50aWNhbCgnOicsIHZhbHVlKSkpIHsKICAgICAgVG9rZW4gZXF1YWwgPSBuZXh0OwogICAgICBpbml0aWFsaXplclN0YXJ0ID0gZXF1YWwubmV4dDsKICAgICAgbGlzdGVuZXIuYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCk7CiAgICAgIHRva2VuID0gaW5pdGlhbGl6ZXJFbmQgPSBwYXJzZUV4cHJlc3Npb24oZXF1YWwpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgbGlzdGVuZXIuZW5kRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpOwogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIGxhc3QgcGFyYW1ldGVyIGZyb20gdGhlCiAgICAgIC8vIGhhbmRsZVZhbHVlZEZvcm1hbFBhcmFtZXRlciBldmVudC4uLiBpdCBhcHBlYXJzIHRvIGJlIHVudXNlZC4KICAgICAgbGlzdGVuZXIuaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKGVxdWFsLCBuZXh0KTsKICAgICAgaWYgKGlzTWFuZGF0b3J5Rm9ybWFsUGFyYW1ldGVyS2luZChwYXJhbWV0ZXJLaW5kKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIGVxdWFsLCBmYXN0YS5tZXNzYWdlUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdCk7CiAgICAgIH0gZWxzZSBpZiAoaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kKHBhcmFtZXRlcktpbmQpICYmCiAgICAgICAgICBpZGVudGljYWwoJzonLCB2YWx1ZSkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBlcXVhbCwgZmFzdGEubWVzc2FnZVBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzKTsKICAgICAgfSBlbHNlIGlmIChpbkZ1bmN0aW9uVHlwZSB8fAogICAgICAgICAgbWVtYmVyS2luZCA9PSBNZW1iZXJLaW5kLkZ1bmN0aW9uVHlwZUFsaWFzIHx8CiAgICAgICAgICBtZW1iZXJLaW5kID09IE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlZFBhcmFtZXRlcikgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoZXF1YWwsIGZhc3RhLm1lc3NhZ2VGdW5jdGlvblR5cGVEZWZhdWx0VmFsdWUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5oYW5kbGVGb3JtYWxQYXJhbWV0ZXJXaXRob3V0VmFsdWUobmV4dCk7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRGb3JtYWxQYXJhbWV0ZXIodGhpc0tleXdvcmQsIHBlcmlvZEFmdGVyVGhpcywgbmFtZVRva2VuLAogICAgICAgIGluaXRpYWxpemVyU3RhcnQsIGluaXRpYWxpemVyRW5kLCBwYXJhbWV0ZXJLaW5kLCBtZW1iZXJLaW5kKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZGVmYXVsdEZvcm1hbFBhcmFtZXRlcjoKICAvLy8gICBub3JtYWxGb3JtYWxQYXJhbWV0ZXIgKCc9JyBleHByZXNzaW9uKT8KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU9wdGlvbmFsUG9zaXRpb25hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ1snLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5PcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoYmVnaW4pOwogICAgaW50IHBhcmFtZXRlckNvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJ10nLCBuZXh0KSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXIoCiAgICAgICAgICB0b2tlbiwgRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbFBvc2l0aW9uYWwsIGtpbmQpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgKytwYXJhbWV0ZXJDb3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgaWYgKCFvcHRpb25hbCgnXScsIG5leHQpKSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ10nKSk7CiAgICAgICAgICAvLyBTY2FubmVyIGd1YXJhbnRlZXMgYSBjbG9zaW5nIGJyYWNrZXQuCiAgICAgICAgICBuZXh0ID0gYmVnaW4uZW5kR3JvdXA7CiAgICAgICAgICB3aGlsZSAodG9rZW4ubmV4dCAhPSBuZXh0KSB7CiAgICAgICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgfQogICAgaWYgKHBhcmFtZXRlckNvdW50ID09IDApIHsKICAgICAgcmV3cml0ZUFuZFJlY292ZXIoCiAgICAgICAgICB0b2tlbiwKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VFbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdCwKICAgICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbigKICAgICAgICAgICAgICBUb2tlblR5cGUuSURFTlRJRklFUiwgJycsIHRva2VuLm5leHQuY2hhck9mZnNldCwgMCkpOwogICAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyKAogICAgICAgICAgdG9rZW4sIEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxQb3NpdGlvbmFsLCBraW5kKTsKICAgICAgKytwYXJhbWV0ZXJDb3VudDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnXScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMocGFyYW1ldGVyQ291bnQsIGJlZ2luLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGRlZmF1bHROYW1lZFBhcmFtZXRlcjoKICAvLy8gICBub3JtYWxGb3JtYWxQYXJhbWV0ZXIgKCc9JyBleHByZXNzaW9uKT8gfAogIC8vLyAgIG5vcm1hbEZvcm1hbFBhcmFtZXRlciAoJzonIGV4cHJlc3Npb24pPwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlT3B0aW9uYWxOYW1lZFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3snLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5PcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoYmVnaW4pOwogICAgaW50IHBhcmFtZXRlckNvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJ30nLCBuZXh0KSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRva2VuID0KICAgICAgICAgIHBhcnNlRm9ybWFsUGFyYW1ldGVyKHRva2VuLCBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsTmFtZWQsIGtpbmQpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgKytwYXJhbWV0ZXJDb3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgaWYgKCFvcHRpb25hbCgnfScsIG5leHQpKSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ30nKSk7CiAgICAgICAgICAvLyBTY2FubmVyIGd1YXJhbnRlZXMgYSBjbG9zaW5nIGJyYWNrZXQuCiAgICAgICAgICBuZXh0ID0gYmVnaW4uZW5kR3JvdXA7CiAgICAgICAgICB3aGlsZSAodG9rZW4ubmV4dCAhPSBuZXh0KSB7CiAgICAgICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgfQogICAgaWYgKHBhcmFtZXRlckNvdW50ID09IDApIHsKICAgICAgcmV3cml0ZUFuZFJlY292ZXIoCiAgICAgICAgICB0b2tlbiwKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VFbXB0eU5hbWVkUGFyYW1ldGVyTGlzdCwKICAgICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbigKICAgICAgICAgICAgICBUb2tlblR5cGUuSURFTlRJRklFUiwgJycsIHRva2VuLm5leHQuY2hhck9mZnNldCwgMCkpOwogICAgICB0b2tlbiA9CiAgICAgICAgICBwYXJzZUZvcm1hbFBhcmFtZXRlcih0b2tlbiwgRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkLCBraW5kKTsKICAgICAgKytwYXJhbWV0ZXJDb3VudDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnfScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMocGFyYW1ldGVyQ291bnQsIGJlZ2luLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHF1YWxpZmllZDoKICAvLy8gICBpZGVudGlmaWVyIHF1YWxpZmllZFJlc3QqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VRdWFsaWZpZWQoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQsCiAgICAgIElkZW50aWZpZXJDb250ZXh0IGNvbnRpbnVhdGlvbkNvbnRleHQpIHsKICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CiAgICB3aGlsZSAob3B0aW9uYWwoJy4nLCB0b2tlbi5uZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlUXVhbGlmaWVkUmVzdCh0b2tlbiwgY29udGludWF0aW9uQ29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHF1YWxpZmllZFJlc3RPcHQ6CiAgLy8vICAgcXVhbGlmaWVkUmVzdD8KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVF1YWxpZmllZFJlc3RPcHQoCiAgICAgIFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250aW51YXRpb25Db250ZXh0KSB7CiAgICBpZiAob3B0aW9uYWwoJy4nLCB0b2tlbi5uZXh0KSkgewogICAgICByZXR1cm4gcGFyc2VRdWFsaWZpZWRSZXN0KHRva2VuLCBjb250aW51YXRpb25Db250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICB9CgogIC8vLyBgYGAKICAvLy8gcXVhbGlmaWVkUmVzdDoKICAvLy8gICAnLicgaWRlbnRpZmllcgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlUXVhbGlmaWVkUmVzdChUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCcuJywgdG9rZW4pKTsKICAgIFRva2VuIHBlcmlvZCA9IHRva2VuOwogICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBjb250ZXh0KTsKICAgIGxpc3RlbmVyLmhhbmRsZVF1YWxpZmllZChwZXJpb2QpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gc2tpcEJsb2NrKFRva2VuIHRva2VuKSB7CiAgICAvLyBUaGUgc2Nhbm5lciBlbnN1cmVzIHRoYXQgYHtgIGFsd2F5cyBoYXMgYSBjbG9zaW5nIGB9YC4KICAgIHJldHVybiBlbnN1cmVCbG9jayh0b2tlbiwgbnVsbCwgbnVsbCkuZW5kR3JvdXA7CiAgfQoKICAvLy8gYGBgCiAgLy8vIGVudW1UeXBlOgogIC8vLyAgIG1ldGFkYXRhICdlbnVtJyBpZCAneycgbWV0YWRhdGEgaWQgWycsJyBtZXRhZGF0YSBpZF0qIFsnLCddICd9JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRW51bShUb2tlbiBlbnVtS2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdlbnVtJywgZW51bUtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luRW51bShlbnVtS2V5d29yZCk7CiAgICBUb2tlbiB0b2tlbiA9CiAgICAgICAgZW5zdXJlSWRlbnRpZmllcihlbnVtS2V5d29yZCwgSWRlbnRpZmllckNvbnRleHQuZW51bURlY2xhcmF0aW9uKTsKICAgIFRva2VuIGxlZnRCcmFjZSA9IHRva2VuLm5leHQ7CiAgICBpbnQgY291bnQgPSAwOwogICAgaWYgKG9wdGlvbmFsKCd7JywgbGVmdEJyYWNlKSkgewogICAgICB0b2tlbiA9IGxlZnRCcmFjZTsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAob3B0aW9uYWwoJ30nLCBuZXh0KSkgewogICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgaWYgKGNvdW50ID09IDApIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgZmFzdGEubWVzc2FnZUVudW1EZWNsYXJhdGlvbkVtcHR5KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB0b2tlbiA9IHBhcnNlTWV0YWRhdGFTdGFyKHRva2VuKTsKICAgICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmVudW1WYWx1ZURlY2xhcmF0aW9uKTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBjb3VudCsrOwogICAgICAgIGlmIChvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnfScsIG5leHQpKSB7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIFRva2VuIGVuZEdyb3VwID0gbGVmdEJyYWNlLmVuZEdyb3VwOwogICAgICAgICAgaWYgKGVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgIC8vIFRoZSBzY2FubmVyIGRpZCBub3QgcGxhY2UgdGhlIHN5bnRoZXRpYyAnfScgY29ycmVjdGx5LgogICAgICAgICAgICB0b2tlbiA9IHJld3JpdGVyLm1vdmVTeW50aGV0aWModG9rZW4sIGVuZEdyb3VwKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGlkZW50aWZpZXIsIGFzc3VtZSBhIG1pc3NpbmcgY29tbWEuCiAgICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBpbXByb3ZlZCByZWNvdmVyeSBmb3IgbWlzc2luZyBgfWAKICAgICAgICAgICAgLy8gYm90aCBoZXJlIGFuZCB3aGVuIHRoZSBzY2FubmVyIGluc2VydHMgYSBzeW50aGV0aWMgYH1gCiAgICAgICAgICAgIC8vIGZvciBzaXR1YXRpb25zIHN1Y2ggYXMgYGVudW0gTGV0dGVyIHthLCBiICAgTGV0dGVyIGU7YC4KICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnLCcpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhc3N1bWUgYSBtaXNzaW5nIGB9YCBhbmQgZXhpdCB0aGUgbG9vcAogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCd9JykpOwogICAgICAgICAgICB0b2tlbiA9IGxlZnRCcmFjZS5lbmRHcm91cDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogbWVyZ2UgdGhpcyBlcnJvciBtZXNzYWdlIHdpdGggbWlzc2luZyBjbGFzcy9taXhpbiBib2R5CiAgICAgIGxlZnRCcmFjZSA9IGVuc3VyZUJsb2NrKHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkRW51bUJvZHksIG51bGwpOwogICAgICB0b2tlbiA9IGxlZnRCcmFjZS5lbmRHcm91cDsKICAgIH0KICAgIGFzc2VydChvcHRpb25hbCgnfScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRFbnVtKGVudW1LZXl3b3JkLCBsZWZ0QnJhY2UsIGNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gY2xhc3NLZXl3b3JkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2NsYXNzJywgY2xhc3NLZXl3b3JkKSk7CiAgICBUb2tlbiBiZWdpbiA9IGFic3RyYWN0VG9rZW4gPz8gY2xhc3NLZXl3b3JkOwogICAgbGlzdGVuZXIuYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uKGJlZ2luKTsKICAgIFRva2VuIG5hbWUgPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgIGNsYXNzS2V5d29yZCwgSWRlbnRpZmllckNvbnRleHQuY2xhc3NPck1peGluT3JFeHRlbnNpb25EZWNsYXJhdGlvbik7CiAgICBUb2tlbiB0b2tlbiA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyhuYW1lLCB0cnVlKS5wYXJzZVZhcmlhYmxlcyhuYW1lLCB0aGlzKTsKICAgIGlmIChvcHRpb25hbCgnPScsIHRva2VuLm5leHQpKSB7CiAgICAgIGxpc3RlbmVyLmJlZ2luTmFtZWRNaXhpbkFwcGxpY2F0aW9uKGJlZ2luLCBhYnN0cmFjdFRva2VuLCBuYW1lKTsKICAgICAgcmV0dXJuIHBhcnNlTmFtZWRNaXhpbkFwcGxpY2F0aW9uKHRva2VuLCBiZWdpbiwgY2xhc3NLZXl3b3JkKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmJlZ2luQ2xhc3NEZWNsYXJhdGlvbihiZWdpbiwgYWJzdHJhY3RUb2tlbiwgbmFtZSk7CiAgICAgIHJldHVybiBwYXJzZUNsYXNzKHRva2VuLCBiZWdpbiwgY2xhc3NLZXl3b3JkKTsKICAgIH0KICB9CgogIFRva2VuIHBhcnNlTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICBUb2tlbiB0b2tlbiwgVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCkgewogICAgVG9rZW4gZXF1YWxzID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc9JywgZXF1YWxzKSk7CiAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKHRva2VuLCB0cnVlKS5lbnN1cmVUeXBlTm90Vm9pZCh0b2tlbiwgdGhpcyk7CiAgICB0b2tlbiA9IHBhcnNlTWl4aW5BcHBsaWNhdGlvblJlc3QodG9rZW4pOwogICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCdpbXBsZW1lbnRzJywgdG9rZW4ubmV4dCkpIHsKICAgICAgaW1wbGVtZW50c0tleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgICB0b2tlbiA9IHBhcnNlVHlwZUxpc3QoaW1wbGVtZW50c0tleXdvcmQpOwogICAgfQogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICAgIGJlZ2luLCBjbGFzc0tleXdvcmQsIGVxdWFscywgaW1wbGVtZW50c0tleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSB0aGUgcG9ydGlvbiBvZiBhIGNsYXNzIGRlY2xhcmF0aW9uIChub3QgYSBtaXhpbiBhcHBsaWNhdGlvbikgdGhhdAogIC8vLyBmb2xsb3dzIHRoZSBlbmQgb2YgdGhlIHR5cGUgcGFyYW1ldGVycy4KICAvLy8KICAvLy8gYGBgCiAgLy8vIGNsYXNzRGVmaW5pdGlvbjoKICAvLy8gICBtZXRhZGF0YSBhYnN0cmFjdD8gJ2NsYXNzJyBpZGVudGlmaWVyIHR5cGVQYXJhbWV0ZXJzPwogIC8vLyAgICAgICAoc3VwZXJjbGFzcyBtaXhpbnM/KT8gaW50ZXJmYWNlcz8KICAvLy8gICAgICAgJ3snIChtZXRhZGF0YSBjbGFzc01lbWJlckRlZmluaXRpb24pKiAnfScgfAogIC8vLyAgIG1ldGFkYXRhIGFic3RyYWN0PyAnY2xhc3MnIG1peGluQXBwbGljYXRpb25DbGFzcwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ2xhc3MoVG9rZW4gdG9rZW4sIFRva2VuIGJlZ2luLCBUb2tlbiBjbGFzc0tleXdvcmQpIHsKICAgIFRva2VuIHN0YXJ0ID0gdG9rZW47CiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NIZWFkZXJPcHQodG9rZW4sIGJlZ2luLCBjbGFzc0tleXdvcmQpOwogICAgaWYgKCFvcHRpb25hbCgneycsIHRva2VuLm5leHQpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIHRva2VuID0gcGFyc2VDbGFzc0hlYWRlclJlY292ZXJ5KHN0YXJ0LCBiZWdpbiwgY2xhc3NLZXl3b3JkKTsKICAgICAgZW5zdXJlQmxvY2sodG9rZW4sIG51bGwsICdjbGFzcyBkZWNsYXJhdGlvbicpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZUNsYXNzT3JNaXhpbkJvZHkoQ2xhc3NLaW5kLkNsYXNzLCB0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRDbGFzc0RlY2xhcmF0aW9uKGJlZ2luLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUNsYXNzSGVhZGVyT3B0KFRva2VuIHRva2VuLCBUb2tlbiBiZWdpbiwgVG9rZW4gY2xhc3NLZXl3b3JkKSB7CiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NFeHRlbmRzT3B0KHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VXaXRoQ2xhdXNlT3B0KHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5JbXBsZW1lbnRzT3B0KHRva2VuKTsKICAgIFRva2VuIG5hdGl2ZVRva2VuOwogICAgaWYgKG9wdGlvbmFsKCduYXRpdmUnLCB0b2tlbi5uZXh0KSkgewogICAgICBuYXRpdmVUb2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIHRva2VuID0gcGFyc2VOYXRpdmVDbGF1c2UodG9rZW4pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlQ2xhc3NIZWFkZXIoYmVnaW4sIGNsYXNzS2V5d29yZCwgbmF0aXZlVG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFJlY292ZXIgZ2l2ZW4gb3V0LW9mLW9yZGVyIGNsYXVzZXMgaW4gYSBjbGFzcyBoZWFkZXIuCiAgVG9rZW4gcGFyc2VDbGFzc0hlYWRlclJlY292ZXJ5KFRva2VuIHRva2VuLCBUb2tlbiBiZWdpbiwgVG9rZW4gY2xhc3NLZXl3b3JkKSB7CiAgICBmaW5hbCBwcmltYXJ5TGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgIGZpbmFsIHJlY292ZXJ5TGlzdGVuZXIgPSBuZXcgQ2xhc3NIZWFkZXJSZWNvdmVyeUxpc3RlbmVyKCk7CgogICAgLy8gUmVwYXJzZSB0byBkZXRlcm1pbmUgd2hpY2ggY2xhdXNlcyBoYXZlIGFscmVhZHkgYmVlbiBwYXJzZWQKICAgIC8vIGJ1dCBpbnRlcmNlcHQgdGhlIGV2ZW50cyBzbyB0aGV5IGFyZSBub3Qgc2VudCB0byB0aGUgcHJpbWFyeSBsaXN0ZW5lci4KICAgIGxpc3RlbmVyID0gcmVjb3ZlcnlMaXN0ZW5lcjsKICAgIHRva2VuID0gcGFyc2VDbGFzc0hlYWRlck9wdCh0b2tlbiwgYmVnaW4sIGNsYXNzS2V5d29yZCk7CiAgICBib29sIGhhc0V4dGVuZHMgPSByZWNvdmVyeUxpc3RlbmVyLmV4dGVuZHNLZXl3b3JkICE9IG51bGw7CiAgICBib29sIGhhc0ltcGxlbWVudHMgPSByZWNvdmVyeUxpc3RlbmVyLmltcGxlbWVudHNLZXl3b3JkICE9IG51bGw7CiAgICBib29sIGhhc1dpdGggPSByZWNvdmVyeUxpc3RlbmVyLndpdGhLZXl3b3JkICE9IG51bGw7CgogICAgLy8gVXBkYXRlIHRoZSByZWNvdmVyeSBsaXN0ZW5lciB0byBmb3J3YXJkIHN1YnNlcXVlbnQgZXZlbnRzCiAgICAvLyB0byB0aGUgcHJpbWFyeSBsaXN0ZW5lci4KICAgIHJlY292ZXJ5TGlzdGVuZXIubGlzdGVuZXIgPSBwcmltYXJ5TGlzdGVuZXI7CgogICAgLy8gUGFyc2UgYWRkaXRpb25hbCBvdXQtb2Ytb3JkZXIgY2xhdXNlcwogICAgVG9rZW4gc3RhcnQ7CiAgICBkbyB7CiAgICAgIHN0YXJ0ID0gdG9rZW47CgogICAgICAvLyBDaGVjayBmb3IgZXh0cmFuZW91cyB0b2tlbiBpbiB0aGUgbWlkZGxlIG9mIGEgY2xhc3MgaGVhZGVyLgogICAgICB0b2tlbiA9IHNraXBVbmV4cGVjdGVkVG9rZW5PcHQoCiAgICAgICAgICB0b2tlbiwgY29uc3QgPFN0cmluZz5bJ2V4dGVuZHMnLCAnd2l0aCcsICdpbXBsZW1lbnRzJywgJ3snXSk7CgogICAgICAvLyBEdXJpbmcgcmVjb3ZlcnksIGNsYXVzZXMgYXJlIHBhcnNlZCBpbiB0aGUgc2FtZSBvcmRlcgogICAgICAvLyBhbmQgZ2VuZXJhdGUgdGhlIHNhbWUgZXZlbnRzIGFzIGluIHRoZSBwYXJzZUNsYXNzSGVhZGVyIG1ldGhvZCBhYm92ZS4KICAgICAgcmVjb3ZlcnlMaXN0ZW5lci5jbGVhcigpOwoKICAgICAgaWYgKHRva2VuLm5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyICYmCiAgICAgICAgICBjb25zdCBbJ2V4dGVuZCcsICdvbiddLmNvbnRhaW5zKHRva2VuLm5leHQubGV4ZW1lKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLm5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJbnN0ZWFkLndpdGhBcmd1bWVudHMoJ2V4dGVuZHMnKSk7CiAgICAgICAgVG9rZW4gaW5jb3JyZWN0RXh0ZW5kc0tleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgICAgIHRva2VuID0gY29tcHV0ZVR5cGUoaW5jb3JyZWN0RXh0ZW5kc0tleXdvcmQsIHRydWUpCiAgICAgICAgICAgIC5lbnN1cmVUeXBlTm90Vm9pZChpbmNvcnJlY3RFeHRlbmRzS2V5d29yZCwgdGhpcyk7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlQ2xhc3NFeHRlbmRzKGluY29ycmVjdEV4dGVuZHNLZXl3b3JkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0b2tlbiA9IHBhcnNlQ2xhc3NFeHRlbmRzT3B0KHRva2VuKTsKICAgICAgfQoKICAgICAgaWYgKHJlY292ZXJ5TGlzdGVuZXIuZXh0ZW5kc0tleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChoYXNFeHRlbmRzKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIHJlY292ZXJ5TGlzdGVuZXIuZXh0ZW5kc0tleXdvcmQsIGZhc3RhLm1lc3NhZ2VNdWx0aXBsZUV4dGVuZHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaGFzV2l0aCkgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHJlY292ZXJ5TGlzdGVuZXIuZXh0ZW5kc0tleXdvcmQsCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlV2l0aEJlZm9yZUV4dGVuZHMpOwogICAgICAgICAgfSBlbHNlIGlmIChoYXNJbXBsZW1lbnRzKSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IocmVjb3ZlcnlMaXN0ZW5lci5leHRlbmRzS2V5d29yZCwKICAgICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlRXh0ZW5kcyk7CiAgICAgICAgICB9CiAgICAgICAgICBoYXNFeHRlbmRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRva2VuID0gcGFyc2VXaXRoQ2xhdXNlT3B0KHRva2VuKTsKCiAgICAgIGlmIChyZWNvdmVyeUxpc3RlbmVyLndpdGhLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoaGFzV2l0aCkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICByZWNvdmVyeUxpc3RlbmVyLndpdGhLZXl3b3JkLCBmYXN0YS5tZXNzYWdlTXVsdGlwbGVXaXRoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGhhc0ltcGxlbWVudHMpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihyZWNvdmVyeUxpc3RlbmVyLndpdGhLZXl3b3JkLAogICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZUltcGxlbWVudHNCZWZvcmVXaXRoKTsKICAgICAgICAgIH0KICAgICAgICAgIGhhc1dpdGggPSB0cnVlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdG9rZW4gPSBwYXJzZUNsYXNzT3JNaXhpbkltcGxlbWVudHNPcHQodG9rZW4pOwoKICAgICAgaWYgKHJlY292ZXJ5TGlzdGVuZXIuaW1wbGVtZW50c0tleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChoYXNJbXBsZW1lbnRzKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHJlY292ZXJ5TGlzdGVuZXIuaW1wbGVtZW50c0tleXdvcmQsCiAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZU11bHRpcGxlSW1wbGVtZW50cyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGhhc0ltcGxlbWVudHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgbGlzdGVuZXIuaGFuZGxlUmVjb3ZlckNsYXNzSGVhZGVyKCk7CgogICAgICAvLyBFeGl0IGlmIGEgY2xhc3MgYm9keSBpcyBkZXRlY3RlZCwgb3IgaWYgbm8gcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZQogICAgfSB3aGlsZSAoIW9wdGlvbmFsKCd7JywgdG9rZW4ubmV4dCkgJiYgc3RhcnQgIT0gdG9rZW4pOwoKICAgIGxpc3RlbmVyID0gcHJpbWFyeUxpc3RlbmVyOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VDbGFzc0V4dGVuZHNPcHQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCdleHRlbmRzJywgbmV4dCkpIHsKICAgICAgVG9rZW4gZXh0ZW5kc0tleXdvcmQgPSBuZXh0OwogICAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKG5leHQsIHRydWUpLmVuc3VyZVR5cGVOb3RWb2lkKG5leHQsIHRoaXMpOwogICAgICBsaXN0ZW5lci5oYW5kbGVDbGFzc0V4dGVuZHMoZXh0ZW5kc0tleXdvcmQpOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlKHRva2VuKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlQ2xhc3NFeHRlbmRzKG51bGwpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBpbXBsZW1lbnRzQ2xhdXNlOgogIC8vLyAgICdpbXBsZW1lbnRzJyB0eXBlTmFtZSAoJywnIHR5cGVOYW1lKSoKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUNsYXNzT3JNaXhpbkltcGxlbWVudHNPcHQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGltcGxlbWVudHNLZXl3b3JkOwogICAgaW50IGludGVyZmFjZXNDb3VudCA9IDA7CiAgICBpZiAob3B0aW9uYWwoJ2ltcGxlbWVudHMnLCB0b2tlbi5uZXh0KSkgewogICAgICBpbXBsZW1lbnRzS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICAgIGRvIHsKICAgICAgICB0b2tlbiA9CiAgICAgICAgICAgIGNvbXB1dGVUeXBlKHRva2VuLm5leHQsIHRydWUpLmVuc3VyZVR5cGVOb3RWb2lkKHRva2VuLm5leHQsIHRoaXMpOwogICAgICAgICsraW50ZXJmYWNlc0NvdW50OwogICAgICB9IHdoaWxlIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKTsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUNsYXNzT3JNaXhpbkltcGxlbWVudHMoaW1wbGVtZW50c0tleXdvcmQsIGludGVyZmFjZXNDb3VudCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2UgYSBtaXhpbiBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gYGBgCiAgLy8vIG1peGluRGVjbGFyYXRpb246CiAgLy8vICAgbWV0YWRhdGE/ICdtaXhpbicgW1NpbXBsZUlkZW50aWZpZXJdIFtUeXBlUGFyYW1ldGVyTGlzdF0/CiAgLy8vICAgICAgICBbT25DbGF1c2VdPyBbSW1wbGVtZW50c0NsYXVzZV0/ICd7JyBbQ2xhc3NNZW1iZXJdKiAnfScKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU1peGluKFRva2VuIG1peGluS2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdtaXhpbicsIG1peGluS2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uKG1peGluS2V5d29yZCk7CiAgICBUb2tlbiBuYW1lID0gZW5zdXJlSWRlbnRpZmllcigKICAgICAgICBtaXhpbktleXdvcmQsIElkZW50aWZpZXJDb250ZXh0LmNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uRGVjbGFyYXRpb24pOwogICAgVG9rZW4gaGVhZGVyU3RhcnQgPQogICAgICAgIGNvbXB1dGVUeXBlUGFyYW1PckFyZyhuYW1lLCB0cnVlKS5wYXJzZVZhcmlhYmxlcyhuYW1lLCB0aGlzKTsKICAgIGxpc3RlbmVyLmJlZ2luTWl4aW5EZWNsYXJhdGlvbihtaXhpbktleXdvcmQsIG5hbWUpOwogICAgVG9rZW4gdG9rZW4gPSBwYXJzZU1peGluSGVhZGVyT3B0KGhlYWRlclN0YXJ0LCBtaXhpbktleXdvcmQpOwogICAgaWYgKCFvcHRpb25hbCgneycsIHRva2VuLm5leHQpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIHRva2VuID0gcGFyc2VNaXhpbkhlYWRlclJlY292ZXJ5KHRva2VuLCBtaXhpbktleXdvcmQsIGhlYWRlclN0YXJ0KTsKICAgICAgZW5zdXJlQmxvY2sodG9rZW4sIG51bGwsICdtaXhpbiBkZWNsYXJhdGlvbicpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZUNsYXNzT3JNaXhpbkJvZHkoQ2xhc3NLaW5kLk1peGluLCB0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRNaXhpbkRlY2xhcmF0aW9uKG1peGluS2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VNaXhpbkhlYWRlck9wdChUb2tlbiB0b2tlbiwgVG9rZW4gbWl4aW5LZXl3b3JkKSB7CiAgICB0b2tlbiA9IHBhcnNlTWl4aW5Pbk9wdCh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NPck1peGluSW1wbGVtZW50c09wdCh0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVNaXhpbkhlYWRlcihtaXhpbktleXdvcmQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VNaXhpbkhlYWRlclJlY292ZXJ5KAogICAgICBUb2tlbiB0b2tlbiwgVG9rZW4gbWl4aW5LZXl3b3JkLCBUb2tlbiBoZWFkZXJTdGFydCkgewogICAgZmluYWwgcHJpbWFyeUxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICBmaW5hbCByZWNvdmVyeUxpc3RlbmVyID0gbmV3IE1peGluSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lcigpOwoKICAgIC8vIFJlcGFyc2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGNsYXVzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkCiAgICAvLyBidXQgaW50ZXJjZXB0IHRoZSBldmVudHMgc28gdGhleSBhcmUgbm90IHNlbnQgdG8gdGhlIHByaW1hcnkgbGlzdGVuZXIuCiAgICBsaXN0ZW5lciA9IHJlY292ZXJ5TGlzdGVuZXI7CiAgICB0b2tlbiA9IHBhcnNlTWl4aW5IZWFkZXJPcHQoaGVhZGVyU3RhcnQsIG1peGluS2V5d29yZCk7CiAgICBib29sIGhhc09uID0gcmVjb3ZlcnlMaXN0ZW5lci5vbktleXdvcmQgIT0gbnVsbDsKICAgIGJvb2wgaGFzSW1wbGVtZW50cyA9IHJlY292ZXJ5TGlzdGVuZXIuaW1wbGVtZW50c0tleXdvcmQgIT0gbnVsbDsKCiAgICAvLyBVcGRhdGUgdGhlIHJlY292ZXJ5IGxpc3RlbmVyIHRvIGZvcndhcmQgc3Vic2VxdWVudCBldmVudHMKICAgIC8vIHRvIHRoZSBwcmltYXJ5IGxpc3RlbmVyLgogICAgcmVjb3ZlcnlMaXN0ZW5lci5saXN0ZW5lciA9IHByaW1hcnlMaXN0ZW5lcjsKCiAgICAvLyBQYXJzZSBhZGRpdGlvbmFsIG91dC1vZi1vcmRlciBjbGF1c2VzCiAgICBUb2tlbiBzdGFydDsKICAgIGRvIHsKICAgICAgc3RhcnQgPSB0b2tlbjsKCiAgICAgIC8vIENoZWNrIGZvciBleHRyYW5lb3VzIHRva2VuIGluIHRoZSBtaWRkbGUgb2YgYSBjbGFzcyBoZWFkZXIuCiAgICAgIHRva2VuID0gc2tpcFVuZXhwZWN0ZWRUb2tlbk9wdCgKICAgICAgICAgIHRva2VuLCBjb25zdCA8U3RyaW5nPlsnb24nLCAnaW1wbGVtZW50cycsICd7J10pOwoKICAgICAgLy8gRHVyaW5nIHJlY292ZXJ5LCBjbGF1c2VzIGFyZSBwYXJzZWQgaW4gdGhlIHNhbWUgb3JkZXIgYW5kCiAgICAgIC8vIGdlbmVyYXRlIHRoZSBzYW1lIGV2ZW50cyBhcyBpbiB0aGUgcGFyc2VNaXhpbkhlYWRlck9wdCBtZXRob2QgYWJvdmUuCiAgICAgIHJlY292ZXJ5TGlzdGVuZXIuY2xlYXIoKTsKCiAgICAgIGlmICh0b2tlbi5uZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllciAmJgogICAgICAgICAgY29uc3QgWydleHRlbmQnLCAnZXh0ZW5kcyddLmNvbnRhaW5zKHRva2VuLm5leHQubGV4ZW1lKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLm5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJbnN0ZWFkLndpdGhBcmd1bWVudHMoJ29uJykpOwogICAgICAgIHRva2VuID0gcGFyc2VNaXhpbk9uKHRva2VuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0b2tlbiA9IHBhcnNlTWl4aW5Pbk9wdCh0b2tlbik7CiAgICAgIH0KCiAgICAgIGlmIChyZWNvdmVyeUxpc3RlbmVyLm9uS2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgaWYgKGhhc09uKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIHJlY292ZXJ5TGlzdGVuZXIub25LZXl3b3JkLCBmYXN0YS5tZXNzYWdlTXVsdGlwbGVPbkNsYXVzZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaGFzSW1wbGVtZW50cykgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgcmVjb3ZlcnlMaXN0ZW5lci5vbktleXdvcmQsIGZhc3RhLm1lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlT24pOwogICAgICAgICAgfQogICAgICAgICAgaGFzT24gPSB0cnVlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdG9rZW4gPSBwYXJzZUNsYXNzT3JNaXhpbkltcGxlbWVudHNPcHQodG9rZW4pOwoKICAgICAgaWYgKHJlY292ZXJ5TGlzdGVuZXIuaW1wbGVtZW50c0tleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChoYXNJbXBsZW1lbnRzKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHJlY292ZXJ5TGlzdGVuZXIuaW1wbGVtZW50c0tleXdvcmQsCiAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZU11bHRpcGxlSW1wbGVtZW50cyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGhhc0ltcGxlbWVudHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgbGlzdGVuZXIuaGFuZGxlUmVjb3Zlck1peGluSGVhZGVyKCk7CgogICAgICAvLyBFeGl0IGlmIGEgbWl4aW4gYm9keSBpcyBkZXRlY3RlZCwgb3IgaWYgbm8gcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZQogICAgfSB3aGlsZSAoIW9wdGlvbmFsKCd7JywgdG9rZW4ubmV4dCkgJiYgc3RhcnQgIT0gdG9rZW4pOwoKICAgIGxpc3RlbmVyID0gcHJpbWFyeUxpc3RlbmVyOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBvbkNsYXVzZToKICAvLy8gICAnb24nIHR5cGVOYW1lICgnLCcgdHlwZU5hbWUpKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTWl4aW5Pbk9wdChUb2tlbiB0b2tlbikgewogICAgaWYgKCFvcHRpb25hbCgnb24nLCB0b2tlbi5uZXh0KSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVNaXhpbk9uKG51bGwsIDApOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgICByZXR1cm4gcGFyc2VNaXhpbk9uKHRva2VuKTsKICB9CgogIFRva2VuIHBhcnNlTWl4aW5PbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gb25LZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgIC8vIER1cmluZyByZWNvdmVyeSwgdGhlIFtvbktleXdvcmRdIGNhbiBiZSAiZXh0ZW5kIiBvciAiZXh0ZW5kcyIKICAgIGFzc2VydChvcHRpb25hbCgnb24nLCBvbktleXdvcmQpIHx8CiAgICAgICAgb3B0aW9uYWwoJ2V4dGVuZHMnLCBvbktleXdvcmQpIHx8CiAgICAgICAgb25LZXl3b3JkLmxleGVtZSA9PSAnZXh0ZW5kJyk7CiAgICBpbnQgdHlwZUNvdW50ID0gMDsKICAgIGRvIHsKICAgICAgdG9rZW4gPSBjb21wdXRlVHlwZSh0b2tlbi5uZXh0LCB0cnVlKS5lbnN1cmVUeXBlTm90Vm9pZCh0b2tlbi5uZXh0LCB0aGlzKTsKICAgICAgKyt0eXBlQ291bnQ7CiAgICB9IHdoaWxlIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKTsKICAgIGxpc3RlbmVyLmhhbmRsZU1peGluT24ob25LZXl3b3JkLCB0eXBlQ291bnQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyAnZXh0ZW5zaW9uJyA8aWRlbnRpZmllcj4/IDx0eXBlUGFyYW1ldGVycz4/ICdvbicgPHR5cGU+ICc/Jz8KICAvLyAgIGB7JwogIC8vICAgICA8bWVtYmVyRGVjbGFyYXRpb24+KgogIC8vICAgYH0nCiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRXh0ZW5zaW9uKFRva2VuIGV4dGVuc2lvbktleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnZXh0ZW5zaW9uJywgZXh0ZW5zaW9uS2V5d29yZCkpOwogICAgVG9rZW4gdG9rZW4gPSBleHRlbnNpb25LZXl3b3JkOwogICAgVG9rZW4gbmFtZSA9IHRva2VuLm5leHQ7CiAgICBpZiAobmFtZS5pc0lkZW50aWZpZXIgJiYgIW9wdGlvbmFsKCdvbicsIG5hbWUpKSB7CiAgICAgIHRva2VuID0gbmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIG5hbWUgPSBudWxsOwogICAgfQogICAgdG9rZW4gPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcodG9rZW4sIHRydWUpLnBhcnNlVmFyaWFibGVzKHRva2VuLCB0aGlzKTsKICAgIGxpc3RlbmVyLmJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb24oZXh0ZW5zaW9uS2V5d29yZCwgbmFtZSk7CiAgICBUb2tlbiBvbktleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnb24nLCBvbktleXdvcmQpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIGlmIChvcHRpb25hbCgnZXh0ZW5kcycsIG9uS2V5d29yZCkgfHwKICAgICAgICAgIG9wdGlvbmFsKCdpbXBsZW1lbnRzJywgb25LZXl3b3JkKSB8fAogICAgICAgICAgb3B0aW9uYWwoJ3dpdGgnLCBvbktleXdvcmQpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgb25LZXl3b3JkLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSW5zdGVhZC53aXRoQXJndW1lbnRzKCdvbicpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJ29uJykpOwogICAgICAgIG9uS2V5d29yZCA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0tleXdvcmQodG9rZW4sIEtleXdvcmQuT04pOwogICAgICB9CiAgICB9CiAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKG9uS2V5d29yZCwgdHJ1ZSk7CiAgICB0b2tlbiA9IHR5cGVJbmZvLmVuc3VyZVR5cGVPclZvaWQob25LZXl3b3JkLCB0aGlzKTsKICAgIGlmICghb3B0aW9uYWwoJ3snLCB0b2tlbi5uZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgd2hpbGUgKCFuZXh0LmlzRW9mKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCcsJywgbmV4dCkgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJ2V4dGVuZHMnLCBuZXh0KSB8fAogICAgICAgICAgICBvcHRpb25hbCgnaW1wbGVtZW50cycsIG5leHQpIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCdvbicsIG5leHQpIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCd3aXRoJywgbmV4dCkpIHsKICAgICAgICAgIC8vIFJlcG9ydCBhbiBlcnJvciBhbmQgc2tpcCBgLGAgb3Igc3BlY2lmaWMga2V5d29yZAogICAgICAgICAgLy8gb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhbiBpZGVudGlmaWVyCiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBlbnN1cmVCbG9jayh0b2tlbiwgbnVsbCwgJ2V4dGVuc2lvbiBkZWNsYXJhdGlvbicpOwogICAgfQogICAgLy8gVE9ETyhkYW5ydWJlbCk6IERvIG5vdCBhbGxvdyBmaWVsZHMgb3IgY29uc3RydWN0b3JzCiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NPck1peGluQm9keShDbGFzc0tpbmQuRXh0ZW5zaW9uLCB0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRFeHRlbnNpb25EZWNsYXJhdGlvbihleHRlbnNpb25LZXl3b3JkLCBvbktleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlU3RyaW5nUGFydChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAobmV4dC5raW5kICE9IFNUUklOR19UT0tFTikgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRTdHJpbmcpOwogICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0VG9rZW4odG9rZW4sCiAgICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgJycsIG5leHQuY2hhck9mZnNldCkpOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlU3RyaW5nUGFydChuZXh0KTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgLy8vIEluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIGFmdGVyIHRoZSBnaXZlbiBbdG9rZW5dIGFuZCBjcmVhdGUgYW4gZXJyb3IKICAvLy8gbWVzc2FnZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gW2NvbnRleHRdLiBSZXR1cm4gdGhlIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRoYXQKICAvLy8gd2FzIGluc2VydGVkLgogIFRva2VuIGluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQsCiAgICAgIHtNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIG1lc3NhZ2VPblRva2VufSkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG1lc3NhZ2VPblRva2VuID8/IG5leHQsCiAgICAgICAgbWVzc2FnZSA/PyBjb250ZXh0LnJlY292ZXJ5VGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuZXh0KSk7CiAgICByZXR1cm4gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgfQoKICAvLy8gUGFyc2UgYSBzaW1wbGUgaWRlbnRpZmllciBhdCB0aGUgZ2l2ZW4gW3Rva2VuXSwgYW5kIHJldHVybiB0aGUgaWRlbnRpZmllcgogIC8vLyB0aGF0IHdhcyBwYXJzZWQuCiAgLy8vCiAgLy8vIElmIHRoZSB0b2tlbiBpcyBub3QgYW4gaWRlbnRpZmllciwgb3IgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB1c2UgYXMgYW4KICAvLy8gaWRlbnRpZmllciBpbiB0aGUgZ2l2ZW4gW2NvbnRleHRdLCBjcmVhdGUgYSBzeW50aGV0aWMgaWRlbnRpZmllciwgcmVwb3J0CiAgLy8vIGFuIGVycm9yLCBhbmQgcmV0dXJuIHRoZSBzeW50aGV0aWMgaWRlbnRpZmllci4KICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBhc3NlcnQoY29udGV4dCAhPSBudWxsKTsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgaWYgKGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKSB7CiAgICAgIGlkZW50aWZpZXIgPSBjb250ZXh0LmVuc3VyZUlkZW50aWZpZXIodG9rZW4sIHRoaXMpOwogICAgICBhc3NlcnQoaWRlbnRpZmllciAhPSBudWxsKTsKICAgICAgYXNzZXJ0KGlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKTsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUlkZW50aWZpZXIoaWRlbnRpZmllciwgY29udGV4dCk7CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9CgogIGJvb2wgbm90RW9mT3JWYWx1ZShTdHJpbmcgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gIWlkZW50aWNhbCh0b2tlbi5raW5kLCBFT0ZfVE9LRU4pICYmCiAgICAgICAgIWlkZW50aWNhbCh2YWx1ZSwgdG9rZW4uc3RyaW5nVmFsdWUpOwogIH0KCiAgVG9rZW4gcGFyc2VUeXBlVmFyaWFibGVzT3B0KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuLCB0cnVlKS5wYXJzZVZhcmlhYmxlcyh0b2tlbiwgdGhpcyk7CiAgfQoKICAvLy8gUGFyc2UgYSB0b3AgbGV2ZWwgZmllbGQgb3IgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgaW52b2tlZCBmcm9tIG91dHNpZGUgdGhlIHBhcnNlci4gQXMgYSByZXN1bHQsIHRoaXMKICAvLy8gbWV0aG9kIHRha2VzIHRoZSBuZXh0IHRva2VuIHRvIGJlIGNvbnN1bWVkIHJhdGhlciB0aGFuIHRoZSBsYXN0IGNvbnN1bWVkCiAgLy8vIHRva2VuIGFuZCByZXR1cm5zIHRoZSB0b2tlbiBhZnRlciB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbiByYXRoZXIgdGhhbiB0aGUKICAvLy8gbGFzdCBjb25zdW1lZCB0b2tlbi4KICBUb2tlbiBwYXJzZVRvcExldmVsTWVtYmVyKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHBhcnNlTWV0YWRhdGFTdGFyKHN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pKTsKICAgIHJldHVybiBwYXJzZVRvcExldmVsTWVtYmVySW1wbCh0b2tlbikubmV4dDsKICB9CgogIFRva2VuIHBhcnNlVG9wTGV2ZWxNZW1iZXJJbXBsKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBiZWZvcmVTdGFydCA9IHRva2VuOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5iZWdpblRvcExldmVsTWVtYmVyKG5leHQpOwoKICAgIFRva2VuIGV4dGVybmFsVG9rZW47CiAgICBUb2tlbiBsYXRlVG9rZW47CiAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3Q7CgogICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdleHRlcm5hbCcsIG5leHQpKSB7CiAgICAgICAgZXh0ZXJuYWxUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgIGlmIChvcHRpb25hbCgnZmluYWwnLCBuZXh0KSkgewogICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkpIHsKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2NvbnN0JywgbmV4dCkpIHsKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2xhdGUnLCBuZXh0KSkgewogICAgICAgICAgbGF0ZVRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSAmJiBvcHRpb25hbCgnZmluYWwnLCBuZXh0KSkgewogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJgogICAgICAgICAgICAgIChvcHRpb25hbCgnZmluYWwnLCBuZXh0KSB8fAogICAgICAgICAgICAgICAgICBvcHRpb25hbCgndmFyJywgbmV4dCkgfHwKICAgICAgICAgICAgICAgICAgb3B0aW9uYWwoJ2NvbnN0JywgbmV4dCkpKSB7CiAgICAgICAgICAgIC8vIElmIGFub3RoZXIgYHZhcmAsIGBmaW5hbGAsIG9yIGBjb25zdGAgdGhlbiBmYWxsIHRocm91Z2gKICAgICAgICAgICAgLy8gdG8gcGFyc2UgdGhhdCBhcyBwYXJ0IG9mIHRoZSBuZXh0IHRvcCBsZXZlbCBkZWNsYXJhdGlvbi4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0IGNvbnRleHQgPSBuZXcgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQodGhpcykKICAgICAgICAgICAgICAuLmV4dGVybmFsVG9rZW4gPSBleHRlcm5hbFRva2VuCiAgICAgICAgICAgICAgLi5sYXRlVG9rZW4gPSBsYXRlVG9rZW4KICAgICAgICAgICAgICAuLnZhckZpbmFsT3JDb25zdCA9IHZhckZpbmFsT3JDb25zdDsKCiAgICAgICAgICAgIHRva2VuID0gY29udGV4dC5wYXJzZVRvcExldmVsTW9kaWZpZXJzKHRva2VuKTsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CgogICAgICAgICAgICBleHRlcm5hbFRva2VuID0gY29udGV4dC5leHRlcm5hbFRva2VuOwogICAgICAgICAgICBsYXRlVG9rZW4gPSBjb250ZXh0LmxhdGVUb2tlbjsKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gY29udGV4dC52YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBUb2tlbiBiZWZvcmVUeXBlID0gdG9rZW47CiAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKHRva2VuLCBmYWxzZSwgdHJ1ZSk7CiAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKHRva2VuKTsKICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgIFRva2VuIGdldE9yU2V0OwogICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwodmFsdWUsICdnZXQnKSB8fCBpZGVudGljYWwodmFsdWUsICdzZXQnKSkgewogICAgICBpZiAobmV4dC5uZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgIGdldE9yU2V0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9CgogICAgaWYgKG5leHQudHlwZSAhPSBUb2tlblR5cGUuSURFTlRJRklFUikgewogICAgICB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdmYWN0b3J5JykgfHwgaWRlbnRpY2FsKHZhbHVlLCAnb3BlcmF0b3InKSkgewogICAgICAgIC8vIGBmYWN0b3J5YCBhbmQgYG9wZXJhdG9yYCBjYW4gYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyLgogICAgICAgIHZhbHVlID0gbmV4dC5uZXh0LnN0cmluZ1ZhbHVlOwogICAgICAgIGlmIChnZXRPclNldCA9PSBudWxsICYmCiAgICAgICAgICAgICFpZGVudGljYWwodmFsdWUsICcoJykgJiYKICAgICAgICAgICAgIWlkZW50aWNhbCh2YWx1ZSwgJ3snKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKHZhbHVlLCAnPCcpICYmCiAgICAgICAgICAgICFpZGVudGljYWwodmFsdWUsICc9PicpICYmCiAgICAgICAgICAgICFpZGVudGljYWwodmFsdWUsICc9JykgJiYKICAgICAgICAgICAgIWlkZW50aWNhbCh2YWx1ZSwgJzsnKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKHZhbHVlLCAnLCcpKSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2ZhY3RvcnknKSkgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgbmV4dCwgZmFzdGEubWVzc2FnZUZhY3RvcnlUb3BMZXZlbERlY2xhcmF0aW9uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZVRvcExldmVsT3BlcmF0b3IpOwogICAgICAgICAgICBpZiAobmV4dC5uZXh0LmlzT3BlcmF0b3IpIHsKICAgICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dC5uZXh0KSkgewogICAgICAgICAgICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICAgICAgICAgICAgICBuZXh0LCAnI3N5bnRoZXRpY19pZGVudGlmaWVyXyR7bmV4dC5jaGFyT2Zmc2V0fScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24obmV4dCk7CiAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICB9CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIGFuZCBjb250aW51ZSBwYXJzaW5nCiAgICAgIH0gZWxzZSBpZiAoIW5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBpZiAobmV4dC5pc0tleXdvcmQpIHsKICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBwYXJzZSB0aGUga2V5d29yZCBhcyB0aGUgaWRlbnRpZmllci4KICAgICAgICAgIC8vIGVuc3VyZUlkZW50aWZpZXIgd2lsbCByZXBvcnQgdGhlIGVycm9yLgogICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT0gYmVmb3JlU3RhcnQpIHsKICAgICAgICAgIC8vIEVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzLgogICAgICAgICAgcmV0dXJuIHBhcnNlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBMb29rcyBsaWtlIGEgZGVjbGFyYXRpb24gbWlzc2luZyBhbiBpZGVudGlmaWVyLgogICAgICAgICAgLy8gSW5zZXJ0IHN5bnRoZXRpYyBpZGVudGlmaWVyIGFuZCBmYWxsIHRocm91Z2guCiAgICAgICAgICBpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbik7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIEF0IHRoaXMgcG9pbnQsIGB0b2tlbmAgaXMgYmVmb3JlTmFtZS4KCiAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgaWYgKGdldE9yU2V0ICE9IG51bGwgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICcoJykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICd7JykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICc8JykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICcuJykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICc9PicpKSB7CiAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCkgewogICAgICAgIGlmIChvcHRpb25hbCgndmFyJywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VWYXJSZXR1cm5UeXBlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobGF0ZVRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBsYXRlVG9rZW4sIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgfQogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1ldGhvZChiZWZvcmVTdGFydCwgZXh0ZXJuYWxUb2tlbiwgYmVmb3JlVHlwZSwKICAgICAgICAgIHR5cGVJbmZvLCBnZXRPclNldCwgdG9rZW4ubmV4dCk7CiAgICB9CgogICAgaWYgKGdldE9yU2V0ICE9IG51bGwpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGdldE9yU2V0LCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICB9CiAgICByZXR1cm4gcGFyc2VGaWVsZHMoYmVmb3JlU3RhcnQsIGV4dGVybmFsVG9rZW4sIG51bGwsIG51bGwsIGxhdGVUb2tlbiwKICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGJlZm9yZVR5cGUsIHR5cGVJbmZvLCB0b2tlbi5uZXh0LCB0cnVlKTsKICB9CgogIFRva2VuIHBhcnNlRmllbGRzKAogICAgICBUb2tlbiBiZWZvcmVTdGFydCwKICAgICAgVG9rZW4gZXh0ZXJuYWxUb2tlbiwKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgVG9rZW4gYmVmb3JlVHlwZSwKICAgICAgVHlwZUluZm8gdHlwZUluZm8sCiAgICAgIFRva2VuIG5hbWUsCiAgICAgIGJvb2wgaXNUb3BMZXZlbCkgewogICAgaWYgKGV4dGVybmFsVG9rZW4gIT0gbnVsbCkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGV4dGVybmFsVG9rZW4sIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbEZpZWxkKTsKICAgIH0KICAgIGlmIChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsKSB7CiAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJiBvcHRpb25hbCgnZmluYWwnLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihjb3ZhcmlhbnRUb2tlbiwgZmFzdGEubWVzc2FnZUZpbmFsQW5kQ292YXJpYW50KTsKICAgICAgICBjb3ZhcmlhbnRUb2tlbiA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlSW5mbyA9PSBub1R5cGUpIHsKICAgICAgaWYgKHZhckZpbmFsT3JDb25zdCA9PSBudWxsICYmIGxhdGVUb2tlbiA9PSBudWxsKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuYW1lLCBmYXN0YS5tZXNzYWdlTWlzc2luZ0NvbnN0RmluYWxWYXJPclR5cGUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwgJiYgb3B0aW9uYWwoJ3ZhcicsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHZhckZpbmFsT3JDb25zdCwgZmFzdGEubWVzc2FnZVR5cGVBZnRlclZhcik7CiAgICAgIH0KICAgIH0KCiAgICBUb2tlbiB0b2tlbiA9IHR5cGVJbmZvLnBhcnNlVHlwZShiZWZvcmVUeXBlLCB0aGlzKTsKICAgIGFzc2VydCh0b2tlbi5uZXh0ID09IG5hbWUpOwoKICAgIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQgPSBpc1RvcExldmVsCiAgICAgICAgPyBJZGVudGlmaWVyQ29udGV4dC50b3BMZXZlbFZhcmlhYmxlRGVjbGFyYXRpb24KICAgICAgICA6IElkZW50aWZpZXJDb250ZXh0LmZpZWxkRGVjbGFyYXRpb247CiAgICBuYW1lID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CgogICAgaW50IGZpZWxkQ291bnQgPSAxOwogICAgdG9rZW4gPSBwYXJzZUZpZWxkSW5pdGlhbGl6ZXJPcHQoCiAgICAgICAgbmFtZSwgbmFtZSwgbGF0ZVRva2VuLCB2YXJGaW5hbE9yQ29uc3QsIGlzVG9wTGV2ZWwpOwogICAgd2hpbGUgKG9wdGlvbmFsKCcsJywgdG9rZW4ubmV4dCkpIHsKICAgICAgbmFtZSA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4ubmV4dCwgY29udGV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VGaWVsZEluaXRpYWxpemVyT3B0KAogICAgICAgICAgbmFtZSwgbmFtZSwgbGF0ZVRva2VuLCB2YXJGaW5hbE9yQ29uc3QsIGlzVG9wTGV2ZWwpOwogICAgICArK2ZpZWxkQ291bnQ7CiAgICB9CiAgICBUb2tlbiBzZW1pY29sb24gPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCc7Jywgc2VtaWNvbG9uKSkgewogICAgICB0b2tlbiA9IHNlbWljb2xvbjsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIGlmIChpc1RvcExldmVsICYmCiAgICAgICAgICBiZWZvcmVUeXBlLm5leHQuaXNJZGVudGlmaWVyICYmCiAgICAgICAgICBiZWZvcmVUeXBlLm5leHQubGV4ZW1lID09ICdleHRlbnNpb24nKSB7CiAgICAgICAgLy8gTG9va3MgbGlrZSBhbiBleHRlbnNpb24gbWV0aG9kCiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlbW92ZSB3aGVuIGV4dGVuc2lvbiBtZXRob2RzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQKICAgICAgICAvLyBiZWNhdXNlIHRoZW4gJ2V4dGVuc2lvbicgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIGJ1aWx0LWluCiAgICAgICAgLy8gYW5kIHRoaXMgY29kZSB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkCiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgYmVmb3JlVHlwZS5uZXh0LAogICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cygnZXh0ZW5zaW9uLW1ldGhvZHMnKSk7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbih0b2tlbiwgVG9rZW5UeXBlLlNFTUlDT0xPTik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNUb3BMZXZlbCkgewogICAgICBsaXN0ZW5lci5lbmRUb3BMZXZlbEZpZWxkcyhzdGF0aWNUb2tlbiwgY292YXJpYW50VG9rZW4sIGxhdGVUb2tlbiwKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwgZmllbGRDb3VudCwgYmVmb3JlU3RhcnQubmV4dCwgdG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuZW5kRmllbGRzKHN0YXRpY1Rva2VuLCBjb3ZhcmlhbnRUb2tlbiwgbGF0ZVRva2VuLAogICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmaWVsZENvdW50LCBiZWZvcmVTdGFydC5uZXh0LCB0b2tlbik7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVRvcExldmVsTWV0aG9kKFRva2VuIGJlZm9yZVN0YXJ0LCBUb2tlbiBleHRlcm5hbFRva2VuLAogICAgICBUb2tlbiBiZWZvcmVUeXBlLCBUeXBlSW5mbyB0eXBlSW5mbywgVG9rZW4gZ2V0T3JTZXQsIFRva2VuIG5hbWUpIHsKICAgIGxpc3RlbmVyLmJlZ2luVG9wTGV2ZWxNZXRob2QoYmVmb3JlU3RhcnQsIGV4dGVybmFsVG9rZW4pOwoKICAgIFRva2VuIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgYXNzZXJ0KHRva2VuLm5leHQgPT0gKGdldE9yU2V0ID8/IG5hbWUpKTsKICAgIG5hbWUgPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgIGdldE9yU2V0ID8/IHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50b3BMZXZlbEZ1bmN0aW9uRGVjbGFyYXRpb24pOwoKICAgIGJvb2wgaXNHZXR0ZXIgPSBmYWxzZTsKICAgIGlmIChnZXRPclNldCA9PSBudWxsKSB7CiAgICAgIHRva2VuID0gcGFyc2VNZXRob2RUeXBlVmFyKG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgaXNHZXR0ZXIgPSBvcHRpb25hbCgiZ2V0IiwgZ2V0T3JTZXQpOwogICAgICB0b2tlbiA9IG5hbWU7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZVZhcmlhYmxlcyh0b2tlbi5uZXh0KTsKICAgIH0KICAgIHRva2VuID0gcGFyc2VHZXR0ZXJPckZvcm1hbFBhcmFtZXRlcnMoCiAgICAgICAgdG9rZW4sIG5hbWUsIGlzR2V0dGVyLCBNZW1iZXJLaW5kLlRvcExldmVsTWV0aG9kKTsKICAgIEFzeW5jTW9kaWZpZXIgc2F2ZWRBc3luY01vZGlmaWVyID0gYXN5bmNTdGF0ZTsKICAgIFRva2VuIGFzeW5jVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgdG9rZW4gPSBwYXJzZUFzeW5jTW9kaWZpZXJPcHQodG9rZW4pOwogICAgaWYgKGdldE9yU2V0ICE9IG51bGwgJiYgIWluUGxhaW5TeW5jICYmIG9wdGlvbmFsKCJzZXQiLCBnZXRPclNldCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihhc3luY1Rva2VuLCBmYXN0YS5tZXNzYWdlU2V0dGVyTm90U3luYyk7CiAgICB9CiAgICBib29sIGlzRXh0ZXJuYWwgPSBleHRlcm5hbFRva2VuICE9IG51bGw7CiAgICBpZiAoaXNFeHRlcm5hbCAmJiAhb3B0aW9uYWwoJzsnLCB0b2tlbi5uZXh0KSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZXh0ZXJuYWxUb2tlbiwgZmFzdGEubWVzc2FnZUV4dGVybmFsTWV0aG9kV2l0aEJvZHkpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZUZ1bmN0aW9uQm9keSh0b2tlbiwgZmFsc2UsIGlzRXh0ZXJuYWwpOwogICAgYXN5bmNTdGF0ZSA9IHNhdmVkQXN5bmNNb2RpZmllcjsKICAgIGxpc3RlbmVyLmVuZFRvcExldmVsTWV0aG9kKGJlZm9yZVN0YXJ0Lm5leHQsIGdldE9yU2V0LCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZU1ldGhvZFR5cGVWYXIoVG9rZW4gbmFtZSkgewogICAgaWYgKCFvcHRpb25hbCgnPCcsIG5hbWUubmV4dCkpIHsKICAgICAgcmV0dXJuIG5vVHlwZVBhcmFtT3JBcmcucGFyc2VWYXJpYWJsZXMobmFtZSwgdGhpcyk7CiAgICB9CiAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVZhciA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyhuYW1lLCB0cnVlKTsKICAgIFRva2VuIHRva2VuID0gdHlwZVZhci5wYXJzZVZhcmlhYmxlcyhuYW1lLCB0aGlzKTsKICAgIGlmIChvcHRpb25hbCgnPScsIHRva2VuLm5leHQpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbih0b2tlbiwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VGaWVsZEluaXRpYWxpemVyT3B0KFRva2VuIHRva2VuLCBUb2tlbiBuYW1lLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgYm9vbCBpc1RvcExldmVsKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgIFRva2VuIGFzc2lnbm1lbnQgPSBuZXh0OwogICAgICBsaXN0ZW5lci5iZWdpbkZpZWxkSW5pdGlhbGl6ZXIobmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKG5leHQpOwogICAgICBsaXN0ZW5lci5lbmRGaWVsZEluaXRpYWxpemVyKGFzc2lnbm1lbnQsIHRva2VuLm5leHQpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKHZhckZpbmFsT3JDb25zdCAhPSBudWxsICYmICFuYW1lLmlzU3ludGhldGljKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCJjb25zdCIsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUNvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXIKICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZS5sZXhlbWUpKTsKICAgICAgICB9IGVsc2UgaWYgKGlzVG9wTGV2ZWwgJiYKICAgICAgICAgICAgb3B0aW9uYWwoImZpbmFsIiwgdmFyRmluYWxPckNvbnN0KSAmJgogICAgICAgICAgICBsYXRlVG9rZW4gPT0gbnVsbCkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplcgogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lLmxleGVtZSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVOb0ZpZWxkSW5pdGlhbGl6ZXIodG9rZW4ubmV4dCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVZhcmlhYmxlSW5pdGlhbGl6ZXJPcHQoVG9rZW4gdG9rZW4pIHsKICAgIGlmIChvcHRpb25hbCgnPScsIHRva2VuLm5leHQpKSB7CiAgICAgIFRva2VuIGFzc2lnbm1lbnQgPSB0b2tlbi5uZXh0OwogICAgICBsaXN0ZW5lci5iZWdpblZhcmlhYmxlSW5pdGlhbGl6ZXIoYXNzaWdubWVudCk7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKGFzc2lnbm1lbnQpOwogICAgICBsaXN0ZW5lci5lbmRWYXJpYWJsZUluaXRpYWxpemVyKGFzc2lnbm1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9WYXJpYWJsZUluaXRpYWxpemVyKHRva2VuLm5leHQpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VJbml0aWFsaXplcnNPcHQoVG9rZW4gdG9rZW4pIHsKICAgIGlmIChvcHRpb25hbCgnOicsIHRva2VuLm5leHQpKSB7CiAgICAgIHJldHVybiBwYXJzZUluaXRpYWxpemVycyh0b2tlbi5uZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vSW5pdGlhbGl6ZXJzKCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICB9CgogIC8vLyBgYGAKICAvLy8gaW5pdGlhbGl6ZXJzOgogIC8vLyAgICc6JyBpbml0aWFsaXplckxpc3RFbnRyeSAoJywnIGluaXRpYWxpemVyTGlzdEVudHJ5KSoKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUluaXRpYWxpemVycyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbjsKICAgIGFzc2VydChvcHRpb25hbCgnOicsIGJlZ2luKSk7CiAgICBsaXN0ZW5lci5iZWdpbkluaXRpYWxpemVycyhiZWdpbik7CiAgICBpbnQgY291bnQgPSAwOwogICAgYm9vbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBmYWxzZTsKICAgIFRva2VuIG5leHQgPSBiZWdpbjsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHRva2VuID0gcGFyc2VJbml0aWFsaXplcihuZXh0KTsKICAgICAgKytjb3VudDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIGlmICghbmV4dC5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBSZWNvdmVyeTogRm91bmQgYW4gaWRlbnRpZmllciB3aGljaCBjb3VsZCBiZQogICAgICAgIC8vIDEpIG1pc3NpbmcgcHJlY2VkaW5nIGAsYCB0aHVzIGl0J3MgYW5vdGhlciBpbml0aWFsaXplciwgb3IKICAgICAgICAvLyAyKSBtaXNzaW5nIHByZWNlZGluZyBgO2AgdGh1cyBpdCdzIGEgY2xhc3MgbWVtYmVyLCBvcgogICAgICAgIC8vIDMpIG1pc3NpbmcgcHJlY2VkaW5nICd7JyB0aHVzIGl0J3MgYSBzdGF0ZW1lbnQKICAgICAgICBpZiAob3B0aW9uYWwoJ2Fzc2VydCcsIG5leHQpKSB7CiAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgICAgaWYgKCFvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgLy8gTG9va3MgbGlrZSBhc3NlcnQgZXhwcmVzc2lvbiAuLi4gZmFsbCB0aHJvdWdoIHRvIGluc2VydCBjb21tYQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAob3B0aW9uYWwoJ3RoaXMnLCBuZXh0KSkgewogICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgICAgICBpZiAoIW9wdGlvbmFsKCcuJywgbmV4dCkpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgICAgICBpZiAoIW5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgICAgICBpZiAoIW9wdGlvbmFsKCc9JywgbmV4dCkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBMb29rcyBsaWtlIGZpZWxkIGFzc2lnbm1lbnQuLi4gZmFsbCB0aHJvdWdoIHRvIGluc2VydCBjb21tYQogICAgICAgIH0KICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgZW5oYW5jaW5nIHRoaXMgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUKICAgICAgICAvLyBleHBlY3Rpbmcgb25lIG9mIGAsYCBvciBgO2Agb3IgYHtgCiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJykpOwogICAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbih0b2tlbiwgVG9rZW5UeXBlLkNPTU1BKTsKICAgICAgfQogICAgfQogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gb2xkOwogICAgbGlzdGVuZXIuZW5kSW5pdGlhbGl6ZXJzKGNvdW50LCBiZWdpbiwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGluaXRpYWxpemVyTGlzdEVudHJ5OgogIC8vLyAgICdzdXBlcicgKCcuJyBpZGVudGlmaWVyKT8gYXJndW1lbnRzIHwKICAvLy8gICBmaWVsZEluaXRpYWxpemVyIHwKICAvLy8gICBhc3NlcnRpb24KICAvLy8gOwogIC8vLwogIC8vLyBmaWVsZEluaXRpYWxpemVyOgogIC8vLyAgICgndGhpcycgJy4nKT8gaWRlbnRpZmllciAnPScgY29uZGl0aW9uYWxFeHByZXNzaW9uIGNhc2NhZGVTZWN0aW9uKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgbGlzdGVuZXIuYmVnaW5Jbml0aWFsaXplcihuZXh0KTsKICAgIFRva2VuIGJlZm9yZUV4cHJlc3Npb24gPSB0b2tlbjsKICAgIGlmIChvcHRpb25hbCgnYXNzZXJ0JywgbmV4dCkpIHsKICAgICAgdG9rZW4gPSBwYXJzZUFzc2VydCh0b2tlbiwgQXNzZXJ0LkluaXRpYWxpemVyKTsKICAgICAgbGlzdGVuZXIuZW5kSW5pdGlhbGl6ZXIodG9rZW4ubmV4dCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3N1cGVyJywgbmV4dCkpIHsKICAgICAgcmV0dXJuIHBhcnNlU3VwZXJJbml0aWFsaXplckV4cHJlc3Npb24odG9rZW4pOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgndGhpcycsIG5leHQpKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnLicsIG5leHQpKSB7CiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgdG9rZW4gPSBpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKAogICAgICAgICAgICAgIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5maWVsZEluaXRpYWxpemVyKTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgaWYgKG9wdGlvbmFsKCc9JywgbmV4dCkpIHsKICAgICAgICAgIHJldHVybiBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QoYmVmb3JlRXhwcmVzc2lvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QoYmVmb3JlRXhwcmVzc2lvbik7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgaWYgKG9wdGlvbmFsKCd7JywgbmV4dCkgfHwgb3B0aW9uYWwoJz0+JywgbmV4dCkpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmV4dCwgZmFzdGEubWVzc2FnZVJlZGlyZWN0aW5nQ29uc3RydWN0b3JXaXRoQm9keSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfQogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAob3B0aW9uYWwoJ3RoaXMnLCB0b2tlbikpIHsKICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBpbmRpY2F0aW5nIHRoYXQKICAgICAgICAvLyBgdGhpcy48ZmllbGRuYW1lPj1gIGlzIGV4cGVjdGVkLgogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnLicpKTsKICAgICAgICByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbih0b2tlbiwgVG9rZW5UeXBlLlBFUklPRCk7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLm5leHQpOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byByZWNvdmVyeQogICAgfSBlbHNlIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgICBUb2tlbiBuZXh0MiA9IG5leHQubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCc9JywgbmV4dDIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlSW5pdGlhbGl6ZXJFeHByZXNzaW9uUmVzdCh0b2tlbik7CiAgICAgIH0KICAgICAgLy8gUmVjb3Zlcnk6IElmIHRoaXMgbG9va3MgbGlrZSBhbiBleHByZXNzaW9uLAogICAgICAvLyB0aGVuIGZhbGwgdGhyb3VnaCB0byBpbnNlcnQgdGhlIExIUyBhbmQgYD1gIG9mIHRoZSBhc3NpZ25tZW50LAogICAgICAvLyBvdGhlcndpc2UgaW5zZXJ0IGFuIGA9YCBhbmQgc3ludGhldGljIGlkZW50aWZpZXIuCiAgICAgIGlmICghbmV4dDIuaXNPcGVyYXRvciAmJiAhb3B0aW9uYWwoJy4nLCBuZXh0MikpIHsKICAgICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY1Rva2VuKG5leHQsIFRva2VuVHlwZS5FUSk7CiAgICAgICAgdG9rZW4gPSBpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uLAogICAgICAgICAgICBtZXNzYWdlOiBmYXN0YS5tZXNzYWdlTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVyLAogICAgICAgICAgICBtZXNzYWdlT25Ub2tlbjogbmV4dCk7CiAgICAgICAgcmV0dXJuIHBhcnNlSW5pdGlhbGl6ZXJFeHByZXNzaW9uUmVzdChiZWZvcmVFeHByZXNzaW9uKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gUmVjb3Zlcnk6IEluc2VydCBhIHN5bnRoZXRpYyBhc3NpZ25tZW50LgogICAgICB0b2tlbiA9IGluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoCiAgICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuZmllbGRJbml0aWFsaXplciwKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLm1lc3NhZ2VFeHBlY3RlZEFuSW5pdGlhbGl6ZXIsIG1lc3NhZ2VPblRva2VuOiB0b2tlbik7CiAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5FUSk7CiAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICAgIHJldHVybiBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QoYmVmb3JlRXhwcmVzc2lvbik7CiAgICB9CiAgICAvLyBSZWNvdmVyeToKICAgIC8vIEluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yCiAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBpbmRlZWQgYW4gYXNzaWdubWVudC4KICAgIC8vIEZhaWxpbmcgdG8gZG8gc28gY2F1c2VzIHRoaXMgdGVzdCB0byBmYWlsOgogICAgLy8gcGtnL2Zyb250X2VuZC90ZXN0Y2FzZXMvcmVncmVzcy9pc3N1ZV8zMTE5Mi5kYXJ0CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogSW52ZXN0aWdhdGUgYmV0dGVyIHJlY292ZXJ5LgogICAgdG9rZW4gPSBpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKAogICAgICAgIGJlZm9yZUV4cHJlc3Npb24sIElkZW50aWZpZXJDb250ZXh0LmZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgbWVzc2FnZTogZmFzdGEubWVzc2FnZU1pc3NpbmdBc3NpZ25tZW50SW5Jbml0aWFsaXplcik7CiAgICByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbih0b2tlbiwgVG9rZW5UeXBlLkVRKTsKICAgIHJldHVybiBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QoYmVmb3JlRXhwcmVzc2lvbik7CiAgfQoKICAvLy8gUGFyc2UgdGhlIGBzdXBlcmAgaW5pdGlhbGl6ZXI6CiAgLy8vIGBgYAogIC8vLyAgICdzdXBlcicgKCcuJyBpZGVudGlmaWVyKT8gYXJndW1lbnRzIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VTdXBlckluaXRpYWxpemVyRXhwcmVzc2lvbihmaW5hbCBUb2tlbiBzdGFydCkgewogICAgVG9rZW4gdG9rZW4gPSBzdGFydC5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdzdXBlcicsIHRva2VuKSk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnLicsIG5leHQpKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChuZXh0LmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTikgewogICAgICAgIG5leHQgPSBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uQ29udGludWF0aW9uCiAgICAgICAgICAgIC5lbnN1cmVJZGVudGlmaWVyKHRva2VuLCB0aGlzKTsKICAgICAgfQogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgfQogICAgaWYgKCFvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIGlmIChvcHRpb25hbCgnPy4nLCBuZXh0KSkgewogICAgICAgIC8vIEFuIGVycm9yIGZvciBgc3VwZXI/LmAgaXMgcmVwb3J0ZWQgaW4gcGFyc2VTdXBlckV4cHJlc3Npb24uCiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmICghbmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICAgIC8vIEluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIGJ1dCBkb24ndCByZXBvcnQgYW5vdGhlciBlcnJvci4KICAgICAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICAgICAgICB9CiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIGlmIChvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCdzdXBlcicsIHRva2VuKSkgewogICAgICAgICAgLy8gcGFyc2VFeHByZXNzaW9uIHdpbGwgcmVwb3J0IGVycm9yIG9uIGFzc2lnbm1lbnQgdG8gc3VwZXIKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICB0b2tlbiwgZmFzdGEubWVzc2FnZUZpZWxkSW5pdGlhbGl6ZWRPdXRzaWRlRGVjbGFyaW5nQ2xhc3MpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICghb3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCcoJykpOwogICAgICAgIHJld3JpdGVyLmluc2VydFBhcmVucyh0b2tlbiwgZmFsc2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0KHN0YXJ0KTsKICB9CgogIFRva2VuIHBhcnNlSW5pdGlhbGl6ZXJFeHByZXNzaW9uUmVzdChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kSW5pdGlhbGl6ZXIodG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gSWYgdGhlIG5leHQgdG9rZW4gaXMgYW4gb3BlbmluZyBjdXJseSBicmFjZSwgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHVzZSB0aGUKICAvLy8gZ2l2ZW4gW3RlbXBsYXRlXSBvciBbYmxvY2tLaW5kXSB0byByZXBvcnQgYW4gZXJyb3IsIGluc2VydCBhbiBvcGVuaW5nIGFuZAogIC8vLyBhIGNsb3NpbmcgY3VybHkgYnJhY2UsIGFuZCByZXR1cm4gdGhlIG5ld2x5IGluc2VydGVkIG9wZW5pbmcgY3VybHkgYnJhY2UuCiAgLy8vIElmICBbdGVtcGxhdGVdIGFuZCBbYmxvY2tLaW5kXSBhcmUgYG51bGxgLCB0aGVuIHVzZQogIC8vLyBhIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBpbnN0ZWFkLgogIFRva2VuIGVuc3VyZUJsb2NrKFRva2VuIHRva2VuLAogICAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGUsIFN0cmluZyBibG9ja0tpbmQpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCd7JywgbmV4dCkpIHJldHVybiBuZXh0OwogICAgaWYgKHRlbXBsYXRlID09IG51bGwpIHsKICAgICAgaWYgKGJsb2NrS2luZCA9PSBudWxsKSB7CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlbmFtZSBFeHBlY3RlZEJ1dEdvdCB0byBFeHBlY3RlZEJlZm9yZQogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygneycpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVuYW1lIEV4cGVjdGVkQ2xhc3NPck1peGluQm9keQogICAgICAgIC8vICB0byBFeHBlY3RlZERlY2xhcmF0aW9uT3JDbGF1c2VCb2R5CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHkud2l0aEFyZ3VtZW50cyhibG9ja0tpbmQpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5leHQpKTsKICAgIH0KICAgIHJldHVybiBpbnNlcnRCbG9jayh0b2tlbik7CiAgfQoKICBUb2tlbiBpbnNlcnRCbG9jayhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBCZWdpblRva2VuIGJlZ2luR3JvdXAgPSByZXdyaXRlci5pbnNlcnRUb2tlbih0b2tlbiwKICAgICAgICBuZXcgU3ludGhldGljQmVnaW5Ub2tlbihUb2tlblR5cGUuT1BFTl9DVVJMWV9CUkFDS0VULCBuZXh0Lm9mZnNldCkpOwogICAgVG9rZW4gZW5kR3JvdXAgPSByZXdyaXRlci5pbnNlcnRUb2tlbihiZWdpbkdyb3VwLAogICAgICAgIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuQ0xPU0VfQ1VSTFlfQlJBQ0tFVCwgbmV4dC5vZmZzZXQpKTsKICAgIGJlZ2luR3JvdXAuZW5kR3JvdXAgPSBlbmRHcm91cDsKICAgIHJldHVybiBiZWdpbkdyb3VwOwogIH0KCiAgLy8vIElmIHRoZSBuZXh0IHRva2VuIGlzIGEgY2xvc2luZyBwYXJlbnRoZXNpcywgcmV0dXJuIGl0LgogIC8vLyBPdGhlcndpc2UsIHJlcG9ydCBhbiBlcnJvciBhbmQgcmV0dXJuIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzCiAgLy8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIG9wZW4gcGFyZW50aGVzaXMuCiAgVG9rZW4gZW5zdXJlQ2xvc2VQYXJlbihUb2tlbiB0b2tlbiwgVG9rZW4gb3BlblBhcmVuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnKScsIG5leHQpKSB7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogICAgaWYgKG9wZW5QYXJlbi5lbmRHcm91cC5pc1N5bnRoZXRpYykgewogICAgICAvLyBTY2FubmVyIGhhcyBhbHJlYWR5IHJlcG9ydGVkIGEgbWlzc2luZyBgKWAgZXJyb3IsCiAgICAgIC8vIGJ1dCBwbGFjZWQgdGhlIGApYCBpbiB0aGUgd3JvbmcgbG9jYXRpb24sIHNvIG1vdmUgaXQuCiAgICAgIHJldHVybiByZXdyaXRlci5tb3ZlU3ludGhldGljKHRva2VuLCBvcGVuUGFyZW4uZW5kR3JvdXApOwogICAgfQoKICAgIC8vIFRPRE8oZGFucnViZWwpOiBQYXNzIGluIGNvbnRleHQgZm9yIGJldHRlciBlcnJvciBtZXNzYWdlLgogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJyknKSk7CgogICAgLy8gU2Nhbm5lciBndWFyYW50ZWVzIGEgY2xvc2luZyBwYXJlbnRoZXNpcwogICAgLy8gVE9ETyhkYW5ydWJlbCk6IEltcHJvdmUgcmVjb3ZlcnkgYnkgaGF2aW5nIGNhbGxlcnMgcGFyc2UgdG9rZW5zCiAgICAvLyBiZXR3ZWVuIGB0b2tlbmAgYW5kIGBvcGVuUGFyZW4uZW5kR3JvdXBgLgogICAgcmV0dXJuIG9wZW5QYXJlbi5lbmRHcm91cDsKICB9CgogIC8vLyBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIGNvbG9uLCByZXR1cm4gaXQuIE90aGVyd2lzZSwgcmVwb3J0IGFuCiAgLy8vIGVycm9yLCBpbnNlcnQgYSBzeW50aGV0aWMgY29sb24sIGFuZCByZXR1cm4gdGhlIGluc2VydGVkIGNvbG9uLgogIFRva2VuIGVuc3VyZUNvbG9uKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnOicsIG5leHQpKSByZXR1cm4gbmV4dDsKICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnOicpOwogICAgVG9rZW4gbmV3VG9rZW4gPSBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNPTE9OLCBuZXh0LmNoYXJPZmZzZXQpOwogICAgcmV0dXJuIHJld3JpdGVBbmRSZWNvdmVyKHRva2VuLCBtZXNzYWdlLCBuZXdUb2tlbik7CiAgfQoKICAvLy8gSWYgdGhlIHRva2VuIGFmdGVyIFt0b2tlbl0gaXMgYSBub3QgbGl0ZXJhbCBzdHJpbmcsCiAgLy8vIHRoZW4gaW5zZXJ0IGEgc3ludGhldGljIGxpdGVyYWwgc3RyaW5nLgogIC8vLyBDYWxsIGBwYXJzZUxpdGVyYWxTdHJpbmdgIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KICBUb2tlbiBlbnN1cmVMaXRlcmFsU3RyaW5nKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmICghaWRlbnRpY2FsKG5leHQua2luZCwgU1RSSU5HX1RPS0VOKSkgewogICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkU3RyaW5nLndpdGhBcmd1bWVudHMobmV4dCk7CiAgICAgIFRva2VuIG5ld1Rva2VuID0KICAgICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbihUb2tlblR5cGUuU1RSSU5HLCAnIiInLCBuZXh0LmNoYXJPZmZzZXQsIDApOwogICAgICByZXdyaXRlQW5kUmVjb3Zlcih0b2tlbiwgbWVzc2FnZSwgbmV3VG9rZW4pOwogICAgfQogICAgcmV0dXJuIHBhcnNlTGl0ZXJhbFN0cmluZyh0b2tlbik7CiAgfQoKICAvLy8gSWYgdGhlIHRva2VuIGFmdGVyIFt0b2tlbl0gaXMgYSBzZW1pLWNvbG9uLCByZXR1cm4gaXQuCiAgLy8vIE90aGVyd2lzZSwgcmVwb3J0IGFuIGVycm9yLCBpbnNlcnQgYSBzeW50aGV0aWMgc2VtaS1jb2xvbiwKICAvLy8gYW5kIHJldHVybiB0aGUgaW5zZXJ0ZWQgc2VtaS1jb2xvbi4KICBUb2tlbiBlbnN1cmVTZW1pY29sb24oVG9rZW4gdG9rZW4pIHsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBPbmNlIGFsbCBleHBlY3QoJzsnLi4uKSBjYWxsIHNpdGVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQKICAgIC8vIHRvIHVzZSB0aGlzIG1ldGhvZCwgcmVtb3ZlIHNpbWlsYXIgc2VtaWNvbG9uIHJlY292ZXJ5IGNvZGUKICAgIC8vIGZyb20gdGhlIGhhbmRsZUVycm9yIG1ldGhvZCBpbiBlbGVtZW50X2xpc3RlbmVyLmRhcnQuCiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnOycsIG5leHQpKSByZXR1cm4gbmV4dDsKCiAgICAvLyBGaW5kIGEgdG9rZW4gb24gdGhlIHNhbWUgbGluZSBhcyB3aGVyZSB0aGUgJzsnIHNob3VsZCBiZSBpbnNlcnRlZC4KICAgIC8vIFJlcG9ydGluZyB0aGUgZXJyb3Igb24gdGhpcyB0b2tlbiBtYWtlcyBpdCBlYXNpZXIKICAgIC8vIGZvciB1c2VycyB0byB1bmRlcnN0YW5kIGFuZCBmaXggdGhlIGVycm9yLgogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihmaW5kUHJldmlvdXNOb25aZXJvTGVuZ3RoVG9rZW4odG9rZW4pLAogICAgICAgIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc7JykpOwogICAgcmV0dXJuIHJld3JpdGVyLmluc2VydFN5bnRoZXRpY1Rva2VuKHRva2VuLCBUb2tlblR5cGUuU0VNSUNPTE9OKTsKICB9CgogIC8vLyBSZXBvcnQgYW4gZXJyb3IgYXQgdGhlIHRva2VuIGFmdGVyIFt0b2tlbl0gdGhhdCBoYXMgdGhlIGdpdmVuIFttZXNzYWdlXS4KICAvLy8gSW5zZXJ0IHRoZSBbbmV3VG9rZW5dIGFmdGVyIFt0b2tlbl0gYW5kIHJldHVybiBbbmV3VG9rZW5dLgogIFRva2VuIHJld3JpdGVBbmRSZWNvdmVyKFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIG5ld1Rva2VuKSB7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLm5leHQsIG1lc3NhZ2UpOwogICAgcmV0dXJuIHJld3JpdGVyLmluc2VydFRva2VuKHRva2VuLCBuZXdUb2tlbik7CiAgfQoKICAvLy8gUmVwbGFjZSB0aGUgdG9rZW4gYWZ0ZXIgW3Rva2VuXSB3aXRoIGBbYCBmb2xsb3dlZCBieSBgXWAKICAvLy8gYW5kIHJldHVybiBbdG9rZW5dLgogIFRva2VuIHJld3JpdGVTcXVhcmVCcmFja2V0cyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ1tdJywgbmV4dCkpOwogICAgVG9rZW4gcmVwbGFjZW1lbnQgPSBsaW5rKAogICAgICAgIG5ldyBCZWdpblRva2VuKFRva2VuVHlwZS5PUEVOX1NRVUFSRV9CUkFDS0VULCBuZXh0Lm9mZnNldCksCiAgICAgICAgbmV3IFRva2VuKFRva2VuVHlwZS5DTE9TRV9TUVVBUkVfQlJBQ0tFVCwgbmV4dC5vZmZzZXQgKyAxKSk7CiAgICByZXdyaXRlci5yZXBsYWNlVG9rZW5Gb2xsb3dpbmcodG9rZW4sIHJlcGxhY2VtZW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBSZXBvcnQgdGhlIGdpdmVuIHRva2VuIGFzIHVuZXhwZWN0ZWQgYW5kIHJldHVybiB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgbmV4dAogIC8vLyB0b2tlbiBpcyBvbmUgb2YgdGhlIFtleHBlY3RlZE5leHRdLCBvdGhlcndpc2UganVzdCByZXR1cm4gdGhlIGdpdmVuIHRva2VuLgogIFRva2VuIHNraXBVbmV4cGVjdGVkVG9rZW5PcHQoVG9rZW4gdG9rZW4sIExpc3Q8U3RyaW5nPiBleHBlY3RlZE5leHQpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5leHQua2V5d29yZCA9PSBudWxsKSB7CiAgICAgIGZpbmFsIFN0cmluZyBuZXh0VmFsdWUgPSBuZXh0Lm5leHQuc3RyaW5nVmFsdWU7CiAgICAgIGZvciAoU3RyaW5nIGV4cGVjdGVkVmFsdWUgaW4gZXhwZWN0ZWROZXh0KSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0VmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgICAgIHJldHVybiBuZXh0OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VOYXRpdmVDbGF1c2UoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5hdGl2ZVRva2VuID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCduYXRpdmUnLCBuYXRpdmVUb2tlbikpOwogICAgYm9vbCBoYXNOYW1lID0gZmFsc2U7CiAgICBpZiAodG9rZW4ubmV4dC5raW5kID09IFNUUklOR19UT0tFTikgewogICAgICBoYXNOYW1lID0gdHJ1ZTsKICAgICAgdG9rZW4gPSBwYXJzZUxpdGVyYWxTdHJpbmcodG9rZW4pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlTmF0aXZlQ2xhdXNlKG5hdGl2ZVRva2VuLCBoYXNOYW1lKTsKICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgbmF0aXZlVG9rZW4sIGZhc3RhLm1lc3NhZ2VOYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb24pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gc2tpcENsYXNzT3JNaXhpbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIC8vIFRoZSBzY2FubmVyIGVuc3VyZXMgdGhhdCBge2AgYWx3YXlzIGhhcyBhIGNsb3NpbmcgYH1gLgogICAgcmV0dXJuIGVuc3VyZUJsb2NrKHRva2VuLCBudWxsLCBudWxsKTsKICB9CgogIC8vLyBgYGAKICAvLy8gY2xhc3NCb2R5OgogIC8vLyAgICd7JyBjbGFzc01lbWJlciogJ30nCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VDbGFzc09yTWl4aW5Cb2R5KENsYXNzS2luZCBraW5kLCBUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3snLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5DbGFzc09yTWl4aW5Cb2R5KGtpbmQsIHRva2VuKTsKICAgIGludCBjb3VudCA9IDA7CiAgICB3aGlsZSAobm90RW9mT3JWYWx1ZSgnfScsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5NZW1iZXJJbXBsKHRva2VuKTsKICAgICAgKytjb3VudDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnfScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRDbGFzc09yTWl4aW5Cb2R5KGtpbmQsIGNvdW50LCBiZWdpbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgYm9vbCBpc1VuYXJ5TWludXMoVG9rZW4gdG9rZW4pID0+CiAgICAgIHRva2VuLmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTiAmJgogICAgICB0b2tlbi5sZXhlbWUgPT0gJ3VuYXJ5JyAmJgogICAgICBvcHRpb25hbCgnLScsIHRva2VuLm5leHQpOwoKICAvLy8gUGFyc2UgYSBjbGFzcyBvciBtaXhpbiBtZW1iZXIuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgaW52b2tlZCBmcm9tIG91dHNpZGUgdGhlIHBhcnNlci4gQXMgYSByZXN1bHQsIHRoaXMKICAvLy8gbWV0aG9kIHRha2VzIHRoZSBuZXh0IHRva2VuIHRvIGJlIGNvbnN1bWVkIHJhdGhlciB0aGFuIHRoZSBsYXN0IGNvbnN1bWVkCiAgLy8vIHRva2VuIGFuZCByZXR1cm5zIHRoZSB0b2tlbiBhZnRlciB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbiByYXRoZXIgdGhhbiB0aGUKICAvLy8gbGFzdCBjb25zdW1lZCB0b2tlbi4KICBUb2tlbiBwYXJzZUNsYXNzT3JNaXhpbk1lbWJlcihUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIHBhcnNlQ2xhc3NPck1peGluTWVtYmVySW1wbChzeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSkubmV4dDsKICB9CgogIC8vLyBgYGAKICAvLy8gY2xhc3NNZW1iZXI6CiAgLy8vICAgZmllbGREZWNsYXJhdGlvbiB8CiAgLy8vICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiB8CiAgLy8vICAgbWV0aG9kRGVjbGFyYXRpb24KICAvLy8gOwogIC8vLwogIC8vLyBtaXhpbk1lbWJlcjoKICAvLy8gICBmaWVsZERlY2xhcmF0aW9uIHwKICAvLy8gICBtZXRob2REZWNsYXJhdGlvbgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ2xhc3NPck1peGluTWVtYmVySW1wbChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVmb3JlU3RhcnQgPSB0b2tlbiA9IHBhcnNlTWV0YWRhdGFTdGFyKHRva2VuKTsKCiAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbjsKICAgIFRva2VuIGV4dGVybmFsVG9rZW47CiAgICBUb2tlbiBsYXRlVG9rZW47CiAgICBUb2tlbiBzdGF0aWNUb2tlbjsKICAgIFRva2VuIHZhckZpbmFsT3JDb25zdDsKCiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgIGlmIChvcHRpb25hbCgnZXh0ZXJuYWwnLCBuZXh0KSkgewogICAgICAgIGV4dGVybmFsVG9rZW4gPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgICBpZiAob3B0aW9uYWwoJ3N0YXRpYycsIG5leHQpKSB7CiAgICAgICAgICBzdGF0aWNUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2NvdmFyaWFudCcsIG5leHQpKSB7CiAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0KICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgICAgaWYgKG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpKSB7CiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IHRva2VuID0gbmV4dDsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd2YXInLCBuZXh0KSkgewogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnY29uc3QnLCBuZXh0KSAmJiBjb3ZhcmlhbnRUb2tlbiA9PSBudWxsKSB7CiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IHRva2VuID0gbmV4dDsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdsYXRlJywgbmV4dCkpIHsKICAgICAgICAgICAgbGF0ZVRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkgJiYgb3B0aW9uYWwoJ2ZpbmFsJywgbmV4dCkpIHsKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgICAgICAgIE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0IGNvbnRleHQgPSBuZXcgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQodGhpcykKICAgICAgICAgICAgICAuLmNvdmFyaWFudFRva2VuID0gY292YXJpYW50VG9rZW4KICAgICAgICAgICAgICAuLmV4dGVybmFsVG9rZW4gPSBleHRlcm5hbFRva2VuCiAgICAgICAgICAgICAgLi5sYXRlVG9rZW4gPSBsYXRlVG9rZW4KICAgICAgICAgICAgICAuLnN0YXRpY1Rva2VuID0gc3RhdGljVG9rZW4KICAgICAgICAgICAgICAuLnZhckZpbmFsT3JDb25zdCA9IHZhckZpbmFsT3JDb25zdDsKCiAgICAgICAgICAgIHRva2VuID0gY29udGV4dC5wYXJzZUNsYXNzTWVtYmVyTW9kaWZpZXJzKHRva2VuKTsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CgogICAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiA9IGNvbnRleHQuY292YXJpYW50VG9rZW47CiAgICAgICAgICAgIGV4dGVybmFsVG9rZW4gPSBjb250ZXh0LmV4dGVybmFsVG9rZW47CiAgICAgICAgICAgIGxhdGVUb2tlbiA9IGNvbnRleHQubGF0ZVRva2VuOwogICAgICAgICAgICBzdGF0aWNUb2tlbiA9IGNvbnRleHQuc3RhdGljVG9rZW47CiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IGNvbnRleHQudmFyRmluYWxPckNvbnN0OwoKICAgICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgbGlzdGVuZXIuYmVnaW5NZW1iZXIoKTsKCiAgICBUb2tlbiBiZWZvcmVUeXBlID0gdG9rZW47CiAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKHRva2VuLCBmYWxzZSwgdHJ1ZSk7CiAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKHRva2VuKTsKICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgIFRva2VuIGdldE9yU2V0OwogICAgaWYgKG5leHQudHlwZSAhPSBUb2tlblR5cGUuSURFTlRJRklFUikgewogICAgICBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZ2V0JykgfHwgaWRlbnRpY2FsKHZhbHVlLCAnc2V0JykpIHsKICAgICAgICBpZiAobmV4dC5uZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgICAgZ2V0T3JTZXQgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGNvbnRpbnVlIHBhcnNpbmcgYGdldGAgb3IgYHNldGAgYXMgYW4gaWRlbnRpZmllci4KICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdmYWN0b3J5JykpIHsKICAgICAgICBUb2tlbiBuZXh0MiA9IG5leHQubmV4dDsKICAgICAgICBpZiAobmV4dDIuaXNJZGVudGlmaWVyIHx8IG5leHQyLmlzTW9kaWZpZXIpIHsKICAgICAgICAgIGlmIChiZWZvcmVUeXBlICE9IHRva2VuKSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIGZhc3RhLm1lc3NhZ2VUeXBlQmVmb3JlRmFjdG9yeSk7CiAgICAgICAgICB9CiAgICAgICAgICB0b2tlbiA9IHBhcnNlRmFjdG9yeU1ldGhvZCh0b2tlbiwgYmVmb3JlU3RhcnQsIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICAgICAgc3RhdGljVG9rZW4gPz8gY292YXJpYW50VG9rZW4sIHZhckZpbmFsT3JDb25zdCk7CiAgICAgICAgICBsaXN0ZW5lci5lbmRNZW1iZXIoKTsKICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGNvbnRpbnVlIHBhcnNpbmcgYGZhY3RvcnlgIGFzIGFuIGlkZW50aWZpZXIuCiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnb3BlcmF0b3InKSkgewogICAgICAgIFRva2VuIG5leHQyID0gbmV4dC5uZXh0OwogICAgICAgIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlUGFyYW0gPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcobmV4dCk7CiAgICAgICAgLy8gYG9wZXJhdG9yYCBjYW4gYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyIGFzIGluCiAgICAgICAgLy8gYGludCBvcGVyYXRvcjxUPigpYCBvciBgaW50IG9wZXJhdG9yID0gMmAKICAgICAgICBpZiAobmV4dDIuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3IgJiYgdHlwZVBhcmFtID09IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VNZXRob2QoCiAgICAgICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICAgICAgZ2V0T3JTZXQsCiAgICAgICAgICAgICAgdG9rZW4ubmV4dCk7CiAgICAgICAgICBsaXN0ZW5lci5lbmRNZW1iZXIoKTsKICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCc9PT0nLCBuZXh0MikgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJyE9PScsIG5leHQyKSB8fAogICAgICAgICAgICAobmV4dDIuaXNPcGVyYXRvciAmJgogICAgICAgICAgICAgICAgIW9wdGlvbmFsKCc9JywgbmV4dDIpICYmCiAgICAgICAgICAgICAgICAhb3B0aW9uYWwoJzwnLCBuZXh0MikpKSB7CiAgICAgICAgICAvLyBSZWNvdmVyeTogSW52YWxpZCBvcGVyYXRvcgogICAgICAgICAgcmV0dXJuIHBhcnNlSW52YWxpZE9wZXJhdG9yRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgICAgICAgIGJlZm9yZVR5cGUpOwogICAgICAgIH0gZWxzZSBpZiAoaXNVbmFyeU1pbnVzKG5leHQyKSkgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIHRva2VuID0gcGFyc2VNZXRob2QoCiAgICAgICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICAgICAgZ2V0T3JTZXQsCiAgICAgICAgICAgICAgdG9rZW4ubmV4dCk7CiAgICAgICAgICBsaXN0ZW5lci5lbmRNZW1iZXIoKTsKICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGNvbnRpbnVlIHBhcnNpbmcgYG9wZXJhdG9yYCBhcyBhbiBpZGVudGlmaWVyLgogICAgICB9IGVsc2UgaWYgKCFuZXh0LmlzSWRlbnRpZmllciB8fAogICAgICAgICAgKGlkZW50aWNhbCh2YWx1ZSwgJ3R5cGVkZWYnKSAmJgogICAgICAgICAgICAgIHRva2VuID09IGJlZm9yZVN0YXJ0ICYmCiAgICAgICAgICAgICAgbmV4dC5uZXh0LmlzSWRlbnRpZmllcikpIHsKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIHJldHVybiByZWNvdmVyRnJvbUludmFsaWRDbGFzc01lbWJlcigKICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgICBleHRlcm5hbFRva2VuLAogICAgICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICAgIGxhdGVUb2tlbiwKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgICB0eXBlSW5mbywKICAgICAgICAgICAgZ2V0T3JTZXQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGVJbmZvID09IG5vVHlwZSAmJiB2YXJGaW5hbE9yQ29uc3QgPT0gbnVsbCkgewogICAgICBUb2tlbiBuZXh0MiA9IG5leHQubmV4dDsKICAgICAgaWYgKG5leHQyLmlzVXNlckRlZmluYWJsZU9wZXJhdG9yICYmIG5leHQyLmVuZEdyb3VwID09IG51bGwpIHsKICAgICAgICBTdHJpbmcgdmFsdWUgPSBuZXh0Mi5uZXh0LnN0cmluZ1ZhbHVlOwogICAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICcoJykgfHwKICAgICAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAneycpIHx8CiAgICAgICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz0+JykpIHsKICAgICAgICAgIC8vIFJlY292ZXJ5OiBNaXNzaW5nIGBvcGVyYXRvcmAga2V5d29yZAogICAgICAgICAgcmV0dXJuIHBhcnNlSW52YWxpZE9wZXJhdG9yRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgICAgICAgIGJlZm9yZVR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRva2VuIGlzIGJlZm9yZSB0aGUgbmFtZSwgYW5kIG5leHQgaXMgdGhlIG5hbWUKICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgaWYgKGdldE9yU2V0ICE9IG51bGwgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICcoJykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICd7JykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICc8JykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICcuJykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICc9PicpKSB7CiAgICAgIHRva2VuID0gcGFyc2VNZXRob2QoCiAgICAgICAgICBiZWZvcmVTdGFydCwKICAgICAgICAgIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICAgIGNvdmFyaWFudFRva2VuLAogICAgICAgICAgbGF0ZVRva2VuLAogICAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgICAgYmVmb3JlVHlwZSwKICAgICAgICAgIHR5cGVJbmZvLAogICAgICAgICAgZ2V0T3JTZXQsCiAgICAgICAgICB0b2tlbi5uZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChnZXRPclNldCAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgZ2V0T3JTZXQsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlRmllbGRzKAogICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICBleHRlcm5hbFRva2VuLAogICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgIGxhdGVUb2tlbiwKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICB0eXBlSW5mbywKICAgICAgICAgIHRva2VuLm5leHQsCiAgICAgICAgICBmYWxzZSk7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRNZW1iZXIoKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlTWV0aG9kKAogICAgICBUb2tlbiBiZWZvcmVTdGFydCwKICAgICAgVG9rZW4gZXh0ZXJuYWxUb2tlbiwKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgVG9rZW4gYmVmb3JlVHlwZSwKICAgICAgVHlwZUluZm8gdHlwZUluZm8sCiAgICAgIFRva2VuIGdldE9yU2V0LAogICAgICBUb2tlbiBuYW1lKSB7CiAgICBpZiAobGF0ZVRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGxhdGVUb2tlbiwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgfQogICAgYm9vbCBpc09wZXJhdG9yID0gZmFsc2U7CiAgICBpZiAoZ2V0T3JTZXQgPT0gbnVsbCAmJiBvcHRpb25hbCgnb3BlcmF0b3InLCBuYW1lKSkgewogICAgICBUb2tlbiBvcGVyYXRvciA9IG5hbWUubmV4dDsKICAgICAgaWYgKG9wZXJhdG9yLmlzT3BlcmF0b3IgfHwKICAgICAgICAgIGlkZW50aWNhbChvcGVyYXRvci5raW5kLCBFUV9FUV9FUV9UT0tFTikgfHwKICAgICAgICAgIGlkZW50aWNhbChvcGVyYXRvci5raW5kLCBCQU5HX0VRX0VRX1RPS0VOKSB8fAogICAgICAgICAgaXNVbmFyeU1pbnVzKG9wZXJhdG9yKSkgewogICAgICAgIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgaWYgKHN0YXRpY1Rva2VuICE9IG51bGwpIHsKICAgICAgaWYgKGlzT3BlcmF0b3IpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHN0YXRpY1Rva2VuLCBmYXN0YS5tZXNzYWdlU3RhdGljT3BlcmF0b3IpOwogICAgICAgIHN0YXRpY1Rva2VuID0gbnVsbDsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsKSB7CiAgICAgIGlmIChnZXRPclNldCA9PSBudWxsIHx8IG9wdGlvbmFsKCdnZXQnLCBnZXRPclNldCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGNvdmFyaWFudFRva2VuLCBmYXN0YS5tZXNzYWdlQ292YXJpYW50TWVtYmVyKTsKICAgICAgICBjb3ZhcmlhbnRUb2tlbiA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCkgewogICAgICBpZiAob3B0aW9uYWwoJ2NvbnN0JywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICAgIGlmIChnZXRPclNldCAhPSBudWxsKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3ZhcicsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHZhckZpbmFsT3JDb25zdCwgZmFzdGEubWVzc2FnZVZhclJldHVyblR5cGUpOwogICAgICAgIHZhckZpbmFsT3JDb25zdCA9IG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KG9wdGlvbmFsKCdmaW5hbCcsIHZhckZpbmFsT3JDb25zdCkpOwogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgICAgIHZhckZpbmFsT3JDb25zdCA9IG51bGw7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgcGFyc2luZyB0aGUgbmFtZSBiZWZvcmUgY2FsbGluZyBiZWdpbk1ldGhvZAogICAgLy8gcmF0aGVyIHRoYW4gcGFzc2luZyB0aGUgbmFtZSB0b2tlbiBpbnRvIGJlZ2luTWV0aG9kLgogICAgbGlzdGVuZXIuYmVnaW5NZXRob2QoZXh0ZXJuYWxUb2tlbiwgc3RhdGljVG9rZW4sIGNvdmFyaWFudFRva2VuLAogICAgICAgIHZhckZpbmFsT3JDb25zdCwgZ2V0T3JTZXQsIG5hbWUpOwoKICAgIFRva2VuIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgYXNzZXJ0KHRva2VuLm5leHQgPT0gKGdldE9yU2V0ID8/IG5hbWUpKTsKICAgIHRva2VuID0gZ2V0T3JTZXQgPz8gdG9rZW47CgogICAgaWYgKGlzT3BlcmF0b3IpIHsKICAgICAgdG9rZW4gPSBwYXJzZU9wZXJhdG9yTmFtZSh0b2tlbik7CiAgICB9IGVsc2UgewogICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uKTsKICAgICAgaWYgKGdldE9yU2V0ID09IG51bGwpIHsKICAgICAgICB0b2tlbiA9IHBhcnNlUXVhbGlmaWVkUmVzdE9wdCgKICAgICAgICAgICAgdG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uQ29udGludWF0aW9uKTsKICAgICAgfQogICAgfQoKICAgIGJvb2wgaXNHZXR0ZXIgPSBmYWxzZTsKICAgIGlmIChnZXRPclNldCA9PSBudWxsKSB7CiAgICAgIHRva2VuID0gcGFyc2VNZXRob2RUeXBlVmFyKHRva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIGlzR2V0dGVyID0gb3B0aW9uYWwoImdldCIsIGdldE9yU2V0KTsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlVmFyaWFibGVzKHRva2VuLm5leHQpOwogICAgfQoKICAgIE1lbWJlcktpbmQga2luZCA9IHN0YXRpY1Rva2VuICE9IG51bGwKICAgICAgICA/IE1lbWJlcktpbmQuU3RhdGljTWV0aG9kCiAgICAgICAgOiBNZW1iZXJLaW5kLk5vblN0YXRpY01ldGhvZDsKICAgIFRva2VuIGJlZm9yZVBhcmFtID0gdG9rZW47CiAgICBUb2tlbiBiZWZvcmVJbml0aWFsaXplcnMgPQogICAgICAgIHBhcnNlR2V0dGVyT3JGb3JtYWxQYXJhbWV0ZXJzKHRva2VuLCBuYW1lLCBpc0dldHRlciwga2luZCk7CiAgICB0b2tlbiA9IHBhcnNlSW5pdGlhbGl6ZXJzT3B0KGJlZm9yZUluaXRpYWxpemVycyk7CiAgICBpZiAodG9rZW4gPT0gYmVmb3JlSW5pdGlhbGl6ZXJzKSBiZWZvcmVJbml0aWFsaXplcnMgPSBudWxsOwoKICAgIEFzeW5jTW9kaWZpZXIgc2F2ZWRBc3luY01vZGlmaWVyID0gYXN5bmNTdGF0ZTsKICAgIFRva2VuIGFzeW5jVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgdG9rZW4gPSBwYXJzZUFzeW5jTW9kaWZpZXJPcHQodG9rZW4pOwogICAgaWYgKGdldE9yU2V0ICE9IG51bGwgJiYgIWluUGxhaW5TeW5jICYmIG9wdGlvbmFsKCJzZXQiLCBnZXRPclNldCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihhc3luY1Rva2VuLCBmYXN0YS5tZXNzYWdlU2V0dGVyTm90U3luYyk7CiAgICB9CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChleHRlcm5hbFRva2VuICE9IG51bGwpIHsKICAgICAgaWYgKCFvcHRpb25hbCgnOycsIG5leHQpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRXh0ZXJuYWxNZXRob2RXaXRoQm9keSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZVJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5KTsKICAgICAgdG9rZW4gPSBwYXJzZVJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBwYXJzZUZ1bmN0aW9uQm9keSh0b2tlbiwgZmFsc2UsCiAgICAgICAgICAoc3RhdGljVG9rZW4gPT0gbnVsbCB8fCBleHRlcm5hbFRva2VuICE9IG51bGwpICYmIGluUGxhaW5TeW5jKTsKICAgIH0KICAgIGFzeW5jU3RhdGUgPSBzYXZlZEFzeW5jTW9kaWZpZXI7CiAgICBsaXN0ZW5lci5lbmRNZXRob2QoZ2V0T3JTZXQsIGJlZm9yZVN0YXJ0Lm5leHQsIGJlZm9yZVBhcmFtLm5leHQsCiAgICAgICAgYmVmb3JlSW5pdGlhbGl6ZXJzPy5uZXh0LCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUZhY3RvcnlNZXRob2QoVG9rZW4gdG9rZW4sIFRva2VuIGJlZm9yZVN0YXJ0LCBUb2tlbiBleHRlcm5hbFRva2VuLAogICAgICBUb2tlbiBzdGF0aWNPckNvdmFyaWFudCwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7CiAgICBUb2tlbiBmYWN0b3J5S2V5d29yZCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZmFjdG9yeScsIGZhY3RvcnlLZXl3b3JkKSk7CgogICAgaWYgKCFpc1ZhbGlkVHlwZVJlZmVyZW5jZSh0b2tlbi5uZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICBNb2RpZmllclJlY292ZXJ5Q29udGV4dCBjb250ZXh0ID0gbmV3IE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0KHRoaXMpCiAgICAgICAgLi5leHRlcm5hbFRva2VuID0gZXh0ZXJuYWxUb2tlbgogICAgICAgIC4uc3RhdGljT3JDb3ZhcmlhbnQgPSBzdGF0aWNPckNvdmFyaWFudAogICAgICAgIC4udmFyRmluYWxPckNvbnN0ID0gdmFyRmluYWxPckNvbnN0OwoKICAgICAgdG9rZW4gPSBjb250ZXh0LnBhcnNlTW9kaWZpZXJzQWZ0ZXJGYWN0b3J5KHRva2VuKTsKCiAgICAgIGV4dGVybmFsVG9rZW4gPSBjb250ZXh0LmV4dGVybmFsVG9rZW47CiAgICAgIHN0YXRpY09yQ292YXJpYW50ID0gY29udGV4dC5zdGF0aWNUb2tlbiA/PyBjb250ZXh0LmNvdmFyaWFudFRva2VuOwogICAgICB2YXJGaW5hbE9yQ29uc3QgPSBjb250ZXh0LnZhckZpbmFsT3JDb25zdDsKCiAgICAgIGNvbnRleHQgPSBudWxsOwogICAgfQoKICAgIGlmIChzdGF0aWNPckNvdmFyaWFudCAhPSBudWxsKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBzdGF0aWNPckNvdmFyaWFudCwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgfQogICAgaWYgKHZhckZpbmFsT3JDb25zdCAhPSBudWxsICYmICFvcHRpb25hbCgnY29uc3QnLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgdmFyRmluYWxPckNvbnN0ID0gbnVsbDsKICAgIH0KCiAgICBsaXN0ZW5lci5iZWdpbkZhY3RvcnlNZXRob2QoYmVmb3JlU3RhcnQsIGV4dGVybmFsVG9rZW4sIHZhckZpbmFsT3JDb25zdCk7CiAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uKTsKICAgIHRva2VuID0gcGFyc2VRdWFsaWZpZWRSZXN0T3B0KAogICAgICAgIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbkNvbnRpbnVhdGlvbik7CiAgICB0b2tlbiA9IHBhcnNlTWV0aG9kVHlwZVZhcih0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyc1JlcXVpcmVkT3B0KHRva2VuLCBNZW1iZXJLaW5kLkZhY3RvcnkpOwogICAgVG9rZW4gYXN5bmNUb2tlbiA9IHRva2VuLm5leHQ7CiAgICB0b2tlbiA9IHBhcnNlQXN5bmNNb2RpZmllck9wdCh0b2tlbik7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmICghaW5QbGFpblN5bmMpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihhc3luY1Rva2VuLCBmYXN0YS5tZXNzYWdlRmFjdG9yeU5vdFN5bmMpOwogICAgfQogICAgaWYgKG9wdGlvbmFsKCc9JywgbmV4dCkpIHsKICAgICAgaWYgKGV4dGVybmFsVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUV4dGVybmFsRmFjdG9yeVJlZGlyZWN0aW9uKTsKICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGV4dGVybmFsVG9rZW4gIT0gbnVsbCkgewogICAgICBpZiAoIW9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbEZhY3RvcnlXaXRoQm9keSk7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUZ1bmN0aW9uQm9keSh0b2tlbiwgZmFsc2UsIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKHZhckZpbmFsT3JDb25zdCAhPSBudWxsICYmICFvcHRpb25hbCgnbmF0aXZlJywgbmV4dCkpIHsKICAgICAgICBpZiAob3B0aW9uYWwoJ2NvbnN0JywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VDb25zdEZhY3RvcnkpOwogICAgICAgIH0KICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlRnVuY3Rpb25Cb2R5KHRva2VuLCBmYWxzZSwgZmFsc2UpOwogICAgfQogICAgbGlzdGVuZXIuZW5kRmFjdG9yeU1ldGhvZChiZWZvcmVTdGFydC5uZXh0LCBmYWN0b3J5S2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VPcGVyYXRvck5hbWUoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZm9yZVRva2VuID0gdG9rZW47CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ29wZXJhdG9yJywgdG9rZW4pKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5leHQuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3IpIHsKICAgICAgaWYgKGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbikgIT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIC8vIGBvcGVyYXRvcmAgaXMgYmVpbmcgdXNlZCBhcyBhbiBpZGVudGlmaWVyLgogICAgICAgIC8vIEZvciBleGFtcGxlOiBgaW50IG9wZXJhdG9yPFQ+KGZvbykgPT4gMDtgCiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubWV0aG9kRGVjbGFyYXRpb24pOwogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfSBlbHNlIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVPcGVyYXRvck5hbWUodG9rZW4sIG5leHQpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgcmV0dXJuIGVuc3VyZUlkZW50aWZpZXIoYmVmb3JlVG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm9wZXJhdG9yTmFtZSk7CiAgICB9IGVsc2UgaWYgKGlzVW5hcnlNaW51cyhuZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgbGlzdGVuZXIuaGFuZGxlT3BlcmF0b3JOYW1lKHRva2VuLCBuZXh0KTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgewogICAgICAvLyBSZWNvdmVyeQogICAgICAvLyBTY2FubmVyIHJlcG9ydHMgYW4gZXJyb3IgZm9yIGA9PT1gIGFuZCBgIT09YC4KICAgICAgaWYgKG5leHQudHlwZSAhPSBUb2tlblR5cGUuRVFfRVFfRVEgJiYKICAgICAgICAgIG5leHQudHlwZSAhPSBUb2tlblR5cGUuQkFOR19FUV9FUSkgewogICAgICAgIC8vIFRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYW4gaW52YWxpZCBvcGVyYXRvciBuYW1lLgogICAgICAgIC8vIFJlcG9ydCB0aGUgZXJyb3IsIGFjY2VwdCB0aGUgaW52YWxpZCBvcGVyYXRvciBuYW1lLCBhbmQgbW92ZSBvbi4KICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlSW52YWxpZE9wZXJhdG9yKTsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVJbnZhbGlkT3BlcmF0b3JOYW1lKHRva2VuLCBuZXh0KTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBUb2tlbiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW5Ub2tlbiA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5iZWdpbkZ1bmN0aW9uRXhwcmVzc2lvbihiZWdpblRva2VuKTsKICAgIHRva2VuID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVxdWlyZWRPcHQodG9rZW4sIE1lbWJlcktpbmQuTG9jYWwpOwogICAgdG9rZW4gPSBwYXJzZUFzeW5jT3B0Qm9keSh0b2tlbiwgdHJ1ZSwgZmFsc2UpOwogICAgbGlzdGVuZXIuZW5kRnVuY3Rpb25FeHByZXNzaW9uKGJlZ2luVG9rZW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VGdW5jdGlvbkxpdGVyYWwoCiAgICAgIFRva2VuIHN0YXJ0LAogICAgICBUb2tlbiBiZWZvcmVOYW1lLAogICAgICBUb2tlbiBuYW1lLAogICAgICBUeXBlSW5mbyB0eXBlSW5mbywKICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVQYXJhbSwKICAgICAgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgVG9rZW4gZm9ybWFscyA9IHR5cGVQYXJhbS5wYXJzZVZhcmlhYmxlcyhuYW1lLCB0aGlzKTsKICAgIGxpc3RlbmVyLmJlZ2luTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24oc3RhcnQubmV4dCk7CiAgICB0eXBlSW5mby5wYXJzZVR5cGUoc3RhcnQsIHRoaXMpOwogICAgcmV0dXJuIHBhcnNlTmFtZWRGdW5jdGlvblJlc3QoYmVmb3JlTmFtZSwgc3RhcnQubmV4dCwgZm9ybWFscywgdHJ1ZSk7CiAgfQoKICAvLy8gUGFyc2VzIHRoZSByZXN0IG9mIGEgbmFtZWQgZnVuY3Rpb24gZGVjbGFyYXRpb24gc3RhcnRpbmcgZnJvbSBpdHMgW25hbWVdCiAgLy8vIGJ1dCB0aGVuIHNraXBzIGFueSB0eXBlIHBhcmFtZXRlcnMgYW5kIGNvbnRpbnVlIHBhcnNpbmcgZnJvbSBbZm9ybWFsc10KICAvLy8gKHRoZSBmb3JtYWwgcGFyYW1ldGVycykuCiAgLy8vCiAgLy8vIElmIFtpc0Z1bmN0aW9uRXhwcmVzc2lvbl0gaXMgdHJ1ZSwgdGhpcyBtZXRob2QgcGFyc2VzIHRoZSByZXN0IG9mIG5hbWVkCiAgLy8vIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2hpY2ggaXNuJ3QgbGVnYWwgc3ludGF4IGluIERhcnQuICBVc2VmdWwgZm9yCiAgLy8vIHJlY292ZXJpbmcgZnJvbSBKYXZhc2NyaXB0IGNvZGUgYmVpbmcgcGFzdGVkIGludG8gYSBEYXJ0IHByb2dyYW0sIGFzIGl0CiAgLy8vIHdpbGwgaW50ZXJwcmV0IGBmdW5jdGlvbiBmb28oKSB7fWAgYXMgYSBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIHdpdGgKICAvLy8gcmV0dXJuIHR5cGUgYGZ1bmN0aW9uYCBhbmQgbmFtZSBgZm9vYC4KICAvLy8KICAvLy8gUHJlY29uZGl0aW9uOiB0aGUgcGFyc2VyIGhhcyBwcmV2aW91c2x5IGdlbmVyYXRlZCB0aGVzZSBldmVudHM6CiAgLy8vCiAgLy8vIC0gVHlwZSB2YXJpYWJsZXMuCiAgLy8vIC0gYGJlZ2luTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uYCBpZiBbaXNGdW5jdGlvbkV4cHJlc3Npb25dIGlzIGZhbHNlLAogIC8vLyAgIG90aGVyd2lzZSBgYmVnaW5OYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbmAuCiAgLy8vIC0gUmV0dXJuIHR5cGUuCiAgVG9rZW4gcGFyc2VOYW1lZEZ1bmN0aW9uUmVzdCgKICAgICAgVG9rZW4gYmVmb3JlTmFtZSwgVG9rZW4gYmVnaW4sIFRva2VuIGZvcm1hbHMsIGJvb2wgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgIFRva2VuIHRva2VuID0gYmVmb3JlTmFtZS5uZXh0OwogICAgbGlzdGVuZXIuYmVnaW5GdW5jdGlvbk5hbWUodG9rZW4pOwogICAgdG9rZW4gPQogICAgICAgIGVuc3VyZUlkZW50aWZpZXIoYmVmb3JlTmFtZSwgSWRlbnRpZmllckNvbnRleHQubG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKQogICAgICAgICAgICAubmV4dDsKICAgIGlmIChpc0Z1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgYmVmb3JlTmFtZS5uZXh0LCBmYXN0YS5tZXNzYWdlTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24pOwogICAgfQogICAgbGlzdGVuZXIuZW5kRnVuY3Rpb25OYW1lKGJlZ2luLCB0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyc1JlcXVpcmVkT3B0KGZvcm1hbHMsIE1lbWJlcktpbmQuTG9jYWwpOwogICAgdG9rZW4gPSBwYXJzZUluaXRpYWxpemVyc09wdCh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlQXN5bmNPcHRCb2R5KHRva2VuLCBpc0Z1bmN0aW9uRXhwcmVzc2lvbiwgZmFsc2UpOwogICAgaWYgKGlzRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgIGxpc3RlbmVyLmVuZE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKHRva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmVuZExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbih0b2tlbik7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2VzIGEgZnVuY3Rpb24gYm9keSBvcHRpb25hbGx5IHByZWNlZGVkIGJ5IGFuIGFzeW5jIG1vZGlmaWVyIChzZWUKICAvLy8gW3BhcnNlQXN5bmNNb2RpZmllck9wdF0pLiAgVGhpcyBtZXRob2QgaXMgdXNlZCBpbiBib3RoIGV4cHJlc3Npb24gY29udGV4dAogIC8vLyAod2hlbiBbb2ZGdW5jdGlvbkV4cHJlc3Npb25dIGlzIHRydWUpIGFuZCBzdGF0ZW1lbnQgY29udGV4dC4gSW4gc3RhdGVtZW50CiAgLy8vIGNvbnRleHQgKHdoZW4gW29mRnVuY3Rpb25FeHByZXNzaW9uXSBpcyBmYWxzZSksIGFuZCBpZiB0aGUgZnVuY3Rpb24gYm9keQogIC8vLyBpcyBvbiB0aGUgZm9ybSBgPT4gZXhwcmVzc2lvbmAsIGEgdHJhaWxpbmcgc2VtaWNvbG9uIGlzIHJlcXVpcmVkLgogIC8vLwogIC8vLyBJdCdzIGFuIGVycm9yIGlmIHRoZXJlJ3Mgbm8gZnVuY3Rpb24gYm9keSB1bmxlc3MgW2FsbG93QWJzdHJhY3RdIGlzIHRydWUuCiAgVG9rZW4gcGFyc2VBc3luY09wdEJvZHkoCiAgICAgIFRva2VuIHRva2VuLCBib29sIG9mRnVuY3Rpb25FeHByZXNzaW9uLCBib29sIGFsbG93QWJzdHJhY3QpIHsKICAgIEFzeW5jTW9kaWZpZXIgc2F2ZWRBc3luY01vZGlmaWVyID0gYXN5bmNTdGF0ZTsKICAgIHRva2VuID0gcGFyc2VBc3luY01vZGlmaWVyT3B0KHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VGdW5jdGlvbkJvZHkodG9rZW4sIG9mRnVuY3Rpb25FeHByZXNzaW9uLCBhbGxvd0Fic3RyYWN0KTsKICAgIGFzeW5jU3RhdGUgPSBzYXZlZEFzeW5jTW9kaWZpZXI7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUNvbnN0cnVjdG9yUmVmZXJlbmNlKFRva2VuIHRva2VuLCBbVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmddKSB7CiAgICBUb2tlbiBzdGFydCA9CiAgICAgICAgZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuY29uc3RydWN0b3JSZWZlcmVuY2UpOwogICAgbGlzdGVuZXIuYmVnaW5Db25zdHJ1Y3RvclJlZmVyZW5jZShzdGFydCk7CiAgICB0b2tlbiA9IHBhcnNlUXVhbGlmaWVkUmVzdE9wdCgKICAgICAgICBzdGFydCwgSWRlbnRpZmllckNvbnRleHQuY29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb24pOwogICAgdHlwZUFyZyA/Pz0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuKTsKICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICBUb2tlbiBwZXJpb2QgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCcuJywgdG9rZW4ubmV4dCkpIHsKICAgICAgcGVyaW9kID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHBlcmlvZCwKICAgICAgICAgIElkZW50aWZpZXJDb250ZXh0LmNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoCiAgICAgICAgICB0b2tlbi5uZXh0KTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZENvbnN0cnVjdG9yUmVmZXJlbmNlKHN0YXJ0LCBwZXJpb2QsIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz0nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRva2VuKTsKICAgIFRva2VuIGVxdWFscyA9IHRva2VuOwogICAgdG9rZW4gPSBwYXJzZUNvbnN0cnVjdG9yUmVmZXJlbmNlKHRva2VuKTsKICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoZXF1YWxzLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBza2lwRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuLCBib29sIGlzRXhwcmVzc2lvbiwgYm9vbCBhbGxvd0Fic3RyYWN0KSB7CiAgICBhc3NlcnQoIWlzRXhwcmVzc2lvbik7CiAgICB0b2tlbiA9IHNraXBBc3luY01vZGlmaWVyKHRva2VuKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCduYXRpdmUnLCBuZXh0KSkgewogICAgICBUb2tlbiBuYXRpdmVUb2tlbiA9IG5leHQ7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBza2lwIHRoZSBuYXRpdmUgY2xhdXNlIHJhdGhlciB0aGFuIHBhcnNpbmcgaXQKICAgICAgLy8gb3IgcmVtb3ZlIHRoaXMgY29kZSBjb21wbGV0ZWx5IHdoZW4gd2UgcmVtb3ZlIHN1cHBvcnQKICAgICAgLy8gZm9yIHRoZSBgbmF0aXZlYCBjbGF1c2UuCiAgICAgIHRva2VuID0gcGFyc2VOYXRpdmVDbGF1c2UodG9rZW4pOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkKG5hdGl2ZVRva2VuLCBuZXh0KTsKICAgICAgICByZXR1cm4gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkKG5hdGl2ZVRva2VuLCBuZXh0KTsKICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHJlY292ZXIgYW5kIHNraXAgZnVuY3Rpb24gYm9keQogICAgfQogICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwodmFsdWUsICc7JykpIHsKICAgICAgdG9rZW4gPSBuZXh0OwogICAgICBpZiAoIWFsbG93QWJzdHJhY3QpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRCb2R5KTsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVOb0Z1bmN0aW9uQm9keSh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJz0+JykpIHsKICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24obmV4dCk7CiAgICAgIC8vIFRoZXJlIG91Z2h0IHRvIGJlIGEgc2VtaWNvbG9uIGZvbGxvd2luZyB0aGUgZXhwcmVzc2lvbiwgYnV0IHdlIGNoZWNrCiAgICAgIC8vIGJlZm9yZSBhZHZhbmNpbmcgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkgdGhlIG1ldGhvZAogICAgICAvLyBbcGFyc2VGdW5jdGlvbkJvZHldIHJlY292ZXJzIHdoZW4gdGhlIHNlbWljb2xvbiBpcyBtaXNzaW5nLgogICAgICBpZiAob3B0aW9uYWwoJzsnLCB0b2tlbi5uZXh0KSkgewogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkKHRva2VuLCB0cnVlKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnPScpKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgZmFzdGEubWVzc2FnZUV4cGVjdGVkQm9keSk7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgLy8gVGhlcmUgb3VnaHQgdG8gYmUgYSBzZW1pY29sb24gZm9sbG93aW5nIHRoZSBleHByZXNzaW9uLCBidXQgd2UgY2hlY2sKICAgICAgLy8gYmVmb3JlIGFkdmFuY2luZyBpbiBvcmRlciB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHdheSB0aGUgbWV0aG9kCiAgICAgIC8vIFtwYXJzZUZ1bmN0aW9uQm9keV0gcmVjb3ZlcnMgd2hlbiB0aGUgc2VtaWNvbG9uIGlzIG1pc3NpbmcuCiAgICAgIGlmIChvcHRpb25hbCgnOycsIHRva2VuLm5leHQpKSB7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIGxpc3RlbmVyLmhhbmRsZUZ1bmN0aW9uQm9keVNraXBwZWQodG9rZW4sIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBza2lwQmxvY2sodG9rZW4pOwogICAgICBsaXN0ZW5lci5oYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkKHRva2VuLCBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2VzIGEgZnVuY3Rpb24gYm9keS4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gYm90aCBleHByZXNzaW9uIGNvbnRleHQKICAvLy8gKHdoZW4gW29mRnVuY3Rpb25FeHByZXNzaW9uXSBpcyB0cnVlKSBhbmQgc3RhdGVtZW50IGNvbnRleHQuIEluIHN0YXRlbWVudAogIC8vLyBjb250ZXh0ICh3aGVuIFtvZkZ1bmN0aW9uRXhwcmVzc2lvbl0gaXMgZmFsc2UpLCBhbmQgaWYgdGhlIGZ1bmN0aW9uIGJvZHkKICAvLy8gaXMgb24gdGhlIGZvcm0gYD0+IGV4cHJlc3Npb25gLCBhIHRyYWlsaW5nIHNlbWljb2xvbiBpcyByZXF1aXJlZC4KICAvLy8KICAvLy8gSXQncyBhbiBlcnJvciBpZiB0aGVyZSdzIG5vIGZ1bmN0aW9uIGJvZHkgdW5sZXNzIFthbGxvd0Fic3RyYWN0XSBpcyB0cnVlLgogIFRva2VuIHBhcnNlRnVuY3Rpb25Cb2R5KAogICAgICBUb2tlbiB0b2tlbiwgYm9vbCBvZkZ1bmN0aW9uRXhwcmVzc2lvbiwgYm9vbCBhbGxvd0Fic3RyYWN0KSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnbmF0aXZlJywgbmV4dCkpIHsKICAgICAgVG9rZW4gbmF0aXZlVG9rZW4gPSBuZXh0OwogICAgICB0b2tlbiA9IHBhcnNlTmF0aXZlQ2xhdXNlKHRva2VuKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnOycsIG5leHQpKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5KG5hdGl2ZVRva2VuLCBuZXh0KTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbE1ldGhvZFdpdGhCb2R5KTsKICAgICAgbGlzdGVuZXIuaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZChuYXRpdmVUb2tlbiwgbmV4dCk7CiAgICAgIC8vIElnbm9yZSB0aGUgbmF0aXZlIGtleXdvcmQgYW5kIGZhbGwgdGhyb3VnaCB0byBwYXJzZSB0aGUgYm9keQogICAgfQogICAgaWYgKG9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgaWYgKCFhbGxvd0Fic3RyYWN0KSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRCb2R5KTsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVFbXB0eUZ1bmN0aW9uQm9keShuZXh0KTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCc9PicsIG5leHQpKSB7CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkobmV4dCwgb2ZGdW5jdGlvbkV4cHJlc3Npb24pOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgIC8vIFJlY292ZXIgZnJvbSBhIGJhZCBmYWN0b3J5IG1ldGhvZC4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRCb2R5KTsKICAgICAgbmV4dCA9IHJld3JpdGVyLmluc2VydFRva2VuKAogICAgICAgICAgbmV4dCwgbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5GVU5DVElPTiwgbmV4dC5uZXh0LmNoYXJPZmZzZXQpKTsKICAgICAgVG9rZW4gYmVnaW4gPSBuZXh0OwogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihuZXh0KTsKICAgICAgaWYgKCFvZkZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KGJlZ2luLCB0b2tlbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShiZWdpbiwgbnVsbCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogICAgVG9rZW4gYmVnaW4gPSBuZXh0OwogICAgaW50IHN0YXRlbWVudENvdW50ID0gMDsKICAgIGlmICghb3B0aW9uYWwoJ3snLCBuZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICAvLyBJZiBgcmV0dXJuYCB1c2VkIGluc3RlYWQgb2YgYD0+YCwgdGhlbiByZXBvcnQgYW4gZXJyb3IgYW5kIGNvbnRpbnVlCiAgICAgIGlmIChvcHRpb25hbCgncmV0dXJuJywgbmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VFeHBlY3RlZEJvZHkpOwogICAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRUb2tlbigKICAgICAgICAgICAgbmV4dCwgbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5GVU5DVElPTiwgbmV4dC5uZXh0LmNoYXJPZmZzZXQpKTsKICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KG5leHQsIG9mRnVuY3Rpb25FeHByZXNzaW9uKTsKICAgICAgfQogICAgICAvLyBJZiB0aGVyZSBpcyBhIHN0cmF5IHNpbXBsZSBpZGVudGlmaWVyIGluIHRoZSBmdW5jdGlvbiBleHByZXNzaW9uCiAgICAgIC8vIGJlY2F1c2UgdGhlIHVzZXIgaXMgdHlwaW5nIChlLmcuIGAoKSBhc3kgPT4gbnVsbDtgKQogICAgICAvLyB0aGVuIHJlcG9ydCBhbiBlcnJvciwgc2tpcCB0aGUgdG9rZW4sIGFuZCBjb250aW51ZSBwYXJzaW5nLgogICAgICBpZiAobmV4dC5pc0tleXdvcmRPcklkZW50aWZpZXIgJiYgb3B0aW9uYWwoJz0+JywgbmV4dC5uZXh0KSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4obmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkobmV4dC5uZXh0LCBvZkZ1bmN0aW9uRXhwcmVzc2lvbik7CiAgICAgIH0KICAgICAgaWYgKG5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyICYmIG9wdGlvbmFsKCd7JywgbmV4dC5uZXh0KSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4obmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBiZWdpbiA9IG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBwYXJzZSB0aGUgYmxvY2suCiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBlbnN1cmVCbG9jayh0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEZ1bmN0aW9uQm9keSwgbnVsbCk7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZEZ1bmN0aW9uQm9keSh0b2tlbik7CiAgICAgICAgcmV0dXJuIHRva2VuLmVuZEdyb3VwOwogICAgICB9CiAgICB9CgogICAgTG9vcFN0YXRlIHNhdmVkTG9vcFN0YXRlID0gbG9vcFN0YXRlOwogICAgbG9vcFN0YXRlID0gTG9vcFN0YXRlLk91dHNpZGVMb29wOwogICAgbGlzdGVuZXIuYmVnaW5CbG9ja0Z1bmN0aW9uQm9keShiZWdpbik7CiAgICB0b2tlbiA9IG5leHQ7CiAgICB3aGlsZSAobm90RW9mT3JWYWx1ZSgnfScsIHRva2VuLm5leHQpKSB7CiAgICAgIFRva2VuIHN0YXJ0VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KHRva2VuKTsKICAgICAgaWYgKGlkZW50aWNhbCh0b2tlbi5uZXh0LCBzdGFydFRva2VuKSkgewogICAgICAgIC8vIE5vIHByb2dyZXNzIHdhcyBtYWRlLCBzbyB3ZSByZXBvcnQgdGhlIGN1cnJlbnQgdG9rZW4gYXMgYmVpbmcgaW52YWxpZAogICAgICAgIC8vIGFuZCBtb3ZlIGZvcndhcmQuCiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuLndpdGhBcmd1bWVudHModG9rZW4pKTsKICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgKytzdGF0ZW1lbnRDb3VudDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnfScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRCbG9ja0Z1bmN0aW9uQm9keShzdGF0ZW1lbnRDb3VudCwgYmVnaW4sIHRva2VuKTsKICAgIGxvb3BTdGF0ZSA9IHNhdmVkTG9vcFN0YXRlOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuLCBib29sIG9mRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJz0+JywgdG9rZW4pKTsKICAgIFRva2VuIGJlZ2luID0gdG9rZW47CiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICBpZiAoIW9mRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShiZWdpbiwgdG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShiZWdpbiwgbnVsbCk7CiAgICB9CiAgICBpZiAoaW5HZW5lcmF0b3IpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFN0YXRlbWVudCgKICAgICAgICAgIGJlZ2luLCBmYXN0YS5tZXNzYWdlR2VuZXJhdG9yUmV0dXJuc1ZhbHVlKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHNraXBBc3luY01vZGlmaWVyKFRva2VuIHRva2VuKSB7CiAgICBTdHJpbmcgdmFsdWUgPSB0b2tlbi5uZXh0LnN0cmluZ1ZhbHVlOwogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2FzeW5jJykpIHsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB2YWx1ZSA9IHRva2VuLm5leHQuc3RyaW5nVmFsdWU7CgogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnKicpKSB7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3N5bmMnKSkgewogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIHZhbHVlID0gdG9rZW4ubmV4dC5zdHJpbmdWYWx1ZTsKCiAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICcqJykpIHsKICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlQXN5bmNNb2RpZmllck9wdChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYXN5bmM7CiAgICBUb2tlbiBzdGFyOwogICAgYXN5bmNTdGF0ZSA9IEFzeW5jTW9kaWZpZXIuU3luYzsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCdhc3luYycsIG5leHQpKSB7CiAgICAgIGFzeW5jID0gdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcqJywgbmV4dCkpIHsKICAgICAgICBhc3luY1N0YXRlID0gQXN5bmNNb2RpZmllci5Bc3luY1N0YXI7CiAgICAgICAgc3RhciA9IG5leHQ7CiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIGFzeW5jU3RhdGUgPSBBc3luY01vZGlmaWVyLkFzeW5jOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdzeW5jJywgbmV4dCkpIHsKICAgICAgYXN5bmMgPSB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJyonLCBuZXh0KSkgewogICAgICAgIGFzeW5jU3RhdGUgPSBBc3luY01vZGlmaWVyLlN5bmNTdGFyOwogICAgICAgIHN0YXIgPSBuZXh0OwogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGFzeW5jLCBmYXN0YS5tZXNzYWdlSW52YWxpZFN5bmNNb2RpZmllcik7CiAgICAgIH0KICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUFzeW5jTW9kaWZpZXIoYXN5bmMsIHN0YXIpOwogICAgaWYgKCFpblBsYWluU3luYyAmJiBvcHRpb25hbCgnOycsIHRva2VuLm5leHQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4ubmV4dCwgZmFzdGEubWVzc2FnZUFic3RyYWN0Tm90U3luYyk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBpbnQgc3RhdGVtZW50RGVwdGggPSAwOwogIFRva2VuIHBhcnNlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGVtZW50RGVwdGgrKyA+IDUwMCkgewogICAgICAvLyBUaGlzIGhhcHBlbnMgZm9yIGRlZ2VuZXJhdGUgcHJvZ3JhbXMsIGZvciBleGFtcGxlLCBhIGxvdCBvZiBuZXN0ZWQKICAgICAgLy8gaWYtc3RhdGVtZW50cy4gVGhlIGxhbmd1YWdlIHRlc3QgZGVlcF9uZXN0aW5nMl9uZWdhdGl2ZV90ZXN0LCBmb3IKICAgICAgLy8gZXhhbXBsZSwgcHJvdm9rZXMgdGhpcy4KICAgICAgcmV0dXJuIHJlY292ZXJGcm9tU3RhY2tPdmVyZmxvdyh0b2tlbik7CiAgICB9CiAgICBUb2tlbiByZXN1bHQgPSBwYXJzZVN0YXRlbWVudFgodG9rZW4pOwogICAgc3RhdGVtZW50RGVwdGgtLTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBUb2tlbiBwYXJzZVN0YXRlbWVudFgoVG9rZW4gdG9rZW4pIHsKICAgIGlmIChpZGVudGljYWwodG9rZW4ubmV4dC5raW5kLCBJREVOVElGSUVSX1RPS0VOKSkgewogICAgICBpZiAob3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0Lm5leHQpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTGFiZWxlZFN0YXRlbWVudCh0b2tlbik7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25BZnRlck1vZGlmaWVycygKICAgICAgICAgIHRva2VuLCB0b2tlbiwgbnVsbCwgbnVsbCwgbnVsbCwgZmFsc2UpOwogICAgfQogICAgZmluYWwgdmFsdWUgPSB0b2tlbi5uZXh0LnN0cmluZ1ZhbHVlOwogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3snKSkgewogICAgICAvLyBUaGUgc2Nhbm5lciBlbnN1cmVzIHRoYXQgYHtgIGFsd2F5cyBoYXMgYSBjbG9zaW5nIGB9YC4KICAgICAgcmV0dXJuIHBhcnNlQmxvY2sodG9rZW4sIG51bGwpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdyZXR1cm4nKSkgewogICAgICByZXR1cm4gcGFyc2VSZXR1cm5TdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICd2YXInKSB8fCBpZGVudGljYWwodmFsdWUsICdmaW5hbCcpKSB7CiAgICAgIFRva2VuIHZhck9yRmluYWwgPSB0b2tlbi5uZXh0OwogICAgICBpZiAoIWlzTW9kaWZpZXIodmFyT3JGaW5hbC5uZXh0KSkgewogICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uQWZ0ZXJNb2RpZmllcnMoCiAgICAgICAgICAgIHZhck9yRmluYWwsIHRva2VuLCBudWxsLCB2YXJPckZpbmFsLCBudWxsLCBmYWxzZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24odG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdsYXRlJykpIHsKICAgICAgVG9rZW4gbGF0ZVRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKCFpc01vZGlmaWVyKGxhdGVUb2tlbi5uZXh0KSkgewogICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uQWZ0ZXJNb2RpZmllcnMoCiAgICAgICAgICAgIGxhdGVUb2tlbiwgdG9rZW4sIGxhdGVUb2tlbiwgbnVsbCwgbnVsbCwgZmFsc2UpOwogICAgICB9CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uKHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnaWYnKSkgewogICAgICByZXR1cm4gcGFyc2VJZlN0YXRlbWVudCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2F3YWl0JykgJiYgb3B0aW9uYWwoJ2ZvcicsIHRva2VuLm5leHQubmV4dCkpIHsKICAgICAgcmV0dXJuIHBhcnNlRm9yU3RhdGVtZW50KHRva2VuLm5leHQsIHRva2VuLm5leHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdmb3InKSkgewogICAgICByZXR1cm4gcGFyc2VGb3JTdGF0ZW1lbnQodG9rZW4sIG51bGwpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdyZXRocm93JykpIHsKICAgICAgcmV0dXJuIHBhcnNlUmV0aHJvd1N0YXRlbWVudCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3doaWxlJykpIHsKICAgICAgcmV0dXJuIHBhcnNlV2hpbGVTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdkbycpKSB7CiAgICAgIHJldHVybiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICd0cnknKSkgewogICAgICByZXR1cm4gcGFyc2VUcnlTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdzd2l0Y2gnKSkgewogICAgICByZXR1cm4gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdicmVhaycpKSB7CiAgICAgIHJldHVybiBwYXJzZUJyZWFrU3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnY29udGludWUnKSkgewogICAgICByZXR1cm4gcGFyc2VDb250aW51ZVN0YXRlbWVudCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2Fzc2VydCcpKSB7CiAgICAgIHJldHVybiBwYXJzZUFzc2VydFN0YXRlbWVudCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJzsnKSkgewogICAgICByZXR1cm4gcGFyc2VFbXB0eVN0YXRlbWVudCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3lpZWxkJykpIHsKICAgICAgc3dpdGNoIChhc3luY1N0YXRlKSB7CiAgICAgICAgY2FzZSBBc3luY01vZGlmaWVyLlN5bmM6CiAgICAgICAgICBpZiAob3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0Lm5leHQpKSB7CiAgICAgICAgICAgIHJldHVybiBwYXJzZUxhYmVsZWRTdGF0ZW1lbnQodG9rZW4pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24odG9rZW4pOwoKICAgICAgICBjYXNlIEFzeW5jTW9kaWZpZXIuU3luY1N0YXI6CiAgICAgICAgY2FzZSBBc3luY01vZGlmaWVyLkFzeW5jU3RhcjoKICAgICAgICAgIHJldHVybiBwYXJzZVlpZWxkU3RhdGVtZW50KHRva2VuKTsKCiAgICAgICAgY2FzZSBBc3luY01vZGlmaWVyLkFzeW5jOgogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbi5uZXh0LCBmYXN0YS5tZXNzYWdlWWllbGROb3RHZW5lcmF0b3IpOwogICAgICAgICAgcmV0dXJuIHBhcnNlWWllbGRTdGF0ZW1lbnQodG9rZW4pOwogICAgICB9CiAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvcjogVW5rbm93biBhc3luY1N0YXRlOiAnJGFzeW5jU3RhdGUnLiI7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2NvbnN0JykpIHsKICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yQ29uc3REZWNsYXJhdGlvbih0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2F3YWl0JykpIHsKICAgICAgaWYgKGluUGxhaW5TeW5jKSB7CiAgICAgICAgaWYgKCFsb29rc0xpa2VBd2FpdEV4cHJlc3Npb24odG9rZW4pKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbih0b2tlbik7CiAgICAgICAgfQogICAgICAgIC8vIFJlY292ZXJ5OiBsb29rcyBsaWtlIGFuIGV4cHJlc3Npb24gcHJlY2VkZWQgYnkgYGF3YWl0YAogICAgICAgIC8vIGJ1dCBub3QgaW5zaWRlIGFuIGFzeW5jIGNvbnRleHQuCiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudAogICAgICAgIC8vIGFuZCBwYXJzZUF3YWl0RXhwcmVzc2lvbiB3aWxsIHJlcG9ydCB0aGUgZXJyb3IuCiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3NldCcpICYmIHRva2VuLm5leHQubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgLy8gUmVjb3Zlcnk6IGludmFsaWQgdXNlIG9mIGBzZXRgCiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICB0b2tlbi5uZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudFgodG9rZW4ubmV4dCk7CiAgICB9IGVsc2UgaWYgKHRva2VuLm5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIGlmIChvcHRpb25hbCgnOicsIHRva2VuLm5leHQubmV4dCkpIHsKICAgICAgICByZXR1cm4gcGFyc2VMYWJlbGVkU3RhdGVtZW50KHRva2VuKTsKICAgICAgfQogICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbih0b2tlbik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbih0b2tlbik7CiAgICB9CiAgfQoKICAvLy8gYGBgCiAgLy8vIHlpZWxkU3RhdGVtZW50OgogIC8vLyAgICd5aWVsZCcgZXhwcmVzc2lvbj8gJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VZaWVsZFN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3lpZWxkJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luWWllbGRTdGF0ZW1lbnQoYmVnaW4pOwogICAgVG9rZW4gc3RhclRva2VuOwogICAgaWYgKG9wdGlvbmFsKCcqJywgdG9rZW4ubmV4dCkpIHsKICAgICAgc3RhclRva2VuID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kWWllbGRTdGF0ZW1lbnQoYmVnaW4sIHN0YXJUb2tlbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyByZXR1cm5TdGF0ZW1lbnQ6CiAgLy8vICAgJ3JldHVybicgZXhwcmVzc2lvbj8gJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdyZXR1cm4nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5SZXR1cm5TdGF0ZW1lbnQoYmVnaW4pOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJzsnLCBuZXh0KSkgewogICAgICBsaXN0ZW5lci5lbmRSZXR1cm5TdGF0ZW1lbnQoZmFsc2UsIGJlZ2luLCBuZXh0KTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRSZXR1cm5TdGF0ZW1lbnQodHJ1ZSwgYmVnaW4sIHRva2VuKTsKICAgIGlmIChpbkdlbmVyYXRvcikgewogICAgICBsaXN0ZW5lci5oYW5kbGVJbnZhbGlkU3RhdGVtZW50KAogICAgICAgICAgYmVnaW4sIGZhc3RhLm1lc3NhZ2VHZW5lcmF0b3JSZXR1cm5zVmFsdWUpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBsYWJlbDoKICAvLy8gICBpZGVudGlmaWVyICc6JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGFiZWwoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydCh0b2tlbi5uZXh0LmlzSWRlbnRpZmllcik7CiAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmxhYmVsRGVjbGFyYXRpb24pLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJzonLCB0b2tlbikpOwogICAgbGlzdGVuZXIuaGFuZGxlTGFiZWwodG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBzdGF0ZW1lbnQ6CiAgLy8vICAgbGFiZWwqIG5vbkxhYmVsbGVkU3RhdGVtZW50CiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VMYWJlbGVkU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChuZXh0LmlzSWRlbnRpZmllcik7CiAgICBhc3NlcnQob3B0aW9uYWwoJzonLCBuZXh0Lm5leHQpKTsKICAgIGludCBsYWJlbENvdW50ID0gMDsKICAgIGRvIHsKICAgICAgdG9rZW4gPSBwYXJzZUxhYmVsKHRva2VuKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGxhYmVsQ291bnQrKzsKICAgIH0gd2hpbGUgKG5leHQuaXNJZGVudGlmaWVyICYmIG9wdGlvbmFsKCc6JywgbmV4dC5uZXh0KSk7CiAgICBsaXN0ZW5lci5iZWdpbkxhYmVsZWRTdGF0ZW1lbnQobmV4dCwgbGFiZWxDb3VudCk7CiAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZExhYmVsZWRTdGF0ZW1lbnQobGFiZWxDb3VudCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGV4cHJlc3Npb25TdGF0ZW1lbnQ6CiAgLy8vICAgZXhwcmVzc2lvbj8gJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgLy8vCiAgLy8vIE5vdGU6IFRoaXMgbWV0aG9kIGNhbiBmYWlsIHRvIG1ha2UgcHJvZ3Jlc3MuIElmIHRoZXJlIGlzIG5laXRoZXIgYW4KICAvLy8gZXhwcmVzc2lvbiBub3IgYSBzZW1pLWNvbG9uLCB0aGVuIGEgc3ludGhldGljIGlkZW50aWZpZXIgYW5kIHN5bnRoZXRpYwogIC8vLyBzZW1pY29sb24gd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmUgW3Rva2VuXSBhbmQgdGhlIHNlbWljb2xvbiB3aWxsIGJlCiAgLy8vIHJldHVybmVkLgogIFRva2VuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgLy8gVE9ETyhicmlhbndpbGtlcnNvbik6IElmIHRoZSBuZXh0IHRva2VuIGlzIG5vdCB0aGUgc3RhcnQgb2YgYSB2YWxpZAogICAgLy8gZXhwcmVzc2lvbiwgdGhlbiB0aGlzIG1ldGhvZCBzaG91bGRuJ3QgcmVwb3J0IHRoYXQgd2UgaGF2ZSBhbiBleHByZXNzaW9uCiAgICAvLyBzdGF0ZW1lbnQuCiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVFeHByZXNzaW9uU3RhdGVtZW50KHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIGludCBleHByZXNzaW9uRGVwdGggPSAwOwogIFRva2VuIHBhcnNlRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgaWYgKGV4cHJlc3Npb25EZXB0aCsrID4gNTAwKSB7CiAgICAgIC8vIFRoaXMgaGFwcGVucyBpbiBkZWdlbmVyYXRlIHByb2dyYW1zLCBmb3IgZXhhbXBsZSwgd2l0aCBhIGxvdCBvZiBuZXN0ZWQKICAgICAgLy8gbGlzdCBsaXRlcmFscy4gVGhpcyBpcyBwcm92b2tlZCBieSwgZm9yIGV4YW1wbGUsIHRoZSBsYW5ndWFnZSB0ZXN0CiAgICAgIC8vIGRlZXBfbmVzdGluZzFfbmVnYXRpdmVfdGVzdC4KICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZVN0YWNrT3ZlcmZsb3cpOwoKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgVG9rZW4gZW5kR3JvdXAgPSBuZXh0LmVuZEdyb3VwOwogICAgICBpZiAoZW5kR3JvdXAgIT0gbnVsbCkgewogICAgICAgIHdoaWxlICghbmV4dC5pc0VvZiAmJiAhaWRlbnRpY2FsKG5leHQsIGVuZEdyb3VwKSkgewogICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHdoaWxlICghaXNPbmVPZihuZXh0LCBjb25zdCBbJyknLCAnXScsICd9JywgJzsnXSkpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXRva2VuLmlzRW9mKSB7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBvcHRpb25hbCgndGhyb3cnLCB0b2tlbi5uZXh0KQogICAgICAgICAgPyBwYXJzZVRocm93RXhwcmVzc2lvbih0b2tlbiwgdHJ1ZSkKICAgICAgICAgIDogcGFyc2VQcmVjZWRlbmNlRXhwcmVzc2lvbih0b2tlbiwgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCB0cnVlKTsKICAgIH0KICAgIGV4cHJlc3Npb25EZXB0aC0tOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uV2l0aG91dENhc2NhZGUoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBvcHRpb25hbCgndGhyb3cnLCB0b2tlbi5uZXh0KQogICAgICAgID8gcGFyc2VUaHJvd0V4cHJlc3Npb24odG9rZW4sIGZhbHNlKQogICAgICAgIDogcGFyc2VQcmVjZWRlbmNlRXhwcmVzc2lvbih0b2tlbiwgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBmYWxzZSk7CiAgfQoKICBUb2tlbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvblJlc3QoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIHF1ZXN0aW9uID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc/JywgcXVlc3Rpb24pKTsKICAgIGxpc3RlbmVyLmJlZ2luQ29uZGl0aW9uYWxFeHByZXNzaW9uKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uV2l0aG91dENhc2NhZGUodG9rZW4pOwogICAgVG9rZW4gY29sb24gPSBlbnN1cmVDb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVDb25kaXRpb25hbEV4cHJlc3Npb25Db2xvbigpOwogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb25XaXRob3V0Q2FzY2FkZShjb2xvbik7CiAgICBsaXN0ZW5lci5lbmRDb25kaXRpb25hbEV4cHJlc3Npb24ocXVlc3Rpb24sIGNvbG9uKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb24oCiAgICAgIFRva2VuIHRva2VuLCBpbnQgcHJlY2VkZW5jZSwgYm9vbCBhbGxvd0Nhc2NhZGVzKSB7CiAgICBhc3NlcnQocHJlY2VkZW5jZSA+PSAxKTsKICAgIGFzc2VydChwcmVjZWRlbmNlIDw9IFNFTEVDVE9SX1BSRUNFREVOQ0UpOwogICAgdG9rZW4gPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbih0b2tlbiwgYWxsb3dDYXNjYWRlcyk7CiAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZyA9IGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzKHRva2VuKTsKICAgIGlmICh0eXBlQXJnICE9IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgLy8gRm9yIGV4YW1wbGUgYShiKTxUPihjKSwgd2hlcmUgdG9rZW4gaXMgYmVmb3JlICc8Jy4KICAgICAgdG9rZW4gPSB0eXBlQXJnLnBhcnNlQXJndW1lbnRzKHRva2VuLCB0aGlzKTsKICAgICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgdG9rZW4ubmV4dCkpOwogICAgfQogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBUb2tlblR5cGUgdHlwZSA9IG5leHQudHlwZTsKICAgIGludCB0b2tlbkxldmVsID0gX2NvbXB1dGVQcmVjZWRlbmNlKG5leHQpOwogICAgZm9yIChpbnQgbGV2ZWwgPSB0b2tlbkxldmVsOyBsZXZlbCA+PSBwcmVjZWRlbmNlOyAtLWxldmVsKSB7CiAgICAgIGludCBsYXN0QmluYXJ5RXhwcmVzc2lvbkxldmVsID0gLTE7CiAgICAgIHdoaWxlIChpZGVudGljYWwodG9rZW5MZXZlbCwgbGV2ZWwpKSB7CiAgICAgICAgVG9rZW4gb3BlcmF0b3IgPSBuZXh0OwogICAgICAgIGlmIChpZGVudGljYWwodG9rZW5MZXZlbCwgQ0FTQ0FERV9QUkVDRURFTkNFKSkgewogICAgICAgICAgaWYgKCFhbGxvd0Nhc2NhZGVzKSB7CiAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICAgIH0KICAgICAgICAgIHRva2VuID0gcGFyc2VDYXNjYWRlRXhwcmVzc2lvbih0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodG9rZW5MZXZlbCwgQVNTSUdOTUVOVF9QUkVDRURFTkNFKSkgewogICAgICAgICAgLy8gUmlnaHQgYXNzb2NpYXRpdmUsIHNvIHdlIHJlY3Vyc2UgYXQgdGhlIHNhbWUgcHJlY2VkZW5jZQogICAgICAgICAgLy8gbGV2ZWwuCiAgICAgICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgIHRva2VuID0gb3B0aW9uYWwoJ3Rocm93JywgbmV4dC5uZXh0KQogICAgICAgICAgICAgID8gcGFyc2VUaHJvd0V4cHJlc3Npb24obmV4dCwgZmFsc2UpCiAgICAgICAgICAgICAgOiBwYXJzZVByZWNlZGVuY2VFeHByZXNzaW9uKG5leHQsIGxldmVsLCBhbGxvd0Nhc2NhZGVzKTsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZUFzc2lnbm1lbnRFeHByZXNzaW9uKG9wZXJhdG9yKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh0b2tlbkxldmVsLCBQT1NURklYX1BSRUNFREVOQ0UpKSB7CiAgICAgICAgICBpZiAoKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuUExVU19QTFVTKSkgfHwKICAgICAgICAgICAgICAoaWRlbnRpY2FsKHR5cGUsIFRva2VuVHlwZS5NSU5VU19NSU5VUykpKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuYXJ5UG9zdGZpeEFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuLm5leHQpOwogICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuQkFORykpIHsKICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTm9uTnVsbEFzc2VydEV4cHJlc3Npb24odG9rZW4ubmV4dCk7CiAgICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh0b2tlbkxldmVsLCBTRUxFQ1RPUl9QUkVDRURFTkNFKSkgewogICAgICAgICAgaWYgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuUEVSSU9EKSB8fAogICAgICAgICAgICAgIGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuUVVFU1RJT05fUEVSSU9EKSkgewogICAgICAgICAgICAvLyBMZWZ0IGFzc29jaWF0aXZlLCBzbyB3ZSByZWN1cnNlIGF0IHRoZSBuZXh0IGhpZ2hlciBwcmVjZWRlbmNlCiAgICAgICAgICAgIC8vIGxldmVsLiBIb3dldmVyLCBTRUxFQ1RPUl9QUkVDRURFTkNFIGlzIHRoZSBoaWdoZXN0IGxldmVsLCBzbyB3ZQogICAgICAgICAgICAvLyBzaG91bGQganVzdCBjYWxsIFtwYXJzZVVuYXJ5RXhwcmVzc2lvbl0gZGlyZWN0bHkuIEhvd2V2ZXIsIGEKICAgICAgICAgICAgLy8gdW5hcnkgZXhwcmVzc2lvbiBpc24ndCBsZWdhbCBhZnRlciBhIHBlcmlvZCwgc28gd2UgY2FsbAogICAgICAgICAgICAvLyBbcGFyc2VQcmltYXJ5XSBpbnN0ZWFkLgogICAgICAgICAgICB0b2tlbiA9IHBhcnNlUHJpbWFyeSgKICAgICAgICAgICAgICAgIHRva2VuLm5leHQsIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb25Db250aW51YXRpb24pOwogICAgICAgICAgICBsaXN0ZW5lci5lbmRCaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHR5cGUsIFRva2VuVHlwZS5PUEVOX1BBUkVOKSB8fAogICAgICAgICAgICAgIGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuT1BFTl9TUVVBUkVfQlJBQ0tFVCkgfHwKICAgICAgICAgICAgICBpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLlFVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUKSkgewogICAgICAgICAgICB0b2tlbiA9IHBhcnNlQXJndW1lbnRPckluZGV4U3Rhcih0b2tlbiwgdHlwZUFyZyk7CiAgICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuSU5ERVgpKSB7CiAgICAgICAgICAgIEJlZ2luVG9rZW4gcmVwbGFjZW1lbnQgPSBsaW5rKAogICAgICAgICAgICAgICAgbmV3IEJlZ2luVG9rZW4oVG9rZW5UeXBlLk9QRU5fU1FVQVJFX0JSQUNLRVQsIG5leHQuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgICBuZXh0LnByZWNlZGluZ0NvbW1lbnRzKSwKICAgICAgICAgICAgICAgIG5ldyBUb2tlbihUb2tlblR5cGUuQ0xPU0VfU1FVQVJFX0JSQUNLRVQsIG5leHQuY2hhck9mZnNldCArIDEpKTsKICAgICAgICAgICAgcmV3cml0ZXIucmVwbGFjZVRva2VuRm9sbG93aW5nKHRva2VuLCByZXBsYWNlbWVudCk7CiAgICAgICAgICAgIHJlcGxhY2VtZW50LmVuZFRva2VuID0gcmVwbGFjZW1lbnQubmV4dDsKICAgICAgICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50T3JJbmRleFN0YXIodG9rZW4sIG5vVHlwZVBhcmFtT3JBcmcpOwogICAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLkJBTkcpKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uKHRva2VuLm5leHQpOwogICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICAgICAgdG9rZW4ubmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLklTKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUlzT3BlcmF0b3JSZXN0KHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuQVMpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlQXNPcGVyYXRvclJlc3QodG9rZW4pOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHR5cGUsIFRva2VuVHlwZS5RVUVTVElPTikpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb25SZXN0KHRva2VuKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGxldmVsID09IEVRVUFMSVRZX1BSRUNFREVOQ0UgfHwgbGV2ZWwgPT0gUkVMQVRJT05BTF9QUkVDRURFTkNFKSB7CiAgICAgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IChhID09IGIgPT0gYykgb3IgKGEgPCBiIDwgYykuCiAgICAgICAgICAgIGlmIChsYXN0QmluYXJ5RXhwcmVzc2lvbkxldmVsID09IGxldmVsKSB7CiAgICAgICAgICAgICAgLy8gUmVwb3J0IGFuIGVycm9yLCB0aGVuIGNvbnRpbnVlIHBhcnNpbmcgYXMgaWYgaXQgaXMgbGVnYWwuCiAgICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgICAgbmV4dCwgZmFzdGEubWVzc2FnZUVxdWFsaXR5Q2Fubm90QmVFcXVhbGl0eU9wZXJhbmQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIFNldCBhIGZsYWcgdG8gY2F0Y2ggc3Vic2VxdWVudCBiaW5hcnkgZXhwcmVzc2lvbnMgb2YgdGhpcyB0eXBlLgogICAgICAgICAgICAgIGxhc3RCaW5hcnlFeHByZXNzaW9uTGV2ZWwgPSBsZXZlbDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbGlzdGVuZXIuYmVnaW5CaW5hcnlFeHByZXNzaW9uKG5leHQpOwogICAgICAgICAgLy8gTGVmdCBhc3NvY2lhdGl2ZSwgc28gd2UgcmVjdXJzZSBhdCB0aGUgbmV4dCBoaWdoZXIKICAgICAgICAgIC8vIHByZWNlZGVuY2UgbGV2ZWwuCiAgICAgICAgICB0b2tlbiA9CiAgICAgICAgICAgICAgcGFyc2VQcmVjZWRlbmNlRXhwcmVzc2lvbih0b2tlbi5uZXh0LCBsZXZlbCArIDEsIGFsbG93Q2FzY2FkZXMpOwogICAgICAgICAgbGlzdGVuZXIuZW5kQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvcik7CiAgICAgICAgfQogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIHR5cGUgPSBuZXh0LnR5cGU7CiAgICAgICAgdG9rZW5MZXZlbCA9IF9jb21wdXRlUHJlY2VkZW5jZShuZXh0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgaW50IF9jb21wdXRlUHJlY2VkZW5jZShUb2tlbiB0b2tlbikgewogICAgVG9rZW5UeXBlIHR5cGUgPSB0b2tlbi50eXBlOwogICAgaWYgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuQkFORykpIHsKICAgICAgLy8gVGhlICchJyBoYXMgcHJlZml4IHByZWNlZGVuY2UgYnV0IGhlcmUgaXQncyBiZWluZyB1c2VkIGFzIGEKICAgICAgLy8gcG9zdGZpeCBvcGVyYXRvciB0byBhc3NlcnQgdGhlIGV4cHJlc3Npb24gaGFzIGEgbm9uLW51bGwgdmFsdWUuCiAgICAgIGlmIChpZGVudGljYWwodG9rZW4ubmV4dC50eXBlLCBUb2tlblR5cGUuUEVSSU9EKSkgewogICAgICAgIHJldHVybiBTRUxFQ1RPUl9QUkVDRURFTkNFOwogICAgICB9CiAgICAgIHJldHVybiBQT1NURklYX1BSRUNFREVOQ0U7CiAgICB9CiAgICByZXR1cm4gdHlwZS5wcmVjZWRlbmNlOwogIH0KCiAgVG9rZW4gcGFyc2VDYXNjYWRlRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gY2FzY2FkZU9wZXJhdG9yID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCcuLicsIGNhc2NhZGVPcGVyYXRvcikpOwogICAgbGlzdGVuZXIuYmVnaW5DYXNjYWRlKGNhc2NhZGVPcGVyYXRvcik7CiAgICBpZiAob3B0aW9uYWwoJ1snLCB0b2tlbi5uZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlQXJndW1lbnRPckluZGV4U3Rhcih0b2tlbiwgbm9UeXBlUGFyYW1PckFyZyk7CiAgICB9IGVsc2UgewogICAgICB0b2tlbiA9IHBhcnNlU2VuZCh0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbkNvbnRpbnVhdGlvbik7CiAgICAgIGxpc3RlbmVyLmVuZEJpbmFyeUV4cHJlc3Npb24oY2FzY2FkZU9wZXJhdG9yKTsKICAgIH0KICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgVG9rZW4gbWFyazsKICAgIGRvIHsKICAgICAgbWFyayA9IHRva2VuOwogICAgICBpZiAob3B0aW9uYWwoJy4nLCBuZXh0KSB8fCBvcHRpb25hbCgnPy4nLCBuZXh0KSkgewogICAgICAgIFRva2VuIHBlcmlvZCA9IG5leHQ7CiAgICAgICAgdG9rZW4gPSBwYXJzZVNlbmQobmV4dCwgSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbkNvbnRpbnVhdGlvbik7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgbGlzdGVuZXIuZW5kQmluYXJ5RXhwcmVzc2lvbihwZXJpb2QpOwogICAgICB9CiAgICAgIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlQXJnID0gY29tcHV0ZU1ldGhvZFR5cGVBcmd1bWVudHModG9rZW4pOwogICAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgLy8gRm9yIGV4YW1wbGUgYShiKS4uPFQ+KGMpLCB3aGVyZSB0b2tlbiBpcyAnPCcuCiAgICAgICAgdG9rZW4gPSB0eXBlQXJnLnBhcnNlQXJndW1lbnRzKHRva2VuLCB0aGlzKTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBhc3NlcnQob3B0aW9uYWwoJygnLCBuZXh0KSk7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50T3JJbmRleFN0YXIodG9rZW4sIHR5cGVBcmcpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0gd2hpbGUgKCFpZGVudGljYWwobWFyaywgdG9rZW4pKTsKCiAgICBpZiAoaWRlbnRpY2FsKG5leHQudHlwZS5wcmVjZWRlbmNlLCBBU1NJR05NRU5UX1BSRUNFREVOQ0UpKSB7CiAgICAgIFRva2VuIGFzc2lnbm1lbnQgPSBuZXh0OwogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbldpdGhvdXRDYXNjYWRlKG5leHQpOwogICAgICBsaXN0ZW5lci5oYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbihhc3NpZ25tZW50KTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZENhc2NhZGUoKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlVW5hcnlFeHByZXNzaW9uKFRva2VuIHRva2VuLCBib29sIGFsbG93Q2FzY2FkZXMpIHsKICAgIFN0cmluZyB2YWx1ZSA9IHRva2VuLm5leHQuc3RyaW5nVmFsdWU7CiAgICAvLyBQcmVmaXg6CiAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnYXdhaXQnKSkgewogICAgICBpZiAoaW5QbGFpblN5bmMpIHsKICAgICAgICBpZiAoIWxvb2tzTGlrZUF3YWl0RXhwcmVzc2lvbih0b2tlbikpIHsKICAgICAgICAgIHJldHVybiBwYXJzZVByaW1hcnkodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgICAvLyBSZWNvdmVyeTogTG9va3MgbGlrZSBhbiBleHByZXNzaW9uIHByZWNlZGVkIGJ5IGBhd2FpdGAuCiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIGFuZCBsZXQgcGFyc2VBd2FpdEV4cHJlc3Npb24gcmVwb3J0IHRoZSBlcnJvci4KICAgICAgfQogICAgICByZXR1cm4gcGFyc2VBd2FpdEV4cHJlc3Npb24odG9rZW4sIGFsbG93Q2FzY2FkZXMpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICcrJykpIHsKICAgICAgLy8gRGFydCBubyBsb25nZXIgYWxsb3dzIHByZWZpeC1wbHVzLgogICAgICByZXdyaXRlQW5kUmVjb3ZlcigKICAgICAgICAgIHRva2VuLAogICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIHJlcG9ydGluZyAibWlzc2luZyBpZGVudGlmaWVyIiBpbnN0ZWFkLgogICAgICAgICAgZmFzdGEubWVzc2FnZVVuc3VwcG9ydGVkUHJlZml4UGx1cywKICAgICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbigKICAgICAgICAgICAgICBUb2tlblR5cGUuSURFTlRJRklFUiwgJycsIHRva2VuLm5leHQub2Zmc2V0KSk7CiAgICAgIHJldHVybiBwYXJzZVByaW1hcnkodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb24pOwogICAgfSBlbHNlIGlmICgoaWRlbnRpY2FsKHZhbHVlLCAnIScpKSB8fAogICAgICAgIChpZGVudGljYWwodmFsdWUsICctJykpIHx8CiAgICAgICAgKGlkZW50aWNhbCh2YWx1ZSwgJ34nKSkpIHsKICAgICAgVG9rZW4gb3BlcmF0b3IgPSB0b2tlbi5uZXh0OwogICAgICAvLyBSaWdodCBhc3NvY2lhdGl2ZSwgc28gd2UgcmVjdXJzZSBhdCB0aGUgc2FtZSBwcmVjZWRlbmNlCiAgICAgIC8vIGxldmVsLgogICAgICB0b2tlbiA9IHBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb24oCiAgICAgICAgICB0b2tlbi5uZXh0LCBQT1NURklYX1BSRUNFREVOQ0UsIGFsbG93Q2FzY2FkZXMpOwogICAgICBsaXN0ZW5lci5oYW5kbGVVbmFyeVByZWZpeEV4cHJlc3Npb24ob3BlcmF0b3IpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9IGVsc2UgaWYgKChpZGVudGljYWwodmFsdWUsICcrKycpKSB8fCBpZGVudGljYWwodmFsdWUsICctLScpKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogVmFsaWRhdGUgdGhpcyBpcyB1c2VkIGNvcnJlY3RseS4KICAgICAgVG9rZW4gb3BlcmF0b3IgPSB0b2tlbi5uZXh0OwogICAgICAvLyBSaWdodCBhc3NvY2lhdGl2ZSwgc28gd2UgcmVjdXJzZSBhdCB0aGUgc2FtZSBwcmVjZWRlbmNlCiAgICAgIC8vIGxldmVsLgogICAgICB0b2tlbiA9IHBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb24oCiAgICAgICAgICB0b2tlbi5uZXh0LCBQT1NURklYX1BSRUNFREVOQ0UsIGFsbG93Q2FzY2FkZXMpOwogICAgICBsaXN0ZW5lci5oYW5kbGVVbmFyeVByZWZpeEFzc2lnbm1lbnRFeHByZXNzaW9uKG9wZXJhdG9yKTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfSBlbHNlIGlmICh0b2tlbi5uZXh0LmlzSWRlbnRpZmllcikgewogICAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCIuIiwgaWRlbnRpZmllci5uZXh0KSkgewogICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLm5leHQubmV4dDsKICAgICAgfQogICAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgICAvLyBMb29raW5nIGF0IGBpZGVudGlmaWVyICgnLicgaWRlbnRpZmllcik/YC4KICAgICAgICBpZiAob3B0aW9uYWwoIjwiLCBpZGVudGlmaWVyLm5leHQpKSB7CiAgICAgICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZyA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyhpZGVudGlmaWVyKTsKICAgICAgICAgIGlmICh0eXBlQXJnICE9IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICAgICAgVG9rZW4gZW5kVHlwZUFyZ3VtZW50cyA9IHR5cGVBcmcuc2tpcChpZGVudGlmaWVyKTsKICAgICAgICAgICAgaWYgKG9wdGlvbmFsKCIuIiwgZW5kVHlwZUFyZ3VtZW50cy5uZXh0KSkgewogICAgICAgICAgICAgIHJldHVybiBwYXJzZUltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKHRva2VuLCB0eXBlQXJnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhcnNlUHJpbWFyeSh0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbik7CiAgfQoKICBUb2tlbiBwYXJzZUFyZ3VtZW50T3JJbmRleFN0YXIoVG9rZW4gdG9rZW4sIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlQXJnKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIFRva2VuIGJlZ2luVG9rZW4gPSBuZXh0OwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdbJywgbmV4dCkgfHwgb3B0aW9uYWwoJz8uWycsIG5leHQpKSB7CiAgICAgICAgYXNzZXJ0KHR5cGVBcmcgPT0gbm9UeXBlUGFyYW1PckFyZyk7CiAgICAgICAgVG9rZW4gb3BlblNxdWFyZUJyYWNrZXQgPSBuZXh0OwogICAgICAgIGJvb2wgb2xkID0gbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zOwogICAgICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IHRydWU7CiAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24obmV4dCk7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gb2xkOwogICAgICAgIGlmICghb3B0aW9uYWwoJ10nLCBuZXh0KSkgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCddJykpOwogICAgICAgICAgLy8gU2Nhbm5lciBlbnN1cmVzIGEgY2xvc2luZyAnXScKICAgICAgICAgIFRva2VuIGVuZEdyb3VwID0gb3BlblNxdWFyZUJyYWNrZXQuZW5kR3JvdXA7CiAgICAgICAgICBpZiAoZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgICAgICAgLy8gU2Nhbm5lciBpbnNlcnRlZCBjbG9zaW5nICddJyBpbiB0aGUgd3JvbmcgcGxhY2UsIHNvIG1vdmUgaXQuCiAgICAgICAgICAgIG5leHQgPSByZXdyaXRlci5tb3ZlU3ludGhldGljKHRva2VuLCBlbmRHcm91cCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTa2lwIG92ZXIgdW5leHBlY3RlZCB0b2tlbnMgdG8gd2hlcmUgdGhlIHVzZXIgcGxhY2VkIHRoZSBgXWAuCiAgICAgICAgICAgIG5leHQgPSBlbmRHcm91cDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW5kZXhlZEV4cHJlc3Npb24ob3BlblNxdWFyZUJyYWNrZXQsIG5leHQpOwogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICB0eXBlQXJnID0gY29tcHV0ZU1ldGhvZFR5cGVBcmd1bWVudHModG9rZW4pOwogICAgICAgIGlmICh0eXBlQXJnICE9IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICAgIC8vIEZvciBleGFtcGxlIGFbYl08VD4oYyksIHdoZXJlIHRva2VuIGlzIGJlZm9yZSAnPCcuCiAgICAgICAgICB0b2tlbiA9IHR5cGVBcmcucGFyc2VBcmd1bWVudHModG9rZW4sIHRoaXMpOwogICAgICAgICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgdG9rZW4ubmV4dCkpOwogICAgICAgIH0KICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgICAgaWYgKHR5cGVBcmcgPT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKG5leHQpOwogICAgICAgIH0KICAgICAgICB0b2tlbiA9IHBhcnNlQXJndW1lbnRzKHRva2VuKTsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVTZW5kKGJlZ2luVG9rZW4sIHRva2VuKTsKICAgICAgICB0eXBlQXJnID0gY29tcHV0ZU1ldGhvZFR5cGVBcmd1bWVudHModG9rZW4pOwogICAgICAgIGlmICh0eXBlQXJnICE9IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICAgIC8vIEZvciBleGFtcGxlIGEoYik8VD4oYyksIHdoZXJlIHRva2VuIGlzIGJlZm9yZSAnPCcuCiAgICAgICAgICB0b2tlbiA9IHR5cGVBcmcucGFyc2VBcmd1bWVudHModG9rZW4sIHRoaXMpOwogICAgICAgICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgdG9rZW4ubmV4dCkpOwogICAgICAgIH0KICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VQcmltYXJ5KFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBmaW5hbCBraW5kID0gdG9rZW4ubmV4dC5raW5kOwogICAgaWYgKGtpbmQgPT0gSURFTlRJRklFUl9UT0tFTikgewogICAgICByZXR1cm4gcGFyc2VTZW5kT3JGdW5jdGlvbkxpdGVyYWwodG9rZW4sIGNvbnRleHQpOwogICAgfSBlbHNlIGlmIChraW5kID09IElOVF9UT0tFTiB8fCBraW5kID09IEhFWEFERUNJTUFMX1RPS0VOKSB7CiAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxJbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChraW5kID09IERPVUJMRV9UT0tFTikgewogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsRG91YmxlKHRva2VuKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBTVFJJTkdfVE9LRU4pIHsKICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbFN0cmluZyh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gSEFTSF9UT0tFTikgewogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsU3ltYm9sKHRva2VuKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBLRVlXT1JEX1RPS0VOKSB7CiAgICAgIGZpbmFsIFN0cmluZyB2YWx1ZSA9IHRva2VuLm5leHQuc3RyaW5nVmFsdWU7CiAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICJ0cnVlIikgfHwgaWRlbnRpY2FsKHZhbHVlLCAiZmFsc2UiKSkgewogICAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxCb29sKHRva2VuKTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICJudWxsIikpIHsKICAgICAgICByZXR1cm4gcGFyc2VMaXRlcmFsTnVsbCh0b2tlbik7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAidGhpcyIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlVGhpc0V4cHJlc3Npb24odG9rZW4sIGNvbnRleHQpOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgInN1cGVyIikpIHsKICAgICAgICByZXR1cm4gcGFyc2VTdXBlckV4cHJlc3Npb24odG9rZW4sIGNvbnRleHQpOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgIm5ldyIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTmV3RXhwcmVzc2lvbih0b2tlbik7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAiY29uc3QiKSkgewogICAgICAgIHJldHVybiBwYXJzZUNvbnN0RXhwcmVzc2lvbih0b2tlbik7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAidm9pZCIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlU2VuZE9yRnVuY3Rpb25MaXRlcmFsKHRva2VuLCBjb250ZXh0KTsKICAgICAgfSBlbHNlIGlmICghaW5QbGFpblN5bmMgJiYKICAgICAgICAgIChpZGVudGljYWwodmFsdWUsICJ5aWVsZCIpIHx8IGlkZW50aWNhbCh2YWx1ZSwgImFzeW5jIikpKSB7CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSByZWNvdmVyeSBjb2RlLgogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgImFzc2VydCIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlQXNzZXJ0KHRva2VuLCBBc3NlcnQuRXhwcmVzc2lvbik7CiAgICAgIH0gZWxzZSBpZiAodG9rZW4ubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICByZXR1cm4gcGFyc2VTZW5kT3JGdW5jdGlvbkxpdGVyYWwodG9rZW4sIGNvbnRleHQpOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgInJldHVybiIpKSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbih0b2tlbiwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICAgIHJldHVybiBwYXJzZVByaW1hcnkodG9rZW4sIGNvbnRleHQpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byB0aGUgcmVjb3ZlcnkgY29kZS4KICAgICAgfQogICAgfSBlbHNlIGlmIChraW5kID09IE9QRU5fUEFSRU5fVE9LRU4pIHsKICAgICAgcmV0dXJuIHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb25PckZ1bmN0aW9uTGl0ZXJhbCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTiB8fAogICAgICAgIG9wdGlvbmFsKCdbXScsIHRva2VuLm5leHQpKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50cyh0b2tlbi5uZXh0KTsKICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbExpc3RTdWZmaXgodG9rZW4sIG51bGwpOwogICAgfSBlbHNlIGlmIChraW5kID09IE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTikgewogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHModG9rZW4ubmV4dCk7CiAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxTZXRPck1hcFN1ZmZpeCh0b2tlbiwgbnVsbCk7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gTFRfVE9LRU4pIHsKICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbExpc3RTZXRNYXBPckZ1bmN0aW9uKHRva2VuLCBudWxsKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byB0aGUgcmVjb3ZlcnkgY29kZS4KICAgIH0KICAgIC8vCiAgICAvLyBSZWNvdmVyeSBjb2RlLgogICAgLy8KICAgIHJldHVybiBwYXJzZVNlbmQodG9rZW4sIGNvbnRleHQpOwogIH0KCiAgVG9rZW4gcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbk9yRnVuY3Rpb25MaXRlcmFsKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnKCcsIG5leHQpKTsKICAgIFRva2VuIG5leHRUb2tlbiA9IG5leHQuZW5kR3JvdXAubmV4dDsKICAgIGludCBraW5kID0gbmV4dFRva2VuLmtpbmQ7CiAgICBpZiAobWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zKSB7CiAgICAgIGlmICgoaWRlbnRpY2FsKGtpbmQsIEZVTkNUSU9OX1RPS0VOKSB8fAogICAgICAgICAgaWRlbnRpY2FsKGtpbmQsIE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTikpKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlVmFyaWFibGVzKG5leHQpOwogICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKGtpbmQsIEtFWVdPUkRfVE9LRU4pIHx8CiAgICAgICAgICBpZGVudGljYWwoa2luZCwgSURFTlRJRklFUl9UT0tFTikpIHsKICAgICAgICBpZiAob3B0aW9uYWwoJ2FzeW5jJywgbmV4dFRva2VuKSB8fCBvcHRpb25hbCgnc3luYycsIG5leHRUb2tlbikpIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZVZhcmlhYmxlcyhuZXh0KTsKICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgICAgICAgfQogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzdHJheSBzaW1wbGUgaWRlbnRpZmllciBpbiB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbgogICAgICAgIC8vIGJlY2F1c2UgdGhlIHVzZXIgaXMgdHlwaW5nIChlLmcuIGAoKSBhc3kge31gKSB0aGVuIGNvbnRpbnVlIHBhcnNpbmcKICAgICAgICAvLyBhbmQgYWxsb3cgcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24gdG8gcmVwb3J0IGFuIHVuZXhwZWN0ZWQgdG9rZW4uCiAgICAgICAga2luZCA9IG5leHRUb2tlbi5uZXh0LmtpbmQ7CiAgICAgICAgaWYgKChpZGVudGljYWwoa2luZCwgRlVOQ1RJT05fVE9LRU4pIHx8CiAgICAgICAgICAgIGlkZW50aWNhbChraW5kLCBPUEVOX0NVUkxZX0JSQUNLRVRfVE9LRU4pKSkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlVmFyaWFibGVzKG5leHQpOwogICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKHRva2VuKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGJvb2wgb2xkID0gbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zOwogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gdHJ1ZTsKICAgIHRva2VuID0gcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbih0b2tlbik7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBvbGQ7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBlbnN1cmVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBvcGVuUGFyZW4gPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnKCcsIG9wZW5QYXJlbikpIHsKICAgICAgLy8gUmVjb3ZlcgogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgb3BlblBhcmVuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkVG9rZW4ud2l0aEFyZ3VtZW50cygnKCcpKTsKICAgICAgb3BlblBhcmVuID0gcmV3cml0ZXIuaW5zZXJ0UGFyZW5zKHRva2VuLCBmYWxzZSk7CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbkluUGFyZW50aGVzaXNSZXN0KG9wZW5QYXJlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKG9wZW5QYXJlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBiZWdpbiA9IHRva2VuLm5leHQ7CiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbkluUGFyZW50aGVzaXModG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oYmVnaW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uSW5QYXJlbnRoZXNpcyhUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvbkluUGFyZW50aGVzaXNSZXN0KHRva2VuLm5leHQpOwogIH0KCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uSW5QYXJlbnRoZXNpc1Jlc3QoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuKSk7CiAgICBCZWdpblRva2VuIGJlZ2luID0gdG9rZW47CiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZUNsb3NlUGFyZW4odG9rZW4sIGJlZ2luKTsKICAgIGFzc2VydChvcHRpb25hbCgnKScsIHRva2VuKSk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVRoaXNFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBUb2tlbiB0aGlzVG9rZW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3RoaXMnLCB0aGlzVG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZVRoaXNFeHByZXNzaW9uKHRoaXNUb2tlbiwgY29udGV4dCk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIC8vIENvbnN0cnVjdG9yIGZvcndhcmRpbmcuCiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50cyhuZXh0KTsKICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50cyh0b2tlbik7CiAgICAgIGxpc3RlbmVyLmhhbmRsZVNlbmQodGhpc1Rva2VuLCB0b2tlbi5uZXh0KTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlU3VwZXJFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBUb2tlbiBzdXBlclRva2VuID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdzdXBlcicsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5oYW5kbGVTdXBlckV4cHJlc3Npb24oc3VwZXJUb2tlbiwgY29udGV4dCk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIC8vIFN1cGVyIGNvbnN0cnVjdG9yLgogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHMobmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VBcmd1bWVudHModG9rZW4pOwogICAgICBsaXN0ZW5lci5oYW5kbGVTZW5kKHN1cGVyVG9rZW4sIHRva2VuLm5leHQpOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgiPy4iLCBuZXh0KSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VTdXBlck51bGxBd2FyZSk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gVGhpcyBtZXRob2QgcGFyc2VzIHRoZSBwb3J0aW9uIG9mIGEgbGlzdCBsaXRlcmFsIHN0YXJ0aW5nIHdpdGggdGhlIGxlZnQKICAvLy8gc3F1YXJlIGJyYWNrZXQuCiAgLy8vCiAgLy8vIGBgYAogIC8vLyBsaXN0TGl0ZXJhbDoKICAvLy8gICAnY29uc3QnPyB0eXBlQXJndW1lbnRzPyAnWycgKGV4cHJlc3Npb25MaXN0ICcsJz8pPyAnXScKICAvLy8gOwogIC8vLyBgYGAKICAvLy8KICAvLy8gUHJvdmlkZSBhIFtjb25zdEtleXdvcmRdIGlmIHRoZSBsaXRlcmFsIGlzIHByZWNlZGVkIGJ5ICdjb25zdCcsIG9yIGBudWxsYAogIC8vLyBpZiBub3QuIFRoaXMgaXMgYSBzdWZmaXggcGFyc2VyIGJlY2F1c2UgaXQgaXMgYXNzdW1lZCB0aGF0IHR5cGUgYXJndW1lbnRzCiAgLy8vIGhhdmUgYmVlbiBwYXJzZWQsIG9yIGBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHNgIGhhcyBiZWVuIGV4ZWN1dGVkLgogIFRva2VuIHBhcnNlTGl0ZXJhbExpc3RTdWZmaXgoVG9rZW4gdG9rZW4sIFRva2VuIGNvbnN0S2V5d29yZCkgewogICAgVG9rZW4gYmVmb3JlVG9rZW4gPSB0b2tlbjsKICAgIFRva2VuIGJlZ2luVG9rZW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ1snLCB0b2tlbikgfHwgb3B0aW9uYWwoJ1tdJywgdG9rZW4pKTsKICAgIGludCBjb3VudCA9IDA7CiAgICBpZiAob3B0aW9uYWwoJ1tdJywgdG9rZW4pKSB7CiAgICAgIHRva2VuID0gcmV3cml0ZVNxdWFyZUJyYWNrZXRzKGJlZm9yZVRva2VuKS5uZXh0OwogICAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsTGlzdCgwLCB0b2tlbiwgY29uc3RLZXl3b3JkLCB0b2tlbi5uZXh0KTsKICAgICAgcmV0dXJuIHRva2VuLm5leHQ7CiAgICB9CiAgICBib29sIG9sZCA9IG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9uczsKICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IHRydWU7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCddJywgbmV4dCkpIHsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaW50IGlmQ291bnQgPSAwOwogICAgICBMaXRlcmFsRW50cnlJbmZvIGluZm8gPSBjb21wdXRlTGl0ZXJhbEVudHJ5KHRva2VuKTsKICAgICAgd2hpbGUgKGluZm8gIT0gbnVsbCkgewogICAgICAgIGlmIChpbmZvLmhhc0VudHJ5KSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRva2VuID0gaW5mby5wYXJzZSh0b2tlbiwgdGhpcyk7CiAgICAgICAgfQogICAgICAgIGlmQ291bnQgKz0gaW5mby5pZkNvbmRpdGlvbkRlbHRhOwogICAgICAgIGluZm8gPSBpbmZvLmNvbXB1dGVOZXh0KHRva2VuKTsKICAgICAgfQogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgKytjb3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCddJywgbmV4dCkpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBpZiAoIWxvb2tzTGlrZUxpdGVyYWxFbnRyeShuZXh0KSkgewogICAgICAgICAgaWYgKGJlZ2luVG9rZW4uZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgICAgICAgLy8gVGhlIHNjYW5uZXIgaGFzIGFscmVhZHkgcmVwb3J0ZWQgYW4gZXJyb3IsCiAgICAgICAgICAgIC8vIGJ1dCBpbnNlcnRlZCBgXWAgaW4gdGhlIHdyb25nIHBsYWNlLgogICAgICAgICAgICB0b2tlbiA9IHJld3JpdGVyLm1vdmVTeW50aGV0aWModG9rZW4sIGJlZ2luVG9rZW4uZW5kR3JvdXApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUmVwb3J0IGFuIGVycm9yIGFuZCBqdW1wIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ10nKSk7CiAgICAgICAgICAgIHRva2VuID0gYmVnaW5Ub2tlbi5lbmRHcm91cDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBUaGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0IG9mIGFuIGV4cHJlc3Npb24uCiAgICAgICAgLy8gUmVwb3J0IGFuIGVycm9yLCBpbnNlcnQgdGhlIGNvbW1hLCBhbmQgY29udGludWUgcGFyc2luZy4KICAgICAgICB2YXIgY29tbWEgPSBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNPTU1BLCBuZXh0Lm9mZnNldCk7CiAgICAgICAgdmFyIG1lc3NhZ2UgPSBpZkNvdW50ID4gMAogICAgICAgICAgICA/IGZhc3RhLm1lc3NhZ2VFeHBlY3RlZEVsc2VPckNvbW1hCiAgICAgICAgICAgIDogZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJyk7CiAgICAgICAgbmV4dCA9IHJld3JpdGVBbmRSZWNvdmVyKHRva2VuLCBtZXNzYWdlLCBjb21tYSk7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgfQogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gb2xkOwogICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbExpc3QoY291bnQsIGJlZ2luVG9rZW4sIGNvbnN0S2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIHBhcnNlcyB0aGUgcG9ydGlvbiBvZiBhIHNldCBvciBtYXAgbGl0ZXJhbCB0aGF0IHN0YXJ0cyB3aXRoCiAgLy8vIHRoZSBsZWZ0IGN1cmx5IGJyYWNlIHdoZW4gdGhlcmUgYXJlIG5vIGxlYWRpbmcgdHlwZSBhcmd1bWVudHMuCiAgVG9rZW4gcGFyc2VMaXRlcmFsU2V0T3JNYXBTdWZmaXgoVG9rZW4gdG9rZW4sIFRva2VuIGNvbnN0S2V5d29yZCkgewogICAgVG9rZW4gbGVmdEJyYWNlID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd7JywgbGVmdEJyYWNlKSk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnfScsIG5leHQpKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxTZXRPck1hcCgwLCBsZWZ0QnJhY2UsIGNvbnN0S2V5d29yZCwgbmV4dCwgZmFsc2UpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICBmaW5hbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwogICAgaW50IGNvdW50ID0gMDsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBoYXNTZXRFbnRyeSBwYXJhbWV0ZXIgZXhpc3RzIGZvciByZXBsaWNhdGluZyBleGlzdGluZwogICAgLy8gYmVoYXZpb3IgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHVuaWZpZWQgY29sbGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkCiAgICBib29sIGhhc1NldEVudHJ5OwoKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGludCBpZkNvdW50ID0gMDsKICAgICAgTGl0ZXJhbEVudHJ5SW5mbyBpbmZvID0gY29tcHV0ZUxpdGVyYWxFbnRyeSh0b2tlbik7CiAgICAgIGlmIChpbmZvID09IHNpbXBsZUVudHJ5KSB7CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlbW92ZSB0aGlzIHNlY3Rpb24gYW5kIHVzZSB0aGUgd2hpbGUgbG9vcCBiZWxvdwogICAgICAgIC8vIG9uY2UgaGFzU2V0RW50cnkgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KICAgICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICAgICAgdmFyIGlzTWFwRW50cnkgPSBvcHRpb25hbCgnOicsIHRva2VuLm5leHQpOwogICAgICAgIGhhc1NldEVudHJ5ID8/PSAhaXNNYXBFbnRyeTsKICAgICAgICBpZiAoaXNNYXBFbnRyeSkgewogICAgICAgICAgVG9rZW4gY29sb24gPSB0b2tlbi5uZXh0OwogICAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24oY29sb24pOwogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbE1hcEVudHJ5KGNvbG9uLCB0b2tlbi5uZXh0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2hpbGUgKGluZm8gIT0gbnVsbCkgewogICAgICAgICAgaWYgKGluZm8uaGFzRW50cnkpIHsKICAgICAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgICAgICBpZiAob3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0KSkgewogICAgICAgICAgICAgIFRva2VuIGNvbG9uID0gdG9rZW4ubmV4dDsKICAgICAgICAgICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihjb2xvbik7CiAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbE1hcEVudHJ5KGNvbG9uLCB0b2tlbi5uZXh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9rZW4gPSBpbmZvLnBhcnNlKHRva2VuLCB0aGlzKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmQ291bnQgKz0gaW5mby5pZkNvbmRpdGlvbkRlbHRhOwogICAgICAgICAgaW5mbyA9IGluZm8uY29tcHV0ZU5leHQodG9rZW4pOwogICAgICAgIH0KICAgICAgfQogICAgICArK2NvdW50OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICAgIFRva2VuIGNvbW1hOwogICAgICBpZiAob3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIGNvbW1hID0gdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIGlmIChvcHRpb25hbCgnfScsIG5leHQpKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbFNldE9yTWFwKAogICAgICAgICAgICBjb3VudCwgbGVmdEJyYWNlLCBjb25zdEtleXdvcmQsIG5leHQsIGhhc1NldEVudHJ5ID8/IGZhbHNlKTsKICAgICAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBvbGQ7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KCiAgICAgIGlmIChjb21tYSA9PSBudWxsKSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBpZiAobG9va3NMaWtlTGl0ZXJhbEVudHJ5KG5leHQpKSB7CiAgICAgICAgICAvLyBJZiB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0IG9mIGFuIGV4cHJlc3Npb24sCiAgICAgICAgICAvLyB0aGVuIHJlcG9ydCBhbiBlcnJvciwgaW5zZXJ0IHRoZSBjb21tYSwgYW5kIGNvbnRpbnVlIHBhcnNpbmcuCiAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgYmV0dGVyIGVycm9yIG1lc3NhZ2UKICAgICAgICAgIHZhciBjb21tYSA9IG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuQ09NTUEsIG5leHQub2Zmc2V0KTsKICAgICAgICAgIHZhciBtZXNzYWdlID0gaWZDb3VudCA+IDAKICAgICAgICAgICAgICA/IGZhc3RhLm1lc3NhZ2VFeHBlY3RlZEVsc2VPckNvbW1hCiAgICAgICAgICAgICAgOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKTsKICAgICAgICAgIHRva2VuID0gcmV3cml0ZUFuZFJlY292ZXIodG9rZW4sIG1lc3NhZ2UsIGNvbW1hKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ30nKSk7CiAgICAgICAgICAvLyBTY2FubmVyIGd1YXJhbnRlZXMgYSBjbG9zaW5nIGN1cmx5IGJyYWNrZXQKICAgICAgICAgIG5leHQgPSBsZWZ0QnJhY2UuZW5kR3JvdXA7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsU2V0T3JNYXAoCiAgICAgICAgICAgICAgY291bnQsIGxlZnRCcmFjZSwgY29uc3RLZXl3b3JkLCBuZXh0LCBoYXNTZXRFbnRyeSA/PyBmYWxzZSk7CiAgICAgICAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBvbGQ7CiAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBmb3JtYWxQYXJhbWV0ZXJMaXN0IGZ1bmN0aW9uQm9keS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIHN1ZmZpeCBwYXJzZXIgYmVjYXVzZSBpdCBpcyBhc3N1bWVkIHRoYXQgdHlwZSBhcmd1bWVudHMgaGF2ZQogIC8vLyBiZWVuIHBhcnNlZCwgb3IgYGxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50cyguLilgIGhhcyBiZWVuIGV4ZWN1dGVkLgogIFRva2VuIHBhcnNlTGl0ZXJhbEZ1bmN0aW9uU3VmZml4KFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJygnLCB0b2tlbi5uZXh0KSk7CiAgICAvLyBTY2FubmVyIGVuc3VyZXMgYChgIGhhcyBtYXRjaGluZyBgKWAuCiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dC5lbmRHcm91cC5uZXh0OwogICAgaW50IGtpbmQgPSBuZXh0LmtpbmQ7CiAgICBpZiAoIWlkZW50aWNhbChraW5kLCBGVU5DVElPTl9UT0tFTikgJiYKICAgICAgICAhaWRlbnRpY2FsKGtpbmQsIE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTikgJiYKICAgICAgICAoIWlkZW50aWNhbChraW5kLCBLRVlXT1JEX1RPS0VOKSB8fAogICAgICAgICAgICAhb3B0aW9uYWwoJ2FzeW5jJywgbmV4dCkgJiYgIW9wdGlvbmFsKCdzeW5jJywgbmV4dCkpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4obmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgfQogICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKHRva2VuKTsKICB9CgogIC8vLyBnZW5lcmljTGlzdExpdGVyYWwgfCBnZW5lcmljTWFwTGl0ZXJhbCB8IGdlbmVyaWNGdW5jdGlvbkxpdGVyYWwuCiAgLy8vCiAgLy8vIFdoZXJlCiAgLy8vICAgZ2VuZXJpY0xpc3RMaXRlcmFsIDo6PSB0eXBlQXJndW1lbnRzICdbJyAoZXhwcmVzc2lvbkxpc3QgJywnPyk/ICddJwogIC8vLyAgIGdlbmVyaWNNYXBMaXRlcmFsIDo6PQogIC8vLyAgICAgICB0eXBlQXJndW1lbnRzICd7JyAobWFwTGl0ZXJhbEVudHJ5ICgnLCcgbWFwTGl0ZXJhbEVudHJ5KSogJywnPyk/ICd9JwogIC8vLyAgIGdlbmVyaWNGdW5jdGlvbkxpdGVyYWwgOjo9CiAgLy8vICAgICAgIHR5cGVQYXJhbWV0ZXJzIGZvcm1hbFBhcmFtZXRlckxpc3QgZnVuY3Rpb25Cb2R5CiAgLy8vIFByb3ZpZGUgdG9rZW4gZm9yIFtjb25zdEtleXdvcmRdIGlmIHByZWNlZGVkIGJ5ICdjb25zdCcsIG51bGwgaWYgbm90LgogIFRva2VuIHBhcnNlTGl0ZXJhbExpc3RTZXRNYXBPckZ1bmN0aW9uKAogICAgICBmaW5hbCBUb2tlbiBzdGFydCwgVG9rZW4gY29uc3RLZXl3b3JkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJzwnLCBzdGFydC5uZXh0KSk7CiAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtT3JBcmcgPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcoc3RhcnQsIHRydWUpOwogICAgVG9rZW4gdG9rZW4gPSB0eXBlUGFyYW1PckFyZy5za2lwKHN0YXJ0KTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgaWYgKGNvbnN0S2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgY29uc3RLZXl3b3JkLCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgIH0KICAgICAgdG9rZW4gPSB0eXBlUGFyYW1PckFyZy5wYXJzZVZhcmlhYmxlcyhzdGFydCwgdGhpcyk7CiAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxGdW5jdGlvblN1ZmZpeCh0b2tlbik7CiAgICB9CiAgICB0b2tlbiA9IHR5cGVQYXJhbU9yQXJnLnBhcnNlQXJndW1lbnRzKHN0YXJ0LCB0aGlzKTsKICAgIGlmIChvcHRpb25hbCgneycsIG5leHQpKSB7CiAgICAgIGlmICh0eXBlUGFyYW1PckFyZy50eXBlQXJndW1lbnRDb3VudCA+IDIpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBmYXN0YS5tZXNzYWdlU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgIHN0YXJ0Lm5leHQsCiAgICAgICAgICAgIHRva2VuKTsKICAgICAgfQogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsU2V0T3JNYXBTdWZmaXgodG9rZW4sIGNvbnN0S2V5d29yZCk7CiAgICB9CiAgICBpZiAoIW9wdGlvbmFsKCdbJywgbmV4dCkgJiYgIW9wdGlvbmFsKCdbXScsIG5leHQpKSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBJbXByb3ZlIHRoaXMgZXJyb3IgbWVzc2FnZS4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnWycpKTsKICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5JTkRFWCk7CiAgICB9CiAgICByZXR1cm4gcGFyc2VMaXRlcmFsTGlzdFN1ZmZpeCh0b2tlbiwgY29uc3RLZXl3b3JkKTsKICB9CgogIC8vLyBgYGAKICAvLy8gbWFwTGl0ZXJhbEVudHJ5OgogIC8vLyAgIGV4cHJlc3Npb24gJzonIGV4cHJlc3Npb24gfAogIC8vLyAgICdpZicgJygnIGV4cHJlc3Npb24gJyknIG1hcExpdGVyYWxFbnRyeSAoICdlbHNlJyBtYXBMaXRlcmFsRW50cnkgKT8gfAogIC8vLyAgICdhd2FpdCc/ICdmb3InICcoJyBmb3JMb29wUGFydHMgJyknIG1hcExpdGVyYWxFbnRyeSB8CiAgLy8vICAgKCAnLi4uJyB8ICcuLi4/JyApIGV4cHJlc3Npb24KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU1hcExpdGVyYWxFbnRyeShUb2tlbiB0b2tlbikgewogICAgLy8gQXNzdW1lIHRoZSBsaXN0ZW5lciByZWplY3RzIG5vbi1zdHJpbmcga2V5cy4KICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pOiBDaGFuZ2UgdGhlIGFzc3VtcHRpb24gYWJvdmUgYnkgbW92aW5nIGVycm9yCiAgICAvLyBjaGVja2luZyBpbnRvIHRoZSBwYXJzZXIsIG1ha2luZyBpdCBwb3NzaWJsZSB0byByZWNvdmVyLgogICAgTGl0ZXJhbEVudHJ5SW5mbyBpbmZvID0gY29tcHV0ZUxpdGVyYWxFbnRyeSh0b2tlbik7CiAgICB3aGlsZSAoaW5mbyAhPSBudWxsKSB7CiAgICAgIGlmIChpbmZvLmhhc0VudHJ5KSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgIFRva2VuIGNvbG9uID0gZW5zdXJlQ29sb24odG9rZW4pOwogICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKGNvbG9uKTsKICAgICAgICAvLyBUT0RPIHJlbW92ZSB1bnVzZWQgMm5kIHBhcmFtZXRlcgogICAgICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxNYXBFbnRyeShjb2xvbiwgdG9rZW4ubmV4dCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBpbmZvLnBhcnNlKHRva2VuLCB0aGlzKTsKICAgICAgfQogICAgICBpbmZvID0gaW5mby5jb21wdXRlTmV4dCh0b2tlbik7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVNlbmRPckZ1bmN0aW9uTGl0ZXJhbChUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgaWYgKCFtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMpIHsKICAgICAgcmV0dXJuIHBhcnNlU2VuZCh0b2tlbiwgY29udGV4dCk7CiAgICB9CiAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKHRva2VuLCBmYWxzZSk7CiAgICBUb2tlbiBiZWZvcmVOYW1lID0gdHlwZUluZm8uc2tpcFR5cGUodG9rZW4pOwogICAgVG9rZW4gbmFtZSA9IGJlZm9yZU5hbWUubmV4dDsKICAgIGlmIChuYW1lLmlzSWRlbnRpZmllcikgewogICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5hbWUpOwogICAgICBUb2tlbiBuZXh0ID0gdHlwZVBhcmFtLnNraXAobmFtZSkubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgICBpZiAobG9va3NMaWtlRnVuY3Rpb25Cb2R5KG5leHQuZW5kR3JvdXAubmV4dCkpIHsKICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uTGl0ZXJhbCgKICAgICAgICAgICAgICB0b2tlbiwgYmVmb3JlTmFtZSwgbmFtZSwgdHlwZUluZm8sIHR5cGVQYXJhbSwgY29udGV4dCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGFyc2VTZW5kKHRva2VuLCBjb250ZXh0KTsKICB9CgogIFRva2VuIGVuc3VyZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnKCcpKTsKICAgICAgbmV4dCA9IHJld3JpdGVyLmluc2VydFBhcmVucyh0b2tlbiwgZmFsc2UpOwogICAgfQogICAgcmV0dXJuIHBhcnNlQXJndW1lbnRzUmVzdChuZXh0KTsKICB9CgogIFRva2VuIHBhcnNlQ29uc3RydWN0b3JJbnZvY2F0aW9uQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmICghb3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAvLyBSZWNvdmVyeTogQ2hlY2sgZm9yIGludmFsaWQgdHlwZSBwYXJhbWV0ZXJzCiAgICAgIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlQXJnID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuKTsKICAgICAgaWYgKHR5cGVBcmcgPT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnKCcpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbiwgZmFzdGEubWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMpOwogICAgICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHModG9rZW4pOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIGlmICghb3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhcnNlQXJndW1lbnRzUmVzdChuZXh0KTsKICB9CgogIC8vLyBgYGAKICAvLy8gbmV3RXhwcmVzc2lvbjoKICAvLy8gICAnbmV3JyB0eXBlICgnLicgaWRlbnRpZmllcik/IGFyZ3VtZW50cwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTmV3RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV3S2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ25ldycsIG5ld0tleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luTmV3RXhwcmVzc2lvbihuZXdLZXl3b3JkKTsKICAgIHRva2VuID0gcGFyc2VDb25zdHJ1Y3RvclJlZmVyZW5jZShuZXdLZXl3b3JkKTsKICAgIHRva2VuID0gcGFyc2VDb25zdHJ1Y3Rvckludm9jYXRpb25Bcmd1bWVudHModG9rZW4pOwogICAgbGlzdGVuZXIuZW5kTmV3RXhwcmVzc2lvbihuZXdLZXl3b3JkKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24oCiAgICAgIFRva2VuIHRva2VuLCBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZykgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbjsKICAgIGxpc3RlbmVyLmJlZ2luSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24odG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUNvbnN0cnVjdG9yUmVmZXJlbmNlKHRva2VuLCB0eXBlQXJnKTsKICAgIHRva2VuID0gcGFyc2VDb25zdHJ1Y3Rvckludm9jYXRpb25Bcmd1bWVudHModG9rZW4pOwogICAgbGlzdGVuZXIuZW5kSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24oYmVnaW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIHBhcnNlcyBhIGxpc3Qgb3IgbWFwIGxpdGVyYWwgdGhhdCBpcyBrbm93biB0byBzdGFydCB3aXRoIHRoZQogIC8vLyBrZXl3b3JkICdjb25zdCcuCiAgLy8vCiAgLy8vIGBgYAogIC8vLyBsaXN0TGl0ZXJhbDoKICAvLy8gICAnY29uc3QnPyB0eXBlQXJndW1lbnRzPyAnWycgKGV4cHJlc3Npb25MaXN0ICcsJz8pPyAnXScKICAvLy8gOwogIC8vLwogIC8vLyBtYXBMaXRlcmFsOgogIC8vLyAgICdjb25zdCc/IHR5cGVBcmd1bWVudHM/CiAgLy8vICAgICAneycgKG1hcExpdGVyYWxFbnRyeSAoJywnIG1hcExpdGVyYWxFbnRyeSkqICcsJz8pPyAnfScKICAvLy8gOwogIC8vLwogIC8vLyBtYXBMaXRlcmFsRW50cnk6CiAgLy8vICAgZXhwcmVzc2lvbiAnOicgZXhwcmVzc2lvbgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ29uc3RFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBjb25zdEtleXdvcmQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2NvbnN0JywgY29uc3RLZXl3b3JkKSk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGZpbmFsIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICBpZiAoKGlkZW50aWNhbCh2YWx1ZSwgJ1snKSkgfHwgKGlkZW50aWNhbCh2YWx1ZSwgJ1tdJykpKSB7CiAgICAgIGxpc3RlbmVyLmJlZ2luQ29uc3RMaXRlcmFsKG5leHQpOwogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHMobmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VMaXRlcmFsTGlzdFN1ZmZpeCh0b2tlbiwgY29uc3RLZXl3b3JkKTsKICAgICAgbGlzdGVuZXIuZW5kQ29uc3RMaXRlcmFsKHRva2VuLm5leHQpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAneycpKSB7CiAgICAgIGxpc3RlbmVyLmJlZ2luQ29uc3RMaXRlcmFsKG5leHQpOwogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHMobmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VMaXRlcmFsU2V0T3JNYXBTdWZmaXgodG9rZW4sIGNvbnN0S2V5d29yZCk7CiAgICAgIGxpc3RlbmVyLmVuZENvbnN0TGl0ZXJhbCh0b2tlbi5uZXh0KTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJzwnKSkgewogICAgICBsaXN0ZW5lci5iZWdpbkNvbnN0TGl0ZXJhbChuZXh0KTsKICAgICAgdG9rZW4gPSBwYXJzZUxpdGVyYWxMaXN0U2V0TWFwT3JGdW5jdGlvbih0b2tlbiwgY29uc3RLZXl3b3JkKTsKICAgICAgbGlzdGVuZXIuZW5kQ29uc3RMaXRlcmFsKHRva2VuLm5leHQpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgICBsaXN0ZW5lci5iZWdpbkNvbnN0RXhwcmVzc2lvbihjb25zdEtleXdvcmQpOwogICAgdG9rZW4gPSBwYXJzZUNvbnN0cnVjdG9yUmVmZXJlbmNlKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDb25zdHJ1Y3Rvckludm9jYXRpb25Bcmd1bWVudHModG9rZW4pOwogICAgbGlzdGVuZXIuZW5kQ29uc3RFeHByZXNzaW9uKGNvbnN0S2V5d29yZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGludExpdGVyYWw6CiAgLy8vICAgaW50ZWdlcgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGl0ZXJhbEludChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWNhbCh0b2tlbi5raW5kLCBJTlRfVE9LRU4pIHx8CiAgICAgICAgaWRlbnRpY2FsKHRva2VuLmtpbmQsIEhFWEFERUNJTUFMX1RPS0VOKSk7CiAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsSW50KHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZG91YmxlTGl0ZXJhbDoKICAvLy8gICBkb3VibGUKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUxpdGVyYWxEb3VibGUoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGljYWwodG9rZW4ua2luZCwgRE9VQkxFX1RPS0VOKSk7CiAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsRG91YmxlKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gc3RyaW5nTGl0ZXJhbDoKICAvLy8gICAobXVsdGlsaW5lU3RyaW5nIHwgc2luZ2xlTGluZVN0cmluZykrCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VMaXRlcmFsU3RyaW5nKFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHRva2VuLm5leHQua2luZCwgU1RSSU5HX1RPS0VOKSk7CiAgICBib29sIG9sZCA9IG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9uczsKICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IHRydWU7CiAgICB0b2tlbiA9IHBhcnNlU2luZ2xlTGl0ZXJhbFN0cmluZyh0b2tlbik7CiAgICBpbnQgY291bnQgPSAxOwogICAgd2hpbGUgKGlkZW50aWNhbCh0b2tlbi5uZXh0LmtpbmQsIFNUUklOR19UT0tFTikpIHsKICAgICAgdG9rZW4gPSBwYXJzZVNpbmdsZUxpdGVyYWxTdHJpbmcodG9rZW4pOwogICAgICBjb3VudCsrOwogICAgfQogICAgaWYgKGNvdW50ID4gMSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVTdHJpbmdKdXh0YXBvc2l0aW9uKGNvdW50KTsKICAgIH0KICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gc3ltYm9sTGl0ZXJhbDoKICAvLy8gICAnIycgKG9wZXJhdG9yIHwgKGlkZW50aWZpZXIgKCcuJyBpZGVudGlmaWVyKSopKQogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGl0ZXJhbFN5bWJvbChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gaGFzaFRva2VuID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCcjJywgaGFzaFRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbkxpdGVyYWxTeW1ib2woaGFzaFRva2VuKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5leHQuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3IpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlT3BlcmF0b3IobmV4dCk7CiAgICAgIGxpc3RlbmVyLmVuZExpdGVyYWxTeW1ib2woaGFzaFRva2VuLCAxKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd2b2lkJywgbmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlU3ltYm9sVm9pZChuZXh0KTsKICAgICAgbGlzdGVuZXIuZW5kTGl0ZXJhbFN5bWJvbChoYXNoVG9rZW4sIDEpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIGludCBjb3VudCA9IDE7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubGl0ZXJhbFN5bWJvbCk7CiAgICAgIHdoaWxlIChvcHRpb25hbCgnLicsIHRva2VuLm5leHQpKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIoCiAgICAgICAgICAgIHRva2VuLm5leHQsIElkZW50aWZpZXJDb250ZXh0LmxpdGVyYWxTeW1ib2xDb250aW51YXRpb24pOwogICAgICB9CiAgICAgIGxpc3RlbmVyLmVuZExpdGVyYWxTeW1ib2woaGFzaFRva2VuLCBjb3VudCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICB9CgogIFRva2VuIHBhcnNlU2luZ2xlTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWNhbCh0b2tlbi5raW5kLCBTVFJJTkdfVE9LRU4pKTsKICAgIGxpc3RlbmVyLmJlZ2luTGl0ZXJhbFN0cmluZyh0b2tlbik7CiAgICAvLyBQYXJzaW5nIHRoZSBwcmVmaXgsIGZvciBpbnN0YW5jZSAneCBvZiAneCR7aWR9eSR7aWR9eicKICAgIGludCBpbnRlcnBvbGF0aW9uQ291bnQgPSAwOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICB2YXIga2luZCA9IG5leHQua2luZDsKICAgIHdoaWxlIChraW5kICE9IEVPRl9UT0tFTikgewogICAgICBpZiAoaWRlbnRpY2FsKGtpbmQsIFNUUklOR19JTlRFUlBPTEFUSU9OX1RPS0VOKSkgewogICAgICAgIC8vIFBhcnNpbmcgJHtleHByZXNzaW9ufS4KICAgICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihuZXh0KS5uZXh0OwogICAgICAgIGlmICghb3B0aW9uYWwoJ30nLCB0b2tlbikpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnfScpKTsKICAgICAgICAgIHRva2VuID0gbmV4dC5lbmRHcm91cDsKICAgICAgICB9CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24obmV4dCwgdG9rZW4pOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChraW5kLCBTVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSX1RPS0VOKSkgewogICAgICAgIC8vIFBhcnNpbmcgJGlkZW50aWZpZXIuCiAgICAgICAgdG9rZW4gPSBwYXJzZUlkZW50aWZpZXJFeHByZXNzaW9uKG5leHQpOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZUludGVycG9sYXRpb25FeHByZXNzaW9uKG5leHQsIG51bGwpOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgICsraW50ZXJwb2xhdGlvbkNvdW50OwogICAgICAvLyBQYXJzaW5nIHRoZSBpbmZpeC9zdWZmaXgsIGZvciBpbnN0YW5jZSB5IGFuZCB6JyBvZiAneCR7aWR9eSR7aWR9eicKICAgICAgdG9rZW4gPSBwYXJzZVN0cmluZ1BhcnQodG9rZW4pOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAga2luZCA9IG5leHQua2luZDsKICAgIH0KICAgIGxpc3RlbmVyLmVuZExpdGVyYWxTdHJpbmcoaW50ZXJwb2xhdGlvbkNvdW50LCBuZXh0KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlSWRlbnRpZmllckV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5leHQua2luZCA9PSBLRVlXT1JEX1RPS0VOICYmIGlkZW50aWNhbChuZXh0LnN0cmluZ1ZhbHVlLCAidGhpcyIpKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZVRoaXNFeHByZXNzaW9uKG5leHQsIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb24pOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXJzZVNlbmQodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb24pOwogICAgfQogIH0KCiAgLy8vIGBgYAogIC8vLyBib29sZWFuTGl0ZXJhbDoKICAvLy8gICAndHJ1ZScgfAogIC8vLyAgICdmYWxzZScKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUxpdGVyYWxCb29sKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2ZhbHNlJywgdG9rZW4pIHx8IG9wdGlvbmFsKCd0cnVlJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxCb29sKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gbnVsbExpdGVyYWw6CiAgLy8vICAgJ251bGwnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VMaXRlcmFsTnVsbChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdudWxsJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxOdWxsKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlU2VuZChUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgVG9rZW4gYmVnaW5Ub2tlbiA9IHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CiAgICBpZiAob3B0aW9uYWwoJyEnLCB0b2tlbi5uZXh0KSkgewogICAgICBUb2tlbiBiYW5nID0gdG9rZW4ubmV4dDsKICAgICAgVG9rZW4gbmV4dCA9IGJhbmcubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkgfHwgb3B0aW9uYWwoJ1snLCBuZXh0KSkgewogICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uKGJhbmcpOwogICAgICAgIHRva2VuID0gYmFuZzsKICAgICAgfQogICAgfQogICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmcgPSBjb21wdXRlTWV0aG9kVHlwZUFyZ3VtZW50cyh0b2tlbik7CiAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHModG9rZW4ubmV4dCk7CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlQXJndW1lbnRzT3B0KHRva2VuKTsKICAgIGxpc3RlbmVyLmhhbmRsZVNlbmQoYmVnaW5Ub2tlbiwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBza2lwQXJndW1lbnRzT3B0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmhhbmRsZU5vQXJndW1lbnRzKG5leHQpOwogICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgcmV0dXJuIG5leHQuZW5kR3JvdXA7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgfQoKICBUb2tlbiBwYXJzZUFyZ3VtZW50c09wdChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9Bcmd1bWVudHMobmV4dCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXJzZUFyZ3VtZW50cyh0b2tlbik7CiAgICB9CiAgfQoKICAvLy8gYGBgCiAgLy8vIGFyZ3VtZW50czoKICAvLy8gICAnKCcgKGFyZ3VtZW50TGlzdCAnLCc/KT8gJyknCiAgLy8vIDsKICAvLy8KICAvLy8gYXJndW1lbnRMaXN0OgogIC8vLyAgIG5hbWVkQXJndW1lbnQgKCcsJyBuYW1lZEFyZ3VtZW50KSogfAogIC8vLyAgIGV4cHJlc3Npb25MaXN0ICgnLCcgbmFtZWRBcmd1bWVudCkqCiAgLy8vIDsKICAvLy8KICAvLy8gbmFtZWRBcmd1bWVudDoKICAvLy8gICBsYWJlbCBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBwYXJzZUFyZ3VtZW50c1Jlc3QodG9rZW4ubmV4dCk7CiAgfQoKICBUb2tlbiBwYXJzZUFyZ3VtZW50c1Jlc3QoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW47CiAgICBhc3NlcnQob3B0aW9uYWwoJygnLCBiZWdpbikpOwogICAgbGlzdGVuZXIuYmVnaW5Bcmd1bWVudHMoYmVnaW4pOwogICAgaW50IGFyZ3VtZW50Q291bnQgPSAwOwogICAgYm9vbCBoYXNTZWVuTmFtZWRBcmd1bWVudCA9IGZhbHNlOwogICAgYm9vbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnKScsIG5leHQpKSB7CiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIFRva2VuIGNvbG9uID0gbnVsbDsKICAgICAgaWYgKG9wdGlvbmFsKCc6JywgbmV4dC5uZXh0KSkgewogICAgICAgIHRva2VuID0KICAgICAgICAgICAgZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubmFtZWRBcmd1bWVudFJlZmVyZW5jZSkKICAgICAgICAgICAgICAgIC5uZXh0OwogICAgICAgIGNvbG9uID0gdG9rZW47CiAgICAgICAgaGFzU2Vlbk5hbWVkQXJndW1lbnQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGhhc1NlZW5OYW1lZEFyZ3VtZW50KSB7CiAgICAgICAgLy8gUG9zaXRpb25hbCBhcmd1bWVudCBhZnRlciBuYW1lZCBhcmd1bWVudC4KICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VQb3NpdGlvbmFsQWZ0ZXJOYW1lZEFyZ3VtZW50KTsKICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAoY29sb24gIT0gbnVsbCkgbGlzdGVuZXIuaGFuZGxlTmFtZWRBcmd1bWVudChjb2xvbik7CiAgICAgICsrYXJndW1lbnRDb3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCcpJywgbmV4dCkpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIGlmIChsb29rc0xpa2VFeHByZXNzaW9uU3RhcnQobmV4dCkpIHsKICAgICAgICAgIC8vIElmIHRoaXMgbG9va3MgbGlrZSB0aGUgc3RhcnQgb2YgYW4gZXhwcmVzc2lvbiwKICAgICAgICAgIC8vIHRoZW4gcmVwb3J0IGFuIGVycm9yLCBpbnNlcnQgdGhlIGNvbW1hLCBhbmQgY29udGludWUgcGFyc2luZy4KICAgICAgICAgIG5leHQgPSByZXdyaXRlQW5kUmVjb3ZlcigKICAgICAgICAgICAgICB0b2tlbiwKICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKSwKICAgICAgICAgICAgICBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNPTU1BLCBuZXh0Lm9mZnNldCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0b2tlbiA9IGVuc3VyZUNsb3NlUGFyZW4odG9rZW4sIGJlZ2luKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICB0b2tlbiA9IG5leHQ7CiAgICB9CiAgICBhc3NlcnQob3B0aW9uYWwoJyknLCB0b2tlbikpOwogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gb2xkOwogICAgbGlzdGVuZXIuZW5kQXJndW1lbnRzKGFyZ3VtZW50Q291bnQsIGJlZ2luLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHR5cGVUZXN0OjoKICAvLy8gICAnaXMnICchJz8gdHlwZQogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSXNPcGVyYXRvclJlc3QoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG9wZXJhdG9yID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdpcycsIG9wZXJhdG9yKSk7CiAgICBUb2tlbiBub3QgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCchJywgdG9rZW4ubmV4dCkpIHsKICAgICAgbm90ID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZUFmdGVySXNPckFzKHRva2VuKTsKICAgIHRva2VuID0gdHlwZUluZm8uZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4sIHRoaXMpOwogICAgbGlzdGVuZXIuaGFuZGxlSXNPcGVyYXRvcihvcGVyYXRvciwgbm90KTsKICAgIHJldHVybiBza2lwQ2hhaW5lZEFzSXNPcGVyYXRvcnModG9rZW4pOwogIH0KCiAgVHlwZUluZm8gY29tcHV0ZVR5cGVBZnRlcklzT3JBcyhUb2tlbiB0b2tlbikgewogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0b2tlbiwgdHJ1ZSk7CiAgICBpZiAodHlwZUluZm8uaXNOdWxsYWJsZSkgewogICAgICBUb2tlbiBuZXh0ID0gdHlwZUluZm8uc2tpcFR5cGUodG9rZW4pLm5leHQ7CiAgICAgIGlmICghaXNPbmVPZk9yRW9mKG5leHQsIGNvbnN0IFsnKScsICc/JywgJzsnLCAnaXMnLCAnYXMnXSkpIHsKICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaW52ZXN0aWdhdGUgb3RoZXIgc2l0dWF0aW9ucwogICAgICAgIC8vIHdoZXJlIGA/YCBzaG91bGQgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSB0eXBlIGluZm8KICAgICAgICAvLyByYXRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgYSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgICAgIHR5cGVJbmZvID0gdHlwZUluZm8uYXNOb25OdWxsYWJsZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGVJbmZvOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0eXBlQ2FzdDoKICAvLy8gICAnYXMnIHR5cGUKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUFzT3BlcmF0b3JSZXN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBvcGVyYXRvciA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnYXMnLCBvcGVyYXRvcikpOwogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZUFmdGVySXNPckFzKHRva2VuKTsKICAgIHRva2VuID0gdHlwZUluZm8uZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4sIHRoaXMpOwogICAgbGlzdGVuZXIuaGFuZGxlQXNPcGVyYXRvcihvcGVyYXRvcik7CiAgICByZXR1cm4gc2tpcENoYWluZWRBc0lzT3BlcmF0b3JzKHRva2VuKTsKICB9CgogIFRva2VuIHNraXBDaGFpbmVkQXNJc09wZXJhdG9ycyhUb2tlbiB0b2tlbikgewogICAgd2hpbGUgKHRydWUpIHsKICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICAgIGlmICghaWRlbnRpY2FsKHZhbHVlLCAnaXMnKSAmJiAhaWRlbnRpY2FsKHZhbHVlLCAnYXMnKSkgewogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfQogICAgICAvLyBUaGUgaXMtIGFuZCBhcy1vcGVyYXRvcnMgY2Fubm90IGJlIGNoYWluZWQuCiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBhIGJldHRlciBlcnJvciBtZXNzYWdlLgogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgaWYgKG9wdGlvbmFsKCchJywgbmV4dC5uZXh0KSkgewogICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgIH0KICAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZUFmdGVySXNPckFzKG5leHQpOwogICAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKG5leHQpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBbdG9rZW5dIGNvdWxkIGJlIHRoZSBzdGFydCBvZiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCiAgLy8vIHdpdGhvdXQgYSByZXR1cm4gdHlwZS4KICBib29sIGxvb2tzTGlrZUxvY2FsRnVuY3Rpb24oVG9rZW4gdG9rZW4pIHsKICAgIGlmICh0b2tlbi5pc0lkZW50aWZpZXIpIHsKICAgICAgaWYgKG9wdGlvbmFsKCc8JywgdG9rZW4ubmV4dCkpIHsKICAgICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuKTsKICAgICAgICBpZiAodHlwZVBhcmFtID09IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdG9rZW4gPSB0eXBlUGFyYW0uc2tpcCh0b2tlbik7CiAgICAgIH0KICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJygnLCB0b2tlbikpIHsKICAgICAgICB0b2tlbiA9IHRva2VuLmVuZEdyb3VwLm5leHQ7CiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKCd7JywgdG9rZW4pIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCc9PicsIHRva2VuKSB8fAogICAgICAgICAgICBvcHRpb25hbCgnYXN5bmMnLCB0b2tlbikgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJ3N5bmMnLCB0b2tlbik7CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJz0+JywgdG9rZW4pKSB7CiAgICAgICAgLy8gUmVjb3Zlcnk6IExvb2tzIGxpa2UgYSBsb2NhbCBmdW5jdGlvbiB0aGF0IGlzIG1pc3NpbmcgcGFyZW50aGVzaXMuCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgW3Rva2VuXSBjb3VsZCBiZSB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbiBib2R5LgogIGJvb2wgbG9va3NMaWtlRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gb3B0aW9uYWwoJ3snLCB0b2tlbikgfHwKICAgICAgICBvcHRpb25hbCgnPT4nLCB0b2tlbikgfHwKICAgICAgICBvcHRpb25hbCgnYXN5bmMnLCB0b2tlbikgfHwKICAgICAgICBvcHRpb25hbCgnc3luYycsIHRva2VuKTsKICB9CgogIFRva2VuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yQ29uc3REZWNsYXJhdGlvbihmaW5hbCBUb2tlbiBzdGFydCkgewogICAgVG9rZW4gY29uc3RUb2tlbiA9IHN0YXJ0Lm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2NvbnN0JywgY29uc3RUb2tlbikpOwogICAgaWYgKCFpc01vZGlmaWVyKGNvbnN0VG9rZW4ubmV4dCkpIHsKICAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZShjb25zdFRva2VuLCBmYWxzZSk7CiAgICAgIGlmICh0eXBlSW5mbyA9PSBub1R5cGUpIHsKICAgICAgICBUb2tlbiBuZXh0ID0gY29uc3RUb2tlbi5uZXh0OwogICAgICAgIGlmICghbmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoc3RhcnQpOwogICAgICAgIH0KICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgIGlmICghKG9wdGlvbmFsKCc9JywgbmV4dCkgfHwKICAgICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgICAgbmV4dC5pc0tleXdvcmRPcklkZW50aWZpZXIgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJzsnLCBuZXh0KSB8fAogICAgICAgICAgICBvcHRpb25hbCgnLCcsIG5leHQpIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCd7JywgbmV4dCkpKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KHN0YXJ0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25BZnRlck1vZGlmaWVycygKICAgICAgICAgIGNvbnN0VG9rZW4sIHN0YXJ0LCBudWxsLCBjb25zdFRva2VuLCB0eXBlSW5mbywgZmFsc2UpOwogICAgfQogICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24oc3RhcnQpOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIGhhcyB0d28gbW9kZXMgYmFzZWQgdXBvbiBbb25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0XS4KICAvLy8KICAvLy8gSWYgW29ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydF0gaXMgYGZhbHNlYCAodGhlIGRlZmF1bHQpIHRoZW4gdGhpcwogIC8vLyBtZXRob2Qgd2lsbCBwYXJzZSBhIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9uLCBhIGxvY2FsIGZ1bmN0aW9uLAogIC8vLyBvciBhbiBleHByZXNzaW9uIHN0YXRlbWVudCwgYW5kIHRoZW4gcmV0dXJuIHRoZSBsYXN0IGNvbnN1bWVkIHRva2VuLgogIC8vLwogIC8vLyBJZiBbb25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0XSBpcyBgdHJ1ZWAgdGhlbiB0aGlzIG1ldGhvZAogIC8vLyB3aWxsIG9ubHkgcGFyc2UgdGhlIG1ldGFkYXRhLCBtb2RpZmllcnMsIGFuZCB0eXBlIG9mIGEgbG9jYWwgdmFyaWFibGUKICAvLy8gZGVjbGFyYXRpb24gaWYgaXQgZXhpc3RzLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0bwogIC8vLyBjYWxsIFtwYXJzZVZhcmlhYmxlc0RlY2xhcmF0aW9uUmVzdF0gdG8gZmluaXNoIHBhcnNpbmcgdGhlIGxvY2FsIHZhcmlhYmxlCiAgLy8vIGRlY2xhcmF0aW9uLiBJZiBhIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGlzIG5vdCBmb3VuZCB0aGVuIHRoaXMKICAvLy8gbWV0aG9kIHdpbGwgcmV0dXJuIFtzdGFydF0uCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbihmaW5hbCBUb2tlbiBzdGFydCwKICAgICAgW2Jvb2wgb25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0ID0gZmFsc2VdKSB7CiAgICBUb2tlbiB0b2tlbiA9IHN0YXJ0OwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJ0AnLCBuZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlTWV0YWRhdGFTdGFyKHRva2VuKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CgogICAgVG9rZW4gbGF0ZVRva2VuOwogICAgVG9rZW4gdmFyRmluYWxPckNvbnN0OwoKICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkgfHwKICAgICAgICAgIG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpIHx8CiAgICAgICAgICBvcHRpb25hbCgnY29uc3QnLCBuZXh0KSkgewogICAgICAgIHZhckZpbmFsT3JDb25zdCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnbGF0ZScsIG5leHQpKSB7CiAgICAgICAgbGF0ZVRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpICYmIG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpKSB7CiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBNb2RpZmllclJlY292ZXJ5Q29udGV4dCBjb250ZXh0ID0gbmV3IE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0KHRoaXMpCiAgICAgICAgICAuLmxhdGVUb2tlbiA9IGxhdGVUb2tlbgogICAgICAgICAgLi52YXJGaW5hbE9yQ29uc3QgPSB2YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgIHRva2VuID0gY29udGV4dC5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25Nb2RpZmllcnModG9rZW4pOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgICAgICBsYXRlVG9rZW4gPSBjb250ZXh0LmxhdGVUb2tlbjsKICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSBjb250ZXh0LnZhckZpbmFsT3JDb25zdDsKCiAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbkFmdGVyTW9kaWZpZXJzKHRva2VuLCBzdGFydCwKICAgICAgICBsYXRlVG9rZW4sIHZhckZpbmFsT3JDb25zdCwgbnVsbCwgb25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0KTsKICB9CgogIC8vLyBTZWUgW3BhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25dCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbkFmdGVyTW9kaWZpZXJzKAogICAgICBmaW5hbCBUb2tlbiBiZWZvcmVUeXBlLAogICAgICBmaW5hbCBUb2tlbiBzdGFydCwKICAgICAgZmluYWwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvLAogICAgICBib29sIG9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydCkgewogICAgdHlwZUluZm8gPz89IGNvbXB1dGVUeXBlKGJlZm9yZVR5cGUsIGZhbHNlKTsKCiAgICBUb2tlbiB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKGJlZm9yZVR5cGUpOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CgogICAgaWYgKG9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydCkgewogICAgICBpZiAobGF0ZVRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBsYXRlVG9rZW4sIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKGxvb2tzTGlrZUxvY2FsRnVuY3Rpb24obmV4dCkpIHsKICAgICAgICAvLyBQYXJzZSBhIGxvY2FsIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgogICAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICAgIGxhdGVUb2tlbiwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgICAgIH0KICAgICAgICBpZiAoIW9wdGlvbmFsKCdAJywgc3RhcnQubmV4dCkpIHsKICAgICAgICAgIGxpc3RlbmVyLmJlZ2luTWV0YWRhdGFTdGFyKHN0YXJ0Lm5leHQpOwogICAgICAgICAgbGlzdGVuZXIuZW5kTWV0YWRhdGFTdGFyKDApOwogICAgICAgIH0KICAgICAgICBUb2tlbiBiZWZvcmVGb3JtYWxzID0KICAgICAgICAgICAgY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5leHQpLnBhcnNlVmFyaWFibGVzKG5leHQsIHRoaXMpOwogICAgICAgIGxpc3RlbmVyLmJlZ2luTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKHN0YXJ0Lm5leHQpOwogICAgICAgIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgICAgIHJldHVybiBwYXJzZU5hbWVkRnVuY3Rpb25SZXN0KHRva2VuLCBzdGFydC5uZXh0LCBiZWZvcmVGb3JtYWxzLCBmYWxzZSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYmVmb3JlVHlwZSA9PSBzdGFydCAmJgogICAgICAgIHR5cGVJbmZvLmlzTnVsbGFibGUgJiYKICAgICAgICB0eXBlSW5mby5jb3VsZEJlRXhwcmVzc2lvbikgewogICAgICBhc3NlcnQob3B0aW9uYWwoJz8nLCB0b2tlbikpOwogICAgICBhc3NlcnQobmV4dC5pc0lkZW50aWZpZXIpOwogICAgICBUb2tlbiBhZnRlcklkZW50aWZpZXIgPSBuZXh0Lm5leHQ7CiAgICAgIC8vCiAgICAgIC8vIGZvdW5kIDx0eXBlcmVmPiBgP2AgPGlkZW50aWZpZXI+CiAgICAgIC8vIHdpdGggbm8gYW5ub3RhdGlvbnMgb3IgbW9kaWZpZXJzIHByZWNlZWRpbmcgaXQKICAgICAgLy8KICAgICAgaWYgKG9wdGlvbmFsKCc9JywgYWZ0ZXJJZGVudGlmaWVyKSkgewogICAgICAgIC8vCiAgICAgICAgLy8gbG9vayBwYXN0IHRoZSBuZXh0IGV4cHJlc3Npb24KICAgICAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogICAgICAgIC8vCiAgICAgICAgZmluYWwgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgICAgIGxpc3RlbmVyID0gbmV3IEZvcndhcmRpbmdMaXN0ZW5lcigpOwogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBjb25zaWRlciB1c2luZyBUb2tlblN0cmVhbUdob3N0V3JpdGVyIGhlcmUKICAgICAgICBUb2tlbiBhZnRlckV4cHJlc3Npb24gPQogICAgICAgICAgICBwYXJzZUV4cHJlc3Npb25XaXRob3V0Q2FzY2FkZShhZnRlcklkZW50aWZpZXIpLm5leHQ7CiAgICAgICAgbGlzdGVuZXIgPSBvcmlnaW5hbExpc3RlbmVyOwoKICAgICAgICBpZiAob3B0aW9uYWwoJzonLCBhZnRlckV4cHJlc3Npb24pKSB7CiAgICAgICAgICAvLyBMb29rcyBsaWtlIHBhcnQgb2YgYSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgICAgICAgLy8gRHJvcCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBhbmQgcmVzZXQgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgICAgICAgICB0eXBlSW5mbyA9IG5vVHlwZTsKICAgICAgICAgIHRva2VuID0gc3RhcnQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIWFmdGVySWRlbnRpZmllci5pc0tleXdvcmQgJiYKICAgICAgICAgICFpc09uZU9mT3JFb2YoYWZ0ZXJJZGVudGlmaWVyLCBjb25zdCBbJzsnLCAnLCcsICcpJ10pKSB7CiAgICAgICAgLy8gTG9va3MgbGlrZSBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KICAgICAgICAvLyBEcm9wIHRoZSB0eXBlIGluZm9ybWF0aW9uIGFuZCByZXNldCB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbi4KICAgICAgICB0eXBlSW5mbyA9IG5vVHlwZTsKICAgICAgICB0b2tlbiA9IHN0YXJ0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9CgogICAgaWYgKHRva2VuID09IHN0YXJ0KSB7CiAgICAgIC8vIElmIG5vIGFubm90YXRpb24sIG1vZGlmaWVyLCBvciB0eXBlLCBhbmQgdGhpcyBpcyBub3QgYSBsb2NhbCBmdW5jdGlvbgogICAgICAvLyB0aGVuIHRoaXMgbXVzdCBiZSBhbiBleHByZXNzaW9uIHN0YXRlbWVudC4KICAgICAgaWYgKG9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydCkgewogICAgICAgIHJldHVybiBzdGFydDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KHN0YXJ0KTsKICAgICAgfQogICAgfQoKICAgIGlmIChuZXh0LnR5cGUuaXNCdWlsdEluICYmCiAgICAgICAgYmVmb3JlVHlwZSA9PSBzdGFydCAmJgogICAgICAgIHR5cGVJbmZvLmNvdWxkQmVFeHByZXNzaW9uKSB7CiAgICAgIC8vIERldGVjdCBleHByZXNzaW9ucyBzdWNoIGFzIGlkZW50aWZpZXIgYGFzYCBpZGVudGlmaWVyCiAgICAgIC8vIGFuZCB0cmVhdCB0aG9zZSBhcyBleHByZXNzaW9ucy4KICAgICAgaWYgKG9wdGlvbmFsKCdhcycsIG5leHQpIHx8IG9wdGlvbmFsKCdpcycsIG5leHQpKSB7CiAgICAgICAgaW50IGtpbmQgPSBuZXh0Lm5leHQua2luZDsKICAgICAgICBpZiAoRVFfVE9LRU4gIT0ga2luZCAmJgogICAgICAgICAgICBTRU1JQ09MT05fVE9LRU4gIT0ga2luZCAmJgogICAgICAgICAgICBDT01NQV9UT0tFTiAhPSBraW5kKSB7CiAgICAgICAgICBpZiAob25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0KSB7CiAgICAgICAgICAgIGlmICghb3B0aW9uYWwoJ2luJywgbmV4dC5uZXh0KSkgewogICAgICAgICAgICAgIHJldHVybiBzdGFydDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChzdGFydCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIC8vIE9ubHkgcmVwb3J0IHRoZXNlIGVycm9ycyBpZiB0aGVyZSBpcyBhbiBpZGVudGlmaWVyLiBJZiB0aGVyZSBpcyBub3QgYW4KICAgICAgLy8gaWRlbnRpZmllciwgdGhlbiBhbGxvdyBlbnN1cmVJZGVudGlmaWVyIHRvIHJlcG9ydCBhbiBlcnJvcgogICAgICAvLyBhbmQgZG9uJ3QgcmVwb3J0IGVycm9ycyBoZXJlLgogICAgICBpZiAodmFyRmluYWxPckNvbnN0ID09IG51bGwpIHsKICAgICAgICBpZiAodHlwZUluZm8gPT0gbm9UeXBlICYmIGxhdGVUb2tlbiA9PSBudWxsKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VNaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd2YXInLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgICAgaWYgKHR5cGVJbmZvICE9IG5vVHlwZSkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VUeXBlQWZ0ZXJWYXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmICghb3B0aW9uYWwoJ0AnLCBzdGFydC5uZXh0KSkgewogICAgICBsaXN0ZW5lci5iZWdpbk1ldGFkYXRhU3RhcihzdGFydC5uZXh0KTsKICAgICAgbGlzdGVuZXIuZW5kTWV0YWRhdGFTdGFyKDApOwogICAgfQogICAgdG9rZW4gPSB0eXBlSW5mby5wYXJzZVR5cGUoYmVmb3JlVHlwZSwgdGhpcyk7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmJlZ2luVmFyaWFibGVzRGVjbGFyYXRpb24obmV4dCwgbGF0ZVRva2VuLCB2YXJGaW5hbE9yQ29uc3QpOwogICAgaWYgKCFvbmx5UGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uU3RhcnQpIHsKICAgICAgdG9rZW4gPSBwYXJzZVZhcmlhYmxlc0RlY2xhcmF0aW9uUmVzdCh0b2tlbiwgdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVZhcmlhYmxlc0RlY2xhcmF0aW9uUmVzdChUb2tlbiB0b2tlbiwgYm9vbCBlbmRXaXRoU2VtaWNvbG9uKSB7CiAgICBpbnQgY291bnQgPSAxOwogICAgdG9rZW4gPSBwYXJzZU9wdGlvbmFsbHlJbml0aWFsaXplZElkZW50aWZpZXIodG9rZW4pOwogICAgd2hpbGUgKG9wdGlvbmFsKCcsJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBwYXJzZU9wdGlvbmFsbHlJbml0aWFsaXplZElkZW50aWZpZXIodG9rZW4ubmV4dCk7CiAgICAgICsrY291bnQ7CiAgICB9CiAgICBpZiAoZW5kV2l0aFNlbWljb2xvbikgewogICAgICBUb2tlbiBzZW1pY29sb24gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgICBsaXN0ZW5lci5lbmRWYXJpYWJsZXNEZWNsYXJhdGlvbihjb3VudCwgc2VtaWNvbG9uKTsKICAgICAgcmV0dXJuIHNlbWljb2xvbjsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmVuZFZhcmlhYmxlc0RlY2xhcmF0aW9uKGNvdW50LCBudWxsKTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogIH0KCiAgVG9rZW4gcGFyc2VPcHRpb25hbGx5SW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuYW1lVG9rZW4gPQogICAgICAgIGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICBsaXN0ZW5lci5iZWdpbkluaXRpYWxpemVkSWRlbnRpZmllcihuYW1lVG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZVZhcmlhYmxlSW5pdGlhbGl6ZXJPcHQobmFtZVRva2VuKTsKICAgIGxpc3RlbmVyLmVuZEluaXRpYWxpemVkSWRlbnRpZmllcihuYW1lVG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBpZlN0YXRlbWVudDoKICAvLy8gICAnaWYnICcoJyBleHByZXNzaW9uICcpJyBzdGF0ZW1lbnQgKCdlbHNlJyBzdGF0ZW1lbnQpPwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSWZTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGlmVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdpZicsIGlmVG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luSWZTdGF0ZW1lbnQoaWZUb2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oaWZUb2tlbik7CiAgICBsaXN0ZW5lci5iZWdpblRoZW5TdGF0ZW1lbnQodG9rZW4ubmV4dCk7CiAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZFRoZW5TdGF0ZW1lbnQodG9rZW4pOwogICAgVG9rZW4gZWxzZVRva2VuID0gbnVsbDsKICAgIGlmIChvcHRpb25hbCgnZWxzZScsIHRva2VuLm5leHQpKSB7CiAgICAgIGVsc2VUb2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIGxpc3RlbmVyLmJlZ2luRWxzZVN0YXRlbWVudChlbHNlVG9rZW4pOwogICAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KGVsc2VUb2tlbik7CiAgICAgIGxpc3RlbmVyLmVuZEVsc2VTdGF0ZW1lbnQoZWxzZVRva2VuKTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZElmU3RhdGVtZW50KGlmVG9rZW4sIGVsc2VUb2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGZvclN0YXRlbWVudDoKICAvLy8gICAnYXdhaXQnPyAnZm9yJyAnKCcgZm9yTG9vcFBhcnRzICcpJyBzdGF0ZW1lbnQKICAvLy8gOwogIC8vLwogIC8vLyAgZm9yTG9vcFBhcnRzOgogIC8vLyAgICAgIGxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiAnOycgZXhwcmVzc2lvbj8gJzsnIGV4cHJlc3Npb25MaXN0PwogIC8vLyAgICB8IGV4cHJlc3Npb24/ICc7JyBleHByZXNzaW9uPyAnOycgZXhwcmVzc2lvbkxpc3Q/CiAgLy8vICAgIHwgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uICdpbicgZXhwcmVzc2lvbgogIC8vLyAgICB8IGlkZW50aWZpZXIgJ2luJyBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8KICAvLy8gZm9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnQ6CiAgLy8vICAgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uIHwKICAvLy8gICBleHByZXNzaW9uPyAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUZvclN0YXRlbWVudChUb2tlbiB0b2tlbiwgVG9rZW4gYXdhaXRUb2tlbikgewogICAgVG9rZW4gZm9yVG9rZW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoYXdhaXRUb2tlbiA9PSBudWxsIHx8IG9wdGlvbmFsKCdhd2FpdCcsIGF3YWl0VG9rZW4pKTsKICAgIGFzc2VydChvcHRpb25hbCgnZm9yJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luRm9yU3RhdGVtZW50KGZvclRva2VuKTsKCiAgICB0b2tlbiA9IHBhcnNlRm9yTG9vcFBhcnRzU3RhcnQoYXdhaXRUb2tlbiwgZm9yVG9rZW4pOwogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICB0b2tlbiA9IHBhcnNlRm9yTG9vcFBhcnRzTWlkKHRva2VuLCBhd2FpdFRva2VuLCBmb3JUb2tlbik7CiAgICBpZiAob3B0aW9uYWwoJ2luJywgdG9rZW4ubmV4dCkgfHwgb3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0KSkgewogICAgICAvLyBQcm9jZXNzIGBmb3IgKCAuLi4gaW4gLi4uIClgCiAgICAgIHJldHVybiBwYXJzZUZvckluUmVzdCh0b2tlbiwgYXdhaXRUb2tlbiwgZm9yVG9rZW4sIGlkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUHJvY2VzcyBgZm9yICggLi4uIDsgLi4uIDsgLi4uIClgCiAgICAgIHJldHVybiBwYXJzZUZvclJlc3QoYXdhaXRUb2tlbiwgdG9rZW4sIGZvclRva2VuKTsKICAgIH0KICB9CgogIC8vLyBQYXJzZSB0aGUgc3RhcnQgb2YgYSBmb3IgbG9vcCBjb250cm9sIHN0cnVjdHVyZQogIC8vLyBmcm9tIHRoZSBvcGVuIHBhcmVudGhlc2lzIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBpZGVudGlmaWVyLgogIFRva2VuIHBhcnNlRm9yTG9vcFBhcnRzU3RhcnQoVG9rZW4gYXdhaXRUb2tlbiwgVG9rZW4gZm9yVG9rZW4pIHsKICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcyA9IGZvclRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbGVmdFBhcmVudGhlc2lzKSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgbGVmdFBhcmVudGhlc2lzLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJygnKSk7CgogICAgICBCZWdpblRva2VuIG9wZW5QYXJlbiA9IHJld3JpdGVyLmluc2VydFRva2VuKAogICAgICAgICAgZm9yVG9rZW4sCiAgICAgICAgICBuZXcgU3ludGhldGljQmVnaW5Ub2tlbigKICAgICAgICAgICAgICBUb2tlblR5cGUuT1BFTl9QQVJFTiwgbGVmdFBhcmVudGhlc2lzLm9mZnNldCkpOwoKICAgICAgVG9rZW4gdG9rZW47CiAgICAgIGlmIChhd2FpdFRva2VuICE9IG51bGwpIHsKICAgICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIob3BlblBhcmVuKTsKICAgICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0tleXdvcmQodG9rZW4sIEtleXdvcmQuSU4pOwogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbihvcGVuUGFyZW4sIFRva2VuVHlwZS5TRU1JQ09MT04pOwogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5TRU1JQ09MT04pOwogICAgICB9CgogICAgICBvcGVuUGFyZW4uZW5kR3JvdXAgPSB0b2tlbiA9IHJld3JpdGVyLmluc2VydFRva2VuKHRva2VuLAogICAgICAgICAgbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5DTE9TRV9QQVJFTiwgbGVmdFBhcmVudGhlc2lzLm9mZnNldCkpOwoKICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5TRU1JQ09MT04pOwoKICAgICAgbGVmdFBhcmVudGhlc2lzID0gb3BlblBhcmVuOwogICAgfQoKICAgIC8vIFBhc3MgYHRydWVgIHNvIHRoYXQgdGhlIFtwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uXSBvbmx5CiAgICAvLyBwYXJzZXMgdGhlIG1ldGFkYXRhLCBtb2RpZmllcnMsIGFuZCB0eXBlIG9mIGEgbG9jYWwgdmFyaWFibGUKICAgIC8vIGRlY2xhcmF0aW9uIGlmIGl0IGV4aXN0cy4gVGhpcyBlbmFibGVzIGNhcHR1cmluZyBbYmVmb3JlSWRlbnRpZmllcl0KICAgIC8vIGZvciBsYXRlciBlcnJvciByZXBvcnRpbmcuCiAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbihsZWZ0UGFyZW50aGVzaXMsIHRydWUpOwogIH0KCiAgLy8vIFBhcnNlIHRoZSByZW1haW5kZXIgb2YgdGhlIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9uCiAgLy8vIG9yIGFuIGV4cHJlc3Npb24gaWYgbm8gbG9jYWwgdmFyaWFibGUgZGVjbGFyYXRpb24gd2FzIGZvdW5kLgogIFRva2VuIHBhcnNlRm9yTG9vcFBhcnRzTWlkKFRva2VuIHRva2VuLCBUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbikgewogICAgaWYgKHRva2VuICE9IGZvclRva2VuLm5leHQpIHsKICAgICAgdG9rZW4gPSBwYXJzZVZhcmlhYmxlc0RlY2xhcmF0aW9uUmVzdCh0b2tlbiwgZmFsc2UpOwogICAgICBsaXN0ZW5lci5oYW5kbGVGb3JJbml0aWFsaXplckxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbih0b2tlbik7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCc7JywgdG9rZW4ubmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlRm9ySW5pdGlhbGl6ZXJFbXB0eVN0YXRlbWVudCh0b2tlbi5uZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50KHRva2VuKTsKICAgIH0KICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgaWYgKGF3YWl0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoYXdhaXRUb2tlbiwgZmFzdGEubWVzc2FnZUludmFsaWRBd2FpdEZvcik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW9wdGlvbmFsKCdpbicsIG5leHQpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIGlmIChvcHRpb25hbCgnOicsIG5leHQpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlQ29sb25JblBsYWNlT2ZJbik7CiAgICAgIH0gZWxzZSBpZiAoYXdhaXRUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCdpbicpKTsKICAgICAgICB0b2tlbi5zZXROZXh0KAogICAgICAgICAgICBuZXcgU3ludGhldGljS2V5d29yZFRva2VuKEtleXdvcmQuSU4sIG5leHQub2Zmc2V0KS4uc2V0TmV4dChuZXh0KSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBwYXJzZXMgdGhlIHBvcnRpb24gb2YgdGhlIGZvckxvb3BQYXJ0cyB0aGF0IHN0YXJ0cyB3aXRoIHRoZQogIC8vLyBmaXJzdCBzZW1pY29sb24gKHRoZSBvbmUgdGhhdCB0ZXJtaW5hdGVzIHRoZSBmb3JJbml0aWFsaXplclN0YXRlbWVudCkuCiAgLy8vCiAgLy8vIGBgYAogIC8vLyAgZm9yTG9vcFBhcnRzOgogIC8vLyAgICAgIGxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiAnOycgZXhwcmVzc2lvbj8gJzsnIGV4cHJlc3Npb25MaXN0PwogIC8vLyAgICB8IGV4cHJlc3Npb24/ICc7JyBleHByZXNzaW9uPyAnOycgZXhwcmVzc2lvbkxpc3Q/CiAgLy8vICAgIHwgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uICdpbicgZXhwcmVzc2lvbgogIC8vLyAgICB8IGlkZW50aWZpZXIgJ2luJyBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VGb3JSZXN0KFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIHRva2VuLCBUb2tlbiBmb3JUb2tlbikgewogICAgdG9rZW4gPSBwYXJzZUZvckxvb3BQYXJ0c1Jlc3QodG9rZW4sIGZvclRva2VuLCBhd2FpdFRva2VuKTsKICAgIGxpc3RlbmVyLmJlZ2luRm9yU3RhdGVtZW50Qm9keSh0b2tlbi5uZXh0KTsKICAgIExvb3BTdGF0ZSBzYXZlZExvb3BTdGF0ZSA9IGxvb3BTdGF0ZTsKICAgIGxvb3BTdGF0ZSA9IExvb3BTdGF0ZS5JbnNpZGVMb29wOwogICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICBsb29wU3RhdGUgPSBzYXZlZExvb3BTdGF0ZTsKICAgIGxpc3RlbmVyLmVuZEZvclN0YXRlbWVudEJvZHkodG9rZW4ubmV4dCk7CiAgICBsaXN0ZW5lci5lbmRGb3JTdGF0ZW1lbnQodG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUZvckxvb3BQYXJ0c1Jlc3QoVG9rZW4gdG9rZW4sIFRva2VuIGZvclRva2VuLCBUb2tlbiBhd2FpdFRva2VuKSB7CiAgICBUb2tlbiBsZWZ0UGFyZW50aGVzaXMgPSBmb3JUb2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdmb3InLCBmb3JUb2tlbikpOwogICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgbGVmdFBhcmVudGhlc2lzKSk7CgogICAgVG9rZW4gbGVmdFNlcGFyYXRvciA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBpZiAob3B0aW9uYWwoJzsnLCBsZWZ0U2VwYXJhdG9yLm5leHQpKSB7CiAgICAgIHRva2VuID0gcGFyc2VFbXB0eVN0YXRlbWVudChsZWZ0U2VwYXJhdG9yKTsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGxlZnRTZXBhcmF0b3IpOwogICAgfQogICAgaW50IGV4cHJlc3Npb25Db3VudCA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcpJywgbmV4dCkpIHsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pLm5leHQ7CiAgICAgICsrZXhwcmVzc2lvbkNvdW50OwogICAgICBpZiAoIW9wdGlvbmFsKCcsJywgdG9rZW4pKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICh0b2tlbiAhPSBsZWZ0UGFyZW50aGVzaXMuZW5kR3JvdXApIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbih0b2tlbiwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICB0b2tlbiA9IGxlZnRQYXJlbnRoZXNpcy5lbmRHcm91cDsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUZvckxvb3BQYXJ0cygKICAgICAgICBmb3JUb2tlbiwgbGVmdFBhcmVudGhlc2lzLCBsZWZ0U2VwYXJhdG9yLCBleHByZXNzaW9uQ291bnQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIHBhcnNlcyB0aGUgcG9ydGlvbiBvZiB0aGUgZm9yTG9vcFBhcnRzIHRoYXQgc3RhcnRzIHdpdGggdGhlCiAgLy8vIGtleXdvcmQgJ2luJy4gRm9yIHRoZSBzYWtlIG9mIHJlY292ZXJ5LCB3ZSBhY2NlcHQgYSBjb2xvbiBpbiBwbGFjZSBvZiB0aGUKICAvLy8ga2V5d29yZC4KICAvLy8KICAvLy8gYGBgCiAgLy8vICBmb3JMb29wUGFydHM6CiAgLy8vICAgICAgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uICc7JyBleHByZXNzaW9uPyAnOycgZXhwcmVzc2lvbkxpc3Q/CiAgLy8vICAgIHwgZXhwcmVzc2lvbj8gJzsnIGV4cHJlc3Npb24/ICc7JyBleHByZXNzaW9uTGlzdD8KICAvLy8gICAgfCBsb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24gJ2luJyBleHByZXNzaW9uCiAgLy8vICAgIHwgaWRlbnRpZmllciAnaW4nIGV4cHJlc3Npb24KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUZvckluUmVzdCgKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIGZvclRva2VuLCBUb2tlbiBpZGVudGlmaWVyKSB7CiAgICB0b2tlbiA9IHBhcnNlRm9ySW5Mb29wUGFydHNSZXN0KHRva2VuLCBhd2FpdFRva2VuLCBmb3JUb2tlbiwgaWRlbnRpZmllcik7CiAgICBsaXN0ZW5lci5iZWdpbkZvckluQm9keSh0b2tlbi5uZXh0KTsKICAgIExvb3BTdGF0ZSBzYXZlZExvb3BTdGF0ZSA9IGxvb3BTdGF0ZTsKICAgIGxvb3BTdGF0ZSA9IExvb3BTdGF0ZS5JbnNpZGVMb29wOwogICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICBsb29wU3RhdGUgPSBzYXZlZExvb3BTdGF0ZTsKICAgIGxpc3RlbmVyLmVuZEZvckluQm9keSh0b2tlbi5uZXh0KTsKICAgIGxpc3RlbmVyLmVuZEZvckluKHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VGb3JJbkxvb3BQYXJ0c1Jlc3QoCiAgICAgIFRva2VuIHRva2VuLCBUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbiwgVG9rZW4gaWRlbnRpZmllcikgewogICAgVG9rZW4gaW5LZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZm9yJywgZm9yVG9rZW4pKTsKICAgIGFzc2VydChvcHRpb25hbCgnKCcsIGZvclRva2VuLm5leHQpKTsKICAgIGFzc2VydChvcHRpb25hbCgnaW4nLCBpbktleXdvcmQpIHx8IG9wdGlvbmFsKCc6JywgaW5LZXl3b3JkKSk7CgogICAgaWYgKCFpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgfSBlbHNlIGlmIChpZGVudGlmaWVyICE9IHRva2VuKSB7CiAgICAgIGlmIChvcHRpb25hbCgnPScsIGlkZW50aWZpZXIubmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBpZGVudGlmaWVyLm5leHQsIGZhc3RhLm1lc3NhZ2VJbml0aWFsaXplZFZhcmlhYmxlSW5Gb3JFYWNoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBpZGVudGlmaWVyLm5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChhd2FpdFRva2VuICE9IG51bGwgJiYgIWluQXN5bmMpIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IGNvbnNpZGVyIHJlcG9ydGluZyB0aGUgZXJyb3Igb24gYXdhaXRUb2tlbgogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGluS2V5d29yZCwgZmFzdGEubWVzc2FnZUF3YWl0Rm9yTm90QXN5bmMpOwogICAgfQoKICAgIGxpc3RlbmVyLmJlZ2luRm9ySW5FeHByZXNzaW9uKGluS2V5d29yZC5uZXh0KTsKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKGluS2V5d29yZCk7CiAgICB0b2tlbiA9IGVuc3VyZUNsb3NlUGFyZW4odG9rZW4sIGZvclRva2VuLm5leHQpOwogICAgbGlzdGVuZXIuZW5kRm9ySW5FeHByZXNzaW9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmhhbmRsZUZvckluTG9vcFBhcnRzKAogICAgICAgIGF3YWl0VG9rZW4sIGZvclRva2VuLCBmb3JUb2tlbi5uZXh0LCBpbktleXdvcmQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB3aGlsZVN0YXRlbWVudDoKICAvLy8gICAnd2hpbGUnICcoJyBleHByZXNzaW9uICcpJyBzdGF0ZW1lbnQKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVdoaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiB3aGlsZVRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnd2hpbGUnLCB3aGlsZVRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbldoaWxlU3RhdGVtZW50KHdoaWxlVG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKHdoaWxlVG9rZW4pOwogICAgbGlzdGVuZXIuYmVnaW5XaGlsZVN0YXRlbWVudEJvZHkodG9rZW4ubmV4dCk7CiAgICBMb29wU3RhdGUgc2F2ZWRMb29wU3RhdGUgPSBsb29wU3RhdGU7CiAgICBsb29wU3RhdGUgPSBMb29wU3RhdGUuSW5zaWRlTG9vcDsKICAgIHRva2VuID0gcGFyc2VTdGF0ZW1lbnQodG9rZW4pOwogICAgbG9vcFN0YXRlID0gc2F2ZWRMb29wU3RhdGU7CiAgICBsaXN0ZW5lci5lbmRXaGlsZVN0YXRlbWVudEJvZHkodG9rZW4ubmV4dCk7CiAgICBsaXN0ZW5lci5lbmRXaGlsZVN0YXRlbWVudCh3aGlsZVRva2VuLCB0b2tlbi5uZXh0KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZG9TdGF0ZW1lbnQ6CiAgLy8vICAgJ2RvJyBzdGF0ZW1lbnQgJ3doaWxlJyAnKCcgZXhwcmVzc2lvbiAnKScgJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VEb1doaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBkb1Rva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZG8nLCBkb1Rva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbkRvV2hpbGVTdGF0ZW1lbnQoZG9Ub2tlbik7CiAgICBsaXN0ZW5lci5iZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5KGRvVG9rZW4ubmV4dCk7CiAgICBMb29wU3RhdGUgc2F2ZWRMb29wU3RhdGUgPSBsb29wU3RhdGU7CiAgICBsb29wU3RhdGUgPSBMb29wU3RhdGUuSW5zaWRlTG9vcDsKICAgIHRva2VuID0gcGFyc2VTdGF0ZW1lbnQoZG9Ub2tlbik7CiAgICBsb29wU3RhdGUgPSBzYXZlZExvb3BTdGF0ZTsKICAgIGxpc3RlbmVyLmVuZERvV2hpbGVTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICAgIFRva2VuIHdoaWxlVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnd2hpbGUnLCB3aGlsZVRva2VuKSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgd2hpbGVUb2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCd3aGlsZScpKTsKICAgICAgd2hpbGVUb2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0tleXdvcmQodG9rZW4sIEtleXdvcmQuV0hJTEUpOwogICAgfQogICAgdG9rZW4gPSBlbnN1cmVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKHdoaWxlVG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kRG9XaGlsZVN0YXRlbWVudChkb1Rva2VuLCB3aGlsZVRva2VuLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGJsb2NrOgogIC8vLyAgICd7JyBzdGF0ZW1lbnQqICd9JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQmxvY2soVG9rZW4gdG9rZW4sIFN0cmluZyBibG9ja0tpbmQpIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4gPSBlbnN1cmVCbG9jayh0b2tlbiwgbnVsbCwgYmxvY2tLaW5kKTsKICAgIGxpc3RlbmVyLmJlZ2luQmxvY2soYmVnaW4pOwogICAgaW50IHN0YXRlbWVudENvdW50ID0gMDsKICAgIFRva2VuIHN0YXJ0VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgd2hpbGUgKG5vdEVvZk9yVmFsdWUoJ30nLCBzdGFydFRva2VuKSkgewogICAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KHRva2VuKTsKICAgICAgaWYgKGlkZW50aWNhbCh0b2tlbi5uZXh0LCBzdGFydFRva2VuKSkgewogICAgICAgIC8vIE5vIHByb2dyZXNzIHdhcyBtYWRlLCBzbyB3ZSByZXBvcnQgdGhlIGN1cnJlbnQgdG9rZW4gYXMgYmVpbmcgaW52YWxpZAogICAgICAgIC8vIGFuZCBtb3ZlIGZvcndhcmQuCiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKHRva2VuKSk7CiAgICAgIH0KICAgICAgKytzdGF0ZW1lbnRDb3VudDsKICAgICAgc3RhcnRUb2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ30nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuZW5kQmxvY2soc3RhdGVtZW50Q291bnQsIGJlZ2luLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUludmFsaWRCbG9jayhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd7JywgYmVnaW4pKTsKICAgIC8vIFBhcnNlIGFuZCByZXBvcnQgdGhlIGludmFsaWQgYmxvY2ssIGJ1dCBzdXBwcmVzcyBlcnJvcnMKICAgIC8vIGJlY2F1c2UgYW4gZXJyb3IgaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZCBieSB0aGUgY2FsbGVyLgogICAgTGlzdGVuZXIgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgbGlzdGVuZXIgPSBuZXcgRm9yd2FyZGluZ0xpc3RlbmVyKGxpc3RlbmVyKS4uZm9yd2FyZEVycm9ycyA9IGZhbHNlOwogICAgLy8gVGhlIHNjYW5uZXIgZW5zdXJlcyB0aGF0IGB7YCBhbHdheXMgaGFzIGEgY2xvc2luZyBgfWAuCiAgICB0b2tlbiA9IHBhcnNlQmxvY2sodG9rZW4sIG51bGwpOwogICAgbGlzdGVuZXIgPSBvcmlnaW5hbExpc3RlbmVyOwogICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFRvcExldmVsQmxvY2soYmVnaW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIERldGVybWluZSBpZiB0aGUgZm9sbG93aW5nIHRva2VucyBsb29rIGxpa2UgYW4gJ2F3YWl0JyBleHByZXNzaW9uCiAgLy8vIGFuZCBub3QgYSBsb2NhbCB2YXJpYWJsZSBvciBsb2NhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KICBib29sIGxvb2tzTGlrZUF3YWl0RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdhd2FpdCcsIHRva2VuKSk7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CgogICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIHBhcnNpbmcgdGhlIHBvdGVudGlhbCBleHByZXNzaW9uIGZvbGxvd2luZwogICAgLy8gdGhlIGBhd2FpdGAgdG9rZW4gb25jZSBkb2luZyBzbyBkb2VzIG5vdCBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbS4KICAgIC8vIEZvciBub3csIHVzZSBzaW1wbGUgbG9vayBhaGVhZCBhbmQgZW5zdXJlIG5vIGZhbHNlIHBvc2l0aXZlcy4KCiAgICBpZiAodG9rZW4uaXNJZGVudGlmaWVyKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcoJywgdG9rZW4pKSB7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5lbmRHcm91cC5uZXh0OwogICAgICAgIGlmIChpc09uZU9mKHRva2VuLCBbJzsnLCAnLicsICcuLicsICc/JywgJz8uJ10pKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNPbmVPZih0b2tlbiwgWycuJywgJyknLCAnXSddKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gYGBgCiAgLy8vIGF3YWl0RXhwcmVzc2lvbjoKICAvLy8gICAnYXdhaXQnIHVuYXJ5RXhwcmVzc2lvbgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQXdhaXRFeHByZXNzaW9uKFRva2VuIHRva2VuLCBib29sIGFsbG93Q2FzY2FkZXMpIHsKICAgIFRva2VuIGF3YWl0VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdhd2FpdCcsIGF3YWl0VG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luQXdhaXRFeHByZXNzaW9uKGF3YWl0VG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZVByZWNlZGVuY2VFeHByZXNzaW9uKAogICAgICAgIGF3YWl0VG9rZW4sIFBPU1RGSVhfUFJFQ0VERU5DRSwgYWxsb3dDYXNjYWRlcyk7CiAgICBpZiAoaW5Bc3luYykgewogICAgICBsaXN0ZW5lci5lbmRBd2FpdEV4cHJlc3Npb24oYXdhaXRUb2tlbiwgdG9rZW4ubmV4dCk7CiAgICB9IGVsc2UgewogICAgICBmYXN0YS5NZXNzYWdlQ29kZSBlcnJvckNvZGUgPSBmYXN0YS5tZXNzYWdlQXdhaXROb3RBc3luYzsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihhd2FpdFRva2VuLCBlcnJvckNvZGUpOwogICAgICBsaXN0ZW5lci5lbmRJbnZhbGlkQXdhaXRFeHByZXNzaW9uKGF3YWl0VG9rZW4sIHRva2VuLm5leHQsIGVycm9yQ29kZSk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHRocm93RXhwcmVzc2lvbjoKICAvLy8gICAndGhyb3cnIGV4cHJlc3Npb24KICAvLy8gOwogIC8vLwogIC8vLyB0aHJvd0V4cHJlc3Npb25XaXRob3V0Q2FzY2FkZToKICAvLy8gICAndGhyb3cnIGV4cHJlc3Npb25XaXRob3V0Q2FzY2FkZQogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlVGhyb3dFeHByZXNzaW9uKFRva2VuIHRva2VuLCBib29sIGFsbG93Q2FzY2FkZXMpIHsKICAgIFRva2VuIHRocm93VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd0aHJvdycsIHRocm93VG9rZW4pKTsKICAgIGlmIChvcHRpb25hbCgnOycsIHRocm93VG9rZW4ubmV4dCkpIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGludGVyY2VwdCB0aGUgcGFyc2VFeHByZXNzaW9uCiAgICAgIC8vIHJlY292ZXJ5IHRvIGdlbmVyYXRlIHRoaXMgZXJyb3IgbWVzc2FnZSByYXRoZXIgdGhhbiBleHBsaWNpdGx5CiAgICAgIC8vIGNoZWNraW5nIHRoZSBuZXh0IHRva2VuIGFzIHdlIGFyZSBkb2luZyBoZXJlLgogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgdGhyb3dUb2tlbi5uZXh0LCBmYXN0YS5tZXNzYWdlTWlzc2luZ0V4cHJlc3Npb25JblRocm93KTsKICAgICAgcmV3cml0ZXIuaW5zZXJ0VG9rZW4oCiAgICAgICAgICB0aHJvd1Rva2VuLAogICAgICAgICAgbmV3IFN5bnRoZXRpY1N0cmluZ1Rva2VuKAogICAgICAgICAgICAgIFRva2VuVHlwZS5TVFJJTkcsICciIicsIHRocm93VG9rZW4ubmV4dC5jaGFyT2Zmc2V0LCAwKSk7CiAgICB9CiAgICB0b2tlbiA9IGFsbG93Q2FzY2FkZXMKICAgICAgICA/IHBhcnNlRXhwcmVzc2lvbih0aHJvd1Rva2VuKQogICAgICAgIDogcGFyc2VFeHByZXNzaW9uV2l0aG91dENhc2NhZGUodGhyb3dUb2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVUaHJvd0V4cHJlc3Npb24odGhyb3dUb2tlbiwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHJldGhyb3dTdGF0ZW1lbnQ6CiAgLy8vICAgJ3JldGhyb3cnICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlUmV0aHJvd1N0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gdGhyb3dUb2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3JldGhyb3cnLCB0aHJvd1Rva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpblJldGhyb3dTdGF0ZW1lbnQodGhyb3dUb2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0aHJvd1Rva2VuKTsKICAgIGxpc3RlbmVyLmVuZFJldGhyb3dTdGF0ZW1lbnQodGhyb3dUb2tlbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0cnlTdGF0ZW1lbnQ6CiAgLy8vICAgJ3RyeScgYmxvY2sgKG9uUGFydCsgZmluYWxseVBhcnQ/IHwgZmluYWxseVBhcnQpCiAgLy8vIDsKICAvLy8KICAvLy8gb25QYXJ0OgogIC8vLyAgIGNhdGNoUGFydCBibG9jayB8CiAgLy8vICAgJ29uJyB0eXBlIGNhdGNoUGFydD8gYmxvY2sKICAvLy8gOwogIC8vLwogIC8vLyBjYXRjaFBhcnQ6CiAgLy8vICAgJ2NhdGNoJyAnKCcgaWRlbnRpZmllciAoJywnIGlkZW50aWZpZXIpPyAnKScKICAvLy8gOwogIC8vLwogIC8vLyBmaW5hbGx5UGFydDoKICAvLy8gICAnZmluYWxseScgYmxvY2sKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVRyeVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gdHJ5S2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3RyeScsIHRyeUtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luVHJ5U3RhdGVtZW50KHRyeUtleXdvcmQpOwogICAgVG9rZW4gbGFzdENvbnN1bWVkID0gcGFyc2VCbG9jayh0cnlLZXl3b3JkLCAndHJ5IHN0YXRlbWVudCcpOwogICAgdG9rZW4gPSBsYXN0Q29uc3VtZWQubmV4dDsKICAgIGludCBjYXRjaENvdW50ID0gMDsKCiAgICBTdHJpbmcgdmFsdWUgPSB0b2tlbi5zdHJpbmdWYWx1ZTsKICAgIHdoaWxlIChpZGVudGljYWwodmFsdWUsICdjYXRjaCcpIHx8IGlkZW50aWNhbCh2YWx1ZSwgJ29uJykpIHsKICAgICAgbGlzdGVuZXIuYmVnaW5DYXRjaENsYXVzZSh0b2tlbik7CiAgICAgIFRva2VuIG9uS2V5d29yZCA9IG51bGw7CiAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdvbicpKSB7CiAgICAgICAgLy8gJ29uJyB0eXBlIGNhdGNoUGFydD8KICAgICAgICBvbktleXdvcmQgPSB0b2tlbjsKICAgICAgICBsYXN0Q29uc3VtZWQgPSBjb21wdXRlVHlwZSh0b2tlbiwgdHJ1ZSkuZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4sIHRoaXMpOwogICAgICAgIHRva2VuID0gbGFzdENvbnN1bWVkLm5leHQ7CiAgICAgICAgdmFsdWUgPSB0b2tlbi5zdHJpbmdWYWx1ZTsKICAgICAgfQogICAgICBUb2tlbiBjYXRjaEtleXdvcmQgPSBudWxsOwogICAgICBUb2tlbiBjb21tYSA9IG51bGw7CiAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdjYXRjaCcpKSB7CiAgICAgICAgY2F0Y2hLZXl3b3JkID0gdG9rZW47CgogICAgICAgIFRva2VuIG9wZW5QYXJlbnMgPSBjYXRjaEtleXdvcmQubmV4dDsKICAgICAgICBpZiAoIW9wdGlvbmFsKCIoIiwgb3BlblBhcmVucykpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3Iob3BlblBhcmVucywgZmFzdGEubWVzc2FnZUNhdGNoU3ludGF4KTsKICAgICAgICAgIG9wZW5QYXJlbnMgPSByZXdyaXRlci5pbnNlcnRQYXJlbnMoY2F0Y2hLZXl3b3JkLCB0cnVlKTsKICAgICAgICB9CgogICAgICAgIFRva2VuIGV4Y2VwdGlvbk5hbWUgPSBvcGVuUGFyZW5zLm5leHQ7CiAgICAgICAgaWYgKGV4Y2VwdGlvbk5hbWUua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKSB7CiAgICAgICAgICBleGNlcHRpb25OYW1lID0gSWRlbnRpZmllckNvbnRleHQuY2F0Y2hQYXJhbWV0ZXIKICAgICAgICAgICAgICAuZW5zdXJlSWRlbnRpZmllcihvcGVuUGFyZW5zLCB0aGlzKTsKICAgICAgICB9CgogICAgICAgIGlmIChvcHRpb25hbCgiKSIsIGV4Y2VwdGlvbk5hbWUubmV4dCkpIHsKICAgICAgICAgIC8vIE9LOiBgY2F0Y2ggKGlkZW50aWZpZXIpYC4KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tbWEgPSBleGNlcHRpb25OYW1lLm5leHQ7CiAgICAgICAgICBpZiAoIW9wdGlvbmFsKCIsIiwgY29tbWEpKSB7CiAgICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICAgIGlmICghZXhjZXB0aW9uTmFtZS5pc1N5bnRoZXRpYykgewogICAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoY29tbWEsIGZhc3RhLm1lc3NhZ2VDYXRjaFN5bnRheCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBpbnNlcnRpbmcgYG9uYCBjbGF1c2UgaWYKICAgICAgICAgICAgLy8gZXhjZXB0aW9uTmFtZSBpcyBwcmVjZWRlZCBieSB0eXBlIGFuZCBmb2xsb3dlZCBieSBhIGNvbW1hLgogICAgICAgICAgICAvLyBUaGVuIHRoaXMKICAgICAgICAgICAgLy8gICB9IGNhdGNoIChFIGUsIHQpIHsKICAgICAgICAgICAgLy8gd2lsbCByZWNvdmVyIHRvCiAgICAgICAgICAgIC8vICAgfSBvbiBFIGNhdGNoIChlLCB0KSB7CiAgICAgICAgICAgIC8vIHdpdGggYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBmb3IgdGhlIHVzZXIgaW4gdGhlIGVycm9yCiAgICAgICAgICAgIC8vIGluZGljYXRpbmcgd2hhdCB0aGV5IHNob3VsZCBkbyB0byBmaXggdGhlIGNvZGUuCgogICAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgaW5zZXJ0aW5nIHN5bnRoZXRpYyBpZGVudGlmaWVyIGlmCiAgICAgICAgICAgIC8vIGV4Y2VwdGlvbk5hbWUgaXMgYSBub24tc3ludGhldGljIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgYC5gLgogICAgICAgICAgICAvLyBUaGVuIHRoaXMKICAgICAgICAgICAgLy8gICB9IGNhdGNoICgKICAgICAgICAgICAgLy8gICBlLmYoKTsKICAgICAgICAgICAgLy8gd2lsbCByZWNvdmVyIHRvCiAgICAgICAgICAgIC8vICAgfSBjYXRjaCAoX3NfKSB7fQogICAgICAgICAgICAvLyAgIGUuZigpOwogICAgICAgICAgICAvLyByYXRoZXIgdGhhbgogICAgICAgICAgICAvLyAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgICAgIC8vICAgX3NfLmYoKTsKCiAgICAgICAgICAgIGlmIChvcGVuUGFyZW5zLmVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgICAgLy8gVGhlIHNjYW5uZXIgZGlkIG5vdCBwbGFjZSB0aGUgc3ludGhldGljICcpJyBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgcmV3cml0ZXIubW92ZVN5bnRoZXRpYyhleGNlcHRpb25OYW1lLCBvcGVuUGFyZW5zLmVuZEdyb3VwKTsKICAgICAgICAgICAgICBjb21tYSA9IG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29tbWEgPQogICAgICAgICAgICAgICAgICByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbihleGNlcHRpb25OYW1lLCBUb2tlblR5cGUuQ09NTUEpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY29tbWEgIT0gbnVsbCkgewogICAgICAgICAgICBUb2tlbiB0cmFjZU5hbWUgPSBjb21tYS5uZXh0OwogICAgICAgICAgICBpZiAodHJhY2VOYW1lLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTikgewogICAgICAgICAgICAgIHRyYWNlTmFtZSA9IElkZW50aWZpZXJDb250ZXh0LmNhdGNoUGFyYW1ldGVyCiAgICAgICAgICAgICAgICAgIC5lbnN1cmVJZGVudGlmaWVyKGNvbW1hLCB0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIW9wdGlvbmFsKCIpIiwgdHJhY2VOYW1lLm5leHQpKSB7CiAgICAgICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgICAgICBpZiAoIXRyYWNlTmFtZS5pc1N5bnRoZXRpYykgewogICAgICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgICAgICB0cmFjZU5hbWUubmV4dCwgZmFzdGEubWVzc2FnZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKG9wZW5QYXJlbnMuZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgICAgICAgICAgIC8vIFRoZSBzY2FubmVyIGRpZCBub3QgcGxhY2UgdGhlIHN5bnRoZXRpYyAnKScgY29ycmVjdGx5LgogICAgICAgICAgICAgICAgcmV3cml0ZXIubW92ZVN5bnRoZXRpYyh0cmFjZU5hbWUsIG9wZW5QYXJlbnMuZW5kR3JvdXApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsYXN0Q29uc3VtZWQgPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoY2F0Y2hLZXl3b3JkLCBNZW1iZXJLaW5kLkNhdGNoKTsKICAgICAgICB0b2tlbiA9IGxhc3RDb25zdW1lZC5uZXh0OwogICAgICB9CiAgICAgIGxpc3RlbmVyLmVuZENhdGNoQ2xhdXNlKHRva2VuKTsKICAgICAgbGFzdENvbnN1bWVkID0gcGFyc2VCbG9jayhsYXN0Q29uc3VtZWQsICdjYXRjaCBjbGF1c2UnKTsKICAgICAgdG9rZW4gPSBsYXN0Q29uc3VtZWQubmV4dDsKICAgICAgKytjYXRjaENvdW50OwogICAgICBsaXN0ZW5lci5oYW5kbGVDYXRjaEJsb2NrKG9uS2V5d29yZCwgY2F0Y2hLZXl3b3JkLCBjb21tYSk7CiAgICAgIHZhbHVlID0gdG9rZW4uc3RyaW5nVmFsdWU7IC8vIHdoaWxlIGNvbmRpdGlvbgogICAgfQoKICAgIFRva2VuIGZpbmFsbHlLZXl3b3JkID0gbnVsbDsKICAgIGlmIChvcHRpb25hbCgnZmluYWxseScsIHRva2VuKSkgewogICAgICBmaW5hbGx5S2V5d29yZCA9IHRva2VuOwogICAgICBsYXN0Q29uc3VtZWQgPSBwYXJzZUJsb2NrKHRva2VuLCAnZmluYWxseSBjbGF1c2UnKTsKICAgICAgdG9rZW4gPSBsYXN0Q29uc3VtZWQubmV4dDsKICAgICAgbGlzdGVuZXIuaGFuZGxlRmluYWxseUJsb2NrKGZpbmFsbHlLZXl3b3JkKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjYXRjaENvdW50ID09IDApIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRyeUtleXdvcmQsIGZhc3RhLm1lc3NhZ2VPbmx5VHJ5KTsKICAgICAgfQogICAgfQogICAgbGlzdGVuZXIuZW5kVHJ5U3RhdGVtZW50KGNhdGNoQ291bnQsIHRyeUtleXdvcmQsIGZpbmFsbHlLZXl3b3JkKTsKICAgIHJldHVybiBsYXN0Q29uc3VtZWQ7CiAgfQoKICAvLy8gYGBgCiAgLy8vIHN3aXRjaFN0YXRlbWVudDoKICAvLy8gICAnc3dpdGNoJyBwYXJlbnRoZXNpemVkRXhwcmVzc2lvbiBzd2l0Y2hCbG9jawogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlU3dpdGNoU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBzd2l0Y2hLZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnc3dpdGNoJywgc3dpdGNoS2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5Td2l0Y2hTdGF0ZW1lbnQoc3dpdGNoS2V5d29yZCk7CiAgICB0b2tlbiA9IGVuc3VyZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oc3dpdGNoS2V5d29yZCk7CiAgICBMb29wU3RhdGUgc2F2ZWRMb29wU3RhdGUgPSBsb29wU3RhdGU7CiAgICBpZiAobG9vcFN0YXRlID09IExvb3BTdGF0ZS5PdXRzaWRlTG9vcCkgewogICAgICBsb29wU3RhdGUgPSBMb29wU3RhdGUuSW5zaWRlU3dpdGNoOwogICAgfQogICAgdG9rZW4gPSBwYXJzZVN3aXRjaEJsb2NrKHRva2VuKTsKICAgIGxvb3BTdGF0ZSA9IHNhdmVkTG9vcFN0YXRlOwogICAgbGlzdGVuZXIuZW5kU3dpdGNoU3RhdGVtZW50KHN3aXRjaEtleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gc3dpdGNoQmxvY2s6CiAgLy8vICAgJ3snIHN3aXRjaENhc2UqIGRlZmF1bHRDYXNlPyAnfScKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVN3aXRjaEJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBiZWdpblN3aXRjaCA9IHRva2VuID0gZW5zdXJlQmxvY2sodG9rZW4sIG51bGwsICdzd2l0Y2ggc3RhdGVtZW50Jyk7CiAgICBsaXN0ZW5lci5iZWdpblN3aXRjaEJsb2NrKGJlZ2luU3dpdGNoKTsKICAgIGludCBjYXNlQ291bnQgPSAwOwogICAgVG9rZW4gZGVmYXVsdEtleXdvcmQgPSBudWxsOwogICAgVG9rZW4gY29sb25BZnRlckRlZmF1bHQgPSBudWxsOwogICAgd2hpbGUgKG5vdEVvZk9yVmFsdWUoJ30nLCB0b2tlbi5uZXh0KSkgewogICAgICBUb2tlbiBiZWdpbkNhc2UgPSB0b2tlbi5uZXh0OwogICAgICBpbnQgZXhwcmVzc2lvbkNvdW50ID0gMDsKICAgICAgaW50IGxhYmVsQ291bnQgPSAwOwogICAgICBUb2tlbiBwZWVrID0gcGVla1Bhc3RMYWJlbHMoYmVnaW5DYXNlKTsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAvLyBMb29wIHVudGlsIHdlIGZpbmQgc29tZXRoaW5nIHRoYXQgY2FuJ3QgYmUgcGFydCBvZiBhIHN3aXRjaCBjYXNlLgogICAgICAgIFN0cmluZyB2YWx1ZSA9IHBlZWsuc3RyaW5nVmFsdWU7CiAgICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2RlZmF1bHQnKSkgewogICAgICAgICAgd2hpbGUgKCFpZGVudGljYWwodG9rZW4ubmV4dCwgcGVlaykpIHsKICAgICAgICAgICAgdG9rZW4gPSBwYXJzZUxhYmVsKHRva2VuKTsKICAgICAgICAgICAgbGFiZWxDb3VudCsrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGRlZmF1bHRLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIHRva2VuLm5leHQsIGZhc3RhLm1lc3NhZ2VTd2l0Y2hIYXNNdWx0aXBsZURlZmF1bHRzKTsKICAgICAgICAgIH0KICAgICAgICAgIGRlZmF1bHRLZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgICAgICAgIGNvbG9uQWZ0ZXJEZWZhdWx0ID0gdG9rZW4gPSBlbnN1cmVDb2xvbihkZWZhdWx0S2V5d29yZCk7CiAgICAgICAgICBwZWVrID0gdG9rZW4ubmV4dDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnY2FzZScpKSB7CiAgICAgICAgICB3aGlsZSAoIWlkZW50aWNhbCh0b2tlbi5uZXh0LCBwZWVrKSkgewogICAgICAgICAgICB0b2tlbiA9IHBhcnNlTGFiZWwodG9rZW4pOwogICAgICAgICAgICBsYWJlbENvdW50Kys7CiAgICAgICAgICB9CiAgICAgICAgICBUb2tlbiBjYXNlS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICAgICAgICBpZiAoZGVmYXVsdEtleXdvcmQgIT0gbnVsbCkgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgY2FzZUtleXdvcmQsIGZhc3RhLm1lc3NhZ2VTd2l0Y2hIYXNDYXNlQWZ0ZXJEZWZhdWx0KTsKICAgICAgICAgIH0KICAgICAgICAgIGxpc3RlbmVyLmJlZ2luQ2FzZUV4cHJlc3Npb24oY2FzZUtleXdvcmQpOwogICAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24oY2FzZUtleXdvcmQpOwogICAgICAgICAgdG9rZW4gPSBlbnN1cmVDb2xvbih0b2tlbik7CiAgICAgICAgICBsaXN0ZW5lci5lbmRDYXNlRXhwcmVzc2lvbih0b2tlbik7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVDYXNlTWF0Y2goY2FzZUtleXdvcmQsIHRva2VuKTsKICAgICAgICAgIGV4cHJlc3Npb25Db3VudCsrOwogICAgICAgICAgcGVlayA9IHBlZWtQYXN0TGFiZWxzKHRva2VuLm5leHQpOwogICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbkNvdW50ID4gMCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIHBlZWssIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKCJjYXNlIikpOwogICAgICAgICAgVG9rZW4gZW5kR3JvdXAgPSBiZWdpblN3aXRjaC5lbmRHcm91cDsKICAgICAgICAgIHdoaWxlICh0b2tlbi5uZXh0ICE9IGVuZEdyb3VwKSB7CiAgICAgICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0KICAgICAgICAgIHBlZWsgPSBwZWVrUGFzdExhYmVscyh0b2tlbi5uZXh0KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50c0luU3dpdGNoQ2FzZSh0b2tlbiwgcGVlaywgYmVnaW5DYXNlLCBsYWJlbENvdW50LAogICAgICAgICAgZXhwcmVzc2lvbkNvdW50LCBkZWZhdWx0S2V5d29yZCwgY29sb25BZnRlckRlZmF1bHQpOwogICAgICArK2Nhc2VDb3VudDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmVuZFN3aXRjaEJsb2NrKGNhc2VDb3VudCwgYmVnaW5Td2l0Y2gsIHRva2VuKTsKICAgIGFzc2VydChvcHRpb25hbCgnfScsIHRva2VuKSk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGVlayBhZnRlciB0aGUgZm9sbG93aW5nIGxhYmVscyAoaWYgYW55KS4gVGhlIGZvbGxvd2luZyB0b2tlbgogIC8vLyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgbGFiZWxzIGJlbG9uZyB0byBhIHN0YXRlbWVudCBvciBhCiAgLy8vIHN3aXRjaCBjYXNlLgogIFRva2VuIHBlZWtQYXN0TGFiZWxzKFRva2VuIHRva2VuKSB7CiAgICB3aGlsZSAodG9rZW4uaXNJZGVudGlmaWVyICYmIG9wdGlvbmFsKCc6JywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2Ugc3RhdGVtZW50cyBhZnRlciBhIHN3aXRjaCBgY2FzZTpgIG9yIGBkZWZhdWx0OmAuCiAgVG9rZW4gcGFyc2VTdGF0ZW1lbnRzSW5Td2l0Y2hDYXNlKAogICAgICBUb2tlbiB0b2tlbiwKICAgICAgVG9rZW4gcGVlaywKICAgICAgVG9rZW4gYmVnaW4sCiAgICAgIGludCBsYWJlbENvdW50LAogICAgICBpbnQgZXhwcmVzc2lvbkNvdW50LAogICAgICBUb2tlbiBkZWZhdWx0S2V5d29yZCwKICAgICAgVG9rZW4gY29sb25BZnRlckRlZmF1bHQpIHsKICAgIGxpc3RlbmVyLmJlZ2luU3dpdGNoQ2FzZShsYWJlbENvdW50LCBleHByZXNzaW9uQ291bnQsIGJlZ2luKTsKICAgIC8vIEZpbmFsbHkgemVybyBvciBtb3JlIHN0YXRlbWVudHMuCiAgICBpbnQgc3RhdGVtZW50Q291bnQgPSAwOwogICAgd2hpbGUgKCFpZGVudGljYWwodG9rZW4ubmV4dC5raW5kLCBFT0ZfVE9LRU4pKSB7CiAgICAgIFN0cmluZyB2YWx1ZSA9IHBlZWsuc3RyaW5nVmFsdWU7CiAgICAgIGlmICgoaWRlbnRpY2FsKHZhbHVlLCAnY2FzZScpKSB8fAogICAgICAgICAgKGlkZW50aWNhbCh2YWx1ZSwgJ2RlZmF1bHQnKSkgfHwKICAgICAgICAgICgoaWRlbnRpY2FsKHZhbHVlLCAnfScpKSAmJiAoaWRlbnRpY2FsKHRva2VuLm5leHQsIHBlZWspKSkpIHsKICAgICAgICAvLyBBIGxhYmVsIGp1c3QgYmVmb3JlICJ9IiB3aWxsIGJlIGhhbmRsZWQgYXMgYSBzdGF0ZW1lbnQgZXJyb3IuCiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgVG9rZW4gc3RhcnRUb2tlbiA9IHRva2VuLm5leHQ7CiAgICAgICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCBzdGFydFRva2VuKSkgewogICAgICAgICAgLy8gTm8gcHJvZ3Jlc3Mgd2FzIG1hZGUsIHNvIHdlIHJlcG9ydCB0aGUgY3VycmVudCB0b2tlbiBhcyBiZWluZwogICAgICAgICAgLy8gaW52YWxpZCBhbmQgbW92ZSBmb3J3YXJkLgogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKG5leHQpKTsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICB9CiAgICAgICAgKytzdGF0ZW1lbnRDb3VudDsKICAgICAgfQogICAgICBwZWVrID0gcGVla1Bhc3RMYWJlbHModG9rZW4ubmV4dCk7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRTd2l0Y2hDYXNlKGxhYmVsQ291bnQsIGV4cHJlc3Npb25Db3VudCwgZGVmYXVsdEtleXdvcmQsCiAgICAgICAgY29sb25BZnRlckRlZmF1bHQsIHN0YXRlbWVudENvdW50LCBiZWdpbiwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGJyZWFrU3RhdGVtZW50OgogIC8vLyAgICdicmVhaycgaWRlbnRpZmllcj8gJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VCcmVha1N0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYnJlYWtLZXl3b3JkID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdicmVhaycsIGJyZWFrS2V5d29yZCkpOwogICAgYm9vbCBoYXNUYXJnZXQgPSBmYWxzZTsKICAgIGlmICh0b2tlbi5uZXh0LmlzSWRlbnRpZmllcikgewogICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmxhYmVsUmVmZXJlbmNlKTsKICAgICAgaGFzVGFyZ2V0ID0gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoIWlzQnJlYWtBbGxvd2VkKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoYnJlYWtLZXl3b3JkLCBmYXN0YS5tZXNzYWdlQnJlYWtPdXRzaWRlT2ZMb29wKTsKICAgIH0KICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmhhbmRsZUJyZWFrU3RhdGVtZW50KGhhc1RhcmdldCwgYnJlYWtLZXl3b3JkLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGFzc2VydGlvbjoKICAvLy8gICAnYXNzZXJ0JyAnKCcgZXhwcmVzc2lvbiAoJywnIGV4cHJlc3Npb24pPyAnLCc/ICcpJwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQXNzZXJ0KFRva2VuIHRva2VuLCBBc3NlcnQga2luZCkgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdhc3NlcnQnLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5Bc3NlcnQodG9rZW4sIGtpbmQpOwogICAgVG9rZW4gYXNzZXJ0S2V5d29yZCA9IHRva2VuOwogICAgVG9rZW4gbGVmdFBhcmVudGhlc2lzID0gdG9rZW4ubmV4dDsKICAgIGlmICghb3B0aW9uYWwoJygnLCBsZWZ0UGFyZW50aGVzaXMpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBsZWZ0UGFyZW50aGVzaXMsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnKCcpKTsKICAgICAgbGVmdFBhcmVudGhlc2lzID0gcmV3cml0ZXIuaW5zZXJ0UGFyZW5zKHRva2VuLCB0cnVlKTsKICAgIH0KICAgIHRva2VuID0gbGVmdFBhcmVudGhlc2lzOwogICAgVG9rZW4gY29tbWFUb2tlbiA9IG51bGw7CiAgICBib29sIG9sZCA9IG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9uczsKICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IHRydWU7CgogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgaWYgKG9wdGlvbmFsKCcsJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBpZiAoIW9wdGlvbmFsKCcpJywgdG9rZW4ubmV4dCkpIHsKICAgICAgICBjb21tYVRva2VuID0gdG9rZW47CiAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgIGlmIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKSB7CiAgICAgICAgICAvLyBUcmFpbGluZyBjb21tYSBpcyBpZ25vcmVkLgogICAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIFRva2VuIGVuZEdyb3VwID0gbGVmdFBhcmVudGhlc2lzLmVuZEdyb3VwOwogICAgaWYgKHRva2VuLm5leHQgPT0gZW5kR3JvdXApIHsKICAgICAgdG9rZW4gPSBlbmRHcm91cDsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIGlmIChlbmRHcm91cC5pc1N5bnRoZXRpYykgewogICAgICAgIC8vIFRoZSBzY2FubmVyIGRpZCBub3QgcGxhY2UgdGhlIHN5bnRoZXRpYyAnKScgY29ycmVjdGx5LCBzbyBtb3ZlIGl0LgogICAgICAgIHRva2VuID0gcmV3cml0ZXIubW92ZVN5bnRoZXRpYyh0b2tlbiwgZW5kR3JvdXApOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIHRva2VuLm5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgICB0b2tlbiA9IGVuZEdyb3VwOwogICAgICB9CiAgICB9CgogICAgYXNzZXJ0KG9wdGlvbmFsKCcpJywgdG9rZW4pKTsKICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgIGlmIChraW5kID09IEFzc2VydC5FeHByZXNzaW9uKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoYXNzZXJ0S2V5d29yZCwgZmFzdGEubWVzc2FnZUFzc2VydEFzRXhwcmVzc2lvbik7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gQXNzZXJ0LlN0YXRlbWVudCkgewogICAgICBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgfQogICAgbGlzdGVuZXIuZW5kQXNzZXJ0KAogICAgICAgIGFzc2VydEtleXdvcmQsIGtpbmQsIGxlZnRQYXJlbnRoZXNpcywgY29tbWFUb2tlbiwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGFzc2VydFN0YXRlbWVudDoKICAvLy8gICBhc3NlcnRpb24gJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VBc3NlcnRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChvcHRpb25hbCgnYXNzZXJ0JywgdG9rZW4ubmV4dCkpOwogICAgLy8gcGFyc2VBc3NlcnQgZW5zdXJlcyB0aGF0IHRoZXJlIGlzIGEgdHJhaWxpbmcgc2VtaWNvbG9uLgogICAgcmV0dXJuIHBhcnNlQXNzZXJ0KHRva2VuLCBBc3NlcnQuU3RhdGVtZW50KS5uZXh0OwogIH0KCiAgLy8vIGBgYAogIC8vLyBjb250aW51ZVN0YXRlbWVudDoKICAvLy8gICAnY29udGludWUnIGlkZW50aWZpZXI/ICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ29udGludWVTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGNvbnRpbnVlS2V5d29yZCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnY29udGludWUnLCBjb250aW51ZUtleXdvcmQpKTsKICAgIGJvb2wgaGFzVGFyZ2V0ID0gZmFsc2U7CiAgICBpZiAodG9rZW4ubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5sYWJlbFJlZmVyZW5jZSk7CiAgICAgIGhhc1RhcmdldCA9IHRydWU7CiAgICAgIGlmICghaXNDb250aW51ZVdpdGhMYWJlbEFsbG93ZWQpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBjb250aW51ZUtleXdvcmQsIGZhc3RhLm1lc3NhZ2VDb250aW51ZU91dHNpZGVPZkxvb3ApOwogICAgICB9CiAgICB9IGVsc2UgaWYgKCFpc0NvbnRpbnVlQWxsb3dlZCkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgY29udGludWVLZXl3b3JkLAogICAgICAgICAgbG9vcFN0YXRlID09IExvb3BTdGF0ZS5JbnNpZGVTd2l0Y2gKICAgICAgICAgICAgICA/IGZhc3RhLm1lc3NhZ2VDb250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZQogICAgICAgICAgICAgIDogZmFzdGEubWVzc2FnZUNvbnRpbnVlT3V0c2lkZU9mTG9vcCk7CiAgICB9CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVDb250aW51ZVN0YXRlbWVudChoYXNUYXJnZXQsIGNvbnRpbnVlS2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBlbXB0eVN0YXRlbWVudDoKICAvLy8gICAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUVtcHR5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJzsnLCB0b2tlbikpOwogICAgbGlzdGVuZXIuaGFuZGxlRW1wdHlTdGF0ZW1lbnQodG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIEdpdmVuIGEgdG9rZW4gKFtiZWZvcmVUb2tlbl0pIHRoYXQgaXMga25vd24gdG8gYmUgYmVmb3JlIGFub3RoZXIgW3Rva2VuXSwKICAvLy8gcmV0dXJuIHRoZSB0b2tlbiB0aGF0IGlzIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgW3Rva2VuXS4KICBUb2tlbiBwcmV2aW91c1Rva2VuKFRva2VuIGJlZm9yZVRva2VuLCBUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IGJlZm9yZVRva2VuLm5leHQ7CiAgICB3aGlsZSAobmV4dCAhPSB0b2tlbiAmJiBuZXh0ICE9IGJlZm9yZVRva2VuKSB7CiAgICAgIGJlZm9yZVRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IGJlZm9yZVRva2VuLm5leHQ7CiAgICB9CiAgICByZXR1cm4gYmVmb3JlVG9rZW47CiAgfQoKICAvLy8gUmVjb3ZlciBmcm9tIGZpbmRpbmcgYW4gb3BlcmF0b3IgZGVjbGFyYXRpb24gbWlzc2luZyB0aGUgYG9wZXJhdG9yYAogIC8vLyBrZXl3b3JkLiBUaGUgbWV0YWRhdGEgZm9yIHRoZSBtZW1iZXIsIGlmIGFueSwgaGFzIGFscmVhZHkgYmVlbiBwYXJzZWQKICAvLy8gKGFuZCBldmVudHMgaGF2ZSBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkKS4KICBUb2tlbiBwYXJzZUludmFsaWRPcGVyYXRvckRlY2xhcmF0aW9uKAogICAgICBUb2tlbiBiZWZvcmVTdGFydCwKICAgICAgVG9rZW4gZXh0ZXJuYWxUb2tlbiwKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgVG9rZW4gYmVmb3JlVHlwZSkgewogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZShiZWZvcmVUeXBlLCB0cnVlLCB0cnVlKTsKCiAgICBUb2tlbiBiZWZvcmVOYW1lID0gdHlwZUluZm8uc2tpcFR5cGUoYmVmb3JlVHlwZSk7CiAgICBUb2tlbiBuZXh0ID0gYmVmb3JlTmFtZS5uZXh0OwoKICAgIGlmIChvcHRpb25hbCgnb3BlcmF0b3InLCBuZXh0KSkgewogICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgfSBlbHNlIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlTWlzc2luZ09wZXJhdG9yS2V5d29yZCk7CiAgICAgIHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0tleXdvcmQoYmVmb3JlTmFtZSwgS2V5d29yZC5PUEVSQVRPUik7CiAgICB9CgogICAgYXNzZXJ0KChuZXh0LmlzT3BlcmF0b3IgJiYgbmV4dC5lbmRHcm91cCA9PSBudWxsKSB8fAogICAgICAgIG9wdGlvbmFsKCc9PT0nLCBuZXh0KSB8fAogICAgICAgIG9wdGlvbmFsKCchPT0nLCBuZXh0KSk7CgogICAgVG9rZW4gdG9rZW4gPSBwYXJzZU1ldGhvZCgKICAgICAgICBiZWZvcmVTdGFydCwKICAgICAgICBleHRlcm5hbFRva2VuLAogICAgICAgIHN0YXRpY1Rva2VuLAogICAgICAgIGNvdmFyaWFudFRva2VuLAogICAgICAgIGxhdGVUb2tlbiwKICAgICAgICB2YXJGaW5hbE9yQ29uc3QsCiAgICAgICAgYmVmb3JlVHlwZSwKICAgICAgICB0eXBlSW5mbywKICAgICAgICBudWxsLAogICAgICAgIGJlZm9yZU5hbWUubmV4dCk7CiAgICBsaXN0ZW5lci5lbmRNZW1iZXIoKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBSZWNvdmVyIGZyb20gZmluZGluZyBhbiBpbnZhbGlkIGNsYXNzIG1lbWJlci4gVGhlIG1ldGFkYXRhIGZvciB0aGUgbWVtYmVyLAogIC8vLyBpZiBhbnksIGhhcyBhbHJlYWR5IGJlZW4gcGFyc2VkIChhbmQgZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZCkuCiAgLy8vIFRoZSBtZW1iZXIgd2FzIGV4cGVjdGVkIHRvIHN0YXJ0IHdpdGggdGhlIHRva2VuIGFmdGVyIFt0b2tlbl0uCiAgVG9rZW4gcmVjb3ZlckZyb21JbnZhbGlkQ2xhc3NNZW1iZXIoCiAgICAgIFRva2VuIHRva2VuLAogICAgICBUb2tlbiBiZWZvcmVTdGFydCwKICAgICAgVG9rZW4gZXh0ZXJuYWxUb2tlbiwKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgVG9rZW4gYmVmb3JlVHlwZSwKICAgICAgVHlwZUluZm8gdHlwZUluZm8sCiAgICAgIFRva2VuIGdldE9yU2V0KSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CgogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2NsYXNzJykpIHsKICAgICAgcmV0dXJuIHJlcG9ydEFuZFNraXBDbGFzc0luQ2xhc3MobmV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2VudW0nKSkgewogICAgICByZXR1cm4gcmVwb3J0QW5kU2tpcEVudW1JbkNsYXNzKG5leHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICd0eXBlZGVmJykpIHsKICAgICAgcmV0dXJuIHJlcG9ydEFuZFNraXBUeXBlZGVmSW5DbGFzcyhuZXh0KTsKICAgIH0gZWxzZSBpZiAobmV4dC5pc09wZXJhdG9yICYmIG5leHQuZW5kR3JvdXAgPT0gbnVsbCkgewogICAgICByZXR1cm4gcGFyc2VJbnZhbGlkT3BlcmF0b3JEZWNsYXJhdGlvbihiZWZvcmVTdGFydCwgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgIHN0YXRpY1Rva2VuLCBjb3ZhcmlhbnRUb2tlbiwgbGF0ZVRva2VuLCB2YXJGaW5hbE9yQ29uc3QsIGJlZm9yZVR5cGUpOwogICAgfQoKICAgIGlmIChnZXRPclNldCAhPSBudWxsIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnKCcpIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPT4nKSB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJ3snKSkgewogICAgICB0b2tlbiA9IHBhcnNlTWV0aG9kKAogICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICBleHRlcm5hbFRva2VuLAogICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgIGxhdGVUb2tlbiwKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICB0eXBlSW5mbywKICAgICAgICAgIGdldE9yU2V0LAogICAgICAgICAgdG9rZW4ubmV4dCk7CiAgICB9IGVsc2UgaWYgKHRva2VuID09IGJlZm9yZVN0YXJ0KSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBQcm92aWRlIGEgbW9yZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGZvciBleHRyYSAnOycuCiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4obmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZENsYXNzTWVtYmVyKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZE1lbWJlcihuZXh0KTsKICAgICAgaWYgKCFpZGVudGljYWwodmFsdWUsICd9JykpIHsKICAgICAgICAvLyBFbnN1cmUgd2UgbWFrZSBwcm9ncmVzcy4KICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gcGFyc2VGaWVsZHMoCiAgICAgICAgICBiZWZvcmVTdGFydCwKICAgICAgICAgIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICAgIGNvdmFyaWFudFRva2VuLAogICAgICAgICAgbGF0ZVRva2VuLAogICAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgICAgYmVmb3JlVHlwZSwKICAgICAgICAgIHR5cGVJbmZvLAogICAgICAgICAgdG9rZW4ubmV4dCwKICAgICAgICAgIGZhbHNlKTsKICAgIH0KCiAgICBsaXN0ZW5lci5lbmRNZW1iZXIoKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBSZXBvcnQgdGhhdCB0aGUgbmVzdGluZyBkZXB0aCBvZiB0aGUgY29kZSBiZWluZyBwYXJzZWQgaXMgdG9vIGxhcmdlIGZvcgogIC8vLyB0aGUgcGFyc2VyIHRvIHNhZmVseSBoYW5kbGUuIFJldHVybiB0aGUgbmV4dCBgfWAgb3IgRU9GLgogIFRva2VuIHJlY292ZXJGcm9tU3RhY2tPdmVyZmxvdyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VTdGFja092ZXJmbG93KTsKICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbih0b2tlbiwgVG9rZW5UeXBlLlNFTUlDT0xPTik7CiAgICBsaXN0ZW5lci5oYW5kbGVFbXB0eVN0YXRlbWVudChuZXh0KTsKCiAgICB3aGlsZSAobm90RW9mT3JWYWx1ZSgnfScsIG5leHQpKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICB2b2lkIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoVG9rZW4gdG9rZW4sIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgLy8gRmluZCBhIG5vbi1zeW50aGV0aWMgdG9rZW4gb24gd2hpY2ggdG8gcmVwb3J0IHRoZSBlcnJvci4KICAgIHRva2VuID0gZmluZE5vblplcm9MZW5ndGhUb2tlbih0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVSZWNvdmVyYWJsZUVycm9yKG1lc3NhZ2UsIHRva2VuLCB0b2tlbik7CiAgfQoKICB2b2lkIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgIFRva2VuIHRva2VuLCBUZW1wbGF0ZTxfTWVzc2FnZVdpdGhBcmd1bWVudDxUb2tlbj4+IHRlbXBsYXRlKSB7CiAgICAvLyBGaW5kIGEgbm9uLXN5bnRoZXRpYyB0b2tlbiBvbiB3aGljaCB0byByZXBvcnQgdGhlIGVycm9yLgogICAgdG9rZW4gPSBmaW5kTm9uWmVyb0xlbmd0aFRva2VuKHRva2VuKTsKICAgIGxpc3RlbmVyLmhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgdGVtcGxhdGUud2l0aEFyZ3VtZW50cyh0b2tlbiksIHRva2VuLCB0b2tlbik7CiAgfQoKICBUb2tlbiByZXBvcnRBbGxFcnJvclRva2VucyhUb2tlbiB0b2tlbikgewogICAgd2hpbGUgKHRva2VuIGlzIEVycm9yVG9rZW4pIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlRXJyb3JUb2tlbih0b2tlbik7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHNraXBFcnJvclRva2VucyhUb2tlbiB0b2tlbikgewogICAgd2hpbGUgKHRva2VuIGlzIEVycm9yVG9rZW4pIHsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgIG5leHQsCiAgICAgICAgb3B0aW9uYWwoJzsnLCBuZXh0KQogICAgICAgICAgICA/IGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuCiAgICAgICAgICAgIDogZmFzdGEudGVtcGxhdGVFeHBlY3RlZERlY2xhcmF0aW9uKTsKICAgIGlmIChvcHRpb25hbCgneycsIG5leHQpKSB7CiAgICAgIG5leHQgPSBwYXJzZUludmFsaWRCbG9jayh0b2tlbik7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihuZXh0KTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgVG9rZW4gcmVwb3J0QW5kU2tpcENsYXNzSW5DbGFzcyhUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdjbGFzcycsIHRva2VuKSk7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBmYXN0YS5tZXNzYWdlQ2xhc3NJbkNsYXNzKTsKICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRNZW1iZXIodG9rZW4pOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAvLyBJZiB0aGUgZGVjbGFyYXRpb24gYXBwZWFycyB0byBiZSBhIHZhbGlkIGNsYXNzIGRlY2xhcmF0aW9uCiAgICAvLyB0aGVuIHNraXAgdGhlIGVudGlyZSBkZWNsYXJhdGlvbiBzbyB0aGF0IHdlIG9ubHkgZ2VuZXJhdGUgdGhlIG9uZQogICAgLy8gZXJyb3IgKGFib3ZlKSByYXRoZXIgdGhhbiBhIHBsZXRob3JhIG9mIHVuaGVscGZ1bCBlcnJvcnMuCiAgICBpZiAobmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgLy8gc2tpcCBjbGFzcyBuYW1lCiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBjb25zaWRlciBwYXJzaW5nIChza2lwcGluZykgdGhlIGNsYXNzIGhlYWRlcgogICAgICAvLyB3aXRoIGEgcmVjb3ZlcnkgbGlzdGVuZXIgc28gdGhhdCBubyBldmVudHMgYXJlIGdlbmVyYXRlZAogICAgICBpZiAob3B0aW9uYWwoJ3snLCBuZXh0KSAmJiBuZXh0LmVuZEdyb3VwICE9IG51bGwpIHsKICAgICAgICAvLyBza2lwIGNsYXNzIGJvZHkKICAgICAgICB0b2tlbiA9IG5leHQuZW5kR3JvdXA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHJlcG9ydEFuZFNraXBFbnVtSW5DbGFzcyhUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdlbnVtJywgdG9rZW4pKTsKICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIGZhc3RhLm1lc3NhZ2VFbnVtSW5DbGFzcyk7CiAgICBsaXN0ZW5lci5oYW5kbGVJbnZhbGlkTWVtYmVyKHRva2VuKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgLy8gSWYgdGhlIGRlY2xhcmF0aW9uIGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBlbnVtIGRlY2xhcmF0aW9uCiAgICAvLyB0aGVuIHNraXAgdGhlIGVudGlyZSBkZWNsYXJhdGlvbiBzbyB0aGF0IHdlIG9ubHkgZ2VuZXJhdGUgdGhlIG9uZQogICAgLy8gZXJyb3IgKGFib3ZlKSByYXRoZXIgdGhhbiBhIHBsZXRob3JhIG9mIHVuaGVscGZ1bCBlcnJvcnMuCiAgICBpZiAobmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgLy8gc2tpcCBlbnVtIG5hbWUKICAgICAgdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCd7JywgbmV4dCkgJiYgbmV4dC5lbmRHcm91cCAhPSBudWxsKSB7CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIHJlcGxhY2luZyB0aGlzIGBza2lwIGVudW1gIGZ1bmN0aW9uYWxpdHkKICAgICAgICAvLyB3aXRoIHNvbWV0aGluZyB0aGF0IGNhbiBwYXJzZSBhbmQgcmVzb2x2ZSB0aGUgZGVjbGFyYXRpb24KICAgICAgICAvLyBldmVuIHRob3VnaCBpdCBpcyBpbiBhIGNsYXNzIGNvbnRleHQKICAgICAgICB0b2tlbiA9IG5leHQuZW5kR3JvdXA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHJlcG9ydEFuZFNraXBUeXBlZGVmSW5DbGFzcyhUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KG9wdGlvbmFsKCd0eXBlZGVmJywgdG9rZW4pKTsKICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIGZhc3RhLm1lc3NhZ2VUeXBlZGVmSW5DbGFzcyk7CiAgICBsaXN0ZW5lci5oYW5kbGVJbnZhbGlkTWVtYmVyKHRva2VuKTsKICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pOiBJZiB0aGUgZGVjbGFyYXRpb24gYXBwZWFycyB0byBiZSBhIHZhbGlkIHR5cGVkZWYKICAgIC8vIHRoZW4gc2tpcCB0aGUgZW50aXJlIGRlY2xhcmF0aW9uIHNvIHRoYXQgd2UgZ2VuZXJhdGUgYSBzaW5nbGUgZXJyb3IKICAgIC8vIChhYm92ZSkgcmF0aGVyIHRoYW4gbWFueSB1bmhlbHBmdWwgZXJyb3JzLgogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIENyZWF0ZSBhIHNob3J0IHRva2VuIGNoYWluIGZyb20gdGhlIFtiZWdpblRva2VuXSBhbmQgW2VuZFRva2VuXSBhbmQgcmV0dXJuCiAgLy8vIHRoZSBbYmVnaW5Ub2tlbl0uCiAgVG9rZW4gbGluayhCZWdpblRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBiZWdpblRva2VuLnNldE5leHQoZW5kVG9rZW4pOwogICAgYmVnaW5Ub2tlbi5lbmRHcm91cCA9IGVuZFRva2VuOwogICAgcmV0dXJuIGJlZ2luVG9rZW47CiAgfQoKICAvLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSB0b2tlbiB3aG9zZSBuZXh0IHRva2VuIGlzIHRoZSBnaXZlbiBbdG9rZW5dLgogIFRva2VuIHN5bnRoZXRpY1ByZXZpb3VzVG9rZW4oVG9rZW4gdG9rZW4pIHsKICAgIC8vIFJldHVybiB0aGUgcHJldmlvdXMgdG9rZW4gaWYgdGhlcmUgaXMgb25lIHNvIHRoYXQgYW55IHRva2VuIGluc2VydGVkCiAgICAvLyBiZWZvcmUgYHRva2VuYCB3aWxsIGJlIHByb3Blcmx5IGluc2VydGVkIGludG8gdGhlIHRva2VuIHN0cmVhbS4KICAgIC8vIFRPRE8oZGFucnViZWwpOiByZW1vdmUgdGhpcyBvbmNlIGFsbCBtZXRob2RzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8KICAgIC8vIHVzZSBhbmQgcmV0dXJuIHRoZSBsYXN0IHRva2VuIGNvbnN1bWVkIGFuZCB0aGUgYHByZXZpb3VzYCBmaWVsZAogICAgLy8gaGFzIGJlZW4gcmVtb3ZlZC4KICAgIGlmICh0b2tlbi5wcmV2aW91cyAhPSBudWxsKSB7CiAgICAgIHJldHVybiB0b2tlbi5wcmV2aW91czsKICAgIH0KICAgIFRva2VuIGJlZm9yZSA9IG5ldyBUb2tlbi5lb2YoLTEpOwogICAgYmVmb3JlLm5leHQgPSB0b2tlbjsKICAgIHJldHVybiBiZWZvcmU7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBmaXJzdCBkYXJ0ZG9jIGNvbW1lbnQgdG9rZW4gcHJlY2VkaW5nIHRoZSBnaXZlbiB0b2tlbgogIC8vLyBvciBgbnVsbGAgaWYgbm8gZGFydGRvYyB0b2tlbiBpcyBmb3VuZC4KICBUb2tlbiBmaW5kRGFydERvYyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gY29tbWVudHMgPSB0b2tlbi5wcmVjZWRpbmdDb21tZW50czsKICAgIFRva2VuIGRhcnRkb2MgPSBudWxsOwogICAgYm9vbCBpc011bHRpbGluZSA9IGZhbHNlOwogICAgd2hpbGUgKGNvbW1lbnRzICE9IG51bGwpIHsKICAgICAgU3RyaW5nIGxleGVtZSA9IGNvbW1lbnRzLmxleGVtZTsKICAgICAgaWYgKGxleGVtZS5zdGFydHNXaXRoKCcvLy8nKSkgewogICAgICAgIGlmICghaXNNdWx0aWxpbmUpIHsKICAgICAgICAgIGRhcnRkb2MgPSBjb21tZW50czsKICAgICAgICAgIGlzTXVsdGlsaW5lID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobGV4ZW1lLnN0YXJ0c1dpdGgoJy8qKicpKSB7CiAgICAgICAgZGFydGRvYyA9IGNvbW1lbnRzOwogICAgICAgIGlzTXVsdGlsaW5lID0gZmFsc2U7CiAgICAgIH0KICAgICAgY29tbWVudHMgPSBjb21tZW50cy5uZXh0OwogICAgfQogICAgcmV0dXJuIGRhcnRkb2M7CiAgfQoKICAvLy8gUGFyc2UgdGhlIGNvbW1lbnQgcmVmZXJlbmNlcyBpbiBhIHNlcXVlbmNlIG9mIGNvbW1lbnQgdG9rZW5zCiAgLy8vIHdoZXJlIFtkYXJ0ZG9jXSAobm90IG51bGwpIGlzIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgc2VxdWVuY2UuCiAgLy8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGNvbW1lbnQgcmVmZXJlbmNlcyBwYXJzZWQuCiAgaW50IHBhcnNlQ29tbWVudFJlZmVyZW5jZXMoVG9rZW4gZGFydGRvYykgewogICAgcmV0dXJuIGRhcnRkb2MubGV4ZW1lLnN0YXJ0c1dpdGgoJy8vLycpCiAgICAgICAgPyBwYXJzZVJlZmVyZW5jZXNJblNpbmdsZUxpbmVDb21tZW50cyhkYXJ0ZG9jKQogICAgICAgIDogcGFyc2VSZWZlcmVuY2VzSW5NdWx0aUxpbmVDb21tZW50KGRhcnRkb2MpOwogIH0KCiAgLy8vIFBhcnNlIHRoZSBjb21tZW50IHJlZmVyZW5jZXMgaW4gYSBtdWx0aS1saW5lIGNvbW1lbnQgdG9rZW4uCiAgLy8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGNvbW1lbnQgcmVmZXJlbmNlcyBwYXJzZWQuCiAgaW50IHBhcnNlUmVmZXJlbmNlc0luTXVsdGlMaW5lQ29tbWVudChUb2tlbiBtdWx0aUxpbmVEb2MpIHsKICAgIFN0cmluZyBjb21tZW50ID0gbXVsdGlMaW5lRG9jLmxleGVtZTsKICAgIGFzc2VydChjb21tZW50LnN0YXJ0c1dpdGgoJy8qKicpKTsKICAgIGludCBjb3VudCA9IDA7CiAgICBpbnQgbGVuZ3RoID0gY29tbWVudC5sZW5ndGg7CiAgICBpbnQgc3RhcnQgPSAzOwogICAgYm9vbCBpbkNvZGVCbG9jayA9IGZhbHNlOwogICAgaW50IGNvZGVCbG9jayA9IGNvbW1lbnQuaW5kZXhPZignYGBgJywgMyk7CiAgICBpZiAoY29kZUJsb2NrID09IC0xKSB7CiAgICAgIGNvZGVCbG9jayA9IGxlbmd0aDsKICAgIH0KICAgIHdoaWxlIChzdGFydCA8IGxlbmd0aCkgewogICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNvbW1lbnQuY29kZVVuaXRBdChzdGFydCkpKSB7CiAgICAgICAgKytzdGFydDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpbnQgZW5kID0gY29tbWVudC5pbmRleE9mKCdcbicsIHN0YXJ0KTsKICAgICAgaWYgKGVuZCA9PSAtMSkgewogICAgICAgIGVuZCA9IGxlbmd0aDsKICAgICAgfQogICAgICBpZiAoY29kZUJsb2NrIDwgZW5kKSB7CiAgICAgICAgaW5Db2RlQmxvY2sgPSAhaW5Db2RlQmxvY2s7CiAgICAgICAgY29kZUJsb2NrID0gY29tbWVudC5pbmRleE9mKCdgYGAnLCBlbmQpOwogICAgICAgIGlmIChjb2RlQmxvY2sgPT0gLTEpIHsKICAgICAgICAgIGNvZGVCbG9jayA9IGxlbmd0aDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFpbkNvZGVCbG9jayAmJiAhY29tbWVudC5zdGFydHNXaXRoKCcqICAgICAnLCBzdGFydCkpIHsKICAgICAgICBjb3VudCArPSBwYXJzZUNvbW1lbnRSZWZlcmVuY2VzSW5UZXh0KG11bHRpTGluZURvYywgc3RhcnQsIGVuZCk7CiAgICAgIH0KICAgICAgc3RhcnQgPSBlbmQgKyAxOwogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgLy8vIFBhcnNlIHRoZSBjb21tZW50IHJlZmVyZW5jZXMgaW4gYSBzZXF1ZW5jZSBvZiBzaW5nbGUgbGluZSBjb21tZW50IHRva2VucwogIC8vLyB3aGVyZSBbdG9rZW5dIGlzIHRoZSBmaXJzdCBjb21tZW50IHRva2VuIGluIHRoZSBzZXF1ZW5jZS4KICAvLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgY29tbWVudCByZWZlcmVuY2VzIHBhcnNlZC4KICBpbnQgcGFyc2VSZWZlcmVuY2VzSW5TaW5nbGVMaW5lQ29tbWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBib29sIGluQ29kZUJsb2NrID0gZmFsc2U7CiAgICB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiAhdG9rZW4uaXNFb2YpIHsKICAgICAgU3RyaW5nIGNvbW1lbnQgPSB0b2tlbi5sZXhlbWU7CiAgICAgIGlmIChjb21tZW50LnN0YXJ0c1dpdGgoJy8vLycpKSB7CiAgICAgICAgaWYgKGNvbW1lbnQuaW5kZXhPZignYGBgJywgMykgIT0gLTEpIHsKICAgICAgICAgIGluQ29kZUJsb2NrID0gIWluQ29kZUJsb2NrOwogICAgICAgIH0KICAgICAgICBpZiAoIWluQ29kZUJsb2NrICYmICFjb21tZW50LnN0YXJ0c1dpdGgoJy8vLyAgICAnKSkgewogICAgICAgICAgY291bnQgKz0gcGFyc2VDb21tZW50UmVmZXJlbmNlc0luVGV4dCh0b2tlbiwgMywgY29tbWVudC5sZW5ndGgpOwogICAgICAgIH0KICAgICAgfQogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICAvLy8gUGFyc2UgdGhlIGNvbW1lbnQgcmVmZXJlbmNlcyBpbiB0aGUgdGV4dCBiZXR3ZWVuIFtzdGFydF0gaW5jbHVzaXZlCiAgLy8vIGFuZCBbZW5kXSBleGNsdXNpdmUuIFJldHVybiBhIGNvdW50IGluZGljYXRpbmcgaG93IG1hbnkgd2VyZSBwYXJzZWQuCiAgaW50IHBhcnNlQ29tbWVudFJlZmVyZW5jZXNJblRleHQoVG9rZW4gY29tbWVudFRva2VuLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFN0cmluZyBjb21tZW50ID0gY29tbWVudFRva2VuLmxleGVtZTsKICAgIGludCBjb3VudCA9IDA7CiAgICBpbnQgaW5kZXggPSBzdGFydDsKICAgIHdoaWxlIChpbmRleCA8IGVuZCkgewogICAgICBpbnQgY2ggPSBjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpOwogICAgICBpZiAoY2ggPT0gMHg1QiAvKiBgW2AgKi8pIHsKICAgICAgICArK2luZGV4OwogICAgICAgIGlmIChpbmRleCA8IGVuZCAmJiBjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpID09IDB4M0EgLyogYDpgICovKSB7CiAgICAgICAgICAvLyBTa2lwIG9sZC1zdHlsZSBjb2RlIGJsb2NrLgogICAgICAgICAgaW5kZXggPSBjb21tZW50LmluZGV4T2YoJzpdJywgaW5kZXggKyAxKSArIDE7CiAgICAgICAgICBpZiAoaW5kZXggPT0gMCB8fCBpbmRleCA+IGVuZCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW50IHJlZmVyZW5jZVN0YXJ0ID0gaW5kZXg7CiAgICAgICAgICBpbmRleCA9IGNvbW1lbnQuaW5kZXhPZignXScsIGluZGV4KTsKICAgICAgICAgIGlmIChpbmRleCA9PSAtMSB8fCBpbmRleCA+PSBlbmQpIHsKICAgICAgICAgICAgLy8gUmVjb3Zlcnk6IHRlcm1pbmF0aW5nICddJyBpcyBub3QgdHlwZWQgeWV0LgogICAgICAgICAgICBpbmRleCA9IGZpbmRSZWZlcmVuY2VFbmQoY29tbWVudCwgcmVmZXJlbmNlU3RhcnQsIGVuZCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2ggIT0gMHgyNyAvKiBgJ2AgKi8gJiYgY2ggIT0gMHgyMiAvKiBgImAgKi8pIHsKICAgICAgICAgICAgaWYgKGlzTGlua1RleHQoY29tbWVudCwgaW5kZXgpKSB7CiAgICAgICAgICAgICAgLy8gVE9ETyhicmlhbndpbGtlcnNvbikgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlJ3MgYSBsaWJyYXJ5CiAgICAgICAgICAgICAgLy8gVVJJIGluIHRoZSBsaW5rIHRleHQuCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlQ29tbWVudFJlZmVyZW5jZVRleHQoCiAgICAgICAgICAgICAgICAgIGNvbW1lbnQuc3Vic3RyaW5nKHJlZmVyZW5jZVN0YXJ0LCBpbmRleCksCiAgICAgICAgICAgICAgICAgIGNvbW1lbnRUb2tlbi5jaGFyT2Zmc2V0ICsgcmVmZXJlbmNlU3RhcnQpOwogICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2ggPT0gMHg2MCAvKiAnYCcgKi8pIHsKICAgICAgICAvLyBTa2lwIGlubGluZSBjb2RlIGJsb2NrIGlmIHRoZXJlIGlzIGJvdGggc3RhcnRpbmcgJ2AnIGFuZCBlbmRpbmcgJ2AnCiAgICAgICAgaW50IGVuZENvZGVCbG9jayA9IGNvbW1lbnQuaW5kZXhPZignYCcsIGluZGV4ICsgMSk7CiAgICAgICAgaWYgKGVuZENvZGVCbG9jayAhPSAtMSAmJiBlbmRDb2RlQmxvY2sgPCBlbmQpIHsKICAgICAgICAgIGluZGV4ID0gZW5kQ29kZUJsb2NrOwogICAgICAgIH0KICAgICAgfQogICAgICArK2luZGV4OwogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgLy8vIEdpdmVuIGEgY29tbWVudCByZWZlcmVuY2Ugd2l0aG91dCBhIGNsb3NpbmcgYF1gLAogIC8vLyBzZWFyY2ggZm9yIGEgcG9zc2libGUgcGxhY2Ugd2hlcmUgYF1gIHNob3VsZCBiZS4KICBpbnQgZmluZFJlZmVyZW5jZUVuZChTdHJpbmcgY29tbWVudCwgaW50IGluZGV4LCBpbnQgZW5kKSB7CiAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIGlkZW50aWZpZXIgaWYgdGhlcmUgaXMgb25lCiAgICBpZiAoaW5kZXggPj0gZW5kIHx8ICFpc0xldHRlcihjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpKSkgewogICAgICByZXR1cm4gaW5kZXg7CiAgICB9CiAgICB3aGlsZSAoaW5kZXggPCBlbmQgJiYgaXNMZXR0ZXJPckRpZ2l0KGNvbW1lbnQuY29kZVVuaXRBdChpbmRleCkpKSB7CiAgICAgICsraW5kZXg7CiAgICB9CgogICAgLy8gQ2hlY2sgZm9yIGEgdHJhaWxpbmcgYC5gCiAgICBpZiAoaW5kZXggPj0gZW5kIHx8IGNvbW1lbnQuY29kZVVuaXRBdChpbmRleCkgIT0gMHgyRSAvKiBgLmAgKi8pIHsKICAgICAgcmV0dXJuIGluZGV4OwogICAgfQogICAgKytpbmRleDsKCiAgICAvLyBGaW5kIGVuZCBvZiB0aGUgaWRlbnRpZmllciBhZnRlciB0aGUgYC5gCiAgICBpZiAoaW5kZXggPj0gZW5kIHx8ICFpc0xldHRlcihjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpKSkgewogICAgICByZXR1cm4gaW5kZXg7CiAgICB9CiAgICArK2luZGV4OwogICAgd2hpbGUgKGluZGV4IDwgZW5kICYmIGlzTGV0dGVyT3JEaWdpdChjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpKSkgewogICAgICArK2luZGV4OwogICAgfQogICAgcmV0dXJuIGluZGV4OwogIH0KCiAgLy8vIFBhcnNlIHRoZSB0b2tlbnMgaW4gYSBzaW5nbGUgY29tbWVudCByZWZlcmVuY2UgYW5kIGdlbmVyYXRlIGVpdGhlciBhCiAgLy8vIGBoYW5kbGVDb21tZW50UmVmZXJlbmNlYCBvciBgaGFuZGxlTm9Db21tZW50UmVmZXJlbmNlYCBldmVudC4KICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBhIGNvbW1lbnQgcmVmZXJlbmNlIHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkLgogIGJvb2wgcGFyc2VPbmVDb21tZW50UmVmZXJlbmNlKFRva2VuIHRva2VuLCBpbnQgcmVmZXJlbmNlT2Zmc2V0KSB7CiAgICBUb2tlbiBiZWdpbiA9IHRva2VuOwogICAgVG9rZW4gbmV3S2V5d29yZCA9IG51bGw7CiAgICBpZiAob3B0aW9uYWwoJ25ldycsIHRva2VuKSkgewogICAgICBuZXdLZXl3b3JkID0gdG9rZW47CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIFRva2VuIHByZWZpeCwgcGVyaW9kOwogICAgaWYgKHRva2VuLmlzSWRlbnRpZmllciAmJiBvcHRpb25hbCgnLicsIHRva2VuLm5leHQpKSB7CiAgICAgIHByZWZpeCA9IHRva2VuOwogICAgICBwZXJpb2QgPSB0b2tlbi5uZXh0OwogICAgICB0b2tlbiA9IHBlcmlvZC5uZXh0OwogICAgfQogICAgaWYgKHRva2VuLmlzRW9mKSB7CiAgICAgIC8vIFJlY292ZXJ5OiBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciBmb3IgY29kZSBjb21wbGV0aW9uCiAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICAgIHBlcmlvZCA/PyBuZXdLZXl3b3JkID8/IHN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pKTsKICAgICAgaWYgKGJlZ2luID09IHRva2VuLm5leHQpIHsKICAgICAgICBiZWdpbiA9IHRva2VuOwogICAgICB9CiAgICB9CiAgICBUb2tlbiBvcGVyYXRvcktleXdvcmQgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCdvcGVyYXRvcicsIHRva2VuKSkgewogICAgICBvcGVyYXRvcktleXdvcmQgPSB0b2tlbjsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgaWYgKHRva2VuLmlzVXNlckRlZmluYWJsZU9wZXJhdG9yKSB7CiAgICAgIGlmICh0b2tlbi5uZXh0LmlzRW9mKSB7CiAgICAgICAgcGFyc2VPbmVDb21tZW50UmVmZXJlbmNlUmVzdCgKICAgICAgICAgICAgYmVnaW4sIHJlZmVyZW5jZU9mZnNldCwgbmV3S2V5d29yZCwgcHJlZml4LCBwZXJpb2QsIHRva2VuKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBvcGVyYXRvcktleXdvcmQgPz8gdG9rZW47CiAgICAgIGlmICh0b2tlbi5uZXh0LmlzRW9mKSB7CiAgICAgICAgaWYgKHRva2VuLmlzSWRlbnRpZmllcikgewogICAgICAgICAgcGFyc2VPbmVDb21tZW50UmVmZXJlbmNlUmVzdCgKICAgICAgICAgICAgICBiZWdpbiwgcmVmZXJlbmNlT2Zmc2V0LCBuZXdLZXl3b3JkLCBwcmVmaXgsIHBlcmlvZCwgdG9rZW4pOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIEtleXdvcmQga2V5d29yZCA9IHRva2VuLmtleXdvcmQ7CiAgICAgICAgaWYgKG5ld0tleXdvcmQgPT0gbnVsbCAmJgogICAgICAgICAgICBwcmVmaXggPT0gbnVsbCAmJgogICAgICAgICAgICAoa2V5d29yZCA9PSBLZXl3b3JkLlRISVMgfHwKICAgICAgICAgICAgICAgIGtleXdvcmQgPT0gS2V5d29yZC5OVUxMIHx8CiAgICAgICAgICAgICAgICBrZXl3b3JkID09IEtleXdvcmQuVFJVRSB8fAogICAgICAgICAgICAgICAga2V5d29yZCA9PSBLZXl3b3JkLkZBTFNFKSkgewogICAgICAgICAgLy8gVE9ETyhicmlhbndpbGtlcnNvbikgSWYgd2Ugd2FudCB0byBzdXBwb3J0IHRoaXMgd2Ugd2lsbCBuZWVkIHRvCiAgICAgICAgICAvLyBleHRlbmQgdGhlIGRlZmluaXRpb24gb2YgQ29tbWVudFJlZmVyZW5jZSB0byB0YWtlIGFuIGV4cHJlc3Npb24KICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGFuIGlkZW50aWZpZXIuIEZvciBub3cgd2UganVzdCBpZ25vcmUgaXQgdG8gcmVkdWNlIHRoZQogICAgICAgICAgLy8gbnVtYmVyIG9mIGVycm9ycyBwcm9kdWNlZCwgYnV0IHRoYXQncyBwcm9iYWJseSBub3QgYSB2YWxpZCBsb25nCiAgICAgICAgICAvLyB0ZXJtIGFwcHJvYWNoLgogICAgICAgIH0KICAgICAgfQogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlTm9Db21tZW50UmVmZXJlbmNlKCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZVJlc3QoCiAgICAgIFRva2VuIGJlZ2luLAogICAgICBpbnQgcmVmZXJlbmNlT2Zmc2V0LAogICAgICBUb2tlbiBuZXdLZXl3b3JkLAogICAgICBUb2tlbiBwcmVmaXgsCiAgICAgIFRva2VuIHBlcmlvZCwKICAgICAgVG9rZW4gaWRlbnRpZmllck9yT3BlcmF0b3IpIHsKICAgIC8vIEFkanVzdCB0aGUgdG9rZW4gb2Zmc2V0cyB0byBtYXRjaCB0aGUgZW5jbG9zaW5nIGNvbW1lbnQgdG9rZW4uCiAgICBUb2tlbiB0b2tlbiA9IGJlZ2luOwogICAgZG8gewogICAgICB0b2tlbi5vZmZzZXQgKz0gcmVmZXJlbmNlT2Zmc2V0OwogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9IHdoaWxlICghdG9rZW4uaXNFb2YpOwoKICAgIGxpc3RlbmVyLmhhbmRsZUNvbW1lbnRSZWZlcmVuY2UoCiAgICAgICAgbmV3S2V5d29yZCwgcHJlZml4LCBwZXJpb2QsIGlkZW50aWZpZXJPck9wZXJhdG9yKTsKICB9CgogIC8vLyBHaXZlbiB0aGF0IHdlIGhhdmUganVzdCBmb3VuZCBicmFja2V0ZWQgdGV4dCB3aXRoaW4gdGhlIGdpdmVuIFtjb21tZW50XSwKICAvLy8gbG9vayB0byBzZWUgd2hldGhlciB0aGF0IHRleHQgaXMgKGEpIGZvbGxvd2VkIGJ5IGEgcGFyZW50aGVzaXplZCBsaW5rCiAgLy8vIGFkZHJlc3MsIChiKSBmb2xsb3dlZCBieSBhIGNvbG9uLCBvciAoYykgZm9sbG93ZWQgYnkgb3B0aW9uYWwgd2hpdGVzcGFjZQogIC8vLyBhbmQgYW5vdGhlciBzcXVhcmUgYnJhY2tldC4gVGhlIFtyaWdodEluZGV4XSBpcyB0aGUgaW5kZXggb2YgdGhlIHJpZ2h0CiAgLy8vIGJyYWNrZXQuIFJldHVybiBgdHJ1ZWAgaWYgdGhlIGJyYWNrZXRlZCB0ZXh0IGlzIGZvbGxvd2VkIGJ5IGEgbGluawogIC8vLyBhZGRyZXNzLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCB1c2VzIHRoZSBzeW50YXggZGVzY3JpYmVkIGJ5IHRoZQogIC8vLyA8YSBocmVmPSJodHRwOi8vZGFyaW5nZmlyZWJhbGwubmV0L3Byb2plY3RzL21hcmtkb3duL3N5bnRheCI+bWFya2Rvd248L2E+CiAgLy8vIHByb2plY3QuCiAgYm9vbCBpc0xpbmtUZXh0KFN0cmluZyBjb21tZW50LCBpbnQgcmlnaHRJbmRleCkgewogICAgaW50IGxlbmd0aCA9IGNvbW1lbnQubGVuZ3RoOwogICAgaW50IGluZGV4ID0gcmlnaHRJbmRleCArIDE7CiAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGludCBjaCA9IGNvbW1lbnQuY29kZVVuaXRBdChpbmRleCk7CiAgICBpZiAoY2ggPT0gMHgyOCB8fCBjaCA9PSAweDNBKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgd2hpbGUgKGlzV2hpdGVzcGFjZShjaCkpIHsKICAgICAgaW5kZXggPSBpbmRleCArIDE7CiAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgY2ggPSBjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpOwogICAgfQogICAgcmV0dXJuIGNoID09IDB4NUI7CiAgfQp9CgovLyBUT0RPKGFoZSk6IFJlbW92ZSB3aGVuIGFuYWx5emVyIHN1cHBvcnRzIGdlbmVyYWxpemVkIGZ1bmN0aW9uIHN5bnRheC4KdHlwZWRlZiBfTWVzc2FnZVdpdGhBcmd1bWVudDxUPiA9IE1lc3NhZ2UgRnVuY3Rpb24oVCk7CpptAE5OPAEdATUBJwExASIJHxQcHREcHx0dHx4YEwEpCRoVFhMYEhgUGxoTFxIiGiMZLyQWASIBMQEpASEBJAkdKDEBOwEhNgEmASEJGh0fFQEpASsBSQEhCSUgJQE+ARgJEhwkFR8eEBoBEwkgKBIZERYWEgFQKwRJJQRFBE09BD9MT0MtRi9ISkcERC0ESUo2SktIBEg3TyMEFQRITTEEHAROSzJPGgRQTk9LBFA6BDUESk1QTw8ESCQEMwRNJwRNBCAERkhGQk9MLQQzBC0EUEdNJgQyBEhPUUVLBCgETFFMSjUETU02R1BPTgQpBEZLDgRQLhcEHgRKTE4RBEtMUARJUEpIMQ8VAR8BKwFKTlAxAUlLTUo3AT9LMS8BMTcmASUyGwQBGQEZNC4EARUwLwQBPAFBAUMBTQEgBk1PUBsGChkTFRgXHAgGFycICiE5Rx4pASoTPis8OCIGICZDMw8hFU88HCslKTc6NREIBhgmLzQbEgQBOUcGRT4GTU9QGycqEz4rICY3AUonJycPCAE+OiQPKiQyKjYoMTYoMjctLz4sGRErEQoIMwYYLzQbEgQBJQZNT1AbMAxQLBIEAQoaGhMULCorKTRIQyAICiY2Jh0iSwYZQBsjJENPOjAsLwgmHAgGFyJLLTUxKi0lKk4tBhA3UEMnNyo7LAZLKDMEATZDRSEiLDoZDxQ4CCAGEQQBQ0MhIhI2IAYEAUoiS0xBMS9GNUU4SA8pOQgNJzcGBAFCRSlFJy4lKkxIKyo1IQ1ANDg4M0QsLy4tPyMyQzAsDAosLw83KjYnMTYnMi4oMC4mNC4qLz0yNywKCAYBQwQBChggCAoxMS9QNCQ0EgQBChQkCAosHUMiIyBBPSceUTQNLwYSBAEKF0wICisvKTYXLCktIDAUDRIvJwYEAVEaKyY7AUNNISwpKAFDOTkBQR8xAS4VCSABSiZPAT9KIC4wLEguIEgrJEgpCggBLi43HA8tCDYsIlERG0UzDEMKCDAZIkkRHyRRDBwKCAEqRwEnIDFNLAgvIQE2Hk0GARYEAQoXGAgKLy8TKQ8qBigSBAEKFjoICisqIykiJR5HNgYoHRggGykZBiYrIk44D04ZCAYSIgEoRBIEAQoSJQgKJ0MjEyggQQ8GNxIEAQoXNwgKKy8pNiwoJC4SBAEKEysICisdJRMTJyYiLSIPKA8IGQ8GEgQBChYeCAohJCslLiMSBAEKFh4ICiEkKyUuIxIEAQoWJQgKK0MTKEoPBioSBAEKEBkICiUoRBMoUA8GIRIEAVArLDYnDTQlBgQBChUXCAonKyU0JCoSBAEKFyoICikoKycnMBETRDMNLgYkQBIEAQoQFAgKKSwTKCQPBiUSBAEKEjMICiUgJCVMDE4lTgZGGSUbIE0GJjcSBAEKESEICiMYOSISBAEKEStLCAYUQQYVGggGGT8IBhYfCAotMTU8OhJHHkM1TjslSA04TTUOUQYkQhIEAU0kMSQqRx5MSjU5CAYoQRIEASokKSozDSoGEgQBUB0nQR0fFkYIMhs1DRIoIB8XKRwKCEMzNgYSBAFBHR8yDTUGEgQBPTcEAUEiPTMnJz4XBAE2BklNSR0gQzIGMgQBSSUGSU0+OAQBSSgGSU1CGSIxHBMfIRYPCBgnI0AwDyo7MA8rFC5AMA8IUBkiISMYERYsQUVDNjQqJxdBRxYTNAwKDwgUBiJGEgQBUA81MDQ1KzMGMwQBCh0iHx4IBh9JCAYdQAgGHFEICh5PIyYdGAEgOgEZGhscKEIoHQoIAR4rNzkrHwwKASAhKS4hMi4hDgwBIhhQMC4zATszHwE1MzcBHAwKCAYBI0wBUCQ8JhceIEAtMC0ZBgEiPAEXGyQ2ATUiGSI7IhM9RAgmGTgGAR0UGQYkNR8wKy4qKSRKDCwoHQoIJiUgRggoHRkGHiMsSgYBISweRFE0QEUWN0cIMC8BRyYtHD41CCE7DTQGARUjHwYXTh4oDUBCTwgGKSUGFwElLD4aJT03GTtHRzk7ID9LIyBAIzg9TggNOAZJRhIEAQoeMAgKSiYiMxwTHyEPCCRAGRgiJBYiRjMhJyAMCg8IFAYfGREzJEQkQBgGGCJIEgQBCh0yMAgKRSYiMxwTHyEPCA5QGRgiJBYiRjMhJyAMCg8IFAYfGREwJEQOUBgGGCJIEgQBChEiCAo/Ly4oPgYSBAEKGBcICh88JT0NFAYEAQoVFwgKRRgiGi4mEgQBIT40BAEKEEgICicrJRJKIhMkGRUhIxgcTgwRCipRGxEjGCoYEREWLyZGPRMqS0pGRyRIE0AkSCgTDAoIDVBMIgYiNRIEASsxLTE3I01QJUdFDUI1BgQBJDYnI0UuJC4mMAYkJ0ASBAFOLgYKFz4uODkICkMZPSYSRDUGOzASBAFMKSczFyogKAZCEgQBPFEmQAFDTiE9P0U5AUEgMQEtEQkVAUUmSAE/TyABLkAgUTQ7Pz4PLQgBNRoiThEZRDEmRDcMHQoIASkBMhciSBEfQTQMGgoIATUBOB1FMBEgCggBKwFLPAEgEgQBLB0lI0UzDSQpBhIEAQoYLggKNh0dLiYLEE8bKwZPEgQBIQYKGEJECAopLT4jTRhGOEImEko1Bjs3EgQBPyQzLhIEASI8JkABQ04hPDVFAUEgMQEtEQkVAUUmOwFDTiABLkUgTCUPKAgBMBUiSxEfJE4MGAoIATUBOB1FMBEgCggBKwFLPAEgEgQBChAmCAonJycUBiAEASQiRSgqJxcJURMpMhIEAQpDCx4LCjE1JB02FA0TBkxAIiYSLC8pIEsPIEtICAY2OCYSHxwjKSwkJj4yUBgdIxofDBERCgg5Bjs/ShIEAScdJUspTAYlEQQBUFEUSjEdM0I2BAFQFwZNTzVDHSMvOiIwBjQXBAEyMC4EAS1LBAErBk1PUBsrPjAEAS8fHSgBGRUbARwoJhsIHicqHSwqHS4qHS0kHT0sHwwKIBYpKisuR0gTUC4mMwE7HwEzKzcBHAwKCAYBHjkmFwEUJT4kIRsIBgEtIElCJyAmJiYnJiYmFiQtJEATSSgcIS40RxAODDsXCi0nFB5CNSsmORE9O1EdCggGLQEWHhwhISEhIiUwTxErQgomKToISSsGARwnNwZKQgQBFRkbGRwXHRgZEhkhSQYiS1AfCAYeOk8IDUlMCAYBOCABKzguLQEYJj0oNCg/FAYiJBkNEhgqMypQRjAgHS82Sw8oCAYWSUENQUEGEgQBREk+ATguHUsBGxwoDSwUMgYrOzMjKklGBi00Hj8GOSVDEgQBKSU6BkQ2JRIaTQYSBAFLMB0fHywlPA06MiIUOTAhMiEiFDkwCgg1BhIEATMlJTUrMw04BhIEASwlLA0nFAYEAQoUPQgKKRkiJxMsKRgTJg8ZIisRCjhGQTooHCYTDEsRKB4oFQ4eLxUODBwmEwxJCksuIEpGCAYnOBIEAQocLhsSCAYYSwgKKB0lJCQ2KxQqNSkUGSEWGyEYERYtOgobI0MKCCFCGzsiQgoWCBIlSywgREBAGwgiJB8iNgg1SDs4Q09CI0EIDTIpNU9COT8GET0+Mjg0Jz4/OD0EASUKLgo9HiYdHxQZKzgsCBQZBiASIkcWGyJLPAoWGwghKEYRIkoKKSBJLQgGMgQBNiQpEgQBUVBQOichTB0qHB9DIEQPOy8mTggNQgYfBAEjHThNNkkkFwQBPUQ2OR0fEwYqOz9ABgFBHEABMEcxHwQBREYjHSpHSzgEATouNysdL0oXUDMGJgQBPUEqJ05CPR0qAUo5MkI/RgQBT0FKMTIEAT8aLR0iHkRFOBIEAVFRSR0gNjMzUBcKCAYSBAEpLC0aKxYpBjccQxIEASw+KwQBChEdCAo9JiIxEy0yDwYYIj0SBAEkKCEhASUGTU9QGy9MBAEKExshGggGExsaCAozOgEaGRUXGwEdHCgmGwgeKCYdMikdCiApLB8uLB9KLB8vJh8/LiEODCJQMC4mKjMBPh8BNTMrLzcBHAwKCAYBHAEeOSYXARQtJ0AmIx0KTTAhNiVLDEg/IBgKSDEhRDk1Th8bHRseGR8aGBgbIBgtJiEpKigyGx0bHhkfGyoWHxsdGx4ZHxoYGBsgGApJJyomKRQuExkbGRwXHRgWFwhAH0UvJSUmMjIbHRseGR8bCggGAUUWJRwhISEhIhsXGRcaFRsWFBQXDR4pOQgbFxkXGhUbFhQWEgYaEgQBFRkbGRwXHRgZFhQdJzgGHToiITY4JBsIBgEfGEocCCk7Th8IBiMwICtCIgo1TSAPNClAIAgGAUw8RSoBOC4fARYoDUweJ0UIBgEbHCkNLDIGASoiJh8fRDZAATMjKklGBh0hIksIBh9KMg0uSgYlRSoSBAFQOC8xAS0SSigwLQE5AS1JMQEWBgElJ0AGSic+HgYBTkojQSdJIyodGEcGHyNPCDIoIkwINQ1CMk4KCDYGSBIEASkfGCkdKD42NU8WDzIVCCZMJRJMGDATDRI3LS88TE4INxMGBAEvIzJHMzwSBAEeExgSGSQjOjclSgQBT00fBk5ITk0tBkYGGEwyFSBRIycMURMgHkIGLEkpQyAyDTMGEgQBS1BQT0gGUBtEMypLJRIEAU8SSS8jRC4xGSUbJ1ENSxcGQRIEATMYIjEaLiQ3EgQBTxsmHSQgRz8iKBkhRRsIQzgGJSEUHEIILCklTkxFJxwINygUQCZOTEUnHAg3DSA4BhIEAU5QT0gGUBtEHSQgKBkhPhUISUNGBh8cQQguEydGJiw/I08aJSMoPQ88CBQGGBwgEk0mQSVRSAhKPUVFTk0IRE4WIywPTjMfCAYBKicsEi0lJS9RHSBIHAgYBhgiQSASBAFOIxkkISY7DToGFyc2BhIEASkrJRomASMcCCsaJgEjHAgGEgQBLREQJR0jHBkhLhUWDyoIKRwZIS0VFg9JCAYvNUgGEgQBGiYiTEshLgYrFhMEASc4LC0IQjIGKiFAJi0qRyUqRD8IOyskKUQ9CDspJlA4Ki0uKywpKSsqJy0qLCkvLC0qKCksHCEwMQw/ASUmLQEiTi0IQixALBkwPwpCLDQ7CC5KKCc2KiosLQg7DTsGBAEKFiAICismJikVJSYGJCQ5EgQBChchCAosJicqHR83EwYkJDUXJzYGEgQBCg0XCAoiJU4iIRIEAQoRJAgKLR0fJhgJIRkUPTYjLhIEAQobGAgKBkpNShAwS1ASJCQvEgQBGycjUEwmH0ABEiYePBgdCg89GB0KCBo7SAgNLC5LBhcSBAE1KS1KBAE2KSUwMiYxMjgSBAEjOR0vOEQnPDMpBh0gL0EqLR85IBoMMUNFFCMvMkc5QDg6SRo4QBoMQTM8TU9MRyciRzQ+QFA+OStPLVFANUc4QBoTGC08Ggw0LjQuOjkRUDw2SyZHFVExDgwwQB8STzIKGxovCAYSBAEoIStFSTokCCEGHAQBLjAtLCVBDUo1Bh0QCRQ5HUsbLghGKTk1GyUIOBknAUIfMzcGGxIEAUArDyUZMEQKQ0cIOSgsGRFOLiQ9QCojIyNBECk6NhRFNSNBECk6QBQqJSwrCCU2LkotPzhGDgwKCAY+BAFMHR0TOi0oMCwnGyskFiJGKzcmTDwTTR0MCkMWNStANy0KGygrMAonMDUrQDctChsPDwgGEgQBPyIkOUElJygnKCUoKDNDKC0oLTQuNSwqLiwtOyFGLi82LDsvFBxPLQ8uCCtDNCYyMjMyNiM8DSwGBxYHJgQBRR0hKh8nLjguLzMvSzAxChRMT0wkMDowMQoIBiwoMScSBAE0IiURHkY3Bjk2EgQBNB4xMxIEATQ5BAE4Ih4kLCISBAFGKik3HR8hLCUyBhIEAUcrJjkdHxwsJTMnQQYSBAFOFgYKEz8ICgZQUE9CHys7EyE3RhkGLCgTHyEWDwgXOh0dKhErCiooCBkPIiMYEQoBFCwxOjRIE0AkSCkMEQo3REYiLz85CBQGJ0gSBAFORUYqJh0fTxMGAS0oE01NFgETFzohTDEoNCUaJCo9Cg8fHywtKC5BDhMtDCwqCggPGQETIR4bCCEoSSsVCAEbFCs8SztIJDFBPBEiRjglKkstFwoIBgQBKAZNTjInLSsaLDYsREwGKwQBRwYMTB5RIzxMKi8nTC4dHyIpOgg6MAY4HzIpPhgUCD4GOTUeQj0GOAQBChckTj4mCAosNElAOBsbKCooLDsPKQgmBhIEAU0oKAYzMSIdQi4hOSdGCggGJgQBJx0gHkgyBiUEATsdIDVBKSBKDyA/NTQbCCI0CAYlBAEKFS8ICiojKS0zOCsSBAEpMRk1NzgzEgQBTxcGChM/CAYSIEEIBhciCAosLS0dKz8oLDssFAYhKCw/LBQGIShFLBQGMS44LxIEAQoSEAgKJxgvMyYSBAEKFQ8ICioYMSkSBAEKFS4ICio2LCgtEzcvDwYVMQYnEgQBChU4CAoqKiYsHSglLxMpJy8TDRVIKhEiRggzFAYEATAYMSg+IB0aIDkiLCUiRyEKPUsgMTwPDwgcTCYZGAY5EgQBMR1NSRMNPQYEAQoWERAICigYQScSBAEKEw8ICigYJScSBAE8QSUfHjg2FggGRCczDTIGJjESBAEoHSYfHA0UBgQBKR0gKBQNJAYEAQoRJQgGFC0sCAYVGQgKJisEASoZIiQbJywoEx8hFg8IGiYQThcXJSk1UQgmGT4XIiMYEQoULjxLJBU/QREyEQoIFAYiJzgSBAEKERcICispJhYlIAY3NS4sBAExMh8yRDhAPisIBhUEAQoQEggKKykmNzUpLAQBMBMfJ0AWCDU6TCYaCDgnGSAGBAFLHS0eJ0UtGAonCBoiJSclKCUqThUIBhIEAUUsIyEkIQQBSCMrKDogJiIyCholGCojIyQyCghCQQY5BAFQBlBISwZITEpQSiJBOhkdHygZBgEVGwEcIyUlLhsrIhs7Kh0KCAEeFEwiLwFCGwEnMwEYCAYBTU4EATI9HhkdHRkwMQExHQEtHyk6CA0qLycrQigrPAoqMicKHkQ8NlAIBgEfHyYkISkJKjgJLAspRAsrLUYgQSUBLjpKHRkdCi9DOEgbFxsIBgEaTzQvFg8wCAYBHx8mPyk6IyAnIzMuHA4TNAwKCAYBHVBEJyU3UQo1Ik4KCAYBJi4jBjIXSi46BhIEAUwTOShADwYcMDoYDTUUBgQBPBZNNDQyEgQBChM+CAooICUoMy0jJhwoHi4pLAYxEgQBChQ2CAYVSDs0JggGHyMYCAo7KUEkKgE6Iz9DJkYNKzgGBAE2SEMrKxIeTQEzFCM+ARMgP0Q7D09LCAE/TgE5QQEjBgFMREsiSQQBPENOIjtELD8NJj8GHR8gSggoEiFFJyBFF1AIBhIEAU5NBgoVSDs0JggKRkAwKiYjIC4qEgQBTysnLAEyLTINNwYdEx8hFg8IKxkjDwgGLU0oBiFEEgQBTlAPBgoVSDs0JggKGElOKSomIyAnIxIEASFJIicqQwEkJzkmLCBJDyk9CDFESAYBMyg0KCM5EgQBChYtCAorIysuNjIqJiMgMDgSBAEKEzYICi0gJS02KiYlIC0jKh5MSgY2JD4SBAEKDRsICjQ/IBwjLSUvUR0cIEgIGB8GGCI1EgQBKR4iP0EqSD4lITASBAFIPi8YJhgBS0lFAR4aIiU7Fwo0FQgGEgQBChcgCApAIysvJzgTOw1ANU0GEgQBChcbCAYlKQgKQCMrKkxINx5DHBYkRwYaJjU8EgQBChgWCAotIy0wKTUSBAEKFDkIBg4aIwgGETUIBhMYCAopIyksQh8YASZCKB4kIBtQIyMIIRonHgEuKkhCCgEvNjszCgExJxEmJxguRw4BQUoZJB8nRT8BSkwZGxgfIhgbIBoBM0hKHBUWUQ4MHyo2OzIOMhosKE4QNUpIEA4MCk4jCCY/IRRBNAYBISYeOiEzDR1CCAZGGQQBChc1CAosJi8yOSouKgYlIDcSBAEKEykICihOLBchJC0kHxouFU0pKzEnGgwoJEUMJ0MdES8xJxoMKigkRgw1MCYtOB0tKhERFiJIMSsgDC0RCghOPxMGGDwiEgQBREQTJj4fBhIEAT0lExITFhscIUIoHDUnKCtISQ8PJychK0snIkgYChoIKQZIPxIEAQoWIAgKKy0tHCNJGCJNBiRDEgQBChE7CAowGCcnISgrEh5NPAYdHSwoASQlGigcKCkoHgoIBgEvIhgNEiJOOQ8pOBoIBgEiJyVOKx4GGEcSBAEKFxYICiwsPzYEAQoZIwgKLjAzHCNJGCkgQgglHhsuODUGJEkSBAEKFgwICisYIioSBAFQPzgjMxofBhgEAUpMMCkZGxkcFx0aPQE2IgEmGA1JRQYBOSEgAR8VFxUYExkUEg4aGhIEAVFQRScTGRsZHBcdGBkYHSUBJS4rLS4wO0lQBgEcISIhGxcZFxoVGxYUFBcnTlAqJCQWCA0bFxkXGhUbFhQWEgYBGhIEAU4/MB0+RikBJxQZBhIEAT5AKzwEAShFQCslNgQBLCIoGgYSBAEnIhoGEgQBNx0lDhwsMh8nBjURBAExJj4pHUJJQR0ZFBlGQjobHwgGEgQBMCU9KR1BSUEdGBQZOk1FMB8IBhIEATMoQClOSzISBAFRGDYiJBcEAUcuTEdLRxkiHQYmGRMEAUcuIy4aHh8nJhweHgotHB0IIAYUBAFDRTYuLDc2BAFCNj4qJxMhEx4vGxoGHTUREgguFxYIHSQxHx4KCEJJCBcGEgQBT0A2ORMeLCUnLyYKPksKCBoGEgQBSUtNKhMXGioiEUooOCsTDBEmLy07RAw+Lk4nFTM8PRcODAopTzw4IAoIDwYSBAE3Nz02QBQGSA8GASBHFAYNATBAFAYNSA8GEgQBS0RERBkdIhoaBho7FhsbBhdFMkIhFwgGIicfGgYpHiZIFQgNKB4iKEoXCikiHigrKy1NTVBNHAoIBikSBAElExsYFBQkRhkJJxocASU7BAFPTE9NSQ8GM1APNCEgGxQGKCQTBh8ZHRYIJgYXBAIBSTcBLnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvcGFyc2VyLmRhcnQ9c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9wYXJzZXJfZXJyb3IuZGFydINfLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLnBhcnNlcl9lcnJvcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyBNZXNzYWdlOwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnIHNob3cgVG9rZW47CgpjbGFzcyBQYXJzZXJFcnJvciB7CiAgLy8vIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGZpbGUgd2hlcmUgdGhpcyBlcnJvciBzdGFydHMuCiAgZmluYWwgaW50IGJlZ2luT2Zmc2V0OwoKICAvLy8gQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZmlsZSB3aGVyZSB0aGlzIGVycm9yIGVuZHMuCiAgZmluYWwgaW50IGVuZE9mZnNldDsKCiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlOwoKICBQYXJzZXJFcnJvcih0aGlzLmJlZ2luT2Zmc2V0LCB0aGlzLmVuZE9mZnNldCwgdGhpcy5tZXNzYWdlKTsKCiAgUGFyc2VyRXJyb3IuZnJvbVRva2VucyhUb2tlbiBiZWdpbiwgVG9rZW4gZW5kLCBNZXNzYWdlIG1lc3NhZ2UpCiAgICAgIDogdGhpcyhiZWdpbi5jaGFyT2Zmc2V0LCBlbmQuY2hhck9mZnNldCArIGVuZC5jaGFyQ291bnQsIG1lc3NhZ2UpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiQCR7YmVnaW5PZmZzZXR9OiAke21lc3NhZ2UubWVzc2FnZX1cbiR7bWVzc2FnZS50aXB9IjsKfQocAE5OPAEjASsBJQEUSxkBSRcBGQE/AUJJAU4CATRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3BhcnNlcl9lcnJvci5kYXJ0N3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvYXNzZXJ0LmRhcnSCJC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci5Bc3NlcnQ7CgovLy8gU3ludGFjdGljIGZvcm1zIG9mIGBhc3NlcnRgLgovLy8KLy8vIEFuIGFzc2VydGlvbiBjYW4gbGVnYWxseSBvY2N1ciBhcyBhIHN0YXRlbWVudC4gSG93ZXZlciwgYXNzZXJ0aW9ucyBhcmUgYWxzbwovLy8gZXhwZXJpbWVudGFsbHkgYWxsb3dlZCBpbiBpbml0aWFsaXplcnMuIEZvciBpbXByb3ZlZCBlcnJvciByZWNvdmVyeSwgd2UKLy8vIGFsc28gYXR0ZW1wdCB0byBwYXJzZSBhc3NlcnRzIGFzIGV4cHJlc3Npb25zLgplbnVtIEFzc2VydCB7CiAgRXhwcmVzc2lvbiwKICBJbml0aWFsaXplciwKICBTdGF0ZW1lbnQsCn0KEgBOTjwBHQEhBFBMMg4ODw0CAS5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2Fzc2VydC5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnSDEy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci5mb3JtYWxfcGFyYW1ldGVyX2tpbmQ7CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVcGRhdGUgdGhpcyB0byBzdXBwb3J0IHJlcXVpcmVkIG5hbWVkIGFyZ3VtZW50cy4KZW51bSBGb3JtYWxQYXJhbWV0ZXJLaW5kIHsKICBtYW5kYXRvcnksCiAgb3B0aW9uYWxOYW1lZCwKICBvcHRpb25hbFBvc2l0aW9uYWwsCn0KCmJvb2wgaXNNYW5kYXRvcnlGb3JtYWxQYXJhbWV0ZXJLaW5kKEZvcm1hbFBhcmFtZXRlcktpbmQgdHlwZSkgewogIHJldHVybiBGb3JtYWxQYXJhbWV0ZXJLaW5kLm1hbmRhdG9yeSA9PSB0eXBlOwp9Cgpib29sIGlzT3B0aW9uYWxOYW1lZEZvcm1hbFBhcmFtZXRlcktpbmQoRm9ybWFsUGFyYW1ldGVyS2luZCB0eXBlKSB7CiAgcmV0dXJuIEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxOYW1lZCA9PSB0eXBlOwp9Cgpib29sIGlzT3B0aW9uYWxQb3NpdGlvbmFsRm9ybWFsUGFyYW1ldGVyS2luZChGb3JtYWxQYXJhbWV0ZXJLaW5kIHR5cGUpIHsKICByZXR1cm4gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbFBvc2l0aW9uYWwgPT0gdHlwZTsKfQoaAE5OPAEsAUkbDREWAgFAMAIBRDQCAUk5AgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9mb3JtYWxfcGFyYW1ldGVyX2tpbmQuZGFydENzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2lkZW50aWZpZXJfY29udGV4dC5kYXJ0s44vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW4sIFRva2VuVHlwZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyBNZXNzYWdlLCBUZW1wbGF0ZSwgdGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXI7CgppbXBvcnQgJy4uL3NjYW5uZXIvdG9rZW5fY29uc3RhbnRzLmRhcnQnIHNob3cgSURFTlRJRklFUl9UT0tFTjsKCmltcG9ydCAnaWRlbnRpZmllcl9jb250ZXh0X2ltcGwuZGFydCc7CgppbXBvcnQgJ3BhcnNlci5kYXJ0JyBzaG93IFBhcnNlcjsKCmltcG9ydCAndXRpbC5kYXJ0JyBzaG93IGlzT25lT2ZPckVvZiwgb3B0aW9uYWw7CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcnNlciBzdGF0ZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgbGlzdGVuZXIgYXQgdGhlCi8vLyB0aW1lIGFuIGlkZW50aWZpZXIgaXMgZW5jb3VudGVyZWQuIEl0IGlzIGFsc28gdXNlZCBieSB0aGUgcGFyc2VyIGZvciBlcnJvcgovLy8gcmVjb3Zlcnkgd2hlbiBhIHJlY292ZXJ5IHRlbXBsYXRlIGlzIGRlZmluZWQuCi8vLwovLy8gVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgbGlzdGVuZXIgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZQovLy8gaWRlbnRpZmllciBhcHBlYXJzOyB0aGF0IGluIHR1cm4gY2FuIGhlbHAgdGhlIGxpc3RlbmVyIGRlY2lkZSBob3cgdG8gcmVzb2x2ZQovLy8gdGhlIGlkZW50aWZpZXIgKGlmIHRoZSBsaXN0ZW5lciBpcyBkb2luZyByZXNvbHV0aW9uKS4KY2xhc3MgSWRlbnRpZmllckNvbnRleHQgewogIC8vLyBJZGVudGlmaWVyIGlzIGJlaW5nIGRlY2xhcmVkIGFzIHRoZSBuYW1lIG9mIGFuIGltcG9ydCBwcmVmaXggKGkuZS4gYEZvb2AKICAvLy8gaW4gYGltcG9ydCAiLi4uIiBhcyBGb287YCkKICBzdGF0aWMgY29uc3QgaW1wb3J0UHJlZml4RGVjbGFyYXRpb24gPSBjb25zdCBJbXBvcnRQcmVmaXhJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSBkb3R0ZWQgbmFtZSBpbiBhIGNvbmRpdGlvbmFsIGltcG9ydCBvcgogIC8vLyBleHBvcnQuCiAgc3RhdGljIGNvbnN0IGRvdHRlZE5hbWUgPSBjb25zdCBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiBhIGRvdHRlZCBuYW1lIGluIGEgY29uZGl0aW9uYWwgaW1wb3J0IG9yIGV4cG9ydCwgYnV0CiAgLy8vIGl0J3Mgbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIG9mIHRoZSBkb3R0ZWQgbmFtZS4KICBzdGF0aWMgY29uc3QgZG90dGVkTmFtZUNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IERvdHRlZE5hbWVJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgb25lIG9mIHRoZSBzaG93bi9oaWRkZW4gbmFtZXMgaW4gYW4gaW1wb3J0L2V4cG9ydAogIC8vLyBjb21iaW5hdG9yLgogIHN0YXRpYyBjb25zdCBjb21iaW5hdG9yID0gY29uc3QgQ29tYmluYXRvcklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiBhIG5hbWUgaW4gYW4gYW5ub3RhdGlvbiB0aGF0IHByZWNlZGVzIGEKICAvLy8gZGVjbGFyYXRpb24gKGkuZS4gaXQgYXBwZWFycyBkaXJlY3RseSBhZnRlciBhbiBgQGApLgogIHN0YXRpYyBjb25zdCBtZXRhZGF0YVJlZmVyZW5jZSA9IGNvbnN0IE1ldGFkYXRhUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiBhIG5hbWUgaW4gYW4gYW5ub3RhdGlvbiB0aGF0IHByZWNlZGVzIGEgZGVjbGFyYXRpb24sCiAgLy8vIGJ1dCBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBpbiB0aGUgbmFtZS4KICBzdGF0aWMgY29uc3QgbWV0YWRhdGFDb250aW51YXRpb24gPQogICAgICBjb25zdCBNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyBwYXJ0IG9mIGEgbmFtZSBpbiBhbiBhbm5vdGF0aW9uIHRoYXQgcHJlY2VkZXMgYSBkZWNsYXJhdGlvbiwKICAvLy8gYnV0IGl0IGFwcGVhcnMgYWZ0ZXIgdHlwZSBwYXJhbWV0ZXJzIChlLmcuIGBmb29gIGluIGBAWDxZPi5mb28oKWApLgogIHN0YXRpYyBjb25zdCBtZXRhZGF0YUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cyA9CiAgICAgIGNvbnN0IE1ldGFkYXRhUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGEgdHlwZWRlZiBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgdHlwZWRlZkRlY2xhcmF0aW9uID0gY29uc3QgVHlwZWRlZkRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgYSBmaWVsZCBpbml0aWFsaXplciBpbiBhIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdCAoaS5lLiBpdAogIC8vLyBhcHBlYXJzIGRpcmVjdGx5IGFmdGVyIGB0aGlzLmApLgogIHN0YXRpYyBjb25zdCBmaWVsZEluaXRpYWxpemVyID0gY29uc3QgRmllbGRJbml0aWFsaXplcklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIGEgZm9ybWFsIHBhcmFtZXRlciBiZWluZyBkZWNsYXJlZCBhcyBwYXJ0IG9mIGEgZnVuY3Rpb24sCiAgLy8vIG1ldGhvZCwgb3IgdHlwZWRlZiBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgZm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBGb3JtYWxQYXJhbWV0ZXJEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIGEgZm9ybWFsIHBhcmFtZXRlciBiZWluZyBkZWNsYXJlZCBhcyBwYXJ0IG9mIGEgY2F0Y2ggYmxvY2sKICAvLy8gaW4gYSB0cnkvY2F0Y2gvZmluYWxseSBzdGF0ZW1lbnQuCiAgc3RhdGljIGNvbnN0IGNhdGNoUGFyYW1ldGVyID0gY29uc3QgQ2F0Y2hQYXJhbWV0ZXJJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSBsaWJyYXJ5IG5hbWUgKGUuZy4gYGZvb2AgaW4gdGhlIGRpcmVjdGl2ZQogIC8vLyAnbGlicmFyeSBmb287YCkuCiAgc3RhdGljIGNvbnN0IGxpYnJhcnlOYW1lID0gY29uc3QgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSBsaWJyYXJ5IG5hbWUsIGJ1dCBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBpbgogIC8vLyB0aGUgbmFtZS4KICBzdGF0aWMgY29uc3QgbGlicmFyeU5hbWVDb250aW51YXRpb24gPQogICAgICBjb25zdCBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiBhIGxpYnJhcnkgbmFtZSByZWZlcmVuY2VkIGJ5IGEgYHBhcnQgb2ZgCiAgLy8vIGRpcmVjdGl2ZSAoZS5nLiBgZm9vYCBpbiB0aGUgZGlyZWN0aXZlIGBwYXJ0IG9mIGZvbztgKS4KICBzdGF0aWMgY29uc3QgcGFydE5hbWUgPSBjb25zdCBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQucGFydE5hbWUoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiBhIGxpYnJhcnkgbmFtZSByZWZlcmVuY2VkIGJ5IGEgYHBhcnQgb2ZgIGRpcmVjdGl2ZSwKICAvLy8gYnV0IGl0J3Mgbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIGluIHRoZSBuYW1lLgogIHN0YXRpYyBjb25zdCBwYXJ0TmFtZUNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dC5wYXJ0TmFtZUNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgdHlwZSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGFuIGVudW0gZGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IGVudW1EZWNsYXJhdGlvbiA9IGNvbnN0IEVudW1EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIGFuIGVudW1lcmF0ZWQgdmFsdWUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhbiBlbnVtCiAgLy8vIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBlbnVtVmFsdWVEZWNsYXJhdGlvbiA9CiAgICAgIGNvbnN0IEVudW1WYWx1ZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYSBjbGFzcyBkZWNsYXJhdGlvbiwgYSBtaXhpbgogIC8vLyBkZWNsYXJhdGlvbiwgb3IgYSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiwgZm9yIGV4YW1wbGUsCiAgLy8vIGBGb29gIGluIGBjbGFzcyBGb28gPSBYIHdpdGggWTtgLgogIHN0YXRpYyBjb25zdCBjbGFzc09yTWl4aW5PckV4dGVuc2lvbkRlY2xhcmF0aW9uID0KICAgICAgY29uc3QgQ2xhc3NPck1peGluT3JFeHRlbnNpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiBhIHR5cGUgdmFyaWFibGUgYmVpbmcgZGVjbGFyZWQgKGUuZy4gYEZvb2AgaW4KICAvLy8gYGNsYXNzIEM8Rm9vIGV4dGVuZHMgbnVtPiB7fWApLgogIHN0YXRpYyBjb25zdCB0eXBlVmFyaWFibGVEZWNsYXJhdGlvbiA9CiAgICAgIGNvbnN0IFR5cGVWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHN0YXJ0IG9mIGEgcmVmZXJlbmNlIHRvIGEgdHlwZSB0aGF0IHN0YXJ0cyB3aXRoIHByZWZpeC4KICBzdGF0aWMgY29uc3QgcHJlZml4ZWRUeXBlUmVmZXJlbmNlID0KICAgICAgY29uc3QgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LnByZWZpeGVkKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiBhIHJlZmVyZW5jZSB0byBhIHR5cGUgZGVjbGFyZWQgZWxzZXdoZXJlLgogIHN0YXRpYyBjb25zdCB0eXBlUmVmZXJlbmNlID0gY29uc3QgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSByZWZlcmVuY2UgdG8gYSB0eXBlIGRlY2xhcmVkIGVsc2V3aGVyZSwgYnV0IGl0J3MKICAvLy8gbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIG9mIHRoZSByZWZlcmVuY2UuCiAgc3RhdGljIGNvbnN0IHR5cGVSZWZlcmVuY2VDb250aW51YXRpb24gPQogICAgICBjb25zdCBUeXBlUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIGEgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIHRvcCBsZXZlbCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgdG9wTGV2ZWxWYXJpYWJsZURlY2xhcmF0aW9uID0KICAgICAgY29uc3QgVG9wTGV2ZWxEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KAogICAgICAgICAgJ3RvcExldmVsVmFyaWFibGVEZWNsYXJhdGlvbicsIGNvbnN0IFsnOycsICc9JywgJywnXSk7CgogIC8vLyBJZGVudGlmaWVyIGlzIGEgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIGZpZWxkIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBmaWVsZERlY2xhcmF0aW9uID0gY29uc3QgRmllbGREZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGEgdG9wIGxldmVsIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCB0b3BMZXZlbEZ1bmN0aW9uRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBUb3BMZXZlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoCiAgICAgICAgICAndG9wTGV2ZWxGdW5jdGlvbkRlY2xhcmF0aW9uJywgY29uc3QgWyc8JywgJygnLCAneycsICc9PiddKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHN0YXJ0IG9mIHRoZSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGEgbWV0aG9kCiAgLy8vIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBtZXRob2REZWNsYXJhdGlvbiA9IGNvbnN0IE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIG1ldGhvZCBkZWNsYXJhdGlvbiwKICAvLy8gYnV0IGl0J3Mgbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIG9mIHRoZSBuYW1lLgogIC8vLwogIC8vLyBJbiB2YWxpZCBEYXJ0LCB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiBhCiAgLy8vIG5hbWVkIGNvbnN0cnVjdG9yIHdoaWNoIGlzIGJlaW5nIGRlY2xhcmVkLCBlLmcuIGBmb29gIGluCiAgLy8vIGBjbGFzcyBDIHsgQy5mb28oKTsgfWAuCiAgc3RhdGljIGNvbnN0IG1ldGhvZERlY2xhcmF0aW9uQ29udGludWF0aW9uID0KICAgICAgY29uc3QgTWV0aG9kRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgYXBwZWFycyBhZnRlciB0aGUgd29yZCBgb3BlcmF0b3JgIGluIGEgbWV0aG9kIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBUT0RPKHBhdWxiZXJyeSxhaGUpOiBEb2VzIHRoaXMgZXZlciBvY2N1ciBpbiB2YWxpZCBEYXJ0LCBvciBkb2VzIGl0IG9ubHkKICAvLy8gb2NjdXIgYXMgcGFydCBvZiBlcnJvciByZWNvdmVyeT8gIElmIGl0J3Mgb25seSBhcyBwYXJ0IG9mIGVycm9yIHJlY292ZXJ5LAogIC8vLyBwZXJoYXBzIHdlIHNob3VsZCBqdXN0IHJlLXVzZSBtZXRob2REZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3Qgb3BlcmF0b3JOYW1lID0KICAgICAgY29uc3QgTWV0aG9kRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHN0YXJ0IG9mIHRoZSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGEgbG9jYWwgZnVuY3Rpb24KICAvLy8gZGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IGxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbiA9CiAgICAgIGNvbnN0IExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgdGhlIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYSBsb2NhbCBmdW5jdGlvbgogIC8vLyBkZWNsYXJhdGlvbiwgYnV0IGl0J3Mgbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIG9mIHRoZSBuYW1lLgogIC8vLwogIC8vLyBUT0RPKHBhdWxiZXJyeSxhaGUpOiBEb2VzIHRoaXMgZXZlciBvY2N1ciBpbiB2YWxpZCBEYXJ0LCBvciBkb2VzIGl0IG9ubHkKICAvLy8gb2NjdXIgYXMgcGFydCBvZiBlcnJvciByZWNvdmVyeT8KICBzdGF0aWMgY29uc3QgbG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uQ29udGludWF0aW9uID0KICAgICAgY29uc3QgTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiBhIHJlZmVyZW5jZSB0byBhIGNvbnN0cnVjdG9yIGRlY2xhcmVkCiAgLy8vIGVsc2V3aGVyZS4KICBzdGF0aWMgY29uc3QgY29uc3RydWN0b3JSZWZlcmVuY2UgPQogICAgICBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSByZWZlcmVuY2UgdG8gYSBjb25zdHJ1Y3RvciBkZWNsYXJlZCBlbHNld2hlcmUsIGJ1dAogIC8vLyBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBvZiB0aGUgcmVmZXJlbmNlLgogIHN0YXRpYyBjb25zdCBjb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IENvbnN0cnVjdG9yUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSByZWZlcmVuY2UgdG8gYSBjb25zdHJ1Y3RvciBkZWNsYXJlZCBlbHNld2hlcmUsIGJ1dAogIC8vLyBpdCBhcHBlYXJzIGFmdGVyIHR5cGUgcGFyYW1ldGVycyAoZS5nLiBgZm9vYCBpbiBgWDxZPi5mb29gKS4KICBzdGF0aWMgY29uc3QgY29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMgPQogICAgICBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0CiAgICAgICAgICAuY29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBkZWNsYXJhdGlvbiBvZiBhIGxhYmVsIChpLmUuIGl0IGlzIGZvbGxvd2VkIGJ5IGA6YCBhbmQKICAvLy8gdGhlbiBhIHN0YXRlbWVudCkuCiAgc3RhdGljIGNvbnN0IGxhYmVsRGVjbGFyYXRpb24gPSBjb25zdCBMYWJlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHN0YXJ0IG9mIGEgcmVmZXJlbmNlIG9jY3VycmluZyBpbiBhIGxpdGVyYWwgc3ltYm9sIChlLmcuCiAgLy8vIGBmb29gIGluIGAjZm9vYCkuCiAgc3RhdGljIGNvbnN0IGxpdGVyYWxTeW1ib2wgPSBjb25zdCBMaXRlcmFsU3ltYm9sSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiBhIHJlZmVyZW5jZSBvY2N1cnJpbmcgaW4gYSBsaXRlcmFsIHN5bWJvbCwgYnV0IGl0J3MKICAvLy8gbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIG9mIHRoZSByZWZlcmVuY2UgKGUuZy4gYGZvb2AgaW4gYCNwcmVmaXguZm9vYCkuCiAgc3RhdGljIGNvbnN0IGxpdGVyYWxTeW1ib2xDb250aW51YXRpb24gPQogICAgICBjb25zdCBMaXRlcmFsU3ltYm9sSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGFwcGVhcnMgaW4gYW4gZXhwcmVzc2lvbiwgYW5kIGl0IGRvZXMgbm90IGltbWVkaWF0ZWx5IGZvbGxvdyBhCiAgLy8vIGAuYC4KICBzdGF0aWMgY29uc3QgZXhwcmVzc2lvbiA9IGNvbnN0IEV4cHJlc3Npb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBhcHBlYXJzIGluIGFuIGV4cHJlc3Npb24sIGFuZCBpdCBpbW1lZGlhdGVseSBmb2xsb3dzIGEgYC5gLgogIHN0YXRpYyBjb25zdCBleHByZXNzaW9uQ29udGludWF0aW9uID0KICAgICAgY29uc3QgRXhwcmVzc2lvbklkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIHJlZmVyZW5jZSB0byBhIG5hbWVkIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gb3IgbWV0aG9kCiAgLy8vIGludm9jYXRpb24gKGUuZy4gYGZvb2AgaW4gYGYoZm9vOiAwKTtgLgogIHN0YXRpYyBjb25zdCBuYW1lZEFyZ3VtZW50UmVmZXJlbmNlID0KICAgICAgY29uc3QgTmFtZWRBcmd1bWVudFJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIGEgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBsb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIHJlZmVyZW5jZSB0byBhIGxhYmVsIChlLmcuIGBmb29gIGluIGBicmVhayBmb287YCkuCiAgLy8vIExhYmVscyBoYXZlIHRoZWlyIG93biBzY29wZS4KICBzdGF0aWMgY29uc3QgbGFiZWxSZWZlcmVuY2UgPSBjb25zdCBMYWJlbFJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCk7CgogIGZpbmFsIFN0cmluZyBfbmFtZTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIHJlcHJlc2VudHMgYSBuYW1lIHdoaWNoIGlzIGJlaW5nCiAgLy8vIGRlY2xhcmVkLgogIGZpbmFsIGJvb2wgaW5EZWNsYXJhdGlvbjsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGlzIHdpdGhpbiBhIGBsaWJyYXJ5YCBvciBgcGFydCBvZmAKICAvLy8gZGVjbGFyYXRpb24uCiAgZmluYWwgYm9vbCBpbkxpYnJhcnlPclBhcnRPZkRlY2xhcmF0aW9uOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlkZW50aWZpZXIgaXMgd2l0aGluIGEgc3ltYm9sIGxpdGVyYWwuCiAgZmluYWwgYm9vbCBpblN5bWJvbDsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGZvbGxvd3MgYSBgLmAuCiAgZmluYWwgYm9vbCBpc0NvbnRpbnVhdGlvbjsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIHNob3VsZCBiZSBsb29rZWQgdXAgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCiAgZmluYWwgYm9vbCBpc1Njb3BlUmVmZXJlbmNlOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgYnVpbHQtaW4gaWRlbnRpZmllcnMgYXJlIGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LgogIGZpbmFsIGJvb2wgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ7CgogIC8vLyBJbmRpY2F0ZWQgd2hldGhlciB0aGUgaWRlbnRpZmllciBpcyBhbGxvd2VkIGluIGEgY29udGV4dCB3aGVyZSBjb25zdGFudAogIC8vLyBleHByZXNzaW9ucyBhcmUgcmVxdWlyZWQuCiAgZmluYWwgYm9vbCBhbGxvd2VkSW5Db25zdGFudEV4cHJlc3Npb247CgogIGZpbmFsIFRlbXBsYXRlPF9NZXNzYWdlV2l0aEFyZ3VtZW50PFRva2VuPj4gcmVjb3ZlcnlUZW1wbGF0ZTsKCiAgY29uc3QgSWRlbnRpZmllckNvbnRleHQodGhpcy5fbmFtZSwKICAgICAge3RoaXMuaW5EZWNsYXJhdGlvbjogZmFsc2UsCiAgICAgIHRoaXMuaW5MaWJyYXJ5T3JQYXJ0T2ZEZWNsYXJhdGlvbjogZmFsc2UsCiAgICAgIHRoaXMuaW5TeW1ib2w6IGZhbHNlLAogICAgICB0aGlzLmlzQ29udGludWF0aW9uOiBmYWxzZSwKICAgICAgdGhpcy5pc1Njb3BlUmVmZXJlbmNlOiBmYWxzZSwKICAgICAgdGhpcy5pc0J1aWx0SW5JZGVudGlmaWVyQWxsb3dlZDogdHJ1ZSwKICAgICAgYm9vbCBhbGxvd2VkSW5Db25zdGFudEV4cHJlc3Npb24sCiAgICAgIHRoaXMucmVjb3ZlcnlUZW1wbGF0ZTogdGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXJ9KQogICAgICA6IHRoaXMuYWxsb3dlZEluQ29uc3RhbnRFeHByZXNzaW9uID0KICAgICAgICAgICAgLy8gR2VuZXJhbGx5LCBkZWNsYXJhdGlvbnMgYXJlIGxlZ2FsIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLiAgQQogICAgICAgICAgICAvLyBjb250aW51YXRpb24gZG9lc24ndCBhZmZlY3QgY29uc3RhbnQgZXhwcmVzc2lvbnM6IGlmIHdoYXQgaXQncwogICAgICAgICAgICAvLyBjb250aW51aW5nIGlzIGEgcHJvYmxlbSwgaXQgaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZC4KICAgICAgICAgICAgYWxsb3dlZEluQ29uc3RhbnRFeHByZXNzaW9uID8/CiAgICAgICAgICAgICAgICAoaW5EZWNsYXJhdGlvbiB8fCBpc0NvbnRpbnVhdGlvbiB8fCBpblN5bWJvbCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9uYW1lOwoKICAvLy8gRW5zdXJlIHRoYXQgdGhlIG5leHQgdG9rZW4gaXMgYW4gaWRlbnRpZmllciAob3Iga2V5d29yZCB3aGljaCBzaG91bGQgYmUKICAvLy8gdHJlYXRlZCBhcyBhbiBpZGVudGlmaWVyKSBhbmQgcmV0dXJuIHRoYXQgaWRlbnRpZmllci4KICAvLy8gUmVwb3J0IGVycm9ycyBhcyBuZWNlc3NhcnkgdmlhIFtwYXJzZXJdLgogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIGFzc2VydCh0b2tlbi5uZXh0LmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIGZvciBlYWNoIGlkZW50aWZpZXIgY29udGV4dAogICAgLy8gc3VjaCB0aGF0IHRoZXkgcmV0dXJuIGEgbm9uLW51bGwgdmFsdWUuCiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBbdG9rZW5dIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgdGhlIHN0YXJ0IG9mCi8vLyBhbiBleHByZXNzaW9uIGZvciB0aGUgcHVycG9zZXMgb2YgcmVjb3ZlcnkuCmJvb2wgbG9va3NMaWtlRXhwcmVzc2lvblN0YXJ0KFRva2VuIG5leHQpID0+CiAgICBuZXh0LmlzSWRlbnRpZmllciB8fAogICAgbmV4dC5pc0tleXdvcmQgJiYgIWxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0KG5leHQpIHx8CiAgICBuZXh0LnR5cGUgPT0gVG9rZW5UeXBlLkRPVUJMRSB8fAogICAgbmV4dC50eXBlID09IFRva2VuVHlwZS5IQVNIIHx8CiAgICBuZXh0LnR5cGUgPT0gVG9rZW5UeXBlLkhFWEFERUNJTUFMIHx8CiAgICBuZXh0LnR5cGUgPT0gVG9rZW5UeXBlLklERU5USUZJRVIgfHwKICAgIG5leHQudHlwZSA9PSBUb2tlblR5cGUuSU5UIHx8CiAgICBuZXh0LnR5cGUgPT0gVG9rZW5UeXBlLlNUUklORyB8fAogICAgb3B0aW9uYWwoJ3snLCBuZXh0KSB8fAogICAgb3B0aW9uYWwoJygnLCBuZXh0KSB8fAogICAgb3B0aW9uYWwoJ1snLCBuZXh0KSB8fAogICAgb3B0aW9uYWwoJ1tdJywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCc8JywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCchJywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCctJywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCd+JywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCcrKycsIG5leHQpIHx8CiAgICBvcHRpb25hbCgnLS0nLCBuZXh0KTsKCi8vLyBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBbdG9rZW5dIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgdGhlIHN0YXJ0IG9mCi8vLyBhIG5ldyBzdGF0ZW1lbnQgZm9yIHRoZSBwdXJwb3NlcyBvZiByZWNvdmVyeS4KYm9vbCBsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChUb2tlbiB0b2tlbikgPT4gaXNPbmVPZk9yRW9mKHRva2VuLCBjb25zdCBbCiAgICAgICdAJywKICAgICAgJ2Fzc2VydCcsICdicmVhaycsICdjb250aW51ZScsICdkbycsICdlbHNlJywgJ2ZpbmFsJywgJ2ZvcicsIC8vCiAgICAgICdpZicsICdyZXR1cm4nLCAnc3dpdGNoJywgJ3RyeScsICd2YXInLCAndm9pZCcsICd3aGlsZScsIC8vCiAgICBdKTsKCi8vIFRPRE8oYWhlKTogUmVtb3ZlIHdoZW4gYW5hbHl6ZXIgc3VwcG9ydHMgZ2VuZXJhbGl6ZWQgZnVuY3Rpb24gc3ludGF4Lgp0eXBlZGVmIF9NZXNzYWdlV2l0aEFyZ3VtZW50PFQ+ID0gTWVzc2FnZSBGdW5jdGlvbihUKTsKgTQATk48ATkBUQFAAScBIgEwAU1PMgRLUToaTyFQAUoOQQFROCg4AUYSQQFJO08BUTUmPwFRSjhRAUZRAUwnTQFNJiw7AU8oSQFNFz8BURApNQFKPkUBUDUmPQFJSwFHEyY1AUw+KDQ4AU4mKTgBUCc3AUtHAU8xKzsBTy0yQQFCTQFRLTJHAUUTTwFNNQZNPx4vPwFMBk9QNx4/AU0TKjkBSEIGTyc2RgFHESY1AVE2MkIBUUNEMi0BTxlNAVEYRwFQTys7AVALQQFNKDgBTC4oNwFLKjkBSSNJARYBSBAcAUoTKwFDFwE2HQFRHwFKKQFOICoBQAEmIjAcIiQtKDorTU5GKz8BHgFOPC83MUkvEQQCAUswLRk4JSMqKSIlGxsbHBsbGxscGgFLMkkLRkIIAUk3ATpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2lkZW50aWZpZXJfY29udGV4dC5kYXJ0O3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvY2xhc3Nfa2luZC5kYXJ0gdcvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIuY2xhc3Nfa2luZDsKCmVudW0gQ2xhc3NLaW5kIHsKICAvLy8gQSBjbGFzcyBkZWNsYXJhdGlvbi4gTm90IGluY2x1ZGluZyBhIG5hbWVkIG1peGluIGRlY2xhcmF0aW9uLgogIENsYXNzLAoKICAvLy8gQSBtaXhpbiBkZWNsYXJhdGlvbi4gTm90IGluY2x1ZGluZyBhIG5hbWVkIG1peGluIGRlY2xhcmF0aW9uLgogIE1peGluLAoKICAvLy8gQW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLgogIEV4dGVuc2lvbiwKfQoSAE5OPAEhARFECQFECQEgDQIBMnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvY2xhc3Nfa2luZC5kYXJ0PHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvbWVtYmVyX2tpbmQuZGFydIOeLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLm1lbWJlcl9raW5kOwoKZW51bSBNZW1iZXJLaW5kIHsKICAvLy8gQSBjYXRjaCBibG9jaywgbm90IGEgcmVhbCBtZW1iZXIuCiAgQ2F0Y2gsCgogIC8vLyBBIGZhY3RvcnkKICBGYWN0b3J5LAoKICAvLy8gT2xkLXN0eWxlIHR5cGVkZWYuCiAgRnVuY3Rpb25UeXBlQWxpYXMsCgogIC8vLyBPbGQtc3R5bGUgZnVuY3Rpb24tdHlwZWQgcGFyYW1ldGVyLCBub3QgYSByZWFsIG1lbWJlci4KICBGdW5jdGlvblR5cGVkUGFyYW1ldGVyLAoKICAvLy8gQSBnZW5lcmFsaXplZCBmdW5jdGlvbiB0eXBlLCBub3QgYSByZWFsIG1lbWJlci4KICBHZW5lcmFsaXplZEZ1bmN0aW9uVHlwZSwKCiAgLy8vIEEgbG9jYWwgZnVuY3Rpb24uCiAgTG9jYWwsCgogIC8vLyBBIG5vbi1zdGF0aWMgbWV0aG9kIGluIGEgY2xhc3MgKGluY2x1ZGluZyBjb25zdHJ1Y3RvcnMpLgogIE5vblN0YXRpY01ldGhvZCwKCiAgLy8vIEEgc3RhdGljIG1ldGhvZCBpbiBhIGNsYXNzLgogIFN0YXRpY01ldGhvZCwKCiAgLy8vIEEgdG9wLWxldmVsIG1ldGhvZC4KICBUb3BMZXZlbE1ldGhvZCwKCiAgLy8vIEFuIGluc3RhbmNlIGZpZWxkIGluIGEgY2xhc3MuCiAgTm9uU3RhdGljRmllbGQsCgogIC8vLyBBIHN0YXRpYyBmaWVsZCBpbiBhIGNsYXNzLgogIFN0YXRpY0ZpZWxkLAoKICAvLy8gQSB0b3AtbGV2ZWwgZmllbGQuCiAgVG9wTGV2ZWxGaWVsZCwKfQotAE5OPAEiARIoCQEQCwEZFQE9GgE2GwEYCQE/EwEiEAEaEgEkEgEhDwEZEQIBM3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbWVtYmVyX2tpbmQuZGFydEFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL3RvcF9sZXZlbF9wYXJzZXIuZGFydIL5Ly8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLnRvcF9sZXZlbF9wYXJzZXI7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnY2xhc3Nfa2luZC5kYXJ0JyBzaG93IENsYXNzS2luZDsKCmltcG9ydCAnY2xhc3NfbWVtYmVyX3BhcnNlci5kYXJ0JyBzaG93IENsYXNzTWVtYmVyUGFyc2VyOwoKaW1wb3J0ICdsaXN0ZW5lci5kYXJ0JyBzaG93IExpc3RlbmVyOwoKLy8vIFBhcnNlciB3aGljaCBvbmx5IHBhcnNlcyB0b3AtbGV2ZWwgZWxlbWVudHMsIGJ1dCBpZ25vcmVzIHRoZWlyIGJvZGllcy4KLy8vIFVzZSBbUGFyc2VyXSB0byBwYXJzZSBldmVyeXRoaW5nLgpjbGFzcyBUb3BMZXZlbFBhcnNlciBleHRlbmRzIENsYXNzTWVtYmVyUGFyc2VyIHsKICBUb3BMZXZlbFBhcnNlcihMaXN0ZW5lciBsaXN0ZW5lcikgOiBzdXBlcihsaXN0ZW5lcik7CgogIFRva2VuIHBhcnNlQ2xhc3NPck1peGluQm9keShDbGFzc0tpbmQga2luZCwgVG9rZW4gdG9rZW4pID0+CiAgICAgIHNraXBDbGFzc09yTWl4aW5Cb2R5KHRva2VuKTsKfQoYAE5OPAEnAS4BKQE6ASYBSyYxNwE+IwIBOHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdG9wX2xldmVsX3BhcnNlci5kYXJ0NXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvdXRpbC5kYXJ0m1YvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIudXRpbDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgVHJlZU5vZGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgbm9MZW5ndGg7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JwogICAgc2hvdyBCZWdpblRva2VuLCBTaW1wbGVUb2tlbiwgU3ludGhldGljVG9rZW4sIFRva2VuVHlwZTsKCi8vLyBSZXR1cm5zIHRydWUgaWYgW3Rva2VuXSBpcyB0aGUgc3ltYm9sIG9yIGtleXdvcmQgW3ZhbHVlXS4KYm9vbCBvcHRpb25hbChTdHJpbmcgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgcmV0dXJuIGlkZW50aWNhbCh2YWx1ZSwgdG9rZW4uc3RyaW5nVmFsdWUpOwp9CgovLy8gUmV0dXJucyB0aGUgdG9rZW4gYmVmb3JlIHRoZSBjbG9zZSBicmFjZSwgYnJhY2tldCwgb3IgcGFyZW50aGVzaXMKLy8vIGFzc29jaWF0ZWQgd2l0aCBbbGVmdF0uIEZvciAnPCcsIGl0IG1heSByZXR1cm4gYG51bGxgLgpUb2tlbiBiZWZvcmVDbG9zZUJyYWNlVG9rZW5Gb3IoQmVnaW5Ub2tlbiBsZWZ0KSB7CiAgVG9rZW4gZW5kVG9rZW4gPSBsZWZ0LmVuZFRva2VuOwogIGlmIChlbmRUb2tlbiA9PSBudWxsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgVG9rZW4gdG9rZW4gPSBsZWZ0OwogIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogIHdoaWxlIChuZXh0ICE9IGVuZFRva2VuICYmIG5leHQgIT0gbmV4dC5uZXh0KSB7CiAgICB0b2tlbiA9IG5leHQ7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICB9CiAgcmV0dXJuIHRva2VuOwp9CgovLy8gUmV0dXJuIFt0b2tlbl0gb3IgYSB0b2tlbiBiZWZvcmUgW3Rva2VuXSB3aGljaCBpcyBlaXRoZXIKLy8vIG5vdCBzeW50aGV0aWMgb3Igc3ludGhldGljIHdpdGggbm9uLXplcm8gbGVuZ3RoLgpUb2tlbiBmaW5kUHJldmlvdXNOb25aZXJvTGVuZ3RoVG9rZW4oVG9rZW4gdG9rZW4pIHsKICB3aGlsZSAodG9rZW4uaXNTeW50aGV0aWMgJiYgdG9rZW4ubGVuZ3RoID09IDApIHsKICAgIFRva2VuIHByZXZpb3VzID0gdG9rZW4uYmVmb3JlU3ludGhldGljOwogICAgaWYgKHByZXZpb3VzID09IG51bGwpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICB0b2tlbiA9IHByZXZpb3VzOwogIH0KICByZXR1cm4gdG9rZW47Cn0KCi8vLyBSZXR1cm4gW3Rva2VuXSBvciBhIHRva2VuIGFmdGVyIFt0b2tlbl0gd2hpY2ggaXMgZWl0aGVyCi8vLyBub3Qgc3ludGhldGljIG9yIHN5bnRoZXRpYyB3aXRoIG5vbi16ZXJvIGxlbmd0aC4KLy8vIFRoaXMgbWF5IHJldHVybiBFT0YgaWYgdGhlcmUgYXJlIG5vIG1vcmUgbm9uLXN5bnRoZXRpYyB0b2tlbnMgaW4gdGhlIHN0cmVhbS4KVG9rZW4gZmluZE5vblplcm9MZW5ndGhUb2tlbihUb2tlbiB0b2tlbikgewogIHdoaWxlICh0b2tlbi5pc1N5bnRoZXRpYyAmJiB0b2tlbi5sZW5ndGggPT0gMCAmJiAhdG9rZW4uaXNFb2YpIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICB9CiAgcmV0dXJuIHRva2VuOwp9CgovLy8gQSBudWxsLWF3YXJlIGFsdGVybmF0aXZlIHRvIGB0b2tlbi5vZmZzZXRgLiAgSWYgW3Rva2VuXSBpcyBgbnVsbGAsIHJldHVybnMKLy8vIGBUcmVlTm9kZS5ub09mZnNldGAuCmludCBvZmZzZXRGb3JUb2tlbihUb2tlbiB0b2tlbikgewogIHJldHVybiB0b2tlbiA9PSBudWxsID8gVHJlZU5vZGUubm9PZmZzZXQgOiB0b2tlbi5vZmZzZXQ7Cn0KCmJvb2wgaXNEaWdpdChpbnQgYykgPT4gYyA+PSAweDMwICYmIGMgPD0gMHgzOTsKCmJvb2wgaXNMZXR0ZXIoaW50IGMpID0+IGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEgfHwgYyA+PSAweDYxICYmIGMgPD0gMHg3QTsKCmJvb2wgaXNMZXR0ZXJPckRpZ2l0KGludCBjKSA9PiBpc0xldHRlcihjKSB8fCBpc0RpZ2l0KGMpOwoKYm9vbCBpc1doaXRlc3BhY2UoaW50IGMpID0+IGMgPT0gMHgyMCB8fCBjID09IDB4QSB8fCBjID09IDB4RCB8fCBjID09IDB4OTsKCi8vLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdG9rZW4gbWF0Y2hlcyBvbmUgb2YgdGhlIGdpdmVuIHZhbHVlcy4KYm9vbCBpc09uZU9mKFRva2VuIHRva2VuLCBJdGVyYWJsZTxTdHJpbmc+IHZhbHVlcykgewogIGZvciAoU3RyaW5nIHRva2VuVmFsdWUgaW4gdmFsdWVzKSB7CiAgICBpZiAob3B0aW9uYWwodG9rZW5WYWx1ZSwgdG9rZW4pKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KCi8vLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdG9rZW4gbWF0Y2hlcyBvbmUgb2YgdGhlIGdpdmVuIHZhbHVlcyBvciBpcyBFT0YuCmJvb2wgaXNPbmVPZk9yRW9mKFRva2VuIHRva2VuLCBJdGVyYWJsZTxTdHJpbmc+IHZhbHVlcykgewogIGZvciAoU3RyaW5nIHRva2VuVmFsdWUgaW4gdmFsdWVzKSB7CiAgICBpZiAob3B0aW9uYWwodG9rZW5WYWx1ZSwgdG9rZW4pKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KICByZXR1cm4gdG9rZW4uaXNFb2Y7Cn0KCi8vLyBBIG51bGwtYXdhcmUgYWx0ZXJuYXRpdmUgdG8gYHRva2VuLmxlbmd0aGAuICBJZiBbdG9rZW5dIGlzIGBudWxsYCwgcmV0dXJucwovLy8gW25vTGVuZ3RoXS4KaW50IGxlbmd0aEZvclRva2VuKFRva2VuIHRva2VuKSB7CiAgcmV0dXJuIHRva2VuID09IG51bGwgPyBub0xlbmd0aCA6IHRva2VuLmxlbmd0aDsKfQoKLy8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3BhbiBmcm9tIFtiZWdpbl0gdG8gW2VuZF0gKGluY2x1c2l2ZSkuIElmIGJvdGgKLy8vIHRva2VucyBhcmUgbnVsbCwgcmV0dXJuIFtub0xlbmd0aF0uIElmIG9uZSBvZiB0aGUgdG9rZW5zIGFyZSBudWxsLCByZXR1cm4KLy8vIHRoZSBsZW5ndGggb2YgdGhlIG90aGVyIHRva2VuLgppbnQgbGVuZ3RoT2ZTcGFuKFRva2VuIGJlZ2luLCBUb2tlbiBlbmQpIHsKICBpZiAoYmVnaW4gPT0gbnVsbCkgcmV0dXJuIGxlbmd0aEZvclRva2VuKGVuZCk7CiAgaWYgKGVuZCA9PSBudWxsKSByZXR1cm4gbGVuZ3RoRm9yVG9rZW4oYmVnaW4pOwogIHJldHVybiBlbmQub2Zmc2V0ICsgZW5kLmxlbmd0aCAtIGJlZ2luLm9mZnNldDsKfQoKVG9rZW4gc2tpcE1ldGFkYXRhKFRva2VuIHRva2VuKSB7CiAgdG9rZW4gPSB0b2tlbi5uZXh0OwogIGFzc2VydChvcHRpb25hbCgnQCcsIHRva2VuKSk7CiAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICB0b2tlbiA9IG5leHQ7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIHdoaWxlIChvcHRpb25hbCgnLicsIG5leHQpKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfQogICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkgJiYgIW5leHQuZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICB9CiAgcmV0dXJuIHRva2VuOwp9CgovLy8gU3BsaXQgYD49YCBpbnRvIHR3byBzZXBhcmF0ZSB0b2tlbnMuCi8vLyBDYWxsIFtUb2tlbi5zZXROZXh0XSB0byBhZGQgdGhlIHRva2VuIHRvIHRoZSBzdHJlYW0uClRva2VuIHNwbGl0R3RFcShUb2tlbiB0b2tlbikgewogIGFzc2VydChvcHRpb25hbCgnPj0nLCB0b2tlbikpOwogIHJldHVybiBuZXcgU2ltcGxlVG9rZW4oCiAgICAgIFRva2VuVHlwZS5HVCwgdG9rZW4uY2hhck9mZnNldCwgdG9rZW4ucHJlY2VkaW5nQ29tbWVudHMpCiAgICAuLnNldE5leHQobmV3IFNpbXBsZVRva2VuKFRva2VuVHlwZS5FUSwgdG9rZW4uY2hhck9mZnNldCArIDEpCiAgICAgIC8vIFNldCBuZXh0IHJhdGhlciB0aGFuIGNhbGxpbmcgVG9rZW4uc2V0TmV4dAogICAgICAvLyBzbyB0aGF0IHRoZSBwcmV2aW91cyB0b2tlbiBpcyBub3Qgc2V0LgogICAgICAuLm5leHQgPSB0b2tlbi5uZXh0KTsKfQoKLy8vIFNwbGl0IGA+PmAgaW50byB0d28gc2VwYXJhdGUgdG9rZW5zLgovLy8gQ2FsbCBbVG9rZW4uc2V0TmV4dF0gdG8gYWRkIHRoZSB0b2tlbiB0byB0aGUgc3RyZWFtLgpTaW1wbGVUb2tlbiBzcGxpdEd0R3QoVG9rZW4gdG9rZW4pIHsKICBhc3NlcnQob3B0aW9uYWwoJz4+JywgdG9rZW4pKTsKICByZXR1cm4gbmV3IFNpbXBsZVRva2VuKAogICAgICBUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLnByZWNlZGluZ0NvbW1lbnRzKQogICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQgKyAxKQogICAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgICAgLy8gc28gdGhhdCB0aGUgcHJldmlvdXMgdG9rZW4gaXMgbm90IHNldC4KICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCk7Cn0KCi8vLyBTcGxpdCBgPj49YCBpbnRvIHRocmVlIHNlcGFyYXRlIHRva2Vucy4KLy8vIENhbGwgW1Rva2VuLnNldE5leHRdIHRvIGFkZCB0aGUgdG9rZW4gdG8gdGhlIHN0cmVhbS4KVG9rZW4gc3BsaXRHdEd0RXEoVG9rZW4gdG9rZW4pIHsKICBhc3NlcnQob3B0aW9uYWwoJz4+PScsIHRva2VuKSk7CiAgcmV0dXJuIG5ldyBTaW1wbGVUb2tlbigKICAgICAgVG9rZW5UeXBlLkdULCB0b2tlbi5jaGFyT2Zmc2V0LCB0b2tlbi5wcmVjZWRpbmdDb21tZW50cykKICAgIC4uc2V0TmV4dChuZXcgU2ltcGxlVG9rZW4oVG9rZW5UeXBlLkdULCB0b2tlbi5jaGFyT2Zmc2V0ICsgMSkKICAgICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuRVEsIHRva2VuLmNoYXJPZmZzZXQgKyAyKQogICAgICAgIC8vIFNldCBuZXh0IHJhdGhlciB0aGFuIGNhbGxpbmcgVG9rZW4uc2V0TmV4dAogICAgICAgIC8vIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRva2VuIGlzIG5vdCBzZXQuCiAgICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCkpOwp9CgovLy8gU3BsaXQgYD4+PWAgaW50byB0d28gc2VwYXJhdGUgdG9rZW5zLi4uIGA+YCBmb2xsb3dlZCBieSBgPj1gLgovLy8gQ2FsbCBbVG9rZW4uc2V0TmV4dF0gdG8gYWRkIHRoZSB0b2tlbiB0byB0aGUgc3RyZWFtLgpUb2tlbiBzcGxpdEd0RnJvbUd0R3RFcShUb2tlbiB0b2tlbikgewogIGFzc2VydChvcHRpb25hbCgnPj49JywgdG9rZW4pKTsKICByZXR1cm4gbmV3IFNpbXBsZVRva2VuKAogICAgICBUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLnByZWNlZGluZ0NvbW1lbnRzKQogICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuR1RfRVEsIHRva2VuLmNoYXJPZmZzZXQgKyAxKQogICAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgICAgLy8gc28gdGhhdCB0aGUgcHJldmlvdXMgdG9rZW4gaXMgbm90IHNldC4KICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCk7Cn0KCi8vLyBTcGxpdCBgPj4+YCBpbnRvIHR3byBzZXBhcmF0ZSB0b2tlbnMuLi4gYD5gIGZvbGxvd2VkIGJ5IGA+PmAuCi8vLyBDYWxsIFtUb2tlbi5zZXROZXh0XSB0byBhZGQgdGhlIHRva2VuIHRvIHRoZSBzdHJlYW0uClRva2VuIHNwbGl0R3RGcm9tR3RHdEd0KFRva2VuIHRva2VuKSB7CiAgYXNzZXJ0KG9wdGlvbmFsKCc+Pj4nLCB0b2tlbikpOwogIHJldHVybiBuZXcgU2ltcGxlVG9rZW4oCiAgICAgIFRva2VuVHlwZS5HVCwgdG9rZW4uY2hhck9mZnNldCwgdG9rZW4ucHJlY2VkaW5nQ29tbWVudHMpCiAgICAuLnNldE5leHQobmV3IFNpbXBsZVRva2VuKFRva2VuVHlwZS5HVF9HVCwgdG9rZW4uY2hhck9mZnNldCArIDEpCiAgICAgIC8vIFNldCBuZXh0IHJhdGhlciB0aGFuIGNhbGxpbmcgVG9rZW4uc2V0TmV4dAogICAgICAvLyBzbyB0aGF0IHRoZSBwcmV2aW91cyB0b2tlbiBpcyBub3Qgc2V0LgogICAgICAuLm5leHQgPSB0b2tlbi5uZXh0KTsKfQoKLy8vIFNwbGl0IGA+Pj49YCBpbnRvIHR3byBzZXBhcmF0ZSB0b2tlbnMuLi4gYD5gIGZvbGxvd2VkIGJ5IGA+Pj1gLgovLy8gQ2FsbCBbVG9rZW4uc2V0TmV4dF0gdG8gYWRkIHRoZSB0b2tlbiB0byB0aGUgc3RyZWFtLgpUb2tlbiBzcGxpdEd0RnJvbUd0R3RHdEVxKFRva2VuIHRva2VuKSB7CiAgYXNzZXJ0KG9wdGlvbmFsKCc+Pj49JywgdG9rZW4pKTsKICByZXR1cm4gbmV3IFNpbXBsZVRva2VuKAogICAgICBUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLnByZWNlZGluZ0NvbW1lbnRzKQogICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuR1RfR1RfRVEsIHRva2VuLmNoYXJPZmZzZXQgKyAxKQogICAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgICAgLy8gc28gdGhhdCB0aGUgcHJldmlvdXMgdG9rZW4gaXMgbm90IHNldC4KICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCk7Cn0KCi8vLyBSZXR1cm4gYSBzeW50aGV0aWMgYDxgIGZvbGxvd2VkIGJ5IFtuZXh0XS4KLy8vIENhbGwgW1Rva2VuLnNldE5leHRdIHRvIGFkZCB0aGUgdG9rZW4gdG8gdGhlIHN0cmVhbS4KVG9rZW4gc3ludGhldGljR3QoVG9rZW4gbmV4dCkgewogIHJldHVybiBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkdULCBuZXh0LmNoYXJPZmZzZXQpCiAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgIC8vIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRva2VuIGlzIG5vdCBzZXQuCiAgICAuLm5leHQgPSBuZXh0Owp9CoDWAE5OPAEbATABLAElASI9AT4rLgIBRjsyIhoRBBYbMhIXBBACAT01NDMsHA0GFgQQAgE8NVEsQxgEEAIBTxkiOwIBLwFKAToBSwFENSYnEwYEEAIBTjomJxMGBBYCAU8QIjICAU5OIysxMTECASIWIBsbEhciFBkfFhsIBj0dGQYEEAIBKTkfIRo/QjQwHAIBKTklIRo/QjQwHAIBLDkhIho/QkQ2Mh8CAUI5JyIaP0U0MBwCAUI5JyIaP0U0MBwCAUQ5KSMaP0g0MBwCAS85IDsyLhMCASxwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3V0aWwuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc291cmNlL3N0YWNrX2xpc3RlbmVyLmRhcnTAAECeLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc3RhY2tfbGlzdGVuZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBBc3luY01hcmtlciwgRXhwcmVzc2lvbiwgRnVuY3Rpb25Ob2RlLCBUcmVlTm9kZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBDb2RlLAogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgY29kZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzLAogICAgICAgIGNvZGVOYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb24sCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5OwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcKICAgIHNob3cgTGlzdGVuZXIsIE1lbWJlcktpbmQsIFBhcnNlciwgbGVuZ3RoT2ZTcGFuLCBvZmZzZXRGb3JUb2tlbjsKCmltcG9ydCAnLi4vcGFyc2VyL2lkZW50aWZpZXJfY29udGV4dC5kYXJ0JyBzaG93IElkZW50aWZpZXJDb250ZXh0OwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JwogICAgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuaGFuZGxlZCwgdW5pbXBsZW1lbnRlZCwgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJy4uL3F1b3RlLmRhcnQnIHNob3cgdW5lc2NhcGVTdHJpbmc7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAndmFsdWVfa2luZHMuZGFydCc7CgplbnVtIE51bGxWYWx1ZSB7CiAgQXJndW1lbnRzLAogIEFzLAogIEF3YWl0VG9rZW4sCiAgQmxvY2ssCiAgQnJlYWtUYXJnZXQsCiAgQ2FzY2FkZVJlY2VpdmVyLAogIENvbWJpbmF0b3JzLAogIENvbW1lbnRzLAogIENvbmRpdGlvbmFsVXJpcywKICBDb25kaXRpb25hbGx5U2VsZWN0ZWRJbXBvcnQsCiAgQ29uc3RydWN0b3JJbml0aWFsaXplclNlcGFyYXRvciwKICBDb25zdHJ1Y3RvckluaXRpYWxpemVycywKICBDb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cywKICBDb250aW51ZVRhcmdldCwKICBEZWZlcnJlZCwKICBEb2N1bWVudGF0aW9uQ29tbWVudCwKICBFeHByZXNzaW9uLAogIEV4dGVuZHNDbGF1c2UsCiAgRmllbGRJbml0aWFsaXplciwKICBGb3JtYWxQYXJhbWV0ZXJzLAogIEZ1bmN0aW9uQm9keSwKICBGdW5jdGlvbkJvZHlBc3luY1Rva2VuLAogIEZ1bmN0aW9uQm9keVN0YXJUb2tlbiwKICBJZGVudGlmaWVyLAogIElkZW50aWZpZXJMaXN0LAogIEluaXRpYWxpemVycywKICBMYWJlbHMsCiAgTWV0YWRhdGEsCiAgTW9kaWZpZXJzLAogIE5hbWUsCiAgUGFyYW1ldGVyRGVmYXVsdFZhbHVlLAogIFByZWZpeCwKICBTdHJpbmdMaXRlcmFsLAogIFN3aXRjaFNjb3BlLAogIFRva2VuLAogIFR5cGUsCiAgVHlwZUFyZ3VtZW50cywKICBUeXBlQnVpbGRlckxpc3QsCiAgVHlwZUxpc3QsCiAgVHlwZVZhcmlhYmxlLAogIFR5cGVWYXJpYWJsZXMsCiAgVmFyRmluYWxPckNvbnN0VG9rZW4sCiAgV2l0aENsYXVzZSwKfQoKYWJzdHJhY3QgY2xhc3MgU3RhY2tMaXN0ZW5lciBleHRlbmRzIExpc3RlbmVyIHsKICBmaW5hbCBTdGFjayBzdGFjayA9IG5ldyBTdGFjaygpOwoKICAvLy8gQ2hlY2tzIHRoYXQgW3ZhbHVlXSBtYXRjaGVzIHRoZSBleHBlY3RlZCBba2luZF0uCiAgLy8vCiAgLy8vIFVzZSB0aGlzIGluIGFzc2VydCBzdGF0ZW1lbnRzIGxpa2UKICAvLy8KICAvLy8gICAgIGFzc2VydChjaGVja1ZhbHVlKHRva2VuLCBWYWx1ZUtpbmQuVG9rZW4sIHZhbHVlKSk7CiAgLy8vCiAgLy8vIHRvIGRvY3VtZW50IGFuZCB2YWxpZGF0ZSB0aGUgZXhwZWN0ZWQgdmFsdWUga2luZC4KICBib29sIGNoZWNrVmFsdWUoVG9rZW4gdG9rZW4sIFZhbHVlS2luZCBraW5kLCBPYmplY3QgdmFsdWUpIHsKICAgIGlmICgha2luZC5jaGVjayh2YWx1ZSkpIHsKICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAnVW5leHBlY3RlZCB2YWx1ZSBgJHt2YWx1ZX1gICgke3ZhbHVlLnJ1bnRpbWVUeXBlfSkuICcKICAgICAgICAgICdFeHBlY3RlZCAke2tpbmR9Lic7CiAgICAgIGlmICh0b2tlbiAhPSBudWxsKSB7CiAgICAgICAgLy8gSWYgb2Zmc2V0IGlzIGF2YWlsYWJsZSByZXBvcnQgYW5kIGludGVybmFsIHByb2JsZW0gdG8gc2hvdyB0aGUKICAgICAgICAvLyBwYXJzZWQgY29kZSBpbiB0aGUgb3V0cHV0LgogICAgICAgIHRocm93IGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgbmV3IE1lc3NhZ2UobnVsbCwgbWVzc2FnZTogbWVzc2FnZSksIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbWVzc2FnZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gQ2hlY2tzIHRoZSB0b3Agb2YgdGhlIGN1cnJlbnQgc3RhY2sgYWdhaW5zdCBba2luZHNdLiBJZiBhIG1pc21hdGNoIGlzCiAgLy8vIGZvdW5kLCBhIHRvcCBvZiB0aGUgY3VycmVudCBzdGFjayBpcyBwcmludCBhbG9uZyB3aXRoIHRoZSBleHBlY3RlZCBba2luZHNdCiAgLy8vIG1hcmtpbmcgdGhlIGZyYW1lcyB0aGF0IGRvbid0IG1hdGNoLCBhbmQgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAvLy8KICAvLy8gVXNlIHRoaXMgaW4gYXNzZXJ0IHN0YXRlbWVudHMgbGlrZQogIC8vLwogIC8vLyAgICAgYXNzZXJ0KGNoZWNrU3RhdGUodG9rZW4sIFtWYWx1ZUtpbmQuSW50ZWdlciwgVmFsdWVLaW5kLlN0cmluZ09yTnVsbF0pKQogIC8vLwogIC8vLyB0byBkb2N1bWVudCB0aGUgZXhwZWN0ZWQgc3RhY2sgYW5kIGdldCBlYXJsaWVyIGVycm9ycyBvbiB1bmV4cGVjdGVkIHN0YWNrCiAgLy8vIGNvbnRlbnQuCiAgYm9vbCBjaGVja1N0YXRlKFRva2VuIHRva2VuLCBMaXN0PFZhbHVlS2luZD4ga2luZHMpIHsKICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CiAgICBmb3IgKGludCBraW5kSW5kZXggPSAwOyBraW5kSW5kZXggPCBraW5kcy5sZW5ndGg7IGtpbmRJbmRleCsrKSB7CiAgICAgIGludCBzdGFja0luZGV4ID0gc3RhY2suYXJyYXlMZW5ndGggLSBraW5kSW5kZXggLSAxOwogICAgICBWYWx1ZUtpbmQga2luZCA9IGtpbmRzW2tpbmRJbmRleF07CiAgICAgIGlmIChzdGFja0luZGV4ID49IDApIHsKICAgICAgICBPYmplY3QgdmFsdWUgPSBzdGFjay5hcnJheVtzdGFja0luZGV4XTsKICAgICAgICBpZiAoIWtpbmQuY2hlY2sodmFsdWUpKSB7CiAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKCiAgICAgIFN0cmluZyBzYWZlVG9TdHJpbmcoT2JqZWN0IG9iamVjdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gJyRvYmplY3QnOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8vIEp1ZGdtZW50cyBmYWlsIG9uIHRvU3RyaW5nLgogICAgICAgICAgcmV0dXJuIG9iamVjdC5ydW50aW1lVHlwZS50b1N0cmluZygpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgU3RyaW5nIHBhZExlZnQoT2JqZWN0IG9iamVjdCwgaW50IGxlbmd0aCkgewogICAgICAgIFN0cmluZyB0ZXh0ID0gc2FmZVRvU3RyaW5nKG9iamVjdCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoIDwgbGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gJyAnICogKGxlbmd0aCAtIHRleHQubGVuZ3RoKSArIHRleHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0ZXh0OwogICAgICB9CgogICAgICBTdHJpbmcgcGFkUmlnaHQoT2JqZWN0IG9iamVjdCwgaW50IGxlbmd0aCkgewogICAgICAgIFN0cmluZyB0ZXh0ID0gc2FmZVRvU3RyaW5nKG9iamVjdCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoIDwgbGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gdGV4dCArICcgJyAqIChsZW5ndGggLSB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0ZXh0OwogICAgICB9CgogICAgICAvLyBDb21wdXRlIGtpbmQvc3RhY2sgZnJhbWUgaW5mb3JtYXRpb24gZm9yIGFsbCBleHBlY3RlZCB2YWx1ZXMgcGx1cyAzIG1vcmUKICAgICAgLy8gc3RhY2sgZWxlbWVudHMgaWYgYXZhaWxhYmxlLgogICAgICBmb3IgKGludCBraW5kSW5kZXggPSAwOyBraW5kSW5kZXggPCBraW5kcy5sZW5ndGggKyAzOyBraW5kSW5kZXgrKykgewogICAgICAgIGludCBzdGFja0luZGV4ID0gc3RhY2suYXJyYXlMZW5ndGggLSBraW5kSW5kZXggLSAxOwogICAgICAgIGlmIChzdGFja0luZGV4IDwgMCAmJiBraW5kSW5kZXggPj0ga2luZHMubGVuZ3RoKSB7CiAgICAgICAgICAvLyBObyBtb3JlIHN0YWNrIGVsZW1lbnRzIG5vciBraW5kcyB0byBkaXNwbGF5LgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKHBhZExlZnQoa2luZEluZGV4LCA0KSk7CiAgICAgICAgc2Iud3JpdGUoJzogJyk7CiAgICAgICAgVmFsdWVLaW5kIGtpbmQ7CiAgICAgICAgaWYgKGtpbmRJbmRleCA8IGtpbmRzLmxlbmd0aCkgewogICAgICAgICAga2luZCA9IGtpbmRzW2tpbmRJbmRleF07CiAgICAgICAgICBzYi53cml0ZShwYWRSaWdodChraW5kLCA2MCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzYi53cml0ZShwYWRSaWdodCgnLS0tJywgNjApKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YWNrSW5kZXggPj0gMCkgewogICAgICAgICAgT2JqZWN0IHZhbHVlID0gc3RhY2suYXJyYXlbc3RhY2tJbmRleF07CiAgICAgICAgICBpZiAoa2luZCA9PSBudWxsIHx8IGtpbmQuY2hlY2sodmFsdWUpKSB7CiAgICAgICAgICAgIHNiLndyaXRlKCcgJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzYi53cml0ZSgnKicpOwogICAgICAgICAgfQogICAgICAgICAgc2Iud3JpdGUoc2FmZVRvU3RyaW5nKHZhbHVlKSk7CiAgICAgICAgICBzYi53cml0ZSgnICgke3ZhbHVlLnJ1bnRpbWVUeXBlfSknKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGtpbmQgPT0gbnVsbCkgewogICAgICAgICAgICBzYi53cml0ZSgnICcpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2Iud3JpdGUoJyonKTsKICAgICAgICAgIH0KICAgICAgICAgIHNiLndyaXRlKCctLS0nKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGVsbigpOwogICAgICB9CgogICAgICBTdHJpbmcgbWVzc2FnZSA9ICckcnVudGltZVR5cGUgZmFpbHVyZVxuJHNiJzsKICAgICAgaWYgKHRva2VuICE9IG51bGwpIHsKICAgICAgICAvLyBJZiBvZmZzZXQgaXMgYXZhaWxhYmxlIHJlcG9ydCBhbmQgaW50ZXJuYWwgcHJvYmxlbSB0byBzaG93IHRoZQogICAgICAgIC8vIHBhcnNlZCBjb2RlIGluIHRoZSBvdXRwdXQuCiAgICAgICAgdGhyb3cgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgICBuZXcgTWVzc2FnZShudWxsLCBtZXNzYWdlOiBtZXNzYWdlKSwgdG9rZW4uY2hhck9mZnNldCwgdXJpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBtZXNzYWdlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VjY2VzczsKICB9CgogIEBvdmVycmlkZQogIFVyaSBnZXQgdXJpOwoKICB2b2lkIGRpc2NhcmQoaW50IG4pIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgIHBvcCgpOwogICAgfQogIH0KCiAgLy8gVE9ETyhhaGUpOiBUaGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUuIE9ubHkgaW1wbGVtZW50ZWQgYnkgYm9keV9idWlsZGVyLmRhcnQKICAvLyBhbmQgYXN0X2J1aWxkZXIuZGFydC4KICB2b2lkIGZpbmlzaEZ1bmN0aW9uKAogICAgICBjb3ZhcmlhbnQgZm9ybWFscywgQXN5bmNNYXJrZXIgYXN5bmNNb2RpZmllciwgY292YXJpYW50IGJvZHkpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZmluaXNoRnVuY3Rpb24iLCAtMSwgdXJpKTsKICB9CgogIC8vIFRPRE8oYWhlKTogVGhpcyBkb2Vzbid0IGJlbG9uZyBoZXJlLiBPbmx5IGltcGxlbWVudGVkIGJ5IGJvZHlfYnVpbGRlci5kYXJ0CiAgLy8gYW5kIGFzdF9idWlsZGVyLmRhcnQuCiAgZHluYW1pYyBmaW5pc2hGaWVsZHMoKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImZpbmlzaEZpZWxkcyIsIC0xLCB1cmkpOwogIH0KCiAgLy8gVE9ETyhhaGUpOiBUaGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUuIE9ubHkgaW1wbGVtZW50ZWQgYnkgYm9keV9idWlsZGVyLmRhcnQKICAvLyBhbmQgYXN0X2J1aWxkZXIuZGFydC4KICBMaXN0PEV4cHJlc3Npb24+IGZpbmlzaE1ldGFkYXRhKFRyZWVOb2RlIHBhcmVudCkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJmaW5pc2hNZXRhZGF0YSIsIC0xLCB1cmkpOwogIH0KCiAgLy8gVE9ETyhhaGUpOiBUaGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUuIE9ubHkgaW1wbGVtZW50ZWQgYnkgYm9keV9idWlsZGVyLmRhcnQKICAvLyBhbmQgYXN0X2J1aWxkZXIuZGFydC4KICB2b2lkIGV4aXRMb2NhbFNjb3BlKCkgPT4gdW5zdXBwb3J0ZWQoImV4aXRMb2NhbFNjb3BlIiwgLTEsIHVyaSk7CgogIC8vIFRPRE8oYWhlKTogVGhpcyBkb2Vzbid0IGJlbG9uZyBoZXJlLiBPbmx5IGltcGxlbWVudGVkIGJ5IGJvZHlfYnVpbGRlci5kYXJ0LgogIGR5bmFtaWMgcGFyc2VTaW5nbGVFeHByZXNzaW9uKAogICAgICBQYXJzZXIgcGFyc2VyLCBUb2tlbiB0b2tlbiwgRnVuY3Rpb25Ob2RlIHBhcmFtZXRlcnMpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZmluaXNoU2luZ2xlRXhwcmVzc2lvbiIsIC0xLCB1cmkpOwogIH0KCiAgdm9pZCBwdXNoKE9iamVjdCBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB1bmhhbmRsZWQoIm51bGwiLCAicHVzaCIsIC0xLCB1cmkpOwogICAgc3RhY2sucHVzaChub2RlKTsKICB9CgogIHZvaWQgcHVzaElmTnVsbChUb2tlbiB0b2tlbk9yTnVsbCwgTnVsbFZhbHVlIG51bGxWYWx1ZSkgewogICAgaWYgKHRva2VuT3JOdWxsID09IG51bGwpIHN0YWNrLnB1c2gobnVsbFZhbHVlKTsKICB9CgogIE9iamVjdCBwZWVrKCkgPT4gc3RhY2suaXNOb3RFbXB0eSA/IHN0YWNrLmxhc3QgOiBudWxsOwoKICBPYmplY3QgcG9wKFtOdWxsVmFsdWUgbnVsbFZhbHVlXSkgewogICAgcmV0dXJuIHN0YWNrLnBvcChudWxsVmFsdWUpOwogIH0KCiAgT2JqZWN0IHBvcElmTm90TnVsbChPYmplY3QgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IHBvcCgpOwogIH0KCiAgdm9pZCBkZWJ1Z0V2ZW50KFN0cmluZyBuYW1lKSB7CiAgICAvLyBwcmludEV2ZW50KG5hbWUpOwogIH0KCiAgdm9pZCBwcmludEV2ZW50KFN0cmluZyBuYW1lKSB7CiAgICBwcmludCgnXG4tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIGZvciAoT2JqZWN0IG8gaW4gc3RhY2sudmFsdWVzKSB7CiAgICAgIFN0cmluZyBzID0gIiAgJG8iOwogICAgICBpbnQgaW5kZXggPSBzLmluZGV4T2YoIlxuIik7CiAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgIHMgPSBzLnN1YnN0cmluZygwLCBpbmRleCkgKyAiLi4uIjsKICAgICAgfQogICAgICBwcmludChzKTsKICAgIH0KICAgIHByaW50KCIgID4+ICRuYW1lIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxvZ0V2ZW50KFN0cmluZyBuYW1lKSB7CiAgICBwcmludEV2ZW50KG5hbWUpOwogICAgdW5oYW5kbGVkKG5hbWUsICIkcnVudGltZVR5cGUiLCAtMSwgdXJpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgZGVidWdFdmVudCgiaGFuZGxlSWRlbnRpZmllciIpOwogICAgaWYgKCF0b2tlbi5pc1N5bnRoZXRpYykgewogICAgICBwdXNoKHRva2VuLmxleGVtZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGlzIGNvbWVzIGZyb20gYSBzeW50aGV0aWMgdG9rZW4gd2hpY2ggaXMgaW5zZXJ0ZWQgYnkgdGhlIHBhcnNlciBpbgogICAgICAvLyBhbiBhdHRlbXB0IHRvIHJlY292ZXIuICBUaGlzIGFsbW9zdCBhbHdheXMgbWVhbnMgdGhhdCB0aGUgcGFyc2VyIGhhcwogICAgICAvLyBnb3R0ZW4gdmVyeSBjb25mdXNlZCBhbmQgd2UgbmVlZCB0byBpZ25vcmUgdGhlIHJlc3VsdHMuCiAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KHRva2VuLmNoYXJPZmZzZXQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9OYW1lKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb05hbWUiKTsKICAgIHB1c2goTnVsbFZhbHVlLklkZW50aWZpZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiSW5pdGlhbGl6ZXIiKTsKICB9CgogIHZvaWQgY2hlY2tFbXB0eShpbnQgY2hhck9mZnNldCkgewogICAgaWYgKHN0YWNrLmlzTm90RW1wdHkpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgIiR7cnVudGltZVR5cGV9Iiwgc3RhY2sudmFsdWVzLmpvaW4oIlxuICAiKSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgdXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiVG9wTGV2ZWxEZWNsYXJhdGlvbiIpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29tcGlsYXRpb25Vbml0KGludCBjb3VudCwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNvbXBpbGF0aW9uVW5pdCIpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NFeHRlbmRzKFRva2VuIGV4dGVuZHNLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc0V4dGVuZHMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5PbihUb2tlbiBvbktleXdvcmQsIGludCB0eXBlQ291bnQpIHsKICAgIGRlYnVnRXZlbnQoIk1peGluT24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NIZWFkZXIoVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCwgVG9rZW4gbmF0aXZlVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNsYXNzSGVhZGVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU1peGluSGVhZGVyKFRva2VuIG1peGluS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiTWl4aW5IZWFkZXIiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3ZlckNsYXNzSGVhZGVyKCkgewogICAgZGVidWdFdmVudCgiUmVjb3ZlckNsYXNzSGVhZGVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcigpIHsKICAgIGRlYnVnRXZlbnQoIlJlY292ZXJNaXhpbkhlYWRlciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgaW50IGludGVyZmFjZXNDb3VudCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NJbXBsZW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9UeXBlQXJndW1lbnRzIik7CiAgICBwdXNoKE51bGxWYWx1ZS5UeXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb1R5cGVWYXJpYWJsZXMiKTsKICAgIHB1c2goTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZShUb2tlbiBsYXN0Q29uc3VtZWQpIHsKICAgIGRlYnVnRXZlbnQoIk5vVHlwZSIpOwogICAgcHVzaChOdWxsVmFsdWUuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0Zvcm1hbFBhcmFtZXRlcnMiKTsKICAgIHB1c2goTnVsbFZhbHVlLkZvcm1hbFBhcmFtZXRlcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0FyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9Bcmd1bWVudHMiKTsKICAgIHB1c2goTnVsbFZhbHVlLkFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keShUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHkiKTsKICAgIHB1c2goTnVsbFZhbHVlLkZ1bmN0aW9uQm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkKFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vRnVuY3Rpb25Cb2R5Iik7CiAgICBwdXNoKE51bGxWYWx1ZS5GdW5jdGlvbkJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0luaXRpYWxpemVycygpIHsKICAgIGRlYnVnRXZlbnQoIk5vSW5pdGlhbGl6ZXJzIik7CiAgICBwdXNoKE51bGxWYWx1ZS5Jbml0aWFsaXplcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxpdGVyYWxTdHJpbmcoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTGl0ZXJhbFN0cmluZyIpOwogICAgcHVzaCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZExpdGVyYWxTdHJpbmciKTsKICAgIGlmIChpbnRlcnBvbGF0aW9uQ291bnQgPT0gMCkgewogICAgICBUb2tlbiB0b2tlbiA9IHBvcCgpOwogICAgICBwdXNoKHVuZXNjYXBlU3RyaW5nKHRva2VuLmxleGVtZSwgdG9rZW4sIHRoaXMpKTsKICAgIH0gZWxzZSB7CiAgICAgIHVuaW1wbGVtZW50ZWQoInN0cmluZyBpbnRlcnBvbGF0aW9uIiwgZW5kVG9rZW4uY2hhck9mZnNldCwgdXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlQ2xhdXNlKFRva2VuIG5hdGl2ZVRva2VuLCBib29sIGhhc05hbWUpIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUNsYXVzZSIpOwogICAgaWYgKGhhc05hbWUpIHsKICAgICAgcG9wKCk7IC8vIFBvcCB0aGUgbmF0aXZlIG5hbWUgd2hpY2ggaXMgYSBTdHJpbmcuCiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZURpcmVjdGl2ZXNPbmx5KCkgewogICAgcG9wKCk7IC8vIERpc2NhcmQgdGhlIG1ldGFkYXRhLgogIH0KCiAgdm9pZCBoYW5kbGVFeHRyYW5lb3VzRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBkZWJ1Z0V2ZW50KCJFeHRyYW5lb3VzRXhwcmVzc2lvbiIpOwogICAgcG9wKCk7IC8vIERpc2NhcmQgdGhlIGV4dHJhbmVvdXMgZXhwcmVzc2lvbi4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2FzZUV4cHJlc3Npb24oVG9rZW4gY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIkNhc2VFeHByZXNzaW9uIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENhdGNoQ2xhdXNlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDYXRjaENsYXVzZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIHN0YXJ0VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJFcnJvcjogJHttZXNzYWdlLm1lc3NhZ2V9Iik7CiAgICBpZiAoaXNJZ25vcmVkRXJyb3IobWVzc2FnZS5jb2RlLCBzdGFydFRva2VuKSkgcmV0dXJuOwogICAgYWRkUHJvYmxlbShtZXNzYWdlLCBvZmZzZXRGb3JUb2tlbihzdGFydFRva2VuKSwKICAgICAgICBsZW5ndGhPZlNwYW4oc3RhcnRUb2tlbiwgZW5kVG9rZW4pKTsKICB9CgogIGJvb2wgaXNJZ25vcmVkRXJyb3IoQ29kZTxkeW5hbWljPiBjb2RlLCBUb2tlbiB0b2tlbikgewogICAgaWYgKGNvZGUgPT0gY29kZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbikgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogSWdub3JlIHRoaXMgZXJyb3IgdW50aWwgd2UgZGVwcmVjYXRlIGBuYXRpdmVgCiAgICAgIC8vIHN1cHBvcnQuCiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChjb2RlID09IGNvZGVDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVycykgewogICAgICAvLyBJZ25vcmVkLiBUaGlzIGVycm9yIGlzIGhhbmRsZWQgYnkgdGhlIEJvZHlCdWlsZGVyLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiB0b2tlbiwgaW50IHN0cmluZ09mZnNldCwgaW50IGxlbmd0aCkgewogICAgYWRkUHJvYmxlbShtZXNzYWdlLCB0b2tlbi5jaGFyT2Zmc2V0ICsgc3RyaW5nT2Zmc2V0LCBsZW5ndGgpOwogIH0KCiAgdm9pZCBhZGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSk7Cn0KCmNsYXNzIFN0YWNrIHsKICBMaXN0PE9iamVjdD4gYXJyYXkgPSBuZXcgTGlzdDxPYmplY3Q+KDgpOwogIGludCBhcnJheUxlbmd0aCA9IDA7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gYXJyYXlMZW5ndGggPiAwOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBhcnJheUxlbmd0aDsKCiAgT2JqZWN0IGdldCBsYXN0IHsKICAgIGZpbmFsIHZhbHVlID0gYXJyYXlbYXJyYXlMZW5ndGggLSAxXTsKICAgIHJldHVybiB2YWx1ZSBpcyBOdWxsVmFsdWUgPyBudWxsIDogdmFsdWU7CiAgfQoKICB2b2lkIHB1c2goT2JqZWN0IHZhbHVlKSB7CiAgICBhcnJheVthcnJheUxlbmd0aCsrXSA9IHZhbHVlOwogICAgaWYgKGFycmF5Lmxlbmd0aCA9PSBhcnJheUxlbmd0aCkgewogICAgICBfZ3JvdygpOwogICAgfQogIH0KCiAgT2JqZWN0IHBvcChOdWxsVmFsdWUgbnVsbFZhbHVlKSB7CiAgICBhc3NlcnQoYXJyYXlMZW5ndGggPiAwKTsKICAgIGZpbmFsIE9iamVjdCB2YWx1ZSA9IGFycmF5Wy0tYXJyYXlMZW5ndGhdOwogICAgYXJyYXlbYXJyYXlMZW5ndGhdID0gbnVsbDsKICAgIGlmICh2YWx1ZSBpcyEgTnVsbFZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0gZWxzZSBpZiAobnVsbFZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gbnVsbFZhbHVlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogIH0KCiAgTGlzdDxPYmplY3Q+IHBvcExpc3QoaW50IGNvdW50LCBMaXN0PE9iamVjdD4gbGlzdCwgTnVsbFZhbHVlIG51bGxWYWx1ZSkgewogICAgYXNzZXJ0KGFycmF5TGVuZ3RoID49IGNvdW50KTsKICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBhcnJheSA9IHRoaXMuYXJyYXk7CiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gYXJyYXlMZW5ndGg7CiAgICBmaW5hbCBpbnQgc3RhcnRJbmRleCA9IGxlbmd0aCAtIGNvdW50OwogICAgYm9vbCBpc1BhcnNlclJlY292ZXJ5ID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgaW50IGFycmF5SW5kZXggPSBzdGFydEluZGV4ICsgaTsKICAgICAgZmluYWwgT2JqZWN0IHZhbHVlID0gYXJyYXlbYXJyYXlJbmRleF07CiAgICAgIGFycmF5W2FycmF5SW5kZXhdID0gbnVsbDsKICAgICAgaWYgKHZhbHVlIGlzIE51bGxWYWx1ZSAmJiBudWxsVmFsdWUgPT0gbnVsbCB8fAogICAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCBudWxsVmFsdWUpKSB7CiAgICAgICAgbGlzdFtpXSA9IG51bGw7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgICBpc1BhcnNlclJlY292ZXJ5ID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodmFsdWUgaXMgTnVsbFZhbHVlKSB7CiAgICAgICAgICBwcmludCh2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGxpc3RbaV0gPSB2YWx1ZTsKICAgICAgfQogICAgfQogICAgYXJyYXlMZW5ndGggLT0gY291bnQ7CgogICAgcmV0dXJuIGlzUGFyc2VyUmVjb3ZlcnkgPyBudWxsIDogbGlzdDsKICB9CgogIExpc3Q8T2JqZWN0PiBnZXQgdmFsdWVzIHsKICAgIGZpbmFsIGludCBsZW5ndGggPSBhcnJheUxlbmd0aDsKICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBsaXN0ID0gbmV3IExpc3Q8T2JqZWN0PihsZW5ndGgpOwogICAgbGlzdC5zZXRSYW5nZSgwLCBsZW5ndGgsIGFycmF5KTsKICAgIHJldHVybiBsaXN0OwogIH0KCiAgdm9pZCBfZ3JvdygpIHsKICAgIGZpbmFsIGludCBsZW5ndGggPSBhcnJheS5sZW5ndGg7CiAgICBmaW5hbCBMaXN0PE9iamVjdD4gbmV3QXJyYXkgPSBuZXcgTGlzdDxPYmplY3Q+KGxlbmd0aCAqIDIpOwogICAgbmV3QXJyYXkuc2V0UmFuZ2UoMCwgbGVuZ3RoLCBhcnJheSwgMCk7CiAgICBhcnJheSA9IG5ld0FycmF5OwogIH0KfQoKLy8vIEhlbHBlciBjb25zdGFudCBmb3IgcG9wcGluZyBhIGxpc3Qgb2YgdGhlIHRvcCBvZiBhIFtTdGFja10uICBUaGlzIGhlbHBlcgovLy8gcmV0dXJucyBudWxsIGluc3RlYWQgb2YgZW1wdHkgbGlzdHMsIGFuZCB0aGUgbGlzdHMgcmV0dXJuZWQgYXJlIG9mIGZpeGVkCi8vLyBsZW5ndGguCmNsYXNzIEZpeGVkTnVsbGFibGVMaXN0PFQ+IHsKICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdCgpOwoKICBMaXN0PFQ+IHBvcChTdGFjayBzdGFjaywgaW50IGNvdW50LCBbTnVsbFZhbHVlIG51bGxWYWx1ZV0pIHsKICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBzdGFjay5wb3BMaXN0KGNvdW50LCBuZXcgTGlzdDxUPihjb3VudCksIG51bGxWYWx1ZSk7CiAgfQoKICBMaXN0PFQ+IHBvcFBhZGRlZChTdGFjayBzdGFjaywgaW50IGNvdW50LCBpbnQgcGFkZGluZywKICAgICAgW051bGxWYWx1ZSBudWxsVmFsdWVdKSB7CiAgICBpZiAoY291bnQg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ICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgc3Vic3RpdHV0ZSwgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICd0eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlOwoKaW1wb3J0ICd0eXBlX3NjaGVtYV9lbnZpcm9ubWVudC5kYXJ0JwogICAgc2hvdyBUeXBlQ29uc3RyYWludCwgVHlwZVNjaGVtYUVudmlyb25tZW50LCBzdWJzdGl0dXRlVHlwZVBhcmFtczsKCmltcG9ydCAnLi4vbmFtZXMuZGFydCcgc2hvdyBjYWxsTmFtZTsKCmltcG9ydCAndHlwZV9zY2hlbWEuZGFydCc7CgppbXBvcnQgJ3R5cGVfc2NoZW1hX2Vudmlyb25tZW50LmRhcnQnOwoKLy8vIENyZWF0ZXMgYSBjb2xsZWN0aW9uIG9mIFtUeXBlQ29uc3RyYWludF1zIGNvcnJlc3BvbmRpbmcgdG8gdHlwZSBwYXJhbWV0ZXJzLAovLy8gYmFzZWQgb24gYW4gYXR0ZW1wdCB0byBtYWtlIG9uZSB0eXBlIHNjaGVtYSBhIHN1YnR5cGUgb2YgYW5vdGhlci4KYWJzdHJhY3QgY2xhc3MgVHlwZUNvbnN0cmFpbnRHYXRoZXJlciB7CiAgZmluYWwgX3Byb3RvQ29uc3RyYWludHMgPSA8X1Byb3RvQ29uc3RyYWludD5bXTsKCiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiBfcGFyYW1ldGVyc1RvQ29uc3RyYWluOwoKICAvLy8gQ3JlYXRlcyBhIFtUeXBlQ29uc3RyYWludEdhdGhlcmVyXSB3aGljaCBpcyBwcmVwYXJlZCB0byBnYXRoZXIgdHlwZQogIC8vLyBjb25zdHJhaW50cyBmb3IgdGhlIGdpdmVuIFt0eXBlUGFyYW1ldGVyc10uCiAgVHlwZUNvbnN0cmFpbnRHYXRoZXJlci5zdWJjbGFzc2luZyhJdGVyYWJsZTxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykKICAgICAgOiBfcGFyYW1ldGVyc1RvQ29uc3RyYWluID0gdHlwZVBhcmFtZXRlcnMudG9MaXN0KCk7CgogIGZhY3RvcnkgVHlwZUNvbnN0cmFpbnRHYXRoZXJlcihUeXBlU2NoZW1hRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIEl0ZXJhYmxlPFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKSB7CiAgICByZXR1cm4gbmV3IFR5cGVTY2hlbWFDb25zdHJhaW50R2F0aGVyZXIoZW52aXJvbm1lbnQsIHR5cGVQYXJhbWV0ZXJzKTsKICB9CgogIENsYXNzIGdldCBvYmplY3RDbGFzczsKCiAgQ2xhc3MgZ2V0IGZ1bmN0aW9uQ2xhc3M7CgogIENsYXNzIGdldCBmdXR1cmVPckNsYXNzOwoKICBDbGFzcyBnZXQgbnVsbENsYXNzOwoKICB2b2lkIGFkZFVwcGVyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgdXBwZXIpOwoKICB2b2lkIGFkZExvd2VyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgbG93ZXIpOwoKICBNZW1iZXIgZ2V0SW50ZXJmYWNlTWVtYmVyKENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSk7CgogIEludGVyZmFjZVR5cGUgZ2V0VHlwZUFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpOwoKICBJbnRlcmZhY2VUeXBlIGZ1dHVyZVR5cGUoRGFydFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBzZXQgb2YgdHlwZSBjb25zdHJhaW50cyB0aGF0IHdhcyBnYXRoZXJlZC4KICBNYXA8VHlwZVBhcmFtZXRlciwgVHlwZUNvbnN0cmFpbnQ+IGNvbXB1dGVDb25zdHJhaW50cygpIHsKICAgIHZhciByZXN1bHQgPSA8VHlwZVBhcmFtZXRlciwgVHlwZUNvbnN0cmFpbnQ+e307CiAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gX3BhcmFtZXRlcnNUb0NvbnN0cmFpbikgewogICAgICByZXN1bHRbcGFyYW1ldGVyXSA9IG5ldyBUeXBlQ29uc3RyYWludCgpOwogICAgfQogICAgZm9yICh2YXIgcHJvdG9Db25zdHJhaW50IGluIF9wcm90b0NvbnN0cmFpbnRzKSB7CiAgICAgIGlmIChwcm90b0NvbnN0cmFpbnQuaXNVcHBlcikgewogICAgICAgIGFkZFVwcGVyQm91bmQocmVzdWx0W3Byb3RvQ29uc3RyYWludC5wYXJhbWV0ZXJdLCBwcm90b0NvbnN0cmFpbnQuYm91bmQpOwogICAgICB9IGVsc2UgewogICAgICAgIGFkZExvd2VyQm91bmQocmVzdWx0W3Byb3RvQ29uc3RyYWludC5wYXJhbWV0ZXJdLCBwcm90b0NvbnN0cmFpbnQuYm91bmQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFRyaWVzIHRvIG1hdGNoIFtzdWJ0eXBlXSBhZ2FpbnN0IFtzdXBlcnR5cGVdLgogIC8vLwogIC8vLyBJZiB0aGUgbWF0Y2ggc3VjY2VlZHMsIHRoZSByZXN1bHRpbmcgdHlwZSBjb25zdHJhaW50cyBhcmUgcmVjb3JkZWQgZm9yCiAgLy8vIGxhdGVyIHVzZSBieSBbY29tcHV0ZUNvbnN0cmFpbnRzXS4gIElmIHRoZSBtYXRjaCBmYWlscywgdGhlIHNldCBvZiB0eXBlCiAgLy8vIGNvbnN0cmFpbnRzIGlzIHVuY2hhbmdlZC4KICBib29sIHRyeVN1YnR5cGVNYXRjaChEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIGludCBvbGRQcm90b0NvbnN0cmFpbnRzTGVuZ3RoID0gX3Byb3RvQ29uc3RyYWludHMubGVuZ3RoOwogICAgYm9vbCBpc01hdGNoID0gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgICBpZiAoIWlzTWF0Y2gpIHsKICAgICAgX3Byb3RvQ29uc3RyYWludHMubGVuZ3RoID0gb2xkUHJvdG9Db25zdHJhaW50c0xlbmd0aDsKICAgIH0KICAgIHJldHVybiBpc01hdGNoOwogIH0KCiAgdm9pZCBfY29uc3RyYWluTG93ZXIoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIERhcnRUeXBlIGxvd2VyKSB7CiAgICBfcHJvdG9Db25zdHJhaW50cy5hZGQobmV3IF9Qcm90b0NvbnN0cmFpbnQubG93ZXIocGFyYW1ldGVyLCBsb3dlcikpOwogIH0KCiAgdm9pZCBfY29uc3RyYWluVXBwZXIoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIERhcnRUeXBlIHVwcGVyKSB7CiAgICBfcHJvdG9Db25zdHJhaW50cy5hZGQobmV3IF9Qcm90b0NvbnN0cmFpbnQudXBwZXIocGFyYW1ldGVyLCB1cHBlcikpOwogIH0KCiAgYm9vbCBfaXNGdW5jdGlvblN1YnR5cGVNYXRjaChGdW5jdGlvblR5cGUgc3VidHlwZSwgRnVuY3Rpb25UeXBlIHN1cGVydHlwZSkgewogICAgLy8gQSBmdW5jdGlvbiB0eXBlIGAoTTAsLi4uLCBNbiwgW017bisxfSwgLi4uLCBNbV0pIC0+IFIwYCBpcyBhIHN1YnR5cGUKICAgIC8vIG1hdGNoIGZvciBhIGZ1bmN0aW9uIHR5cGUgYChOMCwuLi4sIE5rLCBbTntrKzF9LCAuLi4sIE5yXSkgLT4gUjFgIHdpdGgKICAgIC8vIHJlc3BlY3QgdG8gYExgIHVuZGVyIGNvbnN0cmFpbnRzIGBDMCArIC4uLiArIENyICsgQ2AKICAgIC8vIC0gSWYgYFIwYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGEgdHlwZSBgUjFgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgIC8vICAgY29uc3RyYWludHMgYENgOgogICAgLy8gLSBJZiBgbiA8PSBrYCBhbmQgYHIgPD0gbWAuCiAgICAvLyAtIEFuZCBmb3IgYGlgIGluIGAwLi4ucmAsIGBOaWAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgTWlgIHdpdGggcmVzcGVjdAogICAgLy8gICB0byBgTGAgdW5kZXIgY29uc3RyYWludHMgYENpYC4KICAgIC8vIEZ1bmN0aW9uIHR5cGVzIHdpdGggbmFtZWQgcGFyYW1ldGVycyBhcmUgdHJlYXRlZCBhbmFsb2dvdXNseSB0byB0aGUKICAgIC8vIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGNhc2UgYWJvdmUuCiAgICAvLyBBIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSBgPFQwIGV4dGVuZHMgQjAsIC4uLiwgVG4gZXh0ZW5kcyBCbj5GMGAgaXMgYQogICAgLy8gc3VidHlwZSBtYXRjaCBmb3IgYSBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgYDxTMCBleHRlbmRzIEIwLCAuLi4sIFNuCiAgICAvLyBleHRlbmRzIEJuPkYxYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyIGNvbnN0cmFpbnRzIGBDbGA6CiAgICAvLyAtIElmIGBGMFtaMC9UMCwgLi4uLCBabi9Ubl1gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYEYwW1owL1MwLCAuLi4sCiAgICAvLyAgIFpuL1NuXWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQ2AsIHdoZXJlIGVhY2ggYFppYCBpcyBhCiAgICAvLyAgIGZyZXNoIHR5cGUgdmFyaWFibGUgd2l0aCBib3VuZCBgQmlgLgogICAgLy8gLSBBbmQgYENsYCBpcyBgQ2Agd2l0aCBlYWNoIGNvbnN0cmFpbnQgcmVwbGFjZWQgd2l0aCBpdHMgY2xvc3VyZSB3aXRoCiAgICAvLyAgIHJlc3BlY3QgdG8gYFtaMCwgLi4uLCBabl1gLgogICAgaWYgKHN1YnR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA+IHN1cGVydHlwZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzdWJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCA8CiAgICAgICAgc3VwZXJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoc3VidHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gc3VwZXJ0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoc3VidHlwZS50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBzdWJ0eXBlU3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICB2YXIgc3VwZXJ0eXBlU3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICB2YXIgZnJlc2hUeXBlVmFyaWFibGVzID0gPFR5cGVQYXJhbWV0ZXI+W107CiAgICAgIGlmICghX21hdGNoVHlwZUZvcm1hbHMoc3VidHlwZS50eXBlUGFyYW1ldGVycywgc3VwZXJ0eXBlLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgc3VidHlwZVN1YnN0aXR1dGlvbiwgc3VwZXJ0eXBlU3Vic3RpdHV0aW9uLCBmcmVzaFR5cGVWYXJpYWJsZXMpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBzdWJ0eXBlID0gc3Vic3RpdHV0ZVR5cGVQYXJhbXMoCiAgICAgICAgICBzdWJ0eXBlLCBzdWJ0eXBlU3Vic3RpdHV0aW9uLCBmcmVzaFR5cGVWYXJpYWJsZXMpOwogICAgICBzdXBlcnR5cGUgPSBzdWJzdGl0dXRlVHlwZVBhcmFtcygKICAgICAgICAgIHN1cGVydHlwZSwgc3VwZXJ0eXBlU3Vic3RpdHV0aW9uLCBmcmVzaFR5cGVWYXJpYWJsZXMpOwogICAgfQoKICAgIC8vIFRlc3QgdGhlIHJldHVybiB0eXBlcy4KICAgIGlmIChzdXBlcnR5cGUucmV0dXJuVHlwZSBpcyEgVm9pZFR5cGUgJiYKICAgICAgICAhX2lzU3VidHlwZU1hdGNoKHN1YnR5cGUucmV0dXJuVHlwZSwgc3VwZXJ0eXBlLnJldHVyblR5cGUpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBUZXN0IHRoZSBwYXJhbWV0ZXIgdHlwZXMuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgc3VwZXJ0eXBlUGFyYW1ldGVyID0gc3VwZXJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICB2YXIgc3VidHlwZVBhcmFtZXRlciA9IHN1YnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgIC8vIFRlcm1pbmF0aW9uOiBCb3RoIHR5cGVzIHNocmluayBpbiBzaXplLgogICAgICBpZiAoIV9pc1N1YnR5cGVNYXRjaChzdXBlcnR5cGVQYXJhbWV0ZXIsIHN1YnR5cGVQYXJhbWV0ZXIpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpbnQgc3VidHlwZU5hbWVJbmRleCA9IDA7CiAgICBmb3IgKE5hbWVkVHlwZSBzdXBlcnR5cGVQYXJhbWV0ZXIgaW4gc3VwZXJ0eXBlLm5hbWVkUGFyYW1ldGVycykgewogICAgICB3aGlsZSAoc3VidHlwZU5hbWVJbmRleCA8IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAmJgogICAgICAgICAgc3VidHlwZS5uYW1lZFBhcmFtZXRlcnNbc3VidHlwZU5hbWVJbmRleF0ubmFtZSAhPQogICAgICAgICAgICAgIHN1cGVydHlwZVBhcmFtZXRlci5uYW1lKSB7CiAgICAgICAgKytzdWJ0eXBlTmFtZUluZGV4OwogICAgICB9CiAgICAgIGlmIChzdWJ0eXBlTmFtZUluZGV4ID09IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICBOYW1lZFR5cGUgc3VidHlwZVBhcmFtZXRlciA9IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzW3N1YnR5cGVOYW1lSW5kZXhdOwogICAgICAvLyBUZXJtaW5hdGlvbjogQm90aCB0eXBlcyBzaHJpbmsgaW4gc2l6ZS4KICAgICAgaWYgKCFfaXNTdWJ0eXBlTWF0Y2goc3VwZXJ0eXBlUGFyYW1ldGVyLnR5cGUsIHN1YnR5cGVQYXJhbWV0ZXIudHlwZSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBfaXNJbnRlcmZhY2VTdWJ0eXBlTWF0Y2goCiAgICAgIEludGVyZmFjZVR5cGUgc3VidHlwZSwgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpIHsKICAgIC8vIEEgdHlwZSBgUDxNMCwgLi4uLCBNaz5gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFA8TjAsIC4uLiwgTms+YCB3aXRoCiAgICAvLyByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQzAgKyAuLi4gKyBDa2A6CiAgICAvLyAtIElmIGBNaWAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgTmlgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgIC8vICAgY29uc3RyYWludHMgYENpYC4KICAgIC8vIEEgdHlwZSBgUDxNMCwgLi4uLCBNaz5gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFE8TjAsIC4uLiwgTmo+YCB3aXRoCiAgICAvLyByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQ2A6CiAgICAvLyAtIElmIGBSPEIwLCAuLi4sIEJqPmAgaXMgdGhlIHN1cGVyY2xhc3Mgb2YgYFA8TTAsIC4uLiwgTWs+YCBhbmQgYFI8QjAsCiAgICAvLyAgIC4uLiwgQmo+YCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRPE4wLCAuLi4sIE5qPmAgd2l0aCByZXNwZWN0IHRvIGBMYAogICAgLy8gICB1bmRlciBjb25zdHJhaW50cyBgQ2AuCiAgICAvLyAtIE9yIGBSPEIwLCAuLi4sIEJqPmAgaXMgb25lIG9mIHRoZSBpbnRlcmZhY2VzIGltcGxlbWVudGVkIGJ5IGBQPE0wLCAuLi4sCiAgICAvLyAgIE1rPmAgKGNvbnNpZGVyZWQgaW4gbGV4aWNhbCBvcmRlcikgYW5kIGBSPEIwLCAuLi4sIEJqPmAgaXMgYSBzdWJ0eXBlCiAgICAvLyAgIG1hdGNoIGZvciBgUTxOMCwgLi4uLCBOaj5gIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIgY29uc3RyYWludHMgYENgLgogICAgLy8gLSBPciBgUjxCMCwgLi4uLCBCaj5gIGlzIGEgbWl4aW4gaW50byBgUDxNMCwgLi4uLCBNaz5gIChjb25zaWRlcmVkIGluCiAgICAvLyAgIGxleGljYWwgb3JkZXIpIGFuZCBgUjxCMCwgLi4uLCBCaj5gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFE8TjAsIC4uLiwKICAgIC8vICAgTmo+YCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyIGNvbnN0cmFpbnRzIGBDYC4KCiAgICAvLyBOb3RlIHRoYXQgc2luY2Uga2VybmVsIHJlcXVpcmVzIHRoYXQgbm8gY2xhc3MgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSBzZXQKICAgIC8vIG9mIHN1cGVydHlwZXMgb2YgYSBnaXZlbiB0eXBlIG1vcmUgdGhhbiBvbmNlLCB0aGUgb3JkZXIgb2YgdGhlIGNoZWNrcwogICAgLy8gYWJvdmUgaXMgaXJyZWxldmFudDsgd2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIG1hdGNoZWQgc3VwZXJjbGFzcywKICAgIC8vIHN1YnN0aXR1dGUsIGFuZCB0aGVuIGl0ZXJhdGUgdGhyb3VnaCB0eXBlIHZhcmlhYmxlcy4KICAgIHZhciBtYXRjaGluZ1N1cGVydHlwZU9mU3VidHlwZSA9CiAgICAgICAgZ2V0VHlwZUFzSW5zdGFuY2VPZihzdWJ0eXBlLCBzdXBlcnR5cGUuY2xhc3NOb2RlKTsKICAgIGlmIChtYXRjaGluZ1N1cGVydHlwZU9mU3VidHlwZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFfaXNTdWJ0eXBlTWF0Y2gobWF0Y2hpbmdTdXBlcnR5cGVPZlN1YnR5cGUudHlwZUFyZ3VtZW50c1tpXSwKICAgICAgICAgIHN1cGVydHlwZS50eXBlQXJndW1lbnRzW2ldKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIF9pc051bGwoRGFydFR5cGUgdHlwZSkgewogICAgLy8gVE9ETyhwYXVsYmVycnkpOiB3b3VsZCBpdCBiZSBiZXR0ZXIgdG8gY2FsbCB0aGlzICJfaXNCb3R0b20iLCBhbmQgdG8gaGF2ZQogICAgLy8gaXQgcmV0dXJuIGB0cnVlYCBmb3IgYm90aCBOdWxsIGFuZCBib3R0b20gdHlwZXM/ICBSZXZpc2l0IHRoaXMgb25jZQogICAgLy8gZW5vdWdoIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgdGhhdCB3ZSBjYW4gY29tcGFyZSB0aGUgYmVoYXZpb3Igd2l0aAogICAgLy8gdGhlIG9sZCBhbmFseXplci1iYXNlZCBpbXBsZW1lbnRhdGlvbi4KICAgIHJldHVybiB0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgaWRlbnRpY2FsKHR5cGUuY2xhc3NOb2RlLCBudWxsQ2xhc3MpOwogIH0KCiAgLy8vIEF0dGVtcHRzIHRvIG1hdGNoIFtzdWJ0eXBlXSBhcyBhIHN1YnR5cGUgb2YgW3N1cGVydHlwZV0sIGdhdGhlcmluZyBhbnkKICAvLy8gY29uc3RyYWludHMgZGlzY292ZXJlZCBpbiB0aGUgcHJvY2Vzcy4KICAvLy8KICAvLy8gSWYgYSBzZXQgb2YgY29uc3RyYWludHMgd2FzIGZvdW5kLCBgdHJ1ZWAgaXMgcmV0dXJuZWQgYW5kIHRoZSBjYWxsZXIKICAvLy8gbWF5IHByb2NlZWQgdG8gY2FsbCBbY29tcHV0ZUNvbnN0cmFpbnRzXS4gIE90aGVyd2lzZSwgYGZhbHNlYCBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gSW4gdGhlIGNhc2Ugd2hlcmUgYGZhbHNlYCBpcyByZXR1cm5lZCwgc29tZSBib2d1cyBjb25zdHJhaW50cyBtYXkgaGF2ZQogIC8vLyBiZWVuIGFkZGVkIHRvIFtfcHJvdG9Db25zdHJhaW50c10uICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8KICAvLy8gZGlzY2FyZCB0aGVtIGlmIG5lY2Vzc2FyeS4KICBib29sIF9pc1N1YnR5cGVNYXRjaChEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIC8vIFRoZSB1bmtub3duIHR5cGUgYD9gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYW55IHR5cGUgYFFgIHdpdGggbm8KICAgIC8vIGNvbnN0cmFpbnRzLgogICAgaWYgKHN1YnR5cGUgaXMgVW5rbm93blR5cGUpIHJldHVybiB0cnVlOwogICAgLy8gQW55IHR5cGUgYFBgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgdGhlIHVua25vd24gdHlwZSBgP2Agd2l0aCBubwogICAgLy8gY29uc3RyYWludHMuCiAgICBpZiAoc3VwZXJ0eXBlIGlzIFVua25vd25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIC8vIEEgdHlwZSB2YXJpYWJsZSBgVGAgaW4gYExgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYW55IHR5cGUgc2NoZW1hIGBRYDoKICAgIC8vIC0gVW5kZXIgY29uc3RyYWludCBgVCA8OiBRYC4KICAgIGlmIChzdWJ0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgX3BhcmFtZXRlcnNUb0NvbnN0cmFpbi5jb250YWlucyhzdWJ0eXBlLnBhcmFtZXRlcikpIHsKICAgICAgX2NvbnN0cmFpblVwcGVyKHN1YnR5cGUucGFyYW1ldGVyLCBzdXBlcnR5cGUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIC8vIEEgdHlwZSBzY2hlbWEgYFFgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYSB0eXBlIHZhcmlhYmxlIGBUYCBpbiBgTGA6CiAgICAvLyAtIFVuZGVyIGNvbnN0cmFpbnQgYFEgPDogVGAuCiAgICBpZiAoc3VwZXJ0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgX3BhcmFtZXRlcnNUb0NvbnN0cmFpbi5jb250YWlucyhzdXBlcnR5cGUucGFyYW1ldGVyKSkgewogICAgICBfY29uc3RyYWluTG93ZXIoc3VwZXJ0eXBlLnBhcmFtZXRlciwgc3VidHlwZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgLy8gQW55IHR3byBlcXVhbCB0eXBlcyBgUGAgYW5kIGBRYCBhcmUgc3VidHlwZSBtYXRjaGVzIHVuZGVyIG5vIGNvbnN0cmFpbnRzLgogICAgLy8gTm90ZTogdG8gYXZvaWQgbWFraW5nIHRoZSBhbGdvcml0aG0gcXVhZHJhdGljLCB3ZSBqdXN0IGNoZWNrIGZvcgogICAgLy8gaWRlbnRpY2FsKCkuICBJZiBQIGFuZCBRIGFyZSBlcXVhbCBidXQgbm90IGlkZW50aWNhbCwgcmVjdXJzaW5nIHRocm91Z2gKICAgIC8vIHRoZSB0eXBlcyB3aWxsIGdpdmUgdGhlIHByb3BlciByZXN1bHQuCiAgICBpZiAoaWRlbnRpY2FsKHN1YnR5cGUsIHN1cGVydHlwZSkpIHJldHVybiB0cnVlOwogICAgLy8gQW55IHR5cGUgYFBgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYGR5bmFtaWNgLCBgT2JqZWN0YCwgb3IgYHZvaWRgIHVuZGVyCiAgICAvLyBubyBjb25zdHJhaW50cy4KICAgIGlmIChfaXNUb3Aoc3VwZXJ0eXBlKSkgcmV0dXJuIHRydWU7CiAgICAvLyBgTnVsbGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBhbnkgdHlwZSBgUWAgdW5kZXIgbm8gY29uc3RyYWludHMuCiAgICAvLyBOb3RlIHRoYXQgbnVsbGFibGUgdHlwZXMgd2lsbCBjaGFuZ2UgdGhpcy4KICAgIGlmIChfaXNOdWxsKHN1YnR5cGUpKSByZXR1cm4gdHJ1ZTsKCiAgICAvLyBIYW5kbGUgRnV0dXJlT3I8VD4gdW5pb24gdHlwZS4KICAgIGlmIChzdWJ0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICBpZGVudGljYWwoc3VidHlwZS5jbGFzc05vZGUsIGZ1dHVyZU9yQ2xhc3MpKSB7CiAgICAgIHZhciBzdWJ0eXBlQXJnID0gc3VidHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICBpZiAoc3VwZXJ0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAgIC8vIGBGdXR1cmVPcjxQPmAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgRnV0dXJlT3I8UT5gIHdpdGggcmVzcGVjdCB0bwogICAgICAgIC8vIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQ2A6CiAgICAgICAgLy8gLSBJZiBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAgIC8vICAgY29uc3RyYWludHMgYENgLgogICAgICAgIHZhciBzdXBlcnR5cGVBcmcgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGVBcmcsIHN1cGVydHlwZUFyZyk7CiAgICAgIH0KCiAgICAgIC8vIGBGdXR1cmVPcjxQPmAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAvLyBjb25zdHJhaW50cyBgQzAgKyBDMWA6CiAgICAgIC8vIC0gSWYgYEZ1dHVyZTxQPmAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAvLyAgIGNvbnN0cmFpbnRzIGBDMGAuCiAgICAgIC8vIC0gQW5kIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAgIC8vICAgY29uc3RyYWludHMgYEMxYC4KICAgICAgdmFyIHN1YnR5cGVGdXR1cmUgPSBmdXR1cmVUeXBlKHN1YnR5cGVBcmcpOwogICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGVGdXR1cmUsIHN1cGVydHlwZSkgJiYKICAgICAgICAgIF9pc1N1YnR5cGVNYXRjaChzdWJ0eXBlQXJnLCBzdXBlcnR5cGUpOwogICAgfQoKICAgIGlmIChzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAvLyBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgRnV0dXJlT3I8UT5gIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgICAgLy8gY29uc3RyYWludHMgYENgOgogICAgICAvLyAtIElmIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBGdXR1cmU8UT5gIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgICAgLy8gICBjb25zdHJhaW50cyBgQ2AuCiAgICAgIC8vIC0gT3IgYFBgIGlzIG5vdCBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBGdXR1cmU8UT5gIHdpdGggcmVzcGVjdCB0byBgTGAKICAgICAgLy8gICB1bmRlciBjb25zdHJhaW50cyBgQ2AKICAgICAgLy8gICAtIEFuZCBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAvLyAgICAgY29uc3RyYWludHMgYENgCiAgICAgIHZhciBzdXBlcnR5cGVBcmcgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgdmFyIHN1cGVydHlwZUZ1dHVyZSA9IGZ1dHVyZVR5cGUoc3VwZXJ0eXBlQXJnKTsKICAgICAgcmV0dXJuIHRyeVN1YnR5cGVNYXRjaChzdWJ0eXBlLCBzdXBlcnR5cGVGdXR1cmUpIHx8CiAgICAgICAgICBfaXNTdWJ0eXBlTWF0Y2goc3VidHlwZSwgc3VwZXJ0eXBlQXJnKTsKICAgIH0KCiAgICAvLyBBIHR5cGUgdmFyaWFibGUgYFRgIG5vdCBpbiBgTGAgd2l0aCBib3VuZCBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciB0aGUKICAgIC8vIHNhbWUgdHlwZSB2YXJpYWJsZSBgVGAgd2l0aCBib3VuZCBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgLy8gY29uc3RyYWludHMgYENgOgogICAgLy8gLSBJZiBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cwogICAgLy8gICBgQ2AuCiAgICBpZiAoc3VidHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICBpZiAoc3VwZXJ0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgICBpZGVudGljYWwoc3VidHlwZS5wYXJhbWV0ZXIsIHN1cGVydHlwZS5wYXJhbWV0ZXIpKSB7CiAgICAgICAgLy8gS2VybmVsIGRvZXNuJ3QgeWV0IGFsbG93IGEgdHlwZSB2YXJpYWJsZSB0byBoYXZlIGRpZmZlcmVudCBib3VuZHMKICAgICAgICAvLyB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcyAoc2VlIGRhcnRidWcuY29tLzI5NTI5KSBzbyBmb3Igbm93IGlmCiAgICAgICAgLy8gd2UgZ2V0IGhlcmUsIHRoZSBib3VuZHMgbXVzdCBiZSB0aGUgc2FtZS4KICAgICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHVwZGF0ZSB0aGlzIGNvZGUgb25jZSBkYXJ0YnVnLmNvbS8yOTUyOSBpcwogICAgICAgIC8vIGFkZHJlc3NlZC4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICAvLyBBIHR5cGUgdmFyaWFibGUgYFRgIG5vdCBpbiBgTGAgd2l0aCBib3VuZCBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBhCiAgICAgIC8vIHR5cGUgYFFgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIgY29uc3RyYWludHMgYENgOgogICAgICAvLyAtIElmIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAgIC8vICAgY29uc3RyYWludHMgYENgLgogICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGUucGFyYW1ldGVyLmJvdW5kLCBzdXBlcnR5cGUpOwogICAgfQogICAgaWYgKHN1YnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICByZXR1cm4gX2lzSW50ZXJmYWNlU3VidHlwZU1hdGNoKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgICB9CiAgICBpZiAoc3VidHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgaWYgKHN1cGVydHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgcmV0dXJuIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdW5jdGlvbkNsYXNzKSB8fAogICAgICAgICAgICBpZGVudGljYWwoc3VwZXJ0eXBlLmNsYXNzTm9kZSwgb2JqZWN0Q2xhc3MpOwogICAgICB9IGVsc2UgaWYgKHN1cGVydHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICByZXR1cm4gX2lzRnVuY3Rpb25TdWJ0eXBlTWF0Y2goc3VidHlwZSwgc3VwZXJ0eXBlKTsKICAgICAgfQogICAgfQogICAgLy8gQSB0eXBlIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGEgdHlwZSBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgLy8gY29uc3RyYWludHMgYENgOgogICAgLy8gLSBJZiBgUGAgaXMgYW4gaW50ZXJmYWNlIHR5cGUgd2hpY2ggaW1wbGVtZW50cyBhIGNhbGwgbWV0aG9kIG9mIHR5cGUgYEZgLAogICAgLy8gICBhbmQgYEZgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYSB0eXBlIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAvLyAgIGNvbnN0cmFpbnRzIGBDYC4KICAgIGlmIChzdWJ0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgdmFyIGNhbGxNZW1iZXIgPSBnZXRJbnRlcmZhY2VNZW1iZXIoc3VidHlwZS5jbGFzc05vZGUsIGNhbGxOYW1lKTsKICAgICAgaWYgKGNhbGxNZW1iZXIgaXMgUHJvY2VkdXJlICYmICFjYWxsTWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgICAgdmFyIGNhbGxUeXBlID0gY2FsbE1lbWJlci5nZXR0ZXJUeXBlOwogICAgICAgIGlmIChjYWxsVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBjYWxsVHlwZSA9CiAgICAgICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHN1YnR5cGUpLnN1YnN0aXR1dGVUeXBlKGNhbGxUeXBlKTsKICAgICAgICAgIC8vIFRPRE8oa21pbGxpa2luKTogVGhlIHN1YnR5cGUgY2hlY2sgd2lsbCBmYWlsIGlmIHRoZSB0eXBlIG9mIGEKICAgICAgICAgIC8vIGdlbmVyaWMgY2FsbCBtZXRob2QgaXMgYSBzdWJ0eXBlIG9mIGEgbm9uLWdlbmVyaWMgZnVuY3Rpb24gdHlwZS4KICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBpZiBgVCBjYWxsPFQ+KFQgYXJnKWAgaXMgYSBzdWJ0eXBlIG9mIGBTLT5TYCBmb3Igc29tZQogICAgICAgICAgLy8gUy4gIEhvd2V2ZXIsIGV4cGxpY2l0bHkgdGVhcmluZyBvZmYgdGhhdCBjYWxsIG1ldGhvZCB3aWxsIHdvcmsgYW5kCiAgICAgICAgICAvLyBpbnNlcnQgYW4gZXhwbGljaXQgaW5zdGFudGlhdGlvbiwgc28gdGhlIGltcGxpY2l0IHRlYXIgb2ZmIHNob3VsZAogICAgICAgICAgLy8gd29yayBhcyB3ZWxsLiAgRmlndXJlIG91dCBob3cgdG8gc3VwcG9ydCB0aGlzIGNhc2UuCiAgICAgICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKGNhbGxUeXBlLCBzdXBlcnR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBfaXNUb3AoRGFydFR5cGUgdHlwZSkgPT4KICAgICAgdHlwZSBpcyBEeW5hbWljVHlwZSB8fAogICAgICB0eXBlIGlzIFZvaWRUeXBlIHx8CiAgICAgICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgaWRlbnRpY2FsKHR5cGUuY2xhc3NOb2RlLCBvYmplY3RDbGFzcykpOwoKICAvLy8gR2l2ZW4gdHdvIGxpc3RzIG9mIGZ1bmN0aW9uIHR5cGUgZm9ybWFsIHBhcmFtZXRlcnMsIGNoZWNrcyB0aGF0IHRoZWlyCiAgLy8vIGJvdW5kcyBhcmUgY29tcGF0aWJsZS4KICAvLy8KICAvLy8gVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhIG1hdGNoIHdhcyBmb3VuZC4gIElmIGl0IHdhcywgZW50cmllcwogIC8vLyBhcmUgYWRkZWQgdG8gW3N1YnN0aXR1dGlvbjFdIGFuZCBbc3Vic3RpdHV0aW9uMl0gd2hpY2ggc3Vic3RpdHV0ZSBhIGZyZXNoCiAgLy8vIHNldCBvZiB0eXBlIHZhcmlhYmxlcyBmb3IgdGhlIHR5cGUgcGFyYW1ldGVycyBbcGFyYW1zMV0gYW5kIFtwYXJhbXMyXSwKICAvLy8gcmVzcGVjdGl2ZWx5LCBhbGxvd2luZyBmdXJ0aGVyIGNvbXBhcmlzb24uCiAgYm9vbCBfbWF0Y2hUeXBlRm9ybWFscygKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbXMxLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHBhcmFtczIsCiAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uMSwKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb24yLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGZyZXNoVHlwZVZhcmlhYmxlcykgewogICAgYXNzZXJ0KHBhcmFtczEubGVuZ3RoID09IHBhcmFtczIubGVuZ3RoKTsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogaW4gaW1pdGF0aW9uIG9mIGFuYWx5emVyLCB3ZSdyZSBjaGVja2luZyB0aGUgYm91bmRzIGFzCiAgICAvLyB3ZSBidWlsZCB1cCB0aGUgc3Vic3RpdHV0aW9ucy4gIEJ1dCBJIGRvbid0IHRoaW5rIHRoYXQncyBjb3JyZWN0LS1JIHRoaW5rCiAgICAvLyB3ZSBzaG91bGQgYnVpbGQgdXAgYm90aCBzdWJzdGl0dXRpb25zIGNvbXBsZXRlbHkgYmVmb3JlIGNoZWNraW5nIGFueQogICAgLy8gYm91bmRzLiAgU2VlIGRhcnRidWcuY29tLzI5NjI5LgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbXMxLmxlbmd0aDsgKytpKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXIgcEZyZXNoID0gbmV3IFR5cGVQYXJhbWV0ZXIocGFyYW1zMltpXS5uYW1lKTsKICAgICAgZnJlc2hUeXBlVmFyaWFibGVzLmFkZChwRnJlc2gpOwogICAgICBEYXJ0VHlwZSB2YXJpYWJsZUZyZXNoID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHBGcmVzaCk7CiAgICAgIHN1YnN0aXR1dGlvbjFbcGFyYW1zMVtpXV0gPSB2YXJpYWJsZUZyZXNoOwogICAgICBzdWJzdGl0dXRpb24yW3BhcmFtczJbaV1dID0gdmFyaWFibGVGcmVzaDsKICAgICAgRGFydFR5cGUgYm91bmQxID0gc3Vic3RpdHV0ZShwYXJhbXMxW2ldLmJvdW5kLCBzdWJzdGl0dXRpb24xKTsKICAgICAgRGFydFR5cGUgYm91bmQyID0gc3Vic3RpdHV0ZShwYXJhbXMyW2ldLmJvdW5kLCBzdWJzdGl0dXRpb24yKTsKICAgICAgcEZyZXNoLmJvdW5kID0gYm91bmQyOwogICAgICBpZiAoIV9pc1N1YnR5cGVNYXRjaChib3VuZDIsIGJvdW5kMSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KfQoKY2xhc3MgVHlwZVNjaGVtYUNvbnN0cmFpbnRHYXRoZXJlciBleHRlbmRzIFR5cGVDb25zdHJhaW50R2F0aGVyZXIgewogIGZpbmFsIFR5cGVTY2hlbWFFbnZpcm9ubWVudCBlbnZpcm9ubWVudDsKCiAgVHlwZVNjaGVtYUNvbnN0cmFpbnRHYXRoZXJlcigKICAgICAgdGhpcy5lbnZpcm9ubWVudCwgSXRlcmFibGU8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpCiAgICAgIDogc3VwZXIuc3ViY2xhc3NpbmcodHlwZVBhcmFtZXRlcnMpOwoKICBAb3ZlcnJpZGUKICBDbGFzcyBnZXQgb2JqZWN0Q2xhc3MgPT4gZW52aXJvbm1lbnQuY29yZVR5cGVzLm9iamVjdENsYXNzOwoKICBAb3ZlcnJpZGUKICBDbGFzcyBnZXQgZnVuY3Rpb25DbGFzcyA9PiBlbnZpcm9ubWVudC5jb3JlVHlwZXMuZnVuY3Rpb25DbGFzczsKCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IGZ1dHVyZU9yQ2xhc3MgPT4gZW52aXJvbm1lbnQuY29yZVR5cGVzLmZ1dHVyZU9yQ2xhc3M7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBudWxsQ2xhc3MgPT4gZW52aXJvbm1lbnQuY29yZVR5cGVzLm51bGxDbGFzczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRVcHBlckJvdW5kKFR5cGVDb25zdHJhaW50IGNvbnN0cmFpbnQsIERhcnRUeXBlIHVwcGVyKSB7CiAgICBlbnZpcm9ubWVudC5hZGRVcHBlckJvdW5kKGNvbnN0cmFpbnQsIHVwcGVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkTG93ZXJCb3VuZChUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSBsb3dlcikgewogICAgZW52aXJvbm1lbnQuYWRkTG93ZXJCb3VuZChjb25zdHJhaW50LCBsb3dlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXIgZ2V0SW50ZXJmYWNlTWVtYmVyKENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIGVudmlyb25tZW50LmhpZXJhcmNoeQogICAgICAgIC5nZXRJbnRlcmZhY2VNZW1iZXIoY2xhc3NfLCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFR5cGVBc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlLCBzdXBlcmNsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZnV0dXJlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuZnV0dXJlVHlwZSh0eXBlKTsKICB9Cn0KCi8vLyBUcmFja3MgYSBzaW5nbGUgY29uc3RyYWludCBvbiBhIHNpbmdsZSB0eXBlIHZhcmlhYmxlLgovLy8KLy8vIFRoaXMgaXMgY2FsbGVkICJfUHJvdG9Db25zdHJhaW50IiB0byBkaXN0aW5ndWlzaCBmcm9tIFtUeXBlQ29uc3RyYWludF0sCi8vLyB3aGljaCB0cmFja3MgdGhlIHVwcGVyIGFuZCBsb3dlciBib3VuZHMgdGhhdCBhcmUgdG9nZXRoZXIgaW1wbGllZCBieSBhIHNldAovLy8gb2YgW19Qcm90b0NvbnN0cmFpbnRdcy4KY2xhc3MgX1Byb3RvQ29uc3RyYWludCB7CiAgZmluYWwgVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXI7CgogIGZpbmFsIERhcnRUeXBlIGJvdW5kOwoKICBmaW5hbCBib29sIGlzVXBwZXI7CgogIF9Qcm90b0NvbnN0cmFpbnQubG93ZXIodGhpcy5wYXJhbWV0ZXIsIHRoaXMuYm91bmQpIDogaXNVcHBlciA9IGZhbHNlOwoKICBfUHJvdG9Db25zdHJhaW50LnVwcGVyKHRoaXMucGFyYW1ldGVyLCB0aGlzLmJvdW5kKSA6IGlzVXBwZXIgPSB0cnVlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gaXNVcHBlcgogICAgICAgID8gIiR7cGFyYW1ldGVyLm5hbWV9IDw6ICRib3VuZCIKICAgICAgICA6ICIkYm91bmQgPDogJHtwYXJhbWV0ZXIubmFtZX0iOwogIH0KfQqB1wBNTj8BIQkPEhUWFxAOExMXGxIBSQEsASZGASYBGwEnAVBGKDIBNAFKMk06AUQwSgQBGQEbARsBFwFBAUEBTAFLASsBPTw0NDAGNSVRD1EIBhMEATQGTU4gPz44FDwGFAQBQkkEAUJJBAFPTE48ThojTyhLKExKQktRLk0lTRQGLjEUBkwUBi09PzJPTRYIASY9KEEGAR4tRhQGASFGQj4xRBYIBh5GQjwpHAhMTjFOFggGEQQBIThMOUcbTC1OTyBRTk9NUDkBUE1JPCU7OkpIKRYIBhEEASBRS1EuSgQBTS0GS1EGTU8hP0gULUgUL04kKD41EwZMJCpANRMGUUhPLjRQFyhIMicBJiQ3MSg7TiZJHjc6CAFMIE8dSB0yOjIGASY5TBpPHE0hSh01NjoyBgFQRxhRDigsP01PNUcWFQhQPUccQgZCOwYjKEA5LjwIBk4YUU0aJEg9LiAVUEtOUFBPQTcKCAYSBAEgHRpJAUwdBlBQTTEaIyMyMjAuT1FMJy9BJj4xMUVFHToGEQQCAUQrASBAKwEMPgEMQgEMQgEMOgEMQjIEAQxCMgQBDE0hOwQBDEw+BAEMLCkEAgE6BExPHBkhARgBFgFIAUcBFhMoKQQCAUhwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9jb25zdHJhaW50X2dhdGhlcmVyLmRhcnQwc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGVscGVycy90cmFjZS5kYXJ0rZsvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwoKLy8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgW3RyYWNlXS4KdHlwZWRlZiB2b2lkIFRyYWNlKFN0cmluZyBtZXNzYWdlLAogICAge2Jvb2wgY29uZGl0aW9uKFN0cmluZyBzdGFja1RyYWNlKSwgaW50IGxpbWl0LCBib29sIHRocm93T25QcmludH0pOwoKLy8vIEhlbHBlciBtZXRob2QgZm9yIHByaW50aW5nIHN0YWNrIHRyYWNlcyBmb3IgZGVidWdnaW5nLgovLy8KLy8vIFttZXNzYWdlXSBpcyBwcmludGVkIGFzIHRoZSBoZWFkZXIgb2YgdGhlIHN0YWNrIHRyYWNlLgovLy8KLy8vIElmIFtjb25kaXRpb25dIGlzIHByb3ZpZGVkLCB0aGUgc3RhY2sgdHJhY2UgaXMgb25seSBwcmludGVkIGlmIFtjb25kaXRpb25dCi8vLyByZXR1cm5zIFs6dHJ1ZTpdIG9uIHRoZSBzdGFjayB0cmFjZSB0ZXh0LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGZpbHRlciB0aGUKLy8vIHByaW50ZWQgc3RhY2sgdHJhY2VzIGJhc2VkIG9uIHRoZWlyIGNvbnRlbnQuIEZvciBpbnN0YW5jZSBvbmx5IHByaW50IHN0YWNrCi8vLyB0cmFjZXMgdGhhdCBjb250YWluIHNwZWNpZmljIHBhdGhzLgovLy8KLy8vIElmIFtsaW1pdF0gaXMgcHJvdmlkZWQsIHRoZSBzdGFjayB0cmFjZSBpcyBsaW1pdGVkIHRvIFtsaW1pdF0gZW50cmllcy4KLy8vCi8vLyBJZiBbdGhyb3dPblByaW50XSBpcyBgdHJ1ZWAsIFttZXNzYWdlXSB3aWxsIGJlIHRocm93biBhZnRlciB0aGUgc3RhY2sgdHJhY2UKLy8vIGhhcyBiZWVuIHByaW50ZWQuIFRvZ2V0aGVyIHdpdGggW2NvbmRpdGlvbl0gdGhpcyBjYW4gYmUgdXNlZCB0byBkaXNjb3ZlcgovLy8gdW5rbm93biBjYWxsLXNpdGVzIGluIHRlc3RzIGJ5IGZpbHRlcmluZyBrbm93biBjYWxsLXNpdGVzIGFuZCB0aHJvd25pbmcKLy8vIG90aGVyd2lzZS4KVHJhY2UgZ2V0IHRyYWNlIHsKICBlbmFibGVEZWJ1Z01vZGUoKTsKICByZXR1cm4gX3RyYWNlOwp9Cgp2b2lkIF90cmFjZShTdHJpbmcgbWVzc2FnZSwKICAgIHtib29sIGNvbmRpdGlvbihTdHJpbmcgc3RhY2tUcmFjZSksIGludCBsaW1pdCwgYm9vbCB0aHJvd09uUHJpbnQ6IGZhbHNlfSkgewogIHRyeSB7CiAgICB0aHJvdyAnJzsKICB9IGNhdGNoIChlLCBzKSB7CiAgICBTdHJpbmcgc3RhY2tUcmFjZTsKICAgIHRyeSB7CiAgICAgIHN0YWNrVHJhY2UgPSBwcmV0dGlmeVN0YWNrVHJhY2UocywKICAgICAgICAgIHJhbmdlU3RhcnQ6IDEsIHJhbmdlRW5kOiBsaW1pdCwgZmlsZVByZWZpeDogc3RhY2tUcmFjZUZpbGVQcmVmaXgpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBwcmludChlKTsKICAgICAgc3RhY2tUcmFjZSA9ICckcyc7CiAgICB9CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgaWYgKCFjb25kaXRpb24oc3RhY2tUcmFjZSkpIHJldHVybjsKICAgIH0KICAgIHByaW50KCckbWVzc2FnZVxuJHN0YWNrVHJhY2UnKTsKICAgIGlmICh0aHJvd09uUHJpbnQpIHRocm93IG1lc3NhZ2U7CiAgfQp9CgovLy8gQ3JlYXRlcyBhIGZ1bmN0aW9uIHRvIHVzZSBhcyBhbiBgY29uZGl0aW9uYCBhcmd1bWVudCBpbiBbdHJhY2VdIHRoYXQgZmlsdGVycwovLy8gc3RhY2sgdHJhY2VzIHRoYXQgY29udGFpbnMgYW55IG9mIHRoZSBbZXhjZXB0aW9uc10uCnRyYWNlRXhjZXB0aW9ucyhMaXN0PFN0cmluZz4gZXhjZXB0aW9ucykgewogIHJldHVybiAoU3RyaW5nIHN0YWNrVHJhY2UpID0+ICFleGNlcHRpb25zLmFueShzdGFja1RyYWNlLmNvbnRhaW5zKTsKfQoKLy8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBbdHJhY2VBbmRSZXBvcnRdLgp0eXBlZGVmIHZvaWQgVHJhY2VBbmRSZXBvcnQoCiAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIFNwYW5uYWJsZSBub2RlLCBTdHJpbmcgbWVzc2FnZSwKICAgIHtib29sIGNvbmRpdGlvbihTdHJpbmcgc3RhY2tUcmFjZSksIGludCBsaW1pdCwgYm9vbCB0aHJvd09uUHJpbnR9KTsKCi8vLyBDYWxscyBbcmVwb3J0SGVyZV0gYW5kIFt0cmFjZV0gd2l0aCB0aGUgc2FtZSBtZXNzYWdlLgpUcmFjZUFuZFJlcG9ydCBnZXQgdHJhY2VBbmRSZXBvcnQgewogIGVuYWJsZURlYnVnTW9kZSgpOwogIHJldHVybiBfdHJhY2VBbmRSZXBvcnQ7Cn0KCi8vLyBDYWxscyBbcmVwb3J0SGVyZV0gYW5kIFt0cmFjZV0gd2l0aCB0aGUgc2FtZSBtZXNzYWdlLgpUcmFjZUFuZFJlcG9ydCBnZXQgcmVwb3J0QW5kVHJhY2UgPT4gdHJhY2VBbmRSZXBvcnQ7CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW3RyYWNlQW5kUmVwb3J0XS4Kdm9pZCBfdHJhY2VBbmRSZXBvcnQoCiAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIFNwYW5uYWJsZSBub2RlLCBTdHJpbmcgbWVzc2FnZSwKICAgIHtib29sIGNvbmRpdGlvbihTdHJpbmcgc3RhY2tUcmFjZSksIGludCBsaW1pdCwgYm9vbCB0aHJvd09uUHJpbnQ6IGZhbHNlfSkgewogIHRyYWNlKG1lc3NhZ2UsIGxpbWl0OiBsaW1pdCwgdGhyb3dPblByaW50OiB0aHJvd09uUHJpbnQsCiAgICAgIGNvbmRpdGlvbjogKFN0cmluZyBzdGFja1RyYWNlKSB7CiAgICBib29sIHJlc3VsdCA9IGNvbmRpdGlvbiAhPSBudWxsID8gY29uZGl0aW9uKHN0YWNrVHJhY2UpIDogdHJ1ZTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgcmVwb3J0SGVyZShyZXBvcnRlciwgbm9kZSwgbWVzc2FnZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0pOwp9CgovLy8gUmV0dXJucyB0aGUgW1N0YWNrVHJhY2VMaW5lc10gZm9yIHRoZSBjdXJyZW50IGNhbGwgc3RhY2suCi8vLwovLy8gVXNlIFtvZmZzZXRdIHRvIGRpc2NhcmQgdGhlIGZpcnN0IFtvZmZzZXRdIGNhbGxzIG9mIHRoZSBjYWxsIHN0YWNrLiBEZWZhdWx0cwovLy8gdG8gYDFgLCB0aGF0IGlzLCBkaXNjYXJkIHRoZSBjYWxsIHRvIFtzdGFja1RyYWNlXSBpdHNlbGYuIFVzZSBbbGltaXRdIHRvCi8vLyBsaW1pdCB0aGUgbGVuZ3RoIG9mIHRoZSBzdGFjayB0cmFjZSBsaW5lcy4KU3RhY2tUcmFjZUxpbmVzIHN0YWNrVHJhY2Uoe2ludCBvZmZzZXQ6IDEsIGludCBsaW1pdDogbnVsbH0pIHsKICBpbnQgcmFuZ2VTdGFydCA9IG9mZnNldDsKICBpbnQgcmFuZ2VFbmQgPSBsaW1pdCA9PSBudWxsID8gbnVsbCA6IHJhbmdlU3RhcnQgKyBsaW1pdDsKICB0cnkgewogICAgdGhyb3cgJyc7CiAgfSBjYXRjaCAoXywgc3RhY2tUcmFjZSkgewogICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlTGluZXMuZnJvbVRyYWNlKHN0YWNrVHJhY2UsCiAgICAgICAgcmFuZ2VTdGFydDogb2Zmc2V0LAogICAgICAgIHJhbmdlRW5kOiByYW5nZUVuZCwKICAgICAgICBmaWxlUHJlZml4OiBzdGFja1RyYWNlRmlsZVByZWZpeCk7CiAgfQp9CgovLy8gQSBzdGFjayB0cmFjZSBhcyBhIHNlcXVlbmNlIG9mIFtTdGFja1RyYWNlTGluZV1zLgpjbGFzcyBTdGFja1RyYWNlTGluZXMgewogIGZpbmFsIExpc3Q8U3RhY2tUcmFjZUxpbmU+IGxpbmVzOwogIGZpbmFsIGludCBtYXhGaWxlTGVuZ3RoOwogIGZpbmFsIGludCBtYXhMaW5lTm9MZW5ndGg7CiAgZmluYWwgaW50IG1heENvbHVtbk5vTGVuZ3RoOwoKICBmYWN0b3J5IFN0YWNrVHJhY2VMaW5lcy5mcm9tVHJhY2UoU3RhY2tUcmFjZSBzLAogICAgICB7aW50IHJhbmdlU3RhcnQsIGludCByYW5nZUVuZCwgU3RyaW5nIGZpbGVQcmVmaXgsIFN0cmluZyBsYW1iZGE6IHInPyd9KSB7CiAgICBmaW5hbCBSZWdFeHAgaW5kZXhQYXR0ZXJuID0gbmV3IFJlZ0V4cChyJyNcZCtccyonKTsKICAgIGludCBpbmRleCA9IC0xOwogICAgaW50IG1heEZpbGVMZW5ndGggPSAwOwogICAgaW50IG1heExpbmVOb0xlbmd0aCA9IDA7CiAgICBpbnQgbWF4Q29sdW1uTm9MZW5ndGggPSAwOwoKICAgIFN0cmluZyBzdGFja1RyYWNlID0gJyRzJzsKICAgIExpc3Q8U3RhY2tUcmFjZUxpbmU+IGxpbmVzID0gPFN0YWNrVHJhY2VMaW5lPltdOwogICAgLy8gUGFyc2UgZWFjaCBsaW5lIGluIHRoZSBzdGFjayB0cmFjZS4gVGhlIHN1cHBvcnRlZCBsaW5lIGZvcm1hdHMgZnJvbSB0aGUKICAgIC8vIERhcnQgVk0gYXJlOgogICAgLy8gICAgI24gICAgIDxtZXRob2QtbmFtZT4gKDx1cmk+OjxsaW5lLW5vPjo8Y29sdW1uLW5vPikKICAgIC8vICAgICNuICAgICA8bWV0aG9kLW5hbWU+ICg8dXJpPjo8bGluZS1ubz4pCiAgICAvLyAgICAjbiAgICAgPG1ldGhvZC1uYW1lPiAoPHVyaT4pCiAgICAvLyBpbiB3aGljaCAnPGFub255bW91cyBjbG9zdXJlPicgaXMgdGhlIG5hbWUgdXNlZCBmb3IgYW4gKHVubmFtZWQpIGZ1bmN0aW9uCiAgICAvLyBleHByZXNzaW9uLiBUaGUgbGFzdCBjYXNlIGlzIHVzZWQgZm9yIGFzeW5jIGJvZGllcy4KICAgIGZvciAoU3RyaW5nIGxpbmUgaW4gc3RhY2tUcmFjZS5zcGxpdCgnXG4nKSkgewogICAgICB0cnkgewogICAgICAgIGluZGV4Kys7CiAgICAgICAgaWYgKHJhbmdlU3RhcnQgIT0gbnVsbCAmJiBpbmRleCA8IHJhbmdlU3RhcnQpIGNvbnRpbnVlOwogICAgICAgIGlmIChyYW5nZUVuZCAhPSBudWxsICYmIGluZGV4ID4gcmFuZ2VFbmQpIGJyZWFrOwogICAgICAgIGlmIChsaW5lLmlzRW1wdHkpIGNvbnRpbnVlOwoKICAgICAgICAvLyBTdHJpcCBpbmRleC4KICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlRmlyc3QoaW5kZXhQYXR0ZXJuLCAnJyk7CiAgICAgICAgaWYgKGxpbmUgPT0gJzxhc3luY2hyb25vdXMgc3VzcGVuc2lvbj4nKSB7CiAgICAgICAgICBsaW5lcy5hZGQobmV3IFN0YWNrVHJhY2VMaW5lKGluZGV4LCAnJywgJycsICcnLCBsaW5lKSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGludCBsZWZ0UGFyZW5Qb3MgPSBsaW5lLmluZGV4T2YoJygnKTsKICAgICAgICBpbnQgcmlnaHRQYXJlblBvcyA9IGxpbmUuaW5kZXhPZignKScsIGxlZnRQYXJlblBvcyk7CiAgICAgICAgaW50IGxhc3RDb2xvbiA9IGxpbmUubGFzdEluZGV4T2YoJzonLCByaWdodFBhcmVuUG9zKTsKICAgICAgICBpbnQgbmV4dFRvTGFzdENvbG9uID0gbGluZS5sYXN0SW5kZXhPZignOicsIGxhc3RDb2xvbiAtIDEpOwoKICAgICAgICBTdHJpbmcgbGluZU5vOwogICAgICAgIFN0cmluZyBjb2x1bW5ObzsKICAgICAgICBpZiAobmV4dFRvTGFzdENvbG9uICE9IC0xKSB7CiAgICAgICAgICBsaW5lTm8gPSBsaW5lLnN1YnN0cmluZyhuZXh0VG9MYXN0Q29sb24gKyAxLCBsYXN0Q29sb24pOwogICAgICAgICAgY29sdW1uTm8gPSBsaW5lLnN1YnN0cmluZyhsYXN0Q29sb24gKyAxLCByaWdodFBhcmVuUG9zKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGludC5wYXJzZShjb2x1bW5Obyk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgaW50LnBhcnNlKGxpbmVObyk7CiAgICAgICAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIHsKICAgICAgICAgICAgICAvLyBPbmx5IGxpbmUgbnVtYmVyLgogICAgICAgICAgICAgIGxpbmVObyA9IGNvbHVtbk5vOwogICAgICAgICAgICAgIGNvbHVtbk5vID0gJyc7CiAgICAgICAgICAgICAgbmV4dFRvTGFzdENvbG9uID0gbGFzdENvbG9uOwogICAgICAgICAgICB9CiAgICAgICAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIC8vIE5vIGNvbHVtbiBudW1iZXIgbm9yIGxpbmUgbnVtYmVyLgogICAgICAgICAgICBsaW5lTm8gPSAnJzsKICAgICAgICAgICAgY29sdW1uTm8gPSAnJzsKICAgICAgICAgICAgbmV4dFRvTGFzdENvbG9uID0gcmlnaHRQYXJlblBvczsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGluZU5vID0gbGluZS5zdWJzdHJpbmcobGFzdENvbG9uICsgMSwgcmlnaHRQYXJlblBvcyk7CiAgICAgICAgICBjb2x1bW5ObyA9ICcnOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaW50LnBhcnNlKGxpbmVObyk7CiAgICAgICAgICAgIG5leHRUb0xhc3RDb2xvbiA9IGxhc3RDb2xvbjsKICAgICAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIHsKICAgICAgICAgICAgLy8gTm8gY29sdW1uIG51bWJlciBub3IgbGluZSBudW1iZXIuCiAgICAgICAgICAgIGxpbmVObyA9IGNvbHVtbk5vOwogICAgICAgICAgICBjb2x1bW5ObyA9ICcnOwogICAgICAgICAgICBuZXh0VG9MYXN0Q29sb24gPSByaWdodFBhcmVuUG9zOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGxpbmVOby5sZW5ndGggPiBtYXhMaW5lTm9MZW5ndGgpIHsKICAgICAgICAgIG1heExpbmVOb0xlbmd0aCA9IGxpbmVOby5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGlmIChjb2x1bW5Oby5sZW5ndGggPiBtYXhDb2x1bW5Ob0xlbmd0aCkgewogICAgICAgICAgbWF4Q29sdW1uTm9MZW5ndGggPSBjb2x1bW5Oby5sZW5ndGg7CiAgICAgICAgfQoKICAgICAgICBTdHJpbmcgZmlsZSA9IGxpbmUuc3Vic3RyaW5nKGxlZnRQYXJlblBvcyArIDEsIG5leHRUb0xhc3RDb2xvbik7CiAgICAgICAgaWYgKGZpbGVQcmVmaXggIT0gbnVsbCAmJiBmaWxlLnN0YXJ0c1dpdGgoZmlsZVByZWZpeCkpIHsKICAgICAgICAgIGZpbGUgPSBmaWxlLnN1YnN0cmluZyhmaWxlUHJlZml4Lmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmIChmaWxlLmxlbmd0aCA+IG1heEZpbGVMZW5ndGgpIHsKICAgICAgICAgIG1heEZpbGVMZW5ndGggPSBmaWxlLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgU3RyaW5nIG1ldGhvZCA9IGxpbmUuc3Vic3RyaW5nKDAsIGxlZnRQYXJlblBvcyAtIDEpOwogICAgICAgIGlmIChsYW1iZGEgIT0gbnVsbCkgewogICAgICAgICAgbWV0aG9kID0gbWV0aG9kLnJlcGxhY2VBbGwoJzxhbm9ueW1vdXMgY2xvc3VyZT4nLCBsYW1iZGEpOwogICAgICAgIH0KICAgICAgICBsaW5lcy5hZGQobmV3IFN0YWNrVHJhY2VMaW5lKGluZGV4LCBmaWxlLCBsaW5lTm8sIGNvbHVtbk5vLCBtZXRob2QpKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHRocm93ICdFcnJvciBwcmV0dGlmeWluZyAiJGxpbmUiOiAkZSc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUxpbmVzLmZyb21MaW5lcygKICAgICAgICBsaW5lcywgbWF4RmlsZUxlbmd0aCwgbWF4TGluZU5vTGVuZ3RoLCBtYXhDb2x1bW5Ob0xlbmd0aCk7CiAgfQoKICBTdGFja1RyYWNlTGluZXMuZnJvbUxpbmVzKHRoaXMubGluZXMsIHRoaXMubWF4RmlsZUxlbmd0aCwKICAgICAgdGhpcy5tYXhMaW5lTm9MZW5ndGgsIHRoaXMubWF4Q29sdW1uTm9MZW5ndGgpOwoKICBTdGFja1RyYWNlTGluZXMgc3VidHJhY2UoaW50IG9mZnNldCkgewogICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlTGluZXMuZnJvbUxpbmVzKGxpbmVzLnN1Ymxpc3Qob2Zmc2V0KSwgbWF4RmlsZUxlbmd0aCwKICAgICAgICBtYXhMaW5lTm9MZW5ndGgsIG1heENvbHVtbk5vTGVuZ3RoKTsKICB9CgogIFN0cmluZyBwcmV0dGlmeSh7Ym9vbCBzaG93Q29sdW1uTm86IGZhbHNlLCBib29sIHNob3dEb3RzOiB0cnVlfSkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYm9vbCBkb3RzID0gdHJ1ZTsKICAgIGZvciAoU3RhY2tUcmFjZUxpbmUgbGluZSBpbiBsaW5lcykgewogICAgICBzYi53cml0ZSgnICAnKTsKICAgICAgbGluZS5wcmludE9uKHNiLAogICAgICAgICAgZmlsZUxlbmd0aDogbWF4RmlsZUxlbmd0aCwKICAgICAgICAgIHBhZGRpbmc6IHNob3dEb3RzICYmIGRvdHMgPyAnIC4nIDogJyAnLAogICAgICAgICAgbGluZU5vTGVuZ3RoOiBtYXhMaW5lTm9MZW5ndGgsCiAgICAgICAgICBzaG93Q29sdW1uTm86IHNob3dDb2x1bW5ObywKICAgICAgICAgIGNvbHVtbk5vTGVuZ3RoOiBtYXhDb2x1bW5Ob0xlbmd0aCk7CgogICAgICBkb3RzID0gIWRvdHM7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBwcmV0dGlmeSgpOwogIH0KfQoKLy8vIEEgcGFyc2VkIGxpbmUgZnJvbSBhIHN0YWNrIHRyYWNlLgpjbGFzcyBTdGFja1RyYWNlTGluZSB7CiAgZmluYWwgaW50IGluZGV4OwogIGZpbmFsIFN0cmluZyBmaWxlOwogIGZpbmFsIFN0cmluZyBsaW5lTm87CiAgZmluYWwgU3RyaW5nIGNvbHVtbk5vOwogIGZpbmFsIFN0cmluZyBtZXRob2Q7CgogIFN0YWNrVHJhY2VMaW5lKAogICAgICB0aGlzLmluZGV4LCB0aGlzLmZpbGUsIHRoaXMubGluZU5vLCB0aGlzLmNvbHVtbk5vLCB0aGlzLm1ldGhvZCk7CgogIHZvaWQgcHJpbnRPbihTdHJpbmdCdWZmZXIgc2IsCiAgICAgIHtTdHJpbmcgcGFkZGluZzogJyAnLAogICAgICBpbnQgZmlsZUxlbmd0aCwKICAgICAgaW50IGxpbmVOb0xlbmd0aCwKICAgICAgaW50IGNvbHVtbk5vTGVuZ3RoLAogICAgICBib29sIHNob3dDb2x1bW5ObzogZmFsc2V9KSB7CiAgICBTdHJpbmcgZmlsZVRleHQgPSAnJHtmaWxlfSAnOwogICAgaWYgKGZpbGVMZW5ndGggIT0gbnVsbCkgewogICAgICBmaWxlVGV4dCA9IHBhZChmaWxlVGV4dCwgZmlsZUxlbmd0aCwgZG90czogcGFkZGluZyk7CiAgICB9CiAgICBTdHJpbmcgbGluZU5vVGV4dCA9IGxpbmVObzsKICAgIGlmIChsaW5lTm9MZW5ndGggIT0gbnVsbCkgewogICAgICBsaW5lTm9UZXh0ID0gcGFkKGxpbmVOb1RleHQsIGxpbmVOb0xlbmd0aCwgcGFkTGVmdDogdHJ1ZSk7CiAgICB9CiAgICBTdHJpbmcgY29sdW1uTm9UZXh0ID0gc2hvd0NvbHVtbk5vID8gJycgOiBjb2x1bW5ObzsKICAgIGlmIChjb2x1bW5Ob0xlbmd0aCAhPSBudWxsKSB7CiAgICAgIGNvbHVtbk5vVGV4dCA9ICc6JHtwYWQoY29sdW1uTm9UZXh0LCBjb2x1bW5Ob0xlbmd0aCl9JzsKICAgIH0KICAgIHNiLndyaXRlKCckZmlsZVRleHQgJGxpbmVOb1RleHQkY29sdW1uTm9UZXh0ICRtZXRob2RcbicpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gMTMgKiBpbmRleCArCiAgICAgICAgMTcgKiBmaWxlLmhhc2hDb2RlICsKICAgICAgICAxOSAqIGxpbmVOby5oYXNoQ29kZSArCiAgICAgICAgMjMgKiBjb2x1bW5Oby5oYXNoQ29kZSArCiAgICAgICAgMjkgKiBtZXRob2QuaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFN0YWNrVHJhY2VMaW5lKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gaW5kZXggPT0gb3RoZXIuaW5kZXggJiYKICAgICAgICBmaWxlID09IG90aGVyLmZpbGUgJiYKICAgICAgICBsaW5lTm8gPT0gb3RoZXIubGluZU5vICYmCiAgICAgICAgY29sdW1uTm8gPT0gb3RoZXIuY29sdW1uTm8gJiYKICAgICAgICBtZXRob2QgPT0gb3RoZXIubWV0aG9kOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIiRtZXRob2QgQCAkZmlsZSBbJGxpbmVObzokY29sdW1uTm9dIjsKfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHRoaXMgZm9ybWF0IGZvciAtLXRocm93LW9uLWVycm9yLgovLy8gQ29udmVydHMgdGhlIG5vcm1hbCBWTSBzdGFjayB0cmFjZSBpbnRvIGEgbW9yZSBjb21wYWN0IGFuZCByZWFkYWJsZSBmb3JtYXQuCi8vLwovLy8gVGhlIG91dHB1dCBmb3JtYXQgaXMgYDxmaWxlPiAuIC4gLiA8bGluZU5vPjo8Y29sdW1uTm8+IDxtZXRob2Q+YCB3aGVyZQovLy8gYDxmaWxlPmAgaXMgZmlsZSBuYW1lLCBgPGxpbmVObz5gIGlzIHRoZSBsaW5lIG51bWJlciwgYDxjb2x1bW5Obz5gIGlzIHRoZQovLy8gY29sdW1uIG51bWJlciwgYW5kIGA8bWV0aG9kPmAgaXMgdGhlIG1ldGhvZCBuYW1lLgovLy8KLy8vIElmIFtyYW5nZVN0YXJ0XSBhbmQvb3IgW3JhbmdlRW5kXSBhcmUgcHJvdmlkZWQsIG9ubHkgdGhlIGxpbmVzIHdpdGhpbiB0aGUKLy8vIHJhbmdlIGFyZSBpbmNsdWRlZC4KLy8vIElmIFtzaG93Q29sdW1uTm9dIGlzIGBmYWxzZWAsIHRoZSBgOjxjb2x1bW5Obz5gIHBhcnQgaXMgb21pdHRlZC4KLy8vIElmIFtzaG93RG90c10gaXMgYHRydWVgLCB0aGUgc3BhY2UgYmV0d2VlbiBgPGZpbGU+YCBhbmQgYDxsaW5lTm8+YCBpcyBwYWRkZWQKLy8vIHdpdGggZG90cyBvbiBldmVyeSBvdGhlciBsaW5lLgovLy8gSWYgW2ZpbGVQcmVmaXhdIGlzIHByb3ZpZGVkLCB0aGVuIGZvciAgZXZlcnkgZmlsZSBuYW1lIHRoYXRzIHN0YXJ0cyB3aXRoCi8vLyBbZmlsZVByZWZpeF0gb25seSB0aGUgcmVtYWluZGVyIGlzIHByaW50ZWQuCi8vLyBJZiBbbGFtYmRhXSBpcyBub24tbnVsbCwgYW5vbnltb3VzIGNsb3N1cmVzIGFyZSBwcmludGVkIGFzIFtsYW1iZGFdLgpTdHJpbmcgcHJldHRpZnlTdGFja1RyYWNlKFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSwKICAgIHtpbnQgcmFuZ2VTdGFydCwKICAgIGludCByYW5nZUVuZCwKICAgIGJvb2wgc2hvd0NvbHVtbk5vOiBmYWxzZSwKICAgIGJvb2wgc2hvd0RvdHM6IHRydWUsCiAgICBTdHJpbmcgZmlsZVByZWZpeCwKICAgIFN0cmluZyBsYW1iZGE6IHInPyd9KSB7CiAgcmV0dXJuIG5ldyBTdGFja1RyYWNlTGluZXMuZnJvbVRyYWNlKHN0YWNrVHJhY2UsCiAgICAgICAgICByYW5nZVN0YXJ0OiByYW5nZVN0YXJ0LAogICAgICAgICAgcmFuZ2VFbmQ6IHJhbmdlRW5kLAogICAgICAgICAgZmlsZVByZWZpeDogZmlsZVByZWZpeCwKICAgICAgICAgIGxhbWJkYTogbGFtYmRhKQogICAgICAucHJldHRpZnkoc2hvd0NvbHVtbk5vOiBzaG93Q29sdW1uTm8sIHNob3dEb3RzOiBzaG93RG90cyk7Cn0KCi8vLyBQYWRzIChvciB0cnVuY2F0ZXMpIFt0ZXh0XSB0byB0aGUgW2ludGVuZGVkTGVuZ3RoXS4KLy8vCi8vLyBJZiBbcGFkTGVmdF0gaXMgWzp0cnVlOl0gdGhlIHRleHQgaXMgcGFkZGluZyBpbnNlcnRlZCB0byB0aGUgbGVmdCBvZiBbdGV4dF0uCi8vLyBBIHJlcGV0aXRpb24gb2YgdGhlIFtkb3RzXSB0ZXh0IGlzIHVzZWQgZm9yIHBhZGRpbmcuClN0cmluZyBwYWQoU3RyaW5nIHRleHQsIGludCBpbnRlbmRlZExlbmd0aCwKICAgIHtib29sIHBhZExlZnQ6IGZhbHNlLCBTdHJpbmcgZG90czogJyAnfSkgewogIGlmICh0ZXh0Lmxlbmd0aCA9PSBpbnRlbmRlZExlbmd0aCkgcmV0dXJuIHRleHQ7CiAgaWYgKHRleHQubGVuZ3RoID4gaW50ZW5kZWRMZW5ndGgpIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCBpbnRlbmRlZExlbmd0aCk7CiAgaWYgKGRvdHMgPT0gbnVsbCB8fCBkb3RzLmlzRW1wdHkpIGRvdHMgPSAnICc7CiAgaW50IGRvdHNMZW5ndGggPSBkb3RzLmxlbmd0aDsKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgaWYgKCFwYWRMZWZ0KSB7CiAgICBzYi53cml0ZSh0ZXh0KTsKICB9CiAgZm9yIChpbnQgaW5kZXggPSB0ZXh0Lmxlbmd0aDsgaW5kZXggPCBpbnRlbmRlZExlbmd0aDsgaW5kZXgrKykgewogICAgaW50IGRvdHNJbmRleCA9IGluZGV4ICUgZG90c0xlbmd0aDsKICAgIHNiLndyaXRlKGRvdHMuc3Vic3RyaW5nKGRvdHNJbmRleCwgZG90c0luZGV4ICsgMSkpOwogIH0KICBpZiAocGFkTGVmdCkgewogICAgc2Iud3JpdGUodGV4dCk7CiAgfQogIHJldHVybiBzYi50b1N0cmluZygpOwp9CoFfAE5OPAEZHAEkI0gBOwQ7BE9NTygESwRQTUwPEhURAgEcUAgOExcKKU0SEBkGHSoGJCUEAgFROCtGAgEsHUFIATokFRoCATo1ASgWQVA7J0QSKwYTBgIBPgRRTS8/GzwIDhw1HBwrBAIBNhgkGx0fATJQOBQbHR8BHjVPFD0xJ1E7MgwRQDkkARg0M0IUCgEuPT5EARcZJUNDECESISMjIR0rDiExGRstDBFBGRAfKSExHxstDAoBLysKMy8KAUlBNAorJwo9HkUKThQvCAYqQwQBPDUBKU8tBAFFKhYpFhclMikmLgEUBhoEAQwWFwQCASYXExUXGRcBEkcBIBwWGBojIh47BiAgQQY4Ij4GPgQBDBUYHR8hHgQBDBwtMCMeIiYgBAEMPgIBPlAES042BE4YRVEjTTBJMRUSHhkXHDMiHiIaQQIBOARROSwvMk4wICgSFARDKDgEERQEGAIBJ3BhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvdHJhY2UuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9oZWxwZXJzL2RlYnVnX2NvbGxlY3Rpb24uZGFydK+8Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnR5cGVkZWYgdm9pZCBEZWJ1Z0NhbGxiYWNrKFN0cmluZyBtZXRob2ROYW1lLCB2YXIgYXJnMSwgdmFyIGFyZzIpOwoKY2xhc3MgRGVidWdNYXA8SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIGZpbmFsIE1hcDxLLCBWPiBzb3VyY2VNYXA7CiAgRGVidWdDYWxsYmFjayBpbmRleFNldENhbGxiYWNrOwogIERlYnVnQ2FsbGJhY2sgcHV0SWZBYnNlbnRDYWxsYmFjazsKICBEZWJ1Z0NhbGxiYWNrIHJlbW92ZUNhbGxiYWNrOwoKICBEZWJ1Z01hcCh0aGlzLnNvdXJjZU1hcCwge0RlYnVnQ2FsbGJhY2sgYWRkQ2FsbGJhY2ssIHRoaXMucmVtb3ZlQ2FsbGJhY2t9KSB7CiAgICBpZiAoYWRkQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgICB0aGlzLmFkZENhbGxiYWNrID0gYWRkQ2FsbGJhY2s7CiAgICB9CiAgfQoKICB2b2lkIHNldCBhZGRDYWxsYmFjayhEZWJ1Z0NhbGxiYWNrIHZhbHVlKSB7CiAgICBpbmRleFNldENhbGxiYWNrID0gdmFsdWU7CiAgICBwdXRJZkFic2VudENhbGxiYWNrID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8UkssIFJWPiBjYXN0PFJLLCBSVj4oKSA9PiBNYXAuY2FzdEZyb208SywgViwgUkssIFJWPih0aGlzKTsKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSB7CiAgICByZXR1cm4gc291cmNlTWFwLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBzb3VyY2VNYXAuY29udGFpbnNLZXkoa2V5KTsKCiAgQG92ZXJyaWRlCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSA9PiBzb3VyY2VNYXBba2V5XTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGlmIChpbmRleFNldENhbGxiYWNrICE9IG51bGwpIHsKICAgICAgaW5kZXhTZXRDYWxsYmFjaygnW109Jywga2V5LCB2YWx1ZSk7CiAgICB9CiAgICBzb3VyY2VNYXBba2V5XSA9IHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICByZXR1cm4gc291cmNlTWFwLnB1dElmQWJzZW50KGtleSwgKCkgewogICAgICBWIHYgPSBpZkFic2VudCgpOwogICAgICBpZiAocHV0SWZBYnNlbnRDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgICAgcHV0SWZBYnNlbnRDYWxsYmFjaygncHV0SWZBYnNlbnQnLCBrZXksIHYpOwogICAgICB9CiAgICAgIHJldHVybiB2OwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpID0+IHNvdXJjZU1hcC5hZGRBbGwob3RoZXIpOwoKICBAb3ZlcnJpZGUKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAocmVtb3ZlQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgICByZW1vdmVDYWxsYmFjaygncmVtb3ZlJywga2V5LCBzb3VyY2VNYXBba2V5XSk7CiAgICB9CiAgICByZXR1cm4gc291cmNlTWFwLnJlbW92ZShrZXkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhcigpIHsKICAgIGlmIChyZW1vdmVDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIHJlbW92ZUNhbGxiYWNrKCdjbGVhcicsIHNvdXJjZU1hcCwgbnVsbCk7CiAgICB9CiAgICBzb3VyY2VNYXAuY2xlYXIoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSA9PiBzb3VyY2VNYXAuZm9yRWFjaChmKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gc291cmNlTWFwLmtleXM7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gc291cmNlTWFwLnZhbHVlczsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzID0+IHNvdXJjZU1hcC5lbnRyaWVzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpIHsKICAgIHNvdXJjZU1hcC5hZGRFbnRyaWVzKGVudHJpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBzb3VyY2VNYXAubWFwKHRyYW5zZm9ybSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IHNvdXJjZU1hcC5sZW5ndGg7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gc291cmNlTWFwLmlzRW1wdHk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gc291cmNlTWFwLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pID0+CiAgICAgIHNvdXJjZU1hcC51cGRhdGUoa2V5LCB1cGRhdGUsIGlmQWJzZW50OiBpZkFic2VudCk7CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgc291cmNlTWFwLnVwZGF0ZUFsbCh1cGRhdGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBzb3VyY2VNYXAucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQp9CgpjbGFzcyBEZWJ1Z0l0ZXJhYmxlPEU+IGltcGxlbWVudHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlOwoKICBEZWJ1Z0l0ZXJhYmxlKHRoaXMuaXRlcmFibGUpOwoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gaXRlcmFibGUuaXRlcmF0b3I7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFI+IGNhc3Q8Uj4oKSA9PiBJdGVyYWJsZS5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLm1hcChmKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLndoZXJlKHRlc3QpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihFIGVsZW1lbnQpKSA9PiBpdGVyYWJsZS5leHBhbmQoZik7CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpID0+IGl0ZXJhYmxlLmNvbnRhaW5zKGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLmZvckVhY2goZik7CgogIEBvdmVycmlkZQogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSA9PiBpdGVyYWJsZS5yZWR1Y2UoY29tYmluZSk7CgogIEBvdmVycmlkZQogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgcmV0dXJuIGl0ZXJhYmxlLmZvbGQoaW5pdGlhbFZhbHVlLCBjb21iaW5lKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLmV2ZXJ5KHRlc3QpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgPT4gaXRlcmFibGUuam9pbihzZXBhcmF0b3IpOwoKICBAb3ZlcnJpZGUKICBib29sIGFueShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gaXRlcmFibGUuYW55KHRlc3QpOwoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHJldHVybiBpdGVyYWJsZS50b0xpc3QoZ3Jvd2FibGU6IGdyb3dhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiB0b1NldCgpID0+IGl0ZXJhYmxlLnRvU2V0KCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IGl0ZXJhYmxlLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBpdGVyYWJsZS5pc0VtcHR5OwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05vdEVtcHR5ID0+IGl0ZXJhYmxlLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEU+IHRha2UoaW50IG4pID0+IGl0ZXJhYmxlLnRha2Uobik7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEU+IHRha2VXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpID0+IGl0ZXJhYmxlLnRha2VXaGlsZSh0ZXN0KTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgbikgPT4gaXRlcmFibGUuc2tpcChuKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgPT4gaXRlcmFibGUuc2tpcFdoaWxlKHRlc3QpOwoKICBAb3ZlcnJpZGUKICBFIGdldCBmaXJzdCA9PiBpdGVyYWJsZS5maXJzdDsKCiAgQG92ZXJyaWRlCiAgRSBnZXQgbGFzdCA9PiBpdGVyYWJsZS5sYXN0OwoKICBAb3ZlcnJpZGUKICBFIGdldCBzaW5nbGUgPT4gaXRlcmFibGUuc2luZ2xlOwoKICBAb3ZlcnJpZGUKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgcmV0dXJuIGl0ZXJhYmxlLmZpcnN0V2hlcmUodGVzdCwgb3JFbHNlOiBvckVsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgcmV0dXJuIGl0ZXJhYmxlLmxhc3RXaGVyZSh0ZXN0LCBvckVsc2U6IG9yRWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pID0+CiAgICAgIGl0ZXJhYmxlLnNpbmdsZVdoZXJlKHRlc3QsIG9yRWxzZTogb3JFbHNlKTsKCiAgQG92ZXJyaWRlCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSA9PiBpdGVyYWJsZS5lbGVtZW50QXQoaW5kZXgpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxFPiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEU+IG90aGVyKSA9PiBpdGVyYWJsZS5mb2xsb3dlZEJ5KG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gaXRlcmFibGUud2hlcmVUeXBlPFQ+KCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGl0ZXJhYmxlLnRvU3RyaW5nKCk7Cn0KCmNsYXNzIERlYnVnTGlzdDxFPiBleHRlbmRzIERlYnVnSXRlcmFibGU8RT4gaW1wbGVtZW50cyBMaXN0PEU+IHsKICBEZWJ1Z0NhbGxiYWNrIGFkZENhbGxiYWNrOwogIERlYnVnQ2FsbGJhY2sgYWRkQWxsQ2FsbGJhY2s7CgogIERlYnVnTGlzdChMaXN0PEU+IGxpc3QsIHt0aGlzLmFkZENhbGxiYWNrLCB0aGlzLmFkZEFsbENhbGxiYWNrfSkKICAgICAgOiBzdXBlcihsaXN0KTsKCiAgTGlzdDxFPiBnZXQgbGlzdCA9PiBpdGVyYWJsZTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gTGlzdC5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBAb3ZlcnJpZGUKICBMaXN0PEU+IG9wZXJhdG9yICsoTGlzdDxFPiBvdGhlcikgPT4gbGlzdCArIG90aGVyOwoKICBAb3ZlcnJpZGUKICBFIG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gbGlzdFtpbmRleF07CgogIEBvdmVycmlkZQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgRSB2YWx1ZSkgewogICAgbGlzdFtpbmRleF0gPSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IGZpcnN0KEUgZWxlbWVudCkgewogICAgbGlzdC5maXJzdCA9IGVsZW1lbnQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldCBsYXN0KEUgZWxlbWVudCkgewogICAgbGlzdC5sYXN0ID0gZWxlbWVudDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IGxpc3QubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICB2b2lkIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCkgewogICAgbGlzdC5sZW5ndGggPSBuZXdMZW5ndGg7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChFIHZhbHVlKSB7CiAgICBpZiAoYWRkQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgICBhZGRDYWxsYmFjaygnYWRkJywgdmFsdWUsIG51bGwpOwogICAgfQogICAgbGlzdC5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIGlmIChhZGRBbGxDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIGFkZEFsbENhbGxiYWNrKCdhZGRBbGwnLCBpdGVyYWJsZSwgbnVsbCk7CiAgICB9CiAgICBsaXN0LmFkZEFsbChpdGVyYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxFPiBnZXQgcmV2ZXJzZWQgPT4gbGlzdC5yZXZlcnNlZDsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShFIGEsIEUgYildKSA9PiBsaXN0LnNvcnQoY29tcGFyZSk7CgogIEBvdmVycmlkZQogIHZvaWQgc2h1ZmZsZShbcmFuZG9tXSkgPT4gbGlzdC5zaHVmZmxlKHJhbmRvbSk7CgogIEBvdmVycmlkZQogIGludCBpbmRleE9mKEUgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSA9PiBsaXN0LmluZGV4T2YoZWxlbWVudCwgc3RhcnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKSA9PgogICAgICBsaXN0LmluZGV4V2hlcmUodGVzdCwgc3RhcnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgbGFzdEluZGV4T2YoRSBlbGVtZW50LCBbaW50IHN0YXJ0XSkgPT4gbGlzdC5sYXN0SW5kZXhPZihlbGVtZW50LCBzdGFydCk7CgogIEBvdmVycmlkZQogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydF0pID0+CiAgICAgIGxpc3QubGFzdEluZGV4V2hlcmUodGVzdCwgc3RhcnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgPT4gbGlzdC5jbGVhcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGluc2VydChpbnQgaW5kZXgsIEUgZWxlbWVudCkgPT4gbGlzdC5pbnNlcnQoaW5kZXgsIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBsaXN0Lmluc2VydEFsbChpbmRleCwgaXRlcmFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgPT4gbGlzdC5zZXRBbGwoaW5kZXgsIGl0ZXJhYmxlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKSA9PiBsaXN0LnJlbW92ZSh2YWx1ZSk7CgogIEBvdmVycmlkZQogIEUgcmVtb3ZlQXQoaW50IGluZGV4KSA9PiBsaXN0LnJlbW92ZUF0KGluZGV4KTsKCiAgQG92ZXJyaWRlCiAgRSByZW1vdmVMYXN0KCkgPT4gbGlzdC5yZW1vdmVMYXN0KCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGxpc3QucmVtb3ZlV2hlcmUodGVzdCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGxpc3QucmV0YWluV2hlcmUodGVzdCk7CgogIEBvdmVycmlkZQogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgPT4gbGlzdC5zdWJsaXN0KHN0YXJ0LCBlbmQpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxFPiBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpID0+IGxpc3QuZ2V0UmFuZ2Uoc3RhcnQsIGVuZCk7CgogIEBvdmVycmlkZQogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgbGlzdC5zZXRSYW5nZShzdGFydCwgZW5kLCBpdGVyYWJsZSwgc2tpcENvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBsaXN0LnJlbW92ZVJhbmdlKHN0YXJ0LCBlbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbRSBmaWxsVmFsdWVdKSB7CiAgICBsaXN0LmZpbGxSYW5nZShzdGFydCwgZW5kLCBmaWxsVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiByZXBsYWNlbWVudCkgewogICAgbGlzdC5yZXBsYWNlUmFuZ2Uoc3RhcnQsIGVuZCwgcmVwbGFjZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPGludCwgRT4gYXNNYXAoKSA9PiBsaXN0LmFzTWFwKCk7Cn0KCmNsYXNzIERlYnVnU2V0PEU+IGV4dGVuZHMgRGVidWdJdGVyYWJsZTxFPiBpbXBsZW1lbnRzIFNldDxFPiB7CiAgRGVidWdDYWxsYmFjayBhZGRDYWxsYmFjazsKCiAgRGVidWdTZXQoU2V0PEU+IHNldCwge3RoaXMuYWRkQ2FsbGJhY2t9KSA6IHN1cGVyKHNldCk7CgogIFNldDxFPiBnZXQgc2V0ID0+IGl0ZXJhYmxlOwoKICBAb3ZlcnJpZGUKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKE9iamVjdCB2YWx1ZSkgPT4gc2V0LmNvbnRhaW5zKHZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhZGQoRSB2YWx1ZSkgewogICAgaWYgKGFkZENhbGxiYWNrICE9IG51bGwpIHsKICAgICAgYWRkQ2FsbGJhY2soJ2FkZCcsIHZhbHVlLCBudWxsKTsKICAgIH0KICAgIHJldHVybiBzZXQuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBlbGVtZW50cy5mb3JFYWNoKGFkZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpID0+IHNldC5yZW1vdmUodmFsdWUpOwoKICBAb3ZlcnJpZGUKICBFIGxvb2t1cChPYmplY3Qgb2JqZWN0KSA9PiBzZXQubG9va3VwKG9iamVjdCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpID0+IHNldC5yZW1vdmVBbGwoZWxlbWVudHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSA9PiBzZXQucmV0YWluQWxsKGVsZW1lbnRzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gc2V0LnJlbW92ZVdoZXJlKHRlc3QpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBzZXQucmV0YWluV2hlcmUodGVzdCk7CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgPT4gc2V0LmNvbnRhaW5zQWxsKG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgPT4gc2V0LmludGVyc2VjdGlvbihvdGhlcik7CgogIEBvdmVycmlkZQogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpID0+IHNldC51bmlvbihvdGhlcik7CgogIEBvdmVycmlkZQogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PiBzZXQuZGlmZmVyZW5jZShvdGhlcik7CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSA9PiBzZXQuY2xlYXIoKTsKCiAgQG92ZXJyaWRlCiAgU2V0PEU+IHRvU2V0KCkgPT4gc2V0LnRvU2V0KCk7Cn0KCi8vLyBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBydW50aW1lIHR5cGUgb2YgW29iamVjdF0gaXMgbm90IGluCi8vLyBbcnVudGltZVR5cGVzXS4KLy8vCi8vLyBVc2UgdGhpcyB0byBncmFkdWFsbHkgYnVpbGQgdGhlIHNldCBvZiBhY3R1YWwgcnVudGltZSB2YWx1ZXMgb2YgW29iamVjdF0KLy8vIGF0IHRoZSBjYWxsIHNpdGUgYnkgcnVubmluZyB0ZXN0IHByb2dyYW1zIGFuZCBhZGRpbmcgdG8gW3J1bnRpbWVUeXBlc10gd2hlbgovLy8gbmV3IHR5cGUgYXJlIGZvdW5kLgp2b2lkIGFzc2VydFR5cGUoU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiBydW50aW1lVHlwZXMsIHZhciBvYmplY3QsCiAgICB7Ym9vbCBzaG93T2JqZWN0czogZmFsc2V9KSB7CiAgU3RyaW5nIHJ1bnRpbWVUeXBlID0gJyR7b2JqZWN0LnJ1bnRpbWVUeXBlfSc7CiAgaWYgKHJ1bnRpbWVUeXBlcyAhPSBudWxsICYmIHJ1bnRpbWVUeXBlcy5jb250YWlucyhydW50aW1lVHlwZSkpIHJldHVybjsKICB0aHJvdyAnJG5hbWU6ICRydW50aW1lVHlwZScKICAgICAgJyR7c2hvd09iamVjdHMgPyAnICgkb2JqZWN0KScgOiAnJ30nOwp9CgovLy8gQ2FsbGJhY2sgZm9yIHRoZSBbYWRkQ2FsbGJhY2tdIG9mIFtEZWJ1Z01hcF0gdGhhdCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmCi8vLyB0aGUgcnVudGltZSB0eXBlIG9mIGtleS92YWx1ZSBwYWlycyBhcmUgbm90IGluIFtydW50aW1lVHlwZXNdLgovLy8KLy8vIFVzZSB0aGlzIHRvIGdyYWR1YWxseSBidWlsZCB0aGUgc2V0IG9mIGFjdHVhbCBydW50aW1lIHZhbHVlcyBvZiBrZXkvdmFsdWUKLy8vIHBhaXJzIG9mIGEgbWFwIGJ5IHJ1bm5pbmcgdGVzdCBwcm9ncmFtcyBhbmQgYWRkaW5nIHRvIFtydW50aW1lVHlwZXNdIHdoZW4KLy8vIG5ldyB0eXBlIGFyZSBmb3VuZC4KY2xhc3MgTWFwVHlwZUFzc2VydGVyIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IHJ1bnRpbWVUeXBlczsKICBmaW5hbCBib29sIHNob3dPYmplY3RzOwoKICBjb25zdCBNYXBUeXBlQXNzZXJ0ZXIodGhpcy5uYW1lLCB0aGlzLnJ1bnRpbWVUeXBlcywKICAgICAge2Jvb2wgdGhpcy5zaG93T2JqZWN0czogZmFsc2V9KTsKCiAgdm9pZCBjYWxsKFN0cmluZyBtZXRob2ROYW1lLCB2YXIga2V5LCB2YXIgdmFsdWUpIHsKICAgIGNoZWNrKGtleSwgdmFsdWUsICckbWV0aG9kTmFtZTogJyk7CiAgfQoKICB2b2lkIGNoZWNrKHZhciBrZXksIHZhciB2YWx1ZSwgW1N0cmluZyB0ZXh0ID0gJyddKSB7CiAgICBTdHJpbmcga2V5VHlwZSA9ICcke2tleS5ydW50aW1lVHlwZX0nOwogICAgU3RyaW5nIHZhbHVlVHlwZSA9ICcke3ZhbHVlLnJ1bnRpbWVUeXBlfSc7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzVHlwZXMgPSBydW50aW1lVHlwZXNba2V5VHlwZV07CiAgICBpZiAodmFsdWVzVHlwZXMgIT0gbnVsbCAmJiB2YWx1ZXNUeXBlcy5jb250YWlucyh2YWx1ZVR5cGUpKSByZXR1cm47CiAgICB0aHJvdyAnJG5hbWU6ICR0ZXh0JGtleVR5cGUgPT4gJHZhbHVlVHlwZScKICAgICAgICAnJHtzaG93T2JqZWN0cyA/ICcgKCRrZXkgPT4gJHZhbHVlKScgOiAnJ30nOwogIH0KfQoKLy8vIENhbGxiYWNrIGZvciB0aGUgW2FkZENhbGxiYWNrXSBvZiBbRGVidWdTZXRdIG9yIFtEZWJ1Z0xpc3RdICB0aGF0IHRocm93cyBhbgovLy8gZXhjZXB0aW9uIGlmIHRoZSBydW50aW1lIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGFyZSBub3QgaW4gW3J1bnRpbWVUeXBlc10uCi8vLwovLy8gVXNlIHRoaXMgdG8gZ3JhZHVhbGx5IGJ1aWxkIHRoZSBzZXQgb2YgYWN0dWFsIHJ1bnRpbWUgdmFsdWVzIG9mIHRoZSBlbGVtZW50cwovLy8gb2YgYSBjb2xsZWN0aW9uIGJ5IHJ1bm5pbmcgdGVzdCBwcm9ncmFtcyBhbmQgYWRkaW5nIHRvIFtydW50aW1lVHlwZXNdIHdoZW4KLy8vIG5ldyB0eXBlIGFyZSBmb3VuZC4KY2xhc3MgQ29sbGVjdGlvblR5cGVBc3NlcnRlciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgTGlzdDxTdHJpbmc+IHJ1bnRpbWVUeXBlczsKICBmaW5hbCBib29sIHNob3dPYmplY3RzOwoKICBjb25zdCBDb2xsZWN0aW9uVHlwZUFzc2VydGVyKHRoaXMubmFtZSwgdGhpcy5ydW50aW1lVHlwZXMsCiAgICAgIHtib29sIHRoaXMuc2hvd09iamVjdHM6IGZhbHNlfSk7CgogIHZvaWQgY2FsbChTdHJpbmcgbWV0aG9kTmFtZSwgdmFyIGVsZW1lbnQsIF8pIHsKICAgIGNoZWNrKGVsZW1lbnQsICckbWV0aG9kTmFtZTogJyk7CiAgfQoKICB2b2lkIGNoZWNrKHZhciBlbGVtZW50LCBbU3RyaW5nIHRleHQgPSAnJ10pIHsKICAgIFN0cmluZyBlbGVtZW50VHlwZSA9ICcke2VsZW1lbnQucnVudGltZVR5cGV9JzsKICAgIGlmIChydW50aW1lVHlwZXMuY29udGFpbnMoZWxlbWVudFR5cGUpKSByZXR1cm47CiAgICB0aHJvdyAnJG5hbWU6ICR0ZXh0JGVsZW1lbnRUeXBlJwogICAgICAgICcke3Nob3dPYmplY3RzID8gJyAoJGVsZW1lbnQpJyA6ICcnfSc7CiAgfQp9CoHvAE5OPAFDASwdIiUgAU8fJgYEAS4eIQQBDEIMJSsEAQw+AQwvAQwmJCsGHAQBDCcrGCk0CBAIBAEMOwEMGSI1BiIEAQwRIjAGFwQBDEABDCoBDC4BDD0BDDYjBAEMSSABDCYBDCkBDC8BDDg5AQwtIQQBDDAhBAIBMB4BIAEMMQEMOgw5AQxDAQxJAQw/AQw6AQxHAQxFMQQBDDwBDEQBDDgBDCowBAEMJgEMJQEMKAEMLgEMLwEMSQEMLwEMSQEMIQEMHwEMIwEMNTYEAQw0NQQBDDcyAQw3AQxLAQw5AQwsAgFBHSABQxUBIAEMMgw1AQwrAQwqGQQBDB4aBAEMHRkEAQwhAQwjHQQBDBYfJwYVBAEMJiIwBhsEAQwtAQw8AQwyAQxLAQw7JAEMTwEMOygBDCABDEQBDDQlBAEMUAEMMwEMMQEMJwEMRAEMRAEMRQEMSQEMUTQEAQwpIgQBDDYrBAEMQzAEAQwnAgE/HQE5AR4BDDAMNgEMFh8nBhsEAQwmGwQBDDIBDDEBDEgBDEgBDEMBDEMBDEYBDEUBDDIBDEEBDB8BDCECAUIUBE1QGEQhMEoeLAIBTUMETk4YGBUwGgE2JwE1KAQBNysvNkgvNQQCAVBNBFFPGB8VIxoBPScBMSUEATAzNCUvBAIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvZGVidWdfY29sbGVjdGlvbi5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2hlbHBlcnMvZXhwZW5zaXZlX21hcC5kYXJ0i8AvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iOwoKLy8vIFRoZSBleHBlbnNpdmUgbWFwIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgdXNlZnVsIGZvciB0cmFja2luZyBkb3duCi8vLyBleGNlc3NpdmUgbWVtb3J5IHVzYWdlIGR1ZSB0byBsYXJnZSBtYXBzLiBJdCBhY3RzIGFzIGFuIG9yZGluYXJ5Ci8vLyBoYXNoIG1hcCwgYnV0IGl0IHVzZXMgMTAgdGltZXMgbW9yZSBtZW1vcnkgKGJ5IGRlZmF1bHQpLgpjbGFzcyBFeHBlbnNpdmVNYXA8SywgVj4gZXh0ZW5kcyBNYXBCYXNlPEssIFY+IHsKICBmaW5hbCBMaXN0IF9tYXBzOwoKICBFeHBlbnNpdmVNYXAoW2ludCBjb3BpZXMgPSAxMF0pIDogX21hcHMgPSBuZXcgTGlzdChjb3BpZXMpIHsKICAgIGFzc2VydChjb3BpZXMgPiAwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX21hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgX21hcHNbaV0gPSBuZXcgTWFwPEssIFY+KCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwc1swXS5sZW5ndGg7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbWFwc1swXS5pc0VtcHR5OwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX21hcHNbMF0uaXNOb3RFbXB0eTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX21hcHNbMF0ua2V5czsKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IF9tYXBzWzBdLnZhbHVlczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBfbWFwc1swXS5jb250YWluc0tleShrZXkpOwogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+IF9tYXBzWzBdLmNvbnRhaW5zVmFsdWUodmFsdWUpOwoKICBAb3ZlcnJpZGUKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpID0+IF9tYXBzWzBdW2tleV07CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXBzWzBdLmZvckVhY2goYWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9tYXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9tYXBzW2ldW2tleV0gPSB2YWx1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgaWYgKGNvbnRhaW5zS2V5KGtleSkpIHJldHVybiB0aGlzW2tleV07CiAgICBWIHZhbHVlID0gaWZBYnNlbnQoKTsKICAgIHRoaXNba2V5XSA9IHZhbHVlOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9tYXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9tYXBzW2ldLmFkZEFsbChvdGhlcik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBWIHJlc3VsdCA9IF9tYXBzWzBdLnJlbW92ZShrZXkpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBfbWFwcy5sZW5ndGg7IGkrKykgewogICAgICBfbWFwc1tpXS5yZW1vdmUoa2V5KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfbWFwcy5sZW5ndGg7IGkrKykgewogICAgICBfbWFwc1tpXS5jbGVhcigpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEtSLCBWUj4gY2FzdDxLUiwgVlI+KCkgPT4gTWFwLmNhc3RGcm9tPEssIFYsIEtSLCBWUj4odGhpcyk7CiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzID0+IF9tYXBzWzBdLmVudHJpZXM7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfbWFwcy5sZW5ndGg7IGkrKykgewogICAgICBfbWFwc1tpXS5hZGRFbnRyaWVzKGVudHJpZXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEtSLCBWUj4gbWFwPEtSLCBWUj4oTWFwRW50cnk8S1IsIFZSPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfbWFwc1swXS5tYXAodHJhbnNmb3JtKTsKCiAgQG92ZXJyaWRlCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgewogICAgViByZXN1bHQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9tYXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdCA9IF9tYXBzW2ldLnVwZGF0ZShrZXksIHVwZGF0ZSwgaWZBYnNlbnQ6IGlmQWJzZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX21hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgX21hcHNbaV0udXBkYXRlQWxsKHVwZGF0ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX21hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgX21hcHNbaV0ucmVtb3ZlV2hlcmUodGVzdCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiZXhwZW5zaXZlKCR7X21hcHNbMF19eCR7X21hcHMubGVuZ3RofSkiOwp9Cn4ATk48ARoBQ0U9MRQBPxgtIgYEAQwlDCgMLgEMKQwtAQw9DEUBDC4BDC4eBAEMJi0dBgQBDCcsGhcSBAEMIS0eBgQBDBklLRwGEwQBDBEtGAYEAQxCDDwBDDYtJAYEAQxJHwEMNw4tQQYTBAEMLS0iBgQBDDAtIgYEAQxBAgEvcGFja2FnZTpjb21waWxlci9zcmMvaGVscGVycy9leHBlbnNpdmVfbWFwLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGVscGVycy9leHBlbnNpdmVfc2V0LmRhcnSNny8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgovLy8gVGhlIGV4cGVuc2l2ZSBzZXQgaXMgYSBkYXRhIHN0cnVjdHVyZSB1c2VmdWwgZm9yIHRyYWNraW5nIGRvd24KLy8vIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UgZHVlIHRvIGxhcmdlIHNldHMuIEl0IGFjdHMgYXMgYW4gb3JkaW5hcnkKLy8vIGhhc2ggc2V0LCBidXQgaXQgdXNlcyAxMCB0aW1lcyBtb3JlIG1lbW9yeSAoYnkgZGVmYXVsdCkuCmNsYXNzIEV4cGVuc2l2ZVNldDxFPiBleHRlbmRzIFNldEJhc2U8RT4gewogIGZpbmFsIExpc3QgX3NldHM7CgogIEV4cGVuc2l2ZVNldChbaW50IGNvcGllcyA9IDEwXSkgOiBfc2V0cyA9IG5ldyBMaXN0KGNvcGllcykgewogICAgYXNzZXJ0KGNvcGllcyA+IDApOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2V0cy5sZW5ndGg7IGkrKykgewogICAgICBfc2V0c1tpXSA9IG5ldyBTZXQ8RT4oKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IF9zZXRzWzBdLmxlbmd0aDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IF9zZXRzWzBdLmlzRW1wdHk7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfc2V0c1swXS5pc05vdEVtcHR5OwoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX3NldHNbMF0uaXRlcmF0b3I7CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnMoT2JqZWN0IG9iamVjdCkgPT4gX3NldHNbMF0uY29udGFpbnMob2JqZWN0KTsKICBAb3ZlcnJpZGUKICBFIGxvb2t1cChPYmplY3Qgb2JqZWN0KSA9PiBfc2V0c1swXS5sb29rdXAob2JqZWN0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHsKICAgIF9zZXRzWzBdLmZvckVhY2goYWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWRkKEUgZWxlbWVudCkgewogICAgYm9vbCByZXN1bHQgPSBfc2V0c1swXS5hZGQoZWxlbWVudCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IF9zZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9zZXRzW2ldLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBvYmplY3RzKSB7CiAgICBmb3IgKEUgZWFjaCBpbiBvYmplY3RzKSB7CiAgICAgIGFkZChlYWNoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgcmVtb3ZlKE9iamVjdCBvYmplY3QpIHsKICAgIGJvb2wgcmVzdWx0ID0gX3NldHNbMF0ucmVtb3ZlKG9iamVjdCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IF9zZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9zZXRzW2ldLnJlbW92ZShvYmplY3QpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9zZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9zZXRzW2ldLmNsZWFyKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IG9iamVjdHNUb1JlbW92ZSkgewogICAgZm9yICh2YXIgZWFjaCBpbiBvYmplY3RzVG9SZW1vdmUpIHsKICAgICAgcmVtb3ZlKGVhY2gpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgcmVtb3ZlQWxsKHRoaXMudG9MaXN0KCkud2hlcmUoKGUpID0+IHRlc3QoZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHJlbW92ZUFsbCh0b0xpc3QoKS53aGVyZSgoZSkgPT4gIXRlc3QoZSkpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgewogICAgZm9yIChPYmplY3Qgb2JqZWN0IGluIG90aGVyKSB7CiAgICAgIGlmICghdGhpcy5jb250YWlucyhvYmplY3QpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFNldCBfbmV3U2V0KCkgPT4gbmV3IEV4cGVuc2l2ZVNldChfc2V0cy5sZW5ndGgpOwoKICBAb3ZlcnJpZGUKICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gX25ld1NldCgpOwogICAgaWYgKG90aGVyLmxlbmd0aCA8IHRoaXMubGVuZ3RoKSB7CiAgICAgIGZvciAodmFyIGVsZW1lbnQgaW4gb3RoZXIpIHsKICAgICAgICBpZiAodGhpcy5jb250YWlucyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICAgIGlmIChvdGhlci5jb250YWlucyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiBfbmV3U2V0KCkuLmFkZEFsbCh0aGlzKS4uYWRkQWxsKG90aGVyKTsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gX25ld1NldCgpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlIG9iamVjdHNUb1JldGFpbikgewogICAgU2V0IHJldGFpblNldDsKICAgIGlmIChvYmplY3RzVG9SZXRhaW4gaXMgU2V0KSB7CiAgICAgIHJldGFpblNldCA9IG9iamVjdHNUb1JldGFpbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldGFpblNldCA9IG9iamVjdHNUb1JldGFpbi50b1NldCgpOwogICAgfQogICAgcmV0YWluV2hlcmUocmV0YWluU2V0LmNvbnRhaW5zKTsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiB0b1NldCgpIHsKICAgIHZhciByZXN1bHQgPSBuZXcgRXhwZW5zaXZlU2V0PEU+KF9zZXRzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9zZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5fc2V0c1tpXSA9IF9zZXRzW2ldLnRvU2V0KCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gImV4cGVuc2l2ZSgke19zZXRzWzBdfXgke19zZXRzLmxlbmd0aH0pIjsKfQqAmABOTjwBGgFDRT0rFAE/GC0fBgQBDCUMKAwuAQwxAQw9DDYBDCkeBAEMGCktHQYTBAEMJR4RBgQBDB8rLR8GEwQBDBEtGAYEAQw1KBQGBAEMKzQEAQwrMAQBDC0jMAYRBAEzAQwrHyYjOQgNIDoIBhMEAQwfMwQBDCkfHjkGEwQBDC0TIiMNKwYlBAEMEzQtKgYTBAEMQQIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvZXhwZW5zaXZlX3NldC5kYXJ0MHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2hlbHBlcnMvc3RhdHMuZGFydMAAXB0vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEV2ZW50U2luazsKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgppbXBvcnQgJy4uLy4uL2NvbXBpbGVyLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKCi8vIEhlbHBlciBtZXRob2RzIGZvciBzdGF0aXN0aWNzLgoKLy8vIEN1cnJlbnQgc3RhdHMgY29sbGVjdG9yLiBVc2UgW2VuYWJsZVN0YXRzT3V0cHV0XSB0byBlbmFibGUgcmVjb3JkaW5nIG9mCi8vLyBzdGF0cy4KU3RhdHMgZ2V0IHN0YXRzIHsKICBlbmFibGVEZWJ1Z01vZGUoKTsKICBpZiAoX3N0YXRzID09IG51bGwpIHsKICAgIF9zdGF0cyA9IGNvbnN0IFN0YXRzKCk7CiAgfQogIHJldHVybiBfc3RhdHM7Cn0KClN0YXRzIF9zdGF0czsKCi8vLyBFbmFibGUgcmVjb3JkaW5nIG9mIHN0YXRzLiBVc2UgW1N0YXRzLmR1bXBTdGF0c10gdG8gb3V0cHV0IHRoZSByZWNvcmQgc3RhdHMuCi8vLwovLy8gUGFzcyB0aGUgW291dHB1dFByb3ZpZGVyXSBvZiBbQ29tcGlsZXJdIHRvIGdlbmVyYXRlIHN0YXRzIGludG8gYSBzZXBhcmF0ZQovLy8gZmlsZSB1c2luZyBbbmFtZV0gYW5kIFtleHRlbnNpb25dIGZvciB0aGUgZmlsZW5hbWUuIElmIG9taXR0ZWQsIHN0YXRzIGFyZQovLy8gcHJpbnRlZCBvbiBzdGFuZGFyZCBvdXQuCi8vLwovLy8gSWYgW3htbF0gaXMgYHRydWVgLCBzdGF0cyBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIFhNTCB3aXRoIGEgZGVmYXVsdAovLy8gZXh0ZW5zaW9uIG9mICd4bWwnLCBvdGhlcndpc2UgdGhlIG91dHB1dCBpcyBpbmRlbnRlZCB0ZXh0IHdpdGggYSBkZWZhdWx0Ci8vLyBleHRlbnNpb24gb2YgJ2xvZycuCnZvaWQgZW5hYmxlU3RhdHNPdXRwdXQoCiAgICB7Q29tcGlsZXJPdXRwdXRQcm92aWRlciBvdXRwdXRQcm92aWRlciwKICAgIGJvb2wgeG1sOiB0cnVlLAogICAgU3RyaW5nIG5hbWU6ICdzdGF0cycsCiAgICBTdHJpbmcgZXh0ZW5zaW9uLAogICAgaW50IGV4YW1wbGVzOiAxMH0pIHsKICBpZiAoX3N0YXRzICE9IG51bGwpIHsKICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCdTdGF0cyBoYXZlIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4nKTsKICB9CiAgZW5hYmxlRGVidWdNb2RlKCk7CgogIFN0YXRzT3V0cHV0IG91dHB1dDsKICBpZiAob3V0cHV0UHJvdmlkZXIgIT0gbnVsbCkgewogICAgaWYgKGV4dGVuc2lvbiA9PSBudWxsKSB7CiAgICAgIGV4dGVuc2lvbiA9IHhtbCA/ICd4bWwnIDogJ2xvZyc7CiAgICB9CiAgICBvdXRwdXQgPSBuZXcgU2lua091dHB1dChvdXRwdXRQcm92aWRlcihuYW1lLCBleHRlbnNpb24pKTsKICB9IGVsc2UgewogICAgb3V0cHV0ID0gY29uc3QgRGVidWdPdXRwdXQoKTsKICB9CiAgU3RhdHNQcmludGVyIHByaW50ZXI7CiAgaWYgKHhtbCkgewogICAgcHJpbnRlciA9IG5ldyBYTUxQcmludGVyKG91dHB1dDogb3V0cHV0LCBleGFtcGxlczogZXhhbXBsZXMpOwogIH0gZWxzZSB7CiAgICBwcmludGVyID0gbmV3IENvbnNvbGVQcmludGVyKG91dHB1dDogb3V0cHV0LCBleGFtcGxlczogZXhhbXBsZXMpOwogIH0KICBfc3RhdHMgPSBuZXcgQWN0aXZlU3RhdHMocHJpbnRlcik7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGdhdGhlcmluZyBhbmQgZGlzcGxheSBvZiBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4KLy8vIFRoaXMgY2xhc3Mgc2VydmVzIGFzIHRoZSBub29wIGNvbGxlY3Rvci4KY2xhc3MgU3RhdHMgewogIGNvbnN0IFN0YXRzKCk7CgogIC8vLyBSZWdpc3RlcnMgW2tleV0sIFt2YWx1ZV0gcGFpciBpbiB0aGUgbWFwIFtpZF0uIElmIFtmcm9tRXhpc3RpbmddIGlzCiAgLy8vIG5vbi1udWxsIGFuZCBba2V5XSBhbHJlYWR5IGV4aXN0cywgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBba2V5XSB3aWxsCiAgLy8vIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YgW2Zyb21FeGlzdGluZ10gd2hlbiBjYWxsZWQgd2l0aCB0aGUgZXhpc3RpbmcgdmFsdWUuCiAgLy8vCiAgLy8vIFRoZSByZWNvcmRlZCBpbmZvcm1hdGlvbiBpcyBub3QgZHVtcGVkIGF1dG9tYXRpY2FsbHkuCiAgdm9pZCByZWNvcmRNYXAoaWQsIGtleSwgdmFsdWUsIHtmcm9tRXhpc3RpbmcodmFsdWUpfSkge30KCiAgLy8vIFJldHVybnMgdGhlIG1hcCBbaWRdIHJlY29yZGVkIHdpdGggW3JlY29yZE1hcF0uCiAgTWFwIGdldE1hcChpZCkgPT4gY29uc3Qge307CgogIC8vLyBSZWdpc3RlcnMgW2VsZW1lbnRdIGFzIGFuIGVsZW1lbnQgb2YgdGhlIGxpc3QgW2lkXS4gSWYgcHJvdmlkZWQsIFtkYXRhXQogIC8vLyBwcm92aWRlcyBhZGRpdGlvbmFsIGRhdGEgZm9yIFtlbGVtZW50XS4KICAvLy8KICAvLy8gVGhlIHJlY29yZGVkIGluZm9ybWF0aW9uIGlzIGR1bXBlZCBhdXRvbWF0aWNhbGx5IG9uIGNhbGwgdG8gW2R1bXBTdGF0c10uCiAgLy8vCiAgLy8vIEV4YW1wbGU6CiAgLy8vICAgQ2FsbGluZyBbcmVjb3JkRWxlbWVudF0gbGlrZSB0aGlzOgogIC8vLyAgICAgcmVjb3JkRWxlbWVudCgnZm9vJywgJ2EnLCBkYXRhOiAnZmlyc3QtYS1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRFbGVtZW50KCdmb28nLCAnYScsIGRhdGE6ICdzZWNvbmQtYS1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRFbGVtZW50KCdmb28nLCAnYicpOwogIC8vLyAgICAgcmVjb3JkRWxlbWVudCgnYmFyJywgJ2EnLCBkYXRhOiAndGhpcmQtYS1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRFbGVtZW50KCdiYXInLCAnYycpOwogIC8vLyAgIHdpbGwgcmVzdWx0IGluIGEgZHVtcCBsaWtlIHRoaXM6CiAgLy8vICAgICBmb286IDIKICAvLy8gICAgICB2YWx1ZT1hIGRhdGE9c2Vjb25kLWEtZGF0YQogIC8vLyAgICAgIGIKICAvLy8gICAgIGJhcjogMgogIC8vLyAgICAgIHZhbHVlPWEgZGF0YT10aGlyZC1hLWRhdGEKICAvLy8gICAgICBjCiAgLy8vCiAgdm9pZCByZWNvcmRFbGVtZW50KGlkLCBlbGVtZW50LCB7ZGF0YX0pIHt9CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IFtpZF0gcmVjb3JkZWQgd2l0aCBbcmVjb3JkRWxlbWVudF0uCiAgSXRlcmFibGUgZ2V0TGlzdChTdHJpbmcgaWQpID0+IGNvbnN0IFtdOwoKICAvLy8gUmVnaXN0ZXJzIFt2YWx1ZV0gYXMgYW4gb2NjdXJyZW5jZSBvZiBbaWRdLiBJZiBwYXNzZWQsIFtleGFtcGxlXSBwcm92aWRlcwogIC8vLyBhbiBleGFtcGxlIGRhdGEgb2YgdGhlIG9jY3VycmVuY2Ugb2YgW3ZhbHVlXS4KICAvLy8KICAvLy8gVGhlIHJlY29yZGVkIGluZm9ybWF0aW9uIGlzIGR1bXBlZCBhdXRvbWF0aWNhbGx5IG9uIGNhbGwgdG8gW2R1bXBTdGF0c10uCiAgLy8vCiAgLy8vIEV4YW1wbGU6CiAgLy8vICAgQ2FsbGluZyBbcmVjb3JkRnJlcXVlbmN5XSBsaWtlIHRoaXM6CiAgLy8vICAgICByZWNvcmRGcmVxdWVuY3koJ2ZvbycsICdhJywgJ2ZpcnN0LWEtZGF0YScpOwogIC8vLyAgICAgcmVjb3JkRnJlcXVlbmN5KCdmb28nLCAnYScsICdzZWNvbmQtYS1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRGcmVxdWVuY3koJ2JhcicsICdiJywgJ2ZpcnN0LWItZGF0YScpOwogIC8vLyAgICAgcmVjb3JkRnJlcXVlbmN5KCdmb28nLCAnYycpOwogIC8vLyAgICAgcmVjb3JkRnJlcXVlbmN5KCdiYXInLCAnYicpOwogIC8vLyAgIHdpbGwgcmVzdWx0IGluIGEgZHVtcCBsaWtlIHRoaXM6CiAgLy8vICAgICBmb286CiAgLy8vICAgICAgYTogMgogIC8vLyAgICAgICBmaXJzdC1hLWRhdGEKICAvLy8gICAgICAgc2Vjb25kLWEtZGF0YQogIC8vLyAgICAgIGM6IDEKICAvLy8gICAgIGJhcjoKICAvLy8gICAgICBiOiAyCiAgLy8vICAgICAgIGZpcnN0LWItZGF0YQogIC8vLwogIHZvaWQgcmVjb3JkRnJlcXVlbmN5KGlkLCB2YWx1ZSwgW2V4YW1wbGVdKSB7fQoKICAvLy8gRm9yIGVhY2gga2V5L3ZhbHVlIHBhaXIgaW4gW21hcF0gdGhlIGVsZW1lbnRzIGluIHRoZSB2YWx1ZSBhcmUgcmVnaXN0ZXJlZAogIC8vLyBhcyBleGFtcGxlcyBvZiBvY2N1cnJlbmNlcyBvZiB0aGUga2V5IGluIFtpZF0uCiAgdm9pZCByZWNvcmRGcmVxdWVuY2llcyhpZCwgTWFwPGR5bmFtaWMsIEl0ZXJhYmxlPiBtYXApIHt9CgogIC8vLyBSZXR1cm5zIHRoZSBleGFtcGxlcyBnaXZlbiBmb3IgdGhlIG9jY3VycmVuY2Ugb2YgW3ZhbHVlXSBmb3IgW2lkXS4KICBJdGVyYWJsZSByZWNvcmRlZEZyZXF1ZW5jaWVzKGlkLCB2YWx1ZSkgPT4gY29uc3QgW107CgogIC8vLyBJbmNyZWFzZXMgdGhlIGNvdW50ZXIgW2lkXSBieSAxLiBJZiBwcm92aWRlZCwgW2V4YW1wbGVdIGlzIHVzZWQgYXMgYW4KICAvLy8gZXhhbXBsZSBvZiB0aGUgY291bnQgYW5kIFtkYXRhXSBwcm92aWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvcgogIC8vLyBbZXhhbXBsZV0uCiAgLy8vCiAgLy8vIFRoZSByZWNvcmRlZCBpbmZvcm1hdGlvbiBpcyBkdW1wZWQgYXV0b21hdGljYWxseSBvbiBjYWxsIHRvIFtkdW1wU3RhdHNdLgogIC8vLwogIC8vLyBFeGFtcGxlOgogIC8vLyAgIENhbGxpbmcgW3JlY29yZENvdW50ZXJdIGxpa2UgdGhpczoKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2ZvbycsICdhJyk7CiAgLy8vICAgICByZWNvcmRDb3VudGVyKCdmb28nLCAnYScpOwogIC8vLyAgICAgcmVjb3JkQ291bnRlcignZm9vJywgJ2InKTsKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2JhcicsICdjJywgJ2ZpcnN0LWMtZGF0YScpOwogIC8vLyAgICAgcmVjb3JkQ291bnRlcignYmFyJywgJ2MnLCAnc2Vjb25kLWMtZGF0YScpOwogIC8vLyAgICAgcmVjb3JkQ291bnRlcignYmFyJywgJ2QnKTsKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2JhcicsICdkJyk7CiAgLy8vICAgICByZWNvcmRDb3VudGVyKCdiYXonKTsKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2JheicpOwogIC8vLyAgIHdpbGwgcmVzdWx0IGluIGEgZHVtcCBsaWtlIHRoaXM6CiAgLy8vICAgICBmb286IDMKICAvLy8gICAgICBjb3VudD0yIGV4YW1wbGU9YQogIC8vLyAgICAgIGNvdW50PTEgZXhhbXBsZT1iCiAgLy8vICAgICBiYXI6IDQKICAvLy8gICAgICBjb3VudD0yIGV4YW1wbGVzPTIKICAvLy8gICAgICAgYzoKICAvLy8gICAgICAgIGZpcnN0LWMtZGF0YQogIC8vLyAgICAgICAgc2Vjb25kLWMtZGF0YQogIC8vLyAgICAgICBkCiAgLy8vICAgICBiYXo6IDIKICAvLy8KICB2b2lkIHJlY29yZENvdW50ZXIoaWQsIFtleGFtcGxlLCBkYXRhXSkge30KCiAgLy8vIFJlY29yZHMgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UgdW5kZXIgdGhlIGtleSBbaWRdLiBPbmx5IGV2ZXJ5CiAgLy8vIFtzYW1wbGVGcmVxdWVuY3ldIGNhbGwgd2l0aCB0aGUgc2FtZSBpZCBpcyByZWNvcmRlZCwgYW5kIGlmIG9taXR0ZWQKICAvLy8gW3N0YWNrVHJhY2VTYW1wbGVGcmVxdWVuY3ldIGlzIHVzZWQuCiAgdm9pZCByZWNvcmRUcmFjZShpZCwge2ludCBzYW1wbGVGcmVxdWVuY3l9KSB7fQoKICAvLy8gVGhlIGRlZmF1bHQgc2FtcGxlIGZyZXF1ZW5jeSB1c2VkIGZvciByZWNvcmRpbmcgc3RhY2sgdHJhY2VzLgogIGludCBnZXQgc3RhY2tUcmFjZVNhbXBsZUZyZXF1ZW5jeSA9PiAwOwoKICAvLy8gU2V0IHRoZSBkZWZhdWx0IHNhbXBsZSBmcmVxdWVuY3kgdXNlZCBmb3IgcmVjb3JkaW5nIHN0YWNrIHRyYWNlcy4KICB2b2lkIHNldCBzdGFja1RyYWNlU2FtcGxlRnJlcXVlbmN5KGludCB2YWx1ZSkge30KCiAgLy8vIER1bXBzIHRoZSBzdGF0cyBmb3IgdGhlIHJlY29yZGVkIGZyZXF1ZW5jaWVzLCBzZXRzLCBhbmQgY291bnRlcnMuIElmCiAgLy8vIHByb3ZpZGVkIFtiZWZvcmVDbG9zZV0gaXMgY2FsbGVkIGJlZm9yZSBjbG9zaW5nIHRoZSBkdW1wIG91dHB1dC4gVGhpcwogIC8vLyBjYW4gYmUgdXNlZCB0byBpbmNsdWRlIGNvcnJlbGF0aW9ucyBvbiB0aGUgY29sbGVjdGVkIGRhdGEgdGhyb3VnaAogIC8vLyBbZHVtcENvcnJlbGF0aW9uXS4KICB2b2lkIGR1bXBTdGF0cyh7dm9pZCBiZWZvcmVDbG9zZSgpfSkge30KCiAgLy8vIFByaW50cyB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgZWxlbWVudHMgb2YgW2FdIGFuZCBbYl0uCiAgLy8vCiAgLy8vIFRocmVlIHNldHMgYXJlIG91dHB1dCB1c2luZyBbaWRBXSBhbmQgW2lkQl0gYXMgbGFiZWxzIGZvciB0aGUgZWxlbWVudHMKICAvLy8gW2FdIGFuZCBbYl06CiAgLy8vCiAgLy8vICAgJ2lkQSAmJiBpZEInIGxpc3RzIHRoZSBlbGVtZW50cyBib3RoIGluIFthXSBhbmQgW2JdLAogIC8vLyAgICchaWRBICYmIGlkQicgbGlzdHMgdGhlIGVsZW1lbnRzIG5vdCBpbiBbYV0gYnV0IGluIFtiXSwgYW5kCiAgLy8vICAgJ2lkQSAmJiAhaWRCJyBsaXN0cyB0aGUgZWxlbWVudHMgaW4gW2FdIGJ1dCBub3QgaW4gW2JdLgogIC8vLwogIC8vLyBJZiBbZGF0YUFdIGFuZC9vciBbZGF0YUJdIGFyZSBwcm92aWRlZCwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUKICAvLy8gZWxlbWVudHMgYXJlIGxvb2tlZCB1cCBpbiBbZGF0YUFdIG9yIFtkYXRhQl0gdXNpbmcgW2RhdGFBXSBhcyB0aGUgcHJpbWFyeQogIC8vLyBzb3VyY2UuCiAgdm9pZCBkdW1wQ29ycmVsYXRpb24oaWRBLCBJdGVyYWJsZSBhLCBpZEIsIEl0ZXJhYmxlIGIsCiAgICAgIHtNYXAgZGF0YUEsIE1hcCBkYXRhQn0pIHt9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHByaW50aW5nIG91dHB1dCBkYXRhLgovLy8KLy8vIFRoaXMgY2xhc3Mgc2VydmVzIGFzIHRoZSBkaXNhYmxlZCBvdXRwdXQuCmNsYXNzIFN0YXRzT3V0cHV0IHsKICBjb25zdCBTdGF0c091dHB1dCgpOwoKICAvLy8gUHJpbnQgW3RleHRdIGFzIG9uIGEgc2VwYXJhdGUgbGluZS4KICB2b2lkIHByaW50bG4oU3RyaW5nIHRleHQpIHt9Cn0KCi8vLyBPdXRwdXQgdG8gdGhlIFtkZWJ1Z1ByaW50XSBtZXRob2QuCmNsYXNzIERlYnVnT3V0cHV0IGltcGxlbWVudHMgU3RhdHNPdXRwdXQgewogIGNvbnN0IERlYnVnT3V0cHV0KCk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRsbihTdHJpbmcgdGV4dCkgPT4gZGVidWdQcmludCh0ZXh0KTsKfQoKLy8vIE91dHB1dCB0byBhbiBbRXZlbnRTaW5rXS4gVXNlZCB0byBvdXRwdXQgdG8gYSBmaWxlIHRocm91Z2ggdGhlCi8vLyBbQ29tcGlsZXJPdXRwdXRQcm92aWRlcl0uCmNsYXNzIFNpbmtPdXRwdXQgaW1wbGVtZW50cyBTdGF0c091dHB1dCB7CiAgRXZlbnRTaW5rPFN0cmluZz4gc2luazsKCiAgU2lua091dHB1dCh0aGlzLnNpbmspOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50bG4oU3RyaW5nIHRleHQpIHsKICAgIHNpbmsuYWRkKHRleHQpOwogICAgc2luay5hZGQoJ1xuJyk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciBwcmludGluZyBzdGF0cyBjb2xsZWN0ZWQgaW4gW1N0YXRzXS4KYWJzdHJhY3QgY2xhc3MgU3RhdHNQcmludGVyIHsKICAvLy8gVGhlIG51bWJlciBvZiBleGFtcGxlcyBwcmludGVyLiBJZiBgbnVsbGAgYWxsIGV4YW1wbGVzIGFyZSBwcmludGVkLgogIGludCBnZXQgZXhhbXBsZXMgPT4gMDsKCiAgLy8vIFN0YXJ0IGEgZ3JvdXAgW2lkXS4KICB2b2lkIHN0YXJ0KFN0cmluZyBpZCkge30KCiAgLy8vIENyZWF0ZSBhIGdyb3VwIFtpZF0gd2l0aCBjb250ZW50IGNyZWF0ZWQgYnkgW2NyZWF0ZUdyb3VwQ29udGVudF0uCiAgdm9pZCBncm91cChTdHJpbmcgaWQsIHZvaWQgY3JlYXRlR3JvdXBDb250ZW50KCkpIHsKICAgIHN0YXJ0KGlkKTsKICAgIGNyZWF0ZUdyb3VwQ29udGVudCgpOwogICAgZW5kKGlkKTsKICB9CgogIC8vLyBFbmQgYSBncm91cCBbaWRdLgogIHZvaWQgZW5kKFN0cmluZyBpZCkge30KCiAgLy8vIFN0YXJ0IGEgc3RhdCBlbnRyeSBmb3IgW2lkXSB3aXRoIGFkZGl0aW9uYWwgW2RhdGFdLgogIHZvaWQgb3BlbihTdHJpbmcgaWQsCiAgICAgIFtNYXA8U3RyaW5nLCBkeW5hbWljPiBkYXRhID0gY29uc3QgPFN0cmluZywgZHluYW1pYz57fV0pIHt9CgogIC8vLyBDcmVhdGUgYSBzdGF0IGVudHJ5IGZvciBbaWRdIHdpdGggYWRkaXRpb25hbCBbZGF0YV0gYW5kIGNvbnRlbnQgY3JlYXRlZCBieQogIC8vLyBbY3JlYXRlQ2hpbGRDb250ZW50XS4KICB2b2lkIGNoaWxkKFN0cmluZyBpZCwKICAgICAgW01hcDxTdHJpbmcsIGR5bmFtaWM+IGRhdGEgPSBjb25zdCA8U3RyaW5nLCBkeW5hbWljPnt9LAogICAgICB2b2lkIGNyZWF0ZUNoaWxkQ29udGVudCgpXSkgewogICAgb3BlbihpZCwgZGF0YSk7CiAgICBpZiAoY3JlYXRlQ2hpbGRDb250ZW50ICE9IG51bGwpIGNyZWF0ZUNoaWxkQ29udGVudCgpOwogICAgY2xvc2UoaWQpOwogIH0KCiAgLy8vIEVuZCBhIHN0YXQgZW50cnkgZm9yIFtpZF0uCiAgdm9pZCBjbG9zZShTdHJpbmcgaWQpIHt9CgogIC8vLyBTdGFydHMgYSBncm91cCBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgogIHZvaWQgYmVnaW5FeHRyYSgpIHt9CgogIC8vLyBTdGFydHMgYSBncm91cCBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgogIHZvaWQgZW5kRXh0cmEoKSB7fQp9CgovLy8gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgW0NvbnNvbGVQcmludGVyXSBhbmQgW1hNTFByaW50ZXJdLgphYnN0cmFjdCBjbGFzcyBCYXNlUHJpbnRlciBleHRlbmRzIFN0YXRzUHJpbnRlciB3aXRoIEluZGVudGF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgZXhhbXBsZXM7CiAgZmluYWwgU3RhdHNPdXRwdXQgb3V0cHV0OwoKICBCYXNlUHJpbnRlcih7dGhpcy5vdXRwdXQ6IGNvbnN0IERlYnVnT3V0cHV0KCksIHRoaXMuZXhhbXBsZXM6IDEwfSkgewogICAgaW5kZW50YXRpb25Vbml0ID0gIiAiOwogIH0KfQoKLy8vIFtTdGF0c1ByaW50ZXJdIHRoYXQgZGlzcGxheXMgc3RhdHMgaW4gY29uc29sZSBsaW5lcy4KY2xhc3MgQ29uc29sZVByaW50ZXIgZXh0ZW5kcyBCYXNlUHJpbnRlciB7CiAgaW50IGV4dHJhTGV2ZWwgPSAwOwoKICBDb25zb2xlUHJpbnRlcih7U3RhdHNPdXRwdXQgb3V0cHV0OiBjb25zdCBEZWJ1Z091dHB1dCgpLCBpbnQgZXhhbXBsZXM6IDEwfSkKICAgICAgOiBzdXBlcihvdXRwdXQ6IG91dHB1dCwgZXhhbXBsZXM6IGV4YW1wbGVzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBvcGVuKFN0cmluZyBpZCwKICAgICAgW01hcDxTdHJpbmcsIGR5bmFtaWM+IGRhdGEgPSBjb25zdCA8U3RyaW5nLCBkeW5hbWljPnt9XSkgewogICAgaWYgKGV4dHJhTGV2ZWwgPiAwKSByZXR1cm47CgogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoaW5kZW50YXRpb24pOwogICAgU3RyaW5nIHNwYWNlID0gJyc7CiAgICBpZiAoZGF0YVsndGl0bGUnXSAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcke2RhdGFbJ3RpdGxlJ119OicpOwogICAgICBzcGFjZSA9ICcgJzsKICAgICAgZGF0YS5yZW1vdmUoJ3RpdGxlJyk7CiAgICB9IGVsc2UgaWYgKGRhdGFbJ25hbWUnXSAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcke2RhdGFbJ25hbWUnXX0nKTsKICAgICAgc3BhY2UgPSAnICc7CiAgICAgIGRhdGEucmVtb3ZlKCduYW1lJyk7CiAgICB9CiAgICBJdGVyYWJsZSBub25OdWxsVmFsdWVzID0gZGF0YS52YWx1ZXMud2hlcmUoKHYpID0+IHYgIT0gbnVsbCk7CiAgICBpZiAobm9uTnVsbFZhbHVlcy5sZW5ndGggPT0gMSkgewogICAgICBzYi53cml0ZSgnJHNwYWNlJHtub25OdWxsVmFsdWVzLmZpcnN0fScpOwogICAgfSBlbHNlIHsKICAgICAgZGF0YS5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgICAgc2Iud3JpdGUoJyRzcGFjZSRrZXk9JHZhbHVlJyk7CiAgICAgICAgc3BhY2UgPSAnICc7CiAgICAgIH0pOwogICAgfQogICAgb3V0cHV0LnByaW50bG4oc2IudG9TdHJpbmcoKSk7CiAgICBpbmRlbnRNb3JlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKFN0cmluZyBpZCkgewogICAgaWYgKGV4dHJhTGV2ZWwgPiAwKSByZXR1cm47CgogICAgaW5kZW50TGVzcygpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkV4dHJhKCkgewogICAgaWYgKGV4dHJhTGV2ZWwgPT0gMCkgb3V0cHV0LnByaW50bG4oJyRpbmRlbnRhdGlvbi4uLicpOwogICAgZXh0cmFMZXZlbCsrOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFeHRyYSgpIHsKICAgIGV4dHJhTGV2ZWwtLTsKICB9Cn0KCi8vLyBbU3RhdHNQcmludGVyXSB0aGF0IGRpc3BsYXlzIHN0YXRzIGluIFhNTCBmb3JtYXQuCmNsYXNzIFhNTFByaW50ZXIgZXh0ZW5kcyBCYXNlUHJpbnRlciB7CiAgc3RhdGljIGNvbnN0IEh0bWxFc2NhcGUgZXNjYXBlID0gY29uc3QgSHRtbEVzY2FwZSgpOwogIGJvb2wgb3BlbmVkID0gZmFsc2U7CgogIFhNTFByaW50ZXIoe291dHB1dDogY29uc3QgRGVidWdPdXRwdXQoKSwgaW50IGV4YW1wbGVzOiAxMH0pCiAgICAgIDogc3VwZXIob3V0cHV0OiBvdXRwdXQsIGV4YW1wbGVzOiBleGFtcGxlcyk7CgogIEBvdmVycmlkZQogIHZvaWQgc3RhcnQoU3RyaW5nIGlkKSB7CiAgICBpZiAoIW9wZW5lZCkgewogICAgICBvdXRwdXQucHJpbnRsbignPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4nKTsKICAgICAgb3BlbmVkID0gdHJ1ZTsKICAgIH0KICAgIG9wZW4oaWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmQoU3RyaW5nIGlkKSB7CiAgICBjbG9zZShpZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZW4oU3RyaW5nIGlkLAogICAgICBbTWFwPFN0cmluZywgZHluYW1pYz4gZGF0YSA9IGNvbnN0IDxTdHJpbmcsIGR5bmFtaWM+e31dKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZShpbmRlbnRhdGlvbik7CiAgICBzYi53cml0ZSgnPCRpZCcpOwogICAgZGF0YS5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgc2Iud3JpdGUoJyAka2V5PSIke2VzY2FwZS5jb252ZXJ0KCckdmFsdWUnKX0iJyk7CiAgICAgIH0KICAgIH0pOwogICAgc2Iud3JpdGUoJz4nKTsKICAgIG91dHB1dC5wcmludGxuKHNiLnRvU3RyaW5nKCkpOwogICAgaW5kZW50TW9yZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZShTdHJpbmcgaWQpIHsKICAgIGluZGVudExlc3MoKTsKICAgIG91dHB1dC5wcmludGxuKCcke2luZGVudGF0aW9ufTwvJGlkPicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkV4dHJhKCkgewogICAgb3BlbignZXh0cmEnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRXh0cmEoKSB7CiAgICBjbG9zZSgnZXh0cmEnKTsKICB9Cn0KCi8vLyBBIG5vZGUgaW4gYSBzdGFjayB0cmFjZSB0cmVlIHVzZWQgdG8gc3RvcmUgYW5kIG9yZ2FuaXplIHN0YWNrIHRyYWNlcyBieQovLy8gY29tbW9uIHByZWZpeGVzLgpjbGFzcyBfU3RhY2tUcmFjZU5vZGUgaW1wbGVtZW50cyBDb21wYXJhYmxlPF9TdGFja1RyYWNlTm9kZT4gewogIGludCBjb3VudDsKICBMaXN0PFN0YWNrVHJhY2VMaW5lPiBjb21tb25QcmVmaXg7CiAgTGlzdDxfU3RhY2tUcmFjZU5vZGU+IHN1YnRyYWNlczsKCiAgX1N0YWNrVHJhY2VOb2RlKHRoaXMuY29tbW9uUHJlZml4LCB0aGlzLmNvdW50LCB0aGlzLnN1YnRyYWNlcyk7CgogIF9TdGFja1RyYWNlTm9kZS5yb290KCkgOiB0aGlzKFtdLCAwLCBbXSk7CgogIF9TdGFja1RyYWNlTm9kZS5sZWFmKFN0YWNrVHJhY2VMaW5lcyBzdGFja1RyYWNlKQogICAgICA6IHRoaXMoc3RhY2tUcmFjZS5saW5lcywgMSwgY29uc3QgW10pOwoKICBfU3RhY2tUcmFjZU5vZGUubm9kZShMaXN0PFN0YWNrVHJhY2VMaW5lPiBjb21tb25QcmVmaXgsIF9TdGFja1RyYWNlTm9kZSBmaXJzdCwKICAgICAgX1N0YWNrVHJhY2VOb2RlIHNlY29uZCkKICAgICAgOiB0aGlzKGNvbW1vblByZWZpeCwgZmlyc3QuY291bnQgKyBzZWNvbmQuY291bnQsIFtmaXJzdCwgc2Vjb25kXSk7CgogIHZvaWQgYWRkKFN0YWNrVHJhY2VMaW5lcyBzdGFja1RyYWNlKSB7CiAgICBjb3VudCsrOwogICAgaWYgKCFzdGFja1RyYWNlLmxpbmVzLmlzRW1wdHkpIHsKICAgICAgYWRkU3VidHJhY2Uoc3RhY2tUcmFjZSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFN1YnRyYWNlKFN0YWNrVHJhY2VMaW5lcyBzdGFja1RyYWNlKSB7CiAgICBMaXN0PFN0YWNrVHJhY2VMaW5lPiBsaW5lcyA9IHN0YWNrVHJhY2UubGluZXM7CiAgICBmb3IgKF9TdGFja1RyYWNlTm9kZSBzdWJ0cmFjZSBpbiBzdWJ0cmFjZXMpIHsKICAgICAgaW50IGNvbW1vblByZWZpeExlbmd0aCA9CiAgICAgICAgICBsb25nZXN0Q29tbW9uUHJlZml4TGVuZ3RoKHN1YnRyYWNlLmNvbW1vblByZWZpeCwgbGluZXMpOwogICAgICBpZiAoY29tbW9uUHJlZml4TGVuZ3RoID4gMCkgewogICAgICAgIHN0YWNrVHJhY2UgPSBzdGFja1RyYWNlLnN1YnRyYWNlKGNvbW1vblByZWZpeExlbmd0aCk7CiAgICAgICAgaWYgKGNvbW1vblByZWZpeExlbmd0aCA9PSBzdWJ0cmFjZS5jb21tb25QcmVmaXgubGVuZ3RoKSB7CiAgICAgICAgICBzdWJ0cmFjZS5hZGQoc3RhY2tUcmFjZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1YnRyYWNlLmNvbW1vblByZWZpeCA9CiAgICAgICAgICAgICAgc3VidHJhY2UuY29tbW9uUHJlZml4LnN1Ymxpc3QoY29tbW9uUHJlZml4TGVuZ3RoKTsKICAgICAgICAgIHN1YnRyYWNlcy5yZW1vdmUoc3VidHJhY2UpOwogICAgICAgICAgc3VidHJhY2VzLmFkZChuZXcgX1N0YWNrVHJhY2VOb2RlLm5vZGUoCiAgICAgICAgICAgICAgbGluZXMuc3VibGlzdCgwLCBjb21tb25QcmVmaXhMZW5ndGgpLAogICAgICAgICAgICAgIHN1YnRyYWNlLAogICAgICAgICAgICAgIG5ldyBfU3RhY2tUcmFjZU5vZGUubGVhZihzdGFja1RyYWNlKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIHN1YnRyYWNlcy5hZGQobmV3IF9TdGFja1RyYWNlTm9kZS5sZWFmKHN0YWNrVHJhY2UpKTsKICB9CgogIHZvaWQgZHVtcFRyYWNlcyhTdGF0c1ByaW50ZXIgcHJpbnRlcikgewogICAgcHJpbnRlci5vcGVuKCd0cmFjZScsIHsnY291bnQnOiBjb3VudCwgJ2xpbmUnOiBjb21tb25QcmVmaXguZmlyc3R9KTsKICAgIGlmIChjb21tb25QcmVmaXgubGVuZ3RoID4gMSkgewogICAgICBmb3IgKFN0YWNrVHJhY2VMaW5lIGxpbmUgaW4gY29tbW9uUHJlZml4LnNraXAoMSkpIHsKICAgICAgICBwcmludGVyLmNoaWxkKCd0cmFjZScsIHsnbGluZSc6IGxpbmV9KTsKICAgICAgfQogICAgfQogICAgZHVtcFN1YnRyYWNlcyhwcmludGVyKTsKICAgIHByaW50ZXIuY2xvc2UoJ3RyYWNlJyk7CiAgfQoKICB2b2lkIGR1bXBTdWJ0cmFjZXMoU3RhdHNQcmludGVyIHByaW50ZXIpIHsKICAgIGlmICghc3VidHJhY2VzLmlzRW1wdHkpIHsKICAgICAgc3VidHJhY2VzLnNvcnQoKTsKICAgICAgZm9yIChfU3RhY2tUcmFjZU5vZGUgc3RlcCBpbiBzdWJ0cmFjZXMpIHsKICAgICAgICBzdGVwLmR1bXBUcmFjZXMocHJpbnRlcik7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlVG8oX1N0YWNrVHJhY2VOb2RlIG90aGVyKSB7CiAgICAvLyBTb3J0cyBpbiBkZWNyZWFzaW5nIGNvdW50IG9yZGVyLgogICAgcmV0dXJuIG90aGVyLmNvdW50IC0gY291bnQ7CiAgfQoKICB2b2lkIHByaW50T24oU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmcgaW5kZW50YXRpb24pIHsKICAgIFN0cmluZyBjb3VudFRleHQgPSAnJGluZGVudGF0aW9uJGNvdW50ICAnOwogICAgc2Iud3JpdGUoY291bnRUZXh0KTsKICAgIHNiLndyaXRlKCdcbicpOwogICAgaW5kZW50YXRpb24gPSAnJy5wYWRMZWZ0KGNvdW50VGV4dC5sZW5ndGgsICcgJyk7CiAgICBpZiAoY29tbW9uUHJlZml4ICE9IG51bGwpIHsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgZm9yIChTdGFja1RyYWNlTGluZSBsaW5lIGluIGNvbW1vblByZWZpeCkgewogICAgICAgIHNiLndyaXRlKGluZGVudGF0aW9uKTsKICAgICAgICBpZiAoaW5kZXggPiAxKSB7CiAgICAgICAgICBzYi53cml0ZSgnLi4uXG4nKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZShsaW5lKTsKICAgICAgICBzYi53cml0ZSgnXG4nKTsKICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICB9CiAgICBzdWJ0cmFjZXMuc29ydCgpOwogICAgZm9yIChfU3RhY2tUcmFjZU5vZGUgc3VidHJhY2UgaW4gc3VidHJhY2VzKSB7CiAgICAgIHN1YnRyYWNlLnByaW50T24oc2IsIGluZGVudGF0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHByaW50T24oc2IsICcnKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgX1N0YWNrVHJhY2VUcmVlIGV4dGVuZHMgX1N0YWNrVHJhY2VOb2RlIHsKICBmaW5hbCBpZDsKICBpbnQgdG90YWxDb3VudCA9IDA7CiAgZmluYWwgaW50IHNhbXBsZUZyZXF1ZW5jeTsKCiAgX1N0YWNrVHJhY2VUcmVlKHRoaXMuaWQsIHRoaXMuc2FtcGxlRnJlcXVlbmN5KSA6IHN1cGVyLnJvb3QoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBkdW1wVHJhY2VzKFN0YXRzUHJpbnRlciBwcmludGVyKSB7CiAgICBwcmludGVyLm9wZW4oJ3RyYWNlJywgewogICAgICAnaWQnOiBpZCwKICAgICAgJ3RvdGFsQ291bnQnOiB0b3RhbENvdW50LAogICAgICAnc2FtcGxlRnJlcXVlbmN5Jzogc2FtcGxlRnJlcXVlbmN5CiAgICB9KTsKICAgIGR1bXBTdWJ0cmFjZXMocHJpbnRlcik7CiAgICBwcmludGVyLmNsb3NlKCd0cmFjZScpOwogIH0KCiAgdm9pZCBzYW1wbGUoKSB7CiAgICBpZiAodG90YWxDb3VudCsrICUgc2FtcGxlRnJlcXVlbmN5ID09IDApIHsKICAgICAgYWRkKHN0YWNrVHJhY2Uob2Zmc2V0OiAzKSk7CiAgICB9CiAgfQp9CgovLy8gQWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIFtTdGF0c10uCmNsYXNzIEFjdGl2ZVN0YXRzIGltcGxlbWVudHMgU3RhdHMgewogIGZpbmFsIFN0YXRzUHJpbnRlciBwcmludGVyOwogIE1hcDxkeW5hbWljLCBNYXA+IG1hcHMgPSB7fTsKICBNYXA8ZHluYW1pYywgTWFwPGR5bmFtaWMsIExpc3Q+PiBmcmVxdWVuY3lNYXBzID0ge307CiAgTWFwPGR5bmFtaWMsIE1hcD4gc2V0c01hcCA9IHt9OwogIE1hcDxkeW5hbWljLCBNYXA8ZHluYW1pYywgTGlzdD4+IGNvdW50ZXJzTWFwID0KICAgICAgPGR5bmFtaWMsIE1hcDxkeW5hbWljLCBMaXN0Pj57fTsKICBNYXA8ZHluYW1pYywgX1N0YWNrVHJhY2VUcmVlPiB0cmFjZU1hcCA9IHt9OwogIEBvdmVycmlkZQogIGludCBzdGFja1RyYWNlU2FtcGxlRnJlcXVlbmN5ID0gMTsKCiAgQWN0aXZlU3RhdHMoU3RhdHNQcmludGVyIHRoaXMucHJpbnRlcik7CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkTWFwKGlkLCBrZXksIHZhbHVlLCB7ZnJvbUV4aXN0aW5nKHZhbHVlKX0pIHsKICAgIE1hcCBtYXAgPSBtYXBzLnB1dElmQWJzZW50KGlkLCAoKSA9PiB7fSk7CiAgICBpZiAoZnJvbUV4aXN0aW5nICE9IG51bGwgJiYgbWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgbWFwW2tleV0gPSBmcm9tRXhpc3RpbmcobWFwW2tleV0pOwogICAgfSBlbHNlIHsKICAgICAgbWFwW2tleV0gPSB2YWx1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIE1hcCBnZXRNYXAoa2V5KSB7CiAgICByZXR1cm4gbWFwc1trZXldOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRGcmVxdWVuY3koaWQsIHZhbHVlLCBbZXhhbXBsZV0pIHsKICAgIE1hcDxkeW5hbWljLCBMaXN0PiBtYXAgPSBmcmVxdWVuY3lNYXBzLnB1dElmQWJzZW50KGlkLCAoKSA9PiB7fSk7CiAgICBtYXAucHV0SWZBYnNlbnQodmFsdWUsICgpID0+IFtdKTsKICAgIG1hcFt2YWx1ZV0uYWRkKGV4YW1wbGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRGcmVxdWVuY2llcyhpZCwgTWFwPGR5bmFtaWMsIEl0ZXJhYmxlPiBmcmVxdWVuY3lNYXApIHsKICAgIE1hcDxkeW5hbWljLCBMaXN0PiBtYXAgPSBmcmVxdWVuY3lNYXBzLnB1dElmQWJzZW50KGlkLCAoKSA9PiB7fSk7CiAgICBmcmVxdWVuY3lNYXAuZm9yRWFjaCgodmFsdWUsIGV4YW1wbGVzKSB7CiAgICAgIG1hcC5wdXRJZkFic2VudCh2YWx1ZSwgKCkgPT4gW10pOwogICAgICBtYXBbdmFsdWVdLmFkZEFsbChleGFtcGxlcyk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlIHJlY29yZGVkRnJlcXVlbmNpZXMoaWQsIHZhbHVlKSB7CiAgICBNYXA8ZHluYW1pYywgTGlzdD4gbWFwID0gZnJlcXVlbmN5TWFwc1tpZF07CiAgICBpZiAobWFwID09IG51bGwpIHJldHVybiBjb25zdCBbXTsKICAgIExpc3QgbGlzdCA9IG1hcFt2YWx1ZV07CiAgICBpZiAobGlzdCA9PSBudWxsKSByZXR1cm4gY29uc3QgW107CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkQ291bnRlcihpZCwgW3JlYXNvbiwgZXhhbXBsZV0pIHsKICAgIE1hcDxkeW5hbWljLCBMaXN0PiBtYXAgPSBjb3VudGVyc01hcC5wdXRJZkFic2VudChpZCwgKCkgPT4ge30pOwogICAgbWFwLnB1dElmQWJzZW50KHJlYXNvbiwgKCkgPT4gW10pLmFkZChleGFtcGxlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkRWxlbWVudChrZXksIGVsZW1lbnQsIHtkYXRhfSkgewogICAgc2V0c01hcC5wdXRJZkFic2VudChrZXksICgpID0+IG5ldyBNYXAoKSlbZWxlbWVudF0gPSBkYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRUcmFjZShrZXksIHtpbnQgc2FtcGxlRnJlcXVlbmN5fSkgewogICAgaWYgKHNhbXBsZUZyZXF1ZW5jeSA9PSBudWxsKSB7CiAgICAgIHNhbXBsZUZyZXF1ZW5jeSA9IHN0YWNrVHJhY2VTYW1wbGVGcmVxdWVuY3k7CiAgICB9CiAgICB0cmFjZU1hcAogICAgICAgIC5wdXRJZkFic2VudChrZXksICgpID0+IG5ldyBfU3RhY2tUcmFjZVRyZWUoa2V5LCBzYW1wbGVGcmVxdWVuY3kpKQogICAgICAgIC5zYW1wbGUoKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlIGdldExpc3QoU3RyaW5nIGtleSkgewogICAgTWFwIG1hcCA9IHNldHNNYXBba2V5XTsKICAgIGlmIChtYXAgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IFtdOwogICAgcmV0dXJuIG1hcC5rZXlzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkdW1wU3RhdHMoe3ZvaWQgYmVmb3JlQ2xvc2UoKX0pIHsKICAgIHByaW50ZXIuc3RhcnQoJ3N0YXRzJyk7CiAgICBkdW1wRnJlcXVlbmNpZXMoKTsKICAgIGR1bXBTZXRzKCk7CiAgICBkdW1wQ291bnRlcnMoKTsKICAgIGR1bXBUcmFjZXMoKTsKICAgIGlmIChiZWZvcmVDbG9zZSAhPSBudWxsKSB7CiAgICAgIGJlZm9yZUNsb3NlKCk7CiAgICB9CiAgICBwcmludGVyLmVuZCgnc3RhdHMnKTsKICB9CgogIHZvaWQgZHVtcFNldHMoKSB7CiAgICBwcmludGVyLmdyb3VwKCdzZXRzJywgKCkgewogICAgICBzZXRzTWFwLmZvckVhY2goKGssIHNldCkgewogICAgICAgIGR1bXBJdGVyYWJsZSgnZXhhbXBsZXMnLCAnJGsnLCBzZXQua2V5cywKICAgICAgICAgICAgbGltaXQ6IHByaW50ZXIuZXhhbXBsZXMsIGRhdGFNYXA6IHNldCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBGcmVxdWVuY2llcygpIHsKICAgIHByaW50ZXIuZ3JvdXAoJ2ZyZXF1ZW5jaWVzJywgKCkgewogICAgICBmcmVxdWVuY3lNYXBzLmZvckVhY2goKGtleSwgTWFwPGR5bmFtaWMsIExpc3Q+IG1hcCkgewogICAgICAgIHByaW50ZXIuY2hpbGQoJ2ZyZXF1ZW5jeScsIHsndGl0bGUnOiAnJGtleSd9LCAoKSB7CiAgICAgICAgICBkdW1wRnJlcXVlbmN5KG1hcCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBGcmVxdWVuY3koTWFwPGR5bmFtaWMsIEl0ZXJhYmxlPiBtYXApIHsKICAgIE1hcCBzb3J0ZWRNYXAgPSB0cnlTb3J0TWFwKG1hcCk7CiAgICBzb3J0ZWRNYXAuZm9yRWFjaCgoaywgbGlzdCkgewogICAgICBkdW1wSXRlcmFibGUoJ2V4YW1wbGVzJywgJyRrJywgbGlzdCwgbGltaXQ6IHByaW50ZXIuZXhhbXBsZXMpOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBDb3VudGVycygpIHsKICAgIHByaW50ZXIuZ3JvdXAoJ2NvdW50ZXJzJywgKCkgewogICAgICBjb3VudGVyc01hcC5rZXlzLmZvckVhY2goZHVtcENvdW50ZXIpOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBDb3VudGVyKGlkKSB7CiAgICBNYXA8ZHluYW1pYywgTGlzdD4gbWFwID0gY291bnRlcnNNYXBbaWRdOwogICAgYm9vbCBoYXNEYXRhKGV4YW1wbGUpIHsKICAgICAgaWYgKG1hcCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIExpc3QgbGlzdCA9IG1hcFtleGFtcGxlXTsKICAgICAgaWYgKGxpc3QgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gbGlzdC5hbnkoKGRhdGEpID0+IGRhdGEgIT0gbnVsbCk7CiAgICB9CgogICAgaW50IGNvdW50ID0gMDsKICAgIE1hcDxkeW5hbWljLCBpbnQ+IGZyZXF1ZW5jeU1hcCA9IHt9OwogICAgbWFwLmZvckVhY2goKHZhciBjYXRlZ29yeSwgTGlzdCBleGFtcGxlcykgewogICAgICBpZiAoY2F0ZWdvcnkgIT0gbnVsbCkgewogICAgICAgIGZyZXF1ZW5jeU1hcC5wdXRJZkFic2VudChjYXRlZ29yeSwgKCkgPT4gMCk7CiAgICAgICAgZnJlcXVlbmN5TWFwW2NhdGVnb3J5XSArPSBleGFtcGxlcy5sZW5ndGg7CiAgICAgIH0KICAgICAgY291bnQgKz0gZXhhbXBsZXMubGVuZ3RoOwogICAgfSk7CiAgICBNYXA8aW50LCBTZXQ+IHJlc3VsdCA9IHNvcnRNYXAoaW52ZXJzZU1hcChmcmVxdWVuY3lNYXApLCAoYSwgYikgPT4gYiAtIGEpOwogICAgaW50IGV4YW1wbGVzTGltaXQgPSBudWxsOwogICAgaWYgKHByaW50ZXIuZXhhbXBsZXMgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID49IHByaW50ZXIuZXhhbXBsZXMpIHsKICAgICAgZXhhbXBsZXNMaW1pdCA9IDA7CiAgICB9CiAgICBpbnQgY291bnRlciA9IDA7CiAgICBib29sIGhhc01vcmUgPSBmYWxzZTsKICAgIHByaW50ZXIub3BlbignY291bnRlcicsIHsndGl0bGUnOiAnJGlkJywgJ2NvdW50JzogY291bnR9KTsKICAgIHJlc3VsdC5mb3JFYWNoKChpbnQgY291bnQsIFNldCBleGFtcGxlcykgewogICAgICBpZiAoY291bnRlciA9PSBwcmludGVyLmV4YW1wbGVzKSB7CiAgICAgICAgcHJpbnRlci5iZWdpbkV4dHJhKCk7CiAgICAgICAgaGFzTW9yZSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGV4YW1wbGVzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgICAoZXhhbXBsZXNMaW1pdCA9PSAwIHx8ICFoYXNEYXRhKGV4YW1wbGVzLmZpcnN0KSkpIHsKICAgICAgICBwcmludGVyLmNoaWxkKCdleGFtcGxlcycsIHsnY291bnQnOiBjb3VudCwgJ2V4YW1wbGUnOiBleGFtcGxlcy5maXJzdH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHByaW50ZXIuY2hpbGQoJ2V4YW1wbGVzJywgeydjb3VudCc6IGNvdW50LCAnZXhhbXBsZXMnOiBleGFtcGxlcy5sZW5ndGh9LAogICAgICAgICAgICAoKSB7CiAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKChleGFtcGxlKSB7CiAgICAgICAgICAgIGR1bXBJdGVyYWJsZSgnZXhhbXBsZXMnLCAnJGV4YW1wbGUnLCBtYXBbZXhhbXBsZV0sCiAgICAgICAgICAgICAgICBsaW1pdDogZXhhbXBsZXNMaW1pdCwgaW5jbHVkZUNvdW50OiBmYWxzZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBjb3VudGVyKys7CiAgICB9KTsKICAgIGlmIChoYXNNb3JlKSB7CiAgICAgIHByaW50ZXIuZW5kRXh0cmEoKTsKICAgIH0KICAgIHByaW50ZXIuY2xvc2UoJ2NvdW50ZXInKTsKICB9CgogIHZvaWQgZHVtcFRyYWNlcygpIHsKICAgIHByaW50ZXIuZ3JvdXAoJ3RyYWNlcycsICgpIHsKICAgICAgdHJhY2VNYXAua2V5cy5mb3JFYWNoKGR1bXBUcmFjZSk7CiAgICB9KTsKICB9CgogIHZvaWQgZHVtcFRyYWNlKGtleSkgewogICAgX1N0YWNrVHJhY2VUcmVlIHRyZWUgPSB0cmFjZU1hcFtrZXldOwogICAgdHJlZS5kdW1wVHJhY2VzKHByaW50ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkdW1wQ29ycmVsYXRpb24oa2V5QSwgSXRlcmFibGUgYSwga2V5QiwgSXRlcmFibGUgYiwKICAgICAge01hcCBkYXRhQSwgTWFwIGRhdGFCfSkgewogICAgcHJpbnRlci5jaGlsZCgnY29ycmVsYXRpb25zJywgeyd0aXRsZSc6ICcka2V5QSB2cyAka2V5Qid9LCAoKSB7CiAgICAgIExpc3QgYUFuZEIgPSBhLndoZXJlKChlKSA9PiBlICE9IG51bGwgJiYgYi5jb250YWlucyhlKSkudG9MaXN0KCk7CiAgICAgIExpc3QgYUFuZE5vdEIgPSBhLndoZXJlKChlKSA9PiBlICE9IG51bGwgJiYgIWIuY29udGFpbnMoZSkpLnRvTGlzdCgpOwogICAgICBMaXN0IG5vdEFhbmRCID0gYi53aGVyZSgoZSkgPT4gZSAhPSBudWxsICYmICFhLmNvbnRhaW5zKGUpKS50b0xpc3QoKTsKICAgICAgZHVtcEl0ZXJhYmxlKCdjb3JyZWxhdGlvbicsICcka2V5QSAmJiAka2V5QicsIGFBbmRCLAogICAgICAgICAgZGF0YU1hcDogZGF0YUEsIGxpbWl0OiBwcmludGVyLmV4YW1wbGVzKTsKICAgICAgZHVtcEl0ZXJhYmxlKCdjb3JyZWxhdGlvbicsICcka2V5QSAmJiAhJGtleUInLCBhQW5kTm90QiwKICAgICAgICAgIGRhdGFNYXA6IGRhdGFBLCBsaW1pdDogcHJpbnRlci5leGFtcGxlcyk7CiAgICAgIGR1bXBJdGVyYWJsZSgnY29ycmVsYXRpb24nLCAnISRrZXlBICYmICRrZXlCJywgbm90QWFuZEIsCiAgICAgICAgICBkYXRhTWFwOiBkYXRhQiwgbGltaXQ6IHByaW50ZXIuZXhhbXBsZXMpOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBJdGVyYWJsZShTdHJpbmcgdGFnLCBTdHJpbmcgdGl0bGUsIEl0ZXJhYmxlIGl0ZXJhYmxlLAogICAgICB7aW50IGxpbWl0LCBNYXAgZGF0YU1hcCwgYm9vbCBpbmNsdWRlQ291bnQ6IHRydWV9KSB7CiAgICBpZiAobGltaXQgPT0gMCkgcmV0dXJuOwoKICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGNoaWxkRGF0YSA9IHt9OwogICAgSXRlcmFibGUgbm9uTnVsbEl0ZXJhYmxlID0gaXRlcmFibGUud2hlcmUoKGUpID0+IGUgIT0gbnVsbCk7CiAgICBpZiAobm9uTnVsbEl0ZXJhYmxlLmlzRW1wdHkgJiYgIWluY2x1ZGVDb3VudCkgewogICAgICBjaGlsZERhdGFbJ25hbWUnXSA9IHRpdGxlOwogICAgfSBlbHNlIHsKICAgICAgY2hpbGREYXRhWyd0aXRsZSddID0gdGl0bGU7CiAgICB9CiAgICBpZiAoaW5jbHVkZUNvdW50KSB7CiAgICAgIGNoaWxkRGF0YVsnY291bnQnXSA9IGl0ZXJhYmxlLmxlbmd0aDsKICAgIH0KICAgIHByaW50ZXIuY2hpbGQodGFnLCBjaGlsZERhdGEsICgpIHsKICAgICAgYm9vbCBoYXNNb3JlID0gZmFsc2U7CiAgICAgIGludCBjb3VudGVyID0gMDsKICAgICAgbm9uTnVsbEl0ZXJhYmxlLmZvckVhY2goKGVsZW1lbnQpIHsKICAgICAgICBpZiAoY291bnRlciA9PSBsaW1pdCkgewogICAgICAgICAgcHJpbnRlci5iZWdpbkV4dHJhKCk7CiAgICAgICAgICBoYXNNb3JlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIGRhdGEgPSBkYXRhTWFwICE9IG51bGwgPyBkYXRhTWFwW2VsZW1lbnRdIDogbnVsbDsKICAgICAgICBpZiAoZGF0YSAhPSBudWxsKSB7CiAgICAgICAgICBwcmludGVyLmNoaWxkKCdleGFtcGxlJywgeyd2YWx1ZSc6IGVsZW1lbnQsICdkYXRhJzogZGF0YX0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmludGVyLmNoaWxkKCdleGFtcGxlJywgeyd2YWx1ZSc6IGVsZW1lbnR9KTsKICAgICAgICB9CiAgICAgICAgY291bnRlcisrOwogICAgICB9KTsKICAgICAgaWYgKGhhc01vcmUpIHsKICAgICAgICBwcmludGVyLmVuZEV4dHJhKCk7CiAgICAgIH0KICAgIH0pOwogIH0KfQoKLy8vIFJldHVybnMgYSBtYXAgdGhhdCBpcyBhbiBpbnZlcnNpb24gb2YgW21hcF0sIHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUgdmFsdWVzCi8vLyBvZiBbbWFwXSBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlIHNldCBvZiBrZXlzIGluIFttYXBdIHRoYXQgc2hhcmUgdmFsdWVzLgovLy8KLy8vIElmIFtlcXVhbHNdIGFuZCBbaGFzaENvZGVdIGFyZSBwcm92aWRlZCwgdGhlc2UgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lCi8vLyBlcXVhbGl0eSBhbW9uZyB0aGUgdmFsdWVzIG9mIFttYXBdLgovLy8KLy8vIElmIFtpc1ZhbGlkS2V5XSBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aXRoIGEgdmFsdWUgb2YgW21hcF0KLy8vIGlzIGEgcG90ZW50aWFsIGtleSBvZiB0aGUgaW52ZXJzaW9uIG1hcC4KTWFwPFYsIFNldDxLPj4gaW52ZXJzZU1hcDxLLCBWPihNYXA8SywgVj4gbWFwLAogICAge2Jvb2wgZXF1YWxzKFYga2V5MSwgViBrZXkyKSwKICAgIGludCBoYXNoQ29kZShWIGtleSksCiAgICBib29sIGlzVmFsaWRLZXkoViBwb3RlbnRpYWxLZXkpfSkgewogIE1hcDxWLCBTZXQ8Sz4+IHJlc3VsdCA9IG5ldyBMaW5rZWRIYXNoTWFwPFYsIFNldDxLPj4oCiAgICAgIGVxdWFsczogZXF1YWxzLCBoYXNoQ29kZTogaGFzaENvZGUsIGlzVmFsaWRLZXk6IGlzVmFsaWRLZXkpOwogIG1hcC5mb3JFYWNoKChrLCB2KSB7CiAgICBpZiAoaXNWYWxpZEtleSA9PSBudWxsIHx8IGlzVmFsaWRLZXkodikpIHsKICAgICAgcmVzdWx0LnB1dElmQWJzZW50KHYsICgpID0+IG5ldyBTZXQoKSkuYWRkKGspOwogICAgfQogIH0pOwogIHJldHVybiByZXN1bHQ7Cn0KCi8vLyBSZXR1cm4gYSBuZXcgbWFwIGhldXJpc3RpY2FsbHkgc29ydGVkIGJ5IHRoZSBrZXlzIG9mIFttYXBdLiBJZiB0aGUgZmlyc3QKLy8vIGtleSBvZiBbbWFwXSBpcyBbQ29tcGFyYWJsZV0sIHRoZSBrZXlzIGFyZSBzb3J0ZWQgdXNpbmcgW3NvcnRNYXBdIHVuZGVyCi8vLyB0aGUgYXNzdW1wdGlvbiB0aGF0IGFsbCBrZXlzIGFyZSBbQ29tcGFyYWJsZV0uCi8vLyBPdGhlcndpc2UsIHRoZSBrZXlzIGFyZSBzb3J0ZWQgYXMgc3RyaW5nIHVzaW5nIHRoZWlyIGB0b1N0cmluZ2AKLy8vIHJlcHJlc2VudGF0aW9uLgpNYXA8SywgVj4gdHJ5U29ydE1hcDxLLCBWPihNYXA8SywgVj4gbWFwKSB7CiAgSXRlcmFibGU8Sz4gaXRlcmFibGUgPSBtYXAua2V5cy53aGVyZSgoSyBrKSA9PiBrICE9IG51bGwpOwogIGlmIChpdGVyYWJsZS5pc0VtcHR5KSByZXR1cm4gbWFwOwogIHZhciBrZXkgPSBpdGVyYWJsZS5maXJzdDsKICBpZiAoa2V5IGlzIENvbXBhcmFibGU8Sz4pIHsKICAgIHJldHVybiBzb3J0TWFwKG1hcCk7CiAgfQogIHJldHVybiBzb3J0TWFwKG1hcCwgKGEsIGIpID0+ICckYScuY29tcGFyZVRvKCckYicpKTsKfQoKLy8vIFJldHVybnMgYSBuZXcgbWFwIGluIHdoaWNoIHRoZSBrZXlzIG9mIFttYXBdIGFyZSBzb3J0ZWQgdXNpbmcgW2NvbXBhcmVdLgovLy8gSWYgW2NvbXBhcmVdIGlzIG51bGwsIHRoZSBrZXlzIG11c3QgYmUgW0NvbXBhcmFibGVdLgpNYXA8SywgVj4gc29ydE1hcDxLLCBWPihNYXA8SywgVj4gbWFwLCBbaW50IGNvbXBhcmUoSyBhLCBLIGIpXSkgewogIExpc3Q8Sz4ga2V5cyA9IG1hcC5rZXlzLnRvTGlzdCgpOwogIGtleXMuc29ydChjb21wYXJlKTsKICBNYXA8SywgVj4gc29ydGVkTWFwID0gbmV3IE1hcDxLLCBWPigpOwogIGtleXMuZm9yRWFjaCgoSyBrKSA9PiBzb3J0ZWRNYXBba10gPSBtYXBba10pOwogIHJldHVybiBzb3J0ZWRNYXA7Cn0KgzIATk48ASQaFwEeGSkcASIBTAsSFRgcBBECAQ4BUQROTh0ESE0YGCwUGhYZGEIEFQEWIB0nBj4LIgQYDUILRgQlAgFELQ4RAUpOUQY8OwE2HgFOLgZPBg8rOzwlOyUpESYNESUNBi0BOysBUDQGTwYPLTc4NycnKQ8QGRoQDxAZBjABUDU8AUk3AUxKEQZPBg8rJSUlNTYlJSAgKREdHREeDxobDhEGLQFFSisxAUQqAUgzAUtMSBkqAUIGTRMGPURABkxQDjkhAgEoBC4UFwEqHwIBJysXAQwxAgFDHioaARkBDB4UFAQCATceShkBGhsBSDUPGg0EARgZAToXQgFRHBg+JBQ6DwQBIRsBMBcBMBUCAT9DDBYcAUcbBAIBOSsWAU4zAQwXQSABKhsXISUTHCcjExsGQiUwDSInFQoGIxIEAQwaIAESBAEMFjwSBAEMFBIEAgE2JzcXAT4zAQwaE0AVBg4EAQwYDwQBDBdBKhsWIBs5CAgTIxIEAQwaEiwEAQwWEwQBDBQUBAIBTBU/DSUjAUIBLAEzLQFRHkkBKQ0lHwYEATEzMh9DJD5CJBEiQSYyNBg2ChAIBjkEASpJIzowCAYcHAQBLR4YMCIIBgQBDCkoIAQBNi8ZFDUgFTIfGR0RChgYEQgGFjIpBgQBDBYqFRoEAgEwDBYdAUEBDCocECApCBwcBAESLyIGBAIBJiUeHzciMScvDCUBKgEMOi44KQ0YBgQBDBQWBAEML0YmHQQBDERGLSgjCAQBDCwwJhwnEQQBDC5ENAQBDC0/BAEMMSMzBg1LEwQBDCEcJhUEAQwpHBcQFBIfFQYaBAEUHyExNAoIBAEbJjw7HgwKCAQBMyUiRQgEARgjLQgEARkuHCUgJi8GARMpMB41MwggCE8eSRkGFRo/LykeGAgiPlAPUREnPzwODAgRCBMaBh4EARYhKAgEARgqHgQBDDsgREhMTDs0PzQ/NAgEAUE7HAEpQTQhDSIGGCwGJxwXKiAgGgo+HEYROAoTChUcCAgEAgFPTARJKARRLS8iGSg4QxcvNQYGEQIBTUwzRBQsPSQcHhkENwIBTTlCJBYpMBQCASdwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL3N0YXRzLmRhcnQ0c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGVscGVycy90cmFja19tYXAuZGFydI/QLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGUgdHJhY2sgbWFwIGlzIGEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGEgbWFwIHRoYXQga2VlcHMgdHJhY2sKLy8vIG9mIHRoZSAnZmluYWwnIHNpemUgb2YgbWFwcyBncm91cGVkIGJ5IGRlc2NyaXB0aW9uLiBJdCBhbGxvd3MKLy8vIGRldGVybWluaW5nIHRoZSBkaXN0cmlidXRpb24gb2Ygc2l6ZXMgZm9yIGEgc3BlY2lmaWMgYWxsb2NhdGlvbgovLy8gc2l0ZSBhbmQgaXQgY2FuIGJlIHVzZWQgbGlrZSB0aGlzOgovLy8KLy8vICAgIE1hcDxTdHJpbmcsIGludD4gbWFwID0gbmV3IFRyYWNrTWFwPFN0cmluZywgaW50PigibXktbWFwIik7Ci8vLwovLy8gQWZ0ZXIgZmluaXNoaW5nIHRoZSBjb21waWxhdG9uLCB0aGUgaGlzdG9ncmFtIG9mIHRyYWNrIG1hcCBzaXplcwovLy8gaXMgcHJpbnRlZCBidXQgb25seSB3aGVuIHJ1bm5pbmcgaW4gdmVyYm9zZSBtb2RlLgpjbGFzcyBUcmFja01hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgZmluYWwgTWFwPEssIFY+IF9tYXA7CiAgZmluYWwgTGlzdCBfY291bnRzOwogIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PGludD4+IF9jb3VudHNNYXAgPSB7fTsKCiAgVHJhY2tNYXAuX2ludGVybmFsKHRoaXMuX2NvdW50cykgOiBfbWFwID0gbmV3IE1hcDxLLCBWPigpOwoKICBmYWN0b3J5IFRyYWNrTWFwKFN0cmluZyBkZXNjcmlwdGlvbikgewogICAgTGlzdCBjb3VudHMgPSBfY291bnRzTWFwLnB1dElmQWJzZW50KGRlc2NyaXB0aW9uLCAoKSA9PiBbMF0pOwogICAgTWFwIHJlc3VsdCA9IG5ldyBUcmFja01hcDxLLCBWPi5faW50ZXJuYWwoY291bnRzKTsKICAgIGNvdW50c1swXSsrOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIHByaW50SGlzdG9ncmFtKCkgewogICAgX2NvdW50c01hcC5mb3JFYWNoKChkZXNjcmlwdGlvbiwgY291bnRzKSB7CiAgICAgIHByaW50KCckZGVzY3JpcHRpb24gLS0gJHtjb3VudHMubGVuZ3RofSBtYXBzJyk7CgogICAgICAvLyBDb3VudCB0aGUgdG90YWwgbnVtYmVyIG9mIG1hcHMuCiAgICAgIGludCBzdW0gPSAwOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHN1bSArPSBjb3VudHNbaV07CiAgICAgIH0KICAgICAgaW50IGluY3JlbWVudCA9IHN1bSB+LyAxMDsKICAgICAgaW50IHRhcmdldCA9IGluY3JlbWVudDsKICAgICAgaW50IGFjY3VtdWxhdGVkID0gMDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBhY2N1bXVsYXRlZCArPSBjb3VudHNbaV07CiAgICAgICAgaWYgKGFjY3VtdWxhdGVkID49IHRhcmdldCkgewogICAgICAgICAgU3RyaW5nIHBlcmNlbnQgPSAoYWNjdW11bGF0ZWQgLyBzdW0gKiAxMDApLnRvU3RyaW5nQXNGaXhlZCgxKTsKICAgICAgICAgIHByaW50KCcgIC0tICRwZXJjZW50JTogbGVuZ3RoIDw9ICRpJyk7CiAgICAgICAgICB0YXJnZXQgKz0gaW5jcmVtZW50OwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IF9tYXAuaXNFbXB0eTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9tYXAuaXNOb3RFbXB0eTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX21hcC5rZXlzOwogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX21hcC52YWx1ZXM7CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4gX21hcC5jb250YWluc0tleShrZXkpOwogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+IF9tYXAuY29udGFpbnNWYWx1ZSh2YWx1ZSk7CgogIEBvdmVycmlkZQogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gX21hcFtrZXldOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IF9tYXAudG9TdHJpbmcoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEsga2V5LCBWIHZhbHVlKSkgewogICAgX21hcC5mb3JFYWNoKGFjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgaWYgKCFfbWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgX25vdGlmeUxlbmd0aENoYW5nZWQoMSk7CiAgICAgIF9tYXBba2V5XSA9IHZhbHVlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBpZiAoY29udGFpbnNLZXkoa2V5KSkgcmV0dXJuIHRoaXNba2V5XTsKICAgIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgdGhpc1trZXldID0gdmFsdWU7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAoX21hcC5jb250YWluc0tleShrZXkpKSB7CiAgICAgIF9ub3RpZnlMZW5ndGhDaGFuZ2VkKC0xKTsKICAgIH0KICAgIHJldHVybiBfbWFwLnJlbW92ZShrZXkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBvdGhlci5mb3JFYWNoKChrZXksIHZhbHVlKSA9PiB0aGlzW2tleV0gPSB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgX25vdGlmeUxlbmd0aENoYW5nZWQoLV9tYXAubGVuZ3RoKTsKICAgIF9tYXAuY2xlYXIoKTsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLUiwgVlI+IGNhc3Q8S1IsIFZSPigpID0+IF9tYXAuY2FzdDxLUiwgVlI+KCk7CiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzID0+IF9tYXAuZW50cmllczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSB7CiAgICBmb3IgKHZhciBlbnRyeSBpbiBlbnRyaWVzKSB0aGlzW2VudHJ5LmtleV0gPSBlbnRyeS52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLUiwgVlI+IG1hcDxLUiwgVlI+KE1hcEVudHJ5PEtSLCBWUj4gdHJhbnNmb3JtKEsga2V5LCBWIHZhbHVlKSkgPT4KICAgICAgX21hcC5tYXAodHJhbnNmb3JtKTsKCiAgQG92ZXJyaWRlCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgPT4KICAgICAgX21hcC51cGRhdGUoa2V5LCB1cGRhdGUsIGlmQWJzZW50OiBpZkFic2VudCk7CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgX21hcC51cGRhdGVBbGwodXBkYXRlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEsga2V5LCBWIHZhbHVlKSkgewogICAgaW50IGJlZm9yZSA9IF9tYXAubGVuZ3RoOwogICAgX21hcC5yZW1vdmVXaGVyZSh0ZXN0KTsKICAgIF9ub3RpZnlMZW5ndGhDaGFuZ2VkKF9tYXAubGVuZ3RoIC0gYmVmb3JlKTsKICB9CgogIHZvaWQgX25vdGlmeUxlbmd0aENoYW5nZWQoaW50IGRlbHRhKSB7CiAgICBpbnQgb2xkTGVuZ3RoID0gX21hcC5sZW5ndGg7CiAgICBpbnQgbmV3TGVuZ3RoID0gb2xkTGVuZ3RoICsgZGVsdGE7CiAgICBfY291bnRzW29sZExlbmd0aF0tLTsKICAgIGlmIChuZXdMZW5ndGggPCBfY291bnRzLmxlbmd0aCkgewogICAgICBfY291bnRzW25ld0xlbmd0aF0rKzsKICAgIH0gZWxzZSB7CiAgICAgIF9jb3VudHMuYWRkKDEpOwogICAgICBhc3NlcnQobmV3TGVuZ3RoID09IF9jb3VudHMubGVuZ3RoIC0gMSk7CiAgICB9CiAgfQp9CoCcAE5OPAFEQkQnBEMERTYsGBY3AT0BKUI3ERMEASEvNgEpEzAaCCEeGzAiJUkxHwoICAQBDCEMJAwqAQwlDCkBDDkMQQEMKgwoAQwuGgQBDCYiHxkGBAEMJywaFxIEAQwZISAGHQQBDCE2BAEMESgSBAEMNQw4AQw2PgQBDEkbAQw4NAEMLRwEAQwwHhwwBAEpIScaJhwNFi8GBAIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvdHJhY2tfbWFwLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9lbnF1ZXVlci5kYXJ0qFYvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzLmVucXVldWU7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBRdWV1ZTsKCmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrOwppbXBvcnQgJy4uL2NvbW1vbi93b3JrLmRhcnQnIHNob3cgV29ya0l0ZW07CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnF1ZXVlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdGFudFVzZSwKICAgICAgICBEeW5hbWljVXNlLAogICAgICAgIFN0YXRpY1VzZSwKICAgICAgICBTdGF0aWNVc2VLaW5kLAogICAgICAgIFR5cGVVc2UsCiAgICAgICAgVHlwZVVzZUtpbmQ7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFVzZUNhc2UsIFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdFZpc2l0b3I7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IFNldGxldDsKCi8vLyBbRW5xdWV1ZXJdIHdoaWNoIGlzIHNwZWNpZmljIHRvIGNvZGUgZ2VuZXJhdGlvbi4KY2xhc3MgQ29kZWdlbkVucXVldWVyIGV4dGVuZHMgRW5xdWV1ZXJJbXBsIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBTZXQ8Q2xhc3NFbnRpdHk+IF9yZWNlbnRDbGFzc2VzID0gbmV3IFNldGxldDxDbGFzc0VudGl0eT4oKTsKICBib29sIF9yZWNlbnRDb25zdGFudHMgPSBmYWxzZTsKICBmaW5hbCBDb2RlZ2VuV29ybGRCdWlsZGVySW1wbCBfd29ybGRCdWlsZGVyOwogIGZpbmFsIFdvcmtJdGVtQnVpbGRlciBfd29ya0l0ZW1CdWlsZGVyOwoKICBAb3ZlcnJpZGUKICBib29sIHF1ZXVlSXNDbG9zZWQgPSBmYWxzZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBDb21waWxlclRhc2sgdGFzazsKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnF1ZXVlckxpc3RlbmVyIGxpc3RlbmVyOwogIGZpbmFsIEFubm90YXRpb25zRGF0YSBfYW5ub3RhdGlvbnNEYXRhOwoKICBXb3JsZEltcGFjdFZpc2l0b3IgX2ltcGFjdFZpc2l0b3I7CgogIGZpbmFsIFF1ZXVlPFdvcmtJdGVtPiBfcXVldWUgPSBuZXcgUXVldWU8V29ya0l0ZW0+KCk7CgogIC8vLyBBbGwgZGVjbGFyYXRpb24gZWxlbWVudHMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGJ5IGNvZGVnZW4uCiAgZmluYWwgU2V0PE1lbWJlckVudGl0eT4gX3Byb2Nlc3NlZEVudGl0aWVzID0gbmV3IFNldDxNZW1iZXJFbnRpdHk+KCk7CgogIC8vIElmIG5vdCBgbnVsbGAgdGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaGFzIGJlZW4gZW1wdGllZC4gSXQgYWxsb3dzIGZvcgogIC8vIGFwcGx5aW5nIGFkZGl0aW9uYWwgaW1wYWN0cyBiZWZvcmUgcmUtZW1wdHlpbmcgdGhlIHF1ZXVlLgogIHZvaWQgRnVuY3Rpb24oKSBvbkVtcHR5Rm9yVGVzdGluZzsKCiAgc3RhdGljIGNvbnN0IEltcGFjdFVzZUNhc2UgSU1QQUNUX1VTRSA9CiAgICAgIGNvbnN0IEltcGFjdFVzZUNhc2UoJ0NvZGVnZW5FbnF1ZXVlcicpOwoKICBDb2RlZ2VuRW5xdWV1ZXIodGhpcy50YXNrLCB0aGlzLl93b3JsZEJ1aWxkZXIsIHRoaXMuX3dvcmtJdGVtQnVpbGRlciwKICAgICAgdGhpcy5saXN0ZW5lciwgdGhpcy5fYW5ub3RhdGlvbnNEYXRhKQogICAgICA6IHRoaXMubmFtZSA9ICdjb2RlZ2VuIGVucXVldWVyJyB7CiAgICBfaW1wYWN0VmlzaXRvciA9IG5ldyBFbnF1ZXVlckltcGxJbXBhY3RWaXNpdG9yKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29kZWdlbldvcmxkQnVpbGRlciBnZXQgd29ybGRCdWlsZGVyID0+IF93b3JsZEJ1aWxkZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHF1ZXVlSXNFbXB0eSA9PiBfcXVldWUuaXNFbXB0eTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjaGVja1F1ZXVlSXNFbXB0eSgpIHsKICAgIGlmIChfcXVldWUuaXNOb3RFbXB0eSkgewogICAgICBmYWlsZWRBdChfcXVldWUuZmlyc3QuZWxlbWVudCwgIiRuYW1lIHF1ZXVlIGlzIG5vdCBlbXB0eS4iKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoaXMgZW5xdWV1ZXIgaXMgdGhlIHJlc29sdXRpb24gZW5xdWV1ZXIuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNSZXNvbHV0aW9uUXVldWUgPT4gZmFsc2U7CgogIC8vLyBDcmVhdGUgYSBbV29ya0l0ZW1dIGZvciBbZW50aXR5XSBhbmQgYWRkIGl0IHRvIHRoZSB3b3JrIGxpc3QgaWYgaXQgaGFzIG5vdAogIC8vLyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLgogIHZvaWQgX2FkZFRvV29ya0xpc3QoTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgaWYgKF9wcm9jZXNzZWRFbnRpdGllcy5jb250YWlucyhlbnRpdHkpKSByZXR1cm47CgogICAgV29ya0l0ZW0gd29ya0l0ZW0gPSBfd29ya0l0ZW1CdWlsZGVyLmNyZWF0ZVdvcmtJdGVtKGVudGl0eSk7CiAgICBpZiAod29ya0l0ZW0gPT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChxdWV1ZUlzQ2xvc2VkKSB7CiAgICAgIGZhaWxlZEF0KGVudGl0eSwgIkNvZGVnZW4gd29yayBsaXN0IGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGFkZCAkZW50aXR5Iik7CiAgICB9CgogICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJVc2VkRWxlbWVudChlbnRpdHkpKTsKICAgIF9xdWV1ZS5hZGQod29ya0l0ZW0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseUltcGFjdChXb3JsZEltcGFjdCB3b3JsZEltcGFjdCwge3ZhciBpbXBhY3RTb3VyY2V9KSB7CiAgICBpZiAod29ybGRJbXBhY3QuaXNFbXB0eSkgcmV0dXJuOwogICAgaW1wYWN0U3RyYXRlZ3kudmlzaXRJbXBhY3QoCiAgICAgICAgaW1wYWN0U291cmNlLCB3b3JsZEltcGFjdCwgX2ltcGFjdFZpc2l0b3IsIGltcGFjdFVzZSk7CiAgfQoKICB2b2lkIF9yZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICB7Ym9vbCBuYXRpdmVVc2FnZTogZmFsc2V9KSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdjb2RlZ2VuLnR5cGVVc2UnLCAoKSB7CiAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJUeXBlSW5zdGFudGlhdGlvbih0eXBlLCBfYXBwbHlDbGFzc1VzZSk7CiAgICAgIGxpc3RlbmVyLnJlZ2lzdGVySW5zdGFudGlhdGVkVHlwZSh0eXBlLCBuYXRpdmVVc2FnZTogbmF0aXZlVXNhZ2UpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNoZWNrTm9FbnF1ZXVlZEludm9rZWRJbnN0YW5jZU1ldGhvZHMoCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjaGVja0VucXVldWVyQ29uc2lzdGVuY3koZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2hlY2tDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIF93b3JsZEJ1aWxkZXIucHJvY2Vzc0NsYXNzTWVtYmVycyhjbHMsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQpIHsKICAgICAgaWYgKHVzZVNldC5pc05vdEVtcHR5KSB7CiAgICAgICAgZmFpbGVkQXQobWVtYmVyLAogICAgICAgICAgICAnVW5lbnF1ZXVlZCB1c2Ugb2YgJG1lbWJlcjogJHt1c2VTZXQuaXRlcmFibGUoTWVtYmVyVXNlLnZhbHVlcyl9Jyk7CiAgICAgIH0KICAgIH0sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogdHJ1ZSk7CiAgfQoKICAvLy8gQ2FsbGJhY2sgZm9yIGFwcGx5aW5nIHRoZSB1c2Ugb2YgYSBbY2xzXS4KICB2b2lkIF9hcHBseUNsYXNzVXNlKENsYXNzRW50aXR5IGNscywgRW51bVNldDxDbGFzc1VzZT4gdXNlU2V0KSB7CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKENsYXNzVXNlLklOU1RBTlRJQVRFRCkpIHsKICAgICAgX3JlY2VudENsYXNzZXMuYWRkKGNscyk7CiAgICAgIF93b3JsZEJ1aWxkZXIucHJvY2Vzc0NsYXNzTWVtYmVycyhjbHMsIF9hcHBseU1lbWJlclVzZSk7CiAgICAgIC8vIFdlIG9ubHkgdGVsbCB0aGUgYmFja2VuZCBvbmNlIHRoYXQgW2Nsc10gd2FzIGluc3RhbnRpYXRlZCwgc28KICAgICAgLy8gYW55IGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG11c3QgYmUgdHJlYXRlZCBhcyBnbG9iYWwKICAgICAgLy8gZGVwZW5kZW5jaWVzLgogICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKGNscykpOwogICAgfQogICAgaWYgKHVzZVNldC5jb250YWlucyhDbGFzc1VzZS5JTVBMRU1FTlRFRCkpIHsKICAgICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJJbXBsZW1lbnRlZENsYXNzKGNscykpOwogICAgfQogIH0KCiAgLy8vIENhbGxiYWNrIGZvciBhcHBseWluZyB0aGUgdXNlIG9mIGEgW21lbWJlcl0uCiAgdm9pZCBfYXBwbHlNZW1iZXJVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCkgewogICAgaWYgKHVzZVNldC5jb250YWlucyhNZW1iZXJVc2UuTk9STUFMKSkgewogICAgICBfYWRkVG9Xb3JrTGlzdChtZW1iZXIpOwogICAgfQogICAgaWYgKHVzZVNldC5jb250YWlucyhNZW1iZXJVc2UuQ0xPU1VSSVpFX0lOU1RBTkNFKSkgewogICAgICBfcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKG1lbWJlcik7CiAgICB9CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKE1lbWJlclVzZS5DTE9TVVJJWkVfU1RBVElDKSkgewogICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlckdldE9mU3RhdGljRnVuY3Rpb24oKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygnY29kZWdlbi5keW5hbWljVXNlJywgKCkgewogICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShkeW5hbWljVXNlLCBfYXBwbHlNZW1iZXJVc2UpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NTdGF0aWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygnY29kZWdlbi5zdGF0aWNVc2UnLCAoKSB7CiAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2Uoc3RhdGljVXNlLCBfYXBwbHlNZW1iZXJVc2UpOwogICAgICBzd2l0Y2ggKHN0YXRpY1VzZS5raW5kKSB7CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgICAgcHJvY2Vzc1R5cGVVc2UobWVtYmVyLCBuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKHN0YXRpY1VzZS50eXBlKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5MSU5JTkc6CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgdGhpcyBiZSB0cmFja2VkIHdpdGggX01lbWJlclVzYWdlID8KICAgICAgICAgIGxpc3RlbmVyLnJlZ2lzdGVyVXNlZEVsZW1lbnQoc3RhdGljVXNlLmVsZW1lbnQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc1R5cGVVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB0eXBlVXNlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZVVzZS50eXBlOwogICAgc3dpdGNoICh0eXBlVXNlLmtpbmQpIHsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICAgIF9yZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUodHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT046CiAgICAgICAgX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZSh0eXBlLCBuYXRpdmVVc2FnZTogdHJ1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSVNfQ0hFQ0s6CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ0FUQ0hfVFlQRToKICAgICAgICBfcmVnaXN0ZXJJc0NoZWNrKHR5cGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLkFTX0NBU1Q6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLklNUExJQ0lUX0NBU1Q6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5KG1lbWJlcikuaXNFbWl0dGVkKSB7CiAgICAgICAgICBfcmVnaXN0ZXJJc0NoZWNrKHR5cGUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5QQVJBTUVURVJfQ0hFQ0s6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfTElURVJBTDoKICAgICAgICBpZiAodHlwZSBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyVHlwZVZhcmlhYmxlVHlwZUxpdGVyYWwodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlJUSV9WQUxVRToKICAgICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyQ29uc3RUeXBlTGl0ZXJhbCh0eXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UOgogICAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJUeXBlQXJndW1lbnQodHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ09OU1RfSU5TVEFOVElBVElPTjoKICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiVW5leHBlY3RlZCB0eXBlIHVzZTogJHR5cGVVc2UuIik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFNRURfVFlQRV9WQVJJQUJMRV9ORVdfUlRJOgogICAgICAgIGFzc2VydCh0eXBlIGlzIFR5cGVWYXJpYWJsZVR5cGUpOwogICAgICAgIF9yZWdpc3Rlck5hbWVkVHlwZVZhcmlhYmxlTmV3UnRpKHR5cGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcm9jZXNzQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpIHsKICAgIHRhc2subWVhc3VyZVN1YnRhc2soJ2NvZGVnZW4uY29uc3RhbnRVc2UnLCAoKSB7CiAgICAgIGlmIChfd29ybGRCdWlsZGVyLnJlZ2lzdGVyQ29uc3RhbnRVc2UoY29uc3RhbnRVc2UpKSB7CiAgICAgICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJVc2VkQ29uc3RhbnQoY29uc3RhbnRVc2UudmFsdWUpKTsKICAgICAgICBfcmVjZW50Q29uc3RhbnRzID0gdHJ1ZTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIF9yZWdpc3RlcklzQ2hlY2soRGFydFR5cGUgdHlwZSkgewogICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgfQoKICB2b2lkIF9yZWdpc3Rlck5hbWVkVHlwZVZhcmlhYmxlTmV3UnRpKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgewogICAgX3dvcmxkQnVpbGRlci5yZWdpc3Rlck5hbWVkVHlwZVZhcmlhYmxlTmV3UnRpKHR5cGUpOwogIH0KCiAgdm9pZCBfcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpOwogICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKGVsZW1lbnQpKTsKICB9CgogIHZvaWQgX2ZvckVhY2godm9pZCBmKFdvcmtJdGVtIHdvcmspKSB7CiAgICBkbyB7CiAgICAgIHdoaWxlIChfcXVldWUuaXNOb3RFbXB0eSkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpbmQgYW4gb3B0aW1hbCBwcm9jZXNzIG9yZGVyLgogICAgICAgIFdvcmtJdGVtIHdvcmsgPSBfcXVldWUucmVtb3ZlTGFzdCgpOwogICAgICAgIGlmICghX3Byb2Nlc3NlZEVudGl0aWVzLmNvbnRhaW5zKHdvcmsuZWxlbWVudCkpIHsKICAgICAgICAgIGYod29yayk7CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZWdpc3RlciB0aGUgcHJvY2Vzc2VkIGVsZW1lbnQgaGVyZS4gVGhpcwogICAgICAgICAgLy8gaXMgY3VycmVudGx5IGEgc2lkZS1lZmZlY3Qgb2YgY2FsbGluZyBgd29yay5ydW5gLgogICAgICAgICAgX3Byb2Nlc3NlZEVudGl0aWVzLmFkZCh3b3JrLmVsZW1lbnQpOwogICAgICAgIH0KICAgICAgfQogICAgICBMaXN0PENsYXNzRW50aXR5PiByZWNlbnRzID0gX3JlY2VudENsYXNzZXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIF9yZWNlbnRDbGFzc2VzLmNsZWFyKCk7CiAgICAgIF9yZWNlbnRDb25zdGFudHMgPSBmYWxzZTsKICAgICAgaWYgKCFfb25RdWV1ZUVtcHR5KHJlY2VudHMpKSBfcmVjZW50Q2xhc3Nlcy5hZGRBbGwocmVjZW50cyk7CiAgICB9IHdoaWxlICgKICAgICAgICBfcXVldWUuaXNOb3RFbXB0eSB8fCBfcmVjZW50Q2xhc3Nlcy5pc05vdEVtcHR5IHx8IF9yZWNlbnRDb25zdGFudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihXb3JrSXRlbSB3b3JrKSkgewogICAgX2ZvckVhY2goZik7CiAgICBpZiAob25FbXB0eUZvclRlc3RpbmcgIT0gbnVsbCkgewogICAgICBvbkVtcHR5Rm9yVGVzdGluZygpOwogICAgICBfZm9yRWFjaChmKTsKICAgIH0KICB9CgogIC8vLyBbX29uUXVldWVFbXB0eV0gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBxdWV1ZSBpcyBkcmFpbmVkLiBbcmVjZW50Q2xhc3Nlc10KICAvLy8gY29udGFpbnMgdGhlIHNldCBvZiBhbGwgY2xhc3NlcyBzZWVuIGZvciB0aGUgZmlyc3QgdGltZSBzaW5jZQogIC8vLyBbX29uUXVldWVFbXB0eV0gd2FzIGNhbGxlZCBsYXN0LiBBIHJldHVybiB2YWx1ZSBvZiBbdHJ1ZV0gaW5kaWNhdGVzIHRoYXQKICAvLy8gdGhlIFtyZWNlbnRDbGFzc2VzXSBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFuZCBtYXkgYmUgY2xlYXJlZC4gSWYgW2ZhbHNlXSBpcwogIC8vLyByZXR1cm5lZCwgW19vblF1ZXVlRW1wdHldIHdpbGwgYmUgY2FsbGVkIG9uY2UgdGhlIHF1ZXVlIGlzIGVtcHR5IGFnYWluIChvcgogIC8vLyBzdGlsbCBlbXB0eSkgYW5kIFtyZWNlbnRDbGFzc2VzXSB3aWxsIGJlIGEgc3VwZXJzZXQgb2YgdGhlIGN1cnJlbnQgdmFsdWUuCiAgYm9vbCBfb25RdWV1ZUVtcHR5KEl0ZXJhYmxlPENsYXNzRW50aXR5PiByZWNlbnRDbGFzc2VzKSB7CiAgICByZXR1cm4gbGlzdGVuZXIub25RdWV1ZUVtcHR5KHRoaXMsIHJlY2VudENsYXNzZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSkgewogICAgbG9nKCdDb21waWxlZCAke19wcm9jZXNzZWRFbnRpdGllcy5sZW5ndGh9IG1ldGhvZHMuJyk7CiAgICBsaXN0ZW5lci5sb2dTdW1tYXJ5KGxvZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRW5xdWV1ZXIoJG5hbWUpJzsKCiAgQG92ZXJyaWRlCiAgSW1wYWN0VXNlQ2FzZSBnZXQgaW1wYWN0VXNlID0+IElNUEFDVF9VU0U7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IHByb2Nlc3NlZEVudGl0aWVzID0+IF9wcm9jZXNzZWRFbnRpdGllczsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBwcm9jZXNzZWRDbGFzc2VzID0+CiAgICAgIF93b3JsZEJ1aWxkZXIuaW5zdGFudGlhdGVkQ2xhc3NlczsKfQqBPgBOTjwBHAElATEsGTokIRopMSgeCRUUExcRFSc5HygBNS0VPyEvKgEMHgwbDCMqASUBOAFESAFRPyUBKi4BSCwpOgQBDDkBDCsBDB0dQwYEAUQMJwFRHi01AUEiARlOBgE3GgQBDEIlID8EATUjMEVJCAQBDC4vOQQBDCUrOx8ZUAgoBAEwQzIfP0c/FzwGMTsGBAEzSS0eBjkpBjc7BgQBDDIzRQgEAQxEMkMgLzVNESVNOxEREQgIBAEMPiIcJikPLTwPISMgDyBNIgoPJlEiCg8oSiIKDyUoPwoPIjYPJjIPLE8PNCowBgQBDDU0PEchCAgEASkpBAFBOQQBOyY9BAEpCSI/LToTTD8wCghKHiBDDk0EAQwoESUbEwYEAU9ET1BRUDw3BAEMLjseBAEMKgEMLQEMRgEMMCkCAS1wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2VucXVldWVyLmRhcnQ/c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0oTAvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuY29kZV9lbWl0dGVyX3Rhc2s7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCcgc2hvdyBDb21waWxlclRhc2s7CmltcG9ydCAnLi4vY29tcGlsZXIuZGFydCcgc2hvdyBDb21waWxlcjsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0JyBzaG93IENvZGVnZW5JbnB1dHM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBOYW1lcjsKaW1wb3J0ICcuLi9qc19tb2RlbC9qc19zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdwcm9ncmFtX2J1aWxkZXIvcHJvZ3JhbV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3N0YXJ0dXBfZW1pdHRlci9lbWl0dGVyLmRhcnQnIGFzIHN0YXJ0dXBfanNfZW1pdHRlcjsKCmltcG9ydCAnbWV0YWRhdGFfY29sbGVjdG9yLmRhcnQnIHNob3cgTWV0YWRhdGFDb2xsZWN0b3I7CmltcG9ydCAnbW9kZWwuZGFydCc7CmltcG9ydCAnbmF0aXZlX2VtaXR0ZXIuZGFydCcgc2hvdyBOYXRpdmVFbWl0dGVyOwppbXBvcnQgJ3R5cGVfdGVzdF9yZWdpc3RyeS5kYXJ0JyBzaG93IFR5cGVUZXN0UmVnaXN0cnk7CgovLy8gR2VuZXJhdGVzIHRoZSBjb2RlIGZvciBhbGwgdXNlZCBjbGFzc2VzIGluIHRoZSBwcm9ncmFtLiBTdGF0aWMgZmllbGRzIChldmVuCi8vLyBpbiBjbGFzc2VzKSBhcmUgaWdub3JlZCwgc2luY2UgdGhleSBjYW4gYmUgdHJlYXRlZCBhcyBub24tY2xhc3MgZWxlbWVudHMuCi8vLwovLy8gVGhlIGNvZGUgZm9yIHRoZSBjb250YWluaW5nICh1c2VkKSBtZXRob2RzIG11c3QgZXhpc3QgaW4gdGhlIGB1bml2ZXJzZWAuCmNsYXNzIENvZGVFbWl0dGVyVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgVHlwZVRlc3RSZWdpc3RyeSB0eXBlVGVzdFJlZ2lzdHJ5OwogIE5hdGl2ZUVtaXR0ZXIgX25hdGl2ZUVtaXR0ZXI7CiAgTWV0YWRhdGFDb2xsZWN0b3IgbWV0YWRhdGFDb2xsZWN0b3I7CiAgRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBDb21waWxlciBfY29tcGlsZXI7CiAgZmluYWwgYm9vbCBfZ2VuZXJhdGVTb3VyY2VNYXA7CgogIEpzQmFja2VuZFN0cmF0ZWd5IGdldCBfYmFja2VuZFN0cmF0ZWd5ID0+IF9jb21waWxlci5iYWNrZW5kU3RyYXRlZ3k7CgogIENvbXBpbGVyT3B0aW9ucyBnZXQgb3B0aW9ucyA9PiBfY29tcGlsZXIub3B0aW9uczsKCiAgQGRlcHJlY2F0ZWQKICAvLyBUaGlzIGZpZWxkIHNob3VsZCBiZSByZW1vdmVkLiBJdCdzIGN1cnJlbnRseSBvbmx5IG5lZWRlZCBmb3IgZHVtcC1pbmZvIGFuZAogIC8vIHRlc3RzLgogIC8vIFRoZSBmaWVsZCBpcyBzZXQgYWZ0ZXIgdGhlIHByb2dyYW0gaGFzIGJlZW4gZW1pdHRlZC4KICAvLy8gQ29udGFpbnMgYSBsaXN0IG9mIGFsbCBjbGFzc2VzIHRoYXQgYXJlIGVtaXR0ZWQuCiAgU2V0PENsYXNzRW50aXR5PiBuZWVkZWRDbGFzc2VzOwoKICBDb2RlRW1pdHRlclRhc2sodGhpcy5fY29tcGlsZXIsIHRoaXMuX2dlbmVyYXRlU291cmNlTWFwKQogICAgICA6IHN1cGVyKF9jb21waWxlci5tZWFzdXJlcik7CgogIE5hdGl2ZUVtaXR0ZXIgZ2V0IG5hdGl2ZUVtaXR0ZXIgewogICAgYXNzZXJ0KAogICAgICAgIF9uYXRpdmVFbWl0dGVyICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgIk5hdGl2ZUVtaXR0ZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LiIpKTsKICAgIHJldHVybiBfbmF0aXZlRW1pdHRlcjsKICB9CgogIEVtaXR0ZXIgZ2V0IGVtaXR0ZXIgewogICAgYXNzZXJ0KF9lbWl0dGVyICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAiRW1pdHRlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuIikpOwogICAgcmV0dXJuIF9lbWl0dGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+ICdDb2RlIGVtaXR0ZXInOwoKICB2b2lkIF9maW5hbGl6ZVJ0aShDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQpIHsKICAgIC8vIENvbXB1dGUgdGhlIHJlcXVpcmVkIHR5cGUgY2hlY2tzIHRvIGtub3cgd2hpY2ggY2xhc3NlcyBuZWVkIGEKICAgIC8vICdpcyQnIG1ldGhvZC4KICAgIHR5cGVUZXN0UmVnaXN0cnkuY29tcHV0ZVJlcXVpcmVkVHlwZUNoZWNrcygKICAgICAgICBfYmFja2VuZFN0cmF0ZWd5LnJ0aUNoZWNrc0J1aWxkZXIsIGNvZGVnZW5Xb3JsZCk7CiAgICAvLyBDb21wdXRlIHRoZSBjbGFzc2VzIG5lZWRlZCBieSBSVEkuCiAgICB0eXBlVGVzdFJlZ2lzdHJ5LmNvbXB1dGVSdGlOZWVkZWRDbGFzc2VzKAogICAgICAgIGNvZGVnZW4ucnRpU3Vic3RpdHV0aW9ucywgX2JhY2tlbmRTdHJhdGVneS5nZW5lcmF0ZWRDb2RlLmtleXMpOwogIH0KCiAgLy8vIENyZWF0ZXMgdGhlIFtFbWl0dGVyXSBmb3IgdGhpcyB0YXNrLgogIHZvaWQgY3JlYXRlRW1pdHRlcigKICAgICAgTmFtZXIgbmFtZXIsIENvZGVnZW5JbnB1dHMgY29kZWdlbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBtZWFzdXJlKCgpIHsKICAgICAgX25hdGl2ZUVtaXR0ZXIgPSBuZXcgTmF0aXZlRW1pdHRlcigKICAgICAgICAgIHRoaXMsIGNsb3NlZFdvcmxkLCBfYmFja2VuZFN0cmF0ZWd5Lm5hdGl2ZUNvZGVnZW5FbnF1ZXVlcik7CiAgICAgIF9lbWl0dGVyID0gbmV3IHN0YXJ0dXBfanNfZW1pdHRlci5FbWl0dGVySW1wbCgKICAgICAgICAgIF9jb21waWxlci5vcHRpb25zLAogICAgICAgICAgX2NvbXBpbGVyLnJlcG9ydGVyLAogICAgICAgICAgX2NvbXBpbGVyLm91dHB1dFByb3ZpZGVyLAogICAgICAgICAgX2NvbXBpbGVyLmR1bXBJbmZvVGFzaywKICAgICAgICAgIG5hbWVyLAogICAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgICBjb2RlZ2VuLnJ0aUVuY29kZXIsCiAgICAgICAgICBjb2RlZ2VuLnJ0aVJlY2lwZUVuY29kZXIsCiAgICAgICAgICBfYmFja2VuZFN0cmF0ZWd5LnNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgICAgICB0aGlzLAogICAgICAgICAgX2dlbmVyYXRlU291cmNlTWFwKTsKICAgICAgbWV0YWRhdGFDb2xsZWN0b3IgPSBuZXcgTWV0YWRhdGFDb2xsZWN0b3IoCiAgICAgICAgICBfY29tcGlsZXIub3B0aW9ucywKICAgICAgICAgIF9jb21waWxlci5yZXBvcnRlciwKICAgICAgICAgIF9lbWl0dGVyLAogICAgICAgICAgY29kZWdlbi5ydGlFbmNvZGVyLAogICAgICAgICAgY29kZWdlbi5ydGlSZWNpcGVFbmNvZGVyLAogICAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgdHlwZVRlc3RSZWdpc3RyeSA9IG5ldyBUeXBlVGVzdFJlZ2lzdHJ5KAogICAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICB9KTsKICB9CgogIGludCBhc3NlbWJsZVByb2dyYW0oCiAgICAgIE5hbWVyIG5hbWVyLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEluZmVycmVkRGF0YSBpbmZlcnJlZERhdGEsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbklucHV0cywKICAgICAgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCkgewogICAgcmV0dXJuIG1lYXN1cmUoKCkgewogICAgICBtZWFzdXJlU3VidGFzaygnZmluYWxpemUgcnRpJywgKCkgewogICAgICAgIF9maW5hbGl6ZVJ0aShjb2RlZ2VuSW5wdXRzLCBjb2RlZ2VuV29ybGQpOwogICAgICB9KTsKICAgICAgUHJvZ3JhbUJ1aWxkZXIgcHJvZ3JhbUJ1aWxkZXIgPSBuZXcgUHJvZ3JhbUJ1aWxkZXIoCiAgICAgICAgICBfY29tcGlsZXIub3B0aW9ucywKICAgICAgICAgIF9jb21waWxlci5yZXBvcnRlciwKICAgICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEsCiAgICAgICAgICBjb2RlZ2VuV29ybGQsCiAgICAgICAgICBfYmFja2VuZFN0cmF0ZWd5Lm5hdGl2ZUNvZGVnZW5FbnF1ZXVlciwKICAgICAgICAgIGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZSwKICAgICAgICAgIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEsCiAgICAgICAgICBjbG9zZWRXb3JsZC5ydGlOZWVkLAogICAgICAgICAgY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhLAogICAgICAgICAgdHlwZVRlc3RSZWdpc3RyeS5ydGlDaGVja3MsCiAgICAgICAgICBjb2RlZ2VuSW5wdXRzLnJ0aUVuY29kZXIsCiAgICAgICAgICBjb2RlZ2VuSW5wdXRzLnJ0aVJlY2lwZUVuY29kZXIsCiAgICAgICAgICBjb2RlZ2VuV29ybGQub25lU2hvdEludGVyY2VwdG9yRGF0YSwKICAgICAgICAgIF9iYWNrZW5kU3RyYXRlZ3kuY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMsCiAgICAgICAgICBfYmFja2VuZFN0cmF0ZWd5LmdlbmVyYXRlZENvZGUsCiAgICAgICAgICBuYW1lciwKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICAgIGNsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMsCiAgICAgICAgICBpbmZlcnJlZERhdGEsCiAgICAgICAgICBfYmFja2VuZFN0cmF0ZWd5LnNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgICAgICBjbG9zZWRXb3JsZC5zb3J0ZXIsCiAgICAgICAgICB0eXBlVGVzdFJlZ2lzdHJ5LnJ0aU5lZWRlZENsYXNzZXMsCiAgICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQubWFpbkZ1bmN0aW9uKTsKICAgICAgaW50IHNpemUgPSBlbWl0dGVyLmVtaXRQcm9ncmFtKHByb2dyYW1CdWlsZGVyLCBjb2RlZ2VuV29ybGQpOwogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IG5lZWQgdGhlIGBuZWVkZWRDbGFzc2VzYCBhbnltb3JlLgogICAgICBuZWVkZWRDbGFzc2VzID0gcHJvZ3JhbUJ1aWxkZXIuY29sbGVjdG9yLm5lZWRlZENsYXNzZXM7CiAgICAgIHJldHVybiBzaXplOwogICAgfSk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciB0aGUgc3Vic2V0IG9mIHRoZSBbRW1pdHRlcl0gdGhhdCBjYW4gYmUgdXNlZCBkdXJpbmcgbW9kdWxhcgovLy8gY29kZSBnZW5lcmF0aW9uLgovLy8KLy8vIE5vdGUgdGhhdCB0aGUgZW1pc3Npb24gcGhhc2UgaXMgbm90IGl0c2VsZiBtb2R1bGFyIGJ1dCBwZXJmb3JtZWQgb24KLy8vIHRoZSBjbG9zZWQgd29ybGQgY29tcHV0ZWQgYnkgdGhlIGNvZGVnZW4gZW5xdWV1ZXIuCmFic3RyYWN0IGNsYXNzIE1vZHVsYXJFbWl0dGVyIHsKICAvLy8gUmV0dXJucyB0aGUgSlMgcHJvdG90eXBlIG9mIHRoZSBnaXZlbiBjbGFzcyBbZV0uCiAganNBc3QuRXhwcmVzc2lvbiBwcm90b3R5cGVBY2Nlc3MoQ2xhc3NFbnRpdHkgZSwge2Jvb2wgaGFzQmVlbkluc3RhbnRpYXRlZH0pOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgZnVuY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBmdW5jdGlvbi4KICAvLy8KICAvLy8gVGhlIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCBhbmQgY2FuIG5vdCBiZSB1c2VkIGFzIGNsb3N1cmUuCiAganNBc3QuRXhwcmVzc2lvbiBzdGF0aWNGdW5jdGlvbkFjY2VzcyhGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAganNBc3QuRXhwcmVzc2lvbiBzdGF0aWNGaWVsZEFjY2VzcyhGaWVsZEVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIGZ1bmN0aW9uIHRoYXQgbXVzdCBiZSBpbnZva2VkIHRvIGdldCB0aGUgdmFsdWUgb2YgdGhlCiAgLy8vIGxhemlseSBpbml0aWFsaXplZCBzdGF0aWMuCiAganNBc3QuRXhwcmVzc2lvbiBpc29sYXRlTGF6eUluaXRpYWxpemVyQWNjZXNzKGNvdmFyaWFudCBGaWVsZEVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIGNsb3N1cmUgZXhwcmVzc2lvbiBvZiBhIHN0YXRpYyBmdW5jdGlvbi4KICBqc0FzdC5FeHByZXNzaW9uIHN0YXRpY0Nsb3N1cmVBY2Nlc3MoY292YXJpYW50IEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgY29uc3RydWN0b3Igb2YgdGhlIGdpdmVuIGVsZW1lbnQuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBleHByZXNzaW9uIG11c3Qgb25seSBiZSB1c2VkIGluIGEgSlMgYG5ld2AgZXhwcmVzc2lvbi4KICBqc0FzdC5FeHByZXNzaW9uIGNvbnN0cnVjdG9yQWNjZXNzKENsYXNzRW50aXR5IGUpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIHR5cGUgW2VdLgogIGpzQXN0LkV4cHJlc3Npb24gdHlwZUFjY2VzcyhFbnRpdHkgZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBuYW1lIHJlcHJlc2VudGluZyB0aGUgdHlwZSBbZV0uCiAganNBc3QuTmFtZSB0eXBlQWNjZXNzTmV3UnRpKEVudGl0eSBlKTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIG5hbWUgcmVwcmVzZW50aW5nIHRoZSB0eXBlIHZhcmlhYmxlIFtlXS4KICBqc0FzdC5OYW1lIHR5cGVWYXJpYWJsZUFjY2Vzc05ld1J0aShUeXBlVmFyaWFibGVFbnRpdHkgZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBjb2RlIGZvciBhY2Nlc3NpbmcgdGhlIGVtYmVkZGVkIFtnbG9iYWxdLgogIGpzQXN0LkV4cHJlc3Npb24gZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhTdHJpbmcgZ2xvYmFsKTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIGNvZGUgZm9yIGFjY2Vzc2luZyB0aGUgZ2l2ZW4gW2NvbnN0YW50XS4KICBqc0FzdC5FeHByZXNzaW9uIGNvbnN0YW50UmVmZXJlbmNlKENvbnN0YW50VmFsdWUgY29uc3RhbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgY29kZSBmb3IgYWNjZXNzaW5nIHRoZSBnbG9iYWwgcHJvcGVydHkgW2dsb2JhbF0uCiAgU3RyaW5nIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3NTdHJpbmcoU3RyaW5nIGdsb2JhbCk7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHRoZSBlbWl0dGVyIHRoYXQgaXMgdXNlZCBkdXJpbmcgdGhlIGVtaXNzaW9uIHBoYXNlIG9uIHRoZQovLy8gY2xvc2VkIHdvcmxkIGNvbXB1dGVkIGJ5IHRoZSBjb2RlZ2VuIGVucXVldWVyLgovLy8KLy8vIFRoZXNlIG1ldGhvZHMgYXJlIF9ub3RfIGF2YWlsYWJsZSBkdXJpbmcgbW9kdWxhciBjb2RlIGdlbmVyYXRpb24uCmFic3RyYWN0IGNsYXNzIEVtaXR0ZXIgaW1wbGVtZW50cyBNb2R1bGFyRW1pdHRlciB7CiAgUHJvZ3JhbSBnZXQgcHJvZ3JhbUZvclRlc3Rpbmc7CgogIC8vLyBVc2VzIHRoZSBbcHJvZ3JhbUJ1aWxkZXJdIHRvIGdlbmVyYXRlIGEgbW9kZWwgb2YgdGhlIHByb2dyYW0sIGVtaXRzCiAgLy8vIHRoZSBwcm9ncmFtLCBhbmQgcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIG91dHB1dC4KICBpbnQgZW1pdFByb2dyYW0oUHJvZ3JhbUJ1aWxkZXIgcHJvZ3JhbUJ1aWxkZXIsIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgcHJvdG90eXBlIG9mIHRoZSBnaXZlbiBpbnRlcmNlcHRvciBjbGFzcyBbZV0uCiAganNBc3QuRXhwcmVzc2lvbiBpbnRlcmNlcHRvclByb3RvdHlwZUFjY2VzcyhDbGFzc0VudGl0eSBlKTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIGNvbnN0cnVjdG9yIG9mIHRoZSBnaXZlbiBpbnRlcmNlcHRvciBjbGFzcyBbZV0uCiAganNBc3QuRXhwcmVzc2lvbiBpbnRlcmNlcHRvckNsYXNzQWNjZXNzKENsYXNzRW50aXR5IGUpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgJ251bGwnCiAganNBc3QuRXhwcmVzc2lvbiBnZW5lcmF0ZUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCk7CgogIGludCBjb21wYXJlQ29uc3RhbnRzKENvbnN0YW50VmFsdWUgYSwgQ29uc3RhbnRWYWx1ZSBiKTsKICBib29sIGlzQ29uc3RhbnRJbmxpbmVkT3JBbHJlYWR5RW1pdHRlZChDb25zdGFudFZhbHVlIGNvbnN0YW50KTsKCiAgLy8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvZGUgZ2VuZXJhdGVkIGZvciBhIGdpdmVuIG91dHB1dCBbdW5pdF0uCiAgaW50IGdlbmVyYXRlZFNpemUoT3V0cHV0VW5pdCB1bml0KTsKfQqA5wBOTjwBLgEZMSkjMCQhOCsuJxoxKi89ATkVMTgBUE4ETS0lICcUHCEBRwE0AQ5QDDo3IgE7IwEkDCASUBsEARgdTxUEAQwlAUhFFTA6Ki5IBAErFkYRKkY1HR4kIhEXHiQ2EB8xHR4UHiQrLz4IBAEXEyAhIyMYKjMKOh0eKiYmGDIkIh8nJiQqLzoqERAXJRg2Hi04REg+EwgEAgFOFQRINyA3TwE/BkNBATsBSyFQATtKATcGSjUBOykBNSkBPj0BP0ABPj4BRjwCAUwzBEYzIQFKQU0BQz4BRToBTDYBOkIBSCYCATZwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2NvZGVfZW1pdHRlcl90YXNrLmRhcnQ+c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnTAAI27Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X2Zyb21fYmluYXJ5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfdG9fYmluYXJ5LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnOwppbXBvcnQgJy4uL2RpYWdub3N0aWNzL3NvdXJjZV9zcGFuLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2luZGV4ZWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2lyL2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZV9iYXNlLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzX21vZGVsL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvbG9jYWxzLmRhcnQnOwoKcGFydCAnYWJzdHJhY3Rfc2luay5kYXJ0JzsKcGFydCAnYWJzdHJhY3Rfc291cmNlLmRhcnQnOwpwYXJ0ICdiaW5hcnlfc2luay5kYXJ0JzsKcGFydCAnYmluYXJ5X3NvdXJjZS5kYXJ0JzsKcGFydCAnaGVscGVycy5kYXJ0JzsKcGFydCAnbWVtYmVyX2RhdGEuZGFydCc7CnBhcnQgJ21peGlucy5kYXJ0JzsKcGFydCAnbm9kZV9pbmRleGVyLmRhcnQnOwpwYXJ0ICdvYmplY3Rfc2luay5kYXJ0JzsKcGFydCAnb2JqZWN0X3NvdXJjZS5kYXJ0JzsKCi8vLyBJbnRlcmZhY2UgZm9yIHNlcmlhbGl6YXRpb24uCmFic3RyYWN0IGNsYXNzIERhdGFTaW5rIHsKICAvLy8gVGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoZSB1bml0cyBpcyBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZSBmb3IgdGhpcyBkYXRhIHNpbmsuCiAgaW50IGdldCBsZW5ndGg7CgogIC8vLyBGbHVzaGVzIGFueSBwZW5kaW5nIGRhdGEgYW5kIGNsb3NlcyB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhlIGRhdGEgc2luayBjYW4gbm8gbG9uZ2VyIGJlIHdyaXR0ZW4gdG8gYWZ0ZXIgY2xvc2luZy4KICB2b2lkIGNsb3NlKCk7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCB0aGUgc2VjdGlvbiBbdGFnXSBzdGFydHMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdnaW5nIHRvIHZlcmlmeSB0aGF0IHNlY3Rpb25zIGFyZSBjb3JyZWN0bHkgYWxpZ25lZAogIC8vLyBiZXR3ZWVuIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi4KICB2b2lkIGJlZ2luKFN0cmluZyB0YWcpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgdGhlIHNlY3Rpb24gW3RhZ10gZW5kcy4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgdG8gdmVyaWZ5IHRoYXQgc2VjdGlvbnMgYXJlIGNvcnJlY3RseSBhbGlnbmVkCiAgLy8vIGJldHdlZW4gc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgogIHZvaWQgZW5kKFN0cmluZyB0YWcpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFt2YWx1ZV0gaGFzIG5vdCB5ZXQKICAvLy8gYmVlbiBzZXJpYWxpemVkLCBbZl0gaXMgY2FsbGVkIHRvIHNlcmlhbGl6ZSB0aGUgdmFsdWUgaXRzZWxmLgogIHZvaWQgd3JpdGVDYWNoZWQ8RT4oRSB2YWx1ZSwgdm9pZCBmKEUgdmFsdWUpKTsKCiAgLy8vIFdyaXRlcyB0aGUgcG90ZW50aWFsbHkgYG51bGxgIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFt2YWx1ZV0gaXMKICAvLy8gbm9uLW51bGwgW2ZdIGlzIGNhbGxlZCB0byB3cml0ZSB0aGUgbm9uLW51bGwgdmFsdWUgdG8gdGhlIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFZhbHVlT3JOdWxsXS4KICB2b2lkIHdyaXRlVmFsdWVPck51bGw8RT4oRSB2YWx1ZSwgdm9pZCBmKEUgdmFsdWUpKTsKCiAgLy8vIFdyaXRlcyB0aGUgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsgY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0bwogIC8vLyB0aGUgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTGlzdF0uCiAgdm9pZCB3cml0ZUxpc3Q8RT4oSXRlcmFibGU8RT4gdmFsdWVzLCB2b2lkIGYoRSB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgYm9vbGVhbiBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVCb29sKGJvb2wgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBub24tbmVnYXRpdmUgMzAgYml0IGludGVnZXIgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlSW50KGludCB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIHBvdGVudGlhbGx5IGBudWxsYCBub24tbmVnYXRpdmUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZEludE9yTnVsbF0uCiAgdm9pZCB3cml0ZUludE9yTnVsbChpbnQgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBzdHJpbmcgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlU3RyaW5nKFN0cmluZyB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIHBvdGVudGlhbGx5IGBudWxsYCBzdHJpbmcgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFN0cmluZ09yTnVsbF0uCiAgdm9pZCB3cml0ZVN0cmluZ09yTnVsbChTdHJpbmcgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBzdHJpbmcgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwKICAvLy8gW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRTdHJpbmdzXS4KICB2b2lkIHdyaXRlU3RyaW5ncyhJdGVyYWJsZTxTdHJpbmc+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIHN0cmluZyB0byBbVl0gdmFsdWVzIHRvIHRoaXMgZGF0YSBzaW5rLCBjYWxsaW5nIFtmXQogIC8vLyB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW21hcF0gaXMKICAvLy8gYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRTdHJpbmdNYXBdLgogIHZvaWQgd3JpdGVTdHJpbmdNYXA8Vj4oTWFwPFN0cmluZywgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgZW51bSB2YWx1ZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENoYW5nZSB0aGUgc2lnbmF0dXJlIHRvCiAgLy8gYHZvaWQgd3JpdGVFbnVtPEUgZXh0ZW5kcyBFbnVtPEU+PihFIHZhbHVlKTtgIHdoZW4gYW4gaW50ZXJmYWNlIGZvciBlbnVtcwogIC8vIGlzIGFkZGVkIHRvIHRoZSBsYW5ndWFnZS4KICB2b2lkIHdyaXRlRW51bShkeW5hbWljIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgVVJJIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVVyaShVcmkgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBrZXJuZWwgbGlicmFyeSBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUxpYnJhcnlOb2RlKGlyLkxpYnJhcnkgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBrZXJuZWwgY2xhc3Mgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVDbGFzc05vZGUoaXIuQ2xhc3MgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBrZXJuZWwgdHlwZWRlZiBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVR5cGVkZWZOb2RlKGlyLlR5cGVkZWYgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBrZXJuZWwgbWVtYmVyIG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlTWVtYmVyTm9kZShpci5NZW1iZXIgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHJlZmVyZW5jZXMgdG8gdGhlIGtlcm5lbCBtZW1iZXIgbm9kZSBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZE1lbWJlck5vZGVzXS4KICB2b2lkIHdyaXRlTWVtYmVyTm9kZXMoSXRlcmFibGU8aXIuTWVtYmVyPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSByZWZlcmVuY2VzIHRvIGtlcm5lbCBtZW1iZXIgbm9kZXMgdG8gW1ZdIHZhbHVlcyB0bwogIC8vLyB0aGlzIGRhdGEgc2luaywgY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZgogIC8vLyBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFttYXBdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTWVtYmVyTm9kZU1hcF0uCiAgdm9pZCB3cml0ZU1lbWJlck5vZGVNYXA8Vj4oTWFwPGlyLk1lbWJlciwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyBhIGtlcm5lbCBuYW1lIG5vZGUgdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZU5hbWUoaXIuTmFtZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSBrZXJuZWwgbGlicmFyeSBkZXBlbmRlbmN5IG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlKGlyLkxpYnJhcnlEZXBlbmRlbmN5IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHBvdGVudGlhbGx5IGBudWxsYCBrZXJuZWwgbGlicmFyeSBkZXBlbmRlbmN5IG5vZGUgW3ZhbHVlXSB0bwogIC8vLyB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKGlyLkxpYnJhcnlEZXBlbmRlbmN5IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUga2VybmVsIHRyZWUgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVUcmVlTm9kZShpci5UcmVlTm9kZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIHBvdGVudGlhbGx5IGBudWxsYCBrZXJuZWwgdHJlZSBub2RlIFt2YWx1ZV0KICAvLy8gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRUcmVlTm9kZU9yTnVsbF0uCiAgdm9pZCB3cml0ZVRyZWVOb2RlT3JOdWxsKGlyLlRyZWVOb2RlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyByZWZlcmVuY2VzIHRvIHRoZSBrZXJuZWwgdHJlZSBub2RlIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLyBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVHJlZU5vZGVzXS4KICB2b2lkIHdyaXRlVHJlZU5vZGVzKEl0ZXJhYmxlPGlyLlRyZWVOb2RlPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSByZWZlcmVuY2VzIHRvIGtlcm5lbCB0cmVlIG5vZGVzIHRvIFtWXSB2YWx1ZXMgdG8KICAvLy8gdGhpcyBkYXRhIHNpbmssIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYKICAvLy8gW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbbWFwXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFRyZWVOb2RlTWFwXS4KICB2b2lkIHdyaXRlVHJlZU5vZGVNYXA8Vj4oTWFwPGlyLlRyZWVOb2RlLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBrZXJuZWwgdHJlZSBub2RlIFt2YWx1ZV0gaW4gdGhlIGtub3duIFtjb250ZXh0XQogIC8vLyB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlVHJlZU5vZGVJbkNvbnRleHQoaXIuVHJlZU5vZGUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAga2VybmVsIHRyZWUgbm9kZSBbdmFsdWVdIGluCiAgLy8vIHRoZSBrbm93biBbY29udGV4dF0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRUcmVlTm9kZU9yTnVsbEluQ29udGV4dF0uCiAgdm9pZCB3cml0ZVRyZWVOb2RlT3JOdWxsSW5Db250ZXh0KGlyLlRyZWVOb2RlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyByZWZlcmVuY2VzIHRvIHRoZSBrZXJuZWwgdHJlZSBub2RlIFt2YWx1ZXNdIGluIHRoZSBrbm93biBbY29udGV4dF0KICAvLy8gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZQogIC8vLyBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRUcmVlTm9kZXNJbkNvbnRleHRdLgogIHZvaWQgd3JpdGVUcmVlTm9kZXNJbkNvbnRleHQoSXRlcmFibGU8aXIuVHJlZU5vZGU+IHZhbHVlcywKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIHJlZmVyZW5jZXMgdG8ga2VybmVsIHRyZWUgbm9kZXMgdG8gW1ZdIHZhbHVlcyBpbiB0aGUKICAvLy8ga25vd24gW2NvbnRleHRdIHRvIHRoaXMgZGF0YSBzaW5rLCBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZQogIC8vLyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW21hcF0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRUcmVlTm9kZU1hcEluQ29udGV4dF0uCiAgdm9pZCB3cml0ZVRyZWVOb2RlTWFwSW5Db250ZXh0PFY+KE1hcDxpci5UcmVlTm9kZSwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUga2VybmVsIHR5cGUgcGFyYW1ldGVyIG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEKICAvLy8gc2luay4KICB2b2lkIHdyaXRlVHlwZVBhcmFtZXRlck5vZGUoaXIuVHlwZVBhcmFtZXRlciB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgcmVmZXJlbmNlcyB0byB0aGUga2VybmVsIHR5cGUgcGFyYW1ldGVyIG5vZGUgW3ZhbHVlc10gdG8gdGhpcyBkYXRhCiAgLy8vIHNpbmsuCiAgLy8vIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRUeXBlUGFyYW1ldGVyTm9kZXNdLgogIHZvaWQgd3JpdGVUeXBlUGFyYW1ldGVyTm9kZXMoSXRlcmFibGU8aXIuVHlwZVBhcmFtZXRlcj4gdmFsdWVzLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIHR5cGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLAogIC8vLyBbdmFsdWVdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIHZvaWQgd3JpdGVEYXJ0VHlwZShEYXJ0VHlwZSB2YWx1ZSwge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSB0eXBlIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsCiAgLy8vIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkRGFydFR5cGVzXS4KICB2b2lkIHdyaXRlRGFydFR5cGVzKEl0ZXJhYmxlPERhcnRUeXBlPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUga2VybmVsIHR5cGUgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIFt2YWx1ZV0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgdm9pZCB3cml0ZURhcnRUeXBlTm9kZShpci5EYXJ0VHlwZSB2YWx1ZSwge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBrZXJuZWwgdHlwZSBub2RlIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkRGFydFR5cGVOb2Rlc10uCiAgdm9pZCB3cml0ZURhcnRUeXBlTm9kZXMoSXRlcmFibGU8aXIuRGFydFR5cGU+IHZhbHVlcywKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBzb3VyY2Ugc3BhbiBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVTb3VyY2VTcGFuKFNvdXJjZVNwYW4gdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmRleGVkIGxpYnJhcnkgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlTGlicmFyeShJbmRleGVkTGlicmFyeSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIHBvdGVudGlhbGx5IGBudWxsYCBpbmRleGVkIGxpYnJhcnkgW3ZhbHVlXQogIC8vLyB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZExpYnJhcnlPck51bGxdLgogIHZvaWQgd3JpdGVMaWJyYXJ5T3JOdWxsKEluZGV4ZWRMaWJyYXJ5IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSByZWZlcmVuY2VzIHRvIGluZGV4ZWQgbGlicmFyaWVzIHRvIFtWXSB2YWx1ZXMgdG8KICAvLy8gdGhpcyBkYXRhIHNpbmssIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYKICAvLy8gW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbbWFwXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZExpYnJhcnlNYXBdLgogIHZvaWQgd3JpdGVMaWJyYXJ5TWFwPFY+KE1hcDxMaWJyYXJ5RW50aXR5LCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmRleGVkIGNsYXNzIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUNsYXNzKEluZGV4ZWRDbGFzcyB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIHBvdGVudGlhbGx5IGBudWxsYCBpbmRleGVkIGNsYXNzIFt2YWx1ZV0KICAvLy8gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRDbGFzc09yTnVsbF0uCiAgdm9pZCB3cml0ZUNsYXNzT3JOdWxsKEluZGV4ZWRDbGFzcyB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgcmVmZXJlbmNlcyB0byB0aGUgaW5kZXhlZCBjbGFzcyBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4gSWYKICAvLy8gW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZENsYXNzZXNdLgogIHZvaWQgd3JpdGVDbGFzc2VzKEl0ZXJhYmxlPENsYXNzRW50aXR5PiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSByZWZlcmVuY2VzIHRvIGluZGV4ZWQgY2xhc3NlcyB0byBbVl0gdmFsdWVzIHRvIHRoaXMKICAvLy8gZGF0YSBzaW5rLCBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuIElmCiAgLy8vIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW21hcF0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRDbGFzc01hcF0uCiAgdm9pZCB3cml0ZUNsYXNzTWFwPFY+KE1hcDxDbGFzc0VudGl0eSwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgaW5kZXhlZCB0eXBlZGVmIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVR5cGVkZWYoSW5kZXhlZFR5cGVkZWYgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmRleGVkIG1lbWJlciBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVNZW1iZXIoSW5kZXhlZE1lbWJlciB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIHBvdGVudGlhbGx5IGBudWxsYCBpbmRleGVkIG1lbWJlciBbdmFsdWVdCiAgLy8vIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTWVtYmVyT3JOdWxsXS4KICB2b2lkIHdyaXRlTWVtYmVyT3JOdWxsKEluZGV4ZWRNZW1iZXIgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHJlZmVyZW5jZXMgdG8gdGhlIGluZGV4ZWQgbWVtYmVyIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZgogIC8vLyBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTWVtYmVyc10uCiAgdm9pZCB3cml0ZU1lbWJlcnMoSXRlcmFibGU8TWVtYmVyRW50aXR5PiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSByZWZlcmVuY2VzIHRvIGluZGV4ZWQgbWVtYmVycyB0byBbVl0gdmFsdWVzIHRvIHRoaXMKICAvLy8gZGF0YSBzaW5rLCBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuIElmCiAgLy8vIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW21hcF0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRNZW1iZXJNYXBdLgogIHZvaWQgd3JpdGVNZW1iZXJNYXA8Vj4oCiAgICAgIE1hcDxNZW1iZXJFbnRpdHksIFY+IG1hcCwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIsIFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGluZGV4ZWQgdHlwZSB2YXJpYWJsZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVUeXBlVmFyaWFibGUoSW5kZXhlZFR5cGVWYXJpYWJsZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGxvY2FsIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUxvY2FsKExvY2FsIGxvY2FsKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgcG90ZW50aWFsbHkgYG51bGxgIGxvY2FsIFt2YWx1ZV0KICAvLy8gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRMb2NhbE9yTnVsbF0uCiAgdm9pZCB3cml0ZUxvY2FsT3JOdWxsKExvY2FsIGxvY2FsKTsKCiAgLy8vIFdyaXRlcyByZWZlcmVuY2VzIHRvIHRoZSBsb2NhbCBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0KICAvLy8gaXMgYHRydWVgLCBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZExvY2Fsc10uCiAgdm9pZCB3cml0ZUxvY2FscyhJdGVyYWJsZTxMb2NhbD4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gcmVmZXJlbmNlcyB0byBsb2NhbHMgdG8gW1ZdIHZhbHVlcyB0byB0aGlzIGRhdGEKICAvLy8gc2luaywgY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIFttYXBdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTG9jYWxNYXBdLgogIHZvaWQgd3JpdGVMb2NhbE1hcDxWPihNYXA8TG9jYWwsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIGNvbnN0YW50IFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUNvbnN0YW50KENvbnN0YW50VmFsdWUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgY29uc3RhbnQgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlQ29uc3RhbnRPck51bGwoQ29uc3RhbnRWYWx1ZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgY29uc3RhbnQgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwKICAvLy8gW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRDb25zdGFudHNdLgogIHZvaWQgd3JpdGVDb25zdGFudHMoSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gY29uc3RhbnQgdmFsdWVzIHRvIFtWXSB2YWx1ZXMgdG8gdGhpcyBkYXRhIHNpbmssCiAgLy8vIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMKICAvLy8gYHRydWVgLCBbbWFwXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZENvbnN0YW50TWFwXS4KICB2b2lkIHdyaXRlQ29uc3RhbnRNYXA8Vj4oTWFwPENvbnN0YW50VmFsdWUsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgYSBkb3VibGUgdmFsdWUgdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZURvdWJsZVZhbHVlKGRvdWJsZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYW4gaW50ZWdlciBvZiBhcmJpdHJhcnkgdmFsdWUgdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgc2hvdWxkIG9ubHkgd2hlbiB0aGUgdmFsdWUgaXMgbm90IGtub3duIHRvIGJlIGEgbm9uLW5lZ2F0aXZlCiAgLy8vIDMwIGJpdCBpbnRlZ2VyLiBPdGhlcndpc2UgW3dyaXRlSW50XSBzaG91bGQgYmUgdXNlZC4KICB2b2lkIHdyaXRlSW50ZWdlclZhbHVlKGludCB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIGltcG9ydCBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVJbXBvcnQoSW1wb3J0RW50aXR5IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgcG90ZW50aWFsbHkgYG51bGxgIGltcG9ydCBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVJbXBvcnRPck51bGwoSW1wb3J0RW50aXR5IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBpbXBvcnQgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwKICAvLy8gW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRJbXBvcnRzXS4KICB2b2lkIHdyaXRlSW1wb3J0cyhJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIGltcG9ydHMgdG8gW1ZdIHZhbHVlcyB0byB0aGlzIGRhdGEgc2luaywKICAvLy8gY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIFttYXBdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkSW1wb3J0TWFwXS4KICB2b2lkIHdyaXRlSW1wb3J0TWFwPFY+KE1hcDxJbXBvcnRFbnRpdHksIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgYW4gYWJzdHJhY3QgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIGEgW0NvZGVnZW5Xcml0ZXJdIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIG91dHB1dCB1bml0IFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBhIFtDb2RlZ2VuV3JpdGVyXSBoYXMgYmVlbiByZWdpc3RlcmVkLgogIHZvaWQgd3JpdGVPdXRwdXRVbml0UmVmZXJlbmNlKE91dHB1dFVuaXQgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEganMgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgYSBbQ29kZWdlbldyaXRlcl0gaGFzIGJlZW4gcmVnaXN0ZXJlZC4KICB2b2lkIHdyaXRlSnNOb2RlKGpzLk5vZGUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcG90ZW50aWFsbHkgYG51bGxgIGpzIG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIGEgW0NvZGVnZW5Xcml0ZXJdIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCiAgdm9pZCB3cml0ZUpzTm9kZU9yTnVsbChqcy5Ob2RlIHZhbHVlKTsKCiAgLy8vIFJlZ2lzdGVyIGFuIFtFbnRpdHlXcml0ZXJdIHdpdGggdGhpcyBkYXRhIHNpbmsgZm9yIG5vbi1kZWZhdWx0IGVuY29kaW5nCiAgLy8vIG9mIGVudGl0eSByZWZlcmVuY2VzLgogIHZvaWQgcmVnaXN0ZXJFbnRpdHlXcml0ZXIoRW50aXR5V3JpdGVyIHdyaXRlcik7CgogIC8vLyBSZWdpc3RlciBhIFtDb2RlZ2VuV3JpdGVyXSB3aXRoIHRoaXMgZGF0YSBzaW5rIHRvIHN1cHBvcnQgc2VyaWFsaXphdGlvbgogIC8vLyBvZiBjb2RlZ2VuIG9ubHkgZGF0YS4KICB2b2lkIHJlZ2lzdGVyQ29kZWdlbldyaXRlcihDb2RlZ2VuV3JpdGVyIHdyaXRlcik7CgogIC8vLyBJbnZva2UgW2ZdIGluIHRoZSBjb250ZXh0IG9mIFttZW1iZXJdLiBUaGlzIHNldHMgdXAgc3VwcG9ydCBmb3IKICAvLy8gc2VyaWFsaXphdGlvbiBvZiBgaXIuVHJlZU5vZGVgcyB1c2luZyB0aGUgYHdyaXRlVHJlZU5vZGUqSW5Db250ZXh0YAogIC8vLyBtZXRob2RzLgogIHZvaWQgaW5NZW1iZXJDb250ZXh0KGlyLk1lbWJlciBtZW1iZXIsIHZvaWQgZigpKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgZGVzZXJpYWxpemF0aW9uLgphYnN0cmFjdCBjbGFzcyBEYXRhU291cmNlIHsKICAvLy8gUmVnaXN0ZXJzIHRoYXQgdGhlIHNlY3Rpb24gW3RhZ10gc3RhcnRzLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyB0byB2ZXJpZnkgdGhhdCBzZWN0aW9ucyBhcmUgY29ycmVjdGx5IGFsaWduZWQKICAvLy8gYmV0d2VlbiBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCiAgdm9pZCBiZWdpbihTdHJpbmcgdGFnKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IHRoZSBzZWN0aW9uIFt0YWddIGVuZHMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdnaW5nIHRvIHZlcmlmeSB0aGF0IHNlY3Rpb25zIGFyZSBjb3JyZWN0bHkgYWxpZ25lZAogIC8vLyBiZXR3ZWVuIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi4KICB2b2lkIGVuZChTdHJpbmcgdGFnKTsKCiAgLy8vIFJlZ2lzdGVycyBhIFtDb21wb25lbnRMb29rdXBdIG9iamVjdCB3aXRoIHRoaXMgZGF0YSBzb3VyY2UgdG8gc3VwcG9ydAogIC8vLyBkZXNlcmlhbGl6YXRpb24gb2YgcmVmZXJlbmNlcyB0byBrZXJuZWwgbm9kZXMuCiAgdm9pZCByZWdpc3RlckNvbXBvbmVudExvb2t1cChDb21wb25lbnRMb29rdXAgY29tcG9uZW50TG9va3VwKTsKCiAgLy8vIFJlZ2lzdGVycyBhbiBbRW50aXR5TG9va3VwXSBvYmplY3Qgd2l0aCB0aGlzIGRhdGEgc291cmNlIHRvIHN1cHBvcnQKICAvLy8gZGVzZXJpYWxpemF0aW9uIG9mIHJlZmVyZW5jZXMgdG8gaW5kZXhlZCBlbnRpdGllcy4KICB2b2lkIHJlZ2lzdGVyRW50aXR5TG9va3VwKEVudGl0eUxvb2t1cCBlbnRpdHlMb29rdXApOwoKICAvLy8gUmVnaXN0ZXJzIGFuIFtFbnRpdHlSZWFkZXJdIHdpdGggdGhpcyBkYXRhIHNvdXJjZSBmb3Igbm9uLWRlZmF1bHQgZW5jb2RpbmcKICAvLy8gb2YgZW50aXR5IHJlZmVyZW5jZXMuCiAgdm9pZCByZWdpc3RlckVudGl0eVJlYWRlcihFbnRpdHlSZWFkZXIgcmVhZGVyKTsKCiAgLy8vIFJlZ2lzdGVycyBhIFtMb2NhbExvb2t1cF0gb2JqZWN0IHdpdGggdGhpcyBkYXRhIHNvdXJjZSB0byBzdXBwb3J0CiAgLy8vIGRlc2VyaWFsaXphdGlvbiBvZiByZWZlcmVuY2VzIHRvIGxvY2Fscy4KICB2b2lkIHJlZ2lzdGVyTG9jYWxMb29rdXAoTG9jYWxMb29rdXAgbG9jYWxMb29rdXApOwoKICAvLy8gUmVnaXN0ZXJzIGEgW0NvZGVnZW5SZWFkZXJdIHdpdGggdGhpcyBkYXRhIHNvdXJjZSB0byBzdXBwb3J0CiAgLy8vIGRlc2VyaWFsaXphdGlvbiBvZiBjb2RlZ2VuIG9ubHkgZGF0YS4KICB2b2lkIHJlZ2lzdGVyQ29kZWdlblJlYWRlcihDb2RlZ2VuUmVhZGVyIHJlYWRlcik7CgogIC8vLyBVbnJlZ2lzdGVycyB0aGUgW0NvZGVnZW5SZWFkZXJdIGZyb20gdGhpcyBkYXRhIHNvdXJjZSB0byByZW1vdmUgc3VwcG9ydAogIC8vLyBmb3IgZGVzZXJpYWxpemF0aW9uIG9mIGNvZGVnZW4gb25seSBkYXRhLgogIHZvaWQgZGVyZWdpc3RlckNvZGVnZW5SZWFkZXIoQ29kZWdlblJlYWRlciByZWFkZXIpOwoKICAvLy8gSW52b2tlIFtmXSBpbiB0aGUgY29udGV4dCBvZiBbbWVtYmVyXS4gVGhpcyBzZXRzIHVwIHN1cHBvcnQgZm9yCiAgLy8vIGRlc2VyaWFsaXphdGlvbiBvZiBgaXIuVHJlZU5vZGVgcyB1c2luZyB0aGUgYHJlYWRUcmVlTm9kZSpJbkNvbnRleHRgCiAgLy8vIG1ldGhvZHMuCiAgVCBpbk1lbWJlckNvbnRleHQ8VD4oaXIuTWVtYmVyIG1lbWJlciwgVCBmKCkpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gW0VdIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgdGhlIHZhbHVlIGhhcwogIC8vLyBub3QgeWV0IGJlZW4gZGVzZXJpYWxpemVkLCBbZl0gaXMgY2FsbGVkIHRvIGRlc2VyaWFsaXplIHRoZSB2YWx1ZSBpdHNlbGYuCiAgRSByZWFkQ2FjaGVkPEU+KEUgZigpKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIFtFXSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsIGNhbGxpbmcgW2ZdIHRvCiAgLy8vIHJlYWQgdGhlIG5vbi1udWxsIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVWYWx1ZU9yTnVsbF0uCiAgRSByZWFkVmFsdWVPck51bGw8RT4oRSBmKCkpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIFtFXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlTGlzdF0uCiAgTGlzdDxFPiByZWFkTGlzdDxFPihFIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIGJvb2xlYW4gdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGJvb2wgcmVhZEJvb2woKTsKCiAgLy8vIFJlYWRzIGEgbm9uLW5lZ2F0aXZlIDMwIGJpdCBpbnRlZ2VyIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpbnQgcmVhZEludCgpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZnJvbSB0aGlzIGRhdGEKICAvLy8gc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVJbnRPck51bGxdLgogIGludCByZWFkSW50T3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIHN0cmluZyB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgU3RyaW5nIHJlYWRTdHJpbmcoKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIHN0cmluZyB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVN0cmluZ09yTnVsbF0uCiAgU3RyaW5nIHJlYWRTdHJpbmdPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiBzdHJpbmcgdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVN0cmluZ3NdLgogIExpc3Q8U3RyaW5nPiByZWFkU3RyaW5ncyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20gc3RyaW5nIHZhbHVlcyB0byBbVl0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwKICAvLy8gY2FsbGluZyBbZl0gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVTdHJpbmdNYXBdLgogIE1hcDxTdHJpbmcsIFY+IHJlYWRTdHJpbmdNYXA8Vj4oViBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYW4gZW51bSB2YWx1ZSBmcm9tIHRoZSBsaXN0IG9mIGVudW0gW3ZhbHVlc10gZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGUgW3ZhbHVlc10gYXJndW1lbnQgaXMgaW50ZW5kZWQgdG8gYmUgdGhlIHN0YXRpYyBgLnZhbHVlc2AgZmllbGQgb24KICAvLy8gZW51bSBjbGFzc2VzLCBmb3IgaW5zdGFuY2U6CiAgLy8vCiAgLy8vICAgIGVudW0gRm9vIHsgYmFyLCBiYXogfQogIC8vLyAgICAuLi4KICAvLy8gICAgRm9vIGZvbyA9IHNvdXJjZS5yZWFkRW51bShGb28udmFsdWVzKTsKICAvLy8KICBFIHJlYWRFbnVtPEU+KExpc3Q8RT4gdmFsdWVzKTsKCiAgLy8vIFJlYWRzIGEgVVJJIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBVcmkgcmVhZFVyaSgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBrZXJuZWwgbGlicmFyeSBub2RlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpci5MaWJyYXJ5IHJlYWRMaWJyYXJ5Tm9kZSgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBrZXJuZWwgY2xhc3Mgbm9kZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaXIuQ2xhc3MgcmVhZENsYXNzTm9kZSgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBrZXJuZWwgY2xhc3Mgbm9kZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaXIuVHlwZWRlZiByZWFkVHlwZWRlZk5vZGUoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEga2VybmVsIG1lbWJlciBub2RlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpci5NZW1iZXIgcmVhZE1lbWJlck5vZGUoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiByZWZlcmVuY2VzIHRvIGtlcm5lbCBtZW1iZXIgbm9kZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLyBJZiBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlTWVtYmVyTm9kZXNdLgogIExpc3Q8aXIuTWVtYmVyPiByZWFkTWVtYmVyTm9kZXM8RSBleHRlbmRzIGlyLk1lbWJlcj4oCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBrZXJuZWwgbWVtYmVyIG5vZGVzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLAogIC8vLyBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZU1lbWJlck5vZGVNYXBdLgogIE1hcDxLLCBWPiByZWFkTWVtYmVyTm9kZU1hcDxLIGV4dGVuZHMgaXIuTWVtYmVyLCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIGtlcm5lbCBuYW1lIG5vZGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGlyLk5hbWUgcmVhZE5hbWUoKTsKCiAgLy8vIFJlYWRzIGEga2VybmVsIGxpYnJhcnkgZGVwZW5kZW5jeSBub2RlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpci5MaWJyYXJ5RGVwZW5kZW5jeSByZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlKCk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBrZXJuZWwgbGlicmFyeSBkZXBlbmRlbmN5IG5vZGUgZnJvbSB0aGlzIGRhdGEKICAvLy8gc291cmNlLgogIGlyLkxpYnJhcnlEZXBlbmRlbmN5IHJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEga2VybmVsIHRyZWUgbm9kZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaXIuVHJlZU5vZGUgcmVhZFRyZWVOb2RlKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIHBvdGVudGlhbGx5IGBudWxsYCBrZXJuZWwgdHJlZSBub2RlIGZyb20gdGhpcyBkYXRhCiAgLy8vIHNvdXJjZS4KICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGVPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiByZWZlcmVuY2VzIHRvIGtlcm5lbCB0cmVlIG5vZGVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8gSWYgW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVRyZWVOb2Rlc10uCiAgTGlzdDxFPiByZWFkVHJlZU5vZGVzPEUgZXh0ZW5kcyBpci5UcmVlTm9kZT4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIG1hcCBmcm9tIGtlcm5lbCB0cmVlIG5vZGVzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLAogIC8vLyBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVRyZWVOb2RlTWFwXS4KICBNYXA8SywgVj4gcmVhZFRyZWVOb2RlTWFwPEsgZXh0ZW5kcyBpci5UcmVlTm9kZSwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBrZXJuZWwgdHJlZSBub2RlIGluIHRoZSBrbm93biBbY29udGV4dF0gZnJvbSB0aGlzCiAgLy8vIGRhdGEgc291cmNlLgogIGlyLlRyZWVOb2RlIHJlYWRUcmVlTm9kZUluQ29udGV4dCgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBwb3RlbnRpYWxseSBgbnVsbGAga2VybmVsIHRyZWUgbm9kZSBpbiB0aGUga25vd24KICAvLy8gW2NvbnRleHRdIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGVPck51bGxJbkNvbnRleHQoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiByZWZlcmVuY2VzIHRvIGtlcm5lbCB0cmVlIG5vZGVzIGluIHRoZSBrbm93biBbY29udGV4dF0KICAvLy8gZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkCiAgLy8vIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlVHJlZU5vZGVzSW5Db250ZXh0XS4KICBMaXN0PEU+IHJlYWRUcmVlTm9kZXNJbkNvbnRleHQ8RSBleHRlbmRzIGlyLlRyZWVOb2RlPigKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIG1hcCBmcm9tIGtlcm5lbCB0cmVlIG5vZGVzIHRvIFtWXSB2YWx1ZXMgaW4gdGhlIGtub3duIFtjb250ZXh0XQogIC8vLyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsIGNhbGxpbmcgW2ZdIHRvIHJlYWQgZWFjaCB2YWx1ZSBmcm9tIHRoZSBkYXRhCiAgLy8vIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5CiAgLy8vIG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHRdLgogIE1hcDxLLCBWPiByZWFkVHJlZU5vZGVNYXBJbkNvbnRleHQ8SyBleHRlbmRzIGlyLlRyZWVOb2RlLCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIGtlcm5lbCB0eXBlIHBhcmFtZXRlciBub2RlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpci5UeXBlUGFyYW1ldGVyIHJlYWRUeXBlUGFyYW1ldGVyTm9kZSgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8ga2VybmVsIHR5cGUgcGFyYW1ldGVyIG5vZGVzIGZyb20gdGhpcyBkYXRhCiAgLy8vIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5CiAgLy8vIGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVR5cGVQYXJhbWV0ZXJOb2Rlc10uCiAgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiByZWFkVHlwZVBhcmFtZXRlck5vZGVzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSB0eXBlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2FsbG93TnVsbF0sIHRoZSByZXR1cm5lZCB0eXBlIGlzCiAgLy8vIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIERhcnRUeXBlIHJlYWREYXJ0VHlwZSh7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgdHlwZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwKICAvLy8gYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlRGFydFR5cGVzXS4KICBMaXN0PERhcnRUeXBlPiByZWFkRGFydFR5cGVzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBrZXJuZWwgdHlwZSBub2RlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2FsbG93TnVsbF0sIHRoZQogIC8vLyByZXR1cm5lZCB0eXBlIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIGlyLkRhcnRUeXBlIHJlYWREYXJ0VHlwZU5vZGUoe2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIGtlcm5lbCB0eXBlIG5vZGVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXQogIC8vLyBpcyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZURhcnRUeXBlTm9kZXNdLgogIExpc3Q8aXIuRGFydFR5cGU+IHJlYWREYXJ0VHlwZU5vZGVzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBzb3VyY2Ugc3BhbiBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgU291cmNlU3BhbiByZWFkU291cmNlU3BhbigpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gaW5kZXhlZCBsaWJyYXJ5IGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBJbmRleGVkTGlicmFyeSByZWFkTGlicmFyeSgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBwb3RlbnRpYWxseSBgbnVsbGAgaW5kZXhlZCBsaWJyYXJ5IGZyb20gdGhpcyBkYXRhCiAgLy8vIHNvdXJjZS4KICBJbmRleGVkTGlicmFyeSByZWFkTGlicmFyeU9yTnVsbCgpOwogIE1hcDxLLCBWPiByZWFkTGlicmFyeU1hcDxLIGV4dGVuZHMgTGlicmFyeUVudGl0eSwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gaW5kZXhlZCBjbGFzcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgSW5kZXhlZENsYXNzIHJlYWRDbGFzcygpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBwb3RlbnRpYWxseSBgbnVsbGAgaW5kZXhlZCBjbGFzcyBmcm9tIHRoaXMgZGF0YQogIC8vLyBzb3VyY2UuCiAgSW5kZXhlZENsYXNzIHJlYWRDbGFzc09yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gaW5kZXhlZCBjbGFzc2VzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8gSWYgW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUNsYXNzZXNdLgogIExpc3Q8RT4gcmVhZENsYXNzZXM8RSBleHRlbmRzIENsYXNzRW50aXR5Pih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20gaW5kZXhlZCBjbGFzc2VzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLAogIC8vLyBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUNsYXNzTWFwXS4KICBNYXA8SywgVj4gcmVhZENsYXNzTWFwPEsgZXh0ZW5kcyBDbGFzc0VudGl0eSwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gaW5kZXhlZCB0eXBlZGVmIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBJbmRleGVkVHlwZWRlZiByZWFkVHlwZWRlZigpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gaW5kZXhlZCBtZW1iZXIgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIEluZGV4ZWRNZW1iZXIgcmVhZE1lbWJlcigpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBwb3RlbnRpYWxseSBgbnVsbGAgaW5kZXhlZCBtZW1iZXIgZnJvbSB0aGlzIGRhdGEKICAvLy8gc291cmNlLgogIEluZGV4ZWRNZW1iZXIgcmVhZE1lbWJlck9yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gaW5kZXhlZCBtZW1iZXJzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8gSWYgW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZU1lbWJlcnNdLgogIExpc3Q8RT4gcmVhZE1lbWJlcnM8RSBleHRlbmRzIE1lbWJlckVudGl0eT4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIG1hcCBmcm9tIGluZGV4ZWQgbWVtYmVycyB0byBbVl0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwKICAvLy8gY2FsbGluZyBbZl0gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVNZW1iZXJNYXBdLgogIE1hcDxLLCBWPiByZWFkTWVtYmVyTWFwPEsgZXh0ZW5kcyBNZW1iZXJFbnRpdHksIFY+KFYgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhbiBpbmRleGVkIHR5cGUgdmFyaWFibGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIEluZGV4ZWRUeXBlVmFyaWFibGUgcmVhZFR5cGVWYXJpYWJsZSgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBsb2NhbCBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgTG9jYWwgcmVhZExvY2FsKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIHBvdGVudGlhbGx5IGBudWxsYCBsb2NhbCBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgTG9jYWwgcmVhZExvY2FsT3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBsb2NhbHMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZgogIC8vLyBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlTG9jYWxzXS4KICBMaXN0PEU+IHJlYWRMb2NhbHM8RSBleHRlbmRzIExvY2FsPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20gbG9jYWxzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLCBjYWxsaW5nIFtmXQogIC8vLyB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLAogIC8vLyBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUxvY2FsTWFwXS4KICBNYXA8SywgVj4gcmVhZExvY2FsTWFwPEsgZXh0ZW5kcyBMb2NhbCwgVj4oViBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBjb25zdGFudCB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgQ29uc3RhbnRWYWx1ZSByZWFkQ29uc3RhbnQoKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIGNvbnN0YW50IHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBDb25zdGFudFZhbHVlIHJlYWRDb25zdGFudE9yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBkb3VibGUgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGRvdWJsZSByZWFkRG91YmxlVmFsdWUoKTsKCiAgLy8vIFJlYWRzIGFuIGludGVnZXIgb2YgYXJiaXRyYXJ5IHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBpcyBzaG91bGQgb25seSB3aGVuIHRoZSB2YWx1ZSBpcyBub3Qga25vd24gdG8gYmUgYSBub24tbmVnYXRpdmUKICAvLy8gMzAgYml0IGludGVnZXIuIE90aGVyd2lzZSBbcmVhZEludF0gc2hvdWxkIGJlIHVzZWQuCiAgaW50IHJlYWRJbnRlZ2VyVmFsdWUoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiBjb25zdGFudCB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlQ29uc3RhbnRzXS4KICBMaXN0PEU+IHJlYWRDb25zdGFudHM8RSBleHRlbmRzIENvbnN0YW50VmFsdWU+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBjb25zdGFudCB2YWx1ZXMgdG8gW1ZdIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsCiAgLy8vIGNhbGxpbmcgW2ZdIHRvIHJlYWQgZWFjaCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlQ29uc3RhbnRNYXBdLgogIE1hcDxLLCBWPiByZWFkQ29uc3RhbnRNYXA8SyBleHRlbmRzIENvbnN0YW50VmFsdWUsIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgaW1wb3J0IGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBJbXBvcnRFbnRpdHkgcmVhZEltcG9ydCgpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAgaW1wb3J0IGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBJbXBvcnRFbnRpdHkgcmVhZEltcG9ydE9yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIGltcG9ydHMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlSW1wb3J0c10uCiAgTGlzdDxJbXBvcnRFbnRpdHk+IHJlYWRJbXBvcnRzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBpbXBvcnRzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLAogIC8vLyBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUltcG9ydE1hcF0uCiAgTWFwPEltcG9ydEVudGl0eSwgVj4gcmVhZEltcG9ydE1hcDxWPihWIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhbiBbQWJzdHJhY3RWYWx1ZV0gZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgYSBbQ29kZWdlblJlYWRlcl0gaGFzIGJlZW4gcmVnaXN0ZXJlZC4KICBBYnN0cmFjdFZhbHVlIHJlYWRBYnN0cmFjdFZhbHVlKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhbiBbT3V0cHV0VW5pdF0gZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgYSBbQ29kZWdlblJlYWRlcl0gaGFzIGJlZW4gcmVnaXN0ZXJlZC4KICBPdXRwdXRVbml0IHJlYWRPdXRwdXRVbml0UmVmZXJlbmNlKCk7CgogIC8vLyBSZWFkcyBhIFtqcy5Ob2RlXSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBhIFtDb2RlZ2VuUmVhZGVyXSBoYXMgYmVlbiByZWdpc3RlcmVkLgogIGpzLk5vZGUgcmVhZEpzTm9kZSgpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAgW2pzLk5vZGVdIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIGEgW0NvZGVnZW5SZWFkZXJdIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCiAganMuTm9kZSByZWFkSnNOb2RlT3JOdWxsKCk7Cn0KCi8vLyBJbnRlcmZhY2UgdXNlZCBmb3IgbG9va2luZyB1cCBlbnRpdGllcyBieSBpbmRleCBkdXJpbmcgZGVzZXJpYWxpemF0aW9uLgphYnN0cmFjdCBjbGFzcyBFbnRpdHlMb29rdXAgewogIC8vLyBSZXR1cm5zIHRoZSBpbmRleGVkIGxpYnJhcnkgY29ycmVzcG9uZGluZyB0byBbaW5kZXhdLgogIEluZGV4ZWRMaWJyYXJ5IGdldExpYnJhcnlCeUluZGV4KGludCBpbmRleCk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmRleGVkIGNsYXNzIGNvcnJlc3BvbmRpbmcgdG8gW2luZGV4XS4KICBJbmRleGVkQ2xhc3MgZ2V0Q2xhc3NCeUluZGV4KGludCBpbmRleCk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmRleGVkIHR5cGVkZWYgY29ycmVzcG9uZGluZyB0byBbaW5kZXhdLgogIEluZGV4ZWRUeXBlZGVmIGdldFR5cGVkZWZCeUluZGV4KGludCBpbmRleCk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmRleGVkIG1lbWJlciBjb3JyZXNwb25kaW5nIHRvIFtpbmRleF0uCiAgSW5kZXhlZE1lbWJlciBnZXRNZW1iZXJCeUluZGV4KGludCBpbmRleCk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmRleGVkIHR5cGUgdmFyaWFibGUgY29ycmVzcG9uZGluZyB0byBbaW5kZXhdLgogIEluZGV4ZWRUeXBlVmFyaWFibGUgZ2V0VHlwZVZhcmlhYmxlQnlJbmRleChpbnQgaW5kZXgpOwp9CgovLy8gRGVjb2Rpbmcgc3RyYXRlZ3kgZm9yIGVudGl0eSByZWZlcmVuY2VzLgpjbGFzcyBFbnRpdHlSZWFkZXIgewogIGNvbnN0IEVudGl0eVJlYWRlcigpOwoKICBJbmRleGVkTGlicmFyeSByZWFkTGlicmFyeUZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCkgewogICAgcmV0dXJuIGVudGl0eUxvb2t1cC5nZXRMaWJyYXJ5QnlJbmRleChzb3VyY2UucmVhZEludCgpKTsKICB9CgogIEluZGV4ZWRDbGFzcyByZWFkQ2xhc3NGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVudGl0eUxvb2t1cCBlbnRpdHlMb29rdXApIHsKICAgIHJldHVybiBlbnRpdHlMb29rdXAuZ2V0Q2xhc3NCeUluZGV4KHNvdXJjZS5yZWFkSW50KCkpOwogIH0KCiAgSW5kZXhlZFR5cGVkZWYgcmVhZFR5cGVkZWZGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVudGl0eUxvb2t1cCBlbnRpdHlMb29rdXApIHsKICAgIHJldHVybiBlbnRpdHlMb29rdXAuZ2V0VHlwZWRlZkJ5SW5kZXgoc291cmNlLnJlYWRJbnQoKSk7CiAgfQoKICBJbmRleGVkTWVtYmVyIHJlYWRNZW1iZXJGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVudGl0eUxvb2t1cCBlbnRpdHlMb29rdXApIHsKICAgIHJldHVybiBlbnRpdHlMb29rdXAuZ2V0TWVtYmVyQnlJbmRleChzb3VyY2UucmVhZEludCgpKTsKICB9CgogIEluZGV4ZWRUeXBlVmFyaWFibGUgcmVhZFR5cGVWYXJpYWJsZUZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCkgewogICAgcmV0dXJuIGVudGl0eUxvb2t1cC5nZXRUeXBlVmFyaWFibGVCeUluZGV4KHNvdXJjZS5yZWFkSW50KCkpOwogIH0KfQoKLy8vIEVuY29kaW5nIHN0cmF0ZWd5IGZvciBlbnRpdHkgcmVmZXJlbmNlcy4KY2xhc3MgRW50aXR5V3JpdGVyIHsKICBjb25zdCBFbnRpdHlXcml0ZXIoKTsKCiAgdm9pZCB3cml0ZUxpYnJhcnlUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEluZGV4ZWRMaWJyYXJ5IHZhbHVlKSB7CiAgICBzaW5rLndyaXRlSW50KHZhbHVlLmxpYnJhcnlJbmRleCk7CiAgfQoKICB2b2lkIHdyaXRlQ2xhc3NUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEluZGV4ZWRDbGFzcyB2YWx1ZSkgewogICAgc2luay53cml0ZUludCh2YWx1ZS5jbGFzc0luZGV4KTsKICB9CgogIHZvaWQgd3JpdGVUeXBlZGVmVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBJbmRleGVkVHlwZWRlZiB2YWx1ZSkgewogICAgc2luay53cml0ZUludCh2YWx1ZS50eXBlZGVmSW5kZXgpOwogIH0KCiAgdm9pZCB3cml0ZU1lbWJlclRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSW5kZXhlZE1lbWJlciB2YWx1ZSkgewogICAgc2luay53cml0ZUludCh2YWx1ZS5tZW1iZXJJbmRleCk7CiAgfQoKICB2b2lkIHdyaXRlVHlwZVZhcmlhYmxlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBJbmRleGVkVHlwZVZhcmlhYmxlIHZhbHVlKSB7CiAgICBzaW5rLndyaXRlSW50KHZhbHVlLnR5cGVWYXJpYWJsZUluZGV4KTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgdXNlZCBmb3IgbG9va2luZyB1cCBsb2NhbHMgYnkgaW5kZXggZHVyaW5nIGRlc2VyaWFsaXphdGlvbi4KYWJzdHJhY3QgY2xhc3MgTG9jYWxMb29rdXAgewogIExvY2FsIGdldExvY2FsQnlJbmRleChNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dCwgaW50IGluZGV4KTsKfQoKLy8vIEludGVyZmFjZSB1c2VkIGZvciByZWFkaW5nIGNvZGVnZW4gb25seSBkYXRhIGR1cmluZyBkZXNlcmlhbGl6YXRpb24uCmFic3RyYWN0IGNsYXNzIENvZGVnZW5SZWFkZXIgewogIEFic3RyYWN0VmFsdWUgcmVhZEFic3RyYWN0VmFsdWUoRGF0YVNvdXJjZSBzb3VyY2UpOwogIE91dHB1dFVuaXQgcmVhZE91dHB1dFVuaXRSZWZlcmVuY2UoRGF0YVNvdXJjZSBzb3VyY2UpOwogIGpzLk5vZGUgcmVhZEpzTm9kZShEYXRhU291cmNlIHNvdXJjZSk7Cn0KCi8vLyBJbnRlcmZhY2UgdXNlZCBmb3Igd3JpdGluZyBjb2RlZ2VuIG9ubHkgZGF0YSBkdXJpbmcgc2VyaWFsaXphdGlvbi4KYWJzdHJhY3QgY2xhc3MgQ29kZWdlbldyaXRlciB7CiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWUoRGF0YVNpbmsgc2luaywgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CiAgdm9pZCB3cml0ZU91dHB1dFVuaXRSZWZlcmVuY2UoRGF0YVNpbmsgc2luaywgT3V0cHV0VW5pdCB2YWx1ZSk7CiAgdm9pZCB3cml0ZUpzTm9kZShEYXRhU2luayBzaW5rLCBqcy5Ob2RlIG5vZGUpOwp9CoOlAE5OPAEXGigzOzkaPyMgKiQjITEfJh4jIgEbHRkbFRkUGhkbASEaNAZOEgE6Bj8QAS8GTzEaAS0GTzEYAU5EMQFNSwY8JDYBT1EGPB05IAE0HgFIHAFMBjwiIgEzIgFGBjwlKAFOKAY8IEcBUE8cBjwiPiABNzJPHyEBMBwBTysBTScBTysBTikBTkIGPCROAU9LPAY8JkUgATMhAUk/AUwWRQFMKQFMGQY8Jy8BTEIGPCJOAU1LPAY8JEUgAVAZMgFPLQY8MDgBUE0OBjwrPSABUVBKBjwtTiABUAw3AVAMQgY8K0IgAUsnPwFMKAY8IksBTy9GAVAwBjwmOCABOCoBSysBSxkGPCYxAU1LPAY8I0YgAUknAUkZBjwkLQFMPwY8IEwBUEY8BjwhQiABSysBSikBShkGPCUvAU0/BjwgTQFQRjwGPCIaRiABUTUBQSABQRkGPCQmAVAzBjwfRQFMUC0GPCE8IAE1KwFIMQFMKAY8IlABTUotBjwkRyABLycBPgZLOyUBMygBRi4BSigGPCBNAUVKLQY8IkQgATQGTDABRwZMMwEyBkwjAUUGTCkBThwyAU4cNAFGSg80AgEjHC8GTzEaAS0GTzEYAUw1QQFKOTgBURwyAUgvNQFDLDQBTjA2AUZLDzEBUFAaAVE0BjwjHwFMOwY8HDkBMxMBRxEBSw4GPCEXATIXAUUGPCQdAU87BjwfNwFKTzoGPCFFAVAGTCIGHw0wBiEBLxEBSCABRhwBRiABRx4BT08GPCM4IgFQTzoGPCU9IgE2FgFENAFPDjoBRR4BUA4kAU1PBjwhSwFOTzoGPCM9IgFPEycBTictAU1MIAY8KjkiAU5KUQsGPCxGIgFPLAFPUQwGPCpMAU8cMgFPMwY8ITsBSi05AVA+BjwlQgExHwFFIAFPDiY+IgFDHAFNDiIBS08GPB9JAUxPOgY8IDoiAUUgAUQeAU4OJAFLTwY8H0oBTE86BjwhTyIBSyoBOhUBTRsBRUwGPB5CAU9LMgY8IFABNCABRyYBMhwBQQZLOhoBUTsGPCFNAUxPOgY8Iz8iASwdAT8jAUk7BjwfPQFETzoGPCFLATYGTCUBQgZMKAE1BkwYAUgGTB4CAUwePC8BOisBPC8BOy0BQjkCAS0VGAEsNj0EASg2OwQBLDY9BAEqNjwEATY2QgQCAS0VGAFFJwQBQSUEAUUnBAFDJgQBTywEAgFKHUACAUkfNjkpAgFHHz9CMQIBNXBhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0PnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vYWJzdHJhY3Rfc2luay5kYXJ0wABLKy8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgW0RhdGFTaW5rXSB1c2luZyBbRGF0YVNpbmtNaXhpbl0gdG8gaW1wbGVtZW50Ci8vLyBjb252ZW5pZW5jZSBtZXRob2RzLgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdERhdGFTaW5rIGV4dGVuZHMgRGF0YVNpbmtNaXhpbiBpbXBsZW1lbnRzIERhdGFTaW5rIHsKICAvLy8gSWYgYHRydWVgLCBzZXJpYWxpemF0aW9uIG9mIGV2ZXJ5IGRhdGEga2luZCBpcyBwcmVjZWRlZCBieSBhIFtEYXRhS2luZF0KICAvLy8gdmFsdWUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdnaW5nIGRhdGEgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gc2VyaWFsaXphdGlvbgogIC8vLyBhbmQgZGVzZXJpYWxpemF0aW9uLgogIGZpbmFsIGJvb2wgdXNlRGF0YUtpbmRzOwoKICAvLy8gVmlzaXRvciB1c2VkIGZvciBzZXJpYWxpemluZyBbRGFydFR5cGVdcy4KICBEYXJ0VHlwZVdyaXRlciBfZGFydFR5cGVXcml0ZXI7CgogIC8vLyBWaXNpdG9yIHVzZWQgZm9yIHNlcmlhbGl6aW5nIFtpci5EYXJ0VHlwZV1zLgogIERhcnRUeXBlTm9kZVdyaXRlciBfZGFydFR5cGVOb2RlV3JpdGVyOwoKICAvLy8gU3RhY2sgb2YgdGFncyB1c2VkIHdoZW4gW3VzZURhdGFLaW5kc10gaXMgYHRydWVgIHRvIGhlbHAgZGVidWdnaW5nIHNlY3Rpb24KICAvLy8gaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgogIExpc3Q8U3RyaW5nPiBfdGFnczsKCiAgLy8vIE1hcCBvZiBbX01lbWJlckRhdGFdIG9iamVjdCBmb3Igc2VyaWFsaXplZCBrZXJuZWwgbWVtYmVyIG5vZGVzLgogIE1hcDxpci5NZW1iZXIsIF9NZW1iZXJEYXRhPiBfbWVtYmVyRGF0YSA9IHt9OwoKICBJbmRleGVkU2luazxTdHJpbmc+IF9zdHJpbmdJbmRleDsKICBJbmRleGVkU2luazxVcmk+IF91cmlJbmRleDsKICBJbmRleGVkU2luazxpci5NZW1iZXI+IF9tZW1iZXJOb2RlSW5kZXg7CiAgSW5kZXhlZFNpbms8SW1wb3J0RW50aXR5PiBfaW1wb3J0SW5kZXg7CiAgSW5kZXhlZFNpbms8Q29uc3RhbnRWYWx1ZT4gX2NvbnN0YW50SW5kZXg7CgogIE1hcDxUeXBlLCBJbmRleGVkU2luaz4gX2dlbmVyYWxDYWNoZXMgPSB7fTsKCiAgRW50aXR5V3JpdGVyIF9lbnRpdHlXcml0ZXIgPSBjb25zdCBFbnRpdHlXcml0ZXIoKTsKICBDb2RlZ2VuV3JpdGVyIF9jb2RlZ2VuV3JpdGVyOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBpbnQ+IHRhZ0ZyZXF1ZW5jeU1hcDsKCiAgaXIuTWVtYmVyIF9jdXJyZW50TWVtYmVyQ29udGV4dDsKICBfTWVtYmVyRGF0YSBfY3VycmVudE1lbWJlckRhdGE7CgogIEFic3RyYWN0RGF0YVNpbmsoe3RoaXMudXNlRGF0YUtpbmRzOiBmYWxzZSwgdGhpcy50YWdGcmVxdWVuY3lNYXB9KSB7CiAgICBfZGFydFR5cGVXcml0ZXIgPSBuZXcgRGFydFR5cGVXcml0ZXIodGhpcyk7CiAgICBfZGFydFR5cGVOb2RlV3JpdGVyID0gbmV3IERhcnRUeXBlTm9kZVdyaXRlcih0aGlzKTsKICAgIF9zdHJpbmdJbmRleCA9IG5ldyBJbmRleGVkU2luazxTdHJpbmc+KHRoaXMpOwogICAgX3VyaUluZGV4ID0gbmV3IEluZGV4ZWRTaW5rPFVyaT4odGhpcyk7CiAgICBfbWVtYmVyTm9kZUluZGV4ID0gbmV3IEluZGV4ZWRTaW5rPGlyLk1lbWJlcj4odGhpcyk7CiAgICBfaW1wb3J0SW5kZXggPSBuZXcgSW5kZXhlZFNpbms8SW1wb3J0RW50aXR5Pih0aGlzKTsKICAgIF9jb25zdGFudEluZGV4ID0gbmV3IEluZGV4ZWRTaW5rPENvbnN0YW50VmFsdWU+KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbihTdHJpbmcgdGFnKSB7CiAgICBpZiAodGFnRnJlcXVlbmN5TWFwICE9IG51bGwpIHsKICAgICAgdGFnRnJlcXVlbmN5TWFwW3RhZ10gPz89IDA7CiAgICAgIHRhZ0ZyZXF1ZW5jeU1hcFt0YWddKys7CiAgICB9CiAgICBpZiAodXNlRGF0YUtpbmRzKSB7CiAgICAgIF90YWdzID8/PSA8U3RyaW5nPltdOwogICAgICBfdGFncy5hZGQodGFnKTsKICAgICAgX2JlZ2luKHRhZyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZChPYmplY3QgdGFnKSB7CiAgICBpZiAodXNlRGF0YUtpbmRzKSB7CiAgICAgIF9lbmQodGFnKTsKCiAgICAgIFN0cmluZyBleGlzdGluZ1RhZyA9IF90YWdzLnJlbW92ZUxhc3QoKTsKICAgICAgYXNzZXJ0KGV4aXN0aW5nVGFnID09IHRhZywKICAgICAgICAgICJVbmV4cGVjdGVkIHRhZyBlbmQuIEV4cGVjdGVkICRleGlzdGluZ1RhZywgZm91bmQgJHRhZy4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5NZW1iZXJDb250ZXh0KGlyLk1lbWJlciBjb250ZXh0LCB2b2lkIGYoKSkgewogICAgaXIuTWVtYmVyIG9sZE1lbWJlckNvbnRleHQgPSBfY3VycmVudE1lbWJlckNvbnRleHQ7CiAgICBfTWVtYmVyRGF0YSBvbGRNZW1iZXJEYXRhID0gX2N1cnJlbnRNZW1iZXJEYXRhOwogICAgX2N1cnJlbnRNZW1iZXJDb250ZXh0ID0gY29udGV4dDsKICAgIF9jdXJyZW50TWVtYmVyRGF0YSA9IG51bGw7CiAgICBmKCk7CiAgICBfY3VycmVudE1lbWJlckRhdGEgPSBvbGRNZW1iZXJEYXRhOwogICAgX2N1cnJlbnRNZW1iZXJDb250ZXh0ID0gb2xkTWVtYmVyQ29udGV4dDsKICB9CgogIF9NZW1iZXJEYXRhIGdldCBjdXJyZW50TWVtYmVyRGF0YSB7CiAgICBhc3NlcnQoX2N1cnJlbnRNZW1iZXJDb250ZXh0ICE9IG51bGwsCiAgICAgICAgIkRhdGFTaW5rIGhhcyBubyBjdXJyZW50IG1lbWJlciBjb250ZXh0LiIpOwogICAgcmV0dXJuIF9jdXJyZW50TWVtYmVyRGF0YSA/Pz0gX21lbWJlckRhdGFbX2N1cnJlbnRNZW1iZXJDb250ZXh0XSA/Pz0KICAgICAgICBuZXcgX01lbWJlckRhdGEoX2N1cnJlbnRNZW1iZXJDb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDYWNoZWQ8RT4oRSB2YWx1ZSwgdm9pZCBmKEUgdmFsdWUpKSB7CiAgICBJbmRleGVkU2luayBzaW5rID0gX2dlbmVyYWxDYWNoZXNbRV0gPz89IG5ldyBJbmRleGVkU2luazxFPih0aGlzKTsKICAgIHNpbmsud3JpdGUodmFsdWUsICh2KSA9PiBmKHYpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVTb3VyY2VTcGFuKFNvdXJjZVNwYW4gdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLnNvdXJjZVNwYW4pOwogICAgX3dyaXRlVXJpKHZhbHVlLnVyaSk7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZS5iZWdpbik7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZS5lbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZURhcnRUeXBlKERhcnRUeXBlIHZhbHVlLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuZGFydFR5cGUpOwogICAgX3dyaXRlRGFydFR5cGUodmFsdWUsIFtdLCBhbGxvd051bGw6IGFsbG93TnVsbCk7CiAgfQoKICB2b2lkIF93cml0ZURhcnRUeXBlKAogICAgICBEYXJ0VHlwZSB2YWx1ZSwgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgaWYgKCFhbGxvd051bGwpIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiTWlzc2luZyBEYXJ0VHlwZSBpcyBub3QgYWxsb3dlZC4iKTsKICAgICAgfQogICAgICB3cml0ZUVudW0oRGFydFR5cGVLaW5kLm5vbmUpOwogICAgfSBlbHNlIHsKICAgICAgX2RhcnRUeXBlV3JpdGVyLnZpc2l0KHZhbHVlLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZURhcnRUeXBlTm9kZShpci5EYXJ0VHlwZSB2YWx1ZSwge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmRhcnRUeXBlTm9kZSk7CiAgICBfd3JpdGVEYXJ0VHlwZU5vZGUodmFsdWUsIFtdLCBhbGxvd051bGw6IGFsbG93TnVsbCk7CiAgfQoKICB2b2lkIF93cml0ZURhcnRUeXBlTm9kZSgKICAgICAgaXIuRGFydFR5cGUgdmFsdWUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgaWYgKCFhbGxvd051bGwpIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiTWlzc2luZyBpci5EYXJ0VHlwZSBub2RlIGlzIG5vdCBhbGxvd2VkLiIpOwogICAgICB9CiAgICAgIHdyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLm5vbmUpOwogICAgfSBlbHNlIHsKICAgICAgdmFsdWUuYWNjZXB0MShfZGFydFR5cGVOb2RlV3JpdGVyLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU1lbWJlck5vZGUoaXIuTWVtYmVyIHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5tZW1iZXJOb2RlKTsKICAgIF93cml0ZU1lbWJlck5vZGUodmFsdWUpOwogIH0KCiAgdm9pZCBfd3JpdGVNZW1iZXJOb2RlKGlyLk1lbWJlciB2YWx1ZSkgewogICAgX21lbWJlck5vZGVJbmRleC53cml0ZSh2YWx1ZSwgX3dyaXRlTWVtYmVyTm9kZUludGVybmFsKTsKICB9CgogIHZvaWQgX3dyaXRlTWVtYmVyTm9kZUludGVybmFsKGlyLk1lbWJlciB2YWx1ZSkgewogICAgaXIuQ2xhc3MgY2xzID0gdmFsdWUuZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKE1lbWJlckNvbnRleHRLaW5kLmNscyk7CiAgICAgIF93cml0ZUNsYXNzTm9kZShjbHMpOwogICAgICBfd3JpdGVTdHJpbmcoX2NvbXB1dGVNZW1iZXJOYW1lKHZhbHVlKSk7CiAgICB9IGVsc2UgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeSk7CiAgICAgIF93cml0ZUxpYnJhcnlOb2RlKHZhbHVlLmVuY2xvc2luZ0xpYnJhcnkpOwogICAgICBfd3JpdGVTdHJpbmcoX2NvbXB1dGVNZW1iZXJOYW1lKHZhbHVlKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ2xhc3NOb2RlKGlyLkNsYXNzIHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5jbGFzc05vZGUpOwogICAgX3dyaXRlQ2xhc3NOb2RlKHZhbHVlKTsKICB9CgogIHZvaWQgX3dyaXRlQ2xhc3NOb2RlKGlyLkNsYXNzIHZhbHVlKSB7CiAgICBfd3JpdGVMaWJyYXJ5Tm9kZSh2YWx1ZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgIF93cml0ZVN0cmluZyh2YWx1ZS5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUeXBlZGVmTm9kZShpci5UeXBlZGVmIHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC50eXBlZGVmTm9kZSk7CiAgICBfd3JpdGVUeXBlZGVmTm9kZSh2YWx1ZSk7CiAgfQoKICB2b2lkIF93cml0ZVR5cGVkZWZOb2RlKGlyLlR5cGVkZWYgdmFsdWUpIHsKICAgIF93cml0ZUxpYnJhcnlOb2RlKHZhbHVlLmVuY2xvc2luZ0xpYnJhcnkpOwogICAgX3dyaXRlU3RyaW5nKHZhbHVlLm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpYnJhcnlOb2RlKGlyLkxpYnJhcnkgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmxpYnJhcnlOb2RlKTsKICAgIF93cml0ZUxpYnJhcnlOb2RlKHZhbHVlKTsKICB9CgogIHZvaWQgX3dyaXRlTGlicmFyeU5vZGUoaXIuTGlicmFyeSB2YWx1ZSkgewogICAgX3dyaXRlVXJpKHZhbHVlLmltcG9ydFVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlRW51bShkeW5hbWljIHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5lbnVtVmFsdWUpOwogICAgX3dyaXRlRW51bUludGVybmFsKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVCb29sKGJvb2wgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmJvb2wpOwogICAgX3dyaXRlQm9vbCh2YWx1ZSk7CiAgfQoKICB2b2lkIF93cml0ZUJvb2woYm9vbCB2YWx1ZSkgewogICAgX3dyaXRlSW50SW50ZXJuYWwodmFsdWUgPyAxIDogMCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVXJpKFVyaSB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQudXJpKTsKICAgIF93cml0ZVVyaSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlU3RyaW5nKFN0cmluZyB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuc3RyaW5nKTsKICAgIF93cml0ZVN0cmluZyh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlSW50KGludCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgYXNzZXJ0KHZhbHVlID49IDAgJiYgdmFsdWUgPj4gMzAgPT0gMCk7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC51aW50MzApOwogICAgX3dyaXRlSW50SW50ZXJuYWwodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRyZWVOb2RlKGlyLlRyZWVOb2RlIHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC50cmVlTm9kZSk7CiAgICBfd3JpdGVUcmVlTm9kZSh2YWx1ZSwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHJlZU5vZGVJbkNvbnRleHQoaXIuVHJlZU5vZGUgdmFsdWUpIHsKICAgIHdyaXRlVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbCh2YWx1ZSwgY3VycmVudE1lbWJlckRhdGEpOwogIH0KCiAgdm9pZCB3cml0ZVRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoCiAgICAgIGlyLlRyZWVOb2RlIHZhbHVlLCBfTWVtYmVyRGF0YSBtZW1iZXJEYXRhKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC50cmVlTm9kZSk7CiAgICBfd3JpdGVUcmVlTm9kZSh2YWx1ZSwgbWVtYmVyRGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHJlZU5vZGVPck51bGxJbkNvbnRleHQoaXIuVHJlZU5vZGUgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbCh2YWx1ZSwgY3VycmVudE1lbWJlckRhdGEpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRyZWVOb2Rlc0luQ29udGV4dChJdGVyYWJsZTxpci5UcmVlTm9kZT4gdmFsdWVzLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKGlyLlRyZWVOb2RlIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbCh2YWx1ZSwgY3VycmVudE1lbWJlckRhdGEpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHQ8Vj4oTWFwPGlyLlRyZWVOb2RlLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKGlyLlRyZWVOb2RlIGtleSwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbChrZXksIGN1cnJlbnRNZW1iZXJEYXRhKTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBfTWVtYmVyRGF0YSBfZ2V0TWVtYmVyRGF0YShpci5UcmVlTm9kZSBub2RlKSB7CiAgICBpci5UcmVlTm9kZSBtZW1iZXIgPSBub2RlOwogICAgd2hpbGUgKG1lbWJlciBpcyEgaXIuTWVtYmVyKSB7CiAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJObyBlbmNsb3NpbmcgbWVtYmVyIG9mIFRyZWVOb2RlICIKICAgICAgICAgICAgIiRub2RlICgke25vZGUucnVudGltZVR5cGV9KSIpOwogICAgICB9CiAgICAgIG1lbWJlciA9IG1lbWJlci5wYXJlbnQ7CiAgICB9CiAgICBfd3JpdGVNZW1iZXJOb2RlKG1lbWJlcik7CiAgICByZXR1cm4gX21lbWJlckRhdGFbbWVtYmVyXSA/Pz0gbmV3IF9NZW1iZXJEYXRhKG1lbWJlcik7CiAgfQoKICB2b2lkIF93cml0ZVRyZWVOb2RlKGlyLlRyZWVOb2RlIHZhbHVlLCBfTWVtYmVyRGF0YSBtZW1iZXJEYXRhKSB7CiAgICBpZiAodmFsdWUgaXMgaXIuQ2xhc3MpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9UcmVlTm9kZUtpbmQuY2xzKTsKICAgICAgX3dyaXRlQ2xhc3NOb2RlKHZhbHVlKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgaXIuTWVtYmVyKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfVHJlZU5vZGVLaW5kLm1lbWJlcik7CiAgICAgIF93cml0ZU1lbWJlck5vZGUodmFsdWUpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBpci5WYXJpYWJsZURlY2xhcmF0aW9uICYmCiAgICAgICAgdmFsdWUucGFyZW50IGlzIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9UcmVlTm9kZUtpbmQuZnVuY3Rpb25EZWNsYXJhdGlvblZhcmlhYmxlKTsKICAgICAgX3dyaXRlVHJlZU5vZGUodmFsdWUucGFyZW50LCBtZW1iZXJEYXRhKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgaXIuRnVuY3Rpb25Ob2RlKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfVHJlZU5vZGVLaW5kLmZ1bmN0aW9uTm9kZSk7CiAgICAgIF93cml0ZUZ1bmN0aW9uTm9kZSh2YWx1ZSwgbWVtYmVyRGF0YSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIGlyLlR5cGVQYXJhbWV0ZXIpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9UcmVlTm9kZUtpbmQudHlwZVBhcmFtZXRlcik7CiAgICAgIF93cml0ZVR5cGVQYXJhbWV0ZXIodmFsdWUsIG1lbWJlckRhdGEpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBDb25zdGFudFJlZmVyZW5jZSkgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX1RyZWVOb2RlS2luZC5jb25zdGFudCk7CiAgICAgIG1lbWJlckRhdGEgPz89IF9nZXRNZW1iZXJEYXRhKHZhbHVlLmV4cHJlc3Npb24pOwogICAgICBfd3JpdGVUcmVlTm9kZSh2YWx1ZS5leHByZXNzaW9uLCBtZW1iZXJEYXRhKTsKICAgICAgaW50IGluZGV4ID0KICAgICAgICAgIG1lbWJlckRhdGEuZ2V0SW5kZXhCeUNvbnN0YW50KHZhbHVlLmV4cHJlc3Npb24sIHZhbHVlLmNvbnN0YW50KTsKICAgICAgX3dyaXRlSW50SW50ZXJuYWwoaW5kZXgpOwogICAgfSBlbHNlIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9UcmVlTm9kZUtpbmQubm9kZSk7CiAgICAgIG1lbWJlckRhdGEgPz89IF9nZXRNZW1iZXJEYXRhKHZhbHVlKTsKICAgICAgaW50IGluZGV4ID0gbWVtYmVyRGF0YS5nZXRJbmRleEJ5VHJlZU5vZGUodmFsdWUpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBpbmRleCAhPSBudWxsLAogICAgICAgICAgIk5vIFRyZWVOb2RlIGluZGV4IGZvdW5kIGZvciAke3ZhbHVlLnJ1bnRpbWVUeXBlfSAiCiAgICAgICAgICAiZm91bmQgaW4gJHttZW1iZXJEYXRhfS4iKTsKICAgICAgX3dyaXRlSW50SW50ZXJuYWwoaW5kZXgpOwogICAgfQogIH0KCiAgdm9pZCBfd3JpdGVGdW5jdGlvbk5vZGUoaXIuRnVuY3Rpb25Ob2RlIHZhbHVlLCBfTWVtYmVyRGF0YSBtZW1iZXJEYXRhKSB7CiAgICBpci5UcmVlTm9kZSBwYXJlbnQgPSB2YWx1ZS5wYXJlbnQ7CiAgICBpZiAocGFyZW50IGlzIGlyLlByb2NlZHVyZSkgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX0Z1bmN0aW9uTm9kZUtpbmQucHJvY2VkdXJlKTsKICAgICAgX3dyaXRlTWVtYmVyTm9kZShwYXJlbnQpOwogICAgfSBlbHNlIGlmIChwYXJlbnQgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9GdW5jdGlvbk5vZGVLaW5kLmNvbnN0cnVjdG9yKTsKICAgICAgX3dyaXRlTWVtYmVyTm9kZShwYXJlbnQpOwogICAgfSBlbHNlIGlmIChwYXJlbnQgaXMgaXIuRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfRnVuY3Rpb25Ob2RlS2luZC5mdW5jdGlvbkV4cHJlc3Npb24pOwogICAgICBfd3JpdGVUcmVlTm9kZShwYXJlbnQsIG1lbWJlckRhdGEpOwogICAgfSBlbHNlIGlmIChwYXJlbnQgaXMgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbikgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX0Z1bmN0aW9uTm9kZUtpbmQuZnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICAgIF93cml0ZVRyZWVOb2RlKHBhcmVudCwgbWVtYmVyRGF0YSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJVbnN1cHBvcnRlZCBGdW5jdGlvbk5vZGUgcGFyZW50ICR7cGFyZW50LnJ1bnRpbWVUeXBlfSIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVR5cGVQYXJhbWV0ZXJOb2RlKGlyLlR5cGVQYXJhbWV0ZXIgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLnR5cGVQYXJhbWV0ZXJOb2RlKTsKICAgIF93cml0ZVR5cGVQYXJhbWV0ZXIodmFsdWUsIG51bGwpOwogIH0KCiAgdm9pZCBfd3JpdGVUeXBlUGFyYW1ldGVyKGlyLlR5cGVQYXJhbWV0ZXIgdmFsdWUsIF9NZW1iZXJEYXRhIG1lbWJlckRhdGEpIHsKICAgIGlyLlRyZWVOb2RlIHBhcmVudCA9IHZhbHVlLnBhcmVudDsKICAgIGlmIChwYXJlbnQgaXMgaXIuQ2xhc3MpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9UeXBlUGFyYW1ldGVyS2luZC5jbHMpOwogICAgICBfd3JpdGVDbGFzc05vZGUocGFyZW50KTsKICAgICAgX3dyaXRlSW50SW50ZXJuYWwocGFyZW50LnR5cGVQYXJhbWV0ZXJzLmluZGV4T2YodmFsdWUpKTsKICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIGlyLkZ1bmN0aW9uTm9kZSkgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX1R5cGVQYXJhbWV0ZXJLaW5kLmZ1bmN0aW9uTm9kZSk7CiAgICAgIF93cml0ZUZ1bmN0aW9uTm9kZShwYXJlbnQsIG1lbWJlckRhdGEpOwogICAgICBfd3JpdGVJbnRJbnRlcm5hbChwYXJlbnQudHlwZVBhcmFtZXRlcnMuaW5kZXhPZih2YWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVW5zdXBwb3J0ZWQgVHlwZVBhcmFtZXRlciBwYXJlbnQgJHtwYXJlbnQucnVudGltZVR5cGV9Iik7CiAgICB9CiAgfQoKICB2b2lkIF93cml0ZURhdGFLaW5kKERhdGFLaW5kIGtpbmQpIHsKICAgIGlmICh1c2VEYXRhS2luZHMpIF93cml0ZUVudW1JbnRlcm5hbChraW5kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMaWJyYXJ5KEluZGV4ZWRMaWJyYXJ5IHZhbHVlKSB7CiAgICBfZW50aXR5V3JpdGVyLndyaXRlTGlicmFyeVRvRGF0YVNpbmsodGhpcywgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNsYXNzKEluZGV4ZWRDbGFzcyB2YWx1ZSkgewogICAgX2VudGl0eVdyaXRlci53cml0ZUNsYXNzVG9EYXRhU2luayh0aGlzLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHlwZWRlZihJbmRleGVkVHlwZWRlZiB2YWx1ZSkgewogICAgX2VudGl0eVdyaXRlci53cml0ZVR5cGVkZWZUb0RhdGFTaW5rKHRoaXMsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVNZW1iZXIoSW5kZXhlZE1lbWJlciB2YWx1ZSkgewogICAgX2VudGl0eVdyaXRlci53cml0ZU1lbWJlclRvRGF0YVNpbmsodGhpcywgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVR5cGVWYXJpYWJsZShJbmRleGVkVHlwZVZhcmlhYmxlIHZhbHVlKSB7CiAgICBfZW50aXR5V3JpdGVyLndyaXRlVHlwZVZhcmlhYmxlVG9EYXRhU2luayh0aGlzLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTG9jYWwoTG9jYWwgbG9jYWwpIHsKICAgIGlmIChsb2NhbCBpcyBKTG9jYWwpIHsKICAgICAgd3JpdGVFbnVtKExvY2FsS2luZC5qTG9jYWwpOwogICAgICB3cml0ZU1lbWJlcihsb2NhbC5tZW1iZXJDb250ZXh0KTsKICAgICAgd3JpdGVJbnQobG9jYWwubG9jYWxJbmRleCk7CiAgICB9IGVsc2UgaWYgKGxvY2FsIGlzIFRoaXNMb2NhbCkgewogICAgICB3cml0ZUVudW0oTG9jYWxLaW5kLnRoaXNMb2NhbCk7CiAgICAgIHdyaXRlQ2xhc3MobG9jYWwuZW5jbG9zaW5nQ2xhc3MpOwogICAgfSBlbHNlIGlmIChsb2NhbCBpcyBCb3hMb2NhbCkgewogICAgICB3cml0ZUVudW0oTG9jYWxLaW5kLmJveExvY2FsKTsKICAgICAgd3JpdGVDbGFzcyhsb2NhbC5jb250YWluZXIpOwogICAgfSBlbHNlIGlmIChsb2NhbCBpcyBBbm9ueW1vdXNDbG9zdXJlTG9jYWwpIHsKICAgICAgd3JpdGVFbnVtKExvY2FsS2luZC5hbm9ueW1vdXNDbG9zdXJlTG9jYWwpOwogICAgICB3cml0ZUNsYXNzKGxvY2FsLmNsb3N1cmVDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGxvY2FsIGlzIFR5cGVWYXJpYWJsZUxvY2FsKSB7CiAgICAgIHdyaXRlRW51bShMb2NhbEtpbmQudHlwZVZhcmlhYmxlTG9jYWwpOwogICAgICB3cml0ZURhcnRUeXBlKGxvY2FsLnR5cGVWYXJpYWJsZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5zdXBwb3J0ZWQgbG9jYWwgJHtsb2NhbC5ydW50aW1lVHlwZX0iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5jb25zdGFudCk7CiAgICBfd3JpdGVDb25zdGFudCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlRG91YmxlVmFsdWUoZG91YmxlIHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5kb3VibGUpOwogICAgX3dyaXRlRG91YmxlVmFsdWUodmFsdWUpOwogIH0KCiAgdm9pZCBfd3JpdGVEb3VibGVWYWx1ZShkb3VibGUgdmFsdWUpIHsKICAgIEJ5dGVEYXRhIGRhdGEgPSBuZXcgQnl0ZURhdGEoOCk7CiAgICBkYXRhLnNldEZsb2F0NjQoMCwgdmFsdWUpOwogICAgd3JpdGVJbnQoZGF0YS5nZXRVaW50MTYoMCkpOwogICAgd3JpdGVJbnQoZGF0YS5nZXRVaW50MTYoMikpOwogICAgd3JpdGVJbnQoZGF0YS5nZXRVaW50MTYoNCkpOwogICAgd3JpdGVJbnQoZGF0YS5nZXRVaW50MTYoNikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUludGVnZXJWYWx1ZShpbnQgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmludCk7CiAgICBfd3JpdGVCaWdJbnQobmV3IEJpZ0ludC5mcm9tKHZhbHVlKSk7CiAgfQoKICB2b2lkIF93cml0ZUJpZ0ludChCaWdJbnQgdmFsdWUpIHsKICAgIHdyaXRlU3RyaW5nKHZhbHVlLnRvU3RyaW5nKCkpOwogIH0KCiAgdm9pZCBfd3JpdGVDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICBfY29uc3RhbnRJbmRleC53cml0ZSh2YWx1ZSwgX3dyaXRlQ29uc3RhbnRJbnRlcm5hbCk7CiAgfQoKICB2b2lkIF93cml0ZUNvbnN0YW50SW50ZXJuYWwoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgewogICAgX3dyaXRlRW51bUludGVybmFsKHZhbHVlLmtpbmQpOwogICAgc3dpdGNoICh2YWx1ZS5raW5kKSB7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuQk9PTDoKICAgICAgICBCb29sQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlQm9vbChjb25zdGFudC5ib29sVmFsdWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLklOVDoKICAgICAgICBJbnRDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgX3dyaXRlQmlnSW50KGNvbnN0YW50LmludFZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5ET1VCTEU6CiAgICAgICAgRG91YmxlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIF93cml0ZURvdWJsZVZhbHVlKGNvbnN0YW50LmRvdWJsZVZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5TVFJJTkc6CiAgICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlU3RyaW5nKGNvbnN0YW50LnN0cmluZ1ZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5OVUxMOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkZVTkNUSU9OOgogICAgICAgIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIEluZGV4ZWRGdW5jdGlvbiBmdW5jdGlvbiA9IGNvbnN0YW50LmVsZW1lbnQ7CiAgICAgICAgd3JpdGVNZW1iZXIoZnVuY3Rpb24pOwogICAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTElTVDoKICAgICAgICBMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZSk7CiAgICAgICAgd3JpdGVDb25zdGFudHMoY29uc3RhbnQuZW50cmllcyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuU0VUOgogICAgICAgIGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0U2V0Q29uc3RhbnQgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGUpOwogICAgICAgIHdyaXRlQ29uc3RhbnQoY29uc3RhbnQuZW50cmllcyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTUFQOgogICAgICAgIGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGUpOwogICAgICAgIHdyaXRlQ29uc3RhbnQoY29uc3RhbnQua2V5TGlzdCk7CiAgICAgICAgd3JpdGVDb25zdGFudHMoY29uc3RhbnQudmFsdWVzKTsKICAgICAgICB3cml0ZUNvbnN0YW50T3JOdWxsKGNvbnN0YW50LnByb3RvVmFsdWUpOwogICAgICAgIHdyaXRlQm9vbChjb25zdGFudC5vbmx5U3RyaW5nS2V5cyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuQ09OU1RSVUNURUQ6CiAgICAgICAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC50eXBlKTsKICAgICAgICB3cml0ZU1lbWJlck1hcChjb25zdGFudC5maWVsZHMsCiAgICAgICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBDb25zdGFudFZhbHVlIHZhbHVlKSA9PiB3cml0ZUNvbnN0YW50KHZhbHVlKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuVFlQRToKICAgICAgICBUeXBlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQucmVwcmVzZW50ZWRUeXBlKTsKICAgICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLklOU1RBTlRJQVRJT046CiAgICAgICAgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZURhcnRUeXBlcyhjb25zdGFudC50eXBlQXJndW1lbnRzKTsKICAgICAgICB3cml0ZUNvbnN0YW50KGNvbnN0YW50LmZ1bmN0aW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5OT05fQ09OU1RBTlQ6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuSU5URVJDRVBUT1I6CiAgICAgICAgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVDbGFzcyhjb25zdGFudC5jbHMpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkRFRkVSUkVEX0dMT0JBTDoKICAgICAgICBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZUNvbnN0YW50KGNvbnN0YW50LnJlZmVyZW5jZWQpOwogICAgICAgIHdyaXRlT3V0cHV0VW5pdFJlZmVyZW5jZShjb25zdGFudC51bml0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5EVU1NWV9JTlRFUkNFUFRPUjoKICAgICAgICBEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlQWJzdHJhY3RWYWx1ZShjb25zdGFudC5hYnN0cmFjdFZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5VTlJFQUNIQUJMRToKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5KU19OQU1FOgogICAgICAgIEpzTmFtZUNvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZUpzTm9kZShjb25zdGFudC5uYW1lKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CgogIHZvaWQgX3dyaXRlU3RyaW5nKFN0cmluZyB2YWx1ZSkgewogICAgX3N0cmluZ0luZGV4LndyaXRlKHZhbHVlLCBfd3JpdGVTdHJpbmdJbnRlcm5hbCk7CiAgfQoKICB2b2lkIF93cml0ZVVyaShVcmkgdmFsdWUpIHsKICAgIF91cmlJbmRleC53cml0ZSh2YWx1ZSwgX3dyaXRlVXJpSW50ZXJuYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUltcG9ydChJbXBvcnRFbnRpdHkgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmltcG9ydCk7CiAgICBfd3JpdGVJbXBvcnQodmFsdWUpOwogIH0KCiAgdm9pZCBfd3JpdGVJbXBvcnQoSW1wb3J0RW50aXR5IHZhbHVlKSB7CiAgICBfaW1wb3J0SW5kZXgud3JpdGUodmFsdWUsIF93cml0ZUltcG9ydEludGVybmFsKTsKICB9CgogIHZvaWQgX3dyaXRlSW1wb3J0SW50ZXJuYWwoSW1wb3J0RW50aXR5IHZhbHVlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBEbyB3ZSBuZWVkIHRvIHNlcmlhbGl6ZSBub24tZGVmZXJyZWQgaW1wb3J0cz8KICAgIHdyaXRlU3RyaW5nT3JOdWxsKHZhbHVlLm5hbWUpOwogICAgX3dyaXRlVXJpKHZhbHVlLnVyaSk7CiAgICBfd3JpdGVVcmkodmFsdWUuZW5jbG9zaW5nTGlicmFyeVVyaSk7CiAgICBfd3JpdGVCb29sKHZhbHVlLmlzRGVmZXJyZWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckVudGl0eVdyaXRlcihFbnRpdHlXcml0ZXIgd3JpdGVyKSB7CiAgICBhc3NlcnQod3JpdGVyICE9IG51bGwpOwogICAgX2VudGl0eVdyaXRlciA9IHdyaXRlcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb2RlZ2VuV3JpdGVyKENvZGVnZW5Xcml0ZXIgd3JpdGVyKSB7CiAgICBhc3NlcnQod3JpdGVyICE9IG51bGwpOwogICAgYXNzZXJ0KF9jb2RlZ2VuV3JpdGVyID09IG51bGwpOwogICAgX2NvZGVnZW5Xcml0ZXIgPSB3cml0ZXI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlT3V0cHV0VW5pdFJlZmVyZW5jZShPdXRwdXRVbml0IHZhbHVlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgX2NvZGVnZW5Xcml0ZXIgIT0gbnVsbCwKICAgICAgICAiQ2FuIG5vdCBzZXJpYWxpemUgYW4gT3V0cHV0VW5pdCByZWZlcmVuY2UgIgogICAgICAgICJ3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHdyaXRlci4iKTsKICAgIF9jb2RlZ2VuV3JpdGVyLndyaXRlT3V0cHV0VW5pdFJlZmVyZW5jZSh0aGlzLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQWJzdHJhY3RWYWx1ZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBhc3NlcnQoX2NvZGVnZW5Xcml0ZXIgIT0gbnVsbCwKICAgICAgICAiQ2FuIG5vdCBzZXJpYWxpemUgYW4gQWJzdHJhY3RWYWx1ZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHdyaXRlci4iKTsKICAgIF9jb2RlZ2VuV3JpdGVyLndyaXRlQWJzdHJhY3RWYWx1ZSh0aGlzLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlSnNOb2RlKGpzLk5vZGUgdmFsdWUpIHsKICAgIGFzc2VydChfY29kZWdlbldyaXRlciAhPSBudWxsLAogICAgICAgICJDYW4gbm90IHNlcmlhbGl6ZSBhIEpTIG5kb2Ugd2l0aG91dCBhIHJlZ2lzdGVyZWQgY29kZWdlbiB3cml0ZXIuIik7CiAgICBfY29kZWdlbldyaXRlci53cml0ZUpzTm9kZSh0aGlzLCB2YWx1ZSk7CiAgfQoKICAvLy8gQWN0dWFsIHNlcmlhbGl6YXRpb24gb2YgYSBzZWN0aW9uIGJlZ2luIHRhZywgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF9iZWdpbihTdHJpbmcgdGFnKTsKCiAgLy8vIEFjdHVhbCBzZXJpYWxpemF0aW9uIG9mIGEgc2VjdGlvbiBlbmQgdGFnLCBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogIHZvaWQgX2VuZChTdHJpbmcgdGFnKTsKCiAgLy8vIEFjdHVhbCBzZXJpYWxpemF0aW9uIG9mIGEgVVJJIHZhbHVlLCBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogIHZvaWQgX3dyaXRlVXJpSW50ZXJuYWwoVXJpIHZhbHVlKTsKCiAgLy8vIEFjdHVhbCBzZXJpYWxpemF0aW9uIG9mIGEgU3RyaW5nIHZhbHVlLCBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogIHZvaWQgX3dyaXRlU3RyaW5nSW50ZXJuYWwoU3RyaW5nIHZhbHVlKTsKCiAgLy8vIEFjdHVhbCBzZXJpYWxpemF0aW9uIG9mIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUsIGltcGxlbWVudGVkIGJ5CiAgLy8vIHN1YmNsYXNzZXMuCiAgdm9pZCBfd3JpdGVJbnRJbnRlcm5hbChpbnQgdmFsdWUpOwoKICAvLy8gQWN0dWFsIHNlcmlhbGl6YXRpb24gb2YgYW4gZW51bSB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF93cml0ZUVudW1JbnRlcm5hbChkeW5hbWljIHZhbHVlKTsKfQqCgwBOTjwBHgFJGUxODQZMGxsBMCIBMyoBUUEWAUYwASQeKyotAS4BNSABKgEjIgFHMDgyLDk4OwQBDBsjIh4GGBwWEwYEAQwZGBEBLyFFBgQBDDY4NCUfCSguBAEmKjRJMAQBDDJHJAQBDCspGiQiBAEMQCc1BAEXSCEZGEgIJA07BgQBDEcrOQQBG0chGRhQCCgNQQYEAQwqKR0EASs9BAEzKRcxHC8NNTEvBgQBDCgoHAQBKS8eBAEMLCoeBAEtLx4EAQwsKh4EAS0gBAEMIigfBAEMHxsjFwQBICYEAQwdGyIWBAEMIxslGQQBDB0bLCUeBAEMKichBAEMMz4EASczJycEAQw5HhlABgQBDD0hGhkTDR8qQggGBAEMTiEXGRMNHC9AEgoGBAExHyMcRiwIHgYePAQBQx0tHiUwHzIyRTArNi0sNy4tMjc0EksgDS4sOA4ZPiYgBgQBSyciNyArOSAyQCozQSoNIkQGBAEMODAmBAFNJx4yHz8sOy4/DSJFBgQBJzAEAQwsNwQBDCg1BAEMLDcEAQwqNgQBDDY8BAEMIRsjKCIlJigkJSMxMiYtLikNTAYEAQwsJxsEAQwoJR4EASklHyEhISEEAQwmIioEASQjBAEtOQQBNSQaIywnDyIrKQ8lLjEPJS4rDyMPJzA1HyYPIywmKg8iQCYpDyJAJikpMiwPKjMmKFEPIywxJg8sNTAqDysPKjMiDy42LDEPMDg0DyoPJi4kDwYEASQ1BAEeLwQBDCklGQQBKjUEATJKIxoqIgQBDDMcHAQBDDUcJB0EAQw0DCA1MToEAQwxI1Q0BAEMJCNNLQQBThsBTBkBRiUBSSsBSxIlAUgqAgE1cGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9hYnN0cmFjdF9zaW5rLmRhcnRAc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc2VyaWFsaXphdGlvbi9hYnN0cmFjdF9zb3VyY2UuZGFydMAAZq4vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIG9mIFtEYXRhU291cmNlXSB1c2luZyBbRGF0YVNvdXJjZU1peGluXSB0byBpbXBsZW1lbnQKLy8vIGNvbnZlbmllbmNlIG1ldGhvZHMuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGF0YVNvdXJjZSBleHRlbmRzIERhdGFTb3VyY2VNaXhpbgogICAgaW1wbGVtZW50cyBEYXRhU291cmNlIHsKICBmaW5hbCBib29sIHVzZURhdGFLaW5kczsKICBFbnRpdHlSZWFkZXIgX2VudGl0eVJlYWRlciA9IGNvbnN0IEVudGl0eVJlYWRlcigpOwogIENvbXBvbmVudExvb2t1cCBfY29tcG9uZW50TG9va3VwOwogIEVudGl0eUxvb2t1cCBfZW50aXR5TG9va3VwOwogIExvY2FsTG9va3VwIF9sb2NhbExvb2t1cDsKICBDb2RlZ2VuUmVhZGVyIF9jb2RlZ2VuUmVhZGVyOwoKICBJbmRleGVkU291cmNlPFN0cmluZz4gX3N0cmluZ0luZGV4OwogIEluZGV4ZWRTb3VyY2U8VXJpPiBfdXJpSW5kZXg7CiAgSW5kZXhlZFNvdXJjZTxfTWVtYmVyRGF0YT4gX21lbWJlck5vZGVJbmRleDsKICBJbmRleGVkU291cmNlPEltcG9ydEVudGl0eT4gX2ltcG9ydEluZGV4OwogIEluZGV4ZWRTb3VyY2U8Q29uc3RhbnRWYWx1ZT4gX2NvbnN0YW50SW5kZXg7CgogIE1hcDxUeXBlLCBJbmRleGVkU291cmNlPiBfZ2VuZXJhbENhY2hlcyA9IHt9OwoKICBpci5NZW1iZXIgX2N1cnJlbnRNZW1iZXJDb250ZXh0OwogIF9NZW1iZXJEYXRhIF9jdXJyZW50TWVtYmVyRGF0YTsKCiAgQWJzdHJhY3REYXRhU291cmNlKHt0aGlzLnVzZURhdGFLaW5kczogZmFsc2V9KSB7CiAgICBfc3RyaW5nSW5kZXggPSBuZXcgSW5kZXhlZFNvdXJjZTxTdHJpbmc+KHRoaXMpOwogICAgX3VyaUluZGV4ID0gbmV3IEluZGV4ZWRTb3VyY2U8VXJpPih0aGlzKTsKICAgIF9tZW1iZXJOb2RlSW5kZXggPSBuZXcgSW5kZXhlZFNvdXJjZTxfTWVtYmVyRGF0YT4odGhpcyk7CiAgICBfaW1wb3J0SW5kZXggPSBuZXcgSW5kZXhlZFNvdXJjZTxJbXBvcnRFbnRpdHk+KHRoaXMpOwogICAgX2NvbnN0YW50SW5kZXggPSBuZXcgSW5kZXhlZFNvdXJjZTxDb25zdGFudFZhbHVlPih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW4oU3RyaW5nIHRhZykgewogICAgaWYgKHVzZURhdGFLaW5kcykgX2JlZ2luKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZChTdHJpbmcgdGFnKSB7CiAgICBpZiAodXNlRGF0YUtpbmRzKSBfZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29tcG9uZW50TG9va3VwKENvbXBvbmVudExvb2t1cCBjb21wb25lbnRMb29rdXApIHsKICAgIGFzc2VydChfY29tcG9uZW50TG9va3VwID09IG51bGwpOwogICAgX2NvbXBvbmVudExvb2t1cCA9IGNvbXBvbmVudExvb2t1cDsKICB9CgogIENvbXBvbmVudExvb2t1cCBnZXQgY29tcG9uZW50TG9va3VwIHsKICAgIGFzc2VydChfY29tcG9uZW50TG9va3VwICE9IG51bGwpOwogICAgcmV0dXJuIF9jb21wb25lbnRMb29rdXA7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRW50aXR5TG9va3VwKEVudGl0eUxvb2t1cCBlbnRpdHlMb29rdXApIHsKICAgIGFzc2VydChfZW50aXR5TG9va3VwID09IG51bGwpOwogICAgX2VudGl0eUxvb2t1cCA9IGVudGl0eUxvb2t1cDsKICB9CgogIEVudGl0eUxvb2t1cCBnZXQgZW50aXR5TG9va3VwIHsKICAgIGFzc2VydChfZW50aXR5TG9va3VwICE9IG51bGwpOwogICAgcmV0dXJuIF9lbnRpdHlMb29rdXA7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9jYWxMb29rdXAoTG9jYWxMb29rdXAgbG9jYWxMb29rdXApIHsKICAgIGFzc2VydChfbG9jYWxMb29rdXAgPT0gbnVsbCk7CiAgICBfbG9jYWxMb29rdXAgPSBsb2NhbExvb2t1cDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJFbnRpdHlSZWFkZXIoRW50aXR5UmVhZGVyIHJlYWRlcikgewogICAgYXNzZXJ0KHJlYWRlciAhPSBudWxsKTsKICAgIF9lbnRpdHlSZWFkZXIgPSByZWFkZXI7CiAgfQoKICBMb2NhbExvb2t1cCBnZXQgbG9jYWxMb29rdXAgewogICAgYXNzZXJ0KF9sb2NhbExvb2t1cCAhPSBudWxsKTsKICAgIHJldHVybiBfbG9jYWxMb29rdXA7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29kZWdlblJlYWRlcihDb2RlZ2VuUmVhZGVyIHJlYWRlcikgewogICAgYXNzZXJ0KHJlYWRlciAhPSBudWxsKTsKICAgIGFzc2VydChfY29kZWdlblJlYWRlciA9PSBudWxsKTsKICAgIF9jb2RlZ2VuUmVhZGVyID0gcmVhZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZXJlZ2lzdGVyQ29kZWdlblJlYWRlcihDb2RlZ2VuUmVhZGVyIHJlYWRlcikgewogICAgYXNzZXJ0KF9jb2RlZ2VuUmVhZGVyID09IHJlYWRlcik7CiAgICBfY29kZWdlblJlYWRlciA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUIGluTWVtYmVyQ29udGV4dDxUPihpci5NZW1iZXIgY29udGV4dCwgVCBmKCkpIHsKICAgIGlyLk1lbWJlciBvbGRNZW1iZXJDb250ZXh0ID0gX2N1cnJlbnRNZW1iZXJDb250ZXh0OwogICAgX01lbWJlckRhdGEgb2xkTWVtYmVyRGF0YSA9IF9jdXJyZW50TWVtYmVyRGF0YTsKICAgIF9jdXJyZW50TWVtYmVyQ29udGV4dCA9IGNvbnRleHQ7CiAgICBfY3VycmVudE1lbWJlckRhdGEgPSBudWxsOwogICAgVCByZXN1bHQgPSBmKCk7CiAgICBfY3VycmVudE1lbWJlckRhdGEgPSBvbGRNZW1iZXJEYXRhOwogICAgX2N1cnJlbnRNZW1iZXJDb250ZXh0ID0gb2xkTWVtYmVyQ29udGV4dDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBfTWVtYmVyRGF0YSBnZXQgY3VycmVudE1lbWJlckRhdGEgewogICAgYXNzZXJ0KF9jdXJyZW50TWVtYmVyQ29udGV4dCAhPSBudWxsLAogICAgICAgICJEYXRhU2luayBoYXMgbm8gY3VycmVudCBtZW1iZXIgY29udGV4dC4iKTsKICAgIHJldHVybiBfY3VycmVudE1lbWJlckRhdGEgPz89IF9nZXRNZW1iZXJEYXRhKF9jdXJyZW50TWVtYmVyQ29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFIHJlYWRDYWNoZWQ8RT4oRSBmKCkpIHsKICAgIEluZGV4ZWRTb3VyY2Ugc291cmNlID0gX2dlbmVyYWxDYWNoZXNbRV0gPz89IG5ldyBJbmRleGVkU291cmNlPEU+KHRoaXMpOwogICAgcmV0dXJuIHNvdXJjZS5yZWFkKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZExpYnJhcnkgcmVhZExpYnJhcnkoKSB7CiAgICByZXR1cm4gX2VudGl0eVJlYWRlci5yZWFkTGlicmFyeUZyb21EYXRhU291cmNlKHRoaXMsIGVudGl0eUxvb2t1cCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkQ2xhc3MgcmVhZENsYXNzKCkgewogICAgcmV0dXJuIF9lbnRpdHlSZWFkZXIucmVhZENsYXNzRnJvbURhdGFTb3VyY2UodGhpcywgZW50aXR5TG9va3VwKTsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRUeXBlZGVmIHJlYWRUeXBlZGVmKCkgewogICAgcmV0dXJuIF9lbnRpdHlSZWFkZXIucmVhZFR5cGVkZWZGcm9tRGF0YVNvdXJjZSh0aGlzLCBlbnRpdHlMb29rdXApOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZE1lbWJlciByZWFkTWVtYmVyKCkgewogICAgcmV0dXJuIF9lbnRpdHlSZWFkZXIucmVhZE1lbWJlckZyb21EYXRhU291cmNlKHRoaXMsIGVudGl0eUxvb2t1cCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkVHlwZVZhcmlhYmxlIHJlYWRUeXBlVmFyaWFibGUoKSB7CiAgICByZXR1cm4gX2VudGl0eVJlYWRlci5yZWFkVHlwZVZhcmlhYmxlRnJvbURhdGFTb3VyY2UodGhpcywgZW50aXR5TG9va3VwKTsKICB9CgogIExpc3Q8RGFydFR5cGU+IF9yZWFkRGFydFR5cGVzKAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzID0gbmV3IExpc3Q8RGFydFR5cGU+KGNvdW50KTsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykgewogICAgICB0eXBlc1tpbmRleF0gPSBfcmVhZERhcnRUeXBlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgICByZXR1cm4gdHlwZXM7CiAgfQoKICBMaXN0PGlyLkRhcnRUeXBlPiBfcmVhZERhcnRUeXBlTm9kZXMoCiAgICAgIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlcyA9IG5ldyBMaXN0PGlyLkRhcnRUeXBlPihjb3VudCk7CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4KyspIHsKICAgICAgdHlwZXNbaW5kZXhdID0gX3JlYWREYXJ0VHlwZU5vZGUoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0KICAgIHJldHVybiB0eXBlczsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gcmVhZFNvdXJjZVNwYW4oKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5zb3VyY2VTcGFuKTsKICAgIFVyaSB1cmkgPSBfcmVhZFVyaSgpOwogICAgaW50IGJlZ2luID0gX3JlYWRJbnRJbnRlcm5hbCgpOwogICAgaW50IGVuZCA9IF9yZWFkSW50SW50ZXJuYWwoKTsKICAgIHJldHVybiBuZXcgU291cmNlU3Bhbih1cmksIGJlZ2luLCBlbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgcmVhZERhcnRUeXBlKHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5kYXJ0VHlwZSk7CiAgICBEYXJ0VHlwZSB0eXBlID0gX3JlYWREYXJ0VHlwZShbXSk7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsIHx8IGFsbG93TnVsbCk7CiAgICByZXR1cm4gdHlwZTsKICB9CgogIERhcnRUeXBlIF9yZWFkRGFydFR5cGUoTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBEYXJ0VHlwZUtpbmQga2luZCA9IHJlYWRFbnVtKERhcnRUeXBlS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgRGFydFR5cGVLaW5kLm5vbmU6CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGNhc2UgRGFydFR5cGVLaW5kLnZvaWRUeXBlOgogICAgICAgIHJldHVybiBjb25zdCBWb2lkVHlwZSgpOwogICAgICBjYXNlIERhcnRUeXBlS2luZC50eXBlVmFyaWFibGU6CiAgICAgICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGVUeXBlKHJlYWRUeXBlVmFyaWFibGUoKSk7CiAgICAgIGNhc2UgRGFydFR5cGVLaW5kLmZ1bmN0aW9uVHlwZVZhcmlhYmxlOgogICAgICAgIGludCBpbmRleCA9IHJlYWRJbnQoKTsKICAgICAgICBhc3NlcnQoMCA8PSBpbmRleCAmJiBpbmRleCA8IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogICAgICAgIHJldHVybiBmdW5jdGlvblR5cGVWYXJpYWJsZXNbaW5kZXhdOwogICAgICBjYXNlIERhcnRUeXBlS2luZC5mdW5jdGlvblR5cGU6CiAgICAgICAgaW50IHR5cGVWYXJpYWJsZUNvdW50ID0gcmVhZEludCgpOwogICAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHR5cGVWYXJpYWJsZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4uZ2VuZXJhdGUodHlwZVZhcmlhYmxlQ291bnQsCiAgICAgICAgICAgICAgICAoaW50IGluZGV4KSA9PiBuZXcgRnVuY3Rpb25UeXBlVmFyaWFibGUoaW5kZXgpKTsKICAgICAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4uZnJvbShmdW5jdGlvblR5cGVWYXJpYWJsZXMpCiAgICAgICAgICAgICAgLi5hZGRBbGwodHlwZVZhcmlhYmxlcyk7CiAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVWYXJpYWJsZUNvdW50OyBpbmRleCsrKSB7CiAgICAgICAgICB0eXBlVmFyaWFibGVzW2luZGV4XS5ib3VuZCA9IF9yZWFkRGFydFR5cGUoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICB9CiAgICAgICAgRGFydFR5cGUgcmV0dXJuVHlwZSA9IF9yZWFkRGFydFR5cGUoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJUeXBlcyA9IF9yZWFkRGFydFR5cGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgTGlzdDxEYXJ0VHlwZT4gb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyA9CiAgICAgICAgICAgIF9yZWFkRGFydFR5cGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgTGlzdDxEYXJ0VHlwZT4gbmFtZWRQYXJhbWV0ZXJUeXBlcyA9CiAgICAgICAgICAgIF9yZWFkRGFydFR5cGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgICAgIG5ldyBMaXN0PFN0cmluZz4obmFtZWRQYXJhbWV0ZXJUeXBlcy5sZW5ndGgpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnNbaV0gPSByZWFkU3RyaW5nKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKAogICAgICAgICAgICByZXR1cm5UeXBlLAogICAgICAgICAgICBwYXJhbWV0ZXJUeXBlcywKICAgICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywKICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgICAgICBuYW1lZFBhcmFtZXRlclR5cGVzLAogICAgICAgICAgICB0eXBlVmFyaWFibGVzKTsKCiAgICAgIGNhc2UgRGFydFR5cGVLaW5kLmludGVyZmFjZVR5cGU6CiAgICAgICAgSW5kZXhlZENsYXNzIGNscyA9IHJlYWRDbGFzcygpOwogICAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBfcmVhZERhcnRUeXBlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjbHMsIHR5cGVBcmd1bWVudHMpOwogICAgICBjYXNlIERhcnRUeXBlS2luZC50eXBlZGVmOgogICAgICAgIEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYgPSByZWFkVHlwZWRlZigpOwogICAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBfcmVhZERhcnRUeXBlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIERhcnRUeXBlIHVuYWxpYXNlZCA9IF9yZWFkRGFydFR5cGUoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICByZXR1cm4gbmV3IFR5cGVkZWZUeXBlKHR5cGVkZWYsIHR5cGVBcmd1bWVudHMsIHVuYWxpYXNlZCk7CiAgICAgIGNhc2UgRGFydFR5cGVLaW5kLmR5bmFtaWNUeXBlOgogICAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICBjYXNlIERhcnRUeXBlS2luZC5mdXR1cmVPcjoKICAgICAgICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQgPSBfcmVhZERhcnRUeXBlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmVPclR5cGUodHlwZUFyZ3VtZW50KTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIERhcnRUeXBlS2luZCAka2luZCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgcmVhZERhcnRUeXBlTm9kZSh7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuZGFydFR5cGVOb2RlKTsKICAgIGlyLkRhcnRUeXBlIHR5cGUgPSBfcmVhZERhcnRUeXBlTm9kZShbXSk7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsIHx8IGFsbG93TnVsbCk7CiAgICByZXR1cm4gdHlwZTsKICB9CgogIGlyLkRhcnRUeXBlIF9yZWFkRGFydFR5cGVOb2RlKExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBEYXJ0VHlwZU5vZGVLaW5kIGtpbmQgPSByZWFkRW51bShEYXJ0VHlwZU5vZGVLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLm5vbmU6CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC52b2lkVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgaXIuVm9pZFR5cGUoKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmludmFsaWRUeXBlOgogICAgICAgIHJldHVybiBjb25zdCBpci5JbnZhbGlkVHlwZSgpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQuYm90dG9tVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgaXIuQm90dG9tVHlwZSgpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQuZG9lc05vdENvbXBsZXRlOgogICAgICAgIHJldHVybiBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKCk7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC50eXBlUGFyYW1ldGVyVHlwZToKICAgICAgICBpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSByZWFkVHlwZVBhcmFtZXRlck5vZGUoKTsKICAgICAgICBpci5EYXJ0VHlwZSBwcm9tb3RlZEJvdW5kID0gX3JlYWREYXJ0VHlwZU5vZGUoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICByZXR1cm4gbmV3IGlyLlR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIsIHByb21vdGVkQm91bmQpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQuZnVuY3Rpb25UeXBlVmFyaWFibGU6CiAgICAgICAgaW50IGluZGV4ID0gcmVhZEludCgpOwogICAgICAgIGFzc2VydCgwIDw9IGluZGV4ICYmIGluZGV4IDwgZnVuY3Rpb25UeXBlVmFyaWFibGVzLmxlbmd0aCk7CiAgICAgICAgaXIuRGFydFR5cGUgcHJvbW90ZWRCb3VuZCA9IF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBpci5UeXBlUGFyYW1ldGVyVHlwZSgKICAgICAgICAgICAgZnVuY3Rpb25UeXBlVmFyaWFibGVzW2luZGV4XSwgcHJvbW90ZWRCb3VuZCk7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC5mdW5jdGlvblR5cGU6CiAgICAgICAgYmVnaW4oZnVuY3Rpb25UeXBlTm9kZVRhZyk7CiAgICAgICAgaW50IHR5cGVQYXJhbWV0ZXJDb3VudCA9IHJlYWRJbnQoKTsKICAgICAgICBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0KICAgICAgICAgICAgbmV3IExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4uZ2VuZXJhdGUoCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyQ291bnQsIChpbnQgaW5kZXgpID0+IG5ldyBpci5UeXBlUGFyYW1ldGVyKCkpOwogICAgICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyA9CiAgICAgICAgICAgIG5ldyBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+LmZyb20oZnVuY3Rpb25UeXBlVmFyaWFibGVzKQogICAgICAgICAgICAgIC4uYWRkQWxsKHR5cGVQYXJhbWV0ZXJzKTsKICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZVBhcmFtZXRlckNvdW50OyBpbmRleCsrKSB7CiAgICAgICAgICB0eXBlUGFyYW1ldGVyc1tpbmRleF0ubmFtZSA9IHJlYWRTdHJpbmcoKTsKICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzW2luZGV4XS5ib3VuZCA9CiAgICAgICAgICAgICAgX3JlYWREYXJ0VHlwZU5vZGUoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzW2luZGV4XS5kZWZhdWx0VHlwZSA9CiAgICAgICAgICAgICAgX3JlYWREYXJ0VHlwZU5vZGUoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICB9CiAgICAgICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSA9IF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSByZWFkSW50KCk7CiAgICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gcG9zaXRpb25hbFBhcmFtZXRlcnMgPQogICAgICAgICAgICBfcmVhZERhcnRUeXBlTm9kZXMoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICBpbnQgbmFtZWRQYXJhbWV0ZXJDb3VudCA9IHJlYWRJbnQoKTsKICAgICAgICBMaXN0PGlyLk5hbWVkVHlwZT4gbmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICAgICAgbmV3IExpc3Q8aXIuTmFtZWRUeXBlPihuYW1lZFBhcmFtZXRlckNvdW50KTsKICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbmFtZWRQYXJhbWV0ZXJDb3VudDsgaW5kZXgrKykgewogICAgICAgICAgU3RyaW5nIG5hbWUgPSByZWFkU3RyaW5nKCk7CiAgICAgICAgICBpci5EYXJ0VHlwZSB0eXBlID0gX3JlYWREYXJ0VHlwZU5vZGUoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICAgIG5hbWVkUGFyYW1ldGVyc1tpbmRleF0gPSBuZXcgaXIuTmFtZWRUeXBlKG5hbWUsIHR5cGUpOwogICAgICAgIH0KICAgICAgICBpci5UeXBlZGVmVHlwZSB0eXBlZGVmVHlwZSA9IF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgZW5kKGZ1bmN0aW9uVHlwZU5vZGVUYWcpOwogICAgICAgIHJldHVybiBuZXcgaXIuRnVuY3Rpb25UeXBlKHBvc2l0aW9uYWxQYXJhbWV0ZXJzLCByZXR1cm5UeXBlLAogICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycywKICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgICAgICB0eXBlZGVmVHlwZTogdHlwZWRlZlR5cGUpOwoKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmludGVyZmFjZVR5cGU6CiAgICAgICAgaXIuQ2xhc3MgY2xzID0gcmVhZENsYXNzTm9kZSgpOwogICAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgICAgICBfcmVhZERhcnRUeXBlTm9kZXMoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICByZXR1cm4gbmV3IGlyLkludGVyZmFjZVR5cGUoY2xzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLnRoaXNJbnRlcmZhY2VUeXBlOgogICAgICAgIGlyLkNsYXNzIGNscyA9IHJlYWRDbGFzc05vZGUoKTsKICAgICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICAgICAgX3JlYWREYXJ0VHlwZU5vZGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBUaGlzSW50ZXJmYWNlVHlwZShjbHMsIHR5cGVBcmd1bWVudHMpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQuZXhhY3RJbnRlcmZhY2VUeXBlOgogICAgICAgIGlyLkNsYXNzIGNscyA9IHJlYWRDbGFzc05vZGUoKTsKICAgICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICAgICAgX3JlYWREYXJ0VHlwZU5vZGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBFeGFjdEludGVyZmFjZVR5cGUoY2xzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLnR5cGVkZWY6CiAgICAgICAgaXIuVHlwZWRlZiB0eXBlZGVmID0gcmVhZFR5cGVkZWZOb2RlKCk7CiAgICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICAgIF9yZWFkRGFydFR5cGVOb2RlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgaXIuVHlwZWRlZlR5cGUodHlwZWRlZiwgdHlwZUFyZ3VtZW50cyk7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC5keW5hbWljVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgaXIuRHluYW1pY1R5cGUoKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIERhcnRUeXBlS2luZCAka2luZCIpOwogIH0KCiAgX01lbWJlckRhdGEgX3JlYWRNZW1iZXJEYXRhKCkgewogICAgcmV0dXJuIF9tZW1iZXJOb2RlSW5kZXgucmVhZChfcmVhZE1lbWJlckRhdGFJbnRlcm5hbCk7CiAgfQoKICBfTWVtYmVyRGF0YSBfcmVhZE1lbWJlckRhdGFJbnRlcm5hbCgpIHsKICAgIE1lbWJlckNvbnRleHRLaW5kIGtpbmQgPSBfcmVhZEVudW1JbnRlcm5hbChNZW1iZXJDb250ZXh0S2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyQ29udGV4dEtpbmQuY2xzOgogICAgICAgIF9DbGFzc0RhdGEgY2xzID0gX3JlYWRDbGFzc0RhdGEoKTsKICAgICAgICBTdHJpbmcgbmFtZSA9IF9yZWFkU3RyaW5nKCk7CiAgICAgICAgcmV0dXJuIGNscy5sb29rdXBNZW1iZXJEYXRhQnlOYW1lKG5hbWUpOwogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmxpYnJhcnk6CiAgICAgICAgX0xpYnJhcnlEYXRhIGxpYnJhcnkgPSBfcmVhZExpYnJhcnlEYXRhKCk7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBfcmVhZFN0cmluZygpOwogICAgICAgIHJldHVybiBsaWJyYXJ5Lmxvb2t1cE1lbWJlckRhdGFCeU5hbWUobmFtZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5zdXBwb3J0ZWQgX01lbWJlcktpbmQgJGtpbmQiKTsKICB9CgogIEBvdmVycmlkZQogIGlyLk1lbWJlciByZWFkTWVtYmVyTm9kZSgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLm1lbWJlck5vZGUpOwogICAgcmV0dXJuIF9yZWFkTWVtYmVyRGF0YSgpLm5vZGU7CiAgfQoKICBfQ2xhc3NEYXRhIF9yZWFkQ2xhc3NEYXRhKCkgewogICAgX0xpYnJhcnlEYXRhIGxpYnJhcnkgPSBfcmVhZExpYnJhcnlEYXRhKCk7CiAgICBTdHJpbmcgbmFtZSA9IF9yZWFkU3RyaW5nKCk7CiAgICByZXR1cm4gbGlicmFyeS5sb29rdXBDbGFzc0J5TmFtZShuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkNsYXNzIHJlYWRDbGFzc05vZGUoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5jbGFzc05vZGUpOwogICAgcmV0dXJuIF9yZWFkQ2xhc3NEYXRhKCkubm9kZTsKICB9CgogIGlyLlR5cGVkZWYgX3JlYWRUeXBlZGVmTm9kZSgpIHsKICAgIF9MaWJyYXJ5RGF0YSBsaWJyYXJ5ID0gX3JlYWRMaWJyYXJ5RGF0YSgpOwogICAgU3RyaW5nIG5hbWUgPSBfcmVhZFN0cmluZygpOwogICAgcmV0dXJuIGxpYnJhcnkubG9va3VwVHlwZWRlZihuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGlyLlR5cGVkZWYgcmVhZFR5cGVkZWZOb2RlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQudHlwZWRlZk5vZGUpOwogICAgcmV0dXJuIF9yZWFkVHlwZWRlZk5vZGUoKTsKICB9CgogIF9MaWJyYXJ5RGF0YSBfcmVhZExpYnJhcnlEYXRhKCkgewogICAgVXJpIGNhbm9uaWNhbFVyaSA9IF9yZWFkVXJpKCk7CiAgICByZXR1cm4gY29tcG9uZW50TG9va3VwLmdldExpYnJhcnlEYXRhQnlVcmkoY2Fub25pY2FsVXJpKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkxpYnJhcnkgcmVhZExpYnJhcnlOb2RlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQubGlicmFyeU5vZGUpOwogICAgcmV0dXJuIF9yZWFkTGlicmFyeURhdGEoKS5ub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgRSByZWFkRW51bTxFPihMaXN0PEU+IHZhbHVlcykgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuZW51bVZhbHVlKTsKICAgIHJldHVybiBfcmVhZEVudW1JbnRlcm5hbCh2YWx1ZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgVXJpIHJlYWRVcmkoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC51cmkpOwogICAgcmV0dXJuIF9yZWFkVXJpKCk7CiAgfQoKICBVcmkgX3JlYWRVcmkoKSB7CiAgICByZXR1cm4gX3VyaUluZGV4LnJlYWQoX3JlYWRVcmlJbnRlcm5hbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHJlYWRCb29sKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuYm9vbCk7CiAgICByZXR1cm4gX3JlYWRCb29sKCk7CiAgfQoKICBib29sIF9yZWFkQm9vbCgpIHsKICAgIGludCB2YWx1ZSA9IF9yZWFkSW50SW50ZXJuYWwoKTsKICAgIGFzc2VydCh2YWx1ZSA9PSAwIHx8IHZhbHVlID09IDEpOwogICAgcmV0dXJuIHZhbHVlID09IDE7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVhZFN0cmluZygpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLnN0cmluZyk7CiAgICByZXR1cm4gX3JlYWRTdHJpbmcoKTsKICB9CgogIFN0cmluZyBfcmVhZFN0cmluZygpIHsKICAgIHJldHVybiBfc3RyaW5nSW5kZXgucmVhZChfcmVhZFN0cmluZ0ludGVybmFsKTsKICB9CgogIEBvdmVycmlkZQogIGludCByZWFkSW50KCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQudWludDMwKTsKICAgIHJldHVybiBfcmVhZEludEludGVybmFsKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGUoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC50cmVlTm9kZSk7CiAgICByZXR1cm4gX3JlYWRUcmVlTm9kZShudWxsKTsKICB9CgogIF9NZW1iZXJEYXRhIF9nZXRNZW1iZXJEYXRhKGlyLk1lbWJlciBub2RlKSB7CiAgICBfTGlicmFyeURhdGEgbGlicmFyeURhdGEgPQogICAgICAgIGNvbXBvbmVudExvb2t1cC5nZXRMaWJyYXJ5RGF0YUJ5VXJpKG5vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkpOwogICAgaWYgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBfQ2xhc3NEYXRhIGNsYXNzRGF0YSA9IGxpYnJhcnlEYXRhLmxvb2t1cENsYXNzQnlOb2RlKG5vZGUuZW5jbG9zaW5nQ2xhc3MpOwogICAgICByZXR1cm4gY2xhc3NEYXRhLmxvb2t1cE1lbWJlckRhdGFCeU5vZGUobm9kZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbGlicmFyeURhdGEubG9va3VwTWVtYmVyRGF0YUJ5Tm9kZShub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGlyLlRyZWVOb2RlIHJlYWRUcmVlTm9kZUluQ29udGV4dCgpIHsKICAgIHJldHVybiByZWFkVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbChjdXJyZW50TWVtYmVyRGF0YSk7CiAgfQoKICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbChfTWVtYmVyRGF0YSBtZW1iZXJEYXRhKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC50cmVlTm9kZSk7CiAgICByZXR1cm4gX3JlYWRUcmVlTm9kZShtZW1iZXJEYXRhKTsKICB9CgogIEBvdmVycmlkZQogIGlyLlRyZWVOb2RlIHJlYWRUcmVlTm9kZU9yTnVsbEluQ29udGV4dCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbChjdXJyZW50TWVtYmVyRGF0YSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RT4gcmVhZFRyZWVOb2Rlc0luQ29udGV4dDxFIGV4dGVuZHMgaXIuVHJlZU5vZGU+KAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEU+IGxpc3QgPSBuZXcgTGlzdDxFPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgaXIuVHJlZU5vZGUgbm9kZSA9IHJlYWRUcmVlTm9kZUluQ29udGV4dEludGVybmFsKGN1cnJlbnRNZW1iZXJEYXRhKTsKICAgICAgbGlzdFtpXSA9IG5vZGU7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLLCBWPiByZWFkVHJlZU5vZGVNYXBJbkNvbnRleHQ8SyBleHRlbmRzIGlyLlRyZWVOb2RlLCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPEssIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGlyLlRyZWVOb2RlIG5vZGUgPSByZWFkVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbChjdXJyZW50TWVtYmVyRGF0YSk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtub2RlXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgcmVhZENvbnN0YW50KCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuY29uc3RhbnQpOwogICAgcmV0dXJuIF9yZWFkQ29uc3RhbnQoKTsKICB9CgogIEBvdmVycmlkZQogIGRvdWJsZSByZWFkRG91YmxlVmFsdWUoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5kb3VibGUpOwogICAgcmV0dXJuIF9yZWFkRG91YmxlVmFsdWUoKTsKICB9CgogIGRvdWJsZSBfcmVhZERvdWJsZVZhbHVlKCkgewogICAgQnl0ZURhdGEgZGF0YSA9IG5ldyBCeXRlRGF0YSg4KTsKICAgIGRhdGEuc2V0VWludDE2KDAsIHJlYWRJbnQoKSk7CiAgICBkYXRhLnNldFVpbnQxNigyLCByZWFkSW50KCkpOwogICAgZGF0YS5zZXRVaW50MTYoNCwgcmVhZEludCgpKTsKICAgIGRhdGEuc2V0VWludDE2KDYsIHJlYWRJbnQoKSk7CiAgICByZXR1cm4gZGF0YS5nZXRGbG9hdDY0KDApOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHJlYWRJbnRlZ2VyVmFsdWUoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5pbnQpOwogICAgcmV0dXJuIF9yZWFkQmlnSW50KCkudG9JbnQoKTsKICB9CgogIEJpZ0ludCBfcmVhZEJpZ0ludCgpIHsKICAgIHJldHVybiBCaWdJbnQucGFyc2UocmVhZFN0cmluZygpKTsKICB9CgogIENvbnN0YW50VmFsdWUgX3JlYWRDb25zdGFudCgpIHsKICAgIHJldHVybiBfY29uc3RhbnRJbmRleC5yZWFkKF9yZWFkQ29uc3RhbnRJbnRlcm5hbCk7CiAgfQoKICBDb25zdGFudFZhbHVlIF9yZWFkQ29uc3RhbnRJbnRlcm5hbCgpIHsKICAgIENvbnN0YW50VmFsdWVLaW5kIGtpbmQgPSBfcmVhZEVudW1JbnRlcm5hbChDb25zdGFudFZhbHVlS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuQk9PTDoKICAgICAgICBib29sIHZhbHVlID0gcmVhZEJvb2woKTsKICAgICAgICByZXR1cm4gbmV3IEJvb2xDb25zdGFudFZhbHVlKHZhbHVlKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5JTlQ6CiAgICAgICAgQmlnSW50IHZhbHVlID0gX3JlYWRCaWdJbnQoKTsKICAgICAgICByZXR1cm4gbmV3IEludENvbnN0YW50VmFsdWUodmFsdWUpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkRPVUJMRToKICAgICAgICBkb3VibGUgdmFsdWUgPSBfcmVhZERvdWJsZVZhbHVlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBEb3VibGVDb25zdGFudFZhbHVlKHZhbHVlKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5TVFJJTkc6CiAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVhZFN0cmluZygpOwogICAgICAgIHJldHVybiBuZXcgU3RyaW5nQ29uc3RhbnRWYWx1ZSh2YWx1ZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTlVMTDoKICAgICAgICByZXR1cm4gY29uc3QgTnVsbENvbnN0YW50VmFsdWUoKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5GVU5DVElPTjoKICAgICAgICBJbmRleGVkRnVuY3Rpb24gZnVuY3Rpb24gPSByZWFkTWVtYmVyKCk7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25Db25zdGFudFZhbHVlKGZ1bmN0aW9uLCB0eXBlKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5MSVNUOgogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBMaXN0PENvbnN0YW50VmFsdWU+IGVudHJpZXMgPSByZWFkQ29uc3RhbnRzKCk7CiAgICAgICAgcmV0dXJuIG5ldyBMaXN0Q29uc3RhbnRWYWx1ZSh0eXBlLCBlbnRyaWVzKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5TRVQ6CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIE1hcENvbnN0YW50VmFsdWUgZW50cmllcyA9IHJlYWRDb25zdGFudCgpOwogICAgICAgIHJldHVybiBuZXcgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRTZXRDb25zdGFudCh0eXBlLCBlbnRyaWVzKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5NQVA6CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIExpc3RDb25zdGFudFZhbHVlIGtleUxpc3QgPSByZWFkQ29uc3RhbnQoKTsKICAgICAgICBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcyA9IHJlYWRDb25zdGFudHMoKTsKICAgICAgICBDb25zdGFudFZhbHVlIHByb3RvVmFsdWUgPSByZWFkQ29uc3RhbnRPck51bGwoKTsKICAgICAgICBib29sIG9ubHlTdHJpbmdLZXlzID0gcmVhZEJvb2woKTsKICAgICAgICByZXR1cm4gbmV3IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQoCiAgICAgICAgICAgIHR5cGUsIGtleUxpc3QsIHZhbHVlcywgcHJvdG9WYWx1ZSwgb25seVN0cmluZ0tleXMpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkNPTlNUUlVDVEVEOgogICAgICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT4gZmllbGRzID0KICAgICAgICAgICAgcmVhZE1lbWJlck1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT4oCiAgICAgICAgICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gcmVhZENvbnN0YW50KCkpOwogICAgICAgIHJldHVybiBuZXcgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlKHR5cGUsIGZpZWxkcyk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuVFlQRToKICAgICAgICBEYXJ0VHlwZSByZXByZXNlbnRlZFR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBUeXBlQ29uc3RhbnRWYWx1ZShyZXByZXNlbnRlZFR5cGUsIHR5cGUpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLklOU1RBTlRJQVRJT046CiAgICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IHJlYWREYXJ0VHlwZXMoKTsKICAgICAgICBDb25zdGFudFZhbHVlIGZ1bmN0aW9uID0gcmVhZENvbnN0YW50KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSh0eXBlQXJndW1lbnRzLCBmdW5jdGlvbik7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTk9OX0NPTlNUQU5UOgogICAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLklOVEVSQ0VQVE9SOgogICAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICAgIHJldHVybiBuZXcgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKGNscyk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuREVGRVJSRURfR0xPQkFMOgogICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSByZWFkQ29uc3RhbnQoKTsKICAgICAgICBPdXRwdXRVbml0IHVuaXQgPSByZWFkT3V0cHV0VW5pdFJlZmVyZW5jZSgpOwogICAgICAgIHJldHVybiBuZXcgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlKGNvbnN0YW50LCB1bml0KTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5EVU1NWV9JTlRFUkNFUFRPUjoKICAgICAgICBBYnN0cmFjdFZhbHVlIGFic3RyYWN0VmFsdWUgPSByZWFkQWJzdHJhY3RWYWx1ZSgpOwogICAgICAgIHJldHVybiBuZXcgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUoYWJzdHJhY3RWYWx1ZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuVU5SRUFDSEFCTEU6CiAgICAgICAgcmV0dXJuIGNvbnN0IFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSgpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkpTX05BTUU6CiAgICAgICAganMuTGl0ZXJhbFN0cmluZyBuYW1lID0gcmVhZEpzTm9kZSgpOwogICAgICAgIHJldHVybiBuZXcgSnNOYW1lQ29uc3RhbnRWYWx1ZShuYW1lKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGV4dGVkIGNvbnN0YW50IHZhbHVlIGtpbmQgJHtraW5kfS4iKTsKICB9CgogIGlyLlRyZWVOb2RlIF9yZWFkVHJlZU5vZGUoX01lbWJlckRhdGEgbWVtYmVyRGF0YSkgewogICAgX1RyZWVOb2RlS2luZCBraW5kID0gX3JlYWRFbnVtSW50ZXJuYWwoX1RyZWVOb2RlS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC5jbHM6CiAgICAgICAgcmV0dXJuIF9yZWFkQ2xhc3NEYXRhKCkubm9kZTsKICAgICAgY2FzZSBfVHJlZU5vZGVLaW5kLm1lbWJlcjoKICAgICAgICByZXR1cm4gX3JlYWRNZW1iZXJEYXRhKCkubm9kZTsKICAgICAgY2FzZSBfVHJlZU5vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb25WYXJpYWJsZToKICAgICAgICBpci5GdW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0aW9uRGVjbGFyYXRpb24gPSBfcmVhZFRyZWVOb2RlKG1lbWJlckRhdGEpOwogICAgICAgIHJldHVybiBmdW5jdGlvbkRlY2xhcmF0aW9uLnZhcmlhYmxlOwogICAgICBjYXNlIF9UcmVlTm9kZUtpbmQuZnVuY3Rpb25Ob2RlOgogICAgICAgIHJldHVybiBfcmVhZEZ1bmN0aW9uTm9kZShtZW1iZXJEYXRhKTsKICAgICAgY2FzZSBfVHJlZU5vZGVLaW5kLnR5cGVQYXJhbWV0ZXI6CiAgICAgICAgcmV0dXJuIF9yZWFkVHlwZVBhcmFtZXRlcihtZW1iZXJEYXRhKTsKICAgICAgY2FzZSBfVHJlZU5vZGVLaW5kLmNvbnN0YW50OgogICAgICAgIG1lbWJlckRhdGEgPz89IF9yZWFkTWVtYmVyRGF0YSgpOwogICAgICAgIGlyLkNvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uID0gX3JlYWRUcmVlTm9kZShtZW1iZXJEYXRhKTsKICAgICAgICBpci5Db25zdGFudCBjb25zdGFudCA9CiAgICAgICAgICAgIG1lbWJlckRhdGEuZ2V0Q29uc3RhbnRCeUluZGV4KGV4cHJlc3Npb24sIF9yZWFkSW50SW50ZXJuYWwoKSk7CiAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudFJlZmVyZW5jZShleHByZXNzaW9uLCBjb25zdGFudCk7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC5ub2RlOgogICAgICAgIG1lbWJlckRhdGEgPz89IF9yZWFkTWVtYmVyRGF0YSgpOwogICAgICAgIGludCBpbmRleCA9IF9yZWFkSW50SW50ZXJuYWwoKTsKICAgICAgICBpci5UcmVlTm9kZSB0cmVlTm9kZSA9IG1lbWJlckRhdGEuZ2V0VHJlZU5vZGVCeUluZGV4KGluZGV4KTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgIHRyZWVOb2RlICE9IG51bGwsCiAgICAgICAgICAgICJObyBUcmVlTm9kZSBmb3VuZCBmb3IgaW5kZXggJGluZGV4IGluICIKICAgICAgICAgICAgIiR7bWVtYmVyRGF0YS5ub2RlfS4kX2Vycm9yQ29udGV4dCIpOwogICAgICAgIHJldHVybiB0cmVlTm9kZTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIF9UcmVlTm9kZUtpbmQgJGtpbmQiKTsKICB9CgogIGlyLkZ1bmN0aW9uTm9kZSBfcmVhZEZ1bmN0aW9uTm9kZShfTWVtYmVyRGF0YSBtZW1iZXJEYXRhKSB7CiAgICBfRnVuY3Rpb25Ob2RlS2luZCBraW5kID0gX3JlYWRFbnVtSW50ZXJuYWwoX0Z1bmN0aW9uTm9kZUtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIF9GdW5jdGlvbk5vZGVLaW5kLnByb2NlZHVyZToKICAgICAgICBpci5Qcm9jZWR1cmUgcHJvY2VkdXJlID0gX3JlYWRNZW1iZXJEYXRhKCkubm9kZTsKICAgICAgICByZXR1cm4gcHJvY2VkdXJlLmZ1bmN0aW9uOwogICAgICBjYXNlIF9GdW5jdGlvbk5vZGVLaW5kLmNvbnN0cnVjdG9yOgogICAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gX3JlYWRNZW1iZXJEYXRhKCkubm9kZTsKICAgICAgICByZXR1cm4gY29uc3RydWN0b3IuZnVuY3Rpb247CiAgICAgIGNhc2UgX0Z1bmN0aW9uTm9kZUtpbmQuZnVuY3Rpb25FeHByZXNzaW9uOgogICAgICAgIGlyLkZ1bmN0aW9uRXhwcmVzc2lvbiBmdW5jdGlvbkV4cHJlc3Npb24gPSBfcmVhZFRyZWVOb2RlKG1lbWJlckRhdGEpOwogICAgICAgIHJldHVybiBmdW5jdGlvbkV4cHJlc3Npb24uZnVuY3Rpb247CiAgICAgIGNhc2UgX0Z1bmN0aW9uTm9kZUtpbmQuZnVuY3Rpb25EZWNsYXJhdGlvbjoKICAgICAgICBpci5GdW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0aW9uRGVjbGFyYXRpb24gPSBfcmVhZFRyZWVOb2RlKG1lbWJlckRhdGEpOwogICAgICAgIHJldHVybiBmdW5jdGlvbkRlY2xhcmF0aW9uLmZ1bmN0aW9uOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgX0Z1bmN0aW9uTm9kZUtpbmQgJGtpbmQiKTsKICB9CgogIEBvdmVycmlkZQogIGlyLlR5cGVQYXJhbWV0ZXIgcmVhZFR5cGVQYXJhbWV0ZXJOb2RlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQudHlwZVBhcmFtZXRlck5vZGUpOwogICAgcmV0dXJuIF9yZWFkVHlwZVBhcmFtZXRlcihudWxsKTsKICB9CgogIGlyLlR5cGVQYXJhbWV0ZXIgX3JlYWRUeXBlUGFyYW1ldGVyKF9NZW1iZXJEYXRhIG1lbWJlckRhdGEpIHsKICAgIF9UeXBlUGFyYW1ldGVyS2luZCBraW5kID0gX3JlYWRFbnVtSW50ZXJuYWwoX1R5cGVQYXJhbWV0ZXJLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBfVHlwZVBhcmFtZXRlcktpbmQuY2xzOgogICAgICAgIGlyLkNsYXNzIGNscyA9IF9yZWFkQ2xhc3NEYXRhKCkubm9kZTsKICAgICAgICByZXR1cm4gY2xzLnR5cGVQYXJhbWV0ZXJzW19yZWFkSW50SW50ZXJuYWwoKV07CiAgICAgIGNhc2UgX1R5cGVQYXJhbWV0ZXJLaW5kLmZ1bmN0aW9uTm9kZToKICAgICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlID0gX3JlYWRGdW5jdGlvbk5vZGUobWVtYmVyRGF0YSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTm9kZS50eXBlUGFyYW1ldGVyc1tfcmVhZEludEludGVybmFsKCldOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgX1R5cGVQYXJhbWV0ZXJLaW5kIGtpbmQgJGtpbmQiKTsKICB9CgogIHZvaWQgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQgZXhwZWN0ZWRLaW5kKSB7CiAgICBpZiAoIXVzZURhdGFLaW5kcykgcmV0dXJuOwogICAgRGF0YUtpbmQgYWN0dWFsS2luZCA9IF9yZWFkRW51bUludGVybmFsKERhdGFLaW5kLnZhbHVlcyk7CiAgICBhc3NlcnQoCiAgICAgICAgYWN0dWFsS2luZCA9PSBleHBlY3RlZEtpbmQsCiAgICAgICAgIkludmFsaWQgZGF0YSBraW5kLiAiCiAgICAgICAgIkV4cGVjdGVkICRleHBlY3RlZEtpbmQsIGZvdW5kICRhY3R1YWxLaW5kLiRfZXJyb3JDb250ZXh0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICBMb2NhbCByZWFkTG9jYWwoKSB7CiAgICBMb2NhbEtpbmQga2luZCA9IHJlYWRFbnVtKExvY2FsS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTG9jYWxLaW5kLmpMb2NhbDoKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dCA9IHJlYWRNZW1iZXIoKTsKICAgICAgICBpbnQgbG9jYWxJbmRleCA9IHJlYWRJbnQoKTsKICAgICAgICByZXR1cm4gbG9jYWxMb29rdXAuZ2V0TG9jYWxCeUluZGV4KG1lbWJlckNvbnRleHQsIGxvY2FsSW5kZXgpOwogICAgICBjYXNlIExvY2FsS2luZC50aGlzTG9jYWw6CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gcmVhZENsYXNzKCk7CiAgICAgICAgcmV0dXJuIG5ldyBUaGlzTG9jYWwoY2xzKTsKICAgICAgY2FzZSBMb2NhbEtpbmQuYm94TG9jYWw6CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gcmVhZENsYXNzKCk7CiAgICAgICAgcmV0dXJuIG5ldyBCb3hMb2NhbChjbHMpOwogICAgICBjYXNlIExvY2FsS2luZC5hbm9ueW1vdXNDbG9zdXJlTG9jYWw6CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gcmVhZENsYXNzKCk7CiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNDbG9zdXJlTG9jYWwoY2xzKTsKICAgICAgY2FzZSBMb2NhbEtpbmQudHlwZVZhcmlhYmxlTG9jYWw6CiAgICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZUxvY2FsKHR5cGVWYXJpYWJsZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBsb2NhbCBraW5kICRraW5kIik7CiAgfQoKICBAb3ZlcnJpZGUKICBJbXBvcnRFbnRpdHkgcmVhZEltcG9ydCgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmltcG9ydCk7CiAgICByZXR1cm4gX3JlYWRJbXBvcnQoKTsKICB9CgogIEltcG9ydEVudGl0eSBfcmVhZEltcG9ydCgpIHsKICAgIHJldHVybiBfaW1wb3J0SW5kZXgucmVhZChfcmVhZEltcG9ydEludGVybmFsKTsKICB9CgogIEltcG9ydEVudGl0eSBfcmVhZEltcG9ydEludGVybmFsKCkgewogICAgU3RyaW5nIG5hbWUgPSByZWFkU3RyaW5nT3JOdWxsKCk7CiAgICBVcmkgdXJpID0gX3JlYWRVcmkoKTsKICAgIFVyaSBlbmNsb3NpbmdMaWJyYXJ5VXJpID0gX3JlYWRVcmkoKTsKICAgIGJvb2wgaXNEZWZlcnJlZCA9IF9yZWFkQm9vbCgpOwogICAgcmV0dXJuIG5ldyBJbXBvcnRFbnRpdHkoaXNEZWZlcnJlZCwgbmFtZSwgdXJpLCBlbmNsb3NpbmdMaWJyYXJ5VXJpKTsKICB9CgogIEBvdmVycmlkZQogIE91dHB1dFVuaXQgcmVhZE91dHB1dFVuaXRSZWZlcmVuY2UoKSB7CiAgICBhc3NlcnQoCiAgICAgICAgX2NvZGVnZW5SZWFkZXIgIT0gbnVsbCwKICAgICAgICAiQ2FuIG5vdCBkZXNlcmlhbGl6ZSBhbiBPdXRwdXRVbml0IHJlZmVyZW5jZSAiCiAgICAgICAgIndpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gcmVhZGVyLiIpOwogICAgcmV0dXJuIF9jb2RlZ2VuUmVhZGVyLnJlYWRPdXRwdXRVbml0UmVmZXJlbmNlKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZWFkQWJzdHJhY3RWYWx1ZSgpIHsKICAgIGFzc2VydCgKICAgICAgICBfY29kZWdlblJlYWRlciAhPSBudWxsLAogICAgICAgICJDYW4gbm90IGRlc2VyaWFsaXplIGFuIEFic3RyYWN0VmFsdWUgIgogICAgICAgICJ3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHJlYWRlci4iKTsKICAgIHJldHVybiBfY29kZWdlblJlYWRlci5yZWFkQWJzdHJhY3RWYWx1ZSh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGpzLk5vZGUgcmVhZEpzTm9kZSgpIHsKICAgIGFzc2VydChfY29kZWdlblJlYWRlciAhPSBudWxsLAogICAgICAgICJDYW4gbm90IGRlc2VyaWFsaXplIGEgSlMgbm9kZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHJlYWRlci4iKTsKICAgIHJldHVybiBfY29kZWdlblJlYWRlci5yZWFkSnNOb2RlKHRoaXMpOwogIH0KCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBzZWN0aW9uIGJlZ2luIHRhZywgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF9iZWdpbihTdHJpbmcgdGFnKTsKCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBzZWN0aW9uIGVuZCB0YWcsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfZW5kKFN0cmluZyB0YWcpOwoKICAvLy8gQWN0dWFsIGRlc2VyaWFsaXphdGlvbiBvZiBhIHN0cmluZyB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICBTdHJpbmcgX3JlYWRTdHJpbmdJbnRlcm5hbCgpOwoKICAvLy8gQWN0dWFs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QmluYXJ5U291cmNlXS4KY2xhc3MgQmluYXJ5U2luayBleHRlbmRzIEFic3RyYWN0RGF0YVNpbmsgewogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBzaW5rOwogIEJ1ZmZlcmVkU2luayBfYnVmZmVyZWRTaW5rOwogIGludCBfbGVuZ3RoID0gMDsKCiAgQmluYXJ5U2luayh0aGlzLnNpbmssCiAgICAgIHtib29sIHVzZURhdGFLaW5kczogZmFsc2UsIE1hcDxTdHJpbmcsIGludD4gdGFnRnJlcXVlbmN5TWFwfSkKICAgICAgOiBfYnVmZmVyZWRTaW5rID0gbmV3IEJ1ZmZlcmVkU2luayhzaW5rKSwKICAgICAgICBzdXBlcih1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcywgdGFnRnJlcXVlbmN5TWFwOiB0YWdGcmVxdWVuY3lNYXApOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9iZWdpbihTdHJpbmcgdGFnKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHRhZ3MgaW4gYmluYXJ5IHNlcmlhbGl6YXRpb24/CiAgfQogIEBvdmVycmlkZQogIHZvaWQgX2VuZChTdHJpbmcgdGFnKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHRhZ3MgaW4gYmluYXJ5IHNlcmlhbGl6YXRpb24/CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF93cml0ZVVyaUludGVybmFsKFVyaSB2YWx1ZSkgewogICAgX3dyaXRlU3RyaW5nKHZhbHVlLnRvU3RyaW5nKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVTdHJpbmdJbnRlcm5hbChTdHJpbmcgdmFsdWUpIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IHV0ZjguZW5jb2RlKHZhbHVlKTsKICAgIF93cml0ZUludEludGVybmFsKGJ5dGVzLmxlbmd0aCk7CiAgICBfYnVmZmVyZWRTaW5rLmFkZEJ5dGVzKGJ5dGVzKTsKICAgIF9sZW5ndGggKz0gYnl0ZXMubGVuZ3RoOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVJbnRJbnRlcm5hbChpbnQgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSA+PSAwICYmIHZhbHVlID4+IDMwID09IDApOwogICAgaWYgKHZhbHVlIDwgMHg4MCkgewogICAgICBfYnVmZmVyZWRTaW5rLmFkZEJ5dGUodmFsdWUpOwogICAgICBfbGVuZ3RoICs9IDE7CiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMHg0MDAwKSB7CiAgICAgIF9idWZmZXJlZFNpbmsuYWRkQnl0ZTIoKHZhbHVlID4+IDgpIHwgMHg4MCwgdmFsdWUgJiAweEZGKTsKICAgICAgX2xlbmd0aCArPSAyOwogICAgfSBlbHNlIHsKICAgICAgX2J1ZmZlcmVkU2luay5hZGRCeXRlNCgodmFsdWUgPj4gMjQpIHwgMHhDMCwgKHZhbHVlID4+IDE2KSAmIDB4RkYsCiAgICAgICAgICAodmFsdWUgPj4gOCkgJiAweEZGLCB2YWx1ZSAmIDB4RkYpOwogICAgICBfbGVuZ3RoICs9IDQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF93cml0ZUVudW1JbnRlcm5hbChkeW5hbWljIHZhbHVlKSB7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZS5pbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgX2J1ZmZlcmVkU2luay5mbHVzaEFuZERlc3Ryb3koKTsKICAgIF9idWZmZXJlZFNpbmsgPSBudWxsOwogICAgc2luay5jbG9zZSgpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoaXMgZGF0YSBzaW5rLgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7Cn0KSwBOTjwBHgE4BDcsHh4TARhEME0BDBxCBAwaQgQBDCYkBAEMLColIx0EAQwmLBgkFCFBFA1JLhQGBAEMKyQEAQwRJRoSBAE9DB0CATNwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL2JpbmFyeV9zaW5rLmRhcnQ+c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc2VyaWFsaXphdGlvbi9iaW5hcnlfc291cmNlLmRhcnSHGS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIFtEYXRhU291cmNlXSB0aGF0IHJlYWRzIGRhdGEgZnJvbSBhIHNlcXVlbmNlIG9mIGJ5dGVzLgovLy8KLy8vIFRoaXMgZGF0YSBzb3VyY2Ugd29ya3MgdG9nZXRoZXIgd2l0aCBbQmluYXJ5U2lua10uCmNsYXNzIEJpbmFyeVNvdXJjZUltcGwgZXh0ZW5kcyBBYnN0cmFjdERhdGFTb3VyY2UgewogIGludCBfYnl0ZU9mZnNldCA9IDA7CiAgZmluYWwgTGlzdDxpbnQ+IF9ieXRlczsKCiAgQmluYXJ5U291cmNlSW1wbCh0aGlzLl9ieXRlcywge2Jvb2wgdXNlRGF0YUtpbmRzOiBmYWxzZX0pCiAgICAgIDogc3VwZXIodXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9iZWdpbihTdHJpbmcgdGFnKSB7fQogIEBvdmVycmlkZQogIHZvaWQgX2VuZChTdHJpbmcgdGFnKSB7fQoKICBpbnQgX3JlYWRCeXRlKCkgPT4gX2J5dGVzW19ieXRlT2Zmc2V0KytdOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgX3JlYWRTdHJpbmdJbnRlcm5hbCgpIHsKICAgIGludCBsZW5ndGggPSBfcmVhZEludEludGVybmFsKCk7CiAgICBMaXN0PGludD4gYnl0ZXMgPSBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgICBieXRlcy5zZXRSYW5nZSgwLCBieXRlcy5sZW5ndGgsIF9ieXRlcywgX2J5dGVPZmZzZXQpOwogICAgX2J5dGVPZmZzZXQgKz0gYnl0ZXMubGVuZ3RoOwogICAgcmV0dXJuIHV0ZjguZGVjb2RlKGJ5dGVzKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfcmVhZEludEludGVybmFsKCkgewogICAgdmFyIGJ5dGUgPSBfcmVhZEJ5dGUoKTsKICAgIGlmIChieXRlICYgMHg4MCA9PSAwKSB7CiAgICAgIC8vIDB4eHh4eHh4CiAgICAgIHJldHVybiBieXRlOwogICAgfSBlbHNlIGlmIChieXRlICYgMHg0MCA9PSAwKSB7CiAgICAgIC8vIDEweHh4eHh4CiAgICAgIHJldHVybiAoKGJ5dGUgJiAweDNGKSA8PCA4KSB8IF9yZWFkQnl0ZSgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gMTF4eHh4eHgKICAgICAgcmV0dXJuICgoYnl0ZSAmIDB4M0YpIDw8IDI0KSB8CiAgICAgICAgICAoX3JlYWRCeXRlKCkgPDwgMTYpIHwKICAgICAgICAgIChfcmVhZEJ5dGUoKSA8PCA4KSB8CiAgICAgICAgICBfcmVhZEJ5dGUoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFVyaSBfcmVhZFVyaUludGVybmFsKCkgewogICAgU3RyaW5nIHRleHQgPSBfcmVhZFN0cmluZygpOwogICAgcmV0dXJuIFVyaS5wYXJzZSh0ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIEUgX3JlYWRFbnVtSW50ZXJuYWw8RT4oTGlzdDxFPiB2YWx1ZXMpIHsKICAgIGludCBpbmRleCA9IF9yZWFkSW50SW50ZXJuYWwoKTsKICAgIGFzc2VydCgKICAgICAgICAwIDw9IGluZGV4ICYmIGluZGV4IDwgdmFsdWVzLmxlbmd0aCwKICAgICAgICAiSW52YWxpZCBkYXRhIGtpbmQgaW5kZXguICIKICAgICAgICAiRXhwZWN0ZWQgb25lIG9mICR2YWx1ZXMsIGZvdW5kIGluZGV4ICRpbmRleC4iKTsKICAgIHJldHVybiB2YWx1ZXNbaW5kZXhdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZXJyb3JDb250ZXh0ID0+ICcgT2Zmc2V0ICRfYnl0ZU9mZnNldCBpbiAke19ieXRlcy5sZW5ndGh9Lic7Cn0KRwBOTjwBHgE7BDc0FxoBPCsBDB0MGwEsAQwhJS06IR8EAQwbHBwSEyMSMQ0SJSAfFwYEAQwbIRwEAQwrJAwtJDkaBAEMSwIBNXBhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vYmluYXJ5X3NvdXJjZS5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vaGVscGVycy5kYXJ0rUYvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBFbnVtIHZhbHVlcyB1c2VkIGZvciBpZGVudGlmeWluZyBkaWZmZXJlbnQga2luZHMgb2Ygc2VyaWFsaXplZCBkYXRhLgovLy8KLy8vIFRoaXMgaXMgdXNlZCB0byBmb3IgZGVidWdnaW5nIGRhdGEgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gc2VyaWFsaXphdGlvbgovLy8gYW5kIGRlc2VyaWFsaXphdGlvbi4KZW51bSBEYXRhS2luZCB7CiAgYm9vbCwKICB1aW50MzAsCiAgc3RyaW5nLAogIGVudW1WYWx1ZSwKICB1cmksCiAgbGlicmFyeU5vZGUsCiAgY2xhc3NOb2RlLAogIHR5cGVkZWZOb2RlLAogIG1lbWJlck5vZGUsCiAgdHJlZU5vZGUsCiAgdHlwZVBhcmFtZXRlck5vZGUsCiAgZGFydFR5cGUsCiAgZGFydFR5cGVOb2RlLAogIHNvdXJjZVNwYW4sCiAgY29uc3RhbnQsCiAgaW1wb3J0LAogIGRvdWJsZSwKICBpbnQsCn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHRoZSBlbmNsb3NpbmcgZW50aXR5IG9mIGEgbWVtYmVyIGluIHNlcmlhbGl6YXRpb24uCmVudW0gTWVtYmVyQ29udGV4dEtpbmQgeyBsaWJyYXJ5LCBjbHMgfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0xvY2FsXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gTG9jYWxLaW5kIHsKICBqTG9jYWwsCiAgdGhpc0xvY2FsLAogIGJveExvY2FsLAogIGFub255bW91c0Nsb3N1cmVMb2NhbCwKICB0eXBlVmFyaWFibGVMb2NhbCwKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW2lyLlRyZWVOb2RlXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gX1RyZWVOb2RlS2luZCB7CiAgY2xzLAogIG1lbWJlciwKICBub2RlLAogIGZ1bmN0aW9uTm9kZSwKICB0eXBlUGFyYW1ldGVyLAogIGZ1bmN0aW9uRGVjbGFyYXRpb25WYXJpYWJsZSwKICBjb25zdGFudCwKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW2lyLkZ1bmN0aW9uTm9kZV0gY29udGV4dCBpbiBzZXJpYWxpemF0aW9uLgplbnVtIF9GdW5jdGlvbk5vZGVLaW5kIHsKICBwcm9jZWR1cmUsCiAgY29uc3RydWN0b3IsCiAgZnVuY3Rpb25FeHByZXNzaW9uLAogIGZ1bmN0aW9uRGVjbGFyYXRpb24sCn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtpci5UeXBlUGFyYW1ldGVyXSBjb250ZXh0IGluIHNlcmlhbGl6YXRpb24uCmVudW0gX1R5cGVQYXJhbWV0ZXJLaW5kIHsKICBjbHMsCiAgZnVuY3Rpb25Ob2RlLAp9CgovLy8gQ2xhc3MgdXNlZCBmb3IgZW5jb2RpbmcgdGFncyBpbiBbT2JqZWN0U2lua10gYW5kIFtPYmplY3RTb3VyY2VdLgpjbGFzcyBUYWcgewogIGZpbmFsIFN0cmluZyB2YWx1ZTsKCiAgVGFnKHRoaXMudmFsdWUpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHZhbHVlLmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgVGFnKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdmFsdWUgPT0gb3RoZXIudmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVGFnKCR2YWx1ZSknOwp9CgovLy8gRW51bSB1c2VkIGZvciBpZGVudGlmeWluZyBbRGFydFR5cGVdIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBEYXJ0VHlwZUtpbmQgewogIG5vbmUsCiAgdm9pZFR5cGUsCiAgdHlwZVZhcmlhYmxlLAogIGZ1bmN0aW9uVHlwZVZhcmlhYmxlLAogIGZ1bmN0aW9uVHlwZSwKICBpbnRlcmZhY2VUeXBlLAogIHR5cGVkZWYsCiAgZHluYW1pY1R5cGUsCiAgZnV0dXJlT3IsCn0KCi8vLyBWaXNpdG9yIHRoYXQgc2VyaWFsaXplcyBbRGFydFR5cGVdIG9iamVjdCB0b2dldGhlciB3aXRoIFtBYnN0cmFjdERhdGFTaW5rXS4KY2xhc3MgRGFydFR5cGVXcml0ZXIKICAgIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPHZvaWQsIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+PiB7CiAgZmluYWwgQWJzdHJhY3REYXRhU2luayBfc2luazsKCiAgRGFydFR5cGVXcml0ZXIodGhpcy5fc2luayk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXQoY292YXJpYW50IERhcnRUeXBlIHR5cGUsCiAgICAgICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpID0+CiAgICAgIHR5cGUuYWNjZXB0KHRoaXMsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CgogIHZvaWQgdmlzaXRUeXBlcygKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZXMsIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVJbnQodHlwZXMubGVuZ3RoKTsKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICBfc2luay5fd3JpdGVEYXJ0VHlwZSh0eXBlLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZvaWRUeXBlKGNvdmFyaWFudCBWb2lkVHlwZSB0eXBlLAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZUtpbmQudm9pZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVWYXJpYWJsZVR5cGUoY292YXJpYW50IFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwKICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVLaW5kLnR5cGVWYXJpYWJsZSk7CiAgICBJbmRleGVkVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSA9IHR5cGUuZWxlbWVudDsKICAgIF9zaW5rLndyaXRlVHlwZVZhcmlhYmxlKHR5cGVWYXJpYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoY292YXJpYW50IEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUsCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgaW50IGluZGV4ID0gZnVuY3Rpb25UeXBlVmFyaWFibGVzLmluZGV4T2YodHlwZSk7CiAgICBpZiAoaW5kZXggPT0gLTEpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgZnJlZSB2YXJpYWJsZXMuCiAgICAgIF9zaW5rLl93cml0ZURhcnRUeXBlKGNvbnN0IER5bmFtaWNUeXBlKCksIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9IGVsc2UgewogICAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVLaW5kLmZ1bmN0aW9uVHlwZVZhcmlhYmxlKTsKICAgICAgX3Npbmsud3JpdGVJbnQoaW5kZXgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlIHR5cGUsCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlS2luZC5mdW5jdGlvblR5cGUpOwogICAgZnVuY3Rpb25UeXBlVmFyaWFibGVzID0KICAgICAgICBuZXcgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4uZnJvbShmdW5jdGlvblR5cGVWYXJpYWJsZXMpCiAgICAgICAgICAuLmFkZEFsbCh0eXBlLnR5cGVWYXJpYWJsZXMpOwogICAgX3Npbmsud3JpdGVJbnQodHlwZS50eXBlVmFyaWFibGVzLmxlbmd0aCk7CiAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICBfc2luay5fd3JpdGVEYXJ0VHlwZSh2YXJpYWJsZS5ib3VuZCwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0KICAgIF9zaW5rLl93cml0ZURhcnRUeXBlKHR5cGUucmV0dXJuVHlwZSwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIHZpc2l0VHlwZXModHlwZS5wYXJhbWV0ZXJUeXBlcywgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIHZpc2l0VHlwZXModHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgdmlzaXRUeXBlcyh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICBmb3IgKFN0cmluZyBuYW1lZFBhcmFtZXRlciBpbiB0eXBlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBfc2luay53cml0ZVN0cmluZyhuYW1lZFBhcmFtZXRlcik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJmYWNlVHlwZShjb3ZhcmlhbnQgSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZUtpbmQuaW50ZXJmYWNlVHlwZSk7CiAgICBfc2luay53cml0ZUNsYXNzKHR5cGUuZWxlbWVudCk7CiAgICB2aXNpdFR5cGVzKHR5cGUudHlwZUFyZ3VtZW50cywgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlZGVmVHlwZShjb3ZhcmlhbnQgVHlwZWRlZlR5cGUgdHlwZSwKICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVLaW5kLnR5cGVkZWYpOwogICAgX3Npbmsud3JpdGVUeXBlZGVmKHR5cGUuZWxlbWVudCk7CiAgICB2aXNpdFR5cGVzKHR5cGUudHlwZUFyZ3VtZW50cywgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIF9zaW5rLl93cml0ZURhcnRUeXBlKHR5cGUudW5hbGlhc2VkLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdER5bmFtaWNUeXBlKGNvdmFyaWFudCBEeW5hbWljVHlwZSB0eXBlLAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZUtpbmQuZHluYW1pY1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1dHVyZU9yVHlwZShjb3ZhcmlhbnQgRnV0dXJlT3JUeXBlIHR5cGUsCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlS2luZC5mdXR1cmVPcik7CiAgICBfc2luay5fd3JpdGVEYXJ0VHlwZSh0eXBlLnR5cGVBcmd1bWVudCwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICB9Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtpci5EYXJ0VHlwZV0gc3ViY2xhc3NlcyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIERhcnRUeXBlTm9kZUtpbmQgewogIG5vbmUsCiAgdm9pZFR5cGUsCiAgdHlwZVBhcmFtZXRlclR5cGUsCiAgZnVuY3Rpb25UeXBlLAogIGZ1bmN0aW9uVHlwZVZhcmlhYmxlLAogIGludGVyZmFjZVR5cGUsCiAgdHlwZWRlZiwKICBkeW5hbWljVHlwZSwKICBib3R0b21UeXBlLAogIGludmFsaWRUeXBlLAogIHRoaXNJbnRlcmZhY2VUeXBlLAogIGV4YWN0SW50ZXJmYWNlVHlwZSwKICBkb2VzTm90Q29tcGxldGUsCn0KCmNvbnN0IFN0cmluZyBmdW5jdGlvblR5cGVOb2RlVGFnID0gJ2Z1bmN0aW9uLXR5cGUtbm9kZSc7CgpjbGFzcyBEYXJ0VHlwZU5vZGVXcml0ZXIKICAgIGV4dGVuZHMgaXIuRGFydFR5cGVWaXNpdG9yMTx2b2lkLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+PiB7CiAgZmluYWwgQWJzdHJhY3REYXRhU2luayBfc2luazsKCiAgRGFydFR5cGVOb2RlV3JpdGVyKHRoaXMuX3NpbmspOwoKICB2b2lkIHZpc2l0VHlwZXMoCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVzLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVJbnQodHlwZXMubGVuZ3RoKTsKICAgIGZvciAoaXIuRGFydFR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICBfc2luay5fd3JpdGVEYXJ0VHlwZU5vZGUodHlwZSwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdERhcnRUeXBlKAogICAgICBpci5EYXJ0VHlwZSBub2RlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlVuZXhwZWN0ZWQgaXIuRGFydFR5cGUgJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludmFsaWRUeXBlKAogICAgICBpci5JbnZhbGlkVHlwZSBub2RlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQuaW52YWxpZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdER5bmFtaWNUeXBlKAogICAgICBpci5EeW5hbWljVHlwZSBub2RlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQuZHluYW1pY1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZvaWRUeXBlKAogICAgICBpci5Wb2lkVHlwZSBub2RlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQudm9pZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvdHRvbVR5cGUoCiAgICAgIGlyLkJvdHRvbVR5cGUgbm9kZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIGlmIChub2RlID09IGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKSkgewogICAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC5kb2VzTm90Q29tcGxldGUpOwogICAgfSBlbHNlIHsKICAgICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQuYm90dG9tVHlwZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJmYWNlVHlwZSgKICAgICAgaXIuSW50ZXJmYWNlVHlwZSBub2RlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgaWYgKG5vZGUgaXMgVGhpc0ludGVyZmFjZVR5cGUpIHsKICAgICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQudGhpc0ludGVyZmFjZVR5cGUpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIEV4YWN0SW50ZXJmYWNlVHlwZSkgewogICAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC5leGFjdEludGVyZmFjZVR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQuaW50ZXJmYWNlVHlwZSk7CiAgICB9CiAgICBfc2luay53cml0ZUNsYXNzTm9kZShub2RlLmNsYXNzTm9kZSk7CiAgICB2aXNpdFR5cGVzKG5vZGUudHlwZUFyZ3VtZW50cywgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGUoCiAgICAgIGlyLkZ1bmN0aW9uVHlwZSBub2RlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQuZnVuY3Rpb25UeXBlKTsKICAgIF9zaW5rLmJlZ2luKGZ1bmN0aW9uVHlwZU5vZGVUYWcpOwogICAgZnVuY3Rpb25UeXBlVmFyaWFibGVzID0KICAgICAgICBuZXcgTGlzdDxpci5UeXBlUGFyYW1ldGVyPi5mcm9tKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykKICAgICAgICAgIC4uYWRkQWxsKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgX3Npbmsud3JpdGVJbnQobm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHBhcmFtZXRlciBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIF9zaW5rLndyaXRlU3RyaW5nKHBhcmFtZXRlci5uYW1lKTsKICAgICAgX3NpbmsuX3dyaXRlRGFydFR5cGVOb2RlKHBhcmFtZXRlci5ib3VuZCwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgX3NpbmsuX3dyaXRlRGFydFR5cGVOb2RlKHBhcmFtZXRlci5kZWZhdWx0VHlwZSwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0KICAgIF9zaW5rLl93cml0ZURhcnRUeXBlTm9kZShub2RlLnJldHVyblR5cGUsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICBfc2luay53cml0ZUludChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpOwogICAgdmlzaXRUeXBlcyhub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgX3Npbmsud3JpdGVJbnQobm9kZS5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIGZvciAoaXIuTmFtZWRUeXBlIHBhcmFtZXRlciBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBfc2luay53cml0ZVN0cmluZyhwYXJhbWV0ZXIubmFtZSk7CiAgICAgIF9zaW5rLl93cml0ZURhcnRUeXBlTm9kZShwYXJhbWV0ZXIudHlwZSwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0KICAgIF9zaW5rLl93cml0ZURhcnRUeXBlTm9kZShub2RlLnR5cGVkZWZUeXBlLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMsCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIF9zaW5rLmVuZChmdW5jdGlvblR5cGVOb2RlVGFnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZSgKICAgICAgaXIuVHlwZVBhcmFtZXRlclR5cGUgbm9kZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIGludCBpbmRleCA9IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5pbmRleE9mKG5vZGUucGFyYW1ldGVyKTsKICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC5mdW5jdGlvblR5cGVWYXJpYWJsZSk7CiAgICAgIF9zaW5rLndyaXRlSW50KGluZGV4KTsKICAgICAgX3NpbmsuX3dyaXRlRGFydFR5cGVOb2RlKG5vZGUucHJvbW90ZWRCb3VuZCwgZnVuY3Rpb25UeXBlVmFyaWFibGVzLAogICAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLnR5cGVQYXJhbWV0ZXJUeXBlKTsKICAgICAgX3Npbmsud3JpdGVUeXBlUGFyYW1ldGVyTm9kZShub2RlLnBhcmFtZXRlcik7CiAgICAgIF9zaW5rLl93cml0ZURhcnRUeXBlTm9kZShub2RlLnByb21vdGVkQm91bmQsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcywKICAgICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZWRlZlR5cGUoCiAgICAgIGlyLlR5cGVkZWZUeXBlIG5vZGUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC50eXBlZGVmKTsKICAgIF9zaW5rLndyaXRlVHlwZWRlZk5vZGUobm9kZS50eXBlZGVmTm9kZSk7CiAgICB2aXNpdFR5cGVzKG5vZGUudHlwZUFyZ3VtZW50cywgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICB9Cn0KCi8vLyBEYXRhIHNpbmsgaGVscGVyIHRoYXQgY2Fub25pY2FsaXplcyBbRV0gdmFsdWVzIHVzaW5nIGluZGljZXMuCmNsYXNzIEluZGV4ZWRTaW5rPEU+IHsKICBmaW5hbCBBYnN0cmFjdERhdGFTaW5rIF9zaW5rOwogIGZpbmFsIE1hcDxFLCBpbnQ+IF9jYWNoZSA9IHtudWxsOiAwfTsgLy8gc2xvdCAwIGlzIHByZS1hbGxvY2F0ZWQgdG8gYG51bGxgLgoKICBJbmRleGVkU2luayh0aGlzLl9zaW5rKTsKCiAgLy8vIFdyaXRlIGEgcmVmZXJlbmNlIHRvIFt2YWx1ZV0gdG8gdGhlIGRhdGEgc2luay4KICAvLy8KICAvLy8gSWYgW3ZhbHVlXSBoYXMgbm90IGJlZW4gY2Fub25pY2FsaXplZCB5ZXQsIFt3cml0ZVZhbHVlXSBpcyBjYWxsZWQgdG8KICAvLy8gc2VyaWFsaXplIHRoZSBbdmFsdWVdIGl0c2VsZi4KICB2b2lkIHdyaXRlKEUgdmFsdWUsIHZvaWQgd3JpdGVWYWx1ZShFIHZhbHVlKSkgewogICAgY29uc3QgaW50IHBlbmRpbmcgPSAtMTsKICAgIGludCBpbmRleCA9IF9jYWNoZVt2YWx1ZV07CiAgICBpZiAoaW5kZXggPT0gbnVsbCkgewogICAgICBpbmRleCA9IF9jYWNoZS5sZW5ndGg7CiAgICAgIF9zaW5rLl93cml0ZUludEludGVybmFsKGluZGV4KTsKICAgICAgX2NhY2hlW3ZhbHVlXSA9IHBlbmRpbmc7IC8vIEluY3JlbWVudHMgbGVuZ3RoIHRvIGFsbG9jYXRlIHNsb3QuCiAgICAgIHdyaXRlVmFsdWUodmFsdWUpOwogICAgICBfY2FjaGVbdmFsdWVdID0gaW5kZXg7CiAgICB9IGVsc2UgaWYgKGluZGV4ID09IHBlbmRpbmcpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiQ3ljbGljIGRlcGVuZGVuY3kgb24gY2FjaGVkIHZhbHVlOiAkdmFsdWUiKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW5rLl93cml0ZUludEludGVybmFsKGluZGV4KTsKICAgIH0KICB9Cn0KCi8vLyBEYXRhIHNvdXJjZSBoZWxwZXIgcmVhZHMgY2Fub25pY2FsaXplZCBbRV0gdmFsdWVzIHRocm91Z2ggaW5kaWNlcy4KY2xhc3MgSW5kZXhlZFNvdXJjZTxFPiB7CiAgZmluYWwgQWJzdHJhY3REYXRhU291cmNlIF9zb3VyY2U7CiAgZmluYWwgTGlzdDxFPiBfY2FjaGUgPSBbbnVsbF07IC8vIHNsb3QgMCBpcyBwcmUtYWxsb2NhdGVkIHRvIGBudWxsYC4KCiAgSW5kZXhlZFNvdXJjZSh0aGlzLl9zb3VyY2UpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gW0VdIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBJZiB0aGUgdmFsdWUgaGFzbid0IHlldCBiZWVuIHJlYWQsIFtyZWFkVmFsdWVdIGlzIGNhbGxlZCB0byBkZXNlcmlhbGl6ZQogIC8vLyB0aGUgdmFsdWUgaXRzZWxmLgogIEUgcmVhZChFIHJlYWRWYWx1ZSgpKSB7CiAgICBpbnQgaW5kZXggPSBfc291cmNlLl9yZWFkSW50SW50ZXJuYWwoKTsKICAgIGlmIChpbmRleCA+PSBfY2FjaGUubGVuZ3RoKSB7CiAgICAgIGFzc2VydChpbmRleCA9PSBfY2FjaGUubGVuZ3RoKTsKICAgICAgX2NhY2hlLmFkZChudWxsKTsgLy8gcGxhY2Vob2xkZXIuCiAgICAgIEUgdmFsdWUgPSByZWFkVmFsdWUoKTsKICAgICAgX2NhY2hlW2luZGV4XSA9IHZhbHVlOwogICAgICByZXR1cm4gdmFsdWU7CiAgICB9IGVsc2UgewogICAgICBFIHZhbHVlID0gX2NhY2hlW2luZGV4XTsKICAgICAgaWYgKHZhbHVlID09IG51bGwgJiYgaW5kZXggIT0gMCkgewogICAgICAgIHRocm93IFN0YXRlRXJyb3IoJ1VuZmlsbGVkIGluZGV4ICRpbmRleCBvZiAkRScpOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICB9Cn0KgYgATk48AR4BSQRNGRAICgoNBw8NDw4MFQwQDgwKCgcCAVEoAUMRCg0MGRUCAUkVBwoIEBEfDAIBShkNDxYXAgFLGgcQAgFFDBYBEwEMKwEMHC0lIQQBDCYCAUYUCAwQGBARCw8MAgFQFUMgAR4BDCY/MAETUCIjOQYEAQwuOiwEAQw+OjA1KwQBDEY6NRc0SA06HQYEAQw2OjAcQygvQEMGQjxEQTopBgQBDDg6MSQ7BAEMNDorJjtBBAEMNDovBAEMNjosRAQCAUkYCAwVEBgRCw8ODxUWEwIBOQEZQCABIgETTyImPQYEAQwYSCBABAEMGUszBAEMGUszBAEMFkgwBAEMGEovOQ00BgQBDBtNJTstPA03Bio7BAEMGkw0Jhw/KTA+KUhOBkYxQjE7KUcGRhokBAEMH1E/Fz4dShwNOzRKHAYEAQwZSy8uOwQCAUIXIE4BGwE1BkskMhwfGR0mRhkdI0gNJgYEAgFHGSRHAR8BPgZOGBosIiYoHR0UDR8pOQgUBgQCAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL2hlbHBlcnMuZGFydDxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL21lbWJlcl9kYXRhLmRhcnShLi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIEhlbHBlciBmb3IgbG9va2luZyB1cCBvYmplY3QgbGlicmFyeSBkYXRhIGZyb20gYW4gW2lyLkNvbXBvbmVudF0gbm9kZS4KY2xhc3MgQ29tcG9uZW50TG9va3VwIHsKICBmaW5hbCBpci5Db21wb25lbnQgX2NvbXBvbmVudDsKCiAgLy8vIENhY2hlIG9mIFtfTGlicmFyeURhdGFdIGZvciBsaWJyYXJpZXMgaW4gW19jb21wb25lbnRdLgogIE1hcDxVcmksIF9MaWJyYXJ5RGF0YT4gX2xpYnJhcnlNYXA7CgogIENvbXBvbmVudExvb2t1cCh0aGlzLl9jb21wb25lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgW19MaWJyYXJ5RGF0YV0gb2JqZWN0IGZvciB0aGUgbGlicmFyeSB3aXRoIHRoZSBbY2Fub25pY2FsVXJpXS4KICBfTGlicmFyeURhdGEgZ2V0TGlicmFyeURhdGFCeVVyaShVcmkgY2Fub25pY2FsVXJpKSB7CiAgICBpZiAoX2xpYnJhcnlNYXAgPT0gbnVsbCkgewogICAgICBfbGlicmFyeU1hcCA9IHt9OwogICAgICBmb3IgKGlyLkxpYnJhcnkgbGlicmFyeSBpbiBfY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICAgIF9saWJyYXJ5TWFwW2xpYnJhcnkuaW1wb3J0VXJpXSA9IG5ldyBfTGlicmFyeURhdGEobGlicmFyeSk7CiAgICAgIH0KICAgIH0KICAgIF9MaWJyYXJ5RGF0YSBkYXRhID0gX2xpYnJhcnlNYXBbY2Fub25pY2FsVXJpXTsKICAgIGFzc2VydChkYXRhICE9IG51bGwsICJObyBsaWJyYXJ5IGZvdW5kIGZvciAkY2Fub25pY2FsVXJpLiIpOwogICAgcmV0dXJuIGRhdGE7CiAgfQp9CgovLy8gUmV0dXJucyBhIG5hbWUgdW5pcXVlbHkgaWRlbnRpZnlpbmcgYSBtZW1iZXIgd2l0aGluIGl0cyBlbmNsb3NpbmcgbGlicmFyeQovLy8gb3IgY2xhc3MuClN0cmluZyBfY29tcHV0ZU1lbWJlck5hbWUoaXIuTWVtYmVyIG1lbWJlcikgewogIGlmIChtZW1iZXIubmFtZS5pc1ByaXZhdGUgJiYKICAgICAgbWVtYmVyLm5hbWUubGlicmFyeU5hbWUgIT0gbWVtYmVyLmVuY2xvc2luZ0xpYnJhcnkucmVmZXJlbmNlKSB7CiAgICAvLyBUT0RPKDMzNzMyKTogSGFuZGxlIG5vU3VjaE1ldGhvZCBmb3J3YXJkZXJzIGZvciBwcml2YXRlIG1lbWJlcnMgZnJvbQogICAgLy8gb3RoZXIgbGlicmFyaWVzLgogICAgcmV0dXJuIG51bGw7CiAgfQogIFN0cmluZyBuYW1lID0gbWVtYmVyLm5hbWUubmFtZTsKICBpZiAobWVtYmVyIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICBuYW1lID0gJy4kbmFtZSc7CiAgfSBlbHNlIGlmIChtZW1iZXIgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgIG5hbWUgPSAnLiRuYW1lJzsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5TZXR0ZXIpIHsKICAgICAgbmFtZSArPSAiPSI7CiAgICB9CiAgfQogIHJldHVybiBuYW1lOwp9CgovLy8gSGVscGVyIGZvciBsb29raW5nIHVwIGNsYXNzZXMgYW5kIG1lbWJlcnMgZnJvbSBhbiBbaXIuTGlicmFyeV0gbm9kZS4KY2xhc3MgX0xpYnJhcnlEYXRhIHsKICAvLy8gVGhlIFtpci5MaWJyYXJ5XSB0aGF0IGRlZmluZXMgdGhlIGxpYnJhcnkuCiAgZmluYWwgaXIuTGlicmFyeSBub2RlOwoKICAvLy8gQ2FjaGUgb2YgW19DbGFzc0RhdGFdIGZvciBjbGFzc2VzIGluIHRoaXMgbGlicmFyeS4KICBNYXA8U3RyaW5nLCBfQ2xhc3NEYXRhPiBfY2xhc3Nlc0J5TmFtZTsKICBNYXA8aXIuQ2xhc3MsIF9DbGFzc0RhdGE+IF9jbGFzc2VzQnlOb2RlOwoKICAvLy8gQ2FjaGUgb2YgW2lyLlR5cGVkZWZdIG5vZGVzIGZvciB0eXBlZGVmcyBpbiB0aGlzIGxpYnJhcnkuCiAgTWFwPFN0cmluZywgaXIuVHlwZWRlZj4gX3R5cGVkZWZzOwoKICAvLy8gQ2FjaGUgb2YgW19NZW1iZXJEYXRhXSBmb3IgbWVtYmVycyBpbiB0aGlzIGxpYnJhcnkuCiAgTWFwPFN0cmluZywgX01lbWJlckRhdGE+IF9tZW1iZXJzQnlOYW1lOwogIE1hcDxpci5NZW1iZXIsIF9NZW1iZXJEYXRhPiBfbWVtYmVyc0J5Tm9kZTsKCiAgX0xpYnJhcnlEYXRhKHRoaXMubm9kZSk7CgogIHZvaWQgX2Vuc3VyZUNsYXNzZXMoKSB7CiAgICBpZiAoX2NsYXNzZXNCeU5hbWUgPT0gbnVsbCkgewogICAgICBfY2xhc3Nlc0J5TmFtZSA9IHt9OwogICAgICBfY2xhc3Nlc0J5Tm9kZSA9IHt9OwogICAgICBmb3IgKGlyLkNsYXNzIGNscyBpbiBub2RlLmNsYXNzZXMpIHsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICFfY2xhc3Nlc0J5TmFtZS5jb250YWluc0tleShjbHMubmFtZSksCiAgICAgICAgICAgICJEdXBsaWNhdGUgY2xhc3MgJyR7Y2xzLm5hbWV9JyBpbiAkX2NsYXNzZXNCeU5hbWUgIgogICAgICAgICAgICAidHJ5aW5nIHRvIGFkZCAkY2xzLiIpOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgIV9jbGFzc2VzQnlOb2RlLmNvbnRhaW5zS2V5KGNscyksCiAgICAgICAgICAgICJEdXBsaWNhdGUgY2xhc3MgJyR7Y2xzLm5hbWV9JyBpbiAkX2NsYXNzZXNCeU5vZGUgIgogICAgICAgICAgICAidHJ5aW5nIHRvIGFkZCAkY2xzLiIpOwogICAgICAgIF9jbGFzc2VzQnlOb2RlW2Nsc10gPSBfY2xhc3Nlc0J5TmFtZVtjbHMubmFtZV0gPSBuZXcgX0NsYXNzRGF0YShjbHMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW19DbGFzc0RhdGFdIGZvciB0aGUgY2xhc3MgW25hbWVdIGluIHRoaXMgbGlicmFyeS4KICBfQ2xhc3NEYXRhIGxvb2t1cENsYXNzQnlOYW1lKFN0cmluZyBuYW1lKSB7CiAgICBfZW5zdXJlQ2xhc3NlcygpOwogICAgcmV0dXJuIF9jbGFzc2VzQnlOYW1lW25hbWVdOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtfQ2xhc3NEYXRhXSBmb3IgdGhlIGNsYXNzIFtub2RlXSBpbiB0aGlzIGxpYnJhcnkuCiAgX0NsYXNzRGF0YSBsb29rdXBDbGFzc0J5Tm9kZShpci5DbGFzcyBub2RlKSB7CiAgICBfZW5zdXJlQ2xhc3NlcygpOwogICAgcmV0dXJuIF9jbGFzc2VzQnlOb2RlW25vZGVdOwogIH0KCiAgaXIuVHlwZWRlZiBsb29rdXBUeXBlZGVmKFN0cmluZyBuYW1lKSB7CiAgICBpZiAoX3R5cGVkZWZzID09IG51bGwpIHsKICAgICAgX3R5cGVkZWZzID0ge307CiAgICAgIGZvciAoaXIuVHlwZWRlZiB0eXBlZGVmIGluIG5vZGUudHlwZWRlZnMpIHsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICFfdHlwZWRlZnMuY29udGFpbnNLZXkodHlwZWRlZi5uYW1lKSwKICAgICAgICAgICAgIkR1cGxpY2F0ZSB0eXBlZGVmICcke3R5cGVkZWYubmFtZX0nIGluICRfdHlwZWRlZnMgIgogICAgICAgICAgICAidHJ5aW5nIHRvIGFkZCAkdHlwZWRlZi4iKTsKICAgICAgICBfdHlwZWRlZnNbdHlwZWRlZi5uYW1lXSA9IHR5cGVkZWY7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfdHlwZWRlZnNbbmFtZV07CiAgfQoKICB2b2lkIF9lbnN1cmVNZW1iZXJzKCkgewogICAgaWYgKF9tZW1iZXJzQnlOYW1lID09IG51bGwpIHsKICAgICAgX21lbWJlcnNCeU5hbWUgPSB7fTsKICAgICAgX21lbWJlcnNCeU5vZGUgPSB7fTsKICAgICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIG5vZGUubWVtYmVycykgewogICAgICAgIFN0cmluZyBuYW1lID0gX2NvbXB1dGVNZW1iZXJOYW1lKG1lbWJlcik7CiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAhX21lbWJlcnNCeU5hbWUuY29udGFpbnNLZXkobmFtZSksCiAgICAgICAgICAgICJEdXBsaWNhdGUgbWVtYmVyICckbmFtZScgaW4gJF9tZW1iZXJzQnlOYW1lICIKICAgICAgICAgICAgInRyeWluZyB0byBhZGQgJG1lbWJlci4iKTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICFfbWVtYmVyc0J5Tm9kZS5jb250YWluc0tleShtZW1iZXIpLAogICAgICAgICAgICAiRHVwbGljYXRlIG1lbWJlciAnJG5hbWUnIGluICRfbWVtYmVyc0J5Tm9kZSAiCiAgICAgICAgICAgICJ0cnlpbmcgdG8gYWRkICRtZW1iZXIuIik7CiAgICAgICAgX21lbWJlcnNCeU5vZGVbbWVtYmVyXSA9IF9tZW1iZXJzQnlOYW1lW25hbWVdID0gbmV3IF9NZW1iZXJEYXRhKG1lbWJlcik7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbX01lbWJlckRhdGFdIGZvciB0aGUgbWVtYmVyIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgW25hbWVdIGluCiAgLy8vIHRoaXMgbGlicmFyeS4KICBfTWVtYmVyRGF0YSBsb29rdXBNZW1iZXJEYXRhQnlOYW1lKFN0cmluZyBuYW1lKSB7CiAgICBfZW5zdXJlTWVtYmVycygpOwogICAgcmV0dXJuIF9tZW1iZXJzQnlOYW1lW25hbWVdOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtfTWVtYmVyRGF0YV0gZm9yIHRoZSBtZW1iZXIgW25vZGVdIGluIHRoaXMgbGlicmFyeS4KICBfTWVtYmVyRGF0YSBsb29rdXBNZW1iZXJEYXRhQnlOb2RlKGlyLk1lbWJlciBub2RlKSB7CiAgICBfZW5zdXJlTWVtYmVycygpOwogICAgcmV0dXJuIF9tZW1iZXJzQnlOb2RlW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ19MaWJyYXJ5RGF0YSgkbm9kZSgke2lkZW50aXR5SGFzaENvZGUobm9kZSl9KSknOwp9CgovLy8gSGVscGVyIGZvciBsb29raW5nIHVwIG1lbWJlcnMgZnJvbSBhbiBbaXIuQ2xhc3NdIG5vZGUuCmNsYXNzIF9DbGFzc0RhdGEgewogIC8vLyBUaGUgW2lyLkNsYXNzXSB0aGF0IGRlZmluZXMgdGhlIGNsYXNzLgogIGZpbmFsIGlyLkNsYXNzIG5vZGU7CgogIC8vLyBDYWNoZSBvZiBbX01lbWJlckRhdGFdIGZvciBtZW1iZXJzIGluIHRoaXMgY2xhc3MuCiAgTWFwPFN0cmluZywgX01lbWJlckRhdGE+IF9tZW1iZXJzQnlOYW1lOwogIE1hcDxpci5NZW1iZXIsIF9NZW1iZXJEYXRhPiBfbWVtYmVyc0J5Tm9kZTsKCiAgX0NsYXNzRGF0YSh0aGlzLm5vZGUpOwoKICB2b2lkIF9lbnN1cmVNZW1iZXJzKCkgewogICAgaWYgKF9tZW1iZXJzQnlOYW1lID09IG51bGwpIHsKICAgICAgX21lbWJlcnNCeU5hbWUgPSB7fTsKICAgICAgX21lbWJlcnNCeU5vZGUgPSB7fTsKICAgICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIG5vZGUubWVtYmVycykgewogICAgICAgIFN0cmluZyBuYW1lID0gX2NvbXB1dGVNZW1iZXJOYW1lKG1lbWJlcik7CiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAhX21lbWJlcnNCeU5hbWUuY29udGFpbnNLZXkobmFtZSksCiAgICAgICAgICAgICJEdXBsaWNhdGUgbWVtYmVyICckbmFtZScgaW4gJF9tZW1iZXJzQnlOYW1lICIKICAgICAgICAgICAgInRyeWluZyB0byBhZGQgJG1lbWJlci4iKTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICFfbWVtYmVyc0J5Tm9kZS5jb250YWluc0tleShtZW1iZXIpLAogICAgICAgICAgICAiRHVwbGljYXRlIG1lbWJlciAnJG5hbWUnIGluICRfbWVtYmVyc0J5Tm9kZSAiCiAgICAgICAgICAgICJ0cnlpbmcgdG8gYWRkICRtZW1iZXIuIik7CiAgICAgICAgX21lbWJlcnNCeU5vZGVbbWVtYmVyXSA9IF9tZW1iZXJzQnlOYW1lW25hbWVdID0gbmV3IF9NZW1iZXJEYXRhKG1lbWJlcik7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbX01lbWJlckRhdGFdIGZvciB0aGUgbWVtYmVyIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgW25hbWVdIGluCiAgLy8vIHRoaXMgY2xhc3MuCiAgX01lbWJlckRhdGEgbG9va3VwTWVtYmVyRGF0YUJ5TmFtZShTdHJpbmcgbmFtZSkgewogICAgX2Vuc3VyZU1lbWJlcnMoKTsKICAgIHJldHVybiBfbWVtYmVyc0J5TmFtZVtuYW1lXTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbX01lbWJlckRhdGFdIGZvciB0aGUgbWVtYmVyIFtub2RlXSBpbiB0aGlzIGNsYXNzLgogIF9NZW1iZXJEYXRhIGxvb2t1cE1lbWJlckRhdGFCeU5vZGUoaXIuTWVtYmVyIG5vZGUpIHsKICAgIF9lbnN1cmVNZW1iZXJzKCk7CiAgICByZXR1cm4gX21lbWJlcnNCeU5vZGVbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnX0NsYXNzRGF0YSgkbm9kZSgke2lkZW50aXR5SGFzaENvZGUobm9kZSl9KSknOwp9CgovLy8gSGVscGVyIGZvciBsb29raW5nIHVwIGNoaWxkIFtpci5UcmVlTm9kZV1zIG9mIGEgW2lyLk1lbWJlcl0gbm9kZS4KY2xhc3MgX01lbWJlckRhdGEgewogIC8vLyBUaGUgW2lyLk1lbWJlcl0gdGhhdCBkZWZpbmVzIHRoZSBtZW1iZXIuCiAgZmluYWwgaXIuTWVtYmVyIG5vZGU7CgogIC8vLyBDYWNoZWQgaW5kZXggdG8gW2lyLlRyZWVOb2RlXSBtYXAgdXNlZCBmb3IgZGVzZXJpYWxpemF0aW9uIG9mCiAgLy8vIFtpci5UcmVlTm9kZV1zLgogIE1hcDxpbnQsIGlyLlRyZWVOb2RlPiBfaW5kZXhUb05vZGVNYXA7CgogIC8vLyBDYWNoZWQgW2lyLlRyZWVOb2RlXSB0byBpbmRleCBtYXAgdXNlZCBmb3Igc2VyaWFsaXphdGlvbiBvZgogIC8vLyBbaXIuVHJlZU5vZGVdcy4KICBNYXA8aXIuVHJlZU5vZGUsIGludD4gX25vZGVUb0luZGV4TWFwOwoKICAvLy8gQ2FjaGVkIFtpci5Db25zdGFudEV4cHJlc3Npb25dIHRvIFtfQ29uc3RhbnROb2RlSW5kZXhlclZpc2l0b3JdIG1hcCB1c2VkCiAgLy8vIGZvciBmYXN0IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIG9mIGNvbnN0YW50IHJlZmVyZW5jZXMuCiAgTWFwPGlyLkNvbnN0YW50RXhwcmVzc2lvbiwgX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yPiBfY29uc3RhbnRJbmRleE1hcDsKCiAgX01lbWJlckRhdGEodGhpcy5ub2RlKTsKCiAgdm9pZCBfZW5zdXJlTWFwcygpIHsKICAgIGlmIChfaW5kZXhUb05vZGVNYXAgPT0gbnVsbCkgewogICAgICBfaW5kZXhUb05vZGVNYXAgPSB7fTsKICAgICAgX25vZGVUb0luZGV4TWFwID0ge307CiAgICAgIG5vZGUuYWNjZXB0KAogICAgICAgICAgbmV3IF9UcmVlTm9kZUluZGV4ZXJWaXNpdG9yKF9pbmRleFRvTm9kZU1hcCwgX25vZGVUb0luZGV4TWFwKSk7CiAgICB9CiAgfQoKICBfQ29uc3RhbnROb2RlSW5kZXhlclZpc2l0b3IgX2NyZWF0ZUNvbnN0YW50SW5kZXhlcigKICAgICAgaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIF9Db25zdGFudE5vZGVJbmRleGVyVmlzaXRvciBpbmRleGVyID0gbmV3IF9Db25zdGFudE5vZGVJbmRleGVyVmlzaXRvcigpOwogICAgbm9kZS5jb25zdGFudC5hY2NlcHQoaW5kZXhlcik7CiAgICByZXR1cm4gaW5kZXhlcjsKICB9CgogIGlyLkNvbnN0YW50IGdldENvbnN0YW50QnlJbmRleChpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSwgaW50IGluZGV4KSB7CiAgICBfY29uc3RhbnRJbmRleE1hcCA/Pz0ge307CiAgICBfQ29uc3RhbnROb2RlSW5kZXhlclZpc2l0b3IgaW5kZXhlciA9CiAgICAgICAgX2NvbnN0YW50SW5kZXhNYXBbbm9kZV0gPz89IF9jcmVhdGVDb25zdGFudEluZGV4ZXIobm9kZSk7CiAgICByZXR1cm4gaW5kZXhlci5nZXRDb25zdGFudChpbmRleCk7CiAgfQoKICBpbnQgZ2V0SW5kZXhCeUNvbnN0YW50KGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlLCBpci5Db25zdGFudCBjb25zdGFudCkgewogICAgX2NvbnN0YW50SW5kZXhNYXAgPz89IHt9OwogICAgX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yIGluZGV4ZXIgPQogICAgICAgIF9jb25zdGFudEluZGV4TWFwW25vZGVdID8/PSBfY3JlYXRlQ29uc3RhbnRJbmRleGVyKG5vZGUpOwogICAgcmV0dXJuIGluZGV4ZXIuZ2V0SW5kZXgoY29uc3RhbnQpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtpci5UcmVlTm9kZV0gY29ycmVzcG9uZGluZyB0byBbaW5kZXhdIGluIHRoaXMgbWVtYmVyLgogIGlyLlRyZWVOb2RlIGdldFRyZWVOb2RlQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIF9lbnN1cmVNYXBzKCk7CiAgICBpci5UcmVlTm9kZSB0cmVlTm9kZSA9IF9pbmRleFRvTm9kZU1hcFtpbmRleF07CiAgICBhc3NlcnQodHJlZU5vZGUgIT0gbnVsbCwgIk5vIFRyZWVOb2RlIGZvdW5kIGZvciBpbmRleCAkaW5kZXggaW4gJG5vZGUuIik7CiAgICByZXR1cm4gdHJlZU5vZGU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgaW5kZXggY29ycmVzcG9uZGluZyB0byBbaXIuVHJlZU5vZGVdIGluIHRoaXMgbWVtYmVyLgogIGludCBnZXRJbmRleEJ5VHJlZU5vZGUoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgX2Vuc3VyZU1hcHMoKTsKICAgIGludCBpbmRleCA9IF9ub2RlVG9JbmRleE1hcFtub2RlXTsKICAgIGFzc2VydChpbmRleCAhPSBudWxsLCAiTm8gaW5kZXggZm91bmQgZm9yICR7bm9kZS5ydW50aW1lVHlwZX0uIik7CiAgICByZXR1cm4gaW5kZXg7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnX01lbWJlckRhdGEoJG5vZGUoJHtpZGVudGl0eUhhc2hDb2RlKG5vZGUpfSkpJzsKfQqBDABOTjwBHgFLGCEBPSYBJAFRNx8YOUQIBjNBEQQCAU4OLh9GTBgRBCIiFSczFzkTBgQPAgFJFTEZATkqLAFAJQE6Ky4BGwEaIhsbKxAzQCQQLkAkTggGBAFFLhYhBAFFMBYhBAEqHRYyEDJBKCsIBhwEARoiGxsvMiQQLzsnEDE7J1EIBgQBUBQ0FiEEAUc3FiEEAQxJAgE7Ey0XATgrLgEZARoiGxsvMiQQLzsnEDE7J1EIBgQBUBI0FiEEAUU3FiEEAQxHAgFGFC8YAUQWKQFCFikBT0VNARoBFyMcHBNKBgQBNiRNIxQEAUoeKkInBAFNHipCJwQBSS4TM04VBAFHLRMnRhIEAQxIAgEzcGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9tZW1iZXJfZGF0YS5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vbWl4aW5zLmRhcnTAAEd3Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gTWl4aW4gdGhhdCBpbXBsZW1lbnRzIGFsbCBjb252ZW5pZW5jZSBtZXRob2RzIG9mIFtEYXRhU291cmNlXS4KYWJzdHJhY3QgY2xhc3MgRGF0YVNvdXJjZU1peGluIGltcGxlbWVudHMgRGF0YVNvdXJjZSB7CiAgQG92ZXJyaWRlCiAgRSByZWFkVmFsdWVPck51bGw8RT4oRSBmKCkpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiBmKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RT4gcmVhZExpc3Q8RT4oRSBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBsaXN0W2ldID0gZigpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgcmVhZEludE9yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkSW50KCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyByZWFkU3RyaW5nT3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRTdHJpbmcoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IHJlYWRTdHJpbmdzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IExpc3Q8U3RyaW5nPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHJlYWRTdHJpbmcoKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gcmVhZERhcnRUeXBlcyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PERhcnRUeXBlPiBsaXN0ID0gbmV3IExpc3Q8RGFydFR5cGU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBsaXN0W2ldID0gcmVhZERhcnRUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gcmVhZFR5cGVQYXJhbWV0ZXJOb2Rlcyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGxpc3QgPSBuZXcgTGlzdDxpci5UeXBlUGFyYW1ldGVyPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHJlYWRUeXBlUGFyYW1ldGVyTm9kZSgpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRNZW1iZXJzPEUgZXh0ZW5kcyBNZW1iZXJFbnRpdHk+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gcmVhZE1lbWJlcigpOwogICAgICBsaXN0W2ldID0gbWVtYmVyOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRNZW1iZXJOb2RlczxFIGV4dGVuZHMgaXIuTWVtYmVyPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEU+IGxpc3QgPSBuZXcgTGlzdDxFPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgaXIuTWVtYmVyIHZhbHVlID0gcmVhZE1lbWJlck5vZGUoKTsKICAgICAgbGlzdFtpXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRDbGFzc2VzPEUgZXh0ZW5kcyBDbGFzc0VudGl0eT4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICBsaXN0W2ldID0gY2xzOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SywgVj4gcmVhZExpYnJhcnlNYXA8SyBleHRlbmRzIExpYnJhcnlFbnRpdHksIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gcmVhZExpYnJhcnkoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW2xpYnJhcnldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEssIFY+IHJlYWRDbGFzc01hcDxLIGV4dGVuZHMgQ2xhc3NFbnRpdHksIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gcmVhZENsYXNzKCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtjbHNdID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEssIFY+IHJlYWRNZW1iZXJNYXA8SyBleHRlbmRzIE1lbWJlckVudGl0eSwgVj4oViBmKE1lbWJlckVudGl0eSBtZW1iZXIpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IHJlYWRNZW1iZXIoKTsKICAgICAgViB2YWx1ZSA9IGYobWVtYmVyKTsKICAgICAgbWFwW21lbWJlcl0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SywgVj4gcmVhZE1lbWJlck5vZGVNYXA8SyBleHRlbmRzIGlyLk1lbWJlciwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIE1hcDxLLCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBpci5NZW1iZXIgbm9kZSA9IHJlYWRNZW1iZXJOb2RlKCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtub2RlXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLLCBWPiByZWFkVHJlZU5vZGVNYXA8SyBleHRlbmRzIGlyLlRyZWVOb2RlLCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPEssIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGlyLlRyZWVOb2RlIG5vZGUgPSByZWFkVHJlZU5vZGUoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW25vZGVdID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiByZWFkTG9jYWxzPEUgZXh0ZW5kcyBMb2NhbD4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIExvY2FsIGxvY2FsID0gcmVhZExvY2FsKCk7CiAgICAgIGxpc3RbaV0gPSBsb2NhbDsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEssIFY+IHJlYWRMb2NhbE1hcDxLIGV4dGVuZHMgTG9jYWwsIFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgTG9jYWwgbG9jYWwgPSByZWFkTG9jYWwoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW2xvY2FsXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RT4gcmVhZFRyZWVOb2RlczxFIGV4dGVuZHMgaXIuVHJlZU5vZGU+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBpci5UcmVlTm9kZSBub2RlID0gcmVhZFRyZWVOb2RlKCk7CiAgICAgIGxpc3RbaV0gPSBub2RlOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBWPiByZWFkU3RyaW5nTWFwPFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8U3RyaW5nLCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBTdHJpbmcga2V5ID0gcmVhZFN0cmluZygpOwogICAgICBWIHZhbHVlID0gZigpOwogICAgICBtYXBba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRDbGFzcyByZWFkQ2xhc3NPck51bGwoKSB7CiAgICBib29sIGhhc0NsYXNzID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNDbGFzcykgewogICAgICByZXR1cm4gcmVhZENsYXNzKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGlyLlRyZWVOb2RlIHJlYWRUcmVlTm9kZU9yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkVHJlZU5vZGUoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZE1lbWJlciByZWFkTWVtYmVyT3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRNZW1iZXIoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTG9jYWwgcmVhZExvY2FsT3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRMb2NhbCgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHJlYWRDb25zdGFudE9yTnVsbCgpIHsKICAgIGJvb2wgaGFzQ2xhc3MgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc0NsYXNzKSB7CiAgICAgIHJldHVybiByZWFkQ29uc3RhbnQoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiByZWFkQ29uc3RhbnRzPEUgZXh0ZW5kcyBDb25zdGFudFZhbHVlPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEU+IGxpc3QgPSBuZXcgTGlzdDxFPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IHJlYWRDb25zdGFudCgpOwogICAgICBsaXN0W2ldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLLCBWPiByZWFkQ29uc3RhbnRNYXA8SyBleHRlbmRzIENvbnN0YW50VmFsdWUsIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBrZXkgPSByZWFkQ29uc3RhbnQoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkTGlicmFyeSByZWFkTGlicmFyeU9yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkTGlicmFyeSgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBJbXBvcnRFbnRpdHkgcmVhZEltcG9ydE9yTnVsbCgpIHsKICAgIGJvb2wgaGFzQ2xhc3MgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc0NsYXNzKSB7CiAgICAgIHJldHVybiByZWFkSW1wb3J0KCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8SW1wb3J0RW50aXR5PiByZWFkSW1wb3J0cyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEltcG9ydEVudGl0eT4gbGlzdCA9IG5ldyBMaXN0PEltcG9ydEVudGl0eT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSByZWFkSW1wb3J0KCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxJbXBvcnRFbnRpdHksIFY+IHJlYWRJbXBvcnRNYXA8Vj4oViBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIE1hcDxJbXBvcnRFbnRpdHksIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIEltcG9ydEVudGl0eSBrZXkgPSByZWFkSW1wb3J0KCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtrZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxpci5EYXJ0VHlwZT4gcmVhZERhcnRUeXBlTm9kZXMoe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxpci5EYXJ0VHlwZT4gbGlzdCA9IG5ldyBMaXN0PGlyLkRhcnRUeXBlPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuTmFtZSByZWFkTmFtZSgpIHsKICAgIFN0cmluZyB0ZXh0ID0gcmVhZFN0cmluZygpOwogICAgaXIuTGlicmFyeSBsaWJyYXJ5ID0gcmVhZFZhbHVlT3JOdWxsKHJlYWRMaWJyYXJ5Tm9kZSk7CiAgICByZXR1cm4gbmV3IGlyLk5hbWUodGV4dCwgbGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5MaWJyYXJ5RGVwZW5kZW5jeSByZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlKCkgewogICAgaXIuTGlicmFyeSBsaWJyYXJ5ID0gcmVhZExpYnJhcnlOb2RlKCk7CiAgICBpbnQgaW5kZXggPSByZWFkSW50KCk7CiAgICByZXR1cm4gbGlicmFyeS5kZXBlbmRlbmNpZXNbaW5kZXhdOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuTGlicmFyeURlcGVuZGVuY3kgcmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbCgpIHsKICAgIHJldHVybiByZWFkVmFsdWVPck51bGwocmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5Ob2RlIHJlYWRKc05vZGVPck51bGwoKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gcmVhZEpzTm9kZSgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gTWl4aW4gdGhhdCBpbXBsZW1lbnRzIGFsbCBjb252ZW5pZW5jZSBtZXRob2RzIG9mIFtEYXRhU2lua10uCmFic3RyYWN0IGNsYXNzIERhdGFTaW5rTWl4aW4gaW1wbGVtZW50cyBEYXRhU2luayB7CiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUludE9yTnVsbChpbnQgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlSW50KHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVTdHJpbmdPck51bGwoU3RyaW5nIHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZVN0cmluZyh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ2xhc3NPck51bGwoSW5kZXhlZENsYXNzIHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZUNsYXNzKHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMb2NhbE9yTnVsbChMb2NhbCB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVMb2NhbCh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ2xhc3NlcyhJdGVyYWJsZTxDbGFzc0VudGl0eT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKEluZGV4ZWRDbGFzcyB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZUNsYXNzKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRyZWVOb2RlcyhJdGVyYWJsZTxpci5UcmVlTm9kZT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKGlyLlRyZWVOb2RlIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlVHJlZU5vZGUodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlU3RyaW5ncyhJdGVyYWJsZTxTdHJpbmc+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChTdHJpbmcgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgd3JpdGVTdHJpbmcodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVyTm9kZXMoSXRlcmFibGU8aXIuTWVtYmVyPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoaXIuTWVtYmVyIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlTWVtYmVyTm9kZSh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVEYXJ0VHlwZXMoSXRlcmFibGU8RGFydFR5cGU+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChEYXJ0VHlwZSB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZURhcnRUeXBlKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpYnJhcnlNYXA8Vj4oTWFwPExpYnJhcnlFbnRpdHksIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBWIHZhbHVlKSB7CiAgICAgICAgd3JpdGVMaWJyYXJ5KGxpYnJhcnkpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDbGFzc01hcDxWPihNYXA8Q2xhc3NFbnRpdHksIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzLCBWIHZhbHVlKSB7CiAgICAgICAgd3JpdGVDbGFzcyhjbHMpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVNZW1iZXJNYXA8Vj4oCiAgICAgIE1hcDxNZW1iZXJFbnRpdHksIFY+IG1hcCwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIsIFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlTWVtYmVyKG1lbWJlcik7CiAgICAgICAgZihtZW1iZXIsIHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlU3RyaW5nTWFwPFY+KE1hcDxTdHJpbmcsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoU3RyaW5nIGtleSwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlU3RyaW5nKGtleSk7CiAgICAgICAgZih2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxvY2FscyhJdGVyYWJsZTxMb2NhbD4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKExvY2FsIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlTG9jYWwodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTG9jYWxNYXA8Vj4oTWFwPExvY2FsLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKExvY2FsIGtleSwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlTG9jYWwoa2V5KTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVyTm9kZU1hcDxWPihNYXA8aXIuTWVtYmVyLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKGlyLk1lbWJlciBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZU1lbWJlck5vZGUoa2V5KTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHJlZU5vZGVNYXA8Vj4oTWFwPGlyLlRyZWVOb2RlLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKGlyLlRyZWVOb2RlIGtleSwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlVHJlZU5vZGUoa2V5KTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTGlzdDxFPihJdGVyYWJsZTxFPiB2YWx1ZXMsIHZvaWQgZihFIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgdmFsdWVzLmZvckVhY2goZik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHJlZU5vZGVPck51bGwoaXIuVHJlZU5vZGUgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlVHJlZU5vZGUodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVZhbHVlT3JOdWxsPEU+KEUgdmFsdWUsIHZvaWQgZihFIHZhbHVlKSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgZih2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVyT3JOdWxsKEluZGV4ZWRNZW1iZXIgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlTWVtYmVyKHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVNZW1iZXJzKEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKEluZGV4ZWRNZW1iZXIgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgd3JpdGVNZW1iZXIodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHlwZVBhcmFtZXRlck5vZGVzKEl0ZXJhYmxlPGlyLlR5cGVQYXJhbWV0ZXI+IHZhbHVlcywKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlVHlwZVBhcmFtZXRlck5vZGUodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ29uc3RhbnRPck51bGwoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVDb25zdGFudCh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ29uc3RhbnRzKEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChDb25zdGFudFZhbHVlIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlQ29uc3RhbnQodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ29uc3RhbnRNYXA8Vj4oTWFwPENvbnN0YW50VmFsdWUsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoQ29uc3RhbnRWYWx1ZSBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZUNvbnN0YW50KGtleSk7CiAgICAgICAgZih2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpYnJhcnlPck51bGwoSW5kZXhlZExpYnJhcnkgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlTGlicmFyeSh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlSW1wb3J0T3JOdWxsKEltcG9ydEVudGl0eSB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVJbXBvcnQodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUltcG9ydHMoSXRlcmFibGU8SW1wb3J0RW50aXR5PiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoSW1wb3J0RW50aXR5IHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlSW1wb3J0KHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUltcG9ydE1hcDxWPihNYXA8SW1wb3J0RW50aXR5LCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKEltcG9ydEVudGl0eSBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZUltcG9ydChrZXkpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVEYXJ0VHlwZU5vZGVzKEl0ZXJhYmxlPGlyLkRhcnRUeXBlPiB2YWx1ZXMsCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoaXIuRGFydFR5cGUgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgd3JpdGVEYXJ0VHlwZU5vZGUodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTmFtZShpci5OYW1lIHZhbHVlKSB7CiAgICB3cml0ZVN0cmluZyh2YWx1ZS5uYW1lKTsKICAgIHdyaXRlVmFsdWVPck51bGwodmFsdWUubGlicmFyeSwgd3JpdGVMaWJyYXJ5Tm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlKGlyLkxpYnJhcnlEZXBlbmRlbmN5IHZhbHVlKSB7CiAgICBpci5MaWJyYXJ5IGxpYnJhcnkgPSB2YWx1ZS5wYXJlbnQ7CiAgICB3cml0ZUxpYnJhcnlOb2RlKGxpYnJhcnkpOwogICAgd3JpdGVJbnQobGlicmFyeS5kZXBlbmRlbmNpZXMuaW5kZXhPZih2YWx1ZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbChpci5MaWJyYXJ5RGVwZW5kZW5jeSB2YWx1ZSkgewogICAgd3JpdGVWYWx1ZU9yTnVsbCh2YWx1ZSwgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUpzTm9kZU9yTnVsbChqcy5Ob2RlIHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZUpzTm9kZSh2YWx1ZSk7CiAgICB9CiAgfQp9CoMXAE5OPAEeAUM3DCAgFBIGEQQBDDobMCcmFQYRBAEMGCAUGAYRBAEMHiAUGwYRBAEMOBswMSYeBhEEAQw8GzA1JiAGEQQBDE0bMEUmKQYRBAEMSxswJyYqGAYRBAEMTBswJyYqFwYRBAEMShswJyYlFQYRBAEMPiMbMBgmLRUcBhAEAQw6IxswGCYlFRgGEAQBDE8jGzAYJiobGwYQBAEMPSMbMBgmKRUZBhAEAQw9IxswGCYpFRkGEAQBDEMbMCcmIRcGEQQBDFEbMBgmIRUaBhAEAQxMGzAnJikWBhEEAQxGGzAdJiEVGAYQBAEMIyAUGgYRBAEMJSAUHQYRBAEMJSAUGwYRBAEMHCAUGgYRBAEMJyAUHQYRBAEMThswJyYsFwYRBAEMPyMbMBgmKhUYBhAEAQwnIBQcBhEEAQwkIBQbBhEEAQw+GzA9Jh4GEQQBDEwbMCMmJxUYBhAEAQxDGzA7JiQGEQQBDBcgOycEAQw1LBsoBAEMOzcEAQwfIBQbBhEEAgFBMwwjHhkXBgQBDCkeGRoGBAEMLh4ZGQYEAQwnHhkZBgQBDE0aGRMNHysbCAYEAQxPGhkTDR8qHggGBAEMSBoZEw0fJRwIBgQBDE8aGRMNHyggCAYEAQxMGhkTDR8nHggGBAEMRiEXGRMNHDUfEgoGBAEMQiEXGRMNHC8ZEgoGBAEMGkYhFxkTDRwzHRoKBgQBDD4hFxkTDRwqGhIKBgQBDEYaGRMNHyQbCAYEAQw8IRcZEw0cKRkSCgYEAQxFIRcZEw0cLR4SCgYEAQxFIRcZEw0cLxwSCgYEAQw5IRoZEw0fGQYEAQwwHhkcBgQBDDceGRAGBAEMMB4ZGgYEAQxOGhkTDR8sHAgGBAEMQiEaGRMNHy8nCAYEAQwyHhkcBgQBDFEaGRMNHyweCAYEAQxHIRcZEw0cMRwSCgYEAQwyHhkbBgQBDC8eGRoGBAEMThoZEw0fKxwIBgQBDEQhFxkTDRwwGhIKBgQBDDghGhkTDR8qIggGBAEMIh03BAEMQCcfMwQBDEY5BAEMKh4ZGgYEAgEucGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9taXhpbnMuZGFydD1zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL25vZGVfaW5kZXhlci5kYXJ0ne8vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBWaXNpdG9yIHRoYXQgYXNjcmliZXMgYW4gaW5kZXggdG8gYWxsIFtpci5UcmVlTm9kZV1zIHRoYXQgcG90ZW50aWFsbHkKLy8vIG5lZWRlZCBmb3Igc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgpjbGFzcyBfVHJlZU5vZGVJbmRleGVyVmlzaXRvciBleHRlbmRzIGlyLlZpc2l0b3I8dm9pZD4gewogIGludCBfY3VycmVudEluZGV4ID0gMDsKICBmaW5hbCBNYXA8aW50LCBpci5UcmVlTm9kZT4gX2luZGV4VG9Ob2RlTWFwOwogIGZpbmFsIE1hcDxpci5UcmVlTm9kZSwgaW50PiBfbm9kZVRvSW5kZXhNYXA7CgogIF9UcmVlTm9kZUluZGV4ZXJWaXNpdG9yKHRoaXMuX2luZGV4VG9Ob2RlTWFwLCB0aGlzLl9ub2RlVG9JbmRleE1hcCk7CgogIHZvaWQgcmVnaXN0ZXJOb2RlKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIF9pbmRleFRvTm9kZU1hcFtfY3VycmVudEluZGV4XSA9IG5vZGU7CiAgICBfbm9kZVRvSW5kZXhNYXBbbm9kZV0gPSBfY3VycmVudEluZGV4OwogICAgX2N1cnJlbnRJbmRleCsrOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0VHJlZU5vZGUoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRGdW5jdGlvbkV4cHJlc3Npb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCbG9jayhpci5CbG9jayBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEJsb2NrKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMhIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgfQogICAgc3VwZXIudmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaFN0YXRlbWVudChpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRTd2l0Y2hTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Rm9yU3RhdGVtZW50KGlyLkZvclN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEZvclN0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEZvckluU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFdoaWxlU3RhdGVtZW50KGlyLldoaWxlU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0V2hpbGVTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG9TdGF0ZW1lbnQoaXIuRG9TdGF0ZW1lbnQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXREb1N0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCcmVha1N0YXRlbWVudChpci5CcmVha1N0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEJyZWFrU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0TGlzdExpdGVyYWwobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0U2V0TGl0ZXJhbChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBMaXRlcmFsKGlyLk1hcExpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRNYXBMaXRlcmFsKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0UHJvcGVydHlHZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHlTZXQoaXIuUHJvcGVydHlTZXQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRQcm9wZXJ0eVNldChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNZXRob2RJbnZvY2F0aW9uKGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRNZXRob2RJbnZvY2F0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERpcmVjdFByb3BlcnR5R2V0KGlyLkRpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0RGlyZWN0UHJvcGVydHlHZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoaXIuRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXREaXJlY3RQcm9wZXJ0eVNldChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKGlyLkRpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdFN0YXRpY0ludm9jYXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGFiZWxlZFN0YXRlbWVudChpci5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0TGFiZWxlZFN0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRTd2l0Y2hDYXNlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KGlyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZUdldChpci5WYXJpYWJsZUdldCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdFZhcmlhYmxlR2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbnRpYXRpb24oaXIuSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEluc3RhbnRpYXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKGlyLlN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdXBlclByb3BlcnR5R2V0KGlyLlN1cGVyUHJvcGVydHlHZXQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRTdXBlclByb3BlcnR5R2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRDb25zdGFudEV4cHJlc3Npb24obm9kZSk7CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IGFzY3JpYmVzIGFuIGluZGV4IHRvIGFsbCBbaXIuQ29uc3RhbnRdcyB0aGF0IHdlIHBvdGVudGlhbGx5Ci8vLyBuZWVkIHRvIHJlZmVyZW5jZSBmb3Igc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgovLy8KLy8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgbGlzdCwgbWFwLCBhbmQgc2V0IGNvbnN0YW50cywgd2hpY2ggYXJlIHVzZWQgYXMKLy8vIGFsbG9jYXRpb24gaWRlbnRpdGllcyBpbiB0aGUgZ2xvYmFsIGluZmVyZW5jZS4KY2xhc3MgX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yIGltcGxlbWVudHMgaXIuQ29uc3RhbnRWaXNpdG9yPHZvaWQ+IHsKICBpbnQgX2N1cnJlbnRJbmRleCA9IDA7CiAgZmluYWwgTWFwPGludCwgaXIuQ29uc3RhbnQ+IF9pbmRleFRvTm9kZU1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5Db25zdGFudCwgaW50PiBfbm9kZVRvSW5kZXhNYXAgPSB7fTsKICBmaW5hbCBTZXQ8aXIuQ29uc3RhbnQ+IF92aXNpdGVkTm9uaW5kZXhlZE5vZGVzID0ge307CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBub2RlIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQuCiAgYm9vbCBfcmVnaXN0ZXIoaXIuQ29uc3RhbnQgbm9kZSkgewogICAgaW50IGluZGV4ID0gX25vZGVUb0luZGV4TWFwW25vZGVdOwogICAgaWYgKGluZGV4ICE9IG51bGwpIHJldHVybiBmYWxzZTsKICAgIF9pbmRleFRvTm9kZU1hcFtfY3VycmVudEluZGV4XSA9IG5vZGU7CiAgICBfbm9kZVRvSW5kZXhNYXBbbm9kZV0gPSBfY3VycmVudEluZGV4OwogICAgX2N1cnJlbnRJbmRleCsrOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBpbnQgZ2V0SW5kZXgoaXIuQ29uc3RhbnQgbm9kZSkgewogICAgYXNzZXJ0KF9ub2RlVG9JbmRleE1hcC5jb250YWluc0tleShub2RlKSwgIkNvbnN0YW50IHdpdGhvdXQgaW5kZXg6ICRub2RlIik7CiAgICByZXR1cm4gX25vZGVUb0luZGV4TWFwW25vZGVdOwogIH0KCiAgaXIuQ29uc3RhbnQgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSB7CiAgICBhc3NlcnQoCiAgICAgICAgX2luZGV4VG9Ob2RlTWFwLmNvbnRhaW5zS2V5KGluZGV4KSwgIkluZGV4IHdpdGhvdXQgY29uc3RhbnQ6ICRpbmRleCIpOwogICAgcmV0dXJuIF9pbmRleFRvTm9kZU1hcFtpbmRleF07CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChpci5VbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KGlyLlR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRlYXJPZmZDb25zdGFudChpci5UZWFyT2ZmQ29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoaXIuUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICBub2RlLnRlYXJPZmZDb25zdGFudC5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdGFuY2VDb25zdGFudChpci5JbnN0YW5jZUNvbnN0YW50IG5vZGUpIHsKICAgIGlmIChfdmlzaXRlZE5vbmluZGV4ZWROb2Rlcy5hZGQobm9kZSkpIHsKICAgICAgbm9kZS5maWVsZFZhbHVlcy5mb3JFYWNoKChfLCBpci5Db25zdGFudCB2YWx1ZSkgewogICAgICAgIHZhbHVlLmFjY2VwdCh0aGlzKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0Q29uc3RhbnQoaXIuU2V0Q29uc3RhbnQgbm9kZSkgewogICAgaWYgKF9yZWdpc3Rlcihub2RlKSkgewogICAgICBmb3IgKGlyLkNvbnN0YW50IGVsZW1lbnQgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgICAgZWxlbWVudC5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0Q29uc3RhbnQoaXIuTGlzdENvbnN0YW50IG5vZGUpIHsKICAgIGlmIChfcmVnaXN0ZXIobm9kZSkpIHsKICAgICAgZm9yIChpci5Db25zdGFudCBlbGVtZW50IGluIG5vZGUuZW50cmllcykgewogICAgICAgIGVsZW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwQ29uc3RhbnQoaXIuTWFwQ29uc3RhbnQgbm9kZSkgewogICAgaWYgKF9yZWdpc3Rlcihub2RlKSkgewogICAgICBmb3IgKGlyLkNvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgICAgZW50cnkua2V5LmFjY2VwdCh0aGlzKTsKICAgICAgICBlbnRyeS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTeW1ib2xDb25zdGFudChpci5TeW1ib2xDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nQ29uc3RhbnQoaXIuU3RyaW5nQ29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvdWJsZUNvbnN0YW50KGlyLkRvdWJsZUNvbnN0YW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRDb25zdGFudChpci5JbnRDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbENvbnN0YW50KGlyLkJvb2xDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TnVsbENvbnN0YW50KGlyLk51bGxDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRDb25zdGFudChpci5Db25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKAogICAgICAgICJVbmV4cGVjdGVkIGNvbnN0YW50OiAkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkiKTsKICB9Cn0KgTgATk48AR4BSjI5GS8vAUcBKCsrFQQBDCseBAEMPRgpBAEMPxgqBAEMIxgcBAEMPzIaBioEAQw3GCYEAQwxGCMEAQw1GCUEAQw1GCUEAQwvGCIEAQw1GCUEAQwvGCIEAQwtGCEEAQwtGCEEAQwvGCIEAQwvGCIEAQw5GCcEAQw7GCgEAQw7GCgEAQxFGC0EAQw5GCcEAQw5GCcEAQwtGCEEAQxHGC4EAQxDGCwEAQwvGCIEAQwzGCQEAQxDGCwEAQw5GCcEAQw9GCkEAgFNPQRLM0gZNDQ3ATUlJyUrKxURBAEjUCIEAScMTyMEAQxAAQxAAQw4AQxRJwQBDDktOBwKBgQBDC8bMh4IBgQBDDEbMh4IBgQBDC8bOCAiCAYEAQw2AQw2AQw2AQwwAQwyAQwyAQwrIj0EAgE0cGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9ub2RlX2luZGV4ZXIuZGFydDxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL29iamVjdF9zaW5rLmRhcnSFii8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIFtEYXRhU2lua10gdGhhdCB3cml0ZXMgdG8gYSBsaXN0IG9mIG9iamVjdHMsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCi8vLyBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCi8vLwovLy8gVGhpcyBkYXRhIHNpbmsgd29ya3MgdG9nZXRoZXIgd2l0aCBbT2JqZWN0U291cmNlXS4KY2xhc3MgT2JqZWN0U2luayBleHRlbmRzIEFic3RyYWN0RGF0YVNpbmsgewogIExpc3Q8ZHluYW1pYz4gX2RhdGE7CgogIE9iamVjdFNpbmsodGhpcy5fZGF0YSwge2Jvb2wgdXNlRGF0YUtpbmRzLCBNYXA8U3RyaW5nLCBpbnQ+IHRhZ0ZyZXF1ZW5jeU1hcH0pCiAgICAgIDogc3VwZXIodXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMsIHRhZ0ZyZXF1ZW5jeU1hcDogdGFnRnJlcXVlbmN5TWFwKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfYmVnaW4oU3RyaW5nIHRhZykgewogICAgX2RhdGEuYWRkKG5ldyBUYWcoJ2JlZ2luOiR0YWcnKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9lbmQoU3RyaW5nIHRhZykgewogICAgX2RhdGEuYWRkKG5ldyBUYWcoJ2VuZDokdGFnJykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVFbnVtSW50ZXJuYWwoZHluYW1pYyB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX2RhdGEuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlSW50SW50ZXJuYWwoaW50IHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfZGF0YS5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVTdHJpbmdJbnRlcm5hbChTdHJpbmcgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIF9kYXRhLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF93cml0ZVVyaUludGVybmFsKFVyaSB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX2RhdGEuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICBfZGF0YSA9IG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgd3JpdHRlbiB0byB0aGlzIGRhdGEgc2luay4KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZGF0YS5sZW5ndGg7Cn0KPQBOTjwBHgFGPwQ3LBcBUE0BDBwmBAEMGiQEAQwrGxYEAQwmGxYEAQwsGxYEAQwmGxYEAQwREgQBPwwiAgEzcGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9vYmplY3Rfc2luay5kYXJ0PnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vb2JqZWN0X3NvdXJjZS5kYXJ0h5AvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBbRGF0YVNvdXJjZV0gdGhhdCByZWFkIGZyb20gYSBsaXN0IG9mIG9iamVjdHMsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCi8vLyBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCi8vLwovLy8gVGhpcyBkYXRhIHNvdXJjZSB3b3JrcyB0b2dldGhlciB3aXRoIFtPYmplY3RTaW5rXS4KY2xhc3MgT2JqZWN0U291cmNlIGV4dGVuZHMgQWJzdHJhY3REYXRhU291cmNlIHsKICBpbnQgX2luZGV4ID0gMDsKICBmaW5hbCBMaXN0PGR5bmFtaWM+IF9kYXRhOwoKICBPYmplY3RTb3VyY2UodGhpcy5fZGF0YSwge2Jvb2wgdXNlRGF0YUtpbmRzfSkKICAgICAgOiBzdXBlcih1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CgogIFQgX3JlYWQ8VD4oKSB7CiAgICBkeW5hbWljIHZhbHVlID0gX2RhdGFbX2luZGV4KytdOwogICAgYXNzZXJ0KHZhbHVlIGlzIFQsICJFeHBlY3RlZCAkVCB2YWx1ZSwgZm91bmQgJHZhbHVlLiRfZXJyb3JDb250ZXh0Iik7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9iZWdpbihTdHJpbmcgdGFnKSB7CiAgICBUYWcgZXhwZWN0ZWRUYWcgPSBuZXcgVGFnKCdiZWdpbjokdGFnJyk7CiAgICBUYWcgYWN0dWFsVGFnID0gX3JlYWQoKTsKICAgIGFzc2VydCgKICAgICAgICBleHBlY3RlZFRhZyA9PSBhY3R1YWxUYWcsCiAgICAgICAgIlVuZXhwZWN0ZWQgYmVnaW4gdGFnLiAiCiAgICAgICAgIkV4cGVjdGVkICRleHBlY3RlZFRhZywgZm91bmQgJGFjdHVhbFRhZy4kX2Vycm9yQ29udGV4dCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfZW5kKFN0cmluZyB0YWcpIHsKICAgIFRhZyBleHBlY3RlZFRhZyA9IG5ldyBUYWcoJ2VuZDokdGFnJyk7CiAgICBUYWcgYWN0dWFsVGFnID0gX3JlYWQoKTsKICAgIGFzc2VydCgKICAgICAgICBleHBlY3RlZFRhZyA9PSBhY3R1YWxUYWcsCiAgICAgICAgIlVuZXhwZWN0ZWQgZW5kIHRhZy4gIgogICAgICAgICJFeHBlY3RlZCAkZXhwZWN0ZWRUYWcsIGZvdW5kICRhY3R1YWxUYWcuJF9lcnJvckNvbnRleHQiKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBfcmVhZFN0cmluZ0ludGVybmFsKCkgPT4gX3JlYWQoKTsKCiAgQG92ZXJyaWRlCiAgRSBfcmVhZEVudW1JbnRlcm5hbDxFPihMaXN0PEU+IHZhbHVlcykgPT4gX3JlYWQoKTsKCiAgQG92ZXJyaWRlCiAgVXJpIF9yZWFkVXJpSW50ZXJuYWwoKSA9PiBfcmVhZCgpOwoKICBAb3ZlcnJpZGUKICBpbnQgX3JlYWRJbnRJbnRlcm5hbCgpID0+IF9yZWFkKCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2Vycm9yQ29udGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGludCBpID0gX2luZGV4IC0gNTA7IGkgPCBfaW5kZXggKyAxMDsgaSsrKSB7CiAgICAgIGlmIChpID49IDAgJiYgaSA8IF9kYXRhLmxlbmd0aCkgewogICAgICAgIGlmIChpID09IF9pbmRleCAtIDEpIHsKICAgICAgICAgIHNiLndyaXRlKCdcbj4gJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNiLndyaXRlKCdcbiAgJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKGkpOwogICAgICAgIHNiLndyaXRlKCcgJyk7CiAgICAgICAgc2Iud3JpdGUoX2RhdGFbaV0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KSwBOTjwBHgFIPwQ3MBIdATArARElShIEAQwcLR0MIiFDBAEMGisdDCIfQwQBDCsBDDUBDCUBDCUBDB0qNigfHBEcChUXHAgGGgQCATVwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL29iamVjdF9zb3VyY2UuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2Evc3NhLmRhcnS1US8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHNzYTsKCmltcG9ydCAnLi4vYmFja2VuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHMsIEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29tbW9uL2NvZGVnZW4uZGFydCcgc2hvdyBDb2RlZ2VuUmVzdWx0LCBDb2RlZ2VuUmVnaXN0cnk7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrLCBNZWFzdXJlcjsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanMvcmV3cml0ZV9hc3luYy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmQuZGFydCcgc2hvdyBDb2RlZ2VuSW5wdXRzLCBGdW5jdGlvbkNvbXBpbGVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBNb2R1bGFyTmFtZXIsIE1vZHVsYXJOYW1lckltcGw7CmltcG9ydCAnLi4vanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IE1vZHVsYXJFbWl0dGVyOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvc3RhcnR1cF9lbWl0dGVyL2VtaXR0ZXIuZGFydCcgc2hvdyBNb2R1bGFyRW1pdHRlckltcGw7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvdHlwZV9yZWNpcGUuZGFydCcgc2hvdyBUeXBlRXhwcmVzc2lvblJlY2lwZTsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBTdGF0aWNVc2U7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ2NvZGVnZW4uZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAnb3B0aW1pemUuZGFydCc7CgpjbGFzcyBTc2FGdW5jdGlvbkNvbXBpbGVyIGltcGxlbWVudHMgRnVuY3Rpb25Db21waWxlciB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgZmluYWwgU3NhQ29kZUdlbmVyYXRvclRhc2sgZ2VuZXJhdG9yOwogIGZpbmFsIFNzYUJ1aWxkZXJUYXNrIF9idWlsZGVyOwogIGZpbmFsIFNzYU9wdGltaXplclRhc2sgb3B0aW1pemVyOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICBDb2RlZ2VuSW5wdXRzIF9jb2RlZ2VuOwoKICBTc2FGdW5jdGlvbkNvbXBpbGVyKAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9yZXBvcnRlciwKICAgICAgQmFja2VuZFN0cmF0ZWd5IGJhY2tlbmRTdHJhdGVneSwKICAgICAgTWVhc3VyZXIgbWVhc3VyZXIsCiAgICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSkKICAgICAgOiBnZW5lcmF0b3IgPSBuZXcgU3NhQ29kZUdlbmVyYXRvclRhc2soCiAgICAgICAgICAgIG1lYXN1cmVyLCBfb3B0aW9ucywgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSksCiAgICAgICAgX2J1aWxkZXIgPSBuZXcgU3NhQnVpbGRlclRhc2soCiAgICAgICAgICAgIG1lYXN1cmVyLCBiYWNrZW5kU3RyYXRlZ3ksIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpLAogICAgICAgIG9wdGltaXplciA9IG5ldyBTc2FPcHRpbWl6ZXJUYXNrKG1lYXN1cmVyLCBfb3B0aW9ucyk7CgogIEBvdmVycmlkZQogIHZvaWQgaW5pdGlhbGl6ZShHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4pIHsKICAgIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzID0gZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICAgIF9jb2RlZ2VuID0gY29kZWdlbjsKICAgIF9idWlsZGVyLm9uQ29kZWdlblN0YXJ0KCk7CiAgfQoKICAvLy8gR2VuZXJhdGVzIEphdmFTY3JpcHQgY29kZSBmb3IgW21lbWJlcl0uCiAgLy8vIFVzaW5nIHRoZSBzc2EgYnVpbGRlciwgb3B0aW1pemVyIGFuZCBjb2RlIGdlbmVyYXRvci4KICBAb3ZlcnJpZGUKICBDb2RlZ2VuUmVzdWx0IGNvbXBpbGUoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnkgPQogICAgICAgIG5ldyBDb2RlZ2VuUmVnaXN0cnkoY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LCBtZW1iZXIpOwogICAgTW9kdWxhck5hbWVyIG5hbWVyID0gbmV3IE1vZHVsYXJOYW1lckltcGwocmVnaXN0cnksCiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIF9jb2RlZ2VuLnJ0aVRhZ3MsIF9jb2RlZ2VuLmZpeGVkTmFtZXMpOwogICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciA9IG5ldyBNb2R1bGFyRW1pdHRlckltcGwobmFtZXIsIHJlZ2lzdHJ5LCBfb3B0aW9ucyk7CiAgICBpZiAobWVtYmVyLmlzQ29uc3RydWN0b3IgJiYKICAgICAgICBtZW1iZXIuZW5jbG9zaW5nQ2xhc3MgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpIHsKICAgICAgLy8gV29yayBhcm91bmQgYSBwcm9ibGVtIGNvbXBpbGluZyBKU051bGwncyBjb25zdHJ1Y3Rvci4KICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNsb3NlKG51bGwpOwogICAgfQoKICAgIEhHcmFwaCBncmFwaCA9IF9idWlsZGVyLmJ1aWxkKG1lbWJlciwgY2xvc2VkV29ybGQsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgIF9jb2RlZ2VuLCByZWdpc3RyeSwgbmFtZXIsIGVtaXR0ZXIpOwogICAgaWYgKGdyYXBoID09IG51bGwpIHsKICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNsb3NlKG51bGwpOwogICAgfQogICAgb3B0aW1pemVyLm9wdGltaXplKG1lbWJlciwgZ3JhcGgsIF9jb2RlZ2VuLCBjbG9zZWRXb3JsZCwKICAgICAgICBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgcmVnaXN0cnkpOwogICAganMuRXhwcmVzc2lvbiByZXN1bHQgPSBnZW5lcmF0b3IuZ2VuZXJhdGVDb2RlKAogICAgICAgIG1lbWJlciwgZ3JhcGgsIF9jb2RlZ2VuLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIG5hbWVyLCBlbWl0dGVyKTsKICAgIGlmIChncmFwaC5uZWVkc0FzeW5jUmV3cml0ZSkgewogICAgICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgc291cmNlSW5mb3JtYXRpb25CdWlsZGVyID0KICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kuY3JlYXRlQnVpbGRlckZvckNvbnRleHQobWVtYmVyKTsKICAgICAgcmVzdWx0ID0gX3Jld3JpdGVBc3luYygKICAgICAgICAgIF9jb2RlZ2VuLAogICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICByZWdpc3RyeSwKICAgICAgICAgIG5hbWVyLAogICAgICAgICAgZW1pdHRlciwKICAgICAgICAgIG1lbWJlciwKICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgIGdyYXBoLmFzeW5jRWxlbWVudFR5cGUsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBc3luY0JvZHkoKSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEFzeW5jRXhpdCgpKTsKICAgIH0KICAgIGlmIChyZXN1bHQuc291cmNlSW5mb3JtYXRpb24gPT0gbnVsbCkgewogICAgICByZXN1bHQgPSByZXN1bHQud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5idWlsZFNvdXJjZU1hcHBlZE1hcmtlcigpKTsKICAgIH0KCiAgICByZXR1cm4gcmVnaXN0cnkuY2xvc2UocmVzdWx0KTsKICB9CgogIGpzLkV4cHJlc3Npb24gX3Jld3JpdGVBc3luYygKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LAogICAgICBqcy5FeHByZXNzaW9uIGNvZGUsCiAgICAgIERhcnRUeXBlIGFzeW5jVHlwZVBhcmFtZXRlciwKICAgICAgU291cmNlSW5mb3JtYXRpb24gYm9keVNvdXJjZUluZm9ybWF0aW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBleGl0U291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChlbGVtZW50LmFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLlNZTkMpIHJldHVybiBjb2RlOwoKICAgIEFzeW5jUmV3cml0ZXJCYXNlIHJld3JpdGVyID0gbnVsbDsKICAgIGpzLk5hbWUgbmFtZSA9IG5hbWVyLm1ldGhvZFByb3BlcnR5TmFtZSgKICAgICAgICBlbGVtZW50IGlzIEpHZW5lcmF0b3JCb2R5ID8gZWxlbWVudC5mdW5jdGlvbiA6IGVsZW1lbnQpOwoKICAgIHN3aXRjaCAoZWxlbWVudC5hc3luY01hcmtlcikgewogICAgICBjYXNlIEFzeW5jTWFya2VyLkFTWU5DOgogICAgICAgIHJld3JpdGVyID0gX21ha2VBc3luY1Jld3JpdGVyKAogICAgICAgICAgICBjb2RlZ2VuLAogICAgICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICByZWdpc3RyeSwKICAgICAgICAgICAgbmFtZXIsCiAgICAgICAgICAgIGVtaXR0ZXIsCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgIGNvZGUsCiAgICAgICAgICAgIGFzeW5jVHlwZVBhcmFtZXRlciwKICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU1lOQ19TVEFSOgogICAgICAgIHJld3JpdGVyID0gX21ha2VTeW5jU3RhclJld3JpdGVyKAogICAgICAgICAgICBjb2RlZ2VuLAogICAgICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICByZWdpc3RyeSwKICAgICAgICAgICAgbmFtZXIsCiAgICAgICAgICAgIGVtaXR0ZXIsCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgIGNvZGUsCiAgICAgICAgICAgIGFzeW5jVHlwZVBhcmFtZXRlciwKICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQVNZTkNfU1RBUjoKICAgICAgICByZXdyaXRlciA9IF9tYWtlQXN5bmNTdGFyUmV3cml0ZXIoCiAgICAgICAgICAgIGNvZGVnZW4sCiAgICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICAgIHJlZ2lzdHJ5LAogICAgICAgICAgICBuYW1lciwKICAgICAgICAgICAgZW1pdHRlciwKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgY29kZSwKICAgICAgICAgICAgYXN5bmNUeXBlUGFyYW1ldGVyLAogICAgICAgICAgICBuYW1lKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiByZXdyaXRlci5yZXdyaXRlKGNvZGUsIGJvZHlTb3VyY2VJbmZvcm1hdGlvbiwgZXhpdFNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIG9wdGlvbmFsIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgW3R5cGVdLiAgUmV0dXJucyBgbnVsbGAgaWYKICAvLy8gdGhlIHR5cGUgZXhwcmVzc2lvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvdXRzaWRlIGNvbnRleHQgYW5kIHNob3VsZCBiZQogIC8vLyBhZGRlZCBhcyBhIGZ1bmN0aW9uIHBhcmFtZXRlciB0byB0aGUgcmV3cml0dGVuIGNvZGUuCiAgLy8gVE9ETyhzcmEpOiBXZSBjb3VsZCBhbHNvIHJldHVybiBhbiBlbXB0eSBsaXN0IGlmIHRoZSBnZW5lcmF0b3IgdGFrZXMgbm8KICAvLyB0eXBlIChlLmcuIGR1ZSB0byBydGlOZWVkIG9wdGltaXphdGlvbikuCiAgTGlzdDxqcy5FeHByZXNzaW9uPiBfZmV0Y2hJdGVtVHlwZSgKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHZhciBhc3QgPSBjb2RlZ2VuLnJ0aUVuY29kZXIuZ2V0VHlwZVJlcHJlc2VudGF0aW9uKGVtaXR0ZXIsIHR5cGUsIG51bGwpOwogICAgcmV0dXJuIDxqcy5FeHByZXNzaW9uPlthc3RdOwogIH0KCiAgTGlzdDxqcy5FeHByZXNzaW9uPiBfZmV0Y2hJdGVtVHlwZU5ld1J0aSgKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXJFbGVtZW50ID0gY29tbW9uRWxlbWVudHMuZmluZFR5cGU7CiAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShoZWxwZXJFbGVtZW50LCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjaXBlID0gY29kZWdlbi5ydGlSZWNpcGVFbmNvZGVyCiAgICAgICAgLmVuY29kZUdyb3VuZFJlY2lwZShlbWl0dGVyLCBUeXBlRXhwcmVzc2lvblJlY2lwZSh0eXBlKSk7CiAgICBqcy5FeHByZXNzaW9uIGhlbHBlciA9IGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoaGVscGVyRWxlbWVudCk7CiAgICB2YXIgYXN0ID0ganMuanMocicjKCMpJywgW2hlbHBlciwgcmVjaXBlXSk7CiAgICByZXR1cm4gPGpzLkV4cHJlc3Npb24+W2FzdF07CiAgfQoKICBBc3luY1Jld3JpdGVyIF9tYWtlQXN5bmNSZXdyaXRlcigKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LAogICAgICBqcy5FeHByZXNzaW9uIGNvZGUsCiAgICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICBqcy5OYW1lIG5hbWUpIHsKICAgIEZ1bmN0aW9uRW50aXR5IHN0YXJ0RnVuY3Rpb24gPSBjb21tb25FbGVtZW50cy5hc3luY0hlbHBlclN0YXJ0U3luYzsKICAgIEZ1bmN0aW9uRW50aXR5IGNvbXBsZXRlckZhY3RvcnkgPSBjb21tb25FbGVtZW50cy5hc3luY0F3YWl0Q29tcGxldGVyRmFjdG9yeTsKCiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGl0ZW1UeXBlRXhwcmVzc2lvbiA9IF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkKICAgICAgICA/IF9mZXRjaEl0ZW1UeXBlTmV3UnRpKAogICAgICAgICAgICBjb2RlZ2VuLCBjb21tb25FbGVtZW50cywgcmVnaXN0cnksIGVtaXR0ZXIsIGVsZW1lbnRUeXBlKQogICAgICAgIDogX2ZldGNoSXRlbVR5cGUoY29kZWdlbiwgZW1pdHRlciwgZWxlbWVudFR5cGUpOwoKICAgIEFzeW5jUmV3cml0ZXIgcmV3cml0ZXIgPSBuZXcgQXN5bmNSZXdyaXRlcihfcmVwb3J0ZXIsIGVsZW1lbnQsCiAgICAgICAgYXN5bmNTdGFydDogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhzdGFydEZ1bmN0aW9uKSwKICAgICAgICBhc3luY0F3YWl0OgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmFzeW5jSGVscGVyQXdhaXQpLAogICAgICAgIGFzeW5jUmV0dXJuOgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmFzeW5jSGVscGVyUmV0dXJuKSwKICAgICAgICBhc3luY1JldGhyb3c6CiAgICAgICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMuYXN5bmNIZWxwZXJSZXRocm93KSwKICAgICAgICB3cmFwQm9keTogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy53cmFwQm9keSksCiAgICAgICAgY29tcGxldGVyRmFjdG9yeTogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21wbGV0ZXJGYWN0b3J5KSwKICAgICAgICBjb21wbGV0ZXJGYWN0b3J5VHlwZUFyZ3VtZW50czogaXRlbVR5cGVFeHByZXNzaW9uLAogICAgICAgIHNhZmVWYXJpYWJsZU5hbWU6IG5hbWVyLnNhZmVWYXJpYWJsZVByZWZpeEZvckFzeW5jUmV3cml0ZSwKICAgICAgICBib2R5TmFtZTogbmFtZXIuZGVyaXZlQXN5bmNCb2R5TmFtZShuYW1lKSk7CgogICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgY29tcGxldGVyRmFjdG9yeSwKICAgICAgICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMCwgMSksCiAgICAgICAgW2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKGVsZW1lbnQpXSkpOwoKICAgIHJldHVybiByZXdyaXRlcjsKICB9CgogIFN5bmNTdGFyUmV3cml0ZXIgX21ha2VTeW5jU3RhclJld3JpdGVyKAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAgRGFydFR5cGUgYXN5bmNUeXBlUGFyYW1ldGVyLAogICAgICBqcy5OYW1lIG5hbWUpIHsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gaXRlbVR5cGVFeHByZXNzaW9uID0gX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aQogICAgICAgID8gX2ZldGNoSXRlbVR5cGVOZXdSdGkoCiAgICAgICAgICAgIGNvZGVnZW4sIGNvbW1vbkVsZW1lbnRzLCByZWdpc3RyeSwgZW1pdHRlciwgYXN5bmNUeXBlUGFyYW1ldGVyKQogICAgICAgIDogX2ZldGNoSXRlbVR5cGUoY29kZWdlbiwgZW1pdHRlciwgYXN5bmNUeXBlUGFyYW1ldGVyKTsKCiAgICBTeW5jU3RhclJld3JpdGVyIHJld3JpdGVyID0gbmV3IFN5bmNTdGFyUmV3cml0ZXIoX3JlcG9ydGVyLCBlbGVtZW50LAogICAgICAgIGVuZE9mSXRlcmF0aW9uOgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmVuZE9mSXRlcmF0aW9uKSwKICAgICAgICBpdGVyYWJsZUZhY3Rvcnk6IGVtaXR0ZXIKICAgICAgICAgICAgLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLnN5bmNTdGFySXRlcmFibGVGYWN0b3J5KSwKICAgICAgICBpdGVyYWJsZUZhY3RvcnlUeXBlQXJndW1lbnRzOiBpdGVtVHlwZUV4cHJlc3Npb24sCiAgICAgICAgeWllbGRTdGFyRXhwcmVzc2lvbjoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy55aWVsZFN0YXIpLAogICAgICAgIHVuY2F1Z2h0RXJyb3JFeHByZXNzaW9uOgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLnN5bmNTdGFyVW5jYXVnaHRFcnJvciksCiAgICAgICAgc2FmZVZhcmlhYmxlTmFtZTogbmFtZXIuc2FmZVZhcmlhYmxlUHJlZml4Rm9yQXN5bmNSZXdyaXRlLAogICAgICAgIGJvZHlOYW1lOiBuYW1lci5kZXJpdmVBc3luY0JvZHlOYW1lKG5hbWUpKTsKCiAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBjb21tb25FbGVtZW50cy5zeW5jU3Rhckl0ZXJhYmxlRmFjdG9yeSwKICAgICAgICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMSwgMSksCiAgICAgICAgW2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKGVsZW1lbnQpXSkpOwoKICAgIHJldHVybiByZXdyaXRlcjsKICB9CgogIEFzeW5jU3RhclJld3JpdGVyIF9tYWtlQXN5bmNTdGFyUmV3cml0ZXIoCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwKICAgICAganMuRXhwcmVzc2lvbiBjb2RlLAogICAgICBEYXJ0VHlwZSBhc3luY1R5cGVQYXJhbWV0ZXIsCiAgICAgIGpzLk5hbWUgbmFtZSkgewogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBpdGVtVHlwZUV4cHJlc3Npb24gPSBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgICAgPyBfZmV0Y2hJdGVtVHlwZU5ld1J0aSgKICAgICAgICAgICAgY29kZWdlbiwgY29tbW9uRWxlbWVudHMsIHJlZ2lzdHJ5LCBlbWl0dGVyLCBhc3luY1R5cGVQYXJhbWV0ZXIpCiAgICAgICAgOiBfZmV0Y2hJdGVtVHlwZShjb2RlZ2VuLCBlbWl0dGVyLCBhc3luY1R5cGVQYXJhbWV0ZXIpOwoKICAgIEFzeW5jU3RhclJld3JpdGVyIHJld3JpdGVyID0gbmV3IEFzeW5jU3RhclJld3JpdGVyKF9yZXBvcnRlciwgZWxlbWVudCwKICAgICAgICBhc3luY1N0YXJIZWxwZXI6CiAgICAgICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMuYXN5bmNTdGFySGVscGVyKSwKICAgICAgICBzdHJlYW1PZkNvbnRyb2xsZXI6CiAgICAgICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMuc3RyZWFtT2ZDb250cm9sbGVyKSwKICAgICAgICB3cmFwQm9keTogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy53cmFwQm9keSksCiAgICAgICAgbmV3Q29udHJvbGxlcjogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcygKICAgICAgICAgICAgY29tbW9uRWxlbWVudHMuYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckZhY3RvcnkpLAogICAgICAgIG5ld0NvbnRyb2xsZXJUeXBlQXJndW1lbnRzOiBpdGVtVHlwZUV4cHJlc3Npb24sCiAgICAgICAgc2FmZVZhcmlhYmxlTmFtZTogbmFtZXIuc2FmZVZhcmlhYmxlUHJlZml4Rm9yQXN5bmNSZXdyaXRlLAogICAgICAgIHlpZWxkRXhwcmVzc2lvbjoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy55aWVsZFNpbmdsZSksCiAgICAgICAgeWllbGRTdGFyRXhwcmVzc2lvbjoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy55aWVsZFN0YXIpLAogICAgICAgIGJvZHlOYW1lOiBuYW1lci5kZXJpdmVBc3luY0JvZHlOYW1lKG5hbWUpKTsKCiAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBjb21tb25FbGVtZW50cy5hc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRmFjdG9yeSwKICAgICAgICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMSwgMSksCiAgICAgICAgW2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKGVsZW1lbnQpXSkpOwoKICAgIHJldHVybiByZXdyaXRlcjsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbXBpbGVyVGFzaz4gZ2V0IHRhc2tzIHsKICAgIHJldHVybiA8Q29tcGlsZXJUYXNrPltfYnVpbGRlciwgb3B0aW1pemVyLCBnZW5lcmF0b3JdOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgU3NhQnVpbGRlciB7CiAgLy8vIENyZWF0ZXMgdGhlIFtIR3JhcGhdIGZvciBbbWVtYmVyXSBvciByZXR1cm5zIGBudWxsYCBpZiBubyBjb2RlIGlzIG5lZWRlZAogIC8vLyBmb3IgW21lbWJlcl0uCiAgSEdyYXBoIGJ1aWxkKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpOwp9CgpjbGFzcyBTc2FCdWlsZGVyVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgZmluYWwgQmFja2VuZFN0cmF0ZWd5IF9iYWNrZW5kU3RyYXRlZ3k7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBfc291cmNlSW5mb3JtYXRpb25GYWN0b3J5OwogIFNzYUJ1aWxkZXIgX2J1aWxkZXI7CgogIFNzYUJ1aWxkZXJUYXNrKAogICAgICBNZWFzdXJlciBtZWFzdXJlciwgdGhpcy5fYmFja2VuZFN0cmF0ZWd5LCB0aGlzLl9zb3VyY2VJbmZvcm1hdGlvbkZhY3RvcnkpCiAgICAgIDogc3VwZXIobWVhc3VyZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ1NTQSBidWlsZGVyJzsKCiAgdm9pZCBvbkNvZGVnZW5TdGFydCgpIHsKICAgIF9idWlsZGVyID0KICAgICAgICBfYmFja2VuZFN0cmF0ZWd5LmNyZWF0ZVNzYUJ1aWxkZXIodGhpcywgX3NvdXJjZUluZm9ybWF0aW9uRmFjdG9yeSk7CiAgfQoKICAvLy8gQ3JlYXRlcyB0aGUgW0hHcmFwaF0gZm9yIFttZW1iZXJdIG9yIHJldHVybnMgYG51bGxgIGlmIG5vIGNvZGUgaXMgbmVlZGVkCiAgLy8vIGZvciBbbWVtYmVyXS4KICBIR3JhcGggYnVpbGQoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgcmV0dXJuIF9idWlsZGVyLmJ1aWxkKG1lbWJlciwgY2xvc2VkV29ybGQsIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW4sCiAgICAgICAgcmVnaXN0cnksIG5hbWVyLCBlbWl0dGVyKTsKICB9Cn0KgXUATk48AQ0BIxlLRTskISEoHiNKR0NNJEEaPS4qARcVGAE4IiYoISQ9NhoBFxUWJxkmLjwnQz4BDEUfNhgfBAEuOwwvRB9FOExQIEs/IwYBUC0ZIwY9LDNJIzpFHhQmKhQRExISIjU2BiwtQAYBIwQBHx0lLiAaHh4aIy8xPgEnLUEBIx4nFRwgFhMVFRIgEw8iKhUcIBYTFRUSIBMPIysVHCAWExUVEiATDwZRBAFPTTtNLiZGI00hBAEsHSUgHhcjATwgSzRCSDAhBAEkHSUuIBoeHhocFkhRAUcgRTkBQ0EUSxVMFk1JSjtDNAE7GitPARUEASodJS4gGh4eGiMWRyBMQAFJGEkhSzodRCFQQzQBOzArTwEVBAEsHSUuIBoeHhojFkcgTEABSxlKHE1JNT44QxlGHUQ0ATs5K08BFQQBDCU7BAIBHE8UEBsgOR0gGh8CASwqPRcBElAZAQwkARoPTAQBTxQQGyA5HSAaIFAjBAIBIXBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9zc2EuZGFydCtzZGtyb290Oi9wa2cvanNfYXN0L2xpYi9zcmMvcHJlY2VkZW5jZS5kYXJ0guQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBwcmVjZWRlbmNlOwoKY29uc3QgRVhQUkVTU0lPTiA9IDA7CmNvbnN0IEFTU0lHTk1FTlQgPSBFWFBSRVNTSU9OICsgMTsKY29uc3QgTE9HSUNBTF9PUiA9IEFTU0lHTk1FTlQgKyAxOwpjb25zdCBMT0dJQ0FMX0FORCA9IExPR0lDQUxfT1IgKyAxOwpjb25zdCBCSVRfT1IgPSBMT0dJQ0FMX0FORCArIDE7CmNvbnN0IEJJVF9YT1IgPSBCSVRfT1IgKyAxOwpjb25zdCBCSVRfQU5EID0gQklUX1hPUiArIDE7CmNvbnN0IEVRVUFMSVRZID0gQklUX0FORCArIDE7CmNvbnN0IFJFTEFUSU9OQUwgPSBFUVVBTElUWSArIDE7CmNvbnN0IFNISUZUID0gUkVMQVRJT05BTCArIDE7CmNvbnN0IEFERElUSVZFID0gU0hJRlQgKyAxOwpjb25zdCBNVUxUSVBMSUNBVElWRSA9IEFERElUSVZFICsgMTsKY29uc3QgVU5BUlkgPSBNVUxUSVBMSUNBVElWRSArIDE7CmNvbnN0IENBTEwgPSBVTkFSWSArIDE7CmNvbnN0IExFRlRfSEFORF9TSURFID0gQ0FMTCArIDE7CmNvbnN0IFBSSU1BUlkgPSBMRUZUX0hBTkRfU0lERSArIDE7ChgATk48ARQBFiMjJCAcHR4hHhwlIhghJAEicGFja2FnZTpqc19hc3Qvc3JjL3ByZWNlZGVuY2UuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb25zdGFudHMvdmFsdWVzLmRhcnTAAHZ8Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb25zdGFudHMudmFsdWVzOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0OwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CgplbnVtIENvbnN0YW50VmFsdWVLaW5kIHsKICBGVU5DVElPTiwKICBOVUxMLAogIElOVCwKICBET1VCTEUsCiAgQk9PTCwKICBTVFJJTkcsCiAgTElTVCwKICBTRVQsCiAgTUFQLAogIENPTlNUUlVDVEVELAogIFRZUEUsCiAgSU5URVJDRVBUT1IsCiAgSlNfTkFNRSwKICBEVU1NWV9JTlRFUkNFUFRPUiwKICBVTlJFQUNIQUJMRSwKICBJTlNUQU5USUFUSU9OLAogIERFRkVSUkVEX0dMT0JBTCwKICBOT05fQ09OU1RBTlQsCn0KCmFic3RyYWN0IGNsYXNzIENvbnN0YW50VmFsdWVWaXNpdG9yPFIsIEE+IHsKICBjb25zdCBDb25zdGFudFZhbHVlVmlzaXRvcigpOwoKICBSIHZpc2l0RnVuY3Rpb24oY292YXJpYW50IEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0TnVsbChjb3ZhcmlhbnQgTnVsbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdEludChjb3ZhcmlhbnQgSW50Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0RG91YmxlKGNvdmFyaWFudCBEb3VibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRCb29sKGNvdmFyaWFudCBCb29sQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0U3RyaW5nKGNvdmFyaWFudCBTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRMaXN0KGNvdmFyaWFudCBMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0U2V0KGNvdmFyaWFudCBTZXRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRNYXAoY292YXJpYW50IE1hcENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdENvbnN0cnVjdGVkKAogICAgICBjb3ZhcmlhbnQgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRUeXBlKGNvdmFyaWFudCBUeXBlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0SW50ZXJjZXB0b3IoCiAgICAgIGNvdmFyaWFudCBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdER1bW15SW50ZXJjZXB0b3IoCiAgICAgIGNvdmFyaWFudCBEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0VW5yZWFjaGFibGUoCiAgICAgIGNvdmFyaWFudCBVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdEpzTmFtZShjb3ZhcmlhbnQgSnNOYW1lQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0RGVmZXJyZWRHbG9iYWwoCiAgICAgIGNvdmFyaWFudCBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdE5vbkNvbnN0YW50KGNvdmFyaWFudCBOb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRJbnN0YW50aWF0aW9uKAogICAgICBjb3ZhcmlhbnQgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7Cn0KCmFic3RyYWN0IGNsYXNzIENvbnN0YW50VmFsdWUgewogIGNvbnN0IENvbnN0YW50VmFsdWUoKTsKCiAgLy8vIGB0cnVlYCBpZiB0aGlzIGlzIGEgdmFsaWQgY29uc3RhbnQgdmFsdWUuCiAgYm9vbCBnZXQgaXNDb25zdGFudCA9PiB0cnVlOwoKICBib29sIGdldCBpc051bGwgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNCb29sID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzVHJ1ZSA9PiBmYWxzZTsKICBib29sIGdldCBpc0ZhbHNlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzSW50ID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRG91YmxlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTnVtID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzU3RyaW5nID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTGlzdCA9PiBmYWxzZTsKICBib29sIGdldCBpc1NldCA9PiBmYWxzZTsKICBib29sIGdldCBpc01hcCA9PiBmYWxzZTsKICBib29sIGdldCBpc0NvbnN0cnVjdGVkT2JqZWN0ID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRnVuY3Rpb24gPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnN0YW50IGlzIG51bGwsIGEgYm9vbCwgYSBudW1iZXIgb3IgYSBzdHJpbmcuCiAgYm9vbCBnZXQgaXNQcmltaXRpdmUgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnN0YW50IGlzIGEgbGlzdCwgYSBtYXAgb3IgYSBjb25zdHJ1Y3RlZCBvYmplY3QuCiAgYm9vbCBnZXQgaXNPYmplY3QgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNUeXBlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzSW50ZXJjZXB0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNEdW1teSA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNOYU4gPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNNaW51c1plcm8gPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNaZXJvID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzT25lID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzUG9zaXRpdmVJbmZpbml0eSA9PiBmYWxzZTsKICBib29sIGdldCBpc05lZ2F0aXZlSW5maW5pdHkgPT4gZmFsc2U7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlcGxhY2Ugd2l0aCBhICd0eXBlJyBnZXR0ZXIuCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcyk7CgogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCk7CgogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpOwoKICAvLy8gVGhlIHZhbHVlIG9mIHRoaXMgY29uc3RhbnQgaW4gRGFydCBzeW50YXgsIGlmIHBvc3NpYmxlLgogIC8vLwogIC8vLyBGb3IgW0NvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZV1zIHRoZXJlIGlzIG5vIHdheSB0byBjcmVhdGUgYSB2YWxpZCBjb25zdAogIC8vLyBleHByZXNzaW9uIGZyb20gdGhlIHZhbHVlIHNvIHRoZSB1bnBhcnNlIG9mIHRoZXNlIGlzIGJlc3QgZWZmb3J0LgogIC8vLwogIC8vLyBGb3IgdGhlIHN5bnRoZXRpYyBjb25zdGFudHMsIFtEZWZlcnJlZENvbnN0YW50VmFsdWVdLAogIC8vLyBbRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlXSwgW1N5bnRoZXRpY0NvbnN0YW50VmFsdWVdLAogIC8vLyBbSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlXSB0aGUgdW5wYXJzZSBpcyBkZXNjcmlwdGl2ZSBvbmx5LgogIFN0cmluZyB0b0RhcnRUZXh0KCk7CgogIC8vLyBSZXR1cm5zIGEgc3RydWN0dXJlZCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNvbnN0YW50IHN1aXRlZCBmb3IgZGVidWdnaW5nLgogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCk7CgogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBhc3NlcnREZWJ1Z01vZGUoIlVzZSBDb25zdGFudFZhbHVlLnRvRGFydFRleHQoKSBvciAiCiAgICAgICAgIkNvbnN0YW50VmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpICIKICAgICAgICAiaW5zdGVhZCBvZiBDb25zdGFudFZhbHVlLnRvU3RyaW5nKCkuIik7CiAgICByZXR1cm4gdG9TdHJ1Y3R1cmVkVGV4dCgpOwogIH0KfQoKY2xhc3MgRnVuY3Rpb25Db25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgZmluYWwgRnVuY3Rpb25FbnRpdHkgZWxlbWVudDsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgdGhlIHR5cGUgYmUgZGVyaXZlZCBmcm9tIFtlbGVtZW50XS4KICBmaW5hbCBGdW5jdGlvblR5cGUgdHlwZTsKCiAgRnVuY3Rpb25Db25zdGFudFZhbHVlKHRoaXMuZWxlbWVudCwgdGhpcy50eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdW5jdGlvbiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBGdW5jdGlvbkNvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBpZGVudGljYWwob3RoZXIuZWxlbWVudCwgZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gdHlwZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiAoMTcgKiBlbGVtZW50Lmhhc2hDb2RlKSAmIDB4N2ZmZmZmZmY7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRGdW5jdGlvbih0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5GVU5DVElPTjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBpZiAoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHJldHVybiAnJHtlbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7ZWxlbWVudC5uYW1lfSc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJyR7ZWxlbWVudC5uYW1lfSc7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIHJldHVybiAnRnVuY3Rpb25Db25zdGFudCgke3RvRGFydFRleHQoKX0pJzsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgZXh0ZW5kcyBDb25zdGFudFZhbHVlIHsKICBjb25zdCBQcmltaXRpdmVDb25zdGFudFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUHJpbWl0aXZlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICAvLyBNYWtpbmcgdGhpcyBtZXRob2QgYWJzdHJhY3QgZG9lcyBub3QgZ2l2ZSB1cyBhbiBlcnJvci4KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdQcmltaXRpdmVDb25zdGFudC49PScpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignUHJpbWl0aXZlQ29uc3RhbnQuaGFzaENvZGUnKTsKCiAgLy8gUHJpbWl0aXZlIGNvbnN0YW50cyBkb24ndCBoYXZlIGRlcGVuZGVuY2llcy4KICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwp9CgpjbGFzcyBOdWxsQ29uc3RhbnRWYWx1ZSBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgewogIC8vLyBUaGUgdmFsdWUgYSBEYXJ0IG51bGwgaXMgY29tcGlsZWQgdG8gaW4gSmF2YVNjcmlwdC4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpzTnVsbCA9ICJudWxsIjsKCiAgY29uc3QgZmFjdG9yeSBOdWxsQ29uc3RhbnRWYWx1ZSgpID0gTnVsbENvbnN0YW50VmFsdWUuX2ludGVybmFsOwoKICBjb25zdCBOdWxsQ29uc3RhbnRWYWx1ZS5faW50ZXJuYWwoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsID0+IHRydWU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLm51bGxUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBvdGhlciBpcyBOdWxsQ29uc3RhbnRWYWx1ZTsKCiAgLy8gVGhlIG1hZ2ljIGNvbnN0YW50IGhhcyBubyBtZWFuaW5nLiBJdCBpcyBqdXN0IGEgcmFuZG9tIHZhbHVlLgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gNzg1OTY1ODI1OwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PiB2aXNpdG9yLnZpc2l0TnVsbCh0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5OVUxMOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpID0+ICdOdWxsQ29uc3RhbnQnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICdudWxsJzsKfQoKYWJzdHJhY3QgY2xhc3MgTnVtQ29uc3RhbnRWYWx1ZSBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgewogIGRvdWJsZSBnZXQgZG91YmxlVmFsdWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVtID0+IHRydWU7CgogIGNvbnN0IE51bUNvbnN0YW50VmFsdWUoKTsKfQoKY2xhc3MgSW50Q29uc3RhbnRWYWx1ZSBleHRlbmRzIE51bUNvbnN0YW50VmFsdWUgewogIGZpbmFsIEJpZ0ludCBpbnRWYWx1ZTsKCiAgLy8gQ2FjaGluZyBJbnRDb25zdGFudFZhbHVlcyByZXByZXNlbnRpbmcgLTIgdGhyb3VnaCAxMCBzbyB0aGF0IHdlIGRvbid0IGhhdmUKICAvLyB0byBjcmVhdGUgbmV3IG9uZXMgZXZlcnkgdGltZSB0aG9zZSB2YWx1ZXMgYXJlIHVzZWQuCiAgc3RhdGljIE1hcDxCaWdJbnQsIEludENvbnN0YW50VmFsdWU+IF9jYWNoZWRWYWx1ZXMgPSB7fTsKCiAgQG92ZXJyaWRlCiAgZG91YmxlIGdldCBkb3VibGVWYWx1ZSA9PiBpbnRWYWx1ZS50b0RvdWJsZSgpOwoKICBmYWN0b3J5IEludENvbnN0YW50VmFsdWUoQmlnSW50IHZhbHVlKSB7CiAgICB2YXIgZXhpc3RpbmcgPSBfY2FjaGVkVmFsdWVzW3ZhbHVlXTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSByZXR1cm4gZXhpc3Rpbmc7CiAgICB2YXIgaW50Q29uc3RhbnRWYWwgPSBuZXcgSW50Q29uc3RhbnRWYWx1ZS5faW50ZXJuYWwodmFsdWUpOwogICAgdmFyIGludFZhbHVlID0gdmFsdWUudG9JbnQoKTsKICAgIGlmIChpbnRWYWx1ZSA8PSAtMiAmJiBpbnRWYWx1ZSA+PSAxMCkgewogICAgICBfY2FjaGVkVmFsdWVzW3ZhbHVlXSA9IGludENvbnN0YW50VmFsOwogICAgfQogICAgcmV0dXJuIGludENvbnN0YW50VmFsOwogIH0KCiAgY29uc3QgSW50Q29uc3RhbnRWYWx1ZS5faW50ZXJuYWwodGhpcy5pbnRWYWx1ZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW50ID0+IHRydWU7CgogIGJvb2wgaXNVSW50MzEoKSA9PiBpbnRWYWx1ZS50b1Vuc2lnbmVkKDMxKSA9PSBpbnRWYWx1ZTsKCiAgYm9vbCBpc1VJbnQzMigpID0+IGludFZhbHVlLnRvVW5zaWduZWQoMzIpID09IGludFZhbHVlOwoKICBib29sIGlzUG9zaXRpdmUoKSA9PiBpbnRWYWx1ZSA+PSBCaWdJbnQuemVybzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNaZXJvID0+IGludFZhbHVlID09IEJpZ0ludC56ZXJvOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc09uZSA9PiBpbnRWYWx1ZSA9PSBCaWdJbnQub25lOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlcy5pbnRUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgLy8gSW50cyBhbmQgZG91YmxlcyBhcmUgdHJlYXRlZCBhcyBzZXBhcmF0ZSBjb25zdGFudHMuCiAgICBpZiAob3RoZXIgaXMhIEludENvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIEludENvbnN0YW50VmFsdWUgb3RoZXJJbnQgPSBvdGhlcjsKICAgIHJldHVybiBpbnRWYWx1ZSA9PSBvdGhlckludC5pbnRWYWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaW50VmFsdWUuaGFzaENvZGUgJiBIYXNoaW5nLlNNSV9NQVNLOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PiB2aXNpdG9yLnZpc2l0SW50KHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLklOVDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnSW50Q29uc3RhbnQoJHt0b0RhcnRUZXh0KCl9KSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gaW50VmFsdWUudG9TdHJpbmcoKTsKfQoKY2xhc3MgRG91YmxlQ29uc3RhbnRWYWx1ZSBleHRlbmRzIE51bUNvbnN0YW50VmFsdWUgewogIEBvdmVycmlkZQogIGZpbmFsIGRvdWJsZSBkb3VibGVWYWx1ZTsKCiAgZmFjdG9yeSBEb3VibGVDb25zdGFudFZhbHVlKGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKHZhbHVlLmlzTmFOKSB7CiAgICAgIHJldHVybiBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbChkb3VibGUubmFuKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gZG91YmxlLmluZmluaXR5KSB7CiAgICAgIHJldHVybiBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbChkb3VibGUuaW5maW5pdHkpOwogICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAtZG91YmxlLmluZmluaXR5KSB7CiAgICAgIHJldHVybiBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgtZG91YmxlLmluZmluaXR5KTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gMC4wICYmICF2YWx1ZS5pc05lZ2F0aXZlKSB7CiAgICAgIHJldHVybiBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgwLjApOwogICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAxLjApIHsKICAgICAgcmV0dXJuIGNvbnN0IERvdWJsZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKDEuMCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IERvdWJsZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKHZhbHVlKTsKICAgIH0KICB9CgogIGNvbnN0IERvdWJsZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKHRoaXMuZG91YmxlVmFsdWUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0RvdWJsZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05hTiA9PiBkb3VibGVWYWx1ZS5pc05hTjsKCiAgLy8gV2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIG5lZ2F0aXZlIHNpZ24gc2luY2UgLTAuMCA9PSAwLjAuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNaW51c1plcm8gPT4gZG91YmxlVmFsdWUgPT0gMC4wICYmIGRvdWJsZVZhbHVlLmlzTmVnYXRpdmU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzWmVybyA9PiBkb3VibGVWYWx1ZSA9PSAwLjA7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzT25lID0+IGRvdWJsZVZhbHVlID09IDEuMDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZUluZmluaXR5ID0+IGRvdWJsZVZhbHVlID09IGRvdWJsZS5pbmZpbml0eTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZUluZmluaXR5ID0+IGRvdWJsZVZhbHVlID09IC1kb3VibGUuaW5maW5pdHk7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmRvdWJsZVR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIERvdWJsZUNvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIERvdWJsZUNvbnN0YW50VmFsdWUgb3RoZXJEb3VibGUgPSBvdGhlcjsKICAgIGRvdWJsZSBvdGhlclZhbHVlID0gb3RoZXJEb3VibGUuZG91YmxlVmFsdWU7CiAgICBpZiAoZG91YmxlVmFsdWUgPT0gMC4wICYmIG90aGVyVmFsdWUgPT0gMC4wKSB7CiAgICAgIHJldHVybiBkb3VibGVWYWx1ZS5pc05lZ2F0aXZlID09IG90aGVyVmFsdWUuaXNOZWdhdGl2ZTsKICAgIH0gZWxzZSBpZiAoZG91YmxlVmFsdWUuaXNOYU4pIHsKICAgICAgcmV0dXJuIG90aGVyVmFsdWUuaXNOYU47CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZG91YmxlVmFsdWUgPT0gb3RoZXJWYWx1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gZG91YmxlVmFsdWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXREb3VibGUodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuRE9VQkxFOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpID0+ICdEb3VibGVDb25zdGFudCgke3RvRGFydFRleHQoKX0pJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiBkb3VibGVWYWx1ZS50b1N0cmluZygpOwp9CgphYnN0cmFjdCBjbGFzcyBCb29sQ29uc3RhbnRWYWx1ZSBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgewogIGZhY3RvcnkgQm9vbENvbnN0YW50VmFsdWUodmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSA/IG5ldyBUcnVlQ29uc3RhbnRWYWx1ZSgpIDogbmV3IEZhbHNlQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgY29uc3QgQm9vbENvbnN0YW50VmFsdWUuX2ludGVybmFsKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQm9vbCA9PiB0cnVlOwoKICBib29sIGdldCBib29sVmFsdWU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmJvb2xUeXBlOwoKICBCb29sQ29uc3RhbnRWYWx1ZSBuZWdhdGUoKTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgPT4gdmlzaXRvci52aXNpdEJvb2wodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuQk9PTDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnQm9vbENvbnN0YW50KCR7dG9EYXJ0VGV4dCgpfSknOwp9CgpjbGFzcyBUcnVlQ29uc3RhbnRWYWx1ZSBleHRlbmRzIEJvb2xDb25zdGFudFZhbHVlIHsKICBmYWN0b3J5IFRydWVDb25zdGFudFZhbHVlKCkgPT4gY29uc3QgVHJ1ZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKCk7CgogIGNvbnN0IFRydWVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgpIDogc3VwZXIuX2ludGVybmFsKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVHJ1ZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBib29sVmFsdWUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgRmFsc2VDb25zdGFudFZhbHVlIG5lZ2F0ZSgpID0+IG5ldyBGYWxzZUNvbnN0YW50VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpID0+IGlkZW50aWNhbCh0aGlzLCBvdGhlcik7CgogIC8vIFRoZSBtYWdpYyBjb25zdGFudCBpcyBqdXN0IGEgcmFuZG9tIHZhbHVlLiBJdCBkb2VzIG5vdCBoYXZlIGFueQogIC8vIHNpZ25pZmljYW5jZS4KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDQ5OTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiBib29sVmFsdWUudG9TdHJpbmcoKTsKfQoKY2xhc3MgRmFsc2VDb25zdGFudFZhbHVlIGV4dGVuZHMgQm9vbENvbnN0YW50VmFsdWUgewogIGZhY3RvcnkgRmFsc2VDb25zdGFudFZhbHVlKCkgPT4gY29uc3QgRmFsc2VDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgpOwoKICBjb25zdCBGYWxzZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKCkgOiBzdXBlci5faW50ZXJuYWwoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGYWxzZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBib29sVmFsdWUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFRydWVDb25zdGFudFZhbHVlIG5lZ2F0ZSgpID0+IG5ldyBUcnVlQ29uc3RhbnRWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgPT4gaWRlbnRpY2FsKHRoaXMsIG90aGVyKTsKCiAgLy8gVGhlIG1hZ2ljIGNvbnN0YW50IGlzIGp1c3QgYSByYW5kb20gdmFsdWUuIEl0IGRvZXMgbm90IGhhdmUgYW55CiAgLy8gc2lnbmlmaWNhbmNlLgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gNTM2NTU1OTc1OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+IGJvb2xWYWx1ZS50b1N0cmluZygpOwp9CgpjbGFzcyBTdHJpbmdDb25zdGFudFZhbHVlIGV4dGVuZHMgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSB7CiAgZmluYWwgU3RyaW5nIHN0cmluZ1ZhbHVlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiBjYWNoZSBTdHJpbmdDb25zdGFudHMuCiAgU3RyaW5nQ29uc3RhbnRWYWx1ZShTdHJpbmcgdmFsdWUpCiAgICAgIDogdGhpcy5zdHJpbmdWYWx1ZSA9IHZhbHVlLAogICAgICAgIHRoaXMuaGFzaENvZGUgPSB2YWx1ZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTdHJpbmcgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gdHlwZXMuc3RyaW5nVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgU3RyaW5nQ29uc3RhbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBvdGhlclN0cmluZyA9IG90aGVyOwogICAgcmV0dXJuIGhhc2hDb2RlID09IG90aGVyU3RyaW5nLmhhc2hDb2RlICYmCiAgICAgICAgc3RyaW5nVmFsdWUgPT0gb3RoZXJTdHJpbmcuc3RyaW5nVmFsdWU7CiAgfQoKICBTdHJpbmcgdG9EYXJ0U3RyaW5nKCkgPT4gc3RyaW5nVmFsdWU7CgogIGludCBnZXQgbGVuZ3RoID0+IHN0cmluZ1ZhbHVlLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgPT4gdmlzaXRvci52aXNpdFN0cmluZyh0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5TVFJJTkc7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEVuc3VyZSBjb3JyZWN0IGVzY2FwaW5nLgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gJyIke3N0cmluZ1ZhbHVlfSInOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpID0+ICdTdHJpbmdDb25zdGFudCgke3RvRGFydFRleHQoKX0pJzsKfQoKYWJzdHJhY3QgY2xhc3MgT2JqZWN0Q29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKCiAgT2JqZWN0Q29uc3RhbnRWYWx1ZSh0aGlzLnR5cGUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc09iamVjdCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlOwoKICB2b2lkIF91bnBhcnNlVHlwZUFyZ3VtZW50cyhTdHJpbmdCdWZmZXIgc2IpIHsKICAgIGlmICghdHlwZS50cmVhdEFzUmF3KSB7CiAgICAgIHNiLndyaXRlKCc8Jyk7CiAgICAgIHNiLndyaXRlKHR5cGUudHlwZUFyZ3VtZW50cy5qb2luKCcsICcpKTsKICAgICAgc2Iud3JpdGUoJz4nKTsKICAgIH0KICB9Cn0KCmNsYXNzIFR5cGVDb25zdGFudFZhbHVlIGV4dGVuZHMgT2JqZWN0Q29uc3RhbnRWYWx1ZSB7CiAgLy8vIFRoZSB1c2VyIHR5cGUgdGhhdCB0aGlzIGNvbnN0YW50IHJlcHJlc2VudHMuCiAgZmluYWwgRGFydFR5cGUgcmVwcmVzZW50ZWRUeXBlOwoKICBUeXBlQ29uc3RhbnRWYWx1ZSh0aGlzLnJlcHJlc2VudGVkVHlwZSwgSW50ZXJmYWNlVHlwZSB0eXBlKSA6IHN1cGVyKHR5cGUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1R5cGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFR5cGVDb25zdGFudFZhbHVlICYmCiAgICAgICAgcmVwcmVzZW50ZWRUeXBlLnVuYWxpYXNlZCA9PSBvdGhlci5yZXByZXNlbnRlZFR5cGUudW5hbGlhc2VkOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiByZXByZXNlbnRlZFR5cGUudW5hbGlhc2VkLmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gY29uc3QgPENvbnN0YW50VmFsdWU+W107CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRUeXBlKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLlRZUEU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gJyRyZXByZXNlbnRlZFR5cGUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpID0+ICdUeXBlQ29uc3RhbnQoJHtyZXByZXNlbnRlZFR5cGV9KSc7Cn0KCmNsYXNzIExpc3RDb25zdGFudFZhbHVlIGV4dGVuZHMgT2JqZWN0Q29uc3RhbnRWYWx1ZSB7CiAgZmluYWwgTGlzdDxDb25zdGFudFZhbHVlPiBlbnRyaWVzOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZTsKCiAgTGlzdENvbnN0YW50VmFsdWUoSW50ZXJmYWNlVHlwZSB0eXBlLCBMaXN0PENvbnN0YW50VmFsdWU+IGVudHJpZXMpCiAgICAgIDogdGhpcy5lbnRyaWVzID0gZW50cmllcywKICAgICAgICBoYXNoQ29kZSA9IEhhc2hpbmcubGlzdEhhc2goZW50cmllcywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpKSwKICAgICAgICBzdXBlcih0eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNMaXN0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIExpc3RDb25zdGFudFZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICBMaXN0Q29uc3RhbnRWYWx1ZSBvdGhlckxpc3QgPSBvdGhlcjsKICAgIGlmIChoYXNoQ29kZSAhPSBvdGhlckxpc3QuaGFzaENvZGUpIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlICE9IG90aGVyTGlzdC50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZW50cmllcy5sZW5ndGggIT0gb3RoZXJMaXN0LmVudHJpZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVudHJpZXNbaV0gIT0gb3RoZXJMaXN0LmVudHJpZXNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBlbnRyaWVzOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBlbnRyaWVzLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgPT4gdmlzaXRvci52aXNpdExpc3QodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuTElTVDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJ1snKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShlbnRyaWVzW2ldLnRvRGFydFRleHQoKSk7CiAgICB9CiAgICBzYi53cml0ZSgnXScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdMaXN0Q29uc3RhbnQoJyk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJ1snKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCAnKTsKICAgICAgc2Iud3JpdGUoZW50cmllc1tpXS50b1N0cnVjdHVyZWRUZXh0KCkpOwogICAgfQogICAgc2Iud3JpdGUoJ10pJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFNldENvbnN0YW50VmFsdWUgZXh0ZW5kcyBPYmplY3RDb25zdGFudFZhbHVlIHsKICBmaW5hbCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlczsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CgogIFNldENvbnN0YW50VmFsdWUoSW50ZXJmYWNlVHlwZSB0eXBlLCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcykKICAgICAgOiB2YWx1ZXMgPSB2YWx1ZXMsCiAgICAgICAgaGFzaENvZGUgPSBIYXNoaW5nLmxpc3RIYXNoKHZhbHVlcywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpKSwKICAgICAgICBzdXBlcih0eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTZXQgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgU2V0Q29uc3RhbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgU2V0Q29uc3RhbnRWYWx1ZSBvdGhlclNldCA9IG90aGVyOwogICAgaWYgKGhhc2hDb2RlICE9IG90aGVyU2V0Lmhhc2hDb2RlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZSAhPSBvdGhlclNldC50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobGVuZ3RoICE9IG90aGVyU2V0Lmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHZhbHVlc1tpXSAhPSBvdGhlclNldC52YWx1ZXNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiB2YWx1ZXM7CgogIGludCBnZXQgbGVuZ3RoID0+IHZhbHVlcy5sZW5ndGg7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRTZXQodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJ3snKTsKICAgIHNiLndyaXRlQWxsKHZhbHVlcy5tYXAoKHYpID0+IHYudG9EYXJ0VGV4dCgpKSwgJywnKTsKICAgIHNiLndyaXRlKCd9Jyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ1NldENvbnN0YW50KCcpOwogICAgX3VucGFyc2VUeXBlQXJndW1lbnRzKHNiKTsKICAgIHNiLndyaXRlKCd7Jyk7CiAgICBzYi53cml0ZUFsbCh2YWx1ZXMubWFwKCh2KSA9PiB2LnRvU3RydWN0dXJlZFRleHQoKSksICcsICcpOwogICAgc2Iud3JpdGUoJ30pJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLlNFVDsKfQoKYWJzdHJhY3QgY2xhc3MgTWFwQ29uc3RhbnRWYWx1ZSBleHRlbmRzIE9iamVjdENvbnN0YW50VmFsdWUgewogIGZpbmFsIExpc3Q8Q29uc3RhbnRWYWx1ZT4ga2V5czsKICBmaW5hbCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlczsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgTWFwPENvbnN0YW50VmFsdWUsIENvbnN0YW50VmFsdWU+IF9sb29rdXBNYXA7CgogIE1hcENvbnN0YW50VmFsdWUoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgTGlzdDxDb25zdGFudFZhbHVlPiBrZXlzLCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcykKICAgICAgOiB0aGlzLmtleXMgPSBrZXlzLAogICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzLAogICAgICAgIHRoaXMuaGFzaENvZGUgPSBIYXNoaW5nLmxpc3RIYXNoKAogICAgICAgICAgICB2YWx1ZXMsIEhhc2hpbmcubGlzdEhhc2goa2V5cywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpKSksCiAgICAgICAgc3VwZXIodHlwZSkgewogICAgYXNzZXJ0KGtleXMubGVuZ3RoID09IHZhbHVlcy5sZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYXAgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgTWFwQ29uc3RhbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgTWFwQ29uc3RhbnRWYWx1ZSBvdGhlck1hcCA9IG90aGVyOwogICAgaWYgKGhhc2hDb2RlICE9IG90aGVyTWFwLmhhc2hDb2RlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZSAhPSBvdGhlci50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobGVuZ3RoICE9IG90aGVyLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAoa2V5c1tpXSAhPSBvdGhlck1hcC5rZXlzW2ldKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICh2YWx1ZXNbaV0gIT0gb3RoZXJNYXAudmFsdWVzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiByZXN1bHQgPSA8Q29uc3RhbnRWYWx1ZT5bXTsKICAgIHJlc3VsdC5hZGRBbGwoa2V5cyk7CiAgICByZXN1bHQuYWRkQWxsKHZhbHVlcyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4ga2V5cy5sZW5ndGg7CgogIENvbnN0YW50VmFsdWUgbG9va3VwKENvbnN0YW50VmFsdWUga2V5KSB7CiAgICB2YXIgbG9va3VwTWFwID0gX2xvb2t1cE1hcCA/Pz0KICAgICAgICBuZXcgTWFwPENvbnN0YW50VmFsdWUsIENvbnN0YW50VmFsdWU+LmZyb21JdGVyYWJsZXMoa2V5cywgdmFsdWVzKTsKICAgIHJldHVybiBsb29rdXBNYXBba2V5XTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRNYXAodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuTUFQOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF91bnBhcnNlVHlwZUFyZ3VtZW50cyhzYik7CiAgICBzYi53cml0ZSgneycpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAoaSA+IDApIHNiLndyaXRlKCcsJyk7CiAgICAgIHNiLndyaXRlKGtleXNbaV0udG9EYXJ0VGV4dCgpKTsKICAgICAgc2Iud3JpdGUoJzonKTsKICAgICAgc2Iud3JpdGUodmFsdWVzW2ldLnRvRGFydFRleHQoKSk7CiAgICB9CiAgICBzYi53cml0ZSgnfScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdNYXBDb25zdGFudCgnKTsKICAgIF91bnBhcnNlVHlwZUFyZ3VtZW50cyhzYik7CiAgICBzYi53cml0ZSgneycpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAoaSA+IDApIHNiLndyaXRlKCcsICcpOwogICAgICBzYi53cml0ZShrZXlzW2ldLnRvU3RydWN0dXJlZFRleHQoKSk7CiAgICAgIHNiLndyaXRlKCc6ICcpOwogICAgICBzYi53cml0ZSh2YWx1ZXNbaV0udG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgIH0KICAgIHNiLndyaXRlKCd9KScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgZXh0ZW5kcyBDb25zdGFudFZhbHVlIHsKICAvLy8gVGhlIGNsYXNzIGZvciB3aGljaCB0aGlzIGludGVyY2VwdG9yIGhvbGRzIHRoZSBtZXRob2RzLiAgVGhlIGNvbnN0YW50CiAgLy8vIGlzIGEgZGlzcGF0Y2ggdGFibGUgZm9yIHRoaXMgY2xhc3MuCiAgZmluYWwgQ2xhc3NFbnRpdHkgY2xzOwoKICBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUodGhpcy5jbHMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ludGVyY2VwdG9yID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgJiYgY2xzID09IG90aGVyLmNsczsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gY2xzLmhhc2hDb2RlICogNDM7CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gY29uc3QgPENvbnN0YW50VmFsdWU+W107CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW50ZXJjZXB0b3IodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5JTlRFUkNFUFRPUjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICByZXR1cm4gJ2ludGVyY2VwdG9yKCRjbHMpJzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgewogICAgcmV0dXJuICdJbnRlcmNlcHRvckNvbnN0YW50KCR7Y2xzLm5hbWV9KSc7CiAgfQp9CgpjbGFzcyBKc05hbWVDb25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgZmluYWwganMuTGl0ZXJhbFN0cmluZyBuYW1lOwoKICBKc05hbWVDb25zdGFudFZhbHVlKHRoaXMubmFtZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRHVtbXkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIEpzTmFtZUNvbnN0YW50VmFsdWUgJiYgbmFtZSA9PSBvdGhlci5uYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgZ2V0IGhhc2hDb2RlID0+IG5hbWUuaGFzaENvZGUgKiAxNzsKCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRKc05hbWUodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5KU19OQU1FOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICdqc19uYW1lKCR7bmFtZX0pJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnSnNOYW1lQ29uc3RhbnQoJHtuYW1lfSknOwp9CgovLy8gQSBjb25zdGFudCB1c2VkIGFzIHRoZSBkdW1teSBpbnRlcmNlcHRvciB2YWx1ZSBmb3IgaW50ZXJjZXB0ZWQgY2FsbHMgd2l0aAovLy8gYSBrbm93biBub24taW50ZXJjZXB0b3IgdGFyZ2V0LgpjbGFzcyBEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIGZpbmFsIEFic3RyYWN0VmFsdWUgYWJzdHJhY3RWYWx1ZTsKCiAgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUodGhpcy5hYnN0cmFjdFZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEdW1teSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgJiYKICAgICAgICBhYnN0cmFjdFZhbHVlID09IG90aGVyLmFic3RyYWN0VmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBnZXQgaGFzaENvZGUgPT4gYWJzdHJhY3RWYWx1ZS5oYXNoQ29kZSAqIDE3OwoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdER1bW15SW50ZXJjZXB0b3IodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5EVU1NWV9JTlRFUkNFUFRPUjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiAnZHVtbXlfaW50ZXJjZXB0b3IoJGFic3RyYWN0VmFsdWUpJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50KCRhYnN0cmFjdFZhbHVlKSc7Cn0KCi8vIEEgY29uc3RhbnQgd2l0aCBhbiBlbXB0eSB0eXBlIHVzZWQgaW4gW0hJbnN0cnVjdGlvbl1zIG9mIGFuIGV4cHJlc3Npb24KLy8gaW4gYW4gdW5yZWFjaGFibGUgY29udGV4dC4KY2xhc3MgVW5yZWFjaGFibGVDb25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgY29uc3QgVW5yZWFjaGFibGVDb25zdGFudFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRHVtbXkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRVbnJlYWNoYWJsZSh0aGlzLCBhcmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gdHlwZXMuZHluYW1pY1R5cGU7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLlVOUkVBQ0hBQkxFOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICd1bnJlYWNoYWJsZSgpJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnVW5yZWFjaGFibGVDb25zdGFudCgpJzsKfQoKY2xhc3MgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGV4dGVuZHMgT2JqZWN0Q29uc3RhbnRWYWx1ZSB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWFrZSBbZmllbGRzXSBwcml2YXRlIHRvIGF2b2lkIG1pc3VzZSBvZiB0aGUgbWFwCiAgLy8gb3JkZXJpbmcgYW5kIG11dGFiaWxpdHkuCiAgZmluYWwgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPiBmaWVsZHM7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwoKICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPiBmaWVsZHMpCiAgICAgIDogdGhpcy5maWVsZHMgPSBmaWVsZHMsCiAgICAgICAgaGFzaENvZGUgPSBIYXNoaW5nLnVub3JkZXJlZE1hcEhhc2goZmllbGRzLCBIYXNoaW5nLm9iamVjdEhhc2godHlwZSkpLAogICAgICAgIHN1cGVyKHR5cGUpIHsKICAgIGFzc2VydCh0eXBlICE9IG51bGwpOwogICAgYXNzZXJ0KCFmaWVsZHMuY29udGFpbnNLZXkobnVsbCkpOwogICAgYXNzZXJ0KCFmaWVsZHMuY29udGFpbnNWYWx1ZShudWxsKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnN0cnVjdGVkT2JqZWN0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyVmFyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyVmFyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXJWYXIgaXMhIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIG90aGVyID0gb3RoZXJWYXI7CiAgICBpZiAoaGFzaENvZGUgIT0gb3RoZXIuaGFzaENvZGUpIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlICE9IG90aGVyLnR5cGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChmaWVsZHMubGVuZ3RoICE9IG90aGVyLmZpZWxkcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoRmllbGRFbnRpdHkgZmllbGQgaW4gZmllbGRzLmtleXMpIHsKICAgICAgaWYgKGZpZWxkc1tmaWVsZF0gIT0gb3RoZXIuZmllbGRzW2ZpZWxkXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGZpZWxkcy52YWx1ZXMudG9MaXN0KCk7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29uc3RydWN0ZWQodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLkNPTlNUUlVDVEVEOwoKICBJdGVyYWJsZTxGaWVsZEVudGl0eT4gZ2V0IF9maWVsZHNTb3J0ZWRCeU5hbWUgewogICAgcmV0dXJuIGZpZWxkcy5rZXlzLnRvTGlzdCgpLi5zb3J0KChhLCBiKSA9PiBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSh0eXBlLmVsZW1lbnQubmFtZSk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJygnKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoRmllbGRFbnRpdHkgZmllbGQgaW4gX2ZpZWxkc1NvcnRlZEJ5TmFtZSkgewogICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZmllbGRzW2ZpZWxkXTsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShmaWVsZC5uYW1lKTsKICAgICAgc2Iud3JpdGUoJz0nKTsKICAgICAgc2Iud3JpdGUodmFsdWUudG9EYXJ0VGV4dCgpKTsKICAgICAgaSsrOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnQ29uc3RydWN0ZWRDb25zdGFudCgnKTsKICAgIHNiLndyaXRlKHR5cGUpOwogICAgc2Iud3JpdGUoJygnKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoRmllbGRFbnRpdHkgZmllbGQgaW4gX2ZpZWxkc1NvcnRlZEJ5TmFtZSkgewogICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZmllbGRzW2ZpZWxkXTsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShmaWVsZC5uYW1lKTsKICAgICAgc2Iud3JpdGUoJz0nKTsKICAgICAgc2Iud3JpdGUodmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgICAgaSsrOwogICAgfQogICAgc2Iud3JpdGUoJykpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICBmaW5hbCBGdW5jdGlvbkNvbnN0YW50VmFsdWUgZnVuY3Rpb247CgogIEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlKHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5mdW5jdGlvbik7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSAmJgogICAgICAgIGZ1bmN0aW9uID09IG90aGVyLmZ1bmN0aW9uICYmCiAgICAgICAgZXF1YWxFbGVtZW50cyh0eXBlQXJndW1lbnRzLCBvdGhlci50eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIEhhc2hpbmcub2JqZWN0SGFzaChmdW5jdGlvbiwgSGFzaGluZy5saXN0SGFzaCh0eXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IDxDb25zdGFudFZhbHVlPltmdW5jdGlvbl07CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnN0YW50aWF0aW9uKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpIHsKICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gZnVuY3Rpb24uZ2V0VHlwZSh0eXBlcyk7CiAgICByZXR1cm4gdHlwZS5pbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLklOU1RBTlRJQVRJT047CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4KICAgICAgJzwke3R5cGVBcmd1bWVudHMuam9pbignLCAnKX0+KCR7ZnVuY3Rpb24udG9EYXJ0VGV4dCgpfSknOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIHJldHVybiAnSW5zdGFudGlhdGlvbkNvbnN0YW50KCR0eXBlQXJndW1lbnRzLCcKICAgICAgICAnJHtmdW5jdGlvbi50b1N0cnVjdHVyZWRUZXh0KCl9KSc7CiAgfQp9CgovLy8gQSByZWZlcmVuY2UgdG8gYSBjb25zdGFudCBpbiBhbm90aGVyIG91dHB1dCB1bml0LgovLy8KLy8vIFVzZWQgZm9yIHJlZmVycmluZyB0byBkZWZlcnJlZCBjb25zdGFudHMgdGhhdCBhcHBlYXIgYXMgaW5pdGlhbGl6ZXJzIG9mCi8vLyBmaW5hbCAobm9uLWNvbnN0KSBnbG9iYWwgZmllbGRzLgovLy8KLy8gVE9ETyhzaWdtdW5kKTogdGhpcyBzaG91bGQgZXZlbnR1YWxseSBub3QgYmUgYSBjb25zdGFudCB2YWx1ZS4gSW4gcGFydGljdWxhciwKLy8gW0RlZmVycmVkQ29uc3RhbnRWYWx1ZV0gaXMgaW50cm9kdWNlZCBieSB0aGUgY29uc3RhbnQgZXZhbHVhdG9yIHdoZW4gaXQgZmlyc3QKLy8gc2VlcyBjb25zdGFudHMgdXNlZCBpbiB0aGUgcHJvZ3JhbS4gW0RlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZV0gYXJlCi8vIGludHJvZHVjZWQgbGF0ZXIgYnkgdGhlIFNTQSBidWlsZGVyIGFuZCBzaG91bGQgYmUgcmVwcmVzZW50ZWQKLy8gd2l0aCBhIGRlZGljYXRlZCBKRW50aXR5IGluc3RlYWQuIFdlIGN1cnJlbnRseSBtb2RlbCB0aGVtIGFzIGEgcmVndWxhcgovLyBjb25zdGFudCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbWFjaGluZXJ5IHdlIGFscmVhZHkgaGF2ZSBpbiBwbGFjZSB0bwovLyBnZW5lcmF0ZSBkZWZlcnJlZCBjb25zdGFudHMgaW4gdGhlIGVtaXR0ZXIuCmNsYXNzIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSh0aGlzLnJlZmVyZW5jZWQsIHRoaXMudW5pdCk7CgogIGZpbmFsIENvbnN0YW50VmFsdWUgcmVmZXJlbmNlZDsKICBmaW5hbCBPdXRwdXRVbml0IHVuaXQ7CgogIGJvb2wgZ2V0IGlzUmVmZXJlbmNlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgJiYKICAgICAgICByZWZlcmVuY2VkID09IG90aGVyLnJlZmVyZW5jZWQgJiYKICAgICAgICB1bml0ID09IG90aGVyLnVuaXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBnZXQgaGFzaENvZGUgPT4gKHJlZmVyZW5jZWQuaGFzaENvZGUgKiAxNyArIHVuaXQuaGFzaENvZGUpICYgMHgzZmZmZmZmZjsKCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiA8Q29uc3RhbnRWYWx1ZT5bcmVmZXJlbmNlZF07CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXREZWZlcnJlZEdsb2JhbCh0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiByZWZlcmVuY2VkLmdldFR5cGUodHlwZXMpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5ERUZFUlJFRF9HTE9CQUw7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gJ2RlZmVycmVkX2dsb2JhbCgke3JlZmVyZW5jZWQudG9EYXJ0VGV4dCgpfSknOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIHJldHVybiAnRGVmZXJyZWRHbG9iYWxDb25zdGFudCgke3JlZmVyZW5jZWQudG9TdHJ1Y3R1cmVkVGV4dCgpfSknOwogIH0KfQoKLy8vIEEgY29uc3RhbnQgdmFsdWUgcmVzdWx0aW5nIGZyb20gYSBub24gY29uc3RhbnQgb3IgZXJyb25lb3VzIGNvbnN0YW50Ci8vLyBleHByZXNzaW9uLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBFeHBhbmQgdGhpcyB0byBjb250YWluIHRoZSBlcnJvciBraW5kLgpjbGFzcyBOb25Db25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb25zdGFudCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXROb25Db25zdGFudCh0aGlzLCBhcmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9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b25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgZXF1YWxFbGVtZW50czsKaW1wb3J0ICdlbnRpdGllcy5kYXJ0JzsKCi8vLyBIaWVyYXJjaHkgdG8gZGVzY3JpYmUgdHlwZXMgaW4gRGFydC4KLy8vCi8vLyBUaGlzIGhpZXJhcmNoeSBpcyBhIHN1cGVyIGhpZXJhcmNoeSBvZiB0aGUgdXNlLWNhc2Ugc3BlY2lmaWMgaGllcmFyY2hpZXMKLy8vIHVzZWQgaW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBjb21waWxlci4gVGhpcyBoaWVyYXJjaHkgYWJzdHJhY3RzIGRldGFpbHMKLy8vIG5vdCBnZW5lcmFsbHkgbmVlZGVkIG9yIHJlcXVpcmVkIGZvciB0aGUgRGFydCB0eXBlIGhpZXJhcmNoeS4gRm9yIGluc3RhbmNlLAovLy8gdGhlIGhpZXJhcmNoeSBpbiAncmVzb2x1dGlvbl90eXBlcy5kYXJ0JyBoYXMgcHJvcGVydGllcyBzdXBwb3J0aW5nIGxhenkKLy8vIGNvbXB1dGF0aW9uIChsaWtlIGNvbXB1dGVBbGlhcykgYW5kIGRpc3RpbmN0aW9ucyBiZXR3ZWVuICdGb28nIGFuZAovLy8gJ0ZvbzxkeW5hbWljPicsIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBuZWVkZWQgZm9yIGNvZGUgZ2VuZXJhdGlvbiBhbmQgbm90Ci8vLyBzdXBwb3J0ZWQgZnJvbSBrZXJuZWwuCi8vLwovLy8gQ3VycmVudCBvbmx5ICdyZXNvbHV0aW9uX3R5cGVzLmRhcnQnIGltcGxlbWVudCB0aGlzIGhpZXJhcmNoeSBidXQgd2hlbiB0aGUKLy8vIGNvbXBpbGVyIG1vdmVzIHRvIHVzZSBbRW50aXR5XSBpbnN0ZWFkIG9mIFtFbGVtZW50XSB0aGlzIGhpZXJhcmNoeSBjYW4gYmUKLy8vIGltcGxlbWVudGVkIGRpcmVjdGx5IGJ1dCBvdGhlciBlbnRpdHkgc3lzdGVtcywgZm9yIGluc3RhbmNlIGJhc2VkIGRpcmVjdGx5Ci8vLyBvbiBrZXJuZWwgaXIgd2l0aG91dCB0aGUgbmVlZCBmb3IgW0VsZW1lbnRdLgoKYWJzdHJhY3QgY2xhc3MgRGFydFR5cGUgewogIGNvbnN0IERhcnRUeXBlKCk7CgogIC8vLyBSZXR1cm5zIHRoZSB1bmFsaWFzZWQgdHlwZSBvZiB0aGlzIHR5cGUuCiAgLy8vCiAgLy8vIFRoZSB1bmFsaWFzZWQgdHlwZSBvZiBhIHR5cGVkZWYnZCB0eXBlIGlzIHRoZSB1bmFsaWFzZWQgdHlwZSB0byB3aGljaCBpdHMKICAvLy8gbmFtZSBpcyBib3VuZC4gVGhlIHVuYWxpYXNlZCB2ZXJzaW9uIG9mIGFueSBvdGhlciB0eXBlIGlzIHRoZSB0eXBlIGl0c2VsZi4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIHRoZSB1bmFsaWFzZWQgdHlwZSBvZiBgdHlwZWRlZiBBIEZ1bmM8QSxCPihCIGIpYCBpcyB0aGUKICAvLy8gZnVuY3Rpb24gdHlwZSBgKEIpIC0+IEFgIGFuZCB0aGUgdW5hbGlhc2VkIHR5cGUgb2YgYEZ1bmM8aW50LFN0cmluZz5gCiAgLy8vIGlzIHRoZSBmdW5jdGlvbiB0eXBlIGAoU3RyaW5nKSAtPiBpbnRgLgogIERhcnRUeXBlIGdldCB1bmFsaWFzZWQgPT4gdGhpczsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaGFzIG5vIG5vbi1keW5hbWljIHR5cGUgYXJndW1lbnRzLgogIGJvb2wgZ2V0IHRyZWF0QXNSYXcgPT4gdHJ1ZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdGhlIGR5bmFtaWMgdHlwZS4KICBib29sIGdldCB0cmVhdEFzRHluYW1pYyA9PiBmYWxzZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgdGhlIGR5bmFtaWMgdHlwZS4KICBib29sIGdldCBpc0R5bmFtaWMgPT4gZmFsc2U7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGlzIHRoZSB2b2lkIHR5cGUuCiAgYm9vbCBnZXQgaXNWb2lkID0+IGZhbHNlOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgdHlwZSBpcyBhbiBpbnRlcmZhY2UgdHlwZS4KICBib29sIGdldCBpc0ludGVyZmFjZVR5cGUgPT4gZmFsc2U7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGlzIGEgdHlwZWRlZi4KICBib29sIGdldCBpc1R5cGVkZWYgPT4gZmFsc2U7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGlzIGEgZnVuY3Rpb24gdHlwZS4KICBib29sIGdldCBpc0Z1bmN0aW9uVHlwZSA9PiBmYWxzZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgYSB0eXBlIHZhcmlhYmxlLgogIGJvb2wgZ2V0IGlzVHlwZVZhcmlhYmxlID0+IGZhbHNlOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgdHlwZSBpcyBhIHR5cGUgdmFyaWFibGUgZGVjbGFyZWQgb24gYSBmdW5jdGlvbiB0eXBlCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgVGAgaW4KICAvLy8gICAgIHZvaWQgRnVuY3Rpb248VD4oVCB0KQogIGJvb2wgZ2V0IGlzRnVuY3Rpb25UeXBlVmFyaWFibGUgPT4gZmFsc2U7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGlzIGEgYEZ1dHVyZU9yYCB0eXBlLgogIGJvb2wgZ2V0IGlzRnV0dXJlT3IgPT4gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRoaXMgdHlwZSBjb250YWlucyBhIHR5cGUgdmFyaWFibGUuCiAgYm9vbCBnZXQgY29udGFpbnNUeXBlVmFyaWFibGVzID0+IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGlzIHR5cGUgY29udGFpbnMgYSBmcmVlIGNsYXNzIHR5cGUgdmFyaWFibGUgb3IgZnVuY3Rpb24gdHlwZQogIC8vLyB2YXJpYWJsZS4KICAvLyBUT0RPKHNyYSk6IFJldmlldyB1c2VzIG9mIFtjb250YWluc1R5cGVWYXJpYWJsZXNdIGZvciB1cGRhdGUgd2l0aAogIC8vIFtjb250YWluc0ZyZWVUeXBlVmFyaWFibGVzXS4KICBib29sIGdldCBjb250YWluc0ZyZWVUeXBlVmFyaWFibGVzID0+IF9jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKG51bGwpOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgdHlwZSBpcyB0aGUgJ09iamVjdCcgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIGJvb2wgZ2V0IGlzT2JqZWN0ID0+IGZhbHNlOwoKICAvLy8gQXBwbGllcyBbZl0gdG8gZWFjaCBvY2N1cmVuY2Ugb2YgYSBbVHlwZVZhcmlhYmxlVHlwZV0gd2l0aGluIHRoaXMKICAvLy8gdHlwZS4gVGhpcyBleGNsdWRlcyBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlcywgd2hldGhlciBmcmVlIG9yIGJvdW5kLgogIHZvaWQgZm9yRWFjaFR5cGVWYXJpYWJsZShmKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpKSB7fQoKICAvLy8gUGVyZm9ybXMgdGhlIHN1YnN0aXR1dGlvbiBgW2FyZ3VtZW50c1tpXS9wYXJhbWV0ZXJzW2ldXXRoaXNgLgogIC8vLwogIC8vLyBUaGUgbm90YXRpb24gaXMga25vd24gZnJvbSB0aGlzIGxhbWJkYSBjYWxjdWx1cyBydWxlOgogIC8vLwogIC8vLyAgICAgKGxhbWJkYSB4LmUwKWUxIC0+IFtlMS94XWUwLgogIC8vLwogIC8vLyBTZWUgW1R5cGVWYXJpYWJsZVR5cGVdIGZvciBhIG1vdGl2YXRpb24gZm9yIHRoaXMgbWV0aG9kLgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IFRoZXJlIG11c3QgYmUgdGhlIHNhbWUgbnVtYmVyIG9mIFthcmd1bWVudHNdIGFuZCBbcGFyYW1ldGVyc10uCiAgRGFydFR5cGUgc3Vic3QoTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJzKTsKCiAgLy8vIENhbGxzIHRoZSB2aXNpdCBtZXRob2Qgb24gW3Zpc2l0b3JdIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyB0eXBlLgogIFIgYWNjZXB0PFIsIEE+KERhcnRUeXBlVmlzaXRvcjxSLCBBPiB2aXNpdG9yLCBBIGFyZ3VtZW50KTsKCiAgYm9vbCBfZXF1YWxzKERhcnRUeXBlIG90aGVyLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpOwoKICBib29sIF9jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGJpbmRpbmdzKSA9PiBmYWxzZTsKfQoKLy8vIFBhaXJzIG9mIFtGdW5jdGlvblR5cGVWYXJpYWJsZV1zIHRoYXQgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGJlCi8vLyBlcXVpdmFsZW50LgovLy8KLy8vIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBlcXVpdmFsZW5jZSByZWxhdGlvbiBvbiB0eXBlcyBjb2luZHVjdGl2ZWx5LgpjbGFzcyBfQXNzdW1wdGlvbnMgewogIE1hcDxGdW5jdGlvblR5cGVWYXJpYWJsZSwgU2V0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPj4gX2Fzc3VtcHRpb25NYXAgPQogICAgICA8RnVuY3Rpb25UeXBlVmFyaWFibGUsIFNldDxGdW5jdGlvblR5cGVWYXJpYWJsZT4+e307CgogIHZvaWQgX2FkZEFzc3VtcHRpb24oRnVuY3Rpb25UeXBlVmFyaWFibGUgYSwgRnVuY3Rpb25UeXBlVmFyaWFibGUgYikgewogICAgX2Fzc3VtcHRpb25NYXAKICAgICAgICAucHV0SWZBYnNlbnQoYSwgKCkgPT4gbmV3IFNldDxGdW5jdGlvblR5cGVWYXJpYWJsZT4uaWRlbnRpdHkoKSkKICAgICAgICAuYWRkKGIpOwogIH0KCiAgLy8vIEFzc3VtZSB0aGF0IFthXSBhbmQgW2JdIGFyZSBlcXVpdmFsZW50LgogIHZvaWQgYXNzdW1lKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGEsIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGIpIHsKICAgIF9hZGRBc3N1bXB0aW9uKGEsIGIpOwogICAgX2FkZEFzc3VtcHRpb24oYiwgYSk7CiAgfQoKICB2b2lkIF9yZW1vdmVBc3N1bXB0aW9uKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGEsIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGIpIHsKICAgIFNldDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gc2V0ID0gX2Fzc3VtcHRpb25NYXBbYV07CiAgICBpZiAoc2V0ICE9IG51bGwpIHsKICAgICAgc2V0LnJlbW92ZShiKTsKICAgICAgaWYgKHNldC5pc0VtcHR5KSB7CiAgICAgICAgX2Fzc3VtcHRpb25NYXAucmVtb3ZlKGEpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmVtb3ZlIHRoZSBhc3N1bXB0aW9uIHRoYXQgW2FdIGFuZCBbYl0gYXJlIGVxdWl2YWxlbnQuCiAgdm9pZCBmb3JnZXQoRnVuY3Rpb25UeXBlVmFyaWFibGUgYSwgRnVuY3Rpb25UeXBlVmFyaWFibGUgYikgewogICAgX3JlbW92ZUFzc3VtcHRpb24oYSwgYik7CiAgICBfcmVtb3ZlQXNzdW1wdGlvbihiLCBhKTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbYV0gYW5kIFtiXSBhcmUgYXNzdW1lZCB0byBiZSBlcXVpdmFsZW50LgogIGJvb2wgaXNBc3N1bWVkKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGEsIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGIpIHsKICAgIHJldHVybiBfYXNzdW1wdGlvbk1hcFthXT8uY29udGFpbnMoYikgPz8gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnX0Fzc3VtcHRpb25zKCcpOwogICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICBfYXNzdW1wdGlvbk1hcAogICAgICAgIC5mb3JFYWNoKChGdW5jdGlvblR5cGVWYXJpYWJsZSBhLCBTZXQ8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHNldCkgewogICAgICBzYi53cml0ZSgnJGNvbW1hJGEgKCR7aWRlbnRpdHlIYXNoQ29kZShhKX0pLT4nCiAgICAgICAgICAneyR7c2V0Lm1hcCgoYikgPT4gJyRiICgke2lkZW50aXR5SGFzaENvZGUoYil9KScpLmpvaW4oJywnKX19Jyk7CiAgICAgIGNvbW1hID0gJywnOwogICAgfSk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBJbnRlcmZhY2VUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIENsYXNzRW50aXR5IGVsZW1lbnQ7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgSW50ZXJmYWNlVHlwZSh0aGlzLmVsZW1lbnQsIHRoaXMudHlwZUFyZ3VtZW50cyk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW50ZXJmYWNlVHlwZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc09iamVjdCB7CiAgICByZXR1cm4gZWxlbWVudC5uYW1lID09ICdPYmplY3QnICYmCiAgICAgICAgZWxlbWVudC5saWJyYXJ5LmNhbm9uaWNhbFVyaSA9PSBVcmlzLmRhcnRfY29yZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvbnRhaW5zVHlwZVZhcmlhYmxlcyA9PgogICAgICB0eXBlQXJndW1lbnRzLmFueSgodHlwZSkgPT4gdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hUeXBlVmFyaWFibGUoZihUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSkgewogICAgdHlwZUFyZ3VtZW50cy5mb3JFYWNoKCh0eXBlKSA9PiB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoZikpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcyhMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgewogICAgcmV0dXJuIHR5cGVBcmd1bWVudHMKICAgICAgICAuYW55KCh0eXBlKSA9PiB0eXBlLl9jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKGJpbmRpbmdzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHN1YnN0KExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVycykgewogICAgaWYgKHR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICAvLyBSZXR1cm4gZmFzdCBvbiBub24tZ2VuZXJpYyB0eXBlcy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIGFzc2VydChhcmd1bWVudHMuaXNFbXB0eSk7CiAgICAgIC8vIFJldHVybiBmYXN0IG9uIGVtcHR5IHN1YnN0aXR1dGlvbnMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gbmV3VHlwZUFyZ3VtZW50cyA9CiAgICAgICAgX3N1YnN0VHlwZXModHlwZUFyZ3VtZW50cywgYXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKICAgIGlmICghaWRlbnRpY2FsKHR5cGVBcmd1bWVudHMsIG5ld1R5cGVBcmd1bWVudHMpKSB7CiAgICAgIC8vIENyZWF0ZSBhIG5ldyB0eXBlIG9ubHkgaWYgbmVjZXNzYXJ5LgogICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoZWxlbWVudCwgbmV3VHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHRyZWF0QXNSYXcgewogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgaWYgKCF0eXBlLnRyZWF0QXNEeW5hbWljKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIFIgYWNjZXB0PFIsIEE+KERhcnRUeXBlVmlzaXRvcjxSLCBBPiB2aXNpdG9yLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdG9yLnZpc2l0SW50ZXJmYWNlVHlwZSh0aGlzLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgaW50IGhhc2ggPSBlbGVtZW50Lmhhc2hDb2RlOwogICAgZm9yIChEYXJ0VHlwZSBhcmd1bWVudCBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGludCBhcmd1bWVudEhhc2ggPSBhcmd1bWVudCAhPSBudWxsID8gYXJndW1lbnQuaGFzaENvZGUgOiAwOwogICAgICBoYXNoID0gMTcgKiBoYXNoICsgMyAqIGFyZ3VtZW50SGFzaDsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBJbnRlcmZhY2VUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEludGVyZmFjZVR5cGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfZXF1YWxzSW50ZXJuYWwob3RoZXIsIGFzc3VtcHRpb25zKTsKICB9CgogIGJvb2wgX2VxdWFsc0ludGVybmFsKEludGVyZmFjZVR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgcmV0dXJuIGlkZW50aWNhbChlbGVtZW50LCBvdGhlci5lbGVtZW50KSAmJgogICAgICAgIF9lcXVhbFR5cGVzKHR5cGVBcmd1bWVudHMsIG90aGVyLnR5cGVBcmd1bWVudHMsIGFzc3VtcHRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKGVsZW1lbnQubmFtZSk7CiAgICBpZiAodHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHNiLndyaXRlKCc8Jyk7CiAgICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwogICAgICBmb3IgKERhcnRUeXBlIHR5cGVBcmd1bWVudCBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKHR5cGVBcmd1bWVudCk7CiAgICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJz4nKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgVHlwZWRlZlR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgVHlwZWRlZkVudGl0eSBlbGVtZW50OwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgQG92ZXJyaWRlCiAgZmluYWwgRnVuY3Rpb25UeXBlIHVuYWxpYXNlZDsKCiAgVHlwZWRlZlR5cGUodGhpcy5lbGVtZW50LCB0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMudW5hbGlhc2VkKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNUeXBlZGVmID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvbnRhaW5zVHlwZVZhcmlhYmxlcyA9PgogICAgICB0eXBlQXJndW1lbnRzLmFueSgodHlwZSkgPT4gdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hUeXBlVmFyaWFibGUoZihUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSkgewogICAgdHlwZUFyZ3VtZW50cy5mb3JFYWNoKCh0eXBlKSA9PiB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoZikpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcyhMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgPT4KICAgICAgdHlwZUFyZ3VtZW50cy5hbnkoKHR5cGUpID0+IHR5cGUuX2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMoYmluZGluZ3MpKTsKCiAgQG92ZXJyaWRlCiAgVHlwZWRlZlR5cGUgc3Vic3QoTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJzKSB7CiAgICBpZiAodHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIC8vIFJldHVybiBmYXN0IG9uIG5vbi1nZW5lcmljIHR5cGVzLgogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGlmIChwYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgYXNzZXJ0KGFyZ3VtZW50cy5pc0VtcHR5KTsKICAgICAgLy8gUmV0dXJuIGZhc3Qgb24gZW1wdHkgc3Vic3RpdHV0aW9ucy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBMaXN0PERhcnRUeXBlPiBuZXdUeXBlQXJndW1lbnRzID0KICAgICAgICBfc3Vic3RUeXBlcyh0eXBlQXJndW1lbnRzLCBhcmd1bWVudHMsIHBhcmFtZXRlcnMpOwogICAgRnVuY3Rpb25UeXBlIG5ld1VuYWxpYXNlZCA9IHVuYWxpYXNlZC5zdWJzdChhcmd1bWVudHMsIHBhcmFtZXRlcnMpOwogICAgaWYgKCFpZGVudGljYWwodHlwZUFyZ3VtZW50cywgbmV3VHlwZUFyZ3VtZW50cykgfHwKICAgICAgICAhaWRlbnRpY2FsKHVuYWxpYXNlZCwgbmV3VW5hbGlhc2VkKSkgewogICAgICAvLyBDcmVhdGUgYSBuZXcgdHlwZSBvbmx5IGlmIG5lY2Vzc2FyeS4KICAgICAgcmV0dXJuIG5ldyBUeXBlZGVmVHlwZShlbGVtZW50LCBuZXdUeXBlQXJndW1lbnRzLCBuZXdVbmFsaWFzZWQpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCB0cmVhdEFzUmF3IHsKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICghdHlwZS50cmVhdEFzRHluYW1pYykgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdFR5cGVkZWZUeXBlKHRoaXMsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgaGFzaCA9IGVsZW1lbnQuaGFzaENvZGU7CiAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgaW50IGFyZ3VtZW50SGFzaCA9IGFyZ3VtZW50ICE9IG51bGwgPyBhcmd1bWVudC5oYXNoQ29kZSA6IDA7CiAgICAgIGhhc2ggPSAxNyAqIGhhc2ggKyAzICogYXJndW1lbnRIYXNoOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFR5cGVkZWZUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFR5cGVkZWZUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBhc3N1bXB0aW9ucyk7CiAgfQoKICBib29sIF9lcXVhbHNJbnRlcm5hbChUeXBlZGVmVHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKGVsZW1lbnQsIG90aGVyLmVsZW1lbnQpICYmCiAgICAgICAgX2VxdWFsVHlwZXModHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cywgYXNzdW1wdGlvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoZWxlbWVudC5uYW1lKTsKICAgIGlmICh0eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgc2Iud3JpdGUoJzwnKTsKICAgICAgYm9vbCBuZWVkc0NvbW1hID0gZmFsc2U7CiAgICAgIGZvciAoRGFydFR5cGUgdHlwZUFyZ3VtZW50IGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUodHlwZUFyZ3VtZW50KTsKICAgICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgICAgfQogICAgICBzYi53cml0ZSgnPicpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBUeXBlVmFyaWFibGVUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIFR5cGVWYXJpYWJsZUVudGl0eSBlbGVtZW50OwoKICBUeXBlVmFyaWFibGVUeXBlKHRoaXMuZWxlbWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVHlwZVZhcmlhYmxlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvbnRhaW5zVHlwZVZhcmlhYmxlcyA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hUeXBlVmFyaWFibGUoZihUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSkgewogICAgZih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMoTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gYmluZGluZ3MpID0+IHRydWU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHN1YnN0KExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVycykgewogICAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT0gcGFyYW1ldGVycy5sZW5ndGgpOwogICAgaWYgKHBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAvLyBSZXR1cm4gZmFzdCBvbiBlbXB0eSBzdWJzdGl0dXRpb25zLgogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGludCBpbmRleCA9IHBhcmFtZXRlcnMuaW5kZXhPZih0aGlzKTsKICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICByZXR1cm4gYXJndW1lbnRzW2luZGV4XTsKICAgIH0KICAgIC8vIFRoZSB0eXBlIHZhcmlhYmxlIHdhcyBub3Qgc3Vic3RpdHV0ZWQuCiAgICByZXR1cm4gdGhpczsKICB9CgogIEBvdmVycmlkZQogIFIgYWNjZXB0PFIsIEE+KERhcnRUeXBlVmlzaXRvcjxSLCBBPiB2aXNpdG9yLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdG9yLnZpc2l0VHlwZVZhcmlhYmxlVHlwZSh0aGlzLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gMTcgKiBlbGVtZW50Lmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIFR5cGVWYXJpYWJsZVR5cGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBpZGVudGljYWwob3RoZXIuZWxlbWVudCwgZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKG90aGVyIGlzIFR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgcmV0dXJuIGlkZW50aWNhbChvdGhlci5lbGVtZW50LCBlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke2VsZW1lbnQudHlwZURlY2xhcmF0aW9uLm5hbWV9LiR7ZWxlbWVudC5uYW1lfSc7Cn0KCi8vLyBBIHR5cGUgdmFyaWFibGUgZGVjbGFyZWQgb24gYSBmdW5jdGlvbiB0eXBlLgovLy8KLy8vIEZvciBpbnN0YW5jZSBgVGAgaW4KLy8vICAgICB2b2lkIEZ1bmN0aW9uPFQ+KFQgdCkKLy8vCi8vLyBTdWNoIGEgdHlwZSB2YXJpYWJsZSBpcyBkaWZmZXJlbnQgZnJvbSBhIFtUeXBlVmFyaWFibGVUeXBlXSBiZWNhdXNlIGl0Ci8vLyBkb2Vzbid0IGhhdmUgYSB1bmlxdWUgaWRlbnRpdHk7IGlzIGlzIGVxdWFsIHRvIGFueSBvdGhlcgovLy8gW0Z1bmN0aW9uVHlwZVZhcmlhYmxlXSB1c2VkIHNpbWlsYXJseSBpbiBhbm90aGVyIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50Ci8vLyBmdW5jdGlvbiB0eXBlLgpjbGFzcyBGdW5jdGlvblR5cGVWYXJpYWJsZSBleHRlbmRzIERhcnRUeXBlIHsKICAvLy8gVGhlIGluZGV4IG9mIHRoaXMgdHlwZSB3aXRoaW4gdGhlIHR5cGUgdmFyaWFibGVzIG9mIHRoZSBkZWNsYXJpbmcgZnVuY3Rpb24KICAvLy8gdHlwZS4KICBmaW5hbCBpbnQgaW5kZXg7CgogIC8vLyBUaGUgYm91bmQgb2YgdGhpcyBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlLgogIERhcnRUeXBlIF9ib3VuZDsKCiAgRnVuY3Rpb25UeXBlVmFyaWFibGUodGhpcy5pbmRleCk7CgogIERhcnRUeXBlIGdldCBib3VuZCB7CiAgICBhc3NlcnQoX2JvdW5kICE9IG51bGwsICJCb3VuZCBoYXNuJ3QgYmVlbiBzZXQuIik7CiAgICByZXR1cm4gX2JvdW5kOwogIH0KCiAgdm9pZCBzZXQgYm91bmQoRGFydFR5cGUgdmFsdWUpIHsKICAgIGFzc2VydChfYm91bmQgPT0gbnVsbCwgIkJvdW5kIGhhcyBhbHJlYWR5IGJlZW4gc2V0LiIpOwogICAgX2JvdW5kID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Z1bmN0aW9uVHlwZVZhcmlhYmxlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgX2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMoTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gYmluZGluZ3MpIHsKICAgIGlmIChiaW5kaW5ncyA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChiaW5kaW5ncy5pbmRleE9mKHRoaXMpID49IDApIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3QoTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJzKSB7CiAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PSBwYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIC8vIFJldHVybiBmYXN0IG9uIGVtcHR5IHN1YnN0aXR1dGlvbnMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgaW50IGluZGV4ID0gcGFyYW1ldGVycy5pbmRleE9mKHRoaXMpOwogICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgIHJldHVybiBhcmd1bWVudHNbaW5kZXhdOwogICAgfQogICAgLy8gVGhlIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGUgd2FzIG5vdCBzdWJzdGl0dXRlZC4KICAgIHJldHVybiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBpbmRleC5oYXNoQ29kZSAqIDE5OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEZ1bmN0aW9uVHlwZVZhcmlhYmxlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBGdW5jdGlvblR5cGVWYXJpYWJsZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGFzc3VtcHRpb25zICE9IG51bGwpIHJldHVybiBhc3N1bXB0aW9ucy5pc0Fzc3VtZWQodGhpcywgb3RoZXIpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgUiBhY2NlcHQ8UiwgQT4oRGFydFR5cGVWaXNpdG9yPFIsIEE+IHZpc2l0b3IsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0b3IudmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZSh0aGlzLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcjJHtuZXcgU3RyaW5nLmZyb21DaGFyQ29kZSgweDQxICsgaW5kZXgpfSc7Cn0KCmNsYXNzIFZvaWRUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGNvbnN0IFZvaWRUeXBlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVm9pZCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdChMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlcnMpIHsKICAgIC8vIGB2b2lkYCBjYW5ub3QgYmUgc3Vic3RpdHV0ZWQuCiAgICByZXR1cm4gdGhpczsKICB9CgogIEBvdmVycmlkZQogIFIgYWNjZXB0PFIsIEE+KERhcnRUeXBlVmlzaXRvcjxSLCBBPiB2aXNpdG9yLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdG9yLnZpc2l0Vm9pZFR5cGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDYwMDc7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKHRoaXMsIG90aGVyKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICd2b2lkJzsKfQoKY2xhc3MgRHluYW1pY1R5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgY29uc3QgRHluYW1pY1R5cGUoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEeW5hbWljID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHRyZWF0QXNEeW5hbWljID0+IHRydWU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHN1YnN0KExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVycykgewogICAgLy8gYGR5bmFtaWNgIGNhbm5vdCBiZSBzdWJzdGl0dXRlZC4KICAgIHJldHVybiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgUiBhY2NlcHQ8UiwgQT4oRGFydFR5cGVWaXNpdG9yPFIsIEE+IHZpc2l0b3IsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0b3IudmlzaXREeW5hbWljVHlwZSh0aGlzLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gOTE7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKHRoaXMsIG90aGVyKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdkeW5hbWljJzsKfQoKY2xhc3MgRnVuY3Rpb25UeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIERhcnRUeXBlIHJldHVyblR5cGU7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVyVHlwZXM7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gb3B0aW9uYWxQYXJhbWV0ZXJUeXBlczsKCiAgLy8vIFRoZSBuYW1lcyBvZiB0aGUgbmFtZWQgcGFyYW1ldGVycyBvcmRlcmVkIGxleGljb2dyYXBoaWNhbGx5LgogIGZpbmFsIExpc3Q8U3RyaW5nPiBuYW1lZFBhcmFtZXRlcnM7CgogIC8vLyBUaGUgdHlwZXMgb2YgdGhlIG5hbWVkIHBhcmFtZXRlcnMgaW4gdGhlIG9yZGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAgLy8vIFtuYW1lZFBhcmFtZXRlcnNdLgogIGZpbmFsIExpc3Q8RGFydFR5cGU+IG5hbWVkUGFyYW1ldGVyVHlwZXM7CgogIGZpbmFsIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHR5cGVWYXJpYWJsZXM7CgogIEZ1bmN0aW9uVHlwZSgKICAgICAgdGhpcy5yZXR1cm5UeXBlLAogICAgICB0aGlzLnBhcmFtZXRlclR5cGVzLAogICAgICB0aGlzLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsCiAgICAgIHRoaXMubmFtZWRQYXJhbWV0ZXJzLAogICAgICB0aGlzLm5hbWVkUGFyYW1ldGVyVHlwZXMsCiAgICAgIHRoaXMudHlwZVZhcmlhYmxlcykgewogICAgYXNzZXJ0KHJldHVyblR5cGUgIT0gbnVsbCwgIkludmFsaWQgcmV0dXJuIHR5cGUgaW4gJHRoaXMuIik7CiAgICBhc3NlcnQoIXBhcmFtZXRlclR5cGVzLmNvbnRhaW5zKG51bGwpLCAiSW52YWxpZCBwYXJhbWV0ZXIgdHlwZXMgaW4gJHRoaXMuIik7CiAgICBhc3NlcnQoIW9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuY29udGFpbnMobnVsbCksCiAgICAgICAgIkludmFsaWQgb3B0aW9uYWwgcGFyYW1ldGVyIHR5cGVzIGluICR0aGlzLiIpOwogICAgYXNzZXJ0KAogICAgICAgICFuYW1lZFBhcmFtZXRlcnMuY29udGFpbnMobnVsbCksICJJbnZhbGlkIG5hbWVkIHBhcmFtZXRlcnMgaW4gJHRoaXMuIik7CiAgICBhc3NlcnQoIW5hbWVkUGFyYW1ldGVyVHlwZXMuY29udGFpbnMobnVsbCksCiAgICAgICAgIkludmFsaWQgbmFtZWQgcGFyYW1ldGVyIHR5cGVzIGluICR0aGlzLiIpOwogICAgYXNzZXJ0KCF0eXBlVmFyaWFibGVzLmNvbnRhaW5zKG51bGwpLCAiSW52YWxpZCB0eXBlIHZhcmlhYmxlcyBpbiAkdGhpcy4iKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvbnRhaW5zVHlwZVZhcmlhYmxlcyB7CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlcy5hbnkoKHR5cGUpID0+IHR5cGUuYm91bmQuY29udGFpbnNUeXBlVmFyaWFibGVzKSB8fAogICAgICAgIHJldHVyblR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzIHx8CiAgICAgICAgcGFyYW1ldGVyVHlwZXMuYW55KCh0eXBlKSA9PiB0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcykgfHwKICAgICAgICBvcHRpb25hbFBhcmFtZXRlclR5cGVzLmFueSgodHlwZSkgPT4gdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHx8CiAgICAgICAgbmFtZWRQYXJhbWV0ZXJUeXBlcy5hbnkoKHR5cGUpID0+IHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFR5cGVWYXJpYWJsZShmKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpKSB7CiAgICB0eXBlVmFyaWFibGVzLmZvckVhY2goKHR5cGUpID0+IHR5cGUuYm91bmQuZm9yRWFjaFR5cGVWYXJpYWJsZShmKSk7CiAgICByZXR1cm5UeXBlLmZvckVhY2hUeXBlVmFyaWFibGUoZik7CiAgICBwYXJhbWV0ZXJUeXBlcy5mb3JFYWNoKCh0eXBlKSA9PiB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoZikpOwogICAgb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5mb3JFYWNoKCh0eXBlKSA9PiB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoZikpOwogICAgbmFtZWRQYXJhbWV0ZXJUeXBlcy5mb3JFYWNoKCh0eXBlKSA9PiB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoZikpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcyhMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgewogICAgaW50IHJlc3RvcmU7CiAgICBpZiAodHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChiaW5kaW5ncyA9PSBudWxsKSB7CiAgICAgICAgYmluZGluZ3MgPSA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W107CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdG9yZSA9IGJpbmRpbmdzLmxlbmd0aDsKICAgICAgfQogICAgICBiaW5kaW5ncy5hZGRBbGwodHlwZVZhcmlhYmxlcyk7CiAgICB9CgogICAgYm9vbCBoYXNGcmVlKERhcnRUeXBlIHR5cGUpID0+IHR5cGUuX2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMoYmluZGluZ3MpOwoKICAgIGJvb2wgcmVzdWx0ID0gaGFzRnJlZShyZXR1cm5UeXBlKSB8fAogICAgICAgIHR5cGVWYXJpYWJsZXMuYW55KCh0eXBlKSA9PiBoYXNGcmVlKHR5cGUuYm91bmQpKSB8fAogICAgICAgIHBhcmFtZXRlclR5cGVzLmFueShoYXNGcmVlKSB8fAogICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuYW55KGhhc0ZyZWUpIHx8CiAgICAgICAgbmFtZWRQYXJhbWV0ZXJUeXBlcy5hbnkoaGFzRnJlZSk7CgogICAgaWYgKHJlc3RvcmUgIT0gbnVsbCkgYmluZGluZ3MubGVuZ3RoID0gcmVzdG9yZTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Z1bmN0aW9uVHlwZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdChMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlcnMpIHsKICAgIGlmIChwYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgYXNzZXJ0KGFyZ3VtZW50cy5pc0VtcHR5KTsKICAgICAgLy8gUmV0dXJuIGZhc3Qgb24gZW1wdHkgc3Vic3RpdHV0aW9ucy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBEYXJ0VHlwZSBuZXdSZXR1cm5UeXBlID0gcmV0dXJuVHlwZS5zdWJzdChhcmd1bWVudHMsIHBhcmFtZXRlcnMpOwogICAgYm9vbCBjaGFuZ2VkID0gIWlkZW50aWNhbChuZXdSZXR1cm5UeXBlLCByZXR1cm5UeXBlKTsKICAgIExpc3Q8RGFydFR5cGU+IG5ld1BhcmFtZXRlclR5cGVzID0KICAgICAgICBfc3Vic3RUeXBlcyhwYXJhbWV0ZXJUeXBlcywgYXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKICAgIExpc3Q8RGFydFR5cGU+IG5ld09wdGlvbmFsUGFyYW1ldGVyVHlwZXMgPQogICAgICAgIF9zdWJzdFR5cGVzKG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIGFyZ3VtZW50cywgcGFyYW1ldGVycyk7CiAgICBMaXN0PERhcnRUeXBlPiBuZXdOYW1lZFBhcmFtZXRlclR5cGVzID0KICAgICAgICBfc3Vic3RUeXBlcyhuYW1lZFBhcmFtZXRlclR5cGVzLCBhcmd1bWVudHMsIHBhcmFtZXRlcnMpOwogICAgaWYgKCFjaGFuZ2VkICYmCiAgICAgICAgKCFpZGVudGljYWwocGFyYW1ldGVyVHlwZXMsIG5ld1BhcmFtZXRlclR5cGVzKSB8fAogICAgICAgICAgICAhaWRlbnRpY2FsKG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIG5ld09wdGlvbmFsUGFyYW1ldGVyVHlwZXMpIHx8CiAgICAgICAgICAgICFpZGVudGljYWwobmFtZWRQYXJhbWV0ZXJUeXBlcywgbmV3TmFtZWRQYXJhbWV0ZXJUeXBlcykpKSB7CiAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgfQogICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gbmV3VHlwZVZhcmlhYmxlczsKICAgIGlmICh0eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgaWYgKHBhcmFtZXRlcnMgPT0gdHlwZVZhcmlhYmxlcykgewogICAgICAgIG5ld1R5cGVWYXJpYWJsZXMgPSBjb25zdCA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W107CiAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlVmFyaWFibGVzKSB7CiAgICAgICAgICBEYXJ0VHlwZSBuZXdCb3VuZCA9IHR5cGVWYXJpYWJsZS5ib3VuZC5zdWJzdChhcmd1bWVudHMsIHBhcmFtZXRlcnMpOwogICAgICAgICAgaWYgKCFpZGVudGljYWwodHlwZVZhcmlhYmxlLmJvdW5kLCBuZXdCb3VuZCkpIHsKICAgICAgICAgICAgbmV3VHlwZVZhcmlhYmxlcyA/Pz0gdHlwZVZhcmlhYmxlcy5zdWJsaXN0KDAsIGluZGV4KTsKICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuZXdUeXBlVmFyaWFibGVzPy5hZGQodHlwZVZhcmlhYmxlKTsKICAgICAgICAgIH0KICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICAgIG5ld1R5cGVWYXJpYWJsZXMgPz89IHR5cGVWYXJpYWJsZXM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG5ld1R5cGVWYXJpYWJsZXMgPSB0eXBlVmFyaWFibGVzOwogICAgfQogICAgaWYgKGNoYW5nZWQpIHsKICAgICAgLy8gQ3JlYXRlIGEgbmV3IHR5cGUgb25seSBpZiBuZWNlc3NhcnkuCiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKAogICAgICAgICAgbmV3UmV0dXJuVHlwZSwKICAgICAgICAgIG5ld1BhcmFtZXRlclR5cGVzLAogICAgICAgICAgbmV3T3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywKICAgICAgICAgIG5hbWVkUGFyYW1ldGVycywKICAgICAgICAgIG5ld05hbWVkUGFyYW1ldGVyVHlwZXMsCiAgICAgICAgICBuZXdUeXBlVmFyaWFibGVzKTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KCiAgRnVuY3Rpb25UeXBlIGluc3RhbnRpYXRlKExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cykgewogICAgcmV0dXJuIHN1YnN0KGFyZ3VtZW50cywgdHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdEZ1bmN0aW9uVHlwZSh0aGlzLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgaW50IGhhc2ggPSAzICogcmV0dXJuVHlwZS5oYXNoQ29kZTsKICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIHBhcmFtZXRlclR5cGVzKSB7CiAgICAgIGhhc2ggPSAxNyAqIGhhc2ggKyA1ICogcGFyYW1ldGVyLmhhc2hDb2RlOwogICAgfQogICAgZm9yIChEYXJ0VHlwZSBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcykgewogICAgICBoYXNoID0gMTkgKiBoYXNoICsgNyAqIHBhcmFtZXRlci5oYXNoQ29kZTsKICAgIH0KICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gbmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIGhhc2ggPSAyMyAqIGhhc2ggKyAxMSAqIG5hbWUuaGFzaENvZGU7CiAgICB9CiAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiBuYW1lZFBhcmFtZXRlclR5cGVzKSB7CiAgICAgIGhhc2ggPSAyOSAqIGhhc2ggKyAxMyAqIHBhcmFtZXRlci5oYXNoQ29kZTsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBGdW5jdGlvblR5cGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfZXF1YWxzSW50ZXJuYWwob3RoZXIsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKERhcnRUeXBlIG90aGVyLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgRnVuY3Rpb25UeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBhc3N1bXB0aW9ucyk7CiAgfQoKICBib29sIF9lcXVhbHNJbnRlcm5hbChGdW5jdGlvblR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKHR5cGVWYXJpYWJsZXMubGVuZ3RoICE9IG90aGVyLnR5cGVWYXJpYWJsZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIGFzc3VtcHRpb25zID8/PSBuZXcgX0Fzc3VtcHRpb25zKCk7CiAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlVmFyaWFibGVzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgIGFzc3VtcHRpb25zLmFzc3VtZSh0eXBlVmFyaWFibGVzW2luZGV4XSwgb3RoZXIudHlwZVZhcmlhYmxlc1tpbmRleF0pOwogICAgICB9CiAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlVmFyaWFibGVzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgIGlmICghdHlwZVZhcmlhYmxlc1tpbmRleF0KICAgICAgICAgICAgLmJvdW5kCiAgICAgICAgICAgIC5fZXF1YWxzKG90aGVyLnR5cGVWYXJpYWJsZXNbaW5kZXhdLmJvdW5kLCBhc3N1bXB0aW9ucykpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGJvb2wgcmVzdWx0ID0gcmV0dXJuVHlwZS5fZXF1YWxzKG90aGVyLnJldHVyblR5cGUsIGFzc3VtcHRpb25zKSAmJgogICAgICAgIF9lcXVhbFR5cGVzKHBhcmFtZXRlclR5cGVzLCBvdGhlci5wYXJhbWV0ZXJUeXBlcywgYXNzdW1wdGlvbnMpICYmCiAgICAgICAgX2VxdWFsVHlwZXMob3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgb3RoZXIub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywKICAgICAgICAgICAgYXNzdW1wdGlvbnMpICYmCiAgICAgICAgZXF1YWxFbGVtZW50cyhuYW1lZFBhcmFtZXRlcnMsIG90aGVyLm5hbWVkUGFyYW1ldGVycykgJiYKICAgICAgICBfZXF1YWxUeXBlcygKICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJUeXBlcywgb3RoZXIubmFtZWRQYXJhbWV0ZXJUeXBlcywgYXNzdW1wdGlvbnMpOwogICAgaWYgKHR5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICBhc3N1bXB0aW9ucy5mb3JnZXQodHlwZVZhcmlhYmxlc1tpbmRleF0sIG90aGVyLnR5cGVWYXJpYWJsZXNbaW5kZXhdKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKHJldHVyblR5cGUpOwogICAgc2Iud3JpdGUoJyBGdW5jdGlvbicpOwogICAgaWYgKHR5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZSgnPCcpOwogICAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZSh0eXBlVmFyaWFibGUpOwogICAgICAgIERhcnRUeXBlIGJvdW5kID0gdHlwZVZhcmlhYmxlLmJvdW5kOwogICAgICAgIGlmICghYm91bmQuaXNPYmplY3QpIHsKICAgICAgICAgIHNiLndyaXRlKCcgZXh0ZW5kcyAnKTsKICAgICAgICAgIHNiLndyaXRlKHR5cGVWYXJpYWJsZS5ib3VuZCk7CiAgICAgICAgfQogICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgICB9CiAgICAgIHNiLndyaXRlKCc+Jyk7CiAgICB9CiAgICBzYi53cml0ZSgnKCcpOwogICAgYm9vbCBuZWVkc0NvbW1hID0gZmFsc2U7CiAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlclR5cGUgaW4gcGFyYW1ldGVyVHlwZXMpIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICB9CiAgICAgIHNiLndyaXRlKHBhcmFtZXRlclR5cGUpOwogICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgIH0KICAgIGlmIChvcHRpb25hbFBhcmFtZXRlclR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICB9CiAgICAgIHNiLndyaXRlKCdbJyk7CiAgICAgIGJvb2wgbmVlZHNPcHRpb25hbENvbW1hID0gZmFsc2U7CiAgICAgIGZvciAoRGFydFR5cGUgdHlwZUFyZ3VtZW50IGluIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMpIHsKICAgICAgICBpZiAobmVlZHNPcHRpb25hbENvbW1hKSB7CiAgICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZSh0eXBlQXJndW1lbnQpOwogICAgICAgIG5lZWRzT3B0aW9uYWxDb21tYSA9IHRydWU7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJ10nKTsKICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICB9CiAgICBpZiAobmFtZWRQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICB9CiAgICAgIHNiLndyaXRlKCd7Jyk7CiAgICAgIGJvb2wgbmVlZHNOYW1lZENvbW1hID0gZmFsc2U7CiAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgaWYgKG5lZWRzTmFtZWRDb21tYSkgewogICAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUobmFtZWRQYXJhbWV0ZXJUeXBlc1tpbmRleF0pOwogICAgICAgIHNiLndyaXRlKCcgJyk7CiAgICAgICAgc2Iud3JpdGUobmFtZWRQYXJhbWV0ZXJzW2luZGV4XSk7CiAgICAgICAgbmVlZHNOYW1lZENvbW1hID0gdHJ1ZTsKICAgICAgfQogICAgICBzYi53cml0ZSgnfScpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgRnV0dXJlT3JUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKCiAgRnV0dXJlT3JUeXBlKHRoaXMudHlwZUFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdXR1cmVPciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdChMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlcnMpIHsKICAgIERhcnRUeXBlIG5ld1R5cGVBcmd1bWVudCA9IHR5cGVBcmd1bWVudC5zdWJzdChhcmd1bWVudHMsIHBhcmFtZXRlcnMpOwogICAgaWYgKGlkZW50aWNhbCh0eXBlQXJndW1lbnQsIG5ld1R5cGVBcmd1bWVudCkpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIG5ldyBGdXR1cmVPclR5cGUobmV3VHlwZUFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvbnRhaW5zVHlwZVZhcmlhYmxlcyA9PiB0eXBlQXJndW1lbnQuY29udGFpbnNUeXBlVmFyaWFibGVzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hUeXBlVmFyaWFibGUoZihUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSkgewogICAgdHlwZUFyZ3VtZW50LmZvckVhY2hUeXBlVmFyaWFibGUoZik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGJpbmRpbmdzKSA9PgogICAgICB0eXBlQXJndW1lbnQuX2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMoYmluZGluZ3MpOwoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdEZ1dHVyZU9yVHlwZSh0aGlzLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdHlwZUFyZ3VtZW50Lmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgRnV0dXJlT3JUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEZ1dHVyZU9yVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHNJbnRlcm5hbChvdGhlciwgYXNzdW1wdGlvbnMpOwogIH0KCiAgYm9vbCBfZXF1YWxzSW50ZXJuYWwoRnV0dXJlT3JUeXBlIG90aGVyLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpIHsKICAgIHJldHVybiB0eXBlQXJndW1lbnQuX2VxdWFscyhvdGhlci50eXBlQXJndW1lbnQsIGFzc3VtcHRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdGdXR1cmVPcicpOwogICAgc2Iud3JpdGUoJzwnKTsKICAgIHNiLndyaXRlKHR5cGVBcmd1bWVudCk7CiAgICBzYi53cml0ZSgnPicpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gSGVscGVyIG1ldGhvZCBmb3IgcGVyZm9ybWluZyBzdWJzdGl0dXRpb24gb2YgYSBsaXN0IG9mIHR5cGVzLgovLy8KLy8vIElmIG5vIHR5cGVzIGFyZSBjaGFuZ2VkIGJ5IHRoZSBzdWJzdGl0dXRpb24sIHRoZSBbdHlwZXNdIGlzIHJldHVybmVkCi8vLyBpbnN0ZWFkIG9mIGEgbmV3bHkgY3JlYXRlZCBsaXN0LgpMaXN0PERhcnRUeXBlPiBfc3Vic3RUeXBlcygKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzLCBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlcnMpIHsKICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZ2VuZXJhdGUodHlwZXMubGVuZ3RoLCAoaW50IGluZGV4KSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZXNbaW5kZXhdOwogICAgRGFydFR5cGUgYXJndW1lbnQgPSB0eXBlLnN1YnN0KGFyZ3VtZW50cywgcGFyYW1ldGVycyk7CiAgICBpZiAoIWNoYW5nZWQgJiYgIWlkZW50aWNhbChhcmd1bWVudCwgdHlwZSkpIHsKICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gYXJndW1lbnQ7CiAgfSk7CiAgLy8gVXNlIHRoZSBuZXcgTGlzdCBvbmx5IGlmIG5lY2Vzc2FyeS4KICByZXR1cm4gY2hhbmdlZCA/IHJlc3VsdCA6IHR5cGVzOwp9Cgpib29sIF9lcXVhbFR5cGVzKExpc3Q8RGFydFR5cGU+IGEsIExpc3Q8RGFydFR5cGU+IGIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhLmxlbmd0aDsgaW5kZXgrKykgewogICAgaWYgKCFhW2luZGV4XS5fZXF1YWxzKGJbaW5kZXhdLCBhc3N1bXB0aW9ucykpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQoKYWJzdHJhY3QgY2xhc3MgRGFydFR5cGVWaXNpdG9yPFIsIEE+IHsKICBjb25zdCBEYXJ0VHlwZVZpc2l0b3IoKTsKCiAgUiB2aXNpdChjb3ZhcmlhbnQgRGFydFR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4gdHlwZS5hY2NlcHQodGhpcywgYXJndW1lbnQpOwoKICBSIHZpc2l0Vm9pZFR5cGUoY292YXJpYW50IFZvaWRUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IG51bGw7CgogIFIgdmlzaXRUeXBlVmFyaWFibGVUeXBlKGNvdmFyaWFudCBUeXBlVmFyaWFibGVUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IG51bGw7CgogIFIgdmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZSgKICAgICAgICAgIGNvdmFyaWFudCBGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlLCBBIGFyZ3VtZW50KSA9PgogICAgICBudWxsOwoKICBSIHZpc2l0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBGdW5jdGlvblR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4gbnVsbDsKCiAgUiB2aXNpdEludGVyZmFjZVR5cGUoY292YXJpYW50IEludGVyZmFjZVR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4gbnVsbDsKCiAgUiB2aXNpdFR5cGVkZWZUeXBlKGNvdmFyaWFudCBUeXBlZGVmVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PiBudWxsOwoKICBSIHZpc2l0RHluYW1pY1R5cGUoY292YXJpYW50IER5bmFtaWNUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IG51bGw7CgogIFIgdmlzaXRGdXR1cmVPclR5cGUoY292YXJpYW50IEZ1dHVyZU9yVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PiBudWxsOwp9CgphYnN0cmFjdCBjbGFzcyBCYXNlRGFydFR5cGVWaXNpdG9yPFIsIEE+IGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPFIsIEE+IHsKICBjb25zdCBCYXNlRGFydFR5cGVWaXNpdG9yKCk7CgogIFIgdmlzaXRUeXBlKGNvdmFyaWFudCBEYXJ0VHlwZSB0eXBlLCBBIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFZvaWRUeXBlKGNvdmFyaWFudCBWb2lkVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdFR5cGUodHlwZSwgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShjb3ZhcmlhbnQgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdFR5cGUodHlwZSwgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoCiAgICAgICAgICBjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRUeXBlKHR5cGUsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRJbnRlcmZhY2VUeXBlKGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIFIgdmlzaXREeW5hbWljVHlwZShjb3ZhcmlhbnQgRHluYW1pY1R5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRUeXBlKHR5cGUsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdEZ1dHVyZU9yVHlwZShjb3ZhcmlhbnQgRnV0dXJlT3JUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBhcmd1bWVudCk7Cn0KCi8vLyBBYnN0cmFjdCB2aXNpdG9yIGZvciBkZXRlcm1pbmluZyByZWxhdGlvbnMgYmV0d2VlbiB0eXBlcy4KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUeXBlUmVsYXRpb248VCBleHRlbmRzIERhcnRUeXBlPgogICAgZXh0ZW5kcyBCYXNlRGFydFR5cGVWaXNpdG9yPGJvb2wsIFQ+IHsKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CgogIGZpbmFsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucyA9IG5ldyBfQXNzdW1wdGlvbnMoKTsKCiAgLy8vIEVuc3VyZXMgdGhhdCB0aGUgc3VwZXIgaGllcmFyY2h5IG9mIFt0eXBlXSBpcyBjb21wdXRlZC4KICB2b2lkIGVuc3VyZVJlc29sdmVkKEludGVyZmFjZVR5cGUgdHlwZSkge30KCiAgLy8vIFJldHVybnMgdGhlIHVuYWxpYXNlZCB2ZXJzaW9uIG9mIFt0eXBlXS4KICBUIGdldFVuYWxpYXNlZChUIHR5cGUpID0+IHR5cGUudW5hbGlhc2VkOwoKICAvLy8gUmV0dXJucyBbdHlwZV0gYXMgYW4gaW5zdGFuY2Ugb2YgW2Nsc10sIG9yIGBudWxsYCBpZiBbdHlwZV0gaXMgbm90IHN1YnR5cGUKICAvLy8gaWYgW2Nsc10uCiAgSW50ZXJmYWNlVHlwZSBhc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYGNhbGxgIG1ldGhvZCBvbiBbdHlwZV0sIG9yIGBudWxsYCBpZiB0aGUgY2xhc3MKICAvLy8gb2YgW3R5cGVdIGRvZXMgbm90IGhhdmUgYSBgY2FsbGAgbWV0aG9kLgogIEZ1bmN0aW9uVHlwZSBnZXRDYWxsVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyB0aGUgZGVjbGFyZWQgYm91bmQgb2YgW2VsZW1lbnRdLgogIERhcnRUeXBlIGdldFR5cGVWYXJpYWJsZUJvdW5kKFR5cGVWYXJpYWJsZUVudGl0eSBlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFR5cGUoVCB0LCBUIHMpIHsKICAgIHRocm93ICdpbnRlcm5hbCBlcnJvcjogdW5rbm93biB0eXBlICR7dH0nOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIHQsIFQgcykgewogICAgYXNzZXJ0KHMgaXMhIFZvaWRUeXBlKTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgaW52YWxpZFR5cGVBcmd1bWVudHMoVCB0LCBUIHMpOwoKICBib29sIGludmFsaWRGdW5jdGlvblJldHVyblR5cGVzKFQgdCwgVCBzKTsKCiAgYm9vbCBpbnZhbGlkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyhUIHQsIFQgcyk7CgogIGJvb2wgaW52YWxpZFR5cGVWYXJpYWJsZUJvdW5kcyhUIGJvdW5kLCBUIHMpOwoKICBib29sIGludmFsaWRDYWxsYWJsZVR5cGUoY292YXJpYW50IERhcnRUeXBlIGNhbGxUeXBlLCBjb3ZhcmlhbnQgRGFydFR5cGUgcyk7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdCwgY292YXJpYW50IERhcnRUeXBlIHMpIHsKICAgIGVuc3VyZVJlc29sdmVkKHQpOwoKICAgIGJvb2wgY2hlY2tUeXBlQXJndW1lbnRzKEludGVyZmFjZVR5cGUgaW5zdGFuY2UsIEludGVyZmFjZVR5cGUgb3RoZXIpIHsKICAgICAgTGlzdDxUPiB0VHlwZUFyZ3MgPSBpbnN0YW5jZS50eXBlQXJndW1lbnRzOwogICAgICBMaXN0PFQ+IHNUeXBlQXJncyA9IG90aGVyLnR5cGVBcmd1bWVudHM7CiAgICAgIGFzc2VydCh0VHlwZUFyZ3MubGVuZ3RoID09IHNUeXBlQXJncy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRUeXBlQXJncy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpbnZhbGlkVHlwZUFyZ3VtZW50cyh0VHlwZUFyZ3NbaV0sIHNUeXBlQXJnc1tpXSkpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgaWYgKHMgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBJbnRlcmZhY2VUeXBlIGluc3RhbmNlID0gYXNJbnN0YW5jZU9mKHQsIHMuZWxlbWVudCk7CiAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsICYmIGNoZWNrVHlwZUFyZ3VtZW50cyhpbnN0YW5jZSwgcykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIEZ1bmN0aW9uVHlwZSBjYWxsVHlwZSA9IGdldENhbGxUeXBlKHQpOwogICAgaWYgKHMgPT0gY29tbW9uRWxlbWVudHMuZnVuY3Rpb25UeXBlICYmIGNhbGxUeXBlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKHMgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIHJldHVybiBjYWxsVHlwZSAhPSBudWxsICYmICFpbnZhbGlkQ2FsbGFibGVUeXBlKGNhbGxUeXBlLCBzKTsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0LCBEYXJ0VHlwZSBzKSB7CiAgICBpZiAocyA9PSBjb21tb25FbGVtZW50cy5mdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAocyBpcyEgRnVuY3Rpb25UeXBlKSByZXR1cm4gZmFsc2U7CiAgICBGdW5jdGlvblR5cGUgdGYgPSB0OwogICAgRnVuY3Rpb25UeXBlIHNmID0gczsKICAgIGludCB0eXBlVmFyaWFibGVzQ291bnQgPSBnZXRDb21tb25UeXBlVmFyaWFibGVzQ291bnQodGYsIHNmKTsKICAgIGlmICh0eXBlVmFyaWFibGVzQ291bnQgPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXNDb3VudDsgaSsrKSB7CiAgICAgIGFzc3VtcHRpb25zLmFzc3VtZSh0Zi50eXBlVmFyaWFibGVzW2ldLCBzZi50eXBlVmFyaWFibGVzW2ldKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVZhcmlhYmxlc0NvdW50OyBpKyspIHsKICAgICAgaWYgKCF0Zi50eXBlVmFyaWFibGVzW2ldLmJvdW5kCiAgICAgICAgICAuX2VxdWFscyhzZi50eXBlVmFyaWFibGVzW2ldLmJvdW5kLCBhc3N1bXB0aW9ucykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChpbnZhbGlkRnVuY3Rpb25SZXR1cm5UeXBlcyh0Zi5yZXR1cm5UeXBlLCBzZi5yZXR1cm5UeXBlKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCByZXN1bHQgPSB2aXNpdEZ1bmN0aW9uVHlwZUludGVybmFsKHRmLCBzZik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXNDb3VudDsgaSsrKSB7CiAgICAgIGFzc3VtcHRpb25zLmZvcmdldCh0Zi50eXBlVmFyaWFibGVzW2ldLCBzZi50eXBlVmFyaWFibGVzW2ldKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgZ2V0Q29tbW9uVHlwZVZhcmlhYmxlc0NvdW50KEZ1bmN0aW9uVHlwZSB0LCBGdW5jdGlvblR5cGUgcykgewogICAgaWYgKHQudHlwZVZhcmlhYmxlcy5sZW5ndGggPT0gcy50eXBlVmFyaWFibGVzLmxlbmd0aCkgewogICAgICByZXR1cm4gdC50eXBlVmFyaWFibGVzLmxlbmd0aDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZUludGVybmFsKEZ1bmN0aW9uVHlwZSB0ZiwgRnVuY3Rpb25UeXBlIHNmKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXdyaXRlIHRoZSBmdW5jdGlvbiBzdWJ0eXBpbmcgdG8gYmUgbW9yZSByZWFkYWJsZQogICAgLy8gYnV0IHN0aWxsIGFzIGVmZmljaWVudC4KCiAgICAvLyBGb3IgdGhlIGNvbW1lbnRzIHdlIHVzZSB0aGUgZm9sbG93aW5nIGFiYnJldmlhdGlvbnM6CiAgICAvLyAgeC5wICAgICA6IHBhcmFtZXRlclR5cGVzIG9uIFs6eDpdLAogICAgLy8gIHgubyAgICAgOiBvcHRpb25hbFBhcmFtZXRlclR5cGVzIG9uIFs6eDpdLCBhbmQKICAgIC8vICBsZW4oeHMpIDogbGVuZ3RoIG9mIGxpc3QgWzp4czpdLgoKICAgIEl0ZXJhdG9yPFQ+IHRwcyA9IHRmLnBhcmFtZXRlclR5cGVzLml0ZXJhdG9yOwogICAgSXRlcmF0b3I8VD4gc3BzID0gc2YucGFyYW1ldGVyVHlwZXMuaXRlcmF0b3I7CiAgICBib29sIHNOb3RFbXB0eSA9IHNwcy5tb3ZlTmV4dCgpOwogICAgYm9vbCB0Tm90RW1wdHkgPSB0cHMubW92ZU5leHQoKTsKICAgIHROZXh0KCkgPT4gKHROb3RFbXB0eSA9IHRwcy5tb3ZlTmV4dCgpKTsKICAgIHNOZXh0KCkgPT4gKHNOb3RFbXB0eSA9IHNwcy5tb3ZlTmV4dCgpKTsKCiAgICBib29sIGluY29tcGF0aWJsZVBhcmFtZXRlcnMoKSB7CiAgICAgIHdoaWxlICh0Tm90RW1wdHkgJiYgc05vdEVtcHR5KSB7CiAgICAgICAgaWYgKGludmFsaWRGdW5jdGlvblBhcmFtZXRlclR5cGVzKHRwcy5jdXJyZW50LCBzcHMuY3VycmVudCkpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICB0TmV4dCgpOwogICAgICAgIHNOZXh0KCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChpbmNvbXBhdGlibGVQYXJhbWV0ZXJzKCkpIHJldHVybiBmYWxzZTsKICAgIGlmICh0Tm90RW1wdHkpIHsKICAgICAgLy8gV2UgbXVzdCBoYXZlIFs6IGxlbih0LnApIDw9IGxlbihzLnApIDpdLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoIXNmLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIC8vIFdlIG11c3QgaGF2ZSBbOiBsZW4odC5wKSA9PSBsZW4ocy5wKSA6XS4KICAgICAgaWYgKHNOb3RFbXB0eSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICAvLyBTaW5jZSBuYW1lZCBwYXJhbWV0ZXJzIGFyZSBnbG9iYWxseSBvcmRlcmVkIHdlIGNhbiBkZXRlcm1pbmUgdGhlCiAgICAgIC8vIHN1YnNldCByZWxhdGlvbiB3aXRoIGEgbGluZWFyIHNlYXJjaCBmb3IgWzpzZi5uYW1lZFBhcmFtZXRlcnM6XQogICAgICAvLyB3aXRoaW4gWzp0Zi5uYW1lZFBhcmFtZXRlcnM6XS4KICAgICAgTGlzdDxTdHJpbmc+IHROYW1lcyA9IHRmLm5hbWVkUGFyYW1ldGVyczsKICAgICAgTGlzdDxUPiB0VHlwZXMgPSB0Zi5uYW1lZFBhcmFtZXRlclR5cGVzOwogICAgICBMaXN0PFN0cmluZz4gc05hbWVzID0gc2YubmFtZWRQYXJhbWV0ZXJzOwogICAgICBMaXN0PFQ+IHNUeXBlcyA9IHNmLm5hbWVkUGFyYW1ldGVyVHlwZXM7CiAgICAgIGludCB0SW5kZXggPSAwOwogICAgICBpbnQgc0luZGV4ID0gMDsKICAgICAgd2hpbGUgKHRJbmRleCA8IHROYW1lcy5sZW5ndGggJiYgc0luZGV4IDwgc05hbWVzLmxlbmd0aCkgewogICAgICAgIGlmICh0TmFtZXNbdEluZGV4XSA9PSBzTmFtZXNbc0luZGV4XSkgewogICAgICAgICAgaWYgKGludmFsaWRGdW5jdGlvblBhcmFtZXRlclR5cGVzKHRUeXBlc1t0SW5kZXhdLCBzVHlwZXNbc0luZGV4XSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgc0luZGV4Kys7CiAgICAgICAgfQogICAgICAgIHRJbmRleCsrOwogICAgICB9CiAgICAgIGlmIChzSW5kZXggPCBzTmFtZXMubGVuZ3RoKSB7CiAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQgYWxsIG5hbWVzLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gQ2hlY2sgdGhlIHJlbWFpbmluZyBbOiBzLnAgOl0gYWdhaW5zdCBbOiB0Lm8gOl0uCiAgICAgIHRwcyA9IHRmLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuaXRlcmF0b3I7CiAgICAgIHROZXh0KCk7CiAgICAgIGlmIChpbmNvbXBhdGlibGVQYXJhbWV0ZXJzKCkpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHNOb3RFbXB0eSkgewogICAgICAgIC8vIFdlIG11c3QgaGF2ZSBbOiBsZW4odC5wKSArIGxlbih0Lm8pID49IGxlbihzLnApIDpdLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoIXNmLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuaXNFbXB0eSkgewogICAgICAgIC8vIENoZWNrIHRoZSByZW1haW5pbmcgWzogcy5vIDpdIGFnYWluc3QgdGhlIHJlbWFpbmluZyBbOiB0Lm8gOl0uCiAgICAgICAgc3BzID0gc2Yub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5pdGVyYXRvcjsKICAgICAgICBzTmV4dCgpOwogICAgICAgIGlmIChpbmNvbXBhdGlibGVQYXJhbWV0ZXJzKCkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoc05vdEVtcHR5KSB7CiAgICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCBlbm91Z2ggcGFyYW1ldGVyczoKICAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSBbOiBsZW4odC5wKSArIGxlbih0Lm8pIDw9IGxlbihzLnApICsgbGVuKHMubykgOl0uCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChzTm90RW1wdHkpIHsKICAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSBbOiBsZW4odC5wKSArIGxlbih0Lm8pID49IGxlbihzLnApIDpdLgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShUeXBlVmFyaWFibGVUeXBlIHQsIFQgcykgewogICAgLy8gSWRlbnRpdHkgY2hlY2sgaXMgaGFuZGxlZCBpbiBbaXNTdWJ0eXBlXS4KICAgIERhcnRUeXBlIGJvdW5kID0gZ2V0VHlwZVZhcmlhYmxlQm91bmQodC5lbGVtZW50KTsKICAgIGlmIChib3VuZC5pc1R5cGVWYXJpYWJsZSkgewogICAgICAvLyBUaGUgYm91bmQgaXMgcG90ZW50aWFsbHkgY3ljbGljIHNvIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bC4KICAgICAgU2V0PFR5cGVWYXJpYWJsZUVudGl0eT4gc2VlblR5cGVWYXJpYWJsZXMgPSBuZXcgU2V0PFR5cGVWYXJpYWJsZUVudGl0eT4oKTsKICAgICAgc2VlblR5cGVWYXJpYWJsZXMuYWRkKHQuZWxlbWVudCk7CiAgICAgIHdoaWxlIChib3VuZC5pc1R5cGVWYXJpYWJsZSkgewogICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlID0gYm91bmQ7CiAgICAgICAgaWYgKGJvdW5kID09IHMpIHsKICAgICAgICAgIC8vIFt0XSBleHRlbmRzIFtzXS4KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoc2VlblR5cGVWYXJpYWJsZXMuY29udGFpbnModHlwZVZhcmlhYmxlLmVsZW1lbnQpKSB7CiAgICAgICAgICAvLyBXZSBoYXZlIGEgY3ljbGUgYW5kIGhhdmUgYWxyZWFkeSBjaGVja2VkIGFsbCBib3VuZHMgaW4gdGhlIGN5Y2xlCiAgICAgICAgICAvLyBhZ2FpbnN0IFtzXSBhbmQgY2FuIHRoZXJlZm9yZSBjb25jbHVkZSB0aGF0IFt0XSBpcyBub3QgYSBzdWJ0eXBlCiAgICAgICAgICAvLyBvZiBbc10uCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHNlZW5UeXBlVmFyaWFibGVzLmFkZCh0eXBlVmFyaWFibGUuZWxlbWVudCk7CiAgICAgICAgYm91bmQgPSBnZXRUeXBlVmFyaWFibGVCb3VuZCh0eXBlVmFyaWFibGUuZWxlbWVudCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChpbnZhbGlkVHlwZVZhcmlhYmxlQm91bmRzKGJvdW5kLCBzKSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoRnVuY3Rpb25UeXBlVmFyaWFibGUgdCwgRGFydFR5cGUgcykgewogICAgaWYgKCFzLmlzRnVuY3Rpb25UeXBlVmFyaWFibGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBhc3N1bXB0aW9ucy5pc0Fzc3VtZWQodCwgcyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBNb3JlU3BlY2lmaWNWaXNpdG9yPFQgZXh0ZW5kcyBEYXJ0VHlwZT4KICAgIGV4dGVuZHMgQWJzdHJhY3RUeXBlUmVsYXRpb248VD4gewogIGJvb2wgaXNNb3JlU3BlY2lmaWMoVCB0LCBUIHMpIHsKICAgIGlmIChpZGVudGljYWwodCwgcykgfHwKICAgICAgICBzLnRyZWF0QXNEeW5hbWljIHx8CiAgICAgICAgcy5pc1ZvaWQgfHwKICAgICAgICBzID09IGNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUgfHwKICAgICAgICB0ID09IGNvbW1vbkVsZW1lbnRzLm51bGxUeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHQudHJlYXRBc0R5bmFtaWMpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHQgPSBnZXRVbmFsaWFzZWQodCk7CiAgICBzID0gZ2V0VW5hbGlhc2VkKHMpOwoKICAgIHJldHVybiB0LmFjY2VwdCh0aGlzLCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZFR5cGVBcmd1bWVudHMoVCB0LCBUIHMpIHsKICAgIHJldHVybiAhaXNNb3JlU3BlY2lmaWModCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRGdW5jdGlvblJldHVyblR5cGVzKFQgdCwgVCBzKSB7CiAgICBpZiAocy50cmVhdEFzRHluYW1pYyAmJiB0LmlzVm9pZCkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gIXMuaXNWb2lkICYmICFpc01vcmVTcGVjaWZpYyh0LCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZXMoVCB0LCBUIHMpIHsKICAgIHJldHVybiAhaXNNb3JlU3BlY2lmaWModCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRUeXBlVmFyaWFibGVCb3VuZHMoVCBib3VuZCwgVCBzKSB7CiAgICByZXR1cm4gIWlzTW9yZVNwZWNpZmljKGJvdW5kLCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZENhbGxhYmxlVHlwZShjb3ZhcmlhbnQgRGFydFR5cGUgY2FsbFR5cGUsIGNvdmFyaWFudCBEYXJ0VHlwZSBzKSB7CiAgICByZXR1cm4gIWlzTW9yZVNwZWNpZmljKGNhbGxUeXBlLCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdXR1cmVPclR5cGUoRnV0dXJlT3JUeXBlIHQsIGNvdmFyaWFudCBEYXJ0VHlwZSBzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gVHlwZSB2aXNpdG9yIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc3VidHlwZSByZWxhdGlvbiB0d28gdHlwZXMuCmFic3RyYWN0IGNsYXNzIFN1YnR5cGVWaXNpdG9yPFQgZXh0ZW5kcyBEYXJ0VHlwZT4KICAgIGV4dGVuZHMgTW9yZVNwZWNpZmljVmlzaXRvcjxUPiB7CiAgYm9vbCBpc1N1YnR5cGUoRGFydFR5cGUgdCwgRGFydFR5cGUgcykgewogICAgaWYgKHMuaXNGdXR1cmVPcikgewogICAgICBGdXR1cmVPclR5cGUgc0Z1dHVyZU9yID0gczsKICAgICAgaWYgKGlzU3VidHlwZSh0LCBzRnV0dXJlT3IudHlwZUFyZ3VtZW50KSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGVsc2UgaWYgKHQuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSB0SW50ZXJmYWNlID0gdDsKICAgICAgICBpZiAodEludGVyZmFjZS5lbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmZ1dHVyZUNsYXNzICYmCiAgICAgICAgICAgIGlzU3VidHlwZSgKICAgICAgICAgICAgICAgIHRJbnRlcmZhY2UudHlwZUFyZ3VtZW50cy5zaW5nbGUsIHNGdXR1cmVPci50eXBlQXJndW1lbnQpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpc01vcmVTcGVjaWZpYyh0LCBzKTsKICB9CgogIGJvb2wgaXNBc3NpZ25hYmxlKFQgdCwgVCBzKSB7CiAgICByZXR1cm4gaXNTdWJ0eXBlKHQsIHMpIHx8IGlzU3VidHlwZShzLCB0KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZFR5cGVBcmd1bWVudHMoVCB0LCBUIHMpIHsKICAgIHJldHVybiAhaXNTdWJ0eXBlKHQsIHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnZhbGlkRnVuY3Rpb25SZXR1cm5UeXBlcyhUIHQsIFQgcykgewogICAgcmV0dXJuICFpc1N1YnR5cGUodCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRGdW5jdGlvblBhcmFtZXRlclR5cGVzKFQgdCwgVCBzKSB7CiAgICByZXR1cm4gIWlzU3VidHlwZShzLCB0KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZFR5cGVWYXJpYWJsZUJvdW5kcyhUIGJvdW5kLCBUIHMpIHsKICAgIHJldHVybiAhaXNTdWJ0eXBlKGJvdW5kLCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZENhbGxhYmxlVHlwZShjb3ZhcmlhbnQgRGFydFR5cGUgY2FsbFR5cGUsIGNvdmFyaWFudCBEYXJ0VHlwZSBzKSB7CiAgICByZXR1cm4gIWlzU3VidHlwZShjYWxsVHlwZSwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnV0dXJlT3JUeXBlKEZ1dHVyZU9yVHlwZSB0LCBjb3ZhcmlhbnQgRGFydFR5cGUgcykgewogICAgaWYgKHMuaXNGdXR1cmVPcikgewogICAgICBGdXR1cmVPclR5cGUgc0Z1dHVyZU9yID0gczsKICAgICAgcmV0dXJuIGlzU3VidHlwZSh0LnR5cGVBcmd1bWVudCwgc0Z1dHVyZU9yLnR5cGVBcmd1bWVudCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gVHlwZSB2aXNpdG9yIHRoYXQgZGV0ZXJtaW5lcyBvbmUgdHlwZSBjb3VsZCBhIHN1YnR5cGUgb2YgYW5vdGhlciBnaXZlbiB0aGUKLy8vIHJpZ2h0IHR5cGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLiBUaGUgY29tcHV0YXRpb24gaXMgYXBwcm94aW1hdGUgYW5kIHJldHVybnMKLy8vIGBmYWxzZWAgb25seSBpZiB3ZSBhcmUgc3VyZSBubyBzdWNoIHN1YnN0aXR1dGlvbiBleGlzdHMuCmFic3RyYWN0IGNsYXNzIFBvdGVudGlhbFN1YnR5cGVWaXNpdG9yPFQgZXh0ZW5kcyBEYXJ0VHlwZT4KICAgIGV4dGVuZHMgU3VidHlwZVZpc2l0b3I8VD4gewogIGJvb2wgX2Fzc3VtZUluc3RhbnRpYXRpb25zID0gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YnR5cGUoRGFydFR5cGUgdCwgRGFydFR5cGUgcykgewogICAgaWYgKHQgaXMgVHlwZVZhcmlhYmxlVHlwZSB8fCBzIGlzIFR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoKHQgaXMgRnVuY3Rpb25UeXBlVmFyaWFibGUgfHwgcyBpcyBGdW5jdGlvblR5cGVWYXJpYWJsZSkgJiYKICAgICAgICBfYXNzdW1lSW5zdGFudGlhdGlvbnMpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuaXNTdWJ0eXBlKHQsIHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldENvbW1vblR5cGVWYXJpYWJsZXNDb3VudChGdW5jdGlvblR5cGUgdCwgRnVuY3Rpb25UeXBlIHMpIHsKICAgIGlmICh0LnR5cGVWYXJpYWJsZXMubGVuZ3RoID09IHMudHlwZVZhcmlhYmxlcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIHQudHlwZVZhcmlhYmxlcy5sZW5ndGg7CiAgICB9CiAgICBpZiAoX2Fzc3VtZUluc3RhbnRpYXRpb25zICYmIHMudHlwZVZhcmlhYmxlcy5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgYm9vbCBpc1BvdGVudGlhbFN1YnR5cGUoRGFydFR5cGUgdCwgRGFydFR5cGUgcywKICAgICAge2Jvb2wgYXNzdW1lSW5zdGFudGlhdGlvbnM6IHRydWV9KSB7CiAgICBfYXNzdW1lSW5zdGFudGlhdGlvbnMgPSBhc3N1bWVJbnN0YW50aWF0aW9uczsKICAgIHJldHVybiBpc1N1YnR5cGUodCwgcyk7CiAgfQp9CgovLy8gQmFzaWMgaW50ZXJmYWNlIGZvciB0aGUgRGFydCB0eXBlIHN5c3RlbS4KYWJzdHJhY3QgY2xhc3MgRGFydFR5cGVzIHsKICAvLy8gVGhlIHR5cGVzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3RdIGlzIGEgc3VidHlwZSBvZiBbc10uCiAgYm9vbCBpc1N1YnR5cGUoRGFydFR5cGUgdCwgRGFydFR5cGUgcyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdF0gaXMgYXNzaWduYWJsZSB0byBbc10uCiAgYm9vbCBpc0Fzc2lnbmFibGUoRGFydFR5cGUgdCwgRGFydFR5cGUgcyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdF0gbWlnaHQgYmUgYSBzdWJ0eXBlIG9mIFtzXSBmb3Igc29tZSB2YWx1ZXMgb2YKICAvLy8gdHlwZSB2YXJpYWJsZXMgaW4gW3NdIGFuZCBbdF0uCiAgLy8vCiAgLy8vIElmIFthc3N1bWVJbnN0YW50aWF0aW9uc10sIGdlbmVyaWMgZnVuY3Rpb24gdHlwZXMgYXJlIGFzc3VtZWQgdG8gYmUKICAvLy8gcG90ZW50aWFsbHkgaW5zdGFudGlhdGVkLgogIGJvb2wgaXNQb3RlbnRpYWxTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMsCiAgICAgIHtib29sIGFzc3VtZUluc3RhbnRpYXRpb25zOiB0cnVlfSk7CgogIHN0YXRpYyBjb25zdCBpbnQgSVNfU1VCVFlQRSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBNQVlCRV9TVUJUWVBFID0gMDsKICBzdGF0aWMgY29uc3QgaW50IE5PVF9TVUJUWVBFID0gLTE7CgogIC8vLyBSZXR1cm5zIFtJU19TVUJUWVBFXSwgW01BWUJFX1NVQlRZUEVdLCBvciBbTk9UX1NVQlRZUEVdIGlmIFt0XSBpcyBhCiAgLy8vIChwb3RlbnRpYWwpIHN1YnR5cGUgb2YgW3NdCiAgaW50IGNvbXB1dGVTdWJ0eXBlUmVsYXRpb24oRGFydFR5cGUgdCwgRGFydFR5cGUgcykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ29tcHV0ZSB0aGlzIGRpcmVjdGx5IGluIFtpc1BvdGVudGlhbFN1YnR5cGVdLgogICAgaWYgKGlzU3VidHlwZSh0LCBzKSkgcmV0dXJuIElTX1NVQlRZUEU7CiAgICByZXR1cm4gaXNQb3RlbnRpYWxTdWJ0eXBlKHQsIHMpID8gTUFZQkVfU1VCVFlQRSA6IE5PVF9TVUJUWVBFOwogIH0KCiAgLy8vIFJldHVybnMgW3R5cGVdIGFzIGFuIGluc3RhbmNlIG9mIFtjbHNdIG9yIGBudWxsYCBpZiBbdHlwZV0gaXMgbm90IGEKICAvLy8gc3VidHlwZSBvZiBbY2xzXS4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGU6IGBhc0luc3RhbmNlT2YoTGlzdDxTdHJpbmc+LCBJdGVyYWJsZSkgPSBJdGVyYWJsZTxTdHJpbmc+YC4KICBJbnRlcmZhY2VUeXBlIGFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm4gW2Jhc2VdIHdoZXJlIHRoZSB0eXBlIHZhcmlhYmxlIG9mIGBjb250ZXh0LmVsZW1lbnRgIGFyZSByZXBsYWNlZAogIC8vLyBieSB0aGUgdHlwZSBhcmd1bWVudHMgb2YgW2NvbnRleHRdLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UKICAvLy8KICAvLy8gICAgIHN1YnN0QnlDb250ZXh0KEl0ZXJhYmxlPExpc3QuRT4sIExpc3Q8U3RyaW5nPikgPSBJdGVyYWJsZTxTdHJpbmc+CiAgLy8vCiAgRGFydFR5cGUgc3Vic3RCeUNvbnRleHQoRGFydFR5cGUgYmFzZSwgSW50ZXJmYWNlVHlwZSBjb250ZXh0KTsKCiAgLy8vIFJldHVybnMgdGhlICd0aGlzIHR5cGUnIG9mIFtjbHNdLiBUaGF0IGlzLCB0aGUgaW5zdGFudGlhdGlvbiBvZiBbY2xzXQogIC8vLyB3aGVyZSB0aGUgdHlwZSBhcmd1bWVudHMgYXJlIHRoZSB0eXBlIHZhcmlhYmxlcyBvZiBbY2xzXS4KICBJbnRlcmZhY2VUeXBlIGdldFRoaXNUeXBlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBzdXBlcnR5cGUgb2YgW2Nsc10sIGkuZS4gdGhlIHR5cGUgaW4gdGhlIGBleHRlbmRzYCBjbGF1c2Ugb2YKICAvLy8gW2Nsc10uCiAgSW50ZXJmYWNlVHlwZSBnZXRTdXBlcnR5cGUoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYWxsIHN1cGVydHlwZXMgb2YgW2Nsc10uCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGQgaW5jbHVkZSBgRnVuY3Rpb25gIGlmIFtjbHNdIGRlY2xhcmVzCiAgLy8gYSBgY2FsbGAgbWV0aG9kLgogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldFN1cGVydHlwZXMoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYWxsIHR5cGVzIGRpcmVjdGx5IGltcGxlbWVudGVkIGJ5IFtjbHNdLgogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldEludGVyZmFjZXMoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGBjYWxsYCBtZXRob2Qgb24gW3R5cGVdLCBvciBgbnVsbGAgaWYgdGhlIGNsYXNzCiAgLy8vIG9mIFt0eXBlXSBkb2VzIG5vdCBoYXZlIGEgYGNhbGxgIG1ldGhvZC4KICBGdW5jdGlvblR5cGUgZ2V0Q2FsbFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKTsKCiAgLy8vIENoZWNrcyB0aGUgdHlwZSBhcmd1bWVudHMgb2YgW3R5cGVdIGFnYWluc3QgdGhlIHR5cGUgdmFyaWFibGUgYm91bmRzCiAgLy8vIGRlY2xhcmVkIG9uIGB0eXBlLmVsZW1lbnRgLiBDYWxscyBbY2hlY2tUeXBlVmFyaWFibGVCb3VuZF0gb24gZWFjaCB0eXBlCiAgLy8vIGFyZ3VtZW50IGFuZCBib3VuZC4KICB2b2lkIGNoZWNrVHlwZVZhcmlhYmxlQm91bmRzPFQ+KAogICAgICBUIGNvbnRleHQsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVWYXJpYWJsZXMsCiAgICAgIHZvaWQgY2hlY2tUeXBlVmFyaWFibGVCb3VuZChUIGNvbnRleHQsIERhcnRUeXBlIHR5cGVBcmd1bWVudCwKICAgICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlLCBEYXJ0VHlwZSBib3VuZCkpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NsYXNzRW50aXR5XSB3aGljaCBkZWNsYXJlcyB0aGUgdHlwZSB2YXJpYWJsZXMgb2NjdXJyaW5nIGluCiAgLy8gW3R5cGVdLCBvciBgbnVsbGAgaWYgW3R5cGVdIGRvZXMgbm90IGNvbnRhaW4gY2xhc3MgdHlwZSB2YXJpYWJsZXMuCiAgc3RhdGljIENsYXNzRW50aXR5IGdldENsYXNzQ29udGV4dChEYXJ0VHlwZSB0eXBlKSB7CiAgICBDbGFzc0VudGl0eSBjb250ZXh0Q2xhc3M7CiAgICB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKSB7CiAgICAgIGlmICh0eXBlVmFyaWFibGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb24gaXMhIENsYXNzRW50aXR5KSByZXR1cm47CiAgICAgIGNvbnRleHRDbGFzcyA9IHR5cGVWYXJpYWJsZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKICAgIH0pOwogICAgLy8gR0VORVJJQ19NRVRIT0RTOiBXaGVuIGdlbmVyaWMgbWV0aG9kIHN1cHBvcnQgaXMgY29tcGxldGUgZW5vdWdo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AR4EAQwoIgQBDC4zLwQBDDEiBAEMMSYEAQxQKQQBDEESBAIBQTIlKxgiMhUmJkAXTBcKCAYhBAEgLwQBDCgdBAEMLh0EAQwxHQQBDDEhBAEMUCQEAQxBGCJABhIEAgFPUT07ICUBDCs6EwZEIRMGIgQBDEQ8JQZAEAYRBAEyKzIcBAIBLhsoJQExKgEyLQFJJQZKIDIqASMmJQFKITdLLEMEAUoYBk5DAU4qBhMGTAZBAUxALgFPDS8BJ0sWOgE3OgFOLzABS04aIxEkJEQ7AU9INh4/SDsISk9KTU5QTCgZBAIBKHBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL3R5cGVzLmRhcnQoc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanMvanMuZGFydJleLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganM7CgppbXBvcnQgJ3BhY2thZ2U6anNfYXN0L2pzX2FzdC5kYXJ0JzsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vZHVtcF9pbmZvLmRhcnQnIHNob3cgRHVtcEluZm9UYXNrOwppbXBvcnQgJy4uL2lvL2NvZGVfb3V0cHV0LmRhcnQnIHNob3cgQ29kZUJ1ZmZlcjsKaW1wb3J0ICdqc19zb3VyY2VfbWFwcGluZy5kYXJ0JzsKCmV4cG9ydCAncGFja2FnZTpqc19hc3QvanNfYXN0LmRhcnQnOwpleHBvcnQgJ2pzX2RlYnVnLmRhcnQnOwoKU3RyaW5nIHByZXR0eVByaW50KE5vZGUgbm9kZSwKICAgIHtib29sIGVuYWJsZU1pbmlmaWNhdGlvbjogZmFsc2UsCiAgICBib29sIGFsbG93VmFyaWFibGVNaW5pZmljYXRpb246IHRydWUsCiAgICBSZW5hbWVyIHJlbmFtZXJGb3JOYW1lczogSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucy5pZGVudGl0eVJlbmFtZXJ9KSB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRG8gd2UgbmVlZCBhbGwgdGhlIG9wdGlvbnMgaGVyZT8KICBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zIG9wdGlvbnMgPSBuZXcgSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucygKICAgICAgc2hvdWxkQ29tcHJlc3NPdXRwdXQ6IGVuYWJsZU1pbmlmaWNhdGlvbiwKICAgICAgbWluaWZ5TG9jYWxWYXJpYWJsZXM6IGFsbG93VmFyaWFibGVNaW5pZmljYXRpb24sCiAgICAgIHJlbmFtZXJGb3JOYW1lczogcmVuYW1lckZvck5hbWVzKTsKICBTaW1wbGVKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IGNvbnRleHQgPQogICAgICBuZXcgU2ltcGxlSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCgpOwogIFByaW50ZXIgcHJpbnRlciA9IG5ldyBQcmludGVyKG9wdGlvbnMsIGNvbnRleHQpOwogIHByaW50ZXIudmlzaXQobm9kZSk7CiAgcmV0dXJuIGNvbnRleHQuZ2V0VGV4dCgpOwp9CgpDb2RlQnVmZmVyIGNyZWF0ZUNvZGVCdWZmZXIoTm9kZSBub2RlLCBDb21waWxlck9wdGlvbnMgY29tcGlsZXJPcHRpb25zLAogICAgSmF2YVNjcmlwdFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgIHtEdW1wSW5mb1Rhc2sgbW9uaXRvciwKICAgIGJvb2wgYWxsb3dWYXJpYWJsZU1pbmlmaWNhdGlvbjogdHJ1ZSwKICAgIFJlbmFtZXIgcmVuYW1lckZvck5hbWVzOiBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zLmlkZW50aXR5UmVuYW1lcn0pIHsKICBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zIG9wdGlvbnMgPSBuZXcgSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucygKICAgICAgc2hvdWxkQ29tcHJlc3NPdXRwdXQ6IGNvbXBpbGVyT3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24sCiAgICAgIG1pbmlmeUxvY2FsVmFyaWFibGVzOiBhbGxvd1ZhcmlhYmxlTWluaWZpY2F0aW9uLAogICAgICByZW5hbWVyRm9yTmFtZXM6IHJlbmFtZXJGb3JOYW1lcyk7CiAgQ29kZUJ1ZmZlciBvdXRCdWZmZXIgPSBuZXcgQ29kZUJ1ZmZlcigpOwogIFNvdXJjZUluZm9ybWF0aW9uUHJvY2Vzc29yIHNvdXJjZUluZm9ybWF0aW9uUHJvY2Vzc29yID0KICAgICAgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5jcmVhdGVQcm9jZXNzb3IoCiAgICAgICAgICBuZXcgU291cmNlTWFwcGVyUHJvdmlkZXJJbXBsKG91dEJ1ZmZlciksCiAgICAgICAgICBjb25zdCBTb3VyY2VJbmZvcm1hdGlvblJlYWRlcigpKTsKICBEYXJ0MkpTSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0ID0KICAgICAgbmV3IERhcnQySlNKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0KAogICAgICAgICAgbW9uaXRvciwgb3V0QnVmZmVyLCBzb3VyY2VJbmZvcm1hdGlvblByb2Nlc3Nvcik7CiAgUHJpbnRlciBwcmludGVyID0gbmV3IFByaW50ZXIob3B0aW9ucywgY29udGV4dCk7CiAgcHJpbnRlci52aXNpdChub2RlKTsKICBzb3VyY2VJbmZvcm1hdGlvblByb2Nlc3Nvci5wcm9jZXNzKG5vZGUsIG91dEJ1ZmZlcik7CiAgcmV0dXJuIG91dEJ1ZmZlcjsKfQoKY2xhc3MgRGFydDJKU0phdmFTY3JpcHRQcmludGluZ0NvbnRleHQgaW1wbGVtZW50cyBKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IHsKICBmaW5hbCBEdW1wSW5mb1Rhc2sgbW9uaXRvcjsKICBmaW5hbCBDb2RlQnVmZmVyIG91dEJ1ZmZlcjsKICBmaW5hbCBDb2RlUG9zaXRpb25MaXN0ZW5lciBjb2RlUG9zaXRpb25MaXN0ZW5lcjsKCiAgRGFydDJKU0phdmFTY3JpcHRQcmludGluZ0NvbnRleHQoCiAgICAgIHRoaXMubW9uaXRvciwgdGhpcy5vdXRCdWZmZXIsIHRoaXMuY29kZVBvc2l0aW9uTGlzdGVuZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGVycm9yKFN0cmluZyBtZXNzYWdlKSB7CiAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsIG1lc3NhZ2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbWl0KFN0cmluZyBzdHJpbmcpIHsKICAgIG1vbml0b3I/LmVtaXQoc3RyaW5nKTsKICAgIG91dEJ1ZmZlci5hZGQoc3RyaW5nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJOb2RlKE5vZGUgbm9kZSwgaW50IHN0YXJ0UG9zaXRpb24pIHsKICAgIG1vbml0b3I/LmVudGVyTm9kZShub2RlLCBzdGFydFBvc2l0aW9uKTsKICAgIGNvZGVQb3NpdGlvbkxpc3RlbmVyLm9uU3RhcnRQb3NpdGlvbihub2RlLCBzdGFydFBvc2l0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZXhpdE5vZGUoCiAgICAgIE5vZGUgbm9kZSwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwgaW50IGNsb3NpbmdQb3NpdGlvbikgewogICAgbW9uaXRvcj8uZXhpdE5vZGUobm9kZSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNsb3NpbmdQb3NpdGlvbik7CiAgICBjb2RlUG9zaXRpb25MaXN0ZW5lci5vblBvc2l0aW9ucygKICAgICAgICBub2RlLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY2xvc2luZ1Bvc2l0aW9uKTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGFzdCBub2RlcyB0aGF0IGVuY2Fwc3VsYXRlIGFuIGFzdCB0aGF0IG5lZWRzIHRvIGJlCi8vLyB0cmF2ZXJzZWQgd2hlbiBjb3VudGluZyB0b2tlbnMuCmFic3RyYWN0IGNsYXNzIEFzdENvbnRhaW5lciBpbXBsZW1lbnRzIE5vZGUgewogIEl0ZXJhYmxlPE5vZGU+IGdldCBjb250YWluZWROb2RlczsKfQoKLy8vIEludGVyZmFjZSBmb3IgdGFza3MgaW4gdGhlIGNvbXBpbGVyIHRoYXQgbmVlZCB0byBmaW5hbGl6ZSB0b2tlbnMgYWZ0ZXIKLy8vIGNvdW50aW5nIHRoZW0uCmFic3RyYWN0IGNsYXNzIFRva2VuRmluYWxpemVyIHsKICB2b2lkIGZpbmFsaXplVG9rZW5zKCk7Cn0KCi8vLyBJbXBsZW1lbnRzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgaW5zdGFuY2VzIG9mIFtSZWZlcmVuY2VDb3VudGVkQXN0Tm9kZV0KY2xhc3MgVG9rZW5Db3VudGVyIGV4dGVuZHMgQmFzZVZpc2l0b3IgewogIEBvdmVycmlkZQogIHZpc2l0Tm9kZShOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIEFzdENvbnRhaW5lcikgewogICAgICBmb3IgKE5vZGUgZWxlbWVudCBpbiBub2RlLmNvbnRhaW5lZE5vZGVzKSB7CiAgICAgICAgZWxlbWVudC5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobm9kZSBpcyBSZWZlcmVuY2VDb3VudGVkQXN0Tm9kZSkgewogICAgICBub2RlLm1hcmtTZWVuKHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIudmlzaXROb2RlKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCBjb3VudFRva2VucyhOb2RlIG5vZGUpID0+IG5vZGUuYWNjZXB0KHRoaXMpOwp9CgphYnN0cmFjdCBjbGFzcyBSZWZlcmVuY2VDb3VudGVkQXN0Tm9kZSBpbXBsZW1lbnRzIE5vZGUgewogIHZvaWQgbWFya1NlZW4oVG9rZW5Db3VudGVyIHZpc2l0b3IpOwp9CgovLy8gUmVwcmVzZW50cyB0aGUgTGl0ZXJhbFN0cmluZyByZXN1bHRpbmcgZnJvbSB1bnBhcnNpbmcgW2V4cHJlc3Npb25dLiBUaGUKLy8vIGFjdHVhbCB1bnBhcnNpbmcgaXMgZG9uZSBvbiBkZW1hbmQgd2hlbiByZXF1ZXN0aW5nIHRoZSBbdmFsdWVdIG9mIHRoaXMKLy8vIG5vZGUuCi8vLwovLy8gVGhpcyBpcyB1c2VkIHdoZW4gZ2VuZXJhdGVkIGNvZGUgbmVlZHMgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcsCi8vLyBmb3IgZXhhbXBsZSBieSB0aGUgbGF6eSBlbWl0dGVyIG9yIHdoZW4gZ2VuZXJhdGluZyBjb2RlIGdlbmVyYXRvcnMuCmNsYXNzIFVucGFyc2VkTm9kZSBleHRlbmRzIERlZmVycmVkU3RyaW5nIGltcGxlbWVudHMgQXN0Q29udGFpbmVyIHsKICBmaW5hbCBOb2RlIHRyZWU7CiAgZmluYWwgYm9vbCBfZW5hYmxlTWluaWZpY2F0aW9uOwogIGZpbmFsIGJvb2wgX3Byb3RlY3RGb3JFdmFsOwogIExpdGVyYWxTdHJpbmcgX2NhY2hlZExpdGVyYWw7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE5vZGU+IGdldCBjb250YWluZWROb2RlcyA9PiBbdHJlZV07CgogIC8vLyBBIFtqcy5MaXRlcmFsXSB0aGF0IHJlcHJlc2VudHMgdGhlIHN0cmluZyByZXN1bHQgb2YgdW5wYXJzaW5nIFthc3RdLgogIC8vLwogIC8vLyBXaGVuIGl0cyBzdHJpbmcgW3ZhbHVlXSBpcyByZXF1ZXN0ZWQsIHRoZSBub2RlIHByZXR0eS1wcmludHMgdGhlIGdpdmVuCiAgLy8vIFthc3RdIGFuZCwgaWYgW3Byb3RlY3RGb3JFdmFsXSBpcyB0cnVlLCB3cmFwcyB0aGUgcmVzdWx0aW5nIHN0cmluZyBpbgogIC8vLyBwYXJlbnRoZXNpcy4gVGhlIHJlc3VsdCBpcyBhbHNvIGVzY2FwZWQuCiAgVW5wYXJzZWROb2RlKHRoaXMudHJlZSwgdGhpcy5fZW5hYmxlTWluaWZpY2F0aW9uLCB0aGlzLl9wcm90ZWN0Rm9yRXZhbCk7CgogIExpdGVyYWxTdHJpbmcgZ2V0IF9saXRlcmFsIHsKICAgIGlmIChfY2FjaGVkTGl0ZXJhbCA9PSBudWxsKSB7CiAgICAgIFN0cmluZyB0ZXh0ID0gcHJldHR5UHJpbnQodHJlZSwgZW5hYmxlTWluaWZpY2F0aW9uOiBfZW5hYmxlTWluaWZpY2F0aW9uKTsKICAgICAgaWYgKF9wcm90ZWN0Rm9yRXZhbCkgewogICAgICAgIGlmICh0cmVlIGlzIEZ1bikgdGV4dCA9ICcoJHRleHQpJzsKICAgICAgICBpZiAodHJlZSBpcyBMaXRlcmFsRXhwcmVzc2lvbikgewogICAgICAgICAgTGl0ZXJhbEV4cHJlc3Npb24gbGl0ZXJhbEV4cHJlc3Npb24gPSB0cmVlOwogICAgICAgICAgU3RyaW5nIHRlbXBsYXRlID0gbGl0ZXJhbEV4cHJlc3Npb24udGVtcGxhdGU7CiAgICAgICAgICBpZiAodGVtcGxhdGUuc3RhcnRzV2l0aCgiZnVuY3Rpb24gIikgfHwgdGVtcGxhdGUuc3RhcnRzV2l0aCgieyIpKSB7CiAgICAgICAgICAgIHRleHQgPSAnKCR0ZXh0KSc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIF9jYWNoZWRMaXRlcmFsID0ganMuZXNjYXBlZFN0cmluZyh0ZXh0KTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkTGl0ZXJhbDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgdmFsdWUgPT4gX2xpdGVyYWwudmFsdWU7Cn0KCi8vLyBUcnVlIGlmIHRoZSBnaXZlbiB0ZW1wbGF0ZSBjb25zaXN0cyBvZiBqdXN0IGEgcGxhY2Vob2xkZXIuIFN1Y2ggdGVtcGxhdGVzCi8vLyBhcmUgc29tZXRpbWVzIHVzZWQgdG8gbWFudWFsbHkgcHJvbW90ZSB0aGUgdHlwZSBvZiBhbiBleHByZXNzaW9uLgpib29sIGlzSWRlbnRpdHlUZW1wbGF0ZShUZW1wbGF0ZSB0ZW1wbGF0ZSkgewogIHJldHVybiB0ZW1wbGF0ZS5hc3QgaXMgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbjsKfQoKLy8vIFJldHVybnMgYHRydWVgIGlmIFt0ZW1wbGF0ZV0gd2lsbCBpbW1lZGlhdGVseSBnaXZlIGEgVHlwZUVycm9yIGlmIHRoZSBmaXJzdAovLy8gcGxhY2Vob2xkZXIgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLgpib29sIGlzTnVsbEd1YXJkT25GaXJzdEFyZ3VtZW50KFRlbXBsYXRlIHRlbXBsYXRlKSB7CiAgLy8gV2UgbG9vayBmb3IgYSB0ZW1wbGF0ZSBvZiB0aGUgZm9ybQogIC8vCiAgLy8gICAgICMuc29tZXRoaW5nCiAgLy8gICAgICMuc29tZXRoaW5nKCkKICAvLwogIE5vZGUgbm9kZSA9IHRlbXBsYXRlLmFzdDsKICBpZiAobm9kZSBpcyBDYWxsKSB7CiAgICBDYWxsIGNhbGwgPSBub2RlOwogICAgbm9kZSA9IGNhbGwudGFyZ2V0OwogIH0KICBpZiAobm9kZSBpcyBQcm9wZXJ0eUFjY2VzcykgewogICAgUHJvcGVydHlBY2Nlc3MgYWNjZXNzID0gbm9kZTsKICAgIGlmIChhY2Nlc3MucmVjZWl2ZXIgaXMgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbikgewogICAgICBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIGhvbGUgPSBhY2Nlc3MucmVjZWl2ZXI7CiAgICAgIHJldHVybiBob2xlLmlzUG9zaXRpb25hbCAmJiBob2xlLm5hbWVPclBvc2l0aW9uID09IDA7CiAgICB9CiAgfQogIHJldHVybiBmYWxzZTsKfQqAxgBOTjwBDAElARkaLjEhASUYAR4lKks7RTA3KSwtMxccAgFIQxsqS0VANykrOjEzLC0sOzMXNxQCAU4eHjMBJEABDB8uBAEMHRsbBAEMMS0/BAEMEUxKJjwEAgFFJC4lAgFLEyAZAgFNKQwZIDIeCDIbDR0GBAE0AgE5JwIBTEsKBEpIRBMiHiABDC8BSwZNTC9LAR8iUB0rKTY4Th4MCggvBhsEAQwmAgFORi0xAgFQKjUoBRUXBRwWFhgEICI1NTwGBBACAR9wYWNrYWdlOmNvbXBpbGVyL3NyYy9qcy9qcy5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvbmFtZXIuZGFydMABiXovLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19iYWNrZW5kLm5hbWVyOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgSGFzaE1hcDsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnCiAgICBzaG93ICQwLCAkOSwgJEEsICRaLCAkXywgJGEsICRnLCAkcywgJHo7CgppbXBvcnQgJ3BhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvZW1iZWRkZWRfbmFtZXMuZGFydCcgc2hvdyBKc0dldE5hbWU7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzLCBOYW1lcywgU2VsZWN0b3JzOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50cywgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2RpYWdub3N0aWNzL2ludmFyaWFudC5kYXJ0JyBzaG93IERFQlVHX01PREU7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXR5X3V0aWxzLmRhcnQnIGFzIHV0aWxzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2p1bXBzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnIHNob3cgUnVudGltZVR5cGVUYWdzOwppbXBvcnQgJy4uL2pzX21vZGVsL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCcgc2hvdyBKR2VuZXJhdG9yQm9keTsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvciwgU2VsZWN0b3JLaW5kOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICduYXRpdmVfZGF0YS5kYXJ0JzsKCnBhcnQgJ2ZpZWxkX25hbWluZ19taXhpbi5kYXJ0JzsKcGFydCAnZnJlcXVlbmN5X25hbWVyLmRhcnQnOwpwYXJ0ICdtaW5pZnlfbmFtZXIuZGFydCc7CnBhcnQgJ25hbWVyX25hbWVzLmRhcnQnOwoKLy8vIEFzc2lnbnMgSmF2YVNjcmlwdCBpZGVudGlmaWVycyB0byBEYXJ0IHZhcmlhYmxlcywgY2xhc3MtbmFtZXMgYW5kIG1lbWJlcnMuCi8vLwovLy8gTmFtZXMgYXJlIGdlbmVyYXRlZCB0aHJvdWdoIHRocmVlIHN0YWdlczoKLy8vCi8vLyAxLiBPcmlnaW5hbCBuYW1lcyBhbmQgcHJvcG9zZWQgbmFtZXMKLy8vIDIuIERpc2FtYmlndWF0ZWQgbmFtZXMgKGFsc28ga25vd24gYXMgIm1hbmdsZWQgbmFtZXMiKQovLy8gMy4gQW5ub3RhdGVkIG5hbWVzCi8vLwovLy8gT3JpZ2luYWwgbmFtZXMgYXJlIG5hbWVzIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIGlucHV0LgovLy8KLy8vIFByb3Bvc2VkIG5hbWVzIGFyZSBlaXRoZXIgb3JpZ2luYWwgbmFtZXMgb3Igc3ludGhlc2l6ZWQgbmFtZXMgZm9yIGlucHV0Ci8vLyBlbGVtZW50cyB0aGF0IGRvIG5vdCBoYXZlIG9yaWdpbmFsIG5hbWVzLgovLy8KLy8vIERpc2FtYmlndWF0ZWQgbmFtZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgYWJvdmUsIGJ1dCBhcmUgbWFuZ2xlZCB0byBlbnN1cmUKLy8vIHVuaXF1ZW5lc3Mgd2l0aGluIHNvbWUgbmFtZXNwYWNlIChlLmcuIGFzIGZpZWxkcyBvbiB0aGUgc2FtZSBKUyBvYmplY3QpLgovLy8gSW4gW01pbmlmeU5hbWVyXSwgZGlzYW1iaWd1YXRlZCBuYW1lcyBhcmUgYWxzbyBtaW5pZmllZC4KLy8vCi8vLyBBbm5vdGF0ZWQgbmFtZXMgYXJlIG5hbWVzIGdlbmVyYXRlZCBmcm9tIGEgZGlzYW1iaWd1YXRlZCBuYW1lLiBBbm5vdGF0ZWQKLy8vIG5hbWVzIG11c3QgYmUgY29tcHV0YWJsZSBhdCBydW50aW1lIGJ5IHByZWZpeGluZy9zdWZmaXhpbmcgY29uc3RhbnQgc3RyaW5ncwovLy8gb250byB0aGUgZGlzYW1iaWd1YXRlZCBuYW1lLgovLy8KLy8vIEZvciBleGFtcGxlLCBzb21lIGVudGl0eSBjYWxsZWQgYHhgIG1pZ2h0IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBuYW1lczoKLy8vCi8vLyAgICAgT3JpZ2luYWwgbmFtZTogYHhgCi8vLwovLy8gICAgIERpc2FtYmlndWF0ZWQgbmFtZTogYHgxYCAoaWYgc29tZXRoaW5nIGVsc2Ugd2FzIGNhbGxlZCBgeGApCi8vLwovLy8gICAgIEFubm90YXRlZCBuYW1lczogYHgxYCAgICAgKGZpZWxkIG5hbWUpCi8vLyAgICAgICAgICAgICAgICAgICAgICBgZ2V0JHgxYCAoZ2V0dGVyIG5hbWUpCi8vLyAgICAgICAgICAgICAgICAgICAgICBgc2V0JHgxYCAoc2V0dGVyIG5hbWUpCi8vLwovLy8gVGhlIFtOYW1lcl0gY2FuIGNob29zZSB0aGUgZGlzYW1iaWd1YXRlZCBuYW1lcywgYW5kIHRvIHNvbWUgZGVncmVlIHRoZQovLy8gcHJlZml4L3N1ZmZpeCBjb25zdGFudHMgdXNlZCB0byBjb25zdHJ1Y3QgYW5ub3RhdGVkIG5hbWVzLiBJdCBjYW5ub3QgY2hvb3NlCi8vLyBhbm5vdGF0ZWQgbmFtZXMgd2l0aCB0b3RhbCBmcmVlZG9tLCBmb3IgZXhhbXBsZSwgaXQgY2Fubm90IGNob29zZSB0aGF0IHRoZQovLy8gZ2V0dGVyIGZvciBgeDFgIHNob3VsZCBiZSBjYWxsZWQgYGdldFhgIC0tIHRoZSBhbm5vdGF0ZWQgbmFtZXMgYXJlIGFsd2F5cwovLy8gYnVpbHQgYnkgY29uY2F0ZW5hdGlvbi4KLy8vCi8vLyBEaXNhbWJpZ3VhdGVkIG5hbWVzIG11c3QgYmUgY2hvc2VuIHN1Y2ggdGhhdCBub25lIG9mIHRoZSBhbm5vdGF0ZWQgbmFtZXMgY2FuCi8vLyBjbGFzaCB3aXRoIGVhY2ggb3RoZXIuIFRoaXMgbWF5IGhhcHBlbiBldmVuIGlmIHRoZSBkaXNhbWJpZ3VhdGVkIG5hbWVzIGFyZQovLy8gZGlzdGluY3QsIGZvciBleGFtcGxlLCBzdXBwb3NlIGEgZmllbGQgYHhgIGFuZCBgZ2V0JHhgIGV4aXN0cyBpbiB0aGUgaW5wdXQ6Ci8vLwovLy8gICAgIE9yaWdpbmFsIG5hbWVzOiBgeGAgYW5kIGBnZXQkeGAKLy8vCi8vLyAgICAgRGlzYW1iaWd1YXRlZCBuYW1lczogYHhgIGFuZCBgZ2V0JHhgICh0aGUgdHdvIG5hbWVzIGEgZGlmZmVyZW50KQovLy8KLy8vICAgICBBbm5vdGF0ZWQgbmFtZXM6IGB4YCAoZmllbGQgZm9yIGB4YCkKLy8vICAgICAgICAgICAgICAgICAgICAgIGBnZXQkeGAgKGdldHRlciBmb3IgYHhgKQovLy8gICAgICAgICAgICAgICAgICAgICAgYGdldCR4YCAoZmllbGQgZm9yIGBnZXQkeGApCi8vLyAgICAgICAgICAgICAgICAgICAgICBgZ2V0JGdldCR4YCAoZ2V0dGVyIGZvciBgZ2V0JHhgKQovLy8KLy8vIFRoZSBnZXR0ZXIgZm9yIGB4YCBjbGFzaGVzIHdpdGggdGhlIGZpZWxkIG5hbWUgZm9yIGBnZXQkeGAsIHNvIHRoZQovLy8gZGlzYW1iaWd1YXRlZCBuYW1lcyBhcmUgaW52YWxpZC4KLy8vCi8vLyBBZGRpdGlvbmFsbHksIGRpc2FtYmlndWF0ZWQgbmFtZXMgbXVzdCBiZSBjaG9zZW4gc3VjaCB0aGF0IGFsbCBhbm5vdGF0ZWQKLy8vIG5hbWVzIGFyZSB2YWxpZCBKYXZhU2NyaXB0IGlkZW50aWZpZXJzIGFuZCBkbyBub3QgY29pbmNpZGUgd2l0aCBhIG5hdGl2ZQovLy8gSmF2YVNjcmlwdCBwcm9wZXJ0eSBzdWNoIGFzIGBfX3Byb3RvX19gLgovLy8KLy8vIFRoZSBmb2xsb3dpbmcgYW5ub3RhdGVkIG5hbWVzIGFyZSBnZW5lcmF0ZWQgZm9yIGluc3RhbmNlIG1lbWJlcnMsIHdoZXJlCi8vLyA8TkFNRT4gZGVub3RlcyB0aGUgZGlzYW1iaWd1YXRlZCBuYW1lLgovLy8KLy8vIDAuIFRoZSBkaXNhbWJpZ3VhdGVkIG5hbWUgY2FuIGl0c2VsZiBiZSBzZWVuIGFzIGFuIGFubm90YXRlZCBuYW1lLgovLy8KLy8vIDEuIE11bHRpcGxlIGFubm90YXRlZCBuYW1lcyBleGlzdCBmb3IgdGhlIGBjYWxsYCBtZXRob2QsIGVuY29kaW5nIGFyaXR5IGFuZAovLy8gICAgbmFtZWQgcGFyYW1ldGVycyB3aXRoIHRoZSBwYXR0ZXJuOgovLy8KLy8vICAgICAgIGNhbGwkPE4+JG5hbWVkUGFyYW0xLi4uJG5hbWVkUGFyYW08TT4KLy8vCi8vLyAgICB3aGVyZSA8Tj4gaXMgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIChyZXF1aXJlZCBhbmQgb3B0aW9uYWwpIGFuZCA8TT4gaXMKLy8vICAgIHRoZSBudW1iZXIgb2YgbmFtZWQgcGFyYW1ldGVycywgYW5kIG5hbWVkUGFyYW08bj4gYXJlIHRoZSBuYW1lcyBvZiB0aGUKLy8vICAgIG5hbWVkIHBhcmFtZXRlcnMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgovLy8KLy8vICAgIE5vdGUgdGhhdCB0aGUgc2FtZSBjb252ZW50aW9uIGlzIHVzZWQgZm9yIHRoZSAqcHJvcG9zZWQgbmFtZSogb2Ygb3RoZXIKLy8vICAgIG1ldGhvZHMuIFRodXMsIGZvciBvcmRpbmFyeSBtZXRob2RzLCB0aGUgc3VmZml4IGJlY29tZXMgZW1iZWRkZWQgaW4gdGhlCi8vLyAgICBkaXNhbWJpZ3VhdGVkIG5hbWUgKGFuZCBjYW4gYmUgbWluaWZpZWQpLCB3aGVyZWFzIGZvciB0aGUgJ2NhbGwnIG1ldGhvZCwKLy8vICAgIHRoZSBzdWZmaXggaXMgYW4gYW5ub3RhdGlvbiB0aGF0IG11c3QgYmUgY29tcHV0YWJsZSBhdCBydW50aW1lCi8vLyAgICAoYW5kIHRodXMgY2Fubm90IGJlIG1pbmlmaWVkKS4KLy8vCi8vLyAgICBOb3RlIHRoYXQgdGhlIG9yZGVyaW5nIG9mIG5hbWVkIHBhcmFtZXRlcnMgaXMgbm90IGVuY2Fwc3VsYXRlZCBpbiB0aGUKLy8vICAgIFtOYW1lcl0sIGFuZCBpcyBoYXJkY29kZWQgaW50byBvdGhlciBjb21wb25lbnRzLCBzdWNoIGFzIFtFbGVtZW50XSBhbmQKLy8vICAgIFtTZWxlY3Rvcl0uCi8vLwovLy8gMi4gVGhlIGdldHRlci9zZXR0ZXIgZm9yIGEgZmllbGQ6Ci8vLwovLy8gICAgICAgIGdldCQ8TkFNRT4KLy8vICAgICAgICBzZXQkPE5BTUU+Ci8vLwovLy8gICAgKFRoZSBbZ2V0dGVyUHJlZml4XSBhbmQgW3NldHRlclByZWZpeF0gYXJlIGRpZmZlcmVudCBpbiBbTWluaWZ5TmFtZXJdKS4KLy8vCi8vLyAzLiBUaGUgYGlzYCBhbmQgb3BlcmF0b3IgdXNlcyB0aGUgZm9sbG93aW5nIG5hbWVzOgovLy8KLy8vICAgICAgICAkaXM8TkFNRT4KLy8vICAgICAgICAkYXM8TkFNRT4KLy8vCi8vLyBGb3IgbG9jYWwgdmFyaWFibGVzLCB0aGUgW05hbWVyXSBvbmx5IHByb3ZpZGVzICpwcm9wb3NlZCBuYW1lcyouIFRoZXNlIG5hbWVzCi8vLyBtdXN0IGJlIGRpc2FtYmlndWF0ZWQgZWxzZXdoZXJlLgpjbGFzcyBOYW1lciBleHRlbmRzIE1vZHVsYXJOYW1lciB7CiAgc3RhdGljIGNvbnN0IExpc3Q8U3RyaW5nPiBqYXZhU2NyaXB0S2V5d29yZHMgPSBjb25zdCA8U3RyaW5nPlsKICAgIC8vIEVTNSA3LjYuMS4xIEtleXdvcmRzLgogICAgJ2JyZWFrJywKICAgICdkbycsCiAgICAnaW5zdGFuY2VvZicsCiAgICAndHlwZW9mJywKICAgICdjYXNlJywKICAgICdlbHNlJywKICAgICduZXcnLAogICAgJ3ZhcicsCiAgICAnY2F0Y2gnLAogICAgJ2ZpbmFsbHknLAogICAgJ3JldHVybicsCiAgICAndm9pZCcsCiAgICAnY29udGludWUnLAogICAgJ2ZvcicsCiAgICAnc3dpdGNoJywKICAgICd3aGlsZScsCiAgICAnZGVidWdnZXInLAogICAgJ2Z1bmN0aW9uJywKICAgICd0aGlzJywKICAgICd3aXRoJywKICAgICdkZWZhdWx0JywKICAgICdpZicsCiAgICAndGhyb3cnLAogICAgJ2RlbGV0ZScsCiAgICAnaW4nLAogICAgJ3RyeScsCgogICAgLy8gRVM1IDcuNi4xLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzLgogICAgJ2NsYXNzJywKICAgICdlbnVtJywKICAgICdleHRlbmRzJywKICAgICdzdXBlcicsCiAgICAnY29uc3QnLAogICAgJ2V4cG9ydCcsCiAgICAnaW1wb3J0JywKCiAgICAvLyBFUzUgNy42LjEuMiBXb3JkcyB3aXRoIHNlbWFudGljIHJlc3RyaWN0aW9ucy4KICAgICdpbXBsZW1lbnRzJywKICAgICdsZXQnLAogICAgJ3ByaXZhdGUnLAogICAgJ3B1YmxpYycsCiAgICAneWllbGQnLAogICAgJ2ludGVyZmFjZScsCiAgICAncGFja2FnZScsCiAgICAncHJvdGVjdGVkJywKICAgICdzdGF0aWMnLAoKICAgIC8vIEVTNiAxMS42LjIuMSBLZXl3b3JkcyAoaW5jbHVkaW5nIHJlcGVhdHMgb2YgRVM1IHRvIGVhc2UgY29tcGFyaXNvbiB3aXRoCiAgICAvLyBkb2N1bWVudHMpLgogICAgJ2JyZWFrJywKICAgICdkbycsCiAgICAnaW4nLAogICAgJ3R5cGVvZicsCiAgICAnY2FzZScsCiAgICAnZWxzZScsCiAgICAnaW5zdGFuY2VvZicsCiAgICAndmFyJywKICAgICdjYXRjaCcsCiAgICAnZXhwb3J0JywKICAgICduZXcnLAogICAgJ3ZvaWQnLAogICAgJ2NsYXNzJywKICAgICdleHRlbmRzJywKICAgICdyZXR1cm4nLAogICAgJ3doaWxlJywKICAgICdjb25zdCcsCiAgICAnZmluYWxseScsCiAgICAnc3VwZXInLAogICAgJ3dpdGgnLAogICAgJ2NvbnRpbnVlJywKICAgICdmb3InLAogICAgJ3N3aXRjaCcsCiAgICAneWllbGQnLAogICAgJ2RlYnVnZ2VyJywKICAgICdmdW5jdGlvbicsCiAgICAndGhpcycsCiAgICAnZGVmYXVsdCcsCiAgICAnaWYnLAogICAgJ3Rocm93JywKICAgICdkZWxldGUnLAogICAgJ2ltcG9ydCcsCiAgICAndHJ5JywKCiAgICAvLyBFUzYgMTEuNi4yLjEgV29yZHMgd2l0aCBzZW1hbnRpYyByZXN0cmljdGlvbnMuCiAgICAneWllbGQnLCAnbGV0JywgJ3N0YXRpYycsCgogICAgLy8gRVM2IDExLjYuMi4yIEZ1dHVyZSBSZXNlcnZlZCBXb3Jkcy4KICAgICdlbnVtJywKICAgICdhd2FpdCcsCgogICAgLy8gRVM2IDExLjYuMi4yIC8gRVM2IDEyLjEuMSBXb3JkcyB3aXRoIHNlbWFudGljIHJlc3RyaWN0aW9ucy4KICAgICdpbXBsZW1lbnRzJywKICAgICdwYWNrYWdlJywKICAgICdwcm90ZWN0ZWQnLAogICAgJ2ludGVyZmFjZScsCiAgICAncHJpdmF0ZScsCiAgICAncHVibGljJywKCiAgICAvLyBPdGhlciB3b3JkcyB0byBhdm9pZCBkdWUgdG8gbm9uLXN0YW5kYXJkIGtleXdvcmQtbGlrZSBiZWhhdmlvci4KICBdOwoKICBzdGF0aWMgY29uc3QgTGlzdDxTdHJpbmc+IHJlc2VydmVkUHJvcGVydHlTeW1ib2xzID0gY29uc3QgPFN0cmluZz5bCiAgICAiX19wcm90b19fIiwgInByb3RvdHlwZSIsICJjb25zdHJ1Y3RvciIsICJjYWxsIiwKICAgIC8vICJ1c2Ugc3RyaWN0IiBkaXNhbGxvd3MgdGhlIHVzZSBvZiAiYXJndW1lbnRzIiBhbmQgImV2YWwiIGFzCiAgICAvLyB2YXJpYWJsZSBuYW1lcyBvciBwcm9wZXJ0eSBuYW1lcy4gU2VlIEVDTUEtMjYyLCBFZGl0aW9uIDUuMSwKICAgIC8vIHNlY3Rpb24gMTEuMS41IChmb3IgdGhlIHByb3BlcnR5IG5hbWVzKS4KICAgICJldmFsIiwgImFyZ3VtZW50cyIKICBdOwoKICAvLyBTeW1ib2xzIHRoYXQgd2UgbWlnaHQgYmUgdXNpbmcgaW4gb3VyIEpTIHNuaXBwZXRzLgogIHN0YXRpYyBjb25zdCBMaXN0PFN0cmluZz4gcmVzZXJ2ZWRHbG9iYWxTeW1ib2xzID0gY29uc3QgPFN0cmluZz5bCiAgICAvLyBTZWN0aW9uIHJlZmVyZW5jZXMgYXJlIGZyb20gRWNtYS0yNjIKICAgIC8vIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRWNtYS0yNjIucGRmKQoKICAgIC8vIDE1LjEuMSBWYWx1ZSBQcm9wZXJ0aWVzIG9mIHRoZSBHbG9iYWwgT2JqZWN0CiAgICAiTmFOIiwgIkluZmluaXR5IiwgInVuZGVmaW5lZCIsCgogICAgLy8gMTUuMS4yIEZ1bmN0aW9uIFByb3BlcnRpZXMgb2YgdGhlIEdsb2JhbCBPYmplY3QKICAgICJldmFsIiwgInBhcnNlSW50IiwgInBhcnNlRmxvYXQiLCAiaXNOYU4iLCAiaXNGaW5pdGUiLAoKICAgIC8vIDE1LjEuMyBVUkkgSGFuZGxpbmcgRnVuY3Rpb24gUHJvcGVydGllcwogICAgImRlY29kZVVSSSIsICJkZWNvZGVVUklDb21wb25lbnQiLAogICAgImVuY29kZVVSSSIsCiAgICAiZW5jb2RlVVJJQ29tcG9uZW50IiwKCiAgICAvLyAxNS4xLjQgQ29uc3RydWN0b3IgUHJvcGVydGllcyBvZiB0aGUgR2xvYmFsIE9iamVjdAogICAgIk9iamVjdCIsICJGdW5jdGlvbiIsICJBcnJheSIsICJTdHJpbmciLCAiQm9vbGVhbiIsICJOdW1iZXIiLCAiRGF0ZSIsCiAgICAiUmVnRXhwIiwgIkVycm9yIiwgIkV2YWxFcnJvciIsICJSYW5nZUVycm9yIiwgIlJlZmVyZW5jZUVycm9yIiwKICAgICJTeW50YXhFcnJvciIsICJUeXBlRXJyb3IiLCAiVVJJRXJyb3IiLAoKICAgIC8vIDE1LjEuNSBPdGhlciBQcm9wZXJ0aWVzIG9mIHRoZSBHbG9iYWwgT2JqZWN0CiAgICAiTWF0aCIsCgogICAgLy8gMTAuMS42IEFjdGl2YXRpb24gT2JqZWN0CiAgICAiYXJndW1lbnRzIiwKCiAgICAvLyBCLjIgQWRkaXRpb25hbCBQcm9wZXJ0aWVzIChub24tbm9ybWF0aXZlKQogICAgImVzY2FwZSIsICJ1bmVzY2FwZSIsCgogICAgLy8gV2luZG93IHByb3BzIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93KQogICAgImFwcGxpY2F0aW9uQ2FjaGUiLCAiY2xvc2VkIiwgIkNvbXBvbmVudHMiLCAiY29udGVudCIsICJjb250cm9sbGVycyIsCiAgICAiY3J5cHRvIiwgImRlZmF1bHRTdGF0dXMiLCAiZGlhbG9nQXJndW1lbnRzIiwgImRpcmVjdG9yaWVzIiwKICAgICJkb2N1bWVudCIsICJmcmFtZUVsZW1lbnQiLCAiZnJhbWVzIiwgImZ1bGxTY3JlZW4iLCAiZ2xvYmFsU3RvcmFnZSIsCiAgICAiaGlzdG9yeSIsICJpbm5lckhlaWdodCIsICJpbm5lcldpZHRoIiwgImxlbmd0aCIsCiAgICAibG9jYXRpb24iLCAibG9jYXRpb25iYXIiLCAibG9jYWxTdG9yYWdlIiwgIm1lbnViYXIiLAogICAgIm1veklubmVyU2NyZWVuWCIsICJtb3pJbm5lclNjcmVlblkiLCAibW96U2NyZWVuUGl4ZWxzUGVyQ3NzUGl4ZWwiLAogICAgIm5hbWUiLCAibmF2aWdhdG9yIiwgIm9wZW5lciIsICJvdXRlckhlaWdodCIsICJvdXRlcldpZHRoIiwKICAgICJwYWdlWE9mZnNldCIsICJwYWdlWU9mZnNldCIsICJwYXJlbnQiLCAicGVyc29uYWxiYXIiLCAicGtjczExIiwKICAgICJyZXR1cm5WYWx1ZSIsICJzY3JlZW4iLCAic2Nyb2xsYmFycyIsICJzY3JvbGxNYXhYIiwgInNjcm9sbE1heFkiLAogICAgInNlbGYiLCAic2Vzc2lvblN0b3JhZ2UiLCAic2lkZWJhciIsICJzdGF0dXMiLCAic3RhdHVzYmFyIiwgInRvb2xiYXIiLAogICAgInRvcCIsICJ3aW5kb3ciLAoKICAgIC8vIFdpbmRvdyBtZXRob2RzIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93KQogICAgImFsZXJ0IiwgImFkZEV2ZW50TGlzdGVuZXIiLCAiYXRvYiIsICJiYWNrIiwgImJsdXIiLCAiYnRvYSIsCiAgICAiY2FwdHVyZUV2ZW50cyIsICJjbGVhckludGVydmFsIiwgImNsZWFyVGltZW91dCIsICJjbG9zZSIsICJjb25maXJtIiwKICAgICJkaXNhYmxlRXh0ZXJuYWxDYXB0dXJlIiwgImRpc3BhdGNoRXZlbnQiLCAiZHVtcCIsCiAgICAiZW5hYmxlRXh0ZXJuYWxDYXB0dXJlIiwgImVzY2FwZSIsICJmaW5kIiwgImZvY3VzIiwgImZvcndhcmQiLAogICAgIkdlY2tvQWN0aXZlWE9iamVjdCIsICJnZXRBdHRlbnRpb24iLCAiZ2V0QXR0ZW50aW9uV2l0aEN5Y2xlQ291bnQiLAogICAgImdldENvbXB1dGVkU3R5bGUiLCAiZ2V0U2VsZWN0aW9uIiwgImhvbWUiLCAibWF4aW1pemUiLCAibWluaW1pemUiLAogICAgIm1vdmVCeSIsICJtb3ZlVG8iLCAib3BlbiIsICJvcGVuRGlhbG9nIiwgInBvc3RNZXNzYWdlIiwgInByaW50IiwKICAgICJwcm9tcHQiLCAiUXVlcnlJbnRlcmZhY2UiLCAicmVsZWFzZUV2ZW50cyIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwKICAgICJyZXNpemVCeSIsICJyZXNpemVUbyIsICJyZXN0b3JlIiwgInJvdXRlRXZlbnQiLCAic2Nyb2xsIiwgInNjcm9sbEJ5IiwKICAgICJzY3JvbGxCeUxpbmVzIiwgInNjcm9sbEJ5UGFnZXMiLCAic2Nyb2xsVG8iLCAic2V0SW50ZXJ2YWwiLAogICAgInNldFJlc2l6ZWFibGUiLCAic2V0VGltZW91dCIsICJzaG93TW9kYWxEaWFsb2ciLCAic2l6ZVRvQ29udGVudCIsCiAgICAic3RvcCIsICJ1dWVzY2FwZSIsICJ1cGRhdGVDb21tYW5kcyIsICJYUENOYXRpdmVXcmFwcGVyIiwKICAgICJYUENTYWZlSlNPamJlY3RXcmFwcGVyIiwKCiAgICAvLyBNb3ppbGxhIFdpbmRvdyBldmVudCBoYW5kbGVycywgc2FtZSBjaXRlCiAgICAib25hYm9ydCIsICJvbmJlZm9yZXVubG9hZCIsICJvbmNoYW5nZSIsICJvbmNsaWNrIiwgIm9uY2xvc2UiLAogICAgIm9uY29udGV4dG1lbnUiLCAib25kcmFnZHJvcCIsICJvbmVycm9yIiwgIm9uZm9jdXMiLCAib25oYXNoY2hhbmdlIiwKICAgICJvbmtleWRvd24iLCAib25rZXlwcmVzcyIsICJvbmtleXVwIiwgIm9ubG9hZCIsICJvbm1vdXNlZG93biIsCiAgICAib25tb3VzZW1vdmUiLCAib25tb3VzZW91dCIsICJvbm1vdXNlb3ZlciIsICJvbm1vdXNldXAiLAogICAgIm9ubW96b3JpZW50YXRpb24iLCAib25wYWludCIsICJvbnJlc2V0IiwgIm9ucmVzaXplIiwgIm9uc2Nyb2xsIiwKICAgICJvbnNlbGVjdCIsICJvbnN1Ym1pdCIsICJvbnVubG9hZCIsCgogICAgLy8gU2FmYXJpIFdlYiBDb250ZW50IEd1aWRlCiAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L3NhZmFyaS8jZG9jdW1lbnRhdGlvbi9BcHBsZUFwcGxpY2F0aW9ucy9SZWZlcmVuY2UvU2FmYXJpV2ViQ29udGVudC9TYWZhcmlXZWJDb250ZW50LnBkZgogICAgLy8gV2ViS2l0IFdpbmRvdyBtZW1iZXIgZGF0YSwgZnJvbSBXZWJLaXQgRE9NIFJlZmVyZW5jZQogICAgLy8gKGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3NhZmFyaS9saWJyYXJ5L2RvY3VtZW50YXRpb24vQXBwbGVBcHBsaWNhdGlvbnMvUmVmZXJlbmNlL1dlYktpdERPTVJlZi9ET01XaW5kb3dfaWRsL0NsYXNzZXMvRE9NV2luZG93L2luZGV4Lmh0bWwpCiAgICAib250b3VjaGNhbmNlbCIsICJvbnRvdWNoZW5kIiwgIm9udG91Y2htb3ZlIiwgIm9udG91Y2hzdGFydCIsCiAgICAib25nZXN0dXJlc3RhcnQiLCAib25nZXN0dXJlY2hhbmdlIiwgIm9uZ2VzdHVyZWVuZCIsCgogICAgLy8gZXh0cmEgd2luZG93IG1ldGhvZHMKICAgICJ1bmV2YWwiLAoKICAgIC8vIGtleXdvcmRzIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL05ld19pbl9KYXZhU2NyaXB0XzEuNywKICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL05ld19pbl9KYXZhU2NyaXB0XzEuOC4xCiAgICAiZ2V0UHJvdG90eXBlT2YiLCAibGV0IiwgInlpZWxkIiwKCiAgICAvLyBJRSBtZXRob2RzCiAgICAvLyAoaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM1ODczKFZTLjg1KS5hc3B4IykKICAgICJhdHRhY2hFdmVudCIsICJjbGllbnRJbmZvcm1hdGlvbiIsICJjbGlwYm9hcmREYXRhIiwgImNyZWF0ZVBvcHVwIiwKICAgICJkaWFsb2dIZWlnaHQiLCAiZGlhbG9nTGVmdCIsICJkaWFsb2dUb3AiLCAiZGlhbG9nV2lkdGgiLAogICAgIm9uYWZ0ZXJwcmludCIsICJvbmJlZm9yZWRlYWN0aXZhdGUiLCAib25iZWZvcmVwcmludCIsCiAgICAib25jb250cm9sc2VsZWN0IiwgIm9uZGVhY3RpdmF0ZSIsICJvbmhlbHAiLCAib25yZXNpemVlbmQiLAoKICAgIC8vIENvbW1vbiBicm93c2VyLWRlZmluZWQgaWRlbnRpZmllcnMgbm90IGRlZmluZWQgaW4gRUNNQVNjcmlwdAogICAgImV2ZW50IiwgImV4dGVybmFsIiwgIkRlYnVnIiwgIkVudW1lcmF0b3IiLCAiR2xvYmFsIiwgIkltYWdlIiwKICAgICJBY3RpdmVYT2JqZWN0IiwgIlZCQXJyYXkiLCAiQ29tcG9uZW50cyIsCgogICAgLy8gRnVuY3Rpb25zIGNvbW1vbmx5IGRlZmluZWQgb24gT2JqZWN0CiAgICAidG9TdHJpbmciLCAiZ2V0Q2xhc3MiLCAiY29uc3RydWN0b3IiLCAicHJvdG90eXBlIiwgInZhbHVlT2YiLAoKICAgIC8vIENsaWVudC1zaWRlIEphdmFTY3JpcHQgaWRlbnRpZmllcnMKICAgICJBbmNob3IiLCAiQXBwbGV0IiwgIkF0dHIiLCAiQ2FudmFzIiwgIkNhbnZhc0dyYWRpZW50IiwKICAgICJDYW52YXNQYXR0ZXJuIiwgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIsICJDREFUQVNlY3Rpb24iLAogICAgIkNoYXJhY3RlckRhdGEiLCAiQ29tbWVudCIsICJDU1MyUHJvcGVydGllcyIsICJDU1NSdWxlIiwKICAgICJDU1NTdHlsZVNoZWV0IiwgIkRvY3VtZW50IiwgIkRvY3VtZW50RnJhZ21lbnQiLCAiRG9jdW1lbnRUeXBlIiwKICAgICJET01FeGNlcHRpb24iLCAiRE9NSW1wbGVtZW50YXRpb24iLCAiRE9NUGFyc2VyIiwgIkVsZW1lbnQiLCAiRXZlbnQiLAogICAgIkV4dGVybmFsSW50ZXJmYWNlIiwgIkZsYXNoUGxheWVyIiwgIkZvcm0iLCAiRnJhbWUiLCAiSGlzdG9yeSIsCiAgICAiSFRNTENvbGxlY3Rpb24iLCAiSFRNTERvY3VtZW50IiwgIkhUTUxFbGVtZW50IiwgIklGcmFtZSIsICJJbWFnZSIsCiAgICAiSW5wdXQiLCAiSlNPYmplY3QiLCAiS2V5RXZlbnQiLCAiTGluayIsICJMb2NhdGlvbiIsICJNaW1lVHlwZSIsCiAgICAiTW91c2VFdmVudCIsICJOYXZpZ2F0b3IiLCAiTm9kZSIsICJOb2RlTGlzdCIsICJPcHRpb24iLCAiUGx1Z2luIiwKICAgICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLCAiUmFuZ2UiLCAiUmFuZ2VFeGNlcHRpb24iLCAiU2NyZWVuIiwgIlNlbGVjdCIsCiAgICAiVGFibGUiLCAiVGFibGVDZWxsIiwgIlRhYmxlUm93IiwgIlRhYmxlU2VsZWN0aW9uIiwgIlRleHQiLCAiVGV4dEFyZWEiLAogICAgIlVJRXZlbnQiLCAiV2luZG93IiwgIlhNTEh0dHBSZXF1ZXN0IiwgIlhNTFNlcmlhbGl6ZXIiLAogICAgIlhQYXRoRXhjZXB0aW9uIiwgIlhQYXRoUmVzdWx0IiwgIlhTTFRQcm9jZXNzb3IiLAoKICAgIC8vIFRoZXNlIGtleXdvcmRzIHRyaWdnZXIgdGhlIGxvYWRpbmcgb2YgdGhlIGphdmEtcGx1Z2luLiBGb3IgdGhlCiAgICAvLyBuZXh0LWdlbmVyYXRpb24gcGx1Z2luLCB0aGlzIHJlc3VsdHMgaW4gc3RhcnRpbmcgYSBuZXcgSmF2YSBwcm9jZXNzLgogICAgImphdmEiLCAiUGFja2FnZXMiLCAibmV0c2NhcGUiLCAic3VuIiwgIkphdmFPYmplY3QiLCAiSmF2YUNsYXNzIiwKICAgICJKYXZhQXJyYXkiLCAiSmF2YU1lbWJlciIsCgogICAgLy8gRVM2IGNvbGxlY3Rpb25zLgogICAgIk1hcCIsICJTZXQiLAogIF07CgogIHN0YXRpYyBjb25zdCBMaXN0PFN0cmluZz4gcmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lcyA9IGNvbnN0IDxTdHJpbmc+WwogICAgIkEiLAogICAgIkIiLAogICAgIkMiLCAvLyBHbG9iYWwgb2JqZWN0IGZvciAqQypvbnN0YW50cy4KICAgICJEIiwKICAgICJFIiwKICAgICJGIiwKICAgICJHIiwKICAgICJIIiwgLy8gR2xvYmFsIG9iamVjdCBmb3IgaW50ZXJuYWwgKCpIKmVscGVyKSBsaWJyYXJpZXMuCiAgICAvLyBJIGlzIHVzZWQgZm9yIHVzZWQgZm9yIHRoZSBJc29sYXRlIGZ1bmN0aW9uLgogICAgIkoiLCAvLyBHbG9iYWwgb2JqZWN0IGZvciB0aGUgaW50ZXJjZXB0b3IgbGlicmFyeS4KICAgICJLIiwKICAgICJMIiwKICAgICJNIiwKICAgICJOIiwKICAgICJPIiwKICAgICJQIiwgLy8gR2xvYmFsIG9iamVjdCBmb3Igb3RoZXIgKlAqbGF0Zm9ybSBsaWJyYXJpZXMuCiAgICAiUSIsCiAgICAiUiIsCiAgICAiUyIsCiAgICAiVCIsCiAgICAiVSIsCiAgICAiViIsCiAgICAiVyIsIC8vIEdsb2JhbCBvYmplY3QgZm9yICpXKmViIGxpYnJhcmllcyAoZGFydDpodG1sKS4KICAgICJYIiwKICAgICJZIiwKICAgICJaIiwKICBdOwoKICBzdGF0aWMgY29uc3QgTGlzdDxTdHJpbmc+IHJlc2VydmVkR2xvYmFsSGVscGVyRnVuY3Rpb25zID0gY29uc3QgPFN0cmluZz5bCiAgICAiaW5pdCIsCiAgICAiSXNvbGF0ZSIsCiAgXTsKCiAgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiB1c2VyR2xvYmFsT2JqZWN0cyA9CiAgICAgIG5ldyBMaXN0LmZyb20ocmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lcykKICAgICAgICAuLnJlbW92ZSgnQycpCiAgICAgICAgLi5yZW1vdmUoJ0gnKQogICAgICAgIC4ucmVtb3ZlKCdKJykKICAgICAgICAuLnJlbW92ZSgnUCcpCiAgICAgICAgLi5yZW1vdmUoJ1cnKTsKCiAgU2V0PFN0cmluZz4gX2pzUmVzZXJ2ZWQgPSBudWxsOwoKICAvLy8gTmFtZXMgdGhhdCBjYW5ub3QgYmUgdXNlZCBieSBtZW1iZXJzLCB0b3AgbGV2ZWwgYW5kIHN0YXRpYwogIC8vLyBtZXRob2RzLgogIFNldDxTdHJpbmc+IGdldCBqc1Jlc2VydmVkIHsKICAgIGlmIChfanNSZXNlcnZlZCA9PSBudWxsKSB7CiAgICAgIF9qc1Jlc2VydmVkID0gbmV3IFNldDxTdHJpbmc+KCk7CiAgICAgIF9qc1Jlc2VydmVkLmFkZEFsbChqYXZhU2NyaXB0S2V5d29yZHMpOwogICAgICBfanNSZXNlcnZlZC5hZGRBbGwocmVzZXJ2ZWRQcm9wZXJ0eVN5bWJvbHMpOwogICAgfQogICAgcmV0dXJuIF9qc1Jlc2VydmVkOwogIH0KCiAgZmluYWwgU3RyaW5nIGxhenlHZXR0ZXJQcmVmaXggPSByJyRnZXQkJzsKICBmaW5hbCBTdHJpbmcgc3VwZXJQcmVmaXggPSByJ3N1cGVyJCc7CiAgZmluYWwgU3RyaW5nIG1ldGFkYXRhRmllbGQgPSAnQCc7CiAgZmluYWwgU3RyaW5nIHN0dWJOYW1lRmllbGQgPSByJyRzdHViTmFtZSc7CiAgZmluYWwgU3RyaW5nIHJlZmxlY3Rpb25JbmZvRmllbGQgPSByJyRyZWZsZWN0aW9uSW5mbyc7CiAgZmluYWwgU3RyaW5nIHJlZmxlY3Rpb25OYW1lRmllbGQgPSByJyRyZWZsZWN0aW9uTmFtZSc7CiAgZmluYWwgU3RyaW5nIG1ldGFkYXRhSW5kZXhGaWVsZCA9IHInJG1ldGFkYXRhSW5kZXgnOwogIGZpbmFsIFN0cmluZyBtZXRob2RzV2l0aE9wdGlvbmFsQXJndW1lbnRzRmllbGQgPQogICAgICByJyRtZXRob2RzV2l0aE9wdGlvbmFsQXJndW1lbnRzJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgUnVudGltZVR5cGVUYWdzIHJ0aVRhZ3M7CgogIEBvdmVycmlkZQogIGZpbmFsIEZpeGVkTmFtZXMgZml4ZWROYW1lczsKCiAgLy8vIFRoZSBub24tbWluaWZ5aW5nIG5hbWVyJ3MgW2NhbGxQcmVmaXhdIHdpdGggYSBkb2xsYXIgYWZ0ZXIgaXQuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBfY2FsbFByZWZpeERvbGxhciA9IHInY2FsbCQnOwoKICBzdGF0aWMgZmluYWwganNBc3QuTmFtZSBfbGl0ZXJhbERvbGxhciA9IG5ldyBTdHJpbmdCYWNrZWROYW1lKHInJCcpOwogIHN0YXRpYyBmaW5hbCBqc0FzdC5OYW1lIF9saXRlcmFsVW5kZXJzY29yZSA9IG5ldyBTdHJpbmdCYWNrZWROYW1lKCdfJyk7CiAgc3RhdGljIGZpbmFsIGpzQXN0Lk5hbWUgbGl0ZXJhbFBsdXMgPSBuZXcgU3RyaW5nQmFja2VkTmFtZSgnKycpOwogIHN0YXRpYyBmaW5hbCBqc0FzdC5OYW1lIF9saXRlcmFsRHluYW1pYyA9IG5ldyBTdHJpbmdCYWNrZWROYW1lKCJkeW5hbWljIik7CgogIGpzQXN0Lk5hbWUgX2xpdGVyYWxHZXR0ZXJQcmVmaXg7CiAganNBc3QuTmFtZSBfbGl0ZXJhbFNldHRlclByZWZpeDsKCiAganNBc3QuTmFtZSBfc3RhdGljc1Byb3BlcnR5TmFtZTsKCiAganNBc3QuTmFtZSBnZXQgc3RhdGljc1Byb3BlcnR5TmFtZSA9PgogICAgICBfc3RhdGljc1Byb3BlcnR5TmFtZSA/Pz0gbmV3IFN0cmluZ0JhY2tlZE5hbWUoJ3N0YXRpYycpOwoKICBqc0FzdC5OYW1lIF9ydGlGaWVsZEpzTmFtZTsKCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBnZXQgcnRpRmllbGRKc05hbWUgPT4KICAgICAgX3J0aUZpZWxkSnNOYW1lID8/PSBuZXcgU3RyaW5nQmFja2VkTmFtZShmaXhlZE5hbWVzLnJ0aU5hbWUpOwoKICAvLyBOYW1lIG9mIHByb3BlcnR5IGluIGEgY2xhc3MgZGVzY3JpcHRpb24gZm9yIHRoZSBuYXRpdmUgZGlzcGF0Y2ggbWV0YWRhdGEuCiAgZmluYWwgU3RyaW5nIG5hdGl2ZVNwZWNQcm9wZXJ0eSA9ICclJzsKCiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBJREVOVElGSUVSID0gbmV3IFJlZ0V4cChyJ15bQS1aYS16XyRdW0EtWmEtejAtOV8kXSokJyk7CiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBOT05fSURFTlRJRklFUl9DSEFSID0gbmV3IFJlZ0V4cChyJ1teQS1aYS16XzAtOSRdJyk7CgogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CgogIC8vLyBVc2VkIGRpc2FtYmlndWF0ZWQgbmFtZXMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGlzc3VlZCBieQogIC8vLyBbX2Rpc2FtYmlndWF0ZUdsb2JhbF0sIGFuZCBbX2Rpc2FtYmlndWF0ZUludGVybmFsR2xvYmFsXS4KICAvLy8KICAvLy8gQWx0aG91Z2ggZ2xvYmFsIG5hbWVzIGFyZSBkaXN0cmlidXRlZCBhY3Jvc3MgYSBudW1iZXIgb2YgZ2xvYmFsIG9iamVjdHMsCiAgLy8vIChzZWUgW2dsb2JhbE9iamVjdEZvcl0pLCB3ZSBjdXJyZW50bHkgdXNlIGEgc2luZ2xlIG5hbWVzcGFjZSBmb3IgYWxsIHRoZXNlCiAgLy8vIG5hbWVzLgogIGZpbmFsIE5hbWluZ1Njb3BlIGdsb2JhbFNjb3BlID0gTmFtaW5nU2NvcGUoKTsKICBmaW5hbCBNYXA8RW50aXR5LCBqc0FzdC5OYW1lPiB1c2VyR2xvYmFscyA9IHt9OwogIC8vIFt1c2VyR2xvYmFsc1NlY29uZE5hbWVdIGlzIHVzZWQgd2hlbiBhbiBlbnRpdHkgaGFzIGEgc2Vjb25kIG5hbWUsIGUuZy4gYQogIC8vIGxhemlseSBpbml0aWFsaXplZCBzdGF0aWMgdmFyaWFibGUgaGFzIGEgbG9jYXRpb24gYW5kIGEgZ2V0dGVyLgogIGZpbmFsIE1hcDxFbnRpdHksIGpzQXN0Lk5hbWU+IHVzZXJHbG9iYWxzU2Vjb25kTmFtZSA9IHt9OwogIGZpbmFsIE1hcDxTdHJpbmcsIGpzQXN0Lk5hbWU+IGludGVybmFsR2xvYmFscyA9IHt9OwoKICBfcmVnaXN0ZXJOYW1lKAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCwganNBc3QuTmFtZSBqc05hbWUsIFN0cmluZyBvcmlnaW5hbE5hbWUpIHsKICAgIC8vIE5vbi1maW5hbGl6ZWQgbmFtZXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvdXRwdXQgcHJvZ3JhbQogICAgaWYgKGpzTmFtZSBpcyBUb2tlbk5hbWUgJiYgIWpzTmFtZS5pc0ZpbmFsaXplZCkgcmV0dXJuOwogICAgbWFwW2pzTmFtZS5uYW1lXSA9IG9yaWdpbmFsTmFtZTsKICAgIHZhciBnZXR0ZXJOYW1lID0gdXNlckdldHRlcnNbanNOYW1lXTsKICAgIGlmIChnZXR0ZXJOYW1lICE9IG51bGwpIG1hcFtnZXR0ZXJOYW1lLm5hbWVdID0gb3JpZ2luYWxOYW1lOwogICAgdmFyIHNldHRlck5hbWUgPSB1c2VyU2V0dGVyc1tqc05hbWVdOwogICAgaWYgKHNldHRlck5hbWUgIT0gbnVsbCkgbWFwW3NldHRlck5hbWUubmFtZV0gPSBvcmlnaW5hbE5hbWU7CiAgfQoKICBNYXA8U3RyaW5nLCBTdHJpbmc+IGNyZWF0ZU1pbmlmaWVkR2xvYmFsTmFtZU1hcCgpIHsKICAgIHZhciBtYXAgPSA8U3RyaW5nLCBTdHJpbmc+e307CiAgICB1c2VyR2xvYmFscy5mb3JFYWNoKChlbnRpdHksIGpzTmFtZSkgewogICAgICBfcmVnaXN0ZXJOYW1lKG1hcCwganNOYW1lLCBlbnRpdHkubmFtZSk7CiAgICB9KTsKICAgIHVzZXJHbG9iYWxzU2Vjb25kTmFtZS5mb3JFYWNoKChlbnRpdHksIGpzTmFtZSkgewogICAgICBfcmVnaXN0ZXJOYW1lKG1hcCwganNOYW1lLCBlbnRpdHkubmFtZSk7CiAgICB9KTsKICAgIGludGVybmFsR2xvYmFscy5mb3JFYWNoKChuYW1lLCBqc05hbWUpIHsKICAgICAgX3JlZ2lzdGVyTmFtZShtYXAsIGpzTmFtZSwgbmFtZSk7CiAgICB9KTsKICAgIHJldHVybiBtYXA7CiAgfQoKICAvLy8gVXNlZCBkaXNhbWJpZ3VhdGVkIG5hbWVzIGluIHRoZSBpbnN0YW5jZSBuYW1lc3BhY2UsIGlzc3VlZCBieQogIC8vLyBbX2Rpc2FtYmlndWF0ZU1lbWJlcl0sIFtfZGlzYW1iaWd1YXRlSW50ZXJuYWxNZW1iZXJdLAogIC8vLyBbX2Rpc2FtYmlndWF0ZU9wZXJhdG9yXSwgYW5kIFtyZXNlcnZlUHVibGljTWVtYmVyTmFtZV0uCiAgZmluYWwgTmFtaW5nU2NvcGUgaW5zdGFuY2VTY29wZSA9IE5hbWluZ1Njb3BlKCk7CiAgZmluYWwgTWFwPFN0cmluZywganNBc3QuTmFtZT4gdXNlckluc3RhbmNlTWVtYmVycyA9IEhhc2hNYXAoKTsKICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHVzZXJJbnN0YW5jZU1lbWJlcnNPcmlnaW5hbE5hbWUgPSBIYXNoTWFwKCk7CiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwganNBc3QuTmFtZT4gaW50ZXJuYWxJbnN0YW5jZU1lbWJlcnMgPSBIYXNoTWFwKCk7CiAgZmluYWwgTWFwPFN0cmluZywganNBc3QuTmFtZT4gdXNlckluc3RhbmNlT3BlcmF0b3JzID0gSGFzaE1hcCgpOwogIGZpbmFsIE1hcDxqc0FzdC5OYW1lLCBqc0FzdC5OYW1lPiB1c2VyR2V0dGVycyA9IEhhc2hNYXAoKTsKICBmaW5hbCBNYXA8anNBc3QuTmFtZSwganNBc3QuTmFtZT4gdXNlclNldHRlcnMgPSBIYXNoTWFwKCk7CiAgZmluYWwgTWFwPFR5cGVWYXJpYWJsZUVudGl0eSwganNBc3QuTmFtZT4gX3R5cGVWYXJpYWJsZU5hbWVzID0ge307CgogIE1hcDxTdHJpbmcsIFN0cmluZz4gY3JlYXRlTWluaWZpZWRJbnN0YW5jZU5hbWVNYXAoKSB7CiAgICB2YXIgbWFwID0gPFN0cmluZywgU3RyaW5nPnt9OwogICAgaW50ZXJuYWxJbnN0YW5jZU1lbWJlcnMuZm9yRWFjaCgoZW50aXR5LCBqc05hbWUpIHsKICAgICAgX3JlZ2lzdGVyTmFtZShtYXAsIGpzTmFtZSwgZW50aXR5Lm5hbWUpOwogICAgfSk7CiAgICB1c2VySW5zdGFuY2VNZW1iZXJzLmZvckVhY2goKG5hbWUsIGpzTmFtZSkgewogICAgICBfcmVnaXN0ZXJOYW1lKG1hcCwganNOYW1lLCB1c2VySW5zdGFuY2VNZW1iZXJzT3JpZ2luYWxOYW1lW25hbWVdID8/IG5hbWUpOwogICAgfSk7CgogICAgLy8gVE9ETyhzaWdtdW5kKTogcmV2ZXJzZSB0aGUgb3BlcmF0b3IgbmFtZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgRGFydAogICAgLy8gbmFtZXMuCiAgICB1c2VySW5zdGFuY2VPcGVyYXRvcnMuZm9yRWFjaCgobmFtZSwganNOYW1lKSB7CiAgICAgIF9yZWdpc3Rlck5hbWUobWFwLCBqc05hbWUsIG5hbWUpOwogICAgfSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIFVzZWQgdG8gZGlzYW1iaWd1YXRlIG5hbWVzIGZvciBjb25zdGFudHMgaW4gW2NvbnN0YW50TmFtZV0uCiAgZmluYWwgTmFtaW5nU2NvcGUgX2NvbnN0YW50U2NvcGUgPSBuZXcgTmFtaW5nU2NvcGUoKTsKCiAgLy8vIFVzZWQgdG8gc3RvcmUgc2NvcGVzIGZvciBpbnN0YW5jZXMgb2YgW1ByaXZhdGVseU5hbWVkSnNFbnRpdHldCiAgZmluYWwgTWFwPEVudGl0eSwgTmFtaW5nU2NvcGU+IF9wcml2YXRlTmFtaW5nU2NvcGVzID0ge307CgogIGZpbmFsIE1hcDxTdHJpbmcsIGludD4gcG9wdWxhck5hbWVDb3VudGVycyA9IHt9OwoKICBmaW5hbCBNYXA8TGlicmFyeUVudGl0eSwgU3RyaW5nPiBsaWJyYXJ5TG9uZ05hbWVzID0gSGFzaE1hcCgpOwoKICBmaW5hbCBNYXA8Q29uc3RhbnRWYWx1ZSwganNBc3QuTmFtZT4gX2NvbnN0YW50TmFtZXMgPSBIYXNoTWFwKCk7CiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIFN0cmluZz4gX2NvbnN0YW50TG9uZ05hbWVzID0ge307CiAgQ29uc3RhbnRDYW5vbmljYWxIYXNoZXIgX2NvbnN0YW50SGFzaGVyOwoKICAvLy8gTWFwcyBwcml2YXRlIG5hbWVzIHRvIGEgbGlicmFyeSB0aGF0IG1heSB1c2UgdGhhdCBuYW1lIHdpdGhvdXQgcHJlZml4aW5nCiAgLy8vIGl0c2VsZi4gVXNlZCBmb3IgYnVpbGRpbmcgcHJvcG9zZWQgbmFtZXMuCiAgZmluYWwgTWFwPFN0cmluZywgTGlicmFyeUVudGl0eT4gc2hvcnRQcml2YXRlTmFtZU93bmVycyA9IHt9OwoKICAvLy8gVXNlZCB0byBzdG9yZSB1bmlxdWUga2V5cyBmb3IgbGlicmFyeSBuYW1lcy4gS2V5cyBhcmUgbm90IHVzZWQgYXMgbmFtZXMsCiAgLy8vIG5vciBhcmUgdGhleSB2aXNpYmxlIGluIHRoZSBvdXRwdXQuIFRoZSBvbmx5IHNlcnZlIGFzIGFuIGludGVybmFsCiAgLy8vIGtleSBpbnRvIG1hcHMuCiAgZmluYWwgTWFwPExpYnJhcnlFbnRpdHksIFN0cmluZz4gX2xpYnJhcnlLZXlzID0gSGFzaE1hcCgpOwoKICBOYW1lcih0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5ydGlUYWdzLCB0aGlzLmZpeGVkTmFtZXMpIHsKICAgIF9saXRlcmFsR2V0dGVyUHJlZml4ID0gbmV3IFN0cmluZ0JhY2tlZE5hbWUoZml4ZWROYW1lcy5nZXR0ZXJQcmVmaXgpOwogICAgX2xpdGVyYWxTZXR0ZXJQcmVmaXggPSBuZXcgU3RyaW5nQmFja2VkTmFtZShmaXhlZE5hbWVzLnNldHRlclByZWZpeCk7CiAgfQoKICBKRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+CiAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICBOYXRpdmVEYXRhIGdldCBfbmF0aXZlRGF0YSA9PiBfY2xvc2VkV29ybGQubmF0aXZlRGF0YTsKCiAgU3RyaW5nIGdldCBkZWZlcnJlZE1ldGFkYXRhTmFtZSA9PiAnZGVmZXJyZWRNZXRhZGF0YSc7CiAgU3RyaW5nIGdldCBkZWZlcnJlZFR5cGVzTmFtZSA9PiAnZGVmZXJyZWRUeXBlcyc7CiAgU3RyaW5nIGdldCBpc29sYXRlTmFtZSA9PiAnSXNvbGF0ZSc7CiAgU3RyaW5nIGdldCBpc29sYXRlUHJvcGVydGllc05hbWUgPT4gcickaXNvbGF0ZVByb3BlcnRpZXMnOwogIGpzQXN0Lk5hbWUgZ2V0IG5vU3VjaE1ldGhvZE5hbWUgPT4gaW52b2NhdGlvbk5hbWUoU2VsZWN0b3JzLm5vU3VjaE1ldGhvZF8pOwoKICAvLy8gU29tZSBjbG9zdXJlcyBtdXN0IGNvbnRhaW4gdGhlaXIgbmFtZS4gVGhlIG5hbWUgaXMgc3RvcmVkIGluCiAgLy8vIFtTVEFUSUNfQ0xPU1VSRV9OQU1FX05BTUVdLgogIFN0cmluZyBnZXQgU1RBVElDX0NMT1NVUkVfTkFNRV9OQU1FID0+IHInJG5hbWUnOwogIFN0cmluZyBnZXQgY2xvc3VyZUludm9jYXRpb25TZWxlY3Rvck5hbWUgPT4gSWRlbnRpZmllcnMuY2FsbDsKICBib29sIGdldCBzaG91bGRNaW5pZnkgPT4gZmFsc2U7CgogIE5hbWluZ1Njb3BlIF9nZXRQcml2YXRlU2NvcGVGb3IoUHJpdmF0ZWx5TmFtZWRKU0VudGl0eSBlbnRpdHkpIHsKICAgIHJldHVybiBfcHJpdmF0ZU5hbWluZ1Njb3Blcy5wdXRJZkFic2VudCgKICAgICAgICBlbnRpdHkucm9vdE9mU2NvcGUsICgpID0+IG5ldyBOYW1pbmdTY29wZSgpKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGdpdmVuIFtuYW1lXS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IHVzZSBzaXRlIG9mIGEgbmFtZSBoYXMgYSB1bmlxdWUgbm9kZSBzbwogIC8vLyB0aGF0IHdlIGNhbiBwcm9wZXJseSBhdHRyaWJ1dGUgc291cmNlIGluZm9ybWF0aW9uLgogIGpzQXN0Lk5hbWUgX25ld1JlZmVyZW5jZShqc0FzdC5OYW1lIG5hbWUpIHsKICAgIHJldHVybiBuZXcgX05hbWVSZWZlcmVuY2UobmFtZSk7CiAgfQoKICAvLy8gRGlzYW1iaWd1YXRlZCBuYW1lIGZvciBbY29uc3RhbnRdLgogIC8vLwogIC8vLyBVbmlxdWUgd2l0aGluIHRoZSBnbG9iYWwtbWVtYmVyIG5hbWVzcGFjZS4KICBqc0FzdC5OYW1lIGNvbnN0YW50TmFtZShDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICAvLyBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gZ2l2ZSBuYW1lcyB0bwogICAgLy8gZnVuY3Rpb24gY29uc3RhbnRzIHNpbmNlIHRoZSBmdW5jdGlvbi1pbXBsZW1lbnRhdGlvbiBpdHNlbGYgc2VydmVzIGFzCiAgICAvLyBjb25zdGFudCBhbmQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgYXNzZXJ0KCFjb25zdGFudC5pc0Z1bmN0aW9uKTsKICAgIGpzQXN0Lk5hbWUgcmVzdWx0ID0gX2NvbnN0YW50TmFtZXNbY29uc3RhbnRdOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBsb25nTmFtZSA9IGNvbnN0YW50TG9uZ05hbWUoY29uc3RhbnQpOwogICAgICByZXN1bHQgPSBnZXRGcmVzaE5hbWUoX2NvbnN0YW50U2NvcGUsIGxvbmdOYW1lKTsKICAgICAgX2NvbnN0YW50TmFtZXNbY29uc3RhbnRdID0gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9uZXdSZWZlcmVuY2UocmVzdWx0KTsKICB9CgogIC8vLyBQcm9wb3NlZCBuYW1lIGZvciBbY29uc3RhbnRdLgogIFN0cmluZyBjb25zdGFudExvbmdOYW1lKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIFN0cmluZyBsb25nTmFtZSA9IF9jb25zdGFudExvbmdOYW1lc1tjb25zdGFudF07CiAgICBpZiAobG9uZ05hbWUgPT0gbnVsbCkgewogICAgICBfY29uc3RhbnRIYXNoZXIgPz89IG5ldyBDb25zdGFudENhbm9uaWNhbEhhc2hlcih0aGlzLCBfY2xvc2VkV29ybGQpOwogICAgICBsb25nTmFtZSA9IG5ldyBDb25zdGFudE5hbWluZ1Zpc2l0b3IodGhpcywgX2Nsb3NlZFdvcmxkLCBfY29uc3RhbnRIYXNoZXIpCiAgICAgICAgICAuZ2V0TmFtZShjb25zdGFudCk7CiAgICAgIF9jb25zdGFudExvbmdOYW1lc1tjb25zdGFudF0gPSBsb25nTmFtZTsKICAgIH0KICAgIHJldHVybiBsb25nTmFtZTsKICB9CgogIC8vLyBJZiB0aGUgW29yaWdpbmFsTmFtZV0gaXMgbm90IHByaXZhdGUgcmV0dXJucyBbb3JpZ2luYWxOYW1lXS4gT3RoZXJ3aXNlCiAgLy8vIG1hbmdsZXMgdGhlIFtvcmlnaW5hbE5hbWVdIHNvIHRoYXQgZWFjaCBsaWJyYXJ5IGhhcyBpdHMgb3duIGRpc3Rpbmd1aXNoZWQKICAvLy8gdmVyc2lvbiBvZiB0aGUgbmFtZS4KICAvLy8KICAvLy8gQWx0aG91Z2ggdGhlIG5hbWUgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIHdpdGhpbiBhbnkgbmFtZXNwYWNlLAogIC8vLyBjbGFzaGVzIGFyZSB2ZXJ5IHVubGlrZWx5IGluIHByYWN0aWNlLiBUaGVyZWZvcmUsIGl0IGNhbiBiZSB1c2VkIGluIGNhc2VzCiAgLy8vIHdoZXJlIHVuaXF1ZW5lc3MgaXMgbmljZSBidXQgbm90IGEgc3RyaWN0IHJlcXVpcmVtZW50LgogIC8vLwogIC8vLyBUaGUgcmVzdWx0aW5nIG5hbWUgaXMgYSAqcHJvcG9zZWQgbmFtZSogYW5kIGlzIG5ldmVyIG1pbmlmaWVkLgogIFN0cmluZyBwcml2YXRlTmFtZShOYW1lIG9yaWdpbmFsTmFtZSkgewogICAgU3RyaW5nIHRleHQgPSBvcmlnaW5hbE5hbWUudGV4dDsKCiAgICAvLyBQdWJsaWMgbmFtZXMgYXJlIGVhc3kuCiAgICBpZiAoIW9yaWdpbmFsTmFtZS5pc1ByaXZhdGUpIHJldHVybiB0ZXh0OwoKICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IG9yaWdpbmFsTmFtZS5saWJyYXJ5OwoKICAgIC8vIFRoZSBmaXJzdCBsaWJyYXJ5IGFza2luZyBmb3IgYSBzaG9ydCBwcml2YXRlIG5hbWUgd2lucy4KICAgIExpYnJhcnlFbnRpdHkgb3duZXIgPQogICAgICAgIHNob3J0UHJpdmF0ZU5hbWVPd25lcnMucHV0SWZBYnNlbnQodGV4dCwgKCkgPT4gbGlicmFyeSk7CgogICAgaWYgKG93bmVyID09IGxpYnJhcnkpIHsKICAgICAgcmV0dXJuIHRleHQ7CiAgICB9IGVsc2UgewogICAgICAvLyBNYWtlIHN1cmUgdG8gcmV0dXJuIGEgcHJpdmF0ZSBuYW1lIHRoYXQgc3RhcnRzIHdpdGggXyBzbyBpdAogICAgICAvLyBjYW5ub3QgY2xhc2ggd2l0aCBhbnkgcHVibGljIG5hbWVzLgogICAgICAvLyBUaGUgbmFtZSBpcyBzdGlsbCBub3QgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUsIHNpbmNlIGJvdGggdGhlIGxpYnJhcnkKICAgICAgLy8gbmFtZSBhbmQgb3JpZ2luYWxOYW1lIGNvdWxkIGNvbnRhaW4gJCBzeW1ib2xzIGFuZCBhcyB0aGUgbGlicmFyeQogICAgICAvLyBuYW1lIGl0c2VsZiBtaWdodCBjbGFzaC4KICAgICAgU3RyaW5nIGxpYnJhcnlOYW1lID0gX3Byb3Bvc2VOYW1lRm9yTGlicmFyeShsaWJyYXJ5KTsKICAgICAgcmV0dXJuICJfJGxpYnJhcnlOYW1lXCQkdGV4dCI7CiAgICB9CiAgfQoKICBTdHJpbmcgX3Byb3Bvc2VOYW1lRm9yQ29uc3RydWN0b3JCb2R5KENvbnN0cnVjdG9yQm9keUVudGl0eSBtZXRob2QpIHsKICAgIFN0cmluZyBuYW1lID0gdXRpbHMucmVjb25zdHJ1Y3RDb25zdHJ1Y3Rvck5hbWVTb3VyY2VTdHJpbmcobWV0aG9kKTsKICAgIC8vIFdlIGluY2x1ZGUgdGhlIG1ldGhvZCBzdWZmaXggb24gY29uc3RydWN0b3IgYm9kaWVzLiBJdCBoYXMgbm8gcHVycG9zZSwKICAgIC8vIGJ1dCB0aGlzIHdheSBpdCBwcm9kdWNlcyB0aGUgc2FtZSBuYW1lcyBhcyBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUKICAgIC8vIE5hbWVyIGNsYXNzIGRpZC4KICAgIExpc3Q8U3RyaW5nPiBzdWZmaXggPSBjYWxsU3VmZml4Rm9yU2lnbmF0dXJlKG1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmUpOwogICAgcmV0dXJuICckbmFtZVwkJHtzdWZmaXguam9pbihyJyQnKX0nOwogIH0KCiAgLy8vIE5hbWUgZm9yIGEgY29uc3RydWN0b3IgYm9keS4KICBqc0FzdC5OYW1lIGNvbnN0cnVjdG9yQm9keU5hbWUoQ29uc3RydWN0b3JCb2R5RW50aXR5IGN0b3IpIHsKICAgIHJldHVybiBfZGlzYW1iaWd1YXRlSW50ZXJuYWxNZW1iZXIoCiAgICAgICAgY3RvciwgKCkgPT4gX3Byb3Bvc2VOYW1lRm9yQ29uc3RydWN0b3JCb2R5KGN0b3IpKTsKICB9CgogIC8vLyBOYW1lIGZvciBhIGdlbmVyYXRvciBib2R5LgogIGpzQXN0Lk5hbWUgZ2VuZXJhdG9yQm9keUluc3RhbmNlTWV0aG9kTmFtZShKR2VuZXJhdG9yQm9keSBtZXRob2QpIHsKICAgIGFzc2VydChtZXRob2QuaXNJbnN0YW5jZU1lbWJlcik7CiAgICAvLyBUT0RPKHNyYSk6IEV4Y2VwdCBmb3IgbWV0aG9kcyBkZWNsYXJlZCBpbiBtaXhpbnMsIHdlIGNhbiB1c2UgYSBjb21wYWN0CiAgICAvLyBuYW1pbmcgc2NoZW1lIGxpa2Ugd2UgZG8gZm9yIFtDb25zdHJ1Y3RvckJvZHlFbnRpdHldLgogICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBtZXRob2QuZnVuY3Rpb247CiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUludGVybmFsTWVtYmVyKG1ldGhvZCwgKCkgewogICAgICBTdHJpbmcgaW52b2NhdGlvbk5hbWUgPSBvcGVyYXRvck5hbWVUb0lkZW50aWZpZXIoZnVuY3Rpb24ubmFtZSk7CiAgICAgIC8vIFRPRE8oc3JhKTogSWYgdGhlIGdlbmVyYXRvciBpcyBmb3IgYSBjbG9zdXJlJ3MgJ2NhbGwnIG1ldGhvZCwgd2UgZG9uJ3QKICAgICAgLy8gbmVlZCB0byBpbmNvcnBvcmF0ZSB0aGUgZW5jbG9zaW5nIGNsYXNzLgogICAgICBTdHJpbmcgY2xhc3NOYW1lID0gbWV0aG9kLmVuY2xvc2luZ0NsYXNzLm5hbWUucmVwbGFjZUFsbCgnJicsICdfJyk7CiAgICAgIHJldHVybiAnJHtpbnZvY2F0aW9uTmFtZX1cJGJvZHlcJCR7Y2xhc3NOYW1lfSc7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgaW5zdGFuY2VNZXRob2ROYW1lKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIHVzZSBvZiBbQ29uc3RydWN0b3JCb2R5RW50aXR5XSBhbmQKICAgIC8vIFtKR2VuZXJhdG9yQm9keV0uIFRoZSBjb2RlZ2VuIG1vZGVsIHNob3VsZCBiZSBleHBsaWNpdCBhYm91dCBpdHMKICAgIC8vIGNvbnN0cnVjdG9yIGJvZHkgZWxlbWVudHMuCiAgICBpZiAobWV0aG9kIGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSkgewogICAgICByZXR1cm4gY29uc3RydWN0b3JCb2R5TmFtZShtZXRob2QpOwogICAgfQogICAgaWYgKG1ldGhvZCBpcyBKR2VuZXJhdG9yQm9keSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yQm9keUluc3RhbmNlTWV0aG9kTmFtZShtZXRob2QpOwogICAgfQogICAgcmV0dXJuIGludm9jYXRpb25OYW1lKG5ldyBTZWxlY3Rvci5mcm9tRWxlbWVudChtZXRob2QpKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBhbm5vdGF0ZWQgbmFtZSBmb3IgYSB2YXJpYW50IG9mIGBjYWxsYC4KICAvLy8gVGhlIHJlc3VsdCBoYXMgdGhlIGZvcm06CiAgLy8vCiAgLy8vICAgICBjYWxsJDxOPiRuYW1lZFBhcmFtMS4uLiRuYW1lZFBhcmFtPE0+CiAgLy8vCiAgLy8vIFRoaXMgbmFtZSBjYW5ub3QgYmUgbWluaWZpZWQgYmVjYXVzZSBpdCBpcyBnZW5lcmF0ZWQgYnkgc3RyaW5nCiAgLy8vIGNvbmNhdGVuYXRpb24gYXQgcnVudGltZSwgYnkgYXBwbHlGdW5jdGlvbiBpbiBqc19oZWxwZXIuZGFydC4KICBqc0FzdC5OYW1lIGRlcml2ZUNhbGxNZXRob2ROYW1lKExpc3Q8U3RyaW5nPiBzdWZmaXgpIHsKICAgIC8vIFRPRE8oYXNnZXJmKTogQXZvaWQgY2xhc2hlcyB3aGVuIG5hbWVkIHBhcmFtZXRlcnMgY29udGFpbiAkIHN5bWJvbHMuCiAgICByZXR1cm4gbmV3IFN0cmluZ0JhY2tlZE5hbWUoCiAgICAgICAgJyR7Zml4ZWROYW1lcy5jYWxsUHJlZml4fVwkJHtzdWZmaXguam9pbihyJyQnKX0nKTsKICB9CgogIC8vLyBUaGUgc3VmZml4IGxpc3QgZm9yIHRoZSBwYXR0ZXJuOgogIC8vLwogIC8vLyAgICAgJDxUPiQ8Tj4kbmFtZWRQYXJhbTEuLi4kbmFtZWRQYXJhbTxNPgogIC8vLwogIC8vLyBXaGVyZSA8VD4gaXMgdGhlIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cywgPE4+IGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbAogIC8vLyBhcmd1bWVudHMgYW5kIDxNPiBpcyB0aGUgbnVtYmVyIG9mIG5hbWVkIGFyZ3VtZW50cy4KICAvLy8KICAvLy8gSWYgdGhlcmUgYXJlIG5vIHR5cGUgYXJndW1lbnRzIHRoZSBgJDxUPmAgaXMgb21pdHRlZC4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciB0aGUgYW5ub3RhdGVkIG5hbWVzIG9mIGBjYWxsYCwgYW5kIGZvciB0aGUgcHJvcG9zZWQgbmFtZQogIC8vLyBmb3Igb3RoZXIgaW5zdGFuY2UgbWV0aG9kcy4KICBzdGF0aWMgTGlzdDxTdHJpbmc+IGNhbGxTdWZmaXhGb3JTdHJ1Y3R1cmUoQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICBMaXN0PFN0cmluZz4gc3VmZml4ZXMgPSBbXTsKICAgIGlmIChjYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID4gMCkgewogICAgICBzdWZmaXhlcy5hZGQoJyR7Y2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudH0nKTsKICAgIH0KICAgIHN1ZmZpeGVzLmFkZCgnJHtjYWxsU3RydWN0dXJlLmFyZ3VtZW50Q291bnR9Jyk7CiAgICBzdWZmaXhlcy5hZGRBbGwoY2FsbFN0cnVjdHVyZS5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKSk7CiAgICByZXR1cm4gc3VmZml4ZXM7CiAgfQoKICAvLy8gVGhlIHN1ZmZpeCBsaXN0IGZvciB0aGUgcGF0dGVybjoKICAvLy8KICAvLy8gICAgICQ8Tj4kbmFtZWRQYXJhbTEuLi4kbmFtZWRQYXJhbTxNPgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIHRoZSBhbm5vdGF0ZWQgbmFtZXMgb2YgYGNhbGxgLCBhbmQgZm9yIHRoZSBwcm9wb3NlZCBuYW1lCiAgLy8vIGZvciBvdGhlciBpbnN0YW5jZSBtZXRob2RzLgogIExpc3Q8U3RyaW5nPiBjYWxsU3VmZml4Rm9yU2lnbmF0dXJlKFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUpIHsKICAgIExpc3Q8U3RyaW5nPiBzdWZmaXhlcyA9IFsnJHtwYXJhbWV0ZXJTdHJ1Y3R1cmUudG90YWxQYXJhbWV0ZXJzfSddOwogICAgc3VmZml4ZXMuYWRkQWxsKHBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMpOwogICAgcmV0dXJuIHN1ZmZpeGVzOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBpbnZvY2F0aW9uTmFtZShTZWxlY3RvciBzZWxlY3RvcikgewogICAgc3dpdGNoIChzZWxlY3Rvci5raW5kKSB7CiAgICAgIGNhc2UgU2VsZWN0b3JLaW5kLkdFVFRFUjoKICAgICAgICBqc0FzdC5OYW1lIGRpc2FtYmlndWF0ZWROYW1lID0gX2Rpc2FtYmlndWF0ZU1lbWJlcihzZWxlY3Rvci5tZW1iZXJOYW1lKTsKICAgICAgICByZXR1cm4gZGVyaXZlR2V0dGVyTmFtZShkaXNhbWJpZ3VhdGVkTmFtZSk7CgogICAgICBjYXNlIFNlbGVjdG9yS2luZC5TRVRURVI6CiAgICAgICAganNBc3QuTmFtZSBkaXNhbWJpZ3VhdGVkTmFtZSA9IF9kaXNhbWJpZ3VhdGVNZW1iZXIoc2VsZWN0b3IubWVtYmVyTmFtZSk7CiAgICAgICAgcmV0dXJuIGRlcml2ZVNldHRlck5hbWUoZGlzYW1iaWd1YXRlZE5hbWUpOwoKICAgICAgY2FzZSBTZWxlY3RvcktpbmQuT1BFUkFUT1I6CiAgICAgIGNhc2UgU2VsZWN0b3JLaW5kLklOREVYOgogICAgICAgIFN0cmluZyBvcGVyYXRvcklkZW50aWZpZXIgPSBvcGVyYXRvck5hbWVUb0lkZW50aWZpZXIoc2VsZWN0b3IubmFtZSk7CiAgICAgICAganNBc3QuTmFtZSBkaXNhbWJpZ3VhdGVkTmFtZSA9CiAgICAgICAgICAgIF9kaXNhbWJpZ3VhdGVPcGVyYXRvcihvcGVyYXRvcklkZW50aWZpZXIpOwogICAgICAgIHJldHVybiBkaXNhbWJpZ3VhdGVkTmFtZTsgLy8gT3BlcmF0b3JzIGFyZSBub3QgYW5ub3RhdGVkLgoKICAgICAgY2FzZSBTZWxlY3RvcktpbmQuQ0FMTDoKICAgICAgICBMaXN0PFN0cmluZz4gc3VmZml4ID0gY2FsbFN1ZmZpeEZvclN0cnVjdHVyZShzZWxlY3Rvci5jYWxsU3RydWN0dXJlKTsKICAgICAgICBpZiAoc2VsZWN0b3IubmFtZSA9PSBJZGVudGlmaWVycy5jYWxsKSB7CiAgICAgICAgICAvLyBEZXJpdmUgdGhlIGFubm90YXRlZCBuYW1lIGZvciB0aGlzIHZhcmlhbnQgb2YgJ2NhbGwnLgogICAgICAgICAgcmV0dXJuIGRlcml2ZUNhbGxNZXRob2ROYW1lKHN1ZmZpeCk7CiAgICAgICAgfQogICAgICAgIGpzQXN0Lk5hbWUgZGlzYW1iaWd1YXRlZE5hbWUgPQogICAgICAgICAgICBfZGlzYW1iaWd1YXRlTWVtYmVyKHNlbGVjdG9yLm1lbWJlck5hbWUsIHN1ZmZpeCk7CiAgICAgICAgcmV0dXJuIGRpc2FtYmlndWF0ZWROYW1lOyAvLyBNZXRob2RzIG90aGVyIHRoYW4gY2FsbCBhcmUgbm90IGFubm90YXRlZC4KCiAgICAgIGNhc2UgU2VsZWN0b3JLaW5kLlNQRUNJQUw6CiAgICAgICAgcmV0dXJuIHNwZWNpYWxTZWxlY3Rvck5hbWUoc2VsZWN0b3IpOwoKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAnVW5leHBlY3RlZCBzZWxlY3RvciBraW5kOiAke3NlbGVjdG9yLmtpbmR9Jyk7CiAgICB9CiAgfQoKICBqc0FzdC5OYW1lIHNwZWNpYWxTZWxlY3Rvck5hbWUoU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIGFzc2VydChzZWxlY3Rvci5raW5kID09IFNlbGVjdG9yS2luZC5TUEVDSUFMKTsKICAgIGlmIChzZWxlY3Rvci5tZW1iZXJOYW1lID09IE5hbWVzLmdlbmVyaWNJbnN0YW50aWF0aW9uKSB7CiAgICAgIHJldHVybiBuZXcgU3RyaW5nQmFja2VkTmFtZSgnJHtnZW5lcmljSW5zdGFudGlhdGlvblByZWZpeH0nCiAgICAgICAgICAnJHtzZWxlY3Rvci5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50fScpOwogICAgfQoKICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICdVbmV4cGVjdGVkIHNwZWNpYWwgc2VsZWN0b3I6ICRzZWxlY3RvcicpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGludGVybmFsIG5hbWUgdXNlZCBmb3IgYW4gaW52b2NhdGlvbiBtaXJyb3Igb2YgdGhpcyBzZWxlY3Rvci4KICBqc0FzdC5OYW1lIGludm9jYXRpb25NaXJyb3JJbnRlcm5hbE5hbWUoU2VsZWN0b3Igc2VsZWN0b3IpID0+CiAgICAgIGludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKCiAgLy8vIFJldHVybnMgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZSBmb3IgdGhlIGdpdmVuIGZpZWxkLCB1c2VkIGZvciBjb25zdHJ1Y3RpbmcKICAvLy8gdGhlIGdldHRlciBhbmQgc2V0dGVyIG5hbWVzLgogIGpzQXN0Lk5hbWUgZmllbGRBY2Nlc3Nvck5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcgogICAgICAgID8gX2Rpc2FtYmlndWF0ZU1lbWJlcihlbGVtZW50Lm1lbWJlck5hbWUpCiAgICAgICAgOiBfZGlzYW1iaWd1YXRlR2xvYmFsTWVtYmVyKGVsZW1lbnQpOwogIH0KCiAgLy8vIFJldHVybnMgbmFtZSBvZiB0aGUgSmF2YVNjcmlwdCBwcm9wZXJ0eSB1c2VkIHRvIHN0b3JlIGEgc3RhdGljIG9yIGluc3RhbmNlCiAgLy8vIGZpZWxkLgogIGpzQXN0Lk5hbWUgZmllbGRQcm9wZXJ0eU5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcgogICAgICAgID8gaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShlbGVtZW50KQogICAgICAgIDogX2Rpc2FtYmlndWF0ZUdsb2JhbE1lbWJlcihlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSA9PgogICAgICBfZGlzYW1iaWd1YXRlR2xvYmFsTWVtYmVyKGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGdsb2JhbFByb3BlcnR5TmFtZUZvckNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIF9kaXNhbWJpZ3VhdGVHbG9iYWxUeXBlKGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGdsb2JhbFByb3BlcnR5TmFtZUZvclR5cGUoRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIF9kaXNhbWJpZ3VhdGVHbG9iYWxUeXBlKGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGUoVHlwZVZhcmlhYmxlRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfdHlwZVZhcmlhYmxlTmFtZXNbZWxlbWVudF0gPz89CiAgICAgICAgX2dsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGUoZWxlbWVudCk7CiAgfQoKICBqc0FzdC5OYW1lIF9nbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlKFR5cGVWYXJpYWJsZUVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBDb25zdHJ1Y3QgYSBuYW1lIGZyb20gdGhlIGNsYXNzIG5hbWUgYW5kIHR5cGUgdmFyaWFibGUsCiAgICAvLyBlLmcuICJMaXN0TWl4aW4uRSIuIFRoZSBjbGFzcyBuYW1lIGlzIHVuaXF1ZSB3aGljaCBlbnN1cmVzIHRoZSB0eXBlCiAgICAvLyB2YXJpYWJsZSBuYW1lIGlzIHVuaXF1ZS4KICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IEJldHRlciBtaW5pZmllZCBuYW1pbmcuIFR5cGUgdmFyaWFibGUgbmFtZXMgYXJlIHVzZWQgaW4gdHlwZQogICAgLy8gcmVjaXBlcyBhbmQgbXVzdCBjb250YWluIGEgcGVyaW9kICgnLicpLiBUaGV5IGNhbiBiZSBmcmVxdWVuY3ktYXNzaWduZWQKICAgIC8vIGluZGVwZW5kZW50bHkgb2YgdGhlIGNsYXNzIG5hbWUsIGUuZy4gJy5hJywgJy4yJywgJ2EuJywgZXRjLgogICAgU3RyaW5nIG5hbWUgPSBlbGVtZW50Lm5hbWU7CiAgICBpZiAobmFtZS5sZW5ndGggPiAxKSBuYW1lID0gJyR7ZWxlbWVudC5pbmRleH0nOyAvLyBBdm9pZCBsb25nIG5hbWVzIChyYXJlKS4KICAgIHJldHVybiBDb21wb3VuZE5hbWUoWwogICAgICBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzcyhlbGVtZW50LnR5cGVEZWNsYXJhdGlvbiksCiAgICAgIFN0cmluZ0JhY2tlZE5hbWUoJy4kbmFtZScpCiAgICBdKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CgogICAgaWYgKF9uYXRpdmVEYXRhLmhhc0ZpeGVkQmFja2VuZE5hbWUoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCYWNrZWROYW1lKF9uYXRpdmVEYXRhLmdldEZpeGVkQmFja2VuZE5hbWUoZWxlbWVudCkpOwogICAgfQoKICAgIC8vIFNvbWUgZWxlbWVudHMsIGxpa2UgZS5nLiBpbnN0YW5jZXMgb2YgQm94RmllbGRFbGVtZW50IGFyZSBzcGVjaWFsLgogICAgLy8gVGhleSBhcmUgY3JlYXRlZCB3aXRoIGEgdW5pcXVlIGFuZCBzYWZlIG5hbWUgZm9yIHRoZSBlbGVtZW50IG1vZGVsLgogICAgLy8gV2hpbGUgdGhlaXIgbmFtZSBpcyB1bmlxdWUsIGl0IGlzIG5vdCB2ZXJ5IHJlYWRhYmxlLiBTbyB3ZSB0cnkgdG8KICAgIC8vIHByZXNlcnZlIHRoZSBvcmlnaW5hbCwgcHJvcG9zZWQgbmFtZS4KICAgIC8vIEhvd2V2ZXIsIGFzIGJveGVzIGFyZSBub3QgcmVhbGx5IGluc3RhbmNlcyBvZiBjbGFzc2VzLCB0aGUgdXN1YWwgbmFtaW5nCiAgICAvLyBzY2hlbWUgdGhhdCB0cmllcyB0byBhdm9pZCBuYW1lIGNsYXNoZXMgd2l0aCBzdXBlciBjbGFzc2VzIGRvZXMgbm90CiAgICAvLyBhcHBseS4gU28gd2UgY2FuIGRpcmVjdGx5IGdyYWIgYSBuYW1lLgogICAgaWYgKGVsZW1lbnQgaXMgSlNFbnRpdHkpIHsKICAgICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVJbnRlcm5hbE1lbWJlcigKICAgICAgICAgIGVsZW1lbnQsICgpID0+IChlbGVtZW50IGFzIEpTRW50aXR5KS5kZWNsYXJlZE5hbWUpOwogICAgfQoKICAgIC8vIElmIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCBtaWdodCBjbGFzaCB3aXRoIGFub3RoZXIgZmllbGQsCiAgICAvLyB1c2UgYSBtYW5nbGVkIGZpZWxkIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGNsYXNoZXMuCiAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIGNsYXNzIGV4dGVuZHMgYSBuYXRpdmUgY2xhc3MsIHRoYXQgbmF0aXZlIGNsYXNzIG1pZ2h0CiAgICAvLyBoYXZlIGZpZWxkcyB3aXRoIGZpeGVkIGJhY2tlbmQgbmFtZXMsIHNvIHdlIGFzc3VtZSB0aGUgd29yc3QgYW5kIGFsd2F5cwogICAgLy8gbWFuZ2xlIHRoZSBmaWVsZCBuYW1lcyBvZiBjbGFzc2VzIGV4dGVuZGluZyBuYXRpdmUgY2xhc3Nlcy4KICAgIC8vIE1ldGhvZHMgb24gc3VjaCBjbGFzc2VzIGFyZSBzdG9yZWQgb24gdGhlIGludGVyY2VwdG9yLCBub3QgdGhlIGluc3RhbmNlLAogICAgLy8gc28gb25seSBmaWVsZHMgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGNsYXNoIHdpdGggYSBuYXRpdmUgcHJvcGVydHkgbmFtZS4KICAgIGlmIChfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihlbmNsb3NpbmdDbGFzcykgfHwKICAgICAgICBfaXNTaGFkb3dpbmdTdXBlckZpZWxkKGVsZW1lbnQpIHx8CiAgICAgICAgX2lzVXNlckNsYXNzRXh0ZW5kaW5nTmF0aXZlKGVuY2xvc2luZ0NsYXNzKSkgewogICAgICBTdHJpbmcgcHJvcG9zZU5hbWUoKSA9PiAnJHtlbmNsb3NpbmdDbGFzcy5uYW1lfV8ke2VsZW1lbnQubmFtZX0nOwogICAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUludGVybmFsTWVtYmVyKGVsZW1lbnQsIHByb3Bvc2VOYW1lKTsKICAgIH0KCiAgICAvLyBObyBzdXBlcmNsYXNzIHVzZXMgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZSBhcyBhIHByb3BlcnR5IG5hbWUsIHNvIHdlIGNhbgogICAgLy8gdXNlIGl0IGZvciB0aGlzIGZpZWxkLiBUaGlzIGdlbmVyYXRlcyBuaWNlciBmaWVsZCBuYW1lcyBzaW5jZSBvdGhlcndpc2UKICAgIC8vIHRoZSBmaWVsZCBuYW1lIHdvdWxkIGhhdmUgdG8gYmUgbWFuZ2xlZC4KICAgIHJldHVybiBfZGlzYW1iaWd1YXRlTWVtYmVyKG5ldyBOYW1lKGVsZW1lbnQubmFtZSwgZWxlbWVudC5saWJyYXJ5KSk7CiAgfQoKICBib29sIF9pc1NoYWRvd2luZ1N1cGVyRmllbGQoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQuaXNGaWVsZCk7CiAgICBTdHJpbmcgZmllbGROYW1lID0gZWxlbWVudC5uYW1lOwogICAgYm9vbCBpc1ByaXZhdGUgPSBOYW1lLmlzUHJpdmF0ZU5hbWUoZmllbGROYW1lKTsKICAgIExpYnJhcnlFbnRpdHkgbWVtYmVyTGlicmFyeSA9IGVsZW1lbnQubGlicmFyeTsKICAgIENsYXNzRW50aXR5IGxvb2t1cENsYXNzID0KICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyk7CiAgICB3aGlsZSAobG9va3VwQ2xhc3MgIT0gbnVsbCkgewogICAgICBNZW1iZXJFbnRpdHkgZm91bmRNZW1iZXIgPQogICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKGxvb2t1cENsYXNzLCBmaWVsZE5hbWUpOwogICAgICBpZiAoZm91bmRNZW1iZXIgIT0gbnVsbCkgewogICAgICAgIGlmIChmb3VuZE1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICBpZiAoIWlzUHJpdmF0ZSB8fCBtZW1iZXJMaWJyYXJ5ID09IGZvdW5kTWVtYmVyLmxpYnJhcnkpIHsKICAgICAgICAgICAgLy8gUHJpdmF0ZSBmaWVsZHMgY2FuIG9ubHkgYmUgc2hhZG93ZWQgYnkgYSBmaWVsZCBkZWNsYXJlZCBpbiB0aGUKICAgICAgICAgICAgLy8gc2FtZSBsaWJyYXJ5LgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgbG9va3VwQ2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MobG9va3VwQ2xhc3MpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFRydWUgaWYgW2NsYXNzX10gaXMgYSBub24tbmF0aXZlIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBhIG5hdGl2ZSBjbGFzcy4KICBib29sIF9pc1VzZXJDbGFzc0V4dGVuZGluZ05hdGl2ZShDbGFzc0VudGl0eSBjbGFzc18pIHsKICAgIHJldHVybiAhX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhjbGFzc18pICYmCiAgICAgICAgX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xhc3NfKTsKICB9CgogIC8vLyBBbm5vdGF0ZWQgbmFtZSBmb3IgdGhlIHNldHRlciBvZiBbZWxlbWVudF0uCiAganNBc3QuTmFtZSBzZXR0ZXJGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIC8vIFdlIGR5bmFtaWNhbGx5IGNyZWF0ZSBzZXR0ZXJzIGZyb20gdGhlIGZpZWxkLW5hbWUuIFRoZSBzZXR0ZXIgbmFtZSBtdXN0CiAgICAvLyB0aGVyZWZvcmUgYmUgZGVyaXZlZCBmcm9tIHRoZSBpbnN0YW5jZSBmaWVsZC1uYW1lLgogICAganNBc3QuTmFtZSBuYW1lID0gX2Rpc2FtYmlndWF0ZU1lbWJlcihlbGVtZW50Lm1lbWJlck5hbWUpOwogICAgcmV0dXJuIGRlcml2ZVNldHRlck5hbWUobmFtZSk7CiAgfQoKICAvLy8gQW5ub3RhdGVkIG5hbWUgZm9yIHRoZSBzZXR0ZXIgb2YgYW55IG1lbWJlciB3aXRoIFtkaXNhbWJpZ3VhdGVkTmFtZV0uCiAganNBc3QuTmFtZSBkZXJpdmVTZXR0ZXJOYW1lKGpzQXN0Lk5hbWUgZGlzYW1iaWd1YXRlZE5hbWUpIHsKICAgIC8vIFdlIGR5bmFtaWNhbGx5IGNyZWF0ZSBzZXR0ZXJzIGZyb20gdGhlIGZpZWxkLW5hbWUuIFRoZSBzZXR0ZXIgbmFtZSBtdXN0CiAgICAvLyB0aGVyZWZvcmUgYmUgZGVyaXZlZCBmcm9tIHRoZSBpbnN0YW5jZSBmaWVsZC1uYW1lLgogICAgcmV0dXJuIHVzZXJTZXR0ZXJzW2Rpc2FtYmlndWF0ZWROYW1lXSA/Pz0KICAgICAgICBuZXcgU2V0dGVyTmFtZShfbGl0ZXJhbFNldHRlclByZWZpeCwgZGlzYW1iaWd1YXRlZE5hbWUpOwogIH0KCiAgLy8vIEFubm90YXRlZCBuYW1lIGZvciB0aGUgc2V0dGVyIG9mIGFueSBtZW1iZXIgd2l0aCBbZGlzYW1iaWd1YXRlZE5hbWVdLgogIGpzQXN0Lk5hbWUgZGVyaXZlR2V0dGVyTmFtZShqc0FzdC5OYW1lIGRpc2FtYmlndWF0ZWROYW1lKSB7CiAgICAvLyBXZSBkeW5hbWljYWxseSBjcmVhdGUgZ2V0dGVycyBmcm9tIHRoZSBmaWVsZC1uYW1lLiBUaGUgZ2V0dGVyIG5hbWUgbXVzdAogICAgLy8gdGhlcmVmb3JlIGJlIGRlcml2ZWQgZnJvbSB0aGUgaW5zdGFuY2UgZmllbGQtbmFtZS4KICAgIHJldHVybiB1c2VyR2V0dGVyc1tkaXNhbWJpZ3VhdGVkTmFtZV0gPz89CiAgICAgICAgbmV3IEdldHRlck5hbWUoX2xpdGVyYWxHZXR0ZXJQcmVmaXgsIGRpc2FtYmlndWF0ZWROYW1lKTsKICB9CgogIC8vLyBBbm5vdGF0ZWQgbmFtZSBmb3IgdGhlIGdldHRlciBvZiBbZWxlbWVudF0uCiAganNBc3QuTmFtZSBnZXR0ZXJGb3JFbGVtZW50KE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBXZSBkeW5hbWljYWxseSBjcmVhdGUgZ2V0dGVycyBmcm9tIHRoZSBmaWVsZC1uYW1lLiBUaGUgZ2V0dGVyIG5hbWUgbXVzdAogICAgLy8gdGhlcmVmb3JlIGJlIGRlcml2ZWQgZnJvbSB0aGUgaW5zdGFuY2UgZmllbGQtbmFtZS4KICAgIGpzQXN0Lk5hbWUgbmFtZSA9IF9kaXNhbWJpZ3VhdGVNZW1iZXIoZWxlbWVudC5tZW1iZXJOYW1lKTsKICAgIHJldHVybiBkZXJpdmVHZXR0ZXJOYW1lKG5hbWUpOwogIH0KCiAgLy8vIFByb3BlcnR5IG5hbWUgZm9yIHRoZSBnZXR0ZXIgb2YgYW4gaW5zdGFuY2UgbWVtYmVyIHdpdGggW29yaWdpbmFsTmFtZV0uCiAganNBc3QuTmFtZSBnZXR0ZXJGb3JNZW1iZXIoTmFtZSBvcmlnaW5hbE5hbWUpIHsKICAgIGpzQXN0Lk5hbWUgZGlzYW1iaWd1YXRlZE5hbWUgPSBfZGlzYW1iaWd1YXRlTWVtYmVyKG9yaWdpbmFsTmFtZSk7CiAgICByZXR1cm4gZGVyaXZlR2V0dGVyTmFtZShkaXNhbWJpZ3VhdGVkTmFtZSk7CiAgfQoKICAvLy8gRGlzYW1iaWd1YXRlZCBuYW1lIGZvciBhIGNvbXBpbGVyLW93bmVkIGdsb2JhbCB2YXJpYWJsZS4KICAvLy8KICAvLy8gVGhlIHJlc3VsdGluZyBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIGdsb2JhbC1tZW1iZXIgbmFtZXNwYWNlLgogIGpzQXN0Lk5hbWUgX2Rpc2FtYmlndWF0ZUludGVybmFsR2xvYmFsKFN0cmluZyBuYW1lKSB7CiAgICBqc0FzdC5OYW1lIG5ld05hbWUgPSBpbnRlcm5hbEdsb2JhbHNbbmFtZV07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB7CiAgICAgIG5ld05hbWUgPSBnZXRGcmVzaE5hbWUoZ2xvYmFsU2NvcGUsIG5hbWUpOwogICAgICBpbnRlcm5hbEdsb2JhbHNbbmFtZV0gPSBuZXdOYW1lOwogICAgfQogICAgcmV0dXJuIF9uZXdSZWZlcmVuY2UobmV3TmFtZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgcHJvcGVydHkgbmFtZSB0byB1c2UgZm9yIGEgY29tcGlsZXItb3duZXIgZ2xvYmFsIHZhcmlhYmxlLAogIC8vLyBpLmUuIG9uZSB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55IGVsZW1lbnQgYnV0IGlzIHVzZWQgYXMgYSB1dGlsaXR5CiAgLy8vIGdsb2JhbCBieSBjb2RlIGdlbmVyYXRpb24uCiAgLy8vCiAgLy8vIFtuYW1lXSBmdW5jdGlvbnMgYXMgYm90aCB0aGUgcHJvcG9zZWQgbmFtZSBmb3IgdGhlIGdsb2JhbCwgYW5kIGFzIGEga2V5CiAgLy8vIGlkZW50aWZ5aW5nIHRoZSBnbG9iYWwuIFRoZSBbbmFtZV0gbXVzdCBub3QgY29udGFpbiBgJGAgc3ltYm9scywgc2luY2UKICAvLy8gdGhlIFtOYW1lcl0gdXNlcyB0aG9zZSBuYW1lcyBpbnRlcm5hbGx5LgogIC8vLwogIC8vLyBUaGlzIHByb3ZpZGVzIGFuIGVhc3kgbWVjaGFuaXNtIG9mIGF2b2lkaW5nIGEgbmFtZS1jbGFzaCB3aXRoIHVzZXItc3BhY2UKICAvLy8gZ2xvYmFscywgYWx0aG91Z2ggdGhlIGNhbGxlcnMgb2YgbXVzdCBzdGlsbCB0YWtlIGNhcmUgbm90IHRvIGFjY2lkZW50YWxseQogIC8vLyBwYXNzIGluIHRoZSBzYW1lIFtuYW1lXSBmb3IgdHdvIGRpZmZlcmVudCBpbnRlcm5hbCBnbG9iYWxzLgogIGpzQXN0Lk5hbWUgaW50ZXJuYWxHbG9iYWwoU3RyaW5nIG5hbWUpIHsKICAgIGFzc2VydCghbmFtZS5jb250YWlucyhyJyQnKSk7CiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUludGVybmFsR2xvYmFsKG5hbWUpOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBhIHVuaXF1ZSBrZXkgZm9yIFtsaWJyYXJ5XS4KICAvLy8KICAvLy8gS2V5cyBhcmUgbWVhbnQgdG8gYmUgdXNlZCBpbiBtYXBzIGFuZCBzaG91bGQgbm90IGJlIHZpc2libGUgaW4gdGhlIG91dHB1dC4KICBTdHJpbmcgX2dlbmVyYXRlTGlicmFyeUtleShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIHJldHVybiBfbGlicmFyeUtleXMucHV0SWZBYnNlbnQobGlicmFyeSwgKCkgewogICAgICBTdHJpbmcga2V5QmFzZSA9IGxpYnJhcnkubmFtZTsKICAgICAgaW50IGNvdW50ZXIgPSAwOwogICAgICBTdHJpbmcga2V5ID0ga2V5QmFzZTsKICAgICAgd2hpbGUgKF9saWJyYXJ5S2V5cy52YWx1ZXMuY29udGFpbnMoa2V5KSkgewogICAgICAgIGtleSA9ICIka2V5QmFzZSR7Y291bnRlcisrfSI7CiAgICAgIH0KICAgICAgcmV0dXJuIGtleTsKICAgIH0pOwogIH0KCiAganNBc3QuTmFtZSBfZGlzYW1iaWd1YXRlR2xvYmFsTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUdsb2JhbDxNZW1iZXJFbnRpdHk+KAogICAgICAgIGVsZW1lbnQsIF9wcm9wb3NlTmFtZUZvck1lbWJlciwgdXNlckdsb2JhbHMpOwogIH0KCiAganNBc3QuTmFtZSBfZGlzYW1iaWd1YXRlR2xvYmFsVHlwZShFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVHbG9iYWwoZWxlbWVudCwgX3Byb3Bvc2VOYW1lRm9yVHlwZSwgdXNlckdsb2JhbHMpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZSBmb3IgYSB0b3AtbGV2ZWwgb3Igc3RhdGljIGVsZW1lbnQuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHRpbmcgbmFtZSBpcyB1bmlxdWUgd2l0aGluIHRoZSBnbG9iYWwtbWVtYmVyIG5hbWVzcGFjZS4KICBqc0FzdC5OYW1lIF9kaXNhbWJpZ3VhdGVHbG9iYWw8VCBleHRlbmRzIEVudGl0eT4oVCBlbGVtZW50LAogICAgICBTdHJpbmcgcHJvcG9zZU5hbWUoVCBlbGVtZW50KSwgTWFwPEVudGl0eSwganNBc3QuTmFtZT4gZ2xvYmFscykgewogICAgLy8gVE9ETyhhc2dlcmYpOiBXZSBjYW4gcmV1c2UgbW9yZSBzaG9ydCBuYW1lcyBpZiB3ZSBkaXNhbWJpZ3VhdGUgd2l0aAogICAgLy8gYSBzZXBhcmF0ZSBuYW1lc3BhY2UgZm9yIGVhY2ggb2YgdGhlIGdsb2JhbCBob2xkZXIgb2JqZWN0cy4KICAgIGpzQXN0Lk5hbWUgbmV3TmFtZSA9IGdsb2JhbHNbZWxlbWVudF07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBwcm9wb3NlZE5hbWUgPSBwcm9wb3NlTmFtZShlbGVtZW50KTsKICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShnbG9iYWxTY29wZSwgcHJvcG9zZWROYW1lKTsKICAgICAgZ2xvYmFsc1tlbGVtZW50XSA9IG5ld05hbWU7CiAgICB9CiAgICByZXR1cm4gX25ld1JlZmVyZW5jZShuZXdOYW1lKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBkaXNhbWJpZ3VhdGVkIG5hbWUgZm9yIGFuIGluc3RhbmNlIG1ldGhvZCBvciBmaWVsZAogIC8vLyB3aXRoIFtvcmlnaW5hbE5hbWVdIGluIFtsaWJyYXJ5XS4KICAvLy8KICAvLy8gW2xpYnJhcnldIG1heSBiZSBgbnVsbGAgaWYgW29yaWdpbmFsTmFtZV0gaXMga25vd24gdG8gYmUgcHVibGljLgogIC8vLwogIC8vLyBUaGlzIGlzIHRoZSBuYW1lIHVzZWQgZm9yIGRlcml2aW5nIHByb3BlcnR5IG5hbWVzIG9mIGFjY2Vzc29ycyAoZ2V0dGVycwogIC8vLyBhbmQgc2V0dGVycykgYW5kIGFzIHByb3BlcnR5IG5hbWUgZm9yIHN0b3JpbmcgbWV0aG9kcyBhbmQgbWV0aG9kIHN0dWJzLgogIC8vLwogIC8vLyBbc3VmZml4ZXNdIGRlbm90ZSBhbiBleHRlbnNpb24gb2YgW29yaWdpbmFsTmFtZV0gdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbQogIC8vLyBvdGhlciBtZW1iZXJzIHdpdGggdGhhdCBuYW1lLiBUaGVzZSBhcmUgdXNlZCB0byBlbmNvZGUgdGhlIGFyaXR5IGFuZAogIC8vLyBuYW1lZCBwYXJhbWV0ZXJzIHRvIGEgbWV0aG9kLiBEaXNhbWJpZ3VhdGluZyB0aGUgc2FtZSBbb3JpZ2luYWxOYW1lXSB3aXRoCiAgLy8vIGRpZmZlcmVudCBbc3VmZml4ZXNdIHdpbGwgeWllbGQgZGlmZmVyZW50IGRpc2FtYmlndWF0ZWQgbmFtZXMuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHRpbmcgbmFtZSwgYW5kIGl0cyBhc3NvY2lhdGVkIGFubm90YXRlZCBuYW1lcywgYXJlIHVuaXF1ZQogIC8vLyB0byB0aGUgKFtvcmlnaW5hbE5hbWVdLCBbc3VmZml4ZXNdKSBwYWlyIHdpdGhpbiB0aGUgaW5zdGFuY2UtbWVtYmVyCiAgLy8vIG5hbWVzcGFjZS4KICBqc0FzdC5OYW1lIF9kaXNhbWJpZ3VhdGVNZW1iZXIoTmFtZSBvcmlnaW5hbE5hbWUsCiAgICAgIFtMaXN0PFN0cmluZz4gc3VmZml4ZXMgPSBjb25zdCBbXV0pIHsKICAgIC8vIEJ1aWxkIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBsaWJyYXJ5IG5hbWUsIGlmIHRoZSBuYW1lIGlzIHByaXZhdGUuCiAgICBTdHJpbmcgbGlicmFyeUtleSA9CiAgICAgICAgb3JpZ2luYWxOYW1lLmlzUHJpdmF0ZSA/IF9nZW5lcmF0ZUxpYnJhcnlLZXkob3JpZ2luYWxOYW1lLmxpYnJhcnkpIDogJyc7CgogICAgLy8gSW4gdGhlIHVuaXF1ZSBrZXksIHNlcGFyYXRlIHRoZSBuYW1lIHBhcnRzIGJ5ICdAJy4KICAgIC8vIFRoaXMgYXZvaWRzIGNsYXNoZXMgc2luY2UgdGhlIG9yaWdpbmFsIG5hbWVzIGNhbm5vdCBjb250YWluIHRoYXQgc3ltYm9sLgogICAgU3RyaW5nIGtleSA9ICckbGlicmFyeUtleUAke29yaWdpbmFsTmFtZS50ZXh0fUAke3N1ZmZpeGVzLmpvaW4oJ0AnKX0nOwogICAganNBc3QuTmFtZSBuZXdOYW1lID0gdXNlckluc3RhbmNlTWVtYmVyc1trZXldOwogICAgaWYgKG5ld05hbWUgPT0gbnVsbCkgewogICAgICBTdHJpbmcgcHJvcG9zZWROYW1lID0gcHJpdmF0ZU5hbWUob3JpZ2luYWxOYW1lKTsKICAgICAgaWYgKCFzdWZmaXhlcy5pc0VtcHR5KSB7CiAgICAgICAgLy8gSW4gdGhlIHByb3Bvc2VkIG5hbWUsIHNlcGFyYXRlIHRoZSBuYW1lIHBhcnRzIGJ5ICckJywgYmVjYXVzZSB0aGUKICAgICAgICAvLyBwcm9wb3NlZCBuYW1lIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyLCBidXQgbm90IG5lY2Vzc2FyaWx5IHVuaXF1ZS4KICAgICAgICBwcm9wb3NlZE5hbWUgKz0gcickJyArIHN1ZmZpeGVzLmpvaW4ocickJyk7CiAgICAgIH0KICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShpbnN0YW5jZVNjb3BlLCBwcm9wb3NlZE5hbWUsCiAgICAgICAgICBzYW5pdGl6ZUZvckFubm90YXRpb25zOiB0cnVlKTsKICAgICAgdXNlckluc3RhbmNlTWVtYmVyc1trZXldID0gbmV3TmFtZTsKICAgICAgdXNlckluc3RhbmNlTWVtYmVyc09yaWdpbmFsTmFtZVtrZXldID0gJyRvcmlnaW5hbE5hbWUnOwogICAgfQogICAgcmV0dXJuIF9uZXdSZWZlcmVuY2UobmV3TmFtZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgZGlzYW1iaWd1YXRlZCBuYW1lIGZvciB0aGUgaW5zdGFuY2UgbWVtYmVyIGlkZW50aWZpZWQgYnkKICAvLy8gW2tleV0uCiAgLy8vCiAgLy8vIFdoZW4gYSBuYW1lIGZvciBhbiBlbGVtZW50IGlzIHJlcXVlc3RlZCBieSBrZXksIGl0IG1heSBub3QgYmUgcmVxdWVzdGVkCiAgLy8vIGJ5IGVsZW1lbnQgYXQgdGhlIHNhbWUgdGltZSwgYXMgdHdvIGRpZmZlcmVudCBuYW1lcyB3b3VsZCBiZSByZXR1cm5lZC4KICAvLy8KICAvLy8gSWYga2V5IGhhcyBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCwgW3Byb3Bvc2VOYW1lXSBpcyB1c2VkIHRvIGdlbmVyYXRlCiAgLy8vIGEgbmFtZSBwcm9wb3NhbCBmb3IgdGhlIGdpdmVuIGtleS4KICAvLy8KICAvLy8gW2tleV0gbXVzdCBub3QgY2xhc2ggd2l0aCB2YWxpZCBpbnN0YW5jZSBuYW1lcy4gVGhpcyBpcyB0eXBpY2FsbHkKICAvLy8gYWNoaWV2ZWQgYnkgdXNpbmcgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBpbiBba2V5XSB0aGF0IGlzIG5vdCB2YWxpZCBpbgogIC8vLyBpZGVudGlmaWVycywgZm9yIGV4YW1wbGUgdGhlIEAgc3ltYm9sLgogIGpzQXN0Lk5hbWUgX2Rpc2FtYmlndWF0ZU1lbWJlckJ5S2V5KFN0cmluZyBrZXksIFN0cmluZyBwcm9wb3NlTmFtZSgpKSB7CiAgICBqc0FzdC5OYW1lIG5ld05hbWUgPSB1c2VySW5zdGFuY2VNZW1iZXJzW2tleV07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBuYW1lID0gcHJvcG9zZU5hbWUoKTsKICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShpbnN0YW5jZVNjb3BlLCBuYW1lLCBzYW5pdGl6ZUZvckFubm90YXRpb25zOiB0cnVlKTsKICAgICAgdXNlckluc3RhbmNlTWVtYmVyc1trZXldID0gbmV3TmFtZTsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogY29uc2lkZXIgcGx1bWJpbmcgdGhlIG9yaWdpbmFsIG5hbWUgaW5zdGVhZC4KICAgICAgdXNlckluc3RhbmNlTWVtYmVyc09yaWdpbmFsTmFtZVtrZXldID0gbmFtZTsKICAgIH0KICAgIHJldHVybiBfbmV3UmVmZXJlbmNlKG5ld05hbWUpOwogIH0KCiAgLy8vIEZvcmNlcyB0aGUgcHVibGljIGluc3RhbmNlIG1lbWJlciB3aXRoIFtvcmlnaW5hbE5hbWVdIHRvIGhhdmUgdGhlIGdpdmVuCiAgLy8vIFtkaXNhbWJpZ3VhdGVkTmFtZV0uCiAgLy8vCiAgLy8vIFRoZSBbb3JpZ2luYWxOYW1lXSBtdXN0IG5vdCBoYXZlIGJlZW4gZGlzYW1iaWd1YXRlZCBiZWZvcmUsIGFuZCB0aGUKICAvLy8gW2Rpc2FtYmlndWF0ZWROYW1lXSBtdXN0IG5vdCBoYXZlIGJlZW4gdXNlZC4KICAvLy8KICAvLy8gVXNpbmcgW19kaXNhbWJpZ3VhdGVNZW1iZXJdIHdpdGggdGhlIGdpdmVuIFtvcmlnaW5hbE5hbWVdIGFuZCBubyBzdWZmaXhlcwogIC8vLyB3aWxsIHN1YnNlcXVlbnRseSByZXR1cm4gW2Rpc2FtYmlndWF0ZWROYW1lXS4KICB2b2lkIHJlc2VydmVQdWJsaWNNZW1iZXJOYW1lKFN0cmluZyBvcmlnaW5hbE5hbWUsIFN0cmluZyBkaXNhbWJpZ3VhdGVkTmFtZSkgewogICAgLy8gQnVpbGQgYSBrZXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgb25lIGJ1aWx0IGluIGRpc2FtYmlndWF0ZU1lbWJlci4KICAgIFN0cmluZyBsaWJyYXJ5UHJlZml4ID0gJyc7IC8vIFB1YmxpYyBuYW1lcyBoYXZlIGFuIGVtcHR5IGxpYnJhcnkgcHJlZml4LgogICAgU3RyaW5nIHN1ZmZpeCA9ICcnOyAvLyBXZSBkb24ndCBuZWVkIGFueSBzdWZmaXhlcy4KICAgIFN0cmluZyBrZXkgPSAnJGxpYnJhcnlQcmVmaXhAJG9yaWdpbmFsTmFtZUAkc3VmZml4JzsKICAgIGFzc2VydCghdXNlckluc3RhbmNlTWVtYmVycy5jb250YWluc0tleShrZXkpKTsKICAgIGFzc2VydCghaW5zdGFuY2VTY29wZS5pc1VzZWQoZGlzYW1iaWd1YXRlZE5hbWUpKTsKICAgIHVzZXJJbnN0YW5jZU1lbWJlcnNba2V5XSA9IG5ldyBTdHJpbmdCYWNrZWROYW1lKGRpc2FtYmlndWF0ZWROYW1lKTsKICAgIHVzZXJJbnN0YW5jZU1lbWJlcnNPcmlnaW5hbE5hbWVba2V5XSA9IG9yaWdpbmFsTmFtZTsKICAgIGluc3RhbmNlU2NvcGUucmVnaXN0ZXJVc2UoZGlzYW1iaWd1YXRlZE5hbWUpOwogIH0KCiAgLy8vIERpc2FtYmlndWF0ZWQgbmFtZSB1bmlxdWUgdG8gW2VsZW1lbnRdLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgYXMgdGhlIHByb3BlcnR5IG5hbWUgZm9yIGZpZWxkcywgdHlwZSB2YXJpYWJsZXMsCiAgLy8vIGNvbnN0cnVjdG9yIGJvZGllcywgYW5kIHN1cGVyLWFjY2Vzc29ycy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdGluZyBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIGluc3RhbmNlLW1lbWJlciBuYW1lc3BhY2UuCiAganNBc3QuTmFtZSBfZGlzYW1iaWd1YXRlSW50ZXJuYWxNZW1iZXIoCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LCBTdHJpbmcgcHJvcG9zZU5hbWUoKSkgewogICAganNBc3QuTmFtZSBuZXdOYW1lID0gaW50ZXJuYWxJbnN0YW5jZU1lbWJlcnNbZWxlbWVudF07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBuYW1lID0gcHJvcG9zZU5hbWUoKTsKCiAgICAgIGlmIChlbGVtZW50IGlzIFByaXZhdGVseU5hbWVkSlNFbnRpdHkpIHsKICAgICAgICBOYW1pbmdTY29wZSBzY29wZSA9IF9nZXRQcml2YXRlU2NvcGVGb3IoZWxlbWVudCk7CiAgICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShzY29wZSwgbmFtZSwKICAgICAgICAgICAgc2FuaXRpemVGb3JBbm5vdGF0aW9uczogdHJ1ZSwgc2FuaXRpemVGb3JOYXRpdmVzOiBmYWxzZSk7CiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZU1lbWJlcnNbZWxlbWVudF0gPSBuZXdOYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIGJvb2wgbWF5Q2xhc2hOYXRpdmUgPQogICAgICAgICAgICBfaXNVc2VyQ2xhc3NFeHRlbmRpbmdOYXRpdmUoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyk7CiAgICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShpbnN0YW5jZVNjb3BlLCBuYW1lLAogICAgICAgICAgICBzYW5pdGl6ZUZvckFubm90YXRpb25zOiB0cnVlLCBzYW5pdGl6ZUZvck5hdGl2ZXM6IG1heUNsYXNoTmF0aXZlKTsKICAgICAgICBpbnRlcm5hbEluc3RhbmNlTWVtYmVyc1tlbGVtZW50XSA9IG5ld05hbWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfbmV3UmVmZXJlbmNlKG5ld05hbWUpOwogIH0KCiAgLy8vIERpc2FtYmlndWF0ZWQgbmFtZSBmb3IgdGhlIGdpdmVuIG9wZXJhdG9yLgogIC8vLwogIC8vLyBbb3BlcmF0b3JJZGVudGlmaWVyXSBtdXN0IGJlIHRoZSBvcGVyYXRvcidzIGlkZW50aWZpZXIsIGUuZy4KICAvLy8gYCRhZGRgIGFuZCBub3QgYCtgLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0aW5nIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgaW5zdGFuY2UtbWVtYmVyIG5hbWVzcGFjZS4KICBqc0FzdC5OYW1lIF9kaXNhbWJpZ3VhdGVPcGVyYXRvcihTdHJpbmcgb3BlcmF0b3JJZGVudGlmaWVyKSB7CiAgICBqc0FzdC5OYW1lIG5ld05hbWUgPSB1c2VySW5zdGFuY2VPcGVyYXRvcnNbb3BlcmF0b3JJZGVudGlmaWVyXTsKICAgIGlmIChuZXdOYW1lID09IG51bGwpIHsKICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShpbnN0YW5jZVNjb3BlLCBvcGVyYXRvcklkZW50aWZpZXIpOwogICAgICB1c2VySW5zdGFuY2VPcGVyYXRvcnNbb3BlcmF0b3JJZGVudGlmaWVyXSA9IG5ld05hbWU7CiAgICB9CiAgICByZXR1cm4gX25ld1JlZmVyZW5jZShuZXdOYW1lKTsKICB9CgogIFN0cmluZyBfZ2VuZXJhdGVGcmVzaFN0cmluZ0Zvck5hbWUoU3RyaW5nIHByb3Bvc2VkTmFtZSwgTmFtaW5nU2NvcGUgc2NvcGUsCiAgICAgIHtib29sIHNhbml0aXplRm9yQW5ub3RhdGlvbnM6IGZhbHNlLCBib29sIHNhbml0aXplRm9yTmF0aXZlczogZmFsc2V9KSB7CiAgICBpZiAoc2FuaXRpemVGb3JBbm5vdGF0aW9ucykgewogICAgICBwcm9wb3NlZE5hbWUgPSBfc2FuaXRpemVGb3JBbm5vdGF0aW9ucyhwcm9wb3NlZE5hbWUpOwogICAgfQogICAgaWYgKHNhbml0aXplRm9yTmF0aXZlcykgewogICAgICBwcm9wb3NlZE5hbWUgPSBfc2FuaXRpemVGb3JOYXRpdmVzKHByb3Bvc2VkTmFtZSk7CiAgICB9CiAgICBwcm9wb3NlZE5hbWUgPSBfc2FuaXRpemVGb3JLZXl3b3Jkcyhwcm9wb3NlZE5hbWUpOwogICAgU3RyaW5nIGNhbmRpZGF0ZTsKICAgIGlmIChzY29wZS5pc1VudXNlZChwcm9wb3NlZE5hbWUpKSB7CiAgICAgIGNhbmRpZGF0ZSA9IHByb3Bvc2VkTmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBjb3VudGVyID0gcG9wdWxhck5hbWVDb3VudGVyc1twcm9wb3NlZE5hbWVdOwogICAgICBpbnQgaSA9IChjb3VudGVyID09IG51bGwpID8gMCA6IGNvdW50ZXI7CiAgICAgIHdoaWxlIChzY29wZS5pc1VzZWQoIiRwcm9wb3NlZE5hbWUkaSIpKSB7CiAgICAgICAgaSsrOwogICAgICB9CiAgICAgIHBvcHVsYXJOYW1lQ291bnRlcnNbcHJvcG9zZWROYW1lXSA9IGkgKyAxOwogICAgICBjYW5kaWRhdGUgPSAiJHByb3Bvc2VkTmFtZSRpIjsKICAgIH0KICAgIHNjb3BlLnJlZ2lzdGVyVXNlKGNhbmRpZGF0ZSk7CiAgICByZXR1cm4gY2FuZGlkYXRlOwogIH0KCiAgLy8vIFJldHVybnMgYW4gdW51c2VkIG5hbWUuCiAgLy8vCiAgLy8vIFtwcm9wb3NlZE5hbWVdIG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGlkZW50aWZpZXIuCiAgLy8vCiAgLy8vIElmIFtzYW5pdGl6ZUZvckFubm90YXRpb25zXSBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHJlc3VsdCBpcyBndWFyYW50ZWVkIG5vdAogIC8vLyB0byBoYXZlIHRoZSBmb3JtIG9mIGFuIGFubm90YXRlZCBuYW1lLgogIC8vLwogIC8vLyBJZiBbc2FuaXRpemVGb3JOYXRpdmVzXSBpdCBgdHJ1ZWAsIHRoZW4gdGhlIHJlc3VsdCBpcyBndWFyYW50ZWVkIG5vdCB0bwogIC8vLyBjbGFzaCB3aXRoIGEgcHJvcGVydHkgbmFtZSBvbiBhIG5hdGl2ZSBvYmplY3QuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBbTWluaWZ5TmFtZXJdIG92ZXJyaWRlcyB0aGlzIG1ldGhvZCB3aXRoIG9uZSB0aGF0IHByb2R1Y2VzCiAgLy8vIG1pbmlmaWVkIG5hbWVzLgogIGpzQXN0Lk5hbWUgZ2V0RnJlc2hOYW1lKE5hbWluZ1Njb3BlIHNjb3BlLCBTdHJpbmcgcHJvcG9zZWROYW1lLAogICAgICB7Ym9vbCBzYW5pdGl6ZUZvckFubm90YXRpb25zOiBmYWxzZSwgYm9vbCBzYW5pdGl6ZUZvck5hdGl2ZXM6IGZhbHNlfSkgewogICAgU3RyaW5nIGNhbmRpZGF0ZSA9IF9nZW5lcmF0ZUZyZXNoU3RyaW5nRm9yTmFtZShwcm9wb3NlZE5hbWUsIHNjb3BlLAogICAgICAgIHNhbml0aXplRm9yQW5ub3RhdGlvbnM6IHNhbml0aXplRm9yQW5ub3RhdGlvbnMsCiAgICAgICAgc2FuaXRpemVGb3JOYXRpdmVzOiBzYW5pdGl6ZUZvck5hdGl2ZXMpOwogICAgcmV0dXJuIG5ldyBTdHJpbmdCYWNrZWROYW1lKGNhbmRpZGF0ZSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIHZhcmlhbnQgb2YgW25hbWVdIHRoYXQgY2Fubm90IGNsYXNoIHdpdGggdGhlIGFubm90YXRlZAogIC8vLyB2ZXJzaW9uIG9mIGFub3RoZXIgbmFtZSwgdGhhdCBpcywgdGhlIHJlc3VsdGluZyBuYW1lIGNhbiBuZXZlciBiZSByZXR1cm5lZAogIC8vLyBieSBbZGVyaXZlR2V0dGVyTmFtZV0sIFtkZXJpdmVTZXR0ZXJOYW1lXSwgW2Rlcml2ZUNhbGxNZXRob2ROYW1lXSwKICAvLy8gW29wZXJhdG9ySXNdLCBvciBbc3Vic3RpdHV0aW9uTmFtZV0uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBhIG5hbWUgYGdldCR4YCB3b3VsZCBiZSBjb252ZXJ0ZWQgdG8gYCRnZXQkeGAgdG8gZW5zdXJlIGl0CiAgLy8vIGNhbm5vdCBjbGFzaCB3aXRoIHRoZSBnZXR0ZXIgZm9yIGB4YC4KICAvLy8KICAvLy8gV2UgZG9uJ3Qgd2FudCB0byByZWdpc3RlciBhbGwgcG90ZW50aWFsIGFubm90YXRlZCBuYW1lcyBpbgogIC8vLyBbdXNlZEluc3RhbmNlTmFtZXNdICh0aGVyZSBhcmUgdG9vIG1hbnkpLCBzbyB3ZSB1c2UgdGhpcyBzdGVwIHRvIGF2b2lkCiAgLy8vIGNsYXNoZXMgYmV0d2VlbiBhbm5vdGF0ZWQgYW5kIHVuYW5ub3RhdGVkIG5hbWVzLgogIFN0cmluZyBfc2FuaXRpemVGb3JBbm5vdGF0aW9ucyhTdHJpbmcgbmFtZSkgewogICAgLy8gRW5zdXJlIG5hbWUgZG9lcyBub3QgY2xhc2ggd2l0aCBhIGdldHRlciBvciBzZXR0ZXIgb2YgYW5vdGhlciBuYW1lLAogICAgLy8gb25lIG9mIHRoZSBvdGhlciBzcGVjaWFsIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBgJGAsIHN1Y2ggYXMgYCRpc2AsCiAgICAvLyBvciB3aXRoIG9uZSBvZiB0aGUgYGNhbGxgIHN0dWJzLCBzdWNoIGFzIGBjYWxsJDFgLgogICAgYXNzZXJ0KHRoaXMgaXMhIE1pbmlmeU5hbWVyKTsKICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgocickJykgfHwKICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoZml4ZWROYW1lcy5nZXR0ZXJQcmVmaXgpIHx8CiAgICAgICAgbmFtZS5zdGFydHNXaXRoKGZpeGVkTmFtZXMuc2V0dGVyUHJlZml4KSB8fAogICAgICAgIG5hbWUuc3RhcnRzV2l0aChfY2FsbFByZWZpeERvbGxhcikpIHsKICAgICAgbmFtZSA9ICdcJCRuYW1lJzsKICAgIH0KICAgIHJldHVybiBuYW1lOwogIH0KCiAgLy8vIFJldHVybnMgYSB2YXJpYW50IG9mIFtuYW1lXSB0aGF0IGNhbm5vdCBjbGFzaCB3aXRoIGEgbmF0aXZlIHByb3BlcnR5IG5hbWUKICAvLy8gKGUuZy4gdGhlIG5hbWUgb2YgYSBtZXRob2Qgb24gYSBKUyBET00gb2JqZWN0KS4KICAvLy8KICAvLy8gSWYgW25hbWVdIGlzIG5vdCBhbiBhbm5vdGF0ZWQgbmFtZSwgdGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBhbiBhbm5vdGF0ZWQKICAvLy8gbmFtZSBlaXRoZXIuCiAgU3RyaW5nIF9zYW5pdGl6ZUZvck5hdGl2ZXMoU3RyaW5nIG5hbWUpIHsKICAgIGlmICghbmFtZS5jb250YWlucyhyJyQnKSkgewogICAgICAvLyBQcmVwZW5kICQkLiBUaGUgcmVzdWx0IG11c3Qgbm90IGNvaW5jaWRlIHdpdGggYW4gYW5ub3RhdGVkIG5hbWUuCiAgICAgIG5hbWUgPSAnXCRcJCRuYW1lJzsKICAgIH0KICAgIHJldHVybiBuYW1lOwogIH0KCiAgLy8vIFJldHVybnMgYSBwcm9wb3NlZCBuYW1lIGZvciB0aGUgZ2l2ZW4gdHlwZWRlZiBvciBjbGFzcyBbZWxlbWVudF0uCiAgLy8vIFRoZSByZXR1cm5lZCBpZCBpcyBndWFyYW50ZWVkIHRvIGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBpZGVudGlmaWVyLgogIFN0cmluZyBfcHJvcG9zZU5hbWVGb3JUeXBlKEVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZWxlbWVudC5uYW1lLnJlcGxhY2VBbGwoX25vbklkZW50aWZpZXJSRSwgJ18nKTsKICB9CgogIHN0YXRpYyBSZWdFeHAgX25vbklkZW50aWZpZXJSRSA9IG5ldyBSZWdFeHAocidbXkEtWmEtejAtOV8kXScpOwoKICAvLy8gUmV0dXJucyBhIHByb3Bvc2VkIG5hbWUgZm9yIHRoZSBnaXZlbiB0b3AtbGV2ZWwgb3Igc3RhdGljIG1lbWJlcgogIC8vLyBbZWxlbWVudF0uIFRoZSByZXR1cm5lZCBpZCBpcyBndWFyYW50ZWVkIHRvIGJlIGEgdmFsaWQgSmF2YVNjcmlwdAogIC8vLyBpZGVudGlmaWVyLgogIFN0cmluZyBfcHJvcG9zZU5hbWVGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50LmlzQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuIF9wcm9wb3NlTmFtZUZvckNvbnN0cnVjdG9yKGVsZW1lbnQpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIEpHZW5lcmF0b3JCb2R5KSB7CiAgICAgIHJldHVybiBfcHJvcG9zZU5hbWVGb3JNZW1iZXIoZWxlbWVudC5mdW5jdGlvbikgKyByJyRib2R5JzsKICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgcmV0dXJuICcke2VuY2xvc2luZ0NsYXNzLm5hbWV9XyR7ZWxlbWVudC5uYW1lfSc7CiAgICB9CiAgICByZXR1cm4gZWxlbWVudC5uYW1lLnJlcGxhY2VBbGwoJysnLCAnXycpOwogIH0KCiAgU3RyaW5nIF9wcm9wb3NlTmFtZUZvckxhenlTdGF0aWNHZXR0ZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiByJyRnZXQkJyArIF9wcm9wb3NlTmFtZUZvck1lbWJlcihlbGVtZW50KTsKICB9CgogIFN0cmluZyBfcHJvcG9zZU5hbWVGb3JDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KSB7CiAgICBTdHJpbmcgY2xhc3NOYW1lID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lOwogICAgaWYgKGVsZW1lbnQuaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuICcke2NsYXNzTmFtZX1cJCR7ZWxlbWVudC5uYW1lfSc7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgZmFjdG9yeSBuYW1lIGVuY29kaW5nIGFzIHRvIG5vdCBpbmNsdWRlCiAgICAgIC8vIHRoZSBjbGFzcy1uYW1lIHR3aWNlLgogICAgICByZXR1cm4gJyR7Y2xhc3NOYW1lfV8ke3V0aWxzLnJlY29uc3RydWN0Q29uc3RydWN0b3JOYW1lKGVsZW1lbnQpfSc7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIHByb3Bvc2VkIG5hbWUgZm9yIHRoZSBnaXZlbiBbTGlicmFyeUVsZW1lbnRdLgogIC8vLyBUaGUgcmV0dXJuZWQgaWQgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHZhbGlkIEphdmFTY3JpcHQgaWRlbnRpZmllci4KICAvLyBUT0RPKHNyYSk6IFByZS1wcm9jZXNzIGxpYnJhcmllcyB0byBhc3NpZ24gW2xpYnJhcnlMb25nTmFtZXNdIGluIGEgd2F5IHRoYXQKICAvLyBpcyBpbmRlcGVuZGVudCBvZiB0aGUgb3JkZXIgb2YgY2FsbHMgdG8gbmFtZXIuCiAgU3RyaW5nIF9wcm9wb3NlTmFtZUZvckxpYnJhcnkoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICBTdHJpbmcgbmFtZSA9IGxpYnJhcnlMb25nTmFtZXNbbGlicmFyeV07CiAgICBpZiAobmFtZSAhPSBudWxsKSByZXR1cm4gbmFtZTsKICAgIC8vIFVzZSB0aGUgJ2ZpbGUnIG5hbWUsIGUuZy4gInBhY2thZ2U6ZXhwZWN0L2V4cGVjdC5kYXJ0IiAtPiAiZXhwZWN0IgogICAgbmFtZSA9IGxpYnJhcnkuY2Fub25pY2FsVXJpLnBhdGg7CiAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcobmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7CiAgICBpZiAobmFtZS5jb250YWlucygnLicpKSB7CiAgICAgIC8vIERyb3AgZmlsZSBleHRlbnNpb24uCiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKCcuJykpOwogICAgfQogICAgLy8gVGhlIGZpbGVuYW1lIGJhc2VkIG5hbWUgY2FuIGNvbnRhaW4gYWxsIGtpbmRzIG9mIG5hc3R5IGNoYXJhY3RlcnMuIE1ha2UKICAgIC8vIHN1cmUgaXQgaXMgYW4gaWRlbnRpZmllci4KICAgIGlmICghSURFTlRJRklFUi5oYXNNYXRjaChuYW1lKSkgewogICAgICBTdHJpbmcgcmVwbGFjZXIoTWF0Y2ggbWF0Y2gpIHsKICAgICAgICBTdHJpbmcgcyA9IG1hdGNoWzBdOwogICAgICAgIGlmIChzID09ICcuJykgcmV0dXJuICdfJzsKICAgICAgICByZXR1cm4gcy5jb2RlVW5pdEF0KDApLnRvUmFkaXhTdHJpbmcoMTYpOwogICAgICB9CgogICAgICBuYW1lID0gbmFtZS5yZXBsYWNlQWxsTWFwcGVkKE5PTl9JREVOVElGSUVSX0NIQVIsIHJlcGxhY2VyKTsKICAgICAgaWYgKCFJREVOVElGSUVSLmhhc01hdGNoKG5hbWUpKSB7CiAgICAgICAgLy8gZS5nLiBzdGFydHMgd2l0aCBkaWdpdC4KICAgICAgICBuYW1lID0gJ2xpYl8kbmFtZSc7CiAgICAgIH0KICAgIH0KICAgIC8vIE5hbWVzIGNvbnN0cnVjdGVkIGJhc2VkIG9uIGEgbGliYXJ5IG5hbWUgd2lsbCBiZSBmdXJ0aGVyIGRpc2FtYmlndWF0ZWQuCiAgICAvLyBIb3dldmVyLCBhcyBuYW1lcyBmcm9tIHRoZSBzYW1lIGxpYmFyeSBzaG91bGQgaGF2ZSB0aGUgc2FtZSBsaWJyYXJ5CiAgICAvLyBuYW1lIHBhcnQsIHdlIGRpc2FtYmlndWF0ZSB0aGUgbGlicmFyeSBuYW1lIGhlcmUuCiAgICBTdHJpbmcgZGlzYW1iaWd1YXRlZCA9IG5hbWU7CiAgICBmb3IgKGludCBjID0gMDsgbGlicmFyeUxvbmdOYW1lcy5jb250YWluc1ZhbHVlKGRpc2FtYmlndWF0ZWQpOyBjKyspIHsKICAgICAgZGlzYW1iaWd1YXRlZCA9ICIkbmFtZSRjIjsKICAgIH0KICAgIGxpYnJhcnlMb25nTmFtZXNbbGlicmFyeV0gPSBkaXNhbWJpZ3VhdGVkOwogICAgcmV0dXJuIGRpc2FtYmlndWF0ZWQ7CiAgfQoKICBTdHJpbmcgX2dldFN1ZmZpeEZvckludGVyY2VwdGVkQ2xhc3NlcyhJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3NlcykgewogICAgaWYgKGNsYXNzZXMuaXNFbXB0eSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIsc3JhKTogSWYgW2NsYXNzZXNdIGlzIGVtcHR5IGl0IHNob3VsZCBlaXRoZXIgaGF2ZQogICAgICAvLyBpdHMgb3duIHN1ZmZpeCAobGlrZSBoZXJlKSwgb3IgYWx3YXlzIGJlIGVxdWF0ZWQgd2l0aCB0aGUgc2V0IG9mCiAgICAgIC8vIGNsYXNzZXMgdGhhdCBjb250YWluIGBJbnRlcmNlcHRvcmAuIEZvciB0aGUgbGF0dGVyIHRvIHdvcmsgd2UgbmVlZCB0bwogICAgICAvLyB1cGRhdGUgYE9uZVNob3RJbnRlcmNlcHRvckRhdGEucmVnaXN0ZXJTcGVjaWFsaXplZEdldEludGVyY2VwdG9yYCwKICAgICAgLy8gc2luY2UgaXQgY3VycmVudGx5IHdvdWxkIG90aGVyd2lzZSBwb3RlbnRpYWxseSBvdmVyd3JpdGUgdGhlIGFsbAogICAgICAvLyBpbnRlcmNlcHRlZCBjbGFzc2VzIGNhc2Ugd2l0aCB0aGUgZW1wdHkgY2FzZS4KICAgICAgcmV0dXJuICd6JzsKICAgIH0gZWxzZSBpZiAoY2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNJbnRlcmNlcHRvckNsYXNzKSkgewogICAgICAvLyBJZiB0aGUgYmFzZSBJbnRlcmNlcHRvciBjbGFzcyBpcyBpbiB0aGUgc2V0IG9mIGludGVyY2VwdGVkIGNsYXNzZXMsCiAgICAgIC8vIHRoaXMgaXMgdGhlIG1vc3QgZ2VuZXJhbCBzcGVjaWFsaXphdGlvbiB3aGljaCB1c2VzIHRoZSBnZW5lcmljCiAgICAgIC8vIGdldEludGVyY2VwdG9yIG1ldGhvZC4KICAgICAgLy8gVE9ETyhzcmEpOiBGaW5kIGEgd2F5IHRvIGdldCB0aGUgc2ltcGxlIG5hbWUgd2hlbiBPYmplY3QgaXMgbm90IGluIHRoZQogICAgICAvLyBzZXQgb2YgY2xhc3NlcyBmb3IgbW9zdCBnZW5lcmFsIHZhcmlhbnQsIGUuZy4gIiRsdCRuIiBjb3VsZCBiZSAiJGx0Ii4KICAgICAgcmV0dXJuICcnOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHN1ZmZpeEZvckdldEludGVyY2VwdG9yKF9jb21tb25FbGVtZW50cywgX25hdGl2ZURhdGEsIGNsYXNzZXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBuYW1lRm9yR2V0SW50ZXJjZXB0b3IoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIC8vIElmIHRoZSBiYXNlIEludGVyY2VwdG9yIGNsYXNzIGlzIGluIHRoZSBzZXQgb2YgaW50ZXJjZXB0ZWQgY2xhc3Nlcywgd2UKICAgIC8vIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgZ2VuZXJpYyBnZXRJbnRlcmNlcHRvciBtZXRob2QgKGFueSBzdWJjbGFzcyBvZiB0aGUKICAgIC8vIGJhc2UgSW50ZXJjZXB0b3IgY291bGQgbWF0Y2gpLCB3aGljaCBpcyBlbmNvZGVkIGFzIGFuIGVtcHR5IHN1ZmZpeC4KICAgIFN0cmluZyBzdWZmaXggPSBfZ2V0U3VmZml4Rm9ySW50ZXJjZXB0ZWRDbGFzc2VzKGNsYXNzZXMpOwogICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVJbnRlcm5hbEdsb2JhbCgnZ2V0SW50ZXJjZXB0b3JcJCRzdWZmaXgnKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgbmFtZUZvck9uZVNob3RJbnRlcmNlcHRvcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICAvLyBUaGUgb25lLXNob3QgbmFtZSBpcyBhIGdsb2JhbCBuYW1lIGRlcml2ZWQgZnJvbSB0aGUgaW52b2NhdGlvbiBuYW1lLiAgVG8KICAgIC8vIGF2b2lkIGluc3RhYmlsaXR5IHdlIHdvdWxkIGxpa2UgdGhlIG5hbWVzIHRvIGJlIHVuaXF1ZSBhbmQgbm90IGNsYXNoIHdpdGgKICAgIC8vIG90aGVyIGdsb2JhbCBuYW1lcy4KICAgIGpzQXN0Lk5hbWUgcm9vdCA9IGludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKCiAgICBTdHJpbmcgc3VmZml4ID0gX2dldFN1ZmZpeEZvckludGVyY2VwdGVkQ2xhc3NlcyhjbGFzc2VzKTsKICAgIHJldHVybiBuZXcgQ29tcG91bmROYW1lKAogICAgICAgIFtyb290LCBfbGl0ZXJhbERvbGxhciwgbmV3IFN0cmluZ0JhY2tlZE5hbWUoc3VmZml4KV0pOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBydW50aW1lVHlwZU5hbWUoRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybiBfbGl0ZXJhbER5bmFtaWM7CiAgICAvLyBUaGUgcmV0dXJuZWQgbmFtZSBhZmZlY3RzIGJvdGggdGhlIGdsb2JhbCBhbmQgaW5zdGFuY2UgbWVtYmVyIG5hbWVzcGFjZXM6CiAgICAvLwogICAgLy8gLSBJZiBnaXZlbiBhIGNsYXNzLCB0aGlzIG11c3QgY29pbmNpZGUgd2l0aCB0aGUgY2xhc3MgbmFtZSwgd2hpY2gKICAgIC8vICAgaXMgYWxzbyB0aGUgR0xPQkFMIHByb3BlcnR5IG5hbWUgb2YgaXRzIGNvbnN0cnVjdG9yLgogICAgLy8KICAgIC8vIC0gVGhlIHJlc3VsdCBpcyB1c2VkIHRvIGRlcml2ZSBgJGlzWGAgYW5kIGAkYXNYYCBuYW1lcywgd2hpY2ggYXJlIHVzZWQKICAgIC8vICAgYXMgSU5TVEFOQ0UgcHJvcGVydHkgbmFtZXMuCiAgICAvLwogICAgLy8gVG8gcHJldmVudCBjbGFzaGVzIGluIGJvdGggbmFtZXNwYWNlcyBhdCBvbmNlLCB3ZSBkaXNhbWJpZ3VhdGUgdGhlIG5hbWUKICAgIC8vIGFzIGEgZ2xvYmFsIGhlcmUsIGFuZCBpbiBbX3Nhbml0aXplRm9yQW5ub3RhdGlvbnNdIHdlIGVuc3VyZSB0aGF0CiAgICAvLyBvcmRpbmFyeSBpbnN0YW5jZSBtZW1iZXJzIGNhbm5vdCBzdGFydCB3aXRoIGAkaXNgIG9yIGAkYXNgLgogICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVHbG9iYWxUeXBlKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBjbGFzc05hbWUoQ2xhc3NFbnRpdHkgY2xhc3NfKSA9PiBfZGlzYW1iaWd1YXRlR2xvYmFsVHlwZShjbGFzc18pOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGFsaWFzZWRTdXBlck1lbWJlclByb3BlcnR5TmFtZShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBhc3NlcnQoIW1lbWJlci5pc0ZpZWxkKTsgLy8gRmllbGRzIGRvIG5vdCBuZWVkIHN1cGVyIGFsaWFzZXMuCiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUludGVybmFsTWVtYmVyKG1lbWJlciwgKCkgewogICAgICBTdHJpbmcgY2xhc3NOYW1lID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWUucmVwbGFjZUFsbCgnJicsICdfJyk7CiAgICAgIFN0cmluZyBpbnZvY2F0aW9uTmFtZSA9IG9wZXJhdG9yTmFtZVRvSWRlbnRpZmllcihtZW1iZXIubmFtZSk7CiAgICAgIHJldHVybiAic3VwZXJcJCR7Y2xhc3NOYW1lfVwkJGludm9jYXRpb25OYW1lIjsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBtZXRob2RQcm9wZXJ0eU5hbWUoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICByZXR1cm4gbWV0aG9kLmlzSW5zdGFuY2VNZW1iZXIKICAgICAgICA/IGluc3RhbmNlTWV0aG9kTmFtZShtZXRob2QpCiAgICAgICAgOiBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXIobWV0aG9kKTsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgW2VsZW1lbnRdIGlzIHN0b3JlZCBpbiB0aGUgc3RhdGljIHN0YXRlIGhvbGRlcgogIC8vLyAoW3N0YXRpY1N0YXRlSG9sZGVyXSkuICBXZSBpbnRlbmQgdG8gc3RvcmUgb25seSBtdXRhYmxlIHN0YXRpYyBzdGF0ZQogIC8vLyB0aGVyZSwgd2hlcmVhcyBjb25zdGFudHMgYXJlIHN0b3JlZCBpbiAnQycuIEZ1bmN0aW9ucywgYWNjZXNzb3JzLAogIC8vLyBjbGFzc2VzLCBldGMuIGFyZSBzdG9yZWQgaW4gb25lIG9mIHRoZSBvdGhlciBvYmplY3RzIGluCiAgLy8vIFtyZXNlcnZlZEdsb2JhbE9iamVjdE5hbWVzXS4KICBib29sIF9pc1Byb3BlcnR5T2ZTdGF0aWNTdGF0ZUhvbGRlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgLy8gVE9ETyhhaGUpOiBNYWtlIHN1cmUgdGhpcyBtZXRob2QncyBkb2N1bWVudGF0aW9uIGlzIGFsd2F5cyB0cnVlIGFuZAogICAgLy8gcmVtb3ZlIHRoZSB3b3JkICJpbnRlbmQiLgogICAgcmV0dXJuIGVsZW1lbnQuaXNGaWVsZDsKICB9CgogIC8vLyBSZXR1cm5zIFtzdGF0aWNTdGF0ZUhvbGRlcl0gb3Igb25lIG9mIFtyZXNlcnZlZEdsb2JhbE9iamVjdE5hbWVzXS4KICBTdHJpbmcgZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoX2lzUHJvcGVydHlPZlN0YXRpY1N0YXRlSG9sZGVyKGVsZW1lbnQpKSByZXR1cm4gc3RhdGljU3RhdGVIb2xkZXI7CiAgICByZXR1cm4gZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeShlbGVtZW50LmxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuVmFyaWFibGVVc2UgcmVhZEdsb2JhbE9iamVjdEZvck1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKF9pc1Byb3BlcnR5T2ZTdGF0aWNTdGF0ZUhvbGRlcihlbGVtZW50KSkgewogICAgICByZXR1cm4gbmV3IGpzQXN0LlZhcmlhYmxlVXNlKHN0YXRpY1N0YXRlSG9sZGVyKTsKICAgIH0KICAgIHJldHVybiByZWFkR2xvYmFsT2JqZWN0Rm9yTGlicmFyeShlbGVtZW50LmxpYnJhcnkpOwogIH0KCiAgU3RyaW5nIGdsb2JhbE9iamVjdEZvckNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBnbG9iYWxPYmplY3RGb3JMaWJyYXJ5KGVsZW1lbnQubGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5WYXJpYWJsZVVzZSByZWFkR2xvYmFsT2JqZWN0Rm9yQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIHJlYWRHbG9iYWxPYmplY3RGb3JMaWJyYXJ5KGVsZW1lbnQubGlicmFyeSk7CiAgfQoKICBTdHJpbmcgZ2xvYmFsT2JqZWN0Rm9yVHlwZShFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgaXMgVHlwZWRlZkVudGl0eSkgewogICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeShlbGVtZW50LmxpYnJhcnkpOwogICAgfQogICAgcmV0dXJuIGdsb2JhbE9iamVjdEZvckNsYXNzKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuVmFyaWFibGVVc2UgcmVhZEdsb2JhbE9iamVjdEZvclR5cGUoRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50IGlzIFR5cGVkZWZFbnRpdHkpIHsKICAgICAgcmV0dXJuIHJlYWRHbG9iYWxPYmplY3RGb3JMaWJyYXJ5KGVsZW1lbnQubGlicmFyeSk7CiAgICB9CiAgICByZXR1cm4gcmVhZEdsb2JhbE9iamVjdEZvckNsYXNzKGVsZW1lbnQpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtyZXNlcnZlZEdsb2JhbE9iamVjdE5hbWVzXSBmb3IgW2xpYnJhcnldLgogIFN0cmluZyBnbG9iYWxPYmplY3RGb3JMaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgaWYgKGxpYnJhcnkgPT0gX2NvbW1vbkVsZW1lbnRzLmludGVyY2VwdG9yc0xpYnJhcnkpIHJldHVybiAnSic7CiAgICBVcmkgdXJpID0gbGlicmFyeS5jYW5vbmljYWxVcmk7CiAgICBpZiAodXJpLnNjaGVtZSA9PSAnZGFydCcpIHsKICAgICAgaWYgKHVyaS5wYXRoID09ICdodG1sJykgcmV0dXJuICdXJzsKICAgICAgaWYgKHVyaS5wYXRoLnN0YXJ0c1dpdGgoJ18nKSkgcmV0dXJuICdIJzsKICAgICAgcmV0dXJuICdQJzsKICAgIH0KICAgIHJldHVybiB1c2VyR2xvYmFsT2JqZWN0c1tsaWJyYXJ5Lm5hbWUuaGFzaENvZGUgJSB1c2VyR2xvYmFsT2JqZWN0cy5sZW5ndGhdOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuVmFyaWFibGVVc2UgcmVhZEdsb2JhbE9iamVjdEZvckxpYnJhcnkoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gbmV3IGpzQXN0LlZhcmlhYmxlVXNlKGdsb2JhbE9iamVjdEZvckxpYnJhcnkobGlicmFyeSkpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBsYXp5SW5pdGlhbGl6ZXJOYW1lKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50LmlzVG9wTGV2ZWwgfHwgZWxlbWVudC5pc1N0YXRpYyk7CiAgICBqc0FzdC5OYW1lIG5hbWUgPSBfZGlzYW1iaWd1YXRlR2xvYmFsPE1lbWJlckVudGl0eT4oCiAgICAgICAgZWxlbWVudCwgX3Byb3Bvc2VOYW1lRm9yTGF6eVN0YXRpY0dldHRlciwgdXNlckdsb2JhbHNTZWNvbmROYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBzdGF0aWNDbG9zdXJlTmFtZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5pc1RvcExldmVsIHx8IGVsZW1lbnQuaXNTdGF0aWMpOwogICAgU3RyaW5nIGVuY2xvc2luZyA9CiAgICAgICAgZWxlbWVudC5lbmNsb3NpbmdDbGFzcyA9PSBudWxsID8gIiIgOiBlbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWU7CiAgICBTdHJpbmcgbGlicmFyeSA9IF9wcm9wb3NlTmFtZUZvckxpYnJhcnkoZWxlbWVudC5saWJyYXJ5KTsKICAgIHJldHVybiBfZGlzYW1iaWd1YXRlSW50ZXJuYWxHbG9iYWwoCiAgICAgICAgIiR7bGlicmFyeX1fJHtlbmNsb3Npbmd9XyR7ZWxlbWVudC5uYW1lfVwkY2xvc3VyZSIpOwogIH0KCiAgLy8gVGhpcyBuYW1lIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgbmFtZSBvZiBhIFR5cGVDb25zdGFudAogIFN0cmluZyB1bmlxdWVOYW1lRm9yVHlwZUNvbnN0YW50RWxlbWVudCgKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBFbnRpdHkgZWxlbWVudCkgewogICAgLy8gVE9ETyhzcmEpOiBJZiB3ZSByZXBsYWNlIHRoZSBwZXJpb2Qgd2l0aCBhbiBpZGVudGlmaWVyIGNoYXJhY3RlciwKICAgIC8vIFR5cGVDb25zdGFudHMgd2lsbCBoYXZlIGJldHRlciBuYW1lcyBpbiB1bm1pbmlmaWVkIGNvZGUuCiAgICBTdHJpbmcgbGlicmFyeU5hbWUgPSBfcHJvcG9zZU5hbWVGb3JMaWJyYXJ5KGxpYnJhcnkpOwogICAgcmV0dXJuICIke2xpYnJhcnlOYW1lfS4ke2VsZW1lbnQubmFtZX0iOwogIH0KCiAgU3RyaW5nIGdsb2JhbE9iamVjdEZvckNvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQpID0+ICdDJzsKCiAgU3RyaW5nIGdldCBnZW5lcmljSW5zdGFudGlhdGlvblByZWZpeCA9PiByJyRpbnN0YW50aWF0ZSc7CgogIC8vIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB1c2VkIHRvIG9mZnNldCBmdW5jdGlvbiBzaWduYXR1cmVzIGluIGRlZmVycmVkCiAgLy8gcGFydHMgd2l0aCB0aGUgZmFzdC1zdGFydHVwIGVtaXR0ZXIuCiAgU3RyaW5nIGdldCB0eXBlc09mZnNldE5hbWUgPT4gcid0eXBlc09mZnNldCc7CgogIE1hcDxGdW5jdGlvblR5cGUsIGpzQXN0Lk5hbWU+IGZ1bmN0aW9uVHlwZU5hbWVNYXAgPSBIYXNoTWFwKCk7CgogIEZ1bmN0aW9uVHlwZU5hbWVyIF9mdW5jdGlvblR5cGVOYW1lcjsKCiAganNBc3QuTmFtZSBnZXRGdW5jdGlvblR5cGVOYW1lKEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUpIHsKICAgIHJldHVybiBmdW5jdGlvblR5cGVOYW1lTWFwLnB1dElmQWJzZW50KGZ1bmN0aW9uVHlwZSwgKCkgewogICAgICBfZnVuY3Rpb25UeXBlTmFtZXIgPz89IG5ldyBGdW5jdGlvblR5cGVOYW1lcigpOwogICAgICBTdHJpbmcgcHJvcG9zZWROYW1lID0gX2Z1bmN0aW9uVHlwZU5hbWVyLmNvbXB1dGVOYW1lKGZ1bmN0aW9uVHlwZSk7CiAgICAgIHJldHVybiBnZXRGcmVzaE5hbWUoaW5zdGFuY2VTY29wZSwgcHJvcG9zZWROYW1lKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBvcGVyYXRvcklzVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSkgewogICAgICAvLyBUT0RPKGVyaWtjb3JyeSk6IFJlZHVjZSBmcm9tICRpc3ggdG8gaXggd2hlbiB3ZSBhcmUgbWluaWZ5aW5nLgogICAgICByZXR1cm4gbmV3IENvbXBvdW5kTmFtZShbCiAgICAgICAgbmV3IFN0cmluZ0JhY2tlZE5hbWUoZml4ZWROYW1lcy5vcGVyYXRvcklzUHJlZml4KSwKICAgICAgICBfbGl0ZXJhbFVuZGVyc2NvcmUsCiAgICAgICAgZ2V0RnVuY3Rpb25UeXBlTmFtZSh0eXBlKQogICAgICBdKTsKICAgIH0KICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICByZXR1cm4gb3BlcmF0b3JJcyhpbnRlcmZhY2VUeXBlLmVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBvcGVyYXRvcklzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIC8vIFRPRE8oZXJpa2NvcnJ5KTogUmVkdWNlIGZyb20gJGlzeCB0byBpeCB3aGVuIHdlIGFyZSBtaW5pZnlpbmcuCiAgICByZXR1cm4gbmV3IENvbXBvdW5kTmFtZShbCiAgICAgIG5ldyBTdHJpbmdCYWNrZWROYW1lKGZpeGVkTmFtZXMub3BlcmF0b3JJc1ByZWZpeCksCiAgICAgIHJ1bnRpbWVUeXBlTmFtZShlbGVtZW50KQogICAgXSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5hbWUgdGhhdCBkb2VzIG5vdCBjbGFzaCB3aXRoIHJlc2VydmVkIEpTIGtleXdvcmRzLgogIFN0cmluZyBfc2FuaXRpemVGb3JLZXl3b3JkcyhTdHJpbmcgbmFtZSkgewogICAgaWYgKGpzUmVzZXJ2ZWQuY29udGFpbnMobmFtZSkpIHsKICAgICAgbmFtZSA9ICdcJCRuYW1lJzsKICAgIH0KICAgIGFzc2VydCghanNSZXNlcnZlZC5jb250YWlucyhuYW1lKSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgc3Vic3RpdHV0aW9uTmFtZShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IENvbXBvdW5kTmFtZShbCiAgICAgIG5ldyBTdHJpbmdCYWNrZWROYW1lKGZpeGVkTmFtZXMub3BlcmF0b3JBc1ByZWZpeCksCiAgICAgIHJ1bnRpbWVUeXBlTmFtZShlbGVtZW50KQogICAgXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGFzTmFtZShTdHJpbmcgbmFtZSkgewogICAgaWYgKG5hbWUuc3RhcnRzV2l0aChmaXhlZE5hbWVzLmdldHRlclByZWZpeCkgJiYKICAgICAgICBuYW1lLmxlbmd0aCA+IGZpeGVkTmFtZXMuZ2V0dGVyUHJlZml4Lmxlbmd0aCkgewogICAgICByZXR1cm4gbmV3IEdldHRlck5hbWUoX2xpdGVyYWxHZXR0ZXJQcmVmaXgsCiAgICAgICAgICBuZXcgU3RyaW5nQmFja2VkTmFtZShuYW1lLnN1YnN0cmluZyhmaXhlZE5hbWVzLmdldHRlclByZWZpeC5sZW5ndGgpKSk7CiAgICB9CiAgICBpZiAobmFtZS5zdGFydHNXaXRoKGZpeGVkTmFtZXMuc2V0dGVyUHJlZml4KSAmJgogICAgICAgIG5hbWUubGVuZ3RoID4gZml4ZWROYW1lcy5zZXR0ZXJQcmVmaXgubGVuZ3RoKSB7CiAgICAgIHJldHVybiBuZXcgR2V0dGVyTmFtZShfbGl0ZXJhbFNldHRlclByZWZpeCwKICAgICAgICAgIG5ldyBTdHJpbmdCYWNrZWROYW1lKG5hbWUuc3Vic3RyaW5nKGZpeGVkTmFtZXMuc2V0dGVyUHJlZml4Lmxlbmd0aCkpKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IFN0cmluZ0JhY2tlZE5hbWUobmFtZSk7CiAgfQoKICBTdHJpbmcgb3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyKFN0cmluZyBuYW1lKSB7CiAgICBpZiAobmFtZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChuYW1lID09ICc9PScpIHsKICAgICAgcmV0dXJuIHInJGVxJzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnficpIHsKICAgICAgcmV0dXJuIHInJG5vdCc7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ1tdJykgewogICAgICByZXR1cm4gcickaW5kZXgnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdbXT0nKSB7CiAgICAgIHJldHVybiByJyRpbmRleFNldCc7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJyonKSB7CiAgICAgIHJldHVybiByJyRtdWwnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICcvJykgewogICAgICByZXR1cm4gcickZGl2JzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnJScpIHsKICAgICAgcmV0dXJuIHInJG1vZCc7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ34vJykgewogICAgICByZXR1cm4gcickdGRpdic7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJysnKSB7CiAgICAgIHJldHVybiByJyRhZGQnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICc8PCcpIHsKICAgICAgcmV0dXJuIHInJHNobCc7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJz4+JykgewogICAgICByZXR1cm4gcickc2hyJzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnPj4+JykgewogICAgICByZXR1cm4gcickc2hydSc7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJz49JykgewogICAgICByZXR1cm4gcickZ2UnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICc+JykgewogICAgICByZXR1cm4gcickZ3QnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICc8PScpIHsKICAgICAgcmV0dXJuIHInJGxlJzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnPCcpIHsKICAgICAgcmV0dXJuIHInJGx0JzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnJicpIHsKICAgICAgcmV0dXJuIHInJGFuZCc7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ14nKSB7CiAgICAgIHJldHVybiByJyR4b3InOwogICAgfSBlbHNlIGlmIChuYW1lID09ICd8JykgewogICAgICByZXR1cm4gcickb3InOwogICAgfSBlbHNlIGlmIChuYW1lID09ICctJykgewogICAgICByZXR1cm4gcickc3ViJzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAndW5hcnktJykgewogICAgICByZXR1cm4gcickbmVnYXRlJzsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuYW1lOwogICAgfQogIH0KCiAgU3RyaW5nIGdldFR5cGVSZXByZXNlbnRhdGlvbkZvclR5cGVDb25zdGFudChEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZS5pc0R5bmFtaWMpIHJldHVybiAiZHluYW1pYyI7CiAgICBpZiAodHlwZSBpcyBUeXBlZGVmVHlwZSkgewogICAgICByZXR1cm4gdW5pcXVlTmFtZUZvclR5cGVDb25zdGFudEVsZW1lbnQoCiAgICAgICAgICB0eXBlLmVsZW1lbnQubGlicmFyeSwgdHlwZS5lbGVtZW50KTsKICAgIH0KICAgIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBZGQgbmFtaW5nIHNjaGVtZSBmb3IgZnVuY3Rpb24gdHlwZSBsaXRlcmFscy4KICAgICAgLy8gVGhlc2UgY3VycmVudGx5IG9ubHkgb2NjdXIgZnJvbSBrZXJuZWwuCiAgICAgIHJldHVybiAnKCktPic7CiAgICB9CiAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZSA9IHR5cGU7CiAgICBTdHJpbmcgbmFtZSA9IHVuaXF1ZU5hbWVGb3JUeXBlQ29uc3RhbnRFbGVtZW50KAogICAgICAgIGludGVyZmFjZS5lbGVtZW50LmxpYnJhcnksIGludGVyZmFjZS5lbGVtZW50KTsKCiAgICAvLyBUeXBlIGNvbnN0YW50cyBjYW4gY3VycmVudGx5IG9ubHkgYmUgcmF3IHR5cGVzLCBzbyB0aGVyZSBpcyBubyBwb2ludAogICAgLy8gYWRkaW5nIGdyb3VuZC10ZXJtIHR5cGUgcGFyYW1ldGVycywgYXMgdGhleSB3b3VsZCBqdXN0IGJlICdkeW5hbWljJy4KICAgIC8vIFRPRE8oc3JhKTogU2luY2UgdGhlIHJlc3VsdCBzdHJpbmcgaXMgdXNlZCBvbmx5IGluIGNvbnN0cnVjdGluZyBjb25zdGFudAogICAgLy8gbmFtZXMsIGl0IHdvdWxkIHJlc3VsdCBpbiBtb3JlIHJlYWRhYmxlIG5hbWVzIGlmIHRoZSBmaW5hbCBzdHJpbmcgd2FzIGEKICAgIC8vIGxlZ2FsIEphdmFTY3JpcHQgaWRlbnRpZmllci4KICAgIGlmIChpbnRlcmZhY2UudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gbmFtZTsKICAgIFN0cmluZyBhcmd1bWVudHMgPQogICAgICAgIG5ldyBMaXN0LmZpbGxlZChpbnRlcmZhY2UudHlwZUFyZ3VtZW50cy5sZW5ndGgsICdkeW5hbWljJykuam9pbignLCAnKTsKICAgIHJldHVybiAnJG5hbWU8JGFyZ3VtZW50cz4nOwogIH0KfQoKLy8vIFJldHVybnMgYSB1bmlxdWUgc3VmZml4IGZvciBhbiBpbnRlcmNlcHRlZCBhY2Nlc3NlcyB0byBbY2xhc3Nlc10uIFRoaXMgaXMKLy8vIHVzZWQgYXMgdGhlIHN1ZmZpeCBmb3IgZW1pdHRlZCBpbnRlcmNlcHRvciBtZXRob2RzIGFuZCBhcyB0aGUgdW5pcXVlIGtleQovLy8gdXNlZCB0byBkaXN0aW5ndWlzaCBlcXVpdmFsZW5jZXMgb2Ygc2V0cyBvZiBpbnRlcmNlcHRlZCBjbGFzc2VzLgpTdHJpbmcgc3VmZml4Rm9yR2V0SW50ZXJjZXB0b3IoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICBOYXRpdmVEYXRhIG5hdGl2ZURhdGEsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgU3RyaW5nIGFiYnJldmlhdGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSByZXR1cm4gIm8iOwogICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzKSByZXR1cm4gInMiOwogICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpIHJldHVybiAiYSI7CiAgICBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpIHJldHVybiAiZCI7CiAgICBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpIHJldHVybiAiaSI7CiAgICBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpIHJldHVybiAibiI7CiAgICBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzKSByZXR1cm4gInUiOwogICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzcykgcmV0dXJuICJiIjsKICAgIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMuanNJbnRlcmNlcHRvckNsYXNzKSByZXR1cm4gIkkiOwogICAgcmV0dXJuIGNscy5uYW1lOwogIH0KCiAgTGlzdDxTdHJpbmc+IG5hbWVzID0gY2xhc3NlcwogICAgICAud2hlcmUoKGNscykgPT4gIW5hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKSkKICAgICAgLm1hcChhYmJyZXZpYXRlKQogICAgICAudG9MaXN0KCk7CiAgLy8gVGhlcmUgaXMgb25lIGRpc3BhdGNoIG1lY2hhbmlzbSBmb3IgYWxsIG5hdGl2ZSBjbGFzc2VzLgogIGlmIChjbGFzc2VzLmFueSgoY2xzKSA9PiBuYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykpKSB7CiAgICBuYW1lcy5hZGQoIngiKTsKICB9CiAgLy8gU29ydCB0aGUgbmFtZXMgb2YgdGhlIGNsYXNzZXMgYWZ0ZXIgYWJicmV2aWF0aW5nIHRoZW0gdG8gZW5zdXJlCiAgLy8gdGhlIHN1ZmZpeCBpcyBzdGFibGUgYW5kIHByZWRpY3RhYmxlIGZvciB0aGUgc3VnZ2VzdGVkIG5hbWVzLgogIG5hbWVzLnNvcnQoKTsKICByZXR1cm4gbmFtZXMuam9pbigpOwp9CgovLy8gR2VuZXJhdG9yIG9mIG5hbWVzIGZvciBbQ29uc3RhbnRWYWx1ZV0gdmFsdWVzLgovLy8KLy8vIFRoZSBuYW1lcyBhcmUgc3RhYmxlIHVuZGVyIHBlcnR1cmJhdGlvbnMgb2YgdGhlIHNvdXJjZS4gIFRoZSBuYW1lIGlzIGVpdGhlcgovLy8gYSBzaG9ydCBzZXF1ZW5jZSBvZiB3b3JkcywgaWYgdGhpcyBjYW4gYmUgZm91bmQgZnJvbSB0aGUgY29uc3RhbnQsIG9yIGEgdHlwZQovLy8gZm9sbG93ZWQgYnkgYSBoYXNoIHRhZy4KLy8vCi8vLyAgICAgTGlzdF9pbVggICAgICAgICAgICAgICAgLy8gQSBMaXN0LCB3aXRoIGhhc2ggdGFnLgovLy8gICAgIENfU2VudGluZWwgICAgICAgICAgICAgIC8vIGNvbnN0IFNlbnRpbmVsKCksICAiQ18iIGFkZGVkIHRvIGF2b2lkIGNsYXNoCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3aXRoIGNsYXNzIG5hbWUuCi8vLyAgICAgSlNJbnRfbWV0aG9kcyAgICAgICAgICAgLy8gYW4gaW50ZXJjZXB0b3IuCi8vLyAgICAgRHVyYXRpb25fMTYwMDAgICAgICAgICAgLy8gY29uc3QgRHVyYXRpb24obWlsbGlzZWNvbmRzOiAxNikKLy8vICAgICBFdmVudEtleVByb3ZpZGVyX2tleXVwICAvLyBjb25zdCBFdmVudEtleVByb3ZpZGVyKCdrZXl1cCcpCi8vLwpjbGFzcyBDb25zdGFudE5hbWluZ1Zpc2l0b3IgaW1wbGVtZW50cyBDb25zdGFudFZhbHVlVmlzaXRvciB7CiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBJREVOVElGSUVSID0gbmV3IFJlZ0V4cChyJ15bQS1aYS16XyRdW0EtWmEtejAtOV8kXSokJyk7CiAgc3RhdGljIGNvbnN0IE1BWF9GUkFHTUVOVFMgPSA1OwogIHN0YXRpYyBjb25zdCBNQVhfRVhUUkFfTEVOR1RIID0gMzA7CiAgc3RhdGljIGNvbnN0IERFRkFVTFRfVEFHX0xFTkdUSCA9IDM7CgogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvbnN0YW50Q2Fub25pY2FsSGFzaGVyIF9oYXNoZXI7CgogIFN0cmluZyByb290ID0gbnVsbDsgLy8gRmlyc3Qgd29yZCwgdXN1YWxseSBhIHR5cGUgbmFtZS4KICBib29sIGZhaWxlZCA9IGZhbHNlOyAvLyBGYWlsZWQgdG8gZ2VuZXJhdGUgc29tZXRoaW5nIHByZXR0eS4KICBMaXN0PFN0cmluZz4gZnJhZ21lbnRzID0gPFN0cmluZz5bXTsKICBpbnQgbGVuZ3RoID0gMDsKCiAgQ29uc3RhbnROYW1pbmdWaXNpdG9yKHRoaXMuX25hbWVyLCB0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5faGFzaGVyKTsKCiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwogIEpGaWVsZEFuYWx5c2lzIGdldCBfZmllbGRBbmFseXNpcyA9PiBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpczsKCiAgU3RyaW5nIGdldE5hbWUoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgX3Zpc2l0KGNvbnN0YW50KTsKICAgIGlmIChyb290ID09IG51bGwpIHJldHVybiAnQ09OU1RBTlQnOwogICAgaWYgKGZhaWxlZCkgcmV0dXJuICcke3Jvb3R9XyR7Z2V0SGFzaFRhZyhjb25zdGFudCwgREVGQVVMVF9UQUdfTEVOR1RIKX0nOwogICAgaWYgKGZyYWdtZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuICdDXyR7cm9vdH0nOwogICAgcmV0dXJuIGZyYWdtZW50cy5qb2luKCdfJyk7CiAgfQoKICBTdHJpbmcgZ2V0SGFzaFRhZyhDb25zdGFudFZhbHVlIGNvbnN0YW50LCBpbnQgd2lkdGgpID0+CiAgICAgIGhhc2hXb3JkKF9oYXNoZXIuZ2V0SGFzaChjb25zdGFudCksIHdpZHRoKTsKCiAgU3RyaW5nIGhhc2hXb3JkKGludCBoYXNoLCBpbnQgbGVuZ3RoKSB7CiAgICBoYXNoICY9IDB4MWZmZmZmZmY7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGludCBkaWdpdCA9IGhhc2ggJSA2MjsKICAgICAgc2Iud3JpdGUoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ1sKICAgICAgICAgIGRpZ2l0XSk7CiAgICAgIGhhc2ggfi89IDYyOwogICAgICBpZiAoaGFzaCA9PSAwKSBicmVhazsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgdm9pZCBhZGRSb290KFN0cmluZyBmcmFnbWVudCkgewogICAgaWYgKHJvb3QgPT0gbnVsbCAmJiBmcmFnbWVudHMuaXNFbXB0eSkgewogICAgICByb290ID0gZnJhZ21lbnQ7CiAgICB9CiAgICBhZGQoZnJhZ21lbnQpOwogIH0KCiAgdm9pZCBhZGQoU3RyaW5nIGZyYWdtZW50KSB7CiAgICBhc3NlcnQoZnJhZ21lbnQubGVuZ3RoID4gMCk7CiAgICBmcmFnbWVudHMuYWRkKGZyYWdtZW50KTsKICAgIGxlbmd0aCArPSBmcmFnbWVudC5sZW5ndGg7CiAgICBpZiAoZnJhZ21lbnRzLmxlbmd0aCA+IE1BWF9GUkFHTUVOVFMpIGZhaWxlZCA9IHRydWU7CiAgICBpZiAocm9vdCAhPSBudWxsICYmIGxlbmd0aCA+IHJvb3QubGVuZ3RoICsgMSArIE1BWF9FWFRSQV9MRU5HVEgpIHsKICAgICAgZmFpbGVkID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgYWRkSWRlbnRpZmllcihTdHJpbmcgZnJhZ21lbnQpIHsKICAgIGlmIChmcmFnbWVudC5sZW5ndGggPD0gTUFYX0VYVFJBX0xFTkdUSCAmJiBJREVOVElGSUVSLmhhc01hdGNoKGZyYWdtZW50KSkgewogICAgICBhZGQoZnJhZ21lbnQpOwogICAgfSBlbHNlIHsKICAgICAgZmFpbGVkID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgX3Zpc2l0KENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIGNvbnN0YW50LmFjY2VwdCh0aGlzLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbihGdW5jdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgYWRkKGNvbnN0YW50LmVsZW1lbnQubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBfdmlzaXQoY29uc3RhbnQuZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGwoTnVsbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgYWRkKCdudWxsJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Tm9uQ29uc3RhbnQoTm9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBhZGQoJ251bGwnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnQoSW50Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICAvLyBObyBgYWRkUm9vdGAgc2luY2UgSW50Q29uc3RhbnRzIGFyZSBhbHdheXMgaW5saW5lZC4KICAgIGlmIChjb25zdGFudC5pbnRWYWx1ZSA8IEJpZ0ludC56ZXJvKSB7CiAgICAgIGFkZCgnbSR7LWNvbnN0YW50LmludFZhbHVlfScpOwogICAgfSBlbHNlIHsKICAgICAgYWRkKCcke2NvbnN0YW50LmludFZhbHVlfScpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvdWJsZShEb3VibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGZhaWxlZCA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbChCb29sQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBhZGQoY29uc3RhbnQuaXNUcnVlID8gJ3RydWUnIDogJ2ZhbHNlJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nKFN0cmluZ0NvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgLy8gTm8gYGFkZFJvb3RgIHNpbmNlIHN0cmluZyBjb25zdGFudHMgYXJlIGFsd2F5cyBpbmxpbmVkLgogICAgYWRkSWRlbnRpZmllcihjb25zdGFudC5zdHJpbmdWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdChMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICAvLyBUT0RPKDk0NzYpOiBJbmNvcnBvcmF0ZSB0eXBlIHBhcmFtZXRlcnMgaW50byBuYW1lLgogICAgYWRkUm9vdCgnTGlzdCcpOwogICAgaW50IGxlbmd0aCA9IGNvbnN0YW50Lmxlbmd0aDsKICAgIGlmIChjb25zdGFudC5sZW5ndGggPT0gMCkgewogICAgICBhZGQoJ2VtcHR5Jyk7CiAgICB9IGVsc2UgaWYgKGxlbmd0aCA+PSBNQVhfRlJBR01FTlRTKSB7CiAgICAgIGZhaWxlZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgX3Zpc2l0KGNvbnN0YW50LmVudHJpZXNbaV0pOwogICAgICAgIGlmIChmYWlsZWQpIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0KFNldENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgLy8gVE9ETyg5NDc2KTogSW5jb3Jwb3JhdGUgdHlwZSBwYXJhbWV0ZXJzIGludG8gbmFtZS4KICAgIGFkZFJvb3QoJ1NldCcpOwogICAgaWYgKGNvbnN0YW50Lmxlbmd0aCA9PSAwKSB7CiAgICAgIGFkZCgnZW1wdHknKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZChnZXRIYXNoVGFnKGNvbnN0YW50LCA1KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwKGNvdmFyaWFudCBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50IGNvbnN0YW50LCBbX10pIHsKICAgIC8vIFRPRE8oOTQ3Nik6IEluY29ycG9yYXRlIHR5cGUgcGFyYW1ldGVycyBpbnRvIG5hbWUuCiAgICBhZGRSb290KCdNYXAnKTsKICAgIGlmIChjb25zdGFudC5sZW5ndGggPT0gMCkgewogICAgICBhZGQoJ2VtcHR5Jyk7CiAgICB9IGVsc2UgewogICAgICAvLyBVc2luZyBzb21lIGJpdHMgZnJvbSB0aGUga2V5cyBoYXNoIHRhZyBncm91cHMgdGhlIG5hbWVzIE1hcHMgd2l0aCB0aGUKICAgICAgLy8gc2FtZSBzdHJ1Y3R1cmUuCiAgICAgIGFkZChnZXRIYXNoVGFnKGNvbnN0YW50LmtleUxpc3QsIDIpICsgZ2V0SGFzaFRhZyhjb25zdGFudCwgMykpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdGVkKENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBhZGRSb290KGNvbnN0YW50LnR5cGUuZWxlbWVudC5uYW1lKTsKCiAgICAvLyBSZWNvZ25pemUgZW51bSBjb25zdGFudHMgYW5kIG9ubHkgaW5jbHVkZSB0aGUgaW5kZXguCiAgICBmaW5hbCBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+IGZpZWxkTWFwID0gY29uc3RhbnQuZmllbGRzOwogICAgaW50IHNpemUgPSBmaWVsZE1hcC5sZW5ndGg7CiAgICBpZiAoc2l6ZSA9PSAxIHx8IHNpemUgPT0gMikgewogICAgICBGaWVsZEVudGl0eSBpbmRleEZpZWxkOwogICAgICBmb3IgKEZpZWxkRW50aXR5IGZpZWxkIGluIGZpZWxkTWFwLmtleXMpIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IGZpZWxkLm5hbWU7CiAgICAgICAgaWYgKG5hbWUgPT0gJ2luZGV4JykgewogICAgICAgICAgaW5kZXhGaWVsZCA9IGZpZWxkOwogICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnX25hbWUnKSB7CiAgICAgICAgICAvLyBJZ25vcmUgX25hbWUgZmllbGQuCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluZGV4RmllbGQgPSBudWxsOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpbmRleEZpZWxkICE9IG51bGwpIHsKICAgICAgICBfdmlzaXQoY29uc3RhbnQuZmllbGRzW2luZGV4RmllbGRdKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NlZCBmcm9tIGEgY29kZWdlbiBjbG9zZWQgd29ybGQuCiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbnN0YW5jZUZpZWxkKGNvbnN0YW50LnR5cGUuZWxlbWVudCwKICAgICAgICAoXywgRmllbGRFbnRpdHkgZmllbGQpIHsKICAgICAgaWYgKGZhaWxlZCkgcmV0dXJuOwogICAgICBpZiAoX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKS5pc0VsaWRlZCkgcmV0dXJuOwogICAgICBfdmlzaXQoY29uc3RhbnQuZmllbGRzW2ZpZWxkXSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlKFR5cGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIC8vIEdlbmVyYXRlcyBzb21ldGhpbmcgbGlrZSAnVHlwZV9TdHJpbmdfazhGJywgdXNpbmcgdGhlIHNpbXBsZSBuYW1lIG9mIHRoZQogICAgLy8gdHlwZSBhbmQgYSBoYXNoIHRvIGRpc2FtYmlndWF0ZSB0aGUgc2FtZSBuYW1lIGluIGRpZmZlcmVudCBsaWJyYXJpZXMuCiAgICBhZGRSb290KCdUeXBlJyk7CiAgICBEYXJ0VHlwZSB0eXBlID0gY29uc3RhbnQucmVwcmVzZW50ZWRUeXBlOwogICAgU3RyaW5nIG5hbWU7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIG5hbWUgPSB0eXBlLmVsZW1lbnQubmFtZTsKICAgIH0gZWxzZSBpZiAodHlwZSBpcyBUeXBlZGVmVHlwZSkgewogICAgICBuYW1lID0gdHlwZS5lbGVtZW50Lm5hbWU7CiAgICB9CiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIC8vIGUuZy4gRGFydFR5cGUgJ2R5bmFtaWMnIGhhcyBubyBlbGVtZW50LgogICAgICBuYW1lID0gX25hbWVyLmdldFR5cGVSZXByZXNlbnRhdGlvbkZvclR5cGVDb25zdGFudCh0eXBlKTsKICAgIH0KICAgIGFkZElkZW50aWZpZXIobmFtZSk7CiAgICBhZGQoZ2V0SGFzaFRhZyhjb25zdGFudCwgMykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyY2VwdG9yKEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICAvLyBUaGUgY2xhc3MgbmFtZSBmb3IgbWl4aW4gYXBwbGljYXRpb25zIGNvbnRhaW4gJysnIHNpZ25zIChpc3N1ZSAyODE5NikuCiAgICBhZGRSb290KGNvbnN0YW50LmNscy5uYW1lLnJlcGxhY2VBbGwoJysnLCAnXycpKTsKICAgIGFkZCgnbWV0aG9kcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdER1bW15SW50ZXJjZXB0b3IoRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgYWRkKCdkdW1teV9pbnRlcmNlcHRvcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFVucmVhY2hhYmxlKFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBhZGQoJ3VucmVhY2hhYmxlJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SnNOYW1lKEpzTmFtZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgYWRkKCduYW1lJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGVmZXJyZWRHbG9iYWwoRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGFkZFJvb3QoJ0RlZmVycmVkJyk7CiAgfQp9CgovLy8gR2VuZXJhdGVzIGNhbm9uaWNhbCBoYXNoIHZhbHVlcyBmb3IgW0NvbnN0YW50VmFsdWVdcy4KLy8vCi8vLyBVbmZvcnR1bmF0ZWx5LCBbQ29uc3RhbnQuaGFzaENvZGVdIGlzIG5vdCBzdGFibGUgdW5kZXIgbWlub3IgcGVydHVyYmF0aW9ucywKLy8vIHNvIGl0IGNhbid0IGJlIHVzZWQgZm9yIGdlbmVyYXRpbmcgbmFtZXMuICBUaGlzIGhhc2hlciBrZWVwcyBjb25zaXN0ZW5jeQovLy8gYmV0d2VlbiBydW5zIGJ5IGJhc2luZyBoYXNoIHZhbHVlcyBvZiB0aGUgbmFtZXMgb2YgZWxlbWVudHMsIHJhdGhlciB0aGFuCi8vLyB0aGVpciBoYXNoQ29kZXMuCmNsYXNzIENvbnN0YW50Q2Fub25pY2FsSGFzaGVyIGltcGxlbWVudHMgQ29uc3RhbnRWYWx1ZVZpc2l0b3I8aW50LCBOdWxsPiB7CiAgc3RhdGljIGNvbnN0IF9NQVNLID0gMHgxZmZmZmZmZjsKICBzdGF0aWMgY29uc3QgX1VJTlQzMl9MSU1JVCA9IDQgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CgogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIE1hcDxDb25zdGFudFZhbHVlLCBpbnQ+IF9oYXNoZXMgPSB7fTsKCiAgQ29uc3RhbnRDYW5vbmljYWxIYXNoZXIodGhpcy5fbmFtZXIsIHRoaXMuX2Nsb3NlZFdvcmxkKTsKCiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwogIEpGaWVsZEFuYWx5c2lzIGdldCBfZmllbGRBbmFseXNpcyA9PiBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpczsKCiAgaW50IGdldEhhc2goQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgPT4gX3Zpc2l0KGNvbnN0YW50KTsKCiAgaW50IF92aXNpdChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBpbnQgaGFzaCA9IF9oYXNoZXNbY29uc3RhbnRdOwogICAgaWYgKGhhc2ggPT0gbnVsbCkgewogICAgICBoYXNoID0gX2ZpbmlzaChjb25zdGFudC5hY2NlcHQodGhpcywgbnVsbCkpOwogICAgICBfaGFzaGVzW2NvbnN0YW50XSA9IGhhc2g7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdE51bGwoTnVsbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgPT4gMTsKCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Tm9uQ29uc3RhbnQoTm9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSA9PiAxOwoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRCb29sKEJvb2xDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHJldHVybiBjb25zdGFudC5pc1RydWUgPyAyIDogMzsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gX2hhc2hTdHJpbmcoMSwgY29uc3RhbnQuZWxlbWVudC5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIF92aXNpdChjb25zdGFudC5mdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnQoSW50Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBCaWdJbnQgdmFsdWUgPSBjb25zdGFudC5pbnRWYWx1ZTsKICAgIGlmICh2YWx1ZS50b1NpZ25lZCgzMikgPT0gdmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlLnRvVW5zaWduZWQoMzIpLnRvSW50KCkgJiBfTUFTSzsKICAgIH0KICAgIHJldHVybiBfaGFzaERvdWJsZSh2YWx1ZS50b0RvdWJsZSgpKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdERvdWJsZShEb3VibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHJldHVybiBfaGFzaERvdWJsZShjb25zdGFudC5kb3VibGVWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRTdHJpbmcoU3RyaW5nQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gX2hhc2hTdHJpbmcoMiwgY29uc3RhbnQuc3RyaW5nVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0TGlzdChMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gX2hhc2hMaXN0KGNvbnN0YW50Lmxlbmd0aCwgY29uc3RhbnQuZW50cmllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRTZXQoU2V0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gX2hhc2hMaXN0KGNvbnN0YW50Lmxlbmd0aCwgY29uc3RhbnQudmFsdWVzKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdE1hcChNYXBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGludCBoYXNoID0gX2hhc2hMaXN0KGNvbnN0YW50Lmxlbmd0aCwgY29uc3RhbnQua2V5cyk7CiAgICByZXR1cm4gX2hhc2hMaXN0KGhhc2gsIGNvbnN0YW50LnZhbHVlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRDb25zdHJ1Y3RlZChDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgaW50IGhhc2ggPSBfaGFzaFN0cmluZygzLCBjb25zdGFudC50eXBlLmVsZW1lbnQubmFtZSk7CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbnN0YW5jZUZpZWxkKGNvbnN0YW50LnR5cGUuZWxlbWVudCwKICAgICAgICAoXywgRmllbGRFbnRpdHkgZmllbGQpIHsKICAgICAgaWYgKF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCkuaXNFbGlkZWQpIHJldHVybjsKICAgICAgaGFzaCA9IF9jb21iaW5lKGhhc2gsIF92aXNpdChjb25zdGFudC5maWVsZHNbZmllbGRdKSk7CiAgICB9KTsKICAgIHJldHVybiBoYXNoOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0VHlwZShUeXBlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gY29uc3RhbnQucmVwcmVzZW50ZWRUeXBlOwogICAgLy8gVGhpcyBuYW1lIGluY2x1ZGVzIHRoZSBsaWJyYXJ5IG5hbWUgYW5kIHR5cGUgcGFyYW1ldGVycy4KICAgIFN0cmluZyBuYW1lID0gX25hbWVyLmdldFR5cGVSZXByZXNlbnRhdGlvbkZvclR5cGVDb25zdGFudCh0eXBlKTsKICAgIHJldHVybiBfaGFzaFN0cmluZyg0LCBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdEludGVyY2VwdG9yKEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBTdHJpbmcgdHlwZU5hbWUgPSBjb25zdGFudC5jbHMubmFtZTsKICAgIHJldHVybiBfaGFzaFN0cmluZyg1LCB0eXBlTmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXREdW1teUludGVyY2VwdG9yKER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAnRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgc2hvdWxkIG5ldmVyIGJlIG5hbWVkIGFuZCAnCiAgICAgICAgJ25ldmVyIGJlIHN1YmNvbnN0YW50Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRVbnJlYWNoYWJsZShVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICdVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgc2hvdWxkIG5ldmVyIGJlIG5hbWVkIGFuZCAnCiAgICAgICAgJ25ldmVyIGJlIHN1YmNvbnN0YW50Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRKc05hbWUoSnNOYW1lQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgJ0pzTmFtZUNvbnN0YW50VmFsdWUgc2hvdWxkIG5ldmVyIGJlIG5hbWVkIGFuZCAnCiAgICAgICAgJ25ldmVyIGJlIHN1YmNvbnN0YW50Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXREZWZlcnJlZEdsb2JhbChEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgaW50IGhhc2ggPSBjb25zdGFudC51bml0Lmhhc2hDb2RlOwogICAgcmV0dXJuIF9jb21iaW5lKGhhc2gsIF92aXNpdChjb25zdGFudC5yZWZlcmVuY2VkKSk7CiAgfQoKICBpbnQgX2hhc2hTdHJpbmcoaW50IGhhc2gsIFN0cmluZyBzKSB7CiAgICBpbnQgbGVuZ3RoID0gcy5sZW5ndGg7CiAgICBoYXNoID0gX2NvbWJpbmUoaGFzaCwgbGVuZ3RoKTsKICAgIC8vIEluY3JlYXNpbmcgc3RyaWRlIGlzIE8obG9nIE4pIG9uIGxhcmdlIHN0cmluZ3Mgd2hpY2ggYXJlIHVubGlrZWx5IHRvIGhhdmUKICAgIC8vIG1hbnkgY29sbGlzaW9ucy4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEgKyAoaSA+PiAyKSkgewogICAgICBoYXNoID0gX2NvbWJpbmUoaGFzaCwgcy5jb2RlVW5pdEF0KGkpKTsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KCiAgaW50IF9oYXNoTGlzdChpbnQgaGFzaCwgTGlzdDxDb25zdGFudFZhbHVlPiBjb25zdGFudHMpIHsKICAgIGZvciAoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCBpbiBjb25zdGFudHMpIHsKICAgICAgaGFzaCA9IF9jb21iaW5lKGhhc2gsIF92aXNpdChjb25zdGFudCkpOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBzdGF0aWMgaW50IF9oYXNoSW50KGludCB2YWx1ZSkgewogICAgaWYgKHZhbHVlLmFicygpIDwgX1VJTlQzMl9MSU1JVCkgcmV0dXJuIF9NQVNLICYgdmFsdWU7CiAgICByZXR1cm4gX2hhc2hEb3VibGUodmFsdWUudG9Eb3VibGUoKSk7CiAgfQoKICBzdGF0aWMgaW50IF9oYXNoRG91YmxlKGRvdWJsZSB2YWx1ZSkgewogICAgZG91YmxlIG1hZ25pdHVkZSA9IHZhbHVlLmFicygpOwogICAgaW50IHNpZ24gPSB2YWx1ZSA8IDAgPyAxIDogMDsKICAgIGlmIChtYWduaXR1ZGUgPCBfVUlOVDMyX0xJTUlUKSB7CiAgICAgIC8vIDJeMzIKICAgICAgaW50IGludFZhbHVlID0gdmFsdWUudG9JbnQoKTsKICAgICAgLy8gSW50ZWdlciB2YWx1ZWQgZG91YmxlcyBpbiAzMi1iaXQgcmFuZ2UgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZXMgYXMgaW50cy4KICAgICAgaW50IGhhc2ggPSBfaGFzaEludChpbnRWYWx1ZSk7CiAgICAgIGlmICh2YWx1ZSA9PSBpbnRWYWx1ZSkgcmV0dXJuIGhhc2g7CiAgICAgIGhhc2ggPSBfY29tYmluZShoYXNoLCBzaWduKTsKICAgICAgaW50IGZyYWN0aW9uID0gKChtYWduaXR1ZGUgLSBpbnRWYWx1ZS5hYnMoKSkgKiAoX01BU0sgKyAxKSkudG9JbnQoKTsKICAgICAgaGFzaCA9IF9jb21iaW5lKGhhc2gsIGZyYWN0aW9uKTsKICAgICAgcmV0dXJuIGhhc2g7CiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzSW5maW5pdGUpIHsKICAgICAgcmV0dXJuIF9jb21iaW5lKDYsIHNpZ24pOwogICAgfSBlbHNlIGlmICh2YWx1ZS5pc05hTikgewogICAgICByZXR1cm4gNzsKICAgIH0gZWxzZSB7CiAgICAgIGludCBoYXNoID0gMDsKICAgICAgd2hpbGUgKG1hZ25pdHVkZSA+PSBfVUlOVDMyX0xJTUlUKSB7CiAgICAgICAgbWFnbml0dWRlID0gbWFnbml0dWRlIC8gX1VJTlQzMl9MSU1JVDsKICAgICAgICBoYXNoKys7CiAgICAgIH0KICAgICAgaGFzaCA9IF9jb21iaW5lKGhhc2gsIHNpZ24pOwogICAgICByZXR1cm4gX2NvbWJpbmUoaGFzaCwgX2hhc2hEb3VibGUobWFnbml0dWRlKSk7CiAgICB9CiAgfQoKICAvLy8gW19jb21iaW5lXSBhbmQgW19maW5pc2hdIGFyZSBwYXJ0cyBvZiB0aGUgW0plbmtpbnMgaGFzaCBmdW5jdGlvbl1bMV0sCiAgLy8vIG1vZGlmaWVkIGJ5IHVzaW5nIG1hc2tpbmcgdG8ga2VlcCB2YWx1ZXMgaW4gU01JIHJhbmdlLgogIC8vLwogIC8vLyBbMV06IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmVua2luc19oYXNoX2Z1bmN0aW9uCiAgc3RhdGljIGludCBfY29tYmluZShpbnQgaGFzaCwgaW50IHZhbHVlKSB7CiAgICBoYXNoID0gX01BU0sgJiAoaGFzaCArIHZhbHVlKTsKICAgIGhhc2ggPSBfTUFTSyAmIChoYXNoICsgKCgoX01BU0sgPj4gMTApICYgaGFzaCkgPDwgMTApKTsKICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4gNik7CiAgICByZXR1cm4gaGFzaDsKICB9CgogIHN0YXRpYyBpbnQgX2ZpbmlzaChpbnQgaGFzaCkgewogICAgaGFzaCA9IF9NQVNLICYgKGhhc2ggKyAoKChfTUFTSyA+PiAzKSAmIGhhc2gpIDw8IDMpKTsKICAgIGhhc2ggPSBoYXNoICYgKGhhc2ggPj4gMTEpOwogICAgcmV0dXJuIF9NQVNLICYgKGhhc2ggKyAoKChfTUFTSyA+PiAxNSkgJiBoYXNoKSA8PCAxNSkpOwogIH0KfQoKY2xhc3MgRnVuY3Rpb25UeXBlTmFtZXIgZXh0ZW5kcyBCYXNlRGFydFR5cGVWaXNpdG9yIHsKICBTdHJpbmdCdWZmZXIgc2I7CgogIEZ1bmN0aW9uVHlwZU5hbWVyKCk7CgogIFN0cmluZyBjb21wdXRlTmFtZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHZpc2l0KHR5cGUpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdChEYXJ0VHlwZSB0eXBlLCBbX10pIHsKICAgIHR5cGUuYWNjZXB0KHRoaXMsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlKERhcnRUeXBlIHR5cGUsIF8pIHt9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsIF8pIHsKICAgIHNiLndyaXRlKHR5cGUuZWxlbWVudC5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgdHlwZSwgXykgewogICAgc2Iud3JpdGUodHlwZS5lbGVtZW50Lm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlVmFyaWFibGVUeXBlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgXykgewogICAgc2Iud3JpdGUodHlwZS5lbGVtZW50Lm5hbWUpOwogIH0KCiAgYm9vbCBfaXNTaW1wbGVGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUpIHsKICAgIGlmICghdHlwZS5yZXR1cm5UeXBlLmlzRHluYW1pYykgcmV0dXJuIGZhbHNlOwogICAgaWYgKCF0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKCF0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChEYXJ0VHlwZSBwYXJhbWV0ZXIgaW4gdHlwZS5wYXJhbWV0ZXJUeXBlcykgewogICAgICBpZiAoIXBhcmFtZXRlci5pc0R5bmFtaWMpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUsIF8pIHsKICAgIGlmIChfaXNTaW1wbGVGdW5jdGlvblR5cGUodHlwZSkpIHsKICAgICAgc2Iud3JpdGUoJ2FyZ3Mke3R5cGUucGFyYW1ldGVyVHlwZXMubGVuZ3RofScpOwogICAgICByZXR1cm47CiAgICB9CiAgICB2aXNpdCh0eXBlLnJldHVyblR5cGUpOwogICAgc2Iud3JpdGUoJ18nKTsKICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIHR5cGUucGFyYW1ldGVyVHlwZXMpIHsKICAgICAgc2Iud3JpdGUoJ18nKTsKICAgICAgdmlzaXQocGFyYW1ldGVyKTsKICAgIH0KICAgIGJvb2wgZmlyc3QgPSBmYWxzZTsKICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcykgewogICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgc2Iud3JpdGUoJ18nKTsKICAgICAgfQogICAgICBzYi53cml0ZSgnXycpOwogICAgICB2aXNpdChwYXJhbWV0ZXIpOwogICAgICBmaXJzdCA9IHRydWU7CiAgICB9CiAgICBpZiAoIXR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcy5pc0VtcHR5KSB7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcykgewogICAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICAgIHNiLndyaXRlKCdfJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKCdfJyk7CiAgICAgICAgdmlzaXQocGFyYW1ldGVyKTsKICAgICAgICBmaXJzdCA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9Cn0KCmNsYXNzIE5hbWluZ1Njb3BlIHsKICAvLy8gTWFwcyBwcm9wb3NlZCBuYW1lcyB0byAqc3VnZ2VzdGVkKiBkaXNhbWJpZ3VhdGVkIG5hbWVzLgogIC8vLwogIC8vLyBTdWdnZXN0ZWQgbmFtZXMgYXJlIGhpbnRzIHRvIHRoZSBbTWluaWZ5TmFtZXJdLCBzdWdnZXN0aW5nIHRoYXQgYSBzcGVjaWZpYwogIC8vLyBuYW1lcyBiZSBnaXZlbiB0byB0aGUgZmlyc3QgaXRlbSB3aXRoIHRoZSBnaXZlbiBwcm9wb3NlZCBuYW1lLgogIC8vLwogIC8vLyBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIGluIFtNaW5pZnlOYW1lcl0gdG8gYXNzaWduIHZlcnkgc2hvcnQgbWluaWZpZWQKICAvLy8gbmFtZXMgdG8gdGhpbmdzIHRoYXQgdGVuZCB0byBiZSB1c2VkIHZlcnkgb2Z0ZW4uCiAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBfc3VnZ2VzdGVkTmFtZXMgPSB7fTsKICBmaW5hbCBTZXQ8U3RyaW5nPiBfdXNlZE5hbWVzID0gU2V0KCk7CgogIGJvb2wgaXNVc2VkKFN0cmluZyBuYW1lKSA9PiBfdXNlZE5hbWVzLmNvbnRhaW5zKG5hbWUpOwogIGJvb2wgaXNVbnVzZWQoU3RyaW5nIG5hbWUpID0+ICFfdXNlZE5hbWVzLmNvbnRhaW5zKG5hbWUpOwogIGJvb2wgcmVnaXN0ZXJVc2UoU3RyaW5nIG5hbWUpID0+IF91c2VkTmFtZXMuYWRkKG5hbWUpOwoKICBTdHJpbmcgc3VnZ2VzdE5hbWUoU3RyaW5nIG9yaWdpbmFsKSA9PiBfc3VnZ2VzdGVkTmFtZXNbb3JpZ2luYWxdOwogIHZvaWQgYWRkU3VnZ2VzdGlvbihTdHJpbmcgb3JpZ2luYWwsIFN0cmluZyBzdWdnZXN0aW9uKSB7CiAgICBhc3NlcnQoIV9zdWdnZXN0ZWROYW1lcy5jb250YWluc0tleShvcmlnaW5hbCkpOwogICAgX3N1Z2dlc3RlZE5hbWVzW29yaWdpbmFsXSA9IHN1Z2dlc3Rpb247CiAgfQoKICBib29sIGhhc1N1Z2dlc3Rpb24oU3RyaW5nIG9yaWdpbmFsKSA9PiBfc3VnZ2VzdGVkTmFtZXMuY29udGFpbnNLZXkob3JpZ2luYWwpOwogIGJvb2wgaXNTdWdnZXN0aW9uKFN0cmluZyBjYW5kaWRhdGUpIHsKICAgIHJldHVybiBfc3VnZ2VzdGVkTmFtZXMuY29udGFpbnNWYWx1ZShjYW5kaWRhdGUpOwogIH0KfQoKLy8vIEZpeGVkIG5hbWVzIHVzYWdlIGJ5IHRoZSBuYW1lci4KY2xhc3MgRml4ZWROYW1lcyB7CiAgY29uc3QgRml4ZWROYW1lcygpOwoKICBTdHJpbmcgZ2V0IGdldHRlclByZWZpeCA9PiByJ2dldCQnOwogIFN0cmluZyBnZXQgc2V0dGVyUHJlZml4ID0+IHInc2V0JCc7CiAgU3RyaW5nIGdldCBjYWxsUHJlZml4ID0+ICdjYWxsJzsKICBTdHJpbmcgZ2V0IGNhbGxDYXRjaEFsbE5hbWUgPT4gcidjYWxsKic7CiAgU3RyaW5nIGdldCBjYWxsTmFtZUZpZWxkID0+IHInJGNhbGxOYW1lJzsKICBTdHJpbmcgZ2V0IHJlZmxlY3RhYmxlRmllbGQgPT4gcickcmVmbGVjdGFibGUnOwogIFN0cmluZyBnZXQgY2xhc3NEZXNjcmlwdG9yUHJvcGVydHkgPT4gcideJzsKICBTdHJpbmcgZ2V0IGRlZmF1bHRWYWx1ZXNGaWVsZCA9PiByJyRkZWZhdWx0VmFsdWVzJzsKICBTdHJpbmcgZ2V0IGRlZmVycmVkQWN0aW9uID0+IHInJGRlZmVycmVkQWN0aW9uJzsKICBTdHJpbmcgZ2V0IG9wZXJhdG9ySXNQcmVmaXggPT4gcickaXMnOwogIFN0cmluZyBnZXQgb3BlcmF0b3JBc1ByZWZpeCA9PiByJyRhcyc7CiAgU3RyaW5nIGdldCBvcGVyYXRvclNpZ25hdHVyZSA9PiByJyRzaWduYXR1cmUnOwogIFN0cmluZyBnZXQgcmVxdWlyZWRQYXJhbWV0ZXJGaWVsZCA9PiByJyRyZXF1aXJlZEFyZ0NvdW50JzsKICBTdHJpbmcgZ2V0IHJ0aU5hbWUgPT4gcickdGknOwp9CgovLy8gTWluaWZpZWQgdmVyc2lvbiBvZiB0aGUgZml4ZWQgbmFtZXMgdXNhZ2UgYnkgdGhlIG5hbWVyLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZCBpbXBsZW1lbnQgW0ZpeGVkTmFtZXNdIGFuZCBtaW5pZnkgYWxsIGZpeGVkCi8vIG5hbWVzLgpjbGFzcyBNaW5pZmllZEZpeGVkTmFtZXMgZXh0ZW5kcyBGaXhlZE5hbWVzIHsKICBjb25zdCBNaW5pZmllZEZpeGVkTmFtZXMoKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBnZXR0ZXJQcmVmaXggPT4gJ2cnOwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc2V0dGVyUHJlZml4ID0+ICdzJzsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGNhbGxQcmVmaXggPT4gJyc7IC8vIHRoaXMgd2lsbCBjcmVhdGUgZnVuY3Rpb24gbmFtZXMgJDxuPgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgb3BlcmF0b3JJc1ByZWZpeCA9PiByJyRpJzsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG9wZXJhdG9yQXNQcmVmaXggPT4gcickYSc7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBjYWxsQ2F0Y2hBbGxOYW1lID0+IHInJEMnOwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgcmVxdWlyZWRQYXJhbWV0ZXJGaWVsZCA9PiByJyRSJzsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlZmF1bHRWYWx1ZXNGaWVsZCA9PiByJyREJzsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG9wZXJhdG9yU2lnbmF0dXJlID0+IHInJFMnOwp9CgovLy8gTmFtZXIgaW50ZXJmYWNlIHRoYXQgY2FuIGJlIHVzZWQgaW4gbW9kdWxhciBjb2RlIGdlbmVyYXRpb24uCmFic3RyYWN0IGNsYXNzIE1vZHVsYXJOYW1lciB7CiAgRml4ZWROYW1lcyBnZXQgZml4ZWROYW1lczsKICBSdW50aW1lVHlwZVRhZ3MgZ2V0IHJ0aVRhZ3M7CgogIC8vLyBSZXR1cm5zIGEgdmFyaWFibGUgdXNlIGZvciBhY2Nlc3NpbmcgW2xpYnJhcnldLgogIC8vLwogIC8vLyBUaGlzIGlzIG9uZSBvZiB0aGUgW3Jlc2VydmVkR2xvYmFsT2JqZWN0TmFtZXNdCiAganNBc3QuRXhwcmVzc2lvbiByZWFkR2xvYmFsT2JqZWN0Rm9yTGlicmFyeShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICAvLy8gUmV0dXJucyBhIHZhcmlhYmxlIHVzZSBmb3IgYWNjZXNzaW5nIHRoZSBjbGFzcyBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgb25lIG9mIHRoZSBbcmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lc10KICBqc0FzdC5FeHByZXNzaW9uIHJlYWRHbG9iYWxPYmplY3RGb3JDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYSB2YXJpYWJsZSB1c2UgZm9yIGFjY2Vzc2luZyB0aGUgdHlwZSBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgb25lIG9mIHRoZSBbcmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lc10KICBqc0FzdC5FeHByZXNzaW9uIHJlYWRHbG9iYWxPYmplY3RGb3JUeXBlKEVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYSB2YXJpYWJsZSB1c2UgZm9yIGFjY2Vzc2luZyB0aGUgbWVtYmVyIFtlbGVtZW50XS4KICAvLy8KICAvLy8gVGhpcyBpcyBlaXRoZXIgdGhlIFtzdGF0aWNTdGF0ZUhvbGRlcl0gb3Igb25lIG9mIHRoZQogIC8vLyBbcmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lc10KICBqc0FzdC5FeHByZXNzaW9uIHJlYWRHbG9iYWxPYmplY3RGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBhIEphdmFTY3JpcHQgcHJvcGVydHkgbmFtZSB1c2VkIHRvIHN0b3JlIHRoZSBjbGFzcyBbZWxlbWVudF0gb24KICAvLy8gb25lIG9mIHRoZSBnbG9iYWwgb2JqZWN0cy4KICAvLy8KICAvLy8gU2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBbZ2xvYmFsT2JqZWN0Rm9yQ2xhc3NdLCB3aGljaCBkZW5vdGVzIHRoZQogIC8vLyBvYmplY3Qgb24gd2hpY2ggdGhlIHJldHVybmVkIHByb3BlcnR5IG5hbWUgc2hvdWxkIGJlIHVzZWQuCiAganNBc3QuTmFtZSBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYSBKYXZhU2NyaXB0IHByb3BlcnR5IG5hbWUgdXNlZCB0byBzdG9yZSB0aGUgbWVtYmVyIFtlbGVtZW50XSBvbgogIC8vLyBvbmUgb2YgdGhlIGdsb2JhbCBvYmplY3RzLgogIC8vLwogIC8vLyBTaG91bGQgYmUgdXNlZCB0b2dldGhlciB3aXRoIFtnbG9iYWxPYmplY3RGb3JNZW1iZXJdLCB3aGljaCBkZW5vdGVzIHRoZQogIC8vLyBvYmplY3Qgb24gd2hpY2ggdGhlIHJldHVybmVkIHByb3BlcnR5IG5hbWUgc2hvdWxkIGJlIHVzZWQuCiAganNBc3QuTmFtZSBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBhIEphdmFTY3JpcHQgcHJvcGVydHkgbmFtZSB1c2VkIHRvIHN0b3JlIHRoZSB0eXBlICh0eXBlZGVmKQogIC8vLyBbZWxlbWVudF0gb24gb25lIG9mIHRoZSBnbG9iYWwgb2JqZWN0cy4KICAvLy8KICAvLy8gU2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBbZ2xvYmFsT2JqZWN0Rm9yVHlwZV0sIHdoaWNoIGRlbm90ZXMgdGhlCiAgLy8vIG9iamVjdCBvbiB3aGljaCB0aGUgcmV0dXJuZWQgcHJvcGVydHkgbmFtZSBzaG91bGQgYmUgdXNlZC4KICBqc0FzdC5OYW1lIGdsb2JhbFByb3BlcnR5TmFtZUZvclR5cGUoRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBhIG5hbWUsIHRoZSBzdHJpbmcgb2Ygd2hpY2ggaXMgYSBnbG9iYWxseSB1bmlxdWUga2V5IGRpc3RpbmN0IGZyb20KICAvLy8gb3RoZXIgZ2xvYmFsIHByb3BlcnR5IG5hbWVzLgogIC8vLwogIC8vLyBUaGUgbmFtZSBpcyBub3QgbmVjZXNzYXJpbHkgYSB2YWxpZCBKYXZhU2NyaXB0IGlkZW50aWZpZXIsIHNvIGl0IG5lZWRzIHRvCiAgLy8vIGJlIHF1b3RlZC4KICBqc0FzdC5OYW1lIGdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGUoCiAgICAgIFR5cGVWYXJpYWJsZUVudGl0eSB0eXBlVmFyaWFibGUpOwoKICAvLy8gUmV0dXJucyB0aGUgbmFtZSBmb3IgdGhlIGluc3RhbmNlIGZpZWxkIHRoYXQgaG9sZHMgcnVudGltZSB0eXBlIGFyZ3VtZW50cwogIC8vLyBvbiBnZW5lcmljIGNsYXNzZXMuCiAganNBc3QuTmFtZSBnZXQgcnRpRmllbGRKc05hbWU7CgogIC8vLyBQcm9wZXJ0eSBuYW1lIG9uIHdoaWNoIFttZW1iZXJdIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSwKICAvLy8gd2l0aG91dCBjbGFzaGluZyB3aXRoIGFub3RoZXIgSlMgcHJvcGVydHkgbmFtZS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBpbXBsZW1lbnRpbmcgc3VwZXItY2FsbHMsIHdoZXJlIG9yZGluYXJ5IGRpc3BhdGNoCiAgLy8vIHNlbWFudGljcyBtdXN0IGJlIGNpcmN1bXZlbnRlZC4gRm9yIGV4YW1wbGU6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHsgZm9vKCkgfQogIC8vLyAgICAgY2xhc3MgQiBleHRlbmRzIEEgewogIC8vLyAgICAgICAgIGZvbygpIHsgc3VwZXIuZm9vKCkgfQogIC8vLyAgICAgfQogIC8vLwogIC8vLyBFeGFtcGxlIHRyYW5zbGF0aW9uIHRvIEpTOgogIC8vLwogIC8vLyAgICAgQS5wcm90b3R5cGUuc3VwZXIkQSRmb28gPSBmdW5jdGlvbigpIHsuLi59CiAgLy8vICAgICBBLnByb3RvdHlwZS5mb28kMCA9IEEucHJvdG90eXBlLnN1cGVyJEEkZm9vCiAgLy8vCiAgLy8vICAgICBCLnByb3RvdHlwZS5mb28kMCA9IGZ1bmN0aW9uKCkgewogIC8vLyAgICAgICAgIHRoaXMuc3VwZXIkQSRmb28oKTsgLy8gc3VwZXIuZm9vKCkKICAvLy8gICAgIH0KICAvLy8KICBqc0FzdC5OYW1lIGFsaWFzZWRTdXBlck1lbWJlclByb3BlcnR5TmFtZShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgcHJvcGVydHkgbmFtZSB1c2VkIHRvIHN0b3JlIGFuIGluc3RhbmNlIGZpZWxkLgogIGpzQXN0Lk5hbWUgaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShGaWVsZEVudGl0eSBlbGVtZW50KTsKCiAgLy8vIEFubm90YXRlZCBuYW1lIGZvciBbbWV0aG9kXSBlbmNvZGluZyBhcml0eSBhbmQgbmFtZWQgcGFyYW1ldGVycy4KICBqc0FzdC5OYW1lIGluc3RhbmNlTWV0aG9kTmFtZShGdW5jdGlvbkVudGl0eSBtZXRob2QpOwoKICAvLy8gVHJhbnNsYXRlcyBhIFtTdHJpbmddIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgW05hbWVdIGRhdGEgc3RydWN0dXJlIGFzCiAgLy8vIHVzZWQgYnkgdGhlIG5hbWVyLgogIC8vLwogIC8vLyBJZiBbbmFtZV0gaXMgYSBzZXR0ZXIgb3IgZ2V0dGVyIG5hbWUsIHRoZSBjb3JyZXNwb25kaW5nIFtHZXR0ZXJOYW1lXSBvcgogIC8vLyBbU2V0dGVyTmFtZV0gZGF0YSBzdHJ1Y3R1cmUgaXMgdXNlZC4KICBqc0FzdC5OYW1lIGFzTmFtZShTdHJpbmcgbmFtZSk7CgogIC8vLyBBbm5vdGF0ZWQgbmFtZSBmb3IgdGhlIG1lbWJlciBiZWluZyBpbnZva2VkIGJ5IFtzZWxlY3Rvcl0uCiAganNBc3QuTmFtZSBpbnZvY2F0aW9uTmFtZShTZWxlY3RvciBzZWxlY3Rvcik7CgogIC8vLyBQcm9wZXJ0eSBuYW1lIHVzZWQgZm9yIGEgc3BlY2lhbGl6YXRpb24gb2YgYGdldEludGVyY2VwdG9yYC4KICAvLy8KICAvLy8ganNfcnVudGltZSBjb250YWlucyBhIHRvcC1sZXZlbCBgZ2V0SW50ZXJjZXB0b3JgIG1ldGhvZC4gVGhlCiAgLy8vIHNwZWNpYWxpemF0aW9ucyBoYXZlIHRoZSBzYW1lIG5hbWUsIGJ1dCB3aXRoIGEgc3VmZml4IHRvIGF2b2lkIG5hbWUKICAvLy8gY29sbGlzaW9ucy4KICBqc0FzdC5OYW1lIG5hbWVGb3JHZXRJbnRlcmNlcHRvcihTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpOwoKICAvLy8gUHJvcGVydHkgbmFtZSB1c2VkIGZvciB0aGUgb25lLXNob3QgaW50ZXJjZXB0b3IgbWV0aG9kIGZvciB0aGUgZ2l2ZW4KICAvLy8gW3NlbGVjdG9yXSBhbmQgcmV0dXJuLXR5cGUgc3BlY2lhbGl6YXRpb24uCiAganNBc3QuTmFtZSBuYW1lRm9yT25lU2hvdEludGVyY2VwdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzKTsKCiAgLy8vIFJldHVybnMgdGhlIHJ1bnRpbWUgbmFtZSBmb3IgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBUaGlzIG5hbWUgaXMgdXNlZCBhcyB0aGUgYmFzaXMgZm9yIGRlcml2aW5nIGBpc2AgYW5kIGBhc2AgcHJvcGVydHkgbmFtZXMKICAvLy8gZm9yIHRoZSBnaXZlbiB0eXBlLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGlzIG5vdCBhbHdheXMgc2FmZSBhcyBhIHByb3BlcnR5IG5hbWUgdW5sZXNzIHByZWZpeGluZwogIC8vLyBbb3BlcmF0b3JJc1ByZWZpeF0gb3IgW29wZXJhdG9yQXNQcmVmaXhdLiBJZiB0aGlzIGlzIGEgZnVuY3Rpb24gdHlwZSwKICAvLy8gdGhlbiBieSBjb252ZW50aW9uLCBhbiB1bmRlcnNjb3JlIG11c3QgYWxzbyBzZXBhcmF0ZSBbb3BlcmF0b3JJc1ByZWZpeF0KICAvLy8gZnJvbSB0aGUgdHlwZSBuYW1lLgogIGpzQXN0Lk5hbWUgcnVudGltZVR5cGVOYW1lKEVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFByb3BlcnR5IG5hbWUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIGdpdmVuIHN0YXRpYyBvciBpbnN0YW5jZSBbbWV0aG9kXS4KICAvLy8gRm9yIGluc3RhbmNlIG1ldGhvZHMsIHRoaXMgaW5jbHVkZXMgdGhlIHN1ZmZpeCBlbmNvZGluZyBhcml0eSBhbmQgbmFtZWQKICAvLy8gcGFyYW1ldGVycy4KICAvLy8KICAvLy8gVGhlIG5hbWUgaXMgbm90IG5lY2Vzc2FyaWx5IHVuaXF1ZSB0byBbbWV0aG9kXSwgc2luY2UgYSBzdGF0aWMgbWV0aG9kCiAgLy8vIG1heSBzaGFyZSBpdHMgbmFtZSB3aXRoIGFuIGluc3RhbmNlIG1ldGhvZC4KICBqc0FzdC5OYW1lIG1ldGhvZFByb3BlcnR5TmFtZShGdW5jdGlvbkVudGl0eSBtZXRob2QpOwoKICAvLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYGlzWGAgcHJvcGVydHkgZm9yIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQKICAvLy8gW2VsZW1lbnRdLgogIGpzQXN0Lk5hbWUgb3BlcmF0b3JJcyhDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgYGlzWGAgcHJvcGVydHkgZm9yIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgW3R5cGVdLgogIGpzQXN0Lk5hbWUgb3BlcmF0b3JJc1R5cGUoRGFydFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBgYXNYYCBmdW5jdGlvbiBmb3IgY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGUKICAvLy8gZ2VuZXJpYyBjbGFzcyBbZWxlbWVudF0uCiAganNBc3QuTmFtZSBzdWJzdGl0dXRpb25OYW1lKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbGF6eSBpbml0aWFsaXplciBmb3IgdGhlIHN0YXRpYyBmaWVsZCBbZWxlbWVudF0uCiAganNBc3QuTmFtZSBsYXp5SW5pdGlhbGl6ZXJOYW1lKEZpZWxkRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2xvc3VyZSBvZiB0aGUgc3RhdGljIG1ldGhvZCBbZWxlbWVudF0uCiAganNBc3QuTmFtZSBzdGF0aWNDbG9zdXJlTmFtZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZSBvZiBbY2xhc3NfXS4KICAvLy8KICAvLy8gVGhpcyBpcyBib3RoIHRoZSAqcnVudGltZSB0eXBlKiBvZiB0aGUgY2xhc3MgKHNlZSBbcnVudGltZVR5cGVOYW1lXSkKICAvLy8gYW5kIGEgZ2xvYmFsIHByb3BlcnR5IG5hbWUgaW4gd2hpY2ggdG8gc3RvcmUgaXRzIEpTIGNvbnN0cnVjdG9yLgogIGpzQXN0Lk5hbWUgY2xhc3NOYW1lKENsYXNzRW50aXR5IGNsYXNzXyk7CgogIC8vLyBUaGUgcHJlZml4IHVzZWQgZm9yIGVuY29kaW5nIGFzeW5jIHByb3BlcnRpZXMuCiAgZmluYWwgU3RyaW5nIGFzeW5jUHJlZml4ID0gciIkYXN5bmMkIjsKCiAgLy8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBob2xkZXIgb2Ygc3RhdGljIHN0YXRlLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIG11dGFibGUgc3RhdGljIGZpZWxkcy4KICBmaW5hbCBTdHJpbmcgc3RhdGljU3RhdGVIb2xkZXIgPSByJyQnOwoKICBqc0FzdC5OYW1lIF9saXRlcmFsQXN5bmNQcmVmaXg7CgogIE1vZHVsYXJOYW1lcigpIHsKICAgIF9saXRlcmFsQXN5bmNQcmVmaXggPSBuZXcgU3RyaW5nQmFja2VkTmFtZShhc3luY1ByZWZpeCk7CiAgfQoKICAvLy8gUmV0dXJucyBhIHNhZmUgdmFyaWFibGUgbmFtZSBmb3IgdXNlIGluIGFzeW5jIHJld3JpdGluZy4KICAvLy8KICAvLy8gSGFzIHRoZSBzYW1lIHByb3BlcnR5IGFzIFtzYWZlVmFyaWFibGVOYW1lXSBidXQgZG9lcyBub3QgY2xhc2ggd2l0aAogIC8vLyBuYW1lcyByZXR1cm5lZCBmcm9tIHRoZXJlLgogIC8vLyBBZGRpdGlvbmFsbHksIHdoZW4gdXNlZCBhcyBhIHByZWZpeCB0byBhIHZhcmlhYmxlIG5hbWUsIHRoZSByZXN1bHQKICAvLy8gd2lsbCBiZSBzYWZlIHRvIHVzZSwgYXMgd2VsbC4KICBTdHJpbmcgc2FmZVZhcmlhYmxlUHJlZml4Rm9yQXN5bmNSZXdyaXRlKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gIiRhc3luY1ByZWZpeCRuYW1lIjsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGUgYXN5bmMgYm9keSBvZiB0aGUgbWV0aG9kIHdpdGggdGhlIFtvcmlnaW5hbF0KICAvLy8gbmFtZS4KICBqc0FzdC5OYW1lIGRlcml2ZUFzeW5jQm9keU5hbWUoanNBc3QuTmFtZSBvcmlnaW5hbCkgewogICAgcmV0dXJuIG5ldyBBc3luY05hbWUoX2xpdGVyYWxBc3luY1ByZWZpeCwgb3JpZ2luYWwpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGxhYmVsIG5hbWUgZm9yIFtsYWJlbF0gdXNlZCBhcyBhIGJyZWFrIHRhcmdldC4KICBTdHJpbmcgYnJlYWtMYWJlbE5hbWUoTGFiZWxEZWZpbml0aW9uIGxhYmVsKSB7CiAgICByZXR1cm4gJ1wkJHtsYWJlbC5sYWJlbE5hbWV9XCQke2xhYmVsLnRhcmdldC5uZXN0aW5nTGV2ZWx9JzsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBsYWJlbCBuYW1lIGZvciB0aGUgaW1wbGljaXQgYnJlYWsgbGFiZWwgbmVlZGVkIGZvciB0aGUganVtcAogIC8vLyBbdGFyZ2V0XS4KICBTdHJpbmcgaW1wbGljaXRCcmVha0xhYmVsTmFtZShKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgcmV0dXJuICdcJCR7dGFyZ2V0Lm5lc3RpbmdMZXZlbH0nOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGxhYmVsIG5hbWUgZm9yIFtsYWJlbF0gdXNlZCBhcyBhIGNvbnRpbnVlIHRhcmdldC4KICAvLy8KICAvLy8gV2Ugc29tZXRpbWVzIGhhbmRsZSBjb250aW51ZSB0YXJnZXRzIGRpZmZlcmVudGx5IGZyb20gYnJlYWsgdGFyZ2V0cywKICAvLy8gc28gd2UgaGF2ZSBzcGVjaWFsIGNvbnRpbnVlLW9ubHkgbGFiZWxzLgogIFN0cmluZyBjb250aW51ZUxhYmVsTmFtZShMYWJlbERlZmluaXRpb24gbGFiZWwpIHsKICAgIHJldHVybiAnY1wkJHtsYWJlbC5sYWJlbE5hbWV9XCQke2xhYmVsLnRhcmdldC5uZXN0aW5nTGV2ZWx9JzsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBsYWJlbCBuYW1lIGZvciB0aGUgaW1wbGljaXQgY29udGludWUgbGFiZWwgbmVlZGVkIGZvciB0aGUganVtcAogIC8vLyBbdGFyZ2V0XS4KICBTdHJpbmcgaW1wbGljaXRDb250aW51ZUxhYmVsTmFtZShKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgcmV0dXJuICdjXCQke3RhcmdldC5uZXN0aW5nTGV2ZWx9JzsKICB9CgogIFNldDxTdHJpbmc+IF9qc1ZhcmlhYmxlUmVzZXJ2ZWRDYWNoZSA9IG51bGw7CgogIC8vLyBOYW1lcyB0aGF0IGNhbm5vdCBiZSB1c2VkIGJ5IGxvY2FsIHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVycy4KICBTZXQ8U3RyaW5nPiBnZXQgX2pzVmFyaWFibGVSZXNlcnZlZCB7CiAgICBpZiAoX2pzVmFyaWFibGVSZXNlcnZlZENhY2hlID09IG51bGwpIHsKICAgICAgX2pzVmFyaWFibGVSZXNlcnZlZENhY2hlID0gbmV3IFNldDxTdHJpbmc+KCk7CiAgICAgIF9qc1ZhcmlhYmxlUmVzZXJ2ZWRDYWNoZS5hZGRBbGwoTmFtZXIuamF2YVNjcmlwdEtleXdvcmRzKTsKICAgICAgX2pzVmFyaWFibGVSZXNlcnZlZENhY2hlLmFkZEFsbChOYW1lci5yZXNlcnZlZFByb3BlcnR5U3ltYm9scyk7CiAgICAgIF9qc1ZhcmlhYmxlUmVzZXJ2ZWRDYWNoZS5hZGRBbGwoTmFtZXIucmVzZXJ2ZWRHbG9iYWxTeW1ib2xzKTsKICAgICAgX2pzVmFyaWFibGVSZXNlcnZlZENhY2hlLmFkZEFsbChOYW1lci5yZXNlcnZlZEdsb2JhbE9iamVjdE5hbWVzKTsKICAgICAgLy8gMjYgbGV0dGVycyBpbiB0aGUgYWxwaGFiZXQsIDI1IG5vdCBjb3VudGluZyBJLgogICAgICBhc3NlcnQoTmFtZXIucmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lcy5sZW5ndGggPT0gMjUpOwogICAgICBfanNWYXJpYWJsZVJlc2VydmVkQ2FjaGUuYWRkQWxsKE5hbWVyLnJlc2VydmVkR2xvYmFsSGVscGVyRnVuY3Rpb25zKTsKICAgIH0KICAgIHJldHVybiBfanNWYXJpYWJsZVJlc2VydmVkQ2FjaGU7CiAgfQoKICAvLy8gUmV0dXJucyBhIHZhcmlhYmxlIG5hbWUgdGhhdCBjYW5ub3QgY2xhc2ggd2l0aCBhIGtleXdvcmQsIGEgZ2xvYmFsCiAgLy8vIHZhcmlhYmxlLCBvciBhbnkgbmFtZSBzdGFydGluZyB3aXRoIGEgc2luZ2xlICckJy4KICAvLy8KICAvLy8gRnVydGhlcm1vcmUsIHRoaXMgZnVuY3Rpb24gaXMgaW5qZWN0aXZlLCB0aGF0IGlzLCBpdCBuZXZlciByZXR1cm5zIHRoZQogIC8vLyBzYW1lIG5hbWUgZm9yIHR3byBkaWZmZXJlbnQgaW5wdXRzLgogIFN0cmluZyBzYWZlVmFyaWFibGVOYW1lKFN0cmluZyBuYW1lKSB7CiAgICBuYW1lID0gbmFtZS5yZXBsYWNlQWxsKCcjJywgJ18nKTsKICAgIGlmIChfanNWYXJpYWJsZVJlc2VydmVkLmNvbnRhaW5zKG5hbWUpIHx8IG5hbWUuc3RhcnRzV2l0aChyJyQnKSkgewogICAgICByZXR1cm4gJ1wkJG5hbWUnOwogICAgfQogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzOwoKICAvLy8gUmV0dXJucyB0aGUgc3RyaW5nIHRoYXQgaXMgdG8gYmUgdXNlZCBhcyB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0bwogIC8vLyBbSlNfR0VUX05BTUVdIGF0IFtub2RlXSB3aXRoIGFyZ3VtZW50IFtuYW1lXS4KICBqc0FzdC5OYW1lIGdldE5hbWVGb3JKc0dldE5hbWUoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgSnNHZXROYW1lIG5hbWUpIHsKICAgIHN3aXRjaCAobmFtZSkgewogICAgICBjYXNlIEpzR2V0TmFtZS5HRVRURVJfUFJFRklYOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5nZXR0ZXJQcmVmaXgpOwogICAgICBjYXNlIEpzR2V0TmFtZS5TRVRURVJfUFJFRklYOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5zZXR0ZXJQcmVmaXgpOwogICAgICBjYXNlIEpzR2V0TmFtZS5DQUxMX1BSRUZJWDoKICAgICAgICByZXR1cm4gYXNOYW1lKGZpeGVkTmFtZXMuY2FsbFByZWZpeCk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkNBTExfUFJFRklYMDoKICAgICAgICByZXR1cm4gYXNOYW1lKCcke2ZpeGVkTmFtZXMuY2FsbFByZWZpeH1cJDAnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuQ0FMTF9QUkVGSVgxOgogICAgICAgIHJldHVybiBhc05hbWUoJyR7Zml4ZWROYW1lcy5jYWxsUHJlZml4fVwkMScpOwogICAgICBjYXNlIEpzR2V0TmFtZS5DQUxMX1BSRUZJWDI6CiAgICAgICAgcmV0dXJuIGFzTmFtZSgnJHtmaXhlZE5hbWVzLmNhbGxQcmVmaXh9XCQyJyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkNBTExfUFJFRklYMzoKICAgICAgICByZXR1cm4gYXNOYW1lKCcke2ZpeGVkTmFtZXMuY2FsbFByZWZpeH1cJDMnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuQ0FMTF9QUkVGSVg0OgogICAgICAgIHJldHVybiBhc05hbWUoJyR7Zml4ZWROYW1lcy5jYWxsUHJlZml4fVwkNCcpOwogICAgICBjYXNlIEpzR2V0TmFtZS5DQUxMX1BSRUZJWDU6CiAgICAgICAgcmV0dXJuIGFzTmFtZSgnJHtmaXhlZE5hbWVzLmNhbGxQcmVmaXh9XCQ1Jyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkNBTExfQ0FUQ0hfQUxMOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5jYWxsQ2F0Y2hBbGxOYW1lKTsKICAgICAgY2FzZSBKc0dldE5hbWUuUkVGTEVDVEFCTEU6CiAgICAgICAgcmV0dXJuIGFzTmFtZShmaXhlZE5hbWVzLnJlZmxlY3RhYmxlRmllbGQpOwogICAgICBjYXNlIEpzR2V0TmFtZS5DTEFTU19ERVNDUklQVE9SX1BST1BFUlRZOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5jbGFzc0Rlc2NyaXB0b3JQcm9wZXJ0eSk7CiAgICAgIGNhc2UgSnNHZXROYW1lLlJFUVVJUkVEX1BBUkFNRVRFUl9QUk9QRVJUWToKICAgICAgICByZXR1cm4gYXNOYW1lKGZpeGVkTmFtZXMucmVxdWlyZWRQYXJhbWV0ZXJGaWVsZCk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkRFRkFVTFRfVkFMVUVTX1BST1BFUlRZOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5kZWZhdWx0VmFsdWVzRmllbGQpOwogICAgICBjYXNlIEpzR2V0TmFtZS5DQUxMX05BTUVfUFJPUEVSVFk6CiAgICAgICAgcmV0dXJuIGFzTmFtZShmaXhlZE5hbWVzLmNhbGxOYW1lRmllbGQpOwogICAgICBjYXNlIEpzR2V0TmFtZS5ERUZFUlJFRF9BQ1RJT05fUFJPUEVSVFk6CiAgICAgICAgcmV0dXJuIGFzTmFtZShmaXhlZE5hbWVzLmRlZmVycmVkQWN0aW9uKTsKICAgICAgY2FzZSBKc0dldE5hbWUuT1BFUkFUT1JfQVNfUFJFRklYOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5vcGVyYXRvckFzUHJlZml4KTsKICAgICAgY2FzZSBKc0dldE5hbWUuU0lHTkFUVVJFX05BTUU6CiAgICAgICAgcmV0dXJuIGFzTmFtZShmaXhlZE5hbWVzLm9wZXJhdG9yU2lnbmF0dXJlKTsKICAgICAgY2FzZSBKc0dldE5hbWUuUlRJX05BTUU6CiAgICAgICAgcmV0dXJuIGFzTmFtZShmaXhlZE5hbWVzLnJ0aU5hbWUpOwogICAgICBjYXNlIEpzR2V0TmFtZS5UWVBFREVGX1RBRzoKICAgICAgICByZXR1cm4gYXNOYW1lKHJ0aVRhZ3MudHlwZWRlZlRhZyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkZVTkNUSU9OX1RZUEVfVEFHOgogICAgICAgIHJldHVybiBhc05hbWUocnRpVGFncy5mdW5jdGlvblR5cGVUYWcpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVU5DVElPTl9UWVBFX0dFTkVSSUNfQk9VTkRTX1RBRzoKICAgICAgICByZXR1cm4gYXNOYW1lKHJ0aVRhZ3MuZnVuY3Rpb25UeXBlR2VuZXJpY0JvdW5kc1RhZyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkZVTkNUSU9OX1RZUEVfVk9JRF9SRVRVUk5fVEFHOgogICAgICAgIHJldHVybiBhc05hbWUocnRpVGFncy5mdW5jdGlvblR5cGVWb2lkUmV0dXJuVGFnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9SRVRVUk5fVFlQRV9UQUc6CiAgICAgICAgcmV0dXJuIGFzTmFtZShydGlUYWdzLmZ1bmN0aW9uVHlwZVJldHVyblR5cGVUYWcpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVU5DVElPTl9UWVBFX1JFUVVJUkVEX1BBUkFNRVRFUlNfVEFHOgogICAgICAgIHJldHVybiBhc05hbWUocnRpVGFncy5mdW5jdGlvblR5cGVSZXF1aXJlZFBhcmFtZXRlcnNUYWcpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVU5DVElPTl9UWVBFX09QVElPTkFMX1BBUkFNRVRFUlNfVEFHOgogICAgICAgIHJldHVybiBhc05hbWUocnRpVGFncy5mdW5jdGlvblR5cGVPcHRpb25hbFBhcmFtZXRlcnNUYWcpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVU5DVElPTl9UWVBFX05BTUVEX1BBUkFNRVRFUlNfVEFHOgogICAgICAgIHJldHVybiBhc05hbWUocnRpVGFncy5mdW5jdGlvblR5cGVOYW1lZFBhcmFtZXRlcnNUYWcpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVVRVUkVfT1JfVEFHOgogICAgICAgIHJldHVybiBhc05hbWUocnRpVGFncy5mdXR1cmVPclRhZyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkZVVFVSRV9PUl9UWVBFX0FSR1VNRU5UX1RBRzoKICAgICAgICByZXR1cm4gYXNOYW1lKHJ0aVRhZ3MuZnV0dXJlT3JUeXBlVGFnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuSVNfSU5ERVhBQkxFX0ZJRUxEX05BTUU6CiAgICAgICAgcmV0dXJuIG9wZXJhdG9ySXMoX2NvbW1vbkVsZW1lbnRzLmpzSW5kZXhpbmdCZWhhdmlvckludGVyZmFjZSk7CiAgICAgIGNhc2UgSnNHZXROYW1lLk5VTExfQ0xBU1NfVFlQRV9OQU1FOgogICAgICAgIHJldHVybiBydW50aW1lVHlwZU5hbWUoX2NvbW1vbkVsZW1lbnRzLm51bGxDbGFzcyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLk9CSkVDVF9DTEFTU19UWVBFX05BTUU6CiAgICAgICAgcmV0dXJuIHJ1bnRpbWVUeXBlTmFtZShfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVU5DVElPTl9DTEFTU19UWVBFX05BTUU6CiAgICAgICAgcmV0dXJuIHJ1bnRpbWVUeXBlTmFtZShfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkZVVFVSRV9DTEFTU19UWVBFX05BTUU6CiAgICAgICAgcmV0dXJuIHJ1bnRpbWVUeXBlTmFtZShfY29tbW9uRWxlbWVudHMuZnV0dXJlQ2xhc3MpOwogICAgICBjYXNlIEpzR2V0TmFtZS5CT09MX1JFQ0lQRToKICAgICAgICByZXR1cm4gcnVudGltZVR5cGVOYW1lKF9jb21tb25FbGVtZW50cy5ib29sQ2xhc3MpOwogICAgICBjYXNlIEpzR2V0TmFtZS5ET1VCTEVfUkVDSVBFOgogICAgICAgIHJldHVybiBydW50aW1lVHlwZU5hbWUoX2NvbW1vbkVsZW1lbnRzLmRvdWJsZUNsYXNzKTsKICAgICAgY2FzZSBKc0dldE5hbWUuSU5UX1JFQ0lQRToKICAgICAgICByZXR1cm4gcnVudGltZVR5cGVOYW1lKF9jb21tb25FbGVtZW50cy5pbnRDbGFzcyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLk5VTV9SRUNJUEU6CiAgICAgICAgcmV0dXJuIHJ1bnRpbWVUeXBlTmFtZShfY29tbW9uRWxlbWVudHMubnVtQ2xhc3MpOwogICAgICBjYXNlIEpzR2V0TmFtZS5TVFJJTkdfUkVDSVBFOgogICAgICAgIHJldHVybiBydW50aW1lVHlwZU5hbWUoX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKTsKICAgICAgY2FzZSBKc0dldE5hbWUuUlRJX0ZJRUxEX0lTOgogICAgICAgIHJldHVybiBpbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKF9jb21tb25FbGVtZW50cy5ydGlJc0ZpZWxkKTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBmYWlsZWRBdChzcGFubmFibGUsICdFcnJvcjogTmFtZXIgaGFzIG5vIG5hbWUgZm9yICIkbmFtZSIuJyk7CiAgICB9CiAgfQp9CgpjbGFzcyBNb2R1bGFyTmFtZXJJbXBsIGV4dGVuZHMgTW9kdWxhck5hbWVyIHsKICBmaW5hbCBDb2RlZ2VuUmVnaXN0cnkgX3JlZ2lzdHJ5OwogIEBvdmVycmlkZQogIGZpbmFsIFJ1bnRpbWVUeXBlVGFncyBydGlUYWdzOwogIEBvdmVycmlkZQogIGZpbmFsIEZpeGVkTmFtZXMgZml4ZWROYW1lczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwoKICBNb2R1bGFyTmFtZXJJbXBsKAogICAgICB0aGlzLl9yZWdpc3RyeSwgdGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMucnRpVGFncywgdGhpcy5maXhlZE5hbWVzKTsKCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBnZXQgcnRpRmllbGRKc05hbWUgewogICAganNBc3QuTmFtZSBuYW1lID0gbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5ydGlGaWVsZCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBydW50aW1lVHlwZU5hbWUoRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9CiAgICAgICAgbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5ydW50aW1lVHlwZU5hbWUsIGRhdGE6IGVsZW1lbnQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgY2xhc3NOYW1lKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQuY2xhc3NOYW1lLCBkYXRhOiBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHJlYWRHbG9iYWxPYmplY3RGb3JMaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAganNBc3QuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gbmV3IE1vZHVsYXJFeHByZXNzaW9uKAogICAgICAgIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5LCBsaWJyYXJ5KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJFeHByZXNzaW9uKGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHJlYWRHbG9iYWxPYmplY3RGb3JDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSBuZXcgTW9kdWxhckV4cHJlc3Npb24oCiAgICAgICAgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvckNsYXNzLCBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJFeHByZXNzaW9uKGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHJlYWRHbG9iYWxPYmplY3RGb3JUeXBlKEVudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSBuZXcgTW9kdWxhckV4cHJlc3Npb24oCiAgICAgICAgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvclR5cGUsIGVsZW1lbnQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhckV4cHJlc3Npb24oZXhwcmVzc2lvbik7CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gcmVhZEdsb2JhbE9iamVjdEZvck1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAganNBc3QuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gbmV3IE1vZHVsYXJFeHByZXNzaW9uKAogICAgICAgIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JNZW1iZXIsIGVsZW1lbnQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhckV4cHJlc3Npb24oZXhwcmVzc2lvbik7CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgYWxpYXNlZFN1cGVyTWVtYmVyUHJvcGVydHlOYW1lKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9CiAgICAgICAgbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5hbGlhc2VkU3VwZXJNZW1iZXIsIGRhdGE6IG1lbWJlcik7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBzdGF0aWNDbG9zdXJlTmFtZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPQogICAgICAgIG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQuc3RhdGljQ2xvc3VyZSwgZGF0YTogZWxlbWVudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBtZXRob2RQcm9wZXJ0eU5hbWUoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPQogICAgICAgIG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQubWV0aG9kUHJvcGVydHksIGRhdGE6IG1ldGhvZCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBpbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9CiAgICAgICAgbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5pbnN0YW5jZUZpZWxkLCBkYXRhOiBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIG9wZXJhdG9ySXNUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9CiAgICAgICAgbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzVHlwZSwgZGF0YTogdHlwZSk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBpbnN0YW5jZU1ldGhvZE5hbWUoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPQogICAgICAgIG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQuaW5zdGFuY2VNZXRob2QsIGRhdGE6IG1ldGhvZCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBpbnZvY2F0aW9uTmFtZShTZWxlY3RvciBzZWxlY3RvcikgewogICAganNBc3QuTmFtZSBuYW1lID0KICAgICAgICBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLmludm9jYXRpb24sIGRhdGE6IHNlbGVjdG9yKTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGxhenlJbml0aWFsaXplck5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAganNBc3QuTmFtZSBuYW1lID0KICAgICAgICBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLmxhenlJbml0aWFsaXplciwgZGF0YTogZWxlbWVudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBvcGVyYXRvcklzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9CiAgICAgICAgbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzLCBkYXRhOiBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGdsb2JhbFByb3BlcnR5TmFtZUZvclR5cGUoRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsUHJvcGVydHlOYW1lRm9yVHlwZSwKICAgICAgICBkYXRhOiBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGdsb2JhbFByb3BlcnR5TmFtZUZvckNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5ldyBNb2R1bGFyTmFtZSgKICAgICAgICBNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3MsCiAgICAgICAgZGF0YTogZWxlbWVudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5ldyBNb2R1bGFyTmFtZSgKICAgICAgICBNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyLAogICAgICAgIGRhdGE6IGVsZW1lbnQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZShUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCkgewogICAganNBc3QuTmFtZSBuYW1lID0gbmV3IE1vZHVsYXJOYW1lKAogICAgICAgIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlLAogICAgICAgIGRhdGE6IGVsZW1lbnQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgbmFtZUZvckdldEludGVyY2VwdG9yKFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcykgewogICAganNBc3QuTmFtZSBuYW1lID0KICAgICAgICBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLm5hbWVGb3JHZXRJbnRlcmNlcHRvciwgc2V0OiBjbGFzc2VzKTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIG5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3IoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQubmFtZUZvck9uZVNob3RJbnRlcmNlcHRvciwKICAgICAgICBkYXRhOiBzZWxlY3Rvciwgc2V0OiBjbGFzc2VzKTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGFzTmFtZShTdHJpbmcgdGV4dCkgewogICAganNBc3QuTmFtZSBuYW1lID0gbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5hc05hbWUsIGRhdGE6IHRleHQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgc3Vic3RpdHV0aW9uTmFtZShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPQogICAgICAgIG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQuc3Vic3RpdHV0aW9uLCBkYXRhOiBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQp9CosOAE5OPAEaAScBOS0BRwEaGSFCOz8jSjgkMSEhISEsQCM4PUAcKhsBIB0aGQFPBC4EKTsXBDwETC4ETk09BE1QIQROBBsERAQvMDAES1BPThwEUU9QBCgESQQtMjU6BEclBE1NLQRMKwRHBFAqBDAEUE4vBE5PUEYmBE1OEwQmBBYWBE8ENwQVFQRRJSNBHQ0KEg4MDAsLDQ8ODBALDg0QEAwMDwoNDgoLASoNDA8N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dEBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2ZpZWxkX25hbWluZ19taXhpbi5kYXJ0og8vLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBqc19iYWNrZW5kLm5hbWVyOwoKYWJzdHJhY3QgY2xhc3MgX01pbmlmaWVkRmllbGROYW1lciBpbXBsZW1lbnRzIE5hbWVyIHsKICBfRmllbGROYW1pbmdSZWdpc3RyeSBnZXQgZmllbGRSZWdpc3RyeTsKCiAgLy8gUmV0dXJucyBhIG1pbmltYWwgbmFtZSBmb3IgdGhlIGZpZWxkIHRoYXQgaXMgZ2xvYmFsbHkgdW5pcXVlIGFsb25nCiAgLy8gdGhlIGdpdmVuIGVsZW1lbnQncyBjbGFzcyBpbmhlcml0YW5jZSBjaGFpbi4KICAvLwogIC8vIFRoZSBpbmhlcml0YW5jZSBzY29wZSBiYXNlZCBuYW1pbmcgbWlnaHQgbm90IHlpZWxkIGEgbmFtZS4gRm9yIGluc3RhbmNlLAogIC8vIHRoaXMgY291bGQgYmUgYmVjYXVzZSB0aGUgZmllbGQgYmVsb25ncyB0byBhIG1peGluLiBJbiBzdWNoIGEgY2FzZSB0aGlzCiAgLy8gd2lsbCByZXR1cm4gYG51bGxgIGFuZCBhIG5vcm1hbCBmaWVsZCBuYW1lIGhhcyB0byBiZSB1c2VkLgogIGpzQXN0Lk5hbWUgX21pbmlmaWVkSW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoX25hdGl2ZURhdGEuaGFzRml4ZWRCYWNrZW5kTmFtZShlbGVtZW50KSkgewogICAgICByZXR1cm4gbmV3IFN0cmluZ0JhY2tlZE5hbWUoX25hdGl2ZURhdGEuZ2V0Rml4ZWRCYWNrZW5kTmFtZShlbGVtZW50KSk7CiAgICB9CgogICAgX0ZpZWxkTmFtaW5nU2NvcGUgbmFtZXM7CiAgICBpZiAoZWxlbWVudCBpcyBKUmVjb3JkRmllbGQpIHsKICAgICAgbmFtZXMgPSBuZXcgX0ZpZWxkTmFtaW5nU2NvcGUuZm9yQm94KGVsZW1lbnQuYm94LCBmaWVsZFJlZ2lzdHJ5KTsKICAgIH0gZWxzZSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIG5hbWVzID0gbmV3IF9GaWVsZE5hbWluZ1Njb3BlLmZvckNsYXNzKGNscywgX2Nsb3NlZFdvcmxkLCBmaWVsZFJlZ2lzdHJ5KTsKICAgIH0KCiAgICBpZiAobmFtZXMuY29udGFpbnNGaWVsZChlbGVtZW50KSkgewogICAgICByZXR1cm4gbmFtZXNbZWxlbWVudF07CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBFbmNhcHN1bGF0ZXMgdGhlIGdsb2JhbCBzdGF0ZSBvZiBmaWVsZCBuYW1pbmcuCi8vLwovLy8gVGhlIGZpZWxkIG5hbWluZyByZWdpc3RyeSBhbGxvY2F0ZXMgbmFtZXMgdG8gYmUgdXNlZCBhbG9uZyBhIHBhdGggaW4gdGhlCi8vLyBpbmhlcml0YW5jZSBoaWVyYXJjaHkgb2YgZmllbGRzLCBzdGFydGluZyB3aXRoIHRoZSBvYmplY3QgY2xhc3MuIFRoZSBhY3R1YWwKLy8vIGhpZXJhcmNoeSBpcyBlbmNvZGVkIHVzaW5nIGluc3RhbmNlcyBvZiBbX0ZpZWxkTmFtaW5nU2NvcGVdLgpjbGFzcyBfRmllbGROYW1pbmdSZWdpc3RyeSB7CiAgZmluYWwgTmFtZXIgbmFtZXI7CgogIGZpbmFsIE1hcDxFbnRpdHksIF9GaWVsZE5hbWluZ1Njb3BlPiBzY29wZXMgPQogICAgICBuZXcgTWFwPEVudGl0eSwgX0ZpZWxkTmFtaW5nU2NvcGU+KCk7CgogIGZpbmFsIE1hcDxFbnRpdHksIGpzQXN0Lk5hbWU+IGdsb2JhbE5hbWVzID0gbmV3IE1hcDxFbnRpdHksIGpzQXN0Lk5hbWU+KCk7CgogIGludCBnbG9iYWxDb3VudCA9IDA7CgogIGZpbmFsIExpc3Q8anNBc3QuTmFtZT4gbmFtZVN0b3JlID0gbmV3IExpc3Q8anNBc3QuTmFtZT4oKTsKCiAgX0ZpZWxkTmFtaW5nUmVnaXN0cnkodGhpcy5uYW1lcik7CgogIC8vIFJldHVybnMgdGhlIG5hbWUgdG8gYmUgdXNlZCBmb3IgYSBmaWVsZCB3aXRoIGRpc3RhbmNlIFtpbmRleF0gZnJvbSB0aGUKICAvLyByb290IG9mIHRoZSBvYmplY3QgaGllcmFyY2h5LiBUaGUgZGlzdGFuY2UgdGhlcmVieSBpcyBjb21wdXRlZCBhcyB0aGUKICAvLyBudW1iZXIgb2YgZmllbGRzIHByZWNlZGluZyB0aGUgY3VycmVudCBmaWVsZCBpbiBpdHMgY2xhc3NlcyBpbmhlcml0YW5jZQogIC8vIGNoYWluLgogIC8vCiAgLy8gVGhlIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCBuYW1lcyBhcmUgcmVxdWVkc3RlZCBpbiBvcmRlciwgdGhhdCBpcyB0aGUKICAvLyBuYW1lIGF0IHBvc2l0aW9uIGkrMSBpcyByZXF1ZXN0ZWQgYWZ0ZXIgdGhlIG5hbWUgYXQgcG9zaXRpb24gaSB3YXMKICAvLyByZXF1ZXN0ZWQuCiAganNBc3QuTmFtZSBnZXROYW1lKGludCBpbmRleCkgewogICAgaWYgKGluZGV4ID49IG5hbWVTdG9yZS5sZW5ndGgpIHsKICAgICAgLy8gVGhlIG5hbWVyIHVzdWFsbHkgZG9lcyBub3QgdXNlIGNlcnRhaW4gbmFtZXMgYXMgdGhleSBjbGFzaCB3aXRoCiAgICAgIC8vIGV4aXN0aW5nIHByb3BlcnRpZXMgb24gSlMgb2JqZWN0cyAoc2VlIFtfcmVzZXJ2ZWROYXRpdmVQcm9wZXJ0aWVzXSkuCiAgICAgIC8vIEhvd2V2ZXIsIHNvbWUgb2YgdGhlbSBhcmUgcmVhbGx5IHNob3J0IGFuZCBzYWZlIHRvIHVzZSBmb3IgZmllbGRzLgogICAgICAvLyBUaHVzLCB3ZSBzaG9ydGN1dCB0aGUgbmFtZXIgdG8gdXNlIHRob3NlIGZpcnN0LgogICAgICBhc3NlcnQoaW5kZXggPT0gbmFtZVN0b3JlLmxlbmd0aCk7CiAgICAgIGlmIChpbmRleCA8IE1pbmlmeU5hbWVyLl9yZXNlcnZlZE5hdGl2ZVByb3BlcnRpZXMubGVuZ3RoICYmCiAgICAgICAgICBNaW5pZnlOYW1lci5fcmVzZXJ2ZWROYXRpdmVQcm9wZXJ0aWVzW2luZGV4XS5sZW5ndGggPD0gMikgewogICAgICAgIG5hbWVTdG9yZS5hZGQoCiAgICAgICAgICAgIG5ldyBTdHJpbmdCYWNrZWROYW1lKE1pbmlmeU5hbWVyLl9yZXNlcnZlZE5hdGl2ZVByb3BlcnRpZXNbaW5kZXhdKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmFtZVN0b3JlLmFkZChuYW1lci5nZXRGcmVzaE5hbWUobmFtZXIuaW5zdGFuY2VTY29wZSwgImZpZWxkJGluZGV4IikpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5hbWVTdG9yZVtpbmRleF07CiAgfQp9CgovLy8gQSBbX0ZpZWxkTmFtaW5nU2NvcGVdIGVuY29kZXMgYSBub2RlIGluIHRoZSBpbmhlcml0YW5jZSB0cmVlIG9mIHRoZSBjdXJyZW50Ci8vLyBjbGFzcyBoaWVyYXJjaHkuIFRoZSByb290IG5vZGUgdHlwaWNhbGx5IGlzIHRoZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi8vLyBgT2JqZWN0YCBjbGFzcy4gSXQgaXMgdXNlZCB0byBhc3NpZ24gYSB1bmlxdWUgbmFtZSB0byBlYWNoIGZpZWxkIG9mIGEgY2xhc3MuCi8vLyBVbmlxdWUgaGVyZSBtZWFucyB1bmlxdWUgd3J0LiBhbGwgZmllbGRzIGFsb25nIHRoZSBwYXRoIGJhY2sgdG8gdGhlIHJvb3QuCi8vLyBUaGlzIGlzIGFjaGlldmVkIGF0IGNvbnN0cnVjdGlvbiB0aW1lIHZpYSB0aGUgW19maWVsZE5hbWVDb3VudGVyXSBmaWVsZCB0aGF0Ci8vLyBjb3VudHMgdGhlIG51bWJlciBvZiBmaWVsZHMgb24gdGhlIHBhdGggdG8gdGhlIHJvb3Qgbm9kZSB0aGF0IGhhdmUgYmVlbgovLy8gZW5jb3VudGVyZWQgc28gZmFyLgovLy8KLy8vIE9idmlvdXNseSwgdGhpcyBvbmx5IHdvcmtzIGlmIG5vIGZpZWxkcyBhcmUgYWRkZWQgdG8gYSBwYXJlbnQgbm9kZSBhZnRlciBpdHMKLy8vIGNoaWxkcmVuIGhhdmUgYWRkZWQgdGhlaXIgZmlyc3QgZmllbGQuCmNsYXNzIF9GaWVsZE5hbWluZ1Njb3BlIHsKICBmaW5hbCBfRmllbGROYW1pbmdTY29wZSBzdXBlclNjb3BlOwogIGZpbmFsIEVudGl0eSBjb250YWluZXI7CiAgZmluYWwgTWFwPEVudGl0eSwganNBc3QuTmFtZT4gbmFtZXMgPSBuZXcgTWFwbGV0PEVudGl0eSwganNBc3QuTmFtZT4oKTsKICBmaW5hbCBfRmllbGROYW1pbmdSZWdpc3RyeSByZWdpc3RyeTsKCiAgLy8vIE5hbWluZyBjb3VudGVyIHVzZWQgZm9yIGZpZWxkcyBvZiBvcmRpbmFyeSBjbGFzc2VzLgogIGludCBfZmllbGROYW1lQ291bnRlcjsKCiAgLy8vIFRoZSBudW1iZXIgb2YgZmllbGRzIGFsb25nIHRoZSBzdXBlcmNsYXNzIGNoYWluIHRoYXQgdXNlIGluaGVyaXRhbmNlCiAgLy8vIGJhc2VkIG5hbWluZywgaW5jbHVkaW5nIHRoZSBvbmVzIGFsbG9jYXRlZCBmb3IgdGhpcyBzY29wZS4KICBpbnQgZ2V0IGluaGVyaXRhbmNlQmFzZWRGaWVsZE5hbWVDb3VudGVyID0+IF9maWVsZE5hbWVDb3VudGVyOwoKICAvLy8gVGhlIG51bWJlciBvZiBsb2NhbGx5IHVzZWQgZmllbGRzLiBEZXBlbmRpbmcgb24gdGhlIG5hbWluZyBzb3VyY2UKICAvLy8gKGUuZy4gaW5oZXJpdGFuY2UgYmFzZWQgb3IgZ2xvYmFsbHkgdW5pcXVlIGZvciBtaXhpeG5zKSB0aGlzCiAgLy8vIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIFtpbmhlcml0YW5jZUJhc2VkRmllbGROYW1lQ291bnRlcl0uCiAgaW50IGdldCBfbG9jYWxGaWVsZE5hbWVDb3VudGVyID0+IF9maWVsZE5hbWVDb3VudGVyOwogIHZvaWQgc2V0IF9sb2NhbEZpZWxkTmFtZUNvdW50ZXIoaW50IHZhbCkgewogICAgX2ZpZWxkTmFtZUNvdW50ZXIgPSB2YWw7CiAgfQoKICBmYWN0b3J5IF9GaWVsZE5hbWluZ1Njb3BlLmZvckNsYXNzKAogICAgICBDbGFzc0VudGl0eSBjbHMsIEpDbG9zZWRXb3JsZCB3b3JsZCwgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgcmVnaXN0cnkpIHsKICAgIF9GaWVsZE5hbWluZ1Njb3BlIHJlc3VsdCA9IHJlZ2lzdHJ5LnNjb3Blc1tjbHNdOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwoKICAgIGlmICh3b3JsZC5pc1VzZWRBc01peGluKGNscykpIHsKICAgICAgcmVzdWx0ID0gbmV3IF9NaXhpbkZpZWxkTmFtaW5nU2NvcGUubWl4aW4oY2xzLCByZWdpc3RyeSk7CiAgICB9IGVsc2UgewogICAgICB2YXIgc3VwZXJjbGFzcyA9IHdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgIGlmIChzdXBlcmNsYXNzID09IG51bGwpIHsKICAgICAgICByZXN1bHQgPSBuZXcgX0ZpZWxkTmFtaW5nU2NvcGUucm9vdFNjb3BlKGNscywgcmVnaXN0cnkpOwogICAgICB9IGVsc2UgewogICAgICAgIF9GaWVsZE5hbWluZ1Njb3BlIHN1cGVyU2NvcGUgPQogICAgICAgICAgICBuZXcgX0ZpZWxkTmFtaW5nU2NvcGUuZm9yQ2xhc3Moc3VwZXJjbGFzcywgd29ybGQsIHJlZ2lzdHJ5KTsKICAgICAgICBpZiAod29ybGQuZWxlbWVudEVudmlyb25tZW50LmlzTWl4aW5BcHBsaWNhdGlvbihjbHMpKSB7CiAgICAgICAgICByZXN1bHQgPQogICAgICAgICAgICAgIG5ldyBfTWl4aW5GaWVsZE5hbWluZ1Njb3BlLm1peGVkSW4oY2xzLCBzdXBlclNjb3BlLCByZWdpc3RyeSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IG5ldyBfRmllbGROYW1pbmdTY29wZS5pbmhlcml0KGNscywgc3VwZXJTY29wZSwgcmVnaXN0cnkpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3NNZW1iZXIoY2xzLAogICAgICAgIChDbGFzc0VudGl0eSBkZWNsYXJlciwgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBpZiAobWVtYmVyLmlzRmllbGQgJiYgbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHJlc3VsdC5hZGQobWVtYmVyKTsKICAgIH0pOwoKICAgIHJlZ2lzdHJ5LnNjb3Blc1tjbHNdID0gcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZhY3RvcnkgX0ZpZWxkTmFtaW5nU2NvcGUuZm9yQm94KExvY2FsIGJveCwgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgcmVnaXN0cnkpIHsKICAgIHJldHVybiByZWdpc3RyeS5zY29wZXMKICAgICAgICAucHV0SWZBYnNlbnQoYm94LCAoKSA9PiBuZXcgX0JveEZpZWxkTmFtaW5nU2NvcGUoYm94LCByZWdpc3RyeSkpOwogIH0KCiAgX0ZpZWxkTmFtaW5nU2NvcGUucm9vdFNjb3BlKHRoaXMuY29udGFpbmVyLCB0aGlzLnJlZ2lzdHJ5KQogICAgICA6IHN1cGVyU2NvcGUgPSBudWxsLAogICAgICAgIF9maWVsZE5hbWVDb3VudGVyID0gMDsKCiAgX0ZpZWxkTmFtaW5nU2NvcGUuaW5oZXJpdCh0aGlzLmNvbnRhaW5lciwgdGhpcy5zdXBlclNjb3BlLCB0aGlzLnJlZ2lzdHJ5KSB7CiAgICBfZmllbGROYW1lQ291bnRlciA9IHN1cGVyU2NvcGUuaW5oZXJpdGFuY2VCYXNlZEZpZWxkTmFtZUNvdW50ZXI7CiAgfQoKICAvLy8gQ2hlY2tzIHdoZXRoZXIgW25hbWVdIGlzIGFscmVhZHkgdXNlZCBpbiB0aGUgY3VycmVudCBzY29wZSBjaGFpbi4KICBfaXNOYW1lVW51c2VkKGpzQXN0Lk5hbWUgbmFtZSkgewogICAgcmV0dXJuICFuYW1lcy52YWx1ZXMuY29udGFpbnMobmFtZSkgJiYKICAgICAgICAoKHN1cGVyU2NvcGUgPT0gbnVsbCkgfHwgc3VwZXJTY29wZS5faXNOYW1lVW51c2VkKG5hbWUpKTsKICB9CgogIGpzQXN0Lk5hbWUgX25leHROYW1lKCkgPT4gcmVnaXN0cnkuZ2V0TmFtZShfbG9jYWxGaWVsZE5hbWVDb3VudGVyKyspOwoKICBqc0FzdC5OYW1lIG9wZXJhdG9yIFtdKEVudGl0eSBmaWVsZCkgewogICAganNBc3QuTmFtZSBuYW1lID0gbmFtZXNbZmllbGRdOwogICAgaWYgKG5hbWUgPT0gbnVsbCAmJiBzdXBlclNjb3BlICE9IG51bGwpIHJldHVybiBzdXBlclNjb3BlW2ZpZWxkXTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgdm9pZCBhZGQoRW50aXR5IGZpZWxkKSB7CiAgICBpZiAobmFtZXMuY29udGFpbnNLZXkoZmllbGQpKSByZXR1cm47CgogICAganNBc3QuTmFtZSB2YWx1ZSA9IF9uZXh0TmFtZSgpOwogICAgYXNzZXJ0KF9pc05hbWVVbnVzZWQodmFsdWUpLCBmYWlsZWRBdChmaWVsZCkpOwogICAgbmFtZXNbZmllbGRdID0gdmFsdWU7CiAgfQoKICBib29sIGNvbnRhaW5zRmllbGQoRW50aXR5IGZpZWxkKSA9PiBuYW1lcy5jb250YWluc0tleShmaWVsZCk7Cn0KCi8vLyBGaWVsZCBuYW1lcyBmb3IgbWl4aW5zIGhhdmUgdHdvIGNvbnN0cmFpbnRzOiBUaGV5IG5lZWQgdG8gYmUgdW5pcXVlIGluIHRoZQovLy8gaGllcmFyY2h5IG9mIGVhY2ggYXBwbGljYXRpb24gb2YgYSBtaXhpbiBhbmQgdGhleSBuZWVkIHRvIGJlIHRoZSBzYW1lIGZvcgovLy8gYWxsIGFwcGxpY2F0aW9ucyBvZiBhIG1peGluLiBUbyBhY2hpZXZlIHRoaXMsIHdlIHVzZSBnbG9iYWwgbmFtaW5nIGZvcgovLy8gbWl4aW5zIGZyb20gdGhlIHNhbWUgbmFtZSBwb29sIGFzIGZpZWxkcyBhbmQgYWRkIGEgYCRgIGF0IHRoZSBlbmQgdG8gZW5zdXJlCi8vLyB0aGV5IGRvIG5vdCBjb2xsaWRlIHdpdGggbm9ybWFsIGZpZWxkIG5hbWVzLiBUaGUgYCRgIHNpZ24gaXMgdHlwaWNhbGx5IHVzZWQKLy8vIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gbWV0aG9kIG5hbWVzIGFuZCBhcmd1bWVudCBjb3VudHMgYW5kIGRvZXMgbm90IGFwcGVhcgovLy8gaW4gZ2VuZXJhdGVkIG5hbWVzIHRoZW1zZWx2ZXMuCmNsYXNzIF9NaXhpbkZpZWxkTmFtaW5nU2NvcGUgZXh0ZW5kcyBfRmllbGROYW1pbmdTY29wZSB7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBfbG9jYWxGaWVsZE5hbWVDb3VudGVyID0+IHJlZ2lzdHJ5Lmdsb2JhbENvdW50OwogIEBvdmVycmlkZQogIHZvaWQgc2V0IF9sb2NhbEZpZWxkTmFtZUNvdW50ZXIoaW50IHZhbCkgewogICAgcmVnaXN0cnkuZ2xvYmFsQ291bnQgPSB2YWw7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8RW50aXR5LCBqc0FzdC5OYW1lPiBnZXQgbmFtZXMgPT4gcmVnaXN0cnkuZ2xvYmFsTmFtZXM7CgogIF9NaXhpbkZpZWxkTmFtaW5nU2NvcGUubWl4aW4oQ2xhc3NFbnRpdHkgY2xzLCBfRmllbGROYW1pbmdSZWdpc3RyeSByZWdpc3RyeSkKICAgICAgOiBzdXBlci5yb290U2NvcGUoY2xzLCByZWdpc3RyeSk7CgogIF9NaXhpbkZpZWxkTmFtaW5nU2NvcGUubWl4ZWRJbihDbGFzc0VudGl0eSBjb250YWluZXIsCiAgICAgIF9GaWVsZE5hbWluZ1Njb3BlIHN1cGVyU2NvcGUsIF9GaWVsZE5hbWluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KQogICAgICA6IHN1cGVyLmluaGVyaXQoY29udGFpbmVyLCBzdXBlclNjb3BlLCByZWdpc3RyeSk7CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgX25leHROYW1lKCkgewogICAganNBc3QuTmFtZSBwcm9wb3NlZCA9IHN1cGVyLl9uZXh0TmFtZSgpOwogICAgcmV0dXJuIG5ldyBDb21wb3VuZE5hbWUoW3Byb3Bvc2VkLCBOYW1lci5fbGl0ZXJhbERvbGxhcl0pOwogIH0KfQoKLy8vIFtCb3hGaWVsZEVsZW1lbnRdIGZpZWxkcyB3b3JrIGRpZmZlcmVudGx5IGluIHRoYXQgdGhleSBkbyBub3QgYmVsb25nIHRvIGFuCi8vLyBhY3R1YWwgY2xhc3MgYnV0IGFuIGFub255bW91cyBib3ggYXNzb2NpYXRlZCB0byBhIFtMb2NhbF0uIEFzIHRoZXJlIGlzIG5vCi8vLyBpbmhlcml0YW5jZSBjaGFpbiwgd2UgZG8gbm90IG5lZWQgdG8gY29tcHV0ZSBmaWVsZHMgYSBwcmlvcmkgYnV0IGNhbiBhc3NpZ24KLy8vIG5hbWVzIG9uIHRoZSBmbHkuCmNsYXNzIF9Cb3hGaWVsZE5hbWluZ1Njb3BlIGV4dGVuZHMgX0ZpZWxkTmFtaW5nU2NvcGUgewogIF9Cb3hGaWVsZE5hbWluZ1Njb3BlKExvY2FsIGJveCwgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgcmVnaXN0cnkpCiAgICAgIDogc3VwZXIucm9vdFNjb3BlKGJveCwgcmVnaXN0cnkpOwoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zRmllbGQoXykgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBvcGVyYXRvciBbXShFbnRpdHkgZmllbGQpIHsKICAgIGlmICghbmFtZXMuY29udGFpbnNLZXkoZmllbGQpKSBhZGQoZmllbGQpOwogICAgcmV0dXJuIG5hbWVzW2ZpZWxkXTsKICB9Cn0KgOoATk48ARoBNioBSDIFTk1ARzRNBgEdI0gNMFAGASgdBhEEAgEzBE1QQR0VATAsAU0BFwE9ASQBTEtNDAVQSBAiJUlOTDkpQkYXUQ9PCAYBHQQCAVBOUU5RTBgEUSsaJhpKJwE6GQFLQUEBSENCNy0dBAEmTDUnASRADUQgQQ8nSUATTRFNCggGATU2SQgBIxMEAU8bSgQBPRsfAU5FBAFIIytCBAFIASkkRhEEARsqASQzGgQBQAIBT05LUFBQIzkMOgwtIAQBDD0BTygBOEM4AQwbLT8EAgFPTlAWN0EoAQwhAQwpLxkEAgE3cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9maWVsZF9uYW1pbmdfbWl4aW4uZGFydD1zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2ZyZXF1ZW5jeV9uYW1lci5kYXJ0kNIvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBqc19iYWNrZW5kLm5hbWVyOwoKY2xhc3MgRnJlcXVlbmN5QmFzZWROYW1lciBleHRlbmRzIE5hbWVyCiAgICB3aXRoIF9NaW5pZmllZEZpZWxkTmFtZXIsIF9NaW5pZmllZE9uZVNob3RJbnRlcmNlcHRvck5hbWVyCiAgICBpbXBsZW1lbnRzIGpzQXN0LlRva2VuRmluYWxpemVyIHsKICBAb3ZlcnJpZGUKICBfRmllbGROYW1pbmdSZWdpc3RyeSBmaWVsZFJlZ2lzdHJ5OwogIExpc3Q8VG9rZW5OYW1lPiB0b2tlbnMgPSBuZXcgTGlzdDxUb2tlbk5hbWU+KCk7CgogIE1hcDxOYW1pbmdTY29wZSwgVG9rZW5TY29wZT4gX3Rva2VuU2NvcGVzID0KICAgICAgbmV3IE1hcGxldDxOYW1pbmdTY29wZSwgVG9rZW5TY29wZT4oKTsKCiAgLy8gU29tZSBiYXNpYyBzZXR0aW5ncyBmb3Igc21hbGxlciBuYW1lcwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgaXNvbGF0ZU5hbWUgPT4gJ0knOwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgaXNvbGF0ZVByb3BlcnRpZXNOYW1lID0+ICdwJzsKICBAb3ZlcnJpZGUKICBib29sIGdldCBzaG91bGRNaW5pZnkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBnZW5lcmljSW5zdGFudGlhdGlvblByZWZpeCA9PiByJyRJJzsKCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBnZXQgc3RhdGljc1Byb3BlcnR5TmFtZSA9PgogICAgICBfc3RhdGljc1Byb3BlcnR5TmFtZSA/Pz0gZ2V0RnJlc2hOYW1lKGluc3RhbmNlU2NvcGUsICdzdGF0aWMnKTsKCiAgRnJlcXVlbmN5QmFzZWROYW1lcigKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBSdW50aW1lVHlwZVRhZ3MgcnRpVGFncywgRml4ZWROYW1lcyBmaXhlZE5hbWVzKQogICAgICA6IHN1cGVyKGNsb3NlZFdvcmxkLCBydGlUYWdzLCBmaXhlZE5hbWVzKSB7CiAgICBmaWVsZFJlZ2lzdHJ5ID0gbmV3IF9GaWVsZE5hbWluZ1JlZ2lzdHJ5KHRoaXMpOwogIH0KCiAgVG9rZW5TY29wZSBuZXdTY29wZUZvcihOYW1pbmdTY29wZSBzY29wZSkgewogICAgaWYgKHNjb3BlID09IGluc3RhbmNlU2NvcGUpIHsKICAgICAgU2V0PFN0cmluZz4gaWxsZWdhbE5hbWVzID0gbmV3IFNldDxTdHJpbmc+LmZyb20oanNSZXNlcnZlZCk7CiAgICAgIGZvciAoU3RyaW5nIGlsbGVnYWwgaW4gTWluaWZ5TmFtZXIuX3Jlc2VydmVkTmF0aXZlUHJvcGVydGllcykgewogICAgICAgIGlsbGVnYWxOYW1lcy5hZGQoaWxsZWdhbCk7CiAgICAgICAgaWYgKE1pbmlmeU5hbWVyLl9oYXNCYW5uZWRQcmVmaXgoaWxsZWdhbCkpIHsKICAgICAgICAgIGlsbGVnYWxOYW1lcy5hZGQoaWxsZWdhbC5zdWJzdHJpbmcoMSkpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbmV3IFRva2VuU2NvcGUoaWxsZWdhbE5hbWVzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgVG9rZW5TY29wZShqc1Jlc2VydmVkKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgZ2V0RnJlc2hOYW1lKE5hbWluZ1Njb3BlIHNjb3BlLCBTdHJpbmcgcHJvcG9zZWROYW1lLAogICAgICB7Ym9vbCBzYW5pdGl6ZUZvck5hdGl2ZXM6IGZhbHNlLCBib29sIHNhbml0aXplRm9yQW5ub3RhdGlvbnM6IGZhbHNlfSkgewogICAgLy8gR3JhYiB0aGUgc2NvcGUgZm9yIHRoaXMgdG9rZW4KICAgIFRva2VuU2NvcGUgdG9rZW5TY29wZSA9CiAgICAgICAgX3Rva2VuU2NvcGVzLnB1dElmQWJzZW50KHNjb3BlLCAoKSA9PiBuZXdTY29wZUZvcihzY29wZSkpOwoKICAgIC8vIEdldCB0aGUgbmFtZSB0aGUgbm9ybWFsIG5hbWVyIHdvdWxkIHVzZSBhcyBhIGtleS4KICAgIFN0cmluZyBwcm9wb3NlZCA9IF9nZW5lcmF0ZUZyZXNoU3RyaW5nRm9yTmFtZShwcm9wb3NlZE5hbWUsIHNjb3BlLAogICAgICAgIHNhbml0aXplRm9yTmF0aXZlczogc2FuaXRpemVGb3JOYXRpdmVzLAogICAgICAgIHNhbml0aXplRm9yQW5ub3RhdGlvbnM6IHNhbml0aXplRm9yQW5ub3RhdGlvbnMpOwoKICAgIFRva2VuTmFtZSBuYW1lID0gbmV3IFRva2VuTmFtZSh0b2tlblNjb3BlLCBwcm9wb3NlZCk7CiAgICB0b2tlbnMuYWRkKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAganNBc3QuTmFtZSBwcm9wb3NlZCA9IF9taW5pZmllZEluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgICBpZiAocHJvcG9zZWQgIT0gbnVsbCkgewogICAgICByZXR1cm4gcHJvcG9zZWQ7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZmluYWxpemVUb2tlbnMoKSB7CiAgICBpbnQgY29tcGFyZVJlZmVyZW5jZUNvdW50KFRva2VuTmFtZSBhLCBUb2tlbk5hbWUgYikgewogICAgICBpbnQgcmVzdWx0ID0gYi5fcmMgLSBhLl9yYzsKICAgICAgaWYgKHJlc3VsdCA9PSAwKSByZXN1bHQgPSBhLmtleS5jb21wYXJlVG8oYi5rZXkpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIExpc3Q8VG9rZW5OYW1lPiB1c2VkTmFtZXMgPQogICAgICAgIHRva2Vucy53aGVyZSgoVG9rZW5OYW1lIGEpID0+IGEuX3JjID4gMCkudG9MaXN0KCk7CiAgICB1c2VkTmFtZXMuc29ydChjb21wYXJlUmVmZXJlbmNlQ291bnQpOwogICAgdXNlZE5hbWVzLmZvckVhY2goKFRva2VuTmFtZSB0b2tlbikgPT4gdG9rZW4uZmluYWxpemUoKSk7CiAgfQp9CgpjbGFzcyBUb2tlblNjb3BlIHsKICBMaXN0PGludD4gX25leHROYW1lID0gWyRhXTsKICBmaW5hbCBTZXQ8U3RyaW5nPiBpbGxlZ2FsTmFtZXM7CgogIFRva2VuU2NvcGUoW3RoaXMuaWxsZWdhbE5hbWVzID0gY29uc3QgSW1tdXRhYmxlRW1wdHlTZXQoKV0pOwoKICAvLy8gSW5jcmVtZW50cyB0aGUgbGV0dGVyIGF0IFtwb3NdIGluIHRoZSBjdXJyZW50IG5hbWUuIEFsc28gdGFrZXMgY2FyZSBvZgogIC8vLyBvdmVyZmxvd3MgdG8gdGhlIGxlZnQuIFJldHVybnMgdGhlIGNhcnJ5IGJpdCwgaS5lLiwgaXQgcmV0dXJucyBgdHJ1ZWAKICAvLy8gaWYgYWxsIHBvc2l0aW9ucyB0byB0aGUgbGVmdCBoYXZlIHdyYXBwZWQgYXJvdW5kLgogIC8vLwogIC8vLyBJZiBbX25leHROYW1lXSBpcyBpbml0aWFsbHkgJ2EnLCB0aGlzIHdpbGwgZ2VuZXJhdGUgdGhlIHNlcXVlbmNlCiAgLy8vCiAgLy8vIFthLXpBLVpdCiAgLy8vIFthLXpBLVpdW18wLTlhLXpBLVpdCiAgLy8vIFthLXpBLVpdW18wLTlhLXpBLVpdW18wLTlhLXpBLVpdCiAgLy8vIC4uLgogIGJvb2wgX2luY3JlbWVudFBvc2l0aW9uKGludCBwb3MpIHsKICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKICAgIGlmIChwb3MgPCAwKSByZXR1cm4gdHJ1ZTsKICAgIGludCB2YWx1ZSA9IF9uZXh0TmFtZVtwb3NdOwogICAgaWYgKHZhbHVlID09ICRfKSB7CiAgICAgIHZhbHVlID0gJDA7CiAgICB9IGVsc2UgaWYgKHZhbHVlID09ICQ5KSB7CiAgICAgIHZhbHVlID0gJGE7CiAgICB9IGVsc2UgaWYgKHZhbHVlID09ICR6KSB7CiAgICAgIHZhbHVlID0gJEE7CiAgICB9IGVsc2UgaWYgKHZhbHVlID09ICRaKSB7CiAgICAgIG92ZXJmbG93ID0gX2luY3JlbWVudFBvc2l0aW9uKHBvcyAtIDEpOwogICAgICB2YWx1ZSA9IChwb3MgPiAwKSA/ICRfIDogJGE7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZSsrOwogICAgfQogICAgX25leHROYW1lW3Bvc10gPSB2YWx1ZTsKICAgIHJldHVybiBvdmVyZmxvdzsKICB9CgogIF9pbmNyZW1lbnROYW1lKCkgewogICAgaWYgKF9pbmNyZW1lbnRQb3NpdGlvbihfbmV4dE5hbWUubGVuZ3RoIC0gMSkpIHsKICAgICAgX25leHROYW1lLmFkZCgkXyk7CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0TmV4dE5hbWUoKSB7CiAgICBTdHJpbmcgcHJvcG9zYWw7CiAgICBkbyB7CiAgICAgIHByb3Bvc2FsID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKF9uZXh0TmFtZSk7CiAgICAgIF9pbmNyZW1lbnROYW1lKCk7CiAgICB9IHdoaWxlIChNaW5pZnlOYW1lci5faGFzQmFubmVkUHJlZml4KHByb3Bvc2FsKSB8fAogICAgICAgIGlsbGVnYWxOYW1lcy5jb250YWlucyhwcm9wb3NhbCkpOwoKICAgIHJldHVybiBwcm9wb3NhbDsKICB9Cn0KgJQATk48ARoBKD8mDCYyAS4tASsMIQwrDCEBDDIBDChGARdQMjQEAS4iQ0YjNTIKCCsNKQYEAQxCTiUcQwE5RzA5AToWEQQBDD5HHBcGNQQBDBo6IjgVBgEgOys+BAIBEx4iAT8BTUw4BkcGDxsnCiUbHiAXEh4SHhIeLiMNDwYcFQQBFTQZBgQBGRUJNhg3KgEVBAIBNHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvZnJlcXVlbmN5X25hbWVyLmRhcnQ6c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9taW5pZnlfbmFtZXIuZGFydLiuLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YganNfYmFja2VuZC5uYW1lcjsKCi8vLyBBc3NpZ25zIEphdmFTY3JpcHQgaWRlbnRpZmllcnMgdG8gRGFydCB2YXJpYWJsZXMsIGNsYXNzLW5hbWVzIGFuZCBtZW1iZXJzLgpjbGFzcyBNaW5pZnlOYW1lciBleHRlbmRzIE5hbWVyCiAgICB3aXRoCiAgICAgICAgX01pbmlmaWVkRmllbGROYW1lciwKICAgICAgICBfTWluaWZ5Q29uc3RydWN0b3JCb2R5TmFtZXIsCiAgICAgICAgX01pbmlmaWVkT25lU2hvdEludGVyY2VwdG9yTmFtZXIgewogIE1pbmlmeU5hbWVyKAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIFJ1bnRpbWVUeXBlVGFncyBydGlUYWdzLCBGaXhlZE5hbWVzIGZpeGVkTmFtZXMpCiAgICAgIDogc3VwZXIoY2xvc2VkV29ybGQsIHJ0aVRhZ3MsIGZpeGVkTmFtZXMpIHsKICAgIHJlc2VydmVCYWNrZW5kTmFtZXMoKTsKICAgIGZpZWxkUmVnaXN0cnkgPSBuZXcgX0ZpZWxkTmFtaW5nUmVnaXN0cnkodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBfRmllbGROYW1pbmdSZWdpc3RyeSBmaWVsZFJlZ2lzdHJ5OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGlzb2xhdGVOYW1lID0+ICdJJzsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGlzb2xhdGVQcm9wZXJ0aWVzTmFtZSA9PiAncCc7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgc2hvdWxkTWluaWZ5ID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBnZW5lcmljSW5zdGFudGlhdGlvblByZWZpeCA9PiByJyRJJzsKCiAgZmluYWwgQUxQSEFCRVRfQ0hBUkFDVEVSUyA9IDUyOyAvLyBhLXpBLVouCiAgZmluYWwgQUxQSEFOVU1FUklDX0NIQVJBQ1RFUlMgPSA2MjsgLy8gYS16QS1aMC05LgoKICAvLy8gWW91IGNhbiBwYXNzIGFuIGludmFsaWQgaWRlbnRpZmllciB0byB0aGlzIGFuZCB1bmxpa2UgaXRzIG5vbi1taW5pZnlpbmcKICAvLy8gY291bnRlcnBhcnQgaXQgd2lsbCBuZXZlciByZXR1cm4gdGhlIHByb3Bvc2VkTmFtZSBhcyB0aGUgbmV3IGZyZXNoIG5hbWUuCiAgLy8vCiAgLy8vIFtzYW5pdGl6ZUZvck5hdGl2ZXNdIGFuZCBbc2FuaXRpemVGb3JBbm5vdGF0aW9uc10gYXJlIGlnbm9yZWQgYmVjYXVzZSB0aGUKICAvLy8gbWluaWZpZWQgbmFtZXMgd2lsbCBhbHdheXMgYXZvaWQgY2xhc2hpbmcgd2l0aCBhbm5vdGF0ZWQgbmFtZXMgb3IgbmF0aXZlcy4KICBAb3ZlcnJpZGUKICBTdHJpbmcgX2dlbmVyYXRlRnJlc2hTdHJpbmdGb3JOYW1lKFN0cmluZyBwcm9wb3NlZE5hbWUsIE5hbWluZ1Njb3BlIHNjb3BlLAogICAgICB7Ym9vbCBzYW5pdGl6ZUZvck5hdGl2ZXM6IGZhbHNlLCBib29sIHNhbml0aXplRm9yQW5ub3RhdGlvbnM6IGZhbHNlfSkgewogICAgU3RyaW5nIGZyZXNoTmFtZTsKICAgIFN0cmluZyBzdWdnZXN0aW9uID0gc2NvcGUuc3VnZ2VzdE5hbWUocHJvcG9zZWROYW1lKTsKICAgIGlmIChzdWdnZXN0aW9uICE9IG51bGwgJiYgc2NvcGUuaXNVbnVzZWQoc3VnZ2VzdGlvbikpIHsKICAgICAgZnJlc2hOYW1lID0gc3VnZ2VzdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIGZyZXNoTmFtZSA9IF9nZXRVbnVzZWROYW1lKHByb3Bvc2VkTmFtZSwgc2NvcGUpOwogICAgfQogICAgc2NvcGUucmVnaXN0ZXJVc2UoZnJlc2hOYW1lKTsKICAgIHJldHVybiBmcmVzaE5hbWU7CiAgfQoKICAvLyBGcm9tIGlzc3VlIDc1NTQuICBUaGVzZSBzaG91bGQgbm90IGJlIHVzZWQgb24gb2JqZWN0cyAoYXMgaW5zdGFuY2UKICAvLyB2YXJpYWJsZXMpIGJlY2F1c2UgdGhleSBjbGFzaCB3aXRoIG5hbWVzIGZyb20gdGhlIERPTS4gSG93ZXZlciwgaXQgaXMKICAvLyBPSyB0byB1c2UgdGhlbSBhcyBmaWVsZHMsIGFzIHdlIG9ubHkgYWNjZXNzIGZpZWxkcyBkaXJlY3RseSBpZiB3ZSBrbm93CiAgLy8gdGhlIHJlY2VpdmVyIHR5cGUuCiAgc3RhdGljIGNvbnN0IExpc3Q8U3RyaW5nPiBfcmVzZXJ2ZWROYXRpdmVQcm9wZXJ0aWVzID0gY29uc3QgPFN0cmluZz5bCiAgICAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAncicsICd4JywgJ3knLCAneicsICdRJywKICAgIC8vIDItbGV0dGVyOgogICAgJ2NoJywgJ2N4JywgJ2N5JywgJ2RiJywgJ2R4JywgJ2R5JywgJ2ZyJywgJ2Z4JywgJ2Z5JywgJ2dvJywgJ2lkJywgJ2sxJywKICAgICdrMicsICdrMycsICdrNCcsICdyMScsICdyMicsICdyeCcsICdyeScsICd4MScsICd4MicsICd5MScsICd5MicsCiAgICAvLyAzLWxldHRlcjoKICAgICdhZGQnLCAnYWxsJywgJ2FsdCcsICdhcmMnLCAnQ0NXJywgJ2NtcCcsICdkaXInLCAnZW5kJywgJ2dldCcsICdpbjEnLAogICAgJ2luMicsICdJTlQnLCAna2V5JywgJ2xvZycsICdsb3cnLCAnbTExJywgJ20xMicsICdtMTMnLCAnbTE0JywgJ20yMScsCiAgICAnbTIyJywgJ20yMycsICdtMjQnLCAnbTMxJywgJ20zMicsICdtMzMnLCAnbTM0JywgJ200MScsICdtNDInLCAnbTQzJywKICAgICdtNDQnLCAnbWF4JywgJ21pbicsICdub3cnLCAnT05FJywgJ3B1dCcsICdyZWQnLCAncmVsJywgJ3JldicsICdSR0InLAogICAgJ3NkcCcsICdzZXQnLCAnc3JjJywgJ3RhZycsICd0b3AnLCAndWlkJywgJ3VyaScsICd1cmwnLCAnVVJMJywKICAgIC8vIDQtbGV0dGVyOgogICAgJ2FiYnInLCAnYXRvYicsICdBdHRyJywgJ2F4ZXMnLCAnYXhpcycsICdiYWNrJywgJ0JBQ0snLCAnYmV0YScsICdiaWFzJywKICAgICdCbG9iJywgJ2JsdWUnLCAnYmx1cicsICdCTFVSJywgJ2JvZHknLCAnQk9PTCcsICdCT1RIJywgJ2J0b2EnLCAnQllURScsCiAgICAnY2l0ZScsICdjbGlwJywgJ2NvZGUnLCAnY29scycsICdjdWVzJywgJ2RhdGEnLCAnREVDUicsICdET05FJywgJ2ZhY2UnLAogICAgJ2ZpbGUnLCAnRmlsZScsICdmaWxsJywgJ2ZpbmQnLCAnZm9udCcsICdmb3JtJywgJ2dhaW4nLCAnaGFzaCcsICdoZWFkJywKICAgICdoaWdoJywgJ2hpbnQnLCAnaG9zdCcsICdocmVmJywgJ0hSVEYnLCAnSURMRScsICdJTkNSJywgJ2luZm8nLCAnSU5JVCcsCiAgICAnaXNJZCcsICdpdGVtJywgJ0tFRVAnLCAna2luZCcsICdrbmVlJywgJ2xhbmcnLCAnbGVmdCcsICdMRVNTJywgJ2xpbmUnLAogICAgJ2xpbmsnLCAnbGlzdCcsICdsb2FkJywgJ2xvb3AnLCAnbW9kZScsICduYW1lJywgJ05vZGUnLCAnTm9uZScsICdOT05FJywKICAgICdvbmx5JywgJ29wZW4nLCAnT1BFTicsICdwaW5nJywgJ3BsYXknLCAncG9ydCcsICdyZWN0JywgJ1JlY3QnLCAncmVmWCcsCiAgICAncmVmWScsICdSR0JBJywgJ3Jvb3QnLCAncm93cycsICdzYXZlJywgJ3NlZWQnLCAnc2VlaycsICdzZWxmJywgJ3NlbmQnLAogICAgJ3Nob3cnLCAnU0lORScsICdzaXplJywgJ3NwYW4nLCAnc3RhdCcsICdzdGVwJywgJ3N0b3AnLCAndGFncycsICd0ZXh0JywKICAgICdUZXh0JywgJ3RpbWUnLCAndHlwZScsICd2aWV3JywgJ3dhcm4nLCAnd3JhcCcsICdaRVJPJwogIF07CgogIHZvaWQgcmVzZXJ2ZUJhY2tlbmROYW1lcygpIHsKICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gX3Jlc2VydmVkTmF0aXZlUHJvcGVydGllcykgewogICAgICBpZiAobmFtZS5sZW5ndGggPCAyKSB7CiAgICAgICAgLy8gRW5zdXJlIHRoZSAxLWxldHRlciBuYW1lcyBhcmUgZGlzYW1iaWd1YXRlZCB0byB0aGUgc2FtZSBuYW1lLgogICAgICAgIFN0cmluZyBkaXNhbWJpZ3VhdGVkTmFtZSA9IG5hbWU7CiAgICAgICAgcmVzZXJ2ZVB1YmxpY01lbWJlck5hbWUobmFtZSwgZGlzYW1iaWd1YXRlZE5hbWUpOwogICAgICB9CiAgICAgIGluc3RhbmNlU2NvcGUucmVnaXN0ZXJVc2UobmFtZSk7CiAgICAgIC8vIEdldHRlciBhbmQgc2V0dGVyIG5hbWVzIGFyZSBhdXRvZ2VuZXJhdGVkIGJ5IHByZXBlbmRpbmcgJ2cnIGFuZCAncycgdG8KICAgICAgLy8gZmllbGQgbmFtZXMuICBUaGVyZWZvcmUgdGhlcmUgYXJlIHNvbWUgZmllbGQgbmFtZXMgd2UgZG9uJ3Qgd2FudCB0bwogICAgICAvLyB1c2UuICBJdCBpcyBpbXBsaWNpdCBpbiB0aGUgbmV4dCBsaW5lIHRoYXQgdGhlIGJhbm5lZCBwcmVmaXggaXMKICAgICAgLy8gb25seSBvbmUgY2hhcmFjdGVyLgogICAgICBpZiAoX2hhc0Jhbm5lZFByZWZpeChuYW1lKSkgewogICAgICAgIGluc3RhbmNlU2NvcGUucmVnaXN0ZXJVc2UobmFtZS5zdWJzdHJpbmcoMSkpOwogICAgICB9CiAgICB9CgogICAgLy8gVGhlc2UgcG9wdWxhciBuYW1lcyBhcmUgcHJlc2VudCBpbiBtb3N0IHByb2dyYW1zIGFuZCBkZXNlcnZlCiAgICAvLyBzaW5nbGUgY2hhcmFjdGVyIG1pbmlmaWVkIG5hbWVzLiAgV2UgY291bGQgZGV0ZXJtaW5lIHRoZSBwb3B1bGFyIG5hbWVzCiAgICAvLyBpbmRpdmlkdWFsbHkgcGVyIHByb2dyYW0sIGJ1dCB0aGF0IHdvdWxkIG1lYW4gdGhhdCB0aGUgb3V0cHV0IG9mIHRoZQogICAgLy8gbWluaWZpZXIgd2FzIGxlc3Mgc3RhYmxlIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uIG9mIHRoZSBwcm9ncmFtIGJlaW5nCiAgICAvLyBtaW5pZmllZC4KICAgIF9wb3B1bGF0ZVN1Z2dlc3RlZE5hbWVzKGluc3RhbmNlU2NvcGUsIGNvbnN0IDxTdHJpbmc+WwogICAgICByJyRhZGQnLAogICAgICByJ2FkZCQxJywKICAgICAgcickYW5kJywKICAgICAgcickb3InLAogICAgICByJ2N1cnJlbnQnLAogICAgICByJyRzaHInLAogICAgICByJyRlcScsCiAgICAgIHInJG5lJywKICAgICAgcickaW5kZXgnLAogICAgICByJyRpbmRleFNldCcsCiAgICAgIHInJHhvcicsCiAgICAgIHInY2xvbmUkMCcsCiAgICAgIHInaXRlcmF0b3InLAogICAgICByJ2xlbmd0aCcsCiAgICAgIHInJGx0JywKICAgICAgcickZ3QnLAogICAgICByJyRsZScsCiAgICAgIHInJGdlJywKICAgICAgcidtb3ZlTmV4dCQwJywKICAgICAgcidub2RlJywKICAgICAgcidvbicsCiAgICAgIHInJG5lZ2F0ZScsCiAgICAgIHIncHVzaCcsCiAgICAgIHInc2VsZicsCiAgICAgIHInc3RhcnQnLAogICAgICByJ3RhcmdldCcsCiAgICAgIHInJHNobCcsCiAgICAgIHIndmFsdWUnLAogICAgICByJ3dpZHRoJywKICAgICAgcidzdHlsZScsCiAgICAgIHInbm9TdWNoTWV0aG9kJDEnLAogICAgICByJyRtdWwnLAogICAgICByJyRkaXYnLAogICAgICByJyRzdWInLAogICAgICByJyRub3QnLAogICAgICByJyRtb2QnLAogICAgICByJyR0ZGl2JywKICAgICAgcid0b1N0cmluZyQwJwogICAgXSk7CgogICAgX3BvcHVsYXRlU3VnZ2VzdGVkTmFtZXMoZ2xvYmFsU2NvcGUsIGNvbnN0IDxTdHJpbmc+WwogICAgICByJ09iamVjdCcsCiAgICAgICd3cmFwRXhjZXB0aW9uJywKICAgICAgcickZXEnLAogICAgICByJ1MnLAogICAgICByJ2lvb3JlJywKICAgICAgcidVbnN1cHBvcnRlZEVycm9yJCcsCiAgICAgIHInbGVuZ3RoJywKICAgICAgcickc3ViJywKICAgICAgcickYWRkJywKICAgICAgcickZ3QnLAogICAgICByJyRnZScsCiAgICAgIHInJGx0JywKICAgICAgcickbGUnLAogICAgICByJ2FkZCcsCiAgICAgIHInaWFlJywKICAgICAgcidBcmd1bWVudEVycm9yJCcsCiAgICAgIHInQm91bmRDbG9zdXJlJywKICAgICAgcidDbG9zdXJlJywKICAgICAgcidTdGF0ZUVycm9yJCcsCiAgICAgIHInZ2V0SW50ZXJjZXB0b3IkJywKICAgICAgcidtYXgnLAogICAgICByJyRtdWwnLAogICAgICByJ01hcCcsCiAgICAgIHInS2V5X0tleScsCiAgICAgIHInJGRpdicsCiAgICAgIHInTGlzdF9MaXN0JGZyb20nLAogICAgICByJ0xpbmtlZEhhc2hNYXBfTGlua2VkSGFzaE1hcCRfZW1wdHknLAogICAgICByJ0xpbmtlZEhhc2hNYXBfTGlua2VkSGFzaE1hcCRfbGl0ZXJhbCcsCiAgICAgIHInbWluJywKICAgICAgcidSYW5nZUVycm9yJHZhbHVlJywKICAgICAgcidKU1N0cmluZycsCiAgICAgIHInSlNOdW1iZXInLAogICAgICByJ0pTQXJyYXknLAogICAgICByJ2NyZWF0ZUludm9jYXRpb25NaXJyb3InLAogICAgICByJ1N0cmluZycsCiAgICAgIHInc2V0UnVudGltZVR5cGVJbmZvJywKICAgICAgcidjcmVhdGVSdW50aW1lVHlwZScKICAgIF0pOwogIH0KCiAgdm9pZCBfcG9wdWxhdGVTdWdnZXN0ZWROYW1lcyhOYW1pbmdTY29wZSBzY29wZSwgTGlzdDxTdHJpbmc+IHN1Z2dlc3Rpb25zKSB7CiAgICBpbnQgYyA9ICRhIC0gMTsKICAgIFN0cmluZyBsZXR0ZXI7CiAgICBmb3IgKFN0cmluZyBuYW1lIGluIHN1Z2dlc3Rpb25zKSB7CiAgICAgIGRvIHsKICAgICAgICBhc3NlcnQoYyAhPSAkWik7CiAgICAgICAgYyA9IChjID09ICR6KSA/ICRBIDogYyArIDE7CiAgICAgICAgbGV0dGVyID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKFtjXSk7CiAgICAgIH0gd2hpbGUgKF9oYXNCYW5uZWRQcmVmaXgobGV0dGVyKSB8fCBzY29wZS5pc1VzZWQobGV0dGVyKSk7CiAgICAgIGFzc2VydCghc2NvcGUuaGFzU3VnZ2VzdGlvbihuYW1lKSk7CiAgICAgIHNjb3BlLmFkZFN1Z2dlc3Rpb24obmFtZSwgbGV0dGVyKTsKICAgIH0KICB9CgogIC8vIFRoaXMgZ2V0cyBhIG1pbmlmaWVkIG5hbWUgYmFzZWQgb24gYSBoYXNoIG9mIHRoZSBwcm9wb3NlZCBuYW1lLiAgVGhpcwogIC8vIGlzIHNsaWdodGx5IGxlc3MgZWZmaWNpZW50IHRoYW4ganVzdCBnZXR0aW5nIHRoZSBuZXh0IG5hbWUgaW4gYSBzZXJpZXMsCiAgLy8gYnV0IGl0IG1lYW5zIHRoYXQgc21hbGwgY2hhbmdlcyBpbiB0aGUgaW5wdXQgcHJvZ3JhbSB3aWxsIGdpdmUgc21hbGxpc2gKICAvLyBjaGFuZ2VzIGluIHRoZSBvdXRwdXQsIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIGRpZmZpbmcgZXRjLgogIFN0cmluZyBfZ2V0VW51c2VkTmFtZShTdHJpbmcgcHJvcG9zZWROYW1lLCBOYW1pbmdTY29wZSBzY29wZSkgewogICAgaW50IGhhc2ggPSBfY2FsY3VsYXRlSGFzaChwcm9wb3NlZE5hbWUpOwogICAgLy8gQXZvaWQgdmVyeSBzbWFsbCBoYXNoZXMgdGhhdCB3b24ndCB0cnkgbWFueSBuYW1lcy4KICAgIGhhc2ggPSBoYXNoIDwgMTAwMCA/IGhhc2ggKiAzMTQxNTkgOiBoYXNoOyAvLyBZZXMsIGl0J3MgcHJpbWUuCgogICAgLy8gVHJ5IG90aGVyIG4tY2hhcmFjdGVyIG5hbWVzIGJhc2VkIG9uIHRoZSBoYXNoLiAgV2UgdHJ5IG9uZSB0byB0aHJlZQogICAgLy8gY2hhcmFjdGVyIGlkZW50aWZpZXJzLiAgRm9yIGVhY2ggbGVuZ3RoIHdlIHRyeSBhcm91bmQgMTAgZGlmZmVyZW50IG5hbWVzCiAgICAvLyBpbiBhIHByZWRpY3RhYmxlIG9yZGVyIGRldGVybWluZWQgYnkgdGhlIHByb3Bvc2VkIG5hbWUuICBUaGlzIGlzIGluIG9yZGVyCiAgICAvLyB0byBtYWtlIHRoZSByZW5hbWVyIHN0YWJsZTogc21hbGwgY2hhbmdlcyBpbiB0aGUgaW5wdXQgc2hvdWxkIG5vcm5hbGx5CiAgICAvLyByZXN1bHQgaW4gcmVsYXRpdmVseSBzbWFsbCBjaGFuZ2VzIGluIHRoZSBvdXRwdXQuCiAgICBmb3IgKGludCBuID0gMTsgbiA8PSAzOyBuKyspIHsKICAgICAgaW50IGggPSBoYXNoOwogICAgICB3aGlsZSAoaCA+IDEwKSB7CiAgICAgICAgTGlzdDxpbnQ+IGNvZGVzID0gPGludD5bX2xldHRlck51bWJlcihoKV07CiAgICAgICAgaW50IGgyID0gaCB+LyBBTFBIQUJFVF9DSEFSQUNURVJTOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICBjb2Rlcy5hZGQoX2FscGhhTnVtZXJpY051bWJlcihoMikpOwogICAgICAgICAgaDIgfi89IEFMUEhBTlVNRVJJQ19DSEFSQUNURVJTOwogICAgICAgIH0KICAgICAgICBmaW5hbCBjYW5kaWRhdGUgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZXMpOwogICAgICAgIGlmIChzY29wZS5pc1VudXNlZChjYW5kaWRhdGUpICYmCiAgICAgICAgICAgICFqc1Jlc2VydmVkLmNvbnRhaW5zKGNhbmRpZGF0ZSkgJiYKICAgICAgICAgICAgIV9oYXNCYW5uZWRQcmVmaXgoY2FuZGlkYXRlKSAmJgogICAgICAgICAgICAobiAhPSAxIHx8IHNjb3BlLmlzU3VnZ2VzdGlvbihjYW5kaWRhdGUpKSkgewogICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKICAgICAgICB9CiAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgaGFzaC4gIEFmdGVyIGFyb3VuZCAxMCB0dXJucwogICAgICAgIC8vIGFyb3VuZCB0aGlzIGxvb3AgaCBpcyB6ZXJvIGFuZCB3ZSB0cnkgYSBsb25nZXIgbmFtZS4KICAgICAgICBoIH4vPSA3OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2JhZE5hbWUoaGFzaCwgc2NvcGUpOwogIH0KCiAgLy8vIEluc3RhbmNlIG1lbWJlcnMgc3RhcnRpbmcgd2l0aCBnIGFuZCBzIGFyZSByZXNlcnZlZCBmb3IgZ2V0dGVycyBhbmQKICAvLy8gc2V0dGVycy4KICBzdGF0aWMgYm9vbCBfaGFzQmFubmVkUHJlZml4KFN0cmluZyBuYW1lKSB7CiAgICBpbnQgY29kZSA9IG5hbWUuY29kZVVuaXRBdCgwKTsKICAgIHJldHVybiBjb2RlID09ICRnIHx8IGNvZGUgPT0gJHM7CiAgfQoKICBpbnQgX2NhbGN1bGF0ZUhhc2goU3RyaW5nIG5hbWUpIHsKICAgIGludCBoID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykgewogICAgICBoICs9IG5hbWUuY29kZVVuaXRBdChpKTsKICAgICAgaCAmPSAweGZmZmZmZmZmOwogICAgICBoICs9IGggPDwgMTA7CiAgICAgIGggJj0gMHhmZmZmZmZmZjsKICAgICAgaCBePSBoID4+IDY7CiAgICAgIGggJj0gMHhmZmZmZmZmZjsKICAgIH0KICAgIHJldHVybiBoOwogIH0KCiAgLy8vIFJlbWVtYmVyIGJhZCBoYXNoZXMgdG8gYXZvaWQgdXNpbmcgYSB0aGUgc2FtZSBjaGFyYWN0ZXIgd2l0aCBsb25nIG51bWJlcnMKICAvLy8gZm9yIGZyZXF1ZW50IGhhc2hlcy4gRm9yIGV4YW1wbGUsIGBjbG9zdXJlYCBpcyBhIHZlcnkgY29tbW9uIG5hbWUuCiAgTWFwPGludCwgaW50PiBfYmFkTmFtZXMgPSBuZXcgTWFwPGludCwgaW50PigpOwoKICAvLy8gSWYgd2UgY2FuJ3QgZmluZCBhIGhhc2ggYmFzZWQgbmFtZSBpbiB0aGUgdGhyZWUtbGV0dGVyIHNwYWNlLCB0aGVuIGJhc2UKICAvLy8gdGhlIG5hbWUgb24gYSBsZXR0ZXIgYW5kIGEgY291bnRlci4KICBTdHJpbmcgX2JhZE5hbWUoaW50IGhhc2gsIE5hbWluZ1Njb3BlIHNjb3BlKSB7CiAgICBpbnQgY291bnQgPSBfYmFkTmFtZXMucHV0SWZBYnNlbnQoaGFzaCwgKCkgPT4gMCk7CiAgICBTdHJpbmcgc3RhcnRMZXR0ZXIgPQogICAgICAgIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbX2xldHRlck51bWJlcihoYXNoICsgY291bnQpXSk7CiAgICBfYmFkTmFtZXNbaGFzaF0gPSBjb3VudCArIDE7CiAgICBTdHJpbmcgbmFtZTsKICAgIGludCBpID0gMDsKICAgIGRvIHsKICAgICAgbmFtZSA9ICIkc3RhcnRMZXR0ZXIke2krK30iOwogICAgfSB3aGlsZSAoc2NvcGUuaXNVc2VkKG5hbWUpKTsKICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGJhbm5lZCBwcmVmaXggYmVjYXVzZSB0aGUgbmFtZSBpcyBpbiB0aGUgZm9ybQogICAgLy8geG5ubiwgd2hlcmUgbm5uIGlzIGEgbnVtYmVyLiAgVGhlcmUgY2FuIGJlIG5vIGdldHRlciBvciBzZXR0ZXIgY2FsbGVkCiAgICAvLyBnbm5uIHNpbmNlIHRoYXQgd291bGQgaW1wbHkgYSBudW1lcmljIGZpZWxkIG5hbWUuCiAgICByZXR1cm4gbmFtZTsKICB9CgogIGludCBfbGV0dGVyTnVtYmVyKGludCB4KSB7CiAgICBpZiAoeCA+PSBBTFBIQUJFVF9DSEFSQUNURVJTKSB4ICU9IEFMUEhBQkVUX0NIQVJBQ1RFUlM7CiAgICBpZiAoeCA8IDI2KSByZXR1cm4gJGEgKyB4OwogICAgcmV0dXJuICRBICsgeCAtIDI2OwogIH0KCiAgaW50IF9hbHBoYU51bWVyaWNOdW1iZXIoaW50IHgpIHsKICAgIGlmICh4ID49IEFMUEhBTlVNRVJJQ19DSEFSQUNURVJTKSB4ICU9IEFMUEhBTlVNRVJJQ19DSEFSQUNURVJTOwogICAgaWYgKHggPCAyNikgcmV0dXJuICRhICsgeDsKICAgIGlmICh4IDwgNTIpIHJldHVybiAkQSArIHggLSAyNjsKICAgIHJldHVybiAkMCArIHggLSA1MjsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIHByb3Bvc2VkID0gX21pbmlmaWVkSW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShlbGVtZW50KTsKICAgIGlmIChwcm9wb3NlZCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBwcm9wb3NlZDsKICAgIH0KICAgIHJldHVybiBzdXBlci5pbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKGVsZW1lbnQpOwogIH0KfQoKLy8vIEltcGxlbWVudHMgbmFtaW5nIGZvciBjb25zdHJ1Y3RvciBib2RpZXMuCi8vLwovLy8gQ29uc3RydWN0b3IgYm9kaWVzIGFyZSBvbmx5IGNhbGxlZCBpbiBzZXR0aW5ncyB3aGVyZSB0aGUgdGFyZ2V0IGlzCi8vLyBzdGF0aWNhbGx5IGtub3duLiBUaGVyZWZvcmUsIHdlIGNhbiBzaGFyZSB0aGVpciBuYW1lcyBiZXR3ZWVuIGNsYXNzZXMuCi8vLyBIb3dldmVyLCB0byBzdXBwb3J0IGNhbGxpbmcgdGhlIGNvbnN0cnVjdG9yIGJvZHkgb2YgYSBzdXBlciBjb25zdHJ1Y3RvciwKLy8vIGVhY2ggbGV2ZWwgaW4gdGhlIGluaGVyaXRhbmNlIHRyZWUgaGFzIHRvIHVzZSBpdHMgb3duIG5hbWVzLgovLy8KLy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIG5hbWluZyBzY2hlbWUgYnkgY291bnRpbmcgdGhlIGRpc3RhbmNlIGZyb20KLy8vIGEgZ2l2ZW4gY29uc3RydWN0b3IgdG8gW09iamVjdF0sIHdoZXJlIGRpc3RhbmNlIGlzIHRoZSBudW1iZXIgb2YKLy8vIGNvbnN0cnVjdG9ycyBkZWNsYXJlZCBhbG9uZyB0aGUgaW5oZXJpdGFuY2UgY2hhaW4uCmNsYXNzIF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZSB7CiAgZmluYWwgaW50IF9zdGFydEluZGV4OwogIGZpbmFsIExpc3Q8Q29uc3RydWN0b3JFbnRpdHk+IF9jb25zdHJ1Y3RvcnM7CiAgaW50IGdldCBudW1iZXJPZkNvbnN0cnVjdG9ycyA9PiBfY29uc3RydWN0b3JzLmxlbmd0aDsKCiAgX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlLnJvb3RTY29wZSgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBFbGVtZW50RW52aXJvbm1lbnQgZW52aXJvbm1lbnQpCiAgICAgIDogX3N0YXJ0SW5kZXggPSAwLAogICAgICAgIF9jb25zdHJ1Y3RvcnMgPSBfZ2V0Q29uc3RydWN0b3JMaXN0KGNscywgZW52aXJvbm1lbnQpOwoKICBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGUuZm9yQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzLAogICAgICBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGUgc3VwZXJTY29wZSwgRWxlbWVudEVudmlyb25tZW50IGVudmlyb25tZW50KQogICAgICA6IF9zdGFydEluZGV4ID0gc3VwZXJTY29wZS5fc3RhcnRJbmRleCArIHN1cGVyU2NvcGUubnVtYmVyT2ZDb25zdHJ1Y3RvcnMsCiAgICAgICAgX2NvbnN0cnVjdG9ycyA9IF9nZXRDb25zdHJ1Y3Rvckxpc3QoY2xzLCBlbnZpcm9ubWVudCk7CgogIC8vIE1peGluIEFwcGxpY2F0aW9ucyBoYXZlIGNvbnN0cnVjdG9ycyBidXQgd2UgbmV2ZXIgZ2VuZXJhdGUgY29kZSBmb3IgdGhlbSwKICAvLyBzbyB0aGV5IGRvIG5vdCBjb3VudCBpbiB0aGUgaW5oZXJpdGFuY2UgY2hhaW4uCiAgX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlLmZvck1peGluQXBwbGljYXRpb24oCiAgICAgIENsYXNzRW50aXR5IGNscywgX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlIHN1cGVyU2NvcGUpCiAgICAgIDogX3N0YXJ0SW5kZXggPSBzdXBlclNjb3BlLl9zdGFydEluZGV4ICsgc3VwZXJTY29wZS5udW1iZXJPZkNvbnN0cnVjdG9ycywKICAgICAgICBfY29uc3RydWN0b3JzID0gY29uc3QgW107CgogIGZhY3RvcnkgX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlKAogICAgICBDbGFzc0VudGl0eSBjbHMsCiAgICAgIE1hcDxDbGFzc0VudGl0eSwgX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlPiByZWdpc3RyeSwKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gcmVnaXN0cnkucHV0SWZBYnNlbnQoY2xzLCAoKSB7CiAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBlbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgIGlmIChzdXBlcmNsYXNzID09IG51bGwpIHsKICAgICAgICByZXR1cm4gbmV3IF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZS5yb290U2NvcGUoY2xzLCBlbnZpcm9ubWVudCk7CiAgICAgIH0gZWxzZSBpZiAoZW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGNscykpIHsKICAgICAgICByZXR1cm4gbmV3IF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZS5mb3JNaXhpbkFwcGxpY2F0aW9uKGNscywKICAgICAgICAgICAgbmV3IF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZShzdXBlcmNsYXNzLCByZWdpc3RyeSwgZW52aXJvbm1lbnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZS5mb3JDbGFzcygKICAgICAgICAgICAgY2xzLAogICAgICAgICAgICBuZXcgX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlKHN1cGVyY2xhc3MsIHJlZ2lzdHJ5LCBlbnZpcm9ubWVudCksCiAgICAgICAgICAgIGVudmlyb25tZW50KTsKICAgICAgfQogICAgfSk7CiAgfQoKICBTdHJpbmcgY29uc3RydWN0b3JCb2R5S2V5Rm9yKENvbnN0cnVjdG9yQm9keUVudGl0eSBib2R5KSB7CiAgICBpbnQgcG9zaXRpb24gPSBfY29uc3RydWN0b3JzLmluZGV4T2YoYm9keS5jb25zdHJ1Y3Rvcik7CiAgICBhc3NlcnQocG9zaXRpb24gPj0gMCwgZmFpbGVkQXQoYm9keSwgImNvbnN0cnVjdG9yIGJvZHkgbWlzc2luZyIpKTsKICAgIHJldHVybiAiQGNvbnN0cnVjdG9yQm9keUAke19zdGFydEluZGV4ICsgcG9zaXRpb259IjsKICB9CgogIHN0YXRpYyBMaXN0PENvbnN0cnVjdG9yRW50aXR5PiBfZ2V0Q29uc3RydWN0b3JMaXN0KAogICAgICBDbGFzc0VudGl0eSBjbHMsIEVsZW1lbnRFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgdmFyIHJlc3VsdCA9IDxDb25zdHJ1Y3RvckVudGl0eT5bXTsKICAgIGVudmlyb25tZW50LmZvckVhY2hDb25zdHJ1Y3RvcihjbHMsIHJlc3VsdC5hZGQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9NaW5pZnlDb25zdHJ1Y3RvckJvZHlOYW1lciBpbXBsZW1lbnRzIE5hbWVyIHsKICBNYXA8Q2xhc3NFbnRpdHksIF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZT4gX2NvbnN0cnVjdG9yQm9keVNjb3BlcyA9CiAgICAgIG5ldyBNYXA8Q2xhc3NFbnRpdHksIF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZT4oKTsKCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBjb25zdHJ1Y3RvckJvZHlOYW1lKENvbnN0cnVjdG9yQm9keUVudGl0eSBtZXRob2QpIHsKICAgIF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZSBzY29wZSA9IG5ldyBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGUoCiAgICAgICAgbWV0aG9kLmVuY2xvc2luZ0NsYXNzLCBfY29uc3RydWN0b3JCb2R5U2NvcGVzLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgIFN0cmluZyBrZXkgPSBzY29wZS5jb25zdHJ1Y3RvckJvZHlLZXlGb3IobWV0aG9kKTsKICAgIHJldHVybiBfZGlzYW1iaWd1YXRlTWVtYmVyQnlLZXkoCiAgICAgICAga2V5LCAoKSA9PiBfcHJvcG9zZU5hbWVGb3JDb25zdHJ1Y3RvckJvZHkobWV0aG9kKSk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfTWluaWZpZWRPbmVTaG90SW50ZXJjZXB0b3JOYW1lciBpbXBsZW1lbnRzIE5hbWVyIHsKICAvLy8gUHJvcGVydHkgbmFtZSB1c2VkIGZvciB0aGUgb25lLXNob3QgaW50ZXJjZXB0b3IgbWV0aG9kIGZvciB0aGUgZ2l2ZW4KICAvLy8gW3NlbGVjdG9yXSBhbmQgcmV0dXJuLXR5cGUgc3BlY2lhbGl6YXRpb24uCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBuYW1lRm9yT25lU2hvdEludGVyY2VwdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIFN0cmluZyByb290ID0gc2VsZWN0b3IuaXNPcGVyYXRvcgogICAgICAgID8gb3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyKHNlbGVjdG9yLm5hbWUpCiAgICAgICAgOiBwcml2YXRlTmFtZShzZWxlY3Rvci5tZW1iZXJOYW1lKTsKICAgIFN0cmluZyBwcmVmaXggPQogICAgICAgIHNlbGVjdG9yLmlzR2V0dGVyID8gciIkZ2V0IiA6IHNlbGVjdG9yLmlzU2V0dGVyID8gciIkc2V0IiA6ICIiOwogICAgU3RyaW5nIGNhbGxTdWZmaXggPSBzZWxlY3Rvci5pc0NhbGwKICAgICAgICA/IE5hbWVyLmNhbGxTdWZmaXhGb3JTdHJ1Y3R1cmUoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSkuam9pbigpCiAgICAgICAgOiAiIjsKICAgIFN0cmluZyBzdWZmaXggPQogICAgICAgIHN1ZmZpeEZvckdldEludGVyY2VwdG9yKF9jb21tb25FbGVtZW50cywgX25hdGl2ZURhdGEsIGNsYXNzZXMpOwogICAgU3RyaW5nIGZ1bGxOYW1lID0gIlwkaW50ZXJjZXB0ZWQkcHJlZml4XCQkcm9vdCRjYWxsU3VmZml4XCQkc3VmZml4IjsKICAgIHJldHVybiBfZGlzYW1iaWd1YXRlSW50ZXJuYWxHbG9iYWwoZnVsbE5hbWUpOwogIH0KfQqBlQBOTjwBGgFPIAkdJSsPUDIbNAQBDCYBDCEMKwwhDDIBLTQBTk8GUFEMTU4WOTweDTcGIhYEAUhLTBhIOxFMRhFKSkpKQxFMTExMTExMTExMOwUBHzUdSSk6CCdQTUkdJDYIBgFETkxNETsPEA8OEg8ODhEUDxITEQ4ODg4VDw0SDw8QEQ8QEBAZDw8PDw8QFAgBOREXDgwQHBEPDw4ODg4ODhkXEhYaDg8OEg8ZLS8OGxMTEiERHRsIBAFOFBMnCxkkMEIqKQYEAUtNTUFCLTpDAUtQUU45IxQXMysmLioKOykvLDkcCkxAEQgGIgQBSg8uIyUEASQPLB8XFBcTFwYOBAFQSTEBTioxNhlBIREPCSMiUE05EQQBHTwfGAQBI0QfJBgEAQw+RxwXBjUEAgEuBEdLTUEESEU3JBkvOAEpNxk/AThOUD8BTzQzP1AiAScXPigqPyBMOEhRDzkRUBoICAQBPTxHOQQBNjkoNRMEAgE+STsBDEFJTTYlPAQCAUNLMQwoOiYyLBRIKEYOFEhJMgQCATFwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL21pbmlmeV9uYW1lci5kYXJ0OXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvbmFtZXJfbmFtZXMuZGFydJveLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YganNfYmFja2VuZC5uYW1lcjsKCmFic3RyYWN0IGNsYXNzIF9OYW1lck5hbWUgZXh0ZW5kcyBqc0FzdC5OYW1lIHsKICBpbnQgZ2V0IF9raW5kOwogIF9OYW1lck5hbWUgZ2V0IF90YXJnZXQgPT4gdGhpczsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKERFQlVHX01PREUpIHsKICAgICAgcmV0dXJuICdOYW1lKCRrZXkpJzsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY29udmVydCBhIG5hbWUgdG8gYSBzdHJpbmciKTsKICB9Cn0KCmVudW0gX05hbWVyTmFtZUtpbmRzIHsgU3RyaW5nQmFja2VkLCBHZXR0ZXIsIFNldHRlciwgQXN5bmMsIENvbXBvdW5kLCBUb2tlbiB9CgpjbGFzcyBTdHJpbmdCYWNrZWROYW1lIGV4dGVuZHMgX05hbWVyTmFtZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBfa2luZCA9PiBfTmFtZXJOYW1lS2luZHMuU3RyaW5nQmFja2VkLmluZGV4OwoKICBTdHJpbmdCYWNrZWROYW1lKHRoaXMubmFtZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQga2V5ID0+IG5hbWU7CgogIEBvdmVycmlkZQogIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMgX05hbWVSZWZlcmVuY2UpIG90aGVyID0gb3RoZXIuX3RhcmdldDsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiAob3RoZXIgaXMgU3RyaW5nQmFja2VkTmFtZSkgJiYgb3RoZXIubmFtZSA9PSBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBuYW1lLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZVRvKGpzQXN0Lk5hbWUgb3RoZXIpIHsKICAgIF9OYW1lck5hbWUgb3RoZXJOYW1lck5hbWU7CiAgICBpZiAob3RoZXIgaXMgTW9kdWxhck5hbWUpIHsKICAgICAgb3RoZXJOYW1lck5hbWUgPSBvdGhlci52YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTmFtZXJOYW1lID0gb3RoZXI7CiAgICB9CiAgICBvdGhlck5hbWVyTmFtZSA9IG90aGVyTmFtZXJOYW1lLl90YXJnZXQ7CiAgICBpZiAob3RoZXJOYW1lck5hbWUuX2tpbmQgIT0gX2tpbmQpIHJldHVybiBvdGhlck5hbWVyTmFtZS5fa2luZCAtIF9raW5kOwogICAgcmV0dXJuIG5hbWUuY29tcGFyZVRvKG90aGVyTmFtZXJOYW1lLm5hbWUpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1ByZWZpeGVkTmFtZSBleHRlbmRzIF9OYW1lck5hbWUgaW1wbGVtZW50cyBqc0FzdC5Bc3RDb250YWluZXIgewogIGZpbmFsIGpzQXN0Lk5hbWUgcHJlZml4OwogIGZpbmFsIGpzQXN0Lk5hbWUgYmFzZTsKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IF9raW5kOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxqc0FzdC5Ob2RlPiBnZXQgY29udGFpbmVkTm9kZXMgPT4gW3ByZWZpeCwgYmFzZV07CgogIF9QcmVmaXhlZE5hbWUodGhpcy5wcmVmaXgsIHRoaXMuYmFzZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiBwcmVmaXgubmFtZSArIGJhc2UubmFtZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBrZXkgPT4gcHJlZml4LmtleSArIGJhc2Uua2V5OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMgX05hbWVSZWZlcmVuY2UpIG90aGVyID0gb3RoZXIuX3RhcmdldDsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgX1ByZWZpeGVkTmFtZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG90aGVyLmJhc2UgPT0gYmFzZSAmJiBvdGhlci5wcmVmaXggPT0gcHJlZml4OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBiYXNlLmhhc2hDb2RlICogMTMgKyBwcmVmaXguaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlVG8oanNBc3QuTmFtZSBvdGhlcikgewogICAgX05hbWVyTmFtZSBvdGhlck5hbWVyTmFtZTsKICAgIGlmIChvdGhlciBpcyBNb2R1bGFyTmFtZSkgewogICAgICBvdGhlck5hbWVyTmFtZSA9IG90aGVyLnZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgb3RoZXJOYW1lck5hbWUgPSBvdGhlcjsKICAgIH0KICAgIG90aGVyTmFtZXJOYW1lID0gb3RoZXJOYW1lck5hbWUuX3RhcmdldDsKICAgIGlmIChvdGhlck5hbWVyTmFtZS5fa2luZCAhPSBfa2luZCkgcmV0dXJuIG90aGVyTmFtZXJOYW1lLl9raW5kIC0gX2tpbmQ7CiAgICBfUHJlZml4ZWROYW1lIG90aGVyU2FtZUtpbmQgPSBvdGhlck5hbWVyTmFtZTsKICAgIGludCByZXN1bHQgPSBwcmVmaXguY29tcGFyZVRvKG90aGVyU2FtZUtpbmQucHJlZml4KTsKICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICByZXN1bHQgPSBwcmVmaXguY29tcGFyZVRvKG90aGVyU2FtZUtpbmQucHJlZml4KTsKICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7CiAgICAgICAgcmVzdWx0ID0gYmFzZS5jb21wYXJlVG8ob3RoZXJTYW1lS2luZC5iYXNlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmNsYXNzIEdldHRlck5hbWUgZXh0ZW5kcyBfUHJlZml4ZWROYW1lIHsKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IF9raW5kID0+IF9OYW1lck5hbWVLaW5kcy5HZXR0ZXIuaW5kZXg7CgogIEdldHRlck5hbWUoanNBc3QuTmFtZSBwcmVmaXgsIGpzQXN0Lk5hbWUgYmFzZSkgOiBzdXBlcihwcmVmaXgsIGJhc2UpOwp9CgpjbGFzcyBTZXR0ZXJOYW1lIGV4dGVuZHMgX1ByZWZpeGVkTmFtZSB7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBfa2luZCA9PiBfTmFtZXJOYW1lS2luZHMuU2V0dGVyLmluZGV4OwoKICBTZXR0ZXJOYW1lKGpzQXN0Lk5hbWUgcHJlZml4LCBqc0FzdC5OYW1lIGJhc2UpIDogc3VwZXIocHJlZml4LCBiYXNlKTsKfQoKY2xhc3MgQXN5bmNOYW1lIGV4dGVuZHMgX1ByZWZpeGVkTmFtZSB7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBfa2luZCA9PiBfTmFtZXJOYW1lS2luZHMuQXN5bmMuaW5kZXg7CgogIEFzeW5jTmFtZShqc0FzdC5OYW1lIHByZWZpeCwganNBc3QuTmFtZSBiYXNlKSA6IHN1cGVyKHByZWZpeCwgYmFzZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGFsbG93UmVuYW1lID0+IHRydWU7Cn0KCmNsYXNzIENvbXBvdW5kTmFtZSBleHRlbmRzIF9OYW1lck5hbWUgaW1wbGVtZW50cyBqc0FzdC5Bc3RDb250YWluZXIgewogIGZpbmFsIExpc3Q8X05hbWVyTmFtZT4gX3BhcnRzOwogIEBvdmVycmlkZQogIGludCBnZXQgX2tpbmQgPT4gX05hbWVyTmFtZUtpbmRzLkNvbXBvdW5kLmluZGV4OwogIFN0cmluZyBfY2FjaGVkTmFtZTsKICBpbnQgX2NhY2hlZEhhc2hDb2RlID0gLTE7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPGpzQXN0Lk5vZGU+IGdldCBjb250YWluZWROb2RlcyA9PiBfcGFydHM7CgogIENvbXBvdW5kTmFtZSh0aGlzLl9wYXJ0cyk7CgogIENvbXBvdW5kTmFtZS5mcm9tKExpc3Q8anNBc3QuTmFtZT4gcGFydHMpIDogdGhpcyg8X05hbWVyTmFtZT5bLi4ucGFydHNdKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lIHsKICAgIGlmIChfY2FjaGVkTmFtZSA9PSBudWxsKSB7CiAgICAgIF9jYWNoZWROYW1lID0gX3BhcnRzLm1hcCgoanNBc3QuTmFtZSBuYW1lKSA9PiBuYW1lLm5hbWUpLmpvaW4oKTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkTmFtZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQga2V5ID0+IF9wYXJ0cy5tYXAoKF9OYW1lck5hbWUgbmFtZSkgPT4gbmFtZS5rZXkpLmpvaW4oKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzIF9OYW1lUmVmZXJlbmNlKSBvdGhlciA9IG90aGVyLl90YXJnZXQ7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIENvbXBvdW5kTmFtZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG90aGVyLl9wYXJ0cy5sZW5ndGggIT0gX3BhcnRzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfcGFydHMubGVuZ3RoOyArK2kpIHsKICAgICAgaWYgKG90aGVyLl9wYXJ0c1tpXSAhPSBfcGFydHNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpZiAoX2NhY2hlZEhhc2hDb2RlIDwgMCkgewogICAgICBfY2FjaGVkSGFzaENvZGUgPSAwOwogICAgICBmb3IgKGpzQXN0Lk5hbWUgbmFtZSBpbiBfcGFydHMpIHsKICAgICAgICBfY2FjaGVkSGFzaENvZGUgPSAoX2NhY2hlZEhhc2hDb2RlICogMTcgKyBuYW1lLmhhc2hDb2RlKSAmIDB4N2ZmZmZmZmY7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfY2FjaGVkSGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZVRvKGpzQXN0Lk5hbWUgb3RoZXIpIHsKICAgIF9OYW1lck5hbWUgb3RoZXJOYW1lck5hbWU7CiAgICBpZiAob3RoZXIgaXMgTW9kdWxhck5hbWUpIHsKICAgICAgb3RoZXJOYW1lck5hbWUgPSBvdGhlci52YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTmFtZXJOYW1lID0gb3RoZXI7CiAgICB9CiAgICBvdGhlck5hbWVyTmFtZSA9IG90aGVyTmFtZXJOYW1lLl90YXJnZXQ7CiAgICBpZiAob3RoZXJOYW1lck5hbWUuX2tpbmQgIT0gX2tpbmQpIHJldHVybiBvdGhlck5hbWVyTmFtZS5fa2luZCAtIF9raW5kOwogICAgQ29tcG91bmROYW1lIG90aGVyU2FtZUtpbmQgPSBvdGhlck5hbWVyTmFtZTsKICAgIGlmIChvdGhlclNhbWVLaW5kLl9wYXJ0cy5sZW5ndGggIT0gX3BhcnRzLmxlbmd0aCkgewogICAgICByZXR1cm4gb3RoZXJTYW1lS2luZC5fcGFydHMubGVuZ3RoIC0gX3BhcnRzLmxlbmd0aDsKICAgIH0KICAgIGludCByZXN1bHQgPSAwOwogICAgZm9yIChpbnQgcG9zID0gMDsgcmVzdWx0ID09IDAgJiYgcG9zIDwgX3BhcnRzLmxlbmd0aDsgcG9zKyspIHsKICAgICAgcmVzdWx0ID0gX3BhcnRzW3Bvc10uY29tcGFyZVRvKG90aGVyU2FtZUtpbmQuX3BhcnRzW3Bvc10pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmNsYXNzIFRva2VuTmFtZSBleHRlbmRzIF9OYW1lck5hbWUgaW1wbGVtZW50cyBqc0FzdC5SZWZlcmVuY2VDb3VudGVkQXN0Tm9kZSB7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBfa2luZCA9PiBfTmFtZXJOYW1lS2luZHMuVG9rZW4uaW5kZXg7CiAgU3RyaW5nIF9uYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBrZXk7CiAgZmluYWwgVG9rZW5TY29wZSBfc2NvcGU7CiAgaW50IF9yYyA9IDA7CgogIFRva2VuTmFtZSh0aGlzLl9zY29wZSwgdGhpcy5rZXkpOwoKICBib29sIGdldCBpc0ZpbmFsaXplZCA9PiBfbmFtZSAhPSBudWxsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgewogICAgYXNzZXJ0KGlzRmluYWxpemVkLCAiVG9rZW5OYW1lKCRrZXkpIGhhcyBub3QgYmVlbiBmaW5hbGl6ZWQuIik7CiAgICByZXR1cm4gX25hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZVRvKGNvdmFyaWFudCBfTmFtZXJOYW1lIG90aGVyKSB7CiAgICBvdGhlciA9IG90aGVyLl90YXJnZXQ7CiAgICBpZiAob3RoZXIuX2tpbmQgIT0gX2tpbmQpIHJldHVybiBvdGhlci5fa2luZCAtIF9raW5kOwogICAgVG9rZW5OYW1lIG90aGVyVG9rZW4gPSBvdGhlcjsKICAgIHJldHVybiBrZXkuY29tcGFyZVRvKG90aGVyVG9rZW4ua2V5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbWFya1NlZW4oanNBc3QuVG9rZW5Db3VudGVyIGNvdW50ZXIpID0+IF9yYysrOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMgX05hbWVSZWZlcmVuY2UpIG90aGVyID0gb3RoZXIuX3RhcmdldDsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gc3VwZXIuaGFzaENvZGU7CgogIHZvaWQgZmluYWxpemUoKSB7CiAgICBhc3NlcnQoCiAgICAgICAgIWlzRmluYWxpemVkLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlRva2VuTmFtZSgka2V5KT0kX25hbWUgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQuIikpOwogICAgX25hbWUgPSBfc2NvcGUuZ2V0TmV4dE5hbWUoKTsKICB9Cn0KCmNsYXNzIF9OYW1lUmVmZXJlbmNlIGV4dGVuZHMgX05hbWVyTmFtZSBpbXBsZW1lbnRzIGpzQXN0LkFzdENvbnRhaW5lciB7CiAgQG92ZXJyaWRlCiAgX05hbWVyTmFtZSBfdGFyZ2V0OwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IF9raW5kID0+IF90YXJnZXQuX2tpbmQ7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBrZXkgPT4gX3RhcmdldC5rZXk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPGpzQXN0Lk5vZGU+IGdldCBjb250YWluZWROb2RlcyA9PiBbX3RhcmdldF07CgogIF9OYW1lUmVmZXJlbmNlKHRoaXMuX3RhcmdldCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiBfdGFyZ2V0Lm5hbWU7CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlVG8oanNBc3QuTmFtZSBvdGhlcikgewogICAgX05hbWVyTmFtZSBvdGhlck5hbWVyTmFtZTsKICAgIGlmIChvdGhlciBpcyBNb2R1bGFyTmFtZSkgewogICAgICBvdGhlck5hbWVyTmFtZSA9IG90aGVyLnZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgb3RoZXJOYW1lck5hbWUgPSBvdGhlcjsKICAgIH0KICAgIHJldHVybiBfdGFyZ2V0LmNvbXBhcmVUbyhvdGhlck5hbWVyTmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBfdGFyZ2V0ID09IG90aGVyOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF90YXJnZXQuaGFzaENvZGU7Cn0KgR0ATk48ARoBLxEiAQwWFhsGRQQCAU4BLAwVDDcBHwEMGgEMFzgtPgQBDCUBDCQfICQNHgYtTDAEAgFQGxkMEQEMPQEpAQwuAQwrAQwcOC0vOQQBDDwBDCQfICQNHgYtTDI5FzcZNQgGEwQCASkMMQFIAgEpDDEBSAIBKAwwAUcBDCACAUYhDDMWHAEMNQEdAUwBDBQfRwYYBAEMRgEMHDgtLjwuNgYRBAEMFR8bKE8IBhwEAQwkHyAkDR4GLUwxODoGFENBBhMEAgFODDAQDBQbDwEkASkBDBREEgQBDC4bOiIqBAEMNgEMHDgtEgQBDCYBFAwWKEQiBAIBSAwWAQwiDCEBDDgBIAEMIwEMJB8gJA0eBi4EAQwvAQwoAgEwcGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9uYW1lcl9uYW1lcy5kYXJ0MnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL25hdGl2ZS9iZWhhdmlvci5kYXJ0wACAEC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzLCBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JyBzaG93IE5hdGl2ZUJhc2ljRGF0YTsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2lkZV9lZmZlY3RzLmRhcnQnIHNob3cgU2lkZUVmZmVjdHM7CmltcG9ydCAnanMuZGFydCc7Cgp0eXBlZGVmIGR5bmFtaWMgLypEYXJ0VHlwZXxTcGVjaWFsVHlwZSovIFR5cGVMb29rdXAoU3RyaW5nIHR5cGVTdHJpbmcsCiAgICB7Ym9vbCByZXF1aXJlZH0pOwoKLy8vIFRoaXMgY2xhc3MgaXMgYSB0ZW1wb3Jhcnkgd29yay1hcm91bmQgdW50aWwgd2UgZ2V0IGEgbW9yZSBwb3dlcmZ1bCBEYXJ0VHlwZS4KY2xhc3MgU3BlY2lhbFR5cGUgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGNvbnN0IFNwZWNpYWxUeXBlLl8odGhpcy5uYW1lKTsKCiAgLy8vIFRoZSB0eXBlIE9iamVjdCwgYnV0IG5vIHN1YnR5cGVzOgogIHN0YXRpYyBjb25zdCBKc09iamVjdCA9IGNvbnN0IFNwZWNpYWxUeXBlLl8oJz1PYmplY3QnKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBuYW1lLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwoKICBzdGF0aWMgU3BlY2lhbFR5cGUgZnJvbU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChuYW1lID09ICc9T2JqZWN0JykgewogICAgICByZXR1cm4gSnNPYmplY3Q7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5rbm93biBTcGVjaWFsVHlwZSAnJG5hbWUnLiIpOwogICAgfQogIH0KfQoKLy8vIERlc2NyaXB0aW9uIG9mIHRoZSBleGNlcHRpb24gYmVoYXZpb3VyIG9mIG5hdGl2ZSBjb2RlLgpjbGFzcyBOYXRpdmVUaHJvd0JlaGF2aW9yIHsKICBzdGF0aWMgY29uc3QgTmF0aXZlVGhyb3dCZWhhdmlvciBORVZFUiA9IE5hdGl2ZVRocm93QmVoYXZpb3IuXygwKTsKICBzdGF0aWMgY29uc3QgTmF0aXZlVGhyb3dCZWhhdmlvciBNQVkgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLl8oMSk7CgogIC8vLyBUaHJvd3Mgb25seSBpZiBmaXJzdCBhcmd1bWVudCBpcyBudWxsLgogIHN0YXRpYyBjb25zdCBOYXRpdmVUaHJvd0JlaGF2aW9yIE5VTExfTlNNID0gTmF0aXZlVGhyb3dCZWhhdmlvci5fKDIpOwoKICAvLy8gVGhyb3dzIGlmIGZpcnN0IGFyZ3VtZW50IGlzIG51bGwsIHRoZW4gbWF5IHRocm93LgogIHN0YXRpYyBjb25zdCBOYXRpdmVUaHJvd0JlaGF2aW9yIE5VTExfTlNNX1RIRU5fTUFZID0gTmF0aXZlVGhyb3dCZWhhdmlvci5fKDMpOwoKICBmaW5hbCBpbnQgX2JpdHM7CiAgY29uc3QgTmF0aXZlVGhyb3dCZWhhdmlvci5fKHRoaXMuX2JpdHMpOwoKICBib29sIGdldCBjYW5UaHJvdyA9PiB0aGlzICE9IE5FVkVSOwoKICAvLy8gRG9lcyB0aGlzIGJlaGF2aW9yIGFsd2F5cyB0aHJvdyBhIG5vU3VjaE1ldGhvZCBjaGVjayBvbiBhIG51bGwgZmlyc3QKICAvLy8gYXJndW1lbnQgYmVmb3JlIGFueSBzaWRlIGVmZmVjdCBvciBvdGhlciBleGNlcHRpb24/CiAgYm9vbCBnZXQgaXNOdWxsTlNNR3VhcmQgPT4gdGhpcyA9PSBOVUxMX05TTSB8fCB0aGlzID09IE5VTExfTlNNX1RIRU5fTUFZOwoKICAvLy8gRG9lcyB0aGlzIGJlaGF2aW9yIGFsd2F5cyBhY3QgYXMgYSBudWxsIG5vU3VjaE1ldGhvZCBjaGVjaywgYW5kIGhhcyBubwogIC8vLyBvdGhlciB0aHJvd2luZyBiZWhhdmlvcj8KICBib29sIGdldCBpc09ubHlOdWxsTlNNR3VhcmQgPT4gdGhpcyA9PSBOVUxMX05TTTsKCiAgLy8vIFJldHVybnMgdGhlIGJlaGF2aW9yIGlmIHdlIGFzc3VtZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IG51bGwuCiAgTmF0aXZlVGhyb3dCZWhhdmlvciBnZXQgb25Ob25OdWxsIHsKICAgIGlmICh0aGlzID09IE5VTExfTlNNKSByZXR1cm4gTkVWRVI7CiAgICBpZiAodGhpcyA9PSBOVUxMX05TTV9USEVOX01BWSkgcmV0dXJuIE1BWTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKHRoaXMgPT0gTkVWRVIpIHJldHVybiAnbmV2ZXInOwogICAgaWYgKHRoaXMgPT0gTUFZKSByZXR1cm4gJ21heSc7CiAgICBpZiAodGhpcyA9PSBOVUxMX05TTSkgcmV0dXJuICdudWxsKDEpJzsKICAgIGlmICh0aGlzID09IE5VTExfTlNNX1RIRU5fTUFZKSByZXR1cm4gJ251bGwoMSkrbWF5JzsKICAgIHJldHVybiAnTmF0aXZlVGhyb3dCZWhhdmlvcigkX2JpdHMpJzsKICB9CgogIC8vLyBDYW5vbmljYWwgbGlzdCBvZiBtYXJrZXIgdmFsdWVzLgogIC8vLwogIC8vLyBBZGRlZCB0byBtYWtlIFtOYXRpdmVUaHJvd0JlaGF2aW9yXSBlbnVtLWxpa2UuCiAgc3RhdGljIGNvbnN0IExpc3Q8TmF0aXZlVGhyb3dCZWhhdmlvcj4gdmFsdWVzID0gWwogICAgTkVWRVIsCiAgICBNQVksCiAgICBOVUxMX05TTSwKICAgIE5VTExfTlNNX1RIRU5fTUFZLAogIF07CgogIC8vLyBJbmRleCB0byB0aGlzIG1hcmtlciB3aXRoaW4gW3ZhbHVlc10uCiAgLy8vCiAgLy8vIEFkZGVkIHRvIG1ha2UgW05hdGl2ZVRocm93QmVoYXZpb3JdIGVudW0tbGlrZS4KICBpbnQgZ2V0IGluZGV4ID0+IHZhbHVlcy5pbmRleE9mKHRoaXMpOwoKICAvLy8gRGVzZXJpYWxpemVyIGhlbHBlci4KICBzdGF0aWMgTmF0aXZlVGhyb3dCZWhhdmlvciBfYml0c1RvVmFsdWUoaW50IGJpdHMpIHsKICAgIHN3aXRjaCAoYml0cykgewogICAgICBjYXNlIDA6CiAgICAgICAgcmV0dXJuIE5FVkVSOwogICAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuIE1BWTsKICAgICAgY2FzZSAyOgogICAgICAgIHJldHVybiBOVUxMX05TTTsKICAgICAgY2FzZSAzOgogICAgICAgIHJldHVybiBOVUxMX05TTV9USEVOX01BWTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8vLyBTZXF1ZW5jZSBvcGVyYXRvci4KICBOYXRpdmVUaHJvd0JlaGF2aW9yIHRoZW4oTmF0aXZlVGhyb3dCZWhhdmlvciBzZWNvbmQpIHsKICAgIGlmICh0aGlzID09IE5FVkVSKSByZXR1cm4gc2Vjb25kOwogICAgaWYgKHRoaXMgPT0gTUFZKSByZXR1cm4gTUFZOwogICAgaWYgKHRoaXMgPT0gTlVMTF9OU01fVEhFTl9NQVkpIHJldHVybiBOVUxMX05TTV9USEVOX01BWTsKICAgIGFzc2VydCh0aGlzID09IE5VTExfTlNNKTsKICAgIGlmIChzZWNvbmQgPT0gTkVWRVIpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIE5VTExfTlNNX1RIRU5fTUFZOwogIH0KCiAgLy8vIENob2ljZSBvcGVyYXRvci4KICBOYXRpdmVUaHJvd0JlaGF2aW9yIG9yKE5hdGl2ZVRocm93QmVoYXZpb3Igb3RoZXIpIHsKICAgIGlmICh0aGlzID09IG90aGVyKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBNQVk7CiAgfQp9CgovLy8gQSBzdW1tYXJ5IG9mIHRoZSBiZWhhdmlvciBvZiBhIG5hdGl2ZSBlbGVtZW50LgovLy8KLy8vIE5hdGl2ZSBjb2RlIGNhbiByZXR1cm4gdmFsdWVzIG9mIG9uZSB0eXBlIGFuZCBjYXVzZSBuYXRpdmUgc3VidHlwZXMgb2YKLy8vIGFub3RoZXIgdHlwZSB0byBiZSBpbnN0YW50aWF0ZWQuICBCeSBkZWZhdWx0LCB3ZSBjb21wdXRlIGJvdGggZnJvbSB0aGUKLy8vIGRlY2xhcmVkIHR5cGUuCi8vLwovLy8gQSBmaWVsZCBtaWdodCB5aWVsZCBhbnkgbmF0aXZlIHR5cGUgdGhhdCAnaXMnIHRoZSBmaWVsZCB0eXBlLgovLy8KLy8vIEEgbWV0aG9kIG1pZ2h0IGNyZWF0ZSBhbmQgcmV0dXJuIGluc3RhbmNlcyBvZiBuYXRpdmUgc3ViY2xhc3NlcyBvZiBpdHMKLy8vIGRlY2xhcmVkIHJldHVybiB0eXBlLCBhbmQgYSBjYWxsYmFjayBhcmd1bWVudCBtYXkgYmUgY2FsbGVkIHdpdGggaW5zdGFuY2VzCi8vLyBvZiB0aGUgY2FsbGJhY2sgcGFyYW1ldGVyIHR5cGUgKGUuZy4gRXZlbnQpLgovLy8KLy8vIElmIHRoZXJlIGlzIG9uZSBvciBtb3JlIGBAQ3JlYXRlc2AgYW5ub3RhdGlvbnMsIHRoZSB1bmlvbiBvZiB0aGUgbmFtZWQgdHlwZXMKLy8vIHJlcGxhY2VzIHRoZSBpbmZlcnJlZCBpbnN0YW50aWF0ZWQgdHlwZSwgYW5kIHRoZSByZXR1cm4gdHlwZSBpcyBpZ25vcmVkIGZvcgovLy8gdGhlIHB1cnBvc2Ugb2YgaW5mZXJyaW5nIGluc3RhbnRpYXRlZCB0eXBlcy4KLy8vCi8vLyAgICAgQENyZWF0ZXMoJ0lEQkN1cnNvcicpICAgIC8vIENyZWF0ZWQgYXN5bmNocm9ub3VzbHkuCi8vLyAgICAgQENyZWF0ZXMoJ0lEQlJlcXVlc3QnKSAgIC8vIENyZWF0ZWQgc3luY2hyb25vdXNseSAoZm9yIHJldHVybiB2YWx1ZSkuCi8vLyAgICAgSURCUmVxdWVzdCBvcGVuQ3Vyc29yKCk7Ci8vLwovLy8gSWYgdGhlcmUgaXMgb25lIG9yIG1vcmUgYEBSZXR1cm5zYCBhbm5vdGF0aW9ucywgdGhlIHVuaW9uIG9mIHRoZSBuYW1lZCB0eXBlcwovLy8gcmVwbGFjZXMgdGhlIGRlY2xhcmVkIHJldHVybiB0eXBlLgovLy8KLy8vICAgICBAUmV0dXJucygnSURCUmVxdWVzdCcpCi8vLyAgICAgSURCUmVxdWVzdCBvcGVuQ3Vyc29yKCk7Ci8vLwovLy8gVHlwZXMgaW4gYW5ub3RhdGlvbnMgYXJlIG5vbi1udWxsYWJsZSwgc28gaW5jbHVkZSBgQFJldHVybnMoJ051bGwnKWAgaWYKLy8vIGBudWxsYCBtYXkgYmUgcmV0dXJuZWQuCmNsYXNzIE5hdGl2ZUJlaGF2aW9yIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW05hdGl2ZUJlaGF2aW9yXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ25hdGl2ZS1iZWhhdmlvcic7CgogIC8vLyBbRGFydFR5cGVdcyBvciBbU3BlY2lhbFR5cGVdcyByZXR1cm5lZCBvciB5aWVsZGVkIGJ5IHRoZSBuYXRpdmUKICAvLy8gZWxlbWVudC4KICBmaW5hbCBMaXN0IHR5cGVzUmV0dXJuZWQgPSBbXTsKCiAgLy8vIFtEYXJ0VHlwZV1zIG9yIFtTcGVjaWFsVHlwZV1zIGluc3RhbnRpYXRlZCBieSB0aGUgbmF0aXZlCiAgLy8vIGVsZW1lbnQuCiAgZmluYWwgTGlzdCB0eXBlc0luc3RhbnRpYXRlZCA9IFtdOwoKICBTdHJpbmcgY29kZVRlbXBsYXRlVGV4dDsKICAvLyBJZiB0aGlzIGJlaGF2aW9yIGlzIGZvciBhIEpTIGV4cHJlc3Npb24sIFtjb2RlVGVtcGxhdGVdIGNvbnRhaW5zIHRoZQogIC8vIHBhcnNlZCB0cmVlLgogIGpzLlRlbXBsYXRlIGNvZGVUZW1wbGF0ZTsKCiAgZmluYWwgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHM7CgogIE5hdGl2ZVRocm93QmVoYXZpb3IgdGhyb3dCZWhhdmlvciA9IE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZOwoKICBib29sIGlzQWxsb2NhdGlvbiA9IGZhbHNlOwogIGJvb2wgdXNlR3ZuID0gZmFsc2U7CgogIC8vIFRPRE8oc3JhKTogTWFrZSBOYXRpdmVCZWhhdmlvciBpbW11dGFibGUgc28gUFVSRSBhbmQgUFVSRV9BTExPQ0FUSU9OIGNhbiBiZQogIC8vIGZpbmFsIGNvbnN0YW50LWxpa2Ugb2JqZWN0cy4KICBzdGF0aWMgTmF0aXZlQmVoYXZpb3IgZ2V0IFBVUkUgPT4gTmF0aXZlQmVoYXZpb3IuX21ha2VQdXJlKCk7CiAgc3RhdGljIE5hdGl2ZUJlaGF2aW9yIGdldCBQVVJFX0FMTE9DQVRJT04gPT4KICAgICAgTmF0aXZlQmVoYXZpb3IuX21ha2VQdXJlKGlzQWxsb2NhdGlvbjogdHJ1ZSk7CiAgc3RhdGljIE5hdGl2ZUJlaGF2aW9yIGdldCBDSEFOR0VTX09USEVSID0+IE5hdGl2ZUJlaGF2aW9yLl9tYWtlQ2hhbmdlc090aGVyKCk7CiAgc3RhdGljIE5hdGl2ZUJlaGF2aW9yIGdldCBERVBFTkRTX09USEVSID0+IE5hdGl2ZUJlaGF2aW9yLl9tYWtlRGVwZW5kc090aGVyKCk7CgogIE5hdGl2ZUJlaGF2aW9yKCkgOiBzaWRlRWZmZWN0cyA9IG5ldyBTaWRlRWZmZWN0cy5lbXB0eSgpOwoKICBOYXRpdmVCZWhhdmlvci5pbnRlcm5hbCh0aGlzLnNpZGVFZmZlY3RzKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtOYXRpdmVCZWhhdmlvcl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBOYXRpdmVCZWhhdmlvci5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwoKICAgIExpc3QgcmVhZFR5cGVzKCkgewogICAgICBMaXN0IHR5cGVzID0gW107CiAgICAgIHR5cGVzLmFkZEFsbChzb3VyY2UucmVhZERhcnRUeXBlcygpKTsKICAgICAgaW50IHNwZWNpYWxDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BlY2lhbENvdW50OyBpKyspIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgdHlwZXMuYWRkKFNwZWNpYWxUeXBlLmZyb21OYW1lKG5hbWUpKTsKICAgICAgfQogICAgICByZXR1cm4gdHlwZXM7CiAgICB9CgogICAgTGlzdCB0eXBlc1JldHVybmVkID0gcmVhZFR5cGVzKCk7CiAgICBMaXN0IHR5cGVzSW5zdGFudGlhdGVkID0gcmVhZFR5cGVzKCk7CiAgICBTdHJpbmcgY29kZVRlbXBsYXRlVGV4dCA9IHNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsKCk7CiAgICBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0cyA9IG5ldyBTaWRlRWZmZWN0cy5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIGludCB0aHJvd0JlaGF2aW9yID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGJvb2wgaXNBbGxvY2F0aW9uID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIHVzZUd2biA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwoKICAgIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yID0gbmV3IE5hdGl2ZUJlaGF2aW9yLmludGVybmFsKHNpZGVFZmZlY3RzKTsKICAgIGJlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkQWxsKHR5cGVzUmV0dXJuZWQpOwogICAgYmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQuYWRkQWxsKHR5cGVzSW5zdGFudGlhdGVkKTsKICAgIGlmIChjb2RlVGVtcGxhdGVUZXh0ICE9IG51bGwpIHsKICAgICAgYmVoYXZpb3IuY29kZVRlbXBsYXRlVGV4dCA9IGNvZGVUZW1wbGF0ZVRleHQ7CiAgICAgIGJlaGF2aW9yLmNvZGVUZW1wbGF0ZSA9IGpzLmpzLnBhcnNlRm9yZWlnbkpTKGNvZGVUZW1wbGF0ZVRleHQpOwogICAgfQogICAgYmVoYXZpb3IudGhyb3dCZWhhdmlvciA9IE5hdGl2ZVRocm93QmVoYXZpb3IuX2JpdHNUb1ZhbHVlKHRocm93QmVoYXZpb3IpOwogICAgYXNzZXJ0KGJlaGF2aW9yLnRocm93QmVoYXZpb3IuX2JpdHMgPT0gdGhyb3dCZWhhdmlvcik7CiAgICBiZWhhdmlvci5pc0FsbG9jYXRpb24gPSBpc0FsbG9jYXRpb247CiAgICBiZWhhdmlvci51c2VHdm4gPSB1c2VHdm47CiAgICByZXR1cm4gYmVoYXZpb3I7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtOYXRpdmVCZWhhdmlvcl0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKCiAgICB2b2lkIHdyaXRlVHlwZXMoTGlzdCB0eXBlcykgewogICAgICBMaXN0PERhcnRUeXBlPiBkYXJ0VHlwZXMgPSBbXTsKICAgICAgTGlzdDxTcGVjaWFsVHlwZT4gc3BlY2lhbFR5cGVzID0gW107CiAgICAgIGZvciAodmFyIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgICBpZiAodHlwZSBpcyBEYXJ0VHlwZSkgewogICAgICAgICAgZGFydFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3BlY2lhbFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2luay53cml0ZURhcnRUeXBlcyhkYXJ0VHlwZXMpOwogICAgICBzaW5rLndyaXRlSW50KHNwZWNpYWxUeXBlcy5sZW5ndGgpOwogICAgICBmb3IgKFNwZWNpYWxUeXBlIHR5cGUgaW4gc3BlY2lhbFR5cGVzKSB7CiAgICAgICAgc2luay53cml0ZVN0cmluZyh0eXBlLm5hbWUpOwogICAgICB9CiAgICB9CgogICAgd3JpdGVUeXBlcyh0eXBlc1JldHVybmVkKTsKICAgIHdyaXRlVHlwZXModHlwZXNJbnN0YW50aWF0ZWQpOwogICAgc2luay53cml0ZVN0cmluZ09yTnVsbChjb2RlVGVtcGxhdGVUZXh0KTsKICAgIHNpZGVFZmZlY3RzLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVJbnQodGhyb3dCZWhhdmlvci5fYml0cyk7CiAgICBzaW5rLndyaXRlQm9vbChpc0FsbG9jYXRpb24pOwogICAgc2luay53cml0ZUJvb2wodXNlR3ZuKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ05hdGl2ZUJlaGF2aW9yKCcKICAgICAgICAncmV0dXJuczogJHt0eXBlc1JldHVybmVkfScKICAgICAgICAnLCBjcmVhdGVzOiAke3R5cGVzSW5zdGFudGlhdGVkfScKICAgICAgICAnLCBzaWRlRWZmZWN0czogJHtzaWRlRWZmZWN0c30nCiAgICAgICAgJywgdGhyb3dzOiAke3Rocm93QmVoYXZpb3J9JwogICAgICAgICcke2lzQWxsb2NhdGlvbiA/ICIsIGlzQWxsb2NhdGlvbiIgOiAiIn0nCiAgICAgICAgJyR7dXNlR3ZuID8gIiwgdXNlR3ZuIiA6ICIifScKICAgICAgICAnKSc7CiAgfQoKICBzdGF0aWMgTmF0aXZlQmVoYXZpb3IgX21ha2VQdXJlKHtib29sIGlzQWxsb2NhdGlvbjogZmFsc2V9KSB7CiAgICBOYXRpdmVCZWhhdmlvciBiZWhhdmlvciA9IG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgYmVoYXZpb3Iuc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIGJlaGF2aW9yLnNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIGJlaGF2aW9yLnRocm93QmVoYXZpb3IgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSOwogICAgYmVoYXZpb3IuaXNBbGxvY2F0aW9uID0gaXNBbGxvY2F0aW9uOwogICAgcmV0dXJuIGJlaGF2aW9yOwogIH0KCiAgc3RhdGljIE5hdGl2ZUJlaGF2aW9yIF9tYWtlQ2hhbmdlc090aGVyKCkgewogICAgLy8gVE9ETygyNTU0NCk6IEhhdmUgYSBkaXN0aW5jdCBlZmZlY3QgaW5zdGVhZCBvZiB1c2luZyBzdGF0aWMgcHJvcGVydGllcyB0bwogICAgLy8gbW9kZWwgJ290aGVyJyBlZmZlY3RzLgogICAgcmV0dXJuIF9tYWtlUHVyZSgpLi5zaWRlRWZmZWN0cy5zZXRDaGFuZ2VzU3RhdGljUHJvcGVydHkoKTsKICB9CgogIHN0YXRpYyBOYXRpdmVCZWhhdmlvciBfbWFrZURlcGVuZHNPdGhlcigpIHsKICAgIC8vIFRPRE8oMjU1NDQpOiBIYXZlIGEgZGlzdGluY3QgZWZmZWN0IGluc3RlYWQgb2YgdXNpbmcgc3RhdGljIHByb3BlcnRpZXMgdG8KICAgIC8vIG1vZGVsICdvdGhlcicgZWZmZWN0cy4KICAgIHJldHVybiBfbWFrZVB1cmUoKS4uc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpOwogIH0KCiAgLy8vIFByb2Nlc3NlcyB0aGUgdHlwZSBzcGVjaWZpY2F0aW9uIHN0cmluZyBvZiBhIGNhbGwgdG8gSlMgYW5kIHN0b3JlcyB0aGUKICAvLy8gcmVzdWx0IGluIHRoZSBbdHlwZXNSZXR1cm5lZF0gYW5kIFt0eXBlc0luc3RhbnRpYXRlZF0uIEl0IGZ1cnRoZXJtb3JlCiAgLy8vIGNvbXB1dGVzIHRoZSBzaWRlIGVmZmVjdHMsIGFuZCwgaWYgZ2l2ZW4sIGludm9rZXMgW3NldFNpZGVFZmZlY3RzXSB3aXRoCiAgLy8vIHRoZSBjb21wdXRlZCBlZmZlY3RzLiBJZiBubyBzaWRlIGVmZmVjdHMgYXJlIGVuY29kZWQgaW4gdGhlIFtzcGVjU3RyaW5nXQogIC8vLyB0aGUgW3NldFNpZGVFZmZlY3RzXSBtZXRob2QgaXMgbm90IGludm9rZWQuCiAgLy8vCiAgLy8vIFR3byBmb3JtcyBvZiB0aGUgc3RyaW5nIGlzIHN1cHBvcnRlZDoKICAvLy8KICAvLy8gMSkgQSBzaW5nbGUgdHlwZSBzdHJpbmcgb2YgdGhlIGZvcm0gJ3ZvaWQnLCAnJywgJ3Zhcicgb3IgJ1QxfC4uLnxUbicgd2hpY2gKICAvLy8gICAgZGVmaW5lcyB0aGUgdHlwZXMgcmV0dXJuZWQsIGFuZCwgZm9yIHRoZSBsYXN0IGZvcm0sIHRoZSB0eXBlcyBhbHNvCiAgLy8vICAgIGNyZWF0ZWQgYnkgdGhlIGNhbGwgdG8gSlMuICAndmFyJyAoYW5kICcnKSBhcmUgbGlrZSAnZHluYW1pYycgb3IKICAvLy8gICAgJ09iamVjdCcgZXhjZXB0IHRoYXQgJ2R5bmFtaWMnIHdvdWxkIGluZGljYXRlIHRoYXQgb2JqZWN0cyBvZiBhbnkgdHlwZQogIC8vLyAgICBhcmUgY3JlYXRlZCwgd2hpY2ggZGVmZWF0cyB0cmVlLXNoYWtpbmcuICBUaGluayBvZiAndmFyJyAoYW5kICcnKSBhcwogIC8vLyAgICBtZWFuaW5nICdhbnkgcHJlLWV4aXN0aW5nIHR5cGUnLgogIC8vLwogIC8vLyAgICBUaGUgdHlwZXMgVGkgYXJlIG5vbi1udWxsYWJsZSwgc28gYWRkIGNsYXNzIGBOdWxsYCB0byBzcGVjaWZ5IGEKICAvLy8gICAgbnVsbGFibGUgdHlwZSwgZS5nIGAnU3RyaW5nfE51bGwnYC4KICAvLy8KICAvLy8gMikgQSBzZXF1ZW5jZSBvZiA8dGFnPjo8dmFsdWU+IHBhaXJzIG9mIHRoZSBmb2xsb3dpbmcga2luZHMKICAvLy8KICAvLy8gICAgICAgIDx0eXBlLXRhZz46PHR5cGUtc3RyaW5nPgogIC8vLyAgICAgICAgPGVmZmVjdC10YWc+OjxlZmZlY3Qtc3RyaW5nPgogIC8vLyAgICAgICAgdGhyb3dzOjx0aHJvd3Mtc3RyaW5nPgogIC8vLyAgICAgICAgZ3ZuOjxndm4tc3RyaW5nPgogIC8vLyAgICAgICAgbmV3OjxuZXctc3RyaW5nPgogIC8vLwogIC8vLyAgICBBIDx0eXBlLXRhZz4gaXMgZWl0aGVyICdyZXR1cm5zJyBvciAnY3JlYXRlcycgYW5kIDx0eXBlLXN0cmluZz4gaXMgYQogIC8vLyAgICB0eXBlIHN0cmluZyBsaWtlIGluIDEpLiBUaGUgdHlwZSBzdHJpbmcgbWFya2VkIGJ5ICdyZXR1cm5zJyBkZWZpbmVzIHRoZQogIC8vLyAgICB0eXBlcyByZXR1cm5lZCBhbmQgJ2NyZWF0ZXMnIGRlZmluZXMgdGhlIHR5cGVzIGNyZWF0ZWQgYnkgdGhlIGNhbGwgdG8KICAvLy8gICAgSlMuIElmICdjcmVhdGVzJyBpcyBtaXNzaW5nLCBpdCBkZWZhdWx0cyB0byAncmV0dXJucycuCiAgLy8vCiAgLy8vICAgIEFuIDxlZmZlY3QtdGFnPiBpcyBlaXRoZXIgJ2VmZmVjdHMnIG9yICdkZXBlbmRzJyBhbmQgPGVmZmVjdC1zdHJpbmc+IGlzCiAgLy8vICAgIGVpdGhlciAnYWxsJywgJ25vbmUnIG9yIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgJ25vLWluZGV4JywKICAvLy8gICAgJ25vLWluc3RhbmNlJywgJ25vLXN0YXRpYycuCiAgLy8vCiAgLy8vICAgIFRoZSBmbGFnICdhbGwnIGluZGljYXRlcyB0aGF0IHRoZSBjYWxsIGFmZmVjdHMvZGVwZW5kcyBvbiBldmVyeQogIC8vLyAgICBzaWRlLWVmZmVjdC4gVGhlIGZsYWcgJ25vbmUnIGluZGljYXRlcyB0aGF0IHRoZSBjYWxsIGRvZXMgbm90IGFmZmVjdAogIC8vLyAgICAocmVzcC4gZGVwZW5kcyBvbikgYW55dGhpbmcuCiAgLy8vCiAgLy8vICAgICduby1pbmRleCcgaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGwgZG9lcyAqbm90KiBkbyBhbnkgYXJyYXkgaW5kZXgtc3RvcmUKICAvLy8gICAgKGZvciAnZWZmZWN0cycpLCBvciBkZXBlbmRzIG9uIGFueSB2YWx1ZSBpbiBhbiBhcnJheSAoZm9yICdkZXBlbmRzJykuCiAgLy8vICAgIFRoZSBmbGFnICduby1pbnN0YW5jZScgaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGwgZG9lcyBub3QgbW9kaWZ5IChyZXNwLgogIC8vLyAgICBkZXBlbmRzIG9uKSBhbnkgaW5zdGFuY2UgdmFyaWFibGUuIFNpbWlsYXJseSBzdGF0aWMgdmFyaWFibGVzIGFyZQogIC8vLyAgICBpbmRpY2F0ZWQgd2l0aCAnbm8tc3RhdGljJy4gVGhlIGZsYWdzICdlZmZlY3RzJyBhbmQgJ2RlcGVuZHMnIG11c3QgYmUKICAvLy8gICAgdXNlZCBpbiB1bmlzb24gKGVpdGhlciBib3RoIGFyZSBwcmVzZW50IG9yIG5vbmUgaXMpLgogIC8vLwogIC8vLyAgICBUaGUgPHRocm93cy1zdHJpbmc+IHZhbHVlcyBhcmUgJ25ldmVyJywgJ21heScsICdudWxsKDEpJywgYW5kCiAgLy8vICAgICdudWxsKDEpK21heScuICBUaGUgZGVmYXVsdCBpZiB1bnNwZWNpZmllZCBpcyAnbWF5Jy4gJ251bGwoMSknIG1lYW5zCiAgLy8vICAgIHRoYXQgdGhlIHRlbXBsYXRlIGV4cHJlc3Npb24gdGhyb3dzIGlmIGFuZCBvbmx5IGlmIHRoZSBmaXJzdCB0ZW1wbGF0ZQogIC8vLyAgICBwYXJhbWV0ZXIgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLCBhbmQgJ251bGwoMSkrbWF5JyB0aHJvd3MgaWYgdGhlCiAgLy8vICAgIGZpcnN0IGFyZ3VtZW50IGlzIGBudWxsYCAvIGB1bmRlZmluZWRgLCBhbmQgdGhlbiBtYXkgdGhyb3cgZm9yIG90aGVyCiAgLy8vICAgIHJlYXNvbnMuCiAgLy8vCiAgLy8vICAgIDxndm4tc3RyaW5nPiB2YWx1ZXMgYXJlICd0cnVlJyBhbmQgJ2ZhbHNlJy4gVGhlIGRlZmF1bHQgaWYgdW5zcGVjaWZpZWQKICAvLy8gICAgaXMgJ2ZhbHNlJy4KICAvLy8KICAvLy8gICAgPG5ldy1zdHJpbmc+IHZhbHVlcyBhcmUgJ3RydWUnIGFuZCAnZmFsc2UnLiBUaGUgZGVmYXVsdCBpZiB1bnNwZWNpZmllZAogIC8vLyAgICBpcyAnZmFsc2UnLiBBICd0cnVlJyB2YWx1ZSBtZWFucyB0aGF0IGVhY2ggZXZhbHVhdGlvbiByZXR1cm5zIGEgZnJlc2gKICAvLy8gICAgKG5ldykgb2JqZWN0IHRoYXQgY2Fubm90IGJlIHVuYWxpYXNlZCB3aXRoIGV4aXN0aW5nIG9iamVjdHMuCiAgLy8vCiAgLy8vICAgIEVhY2ggdGFnIGtpbmQgKGluY2x1ZGluZyB0aGUgJ3R5cGUtdGFnJ3MpIGNhbiBvbmx5IG9jY3VyIG9uY2UgaW4gdGhlCiAgLy8vICAgIHNlcXVlbmNlLgogIC8vLwogIC8vLyBbc3BlY1N0cmluZ10gaXMgdGhlIHNwZWNpZmljYXRpb24gc3RyaW5nLCBbbG9va3VwVHlwZV0gcmVzb2x2ZXMgbmFtZWQKICAvLy8gdHlwZXMgaW50byB0eXBlIHZhbHVlcywgW3R5cGVzUmV0dXJuZWRdIGFuZCBbdHlwZXNJbnN0YW50aWF0ZWRdIGNvbGxlY3RzCiAgLy8vIHRoZSB0eXBlcyBkZWZpbmVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uIHN0cmluZywgYW5kIFtvYmplY3RUeXBlXSBhbmQKICAvLy8gW251bGxUeXBlXSBkZWZpbmUgdGhlIHR5cGVzIGZvciBgT2JqZWN0YCBhbmQgYE51bGxgLCByZXNwZWN0aXZlbHkuIFRoZQogIC8vLyBsYXR0ZXIgaXMgdXNlZCBmb3IgdGhlIHR5cGUgc3RyaW5ncyBvZiB0aGUgZm9ybSAnJyBhbmQgJ3ZhcicuCiAgLy8vIFt2YWxpZFRhZ3NdIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHdoaWNoIHRhZ3MgYXJlIGFjY2VwdGVkLgogIHN0YXRpYyB2b2lkIHByb2Nlc3NTcGVjU3RyaW5nKAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIFNwYW5uYWJsZSBzcGFubmFibGUsIFN0cmluZyBzcGVjU3RyaW5nLAogICAgICB7SXRlcmFibGU8U3RyaW5nPiB2YWxpZFRhZ3MsCiAgICAgIHZvaWQgc2V0U2lkZUVmZmVjdHMoU2lkZUVmZmVjdHMgbmV3RWZmZWN0cyksCiAgICAgIHZvaWQgc2V0VGhyb3dzKE5hdGl2ZVRocm93QmVoYXZpb3IgdGhyb3dLaW5kKSwKICAgICAgdm9pZCBzZXRJc0FsbG9jYXRpb24oYm9vbCBpc0FsbG9jYXRpb24pLAogICAgICB2b2lkIHNldFVzZUd2bihib29sIHVzZUd2biksCiAgICAgIFR5cGVMb29rdXAgbG9va3VwVHlwZSwKICAgICAgTGlzdCB0eXBlc1JldHVybmVkLAogICAgICBMaXN0IHR5cGVzSW5zdGFudGlhdGVkLAogICAgICBvYmplY3RUeXBlLAogICAgICBudWxsVHlwZX0pIHsKICAgIGJvb2wgc2VlbkVycm9yID0gZmFsc2U7CgogICAgdm9pZCByZXBvcnRFcnJvcihTdHJpbmcgbWVzc2FnZSkgewogICAgICBzZWVuRXJyb3IgPSB0cnVlOwogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBzcGFubmFibGUsIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsndGV4dCc6IG1lc3NhZ2V9KTsKICAgIH0KCiAgICBjb25zdCBMaXN0PFN0cmluZz4ga25vd25UYWdzID0gY29uc3QgWwogICAgICAnY3JlYXRlcycsCiAgICAgICdyZXR1cm5zJywKICAgICAgJ2RlcGVuZHMnLAogICAgICAnZWZmZWN0cycsCiAgICAgICd0aHJvd3MnLAogICAgICAnZ3ZuJywKICAgICAgJ25ldycKICAgIF07CgogICAgLy8vIFJlc29sdmUgYSB0eXBlIHN0cmluZyBvZiBvbmUgb2YgdGhlIHRocmVlIGZvcm1zOgogICAgLy8vICogICd2b2lkJyAtIGluIHdoaWNoIGNhc2UgW29uVm9pZF0gaXMgY2FsbGVkLAogICAgLy8vICogICcnIG9yICd2YXInIC0gaW4gd2hpY2ggY2FzZSBbb25WYXJdIGlzIGNhbGxlZCwKICAgIC8vLyAqICAnVDF8Li4ufFRuJyAtIGluIHdoaWNoIGNhc2UgW29uVHlwZV0gaXMgY2FsbGVkIGZvciBlYWNoIHJlc29sdmVkIFRpLgogICAgdm9pZCByZXNvbHZlVHlwZXNTdHJpbmcoU3RyaW5nIHR5cGVzU3RyaW5nLAogICAgICAgIHtvblZvaWQoKSwgb25WYXIoKSwgb25UeXBlKHR5cGUpfSkgewogICAgICAvLyBWYXJpb3VzIHRoaW5ncyB0aGF0IGFyZSBub3QgaW4gZmFjdCB0eXBlcy4KICAgICAgaWYgKHR5cGVzU3RyaW5nID09ICd2b2lkJykgewogICAgICAgIGlmIChvblZvaWQgIT0gbnVsbCkgewogICAgICAgICAgb25Wb2lkKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodHlwZXNTdHJpbmcgPT0gJycgfHwgdHlwZXNTdHJpbmcgPT0gJ3ZhcicpIHsKICAgICAgICBpZiAob25WYXIgIT0gbnVsbCkgewogICAgICAgICAgb25WYXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGZvciAoZmluYWwgdHlwZVN0cmluZyBpbiB0eXBlc1N0cmluZy5zcGxpdCgnfCcpKSB7CiAgICAgICAgb25UeXBlKF9wYXJzZVR5cGUodHlwZVN0cmluZy50cmltKCksIGxvb2t1cFR5cGUpKTsKICAgICAgfQogICAgfQoKICAgIGlmICghc3BlY1N0cmluZy5jb250YWlucygnOycpICYmICFzcGVjU3RyaW5nLmNvbnRhaW5zKCc6JykpIHsKICAgICAgLy8gRm9ybSAoMSksIHR5cGVzIG9yIHBzZXVkby10eXBlcyBsaWtlICd2b2lkJyBhbmQgJ3ZhcicuCiAgICAgIHJlc29sdmVUeXBlc1N0cmluZyhzcGVjU3RyaW5nLnRyaW0oKSwgb25WYXI6ICgpIHsKICAgICAgICB0eXBlc1JldHVybmVkLmFkZChvYmplY3RUeXBlKTsKICAgICAgICB0eXBlc1JldHVybmVkLmFkZChudWxsVHlwZSk7CiAgICAgIH0sIG9uVHlwZTogKHR5cGUpIHsKICAgICAgICB0eXBlc0luc3RhbnRpYXRlZC5hZGQodHlwZSk7CiAgICAgICAgdHlwZXNSZXR1cm5lZC5hZGQodHlwZSk7CiAgICAgIH0pOwogICAgICByZXR1cm47CiAgICB9CgogICAgTGlzdDxTdHJpbmc+IHNwZWNzID0gc3BlY1N0cmluZy5zcGxpdCgnOycpLm1hcCgocykgPT4gcy50cmltKCkpLnRvTGlzdCgpOwogICAgaWYgKHNwZWNzLmxhc3QgPT0gIiIpIHNwZWNzLnJlbW92ZUxhc3QoKTsgLy8gQWxsb3cgc2VwYXJhdG9yIHRvIHRlcm1pbmF0ZS4KCiAgICBhc3NlcnQoCiAgICAgICAgdmFsaWRUYWdzID09IG51bGwgfHwgKHZhbGlkVGFncy50b1NldCgpLi5yZW1vdmVBbGwodmFsaWRUYWdzKSkuaXNFbXB0eSk7CiAgICBpZiAodmFsaWRUYWdzID09IG51bGwpIHZhbGlkVGFncyA9IGtub3duVGFnczsKCiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHZhbHVlcyA9IDxTdHJpbmcsIFN0cmluZz57fTsKCiAgICBmb3IgKFN0cmluZyBzcGVjIGluIHNwZWNzKSB7CiAgICAgIExpc3Q8U3RyaW5nPiB0YWdBbmRWYWx1ZSA9IHNwZWMuc3BsaXQoJzonKTsKICAgICAgaWYgKHRhZ0FuZFZhbHVlLmxlbmd0aCAhPSAyKSB7CiAgICAgICAgcmVwb3J0RXJyb3IoIkludmFsaWQgPHRhZz46PHZhbHVlPiBwYWlyICckc3BlYycuIik7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgU3RyaW5nIHRhZyA9IHRhZ0FuZFZhbHVlWzBdLnRyaW0oKTsKICAgICAgU3RyaW5nIHZhbHVlID0gdGFnQW5kVmFsdWVbMV0udHJpbSgpOwoKICAgICAgaWYgKHZhbGlkVGFncy5jb250YWlucyh0YWcpKSB7CiAgICAgICAgaWYgKHZhbHVlc1t0YWddID09IG51bGwpIHsKICAgICAgICAgIHZhbHVlc1t0YWddID0gdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydEVycm9yKCJEdXBsaWNhdGUgdGFnICckdGFnJy4iKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGtub3duVGFncy5jb250YWlucyh0YWcpKSB7CiAgICAgICAgICByZXBvcnRFcnJvcigiVGFnICckdGFnJyBpcyBub3QgdmFsaWQgaGVyZS4iKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwb3J0RXJyb3IoIlVua25vd24gdGFnICckdGFnJy4iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBFbnVtLWxpa2UgdGFncyBhcmUgbG9va2VkIHVwIGluIGEgbWFwLiBUcnVlIHNpZ25hdHVyZSBpczoKICAgIC8vCiAgICAvLyAgVCB0YWdWYWx1ZUxvb2t1cDxUPihTdHJpbmcgdGFnLCBNYXA8U3RyaW5nLCBUPiBtYXApOwogICAgLy8KICAgIGR5bmFtaWMgdGFnVmFsdWVMb29rdXAoU3RyaW5nIHRhZywgTWFwPFN0cmluZywgZHluYW1pYz4gbWFwKSB7CiAgICAgIFN0cmluZyB0YWdTdHJpbmcgPSB2YWx1ZXNbdGFnXTsKICAgICAgaWYgKHRhZ1N0cmluZyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHZhbHVlID0gbWFwW3RhZ1N0cmluZ107CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgcmVwb3J0RXJyb3IoIlVua25vd24gJyR0YWcnIHNwZWNpZmljYXRpb246ICckdGFnU3RyaW5nJy4iKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgU3RyaW5nIHJldHVybnMgPSB2YWx1ZXNbJ3JldHVybnMnXTsKICAgIGlmIChyZXR1cm5zICE9IG51bGwpIHsKICAgICAgcmVzb2x2ZVR5cGVzU3RyaW5nKHJldHVybnMsIG9uVmFyOiAoKSB7CiAgICAgICAgdHlwZXNSZXR1cm5lZC5hZGQob2JqZWN0VHlwZSk7CiAgICAgICAgdHlwZXNSZXR1cm5lZC5hZGQobnVsbFR5cGUpOwogICAgICB9LCBvblR5cGU6ICh0eXBlKSB7CiAgICAgICAgdHlwZXNSZXR1cm5lZC5hZGQodHlwZSk7CiAgICAgIH0pOwogICAgfQoKICAgIFN0cmluZyBjcmVhdGVzID0gdmFsdWVzWydjcmVhdGVzJ107CiAgICBpZiAoY3JlYXRlcyAhPSBudWxsKSB7CiAgICAgIHJlc29sdmVUeXBlc1N0cmluZyhjcmVhdGVzLCBvblZvaWQ6ICgpIHsKICAgICAgICByZXBvcnRFcnJvcigiSW52YWxpZCB0eXBlIHN0cmluZyAnY3JlYXRlczokY3JlYXRlcyciKTsKICAgICAgfSwgb25UeXBlOiAodHlwZSkgewogICAgICAgIHR5cGVzSW5zdGFudGlhdGVkLmFkZCh0eXBlKTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKHJldHVybnMgIT0gbnVsbCkgewogICAgICByZXNvbHZlVHlwZXNTdHJpbmcocmV0dXJucywgb25UeXBlOiAodHlwZSkgewogICAgICAgIHR5cGVzSW5zdGFudGlhdGVkLmFkZCh0eXBlKTsKICAgICAgfSk7CiAgICB9CgogICAgY29uc3QgdGhyb3dzT3B0aW9uID0gPFN0cmluZywgTmF0aXZlVGhyb3dCZWhhdmlvcj57CiAgICAgICduZXZlcic6IE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVIsCiAgICAgICdtYXknOiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWSwKICAgICAgJ251bGwoMSknOiBOYXRpdmVUaHJvd0JlaGF2aW9yLk5VTExfTlNNLAogICAgICAnbnVsbCgxKSttYXknOiBOYXRpdmVUaHJvd0JlaGF2aW9yLk5VTExfTlNNX1RIRU5fTUFZLAogICAgfTsKCiAgICBjb25zdCBib29sT3B0aW9ucyA9IDxTdHJpbmcsIGJvb2w+eyd0cnVlJzogdHJ1ZSwgJ2ZhbHNlJzogZmFsc2V9OwoKICAgIFNpZGVFZmZlY3RzIHNpZGVFZmZlY3RzID0KICAgICAgICBwcm9jZXNzRWZmZWN0cyhyZXBvcnRFcnJvciwgdmFsdWVzWydlZmZlY3RzJ10sIHZhbHVlc1snZGVwZW5kcyddKTsKICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgdGhyb3dzS2luZCA9IHRhZ1ZhbHVlTG9va3VwKCd0aHJvd3MnLCB0aHJvd3NPcHRpb24pOwogICAgYm9vbCBpc0FsbG9jYXRpb24gPSB0YWdWYWx1ZUxvb2t1cCgnbmV3JywgYm9vbE9wdGlvbnMpOwogICAgYm9vbCB1c2VHdm4gPSB0YWdWYWx1ZUxvb2t1cCgnZ3ZuJywgYm9vbE9wdGlvbnMpOwoKICAgIGlmIChpc0FsbG9jYXRpb24gPT0gdHJ1ZSAmJiB1c2VHdm4gPT0gdHJ1ZSkgewogICAgICByZXBvcnRFcnJvcigiJ25ldycgYW5kICdndm4nIGFyZSBpbmNvbXBhdGlibGUiKTsKICAgIH0KCiAgICBpZiAoc2VlbkVycm9yKSByZXR1cm47IC8vIEF2b2lkIGNhbGxiYWNrcy4KCiAgICAvLyBUT0RPKHNyYSk6IFNpbXBsaWZ5IFt0aHJvd0JlaGF2aW9yXSB1c2luZyBbc2lkZUVmZmVjdHNdLgoKICAgIGlmIChzaWRlRWZmZWN0cyAhPSBudWxsKSBzZXRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cyk7CiAgICBpZiAodGhyb3dzS2luZCAhPSBudWxsKSBzZXRUaHJvd3ModGhyb3dzS2luZCk7CiAgICBpZiAoaXNBbGxvY2F0aW9uICE9IG51bGwpIHNldElzQWxsb2NhdGlvbihpc0FsbG9jYXRpb24pOwogICAgaWYgKHVzZUd2biAhPSBudWxsKSBzZXRVc2VHdm4odXNlR3ZuKTsKICB9CgogIHN0YXRpYyBTaWRlRWZmZWN0cyBwcm9jZXNzRWZmZWN0cygKICAgICAgdm9pZCByZXBvcnRFcnJvcihTdHJpbmcgbWVzc2FnZSksIFN0cmluZyBlZmZlY3RzLCBTdHJpbmcgZGVwZW5kcykgewogICAgaWYgKGVmZmVjdHMgPT0gbnVsbCAmJiBkZXBlbmRzID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIGlmIChlZmZlY3RzID09IG51bGwgfHwgZGVwZW5kcyA9PSBudWxsKSB7CiAgICAgIHJlcG9ydEVycm9yKCInZWZmZWN0cycgYW5kICdkZXBlbmRzJyBtdXN0IG9jY3VyIHRvZ2V0aGVyLiIpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0cyA9IG5ldyBTaWRlRWZmZWN0cygpOwogICAgaWYgKGVmZmVjdHMgPT0gIm5vbmUiKSB7CiAgICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIH0gZWxzZSBpZiAoZWZmZWN0cyA9PSAiYWxsIikgewogICAgICAvLyBEb24ndCBkbyBhbnl0aGluZy4KICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8U3RyaW5nPiBzcGxpdEVmZmVjdHMgPSBlZmZlY3RzLnNwbGl0KCIsIik7CiAgICAgIGlmIChzcGxpdEVmZmVjdHMuaXNFbXB0eSkgewogICAgICAgIHJlcG9ydEVycm9yKCJNaXNzaW5nIHNpZGUtZWZmZWN0IGZsYWcuIik7CiAgICAgIH0KICAgICAgZm9yIChTdHJpbmcgZWZmZWN0IGluIHNwbGl0RWZmZWN0cykgewogICAgICAgIHN3aXRjaCAoZWZmZWN0KSB7CiAgICAgICAgICBjYXNlICJuby1pbmRleCI6CiAgICAgICAgICAgIHNpZGVFZmZlY3RzLmNsZWFyQ2hhbmdlc0luZGV4KCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAibm8taW5zdGFuY2UiOgogICAgICAgICAgICBzaWRlRWZmZWN0cy5jbGVhckNoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAibm8tc3RhdGljIjoKICAgICAgICAgICAgc2lkZUVmZmVjdHMuY2xlYXJDaGFuZ2VzU3RhdGljUHJvcGVydHkoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXBvcnRFcnJvcigiVW5yZWNvZ25pemVkIHNpZGUtZWZmZWN0IGZsYWc6ICckZWZmZWN0Jy4iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoZGVwZW5kcyA9PSAibm9uZSIpIHsKICAgICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIH0gZWxzZSBpZiAoZGVwZW5kcyA9PSAiYWxsIikgewogICAgICAvLyBEb24ndCBkbyBhbnl0aGluZy4KICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8U3RyaW5nPiBzcGxpdERlcGVuZGVuY2llcyA9IGRlcGVuZHMuc3BsaXQoIiwiKTsKICAgICAgaWYgKHNwbGl0RGVwZW5kZW5jaWVzLmlzRW1wdHkpIHsKICAgICAgICByZXBvcnRFcnJvcigiTWlzc2luZyBzaWRlLWVmZmVjdCBkZXBlbmRlbmN5IGZsYWcuIik7CiAgICAgIH0KICAgICAgZm9yIChTdHJpbmcgZGVwZW5kZW5jeSBpbiBzcGxpdERlcGVuZGVuY2llcykgewogICAgICAgIHN3aXRjaCAoZGVwZW5kZW5jeSkgewogICAgICAgICAgY2FzZSAibm8taW5kZXgiOgogICAgICAgICAgICBzaWRlRWZmZWN0cy5jbGVhckRlcGVuZHNPbkluZGV4U3RvcmUoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJuby1pbnN0YW5jZSI6CiAgICAgICAgICAgIHNpZGVFZmZlY3RzLmNsZWFyRGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAibm8tc3RhdGljIjoKICAgICAgICAgICAgc2lkZUVmZmVjdHMuY2xlYXJEZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3JlKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlVucmVjb2duaXplZCBzaWRlLWVmZmVjdCBmbGFnOiAnJGRlcGVuZGVuY3knLiIpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBzaWRlRWZmZWN0czsKICB9CgogIC8vLyBDb21wdXRlIHRoZSBbTmF0aXZlQmVoYXZpb3JdIGZvciBhIGNhbGwgdG8gdGhlICdKUycgZnVuY3Rpb24gd2l0aCB0aGUKICAvLy8gZ2l2ZW4gW3NwZWNTdHJpbmddIGFuZCBbY29kZVN0cmluZ10gKGZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzKS4KICBzdGF0aWMgTmF0aXZlQmVoYXZpb3Igb2ZKc0NhbGwoCiAgICAgIFN0cmluZyBzcGVjU3RyaW5nLAogICAgICBTdHJpbmcgY29kZVN0cmluZywKICAgICAgVHlwZUxvb2t1cCBsb29rdXBUeXBlLAogICAgICBTcGFubmFibGUgc3Bhbm5hYmxlLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgb2YgYSBKUy1jYWxsIGlzIGEgc3RyaW5nIGVuY29kaW5nIHZhcmlvdXMgYXR0cmlidXRlcwogICAgLy8gb2YgdGhlIGNvZGUuCiAgICAvLwogICAgLy8gICdUeXBlMXxUeXBlMicuICBBIHVuaW9uIHR5cGUuCiAgICAvLyAgJz1PYmplY3QnLiAgICAgIEEgSmF2YVNjcmlwdCBPYmplY3QsIG5vIHN1YnR5cGUuCgogICAgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKCiAgICBiZWhhdmlvci5jb2RlVGVtcGxhdGVUZXh0ID0gY29kZVN0cmluZzsKICAgIGJlaGF2aW9yLmNvZGVUZW1wbGF0ZSA9IGpzLmpzLnBhcnNlRm9yZWlnbkpTKGJlaGF2aW9yLmNvZGVUZW1wbGF0ZVRleHQpOwoKICAgIGJvb2wgc2lkZUVmZmVjdHNBcmVFbmNvZGVkSW5TcGVjU3RyaW5nID0gZmFsc2U7CgogICAgdm9pZCBzZXRTaWRlRWZmZWN0cyhTaWRlRWZmZWN0cyBuZXdFZmZlY3RzKSB7CiAgICAgIHNpZGVFZmZlY3RzQXJlRW5jb2RlZEluU3BlY1N0cmluZyA9IHRydWU7CiAgICAgIGJlaGF2aW9yLnNpZGVFZmZlY3RzLnNldFRvKG5ld0VmZmVjdHMpOwogICAgfQoKICAgIGJvb2wgdGhyb3dCZWhhdmlvckZyb21TcGVjU3RyaW5nID0gZmFsc2U7CiAgICB2b2lkIHNldFRocm93cyhOYXRpdmVUaHJvd0JlaGF2aW9yIHRocm93QmVoYXZpb3IpIHsKICAgICAgdGhyb3dCZWhhdmlvckZyb21TcGVjU3RyaW5nID0gdHJ1ZTsKICAgICAgYmVoYXZpb3IudGhyb3dCZWhhdmlvciA9IHRocm93QmVoYXZpb3I7CiAgICB9CgogICAgdm9pZCBzZXRJc0FsbG9jYXRpb24oYm9vbCBpc0FsbG9jYXRpb24pIHsKICAgICAgYmVoYXZpb3IuaXNBbGxvY2F0aW9uID0gaXNBbGxvY2F0aW9uOwogICAgfQoKICAgIHZvaWQgc2V0VXNlR3ZuKGJvb2wgdXNlR3ZuKSB7CiAgICAgIGJlaGF2aW9yLnVzZUd2biA9IHVzZUd2bjsKICAgIH0KCiAgICBwcm9jZXNzU3BlY1N0cmluZyhyZXBvcnRlciwgc3Bhbm5hYmxlLCBzcGVjU3RyaW5nLAogICAgICAgIHNldFNpZGVFZmZlY3RzOiBzZXRTaWRlRWZmZWN0cywKICAgICAgICBzZXRUaHJvd3M6IHNldFRocm93cywKICAgICAgICBzZXRJc0FsbG9jYXRpb246IHNldElzQWxsb2NhdGlvbiwKICAgICAgICBzZXRVc2VHdm46IHNldFVzZUd2biwKICAgICAgICBsb29rdXBUeXBlOiBsb29rdXBUeXBlLAogICAgICAgIHR5cGVzUmV0dXJuZWQ6IGJlaGF2aW9yLnR5cGVzUmV0dXJuZWQsCiAgICAgICAgdHlwZXNJbnN0YW50aWF0ZWQ6IGJlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkLAogICAgICAgIG9iamVjdFR5cGU6IGNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUsCiAgICAgICAgbnVsbFR5cGU6IGNvbW1vbkVsZW1lbnRzLm51bGxUeXBlKTsKCiAgICBpZiAoIXNpZGVFZmZlY3RzQXJlRW5jb2RlZEluU3BlY1N0cmluZykgewogICAgICBuZXcgU2lkZUVmZmVjdHNWaXNpdG9yKGJlaGF2aW9yLnNpZGVFZmZlY3RzKQogICAgICAgICAgLnZpc2l0KGJlaGF2aW9yLmNvZGVUZW1wbGF0ZS5hc3QpOwogICAgfQogICAgaWYgKCF0aHJvd0JlaGF2aW9yRnJvbVNwZWNTdHJpbmcpIHsKICAgICAgYmVoYXZpb3IudGhyb3dCZWhhdmlvciA9CiAgICAgICAgICBuZXcgVGhyb3dCZWhhdmlvclZpc2l0b3IoKS5hbmFseXplKGJlaGF2aW9yLmNvZGVUZW1wbGF0ZS5hc3QpOwogICAgfQoKICAgIHJldHVybiBiZWhhdmlvcjsKICB9CgogIHN0YXRpYyB2b2lkIF9maWxsTmF0aXZlQmVoYXZpb3JPZkJ1aWx0aW5PckVtYmVkZGVkR2xvYmFsKAogICAgICBOYXRpdmVCZWhhdmlvciBiZWhhdmlvciwKICAgICAgU3Bhbm5hYmxlIHNwYW5uYWJsZSwKICAgICAgU3RyaW5nIHNwZWNTdHJpbmcsCiAgICAgIFR5cGVMb29rdXAgbG9va3VwVHlwZSwKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAge0xpc3Q8U3RyaW5nPiB2YWxpZFRhZ3N9KSB7CiAgICB2b2lkIHNldFNpZGVFZmZlY3RzKFNpZGVFZmZlY3RzIG5ld0VmZmVjdHMpIHsKICAgICAgYmVoYXZpb3Iuc2lkZUVmZmVjdHMuc2V0VG8obmV3RWZmZWN0cyk7CiAgICB9CgogICAgcHJvY2Vzc1NwZWNTdHJpbmcocmVwb3J0ZXIsIHNwYW5uYWJsZSwgc3BlY1N0cmluZywKICAgICAgICB2YWxpZFRhZ3M6IHZhbGlkVGFncywKICAgICAgICBsb29rdXBUeXBlOiBsb29rdXBUeXBlLAogICAgICAgIHNldFNpZGVFZmZlY3RzOiBzZXRTaWRlRWZmZWN0cywKICAgICAgICB0eXBlc1JldHVybmVkOiBiZWhhdmlvci50eXBlc1JldHVybmVkLAogICAgICAgIHR5cGVzSW5zdGFudGlhdGVkOiBiZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZCwKICAgICAgICBvYmplY3RUeXBlOiBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlLAogICAgICAgIG51bGxUeXBlOiBjb21tb25FbGVtZW50cy5udWxsVHlwZSk7CiAgfQoKICBzdGF0aWMgTmF0aXZlQmVoYXZpb3Igb2ZKc0J1aWx0aW5DYWxsKAogICAgICBTdHJpbmcgc3BlY1N0cmluZywKICAgICAgVHlwZUxvb2t1cCBsb29rdXBUeXBlLAogICAgICBTcGFubmFibGUgc3Bhbm5hYmxlLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICBOYXRpdmVCZWhhdmlvciBiZWhhdmlvciA9IG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgYmVoYXZpb3Iuc2lkZUVmZmVjdHMuc2V0VG8obmV3IFNpZGVFZmZlY3RzKCkpOwogICAgX2ZpbGxOYXRpdmVCZWhhdmlvck9mQnVpbHRpbk9yRW1iZWRkZWRHbG9iYWwoCiAgICAgICAgYmVoYXZpb3IsIHNwYW5uYWJsZSwgc3BlY1N0cmluZywgbG9va3VwVHlwZSwgcmVwb3J0ZXIsIGNvbW1vbkVsZW1lbnRzKTsKICAgIHJldHVybiBiZWhhdmlvcjsKICB9CgogIHN0YXRpYyBOYXRpdmVCZWhhdmlvciBvZkpzRW1iZWRkZWRHbG9iYWxDYWxsKAogICAgICBTdHJpbmcgc3BlY1N0cmluZywKICAgICAgVHlwZUxvb2t1cCBsb29rdXBUeXBlLAogICAgICBTcGFubmFibGUgc3Bhbm5hYmxlLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICBOYXRpdmVCZWhhdmlvciBiZWhhdmlvciA9IG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgLy8gVE9ETyhzcmEpOiBBbGxvdyB0aGUgdXNlIHNpdGUgdG8gb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdHMuCiAgICAvLyBFbWJlZGRlZCBnbG9iYWxzIGFyZSB1c3VhbGx5IHByZS1jb21wdXRlZCBkYXRhIHN0cnVjdHVyZXMgb3IgSmF2YVNjcmlwdAogICAgLy8gZnVuY3Rpb25zIHRoYXQgbmV2ZXIgY2hhbmdlLgogICAgYmVoYXZpb3Iuc2lkZUVmZmVjdHMuc2V0VG8obmV3IFNpZGVFZmZlY3RzLmVtcHR5KCkpOwogICAgYmVoYXZpb3IudGhyb3dCZWhhdmlvciA9IE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVI7CiAgICBfZmlsbE5hdGl2ZUJlaGF2aW9yT2ZCdWlsdGluT3JFbWJlZGRlZEdsb2JhbCgKICAgICAgICBiZWhhdmlvciwgc3Bhbm5hYmxlLCBzcGVjU3RyaW5nLCBsb29rdXBUeXBlLCByZXBvcnRlciwgY29tbW9uRWxlbWVudHMsCiAgICAgICAgdmFsaWRUYWdzOiBbJ3JldHVybnMnLCAnY3JlYXRlcyddKTsKICAgIHJldHVybiBiZWhhdmlvcjsKICB9CgogIHN0YXRpYyBkeW5hbWljIC8qRGFydFR5cGV8U3BlY2lhbFR5cGUqLyBfcGFyc2VUeXBlKAogICAgICBTdHJpbmcgdHlwZVN0cmluZywgVHlwZUxvb2t1cCBsb29rdXBUeXBlKSB7CiAgICBpZiAodHlwZVN0cmluZyA9PSAnPU9iamVjdCcpIHJldHVybiBTcGVjaWFsVHlwZS5Kc09iamVjdDsKICAgIGlmICh0eXBlU3RyaW5nID09ICdkeW5hbWljJykgewogICAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICAgIGludCBpbmRleCA9IHR5cGVTdHJpbmcuaW5kZXhPZignPCcpOwogICAgdmFyIHR5cGUgPSBsb29rdXBUeXBlKHR5cGVTdHJpbmcsIHJlcXVpcmVkOiBpbmRleCA9PSAtMSk7CiAgICBpZiAodHlwZSAhPSBudWxsKSByZXR1cm4gdHlwZTsKCiAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgdHlwZSA9IGxvb2t1cFR5cGUodHlwZVN0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpLCByZXF1aXJlZDogdHJ1ZSk7CiAgICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKHNyYSk6IFBhcnNlIHR5cGUgcGFyYW1ldGVycy4KICAgICAgICByZXR1cm4gdHlwZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBCZWhhdmlvckJ1aWxkZXIgewogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKICBEaWFnbm9zdGljUmVwb3J0ZXIgZ2V0IHJlcG9ydGVyOwogIE5hdGl2ZUJhc2ljRGF0YSBnZXQgbmF0aXZlQmFzaWNEYXRhOwogIGJvb2wgZ2V0IHRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zOwogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50OwoKICBOYXRpdmVCZWhhdmlvciBfYmVoYXZpb3I7CgogIHZvaWQgX292ZXJyaWRlV2l0aEFubm90YXRpb25zKEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucywgVHlwZUxvb2t1cCBsb29rdXBUeXBlKSB7CiAgICBpZiAoY3JlYXRlc0Fubm90YXRpb25zLmlzRW1wdHkgJiYgcmV0dXJuc0Fubm90YXRpb25zLmlzRW1wdHkpIHJldHVybjsKCiAgICBMaXN0IGNyZWF0ZXMgPSBfY29sbGVjdChjcmVhdGVzQW5ub3RhdGlvbnMsIGxvb2t1cFR5cGUpOwogICAgTGlzdCByZXR1cm5zID0gX2NvbGxlY3QocmV0dXJuc0Fubm90YXRpb25zLCBsb29rdXBUeXBlKTsKCiAgICBpZiAoY3JlYXRlcyAhPSBudWxsKSB7CiAgICAgIF9iZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZAogICAgICAgIC4uY2xlYXIoKQogICAgICAgIC4uYWRkQWxsKGNyZWF0ZXMpOwogICAgfQogICAgaWYgKHJldHVybnMgIT0gbnVsbCkgewogICAgICBfYmVoYXZpb3IudHlwZXNSZXR1cm5lZAogICAgICAgIC4uY2xlYXIoKQogICAgICAgIC4uYWRkQWxsKHJldHVybnMpOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYSBsaXN0IG9mIHR5cGUgY29uc3RyYWludHMgZnJvbSB0aGUgYW5ub3RhdGlvbnMgb2YKICAvLy8gW2Fubm90YXRpb25DbGFzc10uCiAgLy8vIFJldHVybnMgYG51bGxgIGlmIG5vIGNvbnN0cmFpbnRzLgogIExpc3QgX2NvbGxlY3QoSXRlcmFibGU8U3RyaW5nPiBhbm5vdGF0aW9ucywgVHlwZUxvb2t1cCBsb29rdXBUeXBlKSB7CiAgICB2YXIgdHlwZXMgPSBudWxsOwogICAgZm9yIChTdHJpbmcgc3BlY1N0cmluZyBpbiBhbm5vdGF0aW9ucykgewogICAgICBmb3IgKGZpbmFsIHR5cGVTdHJpbmcgaW4gc3BlY1N0cmluZy5zcGxpdCgnfCcpKSB7CiAgICAgICAgdmFyIHR5cGUgPSBOYXRpdmVCZWhhdmlvci5fcGFyc2VUeXBlKHR5cGVTdHJpbmcsIGxvb2t1cFR5cGUpOwogICAgICAgIGlmICh0eXBlcyA9PSBudWxsKSB0eXBlcyA9IFtdOwogICAgICAgIHR5cGVzLmFkZCh0eXBlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGVzOwogIH0KCiAgLy8vIE1vZGVscyB0aGUgYmVoYXZpb3Igb2YgaGF2aW5nIGluc3RhbmNlcyBvZiBbdHlwZV0gZXNjYXBlIGZyb20gRGFydCBjb2RlCiAgLy8vIGludG8gbmF0aXZlIGNvZGUuCiAgdm9pZCBfZXNjYXBlKERhcnRUeXBlIHR5cGUsIGJvb2wgaXNKc0ludGVyb3ApIHsKICAgIHR5cGUgPSBlbGVtZW50RW52aXJvbm1lbnQuZ2V0VW5hbGlhc2VkVHlwZSh0eXBlKTsKICAgIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gdHlwZTsKICAgICAgLy8gQSBmdW5jdGlvbiBtaWdodCBiZSBjYWxsZWQgZnJvbSBuYXRpdmUgY29kZSwgcGFzc2luZyB1cyBub3ZlbAogICAgICAvLyBwYXJhbWV0ZXJzLgogICAgICBfZXNjYXBlKGZ1bmN0aW9uVHlwZS5yZXR1cm5UeXBlLCBpc0pzSW50ZXJvcCk7CiAgICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIGZ1bmN0aW9uVHlwZS5wYXJhbWV0ZXJUeXBlcykgewogICAgICAgIF9jYXB0dXJlKHBhcmFtZXRlciwgaXNKc0ludGVyb3ApOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gTW9kZWxzIHRoZSBiZWhhdmlvciBvZiBEYXJ0IGNvZGUgcmVjZWl2aW5nIGluc3RhbmNlcyBhbmQgbWV0aG9kcyBvZiBbdHlwZV0KICAvLy8gZnJvbSBuYXRpdmUgY29kZS4gIFdlIHVzdWFsbHkgc3RhcnQgdGhlIGFuYWx5c2lzIGJ5IGNhcHR1cmluZyBhIG5hdGl2ZQogIC8vLyBtZXRob2QgdGhhdCBoYXMgYmVlbiB1c2VkLgogIC8vLwogIC8vLyBXZSBhc3N1bWUgdGhhdCBKUy1pbnRlcm9wIEFQSXMgY2Fubm90IGluc3RhbnRpYXRlIERhcnQgdHlwZXMgb3IKICAvLy8gbm9uLUpTSW50ZXJvcCBuYXRpdmUgdHlwZXMuCiAgdm9pZCBfY2FwdHVyZShEYXJ0VHlwZSB0eXBlLCBib29sIGlzSnNJbnRlcm9wKSB7CiAgICB0eXBlID0gZWxlbWVudEVudmlyb25tZW50LmdldFVuYWxpYXNlZFR5cGUodHlwZSk7CiAgICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IHR5cGU7CiAgICAgIF9jYXB0dXJlKGZ1bmN0aW9uVHlwZS5yZXR1cm5UeXBlLCBpc0pzSW50ZXJvcCk7CiAgICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIGZ1bmN0aW9uVHlwZS5wYXJhbWV0ZXJUeXBlcykgewogICAgICAgIF9lc2NhcGUocGFyYW1ldGVyLCBpc0pzSW50ZXJvcCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmICghaXNKc0ludGVyb3ApIHsKICAgICAgICBfYmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQuYWRkKHR5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICAgICAgbmF0aXZlQmFzaWNEYXRhLmlzTmF0aXZlQ2xhc3ModHlwZS5lbGVtZW50KSkgewogICAgICAgICAgLy8gQW55IGRlY2xhcmVkIG5hdGl2ZSBvciBpbnRlcm9wIHR5cGUgKGlzTmF0aXZlIGltcGxpZXMgaXNKc0ludGVyb3ApCiAgICAgICAgICAvLyBpcyBhc3N1bWVkIHRvIGJlIGFsbG9jYXRlZC4KICAgICAgICAgIF9iZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZC5hZGQodHlwZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zIHx8CiAgICAgICAgICAgIHR5cGUuaXNEeW5hbWljIHx8CiAgICAgICAgICAgIHR5cGUgPT0gY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSkgewogICAgICAgICAgLy8gQnkgc2F5aW5nIHRoYXQgb25seSBKUy1pbnRlcm9wIHR5cGVzIGNhbiBiZSBjcmVhdGVkLCB3ZSBwcmV2ZW50CiAgICAgICAgICAvLyBwdWxsaW5nIGluIGV2ZXJ5IG90aGVyIG5hdGl2ZSB0eXBlIChlLmcuIGFsbCBvZiBkYXJ0Omh0bWwpIHdoZW4gYQogICAgICAgICAgLy8gSlMgaW50ZXJvcCBBUEkgcmV0dXJucyBkeW5hbWljIG9yIHdoZW4gd2UgZG9uJ3QgdHJ1c3QgdGhlIHR5cGUKICAgICAgICAgIC8vIGFubm90YXRpb25zLiBUaGlzIG1lYW5zIHRoYXQgdG8gc29tZSBkZWdyZWUgd2Ugc3RpbGwgdXNlIHRoZSByZXR1cm4KICAgICAgICAgIC8vIHR5cGUgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSBuYXRpdmUgdHlwZXMsIGV2ZW4gaWYgd2UgZG9uJ3QKICAgICAgICAgIC8vIHRydXN0IHRoZSB0eXBlIGFubm90YXRpb24uCiAgICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBjb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzczsKICAgICAgICAgIF9iZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZC5hZGQoZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPdGhlcndpc2UsIHdoZW4gdGhlIGRlY2xhcmVkIHR5cGUgaXMgYSBEYXJ0IHR5cGUsIHdlIGRvIG5vdAogICAgICAgICAgLy8gcmVnaXN0ZXIgYW4gYWxsb2NhdGlvbiBiZWNhdXNlIHdlIGFzc3VtZSBpdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkCiAgICAgICAgICAvLyBmcm9tIHdpdGhpbiB0aGUgSlMtaW50ZXJvcCBjb2RlLiBJdCBtdXN0IGhhdmUgZXNjYXBlZCBmcm9tIGFub3RoZXIKICAgICAgICAgIC8vIEFQSS4KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIE5hdGl2ZUJlaGF2aW9yIGJ1aWxkRmllbGRMb2FkQmVoYXZpb3IoCiAgICAgIERhcnRUeXBlIHR5cGUsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucywKICAgICAgVHlwZUxvb2t1cCBsb29rdXBUeXBlLAogICAgICB7Ym9vbCBpc0pzSW50ZXJvcH0pIHsKICAgIF9iZWhhdmlvciA9IG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgLy8gVE9ETyhzaWdtdW5kLHNyYSk6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBiZXR0ZXIgZm9yIG51bWVyaWMgdHlwZXMuCiAgICBfYmVoYXZpb3IudHlwZXNSZXR1cm5lZC5hZGQoIWlzSnNJbnRlcm9wIHx8IHRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zCiAgICAgICAgPyB0eXBlCiAgICAgICAgOiBjb21tb25FbGVtZW50cy5keW5hbWljVHlwZSk7CiAgICAvLyBEZWNsYXJlZCB0eXBlcyBhcmUgbnVsbGFibGUuCiAgICBfYmVoYXZpb3IudHlwZXNSZXR1cm5lZC5hZGQoY29tbW9uRWxlbWVudHMubnVsbFR5cGUpOwogICAgX2NhcHR1cmUodHlwZSwgaXNKc0ludGVyb3ApOwogICAgX292ZXJyaWRlV2l0aEFubm90YXRpb25zKAogICAgICAgIGNyZWF0ZXNBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLCBsb29rdXBUeXBlKTsKICAgIHJldHVybiBfYmVoYXZpb3I7CiAgfQoKICBOYXRpdmVCZWhhdmlvciBidWlsZEZpZWxkU3RvcmVCZWhhdmlvcihEYXJ0VHlwZSB0eXBlKSB7CiAgICBfYmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIF9lc2NhcGUodHlwZSwgZmFsc2UpOwogICAgLy8gV2UgZG9uJ3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIC0gdGhlIGFubm90YXRpb25zIGFwcGx5IHRvCiAgICAvLyBsb2FkaW5nIHRoZSBmaWVsZC4KICAgIHJldHVybiBfYmVoYXZpb3I7CiAgfQoKICBOYXRpdmVCZWhhdmlvciBidWlsZE1ldGhvZEJlaGF2aW9yKAogICAgICBGdW5jdGlvblR5cGUgdHlwZSwKICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVBbm5vdGF0aW9ucywKICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgIFR5cGVMb29rdXAgbG9va3VwVHlwZSwKICAgICAge2Jvb2wgaXNKc0ludGVyb3B9KSB7CiAgICBfYmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIERhcnRUeXBlIHJldHVyblR5cGUgPSB0eXBlLnJldHVyblR5cGU7CiAgICAvLyBOb3RlOiBGb3IgZGFydDpodG1sIGFuZCBvdGhlciBpbnRlcm5hbCBsaWJyYXJpZXMgd2UgbWFpbnRhaW4sIHdlIGNhbgogICAgLy8gdHJ1c3QgdGhlIHJldHVybiB0eXBlIGFuZCB1c2UgaXQgdG8gbGltaXQgd2hhdCB3ZSBlbnF1ZXVlLiBXZSBoYXZlIHRvCiAgICAvLyBiZSBtb3JlIGNvbnNlcnZhdGl2ZSBhYm91dCBKUyBpbnRlcm9wIHR5cGVzIGFuZCBhc3N1bWUgdGhleSBjYW4gcmV0dXJuCiAgICAvLyBhbnl0aGluZyAodW5sZXNzIHRoZSB1c2VyIHByb3ZpZGVzIHRoZSBleHBlcmltZW50YWwgZmxhZyB0byB0cnVzdCB0aGUKICAgIC8vIHR5cGUgb2YganMtaW50ZXJvcCBBUElzKS4gV2UgZG8gcmVzdHJpY3QgdGhlIGFsbG9jYXRpb24gZWZmZWN0cyBhbmQgc2F5CiAgICAvLyB0aGF0IGludGVyb3AgY2FsbHMgY3JlYXRlIG9ubHkgaW50ZXJvcCB0eXBlcyAod2hpY2ggbWF5IGJlIHVuc291bmQgaWYKICAgIC8vIGFuIGludGVyb3AgY2FsbCByZXR1cm5zIGEgRE9NIHR5cGUgYW5kIGRlY2xhcmVzIGEgZHluYW1pYyByZXR1cm4gdHlwZSwKICAgIC8vIGJ1dCBvdGhlcndpc2Ugd2Ugd291bGQgaW5jbHVkZSBhIGxvdCBvZiBjb2RlIGJ5IGRlZmF1bHQpLgogICAgLy8gVE9ETyhzaWdtdW5kLHNyYSk6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBiZXR0ZXIgZm9yIG51bWVyaWMgdHlwZXMuCiAgICBfYmVoYXZpb3IudHlwZXNSZXR1cm5lZC5hZGQoIWlzSnNJbnRlcm9wIHx8IHRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zCiAgICAgICAgPyByZXR1cm5UeXBlCiAgICAgICAgOiBjb21tb25FbGVtZW50cy5keW5hbWljVHlwZSk7CiAgICBpZiAoIXR5cGUucmV0dXJuVHlwZS5pc1ZvaWQpIHsKICAgICAgLy8gRGVjbGFyZWQgdHlwZXMgYXJlIG51bGxhYmxlLgogICAgICBfYmVoYXZpb3IudHlwZXNSZXR1cm5lZC5hZGQoY29tbW9uRWxlbWVudHMubnVsbFR5cGUpOwogICAgfQogICAgX2NhcHR1cmUodHlwZSwgaXNKc0ludGVyb3ApOwoKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMpIHsKICAgICAgX2VzY2FwZSh0eXBlLCBpc0pzSW50ZXJvcCk7CiAgICB9CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzKSB7CiAgICAgIF9lc2NhcGUodHlwZSwgaXNKc0ludGVyb3ApOwogICAgfQoKICAgIF9vdmVycmlkZVdpdGhBbm5vdGF0aW9ucyhjcmVhdGVBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLCBsb29rdXBUeXBlKTsKICAgIHJldHVybiBfYmVoYXZpb3I7CiAgfQp9CgpMaXN0PFN0cmluZz4gX2dldEFubm90YXRpb25zKERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IG1ldGFkYXRhLCBDbGFzc0VudGl0eSBjbHMpIHsKICBMaXN0PFN0cmluZz4gYW5ub3RhdGlvbnMgPSBbXTsKICBmb3IgKENvbnN0YW50VmFsdWUgdmFsdWUgaW4gbWV0YWRhdGEpIHsKICAgIGlmICghdmFsdWUuaXNDb25zdHJ1Y3RlZE9iamVjdCkgY29udGludWU7CiAgICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RydWN0ZWRPYmplY3QgPSB2YWx1ZTsKICAgIGlmIChjb25zdHJ1Y3RlZE9iamVjdC50eXBlLmVsZW1lbnQgIT0gY2xzKSBjb250aW51ZTsKCiAgICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBmaWVsZHMgPSBjb25zdHJ1Y3RlZE9iamVjdC5maWVsZHMudmFsdWVzOwogICAgLy8gVE9ETyhzcmEpOiBCZXR0ZXIgdmFsaWRhdGlvbiBvZiB0aGUgY29uc3RhbnQuCiAgICBpZiAoZmllbGRzLmxlbmd0aCAhPSAxIHx8ICFmaWVsZHMuc2luZ2xlLmlzU3RyaW5nKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICdBbm5vdGF0aW9ucyBuZWVkcyBvbmUgc3RyaW5nOiAke3ZhbHVlLnRvU3RydWN0dXJlZFRleHQoKX0nKTsKICAgIH0KICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgc3BlY1N0cmluZ0NvbnN0YW50ID0gZmllbGRzLnNpbmdsZTsKICAgIFN0cmluZyBzcGVjU3RyaW5nID0gc3BlY1N0cmluZ0NvbnN0YW50LnN0cmluZ1ZhbHVlOwogICAgYW5ub3RhdGlvbnMuYWRkKHNwZWNTdHJpbmcpOwogIH0KICByZXR1cm4gYW5ub3RhdGlvbnM7Cn0KCkxpc3Q8U3RyaW5nPiBnZXRDcmVhdGVzQW5ub3RhdGlvbnMoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IG1ldGFkYXRhKSB7CiAgcmV0dXJuIF9nZXRBbm5vdGF0aW9ucygKICAgICAgcmVwb3J0ZXIsIG1ldGFkYXRhLCBjb21tb25FbGVtZW50cy5hbm5vdGF0aW9uQ3JlYXRlc0NsYXNzKTsKfQoKTGlzdDxTdHJpbmc+IGdldFJldHVybnNBbm5vdGF0aW9ucyhEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGEpIHsKICByZXR1cm4gX2dldEFubm90YXRpb25zKAogICAgICByZXBvcnRlciwgbWV0YWRhdGEsIGNvbW1vbkVsZW1lbnRzLmFubm90YXRpb25SZXR1cm5zQ2xhc3MpOwp9CoOoAE5OPAEZI0okIR4+LjkSAUcWAVEUFSIBKDoBDCUBDB0BLR0XDUIGBAIBOxxFQwEtSAE4UQETKwEmAUs6TAFNHzMBSCYoLxEEAQwWJyMsOSoEAScGNTQLCQ4XBQEsBjUpARs2FA4WDhQOGQ4iDxUGBAEZOSYhPR4mHgQBFzYkEAQCATMES0sTBEIES08xBFFQMQQ8TiEEUScEHyEETBwXSB0vAUYPIQE/DyUBG0oSHAEhAT8BHRcBUSJALzRRUQE8AS0BPEEXARcXLCsvKy8IFAYBJio5SiorJRUBSDI6JDRGBk47Kh4VBAEyKBUBIiUrICAfESIKCCYqLyUIBgEfIy4nKCIcEwQBDBYdJCooJTImDQQBQDQxMDgqFQQBLlEeQAQBLlEeRwQBTUxOTzIGLAZRTEpQTioGSS0GQgYmKiQeHgZOUU9ABlFHJQZJTiYGUE9PS08+BkdOT01OEgZQFQZQT0YGThMGTE9KTURDIUsjMzUvIx0aHhITHAEnGCM+BgErERERERANDAcBOTY6UDAtNCMeFAoQCDcdEwoQCDk7CAYBQkA4JyUaJSEKDgYBTk8BDFEyATUBITIlPBIIKiwBJSMfETAKDyc4ES4KCAYBQQc9B0MmKiIbRAgUBgEoGy4nJRohCgYBKBsvPxolCiIzJQoGATgqJi88BwFGAR5LTTw2ATI3BgEvAUABOjM9KwQBJUo5AS5DEwYBMR0pIxwNNiIyCCwaGy0THjgTHDYTE0YKCAYBHSojHA07Jz0INR4bNBMePxMcPRMTSgoIBgEYBAFMSCIZGR0bIydPFAcmOQE0ASxNATQBMjAuBgEuOCouBgEuLAYBIiAGATcoHioeIC83LywBLjMtBigfSQYBFQQBPB8bGR0jJSIyLgYBNx4gKC83LywEASkZHRsjJzQzMlAVBAEwGR0bIyc0QU8kOTgyTywVBAE2Mj4jIgYpPiMBF0kaLRUIBiAEAgEhJSMnKi0BHAFFREoBPT0BGyISGwYbHhIbBgQBQRkoRxYtOEYnGQgGEgQBThgyNiAoRxU1QCoIBgQBUU0hBkYiMzYgKDZAKQgNGi8PJTtQKTEKAS4eMU1PTFFOKERQEUlQUBIKCAYEASkVKysdHCZNTg8nJDohHj0WBAE6JhpKGhYEASYZKisdHCYrTE1OTU9NTkFNThUnIyY8BiEBOSIGNiIGAVEWBAIBOjkhKi44OQFGNTk4SAY8OCEEFgIBQEcaQgIBQEcaQgIBKXBhY2thZ2U6Y29tcGlsZXIvc3JjL25hdGl2ZS9iZWhhdmlvci5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3VuaXZlcnNlL2ZlYXR1cmUuZGFydJ56Ly8gVE9ETyhzaWdtdW5kKTogcmVuYW1lIHVuaXZlcnNlID0+IHdvcmxkCi8vLyBEZXNjcmliZXMgaW5kaXZpZHVhbCBmZWF0dXJlcyB0aGF0IG1heSBiZSBzZWVuIGluIGEgcHJvZ3JhbS4gTW9zdCBmZWF0dXJlcwovLy8gY2FuIGJlIGRlc2NyaWJlZCBvbmx5IGJ5IG5hbWUgdXNpbmcgdGhlIFtGZWF0dXJlXSBlbnVtLCBzb21lIGZlYXR1cmVzIGFyZQovLy8gZXhwcmVzc2VkIGluY2x1ZGluZyBkZXRhaWxzIG9uIGhvdyB0aGV5IGFyZSB1c2VkLiBGb3IgZXhhbXBsZSwgd2hldGhlciBhCi8vLyBsaXN0IGxpdGVyYWwgd2FzIGNvbnN0YW50IG9yIGVtcHR5LgovLy8KLy8vIFRoZSB1c2Ugb2YgdGhlc2UgZmVhdHVyZXMgaXMgdHlwaWNhbGx5IGRpc2NvdmVyZWQgaW4gYW4gZWFybHkgcGhhc2Ugb2YgdGhlCi8vLyBjb21waWxhdGlvbiBwaXBlbGluZSwgZm9yIGV4YW1wbGUgZHVyaW5nIHJlc29sdXRpb24uCmxpYnJhcnkgY29tcGlsZXIudW5pdmVyc2UuZmVhdHVyZTsKCmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvcnVudGltZV90eXBlX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CgovLy8gQSBsYW5ndWFnZSBmZWF0dXJlIHRoYXQgbWF5IGJlIHNlZW4gaW4gdGhlIHByb2dyYW0uCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCBtaXJyb3IgdXNhZ2UgYmUgcGFydCBvZiB0aGlzPwplbnVtIEZlYXR1cmUgewogIC8vLyBJbnZvY2F0aW9uIG9mIGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3Rpb24gb24gYW4gYWJzdHJhY3QgY2xhc3MuCiAgQUJTVFJBQ1RfQ0xBU1NfSU5TVEFOVElBVElPTiwKCiAgLy8vIEFuIGFzc2VydCBzdGF0ZW1lbnQgd2l0aCBubyBtZXNzYWdlLgogIEFTU0VSVCwKCiAgLy8vIEFuIGFzc2VydCBzdGF0ZW1lbnQgd2l0aCBhIG1lc3NhZ2UuCiAgQVNTRVJUX1dJVEhfTUVTU0FHRSwKCiAgLy8vIEEgbWV0aG9kIHdpdGggYW4gYGFzeW5jYCBib2R5IG1vZGlmaWVyLgogIEFTWU5DLAoKICAvLy8gQW4gYXN5bmNocm9ub3VzIGZvciBpbiBzdGF0ZW1lbnQgbGlrZSBgYXdhaXQgZm9yICh2YXIgZSBpbiBpKSB7fWAuCiAgQVNZTkNfRk9SX0lOLAoKICAvLy8gQSBtZXRob2Qgd2l0aCBhbiBgYXN5bmMqYCBib2R5IG1vZGlmaWVyLgogIEFTWU5DX1NUQVIsCgogIC8vLyBBIGNhdGNoIHN0YXRlbWVudC4KICBDQVRDSF9TVEFURU1FTlQsCgogIC8vLyBBIGZhbGwgdGhyb3VnaCBpbiBhIHN3aXRjaCBjYXNlLgogIEZBTExfVEhST1VHSF9FUlJPUiwKCiAgLy8vIEEgZmllbGQgd2l0aG91dCBhbiBpbml0aWFsaXplci4KICBGSUVMRF9XSVRIT1VUX0lOSVRJQUxJWkVSLAoKICAvLy8gQSBmaWVsZCB3aG9zZSBpbml0aWFsaXphdGlvbiBpcyBub3QgYSBjb25zdGFudC4KICBMQVpZX0ZJRUxELAoKICAvLy8gQSBsb2NhbCB2YXJpYWJsZSB3aXRob3V0IGFuIGluaXRpYWxpemVyLgogIExPQ0FMX1dJVEhPVVRfSU5JVElBTElaRVIsCgogIC8vLyBBY2Nlc3MgdG8gYGxvYWRMaWJyYXJ5YCBvbiBhIGRlZmVycmVkIGltcG9ydC4KICBMT0FEX0xJQlJBUlksCgogIC8vLyBBIGNhdGNoIGNsYXVzZSB3aXRoIGEgdmFyaWFibGUgZm9yIHRoZSBzdGFjayB0cmFjZS4KICBTVEFDS19UUkFDRV9JTl9DQVRDSCwKCiAgLy8vIFN0cmluZyBpbnRlcnBvbGF0aW9uLgogIFNUUklOR19JTlRFUlBPTEFUSU9OLAoKICAvLy8gU3RyaW5nIGp1eHRhcG9zaXRpb24uCiAgU1RSSU5HX0pVWFRBUE9TSVRJT04sCgogIC8vLyBBbiBpbXBsaWNpdCBjYWxsIHRvIGBzdXBlci5ub1N1Y2hNZXRob2RgLCBsaWtlIGNhbGxpbmcgYW4gdW5yZXNvbHZlZAogIC8vLyBzdXBlciBtZXRob2QuCiAgU1VQRVJfTk9fU1VDSF9NRVRIT0QsCgogIC8vLyBBIHJlZGlyZWN0aW9uIHRvIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3Rvci4KICBTWU1CT0xfQ09OU1RSVUNUT1IsCgogIC8vLyBBbiBzeW5jaHJvbm91cyBmb3IgaW4gc3RhdGVtZW50LCBsaWtlIGBmb3IgKHZhciBlIGluIGkpIHt9YC4KICBTWU5DX0ZPUl9JTiwKCiAgLy8vIEEgbWV0aG9kIHdpdGggYSBgc3luYypgIGJvZHkgbW9kaWZpZXIuCiAgU1lOQ19TVEFSLAoKICAvLy8gQSB0aHJvdyBleHByZXNzaW9uLgogIFRIUk9XX0VYUFJFU1NJT04sCgogIC8vLyBBbiBpbXBsaWNpdCB0aHJvdyBvZiBhIGBOb1N1Y2hNZXRob2RFcnJvcmAsIGxpa2UgY2FsbGluZyBhbiB1bnJlc29sdmVkCiAgLy8vIHN0YXRpYyBtZXRob2QuCiAgVEhST1dfTk9fU1VDSF9NRVRIT0QsCgogIC8vLyBBbiBpbXBsaWNpdCB0aHJvdyBvZiBhIHJ1bnRpbWUgZXJyb3IsIGxpa2UgaW4gYSBydW50aW1lIHR5cGUgY2hlY2suCiAgVEhST1dfUlVOVElNRV9FUlJPUiwKCiAgLy8vIEFuIGltcGxpY2l0IHRocm93IG9mIGEgYFVuc3VwcG9ydGVkRXJyb3JgLCBsaWtlIGNhbGxpbmcgYG5ldwogIC8vLyBib29sLmZyb21FbnZpcm9ubWVudGAuCiAgVEhST1dfVU5TVVBQT1JURURfRVJST1IsCgogIC8vLyBUaGUgbmVlZCBmb3IgYSB0eXBlIHZhcmlhYmxlIGJvdW5kIGNoZWNrLCBsaWtlIGluc3RhbnRpYXRpb24gb2YgYSBnZW5lcmljCiAgLy8vIHR5cGUgd2hvc2UgdHlwZSB2YXJpYWJsZSBoYXZlIG5vbi10cml2aWFsIGJvdW5kcy4KICBUWVBFX1ZBUklBQkxFX0JPVU5EU19DSEVDSywKfQoKLy8vIERlc2NyaWJlcyBhIHVzZSBvZiBhIG1hcCBsaXRlcmFsIGluIHRoZSBwcm9ncmFtLgpjbGFzcyBNYXBMaXRlcmFsVXNlIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgYm9vbCBpc0NvbnN0YW50OwogIGZpbmFsIGJvb2wgaXNFbXB0eTsKCiAgTWFwTGl0ZXJhbFVzZSh0aGlzLnR5cGUsIHt0aGlzLmlzQ29uc3RhbnQ6IGZhbHNlLCB0aGlzLmlzRW1wdHk6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIHR5cGUuaGFzaENvZGUgKiAxMyArCiAgICAgICAgaXNDb25zdGFudC5oYXNoQ29kZSAqIDE3ICsKICAgICAgICBpc0VtcHR5Lmhhc2hDb2RlICogMTk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIE1hcExpdGVyYWxVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYKICAgICAgICBpc0NvbnN0YW50ID09IG90aGVyLmlzQ29uc3RhbnQgJiYKICAgICAgICBpc0VtcHR5ID09IG90aGVyLmlzRW1wdHk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ01hcExpdGVyYWxVc2UoJHR5cGUsaXNDb25zdGFudDokaXNDb25zdGFudCxpc0VtcHR5OiRpc0VtcHR5KSc7CiAgfQp9CgovLy8gRGVzY3JpYmVzIGEgdXNlIG9mIGEgc2V0IGxpdGVyYWwgaW4gdGhlIHByb2dyYW0uCmNsYXNzIFNldExpdGVyYWxVc2UgewogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKICBmaW5hbCBib29sIGlzQ29uc3RhbnQ7CiAgZmluYWwgYm9vbCBpc0VtcHR5OwoKICBTZXRMaXRlcmFsVXNlKHRoaXMudHlwZSwge3RoaXMuaXNDb25zdGFudDogZmFsc2UsIHRoaXMuaXNFbXB0eTogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PgogICAgICB0eXBlLmhhc2hDb2RlICogMTMgKyBpc0NvbnN0YW50Lmhhc2hDb2RlICogMTcgKyBpc0VtcHR5Lmhhc2hDb2RlICogMTk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgU2V0TGl0ZXJhbFVzZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZSAmJgogICAgICAgIGlzQ29uc3RhbnQgPT0gb3RoZXIuaXNDb25zdGFudCAmJgogICAgICAgIGlzRW1wdHkgPT0gb3RoZXIuaXNFbXB0eTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdTZXRMaXRlcmFsVXNlKCR0eXBlLGlzQ29uc3RhbnQ6JGlzQ29uc3RhbnQsaXNFbXB0eTokaXNFbXB0eSknOwp9CgovLy8gRGVzY3JpYmVzIHRoZSB1c2Ugb2YgYSBsaXN0IGxpdGVyYWwgaW4gdGhlIHByb2dyYW0uCmNsYXNzIExpc3RMaXRlcmFsVXNlIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgYm9vbCBpc0NvbnN0YW50OwogIGZpbmFsIGJvb2wgaXNFbXB0eTsKCiAgTGlzdExpdGVyYWxVc2UodGhpcy50eXBlLCB7dGhpcy5pc0NvbnN0YW50OiBmYWxzZSwgdGhpcy5pc0VtcHR5OiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiB0eXBlLmhhc2hDb2RlICogMTMgKwogICAgICAgIGlzQ29uc3RhbnQuaGFzaENvZGUgKiAxNyArCiAgICAgICAgaXNFbXB0eS5oYXNoQ29kZSAqIDE5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBMaXN0TGl0ZXJhbFVzZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZSAmJgogICAgICAgIGlzQ29uc3RhbnQgPT0gb3RoZXIuaXNDb25zdGFudCAmJgogICAgICAgIGlzRW1wdHkgPT0gb3RoZXIuaXNFbXB0eTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnTGlzdExpdGVyYWxVc2UoJHR5cGUsaXNDb25zdGFudDokaXNDb25zdGFudCxpc0VtcHR5OiRpc0VtcHR5KSc7CiAgfQp9CgovLy8gQSB1c2Ugb2YgYE9iamVjdC5ydW50aW1lVHlwZWAuCmNsYXNzIFJ1bnRpbWVUeXBlVXNlIHsKICAvLy8gVGhlIHVzZSBraW5kIG9mIGBPYmplY3QucnVudGltZVR5cGVgLgogIGZpbmFsIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kOwoKICAvLy8gVGhlIHN0YXRpYyB0eXBlIG9mIHRoZSByZWNlaXZlci4KICBmaW5hbCBEYXJ0VHlwZSByZWNlaXZlclR5cGU7CgogIC8vLyBUaGUgc3RhdGljIHR5cGUgb2YgdGhlIGFyZ3VtZW50IGlmIFtraW5kXSBpcyBgUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsc2AuCiAgZmluYWwgRGFydFR5cGUgYXJndW1lbnRUeXBlOwoKICBSdW50aW1lVHlwZVVzZSh0aGlzLmtpbmQsIHRoaXMucmVjZWl2ZXJUeXBlLCB0aGlzLmFyZ3VtZW50VHlwZSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4KICAgICAga2luZC5oYXNoQ29kZSAqIDEzICsKICAgICAgcmVjZWl2ZXJUeXBlLmhhc2hDb2RlICogMTcgKwogICAgICBhcmd1bWVudFR5cGUuaGFzaENvZGUgKiAxOTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBSdW50aW1lVHlwZVVzZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGtpbmQgPT0gb3RoZXIua2luZCAmJgogICAgICAgIHJlY2VpdmVyVHlwZSA9PSBvdGhlci5yZWNlaXZlclR5cGUgJiYKICAgICAgICBhcmd1bWVudFR5cGUgPT0gb3RoZXIuYXJndW1lbnRUeXBlOwogIH0KCiAgLy8vIFNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gdXNlIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc6CiAgICAgICAgc2Iud3JpdGUoJ3N0cmluZzonKTsKICAgICAgICBzYi53cml0ZShyZWNlaXZlclR5cGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM6CiAgICAgICAgc2Iud3JpdGUoJ2VxdWFsczonKTsKICAgICAgICBzYi53cml0ZShyZWNlaXZlclR5cGUpOwogICAgICAgIHNiLndyaXRlKCcvJyk7CiAgICAgICAgc2Iud3JpdGUoYXJndW1lbnRUeXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQudW5rbm93bjoKICAgICAgICBzYi53cml0ZSgndW5rbm93bjonKTsKICAgICAgICBzYi53cml0ZShyZWNlaXZlclR5cGUpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnUnVudGltZVR5cGVVc2Uoa2luZD0ka2luZCxyZWNlaXZlcj0kcmVjZWl2ZXJUeXBlJwogICAgICAnLGFyZ3VtZW50PSRhcmd1bWVudFR5cGUpJzsKfQoKLy8vIEEgZ2VuZXJpYyBpbnN0YW50aWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gb2YgdHlwZSBbZnVuY3Rpb25UeXBlXSB3aXRoIHRoZQovLy8gZ2l2ZW4gW3R5cGVBcmd1bWVudHNdLgpjbGFzcyBHZW5lcmljSW5zdGFudGlhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2VuZXJpYy1pbnN0YW50aWF0aW9uJzsKCiAgLy8vIFRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgaW5zdGFudGlhdGVkIGV4cHJlc3Npb24uCiAgZmluYWwgRGFydFR5cGUgZnVuY3Rpb25UeXBlOwoKICAvLy8gVGhlIHR5cGUgYXJndW1lbnRzIG9mIHRoZSBpbnN0YW50aWF0aW9uLgogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIEdlbmVyaWNJbnN0YW50aWF0aW9uKHRoaXMuZnVuY3Rpb25UeXBlLCB0aGlzLnR5cGVBcmd1bWVudHMpOwoKICBmYWN0b3J5IEdlbmVyaWNJbnN0YW50aWF0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBEYXJ0VHlwZSBmdW5jdGlvblR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gc291cmNlLnJlYWREYXJ0VHlwZXMoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgR2VuZXJpY0luc3RhbnRpYXRpb24oZnVuY3Rpb25UeXBlLCB0eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZShmdW5jdGlvblR5cGUpOwogICAgc2luay53cml0ZURhcnRUeXBlcyh0eXBlQXJndW1lbnRzKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLy8gU2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2UgZm9yIHRlc3RpbmcuCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgPT4gJzwke3R5cGVBcmd1bWVudHMuam9pbignLCcpfT4nOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+CiAgICAgIEhhc2hpbmcubGlzdEhhc2godHlwZUFyZ3VtZW50cywgSGFzaGluZy5vYmplY3RIYXNoKGZ1bmN0aW9uVHlwZSkpOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEdlbmVyaWNJbnN0YW50aWF0aW9uKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZnVuY3Rpb25UeXBlID09IG90aGVyLmZ1bmN0aW9uVHlwZSAmJgogICAgICAgIGVxdWFsRWxlbWVudHModHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0dlbmVyaWNJbnN0YW50aWF0aW9uKGZ1bmN0aW9uVHlwZTokZnVuY3Rpb25UeXBlLCcKICAgICAgICAndHlwZUFyZ3VtZW50czokdHlwZUFyZ3VtZW50cyknOwogIH0KfQqBHwArT05NKARPOSMBISsuHAE4PQ9EIAErCgEqFwEuCQFJEAEvDgEZEwEnFgEmHQE2DgEvHQE0EAE6GAEcGAEcGAFLFBgBMRYBQw8BLQ0BGhQBTRUYAUoXAUMdGwFQOB4CATUWHBkWAUsBDBUgIx8EAQwcLS8hKiIEAQwWSwQCATUWHBkWAUsBDBZNAQwcLS8hKiIEAQwXRgIBOBccGRYBTAEMFSAjHwQBDBwtMCEqIgQBDBZMBAIBIxcsIQEnHwFQHwFDAQwWGyMiAQwcLTAhLiwEATQZKhQmHSAPJh0gFyAPJx4gDwYaBAEMSiICAU0bHTUBNh8BLyYBPwFHFzM7FUIEASgVJigTBAE0OgEMFkkBDBwtNjE7BAEMFj4pBAIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2ZlYXR1cmUuZGFydC9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS91c2UuZGFydMAAd98vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIFRoaXMgbGlicmFyeSBkZWZpbmVzIGluZGl2aWR1YWwgd29ybGQgaW1wYWN0cy4KLy8vCi8vLyBXZSBjYWxsIHRoZXNlIGJ1aWxkaW5nIGJsb2NrcyBgdXNlc2AuIEVhY2ggYHVzZWAgaXMgYSBzaW5nbGUgaW1wYWN0IG9mIHRoZQovLy8gd29ybGQuIFNvbWUgZXhhbXBsZSB1c2VzIGFyZToKLy8vCi8vLyAgKiBhbiBpbnZvY2F0aW9uIG9mIGEgdG9wIGxldmVsIGZ1bmN0aW9uCi8vLyAgKiBhIGNhbGwgdG8gdGhlIGBmb28oKWAgbWV0aG9kIG9uIGFuIHVua25vd24gY2xhc3MuCi8vLyAgKiBhbiBpbnN0YW50aWF0aW9uIG9mIGNsYXNzIFQKLy8vCi8vLyBUaGUgZGlmZmVyZW50IGNvbXBpbGVyIHN0YWdlcyBjb21iaW5lIHRoZXNlIHVzZXMgaW50byBgV29ybGRJbXBhY3RgIG9iamVjdHMsCi8vLyB3aGljaCBhcmUgbGF0ZXIgdXNlZCB0byBjb25zdHJ1Y3QgYSBjbG9zZWQtd29ybGQgdW5kZXJzdGFuZGluZyBvZiB0aGUKLy8vIHByb2dyYW0uCmxpYnJhcnkgZGFydDJqcy51bml2ZXJzZS51c2U7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBlcXVhbEVsZW1lbnRzLCBIYXNoaW5nOwppbXBvcnQgJ2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICdzZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJ3dvcmxkX2J1aWxkZXIuZGFydCcgc2hvdyBTdHJvbmdNb2RlQ29uc3RyYWludDsKCmVudW0gRHluYW1pY1VzZUtpbmQgewogIElOVk9LRSwKICBHRVQsCiAgU0VULAp9CgovLy8gVGhlIHVzZSBvZiBhIGR5bmFtaWMgcHJvcGVydHkuIFtzZWxlY3Rvcl0gZGVmaW5lZCB0aGUgbmFtZSBhbmQga2luZCBvZiB0aGUKLy8vIHByb3BlcnR5IGFuZCBbcmVjZWl2ZXJDb25zdHJhaW50XSBkZWZpbmVzIHRoZSBrbm93biBjb25zdHJhaW50IGZvciB0aGUKLy8vIG9iamVjdCBvbiB3aGljaCB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWQuCmNsYXNzIER5bmFtaWNVc2UgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2R5bmFtaWMtdXNlJzsKCiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgZmluYWwgT2JqZWN0IHJlY2VpdmVyQ29uc3RyYWludDsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiBfdHlwZUFyZ3VtZW50czsKCiAgRHluYW1pY1VzZSh0aGlzLnNlbGVjdG9yLCB0aGlzLnJlY2VpdmVyQ29uc3RyYWludCwgdGhpcy5fdHlwZUFyZ3VtZW50cykgewogICAgYXNzZXJ0KAogICAgICAgIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgPT0KICAgICAgICAgICAgKF90eXBlQXJndW1lbnRzPy5sZW5ndGggPz8gMCksCiAgICAgICAgIlR5cGUgYXJndW1lbnQgY291bnQgbWlzbWF0Y2guIFNlbGVjdG9yIGhhcyAiCiAgICAgICAgIiR7c2VsZWN0b3IuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudH0gYnV0ICIKICAgICAgICAiJHtfdHlwZUFyZ3VtZW50cz8ubGVuZ3RoID8/IDB9IHdlcmUgcGFzc2VkLiIpOwogIH0KCiAgZmFjdG9yeSBEeW5hbWljVXNlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IFNlbGVjdG9yLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgYm9vbCBoYXNDb25zdHJhaW50ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBPYmplY3QgcmVjZWl2ZXJDb25zdHJhaW50OwogICAgaWYgKGhhc0NvbnN0cmFpbnQpIHsKICAgICAgcmVjZWl2ZXJDb25zdHJhaW50ID0gc291cmNlLnJlYWRBYnN0cmFjdFZhbHVlKCk7CiAgICB9CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gc291cmNlLnJlYWREYXJ0VHlwZXMoZW1wdHlBc051bGw6IHRydWUpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBEeW5hbWljVXNlKHNlbGVjdG9yLCByZWNlaXZlckNvbnN0cmFpbnQsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2VsZWN0b3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZUJvb2wocmVjZWl2ZXJDb25zdHJhaW50ICE9IG51bGwpOwogICAgaWYgKHJlY2VpdmVyQ29uc3RyYWludCAhPSBudWxsKSB7CiAgICAgIGlmIChyZWNlaXZlckNvbnN0cmFpbnQgaXMgQWJzdHJhY3RWYWx1ZSkgewogICAgICAgIHNpbmsud3JpdGVBYnN0cmFjdFZhbHVlKHJlY2VpdmVyQ29uc3RyYWludCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAgICJVbnN1cHBvcnRlZCByZWNlaXZlciBjb25zdHJhaW50OiAke3JlY2VpdmVyQ29uc3RyYWludH0iKTsKICAgICAgfQogICAgfQogICAgc2luay53cml0ZURhcnRUeXBlcyhfdHlwZUFyZ3VtZW50cywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLy8gU2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2UgZm9yIHRlc3RpbmcuCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHJlY2VpdmVyQ29uc3RyYWludCAhPSBudWxsKSB7CiAgICAgIHZhciBjb25zdHJhaW50ID0gcmVjZWl2ZXJDb25zdHJhaW50OwogICAgICBpZiAoY29uc3RyYWludCBpcyBTdHJvbmdNb2RlQ29uc3RyYWludCkgewogICAgICAgIGlmIChjb25zdHJhaW50LmlzVGhpcykgewogICAgICAgICAgc2Iud3JpdGUoJ3RoaXM6Jyk7CiAgICAgICAgfSBlbHNlIGlmIChjb25zdHJhaW50LmlzRXhhY3QpIHsKICAgICAgICAgIHNiLndyaXRlKCdleGFjdDonKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUoY29uc3RyYWludC5jbHMubmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2Iud3JpdGUoY29uc3RyYWludCk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJy4nKTsKICAgIH0KICAgIHNiLndyaXRlKHNlbGVjdG9yLm5hbWUpOwogICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCAmJiB0eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgc2Iud3JpdGUoJzwnKTsKICAgICAgc2Iud3JpdGUodHlwZUFyZ3VtZW50cy5qb2luKCcsJykpOwogICAgICBzYi53cml0ZSgnPicpOwogICAgfQogICAgaWYgKHNlbGVjdG9yLmlzQ2FsbCkgewogICAgICBzYi53cml0ZShzZWxlY3Rvci5jYWxsU3RydWN0dXJlLnNob3J0VGV4dCk7CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzU2V0dGVyKSB7CiAgICAgIHNiLndyaXRlKCc9Jyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIER5bmFtaWNVc2VLaW5kIGdldCBraW5kIHsKICAgIGlmIChzZWxlY3Rvci5pc0dldHRlcikgewogICAgICByZXR1cm4gRHluYW1pY1VzZUtpbmQuR0VUOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICByZXR1cm4gRHluYW1pY1VzZUtpbmQuU0VUOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIER5bmFtaWNVc2VLaW5kLklOVk9LRTsKICAgIH0KICB9CgogIExpc3Q8RGFydFR5cGU+IGdldCB0eXBlQXJndW1lbnRzID0+IF90eXBlQXJndW1lbnRzID8/IGNvbnN0IDxEYXJ0VHlwZT5bXTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBIYXNoaW5nLmxpc3RIYXNoKAogICAgICB0eXBlQXJndW1lbnRzLCBIYXNoaW5nLm9iamVjdHNIYXNoKHNlbGVjdG9yLCByZWNlaXZlckNvbnN0cmFpbnQpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBEeW5hbWljVXNlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc2VsZWN0b3IgPT0gb3RoZXIuc2VsZWN0b3IgJiYKICAgICAgICByZWNlaXZlckNvbnN0cmFpbnQgPT0gb3RoZXIucmVjZWl2ZXJDb25zdHJhaW50ICYmCiAgICAgICAgZXF1YWxFbGVtZW50cyh0eXBlQXJndW1lbnRzLCBvdGhlci50eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICckc2VsZWN0b3IsJHJlY2VpdmVyQ29uc3RyYWludCwkdHlwZUFyZ3VtZW50cyc7Cn0KCmVudW0gU3RhdGljVXNlS2luZCB7CiAgU1RBVElDX1RFQVJfT0ZGLAogIFNVUEVSX1RFQVJfT0ZGLAogIFNVUEVSX0ZJRUxEX1NFVCwKICBTVVBFUl9HRVQsCiAgU1VQRVJfU0VUVEVSX1NFVCwKICBTVVBFUl9JTlZPS0UsCiAgSU5TVEFOQ0VfRklFTERfR0VULAogIElOU1RBTkNFX0ZJRUxEX1NFVCwKICBDTE9TVVJFLAogIENMT1NVUkVfQ0FMTCwKICBDQUxMX01FVEhPRCwKICBDT05TVFJVQ1RPUl9JTlZPS0UsCiAgQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFLAogIERJUkVDVF9JTlZPS0UsCiAgSU5MSU5JTkcsCiAgU1RBVElDX0lOVk9LRSwKICBTVEFUSUNfR0VULAogIFNUQVRJQ19TRVQsCiAgRklFTERfSU5JVCwKICBGSUVMRF9DT05TVEFOVF9JTklULAp9CgovLy8gU3RhdGljYWxseSBrbm93biB1c2Ugb2YgYW4gW0VudGl0eV0uCi8vIFRPRE8oam9obm5pd2ludGhlcik6IENyZWF0ZSBiYWNrZW5kLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyB3aXRoIGJldHRlcgovLyBpbnZhcmlhbnRzLgpjbGFzcyBTdGF0aWNVc2UgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3N0YXRpYy11c2UnOwoKICBmaW5hbCBFbnRpdHkgZWxlbWVudDsKICBmaW5hbCBTdGF0aWNVc2VLaW5kIGtpbmQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKICBmaW5hbCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CiAgZmluYWwgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0OwogIGZpbmFsIENvbnN0YW50VmFsdWUgY29uc3RhbnQ7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgU3RhdGljVXNlLmludGVybmFsKEVudGl0eSBlbGVtZW50LCB0aGlzLmtpbmQsCiAgICAgIHt0aGlzLnR5cGUsCiAgICAgIHRoaXMuY2FsbFN0cnVjdHVyZSwKICAgICAgdGhpcy5kZWZlcnJlZEltcG9ydCwKICAgICAgdGhpcy50eXBlQXJndW1lbnRzLAogICAgICB0aGlzLmNvbnN0YW50fSkKICAgICAgOiB0aGlzLmVsZW1lbnQgPSBlbGVtZW50LAogICAgICAgIHRoaXMuaGFzaENvZGUgPSBIYXNoaW5nLmxpc3RIYXNoKFsKICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICBraW5kLAogICAgICAgICAgdHlwZSwKICAgICAgICAgIEhhc2hpbmcubGlzdEhhc2godHlwZUFyZ3VtZW50cyksCiAgICAgICAgICBjYWxsU3RydWN0dXJlLAogICAgICAgICAgZGVmZXJyZWRJbXBvcnQsCiAgICAgICAgICBjb25zdGFudAogICAgICAgIF0pOwoKICBib29sIF9jaGVja0dlbmVyaWNJbnZhcmlhbnRzKCkgewogICAgYXNzZXJ0KAogICAgICAgIChjYWxsU3RydWN0dXJlPy50eXBlQXJndW1lbnRDb3VudCA/PyAwKSA9PSAodHlwZUFyZ3VtZW50cz8ubGVuZ3RoID8/IDApLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiVHlwZSBhcmd1bWVudCBjb3VudCBtaXNtYXRjaC4gQ2FsbCBzdHJ1Y3R1cmUgaGFzICIKICAgICAgICAgICAgIiR7Y2FsbFN0cnVjdHVyZT8udHlwZUFyZ3VtZW50Q291bnQgPz8gMH0gYnV0ICIKICAgICAgICAgICAgIiR7dHlwZUFyZ3VtZW50cz8ubGVuZ3RoID8/IDB9IHdlcmUgcGFzc2VkIGluICR0aGlzLiIpKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgZmFjdG9yeSBTdGF0aWNVc2UucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgIFN0YXRpY1VzZUtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShTdGF0aWNVc2VLaW5kLnZhbHVlcyk7CiAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPQogICAgICAgIHNvdXJjZS5yZWFkVmFsdWVPck51bGwoKCkgPT4gQ2FsbFN0cnVjdHVyZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgPSBzb3VyY2UucmVhZEltcG9ydE9yTnVsbCgpOwogICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHNvdXJjZS5yZWFkQ29uc3RhbnRPck51bGwoKTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBzb3VyY2UucmVhZERhcnRUeXBlcyhlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBraW5kLAogICAgICAgIHR5cGU6IHR5cGUsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQsCiAgICAgICAgY29uc3RhbnQ6IGNvbnN0YW50LAogICAgICAgIHR5cGVBcmd1bWVudHM6IHR5cGVBcmd1bWVudHMpOwogIH0KCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgYXNzZXJ0KGVsZW1lbnQgaXMgTWVtYmVyRW50aXR5LCAiVW5zdXBwb3J0ZWQgZW50aXR5OiAkZWxlbWVudCIpOwogICAgc2luay53cml0ZU1lbWJlcihlbGVtZW50KTsKICAgIHNpbmsud3JpdGVFbnVtKGtpbmQpOwogICAgc2luay53cml0ZURhcnRUeXBlKHR5cGUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlVmFsdWVPck51bGwoCiAgICAgICAgY2FsbFN0cnVjdHVyZSwgKENhbGxTdHJ1Y3R1cmUgYykgPT4gYy53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgc2luay53cml0ZUltcG9ydE9yTnVsbChkZWZlcnJlZEltcG9ydCk7CiAgICBzaW5rLndyaXRlQ29uc3RhbnRPck51bGwoY29uc3RhbnQpOwogICAgc2luay53cml0ZURhcnRUeXBlcyh0eXBlQXJndW1lbnRzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBTaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIHVzZSBmb3IgdGVzdGluZy4KICBTdHJpbmcgZ2V0IHNob3J0VGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX1NFVDoKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX0ZJRUxEX1NFVDoKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX1NFVFRFUl9TRVQ6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfU0VUOgogICAgICAgIHNiLndyaXRlKCdzZXQ6Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5GSUVMRF9JTklUOgogICAgICAgIHNiLndyaXRlKCdpbml0OicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRToKICAgICAgICBzYi53cml0ZSgnZGVmOicpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgfQogICAgaWYgKGVsZW1lbnQgaXMgTWVtYmVyRW50aXR5KSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50OwogICAgICBpZiAobWVtYmVyLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgICBzYi53cml0ZShtZW1iZXIuZW5jbG9zaW5nQ2xhc3MubmFtZSk7CiAgICAgICAgc2Iud3JpdGUoJy4nKTsKICAgICAgfQogICAgfQogICAgaWYgKGVsZW1lbnQubmFtZSA9PSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCc8YW5vbnltb3VzPicpOwogICAgfSBlbHNlIHsKICAgICAgc2Iud3JpdGUoZWxlbWVudC5uYW1lKTsKICAgIH0KICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwgJiYgdHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHNiLndyaXRlKCc8Jyk7CiAgICAgIHNiLndyaXRlKHR5cGVBcmd1bWVudHMuam9pbignLCcpKTsKICAgICAgc2Iud3JpdGUoJz4nKTsKICAgIH0KICAgIGlmIChjYWxsU3RydWN0dXJlICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJygnKTsKICAgICAgc2Iud3JpdGUoY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRDb3VudCk7CiAgICAgIGlmIChjYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICAgIHNiLndyaXRlKGNhbGxTdHJ1Y3R1cmUuZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCkuam9pbignLCcpKTsKICAgICAgfQogICAgICBzYi53cml0ZSgnKScpOwogICAgfQogICAgaWYgKGRlZmVycmVkSW1wb3J0ICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ3snKTsKICAgICAgc2Iud3JpdGUoZGVmZXJyZWRJbXBvcnQubmFtZSk7CiAgICAgIHNiLndyaXRlKCd9Jyk7CiAgICB9CiAgICBpZiAoY29uc3RhbnQgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnPScpOwogICAgICBzYi53cml0ZShjb25zdGFudC50b1N0cnVjdHVyZWRUZXh0KCkpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gSW52b2NhdGlvbiBvZiBhIHN0YXRpYyBvciB0b3AtbGV2ZWwgW2VsZW1lbnRdIHdpdGggdGhlIGdpdmVuCiAgLy8vIFtjYWxsU3RydWN0dXJlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSwKICAgICAgW0xpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydF0pIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzU3RhdGljIHx8IGVsZW1lbnQuaXNUb3BMZXZlbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIlN0YXRpYyBpbnZva2UgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgdG9wLWxldmVsICIKICAgICAgICAgICAgIm9yIHN0YXRpYyBtZXRob2QuIikpOwogICAgYXNzZXJ0KGVsZW1lbnQuaXNGdW5jdGlvbiwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiU3RhdGljIGdldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmdW5jdGlvbi4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgY2FsbFN0cnVjdHVyZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJOb3QgQ2FsbFN0cnVjdHVyZSBmb3Igc3RhdGljIGludm9jYXRpb24gb2YgZWxlbWVudCAkZWxlbWVudC4iKSk7CgogICAgU3RhdGljVXNlIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoCiAgICAgICAgZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUsCiAgICAgICAgdHlwZUFyZ3VtZW50czogdHlwZUFyZ3VtZW50cywKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogICAgYXNzZXJ0KHN0YXRpY1VzZS5fY2hlY2tHZW5lcmljSW52YXJpYW50cygpKTsKICAgIHJldHVybiBzdGF0aWNVc2U7CiAgfQoKICAvLy8gQ2xvc3VyaXphdGlvbiBvZiBhIHN0YXRpYyBvciB0b3AtbGV2ZWwgZnVuY3Rpb24gW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLnN0YXRpY1RlYXJPZmYoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwKICAgICAgW0ltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydF0pIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzU3RhdGljIHx8IGVsZW1lbnQuaXNUb3BMZXZlbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIlN0YXRpYyB0ZWFyLW9mZiBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSB0b3AtbGV2ZWwgIgogICAgICAgICAgICAib3Igc3RhdGljIG1ldGhvZC4iKSk7CiAgICBhc3NlcnQoZWxlbWVudC5pc0Z1bmN0aW9uLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJTdGF0aWMgZ2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX1RFQVJfT0ZGLAogICAgICAgIGRlZmVycmVkSW1wb3J0OiBkZWZlcnJlZEltcG9ydCk7CiAgfQoKICAvLy8gUmVhZCBhY2Nlc3Mgb2YgYSBzdGF0aWMgb3IgdG9wLWxldmVsIGZpZWxkIG9yIGdldHRlciBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3RhdGljR2V0KE1lbWJlckVudGl0eSBlbGVtZW50LAogICAgICBbSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0XSkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNTdGF0aWMgfHwgZWxlbWVudC5pc1RvcExldmVsLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiU3RhdGljIGdldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSB0b3AtbGV2ZWwgIgogICAgICAgICAgICAib3Igc3RhdGljIGZpZWxkIG9yIGdldHRlci4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0ZpZWxkIHx8IGVsZW1lbnQuaXNHZXR0ZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIlN0YXRpYyBnZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgZmllbGQgb3IgYSBnZXR0ZXIuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfR0VULAogICAgICAgIGRlZmVycmVkSW1wb3J0OiBkZWZlcnJlZEltcG9ydCk7CiAgfQoKICAvLy8gV3JpdGUgYWNjZXNzIG9mIGEgc3RhdGljIG9yIHRvcC1sZXZlbCBmaWVsZCBvciBzZXR0ZXIgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLnN0YXRpY1NldChNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgW0ltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydF0pIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzU3RhdGljIHx8IGVsZW1lbnQuaXNUb3BMZXZlbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIlN0YXRpYyBzZXQgZWxlbWVudCAkZWxlbWVudCAiCiAgICAgICAgICAgICJtdXN0IGJlIGEgdG9wLWxldmVsIG9yIHN0YXRpYyBtZXRob2QuIikpOwogICAgYXNzZXJ0KAogICAgICAgIChlbGVtZW50LmlzRmllbGQgJiYgZWxlbWVudC5pc0Fzc2lnbmFibGUpIHx8IGVsZW1lbnQuaXNTZXR0ZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIlN0YXRpYyBzZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgZmllbGQgb3IgYSBzZXR0ZXIuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfU0VULAogICAgICAgIGRlZmVycmVkSW1wb3J0OiBkZWZlcnJlZEltcG9ydCk7CiAgfQoKICAvLy8gSW52b2NhdGlvbiBvZiB0aGUgbGF6eSBpbml0aWFsaXplciBmb3IgYSBzdGF0aWMgb3IgdG9wLWxldmVsIGZpZWxkCiAgLy8vIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdGF0aWNJbml0KEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzU3RhdGljIHx8IGVsZW1lbnQuaXNUb3BMZXZlbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIlN0YXRpYyBpbml0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIHRvcC1sZXZlbCAiCiAgICAgICAgICAgICJvciBzdGF0aWMgbWV0aG9kLiIpKTsKICAgIGFzc2VydChlbGVtZW50LmlzRmllbGQsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIlN0YXRpYyBpbml0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZpZWxkLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuRklFTERfSU5JVCk7CiAgfQoKICAvLy8gSW52b2NhdGlvbiBvZiBhIHN1cGVyIG1ldGhvZCBbZWxlbWVudF0gd2l0aCB0aGUgZ2l2ZW4gW2NhbGxTdHJ1Y3R1cmVdLgogIGZhY3RvcnkgU3RhdGljVXNlLnN1cGVySW52b2tlKAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUsCiAgICAgIFtMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzXSkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiU3VwZXIgaW52b2tlIGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZXRob2QuIikpOwogICAgYXNzZXJ0KAogICAgICAgIGNhbGxTdHJ1Y3R1cmUgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiTm90IENhbGxTdHJ1Y3R1cmUgZm9yIHN1cGVyIGludm9jYXRpb24gb2YgZWxlbWVudCAkZWxlbWVudC4iKSk7CiAgICBTdGF0aWNVc2Ugc3RhdGljVXNlID0gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbCgKICAgICAgICBlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNVUEVSX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBjYWxsU3RydWN0dXJlLCB0eXBlQXJndW1lbnRzOiB0eXBlQXJndW1lbnRzKTsKICAgIGFzc2VydChzdGF0aWNVc2UuX2NoZWNrR2VuZXJpY0ludmFyaWFudHMoKSk7CiAgICByZXR1cm4gc3RhdGljVXNlOwogIH0KCiAgLy8vIFJlYWQgYWNjZXNzIG9mIGEgc3VwZXIgZmllbGQgb3IgZ2V0dGVyIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdXBlckdldChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwgIlN1cGVyIGdldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLiIpKTsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzRmllbGQgfHwgZWxlbWVudC5pc0dldHRlciwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiU3VwZXIgZ2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZpZWxkIG9yIGEgZ2V0dGVyLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1VQRVJfR0VUKTsKICB9CgogIC8vLyBXcml0ZSBhY2Nlc3Mgb2YgYSBzdXBlciBmaWVsZCBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3VwZXJGaWVsZFNldChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LCAiU3VwZXIgc2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZXRob2QuIikpOwogICAgYXNzZXJ0KGVsZW1lbnQuaXNGaWVsZCwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiU3VwZXIgc2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZpZWxkLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1VQRVJfRklFTERfU0VUKTsKICB9CgogIC8vLyBXcml0ZSBhY2Nlc3Mgb2YgYSBzdXBlciBzZXR0ZXIgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLnN1cGVyU2V0dGVyU2V0KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsICJTdXBlciBzZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIG1ldGhvZC4iKSk7CiAgICBhc3NlcnQoZWxlbWVudC5pc1NldHRlciwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiU3VwZXIgc2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIHNldHRlci4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNVUEVSX1NFVFRFUl9TRVQpOwogIH0KCiAgLy8vIENsb3N1cml6YXRpb24gb2YgYSBzdXBlciBtZXRob2QgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLnN1cGVyVGVhck9mZihGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyICYmIGVsZW1lbnQuaXNGdW5jdGlvbiwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiU3VwZXIgaW52b2tlIGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZXRob2QuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVVBFUl9URUFSX09GRik7CiAgfQoKICAvLy8gSW52b2NhdGlvbiBvZiBhIGNvbnN0cnVjdG9yIFtlbGVtZW50XSB0aHJvdWdoIGEgdGhpcyBvciBzdXBlcgogIC8vLyBjb25zdHJ1Y3RvciBjYWxsIHdpdGggdGhlIGdpdmVuIFtjYWxsU3RydWN0dXJlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdXBlckNvbnN0cnVjdG9ySW52b2tlKAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50LCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiQ29uc3RydWN0b3IgaW52b2tlIGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhICIKICAgICAgICAgICAgImdlbmVyYXRpdmUgY29uc3RydWN0b3IuIikpOwogICAgYXNzZXJ0KAogICAgICAgIGNhbGxTdHJ1Y3R1cmUgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIk5vdCBDYWxsU3RydWN0dXJlIGZvciBzdXBlciBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgIgogICAgICAgICAgICAiJGVsZW1lbnQuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgLy8vIEludm9jYXRpb24gb2YgYSBjb25zdHJ1Y3RvciAoYm9keSkgW2VsZW1lbnRdIHRocm91Z2ggYSB0aGlzIG9yIHN1cGVyCiAgLy8vIGNvbnN0cnVjdG9yIGNhbGwgd2l0aCB0aGUgZ2l2ZW4gW2NhbGxTdHJ1Y3R1cmVdLgogIGZhY3RvcnkgU3RhdGljVXNlLmNvbnN0cnVjdG9yQm9keUludm9rZSgKICAgICAgQ29uc3RydWN0b3JCb2R5RW50aXR5IGVsZW1lbnQsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgYXNzZXJ0KAogICAgICAgIGNhbGxTdHJ1Y3R1cmUgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIk5vdCBDYWxsU3RydWN0dXJlIGZvciBjb25zdHJ1Y3RvciBib2R5IGludm9jYXRpb24gb2YgZWxlbWVudCAiCiAgICAgICAgICAgICIkZWxlbWVudC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNUQVRJQ19JTlZPS0UsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSk7CiAgfQoKICAvLy8gRGlyZWN0IGludm9jYXRpb24gb2YgYSBnZW5lcmF0b3IgKGJvZHkpIFtlbGVtZW50XSwgYXMgYSBzdGF0aWMgY2FsbCBvcgogIC8vLyB0aHJvdWdoIGEgdGhpcyBvciBzdXBlciBjb25zdHJ1Y3RvciBjYWxsLgogIGZhY3RvcnkgU3RhdGljVXNlLmdlbmVyYXRvckJvZHlJbnZva2UoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CiAgfQoKICAvLy8gRGlyZWN0IGludm9jYXRpb24gb2YgYSBtZXRob2QgW2VsZW1lbnRdIHdpdGggdGhlIGdpdmVuIFtjYWxsU3RydWN0dXJlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5kaXJlY3RJbnZva2UoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwKICAgICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlLCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJEaXJlY3QgaW52b2tlIGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZW1iZXIuIikpOwogICAgYXNzZXJ0KGVsZW1lbnQuaXNGdW5jdGlvbiwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiRGlyZWN0IGludm9rZSBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBtZXRob2QuIikpOwogICAgU3RhdGljVXNlIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoCiAgICAgICAgZWxlbWVudCwgU3RhdGljVXNlS2luZC5ESVJFQ1RfSU5WT0tFLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUsIHR5cGVBcmd1bWVudHM6IHR5cGVBcmd1bWVudHMpOwogICAgYXNzZXJ0KHN0YXRpY1VzZS5fY2hlY2tHZW5lcmljSW52YXJpYW50cygpKTsKICAgIHJldHVybiBzdGF0aWNVc2U7CiAgfQoKICAvLy8gRGlyZWN0IHJlYWQgYWNjZXNzIG9mIGEgZmllbGQgb3IgZ2V0dGVyIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5kaXJlY3RHZXQoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIkRpcmVjdCBnZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIG1lbWJlci4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0ZpZWxkIHx8IGVsZW1lbnQuaXNHZXR0ZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIkRpcmVjdCBnZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgZmllbGQgb3IgYSBnZXR0ZXIuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfR0VUKTsKICB9CgogIC8vLyBEaXJlY3Qgd3JpdGUgYWNjZXNzIG9mIGEgZmllbGQgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLmRpcmVjdFNldChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJEaXJlY3Qgc2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZW1iZXIuIikpOwogICAgYXNzZXJ0KGVsZW1lbnQuaXNGaWVsZCwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiRGlyZWN0IHNldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNUQVRJQ19TRVQpOwogIH0KCiAgLy8vIENvbnN0cnVjdG9yIGludm9jYXRpb24gb2YgW2VsZW1lbnRdIHdpdGggdGhlIGdpdmVuIFtjYWxsU3RydWN0dXJlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jb25zdHJ1Y3Rvckludm9rZSgKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0NvbnN0cnVjdG9yLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJDb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGNvbnN0cnVjdG9yLiIpKTsKICAgIGFzc2VydCgKICAgICAgICBjYWxsU3RydWN0dXJlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJOb3QgQ2FsbFN0cnVjdHVyZSBmb3IgY29uc3RydWN0b3IgaW52b2NhdGlvbiBvZiBlbGVtZW50ICIKICAgICAgICAgICAgIiRlbGVtZW50LiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBjYWxsU3RydWN0dXJlKTsKICB9CgogIC8vLyBDb25zdHJ1Y3RvciBpbnZvY2F0aW9uIG9mIFtlbGVtZW50XSB3aXRoIHRoZSBnaXZlbiBbY2FsbFN0cnVjdHVyZV0gb24KICAvLy8gW3R5cGVdLgogIGZhY3RvcnkgU3RhdGljVXNlLnR5cGVkQ29uc3RydWN0b3JJbnZva2UoCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQsCiAgICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSwKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQpIHsKICAgIGFzc2VydCh0eXBlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIk5vIHR5cGUgcHJvdmlkZWQgZm9yIGNvbnN0cnVjdG9yIGludm9jYXRpb24uIikpOwogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNDb25zdHJ1Y3RvciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIlR5cGVkIGNvbnN0cnVjdG9yIGludm9jYXRpb24gZWxlbWVudCAkZWxlbWVudCAiCiAgICAgICAgICAgICJtdXN0IGJlIGEgY29uc3RydWN0b3IuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5DT05TVFJVQ1RPUl9JTlZPS0UsCiAgICAgICAgdHlwZTogdHlwZSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBjYWxsU3RydWN0dXJlLAogICAgICAgIGRlZmVycmVkSW1wb3J0OiBkZWZlcnJlZEltcG9ydCk7CiAgfQoKICAvLy8gQ29uc3RhbnQgY29uc3RydWN0b3IgaW52b2NhdGlvbiBvZiBbZWxlbWVudF0gd2l0aCB0aGUgZ2l2ZW4KICAvLy8gW2NhbGxTdHJ1Y3R1cmVdIG9uIFt0eXBlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jb25zdENvbnN0cnVjdG9ySW52b2tlKAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50LAogICAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUsCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0KSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJObyB0eXBlIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLiIpKTsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzQ29uc3RydWN0b3IsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJDb25zdCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGVsZW1lbnQgJGVsZW1lbnQgIgogICAgICAgICAgICAibXVzdCBiZSBhIGNvbnN0cnVjdG9yLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKAogICAgICAgIGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFLAogICAgICAgIHR5cGU6IHR5cGUsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIEluaXRpYWxpemF0aW9uIG9mIGFuIGluc3RhbmNlIGZpZWxkIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5maWVsZEluaXQoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwgIkZpZWxkIGluaXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIGZpZWxkLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuRklFTERfSU5JVCk7CiAgfQoKICAvLy8gQ29uc3RhbnQgaW5pdGlhbGl6YXRpb24gb2YgYW4gaW5zdGFuY2UgZmllbGQgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLmZpZWxkQ29uc3RhbnRJbml0KAogICAgICBGaWVsZEVudGl0eSBlbGVtZW50LCBDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LCAiRmllbGQgaW5pdCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgZmllbGQuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5GSUVMRF9DT05TVEFOVF9JTklULAogICAgICAgIGNvbnN0YW50OiBjb25zdGFudCk7CiAgfQoKICAvLy8gUmVhZCBhY2Nlc3Mgb2YgYW4gaW5zdGFuY2UgZmllbGQgb3IgYm94ZWQgZmllbGQgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLmZpZWxkR2V0KEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIgfHwgZWxlbWVudCBpcyBKUmVjb3JkRmllbGQsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIkZpZWxkIGluaXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIG9yIGJveGVkIGZpZWxkLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfR0VUKTsKICB9CgogIC8vLyBXcml0ZSBhY2Nlc3Mgb2YgYW4gaW5zdGFuY2UgZmllbGQgb3IgYm94ZWQgZmllbGQgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLmZpZWxkU2V0KEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIgfHwgZWxlbWVudCBpcyBKUmVjb3JkRmllbGQsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIkZpZWxkIGluaXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIG9yIGJveGVkIGZpZWxkLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfU0VUKTsKICB9CgogIC8vLyBSZWFkIG9mIGEgbG9jYWwgZnVuY3Rpb24gW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLmNsb3N1cmUoTG9jYWwgZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5DTE9TVVJFKTsKICB9CgogIC8vLyBBbiBpbnZvY2F0aW9uIG9mIGEgbG9jYWwgZnVuY3Rpb24gW2VsZW1lbnRdIHdpdGggdGhlIHByb3ZpZGVkCiAgLy8vIFtjYWxsU3RydWN0dXJlXSBhbmQgW3R5cGVBcmd1bWVudHNdLgogIGZhY3RvcnkgU3RhdGljVXNlLmNsb3N1cmVDYWxsKExvY2FsIGVsZW1lbnQsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSwKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgU3RhdGljVXNlIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoCiAgICAgICAgZWxlbWVudCwgU3RhdGljVXNlS2luZC5DTE9TVVJFX0NBTEwsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSwgdHlwZUFyZ3VtZW50czogdHlwZUFyZ3VtZW50cyk7CiAgICBhc3NlcnQoc3RhdGljVXNlLl9jaGVja0dlbmVyaWNJbnZhcmlhbnRzKCkpOwogICAgcmV0dXJuIHN0YXRpY1VzZTsKICB9CgogIC8vLyBSZWFkIG9mIGEgY2FsbCBbbWV0aG9kXSBvbiBhIGNsb3N1cmVDbGFzcy4KICBmYWN0b3J5IFN0YXRpY1VzZS5jYWxsTWV0aG9kKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwobWV0aG9kLCBTdGF0aWNVc2VLaW5kLkNBTExfTUVUSE9EKTsKICB9CgogIC8vLyBJbXBsaWNpdCBtZXRob2QvY29uc3RydWN0b3IgaW52b2NhdGlvbiBvZiBbZWxlbWVudF0gY3JlYXRlZCBieSB0aGUKICAvLy8gYmFja2VuZC4KICBmYWN0b3J5IFN0YXRpY1VzZS5pbXBsaWNpdEludm9rZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNUQVRJQ19JTlZPS0UsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogZWxlbWVudC5wYXJhbWV0ZXJTdHJ1Y3R1cmUuY2FsbFN0cnVjdHVyZSk7CiAgfQoKICAvLy8gSW5saW5pbmcgb2YgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLmNvbnN0cnVjdG9ySW5saW5pbmcoCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQsIEludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlKSB7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLklOTElOSU5HLAogICAgICAgIHR5cGU6IGluc3RhbmNlVHlwZSk7CiAgfQoKICAvLy8gSW5saW5pbmcgb2YgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLm1ldGhvZElubGluaW5nKAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLklOTElOSU5HLAogICAgICAgIHR5cGVBcmd1bWVudHM6IHR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFN0YXRpY1VzZSAmJgogICAgICAgIGVsZW1lbnQgPT0gb3RoZXIuZWxlbWVudCAmJgogICAgICAgIGtpbmQgPT0gb3RoZXIua2luZCAmJgogICAgICAgIHR5cGUgPT0gb3RoZXIudHlwZSAmJgogICAgICAgIGNhbGxTdHJ1Y3R1cmUgPT0gb3RoZXIuY2FsbFN0cnVjdHVyZSAmJgogICAgICAgIGVxdWFsRWxlbWVudHModHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cykgJiYKICAgICAgICBkZWZlcnJlZEltcG9ydCA9PSBvdGhlci5kZWZlcnJlZEltcG9ydCAmJgogICAgICAgIGNvbnN0YW50ID09IG90aGVyLmNvbnN0YW50OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ1N0YXRpY1VzZSgkZWxlbWVudCwka2luZCwkdHlwZSwkdHlwZUFyZ3VtZW50cywkY2FsbFN0cnVjdHVyZSknOwp9CgplbnVtIFR5cGVVc2VLaW5kIHsKICBJU19DSEVDSywKICBBU19DQVNULAogIENBVENIX1RZUEUsCiAgVFlQRV9MSVRFUkFMLAogIElOU1RBTlRJQVRJT04sCiAgTkFUSVZFX0lOU1RBTlRJQVRJT04sCiAgQ09OU1RfSU5TVEFOVElBVElPTiwKICBJTVBMSUNJVF9DQVNULAogIFBBUkFNRVRFUl9DSEVDSywKICBSVElfVkFMVUUsCiAgVFlQRV9BUkdVTUVOVCwKICBOQU1FRF9UWVBFX1ZBUklBQkxFX05FV19SVEksCn0KCi8vLyBVc2Ugb2YgYSBbRGFydFR5cGVdLgpjbGFzcyBUeXBlVXNlIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICd0eXBlLXVzZSc7CgogIGZpbmFsIERhcnRUeXBlIHR5cGU7CiAgZmluYWwgVHlwZVVzZUtpbmQga2luZDsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgZmluYWwgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0OwoKICBUeXBlVXNlLmludGVybmFsKERhcnRUeXBlIHR5cGUsIFR5cGVVc2VLaW5kIGtpbmQsIFt0aGlzLmRlZmVycmVkSW1wb3J0XSkKICAgICAgOiB0aGlzLnR5cGUgPSB0eXBlLAogICAgICAgIHRoaXMua2luZCA9IGtpbmQsCiAgICAgICAgdGhpcy5oYXNoQ29kZSA9IEhhc2hpbmcub2JqZWN0c0hhc2godHlwZSwga2luZCwgZGVmZXJyZWRJbXBvcnQpOwoKICBmYWN0b3J5IFR5cGVVc2UucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIERhcnRUeXBlIHR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBUeXBlVXNlS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFR5cGVVc2VLaW5kLnZhbHVlcyk7CiAgICBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgPSBzb3VyY2UucmVhZEltcG9ydE9yTnVsbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIGtpbmQsIGRlZmVycmVkSW1wb3J0KTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZSh0eXBlKTsKICAgIHNpbmsud3JpdGVFbnVtKGtpbmQpOwogICAgc2luay53cml0ZUltcG9ydE9yTnVsbChkZWZlcnJlZEltcG9ydCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gdXNlIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFR5cGVVc2VLaW5kLklTX0NIRUNLOgogICAgICAgIHNiLndyaXRlKCdpczonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5BU19DQVNUOgogICAgICAgIHNiLndyaXRlKCdhczonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5DQVRDSF9UWVBFOgogICAgICAgIHNiLndyaXRlKCdjYXRjaDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0xJVEVSQUw6CiAgICAgICAgc2Iud3JpdGUoJ2xpdDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICAgIHNiLndyaXRlKCdpbnN0OicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT046CiAgICAgICAgc2Iud3JpdGUoJ2NvbnN0OicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLk5BVElWRV9JTlNUQU5USUFUSU9OOgogICAgICAgIHNiLndyaXRlKCduYXRpdmU6Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSU1QTElDSVRfQ0FTVDoKICAgICAgICBzYi53cml0ZSgnaW1wbDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5QQVJBTUVURVJfQ0hFQ0s6CiAgICAgICAgc2Iud3JpdGUoJ3BhcmFtOicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlJUSV9WQUxVRToKICAgICAgICBzYi53cml0ZSgncnRpOicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfQVJHVU1FTlQ6CiAgICAgICAgc2Iud3JpdGUoJ3R5cGVBcmc6Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFNRURfVFlQRV9WQVJJQUJMRV9ORVdfUlRJOgogICAgICAgIHNiLndyaXRlKCduYW1lZDonKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHNiLndyaXRlKHR5cGUpOwogICAgaWYgKGRlZmVycmVkSW1wb3J0ICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ3snKTsKICAgICAgc2Iud3JpdGUoZGVmZXJyZWRJbXBvcnQubmFtZSk7CiAgICAgIHNiLndyaXRlKCd9Jyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhbiBpcyBjaGVjaywgbGlrZSBgZSBpcyBUYCBvciBgZSBpcyEgVGAuCiAgZmFjdG9yeSBUeXBlVXNlLmlzQ2hlY2soRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLklTX0NIRUNLKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhbiBhcyBjYXN0LCBsaWtlIGBlIGFzIFRgLgogIGZhY3RvcnkgVHlwZVVzZS5hc0Nhc3QoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLkFTX0NBU1QpOwogIH0KCiAgLy8vIFt0eXBlXSB1c2VkIGFzIGEgcGFyYW1ldGVyIHR5cGUgb3IgZmllbGQgdHlwZSBpbiBEYXJ0IDIsIGxpa2UgYFRgIGluOgogIC8vLwogIC8vLyAgICBtZXRob2QoVCB0KSB7fQogIC8vLyAgICBUIGZpZWxkOwogIC8vLwogIGZhY3RvcnkgVHlwZVVzZS5wYXJhbWV0ZXJDaGVjayhEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVVc2UuaW50ZXJuYWwodHlwZSwgVHlwZVVzZUtpbmQuUEFSQU1FVEVSX0NIRUNLKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhbiBpbXBsaWNpdCBjYXN0IGluIERhcnQgMiwgbGlrZSBgVGAgaW4KICAvLy8KICAvLy8gICAgZHluYW1pYyBmb28gPSBuZXcgT2JqZWN0KCk7CiAgLy8vICAgIFQgYmFyID0gZm9vOyAvLyBJbXBsaWNpdGx5IGBUIGJhciA9IGZvbyBhcyBUYC4KICAvLy8KICBmYWN0b3J5IFR5cGVVc2UuaW1wbGljaXRDYXN0KERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5JTVBMSUNJVF9DQVNUKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhIG9uIHR5cGUgY2F0Y2ggY2xhdXNlLCBsaWtlIGB0cnkge30gb24gVCBjYXRjaCAoZSkge31gLgogIGZhY3RvcnkgVHlwZVVzZS5jYXRjaFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLkNBVENIX1RZUEUpOwogIH0KCiAgLy8vIFt0eXBlXSB1c2VkIGFzIGEgdHlwZSBsaXRlcmFsLCBsaWtlIGBmb28oKSA9PiBUO2AuCiAgZmFjdG9yeSBUeXBlVXNlLnR5cGVMaXRlcmFsKERhcnRUeXBlIHR5cGUsIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLlRZUEVfTElURVJBTCwgZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIFt0eXBlXSB1c2VkIGluIGFuIGluc3RhbnRpYXRpb24sIGxpa2UgYG5ldyBUKCk7YC4KICBmYWN0b3J5IFR5cGVVc2UuaW5zdGFudGlhdGlvbihJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhIGNvbnN0YW50IGluc3RhbnRpYXRpb24sIGxpa2UgYGNvbnN0IFQoKTtgLgogIGZhY3RvcnkgVHlwZVVzZS5jb25zdEluc3RhbnRpYXRpb24oCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0KSB7CiAgICByZXR1cm4gbmV3IFR5cGVVc2UuaW50ZXJuYWwoCiAgICAgICAgdHlwZSwgVHlwZVVzZUtpbmQuQ09OU1RfSU5TVEFOVElBVElPTiwgZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIFt0eXBlXSB1c2VkIGluIGEgbmF0aXZlIGluc3RhbnRpYXRpb24uCiAgZmFjdG9yeSBUeXBlVXNlLm5hdGl2ZUluc3RhbnRpYXRpb24oSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVVc2UuaW50ZXJuYWwodHlwZSwgVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT04pOwogIH0KCiAgLy8vIFt0eXBlXSB1c2VkIGFzIGEgZGlyZWN0IFJUSSB2YWx1ZS4KICBmYWN0b3J5IFR5cGVVc2UuY29uc3RUeXBlTGl0ZXJhbChEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVVc2UuaW50ZXJuYWwodHlwZSwgVHlwZVVzZUtpbmQuUlRJX1ZBTFVFKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhIGBpbnN0YW5jZW9mYCBjaGVjay4KICBmYWN0b3J5IFR5cGVVc2UuaW5zdGFuY2VDb25zdHJ1Y3RvcihEYXJ0VHlwZSB0eXBlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIsc3JhKTogVXNlIGEgc2VwYXJhdGUgdXNlIGtpbmQgaWYgY29uc3RydWN0b3JzIGlzIG5vCiAgICAvLyBsb25nZXIgdXNlZCBmb3IgUlRJLgogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLlJUSV9WQUxVRSk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgZGlyZWN0bHkgYXMgYSB0eXBlIGFyZ3VtZW50LgogIC8vLwogIC8vLyBUaGUgaGFwcGVucyBkdXJpbmcgb3B0aW1pemF0aW9uIHdoZXJlIGEgdHlwZSB2YXJpYWJsZSBjYW4gYmUgcmVwbGFjZWQgYnkKICAvLy8gYW4gaW52YXJpYWJsZSB0eXBlIGFyZ3VtZW50IGRlcml2ZWQgZnJvbSBhIGNvbnN0YW50IHJlY2VpdmVyLgogIGZhY3RvcnkgVHlwZVVzZS50eXBlQXJndW1lbnQoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLlRZUEVfQVJHVU1FTlQpOwogIH0KCiAgLy8vIFt0eXBlXSB1c2VkIGFzIGEgbmFtZWQgdHlwZSB2YXJpYWJsZSBpbiBhIHJlY2lwZS4KICBmYWN0b3J5IFR5cGVVc2UubmFtZWRUeXBlVmFyaWFibGVOZXdSdGkoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSA9PgogICAgICBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLk5BTUVEX1RZUEVfVkFSSUFCTEVfTkVXX1JUSSk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgVHlwZVVzZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZSAmJiBraW5kID09IG90aGVyLmtpbmQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVHlwZVVzZSgkdHlwZSwka2luZCknOwp9CgovLy8gVXNlIG9mIGEgW0NvbnN0YW50VmFsdWVdLgpjbGFzcyBDb25zdGFudFVzZSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY29uc3RhbnQtdXNlJzsKCiAgZmluYWwgQ29uc3RhbnRWYWx1ZSB2YWx1ZTsKCiAgQ29uc3RhbnRVc2UuXyh0aGlzLnZhbHVlKTsKCiAgZmFjdG9yeSBDb25zdGFudFVzZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IHNvdXJjZS5yZWFkQ29uc3RhbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ29uc3RhbnRVc2UuXyh2YWx1ZSk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ29uc3RhbnQodmFsdWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBTaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIHVzZSBmb3IgdGVzdGluZy4KICBTdHJpbmcgZ2V0IHNob3J0VGV4dCB7CiAgICByZXR1cm4gdmFsdWUudG9EYXJ0VGV4dCgpOwogIH0KCiAgLy8vIENvbnN0YW50IHVzZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYSBmaWVsZC4KICBDb25zdGFudFVzZS5pbml0KENvbnN0YW50VmFsdWUgdmFsdWUpIDogdGhpcy5fKHZhbHVlKTsKCiAgLy8vIFR5cGUgY29uc3RhbnQgdXNlZCBmb3IgcmVnaXN0cmF0aW9uIG9mIGN1c3RvbSBlbGVtZW50cy4KICBDb25zdGFudFVzZS5jdXN0b21FbGVtZW50cyhUeXBlQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgOiB0aGlzLl8odmFsdWUpOwoKICAvLy8gQ29uc3RhbnQgbGl0ZXJhbCB1c2VkIGluIGNvZGUuCiAgQ29uc3RhbnRVc2UubGl0ZXJhbChDb25zdGFudFZhbHVlIHZhbHVlKSA6IHRoaXMuXyh2YWx1ZSk7CgogIC8vLyBEZWZlcnJlZCBjb25zdGFudCB1c2VkIGluIGNvZGUuCiAgQ29uc3RhbnRVc2UuZGVmZXJyZWQoRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIHZhbHVlKSA6IHRoaXMuXyh2YWx1ZSk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgQ29uc3RhbnRVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdmFsdWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdDb25zdGFudFVzZSgke3ZhbHVlLnRvU3RydWN0dXJlZFRleHQoKX0pJzsKfQqDpABOTjwBMwRPIgQtOSMEUUoNHgEZIyEkMS4jODEmNwEWCgcHAgFPSy4TKwEbIycBTAw0KzY7OAQBPRc9LB8ZNwZMFUgEASgVJDAmMTUPJEcIBjoTBAE0GSomKzAhHSkeCicPHggVBh09FSkVBhsyJBUGGgQBHB0hJCENJAYEAUwBDChJAQwcLSwpOjsEAQxHAgEVExITDRQQFhYLEA8WHBEMEQ4ODhcCASlMDxIqARgcDBYcJSUgJgEwEhobGhYgKxMQECsZGhMMASMMURIVQDxFEQQBPBcwQD8iUD06TBUxFCYoHCcEASgVRR8aLxtGLCg5EwQBNBkqFC0qKyUaDyUbDyIaDw8GIyUrLhcIBiAfDR4GPRUpFQYhFTcyF0YIFQYiFSUVBhwVLQYaBAFDFyI7RQwwEhVCIx9PDB8aTgEyLiYmKTEWBAFBOicMMBIVRCMfT0opBAFGNCcMMBIVPywMLRpKRSkEAUc0JwwwEhUrNwxHGkpFKQQBSRE2DDASFUAjHE1GBAFNITsoDCIaSwwfGk0yLUUxFgQBODUMIhJRDC0aSUUEAS85DCISURxLSwQBMD0MIhJRHUxMBAExOww4GktKBAFENyxADCkSFT0pDB8SFU0bSCcEAUs3K0QMHxIVTBtIJwQBTTBCSC8EAU45QwwiGkwfUDIuRTEWBAE5NgwiGkkMLRpKRgQBMDUMIhpJHExGBAFKJ0AMHxpQDB8SFUcbSCcEAUwOLCEjGiUZTAwfEhU9KE0UJikEAUIhLCEjGiUZTAwfEhU9KCM5FCYpBAE1NQwiElFGBAE+JzUMIhJRTh0EAUE0DD0aUU4EAUI0DD0aUU4EASotQwQBRCtMJjItRTEWBAExOEYEAUkPPUhCBAEdKT9DHQQBHSQ+QycEAQwcLSEkHh4wPTIkBAEMF0cCARMMCw4QERgXERMNER8CARkQKAEXGgwWJQFLGhpJAToXKzw9FT0EASgVHhosEwQBNBkqFCEZDyAZDyMcDyUaDyYbDywcDy0dDyYbDygcDyIaDyYeDzQcDwYUIhUlFQYaBAE+Kz0EATAqPAQBTAYYEgYyRAQBPQYlOAYwQgQBTi0/BAE5TFEEATg2QgQBQiY5IUAEAS08SQQBKTQ+BAErN04cPgQBLwZPRDBCBAE4REcBDBwtKTUEAQwvAgEeFCwBHQEdAT4XMRUlBAEoFR8TBAE0GR8EATU5AT5HASU8ASZLAQwcLS0hBAEMJgEMQwIBJnBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3VzZS5kYXJ0L3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3V0aWwvZW51bXNldC5kYXJ0negvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnV0aWwuZW51bXNldDsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCi8vLyBBIHNldCBvZiBlbnVtIHZhbHVlcyBiYXNlZCBvbiBhIGJpdCBtYXNrIG9mIHRoZSBzaGlmdGVkIGVudW0gaW5kaWNlcy4KYWJzdHJhY3QgY2xhc3MgRW51bVNldDxFPiB7CiAgLy8vIENyZWF0ZXMgYW4gZW1wdHkgbXV0YWJsZSBzZXQuCiAgZmFjdG9yeSBFbnVtU2V0KCkgPSBfRW51bVNldDxFPjsKCiAgLy8vIENyZWF0ZXMgYSBtdXRhYmxlIHNldCBmcm9tIHRoZSBiaXQgbWFzayBbdmFsdWVdLgogIGZhY3RvcnkgRW51bVNldC5mcm9tVmFsdWUoaW50IHZhbHVlKSA9IF9FbnVtU2V0PEU+LmZyb21WYWx1ZTsKCiAgLy8vIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHNldCBmcm9tIHRoZSBiaXQgbWFzayBbdmFsdWVdLgogIGNvbnN0IGZhY3RvcnkgRW51bVNldC5maXhlZChpbnQgdmFsdWUpID0gX0NvbnN0RW51bVNldDxFPjsKCiAgLy8vIENyZWF0ZSBhIHNldCBjb250YWluaW5nIHRoZSBbdmFsdWVzXS4gSWYgW2ZpeGVkXSBpcyBgdHJ1ZWAgdGhlIHNldCBpcwogIC8vLyBpbW11dGFibGUuCiAgZmFjdG9yeSBFbnVtU2V0LmZyb21WYWx1ZXMoSXRlcmFibGU8RT4gdmFsdWVzLCB7Ym9vbCBmaXhlZDogZmFsc2V9KSB7CiAgICBpZiAoZml4ZWQpIHsKICAgICAgcmV0dXJuIG5ldyBfQ29uc3RFbnVtU2V0PEU+LmZyb21WYWx1ZXModmFsdWVzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgX0VudW1TZXQ8RT4uZnJvbVZhbHVlcyh2YWx1ZXMpOwogICAgfQogIH0KCiAgY29uc3QgRW51bVNldC5fKCk7CgogIC8vLyBUaGUgYml0IG1hc2sgb2YgdGhlIHNoaWZ0ZWQgaW5kaWNlcyBmb3IgdGhlIGVudW0gdmFsdWVzIGluIHRoaXMgc2V0LgogIGludCBnZXQgdmFsdWU7CgogIC8vLyBTZXRzIHRoZSBlbnVtIHZhbHVlcyBpbiB0aGlzIHNldCB0aHJvdWdoIGEgYml0IG1hc2sgb2YgdGhlIHNoaWZ0ZWQgZW51bQogIC8vLyB2YWx1ZSBpbmRpY2VzLgogIHZvaWQgc2V0IHZhbHVlKGludCBtYXNrKTsKCiAgLy8vIEFkZHMgW2VudW1WYWx1ZV0gdG8gdGhpcyBzZXQuIFJldHVybnMgYHRydWVgIGlmIHRoZSBzZXQgd2FzIGNoYW5nZWQgYnkKICAvLy8gdGhpcyBhY3Rpb24uCiAgYm9vbCBhZGQoRSBlbnVtVmFsdWUpOwoKICAvLy8gQWRkcyBhbGwgZW51bSB2YWx1ZXMgaW4gW3NldF0gdG8gdGhpcyBzZXQuCiAgdm9pZCBhZGRBbGwoRW51bVNldDxFPiBzZXQpOwoKICAvLy8gUmVtb3ZlcyBbZW51bVZhbHVlXSBmcm9tIHRoaXMgc2V0LiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2V0IHdhcyBjaGFuZ2VkCiAgLy8vIGJ5IHRoaXMgYWN0aW9uLgogIGJvb2wgcmVtb3ZlKEUgZW51bVZhbHVlKTsKCiAgLy8vIFJlbW92ZXMgYWxsIGVudW0gdmFsdWVzIGluIFtzZXRdIGZyb20gdGhpcyBzZXQuIFRoZSBzZXQgb2YgcmVtb3ZlZCB2YWx1ZXMKICAvLy8gaXMgcmV0dXJuZWQuCiAgRW51bVNldDxFPiByZW1vdmVBbGwoRW51bVNldDxFPiBzZXQpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBzZXQgY29udGFpbmluZyBhbGwgdmFsdWVzIGluIGJvdGggdGhpcyBhbmQgdGhlIFtvdGhlcl0gc2V0LgogIEVudW1TZXQ8RT4gaW50ZXJzZWN0aW9uKEVudW1TZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiBuZXcgRW51bVNldC5mcm9tVmFsdWUodmFsdWUgJiBvdGhlci52YWx1ZSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyBzZXQgY29udGFpbmluZyBhbGwgdmFsdWVzIGVpdGhlciBpbiB0aGlzIHNldCBvciBpbiB0aGUKICAvLy8gW290aGVyXSBzZXQuCiAgRW51bVNldDxFPiB1bmlvbihFbnVtU2V0PEU+IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IEVudW1TZXQuZnJvbVZhbHVlKHZhbHVlIHwgb3RoZXIudmFsdWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSBuZXcgc2V0IGNvbnRhaW5pbmcgYWxsIHZhbHVlcyBpbiB0aGlzIHNldCB0aGF0IGFyZSBub3QgaW4gdGhlCiAgLy8vIFtvdGhlcl0gc2V0LgogIEVudW1TZXQ8RT4gbWludXMoRW51bVNldDxFPiBvdGhlcikgewogICAgcmV0dXJuIG5ldyBFbnVtU2V0LmZyb21WYWx1ZSh2YWx1ZSAmIH5vdGhlci52YWx1ZSk7CiAgfQoKICAvLy8gQ2xlYXJzIHRoaXMgc2V0LgogIHZvaWQgY2xlYXIoKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbnVtVmFsdWVdIGlzIGluIHRoaXMgc2V0LgogIGJvb2wgY29udGFpbnMoRSBlbnVtVmFsdWUpIHsKICAgIHJldHVybiAodmFsdWUgJiAoMSA8PCAoZW51bVZhbHVlIGFzIGR5bmFtaWMpLmluZGV4KSkgIT0gMDsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIHZhbHVlcyBpcyBpbiB0aGlzIHNldCB1c2luZyBbdmFsdWVzXSB0bwogIC8vLyBjb252ZXJ0IHRoZSBzdG9yZWQgaW5kaWNlcyB0byBlbnVtIHZhbHVlcy4KICAvLy8KICAvLy8gVGhlIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkIHdpdGggdGhlIGB2YWx1ZXNgIHByb3BlcnR5IG9mIHRoZSBlbnVtCiAgLy8vIGNsYXNzIGFzIGFyZ3VtZW50OgogIC8vLwogIC8vLyAgICAgRW51bVNldDxFbnVtQ2xhc3M+IHNldCA9IC4uLgogIC8vLyAgICAgSXRlcmFibGU8RW51bUNsYXNzPiBpdGVyYWJsZSA9IHNldC5pdGVyYWJsZShFbnVtQ2xhc3MudmFsdWVzKTsKICAvLy8KICBJdGVyYWJsZTxFPiBpdGVyYWJsZShMaXN0PEU+IHZhbHVlcykgewogICAgcmV0dXJuIG5ldyBfRW51bVNldEl0ZXJhYmxlKHRoaXMsIHZhbHVlcyk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBhbmQgW290aGVyXSBoYXZlIGFueSBlbGVtZW50cyBpbiBjb21tb24uCiAgYm9vbCBpbnRlcnNlY3RzKEVudW1TZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiAodmFsdWUgJiBvdGhlci52YWx1ZSkgIT0gMDsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIHNldCBpcyBlbXB0eS4KICBib29sIGdldCBpc0VtcHR5ID0+IHZhbHVlID09IDA7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIHNldCBpcyBub3QgZW1wdHkuCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiB2YWx1ZSAhPSAwOwoKICAvLy8gUmV0dXJucyBhIG5ldyBtdXRhYmxlIGVudW0gc2V0IHRoYXQgY29udGFpbnMgdGhlIHZhbHVlcyBvZiB0aGlzIHNldC4KICBFbnVtU2V0PEU+IGNsb25lKCkgPT4gbmV3IEVudW1TZXQ8RT4uZnJvbVZhbHVlKHZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB2YWx1ZS5oYXNoQ29kZSAqIDE5OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEVudW1TZXQ8RT4pIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gJzAnOwogICAgaW50IGluZGV4ID0gdmFsdWUuYml0TGVuZ3RoIC0gMTsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGludCBtYXNrID0gMSA8PCBpbmRleDsKICAgIHdoaWxlIChpbmRleCA+PSAwKSB7CiAgICAgIHNiLndyaXRlKCh2YWx1ZSAmIG1hc2spICE9IDAgPyAnMScgOiAnMCcpOwogICAgICBpbmRleC0tOwogICAgICBtYXNrID4+PSAxOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gTXV0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiBbRW51bVNldF0uCmNsYXNzIF9FbnVtU2V0PEU+IGV4dGVuZHMgRW51bVNldDxFPiB7CiAgaW50IF92YWx1ZTsKCiAgX0VudW1TZXQoKSA6IHRoaXMuZnJvbVZhbHVlKDApOwoKICBfRW51bVNldC5mcm9tVmFsdWUodGhpcy5fdmFsdWUpIDogc3VwZXIuXygpOwoKICBfRW51bVNldC5mcm9tVmFsdWVzKEl0ZXJhYmxlPEU+IHZhbHVlcykKICAgICAgOiB0aGlzLl92YWx1ZSA9IDAsCiAgICAgICAgc3VwZXIuXygpIHsKICAgIHZhbHVlcy5mb3JFYWNoKGFkZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHZhbHVlID0+IF92YWx1ZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXQgdmFsdWUoaW50IG1hc2spIHsKICAgIF92YWx1ZSA9IG1hc2s7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFkZChFIGVudW1WYWx1ZSkgewogICAgaW50IGJlZm9yZSA9IF92YWx1ZTsKICAgIF92YWx1ZSB8PSAxIDw8IChlbnVtVmFsdWUgYXMgZHluYW1pYykuaW5kZXg7CiAgICByZXR1cm4gX3ZhbHVlICE9IGJlZm9yZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQWxsKEVudW1TZXQ8RT4gc2V0KSB7CiAgICBfdmFsdWUgfD0gc2V0LnZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZW1vdmUoRSBlbnVtVmFsdWUpIHsKICAgIGludCBiZWZvcmUgPSBfdmFsdWU7CiAgICBfdmFsdWUgJj0gfigxIDw8IChlbnVtVmFsdWUgYXMgZHluYW1pYykuaW5kZXgpOwogICAgcmV0dXJuIF92YWx1ZSAhPSBiZWZvcmU7CiAgfQoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PEU+IHJlbW92ZUFsbChFbnVtU2V0PEU+IHNldCkgewogICAgaW50IHJlbW92ZWQgPSBfdmFsdWUgJiBzZXQudmFsdWU7CiAgICBfdmFsdWUgJj0gfnNldC52YWx1ZTsKICAgIHJldHVybiBuZXcgRW51bVNldDxFPi5mcm9tVmFsdWUocmVtb3ZlZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgX3ZhbHVlID0gMDsKICB9Cn0KCi8vLyBJbW11dGFibGUgaW1wbGVtZW50YXRpb24gb2YgW0VudW1TZXRdLgpjbGFzcyBfQ29uc3RFbnVtU2V0PEU+IGV4dGVuZHMgRW51bVNldDxFPiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IHZhbHVlOwoKICBjb25zdCBfQ29uc3RFbnVtU2V0KHRoaXMudmFsdWUpIDogc3VwZXIuXygpOwoKICBmYWN0b3J5IF9Db25zdEVudW1TZXQuZnJvbVZhbHVlcyhJdGVyYWJsZTxFPiB2YWx1ZXMpIHsKICAgIGludCB2YWx1ZSA9IDA7CiAgICB2b2lkIGFkZChFIGVudW1WYWx1ZSkgewogICAgICBpZiAoZW51bVZhbHVlICE9IG51bGwpIHsKICAgICAgICB2YWx1ZSB8PSAxIDw8IChlbnVtVmFsdWUgYXMgZHluYW1pYykuaW5kZXg7CiAgICAgIH0KICAgIH0KCiAgICB2YWx1ZXMuZm9yRWFjaChhZGQpOwogICAgcmV0dXJuIG5ldyBfQ29uc3RFbnVtU2V0KHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IHZhbHVlKGludCBtYXNrKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignRW51bVNldC52YWx1ZT0nKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWRkKEUgZW51bVZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignRW51bVNldC5hZGQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQWxsKEVudW1TZXQ8RT4gc2V0KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignRW51bVNldC5hZGRBbGwnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoaXNFbXB0eSkgewogICAgICAvLyBXZSBhbGxvdyB0aGlzIG5vLW9wIG9wZXJhdGlvbiBvbiBhbiBpbW11dGFibGUgc2V0IHRvIHN1cHBvcnQgdXNpbmcgYQogICAgICAvLyBjb25zdGFudCBlbXB0eSBzZXQgdG9nZXRoZXIgd2l0aCBtdXRhYmxlIHNldHMgd2hlcmUgYXBwbGljYWJsZS4KICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdFbnVtU2V0LmNsZWFyJyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHJlbW92ZShFIGVudW1WYWx1ZSkgewogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgLy8gV2UgYWxsb3cgdGhpcyBuby1vcCBvcGVyYXRpb24gb24gYW4gaW1tdXRhYmxlIHNldCB0byBzdXBwb3J0IHVzaW5nIGEKICAgICAgLy8gY29uc3RhbnQgZW1wdHkgc2V0IHRvZ2V0aGVyIHdpdGggbXV0YWJsZSBzZXRzIHdoZXJlIGFwcGxpY2FibGUuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdFbnVtU2V0LnJlbW92ZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgRW51bVNldDxFPiByZW1vdmVBbGwoRW51bVNldDxFPiBzZXQpIHsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIC8vIFdlIGFsbG93IHRoaXMgbm8tb3Agb3BlcmF0aW9uIG9uIGFuIGltbXV0YWJsZSBzZXQgdG8gc3VwcG9ydCB1c2luZyBhCiAgICAgIC8vIGNvbnN0YW50IGVtcHR5IHNldCB0b2dldGhlciB3aXRoIG11dGFibGUgc2V0cyB3aGVyZSBhcHBsaWNhYmxlLgogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGlmIChzZXQuaXNFbXB0eSkgewogICAgICAvLyBXZSBhbGxvdyB0aGlzIG5vLW9wIG9wZXJhdGlvbiBvbiBhbiBpbW11dGFibGUgc2V0IHRvIHN1cHBvcnQgdXNpbmcgYQogICAgICAvLyBjb25zdGFudCBlbXB0eSBzZXQgdG9nZXRoZXIgd2l0aCBtdXRhYmxlIHNldHMgd2hlcmUgYXBwbGljYWJsZS4KICAgICAgcmV0dXJuIHNldC5jbG9uZSgpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0VudW1TZXQucmVtb3ZlQWxsJyk7CiAgfQp9CgpjbGFzcyBfRW51bVNldEl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGVCYXNlPEU+IHsKICBmaW5hbCBFbnVtU2V0PEU+IF9lbnVtU2V0OwogIGZpbmFsIExpc3Q8RT4gX3ZhbHVlczsKCiAgX0VudW1TZXRJdGVyYWJsZSh0aGlzLl9lbnVtU2V0LCB0aGlzLl92YWx1ZXMpOwoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9FbnVtU2V0SXRlcmF0b3IoX2VudW1TZXQudmFsdWUsIF92YWx1ZXMpOwp9CgpjbGFzcyBfRW51bVNldEl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGludCBfdmFsdWU7CiAgaW50IF9pbmRleDsKICBpbnQgX21hc2s7CiAgZmluYWwgTGlzdDxFPiBfdmFsdWVzOwogIEUgX2N1cnJlbnQ7CgogIF9FbnVtU2V0SXRlcmF0b3IodGhpcy5fdmFsdWUsIHRoaXMuX3ZhbHVlcyk7CgogIEBvdmVycmlkZQogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX3ZhbHVlID09IDApIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9tYXNrID09IG51bGwpIHsKICAgICAgICBfaW5kZXggPSBfdmFsdWUuYml0TGVuZ3RoIC0gMTsKICAgICAgICBfbWFzayA9IDEgPDwgX2luZGV4OwogICAgICB9CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgd2hpbGUgKF9pbmRleCA+PSAwKSB7CiAgICAgICAgaWYgKF9tYXNrICYgX3ZhbHVlICE9IDApIHsKICAgICAgICAgIF9jdXJyZW50ID0gX3ZhbHVlc1tfaW5kZXhdOwogICAgICAgIH0KICAgICAgICBfbWFzayA+Pj0gMTsKICAgICAgICBfaW5kZXgtLTsKICAgICAgICBpZiAoX2N1cnJlbnQgIT0gbnVsbCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBfY3VycmVudCAhPSBudWxsOwogICAgfQogIH0KfQqBLgBOTjwBHgEaAUocJCMBN0ABOj0BTBFIETYNMQYEARUBSxEBThUcAU0TGQExHwFPFhwBUBMoAVAuNwQBSxMnNwQBThMnOAQBFxABNB8/BAFLMQZMGQYnSQYpLwQBRiYnBAErIgEvJQFLOQEMKwEMHC0sIQQBDBYgJSobGTEPEgYaBAIBKScOASIBLwEqGRQZBAEMGwEMHRMEAQwaGTEdBAEMIBkEAQwdGTQdBAEMKSYaLgQBDBEQBAIBKywMEwEvATkTHB80CAYBGSUEAQwdMgQBDBovBAEMIDIEAQwRE05JDTMGBAEMHRNOSRQGMgQBDCkTTkkTBhdOSRoGNQQCATQdGQExAQxNAgEzDg4NGQ4BLwEMHQEMFBcUDRsnHQgXHCMmChUSIBEKCB8GBAIBJnBhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvZW51bXNldC5kYXJ0MXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2VsZW1lbnRzL25hbWVzLmRhcnSPnC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuZWxlbWVudHMubmFtZXM7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBzaG93ICRfOwoKaW1wb3J0ICdlbnRpdGllcy5kYXJ0JyBzaG93IExpYnJhcnlFbnRpdHk7CgovLy8gQSBbTmFtZV0gcmVwcmVzZW50cyB0aGUgYWJzdHJhY3Rpb24gb2YgYSBEYXJ0IGlkZW50aWZpZXIgd2hpY2ggdGFrZXMgcHJpdmFjeQovLy8gYW5kIHNldHRlciBpbnRvIGFjY291bnQuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFRyeSB0byBzaGFyZSBsb2dpYyB3aXRoIFtTZWxlY3Rvcl0uCmFic3RyYWN0IGNsYXNzIE5hbWUgewogIC8vLyBDcmVhdGUgYSBbTmFtZV0gZm9yIGFuIGlkZW50aWZpZXIgW3RleHRdLiBJZiBbdGV4dF0gYmVnaW5zIHdpdGggJ18nIGEKICAvLy8gcHJpdmF0ZSBuYW1lIHdpdGggcmVzcGVjdCB0byBbbGlicmFyeV0gaXMgY3JlYXRlZC4gSWYgW2lzU2V0dGVyXSBpcyBgdHJ1ZWAKICAvLy8gdGhlIGNyZWF0ZWQgbmFtZSByZXByZXNlbnRzIHRoZSBzZXR0ZXIgbmFtZSAndGV4dD0nLgogIGZhY3RvcnkgTmFtZShTdHJpbmcgdGV4dCwgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCB7Ym9vbCBpc1NldHRlcjogZmFsc2V9KSB7CiAgICBpZiAoaXNQcml2YXRlTmFtZSh0ZXh0KSkgewogICAgICByZXR1cm4gbmV3IFByaXZhdGVOYW1lKHRleHQsIGxpYnJhcnksIGlzU2V0dGVyOiBpc1NldHRlcik7CiAgICB9CiAgICByZXR1cm4gbmV3IFB1YmxpY05hbWUodGV4dCwgaXNTZXR0ZXI6IGlzU2V0dGVyKTsKICB9CgogIC8vLyBUaGUgdGV4dCBvZiB0aGUgbmFtZSB3aXRob3V0IHByZWZpeGVkIGxpYnJhcnkgbmFtZSBvciBzdWZmaXhlZCAnPScgaWYKICAvLy8gYXBwbGljYWJsZS4KICBTdHJpbmcgZ2V0IHRleHQ7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyBuYW1lIHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgYSBzZXR0ZXIuCiAgYm9vbCBnZXQgaXNTZXR0ZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBnZXR0ZXIgbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgbmFtZS4gSWYgdGhpcyBuYW1lIGlzIGEKICAvLy8gc2V0dGVyIG5hbWUgJ3Y9JyB0aGVuIHRoZSBuYW1lICd2JyBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIHRoZSBuYW1lIGl0c2VsZgogIC8vLyBpcyByZXR1cm5lZC4KICBOYW1lIGdldCBnZXR0ZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBzZWV0ZXIgbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgbmFtZS4gSWYgdGhpcyBuYW1lIGlzIGEKICAvLy8gZ2V0dGVyIG5hbWUgJ3YnIHRoZW4gdGhlIG5hbWUgJ3Y9JyBpcyByZXR1cm5lZCwgb3RoZXJ3c2llIHRoZSBuYW1lIGl0c2VsZgogIC8vLyBpcyByZXR1cm5lZC4KICBOYW1lIGdldCBzZXR0ZXI7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRpdHkgb2YgdGhpcyBuYW1lIGlzIGFjY2Vzc2libGUgZnJvbSBsaWJyYXJ5CiAgLy8vIFtlbGVtZW50XS4KICBib29sIGlzQWNjZXNzaWJsZUZyb20oTGlicmFyeUVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbmFtZSBpcyBwcml2YXRlLgogIGJvb2wgZ2V0IGlzUHJpdmF0ZTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbmFtZSBpcyB0aGUgc2FtZSBhcyBbb3RoZXJdIG5vdCB0YWtpbmcgdGhlIGxpYnJhcnkKICAvLy8gcHJpdmFjeSBpbnRvIGFjY291bnQuCiAgYm9vbCBpc1NpbWlsYXJUbyhOYW1lIG90aGVyKTsKICBpbnQgZ2V0IHNpbWlsYXJIYXNoQ29kZTsKCiAgTGlicmFyeUVudGl0eSBnZXQgbGlicmFyeTsKCiAgLy8vIFJldHVybnMgYHRydWVgIHdoZW4gW3NdIGlzIHByaXZhdGUgaWYgdXNlZCBhcyBhbiBpZGVudGlmaWVyLgogIHN0YXRpYyBib29sIGlzUHJpdmF0ZU5hbWUoU3RyaW5nIHMpID0+ICFzLmlzRW1wdHkgJiYgcy5jb2RlVW5pdEF0KDApID09ICRfOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgd2hlbiBbc10gaXMgcHVibGljIGlmIHVzZWQgYXMgYW4gaWRlbnRpZmllci4KICBzdGF0aWMgYm9vbCBpc1B1YmxpY05hbWUoU3RyaW5nIHMpID0+ICFpc1ByaXZhdGVOYW1lKHMpOwp9CgpjbGFzcyBQdWJsaWNOYW1lIGltcGxlbWVudHMgTmFtZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIHRleHQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc1NldHRlcjsKCiAgY29uc3QgUHVibGljTmFtZSh0aGlzLnRleHQsIHt0aGlzLmlzU2V0dGVyOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBOYW1lIGdldCBnZXR0ZXIgPT4gaXNTZXR0ZXIgPyBuZXcgUHVibGljTmFtZSh0ZXh0KSA6IHRoaXM7CgogIEBvdmVycmlkZQogIE5hbWUgZ2V0IHNldHRlciA9PiBpc1NldHRlciA/IHRoaXMgOiBuZXcgUHVibGljTmFtZSh0ZXh0LCBpc1NldHRlcjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNBY2Nlc3NpYmxlRnJvbShMaWJyYXJ5RW50aXR5IGVsZW1lbnQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBzaW1pbGFySGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgUHVibGljTmFtZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGlzU2ltaWxhclRvKG90aGVyKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTaW1pbGFyVG8oTmFtZSBvdGhlcikgPT4KICAgICAgdGV4dCA9PSBvdGhlci50ZXh0ICYmIGlzU2V0dGVyID09IG90aGVyLmlzU2V0dGVyOwogIEBvdmVycmlkZQogIGludCBnZXQgc2ltaWxhckhhc2hDb2RlID0+IHRleHQuaGFzaENvZGUgKyAxMSAqIGlzU2V0dGVyLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBsaWJyYXJ5ID0+IG51bGw7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGlzU2V0dGVyID8gJyR0ZXh0PScgOiB0ZXh0Owp9CgpjbGFzcyBQcml2YXRlTmFtZSBleHRlbmRzIFB1YmxpY05hbWUgewogIEBvdmVycmlkZQogIGZpbmFsIExpYnJhcnlFbnRpdHkgbGlicmFyeTsKCiAgUHJpdmF0ZU5hbWUoU3RyaW5nIHRleHQsIHRoaXMubGlicmFyeSwge2Jvb2wgaXNTZXR0ZXI6IGZhbHNlfSkKICAgICAgOiBzdXBlcih0ZXh0LCBpc1NldHRlcjogaXNTZXR0ZXIpOwoKICBAb3ZlcnJpZGUKICBOYW1lIGdldCBnZXR0ZXIgPT4gaXNTZXR0ZXIgPyBuZXcgUHJpdmF0ZU5hbWUodGV4dCwgbGlicmFyeSkgOiB0aGlzOwoKICBAb3ZlcnJpZGUKICBOYW1lIGdldCBzZXR0ZXIgewogICAgcmV0dXJuIGlzU2V0dGVyID8gdGhpcyA6IG5ldyBQcml2YXRlTmFtZSh0ZXh0LCBsaWJyYXJ5LCBpc1NldHRlcjogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzQWNjZXNzaWJsZUZyb20oTGlicmFyeUVudGl0eSBlbGVtZW50KSA9PiBsaWJyYXJ5ID09IGVsZW1lbnQ7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHN1cGVyLmhhc2hDb2RlICsgMTMgKiBsaWJyYXJ5Lmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIFByaXZhdGVOYW1lKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3VwZXIgPT0gKG90aGVyKSAmJiBsaWJyYXJ5ID09IG90aGVyLmxpYnJhcnk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtsaWJyYXJ5Lm5hbWV9IyR7c3VwZXIudG9TdHJpbmcoKX0nOwp9CoCLAE5OPAEgAUIBKwFRHTwWTFE7TR9BBjUEAUwSEwE+FQFMUBMTAUxQExMBShEwAS4WAVAcIBsBHQFDTgFCOwIBIwwVDBcBNwEMPQEMTQEMOAEMHwEMJwEMHCwfBAEMIjgMRQEMJQEMMwIBJwwfAUEpAQxHAQwUTQQBDEYBDB4BDD4BDBwtOQQBDD4CAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9uYW1lcy5kYXJ0OnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnShsS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY2FsbF9zdHJ1Y3R1cmU7CgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IE5hbWVzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnIHNob3cgUGFyYW1ldGVyU3RydWN0dXJlOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKCi8vLyBUaGUgc3RydWN0dXJlIG9mIHRoZSBhcmd1bWVudHMgYXQgYSBjYWxsLXNpdGUuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCB0aGVzZSBiZSBjYWNoZWQ/Ci8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCBpc0dldHRlci9pc1NldHRlciBiZSBwYXJ0IG9mIHRoZSBjYWxsIHN0cnVjdHVyZQovLyBpbnN0ZWFkIG9mIHRoZSBzZWxlY3Rvcj8KY2xhc3MgQ2FsbFN0cnVjdHVyZSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDYWxsU3RydWN0dXJlXSBvYmplY3RzIGluIGEgZGVidWdnaW5nCiAgLy8vIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NhbGwtc3RydWN0dXJlJzsKCiAgc3RhdGljIGNvbnN0IENhbGxTdHJ1Y3R1cmUgTk9fQVJHUyA9IGNvbnN0IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCgwKTsKICBzdGF0aWMgY29uc3QgQ2FsbFN0cnVjdHVyZSBPTkVfQVJHID0gY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDEpOwogIHN0YXRpYyBjb25zdCBDYWxsU3RydWN0dXJlIFRXT19BUkdTID0gY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDIpOwogIHN0YXRpYyBjb25zdCBDYWxsU3RydWN0dXJlIFRIUkVFX0FSR1MgPSBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMyk7CiAgc3RhdGljIGNvbnN0IENhbGxTdHJ1Y3R1cmUgRk9VUl9BUkdTID0gY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDQpOwoKICAvLy8gVGhlIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyBvZiB0aGUgY2FsbC4KICBmaW5hbCBpbnQgdHlwZUFyZ3VtZW50Q291bnQ7CgogIC8vLyBUaGUgbnVtYmVycyBvZiBhcmd1bWVudHMgb2YgdGhlIGNhbGwuIEluY2x1ZGVzIG5hbWVkIGFyZ3VtZW50cy4KICBmaW5hbCBpbnQgYXJndW1lbnRDb3VudDsKCiAgLy8vIFRoZSBudW1iZXIgb2YgbmFtZWQgYXJndW1lbnRzIG9mIHRoZSBjYWxsLgogIGludCBnZXQgbmFtZWRBcmd1bWVudENvdW50ID0+IDA7CgogIC8vLyBUaGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnQgb2YgdGhlIGNhbGwuCiAgaW50IGdldCBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9PiBhcmd1bWVudENvdW50OwoKICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQodGhpcy5hcmd1bWVudENvdW50LCBbdGhpcy50eXBlQXJndW1lbnRDb3VudCA9IDBdKTsKCiAgZmFjdG9yeSBDYWxsU3RydWN0dXJlKGludCBhcmd1bWVudENvdW50LAogICAgICBbTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQgPSAwXSkgewogICAgaWYgKG5hbWVkQXJndW1lbnRzID09IG51bGwgfHwgbmFtZWRBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICByZXR1cm4gbmV3IENhbGxTdHJ1Y3R1cmUudW5uYW1lZChhcmd1bWVudENvdW50LCB0eXBlQXJndW1lbnRDb3VudCk7CiAgICB9CiAgICByZXR1cm4gbmV3IE5hbWVkQ2FsbFN0cnVjdHVyZSgKICAgICAgICBhcmd1bWVudENvdW50LCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50Q291bnQpOwogIH0KCiAgLy8vIERlc2VyaWFsaXplcyBhIFtDYWxsU3RydWN0dXJlXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENhbGxTdHJ1Y3R1cmUucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGludCBhcmd1bWVudENvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkU3RyaW5ncygpOwogICAgaW50IHR5cGVBcmd1bWVudENvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2FsbFN0cnVjdHVyZShhcmd1bWVudENvdW50LCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50Q291bnQpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbQ2FsbFN0cnVjdHVyZV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVJbnQoYXJndW1lbnRDb3VudCk7CiAgICBzaW5rLndyaXRlU3RyaW5ncyhuYW1lZEFyZ3VtZW50cyk7CiAgICBzaW5rLndyaXRlSW50KHR5cGVBcmd1bWVudENvdW50KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBjYWxsIHN0cnVjdHVyZSBpcyBub3JtYWxpemVkLCB0aGF0IGlzLCBpdHMgbmFtZWQKICAvLy8gYXJndW1lbnRzIGFyZSBzb3J0ZWQuCiAgYm9vbCBnZXQgaXNOb3JtYWxpemVkID0+IHRydWU7CgogIC8vLyBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhpcyBjYWxsIHN0cnVjdHVyZS4KICAvLy8KICAvLy8gQSBbQ2FsbFN0cnVjdHVyZV0gaXMgbm9ybWFsaXplZCBpZiBpdHMgbmFtZWQgYXJndW1lbnRzIGFyZSBzb3J0ZWQuCiAgQ2FsbFN0cnVjdHVyZSB0b05vcm1hbGl6ZWQoKSA9PiB0aGlzOwoKICBDYWxsU3RydWN0dXJlIHdpdGhUeXBlQXJndW1lbnRDb3VudChpbnQgdHlwZUFyZ3VtZW50Q291bnQpID0+CiAgICAgIG5ldyBDYWxsU3RydWN0dXJlKGFyZ3VtZW50Q291bnQsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRDb3VudCk7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBjYWxsIGhhcyBuYW1lZCBhcmd1bWVudHMuCiAgYm9vbCBnZXQgaXNOYW1lZCA9PiBmYWxzZTsKCiAgLy8vIGB0cnVlYCBpZiB0aGlzIGNhbGwgaGFzIG5vIG5hbWVkIGFyZ3VtZW50cy4KICBib29sIGdldCBpc1VubmFtZWQgPT4gdHJ1ZTsKCiAgLy8vIFRoZSBuYW1lcyBvZiB0aGUgbmFtZWQgYXJndW1lbnRzIGluIGNhbGwtc2l0ZSBvcmRlci4KICBMaXN0PFN0cmluZz4gZ2V0IG5hbWVkQXJndW1lbnRzID0+IGNvbnN0IDxTdHJpbmc+W107CgogIC8vLyBUaGUgbmFtZXMgb2YgdGhlIG5hbWVkIGFyZ3VtZW50cyBpbiBjYW5vbmljYWxpemVkIG9yZGVyLgogIExpc3Q8U3RyaW5nPiBnZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKSA9PiBjb25zdCA8U3RyaW5nPltdOwoKICBDYWxsU3RydWN0dXJlIGdldCBub25HZW5lcmljID0+IHR5cGVBcmd1bWVudENvdW50ID09IDAKICAgICAgPyB0aGlzCiAgICAgIDogbmV3IENhbGxTdHJ1Y3R1cmUoYXJndW1lbnRDb3VudCwgbmFtZWRBcmd1bWVudHMpOwoKICAvLy8gU2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2UgZm9yIHRlc3RpbmcuCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJygnKTsKICAgIHNiLndyaXRlKHBvc2l0aW9uYWxBcmd1bWVudENvdW50KTsKICAgIGlmIChuYW1lZEFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgIHNiLndyaXRlKGdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpLmpvaW4oJywnKSk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gQSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnQgc3RydWN0dXJlLgogIFN0cmluZyBzdHJ1Y3R1cmVUb1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdhcml0eT0kYXJndW1lbnRDb3VudCcpOwogICAgaWYgKHR5cGVBcmd1bWVudENvdW50ICE9IDApIHsKICAgICAgc2Iud3JpdGUoJywgdHlwZXM9JHR5cGVBcmd1bWVudENvdW50Jyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdDYWxsU3RydWN0dXJlKCR7c3RydWN0dXJlVG9TdHJpbmcoKX0pJzsKCiAgU2VsZWN0b3IgZ2V0IGNhbGxTZWxlY3RvciA9PiBuZXcgU2VsZWN0b3IuY2FsbChOYW1lcy5jYWxsLCB0aGlzKTsKCiAgYm9vbCBtYXRjaChDYWxsU3RydWN0dXJlIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gdGhpcy5hcmd1bWVudENvdW50ID09IG90aGVyLmFyZ3VtZW50Q291bnQgJiYKICAgICAgICB0aGlzLm5hbWVkQXJndW1lbnRDb3VudCA9PSBvdGhlci5uYW1lZEFyZ3VtZW50Q291bnQgJiYKICAgICAgICB0aGlzLnR5cGVBcmd1bWVudENvdW50ID09IG90aGVyLnR5cGVBcmd1bWVudENvdW50ICYmCiAgICAgICAgc2FtZU5hbWVzKHRoaXMubmFtZWRBcmd1bWVudHMsIG90aGVyLm5hbWVkQXJndW1lbnRzKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIGhhc2ggY29kZT8KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBIYXNoaW5nLmxpc3RIYXNoKAogICAgICAgIG5hbWVkQXJndW1lbnRzLAogICAgICAgIEhhc2hpbmcub2JqZWN0SGFzaChhcmd1bWVudENvdW50LAogICAgICAgICAgICBIYXNoaW5nLm9iamVjdEhhc2godHlwZUFyZ3VtZW50Q291bnQsIG5hbWVkQXJndW1lbnRzLmxlbmd0aCkpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgQ2FsbFN0cnVjdHVyZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG1hdGNoKG90aGVyKTsKICB9CgogIGJvb2wgc2lnbmF0dXJlQXBwbGllcyhQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVycykgewogICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSBwYXJhbWV0ZXJzLnJlcXVpcmVkUGFyYW1ldGVyczsKICAgIGludCBvcHRpb25hbFBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVycy5vcHRpb25hbFBhcmFtZXRlcnM7CiAgICBpbnQgcGFyYW1ldGVyQ291bnQgPSByZXF1aXJlZFBhcmFtZXRlckNvdW50ICsgb3B0aW9uYWxQYXJhbWV0ZXJDb3VudDsKICAgIGlmIChhcmd1bWVudENvdW50ID4gcGFyYW1ldGVyQ291bnQpIHJldHVybiBmYWxzZTsKICAgIGlmIChwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA8IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlQXJndW1lbnRDb3VudCAhPSAwKSB7CiAgICAgIGlmICh0eXBlQXJndW1lbnRDb3VudCAhPSBwYXJhbWV0ZXJzLnR5cGVQYXJhbWV0ZXJzKSByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKHBhcmFtZXRlcnMubmFtZWRQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUKICAgICAgLy8gbm90IGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMuIFRoZXJlZm9yZSB0aGUKICAgICAgLy8gbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSBub3QgZ3JlYXRlciB0aGFuIHRoZQogICAgICAvLyBudW1iZXIgb2YgcGFyYW1ldGVycy4KICAgICAgYXNzZXJ0KHBvc2l0aW9uYWxBcmd1bWVudENvdW50IDw9IHBhcmFtZXRlckNvdW50KTsKICAgICAgcmV0dXJuIG5hbWVkQXJndW1lbnRzLmlzRW1wdHk7CiAgICB9IGVsc2UgewogICAgICBpZiAocG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPiByZXF1aXJlZFBhcmFtZXRlckNvdW50KSByZXR1cm4gZmFsc2U7CiAgICAgIGFzc2VydChwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9PSByZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgICAgaWYgKG5hbWVkQXJndW1lbnRDb3VudCA+IG9wdGlvbmFsUGFyYW1ldGVyQ291bnQpIHJldHVybiBmYWxzZTsKCiAgICAgIGludCBuYW1lSW5kZXggPSAwOwogICAgICBMaXN0PFN0cmluZz4gbmFtZWRQYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uYW1lZFBhcmFtZXRlcnM7CiAgICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCkpIHsKICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAgLy8gTm90ZTogd2Ugc3RhcnQgYXQgdGhlIGV4aXN0aW5nIGluZGV4IGJlY2F1c2UgYXJndW1lbnRzIGFyZSBzb3J0ZWQuCiAgICAgICAgd2hpbGUgKG5hbWVJbmRleCA8IG5hbWVkUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgIGlmIChuYW1lID09IG5hbWVkUGFyYW1ldGVyc1tuYW1lSW5kZXhdKSB7CiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBuYW1lSW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgc3RhdGljIGJvb2wgc2FtZU5hbWVzKExpc3Q8U3RyaW5nPiBmaXJzdCwgTGlzdDxTdHJpbmc+IHNlY29uZCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaXJzdC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZmlyc3RbaV0gIT0gc2Vjb25kW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8vLyBDYWxsIHN0cnVjdHVyZSB3aXRoIG5hbWVkIGFyZ3VtZW50cy4KY2xhc3MgTmFtZWRDYWxsU3RydWN0dXJlIGV4dGVuZHMgQ2FsbFN0cnVjdHVyZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzOwogIGZpbmFsIExpc3Q8U3RyaW5nPiBfb3JkZXJlZE5hbWVkQXJndW1lbnRzOwoKICBOYW1lZENhbGxTdHJ1Y3R1cmUoCiAgICAgIGludCBhcmd1bWVudENvdW50LCBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsIGludCB0eXBlQXJndW1lbnRDb3VudCkKICAgICAgOiB0aGlzLmludGVybmFsKAogICAgICAgICAgICBhcmd1bWVudENvdW50LCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50Q291bnQsIDxTdHJpbmc+W10pOwoKICBOYW1lZENhbGxTdHJ1Y3R1cmUuaW50ZXJuYWwoaW50IGFyZ3VtZW50Q291bnQsIHRoaXMubmFtZWRBcmd1bWVudHMsCiAgICAgIGludCB0eXBlQXJndW1lbnRDb3VudCwgdGhpcy5fb3JkZXJlZE5hbWVkQXJndW1lbnRzKQogICAgICA6IGFzc2VydChuYW1lZEFyZ3VtZW50cy5pc05vdEVtcHR5KSwKICAgICAgICBzdXBlci51bm5hbWVkKGFyZ3VtZW50Q291bnQsIHR5cGVBcmd1bWVudENvdW50KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOYW1lZCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VubmFtZWQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCBnZXQgbmFtZWRBcmd1bWVudENvdW50ID0+IG5hbWVkQXJndW1lbnRzLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9PiBhcmd1bWVudENvdW50IC0gbmFtZWRBcmd1bWVudENvdW50OwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05vcm1hbGl6ZWQgPT4gbmFtZWRBcmd1bWVudHMgPT0gX29yZGVyZWROYW1lZEFyZ3VtZW50czsKCiAgQG92ZXJyaWRlCiAgQ2FsbFN0cnVjdHVyZSB0b05vcm1hbGl6ZWQoKSA9PiBuZXcgTmFtZWRDYWxsU3RydWN0dXJlLmludGVybmFsKAogICAgICBhcmd1bWVudENvdW50LAogICAgICBnZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKSwKICAgICAgdHlwZUFyZ3VtZW50Q291bnQsCiAgICAgIGdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpKTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IGdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpIHsKICAgIGlmICghX29yZGVyZWROYW1lZEFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gX29yZGVyZWROYW1lZEFyZ3VtZW50czsKCiAgICBfb3JkZXJlZE5hbWVkQXJndW1lbnRzLmFkZEFsbChuYW1lZEFyZ3VtZW50cyk7CiAgICBfb3JkZXJlZE5hbWVkQXJndW1lbnRzLnNvcnQoKFN0cmluZyBmaXJzdCwgU3RyaW5nIHNlY29uZCkgewogICAgICByZXR1cm4gZmlyc3QuY29tcGFyZVRvKHNlY29uZCk7CiAgICB9KTsKICAgIHJldHVybiBfb3JkZXJlZE5hbWVkQXJndW1lbnRzOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHN0cnVjdHVyZVRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ2FyaXR5PSRhcmd1bWVudENvdW50LCBuYW1lZD1bJHtuYW1lZEFyZ3VtZW50cy5qb2luKCcsICcpfV0nKTsKICAgIGlmICh0eXBlQXJndW1lbnRDb3VudCAhPSAwKSB7CiAgICAgIHNiLndyaXRlKCcsIHR5cGVzPSR0eXBlQXJndW1lbnRDb3VudCcpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CoEBAE5OPAEgASo8LhwmATMwTxwWURMuAUdHSEpJATAfAUYbATEjATU0AVEBK0I8SgYjOwQBO0AXKjguFVAEATEoFSInJhMEAU4cIQE9BkkoAUBLAS8dATIeATs3AT8/ATkNOgE0GSoTJyIVNgYTGgQBLx8qJiIuBhoEAQxAAUQBJC04Pz0+BAErDBUdGCpMBAEMHC8ZBAE5QEBKNkgiSAYBLkJCQR85JQ1KQUUBGUE4HE41NBoTDBcKIggTBgQBQy0vBhEEAgEpMQwlLQEWTRdLAUY6KzkBDBwBDB8BDDcBDEkBDEUBDEMVIhkjAQwsSAEzQCYIIwQBDB8qTCIuBhoEAgExcGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydDxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnTAAHR6Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBDb25zdGFudCBzeXN0ZW0gZm9sbG93aW5nIHRoZSBzZW1hbnRpY3MgZm9yIERhcnQgY29kZSB0aGF0IGhhcyBiZWVuCi8vLyBjb21waWxlZCB0byBKYXZhU2NyaXB0LgpsaWJyYXJ5IGRhcnQyanMuY29uc3RhbnRfc3lzdGVtOwoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9vcGVyYXRvcnMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAndmFsdWVzLmRhcnQnOwoKZmluYWwgX0JJVFMzMiA9IG5ldyBCaWdJbnQuZnJvbSgweEZGRkZGRkZGKTsKCmNvbnN0IGFkZCA9IGNvbnN0IEFkZE9wZXJhdGlvbigpOwpjb25zdCBiaXRBbmQgPSBjb25zdCBCaXRBbmRPcGVyYXRpb24oKTsKY29uc3QgYml0Tm90ID0gY29uc3QgQml0Tm90T3BlcmF0aW9uKCk7CmNvbnN0IGJpdE9yID0gY29uc3QgQml0T3JPcGVyYXRpb24oKTsKY29uc3QgYml0WG9yID0gY29uc3QgQml0WG9yT3BlcmF0aW9uKCk7CmNvbnN0IGJvb2xlYW5BbmQgPSBjb25zdCBCb29sZWFuQW5kT3BlcmF0aW9uKCk7CmNvbnN0IGJvb2xlYW5PciA9IGNvbnN0IEJvb2xlYW5Pck9wZXJhdGlvbigpOwpjb25zdCBkaXZpZGUgPSBjb25zdCBEaXZpZGVPcGVyYXRpb24oKTsKY29uc3QgZXF1YWwgPSBjb25zdCBFcXVhbHNPcGVyYXRpb24oKTsKY29uc3QgZ3JlYXRlckVxdWFsID0gY29uc3QgR3JlYXRlckVxdWFsT3BlcmF0aW9uKCk7CmNvbnN0IGdyZWF0ZXIgPSBjb25zdCBHcmVhdGVyT3BlcmF0aW9uKCk7CmNvbnN0IGlkZW50aXR5ID0gY29uc3QgSWRlbnRpdHlPcGVyYXRpb24oKTsKY29uc3QgaWZOdWxsID0gY29uc3QgSWZOdWxsT3BlcmF0aW9uKCk7CmNvbnN0IGxlc3NFcXVhbCA9IGNvbnN0IExlc3NFcXVhbE9wZXJhdGlvbigpOwpjb25zdCBsZXNzID0gY29uc3QgTGVzc09wZXJhdGlvbigpOwpjb25zdCBtb2R1bG8gPSBjb25zdCBNb2R1bG9PcGVyYXRpb24oKTsKY29uc3QgbXVsdGlwbHkgPSBjb25zdCBNdWx0aXBseU9wZXJhdGlvbigpOwpjb25zdCBuZWdhdGUgPSBjb25zdCBOZWdhdGVPcGVyYXRpb24oKTsKY29uc3Qgbm90ID0gY29uc3QgTm90T3BlcmF0aW9uKCk7CmNvbnN0IHJlbWFpbmRlciA9IGNvbnN0IFJlbWFpbmRlck9wZXJhdGlvbigpOwpjb25zdCBzaGlmdExlZnQgPSBjb25zdCBTaGlmdExlZnRPcGVyYXRpb24oKTsKY29uc3Qgc2hpZnRSaWdodCA9IGNvbnN0IFNoaWZ0UmlnaHRPcGVyYXRpb24oKTsKY29uc3Qgc3VidHJhY3QgPSBjb25zdCBTdWJ0cmFjdE9wZXJhdGlvbigpOwpjb25zdCB0cnVuY2F0aW5nRGl2aWRlID0gY29uc3QgVHJ1bmNhdGluZ0RpdmlkZU9wZXJhdGlvbigpOwpjb25zdCBjb2RlVW5pdEF0ID0gY29uc3QgQ29kZVVuaXRBdE9wZXJhdGlvbigpOwpjb25zdCByb3VuZCA9IGNvbnN0IFJvdW5kT3BlcmF0aW9uKCk7CmNvbnN0IGFicyA9IGNvbnN0IFVuZm9sZGVkVW5hcnlPcGVyYXRpb24oJ2FicycpOwoKLy8vIFJldHVybnMgdHJ1ZSBpZiBbdmFsdWVdIHdpbGwgdHVybiBpbnRvIE5hTiBvciBpbmZpbml0eQovLy8gYXQgcnVudGltZS4KYm9vbCBfaW50ZWdlckJlY29tZXNOYW5PckluZmluaXR5KEJpZ0ludCB2YWx1ZSkgewogIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLnRvRG91YmxlKCk7CiAgcmV0dXJuIGRvdWJsZVZhbHVlLmlzTmFOIHx8IGRvdWJsZVZhbHVlLmlzSW5maW5pdGU7Cn0KCk51bUNvbnN0YW50VmFsdWUgX2NvbnZlcnRUb0phdmFTY3JpcHRDb25zdGFudChOdW1Db25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgaWYgKGNvbnN0YW50LmlzSW50KSB7CiAgICBJbnRDb25zdGFudFZhbHVlIGludENvbnN0YW50ID0gY29uc3RhbnQ7CiAgICBCaWdJbnQgaW50VmFsdWUgPSBpbnRDb25zdGFudC5pbnRWYWx1ZTsKICAgIGlmIChfaW50ZWdlckJlY29tZXNOYW5PckluZmluaXR5KGludFZhbHVlKSkgewogICAgICByZXR1cm4gbmV3IERvdWJsZUNvbnN0YW50VmFsdWUoaW50VmFsdWUudG9Eb3VibGUoKSk7CiAgICB9CiAgICAvLyBJZiB0aGUgaW50ZWdlciBsb3NlcyBwcmVjaXNpb24gd2l0aCBKYXZhU2NyaXB0IG51bWJlcnMsIHVzZQogICAgLy8gdGhlIGZsb29yZWQgdmVyc2lvbiBKYXZhU2NyaXB0IHdpbGwgdXNlLgogICAgQmlnSW50IGZsb29yVmFsdWUgPSBuZXcgQmlnSW50LmZyb20oaW50VmFsdWUudG9Eb3VibGUoKSk7CiAgICBpZiAoZmxvb3JWYWx1ZSAhPSBpbnRWYWx1ZSkgewogICAgICByZXR1cm4gbmV3IEludENvbnN0YW50VmFsdWUoZmxvb3JWYWx1ZSk7CiAgICB9CiAgfSBlbHNlIGlmIChjb25zdGFudC5pc0RvdWJsZSkgewogICAgRG91YmxlQ29uc3RhbnRWYWx1ZSBkb3VibGVSZXN1bHQgPSBjb25zdGFudDsKICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IGRvdWJsZVJlc3VsdC5kb3VibGVWYWx1ZTsKICAgIGlmICghZG91YmxlVmFsdWUuaXNJbmZpbml0ZSAmJgogICAgICAgICFkb3VibGVWYWx1ZS5pc05hTiAmJgogICAgICAgICFjb25zdGFudC5pc01pbnVzWmVybykgewogICAgICBkb3VibGUgdHJ1bmNhdGVkID0gZG91YmxlVmFsdWUudHJ1bmNhdGVUb0RvdWJsZSgpOwogICAgICBpZiAodHJ1bmNhdGVkID09IGRvdWJsZVZhbHVlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRDb25zdGFudFZhbHVlKG5ldyBCaWdJbnQuZnJvbSh0cnVuY2F0ZWQpKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gY29uc3RhbnQ7Cn0KCk51bUNvbnN0YW50VmFsdWUgY3JlYXRlSW50KEJpZ0ludCBpKSA9PgogICAgX2NvbnZlcnRUb0phdmFTY3JpcHRDb25zdGFudChuZXcgSW50Q29uc3RhbnRWYWx1ZShpKSk7Ck51bUNvbnN0YW50VmFsdWUgY3JlYXRlSW50RnJvbUludChpbnQgaSkgPT4gY3JlYXRlSW50KG5ldyBCaWdJbnQuZnJvbShpKSk7Ck51bUNvbnN0YW50VmFsdWUgX2NyZWF0ZUludDMyKEJpZ0ludCBpKSA9PiBuZXcgSW50Q29uc3RhbnRWYWx1ZShpICYgX0JJVFMzMik7Ck51bUNvbnN0YW50VmFsdWUgY3JlYXRlRG91YmxlKGRvdWJsZSBkKSA9PgogICAgX2NvbnZlcnRUb0phdmFTY3JpcHRDb25zdGFudChuZXcgRG91YmxlQ29uc3RhbnRWYWx1ZShkKSk7ClN0cmluZ0NvbnN0YW50VmFsdWUgY3JlYXRlU3RyaW5nKFN0cmluZyBzdHJpbmcpID0+CiAgICBuZXcgU3RyaW5nQ29uc3RhbnRWYWx1ZShzdHJpbmcpOwpCb29sQ29uc3RhbnRWYWx1ZSBjcmVhdGVCb29sKGJvb2wgdmFsdWUpID0+IG5ldyBCb29sQ29uc3RhbnRWYWx1ZSh2YWx1ZSk7Ck51bGxDb25zdGFudFZhbHVlIGNyZWF0ZU51bGwoKSA9PiBuZXcgTnVsbENvbnN0YW50VmFsdWUoKTsKTGlzdENvbnN0YW50VmFsdWUgY3JlYXRlTGlzdChJbnRlcmZhY2VUeXBlIHR5cGUsIExpc3Q8Q29uc3RhbnRWYWx1ZT4gdmFsdWVzKSA9PgogICAgbmV3IExpc3RDb25zdGFudFZhbHVlKHR5cGUsIHZhbHVlcyk7CgpDb25zdGFudFZhbHVlIGNyZWF0ZVR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsIERhcnRUeXBlIHR5cGUpIHsKICBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZSA9IGNvbW1vbkVsZW1lbnRzLnR5cGVMaXRlcmFsVHlwZTsKICByZXR1cm4gbmV3IFR5cGVDb25zdGFudFZhbHVlKHR5cGUsIGluc3RhbmNlVHlwZSk7Cn0KCi8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIFtjb25zdGFudF0gaXMgYW4gaW50ZWdlciBhdCBydW50aW1lLgovLy8KLy8vIEludGVnZXIgY2hlY2tzIHJlcG9ydCB0cnVlIGZvciAtMC4wLCBJTkZJTklUWSwgYW5kIC1JTkZJTklUWS4gIEF0Ci8vLyBydW50aW1lIGFuICdYIGlzIGludCcgY2hlY2sgaXMgaW1wbGVtZW50ZWQgYXM6Ci8vLwovLy8gdHlwZW9mKFgpID09PSAibnVtYmVyIiAmJiBNYXRoLmZsb29yKFgpID09PSBYCi8vLwovLy8gV2UgY29uc2lzdGVudGx5IG1hdGNoIHRoYXQgcnVudGltZSBzZW1hbnRpY3MgYXQgY29tcGlsZSB0aW1lIGFzIHdlbGwuCmJvb2wgaXNJbnQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgPT4KICAgIGNvbnN0YW50LmlzSW50IHx8CiAgICBjb25zdGFudC5pc01pbnVzWmVybyB8fAogICAgY29uc3RhbnQuaXNQb3NpdGl2ZUluZmluaXR5IHx8CiAgICBjb25zdGFudC5pc05lZ2F0aXZlSW5maW5pdHk7CgovLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBbY29uc3RhbnRdIGlzIGEgZG91YmxlIGF0IHJ1bnRpbWUuCmJvb2wgaXNEb3VibGUoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgPT4KICAgIGNvbnN0YW50LmlzRG91YmxlICYmICFjb25zdGFudC5pc01pbnVzWmVybzsKCi8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIFtjb25zdGFudF0gaXMgYSBzdHJpbmcgYXQgcnVudGltZS4KYm9vbCBpc1N0cmluZyhDb25zdGFudFZhbHVlIGNvbnN0YW50KSA9PiBjb25zdGFudC5pc1N0cmluZzsKCi8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIFtjb25zdGFudF0gaXMgYSBib29sZWFuIGF0IHJ1bnRpbWUuCmJvb2wgaXNCb29sKENvbnN0YW50VmFsdWUgY29uc3RhbnQpID0+IGNvbnN0YW50LmlzQm9vbDsKCi8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIFtjb25zdGFudF0gaXMgbnVsbCBhdCBydW50aW1lLgpib29sIGlzTnVsbChDb25zdGFudFZhbHVlIGNvbnN0YW50KSA9PiBjb25zdGFudC5pc051bGw7Cgpib29sIGlzU3VidHlwZShEYXJ0VHlwZXMgdHlwZXMsIERhcnRUeXBlIHMsIERhcnRUeXBlIHQpIHsKICAvLyBBdCBydW50aW1lLCBhbiBpbnRlZ2VyIGlzIGJvdGggYW4gaW50ZWdlciBhbmQgYSBkb3VibGU6IHRoZQogIC8vIGludGVnZXIgdHlwZSBjaGVjayBpcyBNYXRoLmZsb29yLCB3aGljaCB3aWxsIHJldHVybiB0cnVlIG9ubHkKICAvLyBmb3IgcmVhbCBpbnRlZ2VycywgYW5kIG91ciBkb3VibGUgdHlwZSBjaGVjayBpcyAndHlwZW9mIG51bWJlcicKICAvLyB3aGljaCB3aWxsIHJldHVybiB0cnVlIGZvciBib3RoIGludGVnZXJzIGFuZCBkb3VibGVzLgogIGlmIChzID09IHR5cGVzLmNvbW1vbkVsZW1lbnRzLmludFR5cGUgJiYKICAgICAgdCA9PSB0eXBlcy5jb21tb25FbGVtZW50cy5kb3VibGVUeXBlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZShzLCB0KTsKfQoKU2V0Q29uc3RhbnRWYWx1ZSBjcmVhdGVTZXQoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICBJbnRlcmZhY2VUeXBlIHNvdXJjZVR5cGUsIExpc3Q8Q29uc3RhbnRWYWx1ZT4gdmFsdWVzKSB7CiAgSW50ZXJmYWNlVHlwZSB0eXBlID0gY29tbW9uRWxlbWVudHMuZ2V0Q29uc3RhbnRTZXRUeXBlRm9yKHNvdXJjZVR5cGUpOwogIERhcnRUeXBlIGVsZW1lbnRUeXBlID0gdHlwZS50eXBlQXJndW1lbnRzLmZpcnN0OwogIEludGVyZmFjZVR5cGUgbWFwVHlwZSA9CiAgICAgIGNvbW1vbkVsZW1lbnRzLm1hcFR5cGUoZWxlbWVudFR5cGUsIGNvbW1vbkVsZW1lbnRzLm51bGxUeXBlKTsKICBMaXN0PE51bGxDb25zdGFudFZhbHVlPiBudWxscyA9IG5ldyBMaXN0PE51bGxDb25zdGFudFZhbHVlPi5maWxsZWQoCiAgICAgIHZhbHVlcy5sZW5ndGgsIGNvbnN0IE51bGxDb25zdGFudFZhbHVlKCkpOwogIE1hcENvbnN0YW50VmFsdWUgZW50cmllcyA9IGNyZWF0ZU1hcChjb21tb25FbGVtZW50cywgbWFwVHlwZSwgdmFsdWVzLCBudWxscyk7CiAgcmV0dXJuIG5ldyBKYXZhU2NyaXB0U2V0Q29uc3RhbnQodHlwZSwgZW50cmllcyk7Cn0KCk1hcENvbnN0YW50VmFsdWUgY3JlYXRlTWFwKAogICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICBJbnRlcmZhY2VUeXBlIHNvdXJjZVR5cGUsCiAgICBMaXN0PENvbnN0YW50VmFsdWU+IGtleXMsCiAgICBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcykgewogIGJvb2wgb25seVN0cmluZ0tleXMgPSB0cnVlOwogIENvbnN0YW50VmFsdWUgcHJvdG9WYWx1ZSA9IG51bGw7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICBkeW5hbWljIGtleSA9IGtleXNbaV07CiAgICBpZiAoa2V5LmlzU3RyaW5nKSB7CiAgICAgIGlmIChrZXkuc3RyaW5nVmFsdWUgPT0gSmF2YVNjcmlwdE1hcENvbnN0YW50LlBST1RPX1BST1BFUlRZKSB7CiAgICAgICAgcHJvdG9WYWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgb25seVN0cmluZ0tleXMgPSBmYWxzZTsKICAgICAgLy8gRG9uJ3QgaGFuZGxlIF9fcHJvdG9fXyB2YWx1ZXMgc3BlY2lhbGx5IGluIHRoZSBnZW5lcmFsIG1hcCBjYXNlLgogICAgICBwcm90b1ZhbHVlID0gbnVsbDsKICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBib29sIGhhc1Byb3RvS2V5ID0gKHByb3RvVmFsdWUgIT0gbnVsbCk7CiAgSW50ZXJmYWNlVHlwZSBrZXlzVHlwZTsKICBpZiAoc291cmNlVHlwZS50cmVhdEFzUmF3KSB7CiAgICBrZXlzVHlwZSA9IGNvbW1vbkVsZW1lbnRzLmxpc3RUeXBlKCk7CiAgfSBlbHNlIHsKICAgIGtleXNUeXBlID0gY29tbW9uRWxlbWVudHMubGlzdFR5cGUoc291cmNlVHlwZS50eXBlQXJndW1lbnRzLmZpcnN0KTsKICB9CiAgTGlzdENvbnN0YW50VmFsdWUga2V5c0xpc3QgPSBuZXcgTGlzdENvbnN0YW50VmFsdWUoa2V5c1R5cGUsIGtleXMpOwogIEludGVyZmFjZVR5cGUgdHlwZSA9IGNvbW1vbkVsZW1lbnRzLmdldENvbnN0YW50TWFwVHlwZUZvcihzb3VyY2VUeXBlLAogICAgICBoYXNQcm90b0tleTogaGFzUHJvdG9LZXksIG9ubHlTdHJpbmdLZXlzOiBvbmx5U3RyaW5nS2V5cyk7CiAgcmV0dXJuIG5ldyBKYXZhU2NyaXB0TWFwQ29uc3RhbnQoCiAgICAgIHR5cGUsIGtleXNMaXN0LCB2YWx1ZXMsIHByb3RvVmFsdWUsIG9ubHlTdHJpbmdLZXlzKTsKfQoKQ29uc3RhbnRWYWx1ZSBjcmVhdGVTeW1ib2woQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsIFN0cmluZyB0ZXh0KSB7CiAgSW50ZXJmYWNlVHlwZSB0eXBlID0gY29tbW9uRWxlbWVudHMuc3ltYm9sSW1wbGVtZW50YXRpb25UeXBlOwogIEZpZWxkRW50aXR5IGZpZWxkID0gY29tbW9uRWxlbWVudHMuc3ltYm9sRmllbGQ7CiAgQ29uc3RhbnRWYWx1ZSBhcmd1bWVudCA9IGNyZWF0ZVN0cmluZyh0ZXh0KTsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdHlwZSBhcmd1bWVudHMgd2hlbiBhbGwgdXNlcyBubyBsb25nZXIgZXhwZWN0CiAgLy8gYSBbRmllbGRFbGVtZW50XS4KICB2YXIgZmllbGRzID0gPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPntmaWVsZDogYXJndW1lbnR9OwogIHJldHVybiBuZXcgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlKHR5cGUsIGZpZWxkcyk7Cn0KClVuYXJ5T3BlcmF0aW9uIGxvb2t1cFVuYXJ5KFVuYXJ5T3BlcmF0b3Igb3BlcmF0b3IpIHsKICBzd2l0Y2ggKG9wZXJhdG9yLmtpbmQpIHsKICAgIGNhc2UgVW5hcnlPcGVyYXRvcktpbmQuQ09NUExFTUVOVDoKICAgICAgcmV0dXJuIGJpdE5vdDsKICAgIGNhc2UgVW5hcnlPcGVyYXRvcktpbmQuTkVHQVRFOgogICAgICByZXR1cm4gbmVnYXRlOwogICAgY2FzZSBVbmFyeU9wZXJhdG9yS2luZC5OT1Q6CiAgICAgIHJldHVybiBub3Q7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gbnVsbDsKICB9Cn0KCkJpbmFyeU9wZXJhdGlvbiBsb29rdXBCaW5hcnkoQmluYXJ5T3BlcmF0b3Igb3BlcmF0b3IpIHsKICBzd2l0Y2ggKG9wZXJhdG9yLmtpbmQpIHsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkFERDoKICAgICAgcmV0dXJuIGFkZDsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNVQjoKICAgICAgcmV0dXJuIHN1YnRyYWN0OwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTVVMOgogICAgICByZXR1cm4gbXVsdGlwbHk7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5ESVY6CiAgICAgIHJldHVybiBkaXZpZGU7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5NT0Q6CiAgICAgIHJldHVybiBtb2R1bG87CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JRElWOgogICAgICByZXR1cm4gdHJ1bmNhdGluZ0RpdmlkZTsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk9SOgogICAgICByZXR1cm4gYml0T3I7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5BTkQ6CiAgICAgIHJldHVybiBiaXRBbmQ7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5YT1I6CiAgICAgIHJldHVybiBiaXRYb3I7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX09SOgogICAgICByZXR1cm4gYm9vbGVhbk9yOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9BTkQ6CiAgICAgIHJldHVybiBib29sZWFuQW5kOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hMOgogICAgICByZXR1cm4gc2hpZnRMZWZ0OwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hSOgogICAgICByZXR1cm4gc2hpZnRSaWdodDsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxUOgogICAgICByZXR1cm4gbGVzczsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxURVE6CiAgICAgIHJldHVybiBsZXNzRXF1YWw7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5HVDoKICAgICAgcmV0dXJuIGdyZWF0ZXI7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5HVEVROgogICAgICByZXR1cm4gZ3JlYXRlckVxdWFsOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuRVE6CiAgICAgIHJldHVybiBlcXVhbDsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklGX05VTEw6CiAgICAgIHJldHVybiBpZk51bGw7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIE9wZXJhdGlvbiB7CiAgU3RyaW5nIGdldCBuYW1lOwp9CgphYnN0cmFjdCBjbGFzcyBVbmFyeU9wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvbiB7CiAgLy8vIFJldHVybnMgWzpudWxsOl0gaWYgaXQgd2FzIHVuYWJsZSB0byBmb2xkIHRoZSBvcGVyYXRpb24uCiAgQ29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgY29uc3RhbnQpOwp9CgphYnN0cmFjdCBjbGFzcyBCaW5hcnlPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb24gewogIC8vLyBSZXR1cm5zIFs6bnVsbDpdIGlmIGl0IHdhcyB1bmFibGUgdG8gZm9sZCB0aGUgb3BlcmF0aW9uLgogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpOwogIGFwcGx5KGxlZnQsIHJpZ2h0KTsKfQoKY2xhc3MgQml0Tm90T3BlcmF0aW9uIGltcGxlbWVudHMgVW5hcnlPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJ34nOwoKICBjb25zdCBCaXROb3RPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIGlmIChpc0ludChjb25zdGFudCkpIHsKICAgICAgLy8gSW4gSmF2YVNjcmlwdCB3ZSBkb24ndCBjaGVjayBmb3IgLTAgYW5kIHRyZWF0IGl0IGFzIGlmIGl0IHdhcyB6ZXJvLgogICAgICBpZiAoY29uc3RhbnQuaXNNaW51c1plcm8pIHsKICAgICAgICBjb25zdGFudCA9IGNyZWF0ZUludChCaWdJbnQuemVybyk7CiAgICAgIH0KICAgICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRDb25zdGFudCA9IGNvbnN0YW50OwogICAgICAvLyBXZSBjb252ZXJ0IHRoZSByZXN1bHQgb2YgYml0LW9wZXJhdGlvbnMgdG8gMzIgYml0IHVuc2lnbmVkIGludGVnZXJzLgogICAgICByZXR1cm4gX2NyZWF0ZUludDMyKH5pbnRDb25zdGFudC5pbnRWYWx1ZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIE5lZ2F0ZU9wZXJhdGlvbiBpbXBsZW1lbnRzIFVuYXJ5T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICduZWdhdGUnOwoKICBjb25zdCBOZWdhdGVPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIENvbnN0YW50VmFsdWUgX2ZvbGQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgICBpZiAoY29uc3RhbnQuaXNJbnQpIHsKICAgICAgICBJbnRDb25zdGFudFZhbHVlIGludENvbnN0YW50ID0gY29uc3RhbnQ7CiAgICAgICAgcmV0dXJuIGNyZWF0ZUludCgtaW50Q29uc3RhbnQuaW50VmFsdWUpOwogICAgICB9CiAgICAgIGlmIChjb25zdGFudC5pc0RvdWJsZSkgewogICAgICAgIERvdWJsZUNvbnN0YW50VmFsdWUgZG91YmxlQ29uc3RhbnQgPSBjb25zdGFudDsKICAgICAgICByZXR1cm4gY3JlYXRlRG91YmxlKC1kb3VibGVDb25zdGFudC5kb3VibGVWYWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKGNvbnN0YW50LmlzSW50KSB7CiAgICAgIEludENvbnN0YW50VmFsdWUgaW50Q29uc3RhbnQgPSBjb25zdGFudDsKICAgICAgaWYgKGludENvbnN0YW50LmludFZhbHVlID09IEJpZ0ludC56ZXJvKSB7CiAgICAgICAgcmV0dXJuIGNyZWF0ZURvdWJsZSgtMC4wKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9mb2xkKGNvbnN0YW50KTsKICB9Cn0KCmNsYXNzIE5vdE9wZXJhdGlvbiBpbXBsZW1lbnRzIFVuYXJ5T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICchJzsKCiAgY29uc3QgTm90T3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBpZiAoY29uc3RhbnQuaXNCb29sKSB7CiAgICAgIEJvb2xDb25zdGFudFZhbHVlIGJvb2xDb25zdGFudCA9IGNvbnN0YW50OwogICAgICByZXR1cm4gY3JlYXRlQm9vbCghYm9vbENvbnN0YW50LmJvb2xWYWx1ZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBPcGVyYXRpb25zIHRoYXQgb25seSB3b3JrIGlmIGJvdGggYXJndW1lbnRzIGFyZSBpbnRlZ2Vycy4KYWJzdHJhY3QgY2xhc3MgQmluYXJ5Qml0T3BlcmF0aW9uIGltcGxlbWVudHMgQmluYXJ5T3BlcmF0aW9uIHsKICBjb25zdCBCaW5hcnlCaXRPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgQ29uc3RhbnRWYWx1ZSBfZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgICAgaWYgKGxlZnQuaXNJbnQgJiYgcmlnaHQuaXNJbnQpIHsKICAgICAgICBJbnRDb25zdGFudFZhbHVlIGxlZnRJbnQgPSBsZWZ0OwogICAgICAgIEludENvbnN0YW50VmFsdWUgcmlnaHRJbnQgPSByaWdodDsKICAgICAgICBCaWdJbnQgcmVzdWx0VmFsdWUgPSBmb2xkSW50cyhsZWZ0SW50LmludFZhbHVlLCByaWdodEludC5pbnRWYWx1ZSk7CiAgICAgICAgaWYgKHJlc3VsdFZhbHVlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiBjcmVhdGVJbnQocmVzdWx0VmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8vIEluIEphdmFTY3JpcHQgd2UgZG9uJ3QgY2hlY2sgZm9yIC0wIGFuZCB0cmVhdCBpdCBhcyBpZiBpdCB3YXMgemVyby4KICAgIGlmIChsZWZ0LmlzTWludXNaZXJvKSB7CiAgICAgIGxlZnQgPSBjcmVhdGVJbnQoQmlnSW50Lnplcm8pOwogICAgfQogICAgaWYgKHJpZ2h0LmlzTWludXNaZXJvKSB7CiAgICAgIHJpZ2h0ID0gY3JlYXRlSW50KEJpZ0ludC56ZXJvKTsKICAgIH0KICAgIEludENvbnN0YW50VmFsdWUgcmVzdWx0ID0gX2ZvbGQobGVmdCwgcmlnaHQpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIC8vIFdlIGNvbnZlcnQgdGhlIHJlc3VsdCBvZiBiaXQtb3BlcmF0aW9ucyB0byAzMiBiaXQgdW5zaWduZWQgaW50ZWdlcnMuCiAgICAgIHJldHVybiBfY3JlYXRlSW50MzIocmVzdWx0LmludFZhbHVlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBCaWdJbnQgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCk7Cn0KCmNsYXNzIEJpdEFuZE9wZXJhdGlvbiBleHRlbmRzIEJpbmFyeUJpdE9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnJic7CgogIGNvbnN0IEJpdEFuZE9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBCaWdJbnQgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCkgPT4gbGVmdCAmIHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCAmIHJpZ2h0Owp9CgpjbGFzcyBCaXRPck9wZXJhdGlvbiBleHRlbmRzIEJpbmFyeUJpdE9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnfCc7CgogIGNvbnN0IEJpdE9yT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIEJpZ0ludCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSA9PiBsZWZ0IHwgcmlnaHQ7CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0IHwgcmlnaHQ7Cn0KCmNsYXNzIEJpdFhvck9wZXJhdGlvbiBleHRlbmRzIEJpbmFyeUJpdE9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnXic7CgogIGNvbnN0IEJpdFhvck9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBCaWdJbnQgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCkgPT4gbGVmdCBeIHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCBeIHJpZ2h0Owp9CgpjbGFzcyBTaGlmdExlZnRPcGVyYXRpb24gZXh0ZW5kcyBCaW5hcnlCaXRPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJzw8JzsKCiAgY29uc3QgU2hpZnRMZWZ0T3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIEJpZ0ludCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSB7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogZmluZCBhIGJldHRlciB3YXkgdG8gZ3VhcmQgYWdhaW5zdCBleGNlc3NpdmUgc2hpZnRzIHRvCiAgICAvLyB0aGUgbGVmdC4KICAgIGlmIChyaWdodCA+IG5ldyBCaWdJbnQuZnJvbSgxMDApIHx8IHJpZ2h0IDwgQmlnSW50Lnplcm8pIHJldHVybiBudWxsOwogICAgcmV0dXJuIGxlZnQgPDwgcmlnaHQudG9JbnQoKTsKICB9CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0IDw8IHJpZ2h0Owp9CgpjbGFzcyBTaGlmdFJpZ2h0T3BlcmF0aW9uIGV4dGVuZHMgQmluYXJ5Qml0T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICc+Pic7CgogIGNvbnN0IFNoaWZ0UmlnaHRPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgLy8gVHJ1bmNhdGUgdGhlIGlucHV0IHZhbHVlIHRvIDMyIGJpdHMgaWYgbmVjZXNzYXJ5LgogICAgaWYgKGxlZnQuaXNJbnQpIHsKICAgICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRDb25zdGFudCA9IGxlZnQ7CiAgICAgIEJpZ0ludCB2YWx1ZSA9IGludENvbnN0YW50LmludFZhbHVlOwogICAgICBCaWdJbnQgdHJ1bmNhdGVkVmFsdWUgPSB2YWx1ZSAmIF9CSVRTMzI7CiAgICAgIGlmICh2YWx1ZSA8IEJpZ0ludC56ZXJvKSB7CiAgICAgICAgLy8gU2lnbi1leHRlbmQgaWYgdGhlIGlucHV0IHdhcyBuZWdhdGl2ZS4gVGhlIGN1cnJlbnQgc2VtYW50aWNzIGRvbid0CiAgICAgICAgLy8gbWFrZSBtdWNoIHNlbnNlLCBzaW5jZSB3ZSBvbmx5IGxvb2sgYXQgYml0IDMxLgogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGQgdHJlYXQgdGhlIGlucHV0IHRvIHJpZ2h0IHNoaWZ0cyBhcwogICAgICAgIC8vIHVuc2lnbmVkLgoKICAgICAgICAvLyBBIDMyIGJpdCBjb21wbGVtZW50LXR3byB2YWx1ZSB4IGNhbiBiZSBjb21wdXRlZCBieToKICAgICAgICAvLyAgICB4X3UgLSAyXjMyICh3aGVyZSB4X3UgaXMgaXRzIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uKS4KICAgICAgICAvLyBFeGFtcGxlOiAweEZGRkZGRkZGIC0gMHgxMDAwMDAwMDAgPT4gLTEuCiAgICAgICAgLy8gV2Ugc2ltcGx5IGFuZCB3aXRoIHRoZSBzaWduLWJpdCBhbmQgbXVsdGlwbHkgYnkgdHdvLiBJZiB0aGUgc2lnbi1iaXQKICAgICAgICAvLyB3YXMgc2V0LCB0aGVuIHRoZSByZXN1bHQgaXMgMC4gT3RoZXJ3aXNlIGl0IHdpbGwgYmVjb21lIDJeMzIuCiAgICAgICAgZmluYWwgQmlnSW50IFNJR05fQklUID0gbmV3IEJpZ0ludC5mcm9tKDB4ODAwMDAwMDApOwogICAgICAgIHRydW5jYXRlZFZhbHVlIC09IEJpZ0ludC50d28gKiAodHJ1bmNhdGVkVmFsdWUgJiBTSUdOX0JJVCk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlICE9IHRydW5jYXRlZFZhbHVlKSB7CiAgICAgICAgbGVmdCA9IGNyZWF0ZUludCh0cnVuY2F0ZWRWYWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdXBlci5mb2xkKGxlZnQsIHJpZ2h0KTsKICB9CgogIEBvdmVycmlkZQogIEJpZ0ludCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSB7CiAgICBpZiAocmlnaHQgPCBCaWdJbnQuemVybykgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbGVmdCA+PiByaWdodC50b0ludCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgPj4gcmlnaHQ7Cn0KCmFic3RyYWN0IGNsYXNzIEJpbmFyeUJvb2xPcGVyYXRpb24gaW1wbGVtZW50cyBCaW5hcnlPcGVyYXRpb24gewogIGNvbnN0IEJpbmFyeUJvb2xPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgaWYgKGxlZnQuaXNCb29sICYmIHJpZ2h0LmlzQm9vbCkgewogICAgICBCb29sQ29uc3RhbnRWYWx1ZSBsZWZ0Qm9vbCA9IGxlZnQ7CiAgICAgIEJvb2xDb25zdGFudFZhbHVlIHJpZ2h0Qm9vbCA9IHJpZ2h0OwogICAgICBib29sIHJlc3VsdFZhbHVlID0gZm9sZEJvb2xzKGxlZnRCb29sLmJvb2xWYWx1ZSwgcmlnaHRCb29sLmJvb2xWYWx1ZSk7CiAgICAgIHJldHVybiBjcmVhdGVCb29sKHJlc3VsdFZhbHVlKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgYm9vbCBmb2xkQm9vbHMoYm9vbCBsZWZ0LCBib29sIHJpZ2h0KTsKfQoKY2xhc3MgQm9vbGVhbkFuZE9wZXJhdGlvbiBleHRlbmRzIEJpbmFyeUJvb2xPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJyYmJzsKCiAgY29uc3QgQm9vbGVhbkFuZE9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBib29sIGZvbGRCb29scyhib29sIGxlZnQsIGJvb2wgcmlnaHQpID0+IGxlZnQgJiYgcmlnaHQ7CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICYmIHJpZ2h0Owp9CgpjbGFzcyBCb29sZWFuT3JPcGVyYXRpb24gZXh0ZW5kcyBCaW5hcnlCb29sT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICd8fCc7CgogIGNvbnN0IEJvb2xlYW5Pck9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBib29sIGZvbGRCb29scyhib29sIGxlZnQsIGJvb2wgcmlnaHQpID0+IGxlZnQgfHwgcmlnaHQ7CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0IHx8IHJpZ2h0Owp9CgphYnN0cmFjdCBjbGFzcyBBcml0aG1ldGljTnVtT3BlcmF0aW9uIGltcGxlbWVudHMgQmluYXJ5T3BlcmF0aW9uIHsKICBjb25zdCBBcml0aG1ldGljTnVtT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgIENvbnN0YW50VmFsdWUgX2ZvbGQoQ29uc3RhbnRWYWx1ZSBsZWZ0LCBDb25zdGFudFZhbHVlIHJpZ2h0KSB7CiAgICAgIGlmIChsZWZ0LmlzTnVtICYmIHJpZ2h0LmlzTnVtKSB7CiAgICAgICAgTnVtQ29uc3RhbnRWYWx1ZSBsZWZ0TnVtID0gbGVmdDsKICAgICAgICBOdW1Db25zdGFudFZhbHVlIHJpZ2h0TnVtID0gcmlnaHQ7CiAgICAgICAgdmFyIGZvbGRlZFZhbHVlOwogICAgICAgIGlmIChsZWZ0LmlzSW50ICYmIHJpZ2h0LmlzSW50KSB7CiAgICAgICAgICBJbnRDb25zdGFudFZhbHVlIGxlZnRJbnQgPSBsZWZ0TnVtOwogICAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSByaWdodEludCA9IHJpZ2h0TnVtOwogICAgICAgICAgZm9sZGVkVmFsdWUgPSBmb2xkSW50cyhsZWZ0SW50LmludFZhbHVlLCByaWdodEludC5pbnRWYWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvbGRlZFZhbHVlID0gZm9sZE51bXMobGVmdE51bS5kb3VibGVWYWx1ZSwgcmlnaHROdW0uZG91YmxlVmFsdWUpOwogICAgICAgIH0KICAgICAgICAvLyBBIGRpdmlzaW9uIGJ5IDAgbWVhbnMgdGhhdCB3ZSBtaWdodCBub3QgaGF2ZSBhIGZvbGRlZCB2YWx1ZS4KICAgICAgICBpZiAoZm9sZGVkVmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKGxlZnQuaXNJbnQgJiYgcmlnaHQuaXNJbnQgJiYgIWlzRGl2aWRlKCkgfHwgaXNUcnVuY2F0aW5nRGl2aWRlKCkpIHsKICAgICAgICAgIGFzc2VydChmb2xkZWRWYWx1ZSBpcyBCaWdJbnQpOwogICAgICAgICAgcmV0dXJuIGNyZWF0ZUludChmb2xkZWRWYWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBjcmVhdGVEb3VibGUoZm9sZGVkVmFsdWUpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBDb25zdGFudFZhbHVlIHJlc3VsdCA9IF9mb2xkKGxlZnQsIHJpZ2h0KTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIHJldHVybiBfY29udmVydFRvSmF2YVNjcmlwdENvbnN0YW50KHJlc3VsdCk7CiAgfQoKICBib29sIGlzRGl2aWRlKCkgPT4gZmFsc2U7CiAgYm9vbCBpc1RydW5jYXRpbmdEaXZpZGUoKSA9PiBmYWxzZTsKICBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KTsKICBmb2xkTnVtcyhudW0gbGVmdCwgbnVtIHJpZ2h0KTsKfQoKY2xhc3MgU3VidHJhY3RPcGVyYXRpb24gZXh0ZW5kcyBBcml0aG1ldGljTnVtT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICctJzsKCiAgY29uc3QgU3VidHJhY3RPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQmlnSW50IGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpID0+IGxlZnQgLSByaWdodDsKCiAgQG92ZXJyaWRlCiAgbnVtIGZvbGROdW1zKG51bSBsZWZ0LCBudW0gcmlnaHQpID0+IGxlZnQgLSByaWdodDsKCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgLSByaWdodDsKfQoKY2xhc3MgTXVsdGlwbHlPcGVyYXRpb24gZXh0ZW5kcyBBcml0aG1ldGljTnVtT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICcqJzsKCiAgY29uc3QgTXVsdGlwbHlPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQmlnSW50IGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpID0+IGxlZnQgKiByaWdodDsKCiAgQG92ZXJyaWRlCiAgbnVtIGZvbGROdW1zKG51bSBsZWZ0LCBudW0gcmlnaHQpID0+IGxlZnQgKiByaWdodDsKCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgKiByaWdodDsKfQoKY2xhc3MgTW9kdWxvT3BlcmF0aW9uIGV4dGVuZHMgQXJpdGhtZXRpY051bU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnJSc7CgogIGNvbnN0IE1vZHVsb09wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBCaWdJbnQgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCkgewogICAgaWYgKHJpZ2h0ID09IEJpZ0ludC56ZXJvKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBsZWZ0ICUgcmlnaHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBudW0gZm9sZE51bXMobnVtIGxlZnQsIG51bSByaWdodCkgPT4gbGVmdCAlIHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCAlIHJpZ2h0Owp9CgpjbGFzcyBSZW1haW5kZXJPcGVyYXRpb24gZXh0ZW5kcyBBcml0aG1ldGljTnVtT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICdyZW1haW5kZXInOwoKICBjb25zdCBSZW1haW5kZXJPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQmlnSW50IGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpIHsKICAgIGlmIChyaWdodCA9PSBCaWdJbnQuemVybykgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbGVmdC5yZW1haW5kZXIocmlnaHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgbnVtIGZvbGROdW1zKG51bSBsZWZ0LCBudW0gcmlnaHQpID0+IGxlZnQucmVtYWluZGVyKHJpZ2h0KTsKCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQucmVtYWluZGVyKHJpZ2h0KTsKfQoKY2xhc3MgVHJ1bmNhdGluZ0RpdmlkZU9wZXJhdGlvbiBleHRlbmRzIEFyaXRobWV0aWNOdW1PcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJ34vJzsKCiAgY29uc3QgVHJ1bmNhdGluZ0RpdmlkZU9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBCaWdJbnQgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCkgewogICAgaWYgKHJpZ2h0ID09IEJpZ0ludC56ZXJvKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBsZWZ0IH4vIHJpZ2h0OwogIH0KCiAgQG92ZXJyaWRlCiAgQmlnSW50IGZvbGROdW1zKG51bSBsZWZ0LCBudW0gcmlnaHQpIHsKICAgIG51bSByYXRpbyA9IGxlZnQgLyByaWdodDsKICAgIGlmIChyYXRpby5pc05hTiB8fCByYXRpby5pc0luZmluaXRlKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgQmlnSW50LmZyb20ocmF0aW8udHJ1bmNhdGUoKS50b0ludCgpKTsKICB9CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0IH4vIHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBib29sIGlzVHJ1bmNhdGluZ0RpdmlkZSgpID0+IHRydWU7Cn0KCmNsYXNzIERpdmlkZU9wZXJhdGlvbiBleHRlbmRzIEFyaXRobWV0aWNOdW1PcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJy8nOwoKICBjb25zdCBEaXZpZGVPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgZG91YmxlIGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpID0+IGxlZnQgLyByaWdodDsKCiAgQG92ZXJyaWRlCiAgbnVtIGZvbGROdW1zKG51bSBsZWZ0LCBudW0gcmlnaHQpID0+IGxlZnQgLyByaWdodDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0RpdmlkZSgpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0IC8gcmlnaHQ7Cn0KCmNsYXNzIEFkZE9wZXJhdGlvbiBpbXBsZW1lbnRzIEJpbmFyeU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnKyc7CgogIGNvbnN0IEFkZE9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGZvbGQoQ29uc3RhbnRWYWx1ZSBsZWZ0LCBDb25zdGFudFZhbHVlIHJpZ2h0KSB7CiAgICBDb25zdGFudFZhbHVlIF9mb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgICBpZiAobGVmdC5pc0ludCAmJiByaWdodC5pc0ludCkgewogICAgICAgIEludENvbnN0YW50VmFsdWUgbGVmdEludCA9IGxlZnQ7CiAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSByaWdodEludCA9IHJpZ2h0OwogICAgICAgIEJpZ0ludCByZXN1bHQgPSBsZWZ0SW50LmludFZhbHVlICsgcmlnaHRJbnQuaW50VmFsdWU7CiAgICAgICAgcmV0dXJuIGNyZWF0ZUludChyZXN1bHQpOwogICAgICB9IGVsc2UgaWYgKGxlZnQuaXNOdW0gJiYgcmlnaHQuaXNOdW0pIHsKICAgICAgICBOdW1Db25zdGFudFZhbHVlIGxlZnROdW0gPSBsZWZ0OwogICAgICAgIE51bUNvbnN0YW50VmFsdWUgcmlnaHROdW0gPSByaWdodDsKICAgICAgICBkb3VibGUgcmVzdWx0ID0gbGVmdE51bS5kb3VibGVWYWx1ZSArIHJpZ2h0TnVtLmRvdWJsZVZhbHVlOwogICAgICAgIHJldHVybiBjcmVhdGVEb3VibGUocmVzdWx0KTsKICAgICAgfSBlbHNlIGlmIChsZWZ0LmlzU3RyaW5nICYmIHJpZ2h0LmlzU3RyaW5nKSB7CiAgICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBsZWZ0U3RyaW5nID0gbGVmdDsKICAgICAgICBTdHJpbmdDb25zdGFudFZhbHVlIHJpZ2h0U3RyaW5nID0gcmlnaHQ7CiAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGxlZnRTdHJpbmcuc3RyaW5nVmFsdWUgKyByaWdodFN0cmluZy5zdHJpbmdWYWx1ZTsKICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nKHJlc3VsdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KCiAgICBDb25zdGFudFZhbHVlIHJlc3VsdCA9IF9mb2xkKGxlZnQsIHJpZ2h0KTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQuaXNOdW0pIHsKICAgICAgcmV0dXJuIF9jb252ZXJ0VG9KYXZhU2NyaXB0Q29uc3RhbnQocmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCArIHJpZ2h0Owp9CgphYnN0cmFjdCBjbGFzcyBSZWxhdGlvbmFsTnVtT3BlcmF0aW9uIGltcGxlbWVudHMgQmluYXJ5T3BlcmF0aW9uIHsKICBjb25zdCBSZWxhdGlvbmFsTnVtT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgIGlmICghbGVmdC5pc051bSB8fCAhcmlnaHQuaXNOdW0pIHJldHVybiBudWxsOwogICAgYm9vbCBmb2xkZWRWYWx1ZTsKICAgIGlmIChsZWZ0LmlzSW50ICYmIHJpZ2h0LmlzSW50KSB7CiAgICAgIEludENvbnN0YW50VmFsdWUgbGVmdEludCA9IGxlZnQ7CiAgICAgIEludENvbnN0YW50VmFsdWUgcmlnaHRJbnQgPSByaWdodDsKICAgICAgZm9sZGVkVmFsdWUgPSBmb2xkSW50cyhsZWZ0SW50LmludFZhbHVlLCByaWdodEludC5pbnRWYWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBOdW1Db25zdGFudFZhbHVlIGxlZnROdW0gPSBsZWZ0OwogICAgICBOdW1Db25zdGFudFZhbHVlIHJpZ2h0TnVtID0gcmlnaHQ7CiAgICAgIGZvbGRlZFZhbHVlID0gZm9sZE51bXMobGVmdE51bS5kb3VibGVWYWx1ZSwgcmlnaHROdW0uZG91YmxlVmFsdWUpOwogICAgfQogICAgYXNzZXJ0KGZvbGRlZFZhbHVlICE9IG51bGwpOwogICAgcmV0dXJuIGNyZWF0ZUJvb2woZm9sZGVkVmFsdWUpOwogIH0KCiAgYm9vbCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KTsKICBib29sIGZvbGROdW1zKG51bSBsZWZ0LCBudW0gcmlnaHQpOwp9CgpjbGFzcyBMZXNzT3BlcmF0aW9uIGV4dGVuZHMgUmVsYXRpb25hbE51bU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnPCc7CgogIGNvbnN0IExlc3NPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSA9PiBsZWZ0IDwgcmlnaHQ7CgogIEBvdmVycmlkZQogIGJvb2wgZm9sZE51bXMobnVtIGxlZnQsIG51bSByaWdodCkgPT4gbGVmdCA8IHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCA8IHJpZ2h0Owp9CgpjbGFzcyBMZXNzRXF1YWxPcGVyYXRpb24gZXh0ZW5kcyBSZWxhdGlvbmFsTnVtT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICc8PSc7CgogIGNvbnN0IExlc3NFcXVhbE9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBib29sIGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpID0+IGxlZnQgPD0gcmlnaHQ7CgogIEBvdmVycmlkZQogIGJvb2wgZm9sZE51bXMobnVtIGxlZnQsIG51bSByaWdodCkgPT4gbGVmdCA8PSByaWdodDsKCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgPD0gcmlnaHQ7Cn0KCmNsYXNzIEdyZWF0ZXJPcGVyYXRpb24gZXh0ZW5kcyBSZWxhdGlvbmFsTnVtT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICc+JzsKCiAgY29uc3QgR3JlYXRlck9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBib29sIGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpID0+IGxlZnQgPiByaWdodDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBmb2xkTnVtcyhudW0gbGVmdCwgbnVtIHJpZ2h0KSA9PiBsZWZ0ID4gcmlnaHQ7CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ID4gcmlnaHQ7Cn0KCmNsYXNzIEdyZWF0ZXJFcXVhbE9wZXJhdGlvbiBleHRlbmRzIFJlbGF0aW9uYWxOdW1PcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJz49JzsKCiAgY29uc3QgR3JlYXRlckVxdWFsT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCkgPT4gbGVmdCA+PSByaWdodDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBmb2xkTnVtcyhudW0gbGVmdCwgbnVtIHJpZ2h0KSA9PiBsZWZ0ID49IHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCA+PSByaWdodDsKfQoKY2xhc3MgRXF1YWxzT3BlcmF0aW9uIGltcGxlbWVudHMgQmluYXJ5T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICc9PSc7CgogIGNvbnN0IEVxdWFsc09wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGZvbGQoQ29uc3RhbnRWYWx1ZSBsZWZ0LCBDb25zdGFudFZhbHVlIHJpZ2h0KSB7CiAgICAvLyBOdW1iZXJzIG5lZWQgdG8gYmUgdHJlYXRlZCBzcGVjaWFsbHkgYmVjYXVzZTogTmFOICE9IE5hTiwgLTAuMCA9PSAwLjAsCiAgICAvLyBhbmQgMSA9PSAxLjAuCiAgICBpZiAobGVmdC5pc0ludCAmJiByaWdodC5pc0ludCkgewogICAgICBJbnRDb25zdGFudFZhbHVlIGxlZnRJbnQgPSBsZWZ0OwogICAgICBJbnRDb25zdGFudFZhbHVlIHJpZ2h0SW50ID0gcmlnaHQ7CiAgICAgIGJvb2wgcmVzdWx0ID0gbGVmdEludC5pbnRWYWx1ZSA9PSByaWdodEludC5pbnRWYWx1ZTsKICAgICAgcmV0dXJuIGNyZWF0ZUJvb2wocmVzdWx0KTsKICAgIH0KCiAgICBpZiAobGVmdC5pc051bSAmJiByaWdodC5pc051bSkgewogICAgICBOdW1Db25zdGFudFZhbHVlIGxlZnROdW0gPSBsZWZ0OwogICAgICBOdW1Db25zdGFudFZhbHVlIHJpZ2h0TnVtID0gcmlnaHQ7CiAgICAgIGJvb2wgcmVzdWx0ID0gbGVmdE51bS5kb3VibGVWYWx1ZSA9PSByaWdodE51bS5kb3VibGVWYWx1ZTsKICAgICAgcmV0dXJuIGNyZWF0ZUJvb2wocmVzdWx0KTsKICAgIH0KCiAgICBpZiAobGVmdC5pc0NvbnN0cnVjdGVkT2JqZWN0KSB7CiAgICAgIGlmIChyaWdodC5pc051bGwpIHsKICAgICAgICByZXR1cm4gY3JlYXRlQm9vbChmYWxzZSk7CiAgICAgIH0KICAgICAgLy8gVW5sZXNzIHdlIGtub3cgdGhhdCB0aGUgdXNlci1kZWZpbmVkIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlCiAgICAgIC8vIGVxdWFsaXR5IG9wZXJhdG9yIHdlIGNhbm5vdCBmb2xkIGhlcmUuCiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiBjcmVhdGVCb29sKGxlZnQgPT0gcmlnaHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgPT0gcmlnaHQ7Cn0KCmNsYXNzIElkZW50aXR5T3BlcmF0aW9uIGltcGxlbWVudHMgQmluYXJ5T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICc9PT0nOwoKICBjb25zdCBJZGVudGl0eU9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBCb29sQ29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgQm9vbENvbnN0YW50VmFsdWUgX2ZvbGQoQ29uc3RhbnRWYWx1ZSBsZWZ0LCBDb25zdGFudFZhbHVlIHJpZ2h0KSB7CiAgICAgIC8vIEluIG9yZGVyIHRvIHByZXNlcnZlIHJ1bnRpbWUgc2VtYW50aWNzIHdoaWNoIHNheXMgdGhhdCBOYU4gIT09IE5hTgogICAgICAvLyBkb24ndCBjb25zdGFudCBmb2xkIE5hTiA9PT0gTmFOLiBPdGhlcndpc2UgdGhlIG91dHB1dCBkZXBlbmRzIG9uCiAgICAgIC8vIGlubGluZWQgdmFyaWFibGVzIGFuZCBvdGhlciBvcHRpbWl6YXRpb25zLgogICAgICBpZiAobGVmdC5pc05hTiAmJiByaWdodC5pc05hTikgcmV0dXJuIG5ldyBGYWxzZUNvbnN0YW50VmFsdWUoKTsKICAgICAgcmV0dXJuIGNyZWF0ZUJvb2wobGVmdCA9PSByaWdodCk7CiAgICB9CgogICAgQm9vbENvbnN0YW50VmFsdWUgcmVzdWx0ID0gX2ZvbGQobGVmdCwgcmlnaHQpOwogICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IHJlc3VsdC5ib29sVmFsdWUpIHJldHVybiByZXN1bHQ7CiAgICAvLyBJbiBKYXZhU2NyaXB0IC0wLjAgPT09IDAgYW5kIGFsbCBkb3VibGVzIGFyZSBlcXVhbCB0byB0aGVpciBpbnRlZ2VyCiAgICAvLyB2YWx1ZXMuIEZ1cnRoZXJtb3JlIE5hTiAhPT0gTmFOLgogICAgaWYgKGxlZnQuaXNJbnQgJiYgcmlnaHQuaXNJbnQpIHsKICAgICAgSW50Q29uc3RhbnRWYWx1ZSBsZWZ0SW50ID0gbGVmdDsKICAgICAgSW50Q29uc3RhbnRWYWx1ZSByaWdodEludCA9IHJpZ2h0OwogICAgICByZXR1cm4gbmV3IEJvb2xDb25zdGFudFZhbHVlKGxlZnRJbnQuaW50VmFsdWUgPT0gcmlnaHRJbnQuaW50VmFsdWUpOwogICAgfQogICAgaWYgKGxlZnQuaXNOdW0gJiYgcmlnaHQuaXNOdW0pIHsKICAgICAgTnVtQ29uc3RhbnRWYWx1ZSBsZWZ0TnVtID0gbGVmdDsKICAgICAgTnVtQ29uc3RhbnRWYWx1ZSByaWdodE51bSA9IHJpZ2h0OwogICAgICBkb3VibGUgbGVmdERvdWJsZSA9IGxlZnROdW0uZG91YmxlVmFsdWU7CiAgICAgIGRvdWJsZSByaWdodERvdWJsZSA9IHJpZ2h0TnVtLmRvdWJsZVZhbHVlOwogICAgICByZXR1cm4gbmV3IEJvb2xDb25zdGFudFZhbHVlKGxlZnREb3VibGUgPT0gcmlnaHREb3VibGUpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBpZGVudGljYWwobGVmdCwgcmlnaHQpOwp9CgpjbGFzcyBJZk51bGxPcGVyYXRpb24gaW1wbGVtZW50cyBCaW5hcnlPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJz8/JzsKCiAgY29uc3QgSWZOdWxsT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgIGlmIChsZWZ0LmlzTnVsbCkgcmV0dXJuIHJpZ2h0OwogICAgcmV0dXJuIGxlZnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCA/PyByaWdodDsKfQoKY2xhc3MgQ29kZVVuaXRBdE9wZXJhdGlvbiBpbXBsZW1lbnRzIEJpbmFyeU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnY2hhckNvZGVBdCc7CgogIGNvbnN0IENvZGVVbml0QXRPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgSW50Q29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgaWYgKGxlZnQuaXNTdHJpbmcgJiYgcmlnaHQuaXNJbnQpIHsKICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBzdHJpbmdDb25zdGFudCA9IGxlZnQ7CiAgICAgIEludENvbnN0YW50VmFsdWUgaW5kZXhDb25zdGFudCA9IHJpZ2h0OwogICAgICBTdHJpbmcgc3RyaW5nID0gc3RyaW5nQ29uc3RhbnQuc3RyaW5nVmFsdWU7CiAgICAgIGludCBpbmRleCA9IGluZGV4Q29uc3RhbnQuaW50VmFsdWUudG9JbnQoKTsKICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgICAgaW50IHZhbHVlID0gc3RyaW5nLmNvZGVVbml0QXQoaW5kZXgpOwogICAgICByZXR1cm4gY3JlYXRlSW50RnJvbUludCh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmNvZGVVbml0QXQocmlnaHQpOwp9CgpjbGFzcyBSb3VuZE9wZXJhdGlvbiBpbXBsZW1lbnRzIFVuYXJ5T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICdyb3VuZCc7CgogIGNvbnN0IFJvdW5kT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICAvLyBCZSBjYXJlZnVsIHRvIHJvdW5kKCkgb25seSB2YWx1ZXMgdGhhdCBkbyBub3QgdGhyb3cgb24gZWl0aGVyIHRoZSBob3N0IG9yCiAgICAvLyB0YXJnZXQgcGxhdGZvcm0uCiAgICBDb25zdGFudFZhbHVlIHRyeVRvUm91bmQoZG91YmxlIHZhbHVlKSB7CiAgICAgIC8vIER1ZSB0byBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJyb3dzZXJzLCBvbmx5ICdyb3VuZCcgZWFzeSBjYXNlcy4gQXZvaWQKICAgICAgLy8gY2FzZXMgd2hlcmUgbnVkZ2luZyB0aGUgdmFsdWUgdXAgb3IgZG93biBjaGFuZ2VzIHRoZSBhbnN3ZXIuCiAgICAgIC8vIDEzIGRpZ2l0cyBpcyBzYWZlbHkgd2l0aGluIHRoZSB+MTUgZGlnaXQgcHJlY2lzaW9uIG9mIGRvdWJsZXMuCiAgICAgIGNvbnN0IHNldmVyYWxVTFAgPSAwLjAwMDAwMDAwMDAwMDE7CiAgICAgIC8vIFVzZSAncm91bmRUb0RvdWJsZSgpJyB0byBhdm9pZCBleGNlcHRpb25zIG9uIHJvdW5kaW5nIHRoZSBudWRnZWQgdmFsdWUuCiAgICAgIGRvdWJsZSByb3VuZGVkID0gdmFsdWUucm91bmRUb0RvdWJsZSgpOwogICAgICBkb3VibGUgcm91bmRlZDEgPSAodmFsdWUgKiAoMS4wICsgc2V2ZXJhbFVMUCkpLnJvdW5kVG9Eb3VibGUoKTsKICAgICAgZG91YmxlIHJvdW5kZWQyID0gKHZhbHVlICogKDEuMCAtIHNldmVyYWxVTFApKS5yb3VuZFRvRG91YmxlKCk7CiAgICAgIGlmIChyb3VuZGVkICE9IHJvdW5kZWQxIHx8IHJvdW5kZWQgIT0gcm91bmRlZDIpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gX2NvbnZlcnRUb0phdmFTY3JpcHRDb25zdGFudCgKICAgICAgICAgIG5ldyBJbnRDb25zdGFudFZhbHVlKG5ldyBCaWdJbnQuZnJvbSh2YWx1ZS5yb3VuZCgpKSkpOwogICAgfQoKICAgIGlmIChjb25zdGFudC5pc0ludCkgewogICAgICBJbnRDb25zdGFudFZhbHVlIGludENvbnN0YW50ID0gY29uc3RhbnQ7CiAgICAgIGRvdWJsZSB2YWx1ZSA9IGludENvbnN0YW50LmludFZhbHVlLnRvRG91YmxlKCk7CiAgICAgIGlmICh2YWx1ZSA+PSAtZG91YmxlLm1heEZpbml0ZSAmJiB2YWx1ZSA8PSBkb3VibGUubWF4RmluaXRlKSB7CiAgICAgICAgcmV0dXJuIHRyeVRvUm91bmQodmFsdWUpOwogICAgICB9CiAgICB9CiAgICBpZiAoY29uc3RhbnQuaXNEb3VibGUpIHsKICAgICAgRG91YmxlQ29uc3RhbnRWYWx1ZSBkb3VibGVDb25zdGFudCA9IGNvbnN0YW50OwogICAgICBkb3VibGUgdmFsdWUgPSBkb3VibGVDb25zdGFudC5kb3VibGVWYWx1ZTsKICAgICAgLy8gTmFOIGFuZCBpbmZpbml0aWVzIHdpbGwgdGhyb3cuCiAgICAgIGlmICh2YWx1ZS5pc05hTikgcmV0dXJuIG51bGw7CiAgICAgIGlmICh2YWx1ZS5pc0luZmluaXRlKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIHRyeVRvUm91bmQodmFsdWUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBVbmZvbGRlZFVuYXJ5T3BlcmF0aW9uIGltcGxlbWVudHMgVW5hcnlPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBjb25zdCBVbmZvbGRlZFVuYXJ5T3BlcmF0aW9uKHRoaXMubmFtZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIEphdmFTY3JpcHRTZXRDb25zdGFudCBleHRlbmRzIFNldENvbnN0YW50VmFsdWUgewogIGZpbmFsIE1hcENvbnN0YW50VmFsdWUgZW50cmllczsKCiAgSmF2YVNjcmlwdFNldENvbnN0YW50KEludGVyZmFjZVR5cGUgdHlwZSwgdGhpcy5lbnRyaWVzKQogICAgICA6IHN1cGVyKHR5cGUsIGVudHJpZXMua2V5cyk7CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gW2VudHJpZXNdOwp9CgpjbGFzcyBKYXZhU2NyaXB0TWFwQ29uc3RhbnQgZXh0ZW5kcyBNYXBDb25zdGFudFZhbHVlIHsKICAvLy8gVGhlIFtQUk9UT19QUk9QRVJUWV0gbXVzdCBub3QgYmUgdXNlZCBhcyBub3JtYWwgcHJvcGVydHkgaW4gYW55IEphdmFTY3JpcHQKICAvLy8gb2JqZWN0LiBJdCB3b3VsZCBjaGFuZ2UgdGhlIHByb3RvdHlwZSBjaGFpbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIFBST1RPX1BST1BFUlRZID0gIl9fcHJvdG9fXyI7CgogIC8vLyBUaGUgZGFydCBjbGFzcyBpbXBsZW1lbnRpbmcgY29uc3RhbnQgbWFwIGxpdGVyYWxzLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgREFSVF9DTEFTUyA9ICJDb25zdGFudE1hcCI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBEQVJUX1NUUklOR19DTEFTUyA9ICJDb25zdGFudFN0cmluZ01hcCI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBEQVJUX1BST1RPX0NMQVNTID0gIkNvbnN0YW50UHJvdG9NYXAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgREFSVF9HRU5FUkFMX0NMQVNTID0gIkdlbmVyYWxDb25zdGFudE1hcCI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBMRU5HVEhfTkFNRSA9ICJfbGVuZ3RoIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX09CSkVDVF9OQU1FID0gIl9qc09iamVjdCI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBLRVlTX05BTUUgPSAiX2tleXMiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgUFJPVE9fVkFMVUUgPSAiX3Byb3RvVmFsdWUiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgSlNfREFUQV9OQU1FID0gIl9qc0RhdGEiOwoKICBmaW5hbCBMaXN0Q29uc3RhbnRWYWx1ZSBrZXlMaXN0OwogIGZpbmFsIENvbnN0YW50VmFsdWUgcHJvdG9WYWx1ZTsKICBmaW5hbCBib29sIG9ubHlTdHJpbmdLZXlzOwoKICBKYXZhU2NyaXB0TWFwQ29uc3RhbnQoSW50ZXJmYWNlVHlwZSB0eXBlLCBMaXN0Q29uc3RhbnRWYWx1ZSBrZXlMaXN0LAogICAgICBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcywgdGhpcy5wcm90b1ZhbHVlLCB0aGlzLm9ubHlTdHJpbmdLZXlzKQogICAgICA6IHRoaXMua2V5TGlzdCA9IGtleUxpc3QsCiAgICAgICAgc3VwZXIodHlwZSwga2V5TGlzdC5lbnRyaWVzLCB2YWx1ZXMpOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTWFwID0+IHRydWU7CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiByZXN1bHQgPSA8Q29uc3RhbnRWYWx1ZT5bXTsKICAgIGlmIChvbmx5U3RyaW5nS2V5cykgewogICAgICByZXN1bHQuYWRkKGtleUxpc3QpOwogICAgfSBlbHNlIHsKICAgICAgLy8gQWRkIHRoZSBrZXlzIGluZGl2aWR1YWxseSB0byBhdm9pZCBnZW5lcmF0aW5nIGFuIHVudXNlZCBsaXN0IGNvbnN0YW50CiAgICAgIC8vIGZvciB0aGUga2V5cy4KICAgICAgcmVzdWx0LmFkZEFsbChrZXlzKTsKICAgIH0KICAgIHJlc3VsdC5hZGRBbGwodmFsdWVzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CoP+AE5OPAFIHCEBNiQlIRYBLQEiKCgmKDAuKCc0KiwoLiQoLCgiLi4wLDwwJjEBOxAyKTYCAUsYLSwyOwZDMD4iLwYiMTMjHiE5JkEIBgQTAgEoO0tOKz4zJUo7UCkBST80AgE9BEYzBDIESiYWHCMhATspMAE7PAE8OAE3OAE6QUNFOysuEQQgAgE6PEkzGkRGMVAzAgEcIx4eIh4jKhsYRSAIDR5KGQ0GBAErGh8qC0gERkhBJDsCAUlAMi9MFz41AgE1GycVIxUgEg0TBAIBOBshEiEXIRchFSEVIh8gFCEVIRUoGCkZIRghGSATIhggFiIbIBQlFQ0TBAIBGxMCATI/LgIBMz8/FgIBMgwbARsBDC8bTSIrCC9OMgYRBAIBMgwgARsBDC8yHDExCB83OggTBgEaLzEjCAYcBAIBLwwbARgBDC8bMTIGEQQCAT4/HgEMQEMnKStMLicIEwYBSxwlBh0mBjIaTiwGEwQBLgIBMwwbARsBDD4BDCYCATIMGwEaAQw+AQwmAgEzDBsBGwEMPgEMJgIBNgwcAR4BDC9OEUoiBAEMJwIBNwwcAR8BDEA5FisrLyFOOkgVAT9FNFBJPUQIJSoIBiQEAQwvKiIEAQwnAgFAHwEMQCcpK00mBhEEASkCATgMHAEfAQw6AQwnAgE3DBwBHgEMOgEMJwIBQyIBDEBDJykrGSkuMEcRTQpILlApKREsCggTBgEvJzEEARwmJyECATkMGwEdAQw+AQw1AQwmAgE5DBsBHQEMPgEMNQEMJgIBNwwbARsBDC8rGQQBDDUBDCYCAToMIwEeAQwvKyIEAQw+AQwvAgFBDBwBJQEMLysaBAEMKR42NgQBDCcBDCUCATcMGwEbAQw+AQw1AQwbAQwmAgEwDBsBGAEMQEMnKSs+Ii4pK0QlNC8xSiUPFQgGAS8qMwYTBAEMJgIBQyIBDEAyFiUnKUMNJylJBiEkBAEsJgIBNQwbARkBDDwBDDYBDCYCAToMHAEeAQw9AQw3AQwnAgE4DBsBHAEMPAEMNgEMJgIBPQwcASEBDD0BDDcBDCcCATMMHAEbAQxAThUlJyk7IQYBJScpQSEGASQaIghMMBMGASYEAQwnAgE1DB0BHQEMREdMSjRGKAYBMztLKCUnKUsGJScpLzE/BhMEAQwwAgEzDBwBGwEMQCMRBAEMJwIBNwwkAR8BDEMoMS4yMjwsJgYRBAEMMAIBMQwfARoBDC9RGC1NRkgqUS5GRkMrQQYBGi82RSIIBh01MSgkKSAGEQQCATkMFQErAQwvEQQCATciATojAQw2AgE3UTM0ATkyPz1BLzQrMzABIyIdAUdIIC4MGgEMKjQaGw1PFxsGGxMEAgEzcGFja2FnZTpjb21waWxlci9zcmMvY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0OXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydMAAdT8vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19iYWNrZW5kLm5hdGl2ZV9kYXRhOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JyBzaG93IE5hdGl2ZUJlaGF2aW9yOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CgovLy8gQmFzaWMgaW5mb3JtYXRpb24gZm9yIG5hdGl2ZSBjbGFzc2VzIGFuZCBqcy1pbnRlcm9wIGxpYnJhcmllcyBhbmQgY2xhc3Nlcy4KLy8vCi8vLyBUaGlzIGluZm9ybWF0aW9uIGlzIGNvbXB1dGVkIGR1cmluZyBsb2FkaW5nIHVzaW5nIFtOYXRpdmVCYXNpY0RhdGFCdWlsZGVyXS4KYWJzdHJhY3QgY2xhc3MgTmF0aXZlQmFzaWNEYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW05hdGl2ZUJhc2ljRGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBOYXRpdmVCYXNpY0RhdGEucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpID0KICAgICAgTmF0aXZlQmFzaWNEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2U7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW05hdGl2ZUJhc2ljRGF0YV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gY29ycmVzcG9uZHMgdG8gYSBuYXRpdmUgSmF2YVNjcmlwdCBjbGFzcy4KICAvLy8KICAvLy8gQSBjbGFzcyBpcyBtYXJrZWQgYXMgbmF0aXZlIGVpdGhlciB0aHJvdWdoIHRoZSBgQE5hdGl2ZSguLi4pYCBhbm5vdGF0aW9uCiAgLy8vIGFsbG93ZWQgZm9yIGludGVybmFsIGxpYnJhcmllcyBvciB2aWEgdGhlIHR5cGVkIEphdmFTY3JpcHRJbnRlcm9wCiAgLy8vIG1lY2hhbmlzbSBhbGxvd2VkIGZvciB1c2VyIGxpYnJhcmllcy4KICBib29sIGlzTmF0aXZlQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IG9mIG5vbi1kaXJlY3RpdmUgbmF0aXZlIHRhZyB3b3JkcyBmb3IgW2Nsc10uCiAgTGlzdDxTdHJpbmc+IGdldE5hdGl2ZVRhZ3NPZkNsYXNzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBoYXMgYSBgIW5vbmxlYWZgIHRhZyB3b3JkLgogIGJvb2wgaGFzTmF0aXZlVGFnc0ZvcmNlZE5vbkxlYWYoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBvciBhbnkgb2YgaXRzIHN1cGVyY2xhc3NlcyBpcyBuYXRpdmUuCiAgYm9vbCBpc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGpzIGludGVyb3AgZmVhdHVyZXMgYXJlIHVzZWQuCiAgYm9vbCBnZXQgaXNKc0ludGVyb3BVc2VkOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGEgSnNJbnRlcm9wIGxpYnJhcnkuCiAgYm9vbCBpc0pzSW50ZXJvcExpYnJhcnkoTGlicmFyeUVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyBhIEpzSW50ZXJvcCBjbGFzcy4KICBib29sIGlzSnNJbnRlcm9wQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgYSBKc0ludGVyb3AgbWVtYmVyLgogIGJvb2wgaXNKc0ludGVyb3BNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwp9CgovLy8gQWRkaXRpb25hbCBlbGVtZW50IGluZm9ybWF0aW9uIGZvciBuYXRpdmUgY2xhc3NlcyBhbmQgbWV0aG9kcyBhbmQganMtaW50ZXJvcAovLy8gbWV0aG9kcy4KLy8vCi8vLyBUaGlzIGluZm9ybWF0aW9uIGlzIGNvbXB1dGVkIGR1cmluZyByZXNvbHV0aW9uIHVzaW5nIFtOYXRpdmVEYXRhQnVpbGRlcl0uCmFic3RyYWN0IGNsYXNzIE5hdGl2ZURhdGEgZXh0ZW5kcyBOYXRpdmVCYXNpY0RhdGEgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbTmF0aXZlRGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBOYXRpdmVEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSA9CiAgICAgIE5hdGl2ZURhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbTmF0aXZlRGF0YV0gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGNvcnJlc3BvbmRzIHRvIGEgbmF0aXZlIEphdmFTY3JpcHQgbWVtYmVyLgogIC8vLwogIC8vLyBBIG1lbWJlciBpcyBtYXJrZWQgYXMgbmF0aXZlIGVpdGhlciB0aHJvdWdoIHRoZSBuYXRpdmUgbWVjaGFuaXNtCiAgLy8vIChgQE5hdGl2ZSguLi4pYCBvciB0aGUgYG5hdGl2ZWAgcHNldWRvIGtleXdvcmQpIGFsbG93ZWQgZm9yIGludGVybmFsCiAgLy8vIGxpYnJhcmllcyBvciB2aWEgdGhlIHR5cGVkIEphdmFTY3JpcHRJbnRlcm9wIG1lY2hhbmlzbSBhbGxvd2VkIGZvciB1c2VyCiAgLy8vIGxpYnJhcmllcy4KICBib29sIGlzTmF0aXZlTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIFtOYXRpdmVCZWhhdmlvcl0gZm9yIGNhbGxpbmcgdGhlIG5hdGl2ZSBbbWV0aG9kXS4KICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVNZXRob2RCZWhhdmlvcihGdW5jdGlvbkVudGl0eSBtZXRob2QpOwoKICAvLy8gUmV0dXJucyB0aGUgW05hdGl2ZUJlaGF2aW9yXSBmb3IgcmVhZGluZyBmcm9tIHRoZSBuYXRpdmUgW2ZpZWxkXS4KICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVGaWVsZExvYWRCZWhhdmlvcihGaWVsZEVudGl0eSBmaWVsZCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTmF0aXZlQmVoYXZpb3JdIGZvciB3cml0aW5nIHRvIHRoZSBuYXRpdmUgW2ZpZWxkXS4KICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5hbWUgb2YgW2VsZW1lbnRdIGlzIGZpeGVkIGZvciB0aGUgZ2VuZXJhdGVkCiAgLy8vIEphdmFTY3JpcHQuCiAgYm9vbCBoYXNGaXhlZEJhY2tlbmROYW1lKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIENvbXB1dGVzIHRoZSBuYW1lIGZvciBbZWxlbWVudF0gdG8gdXNlIGluIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdC4gVGhpcwogIC8vLyBpcyBlaXRoZXIgZ2l2ZW4gdGhyb3VnaCBhIG5hdGl2ZSBhbm5vdGF0aW9uIG9yIGEganMgaW50ZXJvcCBhbm5vdGF0aW9uLgogIFN0cmluZyBnZXRGaXhlZEJhY2tlbmROYW1lKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIENvbXB1dGVzIHRoZSBuYW1lIHByZWZpeCBmb3IgW2VsZW1lbnRdIHRvIHVzZSBpbiB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQuCiAgLy8vCiAgLy8vIEZvciBzdGF0aWMgYW5kIHRvcC1sZXZlbCBtZW1iZXJzIGFuZCBjb25zdHJ1Y3RvcnMgdGhpcyBpcyBiYXNlZCBvbiB0aGUKICAvLy8gSmF2YVNjcmlwdCBuYW1lcyBmb3IgdGhlIGxpYnJhcnkgYW5kL29yIHRoZSBlbmNsb3NpbmcgY2xhc3MuCiAgU3RyaW5nIGdldEZpeGVkQmFja2VuZE1ldGhvZFBhdGgoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc0ludGVyb3BNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgZXhwbGljaXQganMgaW50ZXJvcCBuYW1lIGZvciBsaWJyYXJ5IFtlbGVtZW50XS4KICBTdHJpbmcgZ2V0SnNJbnRlcm9wTGlicmFyeU5hbWUoTGlicmFyeUVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBoYXMgYW4gYEBBbm9ueW1vdXNgIGFubm90YXRpb24uCiAgYm9vbCBpc0Fub255bW91c0pzSW50ZXJvcENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgZXhwbGljaXQganMgaW50ZXJvcCBuYW1lIGZvciBjbGFzcyBbZWxlbWVudF0uCiAgU3RyaW5nIGdldEpzSW50ZXJvcENsYXNzTmFtZShDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIGV4cGxpY2l0IGpzIGludGVyb3AgbmFtZSBmb3IgbWVtYmVyIFtlbGVtZW50XS4KICBTdHJpbmcgZ2V0SnNJbnRlcm9wTWVtYmVyTmFtZShNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBBcHBseSBKUyQgZXNjYXBpbmcgc2NoZW1lIHRvIGNvbnZlcnQgcG9zc2libGUgZXNjYXBlZCBEYXJ0IG5hbWVzIGludG8KICAvLy8gSlMgbmFtZXMuCiAgU3RyaW5nIGNvbXB1dGVVbmVzY2FwZWRKU0ludGVyb3BOYW1lKFN0cmluZyBuYW1lKTsKfQoKYWJzdHJhY3QgY2xhc3MgTmF0aXZlQmFzaWNEYXRhQnVpbGRlciB7CiAgLy8vIFNldHMgdGhlIG5hdGl2ZSB0YWcgaW5mbyBmb3IgW2Nsc10uCiAgLy8vCiAgLy8vIFRoZSB0YWcgaW5mbyBzdHJpbmcgY29udGFpbnMgY29tbWEtc2VwYXJhdGVkICd3b3Jkcycgd2hpY2ggYXJlIGVpdGhlcgogIC8vLyBkaXNwYXRjaCB0YWdzIChoYXZpbmcgSmF2YVNjcmlwdCBpZGVudGlmaWVyIHN5bnRheCkgYW5kIGRpcmVjdGl2ZXMgdGhhdAogIC8vLyBiZWdpbiB3aXRoIGAhYC4KICB2b2lkIHNldE5hdGl2ZUNsYXNzVGFnSW5mbyhDbGFzc0VudGl0eSBjbHMsIFN0cmluZyB0YWdJbmZvKTsKCiAgLy8vIE1hcmtzIFtlbGVtZW50XSBhcyBhbiBleHBsaWNpdCBwYXJ0IG9mIGpzIGludGVyb3AuCiAgLy8vCiAgLy8vIElmIFtuYW1lXSBpcyBwcm92aWRlZCwgaXQgc2V0cyB0aGUgZXhwbGljaXQganMgaW50ZXJvcCBuYW1lIGZvciB0aGUKICAvLy8gbGlicmFyeSBbZWxlbWVudF0sIG90aGVyIHRoZSBqcyBpbnRlcm9wIG5hbWUgaXMgZXhwZWN0ZWQgdG8gYmUgY29tcHV0ZWQKICAvLy8gbGF0ZXIuCiAgdm9pZCBtYXJrQXNKc0ludGVyb3BMaWJyYXJ5KExpYnJhcnlFbnRpdHkgZWxlbWVudCwge1N0cmluZyBuYW1lfSk7CgogIC8vLyBNYXJrcyBbZWxlbWVudF0gYXMgYW4gZXhwbGljaXQgcGFydCBvZiBqcyBpbnRlcm9wLgogIC8vLwogIC8vLyBJZiBbbmFtZV0gaXMgcHJvdmlkZWQsIGl0IHNldHMgdGhlIGV4cGxpY2l0IGpzIGludGVyb3AgbmFtZSBmb3IgdGhlCiAgLy8vIGNsYXNzIFtlbGVtZW50XSwgb3RoZXIgdGhlIGpzIGludGVyb3AgbmFtZSBpcyBleHBlY3RlZCB0byBiZSBjb21wdXRlZAogIC8vLyBsYXRlci4KICB2b2lkIG1hcmtBc0pzSW50ZXJvcENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQsCiAgICAgIHtTdHJpbmcgbmFtZSwgYm9vbCBpc0Fub255bW91czogZmFsc2V9KTsKCiAgLy8vIE1hcmtzIFtlbGVtZW50XSBhcyBhbiBleHBsaWNpdCBwYXJ0IG9mIGpzIGludGVyb3AgYW5kIHNldHMgdGhlIGV4cGxpY2l0IGpzCiAgLy8vIGludGVyb3AgW25hbWVdIGZvciB0aGUgbWVtYmVyIFtlbGVtZW50XS4KICB2b2lkIG1hcmtBc0pzSW50ZXJvcE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCwgU3RyaW5nIG5hbWUpOwoKICAvLy8gQ3JlYXRlcyB0aGUgW05hdGl2ZUJhc2ljRGF0YV0gb2JqZWN0IGZvciB0aGUgZGF0YSBjb2xsZWN0ZWQgaW4gdGhpcwogIC8vLyBidWlsZGVyLgogIE5hdGl2ZUJhc2ljRGF0YSBjbG9zZShFbGVtZW50RW52aXJvbm1lbnQgZW52aXJvbm1lbnQpOwp9CgphYnN0cmFjdCBjbGFzcyBOYXRpdmVEYXRhQnVpbGRlciB7CiAgLy8vIFJlZ2lzdGVycyB0aGUgW2JlaGF2aW9yXSBmb3IgY2FsbGluZyB0aGUgbmF0aXZlIFttZXRob2RdLgogIHZvaWQgc2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IoRnVuY3Rpb25FbnRpdHkgbWV0aG9kLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvcik7CgogIC8vLyBSZWdpc3RlcnMgdGhlIFtiZWhhdmlvcl0gZm9yIHJlYWRpbmcgZnJvbSB0aGUgbmF0aXZlIFtmaWVsZF0uCiAgdm9pZCBzZXROYXRpdmVGaWVsZExvYWRCZWhhdmlvcihGaWVsZEVudGl0eSBmaWVsZCwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpOwoKICAvLy8gUmVnaXN0ZXJzIHRoZSBbYmVoYXZpb3JdIGZvciB3cml0aW5nIHRvIHRoZSBuYXRpdmUgW2ZpZWxkXS4KICB2b2lkIHNldE5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcihGaWVsZEVudGl0eSBmaWVsZCwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpOwoKICAvLy8gU2V0cyB0aGUgbmF0aXZlIFtuYW1lXSBmb3IgdGhlIG1lbWJlciBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIFRoaXMgbmFtZSBpcyB1c2VkIGZvciBbZWxlbWVudF0gaW4gdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0LgogIHZvaWQgc2V0TmF0aXZlTWVtYmVyTmFtZShNZW1iZXJFbnRpdHkgZWxlbWVudCwgU3RyaW5nIG5hbWUpOwoKICAvLy8gQ2xvc2VzIHRoaXMgYnVpbGRlciBhbmQgY3JlYXRlcyB0aGUgcmVzdWx0aW5nIFtOYXRpdmVEYXRhXSBvYmplY3QuCiAgTmF0aXZlRGF0YSBjbG9zZSgpOwp9CgpjbGFzcyBOYXRpdmVCYXNpY0RhdGFCdWlsZGVySW1wbCBpbXBsZW1lbnRzIE5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgewogIGJvb2wgX2Nsb3NlZCA9IGZhbHNlOwoKICAvLy8gVGFnIGluZm8gZm9yIG5hdGl2ZSBKYXZhU2NyaXB0IGNsYXNzZXMgbmFtZXMuIFNlZQogIC8vLyBbc2V0TmF0aXZlQ2xhc3NUYWdJbmZvXS4KICBNYXA8Q2xhc3NFbnRpdHksIE5hdGl2ZUNsYXNzVGFnPiBuYXRpdmVDbGFzc1RhZ0luZm8gPQogICAgICA8Q2xhc3NFbnRpdHksIE5hdGl2ZUNsYXNzVGFnPnt9OwoKICAvLy8gVGhlIEphdmFTY3JpcHQgbGlicmFyaWVzIGltcGxlbWVudGVkIHZpYSB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3AuCiAgTWFwPExpYnJhcnlFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wTGlicmFyaWVzID0gPExpYnJhcnlFbnRpdHksIFN0cmluZz57fTsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IGNsYXNzZXMgaW1wbGVtZW50ZWQgdmlhIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KICBNYXA8Q2xhc3NFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wQ2xhc3NlcyA9IDxDbGFzc0VudGl0eSwgU3RyaW5nPnt9OwoKICAvLy8gSmF2YVNjcmlwdCBpbnRlcm9wIGNsYXNzZXMgYW5ub3RhdGVkIHdpdGggYEBhbm9ueW1vdXNgCiAgU2V0PENsYXNzRW50aXR5PiBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IG1lbWJlcnMgaW1wbGVtZW50ZWQgdmlhIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcE1lbWJlcnMgPSA8TWVtYmVyRW50aXR5LCBTdHJpbmc+e307CgogIEBvdmVycmlkZQogIHZvaWQgc2V0TmF0aXZlQ2xhc3NUYWdJbmZvKENsYXNzRW50aXR5IGNscywgU3RyaW5nIHRhZ1RleHQpIHsKICAgIGFzc2VydCgKICAgICAgICAhX2Nsb3NlZCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgY2xzLAogICAgICAgICAgICAiTmF0aXZlQmFzaWNEYXRhQnVpbGRlciBpcyBjbG9zZWQuICIKICAgICAgICAgICAgIlRyeWluZyB0byBtYXJrICRjbHMgYXMgYSBuYXRpdmUgY2xhc3MuIikpOwoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFzc2VydCB0aGF0IHRoaXMgaXMgb25seSBjYWxsZWQgb25jZS4gVGhlIG1lbW9yeQogICAgLy8gY29tcGlsZXIgY29waWVzIHByZS1wcm9jZXNzZWQgZWxlbWVudHMgaW50byBhIG5ldyBjb21waWxlciB0aHJvdWdoCiAgICAvLyBbQ29tcGlsZXIub25MaWJyYXJ5U2Nhbm5lZF0gYW5kIHRoZXJlYnkgY2F1c2VzIG11bHRpcGxlIGNhbGxzIHRvIHRoaXMKICAgIC8vIG1ldGhvZC4KICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVDbGFzc1RhZ0luZm9bY2xzXSA9PSBudWxsIHx8CiAgICAgICAgICAgIG5hdGl2ZUNsYXNzVGFnSW5mb1tjbHNdLnRleHQgPT0gdGFnVGV4dCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgY2xzLAogICAgICAgICAgICAiTmF0aXZlIHRhZyBpbmZvIHNldCBpbmNvbnNpc3RlbnRseSBvbiAkY2xzOiAiCiAgICAgICAgICAgICJFeGlzdGluZyB0YWcgaW5mbyAnJHtuYXRpdmVDbGFzc1RhZ0luZm9bY2xzXX0nLCAiCiAgICAgICAgICAgICJuZXcgdGFnIGluZm8gJyR0YWdUZXh0Jy4iKSk7CiAgICBuYXRpdmVDbGFzc1RhZ0luZm9bY2xzXSA9IG5ldyBOYXRpdmVDbGFzc1RhZyh0YWdUZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbWFya0FzSnNJbnRlcm9wTGlicmFyeShMaWJyYXJ5RW50aXR5IGVsZW1lbnQsIHtTdHJpbmcgbmFtZX0pIHsKICAgIGFzc2VydCgKICAgICAgICAhX2Nsb3NlZCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIk5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgaXMgY2xvc2VkLiAiCiAgICAgICAgICAgICJUcnlpbmcgdG8gbWFyayAkZWxlbWVudCBhcyBhIGpzLWludGVyb3AgbGlicmFyeS4iKSk7CiAgICBqc0ludGVyb3BMaWJyYXJpZXNbZWxlbWVudF0gPSBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBtYXJrQXNKc0ludGVyb3BDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50LAogICAgICB7U3RyaW5nIG5hbWUsIGJvb2wgaXNBbm9ueW1vdXM6IGZhbHNlfSkgewogICAgYXNzZXJ0KAogICAgICAgICFfY2xvc2VkLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiTmF0aXZlQmFzaWNEYXRhQnVpbGRlciBpcyBjbG9zZWQuICIKICAgICAgICAgICAgIlRyeWluZyB0byBtYXJrICRlbGVtZW50IGFzIGEganMtaW50ZXJvcCBjbGFzcy4iKSk7CiAgICBqc0ludGVyb3BDbGFzc2VzW2VsZW1lbnRdID0gbmFtZTsKICAgIGlmIChpc0Fub255bW91cykgewogICAgICBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLmFkZChlbGVtZW50KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgbWFya0FzSnNJbnRlcm9wTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50LCBTdHJpbmcgbmFtZSkgewogICAgYXNzZXJ0KAogICAgICAgICFfY2xvc2VkLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiTmF0aXZlQmFzaWNEYXRhQnVpbGRlciBpcyBjbG9zZWQuICIKICAgICAgICAgICAgIlRyeWluZyB0byBtYXJrICRlbGVtZW50IGFzIGEganMtaW50ZXJvcCBtZW1iZXIuIikpOwogICAganNJbnRlcm9wTWVtYmVyc1tlbGVtZW50XSA9IG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVCYXNpY0RhdGEgY2xvc2UoRWxlbWVudEVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBfY2xvc2VkID0gdHJ1ZTsKICAgIHJldHVybiBuZXcgTmF0aXZlQmFzaWNEYXRhSW1wbCgKICAgICAgICBlbnZpcm9ubWVudCwKICAgICAgICBuYXRpdmVDbGFzc1RhZ0luZm8sCiAgICAgICAganNJbnRlcm9wTGlicmFyaWVzLAogICAgICAgIGpzSW50ZXJvcENsYXNzZXMsCiAgICAgICAgYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcywKICAgICAgICBqc0ludGVyb3BNZW1iZXJzKTsKICB9CgogIHZvaWQgcmVvcGVuRm9yVGVzdGluZygpIHsKICAgIF9jbG9zZWQgPSBmYWxzZTsKICB9Cn0KCmNsYXNzIE5hdGl2ZUJhc2ljRGF0YUltcGwgaW1wbGVtZW50cyBOYXRpdmVCYXNpY0RhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbTmF0aXZlQmFzaWNEYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ25hdGl2ZS1iYXNpYy1kYXRhJzsKCiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbnY7CgogIC8vLyBUYWcgaW5mbyBmb3IgbmF0aXZlIEphdmFTY3JpcHQgY2xhc3NlcyBuYW1lcy4gU2VlCiAgLy8vIFtzZXROYXRpdmVDbGFzc1RhZ0luZm9dLgogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgTmF0aXZlQ2xhc3NUYWc+IG5hdGl2ZUNsYXNzVGFnSW5mbzsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IGxpYnJhcmllcyBpbXBsZW1lbnRlZCB2aWEgdHlwZWQgSmF2YVNjcmlwdCBpbnRlcm9wLgogIGZpbmFsIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcExpYnJhcmllczsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IGNsYXNzZXMgaW1wbGVtZW50ZWQgdmlhIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wQ2xhc3NlczsKCiAgLy8vIEphdmFTY3JpcHQgaW50ZXJvcCBjbGFzc2VzIGFubm90YXRlZCB3aXRoIGBAYW5vbnltb3VzYAogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlczsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IG1lbWJlcnMgaW1wbGVtZW50ZWQgdmlhIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcE1lbWJlcnM7CgogIE5hdGl2ZUJhc2ljRGF0YUltcGwoCiAgICAgIHRoaXMuX2VudiwKICAgICAgdGhpcy5uYXRpdmVDbGFzc1RhZ0luZm8sCiAgICAgIHRoaXMuanNJbnRlcm9wTGlicmFyaWVzLAogICAgICB0aGlzLmpzSW50ZXJvcENsYXNzZXMsCiAgICAgIHRoaXMuYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcywKICAgICAgdGhpcy5qc0ludGVyb3BNZW1iZXJzKTsKCiAgZmFjdG9yeSBOYXRpdmVCYXNpY0RhdGFJbXBsLmZyb21JcigKICAgICAgS2VybmVsVG9FbGVtZW50TWFwIG1hcCwgSXJBbm5vdGF0aW9uRGF0YSBkYXRhKSB7CiAgICBFbGVtZW50RW52aXJvbm1lbnQgZW52ID0gbWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKICAgIE1hcDxDbGFzc0VudGl0eSwgTmF0aXZlQ2xhc3NUYWc+IG5hdGl2ZUNsYXNzVGFnSW5mbyA9IHt9OwogICAgTWFwPExpYnJhcnlFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wTGlicmFyaWVzID0ge307CiAgICBNYXA8Q2xhc3NFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wQ2xhc3NlcyA9IHt9OwogICAgU2V0PENsYXNzRW50aXR5PiBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzID0ge307CiAgICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcE1lbWJlcnMgPSB7fTsKCiAgICBkYXRhLmZvckVhY2hOYXRpdmVDbGFzcygoaXIuQ2xhc3Mgbm9kZSwgU3RyaW5nIHRleHQpIHsKICAgICAgbmF0aXZlQ2xhc3NUYWdJbmZvW21hcC5nZXRDbGFzcyhub2RlKV0gPSBuZXcgTmF0aXZlQ2xhc3NUYWcodGV4dCk7CiAgICB9KTsKICAgIGRhdGEuZm9yRWFjaEpzSW50ZXJvcExpYnJhcnkoKGlyLkxpYnJhcnkgbm9kZSwgU3RyaW5nIG5hbWUpIHsKICAgICAganNJbnRlcm9wTGlicmFyaWVzW2Vudi5sb29rdXBMaWJyYXJ5KG5vZGUuaW1wb3J0VXJpLCByZXF1aXJlZDogdHJ1ZSldID0KICAgICAgICAgIG5hbWU7CiAgICB9KTsKICAgIGRhdGEuZm9yRWFjaEpzSW50ZXJvcENsYXNzKChpci5DbGFzcyBub2RlLCBTdHJpbmcgbmFtZSwKICAgICAgICB7Ym9vbCBpc0Fub255bW91c30pIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gbWFwLmdldENsYXNzKG5vZGUpOwogICAgICBqc0ludGVyb3BDbGFzc2VzW2Nsc10gPSBuYW1lOwogICAgICBpZiAoaXNBbm9ueW1vdXMpIHsKICAgICAgICBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLmFkZChjbHMpOwogICAgICB9CiAgICB9KTsKICAgIGRhdGEuZm9yRWFjaEpzSW50ZXJvcE1lbWJlcigoaXIuTWVtYmVyIG5vZGUsIFN0cmluZyBuYW1lKSB7CiAgICAgIGpzSW50ZXJvcE1lbWJlcnNbbWFwLmdldE1lbWJlcihub2RlKV0gPSBuYW1lOwogICAgfSk7CgogICAgcmV0dXJuIG5ldyBOYXRpdmVCYXNpY0RhdGFJbXBsKGVudiwgbmF0aXZlQ2xhc3NUYWdJbmZvLCBqc0ludGVyb3BMaWJyYXJpZXMsCiAgICAgICAganNJbnRlcm9wQ2xhc3NlcywgYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcywganNJbnRlcm9wTWVtYmVycyk7CiAgfQoKICBmYWN0b3J5IE5hdGl2ZUJhc2ljRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNYXA8Q2xhc3NFbnRpdHksIE5hdGl2ZUNsYXNzVGFnPiBuYXRpdmVDbGFzc1RhZ0luZm8gPQogICAgICAgIHNvdXJjZS5yZWFkQ2xhc3NNYXAoKCkgewogICAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBzb3VyY2UucmVhZFN0cmluZ3MoKTsKICAgICAgYm9vbCBpc05vbkxlYWYgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVDbGFzc1RhZy5pbnRlcm5hbChuYW1lcywgaXNOb25MZWFmKTsKICAgIH0pOwogICAgTWFwPExpYnJhcnlFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wTGlicmFyaWVzID0KICAgICAgICBzb3VyY2UucmVhZExpYnJhcnlNYXAoc291cmNlLnJlYWRTdHJpbmcpOwogICAgTWFwPENsYXNzRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcENsYXNzZXMgPQogICAgICAgIHNvdXJjZS5yZWFkQ2xhc3NNYXAoc291cmNlLnJlYWRTdHJpbmcpOwogICAgU2V0PENsYXNzRW50aXR5PiBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzID0gc291cmNlLnJlYWRDbGFzc2VzKCkudG9TZXQoKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wTWVtYmVycyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJNYXAoKE1lbWJlckVudGl0eSBtZW1iZXIpID0+IHNvdXJjZS5yZWFkU3RyaW5nKCkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBOYXRpdmVCYXNpY0RhdGFJbXBsKAogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBuYXRpdmVDbGFzc1RhZ0luZm8sCiAgICAgICAganNJbnRlcm9wTGlicmFyaWVzLAogICAgICAgIGpzSW50ZXJvcENsYXNzZXMsCiAgICAgICAgYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcywKICAgICAgICBqc0ludGVyb3BNZW1iZXJzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzc01hcChuYXRpdmVDbGFzc1RhZ0luZm8sIChOYXRpdmVDbGFzc1RhZyB0YWcpIHsKICAgICAgc2luay53cml0ZVN0cmluZ3ModGFnLm5hbWVzKTsKICAgICAgc2luay53cml0ZUJvb2wodGFnLmlzTm9uTGVhZik7CiAgICB9KTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5TWFwKGpzSW50ZXJvcExpYnJhcmllcywgc2luay53cml0ZVN0cmluZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NNYXAoanNJbnRlcm9wQ2xhc3Nlcywgc2luay53cml0ZVN0cmluZyk7CiAgICBzaW5rLndyaXRlQ2xhc3Nlcyhhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAoanNJbnRlcm9wTWVtYmVycywKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgU3RyaW5nIG5hbWUpID0+IHNpbmsud3JpdGVTdHJpbmcobmFtZSkpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNOYXRpdmVDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoaXNKc0ludGVyb3BDbGFzcyhlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gbmF0aXZlQ2xhc3NUYWdJbmZvLmNvbnRhaW5zS2V5KGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IGdldE5hdGl2ZVRhZ3NPZkNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIG5hdGl2ZUNsYXNzVGFnSW5mb1tjbHNdLm5hbWVzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNOYXRpdmVUYWdzRm9yY2VkTm9uTGVhZihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBuYXRpdmVDbGFzc1RhZ0luZm9bY2xzXS5pc05vbkxlYWY7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0pzSW50ZXJvcFVzZWQgPT4KICAgICAganNJbnRlcm9wTGlicmFyaWVzLmlzTm90RW1wdHkgfHwganNJbnRlcm9wQ2xhc3Nlcy5pc05vdEVtcHR5OwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbnRlcm9wTGlicmFyeShMaWJyYXJ5RW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBqc0ludGVyb3BMaWJyYXJpZXMuY29udGFpbnNLZXkoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbnRlcm9wQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcENsYXNzZXMuY29udGFpbnNLZXkoZWxlbWVudCk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGV4cGxpY2l0bHkgbWFya2VkIGFzIHBhcnQgb2YgSnNJbnRlcm9wLgogIGJvb2wgX2lzSnNJbnRlcm9wTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4ganNJbnRlcm9wTWVtYmVycy5jb250YWluc0tleShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc0ludGVyb3BNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNoYXJlIHRoaXMgd2l0aCBbTmF0aXZlRGF0YUltcGwuaXNKc0ludGVyb3BNZW1iZXJdLgogICAgaWYgKGVsZW1lbnQuaXNGdW5jdGlvbiB8fAogICAgICAgIGVsZW1lbnQuaXNDb25zdHJ1Y3RvciB8fAogICAgICAgIGVsZW1lbnQuaXNHZXR0ZXIgfHwKICAgICAgICBlbGVtZW50LmlzU2V0dGVyKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gZWxlbWVudDsKICAgICAgaWYgKCFmdW5jdGlvbi5pc0V4dGVybmFsKSByZXR1cm4gZmFsc2U7CgogICAgICBpZiAoX2lzSnNJbnRlcm9wTWVtYmVyKGZ1bmN0aW9uKSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGlzSnNJbnRlcm9wQ2xhc3MoZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MpOwogICAgICB9CiAgICAgIGlmIChmdW5jdGlvbi5pc1RvcExldmVsKSB7CiAgICAgICAgcmV0dXJuIGlzSnNJbnRlcm9wTGlicmFyeShmdW5jdGlvbi5saWJyYXJ5KTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2lzSnNJbnRlcm9wTWVtYmVyKGVsZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNOYXRpdmVDbGFzcyhlbGVtZW50KSB8fCBpc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKF9lbnYuZ2V0U3VwZXJDbGFzcyhlbGVtZW50KSk7CiAgfQp9CgpjbGFzcyBOYXRpdmVEYXRhQnVpbGRlckltcGwgaW1wbGVtZW50cyBOYXRpdmVEYXRhQnVpbGRlciB7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhSW1wbCBfbmF0aXZlQmFzaWNEYXRhOwoKICAvLy8gVGhlIEphdmFTY3JpcHQgbmFtZXMgZm9yIG5hdGl2ZSBKYXZhU2NyaXB0IGVsZW1lbnRzIGltcGxlbWVudGVkLgogIE1hcDxNZW1iZXJFbnRpdHksIFN0cmluZz4gbmF0aXZlTWVtYmVyTmFtZSA9IDxNZW1iZXJFbnRpdHksIFN0cmluZz57fTsKCiAgLy8vIENhY2hlIGZvciBbTmF0aXZlQmVoYXZpb3JdcyBmb3IgY2FsbGluZyBuYXRpdmUgbWV0aG9kcy4KICBNYXA8RnVuY3Rpb25FbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVNZXRob2RCZWhhdmlvciA9CiAgICAgIDxGdW5jdGlvbkVudGl0eSwgTmF0aXZlQmVoYXZpb3I+e307CgogIC8vLyBDYWNoZSBmb3IgW05hdGl2ZUJlaGF2aW9yXXMgZm9yIHJlYWRpbmcgZnJvbSBuYXRpdmUgZmllbGRzLgogIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciA9CiAgICAgIDxGaWVsZEVudGl0eSwgTmF0aXZlQmVoYXZpb3I+e307CgogIC8vLyBDYWNoZSBmb3IgW05hdGl2ZUJlaGF2aW9yXXMgZm9yIHdyaXRpbmcgdG8gbmF0aXZlIGZpZWxkcy4KICBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yID0KICAgICAgPEZpZWxkRW50aXR5LCBOYXRpdmVCZWhhdmlvcj57fTsKCiAgTmF0aXZlRGF0YUJ1aWxkZXJJbXBsKHRoaXMuX25hdGl2ZUJhc2ljRGF0YSk7CgogIEBvdmVycmlkZQogIHZvaWQgc2V0TmF0aXZlTWVtYmVyTmFtZShNZW1iZXJFbnRpdHkgZWxlbWVudCwgU3RyaW5nIG5hbWUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHNldHRpbmcgdGhpcyBtb3JlIHRoYW4gb25jZS4gVGhlIGVucXVldWVyCiAgICAvLyBtaWdodCBlbnF1ZXVlIFtlbGVtZW50XSBzZXZlcmFsIHRpbWVzIChiZWZvcmUgcHJvY2Vzc2luZyBpdCkgYW5kIGNvbXB1dGVzCiAgICAvLyBuYW1lIG9uIGVhY2ggY2FsbCB0byBgaW50ZXJuYWxBZGRUb1dvcmtMaXN0YC4KICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVNZW1iZXJOYW1lW2VsZW1lbnRdID09IG51bGwgfHwgbmF0aXZlTWVtYmVyTmFtZVtlbGVtZW50XSA9PSBuYW1lLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiTmF0aXZlIG1lbWJlciBuYW1lIHNldCBpbmNvbnNpc3RlbnRseSBvbiAkZWxlbWVudDogIgogICAgICAgICAgICAiRXhpc3RpbmcgbmFtZSAnJHtuYXRpdmVNZW1iZXJOYW1lW2VsZW1lbnRdfScsICIKICAgICAgICAgICAgIm5ldyBuYW1lICckbmFtZScuIikpOwogICAgbmF0aXZlTWVtYmVyTmFtZVtlbGVtZW50XSA9IG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldE5hdGl2ZU1ldGhvZEJlaGF2aW9yKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpIHsKICAgIG5hdGl2ZU1ldGhvZEJlaGF2aW9yW21ldGhvZF0gPSBiZWhhdmlvcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKSB7CiAgICBuYXRpdmVGaWVsZExvYWRCZWhhdmlvcltmaWVsZF0gPSBiZWhhdmlvcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0TmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKEZpZWxkRW50aXR5IGZpZWxkLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yW2ZpZWxkXSA9IGJlaGF2aW9yOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlRGF0YSBjbG9zZSgpID0+IG5ldyBOYXRpdmVEYXRhSW1wbChfbmF0aXZlQmFzaWNEYXRhLCBuYXRpdmVNZW1iZXJOYW1lLAogICAgICBuYXRpdmVNZXRob2RCZWhhdmlvciwgbmF0aXZlRmllbGRMb2FkQmVoYXZpb3IsIG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcik7Cn0KCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSBmaWVsZHMgdGhhdCBvdmVybGFwIHdpdGggW05hdGl2ZUJhc2ljRGF0YV0sIGxpa2UKLy8gW2Fub255bW91c0pzSW50ZXJvcENsYXNzZXNdLgpjbGFzcyBOYXRpdmVEYXRhSW1wbCBpbXBsZW1lbnRzIE5hdGl2ZURhdGEsIE5hdGl2ZUJhc2ljRGF0YUltcGwgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbTmF0aXZlRGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICduYXRpdmUtZGF0YSc7CgogIC8vLyBQcmVmaXggdXNlZCB0byBlc2NhcGUgSlMgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIERhcnQgbmFtZXMKICAvLy8gd2hlbiB1c2luZyBKU0ludGVyb3AuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBfanNJbnRlcm9wRXNjYXBlUHJlZml4ID0gcidKUyQnOwoKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGFJbXBsIF9uYXRpdmVCYXNpY0RhdGE7CgogIC8vLyBUaGUgSmF2YVNjcmlwdCBuYW1lcyBmb3IgbmF0aXZlIEphdmFTY3JpcHQgZWxlbWVudHMgaW1wbGVtZW50ZWQuCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBuYXRpdmVNZW1iZXJOYW1lOwoKICAvLy8gQ2FjaGUgZm9yIFtOYXRpdmVCZWhhdmlvcl1zIGZvciBjYWxsaW5nIG5hdGl2ZSBtZXRob2RzLgogIGZpbmFsIE1hcDxGdW5jdGlvbkVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZU1ldGhvZEJlaGF2aW9yOwoKICAvLy8gQ2FjaGUgZm9yIFtOYXRpdmVCZWhhdmlvcl1zIGZvciByZWFkaW5nIGZyb20gbmF0aXZlIGZpZWxkcy4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRMb2FkQmVoYXZpb3I7CgogIC8vLyBDYWNoZSBmb3IgW05hdGl2ZUJlaGF2aW9yXXMgZm9yIHdyaXRpbmcgdG8gbmF0aXZlIGZpZWxkcy4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yOwoKICBOYXRpdmVEYXRhSW1wbCgKICAgICAgdGhpcy5fbmF0aXZlQmFzaWNEYXRhLAogICAgICB0aGlzLm5hdGl2ZU1lbWJlck5hbWUsCiAgICAgIHRoaXMubmF0aXZlTWV0aG9kQmVoYXZpb3IsCiAgICAgIHRoaXMubmF0aXZlRmllbGRMb2FkQmVoYXZpb3IsCiAgICAgIHRoaXMubmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKTsKCiAgZmFjdG9yeSBOYXRpdmVEYXRhSW1wbC5mcm9tSXIoS2VybmVsVG9FbGVtZW50TWFwIG1hcCwgSXJBbm5vdGF0aW9uRGF0YSBkYXRhKSB7CiAgICBOYXRpdmVCYXNpY0RhdGFJbXBsIG5hdGl2ZUJhc2ljRGF0YSA9CiAgICAgICAgbmV3IE5hdGl2ZUJhc2ljRGF0YUltcGwuZnJvbUlyKG1hcCwgZGF0YSk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IG5hdGl2ZU1lbWJlck5hbWUgPSB7fTsKICAgIE1hcDxGdW5jdGlvbkVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZU1ldGhvZEJlaGF2aW9yID0ge307CiAgICBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRMb2FkQmVoYXZpb3IgPSB7fTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IgPSB7fTsKCiAgICBkYXRhLmZvckVhY2hOYXRpdmVNZXRob2REYXRhKChpci5NZW1iZXIgbm9kZSwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywKICAgICAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucykgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gbWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgbmF0aXZlTWVtYmVyTmFtZVttZW1iZXJdID0gbmFtZTsKICAgICAgYm9vbCBpc0pzSW50ZXJvcCA9IG5hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihtZW1iZXIpOwogICAgICBuYXRpdmVNZXRob2RCZWhhdmlvclttZW1iZXJdID0gbWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yTWV0aG9kKAogICAgICAgICAgbm9kZSwgY3JlYXRlc0Fubm90YXRpb25zLCByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApOwogICAgfSk7CgogICAgZGF0YS5mb3JFYWNoTmF0aXZlRmllbGREYXRhKChpci5NZW1iZXIgbm9kZSwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywKICAgICAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucykgewogICAgICBGaWVsZEVudGl0eSBmaWVsZCA9IG1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgIG5hdGl2ZU1lbWJlck5hbWVbZmllbGRdID0gbmFtZTsKICAgICAgYm9vbCBpc0pzSW50ZXJvcCA9IG5hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihmaWVsZCk7CiAgICAgIG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yW2ZpZWxkXSA9IG1hcC5nZXROYXRpdmVCZWhhdmlvckZvckZpZWxkTG9hZCgKICAgICAgICAgIG5vZGUsIGNyZWF0ZXNBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLAogICAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKTsKICAgICAgbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yW2ZpZWxkXSA9CiAgICAgICAgICBtYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZFN0b3JlKG5vZGUpOwogICAgfSk7CgogICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRhSW1wbCgKICAgICAgICBuYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgbmF0aXZlTWVtYmVyTmFtZSwKICAgICAgICBuYXRpdmVNZXRob2RCZWhhdmlvciwKICAgICAgICBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciwKICAgICAgICBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IpOwogIH0KCiAgZmFjdG9yeSBOYXRpdmVEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGEgPQogICAgICAgIG5ldyBOYXRpdmVCYXNpY0RhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgZWxlbWVudEVudmlyb25tZW50KTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIFN0cmluZz4gbmF0aXZlTWVtYmVyTmFtZSA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJNYXAoKE1lbWJlckVudGl0eSBtZW1iZXIpID0+IHNvdXJjZS5yZWFkU3RyaW5nKCkpOwogICAgTWFwPEZ1bmN0aW9uRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlTWV0aG9kQmVoYXZpb3IgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICAgICAgICBuZXcgTmF0aXZlQmVoYXZpb3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgTWFwPE1lbWJlckVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck1hcCgoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgICAgICAgbmV3IE5hdGl2ZUJlaGF2aW9yLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICAgICAgICBuZXcgTmF0aXZlQmVoYXZpb3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRhSW1wbCgKICAgICAgICBuYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgbmF0aXZlTWVtYmVyTmFtZSwKICAgICAgICBuYXRpdmVNZXRob2RCZWhhdmlvciwKICAgICAgICBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciwKICAgICAgICBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgX25hdGl2ZUJhc2ljRGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CgogICAgc2luay53cml0ZU1lbWJlck1hcChuYXRpdmVNZW1iZXJOYW1lLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdHJpbmcgbmFtZSkgPT4gc2luay53cml0ZVN0cmluZyhuYW1lKSk7CgogICAgc2luay53cml0ZU1lbWJlck1hcChuYXRpdmVNZXRob2RCZWhhdmlvciwKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpIHsKICAgICAgYmVoYXZpb3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CgogICAgc2luay53cml0ZU1lbWJlck1hcChuYXRpdmVGaWVsZExvYWRCZWhhdmlvciwKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpIHsKICAgICAgYmVoYXZpb3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvciwKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpIHsKICAgICAgYmVoYXZpb3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CgogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGdldCBqc0ludGVyb3BMaWJyYXJpZXMgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5qc0ludGVyb3BMaWJyYXJpZXM7CgogIEBvdmVycmlkZQogIFNldDxDbGFzc0VudGl0eT4gZ2V0IGFub255bW91c0pzSW50ZXJvcENsYXNzZXMgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5hbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBNYXA8Q2xhc3NFbnRpdHksIFN0cmluZz4gZ2V0IGpzSW50ZXJvcENsYXNzZXMgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5qc0ludGVyb3BDbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IGdldCBqc0ludGVyb3BNZW1iZXJzID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuanNJbnRlcm9wTWVtYmVyczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Fub255bW91c0pzSW50ZXJvcENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc05hdGl2ZUNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVDbGFzcyhlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IGdldE5hdGl2ZVRhZ3NPZkNsYXNzKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5nZXROYXRpdmVUYWdzT2ZDbGFzcyhjbHMpOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc05hdGl2ZVRhZ3NGb3JjZWROb25MZWFmKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5oYXNOYXRpdmVUYWdzRm9yY2VkTm9uTGVhZihjbHMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0pzSW50ZXJvcFVzZWQgPT4gX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcFVzZWQ7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc0ludGVyb3BMaWJyYXJ5KExpYnJhcnlFbnRpdHkgZWxlbWVudCkgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcExpYnJhcnkoZWxlbWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc0ludGVyb3BDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSA9PgogICAgICBfbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoZWxlbWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoQ2xhc3NFbnRpdHkgZWxlbWVudCkgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldEpzSW50ZXJvcExpYnJhcnlOYW1lKExpYnJhcnlFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcExpYnJhcmllc1tlbGVtZW50XTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRKc0ludGVyb3BDbGFzc05hbWUoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcENsYXNzZXNbZWxlbWVudF07CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0SnNJbnRlcm9wTWVtYmVyTmFtZShNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcE1lbWJlcnNbZWxlbWVudF07CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9pc0pzSW50ZXJvcE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcE1lbWJlcnMuY29udGFpbnNLZXkoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbnRlcm9wTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC5pc0Z1bmN0aW9uIHx8CiAgICAgICAgZWxlbWVudC5pc0NvbnN0cnVjdG9yIHx8CiAgICAgICAgZWxlbWVudC5pc0dldHRlciB8fAogICAgICAgIGVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBlbGVtZW50OwogICAgICBpZiAoIWZ1bmN0aW9uLmlzRXh0ZXJuYWwpIHJldHVybiBmYWxzZTsKCiAgICAgIGlmIChfaXNKc0ludGVyb3BNZW1iZXIoZnVuY3Rpb24pKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gaXNKc0ludGVyb3BDbGFzcyhmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcyk7CiAgICAgIH0KICAgICAgaWYgKGZ1bmN0aW9uLmlzVG9wTGV2ZWwpIHsKICAgICAgICByZXR1cm4gaXNKc0ludGVyb3BMaWJyYXJ5KGZ1bmN0aW9uLmxpYnJhcnkpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfaXNKc0ludGVyb3BNZW1iZXIoZWxlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0ZpeGVkQmFja2VuZE5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBpc0pzSW50ZXJvcE1lbWJlcihlbGVtZW50KSB8fCBuYXRpdmVNZW1iZXJOYW1lLmNvbnRhaW5zS2V5KGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldEZpeGVkQmFja2VuZE5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIFN0cmluZyBuYW1lID0gbmF0aXZlTWVtYmVyTmFtZVtlbGVtZW50XTsKICAgIGlmIChuYW1lID09IG51bGwgJiYgaXNKc0ludGVyb3BNZW1iZXIoZWxlbWVudCkpIHsKICAgICAgLy8gSWYgYW4gZWxlbWVudCBpc0pzSW50ZXJvcCBidXQgX2lzSnNJbnRlcm9wIGlzIGZhbHNlIHRoYXQgbWVhbnMgaXQgaXMKICAgICAgLy8gY29uc2lkZXJlZCBpbnRlcm9wIGFzIHRoZSBwYXJlbnQgY2xhc3MgaXMgaW50ZXJvcC4KICAgICAgbmFtZSA9IGVsZW1lbnQuaXNDb25zdHJ1Y3RvcgogICAgICAgICAgPyBfanNDbGFzc05hbWVIZWxwZXIoZWxlbWVudC5lbmNsb3NpbmdDbGFzcykKICAgICAgICAgIDogX2pzTWVtYmVyTmFtZUhlbHBlcihlbGVtZW50KTsKICAgICAgbmF0aXZlTWVtYmVyTmFtZVtlbGVtZW50XSA9IG5hbWU7CiAgICB9CiAgICByZXR1cm4gbmFtZTsKICB9CgogIFN0cmluZyBfanNMaWJyYXJ5TmFtZUhlbHBlcihMaWJyYXJ5RW50aXR5IGVsZW1lbnQpIHsKICAgIFN0cmluZyBqc0ludGVyb3BOYW1lID0gZ2V0SnNJbnRlcm9wTGlicmFyeU5hbWUoZWxlbWVudCk7CiAgICBpZiAoanNJbnRlcm9wTmFtZSAhPSBudWxsICYmIGpzSW50ZXJvcE5hbWUuaXNOb3RFbXB0eSkgcmV0dXJuIGpzSW50ZXJvcE5hbWU7CiAgICByZXR1cm4gJ3NlbGYnOwogIH0KCiAgU3RyaW5nIF9qc0NsYXNzTmFtZUhlbHBlcihDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBTdHJpbmcganNJbnRlcm9wTmFtZSA9IGdldEpzSW50ZXJvcENsYXNzTmFtZShlbGVtZW50KTsKICAgIGlmIChqc0ludGVyb3BOYW1lICE9IG51bGwgJiYganNJbnRlcm9wTmFtZS5pc05vdEVtcHR5KSByZXR1cm4ganNJbnRlcm9wTmFtZTsKICAgIHJldHVybiBjb21wdXRlVW5lc2NhcGVkSlNJbnRlcm9wTmFtZShlbGVtZW50Lm5hbWUpOwogIH0KCiAgU3RyaW5nIF9qc01lbWJlck5hbWVIZWxwZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIFN0cmluZyBqc0ludGVyb3BOYW1lID0ganNJbnRlcm9wTWVtYmVyc1tlbGVtZW50XTsKICAgIGFzc2VydCgKICAgICAgICAhKGpzSW50ZXJvcE1lbWJlcnMuY29udGFpbnNLZXkoZWxlbWVudCkgJiYganNJbnRlcm9wTmFtZSA9PSBudWxsKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgJ01lbWJlciAkZWxlbWVudCBpcyBqcyBpbnRlcm9wIGJ1dCBqcyBpbnRlcm9wIG5hbWUgaGFzIG5vdCB5ZXQgJwogICAgICAgICAgICAnYmVlbiBjb21wdXRlZC4nKSk7CiAgICBpZiAoanNJbnRlcm9wTmFtZSAhPSBudWxsICYmIGpzSW50ZXJvcE5hbWUuaXNOb3RFbXB0eSkgewogICAgICByZXR1cm4ganNJbnRlcm9wTmFtZTsKICAgIH0KICAgIHJldHVybiBjb21wdXRlVW5lc2NhcGVkSlNJbnRlcm9wTmFtZShlbGVtZW50Lm5hbWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSBKYXZhU2NyaXB0IHBhdGggc3BlY2lmeWluZyB0aGUgY29udGV4dCBpbiB3aGljaAogIC8vLyBbZWxlbWVudC5maXhlZEJhY2tlbmROYW1lXSBzaG91bGQgYmUgZXZhbHVhdGVkLiBPbmx5IGFwcGxpY2FibGUgZm9yCiAgLy8vIGVsZW1lbnRzIHVzaW5nIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KICAvLy8gRm9yIGV4YW1wbGU6IGZpeGVkQmFja2VuZFBhdGggZm9yIHRoZSBzdGF0aWMgbWV0aG9kIGNyZWF0ZU1hcCBpbiB0aGUKICAvLy8gTWFwIGNsYXNzIG9mIHRoZSBnb29nLm1hcCBKYXZhU2NyaXB0IGxpYnJhcnkgd291bGQgaGF2ZSBwYXRoCiAgLy8vICJnb29nLm1hcHMuTWFwIi4KICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0Rml4ZWRCYWNrZW5kTWV0aG9kUGF0aChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoIWlzSnNJbnRlcm9wTWVtYmVyKGVsZW1lbnQpKSByZXR1cm4gbnVsbDsKICAgIGlmIChlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybiAndGhpcyc7CiAgICBpZiAoZWxlbWVudC5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiBfZml4ZWRCYWNrZW5kQ2xhc3NQYXRoKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpOwogICAgfQogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoX2pzTGlicmFyeU5hbWVIZWxwZXIoZWxlbWVudC5saWJyYXJ5KSk7CiAgICBpZiAoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgnLicpLi53cml0ZShfanNDbGFzc05hbWVIZWxwZXIoZWxlbWVudC5lbmNsb3NpbmdDbGFzcykpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBTdHJpbmcgX2ZpeGVkQmFja2VuZENsYXNzUGF0aChDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoIWlzSnNJbnRlcm9wQ2xhc3MoZWxlbWVudCkpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9qc0xpYnJhcnlOYW1lSGVscGVyKGVsZW1lbnQubGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTmF0aXZlTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoaXNKc0ludGVyb3BNZW1iZXIoZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG5hdGl2ZU1lbWJlck5hbWUuY29udGFpbnNLZXkoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVNZXRob2RCZWhhdmlvcihGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVNZXRob2RCZWhhdmlvci5jb250YWluc0tleShtZXRob2QpLAogICAgICAgIGZhaWxlZEF0KG1ldGhvZCwKICAgICAgICAgICAgIk5vIG5hdGl2ZSBtZXRob2QgYmVoYXZpb3IgaGFzIGJlZW4gY29tcHV0ZWQgZm9yICRtZXRob2QuIikpOwogICAgcmV0dXJuIG5hdGl2ZU1ldGhvZEJlaGF2aW9yW21ldGhvZF07CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVGaWVsZExvYWRCZWhhdmlvcihGaWVsZEVudGl0eSBmaWVsZCkgewogICAgYXNzZXJ0KAogICAgICAgIG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yLmNvbnRhaW5zS2V5KGZpZWxkKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZmllbGQsCiAgICAgICAgICAgICJObyBuYXRpdmUgZmllbGQgbG9hZCBiZWhhdmlvciBoYXMgYmVlbiAiCiAgICAgICAgICAgICJjb21wdXRlZCBmb3IgJGZpZWxkLiIpKTsKICAgIHJldHVybiBuYXRpdmVGaWVsZExvYWRCZWhhdmlvcltmaWVsZF07CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IuY29udGFpbnNLZXkoZmllbGQpLAogICAgICAgIGZhaWxlZEF0KGZpZWxkLAogICAgICAgICAgICAiTm8gbmF0aXZlIGZpZWxkIHN0b3JlIGJlaGF2aW9yIGhhcyBiZWVuIGNvbXB1dGVkIGZvciAkZmllbGQuIikpOwogICAgcmV0dXJuIG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcltmaWVsZF07CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgY29tcHV0ZVVuZXNjYXBlZEpTSW50ZXJvcE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBuYW1lLnN0YXJ0c1dpdGgoX2pzSW50ZXJvcEVzY2FwZVByZWZpeCkKICAgICAgICA/IG5hbWUuc3Vic3RyaW5nKF9qc0ludGVyb3BFc2NhcGVQcmVmaXgubGVuZ3RoKQogICAgICAgIDogbmFtZTsKICB9CgogIEBvdmVycmlkZQogIE1hcDxDbGFzc0VudGl0eSwgTmF0aXZlQ2xhc3NUYWc+IGdldCBuYXRpdmVDbGFzc1RhZ0luZm8gPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5uYXRpdmVDbGFzc1RhZ0luZm87CgogIEBvdmVycmlkZQogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VudiA9PiBfbmF0aXZlQmFzaWNEYXRhLl9lbnY7Cn0KCmNsYXNzIE5hdGl2ZUNsYXNzVGFnIHsKICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZXM7CiAgZmluYWwgYm9vbCBpc05vbkxlYWY7CgogIGZhY3RvcnkgTmF0aXZlQ2xhc3NUYWcoU3RyaW5nIHRhZ1RleHQpIHsKICAgIExpc3Q8U3RyaW5nPiB0YWdzID0gdGFnVGV4dC5zcGxpdCgnLCcpOwogICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gdGFncy53aGVyZSgocykgPT4gIXMuc3RhcnRzV2l0aCgnIScpKS50b0xpc3QoKTsKICAgIGJvb2wgaXNOb25MZWFmID0gdGFncy5jb250YWlucygnIW5vbmxlYWYnKTsKICAgIHJldHVybiBuZXcgTmF0aXZlQ2xhc3NUYWcuaW50ZXJuYWwobmFtZXMsIGlzTm9uTGVhZik7CiAgfQoKICBOYXRpdmVDbGFzc1RhZy5pbnRlcm5hbCh0aGlzLm5hbWVzLCB0aGlzLmlzTm9uTGVhZik7CgogIFN0cmluZyBnZXQgdGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2Ig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dCcgYXMgaXI7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2luZGV4ZWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvanVtcHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwoKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy5kYXJ0JyBzaG93IEpHZW5lcmF0b3JCb2R5OwoKY2xhc3MgR2xvYmFsTG9jYWxzTWFwIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0dsb2JhbExvY2Fsc01hcF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdnbG9iYWwtbG9jYWxzLW1hcCc7CgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIEtlcm5lbFRvTG9jYWxzTWFwPiBfbG9jYWxzTWFwczsKCiAgR2xvYmFsTG9jYWxzTWFwKCkgOiBfbG9jYWxzTWFwcyA9IHt9OwoKICBHbG9iYWxMb2NhbHNNYXAuaW50ZXJuYWwodGhpcy5fbG9jYWxzTWFwcyk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbR2xvYmFsTG9jYWxzTWFwXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEdsb2JhbExvY2Fsc01hcC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWFwPE1lbWJlckVudGl0eSwgS2VybmVsVG9Mb2NhbHNNYXA+IF9sb2NhbHNNYXBzID0ge307CiAgICBpbnQgbWFwQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXBDb3VudDsgaSsrKSB7CiAgICAgIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCA9CiAgICAgICAgICBuZXcgS2VybmVsVG9Mb2NhbHNNYXBJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVycyA9IHNvdXJjZS5yZWFkTWVtYmVycygpOwogICAgICBmb3IgKE1lbWJlckVudGl0eSBtZW1iZXIgaW4gbWVtYmVycykgewogICAgICAgIF9sb2NhbHNNYXBzW21lbWJlcl0gPSBsb2NhbHNNYXA7CiAgICAgIH0KICAgIH0KICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgR2xvYmFsTG9jYWxzTWFwLmludGVybmFsKF9sb2NhbHNNYXBzKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0dsb2JhbExvY2Fsc01hcF0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIC8vIFtLZXJuZWxUb0xvY2Fsc01hcF1zIGFyZSBzaGFyZWQgYmV0d2VlbiBtZW1iZXJzIGFuZCB0aGVpciBuZXN0ZWQKICAgIC8vIGNsb3N1cmVzLCBzbyB3ZSByZXZlcnNlIFtfbG9jYWxzTWFwc10gdG8gZW5zdXJlIHRoYXQgW0tlcm5lbFRvTG9jYWxzTWFwXXMKICAgIC8vIGFyZSBzaGFyZWQgdXBvbiBkZXNlcmlhbGl6YXRpb24uIFRoZSBzaGFyaW5nIGlzIG5lZWRlZCBmb3IgY29ycmVjdG5lc3MKICAgIC8vIHNpbmNlIGNhcHR1cmVkIHZhcmlhYmxlcyB3aWxsIG90aGVyd2lzZSBoYXZlIGRpc3RpbmN0IGxvY2FscyBmb3IgdGhlaXIKICAgIC8vIG5vbi1jYXB0dXJlZCBhbmQgY2FwdHVyZWQgdXNlcy4KICAgIE1hcDxLZXJuZWxUb0xvY2Fsc01hcCwgTGlzdDxNZW1iZXJFbnRpdHk+PiByZXZlcnNlTWFwID0ge307CiAgICBfbG9jYWxzTWFwcy5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXApIHsKICAgICAgcmV2ZXJzZU1hcC5wdXRJZkFic2VudChsb2NhbHNNYXAsICgpID0+IFtdKS5hZGQobWVtYmVyKTsKICAgIH0pOwogICAgc2luay53cml0ZUludChyZXZlcnNlTWFwLmxlbmd0aCk7CiAgICByZXZlcnNlTWFwCiAgICAgICAgLmZvckVhY2goKEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCwgTGlzdDxNZW1iZXJFbnRpdHk+IG1lbWJlcnMpIHsKICAgICAgbG9jYWxzTWFwLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgICAgc2luay53cml0ZU1lbWJlcnMobWVtYmVycyk7CiAgICB9KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW0tlcm5lbFRvTG9jYWxzTWFwXSBmb3IgW21lbWJlcl0uCiAgS2VybmVsVG9Mb2NhbHNNYXAgZ2V0TG9jYWxzTWFwKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIC8vIElmIGVsZW1lbnQgaXMgYSBDb25zdHJ1Y3RvckJvZHlFbnRpdHksIGl0cyBsb2NhbHNNYXAgaXMgdGhlIHNhbWUgYXMgZm9yCiAgICAvLyBDb25zdHJ1Y3RvckVudGl0eSwgYmVjYXVzZSBib3RoIG9mIHRoZXNlIGVudGl0aWVzIGNhbWUgZnJvbSB0aGUgc2FtZQogICAgLy8gY29uc3RydWN0b3Igbm9kZS4gVGhlIGVudGl0aWVzIGFyZSB0d28gc2VwYXJhdGUgcGFydHMgYmVjYXVzZSBKUyBkb2VzIG5vdAogICAgLy8gaGF2ZSB0aGUgY29uY2VwdCBvZiBhbiBpbml0aWFsaXplciBsaXN0LCBzbyB0aGUgY29uc3RydWN0b3IgKGluaXRpYWxpemVyCiAgICAvLyBsaXN0KSBhbmQgdGhlIGNvbnN0cnVjdG9yIGJvZHkgYXJlIGltcGxlbWVudGVkIGFzIHR3byBzZXBhcmF0ZQogICAgLy8gY29uc3RydWN0b3Igc3RlcHMuCiAgICBNZW1iZXJFbnRpdHkgZW50aXR5ID0gbWVtYmVyOwogICAgaWYgKGVudGl0eSBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIG1lbWJlciA9IGVudGl0eS5jb25zdHJ1Y3RvcjsKICAgIHJldHVybiBfbG9jYWxzTWFwcy5wdXRJZkFic2VudCgKICAgICAgICBtZW1iZXIsICgpID0+IG5ldyBLZXJuZWxUb0xvY2Fsc01hcEltcGwobWVtYmVyKSk7CiAgfQoKICAvLy8gQXNzb2NpYXRlcyBbbG9jYWxzTWFwXSB3aXRoIFttZW1iZXJdLgogIC8vLwogIC8vLyBVc2UgdGhpcyBmb3Igc2hhcmluZyBtYXBzIGJldHdlZW4gbWVtYmVycyB0aGF0IHNoYXJlIElSIG5vZGVzLgogIHZvaWQgc2V0TG9jYWxzTWFwKE1lbWJlckVudGl0eSBtZW1iZXIsIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCkgewogICAgYXNzZXJ0KG1lbWJlciAhPSBudWxsLCAiTm8gbWVtYmVyIHByb3ZpZGVkLiIpOwogICAgYXNzZXJ0KCFfbG9jYWxzTWFwcy5jb250YWluc0tleShtZW1iZXIpLAogICAgICAgICJMb2NhbHMgbWFwIGFscmVhZHkgY3JlYXRlZCBmb3IgJG1lbWJlci4iKTsKICAgIF9sb2NhbHNNYXBzW21lbWJlcl0gPSBsb2NhbHNNYXA7CiAgfQp9CgpjbGFzcyBLZXJuZWxUb0xvY2Fsc01hcEltcGwgaW1wbGVtZW50cyBLZXJuZWxUb0xvY2Fsc01hcCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtLZXJuZWxUb0xvY2Fsc01hcEltcGxdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnbG9jYWxzLW1hcCc7CgogIE1lbWJlckVudGl0eSBfY3VycmVudE1lbWJlcjsKICBmaW5hbCBFbnRpdHlEYXRhTWFwPEpMb2NhbCwgTG9jYWxEYXRhPiBfbG9jYWxzID0KICAgICAgbmV3IEVudGl0eURhdGFNYXA8SkxvY2FsLCBMb2NhbERhdGE+KCk7CiAgTWFwPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIEpMb2NhbD4gX3ZhcmlhYmxlTWFwID0KICAgICAgPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIEpMb2NhbD57fTsKICBNYXA8aXIuVHJlZU5vZGUsIEpKdW1wVGFyZ2V0PiBfanVtcFRhcmdldE1hcDsKICBJdGVyYWJsZTxpci5CcmVha1N0YXRlbWVudD4gX2JyZWFrc0FzQ29udGludWU7CgogIEtlcm5lbFRvTG9jYWxzTWFwSW1wbCh0aGlzLl9jdXJyZW50TWVtYmVyKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtLZXJuZWxUb0xvY2Fsc01hcEltcGxdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIEtlcm5lbFRvTG9jYWxzTWFwSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgX2N1cnJlbnRNZW1iZXIgPSBzb3VyY2UucmVhZE1lbWJlcigpOwogICAgaW50IGxvY2Fsc0NvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYWxzQ291bnQ7IGkrKykgewogICAgICBpbnQgaW5kZXggPSBzb3VyY2UucmVhZEludCgpOwogICAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsKCk7CiAgICAgIGJvb2wgaXNSZWd1bGFyUGFyYW1ldGVyID0gc291cmNlLnJlYWRCb29sKCk7CiAgICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSA9IHNvdXJjZS5yZWFkVHJlZU5vZGUoKTsKICAgICAgSkxvY2FsIGxvY2FsID0gbmV3IEpMb2NhbChuYW1lLCBjdXJyZW50TWVtYmVyLAogICAgICAgICAgaXNSZWd1bGFyUGFyYW1ldGVyOiBpc1JlZ3VsYXJQYXJhbWV0ZXIpOwogICAgICBMb2NhbERhdGEgZGF0YSA9IG5ldyBMb2NhbERhdGEobm9kZSk7CiAgICAgIF9sb2NhbHMucmVnaXN0ZXJCeUluZGV4KGluZGV4LCBsb2NhbCwgZGF0YSk7CiAgICAgIF92YXJpYWJsZU1hcFtub2RlXSA9IGxvY2FsOwogICAgfQogICAgaW50IGp1bXBDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBpZiAoanVtcENvdW50ID4gMCkgewogICAgICBfanVtcFRhcmdldE1hcCA9IHt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGp1bXBDb3VudDsgaSsrKSB7CiAgICAgICAgSkp1bXBUYXJnZXQgdGFyZ2V0ID0gbmV3IEpKdW1wVGFyZ2V0LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICAgIExpc3Q8aXIuVHJlZU5vZGU+IG5vZGVzID0gc291cmNlLnJlYWRUcmVlTm9kZXMoKTsKICAgICAgICBmb3IgKGlyLlRyZWVOb2RlIG5vZGUgaW4gbm9kZXMpIHsKICAgICAgICAgIF9qdW1wVGFyZ2V0TWFwW25vZGVdID0gdGFyZ2V0OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgX2JyZWFrc0FzQ29udGludWUgPSBzb3VyY2UucmVhZFRyZWVOb2RlcygpOwogICAgc291cmNlLmVuZCh0YWcpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbS2VybmVsVG9Mb2NhbHNNYXBJbXBsXSB0byBbc2lua10uCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlcihjdXJyZW50TWVtYmVyKTsKICAgIHNpbmsud3JpdGVJbnQoX2xvY2Fscy5zaXplKTsKICAgIF9sb2NhbHMuZm9yRWFjaCgoSkxvY2FsIGxvY2FsLCBMb2NhbERhdGEgZGF0YSkgewogICAgICBhc3NlcnQobG9jYWwubWVtYmVyQ29udGV4dCA9PSBjdXJyZW50TWVtYmVyKTsKICAgICAgc2luay53cml0ZUludChsb2NhbC5sb2NhbEluZGV4KTsKICAgICAgc2luay53cml0ZVN0cmluZ09yTnVsbChsb2NhbC5uYW1lKTsKICAgICAgc2luay53cml0ZUJvb2wobG9jYWwuaXNSZWd1bGFyUGFyYW1ldGVyKTsKICAgICAgc2luay53cml0ZVRyZWVOb2RlKGRhdGEubm9kZSk7CiAgICB9KTsKICAgIGlmIChfanVtcFRhcmdldE1hcCAhPSBudWxsKSB7CiAgICAgIC8vIFtKSnVtcFRhcmdldF1zIGFyZSBzaGFyZWQgYmV0d2VlbiBub2Rlcywgc28gd2UgcmV2ZXJzZQogICAgICAvLyBbX2p1bXBUYXJnZXRNYXBdIHRvIGVuc3VyZSB0aGF0IFtKSnVtcFRhcmdldF1zIGFyZSBzaGFyZWQgdXBvbgogICAgICAvLyBkZXNlcmlhbGl6YXRpb24uIFRoaXMgc2hhcmluZyBpcyBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzIHNpbmNlIGZvcgogICAgICAvLyBpbnN0YW5jZSBhIGxhYmVsIHN0YXRlbWVudCBjb250YWluaW5nIGEgZm9yIGxvb3AgYm90aCBjb25zdGl0dXRlcyB0aGUKICAgICAgLy8gc2FtZSBqdW1wIHRhcmdldCBhbmQgdGhlIFNTQSBncmFwaCBidWlsZGVyIGRlcGVuZGVudHMgb24gdGhpcyBwcm9wZXJ0eS4KICAgICAgTWFwPEpKdW1wVGFyZ2V0LCBMaXN0PGlyLlRyZWVOb2RlPj4gcmV2ZXJzZWRNYXAgPSB7fTsKICAgICAgX2p1bXBUYXJnZXRNYXAuZm9yRWFjaCgoaXIuVHJlZU5vZGUgbm9kZSwgSkp1bXBUYXJnZXQgdGFyZ2V0KSB7CiAgICAgICAgcmV2ZXJzZWRNYXAucHV0SWZBYnNlbnQodGFyZ2V0LCAoKSA9PiBbXSkuYWRkKG5vZGUpOwogICAgICB9KTsKICAgICAgc2luay53cml0ZUludChyZXZlcnNlZE1hcC5sZW5ndGgpOwogICAgICByZXZlcnNlZE1hcC5mb3JFYWNoKChKSnVtcFRhcmdldCB0YXJnZXQsIExpc3Q8aXIuVHJlZU5vZGU+IG5vZGVzKSB7CiAgICAgICAgdGFyZ2V0LndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgICAgICBzaW5rLndyaXRlVHJlZU5vZGVzKG5vZGVzKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlSW50KDApOwogICAgfQogICAgc2luay53cml0ZVRyZWVOb2RlcyhfYnJlYWtzQXNDb250aW51ZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDb21wdXRlIHRoaXMgZWFnZXJseSBmcm9tIHRoZSByb290IG9mIHRoZSBtZW1iZXIuCiAgdm9pZCBfZW5zdXJlSnVtcE1hcChpci5UcmVlTm9kZSBub2RlKSB7CiAgICBpZiAoX2p1bXBUYXJnZXRNYXAgPT0gbnVsbCkgewogICAgICBKdW1wVmlzaXRvciB2aXNpdG9yID0gbmV3IEp1bXBWaXNpdG9yKGN1cnJlbnRNZW1iZXIpOwoKICAgICAgLy8gRmluZCB0aGUgcm9vdCBub2RlIGZvciB0aGUgY3VycmVudCBtZW1iZXIuCiAgICAgIHdoaWxlIChub2RlIGlzISBpci5NZW1iZXIpIHsKICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgICAgIH0KCiAgICAgIG5vZGUuYWNjZXB0KHZpc2l0b3IpOwogICAgICBfanVtcFRhcmdldE1hcCA9IHZpc2l0b3IuanVtcFRhcmdldE1hcDsKICAgICAgX2JyZWFrc0FzQ29udGludWUgPSB2aXNpdG9yLmJyZWFrc0FzQ29udGludWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgZ2V0IGN1cnJlbnRNZW1iZXIgPT4gX2N1cnJlbnRNZW1iZXI7CgogIExvY2FsIGdldExvY2FsQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfbG9jYWxzLmdldEVudGl0eShpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JCcmVhayhpci5CcmVha1N0YXRlbWVudCBub2RlKSB7CiAgICBfZW5zdXJlSnVtcE1hcChub2RlLnRhcmdldCk7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IF9qdW1wVGFyZ2V0TWFwW25vZGVdOwogICAgYXNzZXJ0KHRhcmdldCAhPSBudWxsLCBmYWlsZWRBdChjdXJyZW50TWVtYmVyLCAnTm8gdGFyZ2V0IGZvciAkbm9kZS4nKSk7CiAgICByZXR1cm4gdGFyZ2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZW5lcmF0ZUNvbnRpbnVlRm9yQnJlYWsoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIF9icmVha3NBc0NvbnRpbnVlLmNvbnRhaW5zKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yQ29udGludWVTd2l0Y2goaXIuQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgX2Vuc3VyZUp1bXBNYXAobm9kZS50YXJnZXQpOwogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBfanVtcFRhcmdldE1hcFtub2RlXTsKICAgIGFzc2VydCh0YXJnZXQgIT0gbnVsbCwgZmFpbGVkQXQoY3VycmVudE1lbWJlciwgJ05vIHRhcmdldCBmb3IgJG5vZGUuJykpOwogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIEBvdmVycmlkZQogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvclN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBub2RlKSB7CiAgICBfZW5zdXJlSnVtcE1hcChub2RlKTsKICAgIHJldHVybiBfanVtcFRhcmdldE1hcFtub2RlXTsKICB9CgogIEBvdmVycmlkZQogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvckRvKGlyLkRvU3RhdGVtZW50IG5vZGUpIHsKICAgIF9lbnN1cmVKdW1wTWFwKG5vZGUpOwogICAgcmV0dXJuIF9qdW1wVGFyZ2V0TWFwW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yTGFiZWwoaXIuTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICBfZW5zdXJlSnVtcE1hcChub2RlKTsKICAgIHJldHVybiBfanVtcFRhcmdldE1hcFtub2RlXTsKICB9CgogIEBvdmVycmlkZQogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvclN3aXRjaChpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgX2Vuc3VyZUp1bXBNYXAobm9kZSk7CiAgICByZXR1cm4gX2p1bXBUYXJnZXRNYXBbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JGb3IoaXIuRm9yU3RhdGVtZW50IG5vZGUpIHsKICAgIF9lbnN1cmVKdW1wTWFwKG5vZGUpOwogICAgcmV0dXJuIF9qdW1wVGFyZ2V0TWFwW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yRm9ySW4oaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgX2Vuc3VyZUp1bXBNYXAobm9kZSk7CiAgICByZXR1cm4gX2p1bXBUYXJnZXRNYXBbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JXaGlsZShpci5XaGlsZVN0YXRlbWVudCBub2RlKSB7CiAgICBfZW5zdXJlSnVtcE1hcChub2RlKTsKICAgIHJldHVybiBfanVtcFRhcmdldE1hcFtub2RlXTsKICB9CgogIEBvdmVycmlkZQogIExvY2FsIGdldExvY2FsVmFyaWFibGUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gX3ZhcmlhYmxlTWFwLnB1dElmQWJzZW50KG5vZGUsICgpIHsKICAgICAgSkxvY2FsIGxvY2FsID0gbmV3IEpMb2NhbChub2RlLm5hbWUsIGN1cnJlbnRNZW1iZXIsCiAgICAgICAgICBpc1JlZ3VsYXJQYXJhbWV0ZXI6IG5vZGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uTm9kZSk7CiAgICAgIF9sb2NhbHMucmVnaXN0ZXI8SkxvY2FsLCBMb2NhbERhdGE+KGxvY2FsLCBuZXcgTG9jYWxEYXRhKG5vZGUpKTsKICAgICAgcmV0dXJuIGxvY2FsOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMb2NhbCBnZXRMb2NhbFR5cGVWYXJpYWJsZSgKICAgICAgaXIuVHlwZVBhcmFtZXRlclR5cGUgbm9kZSwgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgLy8gVE9ETyhlZm9ydHVuYSwgam9obm5pd2ludGhlcik6IFdlJ3JlIG5vdCByZWdpc3RlcmluZyB0aGUgdHlwZSB2YXJpYWJsZXMKICAgIC8vIGxpa2Ugd2UgYXJlIGZvciB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb25zLiBJcyB0aGF0IG9rYXkgb3IgZG8gd2UgbmVlZCB0bwogICAgLy8gbWFrZSBUeXBlVmFyaWFibGVMb2NhbCBhIEpMb2NhbD8KICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlTG9jYWwoZWxlbWVudE1hcC5nZXRUeXBlVmFyaWFibGVUeXBlKG5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkZ1bmN0aW9uTm9kZSBnZXRGdW5jdGlvbk5vZGVGb3JQYXJhbWV0ZXIoY292YXJpYW50IEpMb2NhbCBwYXJhbWV0ZXIpIHsKICAgIHJldHVybiBfbG9jYWxzLmdldERhdGEocGFyYW1ldGVyKS5mdW5jdGlvbk5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRMb2NhbFR5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgY292YXJpYW50IEpMb2NhbCBsb2NhbCkgewogICAgcmV0dXJuIF9sb2NhbHMuZ2V0RGF0YShsb2NhbCkuZ2V0RGFydFR5cGUoZWxlbWVudE1hcCk7CiAgfQp9CgpjbGFzcyBKdW1wVmlzaXRvciBleHRlbmRzIGlyLlZpc2l0b3IgewogIGludCBqdW1wSW5kZXggPSAwOwogIGludCBsYWJlbEluZGV4ID0gMDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgbWVtYmVyOwogIGZpbmFsIE1hcDxpci5UcmVlTm9kZSwgSkp1bXBUYXJnZXQ+IGp1bXBUYXJnZXRNYXAgPQogICAgICA8aXIuVHJlZU5vZGUsIEpKdW1wVGFyZ2V0Pnt9OwogIGZpbmFsIFNldDxpci5CcmVha1N0YXRlbWVudD4gYnJlYWtzQXNDb250aW51ZSA9IG5ldyBTZXQ8aXIuQnJlYWtTdGF0ZW1lbnQ+KCk7CgogIEp1bXBWaXNpdG9yKHRoaXMubWVtYmVyKTsKCiAgSkp1bXBUYXJnZXQgX2dldEp1bXBUYXJnZXQoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIGp1bXBUYXJnZXRNYXAucHV0SWZBYnNlbnQobm9kZSwgKCkgewogICAgICByZXR1cm4gbmV3IEpKdW1wVGFyZ2V0KG1lbWJlciwganVtcEluZGV4KyssCiAgICAgICAgICBpc1N3aXRjaDogbm9kZSBpcyBpci5Td2l0Y2hTdGF0ZW1lbnQsCiAgICAgICAgICBpc1N3aXRjaENhc2U6IG5vZGUgaXMgaXIuU3dpdGNoQ2FzZSk7CiAgICB9KTsKICB9CgogIEpMYWJlbERlZmluaXRpb24gX2dldE9yQ3JlYXRlTGFiZWwoSkp1bXBUYXJnZXQgdGFyZ2V0KSB7CiAgICBpZiAodGFyZ2V0LmxhYmVscy5pc0VtcHR5KSB7CiAgICAgIHJldHVybiB0YXJnZXQuYWRkTGFiZWwoJ2xhYmVsJHtsYWJlbEluZGV4Kyt9Jyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdGFyZ2V0LmxhYmVscy5zaW5nbGU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpID0+IG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKCiAgc3RhdGljIGJvb2wgY2FuQmVCcmVha1RhcmdldChpci5UcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZSBpcyBpci5Gb3JTdGF0ZW1lbnQgfHwKICAgICAgICBub2RlIGlzIGlyLkZvckluU3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5XaGlsZVN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuRG9TdGF0ZW1lbnQgfHwKICAgICAgICBub2RlIGlzIGlyLlN3aXRjaFN0YXRlbWVudDsKICB9CgogIHN0YXRpYyBib29sIGNhbkJlQ29udGludWVUYXJnZXQoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUgaXMgaXIuRm9yU3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5Gb3JJblN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuV2hpbGVTdGF0ZW1lbnQgfHwKICAgICAgICBub2RlIGlzIGlyLkRvU3RhdGVtZW50OwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCcmVha1N0YXRlbWVudChpci5CcmVha1N0YXRlbWVudCBub2RlKSB7CiAgICBKSnVtcFRhcmdldCB0YXJnZXQ7CiAgICBpci5UcmVlTm9kZSBib2R5ID0gbm9kZS50YXJnZXQuYm9keTsKICAgIGlyLlRyZWVOb2RlIHBhcmVudCA9IG5vZGUudGFyZ2V0LnBhcmVudDsKCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDb29yZGluYXRlIHdpdGggQ0ZFLXRlYW0gdG8gYXZvaWQgc3VjaCBhcmJpdHJhcnkKICAgIC8vIHJldmVyc2UgZW5naW5lZXJpbmcgbWlzbWF0Y2hlczoKICAgIGlmIChwYXJlbnQgaXMgaXIuQmxvY2sgJiYgcGFyZW50LnN0YXRlbWVudHMubGFzdCA9PSBub2RlLnRhcmdldCkgewogICAgICAvLyBJbiBzdHJvbmcgbW9kZSBmb3IgY29kZSBsaWtlIHRoaXM6CiAgICAgIC8vCiAgICAgIC8vICAgICBmb3IgKGludCBpIGluIGxpc3QpIHsKICAgICAgLy8gICAgICAgY29udGludWU7CiAgICAgIC8vICAgICB9CiAgICAgIC8vCiAgICAgIC8vIGFuIGltcGxpY2l0IGNhc3QgbWF5IGJlIGluc2VydGVkIGJlZm9yZSB0aGUgbGFiZWwgc3RhdGVtZW50LCByZXN1bHRpbmcKICAgICAgLy8gaW4gY29kZSBsaWtlIHRoaXM6CiAgICAgIC8vCiAgICAgIC8vICAgICBmb3IgKHZhciBpIGluIGxpc3QpIHsKICAgICAgLy8gICAgICAgdmFyICMxID0gaSBhcyBpbnQ7CiAgICAgIC8vICAgICAgIGwxOiB7CiAgICAgIC8vICAgICAgICAgIGJyZWFrIGwxOgogICAgICAvLyAgICAgICB9CiAgICAgIC8vICAgICB9CiAgICAgIC8vCiAgICAgIC8vIGZvciB3aGljaCB3ZSBzaG91bGQgc3RpbGwgdXNlIHRoZSBmb3IgbG9vcCBhcyBhIGNvbnRpbnVlIHRhcmdldC4KICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgIH0KICAgIGlmIChjYW5CZUJyZWFrVGFyZ2V0KGJvZHkpKSB7CiAgICAgIC8vIFdlIGhhdmUgY29kZSBsaWtlCiAgICAgIC8vCiAgICAgIC8vICAgICBsMTogZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAgICAgIC8vICAgICAgICBicmVhayBsMToKICAgICAgLy8gICAgIH0KICAgICAgLy8KICAgICAgLy8gYW5kIGNhbiB0aGVyZWZvcmUgdXNlIHRoZSBmb3IgbG9vcCBhcyB0aGUgYnJlYWsgdGFyZ2V0LgogICAgICB0YXJnZXQgPSBfZ2V0SnVtcFRhcmdldChib2R5KTsKICAgICAgdGFyZ2V0LmlzQnJlYWtUYXJnZXQgPSB0cnVlOwogICAgICBpci5UcmVlTm9kZSBzZWFyY2ggPSBub2RlOwogICAgICBib29sIG5lZWRzTGFiZWwgPSBmYWxzZTsKICAgICAgd2hpbGUgKHNlYXJjaCAhPSBub2RlLnRhcmdldCkgewogICAgICAgIGlmIChjYW5CZUJyZWFrVGFyZ2V0KHNlYXJjaCkpIHsKICAgICAgICAgIG5lZWRzTGFiZWwgPSBzZWFyY2ggIT0gYm9keTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzZWFyY2ggPSBzZWFyY2gucGFyZW50OwogICAgICB9CiAgICAgIGlmIChuZWVkc0xhYmVsKSB7CiAgICAgICAgSkxhYmVsRGVmaW5pdGlvbiBsYWJlbCA9IF9nZXRPckNyZWF0ZUxhYmVsKHRhcmdldCk7CiAgICAgICAgbGFiZWwuaXNCcmVha1RhcmdldCA9IHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY2FuQmVDb250aW51ZVRhcmdldChwYXJlbnQpKSB7CiAgICAgIC8vIFdlIGhhdmUgY29kZSBsaWtlCiAgICAgIC8vCiAgICAgIC8vICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIGwxOiB7CiAgICAgIC8vICAgICAgICBicmVhayBsMToKICAgICAgLy8gICAgIH0KICAgICAgLy8KICAgICAgLy8gYW5kIGNhbiB0aGVyZWZvcmUgdXNlIHRoZSBmb3IgbG9vcCBhcyBhIGNvbnRpbnVlIHRhcmdldC4KICAgICAgdGFyZ2V0ID0gX2dldEp1bXBUYXJnZXQocGFyZW50KTsKICAgICAgdGFyZ2V0LmlzQ29udGludWVUYXJnZXQgPSB0cnVlOwogICAgICBicmVha3NBc0NvbnRpbnVlLmFkZChub2RlKTsKICAgICAgaXIuVHJlZU5vZGUgc2VhcmNoID0gbm9kZTsKICAgICAgYm9vbCBuZWVkc0xhYmVsID0gZmFsc2U7CiAgICAgIHdoaWxlIChzZWFyY2ggIT0gbm9kZS50YXJnZXQpIHsKICAgICAgICBpZiAoY2FuQmVDb250aW51ZVRhcmdldChzZWFyY2gpKSB7CiAgICAgICAgICBuZWVkc0xhYmVsID0gc2VhcmNoICE9IGJvZHk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2VhcmNoID0gc2VhcmNoLnBhcmVudDsKICAgICAgfQogICAgICBpZiAobmVlZHNMYWJlbCkgewogICAgICAgIEpMYWJlbERlZmluaXRpb24gbGFiZWwgPSBfZ2V0T3JDcmVhdGVMYWJlbCh0YXJnZXQpOwogICAgICAgIGxhYmVsLmlzQ29udGludWVUYXJnZXQgPSB0cnVlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBXZSBoYXZlIGNvZGUgbGlrZQogICAgICAvLwogICAgICAvLyAgICAgbGFiZWw6IGlmIChjKSB7CiAgICAgIC8vICAgICAgICAgaWYgKGMgPCAxMCkgYnJlYWsgbGFiZWw7CiAgICAgIC8vICAgICB9CiAgICAgIC8vCiAgICAgIC8vIGFuZCBsYWJlbCBpcyB0aGVyZWZvcmUgYWx3YXlzIG5lZWRlZC4KICAgICAgdGFyZ2V0ID0gX2dldEp1bXBUYXJnZXQobm9kZS50YXJnZXQpOwogICAgICB0YXJnZXQuaXNCcmVha1RhcmdldCA9IHRydWU7CiAgICAgIEpMYWJlbERlZmluaXRpb24gbGFiZWwgPSBfZ2V0T3JDcmVhdGVMYWJlbCh0YXJnZXQpOwogICAgICBsYWJlbC5pc0JyZWFrVGFyZ2V0ID0gdHJ1ZTsKICAgIH0KICAgIGp1bXBUYXJnZXRNYXBbbm9kZV0gPSB0YXJnZXQ7CiAgICBzdXBlci52aXNpdEJyZWFrU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBKSnVtcFRhcmdldCB0YXJnZXQgPSBfZ2V0SnVtcFRhcmdldChub2RlLnRhcmdldCk7CiAgICB0YXJnZXQuaXNDb250aW51ZVRhcmdldCA9IHRydWU7CiAgICBqdW1wVGFyZ2V0TWFwW25vZGVdID0gdGFyZ2V0OwogICAgSkxhYmVsRGVmaW5pdGlvbiBsYWJlbCA9IF9nZXRPckNyZWF0ZUxhYmVsKHRhcmdldCk7CiAgICBsYWJlbC5pc0NvbnRpbnVlVGFyZ2V0ID0gdHJ1ZTsKICAgIHN1cGVyLnZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN3aXRjaFN0YXRlbWVudChpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgbm9kZS5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgIGlmIChub2RlLmNhc2VzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gRW5zdXJlIHRoYXQgW25vZGVdIGhhcyBhIGNvcnJlc3BvbmRpbmcgdGFyZ2V0LiBXZSBnZW5lcmF0ZSBhIGJyZWFrIGlmOgogICAgICAvLyAgIC0gYSBzd2l0Y2ggY2FzZSBjYWxscyBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHRocm93cwogICAgICAvLyAgIC0gdGhlcmUncyBhIG1pc3NpbmcgYnJlYWsgb24gdGhlIGxhc3QgY2FzZSBpZiBpdCBpc24ndCBhIGRlZmF1bHQgY2FzZQogICAgICBfZ2V0SnVtcFRhcmdldChub2RlKTsKICAgIH0KICAgIHN1cGVyLnZpc2l0U3dpdGNoU3RhdGVtZW50KG5vZGUpOwogIH0KfQoKY2xhc3MgSkp1bXBUYXJnZXQgZXh0ZW5kcyBKdW1wVGFyZ2V0IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pKdW1wVGFyZ2V0XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2p1bXAtdGFyZ2V0JzsKCiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IG5lc3RpbmdMZXZlbDsKICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gX2xhYmVsczsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzU3dpdGNoOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNTd2l0Y2hDYXNlOwogIEBvdmVycmlkZQogIGJvb2wgaXNCcmVha1RhcmdldDsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29udGludWVUYXJnZXQ7CgogIEpKdW1wVGFyZ2V0KHRoaXMubWVtYmVyQ29udGV4dCwgdGhpcy5uZXN0aW5nTGV2ZWwsCiAgICAgIHt0aGlzLmlzU3dpdGNoOiBmYWxzZSwKICAgICAgdGhpcy5pc1N3aXRjaENhc2U6IGZhbHNlLAogICAgICB0aGlzLmlzQnJlYWtUYXJnZXQ6IGZhbHNlLAogICAgICB0aGlzLmlzQ29udGludWVUYXJnZXQ6IGZhbHNlfSk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSkp1bXBUYXJnZXRdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSkp1bXBUYXJnZXQucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0ID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgIGludCBuZXN0aW5nTGV2ZWwgPSBzb3VyY2UucmVhZEludCgpOwogICAgYm9vbCBpc1N3aXRjaCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc1N3aXRjaENhc2UgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNCcmVha1RhcmdldCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0NvbnRpbnVlVGFyZ2V0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBKSnVtcFRhcmdldCB0YXJnZXQgPSBuZXcgSkp1bXBUYXJnZXQobWVtYmVyQ29udGV4dCwgbmVzdGluZ0xldmVsLAogICAgICAgIGlzU3dpdGNoOiBpc1N3aXRjaCwKICAgICAgICBpc1N3aXRjaENhc2U6IGlzU3dpdGNoQ2FzZSwKICAgICAgICBpc0JyZWFrVGFyZ2V0OiBpc0JyZWFrVGFyZ2V0LAogICAgICAgIGlzQ29udGludWVUYXJnZXQ6IGlzQ29udGludWVUYXJnZXQpOwogICAgaW50IGxhYmVsQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsYWJlbENvdW50OyBpKyspIHsKICAgICAgU3RyaW5nIGxhYmVsTmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgIGJvb2wgaXNCcmVha1RhcmdldCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICBib29sIGlzQ29udGludWVUYXJnZXQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgdGFyZ2V0LmFkZExhYmVsKGxhYmVsTmFtZSwKICAgICAgICAgIGlzQnJlYWtUYXJnZXQ6IGlzQnJlYWtUYXJnZXQsIGlzQ29udGludWVUYXJnZXQ6IGlzQ29udGludWVUYXJnZXQpOwogICAgfQogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pKdW1wVGFyZ2V0XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlcihtZW1iZXJDb250ZXh0KTsKICAgIHNpbmsud3JpdGVJbnQobmVzdGluZ0xldmVsKTsKICAgIHNpbmsud3JpdGVCb29sKGlzU3dpdGNoKTsKICAgIHNpbmsud3JpdGVCb29sKGlzU3dpdGNoQ2FzZSk7CiAgICBzaW5rLndyaXRlQm9vbChpc0JyZWFrVGFyZ2V0KTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ29udGludWVUYXJnZXQpOwogICAgaWYgKF9sYWJlbHMgIT0gbnVsbCkgewogICAgICBzaW5rLndyaXRlSW50KF9sYWJlbHMubGVuZ3RoKTsKICAgICAgZm9yIChMYWJlbERlZmluaXRpb24gZGVmaW5pdGlvbiBpbiBfbGFiZWxzKSB7CiAgICAgICAgc2luay53cml0ZVN0cmluZyhkZWZpbml0aW9uLm5hbWUpOwogICAgICAgIHNpbmsud3JpdGVCb29sKGRlZmluaXRpb24uaXNCcmVha1RhcmdldCk7CiAgICAgICAgc2luay53cml0ZUJvb2woZGVmaW5pdGlvbi5pc0NvbnRpbnVlVGFyZ2V0KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUludCgwKTsKICAgIH0KICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBMYWJlbERlZmluaXRpb24gYWRkTGFiZWwoU3RyaW5nIGxhYmVsTmFtZSwKICAgICAge2Jvb2wgaXNCcmVha1RhcmdldDogZmFsc2UsIGJvb2wgaXNDb250aW51ZVRhcmdldDogZmFsc2V9KSB7CiAgICBfbGFiZWxzID8/PSA8TGFiZWxEZWZpbml0aW9uPltdOwogICAgTGFiZWxEZWZpbml0aW9uIGxhYmVsRGVmaW5pdGlvbiA9IG5ldyBKTGFiZWxEZWZpbml0aW9uKHRoaXMsIGxhYmVsTmFtZSwKICAgICAgICBpc0JyZWFrVGFyZ2V0OiBpc0JyZWFrVGFyZ2V0LCBpc0NvbnRpbnVlVGFyZ2V0OiBpc0NvbnRpbnVlVGFyZ2V0KTsKICAgIF9sYWJlbHMuYWRkKGxhYmVsRGVmaW5pdGlvbik7CiAgICByZXR1cm4gbGFiZWxEZWZpbml0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxMYWJlbERlZmluaXRpb24+IGdldCBsYWJlbHMgewogICAgcmV0dXJuIF9sYWJlbHMgPz8gY29uc3QgPExhYmVsRGVmaW5pdGlvbj5bXTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdKSnVtcFRhcmdldCgnKTsKICAgIHNiLndyaXRlKCdtZW1iZXJDb250ZXh0PScpOwogICAgc2Iud3JpdGUobWVtYmVyQ29udGV4dCk7CiAgICBzYi53cml0ZSgnLG5lc3RpbmdMZXZlbD0nKTsKICAgIHNiLndyaXRlKG5lc3RpbmdMZXZlbCk7CiAgICBzYi53cml0ZSgnLGlzQnJlYWtUYXJnZXQ9Jyk7CiAgICBzYi53cml0ZShpc0JyZWFrVGFyZ2V0KTsKICAgIHNiLndyaXRlKCcsaXNDb250aW51ZVRhcmdldD0nKTsKICAgIHNiLndyaXRlKGlzQ29udGludWVUYXJnZXQpOwogICAgaWYgKF9sYWJlbHMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnLGxhYmVscz0nKTsKICAgICAgc2Iud3JpdGUoX2xhYmVscyk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBKTGFiZWxEZWZpbml0aW9uIGV4dGVuZHMgTGFiZWxEZWZpbml0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBKdW1wVGFyZ2V0IHRhcmdldDsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbGFiZWxOYW1lOwogIEBvdmVycmlkZQogIGJvb2wgaXNCcmVha1RhcmdldDsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29udGludWVUYXJnZXQ7CgogIEpMYWJlbERlZmluaXRpb24odGhpcy50YXJnZXQsIHRoaXMubGFiZWxOYW1lLAogICAgICB7dGhpcy5pc0JyZWFrVGFyZ2V0OiBmYWxzZSwgdGhpcy5pc0NvbnRpbnVlVGFyZ2V0OiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gbGFiZWxOYW1lOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdKTGFiZWxEZWZpbml0aW9uKCcpOwogICAgc2Iud3JpdGUoJyxsYWJlbE5hbWU9Jyk7CiAgICBzYi53cml0ZShsYWJlbE5hbWUpOwogICAgc2Iud3JpdGUoJyxpc0JyZWFrVGFyZ2V0PScpOwogICAgc2Iud3JpdGUoaXNCcmVha1RhcmdldCk7CiAgICBzYi53cml0ZSgnLGlzQ29udGludWVUYXJnZXQ9Jyk7CiAgICBzYi53cml0ZShpc0NvbnRpbnVlVGFyZ2V0KTsKICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIEpMb2NhbCBleHRlbmRzIEluZGV4ZWRMb2NhbCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQ7CgogIC8vLyBUcnVlIGlmIHRoaXMgbG9jYWwgcmVwcmVzZW50cyBhIGxvY2FsIHBhcmFtZXRlci4KICBmaW5hbCBib29sIGlzUmVndWxhclBhcmFtZXRlcjsKCiAgSkxvY2FsKHRoaXMubmFtZSwgdGhpcy5tZW1iZXJDb250ZXh0LCB7dGhpcy5pc1JlZ3VsYXJQYXJhbWV0ZXI6IGZhbHNlfSkgewogICAgYXNzZXJ0KG1lbWJlckNvbnRleHQgaXMhIEpHZW5lcmF0b3JCb2R5KTsKICB9CgogIFN0cmluZyBnZXQgX2tpbmQgPT4gJ2xvY2FsJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJyRfa2luZCgnKTsKICAgIGlmIChtZW1iZXJDb250ZXh0LmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUobWVtYmVyQ29udGV4dC5lbmNsb3NpbmdDbGFzcy5uYW1lKTsKICAgICAgc2Iud3JpdGUoJy4nKTsKICAgIH0KICAgIHNiLndyaXRlKG1lbWJlckNvbnRleHQubmFtZSk7CiAgICBzYi53cml0ZSgnIycpOwogICAgc2Iud3JpdGUobmFtZSk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBMb2NhbERhdGEgewogIGZpbmFsIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZTsKCiAgRGFydFR5cGUgX3R5cGU7CgogIExvY2FsRGF0YSh0aGlzLm5vZGUpOwoKICBEYXJ0VHlwZSBnZXREYXJ0VHlwZShKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX3R5cGUgPz89IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlKTsKICB9CgogIGlyLkZ1bmN0aW9uTm9kZSBnZXQgZnVuY3Rpb25Ob2RlID0+IG5vZGUucGFyZW50Owp9CgovLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIHBhcmFtZXRlciBpbiBbZnVuY3Rpb25dIGluIHRoZSBjYW5vbmljYWwgb3JkZXI6Ci8vLyBQb3NpdGlvbmFsIHBhcmFtZXRlcnMgYnkgaW5kZXgsIHRoZW4gbmFtZWQgcGFyYW1ldGVycyBsZXhpY29ncmFwaGljYWxseS4Kdm9pZCBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckFzTG9jYWwoCiAgICBHbG9iYWxMb2NhbHNNYXAgZ2xvYmFsTG9jYWxzTWFwLAogICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLAogICAgdm9pZCBmKExvY2FsIHBhcmFtZXRlciwge2Jvb2wgaXNFbGlkZWR9KSkgewogIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCA9IGdsb2JhbExvY2Fsc01hcC5nZXRMb2NhbHNNYXAoZnVuY3Rpb24pOwogIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyKGVsZW1lbnRNYXAsIGZ1bmN0aW9uLAogICAgICAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwge2Jvb2wgaXNFbGlkZWR9KSB7CiAgICBmKGxvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHZhcmlhYmxlKSwgaXNFbGlkZWQ6IGlzRWxpZGVkKTsKICB9KTsKfQqChgBOTjwBIQEoARoZJCMhIS4BGywBGEkdMQE6ASgBLgE9Qhc7JSkkQDktKQgGFTYEATMoFUhRTk4nQE0/CCYPTSciCBMEATQ4T0xRUEYaIkYkOgQBLAZFSDMtNCUEAgE7Tx0qAR8zLjUqMDEBLgFDQBcqKCwkLzM7NTMsMyIGJhkbLEk6KikKCAYwFQQBOQwoFSUhNTQnKjAlCCJASEtPUTxGPQopSiYkCg0YBj0TBAFMKiI8ATQjHAgBHC40BgQBDDQBJSUEAQw9IS5NEwQBDDotBAEMTyEuTRMEAQw+GiEEAQw3GiEEAQw/GiEEAQw/GiEEAQw5GiEEAQw9GiEEAQw9GiEEAQw4Lzo/RxQIBAEMHj5PUChIBAEMTDQEAQxNOwQCAScVFh02JFABHAExMDIwMAgEATshNg0jBgQBDDkBMyYlJSIkBAE2JiUlIAQBDDAYKS0BTSdHLAkjGQ8JUBwJIyIVHBEPCUoeBiIbCTAaDwlBJSMhHyYoJxEKIAgYPCQILhsJMBoPCUInJiIhHyYrJxEKIAgYPCcIDRsJHSoPCS8sIzoiBiIlBAEMQjYkIjgjLgQBDDIiIVA/URwGJgQCASdFHSsBJAwaIQwXDBsMFgwZATUdICEmATk+FzYpJyssL0YcJCYtJysuLjEhTQYVEwQBLygVJSEeIiMmGyU0KzI1CA0YBhMEAQwtQyVMSyIcBAEMJTEEAQwWKh4gHSAcIR0kIBscGQYTGgQCATEMGwwaDBYMGQEwQgEMIAwWKiMdGSEdJCATGgQCASQMFSQBNyEBTC4EAR8BDBYqGTAzFQYiExQTGgQCARIlARIBGAE0OAQBMwIBR00lJR8dMEgwO0EGAgEpcGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvbG9jYWxzLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2RhcnQyanNfdGFyZ2V0LmRhcnSXdC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBZGQgYSB0ZXN0IHRoYXQgZW5zdXJlIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXNuJ3QgZGVwZW5kCi8vIG9uIHRoZSBkYXJ0MmpzIGludGVybmFscy4KbGlicmFyeSBjb21waWxlci5zcmMua2VybmVsLmRhcnQyanNfdGFyZ2V0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydCc7CmltcG9ydCAnaW52b2NhdGlvbl9taXJyb3JfY29uc3RhbnRzLmRhcnQnOwoKY29uc3QgSXRlcmFibGU8U3RyaW5nPiBfYWxsb3dlZERhcnRTY2hlbWVQYXRocyA9IGNvbnN0IDxTdHJpbmc+WwogICdhc3luYycsCiAgJ2h0bWwnLAogICdodG1sX2NvbW1vbicsCiAgJ2luZGV4ZWRfZGInLAogICdqcycsCiAgJ2pzX3V0aWwnLAogICdzdmcnLAogICdfbmF0aXZlX3R5cGVkX2RhdGEnLAogICd3ZWJfYXVkaW8nLAogICd3ZWJfZ2wnLAogICd3ZWJfc3FsJwpdOwoKYm9vbCBtYXliZUVuYWJsZU5hdGl2ZShVcmkgdXJpKSB7CiAgYm9vbCBhbGxvd2VkVGVzdExpYnJhcnkoKSB7CiAgICBTdHJpbmcgc2NyaXB0TmFtZSA9IHVyaS5wYXRoOwogICAgcmV0dXJuIHNjcmlwdE5hbWUuY29udGFpbnMoJ3Rlc3RzL2NvbXBpbGVyL2RhcnQyanNfbmF0aXZlJykgfHwKICAgICAgICBzY3JpcHROYW1lLmNvbnRhaW5zKCd0ZXN0cy9jb21waWxlci9kYXJ0MmpzX2V4dHJhJykgfHwKICAgICAgICBzY3JpcHROYW1lLmNvbnRhaW5zKCdnZW5lcmF0ZWRfdGVzdHMvZGFydDJqc19uYXRpdmUvbmF0aXZlX3Rlc3QnKTsKICB9CgogIGJvb2wgYWxsb3dlZERhcnRMaWJyYXJ5KCkgewogICAgaWYgKHVyaS5zY2hlbWUgIT0gJ2RhcnQnKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2FsbG93ZWREYXJ0U2NoZW1lUGF0aHMuY29udGFpbnModXJpLnBhdGgpOwogIH0KCiAgcmV0dXJuIGFsbG93ZWRUZXN0TGlicmFyeSgpIHx8IGFsbG93ZWREYXJ0TGlicmFyeSgpOwp9CgovLy8gQSBrZXJuZWwgW1RhcmdldF0gdG8gY29uZmlndXJlIHRoZSBEYXJ0IEZyb250IEVuZCBmb3IgZGFydDJqcy4KY2xhc3MgRGFydDJqc1RhcmdldCBleHRlbmRzIFRhcmdldCB7CiAgZmluYWwgVGFyZ2V0RmxhZ3MgZmxhZ3M7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIERhcnQyanNUYXJnZXQodGhpcy5uYW1lLCB0aGlzLmZsYWdzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgbGVnYWN5TW9kZSA9PiBmbGFncy5sZWdhY3lNb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBlbmFibGVOb1N1Y2hNZXRob2RGb3J3YXJkZXJzID0+ICFmbGFncy5sZWdhY3lNb2RlOwoKICBAb3ZlcnJpZGUKICBMaXN0PFN0cmluZz4gZ2V0IGV4dHJhUmVxdWlyZWRMaWJyYXJpZXMgPT4gX3JlcXVpcmVkTGlicmFyaWVzW25hbWVdOwoKICBAb3ZlcnJpZGUKICBib29sIG1heURlZmluZVJlc3RyaWN0ZWRUeXBlKFVyaSB1cmkpID0+CiAgICAgIHVyaS5zY2hlbWUgPT0gJ2RhcnQnICYmCiAgICAgICh1cmkucGF0aCA9PSAnY29yZScgfHwgdXJpLnBhdGggPT0gJ19pbnRlcmNlcHRvcnMnKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhbGxvd1BsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MoVXJpIGltcG9ydGVyLCBVcmkgaW1wb3J0ZWQpID0+CiAgICAgIHN1cGVyLmFsbG93UGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2VzcyhpbXBvcnRlciwgaW1wb3J0ZWQpIHx8CiAgICAgIG1heWJlRW5hYmxlTmF0aXZlKGltcG9ydGVyKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBlbmFibGVOYXRpdmUoVXJpIHVyaSkgPT4gbWF5YmVFbmFibGVOYXRpdmUodXJpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgbmF0aXZlRXh0ZW5zaW9uRXhwZWN0c1N0cmluZyA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgZXJyb3JPblVuZXhhY3RXZWJJbnRMaXRlcmFscyA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICB2b2lkIHBlcmZvcm1Nb2R1bGFyVHJhbnNmb3JtYXRpb25zT25MaWJyYXJpZXMoCiAgICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIENvcmVUeXBlcyBjb3JlVHlwZXMsCiAgICAgIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwKICAgICAgTGlzdDxpci5MaWJyYXJ5PiBsaWJyYXJpZXMsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnREZWZpbmVzLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgZGlhZ25vc3RpY1JlcG9ydGVyLAogICAgICB7dm9pZCBsb2dnZXIoU3RyaW5nIG1zZyl9KSB7fQoKICBAb3ZlcnJpZGUKICBpci5FeHByZXNzaW9uIGluc3RhbnRpYXRlSW52b2NhdGlvbigKICAgICAgQ29yZVR5cGVzIGNvcmVUeXBlcywKICAgICAgaXIuRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIGludCBvZmZzZXQsCiAgICAgIGJvb2wgaXNTdXBlcikgewogICAgaW50IGtpbmQ7CiAgICBpZiAobmFtZS5zdGFydHNXaXRoKCdnZXQ6JykpIHsKICAgICAga2luZCA9IGludm9jYXRpb25NaXJyb3JHZXR0ZXJLaW5kOwogICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoNCk7CiAgICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgnc2V0OicpKSB7CiAgICAgIGtpbmQgPSBpbnZvY2F0aW9uTWlycm9yU2V0dGVyS2luZDsKICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDQpOwogICAgfSBlbHNlIHsKICAgICAga2luZCA9IGludm9jYXRpb25NaXJyb3JNZXRob2RLaW5kOwogICAgfQogICAgcmV0dXJuIG5ldyBpci5TdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIGNvcmVUeXBlcy5pbmRleAogICAgICAgICAgICAuZ2V0VG9wTGV2ZWxNZW1iZXIoJ2RhcnQ6Y29yZScsICdfY3JlYXRlSW52b2NhdGlvbk1pcnJvcicpLAogICAgICAgIG5ldyBpci5Bcmd1bWVudHMoPGlyLkV4cHJlc3Npb24+WwogICAgICAgICAgbmV3IGlyLlN0cmluZ0xpdGVyYWwobmFtZSkuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgICBuZXcgaXIuTGlzdExpdGVyYWwoCiAgICAgICAgICAgICAgYXJndW1lbnRzLnR5cGVzLm1hcCgodCkgPT4gbmV3IGlyLlR5cGVMaXRlcmFsKHQpKS50b0xpc3QoKSksCiAgICAgICAgICBuZXcgaXIuTGlzdExpdGVyYWwoYXJndW1lbnRzLnBvc2l0aW9uYWwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgbmV3IGlyLk1hcExpdGVyYWwobmV3IExpc3Q8aXIuTWFwRW50cnk+LmZyb20oCiAgICAgICAgICAgICAgYXJndW1lbnRzLm5hbWVkLm1hcCgoaXIuTmFtZWRFeHByZXNzaW9uIGFyZykgewogICAgICAgICAgICByZXR1cm4gbmV3IGlyLk1hcEVudHJ5KAogICAgICAgICAgICAgICAgbmV3IGlyLlN0cmluZ0xpdGVyYWwoYXJnLm5hbWUpLi5maWxlT2Zmc2V0ID0gYXJnLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICBhcmcudmFsdWUpCiAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gYXJnLmZpbGVPZmZzZXQ7CiAgICAgICAgICB9KSksIGtleVR5cGU6IGNvcmVUeXBlcy5zdHJpbmdDbGFzcy5yYXdUeXBlKQogICAgICAgICAgICAuLmlzQ29uc3QgPSAoYXJndW1lbnRzLm5hbWVkLmxlbmd0aCA9PSAwKQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBhcmd1bWVudHMuZmlsZU9mZnNldCwKICAgICAgICAgIG5ldyBpci5JbnRMaXRlcmFsKGtpbmQpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgIF0pKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5FeHByZXNzaW9uIGluc3RhbnRpYXRlTm9TdWNoTWV0aG9kRXJyb3IoQ29yZVR5cGVzIGNvcmVUeXBlcywKICAgICAgaXIuRXhwcmVzc2lvbiByZWNlaXZlciwgU3RyaW5nIG5hbWUsIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQsCiAgICAgIHtib29sIGlzTWV0aG9kOiBmYWxzZSwKICAgICAgYm9vbCBpc0dldHRlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNTZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzRmllbGQ6IGZhbHNlLAogICAgICBib29sIGlzTG9jYWxWYXJpYWJsZTogZmFsc2UsCiAgICAgIGJvb2wgaXNEeW5hbWljOiBmYWxzZSwKICAgICAgYm9vbCBpc1N1cGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcjogZmFsc2UsCiAgICAgIGJvb2wgaXNUb3BMZXZlbDogZmFsc2V9KSB7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBpbXBsZW1lbnQ7CiAgICByZXR1cm4gbmV3IGlyLkludmFsaWRFeHByZXNzaW9uKG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRzQmFja2VuZCBjb25zdGFudHNCYWNrZW5kKENvcmVUeXBlcyBjb3JlVHlwZXMpID0+CiAgICAgIGNvbnN0IERhcnQyanNDb25zdGFudHNCYWNrZW5kKHN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHM6IHRydWUpOwp9CgovLyBUT0RPKHNpZ211bmQpOiB0aGlzICJleHRyYVJlcXVpcmVkTGlicmFyaWVzIiBuZWVkcyB0byBiZSByZW1vdmVkLi4uCi8vIGNvbXBpbGUtcGxhdGZvcm0gc2hvdWxkIGp1c3Qgc3BlY2lmeSB3aGljaCBsaWJyYXJpZXMgdG8gY29tcGlsZSBpbnN0ZWFkLgpjb25zdCBfcmVxdWlyZWRMaWJyYXJpZXMgPSBjb25zdCA8U3RyaW5nLCBMaXN0PFN0cmluZz4+ewogICdkYXJ0MmpzJzogY29uc3QgPFN0cmluZz5bCiAgICAnZGFydDpfY2hyb21lJywKICAgICdkYXJ0Ol9mb3JlaWduX2hlbHBlcicsCiAgICAnZGFydDpfaW50ZXJjZXB0b3JzJywKICAgICdkYXJ0Ol9pbnRlcm5hbCcsCiAgICAnZGFydDpfanNfZW1iZWRkZWRfbmFtZXMnLAogICAgJ2RhcnQ6X2pzX2hlbHBlcicsCiAgICAnZGFydDpfanNfbmFtZXMnLAogICAgJ2RhcnQ6X25hdGl2ZV90eXBlZF9kYXRhJywKICAgICdkYXJ0OmFzeW5jJywKICAgICdkYXJ0OmNvbGxlY3Rpb24nLAogICAgJ2RhcnQ6aHRtbCcsCiAgICAnZGFydDpodG1sX2NvbW1vbicsCiAgICAnZGFydDppbmRleGVkX2RiJywKICAgICdkYXJ0OmlvJywKICAgICdkYXJ0OmpzJywKICAgICdkYXJ0OmpzX3V0aWwnLAogICAgJ2RhcnQ6bWlycm9ycycsCiAgICAnZGFydDpzdmcnLAogICAgJ2RhcnQ6d2ViX2F1ZGlvJywKICAgICdkYXJ0OndlYl9nbCcsCiAgICAnZGFydDp3ZWJfc3FsJywKICBdLAogICdkYXJ0MmpzX3NlcnZlcic6IGNvbnN0IDxTdHJpbmc+WwogICAgJ2RhcnQ6X2ZvcmVpZ25faGVscGVyJywKICAgICdkYXJ0Ol9pbnRlcmNlcHRvcnMnLAogICAgJ2RhcnQ6X2ludGVybmFsJywKICAgICdkYXJ0Ol9qc19lbWJlZGRlZF9uYW1lcycsCiAgICAnZGFydDpfanNfaGVscGVyJywKICAgICdkYXJ0Ol9qc19uYW1lcycsCiAgICAnZGFydDpfbmF0aXZlX3R5cGVkX2RhdGEnLAogICAgJ2RhcnQ6YXN5bmMnLAogICAgJ2RhcnQ6Y29sbGVjdGlvbicsCiAgICAnZGFydDppbycsCiAgICAnZGFydDpqcycsCiAgICAnZGFydDpqc191dGlsJywKICAgICdkYXJ0Om1pcnJvcnMnLAogIF0KfTsKCmNsYXNzIERhcnQyanNDb25zdGFudHNCYWNrZW5kIGV4dGVuZHMgQ29uc3RhbnRzQmFja2VuZCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBzdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzOwoKICBjb25zdCBEYXJ0MmpzQ29uc3RhbnRzQmFja2VuZCh7dGhpcy5zdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzfSk7CgogIEBvdmVycmlkZQogIE51bWJlclNlbWFudGljcyBnZXQgbnVtYmVyU2VtYW50aWNzID0+IE51bWJlclNlbWFudGljcy5qczsKfQqAzgBOTjwBUB0sASgpLi0rAUELChEQCA0JGA8MDAMBIh4iQz9LBAEeLDcEATcCAUMlGwwVASgBDCsBDD4BDEcBDCseOwEMSEUjAQw4AQwyAQwxAQwxHhsgIi4tJAEMJxseEx4SFg4jKSAqKSANKQYkGEgqOx5LSTg9JE0bLTc2MTgMHQQBDEJPHRwcGyMdGxwhISErBAEMPEkCAUdMOR0UHBoWHxcWHxIXERgXDw8UFBAWExQFJBwaFh8XFh8SFw8PFBQEAwE5DCsBRgEMPQIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9kYXJ0MmpzX3RhcmdldC5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9rZWxlbWVudHMuZGFydJ1HLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBFbnRpdHkgbW9kZWwgZm9yIGVsZW1lbnRzIGRlcml2ZWQgZnJvbSBLZXJuZWwgSVIuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwoKY29uc3QgU3RyaW5nIGtFbGVtZW50UHJlZml4ID0gJ2s6JzsKCmNsYXNzIEtMaWJyYXJ5IGV4dGVuZHMgSW5kZXhlZExpYnJhcnkgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIFVyaSBjYW5vbmljYWxVcmk7CgogIEtMaWJyYXJ5KHRoaXMubmFtZSwgdGhpcy5jYW5vbmljYWxVcmkpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtrRWxlbWVudFByZWZpeH1saWJyYXJ5KCRuYW1lKSc7Cn0KCmNsYXNzIEtDbGFzcyBleHRlbmRzIEluZGV4ZWRDbGFzcyB7CiAgQG92ZXJyaWRlCiAgZmluYWwgS0xpYnJhcnkgbGlicmFyeTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fic3RyYWN0OwoKICBLQ2xhc3ModGhpcy5saWJyYXJ5LCB0aGlzLm5hbWUsIHt0aGlzLmlzQWJzdHJhY3R9KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDbG9zdXJlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtrRWxlbWVudFByZWZpeH1jbGFzcygkbmFtZSknOwp9CgpjbGFzcyBLVHlwZWRlZiBleHRlbmRzIEluZGV4ZWRUeXBlZGVmIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBLTGlicmFyeSBsaWJyYXJ5OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgS1R5cGVkZWYodGhpcy5saWJyYXJ5LCB0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtrRWxlbWVudFByZWZpeH10eXBlZGVmKCRuYW1lKSc7Cn0KCmFic3RyYWN0IGNsYXNzIEtNZW1iZXIgZXh0ZW5kcyBJbmRleGVkTWVtYmVyIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBLTGlicmFyeSBsaWJyYXJ5OwogIEBvdmVycmlkZQogIGZpbmFsIEtDbGFzcyBlbmNsb3NpbmdDbGFzczsKICBmaW5hbCBOYW1lIF9uYW1lOwogIGZpbmFsIGJvb2wgX2lzU3RhdGljOwoKICBLTWVtYmVyKHRoaXMubGlicmFyeSwgdGhpcy5lbmNsb3NpbmdDbGFzcywgdGhpcy5fbmFtZSwge2Jvb2wgaXNTdGF0aWM6IGZhbHNlfSkKICAgICAgOiBfaXNTdGF0aWMgPSBpc1N0YXRpYzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+IF9uYW1lLnRleHQ7CgogIEBvdmVycmlkZQogIE5hbWUgZ2V0IG1lbWJlck5hbWUgPT4gX25hbWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQXNzaWduYWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb25zdCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNBYnN0cmFjdCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Z1bmN0aW9uID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZpZWxkID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnN0cnVjdG9yID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+IGVuY2xvc2luZ0NsYXNzICE9IG51bGwgJiYgIV9pc1N0YXRpYzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCAmJiBfaXNTdGF0aWM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gZW5jbG9zaW5nQ2xhc3MgPT0gbnVsbDsKCiAgU3RyaW5nIGdldCBfa2luZDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7a0VsZW1lbnRQcmVmaXh9JF9raW5kJwogICAgICAnKCR7ZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCA/ICcke2VuY2xvc2luZ0NsYXNzLm5hbWV9LicgOiAnJ30kbmFtZSknOwp9CgphYnN0cmFjdCBjbGFzcyBLRnVuY3Rpb24gZXh0ZW5kcyBLTWVtYmVyCiAgICBpbXBsZW1lbnRzIEZ1bmN0aW9uRW50aXR5LCBJbmRleGVkRnVuY3Rpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0V4dGVybmFsOwogIEBvdmVycmlkZQogIGZpbmFsIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyOwoKICBLRnVuY3Rpb24oS0xpYnJhcnkgbGlicmFyeSwgS0NsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHRoaXMucGFyYW1ldGVyU3RydWN0dXJlLCB0aGlzLmFzeW5jTWFya2VyLAogICAgICB7Ym9vbCBpc1N0YXRpYzogZmFsc2UsIHRoaXMuaXNFeHRlcm5hbDogZmFsc2V9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBpc1N0YXRpYzogaXNTdGF0aWMpOwp9CgphYnN0cmFjdCBjbGFzcyBLQ29uc3RydWN0b3IgZXh0ZW5kcyBLRnVuY3Rpb24KICAgIGltcGxlbWVudHMgQ29uc3RydWN0b3JFbnRpdHksIEluZGV4ZWRDb25zdHJ1Y3RvciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0NvbnN0OwoKICBLQ29uc3RydWN0b3IoCiAgICAgIEtDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLCBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB7Ym9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQ29uc3R9KQogICAgICA6IHN1cGVyKGVuY2xvc2luZ0NsYXNzLmxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgIEFzeW5jTWFya2VyLlNZTkMsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnN0cnVjdG9yID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdjb25zdHJ1Y3Rvcic7Cn0KCmNsYXNzIEtHZW5lcmF0aXZlQ29uc3RydWN0b3IgZXh0ZW5kcyBLQ29uc3RydWN0b3IgewogIEtHZW5lcmF0aXZlQ29uc3RydWN0b3IoCiAgICAgIEtDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLCBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB7Ym9vbCBpc0V4dGVybmFsLCBib29sIGlzQ29uc3R9KQogICAgICA6IHN1cGVyKGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZhY3RvcnlDb25zdHJ1Y3RvciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IgPT4gdHJ1ZTsKfQoKY2xhc3MgS0ZhY3RvcnlDb25zdHJ1Y3RvciBleHRlbmRzIEtDb25zdHJ1Y3RvciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yOwoKICBLRmFjdG9yeUNvbnN0cnVjdG9yKAogICAgICBLQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAge2Jvb2wgaXNFeHRlcm5hbCwgYm9vbCBpc0NvbnN0LCB0aGlzLmlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3J9KQogICAgICA6IHN1cGVyKGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZhY3RvcnlDb25zdHJ1Y3RvciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dlbmVyYXRpdmVDb25zdHJ1Y3RvciA9PiBmYWxzZTsKfQoKY2xhc3MgS01ldGhvZCBleHRlbmRzIEtGdW5jdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fic3RyYWN0OwoKICBLTWV0aG9kKEtMaWJyYXJ5IGxpYnJhcnksIEtDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLCBBc3luY01hcmtlciBhc3luY01hcmtlciwKICAgICAge2Jvb2wgaXNTdGF0aWMsIGJvb2wgaXNFeHRlcm5hbCwgdGhpcy5pc0Fic3RyYWN0fSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLCBhc3luY01hcmtlciwKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdW5jdGlvbiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdtZXRob2QnOwp9CgpjbGFzcyBLR2V0dGVyIGV4dGVuZHMgS0Z1bmN0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQWJzdHJhY3Q7CgogIEtHZXR0ZXIoS0xpYnJhcnkgbGlicmFyeSwgS0NsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQWJzdHJhY3R9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUuZ2V0dGVyKCksCiAgICAgICAgICAgIGFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dldHRlciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdnZXR0ZXInOwp9CgpjbGFzcyBLU2V0dGVyIGV4dGVuZHMgS0Z1bmN0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQWJzdHJhY3Q7CgogIEtTZXR0ZXIoS0xpYnJhcnkgbGlicmFyeSwgS0NsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU3RhdGljLCBib29sIGlzRXh0ZXJuYWwsIHRoaXMuaXNBYnN0cmFjdH0pCiAgICAgIDogc3VwZXIobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIGNvbnN0IFBhcmFtZXRlclN0cnVjdHVyZS5zZXR0ZXIoKSwKICAgICAgICAgICAgQXN5bmNNYXJrZXIuU1lOQywKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNBc3NpZ25hYmxlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2V0dGVyID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2tpbmQgPT4gJ3NldHRlcic7Cn0KCmNsYXNzIEtGaWVsZCBleHRlbmRzIEtNZW1iZXIgaW1wbGVtZW50cyBGaWVsZEVudGl0eSwgSW5kZXhlZEZpZWxkIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQXNzaWduYWJsZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQ29uc3Q7CgogIEtGaWVsZChLTGlicmFyeSBsaWJyYXJ5LCBLQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwKICAgICAge2Jvb2wgaXNTdGF0aWMsIHRoaXMuaXNBc3NpZ25hYmxlLCB0aGlzLmlzQ29uc3R9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBpc1N0YXRpYzogaXNTdGF0aWMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZpZWxkID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2tpbmQgPT4gJ2ZpZWxkJzsKfQoKY2xhc3MgS1R5cGVWYXJpYWJsZSBleHRlbmRzIEluZGV4ZWRUeXBlVmFyaWFibGUgewogIEBvdmVycmlkZQogIGZpbmFsIEVudGl0eSB0eXBlRGVjbGFyYXRpb247CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGluZGV4OwoKICBLVHlwZVZhcmlhYmxlKHRoaXMudHlwZURlY2xhcmF0aW9uLCB0aGlzLm5hbWUsIHRoaXMuaW5kZXgpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnJHtrRWxlbWVudFByZWZpeH10eXBlX3ZhcmlhYmxlKCR7dHlwZURlY2xhcmF0aW9uLm5hbWV9LiRuYW1lKSc7Cn0KCmNsYXNzIEtMb2NhbEZ1bmN0aW9uIGltcGxlbWVudHMgTG9jYWwgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0OwogIGZpbmFsIEVudGl0eSBleGVjdXRhYmxlQ29udGV4dDsKICBmaW5hbCBpci5Mb2NhbEZ1bmN0aW9uIG5vZGU7CiAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZTsKCiAgS0xvY2FsRnVuY3Rpb24oCiAgICAgIHRoaXMubmFtZSwgdGhpcy5tZW1iZXJDb250ZXh0LCB0aGlzLmV4ZWN1dGFibGVDb250ZXh0LCB0aGlzLm5vZGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtrRWxlbWVudFByZWZpeH1sb2NhbF9mdW5jdGlvbicKICAgICAgJygke21lbWJlckNvbnRleHQubmFtZX0uJHtuYW1lID8/ICc8YW5vbnltb3VzPid9KSc7Cn0KCmNsYXNzIEtMb2NhbFR5cGVWYXJpYWJsZSBpbXBsZW1lbnRzIFR5cGVWYXJpYWJsZUVudGl0eSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgRW50aXR5IHR5cGVEZWNsYXJhdGlvbjsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaW5kZXg7CiAgRGFydFR5cGUgYm91bmQ7CiAgRGFydFR5cGUgZGVmYXVsdFR5cGU7CgogIEtMb2NhbFR5cGVWYXJpYWJsZSh0aGlzLnR5cGVEZWNsYXJhdGlvbiwgdGhpcy5uYW1lLCB0aGlzLmluZGV4KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJyR7a0VsZW1lbnRQcmVmaXh9bG9jYWxfdHlwZV92YXJpYWJsZSgke3R5cGVEZWNsYXJhdGlvbi5uYW1lfS4kbmFtZSknOwp9CoE4AE5OPAE2ASgkIyEhASQBKAwVDBoBKgEMOgIBJAwaAQwVDBkBNgEMHwEMOAIBKAwaAQwVASUBDDoCAS8MGgwfFBgBUR4BDCEBDCABDCIBDB0BDCABDB4BDB4BDCABDB0BDCMBDEUBDDwBDDEBFAEMMUsCASkxDC8MGQwhAUAxNkICAS43DBYBEE8nUB4lAQwiAQwmAQweAQwgAQwyAQwlAgE0Gk8nODcBDCoBDCwCATEMKwEXT0o4NwEMKQEMLQIBIgwZAT5GOU45AQwfAQwgAgEiDBkBPh85UBk5AQwdAQwgAgEiDBkBPjlQHjkBDCEBDB0BDCACAUQMGwwWAT04QgEMHAEMHwIBMgwgDBUMEwE+AQwXRwIBKAwVJCIfHQESSQEMOToCATkMIAwVDBMSGAFDAQwXTQIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9rZWxlbWVudHMuZGFydDNzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvZGFydDJqc19pbmZvL2xpYi9pbmZvLmRhcnTAAEBoLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBEYXRhIHByb2R1Y2VkIGJ5IGRhcnQyanMgd2hlbiBydW4gd2l0aCB0aGUgYC0tZHVtcC1pbmZvYCBmbGFnLgpsaWJyYXJ5IGRhcnQyanNfaW5mby5pbmZvOwoKLy8vIENvbW1vbiBpbnRlcmZhY2UgdG8gbWFueSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5IHRoZSBkYXJ0MmpzCi8vLyBjb21waWxlciB0aGF0IGFyZSBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCAoY29tcGlsYXRpb24gdW5pdCwKLy8vIGxpYnJhcnksIGNsYXNzLCBmdW5jdGlvbiwgb3IgZmllbGQpLgphYnN0cmFjdCBjbGFzcyBJbmZvIHsKICAvLy8gQW4gaWRlbnRpZmllciBmb3IgdGhlIGtpbmQgb2YgaW5mb3JtYXRpb24uCiAgSW5mb0tpbmQgZ2V0IGtpbmQ7CgogIC8vLyBOYW1lIG9mIHRoZSBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluZm8uCiAgU3RyaW5nIG5hbWU7CgogIC8vLyBJZCB1c2VkIGJ5IHRoZSBjb21waWxlciB3aGVuIGluc3RydW1lbnRpbmcgY29kZSBmb3IgY29kZSBjb3ZlcmFnZS4KICAvLyBUT0RPKHNpZ211bmQpOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGUgc2FtZSBpZCBmb3IKICAvLyBzZXJpYWxpemF0aW9uIGFuZCBmb3IgY292ZXJhZ2UuIENvdWxkIHdlIHVuaWZ5IHRoZW0/CiAgU3RyaW5nIGNvdmVyYWdlSWQ7CgogIC8vLyBCeXRlcyB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudC4KICBpbnQgc2l6ZTsKCiAgLy8vIEluZm8gb2YgdGhlIGVuY2xvc2luZyBlbGVtZW50LgogIEluZm8gcGFyZW50OwoKICBUIGFjY2VwdDxUPihJbmZvVmlzaXRvcjxUPiB2aXNpdG9yKTsKfQoKLy8vIENvbW1vbiBpbmZvcm1hdGlvbiB1c2VkIGZvciBtb3N0IGtpbmQgb2YgZWxlbWVudHMuCi8vIFRPRE8oc2lnbXVuZCk6IGFkZCBtb3JlOgovLyAgLSBpbnB1dFNpemU6IGJ5dGVzIHVzZWQgaW4gdGhlIERhcnQgc291cmNlIHByb2dyYW0KYWJzdHJhY3QgY2xhc3MgQmFzaWNJbmZvIGltcGxlbWVudHMgSW5mbyB7CiAgZmluYWwgSW5mb0tpbmQga2luZDsKCiAgU3RyaW5nIGNvdmVyYWdlSWQ7CiAgaW50IHNpemU7CiAgSW5mbyBwYXJlbnQ7CgogIFN0cmluZyBuYW1lOwoKICAvLy8gSWYgdXNpbmcgZGVmZXJyZWQgbGlicmFyaWVzLCB3aGVyZSB0aGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbmZvCiAgLy8vIGlzIGdlbmVyYXRlZC4KICBPdXRwdXRVbml0SW5mbyBvdXRwdXRVbml0OwoKICBCYXNpY0luZm8odGhpcy5raW5kLCB0aGlzLm5hbWUsIHRoaXMub3V0cHV0VW5pdCwgdGhpcy5zaXplLCB0aGlzLmNvdmVyYWdlSWQpOwoKICBCYXNpY0luZm8uaW50ZXJuYWwodGhpcy5raW5kKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRraW5kICRuYW1lIFskc2l6ZV0nOwp9CgovLy8gSW5mbyBhc3NvY2lhdGVkIHdpdGggZWxlbWVudHMgY29udGFpbmluZyBleGVjdXRhYmxlIGNvZGUgKGxpa2UgZmllbGRzIGFuZAovLy8gbWV0aG9kcykKYWJzdHJhY3QgY2xhc3MgQ29kZUluZm8gaW1wbGVtZW50cyBJbmZvIHsKICAvLy8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBvciBmaWVsZCBkZXBlbmQgb24gb3RoZXJzLgogIExpc3Q8RGVwZW5kZW5jeUluZm8+IHVzZXMgPSBbXTsKfQoKLy8vIFRoZSBlbnRpcmUgaW5mb3JtYXRpb24gcHJvZHVjZWQgd2hpbGUgY29tcGlsaW5nIGEgcHJvZ3JhbS4KY2xhc3MgQWxsSW5mbyB7CiAgLy8vIFN1bW1hcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2dyYW0uCiAgUHJvZ3JhbUluZm8gcHJvZ3JhbTsKCiAgLy8vIEluZm9ybWF0aW9uIGFib3V0IGVhY2ggbGlicmFyeSBwcm9jZXNzZWQgYnkgdGhlIGNvbXBpbGVyLgogIExpc3Q8TGlicmFyeUluZm8+IGxpYnJhcmllcyA9IDxMaWJyYXJ5SW5mbz5bXTsKCiAgLy8vIEluZm9ybWF0aW9uIGFib3V0IGVhY2ggZnVuY3Rpb24gKGluY2x1ZGVzIG1ldGhvZHMgYW5kIGdldHRlcnMgaW4gYW55CiAgLy8vIGxpYnJhcnkpCiAgTGlzdDxGdW5jdGlvbkluZm8+IGZ1bmN0aW9ucyA9IDxGdW5jdGlvbkluZm8+W107CgogIC8vLyBJbmZvcm1hdGlvbiBhYm91dCB0eXBlIGRlZnMgaW4gdGhlIHByb2dyYW0uCiAgTGlzdDxUeXBlZGVmSW5mbz4gdHlwZWRlZnMgPSA8VHlwZWRlZkluZm8+W107CgogIC8vLyBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIGNsYXNzIChpbiBhbnkgbGlicmFyeSkuCiAgTGlzdDxDbGFzc0luZm8+IGNsYXNzZXMgPSA8Q2xhc3NJbmZvPltdOwoKICAvLy8gSW5mb3JtYXRpb24gYWJvdXQgZmllbGRzIChpbiBhbnkgY2xhc3MpLgogIExpc3Q8RmllbGRJbmZvPiBmaWVsZHMgPSA8RmllbGRJbmZvPltdOwoKICAvLy8gSW5mb3JtYXRpb24gYWJvdXQgY29uc3RhbnRzIGFueXdoZXJlIGluIHRoZSBwcm9ncmFtLgogIC8vIFRPRE8oc2lnbXVuZCk6IGV4cGFuZCBkb2NzIGFib3V0IGNhbm9uaWNhbGl6YXRpb24uIFdlIGRvbid0IHB1dCB0aGVzZQogIC8vIGluc2lkZSBsaWJyYXJ5IGJlY2F1c2UgYSBzaW5nbGUgY29uc3RhbnQgY2FuIGJlIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBsaWIsCiAgLy8gYW5kIHdlJ2xsIGluY2x1ZGUgaXQgb25seSBvbmNlIGluIHRoZSBvdXRwdXQuCiAgTGlzdDxDb25zdGFudEluZm8+IGNvbnN0YW50cyA9IDxDb25zdGFudEluZm8+W107CgogIC8vLyBJbmZvcm1hdGlvbiBhYm91dCBjbG9zdXJlcyBhbnl3aGVyZSBpbiB0aGUgcHJvZ3JhbS4KICBMaXN0PENsb3N1cmVJbmZvPiBjbG9zdXJlcyA9IDxDbG9zdXJlSW5mbz5bXTsKCiAgLy8vIEluZm9ybWF0aW9uIGFib3V0IG91dHB1dCB1bml0cyAoc2hvdWxkIGJlIGp1c3Qgb25lIGVudHJ5IGlmIG5vdCB1c2luZwogIC8vLyBkZWZlcnJlZCBsb2FkaW5nKS4KICBMaXN0PE91dHB1dFVuaXRJbmZvPiBvdXRwdXRVbml0cyA9IDxPdXRwdXRVbml0SW5mbz5bXTsKCiAgLy8vIERldGFpbHMgYWJvdXQgYWxsIGRlZmVycmVkIGltcG9ydHMgYW5kIHdoYXQgZmlsZXMgd291bGQgYmUgbG9hZGVkIHdoZW4gdGhlCiAgLy8vIGltcG9ydCBpcyByZXNvbHZlZC4KICAvLyBUT0RPKHNpZ211bmQpOiB1c2UgYSBkaWZmZXJlbnQgZm9ybWF0IGZvciBkdW1wLWluZm8uIFRoaXMgY3VycmVudGx5IGVtaXRzCiAgLy8gdGhlIHNhbWUgbWFwIHRoYXQgaXMgY3JlYXRlZCBmb3IgdGhlIGAtLWRlZmVycmVkLW1hcGAgZmxhZy4KICBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBkeW5hbWljPj4gZGVmZXJyZWRGaWxlczsKCiAgLy8vIEEgbmV3IHJlcHJlc2VudGF0aW9uIG9mIGRlcGVuZGVuY2llcyBmcm9tIG9uZSBpbmZvIHRvIGFub3RoZXIuIEFuIGVudHJ5IGluCiAgLy8vIHRoaXMgbWFwIGluZGljYXRlcyB0aGF0IGFuIFtJbmZvXSBkZXBlbmRzIG9uIGFub3RoZXIgKGUuZy4gYSBmdW5jdGlvbgogIC8vLyBpbnZva2VzIGFub3RoZXIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkYXRhIGluIHRoaXMgZmllbGQgbWlnaHQgbm90IGJlCiAgLy8vIGFjY3VyYXRlIHlldCAodGhpcyBpcyB3b3JrIGluIHByb2dyZXNzKS4KICBNYXA8SW5mbywgTGlzdDxJbmZvPj4gZGVwZW5kZW5jaWVzID0ge307CgogIC8vLyBNYWpvciB2ZXJzaW9uIGluZGljYXRpbmcgYnJlYWtpbmcgY2hhbmdlcyBpbiB0aGUgZm9ybWF0LiBBIG5ldyB2ZXJzaW9uCiAgLy8vIG1lYW5zIHRoYXQgYW4gb2xkIGRlc2VyaWFsaXphdGlvbiBhbGdvcml0aG0gd2lsbCBub3Qgd29yayB3aXRoIHRoZSBuZXcKICAvLy8gZm9ybWF0LgogIGZpbmFsIGludCB2ZXJzaW9uID0gNjsKCiAgLy8vIE1pbm9yIHZlcnNpb24gaW5kaWNhdGluZyBub24tYnJlYWtpbmcgY2hhbmdlcyBpbiB0aGUgZm9ybWF0LiBBIGNoYW5nZSBpbgogIC8vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG1lYW5zIHRoYXQgdGhlIGpzb24gcGFyc2luZyBpbiB0aGlzIGxpYnJhcnkgZnJvbSBhCiAgLy8vIHByZXZpb3VzIHdpbGwgY29udGludWUgdG8gd29yayBhZnRlciB0aGUgY2hhbmdlLiBUaGlzIGlzIHR5cGljYWxseQogIC8vLyBpbmNyZWFzZWQgd2hlbiBhZGRpbmcgbmV3IGVudHJpZXMgdG8gdGhlIGZpbGUgZm9ybWF0LgogIC8vIE5vdGU6IHRoZSBkdW1wLWluZm8udmlld2VyIGFwcCB3YXMgd3JpdHRlbiB1c2luZyBhIGpzb24gcGFyc2VyIHZlcnNpb24gMy4yLgogIGZpbmFsIGludCBtaW5vclZlcnNpb24gPSAwOwoKICBBbGxJbmZvKCk7CgogIFQgYWNjZXB0PFQ+KEluZm9WaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRBbGwodGhpcyk7Cn0KCmNsYXNzIFByb2dyYW1JbmZvIHsKICBGdW5jdGlvbkluZm8gZW50cnlwb2ludDsKICBpbnQgc2l6ZTsKICBTdHJpbmcgZGFydDJqc1ZlcnNpb247CiAgRGF0ZVRpbWUgY29tcGlsYXRpb25Nb21lbnQ7CiAgRHVyYXRpb24gY29tcGlsYXRpb25EdXJhdGlvbjsKICBEdXJhdGlvbiB0b0pzb25EdXJhdGlvbjsKICBEdXJhdGlvbiBkdW1wSW5mb0R1cmF0aW9uOwoKICAvLy8gYHRydWVgIGlmIGBub1N1Y2hNZXRob2RgIGlzIHVzZWQuCiAgYm9vbCBub1N1Y2hNZXRob2RFbmFibGVkOwoKICAvLy8gYHRydWVgIGlmIGBPYmplY3QucnVudGltZVR5cGVgIGlzIHVzZWQuCiAgYm9vbCBpc1J1bnRpbWVUeXBlVXNlZDsKCiAgLy8vIGB0cnVlYCBpZiB0aGUgYGRhcnQ6aXNvbGF0ZWAgbGlicmFyeSBpcyBpbiB1c2UuCiAgYm9vbCBpc0lzb2xhdGVJblVzZTsKCiAgLy8vIGB0cnVlYCBpZiBgRnVuY3Rpb24uYXBwbHlgIGlzIHVzZWQuCiAgYm9vbCBpc0Z1bmN0aW9uQXBwbHlVc2VkOwoKICAvLy8gYHRydWVgIGlmIGBkYXJ0Om1pcnJvcnNgIGZlYXR1cmVzIGFyZSB1c2VkLgogIGJvb2wgaXNNaXJyb3JzVXNlZDsKCiAgYm9vbCBtaW5pZmllZDsKCiAgUHJvZ3JhbUluZm8oCiAgICAgIHt0aGlzLmVudHJ5cG9pbnQsCiAgICAgIHRoaXMuc2l6ZSwKICAgICAgdGhpcy5kYXJ0MmpzVmVyc2lvbiwKICAgICAgdGhpcy5jb21waWxhdGlvbk1vbWVudCwKICAgICAgdGhpcy5jb21waWxhdGlvbkR1cmF0aW9uLAogICAgICB0aGlzLnRvSnNvbkR1cmF0aW9uLAogICAgICB0aGlzLmR1bXBJbmZvRHVyYXRpb24sCiAgICAgIHRoaXMubm9TdWNoTWV0aG9kRW5hYmxlZCwKICAgICAgdGhpcy5pc1J1bnRpbWVUeXBlVXNlZCwKICAgICAgdGhpcy5pc0lzb2xhdGVJblVzZSwKICAgICAgdGhpcy5pc0Z1bmN0aW9uQXBwbHlVc2VkLAogICAgICB0aGlzLmlzTWlycm9yc1VzZWQsCiAgICAgIHRoaXMubWluaWZpZWR9KTsKCiAgVCBhY2NlcHQ8VD4oSW5mb1Zpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFByb2dyYW0odGhpcyk7Cn0KCi8vLyBJbmZvIGFzc29jaWF0ZWQgd2l0aCBhIGxpYnJhcnkgZWxlbWVudC4KY2xhc3MgTGlicmFyeUluZm8gZXh0ZW5kcyBCYXNpY0luZm8gewogIC8vLyBDYW5vbmljYWwgdXJpIHRoYXQgaWRlbnRpZmllcyB0aGUgbGlicmFyeS4KICBVcmkgdXJpOwoKICAvLy8gVG9wIGxldmVsIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGUgbGlicmFyeS4KICBMaXN0PEZ1bmN0aW9uSW5mbz4gdG9wTGV2ZWxGdW5jdGlvbnMgPSA8RnVuY3Rpb25JbmZvPltdOwoKICAvLy8gVG9wIGxldmVsIGZpZWxkcyBkZWZpbmVkIHdpdGhpbiB0aGUgbGlicmFyeS4KICBMaXN0PEZpZWxkSW5mbz4gdG9wTGV2ZWxWYXJpYWJsZXMgPSA8RmllbGRJbmZvPltdOwoKICAvLy8gQ2xhc3NlcyBkZWZpbmVkIHdpdGhpbiB0aGUgbGlicmFyeS4KICBMaXN0PENsYXNzSW5mbz4gY2xhc3NlcyA9IDxDbGFzc0luZm8+W107CgogIC8vLyBUeXBlZGVmcyBkZWZpbmVkIHdpdGhpbiB0aGUgbGlicmFyeS4KICBMaXN0PFR5cGVkZWZJbmZvPiB0eXBlZGVmcyA9IDxUeXBlZGVmSW5mbz5bXTsKCiAgLy8gVE9ETyhzaWdtdW5kKTogYWRkIGhlcmUgYSBsaXN0IG9mIHBhcnRzLiBUaGF0IGNhbiBoZWxwIHVzIGltcHJvdmUgaG93IHdlCiAgLy8gZW5jb2RlIHNvdXJjZS1zcGFuIGluZm9ybWF0aW9uIGluIG1ldHJpY3MgKHJhdGhlciB0aGFuIGluY2x1ZGUgdGhlIHVyaSBvbgogIC8vIGVhY2ggZnVuY3Rpb24sIGluY2x1ZGUgYW4gaW5kZXggaW50byB0aGlzIGxpc3QpLgoKICAvLy8gV2hldGhlciB0aGVyZSBpcyBhbnkgaW5mb3JtYXRpb24gcmVjb3JkZWQgZm9yIHRoaXMgbGlicmFyeS4KICBib29sIGdldCBpc0VtcHR5ID0+CiAgICAgIHRvcExldmVsRnVuY3Rpb25zLmlzRW1wdHkgJiYgdG9wTGV2ZWxWYXJpYWJsZXMuaXNFbXB0eSAmJiBjbGFzc2VzLmlzRW1wdHk7CgogIExpYnJhcnlJbmZvKFN0cmluZyBuYW1lLCB0aGlzLnVyaSwgT3V0cHV0VW5pdEluZm8gb3V0cHV0VW5pdCwgaW50IHNpemUpCiAgICAgIDogc3VwZXIoSW5mb0tpbmQubGlicmFyeSwgbmFtZSwgb3V0cHV0VW5pdCwgc2l6ZSwgbnVsbCk7CgogIExpYnJhcnlJbmZvLmludGVybmFsKCkgOiBzdXBlci5pbnRlcm5hbChJbmZvS2luZC5saWJyYXJ5KTsKCiAgVCBhY2NlcHQ8VD4oSW5mb1Zpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExpYnJhcnkodGhpcyk7Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBhbiBvdXRwdXQgdW5pdC4gTm9ybWFsbHkgdGhlcmUgaXMganVzdCBvbmUgZm9yIHRoZSBlbnRpcmUKLy8vIHByb2dyYW0gdW5sZXNzIHRoZSBhcHBsaWNhdGlvbiB1c2VzIGRlZmVycmVkIGltcG9ydHMsIGluIHdoaWNoIGNhc2UgdGhlcmUKLy8vIHdvdWxkIGJlIGFuIGFkZGl0aW9uYWwgb3V0cHV0IHVuaXQgcGVyIGRlZmVycmVkIGNodW5rLgpjbGFzcyBPdXRwdXRVbml0SW5mbyBleHRlbmRzIEJhc2ljSW5mbyB7CiAgU3RyaW5nIGZpbGVuYW1lOwoKICAvLy8gVGhlIGRlZmVycmVkIGltcG9ydHMgdGhhdCB3aWxsIGxvYWQgdGhpcyBvdXRwdXQgdW5pdC4KICBMaXN0PFN0cmluZz4gaW1wb3J0cyA9IDxTdHJpbmc+W107CgogIE91dHB1dFVuaXRJbmZvKHRoaXMuZmlsZW5hbWUsIFN0cmluZyBuYW1lLCBpbnQgc2l6ZSkKICAgICAgOiBzdXBlcihJbmZvS2luZC5vdXRwdXRVbml0LCBuYW1lLCBudWxsLCBzaXplLCBudWxsKTsKCiAgT3V0cHV0VW5pdEluZm8uaW50ZXJuYWwoKSA6IHN1cGVyLmludGVybmFsKEluZm9LaW5kLm91dHB1dFVuaXQpOwoKICBUIGFjY2VwdDxUPihJbmZvVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0T3V0cHV0KHRoaXMpOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYSBjbGFzcyBlbGVtZW50LgpjbGFzcyBDbGFzc0luZm8gZXh0ZW5kcyBCYXNpY0luZm8gewogIC8vLyBXaGV0aGVyIHRoZSBjbGFzcyBpcyBhYnN0cmFjdC4KICBib29sIGlzQWJzdHJhY3Q7CgogIC8vIFRPRE8oc2lnbXVuZCk6IHNwbGl0IHN0YXRpYyB2cyBpbnN0YW5jZSB2cyBjbG9zdXJlcwogIC8vLyBGdW5jdGlvbnMgKHN0YXRpYyBvciBpbnN0YW5jZSkgZGVmaW5lZCBpbiB0aGUgY2xhc3MuCiAgTGlzdDxGdW5jdGlvbkluZm8+IGZ1bmN0aW9ucyA9IDxGdW5jdGlvbkluZm8+W107CgogIC8vLyBGaWVsZHMgZGVmaW5lZCBpbiB0aGUgY2xhc3MuCiAgLy8gVE9ETyhzaWdtdW5kKTogY3VycmVudGx5IGFwcGVhcnMgdG8gb25seSBiZSBwb3B1bGF0ZWQgd2l0aCBpbnN0YW5jZSBmaWVsZHMsCiAgLy8gYnV0IHRoaXMgc2hvdWxkIGJlIGZpeGVkLgogIExpc3Q8RmllbGRJbmZvPiBmaWVsZHMgPSA8RmllbGRJbmZvPltdOwoKICBDbGFzc0luZm8oCiAgICAgIHtTdHJpbmcgbmFtZSwgdGhpcy5pc0Fic3RyYWN0LCBPdXRwdXRVbml0SW5mbyBvdXRwdXRVbml0LCBpbnQgc2l6ZTogMH0pCiAgICAgIDogc3VwZXIoSW5mb0tpbmQuY2xhenosIG5hbWUsIG91dHB1dFVuaXQsIHNpemUsIG51bGwpOwoKICBDbGFzc0luZm8uaW50ZXJuYWwoKSA6IHN1cGVyLmludGVybmFsKEluZm9LaW5kLmNsYXp6KTsKCiAgVCBhY2NlcHQ8VD4oSW5mb1Zpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdENsYXNzKHRoaXMpOwp9CgovLy8gQSBjb2RlIHNwYW4gb2YgZ2VuZXJhdGVkIGNvZGUuIEEgW0NvZGVTcGFuXSBvYmplY3QgaXMgYXNzb2NpYXRlZCB3aXRoIGEKLy8vIHNpbmdsZSBbQmFzaWNJbmZvXS4gVGhlIG9mZnNldHMgaW4gdGhlIHNwYW4gY29ycmVzcG9uZHMgdG8gb2Zmc2V0cyBvbiB0aGUKLy8vIGZpbGUgb2YgW0Jhc2ljSW5mby5vdXRwdXRVbml0XS4KY2xhc3MgQ29kZVNwYW4gewogIC8vLyBTdGFydCBvZmZzZXQgaW4gdGhlIGdlbmVyYXRlZCBmaWxlLgogIGludCBzdGFydDsKCiAgLy8vIGVuZCBvZmZzZXQgaW4gdGhlIGdlbmVyYXRlZCBmaWxlLgogIGludCBlbmQ7CgogIC8vLyBUaGUgYWN0dWFsIGNvZGUgKG9wdGlvbmFsLCBibGFuayB3aGVuIHVzaW5nIGEgY29tcGFjdCByZXByZXNlbnRhdGlvbiBvZgogIC8vLyB0aGUgZW5jb2RpbmcpLgogIFN0cmluZyB0ZXh0OwoKICBDb2RlU3Bhbih7dGhpcy5zdGFydCwgdGhpcy5lbmQsIHRoaXMudGV4dH0pOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYSBjb25zdGFudCB2YWx1ZS4KLy8gVE9ETyhzaWdtdW5kKTogYWRkIGRlcGVuZGVuY3kgZGF0YSBmb3IgQ29uc3RhbnRJbmZvCmNsYXNzIENvbnN0YW50SW5mbyBleHRlbmRzIEJhc2ljSW5mbyB7CiAgLy8vIFRoZSBhY3R1YWwgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb25zdGFudC4KICBMaXN0PENvZGVTcGFuPiBjb2RlOwoKICAvLyBUT0RPKHNpZ211bmQpOiBBZGQgY292ZXJhZ2Ugc3VwcG9ydCB0byBjb25zdGFudHM/CiAgQ29uc3RhbnRJbmZvKHtpbnQgc2l6ZTogMCwgdGhpcy5jb2RlLCBPdXRwdXRVbml0SW5mbyBvdXRwdXRVbml0fSkKICAgICAgOiBzdXBlcihJbmZvS2luZC5jb25zdGFudCwgbnVsbCwgb3V0cHV0VW5pdCwgc2l6ZSwgbnVsbCk7CgogIENvbnN0YW50SW5mby5pbnRlcm5hbCgpIDogc3VwZXIuaW50ZXJuYWwoSW5mb0tpbmQuY29uc3RhbnQpOwoKICBUIGFjY2VwdDxUPihJbmZvVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q29uc3RhbnQodGhpcyk7Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBhIGZpZWxkIGVsZW1lbnQuCmNsYXNzIEZpZWxkSW5mbyBleHRlbmRzIEJhc2ljSW5mbyB3aXRoIENvZGVJbmZvIHsKICAvLy8gVGhlIHR5cGUgb2YgdGhlIGZpZWxkLgogIFN0cmluZyB0eXBlOwoKICAvLy8gVGhlIHR5cGUgaW5mZXJyZWQgYnkgZGFydDJqcydzIHdob2xlIHByb2dyYW0gYW5hbHlzaXMKICBTdHJpbmcgaW5mZXJyZWRUeXBlOwoKICAvLy8gTmVzdGVkIGNsb3N1cmVzIHNlZW4gaW4gdGhlIGZpZWxkIGluaXRpYWxpemVyLgogIExpc3Q8Q2xvc3VyZUluZm8+IGNsb3N1cmVzOwoKICAvLy8gVGhlIGFjdHVhbCBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGZpZWxkLgogIExpc3Q8Q29kZVNwYW4+IGNvZGU7CgogIC8vLyBXaGV0aGVyIHRoaXMgY29ycmVzcG9uZHMgdG8gYSBjb25zdCBmaWVsZCBkZWNsYXJhdGlvbi4KICBib29sIGlzQ29uc3Q7CgogIC8vLyBXaGVuIFtpc0NvbnN0XSBpcyB0cnVlLCB0aGUgY29uc3RhbnQgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi4KICBDb25zdGFudEluZm8gaW5pdGlhbGl6ZXI7CgogIEZpZWxkSW5mbygKICAgICAge1N0cmluZyBuYW1lLAogICAgICBTdHJpbmcgY292ZXJhZ2VJZCwKICAgICAgaW50IHNpemU6IDAsCiAgICAgIHRoaXMudHlwZSwKICAgICAgdGhpcy5pbmZlcnJlZFR5cGUsCiAgICAgIHRoaXMuY2xvc3VyZXMsCiAgICAgIHRoaXMuY29kZSwKICAgICAgT3V0cHV0VW5pdEluZm8gb3V0cHV0VW5pdCwKICAgICAgdGhpcy5pc0NvbnN0fSkKICAgICAgOiBzdXBlcihJbmZvS2luZC5maWVsZCwgbmFtZSwgb3V0cHV0VW5pdCwgc2l6ZSwgY292ZXJhZ2VJZCk7CgogIEZpZWxkSW5mby5pbnRlcm5hbCgpIDogc3VwZXIuaW50ZXJuYWwoSW5mb0tpbmQuZmllbGQpOwoKICBUIGFjY2VwdDxUPihJbmZvVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RmllbGQodGhpcyk7Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBhIHR5cGVkZWYgZGVjbGFyYXRpb24uCmNsYXNzIFR5cGVkZWZJbmZvIGV4dGVuZHMgQmFzaWNJbmZvIHsKICAvLy8gVGhlIGRlY2xhcmVkIHR5cGUuCiAgU3RyaW5nIHR5cGU7CgogIFR5cGVkZWZJbmZvKFN0cmluZyBuYW1lLCB0aGlzLnR5cGUsIE91dHB1dFVuaXRJbmZvIG91dHB1dFVuaXQpCiAgICAgIDogc3VwZXIoSW5mb0tpbmQudHlwZWRlZiwgbmFtZSwgb3V0cHV0VW5pdCwgMCwgbnVsbCk7CgogIFR5cGVkZWZJbmZvLmludGVybmFsKCkgOiBzdXBlci5pbnRlcm5hbChJbmZvS2luZC50eXBlZGVmKTsKCiAgVCBhY2NlcHQ8VD4oSW5mb1Zpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFR5cGVkZWYodGhpcyk7Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBhIGZ1bmN0aW9uIG9yIG1ldGhvZC4KY2xhc3MgRnVuY3Rpb25JbmZvIGV4dGVuZHMgQmFzaWNJbmZvIHdpdGggQ29kZUluZm8gewogIHN0YXRpYyBjb25zdCBpbnQgVE9QX0xFVkVMX0ZVTkNUSU9OX0tJTkQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgQ0xPU1VSRV9GVU5DVElPTl9LSU5EID0gMTsKICBzdGF0aWMgY29uc3QgaW50IE1FVEhPRF9GVU5DVElPTl9LSU5EID0gMjsKICBzdGF0aWMgY29uc3QgaW50IENPTlNUUlVDVE9SX0ZVTkNUSU9OX0tJTkQgPSAzOwoKICAvLy8gS2luZCBvZiBmdW5jdGlvbiAodG9wLWxldmVsIGZ1bmN0aW9uLCBjbG9zdXJlLCBtZXRob2QsIG9yIGNvbnN0cnVjdG9yKS4KICBpbnQgZnVuY3Rpb25LaW5kOwoKICAvLy8gTW9kaWZpZXJzIGFwcGxpZWQgdG8gdGhpcyBmdW5jdGlvbi4KICBGdW5jdGlvbk1vZGlmaWVycyBtb2RpZmllcnM7CgogIC8vLyBOZXN0ZWQgY2xvc3VyZXMgdGhhdCBhcHBlYXIgd2l0aGluIHRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24uCiAgTGlzdDxDbG9zdXJlSW5mbz4gY2xvc3VyZXM7CgogIC8vLyBUaGUgdHlwZSBvZiB0aGlzIGZ1bmN0aW9uLgogIFN0cmluZyB0eXBlOwoKICAvLy8gVGhlIGRlY2xhcmVkIHJldHVybiB0eXBlLgogIFN0cmluZyByZXR1cm5UeXBlOwoKICAvLy8gVGhlIGluZmVycmVkIHJldHVybiB0eXBlLgogIFN0cmluZyBpbmZlcnJlZFJldHVyblR5cGU7CgogIC8vLyBOYW1lIGFuZCB0eXBlIGluZm9ybWF0aW9uIGZvciBlYWNoIHBhcmFtZXRlci4KICBMaXN0PFBhcmFtZXRlckluZm8+IHBhcmFtZXRlcnM7CgogIC8vLyBTaWRlLWVmZmVjdHMuCiAgLy8gVE9ETyhzaWdtdW5kKTogc2VyaWFsaXplIG1vcmUgcHJlY2lzZWx5LCBub3QganVzdCBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4KICBTdHJpbmcgc2lkZUVmZmVjdHM7CgogIC8vLyBIb3cgbWFueSBmdW5jdGlvbiBjYWxscyB3ZXJlIGlubGluZWQgaW50byB0aGlzIGZ1bmN0aW9uLgogIGludCBpbmxpbmVkQ291bnQ7CgogIC8vLyBUaGUgYWN0dWFsIGdlbmVyYXRlZCBjb2RlLgogIExpc3Q8Q29kZVNwYW4+IGNvZGU7CgogIEZ1bmN0aW9uSW5mbygKICAgICAge1N0cmluZyBuYW1lLAogICAgICBTdHJpbmcgY292ZXJhZ2VJZCwKICAgICAgT3V0cHV0VW5pdEluZm8gb3V0cHV0VW5pdCwKICAgICAgaW50IHNpemU6IDAsCiAgICAgIHRoaXMuZnVuY3Rpb25LaW5kLAogICAgICB0aGlzLm1vZGlmaWVycywKICAgICAgdGhpcy5jbG9zdXJlcywKICAgICAgdGhpcy50eXBlLAogICAgICB0aGlzLnJldHVyblR5cGUsCiAgICAgIHRoaXMuaW5mZXJyZWRSZXR1cm5UeXBlLAogICAgICB0aGlzLnBhcmFtZXRlcnMsCiAgICAgIHRoaXMuc2lkZUVmZmVjdHMsCiAgICAgIHRoaXMuaW5saW5lZENvdW50LAogICAgICB0aGlzLmNvZGV9KQogICAgICA6IHN1cGVyKEluZm9LaW5kLmZ1bmN0aW9uLCBuYW1lLCBvdXRwdXRVbml0LCBzaXplLCBjb3ZlcmFnZUlkKTsKCiAgRnVuY3Rpb25JbmZvLmludGVybmFsKCkgOiBzdXBlci5pbnRlcm5hbChJbmZvS2luZC5mdW5jdGlvbik7CgogIFQgYWNjZXB0PFQ+KEluZm9WaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGdW5jdGlvbih0aGlzKTsKfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGEgY2xvc3VyZSwgYWxzbyBrbm93biBhcyBhIGxvY2FsIGZ1bmN0aW9uLgpjbGFzcyBDbG9zdXJlSW5mbyBleHRlbmRzIEJhc2ljSW5mbyB7CiAgLy8vIFRoZSBmdW5jdGlvbiB0aGF0IGlzIHdyYXBwZWQgYnkgdGhpcyBjbG9zdXJlLgogIEZ1bmN0aW9uSW5mbyBmdW5jdGlvbjsKCiAgQ2xvc3VyZUluZm8oCiAgICAgIHtTdHJpbmcgbmFtZSwgT3V0cHV0VW5pdEluZm8gb3V0cHV0VW5pdCwgaW50IHNpemU6IDAsIHRoaXMuZnVuY3Rpb259KQogICAgICA6IHN1cGVyKEluZm9LaW5kLmNsb3N1cmUsIG5hbWUsIG91dHB1dFVuaXQsIHNpemUsIG51bGwpOwoKICBDbG9zdXJlSW5mby5pbnRlcm5hbCgpIDogc3VwZXIuaW50ZXJuYWwoSW5mb0tpbmQuY2xvc3VyZSk7CgogIFQgYWNjZXB0PFQ+KEluZm9WaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRDbG9zdXJlKHRoaXMpOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgaG93IGEgZGVwZW5kZW5jeSBpcyB1c2VkLgpjbGFzcyBEZXBlbmRlbmN5SW5mbyB7CiAgLy8vIFRoZSBkZXBlbmRlbmN5LCBlaXRoZXIgYSBGdW5jdGlvbkluZm8gb3IgRmllbGRJbmZvLgogIGZpbmFsIEluZm8gdGFyZ2V0OwoKICAvLy8gRWl0aGVyIGEgc2VsZWN0b3IgbWFzayBpbmRpY2F0aW5nIGhvdyB0aGlzIGlzIHVzZWQsIG9yICdpbmxpbmVkJy4KICAvLyBUT0RPKHNpZ211bmQpOiBzcGxpdCBtYXNrIGludG8gYW4gZW51bSBvciBzb21ldGhpbmcgbW9yZSBwcmVjaXNlIHRvIHJlYWxseQogIC8vIGRlc2NyaWJlIHRoZSBkZXBlbmRlbmNpZXMgaW4gZGV0YWlsLgogIGZpbmFsIFN0cmluZyBtYXNrOwoKICBEZXBlbmRlbmN5SW5mbyh0aGlzLnRhcmdldCwgdGhpcy5tYXNrKTsKfQoKLy8vIE5hbWUgYW5kIHR5cGUgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvbiBwYXJhbWV0ZXIuCmNsYXNzIFBhcmFtZXRlckluZm8gewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFN0cmluZyB0eXBlOwogIGZpbmFsIFN0cmluZyBkZWNsYXJlZFR5cGU7CgogIFBhcmFtZXRlckluZm8odGhpcy5uYW1lLCB0aGlzLnR5cGUsIHRoaXMuZGVjbGFyZWRUeXBlKTsKfQoKLy8vIE1vZGlmaWVycyB0aGF0IG1heSBhcHBseSB0byBtZXRob2RzLgpjbGFzcyBGdW5jdGlvbk1vZGlmaWVycyB7CiAgZmluYWwgYm9vbCBpc1N0YXRpYzsKICBmaW5hbCBib29sIGlzQ29uc3Q7CiAgZmluYWwgYm9vbCBpc0ZhY3Rvcnk7CiAgZmluYWwgYm9vbCBpc0V4dGVybmFsOwoKICBGdW5jdGlvbk1vZGlmaWVycygKICAgICAge3RoaXMuaXNTdGF0aWM6IGZhbHNlLAogICAgICB0aGlzLmlzQ29uc3Q6IGZhbHNlLAogICAgICB0aGlzLmlzRmFjdG9yeTogZmFsc2UsCiAgICAgIHRoaXMuaXNFeHRlcm5hbDogZmFsc2V9KTsKfQoKLy8vIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgYGtpbmRgIGZpZWxkIGluIHRoZSBzZXJpYWxpemVkIGluZm9zLgplbnVtIEluZm9LaW5kIHsKICBsaWJyYXJ5LAogIGNsYXp6LAogIGZ1bmN0aW9uLAogIGZpZWxkLAogIGNvbnN0YW50LAogIG91dHB1dFVuaXQsCiAgdHlwZWRlZiwKICBjbG9zdXJlLAp9CgpTdHJpbmcga2luZFRvU3RyaW5nKEluZm9LaW5kIGtpbmQpIHsKICBzd2l0Y2ggKGtpbmQpIHsKICAgIGNhc2UgSW5mb0tpbmQubGlicmFyeToKICAgICAgcmV0dXJuICdsaWJyYXJ5JzsKICAgIGNhc2UgSW5mb0tpbmQuY2xheno6CiAgICAgIHJldHVybiAnY2xhc3MnOwogICAgY2FzZSBJbmZvS2luZC5mdW5jdGlvbjoKICAgICAgcmV0dXJuICdmdW5jdGlvbic7CiAgICBjYXNlIEluZm9LaW5kLmZpZWxkOgogICAgICByZXR1cm4gJ2ZpZWxkJzsKICAgIGNhc2UgSW5mb0tpbmQuY29uc3RhbnQ6CiAgICAgIHJldHVybiAnY29uc3RhbnQnOwogICAgY2FzZSBJbmZvS2luZC5vdXRwdXRVbml0OgogICAgICByZXR1cm4gJ291dHB1dFVuaXQnOwogICAgY2FzZSBJbmZvS2luZC50eXBlZGVmOgogICAgICByZXR1cm4gJ3R5cGVkZWYnOwogICAgY2FzZSBJbmZvS2luZC5jbG9zdXJlOgogICAgICByZXR1cm4gJ2Nsb3N1cmUnOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIG51bGw7CiAgfQp9CgpJbmZvS2luZCBraW5kRnJvbVN0cmluZyhTdHJpbmcga2luZCkgewogIHN3aXRjaCAoa2luZCkgewogICAgY2FzZSAnbGlicmFyeSc6CiAgICAgIHJldHVybiBJbmZvS2luZC5saWJyYXJ5OwogICAgY2FzZSAnY2xhc3MnOgogICAgICByZXR1cm4gSW5mb0tpbmQuY2xheno7CiAgICBjYXNlICdmdW5jdGlvbic6CiAgICAgIHJldHVybiBJbmZvS2luZC5mdW5jdGlvbjsKICAgIGNhc2UgJ2ZpZWxkJzoKICAgICAgcmV0dXJuIEluZm9LaW5kLmZpZWxkOwogICAgY2FzZSAnY29uc3RhbnQnOgogICAgICByZXR1cm4gSW5mb0tpbmQuY29uc3RhbnQ7CiAgICBjYXNlICdvdXRwdXRVbml0JzoKICAgICAgcmV0dXJuIEluZm9LaW5kLm91dHB1dFVuaXQ7CiAgICBjYXNlICd0eXBlZGVmJzoKICAgICAgcmV0dXJuIEluZm9LaW5kLnR5cGVkZWY7CiAgICBjYXNlICdjbG9zdXJlJzoKICAgICAgcmV0dXJuIEluZm9LaW5kLmNsb3N1cmU7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBBIHNpbXBsZSB2aXNpdG9yIGZvciBpbmZvcm1hdGlvbiBwcm9kdWNlZCBieSB0aGUgZGFydDJqcyBjb21waWxlci4KYWJzdHJhY3QgY2xhc3MgSW5mb1Zpc2l0b3I8VD4gewogIFQgdmlzaXRBbGwoQWxsSW5mbyBpbmZvKTsKICBUIHZpc2l0UHJvZ3JhbShQcm9ncmFtSW5mbyBpbmZvKTsKICBUIHZpc2l0TGlicmFyeShMaWJyYXJ5SW5mbyBpbmZvKTsKICBUIHZpc2l0Q2xhc3MoQ2xhc3NJbmZvIGluZm8pOwogIFQgdmlzaXRGaWVsZChGaWVsZEluZm8gaW5mbyk7CiAgVCB2aXNpdENvbnN0YW50KENvbnN0YW50SW5mbyBpbmZvKTsKICBUIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25JbmZvIGluZm8pOwogIFQgdmlzaXRUeXBlZGVmKFR5cGVkZWZJbmZvIGluZm8pOwogIFQgdmlzaXRDbG9zdXJlKENsb3N1cmVJbmZvIGluZm8pOwogIFQgdmlzaXRPdXRwdXQoT3V0cHV0VW5pdEluZm8gaW5mbyk7Cn0KCi8vLyBBIHZpc2l0b3IgdGhhdCByZWN1cnNpdmVseSB3YWxrcyBlYWNoIHBvcnRpb24gb2YgdGhlIHByb2dyYW0uIEJlY2F1c2UgdGhlCi8vLyBpbmZvIHJlcHJlc2VudGF0aW9uIGlzIHJlZHVuZGFudCwgdGhpcyB2aXNpdG9yIG9ubHkgd2Fsa3MgdGhlIHN0cnVjdHVyZSBvZgovLy8gdGhlIHByb2dyYW0gYW5kIHNraXBzIHNvbWUgcmVkdW5kYW50IGxpbmtzLiBGb3IgZXhhbXBsZSwgZXZlbiB0aG91Z2gKLy8vIHZpc2l0QWxsIGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gZnVuY3Rpb25zLCB0aGlzIHZpc2l0b3Igb25seSByZWN1cnNlcyB0bwovLy8gdmlzaXQgbGlicmFyaWVzLCB0aGVuIGZyb20gZWFjaCBsaWJyYXJ5IHdlIHZpc2l0IGZ1bmN0aW9ucyBhbmQgY2xhc3NlcywgYW5kCi8vLyBzbyBvbi4KY2xhc3MgUmVjdXJzaXZlSW5mb1Zpc2l0b3IgZXh0ZW5kcyBJbmZvVmlzaXRvcjxOdWxsPiB7CiAgdmlzaXRBbGwoQWxsSW5mbyBpbmZvKSB7CiAgICAvLyBOb3RlOiB3ZSBkb24ndCB2aXNpdCBmdW5jdGlvbnMsIGZpZWxkcywgY2xhc3NlcywgYW5kIHR5cGVkZWZzIGJlY2F1c2UKICAgIC8vIHRoZXkgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBsaWJyYXJ5IGluZm8uCiAgICBpbmZvLmxpYnJhcmllcy5mb3JFYWNoKHZpc2l0TGlicmFyeSk7CiAgICBpbmZvLmNvbnN0YW50cy5mb3JFYWNoKHZpc2l0Q29uc3RhbnQpOwogIH0KCiAgdmlzaXRQcm9ncmFtKFByb2dyYW1JbmZvIGluZm8pIHt9CgogIHZpc2l0TGlicmFyeShMaWJyYXJ5SW5mbyBpbmZvKSB7CiAgICBpbmZvLnRvcExldmVsRnVuY3Rpb25zLmZvckVhY2godmlzaXRGdW5jdGlvbik7CiAgICBpbmZvLnRvcExldmVsVmFyaWFibGVzLmZvckVhY2godmlzaXRGaWVsZCk7CiAgICBpbmZvLmNsYXNzZXMuZm9yRWFjaCh2aXNpdENsYXNzKTsKICAgIGluZm8udHlwZWRlZnMuZm9yRWFjaCh2aXNpdFR5cGVkZWYpOwogIH0KCiAgdmlzaXRDbGFzcyhDbGFzc0luZm8gaW5mbykgewogICAgaW5mby5mdW5jdGlvbnMuZm9yRWFjaCh2aXNpdEZ1bmN0aW9uKTsKICAgIGluZm8uZmllbGRzLmZvckVhY2godmlzaXRGaWVsZCk7CiAgfQoKICB2aXNpdEZpZWxkKEZpZWxkSW5mbyBpbmZvKSB7CiAgICBpbmZvLmNsb3N1cmVzLmZvckVhY2godmlzaXRDbG9zdXJlKTsKICB9CgogIHZpc2l0Q29uc3RhbnQoQ29uc3RhbnRJbmZvIGluZm8pIHt9CgogIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25JbmZvIGluZm8pIHsKICAgIGluZm8uY2xvc3VyZXMuZm9yRWFjaCh2aXNpdENsb3N1cmUpOwogIH0KCiAgdmlzaXRUeXBlZGVmKFR5cGVkZWZJbmZvIGluZm8pIHt9CiAgdmlzaXRPdXRwdXQoT3V0cHV0VW5pdEluZm8gaW5mbykge30KICB2aXNpdENsb3N1cmUoQ2xvc3VyZUluZm8gaW5mbykgewogICAgdmlzaXRGdW5jdGlvbihpbmZvLmZ1bmN0aW9uKTsKICB9Cn0KgicATk48AUMbAUxNKRYxFQE1DwFJRToVAUYMASUPAScCATccNysXARUMDwEPAU8UHQFQASEBLgIBTg0qOCICAT8QLRcBQDEBSw8zATIwATUrAS8qATtLUDMzATowAUwZOQFRGk9BMwFRTE0vKwFNTQ4ZAU9NSTxRHgENAUECARQbDBkeIBsdASgcAS4aATYXASocATIWAREBDxgRGx4gGx0gHhsgGhcBRQIBLCYxCwE2OwEzNQEqKwErMAFOTzYBQhZRAUo/AT0BRQIBUE47KRMBPCUBNzwBQwFEAgEnJCUTATk7MwEjUR8qAQ1OPQE5AUMCAUxOJBEqDQEoCwFOFQ8BLwIBKDcnMhcBN0RAAT8BRgIBJzIdDwE8FwE1HgEvFwE9EAFDHAENFBkTERkVESEVQwE5AUMCAS0mGQ8BQTwBPQFFAgEsNTAuLTIBThQBKh8BRB4BIQ8BIBUBIB0BNCIBFFAWAT8UASEXARAUGSETGRYVERcfFxgZEkYBPwFGAgFBJjQZAQ9MPwE9AUUCATAXOhUBSFAqFQEqAgE6FhUVHQE6AgEpGhcWGBkBFR0bHSACAUEQCwkMCQwOCwsCASUSGxgZFhwZGRYcGR4bGxgbGA0TBAIBJxIUHxIdFSASHRUgFyIUHxQfDRMEAgFHIBwkJCAgJiYkJCYCAU5PSU1QCzcbTTEqKwQBJAEjMzAmKQQBHyslBAEfKQQBJgElKQQBJCYjIgQCAR5wYWNrYWdlOmRhcnQyanNfaW5mby9pbmZvLmRhcnQ+c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2RhcnQyanNfaW5mby9saWIvanNvbl9pbmZvX2NvZGVjLmRhcnTAAE7ZLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBDb252ZXJ0ZXJzIGFuZCBjb2RlY3MgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBKU09OIGFuZCBbSW5mb10gY2xhc3Nlcy4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwoKaW1wb3J0ICdwYWNrYWdlOmNvbGxlY3Rpb24vY29sbGVjdGlvbi5kYXJ0JzsKaW1wb3J0ICdzcmMvdXRpbC5kYXJ0JzsKaW1wb3J0ICdpbmZvLmRhcnQnOwoKTGlzdDxTdHJpbmc+IF90b1NvcnRlZFNlcmlhbGl6ZWRJZHMoCiAgICAgICAgSXRlcmFibGU8SW5mbz4gaW5mb3MsIElkIEZ1bmN0aW9uKEluZm8pIGdldElkKSA9PgogICAgaW5mb3MubWFwKChpKSA9PiBnZXRJZChpKS5zZXJpYWxpemVkSWQpLnRvTGlzdCgpLi5zb3J0KGNvbXBhcmVOYXR1cmFsKTsKCi8vIFRPRE8oc2lnbXVuZCk6IGFkZCB1bml0IHRlc3RzLgpjbGFzcyBKc29uVG9BbGxJbmZvQ29udmVydGVyIGV4dGVuZHMgQ29udmVydGVyPE1hcDxTdHJpbmcsIGR5bmFtaWM+LCBBbGxJbmZvPiB7CiAgLy8gVXNpbmcgYE1hc2hNYXBgIGhlcmUgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIHRoZSBkZWZhdWx0IGBMaW5rZWRIYXNoTWFwYC4KICBmaW5hbCBNYXA8U3RyaW5nLCBJbmZvPiByZWdpc3RyeSA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW5mbz4oKTsKCiAgQWxsSW5mbyBjb252ZXJ0KE1hcDxTdHJpbmcsIGR5bmFtaWM+IGpzb24pIHsKICAgIHJlZ2lzdHJ5LmNsZWFyKCk7CgogICAgdmFyIHJlc3VsdCA9IG5ldyBBbGxJbmZvKCk7CiAgICB2YXIgZWxlbWVudHMgPSBqc29uWydlbGVtZW50cyddOwogICAgLy8gVE9ETyhzcmF3bGlucyk6IFNpbmNlIG9ubHkgdGhlIE1hcCB2YWx1ZXMgYXJlIGJlaW5nIGV4dHJhY3RlZCBiZWxvdywKICAgIC8vIHJlcGxhY2UgYGFzYCB3aXRoIGBjYXN0YCB3aGVuIGBjYXN0YCBiZWNvbWVzIGF2YWlsYWJsZSBpbiBEYXJ0IDIuMDoKICAgIC8vCiAgICAvLyAgICAgLmFkZEFsbChlbGVtZW50c1snbGlicmFyeSddLnZhbHVlcy5jYXN0PE1hcD4oKS5tYXAocGFyc2VMaWJyYXJ5KSk7CiAgICByZXN1bHQubGlicmFyaWVzLmFkZEFsbCgKICAgICAgICAoZWxlbWVudHNbJ2xpYnJhcnknXSBhcyBNYXApLnZhbHVlcy5tYXAoKGwpID0+IHBhcnNlTGlicmFyeShsKSkpOwogICAgcmVzdWx0LmNsYXNzZXMKICAgICAgICAuYWRkQWxsKChlbGVtZW50c1snY2xhc3MnXSBhcyBNYXApLnZhbHVlcy5tYXAoKGMpID0+IHBhcnNlQ2xhc3MoYykpKTsKICAgIHJlc3VsdC5mdW5jdGlvbnMuYWRkQWxsKAogICAgICAgIChlbGVtZW50c1snZnVuY3Rpb24nXSBhcyBNYXApLnZhbHVlcy5tYXAoKGYpID0+IHBhcnNlRnVuY3Rpb24oZikpKTsKCiAgICAvLyBUT0RPKGhldCk6IFJldmVydCB0aGlzIHdoZW4gdGhlIGRhcnQyanMgd2l0aCB0aGUgbmV3IGNvZGVjIGlzIGluIHN0YWJsZQogICAgaWYgKGVsZW1lbnRzWydjbG9zdXJlJ10gIT0gbnVsbCkgewogICAgICByZXN1bHQuY2xvc3VyZXMuYWRkQWxsKAogICAgICAgICAgKGVsZW1lbnRzWydjbG9zdXJlJ10gYXMgTWFwKS52YWx1ZXMubWFwKChjKSA9PiBwYXJzZUNsb3N1cmUoYykpKTsKICAgIH0KICAgIHJlc3VsdC5maWVsZHMKICAgICAgICAuYWRkQWxsKChlbGVtZW50c1snZmllbGQnXSBhcyBNYXApLnZhbHVlcy5tYXAoKGYpID0+IHBhcnNlRmllbGQoZikpKTsKICAgIHJlc3VsdC50eXBlZGVmcy5hZGRBbGwoCiAgICAgICAgKGVsZW1lbnRzWyd0eXBlZGVmJ10gYXMgTWFwKS52YWx1ZXMubWFwKCh0KSA9PiBwYXJzZVR5cGVkZWYodCkpKTsKICAgIHJlc3VsdC5jb25zdGFudHMuYWRkQWxsKAogICAgICAgIChlbGVtZW50c1snY29uc3RhbnQnXSBhcyBNYXApLnZhbHVlcy5tYXAoKGMpID0+IHBhcnNlQ29uc3RhbnQoYykpKTsKCiAgICBqc29uWydob2xkaW5nJ10uZm9yRWFjaCgoaywgZGVwcykgewogICAgICBDb2RlSW5mbyBzcmMgPSByZWdpc3RyeVtrXTsKICAgICAgYXNzZXJ0KHNyYyAhPSBudWxsKTsKICAgICAgZm9yICh2YXIgZGVwIGluIGRlcHMpIHsKICAgICAgICB2YXIgdGFyZ2V0ID0gcmVnaXN0cnlbZGVwWydpZCddXTsKICAgICAgICBhc3NlcnQodGFyZ2V0ICE9IG51bGwpOwogICAgICAgIHNyYy51c2VzLmFkZChuZXcgRGVwZW5kZW5jeUluZm8odGFyZ2V0LCBkZXBbJ21hc2snXSkpOwogICAgICB9CiAgICB9KTsKCiAgICBqc29uWydkZXBlbmRlbmNpZXMnXT8uZm9yRWFjaCgoU3RyaW5nIGssIGRlcGVuZGVuY2llcykgewogICAgICBMaXN0PFN0cmluZz4gZGVwcyA9IGRlcGVuZGVuY2llczsKICAgICAgcmVzdWx0LmRlcGVuZGVuY2llc1tyZWdpc3RyeVtrXV0gPSBkZXBzLm1hcCgoZCkgPT4gcmVnaXN0cnlbZF0pLnRvTGlzdCgpOwogICAgfSk7CgogICAgcmVzdWx0Lm91dHB1dFVuaXRzCiAgICAgICAgLmFkZEFsbCgoanNvblsnb3V0cHV0VW5pdHMnXSBhcyBMaXN0KS5tYXAoKG8pID0+IHBhcnNlT3V0cHV0VW5pdChvKSkpOwoKICAgIHJlc3VsdC5wcm9ncmFtID0gcGFyc2VQcm9ncmFtKGpzb25bJ3Byb2dyYW0nXSk7CgogICAgaWYgKGpzb25bJ2RlZmVycmVkRmlsZXMnXSAhPSBudWxsKSB7CiAgICAgIGZpbmFsIGRlZmVycmVkRmlsZXNNYXAgPQogICAgICAgICAgKGpzb25bJ2RlZmVycmVkRmlsZXMnXSBhcyBNYXApLmNhc3Q8U3RyaW5nLCBNYXA8U3RyaW5nLCBkeW5hbWljPj4oKTsKICAgICAgZm9yIChmaW5hbCBsaWJyYXJ5IGluIGRlZmVycmVkRmlsZXNNYXAudmFsdWVzKSB7CiAgICAgICAgaWYgKGxpYnJhcnlbJ2ltcG9ydHMnXSAhPSBudWxsKSB7CiAgICAgICAgICAvLyBUaGUgaW1wb3J0TWFwIG5lZWRzIHRvIGJlIHR5cGVkIGFzIDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4sIGJ1dCB0aGUKICAgICAgICAgIC8vIGpzb24gcGFyc2VyIHByb2R1Y2VzIDxTdHJpbmcsIGR5bmFtaWM+LgogICAgICAgICAgZmluYWwgaW1wb3J0TWFwID0gbGlicmFyeVsnaW1wb3J0cyddIGFzIE1hcDxTdHJpbmcsIGR5bmFtaWM+OwogICAgICAgICAgaW1wb3J0TWFwLmZvckVhY2goKHByZWZpeCwgZmlsZXMpIHsKICAgICAgICAgICAgaW1wb3J0TWFwW3ByZWZpeF0gPSAoZmlsZXMgYXMgTGlzdDxkeW5hbWljPikuY2FzdDxTdHJpbmc+KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGxpYnJhcnlbJ2ltcG9ydHMnXSA9IGltcG9ydE1hcC5jYXN0PFN0cmluZywgTGlzdDxTdHJpbmc+PigpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXN1bHQuZGVmZXJyZWRGaWxlcyA9IGRlZmVycmVkRmlsZXNNYXA7CiAgICB9CgogICAgLy8gdG9kbzogdmVyc2lvbiwgZXRjCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgT3V0cHV0VW5pdEluZm8gcGFyc2VPdXRwdXRVbml0KE1hcCBqc29uKSB7CiAgICBPdXRwdXRVbml0SW5mbyByZXN1bHQgPSBwYXJzZUlkKGpzb25bJ2lkJ10pOwogICAgcmVzdWx0CiAgICAgIC4uZmlsZW5hbWUgPSBqc29uWydmaWxlbmFtZSddCiAgICAgIC4ubmFtZSA9IGpzb25bJ25hbWUnXQogICAgICAuLnNpemUgPSBqc29uWydzaXplJ107CiAgICByZXN1bHQuaW1wb3J0cwogICAgICAgIC5hZGRBbGwoKGpzb25bJ2ltcG9ydHMnXSBhcyBMaXN0KS5tYXAoKHMpID0+IHMgYXMgU3RyaW5nKSA/PyBjb25zdCBbXSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlicmFyeUluZm8gcGFyc2VMaWJyYXJ5KE1hcCBqc29uKSB7CiAgICBMaWJyYXJ5SW5mbyByZXN1bHQgPSBwYXJzZUlkKGpzb25bJ2lkJ10pOwogICAgcmVzdWx0CiAgICAgIC4ubmFtZSA9IGpzb25bJ25hbWUnXQogICAgICAuLnVyaSA9IFVyaS5wYXJzZShqc29uWydjYW5vbmljYWxVcmknXSkKICAgICAgLi5vdXRwdXRVbml0ID0gcGFyc2VJZChqc29uWydvdXRwdXRVbml0J10pCiAgICAgIC4uc2l6ZSA9IGpzb25bJ3NpemUnXTsKICAgIGZvciAodmFyIGNoaWxkIGluIGpzb25bJ2NoaWxkcmVuJ10ubWFwKHBhcnNlSWQpKSB7CiAgICAgIGlmIChjaGlsZCBpcyBGdW5jdGlvbkluZm8pIHsKICAgICAgICByZXN1bHQudG9wTGV2ZWxGdW5jdGlvbnMuYWRkKGNoaWxkKTsKICAgICAgfSBlbHNlIGlmIChjaGlsZCBpcyBGaWVsZEluZm8pIHsKICAgICAgICByZXN1bHQudG9wTGV2ZWxWYXJpYWJsZXMuYWRkKGNoaWxkKTsKICAgICAgfSBlbHNlIGlmIChjaGlsZCBpcyBDbGFzc0luZm8pIHsKICAgICAgICByZXN1bHQuY2xhc3Nlcy5hZGQoY2hpbGQpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChjaGlsZCBpcyBUeXBlZGVmSW5mbyk7CiAgICAgICAgcmVzdWx0LnR5cGVkZWZzLmFkZChjaGlsZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBDbGFzc0luZm8gcGFyc2VDbGFzcyhNYXAganNvbikgewogICAgQ2xhc3NJbmZvIHJlc3VsdCA9IHBhcnNlSWQoanNvblsnaWQnXSk7CiAgICByZXN1bHQKICAgICAgLi5uYW1lID0ganNvblsnbmFtZSddCiAgICAgIC4ucGFyZW50ID0gcGFyc2VJZChqc29uWydwYXJlbnQnXSkKICAgICAgLi5vdXRwdXRVbml0ID0gcGFyc2VJZChqc29uWydvdXRwdXRVbml0J10pCiAgICAgIC4uc2l6ZSA9IGpzb25bJ3NpemUnXQogICAgICAuLmlzQWJzdHJhY3QgPSBqc29uWydtb2RpZmllcnMnXVsnYWJzdHJhY3QnXSA9PSB0cnVlOwogICAgYXNzZXJ0KHJlc3VsdCBpcyBDbGFzc0luZm8pOwogICAgZm9yICh2YXIgY2hpbGQgaW4ganNvblsnY2hpbGRyZW4nXS5tYXAocGFyc2VJZCkpIHsKICAgICAgaWYgKGNoaWxkIGlzIEZ1bmN0aW9uSW5mbykgewogICAgICAgIHJlc3VsdC5mdW5jdGlvbnMuYWRkKGNoaWxkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoY2hpbGQgaXMgRmllbGRJbmZvKTsKICAgICAgICByZXN1bHQuZmllbGRzLmFkZChjaGlsZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGaWVsZEluZm8gcGFyc2VGaWVsZChNYXAganNvbikgewogICAgRmllbGRJbmZvIHJlc3VsdCA9IHBhcnNlSWQoanNvblsnaWQnXSk7CiAgICByZXR1cm4gcmVzdWx0CiAgICAgIC4ubmFtZSA9IGpzb25bJ25hbWUnXQogICAgICAuLnBhcmVudCA9IHBhcnNlSWQoanNvblsncGFyZW50J10pCiAgICAgIC4uY292ZXJhZ2VJZCA9IGpzb25bJ2NvdmVyYWdlSWQnXQogICAgICAuLm91dHB1dFVuaXQgPSBwYXJzZUlkKGpzb25bJ291dHB1dFVuaXQnXSkKICAgICAgLi5zaXplID0ganNvblsnc2l6ZSddCiAgICAgIC4udHlwZSA9IGpzb25bJ3R5cGUnXQogICAgICAuLmluZmVycmVkVHlwZSA9IGpzb25bJ2luZmVycmVkVHlwZSddCiAgICAgIC4uY29kZSA9IHBhcnNlQ29kZShqc29uWydjb2RlJ10pCiAgICAgIC4uaXNDb25zdCA9IGpzb25bJ2NvbnN0J10gPz8gZmFsc2UKICAgICAgLi5pbml0aWFsaXplciA9IHBhcnNlSWQoanNvblsnaW5pdGlhbGl6ZXInXSkKICAgICAgLi5jbG9zdXJlcyA9IChqc29uWydjaGlsZHJlbiddIGFzIExpc3QpCiAgICAgICAgICAubWFwPENsb3N1cmVJbmZvPigoYykgPT4gcGFyc2VJZChjKSkKICAgICAgICAgIC50b0xpc3QoKTsKICB9CgogIENvbnN0YW50SW5mbyBwYXJzZUNvbnN0YW50KE1hcCBqc29uKSB7CiAgICBDb25zdGFudEluZm8gcmVzdWx0ID0gcGFyc2VJZChqc29uWydpZCddKTsKICAgIHJldHVybiByZXN1bHQKICAgICAgLi5jb2RlID0gcGFyc2VDb2RlKGpzb25bJ2NvZGUnXSkKICAgICAgLi5zaXplID0ganNvblsnc2l6ZSddCiAgICAgIC4ub3V0cHV0VW5pdCA9IHBhcnNlSWQoanNvblsnb3V0cHV0VW5pdCddKTsKICB9CgogIFR5cGVkZWZJbmZvIHBhcnNlVHlwZWRlZihNYXAganNvbikgewogICAgVHlwZWRlZkluZm8gcmVzdWx0ID0gcGFyc2VJZChqc29uWydpZCddKTsKICAgIHJldHVybiByZXN1bHQKICAgICAgLi5uYW1lID0ganNvblsnbmFtZSddCiAgICAgIC4ucGFyZW50ID0gcGFyc2VJZChqc29uWydwYXJlbnQnXSkKICAgICAgLi50eXBlID0ganNvblsndHlwZSddCiAgICAgIC4uc2l6ZSA9IDA7CiAgfQoKICBQcm9ncmFtSW5mbyBwYXJzZVByb2dyYW0oTWFwIGpzb24pIHsKICAgIHZhciBwcm9ncmFtSW5mbyA9IG5ldyBQcm9ncmFtSW5mbygpCiAgICAgIC4uZW50cnlwb2ludCA9IHBhcnNlSWQoanNvblsnZW50cnlwb2ludCddKQogICAgICAuLnNpemUgPSBqc29uWydzaXplJ10KICAgICAgLi5jb21waWxhdGlvbk1vbWVudCA9IERhdGVUaW1lLnBhcnNlKGpzb25bJ2NvbXBpbGF0aW9uTW9tZW50J10pCiAgICAgIC4uZGFydDJqc1ZlcnNpb24gPSBqc29uWydkYXJ0MmpzVmVyc2lvbiddCiAgICAgIC4ubm9TdWNoTWV0aG9kRW5hYmxlZCA9IGpzb25bJ25vU3VjaE1ldGhvZEVuYWJsZWQnXQogICAgICAuLmlzUnVudGltZVR5cGVVc2VkID0ganNvblsnaXNSdW50aW1lVHlwZVVzZWQnXQogICAgICAuLmlzSXNvbGF0ZUluVXNlID0ganNvblsnaXNJc29sYXRlSW5Vc2UnXQogICAgICAuLmlzRnVuY3Rpb25BcHBseVVzZWQgPSBqc29uWydpc0Z1bmN0aW9uQXBwbHlVc2VkJ10KICAgICAgLi5pc01pcnJvcnNVc2VkID0ganNvblsnaXNNaXJyb3JzVXNlZCddCiAgICAgIC4ubWluaWZpZWQgPSBqc29uWydtaW5pZmllZCddOwoKICAgIC8vIFRPRE8oaGV0KTogUmV2ZXJ0IHRoaXMgd2hlbiB0aGUgZGFydDJqcyB3aXRoIHRoZSBuZXcgY29kZWMgaXMgaW4gc3RhYmxlCiAgICB2YXIgY29tcGlsYXRpb25EdXJhdGlvbiA9IGpzb25bJ2NvbXBpbGF0aW9uRHVyYXRpb24nXTsKICAgIGlmIChjb21waWxhdGlvbkR1cmF0aW9uIGlzIFN0cmluZykgewogICAgICBwcm9ncmFtSW5mby5jb21waWxhdGlvbkR1cmF0aW9uID0gX3BhcnNlRHVyYXRpb24oY29tcGlsYXRpb25EdXJhdGlvbik7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoY29tcGlsYXRpb25EdXJhdGlvbiBpcyBpbnQpOwogICAgICBwcm9ncmFtSW5mby5jb21waWxhdGlvbkR1cmF0aW9uID0KICAgICAgICAgIG5ldyBEdXJhdGlvbihtaWNyb3NlY29uZHM6IGNvbXBpbGF0aW9uRHVyYXRpb24pOwogICAgfQoKICAgIHZhciB0b0pzb25EdXJhdGlvbiA9IGpzb25bJ3RvSnNvbkR1cmF0aW9uJ107CiAgICBpZiAodG9Kc29uRHVyYXRpb24gaXMgU3RyaW5nKSB7CiAgICAgIHByb2dyYW1JbmZvLnRvSnNvbkR1cmF0aW9uID0gX3BhcnNlRHVyYXRpb24odG9Kc29uRHVyYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KHRvSnNvbkR1cmF0aW9uIGlzIGludCk7CiAgICAgIHByb2dyYW1JbmZvLnRvSnNvbkR1cmF0aW9uID0gbmV3IER1cmF0aW9uKG1pY3Jvc2Vjb25kczogdG9Kc29uRHVyYXRpb24pOwogICAgfQoKICAgIHZhciBkdW1wSW5mb0R1cmF0aW9uID0ganNvblsnZHVtcEluZm9EdXJhdGlvbiddOwogICAgaWYgKGR1bXBJbmZvRHVyYXRpb24gaXMgU3RyaW5nKSB7CiAgICAgIHByb2dyYW1JbmZvLmR1bXBJbmZvRHVyYXRpb24gPSBfcGFyc2VEdXJhdGlvbihkdW1wSW5mb0R1cmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChkdW1wSW5mb0R1cmF0aW9uIGlzIGludCk7CiAgICAgIHByb2dyYW1JbmZvLmR1bXBJbmZvRHVyYXRpb24gPQogICAgICAgICAgbmV3IER1cmF0aW9uKG1pY3Jvc2Vjb25kczogZHVtcEluZm9EdXJhdGlvbik7CiAgICB9CgogICAgcmV0dXJuIHByb2dyYW1JbmZvOwogIH0KCiAgLy8vIFBhcnNlIGEgc3RyaW5nIGZvcm1hdHRlZCBhcyAiWFg6WVk6WlouWlpaWloiIGludG8gYSBbRHVyYXRpb25dLgogIER1cmF0aW9uIF9wYXJzZUR1cmF0aW9uKFN0cmluZyBkdXJhdGlvbikgewogICAgaWYgKCFkdXJhdGlvbi5jb250YWlucygnOicpKSB7CiAgICAgIHJldHVybiBuZXcgRHVyYXRpb24obWlsbGlzZWNvbmRzOiBpbnQucGFyc2UoZHVyYXRpb24pKTsKICAgIH0KICAgIHZhciBwYXJ0cyA9IGR1cmF0aW9uLnNwbGl0KCc6Jyk7CiAgICB2YXIgaG91cnMgPSBkb3VibGUucGFyc2UocGFydHNbMF0pOwogICAgdmFyIG1pbnV0ZXMgPSBkb3VibGUucGFyc2UocGFydHNbMV0pOwogICAgdmFyIHNlY29uZHMgPSBkb3VibGUucGFyc2UocGFydHNbMl0pOwogICAgY29uc3Qgc2Vjb25kc0luTWlsbGlzID0gMTAwMDsKICAgIGNvbnN0IG1pbnV0ZXNJbk1pbGxpcyA9IDYwICogc2Vjb25kc0luTWlsbGlzOwogICAgY29uc3QgaG91cnNJbk1pbGxpcyA9IDYwICogbWludXRlc0luTWlsbGlzOwogICAgdmFyIHRvdGFsTWlsbGlzID0gc2Vjb25kc0luTWlsbGlzICogc2Vjb25kcyArCiAgICAgICAgbWludXRlc0luTWlsbGlzICogbWludXRlcyArCiAgICAgICAgaG91cnNJbk1pbGxpcyAqIGhvdXJzOwogICAgcmV0dXJuIG5ldyBEdXJhdGlvbihtaWxsaXNlY29uZHM6IHRvdGFsTWlsbGlzLnJvdW5kKCkpOwogIH0KCiAgRnVuY3Rpb25JbmZvIHBhcnNlRnVuY3Rpb24oTWFwIGpzb24pIHsKICAgIEZ1bmN0aW9uSW5mbyByZXN1bHQgPSBwYXJzZUlkKGpzb25bJ2lkJ10pOwogICAgcmV0dXJuIHJlc3VsdAogICAgICAuLm5hbWUgPSBqc29uWyduYW1lJ10KICAgICAgLi5wYXJlbnQgPSBwYXJzZUlkKGpzb25bJ3BhcmVudCddKQogICAgICAuLmNvdmVyYWdlSWQgPSBqc29uWydjb3ZlcmFnZUlkJ10KICAgICAgLi5vdXRwdXRVbml0ID0gcGFyc2VJZChqc29uWydvdXRwdXRVbml0J10pCiAgICAgIC4uc2l6ZSA9IGpzb25bJ3NpemUnXQogICAgICAuLnR5cGUgPSBqc29uWyd0eXBlJ10KICAgICAgLi5yZXR1cm5UeXBlID0ganNvblsncmV0dXJuVHlwZSddCiAgICAgIC4uaW5mZXJyZWRSZXR1cm5UeXBlID0ganNvblsnaW5mZXJyZWRSZXR1cm5UeXBlJ10KICAgICAgLi5wYXJhbWV0ZXJzID0KICAgICAgICAgIChqc29uWydwYXJhbWV0ZXJzJ10gYXMgTGlzdCkubWFwKChwKSA9PiBwYXJzZVBhcmFtZXRlcihwKSkudG9MaXN0KCkKICAgICAgLi5jb2RlID0gcGFyc2VDb2RlKGpzb25bJ2NvZGUnXSkKICAgICAgLi5zaWRlRWZmZWN0cyA9IGpzb25bJ3NpZGVFZmZlY3RzJ10KICAgICAgLi5pbmxpbmVkQ291bnQgPSBqc29uWydpbmxpbmVkQ291bnQnXQogICAgICAuLm1vZGlmaWVycyA9CiAgICAgICAgICBwYXJzZU1vZGlmaWVycyhuZXcgTWFwPFN0cmluZywgYm9vbD4uZnJvbShqc29uWydtb2RpZmllcnMnXSkpCiAgICAgIC4uY2xvc3VyZXMgPSAoanNvblsnY2hpbGRyZW4nXSBhcyBMaXN0KQogICAgICAgICAgLm1hcDxDbG9zdXJlSW5mbz4oKGMpID0+IHBhcnNlSWQoYykpCiAgICAgICAgICAudG9MaXN0KCk7CiAgfQoKICBQYXJhbWV0ZXJJbmZvIHBhcnNlUGFyYW1ldGVyKE1hcCBqc29uKSA9PgogICAgICBuZXcgUGFyYW1ldGVySW5mbyhqc29uWyduYW1lJ10sIGpzb25bJ3R5cGUnXSwganNvblsnZGVjbGFyZWRUeXBlJ10pOwoKICBGdW5jdGlvbk1vZGlmaWVycyBwYXJzZU1vZGlmaWVycyhNYXA8U3RyaW5nLCBib29sPiBqc29uKSB7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTW9kaWZpZXJzKAogICAgICAgIGlzU3RhdGljOiBqc29uWydzdGF0aWMnXSA9PSB0cnVlLAogICAgICAgIGlzQ29uc3Q6IGpzb25bJ2NvbnN0J10gPT0gdHJ1ZSwKICAgICAgICBpc0ZhY3Rvcnk6IGpzb25bJ2ZhY3RvcnknXSA9PSB0cnVlLAogICAgICAgIGlzRXh0ZXJuYWw6IGpzb25bJ2V4dGVybmFsJ10gPT0gdHJ1ZSk7CiAgfQoKICBDbG9zdXJlSW5mbyBwYXJzZUNsb3N1cmUoTWFwIGpzb24pIHsKICAgIENsb3N1cmVJbmZvIHJlc3VsdCA9IHBhcnNlSWQoanNvblsnaWQnXSk7CiAgICByZXR1cm4gcmVzdWx0CiAgICAgIC4ubmFtZSA9IGpzb25bJ25hbWUnXQogICAgICAuLnBhcmVudCA9IHBhcnNlSWQoanNvblsncGFyZW50J10pCiAgICAgIC4ub3V0cHV0VW5pdCA9IHBhcnNlSWQoanNvblsnb3V0cHV0VW5pdCddKQogICAgICAuLnNpemUgPSBqc29uWydzaXplJ10KICAgICAgLi5mdW5jdGlvbiA9IHBhcnNlSWQoanNvblsnZnVuY3Rpb24nXSk7CiAgfQoKICBJbmZvIHBhcnNlSWQoaWQpIHsKICAgIFN0cmluZyBzZXJpYWxpemVkSWQgPSBpZDsKICAgIGlmIChzZXJpYWxpemVkSWQgPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiByZWdpc3RyeS5wdXRJZkFic2VudChzZXJpYWxpemVkSWQsICgpIHsKICAgICAgaWYgKHNlcmlhbGl6ZWRJZC5zdGFydHNXaXRoKCdmdW5jdGlvbi8nKSkgewogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25JbmZvLmludGVybmFsKCk7CiAgICAgIH0gZWxzZSBpZiAoc2VyaWFsaXplZElkLnN0YXJ0c1dpdGgoJ2Nsb3N1cmUvJykpIHsKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVJbmZvLmludGVybmFsKCk7CiAgICAgIH0gZWxzZSBpZiAoc2VyaWFsaXplZElkLnN0YXJ0c1dpdGgoJ2xpYnJhcnkvJykpIHsKICAgICAgICByZXR1cm4gbmV3IExpYnJhcnlJbmZvLmludGVybmFsKCk7CiAgICAgIH0gZWxzZSBpZiAoc2VyaWFsaXplZElkLnN0YXJ0c1dpdGgoJ2NsYXNzLycpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDbGFzc0luZm8uaW50ZXJuYWwoKTsKICAgICAgfSBlbHNlIGlmIChzZXJpYWxpemVkSWQuc3RhcnRzV2l0aCgnZmllbGQvJykpIHsKICAgICAgICByZXR1cm4gbmV3IEZpZWxkSW5mby5pbnRlcm5hbCgpOwogICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWRJZC5zdGFydHNXaXRoKCdjb25zdGFudC8nKSkgewogICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRJbmZvLmludGVybmFsKCk7CiAgICAgIH0gZWxzZSBpZiAoc2VyaWFsaXplZElkLnN0YXJ0c1dpdGgoJ3R5cGVkZWYvJykpIHsKICAgICAgICByZXR1cm4gbmV3IFR5cGVkZWZJbmZvLmludGVybmFsKCk7CiAgICAgIH0gZWxzZSBpZiAoc2VyaWFsaXplZElkLnN0YXJ0c1dpdGgoJ291dHB1dFVuaXQvJykpIHsKICAgICAgICByZXR1cm4gbmV3IE91dHB1dFVuaXRJbmZvLmludGVybmFsKCk7CiAgICAgIH0KICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgIH0pOwogIH0KCiAgTGlzdDxDb2RlU3Bhbj4gcGFyc2VDb2RlKGR5bmFtaWMganNvbikgewogICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBmb3JtYXQgNS4xOgogICAgaWYgKGpzb24gaXMgU3RyaW5nKSB7CiAgICAgIHJldHVybiBbbmV3IENvZGVTcGFuKHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwsIHRleHQ6IGpzb24pXTsKICAgIH0KCiAgICBpZiAoanNvbiBpcyBMaXN0KSB7CiAgICAgIHJldHVybiBqc29uLm1hcCgoZHluYW1pYyB2YWx1ZSkgewogICAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGpzb25Db2RlID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIG5ldyBDb2RlU3BhbigKICAgICAgICAgICAgc3RhcnQ6IGpzb25Db2RlWydzdGFydCddLAogICAgICAgICAgICBlbmQ6IGpzb25Db2RlWydlbmQnXSwKICAgICAgICAgICAgdGV4dDoganNvbkNvZGVbJ3RleHQnXSk7CiAgICAgIH0pLnRvTGlzdCgpOwogICAgfQoKICAgIHJldHVybiBbXTsKICB9Cn0KCmNsYXNzIEFsbEluZm9Ub0pzb25Db252ZXJ0ZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8QWxsSW5mbywgTWFwPgogICAgaW1wbGVtZW50cyBJbmZvVmlzaXRvcjxNYXA+IHsKICAvLy8gV2hldGhlciB0byBnZW5lcmF0ZSBqc29uIGNvbXBhdGlibGUgd2l0aCBmb3JtYXQgNS4xCiAgZmluYWwgYm9vbCBpc0JhY2t3YXJkQ29tcGF0aWJsZTsKICBmaW5hbCBNYXA8SW5mbywgSWQ+IGlkcyA9IG5ldyBIYXNoTWFwPEluZm8sIElkPigpOwogIGZpbmFsIFNldDxpbnQ+IHVzZWRJZHMgPSBuZXcgU2V0PGludD4oKTsKCiAgQWxsSW5mb1RvSnNvbkNvbnZlcnRlcih7dGhpcy5pc0JhY2t3YXJkQ29tcGF0aWJsZTogZmFsc2V9KTsKCiAgSWQgaWRGb3IoSW5mbyBpbmZvKSB7CiAgICB2YXIgc2VyaWFsaXplZElkID0gaWRzW2luZm9dOwogICAgaWYgKHNlcmlhbGl6ZWRJZCAhPSBudWxsKSByZXR1cm4gc2VyaWFsaXplZElkOwoKICAgIGFzc2VydCgKICAgICAgICBpbmZvIGlzIExpYnJhcnlJbmZvIHx8CiAgICAgICAgICAgIGluZm8gaXMgQ29uc3RhbnRJbmZvIHx8CiAgICAgICAgICAgIGluZm8gaXMgT3V0cHV0VW5pdEluZm8gfHwKICAgICAgICAgICAgaW5mby5wYXJlbnQgIT0gbnVsbCwKICAgICAgICAiJGluZm8iKTsKCiAgICBpbnQgaWQ7CiAgICBpZiAoaW5mbyBpcyBDb25zdGFudEluZm8pIHsKICAgICAgLy8gTm8gbmFtZSBhbmQgbm8gcGFyZW50LCBzbyBgbG9uZ05hbWVgIGlzbid0IGhlbHBmdWwKICAgICAgYXNzZXJ0KGluZm8ubmFtZSA9PSBudWxsKTsKICAgICAgYXNzZXJ0KGluZm8ucGFyZW50ID09IG51bGwpOwogICAgICBhc3NlcnQoaW5mby5jb2RlICE9IG51bGwpOwogICAgICAvLyBJbnN0ZWFkLCB1c2UgdGhlIGNvbnRlbnQgb2YgdGhlIGNvZGUuCiAgICAgIGlkID0gaW5mby5jb2RlLmZpcnN0LnRleHQuaGFzaENvZGU7CiAgICB9IGVsc2UgewogICAgICBpZCA9IGxvbmdOYW1lKGluZm8sIHVzZUxpYnJhcnlVcmk6IHRydWUsIGZvcklkOiB0cnVlKS5oYXNoQ29kZTsKICAgIH0KCiAgICB3aGlsZSAoIXVzZWRJZHMuYWRkKGlkKSkgewogICAgICBpZCsrOwogICAgfQogICAgc2VyaWFsaXplZElkID0gbmV3IElkKGluZm8ua2luZCwgJyRpZCcpOwogICAgcmV0dXJuIGlkc1tpbmZvXSA9IHNlcmlhbGl6ZWRJZDsKICB9CgogIE1hcCBjb252ZXJ0KEFsbEluZm8gaW5mbykgPT4gaW5mby5hY2NlcHQodGhpcyk7CgogIE1hcCBfdmlzaXRMaXN0KExpc3Q8SW5mbz4gaW5mb3MpIHsKICAgIC8vIFVzaW5nIFNwbGF5VHJlZSB0byBtYWludGFpbiBhIGNvbnNpc3RlbnQgb3JkZXIgb2Yga2V5cwogICAgdmFyIG1hcCA9IG5ldyBTcGxheVRyZWVNYXA8U3RyaW5nLCBNYXA+KGNvbXBhcmVOYXR1cmFsKTsKICAgIGZvciAodmFyIGluZm8gaW4gaW5mb3MpIHsKICAgICAgbWFwWycke2lkRm9yKGluZm8pLmlkfSddID0gaW5mby5hY2NlcHQodGhpcyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgTWFwIF92aXNpdEFsbEluZm9FbGVtZW50cyhBbGxJbmZvIGluZm8pIHsKICAgIHZhciBqc29uTGlicmFyaWVzID0gX3Zpc2l0TGlzdChpbmZvLmxpYnJhcmllcyk7CiAgICB2YXIganNvbkNsYXNzZXMgPSBfdmlzaXRMaXN0KGluZm8uY2xhc3Nlcyk7CiAgICB2YXIganNvbkZ1bmN0aW9ucyA9IF92aXNpdExpc3QoaW5mby5mdW5jdGlvbnMpOwogICAgdmFyIGpzb25UeXBlZGVmcyA9IF92aXNpdExpc3QoaW5mby50eXBlZGVmcyk7CiAgICB2YXIganNvbkZpZWxkcyA9IF92aXNpdExpc3QoaW5mby5maWVsZHMpOwogICAgdmFyIGpzb25Db25zdGFudHMgPSBfdmlzaXRMaXN0KGluZm8uY29uc3RhbnRzKTsKICAgIHZhciBqc29uQ2xvc3VyZXMgPSBfdmlzaXRMaXN0KGluZm8uY2xvc3VyZXMpOwogICAgcmV0dXJuIHsKICAgICAgJ2xpYnJhcnknOiBqc29uTGlicmFyaWVzLAogICAgICAnY2xhc3MnOiBqc29uQ2xhc3NlcywKICAgICAgJ2Z1bmN0aW9uJzoganNvbkZ1bmN0aW9ucywKICAgICAgJ3R5cGVkZWYnOiBqc29uVHlwZWRlZnMsCiAgICAgICdmaWVsZCc6IGpzb25GaWVsZHMsCiAgICAgICdjb25zdGFudCc6IGpzb25Db25zdGFudHMsCiAgICAgICdjbG9zdXJlJzoganNvbkNsb3N1cmVzLAogICAgfTsKICB9CgogIE1hcCBfdmlzaXREZXBlbmRlbmN5SW5mbyhEZXBlbmRlbmN5SW5mbyBpbmZvKSA9PgogICAgICB7J2lkJzogaWRGb3IoaW5mby50YXJnZXQpLnNlcmlhbGl6ZWRJZCwgJ21hc2snOiBpbmZvLm1hc2t9OwoKICBNYXAgX3Zpc2l0QWxsSW5mb0hvbGRpbmcoQWxsSW5mbyBhbGxJbmZvKSB7CiAgICB2YXIgbWFwID0gbmV3IFNwbGF5VHJlZU1hcDxTdHJpbmcsIExpc3Q+KGNvbXBhcmVOYXR1cmFsKTsKICAgIHZvaWQgaGVscGVyKENvZGVJbmZvIGluZm8pIHsKICAgICAgaWYgKGluZm8udXNlcy5pc0VtcHR5KSByZXR1cm47CiAgICAgIG1hcFtpZEZvcihpbmZvKS5zZXJpYWxpemVkSWRdID0gaW5mby51c2VzCiAgICAgICAgICAubWFwKF92aXNpdERlcGVuZGVuY3lJbmZvKQogICAgICAgICAgLnRvTGlzdCgpCiAgICAgICAgICAgIC4uc29ydCgoYSwgYikgPT4gYVsnaWQnXS5jb21wYXJlVG8oYlsnaWQnXSkpOwogICAgfQoKICAgIGFsbEluZm8uZnVuY3Rpb25zLmZvckVhY2goaGVscGVyKTsKICAgIGFsbEluZm8uZmllbGRzLmZvckVhY2goaGVscGVyKTsKICAgIHJldHVybiBtYXA7CiAgfQoKICBNYXAgX3Zpc2l0QWxsSW5mb0RlcGVuZGVuY2llcyhBbGxJbmZvIGFsbEluZm8pIHsKICAgIHZhciBtYXAgPSBuZXcgU3BsYXlUcmVlTWFwPFN0cmluZywgTGlzdD4oY29tcGFyZU5hdHVyYWwpOwogICAgYWxsSW5mby5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoaywgdikgewogICAgICBtYXBbaWRGb3Ioaykuc2VyaWFsaXplZElkXSA9IF90b1NvcnRlZFNlcmlhbGl6ZWRJZHModiwgaWRGb3IpOwogICAgfSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgTWFwIHZpc2l0QWxsKEFsbEluZm8gaW5mbykgewogICAgdmFyIGVsZW1lbnRzID0gX3Zpc2l0QWxsSW5mb0VsZW1lbnRzKGluZm8pOwogICAgdmFyIGpzb25Ib2xkaW5nID0gX3Zpc2l0QWxsSW5mb0hvbGRpbmcoaW5mbyk7CiAgICB2YXIganNvbkRlcGVuZGVuY2llcyA9IF92aXNpdEFsbEluZm9EZXBlbmRlbmNpZXMoaW5mbyk7CiAgICByZXR1cm4gewogICAgICAnZWxlbWVudHMnOiBlbGVtZW50cywKICAgICAgJ2hvbGRpbmcnOiBqc29uSG9sZGluZywKICAgICAgJ2RlcGVuZGVuY2llcyc6IGpzb25EZXBlbmRlbmNpZXMsCiAgICAgICdvdXRwdXRVbml0cyc6IGluZm8ub3V0cHV0VW5pdHMubWFwKCh1KSA9PiB1LmFjY2VwdCh0aGlzKSkudG9MaXN0KCksCiAgICAgICdkdW1wX3ZlcnNpb24nOiBpc0JhY2t3YXJkQ29tcGF0aWJsZSA/IDUgOiBpbmZvLnZlcnNpb24sCiAgICAgICdkZWZlcnJlZEZpbGVzJzogaW5mby5kZWZlcnJlZEZpbGVzLAogICAgICAnZHVtcF9taW5vcl92ZXJzaW9uJzogaXNCYWNrd2FyZENvbXBhdGlibGUgPyAxIDogaW5mby5taW5vclZlcnNpb24sCiAgICAgICdwcm9ncmFtJzogaW5mby5wcm9ncmFtLmFjY2VwdCh0aGlzKQogICAgfTsKICB9CgogIE1hcCB2aXNpdFByb2dyYW0oUHJvZ3JhbUluZm8gaW5mbykgewogICAgcmV0dXJuIHsKICAgICAgJ2VudHJ5cG9pbnQnOiBpZEZvcihpbmZvLmVudHJ5cG9pbnQpLnNlcmlhbGl6ZWRJZCwKICAgICAgJ3NpemUnOiBpbmZvLnNpemUsCiAgICAgICdkYXJ0MmpzVmVyc2lvbic6IGluZm8uZGFydDJqc1ZlcnNpb24sCiAgICAgICdjb21waWxhdGlvbk1vbWVudCc6ICcke2luZm8uY29tcGlsYXRpb25Nb21lbnR9JywKICAgICAgJ2NvbXBpbGF0aW9uRHVyYXRpb24nOiBpbmZvLmNvbXBpbGF0aW9uRHVyYXRpb24uaW5NaWNyb3NlY29uZHMsCiAgICAgICd0b0pzb25EdXJhdGlvbic6IGluZm8udG9Kc29uRHVyYXRpb24uaW5NaWNyb3NlY29uZHMsCiAgICAgICdkdW1wSW5mb0R1cmF0aW9uJzogaW5mby5kdW1wSW5mb0R1cmF0aW9uLmluTWljcm9zZWNvbmRzLAogICAgICAnbm9TdWNoTWV0aG9kRW5hYmxlZCc6IGluZm8ubm9TdWNoTWV0aG9kRW5hYmxlZCwKICAgICAgJ2lzUnVudGltZVR5cGVVc2VkJzogaW5mby5pc1J1bnRpbWVUeXBlVXNlZCwKICAgICAgJ2lzSXNvbGF0ZUluVXNlJzogaW5mby5pc0lzb2xhdGVJblVzZSwKICAgICAgJ2lzRnVuY3Rpb25BcHBseVVzZWQnOiBpbmZvLmlzRnVuY3Rpb25BcHBseVVzZWQsCiAgICAgICdpc01pcnJvcnNVc2VkJzogaW5mby5pc01pcnJvcnNVc2VkLAogICAgICAnbWluaWZpZWQnOiBpbmZvLm1pbmlmaWVkLAogICAgfTsKICB9CgogIE1hcCBfdmlzaXRCYXNpY0luZm8oQmFzaWNJbmZvIGluZm8pIHsKICAgIHZhciByZXMgPSB7CiAgICAgICdpZCc6IGlkRm9yKGluZm8pLnNlcmlhbGl6ZWRJZCwKICAgICAgJ2tpbmQnOiBraW5kVG9TdHJpbmcoaW5mby5raW5kKSwKICAgICAgJ25hbWUnOiBpbmZvLm5hbWUsCiAgICAgICdzaXplJzogaW5mby5zaXplLAogICAgfTsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IE9taXQgdGhpcyBhbHNvIHdoZW4gb3V0cHV0VW5pdC5pZCA9PSAwIChtb3N0IGNvZGUgaXMgaW4KICAgIC8vIHRoZSBtYWluIG91dHB1dCB1bml0IGJ5IGRlZmF1bHQpLgogICAgaWYgKGluZm8ub3V0cHV0VW5pdCAhPSBudWxsKSB7CiAgICAgIHJlc1snb3V0cHV0VW5pdCddID0gaWRGb3IoaW5mby5vdXRwdXRVbml0KS5zZXJpYWxpemVkSWQ7CiAgICB9CiAgICBpZiAoaW5mby5jb3ZlcmFnZUlkICE9IG51bGwpIHJlc1snY292ZXJhZ2VJZCddID0gaW5mby5jb3ZlcmFnZUlkOwogICAgaWYgKGluZm8ucGFyZW50ICE9IG51bGwpIHJlc1sncGFyZW50J10gPSBpZEZvcihpbmZvLnBhcmVudCkuc2VyaWFsaXplZElkOwogICAgcmV0dXJuIHJlczsKICB9CgogIE1hcCB2aXNpdExpYnJhcnkoTGlicmFyeUluZm8gaW5mbykgewogICAgcmV0dXJuIF92aXNpdEJhc2ljSW5mbyhpbmZvKQogICAgICAuLmFkZEFsbCg8U3RyaW5nLCBPYmplY3Q+ewogICAgICAgICdjaGlsZHJlbic6IF90b1NvcnRlZFNlcmlhbGl6ZWRJZHMoCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICBpbmZvLnRvcExldmVsRnVuY3Rpb25zLAogICAgICAgICAgICAgIGluZm8udG9wTGV2ZWxWYXJpYWJsZXMsCiAgICAgICAgICAgICAgaW5mby5jbGFzc2VzLAogICAgICAgICAgICAgIGluZm8udHlwZWRlZnMKICAgICAgICAgICAgXS5leHBhbmQoKGkpID0+IGkpLAogICAgICAgICAgICBpZEZvciksCiAgICAgICAgJ2Nhbm9uaWNhbFVyaSc6ICcke2luZm8udXJpfScsCiAgICAgIH0pOwogIH0KCiAgTWFwIHZpc2l0Q2xhc3MoQ2xhc3NJbmZvIGluZm8pIHsKICAgIHJldHVybiBfdmlzaXRCYXNpY0luZm8oaW5mbykKICAgICAgLi5hZGRBbGwoPFN0cmluZywgT2JqZWN0PnsKICAgICAgICAvLyBUT0RPKHNpZ211bmQpOiBjaGFuZ2UgZm9ybWF0LCBpbmNsdWRlIG9ubHkgd2hlbiBhYnN0cmFjdCBpcyB0cnVlLgogICAgICAgICdtb2RpZmllcnMnOiB7J2Fic3RyYWN0JzogaW5mby5pc0Fic3RyYWN0fSwKICAgICAgICAnY2hpbGRyZW4nOiBfdG9Tb3J0ZWRTZXJpYWxpemVkSWRzKAogICAgICAgICAgICBbaW5mby5maWVsZHMsIGluZm8uZnVuY3Rpb25zXS5leHBhbmQoKGkpID0+IGkpLCBpZEZvcikKICAgICAgfSk7CiAgfQoKICBNYXAgdmlzaXRGaWVsZChGaWVsZEluZm8gaW5mbykgewogICAgdmFyIHJlc3VsdCA9IF92aXNpdEJhc2ljSW5mbyhpbmZvKQogICAgICAuLmFkZEFsbCg8U3RyaW5nLCBPYmplY3Q+ewogICAgICAgICdjaGlsZHJlbic6IF90b1NvcnRlZFNlcmlhbGl6ZWRJZHMoaW5mby5jbG9zdXJlcywgaWRGb3IpLAogICAgICAgICdpbmZlcnJlZFR5cGUnOiBpbmZvLmluZmVycmVkVHlwZSwKICAgICAgICAnY29kZSc6IF9zZXJpYWxpemVDb2RlKGluZm8uY29kZSksCiAgICAgICAgJ3R5cGUnOiBpbmZvLnR5cGUsCiAgICAgIH0pOwogICAgaWYgKGluZm8uaXNDb25zdCkgewogICAgICByZXN1bHRbJ2NvbnN0J10gPSB0cnVlOwogICAgICBpZiAoaW5mby5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgcmVzdWx0Wydpbml0aWFsaXplciddID0gaWRGb3IoaW5mby5pbml0aWFsaXplcikuc2VyaWFsaXplZElkOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTWFwIHZpc2l0Q29uc3RhbnQoQ29uc3RhbnRJbmZvIGluZm8pID0+IF92aXNpdEJhc2ljSW5mbyhpbmZvKQogICAgLi5hZGRBbGwoPFN0cmluZywgT2JqZWN0PnsnY29kZSc6IF9zZXJpYWxpemVDb2RlKGluZm8uY29kZSl9KTsKCiAgLy8gVE9ETyhzaWdtdW5kKTogZXhjbHVkZSBmYWxzZSB2YWx1ZXMgKHJlcXVpcmVzIGJ1bXBpbmcgdGhlIGZvcm1hdCB2ZXJzaW9uKToKICAvLyAgICAgdmFyIHJlcyA9IDxTdHJpbmcsIGJvb2w+e307CiAgLy8gICAgIGlmIChpc1N0YXRpYykgcmVzWydzdGF0aWMnXSA9IHRydWU7CiAgLy8gICAgIGlmIChpc0NvbnN0KSByZXNbJ2NvbnN0J10gPSB0cnVlOwogIC8vICAgICBpZiAoaXNGYWN0b3J5KSByZXNbJ2ZhY3RvcnknXSA9IHRydWU7CiAgLy8gICAgIGlmIChpc0V4dGVybmFsKSByZXNbJ2V4dGVybmFsJ10gPSB0cnVlOwogIC8vICAgICByZXR1cm4gcmVzOwogIE1hcCBfdmlzaXRGdW5jdGlvbk1vZGlmaWVycyhGdW5jdGlvbk1vZGlmaWVycyBtb2RzKSA9PiB7CiAgICAgICAgJ3N0YXRpYyc6IG1vZHMuaXNTdGF0aWMsCiAgICAgICAgJ2NvbnN0JzogbW9kcy5pc0NvbnN0LAogICAgICAgICdmYWN0b3J5JzogbW9kcy5pc0ZhY3RvcnksCiAgICAgICAgJ2V4dGVybmFsJzogbW9kcy5pc0V4dGVybmFsLAogICAgICB9OwoKICBNYXAgX3Zpc2l0UGFyYW1ldGVySW5mbyhQYXJhbWV0ZXJJbmZvIGluZm8pID0+CiAgICAgIHsnbmFtZSc6IGluZm8ubmFtZSwgJ3R5cGUnOiBpbmZvLnR5cGUsICdkZWNsYXJlZFR5cGUnOiBpbmZvLmRlY2xhcmVkVHlwZX07CgogIE1hcCB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uSW5mbyBpbmZvKSB7CiAgICByZXR1cm4gX3Zpc2l0QmFzaWNJbmZvKGluZm8pCiAgICAgIC4uYWRkQWxsKDxTdHJpbmcsIE9iamVjdD57CiAgICAgICAgJ2NoaWxkcmVuJzogX3RvU29ydGVkU2VyaWFsaXplZElkcyhpbmZvLmNsb3N1cmVzLCBpZEZvciksCiAgICAgICAgJ21vZGlmaWVycyc6IF92aXNpdEZ1bmN0aW9uTW9kaWZpZXJzKGluZm8ubW9kaWZpZXJzKSwKICAgICAgICAncmV0dXJuVHlwZSc6IGluZm8ucmV0dXJuVHlwZSwKICAgICAgICAnaW5mZXJyZWRSZXR1cm5UeXBlJzogaW5mby5pbmZlcnJlZFJldHVyblR5cGUsCiAgICAgICAgJ3BhcmFtZXRlcnMnOgogICAgICAgICAgICBpbmZvLnBhcmFtZXRlcnMubWFwKChwKSA9PiBfdmlzaXRQYXJhbWV0ZXJJbmZvKHApKS50b0xpc3QoKSwKICAgICAgICAnc2lkZUVmZmVjdHMnOiBpbmZvLnNpZGVFZmZlY3RzLAogICAgICAgICdpbmxpbmVkQ291bnQnOiBpbmZvLmlubGluZWRDb3VudCwKICAgICAgICAnY29kZSc6IF9zZXJpYWxpemVDb2RlKGluZm8uY29kZSksCiAgICAgICAgJ3R5cGUnOiBpbmZvLnR5cGUsCiAgICAgICAgLy8gTm90ZTogdmVyc2lvbiAzLjIgb2YgZHVtcC1pbmZvIHNlcmlhbGl6ZXMgYHVzZXNgIGluIGEgc2VjdGlvbiBjYWxsZWQKICAgICAgICAvLyBgaG9sZGluZ2AgYXQgdGhlIHRvcC1sZXZlbC4KICAgICAgfSk7CiAgfQoKICBNYXAgdmlzaXRDbG9zdXJlKENsb3N1cmVJbmZvIGluZm8pIHsKICAgIHJldHVybiBfdmlzaXRCYXNpY0luZm8oaW5mbykKICAgICAgLi5hZGRBbGwoPFN0cmluZywgT2JqZWN0PnsnZnVuY3Rpb24nOiBpZEZvcihpbmZvLmZ1bmN0aW9uKS5zZXJpYWxpemVkSWR9KTsKICB9CgogIHZpc2l0VHlwZWRlZihUeXBlZGVmSW5mbyBpbmZvKSA9PiBfdmlzaXRCYXNpY0luZm8oaW5mbykuLlsndHlwZSddID0gaW5mby50eXBlOwoKICB2aXNpdE91dHB1dChPdXRwdXRVbml0SW5mbyBpbmZvKSA9PiBfdmlzaXRCYXNpY0luZm8oaW5mbykKICAgIC4uWydmaWxlbmFtZSddID0gaW5mby5maWxlbmFtZQogICAgLi5bJ2ltcG9ydHMnXSA9IGluZm8uaW1wb3J0czsKCiAgT2JqZWN0IF9zZXJpYWxpemVDb2RlKExpc3Q8Q29kZVNwYW4+IGNvZGUpIHsKICAgIGlmIChpc0JhY2t3YXJkQ29tcGF0aWJsZSkgewogICAgICByZXR1cm4gY29kZS5tYXAoKGMpID0+IGMudGV4dCkuam9pbignXG4nKTsKICAgIH0KICAgIHJldHVybiBjb2RlCiAgICAgICAgLm1hcDxPYmplY3Q+KChjKSA9PiB7CiAgICAgICAgICAgICAgJ3N0YXJ0JzogYy5zdGFydCwKICAgICAgICAgICAgICAnZW5kJzogYy5lbmQsCiAgICAgICAgICAgICAgJ3RleHQnOiBjLnRleHQsCiAgICAgICAgICAgIH0pCiAgICAgICAgLnRvTGlzdCgpOwogIH0KfQoKY2xhc3MgQWxsSW5mb0pzb25Db2RlYyBleHRlbmRzIENvZGVjPEFsbEluZm8sIE1hcD4gewogIGZpbmFsIENvbnZlcnRlcjxBbGxJbmZvLCBNYXA+IGVuY29kZXI7CiAgZmluYWwgQ29udmVydGVyPE1hcCwgQWxsSW5mbz4gZGVjb2RlciA9IG5ldyBKc29uVG9BbGxJbmZvQ29udmVydGVyKCk7CgogIEFsbEluZm9Kc29uQ29kZWMoe2Jvb2wgaXNCYWNrd2FyZENvbXBhdGlibGU6IGZhbHNlfSkKICAgICAgOiBlbmNvZGVyID0gbmV3IEFsbEluZm9Ub0pzb25Db252ZXJ0ZXIoCiAgICAgICAgICAgIGlzQmFja3dhcmRDb21wYXRpYmxlOiBpc0JhY2t3YXJkQ29tcGF0aWJsZSk7Cn0KCmNsYXNzIElkIHsKICBmaW5hbCBJbmZvS2luZCBraW5kOwogIGZpbmFsIFN0cmluZyBpZDsKCiAgSWQodGhpcy5raW5kLCB0aGlzLmlkKTsKCiAgU3RyaW5nIGdldCBzZXJpYWxpemVkSWQgPT4gJyR7a2luZFRvU3RyaW5nKGtpbmQpfS8kaWQnOwp9CoJZAE5OPAFKARoXAS0YFAElOkwBIlBQQgEvFgEgJUxLB04dShNOHUwBTyceTAYSThxKHUwBKCIbHiogPwgIAT0oUAgBF08BNAEpH083KlA1SC5JDkcKCC8GARoTBAEtMQskHB0TUBMEAScuCxwuMR03Iy0nLScjDyYkCAYTBAEjLAscKTEcPCE3IyUPJCIIBhMEASMsEhwpKDEcHCwnKTMuLxUEASkvEiccMgQBJy4SHCkcEgQBJygxHEYwOjYwOi4lAU87KU0NKig7BgExJEMNJU8GATUmRw0nJTgGARgEAUYtIz4GJSgqKiIyMDIkHzwEASkvEhwpKDEcHCg4FU4nKiwUSC4vFQQBLEsBPSIqKCwvBAEnLhIcKTEcLgQBFR4gEwYzMiw4KzgrNik2KTksOCs7LggVCAQBKzAaQQYBGCgvHSYiJRMGAQ8EAgE9IjojNSsBPgEYIjMBDB8kJiESAQwgPCEjIS8qDUYGAR8MBi0lBAEyASU+PR40BhAEASw0MDQyLjQyDSAcIR8bIR8HBAEzQgEuPiElMCUUOgYBJyQQBAEzPipFCBAEAR8wMjwNHB4oSz8rSisHBAEnDTkZLThGPEA3My03KyEHBAEoECYnGRkHTikjPwZGThAEASchISwOJiYcHCAUJwoEASMhIU00LEMKBAEjJyFCKysbChgeJkYIBhMEAUBDAVAlLSsvMRU7IR8jJQkBMVEBKSEhQj4nNxZJKSsrG1AnCgQBJyFRBAFRATwjIgEvIDEGEB4gHB4PEwQCATUpSAE3LjkCAQsXEwEaAToCASlwYWNrYWdlOmRhcnQyanNfaW5mby9qc29uX2luZm9fY29kZWMuZGFydENzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvZGFydDJqc19pbmZvL2xpYi9iaW5hcnlfc2VyaWFsaXphdGlvbi5kYXJ0ucQvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEluZm8gc2VyaWFsaXphdGlvbiB0byBhIGJpbmFyeSBmb3JtLgovLy8KLy8vIFVubGlrZSB0aGUgSlNPTiBjb2RlYywgdGhpcyBzZXJpYWxpemF0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHN0cmVhbWVkLgoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwoKaW1wb3J0ICdzcmMvYmluYXJ5L3NpbmsuZGFydCc7CmltcG9ydCAnc3JjL2JpbmFyeS9zb3VyY2UuZGFydCc7CmltcG9ydCAnaW5mby5kYXJ0JzsKCnZvaWQgZW5jb2RlKEFsbEluZm8gaW5mbywgU2luazxMaXN0PGludD4+IHNpbmspIHsKICBuZXcgQmluYXJ5UHJpbnRlcihuZXcgQmluYXJ5U2luayhzaW5rKSkudmlzaXRBbGwoaW5mbyk7Cn0KCkFsbEluZm8gZGVjb2RlKExpc3Q8aW50PiBkYXRhKSB7CiAgcmV0dXJuIG5ldyBCaW5hcnlSZWFkZXIobmV3IEJpbmFyeVNvdXJjZShkYXRhKSkucmVhZEFsbCgpOwp9CgpjbGFzcyBCaW5hcnlQcmludGVyIGltcGxlbWVudHMgSW5mb1Zpc2l0b3I8dm9pZD4gewogIGZpbmFsIEJpbmFyeVNpbmsgc2luazsKCiAgQmluYXJ5UHJpbnRlcih0aGlzLnNpbmspOwoKICB2b2lkIHdyaXRlRGF0ZShEYXRlVGltZSBkYXRlKSB7CiAgICBzaW5rLndyaXRlU3RyaW5nKGRhdGUudG9Jc284NjAxU3RyaW5nKCkpOwogIH0KCiAgdm9pZCB3cml0ZUR1cmF0aW9uKER1cmF0aW9uIGR1cmF0aW9uKSB7CiAgICBzaW5rLndyaXRlSW50KGR1cmF0aW9uLmluTWljcm9zZWNvbmRzKTsKICB9CgogIHZvaWQgd3JpdGVJbmZvV2l0aEtpbmQoSW5mbyBpbmZvKSB7CiAgICBzaW5rLndyaXRlRW51bShpbmZvLmtpbmQpOwogICAgaW5mby5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHZpc2l0QWxsKEFsbEluZm8gaW5mbykgewogICAgc2luay53cml0ZUludChpbmZvLnZlcnNpb24pOwogICAgc2luay53cml0ZUludChpbmZvLm1pbm9yVmVyc2lvbik7CiAgICBzaW5rLndyaXRlTGlzdChpbmZvLmxpYnJhcmllcywgdmlzaXRMaWJyYXJ5KTsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHN5bnRoZXNpemUgdGhlIGZvbGxvd2luZyBsaXN0cyBpbnN0ZWFkIG9mIHNlcmlhbGl6aW5nIHRoZQogICAgLy8gdmFsdWVzIGFnYWluLgogICAgc2luay53cml0ZUxpc3QoaW5mby5jbGFzc2VzLCB2aXNpdENsYXNzKTsKICAgIHNpbmsud3JpdGVMaXN0KGluZm8uZnVuY3Rpb25zLCB2aXNpdEZ1bmN0aW9uKTsKICAgIHNpbmsud3JpdGVMaXN0KGluZm8udHlwZWRlZnMsIHZpc2l0VHlwZWRlZik7CiAgICBzaW5rLndyaXRlTGlzdChpbmZvLmZpZWxkcywgdmlzaXRGaWVsZCk7CiAgICBzaW5rLndyaXRlTGlzdChpbmZvLmNvbnN0YW50cywgdmlzaXRDb25zdGFudCk7CiAgICBzaW5rLndyaXRlTGlzdChpbmZvLmNsb3N1cmVzLCB2aXNpdENsb3N1cmUpOwoKICAgIHZvaWQgd3JpdGVEZXBlbmRlbmNpZXMoQ29kZUluZm8gaW5mbykgewogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLnVzZXMsIF93cml0ZURlcGVuZGVuY3lJbmZvKTsKICAgIH0KCiAgICBpbmZvLmZpZWxkcy5mb3JFYWNoKHdyaXRlRGVwZW5kZW5jaWVzKTsKICAgIGluZm8uZnVuY3Rpb25zLmZvckVhY2god3JpdGVEZXBlbmRlbmNpZXMpOwoKICAgIHNpbmsud3JpdGVJbnQoaW5mby5kZXBlbmRlbmNpZXMubGVuZ3RoKTsKICAgIGluZm8uZGVwZW5kZW5jaWVzLmZvckVhY2goKEluZm8ga2V5LCBMaXN0PEluZm8+IHZhbHVlcykgewogICAgICB3cml0ZUluZm9XaXRoS2luZChrZXkpOwogICAgICBzaW5rLndyaXRlTGlzdCh2YWx1ZXMsIHdyaXRlSW5mb1dpdGhLaW5kKTsKICAgIH0pOwogICAgc2luay53cml0ZUxpc3QoaW5mby5vdXRwdXRVbml0cywgdmlzaXRPdXRwdXQpOwogICAgc2luay53cml0ZVN0cmluZyhqc29uRW5jb2RlKGluZm8uZGVmZXJyZWRGaWxlcykpOwogICAgdmlzaXRQcm9ncmFtKGluZm8ucHJvZ3JhbSk7CiAgICBzaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIHZpc2l0UHJvZ3JhbShQcm9ncmFtSW5mbyBpbmZvKSB7CiAgICB2aXNpdEZ1bmN0aW9uKGluZm8uZW50cnlwb2ludCk7CiAgICBzaW5rLndyaXRlSW50KGluZm8uc2l6ZSk7CiAgICBzaW5rLndyaXRlU3RyaW5nT3JOdWxsKGluZm8uZGFydDJqc1ZlcnNpb24pOwogICAgd3JpdGVEYXRlKGluZm8uY29tcGlsYXRpb25Nb21lbnQpOwogICAgd3JpdGVEdXJhdGlvbihpbmZvLmNvbXBpbGF0aW9uRHVyYXRpb24pOwogICAgLy8gTm90ZTogd2UgZG9uJ3QgcmVjb3JkIHRoZSAndG9Kc29uRHVyYXRpb24nIGZpZWxkLiBDb25zaWRlciBkZWxldGluZyBpdD8KICAgIHdyaXRlRHVyYXRpb24oaW5mby5kdW1wSW5mb0R1cmF0aW9uKTsKICAgIHNpbmsud3JpdGVCb29sKGluZm8ubm9TdWNoTWV0aG9kRW5hYmxlZCk7CiAgICBzaW5rLndyaXRlQm9vbChpbmZvLmlzUnVudGltZVR5cGVVc2VkKTsKICAgIHNpbmsud3JpdGVCb29sKGluZm8uaXNJc29sYXRlSW5Vc2UpOwogICAgc2luay53cml0ZUJvb2woaW5mby5pc0Z1bmN0aW9uQXBwbHlVc2VkKTsKICAgIHNpbmsud3JpdGVCb29sKGluZm8uaXNNaXJyb3JzVXNlZCk7CiAgICBzaW5rLndyaXRlQm9vbChpbmZvLm1pbmlmaWVkKTsKICB9CgogIHZvaWQgX3Zpc2l0QmFzaWNJbmZvKEJhc2ljSW5mbyBpbmZvKSB7CiAgICBzaW5rLndyaXRlU3RyaW5nT3JOdWxsKGluZm8ubmFtZSk7CiAgICBzaW5rLndyaXRlSW50KGluZm8uc2l6ZSk7CiAgICBzaW5rLndyaXRlU3RyaW5nT3JOdWxsKGluZm8uY292ZXJhZ2VJZCk7CiAgICBfd3JpdGVPdXRwdXRPck51bGwoaW5mby5vdXRwdXRVbml0KTsKICAgIC8vIE5vdGU6IHBhcmVudC1wb2ludGVycyBhcmUgbm90IHNlcmlhbGl6ZWQsIHRoZXkgZ2V0IGRlZHVjZWQgZHVyaW5nIGRlc2VyaWFsaXphdGlvbi4KICB9CgogIHZvaWQgdmlzaXRMaWJyYXJ5KExpYnJhcnlJbmZvIGxpYnJhcnkpIHsKICAgIHNpbmsud3JpdGVDYWNoZWQobGlicmFyeSwgKExpYnJhcnlJbmZvIGluZm8pIHsKICAgICAgc2luay53cml0ZVVyaShpbmZvLnVyaSk7CiAgICAgIF92aXNpdEJhc2ljSW5mbyhpbmZvKTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby50b3BMZXZlbEZ1bmN0aW9ucywgdmlzaXRGdW5jdGlvbik7CiAgICAgIHNpbmsud3JpdGVMaXN0KGluZm8udG9wTGV2ZWxWYXJpYWJsZXMsIHZpc2l0RmllbGQpOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLmNsYXNzZXMsIHZpc2l0Q2xhc3MpOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLnR5cGVkZWZzLCB2aXNpdFR5cGVkZWYpOwogICAgfSk7CiAgfQoKICB2b2lkIHZpc2l0Q2xhc3MoQ2xhc3NJbmZvIGNscykgewogICAgc2luay53cml0ZUNhY2hlZChjbHMsIChDbGFzc0luZm8gaW5mbykgewogICAgICBfdmlzaXRCYXNpY0luZm8oaW5mbyk7CiAgICAgIHNpbmsud3JpdGVCb29sKGluZm8uaXNBYnN0cmFjdCk7CiAgICAgIHNpbmsud3JpdGVMaXN0KGluZm8uZmllbGRzLCB2aXNpdEZpZWxkKTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby5mdW5jdGlvbnMsIHZpc2l0RnVuY3Rpb24pOwogICAgfSk7CiAgfQoKICB2b2lkIHZpc2l0RmllbGQoRmllbGRJbmZvIGZpZWxkKSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkKGZpZWxkLCAoRmllbGRJbmZvIGluZm8pIHsKICAgICAgX3Zpc2l0QmFzaWNJbmZvKGluZm8pOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLmNsb3N1cmVzLCB2aXNpdENsb3N1cmUpOwogICAgICBzaW5rLndyaXRlU3RyaW5nKGluZm8uaW5mZXJyZWRUeXBlKTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby5jb2RlLCBfdmlzaXRDb2RlU3Bhbik7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcoaW5mby50eXBlKTsKICAgICAgc2luay53cml0ZUJvb2woaW5mby5pc0NvbnN0KTsKICAgICAgaWYgKGluZm8uaXNDb25zdCkgewogICAgICAgIF93cml0ZUNvbnN0YW50T3JOdWxsKGluZm8uaW5pdGlhbGl6ZXIpOwogICAgICB9CiAgICB9KTsKICB9CgogIF92aXNpdENvZGVTcGFuKENvZGVTcGFuIGNvZGUpIHsKICAgIHNpbmsud3JpdGVJbnRPck51bGwoY29kZS5zdGFydCk7CiAgICBzaW5rLndyaXRlSW50T3JOdWxsKGNvZGUuZW5kKTsKICAgIHNpbmsud3JpdGVTdHJpbmdPck51bGwoY29kZS50ZXh0KTsKICB9CgogIHZvaWQgX3dyaXRlQ29uc3RhbnRPck51bGwoQ29uc3RhbnRJbmZvIGluZm8pIHsKICAgIHNpbmsud3JpdGVCb29sKGluZm8gIT0gbnVsbCk7CiAgICBpZiAoaW5mbyAhPSBudWxsKSB7CiAgICAgIHZpc2l0Q29uc3RhbnQoaW5mbyk7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0Q29uc3RhbnQoQ29uc3RhbnRJbmZvIGNvbnN0YW50KSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkKGNvbnN0YW50LCAoQ29uc3RhbnRJbmZvIGluZm8pIHsKICAgICAgX3Zpc2l0QmFzaWNJbmZvKGluZm8pOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLmNvZGUsIF92aXNpdENvZGVTcGFuKTsKICAgIH0pOwogIH0KCiAgdm9pZCBfdmlzaXRGdW5jdGlvbk1vZGlmaWVycyhGdW5jdGlvbk1vZGlmaWVycyBtb2RzKSB7CiAgICBpbnQgdmFsdWUgPSAwOwogICAgaWYgKG1vZHMuaXNTdGF0aWMpIHZhbHVlIHw9IF9zdGF0aWNNYXNrOwogICAgaWYgKG1vZHMuaXNDb25zdCkgdmFsdWUgfD0gX2NvbnN0TWFzazsKICAgIGlmIChtb2RzLmlzRmFjdG9yeSkgdmFsdWUgfD0gX2ZhY3RvcnlNYXNrOwogICAgaWYgKG1vZHMuaXNFeHRlcm5hbCkgdmFsdWUgfD0gX2V4dGVybmFsTWFzazsKICAgIHNpbmsud3JpdGVJbnQodmFsdWUpOwogIH0KCiAgdm9pZCBfdmlzaXRQYXJhbWV0ZXJJbmZvKFBhcmFtZXRlckluZm8gaW5mbykgewogICAgc2luay53cml0ZVN0cmluZyhpbmZvLm5hbWUpOwogICAgc2luay53cml0ZVN0cmluZyhpbmZvLnR5cGUpOwogICAgc2luay53cml0ZVN0cmluZyhpbmZvLmRlY2xhcmVkVHlwZSk7CiAgfQoKICB2b2lkIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25JbmZvIGZ1bmN0aW9uKSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkKGZ1bmN0aW9uLCAoRnVuY3Rpb25JbmZvIGluZm8pIHsKICAgICAgX3Zpc2l0QmFzaWNJbmZvKGluZm8pOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLmNsb3N1cmVzLCB2aXNpdENsb3N1cmUpOwogICAgICBfdmlzaXRGdW5jdGlvbk1vZGlmaWVycyhpbmZvLm1vZGlmaWVycyk7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcoaW5mby5yZXR1cm5UeXBlKTsKICAgICAgc2luay53cml0ZVN0cmluZyhpbmZvLmluZmVycmVkUmV0dXJuVHlwZSk7CiAgICAgIHNpbmsud3JpdGVMaXN0KGluZm8ucGFyYW1ldGVycywgX3Zpc2l0UGFyYW1ldGVySW5mbyk7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcoaW5mby5zaWRlRWZmZWN0cyk7CiAgICAgIHNpbmsud3JpdGVJbnRPck51bGwoaW5mby5pbmxpbmVkQ291bnQpOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLmNvZGUsIF92aXNpdENvZGVTcGFuKTsKICAgICAgc2luay53cml0ZVN0cmluZyhpbmZvLnR5cGUpOwogICAgfSk7CiAgfQoKICB2b2lkIF93cml0ZURlcGVuZGVuY3lJbmZvKERlcGVuZGVuY3lJbmZvIGluZm8pIHsKICAgIHdyaXRlSW5mb1dpdGhLaW5kKGluZm8udGFyZ2V0KTsKICAgIHNpbmsud3JpdGVTdHJpbmdPck51bGwoaW5mby5tYXNrKTsKICB9CgogIHZvaWQgdmlzaXRDbG9zdXJlKENsb3N1cmVJbmZvIGNsb3N1cmUpIHsKICAgIHNpbmsud3JpdGVDYWNoZWQoY2xvc3VyZSwgKENsb3N1cmVJbmZvIGluZm8pIHsKICAgICAgX3Zpc2l0QmFzaWNJbmZvKGluZm8pOwogICAgICB2aXNpdEZ1bmN0aW9uKGluZm8uZnVuY3Rpb24pOwogICAgfSk7CiAgfQoKICB2b2lkIHZpc2l0VHlwZWRlZihUeXBlZGVmSW5mbyB0eXBlZGVmKSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkKHR5cGVkZWYsIChUeXBlZGVmSW5mbyBpbmZvKSB7CiAgICAgIF92aXNpdEJhc2ljSW5mbyhpbmZvKTsKICAgICAgc2luay53cml0ZVN0cmluZyhpbmZvLnR5cGUpOwogICAgfSk7CiAgfQoKICB2b2lkIF93cml0ZU91dHB1dE9yTnVsbChPdXRwdXRVbml0SW5mbyBpbmZvKSB7CiAgICBzaW5rLndyaXRlQm9vbChpbmZvICE9IG51bGwpOwogICAgaWYgKGluZm8gIT0gbnVsbCkgewogICAgICB2aXNpdE91dHB1dChpbmZvKTsKICAgIH0KICB9CgogIHZvaWQgdmlzaXRPdXRwdXQoT3V0cHV0VW5pdEluZm8gb3V0cHV0KSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkKG91dHB1dCwgKE91dHB1dFVuaXRJbmZvIGluZm8pIHsKICAgICAgX3Zpc2l0QmFzaWNJbmZvKGluZm8pOwogICAgICBzaW5rLndyaXRlU3RyaW5nT3JOdWxsKGluZm8uZmlsZW5hbWUpOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLmltcG9ydHMsIHNpbmsud3JpdGVTdHJpbmcpOwogICAgfSk7CiAgfQp9CgpjbGFzcyBCaW5hcnlSZWFkZXIgewogIGZpbmFsIEJpbmFyeVNvdXJjZSBzb3VyY2U7CiAgQmluYXJ5UmVhZGVyKHRoaXMuc291cmNlKTsKCiAgRGF0ZVRpbWUgcmVhZERhdGUoKSB7CiAgICByZXR1cm4gRGF0ZVRpbWUucGFyc2Uoc291cmNlLnJlYWRTdHJpbmcoKSk7CiAgfQoKICBEdXJhdGlvbiByZWFkRHVyYXRpb24oKSB7CiAgICByZXR1cm4gbmV3IER1cmF0aW9uKG1pY3Jvc2Vjb25kczogc291cmNlLnJlYWRJbnQoKSk7CiAgfQoKICBJbmZvIHJlYWRJbmZvV2l0aEtpbmQoKSB7CiAgICBJbmZvS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKEluZm9LaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBJbmZvS2luZC5saWJyYXJ5OgogICAgICAgIHJldHVybiByZWFkTGlicmFyeSgpOwogICAgICBjYXNlIEluZm9LaW5kLmNsYXp6OgogICAgICAgIHJldHVybiByZWFkQ2xhc3MoKTsKICAgICAgY2FzZSBJbmZvS2luZC5mdW5jdGlvbjoKICAgICAgICByZXR1cm4gcmVhZEZ1bmN0aW9uKCk7CiAgICAgIGNhc2UgSW5mb0tpbmQuZmllbGQ6CiAgICAgICAgcmV0dXJuIHJlYWRGaWVsZCgpOwogICAgICBjYXNlIEluZm9LaW5kLmNvbnN0YW50OgogICAgICAgIHJldHVybiByZWFkQ29uc3RhbnQoKTsKICAgICAgY2FzZSBJbmZvS2luZC5vdXRwdXRVbml0OgogICAgICAgIHJldHVybiByZWFkT3V0cHV0KCk7CiAgICAgIGNhc2UgSW5mb0tpbmQudHlwZWRlZjoKICAgICAgICByZXR1cm4gcmVhZFR5cGVkZWYoKTsKICAgICAgY2FzZSBJbmZvS2luZC5jbG9zdXJlOgogICAgICAgIHJldHVybiByZWFkQ2xvc3VyZSgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBBbGxJbmZvIHJlYWRBbGwoKSB7CiAgICB2YXIgaW5mbyA9IG5ldyBBbGxJbmZvKCk7CiAgICBpbnQgdmVyc2lvbiA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBpbnQgbWlub3JWZXJzaW9uID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGlmIChpbmZvLnZlcnNpb24gIT0gdmVyc2lvbiB8fCBpbmZvLm1pbm9yVmVyc2lvbiAhPSBtaW5vclZlcnNpb24pIHsKICAgICAgcHJpbnQoIndhcm5pbmc6IGRhdGEgd2FzIGVuY29kZWQgd2l0aCBmb3JtYXQgdmVyc2lvbiAiCiAgICAgICAgICAiJHZlcnNpb24uJG1pbm9yVmVyc2lvbiwgYnV0IGRlY29kZWQgd2l0aCAiCiAgICAgICAgICAiJHtpbmZvLnZlcnNpb259LiR7aW5mby5taW5vclZlcnNpb259Iik7CiAgICB9CiAgICBpbmZvLmxpYnJhcmllcyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkTGlicmFyeSk7CiAgICBpbmZvLmNsYXNzZXMgPSBzb3VyY2UucmVhZExpc3QocmVhZENsYXNzKTsKICAgIGluZm8uZnVuY3Rpb25zID0gc291cmNlLnJlYWRMaXN0KHJlYWRGdW5jdGlvbik7CiAgICBpbmZvLnR5cGVkZWZzID0gc291cmNlLnJlYWRMaXN0KHJlYWRUeXBlZGVmKTsKICAgIGluZm8uZmllbGRzID0gc291cmNlLnJlYWRMaXN0KHJlYWRGaWVsZCk7CiAgICBpbmZvLmNvbnN0YW50cyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkQ29uc3RhbnQpOwogICAgaW5mby5jbG9zdXJlcyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkQ2xvc3VyZSk7CgogICAgdm9pZCByZWFkRGVwZW5kZW5jaWVzKENvZGVJbmZvIGluZm8pIHsKICAgICAgaW5mby51c2VzID0gc291cmNlLnJlYWRMaXN0KF9yZWFkRGVwZW5kZW5jeUluZm8pOwogICAgfQoKICAgIGluZm8uZmllbGRzLmZvckVhY2gocmVhZERlcGVuZGVuY2llcyk7CiAgICBpbmZvLmZ1bmN0aW9ucy5mb3JFYWNoKHJlYWREZXBlbmRlbmNpZXMpOwoKICAgIGludCBkZXBlbmRlbmNpZXNUb3RhbCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICB3aGlsZSAoZGVwZW5kZW5jaWVzVG90YWwgPiAwKSB7CiAgICAgIEluZm8ga2V5ID0gcmVhZEluZm9XaXRoS2luZCgpOwogICAgICBMaXN0PEluZm8+IHZhbHVlcyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkSW5mb1dpdGhLaW5kKTsKICAgICAgaW5mby5kZXBlbmRlbmNpZXNba2V5XSA9IHZhbHVlczsKICAgICAgZGVwZW5kZW5jaWVzVG90YWwtLTsKICAgIH0KCiAgICBpbmZvLm91dHB1dFVuaXRzID0gc291cmNlLnJlYWRMaXN0KHJlYWRPdXRwdXQpOwoKICAgIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIGR5bmFtaWM+PiBtYXAgPQogICAgICAgIGpzb25EZWNvZGUoc291cmNlLnJlYWRTdHJpbmcoKSkuY2FzdDxTdHJpbmcsIE1hcDxTdHJpbmcsIGR5bmFtaWM+PigpOwogICAgZm9yIChmaW5hbCBsaWJyYXJ5IGluIG1hcC52YWx1ZXMpIHsKICAgICAgaWYgKGxpYnJhcnlbJ2ltcG9ydHMnXSAhPSBudWxsKSB7CiAgICAgICAgLy8gVGhlIGltcG9ydE1hcCBuZWVkcyB0byBiZSB0eXBlZCBhcyA8U3RyaW5nLCBMaXN0PFN0cmluZz4+LCBidXQgdGhlCiAgICAgICAgLy8ganNvbiBwYXJzZXIgcHJvZHVjZXMgPFN0cmluZywgZHluYW1pYz4uCiAgICAgICAgZmluYWwgaW1wb3J0TWFwID0gbGlicmFyeVsnaW1wb3J0cyddIGFzIE1hcDxTdHJpbmcsIGR5bmFtaWM+OwogICAgICAgIGltcG9ydE1hcC5mb3JFYWNoKChwcmVmaXgsIGZpbGVzKSB7CiAgICAgICAgICBpbXBvcnRNYXBbcHJlZml4XSA9IChmaWxlcyBhcyBMaXN0PGR5bmFtaWM+KS5jYXN0PFN0cmluZz4oKTsKICAgICAgICB9KTsKICAgICAgICBsaWJyYXJ5WydpbXBvcnRzJ10gPSBpbXBvcnRNYXAuY2FzdDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4oKTsKICAgICAgfQogICAgfQogICAgaW5mby5kZWZlcnJlZEZpbGVzID0gbWFwOwogICAgaW5mby5wcm9ncmFtID0gcmVhZFByb2dyYW0oKTsKICAgIHJldHVybiBpbmZvOwogIH0KCiAgUHJvZ3JhbUluZm8gcmVhZFByb2dyYW0oKSB7CiAgICB2YXIgaW5mbyA9IG5ldyBQcm9ncmFtSW5mbygpOwogICAgaW5mby5lbnRyeXBvaW50ID0gcmVhZEZ1bmN0aW9uKCk7CiAgICBpbmZvLnNpemUgPSBzb3VyY2UucmVhZEludCgpOwogICAgaW5mby5kYXJ0MmpzVmVyc2lvbiA9IHNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsKCk7CiAgICBpbmZvLmNvbXBpbGF0aW9uTW9tZW50ID0gcmVhZERhdGUoKTsKICAgIGluZm8uY29tcGlsYXRpb25EdXJhdGlvbiA9IHJlYWREdXJhdGlvbigpOwogICAgaW5mby50b0pzb25EdXJhdGlvbiA9IG5ldyBEdXJhdGlvbihtaWNyb3NlY29uZHM6IDApOwogICAgaW5mby5kdW1wSW5mb0R1cmF0aW9uID0gcmVhZER1cmF0aW9uKCk7CiAgICBpbmZvLm5vU3VjaE1ldGhvZEVuYWJsZWQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGluZm8uaXNSdW50aW1lVHlwZVVzZWQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGluZm8uaXNJc29sYXRlSW5Vc2UgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGluZm8uaXNGdW5jdGlvbkFwcGx5VXNlZCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgaW5mby5pc01pcnJvcnNVc2VkID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpbmZvLm1pbmlmaWVkID0gc291cmNlLnJlYWRCb29sKCk7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIHZvaWQgX3JlYWRCYXNpY0luZm8oQmFzaWNJbmZvIGluZm8pIHsKICAgIGluZm8ubmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsKCk7CiAgICBpbmZvLnNpemUgPSBzb3VyY2UucmVhZEludCgpOwogICAgaW5mby5jb3ZlcmFnZUlkID0gc291cmNlLnJlYWRTdHJpbmdPck51bGwoKTsKICAgIGluZm8ub3V0cHV0VW5pdCA9IF9yZWFkT3V0cHV0T3JOdWxsKCk7CiAgICAvLyBOb3RlOiBwYXJlbnQgcG9pbnRlcnMgYXJlIGFkZGVkIHdoZW4gZGVzZXJpYWxpemluZyBwYXJlbnQgbm9kZXMuCiAgfQoKICBMaWJyYXJ5SW5mbyByZWFkTGlicmFyeSgpID0+IHNvdXJjZS5yZWFkQ2FjaGVkPExpYnJhcnlJbmZvPigoKSB7CiAgICAgICAgTGlicmFyeUluZm8gaW5mbyA9IG5ldyBMaWJyYXJ5SW5mby5pbnRlcm5hbCgpOwogICAgICAgIGluZm8udXJpID0gc291cmNlLnJlYWRVcmkoKTsKICAgICAgICBfcmVhZEJhc2ljSW5mbyhpbmZvKTsKICAgICAgICBpbmZvLnRvcExldmVsRnVuY3Rpb25zID0gc291cmNlLnJlYWRMaXN0KHJlYWRGdW5jdGlvbik7CiAgICAgICAgaW5mby50b3BMZXZlbFZhcmlhYmxlcyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkRmllbGQpOwogICAgICAgIGluZm8uY2xhc3NlcyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkQ2xhc3MpOwogICAgICAgIGluZm8udHlwZWRlZnMgPSBzb3VyY2UucmVhZExpc3QocmVhZFR5cGVkZWYpOwoKICAgICAgICBzZXRQYXJlbnQoQmFzaWNJbmZvIGNoaWxkKSA9PiBjaGlsZC5wYXJlbnQgPSBpbmZvOwogICAgICAgIGluZm8udG9wTGV2ZWxGdW5jdGlvbnMuZm9yRWFjaChzZXRQYXJlbnQpOwogICAgICAgIGluZm8udG9wTGV2ZWxWYXJpYWJsZXMuZm9yRWFjaChzZXRQYXJlbnQpOwogICAgICAgIGluZm8uY2xhc3Nlcy5mb3JFYWNoKHNldFBhcmVudCk7CiAgICAgICAgaW5mby50eXBlZGVmcy5mb3JFYWNoKHNldFBhcmVudCk7CiAgICAgICAgcmV0dXJuIGluZm87CiAgICAgIH0pOwoKICBDbGFzc0luZm8gcmVhZENsYXNzKCkgPT4gc291cmNlLnJlYWRDYWNoZWQ8Q2xhc3NJbmZvPigoKSB7CiAgICAgICAgQ2xhc3NJbmZvIGluZm8gPSBuZXcgQ2xhc3NJbmZvLmludGVybmFsKCk7CiAgICAgICAgX3JlYWRCYXNpY0luZm8oaW5mbyk7CiAgICAgICAgaW5mby5pc0Fic3RyYWN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICAgICAgaW5mby5maWVsZHMgPSBzb3VyY2UucmVhZExpc3QocmVhZEZpZWxkKTsKICAgICAgICBpbmZvLmZ1bmN0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkRnVuY3Rpb24pOwoKICAgICAgICBzZXRQYXJlbnQoQmFzaWNJbmZvIGNoaWxkKSA9PiBjaGlsZC5wYXJlbnQgPSBpbmZvOwogICAgICAgIGluZm8uZmllbGRzLmZvckVhY2goc2V0UGFyZW50KTsKICAgICAgICBpbmZvLmZ1bmN0aW9ucy5mb3JFYWNoKHNldFBhcmVudCk7CiAgICAgICAgcmV0dXJuIGluZm87CiAgICAgIH0pOwoKICBGaWVsZEluZm8gcmVhZEZpZWxkKCkgPT4gc291cmNlLnJlYWRDYWNoZWQ8RmllbGRJbmZvPigoKSB7CiAgICAgICAgRmllbGRJbmZvIGluZm8gPSBuZXcgRmllbGRJbmZvLmludGVybmFsKCk7CiAgICAgICAgX3JlYWRCYXNpY0luZm8oaW5mbyk7CiAgICAgICAgaW5mby5jbG9zdXJlcyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkQ2xvc3VyZSk7CiAgICAgICAgaW5mby5pbmZlcnJlZFR5cGUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIGluZm8uY29kZSA9IHNvdXJjZS5yZWFkTGlzdChfcmVhZENvZGVTcGFuKTsKICAgICAgICBpbmZvLnR5cGUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIGluZm8uaXNDb25zdCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICAgIGlmIChpbmZvLmlzQ29uc3QpIHsKICAgICAgICAgIGluZm8uaW5pdGlhbGl6ZXIgPSBfcmVhZENvbnN0YW50T3JOdWxsKCk7CiAgICAgICAgfQogICAgICAgIGluZm8uY2xvc3VyZXMuZm9yRWFjaCgoYykgPT4gYy5wYXJlbnQgPSBpbmZvKTsKICAgICAgICByZXR1cm4gaW5mbzsKICAgICAgfSk7CgogIENvZGVTcGFuIF9yZWFkQ29kZVNwYW4oKSB7CiAgICByZXR1cm4gbmV3IENvZGVTcGFuKCkKICAgICAgLi5zdGFydCA9IHNvdXJjZS5yZWFkSW50T3JOdWxsKCkKICAgICAgLi5lbmQgPSBzb3VyY2UucmVhZEludE9yTnVsbCgpCiAgICAgIC4udGV4dCA9IHNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsKCk7CiAgfQoKICBDb25zdGFudEluZm8gX3JlYWRDb25zdGFudE9yTnVsbCgpIHsKICAgIGJvb2wgaGFzT3V0cHV0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpZiAoaGFzT3V0cHV0KSByZXR1cm4gcmVhZENvbnN0YW50KCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIENvbnN0YW50SW5mbyByZWFkQ29uc3RhbnQoKSA9PiBzb3VyY2UucmVhZENhY2hlZDxDb25zdGFudEluZm8+KCgpIHsKICAgICAgICBDb25zdGFudEluZm8gaW5mbyA9IG5ldyBDb25zdGFudEluZm8uaW50ZXJuYWwoKTsKICAgICAgICBfcmVhZEJhc2ljSW5mbyhpbmZvKTsKICAgICAgICBpbmZvLmNvZGUgPSBzb3VyY2UucmVhZExpc3QoX3JlYWRDb2RlU3Bhbik7CiAgICAgICAgcmV0dXJuIGluZm87CiAgICAgIH0pOwoKICBGdW5jdGlvbk1vZGlmaWVycyBfcmVhZEZ1bmN0aW9uTW9kaWZpZXJzKCkgewogICAgaW50IHZhbHVlID0gc291cmNlLnJlYWRJbnQoKTsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25Nb2RpZmllcnMoCiAgICAgICAgaXNTdGF0aWM6IHZhbHVlICYgX3N0YXRpY01hc2sgIT0gMCwKICAgICAgICBpc0NvbnN0OiB2YWx1ZSAmIF9jb25zdE1hc2sgIT0gMCwKICAgICAgICBpc0ZhY3Rvcnk6IHZhbHVlICYgX2ZhY3RvcnlNYXNrICE9IDAsCiAgICAgICAgaXNFeHRlcm5hbDogdmFsdWUgJiBfZXh0ZXJuYWxNYXNrICE9IDApOwogIH0KCiAgUGFyYW1ldGVySW5mbyBfcmVhZFBhcmFtZXRlckluZm8oKSB7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlckluZm8oCiAgICAgICAgc291cmNlLnJlYWRTdHJpbmcoKSwgc291cmNlLnJlYWRTdHJpbmcoKSwgc291cmNlLnJlYWRTdHJpbmcoKSk7CiAgfQoKICBGdW5jdGlvbkluZm8gcmVhZEZ1bmN0aW9uKCkgPT4gc291cmNlLnJlYWRDYWNoZWQ8RnVuY3Rpb25JbmZvPigoKSB7CiAgICAgICAgRnVuY3Rpb25JbmZvIGluZm8gPSBuZXcgRnVuY3Rpb25JbmZvLmludGVybmFsKCk7CiAgICAgICAgX3JlYWRCYXNpY0luZm8oaW5mbyk7CiAgICAgICAgaW5mby5jbG9zdXJlcyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkQ2xvc3VyZSk7CiAgICAgICAgaW5mby5tb2RpZmllcnMgPSBfcmVhZEZ1bmN0aW9uTW9kaWZpZXJzKCk7CiAgICAgICAgaW5mby5yZXR1cm5UeXBlID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICBpbmZvLmluZmVycmVkUmV0dXJuVHlwZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgaW5mby5wYXJhbWV0ZXJzID0gc291cmNlLnJlYWRMaXN0KF9yZWFkUGFyYW1ldGVySW5mbyk7CiAgICAgICAgaW5mby5zaWRlRWZmZWN0cyA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgaW5mby5pbmxpbmVkQ291bnQgPSBzb3VyY2UucmVhZEludE9yTnVsbCgpOwogICAgICAgIGluZm8uY29kZSA9IHNvdXJjZS5yZWFkTGlzdChfcmVhZENvZGVTcGFuKTsKICAgICAgICBpbmZvLnR5cGUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIGluZm8uY2xvc3VyZXMuZm9yRWFjaCgoYykgPT4gYy5wYXJlbnQgPSBpbmZvKTsKICAgICAgICByZXR1cm4gaW5mbzsKICAgICAgfSk7CgogIERlcGVuZGVuY3lJbmZvIF9yZWFkRGVwZW5kZW5jeUluZm8oKSA9PgogICAgICBuZXcgRGVwZW5kZW5jeUluZm8ocmVhZEluZm9XaXRoS2luZCgpLCBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpKTsKCiAgQ2xvc3VyZUluZm8gcmVhZENsb3N1cmUoKSA9PiBzb3VyY2UucmVhZENhY2hlZDxDbG9zdXJlSW5mbz4oKCkgewogICAgICAgIENsb3N1cmVJbmZvIGluZm8gPSBuZXcgQ2xvc3VyZUluZm8uaW50ZXJuYWwoKTsKICAgICAgICBfcmVhZEJhc2ljSW5mbyhpbmZvKTsKICAgICAgICBpbmZvLmZ1bmN0aW9uID0gcmVhZEZ1bmN0aW9uKCk7CiAgICAgICAgaW5mby5mdW5jdGlvbi5wYXJlbnQgPSBpbmZvOwogICAgICAgIHJldHVybiBpbmZvOwogICAgICB9KTsKCiAgVHlwZWRlZkluZm8gcmVhZFR5cGVkZWYoKSA9PiBzb3VyY2UucmVhZENhY2hlZDxUeXBlZGVmSW5mbz4oKCkgewogICAgICAgIFR5cGVkZWZJbmZvIGluZm8gPSBuZXcgVHlwZWRlZkluZm8uaW50ZXJuYWwoKTsKICAgICAgICBfcmVhZEJhc2ljSW5mbyhpbmZvKTsKICAgICAgICBpbmZvLnR5cGUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICB9KTsKCiAgT3V0cHV0VW5pdEluZm8gX3JlYWRPdXRwdXRPck51bGwoKSB7CiAgICBib29sIGhhc091dHB1dCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgaWYgKGhhc091dHB1dCkgcmV0dXJuIHJlYWRPdXRwdXQoKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgT3V0cHV0VW5pdEluZm8gcmVhZE91dHB1dCgpID0+IHNvdXJjZS5yZWFkQ2FjaGVkPE91dHB1dFVuaXRJbmZvPigoKSB7CiAgICAgICAgT3V0cHV0VW5pdEluZm8gaW5mbyA9IG5ldyBPdXRwdXRVbml0SW5mby5pbnRlcm5hbCgpOwogICAgICAgIF9yZWFkQmFzaWNJbmZvKGluZm8pOwogICAgICAgIGluZm8uZmlsZW5hbWUgPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogICAgICAgIGluZm8uaW1wb3J0cyA9IHNvdXJjZS5yZWFkTGlzdChzb3VyY2UucmVhZFN0cmluZyk7CiAgICAgICAgcmV0dXJuIGluZm87CiAgICAgIH0pOwp9Cgpjb25zdCBpbnQgX3N0YXRpY01hc2sgPSAxIDw8IDM7CmNvbnN0IGludCBfY29uc3RNYXNrID0gMSA8PCAyOwpjb25zdCBpbnQgX2ZhY3RvcnlNYXNrID0gMSA8PCAxOwpjb25zdCBpbnQgX2V4dGVybmFsTWFzayA9IDEgPDwgMDsKgcwATk48ASkESgEXAR8hFAEyOgIBIT0CATMZARwBIi4EASosBAEmHxcEASAhJjJQFS4zMS0zMQEsNwYBLC8BLT4eMQgzNiASBAEoJB4xJy1PKi4sKS4oIwQBKSceLSlaBAErMx8dPTowMwgEASMtHScvNQgEASUvHTMrMSMkGjAICAQBIiUjJwQBMSIYGwYEAS41HTEIBAE5Ey0rLzEaBAExISEpBAEuNR0zLykxPCouMSMIBAEzJCcEASszHSQIBAErMx0jCAQBMSIYGQYEASw1HS02CAQCARUdHQEYMAQBHDkEARw2FB0eGxweHxscHh8gHR0eHR4GEQQBFh4kKUg9NjMGMy80Mi40MgErOAYBKy4BLiQlPScbBgE0ASxOKChOM0YsRwxFCAYeIhEEAR4iJiI1KS85LDIwLTIsJxEEASgrIjErSAQBQzclHkA9MzYBOzMzKSoVCgE9Mx4tMjgBOygrFQoBPTMeNjE0KSocNAo3FQoBHRonJSoEAScoKhEEAUY5HjQVCgEvIiIsKi4xBAEnHkgEAUY5HjYzLzc/MDQ0KTcVCgEqSQFDNx4oJRUKAUM3HikKAScoKBEEAUg9HjM7FQoCASAfISIBLnBhY2thZ2U6ZGFydDJqc19pbmZvL2JpbmFyeV9zZXJpYWxpemF0aW9uLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0wABcVi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXR5X3V0aWxzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Njb3BlX3Zpc2l0b3IuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCcgc2hvdyBKRmllbGQ7CmltcG9ydCAnLi4vanNfbW9kZWwvanNfd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwva2VsZW1lbnRzLmRhcnQnIHNob3cgS0NsYXNzLCBLRmllbGQsIEtDb25zdHJ1Y3RvcjsKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3dvcmxkLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKCi8vLyBBbGxvY2F0b3JBbmFseXNpcwovLy8KLy8vIEFuYWx5c2lzIHRvIGRldGVybWluZSBmZWF0dXJlcyBvZiB0aGUgYWxsb2NhdG9yIGZ1bmN0aW9ucy4gVGhlIGFsbG9jYXRvcgovLy8gZnVuY3Rpb24gdGFrZXMgcGFyYW1ldGVycyBmb3IgZWFjaCBmaWVsZCBpbml0aWFsaXplciBhbmQgaW5pdGlhbGl6ZXMgdGhlCi8vLyBmaWVsZHMuICBQYXJhbWV0ZXJzIG1heSBiZSBvbWl0dGVkIGlmIHRoZSBpbml0aWFsaXplciBpcyBhbHdheXMgdGhlIHNhbWUKLy8vIGNvbnN0YW50IHZhbHVlLiAgSG93IHRoZSBhbGxvY2F0b3IgaXMgZW1pdHRlZCB3aWxsIGRldGVybWluZSB3aGF0IGtpbmQgb2YKLy8vIGNvbnN0YW50cyBjYW4gYmUgaGFuZGxlZC4gIFRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9ubHkgcGVybWl0cyBgbnVsbGAuCgovLyBUT0RPKHNyYSk6IEFuYWx5c2lzIHRvIGRldGVybWluZSBmaWVsZCBvcmRlci4gQ3VycmVudCBmaWVsZCBvcmRlciBpcwovLyBlc3NlbnRpYWxseSBkZWNsYXJhdGlvbiBvcmRlciwgc3ViY2xhc3MgZmlyc3QuIFdlIGNhbiByZW9yZGVyIGZpZWxkcyBzbyB0aGF0Ci8vIGZpZWxkcyBpbml0aWFsaXplZCB3aXRoIHRoZSBzYW1lIGNvbnN0YW50IGFyZSB0b2dldGhlciB0byBhbGxvdyBjaGFpbmVkCi8vIGluaXRpYWxpemF0aW9uLiBGaWVsZHMgb2YgYSBjbGFzcyBhbmQgc3VwZXJjbGFzcyBjYW4gYmUgcmVvcmRlcmVkIHRvIGFsbG93Ci8vIGNoYWluaW5nLCBlLmcuCi8vCi8vICAgICB0aGlzLnggPSB0aGlzLnogPSBudWxsOwovLwpjbGFzcyBLRmllbGRBbmFseXNpcyB7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwoKICBmaW5hbCBNYXA8S0NsYXNzLCBDbGFzc0RhdGE+IF9jbGFzc0RhdGEgPSB7fTsKICBmaW5hbCBNYXA8S0ZpZWxkLCBTdGF0aWNGaWVsZERhdGE+IF9zdGF0aWNGaWVsZERhdGEgPSB7fTsKCiAgS0ZpZWxkQW5hbHlzaXMoS2VybmVsRnJvbnRlbmRTdHJhdGVneSBrZXJuZWxTdHJhdGVneSkKICAgICAgOiBfZWxlbWVudE1hcCA9IGtlcm5lbFN0cmF0ZWd5LmVsZW1lbnRNYXA7CgogIC8vIFJlZ2lzdGVyIGNsYXNzIGR1cmluZyByZXNvbHV0aW9uLiBVc2Ugc2ltcGxlIHN5bnRhY3RpYyBhbmFseXNpcyB0byBmaW5kCiAgLy8gbnVsbC1pbml0aWFsaXplZCBmaWVsZHMuCiAgdm9pZCByZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKEtDbGFzcyBjbGFzc18pIHsKICAgIGlyLkNsYXNzIGNsYXNzTm9kZSA9IF9lbGVtZW50TWFwLmdldENsYXNzTm9kZShjbGFzc18pOwoKICAgIExpc3Q8S0NvbnN0cnVjdG9yPiBjb25zdHJ1Y3RvcnMgPSBbXTsKICAgIE1hcDxLRmllbGQsIEFsbG9jYXRvckRhdGE+IGZpZWxkRGF0YSA9IHt9OwogICAgZm9yIChpci5GaWVsZCBmaWVsZCBpbiBjbGFzc05vZGUuZmllbGRzKSB7CiAgICAgIGlmICghZmllbGQuaXNJbnN0YW5jZU1lbWJlcikgY29udGludWU7CgogICAgICBGaWVsZEVudGl0eSBmaWVsZEVsZW1lbnQgPSBfZWxlbWVudE1hcC5nZXRGaWVsZChmaWVsZCk7CiAgICAgIGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IGZpZWxkLmluaXRpYWxpemVyOwogICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShleHByZXNzaW9uLAogICAgICAgICAgcmVxdWlyZUNvbnN0YW50OiBmYWxzZSwgaW1wbGljaXROdWxsOiB0cnVlKTsKICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUuaXNDb25zdGFudCkgewogICAgICAgIGZpZWxkRGF0YVtmaWVsZEVsZW1lbnRdID0gbmV3IEFsbG9jYXRvckRhdGEodmFsdWUpOwogICAgICB9CiAgICB9CgogICAgZm9yIChpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiBjbGFzc05vZGUuY29uc3RydWN0b3JzKSB7CiAgICAgIEtDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvckVsZW1lbnQgPSBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcik7CiAgICAgIGNvbnN0cnVjdG9ycy5hZGQoY29uc3RydWN0b3JFbGVtZW50KTsKICAgICAgZm9yIChpci5Jbml0aWFsaXplciBpbml0aWFsaXplciBpbiBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMpIHsKICAgICAgICBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuRmllbGRJbml0aWFsaXplcikgewogICAgICAgICAgQWxsb2NhdG9yRGF0YSBkYXRhID0KICAgICAgICAgICAgICBmaWVsZERhdGFbX2VsZW1lbnRNYXAuZ2V0RmllbGQoaW5pdGlhbGl6ZXIuZmllbGQpXTsKICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBpbml0aWFsaXplcnMgd2l0aCBzaWRlLWVmZmVjdHM/CgogICAgICAgICAgICAvLyBUaGUgZmllbGQgaGFzIGEgbm9uLWNvbnN0YW50IGluaXRpYWxpemVyLgogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KCiAgICAgICAgICBJbml0aWFsaXplciBpbml0aWFsaXplclZhbHVlID0gY29uc3QgSW5pdGlhbGl6ZXIuY29tcGxleCgpOwogICAgICAgICAgaXIuRXhwcmVzc2lvbiB2YWx1ZSA9IGluaXRpYWxpemVyLnZhbHVlOwogICAgICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudFZhbHVlID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZSh2YWx1ZSwKICAgICAgICAgICAgICByZXF1aXJlQ29uc3RhbnQ6IGZhbHNlLCBpbXBsaWNpdE51bGw6IHRydWUpOwogICAgICAgICAgaWYgKGNvbnN0YW50VmFsdWUgIT0gbnVsbCAmJiBjb25zdGFudFZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgICAgICAgaW5pdGlhbGl6ZXJWYWx1ZSA9IG5ldyBJbml0aWFsaXplci5kaXJlY3QoY29uc3RhbnRWYWx1ZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIGlyLlZhcmlhYmxlR2V0KSB7CiAgICAgICAgICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyID0gdmFsdWUudmFyaWFibGU7CiAgICAgICAgICAgIGludCBwb3NpdGlvbiA9CiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5pbmRleE9mKHBhcmFtZXRlcik7CiAgICAgICAgICAgIGlmIChwb3NpdGlvbiAhPSAtMSkgewogICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgICAgICAgICBjb25zdGFudFZhbHVlID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZSgKICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuaW5pdGlhbGl6ZXIsCiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZUNvbnN0YW50OiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdE51bGw6IHRydWUpOwogICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50VmFsdWUgIT0gbnVsbCAmJiBjb25zdGFudFZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJWYWx1ZSA9CiAgICAgICAgICAgICAgICAgICAgICBuZXcgSW5pdGlhbGl6ZXIucG9zaXRpb25hbChwb3NpdGlvbiwgY29uc3RhbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBvc2l0aW9uID0KICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmluZGV4T2YocGFyYW1ldGVyKTsKICAgICAgICAgICAgICBpZiAocG9zaXRpb24gIT0gLTEpIHsKICAgICAgICAgICAgICAgIGNvbnN0YW50VmFsdWUgPSBfZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKAogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci5pbml0aWFsaXplciwKICAgICAgICAgICAgICAgICAgICByZXF1aXJlQ29uc3RhbnQ6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIGltcGxpY2l0TnVsbDogdHJ1ZSk7CiAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnRWYWx1ZSAhPSBudWxsICYmIGNvbnN0YW50VmFsdWUuaXNDb25zdGFudCkgewogICAgICAgICAgICAgICAgICBpbml0aWFsaXplclZhbHVlID0KICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbml0aWFsaXplci5uYW1lZChwYXJhbWV0ZXIubmFtZSwgY29uc3RhbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBkYXRhLmluaXRpYWxpemVyc1tjb25zdHJ1Y3RvckVsZW1lbnRdID0gaW5pdGlhbGl6ZXJWYWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIF9jbGFzc0RhdGFbY2xhc3NfXSA9IG5ldyBDbGFzc0RhdGEoY29uc3RydWN0b3JzLCBmaWVsZERhdGEpOwogIH0KCiAgdm9pZCByZWdpc3RlclN0YXRpY0ZpZWxkKEtGaWVsZCBmaWVsZCwgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkpIHsKICAgIGlyLkZpZWxkIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKGZpZWxkKTsKICAgIGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG5vZGUuaW5pdGlhbGl6ZXI7CiAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShleHByZXNzaW9uLAogICAgICAgIHJlcXVpcmVDb25zdGFudDogbm9kZS5pc0NvbnN0LCBpbXBsaWNpdE51bGw6IHRydWUpOwogICAgaWYgKHZhbHVlICE9IG51bGwgJiYgIXZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgdmFsdWUgPSBudWxsOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIGV2YWx1YXRpb24gb2YgY29uc3RhbnQgd2hlbiBbY29tcGxleGl0eV0KICAgIC8vIGhvbGRzIHRoZSBjb25zdGFudCBsaXRlcmFsIGZyb20gQ0ZFLgogICAgX3N0YXRpY0ZpZWxkRGF0YVtmaWVsZF0gPSBuZXcgU3RhdGljRmllbGREYXRhKHZhbHVlLCBjb21wbGV4aXR5KTsKICB9CgogIEFsbG9jYXRvckRhdGEgZ2V0QWxsb2NhdG9yRGF0YUZvclRlc3RpbmcoS0ZpZWxkIGZpZWxkKSB7CiAgICByZXR1cm4gX2NsYXNzRGF0YVtmaWVsZC5lbmNsb3NpbmdDbGFzc10uZmllbGREYXRhW2ZpZWxkXTsKICB9CgogIFN0YXRpY0ZpZWxkRGF0YSBnZXRTdGF0aWNGaWVsZERhdGFGb3JUZXN0aW5nKEtGaWVsZCBmaWVsZCkgewogICAgcmV0dXJuIF9zdGF0aWNGaWVsZERhdGFbZmllbGRdOwogIH0KfQoKY2xhc3MgQ2xhc3NEYXRhIHsKICBmaW5hbCBMaXN0PEtDb25zdHJ1Y3Rvcj4gY29uc3RydWN0b3JzOwogIGZpbmFsIE1hcDxLRmllbGQsIEFsbG9jYXRvckRhdGE+IGZpZWxkRGF0YTsKCiAgQ2xhc3NEYXRhKHRoaXMuY29uc3RydWN0b3JzLCB0aGlzLmZpZWxkRGF0YSk7Cn0KCmNsYXNzIFN0YXRpY0ZpZWxkRGF0YSB7CiAgZmluYWwgQ29uc3RhbnRWYWx1ZSBpbml0aWFsVmFsdWU7CiAgZmluYWwgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHk7CgogIFN0YXRpY0ZpZWxkRGF0YSh0aGlzLmluaXRpYWxWYWx1ZSwgdGhpcy5jb21wbGV4aXR5KTsKCiAgYm9vbCBnZXQgaGFzRGVwZW5kZW5jaWVzID0+IGNvbXBsZXhpdHkgIT0gbnVsbCAmJiBjb21wbGV4aXR5LmZpZWxkcyAhPSBudWxsOwp9CgpjbGFzcyBBbGxvY2F0b3JEYXRhIHsKICBmaW5hbCBDb25zdGFudFZhbHVlIGluaXRpYWxWYWx1ZTsKICBmaW5hbCBNYXA8S0NvbnN0cnVjdG9yLCBJbml0aWFsaXplcj4gaW5pdGlhbGl6ZXJzID0ge307CgogIEFsbG9jYXRvckRhdGEodGhpcy5pbml0aWFsVmFsdWUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnQWxsb2NhdG9yRGF0YShpbml0aWFsVmFsdWU9JHtpbml0aWFsVmFsdWU/LnRvU3RydWN0dXJlZFRleHQoKX0sJwogICAgICAnaW5pdGlhbGl6ZXJzPSRpbml0aWFsaXplcnMpJzsKfQoKZW51bSBJbml0aWFsaXplcktpbmQgewogIGRpcmVjdCwKICBwb3NpdGlvbmFsLAogIG5hbWVkLAogIGNvbXBsZXgsCn0KCmNsYXNzIEluaXRpYWxpemVyIHsKICBmaW5hbCBJbml0aWFsaXplcktpbmQga2luZDsKICBmaW5hbCBpbnQgaW5kZXg7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgQ29uc3RhbnRWYWx1ZSB2YWx1ZTsKCiAgSW5pdGlhbGl6ZXIuZGlyZWN0KHRoaXMudmFsdWUpCiAgICAgIDoga2luZCA9IEluaXRpYWxpemVyS2luZC5kaXJlY3QsCiAgICAgICAgaW5kZXggPSBudWxsLAogICAgICAgIG5hbWUgPSBudWxsOwoKICBJbml0aWFsaXplci5wb3NpdGlvbmFsKHRoaXMuaW5kZXgsIHRoaXMudmFsdWUpCiAgICAgIDoga2luZCA9IEluaXRpYWxpemVyS2luZC5wb3NpdGlvbmFsLAogICAgICAgIG5hbWUgPSBudWxsOwoKICBJbml0aWFsaXplci5uYW1lZCh0aGlzLm5hbWUsIHRoaXMudmFsdWUpCiAgICAgIDoga2luZCA9IEluaXRpYWxpemVyS2luZC5uYW1lZCwKICAgICAgICBpbmRleCA9IG51bGw7CgogIGNvbnN0IEluaXRpYWxpemVyLmNvbXBsZXgoKQogICAgICA6IGtpbmQgPSBJbml0aWFsaXplcktpbmQuY29tcGxleCwKICAgICAgICBpbmRleCA9IG51bGwsCiAgICAgICAgbmFtZSA9IG51bGwsCiAgICAgICAgdmFsdWUgPSBudWxsOwoKICBTdHJpbmcgZ2V0IHNob3J0VGV4dCB7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBJbml0aWFsaXplcktpbmQuZGlyZWN0OgogICAgICAgIHJldHVybiB2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCk7CiAgICAgIGNhc2UgSW5pdGlhbGl6ZXJLaW5kLnBvc2l0aW9uYWw6CiAgICAgICAgcmV0dXJuICckaW5kZXg6JHt2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCl9JzsKICAgICAgY2FzZSBJbml0aWFsaXplcktpbmQubmFtZWQ6CiAgICAgICAgcmV0dXJuICckbmFtZToke3ZhbHVlLnRvU3RydWN0dXJlZFRleHQoKX0nOwogICAgICBjYXNlIEluaXRpYWxpemVyS2luZC5jb21wbGV4OgogICAgICAgIHJldHVybiAnPyc7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5leHBlY3RlZCBraW5kICRraW5kJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBzaG9ydFRleHQ7Cn0KCmNsYXNzIEpGaWVsZEFuYWx5c2lzIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pGaWVsZEFuYWx5c2lzXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2ZpZWxkLWFuYWx5c2lzJzsKCiAgLy8gLS1jc3AgYW5kIC0tZmFzdC1zdGFydHVwIGhhdmUgZGlmZmVyZW50IGNvbnN0cmFpbnRzIHRvIHRoZSBnZW5lcmF0ZWQgY29kZS4KCiAgZmluYWwgTWFwPEZpZWxkRW50aXR5LCBGaWVsZEFuYWx5c2lzRGF0YT4gX2ZpZWxkRGF0YTsKCiAgSkZpZWxkQW5hbHlzaXMuXyh0aGlzLl9maWVsZERhdGEpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pGaWVsZEFuYWx5c2lzXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEpGaWVsZEFuYWx5c2lzLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1hcDxGaWVsZEVudGl0eSwgRmllbGRBbmFseXNpc0RhdGE+IGZpZWxkRGF0YSA9IHNvdXJjZS5yZWFkTWVtYmVyTWFwKAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBuZXcgRmllbGRBbmFseXNpc0RhdGEuZnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpGaWVsZEFuYWx5c2lzLl8oZmllbGREYXRhKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pGaWVsZEFuYWx5c2lzXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck1hcCgKICAgICAgICBfZmllbGREYXRhLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBGaWVsZEFuYWx5c2lzRGF0YSBkYXRhKSA9PgogICAgICAgICAgICBkYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgZmFjdG9yeSBKRmllbGRBbmFseXNpcy5mcm9tKEtDbG9zZWRXb3JsZEltcGwgY2xvc2VkV29ybGQsIEpzVG9Gcm9udGVuZE1hcCBtYXAsCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CiAgICBNYXA8RmllbGRFbnRpdHksIEZpZWxkQW5hbHlzaXNEYXRhPiBmaWVsZERhdGEgPSB7fTsKCiAgICBib29sIGNhbkJlRWxpZGVkKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIHJldHVybiAhY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhLmhhc05vRWxpc2lvbihmaWVsZCkgJiYKICAgICAgICAgICFjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKGZpZWxkKTsKICAgIH0KCiAgICBjbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLl9jbGFzc0RhdGEKICAgICAgICAuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0RhdGEgY2xhc3NEYXRhKSB7CiAgICAgIGNsYXNzRGF0YS5maWVsZERhdGEuZm9yRWFjaCgoS0ZpZWxkIGtGaWVsZCwgQWxsb2NhdG9yRGF0YSBkYXRhKSB7CiAgICAgICAgSkZpZWxkIGpGaWVsZCA9IG1hcC50b0JhY2tlbmRNZW1iZXIoa0ZpZWxkKTsKICAgICAgICBpZiAoakZpZWxkID09IG51bGwpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCBlbGlkZWQgc3RhdGljIGZpZWxkcyBiZSByZW1vdmVkIGZyb20gdGhlCiAgICAgICAgLy8gSiBtb2RlbD8gU3RhdGljIHNldHRlcnMgbWlnaHQgc3RpbGwgYXNzaWduIHRvIHRoZW0uCgogICAgICAgIE1lbWJlclVzYWdlIG1lbWJlclVzYWdlID0gY2xvc2VkV29ybGQubGl2ZU1lbWJlclVzYWdlW2tGaWVsZF07CiAgICAgICAgaWYgKCFtZW1iZXJVc2FnZS5oYXNSZWFkKSB7CiAgICAgICAgICBpZiAoY2FuQmVFbGlkZWQoa0ZpZWxkKSkgewogICAgICAgICAgICBmaWVsZERhdGFbakZpZWxkXSA9IGNvbnN0IEZpZWxkQW5hbHlzaXNEYXRhKGlzRWxpZGVkOiB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGRhdGEuaW5pdGlhbFZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgQ29uc3RhbnRWYWx1ZSBpbml0aWFsVmFsdWU7CiAgICAgICAgICAgIGJvb2wgaXNUb29Db21wbGV4ID0gZmFsc2U7CgogICAgICAgICAgICB2b2lkIGluY2x1ZGVJbml0aWFsVmFsdWUoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgewogICAgICAgICAgICAgIGlmIChpc1Rvb0NvbXBsZXgpIHJldHVybjsKICAgICAgICAgICAgICBpZiAoaW5pdGlhbFZhbHVlID09IG51bGwpIHsKICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbFZhbHVlICE9IHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWUgPSBudWxsOwogICAgICAgICAgICAgICAgaXNUb29Db21wbGV4ID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG1lbWJlclVzYWdlLmluaXRpYWxDb25zdGFudHMuZm9yRWFjaChpbmNsdWRlSW5pdGlhbFZhbHVlKTsKCiAgICAgICAgICAgIGJvb2wgaW5BbGxDb25zdHJ1Y3RvcnMgPSB0cnVlOwogICAgICAgICAgICBmb3IgKEtDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiBjbGFzc0RhdGEuY29uc3RydWN0b3JzKSB7CiAgICAgICAgICAgICAgaWYgKGlzVG9vQ29tcGxleCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBNZW1iZXJVc2FnZSBjb25zdHJ1Y3RvclVzYWdlID0KICAgICAgICAgICAgICAgICAgY2xvc2VkV29ybGQubGl2ZU1lbWJlclVzYWdlW2NvbnN0cnVjdG9yXTsKICAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3JVc2FnZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzbid0IGNhbGxlZC4KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgaW52b2tlZFBhcmFtZXRlcnMgPQogICAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEuaGFzTm9FbGlzaW9uKGNvbnN0cnVjdG9yKQogICAgICAgICAgICAgICAgICAgICAgPyBjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJTdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RydWN0b3JVc2FnZS5pbnZva2VkUGFyYW1ldGVyczsKCiAgICAgICAgICAgICAgSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgPSBkYXRhLmluaXRpYWxpemVyc1tjb25zdHJ1Y3Rvcl07CiAgICAgICAgICAgICAgaWYgKGluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgIGluQWxsQ29uc3RydWN0b3JzID0gZmFsc2U7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5pdGlhbGl6ZXIua2luZCkgewogICAgICAgICAgICAgICAgICBjYXNlIEluaXRpYWxpemVyS2luZC5kaXJlY3Q6CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZUluaXRpYWxWYWx1ZShpbml0aWFsaXplci52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgSW5pdGlhbGl6ZXJLaW5kLnBvc2l0aW9uYWw6CiAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWxpemVyLmluZGV4ID49CiAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZWRQYXJhbWV0ZXJzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlSW5pdGlhbFZhbHVlKGluaXRpYWxpemVyLnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgaXNUb29Db21wbGV4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgSW5pdGlhbGl6ZXJLaW5kLm5hbWVkOgogICAgICAgICAgICAgICAgICAgIGlmICghaW52b2tlZFBhcmFtZXRlcnMubmFtZWRQYXJhbWV0ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb250YWlucyhpbml0aWFsaXplci5uYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZUluaXRpYWxWYWx1ZShpbml0aWFsaXplci52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGlzVG9vQ29tcGxleCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICBjYXNlIEluaXRpYWxpemVyS2luZC5jb21wbGV4OgogICAgICAgICAgICAgICAgICAgIGlzVG9vQ29tcGxleCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghaW5BbGxDb25zdHJ1Y3RvcnMpIHsKICAgICAgICAgICAgICBpbmNsdWRlSW5pdGlhbFZhbHVlKGRhdGEuaW5pdGlhbFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWlzVG9vQ29tcGxleCAmJiBpbml0aWFsVmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBtYXAudG9CYWNrZW5kQ29uc3RhbnQoaW5pdGlhbFZhbHVlKTsKICAgICAgICAgICAgICBib29sIGlzRWZmZWN0aXZlbHlDb25zdGFudCA9IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgaXNJbml0aWFsaXplZEluQWxsb2NhdG9yID0gZmFsc2U7CiAgICAgICAgICAgICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgICAgICAgICAgIGlmICghbWVtYmVyVXNhZ2UuaGFzV3JpdGUgJiYgY2FuQmVFbGlkZWQoa0ZpZWxkKSkgewogICAgICAgICAgICAgICAgaXNFZmZlY3RpdmVseUNvbnN0YW50ID0gdHJ1ZTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVsbCB8fAogICAgICAgICAgICAgICAgICB2YWx1ZS5pc0ludCB8fAogICAgICAgICAgICAgICAgICB2YWx1ZS5pc0Jvb2wgfHwKICAgICAgICAgICAgICAgICAgdmFsdWUuaXNTdHJpbmcpIHsKICAgICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcixzcmEpOiBTdXBwb3J0IG5vbi1wcmltaXRpdmUgY29uc3RhbnRzIGluCiAgICAgICAgICAgICAgICAvLyBhbGxvY2F0b3JzIHdoZW4gaXQgZG9lcyBjYXVzZSBhbGxvY2F0b3JzIHRvIGRlb3B0aW1pemVkCiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGRlZmVycmVkIGxvYWRpbmcuCiAgICAgICAgICAgICAgICBpc0luaXRpYWxpemVkSW5BbGxvY2F0b3IgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBmaWVsZERhdGFbakZpZWxkXSA9IG5ldyBGaWVsZEFuYWx5c2lzRGF0YSgKICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgaXNFZmZlY3RpdmVseUZpbmFsOiBpc0VmZmVjdGl2ZWx5Q29uc3RhbnQsCiAgICAgICAgICAgICAgICAgIGlzRWxpZGVkOiBpc0VmZmVjdGl2ZWx5Q29uc3RhbnQsCiAgICAgICAgICAgICAgICAgIGlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcjogaXNJbml0aWFsaXplZEluQWxsb2NhdG9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKCiAgICBMaXN0PEtGaWVsZD4gaW5kZXBlbmRlbnRGaWVsZHMgPSBbXTsKICAgIExpc3Q8S0ZpZWxkPiBkZXBlbmRlbnRGaWVsZHMgPSBbXTsKCiAgICBjbG9zZWRXb3JsZC5saXZlTWVtYmVyVXNhZ2UKICAgICAgICAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UpIHsKICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmICFtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIFN0YXRpY0ZpZWxkRGF0YSBzdGF0aWNGaWVsZERhdGEgPQogICAgICAgICAgICBjbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLl9zdGF0aWNGaWVsZERhdGFbbWVtYmVyXTsKICAgICAgICBpZiAoc3RhdGljRmllbGREYXRhLmhhc0RlcGVuZGVuY2llcykgewogICAgICAgICAgZGVwZW5kZW50RmllbGRzLmFkZChtZW1iZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmRlcGVuZGVudEZpZWxkcy5hZGQobWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIEZpZWxkcyBhbHJlYWR5IHByb2Nlc3NlZC4KICAgIFNldDxLRmllbGQ+IHByb2Nlc3NlZEZpZWxkcyA9IHt9OwoKICAgIC8vIEZpZWxkcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiBVc2UgZm9yIGRldGVjdGluZyBjeWNsaWMgZGVwZW5kZW5jaWVzLgogICAgU2V0PEtGaWVsZD4gY3VycmVudEZpZWxkcyA9IHt9OwoKICAgIC8vIEluZGV4IGFzY3JpYmVkIHRvIGVhZ2VyIGZpZWxkcyB0aGF0IGRlcGVuZCBvbiBvdGhlciBmaWVsZHMuIFRoaXMgaXMKICAgIC8vIHVzZWQgdG8gc29ydCB0aGUgZmllbGQgaW4gZW1pc3Npb24gdG8gZW5zdXJlIHRoYXQgdXNlZCBmaWVsZHMgaGF2ZSBiZWVuCiAgICAvLyBpbml0aWFsaXplZCB3aGVuIHJlYWQuCiAgICBpbnQgZWFnZXJDcmVhdGlvbkluZGV4ID0gMDsKCiAgICAvLy8gQ29tcHV0ZXMgdGhlIFtGaWVsZEFuYWx5c2lzRGF0YV0gZm9yIHRoZSBKRmllbGQgY29ycmVzcG9uZGluZyB0bwogICAgLy8vIFtrRmllbGRdLgogICAgLy8vCiAgICAvLy8gSWYgdGhlIGRhdGEgaXMgY3VycmVudGx5IGJlZW4gY29tcHV0ZWQsIHRoYXQgaXMsIFtrRmllbGRdIGhhcyBhCiAgICAvLy8gY3ljbGljIGRlcGVuZGVuY3ksIGBudWxsYCBpcyByZXR1cm5lZC4KICAgIEZpZWxkQW5hbHlzaXNEYXRhIHByb2Nlc3NGaWVsZChLRmllbGQga0ZpZWxkKSB7CiAgICAgIEpGaWVsZCBqRmllbGQgPSBtYXAudG9CYWNrZW5kTWVtYmVyKGtGaWVsZCk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhbiB3ZSBhc3NlcnQgdGhhdCBbakZpZWxkXSBleGlzdHM/CiAgICAgIGlmIChqRmllbGQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBkYXRhID0gZmllbGREYXRhW2pGaWVsZF07CiAgICAgIGlmIChwcm9jZXNzZWRGaWVsZHMuY29udGFpbnMoa0ZpZWxkKSkgewogICAgICAgIC8vIFdlIG9ubHkgc3RvcmUgZGF0YSBmb3Igbm9uLXRyaXZpYWwgW0ZpZWxkQW5hbHlzaXNEYXRhXS4KICAgICAgICByZXR1cm4gZGF0YSA/PyBjb25zdCBGaWVsZEFuYWx5c2lzRGF0YSgpOwogICAgICB9CiAgICAgIGlmIChjdXJyZW50RmllbGRzLmNvbnRhaW5zKGtGaWVsZCkpIHsKICAgICAgICAvLyBDeWNsaWMgZGVwZW5kZW5jeS4KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjdXJyZW50RmllbGRzLmFkZChrRmllbGQpOwogICAgICBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSA9IGNsb3NlZFdvcmxkLmxpdmVNZW1iZXJVc2FnZVtrRmllbGRdOwogICAgICBpZiAoIW1lbWJlclVzYWdlLmhhc1JlYWQgJiYgY2FuQmVFbGlkZWQoa0ZpZWxkKSkgewogICAgICAgIGRhdGEgPSBmaWVsZERhdGFbakZpZWxkXSA9IGNvbnN0IEZpZWxkQW5hbHlzaXNEYXRhKGlzRWxpZGVkOiB0cnVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBib29sIGlzRWZmZWN0aXZlbHlGaW5hbCA9ICFtZW1iZXJVc2FnZS5oYXNXcml0ZTsKICAgICAgICBTdGF0aWNGaWVsZERhdGEgc3RhdGljRmllbGREYXRhID0KICAgICAgICAgICAgY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5fc3RhdGljRmllbGREYXRhW2tGaWVsZF07CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IG1hcAogICAgICAgICAgICAudG9CYWNrZW5kQ29uc3RhbnQoc3RhdGljRmllbGREYXRhLmluaXRpYWxWYWx1ZSwgYWxsb3dOdWxsOiB0cnVlKTsKCiAgICAgICAgLy8gSWYgdGhlIGZpZWxkIGlzIGVmZmVjdGl2ZWx5IGZpbmFsIHdpdGggYSBjb25zdGFudCBpbml0aWFsaXplciB3ZQogICAgICAgIC8vIGVsaWRlIHRoZSBmaWVsZCwgaWYgYWxsb3dlZCwgYmVjYXVzZSBpdCBpcyBlZmZlY3RpdmVseSBjb25zdGFudC4KICAgICAgICBib29sIGlzRWxpZGVkID0KICAgICAgICAgICAgaXNFZmZlY3RpdmVseUZpbmFsICYmIHZhbHVlICE9IG51bGwgJiYgY2FuQmVFbGlkZWQoa0ZpZWxkKTsKCiAgICAgICAgYm9vbCBpc0VhZ2VyOwoKICAgICAgICAvLyBJZiB0aGUgZmllbGQgaXMgZWFnZXIgYW5kIGRlcGVuZGVudCBvbiBvdGhlciBlYWdlciBmaWVsZHMsCiAgICAgICAgLy8gW2VhZ2VyRmllbGREZXBlbmRlbmNpZXNdIGhvbGRzIHRoZXNlIGZpZWxkcyBhbmQgW2NyZWF0aW9uSW5kZXhdIGlzCiAgICAgICAgLy8gZ2l2ZW4gdGhlIGNyZWF0aW9uIG9yZGVyIGluZGV4IHVzZWQgdG8gZW5zdXJlIHRoYXQgYWxsIGRlcGVuZGVuY2llcwogICAgICAgIC8vIGhhdmUgYmVlbiBhc3NpZ25lZCB0aGVpciB2YWx1ZXMgYmVmb3JlIHRoaXMgZmllbGQgaXMgaW5pdGlhbGl6ZWQuCiAgICAgICAgLy8KICAgICAgICAvLyBTaW5jZSB3ZSBvbmx5IG5lZWQgdGhlIHZhbHVlcyBvZiBbZWFnZXJGaWVsZERlcGVuZGVuY2llc10gZm9yIHRlc3RpbmcKICAgICAgICAvLyBhbmQgb25seSB0aGUgbm9uLWVtcHRpbmVzcyBmb3IgZGV0ZXJtaW5pbmcgdGhlIG5lZWQgZm9yIGNyZWF0aW9uCiAgICAgICAgLy8gb3JkZXIgaW5kaWNlcywgW2VhZ2VyRmllbGREZXBlbmRlbmNpZXNdIGlzIG5vbi1udWxsIGlmIHRoZSBmaWVsZCBoYXMKICAgICAgICAvLyBkZXBlbmRlbmNpZXMgYnV0IG9ubHkgaG9sZCB0aGVzZSB3aGVuIFtyZXRhaW5EYXRhRm9yVGVzdGluZ10gaXMKICAgICAgICAvLyBgdHJ1ZWAuCiAgICAgICAgTGlzdDxGaWVsZEVudGl0eT4gZWFnZXJGaWVsZERlcGVuZGVuY2llczsKICAgICAgICBpbnQgY3JlYXRpb25JbmRleCA9IG51bGw7CgogICAgICAgIGlmIChpc0VsaWRlZCkgewogICAgICAgICAgLy8gSWYgdGhlIGZpZWxkIGlzIGVsaWRlZCBpdCBuZWVkcyBubyBpbml0aWFsaXplciBhbmQgaXMgdGhlcmVmb3JlCiAgICAgICAgICAvLyBub3QgZWFnZXIuCiAgICAgICAgICBpc0VhZ2VyID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIElmIHRoZSBmaWVsZCBoYXMgYSBjb25zdGFudCBpbml0aWFsaXplciB3ZSBrbm93IGl0IGNhbiBiZQogICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgZWFnZXJseS4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBJZGVhbGx5IHRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzCiAgICAgICAgICAvLyBgc3RhdGljRmllbGREYXRhLmNvbXBsZXhpdHkuaXNDb25zdGFudGAgYnV0IGN1cnJlbnRseSB0aGUgY29uc3RhbnQKICAgICAgICAgIC8vIGV2YWx1YXRvciBoYW5kbGVzIGNhc2VzIHRoYXQgdGhlIGFuYWx5c2lzIGRvZXNuJ3QsIHNvIHdlIHVzZSB0aGUKICAgICAgICAgIC8vIGJldHRlciByZXN1bHQuCiAgICAgICAgICBpc0VhZ2VyID0gdmFsdWUgIT0gbnVsbDsKICAgICAgICAgIGlmICghaXNFYWdlcikgewogICAgICAgICAgICAvLyBUaGUgZmllbGQgbWlnaHQgYmUgZWFnZXIgZGVwZW5kaW5nIG9uIHRoZSBpbml0aWFsaXplciBjb21wbGV4aXR5CiAgICAgICAgICAgIC8vIGFuZCBpdHMgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9IHN0YXRpY0ZpZWxkRGF0YS5jb21wbGV4aXR5OwogICAgICAgICAgICBpc0VhZ2VyID0gY29tcGxleGl0eT8uaXNFYWdlciA/PyBmYWxzZTsKICAgICAgICAgICAgaWYgKGlzRWFnZXIgJiYgY29tcGxleGl0eS5maWVsZHMgIT0gbnVsbCkgewogICAgICAgICAgICAgIGZvciAoaXIuRmllbGQgbm9kZSBpbiBjb21wbGV4aXR5LmZpZWxkcykgewogICAgICAgICAgICAgICAgS0ZpZWxkIG90aGVyRmllbGQgPSBjbG9zZWRXb3JsZC5lbGVtZW50TWFwLmdldEZpZWxkKG5vZGUpOwogICAgICAgICAgICAgICAgRmllbGRBbmFseXNpc0RhdGEgb3RoZXJEYXRhID0gcHJvY2Vzc0ZpZWxkKG90aGVyRmllbGQpOwogICAgICAgICAgICAgICAgaWYgKG90aGVyRGF0YSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgIC8vIEN5Y2xpYyBkZXBlbmRlbmN5IG9uIFtvdGhlckZpZWxkXS4KICAgICAgICAgICAgICAgICAgaXNFYWdlciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChvdGhlckRhdGEuaXNMYXp5KSB7CiAgICAgICAgICAgICAgICAgIC8vIFtvdGhlckZpZWxkXSBuZWVkcyBsYXp5IGluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICBpc0VhZ2VyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFvdGhlckRhdGEuaXNFZmZlY3RpdmVseUZpbmFsKSB7CiAgICAgICAgICAgICAgICAgIC8vIFtvdGhlckZpZWxkXSBtaWdodCBub3QgaG9sZCBpdHMgaW5pdGlhbCB2YWx1ZSB3aGVuIHRoaXMgZmllbGQKICAgICAgICAgICAgICAgICAgLy8gaXMgYWNjZXNzZWQgdGhlIGZpcnN0IHRpbWUsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGlzCiAgICAgICAgICAgICAgICAgIC8vIGZpZWxkIGxhemlseS4KICAgICAgICAgICAgICAgICAgaXNFYWdlciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghb3RoZXJEYXRhLmlzRWZmZWN0aXZlbHlDb25zdGFudCkgewogICAgICAgICAgICAgICAgICBlYWdlckZpZWxkRGVwZW5kZW5jaWVzID8/PSBbXTsKICAgICAgICAgICAgICAgICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgZWFnZXJGaWVsZERlcGVuZGVuY2llcy5hZGQobWFwLnRvQmFja2VuZE1lbWJlcihvdGhlckZpZWxkKSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoaXNFYWdlciAmJiBlYWdlckZpZWxkRGVwZW5kZW5jaWVzICE9IG51bGwpIHsKICAgICAgICAgICAgY3JlYXRpb25JbmRleCA9IGVhZ2VyQ3JlYXRpb25JbmRleCsrOwogICAgICAgICAgICBpZiAoIXJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgICAgICAgICAgZWFnZXJGaWVsZERlcGVuZGVuY2llcyA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVhZ2VyRmllbGREZXBlbmRlbmNpZXMgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZGF0YSA9IGZpZWxkRGF0YVtqRmllbGRdID0gbmV3IEZpZWxkQW5hbHlzaXNEYXRhKAogICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLAogICAgICAgICAgICBpc0VmZmVjdGl2ZWx5RmluYWw6IGlzRWZmZWN0aXZlbHlGaW5hbCwKICAgICAgICAgICAgaXNFbGlkZWQ6IGlzRWxpZGVkLAogICAgICAgICAgICBpc0VhZ2VyOiBpc0VhZ2VyLAogICAgICAgICAgICBlYWdlckNyZWF0aW9uSW5kZXg6IGNyZWF0aW9uSW5kZXgsCiAgICAgICAgICAgIGVhZ2VyRmllbGREZXBlbmRlbmNpZXNGb3JUZXN0aW5nOiBlYWdlckZpZWxkRGVwZW5kZW5jaWVzKTsKICAgICAgfQoKICAgICAgY3VycmVudEZpZWxkcy5yZW1vdmUoa0ZpZWxkKTsKICAgICAgcHJvY2Vzc2VkRmllbGRzLmFkZChrRmllbGQpOwogICAgICByZXR1cm4gZGF0YTsKICAgIH0KCiAgICAvLyBQcm9jZXNzIGluZGVwZW5kZW50IGZpZWxkcyBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyLiBUaGUgZW1pdHRlciBzb3J0cwogICAgLy8gdGhlc2UgbGF0ZXIuCiAgICBpbmRlcGVuZGVudEZpZWxkcy5mb3JFYWNoKHByb2Nlc3NGaWVsZCk7CgogICAgLy8gUHJvY2VzcyBkZXBlbmRlbnQgZmllbGRzIGluIGRlY2xhcmF0aW9uIG9yZGVyIHRvIG1ha2UgYXNjcmliZWQgY3JlYXRpb24KICAgIC8vIGluZGljZXMgc3RhYmxlLiBUaGUgZW1pdHRlciB1c2VzIHRoZSBjcmVhdGlvbiBpbmRpY2VzIGZvciBzb3J0aW5nCiAgICAvLyBkZXBlbmRlbnQgZmllbGRzLgogICAgZGVwZW5kZW50RmllbGRzLnNvcnQoKEtGaWVsZCBhLCBLRmllbGQgYikgewogICAgICBpbnQgcmVzdWx0ID0KICAgICAgICAgIGNvbXBhcmVMaWJyYXJpZXNVcmlzKGEubGlicmFyeS5jYW5vbmljYWxVcmksIGIubGlicmFyeS5jYW5vbmljYWxVcmkpOwogICAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7CiAgICAgIGlyLkxvY2F0aW9uIGFMb2NhdGlvbiA9IGNsb3NlZFdvcmxkLmVsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShhKS5sb2NhdGlvbjsKICAgICAgaXIuTG9jYXRpb24gYkxvY2F0aW9uID0gY2xvc2VkV29ybGQuZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKGIpLmxvY2F0aW9uOwogICAgICByZXN1bHQgPSBjb21wYXJlU291cmNlVXJpcyhhTG9jYXRpb24uZmlsZSwgYkxvY2F0aW9uLmZpbGUpOwogICAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7CiAgICAgIHJlc3VsdCA9IGFMb2NhdGlvbi5saW5lLmNvbXBhcmVUbyhiTG9jYXRpb24ubGluZSk7CiAgICAgIGlmIChyZXN1bHQgIT0gMCkgcmV0dXJuIHJlc3VsdDsKICAgICAgcmV0dXJuIGFMb2NhdGlvbi5jb2x1bW4uY29tcGFyZVRvKGJMb2NhdGlvbi5jb2x1bW4pOwogICAgfSk7CgogICAgZGVwZW5kZW50RmllbGRzLmZvckVhY2gocHJvY2Vzc0ZpZWxkKTsKCiAgICByZXR1cm4gbmV3IEpGaWVsZEFuYWx5c2lzLl8oZmllbGREYXRhKTsKICB9CgogIC8vIFRPRE8oc3JhKTogQWRkIHdheSB0byBsZXQgaW5qZWN0ZWQgZmllbGRzIGJlIGluaXRpYWxpemVkIHRvIGEgY29uc3RhbnQgaW4KICAvLyBhbGxvY2F0b3IuCgogIEZpZWxkQW5hbHlzaXNEYXRhIGdldEZpZWxkRGF0YShKRmllbGQgZmllbGQpIHsKICAgIHJldHVybiBfZmllbGREYXRhW2ZpZWxkXSA/PyBjb25zdCBGaWVsZEFuYWx5c2lzRGF0YSgpOwogIH0KfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWVyZ2UgdGhpcyBpbnRvIFtGaWVsZERhdGFdLgpjbGFzcyBGaWVsZEFuYWx5c2lzRGF0YSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZmllbGQtYW5hbHlzaXMtZGF0YSc7CgogIGZpbmFsIENvbnN0YW50VmFsdWUgaW5pdGlhbFZhbHVlOwogIGZpbmFsIGJvb2wgaXNJbml0aWFsaXplZEluQWxsb2NhdG9yOwogIGZpbmFsIGJvb2wgaXNFZmZlY3RpdmVseUZpbmFsOwogIGZpbmFsIGJvb2wgaXNFbGlkZWQ7CgogIC8vLyBJZiBgdHJ1ZWAgdGhlIGZpZWxkIGlzIG5vdCBlZmZlY3RpdmVseSBjb25zdGFudCBidXQgdGhlIGluaXRpYWxpemVyIGNhbiBiZQogIC8vLyBnZW5lcmF0ZWQgZWFnZXJseSB3aXRob3V0IHRoZSBuZWVkIGZvciBsYXp5IGluaXRpYWxpemF0aW9uIHdyYXBwZXIuCiAgZmluYWwgYm9vbCBpc0VhZ2VyOwoKICAvLy8gSW5kZXggYXNjcmliZWQgdG8gZWFnZXIgZmllbGRzIHRoYXQgZGVwZW5kIG9uIG90aGVyIGZpZWxkcy4gVGhpcyBpcwogIC8vLyB1c2VkIHRvIHNvcnQgdGhlIGZpZWxkIGluIGVtaXNzaW9uIHRvIGVuc3VyZSB0aGF0IHVzZWQgZmllbGRzIGhhdmUgYmVlbgogIC8vLyBpbml0aWFsaXplZCB3aGVuIHJlYWQuCiAgZmluYWwgaW50IGVhZ2VyQ3JlYXRpb25JbmRleDsKCiAgZmluYWwgTGlzdDxGaWVsZEVudGl0eT4gZWFnZXJGaWVsZERlcGVuZGVuY2llc0ZvclRlc3Rpbmc7CgogIGNvbnN0IEZpZWxkQW5hbHlzaXNEYXRhKAogICAgICB7dGhpcy5pbml0aWFsVmFsdWUsCiAgICAgIHRoaXMuaXNJbml0aWFsaXplZEluQWxsb2NhdG9yOiBmYWxzZSwKICAgICAgdGhpcy5pc0VmZmVjdGl2ZWx5RmluYWw6IGZhbHNlLAogICAgICB0aGlzLmlzRWxpZGVkOiBmYWxzZSwKICAgICAgdGhpcy5pc0VhZ2VyOiBmYWxzZSwKICAgICAgdGhpcy5lYWdlckNyZWF0aW9uSW5kZXg6IG51bGwsCiAgICAgIHRoaXMuZWFnZXJGaWVsZERlcGVuZGVuY2llc0ZvclRlc3Rpbmc6IG51bGx9KTsKCiAgZmFjdG9yeSBGaWVsZEFuYWx5c2lzRGF0YS5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CgogICAgQ29uc3RhbnRWYWx1ZSBpbml0aWFsVmFsdWUgPSBzb3VyY2UucmVhZENvbnN0YW50T3JOdWxsKCk7CiAgICBib29sIGlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvciA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0VmZmVjdGl2ZWx5RmluYWwgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFbGlkZWQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFYWdlciA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgaW50IGVhZ2VyQ3JlYXRpb25JbmRleCA9IHNvdXJjZS5yZWFkSW50T3JOdWxsKCk7CiAgICBMaXN0PEZpZWxkRW50aXR5PiBlYWdlckZpZWxkRGVwZW5kZW5jaWVzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RmllbGRFbnRpdHk+KGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgRmllbGRBbmFseXNpc0RhdGEoCiAgICAgICAgaW5pdGlhbFZhbHVlOiBpbml0aWFsVmFsdWUsCiAgICAgICAgaXNJbml0aWFsaXplZEluQWxsb2NhdG9yOiBpc0luaXRpYWxpemVkSW5BbGxvY2F0b3IsCiAgICAgICAgaXNFZmZlY3RpdmVseUZpbmFsOiBpc0VmZmVjdGl2ZWx5RmluYWwsCiAgICAgICAgaXNFbGlkZWQ6IGlzRWxpZGVkLAogICAgICAgIGlzRWFnZXI6IGlzRWFnZXIsCiAgICAgICAgZWFnZXJDcmVhdGlvbkluZGV4OiBlYWdlckNyZWF0aW9uSW5kZXgsCiAgICAgICAgZWFnZXJGaWVsZERlcGVuZGVuY2llc0ZvclRlc3Rpbmc6IGVhZ2VyRmllbGREZXBlbmRlbmNpZXMpOwogIH0KCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNvbnN0YW50T3JOdWxsKGluaXRpYWxWYWx1ZSk7CiAgICBzaW5rLndyaXRlQm9vbChpc0luaXRpYWxpemVkSW5BbGxvY2F0b3IpOwogICAgc2luay53cml0ZUJvb2woaXNFZmZlY3RpdmVseUZpbmFsKTsKICAgIHNpbmsud3JpdGVCb29sKGlzRWxpZGVkKTsKICAgIHNpbmsud3JpdGVCb29sKGlzRWFnZXIpOwogICAgc2luay53cml0ZUludE9yTnVsbChlYWdlckNyZWF0aW9uSW5kZXgpOwogICAgc2luay53cml0ZU1lbWJlcnMoZWFnZXJGaWVsZERlcGVuZGVuY2llc0ZvclRlc3RpbmcsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIElmIGB0cnVlYCB0aGUgaW5pdGlhbGl6ZXIgZm9yIHRoaXMgZmllbGQgcmVxdWlyZXMgYSBsYXp5IGluaXRpYWxpemF0aW9uCiAgLy8vIHdyYXBwZXIuCiAgYm9vbCBnZXQgaXNMYXp5ID0+IGluaXRpYWxWYWx1ZSA9PSBudWxsICYmICFpc0VhZ2VyOwoKICBib29sIGdldCBpc0VmZmVjdGl2ZWx5Q29uc3RhbnQgPT4KICAgICAgaXNFZmZlY3RpdmVseUZpbmFsICYmIGlzRWxpZGVkICYmIGluaXRpYWxWYWx1ZSAhPSBudWxsOwoKICBDb25zdGFudFZhbHVlIGdldCBjb25zdGFudFZhbHVlID0+IGlzRWZmZWN0aXZlbHlGaW5hbCA/IGluaXRpYWxWYWx1ZSA6IG51bGw7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdGaWVsZEFuYWx5c2lzRGF0YShpbml0aWFsVmFsdWU9JHtpbml0aWFsVmFsdWU/LnRvU3RydWN0dXJlZFRleHQoKX0sJwogICAgICAnaXNJbml0aWFsaXplZEluQWxsb2NhdG9yPSRpc0luaXRpYWxpemVkSW5BbGxvY2F0b3IsJwogICAgICAnaXNFZmZlY3RpdmVseUZpbmFsPSRpc0VmZmVjdGl2ZWx5RmluYWwsaXNFbGlkZWQ9JGlzRWxpZGVkLCcKICAgICAgJ2lzRWFnZXI9JGlzRWFnZXIsZWFnZXJDcmVhdGlvbkluZGV4PSRlYWdlckNyZWF0aW9uSW5kZXgsJwogICAgICAnZWFnZXJGaWVsZERlcGVuZGVuY2llcz0kZWFnZXJGaWVsZERlcGVuZGVuY2llc0ZvclRlc3RpbmcpJzsKfQqCfQBOTjwBKAEZIyQoIzAsJSlFJhouKAEWBE1NTU5PAUhQS04SAx8DFygBMDwBODEBTR4yOwEqLy8tAT40RTcvPAgGAUFRLEUyH0IeTAE5FgwBRjNMO0NGMD8bTiJNPissKUklSxIQFRlLJD4rLClJJUwSEA4MRAoIBkEEAU02MUM8LhQGTCxGBAE7PgQBPyQEAgESKS4BMAIBGCQqATcBTwIBFiQ6ASQBDBdIJQIBFwoOCQsCARQeExUdASEnFhUBMSsVASsmFgEeKBYVFgEZFCMpJzUiNCQUBjkEAQwiAgEXSB0uAVABOAElATwtNBdKUBUsBAEyKBUZFDkpEwQBUSE4ASpBOQYBKTpINR4SCgFQPwFHJCVJDBErKCcBPCgqJjIlJRAOAUcBK0ciFxABLTwuMhoQNUg3PAFIKSsXLC88GzMtQj4dKxYbLjs3Ph0rFhswKRsSEA4mNg45STI1JUIuKSEiJE9LMDEQOSc9M0cODAoKCAEpJwEgQjgqQC8nESkKCAgBISYBUCQBS08eIAFJEghILzQzQicBMi5DMggsHhUIIUU5TA85KkAiTwFMTBhIARYBRk5PTQtRTFBLEzIiARhNGBsRRyINMFBOHCMaUCVLNDg5S0gpOCMZEig9IxkSNVNPIyMZEjgxLlEUEhAODAE7MiktDhMrDAoBOiE0IB4vRwgBJCMTBgFMFC0BT0kZMBNQJlBQQiY5JjsIASsBLAQBTxABMTsEAgE1GjMBJCchFwFRShYBSk4dIAE8ARsaLCYcGyU1AUAXAT43MScmNS88FSIkPDAcGjBDBAEoFSwuKB4dLUoTBAFODzcBJD4BTwEMF0w8Q0FDAgEzcGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0NHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3V0aWwvc2lua19hZGFwdGVyLmRhcnSBK2ltcG9ydCAnLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKCmNsYXNzIEJpbmFyeU91dHB1dFNpbmtBZGFwdGVyIGltcGxlbWVudHMgU2luazxMaXN0PGludD4+IHsKICBhcGkuQmluYXJ5T3V0cHV0U2luayBvdXRwdXQ7CgogIEJpbmFyeU91dHB1dFNpbmtBZGFwdGVyKHRoaXMub3V0cHV0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIG91dHB1dC53cml0ZShkYXRhKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICBvdXRwdXQuY2xvc2UoKTsKICB9Cn0KEwApATsfASgBDB0YBAEMERQEAgErcGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9zaW5rX2FkYXB0ZXIuZGFydDlzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnTAAE50Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5iYWNrZW5kLmFubm90YXRpb25zOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBLQ29tbW9uRWxlbWVudHMsIEtFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9kaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnQnOwppbXBvcnQgJy4uL2RpYWdub3N0aWNzL21lc3NhZ2VzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2RhcnQyanNfdGFyZ2V0LmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JzsKCmNsYXNzIFByYWdtYUFubm90YXRpb24gewogIGZpbmFsIGludCBfaW5kZXg7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgYm9vbCBmb3JGdW5jdGlvbnNPbmx5OwogIGZpbmFsIGJvb2wgZm9yRmllbGRzT25seTsKICBmaW5hbCBib29sIGludGVybmFsT25seTsKCiAgY29uc3QgUHJhZ21hQW5ub3RhdGlvbih0aGlzLl9pbmRleCwgdGhpcy5uYW1lLAogICAgICB7dGhpcy5mb3JGdW5jdGlvbnNPbmx5OiBmYWxzZSwKICAgICAgdGhpcy5mb3JGaWVsZHNPbmx5OiBmYWxzZSwKICAgICAgdGhpcy5pbnRlcm5hbE9ubHk6IGZhbHNlfSk7CgogIGludCBnZXQgaW5kZXggewogICAgYXNzZXJ0KF9pbmRleCA9PSB2YWx1ZXMuaW5kZXhPZih0aGlzKSk7CiAgICByZXR1cm4gX2luZGV4OwogIH0KCiAgLy8vIFRlbGxzIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIHRvIG5vdCBpbmxpbmUgdGhlIGFubm90YXRlZCBtZXRob2QuCiAgc3RhdGljIGNvbnN0IFByYWdtYUFubm90YXRpb24gbm9JbmxpbmUgPQogICAgICBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKDAsICdub0lubGluZScsIGZvckZ1bmN0aW9uc09ubHk6IHRydWUpOwoKICAvLy8gVGVsbHMgdGhlIG9wdGltaXppbmcgY29tcGlsZXIgdG8gYWx3YXlzIGlubGluZSB0aGUgYW5ub3RhdGVkIG1ldGhvZCwgaWYKICAvLy8gcG9zc2libGUuCiAgc3RhdGljIGNvbnN0IFByYWdtYUFubm90YXRpb24gdHJ5SW5saW5lID0KICAgICAgY29uc3QgUHJhZ21hQW5ub3RhdGlvbigxLCAndHJ5SW5saW5lJywgZm9yRnVuY3Rpb25zT25seTogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIGRpc2FibGVGaW5hbCA9IGNvbnN0IFByYWdtYUFubm90YXRpb24oCiAgICAgIDIsICdkaXNhYmxlRmluYWwnLAogICAgICBmb3JGdW5jdGlvbnNPbmx5OiB0cnVlLCBpbnRlcm5hbE9ubHk6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgUHJhZ21hQW5ub3RhdGlvbiBub0VsaXNpb24gPQogICAgICBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKDMsICdub0VsaXNpb24nKTsKCiAgLy8vIFRlbGxzIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIHRoYXQgdGhlIGFubm90YXRlZCBtZXRob2QgY2Fubm90IHRocm93LgogIC8vLyBSZXF1aXJlcyBAcHJhZ21hKCdkYXJ0MmpzOm5vSW5saW5lJykgdG8gZnVuY3Rpb24gY29ycmVjdGx5LgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIG5vVGhyb3dzID0gY29uc3QgUHJhZ21hQW5ub3RhdGlvbig0LCAnbm9UaHJvd3MnLAogICAgICBmb3JGdW5jdGlvbnNPbmx5OiB0cnVlLCBpbnRlcm5hbE9ubHk6IHRydWUpOwoKICAvLy8gVGVsbHMgdGhlIG9wdGltaXppbmcgY29tcGlsZXIgdGhhdCB0aGUgYW5ub3RhdGVkIG1ldGhvZCBoYXMgbm8KICAvLy8gc2lkZS1lZmZlY3RzLiBBbGxvY2F0aW9ucyBkb24ndCBjb3VudCBhcyBzaWRlLWVmZmVjdHMsIHNpbmNlIHRoZXkgY2FuIGJlCiAgLy8vIGRyb3BwZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgc2VtYW50aWNzIG9mIHRoZSBwcm9ncmFtLgogIC8vLwogIC8vLyBSZXF1aXJlcyBAcHJhZ21hKCdkYXJ0MmpzOm5vSW5saW5lJykgdG8gZnVuY3Rpb24gY29ycmVjdGx5LgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIG5vU2lkZUVmZmVjdHMgPSBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKAogICAgICA1LCAnbm9TaWRlRWZmZWN0cycsCiAgICAgIGZvckZ1bmN0aW9uc09ubHk6IHRydWUsIGludGVybmFsT25seTogdHJ1ZSk7CgogIC8vLyBVc2UgdGhpcyBhcyBtZXRhZGF0YSBvbiBtZXRob2QgZGVjbGFyYXRpb25zIHRvIGRpc2FibGUgY2xvc2VkIHdvcmxkCiAgLy8vIGFzc3VtcHRpb25zIG9uIHBhcmFtZXRlcnMsIGVmZmVjdGl2ZWx5IGFzc3VtaW5nIHRoYXQgdGhlIHJ1bnRpbWUgYXJndW1lbnRzCiAgLy8vIGNvdWxkIGJlIGFueSB2YWx1ZS4gTm90ZSB0aGF0IHRoZSBjb25zdHJhaW50cyBkdWUgdG8gc3RhdGljIHR5cGVzIHN0aWxsCiAgLy8vIGFwcGx5LgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIGFzc3VtZUR5bmFtaWMgPSBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKAogICAgICA2LCAnYXNzdW1lRHluYW1pYycsCiAgICAgIGZvckZ1bmN0aW9uc09ubHk6IHRydWUsIGludGVybmFsT25seTogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIGFzVHJ1c3QgPSBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKDcsICdhczp0cnVzdCcsCiAgICAgIGZvckZ1bmN0aW9uc09ubHk6IGZhbHNlLCBpbnRlcm5hbE9ubHk6IGZhbHNlKTsKCiAgc3RhdGljIGNvbnN0IFByYWdtYUFubm90YXRpb24gYXNDaGVjayA9IGNvbnN0IFByYWdtYUFubm90YXRpb24oOCwgJ2FzOmNoZWNrJywKICAgICAgZm9yRnVuY3Rpb25zT25seTogZmFsc2UsIGludGVybmFsT25seTogZmFsc2UpOwoKICBzdGF0aWMgY29uc3QgUHJhZ21hQW5ub3RhdGlvbiB0eXBlc1RydXN0ID0gY29uc3QgUHJhZ21hQW5ub3RhdGlvbigKICAgICAgOSwgJ3R5cGVzOnRydXN0JywKICAgICAgZm9yRnVuY3Rpb25zT25seTogZmFsc2UsIGludGVybmFsT25seTogZmFsc2UpOwoKICBzdGF0aWMgY29uc3QgUHJhZ21hQW5ub3RhdGlvbiB0eXBlc0NoZWNrID0gY29uc3QgUHJhZ21hQW5ub3RhdGlvbigKICAgICAgMTAsICd0eXBlczpjaGVjaycsCiAgICAgIGZvckZ1bmN0aW9uc09ubHk6IGZhbHNlLCBpbnRlcm5hbE9ubHk6IGZhbHNlKTsKCiAgc3RhdGljIGNvbnN0IFByYWdtYUFubm90YXRpb24gcGFyYW1ldGVyVHJ1c3QgPSBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKAogICAgICAxMSwgJ3BhcmFtZXRlcjp0cnVzdCcsCiAgICAgIGZvckZ1bmN0aW9uc09ubHk6IGZhbHNlLCBpbnRlcm5hbE9ubHk6IGZhbHNlKTsKCiAgc3RhdGljIGNvbnN0IFByYWdtYUFubm90YXRpb24gcGFyYW1ldGVyQ2hlY2sgPSBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKAogICAgICAxMiwgJ3BhcmFtZXRlcjpjaGVjaycsCiAgICAgIGZvckZ1bmN0aW9uc09ubHk6IGZhbHNlLCBpbnRlcm5hbE9ubHk6IGZhbHNlKTsKCiAgc3RhdGljIGNvbnN0IFByYWdtYUFubm90YXRpb24gZG93bmNhc3RUcnVzdCA9IGNvbnN0IFByYWdtYUFubm90YXRpb24oCiAgICAgIDEzLCAnZG93bmNhc3Q6dHJ1c3QnLAogICAgICBmb3JGdW5jdGlvbnNPbmx5OiBmYWxzZSwgaW50ZXJuYWxPbmx5OiBmYWxzZSk7CgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIGRvd25jYXN0Q2hlY2sgPSBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKAogICAgICAxNCwgJ2Rvd25jYXN0OmNoZWNrJywKICAgICAgZm9yRnVuY3Rpb25zT25seTogZmFsc2UsIGludGVybmFsT25seTogZmFsc2UpOwoKICBzdGF0aWMgY29uc3QgTGlzdDxQcmFnbWFBbm5vdGF0aW9uPiB2YWx1ZXMgPSBbCiAgICBub0lubGluZSwKICAgIHRyeUlubGluZSwKICAgIGRpc2FibGVGaW5hbCwKICAgIG5vRWxpc2lvbiwKICAgIG5vVGhyb3dzLAogICAgbm9TaWRlRWZmZWN0cywKICAgIGFzc3VtZUR5bmFtaWMsCiAgICBhc1RydXN0LAogICAgYXNDaGVjaywKICAgIHR5cGVzVHJ1c3QsCiAgICB0eXBlc0NoZWNrLAogICAgcGFyYW1ldGVyVHJ1c3QsCiAgICBwYXJhbWV0ZXJDaGVjaywKICAgIGRvd25jYXN0VHJ1c3QsCiAgICBkb3duY2FzdENoZWNrLAogIF07CgogIHN0YXRpYyBjb25zdCBNYXA8UHJhZ21hQW5ub3RhdGlvbiwgU2V0PFByYWdtYUFubm90YXRpb24+PiBpbXBsaWVzID0gewogICAgdHlwZXNUcnVzdDoge3BhcmFtZXRlclRydXN0LCBkb3duY2FzdFRydXN0fSwKICAgIHR5cGVzQ2hlY2s6IHtwYXJhbWV0ZXJDaGVjaywgZG93bmNhc3RDaGVja30sCiAgfTsKICBzdGF0aWMgY29uc3QgTWFwPFByYWdtYUFubm90YXRpb24sIFNldDxQcmFnbWFBbm5vdGF0aW9uPj4gZXhjbHVkZXMgPSB7CiAgICBub0lubGluZToge3RyeUlubGluZX0sCiAgICB0cnlJbmxpbmU6IHtub0lubGluZX0sCiAgICB0eXBlc1RydXN0OiB7dHlwZXNDaGVjaywgcGFyYW1ldGVyQ2hlY2ssIGRvd25jYXN0Q2hlY2t9LAogICAgdHlwZXNDaGVjazoge3R5cGVzVHJ1c3QsIHBhcmFtZXRlclRydXN0LCBkb3duY2FzdFRydXN0fSwKICAgIHBhcmFtZXRlclRydXN0OiB7cGFyYW1ldGVyQ2hlY2t9LAogICAgcGFyYW1ldGVyQ2hlY2s6IHtwYXJhbWV0ZXJUcnVzdH0sCiAgICBkb3duY2FzdFRydXN0OiB7ZG93bmNhc3RDaGVja30sCiAgICBkb3duY2FzdENoZWNrOiB7ZG93bmNhc3RUcnVzdH0sCiAgICBhc1RydXN0OiB7YXNDaGVja30sCiAgICBhc0NoZWNrOiB7YXNUcnVzdH0sCiAgfTsKICBzdGF0aWMgY29uc3QgTWFwPFByYWdtYUFubm90YXRpb24sIFNldDxQcmFnbWFBbm5vdGF0aW9uPj4gcmVxdWlyZXMgPSB7CiAgICBub1Rocm93czoge25vSW5saW5lfSwKICAgIG5vU2lkZUVmZmVjdHM6IHtub0lubGluZX0sCiAgfTsKfQoKTGlzdDxQcmFnbWFBbm5vdGF0aW9uRGF0YT4gY29tcHV0ZVByYWdtYUFubm90YXRpb25EYXRhKAogICAgS0NvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgS0VsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogIExpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IGFubm90YXRpb25zID0gW107CiAgZm9yIChDb25zdGFudFZhbHVlIGNvbnN0YW50VmFsdWUKICAgICAgaW4gZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKGVsZW1lbnQpKSB7CiAgICBpZiAoIWNvbnN0YW50VmFsdWUuaXNDb25zdHJ1Y3RlZE9iamVjdCkgY29udGludWU7CiAgICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgdmFsdWUgPSBjb25zdGFudFZhbHVlOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gdmFsdWUudHlwZS5lbGVtZW50OwogICAgYXNzZXJ0KGNscyAhPSBudWxsKTsgLy8gVW5yZXNvbHZlZCBjbGFzc2VzIG51bGwuCgogICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5tZXRhTm9JbmxpbmVDbGFzcykgewogICAgICBhbm5vdGF0aW9ucy5hZGQoY29uc3QgUHJhZ21hQW5ub3RhdGlvbkRhdGEoJ25vSW5saW5lJykpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMubWV0YVRyeUlubGluZUNsYXNzKSB7CiAgICAgIGFubm90YXRpb25zLmFkZChjb25zdCBQcmFnbWFBbm5vdGF0aW9uRGF0YSgndHJ5SW5saW5lJykpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMucHJhZ21hQ2xhc3MpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBuYW1lVmFsdWUgPQogICAgICAgICAgdmFsdWUuZmllbGRzW2NvbW1vbkVsZW1lbnRzLnByYWdtYUNsYXNzTmFtZUZpZWxkXTsKICAgICAgaWYgKG5hbWVWYWx1ZSA9PSBudWxsIHx8ICFuYW1lVmFsdWUuaXNTdHJpbmcpIGNvbnRpbnVlOwogICAgICBTdHJpbmcgbmFtZSA9IChuYW1lVmFsdWUgYXMgU3RyaW5nQ29uc3RhbnRWYWx1ZSkuc3RyaW5nVmFsdWU7CiAgICAgIFN0cmluZyBwcmVmaXggPSAnZGFydDJqczonOwogICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSBjb250aW51ZTsKICAgICAgU3RyaW5nIHN1ZmZpeCA9IG5hbWUuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpOwoKICAgICAgQ29uc3RhbnRWYWx1ZSBvcHRpb25zVmFsdWUgPQogICAgICAgICAgdmFsdWUuZmllbGRzW2NvbW1vbkVsZW1lbnRzLnByYWdtYUNsYXNzT3B0aW9uc0ZpZWxkXTsKICAgICAgYW5ub3RhdGlvbnMuYWRkKAogICAgICAgICAgbmV3IFByYWdtYUFubm90YXRpb25EYXRhKHN1ZmZpeCwgaGFzT3B0aW9uczogIW9wdGlvbnNWYWx1ZS5pc051bGwpKTsKICAgIH0KICB9CiAgcmV0dXJuIGFubm90YXRpb25zOwp9CgpFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IHByb2Nlc3NNZW1iZXJBbm5vdGF0aW9ucygKICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgaXIuTWVtYmVyIG1lbWJlciwKICAgIExpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IHByYWdtYUFubm90YXRpb25EYXRhKSB7CiAgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucyA9IG5ldyBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+KCk7CgogIFVyaSB1cmkgPSBtZW1iZXIuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmk7CiAgYm9vbCBwbGF0Zm9ybUFubm90YXRpb25zQWxsb3dlZCA9CiAgICAgIG9wdGlvbnMudGVzdE1vZGUgfHwgdXJpLnNjaGVtZSA9PSAnZGFydCcgfHwgbWF5YmVFbmFibGVOYXRpdmUodXJpKTsKCiAgZm9yIChQcmFnbWFBbm5vdGF0aW9uRGF0YSBkYXRhIGluIHByYWdtYUFubm90YXRpb25EYXRhKSB7CiAgICBTdHJpbmcgbmFtZSA9IGRhdGEubmFtZTsKICAgIFN0cmluZyBzdWZmaXggPSBkYXRhLnN1ZmZpeDsKICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgIGZvciAoUHJhZ21hQW5ub3RhdGlvbiBhbm5vdGF0aW9uIGluIFByYWdtYUFubm90YXRpb24udmFsdWVzKSB7CiAgICAgIGlmIChhbm5vdGF0aW9uLm5hbWUgPT0gc3VmZml4KSB7CiAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgIGFubm90YXRpb25zLmFkZChhbm5vdGF0aW9uKTsKCiAgICAgICAgaWYgKGRhdGEuaGFzT3B0aW9ucykgewogICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG1lbWJlciksCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICAgICAgICB7J3RleHQnOiAiQHByYWdtYSgnJG5hbWUnKSBhbm5vdGF0aW9uIGRvZXMgbm90IHRha2Ugb3B0aW9ucyJ9KTsKICAgICAgICB9CiAgICAgICAgaWYgKGFubm90YXRpb24uZm9yRnVuY3Rpb25zT25seSkgewogICAgICAgICAgaWYgKG1lbWJlciBpcyEgaXIuUHJvY2VkdXJlICYmIG1lbWJlciBpcyEgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobWVtYmVyKSwgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAgICAgICAgICd0ZXh0JzogIkBwcmFnbWEoJyRuYW1lJykgYW5ub3RhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCAiCiAgICAgICAgICAgICAgICAgICJmb3IgbWV0aG9kcyBhbmQgY29uc3RydWN0b3JzLiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhbm5vdGF0aW9uLmZvckZpZWxkc09ubHkpIHsKICAgICAgICAgIGlmIChtZW1iZXIgaXMhIGlyLkZpZWxkKSB7CiAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG1lbWJlciksIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsKICAgICAgICAgICAgICAndGV4dCc6ICJAcHJhZ21hKCckbmFtZScpIGFubm90YXRpb24gaXMgb25seSBzdXBwb3J0ZWQgIgogICAgICAgICAgICAgICAgICAiZm9yIGZpZWxkcy4iCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoYW5ub3RhdGlvbi5pbnRlcm5hbE9ubHkgJiYgIXBsYXRmb3JtQW5ub3RhdGlvbnNBbGxvd2VkKSB7CiAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobWVtYmVyKSwKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgICAgICAgIHsndGV4dCc6ICJVbnJlY29nbml6ZWQgZGFydDJqcyBwcmFnbWEgQHByYWdtYSgnJG5hbWUnKSJ9KTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghZm91bmQpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobWVtYmVyKSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgICB7J3RleHQnOiAiVW5rbm93biBkYXJ0MmpzIHByYWdtYSBAcHJhZ21hKCckbmFtZScpIn0pOwogICAgfQogIH0KCiAgTWFwPFByYWdtYUFubm90YXRpb24sIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4+IHJlcG9ydGVkRXhjbHVzaW9ucyA9IHt9OwogIGZvciAoUHJhZ21hQW5ub3RhdGlvbiBhbm5vdGF0aW9uCiAgICAgIGluIGFubm90YXRpb25zLml0ZXJhYmxlKFByYWdtYUFubm90YXRpb24udmFsdWVzKSkgewogICAgU2V0PFByYWdtYUFubm90YXRpb24+IGltcGxpZXMgPSBQcmFnbWFBbm5vdGF0aW9uLmltcGxpZXNbYW5ub3RhdGlvbl07CiAgICBpZiAoaW1wbGllcyAhPSBudWxsKSB7CiAgICAgIGZvciAoUHJhZ21hQW5ub3RhdGlvbiBvdGhlciBpbiBpbXBsaWVzKSB7CiAgICAgICAgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKG90aGVyKSkgewogICAgICAgICAgcmVwb3J0ZXIucmVwb3J0SGludE1lc3NhZ2UoCiAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobWVtYmVyKSwgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAgICAgICAndGV4dCc6ICJAcHJhZ21hKCdkYXJ0MmpzOiR7YW5ub3RhdGlvbi5uYW1lfScpIGltcGxpZXMgIgogICAgICAgICAgICAgICAgIkBwcmFnbWEoJ2RhcnQyanM6JHtvdGhlci5uYW1lfScpLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgU2V0PFByYWdtYUFubm90YXRpb24+IGV4Y2x1ZGVzID0gUHJhZ21hQW5ub3RhdGlvbi5leGNsdWRlc1thbm5vdGF0aW9uXTsKICAgIGlmIChleGNsdWRlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoUHJhZ21hQW5ub3RhdGlvbiBvdGhlciBpbiBleGNsdWRlcykgewogICAgICAgIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhvdGhlcikgJiYKICAgICAgICAgICAgIShyZXBvcnRlZEV4Y2x1c2lvbnNbb3RoZXJdPy5jb250YWlucyhhbm5vdGF0aW9uKSA/PyBmYWxzZSkpIHsKICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShtZW1iZXIpLCBNZXNzYWdlS2luZC5HRU5FUklDLCB7CiAgICAgICAgICAgICd0ZXh0JzogIkBwcmFnbWEoJ2RhcnQyanM6JHthbm5vdGF0aW9uLm5hbWV9JykgbXVzdCBub3QgYmUgdXNlZCAiCiAgICAgICAgICAgICAgICAid2l0aCBAcHJhZ21hKCdkYXJ0MmpzOiR7b3RoZXIubmFtZX0nKS4iCiAgICAgICAgICB9KTsKICAgICAgICAgIChyZXBvcnRlZEV4Y2x1c2lvbnNbYW5ub3RhdGlvbl0gPz89IG5ldyBFbnVtU2V0KCkpLmFkZChvdGhlcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBTZXQ8UHJhZ21hQW5ub3RhdGlvbj4gcmVxdWlyZXMgPSBQcmFnbWFBbm5vdGF0aW9uLnJlcXVpcmVzW2Fubm90YXRpb25dOwogICAgaWYgKHJlcXVpcmVzICE9IG51bGwpIHsKICAgICAgZm9yIChQcmFnbWFBbm5vdGF0aW9uIG90aGVyIGluIHJlcXVpcmVzKSB7CiAgICAgICAgaWYgKCFhbm5vdGF0aW9ucy5jb250YWlucyhvdGhlcikpIHsKICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShtZW1iZXIpLCBNZXNzYWdlS2luZC5HRU5FUklDLCB7CiAgICAgICAgICAgICd0ZXh0JzogIkBwcmFnbWEoJ2RhcnQyanM6JHthbm5vdGF0aW9uLm5hbWV9Jykgc2hvdWxkIGFsd2F5cyBiZSAiCiAgICAgICAgICAgICAgICAiY29tYmluZWQgd2l0aCBAcHJhZ21hKCdkYXJ0MmpzOiR7b3RoZXIubmFtZX0nKS4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGFubm90YXRpb25zOwp9CgphYnN0cmFjdCBjbGFzcyBBbm5vdGF0aW9uc0RhdGEgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQW5ub3RhdGlvbnNEYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEFubm90YXRpb25zRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywgRGF0YVNvdXJjZSBzb3VyY2UpID0KICAgICAgQW5ub3RhdGlvbnNEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2U7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0Fubm90YXRpb25zRGF0YV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaGFzIGFuIGBAcHJhZ21hKCdkYXJ0MmpzOmFzc3VtZUR5bmFtaWMnKWAgYW5ub3RhdGlvbi4KICBib29sIGhhc0Fzc3VtZUR5bmFtaWMoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBoYXMgYSBgQHByYWdtYSgnZGFydDJqczpub0lubGluZScpYCwgb3IKICAvLy8gYEBwcmFnbWEoJ2RhcnQyanM6bm9JbmxpbmUnKWAgYW5ub3RhdGlvbi4KICBib29sIGhhc05vSW5saW5lKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaGFzIGEgYEBwcmFnbWEoJ2RhcnQyanM6dHJ5SW5saW5lJylgLCBvcgogIC8vLyBgQHByYWdtYSgnZGFydDJqczp0cnlJbmxpbmUnKWAgYW5ub3RhdGlvbi4KICBib29sIGhhc1RyeUlubGluZShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGhhcyBhIGBAcHJhZ21hKCdkYXJ0MmpzOmRpc2FibGVGaW5hbCcpYAogIC8vLyBhbm5vdGF0aW9uLgogIGJvb2wgaGFzRGlzYWJsZUZpbmFsKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaGFzIGEgYEBwcmFnbWEoJ2RhcnQyanM6bm9FbGlzaW9uJylgCiAgLy8vIGFubm90YXRpb24uCiAgYm9vbCBoYXNOb0VsaXNpb24oTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBoYXMgYSBgQE5vVGhyb3dzKClgIGFubm90YXRpb24uCiAgYm9vbCBoYXNOb1Rocm93cyhNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGhhcyBhIGBATm9TaWRlRWZmZWN0cygpYCBhbm5vdGF0aW9uLgogIGJvb2wgaGFzTm9TaWRlRWZmZWN0cyhNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgYWxsIGZ1bmN0aW9ucyB3aXRoIGEgYEBwcmFnbWEoJ2RhcnQyanM6bm9JbmxpbmUnKWAsIG9yCiAgLy8vIGBAcHJhZ21hKCdkYXJ0MmpzOm5vSW5saW5lJylgIGFubm90YXRpb24uCiAgdm9pZCBmb3JFYWNoTm9JbmxpbmUodm9pZCBmKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGFsbCBmdW5jdGlvbnMgd2l0aCBhIGBAcHJhZ21hKCdkYXJ0MmpzOnRyeUlubGluZScpYCwgb3IKICAvLy8gYEBwcmFnbWEoJ2RhcnQyanM6dHJ5SW5saW5lJylgIGFubm90YXRpb24uCiAgdm9pZCBmb3JFYWNoVHJ5SW5saW5lKHZvaWQgZihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBhbGwgZnVuY3Rpb25zIHdpdGggYSBgQHByYWdtYSgnZGFydDJqczpub1Rocm93cycpYAogIC8vLyBhbm5vdGF0aW9uLgogIHZvaWQgZm9yRWFjaE5vVGhyb3dzKHZvaWQgZihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBhbGwgZnVuY3Rpb25zIHdpdGggYSBgQHByYWdtYSgnZGFydDJqczpub1NpZGVFZmZlY3RzJylgCiAgLy8vIGFubm90YXRpb24uCiAgdm9pZCBmb3JFYWNoTm9TaWRlRWZmZWN0cyh2b2lkIGYoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pKTsKCiAgLy8vIFdoYXQgc2hvdWxkIHRoZSBjb21waWxlciBkbyB3aXRoIHBhcmFtZXRlciB0eXBlIGFzc2VydGlvbnMgaW4gW21lbWJlcl0uCiAgLy8vCiAgLy8vIElmIFttZW1iZXJdIGlzIGBudWxsYCwgdGhlIGRlZmF1bHQgcG9saWN5IGlzIHJldHVybmVkLgogIENoZWNrUG9saWN5IGdldFBhcmFtZXRlckNoZWNrUG9saWN5KE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gV2hhdCBzaG91bGQgdGhlIGNvbXBpbGVyIGRvIHdpdGggaW1wbGljaXQgZG93bmNhc3RzIGluIFttZW1iZXJdLgogIC8vLwogIC8vLyBJZiBbbWVtYmVyXSBpcyBgbnVsbGAsIHRoZSBkZWZhdWx0IHBvbGljeSBpcyByZXR1cm5lZC4KICBDaGVja1BvbGljeSBnZXRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3koTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBXaGF0IHRoZSBjb21waWxlciBzaG91bGQgZG8gd2l0aCBhIGJvb2xlYW4gdmFsdWUgaW4gYSBjb25kaXRpb24gY29udGV4dAogIC8vLyBpbiBbbWVtYmVyXSB3aGVuIHRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIHNheXMgaXQgaXMgYSBydW50aW1lIGVycm9yIGZvcgogIC8vLyBpdCB0byBiZSBudWxsLgogIC8vLwogIC8vLyBJZiBbbWVtYmVyXSBpcyBgbnVsbGAsIHRoZSBkZWZhdWx0IHBvbGljeSBpcyByZXR1cm5lZC4KICBDaGVja1BvbGljeSBnZXRDb25kaXRpb25DaGVja1BvbGljeShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFdoZXRoZXIgc2hvdWxkIHRoZSBjb21waWxlciBkbyB3aXRoIGV4cGxpY2l0IGNhc3RzIGluIFttZW1iZXJdLgogIC8vLwogIC8vLyBJZiBbbWVtYmVyXSBpcyBgbnVsbGAsIHRoZSBkZWZhdWx0IHBvbGljeSBpcyByZXR1cm5lZC4KICBDaGVja1BvbGljeSBnZXRFeHBsaWNpdENhc3RDaGVja1BvbGljeShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKfQoKY2xhc3MgQW5ub3RhdGlvbnNEYXRhSW1wbCBpbXBsZW1lbnRzIEFubm90YXRpb25zRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtBbm5vdGF0aW9uc0RhdGFdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnYW5ub3RhdGlvbnMtZGF0YSc7CgogIGZpbmFsIENoZWNrUG9saWN5IF9kZWZhdWx0UGFyYW1ldGVyQ2hlY2tQb2xpY3k7CiAgZmluYWwgQ2hlY2tQb2xpY3kgX2RlZmF1bHRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3k7CiAgZmluYWwgQ2hlY2tQb2xpY3kgX2RlZmF1bHRDb25kaXRpb25DaGVja1BvbGljeTsKICBmaW5hbCBDaGVja1BvbGljeSBfZGVmYXVsdEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5OwogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4+IHByYWdtYUFubm90YXRpb25zOwoKICBBbm5vdGF0aW9uc0RhdGFJbXBsKENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLCB0aGlzLnByYWdtYUFubm90YXRpb25zKQogICAgICA6IHRoaXMuX2RlZmF1bHRQYXJhbWV0ZXJDaGVja1BvbGljeSA9IG9wdGlvbnMuZGVmYXVsdFBhcmFtZXRlckNoZWNrUG9saWN5LAogICAgICAgIHRoaXMuX2RlZmF1bHRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3kgPQogICAgICAgICAgICBvcHRpb25zLmRlZmF1bHRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3ksCiAgICAgICAgdGhpcy5fZGVmYXVsdENvbmRpdGlvbkNoZWNrUG9saWN5ID0gb3B0aW9ucy5kZWZhdWx0Q29uZGl0aW9uQ2hlY2tQb2xpY3ksCiAgICAgICAgdGhpcy5fZGVmYXVsdEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5ID0KICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3k7CgogIGZhY3RvcnkgQW5ub3RhdGlvbnNEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLCBEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+PiBwcmFnbWFBbm5vdGF0aW9ucyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJNYXAoCiAgICAgICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBuZXcgRW51bVNldC5mcm9tVmFsdWUoc291cmNlLnJlYWRJbnQoKSkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBBbm5vdGF0aW9uc0RhdGFJbXBsKG9wdGlvbnMsIHByYWdtYUFubm90YXRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAocHJhZ21hQW5ub3RhdGlvbnMsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gc2V0KSB7CiAgICAgIHNpbmsud3JpdGVJbnQoc2V0LnZhbHVlKTsKICAgIH0pOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIGJvb2wgX2hhc1ByYWdtYShNZW1iZXJFbnRpdHkgbWVtYmVyLCBQcmFnbWFBbm5vdGF0aW9uIGFubm90YXRpb24pIHsKICAgIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gc2V0ID0gcHJhZ21hQW5ub3RhdGlvbnNbbWVtYmVyXTsKICAgIHJldHVybiBzZXQgIT0gbnVsbCAmJiBzZXQuY29udGFpbnMoYW5ub3RhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0Fzc3VtZUR5bmFtaWMoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgX2hhc1ByYWdtYShtZW1iZXIsIFByYWdtYUFubm90YXRpb24uYXNzdW1lRHluYW1pYyk7CgogIEBvdmVycmlkZQogIGJvb2wgaGFzTm9JbmxpbmUoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgX2hhc1ByYWdtYShtZW1iZXIsIFByYWdtYUFubm90YXRpb24ubm9JbmxpbmUpOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc1RyeUlubGluZShNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICBfaGFzUHJhZ21hKG1lbWJlciwgUHJhZ21hQW5ub3RhdGlvbi50cnlJbmxpbmUpOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc0Rpc2FibGVGaW5hbChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICBfaGFzUHJhZ21hKG1lbWJlciwgUHJhZ21hQW5ub3RhdGlvbi5kaXNhYmxlRmluYWwpOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc05vRWxpc2lvbihNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICBfaGFzUHJhZ21hKG1lbWJlciwgUHJhZ21hQW5ub3RhdGlvbi5ub0VsaXNpb24pOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc05vVGhyb3dzKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgIF9oYXNQcmFnbWEobWVtYmVyLCBQcmFnbWFBbm5vdGF0aW9uLm5vVGhyb3dzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNOb1NpZGVFZmZlY3RzKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgIF9oYXNQcmFnbWEobWVtYmVyLCBQcmFnbWFBbm5vdGF0aW9uLm5vU2lkZUVmZmVjdHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hOb0lubGluZSh2b2lkIGYoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pKSB7CiAgICBwcmFnbWFBbm5vdGF0aW9ucwogICAgICAgIC5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IHNldCkgewogICAgICBpZiAoc2V0LmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24ubm9JbmxpbmUpKSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFRyeUlubGluZSh2b2lkIGYoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pKSB7CiAgICBwcmFnbWFBbm5vdGF0aW9ucwogICAgICAgIC5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IHNldCkgewogICAgICBpZiAoc2V0LmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24udHJ5SW5saW5lKSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hOb1Rocm93cyh2b2lkIGYoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pKSB7CiAgICBwcmFnbWFBbm5vdGF0aW9ucwogICAgICAgIC5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IHNldCkgewogICAgICBpZiAoc2V0LmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24ubm9UaHJvd3MpKSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaE5vU2lkZUVmZmVjdHModm9pZCBmKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSkgewogICAgcHJhZ21hQW5ub3RhdGlvbnMKICAgICAgICAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBzZXQpIHsKICAgICAgaWYgKHNldC5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLm5vU2lkZUVmZmVjdHMpKSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIENoZWNrUG9saWN5IGdldFBhcmFtZXRlckNoZWNrUG9saWN5KE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgIT0gbnVsbCkgewogICAgICBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IGFubm90YXRpb25zID0gcHJhZ21hQW5ub3RhdGlvbnNbbWVtYmVyXTsKICAgICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgICBpZiAoYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi50eXBlc1RydXN0KSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LnRydXN0ZWQ7CiAgICAgICAgfSBlbHNlIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLnR5cGVzQ2hlY2spKSB7CiAgICAgICAgICByZXR1cm4gQ2hlY2tQb2xpY3kuY2hlY2tlZDsKICAgICAgICB9IGVsc2UgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24ucGFyYW1ldGVyVHJ1c3QpKSB7CiAgICAgICAgICByZXR1cm4gQ2hlY2tQb2xpY3kudHJ1c3RlZDsKICAgICAgICB9IGVsc2UgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24ucGFyYW1ldGVyQ2hlY2spKSB7CiAgICAgICAgICByZXR1cm4gQ2hlY2tQb2xpY3kuY2hlY2tlZDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfZGVmYXVsdFBhcmFtZXRlckNoZWNrUG9saWN5OwogIH0KCiAgQG92ZXJyaWRlCiAgQ2hlY2tQb2xpY3kgZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5KE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgIT0gbnVsbCkgewogICAgICBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IGFubm90YXRpb25zID0gcHJhZ21hQW5ub3RhdGlvbnNbbWVtYmVyXTsKICAgICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgICBpZiAoYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi50eXBlc1RydXN0KSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LnRydXN0ZWQ7CiAgICAgICAgfSBlbHNlIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLnR5cGVzQ2hlY2spKSB7CiAgICAgICAgICByZXR1cm4gQ2hlY2tQb2xpY3kuY2hlY2tlZDsKICAgICAgICB9IGVsc2UgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24uZG93bmNhc3RUcnVzdCkpIHsKICAgICAgICAgIHJldHVybiBDaGVja1BvbGljeS50cnVzdGVkOwogICAgICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi5kb3duY2FzdENoZWNrKSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2RlZmF1bHRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3k7CiAgfQoKICBAb3ZlcnJpZGUKICBDaGVja1BvbGljeSBnZXRDb25kaXRpb25DaGVja1BvbGljeShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyICE9IG51bGwpIHsKICAgICAgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucyA9IHByYWdtYUFubm90YXRpb25zW21lbWJlcl07CiAgICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24udHlwZXNUcnVzdCkpIHsKICAgICAgICAgIHJldHVybiBDaGVja1BvbGljeS50cnVzdGVkOwogICAgICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi50eXBlc0NoZWNrKSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICAgICAgfSBlbHNlIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLmRvd25jYXN0VHJ1c3QpKSB7CiAgICAgICAgICByZXR1cm4gQ2hlY2tQb2xpY3kudHJ1c3RlZDsKICAgICAgICB9IGVsc2UgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24uZG93bmNhc3RDaGVjaykpIHsKICAgICAgICAgIHJldHVybiBDaGVja1BvbGljeS5jaGVja2VkOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9kZWZhdWx0Q29uZGl0aW9uQ2hlY2tQb2xpY3k7CiAgfQoKICBAb3ZlcnJpZGUKICBDaGVja1BvbGljeSBnZXRFeHBsaWNpdENhc3RDaGVja1BvbGljeShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyICE9IG51bGwpIHsKICAgICAgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucyA9IHByYWdtYUFubm90YXRpb25zW21lbWJlcl07CiAgICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24uYXNUcnVzdCkpIHsKICAgICAgICAgIHJldHVybiBDaGVja1BvbGljeS50cnVzdGVkOwogICAgICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi5hc0NoZWNrKSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2RlZmF1bHRFeHBsaWNpdENhc3RDaGVja1BvbGljeTsKICB9Cn0KCmNsYXNzIEFubm90YXRpb25zRGF0YUJ1aWxkZXIgewogIE1hcDxNZW1iZXJFbnRpdHksIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4+IHByYWdtYUFubm90YXRpb25zID0ge307CgogIHZvaWQgcmVnaXN0ZXJQcmFnbWFBbm5vdGF0aW9ucygKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucykgewogICAgaWYgKGFubm90YXRpb25zLmlzTm90RW1wdHkpIHsKICAgICAgcHJhZ21hQW5ub3RhdGlvbnNbbWVtYmVyXSA9IGFubm90YXRpb25zOwogICAgfQogIH0KCiAgQW5ub3RhdGlvbnNEYXRhIGNsb3NlKENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CiAgICByZXR1cm4gbmV3IEFubm90YXRpb25zRGF0YUltcGwob3B0aW9ucywgcHJhZ21hQW5ub3RhdGlvbnMpOwogIH0KfQqCMABOTjwBKAEoARlMIzInJCEaKBouHwEZFBUfHBsBMSUhIgESLBMEAUgrRQFOECxGAUcZMwEsLgFMQlEzAUVPPQZCSBozAUpRTg1IGjMBUDUBUDUBRRg1AUUZNQFJHTUBSR01AUgcNQFIHDUBMQ4PEg8OExMNDRAQFBQTEwUBSDExBUkbGz09JiYkJBgYBUkaHwUCATgkLBwvIzo2NCo1ATM/O0A0ID0+RCIuNQEjQBdPBgQWAgE0HSEWN0sBLyRKATwdIRhDJxYlAR8nNSNOCitGKU5HMhAMCiglKU5HIBAMCkYnNSNJCg8IBhIjMR9ABgQBTCM6ShswKyZMRTQOCggGTBwxK0snTE45DkkKCAZMHDEsJ0xOQg4KCAYEFgIBIT0uOC4BMycBVy4BSTApAUoxKgFJEi0BRhIqAUEpAUYuAUswOQFMMToBRxI5AUwSPgFOBj08AUcGPUMBTlEVBj08AUYGPT8CATdJHTABMjkyNUgBR1EzOFEvNAEyNBdFHk8VQAQBDCgVKz8gCBMEAUY/NAQBDDA6AQwrNQEMLDYBDC85AQwsNgEMKzUBDDA6AQw6Fkg1EwgIBAEMOxZINhMICAQBDDoWSDUTCAgEAQw/Fkg6EwgIBAEMPRpJIUEmSCZMJkwmCggGKQQBDEQaSSFBJkgmSyZLJgoIBjAEAQw9GkkhQSZIJksmSyYKCAYpBAEMQBpJIT4mRSYKCAYsBAIBH0cBIkQiLwYEATNABAIBMHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydMAAcxEvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0Om1hdGgnIGFzIE1hdGg7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JzsKaW1wb3J0ICdjYWxsX3N0cnVjdHVyZS5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VXNhZ2U8VD4gewogIGZpbmFsIEVudW1TZXQ8VD4gX3BlbmRpbmdVc2U7CgogIEFic3RyYWN0VXNhZ2UuY2xvbmVkKHRoaXMuX3BlbmRpbmdVc2UpOwoKICBBYnN0cmFjdFVzYWdlKCkgOiB0aGlzLl9wZW5kaW5nVXNlID0gbmV3IEVudW1TZXQ8VD4oKSB7CiAgICBfcGVuZGluZ1VzZS5hZGRBbGwoX29yaWdpbmFsVXNlKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB1c2VzIG9mIFtlbnRpdHldIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuCiAgRW51bVNldDxUPiBnZXQgX2FwcGxpZWRVc2UgPT4gX29yaWdpbmFsVXNlLm1pbnVzKF9wZW5kaW5nVXNlKTsKCiAgRW51bVNldDxUPiBnZXQgX29yaWdpbmFsVXNlOwoKICAvLy8gYHRydWVgIGlmIHRoZSBbX2FwcGxpZWRVc2VdIGlzIG5vbi1lbXB0eS4KICBib29sIGdldCBoYXNVc2UgPT4gX2FwcGxpZWRVc2UuaXNOb3RFbXB0eTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtvdGhlcl0gaGFzIHRoZSBzYW1lIG9yaWdpbmFsIGFuZCBwZW5kaW5nIHVzYWdlIGFzIHRoaXMuCiAgYm9vbCBoYXNTYW1lVXNhZ2UoQWJzdHJhY3RVc2FnZTxUPiBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIF9vcmlnaW5hbFVzZS52YWx1ZSA9PSBvdGhlci5fb3JpZ2luYWxVc2UudmFsdWUgJiYKICAgICAgICBfcGVuZGluZ1VzZS52YWx1ZSA9PSBvdGhlci5fcGVuZGluZ1VzZS52YWx1ZTsKICB9Cn0KCi8vLyBSZWdpc3RyeSBmb3IgdGhlIG9ic2VydmVkIHVzZSBvZiBhIG1lbWJlciBbZW50aXR5XSBpbiB0aGUgb3BlbiB3b3JsZC4KYWJzdHJhY3QgY2xhc3MgTWVtYmVyVXNhZ2UgZXh0ZW5kcyBBYnN0cmFjdFVzYWdlPE1lbWJlclVzZT4gewogIC8vLyBDb25zdGFudCBlbXB0eSBhY2Nlc3Mgc2V0IHVzZWQgYXMgdGhlIHBvdGVudGlhbCBhY2Nlc3Mgc2V0IGZvciBpbXBvc3NpYmxlCiAgLy8vIGFjY2Vzc2VzLCBmb3IgaW5zdGFuY2Ugd3JpdGluZyB0byBhIGZpbmFsIGZpZWxkIG9yIGludm9raW5nIGEgc2V0dGVyLgogIHN0YXRpYyBjb25zdCBFbnVtU2V0PEFjY2Vzcz4gZW1wdHlTZXQgPSBjb25zdCBFbnVtU2V0LmZpeGVkKDApOwoKICBmaW5hbCBNZW1iZXJFbnRpdHkgZW50aXR5OwoKICBNZW1iZXJVc2FnZS5pbnRlcm5hbCh0aGlzLmVudGl0eSkgOiBzdXBlcigpOwoKICBNZW1iZXJVc2FnZS5jbG9uZWQodGhpcy5lbnRpdHksIEVudW1TZXQ8TWVtYmVyVXNlPiBwZW5kaW5nVXNlKQogICAgICA6IHN1cGVyLmNsb25lZChwZW5kaW5nVXNlKTsKCiAgZmFjdG9yeSBNZW1iZXJVc2FnZShNZW1iZXJFbnRpdHkgbWVtYmVyLCB7TWVtYmVyQWNjZXNzIHBvdGVudGlhbEFjY2Vzc30pIHsKICAgIC8vLyBDcmVhdGUgdGhlIHNldCBvZiBwb3RlbnRpYWwgYWNjZXNzZXMgdG8gW21lbWJlcl0sIGxpbWl0ZWQgdG8gW29yaWdpbmFsXQogICAgLy8vIGlmIHByb3ZpZGVkLgogICAgRW51bVNldDxBY2Nlc3M+IGNyZWF0ZVBvdGVudGlhbEFjY2Vzc1NldChFbnVtU2V0PEFjY2Vzcz4gb3JpZ2luYWwpIHsKICAgICAgaWYgKG9yaWdpbmFsICE9IG51bGwpIHsKICAgICAgICBpZiAob3JpZ2luYWwuaXNFbXB0eSkgcmV0dXJuIGVtcHR5U2V0OwogICAgICAgIHJldHVybiBvcmlnaW5hbC5jbG9uZSgpOwogICAgICB9CiAgICAgIGlmIChtZW1iZXIuaXNUb3BMZXZlbCB8fCBtZW1iZXIuaXNTdGF0aWMgfHwgbWVtYmVyLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUcmFjayBzdXBlciBjb25zdHJ1Y3RvciBpbnZvY2F0aW9ucz8KICAgICAgICByZXR1cm4gbmV3IEVudW1TZXQuZnJvbVZhbHVlcyhbQWNjZXNzLnN0YXRpY0FjY2Vzc10pOwogICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBFbnVtU2V0LmZyb21WYWx1ZXMoQWNjZXNzLnZhbHVlcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KG1lbWJlciBpcyBKUmVjb3JkRmllbGQsICJVbmV4cGVjdGVkIG1lbWJlcjogJG1lbWJlciIpOwogICAgICAgIHJldHVybiBuZXcgRW51bVNldCgpOwogICAgICB9CiAgICB9CgogICAgLy8vIENyZWF0ZSB0aGUgc2V0IG9mIHBvdGVudGlhbCByZWFkIGFjY2Vzc2VzIHRvIFttZW1iZXJdLCBsaW1pdGVkIHRvIHJlYWRzCiAgICAvLy8gaW4gW3BvdGVudGlhbEFjY2Vzc10gaWYgcHJvdmlkZWQuCiAgICBFbnVtU2V0PEFjY2Vzcz4gY3JlYXRlUG90ZW50aWFsUmVhZHMoKSB7CiAgICAgIHJldHVybiBjcmVhdGVQb3RlbnRpYWxBY2Nlc3NTZXQocG90ZW50aWFsQWNjZXNzPy5yZWFkcyk7CiAgICB9CgogICAgLy8vIENyZWF0ZSB0aGUgc2V0IG9mIHBvdGVudGlhbCB3cml0ZSBhY2Nlc3NlcyB0byBbbWVtYmVyXSwgbGltaXRlZCB0bwogICAgLy8vIHdyaXRlcyBpbiBbcG90ZW50aWFsQWNjZXNzXSBpZiBwcm92aWRlZC4KICAgIEVudW1TZXQ8QWNjZXNzPiBjcmVhdGVQb3RlbnRpYWxXcml0ZXMoKSB7CiAgICAgIHJldHVybiBjcmVhdGVQb3RlbnRpYWxBY2Nlc3NTZXQocG90ZW50aWFsQWNjZXNzPy53cml0ZXMpOwogICAgfQoKICAgIC8vLyBDcmVhdGUgdGhlIHNldCBvZiBwb3RlbnRpYWwgaW52b2NhdGlvbiBhY2Nlc3NlcyB0byBbbWVtYmVyXSwgbGltaXRlZCB0bwogICAgLy8vIGludm9jYXRpb25zIGluIFtwb3RlbnRpYWxBY2Nlc3NdIGlmIHByb3ZpZGVkLgogICAgRW51bVNldDxBY2Nlc3M+IGNyZWF0ZVBvdGVudGlhbEludm9rZXMoKSB7CiAgICAgIHJldHVybiBjcmVhdGVQb3RlbnRpYWxBY2Nlc3NTZXQocG90ZW50aWFsQWNjZXNzPy5pbnZva2VzKTsKICAgIH0KCiAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgaWYgKG1lbWJlci5pc0Fzc2lnbmFibGUpIHsKICAgICAgICByZXR1cm4gbmV3IEZpZWxkVXNhZ2UobWVtYmVyLAogICAgICAgICAgICBwb3RlbnRpYWxSZWFkczogY3JlYXRlUG90ZW50aWFsUmVhZHMoKSwKICAgICAgICAgICAgcG90ZW50aWFsV3JpdGVzOiBjcmVhdGVQb3RlbnRpYWxXcml0ZXMoKSwKICAgICAgICAgICAgcG90ZW50aWFsSW52b2tlczogY3JlYXRlUG90ZW50aWFsSW52b2tlcygpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IEZpZWxkVXNhZ2UobWVtYmVyLAogICAgICAgICAgICBwb3RlbnRpYWxSZWFkczogY3JlYXRlUG90ZW50aWFsUmVhZHMoKSwKICAgICAgICAgICAgcG90ZW50aWFsV3JpdGVzOiBlbXB0eVNldCwKICAgICAgICAgICAgcG90ZW50aWFsSW52b2tlczogY3JlYXRlUG90ZW50aWFsSW52b2tlcygpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChtZW1iZXIuaXNHZXR0ZXIpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9wZXJ0eVVzYWdlKG1lbWJlciwKICAgICAgICAgIHBvdGVudGlhbFJlYWRzOiBjcmVhdGVQb3RlbnRpYWxSZWFkcygpLAogICAgICAgICAgcG90ZW50aWFsV3JpdGVzOiBlbXB0eVNldCwKICAgICAgICAgIHBvdGVudGlhbEludm9rZXM6IGNyZWF0ZVBvdGVudGlhbEludm9rZXMoKSk7CiAgICB9IGVsc2UgaWYgKG1lbWJlci5pc1NldHRlcikgewogICAgICByZXR1cm4gbmV3IFByb3BlcnR5VXNhZ2UobWVtYmVyLAogICAgICAgICAgcG90ZW50aWFsUmVhZHM6IGVtcHR5U2V0LAogICAgICAgICAgcG90ZW50aWFsV3JpdGVzOiBjcmVhdGVQb3RlbnRpYWxXcml0ZXMoKSwKICAgICAgICAgIHBvdGVudGlhbEludm9rZXM6IGVtcHR5U2V0KTsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuIG5ldyBNZXRob2RVc2FnZShtZW1iZXIsCiAgICAgICAgICBwb3RlbnRpYWxSZWFkczogZW1wdHlTZXQsIHBvdGVudGlhbEludm9rZXM6IGNyZWF0ZVBvdGVudGlhbEludm9rZXMoKSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5LAogICAgICAgICAgZmFpbGVkQXQobWVtYmVyLCAiVW5leHBlY3RlZCBtZW1iZXI6ICRtZW1iZXIiKSk7CiAgICAgIHJldHVybiBuZXcgTWV0aG9kVXNhZ2UobWVtYmVyLAogICAgICAgICAgcG90ZW50aWFsUmVhZHM6IGNyZWF0ZVBvdGVudGlhbFJlYWRzKCksCiAgICAgICAgICBwb3RlbnRpYWxJbnZva2VzOiBjcmVhdGVQb3RlbnRpYWxJbnZva2VzKCkpOwogICAgfQogIH0KCiAgLy8vIGB0cnVlYCBpZiBbZW50aXR5XSBoYXMgYmVlbiBpbml0aWFsaXplZC4KICBib29sIGdldCBoYXNJbml0ID0+IHRydWU7CgogIC8vLyBUaGUgc2V0IG9mIGNvbnN0YW50IGluaXRpYWwgdmFsdWVzIGZvciBhIGZpZWxkLgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldCBpbml0aWFsQ29uc3RhbnRzID0+IG51bGw7CgogIC8vLyBgdHJ1ZWAgaWYgW2VudGl0eV0gaGFzIGJlZW4gcmVhZCBhcyBhIHZhbHVlLiBGb3IgYSBmaWVsZCB0aGlzIGlzIGEgbm9ybWFsCiAgLy8vIHJlYWQgYWNjZXNzLCBmb3IgYSBmdW5jdGlvbiB0aGlzIGlzIGEgY2xvc3VyaXphdGlvbi4KICBib29sIGdldCBoYXNSZWFkID0+IHJlYWRzLmlzTm90RW1wdHk7CgogIC8vLyBUaGUgc2V0IG9mIHBvdGVudGlhbCByZWFkIGFjY2Vzc2VzIHRvIHRoaXMgbWVtYmVyIHRoYXQgaGF2ZSBub3QgeWV0CiAgLy8vIGJlZW4gcmVnaXN0ZXJlZC4KICBFbnVtU2V0PEFjY2Vzcz4gZ2V0IHBvdGVudGlhbFJlYWRzID0+IGNvbnN0IEVudW1TZXQuZml4ZWQoMCk7CgogIC8vLyBUaGUgc2V0IG9mIHJlZ2lzdGVyZWQgcmVhZCBhY2Nlc3NlcyB0byB0aGlzIG1lbWJlci4KICBFbnVtU2V0PEFjY2Vzcz4gZ2V0IHJlYWRzID0+IGNvbnN0IEVudW1TZXQuZml4ZWQoMCk7CgogIC8vLyBgdHJ1ZWAgaWYgYSB2YWx1ZSBoYXMgYmVlbiB3cml0dGVuIHRvIFtlbnRpdHldLgogIGJvb2wgZ2V0IGhhc1dyaXRlID0+IHdyaXRlcy5pc05vdEVtcHR5OwoKICAvLy8gVGhlIHNldCBvZiBwb3RlbnRpYWwgd3JpdGUgYWNjZXNzZXMgdG8gdGhpcyBtZW1iZXIgdGhhdCBoYXZlIG5vdCB5ZXQKICAvLy8gYmVlbiByZWdpc3RlcmVkLgogIEVudW1TZXQ8QWNjZXNzPiBnZXQgcG90ZW50aWFsV3JpdGVzID0+IGNvbnN0IEVudW1TZXQuZml4ZWQoMCk7CgogIC8vLyBUaGUgc2V0IG9mIHJlZ2lzdGVyZWQgd3JpdGUgYWNjZXNzZXMgdG8gdGhpcyBtZW1iZXIuCiAgRW51bVNldDxBY2Nlc3M+IGdldCB3cml0ZXMgPT4gY29uc3QgRW51bVNldC5maXhlZCgwKTsKCiAgLy8vIGB0cnVlYCBpZiBhbiBpbnZvY2F0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZCBvbiB0aGUgdmFsdWUgW2VudGl0eV0uIEZvciBhCiAgLy8vIGZ1bmN0aW9uIHRoaXMgaXMgYSBub3JtYWwgaW52b2NhdGlvbiwgZm9yIGEgZmllbGQgdGhpcyBpcyBhIHJlYWQgYWNjZXNzCiAgLy8vIGZvbGxvd2VkIGJ5IGFuIGludm9jYXRpb24gb2YgdGhlIGZ1bmN0aW9uLWxpa2UgdmFsdWUuCiAgYm9vbCBnZXQgaGFzSW52b2tlID0+IGludm9rZXMuaXNOb3RFbXB0eTsKCiAgLy8vIFRoZSBzZXQgb2YgcG90ZW50aWFsIGludm9jYXRpb24gYWNjZXNzZXMgdG8gdGhpcyBtZW1iZXIgdGhhdCBoYXZlIG5vdCB5ZXQKICAvLy8gYmVlbiByZWdpc3RlcmVkLgogIEVudW1TZXQ8QWNjZXNzPiBnZXQgcG90ZW50aWFsSW52b2tlcyA9PiBjb25zdCBFbnVtU2V0LmZpeGVkKDApOwoKICAvLy8gVGhlIHNldCBvZiByZWdpc3RlcmVkIGludm9jYXRpb24gYWNjZXNzZXMgdG8gdGhpcyBtZW1iZXIuCiAgRW51bVNldDxBY2Nlc3M+IGdldCBpbnZva2VzID0+IGNvbnN0IEVudW1TZXQuZml4ZWQoMCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbUGFyYW1ldGVyU3RydWN0dXJlXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlCiAgLy8vIHVzZWQgaW4gaW52b2NhdGlvbnMgb2YgW2VudGl0eV0uIEZvciBhIGZpZWxkLCBnZXR0ZXIgb3Igc2V0dGVyIHRoaXMgaXMKICAvLy8gYWx3YXlzIGBudWxsYC4KICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgZ2V0IGludm9rZWRQYXJhbWV0ZXJzID0+IG51bGw7CgogIC8vLyBXaGV0aGVyIHRoaXMgbWVtYmVyIGhhcyBhbnkgcG90ZW50aWFsIGJ1dCB1bnJlZ2lzdGVyZWQgZHluYW1pYyByZWFkcywKICAvLy8gd3JpdGVzIG9yIGludm9jYXRpb25zLgogIGJvb2wgZ2V0IGhhc1BlbmRpbmdEeW5hbWljVXNlID0+CiAgICAgIGhhc1BlbmRpbmdEeW5hbWljSW52b2tlIHx8CiAgICAgIGhhc1BlbmRpbmdEeW5hbWljUmVhZCB8fAogICAgICBoYXNQZW5kaW5nRHluYW1pY1dyaXRlOwoKICAvLy8gV2hldGhlciB0aGlzIG1lbWJlciBoYXMgYW55IHBvdGVudGlhbCBidXQgdW5yZWdpc3RlcmVkIGR5bmFtaWMKICAvLy8gaW52b2NhdGlvbnMuCiAgYm9vbCBnZXQgaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UgPT4KICAgICAgcG90ZW50aWFsSW52b2tlcy5jb250YWlucyhBY2Nlc3MuZHluYW1pY0FjY2Vzcyk7CgogIC8vLyBXaGV0aGVyIHRoaXMgbWVtYmVyIGhhcyBhbnkgcG90ZW50aWFsIGJ1dCB1bnJlZ2lzdGVyZWQgZHluYW1pYyByZWFkcy4KICBib29sIGdldCBoYXNQZW5kaW5nRHluYW1pY1JlYWQgPT4KICAgICAgcG90ZW50aWFsUmVhZHMuY29udGFpbnMoQWNjZXNzLmR5bmFtaWNBY2Nlc3MpOwoKICAvLy8gV2hldGhlciB0aGlzIG1lbWJlciBoYXMgYW55IHBvdGVudGlhbCBidXQgdW5yZWdpc3RlcmVkIGR5bmFtaWMgd3JpdGVzLgogIGJvb2wgZ2V0IGhhc1BlbmRpbmdEeW5hbWljV3JpdGUgPT4KICAgICAgcG90ZW50aWFsV3JpdGVzLmNvbnRhaW5zKEFjY2Vzcy5keW5hbWljQWNjZXNzKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGUgW2VudGl0eV0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIHJldHVybnMgdGhlIG5ldwogIC8vLyBbTWVtYmVyVXNlXXMgdGhhdCBpdCBjYXVzZWQuCiAgLy8vCiAgLy8vIEZvciBhIGZpZWxkIHRoaXMgaXMgdGhlIGluaXRpYWwgd3JpdGUgYWNjZXNzLCBmb3IgYSBmdW5jdGlvbiB0aGlzIGlzIGEKICAvLy8gbm8tb3AuCiAgRW51bVNldDxNZW1iZXJVc2U+IGluaXQoKSA9PiBNZW1iZXJVc2VzLk5PTkU7CgogIC8vLyBSZWdpc3RlcnMgdGhlIFtlbnRpdHldIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggW2NvbnN0YW50XSBhbmQgcmV0dXJucwogIC8vLyB0aGUgbmV3IFtNZW1iZXJVc2VdcyB0aGF0IGl0IGNhdXNlZC4KICAvLy8KICAvLy8gRm9yIGEgZmllbGQgdGhpcyBpcyB0aGUgaW5pdGlhbCB3cml0ZSBhY2Nlc3MsIGZvciBhIGZ1bmN0aW9uIHRoaXMgaXMgYQogIC8vLyBuby1vcC4KICBFbnVtU2V0PE1lbWJlclVzZT4gY29uc3RhbnRJbml0KENvbnN0YW50VmFsdWUgY29uc3RhbnQpID0+IE1lbWJlclVzZXMuTk9ORTsKCiAgLy8vIFJlZ2lzdGVycyBhIHJlYWQgb2YgdGhlIHZhbHVlIG9mIFtlbnRpdHldIGFuZCByZXR1cm5zIHRoZSBuZXcgW01lbWJlclVzZV1zCiAgLy8vIHRoYXQgaXQgY2F1c2VkLgogIC8vLwogIC8vLyBGb3IgYSBmaWVsZCB0aGlzIGlzIGEgbm9ybWFsIHJlYWQgYWNjZXNzLCBmb3IgYSBmdW5jdGlvbiB0aGlzIGlzIGEKICAvLy8gY2xvc3VyaXphdGlvbi4KICBFbnVtU2V0PE1lbWJlclVzZT4gcmVhZChFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMpID0+IE1lbWJlclVzZXMuTk9ORTsKCiAgLy8vIFJlZ2lzdGVycyBhIHdyaXRlIG9mIGEgdmFsdWUgdG8gW2VudGl0eV0gYW5kIHJldHVybnMgdGhlIG5ldyBbTWVtYmVyVXNlXXMKICAvLy8gdGhhdCBpdCBjYXVzZWQuCiAgRW51bVNldDxNZW1iZXJVc2U+IHdyaXRlKEVudW1TZXQ8QWNjZXNzPiBhY2Nlc3NlcykgPT4gTWVtYmVyVXNlcy5OT05FOwoKICAvLy8gUmVnaXN0ZXJzIGFuIGludm9jYXRpb24gb24gdGhlIHZhbHVlIG9mIFtlbnRpdHldIGFuZCByZXR1cm5zIHRoZSBuZXcKICAvLy8gW01lbWJlclVzZV1zIHRoYXQgaXQgY2F1c2VkLgogIC8vLwogIC8vLyBGb3IgYSBmdW5jdGlvbiB0aGlzIGlzIGEgbm9ybWFsIGludm9jYXRpb24sIGZvciBhIGZpZWxkIHRoaXMgaXMgYSByZWFkCiAgLy8vIGFjY2VzcyBmb2xsb3dlZCBieSBhbiBpbnZvY2F0aW9uIG9mIHRoZSBmdW5jdGlvbi1saWtlIHZhbHVlLgogIEVudW1TZXQ8TWVtYmVyVXNlPiBpbnZva2UoCiAgICAgICAgICBFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgPT4KICAgICAgTWVtYmVyVXNlcy5OT05FOwoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gZ2V0IF9vcmlnaW5hbFVzZSA9PiBNZW1iZXJVc2VzLk5PUk1BTF9PTkxZOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGVudGl0eS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBNZW1iZXJVc2FnZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGVudGl0eSA9PSBvdGhlci5lbnRpdHk7CiAgfQoKICBNZW1iZXJVc2FnZSBjbG9uZSgpOwoKICBib29sIGRhdGFFcXVhbHMoTWVtYmVyVXNhZ2Ugb3RoZXIpIHsKICAgIGFzc2VydChlbnRpdHkgPT0gb3RoZXIuZW50aXR5KTsKICAgIHJldHVybiBoYXNJbml0ID09IG90aGVyLmhhc0luaXQgJiYKICAgICAgICBoYXNSZWFkID09IG90aGVyLmhhc1JlYWQgJiYKICAgICAgICBoYXNJbnZva2UgPT0gb3RoZXIuaGFzSW52b2tlICYmCiAgICAgICAgaGFzV3JpdGUgPT0gb3RoZXIuaGFzV3JpdGUgJiYKICAgICAgICBoYXNQZW5kaW5nRHluYW1pY1JlYWQgPT0gb3RoZXIuaGFzUGVuZGluZ0R5bmFtaWNSZWFkICYmCiAgICAgICAgaGFzUGVuZGluZ0R5bmFtaWNXcml0ZSA9PSBvdGhlci5oYXNQZW5kaW5nRHluYW1pY1dyaXRlICYmCiAgICAgICAgaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UgPT0gb3RoZXIuaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UgJiYKICAgICAgICBoYXNQZW5kaW5nRHluYW1pY1VzZSA9PSBvdGhlci5oYXNQZW5kaW5nRHluYW1pY1VzZSAmJgogICAgICAgIF9wZW5kaW5nVXNlID09IG90aGVyLl9wZW5kaW5nVXNlICYmCiAgICAgICAgX2FwcGxpZWRVc2UgPT0gb3RoZXIuX2FwcGxpZWRVc2UgJiYKICAgICAgICByZWFkcyA9PSBvdGhlci5yZWFkcyAmJgogICAgICAgIHdyaXRlcyA9PSBvdGhlci53cml0ZXMgJiYKICAgICAgICBpbnZva2VzID09IG90aGVyLmludm9rZXMgJiYKICAgICAgICBwb3RlbnRpYWxSZWFkcyA9PSBvdGhlci5wb3RlbnRpYWxSZWFkcyAmJgogICAgICAgIHBvdGVudGlhbFdyaXRlcyA9PSBvdGhlci5wb3RlbnRpYWxXcml0ZXMgJiYKICAgICAgICBwb3RlbnRpYWxJbnZva2VzID09IG90aGVyLnBvdGVudGlhbEludm9rZXMgJiYKICAgICAgICBpbnZva2VkUGFyYW1ldGVycyA9PSBvdGhlci5pbnZva2VkUGFyYW1ldGVyczsKICB9Cn0KCi8vLyBNZW1iZXIgdXNhZ2UgdHJhY2tpbmcgZm9yIGEgZ2V0dGVyIG9yIHNldHRlci4KY2xhc3MgUHJvcGVydHlVc2FnZSBleHRlbmRzIE1lbWJlclVzYWdlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gcG90ZW50aWFsUmVhZHM7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiBwb3RlbnRpYWxXcml0ZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiBwb3RlbnRpYWxJbnZva2VzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gcmVhZHM7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiB3cml0ZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiBpbnZva2VzOwoKICBQcm9wZXJ0eVVzYWdlLmNsb25lZChNZW1iZXJFbnRpdHkgbWVtYmVyLCBFbnVtU2V0PE1lbWJlclVzZT4gcGVuZGluZ1VzZSwKICAgICAge3RoaXMucG90ZW50aWFsUmVhZHMsCiAgICAgIHRoaXMucG90ZW50aWFsV3JpdGVzLAogICAgICB0aGlzLnBvdGVudGlhbEludm9rZXMsCiAgICAgIHRoaXMucmVhZHMsCiAgICAgIHRoaXMud3JpdGVzLAogICAgICB0aGlzLmludm9rZXN9KQogICAgICA6IGFzc2VydChwb3RlbnRpYWxSZWFkcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsV3JpdGVzICE9IG51bGwpLAogICAgICAgIGFzc2VydChwb3RlbnRpYWxJbnZva2VzICE9IG51bGwpLAogICAgICAgIGFzc2VydChyZWFkcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQod3JpdGVzICE9IG51bGwpLAogICAgICAgIGFzc2VydChpbnZva2VzICE9IG51bGwpLAogICAgICAgIHN1cGVyLmNsb25lZChtZW1iZXIsIHBlbmRpbmdVc2UpOwoKICBQcm9wZXJ0eVVzYWdlKE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIHt0aGlzLnBvdGVudGlhbFJlYWRzLCB0aGlzLnBvdGVudGlhbFdyaXRlcywgdGhpcy5wb3RlbnRpYWxJbnZva2VzfSkKICAgICAgOiByZWFkcyA9IG5ldyBFbnVtU2V0KCksCiAgICAgICAgd3JpdGVzID0gbmV3IEVudW1TZXQoKSwKICAgICAgICBpbnZva2VzID0gbmV3IEVudW1TZXQoKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsUmVhZHMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHBvdGVudGlhbFdyaXRlcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsSW52b2tlcyAhPSBudWxsKSwKICAgICAgICBzdXBlci5pbnRlcm5hbChtZW1iZXIpOwoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gcmVhZChFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMpIHsKICAgIGJvb2wgYWxyZWFkeUhhc1JlYWQgPSBoYXNSZWFkOwogICAgcmVhZHMuYWRkQWxsKHBvdGVudGlhbFJlYWRzLnJlbW92ZUFsbChhY2Nlc3NlcykpOwogICAgaWYgKGFscmVhZHlIYXNSZWFkKSB7CiAgICAgIHJldHVybiBNZW1iZXJVc2VzLk5PTkU7CiAgICB9CiAgICByZXR1cm4gX3BlbmRpbmdVc2UucmVtb3ZlQWxsKE1lbWJlclVzZXMuTk9STUFMX09OTFkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRW51bVNldDxNZW1iZXJVc2U+IHdyaXRlKEVudW1TZXQ8QWNjZXNzPiBhY2Nlc3NlcykgewogICAgYm9vbCBhbHJlYWR5SGFzV3JpdGUgPSBoYXNXcml0ZTsKICAgIHdyaXRlcy5hZGRBbGwocG90ZW50aWFsV3JpdGVzLnJlbW92ZUFsbChhY2Nlc3NlcykpOwogICAgaWYgKGFscmVhZHlIYXNXcml0ZSkgewogICAgICByZXR1cm4gTWVtYmVyVXNlcy5OT05FOwogICAgfQogICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChNZW1iZXJVc2VzLk5PUk1BTF9PTkxZKTsKICB9CgogIEBvdmVycmlkZQogIEVudW1TZXQ8TWVtYmVyVXNlPiBpbnZva2UoCiAgICAgIEVudW1TZXQ8QWNjZXNzPiBhY2Nlc3NlcywgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICAvLyBXZSB1c2UgYGhhc1JlYWRgIGhlcmUgaW5zdGVhZCBvZiBgaGFzSW52b2tlYCBiZWNhdXNlIGdldHRlcnMgb25seSBoYXZlCiAgICAvLyAnbm9ybWFsIHVzZScgKHRoZXkgY2Fubm90IGJlIGNsb3N1cml6ZWQpLiBUaGlzIG1lYW5zIHRoYXQgaW52b2tpbmcgYW4KICAgIC8vIGFscmVhZHkgcmVhZCBnZXR0ZXIgZG9lcyBub3QgcmVzdWx0IGEgbmV3IG1lbWJlciB1c2UuCiAgICBib29sIGFscmVhZHlIYXNSZWFkID0gaGFzUmVhZDsKICAgIHJlYWRzLmFkZEFsbChwb3RlbnRpYWxSZWFkcy5yZW1vdmVBbGwoQWNjZXNzZXMuc3RhdGljQWNjZXNzKSk7CiAgICBpbnZva2VzLmFkZEFsbChwb3RlbnRpYWxJbnZva2VzLnJlbW92ZUFsbChhY2Nlc3NlcykpOwogICAgaWYgKGFscmVhZHlIYXNSZWFkKSB7CiAgICAgIHJldHVybiBNZW1iZXJVc2VzLk5PTkU7CiAgICB9CiAgICByZXR1cm4gX3BlbmRpbmdVc2UucmVtb3ZlQWxsKE1lbWJlclVzZXMuTk9STUFMX09OTFkpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyVXNhZ2UgY2xvbmUoKSB7CiAgICByZXR1cm4gbmV3IFByb3BlcnR5VXNhZ2UuY2xvbmVkKGVudGl0eSwgX3BlbmRpbmdVc2UuY2xvbmUoKSwKICAgICAgICBwb3RlbnRpYWxSZWFkczogcG90ZW50aWFsUmVhZHMuY2xvbmUoKSwKICAgICAgICBwb3RlbnRpYWxXcml0ZXM6IHBvdGVudGlhbFdyaXRlcy5jbG9uZSgpLAogICAgICAgIHBvdGVudGlhbEludm9rZXM6IHBvdGVudGlhbEludm9rZXMuY2xvbmUoKSwKICAgICAgICByZWFkczogcmVhZHMuY2xvbmUoKSwKICAgICAgICB3cml0ZXM6IHdyaXRlcy5jbG9uZSgpLAogICAgICAgIGludm9rZXM6IGludm9rZXMuY2xvbmUoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnUHJvcGVydHlVc2FnZSgkZW50aXR5LCcKICAgICAgJ3JlYWRzPSR7cmVhZHMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3dyaXRlcz0ke3dyaXRlcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAnaW52b2tlcz0ke2ludm9rZXMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BvdGVudGlhbFJlYWRzPSR7cG90ZW50aWFsUmVhZHMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BvdGVudGlhbFdyaXRlcz0ke3BvdGVudGlhbFdyaXRlcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAncG90ZW50aWFsSW52b2tlcz0ke3BvdGVudGlhbEludm9rZXMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BlbmRpbmdVc2U9JHtfcGVuZGluZ1VzZS5pdGVyYWJsZShNZW1iZXJVc2UudmFsdWVzKX0sJwogICAgICAnaW5pdGlhbENvbnN0YW50cz0ke2luaXRpYWxDb25zdGFudHM/Lm1hcCgoYykgPT4gYy50b1N0cnVjdHVyZWRUZXh0KCkpfSknOwp9CgovLy8gTWVtYmVyIHVzYWdlIHRyYWNraW5nIGZvciBhIGZpZWxkLgpjbGFzcyBGaWVsZFVzYWdlIGV4dGVuZHMgTWVtYmVyVXNhZ2UgewogIEBvdmVycmlkZQogIGJvb2wgaGFzSW5pdDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHBvdGVudGlhbFJlYWRzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gcG90ZW50aWFsV3JpdGVzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gcG90ZW50aWFsSW52b2tlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHJlYWRzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gaW52b2tlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHdyaXRlczsKCiAgTGlzdDxDb25zdGFudFZhbHVlPiBfaW5pdGlhbENvbnN0YW50czsKCiAgRmllbGRVc2FnZS5jbG9uZWQoRmllbGRFbnRpdHkgZmllbGQsIEVudW1TZXQ8TWVtYmVyVXNlPiBwZW5kaW5nVXNlLAogICAgICB7dGhpcy5wb3RlbnRpYWxSZWFkcywKICAgICAgdGhpcy5wb3RlbnRpYWxXcml0ZXMsCiAgICAgIHRoaXMucG90ZW50aWFsSW52b2tlcywKICAgICAgdGhpcy5oYXNJbml0LAogICAgICB0aGlzLnJlYWRzLAogICAgICB0aGlzLndyaXRlcywKICAgICAgdGhpcy5pbnZva2VzfSkKICAgICAgOiBhc3NlcnQocG90ZW50aWFsUmVhZHMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHBvdGVudGlhbFdyaXRlcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsSW52b2tlcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocmVhZHMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHdyaXRlcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQoaW52b2tlcyAhPSBudWxsKSwKICAgICAgICBzdXBlci5jbG9uZWQoZmllbGQsIHBlbmRpbmdVc2UpOwoKICBGaWVsZFVzYWdlKEZpZWxkRW50aXR5IGZpZWxkLAogICAgICB7dGhpcy5wb3RlbnRpYWxSZWFkcywgdGhpcy5wb3RlbnRpYWxXcml0ZXMsIHRoaXMucG90ZW50aWFsSW52b2tlc30pCiAgICAgIDogaGFzSW5pdCA9IGZhbHNlLAogICAgICAgIHJlYWRzID0gbmV3IEVudW1TZXQoKSwKICAgICAgICB3cml0ZXMgPSBuZXcgRW51bVNldCgpLAogICAgICAgIGludm9rZXMgPSBuZXcgRW51bVNldCgpLAogICAgICAgIGFzc2VydChwb3RlbnRpYWxSZWFkcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsV3JpdGVzICE9IG51bGwpLAogICAgICAgIGFzc2VydChwb3RlbnRpYWxJbnZva2VzICE9IG51bGwpLAogICAgICAgIHN1cGVyLmludGVybmFsKGZpZWxkKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0IGluaXRpYWxDb25zdGFudHMgPT4gX2luaXRpYWxDb25zdGFudHMgPz8gY29uc3QgW107CgogIEBvdmVycmlkZQogIEVudW1TZXQ8TWVtYmVyVXNlPiBpbml0KCkgewogICAgaWYgKGhhc0luaXQpIHsKICAgICAgcmV0dXJuIE1lbWJlclVzZXMuTk9ORTsKICAgIH0KICAgIGhhc0luaXQgPSB0cnVlOwogICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChNZW1iZXJVc2VzLk5PUk1BTF9PTkxZKTsKICB9CgogIEBvdmVycmlkZQogIEVudW1TZXQ8TWVtYmVyVXNlPiBjb25zdGFudEluaXQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgX2luaXRpYWxDb25zdGFudHMgPz89IFtdOwogICAgX2luaXRpYWxDb25zdGFudHMuYWRkKGNvbnN0YW50KTsKICAgIHJldHVybiBpbml0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNSZWFkID0+IHJlYWRzLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIEVudW1TZXQ8TWVtYmVyVXNlPiByZWFkKEVudW1TZXQ8QWNjZXNzPiBhY2Nlc3NlcykgewogICAgYm9vbCBhbHJlYWR5SGFzUmVhZCA9IGhhc1JlYWQ7CiAgICByZWFkcy5hZGRBbGwocG90ZW50aWFsUmVhZHMucmVtb3ZlQWxsKGFjY2Vzc2VzKSk7CiAgICBpZiAoYWxyZWFkeUhhc1JlYWQpIHsKICAgICAgcmV0dXJuIE1lbWJlclVzZXMuTk9ORTsKICAgIH0KICAgIHJldHVybiBfcGVuZGluZ1VzZS5yZW1vdmVBbGwoTWVtYmVyVXNlcy5OT1JNQUxfT05MWSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNXcml0ZSA9PiB3cml0ZXMuaXNOb3RFbXB0eTsKCiAgQG92ZXJyaWRlCiAgRW51bVNldDxNZW1iZXJVc2U+IHdyaXRlKEVudW1TZXQ8QWNjZXNzPiBhY2Nlc3NlcykgewogICAgYm9vbCBhbHJlYWR5SGFzV3JpdGUgPSBoYXNXcml0ZTsKICAgIHdyaXRlcy5hZGRBbGwocG90ZW50aWFsV3JpdGVzLnJlbW92ZUFsbChhY2Nlc3NlcykpOwogICAgaWYgKGFscmVhZHlIYXNXcml0ZSkgewogICAgICByZXR1cm4gTWVtYmVyVXNlcy5OT05FOwogICAgfQogICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChNZW1iZXJVc2VzLk5PUk1BTF9PTkxZKTsKICB9CgogIEBvdmVycmlkZQogIEVudW1TZXQ8TWVtYmVyVXNlPiBpbnZva2UoCiAgICAgIEVudW1TZXQ8QWNjZXNzPiBhY2Nlc3NlcywgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICAvLyBXZSB1c2UgYGhhc1JlYWRgIGhlcmUgaW5zdGVhZCBvZiBgaGFzSW52b2tlYCBiZWNhdXNlIGZpZWxkcyBvbmx5IGhhdmUKICAgIC8vICdub3JtYWwgdXNlJyAodGhleSBjYW5ub3QgYmUgY2xvc3VyaXplZCkuIFRoaXMgbWVhbnMgdGhhdCBpbnZva2luZyBhbgogICAgLy8gYWxyZWFkeSByZWFkIGZpZWxkIGRvZXMgbm90IHJlc3VsdCBhIG5ldyBtZW1iZXIgdXNlLgogICAgYm9vbCBhbHJlYWR5SGFzUmVhZCA9IGhhc1JlYWQ7CiAgICByZWFkcy5hZGRBbGwocG90ZW50aWFsUmVhZHMucmVtb3ZlQWxsKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgaW52b2tlcy5hZGRBbGwocG90ZW50aWFsSW52b2tlcy5yZW1vdmVBbGwoYWNjZXNzZXMpKTsKICAgIGlmIChhbHJlYWR5SGFzUmVhZCkgewogICAgICByZXR1cm4gTWVtYmVyVXNlcy5OT05FOwogICAgfQogICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChNZW1iZXJVc2VzLk5PUk1BTF9PTkxZKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlclVzYWdlIGNsb25lKCkgewogICAgcmV0dXJuIG5ldyBGaWVsZFVzYWdlLmNsb25lZChlbnRpdHksIF9wZW5kaW5nVXNlLmNsb25lKCksCiAgICAgICAgcG90ZW50aWFsUmVhZHM6IHBvdGVudGlhbFJlYWRzLmNsb25lKCksCiAgICAgICAgcG90ZW50aWFsV3JpdGVzOiBwb3RlbnRpYWxXcml0ZXMuY2xvbmUoKSwKICAgICAgICBwb3RlbnRpYWxJbnZva2VzOiBwb3RlbnRpYWxJbnZva2VzLmNsb25lKCksCiAgICAgICAgaGFzSW5pdDogaGFzSW5pdCwKICAgICAgICByZWFkczogcmVhZHMuY2xvbmUoKSwKICAgICAgICB3cml0ZXM6IHdyaXRlcy5jbG9uZSgpLAogICAgICAgIGludm9rZXM6IGludm9rZXMuY2xvbmUoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRmllbGRVc2FnZSgkZW50aXR5LGhhc0luaXQ9JGhhc0luaXQsJwogICAgICAncmVhZHM9JHtyZWFkcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAnd3JpdGVzPSR7d3JpdGVzLml0ZXJhYmxlKEFjY2Vzcy52YWx1ZXMpfSwnCiAgICAgICdpbnZva2VzPSR7aW52b2tlcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAncG90ZW50aWFsUmVhZHM9JHtwb3RlbnRpYWxSZWFkcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAncG90ZW50aWFsV3JpdGVzPSR7cG90ZW50aWFsV3JpdGVzLml0ZXJhYmxlKEFjY2Vzcy52YWx1ZXMpfSwnCiAgICAgICdwb3RlbnRpYWxJbnZva2VzPSR7cG90ZW50aWFsSW52b2tlcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAncGVuZGluZ1VzZT0ke19wZW5kaW5nVXNlLml0ZXJhYmxlKE1lbWJlclVzZS52YWx1ZXMpfSwnCiAgICAgICdpbml0aWFsQ29uc3RhbnRzPSR7aW5pdGlhbENvbnN0YW50cy5tYXAoKGMpID0+IGMudG9TdHJ1Y3R1cmVkVGV4dCgpKX0pJzsKfQoKLy8vIE1lbWJlciB1c2FnZSB0cmFja2luZyBmb3IgYSBjb25zdHJ1Y3RvciBvciBtZXRob2QuCmNsYXNzIE1ldGhvZFVzYWdlIGV4dGVuZHMgTWVtYmVyVXNhZ2UgewogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiBwb3RlbnRpYWxSZWFkczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHBvdGVudGlhbEludm9rZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiByZWFkczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IGludm9rZXM7CgogIGZpbmFsIFBhcmFtZXRlclVzYWdlIHBhcmFtZXRlclVzYWdlOwoKICBNZXRob2RVc2FnZS5jbG9uZWQoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIHRoaXMucGFyYW1ldGVyVXNhZ2UsCiAgICAgIEVudW1TZXQ8TWVtYmVyVXNlPiBwZW5kaW5nVXNlLAogICAgICB7dGhpcy5wb3RlbnRpYWxSZWFkcywgdGhpcy5yZWFkcywgdGhpcy5wb3RlbnRpYWxJbnZva2VzLCB0aGlzLmludm9rZXN9KQogICAgICA6IGFzc2VydChwb3RlbnRpYWxSZWFkcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsSW52b2tlcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocmVhZHMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KGludm9rZXMgIT0gbnVsbCksCiAgICAgICAgc3VwZXIuY2xvbmVkKGZ1bmN0aW9uLCBwZW5kaW5nVXNlKTsKCiAgTWV0aG9kVXNhZ2UoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sCiAgICAgIHt0aGlzLnBvdGVudGlhbFJlYWRzLCB0aGlzLnBvdGVudGlhbEludm9rZXN9KQogICAgICA6IHJlYWRzID0gbmV3IEVudW1TZXQoKSwKICAgICAgICBpbnZva2VzID0gbmV3IEVudW1TZXQoKSwKICAgICAgICBwYXJhbWV0ZXJVc2FnZSA9IG5ldyBQYXJhbWV0ZXJVc2FnZShmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUpLAogICAgICAgIGFzc2VydChwb3RlbnRpYWxSZWFkcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsSW52b2tlcyAhPSBudWxsKSwKICAgICAgICBzdXBlci5pbnRlcm5hbChmdW5jdGlvbik7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGhhc0ludm9rZSA9PiBpbnZva2VzLmlzTm90RW1wdHkgJiYgcGFyYW1ldGVyVXNhZ2UuaGFzSW52b2tlOwoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gZ2V0IF9vcmlnaW5hbFVzZSA9PgogICAgICBlbnRpdHkuaXNJbnN0YW5jZU1lbWJlciA/IE1lbWJlclVzZXMuQUxMX0lOU1RBTkNFIDogTWVtYmVyVXNlcy5BTExfU1RBVElDOwoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gcmVhZChFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMpIHsKICAgIGJvb2wgYWxyZWFkeUhhc0ludm9rZSA9IGhhc0ludm9rZTsKICAgIGJvb2wgYWxyZWFkeUhhc1JlYWQgPSBoYXNSZWFkOwogICAgcmVhZHMuYWRkQWxsKHBvdGVudGlhbFJlYWRzLnJlbW92ZUFsbChhY2Nlc3NlcykpOwogICAgaW52b2tlcy5hZGRBbGwocG90ZW50aWFsSW52b2tlcy5yZW1vdmVBbGwoQWNjZXNzZXMuZHluYW1pY0FjY2VzcykpOwogICAgcGFyYW1ldGVyVXNhZ2UuZnVsbHlVc2UoKTsKICAgIGlmIChhbHJlYWR5SGFzSW52b2tlKSB7CiAgICAgIGlmIChhbHJlYWR5SGFzUmVhZCkgewogICAgICAgIHJldHVybiBNZW1iZXJVc2VzLk5PTkU7CiAgICAgIH0KICAgICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChlbnRpdHkuaXNJbnN0YW5jZU1lbWJlcgogICAgICAgICAgPyBNZW1iZXJVc2VzLkNMT1NVUklaRV9JTlNUQU5DRV9PTkxZCiAgICAgICAgICA6IE1lbWJlclVzZXMuQ0xPU1VSSVpFX1NUQVRJQ19PTkxZKTsKICAgIH0gZWxzZSBpZiAoYWxyZWFkeUhhc1JlYWQpIHsKICAgICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChNZW1iZXJVc2VzLk5PUk1BTF9PTkxZKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfcGVuZGluZ1VzZS5yZW1vdmVBbGwoZW50aXR5LmlzSW5zdGFuY2VNZW1iZXIKICAgICAgICAgID8gTWVtYmVyVXNlcy5BTExfSU5TVEFOQ0UKICAgICAgICAgIDogTWVtYmVyVXNlcy5BTExfU1RBVElDKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEVudW1TZXQ8TWVtYmVyVXNlPiBpbnZva2UoCiAgICAgIEVudW1TZXQ8QWNjZXNzPiBhY2Nlc3NlcywgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICBib29sIGFscmVhZHlIYXNJbnZva2UgPSBoYXNJbnZva2U7CiAgICBwYXJhbWV0ZXJVc2FnZS5pbnZva2UoY2FsbFN0cnVjdHVyZSk7CiAgICBpbnZva2VzLmFkZEFsbChwb3RlbnRpYWxJbnZva2VzLnJlbW92ZUFsbChhY2Nlc3NlcykpOwogICAgaWYgKGFscmVhZHlIYXNJbnZva2UpIHsKICAgICAgcmV0dXJuIE1lbWJlclVzZXMuTk9ORTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfcGVuZGluZ1VzZQogICAgICAgICAgLnJlbW92ZUFsbChoYXNSZWFkID8gTWVtYmVyVXNlcy5OT05FIDogTWVtYmVyVXNlcy5OT1JNQUxfT05MWSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgZ2V0IGludm9rZWRQYXJhbWV0ZXJzID0+IHBhcmFtZXRlclVzYWdlLmludm9rZWRQYXJhbWV0ZXJzOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNQZW5kaW5nRHluYW1pY0ludm9rZSA9PgogICAgICBwb3RlbnRpYWxJbnZva2VzLmNvbnRhaW5zKEFjY2Vzcy5keW5hbWljQWNjZXNzKSB8fAogICAgICAoaW52b2tlcy5jb250YWlucyhBY2Nlc3MuZHluYW1pY0FjY2VzcykgJiYgIXBhcmFtZXRlclVzYWdlLmlzRnVsbHlVc2VkKTsKCiAgQG92ZXJyaWRlCiAgTWVtYmVyVXNhZ2UgY2xvbmUoKSB7CiAgICByZXR1cm4gbmV3IE1ldGhvZFVzYWdlLmNsb25lZCgKICAgICAgICBlbnRpdHksIHBhcmFtZXRlclVzYWdlLmNsb25lKCksIF9wZW5kaW5nVXNlLmNsb25lKCksCiAgICAgICAgcmVhZHM6IHJlYWRzLmNsb25lKCksCiAgICAgICAgcG90ZW50aWFsUmVhZHM6IHBvdGVudGlhbFJlYWRzLmNsb25lKCksCiAgICAgICAgaW52b2tlczogaW52b2tlcy5jbG9uZSgpLAogICAgICAgIHBvdGVudGlhbEludm9rZXM6IHBvdGVudGlhbEludm9rZXMuY2xvbmUoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnTWV0aG9kVXNhZ2UoJGVudGl0eSwnCiAgICAgICdyZWFkcz0ke3JlYWRzLml0ZXJhYmxlKEFjY2Vzcy52YWx1ZXMpfSwnCiAgICAgICdpbnZva2VzPSR7aW52b2tlcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAncGFyYW1ldGVyVXNhZ2U9JHtwYXJhbWV0ZXJVc2FnZX0sJwogICAgICAncG90ZW50aWFsUmVhZHM9JHtwb3RlbnRpYWxSZWFkcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAncG90ZW50aWFsSW52b2tlcz0ke3BvdGVudGlhbEludm9rZXMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BlbmRpbmdVc2U9JHtfcGVuZGluZ1VzZS5pdGVyYWJsZShNZW1iZXJVc2UudmFsdWVzKX0pJzsKfQoKLy8vIEVudW0gY2xhc3MgZm9yIHRoZSBwb3NzaWJsZSBraW5kIG9mIHVzZSBvZiBbTWVtYmVyRW50aXR5XSBvYmplY3RzLgplbnVtIE1lbWJlclVzZSB7CiAgLy8vIFJlYWQgb3Igd3JpdGUgb2YgYSBmaWVsZCwgb3IgaW52b2NhdGlvbiBvZiBhIG1ldGhvZC4KICBOT1JNQUwsCgogIC8vLyBUZWFyLW9mZiBvZiBhbiBpbnN0YW5jZSBtZXRob2QuCiAgQ0xPU1VSSVpFX0lOU1RBTkNFLAoKICAvLy8gVGVhci1vZmYgb2YgYSBzdGF0aWMgbWV0aG9kLgogIENMT1NVUklaRV9TVEFUSUMsCn0KCi8vLyBDb21tb24gW0VudW1TZXRdcyB1c2VkIGZvciBbTWVtYmVyVXNlXS4KY2xhc3MgTWVtYmVyVXNlcyB7CiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8TWVtYmVyVXNlPiBOT05FID0gY29uc3QgRW51bVNldDxNZW1iZXJVc2U+LmZpeGVkKDApOwogIHN0YXRpYyBjb25zdCBFbnVtU2V0PE1lbWJlclVzZT4gTk9STUFMX09OTFkgPQogICAgICBjb25zdCBFbnVtU2V0PE1lbWJlclVzZT4uZml4ZWQoMSk7CiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8TWVtYmVyVXNlPiBDTE9TVVJJWkVfSU5TVEFOQ0VfT05MWSA9CiAgICAgIGNvbnN0IEVudW1TZXQ8TWVtYmVyVXNlPi5maXhlZCgyKTsKICBzdGF0aWMgY29uc3QgRW51bVNldDxNZW1iZXJVc2U+IENMT1NVUklaRV9TVEFUSUNfT05MWSA9CiAgICAgIGNvbnN0IEVudW1TZXQ8TWVtYmVyVXNlPi5maXhlZCg0KTsKICBzdGF0aWMgY29uc3QgRW51bVNldDxNZW1iZXJVc2U+IEFMTF9JTlNUQU5DRSA9CiAgICAgIGNvbnN0IEVudW1TZXQ8TWVtYmVyVXNlPi5maXhlZCgzKTsKICBzdGF0aWMgY29uc3QgRW51bVNldDxNZW1iZXJVc2U+IEFMTF9TVEFUSUMgPQogICAgICBjb25zdCBFbnVtU2V0PE1lbWJlclVzZT4uZml4ZWQoNSk7Cn0KCnR5cGVkZWYgdm9pZCBNZW1iZXJVc2VkQ2FsbGJhY2soTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCk7CgovLy8gUmVnaXN0cnkgZm9yIHRoZSBvYnNlcnZlZCB1c2Ugb2YgYSBjbGFzcyBbZW50aXR5XSBpbiB0aGUgb3BlbiB3b3JsZC4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWVyZ2UgdGhpcyB3aXRoIFtJbnN0YW50aWF0aW9uSW5mb10uCmNsYXNzIENsYXNzVXNhZ2UgZXh0ZW5kcyBBYnN0cmFjdFVzYWdlPENsYXNzVXNlPiB7CiAgYm9vbCBpc0luc3RhbnRpYXRlZCA9IGZhbHNlOwogIGJvb2wgaXNJbXBsZW1lbnRlZCA9IGZhbHNlOwoKICBmaW5hbCBDbGFzc0VudGl0eSBjbHM7CgogIENsYXNzVXNhZ2UodGhpcy5jbHMpIDogc3VwZXIoKTsKCiAgRW51bVNldDxDbGFzc1VzZT4gaW5zdGFudGlhdGUoKSB7CiAgICBpZiAoaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgcmV0dXJuIENsYXNzVXNlcy5OT05FOwogICAgfQogICAgaXNJbnN0YW50aWF0ZWQgPSB0cnVlOwogICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChDbGFzc1VzZXMuSU5TVEFOVElBVEVEX09OTFkpOwogIH0KCiAgRW51bVNldDxDbGFzc1VzZT4gaW1wbGVtZW50KCkgewogICAgaWYgKGlzSW1wbGVtZW50ZWQpIHsKICAgICAgcmV0dXJuIENsYXNzVXNlcy5OT05FOwogICAgfQogICAgaXNJbXBsZW1lbnRlZCA9IHRydWU7CiAgICByZXR1cm4gX3BlbmRpbmdVc2UucmVtb3ZlQWxsKENsYXNzVXNlcy5JTVBMRU1FTlRFRF9PTkxZKTsKICB9CgogIEBvdmVycmlkZQogIEVudW1TZXQ8Q2xhc3NVc2U+IGdldCBfb3JpZ2luYWxVc2UgPT4gQ2xhc3NVc2VzLkFMTDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRjbHM6JHtfYXBwbGllZFVzZS5pdGVyYWJsZShDbGFzc1VzZS52YWx1ZXMpfSc7Cn0KCi8vLyBFbnVtIGNsYXNzIGZvciB0aGUgcG9zc2libGUga2luZCBvZiB1c2Ugb2YgW0NsYXNzRW50aXR5XSBvYmplY3RzLgplbnVtIENsYXNzVXNlIHsgSU5TVEFOVElBVEVELCBJTVBMRU1FTlRFRCB9CgovLy8gQ29tbW9uIFtFbnVtU2V0XXMgdXNlZCBmb3IgW0NsYXNzVXNlXS4KY2xhc3MgQ2xhc3NVc2VzIHsKICBzdGF0aWMgY29uc3QgRW51bVNldDxDbGFzc1VzZT4gTk9ORSA9IGNvbnN0IEVudW1TZXQ8Q2xhc3NVc2U+LmZpeGVkKDApOwogIHN0YXRpYyBjb25zdCBFbnVtU2V0PENsYXNzVXNlPiBJTlNUQU5USUFURURfT05MWSA9CiAgICAgIGNvbnN0IEVudW1TZXQ8Q2xhc3NVc2U+LmZpeGVkKDEpOwogIHN0YXRpYyBjb25zdCBFbnVtU2V0PENsYXNzVXNlPiBJTVBMRU1FTlRFRF9PTkxZID0KICAgICAgY29uc3QgRW51bVNldDxDbGFzc1VzZT4uZml4ZWQoMik7CiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8Q2xhc3NVc2U+IEFMTCA9IGNvbnN0IEVudW1TZXQ8Q2xhc3NVc2U+LmZpeGVkKDMpOwp9Cgp0eXBlZGVmIHZvaWQgQ2xhc3NVc2VkQ2FsbGJhY2soQ2xhc3NFbnRpdHkgY2xzLCBFbnVtU2V0PENsYXNzVXNlPiB1c2VTZXQpOwoKLy8vIE9iamVjdCB1c2VkIGZvciB0cmFja2luZyBwYXJhbWV0ZXIgdXNlIGluIGNvbnN0cnVjdG9yIGFuZCBtZXRob2QKLy8vIGludm9jYXRpb25zLgpjbGFzcyBQYXJhbWV0ZXJVc2FnZSB7CiAgLy8vIFRoZSBvcmlnaW5hbCBwYXJhbWV0ZXIgc3RydWN0dXJlIG9mIHRoZSBtZXRob2Qgb3IgY29uc3RydWN0b3IuCiAgZmluYWwgUGFyYW1ldGVyU3RydWN0dXJlIF9wYXJhbWV0ZXJTdHJ1Y3R1cmU7CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIG1ldGhvZCBvciBjb25zdHJ1Y3RvciBoYXMgYXQgbGVhc3Qgb25lIGludm9jYXRpb24uCiAgYm9vbCBfaGFzSW52b2tlOwoKICAvLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIChvcHRpb25hbCkgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluCiAgLy8vIGludm9jYXRpb25zIG9mIHRoZSBtZXRob2Qgb3IgY29uc3RydWN0b3IuCiAgLy8vCiAgLy8vIElmIGFsbCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgaGF2aW5nIGJlZW4gcHJvdmlkZWQgdGhpcyBpcyBzZXQgdG8gYG51bGxgLgogIGludCBfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVyczsKCiAgLy8vIGB0cnVlYCBpZiBhbGwgdHlwZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwcm92aWRlZCBpbiBhdCBsZWFzdCBvbmUKICAvLy8gaW52b2NhdGlvbiBvZiB0aGUgbWV0aG9kIG9yIGNvbnN0cnVjdG9yLgogIGJvb2wgX2FyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWQ7CgogIC8vLyBUaGUgc2V0IG9mIG5hbWVkIHBhcmFtZXRlcnMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBwcm92aWRlZCBpbiBhbnkKICAvLy8gaW52b2NhdGlvbiBvZiB0aGUgbWV0aG9kIG9yIGNvbnN0cnVjdG9yLgogIC8vLwogIC8vLyBJZiBhbGwgbmFtZWQgcGFyYW1ldGVycyBoYXZlIGJlZW4gcHJvdmlkZWQgdGhpcyBpcyBzZXQgdG8gYG51bGxgLgogIFNldDxTdHJpbmc+IF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzOwoKICBQYXJhbWV0ZXJVc2FnZSh0aGlzLl9wYXJhbWV0ZXJTdHJ1Y3R1cmUpIHsKICAgIF9oYXNJbnZva2UgPSBmYWxzZTsKICAgIF9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkID0gX3BhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyA9PSAwOwogICAgX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBfcGFyYW1ldGVyU3RydWN0dXJlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID09CiAgICAgICAgICAgIF9wYXJhbWV0ZXJTdHJ1Y3R1cmUucmVxdWlyZWRQYXJhbWV0ZXJzCiAgICAgICAgPyBudWxsCiAgICAgICAgOiAwOwogICAgaWYgKCFfcGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICAgIG5ldyBTZXQ8U3RyaW5nPi5mcm9tKF9wYXJhbWV0ZXJTdHJ1Y3R1cmUubmFtZWRQYXJhbWV0ZXJzKTsKICAgIH0KICB9CgogIFBhcmFtZXRlclVzYWdlLmNsb25lZCh0aGlzLl9wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHtib29sIGhhc0ludm9rZSwKICAgICAgaW50IHByb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIGJvb2wgYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZCwKICAgICAgU2V0PFN0cmluZz4gdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVyc30pCiAgICAgIDogX2hhc0ludm9rZSA9IGhhc0ludm9rZSwKICAgICAgICBfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycyA9IHByb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgX2FyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWQgPSBhcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkLAogICAgICAgIF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzID0gdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVyczsKCiAgYm9vbCBpbnZva2UoQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICBpZiAoaXNGdWxseVVzZWQpIHJldHVybiBmYWxzZTsKICAgIF9oYXNJbnZva2UgPSB0cnVlOwogICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICBpZiAoX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBpbnQgbmV3UHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycyA9IE1hdGgubWF4KAogICAgICAgICAgX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMsIGNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQpOwogICAgICBjaGFuZ2VkIHw9CiAgICAgICAgICBuZXdQcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzICE9IF9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgICBfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycyA9IG5ld1Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICAgIGlmIChfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycyA+PQogICAgICAgICAgX3BhcmFtZXRlclN0cnVjdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgIF9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbnVsbDsKICAgICAgfQogICAgfQogICAgaWYgKF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzICE9IG51bGwgJiYKICAgICAgICBjYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgaW50IF9wcm92aWRlZE5hbWVkUGFyYW1ldGVyc0NvdW50ID0gX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnMubGVuZ3RoOwogICAgICBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycy5yZW1vdmVBbGwoY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cyk7CiAgICAgIGNoYW5nZWQgfD0KICAgICAgICAgIF9wcm92aWRlZE5hbWVkUGFyYW1ldGVyc0NvdW50ICE9IF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgaWYgKF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgICBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycyA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmICghX2FyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWQgJiYgY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgX2FyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWQgPSB0cnVlOwogICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjaGFuZ2VkOwogIH0KCiAgYm9vbCBnZXQgaGFzSW52b2tlID0+IF9oYXNJbnZva2U7CgogIGJvb2wgZ2V0IGlzRnVsbHlVc2VkID0+CiAgICAgIF9oYXNJbnZva2UgJiYKICAgICAgX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMgPT0gbnVsbCAmJgogICAgICBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycyA9PSBudWxsICYmCiAgICAgIF9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkOwoKICB2b2lkIGZ1bGx5VXNlKCkgewogICAgX2hhc0ludm9rZSA9IHRydWU7CiAgICBfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycyA9IG51bGw7CiAgICBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycyA9IG51bGw7CiAgICBfYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZCA9IHRydWU7CiAgfQoKICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgZ2V0IGludm9rZWRQYXJhbWV0ZXJzIHsKICAgIGlmICghX2hhc0ludm9rZSkgcmV0dXJuIG51bGw7CiAgICBpZiAoaXNGdWxseVVzZWQpIHJldHVybiBfcGFyYW1ldGVyU3RydWN0dXJlOwogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUoCiAgICAgICAgX3BhcmFtZXRlclN0cnVjdHVyZS5yZXF1aXJlZFBhcmFtZXRlcnMsCiAgICAgICAgX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMgPz8KICAgICAgICAgICAgX3BhcmFtZXRlclN0cnVjdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycyA9PSBudWxsCiAgICAgICAgICAgID8gX3BhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMKICAgICAgICAgICAgOiBfcGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycwogICAgICAgICAgICAgICAgLndoZXJlKChuKSA9PiAhX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnMuY29udGFpbnMobikpCiAgICAgICAgICAgICAgICAudG9MaXN0KCksCiAgICAgICAgX2FyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWQgPyBfcGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzIDogMCk7CiAgfQoKICBQYXJhbWV0ZXJVc2FnZSBjbG9uZSgpIHsKICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVXNhZ2UuY2xvbmVkKF9wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgaGFzSW52b2tlOiBfaGFzSW52b2tlLAogICAgICAgIHByb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnM6IF9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIGFyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWQ6IF9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkLAogICAgICAgIHVucHJvdmlkZWROYW1lZFBhcmFtZXRlcnM6IF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzPy50b1NldCgpKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnUGFyYW1ldGVyVXNhZ2UoJwogICAgICAgICdfaGFzSW52b2tlPSRfaGFzSW52b2tlLCcKICAgICAgICAnX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnM9JF9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzLCcKICAgICAgICAnX2FyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWQ9JF9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkLCcKICAgICAgICAnX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnM9JF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzKSc7CiAgfQp9CgovLy8gRW51bSBmb3IgbWVtYmVyIGFjY2VzcyBraW5kcyB1c2UgaW4gW01lbWJlclVzYWdlXSBjb21wdXRhdGlvbiBkdXJpbmcKLy8vIHJlc29sdXRpb24gb3IgY29kZWdlbiBlbnF1ZXVlaW5nLgplbnVtIEFjY2VzcyB7CiAgLy8vIFN0YXRpY2FsbHkgYm91bmQgYWNjZXNzIG9mIGEgbWVtYmVyLgogIHN0YXRpY0FjY2VzcywKCiAgLy8vIER5bmFtaWNhbGx5IGJvdW5kIGFjY2VzcyBvZiBhIG1lbWJlci4KICBkeW5hbWljQWNjZXNzLAoKICAvLy8gRGlyZWN0IGFjY2VzcyBvZiBhIHN1cGVyIGNsYXNzIG1lbWJlci4KICBzdXBlckFjY2VzcywKfQoKLy8vIEFjY2VzcyBzZXRzIHVzZWQgZm9yIHJlZ2lzdHJhdGlvbiBvZiBtZW1iZXIgdXNhZ2UuCmNsYXNzIEFjY2Vzc2VzIHsKICAvLy8gU3RhdGljYWxseSBib3VuZCBhY2Nlc3Mgb2YgYSBtZW1iZXIuCiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8QWNjZXNzPiBzdGF0aWNBY2Nlc3MgPSBjb25zdCBFbnVtU2V0PEFjY2Vzcz4uZml4ZWQoMSk7CgogIC8vLyBEeW5hbWljYWxseSBib3VuZCBhY2Nlc3Mgb2YgYSBtZW1iZXIuIFRoaXMgaW1wbGllcyB0aGUgc3RhdGljYWxseSBib3VuZAogIC8vLyBhY2Nlc3Mgb2YgdGhlIG1lbWJlci4KICBzdGF0aWMgY29uc3QgRW51bVNldDxBY2Nlc3M+IGR5bmFtaWNBY2Nlc3MgPSBjb25zdCBFbnVtU2V0PEFjY2Vzcz4uZml4ZWQoMyk7CgogIC8vLyBEaXJlY3QgYWNjZXNzIG9mIGEgc3VwZXIgY2xhc3MgbWVtYmVyLiBUaGlzIGltcGxpZXMgdGhlIHN0YXRpY2FsbHkgYm91bmQKICAvLy8gYWNjZXNzIG9mIHRoZSBtZW1iZXIuCiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8QWNjZXNzPiBzdXBlckFjY2VzcyA9IGNvbnN0IEVudW1TZXQ8QWNjZXNzPi5maXhlZCg1KTsKfQoKLy8vIFRoZSBhY2Nlc3NlcyBvZiBhIG1lbWJlciBjb2xsZWN0ZWQgZHVyaW5nIGNsb3NlZCB3b3JsZCBjb21wdXRhdGlvbi4KY2xhc3MgTWVtYmVyQWNjZXNzIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdNZW1iZXJBY2Nlc3MnOwoKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gcmVhZHM7CiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHdyaXRlczsKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gaW52b2tlczsKCiAgTWVtYmVyQWNjZXNzKHRoaXMucmVhZHMsIHRoaXMud3JpdGVzLCB0aGlzLmludm9rZXMpOwoKICBmYWN0b3J5IE1lbWJlckFjY2Vzcy5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNv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b3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnIHNob3cgTmF0aXZlQmFzaWNEYXRhOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgV29ybGQsIEpDbG9zZWRXb3JsZCwgT3BlbldvcmxkOwppbXBvcnQgJ3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAndXNlLmRhcnQnIHNob3cgRHluYW1pY1VzZSwgU3RhdGljVXNlOwoKLy8vIFRoZSBjb21iaW5lZCBjb25zdHJhaW50cyBvbiByZWNlaXZlcnMgYWxsIHRoZSBkeW5hbWljIGNhbGwgc2l0ZXMgb2YgdGhlIHNhbWUKLy8vIHNlbGVjdG9yLgovLy8KLy8vIEZvciBpbnN0YW5jZSBmb3IgdGhlc2UgY2FsbHMKLy8vCi8vLyAgICAgY2xhc3MgQSB7Ci8vLyAgICAgICAgZm9vKGEsIGIpIHt9Ci8vLyAgICAgfQovLy8gICAgIGNsYXNzIEIgewovLy8gICAgICAgIGZvbyhhLCBiKSB7fQovLy8gICAgIH0KLy8vICAgICBjbGFzcyBDIHsKLy8vICAgICAgICBmb28oYSwgYikge30KLy8vICAgICB9Ci8vLyAgICAgbmV3IEEoKS5mb28oYSwgYik7Ci8vLyAgICAgbmV3IEIoKS5mb28oMCwgNDIpOwovLy8KLy8vIHRoZSBzZWxlY3RvciBjb25zdHJhaW50cyBmb3IgZHluYW1pYyBjYWxscyB0byAnZm9vJyB3aXRoIHR3byBwb3NpdGlvbmFsCi8vLyBhcmd1bWVudHMgY291bGQgYmUgJ3JlY2VpdmVyIG9mIGV4YWN0IGluc3RhbmNlIGBBYCBvciBgQmAnLgphYnN0cmFjdCBjbGFzcyBTZWxlY3RvckNvbnN0cmFpbnRzIHsKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW25hbWVdIGFwcGxpZXMgdG8gW2VsZW1lbnRdIHVuZGVyIHRoZXNlIGNvbnN0cmFpbnRzCiAgLy8vIGdpdmVuIHRoZSBjbG9zZWQgW3dvcmxkXS4KICAvLy8KICAvLy8gQ29uc2lkZXIgZm9yIGluc3RhbmNlIGluIHRoaXMgd29ybGQ6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHsKICAvLy8gICAgICAgIGZvbyhhLCBiKSB7fQogIC8vLyAgICAgfQogIC8vLyAgICAgY2xhc3MgQiB7CiAgLy8vICAgICAgICBmb28oYSwgYikge30KICAvLy8gICAgIH0KICAvLy8gICAgIG5ldyBBKCkuZm9vKGEsIGIpOwogIC8vLwogIC8vLyBJZGVhbGx5IHRoZSBzZWxlY3RvciBjb25zdHJhaW50cyBmb3IgY2FsbHMgYGZvb2Agd2l0aCB0d28gcG9zaXRpb25hbAogIC8vLyBhcmd1bWVudHMgYXBwbHkgdG8gYEEuZm9vYCBidXQgYEIuZm9vYC4KICBib29sIGNhbkhpdChNZW1iZXJFbnRpdHkgZWxlbWVudCwgTmFtZSBuYW1lLCBjb3ZhcmlhbnQgV29ybGQgd29ybGQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSByZWNlaXZlcnMgbWF0Y2hpbmcgdGhlc2UgY29uc3RyYWludHMKICAvLy8gaW4gdGhlIGNsb3NlZCBbd29ybGRdIGhhdmUgbm8gaW1wbGVtZW50YXRpb24gbWF0Y2hpbmcgW3NlbGVjdG9yXS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGZvciB0aGlzIGNvZGUgc25pcHBldAogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiB7IGZvbygpIHt9IH0KICAvLy8gICAgIG0oYikgPT4gKGIgPyBuZXcgQSgpIDogbmV3IEIoKSkuZm9vKCk7CiAgLy8vCiAgLy8vIHRoZSBwb3RlbnRpYWwgcmVjZWl2ZXIgYG5ldyBBKClgIGhhcyBubyBpbXBsZW1lbnRhdGlvbiBvZiBgZm9vYCBhbmQgdGh1cwogIC8vLyBuZWVkcyB0byBoYW5kbGUgdGhlIGNhbGwgdGhyb3VnaCBpdHMgYG5vU3VjaE1ldGhvZGAgaGFuZGxlci4KICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoU2VsZWN0b3Igc2VsZWN0b3IsIGNvdmFyaWFudCBXb3JsZCB3b3JsZCk7Cn0KCi8vLyBBIG11dGFibGUgW1NlbGVjdG9yQ29uc3RyYWludHNdIHVzZWQgaW4gW1dvcmxkQnVpbGRlcl0uCmFic3RyYWN0IGNsYXNzIFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cyBleHRlbmRzIFNlbGVjdG9yQ29uc3RyYWludHMgewogIC8vLyBBZGRzIFtjb25zdHJhaW50XSB0byB0aGVzZSBzZWxlY3RvciBjb25zdHJhaW50cy4gUmV0dXJuIGB0cnVlYCBpZiB0aGUgc2V0CiAgLy8vIG9mIHBvdGVudGlhbCByZWNlaXZlcnMgZXhwYW5kZWQgZHVlIHRvIHRoZSBuZXcgY29uc3RyYWludC4KICBib29sIGFkZFJlY2VpdmVyQ29uc3RyYWludChjb3ZhcmlhbnQgT2JqZWN0IGNvbnN0cmFpbnQpOwp9CgovLy8gU3RyYXRlZ3kgZm9yIGNvbXB1dGluZyB0aGUgY29uc3RyYWludHMgb24gcG90ZW50aWFsIHJlY2VpdmVycyBvZiBkeW5hbWljCi8vLyBjYWxsIHNpdGVzLgphYnN0cmFjdCBjbGFzcyBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgewogIC8vLyBDcmVhdGUgYSBbVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzXSB0byByZXByZXNlbnQgdGhlIGdsb2JhbCByZWNlaXZlcgogIC8vLyBjb25zdHJhaW50cyBmb3IgZHluYW1pYyBjYWxsIHNpdGVzIHdpdGggW3NlbGVjdG9yXS4KICBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMgY3JlYXRlU2VsZWN0b3JDb25zdHJhaW50cygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIE9iamVjdCBpbml0aWFsQ29uc3RyYWludCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCAgaWYgW21lbWJlcl0gaXMgYSBwb3RlbnRpYWwgdGFyZ2V0IG9mIFtkeW5hbWljVXNlXS4KICBib29sIGFwcGxpZWRVbm5hbWVkKER5bmFtaWNVc2UgZHluYW1pY1VzZSwgTWVtYmVyRW50aXR5IG1lbWJlciwgV29ybGQgd29ybGQpOwp9CgovLy8gT3BlbiB3b3JsZCBzdHJhdGVneSB0aGF0IGNvbnN0cmFpbnMgaW5zdGFuY2UgbWVtYmVyIGFjY2VzcyB0byBzdWJ0eXBlcyBvZgovLy8gdGhlIHN0YXRpYyB0eXBlIG9mIHRoZSByZWNlaXZlci4KLy8vCi8vLyBUaGlzIHN0cmF0ZWd5IGlzIHVzZWQgZm9yIERhcnQgMi4KY2xhc3MgU3Ryb25nTW9kZVdvcmxkU3RyYXRlZ3kgaW1wbGVtZW50cyBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgewogIGNvbnN0IFN0cm9uZ01vZGVXb3JsZFN0cmF0ZWd5KCk7CgogIEBvdmVycmlkZQogIFN0cm9uZ01vZGVXb3JsZENvbnN0cmFpbnRzIGNyZWF0ZVNlbGVjdG9yQ29uc3RyYWludHMoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBPYmplY3QgaW5pdGlhbENvbnN0cmFpbnQpIHsKICAgIHJldHVybiBuZXcgU3Ryb25nTW9kZVdvcmxkQ29uc3RyYWludHMoKQogICAgICAuLmFkZFJlY2VpdmVyQ29uc3RyYWludChpbml0aWFsQ29uc3RyYWludCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFwcGxpZWRVbm5hbWVkKAogICAgICBEeW5hbWljVXNlIGR5bmFtaWNVc2UsIE1lbWJlckVudGl0eSBtZW1iZXIsIGNvdmFyaWFudCBPcGVuV29ybGQgd29ybGQpIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZHluYW1pY1VzZS5zZWxlY3RvcjsKICAgIFN0cm9uZ01vZGVDb25zdHJhaW50IGNvbnN0cmFpbnQgPSBkeW5hbWljVXNlLnJlY2VpdmVyQ29uc3RyYWludDsKICAgIHJldHVybiBzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpICYmCiAgICAgICAgKGNvbnN0cmFpbnQgPT0gbnVsbCB8fAogICAgICAgICAgICBjb25zdHJhaW50LmNhbkhpdChtZW1iZXIsIHNlbGVjdG9yLm1lbWJlck5hbWUsIHdvcmxkKSk7CiAgfQp9CgpjbGFzcyBTdHJvbmdNb2RlV29ybGRDb25zdHJhaW50cyBleHRlbmRzIFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cyB7CiAgYm9vbCBpc0FsbCA9IGZhbHNlOwogIFNldDxTdHJvbmdNb2RlQ29uc3RyYWludD4gX2NvbnN0cmFpbnRzOwoKICBAb3ZlcnJpZGUKICBib29sIGNhbkhpdChNZW1iZXJFbnRpdHkgZWxlbWVudCwgTmFtZSBuYW1lLCBXb3JsZCB3b3JsZCkgewogICAgaWYgKGlzQWxsKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChfY29uc3RyYWludHMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChTdHJvbmdNb2RlQ29uc3RyYWludCBjb25zdHJhaW50IGluIF9jb25zdHJhaW50cykgewogICAgICBpZiAoY29uc3RyYWludC5jYW5IaXQoZWxlbWVudCwgbmFtZSwgd29ybGQpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgbmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhTZWxlY3RvciBzZWxlY3RvciwgV29ybGQgd29ybGQpIHsKICAgIGlmIChpc0FsbCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfY29uc3RyYWludHMgIT0gbnVsbCkgewogICAgICBmb3IgKFN0cm9uZ01vZGVDb25zdHJhaW50IGNvbnN0cmFpbnQgaW4gX2NvbnN0cmFpbnRzKSB7CiAgICAgICAgaWYgKGNvbnN0cmFpbnQubmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhzZWxlY3Rvciwgd29ybGQpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWRkUmVjZWl2ZXJDb25zdHJhaW50KFN0cm9uZ01vZGVDb25zdHJhaW50IGNvbnN0cmFpbnQpIHsKICAgIGlmIChpc0FsbCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGNvbnN0cmFpbnQ/LmNscyA9PSBudWxsKSB7CiAgICAgIGlzQWxsID0gdHJ1ZTsKICAgICAgX2NvbnN0cmFpbnRzID0gbnVsbDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfY29uc3RyYWludHMgPz89IG5ldyBTZXQ8U3Ryb25nTW9kZUNvbnN0cmFpbnQ+KCk7CiAgICByZXR1cm4gX2NvbnN0cmFpbnRzLmFkZChjb25zdHJhaW50KTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChpc0FsbCkgewogICAgICByZXR1cm4gJzxhbGw+JzsKICAgIH0gZWxzZSBpZiAoX2NvbnN0cmFpbnRzICE9IG51bGwpIHsKICAgICAgcmV0dXJuICc8JHtfY29uc3RyYWludHMubWFwKChjKSA9PiBjLmNscykuam9pbignLCcpfT4nOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICc8bm9uZT4nOwogICAgfQogIH0KfQoKY2xhc3MgU3Ryb25nTW9kZUNvbnN0cmFpbnQgewogIGZpbmFsIENsYXNzRW50aXR5IGNsczsKICBmaW5hbCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uOwoKICBmYWN0b3J5IFN0cm9uZ01vZGVDb25zdHJhaW50KENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlQmFzaWNEYXRhLCBDbGFzc0VudGl0eSBjbHMsCiAgICAgIFtDbGFzc1JlbGF0aW9uIHJlbGF0aW9uID0gQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlXSkgewogICAgaWYgKG5hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHsKICAgICAgLy8gV2UgY2FuIG5vdCB0ZWxsIGpzLWludGVyb3AgY2xhc3NlcyBhcGFydCwgc28gd2UganVzdCBhc3N1bWUgdGhlCiAgICAgIC8vIHJlY2VpdmVyIGNvdWxkIGJlIGFueSBqcy1pbnRlcm9wIGNsYXNzLgogICAgICBjbHMgPSBjb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzczsKICAgICAgcmVsYXRpb24gPSBDbGFzc1JlbGF0aW9uLnN1YnR5cGU7CiAgICB9CiAgICByZXR1cm4gbmV3IFN0cm9uZ01vZGVDb25zdHJhaW50LmludGVybmFsKGNscywgcmVsYXRpb24pOwogIH0KCiAgY29uc3QgU3Ryb25nTW9kZUNvbnN0cmFpbnQuaW50ZXJuYWwodGhpcy5jbHMsIHRoaXMucmVsYXRpb24pOwoKICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoU2VsZWN0b3Igc2VsZWN0b3IsIFdvcmxkIHdvcmxkKSA9PiB0cnVlOwoKICBib29sIGNhbkhpdChNZW1iZXJFbnRpdHkgZWxlbWVudCwgTmFtZSBuYW1lLCBPcGVuV29ybGQgd29ybGQpIHsKICAgIHJldHVybiB3b3JsZC5pc0luaGVyaXRlZEluKGVsZW1lbnQsIGNscywgcmVsYXRpb24pOwogIH0KCiAgYm9vbCBnZXQgaXNFeGFjdCA9PiByZWxhdGlvbiA9PSBDbGFzc1JlbGF0aW9uLmV4YWN0OwoKICBib29sIGdldCBpc1RoaXMgPT4gcmVsYXRpb24gPT0gQ2xhc3NSZWxhdGlvbi50aGlzRXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBTdHJvbmdNb2RlQ29uc3RyYWludCAmJgogICAgICAgIGNscyA9PSBvdGhlci5jbHMgJiYKICAgICAgICByZWxhdGlvbiA9PSBvdGhlci5yZWxhdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gY2xzLmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTdHJvbmdNb2RlQ29uc3RyYWludCgkY2xzLCRyZWxhdGlvbiknOwp9CgovLy8gVGhlIFtXb3JsZEJ1aWxkZXJdIGlzIGFuIGF1eGlsaWFyeSBjbGFzcyB1c2VkIGluIHRoZSBwcm9jZXNzIG9mIGNvbXB1dGluZwovLy8gdGhlIFtKQ2xvc2VkV29ybGRdLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNb3ZlIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiB0byBhIFtXb3JsZEJ1aWxkZXJCYXNlXSB3aGVuCi8vIHVuaXZlcnNlcyBhbmQgd29ybGRzIGhhdmUgYmVlbiB1bmlmaWVkLgphYnN0cmFjdCBjbGFzcyBXb3JsZEJ1aWxkZXIgewogIC8vLyBBbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMsIHRoYXQgaXMsIGNsYXNzZXMgd2l0aCBhIGdlbmVyYXRpdmUKICAvLy8gY29uc3RydWN0b3IgdGhhdCBoYXMgYmVlbiBjYWxsZWQgZGlyZWN0bHkgYW5kIG5vdCBvbmx5IHRocm91Z2ggYQogIC8vLyBzdXBlci1jYWxsLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcHJvdmUgc2VtYW50aWMgcHJlY2lzaW9uLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzOwp9CgphYnN0cmFjdCBjbGFzcyBXb3JsZEJ1aWxkZXJCYXNlIHsKICBmaW5hbCBNYXA8RW50aXR5LCBTZXQ8RGFydFR5cGU+PiBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMgPQogICAgICA8RW50aXR5LCBTZXQ8RGFydFR5cGU+Pnt9OwoKICBmaW5hbCBNYXA8U2VsZWN0b3IsIFNldDxEYXJ0VHlwZT4+IGR5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMgPQogICAgICA8U2VsZWN0b3IsIFNldDxEYXJ0VHlwZT4+e307CgogIGZpbmFsIFNldDxUeXBlVmFyaWFibGVUeXBlPiB0eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHMgPQogICAgICBuZXcgU2V0PFR5cGVWYXJpYWJsZVR5cGU+KCk7CgogIHZvaWQgX3JlZ2lzdGVyU3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jeSgKICAgICAgRW50aXR5IGVsZW1lbnQsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcy5wdXRJZkFic2VudCgKICAgICAgICBlbGVtZW50LCAoKSA9PiBuZXcgU2V0PERhcnRUeXBlPigpKQogICAgICAuLmFkZEFsbCh0eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgX3JlZ2lzdGVyRHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY3koCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLnB1dElmQWJzZW50KAogICAgICAgIHNlbGVjdG9yLCAoKSA9PiBuZXcgU2V0PERhcnRUeXBlPigpKQogICAgICAuLmFkZEFsbCh0eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY1VzZSBzdGF0aWNVc2UpIHsKICAgIGlmIChzdGF0aWNVc2UudHlwZUFyZ3VtZW50cyA9PSBudWxsIHx8IHN0YXRpY1VzZS50eXBlQXJndW1lbnRzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgX3JlZ2lzdGVyU3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jeSgKICAgICAgICBzdGF0aWNVc2UuZWxlbWVudCwgc3RhdGljVXNlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgdm9pZCByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgaWYgKHR5cGVBcmd1bWVudHMuaXNFbXB0eSkgcmV0dXJuOwogICAgX3JlZ2lzdGVyRHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY3koc2VsZWN0b3IsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgdm9pZCByZWdpc3RlclR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKSB7CiAgICB0eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHMuYWRkKHR5cGVWYXJpYWJsZSk7CiAgfQp9CoEJAE5OPAEXASIkISEhPjwmLgFRDgQhBBIYChIYChIYChscBExAJUwgBisGFBoMFBoMHQZLLkcBUUgGKQYVHzEGT0NMAgE8SVBBOwIBTRAtTjo5NAFJUAIBTiUEJkcjAQw4NSwyBAEMF08tRS4fRAQCAUcWKgEMPhwsPDUVCAYSBAEMQxETBiA+RRcKCAYSBAEMQB0jFBsTBjYpBAEMFhEWJz4NFwYEAgEdGSABPjg6MUkxNCgGPQQBQAFKAUI4BAE3AT8BDCMtLBwkBAEMKQEMPwIBThhQKx5MRxI2OQIBIkQhAUcjATkjAS42MCwfBAEvOTEtHwQBN04OBis1BAEiOSdFBAFIMAQCATBwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnRFc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0q4ovLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHM7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnMsIFNlbGVjdG9yczsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gW05vU3VjaE1ldGhvZFJlZ2lzdHJ5XSBhbmQgW05vU3VjaE1ldGhvZERhdGFdIGNhdGVnb3JpemVzIGBub1N1Y2hNZXRob2RgCi8vLyBpbXBsZW1lbnRhdGlvbnMuCi8vLwovLy8gSWYgdXNlciBjb2RlIGluY2x1ZGVzIGBub1N1Y2hNZXRob2RgIGltcGxlbWVudGF0aW9ucywgdHlwZSBpbmZlcmVuY2UgaXMKLy8vIGhpbmRlcmVkIGJlY2F1c2UgKGZvciBpbnN0YW5jZSkgYW55IHNlbGVjdG9yIHdoZXJlIHRoZSB0eXBlIG9mIHRoZQovLy8gcmVjZWl2ZXIgaXMgbm90IGtub3duIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgYG5vU3VjaE1ldGhvZGAgbXVzdCBiZSB0YWtlbgovLy8gaW50byBhY2NvdW50IHdoZW4gaW5mZXJyaW5nIHRoZSByZXR1cm4gdHlwZS4KLy8vCi8vLyBUaGUgc2l0dWF0aW9uIGNhbiBiZSBhbWVsaW9yYXRlZCB3aXRoIHNvbWUgaGV1cmlzdGljcyBmb3IgZGlzcmVnYXJkaW5nIHNvbWUKLy8vIGBub1N1Y2hNZXRob2RgIGltcGxlbWVudGF0aW9ucyBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuIFdlIGNhbiBwYXJ0aXRpb24KLy8vIGBub1N1Y2hNZXRob2RgIGltcGxlbWVudGF0aW9ucyBpbnRvIDQgY2F0ZWdvcmllcy4KLy8vCi8vLyBJbXBsZW1lbnRhdGlvbnMgaW4gY2F0ZWdvcnkgQSBhcmUgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zCi8vLyBgT2JqZWN0Lm5vU3VjaE1ldGhvZGAgYW5kIGBJbnRlcmNlcHRvci5ub1N1Y2hNZXRob2RgLgovLy8KLy8vIEltcGxlbWVudGF0aW9ucyBpbiBjYXRlZ29yeSBCIHN5bnRhY3RpY2FsbHkgaW1tZWRpYXRlbHkgdGhyb3csIGZvciBleGFtcGxlOgovLy8KLy8vICAgICBub1N1Y2hNZXRob2QoeCkgPT4gdGhyb3cgJ25vdCBpbXBsZW1lbnRlZCcKLy8vCi8vLyBJbXBsZW1lbnRhdGlvbnMgaW4gY2F0ZWdvcnkgQyBhcmUgbm90IGFwcGxpY2FibGUsIGZvciBleGFtcGxlOgovLy8KLy8vICAgICBub1N1Y2hNZXRob2QoKSB7IC8qIG1pc3NpbmcgcGFyYW1ldGVyICovIH0KLy8vICAgICBub1N1Y2hNZXRob2QoYSwgYikgeyAvKiB0b28gbWFueSBwYXJhbWV0ZXJzICovIH0KLy8vCi8vLyBJbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGNhdGVnb3J5IEEsIEIgb3IgQyBhcmUgaW4gY2F0ZWdvcnkgRC4KLy8vIFRoZXkgYXJlIHRoZSBvbmx5IGNhdGVnb3J5IG9mIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlIGNvbnNpZGVyZWQgZHVyaW5nIHR5cGUKLy8vIGluZmVyZW5jZS4KLy8vCi8vLyBJbXBsZW1lbnRhdGlvbnMgdGhhdCBzeW50YWN0aWNhbGx5IGp1c3QgZm9yd2FyZCB0byB0aGUgc3VwZXIgaW1wbGVtZW50YXRpb24sCi8vLyBmb3IgZXhhbXBsZToKLy8vCi8vLyAgICAgbm9TdWNoTWV0aG9kKHgpID0+IHN1cGVyLm5vU3VjaE1ldGhvZCh4KTsKLy8vCi8vLyBhcmUgaW4gdGhlIHNhbWUgY2F0ZWdvcnkgYXMgdGhlIHN1cGVyY2xhc3MgaW1wbGVtZW50YXRpb24uIFRoaXMgY292ZXJzIGEKLy8vIGNvbW1vbiBjYXNlLCB3aGVyZSB1c2VycyBpbXBsZW1lbnQgYG5vU3VjaE1ldGhvZGAgd2l0aCB0aGVzZSBkdW1teQovLy8gaW1wbGVtZW50YXRpb25zIHRvIGF2b2lkIHdhcm5pbmdzLgoKLy8vIFJlZ2lzdHJ5IGZvciBjb2xsZWN0aW5nIGBub1N1Y2hNZXRob2RgIGltcGxlbWVudGF0aW9ucyBhbmQgY2F0ZWdvcml6aW5nIHRoZW0KLy8vIGludG8gY2F0ZWdvcmllcyBgQWAsIGBCYCwgYENgLCBgRGAuCmFic3RyYWN0IGNsYXNzIE5vU3VjaE1ldGhvZFJlZ2lzdHJ5IHsKICAvLy8gUmVnaXN0ZXIgW25vU3VjaE1ldGhvZEVsZW1lbnRdLgogIHZvaWQgcmVnaXN0ZXJOb1N1Y2hNZXRob2QoRnVuY3Rpb25FbnRpdHkgbm9TdWNoTWV0aG9kRWxlbWVudCk7CgogIC8vLyBDYXRlZ29yaXplcyB0aGUgcmVnaXN0ZXJlZCBtZXRob2RzLgogIHZvaWQgb25RdWV1ZUVtcHR5KCk7CgogIC8vLyBgdHJ1ZWAgaWYgYSBjYXRlZ29yeSBgQmAgbWV0aG9kIGhhcyBiZWVuIHNlZW4gc28gZmFyLgogIGJvb2wgZ2V0IGhhc1Rocm93aW5nTm9TdWNoTWV0aG9kOwoKICAvLy8gYHRydWVgIGlmIGEgY2F0ZWdvcnkgYERgIG1ldGhvZCBoYXMgYmVlbiBzZWVuIHNvIGZhci4KICBib29sIGdldCBoYXNDb21wbGV4Tm9TdWNoTWV0aG9kOwoKICAvLy8gQ2xvc2VzIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJucyBkYXRhIG9iamVjdCB1c2VkIGR1cmluZyB0eXBlIGluZmVyZW5jZS4KICBOb1N1Y2hNZXRob2REYXRhIGNsb3NlKCk7Cn0KCmNsYXNzIE5vU3VjaE1ldGhvZFJlZ2lzdHJ5SW1wbCBpbXBsZW1lbnRzIE5vU3VjaE1ldGhvZFJlZ2lzdHJ5IHsKICAvLy8gVGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGZhbGwgaW50byBjYXRlZ29yeSBBLCBkZXNjcmliZWQgYWJvdmUuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBkZWZhdWx0SW1wbHMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICAvLy8gVGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGZhbGwgaW50byBjYXRlZ29yeSBCLCBkZXNjcmliZWQgYWJvdmUuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiB0aHJvd2luZ0ltcGxzID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgLy8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBmYWxsIGludG8gY2F0ZWdvcnkgQywgZGVzY3JpYmVkIGFib3ZlLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIGNhdGVnb3J5IHdoZW4gRGFydCAxIGlzIG5vIGxvbmdlcgogIC8vIHN1cHBvcnRlZC4KICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IG5vdEFwcGxpY2FibGVJbXBscyA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIC8vLyBUaGUgaW1wbGVtZW50YXRpb25zIHRoYXQgZmFsbCBpbnRvIGNhdGVnb3J5IEQsIGRlc2NyaWJlZCBhYm92ZS4KICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IG90aGVySW1wbHMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICAvLy8gVGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIGNhdGVnb3JpemVkLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX3VuY2F0ZWdvcml6ZWRJbXBscyA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIC8vLyBUaGUgaW1wbGVtZW50YXRpb25zIHRoYXQgYSBmb3J3YXJkaW5nIHN5bnRheCBhcyBkZWZpbmVkIGJ5CiAgLy8vIFtOb1N1Y2hNZXRob2RSZXNvbHZlci5oYXNGb3J3YXJkU3ludGF4XS4KICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IGZvcndhcmRpbmdTeW50YXhJbXBscyA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBOb1N1Y2hNZXRob2RSZXNvbHZlciBfcmVzb2x2ZXI7CgogIE5vU3VjaE1ldGhvZFJlZ2lzdHJ5SW1wbCh0aGlzLl9jb21tb25FbGVtZW50cywgdGhpcy5fcmVzb2x2ZXIpOwoKICBOb1N1Y2hNZXRob2RSZXNvbHZlciBnZXQgaW50ZXJuYWxSZXNvbHZlckZvclRlc3RpbmcgPT4gX3Jlc29sdmVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNUaHJvd2luZ05vU3VjaE1ldGhvZCA9PiB0aHJvd2luZ0ltcGxzLmlzTm90RW1wdHk7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaGFzQ29tcGxleE5vU3VjaE1ldGhvZCA9PiBvdGhlckltcGxzLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJOb1N1Y2hNZXRob2QoRnVuY3Rpb25FbnRpdHkgbm9TdWNoTWV0aG9kRWxlbWVudCkgewogICAgX3VuY2F0ZWdvcml6ZWRJbXBscy5hZGQobm9TdWNoTWV0aG9kRWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uUXVldWVFbXB0eSgpIHsKICAgIF91bmNhdGVnb3JpemVkSW1wbHMuZm9yRWFjaChfY2F0ZWdvcml6ZUltcGwpOwogICAgX3VuY2F0ZWdvcml6ZWRJbXBscy5jbGVhcigpOwogIH0KCiAgTnNtQ2F0ZWdvcnkgX2NhdGVnb3JpemVJbXBsKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50Lm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CiAgICBhc3NlcnQoIWVsZW1lbnQuaXNBYnN0cmFjdCk7CiAgICBpZiAoZGVmYXVsdEltcGxzLmNvbnRhaW5zKGVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBOc21DYXRlZ29yeS5ERUZBVUxUOwogICAgfQogICAgaWYgKHRocm93aW5nSW1wbHMuY29udGFpbnMoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIE5zbUNhdGVnb3J5LlRIUk9XSU5HOwogICAgfQogICAgaWYgKG90aGVySW1wbHMuY29udGFpbnMoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIE5zbUNhdGVnb3J5Lk9USEVSOwogICAgfQogICAgaWYgKG5vdEFwcGxpY2FibGVJbXBscy5jb250YWlucyhlbGVtZW50KSkgewogICAgICByZXR1cm4gTnNtQ2F0ZWdvcnkuTk9UX0FQUExJQ0FCTEU7CiAgICB9CiAgICBpZiAoIVNlbGVjdG9ycy5ub1N1Y2hNZXRob2RfLnNpZ25hdHVyZUFwcGxpZXMoZWxlbWVudCkpIHsKICAgICAgbm90QXBwbGljYWJsZUltcGxzLmFkZChlbGVtZW50KTsKICAgICAgcmV0dXJuIE5zbUNhdGVnb3J5Lk5PVF9BUFBMSUNBQkxFOwogICAgfQogICAgaWYgKF9jb21tb25FbGVtZW50cy5pc0RlZmF1bHROb1N1Y2hNZXRob2RJbXBsZW1lbnRhdGlvbihlbGVtZW50KSkgewogICAgICBkZWZhdWx0SW1wbHMuYWRkKGVsZW1lbnQpOwogICAgICByZXR1cm4gTnNtQ2F0ZWdvcnkuREVGQVVMVDsKICAgIH0gZWxzZSBpZiAoX3Jlc29sdmVyLmhhc0ZvcndhcmRpbmdTeW50YXgoZWxlbWVudCkpIHsKICAgICAgZm9yd2FyZGluZ1N5bnRheEltcGxzLmFkZChlbGVtZW50KTsKICAgICAgLy8gSWYgdGhlIGltcGxlbWVudGF0aW9uIGlzICdub1N1Y2hNZXRob2QoeCkgPT4gc3VwZXIubm9TdWNoTWV0aG9kKHgpOycKICAgICAgLy8gdGhlbiBpdCBpcyBpbiB0aGUgc2FtZSBjYXRlZ29yeSBhcyB0aGUgc3VwZXIgY2FsbC4KICAgICAgRnVuY3Rpb25FbnRpdHkgc3VwZXJDYWxsID0gX3Jlc29sdmVyLmdldFN1cGVyTm9TdWNoTWV0aG9kKGVsZW1lbnQpOwogICAgICBOc21DYXRlZ29yeSBjYXRlZ29yeSA9IF9jYXRlZ29yaXplSW1wbChzdXBlckNhbGwpOwogICAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7CiAgICAgICAgY2FzZSBOc21DYXRlZ29yeS5ERUZBVUxUOgogICAgICAgICAgZGVmYXVsdEltcGxzLmFkZChlbGVtZW50KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTnNtQ2F0ZWdvcnkuVEhST1dJTkc6CiAgICAgICAgICB0aHJvd2luZ0ltcGxzLmFkZChlbGVtZW50KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTnNtQ2F0ZWdvcnkuT1RIRVI6CiAgICAgICAgICBvdGhlckltcGxzLmFkZChlbGVtZW50KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTnNtQ2F0ZWdvcnkuTk9UX0FQUExJQ0FCTEU6CiAgICAgICAgICAvLyBJZiB0aGUgc3VwZXIgbWV0aG9kIGlzIG5vdCBhcHBsaWNhYmxlLCB0aGUgY2FsbCBpcyByZWRpcmVjdGVkIHRvCiAgICAgICAgICAvLyBgT2JqZWN0Lm5vU3VjaE1ldGhvZGAuCiAgICAgICAgICBkZWZhdWx0SW1wbHMuYWRkKGVsZW1lbnQpOwogICAgICAgICAgY2F0ZWdvcnkgPSBOc21DYXRlZ29yeS5ERUZBVUxUOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIGNhdGVnb3J5OwogICAgfSBlbHNlIGlmIChfcmVzb2x2ZXIuaGFzVGhyb3dpbmdTeW50YXgoZWxlbWVudCkpIHsKICAgICAgdGhyb3dpbmdJbXBscy5hZGQoZWxlbWVudCk7CiAgICAgIHJldHVybiBOc21DYXRlZ29yeS5USFJPV0lORzsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVySW1wbHMuYWRkKGVsZW1lbnQpOwogICAgICByZXR1cm4gTnNtQ2F0ZWdvcnkuT1RIRVI7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBOb1N1Y2hNZXRob2REYXRhIGNsb3NlKCkgewogICAgcmV0dXJuIG5ldyBOb1N1Y2hNZXRob2REYXRhSW1wbCgKICAgICAgICB0aHJvd2luZ0ltcGxzLCBvdGhlckltcGxzLCBmb3J3YXJkaW5nU3ludGF4SW1wbHMpOwogIH0KfQoKLy8vIERhdGEgb2JqZWN0IHVzZWQgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgovLy8KLy8vIFBvc3QgaW5mZXJlbmNlIGNvbGxlY3RlZCBjYXRlZ29yeSBgRGAgbWV0aG9kcyBhcmUgaW50byBzdWJjYXRlZ29yaWVzIGBEMWAKLy8vIGFuZCBgRDJgLgphYnN0cmFjdCBjbGFzcyBOb1N1Y2hNZXRob2REYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW05vU3VjaE1ldGhvZERhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgTm9TdWNoTWV0aG9kRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpID0KICAgICAgTm9TdWNoTWV0aG9kRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtOb1N1Y2hNZXRob2REYXRhXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIC8vLyBSZXR1cm5zIFt0cnVlXSBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIGNvbXBsZXggW25vU3VjaE1ldGhvZF0KICAvLy8gaW1wbGVtZW50YXRpb24uIEFuIGltcGxlbWVudGF0aW9uIGlzIGNvbXBsZXggaWYgaXQgZmFsbHMgaW50bwogIC8vLyBjYXRlZ29yeSBELCBhcyBkZXNjcmliZWQgYWJvdmUuCiAgYm9vbCBpc0NvbXBsZXgoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBOb3cgdGhhdCB0eXBlIGluZmVyZW5jZSBpcyBjb21wbGV0ZSwgc3BsaXQgY2F0ZWdvcnkgRCBpbnRvIHR3bwogIC8vLyBzdWJjYXRlZ29yaWVzOiBEMSwgdGhvc2UgdGhhdCBoYXZlIG5vIHJldHVybiB0eXBlLCBhbmQgRDIsIHRob3NlCiAgLy8vIHRoYXQgaGF2ZSBhIHJldHVybiB0eXBlLgogIHZvaWQgY2F0ZWdvcml6ZUNvbXBsZXhJbXBsZW1lbnRhdGlvbnMoR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cyk7CgogIC8vLyBFbWl0cyBhIGRpYWdub3N0aWMgYWJvdXQgbWV0aG9kcyBpbiBjYXRlZ29yaWVzIGBCYCwgYEQxYCBhbmQgYEQyYC4KICB2b2lkIGVtaXREaWFnbm9zdGljKERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcik7Cn0KCmNsYXNzIE5vU3VjaE1ldGhvZERhdGFJbXBsIGltcGxlbWVudHMgTm9TdWNoTWV0aG9kRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtOb1N1Y2hNZXRob2REYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ25vLXN1Y2gtbWV0aG9kLWRhdGEnOwoKICAvLy8gVGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGZhbGwgaW50byBjYXRlZ29yeSBCLCBkZXNjcmliZWQgYWJvdmUuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiB0aHJvd2luZ0ltcGxzOwoKICAvLy8gVGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGZhbGwgaW50byBjYXRlZ29yeSBELCBkZXNjcmliZWQgYWJvdmUuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBvdGhlckltcGxzOwoKICAvLy8gVGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGZhbGwgaW50byBjYXRlZ29yeSBEMQogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gY29tcGxleE5vUmV0dXJuSW1wbHMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICAvLy8gVGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGZhbGwgaW50byBjYXRlZ29yeSBEMgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gY29tcGxleFJldHVybmluZ0ltcGxzID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBmb3J3YXJkaW5nU3ludGF4SW1wbHM7CgogIE5vU3VjaE1ldGhvZERhdGFJbXBsKAogICAgICB0aGlzLnRocm93aW5nSW1wbHMsIHRoaXMub3RoZXJJbXBscywgdGhpcy5mb3J3YXJkaW5nU3ludGF4SW1wbHMpOwoKICBmYWN0b3J5IE5vU3VjaE1ldGhvZERhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IHRocm93aW5nSW1wbHMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyczxGdW5jdGlvbkVudGl0eT4oKS50b1NldCgpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBvdGhlckltcGxzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gZm9yd2FyZGluZ1N5bnRheEltcGxzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIExpc3Q8RnVuY3Rpb25FbnRpdHk+IGNvbXBsZXhOb1JldHVybkltcGxzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCk7CiAgICBMaXN0PEZ1bmN0aW9uRW50aXR5PiBjb21wbGV4UmV0dXJuaW5nSW1wbHMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyczxGdW5jdGlvbkVudGl0eT4oKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgTm9TdWNoTWV0aG9kRGF0YUltcGwoCiAgICAgICAgdGhyb3dpbmdJbXBscywgb3RoZXJJbXBscywgZm9yd2FyZGluZ1N5bnRheEltcGxzKQogICAgICAuLmNvbXBsZXhOb1JldHVybkltcGxzLmFkZEFsbChjb21wbGV4Tm9SZXR1cm5JbXBscykKICAgICAgLi5jb21wbGV4UmV0dXJuaW5nSW1wbHMuYWRkQWxsKGNvbXBsZXhSZXR1cm5pbmdJbXBscyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyh0aHJvd2luZ0ltcGxzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKG90aGVySW1wbHMpOwogICAgc2luay53cml0ZU1lbWJlcnMoZm9yd2FyZGluZ1N5bnRheEltcGxzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKGNvbXBsZXhOb1JldHVybkltcGxzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKGNvbXBsZXhSZXR1cm5pbmdJbXBscyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjYXRlZ29yaXplQ29tcGxleEltcGxlbWVudGF0aW9ucyhHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzKSB7CiAgICBvdGhlckltcGxzLmZvckVhY2goKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgICAgaWYgKHJlc3VsdHMucmVzdWx0T2ZNZW1iZXIoZWxlbWVudCkudGhyb3dzQWx3YXlzKSB7CiAgICAgICAgY29tcGxleE5vUmV0dXJuSW1wbHMuYWRkKGVsZW1lbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbXBsZXhSZXR1cm5pbmdJbXBscy5hZGQoZWxlbWVudCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbWl0RGlhZ25vc3RpYyhEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIpIHsKICAgIHRocm93aW5nSW1wbHMuZm9yRWFjaCgoZSkgewogICAgICBpZiAoIWZvcndhcmRpbmdTeW50YXhJbXBscy5jb250YWlucyhlKSkgewogICAgICAgIHJlcG9ydGVyLnJlcG9ydEhpbnRNZXNzYWdlKGUsIE1lc3NhZ2VLaW5kLkRJUkVDVExZX1RIUk9XSU5HX05TTSk7CiAgICAgIH0KICAgIH0pOwogICAgY29tcGxleE5vUmV0dXJuSW1wbHMuZm9yRWFjaCgoZSkgewogICAgICBpZiAoIWZvcndhcmRpbmdTeW50YXhJbXBscy5jb250YWlucyhlKSkgewogICAgICAgIHJlcG9ydGVyLnJlcG9ydEhpbnRNZXNzYWdlKGUsIE1lc3NhZ2VLaW5kLkNPTVBMRVhfVEhST1dJTkdfTlNNKTsKICAgICAgfQogICAgfSk7CiAgICBjb21wbGV4UmV0dXJuaW5nSW1wbHMuZm9yRWFjaCgoZSkgewogICAgICBpZiAoIWZvcndhcmRpbmdTeW50YXhJbXBscy5jb250YWlucyhlKSkgewogICAgICAgIHJlcG9ydGVyLnJlcG9ydEhpbnRNZXNzYWdlKGUsIE1lc3NhZ2VLaW5kLkNPTVBMRVhfUkVUVVJOSU5HX05TTSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbXBsZXgoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQubmFtZSA9PSBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKTsKICAgIHJldHVybiBvdGhlckltcGxzLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KfQoKZW51bSBOc21DYXRlZ29yeSB7CiAgREVGQVVMVCwKICBUSFJPV0lORywKICBOT1RfQVBQTElDQUJMRSwKICBPVEhFUiwKfQoKLy8vIEludGVyZmFjZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGZvcm0gb2YgYSBgbm9TdWNoTWV0aG9kYCBpbXBsZW1lbnRhdGlvbi4KYWJzdHJhY3QgY2xhc3MgTm9TdWNoTWV0aG9kUmVzb2x2ZXIgewogIC8vLyBDb21wdXRlcyB3aGV0aGVyIFttZXRob2RdIGlzIG9mIHRoZSBmb3JtCiAgLy8vCiAgLy8vICAgICBub1N1Y2hNZXRob2QoaSkgPT4gc3VwZXIubm9TdWNoTWV0aG9kKGkpOwogIC8vLwogIGJvb2wgaGFzRm9yd2FyZGluZ1N5bnRheChjb3ZhcmlhbnQgRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgLy8vIENvbXB1dGVzIHdoZXRoZXIgW21ldGhvZF0gaXMgb2YgdGhlIGZvcm0KICAvLy8KICAvLy8gICAgIG5vU3VjaE1ldGhvZChpKSA9PiB0aHJvdyBuZXcgRXJyb3IoKTsKICAvLy8KICBib29sIGhhc1Rocm93aW5nU3ludGF4KGNvdmFyaWFudCBGdW5jdGlvbkVudGl0eSBtZXRob2QpOwoKICAvLy8gUmV0dXJucyB0aGUgYG5vU3VjaE1ldGhvZGAgdGhhdCBbbWV0aG9kXSBvdmVycmlkZXMuCiAgRnVuY3Rpb25FbnRpdHkgZ2V0U3VwZXJOb1N1Y2hNZXRob2QoY292YXJpYW50IEZ1bmN0aW9uRW50aXR5IG1ldGhvZCk7Cn0KgTsATk48ARk2OyQhLgFNFQRMR04xBFBLNgRCOgRQBDMEQwQzOQRQUQ8EUREEMgRNRycBUSgmJkEBKhcBPCQBPCMBThwCAUFGRgFGRwFGSBBMAUZEAT5NAUEvTwEoKAFCAUQBDEAMPAEMQjIEAQwYMiEEATg3ISoiBisjBiggBjApBj4nKQZIISI5Kk48SjkaIiURIyYRICMRKU4kJSoRCBc3IiMNHyAGBAEMHSU7BAIBLARODiI+Qy8BNCcBRkQmKgFFRx9NAUk0AgE5Sh0zAUYrAUYoATVOATVPATMBGEgBRxcoNiU2MDYwLjEuFSU6Oj0EAQwoFSYjLi0uEwQBDE4yOisPLAgIBAEMNSAwSggIJzBJCAgoMEoICAQBDCs3KQQCARMLDBIJAgFLJi8GNAY9AS8GMAY7ATpIAgE8cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0MXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL3N0YXRpY190eXBlLmRhcnTAAQmlLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ3Njb3BlLmRhcnQnOwppbXBvcnQgJ3N0YXRpY190eXBlX2Jhc2UuZGFydCc7CmltcG9ydCAnc3RhdGljX3R5cGVfY2FjaGUuZGFydCc7CgovLy8gRW51bSB2YWx1ZXMgZm9yIGhvdyB0aGUgdGFyZ2V0IG9mIGEgc3RhdGljIHR5cGUgc2hvdWxkIGJlIGludGVycHJldGVkLgplbnVtIENsYXNzUmVsYXRpb24gewogIC8vLyBUaGUgdGFyZ2V0IGlzIGFueSBzdWJ0eXBlIG9mIHRoZSBzdGF0aWMgdHlwZS4KICBzdWJ0eXBlLAoKICAvLy8gVGhlIHRhcmdldCBpcyBhIHN1YmNsYXNzIG9yIG1peGluIGFwcGxpY2F0aW9uIG9mIHRoZSBzdGF0aWMgdHlwZS4KICAvLy8KICAvLy8gVGhpcyBjb3JyZXNwb25kcyB0byBhY2Nlc3NpbmcgYSBtZW1iZXIgdGhyb3VnaCBhIHRoaXMgZXhwcmVzc2lvbi4KICB0aGlzRXhwcmVzc2lvbiwKCiAgLy8vIFRoZSB0YXJnZXQgaXMgYW4gZXhhY3QgaW5zdGFuY2Ugb2YgdGhlIHN0YXRpYyB0eXBlLgogIGV4YWN0LAp9CgpDbGFzc1JlbGF0aW9uIGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGUoaXIuRGFydFR5cGUgdHlwZSkgewogIGlmICh0eXBlIGlzIFRoaXNJbnRlcmZhY2VUeXBlKSB7CiAgICByZXR1cm4gQ2xhc3NSZWxhdGlvbi50aGlzRXhwcmVzc2lvbjsKICB9IGVsc2UgaWYgKHR5cGUgaXMgRXhhY3RJbnRlcmZhY2VUeXBlKSB7CiAgICByZXR1cm4gQ2xhc3NSZWxhdGlvbi5leGFjdDsKICB9IGVsc2UgewogICAgcmV0dXJuIENsYXNzUmVsYXRpb24uc3VidHlwZTsKICB9Cn0KCi8vLyBWaXNpdG9yIHRoYXQgY29tcHV0ZXMgYW5kIGNhY2hlcyB0aGUgc3RhdGljIHR5cGUgb2YgZXhwcmVzc2lvbiB3aGlsZQovLy8gdmlzaXRpbmcgdGhlIGZ1bGwgdHJlZSBhdCBleHByZXNzaW9uIGxldmVsLgovLy8KLy8vIFRvIGVuc3VyZSB0aGF0IHRoZSB0cmF2ZXJzYWwgb25seSB2aXNpdHMgYW5kIGNvbXB1dGVzIHRoZSBleHByZXNzaW9uIHR5cGUKLy8vIGZvciBlYWNoIGV4cHJlc3Npb24gb25jZSwgdGhpcyBjbGFzcyBwZXJmb3JtcyB0aGUgdHJhdmVyc2FsIGV4cGxpY2l0bHkgYW5kCi8vLyBhZGRzICdoYW5kbGVYJyBob29rcyBmb3Igc3ViY2xhc3NlcyB0byBoYW5kbGUgaW5kaXZpZHVhbCBleHByZXNzaW9ucyB1c2luZwovLy8gdGhlIHJlYWRpbHkgY29tcHV0ZSBzdGF0aWMgdHlwZXMgb2Ygc3ViZXhwcmVzc2lvbnMuCmFic3RyYWN0IGNsYXNzIFN0YXRpY1R5cGVWaXNpdG9yIGV4dGVuZHMgU3RhdGljVHlwZUJhc2UgewogIGZpbmFsIE1hcDxpci5FeHByZXNzaW9uLCBpci5EYXJ0VHlwZT4gX2V4cHJlc3Npb25UeXBlQ2FjaGUgPSB7fTsKICBNYXA8aXIuRm9ySW5TdGF0ZW1lbnQsIGlyLkRhcnRUeXBlPiBfZm9ySW5JdGVyYXRvclR5cGVDYWNoZTsKICBNYXA8aXIuRXhwcmVzc2lvbiwgVHlwZU1hcD4gdHlwZU1hcHNGb3JUZXN0aW5nOwogIE1hcDxpci5Qcm9wZXJ0eUdldCwgUnVudGltZVR5cGVVc2VEYXRhPiBfcGVuZGluZ1J1bnRpbWVUeXBlVXNlRGF0YSA9IHt9OwoKICBmaW5hbCBpci5DbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHk7CgogIFRoaXNJbnRlcmZhY2VUeXBlIF90aGlzVHlwZTsKCiAgU3RhdGljVHlwZVZpc2l0b3IoaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgdGhpcy5oaWVyYXJjaHkpCiAgICAgIDogc3VwZXIodHlwZUVudmlyb25tZW50KTsKCiAgU3RhdGljVHlwZUNhY2hlIGdldFN0YXRpY1R5cGVDYWNoZSgpIHsKICAgIHJldHVybiBuZXcgU3RhdGljVHlwZUNhY2hlKF9leHByZXNzaW9uVHlwZUNhY2hlLCBfZm9ySW5JdGVyYXRvclR5cGVDYWNoZSk7CiAgfQoKICAvLy8gSWYgYHRydWVgLCB0aGUgZWZmZWN0IG9mIGV4ZWN1dGluZyBhc3NlcnQgc3RhdGVtZW50cyBpcyB0YWtlbiBpbnRvIGFjY291bnQKICAvLy8gd2hlbiBjb21wdXRpbmcgdGhlIHN0YXRpYyB0eXBlLgogIGJvb2wgZ2V0IHVzZUFzc2VydHM7CgogIC8vLyBJZiBgdHJ1ZWAsIHRoZSBzdGF0aWMgdHlwZSBvZiBhbiBlZmZlY3RpdmVseSBmaW5hbCB2YXJpYWJsZSBpcyBpbmZlcnJlZAogIC8vLyBmcm9tIHRoZSBzdGF0aWMgdHlwZSBvZiBpdHMgaW5pdGlhbGl6ZXIuCiAgYm9vbCBnZXQgaW5mZXJFZmZlY3RpdmVseUZpbmFsVmFyaWFibGVUeXBlczsKCiAgVmFyaWFibGVTY29wZU1vZGVsIGdldCB2YXJpYWJsZVNjb3BlTW9kZWw7CgogIEBvdmVycmlkZQogIFRoaXNJbnRlcmZhY2VUeXBlIGdldCB0aGlzVHlwZSB7CiAgICBhc3NlcnQoX3RoaXNUeXBlICE9IG51bGwpOwogICAgcmV0dXJuIF90aGlzVHlwZTsKICB9CgogIHZvaWQgc2V0IHRoaXNUeXBlKFRoaXNJbnRlcmZhY2VUeXBlIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgPT0gbnVsbCB8fCBfdGhpc1R5cGUgPT0gbnVsbCk7CiAgICBfdGhpc1R5cGUgPSB2YWx1ZTsKICB9CgogIGJvb2wgY29tcGxldGVzKGlyLkRhcnRUeXBlIHR5cGUpID0+IHR5cGUgIT0gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwoKICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gX2N1cnJlbnRWYXJpYWJsZXM7CiAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IF9pbnZhbGlkYXRlZFZhcmlhYmxlcyA9CiAgICAgIG5ldyBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4oKTsKCiAgVHlwZU1hcCBfdHlwZU1hcEJhc2UgPSBjb25zdCBUeXBlTWFwKCk7CiAgVHlwZU1hcCBfdHlwZU1hcFdoZW5UcnVlOwogIFR5cGVNYXAgX3R5cGVNYXBXaGVuRmFsc2U7CgogIC8vLyBSZXR1cm5zIHRoZSBsb2NhbCB2YXJpYWJsZSB0eXBlIHByb21vdGlvbnMgZm9yIHdoZW4gdGhlIGJvb2xlYW4gdmFsdWUgb2YKICAvLy8gdGhlIG1vc3QgcmVjZW50IG5vZGUgaXMgbm90IHRha2VuIGludG8gYWNjb3VudC4KICBUeXBlTWFwIGdldCB0eXBlTWFwIHsKICAgIGlmIChfdHlwZU1hcEJhc2UgPT0gbnVsbCkgewogICAgICBfdHlwZU1hcEJhc2UgPSBfdHlwZU1hcFdoZW5UcnVlLmpvaW4oX3R5cGVNYXBXaGVuRmFsc2UpOwogICAgICBfdHlwZU1hcFdoZW5UcnVlID0gX3R5cGVNYXBXaGVuRmFsc2UgPSBudWxsOwogICAgfQogICAgcmV0dXJuIF90eXBlTWFwQmFzZTsKICB9CgogIC8vLyBTZXRzIHRoZSBsb2NhbCB2YXJpYWJsZSB0eXBlIHByb21vdGlvbnMgZm9yIHdoZW4gdGhlIGJvb2xlYW4gdmFsdWUgb2YKICAvLy8gdGhlIG1vc3QgcmVjZW50IG5vZGUgaXMgbm90IHRha2VuIGludG8gYWNjb3VudC4KICB2b2lkIHNldCB0eXBlTWFwKFR5cGVNYXAgdmFsdWUpIHsKICAgIF90eXBlTWFwQmFzZSA9IHZhbHVlOwogICAgX3R5cGVNYXBXaGVuVHJ1ZSA9IF90eXBlTWFwV2hlbkZhbHNlID0gbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBsb2NhbCB2YXJpYWJsZSB0eXBlIHByb21vdGlvbnMgZm9yIHdoZW4gdGhlIGJvb2xlYW4gdmFsdWUgb2YKICAvLy8gdGhlIG1vc3QgcmVjZW50IG5vZGUgaXMgYHRydWVgLgogIFR5cGVNYXAgZ2V0IHR5cGVNYXBXaGVuVHJ1ZSA9PiBfdHlwZU1hcFdoZW5UcnVlID8/IF90eXBlTWFwQmFzZTsKCiAgLy8vIFNldHMgdGhlIGxvY2FsIHZhcmlhYmxlIHR5cGUgcHJvbW90aW9ucyBmb3Igd2hlbiB0aGUgYm9vbGVhbiB2YWx1ZSBvZgogIC8vLyB0aGUgbW9zdCByZWNlbnQgbm9kZSBpcyBgdHJ1ZWAuCiAgdm9pZCBzZXQgdHlwZU1hcFdoZW5UcnVlKFR5cGVNYXAgdmFsdWUpIHsKICAgIF90eXBlTWFwV2hlblRydWUgPSB2YWx1ZTsKICAgIF90eXBlTWFwQmFzZSA9IG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbG9jYWwgdmFyaWFibGUgdHlwZSBwcm9tb3Rpb25zIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlIG9mCiAgLy8vIHRoZSBtb3N0IHJlY2VudCBub2RlIGlzIGBmYWxzZWAuCiAgVHlwZU1hcCBnZXQgdHlwZU1hcFdoZW5GYWxzZSA9PiBfdHlwZU1hcFdoZW5GYWxzZSA/PyBfdHlwZU1hcEJhc2U7CgogIC8vLyBTZXRzIHRoZSBsb2NhbCB2YXJpYWJsZSB0eXBlIHByb21vdGlvbnMgZm9yIHdoZW4gdGhlIGJvb2xlYW4gdmFsdWUgb2YKICAvLy8gdGhlIG1vc3QgcmVjZW50IG5vZGUgaXMgYGZhbHNlYC4KICB2b2lkIHNldCB0eXBlTWFwV2hlbkZhbHNlKFR5cGVNYXAgdmFsdWUpIHsKICAgIF90eXBlTWFwV2hlbkZhbHNlID0gdmFsdWU7CiAgICBfdHlwZU1hcEJhc2UgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgZGVmYXVsdE5vZGUoaXIuTm9kZSBub2RlKSA9PgogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCdVbmhhbmRsZWQgbm9kZSAkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSknKTsKCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdENvbXBvbmVudChpci5Db21wb25lbnQgbm9kZSkgewogICAgdmlzaXROb2Rlcyhub2RlLmxpYnJhcmllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0TGlicmFyeShpci5MaWJyYXJ5IG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5jbGFzc2VzKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5wcm9jZWR1cmVzKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5maWVsZHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdENsYXNzKGlyLkNsYXNzIG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5jb25zdHJ1Y3RvcnMpOwogICAgdmlzaXROb2Rlcyhub2RlLnByb2NlZHVyZXMpOwogICAgdmlzaXROb2Rlcyhub2RlLmZpZWxkcyk7CiAgfQoKICBpci5JbnRlcmZhY2VUeXBlIGdldEludGVyZmFjZVR5cGVPZihpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICB3aGlsZSAodHlwZSBpcyBpci5UeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICB0eXBlID0gKHR5cGUgYXMgaXIuVHlwZVBhcmFtZXRlclR5cGUpLnBhcmFtZXRlci5ib3VuZDsKICAgIH0KICAgIHJldHVybiB0eXBlIGlzIGlyLkludGVyZmFjZVR5cGUgPyB0eXBlIDogbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiBhcyBhbiBpbnN0YW50aWF0aW9uIG9mCiAgLy8vIFtzdXBlcmNsYXNzXS4KICAvLy8KICAvLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBjb2RlIGNvbXBpbGVkIGluIHN0cm9uZyBtb2RlLCBhcyB0aGlzIG1ldGhvZAogIC8vLyBhc3N1bWVzIHRoZSBJUiBpcyBzdHJvbmdseSB0eXBlZC4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgZnVydGhlcm1vcmUgYXNzdW1lcyB0aGF0IHRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uIGFjdHVhbGx5CiAgLy8vIGlzIGEgc3VidHlwZSBvZiAoc29tZSBpbnN0YW50aWF0aW9uIG9mKSB0aGUgZ2l2ZW4gW3N1cGVyY2xhc3NdLgogIC8vLyBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSB0aGUgcmF3IHR5cGUgb2YgW3N1cGVyY2xhc3NdIGlzIHJldHVybmVkLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBkZXJpdmVkIGZyb20gYGlyLkV4cHJlc3Npb24uZ2V0U3RhdGljVHlwZUFzSW5zdGFuY2VPZmAuCiAgaXIuSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKGlyLkRhcnRUeXBlIHR5cGUsIGlyLkNsYXNzIHN1cGVyY2xhc3MpIHsKICAgIC8vIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhlIHByb2dyYW0gaXMgY29ycmVjdGx5IHR5cGVkLCBzbyBpZiB0aGUgc3VwZXJjbGFzcwogICAgLy8gaXMgbm90IGdlbmVyaWMsIHdlIGNhbiBqdXN0IHJldHVybiBpdHMgcmF3IHR5cGUgd2l0aG91dCBjb21wdXRpbmcgdGhlCiAgICAvLyB0eXBlIG9mIHRoaXMgZXhwcmVzc2lvbi4gIEl0IGFsc28gZW5zdXJlcyB0aGF0IGFsbCB0eXBlcyBhcmUgY29uc2lkZXJlZAogICAgLy8gc3VidHlwZXMgb2YgT2JqZWN0IChub3QganVzdCBpbnRlcmZhY2UgdHlwZXMpLCBhbmQgZnVuY3Rpb24gdHlwZXMgYXJlCiAgICAvLyBjb25zaWRlcmVkIHN1YnR5cGVzIG9mIEZ1bmN0aW9uLgogICAgaWYgKHN1cGVyY2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICByZXR1cm4gc3VwZXJjbGFzcy5yYXdUeXBlOwogICAgfQogICAgd2hpbGUgKHR5cGUgaXMgaXIuVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgdHlwZSA9ICh0eXBlIGFzIGlyLlR5cGVQYXJhbWV0ZXJUeXBlKS5wYXJhbWV0ZXIuYm91bmQ7CiAgICB9CiAgICBpZiAodHlwZSA9PSB0eXBlRW52aXJvbm1lbnQubnVsbFR5cGUpIHsKICAgICAgcmV0dXJuIHN1cGVyY2xhc3MuYm90dG9tVHlwZTsKICAgIH0KICAgIGlmICh0eXBlIGlzIGlyLkludGVyZmFjZVR5cGUpIHsKICAgICAgaXIuSW50ZXJmYWNlVHlwZSB1cGNhc3RUeXBlID0KICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGUsIHN1cGVyY2xhc3MpOwogICAgICBpZiAodXBjYXN0VHlwZSAhPSBudWxsKSByZXR1cm4gdXBjYXN0VHlwZTsKICAgIH0gZWxzZSBpZiAodHlwZSBpcyBpci5Cb3R0b21UeXBlKSB7CiAgICAgIHJldHVybiBzdXBlcmNsYXNzLmJvdHRvbVR5cGU7CiAgICB9CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgd2UgYXNzZXJ0IHRoYXQgdGhpcyBkb2Vzbid0IGhhcHBlbj8KICAgIHJldHVybiBzdXBlcmNsYXNzLnJhd1R5cGU7CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBhY2Nlc3MgW25vZGVdIG9uIGEgcmVjZWl2ZXIgb2YKICAvLy8gdHlwZSBbcmVjZWl2ZXJUeXBlXS4KICAvLy8KICAvLy8gSWYgdGhlIGBub2RlLmludGVyZmFjZVRhcmdldGAgaXMgYG51bGxgIGJ1dCBtYXRjaGVzIGFuIGBPYmplY3RgIG1lbWJlcgogIC8vLyBpdCBpcyB1cGRhdGVkIHRvIHRhcmdldCB0aGlzIG1lbWJlci4KICBpci5EYXJ0VHlwZSBfY29tcHV0ZVByb3BlcnR5R2V0VHlwZSgKICAgICAgaXIuUHJvcGVydHlHZXQgbm9kZSwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlKSB7CiAgICBpci5NZW1iZXIgaW50ZXJmYWNlVGFyZ2V0ID0gbm9kZS5pbnRlcmZhY2VUYXJnZXQ7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ID09IG51bGwgJiYgcmVjZWl2ZXJUeXBlIGlzIGlyLkludGVyZmFjZVR5cGUpIHsKICAgICAgaW50ZXJmYWNlVGFyZ2V0ID0gbm9kZS5pbnRlcmZhY2VUYXJnZXQgPQogICAgICAgICAgaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihyZWNlaXZlclR5cGUuY2xhc3NOb2RlLCBub2RlLm5hbWUpOwogICAgfQogICAgaWYgKGludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIGlyLkNsYXNzIHN1cGVyY2xhc3MgPSBpbnRlcmZhY2VUYXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIHJlY2VpdmVyVHlwZSA9IGdldFR5cGVBc0luc3RhbmNlT2YocmVjZWl2ZXJUeXBlLCBzdXBlcmNsYXNzKTsKICAgICAgcmV0dXJuIGlyLlN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlclR5cGUpCiAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlVGFyZ2V0LmdldHRlclR5cGUpOwogICAgfQogICAgLy8gVHJlYXQgdGhlIHByb3BlcnRpZXMgb2YgT2JqZWN0IHNwZWNpYWxseS4KICAgIFN0cmluZyBuYW1lU3RyaW5nID0gbm9kZS5uYW1lLm5hbWU7CiAgICBpZiAobmFtZVN0cmluZyA9PSAnaGFzaENvZGUnKSB7CiAgICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQuaW50VHlwZTsKICAgIH0gZWxzZSBpZiAobmFtZVN0cmluZyA9PSAncnVudGltZVR5cGUnKSB7CiAgICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQudHlwZVR5cGU7CiAgICB9CiAgICByZXR1cm4gY29uc3QgaXIuRHluYW1pY1R5cGUoKTsKICB9CgogIHZvaWQgaGFuZGxlUHJvcGVydHlHZXQoCiAgICAgIGlyLlByb3BlcnR5R2V0IG5vZGUsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkge30KCiAgdm9pZCBoYW5kbGVSdW50aW1lVHlwZVVzZShpci5Qcm9wZXJ0eUdldCBub2RlLCBSdW50aW1lVHlwZVVzZUtpbmQga2luZCwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0UHJvcGVydHlHZXQoaXIuUHJvcGVydHlHZXQgbm9kZSkgewogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gdmlzaXROb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSA9IF9leHByZXNzaW9uVHlwZUNhY2hlW25vZGVdID0KICAgICAgICBfY29tcHV0ZVByb3BlcnR5R2V0VHlwZShub2RlLCByZWNlaXZlclR5cGUpOwogICAgcmVjZWl2ZXJUeXBlID0gX25hcnJvd0luc3RhbmNlUmVjZWl2ZXIobm9kZS5pbnRlcmZhY2VUYXJnZXQsIHJlY2VpdmVyVHlwZSk7CiAgICBoYW5kbGVQcm9wZXJ0eUdldChub2RlLCByZWNlaXZlclR5cGUsIHJlc3VsdFR5cGUpOwogICAgaWYgKG5vZGUubmFtZS5uYW1lID09IElkZW50aWZpZXJzLnJ1bnRpbWVUeXBlXykgewogICAgICBSdW50aW1lVHlwZVVzZURhdGEgZGF0YSA9CiAgICAgICAgICBjb21wdXRlUnVudGltZVR5cGVVc2UoX3BlbmRpbmdSdW50aW1lVHlwZVVzZURhdGEsIG5vZGUpOwogICAgICBpZiAoZGF0YS5sZWZ0UnVudGltZVR5cGVFeHByZXNzaW9uID09IG5vZGUpIHsKICAgICAgICAvLyBbbm9kZV0gaXMgdGhlIGxlZnQgKG9yIHNpbmdsZSkgb2NjdXJyZW5jZSBvZiBgLnJ1bnRpbWVUeXBlYCBzbyB3ZQogICAgICAgIC8vIGNhbiBzZXQgdGhlIHN0YXRpYyB0eXBlIG9mIHRoZSByZWNlaXZlciBleHByZXNzaW9uLgogICAgICAgIGRhdGEucmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXJUeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFtub2RlXSBpcyB0aGUgcmlnaHQgb2NjdXJyZW5jZSBvZiBgLnJ1bnRpbWVUeXBlYCBzbyB3ZQogICAgICAgIC8vIGNhbiBzZXQgdGhlIHN0YXRpYyB0eXBlIG9mIHRoZSBhcmd1bWVudCBleHByZXNzaW9uLgogICAgICAgIGFzc2VydChkYXRhLnJpZ2h0UnVudGltZVR5cGVFeHByZXNzaW9uID09IG5vZGUsCiAgICAgICAgICAgICJVbmV4cGVjdGVkIFJ1bnRpbWVUeXBlVXNlRGF0YSBmb3IgJG5vZGU6ICRkYXRhIik7CiAgICAgICAgZGF0YS5hcmd1bWVudFR5cGUgPSByZWNlaXZlclR5cGU7CiAgICAgIH0KICAgICAgaWYgKGRhdGEuaXNDb21wbGV0ZSkgewogICAgICAgIC8vLyBXZSBub3cgaGF2ZSBhbGwgbmVlZCBzdGF0aWMgdHlwZXMgc28gd2UgY2FuIHJlbW92ZSB0aGUgZGF0YSBmcm9tCiAgICAgICAgLy8vIHRoZSBjYWNoZSBhbmQgaGFuZGxlIHRoZSBydW50aW1lIHR5cGUgdXNlLgogICAgICAgIF9wZW5kaW5nUnVudGltZVR5cGVVc2VEYXRhLnJlbW92ZShkYXRhLmxlZnRSdW50aW1lVHlwZUV4cHJlc3Npb24pOwogICAgICAgIGlmIChkYXRhLnJpZ2h0UnVudGltZVR5cGVFeHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgICAgIF9wZW5kaW5nUnVudGltZVR5cGVVc2VEYXRhLnJlbW92ZShkYXRhLnJpZ2h0UnVudGltZVR5cGVFeHByZXNzaW9uKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlUnVudGltZVR5cGVVc2UoCiAgICAgICAgICAgIG5vZGUsIGRhdGEua2luZCwgZGF0YS5yZWNlaXZlclR5cGUsIGRhdGEuYXJndW1lbnRUeXBlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdFR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZVByb3BlcnR5U2V0KAogICAgICBpci5Qcm9wZXJ0eVNldCBub2RlLCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRQcm9wZXJ0eVNldChpci5Qcm9wZXJ0eVNldCBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSB2aXNpdE5vZGUobm9kZS5yZWNlaXZlcik7CiAgICBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUgPSBzdXBlci52aXNpdFByb3BlcnR5U2V0KG5vZGUpOwogICAgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCA9IG5vZGUuaW50ZXJmYWNlVGFyZ2V0OwogICAgaWYgKGludGVyZmFjZVRhcmdldCA9PSBudWxsICYmIHJlY2VpdmVyVHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlKSB7CiAgICAgIGludGVyZmFjZVRhcmdldCA9IGhpZXJhcmNoeQogICAgICAgICAgLmdldEludGVyZmFjZU1lbWJlcihyZWNlaXZlclR5cGUuY2xhc3NOb2RlLCBub2RlLm5hbWUsIHNldHRlcjogdHJ1ZSk7CiAgICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCkgewogICAgICAgIGlyLkNsYXNzIHN1cGVyY2xhc3MgPSBpbnRlcmZhY2VUYXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgaXIuU3Vic3RpdHV0aW9uIHJlY2VpdmVyU3Vic3RpdHV0aW9uID0KICAgICAgICAgICAgaXIuU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKAogICAgICAgICAgICAgICAgZ2V0VHlwZUFzSW5zdGFuY2VPZihyZWNlaXZlclR5cGUsIHN1cGVyY2xhc3MpKTsKICAgICAgICBpci5EYXJ0VHlwZSBzZXR0ZXJUeXBlID0KICAgICAgICAgICAgcmVjZWl2ZXJTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlVGFyZ2V0LnNldHRlclR5cGUpOwogICAgICAgIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKHZhbHVlVHlwZSwgc2V0dGVyVHlwZSkpIHsKICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaW5zZXJ0IGFuIGltcGxpY2l0IGNhc3QgdG8gcHJlc2VydmUgdGhlIGludmFyaWFudCB0aGF0CiAgICAgICAgICAvLyBhIHByb3BlcnR5IHNldCB3aXRoIGEga25vd24gaW50ZXJmYWNlIHRhcmdldCBpcyBhbHNvIHN0YXRpY2FsbHkKICAgICAgICAgIC8vIGNoZWNrZWQuCiAgICAgICAgICBpci5Bc0V4cHJlc3Npb24gaW1wbGljaXRDYXN0ID0KICAgICAgICAgICAgICBuZXcgaXIuQXNFeHByZXNzaW9uKG5vZGUudmFsdWUsIHNldHRlclR5cGUpCiAgICAgICAgICAgICAgICAuLmlzVHlwZUVycm9yID0gdHJ1ZQogICAgICAgICAgICAgICAgLi5wYXJlbnQgPSBub2RlOwogICAgICAgICAgbm9kZS52YWx1ZSA9IGltcGxpY2l0Q2FzdDsKICAgICAgICAgIC8vIFZpc2l0IHRoZSBuZXdseSBjcmVhdGVkIGFzIGV4cHJlc3Npb247IHRoZSBvcmlnaW5hbCB2YWx1ZSBoYXMKICAgICAgICAgIC8vIGFscmVhZHkgYmVlbiB2aXNpdGVkLgogICAgICAgICAgaGFuZGxlQXNFeHByZXNzaW9uKGltcGxpY2l0Q2FzdCwgdmFsdWVUeXBlKTsKICAgICAgICAgIHZhbHVlVHlwZSA9IHNldHRlclR5cGU7CiAgICAgICAgfQogICAgICAgIG5vZGUuaW50ZXJmYWNlVGFyZ2V0ID0gaW50ZXJmYWNlVGFyZ2V0OwogICAgICB9CiAgICB9CiAgICByZWNlaXZlclR5cGUgPSBfbmFycm93SW5zdGFuY2VSZWNlaXZlcihpbnRlcmZhY2VUYXJnZXQsIHJlY2VpdmVyVHlwZSk7CiAgICBoYW5kbGVQcm9wZXJ0eVNldChub2RlLCByZWNlaXZlclR5cGUsIHZhbHVlVHlwZSk7CiAgICByZXR1cm4gdmFsdWVUeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVEaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoaXIuRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgewogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gdmlzaXROb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgaXIuQ2xhc3Mgc3VwZXJjbGFzcyA9IG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgcmVjZWl2ZXJUeXBlID0gZ2V0VHlwZUFzSW5zdGFuY2VPZihyZWNlaXZlclR5cGUsIHN1cGVyY2xhc3MpOwogICAgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSA9IGlyLlN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlclR5cGUpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKG5vZGUudGFyZ2V0LmdldHRlclR5cGUpOwogICAgX2V4cHJlc3Npb25UeXBlQ2FjaGVbbm9kZV0gPSByZXN1bHRUeXBlOwogICAgaGFuZGxlRGlyZWN0UHJvcGVydHlHZXQobm9kZSwgcmVjZWl2ZXJUeXBlLCByZXN1bHRUeXBlKTsKICAgIHJldHVybiByZXN1bHRUeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVEaXJlY3RNZXRob2RJbnZvY2F0aW9uKAogICAgICBpci5EaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzLAogICAgICBpci5EYXJ0VHlwZSByZXR1cm5UeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oaXIuRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSB2aXNpdE5vZGUobm9kZS5yZWNlaXZlcik7CiAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMgPSBfdmlzaXRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZTsKICAgIGlmICh0eXBlRW52aXJvbm1lbnQuaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKG5vZGUudGFyZ2V0KSkgewogICAgICBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUgPSBhcmd1bWVudFR5cGVzLnBvc2l0aW9uYWxbMF07CiAgICAgIHJldHVyblR5cGUgPSB0eXBlRW52aXJvbm1lbnQuZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMoCiAgICAgICAgICByZWNlaXZlclR5cGUsIGFyZ3VtZW50VHlwZSk7CiAgICB9IGVsc2UgewogICAgICBpci5DbGFzcyBzdXBlcmNsYXNzID0gbm9kZS50YXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIHJlY2VpdmVyVHlwZSA9IGdldFR5cGVBc0luc3RhbmNlT2YocmVjZWl2ZXJUeXBlLCBzdXBlcmNsYXNzKTsKICAgICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSA9IGlyLlN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlclR5cGUpCiAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUobm9kZS50YXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgICAgIHJldHVyblR5cGUgPSBpci5TdWJzdGl0dXRpb24uZnJvbVBhaXJzKAogICAgICAgICAgICAgIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLCBub2RlLmFyZ3VtZW50cy50eXBlcykKICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShyZXR1cm5UeXBlKTsKICAgIH0KICAgIF9leHByZXNzaW9uVHlwZUNhY2hlW25vZGVdID0gcmV0dXJuVHlwZTsKICAgIGhhbmRsZURpcmVjdE1ldGhvZEludm9jYXRpb24obm9kZSwgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKTsKICAgIHJldHVybiByZXR1cm5UeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVEaXJlY3RQcm9wZXJ0eVNldChpci5EaXJlY3RQcm9wZXJ0eVNldCBub2RlLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChpci5EaXJlY3RQcm9wZXJ0eVNldCBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSB2aXNpdE5vZGUobm9kZS5yZWNlaXZlcik7CiAgICBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUgPSBzdXBlci52aXNpdERpcmVjdFByb3BlcnR5U2V0KG5vZGUpOwogICAgaGFuZGxlRGlyZWN0UHJvcGVydHlTZXQobm9kZSwgcmVjZWl2ZXJUeXBlLCB2YWx1ZVR5cGUpOwogICAgcmV0dXJuIHZhbHVlVHlwZTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbaW50ZXJmYWNlVGFyZ2V0XSBpcyBhbiBhcml0aG1ldGljIG9wZXJhdG9yIHdob3NlIHJlc3VsdAogIC8vLyB0eXBlIGlzIGNvbXB1dGVkIHVzaW5nIGJvdGggdGhlIHJlY2VpdmVyIHR5cGUgYW5kIHRoZSBhcmd1bWVudCB0eXBlLgogIC8vLwogIC8vLyBWaXNpdG9ycyB0aGF0IHN1YmNsYXNzIHRoZSBbU3RhdGljVHlwZVZpc2l0b3JdIG11c3Qgc3BlY2lhbCBjYXNlIHRoaXMKICAvLy8gdGFyZ2V0IGFzIHRvIGF2b2lkIHZpc2l0aW5nIHRoZSBhcmd1bWVudCB0d2ljZS4KICBib29sIGlzU3BlY2lhbENhc2VkQmluYXJ5T3BlcmF0b3IoaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCkgewogICAgcmV0dXJuIGludGVyZmFjZVRhcmdldCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICB0eXBlRW52aXJvbm1lbnQuaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKGludGVyZmFjZVRhcmdldCk7CiAgfQoKICBpci5NZW1iZXIgX2dldE1lbWJlcihpci5DbGFzcyBjbHMsIFN0cmluZyBuYW1lKSB7CiAgICBmb3IgKGlyLk1lbWJlciBtZW1iZXIgaW4gY2xzLm1lbWJlcnMpIHsKICAgICAgaWYgKG1lbWJlci5uYW1lLm5hbWUgPT0gbmFtZSkgcmV0dXJuIG1lbWJlcjsKICAgIH0KICAgIHRocm93IGZhaWwoIk1lbWJlciAnJG5hbWUnIG5vdCBmb3VuZCBpbiAkY2xzIik7CiAgfQoKICBpci5Qcm9jZWR1cmUgX29iamVjdEVxdWFsczsKICBpci5Qcm9jZWR1cmUgZ2V0IG9iamVjdEVxdWFscyA9PgogICAgICBfb2JqZWN0RXF1YWxzID8/PSBfZ2V0TWVtYmVyKHR5cGVFbnZpcm9ubWVudC5vYmplY3RUeXBlLmNsYXNzTm9kZSwgJz09Jyk7CgogIC8vLyBSZXR1cm5zIFtyZWNlaXZlclR5cGVdIG5hcnJvd2VkIHRvIGVuY2xvc2luZyBjbGFzcyBvZiBbaW50ZXJmYWNlVGFyZ2V0XS4KICAvLy8KICAvLy8gSWYgW2ludGVyZmFjZVRhcmdldF0gaXMgYG51bGxgIG9yIGByZWNlaXZlclR5cGVgIGlzIF9ub3RfIGBkeW5hbWljYCBubwogIC8vLyBuYXJyb3dpbmcgaXMgcGVyZm9ybWVkLgogIGlyLkRhcnRUeXBlIF9uYXJyb3dJbnN0YW5jZVJlY2VpdmVyKAogICAgICBpci5NZW1iZXIgaW50ZXJmYWNlVGFyZ2V0LCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUpIHsKICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCAmJiByZWNlaXZlclR5cGUgPT0gY29uc3QgaXIuRHluYW1pY1R5cGUoKSkgewogICAgICByZWNlaXZlclR5cGUgPSBpbnRlcmZhY2VUYXJnZXQuZW5jbG9zaW5nQ2xhc3MudGhpc1R5cGU7CiAgICB9CiAgICByZXR1cm4gcmVjZWl2ZXJUeXBlOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGNhbiBiZSBjYWxsZWQgd2l0aCB0aGUgc3RydWN0dXJlIG9mCiAgLy8vIFthcmd1bWVudHNdLgogIGJvb2wgX2lzQXBwbGljYWJsZShpci5Bcmd1bWVudHMgYXJndW1lbnRzLCBpci5NZW1iZXIgbWVtYmVyKSB7CiAgICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2FyZ3VtZW50c10gYXJlIGFwcGxpY2FibGUgdG8gdGhlIGZ1bmN0aW9uIHR5cGUKICAgIC8vLyBzdHJ1Y3R1cmUuCiAgICBib29sIGlzRnVuY3Rpb25UeXBlQXBwbGljYWJsZSgKICAgICAgICBpbnQgdHlwZVBhcmFtZXRlckNvdW50LAogICAgICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgIGludCBwb3NpdGlvbmFsUGFyYW1ldGVyQ291bnQsCiAgICAgICAgSXRlcmFibGU8U3RyaW5nPiBGdW5jdGlvbigpIGdldE5hbWVkUGFyYW1ldGVycykgewogICAgICBpZiAoYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkgJiYKICAgICAgICAgIGFyZ3VtZW50cy50eXBlcy5sZW5ndGggIT0gdHlwZVBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCByZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPiBwb3NpdGlvbmFsUGFyYW1ldGVyQ291bnQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgSXRlcmFibGU8U3RyaW5nPiBuYW1lZFBhcmFtZXRlcnMgPSBnZXROYW1lZFBhcmFtZXRlcnMoKTsKICAgICAgaWYgKGFyZ3VtZW50cy5uYW1lZC5sZW5ndGggPiBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChhcmd1bWVudHMubmFtZWQuaXNOb3RFbXB0eSkgewogICAgICAgIGZvciAoaXIuTmFtZWRFeHByZXNzaW9uIG5hbWVkQXJndW1lbnRzIGluIGFyZ3VtZW50cy5uYW1lZCkgewogICAgICAgICAgaWYgKCFuYW1lZFBhcmFtZXRlcnMuY29udGFpbnMobmFtZWRBcmd1bWVudHMubmFtZSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2FyZ3VtZW50c10gYXJlIGFwcGxpY2FibGUgdG8gYSB2YWx1ZSBvZiB0aGUgc3RhdGljCiAgICAvLy8gW3R5cGVdLgogICAgYm9vbCBpc1R5cGVBcHBsaWNhYmxlKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgICAgaWYgKHR5cGUgaXMgaXIuRHluYW1pY1R5cGUpIHJldHVybiB0cnVlOwogICAgICBpZiAodHlwZSA9PSB0eXBlRW52aXJvbm1lbnQucmF3RnVuY3Rpb25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHR5cGUgaXMgaXIuRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb25UeXBlQXBwbGljYWJsZSgKICAgICAgICAgICAgdHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAgIHR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgdHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAgICgpID0+IHR5cGUubmFtZWRQYXJhbWV0ZXJzLm1hcCgocCkgPT4gcC5uYW1lKS50b1NldCgpKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKG1lbWJlciBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgaWYgKG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuU2V0dGVyIHx8CiAgICAgICAgICBtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5HZXR0ZXIpIHsKICAgICAgICByZXR1cm4gaXNUeXBlQXBwbGljYWJsZShtZW1iZXIuZ2V0dGVyVHlwZSk7CiAgICAgIH0gZWxzZSBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5NZXRob2QgfHwKICAgICAgICAgIG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuT3BlcmF0b3IpIHsKICAgICAgICByZXR1cm4gaXNGdW5jdGlvblR5cGVBcHBsaWNhYmxlKAogICAgICAgICAgICBtZW1iZXIuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICBtZW1iZXIuZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgbWVtYmVyLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCwKICAgICAgICAgICAgKCkgPT4gbWVtYmVyLmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5tYXAoKHApID0+IHAubmFtZSkudG9TZXQoKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIGlyLkZpZWxkKSB7CiAgICAgIHJldHVybiBpc1R5cGVBcHBsaWNhYmxlKG1lbWJlci50eXBlKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBVcGRhdGUgdGhlIGludGVyZmFjZSB0YXJnZXQgb24gW25vZGVdLgogIC8vLwogIC8vLyBUaGlzIGluc2VydHMgYW55IGltcGxpY2l0IGNhc3Qgb2YgdGhlIGFyZ3VtZW50cyBuZWNlc3NhcnkgdG8gdXBob2xkIHRoZQogIC8vLyBpbnZhcmlhbnQgdGhhdCBhIG1ldGhvZCBpbnZvY2F0aW9uIHdpdGggYW4gaW50ZXJmYWNlIHRhcmdldCBoYW5kbGVzCiAgLy8vIHRoZSBzdGF0aWMgdHlwZXMgYXQgdGhlIGNhbGwgc2l0ZS4KICB2b2lkIF91cGRhdGVNZXRob2RJbnZvY2F0aW9uVGFyZ2V0KAogICAgICBpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywKICAgICAgaXIuRGFydFR5cGUgZnVuY3Rpb25UeXBlLAogICAgICBpci5NZW1iZXIgaW50ZXJmYWNlVGFyZ2V0KSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBIYW5kbGUgaW5jcmVtZW50YWwgdGFyZ2V0IGltcHJvdmVtZW50LgogICAgaWYgKG5vZGUuaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHJldHVybjsKICAgIG5vZGUuaW50ZXJmYWNlVGFyZ2V0ID0gaW50ZXJmYWNlVGFyZ2V0OwogICAgaWYgKGZ1bmN0aW9uVHlwZSBpcyEgaXIuRnVuY3Rpb25UeXBlKSByZXR1cm47CiAgICBpci5GdW5jdGlvblR5cGUgcGFyYW1ldGVyVHlwZXMgPSBmdW5jdGlvblR5cGU7CiAgICBNYXA8aW50LCBpci5EYXJ0VHlwZT4gbmVlZGVkUG9zaXRpb25hbENoZWNrcyA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZXMucG9zaXRpb25hbFtpXTsKICAgICAgaXIuRGFydFR5cGUgcGFyYW1ldGVyVHlwZSA9IHBhcmFtZXRlclR5cGVzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICBpZiAoIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihhcmd1bWVudFR5cGUsIHBhcmFtZXRlclR5cGUpKSB7CiAgICAgICAgbmVlZGVkUG9zaXRpb25hbENoZWNrc1tpXSA9IHBhcmFtZXRlclR5cGU7CiAgICAgIH0KICAgIH0KICAgIE1hcDxpbnQsIGlyLkRhcnRUeXBlPiBuZWVkZWROYW1lZENoZWNrcyA9IHt9OwogICAgZm9yIChpbnQgYXJndW1lbnRJbmRleCA9IDA7CiAgICAgICAgYXJndW1lbnRJbmRleCA8IG5vZGUuYXJndW1lbnRzLm5hbWVkLmxlbmd0aDsKICAgICAgICBhcmd1bWVudEluZGV4KyspIHsKICAgICAgaXIuTmFtZWRFeHByZXNzaW9uIG5hbWVkQXJndW1lbnQgPSBub2RlLmFyZ3VtZW50cy5uYW1lZFthcmd1bWVudEluZGV4XTsKICAgICAgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlcy5uYW1lZFthcmd1bWVudEluZGV4XTsKICAgICAgaXIuRGFydFR5cGUgcGFyYW1ldGVyVHlwZSA9IHBhcmFtZXRlclR5cGVzLm5hbWVkUGFyYW1ldGVycwogICAgICAgICAgLnNpbmdsZVdoZXJlKChuYW1lZFR5cGUpID0+IG5hbWVkVHlwZS5uYW1lID09IG5hbWVkQXJndW1lbnQubmFtZSkKICAgICAgICAgIC50eXBlOwogICAgICBpZiAoIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihhcmd1bWVudFR5cGUsIHBhcmFtZXRlclR5cGUpKSB7CiAgICAgICAgbmVlZGVkTmFtZWRDaGVja3NbYXJndW1lbnRJbmRleF0gPSBwYXJhbWV0ZXJUeXBlOwogICAgICB9CiAgICB9CiAgICBpZiAobmVlZGVkUG9zaXRpb25hbENoZWNrcy5pc0VtcHR5ICYmIG5lZWRlZE5hbWVkQ2hlY2tzLmlzRW1wdHkpIHsKICAgICAgLy8gTm8gaW1wbGljaXQgY2FzdHMgbmVlZGVkCiAgICAgIHJldHVybjsKICAgIH0KCiAgICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGxldFZhcmlhYmxlcyA9IFtdOwoKICAgIC8vIEFyZ3VtZW50cyBuZWVkIHRvIGJlIGhvaXN0ZWQgdG8gYW4gZW5jbG9zaW5nIGxldCBleHByZXNzaW9uIGluIG9yZGVyCiAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgYXJndW1lbnRzIGFyZSBldmFsdWF0ZWQgYmVmb3JlIGFueSBpbXBsaWNpdCBjYXN0LgoKICAgIGlyLkV4cHJlc3Npb24gdXBkYXRlQXJndW1lbnQoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uLCBpci5UcmVlTm9kZSBwYXJlbnQsCiAgICAgICAgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlLCBpci5EYXJ0VHlwZSBjaGVja2VkUGFyYW1ldGVyVHlwZSkgewogICAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0KICAgICAgICAgIG5ldyBpci5WYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKGV4cHJlc3Npb24sIHR5cGU6IGFyZ3VtZW50VHlwZSk7CiAgICAgIC8vIFZpc2l0IHRoZSBuZXdseSBjcmVhdGVkIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgogICAgICBoYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uKHZhcmlhYmxlKTsKICAgICAgbGV0VmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICAgIGlyLlZhcmlhYmxlR2V0IGdldCA9IG5ldyBpci5WYXJpYWJsZUdldCh2YXJpYWJsZSkuLnBhcmVudCA9IHBhcmVudDsKICAgICAgLy8gVmlzaXQgdGhlIG5ld2x5IGNyZWF0ZWQgdmFyaWFibGUgZ2V0LgogICAgICBoYW5kbGVWYXJpYWJsZUdldChnZXQsIGFyZ3VtZW50VHlwZSk7CiAgICAgIF9leHByZXNzaW9uVHlwZUNhY2hlW2dldF0gPSBhcmd1bWVudFR5cGU7CgogICAgICBpZiAoY2hlY2tlZFBhcmFtZXRlclR5cGUgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBnZXQ7CiAgICAgIH0KICAgICAgLy8gV2UgbmVlZCB0byBpbnNlcnQgYW4gaW1wbGljaXQgY2FzdCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50IHRoYXQKICAgICAgLy8gYSBtZXRob2QgaW52b2NhdGlvbiB3aXRoIGEga25vd24gaW50ZXJmYWNlIHRhcmdldCBpcyBhbHNvCiAgICAgIC8vIHN0YXRpY2FsbHkgY2hlY2tlZC4KICAgICAgaXIuQXNFeHByZXNzaW9uIGltcGxpY2l0Q2FzdCA9CiAgICAgICAgICBuZXcgaXIuQXNFeHByZXNzaW9uKGdldCwgY2hlY2tlZFBhcmFtZXRlclR5cGUpCiAgICAgICAgICAgIC4uaXNUeXBlRXJyb3IgPSB0cnVlCiAgICAgICAgICAgIC4ucGFyZW50ID0gcGFyZW50OwogICAgICAvLyBWaXNpdCB0aGUgbmV3bHkgY3JlYXRlZCBhcyBleHByZXNzaW9uOyB0aGUgb3JpZ2luYWwgdmFsdWUgaGFzCiAgICAgIC8vIGFscmVhZHkgYmVlbiB2aXNpdGVkLgogICAgICBoYW5kbGVBc0V4cHJlc3Npb24oaW1wbGljaXRDYXN0LCBhcmd1bWVudFR5cGUpOwogICAgICByZXR1cm4gaW1wbGljaXRDYXN0OwogICAgfQoKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsgaW5kZXgrKykgewogICAgICBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUgPSBhcmd1bWVudFR5cGVzLnBvc2l0aW9uYWxbaW5kZXhdOwogICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsW2luZGV4XSA9IHVwZGF0ZUFyZ3VtZW50KAogICAgICAgICAgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbFtpbmRleF0sCiAgICAgICAgICBub2RlLmFyZ3VtZW50cywKICAgICAgICAgIGFyZ3VtZW50VHlwZSwKICAgICAgICAgIG5lZWRlZFBvc2l0aW9uYWxDaGVja3NbaW5kZXhdKTsKICAgIH0KICAgIGZvciAoaW50IGFyZ3VtZW50SW5kZXggPSAwOwogICAgICAgIGFyZ3VtZW50SW5kZXggPCBub2RlLmFyZ3VtZW50cy5uYW1lZC5sZW5ndGg7CiAgICAgICAgYXJndW1lbnRJbmRleCsrKSB7CiAgICAgIGlyLk5hbWVkRXhwcmVzc2lvbiBuYW1lZEFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMubmFtZWRbYXJndW1lbnRJbmRleF07CiAgICAgIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZXMubmFtZWRbYXJndW1lbnRJbmRleF07CiAgICAgIG5hbWVkQXJndW1lbnQudmFsdWUgPSB1cGRhdGVBcmd1bWVudChuYW1lZEFyZ3VtZW50LnZhbHVlLCBuYW1lZEFyZ3VtZW50LAogICAgICAgICAgYXJndW1lbnRUeXBlLCBuZWVkZWROYW1lZENoZWNrc1thcmd1bWVudEluZGV4XSk7CiAgICB9CgogICAgaXIuRXhwcmVzc2lvbiBkdW1teSA9IG5ldyBpci5OdWxsTGl0ZXJhbCgpOwogICAgbm9kZS5yZXBsYWNlV2l0aChkdW1teSk7CiAgICBpci5FeHByZXNzaW9uIGJvZHkgPSBub2RlOwogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIGxldFZhcmlhYmxlcy5yZXZlcnNlZCkgewogICAgICBib2R5ID0gbmV3IGlyLkxldCh2YXJpYWJsZSwgYm9keSk7CiAgICB9CiAgICBkdW1teS5yZXBsYWNlV2l0aChib2R5KTsKICB9CgogIC8vLyBDb21wdXRlcyB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG1ldGhvZCBpbnZvY2F0aW9uIFtub2RlXSBvbiBhIHJlY2VpdmVyIG9mCiAgLy8vIHR5cGUgW3JlY2VpdmVyVHlwZV0uCiAgLy8vCiAgLy8vIElmIHRoZSBgbm9kZS5pbnRlcmZhY2VUYXJnZXRgIGlzIGBudWxsYCBidXQgbWF0Y2hlcyBhbiBgT2JqZWN0YCBtZW1iZXIKICAvLy8gaXQgaXMgdXBkYXRlZCB0byB0YXJnZXQgdGhpcyBtZW1iZXIuCiAgaXIuRGFydFR5cGUgX2NvbXB1dGVNZXRob2RJbnZvY2F0aW9uVHlwZShpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzKSB7CiAgICBpci5NZW1iZXIgaW50ZXJmYWNlVGFyZ2V0ID0gbm9kZS5pbnRlcmZhY2VUYXJnZXQ7CiAgICAvLyBUT0RPKDM0NjAyKTogUmVtb3ZlIHdoZW4gYGludGVyZmFjZVRhcmdldGAgaXMgc2V0IG9uIHN5bnRoZXRpYyBjYWxscyB0bwogICAgLy8gPT0uCiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ID09IG51bGwgJiYKICAgICAgICBub2RlLm5hbWUubmFtZSA9PSAnPT0nICYmCiAgICAgICAgbm9kZS5hcmd1bWVudHMudHlwZXMuaXNFbXB0eSAmJgogICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID09IDEgJiYKICAgICAgICBub2RlLmFyZ3VtZW50cy5uYW1lZC5pc0VtcHR5KSB7CiAgICAgIGludGVyZmFjZVRhcmdldCA9IG5vZGUuaW50ZXJmYWNlVGFyZ2V0ID0gb2JqZWN0RXF1YWxzOwogICAgfQogICAgaWYgKGludGVyZmFjZVRhcmdldCA9PSBudWxsICYmIHJlY2VpdmVyVHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlKSB7CiAgICAgIGlyLk1lbWJlciBtZW1iZXIgPQogICAgICAgICAgaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihyZWNlaXZlclR5cGUuY2xhc3NOb2RlLCBub2RlLm5hbWUpOwogICAgICBpZiAoX2lzQXBwbGljYWJsZShub2RlLmFyZ3VtZW50cywgbWVtYmVyKSkgewogICAgICAgIGludGVyZmFjZVRhcmdldCA9IG1lbWJlcjsKICAgICAgfQogICAgfQogICAgaWYgKGludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIGlyLkNsYXNzIHN1cGVyY2xhc3MgPSBpbnRlcmZhY2VUYXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGlyLlN1YnN0aXR1dGlvbiByZWNlaXZlclN1YnN0aXR1dGlvbiA9IGlyLlN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSgKICAgICAgICAgIGdldFR5cGVBc0luc3RhbmNlT2YocmVjZWl2ZXJUeXBlLCBzdXBlcmNsYXNzKSk7CiAgICAgIGlyLkRhcnRUeXBlIGdldHRlclR5cGUgPQogICAgICAgICAgcmVjZWl2ZXJTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlVGFyZ2V0LmdldHRlclR5cGUpOwogICAgICBpZiAoZ2V0dGVyVHlwZSBpcyBpci5GdW5jdGlvblR5cGUpIHsKICAgICAgICBpci5GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gZ2V0dGVyVHlwZTsKICAgICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gbm9kZS5hcmd1bWVudHMudHlwZXM7CiAgICAgICAgaWYgKGludGVyZmFjZVRhcmdldCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICAgICAgaW50ZXJmYWNlVGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkgJiYKICAgICAgICAgICAgdHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIGR5bmFtaWMgY2FsbCB0aGUgaW52b2NhdGlvbiBkb2VzIG5vdCBoYXZlIHRoZQogICAgICAgICAgLy8gaW5mZXJyZWQgZGVmYXVsdCB0eXBlIGFyZ3VtZW50cyBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGVtIGhlcmUKICAgICAgICAgIC8vIHRvIHBlcmZvcm0gYSB2YWxpZCBzdWJzdGl0dXRpb24uCiAgICAgICAgICB0eXBlQXJndW1lbnRzID0gaW50ZXJmYWNlVGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgICAgLm1hcCgodCkgPT4gcmVjZWl2ZXJTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUodC5kZWZhdWx0VHlwZSkpCiAgICAgICAgICAgICAgLnRvTGlzdCgpOwogICAgICAgIH0KICAgICAgICBnZXR0ZXJUeXBlID0gaXIuU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZS50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGZ1bmN0aW9uVHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnMpOwogICAgICB9CiAgICAgIF91cGRhdGVNZXRob2RJbnZvY2F0aW9uVGFyZ2V0KAogICAgICAgICAgbm9kZSwgYXJndW1lbnRUeXBlcywgZ2V0dGVyVHlwZSwgaW50ZXJmYWNlVGFyZ2V0KTsKICAgICAgaWYgKGlzU3BlY2lhbENhc2VkQmluYXJ5T3BlcmF0b3IoaW50ZXJmYWNlVGFyZ2V0KSkgewogICAgICAgIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZXMucG9zaXRpb25hbFswXTsKICAgICAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmdldFR5cGVPZk92ZXJsb2FkZWRBcml0aG1ldGljKAogICAgICAgICAgICByZWNlaXZlclR5cGUsIGFyZ3VtZW50VHlwZSk7CiAgICAgIH0gZWxzZSBpZiAoZ2V0dGVyVHlwZSBpcyBpci5GdW5jdGlvblR5cGUpIHsKICAgICAgICByZXR1cm4gZ2V0dGVyVHlwZS5yZXR1cm5UeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjb25zdCBpci5EeW5hbWljVHlwZSgpOwogICAgICB9CiAgICB9CiAgICBpZiAobm9kZS5uYW1lLm5hbWUgPT0gJ2NhbGwnKSB7CiAgICAgIGlmIChyZWNlaXZlclR5cGUgaXMgaXIuRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgaWYgKHJlY2VpdmVyVHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gbm9kZS5hcmd1bWVudHMudHlwZXMubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaXIuU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICAgIHJlY2VpdmVyVHlwZS50eXBlUGFyYW1ldGVycywgbm9kZS5hcmd1bWVudHMudHlwZXMpCiAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShyZWNlaXZlclR5cGUucmV0dXJuVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChub2RlLm5hbWUubmFtZSA9PSAnPT0nKSB7CiAgICAgIC8vIFdlIHVzZSB0aGlzIHNwZWNpYWwgY2FzZSB0byBzaW1wbGlmeSBnZW5lcmF0aW9uIG9mICc9PScgY2hlY2tzLgogICAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmJvb2xUeXBlOwogICAgfQogICAgcmV0dXJuIGNvbnN0IGlyLkR5bmFtaWNUeXBlKCk7CiAgfQoKICBBcmd1bWVudFR5cGVzIF92aXNpdEFyZ3VtZW50cyhpci5Bcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICBMaXN0PGlyLkRhcnRUeXBlPiBwb3NpdGlvbmFsOwogICAgTGlzdDxpci5EYXJ0VHlwZT4gbmFtZWQ7CiAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwuaXNFbXB0eSkgewogICAgICBwb3NpdGlvbmFsID0gY29uc3QgPGlyLkRhcnRUeXBlPltdOwogICAgfSBlbHNlIHsKICAgICAgcG9zaXRpb25hbCA9IG5ldyBMaXN0PGlyLkRhcnRUeXBlPihhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGgpOwogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBmb3IgKGlyLkV4cHJlc3Npb24gYXJndW1lbnQgaW4gYXJndW1lbnRzLnBvc2l0aW9uYWwpIHsKICAgICAgICBwb3NpdGlvbmFsW2luZGV4KytdID0gdmlzaXROb2RlKGFyZ3VtZW50KTsKICAgICAgfQogICAgfQogICAgaWYgKGFyZ3VtZW50cy5uYW1lZC5pc0VtcHR5KSB7CiAgICAgIG5hbWVkID0gY29uc3QgPGlyLkRhcnRUeXBlPltdOwogICAgfSBlbHNlIHsKICAgICAgbmFtZWQgPSBuZXcgTGlzdDxpci5EYXJ0VHlwZT4oYXJndW1lbnRzLm5hbWVkLmxlbmd0aCk7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIGZvciAoaXIuTmFtZWRFeHByZXNzaW9uIGFyZ3VtZW50IGluIGFyZ3VtZW50cy5uYW1lZCkgewogICAgICAgIG5hbWVkW2luZGV4KytdID0gdmlzaXROb2RlKGFyZ3VtZW50KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBBcmd1bWVudFR5cGVzKHBvc2l0aW9uYWwsIG5hbWVkKTsKICB9CgogIHZvaWQgaGFuZGxlTWV0aG9kSW52b2NhdGlvbigKICAgICAgaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywKICAgICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRNZXRob2RJbnZvY2F0aW9uKGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzID0gX3Zpc2l0QXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHZpc2l0Tm9kZShub2RlLnJlY2VpdmVyKTsKICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUgPQogICAgICAgIF9jb21wdXRlTWV0aG9kSW52b2NhdGlvblR5cGUobm9kZSwgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudFR5cGVzKTsKICAgIHJlY2VpdmVyVHlwZSA9IF9uYXJyb3dJbnN0YW5jZVJlY2VpdmVyKG5vZGUuaW50ZXJmYWNlVGFyZ2V0LCByZWNlaXZlclR5cGUpOwogICAgaWYgKG5vZGUubmFtZS5uYW1lID09ICc9PScpIHsKICAgICAgaXIuRXhwcmVzc2lvbiBsZWZ0ID0gbm9kZS5yZWNlaXZlcjsKICAgICAgaXIuRXhwcmVzc2lvbiByaWdodCA9IG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWxbMF07CiAgICAgIFR5cGVNYXAgYWZ0ZXJJbnZvY2F0aW9uID0gdHlwZU1hcDsKICAgICAgaWYgKGxlZnQgaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgICAgIHJpZ2h0IGlzIGlyLk51bGxMaXRlcmFsICYmCiAgICAgICAgICAhX2ludmFsaWRhdGVkVmFyaWFibGVzLmNvbnRhaW5zKGxlZnQudmFyaWFibGUpKSB7CiAgICAgICAgLy8gSWYgYGxlZnQgPT0gbnVsbGAgaXMgdHJ1ZSwgd2UgcHJvbW90ZSB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUgdG8KICAgICAgICAvLyBgTnVsbGAgYnkgcmVnaXN0ZXJpbmcgdGhhdCBpcyBrbm93biBfbm90XyB0byBiZSBvZiBpdHMgZGVjbGFyZWQgdHlwZS4KICAgICAgICB0eXBlTWFwV2hlblRydWUgPSBhZnRlckludm9jYXRpb24KICAgICAgICAgICAgLnByb21vdGUobGVmdC52YXJpYWJsZSwgbGVmdC52YXJpYWJsZS50eXBlLCBpc1RydWU6IGZhbHNlKTsKICAgICAgICB0eXBlTWFwV2hlbkZhbHNlID0gYWZ0ZXJJbnZvY2F0aW9uCiAgICAgICAgICAgIC5wcm9tb3RlKGxlZnQudmFyaWFibGUsIGxlZnQudmFyaWFibGUudHlwZSwgaXNUcnVlOiB0cnVlKTsKICAgICAgfQogICAgICBpZiAocmlnaHQgaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgICAgIGxlZnQgaXMgaXIuTnVsbExpdGVyYWwgJiYKICAgICAgICAgICFfaW52YWxpZGF0ZWRWYXJpYWJsZXMuY29udGFpbnMocmlnaHQudmFyaWFibGUpKSB7CiAgICAgICAgLy8gSWYgYG51bGwgPT0gcmlnaHRgIGlzIHRydWUsIHdlIHByb21vdGUgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlIHRvCiAgICAgICAgLy8gYE51bGxgIGJ5IHJlZ2lzdGVyaW5nIHRoYXQgaXMga25vd24gX25vdF8gdG8gYmUgb2YgaXRzIGRlY2xhcmVkIHR5cGUuCiAgICAgICAgdHlwZU1hcFdoZW5UcnVlID0gYWZ0ZXJJbnZvY2F0aW9uCiAgICAgICAgICAgIC5wcm9tb3RlKHJpZ2h0LnZhcmlhYmxlLCByaWdodC52YXJpYWJsZS50eXBlLCBpc1RydWU6IGZhbHNlKTsKICAgICAgICB0eXBlTWFwV2hlbkZhbHNlID0gYWZ0ZXJJbnZvY2F0aW9uCiAgICAgICAgICAgIC5wcm9tb3RlKHJpZ2h0LnZhcmlhYmxlLCByaWdodC52YXJpYWJsZS50eXBlLCBpc1RydWU6IHRydWUpOwogICAgICB9CiAgICB9CiAgICBfZXhwcmVzc2lvblR5cGVDYWNoZVtub2RlXSA9IHJldHVyblR5cGU7CiAgICBoYW5kbGVNZXRob2RJbnZvY2F0aW9uKG5vZGUsIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7CiAgICByZXR1cm4gcmV0dXJuVHlwZTsKICB9CgogIHZvaWQgaGFuZGxlVmFyaWFibGVHZXQoaXIuVmFyaWFibGVHZXQgbm9kZSwgaXIuRGFydFR5cGUgdHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRWYXJpYWJsZUdldChpci5WYXJpYWJsZUdldCBub2RlKSB7CiAgICBpZiAodHlwZU1hcHNGb3JUZXN0aW5nICE9IG51bGwpIHsKICAgICAgdHlwZU1hcHNGb3JUZXN0aW5nW25vZGVdID0gdHlwZU1hcDsKICAgIH0KICAgIGlyLkRhcnRUeXBlIHByb21vdGVkVHlwZSA9IHR5cGVNYXAudHlwZU9mKG5vZGUsIHR5cGVFbnZpcm9ubWVudCk7CiAgICBhc3NlcnQoCiAgICAgICAgbm9kZS5wcm9tb3RlZFR5cGUgPT0gbnVsbCB8fAogICAgICAgICAgICBwcm9tb3RlZFR5cGUgPT0gdHlwZUVudmlyb25tZW50Lm51bGxUeXBlIHx8CiAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihwcm9tb3RlZFR5cGUsIG5vZGUucHJvbW90ZWRUeXBlKSwKICAgICAgICAiVW5leHBlY3RlZCBwcm9tb3Rpb24gb2YgJHtub2RlLnZhcmlhYmxlfSBpbiAke25vZGUucGFyZW50fS4gIgogICAgICAgICJFeHBlY3RlZCAke25vZGUucHJvbW90ZWRUeXBlfSwgZm91bmQgJHByb21vdGVkVHlwZSIpOwogICAgX2V4cHJlc3Npb25UeXBlQ2FjaGVbbm9kZV0gPSBwcm9tb3RlZFR5cGU7CiAgICBoYW5kbGVWYXJpYWJsZUdldChub2RlLCBwcm9tb3RlZFR5cGUpOwogICAgcmV0dXJuIHByb21vdGVkVHlwZTsKICB9CgogIHZvaWQgaGFuZGxlVmFyaWFibGVTZXQoaXIuVmFyaWFibGVTZXQgbm9kZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRWYXJpYWJsZVNldChpci5WYXJpYWJsZVNldCBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSByZXN1bHRUeXBlID0gc3VwZXIudmlzaXRWYXJpYWJsZVNldChub2RlKTsKICAgIGhhbmRsZVZhcmlhYmxlU2V0KG5vZGUsIHJlc3VsdFR5cGUpOwogICAgaWYgKCFfY3VycmVudFZhcmlhYmxlcy5jb250YWlucyhub2RlLnZhcmlhYmxlKSkgewogICAgICBfaW52YWxpZGF0ZWRWYXJpYWJsZXMuYWRkKG5vZGUudmFyaWFibGUpOwogICAgICB0eXBlTWFwID0gdHlwZU1hcC5yZW1vdmUoW25vZGUudmFyaWFibGVdKTsKICAgIH0gZWxzZSB7CiAgICAgIHR5cGVNYXAgPSB0eXBlTWFwLnJlZHVjZShub2RlLCByZXN1bHRUeXBlLCB0eXBlRW52aXJvbm1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdFR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZVN0YXRpY0dldChpci5TdGF0aWNHZXQgbm9kZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUpIHsKICAgIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUgPSBzdXBlci52aXNpdFN0YXRpY0dldChub2RlKTsKICAgIGhhbmRsZVN0YXRpY0dldChub2RlLCByZXN1bHRUeXBlKTsKICAgIHJldHVybiByZXN1bHRUeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVTdGF0aWNTZXQoaXIuU3RhdGljU2V0IG5vZGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdGF0aWNTZXQoaXIuU3RhdGljU2V0IG5vZGUpIHsKICAgIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSA9IHN1cGVyLnZpc2l0U3RhdGljU2V0KG5vZGUpOwogICAgaGFuZGxlU3RhdGljU2V0KG5vZGUsIHZhbHVlVHlwZSk7CiAgICByZXR1cm4gdmFsdWVUeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSwKICAgICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzLCBpci5EYXJ0VHlwZSByZXR1cm5UeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMgPSBfdmlzaXRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSA9IGlyLlN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLCBub2RlLmFyZ3VtZW50cy50eXBlcykKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUobm9kZS50YXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgICBfZXhwcmVzc2lvblR5cGVDYWNoZVtub2RlXSA9IHJldHVyblR5cGU7CiAgICBoYW5kbGVTdGF0aWNJbnZvY2F0aW9uKG5vZGUsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpOwogICAgcmV0dXJuIHJldHVyblR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZUNvbnN0cnVjdG9ySW52b2NhdGlvbihpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSwKICAgICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzID0gX3Zpc2l0QXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUgPSBub2RlLmFyZ3VtZW50cy50eXBlcy5pc0VtcHR5CiAgICAgICAgPyBuZXcgRXhhY3RJbnRlcmZhY2VUeXBlLmZyb20obm9kZS50YXJnZXQuZW5jbG9zaW5nQ2xhc3MucmF3VHlwZSkKICAgICAgICA6IG5ldyBFeGFjdEludGVyZmFjZVR5cGUoCiAgICAgICAgICAgIG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzLCBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgICBfZXhwcmVzc2lvblR5cGVDYWNoZVtub2RlXSA9IHJlc3VsdFR5cGU7CiAgICBoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb24obm9kZSwgYXJndW1lbnRUeXBlcywgcmVzdWx0VHlwZSk7CiAgICByZXR1cm4gcmVzdWx0VHlwZTsKICB9CgogIHZvaWQgaGFuZGxlU3VwZXJQcm9wZXJ0eUdldCgKICAgICAgaXIuU3VwZXJQcm9wZXJ0eUdldCBub2RlLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN1cGVyUHJvcGVydHlHZXQoaXIuU3VwZXJQcm9wZXJ0eUdldCBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSByZXN1bHRUeXBlOwogICAgaWYgKG5vZGUuaW50ZXJmYWNlVGFyZ2V0ID09IG51bGwpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVzb2x2ZSBhbmQgc2V0IHRoZSB0YXJnZXQgaGVyZS4KICAgICAgcmVzdWx0VHlwZSA9IGNvbnN0IGlyLkR5bmFtaWNUeXBlKCk7CiAgICB9IGVsc2UgewogICAgICBpci5DbGFzcyBkZWNsYXJpbmdDbGFzcyA9IG5vZGUuaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgICBpZiAoZGVjbGFyaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAgIHJlc3VsdFR5cGUgPSBub2RlLmludGVyZmFjZVRhcmdldC5nZXR0ZXJUeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyID0KICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LmdldFR5cGVBc0luc3RhbmNlT2YodGhpc1R5cGUsIGRlY2xhcmluZ0NsYXNzKTsKICAgICAgICByZXN1bHRUeXBlID0gaXIuU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHJlY2VpdmVyKQogICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUobm9kZS5pbnRlcmZhY2VUYXJnZXQuZ2V0dGVyVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIF9leHByZXNzaW9uVHlwZUNhY2hlW25vZGVdID0gcmVzdWx0VHlwZTsKICAgIGhhbmRsZVN1cGVyUHJvcGVydHlHZXQobm9kZSwgcmVzdWx0VHlwZSk7CiAgICByZXR1cm4gcmVzdWx0VHlwZTsKICB9CgogIHZvaWQgaGFuZGxlU3VwZXJQcm9wZXJ0eVNldCgKICAgICAgaXIuU3VwZXJQcm9wZXJ0eVNldCBub2RlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChpci5TdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSA9IHN1cGVyLnZpc2l0U3VwZXJQcm9wZXJ0eVNldChub2RlKTsKICAgIGhhbmRsZVN1cGVyUHJvcGVydHlTZXQobm9kZSwgdmFsdWVUeXBlKTsKICAgIHJldHVybiB2YWx1ZVR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZVN1cGVyTWV0aG9kSW52b2NhdGlvbihpci5TdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSwKICAgICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzLCBpci5EYXJ0VHlwZSByZXR1cm5UeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihpci5TdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzID0gX3Zpc2l0QXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGU7CiAgICBpZiAobm9kZS5pbnRlcmZhY2VUYXJnZXQgPT0gbnVsbCkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXNvbHZlIGFuZCBzZXQgdGhlIHRhcmdldCBoZXJlLgogICAgICByZXR1cm5UeXBlID0gY29uc3QgaXIuRHluYW1pY1R5cGUoKTsKICAgIH0gZWxzZSB7CiAgICAgIGlyLkNsYXNzIHN1cGVyY2xhc3MgPSBub2RlLmludGVyZmFjZVRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgICAgaXIuSW50ZXJmYWNlVHlwZSByZWNlaXZlclR5cGUgPQogICAgICAgICAgdHlwZUVudmlyb25tZW50LmdldFR5cGVBc0luc3RhbmNlT2YodGhpc1R5cGUsIHN1cGVyY2xhc3MpOwogICAgICByZXR1cm5UeXBlID0gaXIuU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHJlY2VpdmVyVHlwZSkKICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShub2RlLmludGVyZmFjZVRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlKTsKICAgICAgcmV0dXJuVHlwZSA9IGlyLlN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgICAgbm9kZS5pbnRlcmZhY2VUYXJnZXQuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMudHlwZXMpCiAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUocmV0dXJuVHlwZSk7CiAgICB9CiAgICBfZXhwcmVzc2lvblR5cGVDYWNoZVtub2RlXSA9IHJldHVyblR5cGU7CiAgICBoYW5kbGVTdXBlck1ldGhvZEludm9jYXRpb24obm9kZSwgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7CiAgICByZXR1cm4gcmV0dXJuVHlwZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oaXIuTG9naWNhbEV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKG5vZGUub3BlcmF0b3IgPT0gJyYmJykgewogICAgICB2aXNpdE5vZGUobm9kZS5sZWZ0KTsKICAgICAgVHlwZU1hcCBhZnRlckxlZnRXaGVuVHJ1ZSA9IHR5cGVNYXBXaGVuVHJ1ZTsKICAgICAgVHlwZU1hcCBhZnRlckxlZnRXaGVuRmFsc2UgPSB0eXBlTWFwV2hlbkZhbHNlOwogICAgICB0eXBlTWFwID0gYWZ0ZXJMZWZ0V2hlblRydWU7CiAgICAgIHZpc2l0Tm9kZShub2RlLnJpZ2h0KTsKICAgICAgVHlwZU1hcCBhZnRlclJpZ2h0V2hlblRydWUgPSB0eXBlTWFwV2hlblRydWU7CiAgICAgIFR5cGVNYXAgYWZ0ZXJSaWdodFdoZW5GYWxzZSA9IHR5cGVNYXBXaGVuRmFsc2U7CiAgICAgIHR5cGVNYXBXaGVuVHJ1ZSA9IGFmdGVyUmlnaHRXaGVuVHJ1ZTsKICAgICAgdHlwZU1hcFdoZW5GYWxzZSA9IGFmdGVyTGVmdFdoZW5GYWxzZS5qb2luKGFmdGVyUmlnaHRXaGVuRmFsc2UpOwogICAgfSBlbHNlIHsKICAgICAgdmlzaXROb2RlKG5vZGUubGVmdCk7CiAgICAgIFR5cGVNYXAgYWZ0ZXJMZWZ0V2hlblRydWUgPSB0eXBlTWFwV2hlblRydWU7CiAgICAgIFR5cGVNYXAgYWZ0ZXJMZWZ0V2hlbkZhbHNlID0gdHlwZU1hcFdoZW5GYWxzZTsKICAgICAgdHlwZU1hcCA9IGFmdGVyTGVmdFdoZW5GYWxzZTsKICAgICAgdmlzaXROb2RlKG5vZGUucmlnaHQpOwogICAgICBUeXBlTWFwIGFmdGVyUmlnaHRXaGVuVHJ1ZSA9IHR5cGVNYXBXaGVuVHJ1ZTsKICAgICAgVHlwZU1hcCBhZnRlclJpZ2h0V2hlbkZhbHNlID0gdHlwZU1hcFdoZW5GYWxzZTsKICAgICAgdHlwZU1hcFdoZW5UcnVlID0gYWZ0ZXJMZWZ0V2hlblRydWUuam9pbihhZnRlclJpZ2h0V2hlblRydWUpOwogICAgICB0eXBlTWFwV2hlbkZhbHNlID0gYWZ0ZXJSaWdodFdoZW5GYWxzZTsKICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdExvZ2ljYWxFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXROb3QoaXIuTm90IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLm9wZXJhbmQpOwogICAgVHlwZU1hcCBhZnRlck9wZXJhbmRXaGVuVHJ1ZSA9IHR5cGVNYXBXaGVuVHJ1ZTsKICAgIFR5cGVNYXAgYWZ0ZXJPcGVyYW5kV2hlbkZhbHNlID0gdHlwZU1hcFdoZW5GYWxzZTsKICAgIHR5cGVNYXBXaGVuVHJ1ZSA9IGFmdGVyT3BlcmFuZFdoZW5GYWxzZTsKICAgIHR5cGVNYXBXaGVuRmFsc2UgPSBhZnRlck9wZXJhbmRXaGVuVHJ1ZTsKICAgIHJldHVybiBzdXBlci52aXNpdE5vdChub2RlKTsKICB9CgogIGlyLkRhcnRUeXBlIF9oYW5kbGVDb25kaXRpb25hbCgKICAgICAgaXIuRXhwcmVzc2lvbiBjb25kaXRpb24sIGlyLlRyZWVOb2RlIHRoZW4sIGlyLlRyZWVOb2RlIG90aGVyd2lzZSkgewogICAgdmlzaXROb2RlKGNvbmRpdGlvbik7CiAgICBUeXBlTWFwIGFmdGVyQ29uZGl0aW9uV2hlblRydWUgPSB0eXBlTWFwV2hlblRydWU7CiAgICBUeXBlTWFwIGFmdGVyQ29uZGl0aW9uV2hlbkZhbHNlID0gdHlwZU1hcFdoZW5GYWxzZTsKICAgIHR5cGVNYXAgPSBhZnRlckNvbmRpdGlvbldoZW5UcnVlOwogICAgaXIuRGFydFR5cGUgdGhlblR5cGUgPSB2aXNpdE5vZGUodGhlbik7CiAgICBUeXBlTWFwIGFmdGVyVGhlbiA9IHR5cGVNYXA7CiAgICB0eXBlTWFwID0gYWZ0ZXJDb25kaXRpb25XaGVuRmFsc2U7CiAgICBpci5EYXJ0VHlwZSBvdGhlcndpc2VUeXBlID0gdmlzaXROb2RlKG90aGVyd2lzZSk7CiAgICBUeXBlTWFwIGFmdGVyT3RoZXJ3aXNlID0gdHlwZU1hcDsKICAgIGlmIChjb21wbGV0ZXModGhlblR5cGUpICYmIGNvbXBsZXRlcyhvdGhlcndpc2VUeXBlKSkgewogICAgICB0eXBlTWFwID0gYWZ0ZXJUaGVuLmpvaW4oYWZ0ZXJPdGhlcndpc2UpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoY29tcGxldGVzKHRoZW5UeXBlKSkgewogICAgICB0eXBlTWFwID0gYWZ0ZXJUaGVuOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoY29tcGxldGVzKG90aGVyd2lzZVR5cGUpKSB7CiAgICAgIHR5cGVNYXAgPSBhZnRlck90aGVyd2lzZTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICB0eXBlTWFwID0gYWZ0ZXJUaGVuLmpvaW4oYWZ0ZXJPdGhlcndpc2UpOwogICAgICByZXR1cm4gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCB3ZSByZXR1cm4gYGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKWAgaWYKICAgIC8vIGJvdGggYnJhbmNoZXMgYXJlIGZhaWxpbmc/CiAgICBfaGFuZGxlQ29uZGl0aW9uYWwobm9kZS5jb25kaXRpb24sIG5vZGUudGhlbiwgbm9kZS5vdGhlcndpc2UpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgdm9pZCBoYW5kbGVJc0V4cHJlc3Npb24oaXIuSXNFeHByZXNzaW9uIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0SXNFeHByZXNzaW9uKGlyLklzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpci5FeHByZXNzaW9uIG9wZXJhbmQgPSBub2RlLm9wZXJhbmQ7CiAgICB2aXNpdE5vZGUob3BlcmFuZCk7CiAgICBpZiAob3BlcmFuZCBpcyBpci5WYXJpYWJsZUdldCAmJgogICAgICAgICFfaW52YWxpZGF0ZWRWYXJpYWJsZXMuY29udGFpbnMob3BlcmFuZC52YXJpYWJsZSkpIHsKICAgICAgVHlwZU1hcCBhZnRlck9wZXJhbmQgPSB0eXBlTWFwOwogICAgICB0eXBlTWFwV2hlblRydWUgPQogICAgICAgICAgYWZ0ZXJPcGVyYW5kLnByb21vdGUob3BlcmFuZC52YXJpYWJsZSwgbm9kZS50eXBlLCBpc1RydWU6IHRydWUpOwogICAgICB0eXBlTWFwV2hlbkZhbHNlID0KICAgICAgICAgIGFmdGVyT3BlcmFuZC5wcm9tb3RlKG9wZXJhbmQudmFyaWFibGUsIG5vZGUudHlwZSwgaXNUcnVlOiBmYWxzZSk7CiAgICB9CiAgICBoYW5kbGVJc0V4cHJlc3Npb24obm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRJc0V4cHJlc3Npb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdExldChpci5MZXQgbm9kZSkgewogICAgX3Byb2Nlc3NMb2NhbFZhcmlhYmxlKG5vZGUudmFyaWFibGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0TGV0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRCbG9ja0V4cHJlc3Npb24oaXIuQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0QmxvY2tFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgaXIuRGFydFR5cGUgX2NvbXB1dGVJbnN0YW50aWF0aW9uVHlwZSgKICAgICAgaXIuSW5zdGFudGlhdGlvbiBub2RlLCBpci5GdW5jdGlvblR5cGUgZXhwcmVzc2lvblR5cGUpIHsKICAgIHJldHVybiBpci5TdWJzdGl0dXRpb24uZnJvbVBhaXJzKAogICAgICAgICAgICBleHByZXNzaW9uVHlwZS50eXBlUGFyYW1ldGVycywgbm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZShleHByZXNzaW9uVHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnMpOwogIH0KCiAgdm9pZCBoYW5kbGVJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSwKICAgICAgaXIuRnVuY3Rpb25UeXBlIGV4cHJlc3Npb25UeXBlLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEluc3RhbnRpYXRpb24oaXIuSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICBpci5GdW5jdGlvblR5cGUgZXhwcmVzc2lvblR5cGUgPSB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUgPSBfY29tcHV0ZUluc3RhbnRpYXRpb25UeXBlKG5vZGUsIGV4cHJlc3Npb25UeXBlKTsKICAgIF9leHByZXNzaW9uVHlwZUNhY2hlW25vZGVdID0gcmVzdWx0VHlwZTsKICAgIGhhbmRsZUluc3RhbnRpYXRpb24obm9kZSwgZXhwcmVzc2lvblR5cGUsIHJlc3VsdFR5cGUpOwogICAgcmV0dXJuIHJlc3VsdFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEJsb2NrKGlyLkJsb2NrIG5vZGUpIHsKICAgIGFzc2VydChfcGVuZGluZ1J1bnRpbWVUeXBlVXNlRGF0YS5pc0VtcHR5KTsKICAgIGlyLkRhcnRUeXBlIHR5cGU7CiAgICBmb3IgKGlyLlN0YXRlbWVudCBzdGF0ZW1lbnQgaW4gbm9kZS5zdGF0ZW1lbnRzKSB7CiAgICAgIGlmICghY29tcGxldGVzKHZpc2l0Tm9kZShzdGF0ZW1lbnQpKSkgewogICAgICAgIHR5cGUgPSBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKCk7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydChfcGVuZGluZ1J1bnRpbWVUeXBlVXNlRGF0YS5pc0VtcHR5LAogICAgICAgICJJbmNvbXBsZXRlIFJ1bnRpbWVUeXBlVXNlRGF0YTogJF9wZW5kaW5nUnVudGltZVR5cGVVc2VEYXRhIik7CiAgICByZXR1cm4gdHlwZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChpci5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIGhhbmRsZUFzRXhwcmVzc2lvbihpci5Bc0V4cHJlc3Npb24gbm9kZSwgaXIuRGFydFR5cGUgb3BlcmFuZFR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0QXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSBvcGVyYW5kVHlwZSA9IHZpc2l0Tm9kZShub2RlLm9wZXJhbmQpOwogICAgaGFuZGxlQXNFeHByZXNzaW9uKG5vZGUsIG9wZXJhbmRUeXBlKTsKICAgIHJldHVybiBzdXBlci52aXNpdEFzRXhwcmVzc2lvbihub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlU3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5leHByZXNzaW9ucyk7CiAgICBoYW5kbGVTdHJpbmdDb25jYXRlbmF0aW9uKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlSW50TGl0ZXJhbChpci5JbnRMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0SW50TGl0ZXJhbChpci5JbnRMaXRlcmFsIG5vZGUpIHsKICAgIGhhbmRsZUludExpdGVyYWwobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRJbnRMaXRlcmFsKG5vZGUpOwogIH0KCiAgdm9pZCBoYW5kbGVEb3VibGVMaXRlcmFsKGlyLkRvdWJsZUxpdGVyYWwgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXREb3VibGVMaXRlcmFsKGlyLkRvdWJsZUxpdGVyYWwgbm9kZSkgewogICAgaGFuZGxlRG91YmxlTGl0ZXJhbChub2RlKTsKICAgIHJldHVybiBzdXBlci52aXNpdERvdWJsZUxpdGVyYWwobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZUJvb2xMaXRlcmFsKGlyLkJvb2xMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Qm9vbExpdGVyYWwoaXIuQm9vbExpdGVyYWwgbm9kZSkgewogICAgaGFuZGxlQm9vbExpdGVyYWwobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRCb29sTGl0ZXJhbChub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlU3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIGhhbmRsZVN0cmluZ0xpdGVyYWwobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRTdHJpbmdMaXRlcmFsKG5vZGUpOwogIH0KCiAgdm9pZCBoYW5kbGVTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgaGFuZGxlU3ltYm9sTGl0ZXJhbChub2RlKTsKICAgIHJldHVybiBzdXBlci52aXNpdFN5bWJvbExpdGVyYWwobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZU51bGxMaXRlcmFsKGlyLk51bGxMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TnVsbExpdGVyYWwoaXIuTnVsbExpdGVyYWwgbm9kZSkgewogICAgaGFuZGxlTnVsbExpdGVyYWwobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXROdWxsTGl0ZXJhbChub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlTGlzdExpdGVyYWwoaXIuTGlzdExpdGVyYWwgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBub2RlKSB7CiAgICB2aXNpdE5vZGVzKG5vZGUuZXhwcmVzc2lvbnMpOwogICAgaGFuZGxlTGlzdExpdGVyYWwobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRMaXN0TGl0ZXJhbChub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlU2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5leHByZXNzaW9ucyk7CiAgICBoYW5kbGVTZXRMaXRlcmFsKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0U2V0TGl0ZXJhbChub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlTWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5lbnRyaWVzKTsKICAgIGhhbmRsZU1hcExpdGVyYWwobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRNYXBMaXRlcmFsKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdE1hcEVudHJ5KGlyLk1hcEVudHJ5IGVudHJ5KSB7CiAgICB2aXNpdE5vZGUoZW50cnkua2V5KTsKICAgIHZpc2l0Tm9kZShlbnRyeS52YWx1ZSk7CiAgfQoKICB2b2lkIGhhbmRsZUZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oaXIuRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpIHsKICAgIFR5cGVNYXAgYmVmb3JlQ2xvc3VyZSA9CiAgICAgICAgdHlwZU1hcC5yZW1vdmUodmFyaWFibGVTY29wZU1vZGVsLmdldFNjb3BlRm9yKG5vZGUpLmFzc2lnbmVkVmFyaWFibGVzKTsKICAgIHR5cGVNYXAgPSB0eXBlTWFwLnJlbW92ZSh2YXJpYWJsZVNjb3BlTW9kZWwuYXNzaWduZWRWYXJpYWJsZXMpOwogICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSA9IHN1cGVyLnZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGUpOwogICAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IF9vbGRWYXJpYWJsZXMgPSBfY3VycmVudFZhcmlhYmxlczsKICAgIF9jdXJyZW50VmFyaWFibGVzID0ge307CiAgICB2aXNpdFNpZ25hdHVyZShub2RlLmZ1bmN0aW9uKTsKICAgIHZpc2l0Tm9kZShub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgaGFuZGxlRnVuY3Rpb25FeHByZXNzaW9uKG5vZGUpOwogICAgX2ludmFsaWRhdGVkVmFyaWFibGVzLnJlbW92ZUFsbChfY3VycmVudFZhcmlhYmxlcyk7CiAgICBfY3VycmVudFZhcmlhYmxlcyA9IF9vbGRWYXJpYWJsZXM7CiAgICB0eXBlTWFwID0gYmVmb3JlQ2xvc3VyZTsKICAgIHJldHVybiByZXR1cm5UeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVUaHJvdyhpci5UaHJvdyBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFRocm93KGlyLlRocm93IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgaGFuZGxlVGhyb3cobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRUaHJvdyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugbm9kZSkgewogICAgdmlzaXROb2Rlcyhub2RlLmV4cHJlc3Npb25zKTsKICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoaXIuTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0QnJlYWtTdGF0ZW1lbnQoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRZaWVsZFN0YXRlbWVudChpci5ZaWVsZFN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRBc3NlcnRJbml0aWFsaXplcihpci5Bc3NlcnRJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5zdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCBoYW5kbGVGaWVsZEluaXRpYWxpemVyKGlyLkZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdEZpZWxkSW5pdGlhbGl6ZXIoaXIuRmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgICBoYW5kbGVGaWVsZEluaXRpYWxpemVyKG5vZGUpOwogIH0KCiAgdm9pZCBoYW5kbGVSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICBpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyIG5vZGUsIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcykge30KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplciBub2RlKSB7CiAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMgPSBfdmlzaXRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgaGFuZGxlUmVkaXJlY3RpbmdJbml0aWFsaXplcihub2RlLCBhcmd1bWVudFR5cGVzKTsKICB9CgogIHZvaWQgaGFuZGxlU3VwZXJJbml0aWFsaXplcigKICAgICAgaXIuU3VwZXJJbml0aWFsaXplciBub2RlLCBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMpIHt9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRTdXBlckluaXRpYWxpemVyKGlyLlN1cGVySW5pdGlhbGl6ZXIgbm9kZSkgewogICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzID0gX3Zpc2l0QXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIGhhbmRsZVN1cGVySW5pdGlhbGl6ZXIobm9kZSwgYXJndW1lbnRUeXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0TG9jYWxJbml0aWFsaXplcihpci5Mb2NhbEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLnZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TmFtZWRFeHByZXNzaW9uKGlyLk5hbWVkRXhwcmVzc2lvbiBub2RlKSA9PgogICAgICB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRFbXB0eVN0YXRlbWVudChpci5FbXB0eVN0YXRlbWVudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0Rm9yU3RhdGVtZW50KGlyLkZvclN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGVzKG5vZGUudmFyaWFibGVzKTsKICAgIFR5cGVNYXAgYmVmb3JlTG9vcCA9IHR5cGVNYXAgPQogICAgICAgIHR5cGVNYXAucmVtb3ZlKHZhcmlhYmxlU2NvcGVNb2RlbC5nZXRTY29wZUZvcihub2RlKS5hc3NpZ25lZFZhcmlhYmxlcyk7CiAgICB2aXNpdE5vZGUobm9kZS5jb25kaXRpb24pOwogICAgdHlwZU1hcCA9IHR5cGVNYXBXaGVuVHJ1ZTsKICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgdmlzaXROb2Rlcyhub2RlLnVwZGF0ZXMpOwogICAgdHlwZU1hcCA9IGJlZm9yZUxvb3A7CiAgfQoKICB2b2lkIGhhbmRsZUZvckluU3RhdGVtZW50KGlyLkZvckluU3RhdGVtZW50IG5vZGUsIGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZSwKICAgICAgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgLy8gRm9yIHN5bmMgZm9yLWluIFtpdGVyYWJsZVR5cGVdIGlzIGEgc3VidHlwZSBvZiBgSXRlcmFibGVgLCBmb3IgYXN5bmMKICAgIC8vIGZvci1pbiBbaXRlcmFibGVUeXBlXSBpcyBhIHN1YnR5cGUgb2YgYFN0cmVhbWAuCiAgICBpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUgPSB2aXNpdE5vZGUobm9kZS5pdGVyYWJsZSk7CiAgICBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGUgPSBjb25zdCBpci5EeW5hbWljVHlwZSgpOwogICAgaWYgKG5vZGUuaXNBc3luYykgewogICAgICBpci5JbnRlcmZhY2VUeXBlIHN0cmVhbUludGVyZmFjZVR5cGUgPSBnZXRJbnRlcmZhY2VUeXBlT2YoaXRlcmFibGVUeXBlKTsKICAgICAgaXIuSW50ZXJmYWNlVHlwZSBzdHJlYW1UeXBlID0gdHlwZUVudmlyb25tZW50LmdldFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICBzdHJlYW1JbnRlcmZhY2VUeXBlLCB0eXBlRW52aXJvbm1lbnQuY29yZVR5cGVzLnN0cmVhbUNsYXNzKTsKICAgICAgaWYgKHN0cmVhbVR5cGUgIT0gbnVsbCkgewogICAgICAgIGl0ZXJhdG9yVHlwZSA9IG5ldyBpci5JbnRlcmZhY2VUeXBlKAogICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuY29yZVR5cGVzLnN0cmVhbUl0ZXJhdG9yQ2xhc3MsCiAgICAgICAgICAgIHN0cmVhbVR5cGUudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlyLkludGVyZmFjZVR5cGUgaXRlcmFibGVJbnRlcmZhY2VUeXBlID0gZ2V0SW50ZXJmYWNlVHlwZU9mKGl0ZXJhYmxlVHlwZSk7CiAgICAgIGlyLk1lbWJlciBtZW1iZXIgPSBoaWVyYXJjaHkuZ2V0SW50ZXJmYWNlTWVtYmVyKAogICAgICAgICAgaXRlcmFibGVJbnRlcmZhY2VUeXBlLmNsYXNzTm9kZSwgbmV3IGlyLk5hbWUoSWRlbnRpZmllcnMuaXRlcmF0b3IpKTsKICAgICAgaWYgKG1lbWJlciAhPSBudWxsKSB7CiAgICAgICAgaXRlcmF0b3JUeXBlID0gaXIuU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKAogICAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LmdldFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICAgICAgICAgICAgaXRlcmFibGVJbnRlcmZhY2VUeXBlLCBtZW1iZXIuZW5jbG9zaW5nQ2xhc3MpKQogICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUobWVtYmVyLmdldHRlclR5cGUpOwogICAgICB9CiAgICB9CiAgICBfZm9ySW5JdGVyYXRvclR5cGVDYWNoZSA/Pz0ge307CiAgICBfZm9ySW5JdGVyYXRvclR5cGVDYWNoZVtub2RlXSA9IGl0ZXJhdG9yVHlwZTsKICAgIFR5cGVNYXAgYmVmb3JlTG9vcCA9IHR5cGVNYXAgPQogICAgICAgIHR5cGVNYXAucmVtb3ZlKHZhcmlhYmxlU2NvcGVNb2RlbC5nZXRTY29wZUZvcihub2RlKS5hc3NpZ25lZFZhcmlhYmxlcyk7CiAgICB2aXNpdE5vZGUobm9kZS52YXJpYWJsZSk7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIGhhbmRsZUZvckluU3RhdGVtZW50KG5vZGUsIGl0ZXJhYmxlVHlwZSwgaXRlcmF0b3JUeXBlKTsKICAgIHR5cGVNYXAgPSBiZWZvcmVMb29wOwogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IG5vZGUpIHsKICAgIFR5cGVNYXAgYmVmb3JlTG9vcCA9IHR5cGVNYXAgPQogICAgICAgIHR5cGVNYXAucmVtb3ZlKHZhcmlhYmxlU2NvcGVNb2RlbC5nZXRTY29wZUZvcihub2RlKS5hc3NpZ25lZFZhcmlhYmxlcyk7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICB0eXBlTWFwID0gYmVmb3JlTG9vcDsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRXaGlsZVN0YXRlbWVudChpci5XaGlsZVN0YXRlbWVudCBub2RlKSB7CiAgICBUeXBlTWFwIGJlZm9yZUxvb3AgPSB0eXBlTWFwID0KICAgICAgICB0eXBlTWFwLnJlbW92ZSh2YXJpYWJsZVNjb3BlTW9kZWwuZ2V0U2NvcGVGb3Iobm9kZSkuYXNzaWduZWRWYXJpYWJsZXMpOwogICAgdmlzaXROb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgIHR5cGVNYXAgPSB0eXBlTWFwV2hlblRydWU7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHR5cGVNYXAgPSBiZWZvcmVMb29wOwogIH0KCiAgdm9pZCBoYW5kbGVTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgVHlwZU1hcCBhZnRlckV4cHJlc3Npb24gPSB0eXBlTWFwOwogICAgVmFyaWFibGVTY29wZSBzY29wZSA9IHZhcmlhYmxlU2NvcGVNb2RlbC5nZXRTY29wZUZvcihub2RlKTsKICAgIFR5cGVNYXAgYWZ0ZXJTdGF0ZW1lbnQgPSBhZnRlckV4cHJlc3Npb24ucmVtb3ZlKHNjb3BlLmFzc2lnbmVkVmFyaWFibGVzKTsKICAgIFR5cGVNYXAgYmVmb3JlQ2FzZSA9CiAgICAgICAgc2NvcGUuaGFzQ29udGludWVTd2l0Y2ggPyBhZnRlclN0YXRlbWVudCA6IGFmdGVyRXhwcmVzc2lvbjsKICAgIGZvciAoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlIGluIG5vZGUuY2FzZXMpIHsKICAgICAgdHlwZU1hcCA9IGJlZm9yZUNhc2U7CiAgICAgIHZpc2l0Tm9kZShzd2l0Y2hDYXNlKTsKICAgIH0KICAgIGhhbmRsZVN3aXRjaFN0YXRlbWVudChub2RlKTsKICAgIHR5cGVNYXAgPSBhZnRlclN0YXRlbWVudDsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0UmV0dXJuU3RhdGVtZW50KGlyLlJldHVyblN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdElmU3RhdGVtZW50KGlyLklmU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBfaGFuZGxlQ29uZGl0aW9uYWwobm9kZS5jb25kaXRpb24sIG5vZGUudGhlbiwgbm9kZS5vdGhlcndpc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdFRyeUNhdGNoKGlyLlRyeUNhdGNoIG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgdmlzaXROb2Rlcyhub2RlLmNhdGNoZXMpOwogIH0KCiAgdm9pZCBoYW5kbGVDYXRjaChpci5DYXRjaCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0Q2F0Y2goaXIuQ2F0Y2ggbm9kZSkgewogICAgaGFuZGxlQ2F0Y2gobm9kZSk7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRUcnlGaW5hbGx5KGlyLlRyeUZpbmFsbHkgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICB2aXNpdE5vZGUobm9kZS5maW5hbGl6ZXIpOwogIH0KCiAgdm9pZCBoYW5kbGVUeXBlTGl0ZXJhbChpci5UeXBlTGl0ZXJhbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFR5cGVMaXRlcmFsKGlyLlR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIGhhbmRsZVR5cGVMaXRlcmFsKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0VHlwZUxpdGVyYWwobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZUxvYWRMaWJyYXJ5KGlyLkxvYWRMaWJyYXJ5IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TG9hZExpYnJhcnkoaXIuTG9hZExpYnJhcnkgbm9kZSkgewogICAgaGFuZGxlTG9hZExpYnJhcnkobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRMb2FkTGlicmFyeShub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlQXNzZXJ0U3RhdGVtZW50KGlyLkFzc2VydFN0YXRlbWVudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0QXNzZXJ0U3RhdGVtZW50KGlyLkFzc2VydFN0YXRlbWVudCBub2RlKSB7CiAgICBUeXBlTWFwIGJlZm9yZUNvbmRpdGlvbiA9IHR5cGVNYXA7CiAgICB2aXNpdE5vZGUobm9kZS5jb25kaXRpb24pOwogICAgVHlwZU1hcCBhZnRlckNvbmRpdGlvbldoZW5UcnVlID0gdHlwZU1hcFdoZW5UcnVlOwogICAgVHlwZU1hcCBhZnRlckNvbmRpdGlvbldoZW5GYWxzZSA9IHR5cGVNYXBXaGVuRmFsc2U7CiAgICB0eXBlTWFwID0gYWZ0ZXJDb25kaXRpb25XaGVuRmFsc2U7CiAgICB2aXNpdE5vZGUobm9kZS5tZXNzYWdlKTsKICAgIGhhbmRsZUFzc2VydFN0YXRlbWVudChub2RlKTsKICAgIHR5cGVNYXAgPSB1c2VBc3NlcnRzID8gYWZ0ZXJDb25kaXRpb25XaGVuVHJ1ZSA6IGJlZm9yZUNvbmRpdGlvbjsKICB9CgogIHZvaWQgaGFuZGxlRnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgVHlwZU1hcCBiZWZvcmVDbG9zdXJlID0KICAgICAgICB0eXBlTWFwLnJlbW92ZSh2YXJpYWJsZVNjb3BlTW9kZWwuZ2V0U2NvcGVGb3Iobm9kZSkuYXNzaWduZWRWYXJpYWJsZXMpOwogICAgdHlwZU1hcCA9IHR5cGVNYXAucmVtb3ZlKHZhcmlhYmxlU2NvcGVNb2RlbC5hc3NpZ25lZFZhcmlhYmxlcyk7CiAgICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gX29sZFZhcmlhYmxlcyA9IF9jdXJyZW50VmFyaWFibGVzOwogICAgX2N1cnJlbnRWYXJpYWJsZXMgPSB7fTsKICAgIHZpc2l0U2lnbmF0dXJlKG5vZGUuZnVuY3Rpb24pOwogICAgdmlzaXROb2RlKG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICBoYW5kbGVGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpOwogICAgX2ludmFsaWRhdGVkVmFyaWFibGVzLnJlbW92ZUFsbChfY3VycmVudFZhcmlhYmxlcyk7CiAgICBfY3VycmVudFZhcmlhYmxlcyA9IF9vbGRWYXJpYWJsZXM7CiAgICB0eXBlTWFwID0gYmVmb3JlQ2xvc3VyZTsKICB9CgogIHZvaWQgaGFuZGxlUGFyYW1ldGVyKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkge30KCiAgdm9pZCB2aXNpdFBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIF9jdXJyZW50VmFyaWFibGVzLmFkZChub2RlKTsKICAgIHZpc2l0Tm9kZShub2RlLmluaXRpYWxpemVyKTsKICAgIGhhbmRsZVBhcmFtZXRlcihub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlU2lnbmF0dXJlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7fQoKICB2b2lkIHZpc2l0U2lnbmF0dXJlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZvckVhY2godmlzaXRQYXJhbWV0ZXIpOwogICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMuZm9yRWFjaCh2aXNpdFBhcmFtZXRlcik7CiAgICBoYW5kbGVTaWduYXR1cmUobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZVByb2NlZHVyZShpci5Qcm9jZWR1cmUgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdFByb2NlZHVyZShpci5Qcm9jZWR1cmUgbm9kZSkgewogICAgdGhpc1R5cGUgPSBuZXcgVGhpc0ludGVyZmFjZVR5cGUuZnJvbShub2RlLmVuY2xvc2luZ0NsYXNzPy50aGlzVHlwZSk7CiAgICBfY3VycmVudFZhcmlhYmxlcyA9IHt9OwogICAgdmlzaXRTaWduYXR1cmUobm9kZS5mdW5jdGlvbik7CiAgICB2aXNpdE5vZGUobm9kZS5mdW5jdGlvbi5ib2R5KTsKICAgIGhhbmRsZVByb2NlZHVyZShub2RlKTsKICAgIF9pbnZhbGlkYXRlZFZhcmlhYmxlcy5yZW1vdmVBbGwoX2N1cnJlbnRWYXJpYWJsZXMpOwogICAgX2N1cnJlbnRWYXJpYWJsZXMgPSBudWxsOwogICAgdGhpc1R5cGUgPSBudWxsOwogIH0KCiAgdm9pZCBoYW5kbGVDb25zdHJ1Y3Rvcihpci5Db25zdHJ1Y3RvciBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0Q29uc3RydWN0b3IoaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgdGhpc1R5cGUgPSBuZXcgVGhpc0ludGVyZmFjZVR5cGUuZnJvbShub2RlLmVuY2xvc2luZ0NsYXNzLnRoaXNUeXBlKTsKICAgIF9jdXJyZW50VmFyaWFibGVzID0ge307CiAgICB2aXNpdFNpZ25hdHVyZShub2RlLmZ1bmN0aW9uKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5pbml0aWFsaXplcnMpOwogICAgdmlzaXROb2RlKG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICBoYW5kbGVDb25zdHJ1Y3Rvcihub2RlKTsKICAgIF9pbnZhbGlkYXRlZFZhcmlhYmxlcy5yZW1vdmVBbGwoX2N1cnJlbnRWYXJpYWJsZXMpOwogICAgX2N1cnJlbnRWYXJpYWJsZXMgPSBudWxsOwogICAgdGhpc1R5cGUgPSBudWxsOwogIH0KCiAgdm9pZCBoYW5kbGVGaWVsZChpci5GaWVsZCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0RmllbGQoaXIuRmllbGQgbm9kZSkgewogICAgdGhpc1R5cGUgPSBuZXcgVGhpc0ludGVyZmFjZVR5cGUuZnJvbShub2RlLmVuY2xvc2luZ0NsYXNzPy50aGlzVHlwZSk7CiAgICBfY3VycmVudFZhcmlhYmxlcyA9IHt9OwogICAgdmlzaXROb2RlKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgaGFuZGxlRmllbGQobm9kZSk7CiAgICBfaW52YWxpZGF0ZWRWYXJpYWJsZXMucmVtb3ZlQWxsKF9jdXJyZW50VmFyaWFibGVzKTsKICAgIF9jdXJyZW50VmFyaWFibGVzID0gbnVsbDsKICAgIHRoaXNUeXBlID0gbnVsbDsKICB9CgogIHZvaWQgaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHt9CgogIHZvaWQgX3Byb2Nlc3NMb2NhbFZhcmlhYmxlKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgX2N1cnJlbnRWYXJpYWJsZXMuYWRkKG5vZGUpOwogICAgaXIuRGFydFR5cGUgdHlwZSA9IHZpc2l0Tm9kZShub2RlLmluaXRpYWxpemVyKTsKICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwgJiYKICAgICAgICB2YXJpYWJsZVNjb3BlTW9kZWwuaXNFZmZlY3RpdmVseUZpbmFsKG5vZGUpICYmCiAgICAgICAgaW5mZXJFZmZlY3RpdmVseUZpbmFsVmFyaWFibGVUeXBlcykgewogICAgICBub2RlLnR5cGUgPSB0eXBlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBfcHJvY2Vzc0xvY2FsVmFyaWFibGUobm9kZSk7CiAgICBoYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpOwogIH0KCiAgdm9pZCBoYW5kbGVDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICBoYW5kbGVDb25zdGFudEV4cHJlc3Npb24obm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRDb25zdGFudEV4cHJlc3Npb24obm9kZSk7CiAgfQp9CgpjbGFzcyBBcmd1bWVudFR5cGVzIHsKICBmaW5hbCBMaXN0PGlyLkRhcnRUeXBlPiBwb3NpdGlvbmFsOwogIGZpbmFsIExpc3Q8aXIuRGFydFR5cGU+IG5hbWVkOwoKICBBcmd1bWVudFR5cGVzKHRoaXMucG9zaXRpb25hbCwgdGhpcy5uYW1lZCk7Cn0KCi8vLyBUeXBlIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBmb3IgYSBzaW5nbGUgcGF0aCBmb3IgYSBsb2NhbCB2YXJpYWJsZS4KLy8vCi8vLyBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IGd1YXJkZWQgdHlwZSBwcm9tb3Rpb24uCi8vLwovLy8gVGhlIHRlcm1pbm9sb2d5IGFuZCBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGlzIHBhcGVyOgovLy8KLy8vICAgaHR0cDovL3d3dy5jcy53aWxsaWFtcy5lZHUvRlRmSlAyMDExLzYtV2ludGhlci5wZGYKLy8vCmNsYXNzIFR5cGVIb2xkZXIgewogIC8vLyBUaGUgZGVjbGFyZWQgdHlwZSBvZiB0aGUgbG9jYWwgdmFyaWFibGUuCiAgZmluYWwgaXIuRGFydFR5cGUgZGVjbGFyZWRUeXBlOwoKICAvLy8gVGhlIHR5cGVzIHRoYXQgdGhlIGxvY2FsIHZhcmlhYmxlIGlzIGtub3duIHRvIGJlIGFuIGluc3RhbmNlIG9mLgogIGZpbmFsIFNldDxpci5EYXJ0VHlwZT4gdHJ1ZVR5cGVzOwoKICAvLy8gVGhlIHR5cGVzIHRoYXQgdGhlIGxvY2FsIHZhcmlhYmxlIGlzIGtub3duIF9ub3RfIHRvIGJlIGFuIGluc3RhbmNlIG9mLgogIGZpbmFsIFNldDxpci5EYXJ0VHlwZT4gZmFsc2VUeXBlczsKCiAgaW50IF9oYXNoQ29kZTsKCiAgVHlwZUhvbGRlcih0aGlzLmRlY2xhcmVkVHlwZSwgdGhpcy50cnVlVHlwZXMsIHRoaXMuZmFsc2VUeXBlcyk7CgogIC8vLyBDb21wdXRlcyBhIHNpbmdsZSB0eXBlIHRoYXQgc291bmRseSByZXByZXNlbnRzIHRoZSBwcm9tb3RlZCB0eXBlIG9mIHRoZQogIC8vLyBsb2NhbCB2YXJpYWJsZSBvbiB0aGlzIHNpbmdsZSBwYXRoLgogIGlyLkRhcnRUeXBlIHR5cGVPZihpci5UeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBpci5EYXJ0VHlwZSBjYW5kaWRhdGUgPSBkZWNsYXJlZFR5cGU7CiAgICBpZiAoZmFsc2VUeXBlcyAhPSBudWxsKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNwZWNpYWwtY2FzZSB0aGUgYD09IG51bGxgIHJlcHJlc2VudGF0aW9uIHRvCiAgICAgIC8vIG1ha2UgaXQgZmFzdGVyLgogICAgICBmb3IgKGlyLkRhcnRUeXBlIHR5cGUgaW4gZmFsc2VUeXBlcykgewogICAgICAgIGlmICh0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoZGVjbGFyZWRUeXBlLCB0eXBlKSkgewogICAgICAgICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5udWxsVHlwZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICh0cnVlVHlwZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLkRhcnRUeXBlIHR5cGUgaW4gdHJ1ZVR5cGVzKSB7CiAgICAgICAgaWYgKHR5cGUgPT0gdHlwZUVudmlyb25tZW50Lm51bGxUeXBlKSB7CiAgICAgICAgICByZXR1cm4gdHlwZTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZih0eXBlLCBjYW5kaWRhdGUpKSB7CiAgICAgICAgICBjYW5kaWRhdGUgPSB0eXBlOwogICAgICAgIH0gZWxzZSBpZiAoIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihjYW5kaWRhdGUsIHR5cGUpKSB7CiAgICAgICAgICAvLyBXZSBjYW5ub3QgcHJvbW90ZS4gTm8gc2luZ2xlIHR5cGUgaXMgbW9zdCBzcGVjaWZpYy4KICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENvbXB1dGUgaW1wbGllZCB0eXBlcz8gRm9yIGluc3RhbmNlIHdoZW4gdGhlCiAgICAgICAgICAvLyBkZWNsYXJlZCB0eXBlIGlzIGBJdGVyYWJsZTxTdHJpbmc+YCBhbmQgdGVzdGVkIHR5cGUgaXMKICAgICAgICAgIC8vIGBMaXN0PGR5bmFtaWM+YCB3ZSBjb3VsZCBwcm9tb3RlIHRvIHRoZSBpbXBsaWVkIHR5cGUKICAgICAgICAgIC8vIGBMaXN0PFN0cmluZz5gLgogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2FuZGlkYXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpZiAoX2hhc2hDb2RlID09IG51bGwpIHsKICAgICAgX2hhc2hDb2RlID0gSGFzaGluZy5zZXRIYXNoKGZhbHNlVHlwZXMsCiAgICAgICAgICBIYXNoaW5nLnNldEhhc2godHJ1ZVR5cGVzLCBIYXNoaW5nLm9iamVjdEhhc2goZGVjbGFyZWRUeXBlKSkpOwogICAgfQogICAgcmV0dXJuIF9oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBUeXBlSG9sZGVyICYmCiAgICAgICAgZGVjbGFyZWRUeXBlID09IG90aGVyLmRlY2xhcmVkVHlwZSAmJgogICAgICAgIGVxdWFsU2V0cyh0cnVlVHlwZXMsIG90aGVyLnRydWVUeXBlcykgJiYKICAgICAgICBlcXVhbFNldHMoZmFsc2VUeXBlcywgb3RoZXIuZmFsc2VUeXBlcyk7CiAgfQoKICB2b2lkIF9nZXRUZXh0KAogICAgICBTdHJpbmdCdWZmZXIgc2IsIFN0cmluZyBGdW5jdGlvbihJdGVyYWJsZTxpci5EYXJ0VHlwZT4pIHR5cGVzVG9UZXh0KSB7CiAgICBzYi53cml0ZSgneycpOwogICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICBpZiAodHJ1ZVR5cGVzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ3RydWU6Jyk7CiAgICAgIHNiLndyaXRlKHR5cGVzVG9UZXh0KHRydWVUeXBlcykpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChmYWxzZVR5cGVzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnZmFsc2U6Jyk7CiAgICAgIHNiLndyaXRlKHR5cGVzVG9UZXh0KGZhbHNlVHlwZXMpKTsKICAgIH0KICAgIHNiLndyaXRlKCd9Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnVHlwZUhvbGRlcignKTsKICAgIHNiLndyaXRlKCdkZWNsYXJlZD0kZGVjbGFyZWRUeXBlJyk7CiAgICBpZiAodHJ1ZVR5cGVzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJyx0cnVlPSR0cnVlVHlwZXMnKTsKICAgIH0KICAgIGlmIChmYWxzZVR5cGVzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJyxmYWxzZT0kZmFsc2VUeXBlcycpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIFR5cGUgaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIGxvY2FsIHZhcmlhYmxlIG9uIGFsbCBwb3NzaWJsZSBwYXRocy4KLy8vCi8vLyBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IGd1YXJkZWQgdHlwZSBwcm9tb3Rpb24uCi8vLwovLy8gVGhlIHRlcm1pbm9sb2d5IGFuZCBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGlzIHBhcGVyOgovLy8KLy8vICAgaHR0cDovL3d3dy5jcy53aWxsaWFtcy5lZHUvRlRmSlAyMDExLzYtV2ludGhlci5wZGYKLy8vCmNsYXNzIFRhcmdldEluZm8gewogIC8vLyBUaGUgZGVjbGFyZWQgdHlwZSBvZiB0aGUgbG9jYWwgdmFyaWFibGUuCiAgZmluYWwgaXIuRGFydFR5cGUgZGVjbGFyZWRUeXBlOwoKICAvLy8gQ29sbGVjdGVkIHR5cGUgaW5mb3JtYXRpb24gZm9yIGRpc2pvaW50IHBhdGhzLgogIGZpbmFsIEl0ZXJhYmxlPFR5cGVIb2xkZXI+IHR5cGVIb2xkZXJzOwoKICAvLy8gVHlwZXMgcmVsZXZhbnQgZm9yIHByb21vdGlvbiBvZiB0aGUgbG9jYWwgdmFyaWFibGUuCiAgZmluYWwgSXRlcmFibGU8aXIuRGFydFR5cGU+IHR5cGVzT2ZJbnRlcmVzdDsKCiAgVGFyZ2V0SW5mbyh0aGlzLmRlY2xhcmVkVHlwZSwgdGhpcy50eXBlSG9sZGVycywgdGhpcy50eXBlc09mSW50ZXJlc3QpOwoKICAvLy8gUmV0dXJucyB0aGUgW1RhcmdldEluZm9dIHRoYXQgZGVzY3JpYmVzIHRoZSBhZGRlZCB0eXBlIGtub3dsZWRnZSBmb3IgdGhlCiAgLy8vIGxvY2FsIHZhcmlhYmxlLiBJZiBbaXNUcnVlXSBpcyBgdHJ1ZWAsIHRoZSBsb2NhbCB2YXJpYWJsZSBpcyBrbm93biB0bwogIC8vLyBiZSBhbiBpbnN0YW5jZSBvZiBbdHlwZV0uIElmIFtpc1RydWVdIGlzIGBmYWxzZWAsIHRoZSBsb2NhbCB2YXJpYWJsZSBpcwogIC8vLyBrbm93biBfbm90XyB0byBiZSBhbiBpbnN0YW5jZSBvZiBbdHlwZV0uCiAgVGFyZ2V0SW5mbyBwcm9tb3RlKGlyLkRhcnRUeXBlIHR5cGUsIHtib29sIGlzVHJ1ZX0pIHsKICAgIFNldDxUeXBlSG9sZGVyPiBuZXdUeXBlSG9sZGVycyA9IG5ldyBTZXQ8VHlwZUhvbGRlcj4oKTsKCiAgICBib29sIGFkZFR5cGVIb2xkZXIoVHlwZUhvbGRlciB0eXBlSG9sZGVyKSB7CiAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwoKICAgICAgU2V0PGlyLkRhcnRUeXBlPiBhZGRBc0NvcHkoU2V0PGlyLkRhcnRUeXBlPiBzZXQsIGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgICAgICBTZXQ8aXIuRGFydFR5cGU+IHJlc3VsdDsKICAgICAgICBpZiAoc2V0ID09IG51bGwpIHsKICAgICAgICAgIHJlc3VsdCA9IG5ldyBTZXQ8aXIuRGFydFR5cGU+KCk7CiAgICAgICAgfSBlbHNlIGlmIChzZXQuY29udGFpbnModHlwZSkpIHsKICAgICAgICAgIHJldHVybiBzZXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IFNldDxpci5EYXJ0VHlwZT4uZnJvbShzZXQpOwogICAgICAgIH0KICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICByZXR1cm4gcmVzdWx0Li5hZGQodHlwZSk7CiAgICAgIH0KCiAgICAgIFNldDxpci5EYXJ0VHlwZT4gdHJ1ZVR5cGVzID0gdHlwZUhvbGRlcj8udHJ1ZVR5cGVzOwogICAgICBTZXQ8aXIuRGFydFR5cGU+IGZhbHNlVHlwZXMgPSB0eXBlSG9sZGVyPy5mYWxzZVR5cGVzOwogICAgICBpZiAoaXNUcnVlKSB7CiAgICAgICAgdHJ1ZVR5cGVzID0gYWRkQXNDb3B5KHRydWVUeXBlcywgdHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmFsc2VUeXBlcyA9IGFkZEFzQ29weShmYWxzZVR5cGVzLCB0eXBlKTsKICAgICAgfQogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGVjayB2YWxpZGl0eTsgaWYgdGhlIHRydWUgdHlwZXMgYXJlCiAgICAgIC8vIGNvbnRyYWRpY3RpbmcsIGZvciBpbnN0YW5jZSBpZiB0aGUgbG9jYWwgaXMga25vd24gdG8gYmUgYW5kIGluc3RhbmNlCiAgICAgIC8vIG9mIHR5cGVzIGBpbnRgIGFuZCBgU3RyaW5nYCBzaW11bHRhbmVvdXNseSwgdGhlbiB3ZSBjb3VsZCBmbGFnIGNvZGUKICAgICAgLy8gYXMgZGVhZCBjb2RlLgogICAgICBuZXdUeXBlSG9sZGVycy5hZGQoVHlwZUhvbGRlcihkZWNsYXJlZFR5cGUsIHRydWVUeXBlcywgZmFsc2VUeXBlcykpOwogICAgICByZXR1cm4gY2hhbmdlZDsKICAgIH0KCiAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgIGlmICh0eXBlSG9sZGVycy5pc0VtcHR5KSB7CiAgICAgIGNoYW5nZWQgfD0gYWRkVHlwZUhvbGRlcihudWxsKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoVHlwZUhvbGRlciB0eXBlSG9sZGVyIGluIHR5cGVIb2xkZXJzKSB7CiAgICAgICAgY2hhbmdlZCB8PSBhZGRUeXBlSG9sZGVyKHR5cGVIb2xkZXIpOwogICAgICB9CiAgICB9CiAgICBJdGVyYWJsZTxpci5EYXJ0VHlwZT4gbmV3VHlwZXNPZkludGVyZXN0OwogICAgaWYgKHR5cGVzT2ZJbnRlcmVzdC5jb250YWlucyh0eXBlKSkgewogICAgICBuZXdUeXBlc09mSW50ZXJlc3QgPSB0eXBlc09mSW50ZXJlc3Q7CiAgICB9IGVsc2UgewogICAgICBuZXdUeXBlc09mSW50ZXJlc3QgPSBuZXcgU2V0PGlyLkRhcnRUeXBlPi5mcm9tKHR5cGVzT2ZJbnRlcmVzdCkKICAgICAgICAuLmFkZCh0eXBlKTsKICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gY2hhbmdlZAogICAgICAgID8gbmV3IFRhcmdldEluZm8oZGVjbGFyZWRUeXBlLCBuZXdUeXBlSG9sZGVycywgbmV3VHlwZXNPZkludGVyZXN0KQogICAgICAgIDogdGhpczsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbVGFyZ2V0SW5mb10gdGhhdCBkZXNjcmliZXMgdGhhdCB0aGUgbG9jYWwgaXMgZWl0aGVyIG9mIFt0aGlzXQogIC8vLyBvciB0aGUgW290aGVyXSB0eXBlLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGUgam9pbiBpcyBlbXB0eS4KICBUYXJnZXRJbmZvIGpvaW4oVGFyZ2V0SW5mbyBvdGhlcikgewogICAgaWYgKG90aGVyID09IG51bGwpIHJldHVybiBudWxsOwogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0aGlzOwoKICAgIFNldDxUeXBlSG9sZGVyPiBuZXdUeXBlSG9sZGVycyA9IG5ldyBTZXQ8VHlwZUhvbGRlcj4oKTsKICAgIFNldDxpci5EYXJ0VHlwZT4gbmV3VHlwZXNPZkludGVyZXN0ID0gbmV3IFNldDxpci5EYXJ0VHlwZT4oKTsKCiAgICAvLy8gQWRkcyB0aGUgW3R5cGVIb2xkZXJzXSB0byBbbmV3VHlwZUhvbGRlcnNdIGZvciB0eXBlcyBpbgogICAgLy8vIFtvdGhlclR5cGVzT2ZJbnRlcmVzdF0gd2hpbGUgcmVtb3ZpbmcgdGhlIGluZm9ybWF0aW9uCiAgICAvLy8gaW52YWxpZGF0ZWQgYnkgW290aGVyVHJ1ZVR5cGVzXSBhbmQgW290aGVyRmFsc2VUeXBlc10uCiAgICB2b2lkIGFkZFR5cGVIb2xkZXJzKAogICAgICAgIEl0ZXJhYmxlPFR5cGVIb2xkZXI+IHR5cGVIb2xkZXJzLAogICAgICAgIFNldDxpci5EYXJ0VHlwZT4gb3RoZXJUcnVlVHlwZXMsCiAgICAgICAgU2V0PGlyLkRhcnRUeXBlPiBvdGhlckZhbHNlVHlwZXMsCiAgICAgICAgSXRlcmFibGU8aXIuRGFydFR5cGU+IG90aGVyVHlwZXNPZkludGVyZXN0KSB7CiAgICAgIGZvciAoVHlwZUhvbGRlciB0eXBlSG9sZGVyIGluIHR5cGVIb2xkZXJzKSB7CiAgICAgICAgU2V0PGlyLkRhcnRUeXBlPiBuZXdUcnVlVHlwZXM7CiAgICAgICAgaWYgKHR5cGVIb2xkZXIudHJ1ZVR5cGVzICE9IG51bGwpIHsKICAgICAgICAgIG5ld1RydWVUeXBlcyA9IG5ldyBTZXQ8aXIuRGFydFR5cGU+LmZyb20odHlwZUhvbGRlci50cnVlVHlwZXMpOwoKICAgICAgICAgIC8vLyBPbmx5IHR5cGVzIGluIFtvdGhlclR5cGVzT2ZJbnRlcmVzdF0gaGFzIGluZm9ybWF0aW9uIGZyb20gYWxsCiAgICAgICAgICAvLy8gcGF0aHMuCiAgICAgICAgICBuZXdUcnVlVHlwZXMucmV0YWluQWxsKG90aGVyVHlwZXNPZkludGVyZXN0KTsKCiAgICAgICAgICAvLy8gUmVtb3ZlIHR5cGVzIHRoYXQgYXJlIGtub3duIHRvIGJlIGZhbHNlIG9uIG90aGVyIHBhdGhzOyB0aGVzZQogICAgICAgICAgLy8vIHdvdWxkIGFtb3VudCB0byBrbm93aW5nIHRoYXQgYSB2YXJpYWJsZSBpcyBvciBpcyBub3Qgb2Ygc29tZQogICAgICAgICAgLy8vIHR5cGUuCiAgICAgICAgICBuZXdUcnVlVHlwZXMucmVtb3ZlQWxsKG90aGVyRmFsc2VUeXBlcyk7CiAgICAgICAgICBpZiAobmV3VHJ1ZVR5cGVzLmlzRW1wdHkpIHsKICAgICAgICAgICAgbmV3VHJ1ZVR5cGVzID0gbnVsbDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld1R5cGVzT2ZJbnRlcmVzdC5hZGRBbGwobmV3VHJ1ZVR5cGVzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgU2V0PGlyLkRhcnRUeXBlPiBuZXdGYWxzZVR5cGVzOwogICAgICAgIGlmICh0eXBlSG9sZGVyLmZhbHNlVHlwZXMgIT0gbnVsbCkgewogICAgICAgICAgbmV3RmFsc2VUeXBlcyA9IG5ldyBTZXQ8aXIuRGFydFR5cGU+LmZyb20odHlwZUhvbGRlci5mYWxzZVR5cGVzKTsKCiAgICAgICAgICAvLy8gT25seSB0eXBlcyBpbiBbb3RoZXJUeXBlc09mSW50ZXJlc3RdIGhhcyBpbmZvcm1hdGlvbiBmcm9tIGFsbAogICAgICAgICAgLy8vIHBhdGhzLgogICAgICAgICAgbmV3RmFsc2VUeXBlcy5yZXRhaW5BbGwob3RoZXJUeXBlc09mSW50ZXJlc3QpOwoKICAgICAgICAgIC8vLyBSZW1vdmUgdHlwZXMgdGhhdCBhcmUga25vd24gdG8gYmUgdHJ1ZSBvbiBvdGhlciBwYXRoczsgdGhlc2UKICAgICAgICAgIC8vLyB3b3VsZCBhbW91bnQgdG8ga25vd2luZyB0aGF0IGEgdmFyaWFibGUgaXMgb3IgaXMgbm90IG9mIHNvbWUKICAgICAgICAgIC8vLyB0eXBlLgogICAgICAgICAgbmV3RmFsc2VUeXBlcy5yZW1vdmVBbGwob3RoZXJUcnVlVHlwZXMpOwogICAgICAgICAgaWYgKG5ld0ZhbHNlVHlwZXMuaXNFbXB0eSkgewogICAgICAgICAgICBuZXdGYWxzZVR5cGVzID0gbnVsbDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld1R5cGVzT2ZJbnRlcmVzdC5hZGRBbGwobmV3RmFsc2VUeXBlcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChuZXdUcnVlVHlwZXMgIT0gbnVsbCB8fCBuZXdGYWxzZVR5cGVzICE9IG51bGwpIHsKICAgICAgICAgIC8vIE9ubHkgaW5jbHVkZSB0eXBlIGhvbGRlcnMgd2l0aCBpbmZvcm1hdGlvbi4KICAgICAgICAgIG5ld1R5cGVIb2xkZXJzCiAgICAgICAgICAgICAgLmFkZChuZXcgVHlwZUhvbGRlcihkZWNsYXJlZFR5cGUsIG5ld1RydWVUeXBlcywgbmV3RmFsc2VUeXBlcykpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIFNldDxpci5EYXJ0VHlwZT4gdGhpc1RydWVUeXBlcyA9IG5ldyBTZXQ8aXIuRGFydFR5cGU+KCk7CiAgICBTZXQ8aXIuRGFydFR5cGU+IHRoaXNGYWxzZVR5cGVzID0gbmV3IFNldDxpci5EYXJ0VHlwZT4oKTsKICAgIGZvciAoVHlwZUhvbGRlciB0eXBlSG9sZGVyIGluIHR5cGVIb2xkZXJzKSB7CiAgICAgIGlmICh0eXBlSG9sZGVyLnRydWVUeXBlcyAhPSBudWxsKSB7CiAgICAgICAgdGhpc1RydWVUeXBlcy5hZGRBbGwodHlwZUhvbGRlci50cnVlVHlwZXMpOwogICAgICB9CiAgICAgIGlmICh0eXBlSG9sZGVyLmZhbHNlVHlwZXMgIT0gbnVsbCkgewogICAgICAgIHRoaXNGYWxzZVR5cGVzLmFkZEFsbCh0eXBlSG9sZGVyLmZhbHNlVHlwZXMpOwogICAgICB9CiAgICB9CgogICAgU2V0PGlyLkRhcnRUeXBlPiBvdGhlclRydWVUeXBlcyA9IG5ldyBTZXQ8aXIuRGFydFR5cGU+KCk7CiAgICBTZXQ8aXIuRGFydFR5cGU+IG90aGVyRmFsc2VUeXBlcyA9IG5ldyBTZXQ8aXIuRGFydFR5cGU+KCk7CiAgICBmb3IgKFR5cGVIb2xkZXIgdHlwZUhvbGRlciBpbiBvdGhlci50eXBlSG9sZGVycykgewogICAgICBpZiAodHlwZUhvbGRlci50cnVlVHlwZXMgIT0gbnVsbCkgewogICAgICAgIG90aGVyVHJ1ZVR5cGVzLmFkZEFsbCh0eXBlSG9sZGVyLnRydWVUeXBlcyk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVIb2xkZXIuZmFsc2VUeXBlcyAhPSBudWxsKSB7CiAgICAgICAgb3RoZXJGYWxzZVR5cGVzLmFkZEFsbCh0eXBlSG9sZGVyLmZhbHNlVHlwZXMpOwogICAgICB9CiAgICB9CgogICAgYWRkVHlwZUhvbGRlcnModGhpcy50eXBlSG9sZGVycywgb3RoZXJUcnVlVHlwZXMsIG90aGVyRmFsc2VUeXBlcywKICAgICAgICBvdGhlci50eXBlc09mSW50ZXJlc3QpOwogICAgYWRkVHlwZUhvbGRlcnMoCiAgICAgICAgb3RoZXIudHlwZUhvbGRlcnMsIHRoaXNUcnVlVHlwZXMsIHRoaXNGYWxzZVR5cGVzLCB0aGlzLnR5cGVzT2ZJbnRlcmVzdCk7CgogICAgaWYgKG5ld1R5cGVIb2xkZXJzLmlzRW1wdHkpIHsKICAgICAgYXNzZXJ0KG5ld1R5cGVzT2ZJbnRlcmVzdC5pc0VtcHR5KTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcmV0dXJuIG5ldyBUYXJnZXRJbmZvKGRlY2xhcmVkVHlwZSwgbmV3VHlwZUhvbGRlcnMsIG5ld1R5cGVzT2ZJbnRlcmVzdCk7CiAgfQoKICAvLy8gQ29tcHV0ZXMgYSBzaW5nbGUgdHlwZSB0aGF0IHNvdW5kbHkgcmVwcmVzZW50cyB0aGUgcHJvbW90ZWQgdHlwZSBvZiB0aGUKICAvLy8gbG9jYWwgdmFyaWFibGUgb24gYWxsIHBvc3NpYmxlIHBhdGhzLgogIGlyLkRhcnRUeXBlIHR5cGVPZihpci5UeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBpci5EYXJ0VHlwZSBjYW5kaWRhdGUgPSBudWxsOwogICAgZm9yIChUeXBlSG9sZGVyIHR5cGVIb2xkZXIgaW4gdHlwZUhvbGRlcnMpIHsKICAgICAgaXIuRGFydFR5cGUgdHlwZSA9IHR5cGVIb2xkZXIudHlwZU9mKHR5cGVFbnZpcm9ubWVudCk7CiAgICAgIGlmICh0eXBlID09IG51bGwpIHsKICAgICAgICAvLyBXZSBjYW5ub3QgcHJvbW90ZS4gTm8gc2luZ2xlIHR5cGUgaXMgbW9zdCBzcGVjaWZpYy4KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAoY2FuZGlkYXRlID09IG51bGwpIHsKICAgICAgICBjYW5kaWRhdGUgPSB0eXBlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICh0eXBlID09IHR5cGVFbnZpcm9ubWVudC5udWxsVHlwZSkgewogICAgICAgICAgLy8gS2VlcCB0aGUgY3VycmVudCBjYW5kaWRhdGUuCiAgICAgICAgfSBlbHNlIGlmIChjYW5kaWRhdGUgPT0gdHlwZUVudmlyb25tZW50Lm51bGxUeXBlKSB7CiAgICAgICAgICBjYW5kaWRhdGUgPSB0eXBlOwogICAgICAgIH0gZWxzZSBpZiAodHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKGNhbmRpZGF0ZSwgdHlwZSkpIHsKICAgICAgICAgIGNhbmRpZGF0ZSA9IHR5cGU7CiAgICAgICAgfSBlbHNlIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKHR5cGUsIGNhbmRpZGF0ZSkpIHsKICAgICAgICAgIC8vIFdlIGNhbm5vdCBwcm9tb3RlLiBObyBwcm9tb3RlZCB0eXBlIG9mIG9uZSBwYXRoIGlzIGEgc3VwZXJ0eXBlIG9mCiAgICAgICAgICAvLyB0aGUgcHJvbW90ZWQgdHlwZSBmcm9tIGFsbCBvdGhlciBwYXRocy4KICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENvbXB1dGUgYSBncmVhdGVzdCBsb3dlciBib3VuZCwgaW5zdGVhZD8KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGNhbmRpZGF0ZTsKICB9CgogIHZvaWQgX2dldFRleHQoCiAgICAgIFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIEZ1bmN0aW9uKEl0ZXJhYmxlPGlyLkRhcnRUeXBlPikgdHlwZXNUb1RleHQpIHsKICAgIHNiLndyaXRlKCdbJyk7CiAgICBTdHJpbmcgY29tbWEgPSAnJzsKICAgIGZvciAoVHlwZUhvbGRlciB0eXBlSG9sZGVyIGluIHR5cGVIb2xkZXJzKSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgdHlwZUhvbGRlci5fZ2V0VGV4dChzYiwgdHlwZXNUb1RleHQpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIHNiLndyaXRlKCd8Jyk7CiAgICBzYi53cml0ZSh0eXBlc1RvVGV4dCh0eXBlc09mSW50ZXJlc3QpKTsKICAgIHNiLndyaXRlKCddJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnVGFyZ2V0SW5mbygnKTsKICAgIHNiLndyaXRlKCdkZWNsYXJlZFR5cGU9JGRlY2xhcmVkVHlwZSwnKTsKICAgIHNiLndyaXRlKCd0eXBlSG9sZGVycz0kdHlwZUhvbGRlcnMsJyk7CiAgICBzYi53cml0ZSgnZGVjbGFyYXRpb25zT2ZJbnRlcmVzdD0kdHlwZXNPZkludGVyZXN0Jyk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gTWFwIGZyb20gbG9jYWwgdmFyaWFibGVzIHRvIHR5cGUgaW5mb3JtYXRpb24gdXNlZCBmb3IgZ3VhcmRlZCB0eXBlCi8vLyBwcm9tb3Rpb24uCi8vLwovLy8gVGhlIHRlcm1pbm9sb2d5IGFuZCBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGlzIHBhcGVyOgovLy8KLy8vICAgaHR0cDovL3d3dy5jcy53aWxsaWFtcy5lZHUvRlRmSlAyMDExLzYtV2ludGhlci5wZGYKLy8vCmNsYXNzIFR5cGVNYXAgewogIGZpbmFsIE1hcDxpci5WYXJpYWJsZURlY2xhcmF0aW9uLCBUYXJnZXRJbmZvPiBfdGFyZ2V0SW5mb01hcDsKCiAgY29uc3QgVHlwZU1hcChbdGhpcy5fdGFyZ2V0SW5mb01hcCA9IGNvbnN0IHt9XSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbVHlwZU1hcF0gdGhhdCBkZXNjcmliZXMgdGhlIGFkZGVkIHR5cGUga25vd2xlZGdlIGZvciB0aGUKICAvLy8gbG9jYWwgW3ZhcmlhYmxlXS4gSWYgW2lzVHJ1ZV0gaXMgYHRydWVgLCB0aGUgbG9jYWwgW3ZhcmlhYmxlXSBpcyBrbm93biB0bwogIC8vLyBiZSBhbiBpbnN0YW5jZSBvZiBbdHlwZV0uIElmIFtpc1RydWVdIGlzIGBmYWxzZWAsIHRoZSBsb2NhbCBbdmFyaWFibGVdIGlzCiAgLy8vIGtub3duIF9ub3RfIHRvIGJlIGFuIGluc3RhbmNlIG9mIFt0eXBlXS4KICBUeXBlTWFwIHByb21vdGUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgaXIuRGFydFR5cGUgdHlwZSwKICAgICAge2Jvb2wgaXNUcnVlfSkgewogICAgTWFwPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIFRhcmdldEluZm8+IG5ld0luZm9NYXAgPQogICAgICAgIG5ldyBNYXA8aXIuVmFyaWFibGVEZWNsYXJhdGlvbiwgVGFyZ2V0SW5mbz4uZnJvbShfdGFyZ2V0SW5mb01hcCk7CiAgICBUYXJnZXRJbmZvIHRhcmdldEluZm8gPSBuZXdJbmZvTWFwW3ZhcmlhYmxlXTsKICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgaWYgKHRhcmdldEluZm8gIT0gbnVsbCkgewogICAgICBUYXJnZXRJbmZvIHJlc3VsdCA9IHRhcmdldEluZm8ucHJvbW90ZSh0eXBlLCBpc1RydWU6IGlzVHJ1ZSk7CiAgICAgIGNoYW5nZWQgPSAhaWRlbnRpY2FsKHRhcmdldEluZm8sIHJlc3VsdCk7CiAgICAgIHRhcmdldEluZm8gPSByZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgU2V0PGlyLkRhcnRUeXBlPiB0cnVlVHlwZXMgPQogICAgICAgICAgaXNUcnVlID8gKG5ldyBTZXQ8aXIuRGFydFR5cGU+KCkuLmFkZCh0eXBlKSkgOiBudWxsOwogICAgICBTZXQ8aXIuRGFydFR5cGU+IGZhbHNlVHlwZXMgPQogICAgICAgICAgaXNUcnVlID8gbnVsbCA6IChuZXcgU2V0PGlyLkRhcnRUeXBlPigpLi5hZGQodHlwZSkpOwogICAgICBUeXBlSG9sZGVyIHR5cGVIb2xkZXIgPQogICAgICAgICAgbmV3IFR5cGVIb2xkZXIodmFyaWFibGUudHlwZSwgdHJ1ZVR5cGVzLCBmYWxzZVR5cGVzKTsKICAgICAgdGFyZ2V0SW5mbyA9IG5ldyBUYXJnZXRJbmZvKAogICAgICAgICAgdmFyaWFibGUudHlwZSwgPFR5cGVIb2xkZXI+W3R5cGVIb2xkZXJdLCA8aXIuRGFydFR5cGU+W3R5cGVdKTsKICAgIH0KICAgIG5ld0luZm9NYXBbdmFyaWFibGVdID0gdGFyZ2V0SW5mbzsKICAgIHJldHVybiBjaGFuZ2VkID8gbmV3IFR5cGVNYXAobmV3SW5mb01hcCkgOiB0aGlzOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlTWFwXSB0aGF0IGRlc2NyaWJlcyB0aGF0IHRoZSBsb2NhbHMgYXJlIGVpdGhlciBvZiBbdGhpc10KICAvLy8gb3IgdGhlIFtvdGhlcl0gdHlwZXMuCiAgVHlwZU1hcCBqb2luKFR5cGVNYXAgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdGhpczsKCiAgICBNYXA8aXIuVmFyaWFibGVEZWNsYXJhdGlvbiwgVGFyZ2V0SW5mbz4gbmV3SW5mb01hcCA9IHt9OwogICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICBfdGFyZ2V0SW5mb01hcC5mb3JFYWNoKChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBUYXJnZXRJbmZvIGluZm8pIHsKICAgICAgVGFyZ2V0SW5mbyByZXN1bHQgPSBpbmZvLmpvaW4ob3RoZXIuX3RhcmdldEluZm9NYXBbdmFyaWFibGVdKTsKICAgICAgY2hhbmdlZCB8PSAhaWRlbnRpY2FsKGluZm8sIHJlc3VsdCk7CiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICAgIC8vIEFkZCBvbmx5IG5vbi1lbXB0eSBpbmZvcm1hdGlvbi4KICAgICAgICBuZXdJbmZvTWFwW3ZhcmlhYmxlXSA9IHJlc3VsdDsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gY2hhbmdlZCA/IG5ldyBUeXBlTWFwKG5ld0luZm9NYXApIDogdGhpczsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbVHlwZU1hcF0gaW4gd2hpY2ggYWxsIHR5cGUgaW5mb3JtYXRpb24gZm9yIGFueSBvZiB0aGUKICAvLy8gW3ZhcmlhYmxlc10gaGFzIGJlZW4gcmVtb3ZlZC4KICBUeXBlTWFwIHJlbW92ZShJdGVyYWJsZTxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMpIHsKICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgTWFwPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIFRhcmdldEluZm8+IG5ld0luZm9NYXAgPSB7fTsKICAgIF90YXJnZXRJbmZvTWFwLmZvckVhY2goKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIFRhcmdldEluZm8gaW5mbykgewogICAgICBpZiAoIXZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpIHsKICAgICAgICBuZXdJbmZvTWFwW3ZhcmlhYmxlXSA9IGluZm87CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGNoYW5nZWQgPyBuZXcgVHlwZU1hcChuZXdJbmZvTWFwKSA6IHRoaXM7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW1R5cGVNYXBdIHdoZXJlIHR5cGUgaW5mb3JtYXRpb24gZm9yIGBub2RlLnZhcmlhYmxlYCBpcwogIC8vLyByZWR1Y2VkIHRvIHRoZSBwcm9tb3Rpb25zIHVwaGVsZCBieSBhbiBhc3NpZ25tZW50IHRvIGBub2RlLnZhcmlhYmxlYCBvZgogIC8vLyB0aGUgc3RhdGljIFt0eXBlXS4KICBUeXBlTWFwIHJlZHVjZShpci5WYXJpYWJsZVNldCBub2RlLCBpci5EYXJ0VHlwZSB0eXBlLAogICAgICBpci5UeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBNYXA8aXIuVmFyaWFibGVEZWNsYXJhdGlvbiwgVGFyZ2V0SW5mbz4gbmV3SW5mb01hcCA9IHt9OwogICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICBfdGFyZ2V0SW5mb01hcC5mb3JFYWNoKChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBUYXJnZXRJbmZvIGluZm8pIHsKICAgICAgaWYgKHZhcmlhYmxlICE9IG5vZGUudmFyaWFibGUpIHsKICAgICAgICBuZXdJbmZvTWFwW3ZhcmlhYmxlXSA9IGluZm87CiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgU2V0PGlyLkRhcnRUeXBlPiBuZXdUeXBlc09mSW50ZXJlc3QgPSBuZXcgU2V0PGlyLkRhcnRUeXBlPigpOwogICAgICAgIGZvciAoaXIuRGFydFR5cGUgdHlwZU9mSW50ZXJlc3QgaW4gaW5mby50eXBlc09mSW50ZXJlc3QpIHsKICAgICAgICAgIGlmICh0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YodHlwZSwgdHlwZU9mSW50ZXJlc3QpKSB7CiAgICAgICAgICAgIG5ld1R5cGVzT2ZJbnRlcmVzdC5hZGQodHlwZU9mSW50ZXJlc3QpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobmV3VHlwZXNPZkludGVyZXN0LmlzTm90RW1wdHkpIHsKICAgICAgICAgIFR5cGVIb2xkZXIgdHlwZUhvbGRlcklmTm9uTnVsbCA9CiAgICAgICAgICAgICAgbmV3IFR5cGVIb2xkZXIoaW5mby5kZWNsYXJlZFR5cGUsIG5ld1R5cGVzT2ZJbnRlcmVzdCwgbnVsbCk7CiAgICAgICAgICBUeXBlSG9sZGVyIHR5cGVIb2xkZXJJZk51bGwgPSBuZXcgVHlwZUhvbGRlcihpbmZvLmRlY2xhcmVkVHlwZSwgbnVsbCwKICAgICAgICAgICAgICBuZXcgU2V0PGlyLkRhcnRUeXBlPigpLi5hZGQoaW5mby5kZWNsYXJlZFR5cGUpKTsKICAgICAgICAgIG5ld0luZm9NYXBbdmFyaWFibGVdID0gbmV3IFRhcmdldEluZm8oCiAgICAgICAgICAgICAgaW5mby5kZWNsYXJlZFR5cGUsCiAgICAgICAgICAgICAgPFR5cGVIb2xkZXI+W3R5cGVIb2xkZXJJZk5vbk51bGwsIHR5cGVIb2xkZXJJZk51bGxdLAogICAgICAgICAgICAgIG5ld1R5cGVzT2ZJbnRlcmVzdCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBjaGFuZ2VkID8gbmV3IFR5cGVNYXAobmV3SW5mb01hcCkgOiB0aGlzOwogIH0KCiAgLy8vIENvbXB1dGVzIGEgc2luZ2xlIHR5cGUgdGhhdCBzb3VuZGx5IHJlcHJlc2VudHMgdGhlIHByb21vdGVkIHR5cGUgb2YKICAvLy8gYG5vZGUudmFyaWFibGVgIG9uIGFsbCBwb3NzaWJsZSBwYXRocy4KICBpci5EYXJ0VHlwZSB0eXBlT2YoaXIuVmFyaWFibGVHZXQgbm9kZSwgaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgVGFyZ2V0SW5mbyBpbmZvID0gX3RhcmdldEluZm9NYXBbbm9kZS52YXJpYWJsZV07CiAgICBpci5EYXJ0VHlwZSB0eXBlOwogICAgaWYgKGluZm8gIT0gbnVsbCkgewogICAgICB0eXBlID0gaW5mby50eXBlT2YodHlwZUVudmlyb25tZW50KTsKICAgIH0KICAgIHJldHVybiB0eXBlID8/IG5vZGUucHJvbW90ZWRUeXBlID8/IG5vZGUudmFyaWFibGUudHlwZTsKICB9CgogIFN0cmluZyBnZXRUZXh0KFN0cmluZyBGdW5jdGlvbihJdGVyYWJsZTxpci5EYXJ0VHlwZT4pIHR5cGVzVG9UZXh0KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgneycpOwogICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICBfdGFyZ2V0SW5mb01hcC5mb3JFYWNoKChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBUYXJnZXRJbmZvIGluZm8pIHsKICAgICAgc2Iud3JpdGUoJyR7Y29tbWF9JHt2YXJpYWJsZS5uYW1lfTonKTsKICAgICAgaW5mby5fZ2V0VGV4dChzYiwgdHlwZXNUb1RleHQpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0pOwogICAgc2Iud3JpdGUoJ30nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ1R5cGVNYXAoJyk7CiAgICBTdHJpbmcgY29tbWEgPSAnJzsKICAgIF90YXJnZXRJbmZvTWFwLmZvckVhY2goKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIFRhcmdldEluZm8gaW5mbykgewogICAgICBzYi53cml0ZSgnJHtjb21tYX0kdmFyaWFibGUtPiRpbmZvJyk7CiAgICAgIGNvbW1hID0gJywnOwogICAgfSk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CoeNAE5OPAEoNC8xNR8cJRUgIQFLFTQLAUgGSBIBOgkCAT8jKSsgCyIEAgFJMAROT084OkM/MksBJQEfAUgg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Sk4ZOCw9GlAnJSEYRkNDNAwKLStLUD8xIUMjCg8YCAg1BAFKLVA1FhgrBjwEAUcqExdQLSYTCBMaBAEMFioaF1AsEwgTGgQCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zdGF0aWNfdHlwZS5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0wACLUi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCcgc2hvdyBJbnRlcmZhY2VUeXBlOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICdjbGFzc19zZXQuZGFydCc7CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNb3ZlIG1vcmUgbWV0aG9kcyBmcm9tIGBKQ2xvc2VkV29ybGRgIHRvCi8vIGBDbGFzc0hpZXJhcmNoeWAuCmFic3RyYWN0IGNsYXNzIENsYXNzSGllcmFyY2h5IHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0NsYXNzSGllcmFyY2h5XSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENsYXNzSGllcmFyY2h5LnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPQogICAgICBDbGFzc0hpZXJhcmNoeUltcGwucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtDbGFzc0hpZXJhcmNoeV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5zdGFudGlhdGVkLgogIGJvb2wgaXNJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGRpcmVjdGx5IGluc3RhbnRpYXRlZC4gVGhpcyBtZWFucyB0aGF0IGF0CiAgLy8vIHJ1bnRpbWUgaW5zdGFuY2VzIG9mIGV4YWN0bHkgW2Nsc10gYXJlIGFzc3VtZWQgdG8gZXhpc3QuCiAgYm9vbCBpc0RpcmVjdGx5SW5zdGFudGlhdGVkKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBhYnN0cmFjdGx5IGluc3RhbnRpYXRlZC4gVGhpcyBtZWFucyB0aGF0IGF0CiAgLy8vIHJ1bnRpbWUgaW5zdGFuY2VzIG9mIFtjbHNdIG9yIHVua25vd24gc3ViY2xhc3NlcyBvZiBbY2xzXSBhcmUgYXNzdW1lZCB0bwogIC8vLyBleGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIHRvIG1hcmsgbmF0aXZlIGFuZC9vciByZWZsZWN0YWJsZSBjbGFzc2VzIGFzIGluc3RhbnRpYXRlZC4KICAvLy8gRm9yIG5hdGl2ZSBjbGFzc2VzIHdlIGRvIG5vdCBrbm93IHRoZSBleGFjdCBjbGFzcyB0aGF0IGluc3RhbnRpYXRlcyBbY2xzXQogIC8vLyBzbyBbY2xzXSBoZXJlIHJlcHJlc2VudHMgdGhlIHJvb3Qgb2YgdGhlIHN1YmNsYXNzZXMuIEZvciByZWZsZWN0YWJsZQogIC8vLyBjbGFzc2VzIHdlIG5lZWQgZXZlbnQgYWJzdHJhY3QgY2xhc3NlcyB0byBiZSAnbGl2ZScgZXZlbiB0aG91Z2ggdGhleQogIC8vLyBjYW5ub3QgdGhlbXNlbHZlcyBiZSBpbnN0YW50aWF0ZWQuCiAgYm9vbCBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGVpdGhlciBkaXJlY3RseSBvciBhYnN0cmFjdGx5IGluc3RhbnRpYXRlZC4KICAvLy8KICAvLy8gU2VlIFtpc0RpcmVjdGx5SW5zdGFudGlhdGVkXSBhbmQgW2lzQWJzdHJhY3RseUluc3RhbnRpYXRlZF0uCiAgYm9vbCBpc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGluZGlyZWN0bHkgaW5zdGFudGlhdGVkLCB0aGF0IGlzIHRocm91Z2ggYQogIC8vLyBzdWJjbGFzcy4KICBib29sIGlzSW5kaXJlY3RseUluc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbeF0gaXMgYSAobm9uLXN0cmljdCkgc3ViY2xhc3Mgb2YgW3ldLgogIGJvb2wgaXNTdWJjbGFzc09mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3hdIGlzIGEgc3VidHlwZSBvZiBbeV0sIHRoYXQgaXMsIGlmIFt4XSBpbXBsZW1lbnRzIGFuCiAgLy8vIGluc3RhbmNlIG9mIFt5XS4KICBib29sIGlzU3VidHlwZU9mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpOwoKICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSBvdmVyIHRoZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQgY2xhc3NlcyB0aGF0IGV4dGVuZAogIC8vLyBbY2xzXSBwb3NzaWJseSBpbmNsdWRpbmcgW2Nsc10gaXRzZWxmLCBpZiBpdCBpcyBsaXZlLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzdWJjbGFzc2VzT2YoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMgdGhhdCBleHRlbmQKICAvLy8gW2Nsc10gX25vdF8gaW5jbHVkaW5nIFtjbHNdIGl0c2VsZi4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3RyaWN0U3ViY2xhc3Nlc09mKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbGl2ZSBjbGFzc2VzIHRoYXQgZXh0ZW5kIFtjbHNdIF9ub3RfCiAgLy8vIGluY2x1ZGluZyBbY2xzXSBpdHNlbGYuCiAgaW50IHN0cmljdFN1YmNsYXNzQ291bnQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIEFwcGxpZXMgW2ZdIHRvIGVhY2ggbGl2ZSBjbGFzcyB0aGF0IGV4dGVuZCBbY2xzXSBfbm90XyBpbmNsdWRpbmcgW2Nsc10KICAvLy8gaXRzZWxmLgogIHZvaWQgZm9yRWFjaFN0cmljdFN1YmNsYXNzT2YoCiAgICAgIENsYXNzRW50aXR5IGNscywgSXRlcmF0aW9uU3RlcCBmKENsYXNzRW50aXR5IGNscykpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3ByZWRpY2F0ZV0gYXBwbGllcyB0byBhbnkgbGl2ZSBjbGFzcyB0aGF0IGV4dGVuZCBbY2xzXQogIC8vLyBfbm90XyBpbmNsdWRpbmcgW2Nsc10gaXRzZWxmLgogIGJvb2wgYW55U3RyaWN0U3ViY2xhc3NPZihDbGFzc0VudGl0eSBjbHMsIGJvb2wgcHJlZGljYXRlKENsYXNzRW50aXR5IGNscykpOwoKICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSBvdmVyIHRoZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQgdGhhdCBpbXBsZW1lbnQgW2Nsc10KICAvLy8gcG9zc2libHkgaW5jbHVkaW5nIFtjbHNdIGl0c2VsZiwgaWYgaXQgaXMgbGl2ZS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3VidHlwZXNPZihDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSBvdmVyIHRoZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQgdGhhdCBpbXBsZW1lbnQgW2Nsc10KICAvLy8gX25vdF8gaW5jbHVkaW5nIFtjbHNdLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzdHJpY3RTdWJ0eXBlc09mKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbGl2ZSBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IFtjbHNdIF9ub3RfCiAgLy8vIGluY2x1ZGluZyBbY2xzXSBpdHNlbGYuCiAgaW50IHN0cmljdFN1YnR5cGVDb3VudChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQXBwbGllcyBbZl0gdG8gZWFjaCBsaXZlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBbY2xzXSBfbm90XyBpbmNsdWRpbmcgW2Nsc10KICAvLy8gaXRzZWxmLgogIHZvaWQgZm9yRWFjaFN0cmljdFN1YnR5cGVPZigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBJdGVyYXRpb25TdGVwIGYoQ2xhc3NFbnRpdHkgY2xzKSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbcHJlZGljYXRlXSBhcHBsaWVzIHRvIGFueSBsaXZlIGNsYXNzIHRoYXQgaW1wbGVtZW50cwogIC8vLyBbY2xzXSBfbm90XyBpbmNsdWRpbmcgW2Nsc10gaXRzZWxmLgogIGJvb2wgYW55U3RyaWN0U3VidHlwZU9mKENsYXNzRW50aXR5IGNscywgYm9vbCBwcmVkaWNhdGUoQ2xhc3NFbnRpdHkgY2xzKSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbYV0gYW5kIFtiXSBoYXZlIGFueSBrbm93biBjb21tb24gc3VidHlwZXMuCiAgYm9vbCBoYXZlQW55Q29tbW9uU3VidHlwZXMoQ2xhc3NFbnRpdHkgYSwgQ2xhc3NFbnRpdHkgYik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzIG90aGVyIHRoYW4gW2Nsc10gZXh0ZW5kcwogIC8vLyBbY2xzXS4KICBib29sIGhhc0FueVN0cmljdFN1YmNsYXNzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzIG90aGVyIHRoYW4gW2Nsc10KICAvLy8gaW1wbGVtZW50cyBbY2xzXS4KICBib29sIGhhc0FueVN0cmljdFN1YnR5cGUoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFsbCBkaXJlY3RseSBpbnN0YW50aWF0ZWQgY2xhc3NlcyB0aGF0IGltcGxlbWVudCBbY2xzXQogIC8vLyBleHRlbmQgaXQuCiAgYm9vbCBoYXNPbmx5U3ViY2xhc3NlcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBhIFtTdWJjbGFzc1Jlc3VsdF0gZm9yIHRoZSBzdWJjbGFzc2VzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbgogIC8vLyB0aGUgc3ViY2xhc3Mvc3VidHlwZSBzZXRzIG9mIGJvdGggW2NsczFdIGFuZCBbY2xzMl0uCiAgLy8vCiAgLy8vIENsYXNzZXMgdGhhdCBhcmUgaW1wbGllZCBieSBpbmNsdWRlZCBzdXBlcmNsYXNzZXMvc3VwZXJ0eXBlcyBhcmUgbm90CiAgLy8vIHJldHVybmVkLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgZm9yIHRoaXMgaGllcmFyY2h5CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHt9CiAgLy8vICAgICBjbGFzcyBCIHt9CiAgLy8vICAgICBjbGFzcyBDIGltcGxlbWVudHMgQSwgQiB7fQogIC8vLyAgICAgY2xhc3MgRCBleHRlbmRzIEMge30KICAvLy8KICAvLy8gdGhlIHF1ZXJ5CiAgLy8vCiAgLy8vICAgICBjb21tb25TdWJjbGFzc2VzKEEsIENsYXNzUXVlcnkuU1VCVFlQRSwgQiwgQ2xhc3NRdWVyeS5TVUJUWVBFKQogIC8vLwogIC8vLyByZXR1cm4gdGhlIHNldCB7Q30gYmVjYXVzZSBbRF0gaXMgaW1wbGllZCBieSBbQ10uCiAgU3ViY2xhc3NSZXN1bHQgY29tbW9uU3ViY2xhc3NlcygKICAgICAgQ2xhc3NFbnRpdHkgY2xzMSwgQ2xhc3NRdWVyeSBxdWVyeTEsIENsYXNzRW50aXR5IGNsczIsIENsYXNzUXVlcnkgcXVlcnkyKTsKCiAgLy8vIFJldHVybnMgW0NsYXNzSGllcmFyY2h5Tm9kZV0gZm9yIFtjbHNdIHVzZWQgdG8gbW9kZWwgdGhlIGNsYXNzIGhpZXJhcmNoaWVzCiAgLy8vIG9mIGtub3duIGNsYXNzZXMuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgcHJvdmlkZWQgZm9yIHRlc3RpbmcuIEZvciBxdWVyaWVzIG9uIGNsYXNzZXMsIHVzZSB0aGUKICAvLy8gbWV0aG9kcyBkZWZpbmVkIGluIFtKQ2xvc2VkV29ybGRdLgogIENsYXNzSGllcmFyY2h5Tm9kZSBnZXRDbGFzc0hpZXJhcmNoeU5vZGUoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgW0NsYXNzU2V0XSBmb3IgW2Nsc10gdXNlZCB0byBtb2RlbCB0aGUgZXh0ZW5kcyBhbmQgaW1wbGVtZW50cwogIC8vLyByZWxhdGlvbnMgb2Yga25vd24gY2xhc3Nlcy4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgb25seSBwcm92aWRlZCBmb3IgdGVzdGluZy4gRm9yIHF1ZXJpZXMgb24gY2xhc3NlcywgdXNlIHRoZQogIC8vLyBtZXRob2RzIGRlZmluZWQgaW4gW0pDbG9zZWRXb3JsZF0uCiAgQ2xhc3NTZXQgZ2V0Q2xhc3NTZXQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNsb3NlZCB3b3JsZC4KICAvLy8KICAvLy8gSWYgW2Nsc10gaXMgcHJvdmlkZWQsIHRoZSBkdW1wIHdpbGwgY29udGFpbiBvbmx5IGNsYXNzZXMgcmVsYXRlZCB0byBbY2xzXS4KICBTdHJpbmcgZHVtcChbQ2xhc3NFbnRpdHkgY2xzXSk7Cn0KCmNsYXNzIENsYXNzSGllcmFyY2h5SW1wbCBpbXBsZW1lbnRzIENsYXNzSGllcmFyY2h5IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0NsYXNzSGllcmFyY2h5XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NsYXNzLWhpZXJhcmNoeSc7CgogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzSGllcmFyY2h5Tm9kZT4gX2NsYXNzSGllcmFyY2h5Tm9kZXM7CiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBDbGFzc1NldD4gX2NsYXNzU2V0czsKCiAgQ2xhc3NIaWVyYXJjaHlJbXBsKAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywgdGhpcy5fY2xhc3NIaWVyYXJjaHlOb2RlcywgdGhpcy5fY2xhc3NTZXRzKTsKCiAgZmFjdG9yeSBDbGFzc0hpZXJhcmNoeUltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWFwPENsYXNzRW50aXR5LCBDbGFzc0hpZXJhcmNoeU5vZGU+IGNsYXNzSGllcmFyY2h5Tm9kZXMgPQogICAgICAgIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwKCk7CiAgICBpbnQgY2xhc3NDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzQ291bnQ7IGkrKykgewogICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IG5ldyBDbGFzc0hpZXJhcmNoeU5vZGUucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgICAgc291cmNlLCBjbGFzc0hpZXJhcmNoeU5vZGVzKTsKICAgICAgY2xhc3NIaWVyYXJjaHlOb2Rlc1tub2RlLmNsc10gPSBub2RlOwogICAgfQogICAgTWFwPENsYXNzRW50aXR5LCBDbGFzc1NldD4gY2xhc3NTZXRzID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzQ291bnQ7IGkrKykgewogICAgICBDbGFzc1NldCBjbGFzc1NldCA9CiAgICAgICAgICBuZXcgQ2xhc3NTZXQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xhc3NIaWVyYXJjaHlOb2Rlcyk7CiAgICAgIGNsYXNzU2V0c1tjbGFzc1NldC5jbHNdID0gY2xhc3NTZXQ7CiAgICB9CgogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeUltcGwoCiAgICAgICAgY29tbW9uRWxlbWVudHMsIGNsYXNzSGllcmFyY2h5Tm9kZXMsIGNsYXNzU2V0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlSW50KF9jbGFzc1NldHMubGVuZ3RoKTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0KICAgICAgICBnZXRDbGFzc0hpZXJhcmNoeU5vZGUoX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKTsKICAgIG5vZGUuZm9yRWFjaFN1YmNsYXNzKChDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKGNscykud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0sIENsYXNzSGllcmFyY2h5Tm9kZS5BTEwpOwogICAgQ2xhc3NTZXQgc2V0ID0gZ2V0Q2xhc3NTZXQoX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKTsKICAgIHNldC5mb3JFYWNoU3ViY2xhc3MoKENsYXNzRW50aXR5IGNscykgewogICAgICBnZXRDbGFzc1NldChjbHMpLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9LCBDbGFzc0hpZXJhcmNoeU5vZGUuQUxMKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW5zdGFudGlhdGVkKENsYXNzRW50aXR5IGNscykgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogICAgcmV0dXJuIG5vZGUgIT0gbnVsbCAmJiBub2RlLmlzSW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0RpcmVjdGx5SW5zdGFudGlhdGVkKENsYXNzRW50aXR5IGNscykgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogICAgcmV0dXJuIG5vZGUgIT0gbnVsbCAmJiBub2RlLmlzRGlyZWN0bHlJbnN0YW50aWF0ZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzQWJzdHJhY3RseUluc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIHJldHVybiBub2RlICE9IG51bGwgJiYgbm9kZS5pc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRXhwbGljaXRseUluc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIHJldHVybiBub2RlICE9IG51bGwgJiYgbm9kZS5pc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW5kaXJlY3RseUluc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIHJldHVybiBub2RlICE9IG51bGwgJiYgbm9kZS5pc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU3VidHlwZU9mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpIHsKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gX2NsYXNzU2V0c1t5XTsKICAgIGFzc2VydCgKICAgICAgICBjbGFzc1NldCAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICB5LAogICAgICAgICAgICAiTm8gQ2xhc3NTZXQgZm9yICR5ICgke3kucnVudGltZVR5cGV9KTogIgogICAgICAgICAgICAiJHtkdW1wKHkpfSA6ICR7X2NsYXNzU2V0c30iKSk7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgY2xhc3NIaWVyYXJjaHlOb2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbeF07CiAgICBhc3NlcnQoY2xhc3NIaWVyYXJjaHlOb2RlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoeCwgIk5vIENsYXNzSGllcmFyY2h5Tm9kZSBmb3IgJHg6ICR7ZHVtcCh4KX0iKSk7CiAgICByZXR1cm4gY2xhc3NTZXQuaGFzU3VidHlwZShjbGFzc0hpZXJhcmNoeU5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YmNsYXNzT2YoQ2xhc3NFbnRpdHkgeCwgQ2xhc3NFbnRpdHkgeSkgewogICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeU5vZGVzW3ldLmhhc1N1YmNsYXNzKF9jbGFzc0hpZXJhcmNoeU5vZGVzW3hdKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzdWJjbGFzc2VzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgaGllcmFyY2h5ID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIGlmIChoaWVyYXJjaHkgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxDbGFzc0VudGl0eT5bXTsKICAgIHJldHVybiBoaWVyYXJjaHkKICAgICAgICAuc3ViY2xhc3Nlc0J5TWFzayhDbGFzc0hpZXJhcmNoeU5vZGUuRVhQTElDSVRMWV9JTlNUQU5USUFURUQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN0cmljdFN1YmNsYXNzZXNPZihDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBzdWJjbGFzc2VzID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIGlmIChzdWJjbGFzc2VzID09IG51bGwpIHJldHVybiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgICByZXR1cm4gc3ViY2xhc3Nlcy5zdWJjbGFzc2VzQnlNYXNrKAogICAgICAgIENsYXNzSGllcmFyY2h5Tm9kZS5FWFBMSUNJVExZX0lOU1RBTlRJQVRFRCwKICAgICAgICBzdHJpY3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHN0cmljdFN1YmNsYXNzQ291bnQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3NlcyA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICBpZiAoc3ViY2xhc3NlcyA9PSBudWxsKSByZXR1cm4gMDsKICAgIHJldHVybiBzdWJjbGFzc2VzLmluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hTdHJpY3RTdWJjbGFzc09mKAogICAgICBDbGFzc0VudGl0eSBjbHMsIEl0ZXJhdGlvblN0ZXAgZihDbGFzc0VudGl0eSBjbHMpKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3NlcyA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICBpZiAoc3ViY2xhc3NlcyA9PSBudWxsKSByZXR1cm47CiAgICBzdWJjbGFzc2VzLmZvckVhY2hTdWJjbGFzcyhmLCBDbGFzc0hpZXJhcmNoeU5vZGUuRVhQTElDSVRMWV9JTlNUQU5USUFURUQsCiAgICAgICAgc3RyaWN0OiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYW55U3RyaWN0U3ViY2xhc3NPZihDbGFzc0VudGl0eSBjbHMsIGJvb2wgcHJlZGljYXRlKENsYXNzRW50aXR5IGNscykpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBzdWJjbGFzc2VzID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIGlmIChzdWJjbGFzc2VzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdWJjbGFzc2VzLmFueVN1YmNsYXNzKAogICAgICAgIHByZWRpY2F0ZSwgQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVELAogICAgICAgIHN0cmljdDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3VidHlwZXNPZihDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gX2NsYXNzU2V0c1tjbHNdOwogICAgaWYgKGNsYXNzU2V0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbnN0IDxDbGFzc0VudGl0eT5bXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjbGFzc1NldAogICAgICAgICAgLnN1YnR5cGVzQnlNYXNrKENsYXNzSGllcmFyY2h5Tm9kZS5FWFBMSUNJVExZX0lOU1RBTlRJQVRFRCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3RyaWN0U3VidHlwZXNPZihDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gX2NsYXNzU2V0c1tjbHNdOwogICAgaWYgKGNsYXNzU2V0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbnN0IDxDbGFzc0VudGl0eT5bXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjbGFzc1NldC5zdWJ0eXBlc0J5TWFzayhDbGFzc0hpZXJhcmNoeU5vZGUuRVhQTElDSVRMWV9JTlNUQU5USUFURUQsCiAgICAgICAgICBzdHJpY3Q6IHRydWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHN0cmljdFN1YnR5cGVDb3VudChDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gX2NsYXNzU2V0c1tjbHNdOwogICAgaWYgKGNsYXNzU2V0ID09IG51bGwpIHJldHVybiAwOwogICAgcmV0dXJuIGNsYXNzU2V0Lmluc3RhbnRpYXRlZFN1YnR5cGVDb3VudDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFN0cmljdFN1YnR5cGVPZigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBJdGVyYXRpb25TdGVwIGYoQ2xhc3NFbnRpdHkgY2xzKSkgewogICAgQ2xhc3NTZXQgY2xhc3NTZXQgPSBfY2xhc3NTZXRzW2Nsc107CiAgICBpZiAoY2xhc3NTZXQgPT0gbnVsbCkgcmV0dXJuOwogICAgY2xhc3NTZXQuZm9yRWFjaFN1YnR5cGUoZiwgQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVELAogICAgICAgIHN0cmljdDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFueVN0cmljdFN1YnR5cGVPZihDbGFzc0VudGl0eSBjbHMsIGJvb2wgcHJlZGljYXRlKENsYXNzRW50aXR5IGNscykpIHsKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gX2NsYXNzU2V0c1tjbHNdOwogICAgaWYgKGNsYXNzU2V0ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBjbGFzc1NldC5hbnlTdWJ0eXBlKAogICAgICAgIHByZWRpY2F0ZSwgQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVELAogICAgICAgIHN0cmljdDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhdmVBbnlDb21tb25TdWJ0eXBlcyhDbGFzc0VudGl0eSBhLCBDbGFzc0VudGl0eSBiKSB7CiAgICBDbGFzc1NldCBjbGFzc1NldEEgPSBfY2xhc3NTZXRzW2FdOwogICAgQ2xhc3NTZXQgY2xhc3NTZXRCID0gX2NsYXNzU2V0c1tiXTsKICAgIGlmIChjbGFzc1NldEEgPT0gbnVsbCB8fCBjbGFzc1NldEIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW1wbGVtZW50IGFuIG9wdGltaXplZCBxdWVyeSBvbiBbQ2xhc3NTZXRdLgogICAgU2V0PENsYXNzRW50aXR5PiBzdWJ0eXBlc09mQiA9IGNsYXNzU2V0Qi5zdWJ0eXBlcygpLnRvU2V0KCk7CiAgICBmb3IgKENsYXNzRW50aXR5IHN1YnR5cGVPZkEgaW4gY2xhc3NTZXRBLnN1YnR5cGVzKCkpIHsKICAgICAgaWYgKHN1YnR5cGVzT2ZCLmNvbnRhaW5zKHN1YnR5cGVPZkEpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzQW55U3RyaWN0U3ViY2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3NlcyA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICBpZiAoc3ViY2xhc3NlcyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3ViY2xhc3Nlcy5pc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FueVN0cmljdFN1YnR5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gc3RyaWN0U3VidHlwZUNvdW50KGNscykgPiAwOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNPbmx5U3ViY2xhc3NlcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IG1vdmUgdGhpcyB0byBDbGFzc1NldD8KICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSByZXR1cm4gdHJ1ZTsKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gX2NsYXNzU2V0c1tjbHNdOwogICAgaWYgKGNsYXNzU2V0ID09IG51bGwpIHsKICAgICAgLy8gVmFjdW91c2x5IHRydWUuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGNsYXNzU2V0Lmhhc09ubHlJbnN0YW50aWF0ZWRTdWJjbGFzc2VzOwogIH0KCiAgQG92ZXJyaWRlCiAgU3ViY2xhc3NSZXN1bHQgY29tbW9uU3ViY2xhc3NlcyhDbGFzc0VudGl0eSBjbHMxLCBDbGFzc1F1ZXJ5IHF1ZXJ5MSwKICAgICAgQ2xhc3NFbnRpdHkgY2xzMiwgQ2xhc3NRdWVyeSBxdWVyeTIpIHsKICAgIGlmIChxdWVyeTEgPT0gQ2xhc3NRdWVyeS5FWEFDVCAmJiBxdWVyeTIgPT0gQ2xhc3NRdWVyeS5FWEFDVCkgewogICAgICAvLyBFeGFjdCBjbGFzc2VzIFtjbHMxXSBhbmQgW2NsczJdIG11c3QgYmUgaWRlbnRpY2FsIHRvIGhhdmUgYW55IGNsYXNzZXMKICAgICAgLy8gaW4gY29tbW9uLgogICAgICBpZiAoY2xzMSAhPSBjbHMyKSB7CiAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LkVNUFRZOwogICAgICB9CiAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FWEFDVDE7CiAgICB9IGVsc2UgaWYgKHF1ZXJ5MSA9PSBDbGFzc1F1ZXJ5LkVYQUNUKSB7CiAgICAgIGlmIChxdWVyeTIgPT0gQ2xhc3NRdWVyeS5TVUJDTEFTUykgewogICAgICAgIC8vIEV4YWN0IFtjbHMxXSBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YgW2NsczJdIHRvIGhhdmUgYW55IGNsYXNzZXMgaW4KICAgICAgICAvLyBjb21tb24uCiAgICAgICAgaWYgKGlzU3ViY2xhc3NPZihjbHMxLCBjbHMyKSkgewogICAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LkVYQUNUMTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocXVlcnkyID09IENsYXNzUXVlcnkuU1VCVFlQRSkgewogICAgICAgIC8vIEV4YWN0IFtjbHMxXSBtdXN0IGJlIGEgc3VidHlwZSBvZiBbY2xzMl0gdG8gaGF2ZSBhbnkgY2xhc3NlcyBpbgogICAgICAgIC8vIGNvbW1vbi4KICAgICAgICBpZiAoaXNTdWJ0eXBlT2YoY2xzMSwgY2xzMikpIHsKICAgICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FWEFDVDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FTVBUWTsKICAgIH0gZWxzZSBpZiAocXVlcnkyID09IENsYXNzUXVlcnkuRVhBQ1QpIHsKICAgICAgaWYgKHF1ZXJ5MSA9PSBDbGFzc1F1ZXJ5LlNVQkNMQVNTKSB7CiAgICAgICAgLy8gRXhhY3QgW2NsczJdIG11c3QgYmUgYSBzdWJjbGFzcyBvZiBbY2xzMV0gdG8gaGF2ZSBhbnkgY2xhc3NlcyBpbgogICAgICAgIC8vIGNvbW1vbi4KICAgICAgICBpZiAoaXNTdWJjbGFzc09mKGNsczIsIGNsczEpKSB7CiAgICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuRVhBQ1QyOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChxdWVyeTEgPT0gQ2xhc3NRdWVyeS5TVUJUWVBFKSB7CiAgICAgICAgLy8gRXhhY3QgW2NsczJdIG11c3QgYmUgYSBzdWJ0eXBlIG9mIFtjbHMxXSB0byBoYXZlIGFueSBjbGFzc2VzIGluCiAgICAgICAgLy8gY29tbW9uLgogICAgICAgIGlmIChpc1N1YnR5cGVPZihjbHMyLCBjbHMxKSkgewogICAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LkVYQUNUMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LkVNUFRZOwogICAgfSBlbHNlIGlmIChxdWVyeTEgPT0gQ2xhc3NRdWVyeS5TVUJDTEFTUyAmJiBxdWVyeTIgPT0gQ2xhc3NRdWVyeS5TVUJDTEFTUykgewogICAgICAvLyBbY2xzMV0gbXVzdCBiZSBhIHN1YmNsYXNzIG9mIFtjbHMyXSBvciB2aWNlIHZlcnNhIHRvIGhhdmUgYW55IGNsYXNzZXMKICAgICAgLy8gaW4gY29tbW9uLgogICAgICBpZiAoY2xzMSA9PSBjbHMyIHx8IGlzU3ViY2xhc3NPZihjbHMxLCBjbHMyKSkgewogICAgICAgIC8vIFRoZSBzdWJjbGFzc2VzIG9mIFtjbHMxXSBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgc3ViY2xhc3NlcyBvZgogICAgICAgIC8vIFtjbHMyXS4KICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuU1VCQ0xBU1MxOwogICAgICB9IGVsc2UgaWYgKGlzU3ViY2xhc3NPZihjbHMyLCBjbHMxKSkgewogICAgICAgIC8vIFRoZSBzdWJjbGFzc2VzIG9mIFtjbHMyXSBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgc3ViY2xhc3NlcyBvZgogICAgICAgIC8vIFtjbHMxXS4KICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuU1VCQ0xBU1MyOwogICAgICB9CiAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FTVBUWTsKICAgIH0gZWxzZSBpZiAocXVlcnkxID09IENsYXNzUXVlcnkuU1VCQ0xBU1MpIHsKICAgICAgaWYgKGlzU3VidHlwZU9mKGNsczEsIGNsczIpKSB7CiAgICAgICAgLy8gVGhlIHN1YmNsYXNzZXMgb2YgW2NsczFdIGFyZSBhbGwgc3VidHlwZXMgb2YgW2NsczJdLgogICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5TVUJDTEFTUzE7CiAgICAgIH0KICAgICAgaWYgKGNsczEgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgICAgLy8gU2luY2UgW2NsczFdIGlzIGBPYmplY3RgIGFsbCBzdWJ0eXBlcyBvZiBbY2xzMl0gYXJlIGNvbnRhaW5lZCB3aXRoaW4KICAgICAgICAvLyB0aGUgc3ViY2xhc3NlcyBvZiBbY2xzMV0uCiAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LlNVQlRZUEUyOwogICAgICB9CiAgICAgIC8vIEZpbmQgYWxsIHRoZSByb290IHN1YmNsYXNzZXMgb2YgW2NsczFdIG9mIHRoYXQgaW1wbGVtZW50IFtjbHMyXS4KICAgICAgLy8KICAgICAgLy8gRm9yIHRoaXMgaGllcmFyY2h5OgogICAgICAvLwogICAgICAvLyAgICAgY2xhc3MgSSB7fQogICAgICAvLyAgICAgY2xhc3MgQSB7fQogICAgICAvLyAgICAgY2xhc3MgQiBleHRlbmRzIEEgaW1wbGVtZW50cyBJIHt9CiAgICAgIC8vICAgICBjbGFzcyBDIGV4dGVuZHMgQiB7fQogICAgICAvLyAgICAgY2xhc3MgRCBleHRlbmRzIEEgaW1wbGVtZW50cyBJIHt9CiAgICAgIC8vCiAgICAgIC8vIHRoZSBjb21tb24gc3ViY2xhc3NlcyBvZiAic3ViY2xhc3Mgb2YgQSIgYW5kICJzdWJ0eXBlIG9mIEkiIHJldHVybnMKICAgICAgLy8gInN1YmNsYXNzZXMgb2Yge0IsIER9Ii4gVGhlIGluY2x1c2lvbiBvZiBjbGFzcyBgQ2AgaXMgaW1wbGllZCBiZWNhdXNlCiAgICAgIC8vIGl0IGlzIGEgc3ViY2xhc3Mgb2YgYEJgLgogICAgICBMaXN0PENsYXNzRW50aXR5PiBjbGFzc2VzID0gPENsYXNzRW50aXR5PltdOwogICAgICBmb3JFYWNoU3RyaWN0U3ViY2xhc3NPZihjbHMxLCAoQ2xhc3NFbnRpdHkgc3ViY2xhc3MpIHsKICAgICAgICBpZiAoaXNTdWJ0eXBlT2Yoc3ViY2xhc3MsIGNsczIpKSB7CiAgICAgICAgICBjbGFzc2VzLmFkZChzdWJjbGFzcyk7CiAgICAgICAgICAvLyBTa2lwIHN1YmNsYXNzZXMgb2YgW3N1YmNsYXNzXTsgdGhleSBhbGwgaW1wbGVtZW50IFtjbHMyXSBieQogICAgICAgICAgLy8gaW5oZXJpdGFuY2UgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgc3ViY2xhc3NlcyBvZiBbc3ViY2xhc3NdLgogICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuU0tJUF9TVUJDTEFTU0VTOwogICAgICAgIH0KICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RlcC5DT05USU5VRTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgU3ViY2xhc3NSZXN1bHQoY2xhc3Nlcyk7CiAgICB9IGVsc2UgaWYgKHF1ZXJ5MiA9PSBDbGFzc1F1ZXJ5LlNVQkNMQVNTKSB7CiAgICAgIGlmIChpc1N1YnR5cGVPZihjbHMyLCBjbHMxKSkgewogICAgICAgIC8vIFRoZSBzdWJjbGFzc2VzIG9mIFtjbHMyXSBhcmUgYWxsIHN1YnR5cGVzIG9mIFtjbHMxXS4KICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuU1VCQ0xBU1MyOwogICAgICB9CiAgICAgIGlmIChjbHMyID09IF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICAgIC8vIFNpbmNlIFtjbHMyXSBpcyBgT2JqZWN0YCBhbGwgc3VidHlwZXMgb2YgW2NsczFdIGFyZSBjb250YWluZWQgd2l0aGluCiAgICAgICAgLy8gdGhlIHN1YmNsYXNzZXMgb2YgW2NsczJdLgogICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5TVUJUWVBFMTsKICAgICAgfQogICAgICAvLyBGaW5kIGFsbCB0aGUgcm9vdCBzdWJjbGFzc2VzIG9mIFtjbHMyXSBvZiB0aGF0IGltcGxlbWVudCBbY2xzMV0uCiAgICAgIExpc3Q8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSA8Q2xhc3NFbnRpdHk+W107CiAgICAgIGZvckVhY2hTdHJpY3RTdWJjbGFzc09mKGNsczIsIChDbGFzc0VudGl0eSBzdWJjbGFzcykgewogICAgICAgIGlmIChpc1N1YnR5cGVPZihzdWJjbGFzcywgY2xzMSkpIHsKICAgICAgICAgIGNsYXNzZXMuYWRkKHN1YmNsYXNzKTsKICAgICAgICAgIC8vIFNraXAgc3ViY2xhc3NlcyBvZiBbc3ViY2xhc3NdOyB0aGV5IGFsbCBpbXBsZW1lbnQgW2NsczFdIGJ5CiAgICAgICAgICAvLyBpbmhlcml0YW5jZSBhbmQgYXJlIGluY2x1ZGVkIGluIHRoZSBzdWJjbGFzc2VzIG9mIFtzdWJjbGFzc10uCiAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RlcC5TS0lQX1NVQkNMQVNTRVM7CiAgICAgICAgfQogICAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBTdWJjbGFzc1Jlc3VsdChjbGFzc2VzKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjbHMxID09IGNsczIgfHwgaXNTdWJ0eXBlT2YoY2xzMSwgY2xzMikpIHsKICAgICAgICAvLyBUaGUgc3VidHlwZXMgb2YgW2NsczFdIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBzdWJ0eXBlcyBvZiBbY2xzMl0uCiAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LlNVQlRZUEUxOwogICAgICB9IGVsc2UgaWYgKGlzU3VidHlwZU9mKGNsczIsIGNsczEpKSB7CiAgICAgICAgLy8gVGhlIHN1YnR5cGVzIG9mIFtjbHMyXSBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgc3VidHlwZXMgb2YgW2NsczFdLgogICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5TVUJUWVBFMjsKICAgICAgfQogICAgICAvLyBGaW5kIGFsbCB0aGUgcm9vdCBzdWJjbGFzc2VzIG9mIFtjbHMxXSBvZiB0aGF0IGltcGxlbWVudCBbY2xzMl0uCiAgICAgIC8vCiAgICAgIC8vIEZvciB0aGlzIGhpZXJhcmNoeToKICAgICAgLy8KICAgICAgLy8gICAgIGNsYXNzIEkge30KICAgICAgLy8gICAgIGNsYXNzIEEge30KICAgICAgLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIGltcGxlbWVudHMgSSB7fQogICAgICAvLyAgICAgY2xhc3MgQyBleHRlbmRzIEIge30KICAgICAgLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBBIGltcGxlbWVudHMgSSB7fQogICAgICAvLyAgICAgY2xhc3MgRSBpbXBsZW1lbnRzIEIge30KICAgICAgLy8gICAgIGNsYXNzIEYgZXh0ZW5kcyBFIHt9CiAgICAgIC8vCiAgICAgIC8vIHRoZSBjb21tb24gc3ViY2xhc3NlcyBvZiAic3VidHlwZSBvZiBBIiBhbmQgInN1YnR5cGUgb2YgSSIgcmV0dXJucwogICAgICAvLyAic3ViY2xhc3NlcyBvZiB7QiwgRCwgRX0iLiBUaGUgaW5jbHVzaW9uIG9mIGNsYXNzZXMgYENgIGFuZCBgRmAgaXMKICAgICAgLy8gaW1wbGllZCBiZWNhdXNlIHRoZXkgYXJlIHN1YmNsYXNzZXMgb2YgYEJgIGFuZCBgRWAsIHJlc3BlY3RpdmVseS4KICAgICAgTGlzdDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IDxDbGFzc0VudGl0eT5bXTsKICAgICAgZm9yRWFjaFN0cmljdFN1YnR5cGVPZihjbHMxLCAoQ2xhc3NFbnRpdHkgc3ViY2xhc3MpIHsKICAgICAgICBpZiAoaXNTdWJ0eXBlT2Yoc3ViY2xhc3MsIGNsczIpKSB7CiAgICAgICAgICBjbGFzc2VzLmFkZChzdWJjbGFzcyk7CiAgICAgICAgICAvLyBTa2lwIHN1YmNsYXNzZXMgb2YgW3N1YmNsYXNzXTsgdGhleSBhbGwgaW1wbGVtZW50IFtjbHMyXSBieQogICAgICAgICAgLy8gaW5oZXJpdGFuY2UgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgc3ViY2xhc3NlcyBvZiBbc3ViY2xhc3NdLgogICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuU0tJUF9TVUJDTEFTU0VTOwogICAgICAgIH0KICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RlcC5DT05USU5VRTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgU3ViY2xhc3NSZXN1bHQoY2xhc3Nlcyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0hpZXJhcmNoeU5vZGUgZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1NldCBnZXRDbGFzc1NldChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xhc3NTZXRzW2Nsc107CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZHVtcChbQ2xhc3NFbnRpdHkgY2xzXSkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCJDbGFzc2VzIGluIHRoZSBjbG9zZWQgd29ybGQgcmVsYXRlZCB0byAkY2xzOlxuIik7CiAgICB9IGVsc2UgewogICAgICBzYi53cml0ZSgiSW5zdGFudGlhdGVkIGNsYXNzZXMgaW4gdGhlIGNsb3NlZCB3b3JsZDpcbiIpOwogICAgfQogICAgZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykKICAgICAgICAucHJpbnRPbihzYiwgJyAnLCBpbnN0YW50aWF0ZWRPbmx5OiBjbHMgPT0gbnVsbCwgd2l0aFJlc3BlY3RUbzogY2xzKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIHsKICAvLyBXZSBrZWVwIHRyYWNrIG9mIHN1YnR5cGUgYW5kIHN1YmNsYXNzIHJlbGF0aW9uc2hpcHMgaW4gZm91cgogIC8vIGRpc3RpbmN0IHNldHMgdG8gbWFrZSBjbGFzcyBoaWVyYXJjaHkgYW5hbHlzaXMgZmFzdGVyLgogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NIaWVyYXJjaHlOb2RlPiBfY2xhc3NIaWVyYXJjaHlOb2RlcyA9CiAgICAgIDxDbGFzc0VudGl0eSwgQ2xhc3NIaWVyYXJjaHlOb2RlPnt9OwogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NTZXQ+IF9jbGFzc1NldHMgPSA8Q2xhc3NFbnRpdHksIENsYXNzU2V0Pnt9OwogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gbWl4aW5Vc2VzID0KICAgICAgbmV3IE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4oKTsKCiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwogIGZpbmFsIENsYXNzUXVlcmllcyBfY2xhc3NRdWVyaWVzOwoKICBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIodGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX2NsYXNzUXVlcmllcyk7CgogIENsYXNzSGllcmFyY2h5IGNsb3NlKCkgewogICAgYXNzZXJ0KAogICAgICAgIF9jbGFzc0hpZXJhcmNoeU5vZGVzLmxlbmd0aCA9PSBfY2xhc3NTZXRzLmxlbmd0aCwKICAgICAgICAiQ2xhc3NIaWVyYXJjaHlOb2RlL0NsYXNzU2V0IG1pc21hdGNoOiAiCiAgICAgICAgIiR7X2NsYXNzSGllcmFyY2h5Tm9kZXN9IHZzICIKICAgICAgICAiJHtfY2xhc3NTZXRzfSIpOwogICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeUltcGwoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLCBfY2xhc3NIaWVyYXJjaHlOb2RlcywgX2NsYXNzU2V0cyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBfZW5zdXJlQ2xhc3NTZXQoX2NsYXNzUXVlcmllcy5nZXREZWNsYXJhdGlvbihjbHMpKTsKICB9CgogIENsYXNzSGllcmFyY2h5Tm9kZSBfZW5zdXJlQ2xhc3NIaWVyYXJjaHlOb2RlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeU5vZGVzLnB1dElmQWJzZW50KGNscywgKCkgewogICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgcGFyZW50Tm9kZTsKICAgICAgQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IF9jbGFzc1F1ZXJpZXMuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICBpZiAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgICAgcGFyZW50Tm9kZSA9IF9lbnN1cmVDbGFzc0hpZXJhcmNoeU5vZGUoc3VwZXJjbGFzcyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGUoCiAgICAgICAgICBwYXJlbnROb2RlLCBjbHMsIF9jbGFzc1F1ZXJpZXMuZ2V0SGllcmFyY2h5RGVwdGgoY2xzKSk7CiAgICB9KTsKICB9CgogIENsYXNzU2V0IF9lbnN1cmVDbGFzc1NldChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xhc3NTZXRzLnB1dElmQWJzZW50KGNscywgKCkgewogICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IF9lbnN1cmVDbGFzc0hpZXJhcmNoeU5vZGUoY2xzKTsKICAgICAgQ2xhc3NTZXQgY2xhc3NTZXQgPSBuZXcgQ2xhc3NTZXQobm9kZSk7CgogICAgICBmb3IgKEludGVyZmFjZVR5cGUgdHlwZSBpbiBfY2xhc3NRdWVyaWVzLmdldFN1cGVydHlwZXMoY2xzKSkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE9wdGltaXphdGlvbjogQXZvaWQgYWRkaW5nIFtjbHNdIHRvCiAgICAgICAgLy8gc3VwZXJjbGFzc2VzLgogICAgICAgIENsYXNzU2V0IHN1YnR5cGVTZXQgPSBfZW5zdXJlQ2xhc3NTZXQodHlwZS5lbGVtZW50KTsKICAgICAgICBzdWJ0eXBlU2V0LmFkZFN1YnR5cGUobm9kZSk7CiAgICAgIH0KCiAgICAgIENsYXNzRW50aXR5IGFwcGxpZWRNaXhpbiA9IF9jbGFzc1F1ZXJpZXMuZ2V0QXBwbGllZE1peGluKGNscyk7CiAgICAgIHdoaWxlIChhcHBsaWVkTWl4aW4gIT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGUgZGF0YSBzdG9yZWQgaW4gW0NsYXNzU2V0XS4KICAgICAgICByZWdpc3Rlck1peGluVXNlKGNscywgYXBwbGllZE1peGluKTsKICAgICAgICBDbGFzc1NldCBtaXhpblNldCA9IF9lbnN1cmVDbGFzc1NldChhcHBsaWVkTWl4aW4pOwogICAgICAgIG1peGluU2V0LmFkZE1peGluQXBwbGljYXRpb24obm9kZSk7CgogICAgICAgIC8vIEluIGNhc2Ugb2YKICAgICAgICAvLwogICAgICAgIC8vICAgIGNsYXNzIEEge30KICAgICAgICAvLyAgICBjbGFzcyBCID0gT2JqZWN0IHdpdGggQTsKICAgICAgICAvLyAgICBjbGFzcyBDID0gT2JqZWN0IHdpdGggQjsKICAgICAgICAvLwogICAgICAgIC8vIHdlIG5lZWQgdG8gcmVnaXN0ZXIgdGhhdCBDIG5vdCBvbmx5IG1peGVzIGluIEIgYnV0IGFsc28gQS4KICAgICAgICBhcHBsaWVkTWl4aW4gPSBfY2xhc3NRdWVyaWVzLmdldEFwcGxpZWRNaXhpbihhcHBsaWVkTWl4aW4pOwogICAgICB9CiAgICAgIHJldHVybiBjbGFzc1NldDsKICAgIH0pOwogIH0KCiAgdm9pZCBfdXBkYXRlU3VwZXJDbGFzc0hpZXJhcmNoeU5vZGVGb3JDbGFzcyhDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSkgewogICAgLy8gRW5zdXJlIHRoYXQgY2xhc3NlcyBpbXBsaWNpdGx5IGltcGxlbWVudGluZyBgRnVuY3Rpb25gIGFyZSBpbiBpdHMKICAgIC8vIHN1YnR5cGUgc2V0LgogICAgQ2xhc3NFbnRpdHkgY2xzID0gbm9kZS5jbHM7CiAgICBpZiAoY2xzICE9IF9jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzICYmCiAgICAgICAgX2NsYXNzUXVlcmllcy5pbXBsZW1lbnRzRnVuY3Rpb24oY2xzKSkgewogICAgICBDbGFzc1NldCBzdWJ0eXBlU2V0ID0gX2Vuc3VyZUNsYXNzU2V0KF9jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzKTsKICAgICAgc3VidHlwZVNldC5hZGRTdWJ0eXBlKG5vZGUpOwogICAgfQogICAgaWYgKCFub2RlLmlzSW5zdGFudGlhdGVkICYmIG5vZGUucGFyZW50Tm9kZSAhPSBudWxsKSB7CiAgICAgIF91cGRhdGVTdXBlckNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzKG5vZGUucGFyZW50Tm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHVwZGF0ZUNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzKENsYXNzRW50aXR5IGNscywKICAgICAge2Jvb2wgZGlyZWN0bHlJbnN0YW50aWF0ZWQ6IGZhbHNlLCBib29sIGFic3RyYWN0bHlJbnN0YW50aWF0ZWQ6IGZhbHNlfSkgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBfZW5zdXJlQ2xhc3NTZXQoY2xzKS5ub2RlOwogICAgX3VwZGF0ZVN1cGVyQ2xhc3NIaWVyYXJjaHlOb2RlRm9yQ2xhc3Mobm9kZSk7CiAgICBpZiAoZGlyZWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgbm9kZS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkID0gdHJ1ZTsKICAgIH0KICAgIGlmIChhYnN0cmFjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIG5vZGUuaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgcmVnaXN0ZXJNaXhpblVzZShDbGFzc0VudGl0eSBtaXhpbkFwcGxpY2F0aW9uLCBDbGFzc0VudGl0eSBtaXhpbikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWRkIG1hcCByZXN0cmljdGVkIHRvIGxpdmUgY2xhc3Nlcy4KICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgcGF0Y2ggY2xhc3NlcyBhcyBtaXhpbi4KICAgIFNldDxDbGFzc0VudGl0eT4gdXNlcnMgPQogICAgICAgIG1peGluVXNlcy5wdXRJZkFic2VudChtaXhpbiwgKCkgPT4gbmV3IFNldDxDbGFzc0VudGl0eT4oKSk7CiAgICB1c2Vycy5hZGQobWl4aW5BcHBsaWNhdGlvbik7CiAgfQoKICBib29sIF9pc1N1YnR5cGVPZihDbGFzc0VudGl0eSB4LCBDbGFzc0VudGl0eSB5KSB7CiAgICBhc3NlcnQoX2NsYXNzU2V0cy5jb250YWluc0tleSh4KSwKICAgICAgICAiQ2xhc3NTZXQgZm9yICR4IGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQuIik7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbeV07CiAgICBhc3NlcnQoY2xhc3NTZXQgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCh5LCAiTm8gQ2xhc3NTZXQgZm9yICR5ICgke3kucnVudGltZVR5cGV9KTogJHtfY2xhc3NTZXRzfSIpKTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBjbGFzc0hpZXJhcmNoeU5vZGUgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1t4XTsKICAgIGFzc2VydChjbGFzc0hpZXJhcmNoeU5vZGUgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCh4LCAiTm8gQ2xhc3NIaWVyYXJjaHlOb2RlIGZvciAkeCIpKTsKICAgIHJldHVybiBjbGFzc1NldC5oYXNTdWJ0eXBlKGNsYXNzSGllcmFyY2h5Tm9kZSk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYSBkeW5hbWljIGFjY2VzcyBvbiBhbiBpbnN0YW5jZSBvZiBbZXhhY3RDbGFzc10gY2FuCiAgLy8vIHRhcmdldCBhIG1lbWJlciBkZWNsYXJlZCBpbiBbbWVtYmVySG9sZGluZ0NsYXNzXS4KICBib29sIGlzSW5oZXJpdGVkSW5FeGFjdENsYXNzKAogICAgICBDbGFzc0VudGl0eSBtZW1iZXJIb2xkaW5nQ2xhc3MsIENsYXNzRW50aXR5IGV4YWN0Q2xhc3MpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBleGFjdENsYXNzTm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2V4YWN0Q2xhc3NdOwogICAgaWYgKCFleGFjdENsYXNzTm9kZS5pc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQgJiYKICAgICAgICAhZXhhY3RDbGFzc05vZGUuaXNEaXJlY3RseUluc3RhbnRpYXRlZCkgewogICAgICAvLyBObyBpbnN0YW5jZXMgb2YgW3RoaXNDbGFzc10gYXJlIGxpdmUuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIENsYXNzU2V0IG1lbWJlckhvbGRpbmdDbGFzc1NldCA9IF9jbGFzc1NldHNbbWVtYmVySG9sZGluZ0NsYXNzXTsKICAgIGlmIChtZW1iZXJIb2xkaW5nQ2xhc3NTZXQuaGFzU3ViY2xhc3MoZXhhY3RDbGFzc05vZGUpKSB7CiAgICAgIC8vLyBBIG1lbWJlciBmcm9tIGEgc3VwZXIgY2xhc3MgY2FuIGJlIGFjY2Vzc2VkLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIG1peGluQXBwbGljYXRpb24KICAgICAgICBpbiBtZW1iZXJIb2xkaW5nQ2xhc3NTZXQubWl4aW5BcHBsaWNhdGlvbk5vZGVzKSB7CiAgICAgIGlmIChtaXhpbkFwcGxpY2F0aW9uLmhhc1N1YmNsYXNzKGV4YWN0Q2xhc3NOb2RlKSkgewogICAgICAgIC8vLyBBIG1lbWJlciBmcm9tIGEgbWl4ZWQgaW4gY2xhc3MgY2FuIGJlIGFjY2Vzc2VkLgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBNYXA8Q2xhc3NFbnRpdHksIF9Jbmhlcml0ZWRJblRoaXNDbGFzc0NhY2hlPiBfaW5oZXJpdGVkSW5UaGlzQ2xhc3NDYWNoZU1hcCA9CiAgICAgIHt9OwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYSBgdGhpc2AgZXhwcmVzc2lvbiBpbiBbdGhpc0NsYXNzXSBjYW4gdGFyZ2V0IGEgbWVtYmVyCiAgLy8vIGRlY2xhcmVkIGluIFttZW1iZXJIb2xkaW5nQ2xhc3NdLgogIGJvb2wgaXNJbmhlcml0ZWRJblRoaXNDbGFzcygKICAgICAgQ2xhc3NFbnRpdHkgbWVtYmVySG9sZGluZ0NsYXNzLCBDbGFzc0VudGl0eSB0aGlzQ2xhc3MpIHsKICAgIF9Jbmhlcml0ZWRJblRoaXNDbGFzc0NhY2hlIGNhY2hlID0KICAgICAgICBfaW5oZXJpdGVkSW5UaGlzQ2xhc3NDYWNoZU1hcFttZW1iZXJIb2xkaW5nQ2xhc3NdID8/PQogICAgICAgICAgICBuZXcgX0luaGVyaXRlZEluVGhpc0NsYXNzQ2FjaGUoKTsKICAgIHJldHVybiBjYWNoZS5pc0luaGVyaXRlZEluVGhpc0NsYXNzT2YodGhpcywgbWVtYmVySG9sZGluZ0NsYXNzLCB0aGlzQ2xhc3MpOwogIH0KCiAgTWFwPENsYXNzRW50aXR5LCBfSW5oZXJpdGVkSW5TdWJ0eXBlQ2FjaGU+IF9pbmhlcml0ZWRJblN1YnR5cGVDYWNoZU1hcCA9IHt9OwoKICBib29sIGlzSW5oZXJpdGVkSW5TdWJ0eXBlT2YoQ2xhc3NFbnRpdHkgeCwgQ2xhc3NFbnRpdHkgeSkgewogICAgX0luaGVyaXRlZEluU3VidHlwZUNhY2hlIGNhY2hlID0KICAgICAgICBfaW5oZXJpdGVkSW5TdWJ0eXBlQ2FjaGVNYXBbeF0gPz89IG5ldyBfSW5oZXJpdGVkSW5TdWJ0eXBlQ2FjaGUoKTsKICAgIHJldHVybiBjYWNoZS5pc0luaGVyaXRlZEluU3VidHlwZU9mKHRoaXMsIHgsIHkpOwogIH0KfQoKLy8vIENhY2hlIHVzZWQgZm9yIGNvbXB1dGluZyB3aGVuIGEgbWVtYmVyIG9mIGEgZ2l2ZW4gY2xhc3MsIHRoZSBzby1jYWxsZWQKLy8vIG1lbWJlciBob2xkaW5nIGNsYXNzLCBjYW4gYmUgaW5oZXJpdGVkIGludG8gYSBsaXZlIGNsYXNzLgpjbGFzcyBfSW5oZXJpdGVkSW5UaGlzQ2xhc3NDYWNoZSB7CiAgLy8vIFNldCBvZiBjbGFzc2VzIHRoYXQgaW5oZXJpdHMgbWVtYmVycyBmcm9tIHRoZSBtZW1iZXIgaG9sZGluZyBjbGFzcy4KICBTZXQ8Q2xhc3NFbnRpdHk+IF9pbmhlcml0aW5nQ2xhc3NlczsKCiAgLy8vIENhY2hlIGZvciBsaXZlbmVzcyBjb21wdXRhdGlvbiBmb3IgYSBgdGhpc2AgZXhwcmVzc2lvbnMgb2YgYSBnaXZlbiBjbGFzcy4KICBNYXA8Q2xhc3NFbnRpdHksIF9MaXZlU2V0PiBfbWFwOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgbWVtYmVycyBvZiBbbWVtYmVySG9sZGluZ0NsYXNzXSBjYW4gYmUgaW5oZXJpdGVkIGludG8KICAvLy8gYSBsaXZlIGNsYXNzIHRoYXQgY2FuIGJlIHRoZSB0YXJnZXQgb2YgYSBgdGhpc2AgZXhwcmVzc2lvbiBpbiBbdGhpc0NsYXNzXS4KICBib29sIGlzSW5oZXJpdGVkSW5UaGlzQ2xhc3NPZihDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgYnVpbGRlciwKICAgICAgQ2xhc3NFbnRpdHkgbWVtYmVySG9sZGluZ0NsYXNzLCBDbGFzc0VudGl0eSB0aGlzQ2xhc3MpIHsKICAgIF9MaXZlU2V0IHNldDsKICAgIGlmIChfbWFwID09IG51bGwpIHsKICAgICAgX21hcCA9IHt9OwogICAgfSBlbHNlIHsKICAgICAgc2V0ID0gX21hcFt0aGlzQ2xhc3NdOwogICAgfQogICAgaWYgKHNldCA9PSBudWxsKSB7CiAgICAgIHNldCA9IF9tYXBbdGhpc0NsYXNzXSA9IF9jb21wdXRlSW5oZXJpdGluZ0luVGhpc0NsYXNzU2V0KAogICAgICAgICAgYnVpbGRlciwgbWVtYmVySG9sZGluZ0NsYXNzLCB0aGlzQ2xhc3MpOwogICAgfQogICAgcmV0dXJuIHNldC5oYXNMaXZlQ2xhc3MoYnVpbGRlcik7CiAgfQoKICBfTGl2ZVNldCBfY29tcHV0ZUluaGVyaXRpbmdJblRoaXNDbGFzc1NldChDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgYnVpbGRlciwKICAgICAgQ2xhc3NFbnRpdHkgbWVtYmVySG9sZGluZ0NsYXNzLCBDbGFzc0VudGl0eSB0aGlzQ2xhc3MpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBtZW1iZXJIb2xkaW5nQ2xhc3NOb2RlID0KICAgICAgICBidWlsZGVyLl9jbGFzc0hpZXJhcmNoeU5vZGVzW21lbWJlckhvbGRpbmdDbGFzc107CgogICAgaWYgKF9pbmhlcml0aW5nQ2xhc3NlcyA9PSBudWxsKSB7CiAgICAgIF9pbmhlcml0aW5nQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICAgIF9pbmhlcml0aW5nQ2xhc3Nlcy5hZGRBbGwobWVtYmVySG9sZGluZ0NsYXNzTm9kZQogICAgICAgICAgLnN1YmNsYXNzZXNCeU1hc2soQ2xhc3NIaWVyYXJjaHlOb2RlLkFMTCwgc3RyaWN0OiBmYWxzZSkpOwogICAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBtaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgICBpbiBidWlsZGVyLl9jbGFzc1NldHNbbWVtYmVySG9sZGluZ0NsYXNzXS5taXhpbkFwcGxpY2F0aW9uTm9kZXMpIHsKICAgICAgICBfaW5oZXJpdGluZ0NsYXNzZXMuYWRkQWxsKG1peGluQXBwbGljYXRpb24KICAgICAgICAgICAgLnN1YmNsYXNzZXNCeU1hc2soQ2xhc3NIaWVyYXJjaHlOb2RlLkFMTCwgc3RyaWN0OiBmYWxzZSkpOwogICAgICB9CiAgICB9CgogICAgU2V0PENsYXNzRW50aXR5PiB2YWxpZGF0aW5nU2V0ID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgICB2b2lkIHByb2Nlc3NIaWVyYXJjaHkoQ2xhc3NIaWVyYXJjaHlOb2RlIG1peGVyTm9kZSkgewogICAgICBmb3IgKENsYXNzRW50aXR5IGluaGVyaXRpbmdDbGFzcyBpbiBfaW5oZXJpdGluZ0NsYXNzZXMpIHsKICAgICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgaW5oZXJpdGluZ0NsYXNzTm9kZSA9CiAgICAgICAgICAgIGJ1aWxkZXIuX2NsYXNzSGllcmFyY2h5Tm9kZXNbaW5oZXJpdGluZ0NsYXNzXTsKICAgICAgICBpZiAoIXZhbGlkYXRpbmdTZXQuY29udGFpbnMobWl4ZXJOb2RlLmNscykgJiYKICAgICAgICAgICAgaW5oZXJpdGluZ0NsYXNzTm9kZS5oYXNTdWJjbGFzcyhtaXhlck5vZGUpKSB7CiAgICAgICAgICAvLyBJZiBbbWl4ZXJOb2RlLmNsc10gaXMgbGl2ZSB0aGVuIGEgYHRoaXNgIGV4cHJlc3Npb24gY2FuIHRhcmdldAogICAgICAgICAgLy8gbWVtYmVycyBpbmhlcml0ZWQgZnJvbSBbbWVtYmVySG9sZGluZ0NsYXNzXSBpbnRvIFtpbmhlcml0aW5nQ2xhc3NdLgogICAgICAgICAgdmFsaWRhdGluZ1NldC5hZGQobWl4ZXJOb2RlLmNscyk7CiAgICAgICAgfQogICAgICAgIGlmIChtaXhlck5vZGUuaGFzU3ViY2xhc3MoaW5oZXJpdGluZ0NsYXNzTm9kZSkpIHsKICAgICAgICAgIC8vIElmIFtpbmhlcml0aW5nQ2xhc3NdIGlzIGxpdmUgdGhlbiBhIGB0aGlzYCBleHByZXNzaW9uIGNhbiB0YXJnZXQKICAgICAgICAgIC8vIG1lbWJlcnMgaW5oZXJpdGVkIGZyb20gW21lbWJlckhvbGRpbmdDbGFzc10gaW50byBgaW5oZXJpdGluZ0NsYXNzYAogICAgICAgICAgLy8gaW50byBhIHN1YmNsYXNzIG9mIFttaXhlck5vZGUuY2xzXS4KICAgICAgICAgIHZhbGlkYXRpbmdTZXQuYWRkKGluaGVyaXRpbmdDbGFzcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgQ2xhc3NTZXQgdGhpc0NsYXNzU2V0ID0gYnVpbGRlci5fY2xhc3NTZXRzW3RoaXNDbGFzc107CgogICAgcHJvY2Vzc0hpZXJhcmNoeSh0aGlzQ2xhc3NTZXQubm9kZSk7CgogICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbWl4aW5BcHBsaWNhdGlvbgogICAgICAgIGluIHRoaXNDbGFzc1NldC5taXhpbkFwcGxpY2F0aW9uTm9kZXMpIHsKICAgICAgcHJvY2Vzc0hpZXJhcmNoeShtaXhpbkFwcGxpY2F0aW9uKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IF9MaXZlU2V0KHZhbGlkYXRpbmdTZXQpOwogIH0KfQoKLy8vIEEgY2FjaGUgb2JqZWN0IHVzZWQgZm9yIFtDbGFzc0hpZXJhcmNoeUJ1aWxkZXIuaXNJbmhlcml0ZWRJblN1YnR5cGVPZl0uCmNsYXNzIF9Jbmhlcml0ZWRJblN1YnR5cGVDYWNoZSB7CiAgTWFwPENsYXNzRW50aXR5LCBfTGl2ZVNldD4gX21hcDsKCiAgLy8vIFJldHVybnMgd2hldGhlciBhIGxpdmUgY2xhc3MgY3VycmVudGx5IGtub3duIHRvIGluaGVyaXQgZnJvbSBbeF0gYW5kCiAgLy8vIGltcGxlbWVudCBbeV0uCiAgYm9vbCBpc0luaGVyaXRlZEluU3VidHlwZU9mKAogICAgICBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgYnVpbGRlciwgQ2xhc3NFbnRpdHkgeCwgQ2xhc3NFbnRpdHkgeSkgewogICAgX0xpdmVTZXQgc2V0OwogICAgaWYgKF9tYXAgPT0gbnVsbCkgewogICAgICBfbWFwID0ge307CiAgICB9IGVsc2UgewogICAgICBzZXQgPSBfbWFwW3ldOwogICAgfQogICAgaWYgKHNldCA9PSBudWxsKSB7CiAgICAgIHNldCA9IF9tYXBbeV0gPSBfY29tcHV0ZUluaGVyaXRpbmdJblN1YnR5cGVTZXQoYnVpbGRlciwgeCwgeSk7CiAgICB9CiAgICByZXR1cm4gc2V0Lmhhc0xpdmVDbGFzcyhidWlsZGVyKTsKICB9CgogIC8vLyBDcmVhdGVzIGFuIFtfTGl2ZVNldF0gb2YgY2xhc3NlcyB0aGF0IGluaGVyaXQgbWVtYmVycyBvZiBhIGNsYXNzIFt4XQogIC8vLyB3aGlsZSBpbXBsZW1lbnRpbmcgY2xhc3MgW3ldLgogIF9MaXZlU2V0IF9jb21wdXRlSW5oZXJpdGluZ0luU3VidHlwZVNldCgKICAgICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXIsIENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpIHsKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gYnVpbGRlci5fY2xhc3NTZXRzW3hdOwoKICAgIGFzc2VydCgKICAgICAgICBjbGFzc1NldCAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICB4LCAiTm8gQ2xhc3NTZXQgZm9yICR4ICgke3gucnVudGltZVR5cGV9KTogJHtidWlsZGVyLl9jbGFzc1NldHN9IikpOwoKICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogICAgaWYgKGJ1aWxkZXIuX2lzU3VidHlwZU9mKHgsIHkpKSB7CiAgICAgIC8vIFt4XSBpbXBsZW1lbnRzIFt5XSBpdHNlbGYsIHBvc3NpYmxlIHRocm91Z2ggc3VwZXJ0eXBlcy4KICAgICAgY2xhc3Nlcy5hZGQoeCk7CiAgICB9CgogICAgLy8vIEFkZCBzdWJjbGFzc2VzIG9mIFtub2RlXSB0aGF0IGltcGxlbWVudCBbeV0uCiAgICB2b2lkIHN1YmNsYXNzSW1wbGVtZW50cyhDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSwge2Jvb2wgc3RyaWN0fSkgewogICAgICBub2RlLmZvckVhY2hTdWJjbGFzcygoQ2xhc3NFbnRpdHkgeikgewogICAgICAgIGlmIChidWlsZGVyLl9pc1N1YnR5cGVPZih6LCB5KSkgewogICAgICAgICAgY2xhc3Nlcy5hZGQoeik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9LCBDbGFzc0hpZXJhcmNoeU5vZGUuQUxMLCBzdHJpY3Q6IHN0cmljdCk7CiAgICB9CgogICAgLy8gQSBzdWJjbGFzc2VzIG9mIFt4XSB0aGF0IGltcGxlbWVudCBbeV0uCiAgICBzdWJjbGFzc0ltcGxlbWVudHMoY2xhc3NTZXQubm9kZSwgc3RyaWN0OiB0cnVlKTsKCiAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBtaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgaW4gY2xhc3NTZXQubWl4aW5BcHBsaWNhdGlvbk5vZGVzKSB7CiAgICAgIC8vIEEgc3ViY2xhc3Mgb2YgW21peGluQXBwbGljYXRpb25dIGltcGxlbWVudHMgW3ldLgogICAgICBzdWJjbGFzc0ltcGxlbWVudHMobWl4aW5BcHBsaWNhdGlvbiwgc3RyaWN0OiBmYWxzZSk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBfTGl2ZVNldChjbGFzc2VzKTsKICB9Cn0KCi8vLyBBIHNldCBvZiBwb3RlbnRpYWxseSBsaXZlIGNsYXNzZXMuCi8vLwovLy8gVGhlIHNldCBpcyB1c2VkIFtDbGFzc0hpZXJhcmNoeUJ1aWxkZXIuaXNJbmhlcml0ZWRJblN1YnR5cGVPZl0gYW5kCi8vLyBbQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLmlzSW5oZXJpdGVkSW5UaGlzQ2xhc3NPZl0gdG8gZGV0ZXJtaW5lCi8vLyB3aGVuIG1lbWJlcnMgb2YgYSBjbGFzcyBpcyBsaXZlLgpjbGFzcyBfTGl2ZVNldCB7CiAgLy8vIElmIGB0cnVlYCB0aGUgc2V0IG9mIGNsYXNzZXMgaXMga25vd24gdG8gY29udGFpbiBhIGxpdmUgY2xhc3MuIEluIHRoaXMKICAvLy8gY2FzZSBbX2NsYXNzZXNdIGlzIGBudWxsYC4gSWYgYGZhbHNlYCB0aGUgc2V0IG9mIGNsYXNzZXMgaXMgZW1wdHkgYW5kCiAgLy8vIHRoZXJlZm9yZSBrbm93biBuZXZlciB0byBjb250YWluIGxpdmUgY2xhc3Nlcy4gSW4gdGhpcyBjYXNlIFtfY2xhc3Nlc10KICAvLy8gaXMgYG51bGxgLiBJZiBgbnVsbGAgW19jbGFzc2VzXSBpcyBhIG5vbi1lbXB0eSBzZXQgY29udGFpbmluZyBjbGFzc2VzCiAgLy8vIHRoYXQgYXJlIG5vdCB5ZXQga25vd24gdG8gYmUgbGl2ZS4KICBib29sIF9yZXN1bHQ7CiAgU2V0PENsYXNzRW50aXR5PiBfY2xhc3NlczsKCiAgX0xpdmVTZXQoU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzKQogICAgICA6IF9yZXN1bHQgPSBjbGFzc2VzLmlzRW1wdHkgPyBmYWxzZSA6IG51bGwsCiAgICAgICAgX2NsYXNzZXMgPSBjbGFzc2VzLmlzTm90RW1wdHkgPyBjbGFzc2VzIDogbnVsbDsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgc2V0IG9mIGNsYXNzZXMgaXMgY3VycmVudGx5IGtub3duIHRvIGNvbnRhaW4gYSBsaXZlCiAgLy8vIGNsYXNzZXMuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgY2hhbmdlcyBkdXJpbmcgdGhlIGNsb3NlZCB3b3JsZCBjb21wdXRhdGlvbi4KICAvLy8gSW5pdGlhbGx5LCB3ZSBoYXZlbid0IHNlZW4gYW55IGxpdmUgY2xhc3NlcyBzbyB3ZSB3aWxsIHJldHVybiBgZmFsc2VgIGV2ZW4KICAvLy8gZm9yIGEgbm9uLWVtcHR5IHNldCBvZiBjbGFzc2VzLiBBcyBtb3JlIGNsYXNzZXMgYXJlIG1hcmtlZCBhcwogIC8vLyBpbnN0YW50aWF0ZWQsIGR1cmluZyB0cmVlLXNoYWtpbmcsIHRoZSByZXN1bHQgbWlnaHQgY2hhbmdlIHRvIGB0cnVlYCBpZgogIC8vLyBvbmUgb2YgdGhlIFtfY2xhc3Nlc10gaGFzIGJlZW4gbWFya2VkIGFzIGxpdmUuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgX2lzXyBtb25vdG9uZSwgdGhvdWdoOyB3aGVuIHdlIGhhdmUgcmV0dXJuZWQKICAvLy8gYHRydWVgIChiZWNhdXNlIGF0IGxlYXN0IG9uZSBjbGFzcyBpcyBrbm93biB0byBiZSBsaXZlKSB3ZSB3aWxsIGNvbnRpbnVlCiAgLy8vIHRvIHJldHVybiBgdHJ1ZWAuCiAgYm9vbCBoYXNMaXZlQ2xhc3MoQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXIpIHsKICAgIGlmIChfcmVzdWx0ICE9IG51bGwpIHJldHVybiBfcmVzdWx0OwogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gX2NsYXNzZXMpIHsKICAgICAgaWYgKGJ1aWxkZXIuX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXS5pc0luc3RhbnRpYXRlZCkgewogICAgICAgIC8vIFdlIG5vdyBrbm93IHRoaXMgc2V0IGNvbnRhaW5zIGEgbGl2ZSBjbGFzcyBhbmQgZG9uZSBuZWVkIHRvIHJlbWVtYmVyCiAgICAgICAgLy8gdGhhdCBzZXQgb2YgY2xhc3NlcyBhbnltb3JlLgogICAgICAgIF9yZXN1bHQgPSB0cnVlOwogICAgICAgIF9jbGFzc2VzID0gbnVsbDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgQ2xhc3NRdWVyaWVzIHsKICAvLy8gUmV0dXJucyB0aGUgZGVjbGFyYXRpb24gb2YgW2Nsc10uCiAgQ2xhc3NFbnRpdHkgZ2V0RGVjbGFyYXRpb24oY292YXJpYW50IENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBjbGFzcyBtaXhlZCBpbnRvIFtjbHNdIGlmIGFueS4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXBsYWNlIHRoaXMgYnkgYSBgZ2V0QXBwbGllZE1peGluc2AgZnVuY3Rpb24gdGhhdAogIC8vIHJldHVybiB0cmFuc2l0aXZlbHkgbWl4ZWQgaW4gY2xhc3NlcyBsaWtlIGluOgogIC8vICAgICBjbGFzcyBBIHt9CiAgLy8gICAgIGNsYXNzIEIgPSBPYmplY3Qgd2l0aCBBOwogIC8vICAgICBjbGFzcyBDID0gT2JqZWN0IHdpdGggQjsKICBDbGFzc0VudGl0eSBnZXRBcHBsaWVkTWl4aW4oY292YXJpYW50IENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBoaWVyYXJjaHkgZGVwdGggb2YgW2Nsc10uCiAgaW50IGdldEhpZXJhcmNoeURlcHRoKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaW1wbGVtZW50cyBgRnVuY3Rpb25gIGVpdGhlciBleHBsaWNpdGx5IG9yIHRocm91Z2gKICAvLy8gYSBgY2FsbGAgbWV0aG9kLgogIGJvb2wgaW1wbGVtZW50c0Z1bmN0aW9uKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgc3VwZXJjbGFzcyBvZiBbY2xzXSBpZiBhbnkuCiAgQ2xhc3NFbnRpdHkgZ2V0U3VwZXJDbGFzcyhjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYWxsIHN1cGVydHlwZXMgb2YgW2Nsc10uCiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0U3VwZXJ0eXBlcyhjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKfQoKLy8vIEVudW0gdmFsdWVzIGRlZmluaW5nIHN1YnNldCBvZiBjbGFzc2VzIGluY2x1ZGVkIGluIHF1ZXJpZXMuCmVudW0gQ2xhc3NRdWVyeSB7CiAgLy8vIE9ubHkgdGhlIGNsYXNzIGl0c2VsZiBpcyBpbmNsdWRlZC4KICBFWEFDVCwKCiAgLy8vIFRoZSBjbGFzcyBhbmQgYWxsIHN1YmNsYXNzZXMgKHRyYW5zaXRpdmVseSkgYXJlIGluY2x1ZGVkLgogIFNVQkNMQVNTLAoKICAvLy8gVGhlIGNsYXNzIGFuZCBhbGwgY2xhc3NlcyB0aGF0IGltcGxlbWVudCBvciBzdWJjbGFzcyBpdCAodHJhbnNpdGl2ZWx5KQogIC8vLyBhcmUgaW5jbHVkZWQuCiAgU1VCVFlQRSwKfQoKLy8vIFJlc3VsdCBraW5kIGZvciBbQ2xhc3NIaWVyYXJjaHkuY29tbW9uU3ViY2xhc3Nlc10uCmVudW0gU3ViY2xhc3NSZXN1bHRLaW5kIHsKICAvLy8gTm8gY29tbW9uIHN1YmNsYXNzZXMuCiAgRU1QVFksCgogIC8vLyBFeGFjdGx5IHRoZSBmaXJzdCBjbGFzcyBpbiBjb21tb24uCiAgRVhBQ1QxLAoKICAvLy8gRXhhY3RseSB0aGUgc2Vjb25kIGNsYXNzIGluIGNvbW1vbi4KICBFWEFDVDIsCgogIC8vLyBTdWJjbGFzc2VzIG9mIHRoZSBmaXJzdCBjbGFzcyBpbiBjb21tb24uCiAgU1VCQ0xBU1MxLAoKICAvLy8gU3ViY2xhc3NlcyBvZiB0aGUgc2Vjb25kIGNsYXNzIGluIGNvbW1vbi4KICBTVUJDTEFTUzIsCgogIC8vLyBTdWJ0eXBlcyBvZiB0aGUgZmlyc3QgY2xhc3MgaW4gY29tbW9uLgogIFNVQlRZUEUxLAoKICAvLy8gU3VidHlwZXMgb2YgdGhlIHNlY29uZCBjbGFzcyBpbiBjb21tb24uCiAgU1VCVFlQRTIsCgogIC8vLyBTdWJjbGFzc2VzIG9mIGEgc2V0IG9mIGNsYXNzZXMgaW4gY29tbW9uLgogIFNFVAp9CgovLy8gUmVzdWx0IGNvbXB1dGVkIGluIFtDbGFzc0hpZXJhcmNoeS5jb21tb25TdWJjbGFzc2VzXS4KY2xhc3MgU3ViY2xhc3NSZXN1bHQgewogIGZpbmFsIFN1YmNsYXNzUmVzdWx0S2luZCBraW5kOwogIGZpbmFsIExpc3Q8Q2xhc3NFbnRpdHk+IGNsYXNzZXM7CgogIFN1YmNsYXNzUmVzdWx0KHRoaXMuY2xhc3NlcykgOiBraW5kID0gU3ViY2xhc3NSZXN1bHRLaW5kLlNFVDsKCiAgY29uc3QgU3ViY2xhc3NSZXN1bHQuaW50ZXJuYWwodGhpcy5raW5kKSA6IGNsYXNzZXMgPSBudWxsOwoKICBzdGF0aWMgY29uc3QgU3ViY2xhc3NSZXN1bHQgRU1QVFkgPQogICAgICBjb25zdCBTdWJjbGFzc1Jlc3VsdC5pbnRlcm5hbChTdWJjbGFzc1Jlc3VsdEtpbmQuRU1QVFkpOwogIHN0YXRpYyBjb25zdCBTdWJjbGFzc1Jlc3VsdCBFWEFDVDEgPQogICAgICBjb25zdCBTdWJjbGFzc1Jlc3VsdC5pbnRlcm5hbChTdWJjbGFzc1Jlc3VsdEtpbmQuRVhBQ1QxKTsKICBzdGF0aWMgY29uc3QgU3ViY2xhc3NSZXN1bHQgRVhBQ1QyID0KICAgICAgY29uc3QgU3ViY2xhc3NSZXN1bHQuaW50ZXJuYWwoU3ViY2xhc3NSZXN1bHRLaW5kLkVYQUNUMik7CiAgc3RhdGljIGNvbnN0IFN1YmNsYXNzUmVzdWx0IFNVQkNMQVNTMSA9CiAgICAgIGNvbnN0IFN1YmNsYXNzUmVzdWx0LmludGVybmFsKFN1YmNsYXNzUmVzdWx0S2luZC5TVUJDTEFTUzEpOwogIHN0YXRpYyBjb25zdCBTdWJjbGFzc1Jlc3VsdCBTVUJDTEFTUzIgPQogICAgICBjb25zdCBTdWJjbGFzc1Jlc3VsdC5pbnRlcm5hbChTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCQ0xBU1MyKTsKICBzdGF0aWMgY29uc3QgU3ViY2xhc3NSZXN1bHQgU1VCVFlQRTEgPQogICAgICBjb25zdCBTdWJjbGFzc1Jlc3VsdC5pbnRlcm5hbChTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTEpOwogIHN0YXRpYyBjb25zdCBTdWJjbGFzc1Jlc3VsdCBTVUJUWVBFMiA9CiAgICAgIGNvbnN0IFN1YmNsYXNzUmVzdWx0LmludGVybmFsKFN1YmNsYXNzUmVzdWx0S2luZC5TVUJUWVBFMik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTdWJjbGFzc1Jlc3VsdCgka2luZCxjbGFzc2VzPSRjbGFzc2VzKSc7Cn0Kg+UATk48ARkiJDQuGQFBFSA8LT4tATInAU0oAUs/MAFNTw0GTlBLSykyAU0GQzIBTBAyAT4zAU8XMgFNPDcBTSo9AUEeLAFNDiA6AVAkTgFONjUBTh07AUQeKwFRDh86AU4qTQFEPAFRDS4BSRgtAU8RKwFKOwZLEAYmBhUVJR8GEAZJBjgjUQFRGAZQKT0BTCIGUCkpATsGUSICATVIHS8BKEMvARZJATE6Fz8mJytLKCwGLysaSCoGARUjOQQBDCgVJh48LTgTID0sLhMgEwQBDCk5MAQBDDE5OAQBDDM5OgQBDDM5OgQBDDM5OgQBDDMnDBoSDzYsRSdCNAQBDDRJBAEMOD45FUcEAQw+PzooNBcEAQwtPyYxBAEMIDs/JE4XBAEMTz8qIz8XBAEMNikcJA0WRwYEAQw8KRwkDVEZBgQBDCwpJC4EAQwfOykiSxcEAQxOKSggPxcEAQw9KCg+SEE7LhUIBhIEAQwvPyowBAEMLigEAQwsMzkpHBkTBjMEAQxHLURPFBolCCQtK0wTKCgKMUsTJygKCCMtK0wTKCgKMUsTJygKCCNRTxQ2SxMpLUsTKQgjMCVAKQgxUCUoCEoJHQkYGC8iLwlNTyIzPSshSUswCicKKjAlQCkIMVAlKAhKMz0rIUlLMAonCioNNU8oLE8oCEoJHQkYGC8iLyUiCUxMSzM8KyFJSzAKJwoqBgQBDD4mBAEMKhwEAQwjKhdCDT8GN04aBAIBHkE8RCtLNzABKCQBQwEbDDoxJhojPAQBKDgEAUI2JUEgPAglQggEAS4sQC4BRUQZPSUIAUUlQy07LAEWCxknJwtGRAgXCAQBSUkUIDAxTCMGOz8GBAE5UDkyICoGIiwGBAFLQDAdRCEEATQmNycdTkUnNjQEAUw4IEBKNDIvFAZFPTcTBi06OjwVCAYSBAFPCgFPKB8/Jz4uUAQBTwE+JUs1BAIBSz4jSicBUCMBTlE/PxIYEQ0dBhdAMwYmBAFLPzA6ASYzN0UvTTNHCAYBPQE6QDE7NjpMUSwKOk5QMS4KCAYBOwEpAS0xKgYBKAQCAUwhIwFLFR9FEhgRDRUGF0UGJgQBSyQrRS8BDBoSUQE3ASZBFgYBNUYtKhoKFTIGAS81AS0tOjsGASIEAgEnBEdCJRFNTE1MKRAdASUyOAFODwZNUURONQZNTxg1KSg+UCgYGRUIBhIEAgEeKDkBMU0zFCIiOgEsNAFRFzYBLjgBJ0QCAUASKQkBQAwBTRQLAgE3GhwJASkKASoKAS8NATANAS0MAS4MATAGAgE6FyEjAUABPQEmPydAJ0AqQypDKUIpQgEMQQIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0P3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfaW5mZXJyZXIuZGFydJadLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgdHlwZV9ncmFwaF9pbmZlcnJlcjsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IFF1ZXVlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCcgc2hvdyBKQ2xvc3VyZUNhbGxNZXRob2Q7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwppbXBvcnQgJ3R5cGVzLmRhcnQnOwoKLy8vIEEgd29yayBxdWV1ZSBmb3IgdGhlIGluZmVycmVyLiBJdCBmaWx0ZXJzIG91dCBub2RlcyB0aGF0IGFyZSB0YWdnZWQgYXMKLy8vIFtUeXBlSW5mb3JtYXRpb24uZG9Ob3RFbnF1ZXVlXSwgYXMgd2VsbCBhcyBlbnN1cmVzIHRocm91Z2gKLy8vIFtUeXBlSW5mb3JtYXRpb24uaW5RdWV1ZV0gdGhhdCBhIG5vZGUgaXMgaW4gdGhlIHF1ZXVlIG9ubHkgb25jZSBhdAovLy8gYSB0aW1lLgpjbGFzcyBXb3JrUXVldWUgewogIGZpbmFsIFF1ZXVlPFR5cGVJbmZvcm1hdGlvbj4gcXVldWUgPSBuZXcgUXVldWU8VHlwZUluZm9ybWF0aW9uPigpOwoKICB2b2lkIGFkZChUeXBlSW5mb3JtYXRpb24gZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQuZG9Ob3RFbnF1ZXVlKSByZXR1cm47CiAgICBpZiAoZWxlbWVudC5pblF1ZXVlKSByZXR1cm47CiAgICBxdWV1ZS5hZGRMYXN0KGVsZW1lbnQpOwogICAgZWxlbWVudC5pblF1ZXVlID0gdHJ1ZTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gYWxsKSB7CiAgICBhbGwuZm9yRWFjaChhZGQpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHJlbW92ZSgpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiBlbGVtZW50ID0gcXVldWUucmVtb3ZlRmlyc3QoKTsKICAgIGVsZW1lbnQuaW5RdWV1ZSA9IGZhbHNlOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IHF1ZXVlLmlzRW1wdHk7CgogIGludCBnZXQgbGVuZ3RoID0+IHF1ZXVlLmxlbmd0aDsKfQoKY2xhc3MgVHlwZUdyYXBoSW5mZXJyZXIgaW1wbGVtZW50cyBUeXBlc0luZmVycmVyIHsKICBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcjsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CgogIGZpbmFsIENvbXBpbGVyIF9jb21waWxlcjsKICBmaW5hbCBJbmZlcnJlZERhdGFCdWlsZGVyIF9pbmZlcnJlZERhdGFCdWlsZGVyOwoKICBUeXBlR3JhcGhJbmZlcnJlcigKICAgICAgdGhpcy5fY29tcGlsZXIsIHRoaXMuY2xvc2VkV29ybGQsIHRoaXMuX2luZmVycmVkRGF0YUJ1aWxkZXIpOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ0dyYXBoIGluZmVycmVyJzsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBhbmFseXplTWFpbihGdW5jdGlvbkVudGl0eSBtYWluKSB7CiAgICBpbmZlcnJlciA9IGNyZWF0ZUluZmVycmVyRW5naW5lRm9yKG1haW4pOwogICAgaW5mZXJyZXIucnVuT3ZlckFsbEVsZW1lbnRzKCk7CiAgICByZXR1cm4gYnVpbGRSZXN1bHRzKCk7CiAgfQoKICBJbmZlcnJlckVuZ2luZSBjcmVhdGVJbmZlcnJlckVuZ2luZUZvcihGdW5jdGlvbkVudGl0eSBtYWluKSB7CiAgICByZXR1cm4gbmV3IEluZmVycmVyRW5naW5lSW1wbCgKICAgICAgICBfY29tcGlsZXIub3B0aW9ucywKICAgICAgICBfY29tcGlsZXIucHJvZ3Jlc3MsCiAgICAgICAgX2NvbXBpbGVyLnJlcG9ydGVyLAogICAgICAgIF9jb21waWxlci5vdXRwdXRQcm92aWRlciwKICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICBfY29tcGlsZXIuZnJvbnRlbmRTdHJhdGVneS5ub1N1Y2hNZXRob2RSZWdpc3RyeSwKICAgICAgICBtYWluLAogICAgICAgIF9pbmZlcnJlZERhdGFCdWlsZGVyKTsKICB9CgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0Q2FsbGVyc09mRm9yVGVzdGluZyhNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGluZmVycmVyLmdldENhbGxlcnNPZkZvclRlc3RpbmcoZWxlbWVudCk7CiAgfQoKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBidWlsZFJlc3VsdHMoKSB7CiAgICBpbmZlcnJlci5jbG9zZSgpOwoKICAgIE1hcDxNZW1iZXJFbnRpdHksIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQ+IG1lbWJlclJlc3VsdHMgPQogICAgICAgIDxNZW1iZXJFbnRpdHksIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQ+e307CiAgICBNYXA8TG9jYWwsIEFic3RyYWN0VmFsdWU+IHBhcmFtZXRlclJlc3VsdHMgPSA8TG9jYWwsIEFic3RyYWN0VmFsdWU+e307CgogICAgdm9pZCBjcmVhdGVNZW1iZXJSZXN1bHRzKAogICAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB0eXBlSW5mb3JtYXRpb24pIHsKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhIGRhdGEgPQogICAgICAgICAgaW5mZXJyZXIuZGF0YU9mTWVtYmVyKG1lbWJlcikuY29tcHJlc3MoKTsKICAgICAgYm9vbCBpc0pzSW50ZXJvcCA9IGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNKc0ludGVyb3BNZW1iZXIobWVtYmVyKTsKCiAgICAgIEFic3RyYWN0VmFsdWUgcmV0dXJuVHlwZTsKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlOwoKICAgICAgaWYgKGlzSnNJbnRlcm9wKSB7CiAgICAgICAgcmV0dXJuVHlwZSA9IHR5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSkgewogICAgICAgIHJldHVyblR5cGUgPSB0eXBlSW5mb3JtYXRpb24udHlwZTsKICAgICAgICB0eXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5mdW5jdGlvblR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuVHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICAgICAgdHlwZSA9IHR5cGVJbmZvcm1hdGlvbi50eXBlOwogICAgICB9CgogICAgICBib29sIHRocm93c0Fsd2F5cyA9CiAgICAgICAgICAvLyBBbHdheXMgdGhyb3dzIGlmIHRoZSByZXR1cm4gdHlwZSB3YXMgaW5mZXJyZWQgdG8gYmUgbm9uLW51bGwgZW1wdHkuCiAgICAgICAgICByZXR1cm5UeXBlICE9IG51bGwgJiYKICAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmlzRW1wdHkocmV0dXJuVHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZTsKCiAgICAgIGJvb2wgaXNDYWxsZWRPbmNlID0KICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbi5pc0NhbGxlZE9uY2UoKTsgLy9pc01lbWJlckNhbGxlZE9uY2UobWVtYmVyKTsKCiAgICAgIG1lbWJlclJlc3VsdHNbbWVtYmVyXSA9IG5ldyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0SW1wbCgKICAgICAgICAgIGRhdGEsIHJldHVyblR5cGUsIHR5cGUsCiAgICAgICAgICB0aHJvd3NBbHdheXM6IHRocm93c0Fsd2F5cywgaXNDYWxsZWRPbmNlOiBpc0NhbGxlZE9uY2UpOwogICAgfQoKICAgIFNldDxGaWVsZEVudGl0eT4gZnJlZVZhcmlhYmxlcyA9IG5ldyBTZXQ8RmllbGRFbnRpdHk+KCk7CiAgICBpbmZlcnJlci50eXBlcy5mb3JFYWNoTWVtYmVyVHlwZSgKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHR5cGVJbmZvcm1hdGlvbikgewogICAgICBjcmVhdGVNZW1iZXJSZXN1bHRzKG1lbWJlciwgdHlwZUluZm9ybWF0aW9uKTsKICAgICAgaWYgKG1lbWJlciBpcyBKQ2xvc3VyZUNhbGxNZXRob2QpIHsKICAgICAgICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGluZm8gPQogICAgICAgICAgICBjbG9zZWRXb3JsZC5jbG9zdXJlRGF0YUxvb2t1cC5nZXRTY29wZUluZm8obWVtYmVyKTsKICAgICAgICBpbmZvLmZvckVhY2hGcmVlVmFyaWFibGUoKExvY2FsIGZyb20sIEZpZWxkRW50aXR5IHRvKSB7CiAgICAgICAgICBmcmVlVmFyaWFibGVzLmFkZCh0byk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogICAgZm9yIChGaWVsZEVudGl0eSBmaWVsZCBpbiBmcmVlVmFyaWFibGVzKSB7CiAgICAgIGlmICghbWVtYmVyUmVzdWx0cy5jb250YWluc0tleShmaWVsZCkpIHsKICAgICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uID0KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZmllbGQpOwogICAgICAgIHR5cGVJbmZvcm1hdGlvbi5jb21wdXRlSXNDYWxsZWRPbmNlKCk7CiAgICAgICAgY3JlYXRlTWVtYmVyUmVzdWx0cyhmaWVsZCwgdHlwZUluZm9ybWF0aW9uKTsKICAgICAgfQogICAgfQoKICAgIGluZmVycmVyLnR5cGVzLmZvckVhY2hQYXJhbWV0ZXJUeXBlKAogICAgICAgIChMb2NhbCBwYXJhbWV0ZXIsIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiB0eXBlSW5mb3JtYXRpb24pIHsKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0gdHlwZUluZm9ybWF0aW9uLnR5cGU7CiAgICAgIHBhcmFtZXRlclJlc3VsdHNbcGFyYW1ldGVyXSA9IHR5cGU7CiAgICB9KTsKCiAgICBNYXA8aXIuVHJlZU5vZGUsIEFic3RyYWN0VmFsdWU+IGFsbG9jYXRlZExpc3RzID0KICAgICAgICA8aXIuVHJlZU5vZGUsIEFic3RyYWN0VmFsdWU+e307CiAgICBTZXQ8aXIuVHJlZU5vZGU+IGNoZWNrZWRGb3JHcm93YWJsZUxpc3RzID0gbmV3IFNldDxpci5UcmVlTm9kZT4oKTsKICAgIGluZmVycmVyLnR5cGVzLmFsbG9jYXRlZExpc3RzCiAgICAgICAgLmZvckVhY2goKGlyLlRyZWVOb2RlIG5vZGUsIExpc3RUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uKSB7CiAgICAgIExpc3RUeXBlSW5mb3JtYXRpb24gaW5mbyA9IGluZmVycmVyLnR5cGVzLmFsbG9jYXRlZExpc3RzW25vZGVdOwogICAgICBpZiAoaW5mby5jaGVja3NHcm93YWJsZSkgewogICAgICAgIGNoZWNrZWRGb3JHcm93YWJsZUxpc3RzLmFkZChub2RlKTsKICAgICAgfQogICAgICBhbGxvY2F0ZWRMaXN0c1tub2RlXSA9IHR5cGVJbmZvcm1hdGlvbi50eXBlOwogICAgfSk7CgogICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cyA9IG5ldyBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c0ltcGwoCiAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgX2luZmVycmVkRGF0YUJ1aWxkZXIuY2xvc2UoY2xvc2VkV29ybGQpLAogICAgICAgIG1lbWJlclJlc3VsdHMsCiAgICAgICAgcGFyYW1ldGVyUmVzdWx0cywKICAgICAgICBjaGVja2VkRm9yR3Jvd2FibGVMaXN0cywKICAgICAgICBpbmZlcnJlci5yZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0LAogICAgICAgIGFsbG9jYXRlZExpc3RzKTsKCiAgICBpbmZlcnJlci5jbGVhcigpOwoKICAgIHJldHVybiByZXN1bHRzOwogIH0KfQqAtQBOTjwBHQElASgaGyQrPBglHyAVAUs/RwwSRQEmJiEcHAQBLxYEAR0zHRQEASUBIgIBMxsiARwyARVEAScBMScBDEAuIxsEAUAjGxwcIhU5Dh8EAUg1BAEuFgFHO0sBHkYsNEsBIBoBGT0tKzEPNiUIARpRIEgBGkgBRyJDBgE9Jkc0KilAQCEMCAgvLzA7LzUIBgEpRjEqCAE1KEciS0YhKwgzCAFNFTEXGiEsGQEWARQEAgE2cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZV9ncmFwaF9pbmZlcnJlci5kYXJ0P3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9jb25zdGFudHMuZGFydJEILy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgdHlwZXMuY29uc3RhbnRzOwoKaW1wb3J0ICcuLi8uLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi8uLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ21hc2tzLmRhcnQnOwoKLy8vIENvbXB1dGVzIHRoZSBbVHlwZU1hc2tdIGZvciB0aGUgY29uc3RhbnQgW3ZhbHVlXS4KVHlwZU1hc2sgY29tcHV0ZVR5cGVNYXNrKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgewogIHJldHVybiB2YWx1ZS5hY2NlcHQoY29uc3QgQ29uc3RhbnRWYWx1ZVR5cGVNYXNrcygpLCBjbG9zZWRXb3JsZCk7Cn0KCmNsYXNzIENvbnN0YW50VmFsdWVUeXBlTWFza3MKICAgIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZVZpc2l0b3I8VHlwZU1hc2ssIEpDbG9zZWRXb3JsZD4gewogIGNvbnN0IENvbnN0YW50VmFsdWVUeXBlTWFza3MoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRDb25zdHJ1Y3RlZCgKICAgICAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKGNvbnN0YW50LnR5cGUuZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGU7CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb25zdGFudC50eXBlLmVsZW1lbnQsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0RGVmZXJyZWRHbG9iYWwoCiAgICAgIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY29uc3RhbnQucmVmZXJlbmNlZC5hY2NlcHQodGhpcywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXREb3VibGUoRG91YmxlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBXZSBoYXZlIHRvIHJlY29nbml6ZSBkb3VibGUgY29uc3RhbnRzIHRoYXQgYXJlICdpcyBpbnQnLgogICAgaWYgKGNvbnN0YW50X3N5c3RlbS5pc0ludChjb25zdGFudCkpIHsKICAgICAgaWYgKGNvbnN0YW50LmlzTWludXNaZXJvKSB7CiAgICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMxVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoY29uc3RhbnQuaXNQb3NpdGl2ZUluZmluaXR5IHx8IGNvbnN0YW50LmlzTmVnYXRpdmVJbmZpbml0eSk7CiAgICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0RHVtbXlJbnRlcmNlcHRvcigKICAgICAgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNvbnN0YW50LmFic3RyYWN0VmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdFVucmVhY2hhYmxlKAogICAgICBVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRKc05hbWUoSnNOYW1lQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRCb29sKEJvb2xDb25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRGdW5jdGlvbigKICAgICAgRnVuY3Rpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmZ1bmN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0SW5zdGFudGlhdGlvbigKICAgICAgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZnVuY3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRJbnQoSW50Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoY29uc3RhbnQuaXNVSW50MzEoKSkgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMxVHlwZTsKICAgIGlmIChjb25zdGFudC5pc1VJbnQzMigpKSByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzJUeXBlOwogICAgaWYgKGNvbnN0YW50LmlzUG9zaXRpdmUoKSkKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlOwogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0SW50ZXJjZXB0b3IoCiAgICAgIEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0TGlzdChMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5jb25zdExpc3RUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRTZXQoU2V0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5jb25zdFNldFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdE1hcChNYXBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnN0TWFwVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0TnVsbChOdWxsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5udWxsVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0Tm9uQ29uc3RhbnQoCiAgICAgIE5vbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ubnVsbFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdFN0cmluZyhTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnN0cmluZ1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdFR5cGUoVHlwZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udHlwZVR5cGU7CiAgfQp9CoCIAE5OPAEZAUImLRUBNkpEAgEdOyIBDB1FUToGSgQBDCBIOgQBDFFAKyI7D0w4CAY3BAEMIkojBAEMHUU2BAEMUTcEAQxNNQQBDBpCOQQBDB9HOQQBDEtQUB8+NAQBDB1FOAQBDE06BAEMSzkEAQxLOQQBDE01BAEMHT01BAEMUTcEAQxNNQQCATZwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvY29uc3RhbnRzLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydMAAUskvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9qdW1wcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaXIvY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZV9wcm92aWRlci5kYXJ0JzsKaW1wb3J0ICcuLi9pci91dGlsLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2Nsb3N1cmUuZGFydCcgc2hvdyBKUmVjb3JkRmllbGQ7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCcgc2hvdyBKR2VuZXJhdG9yQm9keTsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3NzYS90eXBlX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnY2xvc3VyZS5kYXJ0JzsKCi8vLyBJbnRlcmZhY2UgdGhhdCB0cmFuc2xhdGVzIGJldHdlZW4gS2VybmVsIElSIG5vZGVzIGFuZCBlbnRpdGllcyB1c2VkIGZvcgovLy8gZ2xvYmFsIHR5cGUgaW5mZXJlbmNlIGFuZCBidWlsZGluZyB0aGUgU1NBIGdyYXBoIGZvciBtZW1iZXJzLgphYnN0cmFjdCBjbGFzcyBKc1RvRWxlbWVudE1hcCB7CiAgLy8vIEFjY2VzcyB0byB0aGUgY29tbW9ubHkgdXNlZCBlbGVtZW50cyBhbmQgdHlwZXMuCiAgSkNvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKCiAgLy8vIEFjY2VzcyB0byB0aGUgW0RhcnRUeXBlc10gb2JqZWN0LgogIERhcnRUeXBlcyBnZXQgdHlwZXM7CgogIC8vLyBSZXR1cm5zIHRoZSBbRGFydFR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gW3R5cGVdLgogIERhcnRUeXBlIGdldERhcnRUeXBlKGlyLkRhcnRUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0ludGVyZmFjZVR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gW3R5cGVdLgogIEludGVyZmFjZVR5cGUgZ2V0SW50ZXJmYWNlVHlwZShpci5JbnRlcmZhY2VUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW1R5cGVWYXJpYWJsZVR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gW3R5cGVdLgogIFR5cGVWYXJpYWJsZVR5cGUgZ2V0VHlwZVZhcmlhYmxlVHlwZShpci5UeXBlUGFyYW1ldGVyVHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtGdW5jdGlvblR5cGVdIG9mIHRoZSBbbm9kZV0uCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShpci5GdW5jdGlvbk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm4gdGhlIFtJbnRlcmZhY2VUeXBlXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBbY2xzXSB3aXRoIHRoZSBnaXZlbgogIC8vLyBbdHlwZUFyZ3VtZW50c10uCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBpci5DbGFzcyBjbHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NhbGxTdHJ1Y3R1cmVdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFthcmd1bWVudHNdLgogIENhbGxTdHJ1Y3R1cmUgZ2V0Q2FsbFN0cnVjdHVyZShpci5Bcmd1bWVudHMgYXJndW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIFtTZWxlY3Rvcl0gY29ycmVzcG9uZGluZyB0byB0aGUgaW52b2NhdGlvbiBvciBnZXR0ZXIvc2V0dGVyCiAgLy8vIGFjY2VzcyBvZiBbbm9kZV0uCiAgU2VsZWN0b3IgZ2V0U2VsZWN0b3IoaXIuRXhwcmVzc2lvbiBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtNZW1iZXJFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1lbWJlciBbbm9kZV0uCiAgTWVtYmVyRW50aXR5IGdldE1lbWJlcihpci5NZW1iZXIgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRnVuY3Rpb25FbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb2NlZHVyZSBbbm9kZV0uCiAgRnVuY3Rpb25FbnRpdHkgZ2V0TWV0aG9kKGlyLlByb2NlZHVyZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDb25zdHJ1Y3RvckVudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgZ2VuZXJhdGl2ZSBvciBmYWN0b3J5CiAgLy8vIGNvbnN0cnVjdG9yIFtub2RlXS4KICBDb25zdHJ1Y3RvckVudGl0eSBnZXRDb25zdHJ1Y3Rvcihpci5NZW1iZXIgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRmllbGRFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpZWxkIFtub2RlXS4KICBGaWVsZEVudGl0eSBnZXRGaWVsZChpci5GaWVsZCBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDbGFzc0VudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgY2xhc3MgW25vZGVdLgogIENsYXNzRW50aXR5IGdldENsYXNzKGlyLkNsYXNzIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW1R5cGVkZWZUeXBlXSBjb3JyZXNwb25kaW5nIHRvIHJhdyB0eXBlIG9mIHRoZSB0eXBlZGVmIFtub2RlXS4KICBUeXBlZGVmVHlwZSBnZXRUeXBlZGVmVHlwZShpci5UeXBlZGVmIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgc3VwZXIgW01lbWJlckVudGl0eV0gZm9yIGEgc3VwZXIgaW52b2NhdGlvbiwgZ2V0IG9yIHNldCBvZgogIC8vLyBbbmFtZV0gZnJvbSB0aGUgbWVtYmVyIFtjb250ZXh0XS4KICBNZW1iZXJFbnRpdHkgZ2V0U3VwZXJNZW1iZXIoTWVtYmVyRW50aXR5IGNvbnRleHQsIGlyLk5hbWUgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pOwoKICAvLy8gUmV0dXJucyB0aGUgYG5vU3VjaE1ldGhvZGAgW0Z1bmN0aW9uRW50aXR5XSBjYWxsIGZyb20gYQogIC8vLyBgc3VwZXIubm9TdWNoTWV0aG9kYCBpbnZvY2F0aW9uIHdpdGhpbiBbY2xzXS4KICBGdW5jdGlvbkVudGl0eSBnZXRTdXBlck5vU3VjaE1ldGhvZChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgW05hbWVdIGNvcnJlc3BvbmRpbmcgdG8gW25hbWVdLgogIE5hbWUgZ2V0TmFtZShpci5OYW1lIG5hbWUpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtuYXRpdmUuTmF0aXZlQmVoYXZpb3JdIGZvciBhIGNhbGwgdG8gdGhlIFtKU10gZnVuY3Rpb24uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0NhbGwoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbbmF0aXZlLk5hdGl2ZUJlaGF2aW9yXSBmb3IgYSBjYWxsIHRvIHRoZSBbSlNfQlVJTFRJTl0KICAvLy8gZnVuY3Rpb24uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0J1aWx0aW5DYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgW25hdGl2ZS5OYXRpdmVCZWhhdmlvcl0gZm9yIGEgY2FsbCB0byB0aGUKICAvLy8gW0pTX0VNQkVEREVEX0dMT0JBTF0gZnVuY3Rpb24uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0VtYmVkZGVkR2xvYmFsQ2FsbCgKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbQ29uc3RhbnRWYWx1ZV0gZm9yIHRoZSBjb25zdGFudCBbZXhwcmVzc2lvbl0uCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTW92ZSB0byBbS2VybmVsVG9FbGVtZW50TWFwRm9yQnVpbGRpbmddLiBUaGlzIGlzIG9ubHkKICAvLyB1c2VkIGluIGltcGFjdCBidWlsZGVyIGZvciBzeW1ib2wgY29uc3RhbnRzLgogIENvbnN0YW50VmFsdWUgZ2V0Q29uc3RhbnRWYWx1ZShpci5FeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIHtib29sIHJlcXVpcmVDb25zdGFudDogdHJ1ZSwgYm9vbCBpbXBsaWNpdE51bGw6IGZhbHNlfSk7CgogIC8vLyBSZXR1cm4gdGhlIFtJbXBvcnRFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gW25vZGVdLgogIEltcG9ydEVudGl0eSBnZXRJbXBvcnQoaXIuTGlicmFyeURlcGVuZGVuY3kgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBkZWZpbml0aW9uIGluZm9ybWF0aW9uIGZvciBbY2xzXS4KICBDbGFzc0RlZmluaXRpb24gZ2V0Q2xhc3NEZWZpbml0aW9uKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gW0VsZW1lbnRFbnZpcm9ubWVudF0gZm9yIGxpYnJhcnksIGNsYXNzIGFuZCBtZW1iZXIgbG9va3VwLgogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudDsKCiAgLy8vIFJldHVybnMgdGhlIGxpc3Qgb2YgW0RhcnRUeXBlXXMgY29ycmVzcG9uZGluZyB0byBbdHlwZXNdLgogIExpc3Q8RGFydFR5cGU+IGdldERhcnRUeXBlcyhMaXN0PGlyLkRhcnRUeXBlPiB0eXBlcyk7CgogIC8vLyBSZXR1cm5zIHRoZSBkZWZpbml0aW9uIGluZm9ybWF0aW9uIGZvciBbbWVtYmVyXS4KICBNZW1iZXJEZWZpbml0aW9uIGdldE1lbWJlckRlZmluaXRpb24oTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBbaXIuTWVtYmVyXSBjb250YWluaW5nIHRoZSBkZWZpbml0aW9uIG9mIFttZW1iZXJdLCBpZiBhbnkuCiAgaXIuTWVtYmVyIGdldE1lbWJlckNvbnRleHROb2RlKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiBgdGhpc2AgaW4gW21lbWJlcl0sIG9yIGBudWxsYCBpZiBtZW1iZXIgaXMgZGVmaW5lZCBpbgogIC8vLyBhIHN0YXRpYyBjb250ZXh0LgogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIGhvdyBbbWVtYmVyXSBoYXMgYWNjZXNzIHRvIHR5cGUgdmFyaWFibGVzIG9mIHRoZSB0aGlzIHR5cGUKICAvLy8gcmV0dXJuZWQgYnkgW2dldE1lbWJlclRoaXNUeXBlXS4KICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXRDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzc0Zvck1lbWJlcigKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBbTGlicmFyeUVudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgbGlicmFyeSBbbm9kZV0uCiAgTGlicmFyeUVudGl0eSBnZXRMaWJyYXJ5KGlyLkxpYnJhcnkgbm9kZSk7CgogIC8vLyBSZXR1cm5zIGEgW1NwYW5uYWJsZV0gZm9yIGEgbWVzc2FnZSBwb2ludGluZyB0byB0aGUgSVIgW25vZGVdIGluIHRoZQogIC8vLyBjb250ZXh0IG9mIFttZW1iZXJdLgogIFNwYW5uYWJsZSBnZXRTcGFubmFibGUoTWVtYmVyRW50aXR5IG1lbWJlciwgaXIuTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIGNvbnN0cnVjdG9yIGJvZHkgZW50aXR5IGNvcnJlc3BvbmRpbmcgdG8gW2NvbnN0cnVjdG9yXS4KICBGdW5jdGlvbkVudGl0eSBnZXRDb25zdHJ1Y3RvckJvZHkoaXIuQ29uc3RydWN0b3Igbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBjb25zdHJ1Y3RvciBib2R5IGVudGl0eSBjb3JyZXNwb25kaW5nIHRvIFtmdW5jdGlvbl0uCiAgSkdlbmVyYXRvckJvZHkgZ2V0R2VuZXJhdG9yQm9keShGdW5jdGlvbkVudGl0eSBmdW5jdGlvbik7CgogIC8vLyBNYWtlIGEgcmVjb3JkIHRvIGVuc3VyZSB2YXJpYWJsZXMgdGhhdCBhcmUgYXJlIGRlY2xhcmVkIGluIG9uZSBzY29wZSBhbmQKICAvLy8gbW9kaWZpZWQgaW4gYW5vdGhlciBnZXQgdGhlaXIgdmFsdWVzIHVwZGF0ZWQgY29ycmVjdGx5LgogIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiBtYWtlUmVjb3JkQ29udGFpbmVyKAogICAgICBLZXJuZWxTY29wZUluZm8gaW5mbywgTWVtYmVyRW50aXR5IG1lbWJlciwgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwKTsKCiAgLy8vIFJldHVybnMgYSBwcm92aWRlciBmb3Igc3RhdGljIHR5cGVzIGZvciBbbWVtYmVyXS4KICBTdGF0aWNUeXBlUHJvdmlkZXIgZ2V0U3RhdGljVHlwZVByb3ZpZGVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwp9CgovLy8gSW50ZXJmYWNlIGZvciB0eXBlIGluZmVyZW5jZSByZXN1bHRzIGZvciBrZXJuZWwgSVIgbm9kZXMuCmFic3RyYWN0IGNsYXNzIEtlcm5lbFRvVHlwZUluZmVyZW5jZU1hcCB7CiAgLy8vIFJldHVybnMgdGhlIGluZmVycmVkIHJldHVybiB0eXBlIG9mIFtmdW5jdGlvbl0uCiAgQWJzdHJhY3RWYWx1ZSBnZXRSZXR1cm5UeXBlT2YoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgcmVjZWl2ZXIgdHlwZSBvZiB0aGUgZHluYW1pYyBbaW52b2NhdGlvbl0uCiAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGVPZkludm9jYXRpb24oCiAgICAgIGlyLk1ldGhvZEludm9jYXRpb24gaW52b2NhdGlvbiwgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKTsKCiAgLy8vIFJldHVybnMgdGhlIGluZmVycmVkIHJlY2VpdmVyIHR5cGUgb2YgdGhlIGR5bmFtaWMgW3JlYWRdLgogIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlT2ZHZXQoaXIuUHJvcGVydHlHZXQgcmVhZCk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCByZWNlaXZlciB0eXBlIG9mIHRoZSBkaXJlY3QgW3JlYWRdLgogIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlT2ZEaXJlY3RHZXQoaXIuRGlyZWN0UHJvcGVydHlHZXQgcmVhZCk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCByZWNlaXZlciB0eXBlIG9mIHRoZSBkeW5hbWljIFt3cml0ZV0uCiAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGVPZlNldCgKICAgICAgaXIuUHJvcGVydHlTZXQgd3JpdGUsIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbik7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCB0eXBlIG9mIFtsaXN0TGl0ZXJhbF0uCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZMaXN0TGl0ZXJhbCgKICAgICAgaXIuTGlzdExpdGVyYWwgbGlzdExpdGVyYWwsIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbik7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCB0eXBlIG9mIGl0ZXJhdG9yIGluIFtmb3JJblN0YXRlbWVudF0uCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvcihpci5Gb3JJblN0YXRlbWVudCBmb3JJblN0YXRlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCB0eXBlIG9mIGBjdXJyZW50YCBpbiBbZm9ySW5TdGF0ZW1lbnRdLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JDdXJyZW50KGlyLkZvckluU3RhdGVtZW50IGZvckluU3RhdGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIGluZmVycmVkIHR5cGUgb2YgYG1vdmVOZXh0YCBpbiBbZm9ySW5TdGF0ZW1lbnRdLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChpci5Gb3JJblN0YXRlbWVudCBmb3JJblN0YXRlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZm9ySW5TdGF0ZW1lbnRdIGlzIGluZmVycmVkIHRvIGJlIGEgSmF2YVNjcmlwdAogIC8vLyBpbmRleGFibGUgaXRlcmF0b3IuCiAgYm9vbCBpc0pzSW5kZXhhYmxlSXRlcmF0b3IoaXIuRm9ySW5TdGF0ZW1lbnQgZm9ySW5TdGF0ZW1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbik7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCBpbmRleCB0eXBlIG9mIFtmb3JJblN0YXRlbWVudF0uCiAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZEluZGV4VHlwZShpci5Gb3JJblN0YXRlbWVudCBmb3JJblN0YXRlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCB0eXBlIG9mIFttZW1iZXJdLgogIEFic3RyYWN0VmFsdWUgZ2V0SW5mZXJyZWRUeXBlT2YoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCB0eXBlIG9mIHRoZSBbcGFyYW1ldGVyXS4KICBBYnN0cmFjdFZhbHVlIGdldEluZmVycmVkVHlwZU9mUGFyYW1ldGVyKExvY2FsIHBhcmFtZXRlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCByZXN1bHQgdHlwZSBvZiBhIGR5bmFtaWMgW3NlbGVjdG9yXSBhY2Nlc3Mgb24gdGhlCiAgLy8vIFtyZWNlaXZlcl0uCiAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlT2ZTZWxlY3RvcihTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcik7CgogIC8vLyBSZXR1cm5zIHRoZSByZXR1cm5lZCB0eXBlIGFubm90YXRpb24gaW4gdGhlIFtuYXRpdmVCZWhhdmlvcl0uCiAgQWJzdHJhY3RWYWx1ZSB0eXBlRnJvbU5hdGl2ZUJlaGF2aW9yKAogICAgICBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKfQoKLy8vIE1hcCBmcm9tIGtlcm5lbCBJUiBub2RlcyB0byBsb2NhbCBlbnRpdGllcy4KYWJzdHJhY3QgY2xhc3MgS2VybmVsVG9Mb2NhbHNNYXAgewogIC8vLyBUaGUgbWVtYmVyIGN1cnJlbnRseSBiZWluZyBidWlsdC4KICBNZW1iZXJFbnRpdHkgZ2V0IGN1cnJlbnRNZW1iZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBbTG9jYWxdIGZvciBbbm9kZV0uCiAgTG9jYWwgZ2V0TG9jYWxWYXJpYWJsZShpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpOwoKICBMb2NhbCBnZXRMb2NhbFR5cGVWYXJpYWJsZSgKICAgICAgaXIuVHlwZVBhcmFtZXRlclR5cGUgbm9kZSwgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbaXIuRnVuY3Rpb25Ob2RlXSB0aGF0IGRlY2xhcmVkIFtwYXJhbWV0ZXJdLgogIGlyLkZ1bmN0aW9uTm9kZSBnZXRGdW5jdGlvbk5vZGVGb3JQYXJhbWV0ZXIoTG9jYWwgcGFyYW1ldGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIFtEYXJ0VHlwZV0gb2YgW2xvY2FsXS4KICBEYXJ0VHlwZSBnZXRMb2NhbFR5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgTG9jYWwgbG9jYWwpOwoKICAvLy8gUmV0dXJucyB0aGUgW0p1bXBUYXJnZXRdIGZvciB0aGUgYnJlYWsgc3RhdGVtZW50IFtub2RlXS4KICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JCcmVhayhpci5CcmVha1N0YXRlbWVudCBub2RlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtub2RlXSBzaG91bGQgZ2VuZXJhdGUgYSBgY29udGludWVgIHRvIGl0cyBbSnVtcFRhcmdldF0uCiAgYm9vbCBnZW5lcmF0ZUNvbnRpbnVlRm9yQnJlYWsoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbSnVtcFRhcmdldF0gZGVmaW5lZCBieSB0aGUgbGFiZWxsZWQgc3RhdGVtZW50IFtub2RlXSBvcgogIC8vLyBgbnVsbGAgaWYgW25vZGVdIGlzIG5vdCBhIGp1bXAgdGFyZ2V0LgogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvckxhYmVsKGlyLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbSnVtcFRhcmdldF0gZGVmaW5lZCBieSB0aGUgc3dpdGNoIHN0YXRlbWVudCBbbm9kZV0gb3IgYG51bGxgCiAgLy8vIGlmIFtub2RlXSBpcyBub3QgYSBqdW1wIHRhcmdldC4KICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JTd2l0Y2goaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0p1bXBUYXJnZXRdIGZvciB0aGUgY29udGludWUgc3dpdGNoIHN0YXRlbWVudCBbbm9kZV0uCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yQ29udGludWVTd2l0Y2goaXIuQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbSnVtcFRhcmdldF0gZGVmaW5lZCBieSB0aGUgc3dpdGNoIGNhc2UgW25vZGVdIG9yIGBudWxsYAogIC8vLyBpZiBbbm9kZV0gaXMgbm90IGEganVtcCB0YXJnZXQuCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yU3dpdGNoQ2FzZShpci5Td2l0Y2hDYXNlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0p1bXBUYXJnZXRdIGRlZmluZWQgdGhlIGRvIHN0YXRlbWVudCBbbm9kZV0gb3IgYG51bGxgCiAgLy8vIGlmIFtub2RlXSBpcyBub3QgYSBqdW1wIHRhcmdldC4KICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JEbyhpci5Eb1N0YXRlbWVudCBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtKdW1wVGFyZ2V0XSBkZWZpbmVkIGJ5IHRoZSBmb3Igc3RhdGVtZW50IFtub2RlXSBvciBgbnVsbGAKICAvLy8gaWYgW25vZGVdIGlzIG5vdCBhIGp1bXAgdGFyZ2V0LgogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvckZvcihpci5Gb3JTdGF0ZW1lbnQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbSnVtcFRhcmdldF0gZGVmaW5lZCBieSB0aGUgZm9yLWluIHN0YXRlbWVudCBbbm9kZV0gb3IgYG51bGxgCiAgLy8vIGlmIFtub2RlXSBpcyBub3QgYSBqdW1wIHRhcmdldC4KICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JGb3JJbihpci5Gb3JJblN0YXRlbWVudCBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtKdW1wVGFyZ2V0XSBkZWZpbmVkIGJ5IHRoZSB3aGlsZSBzdGF0ZW1lbnQgW25vZGVdIG9yIGBudWxsYAogIC8vLyBpZiBbbm9kZV0gaXMgbm90IGEganVtcCB0YXJnZXQuCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yV2hpbGUoaXIuV2hpbGVTdGF0ZW1lbnQgbm9kZSk7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0tlcm5lbFRvTG9jYWxzTWFwXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7Cn0KCi8vLyBSZXR1cm5zIHRoZSBbaXIuRnVuY3Rpb25Ob2RlXSB0aGF0IGRlZmluZXMgW21lbWJlcl0gb3IgYG51bGxgIGlmIFttZW1iZXJdCi8vLyBpcyBub3QgYSBjb25zdHJ1Y3RvciwgbWV0aG9kIG9yIGxvY2FsIGZ1bmN0aW9uLgppci5GdW5jdGlvbk5vZGUgZ2V0RnVuY3Rpb25Ob2RlKAogICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgTWVtYmVyRW50aXR5IG1lbWJlcikgewogIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihtZW1iZXIpOwogIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgaXIuTWVtYmVyIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgIHJldHVybiBub2RlLmZ1bmN0aW9uOwogICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yOgogICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keToKICAgICAgaXIuTWVtYmVyIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgIHJldHVybiBub2RlLmZ1bmN0aW9uOwogICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsOgogICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgIHJldHVybiBub2RlLmZ1bmN0aW9uOwogICAgZGVmYXVsdDoKICB9CiAgcmV0dXJuIG51bGw7Cn0KCi8vIFRPRE8oam9obm5pd2ludGhlcixlZm9ydHVuYSk6IEFkZCBtb3JlIHdoZW4gbmVlZGVkLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgd2Ugc3BsaXQgcmVndWxhciBpbnRvIG1ldGhvZCwgZmllbGQsIGV0Yy4/CmVudW0gTWVtYmVyS2luZCB7CiAgLy8vIEEgcmVndWxhciBtZW1iZXIgZGVmaW5lZCBieSBhbiBbaXIuTm9kZV0uCiAgcmVndWxhciwKCiAgLy8vIEEgY29uc3RydWN0b3Igd2hvc2UgaW5pdGlhbGl6ZXIgaXMgZGVmaW5lZCBieSBhbiBbaXIuQ29uc3RydWN0b3JdIG5vZGUuCiAgY29uc3RydWN0b3IsCgogIC8vLyBBIGNvbnN0cnVjdG9yIHdob3NlIGJvZHkgaXMgZGVmaW5lZCBieSBhbiBbaXIuQ29uc3RydWN0b3JdIG5vZGUuCiAgY29uc3RydWN0b3JCb2R5LAoKICAvLy8gQSBjbG9zdXJlIGNsYXNzIGBjYWxsYCBtZXRob2Qgd2hvc2UgYm9keSBpcyBkZWZpbmVkIGJ5IGFuCiAgLy8vIFtpci5Mb2NhbEZ1bmN0aW9uXS4KICBjbG9zdXJlQ2FsbCwKCiAgLy8vIEEgZmllbGQgY29ycmVzcG9uZGluZyB0byBhIGNhcHR1cmVkIHZhcmlhYmxlIGluIHRoZSBjbG9zdXJlLiBJdCBkb2VzIG5vdAogIC8vLyBoYXZlIGEgY29ycmVzcG9uZGluZyBpci5Ob2RlLgogIGNsb3N1cmVGaWVsZCwKCiAgLy8vIEEgbWV0aG9kIHRoYXQgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gKGluIHRoaXMgY2FzZSB0aGUgdHlwZSBvZgogIC8vLyB0aGUgY2xvc3VyZSBjbGFzcy4gSXQgZG9lcyBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgaXIuTm9kZSBvciBhIG1ldGhvZAogIC8vLyBib2R5LgogIHNpZ25hdHVyZSwKCiAgLy8vIEEgc2VwYXJhdGVkIGJvZHkgb2YgYSBnZW5lcmF0b3IgKHN5bmMqL2FzeW5jL2FzeW5jKikgZnVuY3Rpb24uCiAgZ2VuZXJhdG9yQm9keSwKfQoKLy8vIERlZmluaXRpb24gaW5mb3JtYXRpb24gZm9yIGEgW01lbWJlckVudGl0eV0uCmFic3RyYWN0IGNsYXNzIE1lbWJlckRlZmluaXRpb24gewogIC8vLyBUaGUga2luZCBvZiB0aGUgZGVmaW5lZCBtZW1iZXIuIFRoaXMgZGV0ZXJtaW5lcyB0aGUgc2VtYW50aWNzIG9mIFtub2RlXS4KICBNZW1iZXJLaW5kIGdldCBraW5kOwoKICAvLy8gVGhlIGRlZmluaW5nIFtpci5Ob2RlXSBmb3IgdGhpcyBtZW1iZXIsIGlmIHN1cHBvcnRlZCBieSBpdHMgW2tpbmRdLgogIC8vLwogIC8vLyBGb3IgYSByZWd1bGFyIGNsYXNzIHRoaXMgaXMgdGhlIFtpci5DbGFzc10gbm9kZS4gRm9yIGNsb3N1cmUgY2xhc3NlcyB0aGlzCiAgLy8vIG1pZ2h0IGJlIGFuIFtpci5GdW5jdGlvbkV4cHJlc3Npb25dIG5vZGUgaWYgbmVlZGVkLgogIGlyLk5vZGUgZ2V0IG5vZGU7CgogIC8vLyBUaGUgY2Fub25pY2FsIGxvY2F0aW9uIG9mIFttZW1iZXJdLiBUaGlzIGlzIHVzZWQgZm9yIHNvcnRpbmcgdGhlIG1lbWJlcnMKICAvLy8gaW4gdGhlIGVtaXR0ZWQgY29kZS4KICBTb3VyY2VTcGFuIGdldCBsb2NhdGlvbjsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtNZW1iZXJEZWZpbml0aW9uXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBNZW1iZXJLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oTWVtYmVyS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICAgIHJldHVybiBuZXcgUmVndWxhck1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keToKICAgICAgY2FzZSBNZW1iZXJLaW5kLnNpZ25hdHVyZToKICAgICAgY2FzZSBNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHk6CiAgICAgICAgcmV0dXJuIG5ldyBTcGVjaWFsTWVtYmVyRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBraW5kKTsKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsOgogICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUZpZWxkOgogICAgICAgIHJldHVybiBuZXcgQ2xvc3VyZU1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwga2luZCk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBNZW1iZXJLaW5kICRraW5kIik7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtNZW1iZXJEZWZpbml0aW9uXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7Cn0KCmVudW0gQ2xhc3NLaW5kIHsKICByZWd1bGFyLAogIGNsb3N1cmUsCiAgLy8gVE9ETyhlZm9ydHVuYSwgam9obm5pd2ludGhlcik6IFJlY29yZCBpcyBub3QgYSBjbGFzcywgYnV0IGlzCiAgLy8gbWFzcXVlcmFkaW5nIGFzIG9uZSBjdXJyZW50bHkgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG9sZCBlbGVtZW50IG1vZGVsLgogIHJlY29yZCwKfQoKLy8vIEEgbWVtYmVyIGRpcmVjdGx5IGRlZmluZWQgYnkgaXRzIFtpci5NZW1iZXJdIG5vZGUuCmNsYXNzIFJlZ3VsYXJNZW1iZXJEZWZpbml0aW9uIGltcGxlbWVudHMgTWVtYmVyRGVmaW5pdGlvbiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdyZWd1bGFyLW1lbWJlci1kZWZpbml0aW9uJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuTWVtYmVyIG5vZGU7CgogIFJlZ3VsYXJNZW1iZXJEZWZpbml0aW9uKHRoaXMubm9kZSk7CgogIGZhY3RvcnkgUmVndWxhck1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLk1lbWJlciBub2RlID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFJlZ3VsYXJNZW1iZXJEZWZpbml0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oTWVtYmVyS2luZC5yZWd1bGFyKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKG5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gZ2V0IGxvY2F0aW9uID0+IGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBNZW1iZXJLaW5kIGdldCBraW5kID0+IE1lbWJlcktpbmQucmVndWxhcjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1JlZ3VsYXJNZW1iZXJEZWZpbml0aW9uKGtpbmQ6JGtpbmQsJwogICAgICAnbm9kZTokbm9kZSxsb2NhdGlvbjokbG9jYXRpb24pJzsKfQoKLy8vIFRoZSBkZWZpbml0aW9uIG9mIGEgc3BlY2lhbCBraW5kIG9mIG1lbWJlcgpjbGFzcyBTcGVjaWFsTWVtYmVyRGVmaW5pdGlvbiBpbXBsZW1lbnRzIE1lbWJlckRlZmluaXRpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbU3BlY2lhbE1lbWJlckRlZmluaXRpb25dIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc3BlY2lhbC1tZW1iZXItZGVmaW5pdGlvbic7CgogIEBvdmVycmlkZQogIGZpbmFsIGlyLlRyZWVOb2RlIG5vZGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyS2luZCBraW5kOwoKICBTcGVjaWFsTWVtYmVyRGVmaW5pdGlvbih0aGlzLm5vZGUsIHRoaXMua2luZCk7CgogIGZhY3RvcnkgU3BlY2lhbE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLlRyZWVOb2RlIG5vZGUgPSBzb3VyY2UucmVhZFRyZWVOb2RlKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFNwZWNpYWxNZW1iZXJEZWZpbml0aW9uKG5vZGUsIGtpbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oa2luZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGUobm9kZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlU3BhbiBnZXQgbG9jYXRpb24gPT4gY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTcGVjaWFsTWVtYmVyRGVmaW5pdGlvbihraW5kOiRraW5kLCcKICAgICAgJ25vZGU6JG5vZGUsbG9jYXRpb246JGxvY2F0aW9uKSc7Cn0KCi8vLyBEZWZpbml0aW9uIGluZm9ybWF0aW9uIGZvciBhIFtDbGFzc0VudGl0eV0uCmFic3RyYWN0IGNsYXNzIENsYXNzRGVmaW5pdGlvbiB7CiAgLy8vIFRoZSBraW5kIG9mIHRoZSBkZWZpbmVkIGNsYXNzLiBUaGlzIGRldGVybWluZXMgdGhlIHNlbWFudGljcyBvZiBbbm9kZV0uCiAgQ2xhc3NLaW5kIGdldCBraW5kOwoKICAvLy8gVGhlIGRlZmluaW5nIFtpci5Ob2RlXSBmb3IgdGhpcyBjbGFzcywgaWYgc3VwcG9ydGVkIGJ5IGl0cyBba2luZF0uCiAgaXIuTm9kZSBnZXQgbm9kZTsKCiAgLy8vIFRoZSBjYW5vbmljYWwgbG9jYXRpb24gb2YgW2Nsc10uIFRoaXMgaXMgdXNlZCBmb3Igc29ydGluZyB0aGUgY2xhc3NlcwogIC8vLyBpbiB0aGUgZW1pdHRlZCBjb2RlLgogIFNvdXJjZVNwYW4gZ2V0IGxvY2F0aW9uOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0NsYXNzRGVmaW5pdGlvbl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDbGFzc0RlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBDbGFzc0tpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShDbGFzc0tpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIENsYXNzS2luZC5yZWd1bGFyOgogICAgICAgIHJldHVybiBuZXcgUmVndWxhckNsYXNzRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBDbGFzc0tpbmQuY2xvc3VyZToKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVDbGFzc0RlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgQ2xhc3NLaW5kLnJlY29yZDoKICAgICAgICByZXR1cm4gbmV3IFJlY29yZENvbnRhaW5lckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBDbGFzc0tpbmQgJGtpbmQiKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0NsYXNzRGVmaW5pdGlvbl0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwp9CgovLy8gQSBjbGFzcyBkaXJlY3RseSBkZWZpbmVkIGJ5IGl0cyBbaXIuQ2xhc3NdIG5vZGUuCmNsYXNzIFJlZ3VsYXJDbGFzc0RlZmluaXRpb24gaW1wbGVtZW50cyBDbGFzc0RlZmluaXRpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbUmVndWxhckNsYXNzRGVmaW5pdGlvbl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdyZWd1bGFyLWNsYXNzLWRlZmluaXRpb24nOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5DbGFzcyBub2RlOwoKICBSZWd1bGFyQ2xhc3NEZWZpbml0aW9uKHRoaXMubm9kZSk7CgogIGZhY3RvcnkgUmVndWxhckNsYXNzRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuQ2xhc3Mgbm9kZSA9IHNvdXJjZS5yZWFkQ2xhc3NOb2RlKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFJlZ3VsYXJDbGFzc0RlZmluaXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzc05vZGUobm9kZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlU3BhbiBnZXQgbG9jYXRpb24gPT4gY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSk7CgogIEBvdmVycmlkZQogIENsYXNzS2luZCBnZXQga2luZCA9PiBDbGFzc0tpbmQucmVndWxhcjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1JlZ3VsYXJDbGFzc0RlZmluaXRpb24oa2luZDoka2luZCwnCiAgICAgICdub2RlOiRub2RlLGxvY2F0aW9uOiRsb2NhdGlvbiknOwp9CgovLy8gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZXIgZm9yIFtmaWVsZF0uCi8vLwovLy8gSWYgW2ZpZWxkXSBpcyBhbiBpbnN0YW5jZSBmaWVsZCB3aXRoIGEgbnVsbCBsaXRlcmFsIGluaXRpYWxpemVyIGBudWxsYCBpcwovLy8gcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgaW5pdGlhbGl6ZXIgb2YgdGhlIFtpci5GaWVsZF0gaXMgcmV0dXJuZWQuCmlyLk5vZGUgZ2V0RmllbGRJbml0aWFsaXplcihKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBGaWVsZEVudGl0eSBmaWVsZCkgewogIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihmaWVsZCk7CiAgaXIuRmllbGQgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICBpZiAobm9kZS5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICFub2RlLmlzRmluYWwgJiYKICAgICAgbm9kZS5pbml0aWFsaXplciBpcyBpci5OdWxsTGl0ZXJhbCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiBub2RlLmluaXRpYWxpemVyOwp9Cgp2b2lkIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyQnlGdW5jdGlvbk5vZGUoCiAgICBpci5GdW5jdGlvbk5vZGUgbm9kZSwKICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICB2b2lkIGYoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIsIHtib29sIGlzT3B0aW9uYWwsIGJvb2wgaXNFbGlkZWR9KSwKICAgIHtib29sIHVzZU5hdGl2ZU9yZGVyaW5nOiBmYWxzZX0pIHsKICBmb3IgKGludCBwb3NpdGlvbiA9IDA7CiAgICAgIHBvc2l0aW9uIDwgbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7CiAgICAgIHBvc2l0aW9uKyspIHsKICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW3Bvc2l0aW9uXTsKICAgIGYodmFyaWFibGUsCiAgICAgICAgaXNPcHRpb25hbDogcG9zaXRpb24gPj0gcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVycywKICAgICAgICBpc0VsaWRlZDogcG9zaXRpb24gPj0gcGFyYW1ldGVyU3RydWN0dXJlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKTsKICB9CgogIGlmIChub2RlLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICByZXR1cm47CiAgfQoKICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycyA9IG5vZGUubmFtZWRQYXJhbWV0ZXJzLnRvTGlzdCgpOwogIGlmICh1c2VOYXRpdmVPcmRlcmluZykgewogICAgbmFtZWRQYXJhbWV0ZXJzLnNvcnQobmF0aXZlT3JkZXJpbmcpOwogIH0gZWxzZSB7CiAgICBuYW1lZFBhcmFtZXRlcnMuc29ydChuYW1lZE9yZGVyaW5nKTsKICB9CiAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIG5hbWVkUGFyYW1ldGVycykgewogICAgZih2YXJpYWJsZSwKICAgICAgICBpc09wdGlvbmFsOiB0cnVlLAogICAgICAgIGlzRWxpZGVkOiAhcGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5jb250YWlucyh2YXJpYWJsZS5uYW1lKSk7CiAgfQp9Cgp2b2lkIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyKEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLAogICAgdm9pZCBmKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyLCB7Ym9vbCBpc0VsaWRlZH0pKSB7CiAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9IGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZTsKCiAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIsCiAgICAgIHtib29sIGlzT3B0aW9uYWwsIGJvb2wgaXNFbGlkZWR9KSB7CiAgICBmKHBhcmFtZXRlciwgaXNFbGlkZWQ6IGlzRWxpZGVkKTsKICB9CgogIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihmdW5jdGlvbik7CiAgc3dpdGNoIChkZWZpbml0aW9uLmtpbmQpIHsKICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyQnlGdW5jdGlvbk5vZGUoCiAgICAgICAgICAgIG5vZGUuZnVuY3Rpb24sIHBhcmFtZXRlclN0cnVjdHVyZSwgaGFuZGxlUGFyYW1ldGVyKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyQnlGdW5jdGlvbk5vZGUoCiAgICAgICAgICAgIG5vZGUuZnVuY3Rpb24sIHBhcmFtZXRlclN0cnVjdHVyZSwgaGFuZGxlUGFyYW1ldGVyKTsKICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyQnlGdW5jdGlvbk5vZGUoCiAgICAgICAgICAgIG5vZGUuZnVuY3Rpb24sIHBhcmFtZXRlclN0cnVjdHVyZSwgaGFuZGxlUGFyYW1ldGVyKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUNhbGw6CiAgICAgIGlyLkxvY2FsRnVuY3Rpb24gbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXJCeUZ1bmN0aW9uTm9kZSgKICAgICAgICAgIG5vZGUuZnVuY3Rpb24sIHBhcmFtZXRlclN0cnVjdHVyZSwgaGFuZGxlUGFyYW1ldGVyKTsKICAgICAgcmV0dXJuOwogICAgZGVmYXVsdDoKICB9CiAgZmFpbGVkQXQoZnVuY3Rpb24sICJVbmV4cGVjdGVkIGZ1bmN0aW9uIGRlZmluaXRpb24gJGRlZmluaXRpb24uIik7Cn0KglQATk48ASgBGSNMJCEhITEdKho1OCIuIyokGBcBTEIgNiYBKBcBNioBOzkBPkMBMDYBSxclNgFEOgFOGCwBRSoBSi8BURo0AUMnAUMnAVEvAU0oQh0BPjQ4ATIeAUxHAUoQTgE9JTshAUJQMjs/ATk1ATRBAUEuAUA4ATc9AU03AVAYOAFJJz8cAUctAUsbPQFKOgFHPAFPPjBPAThBAgE+KjY6AUYqUAFAOAE/RAFBI0YBMiNMAUFCAUJJAUNKAUgaPzABO0UBLTgBND0BTRJRAUQoQAIBMCMoIgEmNwEePQE/QAEpQQE/PAFROQFLLT4BUCY+AUlOAUsmPQFJJjYBTSY4AVAmPAFPJjwBNScCAU40ITZIHR0oHCElKBwhLxwNBA8CATdKEjALAU4PAUcTAUAaDwFPJBABT04MDQFFEQIBMSJPFwFKBlA6FAFPGxsBPkM6FB9HIychJU0jJE0GPwQBNCcCARELC0JPCgIBNzxRHTkBDBgBJgFKFy4VLgQBDCgoFSATBAEMQgEMLQEMPSgCAS88UR05AQwaDBkBMQE2LBcuFTQEAQwoGhUeEwQBDEIBDD0oAgEwIU4WAUkUAUwbGwE9QjgUHkYeRh1JBj4EATMnAgE1OlAdOAEMFwElAUkXLBUtBAEMKBoVHxMEAQxCAQwrAQw8KAIBKQROR0xHIx8XLBEEGwIBLBorUCcZMxRLEEdIBAEmDAQBUBsqCykEPRAaUAQCAVFBRwE5KiYEAUodHSYiL0EQCA0hJSYiL0EQKy9BEAgNIS8tPw4NBEUCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL2luZmVycmVyX2VuZ2luZS5kYXJ0wADaVy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnOwppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9qc193b3JsZC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9sb2NhbHMuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdhYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnYnVpbGRlcl9rZXJuZWwuZGFydCc7CmltcG9ydCAnY2xvc3VyZV90cmFjZXIuZGFydCc7CmltcG9ydCAnZGVidWcuZGFydCcgYXMgZGVidWc7CmltcG9ydCAnbG9jYWxzX2hhbmRsZXIuZGFydCc7CmltcG9ydCAnbGlzdF90cmFjZXIuZGFydCc7CmltcG9ydCAnbWFwX3RyYWNlci5kYXJ0JzsKaW1wb3J0ICdzZXRfdHJhY2VyLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfZHVtcC5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX2luZmVycmVyLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfbm9kZXMuZGFydCc7CmltcG9ydCAndHlwZV9zeXN0ZW0uZGFydCc7CmltcG9ydCAndHlwZXMuZGFydCc7CgovLy8gQW4gaW5mZXJlbmNpbmcgZW5naW5lIHRoYXQgY29tcHV0ZXMgYSBjYWxsIGdyYXBoIG9mIFtUeXBlSW5mb3JtYXRpb25dIG5vZGVzCi8vLyBieSB2aXNpdGluZyB0aGUgQVNUIG9mIHRoZSBhcHBsaWNhdGlvbiwgYW5kIHRoZW4gZG9lcyB0aGUgaW5mZXJlbmNpbmcgb24gdGhlCi8vLyBncmFwaC4KYWJzdHJhY3QgY2xhc3MgSW5mZXJyZXJFbmdpbmUgewogIC8vLyBBIHNldCBvZiBzZWxlY3RvciBuYW1lcyB0aGF0IFtMaXN0XSBpbXBsZW1lbnRzLCB0aGF0IHdlIGtub3cgcmV0dXJuIHRoZWlyCiAgLy8vIGVsZW1lbnQgdHlwZS4KICBmaW5hbCBTZXQ8U2VsZWN0b3I+IHJldHVybnNMaXN0RWxlbWVudFR5cGVTZXQgPQogICAgICBuZXcgU2V0PFNlbGVjdG9yPi5mcm9tKDxTZWxlY3Rvcj5bCiAgICBuZXcgU2VsZWN0b3IuZ2V0dGVyKGNvbnN0IFB1YmxpY05hbWUoJ2ZpcnN0JykpLAogICAgbmV3IFNlbGVjdG9yLmdldHRlcihjb25zdCBQdWJsaWNOYW1lKCdsYXN0JykpLAogICAgbmV3IFNlbGVjdG9yLmdldHRlcihjb25zdCBQdWJsaWNOYW1lKCdzaW5nbGUnKSksCiAgICBuZXcgU2VsZWN0b3IuY2FsbChjb25zdCBQdWJsaWNOYW1lKCdzaW5nbGVXaGVyZScpLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpLAogICAgbmV3IFNlbGVjdG9yLmNhbGwoY29uc3QgUHVibGljTmFtZSgnZWxlbWVudEF0JyksIENhbGxTdHJ1Y3R1cmUuT05FX0FSRyksCiAgICBuZXcgU2VsZWN0b3IuaW5kZXgoKSwKICAgIG5ldyBTZWxlY3Rvci5jYWxsKGNvbnN0IFB1YmxpY05hbWUoJ3JlbW92ZUF0JyksIENhbGxTdHJ1Y3R1cmUuT05FX0FSRyksCiAgICBuZXcgU2VsZWN0b3IuY2FsbChjb25zdCBQdWJsaWNOYW1lKCdyZW1vdmVMYXN0JyksIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUykKICBdKTsKCiAgQ29tcGlsZXJPcHRpb25zIGdldCBvcHRpb25zOwoKICAvLy8gVGhlIFtKQ2xvc2VkV29ybGRdIG9uIHdoaWNoIGluZmVyZW5jZSByZWFzb25pbmcgaXMgYmFzZWQuCiAgSkNsb3NlZFdvcmxkIGdldCBjbG9zZWRXb3JsZDsKICBEaWFnbm9zdGljUmVwb3J0ZXIgZ2V0IHJlcG9ydGVyOwogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IGFic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgW0Nsb3NlZFdvcmxkXSBvcgogIC8vIFtDbG9zdXJlV29ybGRSZWZpbmVyXS4KICBOb1N1Y2hNZXRob2REYXRhIGdldCBub1N1Y2hNZXRob2REYXRhID0+IGNsb3NlZFdvcmxkLm5vU3VjaE1ldGhvZERhdGE7CgogIFR5cGVTeXN0ZW0gZ2V0IHR5cGVzOwogIE1hcDxpci5UcmVlTm9kZSwgVHlwZUluZm9ybWF0aW9uPiBnZXQgY29uY3JldGVUeXBlczsKICBJbmZlcnJlZERhdGFCdWlsZGVyIGdldCBpbmZlcnJlZERhdGFCdWlsZGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgbWFpbkVsZW1lbnQ7CgogIHZvaWQgcnVuT3ZlckFsbEVsZW1lbnRzKCk7CgogIHZvaWQgYW5hbHl6ZShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKICB2b2lkIGFuYWx5emVMaXN0QW5kRW5xdWV1ZShMaXN0VHlwZUluZm9ybWF0aW9uIGluZm8pOwogIHZvaWQgYW5hbHl6ZVNldEFuZEVucXVldWUoU2V0VHlwZUluZm9ybWF0aW9uIGluZm8pOwogIHZvaWQgYW5hbHl6ZU1hcEFuZEVucXVldWUoTWFwVHlwZUluZm9ybWF0aW9uIGluZm8pOwoKICAvLy8gTm90aWZpZXMgdG8gdGhlIGluZmVycmVyIHRoYXQgW2FuYWx5emVkRWxlbWVudF0gY2FuIGhhdmUgcmV0dXJuIHR5cGUKICAvLy8gW25ld1R5cGVdLiBbY3VycmVudFR5cGVdIGlzIHRoZSB0eXBlIHRoZSBpbmZlcmVuY2UgaGFzIGN1cnJlbnRseSBmb3VuZC4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgbmV3IHR5cGUgZm9yIFthbmFseXplZEVsZW1lbnRdLgogIFR5cGVJbmZvcm1hdGlvbiBhZGRSZXR1cm5UeXBlRm9yTWV0aG9kKAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBUeXBlSW5mb3JtYXRpb24gdW51c2VkLCBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSk7CgogIC8vLyBBcHBsaWVzIFtmXSB0byBhbGwgZWxlbWVudHMgaW4gdGhlIHVuaXZlcnNlIHRoYXQgbWF0Y2ggW3NlbGVjdG9yXSBhbmQKICAvLy8gW21hc2tdLiBJZiBbZl0gcmV0dXJucyBmYWxzZSwgYWJvcnRzIHRoZSBpdGVyYXRpb24uCiAgdm9pZCBmb3JFYWNoRWxlbWVudE1hdGNoaW5nKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrLCBib29sIGYoTWVtYmVyRW50aXR5IGVsZW1lbnQpKTsKCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlSW5mb3JtYXRpb25dIG5vZGUgZm9yIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcGFyYW1ldGVyLgogIC8vLyBJZiB0aGlzIGlzIHF1ZXJpZWQgYmVmb3JlIGl0IGlzIHNldCBieSBbc2V0RGVmYXVsdFR5cGVPZlBhcmFtZXRlcl0sIGEKICAvLy8gW1BsYWNlaG9sZGVyVHlwZUluZm9ybWF0aW9uXSBpcyByZXR1cm5lZCwgd2hpY2ggd2lsbCBsYXRlciBiZSByZXBsYWNlZAogIC8vLyBieSB0aGUgYWN0dWFsIG5vZGUgd2hlbiBbc2V0RGVmYXVsdFR5cGVPZlBhcmFtZXRlcl0gaXMgY2FsbGVkLgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IEFmdGVyIGdyYXBoIGNvbnN0cnVjdGlvbiwgbm8gW1BsYWNlaG9sZGVyVHlwZUluZm9ybWF0aW9uXSBub2RlcwogIC8vLyBzaG91bGQgYmUgcHJlc2VudCBhbmQgYSBkZWZhdWx0IHR5cGUgZm9yIGVhY2ggcGFyYW1ldGVyIHNob3VsZCBleGlzdC4KICBUeXBlSW5mb3JtYXRpb24gZ2V0RGVmYXVsdFR5cGVPZlBhcmFtZXRlcihMb2NhbCBwYXJhbWV0ZXIpOwoKICAvLy8gVGhpcyBoZWxwZXIgYnJlYWtzIGFic3RyYWN0aW9ucyBidXQgaXMgY3VycmVudGx5IHJlcXVpcmVkIHRvIHdvcmsgYXJvdW5kCiAgLy8vIHRoZSB3cm9uZyBtb2RlbGluZyBvZiBkZWZhdWx0IHZhbHVlcyBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzIG9mCiAgLy8vIHN5bnRoZXRpYyBjb25zdHJ1Y3RvcnMuCiAgLy8vCiAgLy8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSBvbmNlIGRlZmF1bHQgdmFsdWVzIG9mIHN5bnRoZXRpYyBwYXJhbWV0ZXJzCiAgLy8vIGFyZSBmaXhlZC4KICBib29sIGhhc0FscmVhZHlDb21wdXRlZFR5cGVPZlBhcmFtZXRlckRlZmF1bHQoTG9jYWwgcGFyYW1ldGVyKTsKCiAgLy8vIFNldHMgdGhlIHR5cGUgb2YgYSBwYXJhbWV0ZXIncyBkZWZhdWx0IHZhbHVlIHRvIFt0eXBlXS4gSWYgdGhlIGdsb2JhbAogIC8vLyBtYXBwaW5nIGluIFtkZWZhdWx0VHlwZU9mUGFyYW1ldGVyXSBhbHJlYWR5IGNvbnRhaW5zIGEgdHlwZSwgaXQgbXVzdCBiZQogIC8vLyBhIFtQbGFjZWhvbGRlclR5cGVJbmZvcm1hdGlvbl0sIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQuIEFsbCBpdHMgdXNlcyBhcmUKICAvLy8gdXBkYXRlZC4KICB2b2lkIHNldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIoTG9jYWwgcGFyYW1ldGVyLCBUeXBlSW5mb3JtYXRpb24gdHlwZSwKICAgICAge2Jvb2wgaXNJbnN0YW5jZU1lbWJlcn0pOwoKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldENhbGxlcnNPZkZvclRlc3RpbmcoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYWtlIHRoaXMgcHJpdmF0ZSBhZ2Fpbi4KICBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEgZGF0YU9mTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgYm9vbCBjaGVja0lmRXhwb3Nlc1RoaXMoQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCk7CgogIHZvaWQgcmVjb3JkRXhwb3Nlc1RoaXMoQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCwgYm9vbCBleHBvc2VzVGhpcyk7CgogIC8vLyBSZWNvcmRzIHRoYXQgdGhlIHJldHVybiB0eXBlIFtlbGVtZW50XSBpcyBvZiB0eXBlIFt0eXBlXS4KICB2b2lkIHJlY29yZFJldHVyblR5cGUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgVHlwZUluZm9ybWF0aW9uIHR5cGUpOwoKICAvLy8gUmVjb3JkcyB0aGF0IFtlbGVtZW50XSBpcyBvZiB0eXBlIFt0eXBlXS4KICB2b2lkIHJlY29yZFR5cGVPZkZpZWxkKEZpZWxkRW50aXR5IGVsZW1lbnQsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKTsKCiAgLy8vIFJlZ2lzdGVycyBhIGNhbGwgdG8gYXdhaXQgd2l0aCBhbiBleHByZXNzaW9uIG9mIHR5cGUgW2FyZ3VtZW50VHlwZV0gYXMKICAvLy8gYXJndW1lbnQuCiAgVHlwZUluZm9ybWF0aW9uIHJlZ2lzdGVyQXdhaXQoaXIuTm9kZSBub2RlLCBUeXBlSW5mb3JtYXRpb24gYXJndW1lbnQpOwoKICAvLy8gUmVnaXN0ZXJzIGEgY2FsbCB0byB5aWVsZCB3aXRoIGFuIGV4cHJlc3Npb24gb2YgdHlwZSBbYXJndW1lbnRUeXBlXSBhcwogIC8vLyBhcmd1bWVudC4KICBUeXBlSW5mb3JtYXRpb24gcmVnaXN0ZXJZaWVsZChpci5Ob2RlIG5vZGUsIFR5cGVJbmZvcm1hdGlvbiBhcmd1bWVudCk7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBbY2FsbGVyXSBjYWxscyBbY2xvc3VyZV0gd2l0aCBbYXJndW1lbnRzXS4KICAvLy8KICAvLy8gW3NpZGVFZmZlY3RzQnVpbGRlcl0gd2lsbCBiZSB1cGRhdGVkIHRvIGluY29ycG9yYXRlIHRoZSBwb3RlbnRpYWwgY2FsbGVlcycKICAvLy8gc2lkZSBlZmZlY3RzLgogIC8vLwogIC8vLyBbaW5Mb29wXSB0ZWxscyB3aGV0aGVyIHRoZSBjYWxsIGhhcHBlbnMgaW4gYSBsb29wLgogIFR5cGVJbmZvcm1hdGlvbiByZWdpc3RlckNhbGxlZENsb3N1cmUoCiAgICAgIGlyLk5vZGUgbm9kZSwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgVHlwZUluZm9ybWF0aW9uIGNsb3N1cmUsCiAgICAgIE1lbWJlckVudGl0eSBjYWxsZXIsCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cywKICAgICAgU2lkZUVmZmVjdHNCdWlsZGVyIHNpZGVFZmZlY3RzQnVpbGRlciwKICAgICAge2Jvb2wgaW5Mb29wfSk7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBbY2FsbGVyXSBjYWxscyBbY2FsbGVlXSBhdCBsb2NhdGlvbiBbbm9kZV0sIHdpdGgKICAvLy8gW3NlbGVjdG9yXSwgYW5kIFthcmd1bWVudHNdLiBOb3RlIHRoYXQgW3NlbGVjdG9yXSBpcyBudWxsIGZvciBmb3J3YXJkaW5nCiAgLy8vIGNvbnN0cnVjdG9ycy4KICAvLy8KICAvLy8gW3NpZGVFZmZlY3RzQnVpbGRlcl0gd2lsbCBiZSB1cGRhdGVkIHRvIGluY29ycG9yYXRlIFtjYWxsZWVdJ3Mgc2lkZQogIC8vLyBlZmZlY3RzLgogIC8vLwogIC8vLyBbaW5Mb29wXSB0ZWxscyB3aGV0aGVyIHRoZSBjYWxsIGhhcHBlbnMgaW4gYSBsb29wLgogIFR5cGVJbmZvcm1hdGlvbiByZWdpc3RlckNhbGxlZE1lbWJlcigKICAgICAgT2JqZWN0IG5vZGUsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIE1lbWJlckVudGl0eSBjYWxsZXIsCiAgICAgIE1lbWJlckVudGl0eSBjYWxsZWUsCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cywKICAgICAgU2lkZUVmZmVjdHNCdWlsZGVyIHNpZGVFZmZlY3RzQnVpbGRlciwKICAgICAgYm9vbCBpbkxvb3ApOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW2NhbGxlcl0gY2FsbHMgW3NlbGVjdG9yXSB3aXRoIFtyZWNlaXZlclR5cGVdIGFzIHJlY2VpdmVyLAogIC8vLyBhbmQgW2FyZ3VtZW50c10uCiAgLy8vCiAgLy8vIFtzaWRlRWZmZWN0c0J1aWxkZXJdIHdpbGwgYmUgdXBkYXRlZCB0byBpbmNvcnBvcmF0ZSB0aGUgcG90ZW50aWFsIGNhbGxlZXMnCiAgLy8vIHNpZGUgZWZmZWN0cy4KICAvLy8KICAvLy8gW2luTG9vcF0gdGVsbHMgd2hldGhlciB0aGUgY2FsbCBoYXBwZW5zIGluIGEgbG9vcC4KICBUeXBlSW5mb3JtYXRpb24gcmVnaXN0ZXJDYWxsZWRTZWxlY3RvcigKICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUsCiAgICAgIGlyLk5vZGUgbm9kZSwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSwKICAgICAgTWVtYmVyRW50aXR5IGNhbGxlciwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBTaWRlRWZmZWN0c0J1aWxkZXIgc2lkZUVmZmVjdHNCdWlsZGVyLAogICAgICB7Ym9vbCBpbkxvb3AsCiAgICAgIGJvb2wgaXNDb25kaXRpb25hbH0pOwoKICAvLy8gVXBkYXRlIHRoZSBhc3NpZ25tZW50cyB0byBwYXJhbWV0ZXJzIGluIHRoZSBncmFwaC4gW3JlbW92ZV0gdGVsbHMgd2hldGhlcgogIC8vLyBhc3NpZ25tZW50cyBtdXN0IGJlIGFkZGVkIG9yIHJlbW92ZWQuIElmIFtpbml0XSBpcyBmYWxzZSwgcGFyYW1ldGVycyBhcmUKICAvLy8gYWRkZWQgdG8gdGhlIHdvcmsgcXVldWUuCiAgdm9pZCB1cGRhdGVQYXJhbWV0ZXJBc3NpZ25tZW50cyhUeXBlSW5mb3JtYXRpb24gY2FsbGVyLCBNZW1iZXJFbnRpdHkgY2FsbGVlLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMsIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIHtib29sIHJlbW92ZSwgYm9vbCBhZGRUb1F1ZXVlOiB0cnVlfSk7CgogIHZvaWQgdXBkYXRlU2VsZWN0b3JJbk1lbWJlcihNZW1iZXJFbnRpdHkgb3duZXIsIENhbGxUeXBlIGNhbGxUeXBlLAogICAgICBpci5Ob2RlIG5vZGUsIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spOwoKICAvLy8gUmV0dXJucyB0aGUgcmV0dXJuIHR5cGUgb2YgW2VsZW1lbnRdLgogIFR5cGVJbmZvcm1hdGlvbiByZXR1cm5UeXBlT2ZNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiBbZWxlbWVudF0gd2hlbiBiZWluZyBjYWxsZWQgd2l0aCBbc2VsZWN0b3JdLgogIFR5cGVJbmZvcm1hdGlvbiB0eXBlT2ZNZW1iZXJXaXRoU2VsZWN0b3IoCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LCBTZWxlY3RvciBzZWxlY3Rvcik7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIFtlbGVtZW50XS4KICBUeXBlSW5mb3JtYXRpb24gdHlwZU9mTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgW2VsZW1lbnRdLgogIFR5cGVJbmZvcm1hdGlvbiB0eXBlT2ZQYXJhbWV0ZXIoTG9jYWwgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIGZvciBbbmF0aXZlQmVoYXZpb3JdLiBTZWUgZG9jdW1lbnRhdGlvbiBvbgogIC8vLyBbTmF0aXZlQmVoYXZpb3JdLgogIFR5cGVJbmZvcm1hdGlvbiB0eXBlT2ZOYXRpdmVCZWhhdmlvcihOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvcik7CgogIGJvb2wgcmV0dXJuc0xpc3RFbGVtZW50VHlwZShTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKTsKCiAgYm9vbCByZXR1cm5zTWFwVmFsdWVUeXBlKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spOwoKICB2b2lkIGNsb3NlKCk7CgogIHZvaWQgY2xlYXIoKTsKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBnbG9iYWwgb3B0aW1pemF0aW9ucyBzdWNoIGFzIHR5cGUgaW5mZXJlbmNpbmcgY2FuIGFwcGx5IHRvCiAgLy8vIHRoZSBmaWVsZCBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIE9uZSBjYXRlZ29yeSBvZiBlbGVtZW50cyB0aGF0IGRvIG5vdCBhcHBseSBpcyBydW50aW1lIGhlbHBlcnMgdGhhdCB0aGUKICAvLy8gYmFja2VuZCBjYWxscywgYnV0IHRoZSBvcHRpbWl6YXRpb25zIGRvbid0IHNlZSB0aG9zZSBjYWxscy4KICBib29sIGNhbkZpZWxkQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9ucyhGaWVsZEVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBnbG9iYWwgb3B0aW1pemF0aW9ucyBzdWNoIGFzIHR5cGUgaW5mZXJlbmNpbmcgY2FuIGFwcGx5IHRvCiAgLy8vIHRoZSBwYXJhbWV0ZXIgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBPbmUgY2F0ZWdvcnkgb2YgZWxlbWVudHMgdGhhdCBkbyBub3QgYXBwbHkgaXMgcnVudGltZSBoZWxwZXJzIHRoYXQgdGhlCiAgLy8vIGJhY2tlbmQgY2FsbHMsIGJ1dCB0aGUgb3B0aW1pemF0aW9ucyBkb24ndCBzZWUgdGhvc2UgY2FsbHMuCiAgYm9vbCBjYW5GdW5jdGlvblBhcmFtZXRlcnNCZVVzZWRGb3JHbG9iYWxPcHRpbWl6YXRpb25zKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBpbmZlcmVuY2Ugb2YgcGFyYW1ldGVyIHR5cGVzIGlzIGRpc2FibGVkIGZvciBbbWVtYmVyXS4KICBib29sIGFzc3VtZUR5bmFtaWMoTWVtYmVyRW50aXR5IG1lbWJlcik7Cn0KCmNsYXNzIEluZmVycmVyRW5naW5lSW1wbCBleHRlbmRzIEluZmVycmVyRW5naW5lIHsKICBmaW5hbCBNYXA8TG9jYWwsIFR5cGVJbmZvcm1hdGlvbj4gZGVmYXVsdFR5cGVPZlBhcmFtZXRlciA9CiAgICAgIG5ldyBNYXA8TG9jYWwsIFR5cGVJbmZvcm1hdGlvbj4oKTsKICBmaW5hbCBXb3JrUXVldWUgd29ya1F1ZXVlID0gbmV3IFdvcmtRdWV1ZSgpOwogIEBvdmVycmlkZQogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IG1haW5FbGVtZW50OwogIGZpbmFsIFNldDxNZW1iZXJFbnRpdHk+IGFuYWx5emVkRWxlbWVudHMgPSBuZXcgU2V0PE1lbWJlckVudGl0eT4oKTsKCiAgLy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB3ZSBhbGxvdyBhIG5vZGUgaW4gdGhlIGdyYXBoIHRvCiAgLy8vIGNoYW5nZSB0eXBlcy4gSWYgYSBub2RlIHJlYWNoZXMgdGhhdCBsaW1pdCwgd2UgZ2l2ZSB1cAogIC8vLyBpbmZlcmVuY2luZyBvbiBpdCBhbmQgZ2l2ZSBpdCB0aGUgZHluYW1pYyB0eXBlLgogIGZpbmFsIGludCBNQVhfQ0hBTkdFX0NPVU5UID0gNjsKCiAgaW50IG92ZXJhbGxSZWZpbmVDb3VudCA9IDA7CiAgaW50IGFkZGVkSW5HcmFwaCA9IDA7CgogIEBvdmVycmlkZQogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zOwogIGZpbmFsIFByb2dyZXNzIHByb2dyZXNzOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBmaW5hbCBDb21waWxlck91dHB1dCBfY29tcGlsZXJPdXRwdXQ7CgogIEBvdmVycmlkZQogIGZpbmFsIEpzQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgSW5mZXJyZWREYXRhQnVpbGRlciBpbmZlcnJlZERhdGFCdWlsZGVyOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBUeXBlU3lzdGVtIHR5cGVzOwogIEBvdmVycmlkZQogIGZpbmFsIE1hcDxpci5UcmVlTm9kZSwgVHlwZUluZm9ybWF0aW9uPiBjb25jcmV0ZVR5cGVzID0KICAgICAgbmV3IE1hcDxpci5UcmVlTm9kZSwgVHlwZUluZm9ybWF0aW9uPigpOwoKICBmaW5hbCBTZXQ8Q29uc3RydWN0b3JFbnRpdHk+IGdlbmVyYXRpdmVDb25zdHJ1Y3RvcnNFeHBvc2luZ1RoaXMgPQogICAgICBuZXcgU2V0PENvbnN0cnVjdG9yRW50aXR5PigpOwoKICAvLy8gRGF0YSBjb21wdXRlZCBpbnRlcm5hbGx5IHdpdGhpbiBlbGVtZW50cywgbGlrZSB0aGUgdHlwZS1tYXNrIG9mIGEgc2VuZCBhCiAgLy8vIGxpc3QgYWxsb2NhdGlvbiwgb3IgYSBmb3ItaW4gbG9vcC4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGE+IF9tZW1iZXJEYXRhID0KICAgICAgbmV3IE1hcDxNZW1iZXJFbnRpdHksIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YT4oKTsKCiAgZmluYWwgTm9TdWNoTWV0aG9kUmVnaXN0cnkgbm9TdWNoTWV0aG9kUmVnaXN0cnk7CgogIEluZmVycmVyRW5naW5lSW1wbCgKICAgICAgdGhpcy5vcHRpb25zLAogICAgICB0aGlzLnByb2dyZXNzLAogICAgICB0aGlzLnJlcG9ydGVyLAogICAgICB0aGlzLl9jb21waWxlck91dHB1dCwKICAgICAgdGhpcy5jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5ub1N1Y2hNZXRob2RSZWdpc3RyeSwKICAgICAgdGhpcy5tYWluRWxlbWVudCwKICAgICAgdGhpcy5pbmZlcnJlZERhdGFCdWlsZGVyKQogICAgICA6IHRoaXMudHlwZXMgPSBuZXcgVHlwZVN5c3RlbSgKICAgICAgICAgICAgY2xvc2VkV29ybGQsIG5ldyBLZXJuZWxUeXBlU3lzdGVtU3RyYXRlZ3koY2xvc2VkV29ybGQpKTsKCiAgRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+IGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoRWxlbWVudE1hdGNoaW5nKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrLCBib29sIGYoTWVtYmVyRW50aXR5IGVsZW1lbnQpKSB7CiAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGVsZW1lbnRzID0gY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgbWFzayk7CiAgICBmb3IgKE1lbWJlckVudGl0eSBlIGluIGVsZW1lbnRzKSB7CiAgICAgIGlmICghZihlKSkgcmV0dXJuOwogICAgfQogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWFrZSB0aGlzIHByaXZhdGUgYWdhaW4uCiAgQG92ZXJyaWRlCiAgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhIGRhdGFPZk1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgPT4KICAgICAgX21lbWJlckRhdGFbZWxlbWVudF0gPz89IG5ldyBLZXJuZWxHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEoKTsKCiAgLy8vIFVwZGF0ZSBbc2lkZUVmZmVjdHNdIHdpdGggdGhlIHNpZGUgZWZmZWN0cyBvZiBbY2FsbGVlXSBiZWluZwogIC8vLyBjYWxsZWQgd2l0aCBbc2VsZWN0b3JdLgogIHZvaWQgdXBkYXRlU2lkZUVmZmVjdHMoU2lkZUVmZmVjdHNCdWlsZGVyIHNpZGVFZmZlY3RzQnVpbGRlciwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIE1lbWJlckVudGl0eSBjYWxsZWUpIHsKICAgIGlmIChjYWxsZWUuaXNGaWVsZCkgewogICAgICBpZiAoY2FsbGVlLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgICAgIHNpZGVFZmZlY3RzQnVpbGRlci5zZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpOwogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgICAgIHNpZGVFZmZlY3RzQnVpbGRlci5zZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2lkZUVmZmVjdHNCdWlsZGVyLnNldEFsbFNpZGVFZmZlY3RzQW5kRGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICAgICAgc2lkZUVmZmVjdHNCdWlsZGVyLnNldENoYW5nZXNTdGF0aWNQcm9wZXJ0eSgpOwogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgICAgIHNpZGVFZmZlY3RzQnVpbGRlci5zZXREZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3JlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNpZGVFZmZlY3RzQnVpbGRlci5zZXRBbGxTaWRlRWZmZWN0c0FuZERlcGVuZHNPblNvbWV0aGluZygpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChjYWxsZWUuaXNHZXR0ZXIgJiYgIXNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIHNpZGVFZmZlY3RzQnVpbGRlci5zZXRBbGxTaWRlRWZmZWN0c0FuZERlcGVuZHNPblNvbWV0aGluZygpOwogICAgfSBlbHNlIHsKICAgICAgc2lkZUVmZmVjdHNCdWlsZGVyCiAgICAgICAgICAuYWRkSW5wdXQoaW5mZXJyZWREYXRhQnVpbGRlci5nZXRTaWRlRWZmZWN0c0J1aWxkZXIoY2FsbGVlKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdHlwZU9mTmF0aXZlQmVoYXZpb3IoTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IpIHsKICAgIGlmIChuYXRpdmVCZWhhdmlvciA9PSBudWxsKSByZXR1cm4gdHlwZXMuZHluYW1pY1R5cGU7CiAgICBMaXN0IHR5cGVzUmV0dXJuZWQgPSBuYXRpdmVCZWhhdmlvci50eXBlc1JldHVybmVkOwogICAgaWYgKHR5cGVzUmV0dXJuZWQuaXNFbXB0eSkgcmV0dXJuIHR5cGVzLmR5bmFtaWNUeXBlOwogICAgVHlwZUluZm9ybWF0aW9uIHJldHVyblR5cGU7CiAgICBmb3IgKHZhciB0eXBlIGluIHR5cGVzUmV0dXJuZWQpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG1hcHBlZFR5cGU7CiAgICAgIGlmICh0eXBlID09IFNwZWNpYWxUeXBlLkpzT2JqZWN0KSB7CiAgICAgICAgbWFwcGVkVHlwZSA9IHR5cGVzLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyk7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5zdHJpbmdUeXBlKSB7CiAgICAgICAgbWFwcGVkVHlwZSA9IHR5cGVzLnN0cmluZ1R5cGU7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5pbnRUeXBlKSB7CiAgICAgICAgbWFwcGVkVHlwZSA9IHR5cGVzLmludFR5cGU7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5udW1UeXBlIHx8CiAgICAgICAgICB0eXBlID09IGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGUpIHsKICAgICAgICAvLyBOb3RlOiB0aGUgYmFja2VuZCBkb3VibGUgY2xhc3MgaXMgc3BlY2lmaWNhbGx5IGZvciBub24taW50ZWdlcgogICAgICAgIC8vIGRvdWJsZXMsIGFuZCBhIG5hdGl2ZSBiZWhhdmlvciByZXR1cm5pbmcgJ2RvdWJsZScgZG9lcyBub3QgZ3VhcmFudGVlCiAgICAgICAgLy8gYSBub24taW50ZWdlciByZXR1cm4gdHlwZSwgc28gd2UgcmV0dXJuIHRoZSBudW1iZXIgdHlwZSBmb3IgdGhvc2UuCiAgICAgICAgbWFwcGVkVHlwZSA9IHR5cGVzLm51bVR5cGU7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5ib29sVHlwZSkgewogICAgICAgIG1hcHBlZFR5cGUgPSB0eXBlcy5ib29sVHlwZTsKICAgICAgfSBlbHNlIGlmICh0eXBlID09IGNvbW1vbkVsZW1lbnRzLm51bGxUeXBlKSB7CiAgICAgICAgbWFwcGVkVHlwZSA9IHR5cGVzLm51bGxUeXBlOwogICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWb2lkKSB7CiAgICAgICAgbWFwcGVkVHlwZSA9IHR5cGVzLm51bGxUeXBlOwogICAgICB9IGVsc2UgaWYgKHR5cGUuaXNEeW5hbWljKSB7CiAgICAgICAgcmV0dXJuIHR5cGVzLmR5bmFtaWNUeXBlOwogICAgICB9IGVsc2UgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgbWFwcGVkVHlwZSA9IHR5cGVzLm5vbk51bGxTdWJ0eXBlKHR5cGUuZWxlbWVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWFwcGVkVHlwZSA9IHR5cGVzLmR5bmFtaWNUeXBlOwogICAgICB9CiAgICAgIHJldHVyblR5cGUgPSB0eXBlcy5jb21wdXRlTFVCKHJldHVyblR5cGUsIG1hcHBlZFR5cGUpOwogICAgICBpZiAocmV0dXJuVHlwZSA9PSB0eXBlcy5keW5hbWljVHlwZSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmV0dXJuVHlwZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlU2VsZWN0b3JJbk1lbWJlcihNZW1iZXJFbnRpdHkgb3duZXIsIENhbGxUeXBlIGNhbGxUeXBlLAogICAgICBpci5Ob2RlIG5vZGUsIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIEtlcm5lbEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBkYXRhID0gZGF0YU9mTWVtYmVyKG93bmVyKTsKICAgIGFzc2VydCh2YWxpZENhbGxUeXBlKGNhbGxUeXBlLCBub2RlKSk7CiAgICBzd2l0Y2ggKGNhbGxUeXBlKSB7CiAgICAgIGNhc2UgQ2FsbFR5cGUuYWNjZXNzOgogICAgICAgIGRhdGEuc2V0VHlwZU1hc2sobm9kZSwgbWFzayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ2FsbFR5cGUuZm9ySW46CiAgICAgICAgaWYgKHNlbGVjdG9yID09IFNlbGVjdG9ycy5pdGVyYXRvcikgewogICAgICAgICAgZGF0YS5zZXRJdGVyYXRvclR5cGVNYXNrKG5vZGUsIG1hc2spOwogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IgPT0gU2VsZWN0b3JzLmN1cnJlbnQpIHsKICAgICAgICAgIGRhdGEuc2V0Q3VycmVudFR5cGVNYXNrKG5vZGUsIG1hc2spOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQoc2VsZWN0b3IgPT0gU2VsZWN0b3JzLm1vdmVOZXh0KTsKICAgICAgICAgIGRhdGEuc2V0TW92ZU5leHRUeXBlTWFzayhub2RlLCBtYXNrKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNoZWNrSWZFeHBvc2VzVGhpcyhDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZ2VuZXJhdGl2ZUNvbnN0cnVjdG9yc0V4cG9zaW5nVGhpcy5jb250YWlucyhlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkRXhwb3Nlc1RoaXMoQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCwgYm9vbCBleHBvc2VzVGhpcykgewogICAgaWYgKGV4cG9zZXNUaGlzKSB7CiAgICAgIGdlbmVyYXRpdmVDb25zdHJ1Y3RvcnNFeHBvc2luZ1RoaXMuYWRkKGVsZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZXR1cm5zTGlzdEVsZW1lbnRUeXBlKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIHJldHVybiBtYXNrICE9IG51bGwgJiYKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmlzQ29udGFpbmVyKG1hc2spICYmCiAgICAgICAgcmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldC5jb250YWlucyhzZWxlY3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHJldHVybnNNYXBWYWx1ZVR5cGUoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgcmV0dXJuIG1hc2sgIT0gbnVsbCAmJiBhYnN0cmFjdFZhbHVlRG9tYWluLmlzTWFwKG1hc2spICYmIHNlbGVjdG9yLmlzSW5kZXg7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFuYWx5emVMaXN0QW5kRW5xdWV1ZShMaXN0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChpbmZvLmFuYWx5emVkKSByZXR1cm47CiAgICBpbmZvLmFuYWx5emVkID0gdHJ1ZTsKCiAgICBMaXN0VHJhY2VyVmlzaXRvciB0cmFjZXIgPSBuZXcgTGlzdFRyYWNlclZpc2l0b3IoaW5mbywgdGhpcyk7CiAgICBib29sIHN1Y2NlZWRlZCA9IHRyYWNlci5ydW4oKTsKICAgIGlmICghc3VjY2VlZGVkKSByZXR1cm47CgogICAgaW5mby5iYWlsZWRPdXQgPSBmYWxzZTsKICAgIGluZm8uZWxlbWVudFR5cGUuaW5mZXJyZWQgPSB0cnVlOwogICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNTcGVjaWFsaXphdGlvbk9mKAogICAgICAgIGluZm8ub3JpZ2luYWxUeXBlLCBhYnN0cmFjdFZhbHVlRG9tYWluLmZpeGVkTGlzdFR5cGUpKSB7CiAgICAgIGluZm8uY2hlY2tzR3Jvd2FibGUgPSB0cmFjZXIuY2FsbHNHcm93YWJsZU1ldGhvZDsKICAgIH0KICAgIHRyYWNlci5hc3NpZ25tZW50cy5mb3JFYWNoKGluZm8uZWxlbWVudFR5cGUuYWRkQXNzaWdubWVudCk7CiAgICAvLyBFbnF1ZXVlIHRoZSBsaXN0IGZvciBsYXRlciByZWZpbmVtZW50CiAgICB3b3JrUXVldWUuYWRkKGluZm8pOwogICAgd29ya1F1ZXVlLmFkZChpbmZvLmVsZW1lbnRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYW5hbHl6ZVNldEFuZEVucXVldWUoU2V0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChpbmZvLmFuYWx5emVkKSByZXR1cm47CiAgICBpbmZvLmFuYWx5emVkID0gdHJ1ZTsKCiAgICBTZXRUcmFjZXJWaXNpdG9yIHRyYWNlciA9IG5ldyBTZXRUcmFjZXJWaXNpdG9yKGluZm8sIHRoaXMpOwogICAgYm9vbCBzdWNjZWVkZWQgPSB0cmFjZXIucnVuKCk7CiAgICBpZiAoIXN1Y2NlZWRlZCkgcmV0dXJuOwoKICAgIGluZm8uYmFpbGVkT3V0ID0gZmFsc2U7CiAgICBpbmZvLmVsZW1lbnRUeXBlLmluZmVycmVkID0gdHJ1ZTsKCiAgICB0cmFjZXIuYXNzaWdubWVudHMuZm9yRWFjaChpbmZvLmVsZW1lbnRUeXBlLmFkZEFzc2lnbm1lbnQpOwogICAgLy8gRW5xdWV1ZSB0aGUgc2V0IGZvciBsYXRlciByZWZpbmVtZW50LgogICAgd29ya1F1ZXVlLmFkZChpbmZvKTsKICAgIHdvcmtRdWV1ZS5hZGQoaW5mby5lbGVtZW50VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFuYWx5emVNYXBBbmRFbnF1ZXVlKE1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpZiAoaW5mby5hbmFseXplZCkgcmV0dXJuOwogICAgaW5mby5hbmFseXplZCA9IHRydWU7CiAgICBNYXBUcmFjZXJWaXNpdG9yIHRyYWNlciA9IG5ldyBNYXBUcmFjZXJWaXNpdG9yKGluZm8sIHRoaXMpOwoKICAgIGJvb2wgc3VjY2VlZGVkID0gdHJhY2VyLnJ1bigpOwogICAgaWYgKCFzdWNjZWVkZWQpIHJldHVybjsKCiAgICBpbmZvLmJhaWxlZE91dCA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFjZXIua2V5QXNzaWdubWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGUgPSBpbmZvLmFkZEVudHJ5QXNzaWdubWVudChhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICAgICAgdHJhY2VyLmtleUFzc2lnbm1lbnRzW2ldLCB0cmFjZXIudmFsdWVBc3NpZ25tZW50c1tpXSk7CiAgICAgIGlmIChuZXdUeXBlICE9IG51bGwpIHdvcmtRdWV1ZS5hZGQobmV3VHlwZSk7CiAgICB9CiAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBtYXAgaW4gdHJhY2VyLm1hcEFzc2lnbm1lbnRzKSB7CiAgICAgIHdvcmtRdWV1ZS5hZGRBbGwoaW5mby5hZGRNYXBBc3NpZ25tZW50KGFic3RyYWN0VmFsdWVEb21haW4sIG1hcCkpOwogICAgfQoKICAgIGluZm8ubWFya0FzSW5mZXJyZWQoKTsKICAgIHdvcmtRdWV1ZS5hZGQoaW5mby5rZXlUeXBlKTsKICAgIHdvcmtRdWV1ZS5hZGQoaW5mby52YWx1ZVR5cGUpOwogICAgd29ya1F1ZXVlLmFkZEFsbChpbmZvLnR5cGVJbmZvTWFwLnZhbHVlcyk7CiAgICB3b3JrUXVldWUuYWRkKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBydW5PdmVyQWxsRWxlbWVudHMoKSB7CiAgICBhbmFseXplQWxsRWxlbWVudHMoKTsKICAgIFR5cGVHcmFwaER1bXAgZHVtcCA9CiAgICAgICAgZGVidWcuUFJJTlRfR1JBUEggPyBuZXcgVHlwZUdyYXBoRHVtcChfY29tcGlsZXJPdXRwdXQsIHRoaXMpIDogbnVsbDsKCiAgICBkdW1wPy5iZWZvcmVBbmFseXNpcygpOwogICAgYnVpbGRXb3JrUXVldWUoKTsKICAgIHJlZmluZSgpOwoKICAgIC8vIFRyeSB0byBpbmZlciBlbGVtZW50IHR5cGVzIG9mIGxpc3RzIGFuZCBjb21wdXRlIHRoZWlyIGVzY2FwZSBpbmZvcm1hdGlvbi4KICAgIHR5cGVzLmFsbG9jYXRlZExpc3RzLnZhbHVlcy5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgICBhbmFseXplTGlzdEFuZEVucXVldWUoaW5mbyk7CiAgICB9KTsKCiAgICAvLyBUcnkgdG8gaW5mZXIgZWxlbWVudCB0eXBlcyBvZiBzZXRzIGFuZCBjb21wdXRlIHRoZWlyIGVzY2FwZSBpbmZvcm1hdGlvbi4KICAgIHR5cGVzLmFsbG9jYXRlZFNldHMudmFsdWVzLmZvckVhY2goKFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAgIGFuYWx5emVTZXRBbmRFbnF1ZXVlKGluZm8pOwogICAgfSk7CgogICAgLy8gVHJ5IHRvIGluZmVyIHRoZSBrZXkgYW5kIHZhbHVlIHR5cGVzIGZvciBtYXBzIGFuZCBjb21wdXRlIHRoZSB2YWx1ZXMnCiAgICAvLyBlc2NhcGUgaW5mb3JtYXRpb24uCiAgICB0eXBlcy5hbGxvY2F0ZWRNYXBzLnZhbHVlcy5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgICBhbmFseXplTWFwQW5kRW5xdWV1ZShpbmZvKTsKICAgIH0pOwoKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gYmFpbGVkT3V0T24gPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICAgIC8vIFRyYWNlIGNsb3N1cmVzIHRvIHBvdGVudGlhbGx5IGluZmVyIGFyZ3VtZW50IHR5cGVzLgogICAgdHlwZXMuYWxsb2NhdGVkQ2xvc3VyZXMuZm9yRWFjaCgoZHluYW1pYyBpbmZvKSB7CiAgICAgIHZvaWQgdHJhY2UoCiAgICAgICAgICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZWxlbWVudHMsIENsb3N1cmVUcmFjZXJWaXNpdG9yIHRyYWNlcikgewogICAgICAgIHRyYWNlci5ydW4oKTsKICAgICAgICBpZiAoIXRyYWNlci5jb250aW51ZUFuYWx5emluZykgewogICAgICAgICAgZWxlbWVudHMuZm9yRWFjaCgoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgICAgICAgICBpbmZlcnJlZERhdGFCdWlsZGVyLnJlZ2lzdGVyTWlnaHRCZVBhc3NlZFRvQXBwbHkoZWxlbWVudCk7CiAgICAgICAgICAgIGlmIChkZWJ1Zy5WRVJCT1NFKSB7CiAgICAgICAgICAgICAgcHJpbnQoInRyYWNlZCBjbG9zdXJlICRlbGVtZW50IGFzICR7dHJ1ZX0gKGJhaWwpIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHlwZXMuc3RyYXRlZ3kuZm9yRWFjaFBhcmFtZXRlcihlbGVtZW50LCAoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICAgICAgICAgICAgdHlwZXMKICAgICAgICAgICAgICAgICAgLmdldEluZmVycmVkVHlwZU9mUGFyYW1ldGVyKHBhcmFtZXRlcikKICAgICAgICAgICAgICAgICAgLmdpdmVVcCh0aGlzLCBjbGVhckFzc2lnbm1lbnRzOiBmYWxzZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgICBiYWlsZWRPdXRPbi5hZGRBbGwoZWxlbWVudHMpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBlbGVtZW50cwogICAgICAgICAgICAud2hlcmUoKGUpID0+ICFiYWlsZWRPdXRPbi5jb250YWlucyhlKSkKICAgICAgICAgICAgLmZvckVhY2goKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgICAgICAgIHR5cGVzLnN0cmF0ZWd5LmZvckVhY2hQYXJhbWV0ZXIoZWxlbWVudCwgKExvY2FsIHBhcmFtZXRlcikgewogICAgICAgICAgICBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gaW5mbyA9CiAgICAgICAgICAgICAgICB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihwYXJhbWV0ZXIpOwogICAgICAgICAgICBpbmZvLm1heWJlUmVzdW1lKCk7CiAgICAgICAgICAgIHdvcmtRdWV1ZS5hZGQoaW5mbyk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICh0cmFjZXIudHJhY2VkVHlwZS5taWdodEJlUGFzc2VkVG9GdW5jdGlvbkFwcGx5KSB7CiAgICAgICAgICAgIGluZmVycmVkRGF0YUJ1aWxkZXIucmVnaXN0ZXJNaWdodEJlUGFzc2VkVG9BcHBseShlbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChkZWJ1Zy5WRVJCT1NFKSB7CiAgICAgICAgICAgIHByaW50KCJ0cmFjZWQgY2xvc3VyZSAkZWxlbWVudCBhcyAiCiAgICAgICAgICAgICAgICAiJHtpbmZlcnJlZERhdGFCdWlsZGVyLmdldEN1cnJlbnRseUtub3duTWlnaHRCZVBhc3NlZFRvQXBwbHkoZWxlbWVudCl9Iik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGlmIChpbmZvIGlzIENsb3N1cmVUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZWxlbWVudHMgPSBbaW5mby5jbG9zdXJlXTsKICAgICAgICB0cmFjZShlbGVtZW50cywgbmV3IENsb3N1cmVUcmFjZXJWaXNpdG9yKGVsZW1lbnRzLCBpbmZvLCB0aGlzKSk7CiAgICAgIH0gZWxzZSBpZiAoaW5mbyBpcyBDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbikgewogICAgICAgIGlmIChpbmZvIGlzIFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uICYmCiAgICAgICAgICAgIGluZm8uc2VsZWN0b3IgIT0gbnVsbCAmJgogICAgICAgICAgICBpbmZvLnNlbGVjdG9yLmlzQ2FsbCkgewogICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGNhbGwgdG8gYSBjbGFzcyB3aXRoIGEgY2FsbCBtZXRob2QuIFNvIHdlCiAgICAgICAgICAvLyBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIG1ldGhvZCBoZXJlLgogICAgICAgICAgRnVuY3Rpb25FbnRpdHkgY2FsbGVkRWxlbWVudCA9IGluZm8uY2FsbGVkRWxlbWVudDsKICAgICAgICAgIGFzc2VydChjYWxsZWRFbGVtZW50IGlzIENvbnN0cnVjdG9yRW50aXR5ICYmCiAgICAgICAgICAgICAgY2FsbGVkRWxlbWVudC5pc0dlbmVyYXRpdmVDb25zdHJ1Y3Rvcik7CiAgICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBjYWxsZWRFbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICAgICAgRnVuY3Rpb25FbnRpdHkgY2FsbE1ldGhvZCA9IGxvb2t1cENhbGxNZXRob2QoY2xzKTsKICAgICAgICAgIGFzc2VydChjYWxsTWV0aG9kICE9IG51bGwsIGZhaWxlZEF0KGNscykpOwogICAgICAgICAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGVsZW1lbnRzID0gW2NhbGxNZXRob2RdOwogICAgICAgICAgdHJhY2UoZWxlbWVudHMsIG5ldyBDbG9zdXJlVHJhY2VyVmlzaXRvcihlbGVtZW50cywgaW5mbywgdGhpcykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIGZ1bmN0aW9ucyBoZXJlLCBhcyBvdGhlciB0YXJnZXRzCiAgICAgICAgICAvLyBvZiB0aGlzIGNsb3N1cmUgY2FsbCBhcmUgbm90IGEgcm9vdCB0byB0cmFjZSBidXQgYW4gaW50ZXJtZWRpYXRlCiAgICAgICAgICAvLyBmb3Igc29tZSBvdGhlciBmdW5jdGlvbi4KICAgICAgICAgIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBlbGVtZW50cyA9IG5ldyBMaXN0PEZ1bmN0aW9uRW50aXR5Pi5mcm9tKAogICAgICAgICAgICAgIGluZm8uY2FsbGVlcy53aGVyZSgoZSkgPT4gZS5pc0Z1bmN0aW9uKSk7CiAgICAgICAgICB0cmFjZShlbGVtZW50cywgbmV3IENsb3N1cmVUcmFjZXJWaXNpdG9yKGVsZW1lbnRzLCBpbmZvLCB0aGlzKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGluZm8gaXMgTWVtYmVyVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgdHJhY2UoPEZ1bmN0aW9uRW50aXR5PltpbmZvLm1lbWJlcl0sCiAgICAgICAgICAgIG5ldyBTdGF0aWNUZWFyT2ZmQ2xvc3VyZVRyYWNlclZpc2l0b3IoaW5mby5tZW1iZXIsIGluZm8sIHRoaXMpKTsKICAgICAgfSBlbHNlIGlmIChpbmZvIGlzIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbikgewogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICdVbmV4cGVjdGVkIGNsb3N1cmUgYWxsb2NhdGlvbiBpbmZvICRpbmZvJyk7CiAgICAgIH0KICAgIH0pOwoKICAgIGR1bXA/LmJlZm9yZVRyYWNpbmcoKTsKCiAgICAvLyBSZXNldCBhbGwgbm9kZXMgdGhhdCB1c2UgbGlzdHMvbWFwcyB0aGF0IGhhdmUgYmVlbiBpbmZlcnJlZCwgYXMgd2VsbAogICAgLy8gYXMgbm9kZXMgdGhhdCB1c2UgZWxlbWVudHMgZmV0Y2hlZCBmcm9tIHRoZXNlIGxpc3RzL21hcHMuIFRoZQogICAgLy8gd29ya3NldCBmb3IgYSBuZXcgcnVuIG9mIHRoZSBhbmFseXNpcyB3aWxsIGJlIHRoZXNlIG5vZGVzLgogICAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gc2VlblR5cGVzID0gbmV3IFNldDxUeXBlSW5mb3JtYXRpb24+KCk7CiAgICB3aGlsZSAoIXdvcmtRdWV1ZS5pc0VtcHR5KSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBpbmZvID0gd29ya1F1ZXVlLnJlbW92ZSgpOwogICAgICBpZiAoc2VlblR5cGVzLmNvbnRhaW5zKGluZm8pKSBjb250aW51ZTsKICAgICAgLy8gSWYgdGhlIG5vZGUgY2Fubm90IGJlIHJlc2V0LCB3ZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgaXRzIHVzZXJzIGVpdGhlci4KICAgICAgaWYgKCFpbmZvLnJlc2V0KHRoaXMpKSBjb250aW51ZTsKICAgICAgc2VlblR5cGVzLmFkZChpbmZvKTsKICAgICAgd29ya1F1ZXVlLmFkZEFsbChpbmZvLnVzZXJzKTsKICAgIH0KCiAgICB3b3JrUXVldWUuYWRkQWxsKHNlZW5UeXBlcyk7CiAgICByZWZpbmUoKTsKCiAgICBpZiAoZGVidWcuUFJJTlRfU1VNTUFSWSkgewogICAgICB0eXBlcy5hbGxvY2F0ZWRMaXN0cy52YWx1ZXMuZm9yRWFjaCgoX2luZm8pIHsKICAgICAgICBMaXN0VHlwZUluZm9ybWF0aW9uIGluZm8gPSBfaW5mbzsKICAgICAgICBwcmludCgnJHtpbmZvLnR5cGV9ICcKICAgICAgICAgICAgJ2ZvciAke2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbk5vZGUoaW5mby5vcmlnaW5hbFR5cGUpfSAnCiAgICAgICAgICAgICdhdCAke2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbkVsZW1lbnQoaW5mby5vcmlnaW5hbFR5cGUpfScKICAgICAgICAgICAgJ2FmdGVyICR7aW5mby5yZWZpbmVDb3VudH0nKTsKICAgICAgfSk7CiAgICAgIHR5cGVzLmFsbG9jYXRlZFNldHMudmFsdWVzLmZvckVhY2goKF9pbmZvKSB7CiAgICAgICAgU2V0VHlwZUluZm9ybWF0aW9uIGluZm8gPSBfaW5mbzsKICAgICAgICBwcmludCgnJHtpbmZvLnR5cGV9ICcKICAgICAgICAgICAgJ2ZvciAke2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbk5vZGUoaW5mby5vcmlnaW5hbFR5cGUpfSAnCiAgICAgICAgICAgICdhdCAke2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbkVsZW1lbnQoaW5mby5vcmlnaW5hbFR5cGUpfSAnCiAgICAgICAgICAgICdhZnRlciAke2luZm8ucmVmaW5lQ291bnR9Jyk7CiAgICAgIH0pOwogICAgICB0eXBlcy5hbGxvY2F0ZWRNYXBzLnZhbHVlcy5mb3JFYWNoKChfaW5mbykgewogICAgICAgIE1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvID0gX2luZm87CiAgICAgICAgcHJpbnQoJyR7aW5mby50eXBlfSAnCiAgICAgICAgICAgICdmb3IgJHthYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25Ob2RlKGluZm8ub3JpZ2luYWxUeXBlKX0gJwogICAgICAgICAgICAnYXQgJHthYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25FbGVtZW50KGluZm8ub3JpZ2luYWxUeXBlKX0nCiAgICAgICAgICAgICdhZnRlciAke2luZm8ucmVmaW5lQ291bnR9Jyk7CiAgICAgIH0pOwogICAgICB0eXBlcy5hbGxvY2F0ZWRDbG9zdXJlcy5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgICAgIGlmIChpbmZvIGlzIEVsZW1lbnRUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICAgIHByaW50KCcke2luZm8uZ2V0SW5mZXJyZWRTaWduYXR1cmUodHlwZXMpfSBmb3IgJwogICAgICAgICAgICAgICcke2luZm8uZGVidWdOYW1lfScpOwogICAgICAgIH0gZWxzZSBpZiAoaW5mbyBpcyBDbG9zdXJlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgICBwcmludCgnJHtpbmZvLmdldEluZmVycmVkU2lnbmF0dXJlKHR5cGVzKX0gZm9yICcKICAgICAgICAgICAgICAnJHtpbmZvLmRlYnVnTmFtZX0nKTsKICAgICAgICB9IGVsc2UgaWYgKGluZm8gaXMgRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgICBpZiAoaW5mby5oYXNDbG9zdXJlQ2FsbFRhcmdldHMpIHsKICAgICAgICAgICAgcHJpbnQoJzxDbG9zdXJlLmNhbGw+Jyk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKE1lbWJlckVudGl0eSB0YXJnZXQgaW4gaW5mby5jb25jcmV0ZVRhcmdldHMpIHsKICAgICAgICAgICAgaWYgKHRhcmdldCBpcyBGdW5jdGlvbkVudGl0eSkgewogICAgICAgICAgICAgIHByaW50KCcke3R5cGVzLmdldEluZmVycmVkU2lnbmF0dXJlT2ZNZXRob2QodGFyZ2V0KX0gJwogICAgICAgICAgICAgICAgICAnZm9yICR7dGFyZ2V0fScpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHByaW50KCcke3R5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKHRhcmdldCkudHlwZX0gJwogICAgICAgICAgICAgICAgICAnZm9yICR7dGFyZ2V0fScpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpbmZvIGlzIFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBpbmZvLmNhbGxlZEVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgICBGdW5jdGlvbkVudGl0eSBjYWxsTWV0aG9kID0gbG9va3VwQ2FsbE1ldGhvZChjbHMpOwogICAgICAgICAgcHJpbnQoJyR7dHlwZXMuZ2V0SW5mZXJyZWRTaWduYXR1cmVPZk1ldGhvZChjYWxsTWV0aG9kKX0gZm9yICR7Y2xzfScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmludCgnJHtpbmZvLnR5cGV9IGZvciBzb21lIHVua25vd24ga2luZCBvZiBjbG9zdXJlJyk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgYW5hbHl6ZWRFbGVtZW50cy5mb3JFYWNoKChNZW1iZXJFbnRpdHkgZWxlbSkgewogICAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0gdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbSk7CiAgICAgICAgcHJpbnQoJyR7ZWxlbX0gOjogJHt0eXBlfSBmcm9tICR7dHlwZS5hc3NpZ25tZW50c30gJyk7CiAgICAgIH0pOwogICAgfQogICAgZHVtcD8uYWZ0ZXJBbmFseXNpcygpOwoKICAgIHJlcG9ydGVyLmxvZygnSW5mZXJyZWQgJG92ZXJhbGxSZWZpbmVDb3VudCB0eXBlcy4nKTsKCiAgICBwcm9jZXNzTG9vcEluZm9ybWF0aW9uKCk7CiAgfQoKICAvLy8gQ2FsbCBbYW5hbHl6ZV0gZm9yIGFsbCBsaXZlIG1lbWJlcnMuCiAgdm9pZCBhbmFseXplQWxsRWxlbWVudHMoKSB7CiAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IHByb2Nlc3NlZE1lbWJlcnMgPSBjbG9zZWRXb3JsZC5wcm9jZXNzZWRNZW1iZXJzCiAgICAgICAgLndoZXJlKChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiAhbWVtYmVyLmlzQWJzdHJhY3QpOwoKICAgIHByb2dyZXNzLnN0YXJ0UGhhc2UoKTsKICAgIHByb2Nlc3NlZE1lbWJlcnMuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBwcm9ncmVzcy5zaG93UHJvZ3Jlc3MoCiAgICAgICAgICAnQWRkZWQgJywgYWRkZWRJbkdyYXBoLCAnIGVsZW1lbnRzIGluIGluZmVyZW5jaW5nIGdyYXBoLicpOwogICAgICAvLyBUaGlzIGFsc28gZm9yY2VzIHRoZSBjcmVhdGlvbiBvZiB0aGUgW0VsZW1lbnRUeXBlSW5mb3JtYXRpb25dIHRvIGVuc3VyZQogICAgICAvLyBpdCBpcyBpbiB0aGUgZ3JhcGguCiAgICAgIHR5cGVzLndpdGhNZW1iZXIobWVtYmVyLCAoKSA9PiBhbmFseXplKG1lbWJlcikpOwogICAgfSk7CiAgICByZXBvcnRlci5sb2coJ0FkZGVkICRhZGRlZEluR3JhcGggZWxlbWVudHMgaW4gaW5mZXJlbmNpbmcgZ3JhcGguJyk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgYm9keSBub2RlIGZvciBbbWVtYmVyXS4KICBpci5Ob2RlIGNvbXB1dGVNZW1iZXJCb2R5KE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKG1lbWJlcik7CiAgICBzd2l0Y2ggKGRlZmluaXRpb24ua2luZCkgewogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICBpci5NZW1iZXIgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICBpZiAobm9kZSBpcyBpci5GaWVsZCkgewogICAgICAgICAgcmV0dXJuIGdldEZpZWxkSW5pdGlhbGl6ZXIoY2xvc2VkV29ybGQuZWxlbWVudE1hcCwgbWVtYmVyKTsKICAgICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICByZXR1cm4gbm9kZS5mdW5jdGlvbjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgICByZXR1cm4gZGVmaW5pdGlvbi5ub2RlOwogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICAgIGlyLk1lbWJlciBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgICAgICByZXR1cm4gbm9kZS5mdW5jdGlvbjsKICAgICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICByZXR1cm4gbm9kZS5mdW5jdGlvbjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgcmV0dXJuIG5vZGUuZnVuY3Rpb247CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlRmllbGQ6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5zaWduYXR1cmU6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5OgogICAgICAgIGJyZWFrOwogICAgfQogICAgZmFpbGVkQXQobWVtYmVyLCAnVW5leHBlY3RlZCBtZW1iZXIgZGVmaW5pdGlvbjogJGRlZmluaXRpb24uJyk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBgY2FsbGAgbWV0aG9kIG9uIFtjbHNdIG9yIHRoZSBgbm9TdWNoTWV0aG9kYCBpZiBbY2xzXSBkb2Vzbid0CiAgLy8vIGltcGxlbWVudCBgY2FsbGAuCiAgRnVuY3Rpb25FbnRpdHkgbG9va3VwQ2FsbE1ldGhvZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0KICAgICAgICBfZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cENsYXNzTWVtYmVyKGNscywgSWRlbnRpZmllcnMuY2FsbCk7CiAgICBpZiAoZnVuY3Rpb24gPT0gbnVsbCB8fCBmdW5jdGlvbi5pc0Fic3RyYWN0KSB7CiAgICAgIGZ1bmN0aW9uID0KICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQubG9va3VwQ2xhc3NNZW1iZXIoY2xzLCBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKTsKICAgIH0KICAgIHJldHVybiBmdW5jdGlvbjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYW5hbHl6ZShNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGFuYWx5emVkRWxlbWVudHMuY29udGFpbnMoZWxlbWVudCkpIHJldHVybjsKICAgIGFuYWx5emVkRWxlbWVudHMuYWRkKGVsZW1lbnQpOwoKICAgIGlyLk5vZGUgYm9keSA9IGNvbXB1dGVNZW1iZXJCb2R5KGVsZW1lbnQpOwoKICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlOwogICAgcmVwb3J0ZXIud2l0aEN1cnJlbnRFbGVtZW50KGVsZW1lbnQsICgpIHsKICAgICAgdHlwZSA9IGNvbXB1dGVNZW1iZXJUeXBlSW5mb3JtYXRpb24oZWxlbWVudCwgYm9keSk7CiAgICB9KTsKICAgIGFkZGVkSW5HcmFwaCsrOwoKICAgIGlmIChlbGVtZW50LmlzRmllbGQpIHsKICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBlbGVtZW50OwogICAgICBpZiAoIWZpZWxkLmlzQXNzaWduYWJsZSkgewogICAgICAgIC8vIElmIFtlbGVtZW50XSBpcyBmaW5hbCBhbmQgaGFzIGFuIGluaXRpYWxpemVyLCB3ZSByZWNvcmQKICAgICAgICAvLyB0aGUgaW5mZXJyZWQgdHlwZS4KICAgICAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgICAgICBpZiAodHlwZSBpcyEgTGlzdFR5cGVJbmZvcm1hdGlvbiAmJiB0eXBlIGlzISBNYXBUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICAgICAgLy8gRm9yIG5vbi1jb250YWluZXIgdHlwZXMsIHRoZSBjb25zdGFudCBoYW5kbGVyIGRvZXMKICAgICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyB0aGF0IGNvdWxkIGdpdmUgbW9yZSBwcmVjaXNlIHJlc3VsdHMuCiAgICAgICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBnZXRGaWVsZENvbnN0YW50KGZpZWxkKTsKICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICBpZiAodmFsdWUuaXNGdW5jdGlvbikgewogICAgICAgICAgICAgICAgRnVuY3Rpb25Db25zdGFudFZhbHVlIGZ1bmN0aW9uQ29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gZnVuY3Rpb25Db25zdGFudC5lbGVtZW50OwogICAgICAgICAgICAgICAgdHlwZSA9IHR5cGVzLmFsbG9jYXRlQ2xvc3VyZShmdW5jdGlvbik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIEFsdGhvdWdoIHdlIG1pZ2h0IGZpbmQgYSBiZXR0ZXIgdHlwZSwgd2UgaGF2ZSB0byBrZWVwCiAgICAgICAgICAgICAgICAvLyB0aGUgb2xkIHR5cGUgYXJvdW5kIHRvIGVuc3VyZSB0aGF0IHdlIGdldCBhIGNvbXBsZXRlIHZpZXcKICAgICAgICAgICAgICAgIC8vIG9mIHRoZSB0eXBlIGdyYXBoIGFuZCBkbyBub3QgZHJvcCBhbnkgZmxvdyBlZGdlcy4KICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVmaW5lZFR5cGUgPQogICAgICAgICAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudCh2YWx1ZSk7CiAgICAgICAgICAgICAgICB0eXBlID0gbmV3IE5hcnJvd1R5cGVJbmZvcm1hdGlvbigKICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLCB0eXBlLCByZWZpbmVkVHlwZSk7CiAgICAgICAgICAgICAgICB0eXBlcy5hbGxvY2F0ZWRUeXBlcy5hZGQodHlwZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgdHlwZSk7CiAgICAgICAgfSBlbHNlIGlmICghZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgICByZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgdHlwZXMubnVsbFR5cGUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChib2R5ID09IG51bGwpIHsKICAgICAgICAvLyBPbmx5IHVwZGF0ZSB0eXBlcyBvZiBzdGF0aWMgZmllbGRzIGlmIHRoZXJlIGlzIG5vCiAgICAgICAgLy8gYXNzaWdubWVudC4gSW5zdGFuY2UgZmllbGRzIGFyZSBkZWFsdCB3aXRoIGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICBpZiAoZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwpIHsKICAgICAgICAgIHJlY29yZFR5cGVPZkZpZWxkKGZpZWxkLCB0eXBlKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVjb3JkVHlwZU9mRmllbGQoZmllbGQsIHR5cGUpOwogICAgICB9CiAgICAgIGlmICgoZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwpICYmCiAgICAgICAgICBib2R5ICE9IG51bGwgJiYKICAgICAgICAgICFlbGVtZW50LmlzQ29uc3QpIHsKICAgICAgICBpZiAoaXNGaWVsZEluaXRpYWxpemVyUG90ZW50aWFsbHlOdWxsKGVsZW1lbnQsIGJvZHkpKSB7CiAgICAgICAgICByZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgdHlwZXMubnVsbFR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgbWV0aG9kID0gZWxlbWVudDsKICAgICAgcmVjb3JkUmV0dXJuVHlwZShtZXRob2QsIHR5cGUpOwogICAgfQogIH0KCiAgLy8vIFZpc2l0cyBbYm9keV0gdG8gY29tcHV0ZSB0aGUgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZSBmb3IgW21lbWJlcl0uCiAgVHlwZUluZm9ybWF0aW9uIGNvbXB1dGVNZW1iZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIGlyLk5vZGUgYm9keSkgewogICAgS2VybmVsVHlwZUdyYXBoQnVpbGRlciB2aXNpdG9yID0gbmV3IEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIoCiAgICAgICAgb3B0aW9ucywKICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICB0aGlzLAogICAgICAgIG1lbWJlciwKICAgICAgICBib2R5LAogICAgICAgIGNsb3NlZFdvcmxkLmdsb2JhbExvY2Fsc01hcC5nZXRMb2NhbHNNYXAobWVtYmVyKSwKICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50TWFwLmdldFN0YXRpY1R5cGVQcm92aWRlcihtZW1iZXIpKTsKICAgIHJldHVybiB2aXNpdG9yLnJ1bigpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBbaW5pdGlhbGl6ZXJdIG9mIHRoZSBub24tY29uc3Qgc3RhdGljIG9yIHRvcC1sZXZlbAogIC8vLyBbZmllbGRdIGlzIHBvdGVudGlhbGx5IGBudWxsYC4KICBib29sIGlzRmllbGRJbml0aWFsaXplclBvdGVudGlhbGx5TnVsbCgKICAgICAgRmllbGRFbnRpdHkgZmllbGQsIGlyLk5vZGUgaW5pdGlhbGl6ZXIpIHsKICAgIC8vIFRPRE8oMTM0MjkpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBieSB1c2luZyB0aGUKICAgIC8vIGNvbnN0YW50IGhhbmRsZXIgdG8gZmlndXJlIG91dCBpZiBpdCdzIGEgbGF6eSBmaWVsZCBvciBub3QuCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXBsZW1lbnQgdGhlIGFkLWhvYyBjaGVjayBpbiBhc3QgaW5mZXJyZXI/IFRoaXMKICAgIC8vIG1pbWlja3MgdGhhdCBhc3QgaW5mZXJyZXIgd2hpY2ggcmV0dXJuIGB0cnVlYCBmb3IgW2FzdC5TZW5kXSBhbmQKICAgIC8vIG5vbi1jb25zdCBbYXN0Lk5ld0V4cHJlc3Npb25dLgogICAgaWYgKGluaXRpYWxpemVyIGlzIGlyLk1ldGhvZEludm9jYXRpb24gfHwKICAgICAgICBpbml0aWFsaXplciBpcyBpci5Qcm9wZXJ0eUdldCB8fAogICAgICAgIGluaXRpYWxpemVyIGlzIGlyLlByb3BlcnR5U2V0IHx8CiAgICAgICAgaW5pdGlhbGl6ZXIgaXMgaXIuU3RhdGljSW52b2NhdGlvbiB8fAogICAgICAgIGluaXRpYWxpemVyIGlzIGlyLlN0YXRpY0dldCB8fAogICAgICAgIGluaXRpYWxpemVyIGlzIGlyLlN0YXRpY1NldCB8fAogICAgICAgIGluaXRpYWxpemVyIGlzIGlyLkxldCB8fAogICAgICAgIGluaXRpYWxpemVyIGlzIGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiAmJiAhaW5pdGlhbGl6ZXIuaXNDb25zdCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbQ29uc3RhbnRWYWx1ZV0gZm9yIHRoZSBpbml0aWFsIHZhbHVlIG9mIFtmaWVsZF0sIG9yCiAgLy8vIGBudWxsYCBpZiB0aGUgaW5pdGlhbGl6ZXIgaXMgbm90IGEgY29uc3RhbnQgdmFsdWUuCiAgQ29uc3RhbnRWYWx1ZSBnZXRGaWVsZENvbnN0YW50KEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmluaXRpYWxWYWx1ZTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBoYXMgYSAnY2FsbCcgbWV0aG9kLgogIGJvb2wgaGFzQ2FsbFR5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuZWxlbWVudE1hcC50eXBlcwogICAgICAgICAgICAuZ2V0Q2FsbFR5cGUoY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscykpICE9CiAgICAgICAgbnVsbDsKICB9CgogIHZvaWQgcHJvY2Vzc0xvb3BJbmZvcm1hdGlvbigpIHsKICAgIHR5cGVzLmFsbG9jYXRlZENhbGxzLmZvckVhY2goKENhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgICAgaWYgKCFpbmZvLmluTG9vcCkgcmV0dXJuOwogICAgICAvLyBXZSBjYW4ndCBjb21wdXRlIHRoZSBjYWxsZWVzIG9mIGNsb3N1cmVzLCBubyBuZXcgaW5mb3JtYXRpb24gdG8gYWRkLgogICAgICBpZiAoaW5mbyBpcyBDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGluZm8gaXMgU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gaW5mby5jYWxsZWRFbGVtZW50OwogICAgICAgIGluZmVycmVkRGF0YUJ1aWxkZXIuYWRkRnVuY3Rpb25DYWxsZWRJbkxvb3AobWVtYmVyKTsKICAgICAgfSBlbHNlIGlmIChpbmZvLm1hc2sgIT0gbnVsbCAmJgogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0FsbChpbmZvLm1hc2spLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgLy8gRm9yIGluc3RhbmNlIG1ldGhvZHMsIHdlIG9ubHkgcmVnaXN0ZXIgYSBzZWxlY3RvciBjYWxsZWQgaW4gYQogICAgICAgIC8vIGxvb3AgaWYgaXQgaXMgYSB0eXBlZCBzZWxlY3RvciwgdG8gYXZvaWQgbWFya2luZyB0b28gbWFueQogICAgICAgIC8vIG1ldGhvZHMgYXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGEgbG9vcC4gVGhpcyBjdXRzIGRvd24KICAgICAgICAvLyBvbiB0aGUgY29kZSBibG9hdC4KICAgICAgICBpbmZvLmNhbGxlZXMuZm9yRWFjaCgoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgICAgICAgIGluZmVycmVkRGF0YUJ1aWxkZXIuYWRkRnVuY3Rpb25DYWxsZWRJbkxvb3AoZWxlbWVudCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCByZWZpbmUoKSB7CiAgICBwcm9ncmVzcy5zdGFydFBoYXNlKCk7CiAgICB3aGlsZSAoIXdvcmtRdWV1ZS5pc0VtcHR5KSB7CiAgICAgIHByb2dyZXNzLnNob3dQcm9ncmVzcygnSW5mZXJyZWQgJywgb3ZlcmFsbFJlZmluZUNvdW50LCAnIHR5cGVzLicpOwogICAgICBUeXBlSW5mb3JtYXRpb24gaW5mbyA9IHdvcmtRdWV1ZS5yZW1vdmUoKTsKICAgICAgQWJzdHJhY3RWYWx1ZSBvbGRUeXBlID0gaW5mby50eXBlOwogICAgICBBYnN0cmFjdFZhbHVlIG5ld1R5cGUgPSBpbmZvLnJlZmluZSh0aGlzKTsKICAgICAgLy8gQ2hlY2sgdGhhdCByZWZpbmVtZW50IGhhcyBub3QgYWNjaWRlbnRhbGx5IGNoYW5nZWQgdGhlIHR5cGUuCiAgICAgIGFzc2VydChvbGRUeXBlID09IGluZm8udHlwZSk7CiAgICAgIGlmIChpbmZvLmFiYW5kb25JbmZlcmVuY2luZykgaW5mby5kb05vdEVucXVldWUgPSB0cnVlOwogICAgICBpZiAoKGluZm8udHlwZSA9IG5ld1R5cGUpICE9IG9sZFR5cGUpIHsKICAgICAgICBvdmVyYWxsUmVmaW5lQ291bnQrKzsKICAgICAgICBpbmZvLnJlZmluZUNvdW50Kys7CiAgICAgICAgaWYgKGluZm8ucmVmaW5lQ291bnQgPiBNQVhfQ0hBTkdFX0NPVU5UKSB7CiAgICAgICAgICBpZiAoZGVidWcuQU5PTUFMWV9XQVJOKSB7CiAgICAgICAgICAgIHByaW50KCJBTk9NQUxZIFdBUk5JTkc6IG1heCByZWZpbmVtZW50IHJlYWNoZWQgZm9yICRpbmZvIik7CiAgICAgICAgICB9CiAgICAgICAgICBpbmZvLmdpdmVVcCh0aGlzKTsKICAgICAgICAgIGluZm8udHlwZSA9IGluZm8ucmVmaW5lKHRoaXMpOwogICAgICAgICAgaW5mby5kb05vdEVucXVldWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgICB3b3JrUXVldWUuYWRkQWxsKGluZm8udXNlcnMpOwogICAgICAgIGlmIChpbmZvLmhhc1N0YWJsZVR5cGUodGhpcykpIHsKICAgICAgICAgIGluZm8uc3RhYmlsaXplKHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBidWlsZFdvcmtRdWV1ZSgpIHsKICAgIHdvcmtRdWV1ZS5hZGRBbGwodHlwZXMub3JkZXJlZFR5cGVJbmZvcm1hdGlvbnMpOwogICAgd29ya1F1ZXVlLmFkZEFsbCh0eXBlcy5hbGxvY2F0ZWRUeXBlcyk7CiAgICB3b3JrUXVldWUuYWRkQWxsKHR5cGVzLmFsbG9jYXRlZENsb3N1cmVzKTsKICAgIHdvcmtRdWV1ZS5hZGRBbGwodHlwZXMuYWxsb2NhdGVkQ2FsbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB1cGRhdGVQYXJhbWV0ZXJBc3NpZ25tZW50cyhUeXBlSW5mb3JtYXRpb24gY2FsbGVyLCBNZW1iZXJFbnRpdHkgY2FsbGVlLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMsIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIHtib29sIHJlbW92ZSwgYm9vbCBhZGRUb1F1ZXVlOiB0cnVlfSkgewogICAgaWYgKGNhbGxlZS5uYW1lID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8pIHJldHVybjsKICAgIGlmIChjYWxsZWUuaXNGaWVsZCkgewogICAgICBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgICBFbGVtZW50VHlwZUluZm9ybWF0aW9uIGluZm8gPSB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihjYWxsZWUpOwogICAgICAgIGlmIChyZW1vdmUpIHsKICAgICAgICAgIGluZm8ucmVtb3ZlQXNzaWdubWVudChhcmd1bWVudHMucG9zaXRpb25hbFswXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluZm8uYWRkQXNzaWdubWVudChhcmd1bWVudHMucG9zaXRpb25hbFswXSk7CiAgICAgICAgfQogICAgICAgIGlmIChhZGRUb1F1ZXVlKSB3b3JrUXVldWUuYWRkKGluZm8pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNhbGxlZS5pc0dldHRlcikgewogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yICE9IG51bGwgJiYgc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgLy8gV2UgYXJlIHRlYXJpbmcgYSBmdW5jdGlvbiBvZmYgYW5kIHRodXMgY3JlYXRlIGEgY2xvc3VyZS4KICAgICAgYXNzZXJ0KGNhbGxlZS5pc0Z1bmN0aW9uKTsKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGluZm8gPSB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihjYWxsZWUpOwogICAgICBpZiAocmVtb3ZlKSB7CiAgICAgICAgaW5mby5jbG9zdXJpemVkQ291bnQtLTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbmZvLmNsb3N1cml6ZWRDb3VudCsrOwogICAgICAgIGlmIChjYWxsZWUuaXNTdGF0aWMgfHwgY2FsbGVlLmlzVG9wTGV2ZWwpIHsKICAgICAgICAgIHR5cGVzLmFsbG9jYXRlZENsb3N1cmVzLmFkZChpbmZvKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gV2UgYWRkIHRoZSBjYWxsLXNpdGUgdHlwZSBpbmZvcm1hdGlvbiBoZXJlIHNvIHRoYXQgd2UKICAgICAgICAgIC8vIGNhbiBiZW5lZml0IGZyb20gZnVydGhlciByZWZpbmVtZW50IG9mIHRoZSBzZWxlY3Rvci4KICAgICAgICAgIHR5cGVzLmFsbG9jYXRlZENsb3N1cmVzLmFkZChjYWxsZXIpOwogICAgICAgIH0KICAgICAgICB0eXBlcy5zdHJhdGVneS5mb3JFYWNoUGFyYW1ldGVyKGNhbGxlZSwgKExvY2FsIHBhcmFtZXRlcikgewogICAgICAgICAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGluZm8gPQogICAgICAgICAgICAgIHR5cGVzLmdldEluZmVycmVkVHlwZU9mUGFyYW1ldGVyKHBhcmFtZXRlcik7CiAgICAgICAgICBpbmZvLnRhZ0FzVGVhck9mZkNsb3N1cmVQYXJhbWV0ZXIodGhpcyk7CiAgICAgICAgICBpZiAoYWRkVG9RdWV1ZSkgd29ya1F1ZXVlLmFkZChpbmZvKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgbWV0aG9kID0gY2FsbGVlOwogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZTsKICAgICAgaW50IHBhcmFtZXRlckluZGV4ID0gMDsKICAgICAgdHlwZXMuc3RyYXRlZ3kuZm9yRWFjaFBhcmFtZXRlcihjYWxsZWUsIChMb2NhbCBwYXJhbWV0ZXIpIHsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZTsKICAgICAgICBpZiAocGFyYW1ldGVySW5kZXggPCBwYXJhbWV0ZXJTdHJ1Y3R1cmUucmVxdWlyZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgICB0eXBlID0gYXJndW1lbnRzLnBvc2l0aW9uYWxbcGFyYW1ldGVySW5kZXhdOwogICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgICB0eXBlID0gYXJndW1lbnRzLm5hbWVkW3BhcmFtZXRlci5uYW1lXTsKICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlckluZGV4IDwgYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoKSB7CiAgICAgICAgICB0eXBlID0gYXJndW1lbnRzLnBvc2l0aW9uYWxbcGFyYW1ldGVySW5kZXhdOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZSA9PSBudWxsKSB0eXBlID0gZ2V0RGVmYXVsdFR5cGVPZlBhcmFtZXRlcihwYXJhbWV0ZXIpOwogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBpbmZvID0gdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXIocGFyYW1ldGVyKTsKICAgICAgICBpZiAocmVtb3ZlKSB7CiAgICAgICAgICBpbmZvLnJlbW92ZUFzc2lnbm1lbnQodHlwZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluZm8uYWRkQXNzaWdubWVudCh0eXBlKTsKICAgICAgICB9CiAgICAgICAgcGFyYW1ldGVySW5kZXgrKzsKICAgICAgICBpZiAoYWRkVG9RdWV1ZSkgd29ya1F1ZXVlLmFkZChpbmZvKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIoTG9jYWwgcGFyYW1ldGVyLCBUeXBlSW5mb3JtYXRpb24gdHlwZSwKICAgICAge2Jvb2wgaXNJbnN0YW5jZU1lbWJlcn0pIHsKICAgIGFzc2VydCgKICAgICAgICB0eXBlICE9IG51bGwsIGZhaWxlZEF0KHBhcmFtZXRlciwgIk5vIGRlZmF1bHQgdHlwZSBmb3IgJHBhcmFtZXRlci4iKSk7CiAgICBUeXBlSW5mb3JtYXRpb24gZXhpc3RpbmcgPSBkZWZhdWx0VHlwZU9mUGFyYW1ldGVyW3BhcmFtZXRlcl07CiAgICBkZWZhdWx0VHlwZU9mUGFyYW1ldGVyW3BhcmFtZXRlcl0gPSB0eXBlOwogICAgVHlwZUluZm9ybWF0aW9uIGluZm8gPSB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihwYXJhbWV0ZXIpOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwgJiYgZXhpc3RpbmcgaXMgUGxhY2Vob2xkZXJUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgLy8gUmVwbGFjZSByZWZlcmVuY2VzIHRvIFtleGlzdGluZ10gdG8gdXNlIFt0eXBlXSBpbnN0ZWFkLgogICAgICBpZiAoaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIFBhcmFtZXRlckFzc2lnbm1lbnRzIGFzc2lnbm1lbnRzID0gaW5mby5hc3NpZ25tZW50czsKICAgICAgICBhc3NpZ25tZW50cy5yZXBsYWNlKGV4aXN0aW5nLCB0eXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gYXNzaWdubWVudHMgPSBpbmZvLmFzc2lnbm1lbnRzOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXNzaWdubWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGlmIChhc3NpZ25tZW50c1tpXSA9PSBleGlzdGluZykgewogICAgICAgICAgICBhc3NpZ25tZW50c1tpXSA9IHR5cGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIEFsc28gZm9yd2FyZCBhbGwgdXNlcnMuCiAgICAgIHR5cGUuYWRkVXNlcnNPZihleGlzdGluZyk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoZXhpc3RpbmcgPT0gbnVsbCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gZ2V0RGVmYXVsdFR5cGVPZlBhcmFtZXRlcihMb2NhbCBwYXJhbWV0ZXIpIHsKICAgIHJldHVybiBkZWZhdWx0VHlwZU9mUGFyYW1ldGVyLnB1dElmQWJzZW50KHBhcmFtZXRlciwgKCkgewogICAgICByZXR1cm4gbmV3IFBsYWNlaG9sZGVyVHlwZUluZm9ybWF0aW9uKAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwgdHlwZXMuY3VycmVudE1lbWJlcik7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzQWxyZWFkeUNvbXB1dGVkVHlwZU9mUGFyYW1ldGVyRGVmYXVsdChMb2NhbCBwYXJhbWV0ZXIpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiBzZWVuID0gZGVmYXVsdFR5cGVPZlBhcmFtZXRlcltwYXJhbWV0ZXJdOwogICAgcmV0dXJuIChzZWVuICE9IG51bGwgJiYgc2VlbiBpcyEgUGxhY2Vob2xkZXJUeXBlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHR5cGVPZlBhcmFtZXRlcihMb2NhbCBlbGVtZW50KSB7CiAgICByZXR1cm4gdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXIoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdHlwZU9mTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCBpcyBGdW5jdGlvbkVudGl0eSkgcmV0dXJuIHR5cGVzLmZ1bmN0aW9uVHlwZTsKICAgIHJldHVybiB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiByZXR1cm5UeXBlT2ZNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50IGlzISBGdW5jdGlvbkVudGl0eSkgcmV0dXJuIHR5cGVzLmR5bmFtaWNUeXBlOwogICAgcmV0dXJuIHR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRUeXBlT2ZGaWVsZChGaWVsZEVudGl0eSBlbGVtZW50LCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCkuYWRkQXNzaWdubWVudCh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkUmV0dXJuVHlwZShGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgVHlwZUluZm9ybWF0aW9uIGluZm8gPSB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgIGlmIChlbGVtZW50Lm5hbWUgPT0gJz09JykgewogICAgICAvLyBFdmVuIGlmIHguPT0gZG9lc24ndCByZXR1cm4gYSBib29sLCAneCA9PSBudWxsJyBldmFsdWF0ZXMgdG8gJ2ZhbHNlJy4KICAgICAgaW5mby5hZGRBc3NpZ25tZW50KHR5cGVzLmJvb2xUeXBlKTsKICAgIH0KICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogQ2xlYW4gdXAuIFdlIGRvIHRoZXNlIGNoZWNrcyBiZWNhdXNlCiAgICAvLyBbU2ltcGxlVHlwZXNJbmZlcnJlcl0gZGVhbHMgd2l0aCB0d28gZGlmZmVyZW50IGluZmVycmVycy4KICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybjsKICAgIGlmIChpbmZvLmFzc2lnbm1lbnRzLmlzRW1wdHkpIGluZm8uYWRkQXNzaWdubWVudCh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiBhZGRSZXR1cm5UeXBlRm9yTWV0aG9kKAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBUeXBlSW5mb3JtYXRpb24gdW51c2VkLCBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSkgewogICAgVHlwZUluZm9ybWF0aW9uIHR5cGUgPSB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogQ2xlYW4gdXAuIFdlIGRvIHRoaXMgY2hlY2sgYmVjYXVzZQogICAgLy8gW1NpbXBsZVR5cGVzSW5mZXJyZXJdIGRlYWxzIHdpdGggdHdvIGRpZmZlcmVudCBpbmZlcnJlcnMuCiAgICBpZiAoZWxlbWVudCBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJiBlbGVtZW50LmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQogICAgdHlwZS5hZGRBc3NpZ25tZW50KG5ld1R5cGUpOwogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gcmVnaXN0ZXJDYWxsZWRNZW1iZXIoCiAgICAgIE9iamVjdCBub2RlLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBNZW1iZXJFbnRpdHkgY2FsbGVyLAogICAgICBNZW1iZXJFbnRpdHkgY2FsbGVlLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMsCiAgICAgIFNpZGVFZmZlY3RzQnVpbGRlciBzaWRlRWZmZWN0c0J1aWxkZXIsCiAgICAgIGJvb2wgaW5Mb29wKSB7CiAgICBDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvID0gbmV3IFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKAogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgICAgdHlwZXMuY3VycmVudE1lbWJlciwKICAgICAgICBub2RlLAogICAgICAgIGNhbGxlciwKICAgICAgICBjYWxsZWUsCiAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgbWFzaywKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgaW5Mb29wKTsKICAgIC8vIElmIHRoaXMgY2xhc3MgaGFzIGEgJ2NhbGwnIG1ldGhvZCB0aGVuIHdlIGhhdmUgZXNzZW50aWFsbHkgY3JlYXRlZCBhCiAgICAvLyBjbG9zdXJlIGhlcmUuIFJlZ2lzdGVyIGl0IGFzIHN1Y2ggc28gdGhhdCBpdCBpcyB0cmFjZWQuCiAgICAvLyBOb3RlOiB3ZSBleGNsdWRlIGZhY3RvcnkgY29uc3RydWN0b3JzIGJlY2F1c2UgdGhleSBkb24ndCBhbHdheXMgY3JlYXRlIGFuCiAgICAvLyBpbnN0YW5jZSBvZiB0aGUgdHlwZS4gVGhleSBhcmUgc3RhdGljIG1ldGhvZHMgdGhhdCBkZWxlZ2F0ZSB0byBzb21lIG90aGVyCiAgICAvLyBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIHRvIGRvIHRoZSBhY3R1YWwgY3JlYXRpb24gb2YgdGhlIG9iamVjdC4KICAgIGlmIChzZWxlY3RvciAhPSBudWxsICYmCiAgICAgICAgc2VsZWN0b3IuaXNDYWxsICYmCiAgICAgICAgY2FsbGVlIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmCiAgICAgICAgY2FsbGVlLmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IGNhbGxlZS5lbmNsb3NpbmdDbGFzczsKICAgICAgaWYgKGhhc0NhbGxUeXBlKGNscykpIHsKICAgICAgICB0eXBlcy5hbGxvY2F0ZWRDbG9zdXJlcy5hZGQoaW5mbyk7CiAgICAgIH0KICAgIH0KICAgIGluZm8uYWRkVG9HcmFwaCh0aGlzKTsKICAgIHR5cGVzLmFsbG9jYXRlZENhbGxzLmFkZChpbmZvKTsKICAgIHVwZGF0ZVNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQnVpbGRlciwgc2VsZWN0b3IsIGNhbGxlZSk7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiByZWdpc3RlckNhbGxlZFNlbGVjdG9yKAogICAgICBDYWxsVHlwZSBjYWxsVHlwZSwKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXJUeXBlLAogICAgICBNZW1iZXJFbnRpdHkgY2FsbGVyLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMsCiAgICAgIFNpZGVFZmZlY3RzQnVpbGRlciBzaWRlRWZmZWN0c0J1aWxkZXIsCiAgICAgIHtib29sIGluTG9vcCwKICAgICAgYm9vbCBpc0NvbmRpdGlvbmFsfSkgewogICAgaWYgKHNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgcmV0dXJuIHJlZ2lzdGVyQ2FsbGVkQ2xvc3VyZShub2RlLCBzZWxlY3RvciwgbWFzaywgcmVjZWl2ZXJUeXBlLCBjYWxsZXIsCiAgICAgICAgICBhcmd1bWVudHMsIHNpZGVFZmZlY3RzQnVpbGRlciwKICAgICAgICAgIGluTG9vcDogaW5Mb29wKTsKICAgIH0KCiAgICBpZiAoY2xvc2VkV29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbChzZWxlY3RvciwgbWFzaykpIHsKICAgICAgc2lkZUVmZmVjdHNCdWlsZGVyLnNldEFsbFNpZGVFZmZlY3RzQW5kRGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICB9CiAgICBjbG9zZWRXb3JsZC5sb2NhdGVNZW1iZXJzKHNlbGVjdG9yLCBtYXNrKS5mb3JFYWNoKChjYWxsZWUpIHsKICAgICAgdXBkYXRlU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNCdWlsZGVyLCBzZWxlY3RvciwgY2FsbGVlKTsKICAgIH0pOwoKICAgIENhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8gPSBuZXcgRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKAogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgICAgdHlwZXMuY3VycmVudE1lbWJlciwKICAgICAgICBjYWxsVHlwZSwKICAgICAgICBub2RlLAogICAgICAgIGNhbGxlciwKICAgICAgICBzZWxlY3RvciwKICAgICAgICBtYXNrLAogICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgaW5Mb29wLAogICAgICAgIGlzQ29uZGl0aW9uYWwpOwoKICAgIGluZm8uYWRkVG9HcmFwaCh0aGlzKTsKICAgIHR5cGVzLmFsbG9jYXRlZENhbGxzLmFkZChpbmZvKTsKICAgIHJldHVybiBpbmZvOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHJlZ2lzdGVyQXdhaXQoaXIuTm9kZSBub2RlLCBUeXBlSW5mb3JtYXRpb24gYXJndW1lbnQpIHsKICAgIEF3YWl0VHlwZUluZm9ybWF0aW9uIGluZm8gPSBuZXcgQXdhaXRUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwgdHlwZXMuY3VycmVudE1lbWJlciwgbm9kZSk7CiAgICBpbmZvLmFkZEFzc2lnbm1lbnQoYXJndW1lbnQpOwogICAgdHlwZXMuYWxsb2NhdGVkVHlwZXMuYWRkKGluZm8pOwogICAgcmV0dXJuIGluZm87CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gcmVnaXN0ZXJZaWVsZChpci5Ob2RlIG5vZGUsIFR5cGVJbmZvcm1hdGlvbiBhcmd1bWVudCkgewogICAgWWllbGRUeXBlSW5mb3JtYXRpb24gaW5mbyA9IG5ldyBZaWVsZFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLCB0eXBlcy5jdXJyZW50TWVtYmVyLCBub2RlKTsKICAgIGluZm8uYWRkQXNzaWdubWVudChhcmd1bWVudCk7CiAgICB0eXBlcy5hbGxvY2F0ZWRUeXBlcy5hZGQoaW5mbyk7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiByZWdpc3RlckNhbGxlZENsb3N1cmUoCiAgICAgIGlyLk5vZGUgbm9kZSwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgVHlwZUluZm9ybWF0aW9uIGNsb3N1cmUsCiAgICAgIE1lbWJlckVudGl0eSBjYWxsZXIsCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cywKICAgICAgU2lkZUVmZmVjdHNCdWlsZGVyIHNpZGVFZmZlY3RzQnVpbGRlciwKICAgICAge2Jvb2wgaW5Mb29wfSkgewogICAgc2lkZUVmZmVjdHNCdWlsZGVyLnNldEFsbFNpZGVFZmZlY3RzQW5kRGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICBDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvID0gbmV3IENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICAgIHR5cGVzLmN1cnJlbnRNZW1iZXIsCiAgICAgICAgbm9kZSwKICAgICAgICBjYWxsZXIsCiAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgbWFzaywKICAgICAgICBjbG9zdXJlLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICBpbkxvb3ApOwogICAgaW5mby5hZGRUb0dyYXBoKHRoaXMpOwogICAgdHlwZXMuYWxsb2NhdGVkQ2FsbHMuYWRkKGluZm8pOwogICAgcmV0dXJuIGluZm87CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgZm9yIChNZW1iZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uCiAgICAgICAgaW4gdHlwZXMubWVtYmVyVHlwZUluZm9ybWF0aW9ucy52YWx1ZXMpIHsKICAgICAgdHlwZUluZm9ybWF0aW9uLmNvbXB1dGVJc0NhbGxlZE9uY2UoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHJldHVybjsKCiAgICB2b2lkIGNsZWFudXAoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgICAgaW5mby5jbGVhbnVwKCk7CiAgICB9CgogICAgdHlwZXMuYWxsb2NhdGVkQ2FsbHMuZm9yRWFjaChjbGVhbnVwKTsKICAgIHR5cGVzLmFsbG9jYXRlZENhbGxzLmNsZWFyKCk7CgogICAgZGVmYXVsdFR5cGVPZlBhcmFtZXRlci5jbGVhcigpOwoKICAgIHR5cGVzLnBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbnMudmFsdWVzLmZvckVhY2goY2xlYW51cCk7CiAgICB0eXBlcy5tZW1iZXJUeXBlSW5mb3JtYXRpb25zLnZhbHVlcy5mb3JFYWNoKGNsZWFudXApOwoKICAgIHR5cGVzLmFsbG9jYXRlZFR5cGVzLmZvckVhY2goY2xlYW51cCk7CiAgICB0eXBlcy5hbGxvY2F0ZWRUeXBlcy5jbGVhcigpOwoKICAgIHR5cGVzLmNvbmNyZXRlVHlwZXMuY2xlYXIoKTsKCiAgICB0eXBlcy5hbGxvY2F0ZWRDbG9zdXJlcy5mb3JFYWNoKGNsZWFudXApOwogICAgdHlwZXMuYWxsb2NhdGVkQ2xvc3VyZXMuY2xlYXIoKTsKCiAgICBhbmFseXplZEVsZW1lbnRzLmNsZWFyKCk7CiAgICBnZW5lcmF0aXZlQ29uc3RydWN0b3JzRXhwb3NpbmdUaGlzLmNsZWFyKCk7CgogICAgdHlwZXMuYWxsb2NhdGVkTWFwcy52YWx1ZXMuZm9yRWFjaChjbGVhbnVwKTsKICAgIHR5cGVzLmFsbG9jYXRlZFNldHMudmFsdWVzLmZvckVhY2goY2xlYW51cCk7CiAgICB0eXBlcy5hbGxvY2F0ZWRMaXN0cy52YWx1ZXMuZm9yRWFjaChjbGVhbnVwKTsKCiAgICBfbWVtYmVyRGF0YS5jbGVhcigpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXRDYWxsZXJzT2ZGb3JUZXN0aW5nKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gaW5mbyA9IHR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgcmV0dXJuIGluZm8uY2FsbGVyc0ZvclRlc3Rpbmc7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdHlwZU9mTWVtYmVyV2l0aFNlbGVjdG9yKAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIGlmIChlbGVtZW50Lm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyAmJgogICAgICAgIHNlbGVjdG9yLm5hbWUgIT0gZWxlbWVudC5uYW1lKSB7CiAgICAgIC8vIEFuIGludm9jYXRpb24gY2FuIHJlc29sdmUgdG8gYSBbbm9TdWNoTWV0aG9kXSwgaW4gd2hpY2ggY2FzZQogICAgICAvLyB3ZSBnZXQgdGhlIHJldHVybiB0eXBlIG9mIFtub1N1Y2hNZXRob2RdLgogICAgICByZXR1cm4gcmV0dXJuVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0dldHRlcikgewogICAgICBpZiAoZWxlbWVudC5pc0Z1bmN0aW9uKSB7CiAgICAgICAgLy8gW2Z1bmN0aW9uVHlwZV0gaXMgbnVsbCBpZiB0aGUgaW5mZXJyZXIgZGlkIG5vdCBydW4uCiAgICAgICAgcmV0dXJuIHR5cGVzLmZ1bmN0aW9uVHlwZSA9PSBudWxsCiAgICAgICAgICAgID8gdHlwZXMuZHluYW1pY1R5cGUKICAgICAgICAgICAgOiB0eXBlcy5mdW5jdGlvblR5cGU7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgICAgcmV0dXJuIHR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgICAgcmV0dXJuIHJldHVyblR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoZmFsc2UsIGZhaWxlZEF0KGVsZW1lbnQsICJVbmV4cGVjdGVkIG1lbWJlciAkZWxlbWVudCIpKTsKICAgICAgICByZXR1cm4gdHlwZXMuZHluYW1pY1R5cGU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0dldHRlciB8fCBlbGVtZW50LmlzRmllbGQpIHsKICAgICAgYXNzZXJ0KHNlbGVjdG9yLmlzQ2FsbCB8fCBzZWxlY3Rvci5pc1NldHRlcik7CiAgICAgIHJldHVybiB0eXBlcy5keW5hbWljVHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiByZXR1cm5UeXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNhbkZpZWxkQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9ucyhGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmlzRmllbGRVc2VkQnlCYWNrZW5kKGVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICgoZWxlbWVudC5pc1RvcExldmVsIHx8IGVsZW1lbnQuaXNTdGF0aWMpICYmICFlbGVtZW50LmlzQXNzaWduYWJsZSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5GdW5jdGlvblBhcmFtZXRlcnNCZVVzZWRGb3JHbG9iYWxPcHRpbWl6YXRpb25zKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuICFjbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UuaXNGdW5jdGlvblVzZWRCeUJhY2tlbmQoZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhc3N1bWVEeW5hbWljKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEuaGFzQXNzdW1lRHluYW1pYyhtZW1iZXIpOwogIH0KfQoKY2xhc3MgS2VybmVsVHlwZVN5c3RlbVN0cmF0ZWd5IGltcGxlbWVudHMgVHlwZVN5c3RlbVN0cmF0ZWd5IHsKICBmaW5hbCBKc0Nsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKCiAgS2VybmVsVHlwZVN5c3RlbVN0cmF0ZWd5KHRoaXMuX2Nsb3NlZFdvcmxkKTsKCiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwoKICBAb3ZlcnJpZGUKICBib29sIGNoZWNrQ2xhc3NFbnRpdHkoQ2xhc3NFbnRpdHkgY2xzKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGNoZWNrTWFwTm9kZShpci5Ob2RlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgY2hlY2tTZXROb2RlKGlyLk5vZGUgbm9kZSkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVja0xpc3ROb2RlKGlyLk5vZGUgbm9kZSkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVja0xvb3BQaGlOb2RlKGlyLk5vZGUgbm9kZSkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVja1BoaU5vZGUoaXIuTm9kZSBub2RlKSA9PgogICAgICBub2RlID09IG51bGwgfHwgbm9kZSBpcyBpci5UcnlDYXRjaCB8fCBub2RlIGlzIGlyLlRyeUZpbmFsbHk7CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFBhcmFtZXRlcihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgdm9pZCBmKExvY2FsIHBhcmFtZXRlcikpIHsKICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyQXNMb2NhbCgKICAgICAgICBfY2xvc2VkV29ybGQuZ2xvYmFsTG9jYWxzTWFwLCBfY2xvc2VkV29ybGQuZWxlbWVudE1hcCwgZnVuY3Rpb24sCiAgICAgICAgKExvY2FsIHBhcmFtZXRlciwge2Jvb2wgaXNFbGlkZWR9KSB7CiAgICAgIGYocGFyYW1ldGVyKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGNyZWF0ZVBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBjb3ZhcmlhbnQgSkxvY2FsIHBhcmFtZXRlciwKICAgICAgVHlwZVN5c3RlbSB0eXBlcykgewogICAgTWVtYmVyRW50aXR5IGNvbnRleHQgPSBwYXJhbWV0ZXIubWVtYmVyQ29udGV4dDsKICAgIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCA9CiAgICAgICAgX2Nsb3NlZFdvcmxkLmdsb2JhbExvY2Fsc01hcC5nZXRMb2NhbHNNYXAoY29udGV4dCk7CiAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlID0KICAgICAgICBsb2NhbHNNYXAuZ2V0RnVuY3Rpb25Ob2RlRm9yUGFyYW1ldGVyKHBhcmFtZXRlcik7CiAgICBEYXJ0VHlwZSB0eXBlID0gbG9jYWxzTWFwLmdldExvY2FsVHlwZShfY2xvc2VkV29ybGQuZWxlbWVudE1hcCwgcGFyYW1ldGVyKTsKICAgIE1lbWJlckVudGl0eSBtZW1iZXI7CiAgICBib29sIGlzQ2xvc3VyZSA9IGZhbHNlOwogICAgaWYgKGZ1bmN0aW9uTm9kZS5wYXJlbnQgaXMgaXIuTWVtYmVyKSB7CiAgICAgIG1lbWJlciA9IF9jbG9zZWRXb3JsZC5lbGVtZW50TWFwLmdldE1lbWJlcihmdW5jdGlvbk5vZGUucGFyZW50KTsKICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25Ob2RlLnBhcmVudCBpcyBpci5Mb2NhbEZ1bmN0aW9uKSB7CiAgICAgIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8gaW5mbyA9CiAgICAgICAgICBfY2xvc2VkV29ybGQuY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2xvc3VyZUluZm8oZnVuY3Rpb25Ob2RlLnBhcmVudCk7CiAgICAgIG1lbWJlciA9IGluZm8uY2FsbE1ldGhvZDsKICAgICAgaXNDbG9zdXJlID0gdHJ1ZTsKICAgIH0KICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBtZW1iZXJUeXBlSW5mb3JtYXRpb24gPQogICAgICAgIHR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKG1lbWJlcik7CiAgICBpZiAoaXNDbG9zdXJlKSB7CiAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLmxvY2FsRnVuY3Rpb24oCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLCBtZW1iZXJUeXBlSW5mb3JtYXRpb24sIHBhcmFtZXRlciwgdHlwZSwgbWVtYmVyKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24uaW5zdGFuY2VNZW1iZXIoCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICAgICAgbWVtYmVyVHlwZUluZm9ybWF0aW9uLAogICAgICAgICAgcGFyYW1ldGVyLAogICAgICAgICAgdHlwZSwKICAgICAgICAgIG1lbWJlciwKICAgICAgICAgIG5ldyBQYXJhbWV0ZXJBc3NpZ25tZW50cygpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLnN0YXRpYygKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4sIG1lbWJlclR5cGVJbmZvcm1hdGlvbiwgcGFyYW1ldGVyLCB0eXBlLCBtZW1iZXIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNyZWF0ZU1lbWJlclR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBtZW1iZXI7CiAgICAgIERhcnRUeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZpZWxkVHlwZShmaWVsZCk7CiAgICAgIHJldHVybiBuZXcgRmllbGRUeXBlSW5mb3JtYXRpb24oYWJzdHJhY3RWYWx1ZURvbWFpbiwgZmllbGQsIHR5cGUpOwogICAgfSBlbHNlIGlmIChtZW1iZXIuaXNHZXR0ZXIpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgZ2V0dGVyID0gbWVtYmVyOwogICAgICBEYXJ0VHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZ2V0dGVyKTsKICAgICAgcmV0dXJuIG5ldyBHZXR0ZXJUeXBlSW5mb3JtYXRpb24oYWJzdHJhY3RWYWx1ZURvbWFpbiwgZ2V0dGVyLCB0eXBlKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzU2V0dGVyKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IHNldHRlciA9IG1lbWJlcjsKICAgICAgcmV0dXJuIG5ldyBTZXR0ZXJUeXBlSW5mb3JtYXRpb24oYWJzdHJhY3RWYWx1ZURvbWFpbiwgc2V0dGVyKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzRnVuY3Rpb24pIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgbWV0aG9kID0gbWVtYmVyOwogICAgICBEYXJ0VHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUobWV0aG9kKTsKICAgICAgcmV0dXJuIG5ldyBNZXRob2RUeXBlSW5mb3JtYXRpb24oYWJzdHJhY3RWYWx1ZURvbWFpbiwgbWV0aG9kLCB0eXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gbWVtYmVyOwogICAgICBpZiAoY29uc3RydWN0b3IuaXNGYWN0b3J5Q29uc3RydWN0b3IpIHsKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoY29uc3RydWN0b3IpOwogICAgICAgIHJldHVybiBuZXcgRmFjdG9yeUNvbnN0cnVjdG9yVHlwZUluZm9ybWF0aW9uKAogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLCBjb25zdHJ1Y3RvciwgdHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBHZW5lcmF0aXZlQ29uc3RydWN0b3JUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4sIGNvbnN0cnVjdG9yKTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgS2VybmVsR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhCiAgICBpbXBsZW1lbnRzIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGFdCiAgLy8vIG9iamVjdHMgaW4gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2xvYmFsLXR5cGUtaW5mZXJlbmNlLWVsZW1lbnQtZGF0YSc7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbmFtZSB0aGlzIHRvZ2V0aGVyIHdpdGggW3R5cGVPZlNlbmRdLgogIE1hcDxpci5UcmVlTm9kZSwgQWJzdHJhY3RWYWx1ZT4gX3NlbmRNYXA7CgogIE1hcDxpci5Gb3JJblN0YXRlbWVudCwgQWJzdHJhY3RWYWx1ZT4gX2l0ZXJhdG9yTWFwOwogIE1hcDxpci5Gb3JJblN0YXRlbWVudCwgQWJzdHJhY3RWYWx1ZT4gX2N1cnJlbnRNYXA7CiAgTWFwPGlyLkZvckluU3RhdGVtZW50LCBBYnN0cmFjdFZhbHVlPiBfbW92ZU5leHRNYXA7CgogIEtlcm5lbEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSgpOwoKICBLZXJuZWxHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEuaW50ZXJuYWwoCiAgICAgIHRoaXMuX3NlbmRNYXAsIHRoaXMuX2l0ZXJhdG9yTWFwLCB0aGlzLl9jdXJyZW50TWFwLCB0aGlzLl9tb3ZlTmV4dE1hcCk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEtlcm5lbEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLAogICAgICBpci5NZW1iZXIgY29udGV4dCwKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICByZXR1cm4gc291cmNlLmluTWVtYmVyQ29udGV4dChjb250ZXh0LCAoKSB7CiAgICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgICBNYXA8aXIuVHJlZU5vZGUsIEFic3RyYWN0VmFsdWU+IHNlbmRNYXAgPSBzb3VyY2UucmVhZFRyZWVOb2RlTWFwSW5Db250ZXh0KAogICAgICAgICAgKCkgPT4gYWJzdHJhY3RWYWx1ZURvbWFpbi5yZWFkQWJzdHJhY3RWYWx1ZUZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICAgIE1hcDxpci5Gb3JJblN0YXRlbWVudCwgQWJzdHJhY3RWYWx1ZT4gaXRlcmF0b3JNYXAgPQogICAgICAgICAgc291cmNlLnJlYWRUcmVlTm9kZU1hcEluQ29udGV4dCgKICAgICAgICAgICAgICAoKSA9PiBhYnN0cmFjdFZhbHVlRG9tYWluLnJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICAgIE1hcDxpci5Gb3JJblN0YXRlbWVudCwgQWJzdHJhY3RWYWx1ZT4gY3VycmVudE1hcCA9CiAgICAgICAgICBzb3VyY2UucmVhZFRyZWVOb2RlTWFwSW5Db250ZXh0KAogICAgICAgICAgICAgICgpID0+IGFic3RyYWN0VmFsdWVEb21haW4ucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgICAgTWFwPGlyLkZvckluU3RhdGVtZW50LCBBYnN0cmFjdFZhbHVlPiBtb3ZlTmV4dE1hcCA9CiAgICAgICAgICBzb3VyY2UucmVhZFRyZWVOb2RlTWFwSW5Db250ZXh0KAogICAgICAgICAgICAgICgpID0+IGFic3RyYWN0VmFsdWVEb21haW4ucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgICAgc291cmNlLmVuZCh0YWcpOwogICAgICByZXR1cm4gbmV3IEtlcm5lbEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YS5pbnRlcm5hbCgKICAgICAgICAgIHNlbmRNYXAsIGl0ZXJhdG9yTWFwLCBjdXJyZW50TWFwLCBtb3ZlTmV4dE1hcCk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGlyLk1lbWJlciBjb250ZXh0LAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIHNpbmsuaW5NZW1iZXJDb250ZXh0KGNvbnRleHQsICgpIHsKICAgICAgc2luay5iZWdpbih0YWcpOwogICAgICBzaW5rLndyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHQoCiAgICAgICAgICBfc2VuZE1hcCwKICAgICAgICAgIChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PgogICAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4ud3JpdGVBYnN0cmFjdFZhbHVlVG9EYXRhU2luayhzaW5rLCB2YWx1ZSksCiAgICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgICBzaW5rLndyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHQoCiAgICAgICAgICBfaXRlcmF0b3JNYXAsCiAgICAgICAgICAoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4KICAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLndyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmsoc2luaywgdmFsdWUpLAogICAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgc2luay53cml0ZVRyZWVOb2RlTWFwSW5Db250ZXh0KAogICAgICAgICAgX2N1cnJlbnRNYXAsCiAgICAgICAgICAoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4KICAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLndyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmsoc2luaywgdmFsdWUpLAogICAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgc2luay53cml0ZVRyZWVOb2RlTWFwSW5Db250ZXh0KAogICAgICAgICAgX21vdmVOZXh0TWFwLAogICAgICAgICAgKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+CiAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi53cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKHNpbmssIHZhbHVlKSwKICAgICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICAgIHNpbmsuZW5kKHRhZyk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBjb21wcmVzcygpIHsKICAgIGlmIChfc2VuZE1hcCAhPSBudWxsKSB7CiAgICAgIF9zZW5kTWFwLnJlbW92ZVdoZXJlKF9tYXBzVG9OdWxsKTsKICAgICAgaWYgKF9zZW5kTWFwLmlzRW1wdHkpIHsKICAgICAgICBfc2VuZE1hcCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmIChfaXRlcmF0b3JNYXAgIT0gbnVsbCkgewogICAgICBfaXRlcmF0b3JNYXAucmVtb3ZlV2hlcmUoX21hcHNUb051bGwpOwogICAgICBpZiAoX2l0ZXJhdG9yTWFwLmlzRW1wdHkpIHsKICAgICAgICBfaXRlcmF0b3JNYXAgPSBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAoX2N1cnJlbnRNYXAgIT0gbnVsbCkgewogICAgICBfY3VycmVudE1hcC5yZW1vdmVXaGVyZShfbWFwc1RvTnVsbCk7CiAgICAgIGlmIChfY3VycmVudE1hcC5pc0VtcHR5KSB7CiAgICAgICAgX2N1cnJlbnRNYXAgPSBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAoX21vdmVOZXh0TWFwICE9IG51bGwpIHsKICAgICAgX21vdmVOZXh0TWFwLnJlbW92ZVdoZXJlKF9tYXBzVG9OdWxsKTsKICAgICAgaWYgKF9tb3ZlTmV4dE1hcC5pc0VtcHR5KSB7CiAgICAgICAgX21vdmVOZXh0TWFwID0gbnVsbDsKICAgICAgfQogICAgfQogICAgaWYgKF9zZW5kTWFwID09IG51bGwgJiYKICAgICAgICBfaXRlcmF0b3JNYXAgPT0gbnVsbCAmJgogICAgICAgIF9jdXJyZW50TWFwID09IG51bGwgJiYKICAgICAgICBfbW92ZU5leHRNYXAgPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZTZW5kKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIGlmIChfc2VuZE1hcCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfc2VuZE1hcFtub2RlXTsKICB9CgogIHZvaWQgc2V0Q3VycmVudFR5cGVNYXNrKGlyLkZvckluU3RhdGVtZW50IG5vZGUsIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgX2N1cnJlbnRNYXAgPz89IDxpci5Gb3JJblN0YXRlbWVudCwgQWJzdHJhY3RWYWx1ZT57fTsKICAgIF9jdXJyZW50TWFwW25vZGVdID0gbWFzazsKICB9CgogIHZvaWQgc2V0TW92ZU5leHRUeXBlTWFzayhpci5Gb3JJblN0YXRlbWVudCBub2RlLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIF9tb3ZlTmV4dE1hcCA/Pz0gPGlyLkZvckluU3RhdGVtZW50LCBBYnN0cmFjdFZhbHVlPnt9OwogICAgX21vdmVOZXh0TWFwW25vZGVdID0gbWFzazsKICB9CgogIHZvaWQgc2V0SXRlcmF0b3JUeXBlTWFzayhpci5Gb3JJblN0YXRlbWVudCBub2RlLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIF9pdGVyYXRvck1hcCA/Pz0gPGlyLkZvckluU3RhdGVtZW50LCBBYnN0cmFjdFZhbHVlPnt9OwogICAgX2l0ZXJhdG9yTWFwW25vZGVdID0gbWFzazsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JDdXJyZW50KGNvdmFyaWFudCBpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAoX2N1cnJlbnRNYXAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2N1cnJlbnRNYXBbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yTW92ZU5leHQoY292YXJpYW50IGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChfbW92ZU5leHRNYXAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX21vdmVOZXh0TWFwW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvcihjb3ZhcmlhbnQgaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKF9pdGVyYXRvck1hcCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfaXRlcmF0b3JN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QxkZMTAZUU0eOitRIjkrUSI6K1EiF0A6CAQBDDkxJxcmFCNNHCYYI00cJhcjTRwmGCNNHBUIBAEMLhwpHhkIBiAtIh0IBh8sIRwIBiAtIh0IBhwgHyATBhEEAQwvJxsEAUg6HgQBSTsfBAFJOx8EAQxKKh4EAQxLKx8EAQxDKx8EATsxGwQBDDEnGwQCAUoBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2luZmVycmVyX2VuZ2luZS5kYXJ0OnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lvL3Bvc2l0aW9uX2luZm9ybWF0aW9uLmRhcnTAALG6Ly8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBTb3VyY2UgaW5mb3JtYXRpb24gc3lzdGVtIG1hcHBpbmcgdGhhdCBhdHRlbXB0cyBhIHNlbWFudGljIG1hcHBpbmcgYmV0d2VlbgovLy8gb2Zmc2V0cyBvZiBKYXZhU2NyaXB0IGNvZGUgcG9pbnRzIHRvIG9mZnNldHMgb2YgRGFydCBjb2RlIHBvaW50cy4KCmxpYnJhcnkgZGFydDJqcy5zb3VyY2VfaW5mb3JtYXRpb24ucG9zaXRpb247CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi9qcy9qc19kZWJ1Zy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qc19zb3VyY2VfbWFwcGluZy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ2NvZGVfb3V0cHV0LmRhcnQnIHNob3cgQnVmZmVyZWRDb2RlT3V0cHV0OwppbXBvcnQgJ3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKCi8vLyBbU291cmNlSW5mb3JtYXRpb25dIHRoYXQgY29uc2lzdHMgb2YgYW4gb2Zmc2V0IHBvc2l0aW9uIGludG8gdGhlIHNvdXJjZQovLy8gY29kZS4KY2xhc3MgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbiBleHRlbmRzIFNvdXJjZUluZm9ybWF0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdzb3VyY2UtaW5mb3JtYXRpb24nOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTb3VyY2VMb2NhdGlvbiBzdGFydFBvc2l0aW9uOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTb3VyY2VMb2NhdGlvbiBpbm5lclBvc2l0aW9uOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBMaXN0PEZyYW1lQ29udGV4dD4gaW5saW5pbmdDb250ZXh0OwoKICBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uKAogICAgICB0aGlzLnN0YXJ0UG9zaXRpb24sIHRoaXMuaW5uZXJQb3NpdGlvbiwgdGhpcy5pbmxpbmluZ0NvbnRleHQpOwoKICBmYWN0b3J5IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFNvdXJjZUxvY2F0aW9uIHN0YXJ0UG9zaXRpb24gPSBzb3VyY2UucmVhZENhY2hlZDxTb3VyY2VMb2NhdGlvbj4oCiAgICAgICAgKCkgPT4gU291cmNlTG9jYXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgU291cmNlTG9jYXRpb24gaW5uZXJQb3NpdGlvbiA9IHNvdXJjZS5yZWFkQ2FjaGVkPFNvdXJjZUxvY2F0aW9uPigKICAgICAgICAoKSA9PiBTb3VyY2VMb2NhdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBMaXN0PEZyYW1lQ29udGV4dD4gaW5saW5pbmdDb250ZXh0ID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IEZyYW1lQ29udGV4dC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24oCiAgICAgICAgc3RhcnRQb3NpdGlvbiwgaW5uZXJQb3NpdGlvbiwgaW5saW5pbmdDb250ZXh0KTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rSW50ZXJuYWwoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNhY2hlZCgKICAgICAgICBzdGFydFBvc2l0aW9uLAogICAgICAgIChTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikgPT4KICAgICAgICAgICAgU291cmNlTG9jYXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmssIHNvdXJjZUxvY2F0aW9uKSk7CiAgICBzaW5rLndyaXRlQ2FjaGVkKAogICAgICAgIGlubmVyUG9zaXRpb24sCiAgICAgICAgKFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uKSA9PgogICAgICAgICAgICBTb3VyY2VMb2NhdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luaywgc291cmNlTG9jYXRpb24pKTsKICAgIHNpbmsud3JpdGVMaXN0KGlubGluaW5nQ29udGV4dCwKICAgICAgICAoRnJhbWVDb250ZXh0IGNvbnRleHQpID0+IGNvbnRleHQud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxTb3VyY2VMb2NhdGlvbj4gZ2V0IHNvdXJjZUxvY2F0aW9ucyB7CiAgICBMaXN0PFNvdXJjZUxvY2F0aW9uPiBsaXN0ID0gPFNvdXJjZUxvY2F0aW9uPltdOwogICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gbnVsbCkgewogICAgICBsaXN0LmFkZChzdGFydFBvc2l0aW9uKTsKICAgIH0KICAgIGlmIChpbm5lclBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgbGlzdC5hZGQoaW5uZXJQb3NpdGlvbik7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gZ2V0IHNvdXJjZVNwYW4gewogICAgU291cmNlTG9jYXRpb24gbG9jYXRpb24gPQogICAgICAgIHN0YXJ0UG9zaXRpb24gIT0gbnVsbCA/IHN0YXJ0UG9zaXRpb24gOiBpbm5lclBvc2l0aW9uOwogICAgVXJpIHVyaSA9IGxvY2F0aW9uLnNvdXJjZVVyaTsKICAgIGludCBvZmZzZXQgPSBsb2NhdGlvbi5vZmZzZXQ7CiAgICByZXR1cm4gbmV3IFNvdXJjZVNwYW4odXJpLCBvZmZzZXQsIG9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBIYXNoaW5nLmxpc3RIYXNoKAogICAgICAgIGlubGluaW5nQ29udGV4dCwgSGFzaGluZy5vYmplY3RzSGFzaChzdGFydFBvc2l0aW9uLCBpbm5lclBvc2l0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbiAmJgogICAgICAgIHN0YXJ0UG9zaXRpb24gPT0gb3RoZXIuc3RhcnRQb3NpdGlvbiAmJgogICAgICAgIGlubmVyUG9zaXRpb24gPT0gb3RoZXIuaW5uZXJQb3NpdGlvbiAmJgogICAgICAgIGVxdWFsRWxlbWVudHMoaW5saW5pbmdDb250ZXh0LCBvdGhlci5pbmxpbmluZ0NvbnRleHQpOwogIH0KCiAgLy8vIENyZWF0ZSBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiB1c2luZyBbdXJpVGV4dF0KICAvLy8gYXMgdGhlIFVyaSByZXByZXNlbnRhdGlvbi4KICBTdHJpbmcgX2NvbXB1dGVUZXh0KFN0cmluZyB1cmlUZXh0KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnJHVyaVRleHQ6Jyk7CiAgICAvLyBVc2UgMS1iYXNlZCBsaW5lL2NvbHVtbiBpbmZvIHRvIG1hdGNoIHVzdWFsIGRhcnQgdG9vbCBvdXRwdXQuCiAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdbJHtzdGFydFBvc2l0aW9uLmxpbmV9LCcKICAgICAgICAgICcke3N0YXJ0UG9zaXRpb24uY29sdW1ufV0nKTsKICAgIH0KICAgIGlmIChpbm5lclBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJy1bJHtpbm5lclBvc2l0aW9uLmxpbmV9LCcKICAgICAgICAgICcke2lubmVyUG9zaXRpb24uY29sdW1ufV0nKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgewogICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gX2NvbXB1dGVUZXh0KHN0YXJ0UG9zaXRpb24uc291cmNlVXJpLnBhdGhTZWdtZW50cy5sYXN0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfY29tcHV0ZVRleHQoaW5uZXJQb3NpdGlvbi5zb3VyY2VVcmkucGF0aFNlZ21lbnRzLmxhc3QpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gX2NvbXB1dGVUZXh0KCcke3N0YXJ0UG9zaXRpb24uc291cmNlVXJpfScpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9jb21wdXRlVGV4dCgnJHtpbm5lclBvc2l0aW9uLnNvdXJjZVVyaX0nKTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0UG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5CiAgICBpbXBsZW1lbnRzIEphdmFTY3JpcHRTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHsKICBjb25zdCBBYnN0cmFjdFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSgpOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciBjcmVhdGVQcm9jZXNzb3IoCiAgICAgIFNvdXJjZU1hcHBlclByb3ZpZGVyIHByb3ZpZGVyLCBTb3VyY2VJbmZvcm1hdGlvblJlYWRlciByZWFkZXIpIHsKICAgIHJldHVybiBuZXcgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvblByb2Nlc3Nvcihwcm92aWRlciwgcmVhZGVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25Db21wbGV0ZSgpIHt9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU291cmNlTWFwcGVkTWFya2VyKCkgewogICAgcmV0dXJuIGNvbnN0IFNvdXJjZU1hcHBlZE1hcmtlcigpOwogIH0KfQoKLy8vIE1hcmtlciB1c2VkIHRvIHRhZyB0aGUgcm9vdCBub2RlcyBvZiBzb3VyY2UtbWFwcGVkIGNvZGUuCi8vLwovLy8gVGhpcyBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBKYXZhU2NyaXB0IG5vZGVzIHRoYXQgc2hvdWxkbid0Ci8vLyBoYXZlIHNvdXJjZSBsb2NhdGlvbnMgKGxpa2UgdGhlIHByZW1hYmxlKSBmcm9tIHRoZSBub2RlcyB0aGF0IHNob3VsZAovLy8gKGxpa2UgZnVuY3Rpb25zIGNvbXBpbGVkIGZyb20gRGFydCBjb2RlKS4KY2xhc3MgU291cmNlTWFwcGVkTWFya2VyIGV4dGVuZHMgU291cmNlSW5mb3JtYXRpb24gewogIGNvbnN0IFNvdXJjZU1hcHBlZE1hcmtlcigpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHNob3J0VGV4dCA9PiAnJzsKCiAgQG92ZXJyaWRlCiAgTGlzdDxTb3VyY2VMb2NhdGlvbj4gZ2V0IHNvdXJjZUxvY2F0aW9ucyA9PiBjb25zdCA8U291cmNlTG9jYXRpb24+W107CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gZ2V0IHNvdXJjZVNwYW4gPT4gbmV3IFNvdXJjZVNwYW4obnVsbCwgbnVsbCwgbnVsbCk7Cn0KCi8vLyBUaGUgc3RhcnQsIGVuZCBhbmQgY2xvc2luZyBvZmZzZXRzIGZvciBhIFtqcy5Ob2RlXS4KY2xhc3MgQ29kZVBvc2l0aW9uIHsKICBmaW5hbCBpbnQgc3RhcnRQb3NpdGlvbjsKICBmaW5hbCBpbnQgZW5kUG9zaXRpb247CiAgZmluYWwgaW50IGNsb3NpbmdQb3NpdGlvbjsKCiAgQ29kZVBvc2l0aW9uKHRoaXMuc3RhcnRQb3NpdGlvbiwgdGhpcy5lbmRQb3NpdGlvbiwgdGhpcy5jbG9zaW5nUG9zaXRpb24pOwoKICAvLyBpZ25vcmU6IE1JU1NJTkdfUkVUVVJOCiAgaW50IGdldFBvc2l0aW9uKENvZGVQb3NpdGlvbktpbmQga2luZCkgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgQ29kZVBvc2l0aW9uS2luZC5TVEFSVDoKICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbjsKICAgICAgY2FzZSBDb2RlUG9zaXRpb25LaW5kLkVORDoKICAgICAgICByZXR1cm4gZW5kUG9zaXRpb247CiAgICAgIGNhc2UgQ29kZVBvc2l0aW9uS2luZC5DTE9TSU5HOgogICAgICAgIHJldHVybiBjbG9zaW5nUG9zaXRpb247CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0NvZGVQb3NpdGlvbihzdGFydD0kc3RhcnRQb3NpdGlvbiwnCiAgICAgICAgJ2VuZD0kZW5kUG9zaXRpb24sY2xvc2luZz0kY2xvc2luZ1Bvc2l0aW9uKSc7CiAgfQp9CgovLy8gQSBtYXAgZnJvbSBhIFtqcy5Ob2RlXSB0byBpdHMgW0NvZGVQb3NpdGlvbl0uCmFic3RyYWN0IGNsYXNzIENvZGVQb3NpdGlvbk1hcCB7CiAgQ29kZVBvc2l0aW9uIG9wZXJhdG9yIFtdKGpzLk5vZGUgbm9kZSk7Cn0KCi8vLyBSZWdpc3RyeSBmb3IgbWFwcGluZyBbanMuTm9kZV1zIHRvIHRoZWlyIFtDb2RlUG9zaXRpb25dLgpjbGFzcyBDb2RlUG9zaXRpb25SZWNvcmRlciBpbXBsZW1lbnRzIENvZGVQb3NpdGlvbk1hcCB7CiAgTWFwPGpzLk5vZGUsIENvZGVQb3NpdGlvbj4gX2NvZGVQb3NpdGlvbk1hcCA9CiAgICAgIG5ldyBNYXA8anMuTm9kZSwgQ29kZVBvc2l0aW9uPi5pZGVudGl0eSgpOwoKICB2b2lkIHJlZ2lzdGVyUG9zaXRpb25zKAogICAgICBqcy5Ob2RlIG5vZGUsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIGludCBjbG9zaW5nUG9zaXRpb24pIHsKICAgIHJlZ2lzdGVyQ29kZVBvc2l0aW9uKAogICAgICAgIG5vZGUsIG5ldyBDb2RlUG9zaXRpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNsb3NpbmdQb3NpdGlvbikpOwogIH0KCiAgdm9pZCByZWdpc3RlckNvZGVQb3NpdGlvbihqcy5Ob2RlIG5vZGUsIENvZGVQb3NpdGlvbiBjb2RlUG9zaXRpb24pIHsKICAgIF9jb2RlUG9zaXRpb25NYXBbbm9kZV0gPSBjb2RlUG9zaXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBDb2RlUG9zaXRpb24gb3BlcmF0b3IgW10oanMuTm9kZSBub2RlKSA9PiBfY29kZVBvc2l0aW9uTWFwW25vZGVdOwp9CgovLy8gRW51bSB2YWx1ZXMgZm9yIHRoZSBwYXJ0IG9mIGEgRGFydCBub2RlIHVzZWQgZm9yIHRoZSBzb3VyY2UgbG9jYXRpb24gb2Zmc2V0LgplbnVtIFNvdXJjZVBvc2l0aW9uS2luZCB7CiAgLy8vIFRoZSBzb3VyY2UgbWFwcGluZyBzaG91bGQgcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBEYXJ0IG5vZGUuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSB0aGUgZmlyc3QgJygnIGZvciB0aGUgYCgqKSgpYCBjYWxsIGFuZCAnZicgb2YgYm90aCB0aGUKICAvLy8gYGZvbygpYCBhbmQgdGhlIGAqLmJhcigpYCBjYWxsOgogIC8vLwogIC8vLyAgICAgKGZvbygpLmJhcigpKSgpCiAgLy8vICAgICBeICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIGAoKikoKWAgbm9kZQogIC8vLyAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBgZm9vKClgIG5vZGUKICAvLy8gICAgICBeICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFydCBvZiB0aGUgYCouYmFyKClgIG5vZGUKICAvLy8KICBTVEFSVCwKCiAgLy8vIFRoZSBzb3VyY2UgbWFwcGluZyBzaG91bGQgcG9pbnQgYW4gaW5uZXIgcG9zaXRpb24gb2YgdGhlIERhcnQgbm9kZS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIHRoZSBzZWNvbmQgJygnIG9mIHRoZSBgKCopKClgIGNhbGwsIHRoZSAnZicgb2YgdGhlIGBmb28oKWAKICAvLy8gY2FsbCBhbmQgdGhlICdiJyBvZiB0aGUgYCouYmFyKClgIGNhbGw6CiAgLy8vCiAgLy8vICAgICAoZm9vKCkuYmFyKCkpKCkKICAvLy8gICAgICAgICAgICAgICAgICBeICAgICAgICAgIC8vIHRoZSBpbm5lciBwb3NpdGlvbiBvZiB0aGUgYCgqKSgpYCBub2RlCiAgLy8vICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaW5uZXIgcG9zaXRpb24gb2YgdGhlIGBmb28oKWAgbm9kZQogIC8vLyAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgLy8gdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBgKi5iYXIoKWAgbm9kZQogIC8vLwogIC8vLyBGb3IgZnVuY3Rpb24gZXhwcmVzc2lvbnMgdGhlIGlubmVyIHBvc2l0aW9uIGlzIHRoZSBjbG9zaW5nIGJyYWNlIG9yIHRoZQogIC8vLyBhcnJvdzoKICAvLy8KICAvLy8gICAgIGZvbygpID0+ICgpIHt9CiAgLy8vICAgICAgICAgICBeICAgICAgICAgICAgICAgICAvLyB0aGUgaW5uZXIgcG9zaXRpb24gb2YgdGhlICdmb28nIGZ1bmN0aW9uCiAgLy8vICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAvLyB0aGUgaW5uZXIgcG9zaXRpb24gb2YgdGhlIGNsb3N1cmUKICAvLy8KICBJTk5FUiwKfQoKLy8gaWdub3JlOiBNSVNTSU5HX1JFVFVSTgpTb3VyY2VMb2NhdGlvbiBnZXRTb3VyY2VMb2NhdGlvbihTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgIFtTb3VyY2VQb3NpdGlvbktpbmQgc291cmNlUG9zaXRpb25LaW5kID0gU291cmNlUG9zaXRpb25LaW5kLlNUQVJUXSkgewogIGlmIChzb3VyY2VJbmZvcm1hdGlvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICBzd2l0Y2ggKHNvdXJjZVBvc2l0aW9uS2luZCkgewogICAgY2FzZSBTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlQ6CiAgICAgIHJldHVybiBzb3VyY2VJbmZvcm1hdGlvbi5zdGFydFBvc2l0aW9uOwogICAgY2FzZSBTb3VyY2VQb3NpdGlvbktpbmQuSU5ORVI6CiAgICAgIHJldHVybiBzb3VyY2VJbmZvcm1hdGlvbi5pbm5lclBvc2l0aW9uID8/IHNvdXJjZUluZm9ybWF0aW9uLnN0YXJ0UG9zaXRpb247CiAgfQp9CgovLy8gRW51bSB2YWx1ZXMgZm9yIHRoZSBwYXJ0IG9mIHRoZSBKYXZhU2NyaXB0IG5vZGUgdXNlZCBmb3IgdGhlIEphdmFTY3JpcHQKLy8vIGNvZGUgb2Zmc2V0IG9mIGEgc291cmNlIG1hcHBpbmcuCmVudW0gQ29kZVBvc2l0aW9uS2luZCB7CiAgLy8vIFRoZSBzb3VyY2UgbWFwcGluZyBpcyBwdXQgb24gbGVmdC1tb3N0IG9mZnNldCBvZiB0aGUgbm9kZS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIG9uIHRoZSAnZicgb2YgYSBmdW5jdGlvbiBvciAncicgb2YgYSByZXR1cm4gc3RhdGVtZW50OgogIC8vLwogIC8vLyAgICAgZm9vOiBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH0KICAvLy8gICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiBzdGFydCBwb3NpdGlvbgogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgLy8gdGhlIHJldHVybiBzdGFydCBwb3NpdGlvbgogIFNUQVJULAoKICAvLy8gVGhlIHNvdXJjZSBtYXBwaW5nIGlzIHB1dCBvbiB0aGUgY2xvc2luZyB0b2tlbi4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIG9uIHRoZSAnfScgb2YgYSBmdW5jdGlvbiBvciB0aGUgJzsnIG9mIGEgcmV0dXJuIHN0YXRlbWVudDoKICAvLy8KICAvLy8gICAgIGZvbzogZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9CiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAvLyB0aGUgZnVuY3Rpb24gY2xvc2luZyBwb3NpdGlvbgogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgLy8gdGhlIHJldHVybiBjbG9zaW5nIHBvc2l0aW9uCiAgLy8vCiAgQ0xPU0lORywKCiAgLy8vIFRoZSBzb3VyY2UgbWFwcGluZyBpcyBwdXQgYXQgdGhlIGVuZCBvZiB0aGUgY29kZSBmb3IgdGhlIG5vZGUuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBhZnRlciAnfScgb2YgYSBmdW5jdGlvbiBvciBhZnRlciB0aGUgJzsnIG9mIGEgcmV0dXJuCiAgLy8vIHN0YXRlbWVudDoKICAvLy8KICAvLy8gICAgIGZvbzogZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9CiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgLy8gdGhlIGZ1bmN0aW9uIGVuZCBwb3NpdGlvbgogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgIC8vIHRoZSByZXR1cm4gZW5kIHBvc2l0aW9uCiAgLy8vCiAgRU5ELAp9CgovLy8gUHJvY2Vzc29yIHRoYXQgYXNzb2NpYXRlcyBbU291cmNlTG9jYXRpb25dcyBmcm9tIFtTb3VyY2VJbmZvcm1hdGlvbl0gb24KLy8vIFtqcy5Ob2RlXXMgd2l0aCB0aGUgdGFyZ2V0IG9mZnNldHMgaW4gYSBbU291cmNlTWFwcGVyXS4KY2xhc3MgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciBleHRlbmRzIFNvdXJjZUluZm9ybWF0aW9uUHJvY2Vzc29yIHsKICAvLy8gVGhlIGlkIGZvciB0aGlzIHNvdXJjZSBpbmZvcm1hdGlvbiBlbmdpbmUuCiAgLy8vCiAgLy8vIFRoZSBpZCBpcyBhZGRlZCB0byB0aGUgc291cmNlIG1hcCBmaWxlIGluIGFuIGV4dHJhICJlbmdpbmUiIHByb3BlcnR5IGFuZAogIC8vLyBzZXJ2ZXMgYXMgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIGVuZ2luZS4KICAvLy8KICAvLy8gVGhlIHZlcnNpb24gaGlzdG9yeSBvZiB0aGlzIGVuZ2luZSBpczoKICAvLy8KICAvLy8gICB2MjogVGhlIGluaXRpYWwgdmVyc2lvbiB3aXRoIGFuIGlkLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgaWQgPSAndjInOwoKICBmaW5hbCBDb2RlUG9zaXRpb25SZWNvcmRlciBjb2RlUG9zaXRpb25SZWNvcmRlciA9IG5ldyBDb2RlUG9zaXRpb25SZWNvcmRlcigpOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKICBDb2RlUG9zaXRpb25NYXAgY29kZVBvc2l0aW9uTWFwOwogIExpc3Q8VHJhY2VMaXN0ZW5lcj4gdHJhY2VMaXN0ZW5lcnM7CiAgSW5saW5pbmdUcmFjZUxpc3RlbmVyIGlubGluaW5nTGlzdGVuZXI7CgogIFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IoU291cmNlTWFwcGVyUHJvdmlkZXIgcHJvdmlkZXIsIHRoaXMucmVhZGVyLAogICAgICBbQ292ZXJhZ2UgY292ZXJhZ2VdKSB7CiAgICBjb2RlUG9zaXRpb25NYXAgPSBjb3ZlcmFnZSAhPSBudWxsCiAgICAgICAgPyBuZXcgQ29kZVBvc2l0aW9uQ292ZXJhZ2UoY29kZVBvc2l0aW9uUmVjb3JkZXIsIGNvdmVyYWdlKQogICAgICAgIDogY29kZVBvc2l0aW9uUmVjb3JkZXI7CiAgICB2YXIgc291cmNlTWFwcGVyID0gcHJvdmlkZXIuY3JlYXRlU291cmNlTWFwcGVyKGlkKTsKICAgIHRyYWNlTGlzdGVuZXJzID0gWwogICAgICBuZXcgUG9zaXRpb25UcmFjZUxpc3RlbmVyKHNvdXJjZU1hcHBlciwgcmVhZGVyKSwKICAgICAgaW5saW5pbmdMaXN0ZW5lciA9IG5ldyBJbmxpbmluZ1RyYWNlTGlzdGVuZXIoc291cmNlTWFwcGVyLCByZWFkZXIpLAogICAgXTsKICAgIGlmIChjb3ZlcmFnZSAhPSBudWxsKSB7CiAgICAgIHRyYWNlTGlzdGVuZXJzLmFkZChuZXcgQ292ZXJhZ2VMaXN0ZW5lcihjb3ZlcmFnZSwgcmVhZGVyKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3MoanMuTm9kZSBub2RlLCBCdWZmZXJlZENvZGVPdXRwdXQgY29kZSkgewogICAgbmV3IEphdmFTY3JpcHRUcmFjZXIoY29kZVBvc2l0aW9uTWFwLCByZWFkZXIsIHRyYWNlTGlzdGVuZXJzKS5hcHBseShub2RlKTsKICAgIGlubGluaW5nTGlzdGVuZXI/LmZpbmlzaCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvblBvc2l0aW9ucygKICAgICAganMuTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBpbnQgY2xvc2luZ1Bvc2l0aW9uKSB7CiAgICBjb2RlUG9zaXRpb25SZWNvcmRlci5yZWdpc3RlclBvc2l0aW9ucygKICAgICAgICBub2RlLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY2xvc2luZ1Bvc2l0aW9uKTsKICB9Cn0KCi8vLyBWaXNpdG9yIHRoYXQgY29tcHV0ZXMgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYSBbanMuTm9kZV0gdXNpbmcgaW5mb3JtYXRpb24KLy8vIGF0dGFjaGVkIHRvIHRoZSBub2RlIGl0c2VsZiBvciBhbHRlcm5hdGl2ZWx5IGZyb20gY2hpbGQgbm9kZXMuCmNsYXNzIE5vZGVTb3VyY2VJbmZvcm1hdGlvbiBleHRlbmRzIGpzLkJhc2VWaXNpdG9yPFNvdXJjZUluZm9ybWF0aW9uPiB7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgcmVhZGVyOwoKICBjb25zdCBOb2RlU291cmNlSW5mb3JtYXRpb24odGhpcy5yZWFkZXIpOwoKICBTb3VyY2VJbmZvcm1hdGlvbiB2aXNpdChqcy5Ob2RlIG5vZGUpID0+IG5vZGU/LmFjY2VwdCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gdmlzaXROb2RlKGpzLk5vZGUgbm9kZSkgPT4KICAgICAgcmVhZGVyLmdldFNvdXJjZUluZm9ybWF0aW9uKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoanMuRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9IHJlYWRlci5nZXRTb3VyY2VJbmZvcm1hdGlvbihub2RlKTsKICAgIGlmIChzb3VyY2VJbmZvcm1hdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIH0KICAgIHJldHVybiB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgKICAgICAganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSByZWFkZXIuZ2V0U291cmNlSW5mb3JtYXRpb24obm9kZSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gc291cmNlSW5mb3JtYXRpb247CiAgICB9CiAgICBmb3IgKGpzLk5vZGUgZGVjbGFyYXRpb24gaW4gbm9kZS5kZWNsYXJhdGlvbnMpIHsKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSB2aXNpdChkZWNsYXJhdGlvbik7CiAgICAgIGlmIChzb3VyY2VJbmZvcm1hdGlvbiAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHNvdXJjZUluZm9ybWF0aW9uOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbigKICAgICAganMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9IHJlYWRlci5nZXRTb3VyY2VJbmZvcm1hdGlvbihub2RlKTsKICAgIGlmIChzb3VyY2VJbmZvcm1hdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIH0KICAgIHJldHVybiB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIHZpc2l0QXNzaWdubWVudChqcy5Bc3NpZ25tZW50IG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gcmVhZGVyLmdldFNvdXJjZUluZm9ybWF0aW9uKG5vZGUpOwogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHNvdXJjZUluZm9ybWF0aW9uOwogICAgfQogICAgcmV0dXJuIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KfQoKLy8vIE1peGluIHRoYXQgYWRkIHN1cHBvcnQgZm9yIGNvbXB1dGluZyBbU291cmNlSW5mb3JtYXRpb25dIGZvciBhIFtqcy5Ob2RlXS4KYWJzdHJhY3QgY2xhc3MgTm9kZVRvU291cmNlSW5mb3JtYXRpb25NaXhpbiB7CiAgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgZ2V0IHJlYWRlcjsKCiAgU291cmNlSW5mb3JtYXRpb24gY29tcHV0ZVNvdXJjZUluZm9ybWF0aW9uKGpzLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5ldyBOb2RlU291cmNlSW5mb3JtYXRpb24ocmVhZGVyKS52aXNpdChub2RlKTsKICB9Cn0KCi8vLyBbVHJhY2VMaXN0ZW5lcl0gdGhhdCByZWdpc3RlciBpbmxpbmluZyBjb250ZXh0LWRhdGEgd2l0aCBhIFtTb3VyY2VNYXBwZXJdLgpjbGFzcyBJbmxpbmluZ1RyYWNlTGlzdGVuZXIgZXh0ZW5kcyBUcmFjZUxpc3RlbmVyCiAgICB3aXRoIE5vZGVUb1NvdXJjZUluZm9ybWF0aW9uTWl4aW4gewogIGZpbmFsIFNvdXJjZU1hcHBlciBzb3VyY2VNYXBwZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgcmVhZGVyOwogIGZpbmFsIE1hcDxpbnQsIExpc3Q8RnJhbWVDb250ZXh0Pj4gX2ZyYW1lcyA9IHt9OwoKICBJbmxpbmluZ1RyYWNlTGlzdGVuZXIodGhpcy5zb3VyY2VNYXBwZXIsIHRoaXMucmVhZGVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBvblN0ZXAoanMuTm9kZSBub2RlLCBPZmZzZXQgb2Zmc2V0LCBTdGVwS2luZCBraW5kKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9IGNvbXB1dGVTb3VyY2VJbmZvcm1hdGlvbihub2RlKTsKICAgIGlmIChzb3VyY2VJbmZvcm1hdGlvbiA9PSBudWxsKSByZXR1cm47CiAgICAvLyBUT0RPKHNpZ211bmQpOiBlbmFibGUgdGhpcyBhc3NlcnRpb24uCiAgICAvLyBhc3NlcnQob2Zmc2V0LnZhbHVlICE9IG51bGwsICJFeHBlY3RlZCBhIHZhbGlkIG9mZnNldDogJG5vZGUgJG9mZnNldCIpOwogICAgaWYgKG9mZnNldC52YWx1ZSA9PSBudWxsKSByZXR1cm47CgogICAgLy8gVE9ETyhzaWdtdW5kKTogZW5hYmxlIHRoaXMgYXNzZXJ0aW9uCiAgICAvL2Fzc2VydChfZnJhbWVzW29mZnNldC52YWx1ZV0gPT0gbnVsbCwKICAgIC8vICAgICAiRXhwZWN0IGEgc2luZ2xlIGVudHJ5IHBlciBvZmZzZXQ6ICRvZmZzZXQgJG5vZGUiKTsKICAgIGlmIChfZnJhbWVzW29mZnNldC52YWx1ZV0gIT0gbnVsbCkgcmV0dXJuOwoKICAgIC8vIER1cmluZyB0cmFjaW5nIHdlIG9ubHkgY29sbGVjdCBpbmZvcm1hdGlvbiBwZXIgb2Zmc2V0IGJlY2F1c2UgdGhlIHRyYWNlcgogICAgLy8gdmlzaXRzIG5vZGVzIGluIHRyZWUgb3JkZXIuIFdlJ2xsIGxhdGVyIHNvcnQgdGhlIGRhdGEgYnkgb2Zmc2V0IGJlZm9yZQogICAgLy8gcmVnaXN0ZXJpbmcgdGhlIGZyYW1lIGRhdGEgd2l0aCBbU291cmNlTWFwcGVyXS4KICAgIGlmIChraW5kID09IFN0ZXBLaW5kLkZVTl9FWElUKSB7CiAgICAgIF9mcmFtZXNbb2Zmc2V0LnZhbHVlXSA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICBfZnJhbWVzW29mZnNldC52YWx1ZV0gPSBzb3VyY2VJbmZvcm1hdGlvbi5pbmxpbmluZ0NvbnRleHQ7CiAgICB9CiAgfQoKICAvLy8gQ29udmVydHMgdGhlIGlubGluaW5nIGNvbnRleHQgZGF0YSBjb2xsZWN0ZWQgZHVyaW5nIHRyYWNpbmcgaW50byBwdXNoL3BvcAogIC8vLyBzdGFjayBvcGVyYXRpb25zIHRoYXQgd2lsbCBiZSBlbWl0dGVkIHdpdGggdGhlIHNvdXJjZS1tYXAgZmlsZXMuCiAgdm9pZCBmaW5pc2goKSB7CiAgICBMaXN0PEZyYW1lQ29udGV4dD4gbGFzdElubGluaW5nQ29udGV4dDsKICAgIGZvciAodmFyIG9mZnNldCBpbiBfZnJhbWVzLmtleXMudG9MaXN0KCkuLnNvcnQoKSkgewogICAgICB2YXIgbmV3SW5saW5pbmdDb250ZXh0ID0gX2ZyYW1lc1tvZmZzZXRdOwoKICAgICAgLy8gTm90ZTogdGhpcyByZWxpZXMgb24gdGhlIGludmFyaWFudCB0aGF0LCB3aGVuIHdlIGJ1aWx0IHRoZSBpbmxpbmluZwogICAgICAvLyBjb250ZXh0IGxpc3RzIGR1cmluZyBTU0EsIHdlIGtlcHQgbGlzdHMgaWRlbnRpY2FsIHdoZW5ldmVyIHRoZXJlIHdlcmUKICAgICAgLy8gbm8gaW5saW5pbmcgY2hhbmdlcy4KICAgICAgaWYgKGxhc3RJbmxpbmluZ0NvbnRleHQgPT0gbmV3SW5saW5pbmdDb250ZXh0KSBjb250aW51ZTsKCiAgICAgIGJvb2wgaXNFbXB0eSA9IGZhbHNlOwogICAgICBpbnQgcG9wQ291bnQgPSAwOwogICAgICBMaXN0PEZyYW1lQ29udGV4dD4gcHVzaGVzID0gY29uc3QgW107CiAgICAgIGlmIChuZXdJbmxpbmluZ0NvbnRleHQgPT0gbnVsbCkgewogICAgICAgIHBvcENvdW50ID0gbGFzdElubGluaW5nQ29udGV4dC5sZW5ndGg7CiAgICAgICAgaXNFbXB0eSA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAobGFzdElubGluaW5nQ29udGV4dCA9PSBudWxsKSB7CiAgICAgICAgcHVzaGVzID0gbmV3SW5saW5pbmdDb250ZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIGludCBtaW4gPSBuZXdJbmxpbmluZ0NvbnRleHQubGVuZ3RoOwogICAgICAgIGlmIChtaW4gPiBsYXN0SW5saW5pbmdDb250ZXh0Lmxlbmd0aCkgbWluID0gbGFzdElubGluaW5nQ29udGV4dC5sZW5ndGg7CiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSB0b3RhbCBudW1iZXIgb2YgY29tbW9uIGZyYW1lcywgdG8gcHJvZHVjZSB0aGUgbWluaW1hbAogICAgICAgIC8vIHNldCBvZiBwb3AgYW5kIHB1c2ggb3BlcmF0aW9ucy4KICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1pbjsgaSsrKSB7CiAgICAgICAgICBpZiAoIWlkZW50aWNhbChuZXdJbmxpbmluZ0NvbnRleHRbaV0sIGxhc3RJbmxpbmluZ0NvbnRleHRbaV0pKSBicmVhazsKICAgICAgICB9CiAgICAgICAgaXNFbXB0eSA9IGkgPT0gMDsKICAgICAgICBwb3BDb3VudCA9IGxhc3RJbmxpbmluZ0NvbnRleHQubGVuZ3RoIC0gaTsKICAgICAgICBpZiAoaSA8IG5ld0lubGluaW5nQ29udGV4dC5sZW5ndGgpIHsKICAgICAgICAgIHB1c2hlcyA9IG5ld0lubGluaW5nQ29udGV4dC5zdWJsaXN0KGkpOwogICAgICAgIH0KICAgICAgfQogICAgICBsYXN0SW5saW5pbmdDb250ZXh0ID0gbmV3SW5saW5pbmdDb250ZXh0OwoKICAgICAgd2hpbGUgKHBvcENvdW50LS0gPiAwKSB7CiAgICAgICAgc291cmNlTWFwcGVyLnJlZ2lzdGVyUG9wKG9mZnNldCwgaXNFbXB0eTogcG9wQ291bnQgPT0gMCAmJiBpc0VtcHR5KTsKICAgICAgfQogICAgICBmb3IgKEZyYW1lQ29udGV4dCBwdXNoIGluIHB1c2hlcykgewogICAgICAgIHNvdXJjZU1hcHBlci5yZWdpc3RlclB1c2gob2Zmc2V0LAogICAgICAgICAgICBnZXRTb3VyY2VMb2NhdGlvbihwdXNoLmNhbGxJbmZvcm1hdGlvbiksIHB1c2guaW5saW5lZE1ldGhvZE5hbWUpOwogICAgICB9CiAgICB9CiAgfQp9CgovLy8gW1RyYWNlTGlzdGVuZXJdIHRoYXQgcmVnaXN0ZXIgW1NvdXJjZUxvY2F0aW9uXXMgd2l0aCBhIFtTb3VyY2VNYXBwZXJdLgpjbGFzcyBQb3NpdGlvblRyYWNlTGlzdGVuZXIgZXh0ZW5kcyBUcmFjZUxpc3RlbmVyCiAgICB3aXRoIE5vZGVUb1NvdXJjZUluZm9ybWF0aW9uTWl4aW4gewogIGZpbmFsIFNvdXJjZU1hcHBlciBzb3VyY2VNYXBwZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgcmVhZGVyOwoKICBQb3NpdGlvblRyYWNlTGlzdGVuZXIodGhpcy5zb3VyY2VNYXBwZXIsIHRoaXMucmVhZGVyKTsKCiAgLy8vIFJlZ2lzdGVycyBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIFtub2RlXSBvbiB0aGUgW29mZnNldF0gaW4gdGhlIEphdmFTY3JpcHQKICAvLy8gY29kZSB1c2luZyBba2luZF0gdG8gZGV0ZXJtaW5lIHdoYXQgaW5mb3JtYXRpb24gdG8gdXNlLgogIC8vLwogIC8vLyBGb3IgbW9zdCBub2RlcyB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyB1c2VkLgogIC8vLyBGb3IgaW5zdGFuY2UgYSByZXR1cm4gZXhwcmVzc2lvbiBwb2ludHMgdG8gdGhlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUKICAvLy8gc291cmNlIGluZm9ybWF0aW9uLCB0eXBpY2FsbHkgdGhlIHN0YXJ0IG9mIHRoZSByZXR1cm4gc3RhdGVtZW50IHRoYXQKICAvLy8gY3JlYXRlZCB0aGUgSmF2YVNjcmlwdCByZXR1cm4gbm9kZToKICAvLy8KICAvLy8gICAgIEphdmFTY3JpcHQ6ICAgICAgICAgICAgICAgICAgICBEYXJ0OgogIC8vLwogIC8vLyAgICAgQHJldHVybiAiZm9vIjsgICAgICAgICAgICAgICAgIHJldHVybiAiZm9vIjsKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgLy8vIChAIG1hcmtzIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcG9zaXRpb24gYW5kIF4gcG9pbnQgdG8gdGhlIG1hcHBlZCBEYXJ0CiAgLy8vIGNvZGUgcG9zaXRpb24uKQogIC8vLwogIC8vLwogIC8vLyBGb3IgW1N0ZXBLaW5kLkNBTExdIHRoZSBgQ2FsbFBvc2l0aW9uLmdldFNlbWFudGljUG9zaXRpb25Gb3JDYWxsYCBtZXRob2QKICAvLy8gaXMgY2FsbGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzdGFydCBvciB0aGUgaW5uZXIgcG9zaXRpb24gc2hvdWxkIGJlCiAgLy8vIHVzZWQuIEZvciBpbnN0YW5jZSBpZiB0aGUgcmVjZWl2ZXIgb2YgdGhlIEphdmFTY3JpcHQgY2FsbCBpcyBhICJzaW1wbGUiCiAgLy8vIGV4cHJlc3Npb24gdGhlbiB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyB1c2VkOgogIC8vLwogIC8vLyAgICAgSmF2YVNjcmlwdDogICAgICAgICAgICAgICAgICAgIERhcnQ6CiAgLy8vCiAgLy8vICAgICB0MS5AZm9vJDAoKSAgICAgICAgICAgICAgICAgICAgbG9jYWwuZm9vKCkKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgLy8vCiAgLy8vIElmIHRoZSByZWNlaXZlciBvZiB0aGUgSmF2YVNjcmlwdCBjYWxsIGlzICJjb21wbGV4IiB0aGVuIHRoZSBpbm5lcgogIC8vLyBwb3NpdGlvbiBvZiB0aGUgc291cmNlIGluZm9ybWF0aW9uIGlzIHVzZWQ6CiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIGdldCRiYXIoKS5AZm9vKCkgICAgICAgICAgICAgICBiYXIuZm9vKCkKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIC8vLwogIC8vLyBGb3IgW1N0ZXBLaW5kLkZVTl9FWElUXSB0aGUgaW5uZXIgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbgogIC8vLyBpcyB1c2VkLiBGb3IgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uIHdpdGhvdXQgYSByZXR1cm4gc3RhdGVtZW50IHRoaXMgbWFwcwogIC8vLyB0aGUgZW5kIGJyYWNlIHRvIHRoZSBlbmQgYnJhY2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgRGFydCBmdW5jdGlvbi4gRm9yIGEKICAvLy8gSmF2YVNjcmlwdCBmdW5jdGlvbiBleGl0ZWQgdGhyb3VnaCBhIHJldHVybiBzdGF0ZW1lbnQgdGhpcyBtYXBzIHRoZSBlbmQgb2YKICAvLy8gdGhlIHJldHVybiBzdGF0ZW1lbnQgdG8gdGhlIGVuZCBicmFjZSBvZiB0aGUgRGFydCBmdW5jdGlvbjoKICAvLy8KICAvLy8gICAgIEphdmFTY3JpcHQ6ICAgICAgICAgICAgICAgICAgICBEYXJ0OgogIC8vLwogIC8vLyAgICAgZm9vOiBmdW5jdGlvbigpIHsgICAgICAgICAgICAgIGZvbygpIHsKICAvLy8gICAgIEB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIC8vLyAgICAgZm9vOiBmdW5jdGlvbigpIHsgICAgICAgICAgICAgIGZvbygpIHsKICAvLy8gICAgICAgcmV0dXJuIDA7QCAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogIC8vLyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgQG92ZXJyaWRlCiAgdm9pZCBvblN0ZXAoanMuTm9kZSBub2RlLCBPZmZzZXQgb2Zmc2V0LCBTdGVwS2luZCBraW5kKSB7CiAgICBpbnQgY29kZUxvY2F0aW9uID0gb2Zmc2V0LnZhbHVlOwogICAgaWYgKGNvZGVMb2NhdGlvbiA9PSBudWxsKSByZXR1cm47CgogICAgaWYgKGtpbmQgPT0gU3RlcEtpbmQuTk9fSU5GTykgewogICAgICBzb3VyY2VNYXBwZXIucmVnaXN0ZXIobm9kZSwgY29kZUxvY2F0aW9uLCBjb25zdCBOb1NvdXJjZUxvY2F0aW9uTWFya2VyKCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSBjb21wdXRlU291cmNlSW5mb3JtYXRpb24obm9kZSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gPT0gbnVsbCkgcmV0dXJuOwoKICAgIHZvaWQgcmVnaXN0ZXJQb3NpdGlvbihTb3VyY2VQb3NpdGlvbktpbmQgc291cmNlUG9zaXRpb25LaW5kKSB7CiAgICAgIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uID0KICAgICAgICAgIGdldFNvdXJjZUxvY2F0aW9uKHNvdXJjZUluZm9ybWF0aW9uLCBzb3VyY2VQb3NpdGlvbktpbmQpOwogICAgICBpZiAoc291cmNlTG9jYXRpb24gIT0gbnVsbCkgewogICAgICAgIHNvdXJjZU1hcHBlci5yZWdpc3Rlcihub2RlLCBjb2RlTG9jYXRpb24sIHNvdXJjZUxvY2F0aW9uKTsKICAgICAgfQogICAgfQoKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFN0ZXBLaW5kLkZVTl9FTlRSWToKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIGZ1bGx5IHRyYW5zaXRpb25lZCB0byB0aGUKICAgICAgICAvLyBuZXcgc291cmNlIGluZm8gc3lzdGVtLiBWZXJpZnkgdGhhdCB0b29scyBubyBsb25nZXIgZXhwZWN0IEpTCiAgICAgICAgLy8gZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBtYXAgdG8gdGhlIG9yaWdpbi4gVGhlIG1haW4gbWV0aG9kIG1heSBzdGlsbAogICAgICAgIC8vIG5lZWQgbWFwcGluZyB0byBlbmFibGUgYnJlYWtwb2ludHMgYmVmb3JlIGNhbGxpbmcgbWFpbi4KICAgICAgICByZWdpc3RlclBvc2l0aW9uKFNvdXJjZVBvc2l0aW9uS2luZC5TVEFSVCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RlcEtpbmQuRlVOX0VYSVQ6CiAgICAgICAgcmVnaXN0ZXJQb3NpdGlvbihTb3VyY2VQb3NpdGlvbktpbmQuSU5ORVIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0ZXBLaW5kLkNBTEw6CiAgICAgICAgQ2FsbFBvc2l0aW9uIGNhbGxQb3NpdGlvbiA9CiAgICAgICAgICAgIENhbGxQb3NpdGlvbi5nZXRTZW1hbnRpY1Bvc2l0aW9uRm9yQ2FsbChub2RlKTsKICAgICAgICByZWdpc3RlclBvc2l0aW9uKGNhbGxQb3NpdGlvbi5zb3VyY2VQb3NpdGlvbktpbmQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0ZXBLaW5kLkFDQ0VTUzoKICAgICAgY2FzZSBTdGVwS2luZC5ORVc6CiAgICAgIGNhc2UgU3RlcEtpbmQuUkVUVVJOOgogICAgICBjYXNlIFN0ZXBLaW5kLkJSRUFLOgogICAgICBjYXNlIFN0ZXBLaW5kLkNPTlRJTlVFOgogICAgICBjYXNlIFN0ZXBLaW5kLlRIUk9XOgogICAgICBjYXNlIFN0ZXBLaW5kLkVYUFJFU1NJT05fU1RBVEVNRU5UOgogICAgICBjYXNlIFN0ZXBLaW5kLklGX0NPTkRJVElPTjoKICAgICAgY2FzZSBTdGVwS2luZC5GT1JfSU5JVElBTElaRVI6CiAgICAgIGNhc2UgU3RlcEtpbmQuRk9SX0NPTkRJVElPTjoKICAgICAgY2FzZSBTdGVwS2luZC5GT1JfVVBEQVRFOgogICAgICBjYXNlIFN0ZXBLaW5kLldISUxFX0NPTkRJVElPTjoKICAgICAgY2FzZSBTdGVwS2luZC5ET19DT05ESVRJT046CiAgICAgIGNhc2UgU3RlcEtpbmQuU1dJVENIX0VYUFJFU1NJT046CiAgICAgICAgcmVnaXN0ZXJQb3NpdGlvbihTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0ZXBLaW5kLk5PX0lORk86CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQp9CgovLy8gVGhlIHBvc2l0aW9uIG9mIGEgW2pzLkNhbGxdIG5vZGUuCmNsYXNzIENhbGxQb3NpdGlvbiB7CiAgLy8vIFRoZSBjYWxsIG5vZGUgZm9yIHdoaWNoIHRoZSBwb3NpdGlvbnMgaGF2ZSBiZWVuIGNvbXB1dGVkLgogIGZpbmFsIGpzLk5vZGUgbm9kZTsKCiAgLy8vIFRoZSBwb3NpdGlvbiBmb3IgW25vZGVdIHVzZWQgYXMgdGhlIG9mZnNldCBpbiB0aGUgSmF2YVNjcmlwdCBjb2RlLgogIC8vLwogIC8vLyBUaGlzIGlzIGVpdGhlciBgQ29kZVBvc2l0aW9uS2luZC5TVEFSVGAgZm9yIGNvZGUgbGlrZQogIC8vLwogIC8vLyAgICAgdDEuZm9vJDAoKQogIC8vLyAgICAgXgogIC8vLyB3aGVyZSB0aGUgbGVmdC1tb3N0IG9mZnNldCBvZiB0aGUgcmVjZWl2ZXIgc2hvdWxkIGJlIHVzZWQsIG9yCiAgLy8vIGBDb2RlUG9zaXRpb25LaW5kLkNMT1NJTkdgIGZvciBjb2RlIGxpa2UKICAvLy8KICAvLy8gICAgIGdldCRiYXIoKS5mb28kMCgpCiAgLy8vICAgICAgICAgICAgICAgXgogIC8vLwogIC8vLyB3aGVyZSB0aGUgbmFtZSBvZiB0aGUgY2FsbGVkIG1ldGhvZCBzaG91bGQgYmUgdXNlZCAoaGVyZSB0aGUgbWV0aG9kCiAgLy8vICdmb28kMCcpLgogIGZpbmFsIENvZGVQb3NpdGlvbktpbmQgY29kZVBvc2l0aW9uS2luZDsKCiAgLy8vIFRoZSBwb3NpdGlvbiBmcm9tIHRoZSBbU291cmNlSW5mb3JtYXRpb25dIHVzZWQgaW4gdGhlIG1hcHBlZCBEYXJ0IGNvZGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZWl0aGVyIGBTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlRgIGZvciBjb2RlIGxpa2UKICAvLy8KICAvLy8gICAgIEphdmFTY3JpcHQ6ICAgICAgICAgICAgICAgICAgICBEYXJ0OgogIC8vLwogIC8vLyAgICAgdDEuQGZvbyQwKCkgICAgICAgICAgICAgICAgICAgIGxvY2FsLmZvbygpCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIC8vLwogIC8vLyB3aGVyZSB0aGUgSmF2YVNjcmlwdCByZWNlaXZlciBpcyBhICJzaW1wbGUiIGV4cHJlc3Npb24sIG9yCiAgLy8vIGBTb3VyY2VQb3NpdGlvbktpbmQuQ0xPU0lOR2AgZm9yIGNvZGUgbGlrZQogIC8vLwogIC8vLyAgICAgSmF2YVNjcmlwdDogICAgICAgICAgICAgICAgICAgIERhcnQ6CiAgLy8vCiAgLy8vICAgICBnZXQkYmFyKCkuQGZvbygpICAgICAgICAgICAgICAgYmFyLmZvbygpCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAvLy8KICAvLy8gd2hlcmUgdGhlIEphdmFTY3JpcHQgcmVjZWl2ZXIgaXMgYSAiY29tcGxleCIgZXhwcmVzc2lvbi4KICAvLy8KICAvLy8gKEAgbWFya3MgdGhlIGN1cnJlbnQgSmF2YVNjcmlwdCBwb3NpdGlvbiBhbmQgXiBwb2ludCB0byB0aGUgbWFwcGVkIERhcnQKICAvLy8gY29kZSBwb3NpdGlvbi4pCiAgZmluYWwgU291cmNlUG9zaXRpb25LaW5kIHNvdXJjZVBvc2l0aW9uS2luZDsKCiAgQ2FsbFBvc2l0aW9uKHRoaXMubm9kZSwgdGhpcy5jb2RlUG9zaXRpb25LaW5kLCB0aGlzLnNvdXJjZVBvc2l0aW9uS2luZCk7CgogIC8vLyBDb21wdXRlcyB0aGUgW0NhbGxQb3NpdGlvbl0gZm9yIHRoZSBjYWxsIFtub2RlXS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGlmIHRoZSByZWNlaXZlciBvZiB0aGUgSmF2YVNjcmlwdCBjYWxsIGlzIGEgInNpbXBsZSIKICAvLy8gZXhwcmVzc2lvbiB0aGVuIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc291cmNlIGluZm9ybWF0aW9uIGlzIHVzZWQ6CiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIHQxLkBmb28kMCgpICAgICAgICAgICAgICAgICAgICBsb2NhbC5mb28oKQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAvLy8KICAvLy8gSWYgdGhlIHJlY2VpdmVyIG9mIHRoZSBKYXZhU2NyaXB0IGNhbGwgaXMgImNvbXBsZXgiIHRoZW4gdGhlIGlubmVyCiAgLy8vIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gaXMgdXNlZDoKICAvLy8KICAvLy8gICAgIEphdmFTY3JpcHQ6ICAgICAgICAgICAgICAgICAgICBEYXJ0OgogIC8vLwogIC8vLyAgICAgZ2V0JGJhcigpLkBmb28oKSAgICAgICAgICAgICAgIGJhci5mb28oKQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgLy8vIChAIG1hcmtzIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcG9zaXRpb24gYW5kIF4gcG9pbnQgdG8gdGhlIG1hcHBlZCBEYXJ0CiAgLy8vIGNvZGUgcG9zaXRpb24uKQogIHN0YXRpYyBDYWxsUG9zaXRpb24gZ2V0U2VtYW50aWNQb3NpdGlvbkZvckNhbGwoanMuQ2FsbCBub2RlKSB7CiAgICBqcy5FeHByZXNzaW9uIGFjY2VzcyA9IGpzLnVuZGVmZXIobm9kZS50YXJnZXQpOwogICAgaWYgKGFjY2VzcyBpcyBqcy5Qcm9wZXJ0eUFjY2VzcykgewogICAgICBqcy5Ob2RlIHRhcmdldCA9IGFjY2VzczsKICAgICAgYm9vbCBwdXJlQWNjZXNzID0gZmFsc2U7CiAgICAgIHdoaWxlICh0YXJnZXQgaXMganMuUHJvcGVydHlBY2Nlc3MpIHsKICAgICAgICBqcy5Qcm9wZXJ0eUFjY2VzcyB0YXJnZXRBY2Nlc3MgPSB0YXJnZXQ7CiAgICAgICAganMuTm9kZSByZWNlaXZlciA9IGpzLnVuZGVmZXIodGFyZ2V0QWNjZXNzLnJlY2VpdmVyKTsKICAgICAgICBpZiAocmVjZWl2ZXIgaXMganMuVmFyaWFibGVVc2UgfHwgcmVjZWl2ZXIgaXMganMuVGhpcykgewogICAgICAgICAgcHVyZUFjY2VzcyA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGFyZ2V0ID0gcmVjZWl2ZXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChwdXJlQWNjZXNzKSB7CiAgICAgICAgLy8gYS5tKCkgICB0aGlzLm0oKSAgYS5iLmMuZC5tKCkKICAgICAgICAvLyBeICAgICAgIF4gICAgICAgICBeCiAgICAgICAgcmV0dXJuIG5ldyBDYWxsUG9zaXRpb24oCiAgICAgICAgICAgIG5vZGUsIENvZGVQb3NpdGlvbktpbmQuU1RBUlQsIFNvdXJjZVBvc2l0aW9uS2luZC5TVEFSVCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gKi5tKCkgICouYS5iLmMuZC5tKCkKICAgICAgICAvLyAgIF4gICAgICAgICAgICAgIF4KICAgICAgICByZXR1cm4gbmV3IENhbGxQb3NpdGlvbigKICAgICAgICAgICAgYWNjZXNzLnNlbGVjdG9yLCBDb2RlUG9zaXRpb25LaW5kLlNUQVJULCBTb3VyY2VQb3NpdGlvbktpbmQuSU5ORVIpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGFjY2VzcyBpcyBqcy5WYXJpYWJsZVVzZSB8fCBhY2Nlc3MgaXMganMuVGhpcykgewogICAgICAvLyBtKCkgICB0aGlzKCkKICAgICAgLy8gXiAgICAgXgogICAgICByZXR1cm4gbmV3IENhbGxQb3NpdGlvbigKICAgICAgICAgIG5vZGUsIENvZGVQb3NpdGlvbktpbmQuU1RBUlQsIFNvdXJjZVBvc2l0aW9uS2luZC5TVEFSVCk7CiAgICB9IGVsc2UgaWYgKGFjY2VzcyBpcyBqcy5GdW4gfHwKICAgICAgICBhY2Nlc3MgaXMganMuTmV3IHx8CiAgICAgICAgYWNjZXNzIGlzIGpzLk5hbWVkRnVuY3Rpb24pIHsKICAgICAgLy8gZnVuY3Rpb24oKXt9KCkgIG5ldyBGdW5jdGlvbigiLi4uIikoKSAgIGZ1bmN0aW9uIGZvbygpe30oKQogICAgICAvLyAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgIF4KICAgICAgcmV0dXJuIG5ldyBDYWxsUG9zaXRpb24oCiAgICAgICAgICBub2RlLnRhcmdldCwgQ29kZVBvc2l0aW9uS2luZC5FTkQsIFNvdXJjZVBvc2l0aW9uS2luZC5JTk5FUik7CiAgICB9IGVsc2UgaWYgKGFjY2VzcyBpcyBqcy5CaW5hcnkgfHwgYWNjZXNzIGlzIGpzLkNhbGwpIHsKICAgICAgLy8gKDAsYSkoKSAgIG0oKSgpCiAgICAgIC8vICAgICAgXiAgICAgICBeCiAgICAgIHJldHVybiBuZXcgQ2FsbFBvc2l0aW9uKAogICAgICAgICAgbm9kZS50YXJnZXQsIENvZGVQb3NpdGlvbktpbmQuRU5ELCBTb3VyY2VQb3NpdGlvbktpbmQuSU5ORVIpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgcmVtb3ZlIHRoaXMgYXNzZXJ0aW9uLgogICAgICBhc3NlcnQoCiAgICAgICAgICBmYWxzZSwKICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAiVW5leHBlY3RlZCBwcm9wZXJ0eSBhY2Nlc3MgJHtub2RlVG9TdHJpbmcobm9kZSl9OlxuIgogICAgICAgICAgICAgICIke0RlYnVnUHJpbnRlci5wcmV0dHlQcmludChub2RlKX0iKSk7CiAgICAgIC8vIERvbid0IGtub3cuLi4uCiAgICAgIHJldHVybiBuZXcgQ2FsbFBvc2l0aW9uKAogICAgICAgICAgbm9kZSwgQ29kZVBvc2l0aW9uS2luZC5TVEFSVCwgU291cmNlUG9zaXRpb25LaW5kLlNUQVJUKTsKICAgIH0KICB9Cn0KCi8vLyBBbiBvZmZzZXQgb2YgYSBKYXZhU2NyaXB0IG5vZGUgd2l0aGluIHRoZSBvdXRwdXQgY29kZS4KLy8vCi8vLyBUaGlzIG9iamVjdCBob2xkcyB0aHJlZSBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUgb2Zmc2V0IGNvcnJlc3BvbmRpbmcgdG8KLy8vIHRocmVlIGRpZmZlcmVudCB3YXlzIGJyb3dzZXJzIGNhbiBjb21wdXRlIHRoZSBvZmZzZXQgb2YgYSBKYXZhU2NyaXB0IG5vZGUuCi8vLwovLy8gQ3VycmVudGx5IFtzdWJleHByZXNzaW9uT2Zmc2V0XSBpcyB1c2VkIHNpbmNlIGl0IGNvcnJlc3BvbmRzIHRoZSBtb3N0IHRvIHRoZQovLy8gb2Zmc2V0IHVzZWQgYnkgbW9zdCBicm93c2Vycy4KY2xhc3MgT2Zmc2V0IHsKICAvLy8gVGhlIG9mZnNldCBvZiB0aGUgZW5jbG9zaW5nIHN0YXRlbWVudCByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQogIC8vLyBmaWxlLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2U6CiAgLy8vCiAgLy8vICAgICBmb28oKS5iYXIoYmF6KCkpOwogIC8vLyAgICAgXiAgICAgICAgICAgICAgICAgIC8vIHRoZSBzdGF0ZW1lbnQgb2Zmc2V0IG9mIHRoZSBgZm9vKClgIGNhbGwKICAvLy8gICAgIF4gICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhdGVtZW50IG9mZnNldCBvZiB0aGUgYCouYmFyKClgIGNhbGwKICAvLy8gICAgIF4gICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhdGVtZW50IG9mZnNldCBvZiB0aGUgYGJheigpYCBjYWxsCiAgLy8vCiAgZmluYWwgaW50IHN0YXRlbWVudE9mZnNldDsKCiAgLy8vIFRoZSBgc3ViZXhwcmVzc2lvbmAgb2Zmc2V0IG9mIHRoZSBzdGVwLiBUaGlzIGlzIHRoZSAobW9zdGx5KSB1bmlxdWUKICAvLy8gb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIHRoYXQgaWRlbnRpZmllcyB0aGUKICAvLy8gY3VycmVudCBvZiBleGVjdXRpb24uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZToKICAvLy8KICAvLy8gICAgIGZvbygpLmJhcihiYXooKSk7CiAgLy8vICAgICBeICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzdWJleHByZXNzaW9uIG9mZnNldCBvZiB0aGUgYGZvbygpYCBjYWxsCiAgLy8vICAgICAgICAgICBeICAgICAgICAgICAgIC8vIHRoZSBzdWJleHByZXNzaW9uIG9mZnNldCBvZiB0aGUgYCouYmFyKClgIGNhbGwKICAvLy8gICAgICAgICAgICAgICBeICAgICAgICAgLy8gdGhlIHN1YmV4cHJlc3Npb24gb2Zmc2V0IG9mIHRoZSBgYmF6KClgIGNhbGwKICAvLy8KICAvLy8gSGVyZSwgZXZlbiB0aG91Z2ggdGhlIEphdmFTY3JpcHQgbm9kZSBmb3IgdGhlIGAqLmJhcigpYCBjYWxsIGNvbnRhaW5zCiAgLy8vIHRoZSBgZm9vKClgIGl0cyBleGVjdXRpb24gaXMgaWRlbnRpZmllZCBieSB0aGUgYGJhcmAgaWRlbnRpZmllciBtb3JlIHRoYW4KICAvLy8gdGhlIGZvbyBpZGVudGlmaWVyLgogIC8vLwogIGZpbmFsIGludCBzdWJleHByZXNzaW9uT2Zmc2V0OwoKICAvLy8gVGhlIGBsZWZ0LXRvLXJpZ2h0YCBvZmZzZXQgb2YgdGhlIHN0ZXAuIFRoaXMgaXMgbGlrZSBbc3ViZXhwcmVzc2lvbk9mZnNldF0KICAvLy8gYnV0IHJlc3RyaWN0ZWQgc28gdGhhdCB0aGUgb2Zmc2V0IG9mIGVhY2ggc3ViZXhwcmVzc2lvbiBpbiBleGVjdXRpb24KICAvLy8gb3JkZXIgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2U6CiAgLy8vCiAgLy8vICAgICBmb28oKS5iYXIoYmF6KCkpOwogIC8vLyAgICAgXiAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGVmdC10by1yaWdodCBvZmZzZXQgb2YgdGhlIGBmb28oKWAgY2FsbAogIC8vLyAgICAgICAgICAgXiAgICAgICAgICAgICAvLyB0aGUgbGVmdC10by1yaWdodCBvZmZzZXQgb2YgdGhlIGAqLmJhcigpYCBjYWxsCiAgLy8vICAgICBeICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsZWZ0LXRvLXJpZ2h0IG9mZnNldCBvZiB0aGUgYGJheigpYCBjYWxsCiAgLy8vCiAgLy8vIEhlcmUsIGBiYXooKWAgaXMgZXhlY3V0ZWQgYmVmb3JlIGBmb28oKWAgc28gd2UgbmVlZCB0byB1c2UgJ2YnIGFzIGl0cyBiZXN0CiAgLy8vIHBvc2l0aW9uIHVuZGVyIHRoZSByZXN0cmljdGlvbi4KICAvLy8KICBmaW5hbCBpbnQgbGVmdFRvUmlnaHRPZmZzZXQ7CgogIE9mZnNldCgKICAgICAgdGhpcy5zdGF0ZW1lbnRPZmZzZXQsIHRoaXMubGVmdFRvUmlnaHRPZmZzZXQsIHRoaXMuc3ViZXhwcmVzc2lvbk9mZnNldCk7CgogIGludCBnZXQgdmFsdWUgPT4gc3ViZXhwcmVzc2lvbk9mZnNldDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdPZmZzZXRbc3RhdGVtZW50T2Zmc2V0PSRzdGF0ZW1lbnRPZmZzZXQsJwogICAgICAgICdsZWZ0VG9SaWdodE9mZnNldD0kbGVmdFRvUmlnaHRPZmZzZXQsJwogICAgICAgICdzdWJleHByZXNzaW9uT2Zmc2V0PSRzdWJleHByZXNzaW9uT2Zmc2V0XSc7CiAgfQp9CgplbnVtIEJyYW5jaEtpbmQgewogIENPTkRJVElPTiwKICBMT09QLAogIENBVENILAogIEZJTkFMTFksCiAgQ0FTRSwKfQoKZW51bSBTdGVwS2luZCB7CiAgRlVOX0VOVFJZLAogIEZVTl9FWElULAogIENBTEwsCiAgTkVXLAogIEFDQ0VTUywKICBSRVRVUk4sCiAgQlJFQUssCiAgQ09OVElOVUUsCiAgVEhST1csCiAgRVhQUkVTU0lPTl9TVEFURU1FTlQsCiAgSUZfQ09ORElUSU9OLAogIEZPUl9JTklUSUFMSVpFUiwKICBGT1JfQ09ORElUSU9OLAogIEZPUl9VUERBVEUsCiAgV0hJTEVfQ09ORElUSU9OLAogIERPX0NPTkRJVElPTiwKICBTV0lUQ0hfRVhQUkVTU0lPTiwKICBOT19JTkZPLAp9CgovLy8gTGlzdGVuZXIgZm9yIHRoZSBbSmF2YVNjcmlwdFRyYWNlcl0uCmFic3RyYWN0IGNsYXNzIFRyYWNlTGlzdGVuZXIgewogIC8vLyBDYWxsZWQgYmVmb3JlIFtyb290XSBub2RlIGlzIHByb2Nlc2VkIGJ5IHRoZSBbSmF2YVNjcmlwdFRyYWNlcl0uCiAgdm9pZCBvblN0YXJ0KGpzLk5vZGUgcm9vdCkge30KCiAgLy8vIENhbGxlZCBhZnRlciBbcm9vdF0gbm9kZSBoYXMgYmVlbiBwcm9jZXNlZCBieSB0aGUgW0phdmFTY3JpcHRUcmFjZXJdLgogIHZvaWQgb25FbmQoanMuTm9kZSByb290KSB7fQoKICAvLy8gQ2FsbGVkIHdoZW4gYSBicmFuY2ggb2YgdGhlIGdpdmVuIFtraW5kXSBpcyBzdGFydGVkLiBbdmFsdWVdIGlzIHByb3ZpZGVkCiAgLy8vIHRvIGRpc3Rpbmd1aXNoIHRydWUvZmFsc2UgYnJhbmNoZXMgb2YgW0JyYW5jaEtpbmQuQ09ORElUSU9OXSBhbmQgY2FzZXMgb2YKICAvLy8gW0JyYW5jaC5DQVNFXS4KICB2b2lkIHB1c2hCcmFuY2goQnJhbmNoS2luZCBraW5kLCBbdmFsdWVdKSB7fQoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGVuZHMuCiAgdm9pZCBwb3BCcmFuY2goKSB7fQoKICAvLy8gQ2FsbGVkIHdoZW4gW25vZGVdIGRlZmluZXMgYSBzdGVwIG9mIHRoZSBnaXZlbiBba2luZF0gYXQgdGhlIGdpdmVuCiAgLy8vIFtvZmZzZXRdIHdoZW4gdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGNvZGUuCiAgdm9pZCBvblN0ZXAoanMuTm9kZSBub2RlLCBPZmZzZXQgb2Zmc2V0LCBTdGVwS2luZCBraW5kKSB7fQp9CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIHRoZSBbanMuTm9kZV1zIHRoZSBhcmUgcGFydCBvZiB0aGUgSmF2YVNjcmlwdAovLy8gc3RlcHBhYmxlIGV4ZWN1dGlvbiBhbmQgdGh1cyBuZWVkcyBzb3VyY2UgbWFwcGluZyBsb2NhdGlvbnMuCmNsYXNzIEphdmFTY3JpcHRUcmFjZXIgZXh0ZW5kcyBqcy5CYXNlVmlzaXRvciB7CiAgZmluYWwgQ29kZVBvc2l0aW9uTWFwIGNvZGVQb3NpdGlvbnM7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgcmVhZGVyOwogIGZpbmFsIExpc3Q8VHJhY2VMaXN0ZW5lcj4gbGlzdGVuZXJzOwoKICAvLy8gVGhlIHN0ZXBzIGFkZGVkIGJ5IHN1YmV4cHJlc3Npb25zLgogIExpc3Qgc3RlcHMgPSBbXTsKCiAgLy8vIFRoZSBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgc3RhdGVtZW50LgogIGludCBzdGF0ZW1lbnRPZmZzZXQ7CgogIC8vLyBUaGUgY3VycmVudCBvZmZzZXQgaW4gbGVmdC10by1yaWdodCBwcm9ncmVzc2lvbi4KICBpbnQgbGVmdFRvUmlnaHRPZmZzZXQ7CgogIC8vLyBUaGUgb2Zmc2V0IG9mIHRoZSBzdXJyb3VuZGluZyBzdGF0ZW1lbnQsIHVzZWQgZm9yIHRoZSBmaXJzdCBzdWJleHByZXNzaW9uLgogIGludCBvZmZzZXRQb3NpdGlvbjsKCiAgYm9vbCBhY3RpdmU7CgogIEphdmFTY3JpcHRUcmFjZXIodGhpcy5jb2RlUG9zaXRpb25zLCB0aGlzLnJlYWRlciwgdGhpcy5saXN0ZW5lcnMsCiAgICAgIHt0aGlzLmFjdGl2ZTogZmFsc2V9KTsKCiAgdm9pZCBub3RpZnlTdGFydChqcy5Ob2RlIG5vZGUpIHsKICAgIGxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIub25TdGFydChub2RlKSk7CiAgfQoKICB2b2lkIG5vdGlmeUVuZChqcy5Ob2RlIG5vZGUpIHsKICAgIGxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIub25FbmQobm9kZSkpOwogIH0KCiAgdm9pZCBub3RpZnlQdXNoQnJhbmNoKEJyYW5jaEtpbmQga2luZCwgW3ZhbHVlXSkgewogICAgaWYgKGFjdGl2ZSkgewogICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyLnB1c2hCcmFuY2goa2luZCwgdmFsdWUpKTsKICAgIH0KICB9CgogIHZvaWQgbm90aWZ5UG9wQnJhbmNoKCkgewogICAgaWYgKGFjdGl2ZSkgewogICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyLnBvcEJyYW5jaCgpKTsKICAgIH0KICB9CgogIHZvaWQgbm90aWZ5U3RlcChqcy5Ob2RlIG5vZGUsIE9mZnNldCBvZmZzZXQsIFN0ZXBLaW5kIGtpbmQsCiAgICAgIHtib29sIGZvcmNlOiBmYWxzZX0pIHsKICAgIGlmIChhY3RpdmUgfHwgZm9yY2UpIHsKICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lci5vblN0ZXAobm9kZSwgb2Zmc2V0LCBraW5kKSk7CiAgICB9CiAgfQoKICB2b2lkIGFwcGx5KGpzLk5vZGUgbm9kZSkgewogICAgbm90aWZ5U3RhcnQobm9kZSk7CgogICAgaW50IHN0YXJ0UG9zaXRpb24gPSBnZXRTeW50YXhPZmZzZXQobm9kZSwga2luZDogQ29kZVBvc2l0aW9uS2luZC5TVEFSVCk7CiAgICBPZmZzZXQgc3RhcnRPZmZzZXQgPSBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIHN0YXJ0UG9zaXRpb24pOwogICAgbm90aWZ5U3RlcChub2RlLCBzdGFydE9mZnNldCwgU3RlcEtpbmQuTk9fSU5GTywgZm9yY2U6IHRydWUpOwoKICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgbm90aWZ5RW5kKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROb2RlKGpzLk5vZGUgbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgdmlzaXQoanMuTm9kZSBub2RlLCBbQnJhbmNoS2luZCBicmFuY2gsIHZhbHVlXSkgewogICAgaWYgKG5vZGUgIT0gbnVsbCkgewogICAgICBpZiAoYnJhbmNoICE9IG51bGwpIHsKICAgICAgICBub3RpZnlQdXNoQnJhbmNoKGJyYW5jaCwgdmFsdWUpOwogICAgICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgICAgIG5vdGlmeVBvcEJyYW5jaCgpOwogICAgICB9IGVsc2UgewogICAgICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICB2aXNpdExpc3QoTGlzdDxqcy5Ob2RlPiBub2RlTGlzdCkgewogICAgaWYgKG5vZGVMaXN0ICE9IG51bGwpIHsKICAgICAgZm9yIChqcy5Ob2RlIG5vZGUgaW4gbm9kZUxpc3QpIHsKICAgICAgICB2aXNpdChub2RlKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlRnVuY3Rpb24oanMuTm9kZSBub2RlLCBqcy5Ob2RlIGJvZHkpIHsKICAgIGJvb2wgYWN0aXZlQmVmb3JlID0gYWN0aXZlOwogICAgaWYgKCFhY3RpdmUpIHsKICAgICAgYWN0aXZlID0gcmVhZGVyLmdldFNvdXJjZUluZm9ybWF0aW9uKG5vZGUpICE9IG51bGw7CiAgICB9CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9CiAgICAgICAgc3RhdGVtZW50T2Zmc2V0ID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUsIGtpbmQ6IENvZGVQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgT2Zmc2V0IGVudHJ5T2Zmc2V0ID0gZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBzdGF0ZW1lbnRPZmZzZXQpOwogICAgbm90aWZ5U3RlcChub2RlLCBlbnRyeU9mZnNldCwgU3RlcEtpbmQuRlVOX0VOVFJZKTsKCiAgICB2aXNpdChib2R5KTsKCiAgICBsZWZ0VG9SaWdodE9mZnNldCA9CiAgICAgICAgc3RhdGVtZW50T2Zmc2V0ID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUsIGtpbmQ6IENvZGVQb3NpdGlvbktpbmQuQ0xPU0lORyk7CiAgICBPZmZzZXQgZXhpdE9mZnNldCA9IGdldE9mZnNldEZvck5vZGUobm9kZSwgc3RhdGVtZW50T2Zmc2V0KTsKICAgIG5vdGlmeVN0ZXAobm9kZSwgZXhpdE9mZnNldCwgU3RlcEtpbmQuRlVOX0VYSVQpOwogICAgaWYgKGFjdGl2ZSAmJiAhYWN0aXZlQmVmb3JlKSB7CiAgICAgIGludCBlbmRQb3NpdGlvbiA9IGdldFN5bnRheE9mZnNldChub2RlLCBraW5kOiBDb2RlUG9zaXRpb25LaW5kLkVORCk7CiAgICAgIE9mZnNldCBlbmRPZmZzZXQgPSBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIGVuZFBvc2l0aW9uKTsKICAgICAgbm90aWZ5U3RlcChub2RlLCBlbmRPZmZzZXQsIFN0ZXBLaW5kLk5PX0lORk8pOwogICAgfQogICAgYWN0aXZlID0gYWN0aXZlQmVmb3JlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW4oanMuRnVuIG5vZGUpIHsKICAgIF9oYW5kbGVGdW5jdGlvbihub2RlLCBub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROYW1lZEZ1bmN0aW9uKGpzLk5hbWVkRnVuY3Rpb24gbm9kZSkgewogICAgX2hhbmRsZUZ1bmN0aW9uKG5vZGUsIG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEJsb2NrKGpzLkJsb2NrIG5vZGUpIHsKICAgIGZvciAoanMuU3RhdGVtZW50IHN0YXRlbWVudCBpbiBub2RlLnN0YXRlbWVudHMpIHsKICAgICAgdmlzaXQoc3RhdGVtZW50KTsKICAgIH0KICB9CgogIGludCBnZXRTeW50YXhPZmZzZXQoanMuTm9kZSBub2RlLAogICAgICB7Q29kZVBvc2l0aW9uS2luZCBraW5kOiBDb2RlUG9zaXRpb25LaW5kLlNUQVJUfSkgewogICAgQ29kZVBvc2l0aW9uIGNvZGVQb3NpdGlvbiA9IGNvZGVQb3NpdGlvbnNbbm9kZV07CiAgICBpZiAoY29kZVBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGNvZGVQb3NpdGlvbi5nZXRQb3NpdGlvbihraW5kKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdmlzaXRTdWJleHByZXNzaW9uKAogICAgICBqcy5Ob2RlIHBhcmVudCwganMuRXhwcmVzc2lvbiBjaGlsZCwgaW50IGNvZGVPZmZzZXQsIFN0ZXBLaW5kIGtpbmQpIHsKICAgIHZhciBvbGRTdGVwcyA9IHN0ZXBzOwogICAgc3RlcHMgPSBbXTsKICAgIG9mZnNldFBvc2l0aW9uID0gY29kZU9mZnNldDsKICAgIHZpc2l0KGNoaWxkKTsKICAgIGlmIChzdGVwcy5pc0VtcHR5KSB7CiAgICAgIG5vdGlmeVN0ZXAocGFyZW50LCBnZXRPZmZzZXRGb3JOb2RlKHBhcmVudCwgb2Zmc2V0UG9zaXRpb24pLCBraW5kKTsKICAgICAgLy8gVGhlIFtvZmZzZXRQb3NpdGlvbl0gc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB0aGUgZmlyc3Qgc3ViZXhwcmVzc2lvbi4KICAgICAgb2Zmc2V0UG9zaXRpb24gPSBudWxsOwogICAgfQogICAgc3RlcHMgPSBvbGRTdGVwczsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChqcy5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIHZpc2l0U3ViZXhwcmVzc2lvbigKICAgICAgICBub2RlLCBub2RlLmV4cHJlc3Npb24sIHN0YXRlbWVudE9mZnNldCwgU3RlcEtpbmQuRVhQUkVTU0lPTl9TVEFURU1FTlQpOwogICAgc3RhdGVtZW50T2Zmc2V0ID0gbnVsbDsKICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RW1wdHlTdGF0ZW1lbnQoanMuRW1wdHlTdGF0ZW1lbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRDYWxsKGpzLkNhbGwgbm9kZSkgewogICAgdmlzaXQobm9kZS50YXJnZXQpOwogICAgaW50IG9sZFBvc2l0aW9uID0gb2Zmc2V0UG9zaXRpb247CiAgICBvZmZzZXRQb3NpdGlvbiA9IG51bGw7CiAgICB2aXNpdExpc3Qobm9kZS5hcmd1bWVudHMpOwogICAgb2Zmc2V0UG9zaXRpb24gPSBvbGRQb3NpdGlvbjsKICAgIENhbGxQb3NpdGlvbiBjYWxsUG9zaXRpb24gPSBDYWxsUG9zaXRpb24uZ2V0U2VtYW50aWNQb3NpdGlvbkZvckNhbGwobm9kZSk7CiAgICBqcy5Ob2RlIHBvc2l0aW9uTm9kZSA9IGNhbGxQb3NpdGlvbi5ub2RlOwogICAgaW50IGNhbGxPZmZzZXQgPQogICAgICAgIGdldFN5bnRheE9mZnNldChwb3NpdGlvbk5vZGUsIGtpbmQ6IGNhbGxQb3NpdGlvbi5jb2RlUG9zaXRpb25LaW5kKTsKICAgIGlmIChvZmZzZXRQb3NpdGlvbiA9PSBudWxsKSB7CiAgICAgIC8vIFVzZSB0aGUgY2FsbCBvZmZzZXQgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHN1YmV4cHJlc3Npb24uCiAgICAgIG9mZnNldFBvc2l0aW9uID0gY2FsbE9mZnNldDsKICAgIH0KICAgIE9mZnNldCBvZmZzZXQgPSBnZXRPZmZzZXRGb3JOb2RlKHBvc2l0aW9uTm9kZSwgb2Zmc2V0UG9zaXRpb24pOwogICAgbm90aWZ5U3RlcChub2RlLCBvZmZzZXQsIFN0ZXBLaW5kLkNBTEwpOwogICAgc3RlcHMuYWRkKG5vZGUpOwogICAgb2Zmc2V0UG9zaXRpb24gPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROZXcoanMuTmV3IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUudGFyZ2V0KTsKICAgIGludCBvbGRQb3NpdGlvbiA9IG9mZnNldFBvc2l0aW9uOwogICAgb2Zmc2V0UG9zaXRpb24gPSBudWxsOwogICAgdmlzaXRMaXN0KG5vZGUuYXJndW1lbnRzKTsKICAgIG9mZnNldFBvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICBpZiAob2Zmc2V0UG9zaXRpb24gPT0gbnVsbCkgewogICAgICAvLyBVc2UgdGhlIHN5bnRheCBvZmZzZXQgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHN1YmV4cHJlc3Npb24uCiAgICAgIG9mZnNldFBvc2l0aW9uID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUpOwogICAgfQogICAgbm90aWZ5U3RlcChub2RlLCBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIG9mZnNldFBvc2l0aW9uKSwgU3RlcEtpbmQuTkVXKTsKICAgIHN0ZXBzLmFkZChub2RlKTsKICAgIG9mZnNldFBvc2l0aW9uID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QWNjZXNzKGpzLlByb3BlcnR5QWNjZXNzIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgbm90aWZ5U3RlcCgKICAgICAgICBub2RlLAogICAgICAgIC8vIFRlY2huaWNhbGx5IHdlJ2QgbGlrZSB0byB1c2UgdGhlIG9mZnNldCBvZiB0aGUgYC5gIGluIHRoZSBwcm9wZXJ0eQogICAgICAgIC8vIGFjY2VzcywgYnV0IHRoZSBqc19hc3QgZG9lc24ndCBleHBvc2UgaXQuIFNpbmNlIHRoaXMgaXMgb25seSB1c2VkIHRvCiAgICAgICAgLy8gc2VhcmNoIGJhY2t3YXJkcyBmb3IgaW5saW5lZCBmcmFtZXMsIHdlIHVzZSB0aGUgcmVjZWl2ZXIncyBFTkQgb2Zmc2V0CiAgICAgICAgLy8gaW5zdGVhZCBhcyBhbiBhcHByb3hpbWF0aW9uLiBOb3RlIHRoYXQgdGhlIEVORCBvZmZzZXQgcG9pbnRzIG9uZQogICAgICAgIC8vIGNoYXJhY3RlciBhZnRlciB0aGUgZW5kIG9mIHRoZSBub2RlLCBzbyBpdCBpcyBsaWtlbHkgYWx3YXlzIHRoZQogICAgICAgIC8vIG9mZnNldCB3ZSB3YW50LgogICAgICAgIGdldE9mZnNldEZvck5vZGUoCiAgICAgICAgICAgIG5vZGUsIGdldFN5bnRheE9mZnNldChub2RlLnJlY2VpdmVyLCBraW5kOiBDb2RlUG9zaXRpb25LaW5kLkVORCkpLAogICAgICAgIFN0ZXBLaW5kLkFDQ0VTUyk7CiAgICBzdGVwcy5hZGQobm9kZSk7CiAgICB2aXNpdChub2RlLnNlbGVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVVc2UoanMuVmFyaWFibGVVc2Ugbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRMaXRlcmFsQm9vbChqcy5MaXRlcmFsQm9vbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdExpdGVyYWxTdHJpbmcoanMuTGl0ZXJhbFN0cmluZyBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdExpdGVyYWxOdW1iZXIoanMuTGl0ZXJhbE51bWJlciBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdExpdGVyYWxOdWxsKGpzLkxpdGVyYWxOdWxsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0TmFtZShqcy5OYW1lIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoanMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSkgewogICAgdmlzaXRMaXN0KG5vZGUuZGVjbGFyYXRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihqcy5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUubGVmdEhhbmRTaWRlKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBc3NpZ25tZW50KGpzLkFzc2lnbm1lbnQgbm9kZSkgewogICAgdmlzaXQobm9kZS5sZWZ0SGFuZFNpZGUpOwogICAgdmlzaXQobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdElmKGpzLklmIG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIHZpc2l0U3ViZXhwcmVzc2lvbigKICAgICAgICBub2RlLCBub2RlLmNvbmRpdGlvbiwgc3RhdGVtZW50T2Zmc2V0LCBTdGVwS2luZC5JRl9DT05ESVRJT04pOwogICAgc3RhdGVtZW50T2Zmc2V0ID0gbnVsbDsKICAgIHZpc2l0KG5vZGUudGhlbiwgQnJhbmNoS2luZC5DT05ESVRJT04sIHRydWUpOwogICAgdmlzaXQobm9kZS5vdGhlcndpc2UsIEJyYW5jaEtpbmQuQ09ORElUSU9OLCBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZvcihqcy5Gb3Igbm9kZSkgewogICAgaW50IG9mZnNldCA9IHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG9mZnNldDsKICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gbnVsbDsKICAgIGlmIChub2RlLmluaXQgIT0gbnVsbCkgewogICAgICB2aXNpdFN1YmV4cHJlc3Npb24oCiAgICAgICAgICBub2RlLCBub2RlLmluaXQsIGdldFN5bnRheE9mZnNldChub2RlKSwgU3RlcEtpbmQuRk9SX0lOSVRJQUxJWkVSKTsKICAgIH0KCiAgICBpZiAobm9kZS5jb25kaXRpb24gIT0gbnVsbCkgewogICAgICB2aXNpdFN1YmV4cHJlc3Npb24obm9kZSwgbm9kZS5jb25kaXRpb24sIGdldFN5bnRheE9mZnNldChub2RlLmNvbmRpdGlvbiksCiAgICAgICAgICBTdGVwS2luZC5GT1JfQ09ORElUSU9OKTsKICAgIH0KCiAgICBub3RpZnlQdXNoQnJhbmNoKEJyYW5jaEtpbmQuTE9PUCk7CiAgICB2aXNpdChub2RlLmJvZHkpOwoKICAgIHN0YXRlbWVudE9mZnNldCA9IG9mZnNldDsKICAgIGlmIChub2RlLnVwZGF0ZSAhPSBudWxsKSB7CiAgICAgIHZpc2l0U3ViZXhwcmVzc2lvbigKICAgICAgICAgIG5vZGUsIG5vZGUudXBkYXRlLCBnZXRTeW50YXhPZmZzZXQobm9kZS51cGRhdGUpLCBTdGVwS2luZC5GT1JfVVBEQVRFKTsKICAgIH0KCiAgICBub3RpZnlQb3BCcmFuY2goKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0V2hpbGUoanMuV2hpbGUgbm9kZSkgewogICAgc3RhdGVtZW50T2Zmc2V0ID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUpOwogICAgaWYgKG5vZGUuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgdmlzaXRTdWJleHByZXNzaW9uKG5vZGUsIG5vZGUuY29uZGl0aW9uLCBnZXRTeW50YXhPZmZzZXQobm9kZSksCiAgICAgICAgICBTdGVwS2luZC5XSElMRV9DT05ESVRJT04pOwogICAgfQogICAgc3RhdGVtZW50T2Zmc2V0ID0gbnVsbDsKICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gbnVsbDsKCiAgICB2aXNpdChub2RlLmJvZHksIEJyYW5jaEtpbmQuTE9PUCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERvKGpzLkRvIG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICBpZiAobm9kZS5jb25kaXRpb24gIT0gbnVsbCkgewogICAgICB2aXNpdFN1YmV4cHJlc3Npb24obm9kZSwgbm9kZS5jb25kaXRpb24sIGdldFN5bnRheE9mZnNldChub2RlLmNvbmRpdGlvbiksCiAgICAgICAgICBTdGVwS2luZC5ET19DT05ESVRJT04pOwogICAgfQogICAgc3RhdGVtZW50T2Zmc2V0ID0gbnVsbDsKICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmluYXJ5KGpzLkJpbmFyeSBub2RlKSB7CiAgICB2aXNpdChub2RlLmxlZnQpOwogICAgdmlzaXQobm9kZS5yaWdodCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRoaXMoanMuVGhpcyBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdFJldHVybihqcy5SZXR1cm4gbm9kZSkgewogICAgc3RhdGVtZW50T2Zmc2V0ID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUpOwogICAgdmlzaXQobm9kZS52YWx1ZSk7CiAgICBub3RpZnlTdGVwKAogICAgICAgIG5vZGUsIGdldE9mZnNldEZvck5vZGUobm9kZSwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUpKSwgU3RlcEtpbmQuUkVUVVJOKTsKICAgIE9mZnNldCBleGl0T2Zmc2V0ID0gZ2V0T2Zmc2V0Rm9yTm9kZSgKICAgICAgICBub2RlLCBnZXRTeW50YXhPZmZzZXQobm9kZSwga2luZDogQ29kZVBvc2l0aW9uS2luZC5DTE9TSU5HKSk7CiAgICBub3RpZnlTdGVwKG5vZGUsIGV4aXRPZmZzZXQsIFN0ZXBLaW5kLkZVTl9FWElUKTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRocm93KGpzLlRocm93IG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIC8vIERvIG5vdCB1c2UgW29mZnNldFBvc2l0aW9uXSBmb3IgdGhlIHN1YmV4cHJlc3Npb24uCiAgICBvZmZzZXRQb3NpdGlvbiA9IG51bGw7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgbm90aWZ5U3RlcCgKICAgICAgICBub2RlLCBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIGdldFN5bnRheE9mZnNldChub2RlKSksIFN0ZXBLaW5kLlRIUk9XKTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENvbnRpbnVlKGpzLkNvbnRpbnVlIG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIG5vdGlmeVN0ZXAoCiAgICAgICAgbm9kZSwgZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBnZXRTeW50YXhPZmZzZXQobm9kZSkpLCBTdGVwS2luZC5DT05USU5VRSk7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBudWxsOwogICAgbGVmdFRvUmlnaHRPZmZzZXQgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCcmVhayhqcy5CcmVhayBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICBub3RpZnlTdGVwKAogICAgICAgIG5vZGUsIGdldE9mZnNldEZvck5vZGUobm9kZSwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUpKSwgU3RlcEtpbmQuQlJFQUspOwogICAgc3RhdGVtZW50T2Zmc2V0ID0gbnVsbDsKICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHJ5KGpzLlRyeSBub2RlKSB7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgdmlzaXQobm9kZS5jYXRjaFBhcnQsIEJyYW5jaEtpbmQuQ0FUQ0gpOwogICAgdmlzaXQobm9kZS5maW5hbGx5UGFydCwgQnJhbmNoS2luZC5GSU5BTExZKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2F0Y2goanMuQ2F0Y2ggbm9kZSkgewogICAgdmlzaXQobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q29uZGl0aW9uYWwoanMuQ29uZGl0aW9uYWwgbm9kZSkgewogICAgdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgdmlzaXQobm9kZS50aGVuLCBCcmFuY2hLaW5kLkNPTkRJVElPTiwgdHJ1ZSk7CiAgICB2aXNpdChub2RlLm90aGVyd2lzZSwgQnJhbmNoS2luZC5DT05ESVRJT04sIGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UHJlZml4KGpzLlByZWZpeCBub2RlKSB7CiAgICB2aXNpdChub2RlLmFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UG9zdGZpeChqcy5Qb3N0Zml4IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUuYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRPYmplY3RJbml0aWFsaXplcihqcy5PYmplY3RJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdExpc3Qobm9kZS5wcm9wZXJ0aWVzKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UHJvcGVydHkoanMuUHJvcGVydHkgbm9kZSkgewogICAgdmlzaXQobm9kZS5uYW1lKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZWdFeHBMaXRlcmFsKGpzLlJlZ0V4cExpdGVyYWwgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRTd2l0Y2goanMuU3dpdGNoIG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIHZpc2l0U3ViZXhwcmVzc2lvbigKICAgICAgICBub2RlLCBub2RlLmtleSwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUpLCBTdGVwS2luZC5TV0lUQ0hfRVhQUkVTU0lPTik7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBudWxsOwogICAgbGVmdFRvUmlnaHRPZmZzZXQgPSBudWxsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmNhc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZpc2l0KG5vZGUuY2FzZXNbaV0sIEJyYW5jaEtpbmQuQ0FTRSwgaSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENhc2UoanMuQ2FzZSBub2RlKSB7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RGVmYXVsdChqcy5EZWZhdWx0IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFycmF5SW5pdGlhbGl6ZXIoanMuQXJyYXlJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdExpc3Qobm9kZS5lbGVtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFycmF5SG9sZShqcy5BcnJheUhvbGUgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGpzLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgc3RhdGVtZW50T2Zmc2V0ID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihqcy5EZWZlcnJlZEV4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXQobm9kZS52YWx1ZSk7CiAgfQoKICBPZmZzZXQgZ2V0T2Zmc2V0Rm9yTm9kZShqcy5Ob2RlIG5vZGUsIGludCBjb2RlT2Zmc2V0KSB7CiAgICBpZiAoY29kZU9mZnNldCA9PSBudWxsKSB7CiAgICAgIENvZGVQb3NpdGlvbiBjb2RlUG9zaXRpb24gPSBjb2RlUG9zaXRpb25zW25vZGVdOwogICAgICBpZiAoY29kZVBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgICBjb2RlT2Zmc2V0ID0gY29kZVBvc2l0aW9uLnN0YXJ0UG9zaXRpb247CiAgICAgIH0KICAgIH0KICAgIGlmIChsZWZ0VG9SaWdodE9mZnNldCAhPSBudWxsICYmCiAgICAgICAgY29kZU9mZnNldCAhPSBudWxsICYmCiAgICAgICAgbGVmdFRvUmlnaHRPZmZzZXQgPCBjb2RlT2Zmc2V0KSB7CiAgICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gY29kZU9mZnNldDsKICAgIH0KICAgIGlmIChsZWZ0VG9SaWdodE9mZnNldCA9PSBudWxsKSB7CiAgICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gc3RhdGVtZW50T2Zmc2V0OwogICAgfQogICAgcmV0dXJuIG5ldyBPZmZzZXQoc3RhdGVtZW50T2Zmc2V0LCBsZWZ0VG9SaWdodE9mZnNldCwgY29kZU9mZnNldCk7CiAgfQp9CgpjbGFzcyBDb3ZlcmFnZSB7CiAgU2V0PGpzLk5vZGU+IF9ub2Rlc1dpdGhJbmZvID0gbmV3IFNldDxqcy5Ob2RlPigpOwogIGludCBfbm9kZXNXaXRoSW5mb0NvdW50ID0gMDsKICBTZXQ8anMuTm9kZT4gX25vZGVzV2l0aG91dEluZm8gPSBuZXcgU2V0PGpzLk5vZGU+KCk7CiAgaW50IF9ub2Rlc1dpdGhvdXRJbmZvQ291bnQgPSAwOwogIE1hcDxUeXBlLCBpbnQ+IF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGUgPSA8VHlwZSwgaW50Pnt9OwogIFNldDxqcy5Ob2RlPiBfbm9kZXNXaXRob3V0T2Zmc2V0ID0gbmV3IFNldDxqcy5Ob2RlPigpOwogIGludCBfbm9kZXNXaXRob3V0T2Zmc2V0Q291bnQgPSAwOwoKICB2b2lkIHJlZ2lzdGVyTm9kZVdpdGhJbmZvKGpzLk5vZGUgbm9kZSkgewogICAgX25vZGVzV2l0aEluZm8uYWRkKG5vZGUpOwogIH0KCiAgdm9pZCByZWdpc3Rlck5vZGVXaXRob3V0SW5mbyhqcy5Ob2RlIG5vZGUpIHsKICAgIF9ub2Rlc1dpdGhvdXRJbmZvLmFkZChub2RlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJOb2Rlc1dpdGhvdXRPZmZzZXQoanMuTm9kZSBub2RlKSB7CiAgICBfbm9kZXNXaXRob3V0T2Zmc2V0LmFkZChub2RlKTsKICB9CgogIHZvaWQgY29sbGFwc2UoKSB7CiAgICBfbm9kZXNXaXRoSW5mb0NvdW50ICs9IF9ub2Rlc1dpdGhJbmZvLmxlbmd0aDsKICAgIF9ub2Rlc1dpdGhJbmZvLmNsZWFyKCk7CiAgICBfbm9kZXNXaXRob3V0T2Zmc2V0Q291bnQgKz0gX25vZGVzV2l0aG91dE9mZnNldC5sZW5ndGg7CiAgICBfbm9kZXNXaXRob3V0T2Zmc2V0LmNsZWFyKCk7CgogICAgX25vZGVzV2l0aG91dEluZm9Db3VudCArPSBfbm9kZXNXaXRob3V0SW5mby5sZW5ndGg7CiAgICBmb3IgKGpzLk5vZGUgbm9kZSBpbiBfbm9kZXNXaXRob3V0SW5mbykgewogICAgICBpZiAobm9kZSBpcyBqcy5FeHByZXNzaW9uU3RhdGVtZW50KSB7CiAgICAgICAgX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZS5wdXRJZkFic2VudCgKICAgICAgICAgICAgbm9kZS5leHByZXNzaW9uLnJ1bnRpbWVUeXBlLCAoKSA9PiAwKTsKICAgICAgICBfbm9kZXNXaXRob3V0SW5mb0NvdW50QnlUeXBlW25vZGUuZXhwcmVzc2lvbi5ydW50aW1lVHlwZV0rKzsKICAgICAgfSBlbHNlIHsKICAgICAgICBfbm9kZXNXaXRob3V0SW5mb0NvdW50QnlUeXBlLnB1dElmQWJzZW50KG5vZGUucnVudGltZVR5cGUsICgpID0+IDApOwogICAgICAgIF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGVbbm9kZS5ydW50aW1lVHlwZV0rKzsKICAgICAgfQogICAgfQogICAgX25vZGVzV2l0aG91dEluZm8uY2xlYXIoKTsKICB9CgogIFN0cmluZyBnZXRDb3ZlcmFnZVJlcG9ydCgpIHsKICAgIGNvbGxhcHNlKCk7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgdG90YWwgPSBfbm9kZXNXaXRoSW5mb0NvdW50ICsgX25vZGVzV2l0aG91dEluZm9Db3VudDsKICAgIGlmICh0b3RhbCA+IDApIHsKICAgICAgc2Iud3JpdGUoX25vZGVzV2l0aEluZm9Db3VudCk7CiAgICAgIHNiLndyaXRlKCcvJyk7CiAgICAgIHNiLndyaXRlKHRvdGFsKTsKICAgICAgc2Iud3JpdGUoJyAoJyk7CiAgICAgIHNiLndyaXRlKCgxMDAuMCAqIF9ub2Rlc1dpdGhJbmZvQ291bnQgLyB0b3RhbCkudG9TdHJpbmdBc0ZpeGVkKDIpKTsKICAgICAgc2Iud3JpdGUoJyUpIG5vZGVzIHdpdGggaW5mby4nKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKCdObyBub2Rlcy4nKTsKICAgIH0KICAgIGlmIChfbm9kZXNXaXRob3V0T2Zmc2V0Q291bnQgPiAwKSB7CiAgICAgIHNiLndyaXRlKCcgJyk7CiAgICAgIHNiLndyaXRlKF9ub2Rlc1dpdGhvdXRPZmZzZXRDb3VudCk7CiAgICAgIHNiLndyaXRlKCcgbm9kZScpOwogICAgICBpZiAoX25vZGVzV2l0aG91dE9mZnNldENvdW50ID4gMSkgewogICAgICAgIHNiLndyaXRlKCdzJyk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJyB3aXRob3V0IG9mZnNldC4nKTsKICAgIH0KICAgIGlmIChfbm9kZXNXaXRob3V0SW5mb0NvdW50ID4gMCkgewogICAgICBzYi53cml0ZSgnXG5Ob2RlcyB3aXRob3V0IGluZm8gKCcpOwogICAgICBzYi53cml0ZShfbm9kZXNXaXRob3V0SW5mb0NvdW50KTsKICAgICAgc2Iud3JpdGUoJykgYnkgcnVudGltZSB0eXBlOicpOwogICAgICBMaXN0PFR5cGU+IHR5cGVzID0gX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZS5rZXlzLnRvTGlzdCgpOwogICAgICB0eXBlcy5zb3J0KChhLCBiKSB7CiAgICAgICAgcmV0dXJuIC1fbm9kZXNXaXRob3V0SW5mb0NvdW50QnlUeXBlW2FdCiAgICAgICAgICAgIC5jb21wYXJlVG8oX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZVtiXSk7CiAgICAgIH0pOwoKICAgICAgdHlwZXMuZm9yRWFjaCgoVHlwZSB0eXBlKSB7CiAgICAgICAgaW50IGNvdW50ID0gX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZVt0eXBlXTsKICAgICAgICBzYi53cml0ZSgnXG4gJyk7CiAgICAgICAgc2Iud3JpdGUoY291bnQpOwogICAgICAgIHNiLndyaXRlKCcgJyk7CiAgICAgICAgc2Iud3JpdGUodHlwZSk7CiAgICAgICAgc2Iud3JpdGUoJyBub2RlJyk7CiAgICAgICAgaWYgKGNvdW50ID4gMSkgewogICAgICAgICAgc2Iud3JpdGUoJ3MnKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBzYi53cml0ZSgnXG4nKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gZ2V0Q292ZXJhZ2VSZXBvcnQoKTsKfQoKLy8vIFtUcmFjZUxpc3RlbmVyXSB0aGF0IHJlZ2lzdGVycyBbb25TdGVwXSBjYWxsYmFja3Mgd2l0aCBbY292ZXJhZ2VdLgpjbGFzcyBDb3ZlcmFnZUxpc3RlbmVyIGV4dGVuZHMgVHJhY2VMaXN0ZW5lciB3aXRoIE5vZGVUb1NvdXJjZUluZm9ybWF0aW9uTWl4aW4gewogIGZpbmFsIENvdmVyYWdlIGNvdmVyYWdlOwogIEBvdmVycmlkZQogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKCiAgQ292ZXJhZ2VMaXN0ZW5lcih0aGlzLmNvdmVyYWdlLCB0aGlzLnJlYWRlcik7CgogIEBvdmVycmlkZQogIHZvaWQgb25TdGVwKGpzLk5vZGUgbm9kZSwgT2Zmc2V0IG9mZnNldCwgU3RlcEtpbmQga2luZCkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSBjb21wdXRlU291cmNlSW5mb3JtYXRpb24obm9kZSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICBjb3ZlcmFnZS5yZWdpc3Rlck5vZGVXaXRoSW5mbyhub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvdmVyYWdlLnJlZ2lzdGVyTm9kZVdpdGhvdXRJbmZvKG5vZGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvbkVuZChqcy5Ob2RlIG5vZGUpIHsKICAgIGNvdmVyYWdlLmNvbGxhcHNlKCk7CiAgfQp9CgovLy8gW0NvZGVQb3NpdGlvbk1hcF0gdGhhdCByZWdpc3RlcnMgY2FsbHMgd2l0aCBbQ292ZXJhZ2VdLgpjbGFzcyBDb2RlUG9zaXRpb25Db3ZlcmFnZSBpbXBsZW1lbnRzIENvZGVQb3NpdGlvbk1hcCB7CiAgZmluYWwgQ29kZVBvc2l0aW9uTWFwIGNvZGVQb3NpdGlvbnM7CiAgZmluYWwgQ292ZXJhZ2UgY292ZXJhZ2U7CgogIENvZGVQb3NpdGlvbkNvdmVyYWdlKHRoaXMuY29kZVBvc2l0aW9ucywgdGhpcy5jb3ZlcmFnZSk7CgogIEBvdmVycmlkZQogIENvZGVQb3NpdGlvbiBvcGVyYXRvciBbXShqcy5Ob2RlIG5vZGUpIHsKICAgIENvZGVQb3NpdGlvbiBjb2RlUG9zaXRpb24gPSBjb2RlUG9zaXRpb25zW25vZGVdOwogICAgaWYgKGNvZGVQb3NpdGlvbiA9PSBudWxsKSB7CiAgICAgIGNvdmVyYWdlLnJlZ2lzdGVyTm9kZXNXaXRob3V0T2Zmc2V0KG5vZGUpOwogICAgfQogICAgcmV0dXJuIGNvZGVQb3NpdGlvbjsKICB9Cn0KhbwATk48AU9GAS0BGR4eJy4cMyIBTAo8MgEMJgEMJgEMLAEdRQFMF0Y6Rjo6NxwVKjgEATAVFhcrQxYXK0MkQRoTBAEMLTQhHwYhHwYRBAEMHh4/IiIwBAEMFR1NBAEMHC0xMDA/BAFQISgqG0UhKScGISonBhoEAQwZIUYNRgYEAQwWITkNOQYEAgE5NTUB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bXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19zZXQuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwS2V5OwppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7Cgpjb25zdCBTdHJpbmcganNFbGVtZW50UHJlZml4ID0gJ2o6JzsKCmNsYXNzIEpMaWJyYXJ5IGV4dGVuZHMgSW5kZXhlZExpYnJhcnkgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkxpYnJhcnldIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnbGlicmFyeSc7CgogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIFVyaSBjYW5vbmljYWxVcmk7CgogIEpMaWJyYXJ5KHRoaXMubmFtZSwgdGhpcy5jYW5vbmljYWxVcmkpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pMaWJyYXJ5XSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEpMaWJyYXJ5LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBVcmkgY2Fub25pY2FsVXJpID0gc291cmNlLnJlYWRVcmkoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSkxpYnJhcnkobmFtZSwgY2Fub25pY2FsVXJpKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pMaWJyYXJ5XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHNpbmsud3JpdGVVcmkoY2Fub25pY2FsVXJpKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtqc0VsZW1lbnRQcmVmaXh9bGlicmFyeSgkbmFtZSknOwp9CgovLy8gRW51bSB1c2VkIGZvciBpZGVudGlmeWluZyBbSkNsYXNzXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gSkNsYXNzS2luZCB7IG5vZGUsIGNsb3N1cmUsIHJlY29yZCB9CgpjbGFzcyBKQ2xhc3MgZXh0ZW5kcyBJbmRleGVkQ2xhc3Mgd2l0aCBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwS2V5IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pDbGFzc10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbGFzcyc7CgogIEBvdmVycmlkZQogIGZpbmFsIEpMaWJyYXJ5IGxpYnJhcnk7CgogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNBYnN0cmFjdDsKCiAgSkNsYXNzKHRoaXMubGlicmFyeSwgdGhpcy5uYW1lLCB7dGhpcy5pc0Fic3RyYWN0fSk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSkNsYXNzXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEpDbGFzcy5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIEpDbGFzc0tpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShKQ2xhc3NLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBKQ2xhc3NLaW5kLm5vZGU6CiAgICAgICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICAgICAgSkxpYnJhcnkgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeSgpOwogICAgICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICBib29sIGlzQWJzdHJhY3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICAgICAgcmV0dXJuIG5ldyBKQ2xhc3MobGlicmFyeSwgbmFtZSwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgICAgIGNhc2UgSkNsYXNzS2luZC5jbG9zdXJlOgogICAgICAgIHJldHVybiBuZXcgSkNsb3N1cmVDbGFzcy5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKQ2xhc3NLaW5kLnJlY29yZDoKICAgICAgICByZXR1cm4gbmV3IEpSZWNvcmQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBDbGFzc0tpbmQgJGtpbmQiKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pDbGFzc10gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpDbGFzc0tpbmQubm9kZSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTGlicmFyeShsaWJyYXJ5KTsKICAgIHNpbmsud3JpdGVTdHJpbmcobmFtZSk7CiAgICBzaW5rLndyaXRlQm9vbChpc0Fic3RyYWN0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Nsb3N1cmUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke2pzRWxlbWVudFByZWZpeH1jbGFzcygkbmFtZSknOwp9CgpjbGFzcyBKVHlwZWRlZiBleHRlbmRzIEluZGV4ZWRUeXBlZGVmIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pUeXBlZGVmXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3R5cGVkZWYnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBKTGlicmFyeSBsaWJyYXJ5OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgSlR5cGVkZWYodGhpcy5saWJyYXJ5LCB0aGlzLm5hbWUpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pUeXBlZGVmXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEpUeXBlZGVmLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKTGlicmFyeSBsaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5KCk7CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpUeXBlZGVmKGxpYnJhcnksIG5hbWUpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSlR5cGVkZWZdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTGlicmFyeShsaWJyYXJ5KTsKICAgIHNpbmsud3JpdGVTdHJpbmcobmFtZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7anNFbGVtZW50UHJlZml4fXR5cGVkZWYoJG5hbWUpJzsKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0pNZW1iZXJdIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBKTWVtYmVyS2luZCB7CiAgZ2VuZXJhdGl2ZUNvbnN0cnVjdG9yLAogIGZhY3RvcnlDb25zdHJ1Y3RvciwKICBjb25zdHJ1Y3RvckJvZHksCiAgZmllbGQsCiAgZ2V0dGVyLAogIHNldHRlciwKICBtZXRob2QsCiAgY2xvc3VyZUZpZWxkLAogIGNsb3N1cmVDYWxsTWV0aG9kLAogIGdlbmVyYXRvckJvZHksCiAgc2lnbmF0dXJlTWV0aG9kLAogIHJlY29yZEZpZWxkLAp9CgphYnN0cmFjdCBjbGFzcyBKTWVtYmVyIGV4dGVuZHMgSW5kZXhlZE1lbWJlciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgSkxpYnJhcnkgbGlicmFyeTsKICBAb3ZlcnJpZGUKICBmaW5hbCBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3M7CiAgZmluYWwgTmFtZSBfbmFtZTsKICBmaW5hbCBib29sIF9pc1N0YXRpYzsKCiAgSk1lbWJlcih0aGlzLmxpYnJhcnksIHRoaXMuZW5jbG9zaW5nQ2xhc3MsIHRoaXMuX25hbWUsIHtib29sIGlzU3RhdGljOiBmYWxzZX0pCiAgICAgIDogX2lzU3RhdGljID0gaXNTdGF0aWM7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSk1lbWJlcl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKTWVtYmVyLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgSk1lbWJlcktpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShKTWVtYmVyS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuZ2VuZXJhdGl2ZUNvbnN0cnVjdG9yOgogICAgICAgIHJldHVybiBuZXcgSkdlbmVyYXRpdmVDb25zdHJ1Y3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyS2luZC5mYWN0b3J5Q29uc3RydWN0b3I6CiAgICAgICAgcmV0dXJuIG5ldyBKRmFjdG9yeUNvbnN0cnVjdG9yLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keToKICAgICAgICByZXR1cm4gbmV3IEpDb25zdHJ1Y3RvckJvZHkucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuZmllbGQ6CiAgICAgICAgcmV0dXJuIG5ldyBKRmllbGQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuZ2V0dGVyOgogICAgICAgIHJldHVybiBuZXcgSkdldHRlci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyS2luZC5zZXR0ZXI6CiAgICAgICAgcmV0dXJuIG5ldyBKU2V0dGVyLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLm1ldGhvZDoKICAgICAgICByZXR1cm4gbmV3IEpNZXRob2QucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuY2xvc3VyZUZpZWxkOgogICAgICAgIHJldHVybiBuZXcgSkNsb3N1cmVGaWVsZC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyS2luZC5jbG9zdXJlQ2FsbE1ldGhvZDoKICAgICAgICByZXR1cm4gbmV3IEpDbG9zdXJlQ2FsbE1ldGhvZC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5OgogICAgICAgIHJldHVybiBuZXcgSkdlbmVyYXRvckJvZHkucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuc2lnbmF0dXJlTWV0aG9kOgogICAgICAgIHJldHVybiBuZXcgSlNpZ25hdHVyZU1ldGhvZC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyS2luZC5yZWNvcmRGaWVsZDoKICAgICAgICByZXR1cm4gbmV3IEpSZWNvcmRGaWVsZC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIEpNZW1iZXJLaW5kICRraW5kIik7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtKTWVtYmVyXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiBfbmFtZS50ZXh0OwoKICBAb3ZlcnJpZGUKICBOYW1lIGdldCBtZW1iZXJOYW1lID0+IF9uYW1lOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Fzc2lnbmFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQWJzdHJhY3QgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2V0dGVyID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dldHRlciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdW5jdGlvbiA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGaWVsZCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlciA9PiBlbmNsb3NpbmdDbGFzcyAhPSBudWxsICYmICFfaXNTdGF0aWM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGVuY2xvc2luZ0NsYXNzICE9IG51bGwgJiYgX2lzU3RhdGljOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsID0+IGVuY2xvc2luZ0NsYXNzID09IG51bGw7CgogIFN0cmluZyBnZXQgX2tpbmQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke2pzRWxlbWVudFByZWZpeH0kX2tpbmQnCiAgICAgICcoJHtlbmNsb3NpbmdDbGFzcyAhPSBudWxsID8gJyR7ZW5jbG9zaW5nQ2xhc3MubmFtZX0uJyA6ICcnfSRuYW1lKSc7Cn0KCmFic3RyYWN0IGNsYXNzIEpGdW5jdGlvbiBleHRlbmRzIEpNZW1iZXIKICAgIGltcGxlbWVudHMgRnVuY3Rpb25FbnRpdHksIEluZGV4ZWRGdW5jdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzRXh0ZXJuYWw7CiAgQG92ZXJyaWRlCiAgZmluYWwgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXI7CgogIEpGdW5jdGlvbihKTGlicmFyeSBsaWJyYXJ5LCBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwKICAgICAgdGhpcy5wYXJhbWV0ZXJTdHJ1Y3R1cmUsIHRoaXMuYXN5bmNNYXJrZXIsCiAgICAgIHtib29sIGlzU3RhdGljOiBmYWxzZSwgdGhpcy5pc0V4dGVybmFsOiBmYWxzZX0pCiAgICAgIDogc3VwZXIobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIGlzU3RhdGljOiBpc1N0YXRpYyk7Cn0KCmFic3RyYWN0IGNsYXNzIEpDb25zdHJ1Y3RvciBleHRlbmRzIEpGdW5jdGlvbgogICAgaW1wbGVtZW50cyBDb25zdHJ1Y3RvckVudGl0eSwgSW5kZXhlZENvbnN0cnVjdG9yIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQ29uc3Q7CgogIEpDb25zdHJ1Y3RvcigKICAgICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHtib29sIGlzRXh0ZXJuYWwsIHRoaXMuaXNDb25zdH0pCiAgICAgIDogc3VwZXIoZW5jbG9zaW5nQ2xhc3MubGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICAgICAgQXN5bmNNYXJrZXIuU1lOQywKICAgICAgICAgICAgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2tpbmQgPT4gJ2NvbnN0cnVjdG9yJzsKfQoKY2xhc3MgSkdlbmVyYXRpdmVDb25zdHJ1Y3RvciBleHRlbmRzIEpDb25zdHJ1Y3RvciB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKR2VuZXJhdGl2ZUNvbnN0cnVjdG9yXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2dlbmVyYXRpdmUtY29uc3RydWN0b3InOwoKICBKR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKAogICAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAge2Jvb2wgaXNFeHRlcm5hbCwgYm9vbCBpc0NvbnN0fSkKICAgICAgOiBzdXBlcihlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0NvbnN0OiBpc0NvbnN0KTsKCiAgZmFjdG9yeSBKR2VuZXJhdGl2ZUNvbnN0cnVjdG9yLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3MgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0KICAgICAgICBuZXcgUGFyYW1ldGVyU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgYm9vbCBpc0V4dGVybmFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSkdlbmVyYXRpdmVDb25zdHJ1Y3RvcihlbmNsb3NpbmdDbGFzcywKICAgICAgICBuZXcgTmFtZShuYW1lLCBlbmNsb3NpbmdDbGFzcy5saWJyYXJ5KSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQ29uc3Q6IGlzQ29uc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuZ2VuZXJhdGl2ZUNvbnN0cnVjdG9yKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgcGFyYW1ldGVyU3RydWN0dXJlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVCb29sKGlzRXh0ZXJuYWwpOwogICAgc2luay53cml0ZUJvb2woaXNDb25zdCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGYWN0b3J5Q29uc3RydWN0b3IgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yID0+IHRydWU7Cn0KCmNsYXNzIEpGYWN0b3J5Q29uc3RydWN0b3IgZXh0ZW5kcyBKQ29uc3RydWN0b3IgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkZhY3RvcnlDb25zdHJ1Y3Rvcl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdmYWN0b3J5LWNvbnN0cnVjdG9yJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yOwoKICBKRmFjdG9yeUNvbnN0cnVjdG9yKAogICAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAge2Jvb2wgaXNFeHRlcm5hbCwgYm9vbCBpc0NvbnN0LCB0aGlzLmlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3J9KQogICAgICA6IHN1cGVyKGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBmYWN0b3J5IEpGYWN0b3J5Q29uc3RydWN0b3IucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEpDbGFzcyBlbmNsb3NpbmdDbGFzcyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPQogICAgICAgIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBib29sIGlzRXh0ZXJuYWwgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNDb25zdCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpGYWN0b3J5Q29uc3RydWN0b3IoZW5jbG9zaW5nQ2xhc3MsCiAgICAgICAgbmV3IE5hbWUobmFtZSwgZW5jbG9zaW5nQ2xhc3MubGlicmFyeSksIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QsCiAgICAgICAgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcjogaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyS2luZC5mYWN0b3J5Q29uc3RydWN0b3IpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNsYXNzKGVuY2xvc2luZ0NsYXNzKTsKICAgIHNpbmsud3JpdGVTdHJpbmcobmFtZSk7CiAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZUJvb2woaXNFeHRlcm5hbCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0NvbnN0KTsKICAgIHNpbmsud3JpdGVCb29sKGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRmFjdG9yeUNvbnN0cnVjdG9yID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yID0+IGZhbHNlOwp9CgpjbGFzcyBKQ29uc3RydWN0b3JCb2R5IGV4dGVuZHMgSkZ1bmN0aW9uIGltcGxlbWVudHMgQ29uc3RydWN0b3JCb2R5RW50aXR5IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pDb25zdHJ1Y3RvckJvZHldIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY29uc3RydWN0b3ItYm9keSc7CgogIEBvdmVycmlkZQogIGZpbmFsIEpDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvcjsKCiAgSkNvbnN0cnVjdG9yQm9keSh0aGlzLmNvbnN0cnVjdG9yLCBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlKQogICAgICA6IHN1cGVyKGNvbnN0cnVjdG9yLmxpYnJhcnksIGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzLAogICAgICAgICAgICBjb25zdHJ1Y3Rvci5tZW1iZXJOYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIEFzeW5jTWFya2VyLlNZTkMsCiAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSwgaXNFeHRlcm5hbDogZmFsc2UpOwoKICBmYWN0b3J5IEpDb25zdHJ1Y3RvckJvZHkucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEpDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IHNvdXJjZS5yZWFkTWVtYmVyKCk7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0KICAgICAgICBuZXcgUGFyYW1ldGVyU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKQ29uc3RydWN0b3JCb2R5KGNvbnN0cnVjdG9yLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5KTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXIoY29uc3RydWN0b3IpOwogICAgcGFyYW1ldGVyU3RydWN0dXJlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdjb25zdHJ1Y3Rvcl9ib2R5JzsKfQoKY2xhc3MgSk1ldGhvZCBleHRlbmRzIEpGdW5jdGlvbiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKTWV0aG9kXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ21ldGhvZCc7CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNBYnN0cmFjdDsKCiAgSk1ldGhvZChKTGlicmFyeSBsaWJyYXJ5LCBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsCiAgICAgIHtib29sIGlzU3RhdGljLCBib29sIGlzRXh0ZXJuYWwsIHRoaXMuaXNBYnN0cmFjdH0pCiAgICAgIDogc3VwZXIobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIHBhcmFtZXRlclN0cnVjdHVyZSwgYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCk7CgogIGZhY3RvcnkgSk1ldGhvZC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWVtYmVyQ29udGV4dEtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShNZW1iZXJDb250ZXh0S2luZC52YWx1ZXMpOwogICAgSkxpYnJhcnkgbGlicmFyeTsKICAgIEpDbGFzcyBlbmNsb3NpbmdDbGFzczsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmxpYnJhcnk6CiAgICAgICAgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeSgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmNsczoKICAgICAgICBlbmNsb3NpbmdDbGFzcyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgICAgICBsaWJyYXJ5ID0gZW5jbG9zaW5nQ2xhc3MubGlicmFyeTsKICAgICAgICBicmVhazsKICAgIH0KICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPQogICAgICAgIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBBc3luY01hcmtlciBhc3luY01hcmtlciA9IHNvdXJjZS5yZWFkRW51bShBc3luY01hcmtlci52YWx1ZXMpOwogICAgYm9vbCBpc1N0YXRpYyA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0V4dGVybmFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQWJzdHJhY3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSk1ldGhvZChsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmV3IE5hbWUobmFtZSwgbGlicmFyeSksCiAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlLCBhc3luY01hcmtlciwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQubWV0aG9kKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGlmIChlbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKE1lbWJlckNvbnRleHRLaW5kLmNscyk7CiAgICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5KTsKICAgICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICB9CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgcGFyYW1ldGVyU3RydWN0dXJlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVFbnVtKGFzeW5jTWFya2VyKTsKICAgIHNpbmsud3JpdGVCb29sKGlzU3RhdGljKTsKICAgIHNpbmsud3JpdGVCb29sKGlzRXh0ZXJuYWwpOwogICAgc2luay53cml0ZUJvb2woaXNBYnN0cmFjdCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdW5jdGlvbiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdtZXRob2QnOwp9CgpjbGFzcyBKR2VuZXJhdG9yQm9keSBleHRlbmRzIEpGdW5jdGlvbiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKR2VuZXJhdG9yQm9keV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdnZW5lcmF0b3ItYm9keSc7CgogIGZpbmFsIEpGdW5jdGlvbiBmdW5jdGlvbjsKICBmaW5hbCBEYXJ0VHlwZSBlbGVtZW50VHlwZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CgogIEpHZW5lcmF0b3JCb2R5KHRoaXMuZnVuY3Rpb24sIHRoaXMuZWxlbWVudFR5cGUpCiAgICAgIDogaGFzaENvZGUgPSBmdW5jdGlvbi5oYXNoQ29kZSArIDEsIC8vIEhhY2sgc3RhYmlsaXplIHNvcnQgb3JkZXIuCiAgICAgICAgc3VwZXIoZnVuY3Rpb24ubGlicmFyeSwgZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MsIGZ1bmN0aW9uLm1lbWJlck5hbWUsCiAgICAgICAgICAgIGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSwgZnVuY3Rpb24uYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGlzU3RhdGljOiBmdW5jdGlvbi5pc1N0YXRpYywgaXNFeHRlcm5hbDogZmFsc2UpOwoKICBmYWN0b3J5IEpHZW5lcmF0b3JCb2R5LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKRnVuY3Rpb24gZnVuY3Rpb24gPSBzb3VyY2UucmVhZE1lbWJlcigpOwogICAgRGFydFR5cGUgZWxlbWVudFR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpHZW5lcmF0b3JCb2R5KGZ1bmN0aW9uLCBlbGVtZW50VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5KTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXIoZnVuY3Rpb24pOwogICAgc2luay53cml0ZURhcnRUeXBlKGVsZW1lbnRUeXBlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdnZW5lcmF0b3JfYm9keSc7Cn0KCmNsYXNzIEpHZXR0ZXIgZXh0ZW5kcyBKRnVuY3Rpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkdldHRlcl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdnZXR0ZXInOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQWJzdHJhY3Q7CgogIEpHZXR0ZXIoSkxpYnJhcnkgbGlicmFyeSwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQWJzdHJhY3R9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUuZ2V0dGVyKCksCiAgICAgICAgICAgIGFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwpOwoKICBmYWN0b3J5IEpHZXR0ZXIucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1lbWJlckNvbnRleHRLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oTWVtYmVyQ29udGV4dEtpbmQudmFsdWVzKTsKICAgIEpMaWJyYXJ5IGxpYnJhcnk7CiAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3M7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5OgogICAgICAgIGxpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnkoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5jbHM6CiAgICAgICAgZW5jbG9zaW5nQ2xhc3MgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgbGlicmFyeSA9IGVuY2xvc2luZ0NsYXNzLmxpYnJhcnk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBBc3luY01hcmtlciBhc3luY01hcmtlciA9IHNvdXJjZS5yZWFkRW51bShBc3luY01hcmtlci52YWx1ZXMpOwogICAgYm9vbCBpc1N0YXRpYyA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0V4dGVybmFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQWJzdHJhY3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSkdldHRlcigKICAgICAgICBsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmV3IE5hbWUobmFtZSwgbGlicmFyeSksIGFzeW5jTWFya2VyLAogICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyS2luZC5nZXR0ZXIpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgaWYgKGVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgc2luay53cml0ZUVudW0oTWVtYmVyQ29udGV4dEtpbmQuY2xzKTsKICAgICAgc2luay53cml0ZUNsYXNzKGVuY2xvc2luZ0NsYXNzKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKE1lbWJlckNvbnRleHRLaW5kLmxpYnJhcnkpOwogICAgICBzaW5rLndyaXRlTGlicmFyeShsaWJyYXJ5KTsKICAgIH0KICAgIHNpbmsud3JpdGVTdHJpbmcobmFtZSk7CiAgICBzaW5rLndyaXRlRW51bShhc3luY01hcmtlcik7CiAgICBzaW5rLndyaXRlQm9vbChpc1N0YXRpYyk7CiAgICBzaW5rLndyaXRlQm9vbChpc0V4dGVybmFsKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQWJzdHJhY3QpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2tpbmQgPT4gJ2dldHRlcic7Cn0KCmNsYXNzIEpTZXR0ZXIgZXh0ZW5kcyBKRnVuY3Rpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSlNldHRlcl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdzZXR0ZXInOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQWJzdHJhY3Q7CgogIEpTZXR0ZXIoSkxpYnJhcnkgbGlicmFyeSwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU3RhdGljLCBib29sIGlzRXh0ZXJuYWwsIHRoaXMuaXNBYnN0cmFjdH0pCiAgICAgIDogc3VwZXIobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIGNvbnN0IFBhcmFtZXRlclN0cnVjdHVyZS5zZXR0ZXIoKSwKICAgICAgICAgICAgQXN5bmNNYXJrZXIuU1lOQywKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsKTsKCiAgZmFjdG9yeSBKU2V0dGVyLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJDb250ZXh0S2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKE1lbWJlckNvbnRleHRLaW5kLnZhbHVlcyk7CiAgICBKTGlicmFyeSBsaWJyYXJ5OwogICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeToKICAgICAgICBsaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5KCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyQ29udGV4dEtpbmQuY2xzOgogICAgICAgIGVuY2xvc2luZ0NsYXNzID0gc291cmNlLnJlYWRDbGFzcygpOwogICAgICAgIGxpYnJhcnkgPSBlbmNsb3NpbmdDbGFzcy5saWJyYXJ5OwogICAgICAgIGJyZWFrOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgYm9vbCBpc1N0YXRpYyA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0V4dGVybmFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQWJzdHJhY3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSlNldHRlcigKICAgICAgICBsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmV3IE5hbWUobmFtZSwgbGlicmFyeSwgaXNTZXR0ZXI6IHRydWUpLAogICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyS2luZC5zZXR0ZXIpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgaWYgKGVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgc2luay53cml0ZUVudW0oTWVtYmVyQ29udGV4dEtpbmQuY2xzKTsKICAgICAgc2luay53cml0ZUNsYXNzKGVuY2xvc2luZ0NsYXNzKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKE1lbWJlckNvbnRleHRLaW5kLmxpYnJhcnkpOwogICAgICBzaW5rLndyaXRlTGlicmFyeShsaWJyYXJ5KTsKICAgIH0KICAgIHNpbmsud3JpdGVTdHJpbmcobmFtZSk7CiAgICBzaW5rLndyaXRlQm9vbChpc1N0YXRpYyk7CiAgICBzaW5rLndyaXRlQm9vbChpc0V4dGVybmFsKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQWJzdHJhY3QpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQXNzaWduYWJsZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldHRlciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdzZXR0ZXInOwp9CgpjbGFzcyBKRmllbGQgZXh0ZW5kcyBKTWVtYmVyIGltcGxlbWVudHMgRmllbGRFbnRpdHksIEluZGV4ZWRGaWVsZCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKRmllbGRdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZmllbGQnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQXNzaWduYWJsZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQ29uc3Q7CgogIEpGaWVsZChKTGlicmFyeSBsaWJyYXJ5LCBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwKICAgICAge2Jvb2wgaXNTdGF0aWMsIHRoaXMuaXNBc3NpZ25hYmxlLCB0aGlzLmlzQ29uc3R9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBpc1N0YXRpYzogaXNTdGF0aWMpOwoKICBmYWN0b3J5IEpGaWVsZC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWVtYmVyQ29udGV4dEtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShNZW1iZXJDb250ZXh0S2luZC52YWx1ZXMpOwogICAgSkxpYnJhcnkgbGlicmFyeTsKICAgIEpDbGFzcyBlbmNsb3NpbmdDbGFzczsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmxpYnJhcnk6CiAgICAgICAgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeSgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmNsczoKICAgICAgICBlbmNsb3NpbmdDbGFzcyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgICAgICBsaWJyYXJ5ID0gZW5jbG9zaW5nQ2xhc3MubGlicmFyeTsKICAgICAgICBicmVhazsKICAgIH0KICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgIGJvb2wgaXNTdGF0aWMgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNBc3NpZ25hYmxlID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSkZpZWxkKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuZXcgTmFtZShuYW1lLCBsaWJyYXJ5KSwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzQXNzaWduYWJsZTogaXNBc3NpZ25hYmxlLCBpc0NvbnN0OiBpc0NvbnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLmZpZWxkKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGlmIChlbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKE1lbWJlckNvbnRleHRLaW5kLmNscyk7CiAgICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5KTsKICAgICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICB9CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZUJvb2woaXNTdGF0aWMpOwogICAgc2luay53cml0ZUJvb2woaXNBc3NpZ25hYmxlKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ29uc3QpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRmllbGQgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnZmllbGQnOwp9CgpjbGFzcyBKQ2xvc3VyZUNhbGxNZXRob2QgZXh0ZW5kcyBKTWV0aG9kIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pDbG9zdXJlQ2FsbE1ldGhvZF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbG9zdXJlLWNhbGwtbWV0aG9kJzsKCiAgSkNsb3N1cmVDYWxsTWV0aG9kKENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzLAogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLCBBc3luY01hcmtlciBhc3luY01hcmtlcikKICAgICAgOiBzdXBlcihlbmNsb3NpbmdDbGFzcy5saWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgTmFtZXMuY2FsbCwKICAgICAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlLCBhc3luY01hcmtlciwKICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLCBpc0V4dGVybmFsOiBmYWxzZSwgaXNBYnN0cmFjdDogZmFsc2UpOwoKICBmYWN0b3J5IEpDbG9zdXJlQ2FsbE1ldGhvZC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzID0gc291cmNlLnJlYWRDbGFzcygpOwogICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9CiAgICAgICAgbmV3IFBhcmFtZXRlclN0cnVjdHVyZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyID0gc291cmNlLnJlYWRFbnVtKEFzeW5jTWFya2VyLnZhbHVlcyk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpDbG9zdXJlQ2FsbE1ldGhvZCgKICAgICAgICBlbmNsb3NpbmdDbGFzcywgcGFyYW1ldGVyU3RydWN0dXJlLCBhc3luY01hcmtlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyS2luZC5jbG9zdXJlQ2FsbE1ldGhvZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgcGFyYW1ldGVyU3RydWN0dXJlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVFbnVtKGFzeW5jTWFya2VyKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdjbG9zdXJlX2NhbGwnOwp9CgovLy8gQSBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBzaWduYXR1cmUgb2YgdGhlIERhcnQgY2xvc3VyZS90ZWFyb2ZmIHRoYXQgdGhpcwovLy8gbWV0aG9kJ3MgcGFyZW50IGNsYXNzIGlzIHJlcHJlc2VudGluZy4KY2xhc3MgSlNpZ25hdHVyZU1ldGhvZCBleHRlbmRzIEpNZXRob2QgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSlNpZ25hdHVyZU1ldGhvZF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdzaWduYXR1cmUtbWV0aG9kJzsKCiAgSlNpZ25hdHVyZU1ldGhvZChDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcykKICAgICAgOiBzdXBlcihlbmNsb3NpbmdDbGFzcy5saWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgTmFtZXMuc2lnbmF0dXJlLAogICAgICAgICAgICBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUoMCwgMCwgY29uc3QgW10sIDApLCBBc3luY01hcmtlci5TWU5DLAogICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsIGlzRXh0ZXJuYWw6IGZhbHNlLCBpc0Fic3RyYWN0OiBmYWxzZSk7CgogIGZhY3RvcnkgSlNpZ25hdHVyZU1ldGhvZC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkNsYXNzIGNscyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSlNpZ25hdHVyZU1ldGhvZChjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuc2lnbmF0dXJlTWV0aG9kKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnc2lnbmF0dXJlJzsKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0pUeXBlVmFyaWFibGVdIHZhcmlhbnRzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gSlR5cGVWYXJpYWJsZUtpbmQgeyBjbHMsIG1lbWJlciwgdHlwZWRlZiwgbG9jYWwgfQoKY2xhc3MgSlR5cGVWYXJpYWJsZSBleHRlbmRzIEluZGV4ZWRUeXBlVmFyaWFibGUgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSlR5cGVWYXJpYWJsZV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICd0eXBlLXZhcmlhYmxlJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW50aXR5IHR5cGVEZWNsYXJhdGlvbjsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaW5kZXg7CgogIEpUeXBlVmFyaWFibGUodGhpcy50eXBlRGVjbGFyYXRpb24sIHRoaXMubmFtZSwgdGhpcy5pbmRleCk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSlR5cGVWYXJpYWJsZV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKVHlwZVZhcmlhYmxlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKVHlwZVZhcmlhYmxlS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKEpUeXBlVmFyaWFibGVLaW5kLnZhbHVlcyk7CiAgICBFbnRpdHkgdHlwZURlY2xhcmF0aW9uOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSlR5cGVWYXJpYWJsZUtpbmQuY2xzOgogICAgICAgIHR5cGVEZWNsYXJhdGlvbiA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKVHlwZVZhcmlhYmxlS2luZC5tZW1iZXI6CiAgICAgICAgdHlwZURlY2xhcmF0aW9uID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKVHlwZVZhcmlhYmxlS2luZC50eXBlZGVmOgogICAgICAgIHR5cGVEZWNsYXJhdGlvbiA9IHNvdXJjZS5yZWFkVHlwZWRlZigpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpUeXBlVmFyaWFibGVLaW5kLmxvY2FsOgogICAgICAgIC8vIFR5cGUgdmFyaWFibGVzIGRlY2xhcmVkIGJ5IGxvY2FsIGZ1bmN0aW9ucyBkb24ndCBwb2ludCB0byB0aGVpcgogICAgICAgIC8vIGRlY2xhcmF0aW9uLCBzaW5jZSB0aGUgY29ycmVzcG9uZGluZyBjbG9zdXJlIGNhbGwgbWV0aG9kcyBpcyBjcmVhdGVkCiAgICAgICAgLy8gYWZ0ZXIgdGhlIHR5cGUgdmFyaWFibGUuCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRml4IHRoaXMuCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBpbnQgaW5kZXggPSBzb3VyY2UucmVhZEludCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKVHlwZVZhcmlhYmxlKHR5cGVEZWNsYXJhdGlvbiwgbmFtZSwgaW5kZXgpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSlR5cGVWYXJpYWJsZV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGlmICh0eXBlRGVjbGFyYXRpb24gaXMgSW5kZXhlZENsYXNzKSB7CiAgICAgIEluZGV4ZWRDbGFzcyBjbHMgPSB0eXBlRGVjbGFyYXRpb247CiAgICAgIHNpbmsud3JpdGVFbnVtKEpUeXBlVmFyaWFibGVLaW5kLmNscyk7CiAgICAgIHNpbmsud3JpdGVDbGFzcyhjbHMpOwogICAgfSBlbHNlIGlmICh0eXBlRGVjbGFyYXRpb24gaXMgSW5kZXhlZE1lbWJlcikgewogICAgICBJbmRleGVkTWVtYmVyIG1lbWJlciA9IHR5cGVEZWNsYXJhdGlvbjsKICAgICAgc2luay53cml0ZUVudW0oSlR5cGVWYXJpYWJsZUtpbmQubWVtYmVyKTsKICAgICAgc2luay53cml0ZU1lbWJlcihtZW1i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OwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgSXRlcmFibGVCYXNlLCBNYXBCYXNlOwoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JyBzaG93IENsYXNzRW50aXR5OwppbXBvcnQgJy4uL2VsZW1lbnRzL2luZGV4ZWQuZGFydCcgc2hvdyBJbmRleGVkQ2xhc3M7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JyBzaG93IEVudW1TZXQ7CgovLy8gRW51bSBmb3IgdGhlIGRpZmZlcmVudCBraW5kcyBvZiBpbnN0YW50aWF0aW9uIG9mIGEgY2xhc3MuCmVudW0gSW5zdGFudGlhdGlvbiB7CiAgVU5JTlNUQU5USUFURUQsCiAgRElSRUNUTFlfSU5TVEFOVElBVEVELAogIElORElSRUNUTFlfSU5TVEFOVElBVEVELAogIEFCU1RSQUNUTFlfSU5TVEFOVElBVEVELAp9CgovLy8gTm9kZSBmb3IgW2Nsc10gaW4gYSB0cmVlIGZvcm1pbmcgdGhlIHN1YmNsYXNzIHJlbGF0aW9uIG9mIFtDbGFzc0VudGl0eV1zLgovLy8KLy8vIFRoaXMgaXMgdXNlZCBieSB0aGUgW0Nsb3NlZFdvcmxkXSB0byBwZXJmb3JtIHF1ZXJpZXMgb24gc3ViY2xhc3MgYW5kIHN1YnR5cGUKLy8vIHJlbGF0aW9ucy4KLy8vCi8vLyBGb3IgdGhpcyBjbGFzcyBoaWVyYXJjaHk6Ci8vLwovLy8gICAgIGNsYXNzIEEge30KLy8vICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQovLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBBIHt9Ci8vLyAgICAgY2xhc3MgRCBleHRlbmRzIEIge30KLy8vICAgICBjbGFzcyBFIGV4dGVuZHMgRCB7fQovLy8KLy8vIHRoZSBbQ2xhc3NIaWVyYXJjaHlOb2RlXXMgZm9ybSB0aGlzIHN1YmNsYXNzIHRyZWU6Ci8vLwovLy8gICAgICAgT2JqZWN0Ci8vLyAgICAgICAgIHwKLy8vICAgICAgICAgQQovLy8gICAgICAgIC8gXAovLy8gICAgICAgQiAgIEMKLy8vICAgICAgIHwKLy8vICAgICAgIEQKLy8vICAgICAgIHwKLy8vICAgICAgIEUKLy8vCmNsYXNzIENsYXNzSGllcmFyY2h5Tm9kZSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbGFzc0hpZXJhcmNoeU5vZGVdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xhc3MtaGllcmFyY2h5LW5vZGUnOwoKICAvLy8gRW51bSBzZXQgZm9yIHNlbGVjdGluZyBpbnN0YW50aWF0ZWQgY2xhc3NlcyBpbgogIC8vLyBbQ2xhc3NIaWVyYXJjaHlOb2RlLnN1YmNsYXNzZXNCeU1hc2tdLAogIC8vLyBbQ2xhc3NIaWVyYXJjaHlOb2RlLnN1YmNsYXNzZXNCeU1hc2tdIGFuZCBbQ2xhc3NTZXQuc3VidHlwZXNCeU1hc2tdLgogIHN0YXRpYyBmaW5hbCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IElOU1RBTlRJQVRFRCA9CiAgICAgIG5ldyBFbnVtU2V0PEluc3RhbnRpYXRpb24+LmZyb21WYWx1ZXMoY29uc3QgPEluc3RhbnRpYXRpb24+WwogICAgSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQsCiAgICBJbnN0YW50aWF0aW9uLklORElSRUNUTFlfSU5TVEFOVElBVEVELAogICAgSW5zdGFudGlhdGlvbi5BQlNUUkFDVExZX0lOU1RBTlRJQVRFRCwKICBdLCBmaXhlZDogdHJ1ZSk7CgogIC8vLyBFbnVtIHNldCBmb3Igc2VsZWN0aW5nIGRpcmVjdGx5IGFuZCBhYnN0cmFjdGx5IGluc3RhbnRpYXRlZCBjbGFzc2VzIGluCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10sCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10gYW5kIFtDbGFzc1NldC5zdWJ0eXBlc0J5TWFza10uCiAgc3RhdGljIGZpbmFsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gRVhQTElDSVRMWV9JTlNUQU5USUFURUQgPQogICAgICBuZXcgRW51bVNldDxJbnN0YW50aWF0aW9uPi5mcm9tVmFsdWVzKGNvbnN0IDxJbnN0YW50aWF0aW9uPlsKICAgIEluc3RhbnRpYXRpb24uRElSRUNUTFlfSU5TVEFOVElBVEVELAogICAgSW5zdGFudGlhdGlvbi5BQlNUUkFDVExZX0lOU1RBTlRJQVRFRAogIF0sIGZpeGVkOiB0cnVlKTsKCiAgLy8vIEVudW0gc2V0IGZvciBzZWxlY3RpbmcgYWxsIGNsYXNzZXMgaW4KICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZS5zdWJjbGFzc2VzQnlNYXNrXSwKICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZS5zdWJjbGFzc2VzQnlNYXNrXSBhbmQgW0NsYXNzU2V0LnN1YnR5cGVzQnlNYXNrXS4KICBzdGF0aWMgZmluYWwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBBTEwgPQogICAgICBuZXcgRW51bVNldDxJbnN0YW50aWF0aW9uPi5mcm9tVmFsdWVzKEluc3RhbnRpYXRpb24udmFsdWVzLCBmaXhlZDogdHJ1ZSk7CgogIC8vLyBDcmVhdGVzIGFuIGVudW0gc2V0IGZvciBzZWxlY3RpbmcgdGhlIHJldHVybmVkIGNsYXNzZXMgaW4KICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZS5zdWJjbGFzc2VzQnlNYXNrXSwKICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZS5zdWJjbGFzc2VzQnlNYXNrXSBhbmQgW0NsYXNzU2V0LnN1YnR5cGVzQnlNYXNrXS4KICBzdGF0aWMgRW51bVNldDxJbnN0YW50aWF0aW9uPiBjcmVhdGVNYXNrKAogICAgICB7Ym9vbCBpbmNsdWRlRGlyZWN0bHlJbnN0YW50aWF0ZWQ6IHRydWUsCiAgICAgIGJvb2wgaW5jbHVkZUluZGlyZWN0bHlJbnN0YW50aWF0ZWQ6IHRydWUsCiAgICAgIGJvb2wgaW5jbHVkZVVuaW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIGluY2x1ZGVBYnN0cmFjdGx5SW5zdGFudGlhdGVkOiB0cnVlfSkgewogICAgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrID0gbmV3IEVudW1TZXQ8SW5zdGFudGlhdGlvbj4oKTsKICAgIGlmIChpbmNsdWRlRGlyZWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgbWFzay5hZGQoSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQpOwogICAgfQogICAgaWYgKGluY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIG1hc2suYWRkKEluc3RhbnRpYXRpb24uSU5ESVJFQ1RMWV9JTlNUQU5USUFURUQpOwogICAgfQogICAgaWYgKGluY2x1ZGVVbmluc3RhbnRpYXRlZCkgewogICAgICBtYXNrLmFkZChJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEKTsKICAgIH0KICAgIGlmIChpbmNsdWRlQWJzdHJhY3RseUluc3RhbnRpYXRlZCkgewogICAgICBtYXNrLmFkZChJbnN0YW50aWF0aW9uLkFCU1RSQUNUTFlfSU5TVEFOVElBVEVEKTsKICAgIH0KICAgIHJldHVybiBtYXNrOwogIH0KCiAgZmluYWwgQ2xhc3NIaWVyYXJjaHlOb2RlIHBhcmVudE5vZGU7CiAgZmluYWwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBfbWFzayA9IG5ldyBFbnVtU2V0PEluc3RhbnRpYXRpb24+LmZyb21WYWx1ZXMoCiAgICAgIGNvbnN0IDxJbnN0YW50aWF0aW9uPltJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEXSk7CiAgZmluYWwgSW5kZXhlZENsYXNzIGNsczsKCiAgZmluYWwgaW50IGhpZXJhcmNoeURlcHRoOwoKICBDbGFzc0VudGl0eSBfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YmNsYXNzOwogIGludCBfaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCA9IDA7CgogIC8vLyBgdHJ1ZWAgaWYgW2Nsc10gaGFzIGJlZW4gZGlyZWN0bHkgaW5zdGFudGlhdGVkLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYENgIGJ1dCBfbm90XyBgQmAgaW46CiAgLy8vICAgY2xhc3MgQiB7fQogIC8vLyAgIGNsYXNzIEMgZXh0ZW5kcyBCIHt9CiAgLy8vICAgbWFpbigpID0+IG5ldyBDKCk7CiAgLy8vCiAgYm9vbCBnZXQgaXNEaXJlY3RseUluc3RhbnRpYXRlZCA9PgogICAgICBfbWFzay5jb250YWlucyhJbnN0YW50aWF0aW9uLkRJUkVDVExZX0lOU1RBTlRJQVRFRCk7CgogIHZvaWQgc2V0IGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlICE9IGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgX3VwZGF0ZVBhcmVudEluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQoCiAgICAgICAgICBJbnN0YW50aWF0aW9uLkRJUkVDVExZX0lOU1RBTlRJQVRFRCwKICAgICAgICAgIGFkZDogdmFsdWUpOwogICAgfQogIH0KCiAgLy8vIGB0cnVlYCBpZiBbY2xzXSBoYXMgYmVlbiBhYnN0cmFjdGx5IGluc3RhbnRpYXRlZC4gVGhpcyBtZWFucyB0aGF0IGF0CiAgLy8vIHJ1bnRpbWUgaW5zdGFuY2VzIG9mIFtjbHNdIG9yIHVua25vd24gc3ViY2xhc3NlcyBvZiBbY2xzXSBhcmUgYXNzdW1lZCB0bwogIC8vLyBleGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIHRvIG1hcmsgbmF0aXZlIGFuZC9vciByZWZsZWN0YWJsZSBjbGFzc2VzIGFzIGluc3RhbnRpYXRlZC4KICAvLy8gRm9yIG5hdGl2ZSBjbGFzc2VzIHdlIGRvIG5vdCBrbm93IHRoZSBleGFjdCBjbGFzcyB0aGF0IGluc3RhbnRpYXRlcyBbY2xzXQogIC8vLyBzbyBbY2xzXSBoZXJlIHJlcHJlc2VudHMgdGhlIHJvb3Qgb2YgdGhlIHN1YmNsYXNzZXMuIEZvciByZWZsZWN0YWJsZQogIC8vLyBjbGFzc2VzIHdlIG5lZWQgZXZlbnQgYWJzdHJhY3QgY2xhc3NlcyB0byBiZSAnbGl2ZScgZXZlbiB0aG91Z2ggdGhleQogIC8vLyBjYW5ub3QgdGhlbXNlbHZlcyBiZSBpbnN0YW50aWF0ZWQuCiAgYm9vbCBnZXQgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkID0+CiAgICAgIF9tYXNrLmNvbnRhaW5zKEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQpOwoKICB2b2lkIHNldCBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlICE9IGlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCkgewogICAgICBfdXBkYXRlUGFyZW50SW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCgKICAgICAgICAgIEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQsCiAgICAgICAgICBhZGQ6IHZhbHVlKTsKICAgIH0KICB9CgogIC8vLyBgdHJ1ZWAgaWYgW2Nsc10gaXMgZWl0aGVyIGRpcmVjdGx5IG9yIGFic3RyYWN0bHkgaW5zdGFudGlhdGVkLgogIGJvb2wgZ2V0IGlzRXhwbGljaXRseUluc3RhbnRpYXRlZCA9PgogICAgICBpc0RpcmVjdGx5SW5zdGFudGlhdGVkIHx8IGlzQWJzdHJhY3RseUluc3RhbnRpYXRlZDsKCiAgdm9pZCBfdXBkYXRlUGFyZW50SW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudChJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24sCiAgICAgIHtib29sIGFkZH0pIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBwYXJlbnQgPSBwYXJlbnROb2RlOwogICAgaWYgKGFkZCkgewogICAgICBfbWFzay5yZW1vdmUoSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCk7CiAgICAgIF9tYXNrLmFkZChpbnN0YW50aWF0aW9uKTsKICAgICAgd2hpbGUgKHBhcmVudCAhPSBudWxsKSB7CiAgICAgICAgcGFyZW50Ll91cGRhdGVJbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50KDEpOwogICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBfbWFzay5yZW1vdmUoaW5zdGFudGlhdGlvbik7CiAgICAgIGlmIChfbWFzay5pc0VtcHR5KSB7CiAgICAgICAgX21hc2suYWRkKEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpOwogICAgICB9CiAgICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCkgewogICAgICAgIHBhcmVudC5fdXBkYXRlSW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCgtMSk7CiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBgdHJ1ZWAgaWYgW2Nsc10gaGFzIGJlZW4gaW5zdGFudGlhdGVkIHRocm91Z2ggc3ViY2xhc3Nlcy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBhbmQgYEJgIGJ1dCBfbm90XyBgQ2AgaW46CiAgLy8vICAgY2xhc3MgQSB7fQogIC8vLyAgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9CiAgLy8vICAgY2xhc3MgQyBleHRlbmRzIEIge30KICAvLy8gICBtYWluKCkgPT4gW25ldyBCKCksIG5ldyBDKCldOwogIC8vLwogIGJvb2wgZ2V0IGlzSW5kaXJlY3RseUluc3RhbnRpYXRlZCA9PiBfaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCA+IDA7CgogIC8vLyBUaGUgbnVtYmVyIG9mIHN0cmljdCBzdWJjbGFzc2VzIHRoYXQgYXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkKICAvLy8gaW5zdGFudGlhdGVkLgogIGludCBnZXQgaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCA9PiBfaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudDsKCiAgdm9pZCBfdXBkYXRlSW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudChpbnQgY2hhbmdlKSB7CiAgICBib29sIGJlZm9yZSA9IGlzSW5kaXJlY3RseUluc3RhbnRpYXRlZDsKICAgIF9pbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50ICs9IGNoYW5nZTsKICAgIGJvb2wgYWZ0ZXIgPSBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQ7CiAgICBpZiAoYmVmb3JlICE9IGFmdGVyKSB7CiAgICAgIGlmIChhZnRlcikgewogICAgICAgIF9tYXNrLnJlbW92ZShJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEKTsKICAgICAgICBfbWFzay5hZGQoSW5zdGFudGlhdGlvbi5JTkRJUkVDVExZX0lOU1RBTlRJQVRFRCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX21hc2sucmVtb3ZlKEluc3RhbnRpYXRpb24uSU5ESVJFQ1RMWV9JTlNUQU5USUFURUQpOwogICAgICAgIGlmIChfbWFzay5pc0VtcHR5KSB7CiAgICAgICAgICBfbWFzay5hZGQoSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLy8gVGhlIG5vZGVzIGZvciB0aGUgZGlyZWN0IHN1YmNsYXNzZXMgb2YgW2Nsc10uCiAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IF9kaXJlY3RTdWJjbGFzc2VzID0gPENsYXNzSGllcmFyY2h5Tm9kZT5bXTsKCiAgQ2xhc3NIaWVyYXJjaHlOb2RlKHRoaXMucGFyZW50Tm9kZSwgdGhpcy5jbHMsIHRoaXMuaGllcmFyY2h5RGVwdGgpIHsKICAgIGlmIChwYXJlbnROb2RlICE9IG51bGwpIHsKICAgICAgcGFyZW50Tm9kZS5hZGREaXJlY3RTdWJjbGFzcyh0aGlzKTsKICAgIH0KICB9CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQ2xhc3NIaWVyYXJjaHlOb2RlXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENsYXNzSGllcmFyY2h5Tm9kZS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzSGllcmFyY2h5Tm9kZT4gbm9kZU1hcCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBJbmRleGVkQ2xhc3MgY2xzID0gc291cmNlLnJlYWRDbGFzcygpOwogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHBhcmVudE5vZGU7CiAgICBJbmRleGVkQ2xhc3Mgc3VwZXJjbGFzcyA9IHNvdXJjZS5yZWFkQ2xhc3NPck51bGwoKTsKICAgIGlmIChzdXBlcmNsYXNzICE9IG51bGwpIHsKICAgICAgcGFyZW50Tm9kZSA9IG5vZGVNYXBbc3VwZXJjbGFzc107CiAgICAgIGFzc2VydChwYXJlbnROb2RlICE9IG51bGwsCiAgICAgICAgICAiTm8gQ2xhc3NIaWVyYXJjaHlOb2RlIGZvciBzdXBlcmNsYXNzICRzdXBlcmNsYXNzLiIpOwogICAgfQogICAgaW50IG1hc2tWYWx1ZSA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBpbnQgaGllcmFyY2h5RGVwdGggPSBzb3VyY2UucmVhZEludCgpOwogICAgaW50IGluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGUocGFyZW50Tm9kZSwgY2xzLCBoaWVyYXJjaHlEZXB0aCkKICAgICAgLi5faW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCA9IGluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQKICAgICAgLi5fbWFzay52YWx1ZSA9IG1hc2tWYWx1ZTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0NsYXNzSGllcmFyY2h5Tm9kZV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzcyhjbHMpOwogICAgc2luay53cml0ZUNsYXNzT3JOdWxsKHBhcmVudE5vZGU/LmNscyk7CiAgICBzaW5rLndyaXRlSW50KF9tYXNrLnZhbHVlKTsKICAgIHNpbmsud3JpdGVJbnQoaGllcmFyY2h5RGVwdGgpOwogICAgc2luay53cml0ZUludChfaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIEFkZHMgW3N1YmNsYXNzXSBhcyBhIGRpcmVjdCBzdWJjbGFzcyBvZiBbY2xzXS4KICB2b2lkIGFkZERpcmVjdFN1YmNsYXNzKENsYXNzSGllcmFyY2h5Tm9kZSBzdWJjbGFzcykgewogICAgYXNzZXJ0KCFfZGlyZWN0U3ViY2xhc3Nlcy5jb250YWlucyhzdWJjbGFzcykpOwogICAgX2RpcmVjdFN1YmNsYXNzZXMuYWRkKHN1YmNsYXNzKTsKICB9CgogIEl0ZXJhYmxlPENsYXNzSGllcmFyY2h5Tm9kZT4gZ2V0IGRpcmVjdFN1YmNsYXNzZXMgPT4gX2RpcmVjdFN1YmNsYXNzZXM7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbb3RoZXJdIGlzIGNvbnRhaW5lZCBpbiB0aGUgc3VidHJlZSBvZiB0aGlzIG5vZGUuCiAgLy8vCiAgLy8vIFRoaXMgbWVhbnMgdGhhdCBbb3RoZXJdIGlzIGEgc3ViY2xhc3Mgb2YgW2Nsc10uCiAgYm9vbCBjb250YWlucyhDbGFzc0hpZXJhcmNoeU5vZGUgb3RoZXIpIHsKICAgIHdoaWxlIChvdGhlciAhPSBudWxsKSB7CiAgICAgIGlmIChjbHMgPT0gb3RoZXIuY2xzKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGhpZXJhcmNoeURlcHRoID49IG90aGVyLmhpZXJhcmNoeURlcHRoKSByZXR1cm4gZmFsc2U7CiAgICAgIG90aGVyID0gb3RoZXIucGFyZW50Tm9kZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBgb3RoZXIuY2xzYCBpcyBhIHN1YmNsYXNzIG9mIFtjbHNdLgogIGJvb2wgaGFzU3ViY2xhc3MoQ2xhc3NIaWVyYXJjaHlOb2RlIG90aGVyKSB7CiAgICByZXR1cm4gY29udGFpbnMob3RoZXIpOwogIH0KCiAgLy8vIGB0cnVlYCBpZiBbY2xzXSBoYXMgYmVlbiBkaXJlY3RseSwgaW5kaXJlY3RseSwgb3IgYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQuCiAgYm9vbCBnZXQgaXNJbnN0YW50aWF0ZWQgPT4KICAgICAgaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkIHx8IGlzSW5kaXJlY3RseUluc3RhbnRpYXRlZDsKCiAgLy8vIFJldHVybnMgYW4gW0l0ZXJhYmxlXSBvZiB0aGUgc3ViY2xhc3NlcyBvZiBbY2xzXSBwb3NzaWJseSBpbmNsdWRpbmcgW2Nsc10uCiAgLy8vCiAgLy8vIFN1YmNsYXNzZXMgYXJlIGluY2x1ZGVkIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcyBpbnRlcnNlY3Qgd2l0aAogIC8vLyB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZiBbc3RyaWN0XSBpcwogIC8vLyBgdHJ1ZWAsIFtjbHNdIGl0c2VsZiBpcyBfbm90XyByZXR1cm5lZC4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3ViY2xhc3Nlc0J5TWFzayhFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhYmxlKHRoaXMsIG1hc2ssIGluY2x1ZGVSb290OiAhc3RyaWN0KTsKICB9CgogIC8vLyBBcHBsaWVzIFtwcmVkaWNhdGVdIHRvIGVhY2ggc3ViY2xhc3Mgb2YgW2Nsc10gbWF0Y2hpbmcgdGhlIGNyaXRlcmlhCiAgLy8vIHNwZWNpZmllZCBieSBbbWFza10gYW5kIFtzdHJpY3RdLiBJZiBbcHJlZGljYXRlXSByZXR1cm5zIGB0cnVlYCBvbiBhCiAgLy8vIGNsYXNzLCB2aXNpdGF0aW9uIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC4KICAvLy8KICAvLy8gW3ByZWRpY2F0ZV0gaXMgYXBwbGllZCB0byBzdWJjbGFzc2VzIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcwogIC8vLyBpbnRlcnNlY3Qgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZgogIC8vLyBbc3RyaWN0XSBpcyBgdHJ1ZWAsIFtwcmVkaWNhdGVdIGlzIF9ub3RfIGNhbGxlZCBvbiBbY2xzXSBpdHNlbGYuCiAgYm9vbCBhbnlTdWJjbGFzcyhib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpLCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICBJdGVyYXRpb25TdGVwIHdyYXBwZXIoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIHJldHVybiBwcmVkaWNhdGUoY2xzKSA/IEl0ZXJhdGlvblN0ZXAuU1RPUCA6IEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICB9CgogICAgcmV0dXJuIGZvckVhY2hTdWJjbGFzcyh3cmFwcGVyLCBtYXNrLCBzdHJpY3Q6IHN0cmljdCkgPT0gSXRlcmF0aW9uU3RlcC5TVE9QOwogIH0KCiAgLy8vIEFwcGxpZXMgW2ZdIHRvIGVhY2ggc3ViY2xhc3Mgb2YgW2Nsc10gbWF0Y2hpbmcgdGhlIGNyaXRlcmlhIHNwZWNpZmllZCBieQogIC8vLyBbbWFza10gYW5kIFtzdHJpY3RdLgogIC8vLwogIC8vLyBbZl0gaXMgYSBhcHBsaWVkIHRvIHN1YmNsYXNzZXMgaWYgdGhlaXIgaW5zdGFudGlhdGlvbiBwcm9wZXJ0aWVzIGludGVyc2VjdAogIC8vLyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgW0luc3RhbnRpYXRpb25dIHZhbHVlcyBpbiBbbWFza10uIElmIFtzdHJpY3RdIGlzCiAgLy8vIGB0cnVlYCwgW2ZdIGlzIF9ub3RfIGNhbGxlZCBvbiBbY2xzXSBpdHNlbGYuCiAgLy8vCiAgLy8vIFRoZSB2aXNpdGF0aW9uIG9mIHN1YmNsYXNzZXMgY2FuIGJlIGN1dCBzaG9ydCBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIFtmXS4KICAvLy8gSWYgW0ZvckVhY2guU1RPUF0gaXMgcmV0dXJuZWQsIG5vIGZ1cnRoZXIgY2xhc3NlcyBhcmUgdmlzaXRlZCBhbmQgdGhlCiAgLy8vIGZ1bmN0aW9uIHN0b3BzIGltbWVkaWF0ZWx5LiBJZiBbRm9yRWFjaC5TS0lQX1NVQkNMQVNTRVNdIGlzIHJldHVybmVkLCB0aGUKICAvLy8gc3ViY2xhc3NlcyBvZiB0aGUgbGFzdCB2aXNpdGVkIGNsYXNzIGFyZSBza2lwcGVkLCBidXQgdmlzaXRhdGlvbgogIC8vLyBjb250aW51ZXMuIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGlzIGVpdGhlciBbRm9yRWFjaC5TVE9QXSwgaWYKICAvLy8gdmlzaXRhdGlvbiB3YXMgc3RvcHBlZCwgb3IgW0ZvckVhY2guQ09OVElOVUVdIGlmIHZpc2l0YXRpb24gY29udGludWVkIHRvCiAgLy8vIHRoZSBlbmQuCiAgSXRlcmF0aW9uU3RlcCBmb3JFYWNoU3ViY2xhc3MoRm9yRWFjaEZ1bmN0aW9uIGYsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzaywKICAgICAge2Jvb2wgc3RyaWN0OiBmYWxzZX0pIHsKICAgIEl0ZXJhdGlvblN0ZXAgbmV4dFN0ZXA7CiAgICBpZiAoIXN0cmljdCAmJiBtYXNrLmludGVyc2VjdHMoX21hc2spKSB7CiAgICAgIG5leHRTdGVwID0gZihjbHMpOwogICAgfQogICAgLy8gSW50ZXJwcmV0IGBmb3JFYWNoID09IG51bGxgIGFzIGBmb3JFYWNoID09IEZvckVhY2guQ09OVElOVUVgLgogICAgbmV4dFN0ZXAgPz89IEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CgogICAgaWYgKG5leHRTdGVwID09IEl0ZXJhdGlvblN0ZXAuQ09OVElOVUUpIHsKICAgICAgaWYgKG1hc2suY29udGFpbnMoSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCkgfHwgaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBzdWJjbGFzcyBpbiBfZGlyZWN0U3ViY2xhc3NlcykgewogICAgICAgICAgSXRlcmF0aW9uU3RlcCBzdWJGb3JFYWNoID0gc3ViY2xhc3MuZm9yRWFjaFN1YmNsYXNzKGYsIG1hc2spOwogICAgICAgICAgaWYgKHN1YkZvckVhY2ggPT0gSXRlcmF0aW9uU3RlcC5TVE9QKSB7CiAgICAgICAgICAgIHJldHVybiBzdWJGb3JFYWNoOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKG5leHRTdGVwID09IEl0ZXJhdGlvblN0ZXAuU1RPUCkgewogICAgICByZXR1cm4gbmV4dFN0ZXA7CiAgICB9CiAgICByZXR1cm4gSXRlcmF0aW9uU3RlcC5DT05USU5VRTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBtb3N0IHNwZWNpZmljIHN1YmNsYXNzIG9mIFtjbHNdIChpbmNsdWRpbmcgW2Nsc10pIHRoYXQgaXMKICAvLy8gZGlyZWN0bHkgaW5zdGFudGlhdGVkIG9yIGEgc3VwZXJjbGFzcyBvZiBhbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkCiAgLy8vIHN1YmNsYXNzZXMuIElmIFtjbHNdIGlzIG5vdCBpbnN0YW50aWF0ZWQsIGBudWxsYCBpcyByZXR1cm5lZC4KICBDbGFzc0VudGl0eSBnZXRMdWJPZkluc3RhbnRpYXRlZFN1YmNsYXNzZXMoKSB7CiAgICBpZiAoIWlzSW5zdGFudGlhdGVkKSByZXR1cm4gbnVsbDsKICAgIGlmIChfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YmNsYXNzID09IG51bGwpIHsKICAgICAgX2xlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzcyA9CiAgICAgICAgICBfY29tcHV0ZUxlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzcygpOwogICAgfQogICAgcmV0dXJuIF9sZWFzdFVwcGVySW5zdGFudGlhdGVkU3ViY2xhc3M7CiAgfQoKICBDbGFzc0VudGl0eSBfY29tcHV0ZUxlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzcygpIHsKICAgIGlmIChpc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgcmV0dXJuIGNsczsKICAgIH0KICAgIGlmICghaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3M7CiAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBub2RlIGluIF9kaXJlY3RTdWJjbGFzc2VzKSB7CiAgICAgIGlmIChub2RlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgaWYgKHN1YmNsYXNzID09IG51bGwpIHsKICAgICAgICAgIHN1YmNsYXNzID0gbm9kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGNsczsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChzdWJjbGFzcyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBzdWJjbGFzcy5nZXRMdWJPZkluc3RhbnRpYXRlZFN1YmNsYXNzZXMoKTsKICAgIH0KICAgIHJldHVybiBjbHM7CiAgfQoKICB2b2lkIHByaW50T24oU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmcgaW5kZW50YXRpb24sCiAgICAgIHtib29sIGluc3RhbnRpYXRlZE9ubHk6IGZhbHNlLAogICAgICBib29sIHNvcnRlZDogdHJ1ZSwKICAgICAgQ2xhc3NFbnRpdHkgd2l0aFJlc3BlY3RUb30pIHsKICAgIGJvb2wgaXNSZWxhdGVkVG8oQ2xhc3NFbnRpdHkgX3N1YmNsYXNzKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHRoaXMgZm9yIGtlcm5lbCBiYXNlZCBlbGVtZW50czoKICAgICAgLy8gcmV0dXJuIHN1YmNsYXNzID09IHdpdGhSZXNwZWN0VG8gfHwKICAgICAgLy8gICAgc3ViY2xhc3MuaW1wbGVtZW50c0ludGVyZmFjZSh3aXRoUmVzcGVjdFRvKTsKICAgIH0KCiAgICBzYi53cml0ZShpbmRlbnRhdGlvbik7CiAgICBpZiAoY2xzLmlzQWJzdHJhY3QpIHsKICAgICAgc2Iud3JpdGUoJ2Fic3RyYWN0ICcpOwogICAgfQogICAgc2Iud3JpdGUoJ2NsYXNzICR7Y2xzLm5hbWV9OicpOwogICAgaWYgKGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgc2Iud3JpdGUoJyBkaXJlY3RseScpOwogICAgfQogICAgaWYgKGlzSW5kaXJlY3RseUluc3RhbnRpYXRlZCkgewogICAgICBzYi53cml0ZSgnIGluZGlyZWN0bHknKTsKICAgIH0KICAgIGlmIChpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgc2Iud3JpdGUoJyBhYnN0cmFjdGx5Jyk7CiAgICB9CiAgICBzYi53cml0ZSgnIFsnKTsKICAgIGlmIChfZGlyZWN0U3ViY2xhc3Nlcy5pc0VtcHR5KSB7CiAgICAgIHNiLndyaXRlKCddJyk7CiAgICB9IGVsc2UgewogICAgICBkeW5hbWljIHN1YmNsYXNzZXMgPSBfZGlyZWN0U3ViY2xhc3NlczsKICAgICAgaWYgKHNvcnRlZCkgewogICAgICAgIHN1YmNsYXNzZXMgPSBfZGlyZWN0U3ViY2xhc3Nlcy50b0xpc3QoKQogICAgICAgICAgLi5zb3J0KChhLCBiKSB7CiAgICAgICAgICAgIHJldHVybiBhLmNscy5uYW1lLmNvbXBhcmVUbyhiLmNscy5uYW1lKTsKICAgICAgICAgIH0pOwogICAgICB9CiAgICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwogICAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBjaGlsZCBpbiBzdWJjbGFzc2VzKSB7CiAgICAgICAgaWYgKGluc3RhbnRpYXRlZE9ubHkgJiYgIWNoaWxkLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHdpdGhSZXNwZWN0VG8gIT0gbnVsbCAmJgogICAgICAgICAgICAhY2hpbGQuYW55U3ViY2xhc3MoaXNSZWxhdGVkVG8sIENsYXNzSGllcmFyY2h5Tm9kZS5BTEwpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICAgIHNiLndyaXRlKCcsXG4nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2Iud3JpdGUoJ1xuJyk7CiAgICAgICAgfQogICAgICAgIGNoaWxkLnByaW50T24oc2IsICckaW5kZW50YXRpb24gICcsCiAgICAgICAgICAgIGluc3RhbnRpYXRlZE9ubHk6IGluc3RhbnRpYXRlZE9ubHksCiAgICAgICAgICAgIHNvcnRlZDogc29ydGVkLAogICAgICAgICAgICB3aXRoUmVzcGVjdFRvOiB3aXRoUmVzcGVjdFRvKTsKICAgICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgIHNiLndyaXRlKCdcbicpOwogICAgICAgIHNiLndyaXRlKCckaW5kZW50YXRpb25dJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2Iud3JpdGUoJ10nKTsKICAgICAgfQogICAgfQogIH0KCiAgU3RyaW5nIGR1bXAoCiAgICAgIHtTdHJpbmcgaW5kZW50YXRpb246ICcnLAogICAgICBib29sIGluc3RhbnRpYXRlZE9ubHk6IGZhbHNlLAogICAgICBDbGFzc0VudGl0eSB3aXRoUmVzcGVjdFRvfSkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgcHJpbnRPbihzYiwgaW5kZW50YXRpb24sCiAgICAgICAgaW5zdGFudGlhdGVkT25seTogaW5zdGFudGlhdGVkT25seSwgd2l0aFJlc3BlY3RUbzogd2l0aFJlc3BlY3RUbyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGNscy50b1N0cmluZygpOwp9CgovLy8gT2JqZWN0IGhvbGRpbmcgdGhlIHN1YmNsYXNzIGFuZCBzdWJ0eXBlIHJlbGF0aW9uIGZvciBhIHNpbmdsZQovLy8gW0NsYXNzRW50aXR5XS4KLy8vCi8vLyBUaGUgc3ViY2xhc3MgcmVsYXRpb24gZm9yIGEgY2xhc3MgYENgIGlzIG1vZGVsbGVkIHRocm91Z2ggYSByZWZlcmVuY2UgdG8KLy8vIHRoZSBbQ2xhc3NIaWVyYXJjaHlOb2RlXSBmb3IgYENgIGluIHRoZSBnbG9iYWwgW0NsYXNzSGllcmFyY2h5Tm9kZV0gdHJlZQovLy8gY29tcHV0ZWQgaW4gW1dvcmxkXS4KLy8vCi8vLyBUaGUgc3VidHlwZSByZWxhdGlvbiBmb3IgYSBjbGFzcyBgQ2AgaXMgbW9kZWxsZWQgdGhyb3VnaCBhIGNvbGxlY3Rpb24gb2YKLy8vIGRpc2pvaW50IFtDbGFzc0hpZXJhcmNoeU5vZGVdIHN1YnRyZWVzLiBUaGUgc3ViY2xhc3NlcyBvZiBgQ2AsIG1vZGVsbGVkCi8vLyB0aHJvdWdoIHRoZSBhZm9yZW1lbnRpb25lZCBbQ2xhc3NIaWVyYXJjaHlOb2RlXSBwb2ludGVyLCBhcmUgZXh0ZW5kZWQgd2l0aAovLy8gdGhlIHN1YnR5cGVzIHRoYXQgZG8gbm90IGV4dGVuZCBgQ2AgdGhyb3VnaCBhIGxpc3Qgb2YgYWRkaXRpb25hbAovLy8gW0NsYXNzSGllcmFyY2h5Tm9kZV0gbm9kZXMuIFRoaXMgbGlzdCBpcyBub3JtYWxpemVkIHRvIGNvbnRhaW4gb25seSB0aGUKLy8vIG5vZGVzIGZvciB0aGUgdG9wbW9zdCBzdWJ0eXBlcyBhbmQgaXMgZnVydGhlcm1vcmUgb3JkZXJlZCBpbiBpbmNyZWFzaW5nCi8vLyBoaWVyYXJjaHkgZGVwdGggb3JkZXIuCi8vLwovLy8gRm9yIHRoaXMgY2xhc3MgaGllcmFyY2h5OgovLy8KLy8vICAgICBjbGFzcyBBIHt9Ci8vLyAgICAgY2xhc3MgQiBleHRlbmRzIEEge30KLy8vICAgICBjbGFzcyBDIGltcGxlbWVudHMgQiB7fQovLy8gICAgIGNsYXNzIEQgaW1wbGVtZW50cyBBIHt9Ci8vLyAgICAgY2xhc3MgRSBleHRlbmRzIEQge30KLy8vICAgICBjbGFzcyBGIGltcGxlbWVudHMgRCB7fQovLy8KLy8vIHRoZSBbQ2xhc3NIaWVyYXJjaHlOb2RlXSB0cmVlIGlzCi8vLwovLy8gICAgICAgT2JqZWN0Ci8vLyAgICAgIC8gfCAgfCBcCi8vLyAgICAgQSAgQyAgRCAgRgovLy8gICAgIHwgICAgIHwKLy8vICAgICBCICAgICBFCi8vLwovLy8gYW5kIHRoZSBbQ2xhc3NTZXRdIGZvciBgQWAgaG9sZHMgdGhlc2UgW0NsYXNzSGllcmFyY2h5Tm9kZV0gbm9kZXM6Ci8vLwovLy8gICAgICBBICAtPiAgW0MsIEQsIEZdCi8vLwovLy8gVGhlIHN1YnR5cGVzIGBCYCBhbmQgYEVgIGFyZSBub3QgZGlyZWN0bHkgbW9kZWxlZCBiZWNhdXNlIHRoZXkgYXJlIGltcGxpZWQKLy8vIGJ5IHRoZWlyIHN1YmNsYXNzIHJlbGF0aW9uIHRvIGBBYCBhbmQgYERgLCByZXNwZWN0aXZlbHkuIFRoaXMgY2FuIGJlIHNlZW4KLy8vIGlmIHdlIGV4cGFuZCB0aGUgc3ViY2xhc3Mgc3VidHJlZXM6Ci8vLwovLy8gICAgICBBICAtPiAgW0MsIEQsIEZdCi8vLyAgICAgIHwgICAgICAgICAgfAovLy8gICAgICBCICAgICAgICAgIEUKLy8vCmNsYXNzIENsYXNzU2V0IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0NsYXNzU2V0XSBvYmplY3RzIGluIGEgZGVidWdnaW5nCiAgLy8vIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NsYXNzLXNldCc7CgogIGZpbmFsIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlOwogIENsYXNzRW50aXR5IF9sZWFzdFVwcGVySW5zdGFudGlhdGVkU3VidHlwZTsKCiAgLy8vIEEgbGlzdCBvZiB0aGUgY2xhc3MgaGllcmFyY2h5IG5vZGVzIGZvciB0aGUgc3VidHlwZXMgdGhhdCBkZWNsYXJlIGEKICAvLy8gc3VidHlwZSByZWxhdGlvbnNoaXAgdG8gW2Nsc10gZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZQogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiBleHRlbmRzIEEge30KICAvLy8gICAgIGNsYXNzIEMgaW1wbGVtZW50cyBCIHt9CiAgLy8vICAgICBjbGFzcyBEIGltcGxlbWVudHMgQSB7fQogIC8vLyAgICAgY2xhc3MgRSBleHRlbmRzIEQge30KICAvLy8KICAvLy8gVGhlIGNsYXNzIGhpZXJhcmNoeSBub2RlcyBmb3IgY2xhc3NlcyBgQ2AgYW5kIGBEYCBhcmUgaW4gW19zdWJ0eXBlc10uIGBDYAogIC8vLyBiZWNhdXNlIGl0IGltcGxlbWVudHMgYEFgIHRocm91Z2ggYEJgIGFuZCBgRGAgYmVjYXVzZSBpdCBpbXBsZW1lbnRzIGBBYAogIC8vLyBkaXJlY3RseS4gYEVgIGFsc28gaW1wbGVtZW50cyBgQWAgdGhyb3VnaCBpdHMgZXh0ZW5zaW9uIG9mIGBEYCBhbmQgaXQgaXMKICAvLy8gdGhlcmVmb3JlIGluY2x1ZGVkIHRocm91Z2ggdGhlIGNsYXNzIGhpZXJhcmNoeSBub2RlIGZvciBgRGAuCiAgLy8vCiAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IF9zdWJ0eXBlczsKCiAgLy8vIEEgbGlzdCBvZiB0aGUgY2xhc3MgaGllcmFyY2h5IG5vZGVzIGZvciB0aGUgY2xhc3MgdGhhdCBkaXJlY3RseSBtaXggaW4KICAvLy8gW2Nsc10uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZQogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiBleHRlbmRzIE9iamVjdCB3aXRoIEEge30KICAvLy8gICAgIGNsYXNzIEMgPSBPYmplY3Qgd2l0aCBBOwogIC8vLyAgICAgY2xhc3MgRCBleHRlbmRzIEIge30KICAvLy8gICAgIGNsYXNzIEUgZXh0ZW5kcyBDIHt9CiAgLy8vCiAgLy8vIFRoZSBjbGFzcyBoaWVyYXJjaHkgbm9kZXMgZm9yIHRoZSB1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uIGBPYmplY3QrQWAgYW5kCiAgLy8vIHRoZSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiBgQ2AgYXJlIGluIFtfbWl4aW5BcHBsaWNhdGlvbnNdLgogIC8vLwogIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBfbWl4aW5BcHBsaWNhdGlvbnM7CgogIENsYXNzU2V0KHRoaXMubm9kZSk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQ2xhc3NTZXRdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgQ2xhc3NTZXQucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgTWFwPENsYXNzRW50aXR5LCBDbGFzc0hpZXJhcmNoeU5vZGU+IG5vZGVNYXApIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBub2RlTWFwW3NvdXJjZS5yZWFkQ2xhc3MoKV07CiAgICBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4gc3VidHlwZXMgPSBzb3VyY2UucmVhZExpc3QoKCkgewogICAgICByZXR1cm4gbm9kZU1hcFtzb3VyY2UucmVhZENsYXNzKCldOwogICAgfSwgZW1wdHlBc051bGw6IHRydWUpOwogICAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IG1peGluQXBwbGljYXRpb25zID0gc291cmNlLnJlYWRMaXN0KCgpIHsKICAgICAgcmV0dXJuIG5vZGVNYXBbc291cmNlLnJlYWRDbGFzcygpXTsKICAgIH0sIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2xhc3NTZXQobm9kZSkKICAgICAgLi5fc3VidHlwZXMgPSBzdWJ0eXBlcwogICAgICAuLl9taXhpbkFwcGxpY2F0aW9ucyA9IG1peGluQXBwbGljYXRpb25zOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbQ2xhc3NTZXRdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3Mobm9kZS5jbHMpOwogICAgc2luay53cml0ZUxpc3QoX3N1YnR5cGVzLCAoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUpIHsKICAgICAgc2luay53cml0ZUNsYXNzKG5vZGUuY2xzKTsKICAgIH0sIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfbWl4aW5BcHBsaWNhdGlvbnMsIChDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSkgewogICAgICBzaW5rLndyaXRlQ2xhc3Mobm9kZS5jbHMpOwogICAgfSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBDbGFzc0VudGl0eSBnZXQgY2xzID0+IG5vZGUuY2xzOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYG90aGVyLmNsc2AgaXMgYSBzdWJjbGFzcyBvZiBbY2xzXS4KICBib29sIGhhc1N1YmNsYXNzKENsYXNzSGllcmFyY2h5Tm9kZSBvdGhlcikgPT4gbm9kZS5oYXNTdWJjbGFzcyhvdGhlcik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBgb3RoZXIuY2xzYCBpcyBhIHN1YnR5cGUgb2YgW2Nsc10uCiAgYm9vbCBoYXNTdWJ0eXBlKENsYXNzSGllcmFyY2h5Tm9kZSBvdGhlcikgewogICAgaWYgKGhhc1N1YmNsYXNzKG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoX3N1YnR5cGVzICE9IG51bGwpIHsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3VidHlwZU5vZGUgaW4gX3N1YnR5cGVzKSB7CiAgICAgICAgaWYgKHN1YnR5cGVOb2RlLmhhc1N1YmNsYXNzKG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlyZWN0bHkgaW5zdGFudGlhdGVkIHN1YnR5cGVzIG9mIFtjbHNdLgogIGludCBnZXQgaW5zdGFudGlhdGVkU3VidHlwZUNvdW50IHsKICAgIGludCBjb3VudCA9IG5vZGUuaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudDsKICAgIGlmIChfc3VidHlwZXMgIT0gbnVsbCkgewogICAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBzdWJ0eXBlTm9kZSBpbiBfc3VidHlwZXMpIHsKICAgICAgICBpZiAoc3VidHlwZU5vZGUuaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0KICAgICAgICBjb3VudCArPSBzdWJ0eXBlTm9kZS5pbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGluc3RhbnRpYXRlZCBzdWJ0eXBlcyBvZiBbY2xzXSBhcmUgc3ViY2xhc3NlcyBvZgogIC8vLyBbY2xzXS4KICBib29sIGdldCBoYXNPbmx5SW5zdGFudGlhdGVkU3ViY2xhc3NlcyB7CiAgICBpZiAoX3N1YnR5cGVzICE9IG51bGwpIHsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3VidHlwZU5vZGUgaW4gX3N1YnR5cGVzKSB7CiAgICAgICAgaWYgKHN1YnR5cGVOb2RlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgW2Nsc10gZGlyZWN0bHkgb3IKICAvLy8gdGhyb3VnaCBzdXBlcnR5cGVzLgogIC8vLwogIC8vLyBBIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBbY2xzXSB0aHJvdWdoIGl0cyBzdXBlcmNsYXNzZXMgaXMgbm90IGluY2x1ZGVkIGluCiAgLy8vIHRoZSBpdGVyYWJsZS4KICBJdGVyYWJsZTxDbGFzc0hpZXJhcmNoeU5vZGU+IGdldCBzdWJ0eXBlTm9kZXMgewogICAgcmV0dXJuIF9zdWJ0eXBlcyA/PyBjb25zdCA8Q2xhc3NIaWVyYXJjaHlOb2RlPltdOwogIH0KCiAgLy8vIFJldHVybnMgYW4gW0l0ZXJhYmxlXSBvZiB0aGUgY2xhc3NlcyB0aGF0IG1peCBpbiBbY2xzXSBkaXJlY3RseS4KICBJdGVyYWJsZTxDbGFzc0hpZXJhcmNoeU5vZGU+IGdldCBtaXhpbkFwcGxpY2F0aW9uTm9kZXMgewogICAgcmV0dXJuIF9taXhpbkFwcGxpY2F0aW9ucyA/PyBjb25zdCA8Q2xhc3NIaWVyYXJjaHlOb2RlPltdOwogIH0KCiAgLy8vIFJldHVybnMgYW4gW0l0ZXJhYmxlXSBvZiB0aGUgc3ViY2xhc3NlcyBvZiBbY2xzXSBwb3NzaWJseSBpbmNsdWRpbmcgW2Nsc10uCiAgLy8vCiAgLy8vIFN1YmNsYXNzZXMgYXJlIGluY2x1ZGVkIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcyBpbnRlcnNlY3Qgd2l0aAogIC8vLyB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZiBbc3RyaWN0XSBpcwogIC8vLyBgdHJ1ZWAsIFtjbHNdIGl0c2VsZiBpcyBfbm90XyByZXR1cm5lZC4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3ViY2xhc3Nlc0J5TWFzayhFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICByZXR1cm4gbm9kZS5zdWJjbGFzc2VzQnlNYXNrKG1hc2ssIHN0cmljdDogc3RyaWN0KTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIHN1YnR5cGVzIG9mIFtjbHNdIHBvc3NpYmx5IGluY2x1ZGluZyBbY2xzXS4KICAvLy8KICAvLy8gVGhlIGRpcmVjdGx5IGluc3RhbnRpYXRlZCwgaW5kaXJlY3RseSBpbnN0YW50aWF0ZWQgYW5kIHVuaW5zdGFudGlhdGVkCiAgLy8vIHN1YnR5cGVzIG9mIFtjbHNdIGFyZSByZXR1cm5lZCBpZiBbaW5jbHVkZURpcmVjdGx5SW5zdGFudGlhdGVkXSwKICAvLy8gW2luY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkXSwgYW5kIFtpbmNsdWRlVW5pbnN0YW50aWF0ZWRdIGFyZSBgdHJ1ZWAsCiAgLy8vIHJlc3BlY3RpdmVseS4gSWYgW3N0cmljdF0gaXMgYHRydWVgLCBbY2xzXSBpdHNlbGYgaXMgX25vdF8gcmV0dXJuZWQuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YnR5cGVzKAogICAgICB7Ym9vbCBpbmNsdWRlRGlyZWN0bHlJbnN0YW50aWF0ZWQ6IHRydWUsCiAgICAgIGJvb2wgaW5jbHVkZUluZGlyZWN0bHlJbnN0YW50aWF0ZWQ6IHRydWUsCiAgICAgIGJvb2wgaW5jbHVkZVVuaW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2sgPSBDbGFzc0hpZXJhcmNoeU5vZGUuY3JlYXRlTWFzaygKICAgICAgICBpbmNsdWRlRGlyZWN0bHlJbnN0YW50aWF0ZWQ6IGluY2x1ZGVEaXJlY3RseUluc3RhbnRpYXRlZCwKICAgICAgICBpbmNsdWRlSW5kaXJlY3RseUluc3RhbnRpYXRlZDogaW5jbHVkZUluZGlyZWN0bHlJbnN0YW50aWF0ZWQsCiAgICAgICAgaW5jbHVkZVVuaW5zdGFudGlhdGVkOiBpbmNsdWRlVW5pbnN0YW50aWF0ZWQpOwogICAgcmV0dXJuIHN1YnR5cGVzQnlNYXNrKG1hc2ssIHN0cmljdDogc3RyaWN0KTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIHN1YnR5cGVzIG9mIFtjbHNdIHBvc3NpYmx5IGluY2x1ZGluZyBbY2xzXS4KICAvLy8KICAvLy8gU3VidHlwZXMgYXJlIGluY2x1ZGVkIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcyBpbnRlcnNlY3Qgd2l0aAogIC8vLyB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZiBbc3RyaWN0XSBpcwogIC8vLyBgdHJ1ZWAsIFtjbHNdIGl0c2VsZiBpcyBfbm90XyByZXR1cm5lZC4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3VidHlwZXNCeU1hc2soRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgaWYgKF9zdWJ0eXBlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBub2RlLnN1YmNsYXNzZXNCeU1hc2sobWFzaywgc3RyaWN0OiBzdHJpY3QpOwogICAgfQoKICAgIHJldHVybiBuZXcgU3VidHlwZXNJdGVyYWJsZS5TdWJ0eXBlc0l0ZXJhdG9yKHRoaXMsIG1hc2ssCiAgICAgICAgaW5jbHVkZVJvb3Q6ICFzdHJpY3QpOwogIH0KCiAgLy8vIEFwcGxpZXMgW3ByZWRpY2F0ZV0gdG8gZWFjaCBzdWJjbGFzcyBvZiBbY2xzXSBtYXRjaGluZyB0aGUgY3JpdGVyaWEKICAvLy8gc3BlY2lmaWVkIGJ5IFttYXNrXSBhbmQgW3N0cmljdF0uIElmIFtwcmVkaWNhdGVdIHJldHVybnMgYHRydWVgIG9uIGEKICAvLy8gY2xhc3MsIHZpc2l0YXRpb24gaXMgc3RvcHBlZCBpbW1lZGlhdGVseSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLgogIC8vLwogIC8vLyBbcHJlZGljYXRlXSBpcyBhcHBsaWVkIHRvIHN1YmNsYXNzZXMgaWYgdGhlaXIgaW5zdGFudGlhdGlvbiBwcm9wZXJ0aWVzCiAgLy8vIGludGVyc2VjdCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgW0luc3RhbnRpYXRpb25dIHZhbHVlcyBpbiBbbWFza10uIElmCiAgLy8vIFtzdHJpY3RdIGlzIGB0cnVlYCwgW3ByZWRpY2F0ZV0gaXMgX25vdF8gY2FsbGVkIG9uIFtjbHNdIGl0c2VsZi4KICBib29sIGFueVN1YmNsYXNzKGJvb2wgcHJlZGljYXRlKENsYXNzRW50aXR5IGNscyksIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzaywKICAgICAge2Jvb2wgc3RyaWN0OiBmYWxzZX0pIHsKICAgIHJldHVybiBub2RlLmFueVN1YmNsYXNzKHByZWRpY2F0ZSwgbWFzaywgc3RyaWN0OiBzdHJpY3QpOwogIH0KCiAgLy8vIEFwcGxpZXMgW2ZdIHRvIGVhY2ggc3ViY2xhc3Mgb2YgW2Nsc10gbWF0Y2hpbmcgdGhlIGNyaXRlcmlhIHNwZWNpZmllZCBieQogIC8vLyBbbWFza10gYW5kIFtzdHJpY3RdLgogIC8vLwogIC8vLyBbZl0gaXMgYSBhcHBsaWVkIHRvIHN1YmNsYXNzZXMgaWYgdGhlaXIgaW5zdGFudGlhdGlvbiBwcm9wZXJ0aWVzIGludGVyc2VjdAogIC8vLyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgW0luc3RhbnRpYXRpb25dIHZhbHVlcyBpbiBbbWFza10uIElmIFtzdHJpY3RdIGlzCiAgLy8vIGB0cnVlYCwgW2ZdIGlzIF9ub3RfIGNhbGxlZCBvbiBbY2xzXSBpdHNlbGYuCiAgLy8vCiAgLy8vIFRoZSB2aXNpdGF0aW9uIG9mIHN1YmNsYXNzZXMgY2FuIGJlIGN1dCBzaG9ydCBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIFtmXS4KICAvLy8gSWYgW0ZvckVhY2guU1RPUF0gaXMgcmV0dXJuZWQsIG5vIGZ1cnRoZXIgY2xhc3NlcyBhcmUgdmlzaXRlZCBhbmQgdGhlCiAgLy8vIGZ1bmN0aW9uIHN0b3BzIGltbWVkaWF0ZWx5LiBJZiBbRm9yRWFjaC5TS0lQX1NVQkNMQVNTRVNdIGlzIHJldHVybmVkLCB0aGUKICAvLy8gc3ViY2xhc3NlcyBvZiB0aGUgbGFzdCB2aXNpdGVkIGNsYXNzIGFyZSBza2lwcGVkLCBidXQgdmlzaXRhdGlvbgogIC8vLyBjb250aW51ZXMuIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGlzIGVpdGhlciBbRm9yRWFjaC5TVE9QXSwgaWYKICAvLy8gdmlzaXRhdGlvbiB3YXMgc3RvcHBlZCwgb3IgW0ZvckVhY2guQ09OVElOVUVdIGlmIHZpc2l0YXRpb24gY29udGludWVkIHRvCiAgLy8vIHRoZSBlbmQuCiAgSXRlcmF0aW9uU3RlcCBmb3JFYWNoU3ViY2xhc3MoRm9yRWFjaEZ1bmN0aW9uIGYsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzaywKICAgICAge2Jvb2wgc3RyaWN0OiBmYWxzZX0pIHsKICAgIHJldHVybiBub2RlLmZvckVhY2hTdWJjbGFzcyhmLCBtYXNrLCBzdHJpY3Q6IHN0cmljdCk7CiAgfQoKICAvLy8gQXBwbGllcyBbcHJlZGljYXRlXSB0byBlYWNoIHN1YnR5cGUgb2YgW2Nsc10gbWF0Y2hpbmcgdGhlIGNyaXRlcmlhCiAgLy8vIHNwZWNpZmllZCBieSBbbWFza10gYW5kIFtzdHJpY3RdLiBJZiBbcHJlZGljYXRlXSByZXR1cm5zIGB0cnVlYCBvbiBhCiAgLy8vIGNsYXNzLCB2aXNpdGF0aW9uIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC4KICAvLy8KICAvLy8gW3ByZWRpY2F0ZV0gaXMgYXBwbGllZCB0byBzdWJ0eXBlcyBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMKICAvLy8gaW50ZXJzZWN0IHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYKICAvLy8gW3N0cmljdF0gaXMgYHRydWVgLCBbcHJlZGljYXRlXSBpcyBfbm90XyBjYWxsZWQgb24gW2Nsc10gaXRzZWxmLgogIGJvb2wgYW55U3VidHlwZShib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpLCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICBJdGVyYXRpb25TdGVwIHdyYXBwZXIoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIHJldHVybiBwcmVkaWNhdGUoY2xzKSA/IEl0ZXJhdGlvblN0ZXAuU1RPUCA6IEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICB9CgogICAgcmV0dXJuIGZvckVhY2hTdWJ0eXBlKHdyYXBwZXIsIG1hc2ssIHN0cmljdDogc3RyaWN0KSA9PSBJdGVyYXRpb25TdGVwLlNUT1A7CiAgfQoKICAvLy8gQXBwbGllcyBbZl0gdG8gZWFjaCBzdWJ0eXBlIG9mIFtjbHNdIG1hdGNoaW5nIHRoZSBjcml0ZXJpYSBzcGVjaWZpZWQgYnkKICAvLy8gW21hc2tdIGFuZCBbc3RyaWN0XS4KICAvLy8KICAvLy8gW2ZdIGlzIGEgYXBwbGllZCB0byBzdWJ0eXBlcyBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMgaW50ZXJzZWN0CiAgLy8vIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYgW3N0cmljdF0gaXMKICAvLy8gYHRydWVgLCBbZl0gaXMgX25vdF8gY2FsbGVkIG9uIFtjbHNdIGl0c2VsZi4KICAvLy8KICAvLy8gVGhlIHZpc2l0YXRpb24gb2Ygc3VidHlwZXMgY2FuIGJlIGN1dCBzaG9ydCBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIFtmXS4KICAvLy8gSWYgW0ZvckVhY2guU1RPUF0gaXMgcmV0dXJuZWQsIG5vIGZ1cnRoZXIgY2xhc3NlcyBhcmUgdmlzaXRlZCBhbmQgdGhlCiAgLy8vIGZ1bmN0aW9uIHN0b3BzIGltbWVkaWF0ZWx5LiBJZiBbRm9yRWFjaC5TS0lQX1NVQkNMQVNTRVNdIGlzIHJldHVybmVkLCB0aGUKICAvLy8gc3ViY2xhc3NlcyBvZiB0aGUgbGFzdCB2aXNpdGVkIGNsYXNzIGFyZSBza2lwcGVkLCBidXQgdmlzaXRhdGlvbgogIC8vLyBjb250aW51ZXMuIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGlzIGVpdGhlciBbRm9yRWFjaC5TVE9QXSwgaWYKICAvLy8gdmlzaXRhdGlvbiB3YXMgc3RvcHBlZCwgb3IgW0ZvckVhY2guQ09OVElOVUVdIGlmIHZpc2l0YXRpb24gY29udGludWVkIHRvCiAgLy8vIHRoZSBlbmQuCiAgSXRlcmF0aW9uU3RlcCBmb3JFYWNoU3VidHlwZShGb3JFYWNoRnVuY3Rpb24gZiwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgSXRlcmF0aW9uU3RlcCBuZXh0U3RlcCA9CiAgICAgICAgbm9kZS5mb3JFYWNoU3ViY2xhc3MoZiwgbWFzaywgc3RyaWN0OiBzdHJpY3QpID8/IEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICBpZiAobmV4dFN0ZXAgPT0gSXRlcmF0aW9uU3RlcC5DT05USU5VRSAmJiBfc3VidHlwZXMgIT0gbnVsbCkgewogICAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBzdWJjbGFzcyBpbiBfc3VidHlwZXMpIHsKICAgICAgICBJdGVyYXRpb25TdGVwIHN1YkZvckVhY2ggPSBzdWJjbGFzcy5mb3JFYWNoU3ViY2xhc3MoZiwgbWFzayk7CiAgICAgICAgaWYgKHN1YkZvckVhY2ggPT0gSXRlcmF0aW9uU3RlcC5TVE9QKSB7CiAgICAgICAgICByZXR1cm4gc3ViRm9yRWFjaDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzc2VydChuZXh0U3RlcCAhPSBJdGVyYXRpb25TdGVwLlNLSVBfU1VCQ0xBU1NFUyk7CiAgICByZXR1cm4gbmV4dFN0ZXA7CiAgfQoKICAvLy8gQWRkcyBbc3VidHlwZV0gYXMgYSBzdWJ0eXBlIG9mIFtjbHNdLgogIHZvaWQgYWRkU3VidHlwZShDbGFzc0hpZXJhcmNoeU5vZGUgc3VidHlwZSkgewogICAgaWYgKG5vZGUuY29udGFpbnMoc3VidHlwZSkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKF9zdWJ0eXBlcyA9PSBudWxsKSB7CiAgICAgIF9zdWJ0eXBlcyA9IDxDbGFzc0hpZXJhcmNoeU5vZGU+W3N1YnR5cGVdOwogICAgfSBlbHNlIHsKICAgICAgaW50IGhpZXJhcmNoeURlcHRoID0gc3VidHlwZS5oaWVyYXJjaHlEZXB0aDsKICAgICAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IG5ld1N1YnR5cGVzID0gPENsYXNzSGllcmFyY2h5Tm9kZT5bXTsKICAgICAgYm9vbCBhZGRlZCA9IGZhbHNlOwogICAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBvdGhlclN1YnR5cGUgaW4gX3N1YnR5cGVzKSB7CiAgICAgICAgaW50IG90aGVySGllcmFyY2h5RGVwdGggPSBvdGhlclN1YnR5cGUuaGllcmFyY2h5RGVwdGg7CiAgICAgICAgaWYgKGhpZXJhcmNoeURlcHRoID09IG90aGVySGllcmFyY2h5RGVwdGgpIHsKICAgICAgICAgIGlmIChzdWJ0eXBlID09IG90aGVyU3VidHlwZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBbb3RoZXJTdWJ0eXBlXSBpcyB1bnJlbGF0ZWQgdG8gW3N1YnR5cGVdLgogICAgICAgICAgICBuZXdTdWJ0eXBlcy5hZGQob3RoZXJTdWJ0eXBlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGhpZXJhcmNoeURlcHRoID4gb3RoZXJTdWJ0eXBlLmhpZXJhcmNoeURlcHRoKSB7CiAgICAgICAgICAvLyBbb3RoZXJTdWJ0eXBlXSBjb3VsZCBiZSBhIHN1cGVyY2xhc3Mgb2YgW3N1YnR5cGVdLgogICAgICAgICAgaWYgKG90aGVyU3VidHlwZS5jb250YWlucyhzdWJ0eXBlKSkgewogICAgICAgICAgICAvLyBbc3VidHlwZV0gaXMgYWxyZWFkeSBpbiB0aGlzIHNldC4KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gW290aGVyU3VidHlwZV0gaXMgdW5yZWxhdGVkIHRvIFtzdWJ0eXBlXS4KICAgICAgICAgICAgbmV3U3VidHlwZXMuYWRkKG90aGVyU3VidHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICghYWRkZWQpIHsKICAgICAgICAgICAgLy8gSW5zZXJ0IFtzdWJ0eXBlXSBiZWZvcmUgb3RoZXIgc3VidHlwZXMgb2YgaGlnaGVyIGhpZXJhcmNoeSBkZXB0aC4KICAgICAgICAgICAgbmV3U3VidHlwZXMuYWRkKHN1YnR5cGUpOwogICAgICAgICAgICBhZGRlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBbc3VidHlwZV0gY291bGQgYmUgYSBzdXBlcmNsYXNzIG9mIFtvdGhlclN1YnR5cGVdLgogICAgICAgICAgaWYgKHN1YnR5cGUuY29udGFpbnMob3RoZXJTdWJ0eXBlKSkgewogICAgICAgICAgICAvLyBSZXBsYWNlIFtvdGhlclN1YnR5cGVdLgogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV3U3VidHlwZXMuYWRkKG90aGVyU3VidHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghYWRkZWQpIHsKICAgICAgICBuZXdTdWJ0eXBlcy5hZGQoc3VidHlwZSk7CiAgICAgIH0KICAgICAgX3N1YnR5cGVzID0gbmV3U3VidHlwZXM7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBbbWl4aW5BcHBsaWNhdGlvbl0gYXMgYSBjbGFzcyB0aGF0IG1peGVzIGluIFtjbHNdLgogIHZvaWQgYWRkTWl4aW5BcHBsaWNhdGlvbihDbGFzc0hpZXJhcmNoeU5vZGUgbWl4aW5BcHBsaWNhdGlvbikgewogICAgaWYgKF9taXhpbkFwcGxpY2F0aW9ucyA9PSBudWxsKSB7CiAgICAgIF9taXhpbkFwcGxpY2F0aW9ucyA9IDxDbGFzc0hpZXJhcmNoeU5vZGU+W21peGluQXBwbGljYXRpb25dOwogICAgfSBlbHNlIHsKICAgICAgX21peGluQXBwbGljYXRpb25zLmFkZChtaXhpbkFwcGxpY2F0aW9uKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBtb3N0IHNwZWNpZmljIHN1YnR5cGUgb2YgW2Nsc10gKGluY2x1ZGluZyBbY2xzXSkgdGhhdCBpcwogIC8vLyBkaXJlY3RseSBpbnN0YW50aWF0ZWQgb3IgYSBzdXBlcmNsYXNzIG9mIGFsbCBkaXJlY3RseSBpbnN0YW50aWF0ZWQKICAvLy8gc3VidHlwZXMuIElmIG5vIHN1YnR5cGVzIG9mIFtjbHNdIGFyZSBpbnN0YW50aWF0ZWQsIGBudWxsYCBpcyByZXR1cm5lZC4KICBDbGFzc0VudGl0eSBnZXRMdWJPZkluc3RhbnRpYXRlZFN1YnR5cGVzKCkgewogICAgaWYgKF9sZWFzdFVwcGVySW5zdGFudGlhdGVkU3VidHlwZSA9PSBudWxsKSB7CiAgICAgIF9sZWFzdFVwcGVySW5zdGFudGlhdGVkU3VidHlwZSA9IF9jb21wdXRlTGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YnR5cGUoKTsKICAgIH0KICAgIHJldHVybiBfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YnR5cGU7CiAgfQoKICBDbGFzc0VudGl0eSBfY29tcHV0ZUxlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJ0eXBlKCkgewogICAgaWYgKG5vZGUuaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIHJldHVybiBjbHM7CiAgICB9CiAgICBpZiAoX3N1YnR5cGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vZGUuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKCk7CiAgICB9CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3VidHlwZTsKICAgIGlmIChub2RlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgIHN1YnR5cGUgPSBub2RlOwogICAgfQogICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3Vibm9kZSBpbiBfc3VidHlwZXMpIHsKICAgICAgaWYgKHN1Ym5vZGUuaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgICBpZiAoc3VidHlwZSA9PSBudWxsKSB7CiAgICAgICAgICBzdWJ0eXBlID0gc3Vibm9kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGNsczsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChzdWJ0eXBlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHN1YnR5cGUuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdbXG4nKTsKICAgIG5vZGUucHJpbnRPbihzYiwgJyAgJyk7CiAgICBzYi53cml0ZSgnXG4nKTsKICAgIGlmIChfc3VidHlwZXMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnICBzdWJ0eXBlczpcbicpOwogICAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBub2RlIGluIF9zdWJ0eXBlcykgewogICAgICAgIG5vZGUucHJpbnRPbihzYiwgJyAgJyk7CiAgICAgICAgc2Iud3JpdGUoJ1xuJyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfbWl4aW5BcHBsaWNhdGlvbnMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnICBtaXhpbi1hcHBsaWNhdGlvbnM6XG4nKTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSBpbiBfbWl4aW5BcHBsaWNhdGlvbnMpIHsKICAgICAgICBub2RlLnByaW50T24oc2IsICcgICcpOwogICAgICAgIHNiLndyaXRlKCdcbicpOwogICAgICB9CiAgICB9CiAgICBzYi53cml0ZSgnXScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gSXRlcmFibGUgZm9yIHN1YmNsYXNzZXMgb2YgYSBbQ2xhc3NIaWVyYXJjaHlOb2RlXS4KY2xhc3MgQ2xhc3NIaWVyYXJjaHlOb2RlSXRlcmFibGUgZXh0ZW5kcyBJdGVyYWJsZUJhc2U8Q2xhc3NFbnRpdHk+IHsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeU5vZGUgcm9vdDsKICBmaW5hbCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2s7CiAgZmluYWwgYm9vbCBpbmNsdWRlUm9vdDsKCiAgQ2xhc3NIaWVyYXJjaHlOb2RlSXRlcmFibGUodGhpcy5yb290LCB0aGlzLm1hc2ssIHt0aGlzLmluY2x1ZGVSb290OiB0cnVlfSkgewogICAgaWYgKHJvb3QgPT0gbnVsbCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIHJvb3QgZm9yIGl0ZXJhYmxlLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmF0b3I8Q2xhc3NFbnRpdHk+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhdG9yKHRoaXMpOwogIH0KfQoKLy8vIEl0ZXJhdG9yIGZvciBzdWJjbGFzc2VzIG9mIGEgW0NsYXNzSGllcmFyY2h5Tm9kZV0uCi8vLwovLy8gQ2xhc3NlcyBhcmUgcmV0dXJuZWQgaW4gcHJlLW9yZGVyIERGUyBmYXNoaW9uLgpjbGFzcyBDbGFzc0hpZXJhcmNoeU5vZGVJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPENsYXNzRW50aXR5PiB7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHlOb2RlSXRlcmFibGUgaXRlcmFibGU7CgogIC8vLyBUaGUgY2xhc3Mgbm9kZSBob2xkaW5nIHRoZSBbY3VycmVudF0gY2xhc3MuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYG51bGxgIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBbbW92ZU5leHRdIGFuZCBhdCB0aGUgZW5kIG9mCiAgLy8vIGl0ZXJhdGlvbiwgaS5lLiBhZnRlciBbbW92ZU5leHRdIGhhcyByZXR1cm5lZCBgZmFsc2VgLgogIENsYXNzSGllcmFyY2h5Tm9kZSBjdXJyZW50Tm9kZTsKCiAgLy8vIFN0YWNrIG9mIHBlbmRpbmcgY2xhc3Mgbm9kZXMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYG51bGxgIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBbbW92ZU5leHRdLgogIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBzdGFjazsKCiAgQ2xhc3NIaWVyYXJjaHlOb2RlSXRlcmF0b3IodGhpcy5pdGVyYWJsZSk7CgogIENsYXNzSGllcmFyY2h5Tm9kZSBnZXQgcm9vdCA9PiBpdGVyYWJsZS5yb290OwoKICBib29sIGdldCBpbmNsdWRlUm9vdCA9PiBpdGVyYWJsZS5pbmNsdWRlUm9vdDsKCiAgRW51bVNldDxJbnN0YW50aWF0aW9uPiBnZXQgbWFzayA9PiBpdGVyYWJsZS5tYXNrOwoKICBib29sIGdldCBpbmNsdWRlVW5pbnN0YW50aWF0ZWQgewogICAgcmV0dXJuIG1hc2suY29udGFpbnMoSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgY3VycmVudCB7CiAgICByZXR1cm4gY3VycmVudE5vZGUgIT0gbnVsbCA/IGN1cnJlbnROb2RlLmNscyA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKHN0YWNrID09IG51bGwpIHsKICAgICAgLy8gRmlyc3QgY2FsbCB0byBtb3ZlTmV4dAogICAgICBzdGFjayA9IFtyb290XTsKICAgICAgcmV0dXJuIF9maW5kTmV4dCgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gSW5pdGlhbGl6ZWQgc3RhdGUuCiAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBfZmluZE5leHQoKTsKICAgIH0KICB9CgogIC8vLyBGaW5kIHRoZSBuZXh0IGNsYXNzIHVzaW5nIHRoZSBbc3RhY2tdLgogIGJvb2wgX2ZpbmROZXh0KCkgewogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKHN0YWNrLmlzRW1wdHkpIHsKICAgICAgICAvLyBObyBtb3JlIGNsYXNzZXMuIFNldCBbY3VycmVudE5vZGVdIHRvIGBudWxsYCB0byBzaWduYWwgdGhlIGVuZCBvZgogICAgICAgIC8vIGl0ZXJhdGlvbi4KICAgICAgICBjdXJyZW50Tm9kZSA9IG51bGw7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGN1cnJlbnROb2RlID0gc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICBpZiAoIWluY2x1ZGVVbmluc3RhbnRpYXRlZCAmJiAhY3VycmVudE5vZGUuaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgICAvLyBXZSdyZSBvbmx5IGl0ZXJhdGluZyBpbnN0YW50aWF0ZWQgY2xhc3NlcyBzbyB0aGVyZSBpcyBubyB1c2UgaW4KICAgICAgICAvLyB2aXNpdGluZyB0aGUgY3VycmVudCBub2RlIGFuZCBpdHMgc3VidHJlZS4KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAvLyBBZGQgZGlyZWN0IHN1YmNsYXNzZXMgaW4gcmV2ZXJzZSBvcmRlciBzbyB3aWxsIHZpc2l0IHRoZW0gaW4gdGhlIGxpc3QKICAgICAgLy8gb3JkZXIuCiAgICAgIGZvciAoaW50IGkgPSBjdXJyZW50Tm9kZS5fZGlyZWN0U3ViY2xhc3Nlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHN0YWNrLmFkZChjdXJyZW50Tm9kZS5fZGlyZWN0U3ViY2xhc3Nlc1tpXSk7CiAgICAgIH0KICAgICAgaWYgKF9pc1ZhbGlkKGN1cnJlbnROb2RlKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNsYXNzIG9mIFtub2RlXSBpcyBhIHZhbGlkIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRvci4KICBib29sIF9pc1ZhbGlkKENsYXNzSGllcmFyY2h5Tm9kZSBub2RlKSB7CiAgICBpZiAoIWluY2x1ZGVSb290ICYmIG5vZGUgPT0gcm9vdCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG1hc2suaW50ZXJzZWN0cyhub2RlLl9tYXNrKTsKICB9Cn0KCi8vLyBJdGVyYWJsZSBmb3IgdGhlIHN1YnR5cGVzIGluIGEgW0NsYXNzU2V0XS4KY2xhc3MgU3VidHlwZXNJdGVyYWJsZSBleHRlbmRzIEl0ZXJhYmxlQmFzZTxDbGFzc0VudGl0eT4gewogIGZpbmFsIENsYXNzU2V0IHN1YnR5cGVTZXQ7CiAgZmluYWwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrOwogIGZpbmFsIGJvb2wgaW5jbHVkZVJvb3Q7CgogIFN1YnR5cGVzSXRlcmFibGUuU3VidHlwZXNJdGVyYXRvcih0aGlzLnN1YnR5cGVTZXQsIHRoaXMubWFzaywKICAgICAge3RoaXMuaW5jbHVkZVJvb3Q6IHRydWV9KTsKCiAgQG92ZXJyaWRlCiAgSXRlcmF0b3I8Q2xhc3NFbnRpdHk+IGdldCBpdGVyYXRvciA9PiBuZXcgU3VidHlwZXNJdGVyYXRvcih0aGlzKTsKfQoKLy8vIEl0ZXJhdG9yIGZvciB0aGUgc3VidHlwZXMgaW4gYSBbQ2xhc3NTZXRdLgpjbGFzcyBTdWJ0eXBlc0l0ZXJhdG9yIGV4dGVuZHMgSXRlcmF0b3I8Q2xhc3NFbnRpdHk+IHsKICBmaW5hbCBTdWJ0eXBlc0l0ZXJhYmxlIGl0ZXJhYmxlOwogIEl0ZXJhdG9yPENsYXNzRW50aXR5PiBlbGVtZW50czsKICBJdGVyYXRvcjxDbGFzc0hpZXJhcmNoeU5vZGU+IGhpZXJhcmNoeU5vZGVzOwoKICBTdWJ0eXBlc0l0ZXJhdG9yKHRoaXMuaXRlcmFibGUpOwoKICBib29sIGdldCBpbmNsdWRlUm9vdCA9PiBpdGVyYWJsZS5pbmNsdWRlUm9vdDsKCiAgRW51bVNldDxJbnN0YW50aWF0aW9uPiBnZXQgbWFzayA9PiBpdGVyYWJsZS5tYXNrOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgY3VycmVudCB7CiAgICBpZiAoZWxlbWVudHMgIT0gbnVsbCkgewogICAgICByZXR1cm4gZWxlbWVudHMuY3VycmVudDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChlbGVtZW50cyA9PSBudWxsICYmIGhpZXJhcmNoeU5vZGVzID09IG51bGwpIHsKICAgICAgLy8gSW5pdGlhbCBzdGF0ZS4gSXRlcmF0ZSB0aHJvdWdoIHN1YmNsYXNzZXMuCiAgICAgIGVsZW1lbnRzID0gaXRlcmFibGUuc3VidHlwZVNldC5ub2RlCiAgICAgICAgICAuc3ViY2xhc3Nlc0J5TWFzayhtYXNrLCBzdHJpY3Q6ICFpbmNsdWRlUm9vdCkKICAgICAgICAgIC5pdGVyYXRvcjsKICAgIH0KICAgIGlmIChlbGVtZW50cyAhPSBudWxsICYmIGVsZW1lbnRzLm1vdmVOZXh0KCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoaGllcmFyY2h5Tm9kZXMgPT0gbnVsbCkgewogICAgICAvLyBTdGFydCBpdGVyYXRpbmcgdGhyb3VnaCBzdWJ0eXBlcy4KICAgICAgaGllcmFyY2h5Tm9kZXMgPSBpdGVyYWJsZS5zdWJ0eXBlU2V0Ll9zdWJ0eXBlcy5pdGVyYXRvcjsKICAgIH0KICAgIHdoaWxlIChoaWVyYXJjaHlOb2Rlcy5tb3ZlTmV4dCgpKSB7CiAgICAgIGVsZW1lbnRzID0gaGllcmFyY2h5Tm9kZXMuY3VycmVudC5zdWJjbGFzc2VzQnlNYXNrKG1hc2spLml0ZXJhdG9yOwogICAgICBpZiAoZWxlbWVudHMubW92ZU5leHQoKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gRW51bSB2YWx1ZXMgcmV0dXJuZWQgZnJvbSB0aGUgW0ZvckVhY2hGdW5jdGlvbl0gcHJvdmlkZWQgdG8gdGhlIGBmb3JFYWNoWGAKLy8vIGZ1bmN0aW9ucyBvZiBbQ2xhc3NIaWVyYXJjaHlOb2RlXSBhbmQgW0NsYXNzU2V0XS4gVGhlIHZhbHVlIGlzIHVzZWQgdG8KLy8vIGNvbnRyb2wgdGhlIGNvbnRpbnVlZCBpdGVyYXRpb24uCmVudW0gSXRlcmF0aW9uU3RlcCB7CiAgLy8vIEl0ZXJhdGlvbiBjb250aW51ZXMuCiAgQ09OVElOVUUsCgogIC8vLyBJdGVyYXRpb24gc3RvcHMgaW1tZWRpYXRlbHkuCiAgU1RPUCwKCiAgLy8vIEl0ZXJhdGlvbiBza2lwcyB0aGUgc3ViY2xhc3NlcyBvZiB0aGUgY3VycmVudCBjbGFzcy4KICBTS0lQX1NVQkNMQVNTRVMsCn0KCi8vLyBWaXNpdGluZyBmdW5jdGlvbiB1c2VkIGZvciB0aGUgYGZvckVhY2hYYCBmdW5jdGlvbnMgb2YgW0NsYXNzSGllcmFyY2h5Tm9kZV0KLy8vIGFuZCBbQ2xhc3NTZXRdLiBUaGUgcmV0dXJuIHZhbHVlIGNvbnRyb2xzIHRoZSBjb250aW51ZWQgaXRlcmF0aW9uLiBJZiBgbnVsbGAKLy8vIGlzIHJldHVybmVkLCBpdGVyYXRpb24gY29udGludWVzIHRvIHRoZSBlbmQuCnR5cGVkZWYgSXRlcmF0aW9uU3RlcCBGb3JFYWNoRnVuY3Rpb24oQ2xhc3NFbnRpdHkgY2xzKTsKCi8vLyBTaW5nbGV0b24gbWFwIGltcGxlbWVudGVkIGFzIGEgZmllbGQgb24gdGhlIGtleS4KY2xhc3MgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcCBleHRlbmRzIE1hcEJhc2U8Q2xhc3NFbnRpdHksIENsYXNzSGllcmFyY2h5Tm9kZT4gewogIEBvdmVycmlkZQogIENsYXNzSGllcmFyY2h5Tm9kZSBvcGVyYXRvciBbXShPYmplY3QgY2xzKSB7CiAgICAvLyBUT0RPKHNyYSk6IENoYW5nZSB0aGUga2V5IHR5cGUgdG8gYGNvdmFyaWFudCBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwS2V5YC4KICAgIGlmIChjbHMgaXMgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleSkgewogICAgICByZXR1cm4gY2xzLl9jbGFzc0hpZXJhcmNoeU5vZGU7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCdDbGFzc0hpZXJhcmNoeU5vZGVzTWFwIGZvciAkY2xzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBvcGVyYXRvciBbXT0oT2JqZWN0IGNscywgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUpIHsKICAgIC8vIFRPRE8oc3JhKTogQ2hhbmdlIHRoZSBrZXkgdHlwZSB0byBgY292YXJpYW50IENsYXNzSGllcmFyY2h5Tm9kZXNNYXBLZXlgLgogICAgaWYgKGNscyBpcyBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwS2V5KSB7CiAgICAgIGNscy5fY2xhc3NIaWVyYXJjaHlOb2RlID0gbm9kZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcignQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcCBmb3IgJGNscycpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NIaWVyYXJjaHlOb2RlIHB1dElmQWJzZW50KAogICAgICBDbGFzc0VudGl0eSBjbHMsIENsYXNz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QWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSB0cmFjZXI7CgppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CmltcG9ydCAnc3NhL25vZGVzLmRhcnQnIGFzIHNzYSBzaG93IEhHcmFwaDsKaW1wb3J0ICdzc2Evc3NhX3RyYWNlci5kYXJ0JyBzaG93IEhUcmFjZXI7CmltcG9ydCAndXRpbC91dGlsLmRhcnQnIHNob3cgSW5kZW50YXRpb247CmltcG9ydCAnd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgovLy8gSWYgbm9uLW51bGwsIHdlIG9ubHkgdHJhY2UgbWV0aG9kcyB3aG9zZSBuYW1lIG1hdGNoIHRoZSByZWdleHAgZGVmaW5lZCBieQovLy8gdGhlIGdpdmVuIHBhdHRlcm4uClN0cmluZyBnZXQgVFJBQ0VfRklMVEVSX1BBVFRFUk4gPT4KICAgIFRSQUNFX0ZJTFRFUl9QQVRURVJOX0ZST01fRU5WSVJPTk1FTlQgPz8gVFJBQ0VfRklMVEVSX1BBVFRFUk5fRk9SX1RFU1Q7Cgpjb25zdCBTdHJpbmcgVFJBQ0VfRklMVEVSX1BBVFRFUk5fRlJPTV9FTlZJUk9OTUVOVCA9CiAgICBjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KCJEVU1QX0lSIik7ClN0cmluZyBUUkFDRV9GSUxURVJfUEFUVEVSTl9GT1JfVEVTVDsKCi8vLyBEdW1wcyB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIGFmdGVyIGVhY2ggcGhhc2UgaW4gYSBmb3JtYXQKLy8vIHJlYWRhYmxlIGJ5IElSIEh5ZHJhLgpjbGFzcyBUcmFjZXIgZXh0ZW5kcyBUcmFjZXJVdGlsIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgYm9vbCB0cmFjZUFjdGl2ZSA9IGZhbHNlOwogIEBvdmVycmlkZQogIGZpbmFsIGFwaS5PdXRwdXRTaW5rIG91dHB1dDsKICBmaW5hbCBSZWdFeHAgdHJhY2VGaWx0ZXI7CgogIFRyYWNlcih0aGlzLmNsb3NlZFdvcmxkLCBhcGkuQ29tcGlsZXJPdXRwdXQgY29tcGlsZXJPdXRwdXQpCiAgICAgIDogdHJhY2VGaWx0ZXIgPSBUUkFDRV9GSUxURVJfUEFUVEVSTiA9PSBudWxsCiAgICAgICAgICAgID8gbnVsbAogICAgICAgICAgICA6IG5ldyBSZWdFeHAoVFJBQ0VfRklMVEVSX1BBVFRFUk4pLAogICAgICAgIG91dHB1dCA9IFRSQUNFX0ZJTFRFUl9QQVRURVJOICE9IG51bGwKICAgICAgICAgICAgPyBjb21waWxlck91dHB1dC5jcmVhdGVPdXRwdXRTaW5rKAogICAgICAgICAgICAgICAgJ2RhcnQnLCAnY2ZnJywgYXBpLk91dHB1dFR5cGUuZGVidWcpCiAgICAgICAgICAgIDogbnVsbDsKCiAgYm9vbCBnZXQgaXNFbmFibGVkID0+IHRyYWNlRmlsdGVyICE9IG51bGw7CgogIHZvaWQgdHJhY2VDb21waWxhdGlvbihTdHJpbmcgbWV0aG9kTmFtZSkgewogICAgaWYgKCFpc0VuYWJsZWQpIHJldHVybjsKICAgIHRyYWNlQWN0aXZlID0gdHJhY2VGaWx0ZXIuaGFzTWF0Y2gobWV0aG9kTmFtZSk7CiAgICBpZiAoIXRyYWNlQWN0aXZlKSByZXR1cm47CiAgICB0YWcoImNvbXBpbGF0aW9uIiwgKCkgewogICAgICBwcmludFByb3BlcnR5KCJuYW1lIiwgbWV0aG9kTmFtZSk7CiAgICAgIHByaW50UHJvcGVydHkoIm1ldGhvZCIsIG1ldGhvZE5hbWUpOwogICAgICBwcmludFByb3BlcnR5KCJkYXRlIiwgbmV3IERhdGVUaW1lLm5vdygpLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2gpOwogICAgfSk7CiAgfQoKICB2b2lkIHRyYWNlR3JhcGgoU3RyaW5nIG5hbWUsIHZhciBpck9iamVjdCkgewogICAgaWYgKCF0cmFjZUFjdGl2ZSkgcmV0dXJuOwogICAgaWYgKGlyT2JqZWN0IGlzIHNzYS5IR3JhcGgpIHsKICAgICAgbmV3IEhUcmFjZXIob3V0cHV0LCBjbG9zZWRXb3JsZCkudHJhY2VHcmFwaChuYW1lLCBpck9iamVjdCk7CiAgICB9CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKG91dHB1dCAhPSBudWxsKSB7CiAgICAgIG91dHB1dC5jbG9zZSgpOwogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgVHJhY2VyVXRpbCB7CiAgYXBpLk91dHB1dFNpbmsgZ2V0IG91dHB1dDsKICBmaW5hbCBJbmRlbnRhdGlvbiBfaW5kID0gbmV3IEluZGVudGF0aW9uKCk7CgogIHZvaWQgdGFnKFN0cmluZyB0YWdOYW1lLCBGdW5jdGlvbiBmKSB7CiAgICBwcmludGxuKCJiZWdpbl8kdGFnTmFtZSIpOwogICAgX2luZC5pbmRlbnRCbG9jayhmKTsKICAgIHByaW50bG4oImVuZF8kdGFnTmFtZSIpOwogIH0KCiAgdm9pZCBwcmludGxuKFN0cmluZyBzdHJpbmcpIHsKICAgIGFkZEluZGVudCgpOwogICAgYWRkKHN0cmluZyk7CiAgICBhZGQoIlxuIik7CiAgfQoKICB2b2lkIHByaW50RW1wdHlQcm9wZXJ0eShTdHJpbmcgcHJvcGVydHlOYW1lKSB7CiAgICBwcmludGxuKHByb3BlcnR5TmFtZSk7CiAgfQoKICBTdHJpbmcgZm9ybWF0UHJ0eSh4KSB7CiAgICBpZiAoeCBpcyBudW0pIHsKICAgICAgcmV0dXJuICcke3h9JzsKICAgIH0gZWxzZSBpZiAoeCBpcyBTdHJpbmcpIHsKICAgICAgcmV0dXJuICciJHt4fSInOwogICAgfSBlbHNlIGlmICh4IGlzIEl0ZXJhYmxlKSB7CiAgICAgIHJldHVybiB4Lm1hcCgocykgPT4gZm9ybWF0UHJ0eShzKSkuam9pbignICcpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgImludmFsaWQgcHJvcGVydHkgdHlwZTogJHt4fSI7CiAgICB9CiAgfQoKICB2b2lkIHByaW50UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSwgdmFsdWUpIHsKICAgIHByaW50bG4oIiRwcm9wZXJ0eU5hbWUgJHtmb3JtYXRQcnR5KHZhbHVlKX0iKTsKICB9CgogIHZvaWQgYWRkKFN0cmluZyBzdHJpbmcpIHsKICAgIG91dHB1dC5hZGQoc3RyaW5nKTsKICB9CgogIHZvaWQgYWRkSW5kZW50KCkgewogICAgYWRkKF9pbmQuaW5kZW50YXRpb24pOwogIH0KfQpwAE5OPAEQASYsKyonAU4XI0wBNS0mAUcaIiIcDB8cAT4zEzAuLzUUAS0BLRw0HhwpK0gIBAEvHiJDBgQBERoWBgQCARwdLgEpHxkdBAEgEREPBAExGwQBGRQVHhcgNA0rBgQBMzMEARwYBAEVGwQCASBwYWNrYWdlOmNvbXBpbGVyL3NyYy90cmFjZXIuZGFydEJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2NoZWNrZWRfbW9kZV9oZWxwZXJzLmRhcnSsoi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9zc2EvY29kZWdlbi5kYXJ0JyBzaG93IFNzYUNvZGVHZW5lcmF0b3I7CmltcG9ydCAnLi4vc3NhL25vZGVzLmRhcnQnIHNob3cgSFR5cGVDb252ZXJzaW9uOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBTdGF0aWNVc2U7CmltcG9ydCAnbmFtZXIuZGFydCcgc2hvdyBNb2R1bGFyTmFtZXI7CgpjbGFzcyBDaGVja2VkTW9kZUhlbHBlciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKFN0cmluZyB0aGlzLm5hbWUpOwoKICBTdGF0aWNVc2UgZ2V0U3RhdGljVXNlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZWZhY3RvciB0aGlzIHRvIGF2b2lkIGxvb2tpbmcgdXAgZGlyZWN0bHkgaW4gdGhlCiAgICAvLyBqcyBoZWxwZXIgbGlicmFyeSBidXQgaW5zdGVhZCBhY2Nlc3MgY29tbW9uRWxlbWVudHMuCiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMuZmluZEhlbHBlckZ1bmN0aW9uKG5hbWUpLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIENhbGxTdHJ1Y3R1cmUgZ2V0IGNhbGxTdHJ1Y3R1cmUgPT4gQ2FsbFN0cnVjdHVyZS5PTkVfQVJHOwoKICB2b2lkIGdlbmVyYXRlQWRkaXRpb25hbEFyZ3VtZW50cyhTc2FDb2RlR2VuZXJhdG9yIGNvZGVnZW4sIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgSFR5cGVDb252ZXJzaW9uIG5vZGUsIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICAvLyBObyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBuZWVkZWQuCiAgfQp9CgpjbGFzcyBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyIGV4dGVuZHMgQ2hlY2tlZE1vZGVIZWxwZXIgewogIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoU3RyaW5nIG5hbWUpIDogc3VwZXIobmFtZSk7CgogIEBvdmVycmlkZQogIENhbGxTdHJ1Y3R1cmUgZ2V0IGNhbGxTdHJ1Y3R1cmUgPT4gQ2FsbFN0cnVjdHVyZS5UV09fQVJHUzsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHMoU3NhQ29kZUdlbmVyYXRvciBjb2RlZ2VuLCBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIEhUeXBlQ29udmVyc2lvbiBub2RlLCBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cykgewogICAgRGFydFR5cGUgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb247CiAgICBqc0FzdC5OYW1lIGFkZGl0aW9uYWxBcmd1bWVudCA9IG5hbWVyLm9wZXJhdG9ySXNUeXBlKHR5cGUpOwogICAgYXJndW1lbnRzLmFkZChqcy5xdW90ZU5hbWUoYWRkaXRpb25hbEFyZ3VtZW50KSk7CiAgfQp9CgpjbGFzcyBUeXBlVmFyaWFibGVDaGVja2VkTW9kZUhlbHBlciBleHRlbmRzIENoZWNrZWRNb2RlSGVscGVyIHsKICBjb25zdCBUeXBlVmFyaWFibGVDaGVja2VkTW9kZUhlbHBlcihTdHJpbmcgbmFtZSkgOiBzdXBlcihuYW1lKTsKCiAgQG92ZXJyaWRlCiAgQ2FsbFN0cnVjdHVyZSBnZXQgY2FsbFN0cnVjdHVyZSA9PiBDYWxsU3RydWN0dXJlLlRXT19BUkdTOwoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQWRkaXRpb25hbEFyZ3VtZW50cyhTc2FDb2RlR2VuZXJhdG9yIGNvZGVnZW4sIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgSFR5cGVDb252ZXJzaW9uIG5vZGUsIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICBhc3NlcnQobm9kZS50eXBlRXhwcmVzc2lvbi5pc1R5cGVWYXJpYWJsZSk7CiAgICBjb2RlZ2VuLnVzZShub2RlLnR5cGVSZXByZXNlbnRhdGlvbik7CiAgICBhcmd1bWVudHMuYWRkKGNvZGVnZW4ucG9wKCkpOwogIH0KfQoKY2xhc3MgRnVuY3Rpb25UeXBlUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlciBleHRlbmRzIENoZWNrZWRNb2RlSGVscGVyIHsKICBjb25zdCBGdW5jdGlvblR5cGVSZXByZXNlbnRhdGlvbkNoZWNrZWRNb2RlSGVscGVyKFN0cmluZyBuYW1lKSA6IHN1cGVyKG5hbWUpOwoKICBAb3ZlcnJpZGUKICBDYWxsU3RydWN0dXJlIGdldCBjYWxsU3RydWN0dXJlID0+IENhbGxTdHJ1Y3R1cmUuVFdPX0FSR1M7CgogIEBvdmVycmlkZQogIHZvaWQgZ2VuZXJhdGVBZGRpdGlvbmFsQXJndW1lbnRzKFNzYUNvZGVHZW5lcmF0b3IgY29kZWdlbiwgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBIVHlwZUNvbnZlcnNpb24gbm9kZSwgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMpIHsKICAgIGFzc2VydChub2RlLnR5cGVFeHByZXNzaW9uLmlzRnVuY3Rpb25UeXBlKTsKICAgIGNvZGVnZW4udXNlKG5vZGUudHlwZVJlcHJlc2VudGF0aW9uKTsKICAgIGFyZ3VtZW50cy5hZGQoY29kZWdlbi5wb3AoKSk7CiAgfQp9CgpjbGFzcyBGdXR1cmVPclJlcHJlc2VudGF0aW9uQ2hlY2tlZE1vZGVIZWxwZXIgZXh0ZW5kcyBDaGVja2VkTW9kZUhlbHBlciB7CiAgY29uc3QgRnV0dXJlT3JSZXByZXNlbnRhdGlvbkNoZWNrZWRNb2RlSGVscGVyKFN0cmluZyBuYW1lKSA6IHN1cGVyKG5hbWUpOwoKICBAb3ZlcnJpZGUKICBDYWxsU3RydWN0dXJlIGdldCBjYWxsU3RydWN0dXJlID0+IENhbGxTdHJ1Y3R1cmUuVFdPX0FSR1M7CgogIEBvdmVycmlkZQogIHZvaWQgZ2VuZXJhdGVBZGRpdGlvbmFsQXJndW1lbnRzKFNzYUNvZGVHZW5lcmF0b3IgY29kZWdlbiwgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBIVHlwZUNvbnZlcnNpb24gbm9kZSwgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMpIHsKICAgIGFzc2VydChub2RlLnR5cGVFeHByZXNzaW9uLmlzRnV0dXJlT3IpOwogICAgY29kZWdlbi51c2Uobm9kZS50eXBlUmVwcmVzZW50YXRpb24pOwogICAgYXJndW1lbnRzLmFkZChjb2RlZ2VuLnBvcCgpKTsKICB9Cn0KCmNsYXNzIFN1YnR5cGVDaGVja2VkTW9kZUhlbHBlciBleHRlbmRzIENoZWNrZWRNb2RlSGVscGVyIHsKICBjb25zdCBTdWJ0eXBlQ2hlY2tlZE1vZGVIZWxwZXIoU3RyaW5nIG5hbWUpIDogc3VwZXIobmFtZSk7CgogIEBvdmVycmlkZQogIENhbGxTdHJ1Y3R1cmUgZ2V0IGNhbGxTdHJ1Y3R1cmUgPT4gY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQWRkaXRpb25hbEFyZ3VtZW50cyhTc2FDb2RlR2VuZXJhdG9yIGNvZGVnZW4sIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgSFR5cGVDb252ZXJzaW9uIG5vZGUsIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICAvLyBUT0RPKHNyYSk6IE1vdmUgdGhlc2UgY2FsbHMgaW50byB0aGUgU1NBIGdyYXBoIHNvIHRoYXQgdGhlIGFyZ3VtZW50cyBjYW4KICAgIC8vIGJlIG9wdGltaXplZCwgZSxnLCBHVk5lZC4KICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb247CiAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gdHlwZS5lbGVtZW50OwogICAganNBc3QuTmFtZSBpc0ZpZWxkID0gbmFtZXIub3BlcmF0b3JJcyhlbGVtZW50KTsKICAgIGFyZ3VtZW50cy5hZGQoanMucXVvdGVOYW1lKGlzRmllbGQpKTsKICAgIGNvZGVnZW4udXNlKG5vZGUudHlwZVJlcHJlc2VudGF0aW9uKTsKICAgIGFyZ3VtZW50cy5hZGQoY29kZWdlbi5wb3AoKSk7CiAgICBqc0FzdC5OYW1lIGFzRmllbGQgPSBuYW1lci5zdWJzdGl0dXRpb25OYW1lKGVsZW1lbnQpOwogICAgYXJndW1lbnRzLmFkZChqcy5xdW90ZU5hbWUoYXNGaWVsZCkpOwogIH0KfQoKY2xhc3MgQ2hlY2tlZE1vZGVIZWxwZXJzIHsKICBDaGVja2VkTW9kZUhlbHBlcnMoKTsKCiAgLy8vIEFsbCB0aGUgY2hlY2tlZCBtb2RlIGhlbHBlcnMuCiAgc3RhdGljIGNvbnN0IExpc3Q8Q2hlY2tlZE1vZGVIZWxwZXI+IGhlbHBlcnMgPSBjb25zdCA8Q2hlY2tlZE1vZGVIZWxwZXI+WwogICAgY29uc3QgQ2hlY2tlZE1vZGVIZWxwZXIoJ3N0cmluZ1R5cGVDYXN0JyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignc3RyaW5nVHlwZUNoZWNrJyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignZG91YmxlVHlwZUNhc3QnKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdkb3VibGVUeXBlQ2hlY2snKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdudW1UeXBlQ2FzdCcpLAogICAgY29uc3QgQ2hlY2tlZE1vZGVIZWxwZXIoJ251bVR5cGVDaGVjaycpLAogICAgY29uc3QgQ2hlY2tlZE1vZGVIZWxwZXIoJ2Jvb2xDb252ZXJzaW9uQ2hlY2snKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdib29sVHlwZUNhc3QnKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdib29sVHlwZUNoZWNrJyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignaW50VHlwZUNhc3QnKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdpbnRUeXBlQ2hlY2snKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ251bWJlck9yU3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbnVtYmVyT3JTdHJpbmdTdXBlck5hdGl2ZVR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbnVtYmVyT3JTdHJpbmdTdXBlclR5cGVDYXN0JyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdudW1iZXJPclN0cmluZ1N1cGVyVHlwZUNoZWNrJyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdzdHJpbmdTdXBlck5hdGl2ZVR5cGVDYXN0JyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdzdHJpbmdTdXBlck5hdGl2ZVR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignc3RyaW5nU3VwZXJUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignc3RyaW5nU3VwZXJUeXBlQ2hlY2snKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdsaXN0VHlwZUNhc3QnKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdsaXN0VHlwZUNoZWNrJyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdsaXN0U3VwZXJOYXRpdmVUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbGlzdFN1cGVyTmF0aXZlVHlwZUNoZWNrJyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdsaXN0U3VwZXJUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbGlzdFN1cGVyVHlwZUNoZWNrJyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdpbnRlcmNlcHRlZFR5cGVDYXN0JyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdpbnRlcmNlcHRlZFR5cGVDaGVjaycpLAogICAgY29uc3QgU3VidHlwZUNoZWNrZWRNb2RlSGVscGVyKCdzdWJ0eXBlQ2FzdCcpLAogICAgY29uc3QgU3VidHlwZUNoZWNrZWRNb2RlSGVscGVyKCdhc3NlcnRTdWJ0eXBlJyksCiAgICBjb25zdCBUeXBlVmFyaWFibGVDaGVja2VkTW9kZUhlbHBlcignc3VidHlwZU9mUnVudGltZVR5cGVDYXN0JyksCiAgICBjb25zdCBUeXBlVmFyaWFibGVDaGVja2VkTW9kZUhlbHBlcignYXNzZXJ0U3VidHlwZU9mUnVudGltZVR5cGUnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ3Byb3BlcnR5VHlwZUNhc3QnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ3Byb3BlcnR5VHlwZUNoZWNrJyksCiAgICBjb25zdCBGdW5jdGlvblR5cGVSZXByZXNlbnRhdGlvbkNoZWNrZWRNb2RlSGVscGVyKCdmdW5jdGlvblR5cGVDYXN0JyksCiAgICBjb25zdCBGdW5jdGlvblR5cGVSZXByZXNlbnRhdGlvbkNoZWNrZWRNb2RlSGVscGVyKCdmdW5jdGlvblR5cGVDaGVjaycpLAogICAgY29uc3QgRnV0dXJlT3JSZXByZXNlbnRhdGlvbkNoZWNrZWRNb2RlSGVscGVyKCdmdXR1cmVPckNhc3QnKSwKICAgIGNvbnN0IEZ1dHVyZU9yUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcignZnV0dXJlT3JDaGVjaycpLAogIF07CgogIC8vIENoZWNrZWQgbW9kZSBoZWxwZXJzIGluZGV4ZWQgYnkgbmFtZS4KICBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgQ2hlY2tlZE1vZGVIZWxwZXI+IGNoZWNrZWRNb2RlSGVscGVyQnlOYW1lID0KICAgICAgbmV3IE1hcDxTdHJpbmcsIENoZWNrZWRNb2RlSGVscGVyPi5mcm9tSXRlcmFibGUoaGVscGVycywKICAgICAgICAgIGtleTogKGhlbHBlcikgPT4gaGVscGVyLm5hbWUpOwoKICAvLy8gUmV0dXJucyB0aGUgY2hlY2tlZCBtb2RlIGhlbHBlciB0aGF0IHdpbGwgYmUgbmVlZGVkIHRvIGRvIGEgdHlwZQogIC8vLyBjaGVjay90eXBlIGNhc3Qgb24gW3R5cGVdIGF0IHJ1bnRpbWUuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBiZWluZwogIC8vLyBjYWxsZWQgYm90aCBieSB0aGUgcmVzb2x2ZXIgd2l0aCBpbnRlcmZhY2UgdHlwZXMgKGludCwgU3RyaW5nLCAuLi4pLCBhbmQKICAvLy8gYnkgdGhlIFNTQSBiYWNrZW5kIHdpdGggaW1wbGVtZW50YXRpb24gdHlwZXMgKEpTSW50LCBKU1N0cmluZywgLi4uKS4KICBDaGVja2VkTW9kZUhlbHBlciBnZXRDaGVja2VkTW9kZUhlbHBlcigKICAgICAgRGFydFR5cGUgdHlwZSwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIHtib29sIHR5cGVDYXN0fSkgewogICAgcmV0dXJuIGdldENoZWNrZWRNb2RlSGVscGVySW50ZXJuYWwodHlwZSwgY29tbW9uRWxlbWVudHMsCiAgICAgICAgdHlwZUNhc3Q6IHR5cGVDYXN0LCBuYXRpdmVDaGVja09ubHk6IGZhbHNlKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBuYXRpdmUgY2hlY2tlZCBtb2RlIGhlbHBlciB0aGF0IHdpbGwgYmUgbmVlZGVkIHRvIGRvIGEgdHlwZQogIC8vLyBjaGVjay90eXBlIGNhc3Qgb24gW3R5cGVdIGF0IHJ1bnRpbWUuIElmIG5vIG5hdGl2ZSBoZWxwZXIgZXhpc3RzIGZvcgogIC8vLyBbdHlwZV0sIFs6bnVsbDpdIGlzIHJldHVybmVkLgogIENoZWNrZWRNb2RlSGVscGVyIGdldE5hdGl2ZUNoZWNrZWRNb2RlSGVscGVyKAogICAgICBEYXJ0VHlwZSB0eXBlLCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAge2Jvb2wgdHlwZUNhc3R9KSB7CiAgICByZXR1cm4gZ2V0Q2hlY2tlZE1vZGVIZWxwZXJJbnRlcm5hbCh0eXBlLCBjb21tb25FbGVtZW50cywKICAgICAgICB0eXBlQ2FzdDogdHlwZUNhc3QsIG5hdGl2ZUNoZWNrT25seTogdHJ1ZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgY2hlY2tlZCBtb2RlIGhlbHBlciBmb3IgdGhlIHR5cGUgY2hlY2svdHlwZSBjYXN0IGZvcgogIC8vLyBbdHlwZV0uIElmIFtuYXRpdmVDaGVja09ubHldIGlzIFs6dHJ1ZTpdLCBvbmx5IG5hbWVzIGZvciBuYXRpdmUgaGVscGVycwogIC8vLyBhcmUgcmV0dXJuZWQuCiAgQ2hlY2tlZE1vZGVIZWxwZXIgZ2V0Q2hlY2tlZE1vZGVIZWxwZXJJbnRlcm5hbCgKICAgICAgRGFydFR5cGUgdHlwZSwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIHtib29sIHR5cGVDYXN0LCBib29sIG5hdGl2ZUNoZWNrT25seX0pIHsKICAgIFN0cmluZyBuYW1lID0gZ2V0Q2hlY2tlZE1vZGVIZWxwZXJOYW1lSW50ZXJuYWwodHlwZSwgY29tbW9uRWxlbWVudHMsCiAgICAgICAgdHlwZUNhc3Q6IHR5cGVDYXN0LCBuYXRpdmVDaGVja09ubHk6IG5hdGl2ZUNoZWNrT25seSk7CiAgICBpZiAobmFtZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIENoZWNrZWRNb2RlSGVscGVyIGhlbHBlciA9IGNoZWNrZWRNb2RlSGVscGVyQnlOYW1lW25hbWVdOwogICAgYXNzZXJ0KGhlbHBlciAhPSBudWxsKTsKICAgIHJldHVybiBoZWxwZXI7CiAgfQoKICBTdHJpbmcgZ2V0Q2hlY2tlZE1vZGVIZWxwZXJOYW1lSW50ZXJuYWwoCiAgICAgIERhcnRUeXBlIHR5cGUsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICB7Ym9vbCB0eXBlQ2FzdCwgYm9vbCBuYXRpdmVDaGVja09ubHl9KSB7CiAgICBhc3NlcnQoIXR5cGUuaXNUeXBlZGVmKTsKCiAgICBpZiAodHlwZS5pc1R5cGVWYXJpYWJsZSkgewogICAgICByZXR1cm4gdHlwZUNhc3QKICAgICAgICAgID8gJ3N1YnR5cGVPZlJ1bnRpbWVUeXBlQ2FzdCcKICAgICAgICAgIDogJ2Fzc2VydFN1YnR5cGVPZlJ1bnRpbWVUeXBlJzsKICAgIH0KCiAgICBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSkgewogICAgICByZXR1cm4gdHlwZUNhc3QgPyAnZnVuY3Rpb25UeXBlQ2FzdCcgOiAnZnVuY3Rpb25UeXBlQ2hlY2snOwogICAgfQoKICAgIGlmICh0eXBlLmlzRnV0dXJlT3IpIHsKICAgICAgcmV0dXJuIHR5cGVDYXN0ID8gJ2Z1dHVyZU9yQ2FzdCcgOiAnZnV0dXJlT3JDaGVjayc7CiAgICB9CgogICAgYXNzZXJ0KHR5cGUuaXNJbnRlcmZhY2VUeXBlLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgdHlwZTogJHR5cGUiKSk7CiAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IGludGVyZmFjZVR5cGUuZWxlbWVudDsKICAgIGJvb2wgbmF0aXZlQ2hlY2sgPSB0cnVlOwogICAgLy8gVE9ETygxMzk1NSksIFRPRE8oOTczMSkuICBUaGUgdGVzdCBmb3Igbm9uLXByaW1pdGl2ZSB0eXBlcyBzaG91bGQgdXNlIGFuCiAgICAvLyBpbnRlcmNlcHRvci4gIFRoZSBpbnRlcmNlcHRvciBzaG91bGQgYmUgYW4gYXJndW1lbnQgdG8gSFR5cGVDb252ZXJzaW9uIHNvCiAgICAvLyB0aGF0IGl0IGNhbiBiZSBvcHRpbWl6ZWQgYnkgc3RhbmRhcmQgaW50ZXJjZXB0b3Igb3B0aW1pemF0aW9ucy4KICAgIC8vICBuYXRpdmVDaGVja09ubHkgfHwgZW1pdHRlci5uYXRpdmVFbWl0dGVyLnJlcXVpcmVzTmF0aXZlSXNDaGVjayhlbGVtZW50KTsKCiAgICB2YXIgc3VmZml4ID0gdHlwZUNhc3QgPyAnVHlwZUNhc3QnIDogJ1R5cGVDaGVjayc7CiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcykgewogICAgICBpZiAobmF0aXZlQ2hlY2tPbmx5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICdzdHJpbmckc3VmZml4JzsKICAgIH0KCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5kb3VibGVDbGFzcykgewogICAgICBpZiAobmF0aXZlQ2hlY2tPbmx5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICdkb3VibGUkc3VmZml4JzsKICAgIH0KCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5udW1DbGFzcykgewogICAgICBpZiAobmF0aXZlQ2hlY2tPbmx5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICdudW0kc3VmZml4JzsKICAgIH0KCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuYm9vbENsYXNzKSB7CiAgICAgIGlmIChuYXRpdmVDaGVja09ubHkpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gJ2Jvb2wkc3VmZml4JzsKICAgIH0KCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc0ludENsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5pbnRDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzKSB7CiAgICAgIGlmIChuYXRpdmVDaGVja09ubHkpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gJ2ludCRzdWZmaXgnOwogICAgfQoKICAgIGlmIChjb21tb25FbGVtZW50cy5pc051bWJlck9yU3RyaW5nU3VwZXJ0eXBlKGVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBuYXRpdmVDaGVjawogICAgICAgICAgPyAnbnVtYmVyT3JTdHJpbmdTdXBlck5hdGl2ZSRzdWZmaXgnCiAgICAgICAgICA6ICdudW1iZXJPclN0cmluZ1N1cGVyJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGNvbW1vbkVsZW1lbnRzLmlzU3RyaW5nT25seVN1cGVydHlwZShlbGVtZW50KSkgewogICAgICByZXR1cm4gbmF0aXZlQ2hlY2sgPyAnc3RyaW5nU3VwZXJOYXRpdmUkc3VmZml4JyA6ICdzdHJpbmdTdXBlciRzdWZmaXgnOwogICAgfQoKICAgIGlmICgoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5saXN0Q2xhc3MgfHwKICAgICAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpICYmCiAgICAgICAgdHlwZS50cmVhdEFzUmF3KSB7CiAgICAgIGlmIChuYXRpdmVDaGVja09ubHkpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gJ2xpc3Qkc3VmZml4JzsKICAgIH0KCiAgICBpZiAoY29tbW9uRWxlbWVudHMuaXNMaXN0U3VwZXJ0eXBlKGVsZW1lbnQpICYmIHR5cGUudHJlYXRBc1JhdykgewogICAgICByZXR1cm4gbmF0aXZlQ2hlY2sgPyAnbGlzdFN1cGVyTmF0aXZlJHN1ZmZpeCcgOiAnbGlzdFN1cGVyJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlICYmICF0eXBlLnRyZWF0QXNSYXcpIHsKICAgICAgcmV0dXJuIHR5cGVDYXN0ID8gJ3N1YnR5cGVDYXN0JyA6ICdhc3NlcnRTdWJ0eXBlJzsKICAgIH0KCiAgICBpZiAobmF0aXZlQ2hlY2spIHsKICAgICAgLy8gVE9ETyhrYXJsa2xvc2UpOiBjYW4gd2UgZ2V0IHJpZCBvZiB0aGlzIGJyYW5jaCB3aGVuIHdlIHVzZQogICAgICAvLyBpbnRlcmNlcHRvcnM/CiAgICAgIHJldHVybiAnaW50ZXJjZXB0ZWQkc3VmZml4JzsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAncHJvcGVydHkkc3VmZml4JzsKICAgIH0KICB9Cn0KgS0ATk48ARkiJCEhIDQxPS4nARoVAS0BOk48J0EEATwBUUAnBAIBPD4BDD0BDFFAKUA1BAIBQEIBDD0BDFFAMCoiBAIBTlABDD0BDFFAMCoiBAIBSkwBDD0BDFFALCoiBAIBOz0BDEUBDFFAUCEuKDQqKiI6KgQCARsYASRMLzAvMCwtNC0uLC1KS0RFQkM8PS0uQEE6Ozw9MzVFRzk6S0xDRAUBK0g/KQFHS09LKjQZPjUEAU5LJDA0GT40BAFHThQyNC9JPyM+HBMEASs0Lx0BHxYnKgYBH0IGARs6BgEhRCgxHVBRR1EBNjMxKB4GATMxKB4GATMuKBsGATEvKBwGATAuMzM4KBsGAT0ZLyoGATlOBgEwNxsoHAYBRkoGATQ5BgEXRBcjDSAGBAIBOXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY2hlY2tlZF9tb2RlX2hlbHBlcnMuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydMAA074vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19iYWNrZW5kLnJ1bnRpbWVfdHlwZXM7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVyczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcKICAgIHNob3cKICAgICAgICBDb21tb25FbGVtZW50cywKICAgICAgICBFbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgSkNvbW1vbkVsZW1lbnRzLAogICAgICAgIEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9qc19lbWl0dGVyL2pzX2VtaXR0ZXIuZGFydCcgc2hvdyBNb2R1bGFyRW1pdHRlcjsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ25hbWVyLmRhcnQnOwppbXBvcnQgJ25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCc7Cgp0eXBlZGVmIGpzQXN0LkV4cHJlc3Npb24gT25WYXJpYWJsZUNhbGxiYWNrKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpOwp0eXBlZGVmIGJvb2wgU2hvdWxkRW5jb2RlVHlwZWRlZkNhbGxiYWNrKFR5cGVkZWZUeXBlIHZhcmlhYmxlKTsKCi8vLyBJbnRlcmZhY2UgZm9yIHRoZSBuZWVkZWQgcnVudGltZSB0eXBlIGNoZWNrcy4KYWJzdHJhY3QgY2xhc3MgUnVudGltZVR5cGVzQ2hlY2tzIHsKICAvLy8gUmV0dXJucyB0aGUgcmVxdWlyZWQgcnVudGltZSB0eXBlIGNoZWNrcy4KICBUeXBlQ2hlY2tzIGdldCByZXF1aXJlZENoZWNrczsKCiAgLy8vIFJldHVybiBhbGwgY2xhc3NlcyBuZWVkZWQgZm9yIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbi4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IHJlcXVpcmVkQ2xhc3NlczsKfQoKY2xhc3MgVHJpdmlhbFR5cGVzQ2hlY2tzIGltcGxlbWVudHMgUnVudGltZVR5cGVzQ2hlY2tzIHsKICBmaW5hbCBUeXBlQ2hlY2tzIF90eXBlQ2hlY2tzOwogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX2FsbENsYXNzZXM7CgogIFRyaXZpYWxUeXBlc0NoZWNrcyh0aGlzLl90eXBlQ2hlY2tzKQogICAgICA6IF9hbGxDbGFzc2VzID0gX3R5cGVDaGVja3MuY2xhc3Nlcy50b1NldCgpOwoKICBAb3ZlcnJpZGUKICBUeXBlQ2hlY2tzIGdldCByZXF1aXJlZENoZWNrcyA9PiBfdHlwZUNoZWNrczsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCByZXF1aXJlZENsYXNzZXMgPT4gX2FsbENsYXNzZXM7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGNvbXB1dGluZyB0aGUgbmVlZGVkIHJ1bnRpbWUgdHlwZSBjaGVja3MuCmFic3RyYWN0IGNsYXNzIFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIgewogIHZvaWQgcmVnaXN0ZXJUeXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2soCiAgICAgIERhcnRUeXBlIHR5cGVBcmd1bWVudCwgRGFydFR5cGUgYm91bmQpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgYSBnZW5lcmljIFtpbnN0YW50aWF0aW9uXSBpcyB1c2VkLgogIHZvaWQgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbihHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbUnVudGltZVR5cGVzQ2hlY2tzXSBmb3IgdGhlIGRhdGEgaW4gdGhpcyBidWlsZGVyLgogIFJ1bnRpbWVUeXBlc0NoZWNrcyBjb21wdXRlUmVxdWlyZWRDaGVja3MoCiAgICAgIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKTsKCiAgYm9vbCBnZXQgcnRpQ2hlY2tzQnVpbGRlckNsb3NlZDsKfQoKY2xhc3MgVHJpdmlhbFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIgaW1wbGVtZW50cyBSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIFRyaXZpYWxSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zIF9zdWJzdGl0dXRpb25zOwogIEBvdmVycmlkZQogIGJvb2wgcnRpQ2hlY2tzQnVpbGRlckNsb3NlZCA9IGZhbHNlOwoKICBUcml2aWFsUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlcih0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5fc3Vic3RpdHV0aW9ucyk7CgogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PiBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrKAogICAgICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQsIERhcnRUeXBlIGJvdW5kKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbikge30KCiAgQG92ZXJyaWRlCiAgUnVudGltZVR5cGVzQ2hlY2tzIGNvbXB1dGVSZXF1aXJlZENoZWNrcygKICAgICAgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpIHsKICAgIHJ0aUNoZWNrc0J1aWxkZXJDbG9zZWQgPSB0cnVlOwoKICAgIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NVc2U+IGNsYXNzVXNlTWFwID0gPENsYXNzRW50aXR5LCBDbGFzc1VzZT57fTsKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeQogICAgICAgIC5nZXRDbGFzc1NldChfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpCiAgICAgICAgLnN1YnR5cGVzKCkpIHsKICAgICAgQ2xhc3NVc2UgY2xhc3NVc2UgPSBuZXcgQ2xhc3NVc2UoKQogICAgICAgIC4uZGlyZWN0SW5zdGFuY2UgPSB0cnVlCiAgICAgICAgLi5jaGVja2VkSW5zdGFuY2UgPSB0cnVlCiAgICAgICAgLi50eXBlQXJndW1lbnQgPSB0cnVlCiAgICAgICAgLi5jaGVja2VkVHlwZUFyZ3VtZW50ID0gdHJ1ZQogICAgICAgIC4udHlwZUxpdGVyYWwgPSB0cnVlCiAgICAgICAgLi5mdW5jdGlvblR5cGUgPSBfY29tcHV0ZUZ1bmN0aW9uVHlwZShfZWxlbWVudEVudmlyb25tZW50LCBjbHMpOwogICAgICBjbGFzc1VzZU1hcFtjbHNdID0gY2xhc3NVc2U7CiAgICB9CiAgICBUeXBlQ2hlY2tzIHR5cGVDaGVja3MgPSBfc3Vic3RpdHV0aW9ucy5fcmVxdWlyZWRDaGVja3MgPQogICAgICAgIF9zdWJzdGl0dXRpb25zLl9jb21wdXRlQ2hlY2tzKGNsYXNzVXNlTWFwKTsKICAgIHJldHVybiBuZXcgVHJpdmlhbFR5cGVzQ2hlY2tzKHR5cGVDaGVja3MpOwogIH0KCiAgU2V0PENsYXNzRW50aXR5PiBjb21wdXRlQ2hlY2tlZENsYXNzZXMoCiAgICAgIENvZGVnZW5Xb3JsZEJ1aWxkZXIgY29kZWdlbldvcmxkQnVpbGRlciwgU2V0PERhcnRUeXBlPiBpbXBsaWNpdElzQ2hlY2tzKSB7CiAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgLmdldENsYXNzU2V0KF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykKICAgICAgICAuc3VidHlwZXMoKQogICAgICAgIC50b1NldCgpOwogIH0KCiAgU2V0PEZ1bmN0aW9uVHlwZT4gY29tcHV0ZUNoZWNrZWRGdW5jdGlvbnMoCiAgICAgIENvZGVnZW5Xb3JsZEJ1aWxkZXIgY29kZWdlbldvcmxkQnVpbGRlciwgU2V0PERhcnRUeXBlPiBpbXBsaWNpdElzQ2hlY2tzKSB7CiAgICByZXR1cm4gbmV3IFNldDxGdW5jdGlvblR5cGU+KCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zTWl4aW4KICAgIGltcGxlbWVudHMgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyB7CiAgSkNsb3NlZFdvcmxkIGdldCBfY2xvc2VkV29ybGQ7CiAgVHlwZUNoZWNrcyBnZXQgX3JlcXVpcmVkQ2hlY2tzOwoKICBKRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+CiAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgRGFydFR5cGVzIGdldCBfdHlwZXMgPT4gX2Nsb3NlZFdvcmxkLmRhcnRUeXBlczsKICBSdW50aW1lVHlwZXNOZWVkIGdldCBfcnRpTmVlZCA9PiBfY2xvc2VkV29ybGQucnRpTmVlZDsKCiAgLy8vIENvbXB1dGUgdGhlIHJlcXVpcmVkIHR5cGUgY2hlY2tzIGFuZCBzdWJzdGl0dXRpb25zIGZvciB0aGUgZ2l2ZW4KICAvLy8gaW5zdGFudGlhdGVkIGFuZCBjaGVja2VkIGNsYXNzZXMuCiAgVHlwZUNoZWNrcyBfY29tcHV0ZUNoZWNrcyhNYXA8Q2xhc3NFbnRpdHksIENsYXNzVXNlPiBjbGFzc1VzZU1hcCkgewogICAgLy8gUnVuIHRocm91Z2ggdGhlIGNvbWJpbmF0aW9uIG9mIGluc3RhbnRpYXRlZCBhbmQgY2hlY2tlZAogICAgLy8gYXJndW1lbnRzIGFuZCByZWNvcmQgYWxsIGNvbWJpbmF0aW9uIHdoZXJlIHRoZSBlbGVtZW50IG9mIGEgY2hlY2tlZAogICAgLy8gYXJndW1lbnQgaXMgYSBzdXBlcmNsYXNzIG9mIHRoZSBlbGVtZW50IG9mIGFuIGluc3RhbnRpYXRlZCB0eXBlLgogICAgVHlwZUNoZWNrTWFwcGluZyByZXN1bHQgPSBuZXcgVHlwZUNoZWNrTWFwcGluZygpOwogICAgU2V0PENsYXNzRW50aXR5PiBoYW5kbGVkID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgICAvLyBFbXB0eSB1c2FnZSBvYmplY3QgZm9yIGNsYXNzZXMgd2l0aCBubyBkaXJlY3QgcnRpIHVzYWdlLgogICAgZmluYWwgQ2xhc3NVc2UgZW1wdHlVc2UgPSBuZXcgQ2xhc3NVc2UoKTsKCiAgICAvLy8gQ29tcHV0ZSB0aGUgJGlzWCBhbmQgJGFzWCBmdW5jdGlvbnMgbmVlZCBmb3IgW2Nsc10uCiAgICBDbGFzc0NoZWNrcyBjb21wdXRlQ2hlY2tzKENsYXNzRW50aXR5IGNscykgewogICAgICBpZiAoIWhhbmRsZWQuYWRkKGNscykpIHJldHVybiByZXN1bHRbY2xzXTsKCiAgICAgIENsYXNzVXNlIGNsYXNzVXNlID0gY2xhc3NVc2VNYXBbY2xzXSA/PyBlbXB0eVVzZTsKICAgICAgQ2xhc3NDaGVja3MgY2hlY2tzID0gbmV3IENsYXNzQ2hlY2tzKGNsYXNzVXNlLmZ1bmN0aW9uVHlwZSk7CiAgICAgIHJlc3VsdFtjbHNdID0gY2hlY2tzOwoKICAgICAgLy8gRmluZCB0aGUgc3VwZXJjbGFzcyBmcm9tIHdoaWNoIFtjbHNdIGluaGVyaXRzIGNoZWNrcy4KICAgICAgQ2xhc3NFbnRpdHkgc3VwZXJDbGFzcyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMsCiAgICAgICAgICBza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zOiB0cnVlKTsKICAgICAgQ2xhc3NDaGVja3Mgc3VwZXJDaGVja3M7CiAgICAgIGJvb2wgZXh0ZW5kc1N1cGVyQ2xhc3NUcml2aWFsbHkgPSBmYWxzZTsKICAgICAgaWYgKHN1cGVyQ2xhc3MgIT0gbnVsbCkgewogICAgICAgIC8vIENvbXB1dGUgdGhlIGNoZWNrcyBpbmhlcml0ZWQgZnJvbSBbc3VwZXJDbGFzc10uCiAgICAgICAgc3VwZXJDaGVja3MgPSBjb21wdXRlQ2hlY2tzKHN1cGVyQ2xhc3MpOwoKICAgICAgICAvLyBEb2VzIFtjbHNdIGV4dGVuZCBbc3VwZXJDbGFzc10gdHJpdmlhbGx5PwogICAgICAgIC8vCiAgICAgICAgLy8gRm9yIGluc3RhbmNlOgogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGNsYXNzIEE8VD4ge30KICAgICAgICAvLyAgICAgY2xhc3MgQjxTPiBleHRlbmRzIEE8Uz4ge30KICAgICAgICAvLyAgICAgY2xhc3MgQzxVLCBWPiBleHRlbmRzIEE8VT4ge30KICAgICAgICAvLyAgICAgY2xhc3MgRCBleHRlbmRzIEE8aW50PiB7fQogICAgICAgIC8vCiAgICAgICAgLy8gaGVyZSBgQmAgZXh0ZW5kcyBgQWAgdHJpdmlhbGx5LCBidXQgYENgIGFuZCBgRGAgZG9uJ3QuCiAgICAgICAgZXh0ZW5kc1N1cGVyQ2xhc3NUcml2aWFsbHkgPSBpc1RyaXZpYWxTdWJzdGl0dXRpb24oY2xzLCBzdXBlckNsYXNzKTsKICAgICAgfQoKICAgICAgYm9vbCBpc05hdGl2ZUNsYXNzID0gX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhjbHMpOwogICAgICBpZiAoY2xhc3NVc2UudHlwZUFyZ3VtZW50IHx8CiAgICAgICAgICBjbGFzc1VzZS50eXBlTGl0ZXJhbCB8fAogICAgICAgICAgKGlzTmF0aXZlQ2xhc3MgJiYgY2xhc3NVc2UuY2hlY2tlZEluc3RhbmNlKSkgewogICAgICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBjb21wdXRlU3Vic3RpdHV0aW9uKGNscywgY2xzKTsKICAgICAgICAvLyBXZSBuZWVkIFtjbHNdIGF0IHJ1bnRpbWUgLSBldmVuIGlmIFtjbHNdIGlzIG5vdCBpbnN0YW50aWF0ZWQuIEVpdGhlcgogICAgICAgIC8vIGFzIGEgdHlwZSBhcmd1bWVudCwgZm9yIGEgdHlwZSBsaXRlcmFsIG9yIGZvciBhbiBpcy10ZXN0IGlmIFtjbHNdIGlzCiAgICAgICAgLy8gbmF0aXZlLgogICAgICAgIGNoZWNrcy5hZGQobmV3IFR5cGVDaGVjayhjbHMsIHN1YnN0aXR1dGlvbiwgbmVlZHNJczogaXNOYXRpdmVDbGFzcykpOwogICAgICB9CgogICAgICAvLyBDb21wdXRlIHRoZSBzZXQgb2YgY2xhc3NlcyB0aGF0IFtjbHNdIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20uCiAgICAgIC8vCiAgICAgIC8vIFRoaXMgc2V0IHJlZmxlY3RzIHRoZSBlbWl0dGVkIGNsYXNzIGhpZXJhcmNoeSBhbmQgdGhlcmVmb3JlIHVzZXMKICAgICAgLy8gYGdldEVmZmVjdGl2ZU1peGluQ2xhc3NgIHRvIGZpbmQgdGhlIGluaGVyaXRlZCBtaXhpbnMuCiAgICAgIFNldDxDbGFzc0VudGl0eT4gaW5oZXJpdGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICAgIENsYXNzRW50aXR5IG90aGVyID0gY2xzOwogICAgICB3aGlsZSAob3RoZXIgIT0gbnVsbCkgewogICAgICAgIGluaGVyaXRlZENsYXNzZXMuYWRkKG90aGVyKTsKICAgICAgICBpZiAoY2xhc3NVc2UuaW5zdGFuY2UgJiYKICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5pc01peGluQXBwbGljYXRpb24ob3RoZXIpKSB7CiAgICAgICAgICAvLyBXZSBkb24ndCBtaXhpbiBbb3RoZXJdIGlmIFtjbHNdIGlzbid0IGluc3RhbnRpYXRlZCwgZGlyZWN0bHkgb3IKICAgICAgICAgIC8vIGluZGlyZWN0bHkuCiAgICAgICAgICBpbmhlcml0ZWRDbGFzc2VzCiAgICAgICAgICAgICAgLmFkZChfZWxlbWVudEVudmlyb25tZW50LmdldEVmZmVjdGl2ZU1peGluQ2xhc3Mob3RoZXIpKTsKICAgICAgICB9CiAgICAgICAgb3RoZXIgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3Mob3RoZXIpOwogICAgICB9CgogICAgICAvLy8gQ29tcHV0ZSB0aGUgbmVlZGVkIGNoZWNrIGZvciBbY2xzXSBhZ2FpbnN0IHRoZSBjbGFzcyBvZiB0aGUgc3VwZXIKICAgICAgLy8vIFt0eXBlXS4KICAgICAgdm9pZCBwcm9jZXNzU3VwZXJ0eXBlKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgICAgIENsYXNzRW50aXR5IGNoZWNrZWRDbGFzcyA9IHR5cGUuZWxlbWVudDsKICAgICAgICBDbGFzc1VzZSBjaGVja2VkQ2xhc3NVc2UgPSBjbGFzc1VzZU1hcFtjaGVja2VkQ2xhc3NdID8/IGVtcHR5VXNlOwoKICAgICAgICAvLyBXaGVyZSBbY2xzXSBpbmhlcml0cyBwcm9wZXJ0aWVzIGZvciBbY2hlY2tlZENsYXNzXS4KICAgICAgICBib29sIGluaGVyaXRzRnJvbUNoZWNrZWRDbGFzcyA9IGluaGVyaXRlZENsYXNzZXMuY29udGFpbnMoY2hlY2tlZENsYXNzKTsKCiAgICAgICAgLy8gSWYgW2Nsc10gaW5oZXJpdHMgcHJvcGVydGllcyBmcm9tIFtjaGVja2VkQ2xhc3NdIGFuZCBbY2hlY2tlZENsYXNzXQogICAgICAgIC8vIG5lZWRzIHR5cGUgYXJndW1lbnRzLCBbY2xzXSBtdXN0IHByb3ZpZGUgYSBzdWJzdGl0dXRpb24gZm9yCiAgICAgICAgLy8gW2NoZWNrZWRDbGFzc10uCiAgICAgICAgLy8KICAgICAgICAvLyBGb3IgaW5zdGFuY2U6CiAgICAgICAgLy8KICAgICAgICAvLyAgICAgY2xhc3MgTTxUPiB7CiAgICAgICAgLy8gICAgICAgIG0oKSA9PiBUOwogICAgICAgIC8vICAgICB9CiAgICAgICAgLy8gICAgIGNsYXNzIFMge30KICAgICAgICAvLyAgICAgY2xhc3MgQyBleHRlbmRzIFMgd2l0aCBNPGludD4ge30KICAgICAgICAvLwogICAgICAgIC8vIEhlcmUgYENgIG5lZWRzIGFuIGAkYXNNYCBzdWJzdGl0dXRpb24gZnVuY3Rpb24gdG8gcHJvdmlkZSB0aGUgdmFsdWUKICAgICAgICAvLyBvZiBgVGAgaW4gYE0ubWAuCiAgICAgICAgYm9vbCBuZWVkc1R5cGVBcmd1bWVudHNGb3JDaGVja2VkQ2xhc3MgPSBpbmhlcml0c0Zyb21DaGVja2VkQ2xhc3MgJiYKICAgICAgICAgICAgX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY2hlY2tlZENsYXNzKTsKCiAgICAgICAgLy8gV2hldGhlciBbY2hlY2tlZENsYXNzXSBpcyB1c2VkIGluIGFuIGluc3RhbmNlIHRlc3Qgb3IgdHlwZSBhcmd1bWVudAogICAgICAgIC8vIHRlc3QuCiAgICAgICAgLy8KICAgICAgICAvLyBGb3IgaW5zdGFuY2U6CiAgICAgICAgLy8KICAgICAgICAvLyAgICBjbGFzcyBBIHt9CiAgICAgICAgLy8gICAgY2xhc3MgQiB7fQogICAgICAgIC8vICAgIHRlc3QobykgPT4gbyBpcyBBIHx8IG8gaXMgTGlzdDxCPjsKICAgICAgICAvLwogICAgICAgIC8vIEhlcmUgYEFgIGlzIHVzZWQgaW4gYW4gaW5zdGFuY2UgdGVzdCBhbmQgYEJgIGlzIHVzZWQgaW4gYSB0eXBlCiAgICAgICAgLy8gYXJndW1lbnQgdGVzdC4KICAgICAgICBib29sIGlzQ2hlY2tlZCA9IGNoZWNrZWRDbGFzc1VzZS5jaGVja2VkVHlwZUFyZ3VtZW50IHx8CiAgICAgICAgICAgIGNoZWNrZWRDbGFzc1VzZS5jaGVja2VkSW5zdGFuY2U7CgogICAgICAgIGlmIChpc0NoZWNrZWQgfHwgbmVlZHNUeXBlQXJndW1lbnRzRm9yQ2hlY2tlZENsYXNzKSB7CiAgICAgICAgICAvLyBXZSBuZWVkIGFuICRpc1ggYW5kL29yICRhc1ggcHJvcGVydHkgb24gW2Nsc10gZm9yIFtjaGVja2VkQ2xhc3NdLgoKICAgICAgICAgIC8vIFdoZXRoZXIgYGNsc2AgaW1wbGVtZW50cyBgY2hlY2tlZENsYXNzYCB0cml2aWFsbHkuCiAgICAgICAgICAvLwogICAgICAgICAgLy8gRm9yIGluc3RhbmNlOgogICAgICAgICAgLy8KICAgICAgICAgIC8vICAgICBjbGFzcyBBPFQ+IHt9CiAgICAgICAgICAvLyAgICAgY2xhc3MgQjxTPiBpbXBsZW1lbnRzIEE8Uz4ge30KICAgICAgICAgIC8vICAgICBjbGFzcyBDPFUsIFY+IGltcGxlbWVudHMgQTxVPiB7fQogICAgICAgICAgLy8gICAgIGNsYXNzIEQgaW1wbGVtZW50cyBBPGludD4ge30KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBoZXJlIGBCYCBpbXBsZW1lbnRzIGBBYCB0cml2aWFsbHksIGJ1dCBgQ2AgYW5kIGBEYCBkb24ndC4KICAgICAgICAgIGJvb2wgaW1wbGVtZW50c0NoZWNrZWRUcml2aWFsbHkgPQogICAgICAgICAgICAgIGlzVHJpdmlhbFN1YnN0aXR1dGlvbihjbHMsIGNoZWNrZWRDbGFzcyk7CgogICAgICAgICAgLy8gV2hldGhlciBbY2hlY2tlZENsYXNzXSBpcyBnZW5lcmljLgogICAgICAgICAgLy8KICAgICAgICAgIC8vIEN1cnJlbnRseSBbaXNUcml2aWFsU3Vic3RpdHV0aW9uXSByZXBvcnRzIHRoYXQgW2Nsc10gaW1wbGVtZW50cwogICAgICAgICAgLy8gW2NoZWNrZWRDbGFzc10gdHJpdmlhbGx5IGlmIFtjaGVja2VkQ2xhc3NdIGlzIG5vdCBnZW5lcmljLiBJbiB0aGlzCiAgICAgICAgICAvLyBjYXNlIHRoZSBzdWJzdGl0dXRpb24gaXMgbm90IG9ubHkgdHJpdmlhbCBpdCBpcyBhbHNvIG5vdCBuZWVkZWQuCiAgICAgICAgICBib29sIGlzQ2hlY2tlZEdlbmVyaWMgPQogICAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuaXNHZW5lcmljQ2xhc3MoY2hlY2tlZENsYXNzKTsKCiAgICAgICAgICAvLyBUaGUgY2hlY2tzIGZvciBbY2hlY2tlZENsYXNzXSBpbmhlcml0ZWQgZm9yIFtzdXBlckNsYXNzXS4KICAgICAgICAgIFR5cGVDaGVjayBjaGVja0Zyb21TdXBlckNsYXNzID0KICAgICAgICAgICAgICBzdXBlckNoZWNrcyAhPSBudWxsID8gc3VwZXJDaGVja3NbY2hlY2tlZENsYXNzXSA6IG51bGw7CgogICAgICAgICAgLy8gV2hldGhlciBbY2xzXSBuZWVkIGFuIGV4cGxpY2l0ICRpc1ggcHJvcGVydHkgZm9yIFtjaGVja2VkQ2xhc3NdLgogICAgICAgICAgLy8KICAgICAgICAgIC8vIElmIFtjbHNdIGluaGVyaXRzIGZyb20gW2NoZWNrZWRDbGFzc10gaXQgYWxzbyBpbmhlcml0cyB0aGUgJGlzWAogICAgICAgICAgLy8gcHJvcGVydHkgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgb24gW2NoZWNrZWRDbGFzc10uCiAgICAgICAgICBib29sIG5lZWRzSXMgPSAhaW5oZXJpdHNGcm9tQ2hlY2tlZENsYXNzICYmIGlzQ2hlY2tlZDsKCiAgICAgICAgICBpZiAoY2hlY2tGcm9tU3VwZXJDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIFRoZSBzdXBlcmNsYXNzIGhhcyBhIHN1YnN0aXR1dGlvbiBmdW5jdGlvbiBmb3IgW2NoZWNrZWRDbGFzc10uCiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiByZXVzZSB0aGlzIGl0IG9mIG5lZWQgdG8gb3ZlcnJpZGUgaXQuCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vIFRoZSBpbmhlcml0ZWQgJGlzWCBwcm9wZXJ0eSBkb2VzIF9ub3RfIG5lZWQgdG8gYmUgb3ZlcnJpZGluZy4KICAgICAgICAgICAgaWYgKGV4dGVuZHNTdXBlckNsYXNzVHJpdmlhbGx5KSB7CiAgICAgICAgICAgICAgLy8gW2Nsc10gaW1wbGVtZW50cyBbY2hlY2tlZENsYXNzXSB0aGUgc2FtZSB3YXkgYXMgW3N1cGVyQ2xhc3NdCiAgICAgICAgICAgICAgLy8gc28gdGhlIGluaGVyaXRlZCBzdWJzdGl0dXRpb24gZnVuY3Rpb24gYWxyZWFkeSB3b3Jrcy4KICAgICAgICAgICAgICBjaGVja3MuYWRkKG5ldyBUeXBlQ2hlY2soY2hlY2tlZENsYXNzLCBudWxsLCBuZWVkc0lzOiBmYWxzZSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIFtjbHNdIGltcGxlbWVudHMgW2NoZWNrZWRDbGFzc10gZGlmZmVyZW50bHkgZnJvbSBbc3VwZXJDbGFzc10KICAgICAgICAgICAgICAvLyBzbyB0aGUgaW5oZXJpdGVkIHN1YnN0aXR1dGlvbiBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXBsYWNlZC4KICAgICAgICAgICAgICBpZiAoaW1wbGVtZW50c0NoZWNrZWRUcml2aWFsbHkpIHsKICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgYW4gZXhwbGljaXQgdHJpdmlhbCBzdWJzdGl0dXRpb24gZnVuY3Rpb24gZm9yCiAgICAgICAgICAgICAgICAvLyBbY2hlY2tlZENsYXNzXSB0aGF0IG92ZXJyaWRlcyB0aGUgaW5oZXJpdGVkIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgY2hlY2tzLmFkZChuZXcgVHlwZUNoZWNrKGNoZWNrZWRDbGFzcywKICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWRHZW5lcmljID8gY29uc3QgU3Vic3RpdHV0aW9uLnRyaXZpYWwoKSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgbmVlZHNJczogZmFsc2UpKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBhIG5vbi10cml2aWFsIHN1YnN0aXR1dGlvbiBmdW5jdGlvbiBmb3IKICAgICAgICAgICAgICAgIC8vIFtjaGVja2VkQ2xhc3NdLgogICAgICAgICAgICAgICAgY2hlY2tzLmFkZChuZXcgVHlwZUNoZWNrKAogICAgICAgICAgICAgICAgICAgIGNoZWNrZWRDbGFzcywgY29tcHV0ZVN1YnN0aXR1dGlvbihjbHMsIGNoZWNrZWRDbGFzcyksCiAgICAgICAgICAgICAgICAgICAgbmVlZHNJczogZmFsc2UpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFRoZSBzdXBlcmNsYXNzIGhhcyBubyBzdWJzdGl0dXRpb24gZnVuY3Rpb24gZm9yIFtjaGVja2VkQ2xhc3NdLgogICAgICAgICAgICBpZiAoaW1wbGVtZW50c0NoZWNrZWRUcml2aWFsbHkpIHsKICAgICAgICAgICAgICAvLyBXZSBkb24ndCBhZGQgYW4gZXhwbGljaXQgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIGZvcgogICAgICAgICAgICAgIC8vIFtjaGVja2VkQ2xhc3NdIGJlY2F1c2UgdGhlIHN1YnN0aXR1dGlvbiBpcyB0cml2aWFsIGFuZCBkb2Vzbid0CiAgICAgICAgICAgICAgLy8gbmVlZCB0byBvdmVycmlkZSBhbiBpbmhlcml0ZWQgZnVuY3Rpb24uCiAgICAgICAgICAgICAgY2hlY2tzLmFkZChuZXcgVHlwZUNoZWNrKGNoZWNrZWRDbGFzcywgbnVsbCwgbmVlZHNJczogbmVlZHNJcykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIFdlIG5lZWQgYSBub24tdHJpdmlhbCBzdWJzdGl0dXRpb24gZnVuY3Rpb24gZm9yCiAgICAgICAgICAgICAgLy8gW2NoZWNrZWRDbGFzc10uCiAgICAgICAgICAgICAgY2hlY2tzLmFkZChuZXcgVHlwZUNoZWNrKAogICAgICAgICAgICAgICAgICBjaGVja2VkQ2xhc3MsIGNvbXB1dGVTdWJzdGl0dXRpb24oY2xzLCBjaGVja2VkQ2xhc3MpLAogICAgICAgICAgICAgICAgICBuZWVkc0lzOiBuZWVkc0lzKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZvciAoSW50ZXJmYWNlVHlwZSB0eXBlIGluIF90eXBlcy5nZXRTdXBlcnR5cGVzKGNscykpIHsKICAgICAgICBwcm9jZXNzU3VwZXJ0eXBlKHR5cGUpOwogICAgICB9CiAgICAgIEZ1bmN0aW9uVHlwZSBjYWxsVHlwZSA9IF90eXBlcy5nZXRDYWxsVHlwZShfdHlwZXMuZ2V0VGhpc1R5cGUoY2xzKSk7CiAgICAgIGlmIChjYWxsVHlwZSAhPSBudWxsKSB7CiAgICAgICAgcHJvY2Vzc1N1cGVydHlwZShfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuZnVuY3Rpb25UeXBlKTsKICAgICAgfQogICAgICByZXR1cm4gY2hlY2tzOwogICAgfQoKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGNsYXNzVXNlTWFwLmtleXMpIHsKICAgICAgQ2xhc3NVc2UgY2xhc3NVc2UgPSBjbGFzc1VzZU1hcFtjbHNdID8/IGVtcHR5VXNlOwogICAgICBpZiAoY2xhc3NVc2UuZGlyZWN0SW5zdGFuY2UgfHwKICAgICAgICAgIGNsYXNzVXNlLnR5cGVBcmd1bWVudCB8fAogICAgICAgICAgY2xhc3NVc2UudHlwZUxpdGVyYWwpIHsKICAgICAgICAvLyBBZGQgY2hlY2tzIG9ubHkgZm9yIGNsYXNzZXMgdGhhdCBhcmUgbGl2ZSBlaXRoZXIgYXMgaW5zdGFudGlhdGVkCiAgICAgICAgLy8gY2xhc3NlcyBvciB0eXBlIGFyZ3VtZW50cyBwYXNzZWQgYXQgcnVudGltZS4KICAgICAgICBjb21wdXRlQ2hlY2tzKGNscyk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgU2V0PENsYXNzRW50aXR5PiBnZXRDbGFzc2VzVXNlZEluU3Vic3RpdHV0aW9ucyhUeXBlQ2hlY2tzIGNoZWNrcykgewogICAgU2V0PENsYXNzRW50aXR5PiBpbnN0YW50aWF0ZWQgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgQXJndW1lbnRDb2xsZWN0b3IgY29sbGVjdG9yID0gbmV3IEFyZ3VtZW50Q29sbGVjdG9yKCk7CiAgICBmb3IgKENsYXNzRW50aXR5IHRhcmdldCBpbiBjaGVja3MuY2xhc3NlcykgewogICAgICBDbGFzc0NoZWNrcyBjbGFzc0NoZWNrcyA9IGNoZWNrc1t0YXJnZXRdOwogICAgICBmb3IgKFR5cGVDaGVjayBjaGVjayBpbiBjbGFzc0NoZWNrcy5jaGVja3MpIHsKICAgICAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gY2hlY2suc3Vic3RpdHV0aW9uOwogICAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgICAgY29sbGVjdG9yLmNvbGxlY3RBbGwoc3Vic3RpdHV0aW9uLmFyZ3VtZW50cyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gaW5zdGFudGlhdGVkLi5hZGRBbGwoY29sbGVjdG9yLmNsYXNzZXMpOwoKICAgIC8vIFRPRE8oc3JhKTogVGhpcyBjb21wdXRhdGlvbiBtaXNzZXMgc3Vic3RpdHV0aW9ucyBmb3IgcmVhZGluZyB0eXBlCiAgICAvLyBwYXJhbWV0ZXJzLgogIH0KCiAgLy8gVE9ETyhrYXJsa2xvc2UpOiBtYXliZSBwcmVjb21wdXRlIHRoaXMgdmFsdWUgYW5kIHN0b3JlIGl0IGluIHR5cGVDaGVja3M/CiAgQG92ZXJyaWRlCiAgYm9vbCBpc1RyaXZpYWxTdWJzdGl0dXRpb24oQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0VudGl0eSBjaGVjaykgewogICAgaWYgKGNscy5pc0Nsb3N1cmUpIHsKICAgICAgLy8gVE9ETyhrYXJsa2xvc2UpOiBoYW5kbGUgY2xvc3VyZXMuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIElmIHRoZXJlIGFyZSBubyB0eXBlIHZhcmlhYmxlcywgd2UgZG8gbm90IG5lZWQgYSBzdWJzdGl0dXRpb24uCiAgICBpZiAoIV9lbGVtZW50RW52aXJvbm1lbnQuaXNHZW5lcmljQ2xhc3MoY2hlY2spKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIEpTLWludGVyb3AgY2xhc3NlcyBuZWVkIGFuIGV4cGxpY2l0IHN1YnN0aXR1dGlvbiB0byBtYXJrIHRoZSB0eXBlCiAgICAvLyBhcmd1bWVudHMgYXMgYGFueWAgdHlwZS4KICAgIGlmIChfY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIElmIHRoZSB0eXBlIGlzIHRoZSBzYW1lLCB3ZSBkbyBub3QgbmVlZCBhIHN1YnN0aXR1dGlvbi4KICAgIGlmIChjbHMgPT0gY2hlY2spIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgSW50ZXJmYWNlVHlwZSBvcmlnaW5hbFR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CiAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBfdHlwZXMuYXNJbnN0YW5jZU9mKG9yaWdpbmFsVHlwZSwgY2hlY2spOwogICAgLy8gW3R5cGVdIGlzIG5vdCBhIHN1YnR5cGUgb2YgW2NoZWNrXS4gd2UgZG8gbm90IGdlbmVyYXRlIGEgY2hlY2sgYW5kIGRvIG5vdAogICAgLy8gbmVlZCBhIHN1YnN0aXR1dGlvbi4KICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybiB0cnVlOwoKICAgIC8vIFJ1biB0aHJvdWdoIGJvdGggbGlzdHMgb2YgdHlwZSB2YXJpYWJsZXMgYW5kIGNoZWNrIGlmIHRoZSB0eXBlIHZhcmlhYmxlcwogICAgLy8gYXJlIGlkZW50aWNhbCBhdCBlYWNoIHBvc2l0aW9uLiBJZiB0aGV5IGFyZSBub3QsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIGEKICAgIC8vIHN1YnN0aXR1dGlvbiBmdW5jdGlvbi4KICAgIExpc3Q8RGFydFR5cGU+IHZhcmlhYmxlcyA9IG9yaWdpbmFsVHlwZS50eXBlQXJndW1lbnRzOwogICAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzID0gdHlwZS50eXBlQXJndW1lbnRzOwogICAgaWYgKHZhcmlhYmxlcy5sZW5ndGggIT0gYXJndW1lbnRzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdmFyaWFibGVzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICBpZiAodmFyaWFibGVzW2luZGV4XSAhPSBhcmd1bWVudHNbaW5kZXhdKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIFN1YnN0aXR1dGlvbiBnZXRTdWJzdGl0dXRpb24oQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0VudGl0eSBvdGhlcikgewogICAgLy8gTG9vayBmb3IgYSBwcmVjb21wdXRlZCBjaGVjay4KICAgIGZvciAoVHlwZUNoZWNrIGNoZWNrIGluIF9yZXF1aXJlZENoZWNrc1tjbHNdLmNoZWNrcykgewogICAgICBpZiAoY2hlY2suY2xzID09IG90aGVyKSB7CiAgICAgICAgcmV0dXJuIGNoZWNrLnN1YnN0aXR1dGlvbjsKICAgICAgfQogICAgfQogICAgLy8gVGhlcmUgaXMgbm8gcHJlY29tcHV0ZWQgY2hlY2sgZm9yIHRoaXMgcGFpciAoYmVjYXVzZSB0aGUgY2hlY2sgaXMgbm90CiAgICAvLyBkb25lIG9uIHR5cGUgYXJndW1lbnRzIG9ubHkuICBDb21wdXRlIGEgbmV3IHN1YnN0aXR1dGlvbi4KICAgIHJldHVybiBjb21wdXRlU3Vic3RpdHV0aW9uKGNscywgb3RoZXIpOwogIH0KCiAgU3Vic3RpdHV0aW9uIGNvbXB1dGVTdWJzdGl0dXRpb24oQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0VudGl0eSBjaGVjaywKICAgICAge2Jvb2wgYWx3YXlzR2VuZXJhdGVGdW5jdGlvbjogZmFsc2V9KSB7CiAgICBpZiAoaXNUcml2aWFsU3Vic3RpdHV0aW9uKGNscywgY2hlY2spKSByZXR1cm4gbnVsbDsKCiAgICAvLyBVbm5hbWVkIG1peGluIGFwcGxpY2F0aW9uIGNsYXNzZXMgZG8gbm90IG5lZWQgc3Vic3RpdHV0aW9ucywgYmVjYXVzZSB0aGV5CiAgICAvLyBhcmUgbmV2ZXIgaW5zdGFudGlhdGVkIGFuZCB0aGVpciBjaGVja3MgYXJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjbGFzcyB0aGF0CiAgICAvLyB0aGV5IGFyZSBtaXhlZCBpbnRvLgogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgSW50ZXJmYWNlVHlwZSB0YXJnZXQgPSBfdHlwZXMuYXNJbnN0YW5jZU9mKHR5cGUsIGNoZWNrKTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVWYXJpYWJsZXMgPSB0eXBlLnR5cGVBcmd1bWVudHM7CiAgICBpZiAoX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgIGludCB0eXBlQXJndW1lbnRzID0gdGFyZ2V0LnR5cGVBcmd1bWVudHMubGVuZ3RoOwogICAgICAvLyBHZW5lcmljIEpTLWludGVyb3AgY2xhc3MgbmVlZCBhbiBleHBsaWNpdCBzdWJzdGl0dXRpb24gdG8gbWFyawogICAgICAvLyB0aGUgdHlwZSBhcmd1bWVudHMgYXMgYGFueWAgdHlwZS4KICAgICAgcmV0dXJuIG5ldyBTdWJzdGl0dXRpb24uanNJbnRlcm9wKHR5cGVBcmd1bWVudHMpOwogICAgfSBlbHNlIGlmICh0eXBlVmFyaWFibGVzLmlzRW1wdHkgJiYgIWFsd2F5c0dlbmVyYXRlRnVuY3Rpb24pIHsKICAgICAgcmV0dXJuIG5ldyBTdWJzdGl0dXRpb24ubGlzdCh0YXJnZXQudHlwZUFyZ3VtZW50cyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFN1YnN0aXR1dGlvbi5mdW5jdGlvbih0YXJnZXQudHlwZUFyZ3VtZW50cywgdHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgfQp9CgpjbGFzcyBUcml2aWFsUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBleHRlbmRzIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnNNaXhpbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBAb3ZlcnJpZGUKICBUeXBlQ2hlY2tzIF9yZXF1aXJlZENoZWNrczsKCiAgVHJpdmlhbFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnModGhpcy5fY2xvc2VkV29ybGQpOwp9CgphYnN0cmFjdCBjbGFzcyBSdW50aW1lVHlwZXNFbmNvZGVyIHsKICBqc0FzdC5FeHByZXNzaW9uIGdldFNpZ25hdHVyZUVuY29kaW5nKE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgRGFydFR5cGUgdHlwZSwganNBc3QuRXhwcmVzc2lvbiB0aGlzXyk7CgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRvIGRldGVybWluZSBhdCBydW50aW1lIGlmIGEgdHlwZSBvYmplY3QKICAvLy8gaXMgYSBmdW5jdGlvbiB0eXBlLgogIGpzQXN0LlRlbXBsYXRlIGdldCB0ZW1wbGF0ZUZvcklzRnVuY3Rpb25UeXBlOwoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIGEgRnV0dXJlT3IgdHlwZS4KICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0Z1dHVyZU9yVHlwZTsKCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyB0aGUgdm9pZCB0eXBlLgogIGpzQXN0LlRlbXBsYXRlIGdldCB0ZW1wbGF0ZUZvcklzVm9pZFR5cGU7CgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRvIGRldGVybWluZSBhdCBydW50aW1lIGlmIGEgdHlwZSBvYmplY3QKICAvLy8gaXMgdGhlIGR5bmFtaWMgdHlwZS4KICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0R5bmFtaWNUeXBlOwoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIGEgdHlwZSBhcmd1bWVudCBvZiBqcy1pbnRlcm9wIGNsYXNzLgogIGpzQXN0LlRlbXBsYXRlIGdldCB0ZW1wbGF0ZUZvcklzSnNJbnRlcm9wVHlwZUFyZ3VtZW50OwoKICAvLy8gUmV0dXJucyBhIFtqc0FzdC5FeHByZXNzaW9uXSByZXByZXNlbnRpbmcgdGhlIGdpdmVuIFt0eXBlXS4gVHlwZSB2YXJpYWJsZXMKICAvLy8gYXJlIHJlcGxhY2VkIGJ5IHRoZSBbanNBc3QuRXhwcmVzc2lvbl0gcmV0dXJuZWQgYnkgW29uVmFyaWFibGVdLgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0VHlwZVJlcHJlc2VudGF0aW9uKAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBEYXJ0VHlwZSB0eXBlLCBPblZhcmlhYmxlQ2FsbGJhY2sgb25WYXJpYWJsZSwKICAgICAgW1Nob3VsZEVuY29kZVR5cGVkZWZDYWxsYmFjayBzaG91bGRFbmNvZGVUeXBlZGVmXSk7CgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50cyhpbnQgY291bnQpOwoKICAvLy8gRml4ZWQgc3RyaW5ncyB1c2VkIGZvciBydW50aW1lIHR5cGVzIGVuY29kaW5nLgogIFJ1bnRpbWVUeXBlVGFncyBnZXQgcnRpVGFnczsKfQoKY2xhc3MgX1J1bnRpbWVUeXBlc0NoZWNrcyBpbXBsZW1lbnRzIFJ1bnRpbWVUeXBlc0NoZWNrcyB7CiAgZmluYWwgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBfc3Vic3RpdHV0aW9uczsKICBAb3ZlcnJpZGUKICBmaW5hbCBUeXBlQ2hlY2tzIHJlcXVpcmVkQ2hlY2tzOwogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBfdHlwZUxpdGVyYWxzOwogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBfdHlwZUFyZ3VtZW50czsKCiAgX1J1bnRpbWVUeXBlc0NoZWNrcyh0aGlzLl9zdWJzdGl0dXRpb25zLCB0aGlzLnJlcXVpcmVkQ2hlY2tzLAogICAgICB0aGlzLl90eXBlTGl0ZXJhbHMsIHRoaXMuX3R5cGVBcmd1bWVudHMpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IHJlcXVpcmVkQ2xhc3NlcyB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IHJlcXVpcmVkID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIHJlcXVpcmVkLmFkZEFsbChfdHlwZUFyZ3VtZW50cyk7CiAgICByZXF1aXJlZC5hZGRBbGwoX3R5cGVMaXRlcmFscyk7CiAgICByZXF1aXJlZAogICAgICAgIC5hZGRBbGwoX3N1YnN0aXR1dGlvbnMuZ2V0Q2xhc3Nlc1VzZWRJblN1YnN0aXR1dGlvbnMocmVxdWlyZWRDaGVja3MpKTsKICAgIHJldHVybiByZXF1aXJlZDsKICB9Cn0KCmNsYXNzIFJ1bnRpbWVUeXBlc0ltcGwKICAgIHdpdGggUnVudGltZVR5cGVzU3Vic3RpdHV0aW9uc01peGluCiAgICBpbXBsZW1lbnRzIFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIgewogIEBvdmVycmlkZQogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CgogIC8vIFRoZSBzZXQgb2YgdHlwZSBhcmd1bWVudHMgdGVzdGVkIGFnYWluc3QgdHlwZSB2YXJpYWJsZSBib3VuZHMuCiAgZmluYWwgU2V0PERhcnRUeXBlPiBjaGVja2VkVHlwZUFyZ3VtZW50cyA9IG5ldyBTZXQ8RGFydFR5cGU+KCk7CiAgLy8gVGhlIHNldCBvZiB0ZXN0ZWQgdHlwZSB2YXJpYWJsZSBib3VuZHMuCiAgZmluYWwgU2V0PERhcnRUeXBlPiBjaGVja2VkQm91bmRzID0gbmV3IFNldDxEYXJ0VHlwZT4oKTsKCiAgVHlwZUNoZWNrcyBjYWNoZWRSZXF1aXJlZENoZWNrczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBydGlDaGVja3NCdWlsZGVyQ2xvc2VkID0gZmFsc2U7CgogIFJ1bnRpbWVUeXBlc0ltcGwodGhpcy5fY2xvc2VkV29ybGQpOwoKICBKQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgQG92ZXJyaWRlCiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwogIEBvdmVycmlkZQogIFJ1bnRpbWVUeXBlc05lZWQgZ2V0IF9ydGlOZWVkID0+IF9jbG9zZWRXb3JsZC5ydGlOZWVkOwoKICBAb3ZlcnJpZGUKICBUeXBlQ2hlY2tzIGdldCBfcmVxdWlyZWRDaGVja3MgPT4gY2FjaGVkUmVxdWlyZWRDaGVja3M7CgogIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NVc2U+IGNsYXNzVXNlTWFwRm9yVGVzdGluZzsKCiAgZmluYWwgU2V0PEdlbmVyaWNJbnN0YW50aWF0aW9uPiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zID0KICAgICAgbmV3IFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4oKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclR5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVjaygKICAgICAgRGFydFR5cGUgdHlwZUFyZ3VtZW50LCBEYXJ0VHlwZSBib3VuZCkgewogICAgY2hlY2tlZFR5cGVBcmd1bWVudHMuYWRkKHR5cGVBcmd1bWVudCk7CiAgICBjaGVja2VkQm91bmRzLmFkZChib3VuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbikgewogICAgX2dlbmVyaWNJbnN0YW50aWF0aW9ucy5hZGQoaW5zdGFudGlhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBSdW50aW1lVHlwZXNDaGVja3MgY29tcHV0ZVJlcXVpcmVkQ2hlY2tzKAogICAgICBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucykgewogICAgVHlwZVZhcmlhYmxlVGVzdHMgdHlwZVZhcmlhYmxlVGVzdHMgPSBuZXcgVHlwZVZhcmlhYmxlVGVzdHMoCiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBfY29tbW9uRWxlbWVudHMsCiAgICAgICAgX3R5cGVzLAogICAgICAgIGNvZGVnZW5Xb3JsZCwKICAgICAgICBfZ2VuZXJpY0luc3RhbnRpYXRpb25zLAogICAgICAgIGZvclJ0aU5lZWRzOiBmYWxzZSk7CiAgICBTZXQ8RGFydFR5cGU+IGV4cGxpY2l0SXNDaGVja3MgPSB0eXBlVmFyaWFibGVUZXN0cy5leHBsaWNpdElzQ2hlY2tzOwogICAgU2V0PERhcnRUeXBlPiBpbXBsaWNpdElzQ2hlY2tzID0gdHlwZVZhcmlhYmxlVGVzdHMuaW1wbGljaXRJc0NoZWNrczsKCiAgICBNYXA8Q2xhc3NFbnRpdHksIENsYXNzVXNlPiBjbGFzc1VzZU1hcCA9IDxDbGFzc0VudGl0eSwgQ2xhc3NVc2U+e307CiAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgY2xhc3NVc2VNYXBGb3JUZXN0aW5nID0gY2xhc3NVc2VNYXA7CiAgICB9CgogICAgU2V0PEZ1bmN0aW9uVHlwZT4gY2hlY2tlZEZ1bmN0aW9uVHlwZXMgPSBuZXcgU2V0PEZ1bmN0aW9uVHlwZT4oKTsKICAgIFNldDxDbGFzc0VudGl0eT4gdHlwZUxpdGVyYWxzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIFNldDxDbGFzc0VudGl0eT4gdHlwZUFyZ3VtZW50cyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogICAgLy8gVGhlIFtsaXZlVHlwZVZpc2l0b3JdIGlzIHVzZWQgdG8gcmVnaXN0ZXIgY2xhc3MgdXNlIGluIHRoZSB0eXBlIG9mCiAgICAvLyBpbnN0YW50aWF0ZWQgb2JqZWN0cyBsaWtlIGBuZXcgVGAgYW5kIHRoZSBmdW5jdGlvbiB0eXBlcyBvZgogICAgLy8gdGVhciBvZmZzIGFuZCBjbG9zdXJlcy4KICAgIC8vCiAgICAvLyBBIHR5cGUgZm91bmQgaW4gYSBjb3ZhcmlhbnQgcG9zaXRpb24gb2Ygc3VjaCB0eXBlcyBpcyBjb25zaWRlcmVkIGxpdmUKICAgIC8vIHdoZXJlYXMgYSB0eXBlIGZvdW5kIGluIGEgY29udHJhdmFyaWFudCBwb3NpdGlvbiBvZiBzdWNoIHR5cGVzIGlzCiAgICAvLyBjb25zaWRlcmVkIHRlc3RlZC4KICAgIC8vCiAgICAvLyBGb3IgaW5zdGFuY2UKICAgIC8vCiAgICAvLyAgICBuZXcgQTxCIEZ1bmN0aW9uKEMpPigpOwogICAgLy8KICAgIC8vIG1ha2VzIEEgYW5kIEIgbGl2ZSBidXQgQyB0ZXN0ZWQuCiAgICBUeXBlVmlzaXRvciBsaXZlVHlwZVZpc2l0b3IgPQogICAgICAgIG5ldyBUeXBlVmlzaXRvcihvbkNsYXNzOiAoQ2xhc3NFbnRpdHkgY2xzLCB7VHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZX0pIHsKICAgICAgQ2xhc3NVc2UgY2xhc3NVc2UgPSBjbGFzc1VzZU1hcC5wdXRJZkFic2VudChjbHMsICgpID0+IG5ldyBDbGFzc1VzZSgpKTsKICAgICAgc3dpdGNoIChzdGF0ZSkgewogICAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQ6CiAgICAgICAgICBjbGFzc1VzZS50eXBlQXJndW1lbnQgPSB0cnVlOwogICAgICAgICAgdHlwZUFyZ3VtZW50cy5hZGQoY2xzKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5jb250cmF2YXJpYW50VHlwZUFyZ3VtZW50OgogICAgICAgICAgY2xhc3NVc2UudHlwZUFyZ3VtZW50ID0gdHJ1ZTsKICAgICAgICAgIGNsYXNzVXNlLmNoZWNrZWRUeXBlQXJndW1lbnQgPSB0cnVlOwogICAgICAgICAgdHlwZUFyZ3VtZW50cy5hZGQoY2xzKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS50eXBlTGl0ZXJhbDoKICAgICAgICAgIGNsYXNzVXNlLnR5cGVMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgIHR5cGVMaXRlcmFscy5hZGQoY2xzKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5kaXJlY3Q6CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CgogICAgLy8gVGhlIFt0ZXN0ZWRUeXBlVmlzaXRvcl0gaXMgdXNlZCB0byByZWdpc3RlciBjbGFzcyB1c2UgaW4gdHlwZSB0ZXN0cyBsaWtlCiAgICAvLyBgbyBpcyBUYCBhbmQgYG8gYXMgVGAgKGJvdGggaW1wbGljaXQgYW5kIGV4cGxpY2l0KS4KICAgIC8vCiAgICAvLyBBIHR5cGUgZm91bmQgaW4gYSBjb3ZhcmlhbnQgcG9zaXRpb24gb2Ygc3VjaCB0eXBlcyBpcyBjb25zaWRlcmVkIHRlc3RlZAogICAgLy8gd2hlcmVhcyBhIHR5cGUgZm91bmQgaW4gYSBjb250cmF2YXJpYW50IHBvc2l0aW9uIG9mIHN1Y2ggdHlwZXMgaXMKICAgIC8vIGNvbnNpZGVyZWQgbGl2ZS4KICAgIC8vCiAgICAvLyBGb3IgaW5zdGFuY2UKICAgIC8vCiAgICAvLyAgICBvIGlzIEE8QiBGdW5jdGlvbihDKT47CiAgICAvLwogICAgLy8gbWFrZXMgQSBhbmQgQiB0ZXN0ZWQgYnV0IEMgbGl2ZS4KICAgIFR5cGVWaXNpdG9yIHRlc3RlZFR5cGVWaXNpdG9yID0KICAgICAgICBuZXcgVHlwZVZpc2l0b3Iob25DbGFzczogKENsYXNzRW50aXR5IGNscywge1R5cGVWaXNpdG9yU3RhdGUgc3RhdGV9KSB7CiAgICAgIENsYXNzVXNlIGNsYXNzVXNlID0gY2xhc3NVc2VNYXAucHV0SWZBYnNlbnQoY2xzLCAoKSA9PiBuZXcgQ2xhc3NVc2UoKSk7CiAgICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuY292YXJpYW50VHlwZUFyZ3VtZW50OgogICAgICAgICAgY2xhc3NVc2UudHlwZUFyZ3VtZW50ID0gdHJ1ZTsKICAgICAgICAgIGNsYXNzVXNlLmNoZWNrZWRUeXBlQXJndW1lbnQgPSB0cnVlOwogICAgICAgICAgdHlwZUFyZ3VtZW50cy5hZGQoY2xzKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5jb250cmF2YXJpYW50VHlwZUFyZ3VtZW50OgogICAgICAgICAgY2xhc3NVc2UudHlwZUFyZ3VtZW50ID0gdHJ1ZTsKICAgICAgICAgIHR5cGVBcmd1bWVudHMuYWRkKGNscyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw6CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0OgogICAgICAgICAgY2xhc3NVc2UuY2hlY2tlZEluc3RhbmNlID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9KTsKCiAgICBjb2RlZ2VuV29ybGQuaW5zdGFudGlhdGVkQ2xhc3Nlcy5mb3JFYWNoKChDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgQ2xhc3NVc2UgY2xhc3NVc2UgPSBjbGFzc1VzZU1hcC5wdXRJZkFic2VudChjbHMsICgpID0+IG5ldyBDbGFzc1VzZSgpKTsKICAgICAgY2xhc3NVc2UuaW5zdGFuY2UgPSB0cnVlOwogICAgfSk7CgogICAgU2V0PENsYXNzRW50aXR5PiB2aXNpdGVkU3VwZXJDbGFzc2VzID0ge307CiAgICBjb2RlZ2VuV29ybGQuaW5zdGFudGlhdGVkVHlwZXMuZm9yRWFjaCgoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICAgIGxpdmVUeXBlVmlzaXRvci52aXNpdFR5cGUodHlwZSwgVHlwZVZpc2l0b3JTdGF0ZS5kaXJlY3QpOwogICAgICBDbGFzc1VzZSBjbGFzc1VzZSA9CiAgICAgICAgICBjbGFzc1VzZU1hcC5wdXRJZkFic2VudCh0eXBlLmVsZW1lbnQsICgpID0+IG5ldyBDbGFzc1VzZSgpKTsKICAgICAgY2xhc3NVc2UuZGlyZWN0SW5zdGFuY2UgPSB0cnVlOwogICAgICBGdW5jdGlvblR5cGUgY2FsbFR5cGUgPSBfdHlwZXMuZ2V0Q2FsbFR5cGUodHlwZSk7CiAgICAgIGlmIChjYWxsVHlwZSAhPSBudWxsKSB7CiAgICAgICAgbGl2ZVR5cGVWaXNpdG9yLnZpc2l0VHlwZShjYWxsVHlwZSwgVHlwZVZpc2l0b3JTdGF0ZS5kaXJlY3QpOwogICAgICB9CgogICAgICAvLyBTdXBlcmNsYXNzIG1pZ2h0IG1ha2UgY2xhc3NlcyBsaXZlIGFzIHR5cGUgYXJndW1lbnRzLiBGb3IgaW5zdGFuY2UKICAgICAgLy8KICAgICAgLy8gICAgY2xhc3MgQSB7fQogICAgICAvLyAgICBjbGFzcyBCPFQ+IHt9CiAgICAgIC8vICAgIGNsYXNzIEMgaW1wbGVtZW50cyBCPEE+IHt9CiAgICAgIC8vICAgIG1haW4oKSA9PiBuZXcgQygpOwogICAgICAvLwogICAgICAvLyBIZXJlIGBBYCBpcyBsaXZlIGFzIGEgdHlwZSBhcmd1bWVudCB0aHJvdWdoIHRoZSBsaXZlbmVzcyBvZiBgQ2AuCiAgICAgIGZvciAoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUKICAgICAgICAgIGluIF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMuZ2V0U3VwZXJ0eXBlcyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgICAgaWYgKHN1cGVydHlwZS50eXBlQXJndW1lbnRzLmlzRW1wdHkgJiYKICAgICAgICAgICAgdmlzaXRlZFN1cGVyQ2xhc3Nlcy5jb250YWlucyhzdXBlcnR5cGUuZWxlbWVudCkpIHsKICAgICAgICAgIC8vIElmIFtzdXBlcmNsYXNzXSBpcyBub3QgZ2VuZXJpYyB0aGVuIGEgc2Vjb25kIHZpc2l0IGNhbm5vdCBhZGQgbW9yZQogICAgICAgICAgLy8gaW5mb3JtYXRpb24gdGhhdCB0aGUgZmlyc3QuIEluIHRoZSBleGFtcGxlIGFib3ZlLCB2aXNpdGluZyBgQ2AKICAgICAgICAgIC8vIHR3aWNlIGNhbiBvbmx5IHJlc3VsdCBpbiBhIHNlY29uZCByZWdpc3RyYXRpb24gb2YgYEFgIGFzIGxpdmUKICAgICAgICAgIC8vIHR5cGUgYXJndW1lbnQuCiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdmlzaXRlZFN1cGVyQ2xhc3Nlcy5hZGQoc3VwZXJ0eXBlLmVsZW1lbnQpOwogICAgICAgIGxpdmVUeXBlVmlzaXRvci52aXNpdFR5cGUoc3VwZXJ0eXBlLCBUeXBlVmlzaXRvclN0YXRlLmRpcmVjdCk7CiAgICAgIH0KICAgIH0pOwoKICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCBpbiBjb2RlZ2VuV29ybGQuY2xvc3VyaXplZFN0YXRpY3MpIHsKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnQpOwogICAgICBsaXZlVHlwZVZpc2l0b3IudmlzaXRUeXBlKGZ1bmN0aW9uVHlwZSwgVHlwZVZpc2l0b3JTdGF0ZS5kaXJlY3QpOwogICAgfQoKICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCBpbiBjb2RlZ2VuV29ybGQuY2xvc3VyaXplZE1lbWJlcnMpIHsKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnQpOwogICAgICBsaXZlVHlwZVZpc2l0b3IudmlzaXRUeXBlKGZ1bmN0aW9uVHlwZSwgVHlwZVZpc2l0b3JTdGF0ZS5kaXJlY3QpOwogICAgfQoKICAgIHZvaWQgcHJvY2Vzc01ldGhvZFR5cGVBcmd1bWVudHMoXywgU2V0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGZvciAoRGFydFR5cGUgdHlwZUFyZ3VtZW50IGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgICBsaXZlVHlwZVZpc2l0b3IudmlzaXQoCiAgICAgICAgICAgIHR5cGVBcmd1bWVudCwgVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQpOwogICAgICB9CiAgICB9CgogICAgY29kZWdlbldvcmxkLmZvckVhY2hTdGF0aWNUeXBlQXJndW1lbnQocHJvY2Vzc01ldGhvZFR5cGVBcmd1bWVudHMpOwogICAgY29kZWdlbldvcmxkLmZvckVhY2hEeW5hbWljVHlwZUFyZ3VtZW50KHByb2Nlc3NNZXRob2RUeXBlQXJndW1lbnRzKTsKICAgIGNvZGVnZW5Xb3JsZC5saXZlVHlwZUFyZ3VtZW50cy5mb3JFYWNoKChEYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGxpdmVUeXBlVmlzaXRvci52aXNpdFR5cGUodHlwZSwgVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQpOwogICAgfSk7CiAgICBjb2RlZ2VuV29ybGQuY29uc3RUeXBlTGl0ZXJhbHMuZm9yRWFjaCgoRGFydFR5cGUgdHlwZSkgewogICAgICBsaXZlVHlwZVZpc2l0b3IudmlzaXRUeXBlKHR5cGUsIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWwpOwogICAgfSk7CgogICAgYm9vbCBpc0Z1bmN0aW9uQ2hlY2tlZCA9IGZhbHNlOwoKICAgIHZvaWQgcHJvY2Vzc0NoZWNrZWRUeXBlKERhcnRUeXBlIHQpIHsKICAgICAgaWYgKHQgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgY2hlY2tlZEZ1bmN0aW9uVHlwZXMuYWRkKHQpOwogICAgICB9IGVsc2UgaWYgKHQgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIGlzRnVuY3Rpb25DaGVja2VkID0KICAgICAgICAgICAgaXNGdW5jdGlvbkNoZWNrZWQgfHwgdC5lbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzOwogICAgICB9CiAgICAgIHRlc3RlZFR5cGVWaXNpdG9yLnZpc2l0VHlwZSh0LCBUeXBlVmlzaXRvclN0YXRlLmRpcmVjdCk7CiAgICB9CgogICAgZXhwbGljaXRJc0NoZWNrcy5mb3JFYWNoKHByb2Nlc3NDaGVja2VkVHlwZSk7CiAgICBpbXBsaWNpdElzQ2hlY2tzLmZvckVhY2gocHJvY2Vzc0NoZWNrZWRUeXBlKTsKCiAgICAvLyBBIGNsb3N1cmUgY2xhc3MgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb24gdHlwZSBvZiBpdHMgYGNhbGxgCiAgICAvLyBtZXRob2QgYW5kIG5lZWRzIGEgc2lnbmF0dXJlIGZ1bmN0aW9uIGZvciB0ZXN0aW5nIGl0cyBmdW5jdGlvbiB0eXBlCiAgICAvLyBhZ2FpbnN0IHR5cGVkZWZzIGFuZCBmdW5jdGlvbiB0eXBlcyB0aGF0IGFyZSB1c2VkIGluIGlzLWNoZWNrcy4gU2luY2UKICAgIC8vIGNsb3N1cmVzIGhhdmUgYSBzaWduYXR1cmUgbWV0aG9kIGlmZiB0aGV5IG5lZWQgaXQgYW5kIHNob3VsZCBoYXZlIGEKICAgIC8vIGZ1bmN0aW9uIHR5cGUgaWZmIHRoZXkgaGF2ZSBhIHNpZ25hdHVyZSwgd2UgcHJvY2VzcyBhbGwgY2xhc3Nlcy4KICAgIHZvaWQgcHJvY2Vzc0NsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgICBDbGFzc0Z1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgICAgX2NvbXB1dGVGdW5jdGlvblR5cGUoX2VsZW1lbnRFbnZpcm9ubWVudCwgY2xzKTsKICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBudWxsKSB7CiAgICAgICAgQ2xhc3NVc2UgY2xhc3NVc2UgPSBjbGFzc1VzZU1hcC5wdXRJZkFic2VudChjbHMsICgpID0+IG5ldyBDbGFzc1VzZSgpKTsKICAgICAgICBjbGFzc1VzZS5mdW5jdGlvblR5cGUgPSBmdW5jdGlvblR5cGU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDb2xsZWN0IGNsYXNzZXMgdGhhdCBhcmUgJ2xpdmUnIGVpdGhlciB0aHJvdWdoIGluc3RhbnRpYXRpb24gb3IgdXNlIGluCiAgICAvLyB0eXBlIGFyZ3VtZW50cy4KICAgIExpc3Q8Q2xhc3NFbnRpdHk+IGxpdmVDbGFzc2VzID0gPENsYXNzRW50aXR5PltdOwogICAgY2xhc3NVc2VNYXAuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc1VzZSBjbGFzc1VzZSkgewogICAgICBpZiAoY2xhc3NVc2UuaXNMaXZlKSB7CiAgICAgICAgbGl2ZUNsYXNzZXMuYWRkKGNscyk7CiAgICAgIH0KICAgIH0pOwogICAgbGl2ZUNsYXNzZXMuZm9yRWFjaChwcm9jZXNzQ2xhc3MpOwoKICAgIGNvZGVnZW5Xb3JsZC5mb3JFYWNoR2VuZXJpY01ldGhvZCgoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobWV0aG9kKQogICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgIGlmIChfcnRpTmVlZC5tZXRob2ROZWVkc1R5cGVBcmd1bWVudHMobWV0aG9kKSkgewogICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZQogICAgICAgICAgICAgIGluIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKG1ldGhvZCkpIHsKICAgICAgICAgICAgRGFydFR5cGUgYm91bmQgPQogICAgICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUeXBlVmFyaWFibGVCb3VuZCh0eXBlVmFyaWFibGUuZWxlbWVudCk7CiAgICAgICAgICAgIHByb2Nlc3NDaGVja2VkVHlwZShib3VuZCk7CiAgICAgICAgICAgIGxpdmVUeXBlVmlzaXRvci52aXNpdCgKICAgICAgICAgICAgICAgIGJvdW5kLCBUeXBlVmlzaXRvclN0YXRlLmNvdmFyaWFudFR5cGVBcmd1bWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBjYWNoZWRSZXF1aXJlZENoZWNrcyA9IF9jb21wdXRlQ2hlY2tzKGNsYXNzVXNlTWFwKTsKICAgIHJ0aUNoZWNrc0J1aWxkZXJDbG9zZWQgPSB0cnVlOwogICAgcmV0dXJuIG5ldyBfUnVudGltZVR5cGVzQ2hlY2tzKAogICAgICAgIHRoaXMsIGNhY2hlZFJlcXVpcmVkQ2hlY2tzLCB0eXBlQXJndW1lbnRzLCB0eXBlTGl0ZXJhbHMpOwogIH0KfQoKLy8vIENvbXB1dGVzIHRoZSBmdW5jdGlvbiB0eXBlIG9mIFtjbHNdLCBpZiBhbnkuCi8vLwovLy8gSW4gRGFydCAxLCBhbnkgY2xhc3Mgd2l0aCBhIGBjYWxsYCBtZXRob2QgaGFzIGEgZnVuY3Rpb24gdHlwZSwgaW4gRGFydCAyCi8vLyBvbmx5IGNsb3N1cmUgY2xhc3NlcyBoYXZlIGEgZnVuY3Rpb24gdHlwZS4KQ2xhc3NGdW5jdGlvblR5cGUgX2NvbXB1dGVGdW5jdGlvblR5cGUoCiAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LCBDbGFzc0VudGl0eSBjbHMpIHsKICBGdW5jdGlvbkVudGl0eSBzaWduYXR1cmVGdW5jdGlvbjsKICBpZiAoY2xzLmlzQ2xvc3VyZSkgewogICAgLy8gVXNlIHNpZ25hdHVyZSBmdW5jdGlvbiBpZiBhdmFpbGFibGUuCiAgICBzaWduYXR1cmVGdW5jdGlvbiA9CiAgICAgICAgZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoY2xzLCBJZGVudGlmaWVycy5zaWduYXR1cmUpOwogICAgaWYgKHNpZ25hdHVyZUZ1bmN0aW9uID09IG51bGwpIHsKICAgICAgLy8gSW4gRGFydCAyLCBhIGNsb3N1cmUgb25seSBuZWVkcyBpdHMgZnVuY3Rpb24gdHlwZSBpZiBpdCBoYXMgYQogICAgICAvLyBzaWduYXR1cmUgZnVuY3Rpb24uCiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0gZWxzZSB7CiAgICAvLyBPbmx5IGNsb3N1cmVzIGhhdmUgZnVuY3Rpb24gdHlwZSBpbiBEYXJ0IDIuCiAgICByZXR1cm4gbnVsbDsKICB9CiAgTWVtYmVyRW50aXR5IGNhbGwgPQogICAgICBlbGVtZW50RW52aXJvbm1lbnQubG9va3VwTG9jYWxDbGFzc01lbWJlcihjbHMsIElkZW50aWZpZXJzLmNhbGwpOwogIGlmIChjYWxsICE9IG51bGwgJiYgY2FsbC5pc0Z1bmN0aW9uKSB7CiAgICBGdW5jdGlvbkVudGl0eSBjYWxsRnVuY3Rpb24gPSBjYWxsOwogICAgRnVuY3Rpb25UeXBlIGNhbGxUeXBlID0gZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShjYWxsRnVuY3Rpb24pOwogICAgcmV0dXJuIG5ldyBDbGFzc0Z1bmN0aW9uVHlwZShjYWxsRnVuY3Rpb24sIGNhbGxUeXBlLCBzaWduYXR1cmVGdW5jdGlvbik7CiAgfQogIHJldHVybiBudWxsOwp9CgpjbGFzcyBSdW50aW1lVHlwZXNFbmNvZGVySW1wbCBpbXBsZW1lbnRzIFJ1bnRpbWVUeXBlc0VuY29kZXIgewogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzOwogIGZpbmFsIFR5cGVSZXByZXNlbnRhdGlvbkdlbmVyYXRvciBfcmVwcmVzZW50YXRpb25HZW5lcmF0b3I7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZCBfcnRpTmVlZDsKICBAb3ZlcnJpZGUKICBmaW5hbCBSdW50aW1lVHlwZVRhZ3MgcnRpVGFnczsKCiAgUnVudGltZVR5cGVzRW5jb2RlckltcGwodGhpcy5ydGlUYWdzLCBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlRGF0YSwKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LCB0aGlzLmNvbW1vbkVsZW1lbnRzLCB0aGlzLl9ydGlOZWVkKQogICAgICA6IF9yZXByZXNlbnRhdGlvbkdlbmVyYXRvciA9CiAgICAgICAgICAgIG5ldyBUeXBlUmVwcmVzZW50YXRpb25HZW5lcmF0b3IocnRpVGFncywgbmF0aXZlRGF0YSk7CgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRvIGRldGVybWluZSBhdCBydW50aW1lIGlmIGEgdHlwZSBvYmplY3QKICAvLy8gaXMgYSBmdW5jdGlvbiB0eXBlLgogIEBvdmVycmlkZQogIGpzQXN0LlRlbXBsYXRlIGdldCB0ZW1wbGF0ZUZvcklzRnVuY3Rpb25UeXBlIHsKICAgIHJldHVybiBfcmVwcmVzZW50YXRpb25HZW5lcmF0b3IudGVtcGxhdGVGb3JJc0Z1bmN0aW9uVHlwZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRvIGRldGVybWluZSBhdCBydW50aW1lIGlmIGEgdHlwZSBvYmplY3QKICAvLy8gaXMgYSBGdXR1cmVPciB0eXBlLgogIEBvdmVycmlkZQogIGpzQXN0LlRlbXBsYXRlIGdldCB0ZW1wbGF0ZUZvcklzRnV0dXJlT3JUeXBlIHsKICAgIHJldHVybiBfcmVwcmVzZW50YXRpb25HZW5lcmF0b3IudGVtcGxhdGVGb3JJc0Z1dHVyZU9yVHlwZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRvIGRldGVybWluZSBhdCBydW50aW1lIGlmIGEgdHlwZSBvYmplY3QKICAvLy8gaXMgdGhlIHZvaWQgdHlwZS4KICBAb3ZlcnJpZGUKICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc1ZvaWRUeXBlIHsKICAgIHJldHVybiBfcmVwcmVzZW50YXRpb25HZW5lcmF0b3IudGVtcGxhdGVGb3JJc1ZvaWRUeXBlOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyB0aGUgZHluYW1pYyB0eXBlLgogIEBvdmVycmlkZQogIGpzQXN0LlRlbXBsYXRlIGdldCB0ZW1wbGF0ZUZvcklzRHluYW1pY1R5cGUgewogICAgcmV0dXJuIF9yZXByZXNlbnRhdGlvbkdlbmVyYXRvci50ZW1wbGF0ZUZvcklzRHluYW1pY1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0pzSW50ZXJvcFR5cGVBcmd1bWVudCB7CiAgICByZXR1cm4gX3JlcHJlc2VudGF0aW9uR2VuZXJhdG9yLnRlbXBsYXRlRm9ySXNKc0ludGVyb3BUeXBlQXJndW1lbnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIGdldFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgRGFydFR5cGUgdHlwZSwgT25WYXJpYWJsZUNhbGxiYWNrIG9uVmFyaWFibGUsCiAgICAgIFtTaG91bGRFbmNvZGVUeXBlZGVmQ2FsbGJhY2sgc2hvdWxkRW5jb2RlVHlwZWRlZl0pIHsKICAgIHJldHVybiBfcmVwcmVzZW50YXRpb25HZW5lcmF0b3IuZ2V0VHlwZVJlcHJlc2VudGF0aW9uKAogICAgICAgIGVtaXR0ZXIsIHR5cGUsIG9uVmFyaWFibGUsIHNob3VsZEVuY29kZVR5cGVkZWYpOwogIH0KCiAgU3RyaW5nIGdldFR5cGVWYXJpYWJsZU5hbWUoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICBTdHJpbmcgbmFtZSA9IHR5cGUuZWxlbWVudC5uYW1lOwogICAgcmV0dXJuIG5hbWUucmVwbGFjZUFsbCgnIycsICdfJyk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIGdldFR5cGVFbmNvZGluZyhNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBEYXJ0VHlwZSB0eXBlLAogICAgICB7Ym9vbCBhbHdheXNHZW5lcmF0ZUZ1bmN0aW9uOiBmYWxzZX0pIHsKICAgIENsYXNzRW50aXR5IGNvbnRleHRDbGFzcyA9IERhcnRUeXBlcy5nZXRDbGFzc0NvbnRleHQodHlwZSk7CiAgICBqc0FzdC5FeHByZXNzaW9uIG9uVmFyaWFibGUoVHlwZVZhcmlhYmxlVHlwZSB2KSB7CiAgICAgIHJldHVybiBuZXcganNBc3QuVmFyaWFibGVVc2UoZ2V0VHlwZVZhcmlhYmxlTmFtZSh2KSk7CiAgICB9CgogICAganNBc3QuRXhwcmVzc2lvbiBlbmNvZGluZyA9CiAgICAgICAgZ2V0VHlwZVJlcHJlc2VudGF0aW9uKGVtaXR0ZXIsIHR5cGUsIG9uVmFyaWFibGUpOwogICAgaWYgKGNvbnRleHRDbGFzcyA9PSBudWxsICYmICFhbHdheXNHZW5lcmF0ZUZ1bmN0aW9uKSB7CiAgICAgIHJldHVybiBlbmNvZGluZzsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8U3RyaW5nPiBwYXJhbWV0ZXJzID0gY29uc3QgPFN0cmluZz5bXTsKICAgICAgaWYgKGNvbnRleHRDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgcGFyYW1ldGVycyA9IF9lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgICAgLmdldFRoaXNUeXBlKGNvbnRleHRDbGFzcykKICAgICAgICAgICAgLnR5cGVBcmd1bWVudHMKICAgICAgICAgICAgLm1hcCgoRGFydFR5cGUgX3R5cGUpIHsKICAgICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZSA9IF90eXBlOwogICAgICAgICAgcmV0dXJuIGdldFR5cGVWYXJpYWJsZU5hbWUodHlwZSk7CiAgICAgICAgfSkudG9MaXN0KCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiAjIH0nLCBbcGFyYW1ldGVycywgZW5jb2RpbmddKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gZ2V0U2lnbmF0dXJlRW5jb2RpbmcoTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBEYXJ0VHlwZSB0eXBlLCBqc0FzdC5FeHByZXNzaW9uIHRoaXNfKSB7CiAgICBDbGFzc0VudGl0eSBjb250ZXh0Q2xhc3MgPSBEYXJ0VHlwZXMuZ2V0Q2xhc3NDb250ZXh0KHR5cGUpOwogICAganNBc3QuRXhwcmVzc2lvbiBlbmNvZGluZyA9CiAgICAgICAgZ2V0VHlwZUVuY29kaW5nKGVtaXR0ZXIsIHR5cGUsIGFsd2F5c0dlbmVyYXRlRnVuY3Rpb246IHRydWUpOwogICAgaWYgKGNvbnRleHRDbGFzcyAhPSBudWxsICYmCiAgICAgICAgLy8gV2Ugb25seSBnZW5lcmF0ZSBmb2xkaW5nIHVzaW5nICdjb21wdXRlU2lnbmF0dXJlJyBpZiBbY29udGV4dENsYXNzXQogICAgICAgIC8vIGhhcyByZWlmaWVkIHR5cGUgYXJndW1lbnRzLiBUaGUgJ2NvbXB1dGVTaWduYXR1cmUnIGZ1bmN0aW9uIG1pZ2h0IG5vdAogICAgICAgIC8vIGJlIGVtaXR0ZWQgKGlmIGl0J3Mgbm90IG5lZWRlZCBlbHNld2hlcmUpIGFuZCB0aGUgZ2VuZXJhdGVkIHNpZ25hdHVyZQogICAgICAgIC8vIHdpbGwgaGF2ZSBgdW5kZWZpbmVkYCBhcyBpdHMgdHlwZSB2YXJpYWJsZXMgaW4gYW55IGNhc2UuCiAgICAgICAgLy8KICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBzcGVjaWZpY2FsbHkgZm9yIC0tbGF4LXJ1bnRpbWUtdHlwZS10by1zdHJpbmcgd2hpY2gKICAgICAgICAvLyBtYXkgcmVxdWlyZSBhIHNpZ25hdHVyZSBvbiBhIG1ldGhvZCB0aGF0IHVzZXMgY2xhc3MgdHlwZSB2YXJpYWJsZXMKICAgICAgICAvLyB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIG5vdCBuZWVkaW5nIHR5cGUgYXJndW1lbnRzIG9uIHRoZSBjbGFzcy4KICAgICAgICBfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjb250ZXh0Q2xhc3MpKSB7CiAgICAgIGpzQXN0Lk5hbWUgY29udGV4dE5hbWUgPSBuYW1lci5jbGFzc05hbWUoY29udGV4dENsYXNzKTsKICAgICAgcmV0dXJuIGpzKCdmdW5jdGlvbiAoKSB7IHJldHVybiAjKCMsICMsICMpOyB9JywgWwogICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMuY29tcHV0ZVNpZ25hdHVyZSksCiAgICAgICAgZW5jb2RpbmcsCiAgICAgICAgdGhpc18sCiAgICAgICAganMucXVvdGVOYW1lKGNvbnRleHROYW1lKQogICAgICBdKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBlbmNvZGluZzsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50cyhpbnQgY291bnQpIHsKICAgIHJldHVybiBfcmVwcmVzZW50YXRpb25HZW5lcmF0b3IuZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50cyhjb3VudCk7CiAgfQp9CgovLy8gRml4ZWQgc3RyaW5ncyB1c2VkIGZvciBydW50aW1lIHR5cGVzIGVuY29kaW5nLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgZGlmZmVyZW50IG5hbWVzIGZvciBtaW5pZmllZCBjb2RlPwpjbGFzcyBSdW50aW1lVHlwZVRhZ3MgewogIGNvbnN0IFJ1bnRpbWVUeXBlVGFncygpOwoKICBTdHJpbmcgZ2V0IHR5cGVkZWZUYWcgPT4gcid0eXBlZGVmJzsKCiAgU3RyaW5nIGdldCBmdW5jdGlvblR5cGVUYWcgPT4gcidmdW5jJzsKCiAgU3RyaW5nIGdldCBmdW5jdGlvblR5cGVWb2lkUmV0dXJuVGFnID0+IHIndic7CgogIFN0cmluZyBnZXQgZnVuY3Rpb25UeXBlUmV0dXJuVHlwZVRhZyA9PiByJ3JldCc7CgogIFN0cmluZyBnZXQgZnVuY3Rpb25UeXBlUmVxdWlyZWRQYXJhbWV0ZXJzVGFnID0+IHInYXJncyc7CgogIFN0cmluZyBnZXQgZnVuY3Rpb25UeXBlT3B0aW9uYWxQYXJhbWV0ZXJzVGFnID0+IHInb3B0JzsKCiAgU3RyaW5nIGdldCBmdW5jdGlvblR5cGVOYW1lZFBhcmFtZXRlcnNUYWcgPT4gciduYW1lZCc7CgogIFN0cmluZyBnZXQgZnVuY3Rpb25UeXBlR2VuZXJpY0JvdW5kc1RhZyA9PiByJ2JvdW5kcyc7CgogIFN0cmluZyBnZXQgZnV0dXJlT3JUYWcgPT4gcidmdXR1cmVPcic7CgogIFN0cmluZyBnZXQgZnV0dXJlT3JUeXBlVGFnID0+IHIndHlwZSc7Cn0KCmNsYXNzIFR5cGVSZXByZXNlbnRhdGlvbkdlbmVyYXRvcgogICAgaW1wbGVtZW50cyBEYXJ0VHlwZVZpc2l0b3I8anNBc3QuRXhwcmVzc2lvbiwgTW9kdWxhckVtaXR0ZXI+IHsKICBmaW5hbCBSdW50aW1lVHlwZVRhZ3MgX3J0aVRhZ3M7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVEYXRhOwoKICBPblZhcmlhYmxlQ2FsbGJhY2sgb25WYXJpYWJsZTsKICBTaG91bGRFbmNvZGVUeXBlZGVmQ2FsbGJhY2sgc2hvdWxkRW5jb2RlVHlwZWRlZjsKICBNYXA8VHlwZVZhcmlhYmxlVHlwZSwganNBc3QuRXhwcmVzc2lvbj4gdHlwZWRlZkJpbmRpbmdzOwogIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyA9IDxGdW5jdGlvblR5cGVWYXJpYWJsZT5bXTsKCiAgVHlwZVJlcHJlc2VudGF0aW9uR2VuZXJhdG9yKHRoaXMuX3J0aVRhZ3MsIHRoaXMuX25hdGl2ZURhdGEpOwoKICAvLy8gQ3JlYXRlcyBhIHR5cGUgcmVwcmVzZW50YXRpb24gZm9yIFt0eXBlXS4gW29uVmFyaWFibGVdIGlzIGNhbGxlZCB0bwogIC8vLyBwcm92aWRlIHRoZSB0eXBlIHJlcHJlc2VudGF0aW9uIGZvciB0eXBlIHZhcmlhYmxlcy4KICBqc0FzdC5FeHByZXNzaW9uIGdldFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgRGFydFR5cGUgdHlwZSwKICAgICAgT25WYXJpYWJsZUNhbGxiYWNrIG9uVmFyaWFibGUsCiAgICAgIFNob3VsZEVuY29kZVR5cGVkZWZDYWxsYmFjayBlbmNvZGVUeXBlZGVmKSB7CiAgICBhc3NlcnQodHlwZWRlZkJpbmRpbmdzID09IG51bGwpOwogICAgdGhpcy5vblZhcmlhYmxlID0gb25WYXJpYWJsZTsKICAgIHRoaXMuc2hvdWxkRW5jb2RlVHlwZWRlZiA9CiAgICAgICAgKGVuY29kZVR5cGVkZWYgIT0gbnVsbCkgPyBlbmNvZGVUeXBlZGVmIDogKFR5cGVkZWZUeXBlIHR5cGUpID0+IGZhbHNlOwogICAganNBc3QuRXhwcmVzc2lvbiByZXByZXNlbnRhdGlvbiA9IHZpc2l0KHR5cGUsIGVtaXR0ZXIpOwogICAgdGhpcy5vblZhcmlhYmxlID0gbnVsbDsKICAgIHRoaXMuc2hvdWxkRW5jb2RlVHlwZWRlZiA9IG51bGw7CiAgICBhc3NlcnQoZnVuY3Rpb25UeXBlVmFyaWFibGVzLmlzRW1wdHkpOwogICAgcmV0dXJuIHJlcHJlc2VudGF0aW9uOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBnZXRKYXZhU2NyaXB0Q2xhc3NOYW1lKAogICAgICBFbnRpdHkgZWxlbWVudCwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgcmV0dXJuIGVtaXR0ZXIudHlwZUFjY2VzcyhlbGVtZW50KTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0RHluYW1pY1ZhbHVlKCkgPT4ganMoJ251bGwnKTsKCiAganNBc3QuRXhwcmVzc2lvbiBnZXRWb2lkVmFsdWUoKSA9PiBqcygnLTEnKTsKCiAganNBc3QuRXhwcmVzc2lvbiBnZXRKc0ludGVyb3BUeXBlQXJndW1lbnRWYWx1ZSgpID0+IGpzKCctMicpOwogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXQoRGFydFR5cGUgdHlwZSwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgPT4KICAgICAgdHlwZS5hY2NlcHQodGhpcywgZW1pdHRlcik7CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRUeXBlVmFyaWFibGVUeXBlKAogICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIGlmICh0eXBlZGVmQmluZGluZ3MgIT0gbnVsbCkgewogICAgICBhc3NlcnQodHlwZWRlZkJpbmRpbmdzW3R5cGVdICE9IG51bGwpOwogICAgICByZXR1cm4gdHlwZWRlZkJpbmRpbmdzW3R5cGVdOwogICAgfQogICAgcmV0dXJuIG9uVmFyaWFibGUodHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoCiAgICAgIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIGludCBwb3NpdGlvbiA9IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5pbmRleE9mKHR5cGUpOwogICAgYXNzZXJ0KHBvc2l0aW9uID49IDApOwogICAgcmV0dXJuIGpzLm51bWJlcihmdW5jdGlvblR5cGVWYXJpYWJsZXMubGVuZ3RoIC0gcG9zaXRpb24gLSAxKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICByZXR1cm4gZ2V0RHluYW1pY1ZhbHVlKCk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIGdldEpzSW50ZXJvcFR5cGVBcmd1bWVudHMoaW50IGNvdW50LAogICAgICB7anNBc3QuRXhwcmVzc2lvbiBuYW1lfSkgewogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBlbGVtZW50cyA9IDxqc0FzdC5FeHByZXNzaW9uPltdOwogICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICBlbGVtZW50cy5hZGQobmFtZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgZWxlbWVudHMuYWRkKGdldEpzSW50ZXJvcFR5cGVBcmd1bWVudFZhbHVlKCkpOwogICAgfQogICAgcmV0dXJuIG5ldyBqc0FzdC5BcnJheUluaXRpYWxpemVyKGVsZW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRJbnRlcmZhY2VUeXBlKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gbmFtZSA9IGdldEphdmFTY3JpcHRDbGFzc05hbWUodHlwZS5lbGVtZW50LCBlbWl0dGVyKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gcmVzdWx0OwogICAgaWYgKHR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIHJlc3VsdCA9IG5hbWU7CiAgICB9IGVsc2UgewogICAgICAvLyBWaXNpdCBhbGwgdHlwZSBhcmd1bWVudHMuIFRoaXMgaXMgZG9uZSBldmVuIGZvciBqc2ludGVyb3AgY2xhc3NlcyB0bwogICAgICAvLyBlbmZvcmNlIHRoZSBpbnZhcmlhbnQgdGhhdCBbb25WYXJpYWJsZV0gaXMgY2FsbGVkIGZvciBlYWNoIHR5cGUKICAgICAgLy8gdmFyaWFibGUgaW4gdGhlIHR5cGUuCiAgICAgIHJlc3VsdCA9IHZpc2l0TGlzdCh0eXBlLnR5cGVBcmd1bWVudHMsIGVtaXR0ZXIsIGhlYWQ6IG5hbWUpOwogICAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgICAgLy8gUmVwbGFjZSB0eXBlIGFyZ3VtZW50cyBvZiBnZW5lcmljIGpzaW50ZXJvcCBjbGFzc2VzIHdpdGggJ2FueScgdHlwZS4KICAgICAgICByZXN1bHQgPQogICAgICAgICAgICBnZXRKc0ludGVyb3BUeXBlQXJndW1lbnRzKHR5cGUudHlwZUFyZ3VtZW50cy5sZW5ndGgsIG5hbWU6IG5hbWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdExpc3QoTGlzdDxEYXJ0VHlwZT4gdHlwZXMsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIHtqc0FzdC5FeHByZXNzaW9uIGhlYWR9KSB7CiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGVsZW1lbnRzID0gPGpzQXN0LkV4cHJlc3Npb24+W107CiAgICBpZiAoaGVhZCAhPSBudWxsKSB7CiAgICAgIGVsZW1lbnRzLmFkZChoZWFkKTsKICAgIH0KICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICBqc0FzdC5FeHByZXNzaW9uIGVsZW1lbnQgPSB2aXNpdCh0eXBlLCBlbWl0dGVyKTsKICAgICAgaWYgKGVsZW1lbnQgaXMganNBc3QuTGl0ZXJhbE51bGwpIHsKICAgICAgICBlbGVtZW50cy5hZGQobmV3IGpzQXN0LkFycmF5SG9sZSgpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbGVtZW50cy5hZGQoZWxlbWVudCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcihlbGVtZW50cyk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIGEgZnVuY3Rpb24gdHlwZS4KICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0Z1bmN0aW9uVHlwZSB7CiAgICByZXR1cm4ganNBc3QuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCInJHtfcnRpVGFncy5mdW5jdGlvblR5cGVUYWd9JyBpbiAjIik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIGEgRnV0dXJlT3IgdHlwZS4KICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0Z1dHVyZU9yVHlwZSB7CiAgICByZXR1cm4ganNBc3QuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCInJHtfcnRpVGFncy5mdXR1cmVPclRhZ30nIGluICMiKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRvIGRldGVybWluZSBhdCBydW50aW1lIGlmIGEgdHlwZSBvYmplY3QKICAvLy8gaXMgdGhlIHZvaWQgdHlwZS4KICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc1ZvaWRUeXBlIHsKICAgIHJldHVybiBqc0FzdC5qcy5leHByZXNzaW9uVGVtcGxhdGVGb3IoIiMgPT09IC0xIik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIHRoZSBkeW5hbWljIHR5cGUuCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNEeW5hbWljVHlwZSB7CiAgICByZXR1cm4ganNBc3QuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIjID09IG51bGwiKTsKICB9CgogIGpzQXN0LlRlbXBsYXRlIGdldCB0ZW1wbGF0ZUZvcklzSnNJbnRlcm9wVHlwZUFyZ3VtZW50IHsKICAgIHJldHVybiBqc0FzdC5qcy5leHByZXNzaW9uVGVtcGxhdGVGb3IoIiMgPT09IC0yIik7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0RnVuY3Rpb25UeXBlKAogICAgICBGdW5jdGlvblR5cGUgdHlwZSwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgTGlzdDxqc0FzdC5Qcm9wZXJ0eT4gcHJvcGVydGllcyA9IDxqc0FzdC5Qcm9wZXJ0eT5bXTsKCiAgICB2b2lkIGFkZFByb3BlcnR5KFN0cmluZyBuYW1lLCBqc0FzdC5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgIHByb3BlcnRpZXMuYWRkKG5ldyBqc0FzdC5Qcm9wZXJ0eShqcy5zdHJpbmcobmFtZSksIHZhbHVlKSk7CiAgICB9CgogICAgLy8gVHlwZSByZXByZXNlbnRhdGlvbnMgZm9yIGZ1bmN0aW9ucyBoYXZlIGEgcHJvcGVydHkgd2hpY2ggaXMgYSB0YWcgbWFya2luZwogICAgLy8gdGhlbSBhcyBmdW5jdGlvbiB0eXBlcy4gVGhlIHZhbHVlIGlzIG5vdCB1c2VkLCBzbyAnMScgaXMganVzdCBhIGR1bW15LgogICAgYWRkUHJvcGVydHkoX3J0aVRhZ3MuZnVuY3Rpb25UeXBlVGFnLCBqcy5udW1iZXIoMSkpOwoKICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICAvLyBHZW5lcmljIGZ1bmN0aW9uIHR5cGVzIGhhdmUgdHlwZSBwYXJhbWV0ZXJzIHdoaWNoIGFyZSByZWR1Y2VkIHRvIGRlCiAgICAgIC8vIEJydWlqbiBpbmRleGVzLgogICAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcy5yZXZlcnNlZCkgewogICAgICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5hZGQodmFyaWFibGUpOwogICAgICB9CiAgICAgIC8vIFRPRE8oc3JhKTogVGhpcyBlbWl0cyBgUC5PYmplY3RgIGZvciB0aGUgY29tbW9uIHVuYm91bmRlZCBjYXNlLiBXZQogICAgICAvLyBjb3VsZCByZXBsYWNlIHRoZSBPYmplY3QgYm91bmRzIHdpdGggYW4gYXJyYXkgaG9sZSBmb3IgYSBjb21wYWN0IGBbLCxdYAogICAgICAvLyByZXByZXNlbnRhdGlvbi4KICAgICAgYWRkUHJvcGVydHkoX3J0aVRhZ3MuZnVuY3Rpb25UeXBlR2VuZXJpY0JvdW5kc1RhZywKICAgICAgICAgIHZpc2l0TGlzdCh0eXBlLnR5cGVWYXJpYWJsZXMubWFwKCh2KSA9PiB2LmJvdW5kKS50b0xpc3QoKSwgZW1pdHRlcikpOwogICAgfQoKICAgIGlmICghdHlwZS5yZXR1cm5UeXBlLnRyZWF0QXNEeW5hbWljKSB7CiAgICAgIGFkZFByb3BlcnR5KAogICAgICAgICAgX3J0aVRhZ3MuZnVuY3Rpb25UeXBlUmV0dXJuVHlwZVRhZywgdmlzaXQodHlwZS5yZXR1cm5UeXBlLCBlbWl0dGVyKSk7CiAgICB9CiAgICBpZiAoIXR5cGUucGFyYW1ldGVyVHlwZXMuaXNFbXB0eSkgewogICAgICBhZGRQcm9wZXJ0eShfcnRpVGFncy5mdW5jdGlvblR5cGVSZXF1aXJlZFBhcmFtZXRlcnNUYWcsCiAgICAgICAgICB2aXNpdExpc3QodHlwZS5wYXJhbWV0ZXJUeXBlcywgZW1pdHRlcikpOwogICAgfQogICAgaWYgKCF0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuaXNFbXB0eSkgewogICAgICBhZGRQcm9wZXJ0eShfcnRpVGFncy5mdW5jdGlvblR5cGVPcHRpb25hbFBhcmFtZXRlcnNUYWcsCiAgICAgICAgICB2aXNpdExpc3QodHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBlbWl0dGVyKSk7CiAgICB9CiAgICBpZiAoIXR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcy5pc0VtcHR5KSB7CiAgICAgIExpc3Q8anNBc3QuUHJvcGVydHk+IG5hbWVkQXJndW1lbnRzID0gPGpzQXN0LlByb3BlcnR5PltdOwogICAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSB0eXBlLm5hbWVkUGFyYW1ldGVyczsKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZXMgPSB0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXM7CiAgICAgIGFzc2VydCh0eXBlcy5sZW5ndGggPT0gbmFtZXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgIGpzQXN0LkV4cHJlc3Npb24gbmFtZSA9IGpzLnN0cmluZyhuYW1lc1tpbmRleF0pOwogICAgICAgIG5hbWVkQXJndW1lbnRzCiAgICAgICAgICAgIC5hZGQobmV3IGpzQXN0LlByb3BlcnR5KG5hbWUsIHZpc2l0KHR5cGVzW2luZGV4XSwgZW1pdHRlcikpKTsKICAgICAgfQogICAgICBhZGRQcm9wZXJ0eShfcnRpVGFncy5mdW5jdGlvblR5cGVOYW1lZFBhcmFtZXRlcnNUYWcsCiAgICAgICAgICBuZXcganNBc3QuT2JqZWN0SW5pdGlhbGl6ZXIobmFtZWRBcmd1bWVudHMpKTsKICAgIH0KCiAgICAvLyBFeGl0IGdlbmVyaWMgZnVuY3Rpb24gc2NvcGUuCiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgZnVuY3Rpb25UeXBlVmFyaWFibGVzLmxlbmd0aCAtPSB0eXBlLnR5cGVWYXJpYWJsZXMubGVuZ3RoOwogICAgfQoKICAgIHJldHVybiBuZXcganNBc3QuT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgdHlwZSwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgcmV0dXJuIGdldFZvaWRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIGJvb2wgc2hvdWxkRW5jb2RlID0gc2hvdWxkRW5jb2RlVHlwZWRlZih0eXBlKTsKICAgIERhcnRUeXBlIHVuYWxpYXNlZFR5cGUgPSB0eXBlLnVuYWxpYXNlZDsKCiAgICB2YXIgb2xkQmluZGluZ3MgPSB0eXBlZGVmQmluZGluZ3M7CiAgICBpZiAodHlwZWRlZkJpbmRpbmdzID09IG51bGwpIHsKICAgICAgLy8gRmlyc3QgbGV2ZWwgdHlwZWRlZiAtIGNhcHR1cmUgYXJndW1lbnRzIGZvciByZS11c2Ugd2l0aGluIHR5cGVkZWYgYm9keS4KICAgICAgLy8KICAgICAgLy8gVGhlIHR5cGUgYE1hcDxULCBGb288U2V0PFQ+Pj5gIGNvbnRhaW5zIG9uZSB0eXBlIHZhcmlhYmxlIHJlZmVyZW5jZWQKICAgICAgLy8gdHdpY2UsIHNvIHRoZXJlIGFyZSB0d28gaW5wdXRzIGludG8gdGhlIEhUeXBlSW5mb0V4cHJlc3Npb24KICAgICAgLy8gaW5zdHJ1Y3Rpb24uCiAgICAgIC8vCiAgICAgIC8vIElmIEZvbyBpcyBhIHR5cGVkZWYsIFQgY2FuIGJlIHJldXNlZCwgZS5nLgogICAgICAvLwogICAgICAvLyAgICAgdHlwZWRlZiBFIEZvbzxFPihFIGEsIEUgYik7CiAgICAgIC8vCiAgICAgIC8vIEFzIHRoZSB0eXBlZGVmIGlzIGV4cGFuZGVkICh0byAoU2V0PFQ+LCBTZXQ8VD4pID0+IFNldDxUPikgaXQgc2hvdWxkCiAgICAgIC8vIG5vdCBjb25zdW1lIGFkZGl0aW9uYWwgdHlwZXMgZnJvbSB0aGUgdG8tbGV2ZWwgaW5wdXQuICBXZSBwcmV2ZW50IHRoaXMKICAgICAgLy8gYnkgY2FwdHVyaW5nIHRoZSB0eXBlcyBhbmQgdXNpbmcgdGhlIGNhcHR1cmVkIHR5cGUgZXhwcmVzc2lvbnMgaW5zaWRlCiAgICAgIC8vIHRoZSB0eXBlZGVmIGV4cGFuc2lvbi4KICAgICAgLy8KICAgICAgLy8gVE9ETyhzcmEpOiBXZSBzaG91bGQgbWFrZSB0aGUgdHlwZSBzdWJleHByZXNzaW9uIEZvbzwuLi4+IGJlIGEgc2Vjb25kCiAgICAgIC8vIEhUeXBlSW5mb0V4cHJlc3Npb24sIHdpdGggU2V0PFQ+IGFzIGl0cyBpbnB1dCAoYSB0aGlyZAogICAgICAvLyBIVHlwZUluZm9FeHByZXNzaW9uKS4gVGhpcyB3b3VsZCBzaGFyZSBhbGwgdGhlIFNldDxUPiBzdWJleHByZXNzaW9ucwogICAgICAvLyBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZW0uIFRoaXMgd291bGQgcmVxdWlyZSBIVHlwZUluZm9FeHByZXNzaW9uCiAgICAgIC8vIGlucHV0cyB0byBjb3JyZXNwb25kIHRvIHR5cGUgdmFyaWFibGVzIEFORCB0eXBlZGVmcy4KICAgICAgdHlwZWRlZkJpbmRpbmdzID0gPFR5cGVWYXJpYWJsZVR5cGUsIGpzQXN0LkV4cHJlc3Npb24+e307CiAgICAgIHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkgewogICAgICAgIHR5cGVkZWZCaW5kaW5nc1t2YXJpYWJsZV0gPSBvblZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgfSk7CiAgICB9CgogICAganNBc3QuRXhwcmVzc2lvbiBmaW5pc2goanNBc3QuRXhwcmVzc2lvbiByZXN1bHQpIHsKICAgICAgdHlwZWRlZkJpbmRpbmdzID0gb2xkQmluZGluZ3M7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgaWYgKHNob3VsZEVuY29kZSkgewogICAgICBqc0FzdC5PYmplY3RJbml0aWFsaXplciBpbml0aWFsaXplciA9IHZpc2l0KHVuYWxpYXNlZFR5cGUsIGVtaXR0ZXIpOwogICAgICAvLyBXZSBoYXZlIHRvIGVuY29kZSB0aGUgYWxpYXNlZCB0eXBlLgogICAgICBqc0FzdC5FeHByZXNzaW9uIG5hbWUgPSBnZXRKYXZhU2NyaXB0Q2xhc3NOYW1lKHR5cGUuZWxlbWVudCwgZW1pdHRlcik7CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gZW5jb2RlZFR5cGVkZWYgPSB0eXBlLnRyZWF0QXNSYXcKICAgICAgICAgID8gbmFtZQogICAgICAgICAgOiB2aXNpdExpc3QodHlwZS50eXBlQXJndW1lbnRzLCBlbWl0dGVyLCBoZWFkOiBuYW1lKTsKCiAgICAgIC8vIEFkZCBpdCB0byB0aGUgZnVuY3Rpb24tdHlwZSBvYmplY3QuCiAgICAgIGpzQXN0LkxpdGVyYWxTdHJpbmcgdGFnID0ganMuc3RyaW5nKF9ydGlUYWdzLnR5cGVkZWZUYWcpOwogICAgICBpbml0aWFsaXplci5wcm9wZXJ0aWVzLmFkZChuZXcganNBc3QuUHJvcGVydHkodGFnLCBlbmNvZGVkVHlwZWRlZikpOwogICAgICByZXR1cm4gZmluaXNoKGluaXRpYWxpemVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmaW5pc2godmlzaXQodW5hbGlhc2VkVHlwZSwgZW1pdHRlcikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEZ1dHVyZU9yVHlwZSgKICAgICAgRnV0dXJlT3JUeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIExpc3Q8anNBc3QuUHJvcGVydHk+IHByb3BlcnRpZXMgPSA8anNBc3QuUHJvcGVydHk+W107CgogICAgdm9pZCBhZGRQcm9wZXJ0eShTdHJpbmcgbmFtZSwganNBc3QuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBwcm9wZXJ0aWVzLmFkZChuZXcganNBc3QuUHJvcGVydHkoanMuc3RyaW5nKG5hbWUpLCB2YWx1ZSkpOwogICAgfQoKICAgIC8vIFR5cGUgcmVwcmVzZW50YXRpb25zIGZvciBGdXR1cmVPciBoYXZlIGEgcHJvcGVydHkgd2hpY2ggaXMgYSB0YWcgbWFya2luZwogICAgLy8gdGhlbSBhcyBGdXR1cmVPciB0eXBlcy4gVGhlIHZhbHVlIGlzIG5vdCB1c2VkLCBzbyAnMScgaXMganVzdCBhIGR1bW15LgogICAgYWRkUHJvcGVydHkoX3J0aVRhZ3MuZnV0dXJlT3JUYWcsIGpzLm51bWJlcigxKSk7CiAgICBpZiAoIXR5cGUudHlwZUFyZ3VtZW50LnRyZWF0QXNEeW5hbWljKSB7CiAgICAgIGFkZFByb3BlcnR5KF9ydGlUYWdzLmZ1dHVyZU9yVHlwZVRhZywgdmlzaXQodHlwZS50eXBlQXJndW1lbnQsIGVtaXR0ZXIpKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IGpzQXN0Lk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMpOwogIH0KfQoKY2xhc3MgVHlwZUNoZWNrTWFwcGluZyBpbXBsZW1lbnRzIFR5cGVDaGVja3MgewogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NDaGVja3M+IG1hcCA9IG5ldyBNYXA8Q2xhc3NFbnRpdHksIENsYXNzQ2hlY2tzPigpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0NoZWNrcyBvcGVyYXRvciBbXShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBDbGFzc0NoZWNrcyByZXN1bHQgPSBtYXBbZWxlbWVudF07CiAgICByZXR1cm4gcmVzdWx0ICE9IG51bGwgPyByZXN1bHQgOiBjb25zdCBDbGFzc0NoZWNrcy5lbXB0eSgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oQ2xhc3NFbnRpdHkgZWxlbWVudCwgQ2xhc3NDaGVja3MgY2hlY2tzKSB7CiAgICBtYXBbZWxlbWVudF0gPSBjaGVja3M7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGNsYXNzZXMgPT4gbWFwLmtleXM7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoQ2xhc3NFbnRpdHkgaG9sZGVyIGluIGNsYXNzZXMpIHsKICAgICAgZm9yIChUeXBlQ2hlY2sgY2hlY2sgaW4gdGhpc1tob2xkZXJdLmNoZWNrcykgewogICAgICAgIHNiLndyaXRlKCcke2hvbGRlci5uYW1lfSA8OiAke2NoZWNrLmNscy5uYW1lfSwgJyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAnWyRzYl0nOwogIH0KfQoKY2xhc3MgQXJndW1lbnRDb2xsZWN0b3IgZXh0ZW5kcyBEYXJ0VHlwZVZpc2l0b3I8ZHluYW1pYywgYm9vbD4gewogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIHZvaWQgYWRkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBjbGFzc2VzLmFkZChjbHMpOwogIH0KCiAgY29sbGVjdChEYXJ0VHlwZSB0eXBlLCB7Ym9vbCBpc1R5cGVBcmd1bWVudDogZmFsc2V9KSB7CiAgICB2aXNpdCh0eXBlLCBpc1R5cGVBcmd1bWVudCk7CiAgfQoKICAvLy8gQ29sbGVjdCBhbGwgdHlwZXMgaW4gdGhlIGxpc3QgYXMgaWYgdGhleSB3ZXJlIGFyZ3VtZW50cyBvZiBhbgogIC8vLyBJbnRlcmZhY2VUeXBlLgogIGNvbGxlY3RBbGwoTGlzdDxEYXJ0VHlwZT4gdHlwZXMsIHtib29sIGlzVHlwZUFyZ3VtZW50OiBmYWxzZX0pIHsKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICB2aXNpdCh0eXBlLCB0cnVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgdHlwZSwgYm9vbCBpc1R5cGVBcmd1bWVudCkgewogICAgY29sbGVjdCh0eXBlLnVuYWxpYXNlZCwgaXNUeXBlQXJndW1lbnQ6IGlzVHlwZUFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsIGJvb2wgaXNUeXBlQXJndW1lbnQpIHsKICAgIGlmIChpc1R5cGVBcmd1bWVudCkgYWRkQ2xhc3ModHlwZS5lbGVtZW50KTsKICAgIGNvbGxlY3RBbGwodHlwZS50eXBlQXJndW1lbnRzLCBpc1R5cGVBcmd1bWVudDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgdHlwZSwgXykgewogICAgY29sbGVjdCh0eXBlLnJldHVyblR5cGUsIGlzVHlwZUFyZ3VtZW50OiB0cnVlKTsKICAgIGNvbGxlY3RBbGwodHlwZS5wYXJhbWV0ZXJUeXBlcywgaXNUeXBlQXJndW1lbnQ6IHRydWUpOwogICAgY29sbGVjdEFsbCh0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIGlzVHlwZUFyZ3VtZW50OiB0cnVlKTsKICAgIGNvbGxlY3RBbGwodHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBpc1R5cGVBcmd1bWVudDogdHJ1ZSk7CiAgfQp9CgpjbGFzcyBGdW5jdGlvbkFyZ3VtZW50Q29sbGVjdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGR5bmFtaWMsIGJvb2w+IHsKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBGdW5jdGlvbkFyZ3VtZW50Q29sbGVjdG9yKCk7CgogIGNvbGxlY3QoRGFydFR5cGUgdHlwZSwge2Jvb2wgaW5GdW5jdGlvblR5cGU6IGZhbHNlfSkgewogICAgdmlzaXQodHlwZSwgaW5GdW5jdGlvblR5cGUpOwogIH0KCiAgY29sbGVjdEFsbChJdGVyYWJsZTxEYXJ0VHlwZT4gdHlwZXMsIHtib29sIGluRnVuY3Rpb25UeXBlOiBmYWxzZX0pIHsKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICB2aXNpdCh0eXBlLCBpbkZ1bmN0aW9uVHlwZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIGJvb2wgaW5GdW5jdGlvblR5cGUpIHsKICAgIGNvbGxlY3QodHlwZS51bmFsaWFzZWQsIGluRnVuY3Rpb25UeXBlOiBpbkZ1bmN0aW9uVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLCBib29sIGluRnVuY3Rpb25UeXBlKSB7CiAgICBpZiAoaW5GdW5jdGlvblR5cGUpIHsKICAgICAgY2xhc3Nlcy5hZGQodHlwZS5lbGVtZW50KTsKICAgIH0KICAgIGNvbGxlY3RBbGwodHlwZS50eXBlQXJndW1lbnRzLCBpbkZ1bmN0aW9uVHlwZTogaW5GdW5jdGlvblR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUsIF8pIHsKICAgIGNvbGxlY3QodHlwZS5yZXR1cm5UeXBlLCBpbkZ1bmN0aW9uVHlwZTogdHJ1ZSk7CiAgICBjb2xsZWN0QWxsKHR5cGUucGFyYW1ldGVyVHlwZXMsIGluRnVuY3Rpb25UeXBlOiB0cnVlKTsKICAgIGNvbGxlY3RBbGwodHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBpbkZ1bmN0aW9uVHlwZTogdHJ1ZSk7CiAgICBjb2xsZWN0QWxsKHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcywgaW5GdW5jdGlvblR5cGU6IHRydWUpOwogICAgY29sbGVjdEFsbCh0eXBlLnR5cGVWYXJpYWJsZXMubWFwKCh0eXBlKSA9PiB0eXBlLmJvdW5kKSwKICAgICAgICBpbkZ1bmN0aW9uVHlwZTogdHJ1ZSk7CiAgfQp9CgplbnVtIFR5cGVWaXNpdG9yU3RhdGUgewogIGRpcmVjdCwKICBjb3ZhcmlhbnRUeXBlQXJndW1lbnQsCiAgY29udHJhdmFyaWFudFR5cGVBcmd1bWVudCwKICB0eXBlTGl0ZXJhbCwKfQoKY2xhc3MgVHlwZVZpc2l0b3IgZXh0ZW5kcyBEYXJ0VHlwZVZpc2l0b3I8dm9pZCwgVHlwZVZpc2l0b3JTdGF0ZT4gewogIFNldDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gX3Zpc2l0ZWRGdW5jdGlvblR5cGVWYXJpYWJsZXMgPQogICAgICBuZXcgU2V0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPigpOwoKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKENsYXNzRW50aXR5IGVudGl0eSwge1R5cGVWaXNpdG9yU3RhdGUgc3RhdGV9KSBvbkNsYXNzOwogIGZpbmFsIHZvaWQgRnVuY3Rpb24oVHlwZVZhcmlhYmxlRW50aXR5IGVudGl0eSwge1R5cGVWaXNpdG9yU3RhdGUgc3RhdGV9KQogICAgICBvblR5cGVWYXJpYWJsZTsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKEZ1bmN0aW9uVHlwZSB0eXBlLCB7VHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZX0pCiAgICAgIG9uRnVuY3Rpb25UeXBlOwoKICBUeXBlVmlzaXRvcih7dGhpcy5vbkNsYXNzLCB0aGlzLm9uVHlwZVZhcmlhYmxlLCB0aGlzLm9uRnVuY3Rpb25UeXBlfSk7CgogIHZpc2l0VHlwZShEYXJ0VHlwZSB0eXBlLCBUeXBlVmlzaXRvclN0YXRlIHN0YXRlKSA9PiB0eXBlLmFjY2VwdCh0aGlzLCBzdGF0ZSk7CgogIFR5cGVWaXNpdG9yU3RhdGUgY292YXJpYW50QXJndW1lbnQoVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgewogICAgc3dpdGNoIChzdGF0ZSkgewogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0OgogICAgICAgIHJldHVybiBUeXBlVmlzaXRvclN0YXRlLmNvdmFyaWFudFR5cGVBcmd1bWVudDsKICAgICAgY2FzZSBUeXBlVmlzaXRvclN0YXRlLmNvdmFyaWFudFR5cGVBcmd1bWVudDoKICAgICAgICByZXR1cm4gVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQ7CiAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5jb250cmF2YXJpYW50VHlwZUFyZ3VtZW50OgogICAgICAgIHJldHVybiBUeXBlVmlzaXRvclN0YXRlLmNvbnRyYXZhcmlhbnRUeXBlQXJndW1lbnQ7CiAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS50eXBlTGl0ZXJhbDoKICAgICAgICByZXR1cm4gVHlwZVZpc2l0b3JTdGF0ZS50eXBlTGl0ZXJhbDsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIFR5cGVWaXNpdG9yU3RhdGUgJHN0YXRlIik7CiAgfQoKICBUeXBlVmlzaXRvclN0YXRlIGNvbnRyYXZhcmlhbnRBcmd1bWVudChUeXBlVmlzaXRvclN0YXRlIHN0YXRlKSB7CiAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5kaXJlY3Q6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUuY29udHJhdmFyaWFudFR5cGVBcmd1bWVudDsKICAgICAgY2FzZSBUeXBlVmlzaXRvclN0YXRlLmNvdmFyaWFudFR5cGVBcmd1bWVudDoKICAgICAgICByZXR1cm4gVHlwZVZpc2l0b3JTdGF0ZS5jb250cmF2YXJpYW50VHlwZUFyZ3VtZW50OwogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuY29udHJhdmFyaWFudFR5cGVBcmd1bWVudDoKICAgICAgICByZXR1cm4gVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQ7CiAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS50eXBlTGl0ZXJhbDoKICAgICAgICByZXR1cm4gVHlwZVZpc2l0b3JTdGF0ZS50eXBlTGl0ZXJhbDsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIFR5cGVWaXNpdG9yU3RhdGUgJHN0YXRlIik7CiAgfQoKICB2aXNpdFR5cGVzKExpc3Q8RGFydFR5cGU+IHR5cGVzLCBUeXBlVmlzaXRvclN0YXRlIHN0YXRlKSB7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgdmlzaXRUeXBlKHR5cGUsIHN0YXRlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlVmFyaWFibGVUeXBlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgewogICAgaWYgKG9uVHlwZVZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgb25UeXBlVmFyaWFibGUodHlwZS5lbGVtZW50LCBzdGF0ZTogc3RhdGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwgVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgewogICAgaWYgKG9uQ2xhc3MgIT0gbnVsbCkgewogICAgICBvbkNsYXNzKHR5cGUuZWxlbWVudCwgc3RhdGU6IHN0YXRlKTsKICAgIH0KICAgIHZpc2l0VHlwZXModHlwZS50eXBlQXJndW1lbnRzLCBjb3ZhcmlhbnRBcmd1bWVudChzdGF0ZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUsIFR5cGVWaXNpdG9yU3RhdGUgc3RhdGUpIHsKICAgIGlmIChvbkZ1bmN0aW9uVHlwZSAhPSBudWxsKSB7CiAgICAgIG9uRnVuY3Rpb25UeXBlKHR5cGUsIHN0YXRlOiBzdGF0ZSk7CiAgICB9CiAgICAvLyBWaXNpdCBhbGwgbmVzdGVkIHR5cGVzIGFzIHR5cGUgYXJndW1lbnRzOyB0aGVzZSB0eXBlcyBhcmUgbm90IHJ1bnRpbWUKICAgIC8vIGluc3RhbmNlcyBidXQgcnVudGltZSB0eXBlIHJlcHJlc2VudGF0aW9ucy4KICAgIHZpc2l0VHlwZSh0eXBlLnJldHVyblR5cGUsIGNvdmFyaWFudEFyZ3VtZW50KHN0YXRlKSk7CiAgICB2aXNpdFR5cGVzKHR5cGUucGFyYW1ldGVyVHlwZXMsIGNvbnRyYXZhcmlhbnRBcmd1bWVudChzdGF0ZSkpOwogICAgdmlzaXRUeXBlcyh0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIGNvbnRyYXZhcmlhbnRBcmd1bWVudChzdGF0ZSkpOwogICAgdmlzaXRUeXBlcyh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMsIGNvbnRyYXZhcmlhbnRBcmd1bWVudChzdGF0ZSkpOwogICAgX3Zpc2l0ZWRGdW5jdGlvblR5cGVWYXJpYWJsZXMucmVtb3ZlQWxsKHR5cGUudHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIFR5cGVWaXNpdG9yU3RhdGUgc3RhdGUpIHsKICAgIHZpc2l0VHlwZSh0eXBlLnVuYWxpYXNlZCwgc3RhdGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZShGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlLCBUeXBlVmlzaXRvclN0YXRlIHN0YXRlKSB7CiAgICBpZiAoX3Zpc2l0ZWRGdW5jdGlvblR5cGVWYXJpYWJsZXMuYWRkKHR5cGUpKSB7CiAgICAgIHZpc2l0VHlwZSh0eXBlLmJvdW5kLCBzdGF0ZSk7CiAgICB9CiAgfQp9CgovLy8gUnVudGltZSB0eXBlIHVzYWdlIGZvciBhIGNsYXNzLgpjbGFzcyBDbGFzc1VzZSB7CiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5zdGFudGlhdGVkLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYEFgIGFuZCBgQmAgaW46CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHt9CiAgLy8vICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7fQogIC8vLyAgICAgbWFpbigpID0+IG5ldyBCKCk7CiAgLy8vCiAgYm9vbCBpbnN0YW5jZSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgZGlyZWN0bHkgaW5zdGFudGlhdGVkLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYEJgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiBleHRlbmRzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgQigpOwogIC8vLwogIGJvb2wgZGlyZWN0SW5zdGFuY2UgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgb2JqZWN0cyBhcmUgY2hlY2tlZCB0byBiZSBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYEFgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgbWFpbigpID0+IG51bGwgaXMgQTsKICAvLy8KICBib29sIGNoZWNrZWRJbnN0YW5jZSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgcGFzc2VkIGFzIGEgdHlwZSBhcmd1bWVudCBhdCBydW50aW1lLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYEFgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgbWFpbigpID0+IG5ldyBMaXN0PEE+KCkgaXMgTGlzdDxTdHJpbmc+OwogIC8vLwogIGJvb2wgdHlwZUFyZ3VtZW50ID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRoZSBjbGFzcyBpcyBjaGVja2VkIGFzIGEgdHlwZSBhcmd1bWVudCBhdCBydW50aW1lLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYEFgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgbWFpbigpID0+IG5ldyBMaXN0PFN0cmluZz4oKSBpcyBMaXN0PEE+OwogIC8vLwogIGJvb2wgY2hlY2tlZFR5cGVBcmd1bWVudCA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgdXNlZCBpbiBhIGNvbnN0YW50IHR5cGUgbGl0ZXJhbC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYDoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBBOwogIC8vLwogIGJvb2wgdHlwZUxpdGVyYWwgPSBmYWxzZTsKCiAgLy8vIFRoZSBmdW5jdGlvbiB0eXBlIG9mIHRoZSBjbGFzcywgaWYgYW55LgogIC8vLwogIC8vLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBmdW5jdGlvbiB0eXBlIGlzIG5lZWRlZCBhdCBydW50aW1lLiBGb3IgaW5zdGFuY2UsCiAgLy8vIGlmIG5vIGZ1bmN0aW9uIHR5cGVzIGFyZSBjaGVja2VkIGF0IHJ1bnRpbWUgdGhlbiB0aGUgZnVuY3Rpb24gdHlwZSBpc24ndAogIC8vLyBuZWVkZWQuCiAgLy8vCiAgLy8vIEZ1cnRoZXJtb3JlIG9wdGltaXphdGlvbiBtaWdodCBhbHNvIG9taXQgZnVuY3Rpb24gdHlwZSB0aGF0IGFyZSBrbm93biBub3QKICAvLy8gdG8gYmUgdmFsaWQgaW4gYW55IHN1YnR5cGUgdGVzdC4KICBDbGFzc0Z1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGU7CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGNsYXNzIGlzICdsaXZlJyBlaXRo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dCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CgovLy8gRGF0YSBuZWVkZWQgZm9yIGdlbmVyYXRpbmcgYSBzaWduYXR1cmUgZnVuY3Rpb24gZm9yIHRoZSBmdW5jdGlvbiB0eXBlIG9mCi8vLyBhIGNsYXNzLgpjbGFzcyBDbGFzc0Z1bmN0aW9uVHlwZSB7CiAgLy8vIFRoZSBgY2FsbGAgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIHRoZSBmdW5jdGlvbiB0eXBlLgogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IGNhbGxGdW5jdGlvbjsKCiAgLy8vIFRoZSB0eXBlIG9mIHRoZSBgY2FsbGAgZnVuY3Rpb24uCiAgZmluYWwgRnVuY3Rpb25UeXBlIGNhbGxUeXBlOwoKICAvLy8gVGhlIHNpZ25hdHVyZSBmdW5jdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIHR5cGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgRGFydCAyLgogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IHNpZ25hdHVyZUZ1bmN0aW9uOwoKICBDbGFzc0Z1bmN0aW9uVHlwZSh0aGlzLmNhbGxGdW5jdGlvbiwgdGhpcy5jYWxsVHlwZSwgdGhpcy5zaWduYXR1cmVGdW5jdGlvbik7Cn0KCi8vLyBBIHBhaXIgb2YgYSBjbGFzcyB0aGF0IHdlIG5lZWQgYSBjaGVjayBhZ2FpbnN0IGFuZCB0aGUgdHlwZSBhcmd1bWVudAovLy8gc3Vic3RpdHV0aW9uIGZvciB0aGlzIGNoZWNrLgpjbGFzcyBUeXBlQ2hlY2sgewogIGZpbmFsIENsYXNzRW50aXR5IGNsczsKICBmaW5hbCBib29sIG5lZWRzSXM7CiAgZmluYWwgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGUgPSBfbmV4dEhhc2ggPSAoX25leHRIYXNoICsgMTAwMDAzKS50b1Vuc2lnbmVkKDMwKTsKICBzdGF0aWMgaW50IF9uZXh0SGFzaCA9IDA7CgogIFR5cGVDaGVjayh0aGlzLmNscywgdGhpcy5zdWJzdGl0dXRpb24sIHt0aGlzLm5lZWRzSXM6IHRydWV9KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ1R5cGVDaGVjayhjbHM9JGNscyxuZWVkc0lzPSRuZWVkc0lzLHN1YnN0aXR1dGlvbj0kc3Vic3RpdHV0aW9uKSc7Cn0KCi8vLyBbVHlwZUNoZWNrXXMgbmVlZCBmb3IgYSBzaW5nbGUgY2xhc3MuCmNsYXNzIENsYXNzQ2hlY2tzIHsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFR5cGVDaGVjaz4gX21hcDsKCiAgZmluYWwgQ2xhc3NGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlOwoKICBDbGFzc0NoZWNrcyh0aGlzLmZ1bmN0aW9uVHlwZSkgOiBfbWFwID0gPENsYXNzRW50aXR5LCBUeXBlQ2hlY2s+e307CgogIGNvbnN0IENsYXNzQ2hlY2tzLmVtcHR5KCkKICAgICAgOiBfbWFwID0gY29uc3QgPENsYXNzRW50aXR5LCBUeXBlQ2hlY2s+e30sCiAgICAgICAgZnVuY3Rpb25UeXBlID0gbnVsbDsKCiAgdm9pZCBhZGQoVHlwZUNoZWNrIGNoZWNrKSB7CiAgICBfbWFwW2NoZWNrLmNsc10gPSBjaGVjazsKICB9CgogIFR5cGVDaGVjayBvcGVyYXRvciBbXShDbGFzc0VudGl0eSBjbHMpID0+IF9tYXBbY2xzXTsKCiAgSXRlcmFibGU8VHlwZUNoZWNrPiBnZXQgY2hlY2tzID0+IF9tYXAudmFsdWVzOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0NsYXNzQ2hlY2tzKCRjaGVja3MpJzsKICB9Cn0KCi8vLyBGb3IgZWFjaCBjbGFzcywgc3RvcmVzIHRoZSBwb3NzaWJsZSBjbGFzcyBzdWJ0eXBlIHRlc3RzIHRoYXQgY291bGQgc3VjY2VlZC4KYWJzdHJhY3QgY2xhc3MgVHlwZUNoZWNrcyB7CiAgLy8vIEdldCB0aGUgc2V0IG9mIGNoZWNrcyByZXF1aXJlZCBmb3IgY2xhc3MgW2VsZW1lbnRdLgogIENsYXNzQ2hlY2tzIG9wZXJhdG9yIFtdKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gR2V0IHRoZSBpdGVyYWJsZSBmb3IgYWxsIGNsYXNzZXMgdGhhdCBuZWVkIHR5cGUgY2hlY2tzLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgY2xhc3NlczsKfQoKLy8vIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdWJzdGl0dXRpb24gb2YgdHlwZSBhcmd1bWVudHMgd2hlbiBnb2luZyBmcm9tIHRoZQovLy8gdHlwZSBvZiBhIGNsYXNzIHRvIG9uZSBvZiBpdHMgc3VwZXJ0eXBlcy4KLy8vCi8vLyBGb3IgYGNsYXNzIEI8VD4gZXh0ZW5kcyBBPExpc3Q8VD4sIGludD5gLCB0aGUgc3Vic3RpdHV0aW9uIGlzIHRoZQovLy8gcmVwcmVzZW50YXRpb24gb2YgYChUKSA9PiBbPExpc3QsIFQ+LCBpbnRdYC4gRm9yIG1vcmUgZGV0YWlscyBvZiB0aGUKLy8vIHJlcHJlc2VudGF0aW9uIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gb2YgW2dldFN1cGVydHlwZVN1YnN0aXR1dGlvbl0uCi8vVE9ETyhmbG9pdHNjaCk6IFJlbW92ZSBzdXBwb3J0IGZvciBub24tZnVuY3Rpb24gc3Vic3RpdHV0aW9ucy4KY2xhc3MgU3Vic3RpdHV0aW9uIHsKICBmaW5hbCBib29sIGlzVHJpdmlhbDsKICBmaW5hbCBib29sIGlzRnVuY3Rpb247CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlcnM7CiAgZmluYWwgaW50IGxlbmd0aDsKCiAgY29uc3QgU3Vic3RpdHV0aW9uLnRyaXZpYWwoKQogICAgICA6IGlzVHJpdmlhbCA9IHRydWUsCiAgICAgICAgaXNGdW5jdGlvbiA9IGZhbHNlLAogICAgICAgIGxlbmd0aCA9IG51bGwsCiAgICAgICAgYXJndW1lbnRzID0gY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIHBhcmFtZXRlcnMgPSBjb25zdCA8RGFydFR5cGU+W107CgogIFN1YnN0aXR1dGlvbi5saXN0KHRoaXMuYXJndW1lbnRzKQogICAgICA6IGlzVHJpdmlhbCA9IGZhbHNlLAogICAgICAgIGlzRnVuY3Rpb24gPSBmYWxzZSwKICAgICAgICBsZW5ndGggPSBudWxsLAogICAgICAgIHBhcmFtZXRlcnMgPSBjb25zdCA8RGFydFR5cGU+W107CgogIFN1YnN0aXR1dGlvbi5mdW5jdGlvbih0aGlzLmFyZ3VtZW50cywgdGhpcy5wYXJhbWV0ZXJzKQogICAgICA6IGlzVHJpdmlhbCA9IGZhbHNlLAogICAgICAgIGlzRnVuY3Rpb24gPSB0cnVlLAogICAgICAgIGxlbmd0aCA9IG51bGw7CgogIFN1YnN0aXR1dGlvbi5qc0ludGVyb3AodGhpcy5sZW5ndGgpCiAgICAgIDogaXNUcml2aWFsID0gZmFsc2UsCiAgICAgICAgaXNGdW5jdGlvbiA9IGZhbHNlLAogICAgICAgIGFyZ3VtZW50cyA9IGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBwYXJhbWV0ZXJzID0gY29uc3QgPERhcnRUeXBlPltdOwoKICBib29sIGdldCBpc0pzSW50ZXJvcCA9PiBsZW5ndGggIT0gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1N1YnN0aXR1dGlvbihpc1RyaXZpYWw9JGlzVHJpdmlhbCwnCiAgICAgICdpc0Z1bmN0aW9uPSRpc0Z1bmN0aW9uLGlzSnNJbnRlcm9wPSRpc0pzSW50ZXJvcCxhcmd1bWVudHM9JGFyZ3VtZW50cywnCiAgICAgICdwYXJhbWV0ZXJzPSRwYXJhbWV0ZXJzLGxlbmd0aD0kbGVuZ3RoKSc7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGNvbXB1dGluZyBzdWJzdGl0dXRpb25zIG5lZWQgZm9yIHJ1bnRpbWUgdHlwZSBjaGVja3MuCmFic3RyYWN0IGNsYXNzIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgewogIGJvb2wgaXNUcml2aWFsU3Vic3RpdHV0aW9uKENsYXNzRW50aXR5IGNscywgQ2xhc3NFbnRpdHkgY2hlY2spOwoKICBTdWJzdGl0dXRpb24gZ2V0U3Vic3RpdHV0aW9uKENsYXNzRW50aXR5IGNscywgQ2xhc3NFbnRpdHkgb3RoZXIpOwoKICBTZXQ8Q2xhc3NFbnRpdHk+IGdldENsYXNzZXNVc2VkSW5TdWJzdGl0dXRpb25zKFR5cGVDaGVja3MgY2hlY2tzKTsKCiAgc3RhdGljIGJvb2wgaGFzVHlwZUFyZ3VtZW50cyhEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICAgIHJldHVybiAhaW50ZXJmYWNlVHlwZS50cmVhdEFzUmF3OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQqAjgBOTjwBKgEkIQFNDRo6JQEnHwE0Bh8qAU8CAUkhEhkWIwxIHAFAAQwXSQIBKhQqASgBRgEcMR0BHh0EATcBMQEMFiMEAgFQHDowAT4lAgFNLgRGSUxBFRgZIiMUAR8aHBcoKQEkGxwXKQE5GxsXASYbHCgpASoBDDxOMAIBSCtCAUQBRQEwISooBhIEAgE6cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydD9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnTAAEozLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5ydW50aW1lX3R5cGVzX25ldzsKCmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9yZWNpcGVfc3ludGF4LmRhcnQnOwoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcKICAgIHNob3cgQ29tbW9uRWxlbWVudHMsIEpDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvanNfZW1pdHRlci5kYXJ0JyBzaG93IE1vZHVsYXJFbWl0dGVyOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICduYW1lci5kYXJ0JzsKaW1wb3J0ICduYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCcgc2hvdyBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JyBzaG93IFJ1bnRpbWVUeXBlc05lZWQ7CgpjbGFzcyBSZWNpcGVFbmNvZGluZyB7CiAgZmluYWwganNBc3QuTGl0ZXJhbCByZWNpcGU7CiAgZmluYWwgU2V0PFR5cGVWYXJpYWJsZVR5cGU+IHR5cGVWYXJpYWJsZXM7CgogIGNvbnN0IFJlY2lwZUVuY29kaW5nKHRoaXMucmVjaXBlLCB0aGlzLnR5cGVWYXJpYWJsZXMpOwp9CgphYnN0cmFjdCBjbGFzcyBSZWNpcGVFbmNvZGVyIHsKICAvLy8gUmV0dXJucyBhIFtSZWNpcGVFbmNvZGluZ10gcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBbcmVjaXBlXSB0byBiZQogIC8vLyBldmFsdWF0ZWQgYWdhaW5zdCBhIHR5cGUgZW52aXJvbm1lbnQgd2l0aCBzaGFwZSBbc3RydWN0dXJlXS4KICBSZWNpcGVFbmNvZGluZyBlbmNvZGVSZWNpcGUoTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGVudmlyb25tZW50U3RydWN0dXJlLCBUeXBlUmVjaXBlIHJlY2lwZSk7CgogIGpzQXN0LkxpdGVyYWwgZW5jb2RlR3JvdW5kUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsIFR5cGVSZWNpcGUgcmVjaXBlKTsKCiAgLy8vIFJldHVybiB0aGUgcmVjaXBlIHdpdGggdHlwZSB2YXJpYWJsZXMgcmVwbGFjZWQgd2l0aCA8YW55Pi4gVGhpcyBpcyBhIGhhY2sKICAvLy8gdW50aWwgRGFydFR5cGUgY29udGFpbnMgPGFueT4gYW5kIHRoZSBwYXJhbWV0ZXIgc3R1YiBlbWl0dGVyIGlzIHJlcGxhY2VkCiAgLy8vIHdpdGggYW4gU1NBIHBhdGguCiAgLy8gVE9ETygzMzQyMik6IFJlbW92ZSBuZWVkIGZvciB0aGlzLgogIGpzQXN0LkxpdGVyYWwgZW5jb2RlUmVjaXBlV2l0aFZhcmlhYmxlc1JlcGxhY2VCeUFueSgKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgRGFydFR5cGUgZGFydFR5cGUpOwoKICAvLy8gUmV0dXJucyBhIFtqc0FzdC5MaXRlcmFsXSByZXByZXNlbnRpbmcgW3N1cGVydHlwZUFyZ3VtZW50XSB0byBiZSBldmFsdWF0ZWQKICAvLy8gYWdhaW5zdCBhIFtGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlXSByZXByZXNlbnRpbmcgW2RlY2xhcmluZ1R5cGVdLiBBbnkKICAvLy8gW1R5cGVWYXJpYWJsZVR5cGVdcyBhcHBlYXJpbmcgaW4gW3N1cGVydHlwZUFyZ3VtZW50XSB3aGljaCBhcmUgZGVjbGFyZWQgYnkKICAvLy8gW2RlY2xhcmluZ1R5cGVdIGFyZSBhbHdheXMgZW5jb2RlZCBhcyBpbmRpY2VzLgogIGpzQXN0LkxpdGVyYWwgZW5jb2RlRGlyZWN0U3VwZXJ0eXBlUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIEludGVyZmFjZVR5cGUgZGVjbGFyaW5nVHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlQXJndW1lbnQpOwoKICAvLy8gQ29udmVydHMgYSByZWNpcGUgaW50byBhIGZyYWdtZW50IG9mIGNvZGUgdGhhdCBhY2Nlc3NlcyB0aGUgZXZhbHVhdGVkCiAgLy8vIHJlY2lwZS4KICAvLyBUT0RPKDMzNDIyKTogUmVtb3ZlIG5lZWQgZm9yIHRoaXMgYnkgcHVzaGluZyBzdHVicyB0aHJvdWdoIFNTQS4KICBqc0FzdC5FeHByZXNzaW9uIGV2YWx1YXRlUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsIGpzQXN0LkxpdGVyYWwgcmVjaXBlKTsKCiAgLy8gVE9ETyhzcmEpOiBTdGlsbCBuZWVkIGEgJHNpZ25hdHVyZSBmdW5jdGlvbiB3aGVuIHRoZSBmdW5jdGlvbiB0eXBlIGlzIGEKICAvLyBmdW5jdGlvbiBvZiBjbG9zZWQgdHlwZSB2YXJpYWJsZXMuIFNlZSBpZiB0aGUgJHNpZ25hdHVyZSBtZXRob2QgY2FuIGFsd2F5cwogIC8vIGJlIGdlbmVyYXRlZCB0aHJvdWdoIFNTQSBpbiB0aG9zZSBjYXNlcy4KICBqc0FzdC5FeHByZXNzaW9uIGVuY29kZVNpZ25hdHVyZShNb2R1bGFyTmFtZXIgbmFtZXIsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIERhcnRUeXBlIHR5cGUsIGpzQXN0LkV4cHJlc3Npb24gdGhpc18pOwp9CgpjbGFzcyBSZWNpcGVFbmNvZGVySW1wbCBpbXBsZW1lbnRzIFJlY2lwZUVuY29kZXIgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBfcnRpU3Vic3RpdHV0aW9uczsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgSkVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50czsKICBmaW5hbCBSdW50aW1lVHlwZXNOZWVkIF9ydGlOZWVkOwoKICBSZWNpcGVFbmNvZGVySW1wbCh0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5fcnRpU3Vic3RpdHV0aW9ucywgdGhpcy5fbmF0aXZlRGF0YSwKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LCB0aGlzLmNvbW1vbkVsZW1lbnRzLCB0aGlzLl9ydGlOZWVkKTsKCiAgQG92ZXJyaWRlCiAgUmVjaXBlRW5jb2RpbmcgZW5jb2RlUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBlbnZpcm9ubWVudFN0cnVjdHVyZSwgVHlwZVJlY2lwZSByZWNpcGUpIHsKICAgIHJldHVybiBfUmVjaXBlR2VuZXJhdG9yKHRoaXMsIGVtaXR0ZXIsIGVudmlyb25tZW50U3RydWN0dXJlLCByZWNpcGUpLnJ1bigpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTGl0ZXJhbCBlbmNvZGVHcm91bmRSZWNpcGUoTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgVHlwZVJlY2lwZSByZWNpcGUpIHsKICAgIHJldHVybiBfUmVjaXBlR2VuZXJhdG9yKHRoaXMsIGVtaXR0ZXIsIG51bGwsIHJlY2lwZSkucnVuKCkucmVjaXBlOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTGl0ZXJhbCBlbmNvZGVSZWNpcGVXaXRoVmFyaWFibGVzUmVwbGFjZUJ5QW55KAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBEYXJ0VHlwZSBkYXJ0VHlwZSkgewogICAgcmV0dXJuIF9SZWNpcGVHZW5lcmF0b3IodGhpcywgZW1pdHRlciwgbnVsbCwgVHlwZUV4cHJlc3Npb25SZWNpcGUoZGFydFR5cGUpLAogICAgICAgICAgICBoYWNrVHlwZVZhcmlhYmxlc1RvQW55OiB0cnVlKQogICAgICAgIC5ydW4oKQogICAgICAgIC5yZWNpcGU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5MaXRlcmFsIGVuY29kZURpcmVjdFN1cGVydHlwZVJlY2lwZShNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBJbnRlcmZhY2VUeXBlIGRlY2xhcmluZ1R5cGUsIERhcnRUeXBlIHN1cGVydHlwZUFyZ3VtZW50KSB7CiAgICByZXR1cm4gX1JlY2lwZUdlbmVyYXRvcigKICAgICAgICAgICAgdGhpcywKICAgICAgICAgICAgZW1pdHRlciwKICAgICAgICAgICAgRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZShjbGFzc1R5cGU6IGRlY2xhcmluZ1R5cGUpLAogICAgICAgICAgICBUeXBlRXhwcmVzc2lvblJlY2lwZShzdXBlcnR5cGVBcmd1bWVudCksCiAgICAgICAgICAgIGluZGV4VHlwZVZhcmlhYmxlc09uRGVjbGFyaW5nQ2xhc3M6IHRydWUpCiAgICAgICAgLnJ1bigpCiAgICAgICAgLnJlY2lwZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gZXZhbHVhdGVSZWNpcGUoCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsIGpzQXN0LkxpdGVyYWwgcmVjaXBlKSB7CiAgICByZXR1cm4ganMoJyMoIyknLAogICAgICAgIFtlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmZpbmRUeXBlKSwgcmVjaXBlXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIGVuY29kZVNpZ25hdHVyZShNb2R1bGFyTmFtZXIgbmFtZXIsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIERhcnRUeXBlIHR5cGUsIGpzQXN0LkV4cHJlc3Npb24gdGhpc18pIHsKICAgIC8vIFRPRE8oc3JhKTogVGhlc2UgaW5wdXRzIChyZWZlcmVuY2VkIHRvIHF1ZWxsIGxpbnRzKSBhcmUgdXNlZCBieSB0aGUgb2xkCiAgICAvLyBydGkgc2lnbmF0dXJlIGdlbmVyYXRvci4gRG8gd2UgbmVlZCB0aGVtPwogICAgX3J0aU5lZWQ7CiAgICBjb21tb25FbGVtZW50czsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgICB0aHJvdyBVbmltcGxlbWVudGVkRXJyb3IoJ1JlY2lwZUVuY29kZXJJbXBsLmdldFNpZ25hdHVyZUVuY29kaW5nJyk7CiAgfQp9CgpjbGFzcyBfUmVjaXBlR2VuZXJhdG9yIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPHZvaWQsIHZvaWQ+IHsKICBmaW5hbCBSZWNpcGVFbmNvZGVySW1wbCBfZW5jb2RlcjsKICBmaW5hbCBNb2R1bGFyRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgX2Vudmlyb25tZW50OwogIGZpbmFsIFR5cGVSZWNpcGUgX3JlY2lwZTsKICBmaW5hbCBib29sIGluZGV4VHlwZVZhcmlhYmxlc09uRGVjbGFyaW5nQ2xhc3M7CiAgZmluYWwgYm9vbCBoYWNrVHlwZVZhcmlhYmxlc1RvQW55OwoKICBmaW5hbCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMgPSBbXTsKICBmaW5hbCBTZXQ8VHlwZVZhcmlhYmxlVHlwZT4gdHlwZVZhcmlhYmxlcyA9IHt9OwoKICAvLyBBY2N1bXVsYXRlZCByZWNpcGUuCiAgZmluYWwgTGlzdDxqc0FzdC5MaXRlcmFsPiBfZnJhZ21lbnRzID0gW107CiAgZmluYWwgTGlzdDxpbnQ+IF9jb2RlcyA9IFtdOwoKICBfUmVjaXBlR2VuZXJhdG9yKAogICAgICB0aGlzLl9lbmNvZGVyLCB0aGlzLl9lbWl0dGVyLCB0aGlzLl9lbnZpcm9ubWVudCwgdGhpcy5fcmVjaXBlLAogICAgICB7dGhpcy5pbmRleFR5cGVWYXJpYWJsZXNPbkRlY2xhcmluZ0NsYXNzID0gZmFsc2UsCiAgICAgIHRoaXMuaGFja1R5cGVWYXJpYWJsZXNUb0FueSA9IGZhbHNlfSk7CgogIEpDbG9zZWRXb3JsZCBnZXQgX2Nsb3NlZFdvcmxkID0+IF9lbmNvZGVyLl9jbG9zZWRXb3JsZDsKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IF9uYXRpdmVEYXRhID0+IF9lbmNvZGVyLl9uYXRpdmVEYXRhOwogIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgZ2V0IF9ydGlTdWJzdGl0dXRpb25zID0+IF9lbmNvZGVyLl9ydGlTdWJzdGl0dXRpb25zOwoKICBSZWNpcGVFbmNvZGluZyBfZmluaXNoRW5jb2RpbmcoanNBc3QuTGl0ZXJhbCBsaXRlcmFsKSA9PgogICAgICBSZWNpcGVFbmNvZGluZyhsaXRlcmFsLCB0eXBlVmFyaWFibGVzKTsKCiAgUmVjaXBlRW5jb2RpbmcgcnVuKCkgewogICAgX3N0YXJ0KF9yZWNpcGUpOwogICAgYXNzZXJ0KGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5pc0VtcHR5KTsKICAgIGlmIChfZnJhZ21lbnRzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIF9maW5pc2hFbmNvZGluZyhqcy5zdHJpbmcoU3RyaW5nLmZyb21DaGFyQ29kZXMoX2NvZGVzKSkpOwogICAgfQogICAgX2ZsdXNoQ29kZXMoKTsKICAgIGpzQXN0LkxpdGVyYWxTdHJpbmcgcXVvdGUgPSBqc0FzdC5MaXRlcmFsU3RyaW5nKCciJyk7CiAgICByZXR1cm4gX2ZpbmlzaEVuY29kaW5nKAogICAgICAgIGpzQXN0LlN0cmluZ0NvbmNhdGVuYXRpb24oW3F1b3RlLCAuLi5fZnJhZ21lbnRzLCBxdW90ZV0pKTsKICB9CgogIHZvaWQgX3N0YXJ0KFR5cGVSZWNpcGUgcmVjaXBlKSB7CiAgICBpZiAocmVjaXBlIGlzIFR5cGVFeHByZXNzaW9uUmVjaXBlKSB7CiAgICAgIHZpc2l0KHJlY2lwZS50eXBlLCBudWxsKTsKICAgIH0gZWxzZSBpZiAocmVjaXBlIGlzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZSkgewogICAgICB2aXNpdChyZWNpcGUudHlwZSwgbnVsbCk7CiAgICB9IGVsc2UgaWYgKHJlY2lwZSBpcyBGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlKSB7CiAgICAgIF9zdGFydEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUocmVjaXBlLCBudWxsKTsKICAgIH0KICB9CgogIHZvaWQgX3N0YXJ0RnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZShGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlIHJlY2lwZSwgXykgewogICAgaWYgKHJlY2lwZS5jbGFzc1R5cGUgPT0gbnVsbCkgewogICAgICBfZW1pdENvZGUoUmVjaXBlLnB1c2hEeW5hbWljKTsKICAgICAgYXNzZXJ0KHJlY2lwZS50eXBlcy5pc05vdEVtcHR5KTsKICAgIH0gZWxzZSB7CiAgICAgIHZpc2l0KHJlY2lwZS5jbGFzc1R5cGUsIG51bGwpOwogICAgICAvLyBUT0RPKHNyYSk6IFRoZSBzZXBhcmF0b3IgY2FuIGJlIG9taXR0ZWQgd2hlbiB0aGUgcGFyc2VyIHdpbGwgaGF2ZQogICAgICAvLyByZWR1Y2VkIHRvIHRoZSB0b3Agb2Ygc3RhY2sgdG8gYW4gUnRpIHZhbHVlLgogICAgICBfZW1pdENvZGUoUmVjaXBlLnRvVHlwZSk7CiAgICB9CgogICAgaWYgKHJlY2lwZS50eXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuc3RhcnRUeXBlQXJndW1lbnRzKTsKICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiByZWNpcGUudHlwZXMpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICBfZW1pdENvZGUoUmVjaXBlLnNlcGFyYXRvcik7CiAgICAgICAgfQogICAgICAgIHZpc2l0KHR5cGUsIF8pOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgX2VtaXRDb2RlKFJlY2lwZS5lbmRUeXBlQXJndW1lbnRzKTsKICAgIH0KICB9CgogIHZvaWQgX2VtaXRDb2RlKGludCBjb2RlKSB7CiAgICAvLyBUT0RPKHNyYSk6IFdlIHNob3VsZCBwZXJtaXQgY29kZXMgd2l0aCBzaG9ydCBlc2NhcGVzIChsaWtlICdcbicpIGZvcgogICAgLy8gaW5mcmVxdWVudCBvcGVyYXRvcnMuCiAgICBhc3NlcnQoY29kZSA+PSAweDIwICYmIGNvZGUgPD0gMHg3RSAmJiBjb2RlICE9IDB4MjIpOwogICAgX2NvZGVzLmFkZChjb2RlKTsKICB9CgogIHZvaWQgX2ZsdXNoQ29kZXMoKSB7CiAgICBpZiAoX2NvZGVzLmlzRW1wdHkpIHJldHVybjsKICAgIC8vIFRPRE8oc3JhKTogY29kZXMgbmVlZCBzb21lIGVzY2FwaW5nLgogICAgX2ZyYWdtZW50cy5hZGQoU3RyaW5nQmFja2VkTmFtZShTdHJpbmcuZnJvbUNoYXJDb2RlcyhfY29kZXMpKSk7CiAgICBfY29kZXMuY2xlYXIoKTsKICB9CgogIHZvaWQgX2VtaXRJbnRlZ2VyKGludCB2YWx1ZSkgewogICAgaWYgKF9jb2Rlcy5pc0VtcHR5ID8gX2ZyYWdtZW50cy5pc05vdEVtcHR5IDogUmVjaXBlLmlzRGlnaXQoX2NvZGVzLmxhc3QpKSB7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuc2VwYXJhdG9yKTsKICAgIH0KICAgIF9lbWl0U3RyaW5nVW5lc2NhcGVkKCckdmFsdWUnKTsKICB9CgogIHZvaWQgX2VtaXRTdHJpbmdVbmVzY2FwZWQoU3RyaW5nIHN0cmluZykgewogICAgZm9yIChpbnQgY29kZSBpbiBzdHJpbmcuY29kZVVuaXRzKSB7CiAgICAgIF9lbWl0Q29kZShjb2RlKTsKICAgIH0KICB9CgogIHZvaWQgX2VtaXROYW1lKGpzQXN0Lk5hbWUgbmFtZSkgewogICAgaWYgKF9mcmFnbWVudHMuaXNOb3RFbXB0eSAmJiBfY29kZXMuaXNFbXB0eSkgewogICAgICBfZW1pdENvZGUoUmVjaXBlLnNlcGFyYXRvcik7CiAgICB9CiAgICBfZmx1c2hDb2RlcygpOwogICAgX2ZyYWdtZW50cy5hZGQobmFtZSk7CiAgfQoKICB2b2lkIF9lbWl0RXh0ZW5zaW9uT3AoaW50IHZhbHVlKSB7CiAgICBfZW1pdEludGVnZXIodmFsdWUpOwogICAgX2VtaXRDb2RlKFJlY2lwZS5leHRlbnNpb25PcCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0KERhcnRUeXBlIHR5cGUsIF8pID0+IHR5cGUuYWNjZXB0KHRoaXMsIF8pOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShUeXBlVmFyaWFibGVUeXBlIHR5cGUsIF8pIHsKICAgIGlmIChoYWNrVHlwZVZhcmlhYmxlc1RvQW55KSB7CiAgICAgIC8vIEVtaXQgJ2FueScgdHlwZS4KICAgICAgX2VtaXRFeHRlbnNpb25PcChSZWNpcGUucHVzaEFueUV4dGVuc2lvbik7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgZW52aXJvbm1lbnQgPSBfZW52aXJvbm1lbnQ7CiAgICBpZiAoZW52aXJvbm1lbnQgaXMgU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKSB7CiAgICAgIGlmICh0eXBlID09IGVudmlyb25tZW50LnZhcmlhYmxlKSB7CiAgICAgICAgX2VtaXRJbnRlZ2VyKDApOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgaWYgKGVudmlyb25tZW50IGlzIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgaW50IGkgPSBlbnZpcm9ubWVudC5iaW5kaW5ncy5pbmRleE9mKHR5cGUpOwogICAgICBpZiAoaSA+PSAwKSB7CiAgICAgICAgLy8gSW5kZXhlcyBhcmUgMS1iYXNlZCBzaW5jZSAnMCcgZW5jb2RlcyB1c2luZyB0aGUgZW50aXJlIHR5cGUgZm9yIHRoZQogICAgICAgIC8vIHNpbmdsZXRvbiBzdHJ1Y3R1cmUuCiAgICAgICAgX2VtaXRJbnRlZ2VyKGkgKyAxKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGludCBpbmRleCA9IF9pbmRleEludG9DbGFzc1R5cGVWYXJpYWJsZXModHlwZSk7CiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7CiAgICAgICAgLy8gSW5kZXhlZCBjbGFzcyB0eXBlIHZhcmlhYmxlcyBjb21lIGFmdGVyIHRoZSBib3VuZCBmdW5jdGlvbiB0eXBlCiAgICAgICAgLy8gdmFyaWFibGVzLgogICAgICAgIF9lbWl0SW50ZWdlcigxICsgZW52aXJvbm1lbnQuYmluZGluZ3MubGVuZ3RoICsgaW5kZXgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBqc0FzdC5OYW1lIG5hbWUgPSBfZW1pdHRlci50eXBlVmFyaWFibGVBY2Nlc3NOZXdSdGkodHlwZS5lbGVtZW50KTsKICAgICAgX2VtaXROYW1lKG5hbWUpOwogICAgICB0eXBlVmFyaWFibGVzLmFkZCh0eXBlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBIYW5kbGUgbWlzc2luZyBjYXNlcy4gVGhpcyBqdXN0IGVtaXRzIHNvbWUgcmVhZGFibGUganVuay4gVGhlCiAgICAvLyBiYWNrdGlja3MgZW5zdXJlIGl0IHdvbid0IHBhcnNlIGF0IHJ1bnRpbWUuCiAgICAnYCR0eXBlYCcuY29kZVVuaXRzLmZvckVhY2goX2VtaXRDb2RlKTsKICB9CgogIGludCAvKj8qLyBfaW5kZXhJbnRvQ2xhc3NUeXBlVmFyaWFibGVzKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpIHsKICAgIFR5cGVWYXJpYWJsZUVudGl0eSBlbGVtZW50ID0gdmFyaWFibGUuZWxlbWVudDsKICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwoKICAgIGlmIChpbmRleFR5cGVWYXJpYWJsZXNPbkRlY2xhcmluZ0NsYXNzKSB7CiAgICAgIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBlbnZpcm9ubWVudCA9IF9lbnZpcm9ubWVudDsKICAgICAgaWYgKGVudmlyb25tZW50IGlzIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGVudmlyb25tZW50LmNsYXNzVHlwZS5lbGVtZW50LCBjbHMpKSB7CiAgICAgICAgICByZXR1cm4gZWxlbWVudC5pbmRleDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKHNyYSk6IFdlIG1pZ2h0IGJlIGluIGEgY29udGV4dCB3aGVyZSB0aGUgY2xhc3MgdHlwZSB2YXJpYWJsZSBoYXMgYW4KICAgIC8vIGluZGV4LCBldmVuIHRob3VnaCBpbiB0aGUgZ2VuZXJhbCBjYXNlIGl0IGlzIG5vdCBhdCBhIHNwZWNpZmljIGluZGV4LgoKICAgIGlmIChfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihjbHMpKSByZXR1cm4gbnVsbDsKCiAgICBDbGFzc0hpZXJhcmNoeSBjbGFzc0hpZXJhcmNoeSA9IF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeTsKICAgIGlmIChjbGFzc0hpZXJhcmNoeS5hbnlTdHJpY3RTdWJjbGFzc09mKGNscywgKENsYXNzRW50aXR5IHN1YmNsYXNzKSB7CiAgICAgIHJldHVybiAhX3J0aVN1YnN0aXR1dGlvbnMuaXNUcml2aWFsU3Vic3RpdHV0aW9uKHN1YmNsYXNzLCBjbHMpOwogICAgfSkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gZWxlbWVudC5pbmRleDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZShGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlLCBfKSB7CiAgICBpbnQgcG9zaXRpb24gPSBmdW5jdGlvblR5cGVWYXJpYWJsZXMuaW5kZXhPZih0eXBlKTsKICAgIGFzc2VydChwb3NpdGlvbiA+PSAwKTsKICAgIC8vIFNlZSBbdmlzaXRGdW5jdGlvblR5cGVdIGZvciBleHBsYW5hdGlvbi4KICAgIF9lbWl0SW50ZWdlcihmdW5jdGlvblR5cGVWYXJpYWJsZXMubGVuZ3RoIC0gcG9zaXRpb24gLSAxKTsKICAgIF9lbWl0Q29kZShSZWNpcGUuZ2VuZXJpY0Z1bmN0aW9uVHlwZVBhcmFtZXRlckluZGV4KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSB0eXBlLCBfKSB7CiAgICBfZW1pdENvZGUoUmVjaXBlLnB1c2hEeW5hbWljKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwgXykgewogICAganNBc3QuTmFtZSBuYW1lID0gX2VtaXR0ZXIudHlwZUFjY2Vzc05ld1J0aSh0eXBlLmVsZW1lbnQpOwogICAgaWYgKHR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIC8vIFB1c2ggdGhlIG5hbWUsIHdoaWNoIGlzIGxhdGVyIGNvbnZlcnRlZCBieSBhbiBpbXBsaWNpdCB0b1R5cGUKICAgICAgLy8gb3BlcmF0aW9uLgogICAgICBfZW1pdE5hbWUobmFtZSk7CiAgICB9IGVsc2UgewogICAgICBfZW1pdE5hbWUobmFtZSk7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuc3RhcnRUeXBlQXJndW1lbnRzKTsKICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnRUeXBlIGluIHR5cGUudHlwZUFyZ3VtZW50cykgewogICAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICAgIF9lbWl0Q29kZShSZWNpcGUuc2VwYXJhdG9yKTsKICAgICAgICB9CiAgICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3ModHlwZS5lbGVtZW50KSkgewogICAgICAgICAgLy8gRW1pdCAnYW55JyB0eXBlLgogICAgICAgICAgX2VtaXRFeHRlbnNpb25PcChSZWNpcGUucHVzaEFueUV4dGVuc2lvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZpc2l0KGFyZ3VtZW50VHlwZSwgXyk7CiAgICAgICAgfQogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgX2VtaXRDb2RlKFJlY2lwZS5lbmRUeXBlQXJndW1lbnRzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUsIF8pIHsKICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICAvLyBFbnRlciBnZW5lcmljIGZ1bmN0aW9uIHNjb3BlLgogICAgICAvLwogICAgICAvLyBGdW5jdGlvbiB0eXBlIHZhcmlhYmxlcyBhcmUgZW5jb2RlZCBhcyBhIG1vZGlmaWVkIGRlIEJydWluIGluZGV4LiBXZQogICAgICAvLyBjb3VudCB2YXJpYWJsZXMgZnJvbSB0aGUgY3VycmVudCBzY29wZSBvdXR3YXJkcywgY291bnRpbmcgdGhlIHZhcmlhYmxlcwogICAgICAvLyBpbiB0aGUgc2FtZSBzY29wZSBsZWZ0LXRvLXJpZ2h0LgogICAgICAvLwogICAgICAvLyBJZiB3ZSBwdXNoIHRoZSBjdXJyZW50IHNjb3BlJ3MgdmFyaWFibGVzIGluIHJldmVyc2UsIHRoZW4gdGhlIGluZGV4IGlzCiAgICAgIC8vIHRoZSBwb3NpdGlvbiBtZWFzdXJlZCBmcm9tIHRoZSBlbmQuCiAgICAgIC8vCiAgICAgIC8vICAgIGZvbzxBQSxCQj4oKSA9PiAuLi4KICAgICAgLy8gICAgICAvL14wIF4xCiAgICAgIC8vICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlczogW0JCLEFBXQogICAgICAvLwogICAgICAvLyAgICBmb288QUEsQkI+KCkgPT4gPFVVLFZWLFdXPigpID0+IC4uLgogICAgICAvLyAgICAgICAgXjMgXjQgICAgICAgIF4wIF4xIF4yCiAgICAgIC8vICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlczogW0JCLEFBLFdXLFZWLFVVXQogICAgICAvLwogICAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcy5yZXZlcnNlZCkgewogICAgICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5hZGQodmFyaWFibGUpOwogICAgICB9CiAgICB9CgogICAgdmlzaXQodHlwZS5yZXR1cm5UeXBlLCBfKTsKICAgIF9lbWl0Q29kZShSZWNpcGUuc3RhcnRGdW5jdGlvbkFyZ3VtZW50cyk7CgogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlclR5cGUgaW4gdHlwZS5wYXJhbWV0ZXJUeXBlcykgewogICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zZXBhcmF0b3IpOwogICAgICB9CiAgICAgIHZpc2l0KHBhcmFtZXRlclR5cGUsIF8pOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQoKICAgIGlmICh0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuaXNOb3RFbXB0eSkgewogICAgICBmaXJzdCA9IHRydWU7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuc3RhcnRPcHRpb25hbEdyb3VwKTsKICAgICAgZm9yIChEYXJ0VHlwZSBwYXJhbWV0ZXJUeXBlIGluIHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcykgewogICAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICAgIF9lbWl0Q29kZShSZWNpcGUuc2VwYXJhdG9yKTsKICAgICAgICB9CiAgICAgICAgdmlzaXQocGFyYW1ldGVyVHlwZSwgXyk7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICBfZW1pdENvZGUoUmVjaXBlLmVuZE9wdGlvbmFsR3JvdXApOwogICAgfQoKICAgIHZvaWQgZW1pdE5hbWVkR3JvdXAoTGlzdDxTdHJpbmc+IG5hbWVzLCBMaXN0PERhcnRUeXBlPiB0eXBlcykgewogICAgICBhc3NlcnQobmFtZXMubGVuZ3RoID09IHR5cGVzLmxlbmd0aCk7CiAgICAgIGZpcnN0ID0gdHJ1ZTsKICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zdGFydE5hbWVkR3JvdXApOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKCFmaXJzdCkgewogICAgICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zZXBhcmF0b3IpOwogICAgICAgIH0KICAgICAgICBfZW1pdFN0cmluZ1VuZXNjYXBlZChuYW1lc1tpXSk7CiAgICAgICAgX2VtaXRDb2RlKFJlY2lwZS5uYW1lU2VwYXJhdG9yKTsKICAgICAgICB2aXNpdCh0eXBlc1tpXSwgXyk7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICBfZW1pdENvZGUoUmVjaXBlLmVuZE5hbWVkR3JvdXApOwogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogVGhlc2UgYXJlIG9wdGlvbmFsIG5hbWVkIHBhcmFtZXRlcnMuIEhhbmRsZSByZXF1aXJlZCBuYW1lZAogICAgLy8gcGFyYW1ldGVycyB0aGUgc2FtZSB3YXkgd2hlbiB0aGV5IGFyZSBpbXBsZW1lbnRlZC4KICAgIGlmICh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMuaXNOb3RFbXB0eSkgewogICAgICBlbWl0TmFtZWRHcm91cCh0eXBlLm5hbWVkUGFyYW1ldGVycywgdHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzKTsKICAgIH0KCiAgICBfZW1pdENvZGUoUmVjaXBlLmVuZEZ1bmN0aW9uQXJndW1lbnRzKTsKCiAgICAvLyBFbWl0IGdlbmVyaWMgdHlwZSBib3VuZHMuCiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuc3RhcnRUeXBlQXJndW1lbnRzKTsKICAgICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgaWYgKCFmaXJzdCkgewogICAgICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zZXBhcmF0b3IpOwogICAgICAgIH0KICAgICAgICB2aXNpdCh0eXBlVmFyaWFibGUuYm91bmQsIF8pOwogICAgICB9CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuZW5kVHlwZUFyZ3VtZW50cyk7CiAgICB9CgogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIC8vIEV4aXQgZ2VuZXJpYyBmdW5jdGlvbiBzY29wZS4gUmVtb3ZlIHRoZSB0eXBlIHZhcmlhYmxlcyBwdXNoZWQgYXQgZW50cnkuCiAgICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5sZW5ndGggLT0gdHlwZS50eXBlVmFyaWFibGVzLmxlbmd0aDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSB0eXBlLCBfKSB7CiAgICBfZW1pdENvZGUoUmVjaXBlLnB1c2hWb2lkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBfKSB7CiAgICB2aXNpdCh0eXBlLnVuYWxpYXNlZCwgXyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnV0dXJlT3JUeXBlKEZ1dHVyZU9yVHlwZSB0eXBlLCBfKSB7CiAgICB2aXNpdCh0eXBlLnR5cGVBcmd1bWVudCwgXyk7CiAgICBfZW1pdENvZGUoUmVjaXBlLndyYXBGdXR1cmVPcik7CiAgfQp9CgpjbGFzcyBfUnVsZXNldEVudHJ5IHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIF90YXJnZXRUeXBlOwogIExpc3Q8SW50ZXJmYWNlVHlwZT4gX3N1cGVydHlwZXM7CiAgTWFwPFR5cGVWYXJpYWJsZVR5cGUsIERhcnRUeXBlPiBfdHlwZVZhcmlhYmxlczsKCiAgX1J1bGVzZXRFbnRyeSgKICAgICAgdGhpcy5fdGFyZ2V0VHlwZSwgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gc3VwZXJ0eXBlcywgdGhpcy5fdHlwZVZhcmlhYmxlcykKICAgICAgOiBfc3VwZXJ0eXBlcyA9IHN1cGVydHlwZXMudG9MaXN0KCk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3N1cGVydHlwZXMuaXNFbXB0eSAmJiBfdHlwZVZhcmlhYmxlcy5pc0VtcHR5Owp9CgpjbGFzcyBSdWxlc2V0IHsKICBMaXN0PF9SdWxlc2V0RW50cnk+IF9lbnRyaWVzOwoKICBSdWxlc2V0KHRoaXMuX2VudHJpZXMpOwogIFJ1bGVzZXQuZW1wdHkoKSA6IHRoaXMoW10pOwoKICB2b2lkIGFkZChJbnRlcmZhY2VUeXBlIHRhcmdldFR5cGUsIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IHN1cGVydHlwZXMsCiAgICAgICAgICBNYXA8VHlwZVZhcmlhYmxlVHlwZSwgRGFydFR5cGU+IHR5cGVWYXJpYWJsZXMpID0+CiAgICAgIF9lbnRyaWVzLmFkZChfUnVsZXNldEVudHJ5KHRhcmdldFR5cGUsIHN1cGVydHlwZXMsIHR5cGVWYXJpYWJsZXMpKTsKfQoKY2xhc3MgUnVsZXNldEVuY29kZXIgewogIGZpbmFsIERhcnRUeXBlcyBfZGFydFR5cGVzOwogIGZpbmFsIE1vZHVsYXJFbWl0dGVyIF9lbWl0dGVyOwogIGZpbmFsIFJlY2lwZUVuY29kZXIgX3JlY2lwZUVuY29kZXI7CgogIFJ1bGVzZXRFbmNvZGVyKHRoaXMuX2RhcnRUeXBlcywgdGhpcy5fZW1pdHRlciwgdGhpcy5fcmVjaXBlRW5jb2Rlcik7CgogIENvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2RhcnRUeXBlcy5jb21tb25FbGVtZW50czsKICBDbGFzc0VudGl0eSBnZXQgX29iamVjdENsYXNzID0+IF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzczsKCiAgZmluYWwgX2xlZnRCcmFjZSA9IGpzLnN0cmluZ1BhcnQoJ3snKTsKICBmaW5hbCBfcmlnaHRCcmFjZSA9IGpzLnN0cmluZ1BhcnQoJ30nKTsKICBmaW5hbCBfbGVmdEJyYWNrZXQgPSBqcy5zdHJpbmdQYXJ0KCdbJyk7CiAgZmluYWwgX3JpZ2h0QnJhY2tldCA9IGpzLnN0cmluZ1BhcnQoJ10nKTsKICBmaW5hbCBfY29sb24gPSBqcy5zdHJpbmdQYXJ0KCc6Jyk7CiAgZmluYWwgX2NvbW1hID0ganMuc3RyaW5nUGFydCgnLCcpOwogIGZpbmFsIF9xdW90ZSA9IGpzLnN0cmluZ1BhcnQoIiciKTsKCiAgYm9vbCBfaXNPYmplY3QoSW50ZXJmYWNlVHlwZSB0eXBlKSA9PiBpZGVudGljYWwodHlwZS5lbGVtZW50LCBfb2JqZWN0Q2xhc3MpOwoKICB2b2lkIF9wcmVwcm9jZXNzRW50cnkoX1J1bGVzZXRFbnRyeSBlbnRyeSkgewogICAgZW50cnkuX3N1cGVydHlwZXMucmVtb3ZlV2hlcmUoKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSA9PgogICAgICAgIF9pc09iamVjdChzdXBlcnR5cGUpIHx8IGlkZW50aWNhbChlbnRyeS5fdGFyZ2V0VHlwZSwgc3VwZXJ0eXBlKSk7CiAgfQoKICB2b2lkIF9wcmVwcm9jZXNzUnVsZXNldChSdWxlc2V0IHJ1bGVzZXQpIHsKICAgIHJ1bGVzZXQuX2VudHJpZXMKICAgICAgICAucmVtb3ZlV2hlcmUoKF9SdWxlc2V0RW50cnkgZW50cnkpID0+IF9pc09iamVjdChlbnRyeS5fdGFyZ2V0VHlwZSkpOwogICAgcnVsZXNldC5fZW50cmllcy5mb3JFYWNoKF9wcmVwcm9jZXNzRW50cnkpOwogICAgcnVsZXNldC5fZW50cmllcy5yZW1vdmVXaGVyZSgoX1J1bGVzZXRFbnRyeSBlbnRyeSkgPT4gZW50cnkuaXNFbXB0eSk7CiAgfQoKICAvLyBUT0RPKGZpc2h5dGhlZmlzaCk6IENvbW1vbiBzdWJzdHJpbmcgZWxpbWluYXRpb24uCgogIC8vLyBQcm9kdWNlcyBhIHN0cmluZyByZWFkYWJsZSBieSBgSlNPTi5wYXJzZSgpYC4KICBqc0FzdC5TdHJpbmdDb25jYXRlbmF0aW9uIGVuY29kZVJ1bGVzZXQoUnVsZXNldCBydWxlc2V0KSB7CiAgICBfcHJlcHJvY2Vzc1J1bGVzZXQocnVsZXNldCk7CiAgICByZXR1cm4gX2VuY29kZVJ1bGVzZXQocnVsZXNldCk7CiAgfQoKICBqc0FzdC5TdHJpbmdDb25jYXRlbmF0aW9uIF9lbmNvZGVSdWxlc2V0KFJ1bGVzZXQgcnVsZXNldCkgPT4KICAgICAganMuY29uY2F0ZW5hdGVTdHJpbmdzKFsKICAgICAgICBfcXVvdGUsCiAgICAgICAgX2xlZnRCcmFjZSwKICAgICAgICAuLi5qcy5qb2luTGl0ZXJhbHMocnVsZXNldC5fZW50cmllcy5tYXAoX2VuY29kZUVudHJ5KSwgX2NvbW1hKSwKICAgICAgICBfcmlnaHRCcmFjZSwKICAgICAgICBfcXVvdGUsCiAgICAgIF0pOwoKICBqc0FzdC5TdHJpbmdDb25jYXRlbmF0aW9uIF9lbmNvZGVFbnRyeShfUnVsZXNldEVudHJ5IGVudHJ5KSA9PgogICAgICBqcy5jb25jYXRlbmF0ZVN0cmluZ3MoWwogICAgICAgIGpzLnF1b3RlTmFtZShfZW1pdHRlci50eXBlQWNjZXNzTmV3UnRpKGVudHJ5Ll90YXJnZXRUeXBlLmVsZW1lbnQpKSwKICAgICAgICBfY29sb24sCiAgICAgICAgX2xlZnRCcmFjZSwKICAgICAgICAuLi5qcy5qb2luTGl0ZXJhbHMoWwogICAgICAgICAgLi4uZW50cnkuX3N1cGVydHlwZXMubWFwKChJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkgPT4KICAgICAgICAgICAgICBfZW5jb2RlU3VwZXJ0eXBlKGVudHJ5Ll90YXJnZXRUeXBlLCBzdXBlcnR5cGUpKSwKICAgICAgICAgIC4uLmVudHJ5Ll90eXBlVmFyaWFibGVzLmVudHJpZXMubWFwKChtYXBFbnRyeSkgPT4gX2VuY29kZVR5cGVWYXJpYWJsZSgKICAgICAgICAgICAgICBlbnRyeS5fdGFyZ2V0VHlwZSwgbWFwRW50cnkua2V5LCBtYXBFbnRyeS52YWx1ZSkpCiAgICAgICAgXSwgX2NvbW1hKSwKICAgICAgICBfcmlnaHRCcmFjZSwKICAgICAgXSk7CgogIGpzQXN0LlN0cmluZ0NvbmNhdGVuYXRpb24gX2VuY29kZVN1cGVydHlwZSgKICAgICAgICAgIEludGVyZmFjZVR5cGUgdGFyZ2V0VHlwZSwgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpID0+CiAgICAgIGpzLmNvbmNhdGVuYXRlU3RyaW5ncyhbCiAgICAgICAganMucXVvdGVOYW1lKF9lbWl0dGVyLnR5cGVBY2Nlc3NOZXdSdGkoc3VwZXJ0eXBlLmVsZW1lbnQpKSwKICAgICAgICBfY29sb24sCiAgICAgICAgX2xlZnRCcmFja2V0LAogICAgICAgIC4uLmpzLmpvaW5MaXRlcmFscygKICAgICAgICAgICAgc3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMubWFwKChEYXJ0VHlwZSBzdXBlcnR5cGVBcmd1bWVudCkgPT4KICAgICAgICAgICAgICAgIF9lbmNvZGVTdXBlcnR5cGVBcmd1bWVudCh0YXJnZXRUeXBlLCBzdXBlcnR5cGVBcmd1bWVudCkpLAogICAgICAgICAgICBfY29tbWEpLAogICAgICAgIF9yaWdodEJyYWNrZXQsCiAgICAgIF0pOwoKICBqc0FzdC5TdHJpbmdDb25jYXRlbmF0aW9uIF9lbmNvZGVUeXBlVmFyaWFibGUoSW50ZXJmYWNlVHlwZSB0YXJnZXRUeXBlLAogICAgICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUsIERhcnRUeXBlIHN1cGVydHlwZUFyZ3VtZW50KSA9PgogICAgICBqcy5jb25jYXRlbmF0ZVN0cmluZ3MoWwogICAgICAgIGpzLnF1b3RlTmFtZShfZW1pdHRlci50eXBlVmFyaWFibGVBY2Nlc3NOZXdSdGkodHlwZVZhcmlhYmxlLmVsZW1lbnQpKSwKICAgICAgICBfY29sb24sCiAgICAgICAgX2VuY29kZVN1cGVydHlwZUFyZ3VtZW50KHRhcmdldFR5cGUsIHN1cGVydHlwZUFyZ3VtZW50KSwKICAgICAgXSk7CgogIGpzQXN0LkxpdGVyYWwgX2VuY29kZVN1cGVydHlwZUFyZ3VtZW50KAogICAgICAgICAgSW50ZXJmYWNlVHlwZSB0YXJnZXRUeXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGVBcmd1bWVudCkgPT4KICAgICAgX3JlY2lwZUVuY29kZXIuZW5jb2RlRGlyZWN0U3VwZXJ0eXBlUmVjaXBlKAogICAgICAgICAgX2VtaXR0ZXIsIHRhcmdldFR5cGUsIHN1cGVydHlwZUFyZ3VtZW50KTsKfQqCQQBOTjwBJgE3ASE/JCEhICc8KxgVG0Q+ARceLQE5AgEfR0M2SQFPAVBPGCg3MgFRUVE1REABTA5FUQFNUC5PLgIBMyM1JTEoIwFRRQEMNkpQBAEMUEcEAQw3M1EqDxEEAQxEQR0SFUQ1Ng8RBAEMIzYWSgQBDE8vTzEOFBlIBAIBQCQhLxwxJQE/MgEZLR8BFEU4LQE6O1EBOy4BGRUrHkcGEzocQwQBIyogOyA2NQYEAU4kJScNJUs2IAYBIywZLBYnChgXCCoGBAEdTB06FgQBFyAsRBQEASFQIwYkBAEtKRcGBAEkMyMGExoEASUZIwQBDDgBDDkiGjEOBgE5PCoZEAgGNzIUTyAdEAgBNhtLFj8QCEkXHw4GUDMsBAFGMy8BLjs5PSAKCAYBUE0BNgFBSUYKEwYaBAEMQTgbMD85BAEMLyMEAQwzPyZHFBcNFywZOhYnCjoeNREiChcIKgYEAQwxKScJTlEqCVAtCSAWKwkwJjQJSy0IBgEfLgEXOhQlCB8VBgEyFCxEFicKIRcIKgYBRCwUKS8WJwooKRwXCCcGAU06L0YGASwBISkZLEYWJwomCCoGASlRQQYEAQwpIAQBDC8eBAEMMSEkBAIBFiMjMgERUSsBRQIBECABGh4BSTxKAgEXHiEmAUcBQz8BKSorLCUlJQFPAS8/SgQBLRVNMEoEATcBND0hJAQBPx4QFEgVEAoBQR5MEBQdQD9RQBQVCgEuQB5EEBYcSEoVFwoBSkgeTxBBCgEqQzI0AgE2cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX25ldy5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0oT4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSB1bml2ZXJzZS5zaWRlX2VmZmVjdHM7CgppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKCmNsYXNzIFNpZGVFZmZlY3RzIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1NpZGVFZmZlY3RzXSBvYmplY3RzIGluIGEgZGVidWdnaW5nCiAgLy8vIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3NpZGUtZWZmZWN0cyc7CgogIC8vIENoYW5nZXMgZmxhZ3MuCiAgc3RhdGljIGNvbnN0IGludCBGTEFHX0NIQU5HRVNfSU5ERVggPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19DSEFOR0VTX0lOU1RBTkNFX1BST1BFUlRZID0gRkxBR19DSEFOR0VTX0lOREVYICsgMTsKICBzdGF0aWMgY29uc3QgaW50IEZMQUdfQ0hBTkdFU19TVEFUSUNfUFJPUEVSVFkgPQogICAgICBGTEFHX0NIQU5HRVNfSU5TVEFOQ0VfUFJPUEVSVFkgKyAxOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19DSEFOR0VTX0NPVU5UID0gRkxBR19DSEFOR0VTX1NUQVRJQ19QUk9QRVJUWSArIDE7CgogIC8vIERlcGVuZHMgZmxhZ3MgKG9uZSBmb3IgZWFjaCBjaGFuZ2VzIGZsYWcpLgogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19ERVBFTkRTX09OX0lOREVYX1NUT1JFID0gRkxBR19DSEFOR0VTX0NPVU5UOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19ERVBFTkRTX09OX0lOU1RBTkNFX1BST1BFUlRZX1NUT1JFID0KICAgICAgRkxBR19ERVBFTkRTX09OX0lOREVYX1NUT1JFICsgMTsKICBzdGF0aWMgY29uc3QgaW50IEZMQUdfREVQRU5EU19PTl9TVEFUSUNfUFJPUEVSVFlfU1RPUkUgPQogICAgICBGTEFHX0RFUEVORFNfT05fSU5TVEFOQ0VfUFJPUEVSVFlfU1RPUkUgKyAxOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19ERVBFTkRTX09OX0NPVU5UID0KICAgICAgRkxBR19ERVBFTkRTX09OX1NUQVRJQ19QUk9QRVJUWV9TVE9SRSArIDE7CgogIGludCBfZmxhZ3MgPSAwOwoKICBTaWRlRWZmZWN0cygpIHsKICAgIHNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICBzZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICB9CgogIFNpZGVFZmZlY3RzLmVtcHR5KCkgewogICAgY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICB9CgogIFNpZGVFZmZlY3RzLmZyb21GbGFncyh0aGlzLl9mbGFncyk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbU2lkZUVmZmVjdHNdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgU2lkZUVmZmVjdHMucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGludCBmbGFncyA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFNpZGVFZmZlY3RzLmZyb21GbGFncyhmbGFncyk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtTaWRlRWZmZWN0c10gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVJbnQoX2ZsYWdzKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBfZmxhZ3MgPT0gb3RoZXIuX2ZsYWdzOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdTaWRlRWZmZWN0cy5oYXNoQ29kZScpOwoKICBib29sIF9nZXRGbGFnKGludCBwb3NpdGlvbikgewogICAgcmV0dXJuIChfZmxhZ3MgJiAoMSA8PCBwb3NpdGlvbikpICE9IDA7CiAgfQoKICBib29sIF9zZXRGbGFnKGludCBwb3NpdGlvbikgewogICAgaW50IGJlZm9yZSA9IF9mbGFnczsKICAgIF9mbGFncyB8PSAoMSA8PCBwb3NpdGlvbik7CiAgICByZXR1cm4gYmVmb3JlICE9IF9mbGFnczsKICB9CgogIGJvb2wgX2NsZWFyRmxhZyhpbnQgcG9zaXRpb24pIHsKICAgIGludCBiZWZvcmUgPSBfZmxhZ3M7CiAgICBfZmxhZ3MgJj0gfigxIDw8IHBvc2l0aW9uKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgaW50IGdldENoYW5nZXNGbGFncygpIHsKICAgIHJldHVybiBfZmxhZ3MgJiAoKDEgPDwgRkxBR19DSEFOR0VTX0NPVU5UKSAtIDEpOwogIH0KCiAgaW50IGdldERlcGVuZHNPbkZsYWdzKCkgewogICAgcmV0dXJuIChfZmxhZ3MgJiAoKDEgPDwgRkxBR19ERVBFTkRTX09OX0NPVU5UKSAtIDEpKSA+PiBGTEFHX0NIQU5HRVNfQ09VTlQ7CiAgfQoKICBib29sIGhhc1NpZGVFZmZlY3RzKCkgPT4gZ2V0Q2hhbmdlc0ZsYWdzKCkgIT0gMDsKICBib29sIGRlcGVuZHNPblNvbWV0aGluZygpID0+IGdldERlcGVuZHNPbkZsYWdzKCkgIT0gMDsKCiAgYm9vbCBzZXRBbGxTaWRlRWZmZWN0cygpIHsKICAgIGludCBiZWZvcmUgPSBfZmxhZ3M7CiAgICBfZmxhZ3MgfD0gKCgxIDw8IEZMQUdfQ0hBTkdFU19DT1VOVCkgLSAxKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgYm9vbCBjbGVhckFsbFNpZGVFZmZlY3RzKCkgewogICAgaW50IGJlZm9yZSA9IF9mbGFnczsKICAgIF9mbGFncyAmPSB+KCgxIDw8IEZMQUdfQ0hBTkdFU19DT1VOVCkgLSAxKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgYm9vbCBzZXREZXBlbmRzT25Tb21ldGhpbmcoKSB7CiAgICBpbnQgYmVmb3JlID0gX2ZsYWdzOwogICAgaW50IGNvdW50ID0gRkxBR19ERVBFTkRTX09OX0NPVU5UIC0gRkxBR19DSEFOR0VTX0NPVU5UOwogICAgX2ZsYWdzIHw9ICgoKDEgPDwgY291bnQpIC0gMSkgPDwgRkxBR19DSEFOR0VTX0NPVU5UKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgYm9vbCBjbGVhckFsbERlcGVuZGVuY2llcygpIHsKICAgIGludCBiZWZvcmUgPSBfZmxhZ3M7CiAgICBpbnQgY291bnQgPSBGTEFHX0RFUEVORFNfT05fQ09VTlQgLSBGTEFHX0NIQU5HRVNfQ09VTlQ7CiAgICBfZmxhZ3MgJj0gfigoKDEgPDwgY291bnQpIC0gMSkgPDwgRkxBR19DSEFOR0VTX0NPVU5UKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgYm9vbCBkZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3JlKCkgewogICAgcmV0dXJuIF9nZXRGbGFnKEZMQUdfREVQRU5EU19PTl9TVEFUSUNfUFJPUEVSVFlfU1RPUkUpOwogIH0KCiAgYm9vbCBzZXREZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3JlKCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfREVQRU5EU19PTl9TVEFUSUNfUFJPUEVSVFlfU1RPUkUpOwogIH0KCiAgYm9vbCBjbGVhckRlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSB7CiAgICByZXR1cm4gX2NsZWFyRmxhZyhGTEFHX0RFUEVORFNfT05fU1RBVElDX1BST1BFUlRZX1NUT1JFKTsKICB9CgogIGJvb2wgc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfQ0hBTkdFU19TVEFUSUNfUFJPUEVSVFkpOwogIH0KCiAgYm9vbCBjbGVhckNoYW5nZXNTdGF0aWNQcm9wZXJ0eSgpIHsKICAgIHJldHVybiBfY2xlYXJGbGFnKEZMQUdfQ0hBTkdFU19TVEFUSUNfUFJPUEVSVFkpOwogIH0KCiAgYm9vbCBjaGFuZ2VzU3RhdGljUHJvcGVydHkoKSA9PiBfZ2V0RmxhZyhGTEFHX0NIQU5HRVNfU1RBVElDX1BST1BFUlRZKTsKCiAgYm9vbCBkZXBlbmRzT25JbmRleFN0b3JlKCkgPT4gX2dldEZsYWcoRkxBR19ERVBFTkRTX09OX0lOREVYX1NUT1JFKTsKCiAgYm9vbCBzZXREZXBlbmRzT25JbmRleFN0b3JlKCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfREVQRU5EU19PTl9JTkRFWF9TVE9SRSk7CiAgfQoKICBib29sIGNsZWFyRGVwZW5kc09uSW5kZXhTdG9yZSgpIHsKICAgIHJldHVybiBfY2xlYXJGbGFnKEZMQUdfREVQRU5EU19PTl9JTkRFWF9TVE9SRSk7CiAgfQoKICBib29sIHNldENoYW5nZXNJbmRleCgpIHsKICAgIHJldHVybiBfc2V0RmxhZyhGTEFHX0NIQU5HRVNfSU5ERVgpOwogIH0KCiAgYm9vbCBjbGVhckNoYW5nZXNJbmRleCgpIHsKICAgIHJldHVybiBfY2xlYXJGbGFnKEZMQUdfQ0hBTkdFU19JTkRFWCk7CiAgfQoKICBib29sIGNoYW5nZXNJbmRleCgpID0+IF9nZXRGbGFnKEZMQUdfQ0hBTkdFU19JTkRFWCk7CgogIGJvb2wgZGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCkgewogICAgcmV0dXJuIF9nZXRGbGFnKEZMQUdfREVQRU5EU19PTl9JTlNUQU5DRV9QUk9QRVJUWV9TVE9SRSk7CiAgfQoKICBib29sIHNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpIHsKICAgIHJldHVybiBfc2V0RmxhZyhGTEFHX0RFUEVORFNfT05fSU5TVEFOQ0VfUFJPUEVSVFlfU1RPUkUpOwogIH0KCiAgYm9vbCBjbGVhckRlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpIHsKICAgIHJldHVybiBfc2V0RmxhZyhGTEFHX0RFUEVORFNfT05fSU5TVEFOQ0VfUFJPUEVSVFlfU1RPUkUpOwogIH0KCiAgYm9vbCBzZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpIHsKICAgIHJldHVybiBfc2V0RmxhZyhGTEFHX0NIQU5HRVNfSU5TVEFOQ0VfUFJPUEVSVFkpOwogIH0KCiAgYm9vbCBjbGVhckNoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCkgewogICAgcmV0dXJuIF9jbGVhckZsYWcoRkxBR19DSEFOR0VTX0lOU1RBTkNFX1BST1BFUlRZKTsKICB9CgogIGJvb2wgY2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKSA9PiBfZ2V0RmxhZyhGTEFHX0NIQU5HRVNfSU5TVEFOQ0VfUFJPUEVSVFkpOwoKICBzdGF0aWMgaW50IGNvbXB1dGVEZXBlbmRzT25GbGFncyhpbnQgZmxhZ3MpID0+IGZsYWdzIDw8IEZMQUdfQ0hBTkdFU19DT1VOVDsKCiAgYm9vbCBkZXBlbmRzT24oaW50IGRlcGVuZHNGbGFncykgewogICAgcmV0dXJuIChfZmxhZ3MgJiBkZXBlbmRzRmxhZ3MpICE9IDA7CiAgfQoKICBib29sIGFkZChTaWRlRWZmZWN0cyBvdGhlcikgewogICAgaW50IGJlZm9yZSA9IF9mbGFnczsKICAgIF9mbGFncyB8PSBvdGhlci5fZmxhZ3M7CiAgICByZXR1cm4gYmVmb3JlICE9IF9mbGFnczsKICB9CgogIHZvaWQgc2V0VG8oU2lkZUVmZmVjdHMgb3RoZXIpIHsKICAgIF9mbGFncyA9IG90aGVyLl9mbGFnczsKICB9CgogIGJvb2wgY29udGFpbnMoU2lkZUVmZmVjdHMgb3RoZXIpIHsKICAgIHJldHVybiAoX2ZsYWdzIHwgb3RoZXIuX2ZsYWdzKSA9PSBfZmxhZ3M7CiAgfQoKICBpbnQgZ2V0IGZsYWdzID0+IF9mbGFnczsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZSgnU2lkZUVmZmVjdHMocmVhZHMnKTsKICAgIGlmICghZGVwZW5kc09uU29tZXRoaW5nKCkpIHsKICAgICAgYnVmZmVyLndyaXRlKCcgbm90aGluZycpOwogICAgfSBlbHNlIGlmIChkZXBlbmRzT25JbmRleFN0b3JlKCkgJiYKICAgICAgICBkZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKSAmJgogICAgICAgIGRlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSkgewogICAgICBidWZmZXIud3JpdGUoJyBhbnl0aGluZycpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICAgIGlmIChkZXBlbmRzT25JbmRleFN0b3JlKCkpIHsKICAgICAgICBidWZmZXIud3JpdGUoJyBpbmRleCcpOwogICAgICAgIGNvbW1hID0gJywnOwogICAgICB9CiAgICAgIGlmIChkZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnJGNvbW1hIGZpZWxkJyk7CiAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgIH0KICAgICAgaWYgKGRlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnJGNvbW1hIHN0YXRpYycpOwogICAgICB9CiAgICB9CiAgICBidWZmZXIud3JpdGUoJzsgd3JpdGVzJyk7CiAgICBpZiAoIWhhc1NpZGVFZmZlY3RzKCkpIHsKICAgICAgYnVmZmVyLndyaXRlKCcgbm90aGluZycpOwogICAgfSBlbHNlIGlmIChjaGFuZ2VzSW5kZXgoKSAmJgogICAgICAgIGNoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCkgJiYKICAgICAgICBjaGFuZ2VzU3RhdGljUHJvcGVydHkoKSkgewogICAgICBidWZmZXIud3JpdGUoJyBhbnl0aGluZycpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICAgIGlmIChjaGFuZ2VzSW5kZXgoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnIGluZGV4Jyk7CiAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCkpIHsKICAgICAgICBidWZmZXIud3JpdGUoJyRjb21tYSBmaWVsZCcpOwogICAgICAgIGNvbW1hID0gJywnOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VzU3RhdGljUHJvcGVydHkoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnJGNvbW1hIHN0YXRpYycpOwogICAgICB9CiAgICB9CiAgICBidWZmZXIud3JpdGUoJyknKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIFNpZGVFZmZlY3RzQnVpbGRlciB7CiAgZmluYWwgTWVtYmVyRW50aXR5IF9tZW1iZXI7CiAgZmluYWwgU2lkZUVmZmVjdHMgX3NpZGVFZmZlY3RzID0gbmV3IFNpZGVFZmZlY3RzLmVtcHR5KCk7CiAgZmluYWwgYm9vbCBfZnJlZTsKICBTZXQ8U2lkZUVmZmVjdHNCdWlsZGVyPiBfZGVwZW5kaW5nOwoKICBTaWRlRWZmZWN0c0J1aWxkZXIodGhpcy5fbWVtYmVyKSA6IF9mcmVlID0gZmFsc2U7CgogIFNpZGVFZmZlY3RzQnVpbGRlci5mcmVlKHRoaXMuX21lbWJlcikgOiBfZnJlZSA9IHRydWU7CgogIHZvaWQgc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpOwogIH0KCiAgdm9pZCBzZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKTsKICB9CgogIHZvaWQgc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCkgewogICAgaWYgKF9mcmVlKSByZXR1cm47CiAgICBfc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCk7CiAgfQoKICB2b2lkIHNldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXREZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3JlKCk7CiAgfQoKICB2b2lkIHNldEFsbFNpZGVFZmZlY3RzQW5kRGVwZW5kc09uU29tZXRoaW5nKCkgewogICAgaWYgKF9mcmVlKSByZXR1cm47CiAgICBfc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIF9zaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICB9CgogIHZvaWQgc2V0QWxsU2lkZUVmZmVjdHMoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogIH0KCiAgdm9pZCBhZGRJbnB1dChTaWRlRWZmZWN0c0J1aWxkZXIgaW5wdXQpIHsKICAgIGlmIChfZnJlZSkgcmV0dXJuOwogICAgKGlucHV0Ll9kZXBlbmRpbmcgPz89IG5ldyBTZXQ8U2lkZUVmZmVjdHNCdWlsZGVyPigpKS5hZGQodGhpcyk7CiAgfQoKICBib29sIGFkZChTaWRlRWZmZWN0cyBpbnB1dCkgewogICAgaWYgKF9mcmVlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3NpZGVFZmZlY3RzLmFkZChpbnB1dCk7CiAgfQoKICBTaWRlRWZmZWN0cyBnZXQgc2lkZUVmZmVjdHMgPT4gX3NpZGVFZmZlY3RzOwoKICBJdGVyYWJsZTxTaWRlRWZmZWN0c0J1aWxkZXI+IGdldCBkZXBlbmRpbmcgPT4KICAgICAgX2RlcGVuZGluZyAhPSBudWxsID8gX2RlcGVuZGluZyA6IGNvbnN0IDxTaWRlRWZmZWN0c0J1aWxkZXI+W107CgogIE1lbWJlckVudGl0eSBnZXQgbWVtYmVyID0+IF9tZW1iZXI7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdTaWRlRWZmZWN0c0J1aWxkZXIobWVtYmVyPSRtZW1iZXIsJyk7CiAgICBzYi53cml0ZSgnZnJlZT0kX2ZyZWUsJyk7CiAgICBzYi53cml0ZSgnc2lkZUVmZmVjdHM9JHNpZGVFZmZlY3RzLCcpOwogICAgc2Iud3JpdGUoJ2RlcGVuZGluZz0ke2RlcGVuZGluZy5tYXAoKHMpID0+IHMubWVtYmVyKS5qb2luKCcsJyl9LCcpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CoFEAE5OPAEfASQuARRPEywBFCtMMipKATBFPSc7MysxARIBEhkdBAEYHBsEASYBOT4XIhUtBAEvKBUbEwQBDDUBDEoBICwEASAZHx0EASIZIB0EARo1BAEcUAQBMzkBHRkvHQQBHxkwHQQBIRk8Oh0EASAZPDsdBAEoPAQBKzwEAS0+BAEkMwQBJjUEAUoBRwEiMgQBJDQEARspBAEdKwQBNwEqPgQBLT4EAS8+BAEmNQQBKDcEAU4BTgElKQQBIBkcHQQBIhsEASUuBAEbAQwWLichICgsKiENGSMgFQguJhUILCcIBh4dICElIyENGRwgFQgnJhUIJScIBhceBAIBGx48FCYBNAE4ASYXLwQBLRc2BAEkFy0EASsXNAQBMhcmKgQBHRcmBAEsF0QEASAdJAQBLwEwRgEmAQwWKjQeK0gaBAIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0P3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lvL2tlcm5lbF9zb3VyY2VfaW5mb3JtYXRpb24uZGFydLpWLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBTb3VyY2UgaW5mb3JtYXRpb24gc3lzdGVtIG1hcHBpbmcgdGhhdCBhdHRlbXB0cyBhIHNlbWFudGljIG1hcHBpbmcgYmV0d2VlbgovLy8gb2Zmc2V0cyBvZiBKYXZhU2NyaXB0IGNvZGUgcG9pbnRzIHRvIG9mZnNldHMgb2YgRGFydCBjb2RlIHBvaW50cy4KCmxpYnJhcnkgZGFydDJqcy5zb3VyY2VfaW5mb3JtYXRpb24ua2VybmVsOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvanNfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJ3Bvc2l0aW9uX2luZm9ybWF0aW9uLmRhcnQnOwoKY2xhc3MgS2VybmVsU291cmNlSW5mb3JtYXRpb25TdHJhdGVneQogICAgZXh0ZW5kcyBBYnN0cmFjdFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSB7CiAgZmluYWwgSnNCYWNrZW5kU3RyYXRlZ3kgX2JhY2tlbmRTdHJhdGVneTsKCiAgY29uc3QgS2VybmVsU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSh0aGlzLl9iYWNrZW5kU3RyYXRlZ3kpOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgY3JlYXRlQnVpbGRlckZvckNvbnRleHQoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIG5ldyBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIoCiAgICAgICAgX2JhY2tlbmRTdHJhdGVneQogICAgICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgICAgIC5lbGVtZW50TWFwLAogICAgICAgIG1lbWJlcik7CiAgfQp9CgovLy8gQ29tcHV0ZSB0aGUgc291cmNlIG1hcCBuYW1lIGZvciBrZXJuZWwgYmFzZWQgW21lbWJlcl0uIElmIFtjYWxsU3RydWN0dXJlXQovLy8gaXMgbm9uLW51bGwgaXQgaXMgdXNlZCB0byBuYW1lIHRoZSBwYXJhbWV0ZXIgc3R1YiBmb3IgW2VsZW1lbnRdLgovLy8KLy8vIFtlbGVtZW50TWFwXSBpcyB1c2VkIHRvIGNvbXB1dGUgbmFtZXMgZm9yIGNsb3N1cmUgY2FsbCBtZXRob2RzLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYWtlIHRoZSBjbG9zdXJlIGNhbGwgbmFtZXMgYXZhaWxhYmxlIHRvCi8vIGBzb3VyY2VtYXBfaGVscGVyLmRhcnRgLgpTdHJpbmcgY29tcHV0ZUtlcm5lbEVsZW1lbnROYW1lRm9yU291cmNlTWFwcygKICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICBbQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlXSkgewogIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihtZW1iZXIpOwogIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUNhbGw6CiAgICAgIGlyLlRyZWVOb2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgIFN0cmluZyBuYW1lOwogICAgICB3aGlsZSAobm9kZSBpcyEgaXIuTWVtYmVyKSB7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbikgewogICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICBuYW1lID0gJyR7bm9kZS52YXJpYWJsZS5uYW1lfS4kbmFtZSc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuYW1lID0gbm9kZS52YXJpYWJsZS5uYW1lOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5GdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgbmFtZSA9ICc8YW5vbnltb3VzIGZ1bmN0aW9uPi4kbmFtZSc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuYW1lID0gJzxhbm9ueW1vdXMgZnVuY3Rpb24+JzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgICB9CiAgICAgIE1lbWJlckVudGl0eSBlbmNsb3NpbmdNZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgU3RyaW5nIGVuY2xvc2luZ01lbWJlck5hbWUgPQogICAgICAgICAgY29tcHV0ZUVsZW1lbnROYW1lRm9yU291cmNlTWFwcyhlbmNsb3NpbmdNZW1iZXIsIGNhbGxTdHJ1Y3R1cmUpOwogICAgICByZXR1cm4gJyRlbmNsb3NpbmdNZW1iZXJOYW1lLiRuYW1lJzsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBjb21wdXRlRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKG1lbWJlciwgY2FsbFN0cnVjdHVyZSk7CiAgfQp9CgovLy8gW1NvdXJjZUluZm9ybWF0aW9uQnVpbGRlcl0gdGhhdCBnZW5lcmF0ZXMgW1Bvc2l0aW9uU291cmNlSW5mb3JtYXRpb25dIGZyb20KLy8vIEtlcm5lbCBub2Rlcy4KY2xhc3MgS2VybmVsU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIGltcGxlbWVudHMgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIHsKICBmaW5hbCBKc1RvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgX21lbWJlcjsKICBmaW5hbCBTdHJpbmcgX25hbWU7CgogIC8vLyBJbmxpbmluZyBjb250ZXh0IG9yIG51bGwgd2hlbiBubyBpbmxpbmluZyBoYXMgdGFrZW4gcGxhY2UuCiAgLy8vCiAgLy8vIEEgbmV3IGJ1aWxkZXIgaXMgY3JlYXRlZCBldmVyeSB0aW1lIHRoZSBiYWNrZW5kIGlubGluZXMgYSBtZXRob2QuIFRoaXMKICAvLy8gZmllbGQgY29udGFpbnMgdGhlIGxvY2F0aW9uIG9mIGV2ZXJ5IGNhbGwgc2l0ZSB0aGF0IGhhcyBiZWVuIGlubGluZWQuIFRoZQogIC8vLyBsYXN0IGVudHJ5IG9uIHRoZSBsaXN0IGlzIGFsd2F5cyBhIGNhbGwgdG8gW19tZW1iZXJdLgogIGZpbmFsIExpc3Q8RnJhbWVDb250ZXh0PiBpbmxpbmluZ0NvbnRleHQ7CgogIEtlcm5lbFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcih0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9tZW1iZXIpCiAgICAgIDogX25hbWUgPSBjb21wdXRlS2VybmVsRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKF9lbGVtZW50TWFwLCBfbWVtYmVyKSwKICAgICAgICBpbmxpbmluZ0NvbnRleHQgPSBudWxsOwoKICBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIud2l0aENvbnRleHQoCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX21lbWJlciwgdGhpcy5pbmxpbmluZ0NvbnRleHQsIHRoaXMuX25hbWUpOwoKICAvLy8gUmV0dXJucyB0aGUgW1NvdXJjZUxvY2F0aW9uXSBmb3IgdGhlIFtvZmZzZXRdIHdpdGhpbiBbbm9kZV0gdXNpbmcgW25hbWVdCiAgLy8vIGFzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgbG9jYXRpb24uCiAgLy8vCiAgLy8vIElmIFtvZmZzZXRdIGlzIGBudWxsYCwgdGhlIGZpcnN0IGBmaWxlT2Zmc2V0YCBvZiBbbm9kZV0gb3IgaXRzIHBhcmVudHMgaXMKICAvLy8gdXNlZC4KICBTb3VyY2VMb2NhdGlvbiBfZ2V0U291cmNlTG9jYXRpb24oU3RyaW5nIG5hbWUsIGlyLlRyZWVOb2RlIG5vZGUsCiAgICAgIFtpbnQgb2Zmc2V0XSkgewogICAgaXIuTG9jYXRpb24gbG9jYXRpb247CiAgICBpZiAob2Zmc2V0ICE9IG51bGwpIHsKICAgICAgbG9jYXRpb24gPSBub2RlLmxvY2F0aW9uOwogICAgICBsb2NhdGlvbiA9IG5vZGUuZW5jbG9zaW5nQ29tcG9uZW50LmdldExvY2F0aW9uKGxvY2F0aW9uLmZpbGUsIG9mZnNldCk7CiAgICB9IGVsc2UgewogICAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZmlsZU9mZnNldCA9PSBpci5UcmVlTm9kZS5ub09mZnNldCkgewogICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgICAgfQogICAgICBsb2NhdGlvbiA9IG5vZGUubG9jYXRpb247CiAgICAgIG9mZnNldCA9IG5vZGUuZmlsZU9mZnNldDsKICAgIH0KICAgIGFzc2VydCgKICAgICAgICBsb2NhdGlvbiAhPSBudWxsLCAiTm8gbG9jYXRpb24gZm91bmQgZm9yICRub2RlICgke25vZGUucnVudGltZVR5cGV9KSIpOwogICAgcmV0dXJuIG5ldyBLZXJuZWxTb3VyY2VMb2NhdGlvbihsb2NhdGlvbiwgb2Zmc2V0LCBuYW1lKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVkIGJ5IHRoZQogIC8vLyByb290IFtub2RlXSBhbmQgaXRzIFtmdW5jdGlvbk5vZGVdLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBoYW5kbGVzIGJvdGggbWV0aG9kcywgY29uc3RydWN0b3JzLCBhbmQgbG9jYWwgZnVuY3Rpb25zLgogIFNvdXJjZUluZm9ybWF0aW9uIF9idWlsZEZ1bmN0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgaXIuVHJlZU5vZGUgbm9kZSwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSkgewogICAgaWYgKGZ1bmN0aW9uTm9kZS5maWxlRW5kT2Zmc2V0ICE9IGlyLlRyZWVOb2RlLm5vT2Zmc2V0KSB7CiAgICAgIHJldHVybiBuZXcgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICAgIF9nZXRTb3VyY2VMb2NhdGlvbihuYW1lLCBub2RlKSwKICAgICAgICAgIF9nZXRTb3VyY2VMb2NhdGlvbihuYW1lLCBmdW5jdGlvbk5vZGUsIGZ1bmN0aW9uTm9kZS5maWxlRW5kT2Zmc2V0KSwKICAgICAgICAgIHRoaXMuaW5saW5pbmdDb250ZXh0KTsKICAgIH0KICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGEgW2Jhc2VdIGFuZCBlbmQgb2YgW21lbWJlcl0uIElmIFtiYXNlXQogIC8vLyBpcyBub3QgcHJvdmlkZWQsIHRoZSBvZmZzZXQgb2YgW21lbWJlcl0gaXMgdXNlZCBhcyB0aGUgc3RhcnQgcG9zaXRpb24uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYW5kIHJldHVybiBleHByZXNzaW9ucyB3aGljaCBib3RoIHBvaW50CiAgLy8vIHRvIHRoZSBlbmQgb2YgdGhlIG1lbWJlciBhcyB0aGUgY2xvc2luZyBwb3NpdGlvbi4KICBTb3VyY2VJbmZvcm1hdGlvbiBfYnVpbGRGdW5jdGlvbkVuZChNZW1iZXJFbnRpdHkgbWVtYmVyLCBbaXIuVHJlZU5vZGUgYmFzZV0pIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24obWVtYmVyKTsKICAgIFN0cmluZyBuYW1lID0gY29tcHV0ZUtlcm5lbEVsZW1lbnROYW1lRm9yU291cmNlTWFwcyhfZWxlbWVudE1hcCwgbWVtYmVyKTsKICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICAgIGlyLk1lbWJlciBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uKG5hbWUsIGJhc2UgPz8gbm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgaXIuTWVtYmVyIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uKG5hbWUsIGJhc2UgPz8gbm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uKG5hbWUsIGJhc2UgPz8gbm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgICAgIC8vIFRPRE8oc3JhKTogZ2VuZXJhdG9yQm9keQogICAgICBkZWZhdWx0OgogICAgfQogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKGJhc2UgPz8gZGVmaW5pdGlvbi5ub2RlLCBuYW1lOiBuYW1lKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGV4aXRpbmcgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZWQKICAvLy8gYnkgdGhlIHJvb3QgW25vZGVdIGFuZCBpdHMgW2Z1bmN0aW9uTm9kZV0uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgYm90aCBtZXRob2RzLCBjb25zdHJ1Y3RvcnMsIGFuZCBsb2NhbCBmdW5jdGlvbnMuCiAgU291cmNlSW5mb3JtYXRpb24gX2J1aWxkRnVuY3Rpb25FeGl0KAogICAgICBpci5UcmVlTm9kZSBub2RlLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlKSB7CiAgICBpZiAoZnVuY3Rpb25Ob2RlLmZpbGVFbmRPZmZzZXQgIT0gaXIuVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgICAgX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCBmdW5jdGlvbk5vZGUsIGZ1bmN0aW9uTm9kZS5maWxlRW5kT2Zmc2V0KSwKICAgICAgICAgIG51bGwsCiAgICAgICAgICB0aGlzLmlubGluaW5nQ29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICAvLy8gQ3JlYXRlcyB0aGUgc291cmNlIGluZm9ybWF0aW9uIGZvciB0aGUgW2JvZHldIG9mIFtub2RlXS4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBmb3IgY29kZSBpbiB0aGUgYmVnaW5uaW5nIG9mIGEgbWV0aG9kLCBsaWtlCiAgLy8vIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpbiB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbi4KICBTb3VyY2VJbmZvcm1hdGlvbiBfYnVpbGRCb2R5KGlyLlRyZWVOb2RlIG5vZGUsIGlyLlRyZWVOb2RlIGJvZHkpIHsKICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBpZiAoYm9keSBpcyBpci5CbG9jayAmJiBib2R5LnN0YXRlbWVudHMuaXNOb3RFbXB0eSkgewogICAgICAgIGxvY2F0aW9uID0gX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCBib2R5LnN0YXRlbWVudHMuZmlyc3QpOwogICAgICB9IGVsc2UgewogICAgICAgIGxvY2F0aW9uID0gX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCBib2R5KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgbG9jYXRpb24gPSBfZ2V0U291cmNlTG9jYXRpb24oX25hbWUsIG5vZGUpOwogICAgfQogICAgcmV0dXJuIG5ldyBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uKGxvY2F0aW9uLCBudWxsLCBpbmxpbmluZ0NvbnRleHQpOwogIH0KCiAgLy8vIENyZWF0ZXMgc291cmNlIGluZm9ybWF0aW9uIGZvciB0aGUgYm9keSBvZiB0aGUgY3VycmVudCBtZW1iZXIuCiAgU291cmNlSW5mb3JtYXRpb24gX2J1aWxkTWVtYmVyQm9keSgpIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oX21lbWJlcik7CiAgICBzd2l0Y2ggKGRlZmluaXRpb24ua2luZCkgewogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkQm9keShub2RlLCBub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5GaWVsZCkgewogICAgICAgICAgcmV0dXJuIF9idWlsZEJvZHkobm9kZSwgbm9kZS5pbml0aWFsaXplcik7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgaXIuTm9kZSBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgcmV0dXJuIF9idWlsZEJvZHkobm9kZSwgbm9kZS5mdW5jdGlvbi5ib2R5KTsKICAgICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgICAgIHJldHVybiBfYnVpbGRCb2R5KG5vZGUsIG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUNhbGw6CiAgICAgICAgaXIuTG9jYWxGdW5jdGlvbiBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIHJldHVybiBfYnVpbGRCb2R5KG5vZGUsIG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5OgogICAgICAgIGlyLk5vZGUgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICBpZiAobm9kZSBpcyBpci5Mb2NhbEZ1bmN0aW9uKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkQm9keShub2RlLCBub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5NZW1iZXIgJiYgbm9kZS5mdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkQm9keShub2RlLCBub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgIH0KICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShkZWZpbml0aW9uLm5vZGUpOwogIH0KCiAgLy8vIENyZWF0ZXMgc291cmNlIGluZm9ybWF0aW9uIGZvciB0aGUgZXhpdCBvZiB0aGUgY3VycmVudCBtZW1iZXIuCiAgU291cmNlSW5mb3JtYXRpb24gX2J1aWxkTWVtYmVyRXhpdCgpIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oX21lbWJlcik7CiAgICBzd2l0Y2ggKGRlZmluaXRpb24ua2luZCkgewogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkRnVuY3Rpb25FeGl0KG5vZGUsIG5vZGUuZnVuY3Rpb24pOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yOgogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICAgIGlyLk1lbWJlciBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIHJldHVybiBfYnVpbGRGdW5jdGlvbkV4aXQobm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uRXhpdChub2RlLCBub2RlLmZ1bmN0aW9uKTsKICAgICAgZGVmYXVsdDoKICAgIH0KICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShkZWZpbml0aW9uLm5vZGUpOwogIH0KCiAgLy8vIENyZWF0ZXMgc291cmNlIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBsb2NhdGlvbiBvZiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gX2J1aWxkVHJlZU5vZGUoaXIuVHJlZU5vZGUgbm9kZSwKICAgICAge1NvdXJjZUxvY2F0aW9uIGNsb3NpbmdQb3NpdGlvbiwgU3RyaW5nIG5hbWV9KSB7CiAgICByZXR1cm4gbmV3IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24oCiAgICAgICAgX2dldFNvdXJjZUxvY2F0aW9uKG5hbWUgPz8gX25hbWUsIG5vZGUpLAogICAgICAgIGNsb3NpbmdQb3NpdGlvbiwKICAgICAgICBpbmxpbmluZ0NvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIGZvckNvbnRleHQoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIFNvdXJjZUluZm9ybWF0aW9uIGNvbnRleHQpIHsKICAgIExpc3Q8RnJhbWVDb250ZXh0PiBuZXdDb250ZXh0ID0gaW5saW5pbmdDb250ZXh0Py50b0xpc3QoKSA/PyBbXTsKICAgIGlmIChjb250ZXh0ICE9IG51bGwpIHsKICAgICAgbmV3Q29udGV4dC5hZGQobmV3IEZyYW1lQ29udGV4dChjb250ZXh0LCBtZW1iZXIubmFtZSkpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogaW52ZXN0aWdhdGUgd2hldGhlciB3ZSBoYXZlIGFueSBtb3JlIGNhc2VzIHdoZXJlIGNvbnRleHQKICAgICAgLy8gaXMgbnVsbC4KICAgICAgbmV3Q29udGV4dCA9IGlubGluaW5nQ29udGV4dDsKICAgIH0KCiAgICBTdHJpbmcgbmFtZSA9IGNvbXB1dGVLZXJuZWxFbGVtZW50TmFtZUZvclNvdXJjZU1hcHMoX2VsZW1lbnRNYXAsIF9tZW1iZXIpOwogICAgcmV0dXJuIG5ldyBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIud2l0aENvbnRleHQoCiAgICAgICAgX2VsZW1lbnRNYXAsIG1lbWJlciwgbmV3Q29udGV4dCwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN3aXRjaENhc2UoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN3aXRjaChpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXMoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZElzKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRUcnkoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZENhdGNoKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRCaW5hcnkoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFVuYXJ5KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRJbmRleFNldChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSW5kZXgoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluU2V0KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRGb3JJbkN1cnJlbnQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluTW92ZU5leHQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluSXRlcmF0b3IoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN0cmluZ0ludGVycG9sYXRpb24oaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvcmVpZ25Db2RlKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRWYXJpYWJsZURlY2xhcmF0aW9uKCkgewogICAgcmV0dXJuIF9idWlsZE1lbWJlckJvZHkoKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXdhaXQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFlpZWxkKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3luY0JvZHkoKSB7CiAgICByZXR1cm4gX2J1aWxkTWVtYmVyQm9keSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3luY0V4aXQoKSB7CiAgICByZXR1cm4gX2J1aWxkTWVtYmVyRXhpdCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3NpZ25tZW50KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRUaHJvdyhpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXNzZXJ0KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGROZXcoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZElmKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRDYWxsKAogICAgICBjb3ZhcmlhbnQgaXIuVHJlZU5vZGUgcmVjZWl2ZXIsIGNvdmFyaWFudCBpci5UcmVlTm9kZSBjYWxsKSB7CiAgICByZXR1cm4gbmV3IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24oX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCByZWNlaXZlciksCiAgICAgICAgX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCBjYWxsKSwgaW5saW5pbmdDb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkR2V0KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRTZXQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZExvb3AoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEltcGxpY2l0UmV0dXJuKE1lbWJlckVudGl0eSBlbGVtZW50KSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFJldHVybihpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRGdW5jdGlvbkVuZChfbWVtYmVyLCBub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQ3JlYXRlKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRMaXN0TGl0ZXJhbChpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkR2VuZXJpYyhpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRGVjbGFyYXRpb24oTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uRW5kKG1lbWJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN0dWIoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oZnVuY3Rpb24pOwogICAgU3RyaW5nIG5hbWUgPSBjb21wdXRlS2VybmVsRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKAogICAgICAgIF9lbGVtZW50TWFwLCBmdW5jdGlvbiwgY2FsbFN0cnVjdHVyZSk7CiAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSwgbmFtZTogbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEdvdG8oaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQp9CgpjbGFzcyBLZXJuZWxTb3VyY2VMb2NhdGlvbiBleHRlbmRzIEFic3RyYWN0U291cmNlTG9jYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIGludCBvZmZzZXQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIHNvdXJjZU5hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHNvdXJjZVVyaTsKCiAgS2VybmVsU291cmNlTG9jYXRpb24oaXIuTG9jYXRpb24gbG9jYXRpb24sIHRoaXMub2Zmc2V0LCB0aGlzLnNvdXJjZU5hbWUpCiAgICAgIDogc291cmNlVXJpID0gbG9jYXRpb24uZmlsZSwKICAgICAgICBzdXBlci5mcm9tTG9jYXRpb24obG9jYXRpb24pOwoKICBLZXJuZWxTb3VyY2VMb2NhdGlvbi5mcm9tT3RoZXIoS2VybmVsU291cmNlTG9jYXRpb24gb3RoZXIsIHRoaXMuc291cmNlTmFtZSkKICAgICAgOiBzb3VyY2VVcmkgPSBvdGhlci5zb3VyY2VVcmksCiAgICAgICAgb2Zmc2V0ID0gb3RoZXIub2Zmc2V0LAogICAgICAgIHN1cGVyLmZyb21PdGhlcihvdGhlcik7Cn0KgeAATk48AU9GASsBKCQnJyoiJAEmOCwBQAEMSi8ZPhkRBAIBTkUEREEcLjQlSB0hKhMjLh4yEycMNB4xEysMChwIQSNLKw1FBAIBTxJLJB4WAUEGTVA8LAFBTSABLkkBTyoGUAxDFhoaIE0NSBwIICAGDFA9BAFOKgZLJEU+LCpOIQYhBAFRTQZROFFLTh8fKiRECg8jJypCIzFCIg8GQAQBTzEGSyg4PixPECEGIQQBPwZJOEUdGDxFDzQIDTIGSwQBRSlMHx8oJDcnNQoPIycoJDctNwoPIzE1JSgoN0E3Cg8PBiwEAUUpTB8fKCQ6Cg8jJyo4IzE4DwYsBAFCNTcqMRkaBAEMJzhFGz4NURIkBgFPOzAEAQw7AQwwIQQBDCwhBAEMLCEEAQwtIQQBDC8hBAEMMCEEAQwvIQQBDDkBDDYBDDIhBAEMNiEEAQw3IQQBDDchBAEMRAEMPAEMMR8EAQwvIQQBDC8hBAEMJx8EAQwnHwQBDDQhBAEMLyEEAQwwIQQBDC0hBAEMLCEEAQwfRE47BAEMLSEEAQwtIQQBDC4hBAEMRwEMMC0EAQwwIQQBDDUhBAEMOAEMPCYEAQwfPk05LyQtBAEMLiEEAgE8DBQMGwwXAUsjJgFOJR8gAgE2cGFja2FnZTpjb21waWxlci9zcmMvaW8va2VybmVsX3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzL2pzX3NvdXJjZV9tYXBwaW5nLmRhcnSQfC8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzLnNvdXJjZV9tYXBwaW5nOwoKaW1wb3J0ICcuLi9pby9jb2RlX291dHB1dC5kYXJ0JwogICAgc2hvdyBCdWZmZXJlZENvZGVPdXRwdXQsIFNvdXJjZUxvY2F0aW9ucywgU291cmNlTG9jYXRpb25zUHJvdmlkZXI7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnCiAgICBzaG93IFNvdXJjZUxvY2F0aW9uLCBTb3VyY2VJbmZvcm1hdGlvbiwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKaW1wb3J0ICdqcy5kYXJ0JzsKCi8vLyBbU291cmNlSW5mb3JtYXRpb25TdHJhdGVneV0gdGhhdCBjYW4gYXNzb2NpYXRlIHNvdXJjZSBpbmZvcm1hdGlvbiB3aXRoCi8vLyBKYXZhU2NyaXB0IG91dHB1dC4KY2xhc3MgSmF2YVNjcmlwdFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHsKICBjb25zdCBKYXZhU2NyaXB0U291cmNlSW5mb3JtYXRpb25TdHJhdGVneSgpOwoKICAvLy8gQ3JlYXRlcyBhIHByb2Nlc3NvciB0aGF0IGNhbiBhc3NvY2lhdGUgc291cmNlIGluZm9ybWF0aW9uIG9uIFtOb2RlXSB3aXRoCiAgLy8vIGNvZGUgb2Zmc2V0cyBpbiBhIFtTb3VyY2VNYXBwZXJdIHByb3ZpZGVkIGJ5IFtzb3VyY2VNYXBwZXJQcm92aWRlcl0uCiAgLy8vIFNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBbTm9kZV0gaXMgcHJvdmlkZXIgYnkgW3JlYWRlcl0uCiAgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IgY3JlYXRlUHJvY2Vzc29yKAogICAgICBTb3VyY2VNYXBwZXJQcm92aWRlciBzb3VyY2VNYXBwZXJQcm92aWRlciwKICAgICAgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgcmVhZGVyKSB7CiAgICByZXR1cm4gY29uc3QgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IoKTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGRlcml2aW5nIFtTb3VyY2VJbmZvcm1hdGlvbl0gZnJvbSBhIFtOb2RlXS4KLy8vCi8vLyBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiByZWFkIHRoZSB2YWx1ZSBvZiB0aGUgbm9kZSBpdHNlbGYuCmNsYXNzIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHsKICBjb25zdCBTb3VyY2VJbmZvcm1hdGlvblJlYWRlcigpOwoKICBTb3VyY2VJbmZvcm1hdGlvbiBnZXRTb3VyY2VJbmZvcm1hdGlvbihOb2RlIG5vZGUpID0+IG5vZGUuc291cmNlSW5mb3JtYXRpb247Cn0KCi8vLyBBbiBvYnNlcnZlciBvZiBjb2RlIHBvc2l0aW9ucyBvZiBwcmludGVkIEphdmFTY3JpcHQgW05vZGVdcy4KY2xhc3MgQ29kZVBvc2l0aW9uTGlzdGVuZXIgewogIGNvbnN0IENvZGVQb3NpdGlvbkxpc3RlbmVyKCk7CgogIC8vLyBDYWxsZWQgdG8gYXNzb2NpYXRlIFtub2RlXSB3aXRoIHRoZSBwcm92aWRlZCBzdGFydCBwb3NpdGlvbi4KICAvLy8KICAvLy8gVGhlIG5vZGVzIGFyZSBzZWVuIGluIHByZS10cmF2ZXJzYWwgb3JkZXIuCiAgdm9pZCBvblN0YXJ0UG9zaXRpb24oTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbikge30KCiAgLy8vIENhbGxlZCB0byBhc3NvY2lhdGUgW25vZGVdIHdpdGggdGhlIHByb3ZpZGVkIHN0YXJ0LCBlbmQgYW5kIGNsb3NpbmcKICAvLy8gcG9zaXRpb25zLgogIC8vLwogIC8vLyBUaGUgbm9kZXMgYXJlIHNlZW4gaW4gcG9zdC10cmF2ZXJzYWwgb3JkZXIuCiAgdm9pZCBvblBvc2l0aW9ucygKICAgICAgTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBpbnQgY2xvc2luZ1Bvc2l0aW9uKSB7fQp9CgovLy8gSW50ZXJmYWNlIGZvciBjcmVhdGluZyBbU291cmNlTWFwcGVyXXMgZm9yIG11bHRpcGxlIHNvdXJjZSBpbmZvcm1hdGlvbgovLy8gZW5naW5lcy4KYWJzdHJhY3QgY2xhc3MgU291cmNlTWFwcGVyUHJvdmlkZXIgewogIFNvdXJjZU1hcHBlciBjcmVhdGVTb3VyY2VNYXBwZXIoU3RyaW5nIG5hbWUpOwp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBbU291cmNlTWFwcGVyUHJvdmlkZXJdLgpjbGFzcyBTb3VyY2VNYXBwZXJQcm92aWRlckltcGwgaW1wbGVtZW50cyBTb3VyY2VNYXBwZXJQcm92aWRlciB7CiAgZmluYWwgU291cmNlTG9jYXRpb25zUHJvdmlkZXIgcHJvdmlkZXI7CgogIFNvdXJjZU1hcHBlclByb3ZpZGVySW1wbCh0aGlzLnByb3ZpZGVyKTsKCiAgQG92ZXJyaWRlCiAgU291cmNlTWFwcGVyIGNyZWF0ZVNvdXJjZU1hcHBlcihTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIG5ldyBTb3VyY2VMb2NhdGlvbnNNYXBwZXIocHJvdmlkZXIuY3JlYXRlU291cmNlTG9jYXRpb25zKG5hbWUpKTsKICB9Cn0KCi8vLyBBbiBpbnRlcmZhY2UgZm9yIG1hcHBpbmcgY29kZSBvZmZzZXRzIHdpdGggW1NvdXJjZUxvY2F0aW9uXXMgZm9yIEphdmFTY3JpcHQKLy8vIFtOb2RlXXMuCmFic3RyYWN0IGNsYXNzIFNvdXJjZU1hcHBlciB7CiAgLy8vIEFzc29jaWF0ZSBbY29kZU9mZnNldF0gd2l0aCBbc291cmNlTG9jYXRpb25dIGZvciBbbm9kZV0uCiAgdm9pZCByZWdpc3RlcihOb2RlIG5vZGUsIGludCBjb2RlT2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbik7CgogIC8vLyBBc3NvY2lhdGUgW2NvZGVPZmZzZXRdIHdpdGggYW4gaW5saW5pbmcgY2FsbCBhdCBbc291cmNlTG9jYXRpb25dLgogIHZvaWQgcmVnaXN0ZXJQdXNoKAogICAgICBpbnQgY29kZU9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24sIFN0cmluZyBpbmxpbmVkTWV0aG9kTmFtZSk7CgogIC8vLyBBc3NvY2lhdGUgW2NvZGVPZmZzZXRdIHdpdGggYW4gaW5saW5pbmcgcmV0dXJuLgogIC8vLwogIC8vLyBJZiBbaXNFbXB0eV0gaXMgdHJ1ZSwgYWxzbyBhc3NvY2lhdGUgdGhhdCB0aGUgaW5saW5pbmcgc3RhY2sgaXMgZW1wdHkgYXQKICAvLy8gW2NvZGVPZmZzZXRdLgogIHZvaWQgcmVnaXN0ZXJQb3AoaW50IGNvZGVPZmZzZXQsIHtib29sIGlzRW1wdHk6IGZhbHNlfSk7Cn0KCi8vLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBbU291cmNlTWFwcGVyXSB0aGF0IHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gZGlyZWN0bHkKLy8vIGludG8gYSBbU291cmNlTG9jYXRpb25zXSBvYmplY3QuCmNsYXNzIFNvdXJjZUxvY2F0aW9uc01hcHBlciBpbXBsZW1lbnRzIFNvdXJjZU1hcHBlciB7CiAgZmluYWwgU291cmNlTG9jYXRpb25zIHNvdXJjZUxvY2F0aW9uczsKCiAgU291cmNlTG9jYXRpb25zTWFwcGVyKHRoaXMuc291cmNlTG9jYXRpb25zKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlcihOb2RlIG5vZGUsIGludCBjb2RlT2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikgewogICAgc291cmNlTG9jYXRpb25zLmFkZFNvdXJjZUxvY2F0aW9uKGNvZGVPZmZzZXQsIHNvdXJjZUxvY2F0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJQdXNoKAogICAgICBpbnQgY29kZU9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24sIFN0cmluZyBpbmxpbmVkTWV0aG9kTmFtZSkgewogICAgc291cmNlTG9jYXRpb25zLmFkZFB1c2goY29kZU9mZnNldCwgc291cmNlTG9jYXRpb24sIGlubGluZWRNZXRob2ROYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJQb3AoaW50IGNvZGVPZmZzZXQsIHtib29sIGlzRW1wdHk6IGZhbHNlfSkgewogICAgc291cmNlTG9jYXRpb25zLmFkZFBvcChjb2RlT2Zmc2V0LCBpc0VtcHR5KTsKICB9Cn0KCi8vLyBBIHByb2Nlc3NvciB0aGF0IGFzc29jaWF0ZXMgW1NvdXJjZUluZm9ybWF0aW9uXSB3aXRoIGNvZGUgcG9zaXRpb24gb2YKLy8vIEphdmFTY3JpcHQgW05vZGVdcy4KY2xhc3MgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IgZXh0ZW5kcyBDb2RlUG9zaXRpb25MaXN0ZW5lciB7CiAgY29uc3QgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IoKTsKCiAgLy8vIFByb2Nlc3MgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBhbmQgY29kZSBwb3NpdGlvbnMgZm9yIHRoZSBbbm9kZV0gYW5kIGFsbAogIC8vLyBpdHMgY2hpbGRyZW4uCiAgdm9pZCBwcm9jZXNzKE5vZGUgbm9kZSwgQnVmZmVyZWRDb2RlT3V0cHV0IGNvZGUpIHt9Cn0KewBOTjwBGwEgRydHEgFLF04vAU9LQi4xKC8EAgE+BD8gIwFPAgFBHSABQwYxOAFKEQYyFE0CAUsNJjACATNBKgErAQwxTAQCAVANHj9LAUgVUAE2Bk8UOwIBTSU2KQEvAQxMQwQBDBVRTAQBDDwxBAIBShhAJgFPFDYCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9qcy9qc19zb3VyY2VfbWFwcGluZy5kYXJ0PHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZF9pbXBhY3QuZGFydMAAZjEvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2hlbHBlcnMuaW1wYWN0OwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHMsIEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JyBzaG93IEludGVyZmFjZVR5cGU7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXIsIFdvcmxkSW1wYWN0QnVpbGRlckltcGw7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JzsKCi8vLyBCYWNrZW5kIHNwZWNpZmljIGZlYXR1cmVzIHJlcXVpcmVkIGJ5IGEgYmFja2VuZCBpbXBhY3QuCmVudW0gQmFja2VuZEZlYXR1cmUgewogIG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcsCiAgbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCn0KCi8vLyBBIHNldCBvZiBKYXZhU2NyaXB0IGJhY2tlbmQgZGVwZW5kZW5jaWVzLgpjbGFzcyBCYWNrZW5kSW1wYWN0IHsKICBmaW5hbCBMaXN0PEZ1bmN0aW9uRW50aXR5PiBzdGF0aWNVc2VzOwogIGZpbmFsIExpc3Q8RnVuY3Rpb25FbnRpdHk+IGdsb2JhbFVzZXM7CiAgZmluYWwgTGlzdDxTZWxlY3Rvcj4gZHluYW1pY1VzZXM7CiAgZmluYWwgTGlzdDxJbnRlcmZhY2VUeXBlPiBpbnN0YW50aWF0ZWRUeXBlczsKICBmaW5hbCBMaXN0PENsYXNzRW50aXR5PiBpbnN0YW50aWF0ZWRDbGFzc2VzOwogIGZpbmFsIExpc3Q8Q2xhc3NFbnRpdHk+IGdsb2JhbENsYXNzZXM7CiAgZmluYWwgTGlzdDxCYWNrZW5kSW1wYWN0PiBvdGhlckltcGFjdHM7CiAgZmluYWwgRW51bVNldDxCYWNrZW5kRmVhdHVyZT4gX2ZlYXR1cmVzOwoKICBjb25zdCBCYWNrZW5kSW1wYWN0KAogICAgICB7dGhpcy5zdGF0aWNVc2VzOiBjb25zdCA8RnVuY3Rpb25FbnRpdHk+W10sCiAgICAgIHRoaXMuZ2xvYmFsVXNlczogY29uc3QgPEZ1bmN0aW9uRW50aXR5PltdLAogICAgICB0aGlzLmR5bmFtaWNVc2VzOiBjb25zdCA8U2VsZWN0b3I+W10sCiAgICAgIHRoaXMuaW5zdGFudGlhdGVkVHlwZXM6IGNvbnN0IDxJbnRlcmZhY2VUeXBlPltdLAogICAgICB0aGlzLmluc3RhbnRpYXRlZENsYXNzZXM6IGNvbnN0IDxDbGFzc0VudGl0eT5bXSwKICAgICAgdGhpcy5nbG9iYWxDbGFzc2VzOiBjb25zdCA8Q2xhc3NFbnRpdHk+W10sCiAgICAgIHRoaXMub3RoZXJJbXBhY3RzOiBjb25zdCA8QmFja2VuZEltcGFjdD5bXSwKICAgICAgRW51bVNldDxCYWNrZW5kRmVhdHVyZT4gZmVhdHVyZXM6IGNvbnN0IEVudW1TZXQ8QmFja2VuZEZlYXR1cmU+LmZpeGVkKDApfSkKICAgICAgOiB0aGlzLl9mZWF0dXJlcyA9IGZlYXR1cmVzOwoKICBJdGVyYWJsZTxCYWNrZW5kRmVhdHVyZT4gZ2V0IGZlYXR1cmVzID0+CiAgICAgIF9mZWF0dXJlcy5pdGVyYWJsZShCYWNrZW5kRmVhdHVyZS52YWx1ZXMpOwoKICBXb3JsZEltcGFjdCBjcmVhdGVJbXBhY3QoRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIHJlZ2lzdGVySW1wYWN0KGltcGFjdEJ1aWxkZXIsIGVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9CgogIC8vLyBSZWdpc3RlciB0aGlzIGJhY2tlbmQgaW1wYWN0IHRvIHRoZSBbd29ybGRJbXBhY3RCdWlsZGVyXS4KICB2b2lkIHJlZ2lzdGVySW1wYWN0KFdvcmxkSW1wYWN0QnVpbGRlciB3b3JsZEltcGFjdEJ1aWxkZXIsCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgc3RhdGljVXNlIGluIHN0YXRpY1VzZXMpIHsKICAgICAgYXNzZXJ0KHN0YXRpY1VzZSAhPSBudWxsKTsKICAgICAgd29ybGRJbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5pbXBsaWNpdEludm9rZShzdGF0aWNVc2UpKTsKICAgIH0KICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgc3RhdGljVXNlIGluIGdsb2JhbFVzZXMpIHsKICAgICAgYXNzZXJ0KHN0YXRpY1VzZSAhPSBudWxsKTsKICAgICAgd29ybGRJbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5pbXBsaWNpdEludm9rZShzdGF0aWNVc2UpKTsKICAgIH0KICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gZHluYW1pY1VzZXMpIHsKICAgICAgYXNzZXJ0KHNlbGVjdG9yICE9IG51bGwpOwogICAgICB3b3JsZEltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2Uoc2VsZWN0b3IsIG51bGwsIGNvbnN0IFtdKSk7CiAgICB9CiAgICBmb3IgKEludGVyZmFjZVR5cGUgaW5zdGFudGlhdGVkVHlwZSBpbiBpbnN0YW50aWF0ZWRUeXBlcykgewogICAgICB3b3JsZEltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihpbnN0YW50aWF0ZWRUeXBlKSk7CiAgICB9CiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBpbnN0YW50aWF0ZWRDbGFzc2VzKSB7CiAgICAgIHdvcmxkSW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgICBuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKGVsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGNscykpKTsKICAgIH0KICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGdsb2JhbENsYXNzZXMpIHsKICAgICAgd29ybGRJbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZSgKICAgICAgICAgIG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoY2xzKSkpOwogICAgfQogICAgZm9yIChCYWNrZW5kSW1wYWN0IG90aGVySW1wYWN0IGluIG90aGVySW1wYWN0cykgewogICAgICBvdGhlckltcGFjdC5yZWdpc3RlckltcGFjdCh3b3JsZEltcGFjdEJ1aWxkZXIsIGVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICB9CiAgfQp9CgovLy8gVGhlIEphdmFTY3JpcHQgYmFja2VuZCBkZXBlbmRlbmNpZXMgZm9yIHZhcmlvdXMgZmVhdHVyZXMuCmNsYXNzIEJhY2tlbmRJbXBhY3RzIHsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgYm9vbCBfbmV3UnRpOwoKICBCYWNrZW5kSW1wYWN0cyh0aGlzLl9jb21tb25FbGVtZW50cywgdGhpcy5fbmV3UnRpKTsKCiAgQmFja2VuZEltcGFjdCBfZ2V0UnVudGltZVR5cGVBcmd1bWVudDsKCiAgQmFja2VuZEltcGFjdCBnZXQgZ2V0UnVudGltZVR5cGVBcmd1bWVudCB7CiAgICByZXR1cm4gX2dldFJ1bnRpbWVUeXBlQXJndW1lbnQgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlQXJndW1lbnRJbnRlcmNlcHRlZCwKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlQXJndW1lbnQsCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRUeXBlQXJndW1lbnRCeUluZGV4LAogICAgXSwgb3RoZXJJbXBhY3RzOiBuZXdSdGlJbXBhY3RzKCdnZXRSdW50aW1lVHlwZUFyZ3VtZW50JykpOwogIH0KCiAgQmFja2VuZEltcGFjdCBfY29tcHV0ZVNpZ25hdHVyZTsKCiAgQmFja2VuZEltcGFjdCBnZXQgY29tcHV0ZVNpZ25hdHVyZSB7CiAgICByZXR1cm4gX2NvbXB1dGVTaWduYXR1cmUgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNvbXB1dGVTaWduYXR1cmUsCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRSdW50aW1lVHlwZUFyZ3VtZW50cywKICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICBsaXN0VmFsdWVzCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX21haW5XaXRoQXJndW1lbnRzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBtYWluV2l0aEFyZ3VtZW50cyB7CiAgICByZXR1cm4gX21haW5XaXRoQXJndW1lbnRzID8/PSBuZXcgQmFja2VuZEltcGFjdChpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2FzeW5jQm9keTsKCiAgQmFja2VuZEltcGFjdCBnZXQgYXN5bmNCb2R5ID0+IF9hc3luY0JvZHkgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgICBfY29tbW9uRWxlbWVudHMuYXN5bmNIZWxwZXJBd2FpdCwKICAgICAgICBfY29tbW9uRWxlbWVudHMuYXN5bmNIZWxwZXJSZXR1cm4sCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmFzeW5jSGVscGVyUmV0aHJvdywKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3RvciwKICAgICAgICBfY29tbW9uRWxlbWVudHMud3JhcEJvZHksCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmFzeW5jSGVscGVyU3RhcnRTeW5jCiAgICAgIF0pOwoKICBCYWNrZW5kSW1wYWN0IF9zeW5jU3RhckJvZHk7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN5bmNTdGFyQm9keSB7CiAgICByZXR1cm4gX3N5bmNTdGFyQm9keSA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuZW5kT2ZJdGVyYXRpb24sCiAgICAgIF9jb21tb25FbGVtZW50cy55aWVsZFN0YXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5zeW5jU3RhclVuY2F1Z2h0RXJyb3IsCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2FzeW5jU3RhckJvZHk7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGFzeW5jU3RhckJvZHkgewogICAgcmV0dXJuIF9hc3luY1N0YXJCb2R5ID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5hc3luY1N0YXJIZWxwZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5zdHJlYW1PZkNvbnRyb2xsZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy55aWVsZFNpbmdsZSwKICAgICAgX2NvbW1vbkVsZW1lbnRzLnlpZWxkU3RhciwKICAgICAgX2NvbW1vbkVsZW1lbnRzLnN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3IsCiAgICAgIF9jb21tb25FbGVtZW50cy53cmFwQm9keSwKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdHlwZVZhcmlhYmxlQm91bmRDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgdHlwZVZhcmlhYmxlQm91bmRDaGVjayB7CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZUJvdW5kQ2hlY2sgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93VHlwZUVycm9yLAogICAgICBfY29tbW9uRWxlbWVudHMuYXNzZXJ0SXNTdWJ0eXBlLAogICAgICBpZiAoX25ld1J0aSkgX2NvbW1vbkVsZW1lbnRzLmNoZWNrVHlwZUJvdW5kLAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9hYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbjsKCiAgQmFja2VuZEltcGFjdCBnZXQgYWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb24gewogICAgcmV0dXJuIF9hYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbiA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy50aHJvd0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JdLAogICAgICAgIG90aGVySW1wYWN0czogW19uZWVkc1N0cmluZygnTmVlZGVkIHRvIGVuY29kZSB0aGUgbWVzc2FnZS4nKV0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfZmFsbFRocm91Z2hFcnJvcjsKCiAgQmFja2VuZEltcGFjdCBnZXQgZmFsbFRocm91Z2hFcnJvciB7CiAgICByZXR1cm4gX2ZhbGxUaHJvdWdoRXJyb3IgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5mYWxsVGhyb3VnaEVycm9yXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9hc0NoZWNrOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhc0NoZWNrIHsKICAgIHJldHVybiBfYXNDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dSdW50aW1lRXJyb3IsCiAgICBdLCBvdGhlckltcGFjdHM6IG5ld1J0aUltcGFjdHMoJ2FzQ2hlY2snKSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90aHJvd05vU3VjaE1ldGhvZDsKCiAgQmFja2VuZEltcGFjdCBnZXQgdGhyb3dOb1N1Y2hNZXRob2QgewogICAgcmV0dXJuIF90aHJvd05vU3VjaE1ldGhvZCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dOb1N1Y2hNZXRob2QsCiAgICBdLCBvdGhlckltcGFjdHM6IFsKICAgICAgLy8gQWxzbyByZWdpc3RlciB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QuCiAgICAgIF9uZWVkc0xpc3QoJ05lZWRlZCB0byBlbmNvZGUgdGhlIGFyZ3VtZW50cyBmb3IgdGhyb3cgTm9TdWNoTWV0aG9kRXJyb3IuJyksCiAgICAgIF9uZWVkc1N0cmluZygnTmVlZGVkIHRvIGVuY29kZSB0aGUgbmFtZSBmb3IgdGhyb3cgTm9TdWNoTWV0aG9kRXJyb3IuJyksCiAgICAgIG1hcExpdGVyYWxDbGFzcywgLy8gbm9TdWNoTWV0aG9kIGhlbHBlcnMgYXJlIHBhc3NlZCBhIE1hcC4KICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc3RyaW5nVmFsdWVzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBzdHJpbmdWYWx1ZXMgewogICAgcmV0dXJuIF9zdHJpbmdWYWx1ZXMgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9udW1WYWx1ZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG51bVZhbHVlcyB7CiAgICByZXR1cm4gX251bVZhbHVlcyA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzLAogICAgICBfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBnZXQgaW50VmFsdWVzID0+IG51bVZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgZG91YmxlVmFsdWVzID0+IG51bVZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBfYm9vbFZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgYm9vbFZhbHVlcyB7CiAgICByZXR1cm4gX2Jvb2xWYWx1ZXMgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbnVsbFZhbHVlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBudWxsVmFsdWUgewogICAgcmV0dXJuIF9udWxsVmFsdWUgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5qc051bGxDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbGlzdFZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgbGlzdFZhbHVlcyB7CiAgICByZXR1cm4gX2xpc3RWYWx1ZXMgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbENsYXNzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdGhyb3dSdW50aW1lRXJyb3I7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHRocm93UnVudGltZUVycm9yIHsKICAgIHJldHVybiBfdGhyb3dSdW50aW1lRXJyb3IgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93UnVudGltZUVycm9yLAogICAgXSwgb3RoZXJJbXBhY3RzOiBbCiAgICAgIC8vIEFsc28gcmVnaXN0ZXIgdGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLgogICAgICBzdHJpbmdWYWx1ZXMKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdGhyb3dVbnN1cHBvcnRlZEVycm9yOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0aHJvd1Vuc3VwcG9ydGVkRXJyb3IgewogICAgcmV0dXJuIF90aHJvd1Vuc3VwcG9ydGVkRXJyb3IgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93VW5zdXBwb3J0ZWRFcnJvcgogICAgXSwgb3RoZXJJbXBhY3RzOiBbCiAgICAgIC8vIEFsc28gcmVnaXN0ZXIgdGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLgogICAgICBzdHJpbmdWYWx1ZXMKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc3VwZXJOb1N1Y2hNZXRob2Q7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN1cGVyTm9TdWNoTWV0aG9kIHsKICAgIHJldHVybiBfc3VwZXJOb1N1Y2hNZXRob2QgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZUludm9jYXRpb25NaXJyb3IsCiAgICAgIF9jb21tb25FbGVtZW50cy5vYmplY3ROb1N1Y2hNZXRob2QKICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICBfbmVlZHNJbnQoJ05lZWRlZCB0byBlbmNvZGUgdGhlIGludm9jYXRpb24ga2luZCBvZiBzdXBlci5ub1N1Y2hNZXRob2QuJyksCiAgICAgIF9uZWVkc0xpc3QoJ05lZWRlZCB0byBlbmNvZGUgdGhlIGFyZ3VtZW50cyBvZiBzdXBlci5ub1N1Y2hNZXRob2QuJyksCiAgICAgIF9uZWVkc1N0cmluZygnTmVlZGVkIHRvIGVuY29kZSB0aGUgbmFtZSBvZiBzdXBlci5ub1N1Y2hNZXRob2QuJykKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfY29uc3RhbnRNYXBMaXRlcmFsOwoKICBCYWNrZW5kSW1wYWN0IGdldCBjb25zdGFudE1hcExpdGVyYWwgewogICAgcmV0dXJuIF9jb25zdGFudE1hcExpdGVyYWwgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGluc3RhbnRpYXRlZENsYXNzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNvbnN0YW50TWFwQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5jb25zdGFudFByb3RvTWFwQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5jb25zdGFudFN0cmluZ01hcENsYXNzLAogICAgICBfY29tbW9uRWxlbWVudHMuZ2VuZXJhbENvbnN0YW50TWFwQ2xhc3MsCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2NvbnN0YW50U2V0TGl0ZXJhbDsKCiAgQmFja2VuZEltcGFjdCBnZXQgY29uc3RhbnRTZXRMaXRlcmFsID0+CiAgICAgIF9jb25zdGFudFNldExpdGVyYWwgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGluc3RhbnRpYXRlZENsYXNzZXM6IFsKICAgICAgICBfY29tbW9uRWxlbWVudHMuY29uc3RTZXRMaXRlcmFsQ2xhc3MsCiAgICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICAgIGNvbnN0YW50TWFwTGl0ZXJhbAogICAgICBdKTsKCiAgQmFja2VuZEltcGFjdCBfc3ltYm9sQ29uc3RydWN0b3I7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN5bWJvbENvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfc3ltYm9sQ29uc3RydWN0b3IgPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3JdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2NvbnN0U3ltYm9sOwoKICBCYWNrZW5kSW1wYWN0IGdldCBjb25zdFN5bWJvbCB7CiAgICByZXR1cm4gX2NvbnN0U3ltYm9sID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBpbnN0YW50aWF0ZWRDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLnN5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3NdLAogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuc3ltYm9sQ29uc3RydWN0b3JUYXJnZXRdKTsKICB9CgogIC8vLyBIZWxwZXIgZm9yIHJlZ2lzdGVyaW5nIHRoYXQgYGludGAgaXMgbmVlZGVkLgogIEJhY2tlbmRJbXBhY3QgX25lZWRzSW50KFN0cmluZyByZWFzb24pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlZ2lzdGVyIFtyZWFzb25dIGZvciB1c2UgaW4gZHVtcC1pbmZvLgogICAgcmV0dXJuIGludFZhbHVlczsKICB9CgogIC8vLyBIZWxwZXIgZm9yIHJlZ2lzdGVyaW5nIHRoYXQgYExpc3RgIGlzIG5lZWRlZC4KICBCYWNrZW5kSW1wYWN0IF9uZWVkc0xpc3QoU3RyaW5nIHJlYXNvbikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVnaXN0ZXIgW3JlYXNvbl0gZm9yIHVzZSBpbiBkdW1wLWluZm8uCiAgICByZXR1cm4gbGlzdFZhbHVlczsKICB9CgogIC8vLyBIZWxwZXIgZm9yIHJlZ2lzdGVyaW5nIHRoYXQgYFN0cmluZ2AgaXMgbmVlZGVkLgogIEJhY2tlbmRJbXBhY3QgX25lZWRzU3RyaW5nKFN0cmluZyByZWFzb24pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlZ2lzdGVyIFtyZWFzb25dIGZvciB1c2UgaW4gZHVtcC1pbmZvLgogICAgcmV0dXJuIHN0cmluZ1ZhbHVlczsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Fzc2VydFdpdGhvdXRNZXNzYWdlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhc3NlcnRXaXRob3V0TWVzc2FnZSB7CiAgICByZXR1cm4gX2Fzc2VydFdpdGhvdXRNZXNzYWdlID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuYXNzZXJ0SGVscGVyXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9hc3NlcnRXaXRoTWVzc2FnZTsKCiAgQmFja2VuZEltcGFjdCBnZXQgYXNzZXJ0V2l0aE1lc3NhZ2UgewogICAgcmV0dXJuIF9hc3NlcnRXaXRoTWVzc2FnZSA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5hc3NlcnRUZXN0LCBfY29tbW9uRWxlbWVudHMuYXNzZXJ0VGhyb3ddKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2FzeW5jRm9ySW47CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGFzeW5jRm9ySW4gewogICAgcmV0dXJuIF9hc3luY0ZvckluID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBzdGF0aWNVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLnN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3JdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3N0cmluZ0ludGVycG9sYXRpb247CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN0cmluZ0ludGVycG9sYXRpb24gewogICAgcmV0dXJuIF9zdHJpbmdJbnRlcnBvbGF0aW9uID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBkeW5hbWljVXNlczogW1NlbGVjdG9ycy50b1N0cmluZ19dLAogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuc3RyaW5nSW50ZXJwb2xhdGlvbkhlbHBlcl0sCiAgICAgICAgb3RoZXJJbXBhY3RzOiBbX25lZWRzU3RyaW5nKCdTdHJpbmdzIGFyZSBjcmVhdGVkLicpXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zdHJpbmdKdXh0YXBvc2l0aW9uOwoKICBCYWNrZW5kSW1wYWN0IGdldCBzdHJpbmdKdXh0YXBvc2l0aW9uIHsKICAgIHJldHVybiBfc3RyaW5nSnV4dGFwb3NpdGlvbiA/Pz0gX25lZWRzU3RyaW5nKCdTdHJpbmcuY29uY2F0IGlzIHVzZWQuJyk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IGdldCBudWxsTGl0ZXJhbCA9PiBudWxsVmFsdWU7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGJvb2xMaXRlcmFsID0+IGJvb2xWYWx1ZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGludExpdGVyYWwgPT4gaW50VmFsdWVzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBkb3VibGVMaXRlcmFsID0+IGRvdWJsZVZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgc3RyaW5nTGl0ZXJhbCA9PiBzdHJpbmdWYWx1ZXM7CgogIEJhY2tlbmRJbXBhY3QgX2NhdGNoU3RhdGVtZW50OwoKICBCYWNrZW5kSW1wYWN0IGdldCBjYXRjaFN0YXRlbWVudCB7CiAgICByZXR1cm4gX2NhdGNoU3RhdGVtZW50ID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5leGNlcHRpb25VbndyYXBwZXIKICAgIF0sIGluc3RhbnRpYXRlZENsYXNzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Q2xhc3MKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdGhyb3dFeHByZXNzaW9uOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0aHJvd0V4cHJlc3Npb24gewogICAgcmV0dXJuIF90aHJvd0V4cHJlc3Npb24gPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIC8vIFdlIGRvbid0IGtub3cgYWhlYWQgb2YgdGltZSB3aGV0aGVyIHdlIHdpbGwgbmVlZCB0aGUgdGhyb3cgaW4gYQogICAgICAgIC8vIHN0YXRlbWVudCBjb250ZXh0IG9yIGFuIGV4cHJlc3Npb24gY29udGV4dCwgc28gd2UgcmVnaXN0ZXIgYm90aAogICAgICAgIC8vIGhlcmUsIGV2ZW4gdGhvdWdoIHdlIG1heSBub3QgbmVlZCB0aGUgdGhyb3dFeHByZXNzaW9uIGhlbHBlci4KICAgICAgICBzdGF0aWNVc2VzOiBbCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMud3JhcEV4Y2VwdGlvbkhlbHBlciwKICAgICAgICAgIF9jb21tb25FbGVtZW50cy50aHJvd0V4cHJlc3Npb25IZWxwZXIKICAgICAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2xhenlGaWVsZDsKCiAgQmFja2VuZEltcGFjdCBnZXQgbGF6eUZpZWxkIHsKICAgIHJldHVybiBfbGF6eUZpZWxkID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuY3ljbGljVGhyb3dIZWxwZXJdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3R5cGVMaXRlcmFsOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0eXBlTGl0ZXJhbCB7CiAgICByZXR1cm4gX3R5cGVMaXRlcmFsID8/PSBuZXcgQmFja2VuZEltcGFjdChpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbENsYXNzCiAgICBdLCBzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZSwKICAgICAgaWYgKF9uZXdSdGkpIF9jb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbE1ha2VyLAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zdGFja1RyYWNlSW5DYXRjaDsKCiAgQmFja2VuZEltcGFjdCBnZXQgc3RhY2tUcmFjZUluQ2F0Y2ggewogICAgcmV0dXJuIF9zdGFja1RyYWNlSW5DYXRjaCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5zdGFja1RyYWNlSGVscGVyQ2xhc3NdLAogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMudHJhY2VGcm9tRXhjZXB0aW9uXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zeW5jRm9ySW47CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN5bmNGb3JJbiB7CiAgICByZXR1cm4gX3N5bmNGb3JJbiA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgLy8gVGhlIFNTQSBidWlsZGVyIHJlY29nbml6ZXMgY2VydGFpbiBmb3ItaW4gbG9vcHMgYW5kIGNhbiBnZW5lcmF0ZQogICAgICAgIC8vIGNhbGxzIHRvIHRocm93Q29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yLgogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3R5cGVWYXJpYWJsZUV4cHJlc3Npb247CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVWYXJpYWJsZUV4cHJlc3Npb24gewogICAgcmV0dXJuIF90eXBlVmFyaWFibGVFeHByZXNzaW9uID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm8sCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRSdW50aW1lVHlwZUluZm8sCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZQogICAgXSwgb3RoZXJJbXBhY3RzOiBbCiAgICAgIGxpc3RWYWx1ZXMsCiAgICAgIGdldFJ1bnRpbWVUeXBlQXJndW1lbnQsCiAgICAgIF9uZWVkc0ludCgnTmVlZGVkIGZvciBhY2Nlc3NpbmcgYSB0eXBlIHZhcmlhYmxlIGxpdGVyYWwgb24gdGhpcy4nKQogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90eXBlQ2hlY2s7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVDaGVjayB7CiAgICByZXR1cm4gX3R5cGVDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qob3RoZXJJbXBhY3RzOiBbYm9vbFZhbHVlc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfZ2VuZXJpY1R5cGVDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgZ2VuZXJpY1R5cGVDaGVjayB7CiAgICByZXR1cm4gX2dlbmVyaWNUeXBlQ2hlY2sgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNoZWNrU3VidHlwZSwKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW52ZXN0aWdhdGUgd2h5IHRoaXMgaXMgbmVlZGVkLgogICAgICBfY29tbW9uRWxlbWVudHMuc2V0UnVudGltZVR5cGVJbmZvLAogICAgICBfY29tbW9uRWxlbWVudHMuZ2V0UnVudGltZVR5cGVJbmZvCiAgICBdLCBvdGhlckltcGFjdHM6IFsKICAgICAgbGlzdFZhbHVlcywKICAgICAgZ2V0UnVudGltZVR5cGVBcmd1bWVudAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9nZW5lcmljSXNDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgZ2VuZXJpY0lzQ2hlY2sgewogICAgcmV0dXJuIF9nZW5lcmljSXNDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qob3RoZXJJbXBhY3RzOiBbaW50VmFsdWVzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90eXBlVmFyaWFibGVUeXBlQ2hlY2s7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVWYXJpYWJsZVR5cGVDaGVjayB7CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZVR5cGVDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5jaGVja1N1YnR5cGVPZlJ1bnRpbWVUeXBlXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9mdW5jdGlvblR5cGVDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgZnVuY3Rpb25UeXBlQ2hlY2sgewogICAgcmV0dXJuIF9mdW5jdGlvblR5cGVDaGVjayA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbLypoZWxwZXJzLmZ1bmN0aW9uVHlwZVRlc3RNZXRhSGVscGVyKi9dKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Z1dHVyZU9yVHlwZUNoZWNrOwoKICBCYWNrZW5kSW1wYWN0IGdldCBmdXR1cmVPclR5cGVDaGVjayB7CiAgICByZXR1cm4gX2Z1dHVyZU9yVHlwZUNoZWNrID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuZnV0dXJlT3JUZXN0XSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9uYXRpdmVUeXBlQ2hlY2s7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG5hdGl2ZVR5cGVDaGVjayB7CiAgICByZXR1cm4gX25hdGl2ZVR5cGVDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICAvLyBXZSB3aWxsIG5lZWQgdG8gYWRkIHRoZSAiJGlzIiBhbmQgIiRhcyIgcHJvcGVydGllcyBvbiB0aGUKICAgICAgLy8gSmF2YVNjcmlwdCBvYmplY3QgcHJvdG90eXBlLCBzbyB3ZSBtYWtlIHN1cmUKICAgICAgLy8gWzpkZWZpbmVQcm9wZXJ0eTpdIGlzIGNvbXBpbGVkLgogICAgICBfY29tbW9uRWxlbWVudHMuZGVmaW5lUHJvcGVydHkKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfY2xvc3VyZTsKCiAgQmFja2VuZEltcGFjdCBnZXQgY2xvc3VyZSB7CiAgICByZXR1cm4gX2Nsb3N1cmUgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9pbnRlcmNlcHRvclVzZTsKCiAgQmFja2VuZEltcGFjdCBnZXQgaW50ZXJjZXB0b3JVc2UgewogICAgcmV0dXJuIF9pbnRlcmNlcHRvclVzZSA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgc3RhdGljVXNlczogWwogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kCiAgICAgICAgXSwKICAgICAgICBpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MsCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcywKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzCiAgICAgICAgXSwKICAgICAgICBmZWF0dXJlczogbmV3IEVudW1TZXQ8QmFja2VuZEZlYXR1cmU+LmZyb21WYWx1ZXMoWwogICAgICAgICAgQmFja2VuZEZlYXR1cmUubmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCiAgICAgICAgICBCYWNrZW5kRmVhdHVyZS5uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnCiAgICAgICAgXSwgZml4ZWQ6IHRydWUpKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX251bUNsYXNzZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG51bUNsYXNzZXMgewogICAgcmV0dXJuIF9udW1DbGFzc2VzID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICAvLyBUaGUgYmFja2VuZCB3aWxsIHRyeSB0byBvcHRpbWl6ZSBudW1iZXIgb3BlcmF0aW9ucyBhbmQgdXNlIHRoZQogICAgICAgIC8vIGBpYWVgIGhlbHBlciBkaXJlY3RseS4KICAgICAgICBnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLnRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9saXN0T3JTdHJpbmdDbGFzc2VzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBsaXN0T3JTdHJpbmdDbGFzc2VzIHsKICAgIHJldHVybiBfbGlzdE9yU3RyaW5nQ2xhc3NlcyA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgLy8gVGhlIGJhY2tlbmQgd2lsbCB0cnkgdG8gb3B0aW1pemUgYXJyYXkgYW5kIHN0cmluZyBhY2Nlc3MgYW5kIHVzZSB0aGUKICAgICAgICAvLyBgaW9vcmVgIGFuZCBgaWFlYCBfY29tbW9uRWxlbWVudHMgZGlyZWN0bHkuCiAgICAgICAgZ2xvYmFsVXNlczogWwogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uLAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9mdW5jdGlvbkNsYXNzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBmdW5jdGlvbkNsYXNzIHsKICAgIHJldHVybiBfZnVuY3Rpb25DbGFzcyA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbWFwQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG1hcENsYXNzIHsKICAgIHJldHVybiBfbWFwQ2xhc3MgPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIC8vIFRoZSBiYWNrZW5kIHdpbGwgdXNlIGEgbGl0ZXJhbCBsaXN0IHRvIGluaXRpYWxpemUgdGhlIGVudHJpZXMKICAgICAgICAvLyBvZiB0aGUgbWFwLgogICAgICAgIGdsb2JhbENsYXNzZXM6IFsKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MsCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzCiAgICAgICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zZXRDbGFzczsKCiAgQmFja2VuZEltcGFjdCBnZXQgc2V0Q2xhc3MgPT4gX3NldENsYXNzID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxDbGFzc2VzOiBbCiAgICAgICAgLy8gVGhlIGJhY2tlbmQgd2lsbCB1c2UgYSBsaXRlcmFsIGxpc3QgdG8gaW5pdGlhbGl6ZSB0aGUgZW50cmllcwogICAgICAgIC8vIG9mIHRoZSBzZXQuCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcywKICAgICAgICBfY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbENsYXNzLAogICAgICBdKTsKCiAgQmFja2VuZEltcGFjdCBfYm91bmRDbG9zdXJlQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGJvdW5kQ2xvc3VyZUNsYXNzIHsKICAgIHJldHVybiBfYm91bmRDbG9zdXJlQ2xhc3MgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5ib3VuZENsb3N1cmVDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbmF0aXZlT3JFeHRlbmRzQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG5hdGl2ZU9yRXh0ZW5kc0NsYXNzIHsKICAgIHJldHVybiBfbmF0aXZlT3JFeHRlbmRzQ2xhc3MgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kCiAgICBdLCBnbG9iYWxDbGFzc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0ludGVyY2VwdG9yQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX21hcExpdGVyYWxDbGFzczsKCiAgQmFja2VuZEltcGFjdCBnZXQgbWFwTGl0ZXJhbENsYXNzIHsKICAgIHJldHVybiBfbWFwTGl0ZXJhbENsYXNzID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ29uc3RydWN0b3IsCiAgICAgIF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eSwKICAgICAgX2NvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxVbnR5cGVkTWFrZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXIKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc2V0TGl0ZXJhbENsYXNzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBzZXRMaXRlcmFsQ2xhc3MgPT4KICAgICAgX3NldExpdGVyYWxDbGFzcyA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsVXNlczogWwogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ29uc3RydWN0b3IsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5LAogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsVW50eXBlZE1ha2VyLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXIsCiAgICAgIF0pOwoKICBCYWNrZW5kSW1wYWN0IF9jbG9zdXJlQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGNsb3N1cmVDbGFzcyB7CiAgICByZXR1cm4gX2Nsb3N1cmVDbGFzcyA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVGcm9tVGVhck9mZl0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbGlzdENsYXNzZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGxpc3RDbGFzc2VzIHsKICAgIHJldHVybiBfbGlzdENsYXNzZXMgPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIC8vIExpdGVyYWwgbGlzdHMgY2FuIGJlIHRyYW5zbGF0ZWQgaW50byBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnM6CiAgICAgICAgZ2xvYmFsVXNlczogWwogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlUeXBlZENvbnN0cnVjdG9yLAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5nZXRUeXBlQXJndW1lbnRCeUluZGV4CiAgICAgICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9qc0luZGV4aW5nQmVoYXZpb3I7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGpzSW5kZXhpbmdCZWhhdmlvciB7CiAgICByZXR1cm4gX2pzSW5kZXhpbmdCZWhhdmlvciA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgLy8gVGhlc2UgdHdvIF9jb21tb25FbGVtZW50cyBhcmUgdXNlZCBieSB0aGUgZW1pdHRlciBhbmQgdGhlIGNvZGVnZW4uCiAgICAgICAgLy8gQmVjYXVzZSB3ZSBjYW5ub3QgZW5xdWV1ZSBlbGVtZW50cyBhdCB0aGUgdGltZSBvZiBlbWlzc2lvbiwKICAgICAgICAvLyB3ZSBtYWtlIHN1cmUgdGhleSBhcmUgYWx3YXlzIGdlbmVyYXRlZC4KICAgICAgICBnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmlzSnNJbmRleGFibGVdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3RyYWNlSGVscGVyOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0cmFjZUhlbHBlciB7CiAgICByZXR1cm4gX3RyYWNlSGVscGVyID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFtfY29tbW9uRWxlbWVudHMudHJhY2VIZWxwZXJdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Fzc2VydFVucmVhY2hhYmxlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhc3NlcnRVbnJlYWNoYWJsZSB7CiAgICByZXR1cm4gX2Fzc2VydFVucmVhY2hhYmxlID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmFzc2VydFVucmVhY2hhYmxlTWV0aG9kXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9ydW50aW1lVHlwZVN1cHBvcnQ7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHJ1bnRpbWVUeXBlU3VwcG9ydCB7CiAgICByZXR1cm4gX3J1bnRpbWVUeXBlU3VwcG9ydCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzCiAgICBdLCBnbG9iYWxVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm8sCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRSdW50aW1lVHlwZUluZm8KICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICBnZXRSdW50aW1lVHlwZUFyZ3VtZW50LAogICAgICBjb21wdXRlU2lnbmF0dXJlCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2RlZmVycmVkTG9hZGluZzsKCiAgQmFja2VuZEltcGFjdCBnZXQgZGVmZXJyZWRMb2FkaW5nIHsKICAgIHJldHVybiBfZGVmZXJyZWRMb2FkaW5nID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFtfY29tbW9uRWxlbWVudHMuY2hlY2tEZWZlcnJlZElzTG9hZGVkXSwKICAgICAgICAgICAgLy8gQWxzbyByZWdpc3RlciB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICAgIGdsb2JhbENsYXNzZXM6IFtfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3NdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX25vU3VjaE1ldGhvZFN1cHBvcnQ7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG5vU3VjaE1ldGhvZFN1cHBvcnQgewogICAgcmV0dXJuIF9ub1N1Y2hNZXRob2RTdXBwb3J0ID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVJbnZvY2F0aW9uTWlycm9yLAogICAgICBfY29tbW9uRWxlbWVudHMuY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvcgogICAgXSwgZHluYW1pY1VzZXM6IFsKICAgICAgU2VsZWN0b3JzLm5vU3VjaE1ldGhvZF8KICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbG9hZExpYnJhcnk7CgogIC8vLyBCYWNrZW5kIGltcGFjdCBmb3IgYWNjZXNzaW5nIGEgYGxvYWRMaWJyYXJ5YCBmdW5jdGlvbiBvbiBhIGRlZmVycmVkCiAgLy8vIHByZWZpeC4KICBCYWNrZW5kSW1wYWN0IGdldCBsb2FkTGlicmFyeSB7CiAgICByZXR1cm4gX2xvYWRMaWJyYXJ5ID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbCiAgICAgIC8vIFRPRE8ocmVkZW1wdGlvbik6IGRlbGV0ZSB3cmFwcGVyIHdoZW4gd2Ugc3Vuc2V0IHRoZSBvbGQgZnJvbnRlbmQuCiAgICAgIF9jb21tb25FbGVtZW50cy5sb2FkTGlicmFyeVdyYXBwZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5sb2FkRGVmZXJyZWRMaWJyYXJ5LAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9tZW1iZXJDbG9zdXJlOwoKICAvLy8gQmFja2VuZCBpbXBhY3QgZm9yIHBlcmZvcm1pbmcgbWVtYmVyIGNsb3N1cml6YXRpb24uCiAgQmFja2VuZEltcGFjdCBnZXQgbWVtYmVyQ2xvc3VyZSB7CiAgICByZXR1cm4gX21lbWJlckNsb3N1cmUgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5ib3VuZENsb3N1cmVDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc3RhdGljQ2xvc3VyZTsKCiAgLy8vIEJhY2tlbmQgaW1wYWN0IGZvciBwZXJmb3JtaW5nIGNsb3N1cml6YXRpb24gb2YgYSB0b3AtbGV2ZWwgb3Igc3RhdGljCiAgLy8vIGZ1bmN0aW9uLgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN0YXRpY0Nsb3N1cmUgewogICAgcmV0dXJuIF9zdGF0aWNDbG9zdXJlID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbENsYXNzZXM6IFtfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90eXBlVmFyaWFibGVNaXJyb3I7CgogIC8vLyBCYWNrZW5kIGltcGFjdCBmb3IgdHlwZSB2YXJpYWJsZXMgdGhyb3VnaCBtaXJyb3JzLgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVWYXJpYWJsZU1pcnJvciB7CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZU1pcnJvciA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudHlwZVZhcmlhYmxlQ29uc3RydWN0b3IsCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZQogICAgXSwgaW5zdGFudGlhdGVkQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudHlwZVZhcmlhYmxlQ2xhc3MKICAgIF0pOwogIH0KCiAgTWFwPGludCwgQmFja2VuZEltcGFjdD4gX2dlbmVyaWNJbnN0YW50aWF0aW9uID0gPGludCwgQmFja2VuZEltcGFjdD57fTsKCiAgQmFja2VuZEltcGFjdCBnZXRHZW5lcmljSW5zdGFudGlhdGlvbihpbnQgdHlwZUFyZ3VtZW50Q291bnQpID0+CiAgICAgIF9nZW5lcmljSW5zdGFudGlhdGlvblt0eXBlQXJndW1lbnRDb3VudF0gPz89CiAgICAgICAgICBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldEluc3RhbnRpYXRlRnVuY3Rpb24odHlwZUFyZ3VtZW50Q291bnQpLAogICAgICAgIC4uLl9uZXdSdGkKICAgICAgICAgICAgPyBbCiAgICAgICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZU5ld1J0aSwKICAgICAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5jbG9zdXJlRnVuY3Rpb25UeXBlCiAgICAgICAgICAgICAgXQogICAgICAgICAgICA6IFsKICAgICAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlLAogICAgICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmV4dHJhY3RGdW5jdGlvblR5cGVPYmplY3RGcm9tSW50ZXJuYWwKICAgICAgICAgICAgICBdLAogICAgICBdLCBpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldEluc3RhbnRpYXRpb25DbGFzcyh0eXBlQXJndW1lbnRDb3VudCksCiAgICAgIF0pOwoKICAvLy8gQmFja2VuZCBpbXBhY3QgZm9yIC0tZXhwZXJpbWVudC1uZXctcnRpLgogIExpc3Q8QmFja2VuZEltcGFjdD4gbmV3UnRpSW1wYWN0cyhTdHJpbmcgd2hhdCkgewogICAgaWYgKCFfbmV3UnRpKSByZXR1cm4gW107CiAgICAvLyBUT0RPKHNyYSk6IFNwbGl0IGludG8gcmVmaW5lZCBpbXBhY3RzLgogICAgcmV0dXJuIFsKICAgICAgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmZpbmRUeXBlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW5jZVR5cGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmFycmF5SW5zdGFuY2VUeXBlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zaW1wbGVJbnN0YW5jZVR5cGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnJ0aUV2YWxNZXRob2QsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnJ0aUJpbmRNZXRob2QsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbiwKICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbiwKICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2VuZXJhbFR5cGVDaGVja0ltcGxlbWVudGF0aW9uLAogICAgICAgIC8vIFNwZWNpYWxpemVkIGNoZWNrcy4KICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRJc0Jvb2wsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNCb29sTnVsbGFibGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tCb29sTnVsbGFibGUsCiAgICAgICAgLy8gbm8gc3BlY2lhbGl6ZWRJc0RvdWJsZS4KICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc0RvdWJsZU51bGxhYmxlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrRG91YmxlTnVsbGFibGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkSXNJbnQsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNJbnROdWxsYWJsZSwKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRDaGVja0ludE51bGxhYmxlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZElzTnVtLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZEFzTnVtTnVsbGFibGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tOdW1OdWxsYWJsZSwKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRJc1N0cmluZywKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc1N0cmluZ051bGxhYmxlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrU3RyaW5nTnVsbGFibGUsCiAgICAgIF0sIGdsb2JhbENsYXNzZXM6IFsKICAgICAgICBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzLCAvLyBpbnN0YW5jZU9yRnVuY3Rpb25UeXBlIHVzZXMgdGhpcy4KICAgICAgXSwgZ2xvYmFsVXNlczogW10pCiAgICBdOwogIH0KCiAgQmFja2VuZEltcGFjdCBfcnRpQWRkUnVsZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHJ0aUFkZFJ1bGVzID0+IF9ydGlBZGRSdWxlcyA/Pz0gQmFja2VuZEltcGFjdCgKICAgICAgZ2xvYmFsVXNlczogW19jb21tb25FbGVtZW50cy5ydGlBZGRSdWxlc01ldGhvZF0sCiAgICAgIG90aGVySW1wYWN0czogW19uZWVkc1N0cmluZygnTmVlZGVkIHRvIGVuY29kZSB0aGUgbmV3IFJUSSBydWxlc2V0LicpXSk7Cn0KgzQATk48ASMBH0o0JCQnQh8fATwWJiQCAS4WKSkkLy8pKisBFzIxLDc3MTJRIwErMQFESTcaBAFAPS8zIRlHBjMhGUcGLSAZSQZAGUkGMypKBi0qSgY2SgYEAgE+FygWATYBKQEtRzkuLj8EASMBJ0EqKigvFxEIBAEkAShLJCQIBAEcAVAqKywzIi0KAR8BIz0mIS0IBAEgASQ+JyojITEgCAQBKQEtRyYnMwgEAS0BMT5MSAQBIwEnIUsEARoBHjgpMAQBJAEoQikXSVFOQQgEAR8BIx1RBAEcASBDIiolJSUkCAQBLAEvAR0BIRtPBAEcASAaTwQBHQEhPiQrKS4vCAQBJAEoQikXSRMIBAEoASxGLBdJEwgEASQBKEIuKRdQS0cIBAElASlMKC0uLwgEASUBKkcuGRsKASQBKDVDBAEeASIvSkAEATMrRBYEATQsRBcEATYuRBkEAScBKyVHBAEkASg1UAQBHQEhLkIEASYBKjcsQT8EASYBKkwEAS4BLwEtATMBMwEhASU/KR40NQgEASIBJjNLS0kWLzAMBAEcASAaTAQBHgEiRScVKTUIBAEkASg1RjsEARwBIC1MNkkEASkBLUcqKigXEh5JCAQBHAEgSQQBIwEnQSQ+KikXEh0IBAEhASVNBAEoASw5QgQBJAEoIlEEASQBKCJHBAEiASZAQzYpJQgEARoBHhhRBAEhASUyFjULHzM4NAs7OzwaBAEdASEuSiJGBAEmASo3UDcWOTgMBAEgASQeSgQBGwEfLEkXGSUqDAQBGwFRSRcjKQoBJAEoIk8EAScBK0UxGCovNDAIBAEiASZALTIuMggEASIBJzsvNDA1CgEfASMdTQQBHgEiL0oWMy4xDAQBJQEpNk5HMzYEAR4BIhxGBAEkASg1QAQBJQEpRiAVKikXHhcIBAEiASYgT087BAEmASpELjYWHggEAR4BSg4iPEsqKwgEASABOiQeTwQBIAFLECQeSgQBJQE5KUMvKB4oCAQBSgFCMypDExBHNBAQQUYRIEIKAS8zHS4NIiImKywnJzU2OB8rMzYjNTgqMjUqMjUtNTgaSxkHBAEeAUM3TgIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZF9pbXBhY3QuZGFydD5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2NvZGVnZW5fbGlzdGVuZXIuZGFydLK2Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5iYWNrZW5kLmNvZGVnZW5fbGlzdGVuZXI7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzLCBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnF1ZXVlLmRhcnQnIHNob3cgRW5xdWV1ZXIsIEVucXVldWVyTGlzdGVuZXI7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgU3RhdGljVXNlLCBUeXBlVXNlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JwogICAgc2hvdyBXb3JsZEltcGFjdCwgV29ybGRJbXBhY3RCdWlsZGVyLCBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsOwppbXBvcnQgJ2JhY2tlbmRfaW1wYWN0LmRhcnQnOwppbXBvcnQgJ2JhY2tlbmRfdXNhZ2UuZGFydCc7CmltcG9ydCAnY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKCmNsYXNzIENvZGVnZW5FbnF1ZXVlckxpc3RlbmVyIGV4dGVuZHMgRW5xdWV1ZXJMaXN0ZW5lciB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBCYWNrZW5kSW1wYWN0cyBfaW1wYWN0czsKCiAgZmluYWwgQmFja2VuZFVzYWdlIF9iYWNrZW5kVXNhZ2U7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZCBfcnRpTmVlZDsKCiAgZmluYWwgQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXM7CgogIGZpbmFsIE5hdGl2ZUNvZGVnZW5FbnF1ZXVlciBfbmF0aXZlRW5xdWV1ZXI7CgogIGJvb2wgX2lzTm9TdWNoTWV0aG9kVXNlZCA9IGZhbHNlOwogIGJvb2wgX2lzTmV3UnRpVXNlZCA9IGZhbHNlOwoKICBDb2RlZ2VuRW5xdWV1ZXJMaXN0ZW5lcigKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5faW1wYWN0cywKICAgICAgdGhpcy5fYmFja2VuZFVzYWdlLAogICAgICB0aGlzLl9ydGlOZWVkLAogICAgICB0aGlzLl9jdXN0b21FbGVtZW50c0FuYWx5c2lzLAogICAgICB0aGlzLl9uYXRpdmVFbnF1ZXVlcik7CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgaW1wYWN0QnVpbGRlcgogICAgICAgIC5hZGRJbXBhY3QoX2ltcGFjdHMubWVtYmVyQ2xvc3VyZS5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCkpOwogICAgRnVuY3Rpb25UeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShlbGVtZW50KTsKICAgIGlmICh0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyAmJiBfcnRpTmVlZC5tZXRob2ROZWVkc1NpZ25hdHVyZShlbGVtZW50KSkgewogICAgICBpbXBhY3RCdWlsZGVyLmFkZEltcGFjdChfcmVnaXN0ZXJDb21wdXRlU2lnbmF0dXJlKCkpOwogICAgfQogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlckdldE9mU3RhdGljRnVuY3Rpb24oKSB7CiAgICByZXR1cm4gX2ltcGFjdHMuc3RhdGljQ2xvc3VyZS5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgfQoKICBXb3JsZEltcGFjdCBfcmVnaXN0ZXJDb21wdXRlU2lnbmF0dXJlKCkgewogICAgcmV0dXJuIF9pbXBhY3RzLmNvbXB1dGVTaWduYXR1cmUuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICB7Ym9vbCBpc0dsb2JhbDogZmFsc2UsIGJvb2wgbmF0aXZlVXNhZ2U6IGZhbHNlfSkgewogICAgaWYgKG5hdGl2ZVVzYWdlKSB7CiAgICAgIF9uYXRpdmVFbnF1ZXVlci5vbkluc3RhbnRpYXRlZFR5cGUodHlwZSk7CiAgICB9CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIFtXb3JsZEltcGFjdF0gb2YgY2FsbGluZyBbbWFpbk1ldGhvZF0gYXMgdGhlIGVudHJ5IHBvaW50LgogIFdvcmxkSW1wYWN0IF9jb21wdXRlTWFpbkltcGFjdChGdW5jdGlvbkVudGl0eSBtYWluTWV0aG9kKSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIG1haW5JbXBhY3QgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbWFpbk1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmUuY2FsbFN0cnVjdHVyZTsKICAgIGlmIChjYWxsU3RydWN0dXJlLmFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgIF9pbXBhY3RzLm1haW5XaXRoQXJndW1lbnRzCiAgICAgICAgICAucmVnaXN0ZXJJbXBhY3QobWFpbkltcGFjdCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgIG1haW5JbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShtYWluTWV0aG9kLCBjYWxsU3RydWN0dXJlKSk7CiAgICB9CiAgICBpZiAobWFpbk1ldGhvZC5pc0dldHRlcikgewogICAgICBtYWluSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljR2V0KG1haW5NZXRob2QpKTsKICAgIH0gZWxzZSB7CiAgICAgIG1haW5JbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShtYWluTWV0aG9kLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpKTsKICAgIH0KICAgIHJldHVybiBtYWluSW1wYWN0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvblF1ZXVlT3BlbigKICAgICAgRW5xdWV1ZXIgZW5xdWV1ZXIsIEZ1bmN0aW9uRW50aXR5IG1haW5NZXRob2QsIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKSB7CiAgICBlbnF1ZXVlci5hcHBseUltcGFjdChfbmF0aXZlRW5xdWV1ZXIucHJvY2Vzc05hdGl2ZUNsYXNzZXMobGlicmFyaWVzKSk7CiAgICBpZiAobWFpbk1ldGhvZCAhPSBudWxsKSB7CiAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KF9jb21wdXRlTWFpbkltcGFjdChtYWluTWV0aG9kKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9uUXVldWVFbXB0eShFbnF1ZXVlciBlbnF1ZXVlciwgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHJlY2VudENsYXNzZXMpIHsKICAgIC8vIEFkZCBlbGVtZW50cyB1c2VkIHN5bnRoZXRpY2FsbHksIHRoYXQgaXMsIHRocm91Z2ggZmVhdHVyZXMgcmF0aGVyIHRoYW4KICAgIC8vIHN5bnRheCwgZm9yIGluc3RhbmNlIGN1c3RvbSBlbGVtZW50cy4KICAgIC8vCiAgICAvLyBSZXR1cm4gZWFybHkgaWYgYW55IGVsZW1lbnRzIGFyZSBhZGRlZCB0byBhdm9pZCBjb3VudGluZyB0aGUgZWxlbWVudHMgYXMKICAgIC8vIGR1ZSB0byBtaXJyb3JzLgogICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMuZmx1c2goKSk7CgogICAgaWYgKF9iYWNrZW5kVXNhZ2UuaXNOb1N1Y2hNZXRob2RVc2VkICYmICFfaXNOb1N1Y2hNZXRob2RVc2VkKSB7CiAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KAogICAgICAgICAgX2ltcGFjdHMubm9TdWNoTWV0aG9kU3VwcG9ydC5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCkpOwogICAgICBfaXNOb1N1Y2hNZXRob2RVc2VkID0gdHJ1ZTsKICAgIH0KCiAgICAvLyBUT0RPKGZpc2h5dGhlZmlzaCk6IEF2b2lkIHJlZ2lzdGVyaW5nIHVubmVjZXNzYXJ5IGltcGFjdHMuCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSAmJiAhX2lzTmV3UnRpVXNlZCkgewogICAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIG5ld1J0aUltcGFjdCA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICAgIG5ld1J0aUltcGFjdC5yZWdpc3RlclN0YXRpY1VzZShTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnJ0aUFkZFJ1bGVzTWV0aG9kLCBDYWxsU3RydWN0dXJlLlRXT19BUkdTKSk7CiAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KG5ld1J0aUltcGFjdCk7CiAgICAgIF9pc05ld1J0aVVzZWQgPSB0cnVlOwogICAgfQoKICAgIGlmICghZW5xdWV1ZXIucXVldWVJc0VtcHR5KSByZXR1cm4gZmFsc2U7CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uUXVldWVDbG9zZWQoKSB7fQoKICAvLy8gQWRkcyB0aGUgaW1wYWN0IG9mIFtjb25zdGFudF0gdG8gW2ltcGFjdEJ1aWxkZXJdLgogIHZvaWQgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyLCBTZXQ8Q29uc3RhbnRWYWx1ZT4gdmlzaXRlZCkgewogICAgaWYgKHZpc2l0ZWQuYWRkKGNvbnN0YW50KSkgewogICAgICBfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnRJbnRlcm5hbChjb25zdGFudCwgaW1wYWN0QnVpbGRlcik7CgogICAgICBmb3IgKENvbnN0YW50VmFsdWUgZGVwZW5kZW5jeSBpbiBjb25zdGFudC5nZXREZXBlbmRlbmNpZXMoKSkgewogICAgICAgIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudCgKICAgICAgICAgICAgZGVwZW5kZW5jeSwgaW1wYWN0QnVpbGRlciwgdmlzaXRlZCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50SW50ZXJuYWwoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gY29uc3RhbnQuZ2V0VHlwZShfY29tbW9uRWxlbWVudHMpOwogICAgX2NvbXB1dGVJbXBhY3RGb3JJbnN0YW50aWF0ZWRDb25zdGFudFR5cGUodHlwZSwgaW1wYWN0QnVpbGRlcik7CgogICAgaWYgKGNvbnN0YW50LmlzRnVuY3Rpb24pIHsKICAgICAgRnVuY3Rpb25Db25zdGFudFZhbHVlIGZ1bmN0aW9uID0gY29uc3RhbnQ7CiAgICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY1RlYXJPZmYoZnVuY3Rpb24uZWxlbWVudCkpOwogICAgfSBlbHNlIGlmIChjb25zdGFudC5pc0ludGVyY2VwdG9yKSB7CiAgICAgIC8vIEFuIGludGVyY2VwdG9yIGNvbnN0YW50IHJlZmVyZW5jZXMgdGhlIGNsYXNzJ3MgcHJvdG90eXBlIGNoYWluLgogICAgICBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgaW50ZXJjZXB0b3IgPSBjb25zdGFudDsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gaW50ZXJjZXB0b3IuY2xzOwogICAgICBfY29tcHV0ZUltcGFjdEZvckluc3RhbnRpYXRlZENvbnN0YW50VHlwZSgKICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKSwgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50LmlzVHlwZSkgewogICAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLnR5cGVUeXBlKSk7CiAgICAgIC8vIElmIHRoZSB0eXBlIGlzIGEgd2ViIGNvbXBvbmVudCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGNvbnN0cnVjdG9ycyBhcmUKICAgICAgLy8gYXZhaWxhYmxlIHRvICd1cGdyYWRlJyB0aGUgbmF0aXZlIG9iamVjdC4KICAgICAgVHlwZUNvbnN0YW50VmFsdWUgdHlwZSA9IGNvbnN0YW50OwogICAgICBpZiAodHlwZS5yZXByZXNlbnRlZFR5cGUuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSByZXByZXNlbnRlZFR5cGUgPSB0eXBlLnJlcHJlc2VudGVkVHlwZTsKICAgICAgICBfY3VzdG9tRWxlbWVudHNBbmFseXNpcy5yZWdpc3RlclR5cGVDb25zdGFudChyZXByZXNlbnRlZFR5cGUuZWxlbWVudCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVnaXN0ZXIgdGhlc2UgdXNpbmcgYEJhY2tlbmRJbXBhY3RgLgogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKAogICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShfY29tbW9uRWxlbWVudHMKICAgICAgICAgICAgICAuZ2V0SW5zdGFudGlhdGlvbkNsYXNzKGNvbnN0YW50LnR5cGVBcmd1bWVudHMubGVuZ3RoKSkpKTsKCiAgICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZU5ld1J0aSwKICAgICAgICAgICAgQ2FsbFN0cnVjdHVyZS5UV09fQVJHUykpOwogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVGdW5jdGlvblR5cGUsIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAgICB9IGVsc2UgewogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlLAogICAgICAgICAgICBDYWxsU3RydWN0dXJlLlRXT19BUkdTKSk7CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmV4dHJhY3RGdW5jdGlvblR5cGVPYmplY3RGcm9tSW50ZXJuYWwsCiAgICAgICAgICAgIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9jb21wdXRlSW1wYWN0Rm9ySW5zdGFudGlhdGVkQ29uc3RhbnRUeXBlKAogICAgICBEYXJ0VHlwZSB0eXBlLCBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKHR5cGUpKTsKICAgICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKHR5cGUuZWxlbWVudCkpIHsKICAgICAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXIgPSBfY29tbW9uRWxlbWVudHMuc2V0UnVudGltZVR5cGVJbmZvOwogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICAgIGhlbHBlciwgaGVscGVyLnBhcmFtZXRlclN0cnVjdHVyZS5jYWxsU3RydWN0dXJlKSk7CiAgICAgIH0KICAgICAgaWYgKHR5cGUuZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMudHlwZUxpdGVyYWxDbGFzcykgewogICAgICAgIC8vIElmIHdlIHVzZSBhIHR5cGUgbGl0ZXJhbCBpbiBhIGNvbnN0YW50LCB0aGUgY29tcGlsZSB0aW1lIGNvbnN0YW50CiAgICAgICAgLy8gZW1pdHRlciB3aWxsIGdlbmVyYXRlIGEgY2FsbCB0byBhIGhlbHBlciBzbyB3ZSByZWdpc3RlciB0aGUgaW1wYWN0CiAgICAgICAgLy8gdGhhdCBjb250YWlucyB0aGF0IGNhbGwuCiAgICAgICAgX2ltcGFjdHMudHlwZUxpdGVyYWwucmVnaXN0ZXJJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyVXNlZENvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgaW1wYWN0QnVpbGRlciA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnQoCiAgICAgICAgY29uc3RhbnQsIGltcGFjdEJ1aWxkZXIsIG5ldyBMaW5rZWRIYXNoU2V0LmlkZW50aXR5KCkpOwogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlclVzZWRFbGVtZW50KE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgd29ybGRJbXBhY3QgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMucmVnaXN0ZXJTdGF0aWNVc2UobWVtYmVyKTsKCiAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24gJiYgbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgICBpZiAobWVtYmVyLm5hbWUgPT0gSWRlbnRpZmllcnMuY2FsbCAmJgogICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5pc0dlbmVyaWNDbGFzcyhjbHMpICYmCiAgICAgICAgICBfcnRpTmVlZC5tZXRob2ROZWVkc1NpZ25hdHVyZShtZW1iZXIpKSB7CiAgICAgICAgd29ybGRJbXBhY3QuYWRkSW1wYWN0KF9yZWdpc3RlckNvbXB1dGVTaWduYXR1cmUoKSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gd29ybGRJbXBhY3Q7CiAgfQoKICBXb3JsZEltcGFjdCBfcHJvY2Vzc0NsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDbGFzcykgewogICAgICBfaW1wYWN0cy5jbG9zdXJlQ2xhc3MucmVnaXN0ZXJJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICB9CgogICAgdm9pZCByZWdpc3Rlckluc3RhbnRpYXRpb24oQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKAogICAgICAgICAgbmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihfZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoY2xzKSkpOwogICAgfQoKICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmludENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMubnVsbENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5udW1DbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0RnVuY3Rpb25DbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzSW5kZXhpbmdCZWhhdmlvckludGVyZmFjZSkgewogICAgICBfaW1wYWN0cy5qc0luZGV4aW5nQmVoYXZpb3IKICAgICAgICAgIC5yZWdpc3RlckltcGFjdChpbXBhY3RCdWlsZGVyLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgIH0KCiAgICBfY3VzdG9tRWxlbWVudHNBbmFseXNpcy5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKGNscyk7CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVySW1wbGVtZW50ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfcHJvY2Vzc0NsYXNzKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9wcm9jZXNzQ2xhc3MoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbG9nU3VtbWFyeSh2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkpIHsKICAgIF9uYXRpdmVFbnF1ZXVlci5sb2dTdW1tYXJ5KGxvZyk7CiAgfQp9CoFHAE5OPAEtARoBMEojJCE6IRo9NydCHh0oKAE5IjAoIQEkIwE/AS8BJB4BGxUgHBUaFSQdAQxBSRJORlA8BhoEAQwuRQQBLEgEAQw0ORcwBgQBTT5GTyshPCRCBh9JDSRKBhcEAQwUT0sePAYEAQxOTi0HUBc7AUQcSyIGAUI3Sj1HKhwGAS4BEQQBDBoBOERGIU0BRS4xCAYEATVCN0QBHzEUTSlJNykxQCIUUVAzKTI+Twg5RD86SAEnQEMmQEoPRD0mREMlCAYEATI5IUY8REQ/CD5NTiRRCAYEAQw9SSpAGgQBDDlHNwE4Ly01MzwIBgEYBAEvSS9QBgEyJUsGAS4wPDMvNDk7O0JARUcyLTlBPDw8NTA8PDMuOjMuOjIwOUE8PDw8QUZGS0hNQ0hFIj8GATwaBAEMOh8EAQw7HwQBDC4lBAIBNXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY29kZWdlbl9saXN0ZW5lci5kYXJ0RnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnSl5i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IENvbnN0YW50VXNlLCBTdGF0aWNVc2U7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IFdvcmxkSW1wYWN0LCBTdGFnZWRXb3JsZEltcGFjdEJ1aWxkZXI7CmltcG9ydCAnYmFja2VuZF91c2FnZS5kYXJ0JyBzaG93IEJhY2tlbmRVc2FnZUJ1aWxkZXI7CmltcG9ydCAnbmF0aXZlX2RhdGEuZGFydCc7CgovLy8gU3VwcG9ydCBmb3IgQ3VzdG9tIEVsZW1lbnRzLgovLy8KLy8vIFRoZSBzdXBwb3J0IGZvciBjdXN0b20gZWxlbWVudHMgdGhlIGNvbXBpbGVyIGJ1aWxkcyBhIHRhYmxlIHRoYXQgbWFwcyB0aGUKLy8vIGN1c3RvbSBlbGVtZW50IGNsYXNzJ3MgW1R5cGVdIHRvIHRoZSBpbnRlcmNlcHRvciBmb3IgdGhlIGNsYXNzIGFuZCB0aGUKLy8vIGNvbnN0cnVjdG9yKHMpIGZvciB0aGUgY2xhc3MuCi8vLwovLy8gV2Ugd2FudCB0aGUgdGFibGUgdG8gY29udGFpbiBvbmx5IHRoZSBjdXN0b20gZWxlbWVudCBjbGFzc2VzIHVzZWQsIGFuZCB3ZQovLy8gd2FudCB0byBhdm9pZCByZXNvbHZpbmcgYW5kIGNvbXBpbGluZyBjb25zdHJ1Y3RvcnMgdGhhdCBhcmUgbm90IHVzZWQgc2luY2UKLy8vIHRoYXQgbWF5IGJyaW5nIGluIHVudXNlZCBjb2RlLiAgVGhpcyBjbGFzcyBjb250cm9scyB0aGUgcmVzb2x1dGlvbiBhbmQgY29kZQovLy8gZ2VuZXJhdGlvbiB0byByZXN0cmljdCB0aGUgaW1wYWN0LgovLy8KLy8vIFRoZSBmb2xsb3dpbmcgbGluZSBvZiBjb2RlIHJlcXVpcmVzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBnZW5lcmF0aXZlCi8vLyBjb25zdHJ1Y3RvciBmYWN0b3J5IGZ1bmN0aW9uKHMpIGZvciBGYW5jeUJ1dHRvbiwgYW5kIHRoZWlyIGluc2VydGlvbiBpbnRvCi8vLyB0aGUgdGFibGU6Ci8vLwovLy8gICAgIGRvY3VtZW50LnJlZ2lzdGVyKEZhbmN5QnV0dG9uLCAneC1mYW5jeS1idXR0b24nKTsKLy8vCi8vLyBXZSBkZXRlY3QgdGhpcyBieSAnam9pbmluZycgdGhlIGNsYXNzZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBhcyB0eXBlIGxpdGVyYWxzCi8vLyB3aXRoIHRoZSBjbGFzc2VzIHRoYXQgYXJlIGN1c3RvbSBlbGVtZW50cywgZW5hYmxlZCBieSBkZXRlY3RpbmcgdGhlIHByZXNlbmNlCi8vLyBvZiB0aGUgdGFibGUgYWNjZXNzIGNvZGUgdXNlZCBieSBkb2N1bWVudC5yZWdpc3Rlci4KLy8vCi8vLyBXZSBoYXZlIHRvIGJlIG1vcmUgY29uc2VydmF0aXZlIHdoZW4gdGhlIHR5cGUgaXMgdW5rbm93biwgZS5nLgovLy8KLy8vICAgICBkb2N1bWVudC5yZWdpc3RlcihjbGFzc01pcnJvci5yZWZsZWN0ZWRUeXBlLCB0YWdGcm9tTWV0YWRhdGEpOwovLy8KLy8vIGFuZAovLy8KLy8vICAgICBjbGFzcyBDb21wb25lbnQ8VD4gewovLy8gICAgICAgZmluYWwgdGFnOwovLy8gICAgICAgQ29tcG9uZW50KHRoaXMudGFnKTsKLy8vICAgICAgIHZvaWQgcmVnaXN0ZXIoKSA9PiBkb2N1bWVudC5yZWdpc3RlcihULCB0YWcpOwovLy8gICAgIH0KLy8vICAgICBjb25zdCBDb21wb25lbnQ8RmFuY3lCdXR0b24+KCd4LWZhbmN5LWJ1dHRvbicpLnJlZ2lzdGVyKCk7Ci8vLwovLy8gSW4gdGhlc2UgY2FzZXMgd2UgY29uc2VydmF0aXZlbHkgZ2VuZXJhdGUgYWxsIHZpYWJsZSBlbnRyaWVzIGluIHRoZSB0YWJsZS4KYWJzdHJhY3QgY2xhc3MgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0Jhc2UgewogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CgogIEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNCYXNlKAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsIHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9uYXRpdmVEYXRhKTsKCiAgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0pvaW4gZ2V0IGpvaW47CgogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIGlmICghX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKSkgcmV0dXJuOwogICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbihjbHMpKSByZXR1cm47CiAgICBpZiAoY2xzLmlzQWJzdHJhY3QpIHJldHVybjsKICAgIC8vIEpzSW50ZXJvcCBjbGFzc2VzIGFyZSBvcGFxdWUgaW50ZXJmYWNlcyB3aXRob3V0IGEgY29uY3JldGUKICAgIC8vIGltcGxlbWVudGF0aW9uLgogICAgaWYgKF9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoY2xzKSkgcmV0dXJuOwogICAgam9pbi5pbnN0YW50aWF0ZWRDbGFzc2VzLmFkZChjbHMpOwogIH0KCiAgdm9pZCByZWdpc3RlclN0YXRpY1VzZShNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQgIT0gbnVsbCk7CiAgICBpZiAoX2NvbW1vbkVsZW1lbnRzLmlzRmluZEluZGV4Rm9yTmF0aXZlU3ViY2xhc3NUeXBlKGVsZW1lbnQpKSB7CiAgICAgIGpvaW4uZGVtYW5kZWQgPSB0cnVlOwogICAgfQogIH0KCiAgLy8vIENvbXB1dGVzIHRoZSBbV29ybGRJbXBhY3RdIG9mIHRoZSBjbGFzc2VzIHJlZ2lzdGVyZWQgc2luY2UgbGFzdCBmbHVzaC4KICBXb3JsZEltcGFjdCBmbHVzaCgpID0+IGpvaW4uZmx1c2goKTsKfQoKY2xhc3MgQ3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMgZXh0ZW5kcyBDdXN0b21FbGVtZW50c0FuYWx5c2lzQmFzZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0pvaW4gam9pbjsKCiAgQ3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMoCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlRGF0YSwKICAgICAgQmFja2VuZFVzYWdlQnVpbGRlciBiYWNrZW5kVXNhZ2VCdWlsZGVyKQogICAgICA6IGpvaW4gPSBuZXcgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0pvaW4oCiAgICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwgY29tbW9uRWxlbWVudHMsIG5hdGl2ZURhdGEsCiAgICAgICAgICAgIGJhY2tlbmRVc2FnZUJ1aWxkZXI6IGJhY2tlbmRVc2FnZUJ1aWxkZXIpLAogICAgICAgIHN1cGVyKGVsZW1lbnRFbnZpcm9ubWVudCwgY29tbW9uRWxlbWVudHMsIG5hdGl2ZURhdGEpIHsKICAgIC8vIFRPRE8oc3JhKTogUmVtb3ZlIHRoaXMgd29yay1hcm91bmQuICBXZSBzaG91bGQgbWFyayBhbGxDbGFzc2VzU2VsZWN0ZWQgaW4KICAgIC8vIGJvdGggam9pbnMgb25seSB3aGVuIHdlIHNlZSBhIGNvbnN0cnVjdCBnZW5lcmF0aW5nIGFuIHVua25vd24gW1R5cGVdIGJ1dAogICAgLy8gd2UgY2FuJ3QgY3VycmVudGx5IHJlY29nbml6ZSBhbGwgY2FzZXMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgd29yay1hcm91bmQKICAgIC8vIGZvciB0aGUgdW5pbXBsZW1lbnRlZCBgQ2xhc3NNaXJyb3IucmVmbGVjdGVkVHlwZWAgaXMgbm90IHJlY29nbml6YWJsZS4KICAgIC8vIFRPRE8oMTI2MDcpOiBNYXRjaCBvbiBbQ2xhc3NNaXJyb3IucmVmbGVjdGVkVHlwZV0KICAgIGpvaW4uYWxsQ2xhc3Nlc1NlbGVjdGVkID0gdHJ1ZTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlTGl0ZXJhbChEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZS5pc0ludGVyZmFjZVR5cGUpIHsKICAgICAgLy8gVE9ETyhzcmEpOiBJZiB3ZSBoYWQgYSBmbG93IHF1ZXJ5IGZyb20gdGhlIHR5cGUgbGl0ZXJhbCBleHByZXNzaW9uIHRvCiAgICAgIC8vIHRoZSBUeXBlIGFyZ3VtZW50IG9mIHRoZSBtZXRhZGF0YSBsb29rdXAsIHdlIGNvdWxkIHRlbGwgaWYgdGhpcyB0eXBlCiAgICAgIC8vIGxpdGVyYWwgaXMgcmVhbGx5IGEgZGVtYW5kIGZvciB0aGUgbWV0YWRhdGEuCiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICAgIGpvaW4uc2VsZWN0ZWRDbGFzc2VzLmFkZChpbnRlcmZhY2VUeXBlLmVsZW1lbnQpOwogICAgfSBlbHNlIGlmICh0eXBlLmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgIC8vIFRoaXMgaXMgYSB0eXBlIHBhcmFtZXRlciBvZiBhIHBhcmFtZXRlcml6ZWQgY2xhc3MuCiAgICAgIC8vIFRPRE8oc3JhKTogSXMgdGhlcmUgYSB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoIHR5cGVzIGFyZSBib3VuZCB0byB0aGUKICAgICAgLy8gcGFyYW1ldGVyPwogICAgICBqb2luLmFsbENsYXNzZXNTZWxlY3RlZCA9IHRydWU7CiAgICB9CiAgfQp9CgpjbGFzcyBDdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcyBleHRlbmRzIEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNCYXNlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBDdXN0b21FbGVtZW50c0FuYWx5c2lzSm9pbiBqb2luOwoKICBDdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcyhDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZURhdGEpCiAgICAgIDogam9pbiA9IG5ldyBDdXN0b21FbGVtZW50c0FuYWx5c2lzSm9pbigKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LCBjb21tb25FbGVtZW50cywgbmF0aXZlRGF0YSksCiAgICAgICAgc3VwZXIoZWxlbWVudEVudmlyb25tZW50LCBjb21tb25FbGVtZW50cywgbmF0aXZlRGF0YSkgewogICAgLy8gVE9ETyhzcmEpOiBSZW1vdmUgdGhpcyB3b3JrLWFyb3VuZC4gIFdlIHNob3VsZCBtYXJrIGFsbENsYXNzZXNTZWxlY3RlZCBpbgogICAgLy8gYm90aCBqb2lucyBvbmx5IHdoZW4gd2Ugc2VlIGEgY29uc3RydWN0IGdlbmVyYXRpbmcgYW4gdW5rbm93biBbVHlwZV0gYnV0CiAgICAvLyB3ZSBjYW4ndCBjdXJyZW50bHkgcmVjb2duaXplIGFsbCBjYXNlcy4gIEluIHBhcnRpY3VsYXIsIHRoZSB3b3JrLWFyb3VuZAogICAgLy8gZm9yIHRoZSB1bmltcGxlbWVudGVkIGBDbGFzc01pcnJvci5yZWZsZWN0ZWRUeXBlYCBpcyBub3QgcmVjb2duaXphYmxlLgogICAgLy8gVE9ETygxMjYwNyk6IE1hdGNoIG9uIFtDbGFzc01pcnJvci5yZWZsZWN0ZWRUeXBlXQogICAgam9pbi5hbGxDbGFzc2VzU2VsZWN0ZWQgPSB0cnVlOwogIH0KCiAgdm9pZCByZWdpc3RlclR5cGVDb25zdGFudChDbGFzc0VudGl0eSBjbHMpIHsKICAgIGpvaW4uc2VsZWN0ZWRDbGFzc2VzLmFkZChjbHMpOwogIH0KCiAgYm9vbCBnZXQgbmVlZHNUYWJsZSA9PiBqb2luLmRlbWFuZGVkOwoKICBib29sIG5lZWRzQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSA9PiBqb2luLmFjdGl2ZUNsYXNzZXMuY29udGFpbnMoY2xzKTsKCiAgTGlzdDxDb25zdHJ1Y3RvckVudGl0eT4gY29uc3RydWN0b3JzKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgam9pbi5jb21wdXRlRXNjYXBpbmdDb25zdHJ1Y3RvcnMoY2xzKTsKfQoKY2xhc3MgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0pvaW4gewogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgQmFja2VuZFVzYWdlQnVpbGRlciBfYmFja2VuZFVzYWdlQnVpbGRlcjsKCiAgZmluYWwgYm9vbCBmb3JSZXNvbHV0aW9uOwoKICBmaW5hbCBTdGFnZWRXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlciA9IG5ldyBTdGFnZWRXb3JsZEltcGFjdEJ1aWxkZXIoKTsKCiAgLy8gQ2xhc3NlcyB0aGF0IGFyZSBjYW5kaWRhdGVzIGZvciBuZWVkaW5nIGNvbnN0cnVjdG9ycy4gIENsYXNzZXMgYXJlIG1vdmVkIHRvCiAgLy8gW2FjdGl2ZUNsYXNzZXNdIHdoZW4gd2Uga25vdyB0aGV5IG5lZWQgY29uc3RydWN0b3JzLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gaW5zdGFudGlhdGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIC8vIENsYXNzZXMgZXhwbGljaXRseSBuYW1lZC4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IHNlbGVjdGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIC8vIFRydWUgaWYgd2UgbXVzdCBjb25zZXJ2YXRpdmVseSBpbmNsdWRlIGFsbCBleHRlbnNpb24gY2xhc3Nlcy4KICBib29sIGFsbENsYXNzZXNTZWxlY3RlZCA9IGZhbHNlOwoKICAvLyBEaWQgd2Ugc2VlIGEgZGVtYW5kIGZvciB0aGUgZGF0YT8KICBib29sIGRlbWFuZGVkID0gZmFsc2U7CgogIC8vIENsYXNzZXNPdXRwdXQ6IGNsYXNzZXMgcmVxdWlyaW5nIG1ldGFkYXRhLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gYWN0aXZlQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNKb2luKAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsIHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9uYXRpdmVEYXRhLAogICAgICB7QmFja2VuZFVzYWdlQnVpbGRlciBiYWNrZW5kVXNhZ2VCdWlsZGVyfSkKICAgICAgOiB0aGlzLl9iYWNrZW5kVXNhZ2VCdWlsZGVyID0gYmFja2VuZFVzYWdlQnVpbGRlciwKICAgICAgICB0aGlzLmZvclJlc29sdXRpb24gPSBiYWNrZW5kVXNhZ2VCdWlsZGVyICE9IG51bGw7CgogIFdvcmxkSW1wYWN0IGZsdXNoKCkgewogICAgaWYgKCFkZW1hbmRlZCkgcmV0dXJuIGNvbnN0IFdvcmxkSW1wYWN0KCk7CiAgICB2YXIgbmV3QWN0aXZlQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBpbnN0YW50aWF0ZWRDbGFzc2VzKSB7CiAgICAgIGJvb2wgaXNOYXRpdmUgPSBfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKGNscyk7CiAgICAgIGJvb2wgaXNFeHRlbnNpb24gPSAhaXNOYXRpdmUgJiYgX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKTsKICAgICAgLy8gR2VuZXJhdGUgdGFibGUgZW50cmllcyBmb3IgbmF0aXZlIGNsYXNzZXMgdGhhdCBhcmUgZXhwbGljaXRseSBuYW1lZCBhbmQKICAgICAgLy8gZXh0ZW5zaW9ucyB0aGF0IGZpeCBvdXIgY3JpdGVyaWEuCiAgICAgIGlmICgoaXNOYXRpdmUgJiYgc2VsZWN0ZWRDbGFzc2VzLmNvbnRhaW5zKGNscykpIHx8CiAgICAgICAgICAoaXNFeHRlbnNpb24gJiYKICAgICAgICAgICAgICAoYWxsQ2xhc3Nlc1NlbGVjdGVkIHx8IHNlbGVjdGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpKSkpIHsKICAgICAgICBuZXdBY3RpdmVDbGFzc2VzLmFkZChjbHMpOwogICAgICAgIEl0ZXJhYmxlPENvbnN0cnVjdG9yRW50aXR5PiBlc2NhcGluZ0NvbnN0cnVjdG9ycyA9CiAgICAgICAgICAgIGNvbXB1dGVFc2NhcGluZ0NvbnN0cnVjdG9ycyhjbHMpOwogICAgICAgIGZvciAoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgaW4gZXNjYXBpbmdDb25zdHJ1Y3RvcnMpIHsKICAgICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5jb25zdHJ1Y3Rvckludm9rZSgKICAgICAgICAgICAgICBjb25zdHJ1Y3RvciwgQ2FsbFN0cnVjdHVyZS5OT19BUkdTKSk7CiAgICAgICAgfQogICAgICAgIGlmIChmb3JSZXNvbHV0aW9uKSB7CiAgICAgICAgICBlc2NhcGluZ0NvbnN0cnVjdG9ycwogICAgICAgICAgICAgIC5mb3JFYWNoKF9iYWNrZW5kVXNhZ2VCdWlsZGVyLnJlZ2lzdGVyR2xvYmFsRnVuY3Rpb25EZXBlbmRlbmN5KTsKICAgICAgICB9CiAgICAgICAgLy8gRm9yY2UgdGhlIGdlbmVyYXRpb24gb2YgdGhlIHR5cGUgY29uc3RhbnQgdGhhdCBpcyB0aGUga2V5IHRvIGFuIGVudHJ5CiAgICAgICAgLy8gaW4gdGhlIGdlbmVyYXRlZCB0YWJsZS4KICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gX21ha2VUeXBlQ29uc3RhbnQoY2xzKTsKICAgICAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgICAgIC5yZWdpc3RlckNvbnN0YW50VXNlKG5ldyBDb25zdGFudFVzZS5jdXN0b21FbGVtZW50cyhjb25zdGFudCkpOwogICAgICB9CiAgICB9CiAgICBhY3RpdmVDbGFzc2VzLmFkZEFsbChuZXdBY3RpdmVDbGFzc2VzKTsKICAgIGluc3RhbnRpYXRlZENsYXNzZXMucmVtb3ZlQWxsKG5ld0FjdGl2ZUNsYXNzZXMpOwogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXIuZmx1c2goKTsKICB9CgogIFR5cGVDb25zdGFudFZhbHVlIF9tYWtlVHlwZUNvbnN0YW50KENsYXNzRW50aXR5IGNscykgewogICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShjbHMpOwogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVUeXBlKF9jb21tb25FbGVtZW50cywgdHlwZSk7CiAgfQoKICBMaXN0PENvbnN0cnVjdG9yRW50aXR5PiBjb21wdXRlRXNjYXBpbmdDb25zdHJ1Y3RvcnMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBMaXN0PENvbnN0cnVjdG9yRW50aXR5PiByZXN1bHQgPSA8Q29uc3RydWN0b3JFbnRpdHk+W107CiAgICAvLyBPbmx5IGNsYXNzZXMgdGhhdCBleHRlbmQgbmF0aXZlIGNsYXNzZXMgaGF2ZSBjb25zdHJ1Y3RvcnMgaW4gdGhlIHRhYmxlLgogICAgLy8gV2UgY291bGQgcmVmaW5lIHRoaXMgdG8gY2xhc3NlcyB0aGF0IGV4dGVuZCBFbGVtZW50LCBidXQgdGhhdCB3b3VsZCBicmVhawogICAgLy8gdGhlIHRlc3RzIGFuZCB0aGVyZSBpcyBubyBzYW5lIHJlYXNvbiB0byBzdWJjbGFzcyBvdGhlciBuYXRpdmUgY2xhc3Nlcy4KICAgIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKGNscykpIHJldHVybiByZXN1bHQ7CgogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ29uc3RydWN0b3IoY2xzLAogICAgICAgIChDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikgewogICAgICBpZiAoY29uc3RydWN0b3IuaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IpIHsKICAgICAgICAvLyBFbnN1cmUgdGhhdCBwYXJhbWV0ZXIgc3RydWN0dXJlIGhhcyBiZWVuIGNvbXB1dGVkIGJ5IHF1ZXJ5aW5nIHRoZQogICAgICAgIC8vIGZ1bmN0aW9uIHR5cGUuCiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoY29uc3RydWN0b3IpOwogICAgICAgIC8vIElnbm9yZSBjb25zdHJ1Y3RvcnMgdGhhdCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggemVybyBhcmd1bWVudHMuCiAgICAgICAgaWYgKGNvbnN0cnVjdG9yLnBhcmFtZXRlclN0cnVjdHVyZS5yZXF1aXJlZFBhcmFtZXRlcnMgPT0gMCkgewogICAgICAgICAgcmVzdWx0LmFkZChjb25zdHJ1Y3Rvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CoDzAE5OPAEiPyMkISo7JzA2GwEhBE5LIgROT1AnBElODwQ6BFFROARDBEcECAQdFR84CkMETywlMCgBHkkBJwE0O0QgQhczJwQBMR1FHAYEAU0nAgFMDCkBJC0lIi8vPDdAUVBPTjkkBAEsIE9ONio3JjxNFCYGBAIBSQwpAT9JLz1AUVBPTjkkBAEvIwQBKAFIATstAgEjMCglMgEcAVEBUTpHAR9DAUMjAScZATBBAR5IMTk6ARgvMzM2UFErORpIIzsuRks0Ch0fTwpRIzkWTAgGLDUiBAE5OT4EAUk8T1FPNwEwKjFNGjpKRiMKCAgTBAIBPXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnRAc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9pbXBhY3RfdHJhbnNmb3JtZXIuZGFydMAARlYvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19iYWNrZW5kLmJhY2tlbmQuaW1wYWN0X3RyYW5zZm9ybWVyOwoKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeUJ1aWxkZXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL2JhY2tlbmRfYXBpLmRhcnQnIHNob3cgSW1wYWN0VHJhbnNmb3JtZXI7CmltcG9ydCAnLi4vY29tbW9uL2NvZGVnZW4uZGFydCcgc2hvdyBDb2RlZ2VuSW1wYWN0OwppbXBvcnQgJy4uL2NvbW1vbi9yZXNvbHV0aW9uLmRhcnQnIHNob3cgUmVzb2x1dGlvbkltcGFjdDsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfZW1pdHRlci9uYXRpdmVfZW1pdHRlci5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvZW5xdWV1ZS5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnIHNob3cgVHJhbnNmb3JtZWRXb3JsZEltcGFjdCwgV29ybGRJbXBhY3Q7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJ2JhY2tlbmRfaW1wYWN0LmRhcnQnOwppbXBvcnQgJ2JhY2tlbmRfdXNhZ2UuZGFydCc7CmltcG9ydCAnY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnbmFtZXIuZGFydCc7CmltcG9ydCAnbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCc7CgpjbGFzcyBKYXZhU2NyaXB0SW1wYWN0VHJhbnNmb3JtZXIgZXh0ZW5kcyBJbXBhY3RUcmFuc2Zvcm1lciB7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwogIGZpbmFsIEJhY2tlbmRJbXBhY3RzIF9pbXBhY3RzOwogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlQmFzaWNEYXRhOwogIGZpbmFsIE5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciBfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyOwogIGZpbmFsIEJhY2tlbmRVc2FnZUJ1aWxkZXIgX2JhY2tlbmRVc2FnZUJ1aWxkZXI7CiAgZmluYWwgQ3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMgX2N1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzOwogIGZpbmFsIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIF9ydGlOZWVkQnVpbGRlcjsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgX2NsYXNzSGllcmFyY2h5QnVpbGRlcjsKICBmaW5hbCBBbm5vdGF0aW9uc0RhdGEgX2Fubm90YXRpb25zRGF0YTsKCiAgSmF2YVNjcmlwdEltcGFjdFRyYW5zZm9ybWVyKAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLl9pbXBhY3RzLAogICAgICB0aGlzLl9uYXRpdmVCYXNpY0RhdGEsCiAgICAgIHRoaXMuX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciwKICAgICAgdGhpcy5fYmFja2VuZFVzYWdlQnVpbGRlciwKICAgICAgdGhpcy5fY3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMsCiAgICAgIHRoaXMuX3J0aU5lZWRCdWlsZGVyLAogICAgICB0aGlzLl9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIsCiAgICAgIHRoaXMuX2Fubm90YXRpb25zRGF0YSk7CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHRyYW5zZm9ybVJlc29sdXRpb25JbXBhY3QoUmVzb2x1dGlvbkltcGFjdCB3b3JsZEltcGFjdCkgewogICAgVHJhbnNmb3JtZWRXb3JsZEltcGFjdCB0cmFuc2Zvcm1lZCA9CiAgICAgICAgbmV3IFRyYW5zZm9ybWVkV29ybGRJbXBhY3Qod29ybGRJbXBhY3QpOwoKICAgIHZvaWQgcmVnaXN0ZXJJbXBhY3QoQmFja2VuZEltcGFjdCBpbXBhY3QpIHsKICAgICAgaW1wYWN0LnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgX2JhY2tlbmRVc2FnZUJ1aWxkZXIucHJvY2Vzc0JhY2tlbmRJbXBhY3QoaW1wYWN0KTsKICAgIH0KCiAgICBmb3IgKEZlYXR1cmUgZmVhdHVyZSBpbiB3b3JsZEltcGFjdC5mZWF0dXJlcykgewogICAgICBzd2l0Y2ggKGZlYXR1cmUpIHsKICAgICAgICBjYXNlIEZlYXR1cmUuQUJTVFJBQ1RfQ0xBU1NfSU5TVEFOVElBVElPTjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5BU1NFUlQ6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5hc3NlcnRXaXRob3V0TWVzc2FnZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuQVNTRVJUX1dJVEhfTUVTU0FHRToKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmFzc2VydFdpdGhNZXNzYWdlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5BU1lOQzoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmFzeW5jQm9keSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuQVNZTkNfRk9SX0lOOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuYXN5bmNGb3JJbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuQVNZTkNfU1RBUjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmFzeW5jU3RhckJvZHkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkNBVENIX1NUQVRFTUVOVDoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmNhdGNoU3RhdGVtZW50KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5GQUxMX1RIUk9VR0hfRVJST1I6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5mYWxsVGhyb3VnaEVycm9yKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5GSUVMRF9XSVRIT1VUX0lOSVRJQUxJWkVSOgogICAgICAgIGNhc2UgRmVhdHVyZS5MT0NBTF9XSVRIT1VUX0lOSVRJQUxJWkVSOgogICAgICAgICAgdHJhbnNmb3JtZWQucmVnaXN0ZXJUeXBlVXNlKAogICAgICAgICAgICAgIG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLm51bGxUeXBlKSk7CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5udWxsTGl0ZXJhbCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuTEFaWV9GSUVMRDoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmxhenlGaWVsZCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuU1RBQ0tfVFJBQ0VfSU5fQ0FUQ0g6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5zdGFja1RyYWNlSW5DYXRjaCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuU1RSSU5HX0lOVEVSUE9MQVRJT046CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5zdHJpbmdJbnRlcnBvbGF0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5TVFJJTkdfSlVYVEFQT1NJVElPTjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnN0cmluZ0p1eHRhcG9zaXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlNVUEVSX05PX1NVQ0hfTUVUSE9EOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuc3VwZXJOb1N1Y2hNZXRob2QpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlNZTUJPTF9DT05TVFJVQ1RPUjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnN5bWJvbENvbnN0cnVjdG9yKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5TWU5DX0ZPUl9JTjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnN5bmNGb3JJbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuU1lOQ19TVEFSOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuc3luY1N0YXJCb2R5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5USFJPV19FWFBSRVNTSU9OOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMudGhyb3dFeHByZXNzaW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5USFJPV19OT19TVUNIX01FVEhPRDoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnRocm93Tm9TdWNoTWV0aG9kKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5USFJPV19SVU5USU1FX0VSUk9SOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMudGhyb3dSdW50aW1lRXJyb3IpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlRIUk9XX1VOU1VQUE9SVEVEX0VSUk9SOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMudGhyb3dVbnN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5UWVBFX1ZBUklBQkxFX0JPVU5EU19DSEVDSzoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnR5cGVWYXJpYWJsZUJvdW5kQ2hlY2spOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkxPQURfTElCUkFSWToKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmxvYWRMaWJyYXJ5KTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgYm9vbCBoYXNBc0Nhc3QgPSBmYWxzZTsKICAgIGJvb2wgaGFzVHlwZUxpdGVyYWwgPSBmYWxzZTsKICAgIGZvciAoVHlwZVVzZSB0eXBlVXNlIGluIHdvcmxkSW1wYWN0LnR5cGVVc2VzKSB7CiAgICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlVXNlLnR5cGU7CiAgICAgIHN3aXRjaCAodHlwZVVzZS5raW5kKSB7CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ09OU1RfSU5TVEFOVElBVElPTjoKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLk5BVElWRV9JTlNUQU5USUFUSU9OOgogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5JU19DSEVDSzoKICAgICAgICAgIG9uSXNDaGVjayh0eXBlLCB0cmFuc2Zvcm1lZCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLkFTX0NBU1Q6CiAgICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YQogICAgICAgICAgICAgIC5nZXRFeHBsaWNpdENhc3RDaGVja1BvbGljeSh3b3JsZEltcGFjdC5tZW1iZXIpCiAgICAgICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgICAgICBvbklzQ2hlY2sodHlwZSwgdHJhbnNmb3JtZWQpOwogICAgICAgICAgICBoYXNBc0Nhc3QgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTVBMSUNJVF9DQVNUOgogICAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAuZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5KHdvcmxkSW1wYWN0Lm1lbWJlcikKICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgIG9uSXNDaGVjayh0eXBlLCB0cmFuc2Zvcm1lZCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLlBBUkFNRVRFUl9DSEVDSzoKICAgICAgICAgIGlmIChfYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KHdvcmxkSW1wYWN0Lm1lbWJlcikKICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgIG9uSXNDaGVjayh0eXBlLCB0cmFuc2Zvcm1lZCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLkNBVENIX1RZUEU6CiAgICAgICAgICBvbklzQ2hlY2sodHlwZSwgdHJhbnNmb3JtZWQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0xJVEVSQUw6CiAgICAgICAgICBfY3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMucmVnaXN0ZXJUeXBlTGl0ZXJhbCh0eXBlKTsKICAgICAgICAgIGlmICh0eXBlLmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlID0gdHlwZTsKICAgICAgICAgICAgRW50aXR5IHR5cGVEZWNsYXJhdGlvbiA9IHR5cGVWYXJpYWJsZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKICAgICAgICAgICAgaWYgKHR5cGVEZWNsYXJhdGlvbiBpcyBDbGFzc0VudGl0eSkgewogICAgICAgICAgICAgIF9ydGlOZWVkQnVpbGRlcgogICAgICAgICAgICAgICAgICAucmVnaXN0ZXJDbGFzc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbCh0eXBlRGVjbGFyYXRpb24pOwogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVEZWNsYXJhdGlvbiBpcyBGdW5jdGlvbkVudGl0eSkgewogICAgICAgICAgICAgIF9ydGlOZWVkQnVpbGRlcgogICAgICAgICAgICAgICAgICAucmVnaXN0ZXJNZXRob2RVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwodHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlRGVjbGFyYXRpb24gaXMgTG9jYWwpIHsKICAgICAgICAgICAgICBfcnRpTmVlZEJ1aWxkZXIucmVnaXN0ZXJMb2NhbEZ1bmN0aW9uVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKAogICAgICAgICAgICAgICAgICB0eXBlRGVjbGFyYXRpb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnR5cGVWYXJpYWJsZUV4cHJlc3Npb24pOwogICAgICAgICAgfQogICAgICAgICAgaGFzVHlwZUxpdGVyYWwgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5SVElfVkFMVUU6CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UOgogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFNRURfVFlQRV9WQVJJQUJMRV9ORVdfUlRJOgogICAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgdHlwZSB1c2U6ICR0eXBlVXNlLiIpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoaGFzQXNDYXN0KSB7CiAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmFzQ2hlY2spOwogICAgfQoKICAgIGlmIChoYXNUeXBlTGl0ZXJhbCkgewogICAgICB0cmFuc2Zvcm1lZAogICAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy50eXBlVHlwZSkpOwogICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy50eXBlTGl0ZXJhbCk7CiAgICB9CgogICAgZm9yIChNYXBMaXRlcmFsVXNlIG1hcExpdGVyYWxVc2UgaW4gd29ybGRJbXBhY3QubWFwTGl0ZXJhbHMpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHRoZSBbaXNFbXB0eV0gcHJvcGVydHkgd2hlbiBmYWN0b3J5CiAgICAgIC8vIGNvbnN0cnVjdG9ycyBhcmUgcmVnaXN0ZXJlZCBkaXJlY3RseS4KICAgICAgaWYgKG1hcExpdGVyYWxVc2UuaXNDb25zdGFudCkgewogICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmNvbnN0YW50TWFwTGl0ZXJhbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHJhbnNmb3JtZWQKICAgICAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKG1hcExpdGVyYWxVc2UudHlwZSkpOwogICAgICB9CiAgICB9CgogICAgZm9yIChTZXRMaXRlcmFsVXNlIHNldExpdGVyYWxVc2UgaW4gd29ybGRJbXBhY3Quc2V0TGl0ZXJhbHMpIHsKICAgICAgaWYgKHNldExpdGVyYWxVc2UuaXNDb25zdGFudCkgewogICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmNvbnN0YW50U2V0TGl0ZXJhbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHJhbnNmb3JtZWQKICAgICAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKHNldExpdGVyYWxVc2UudHlwZSkpOwogICAgICB9CiAgICB9CgogICAgZm9yIChMaXN0TGl0ZXJhbFVzZSBsaXN0TGl0ZXJhbFVzZSBpbiB3b3JsZEltcGFjdC5saXN0TGl0ZXJhbHMpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHRoZSBbaXNDb25zdGFudF0gYW5kIFtpc0VtcHR5XSBwcm9wZXJ0eSB3aGVuCiAgICAgIC8vIGZhY3RvcnkgY29uc3RydWN0b3JzIGFyZSByZWdpc3RlcmVkIGRpcmVjdGx5LgogICAgICB0cmFuc2Zvcm1lZAogICAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKGxpc3RMaXRlcmFsVXNlLnR5cGUpKTsKICAgIH0KCiAgICBmb3IgKFJ1bnRpbWVUeXBlVXNlIHJ1bnRpbWVUeXBlVXNlIGluIHdvcmxkSW1wYWN0LnJ1bnRpbWVUeXBlVXNlcykgewogICAgICAvLyBFbmFibGUgcnVudGltZSB0eXBlIHN1cHBvcnQgaWYgd2UgZGlzY292ZXIgYSBnZXR0ZXIgY2FsbGVkCiAgICAgIC8vIHJ1bnRpbWVUeXBlLiBXZSBoYXZlIHRvIGVuYWJsZSBydW50aW1lIHR5cGUgYmVmb3JlIGhpdHRpbmcgdGhlCiAgICAgIC8vIGNvZGVnZW4sIHNvIHRoYXQgY29uc3RydWN0b3JzIGtub3cgd2hldGhlciB0aGV5IG5lZWQgdG8gZ2VuZXJhdGUgY29kZQogICAgICAvLyBmb3IgcnVudGltZSB0eXBlLgogICAgICBfYmFja2VuZFVzYWdlQnVpbGRlci5yZWdpc3RlclJ1bnRpbWVUeXBlVXNlKHJ1bnRpbWVUeXBlVXNlKTsKICAgIH0KCiAgICBpZiAod29ybGRJbXBhY3QuY29uc3RTeW1ib2xOYW1lcy5pc05vdEVtcHR5KSB7CiAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmNvbnN0U3ltYm9sKTsKICAgIH0KCiAgICBmb3IgKFN0YXRpY1VzZSBzdGF0aWNVc2UgaW4gd29ybGRJbXBhY3Quc3RhdGljVXNlcykgewogICAgICBzd2l0Y2ggKHN0YXRpY1VzZS5raW5kKSB7CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkU6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5jbG9zdXJlKTsKICAgICAgICAgIExvY2FsIGNsb3N1cmUgPSBzdGF0aWNVc2UuZWxlbWVudDsKICAgICAgICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRMb2NhbEZ1bmN0aW9uVHlwZShjbG9zdXJlKTsKICAgICAgICAgIGlmICh0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyB8fAogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhbiB3ZSBhdm9pZCB0aGUgbmVlZCBmb3Igc2lnbmF0dXJlcyBpbgogICAgICAgICAgICAgIC8vIERhcnQgMj8KICAgICAgICAgICAgICB0cnVlKSB7CiAgICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmNvbXB1dGVTaWduYXR1cmUpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgfQogICAgfQoKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50IGluIHdvcmxkSW1wYWN0LmNvbnN0YW50TGl0ZXJhbHMpIHsKICAgICAgc3dpdGNoIChjb25zdGFudC5raW5kKSB7CiAgICAgICAgY2FzZSBDb25zdGFudEV4cHJlc3Npb25LaW5kLk5VTEw6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5udWxsTGl0ZXJhbCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENvbnN0YW50RXhwcmVzc2lvbktpbmQuQk9PTDoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmJvb2xMaXRlcmFsKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ29uc3RhbnRFeHByZXNzaW9uS2luZC5JTlQ6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5pbnRMaXRlcmFsKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ29uc3RhbnRFeHByZXNzaW9uS2luZC5ET1VCTEU6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5kb3VibGVMaXRlcmFsKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TVFJJTkc6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5zdHJpbmdMaXRlcmFsKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBjb25zdGFudCBsaXRlcmFsOiAke2NvbnN0YW50LmtpbmR9LiIpKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IgaW4gd29ybGRJbXBhY3QubmF0aXZlRGF0YSkgewogICAgICBfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyLnJlZ2lzdGVyTmF0aXZlQmVoYXZpb3IoCiAgICAgICAgICB0cmFuc2Zvcm1lZCwgYmVoYXZpb3IsIHdvcmxkSW1wYWN0KTsKICAgIH0KCiAgICBmb3IgKENsYXNzRW50aXR5IGNsYXNzRW50aXR5IGluIHdvcmxkSW1wYWN0LnNlZW5DbGFzc2VzKSB7CiAgICAgIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIucmVnaXN0ZXJDbGFzcyhjbGFzc0VudGl0eSk7CiAgICB9CgogICAgaWYgKHdvcmxkSW1wYWN0LmdlbmVyaWNJbnN0YW50aWF0aW9ucy5pc05vdEVtcHR5KSB7CiAgICAgIGZvciAoR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbgogICAgICAgICAgaW4gd29ybGRJbXBhY3QuZ2VuZXJpY0luc3RhbnRpYXRpb25zKSB7CiAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMKICAgICAgICAgICAgLmdldEdlbmVyaWNJbnN0YW50aWF0aW9uKGluc3RhbnRpYXRpb24udHlwZUFyZ3VtZW50cy5sZW5ndGgpKTsKICAgICAgICBfcnRpTmVlZEJ1aWxkZXIucmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbihpbnN0YW50aWF0aW9uKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB0cmFuc2Zvcm1lZDsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHNwbGl0IHRoaXMgaW50byBbb25Bc3NlcnRUeXBlXSBhbmQgW29uVGVzdFR5cGVdLgogIHZvaWQgb25Jc0NoZWNrKERhcnRUeXBlIHR5cGUsIFRyYW5zZm9ybWVkV29ybGRJbXBhY3QgdHJhbnNmb3JtZWQpIHsKICAgIHZvaWQgcmVnaXN0ZXJJbXBhY3QoQmFja2VuZEltcGFjdCBpbXBhY3QpIHsKICAgICAgaW1wYWN0LnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgX2JhY2tlbmRVc2FnZUJ1aWxkZXIucHJvY2Vzc0JhY2tlbmRJbXBhY3QoaW1wYWN0KTsKICAgIH0KCiAgICB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRVbmFsaWFzZWRUeXBlKHR5cGUpOwogICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMudHlwZUNoZWNrKTsKCiAgICBpZiAoIXR5cGUudHJlYXRBc1JhdyB8fCB0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyB8fCB0eXBlLmlzRnVuY3Rpb25UeXBlKSB7CiAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmdlbmVyaWNUeXBlQ2hlY2spOwogICAgICBpZiAodHlwZS5pc1R5cGVWYXJpYWJsZSkgewogICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnR5cGVWYXJpYWJsZVR5cGVDaGVjayk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5mdW5jdGlvblR5cGVDaGVjayk7CiAgICB9CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIF9uYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVDbGFzcyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLm5hdGl2ZVR5cGVDaGVjayk7CiAgICB9CiAgICBpZiAodHlwZSBpcyBGdXR1cmVPclR5cGUpIHsKICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuZnV0dXJlT3JUeXBlQ2hlY2spOwogICAgfQogIH0KfQoKY2xhc3MgQ29kZWdlbkltcGFjdFRyYW5zZm9ybWVyIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBCYWNrZW5kSW1wYWN0cyBfaW1wYWN0czsKICBmaW5hbCBOYXRpdmVEYXRhIF9uYXRpdmVEYXRhOwogIGZpbmFsIEJhY2tlbmRVc2FnZSBfYmFja2VuZFVzYWdlOwogIGZpbmFsIFJ1bnRpbWVUeXBlc05lZWQgX3J0aU5lZWQ7CiAgZmluYWwgTmF0aXZlQ29kZWdlbkVucXVldWVyIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXI7CiAgZmluYWwgTmFtZXIgX25hbWVyOwogIGZpbmFsIE9uZVNob3RJbnRlcmNlcHRvckRhdGEgX29uZVNob3RJbnRlcmNlcHRvckRhdGE7CiAgZmluYWwgUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlciBfcnRpQ2hlY2tzQnVpbGRlcjsKICBmaW5hbCBOYXRpdmVFbWl0dGVyIF9uYXRpdmVFbWl0dGVyOwoKICBDb2RlZ2VuSW1wYWN0VHJhbnNmb3JtZXIoCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLl9pbXBhY3RzLAogICAgICB0aGlzLl9uYXRpdmVEYXRhLAogICAgICB0aGlzLl9iYWNrZW5kVXNhZ2UsCiAgICAgIHRoaXMuX3J0aU5lZWQsCiAgICAgIHRoaXMuX25hdGl2ZUNvZGVnZW5FbnF1ZXVlciwKICAgICAgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX29uZVNob3RJbnRlcmNlcHRvckRhdGEsCiAgICAgIHRoaXMuX3J0aUNoZWNrc0J1aWxkZXIsCiAgICAgIHRoaXMuX25hdGl2ZUVtaXR0ZXIpOwoKICB2b2lkIG9uSXNDaGVja0ZvckNvZGVnZW4oRGFydFR5cGUgdHlwZSwgVHJhbnNmb3JtZWRXb3JsZEltcGFjdCB0cmFuc2Zvcm1lZCkgewogICAgaWYgKHR5cGUuaXNEeW5hbWljKSByZXR1cm47CiAgICBpZiAodHlwZS5pc1ZvaWQpIHJldHVybjsKICAgIHR5cGUgPSB0eXBlLnVuYWxpYXNlZDsKICAgIF9pbXBhY3RzLnR5cGVDaGVjay5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CgogICAgaWYgKCF0eXBlLnRyZWF0QXNSYXcgfHwgdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgX2ltcGFjdHMuZ2VuZXJpY0lzQ2hlY2sucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgfQogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKHR5cGUuZWxlbWVudCkpIHsKICAgICAgLy8gV2Ugd2lsbCBuZWVlZCB0byBhZGQgdGhlICIkaXMiIGFuZCAiJGFzIiBwcm9wZXJ0aWVzIG9uIHRoZQogICAgICAvLyBKYXZhU2NyaXB0IG9iamVjdCBwcm90b3R5cGUsIHNvIHdlIG1ha2Ugc3VyZQogICAgICAvLyBbOmRlZmluZVByb3BlcnR5Ol0gaXMgY29tcGlsZWQuCiAgICAgIF9pbXBhY3RzLm5hdGl2ZVR5cGVDaGVjay5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICB9CiAgfQoKICBXb3JsZEltcGFjdCB0cmFuc2Zvcm1Db2RlZ2VuSW1wYWN0KENvZGVnZW5JbXBhY3QgaW1wYWN0KSB7CiAgICBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0IHRyYW5zZm9ybWVkID0gbmV3IFRyYW5zZm9ybWVkV29ybGRJbXBhY3QoaW1wYWN0KTsKCiAgICBmb3IgKFR5cGVVc2UgdHlwZVVzZSBpbiBpbXBhY3QudHlwZVVzZXMpIHsKICAgICAgRGFydFR5cGUgdHlwZSA9IHR5cGVVc2UudHlwZTsKICAgICAgaWYgKHR5cGVVc2Uua2luZCA9PSBUeXBlVXNlS2luZC5JU19DSEVDSykgewogICAgICAgIG9uSXNDaGVja0ZvckNvZGVnZW4odHlwZSwgdHJhbnNmb3JtZWQpOwogICAgICB9CiAgICB9CgogICAgZm9yIChDb25zdGFudFVzZSBjb25zdGFudFVzZSBpbiBpbXBhY3QuY29uc3RhbnRVc2VzKSB7CiAgICAgIHN3aXRjaCAoY29uc3RhbnRVc2UudmFsdWUua2luZCkgewogICAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuREVGRVJSRURfR0xPQkFMOgogICAgICAgICAgX2Nsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhCiAgICAgICAgICAgICAgLnJlZ2lzdGVyQ29uc3RhbnREZWZlcnJlZFVzZShjb25zdGFudFVzZS52YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKFBhaXI8RGFydFR5cGUsIERhcnRUeXBlPiBjaGVjawogICAgICAgIGluIGltcGFjdC50eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzKSB7CiAgICAgIF9ydGlDaGVja3NCdWlsZGVyLnJlZ2lzdGVyVHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrKAogICAgICAgICAgY2hlY2suYSwgY2hlY2suYik7CiAgICB9CgogICAgZm9yIChTdGF0aWNVc2Ugc3RhdGljVXNlIGluIGltcGFjdC5zdGF0aWNVc2VzKSB7CiAgICAgIHN3aXRjaCAoc3RhdGljVXNlLmtpbmQpIHsKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0FMTF9NRVRIT0Q6CiAgICAgICAgICBGdW5jdGlvbkVudGl0eSBjYWxsTWV0aG9kID0gc3RhdGljVXNlLmVsZW1lbnQ7CiAgICAgICAgICBpZiAoX3J0aU5lZWQubWV0aG9kTmVlZHNTaWduYXR1cmUoY2FsbE1ldGhvZCkpIHsKICAgICAgICAgICAgX2ltcGFjdHMuY29tcHV0ZVNpZ25hdHVyZQogICAgICAgICAgICAgICAgLnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfVEVBUl9PRkY6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX0dFVDoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfU0VUOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9JTlZPS0U6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNUQVRJQ19JTlZPS0U6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX0ZJRUxEX1NFVDoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfU0VUVEVSX1NFVDoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX1NFVDoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfVEVBUl9PRkY6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX0dFVDoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0dFVDoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRklFTERfSU5JVDoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRklFTERfQ09OU1RBTlRfSU5JVDoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9JTlZPS0U6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkRJUkVDVF9JTlZPS0U6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLklOTElOSU5HOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DTE9TVVJFOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DTE9TVVJFX0NBTEw6CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIGZvciAoU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzIGluIGltcGFjdC5zcGVjaWFsaXplZEdldEludGVyY2VwdG9ycykgewogICAgICBfb25lU2hvdEludGVyY2VwdG9yRGF0YS5yZWdpc3RlclNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3IoCiAgICAgICAgICBjbGFzc2VzLCBfbmFtZXIpOwogICAgfQoKICAgIGlmIChpbXBhY3QudXNlc0ludGVyY2VwdG9yKSB7CiAgICAgIGlmIChfbmF0aXZlQ29kZWdlbkVucXVldWVyLmhhc0luc3RhbnRpYXRlZE5hdGl2ZUNsYXNzZXMpIHsKICAgICAgICBfaW1wYWN0cy5pbnRlcmNlcHRvclVzZQogICAgICAgICAgICAucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZXNlIHdvcmthcm91bmRzLgogICAgICAgIF9iYWNrZW5kVXNhZ2UubmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZyA9IHRydWU7CiAgICAgICAgX2JhY2tlbmRVc2FnZS5uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSA9IHRydWU7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKEFzeW5jTWFya2VyIGFzeW5jTWFya2VyIGluIGltcGFjdC5hc3luY01hcmtlcnMpIHsKICAgICAgc3dpdGNoIChhc3luY01hcmtlcikgewogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQVNZTkM6CiAgICAgICAgICBfaW1wYWN0cy5hc3luY0JvZHkucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBBc3luY01hcmtlci5TWU5DX1NUQVI6CiAgICAgICAgICBfaW1wYWN0cy5zeW5jU3RhckJvZHkKICAgICAgICAgICAgICAucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBBc3luY01hcmtlci5BU1lOQ19TVEFSOgogICAgICAgICAgX2ltcGFjdHMuYXN5bmNTdGFyQm9keQogICAgICAgICAgICAgIC5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIGZvciAoR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbiBpbiBpbXBhY3QuZ2VuZXJpY0luc3RhbnRpYXRpb25zKSB7CiAgICAgIF9ydGlDaGVja3NCdWlsZGVyLnJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oaW5zdGFudGlhdGlvbik7CiAgICB9CgogICAgZm9yIChOYXRpdmVCZWhhdmlvciBiZWhhdmlvciBpbiBpbXBhY3QubmF0aXZlQmVoYXZpb3JzKSB7CiAgICAgIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIucmVnaXN0ZXJOYXRpdmVCZWhhdmlvcigKICAgICAgICAgIHRyYW5zZm9ybWVkLCBiZWhhdmlvciwgaW1wYWN0KTsKICAgIH0KCiAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uIGluIGltcGFjdC5uYXRpdmVNZXRob2RzKSB7CiAgICAgIF9uYXRpdmVFbWl0dGVyLm5hdGl2ZU1ldGhvZHMuYWRkKGZ1bmN0aW9uKTsKICAgIH0KCiAgICBmb3IgKFNlbGVjdG9yIHNlbGVjdG9yIGluIGltcGFjdC5vbmVTaG90SW50ZXJjZXB0b3JzKSB7CiAgICAgIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLnJlZ2lzdGVyT25lU2hvdEludGVyY2VwdG9yKAogICAgICAgICAgc2VsZWN0b3IsIF9uYW1lciwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgZWFnZXIgcmVnaXN0cmF0aW9uLgogICAgcmV0dXJuIHRyYW5zZm9ybWVkOwogIH0KfQqB/wBOTjwBLwFGARkiPDQ6OigjJCEsISIjJB9RHBgbHh0oIBUbHSgBPjAoISo8MkwxNioBHyAcFR0mIS4cIx4BDEgpMQEwPzkGATQZMz8RHTkRKjYRHC4RIy8RITIRJjMRKTURMDAnRDARIS4RKzYRKzgRKzgRKzYRKTYRIi4RIDERJzQRKzYRKjYRLjoRMTsRIzARCAYBHCE0JB4oLi8RIygRIh8+HCoeDBEoH0IcKgwRKh87HCoMESUoESdHJTJLMh5LPB5MM00kDj0MIREkKDZREQgGARUoBgEaElEsBgFDRi8mNQ8UTQgGAUMmNQ8UTQgGAUZPNxJMBgFJREhPG0MGATMsBgE6ICQsLVEsThkWNwwREQgGAUgfKjARKjARKS8RLDIRLDIRERIVLkYIBgE+OC8GAT85BgE4LjIgS0UIBgEYBAFRRjA/OQYBNygBUTEhOAgGIDIGUTAGIDIGBAIBISMwKCEgJCM2Fjg1JgEcGSAcFRgaFSMTJB4cAVAgHRtJATpQBkxENilRBgQBPU0BLyQyMAgGATsoMCY/ERERCAYBKDVAHQYBNSAoOTsmQwwRLC8vKSosLScrJicnMC81KiUkKREIBgFKQRwGASJBID85QT8IBgE7HSBPESQgQRElIUERCAYBT0UGAT41KgYBPDIGATw6KwYBNxgEAgE3cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9pbXBhY3RfdHJhbnNmb3JtZXIuZGFydD5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydL8uLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5pbnRlcmNlcHRvcl9kYXRhOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVyczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcKICAgIHNob3cgQ29tbW9uRWxlbWVudHMsIEtDb21tb25FbGVtZW50cywgS0VsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX3NldC5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICduYW1lci5kYXJ0JyBzaG93IE1vZHVsYXJOYW1lciwgc3VmZml4Rm9yR2V0SW50ZXJjZXB0b3I7CmltcG9ydCAnbmF0aXZlX2RhdGEuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBJbnRlcmNlcHRvckRhdGEgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSW50ZXJjZXB0b3JEYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEludGVyY2VwdG9yRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLAogICAgICBOYXRpdmVEYXRhIG5hdGl2ZURhdGEsCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9IEludGVyY2VwdG9yRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtJbnRlcmNlcHRvckRhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGFuIGludGVyY2VwdGVkIGNsYXNzLgogIGJvb2wgaXNJbnRlcmNlcHRlZENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICBib29sIGlzSW50ZXJjZXB0ZWRNZXRob2QoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwogIGJvb2wgZmllbGRIYXNJbnRlcmNlcHRlZEdldHRlcihGaWVsZEVudGl0eSBlbGVtZW50KTsKICBib29sIGZpZWxkSGFzSW50ZXJjZXB0ZWRTZXR0ZXIoRmllbGRFbnRpdHkgZWxlbWVudCk7CiAgYm9vbCBpc0ludGVyY2VwdGVkTmFtZShTdHJpbmcgbmFtZSk7CiAgYm9vbCBpc0ludGVyY2VwdGVkU2VsZWN0b3IoU2VsZWN0b3Igc2VsZWN0b3IpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWZmIFtzZWxlY3Rvcl0gbWF0Y2hlcyBhbiBlbGVtZW50IGRlZmluZWQgaW4gYSBjbGFzcyBtaXhlZAogIC8vLyBpbnRvIGFuIGludGVyY2VwdGVkIGNsYXNzLgogIC8vLwogIC8vLyBUaGVzZSBzZWxlY3RvcnMgYXJlIG5vdCBlbGlnaWJsZSBmb3IgdGhlICdkdW1teSBleHBsaWNpdCByZWNlaXZlcicKICAvLy8gb3B0aW1pemF0aW9uLgogIGJvb2wgaXNJbnRlcmNlcHRlZE1peGluU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2ssIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBTZXQgb2YgY2xhc3NlcyB3aG9zZSBtZXRob2RzIGFyZSBpbnRlcmNlcHRlZC4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGludGVyY2VwdGVkQ2xhc3NlczsKICBib29sIGlzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYSBzZXQgb2YgaW50ZXJjZXB0b3IgY2xhc3NlcyB0aGF0IGNvbnRhaW4gYSBtZW1iZXIgbmFtZWQgW25hbWVdCiAgLy8vCiAgLy8vIFJldHVybnMgYW4gZW1wdHkgc2V0IGlmIHRoZXJlIGlzIG5vIGNsYXNzLiBEbyBub3QgbW9kaWZ5IHRoZSByZXR1cm5lZCBzZXQuCiAgU2V0PENsYXNzRW50aXR5PiBnZXRJbnRlcmNlcHRlZENsYXNzZXNPbigKICAgICAgU3RyaW5nIG5hbWUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBXaGV0aGVyIHRoZSBjb21waWxlciBjYW4gdXNlIHRoZSBuYXRpdmUgYGluc3RhbmNlb2ZgIGNoZWNrIHRvIHRlc3QgZm9yCiAgLy8vIGluc3RhbmNlcyBvZiBbdHlwZV0uIFRoaXMgaXMgdHJ1ZSBmb3IgdHlwZXMgdGhhdCBhcmUgbm90IHVzZWQgYXMgbWl4aW5zIG9yCiAgLy8vIGludGVyZmFjZXMuCiAgYm9vbCBtYXlHZW5lcmF0ZUluc3RhbmNlb2ZDaGVjayhEYXJ0VHlwZSB0eXBlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwp9CgphYnN0cmFjdCBjbGFzcyBJbnRlcmNlcHRvckRhdGFCdWlsZGVyIHsKICB2b2lkIGFkZEludGVyY2VwdG9ycyhDbGFzc0VudGl0eSBjbHMpOwogIHZvaWQgYWRkSW50ZXJjZXB0b3JzRm9yTmF0aXZlQ2xhc3NNZW1iZXJzKENsYXNzRW50aXR5IGNscyk7CiAgSW50ZXJjZXB0b3JEYXRhIGNsb3NlKCk7Cn0KCmNsYXNzIEludGVyY2VwdG9yRGF0YUltcGwgaW1wbGVtZW50cyBJbnRlcmNlcHRvckRhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSW50ZXJjZXB0b3JEYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2ludGVyY2VwdG9yLWRhdGEnOwoKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwoKICAvLy8gVGhlIG1lbWJlcnMgb2YgaW5zdGFudGlhdGVkIGludGVyY2VwdG9yIGNsYXNzZXM6IG1hcHMgYSBtZW1iZXIgbmFtZSB0byB0aGUKICAvLy8gbGlzdCBvZiBtZW1iZXJzIHRoYXQgaGF2ZSB0aGF0IG5hbWUuIFRoaXMgbWFwIGlzIHVzZWQgYnkgdGhlIGNvZGVnZW4gdG8KICAvLy8ga25vdyB3aGV0aGVyIGEgc2VuZCBtdXN0IGJlIGludGVyY2VwdGVkIG9yIG5vdC4KICBmaW5hbCBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyRW50aXR5Pj4gaW50ZXJjZXB0ZWRNZW1iZXJzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkQ2xhc3NlczsKCiAgLy8vIFNldCBvZiBjbGFzc2VzIHVzZWQgYXMgbWl4aW5zIG9uIGludGVyY2VwdGVkIChuYXRpdmUgYW5kIHByaW1pdGl2ZSkKICAvLy8gY2xhc3Nlcy4gTWV0aG9kcyBvbiB0aGVzZSBjbGFzc2VzIG1pZ2h0IGFsc28gYmUgbWl4ZWQgaW4gdG8gcmVndWxhciBEYXJ0CiAgLy8vICh1bmludGVyY2VwdGVkKSBjbGFzc2VzLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3NlczsKCiAgLy8vIFRoZSBtZW1iZXJzIG9mIG1peGluIGNsYXNzZXMgdGhhdCBhcmUgbWl4ZWQgaW50byBhbiBpbnN0YW50aWF0ZWQKICAvLy8gaW50ZXJjZXB0b3IgY2xhc3MuICBUaGlzIGlzIGEgY2FjaGVkIHN1YnNldCBvZiBbX2ludGVyY2VwdGVkRWxlbWVudHNdLgogIC8vLwogIC8vLyBNaXhpbiBtZXRob2RzIGFyZSBub3Qgc3BlY2lhbGl6ZWQgZm9yIHRoZSBjbGFzcyB0aGV5IGFyZSBtaXhlZCBpbnRvLgogIC8vLyBNZXRob2RzIG1peGVkIGludG8gaW50ZXJjZXB0ZWQgY2xhc3NlcyB0aHVzIGFsd2F5cyBtYWtlIHVzZSBvZiB0aGUKICAvLy8gZXhwbGljaXQgcmVjZWl2ZXIgYXJndW1lbnQsIGV2ZW4gd2hlbiBtaXhlZCBpbnRvIG5vbi1pbnRlcmNlcHRvciBjbGFzc2VzLgogIC8vLwogIC8vLyBUaGVzZSBtZW1iZXJzIG11c3QgYmUgaW52b2tlZCB3aXRoIGEgY29ycmVjdCBleHBsaWNpdCByZWNlaXZlciBldmVuIHdoZW4KICAvLy8gdGhlIHJlY2VpdmVyIGlzIG5vdCBhbiBpbnRlcmNlcHRlZCBjbGFzcy4KICBmaW5hbCBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyRW50aXR5Pj4gX2ludGVyY2VwdGVkTWl4aW5FbGVtZW50cyA9CiAgICAgIG5ldyBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyRW50aXR5Pj4oKTsKCiAgZmluYWwgTWFwPFN0cmluZywgU2V0PENsYXNzRW50aXR5Pj4gX2ludGVyY2VwdGVkQ2xhc3Nlc0NhY2hlID0KICAgICAgbmV3IE1hcDxTdHJpbmcsIFNldDxDbGFzc0VudGl0eT4+KCk7CgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX25vQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIEludGVyY2VwdG9yRGF0YUltcGwoCiAgICAgIHRoaXMuX25hdGl2ZURhdGEsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLmludGVyY2VwdGVkTWVtYmVycywKICAgICAgdGhpcy5pbnRlcmNlcHRlZENsYXNzZXMsCiAgICAgIHRoaXMuY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3Nlcyk7CgogIGZhY3RvcnkgSW50ZXJjZXB0b3JEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBOYXRpdmVEYXRhIG5hdGl2ZURhdGEsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGludCBpbnRlcmNlcHRlZE1lbWJlcnNDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyRW50aXR5Pj4gaW50ZXJjZXB0ZWRNZW1iZXJzID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGludGVyY2VwdGVkTWVtYmVyc0NvdW50OyBpKyspIHsKICAgICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICBTZXQ8TWVtYmVyRW50aXR5PiBtZW1iZXJzID0gc291cmNlLnJlYWRNZW1iZXJzKCkudG9TZXQoKTsKICAgICAgaW50ZXJjZXB0ZWRNZW1iZXJzW25hbWVdID0gbWVtYmVyczsKICAgIH0KICAgIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0ZWRDbGFzc2VzID0gc291cmNlLnJlYWRDbGFzc2VzKCkudG9TZXQoKTsKICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3NlcyA9CiAgICAgICAgc291cmNlLnJlYWRDbGFzc2VzKCkudG9TZXQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSW50ZXJjZXB0b3JEYXRhSW1wbCgKICAgICAgICBuYXRpdmVEYXRhLAogICAgICAgIGNvbW1vbkVsZW1lbnRzLAogICAgICAgIGludGVyY2VwdGVkTWVtYmVycywKICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMsCiAgICAgICAgY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlSW50KGludGVyY2VwdGVkTWVtYmVycy5sZW5ndGgpOwogICAgaW50ZXJjZXB0ZWRNZW1iZXJzLmZvckVhY2goKFN0cmluZyBuYW1lLCBTZXQ8TWVtYmVyRW50aXR5PiBtZW1iZXJzKSB7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcobmFtZSk7CiAgICAgIHNpbmsud3JpdGVNZW1iZXJzKG1lbWJlcnMpOwogICAgfSk7CiAgICBzaW5rLndyaXRlQ2xhc3NlcyhpbnRlcmNlcHRlZENsYXNzZXMpOwogICAgc2luay53cml0ZUNsYXNzZXMoY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyY2VwdGVkTWV0aG9kKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoIWVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuIGZhbHNlOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhpcyBoYWNrLgogICAgaWYgKGVsZW1lbnQgaXMgQ29uc3RydWN0b3JCb2R5RW50aXR5KSB7CiAgICAgIHJldHVybiBfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShlbGVtZW50LmVuY2xvc2luZ0NsYXNzKTsKICAgIH0KICAgIHJldHVybiBpbnRlcmNlcHRlZE1lbWJlcnNbZWxlbWVudC5uYW1lXSAhPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBmaWVsZEhhc0ludGVyY2VwdGVkR2V0dGVyKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBpbnRlcmNlcHRlZE1lbWJlcnNbZWxlbWVudC5uYW1lXSAhPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBmaWVsZEhhc0ludGVyY2VwdGVkU2V0dGVyKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBpbnRlcmNlcHRlZE1lbWJlcnNbZWxlbWVudC5uYW1lXSAhPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyY2VwdGVkTmFtZShTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIGludGVyY2VwdGVkTWVtYmVyc1tuYW1lXSAhPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyY2VwdGVkU2VsZWN0b3IoU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIHJldHVybiBpbnRlcmNlcHRlZE1lbWJlcnNbc2VsZWN0b3IubmFtZV0gIT0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmNlcHRlZE1peGluU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2ssIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgU2V0PE1lbWJlckVudGl0eT4gZWxlbWVudHMgPQogICAgICAgIF9pbnRlcmNlcHRlZE1peGluRWxlbWVudHMucHV0SWZBYnNlbnQoc2VsZWN0b3IubmFtZSwgKCkgewogICAgICBTZXQ8TWVtYmVyRW50aXR5PiBlbGVtZW50cyA9IGludGVyY2VwdGVkTWVtYmVyc1tzZWxlY3Rvci5uYW1lXTsKICAgICAgaWYgKGVsZW1lbnRzID09IG51bGwpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gZWxlbWVudHMKICAgICAgICAgIC53aGVyZSgoZWxlbWVudCkgPT4gY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3NlcwogICAgICAgICAgICAgIC5jb250YWlucyhlbGVtZW50LmVuY2xvc2luZ0NsYXNzKSkKICAgICAgICAgIC50b1NldCgpOwogICAgfSk7CgogICAgaWYgKGVsZW1lbnRzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChlbGVtZW50cy5pc0VtcHR5KSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZWxlbWVudHMuYW55KChlbGVtZW50KSB7CiAgICAgIHJldHVybiBzZWxlY3Rvci5hcHBsaWVzKGVsZW1lbnQpICYmCiAgICAgICAgICAobWFzayA9PSBudWxsIHx8CiAgICAgICAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAgICAgICAuaXNUYXJnZXRpbmdNZW1iZXIobWFzaywgZWxlbWVudCwgc2VsZWN0b3IubWVtYmVyTmFtZSkKICAgICAgICAgICAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlKTsKICAgIH0pOwogIH0KCiAgLy8vIFRydWUgaWYgdGhlIGdpdmVuIGNsYXNzIGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgZm9yIHR5cGUgaW5mZXJlbmNlCiAgLy8vIGFuZCBuZXZlciBleGlzdHMgYXQgcnVudGltZS4KICBib29sIF9pc0NvbXBpbGVUaW1lT25seUNsYXNzKENsYXNzRW50aXR5IGNsYXNzXykgewogICAgcmV0dXJuIGNsYXNzXyA9PSBfY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzIHx8CiAgICAgICAgY2xhc3NfID09IF9jb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzIHx8CiAgICAgICAgY2xhc3NfID09IF9jb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzIHx8CiAgICAgICAgY2xhc3NfID09IF9jb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcyB8fAogICAgICAgIGNsYXNzXyA9PSBfY29tbW9uRWxlbWVudHMuanNVbm1vZGlmaWFibGVBcnJheUNsYXNzIHx8CiAgICAgICAgY2xhc3NfID09IF9jb21tb25FbGVtZW50cy5qc011dGFibGVBcnJheUNsYXNzIHx8CiAgICAgICAgY2xhc3NfID09IF9jb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzOwogIH0KCiAgLy8vIFJldHVybnMgYSBzZXQgb2YgaW50ZXJjZXB0b3IgY2xhc3NlcyB0aGF0IGNvbnRhaW4gYSBtZW1iZXIgbmFtZWQgW25hbWVdCiAgLy8vCiAgLy8vIFJldHVybnMgYW4gZW1wdHkgc2V0IGlmIHRoZXJlIGlzIG5vIGNsYXNzLiBEbyBub3QgbW9kaWZ5IHRoZSByZXR1cm5lZCBzZXQuCiAgQG92ZXJyaWRlCiAgU2V0PENsYXNzRW50aXR5PiBnZXRJbnRlcmNlcHRlZENsYXNzZXNPbigKICAgICAgU3RyaW5nIG5hbWUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgU2V0PE1lbWJlckVudGl0eT4gaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHRlZE1lbWJlcnNbbmFtZV07CiAgICBpZiAoaW50ZXJjZXB0ZWQgPT0gbnVsbCkgcmV0dXJuIF9ub0NsYXNzZXM7CiAgICByZXR1cm4gX2ludGVyY2VwdGVkQ2xhc3Nlc0NhY2hlLnB1dElmQWJzZW50KG5hbWUsICgpIHsKICAgICAgLy8gUG9wdWxhdGUgdGhlIGNhY2hlIGJ5IHJ1bm5pbmcgdGhyb3VnaCBhbGwgdGhlIGVsZW1lbnRzIGFuZAogICAgICAvLyBkZXRlcm1pbmUgaWYgdGhlIGdpdmVuIHNlbGVjdG9yIGFwcGxpZXMgdG8gdGhlbS4KICAgICAgU2V0PENsYXNzRW50aXR5PiByZXN1bHQgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgICBmb3IgKE1lbWJlckVudGl0eSBlbGVtZW50IGluIGludGVyY2VwdGVkKSB7CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgICBpZiAoX2lzQ29tcGlsZVRpbWVPbmx5Q2xhc3MoY2xhc3NFbGVtZW50KSkgY29udGludWU7CiAgICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNsYXNzRWxlbWVudCkgfHwKICAgICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKGNsYXNzRWxlbWVudCkpIHsKICAgICAgICAgIHJlc3VsdC5hZGQoY2xhc3NFbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgaWYgKGNsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoY2xhc3NFbGVtZW50KSkgewogICAgICAgICAgU2V0PENsYXNzRW50aXR5PiBuYXRpdmVTdWJjbGFzc2VzID0KICAgICAgICAgICAgICBuYXRpdmVTdWJjbGFzc2VzT2ZNaXhpbihjbGFzc0VsZW1lbnQsIGNsb3NlZFdvcmxkKTsKICAgICAgICAgIGlmIChuYXRpdmVTdWJjbGFzc2VzICE9IG51bGwpIHJlc3VsdC5hZGRBbGwobmF0aXZlU3ViY2xhc3Nlcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9KTsKICB9CgogIFNldDxDbGFzc0VudGl0eT4gbmF0aXZlU3ViY2xhc3Nlc09mTWl4aW4oCiAgICAgIENsYXNzRW50aXR5IG1peGluLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiB1c2VzID0gY2xvc2VkV29ybGQubWl4aW5Vc2VzT2YobWl4aW4pOwogICAgU2V0PENsYXNzRW50aXR5PiByZXN1bHQgPSBudWxsOwogICAgZm9yIChDbGFzc0VudGl0eSB1c2UgaW4gdXNlcykgewogICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5mb3JFYWNoU3RyaWN0U3ViY2xhc3NPZih1c2UsCiAgICAgICAgICAoQ2xhc3NFbnRpdHkgc3ViY2xhc3MpIHsKICAgICAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoc3ViY2xhc3MpKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICAgICAgICByZXN1bHQuYWRkKHN1YmNsYXNzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmNlcHRlZENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICBpZiAoaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChjbGFzc2VzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIGNsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoZWxlbWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgbWF5R2VuZXJhdGVJbnN0YW5jZW9mQ2hlY2soRGFydFR5cGUgdHlwZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBXZSBjYW4gdXNlIGFuIGluc3RhbmNlb2YgY2hlY2sgZm9yIHJhdyB0eXBlcyB0aGF0IGhhdmUgbm8gc3ViY2xhc3MgdGhhdAogICAgLy8gaXMgbWl4ZWQtaW4gb3IgaW4gYW4gaW1wbGVtZW50cyBjbGF1c2UuCgogICAgaWYgKCF0eXBlLnRyZWF0QXNSYXcpIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlLmlzRnV0dXJlT3IpIHJldHVybiBmYWxzZTsKICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICBDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CiAgICBpZiAoaXNJbnRlcmNlcHRlZENsYXNzKGNsYXNzRWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNPbmx5U3ViY2xhc3NlcyhjbGFzc0VsZW1lbnQpOwogIH0KfQoKY2xhc3MgSW50ZXJjZXB0b3JEYXRhQnVpbGRlckltcGwgaW1wbGVtZW50cyBJbnRlcmNlcHRvckRhdGFCdWlsZGVyIHsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgS0VsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIEtDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CgogIC8vLyBUaGUgbWVtYmVycyBvZiBpbnN0YW50aWF0ZWQgaW50ZXJjZXB0b3IgY2xhc3NlczogbWFwcyBhIG1lbWJlciBuYW1lIHRvIHRoZQogIC8vLyBsaXN0IG9mIG1lbWJlcnMgdGhhdCBoYXZlIHRoYXQgbmFtZS4gVGhpcyBtYXAgaXMgdXNlZCBieSB0aGUgY29kZWdlbiB0bwogIC8vLyBrbm93IHdoZXRoZXIgYSBzZW5kIG11c3QgYmUgaW50ZXJjZXB0ZWQgb3Igbm90LgogIGZpbmFsIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJFbnRpdHk+PiBfaW50ZXJjZXB0ZWRFbGVtZW50cyA9CiAgICAgIDxTdHJpbmcsIFNldDxNZW1iZXJFbnRpdHk+Pnt9OwoKICAvLy8gU2V0IG9mIGNsYXNzZXMgd2hvc2UgbWV0aG9kcyBhcmUgaW50ZXJjZXB0ZWQuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfaW50ZXJjZXB0ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgLy8vIFNldCBvZiBjbGFzc2VzIHVzZWQgYXMgbWl4aW5zIG9uIGludGVyY2VwdGVkIChuYXRpdmUgYW5kIHByaW1pdGl2ZSkKICAvLy8gY2xhc3Nlcy4gTWV0aG9kcyBvbiB0aGVzZSBjbGFzc2VzIG1pZ2h0IGFsc28gYmUgbWl4ZWQgaW4gdG8gcmVndWxhciBEYXJ0CiAgLy8vICh1bmludGVyY2VwdGVkKSBjbGFzc2VzLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX2NsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMgPQogICAgICBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBJbnRlcmNlcHRvckRhdGFCdWlsZGVySW1wbCgKICAgICAgdGhpcy5fbmF0aXZlRGF0YSwgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LCB0aGlzLl9jb21tb25FbGVtZW50cyk7CgogIEBvdmVycmlkZQogIEludGVyY2VwdG9yRGF0YSBjbG9zZSgpIHsKICAgIHJldHVybiBuZXcgSW50ZXJjZXB0b3JEYXRhSW1wbCgKICAgICAgICBfbmF0aXZlRGF0YSwKICAgICAgICBfY29tbW9uRWxlbWVudHMsCiAgICAgICAgX2ludGVyY2VwdGVkRWxlbWVudHMsCiAgICAgICAgX2ludGVyY2VwdGVkQ2xhc3NlcywKICAgICAgICBfY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEludGVyY2VwdG9yc0Zvck5hdGl2ZUNsYXNzTWVtYmVycyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzTWVtYmVyKGNscywKICAgICAgICAoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlmIChtZW1iZXIubmFtZSA9PSBJZGVudGlmaWVycy5jYWxsKSByZXR1cm47CiAgICAgIC8vIEFsbCBtZXRob2RzIG9uIFtPYmplY3RdIGFyZSBzaGFkb3dlZCBieSBbSW50ZXJjZXB0b3JdLgogICAgICBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgcmV0dXJuOwogICAgICBTZXQ8TWVtYmVyRW50aXR5PiBzZXQgPQogICAgICAgICAgX2ludGVyY2VwdGVkRWxlbWVudHNbbWVtYmVyLm5hbWVdID8/PSBuZXcgU2V0PE1lbWJlckVudGl0eT4oKTsKICAgICAgc2V0LmFkZChtZW1iZXIpOwogICAgfSk7CgogICAgLy8gV2FsayBzdXBlcmNsYXNzIGNoYWluIHRvIGZpbmQgbWl4aW5zLgogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTWl4aW4oY2xzLCAoQ2xhc3NFbnRpdHkgbWl4aW4pIHsKICAgICAgX2NsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMuYWRkKG1peGluKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRJbnRlcmNlcHRvcnMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBpZiAoX2ludGVyY2VwdGVkQ2xhc3Nlcy5hZGQoY2xzKSkgewogICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzc01lbWJlcihjbHMsCiAgICAgICAgICAoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgLy8gQWxsIG1ldGhvZHMgb24gW09iamVjdF0gYXJlIHNoYWRvd2VkIGJ5IFtJbnRlcmNlcHRvcl0uCiAgICAgICAgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpIHJldHVybjsKICAgICAgICBTZXQ8TWVtYmVyRW50aXR5PiBzZXQgPQogICAgICAgICAgICBfaW50ZXJjZXB0ZWRFbGVtZW50c1ttZW1iZXIubmFtZV0gPz89IG5ldyBTZXQ8TWVtYmVyRW50aXR5PigpOwogICAgICAgIHNldC5hZGQobWVtYmVyKTsKICAgICAgfSk7CiAgICB9CiAgICBfaW50ZXJjZXB0ZWRDbGFzc2VzLmFkZChfY29tbW9uRWxlbWVudHMuanNJbnRlcmNlcHRvckNsYXNzKTsKICB9Cn0KCmNsYXNzIE9uZVNob3RJbnRlcmNlcHRvckRhdGEgewogIGZpbmFsIEludGVyY2VwdG9yRGF0YSBfaW50ZXJjZXB0b3JEYXRhOwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBOYXRpdmVEYXRhIF9uYXRpdmVEYXRhOwoKICBPbmVTaG90SW50ZXJjZXB0b3JEYXRhKAogICAgICB0aGlzLl9pbnRlcmNlcHRvckRhdGEsIHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9uYXRpdmVEYXRhKTsKCiAgSXRlcmFibGU8T25lU2hvdEludGVyY2VwdG9yPiBnZXQgb25lU2hvdEludGVyY2VwdG9ycyB7CiAgICBMaXN0PE9uZVNob3RJbnRlcmNlcHRvcj4gaW50ZXJjZXB0b3JzID0gW107CiAgICBmb3IgKHZhciBtYXAgaW4gX29uZVNob3RJbnRlcmNlcHRvcnMudmFsdWVzKSB7CiAgICAgIGludGVyY2VwdG9ycy5hZGRBbGwobWFwLnZhbHVlcyk7CiAgICB9CiAgICByZXR1cm4gaW50ZXJjZXB0b3JzOwogIH0KCiAgTWFwPFNlbGVjdG9yLCBNYXA8U3RyaW5nLCBPbmVTaG90SW50ZXJjZXB0b3I+PiBfb25lU2hvdEludGVyY2VwdG9ycyA9IHt9OwoKICAvLy8gQSBzZXQgb2Ygc3BlY2lhbGl6ZWQgdmVyc2lvbnMgb2YgdGhlIFtnZXRJbnRlcmNlcHRvck1ldGhvZF0uCiAgLy8vCiAgLy8vIFNpbmNlIFtnZXRJbnRlcmNlcHRvck1ldGhvZF0gaXMgYSBob3QgbWV0aG9kIGF0IHJ1bnRpbWUsIHdlJ3JlIGFsd2F5cwogIC8vLyBzcGVjaWFsaXppbmcgaXQgYmFzZWQgb24gdGhlIGluY29taW5nIHR5cGUuIFRoZSBrZXlzIGluIHRoZSBtYXAgYXJlIHRoZQogIC8vLyBuYW1lcyBvZiB0aGVzZSBzcGVjaWFsaXplZCB2ZXJzaW9ucy4gTm90ZSB0aGF0IHRoZSBnZW5lcmljIHZlcnNpb24gdGhhdAogIC8vLyBjb250YWlucyBhbGwgcG9zc2libGUgdHlwZSBjaGVja3MgaXMgYWxzbyBzdG9yZWQgaW4gdGhpcyBtYXAuCiAgSXRlcmFibGU8U3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcj4gZ2V0IHNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzID0+CiAgICAgIF9zcGVjaWFsaXplZEdldEludGVyY2VwdG9ycy52YWx1ZXM7CgogIE1hcDxTdHJpbmcsIFNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3I+IF9zcGVjaWFsaXplZEdldEludGVyY2VwdG9ycyA9IHt9OwoKICBqc0FzdC5OYW1lIHJlZ2lzdGVyT25lU2hvdEludGVyY2VwdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgTW9kdWxhck5hbWVyIG5hbWVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHNlbGVjdG9yID0gc2VsZWN0b3IudG9Ob3JtYWxpemVkKCk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPQogICAgICAgIF9pbnRlcmNlcHRvckRhdGEuZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT24oc2VsZWN0b3IubmFtZSwgY2xvc2VkV29ybGQpOwogICAgU3RyaW5nIGtleSA9IHN1ZmZpeEZvckdldEludGVyY2VwdG9yKF9jb21tb25FbGVtZW50cywgX25hdGl2ZURhdGEsIGNsYXNzZXMpOwogICAgTWFwPFN0cmluZywgT25lU2hvdEludGVyY2VwdG9yPiBpbnRlcmNlcHRvcnMgPQogICAgICAgIF9vbmVTaG90SW50ZXJjZXB0b3JzW3NlbGVjdG9yXSA/Pz0ge307CiAgICBPbmVTaG90SW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IgPQogICAgICAgIGludGVyY2VwdG9yc1trZXldID8/PSBuZXcgT25lU2hvdEludGVyY2VwdG9yKGtleSwgc2VsZWN0b3IpOwogICAgaW50ZXJjZXB0b3IuY2xhc3Nlcy5hZGRBbGwoY2xhc3Nlcyk7CiAgICByZWdpc3RlclNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3IoY2xhc3NlcywgbmFtZXIpOwogICAgcmV0dXJuIG5hbWVyLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3Ioc2VsZWN0b3IsIGNsYXNzZXMpOwogIH0KCiAgdm9pZCByZWdpc3RlclNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3IoCiAgICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcywgTW9kdWxhck5hbWVyIG5hbWVyKSB7CiAgICBpZiAoY2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNJbnRlcmNlcHRvckNsYXNzKSkgewogICAgICAvLyBXZSBjYW4ndCB1c2UgYSBzcGVjaWFsaXplZCBbZ2V0SW50ZXJjZXB0b3JNZXRob2RdLCBzbyB3ZSBtYWtlCiAgICAgIC8vIHN1cmUgd2UgZW1pdCB0aGUgb25lIHdpdGggYWxsIGNoZWNrcy4KICAgICAgY2xhc3NlcyA9IF9pbnRlcmNlcHRvckRhdGEuaW50ZXJjZXB0ZWRDbGFzc2VzOwogICAgfQogICAgU3RyaW5nIGtleSA9IHN1ZmZpeEZvckdldEludGVyY2VwdG9yKF9jb21tb25FbGVtZW50cywgX25hdGl2ZURhdGEsIGNsYXNzZXMpOwogICAgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvciBpbnRlcmNlcHRvciA9CiAgICAgICAgX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzW2tleV0gPz89IG5ldyBTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKGtleSk7CiAgICBpbnRlcmNlcHRvci5jbGFzc2VzLmFkZEFsbChjbGFzc2VzKTsKICB9Cn0KCmNsYXNzIE9uZVNob3RJbnRlcmNlcHRvciB7CiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgZmluYWwgU3RyaW5nIGtleTsKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSB7fTsKCiAgT25lU2hvdEludGVyY2VwdG9yKHRoaXMua2V5LCB0aGlzLnNlbGVjdG9yKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ09uZVNob3RJbnRlcmNlcHRvcihzZWxlY3Rvcj0kc2VsZWN0b3Isa2V5PSRrZXksY2xhc3Nlcz0kY2xhc3NlcyknOwp9CgpjbGFzcyBTcGVjaWFsaXplZEdldEludGVyY2VwdG9yIHsKICBmaW5hbCBTdHJpbmcga2V5OwogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IHt9OwoKICBTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKHRoaXMua2V5KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3Ioa2V5PSRrZXksY2xhc3Nlcz0kY2xhc3NlcyknOwp9CoG0AE5OPAElATAhPyQhMSEuJSQqQBsBIT0uGR1PATMnATcwATI3NycxAVAhBkkUI0gBNDA5AU4GUSwuAU1REkwCASgpPhsCATdJHTABJSgBUU42OwEMLQFKTx89AUdNBktJUAZPMEMsAUErAT4BFxgcHx8wATJRFzQ8OClAKgZIOiYVJBQYHBwtBAEMKBUuSh4iCCs7EwQBDDMxLSxKBjUEAQw4NQQBDDg1BAEMKC0EAQwyNgQBDCNJIUJGKRZBMRQIASgoJCobLkknCAQBSyM1OzMzNz45OgQBTgZRDCwvPjA7RDo4Mjs9QTkkCkkuQkkKCBUIBAEsNUEkJD4jPT8gCicKBhMEAQwxJ0M7SxIEAQw7PAEMTU8vASgnKDY4RwQCAUUlMSkBUU42PiUBNEcBSk8fPx4BHkkBDBwkFRkeHS4EAQw/MDEzQDYeSRcIAS1ANggEAQwqKDIzQjggSxkKBkEEAgEfKiggARpGATkwMycGGQQBTAFDBkxOTkRIKgFLASlJKB9OUTMvJUUpNz8EASo2QEcvNQZRLFEpBAIBGxsUJwEvAQwXSgIBIhQnAScBDE8CATVwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL2pzX2VtaXR0ZXIuZGFydIKJLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyOwoKZXhwb3J0ICdjbGFzc19zdHViX2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JzsKZXhwb3J0ICdpbnN0YW50aWF0aW9uX3N0dWJfZ2VuZXJhdG9yLmRhcnQnOwpleHBvcnQgJ2ludGVyY2VwdG9yX3N0dWJfZ2VuZXJhdG9yLmRhcnQnOwpleHBvcnQgJ21haW5fY2FsbF9zdHViX2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICdtZXRhZGF0YV9jb2xsZWN0b3IuZGFydCc7CmV4cG9ydCAnbmF0aXZlX2VtaXR0ZXIuZGFydCc7CmV4cG9ydCAnbmF0aXZlX2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICdwYXJhbWV0ZXJfc3R1Yl9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAncnVudGltZV90eXBlX2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICd0eXBlX3Rlc3RfcmVnaXN0cnkuZGFydCc7ChMATk48ARwBJCEsKigiHiAoJiIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvanNfZW1pdHRlci5kYXJ0MXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL25hdGl2ZS9lbnF1ZXVlLmRhcnSsji8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzLCBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JyBzaG93IE5hdGl2ZURhdGE7CmltcG9ydCAnLi4vanNfZW1pdHRlci9qc19lbWl0dGVyLmRhcnQnIHNob3cgQ29kZUVtaXR0ZXJUYXNrLCBOYXRpdmVFbWl0dGVyOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgVHlwZVVzZTsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0QnVpbGRlciwgV29ybGRJbXBhY3RCdWlsZGVySW1wbDsKaW1wb3J0ICdiZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICdyZXNvbHZlci5kYXJ0JyBzaG93IE5hdGl2ZUNsYXNzRmluZGVyOwoKLy8vIFRoaXMgY291bGQgYmUgYW4gYWJzdHJhY3QgY2xhc3MgYnV0IHdlIHVzZSBpdCBhcyBhIHN0dWIgZm9yIHRoZQovLy8gZGFydF9iYWNrZW5kLgpjbGFzcyBOYXRpdmVFbnF1ZXVlciB7CiAgLy8vIENhbGxlZCB3aGVuIGEgW3R5cGVdIGhhcyBiZWVuIGluc3RhbnRpYXRlZCBuYXRpdmVseS4KICB2b2lkIG9uSW5zdGFudGlhdGVkVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUpIHt9CgogIC8vLyBJbml0aWFsIGVudHJ5IHBvaW50IHRvIG5hdGl2ZSBlbnF1ZXVlci4KICBXb3JsZEltcGFjdCBwcm9jZXNzTmF0aXZlQ2xhc3NlcyhJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgPT4KICAgICAgY29uc3QgV29ybGRJbXBhY3QoKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGUgW25hdGl2ZUJlaGF2aW9yXS4gQWRkcyB0aGUgbGl2ZW5lc3Mgb2YgaXRzIGluc3RhbnRpYXRlZAogIC8vLyB0eXBlcyB0byB0aGUgd29ybGQuCiAgdm9pZCByZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKAogICAgICBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlciwgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IsIGNhdXNlKSB7fQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIG5hdGl2ZSBjbGFzc2VzIGFyZSBiZWluZyB1c2VkLgogIGJvb2wgZ2V0IGhhc0luc3RhbnRpYXRlZE5hdGl2ZUNsYXNzZXMgPT4gZmFsc2U7CgogIC8vLyBFbWl0cyBhIHN1bW1hcnkgaW5mb3JtYXRpb24gdXNpbmcgdGhlIFtsb2ddIGZ1bmN0aW9uLgogIHZvaWQgbG9nU3VtbWFyeSh2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkpIHt9Cn0KCmFic3RyYWN0IGNsYXNzIE5hdGl2ZUVucXVldWVyQmFzZSBpbXBsZW1lbnRzIE5hdGl2ZUVucXVldWVyIHsKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9yZWdpc3RlcmVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfdW51c2VkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGhhc0luc3RhbnRpYXRlZE5hdGl2ZUNsYXNzZXMgPT4gIV9yZWdpc3RlcmVkQ2xhc3Nlcy5pc0VtcHR5OwoKICAvLy8gTG9nIG1lc3NhZ2UgcmVwb3J0ZWQgaWYgYWxsIG5hdGl2ZSB0eXBlcyBhcmUgdXNlZC4KICBTdHJpbmcgX2FsbFVzZWRNZXNzYWdlOwoKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgRGFydFR5cGVzIF9kYXJ0VHlwZXM7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwoKICAvLy8gU3ViY2xhc3NlcyBvZiBbTmF0aXZlRW5xdWV1ZXJCYXNlXSBhcmUgY29uc3RydWN0ZWQgYnkgdGhlIGJhY2tlbmQuCiAgTmF0aXZlRW5xdWV1ZXJCYXNlKHRoaXMuX29wdGlvbnMsIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgdGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX2RhcnRUeXBlcyk7CgogIGJvb2wgZ2V0IGVuYWJsZUxpdmVUeXBlQW5hbHlzaXMgPT4gX29wdGlvbnMuZW5hYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBvbkluc3RhbnRpYXRlZFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICBpZiAoX3VudXNlZENsYXNzZXMucmVtb3ZlKHR5cGUuZWxlbWVudCkpIHsKICAgICAgX3JlZ2lzdGVyZWRDbGFzc2VzLmFkZCh0eXBlLmVsZW1lbnQpOwogICAgfQogIH0KCiAgLy8vIFJlZ2lzdGVyIFtjbGFzc2VzXSBhcyBuYXRpdmVseSBpbnN0YW50aWF0ZWQgaW4gW2ltcGFjdEJ1aWxkZXJdLgogIHZvaWQgX3JlZ2lzdGVyVHlwZVVzZXMoCiAgICAgIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyLCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMsIGNhdXNlKSB7CiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBjbGFzc2VzKSB7CiAgICAgIGlmICghX3VudXNlZENsYXNzZXMuY29udGFpbnMoY2xzKSkgewogICAgICAgIC8vIE5vIG5lZWQgdG8gYWRkIFtjbGFzc0VsZW1lbnRdIHRvIFtpbXBhY3RCdWlsZGVyXTogaXQgaGFzIGFscmVhZHkgYmVlbgogICAgICAgIC8vIGluc3RhbnRpYXRlZCBhbmQgd2UgZG9uJ3QgdHJhY2sgb3JpZ2lucyBvZiBuYXRpdmUgaW5zdGFudGlhdGlvbnMKICAgICAgICAvLyBwcmVjaXNlbHkuCiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgICBuZXcgVHlwZVVzZS5uYXRpdmVJbnN0YW50aWF0aW9uKF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShjbHMpKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTmF0aXZlQmVoYXZpb3IoCiAgICAgIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyLCBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciwgY2F1c2UpIHsKICAgIF9wcm9jZXNzTmF0aXZlQmVoYXZpb3IoaW1wYWN0QnVpbGRlciwgbmF0aXZlQmVoYXZpb3IsIGNhdXNlKTsKICB9CgogIHZvaWQgX3Byb2Nlc3NOYXRpdmVCZWhhdmlvcigKICAgICAgV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yLCBjYXVzZSkgewogICAgdm9pZCByZWdpc3Rlckluc3RhbnRpYXRpb24oSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLm5hdGl2ZUluc3RhbnRpYXRpb24odHlwZSkpOwogICAgfQoKICAgIGludCB1bnVzZWRCZWZvcmUgPSBfdW51c2VkQ2xhc3Nlcy5sZW5ndGg7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IG1hdGNoaW5nQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICBmb3IgKHZhciB0eXBlIGluIGJlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkKSB7CiAgICAgIGlmICh0eXBlIGlzIFNwZWNpYWxUeXBlKSB7CiAgICAgICAgaWYgKHR5cGUgPT0gU3BlY2lhbFR5cGUuSnNPYmplY3QpIHsKICAgICAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSk7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICBpZiAodHlwZSA9PSBfY29tbW9uRWxlbWVudHMubnVtVHlwZSkgewogICAgICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5kb3VibGVUeXBlKTsKICAgICAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuaW50VHlwZSk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IF9jb21tb25FbGVtZW50cy5pbnRUeXBlIHx8CiAgICAgICAgICAgIHR5cGUgPT0gX2NvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGUgfHwKICAgICAgICAgICAgdHlwZSA9PSBfY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZSB8fAogICAgICAgICAgICB0eXBlID09IF9jb21tb25FbGVtZW50cy5udWxsVHlwZSB8fAogICAgICAgICAgICB0eXBlID09IF9jb21tb25FbGVtZW50cy5ib29sVHlwZSB8fAogICAgICAgICAgICBfZGFydFR5cGVzLmlzU3VidHlwZSh0eXBlLAogICAgICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpKSkgewogICAgICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKHR5cGUpOwogICAgICAgIH0KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHNwZWMgc3RyaW5nIHByZWNpc2lvbiB0byBoYW5kbGUgdHlwZQogICAgICAgIC8vIGFyZ3VtZW50cyBhbmQgaW1wbGVtZW50cyByZWxhdGlvbnMgdGhhdCBwcmVzZXJ2ZSBnZW5lcmljcy4gQ3VycmVudGx5CiAgICAgICAgLy8gd2UgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gYExpc3RgLCBgTGlzdDxkeW5hbWljPmAsIGFuZAogICAgICAgIC8vIGBMaXN0PGludD5gIGFuZCB0YWtlIGFsbCB0byBtZWFuIGBMaXN0PEU+YDsgaW4gZWZmZWN0IG5vdCBpbmNsdWRpbmcKICAgICAgICAvLyBhbnkgbmF0aXZlIHN1YmNsYXNzZXMgb2YgZ2VuZXJpYyBjbGFzc2VzLgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcixzcmEpOiBGaW5kIGFuZCByZXBsYWNlIHVzZXMgb2YgYExpc3RgIHdpdGggdGhlCiAgICAgICAgLy8gYWN0dWFsIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgc3VjaCBhcyBgSlNBcnJheWAgZXQgYWwuCiAgICAgICAgbWF0Y2hpbmdDbGFzc2VzCiAgICAgICAgICAgIC5hZGRBbGwoX2ZpbmRVbnVzZWRDbGFzc2VzTWF0Y2hpbmcoKENsYXNzRW50aXR5IG5hdGl2ZUNsYXNzKSB7CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIG5hdGl2ZVR5cGUgPQogICAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShuYXRpdmVDbGFzcyk7CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIHNwZWNUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKHR5cGUuZWxlbWVudCk7CiAgICAgICAgICByZXR1cm4gX2RhcnRUeXBlcy5pc1N1YnR5cGUobmF0aXZlVHlwZSwgc3BlY1R5cGUpOwogICAgICAgIH0pKTsKICAgICAgfSBlbHNlIGlmICh0eXBlLmlzRHluYW1pYykgewogICAgICAgIG1hdGNoaW5nQ2xhc3Nlcy5hZGRBbGwoX3VudXNlZENsYXNzZXMpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydCh0eXBlIGlzIFZvaWRUeXBlLCAnJHR5cGUgd2FzICR7dHlwZS5ydW50aW1lVHlwZX0nKTsKICAgICAgfQogICAgfQogICAgaWYgKG1hdGNoaW5nQ2xhc3Nlcy5pc05vdEVtcHR5ICYmIF9yZWdpc3RlcmVkQ2xhc3Nlcy5pc0VtcHR5KSB7CiAgICAgIG1hdGNoaW5nQ2xhc3Nlcy5hZGRBbGwoX29uRmlyc3ROYXRpdmVDbGFzcyhpbXBhY3RCdWlsZGVyKSk7CiAgICB9CiAgICBfcmVnaXN0ZXJUeXBlVXNlcyhpbXBhY3RCdWlsZGVyLCBtYXRjaGluZ0NsYXNzZXMsIGNhdXNlKTsKCiAgICAvLyBHaXZlIGFuIGluZm8gc28gdGhhdCBsaWJyYXJ5IGRldmVsb3BlcnMgY2FuIGNvbXBpbGUgd2l0aCAtdiB0byBmaW5kIHdoeQogICAgLy8gYWxsIHRoZSBuYXRpdmUgY2xhc3NlcyBhcmUgaW5jbHVkZWQuCiAgICBpZiAodW51c2VkQmVmb3JlID4gMCAmJiB1bnVzZWRCZWZvcmUgPT0gbWF0Y2hpbmdDbGFzc2VzLmxlbmd0aCkgewogICAgICBfYWxsVXNlZE1lc3NhZ2UgPz89ICdBbGwgbmF0aXZlIHR5cGVzIG1hcmtlZCBhcyB1c2VkIGR1ZSB0byAkY2F1c2UuJzsKICAgIH0KICB9CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBfZmluZFVudXNlZENsYXNzZXNNYXRjaGluZygKICAgICAgYm9vbCBwcmVkaWNhdGUoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50KSkgewogICAgcmV0dXJuIF91bnVzZWRDbGFzc2VzLndoZXJlKHByZWRpY2F0ZSk7CiAgfQoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gX29uRmlyc3ROYXRpdmVDbGFzcyhXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgcmV0dXJuIF9maW5kTmF0aXZlRXhjZXB0aW9ucygpOwogIH0KCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IF9maW5kTmF0aXZlRXhjZXB0aW9ucygpIHsKICAgIHJldHVybiBfZmluZFVudXNlZENsYXNzZXNNYXRjaGluZygoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50KSB7CiAgICAgIC8vIFRPRE8oc3JhKTogQW5ub3RhdGUgZXhjZXB0aW9uIGNsYXNzZXMgaW4gZGFydDpodG1sLgogICAgICBTdHJpbmcgbmFtZSA9IGNsYXNzRWxlbWVudC5uYW1lOwogICAgICBpZiAobmFtZS5jb250YWlucygnRXhjZXB0aW9uJykpIHJldHVybiB0cnVlOwogICAgICBpZiAobmFtZS5jb250YWlucygnRXJyb3InKSkgcmV0dXJuIHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSkgewogICAgaWYgKF9hbGxVc2VkTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIGxvZyhfYWxsVXNlZE1lc3NhZ2UpOwogICAgfQogIH0KfQoKY2xhc3MgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyIGV4dGVuZHMgTmF0aXZlRW5xdWV1ZXJCYXNlIHsKICBmaW5hbCBOYXRpdmVDbGFzc0ZpbmRlciBfbmF0aXZlQ2xhc3NGaW5kZXI7CgogIC8vLyBUaGUgc2V0IG9mIGFsbCBuYXRpdmUgY2xhc3Nlcy4gIEVhY2ggbmF0aXZlIGNsYXNzIGlzIGluIFtuYXRpdmVDbGFzc2VzXQogIC8vLyBhbmQgZXhhY3RseSBvbmUgb2YgW3VudXNlZENsYXNzZXNdIGFuZCBbcmVnaXN0ZXJlZENsYXNzZXNdLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX25hdGl2ZUNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgRGFydFR5cGVzIGRhcnRUeXBlcywKICAgICAgdGhpcy5fbmF0aXZlQ2xhc3NGaW5kZXIpCiAgICAgIDogc3VwZXIob3B0aW9ucywgZWxlbWVudEVudmlyb25tZW50LCBjb21tb25FbGVtZW50cywgZGFydFR5cGVzKTsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBuYXRpdmVDbGFzc2VzRm9yVGVzdGluZyA9PiBfbmF0aXZlQ2xhc3NlczsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCByZWdpc3RlcmVkQ2xhc3Nlc0ZvclRlc3RpbmcgPT4gX3JlZ2lzdGVyZWRDbGFzc2VzOwoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGxpdmVOYXRpdmVDbGFzc2VzID0+IF9yZWdpc3RlcmVkQ2xhc3NlczsKCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcHJvY2Vzc05hdGl2ZUNsYXNzZXMoSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgaW1wYWN0QnVpbGRlciA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gbmF0aXZlQ2xhc3NlcyA9CiAgICAgICAgX25hdGl2ZUNsYXNzRmluZGVyLmNvbXB1dGVOYXRpdmVDbGFzc2VzKGxpYnJhcmllcyk7CiAgICBfbmF0aXZlQ2xhc3Nlcy5hZGRBbGwobmF0aXZlQ2xhc3Nlcyk7CiAgICBfdW51c2VkQ2xhc3Nlcy5hZGRBbGwobmF0aXZlQ2xhc3Nlcyk7CiAgICBpZiAoIWVuYWJsZUxpdmVUeXBlQW5hbHlzaXMpIHsKICAgICAgX3JlZ2lzdGVyVHlwZVVzZXMoaW1wYWN0QnVpbGRlciwgX25hdGl2ZUNsYXNzZXMsICdmb3JjZWQnKTsKICAgIH0KICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSkgewogICAgc3VwZXIubG9nU3VtbWFyeShsb2cpOwogICAgbG9nKCdSZXNvbHZlZCAke19yZWdpc3RlcmVkQ2xhc3Nlcy5sZW5ndGh9IG5hdGl2ZSBlbGVtZW50cyB1c2VkLCAnCiAgICAgICAgJyR7X3VudXNlZENsYXNzZXMubGVuZ3RofSBuYXRpdmUgZWxlbWVudHMgZGVhZC4nKTsKICB9Cn0KCmNsYXNzIE5hdGl2ZUNvZGVnZW5FbnF1ZXVlciBleHRlbmRzIE5hdGl2ZUVucXVldWVyQmFzZSB7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIF9lbWl0dGVyOwogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBfbmF0aXZlQ2xhc3NlczsKICBmaW5hbCBOYXRpdmVEYXRhIF9uYXRpdmVEYXRhOwoKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9kb25lQWRkU3VidHlwZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBOYXRpdmVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgRGFydFR5cGVzIGRhcnRUeXBlcywKICAgICAgdGhpcy5fZW1pdHRlciwKICAgICAgdGhpcy5fbmF0aXZlQ2xhc3NlcywKICAgICAgdGhpcy5fbmF0aXZlRGF0YSkKICAgICAgOiBzdXBlcihvcHRpb25zLCBlbGVtZW50RW52aXJvbm1lbnQsIGNvbW1vbkVsZW1lbnRzLCBkYXJ0VHlwZXMpOwoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCBwcm9jZXNzTmF0aXZlQ2xhc3NlcyhJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIF91bnVzZWRDbGFzc2VzLmFkZEFsbChfbmF0aXZlQ2xhc3Nlcyk7CgogICAgaWYgKCFlbmFibGVMaXZlVHlwZUFuYWx5c2lzKSB7CiAgICAgIF9yZWdpc3RlclR5cGVVc2VzKGltcGFjdEJ1aWxkZXIsIF9uYXRpdmVDbGFzc2VzLCAnZm9yY2VkJyk7CiAgICB9CgogICAgLy8gSEFDSyBIQUNLIC0gYWRkIGFsbCB0aGUgcmVzb2x2ZWQgY2xhc3Nlcy4KICAgIFNldDxDbGFzc0VudGl0eT4gbWF0Y2hpbmdDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50IGluIF9uYXRpdmVDbGFzc2VzKSB7CiAgICAgIGlmIChfdW51c2VkQ2xhc3Nlcy5jb250YWlucyhjbGFzc0VsZW1lbnQpKSB7CiAgICAgICAgbWF0Y2hpbmdDbGFzc2VzLmFkZChjbGFzc0VsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hpbmdDbGFzc2VzLmlzTm90RW1wdHkgJiYgX3JlZ2lzdGVyZWRDbGFzc2VzLmlzRW1wdHkpIHsKICAgICAgbWF0Y2hpbmdDbGFzc2VzLmFkZEFsbChfb25GaXJzdE5hdGl2ZUNsYXNzKGltcGFjdEJ1aWxkZXIpKTsKICAgIH0KICAgIF9yZWdpc3RlclR5cGVVc2VzKGltcGFjdEJ1aWxkZXIsIG1hdGNoaW5nQ2xhc3NlcywgJ3dhcyByZXNvbHZlZCcpOwogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9yZWdpc3RlclR5cGVVc2VzKAogICAgICBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlciwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzLCBjYXVzZSkgewogICAgc3VwZXIuX3JlZ2lzdGVyVHlwZVVzZXMoaW1wYWN0QnVpbGRlciwgY2xhc3NlcywgY2F1c2UpOwoKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50IGluIGNsYXNzZXMpIHsKICAgICAgLy8gQWRkIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoaXMgY2xhc3MgaXMgYSBzdWJ0eXBlIG9mIGl0cyBzdXBlcnR5cGVzLiBUaGUKICAgICAgLy8gY29kZSBlbWl0dGVyIGFuZCB0aGUgc3NhIGJ1aWxkZXIgdXNlIHRoYXQgaW5mb3JtYXRpb24uCiAgICAgIF9hZGRTdWJ0eXBlcyhjbGFzc0VsZW1lbnQsIF9lbWl0dGVyLm5hdGl2ZUVtaXR0ZXIpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkU3VidHlwZXMoQ2xhc3NFbnRpdHkgY2xzLCBOYXRpdmVFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIGlmICghX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhjbHMpKSByZXR1cm47CiAgICBpZiAoX2RvbmVBZGRTdWJ0eXBlcy5jb250YWlucyhjbHMpKSByZXR1cm47CiAgICBfZG9uZUFkZFN1YnR5cGVzLmFkZChjbHMpOwoKICAgIC8vIFdhbGsgdGhlIHN1cGVyY2xhc3MgY2hhaW4gc2luY2UgY2xhc3NlcyBvbiB0aGUgc3VwZXJjbGFzcyBjaGFpbiBtaWdodCBub3QKICAgIC8vIGJlIGluc3RhbnRpYXRlZCAoYWJzdHJhY3Qgb3Igc2ltcGx5IHVudXNlZCkuCiAgICBfYWRkU3VidHlwZXMoX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyksIGVtaXR0ZXIpOwoKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFN1cGVydHlwZShjbHMsIChJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgICAgTGlzdDxDbGFzc0VudGl0eT4gc3VidHlwZXMgPQogICAgICAgICAgZW1pdHRlci5zdWJ0eXBlc1t0eXBlLmVsZW1lbnRdID8/PSA8Q2xhc3NFbnRpdHk+W107CiAgICAgIHN1YnR5cGVzLmFkZChjbHMpOwogICAgfSk7CgogICAgLy8gU2tpcCB0aHJvdWdoIGFsbCB0aGUgbWl4aW4gYXBwbGljYXRpb25zIGluIHRoZSBzdXBlciBjbGFzcwogICAgLy8gY2hhaW4uIFRoYXQgd2F5LCB0aGUgZGlyZWN0IHN1YnR5cGVzIHNldCBvbmx5IGNvbnRhaW4gdGhlCiAgICAvLyBuYXRpdmVzIGNsYXNzZXMuCiAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICB3aGlsZSAoc3VwZXJjbGFzcyAhPSBudWxsICYmCiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5pc01peGluQXBwbGljYXRpb24oc3VwZXJjbGFzcykpIHsKICAgICAgYXNzZXJ0KCFfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKHN1cGVyY2xhc3MpKTsKICAgICAgc3VwZXJjbGFzcyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhzdXBlcmNsYXNzKTsKICAgIH0KCiAgICBMaXN0PENsYXNzRW50aXR5PiBkaXJlY3RTdWJ0eXBlcyA9CiAgICAgICAgZW1pdHRlci5kaXJlY3RTdWJ0eXBlc1tzdXBlcmNsYXNzXSA/Pz0gPENsYXNzRW50aXR5PltdOwogICAgZGlyZWN0U3VidHlwZXMuYWRkKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxvZ1N1bW1hcnkodm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpKSB7CiAgICBzdXBlci5sb2dTdW1tYXJ5KGxvZyk7CiAgICBsb2coJ0NvbXBpbGVkICR7X3JlZ2lzdGVyZWRDbGFzc2VzLmxlbmd0aH0gbmF0aXZlIGNsYXNzZXMsICcKICAgICAgICAnJHtfdW51c2VkQ2xhc3Nlcy5sZW5ndGh9IG5hdGl2ZSBjbGFzc2VzIG9taXR0ZWQuJyk7CiAgfQp9CoEzAE5OPAFKJCE5TBosJ0IYLwFEEhc7MQEuPxsBTBofUQE1MgE8LwIBPkZCAQxIATkaASIwHigBST4uAUwBDDAvLAYEAUYaSycrUUwWEgglUQYEAQwfUEIEAR9KNUwGAS4/MyEsPQoSCCMvPTo2MjIwMCdRJwpNUEZPNU1CGEslO1E9DSMwD0MIBkRCBj4BTyxGTAYEATQyLAQBUCQEATJDPSczLxQIBAEMLiMcBgQCATwuAU5CQgEcHy0lGx9HAUcBTwFFAQw+SSo8KiojQgYaBAEMLhtHOwQCATkiLiABRAEZHy0lGxUbGEcBDD5JKwEjQgYBMT83MysIBkRCBkcaBAEMGks8ATBRQDoGBAE+MTAfAVE0QwFFIz4ZCAFCQRhFIT42QgYBJ0AdBAEMLhtBPQQCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9uYXRpdmUvZW5xdWV1ZS5kYXJ0NXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9idWlsZGVyX2tlcm5lbC5kYXJ0wAQhyi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvZW1iZWRkZWRfbmFtZXMuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JyBzaG93IENvZGVnZW5SZWdpc3RyeTsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JzsKaW1wb3J0ICcuLi9kdW1wX2luZm8uZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvanVtcHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZV9wcm92aWRlci5kYXJ0JzsKaW1wb3J0ICcuLi9pci91dGlsLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0JyBzaG93IEZ1bmN0aW9uSW5saW5lQ2FjaGU7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JwogICAgc2hvdyBGaWVsZEFuYWx5c2lzRGF0YSwgSkZpZWxkQW5hbHlzaXM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW5mZXJyZWRfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTW9kdWxhck5hbWVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBNb2R1bGFyRW1pdHRlcjsKaW1wb3J0ICcuLi9qc19tb2RlbC9sb2NhbHMuZGFydCcgc2hvdyBKdW1wVmlzaXRvcjsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50cy5kYXJ0JyBzaG93IEpHZW5lcmF0b3JCb2R5OwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2pzX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9pbnZvY2F0aW9uX21pcnJvcl9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9qcy5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3RyYWNlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JyBzaG93IE1lbWJlckFjY2VzczsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydCcgc2hvdyBTaWRlRWZmZWN0czsKaW1wb3J0ICcuLi91bml2ZXJzZS90YXJnZXRfY2hlY2tzLmRhcnQnIHNob3cgVGFyZ2V0Q2hlY2tzOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IENvbnN0YW50VXNlLCBTdGF0aWNVc2U7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnanVtcF9oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ2tlcm5lbF9zdHJpbmdfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICdsb2NhbHNfaGFuZGxlci5kYXJ0JzsKaW1wb3J0ICdsb29wX2hhbmRsZXIuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAnc3NhX2JyYW5jaF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3N3aXRjaF9jb250aW51ZV9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICd0eXBlX2J1aWxkZXIuZGFydCc7CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNZXJnZSB0aGlzIHdpdGggW0tlcm5lbElubGluaW5nU3RhdGVdLgpjbGFzcyBTdGFja0ZyYW1lIHsKICBmaW5hbCBTdGFja0ZyYW1lIHBhcmVudDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgbWVtYmVyOwogIGZpbmFsIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyOwogIGZpbmFsIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcDsKICAvLyBbaXIuTGV0XSBhbmQgW2lyLkxvY2FsSW5pdGlhbGl6ZXJdIGJpbmRpbmdzLgogIGZpbmFsIE1hcDxpci5WYXJpYWJsZURlY2xhcmF0aW9uLCBISW5zdHJ1Y3Rpb24+IGxldEJpbmRpbmdzOwogIGZpbmFsIEtlcm5lbFRvVHlwZUluZmVyZW5jZU1hcCB0eXBlSW5mZXJlbmNlTWFwOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciBzb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXI7CiAgZmluYWwgU3RhdGljVHlwZVByb3ZpZGVyIHN0YXRpY1R5cGVQcm92aWRlcjsKCiAgU3RhY2tGcmFtZSgKICAgICAgdGhpcy5wYXJlbnQsCiAgICAgIHRoaXMubWVtYmVyLAogICAgICB0aGlzLmFzeW5jTWFya2VyLAogICAgICB0aGlzLmxvY2Fsc01hcCwKICAgICAgdGhpcy5sZXRCaW5kaW5ncywKICAgICAgdGhpcy50eXBlSW5mZXJlbmNlTWFwLAogICAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciwKICAgICAgdGhpcy5zdGF0aWNUeXBlUHJvdmlkZXIpOwp9CgpjbGFzcyBLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgZXh0ZW5kcyBpci5WaXNpdG9yIHsKICAvLy8gSG9sZHMgdGhlIHJlc3VsdGluZyBTU0EgZ3JhcGguCiAgZmluYWwgSEdyYXBoIGdyYXBoID0gbmV3IEhHcmFwaCgpOwoKICAvLy8gVHJ1ZSBpZiB0aGUgYnVpbGRlciBpcyBwcm9jZXNzaW5nIG5vZGVzIGluc2lkZSBhIHRyeSBzdGF0ZW1lbnQuIFRoaXMgaXMKICAvLy8gaW1wb3J0YW50IGZvciBnZW5lcmF0aW5nIGNvbnRyb2wgZmxvdyBvdXQgb2YgYSB0cnkgYmxvY2sgbGlrZSByZXR1cm5zIG9yCiAgLy8vIGJyZWFrcy4KICBib29sIF9pblRyeVN0YXRlbWVudCA9IGZhbHNlOwoKICAvLy8gVXNlZCB0byB0cmFjayB0aGUgbG9jYWxzIHdoaWxlIGJ1aWxkaW5nIHRoZSBncmFwaC4KICBMb2NhbHNIYW5kbGVyIGxvY2Fsc0hhbmRsZXI7CgogIC8vLyBBIHN0YWNrIG9mIGluc3RydWN0aW9ucy4KICAvLy8KICAvLy8gV2UgYnVpbGQgdGhlIFNTQSBncmFwaCBieSBzaW11bGF0aW5nIGEgc3RhY2sgbWFjaGluZS4KICBMaXN0PEhJbnN0cnVjdGlvbj4gc3RhY2sgPSA8SEluc3RydWN0aW9uPltdOwoKICAvLy8gVGhlIGNvdW50IG9mIG5lc3RlZCBsb29wcyB3ZSBhcmUgY3VycmVudGx5IGJ1aWxkaW5nLgogIC8vLwogIC8vLyBUaGUgbG9vcCBuZXN0aW5nIGlzIGNvbnN1bHRlZCB3aGVuIGlubGluaW5nIGEgZnVuY3Rpb24gaW52b2NhdGlvbi4gVGhlCiAgLy8vIGlubGluaW5nIGhldXJpc3RpY3MgdGFrZSB0aGlzIGluZm9ybWF0aW9uIGludG8gYWNjb3VudC4KICBpbnQgbG9vcERlcHRoID0gMDsKCiAgLy8vIEEgbWFwcGluZyBmcm9tIGp1bXAgdGFyZ2V0cyB0byB0aGVpciBoYW5kbGVycy4KICBNYXA8SnVtcFRhcmdldCwgSnVtcEhhbmRsZXI+IGp1bXBUYXJnZXRzID0gPEp1bXBUYXJnZXQsIEp1bXBIYW5kbGVyPnt9OwoKICBmaW5hbCBDb21waWxlck9wdGlvbnMgb3B0aW9uczsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CiAgZmluYWwgTW9kdWxhckVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgTW9kdWxhck5hbWVyIF9uYW1lcjsKICBmaW5hbCBNZW1iZXJFbnRpdHkgdGFyZ2V0RWxlbWVudDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgX2luaXRpYWxUYXJnZXRFbGVtZW50OwogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnk7CiAgZmluYWwgQ2xvc3VyZURhdGEgX2Nsb3N1cmVEYXRhTG9va3VwOwogIGZpbmFsIFRyYWNlciBfdHJhY2VyOwogIGZpbmFsIFJ1bnRpbWVUeXBlc0VuY29kZXIgX3J0aUVuY29kZXI7CgogIC8vLyBBIHN0YWNrIG9mIFtJbnRlcmZhY2VUeXBlXXMgdGhhdCBoYXZlIGJlZW4gc2VlbiBkdXJpbmcgaW5saW5pbmcgb2YKICAvLy8gZmFjdG9yeSBjb25zdHJ1Y3RvcnMuICBUaGVzZSB0eXBlcyBhcmUgcHJlc2VydmVkIGluIFtISW52b2tlU3RhdGljXXMgYW5kCiAgLy8vIFtIQ3JlYXRlXXMgaW5zaWRlIHRoZSBpbmxpbmUgY29kZSBhbmQgcmVnaXN0ZXJlZCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uCiAgLy8vIGZvciB0aGVzZSBub2Rlcy4KICAvLyBUT0RPKGthcmxrbG9zZSk6IGNvbnNpZGVyIHJlbW92aW5nIHRoaXMgYW5kIGtlZXBpbmcgdGhlIChzdWJzdGl0dXRlZCkgdHlwZXMKICAvLyBvZiB0aGUgdHlwZSB2YXJpYWJsZXMgaW4gYW4gZW52aXJvbm1lbnQgKGxpa2UgdGhlIFtMb2NhbHNIYW5kbGVyXSkuCiAgZmluYWwgTGlzdDxJbnRlcmZhY2VUeXBlPiBfY3VycmVudEltcGxpY2l0SW5zdGFudGlhdGlvbnMgPSA8SW50ZXJmYWNlVHlwZT5bXTsKCiAgLy8vIFVzZWQgdG8gcmVwb3J0IGluZm9ybWF0aW9uIGFib3V0IGlubGluaW5nICh3aGljaCBvY2N1cnMgd2hpbGUgYnVpbGRpbmcgdGhlCiAgLy8vIFNTQSBncmFwaCksIHdoZW4gZHVtcC1pbmZvIGlzIGVuYWJsZWQuCiAgZmluYWwgSW5mb1JlcG9ydGVyIF9pbmZvUmVwb3J0ZXI7CgogIEhJbnN0cnVjdGlvbiBfcmV0aHJvd2FibGVFeGNlcHRpb247CgogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CiAgZmluYWwgSnNUb0VsZW1lbnRNYXAgX2VsZW1lbnRNYXA7CiAgZmluYWwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICBMb29wSGFuZGxlciBfbG9vcEhhbmRsZXI7CiAgVHlwZUJ1aWxkZXIgX3R5cGVCdWlsZGVyOwoKICAvLy8gVHJ1ZSBpZiB3ZSBhcmUgdmlzaXRpbmcgdGhlIGV4cHJlc3Npb24gb2YgYSB0aHJvdyBzdGF0ZW1lbnQ7IHdlIGFzc3VtZQogIC8vLyB0aGlzIGlzIGEgc2xvdyBwYXRoLgogIGJvb2wgX2luRXhwcmVzc2lvbk9mVGhyb3cgPSBmYWxzZTsKCiAgZmluYWwgTGlzdDxLZXJuZWxJbmxpbmluZ1N0YXRlPiBfaW5saW5pbmdTdGFjayA9IDxLZXJuZWxJbmxpbmluZ1N0YXRlPltdOwogIExvY2FsIF9yZXR1cm5Mb2NhbDsKICBEYXJ0VHlwZSBfcmV0dXJuVHlwZTsKICBib29sIF9pbkxhenlJbml0aWFsaXplckV4cHJlc3Npb24gPSBmYWxzZTsKCiAgU3RhY2tGcmFtZSBfY3VycmVudEZyYW1lOwoKICBmaW5hbCBGdW5jdGlvbklubGluZUNhY2hlIF9pbmxpbmVDYWNoZTsKICBmaW5hbCBJbmxpbmVEYXRhQ2FjaGUgX2lubGluZURhdGFDYWNoZTsKCiAgS2VybmVsU3NhR3JhcGhCdWlsZGVyKAogICAgICB0aGlzLm9wdGlvbnMsCiAgICAgIHRoaXMucmVwb3J0ZXIsCiAgICAgIHRoaXMuX2luaXRpYWxUYXJnZXRFbGVtZW50LAogICAgICBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZSwKICAgICAgdGhpcy5faW5mb1JlcG9ydGVyLAogICAgICB0aGlzLl9lbGVtZW50TWFwLAogICAgICB0aGlzLmdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgIHRoaXMuY2xvc2VkV29ybGQsCiAgICAgIHRoaXMucmVnaXN0cnksCiAgICAgIHRoaXMuX25hbWVyLAogICAgICB0aGlzLl9lbWl0dGVyLAogICAgICB0aGlzLl90cmFjZXIsCiAgICAgIHRoaXMuX3J0aUVuY29kZXIsCiAgICAgIHRoaXMuX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgIHRoaXMuX2lubGluZUNhY2hlLAogICAgICB0aGlzLl9pbmxpbmVEYXRhQ2FjaGUpCiAgICAgIDogdGhpcy50YXJnZXRFbGVtZW50ID0gX2VmZmVjdGl2ZVRhcmdldEVsZW1lbnRGb3IoX2luaXRpYWxUYXJnZXRFbGVtZW50KSwKICAgICAgICB0aGlzLl9jbG9zdXJlRGF0YUxvb2t1cCA9IGNsb3NlZFdvcmxkLmNsb3N1cmVEYXRhTG9va3VwIHsKICAgIF9lbnRlckZyYW1lKHRhcmdldEVsZW1lbnQsIG51bGwpOwogICAgdGhpcy5fbG9vcEhhbmRsZXIgPSBuZXcgS2VybmVsTG9vcEhhbmRsZXIodGhpcyk7CiAgICBfdHlwZUJ1aWxkZXIgPSBuZXcgS2VybmVsVHlwZUJ1aWxkZXIodGhpcywgX2VsZW1lbnRNYXApOwogICAgZ3JhcGguZWxlbWVudCA9IHRhcmdldEVsZW1lbnQ7CiAgICBncmFwaC5zb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFZhcmlhYmxlRGVjbGFyYXRpb24oKTsKICAgIHRoaXMubG9jYWxzSGFuZGxlciA9IG5ldyBMb2NhbHNIYW5kbGVyKHRoaXMsIHRhcmdldEVsZW1lbnQsIHRhcmdldEVsZW1lbnQsCiAgICAgICAgaW5zdGFuY2VUeXBlLCBfbmF0aXZlRGF0YSwgX2ludGVyY2VwdG9yRGF0YSk7CiAgfQoKICBLZXJuZWxUb0xvY2Fsc01hcCBnZXQgX2xvY2Fsc01hcCA9PiBfY3VycmVudEZyYW1lLmxvY2Fsc01hcDsKCiAgTWFwPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIEhJbnN0cnVjdGlvbj4gZ2V0IF9sZXRCaW5kaW5ncyA9PgogICAgICBfY3VycmVudEZyYW1lLmxldEJpbmRpbmdzOwoKICBKQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PiBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CgogIEpGaWVsZEFuYWx5c2lzIGdldCBfZmllbGRBbmFseXNpcyA9PiBjbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzOwoKICBLZXJuZWxUb1R5cGVJbmZlcmVuY2VNYXAgZ2V0IF90eXBlSW5mZXJlbmNlTWFwID0+CiAgICAgIF9jdXJyZW50RnJhbWUudHlwZUluZmVyZW5jZU1hcDsKCiAgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIGdldCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyID0+CiAgICAgIF9jdXJyZW50RnJhbWUuc291cmNlSW5mb3JtYXRpb25CdWlsZGVyOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBOYXRpdmVEYXRhIGdldCBfbmF0aXZlRGF0YSA9PiBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhOwoKICBJbnRlcmNlcHRvckRhdGEgZ2V0IF9pbnRlcmNlcHRvckRhdGEgPT4gY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhOwoKICBSdW50aW1lVHlwZXNOZWVkIGdldCBfcnRpTmVlZCA9PiBjbG9zZWRXb3JsZC5ydGlOZWVkOwoKICBJbmZlcnJlZERhdGEgZ2V0IF9pbmZlcnJlZERhdGEgPT4gZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cy5pbmZlcnJlZERhdGE7CgogIERhcnRUeXBlcyBnZXQgdHlwZXMgPT4gY2xvc2VkV29ybGQuZGFydFR5cGVzOwoKICB2b2lkIHB1c2goSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhZGQoaW5zdHJ1Y3Rpb24pOwogICAgc3RhY2suYWRkKGluc3RydWN0aW9uKTsKICB9CgogIEhJbnN0cnVjdGlvbiBwb3AoKSB7CiAgICByZXR1cm4gc3RhY2sucmVtb3ZlTGFzdCgpOwogIH0KCiAgLy8vIFB1c2hlcyBhIGJvb2xlYW4gY2hlY2tpbmcgW2V4cHJlc3Npb25dIGFnYWluc3QgbnVsbC4KICBwdXNoQ2hlY2tOdWxsKEhJbnN0cnVjdGlvbiBleHByZXNzaW9uKSB7CiAgICBwdXNoKG5ldyBISWRlbnRpdHkoZXhwcmVzc2lvbiwgZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSwgbnVsbCwKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkpOwogIH0KCiAgSEJhc2ljQmxvY2sgX2N1cnJlbnQ7CgogIC8vLyBUaGUgY3VycmVudCBibG9jayB0byBhZGQgaW5zdHJ1Y3Rpb25zIHRvLiBNaWdodCBiZSBudWxsLCBpZiB3ZSBhcmUKICAvLy8gdmlzaXRpbmcgZGVhZCBjb2RlLCBidXQgc2VlIFtfaXNSZWFjaGFibGVdLgogIEhCYXNpY0Jsb2NrIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICB2b2lkIHNldCBjdXJyZW50KGMpIHsKICAgIF9pc1JlYWNoYWJsZSA9IGMgIT0gbnVsbDsKICAgIF9jdXJyZW50ID0gYzsKICB9CgogIC8vLyBUaGUgbW9zdCByZWNlbnRseSBvcGVuZWQgYmxvY2suIEhhcyB0aGUgc2FtZSB2YWx1ZSBhcyBbY3VycmVudF0gd2hpbGUKICAvLy8gdGhlIGJsb2NrIGlzIG9wZW4sIGJ1dCB1bmxpa2UgW2N1cnJlbnRdLCBpdCBpc24ndCBjbGVhcmVkIHdoZW4gdGhlCiAgLy8vIGN1cnJlbnQgYmxvY2sgaXMgY2xvc2VkLgogIEhCYXNpY0Jsb2NrIGxhc3RPcGVuZWRCbG9jazsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjdXJyZW50IGJsb2NrIGlzIGRlYWQgKGJlY2F1c2UgaXQgaGFzIGEgdGhyb3cgb3IgYQogIC8vLyByZXR1cm4gZnVydGhlciB1cCkuIElmIHRoaXMgaXMgZmFsc2UsIHRoZW4gW2N1cnJlbnRdIG1heSBiZSBudWxsLiBJZiB0aGUKICAvLy8gYmxvY2sgaXMgZGVhZCB0aGVuIGl0IG1heSBhbHNvIGJlIGFib3J0ZWQsIGJ1dCBmb3Igc2ltcGxpY2l0eSB3ZSBvbmx5CiAgLy8vIGFib3J0IG9uIHN0YXRlbWVudCBib3VuZGFyaWVzLCBub3QgaW4gdGhlIG1pZGRsZSBvZiBleHByZXNzaW9ucy4gU2VlCiAgLy8vIFtpc0Fib3J0ZWRdLgogIGJvb2wgX2lzUmVhY2hhYmxlID0gdHJ1ZTsKCiAgSExvY2FsVmFsdWUgbGFzdEFkZGVkUGFyYW1ldGVyOwoKICBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4gcGFyYW1ldGVycyA9IDxMb2NhbCwgSEluc3RydWN0aW9uPnt9OwogIFNldDxMb2NhbD4gZWxpZGVkUGFyYW1ldGVyczsKCiAgSEJhc2ljQmxvY2sgYWRkTmV3QmxvY2soKSB7CiAgICBIQmFzaWNCbG9jayBibG9jayA9IGdyYXBoLmFkZE5ld0Jsb2NrKCk7CiAgICAvLyBJZiBhZGRpbmcgYSBuZXcgYmxvY2sgZHVyaW5nIGJ1aWxkaW5nIG9mIGFuIGV4cHJlc3Npb24sIGl0IGlzIGR1ZSB0bwogICAgLy8gY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgb3Igc2hvcnQtY2lyY3VpdCBsb2dpY2FsIG9wZXJhdG9ycy4KICAgIHJldHVybiBibG9jazsKICB9CgogIHZvaWQgb3BlbihIQmFzaWNCbG9jayBibG9jaykgewogICAgYmxvY2sub3BlbigpOwogICAgY3VycmVudCA9IGJsb2NrOwogICAgbGFzdE9wZW5lZEJsb2NrID0gYmxvY2s7CiAgfQoKICBIQmFzaWNCbG9jayBjbG9zZShIQ29udHJvbEZsb3cgZW5kKSB7CiAgICBIQmFzaWNCbG9jayByZXN1bHQgPSBjdXJyZW50OwogICAgY3VycmVudC5jbG9zZShlbmQpOwogICAgY3VycmVudCA9IG51bGw7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSEJhc2ljQmxvY2sgX2Nsb3NlQW5kR290b0V4aXQoSENvbnRyb2xGbG93IGVuZCkgewogICAgSEJhc2ljQmxvY2sgcmVzdWx0ID0gY3VycmVudDsKICAgIGN1cnJlbnQuY2xvc2UoZW5kKTsKICAgIGN1cnJlbnQgPSBudWxsOwogICAgcmVzdWx0LmFkZFN1Y2Nlc3NvcihncmFwaC5leGl0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIGdvdG8oSEJhc2ljQmxvY2sgZnJvbSwgSEJhc2ljQmxvY2sgdG8pIHsKICAgIGZyb20uY2xvc2UobmV3IEhHb3RvKF9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICBmcm9tLmFkZFN1Y2Nlc3Nvcih0byk7CiAgfQoKICBib29sIGlzQWJvcnRlZCgpIHsKICAgIHJldHVybiBjdXJyZW50ID09IG51bGw7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIG5ldyBibG9jaywgdHJhbnNpdGlvbnMgdG8gaXQgZnJvbSBhbnkgY3VycmVudCBibG9jaywgYW5kCiAgLy8vIG9wZW5zIHRoZSBuZXcgYmxvY2suCiAgSEJhc2ljQmxvY2sgb3Blbk5ld0Jsb2NrKCkgewogICAgSEJhc2ljQmxvY2sgbmV3QmxvY2sgPSBhZGROZXdCbG9jaygpOwogICAgaWYgKCFpc0Fib3J0ZWQoKSkgZ290byhjdXJyZW50LCBuZXdCbG9jayk7CiAgICBvcGVuKG5ld0Jsb2NrKTsKICAgIHJldHVybiBuZXdCbG9jazsKICB9CgogIHZvaWQgYWRkKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgY3VycmVudC5hZGQoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgSExvY2FsVmFsdWUgYWRkUGFyYW1ldGVyKEVudGl0eSBwYXJhbWV0ZXIsIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAge2Jvb2wgaXNFbGlkZWQ6IGZhbHNlfSkgewogICAgSExvY2FsVmFsdWUgcmVzdWx0ID0gaXNFbGlkZWQKICAgICAgICA/IG5ldyBITG9jYWxWYWx1ZShwYXJhbWV0ZXIsIHR5cGUpCiAgICAgICAgOiBuZXcgSFBhcmFtZXRlclZhbHVlKHBhcmFtZXRlciwgdHlwZSk7CiAgICBpZiAobGFzdEFkZGVkUGFyYW1ldGVyID09IG51bGwpIHsKICAgICAgZ3JhcGguZW50cnkuYWRkQmVmb3JlKGdyYXBoLmVudHJ5LmZpcnN0LCByZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgZ3JhcGguZW50cnkuYWRkQWZ0ZXIobGFzdEFkZGVkUGFyYW1ldGVyLCByZXN1bHQpOwogICAgfQogICAgbGFzdEFkZGVkUGFyYW1ldGVyID0gcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24gd3JhcFN0YXRlbWVudEdyYXBoKFN1YkdyYXBoIHN0YXRlbWVudHMpIHsKICAgIGlmIChzdGF0ZW1lbnRzID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uKHN0YXRlbWVudHMpOwogIH0KCiAgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uIHdyYXBFeHByZXNzaW9uR3JhcGgoU3ViRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICBpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uKGV4cHJlc3Npb24pOwogIH0KCiAgSExpdGVyYWxMaXN0IF9idWlsZExpdGVyYWxMaXN0KExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMpIHsKICAgIHJldHVybiBuZXcgSExpdGVyYWxMaXN0KGlucHV0cywgX2Fic3RyYWN0VmFsdWVEb21haW4uZ3Jvd2FibGVMaXN0VHlwZSk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gX2NhbGxTZXRSdW50aW1lVHlwZUluZm9XaXRoVHlwZUFyZ3VtZW50cygKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gcnRpSW5wdXRzLAogICAgICBISW5zdHJ1Y3Rpb24gbmV3T2JqZWN0LAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKCFfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBuZXdPYmplY3Q7CiAgICB9CgogICAgSEluc3RydWN0aW9uIHR5cGVJbmZvID0gbmV3IEhUeXBlSW5mb0V4cHJlc3Npb24oCiAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRSwKICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUodHlwZS5lbGVtZW50KSwKICAgICAgICBydGlJbnB1dHMsCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgYWRkKHR5cGVJbmZvKTsKICAgIHJldHVybiBfY2FsbFNldFJ1bnRpbWVUeXBlSW5mbyh0eXBlSW5mbywgbmV3T2JqZWN0LCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gY29udHJvbCBmbG93IGlzIGFib3V0IHRvIGNoYW5nZSwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAgLy8vIHNwZWNpZnkgc3BlY2lhbCBzdWNjZXNzb3JzIGlmIHdlIGFyZSBhbHJlYWR5IGluIGEgdHJ5L2NhdGNoL2ZpbmFsbHkgYmxvY2suCiAgdm9pZCBfaGFuZGxlSW5UcnlTdGF0ZW1lbnQoKSB7CiAgICBpZiAoIV9pblRyeVN0YXRlbWVudCkgcmV0dXJuOwogICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBjbG9zZShuZXcgSEV4aXRUcnkoX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgIEhCYXNpY0Jsb2NrIG5ld0Jsb2NrID0gZ3JhcGguYWRkTmV3QmxvY2soKTsKICAgIGJsb2NrLmFkZFN1Y2Nlc3NvcihuZXdCbG9jayk7CiAgICBvcGVuKG5ld0Jsb2NrKTsKICB9CgogIC8vLyBIZWxwZXIgdG8gaW1wbGVtZW50IEpTX0dFVF9GTEFHLgogIC8vLwogIC8vLyBUaGUgY29uY3JldGUgU1NBIGdyYXBoIGJ1aWxkZXIgd2lsbCBleHRyYWN0IGEgZmxhZyBwYXJhbWV0ZXIgZnJvbSB0aGUKICAvLy8gSlNfR0VUX0ZMQUcgY2FsbCBhbmQgdGhlbiBwdXNoIGEgYm9vbGVhbiByZXN1bHQgb250byB0aGUgc3RhY2suIFRoaXMKICAvLy8gZnVuY3Rpb24gcHJvdmlkZXMgdGhlIGJvb2xlYW4gdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gW2ZsYWdOYW1lXS4KICAvLy8gSWYgW2ZsYWdOYW1lXSBpcyBub3QgcmVjb2duaXplZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGBudWxsYCBhbmQgdGhlCiAgLy8vIGNvbmNyZXRlIFNTQSBidWlsZGVyIHJlcG9ydHMgYW4gZXJyb3IuCiAgYm9vbCBfZ2V0RmxhZ1ZhbHVlKFN0cmluZyBmbGFnTmFtZSkgewogICAgc3dpdGNoIChmbGFnTmFtZSkgewogICAgICBjYXNlICdNSU5JRklFRCc6CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uOwogICAgICBjYXNlICdNVVNUX1JFVEFJTl9NRVRBREFUQSc6CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBjYXNlICdVU0VfQ09OVEVOVF9TRUNVUklUWV9QT0xJQ1knOgogICAgICAgIHJldHVybiBvcHRpb25zLnVzZUNvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICAgY2FzZSAnVVNFX05FV19SVEknOgogICAgICAgIHJldHVybiBvcHRpb25zLmV4cGVyaW1lbnROZXdSdGk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBTdGF0aWNUeXBlIF9nZXRTdGF0aWNUeXBlKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3Vic3RpdHV0ZSB0aGUgdHlwZSBieSB0aGUgdGhpcyB0eXBlIGFuZCB0eXBlCiAgICAvLyBhcmd1bWVudHMgb2YgdGhlIGN1cnJlbnQgZnJhbWUuCiAgICBpci5EYXJ0VHlwZSB0eXBlID0gX2N1cnJlbnRGcmFtZS5zdGF0aWNUeXBlUHJvdmlkZXIuZ2V0U3RhdGljVHlwZShub2RlKTsKICAgIHJldHVybiBuZXcgU3RhdGljVHlwZSgKICAgICAgICBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSwgY29tcHV0ZUNsYXNzUmVsYXRpb25Gcm9tVHlwZSh0eXBlKSk7CiAgfQoKICBTdGF0aWNUeXBlIF9nZXRTdGF0aWNGb3JJbkl0ZXJhdG9yVHlwZShpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdWJzdGl0dXRlIHRoZSB0eXBlIGJ5IHRoZSB0aGlzIHR5cGUgYW5kIHR5cGUKICAgIC8vIGFyZ3VtZW50cyBvZiB0aGUgY3VycmVudCBmcmFtZS4KICAgIGlyLkRhcnRUeXBlIHR5cGUgPQogICAgICAgIF9jdXJyZW50RnJhbWUuc3RhdGljVHlwZVByb3ZpZGVyLmdldEZvckluSXRlcmF0b3JUeXBlKG5vZGUpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNUeXBlKAogICAgICAgIF9lbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpLCBjb21wdXRlQ2xhc3NSZWxhdGlvbkZyb21UeXBlKHR5cGUpKTsKICB9CgogIHN0YXRpYyBNZW1iZXJFbnRpdHkgX2VmZmVjdGl2ZVRhcmdldEVsZW1lbnRGb3IoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBKR2VuZXJhdG9yQm9keSkgcmV0dXJuIG1lbWJlci5mdW5jdGlvbjsKICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICB2b2lkIF9lbnRlckZyYW1lKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCBTb3VyY2VJbmZvcm1hdGlvbiBjYWxsU291cmNlSW5mb3JtYXRpb24pIHsKICAgIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyID0gQXN5bmNNYXJrZXIuU1lOQzsKICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IGdldEZ1bmN0aW9uTm9kZShfZWxlbWVudE1hcCwgbWVtYmVyKTsKICAgIGlmIChmdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIGFzeW5jTWFya2VyID0gZ2V0QXN5bmNNYXJrZXIoZnVuY3Rpb24pOwogICAgfQogICAgX2N1cnJlbnRGcmFtZSA9IG5ldyBTdGFja0ZyYW1lKAogICAgICAgIF9jdXJyZW50RnJhbWUsCiAgICAgICAgbWVtYmVyLAogICAgICAgIGFzeW5jTWFya2VyLAogICAgICAgIGNsb3NlZFdvcmxkLmdsb2JhbExvY2Fsc01hcC5nZXRMb2NhbHNNYXAobWVtYmVyKSwKICAgICAgICB7fSwKICAgICAgICBuZXcgS2VybmVsVG9UeXBlSW5mZXJlbmNlTWFwSW1wbChtZW1iZXIsIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMpLAogICAgICAgIF9jdXJyZW50RnJhbWUgIT0gbnVsbAogICAgICAgICAgICA/IF9jdXJyZW50RnJhbWUuc291cmNlSW5mb3JtYXRpb25CdWlsZGVyCiAgICAgICAgICAgICAgICAuZm9yQ29udGV4dChtZW1iZXIsIGNhbGxTb3VyY2VJbmZvcm1hdGlvbikKICAgICAgICAgICAgOiBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChtZW1iZXIpLAogICAgICAgIF9lbGVtZW50TWFwLmdldFN0YXRpY1R5cGVQcm92aWRlcihtZW1iZXIpKTsKICB9CgogIHZvaWQgX2xlYXZlRnJhbWUoKSB7CiAgICBfY3VycmVudEZyYW1lID0gX2N1cnJlbnRGcmFtZS5wYXJlbnQ7CiAgfQoKICBIR3JhcGggYnVpbGQoKSB7CiAgICByZXR1cm4gcmVwb3J0ZXIud2l0aEN1cnJlbnRFbGVtZW50KF9sb2NhbHNNYXAuY3VycmVudE1lbWJlciwgKCkgewogICAgICAvLyBUT0RPKGhldCk6IG5vIHJlYXNvbiB0byBkbyB0aGlzIGhlcmUuLi4KICAgICAgSEluc3RydWN0aW9uLmlkQ291bnRlciA9IDA7CiAgICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKF9pbml0aWFsVGFyZ2V0RWxlbWVudCk7CgogICAgICBzd2l0Y2ggKGRlZmluaXRpb24ua2luZCkgewogICAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICAgIGlyLk5vZGUgdGFyZ2V0ID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgICAgaWYgKHRhcmdldCBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICAgICAgaWYgKHRhcmdldC5pc0V4dGVybmFsKSB7CiAgICAgICAgICAgICAgX2J1aWxkRXh0ZXJuYWxGdW5jdGlvbk5vZGUoCiAgICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQsIF9lbnN1cmVEZWZhdWx0QXJndW1lbnRWYWx1ZXModGFyZ2V0LmZ1bmN0aW9uKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2J1aWxkRnVuY3Rpb25Ob2RlKAogICAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LCBfZW5zdXJlRGVmYXVsdEFyZ3VtZW50VmFsdWVzKHRhcmdldC5mdW5jdGlvbikpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCBpcyBpci5GaWVsZCkgewogICAgICAgICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPQogICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEodGFyZ2V0RWxlbWVudCk7CgogICAgICAgICAgICBpZiAoZmllbGREYXRhLmluaXRpYWxWYWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJDb25zdGFudFVzZSgKICAgICAgICAgICAgICAgICAgbmV3IENvbnN0YW50VXNlLmluaXQoZmllbGREYXRhLmluaXRpYWxWYWx1ZSkpOwogICAgICAgICAgICAgIGlmICh0YXJnZXRFbGVtZW50LmlzU3RhdGljIHx8IHRhcmdldEVsZW1lbnQuaXNUb3BMZXZlbCkgewogICAgICAgICAgICAgICAgLy8vIE5vIGNvZGUgaXMgY3JlYXRlZCBmb3IgdGhpcyBmaWVsZDogQWxsIHJlZmVyZW5jZXMgaW5saW5lIHRoZQogICAgICAgICAgICAgICAgLy8vIGNvbnN0YW50IHZhbHVlLgogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkRGF0YS5pc0xhenkpIHsKICAgICAgICAgICAgICAvLyBUaGUgZ2VuZXJhdGVkIGluaXRpYWxpemVyIG5lZWRzIGJlIHdyYXBwZWQgaW4gdGhlIGN5Y2xpYy1lcnJvcgogICAgICAgICAgICAgIC8vIGhlbHBlci4KICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuY3ljbGljVGhyb3dIZWxwZXIsCiAgICAgICAgICAgICAgICAgIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0YXJnZXRFbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICAgICAgICBpZiAoZmllbGREYXRhLmlzRWZmZWN0aXZlbHlGaW5hbCB8fAogICAgICAgICAgICAgICAgICAhY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kodGFyZ2V0RWxlbWVudCkKICAgICAgICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgICAgIC8vIE5vIG5lZWQgZm9yIGEgY2hlY2tlZCBzZXR0ZXIuCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX2J1aWxkRmllbGQodGFyZ2V0KTsKICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIGlyLkxvY2FsRnVuY3Rpb24pIHsKICAgICAgICAgICAgX2J1aWxkRnVuY3Rpb25Ob2RlKAogICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCwgX2Vuc3VyZURlZmF1bHRBcmd1bWVudFZhbHVlcyh0YXJnZXQuZnVuY3Rpb24pKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93ICdObyBjYXNlIGltcGxlbWVudGVkIHRvIGhhbmRsZSB0YXJnZXQ6ICcKICAgICAgICAgICAgICAgICckdGFyZ2V0IGZvciAkdGFyZ2V0RWxlbWVudCc7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICAgIF9lbnN1cmVEZWZhdWx0QXJndW1lbnRWYWx1ZXMoY29uc3RydWN0b3IuZnVuY3Rpb24pOwogICAgICAgICAgX2J1aWxkQ29uc3RydWN0b3IodGFyZ2V0RWxlbWVudCwgY29uc3RydWN0b3IpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keToKICAgICAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgICAgX2Vuc3VyZURlZmF1bHRBcmd1bWVudFZhbHVlcyhjb25zdHJ1Y3Rvci5mdW5jdGlvbik7CiAgICAgICAgICBfYnVpbGRDb25zdHJ1Y3RvckJvZHkoY29uc3RydWN0b3IpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZDoKICAgICAgICAgIC8vIENsb3N1cmUgZmllbGRzIGhhdmUgbm8gc2V0dGVyIGFuZCB0aGVyZWZvcmUgbmV2ZXIgcmVxdWlyZSBhbnkgY29kZS4KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIGNhc2UgTWVtYmVyS2luZC5zaWduYXR1cmU6CiAgICAgICAgICBpci5Ob2RlIHRhcmdldCA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICAgIGlyLkZ1bmN0aW9uTm9kZSBvcmlnaW5hbENsb3N1cmVOb2RlOwogICAgICAgICAgaWYgKHRhcmdldCBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICAgICAgb3JpZ2luYWxDbG9zdXJlTm9kZSA9IHRhcmdldC5mdW5jdGlvbjsKICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIGlyLkxvY2FsRnVuY3Rpb24pIHsKICAgICAgICAgICAgb3JpZ2luYWxDbG9zdXJlTm9kZSA9IHRhcmdldC5mdW5jdGlvbjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCwKICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGZ1bmN0aW9uIHNpZ25hdHVyZTogIgogICAgICAgICAgICAgICAgIiR0YXJnZXRFbGVtZW50IGluc2lkZSBhIG5vbi1jbG9zdXJlOiAkdGFyZ2V0Iik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAob3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgICAgICAgIF9idWlsZE1ldGhvZFNpZ25hdHVyZU5ld1J0aShvcmlnaW5hbENsb3N1cmVOb2RlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9idWlsZE1ldGhvZFNpZ25hdHVyZShvcmlnaW5hbENsb3N1cmVOb2RlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5OgogICAgICAgICAgX2J1aWxkR2VuZXJhdG9yQm9keSgKICAgICAgICAgICAgICBfaW5pdGlhbFRhcmdldEVsZW1lbnQsIF9mdW5jdGlvbk5vZGVPZihkZWZpbml0aW9uLm5vZGUpKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGFzc2VydChncmFwaC5pc1ZhbGlkKCksICJJbnZhbGlkIGdyYXBoIGZvciAkX2luaXRpYWxUYXJnZXRFbGVtZW50LiIpOwoKICAgICAgaWYgKF90cmFjZXIuaXNFbmFibGVkKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IF9pbml0aWFsVGFyZ2V0RWxlbWVudDsKICAgICAgICBTdHJpbmcgbmFtZSA9IG1lbWJlci5uYW1lOwogICAgICAgIGlmIChtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciB8fAogICAgICAgICAgICBtZW1iZXIuaXNDb25zdHJ1Y3RvciB8fAogICAgICAgICAgICBtZW1iZXIuaXNTdGF0aWMpIHsKICAgICAgICAgIG5hbWUgPSAiJHttZW1iZXIuZW5jbG9zaW5nQ2xhc3MubmFtZX0uJG5hbWUiOwogICAgICAgICAgaWYgKGRlZmluaXRpb24ua2luZCA9PSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keSkgewogICAgICAgICAgICBuYW1lICs9ICIgKGJvZHkpIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3RyYWNlci50cmFjZUNvbXBpbGF0aW9uKG5hbWUpOwogICAgICAgIF90cmFjZXIudHJhY2VHcmFwaCgnYnVpbGRlcicsIGdyYXBoKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGdyYXBoOwogICAgfSk7CiAgfQoKICBpci5GdW5jdGlvbk5vZGUgX2Z1bmN0aW9uTm9kZU9mKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIGlyLk1lbWJlcikgcmV0dXJuIG5vZGUuZnVuY3Rpb247CiAgICBpZiAobm9kZSBpcyBpci5Mb2NhbEZ1bmN0aW9uKSByZXR1cm4gbm9kZS5mdW5jdGlvbjsKICAgIHJldHVybiBudWxsOwogIH0KCiAgaXIuRnVuY3Rpb25Ob2RlIF9lbnN1cmVEZWZhdWx0QXJndW1lbnRWYWx1ZXMoaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uKSB7CiAgICAvLyBSZWdpc3RlciBhbGwgW2Z1bmN0aW9uXSdzIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzLgogICAgLy8KICAgIC8vIERlZmF1bHQgdmFsdWVzIG1pZ2h0IGJlIChvciBjb250YWluKSBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQKICAgIC8vIGZyb20gYW55d2hlcmUgZWxzZSBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgZW5xdWV1ZWQuICBTdHVicyBhbmQKICAgIC8vIGBGdW5jdGlvbi5hcHBseWAgZGF0YSBhcmUgY3JlYXRlZCBhZnRlciB0aGUgY29kZWdlbiBxdWV1ZSBpcyBjbG9zZWQsIHNvCiAgICAvLyB3ZSBmb3JjZSB0aGVzZSBmdW5jdGlvbnMgaW50byB0aGUgcXVldWUgYnkgcmVnaXN0ZXJpbmcgdGhlIGNvbnN0YW50cyBhcwogICAgLy8gdXNlZCBpbiBhZHZhbmNlLiBTZWUgbGFuZ3VhZ2UvY3ljbGljX2RlZmF1bHRfdmFsdWVzX3Rlc3QuZGFydCBmb3IgYW4KICAgIC8vIGV4YW1wbGUuCiAgICAvLwogICAgLy8gVE9ETyhzcmEpOiBXZSBjb3VsZCBiZSBtb3JlIHByZWNpc2UgaWYgc3R1YnMgYW5kIGBGdW5jdGlvbi5hcHBseWAgZGF0YQogICAgLy8gd2VyZSBnZW5lcmF0ZWQgYnkgdGhlIGNvZGVnZW4gZW5xdWV1ZXIuIEluIHByYWN0aWNlIGV2ZW4gaW4gaHVnZSBwcm9ncmFtcwogICAgLy8gdGhlcmUgYXJlIG9ubHkgdmVyeSBzbWFsbCBudW1iZXIgb2YgY29uc3RhbnRzIGNyZWF0ZWQgaGVyZSB0aGF0IGFyZSBub3QKICAgIC8vIGFjdHVhbGx5IHVzZWQuCiAgICB2b2lkIF9yZWdpc3RlckRlZmF1bHRWYWx1ZShpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudFZhbHVlID0KICAgICAgICAgIF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZS5pbml0aWFsaXplciwgaW1wbGljaXROdWxsOiB0cnVlKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgY29uc3RhbnRWYWx1ZSAhPSBudWxsLAogICAgICAgICAgZmFpbGVkQXQoX2VsZW1lbnRNYXAuZ2V0TWV0aG9kKGZ1bmN0aW9uLnBhcmVudCksCiAgICAgICAgICAgICAgJ05vIGNvbnN0YW50IGNvbXB1dGVkIGZvciAkbm9kZScpKTsKICAgICAgcmVnaXN0cnk/LnJlZ2lzdGVyQ29uc3RhbnRVc2UobmV3IENvbnN0YW50VXNlLmluaXQoY29uc3RhbnRWYWx1ZSkpOwogICAgfQoKICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzCiAgICAgICAgLnNraXAoZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkKICAgICAgICAuZm9yRWFjaChfcmVnaXN0ZXJEZWZhdWx0VmFsdWUpOwogICAgZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmZvckVhY2goX3JlZ2lzdGVyRGVmYXVsdFZhbHVlKTsKICAgIHJldHVybiBmdW5jdGlvbjsKICB9CgogIHZvaWQgX2J1aWxkRmllbGQoaXIuRmllbGQgbm9kZSkgewogICAgX2luTGF6eUluaXRpYWxpemVyRXhwcmVzc2lvbiA9IG5vZGUuaXNTdGF0aWM7CiAgICBGaWVsZEVudGl0eSBmaWVsZCA9IF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgIF9vcGVuRnVuY3Rpb24oZmllbGQsIGNoZWNrczogVGFyZ2V0Q2hlY2tzLm5vbmUpOwogICAgaWYgKG5vZGUuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgIGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShmaWVsZCkuaXNFbWl0dGVkKSB7CiAgICAgIEhJbnN0cnVjdGlvbiB0aGlzSW5zdHJ1Y3Rpb24gPSBsb2NhbHNIYW5kbGVyLnJlYWRUaGlzKAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRHZXQobm9kZSkpOwogICAgICAvLyBVc2UgZHluYW1pYyB0eXBlIGJlY2F1c2UgdGhlIHR5cGUgY29tcHV0ZWQgYnkgdGhlIGluZmVycmVyIGlzCiAgICAgIC8vIG5hcnJvd2VkIHRvIHRoZSB0eXBlIGFubm90YXRpb24uCiAgICAgIEhJbnN0cnVjdGlvbiBwYXJhbWV0ZXIgPQogICAgICAgICAgbmV3IEhQYXJhbWV0ZXJWYWx1ZShmaWVsZCwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlciBhcyB0aGUgbGFzdCBpbnN0cnVjdGlvbiBvZiB0aGUgZW50cnkgYmxvY2suCiAgICAgIC8vIElmIHRoZSBtZXRob2QgaXMgaW50ZXJjZXB0ZWQsIHdlIHdhbnQgdGhlIGFjdHVhbCByZWNlaXZlcgogICAgICAvLyB0byBiZSB0aGUgZmlyc3QgcGFyYW1ldGVyLgogICAgICBncmFwaC5lbnRyeS5hZGRCZWZvcmUoZ3JhcGguZW50cnkubGFzdCwgcGFyYW1ldGVyKTsKICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gX3R5cGVCdWlsZGVyLnBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mUGFyYW1ldGVyKAogICAgICAgICAgZmllbGQsIHBhcmFtZXRlciwgX2dldERhcnRUeXBlSWZWYWxpZChub2RlLnR5cGUpKTsKICAgICAgaWYgKCFfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzRWxpZGVkKSB7CiAgICAgICAgYWRkKG5ldyBIRmllbGRTZXQoX2Fic3RyYWN0VmFsdWVEb21haW4sIGZpZWxkLCB0aGlzSW5zdHJ1Y3Rpb24sIHZhbHVlKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICBub2RlLmluaXRpYWxpemVyLmFjY2VwdCh0aGlzKTsKICAgICAgICBISW5zdHJ1Y3Rpb24gZmllbGRWYWx1ZSA9IHBvcCgpOwogICAgICAgIEhJbnN0cnVjdGlvbiBjaGVja0luc3RydWN0aW9uID0KICAgICAgICAgICAgX3R5cGVCdWlsZGVyLnBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mQXNzaWdubWVudCgKICAgICAgICAgICAgICAgIGZpZWxkLCBmaWVsZFZhbHVlLCBfZ2V0RGFydFR5cGVJZlZhbGlkKG5vZGUudHlwZSkpOwogICAgICAgIHN0YWNrLmFkZChjaGVja0luc3RydWN0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIH0KICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gcG9wKCk7CiAgICAgIF9jbG9zZUFuZEdvdG9FeGl0KG5ldyBIUmV0dXJuKF9hYnN0cmFjdFZhbHVlRG9tYWluLCB2YWx1ZSwKICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRSZXR1cm4obm9kZSkpKTsKICAgIH0KICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgfQoKICBEYXJ0VHlwZSBfZ2V0RGFydFR5cGVJZlZhbGlkKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlIGlzIGlyLkludmFsaWRUeXBlKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKTsKICB9CgogIC8vLyBQb3BzIHRoZSBtb3N0IHJlY2VudCBpbnN0cnVjdGlvbiBmcm9tIHRoZSBzdGFjayBhbmQgZW5zdXJlcyB0aGF0IGl0IGlzIGEKICAvLy8gbm9uLW51bGwgYm9vbC4KICBISW5zdHJ1Y3Rpb24gcG9wQm9vbGlmaWVkKCkgewogICAgSEluc3RydWN0aW9uIHZhbHVlID0gcG9wKCk7CiAgICByZXR1cm4gX3R5cGVCdWlsZGVyLnBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mQ29uZGl0aW9uKAogICAgICAgIF9jdXJyZW50RnJhbWUubWVtYmVyLCB2YWx1ZSk7CiAgfQoKICAvLy8gRXh0ZW5kIGN1cnJlbnQgbWV0aG9kIHBhcmFtZXRlcnMgd2l0aCBwYXJhbWV0ZXJzIGZvciB0aGUgY2xhc3MgdHlwZQogIC8vLyBwYXJhbWV0ZXJzLiAgSWYgdGhlIGNsYXNzIGhhcyB0eXBlIHBhcmFtZXRlcnMgYnV0IGRvZXMgbm90IG5lZWQgdGhlbSwgYmluZAogIC8vLyB0byBgZHluYW1pY2AgKHJlcHJlc2VudGVkIGFzIGBudWxsYCkgc28gdGhlIGJpbmRpbmdzIGFyZSBhdmFpbGFibGUgZm9yCiAgLy8vIGJ1aWxkaW5nIHR5cGVzIHVwIHRoZSBpbmhlcml0YW5jZSBjaGFpbiBvZiBnZW5lcmF0aXZlIGNvbnN0cnVjdG9ycy4KICB2b2lkIF9hZGRDbGFzc1R5cGVWYXJpYWJsZXNJZk5lZWRlZChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAoIW1lbWJlci5pc0NvbnN0cnVjdG9yICYmIG1lbWJlciBpcyEgQ29uc3RydWN0b3JCb2R5RW50aXR5KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CiAgICBpZiAodGhpc1R5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGJvb2wgbmVlZHNUeXBlQXJndW1lbnRzID0gX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY2xzKTsKICAgIHRoaXNUeXBlLnR5cGVBcmd1bWVudHMuZm9yRWFjaCgoRGFydFR5cGUgX3R5cGVWYXJpYWJsZSkgewogICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZVR5cGUgPSBfdHlwZVZhcmlhYmxlOwogICAgICBISW5zdHJ1Y3Rpb24gcGFyYW07CiAgICAgIGlmIChuZWVkc1R5cGVBcmd1bWVudHMpIHsKICAgICAgICBwYXJhbSA9IGFkZFBhcmFtZXRlcigKICAgICAgICAgICAgdHlwZVZhcmlhYmxlVHlwZS5lbGVtZW50LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVW51c2VkLCBzbyBiaW5kIHRvIGBkeW5hbWljYC4KICAgICAgICBwYXJhbSA9IGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgICAgTG9jYWwgbG9jYWwgPSBsb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlVHlwZSk7CiAgICAgIGxvY2Fsc0hhbmRsZXIuZGlyZWN0TG9jYWxzW2xvY2FsXSA9IHBhcmFtOwogICAgfSk7CiAgfQoKICAvLy8gRXh0ZW5kIGN1cnJlbnQgbWV0aG9kIHBhcmFtZXRlcnMgd2l0aCBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24gdHlwZQogIC8vLyB2YXJpYWJsZXMuCiAgLy8vCiAgLy8vIFRPRE8oam9obm5pd2ludGhlcik6IERvIHdlIG5lZWQgdGhpcz8KICAvLy8gSWYgdGhlIG1ldGhvZCBoYXMgdHlwZSB2YXJpYWJsZXMgYnV0IGRvZXMgbm90IG5lZWQgdGhlbSwgYmluZCB0byBgZHluYW1pY2AKICAvLy8gKHJlcHJlc2VudGVkIGFzIGBudWxsYCkuCiAgdm9pZCBfYWRkRnVuY3Rpb25UeXBlVmFyaWFibGVzSWZOZWVkZWQoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyEgRnVuY3Rpb25FbnRpdHkpIHJldHVybjsKCiAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IG1lbWJlcjsKICAgIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gdHlwZVZhcmlhYmxlcyA9CiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoZnVuY3Rpb24pOwogICAgaWYgKHR5cGVWYXJpYWJsZXMuaXNFbXB0eSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBib29sIG5lZWRzVHlwZUFyZ3VtZW50cyA9IF9ydGlOZWVkLm1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhmdW5jdGlvbik7CiAgICBib29sIGVsaWRlVHlwZVBhcmFtZXRlcnMgPSBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPT0gMDsKICAgIGZvciAoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUKICAgICAgICBpbiBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhmdW5jdGlvbikpIHsKICAgICAgSEluc3RydWN0aW9uIHBhcmFtOwogICAgICBpZiAoZWxpZGVUeXBlUGFyYW1ldGVycykgewogICAgICAgIC8vIEFkZCBlbGlkZWQgdHlwZSBwYXJhbWV0ZXJzLgogICAgICAgIHBhcmFtID0gX2NvbXB1dGVUeXBlQXJndW1lbnREZWZhdWx0VmFsdWUoZnVuY3Rpb24sIHR5cGVWYXJpYWJsZSk7CiAgICAgIH0gZWxzZSBpZiAobmVlZHNUeXBlQXJndW1lbnRzKSB7CiAgICAgICAgcGFyYW0gPSBhZGRQYXJhbWV0ZXIoCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZS5lbGVtZW50LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVW51c2VkLCBzbyBiaW5kIHRvIGBkeW5hbWljYC4KICAgICAgICBwYXJhbSA9IGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgICAgTG9jYWwgbG9jYWwgPSBsb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlKTsKICAgICAgbG9jYWxzSGFuZGxlci5kaXJlY3RMb2NhbHNbbG9jYWxdID0gcGFyYW07CiAgICAgIF9mdW5jdGlvblR5cGVQYXJhbWV0ZXJMb2NhbHMuYWRkKGxvY2FsKTsKICAgIH0KICB9CgogIExpc3Q8TG9jYWw+IF9mdW5jdGlvblR5cGVQYXJhbWV0ZXJMb2NhbHMgPSA8TG9jYWw+W107CgogIC8vLyBCdWlsZHMgYSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLgogIC8vLwogIC8vLyBHZW5lcmF0aXZlIGNvbnN0cnVjdG9ycyBhcmUgYnVpbHQgaW4gc3RhZ2VzLCBpbiBlZmZlY3QgaW5saW5pbmcgdGhlCiAgLy8vIGluaXRpYWxpemVycyBhbmQgY29uc3RydWN0b3IgYm9kaWVzIHVwIHRoZSBpbmhlcml0YW5jZSBjaGFpbi4KICAvLy8KICAvLy8gIDEuIEV4dGVuZCBtZXRob2QgcGFyYW1ldGVycyB3aXRoIHBhcmFtZXRlcnMgdGhlIGNsYXNzJ3MgdHlwZSBwYXJhbWV0ZXJzLgogIC8vLwogIC8vLyAgMi4gQWRkIHR5cGUgY2hlY2tzIGZvciB2YWx1ZSBwYXJhbWV0ZXJzIChtaWdodCBuZWVkIHJlc3VsdCBvZiAoMSkpLgogIC8vLwogIC8vLyAgMy4gV2FsayBpbmhlcml0YW5jZSBjaGFpbiB0byBidWlsZCBiaW5kaW5ncyBmb3IgdHlwZSBwYXJhbWV0ZXJzIG9mCiAgLy8vICAgICBzdXBlcmNsYXNzZXMgYW5kIG1peGVkLWluIGNsYXNzZXMuCiAgLy8vCiAgLy8vICA0LiBDb2xsZWN0IGluaXRpYWxpemVyIHZhbHVlcy4gV2FsayB1cCBpbmhlcml0YW5jZSBjaGFpbiB0byBjb2xsZWN0IGZpZWxkCiAgLy8vICAgICBpbml0aWFsaXplcnMgZnJvbSBmaWVsZCBkZWNsYXJhdGlvbnMsIGluaXRpYWxpemluZyBwYXJhbWV0ZXJzIGFuZAogIC8vLyAgICAgaW5pdGlhbGl6ZXIuCiAgLy8vCiAgLy8vICA1LiBDcmVhdGUgcmVpZmllZCB0eXBlIGluZm9ybWF0aW9uIGZvciBpbnN0YW5jZS4KICAvLy8KICAvLy8gIDYuIEFsbG9jYXRlIGluc3RhbmNlIGFuZCBhc3NpZ24gaW5pdGlhbGl6ZXJzIGFuZCByZWlmaWVkIHR5cGUgaW5mb3JtYXRpb24KICAvLy8gICAgIHRvIGZpZWxkcyBieSBjYWxsaW5nIEphdmFTY3JpcHQgY29uc3RydWN0b3IuCiAgLy8vCiAgLy8vICA3LiBXYWxrIGluaGVyaXRhbmNlIGNoYWluIHRvIGNhbGwgb3IgaW5saW5lIGNvbnN0cnVjdG9yIGJvZGllcy4KICAvLy8KICAvLy8gQWxsIHRoZSBiaW5kaW5ncyBhcmUgcHV0IGluIHRoZSBjb25zdHJ1Y3RvcidzIGxvY2FscyBoYW5kbGVyLiBUaGUKICAvLy8gaW1wbGljYXRpb24gaXMgdGhhdCBhIGNsYXNzIGNhbm5vdCBiZSBleHRlbmRlZCBvciBtaXhlZC1pbiB0d2ljZS4gSWYgd2UgaW4KICAvLy8gZnV0dXJlIHN1cHBvcnQgcmVwZWF0ZWQgdXNlcyBvZiBhIG1peGluIGNsYXNzLCB3ZSBzaG91bGQgZG8gc28gYnkgY2xvbmluZwogIC8vLyB0aGUgbWl4aW4gY2xhc3MgaW4gdGhlIEtlcm5lbCBpbnB1dC4KICB2b2lkIF9idWlsZENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yLCBpci5Db25zdHJ1Y3RvciBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENyZWF0ZShub2RlKTsKICAgIENsYXNzRW50aXR5IGNscyA9IGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzOwoKICAgIGlmIChfaW5saW5pbmdTdGFjay5pc0VtcHR5KSB7CiAgICAgIF9vcGVuRnVuY3Rpb24oY29uc3RydWN0b3IsCiAgICAgICAgICBmdW5jdGlvbk5vZGU6IG5vZGUuZnVuY3Rpb24sCiAgICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmU6IGNvbnN0cnVjdG9yLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICAgIGNoZWNrczogVGFyZ2V0Q2hlY2tzLm5vbmUpOwogICAgfQoKICAgIC8vIFtjb25zdHJ1Y3RvckRhdGEuZmllbGRWYWx1ZXNdIGFjY3VtdWxhdGVzIHRoZSBmaWVsZCBpbml0aWFsaXplciB2YWx1ZXMsCiAgICAvLyB3aGljaCBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgaW5pdGlhbGl6ZXItbGlzdCBpbml0aWFsaXplcnMuCiAgICBDb25zdHJ1Y3RvckRhdGEgY29uc3RydWN0b3JEYXRhID0gQ29uc3RydWN0b3JEYXRhKCk7CiAgICBfYnVpbGRJbml0aWFsaXplcnMobm9kZSwgY29uc3RydWN0b3JEYXRhKTsKCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gY29uc3RydWN0b3JBcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgLy8gRG9pbmcgdGhpcyBpbnN0ZWFkIG9mIGZpZWxkVmFsdWVzLmZvckVhY2ggYmVjYXVzZSB3ZSBoYXZlbid0IGRlZmluZWQgdGhlCiAgICAvLyBvcmRlciBvZiB0aGUgYXJndW1lbnRzIGhlcmUuIFdlIGNhbiBkZWZpbmUgdGhhdCB3aXRoIEpFbGVtZW50cy4KICAgIGJvb2wgaXNDdXN0b21FbGVtZW50ID0gX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKSAmJgogICAgICAgICFfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscyk7CiAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgTGlzdDxGaWVsZEVudGl0eT4gZmllbGRzID0gPEZpZWxkRW50aXR5PltdOwogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoSW5zdGFuY2VGaWVsZChjbHMsCiAgICAgICAgKENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzLCBGaWVsZEVudGl0eSBtZW1iZXIpIHsKICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gY29uc3RydWN0b3JEYXRhLmZpZWxkVmFsdWVzW21lbWJlcl07CiAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9IF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShtZW1iZXIpOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgZmllbGREYXRhLmlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvciB8fAogICAgICAgICAgICAgICAgaXNDdXN0b21FbGVtZW50IHx8CiAgICAgICAgICAgICAgICByZXBvcnRlci5oYXNSZXBvcnRlZEVycm9yLAogICAgICAgICAgICAnTm8gaW5pdGlhbGl6ZXIgdmFsdWUgZm9yIGZpZWxkICR7bWVtYmVyfScpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghZmllbGREYXRhLmlzRWxpZGVkKSB7CiAgICAgICAgICBmaWVsZHMuYWRkKG1lbWJlcik7CiAgICAgICAgICBEYXJ0VHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGaWVsZFR5cGUobWVtYmVyKTsKICAgICAgICAgIHR5cGUgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KHR5cGUpOwogICAgICAgICAgY29uc3RydWN0b3JBcmd1bWVudHMuYWRkKF90eXBlQnVpbGRlcgogICAgICAgICAgICAgIC5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnQobWVtYmVyLCB2YWx1ZSwgdHlwZSkpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgX2FkZEltcGxpY2l0SW5zdGFudGlhdGlvbih0aGlzVHlwZSk7CiAgICBMaXN0PERhcnRUeXBlPiBpbnN0YW50aWF0ZWRUeXBlcyA9CiAgICAgICAgbmV3IExpc3Q8SW50ZXJmYWNlVHlwZT4uZnJvbShfY3VycmVudEltcGxpY2l0SW5zdGFudGlhdGlvbnMpOwoKICAgIEhJbnN0cnVjdGlvbiBuZXdPYmplY3Q7CiAgICBpZiAoaXNDdXN0b21FbGVtZW50KSB7CiAgICAgIC8vIEJ1bGsgYXNzaWduIHRvIHRoZSBpbml0aWFsaXplZCBmaWVsZHMuCiAgICAgIG5ld09iamVjdCA9IGdyYXBoLmV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXI7CiAgICAgIC8vIE51bGwgZ3VhcmQgZW5zdXJlcyBhbiBlcnJvciBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIGZyb20gYW4gZXhwbGljaXQKICAgICAgLy8gJ25ldycgb2YgdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgdmlhIGFuIHVwZ3JhZGUuIEl0IGlzIG9wdGltaXplZCBvdXQKICAgICAgLy8gaWYgdGhlcmUgYXJlIGZpZWxkIGluaXRpYWxpemVycy4KICAgICAgYWRkKG5ldyBIRmllbGRHZXQoCiAgICAgICAgICBudWxsLCBuZXdPYmplY3QsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgIGlzQXNzaWduYWJsZTogZmFsc2UpKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBhZGQobmV3IEhGaWVsZFNldChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgZmllbGRzW2ldLCBuZXdPYmplY3QsCiAgICAgICAgICAgIGNvbnN0cnVjdG9yQXJndW1lbnRzW2ldKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIENyZWF0ZSB0aGUgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uLCBpZiBuZWVkZWQuCiAgICAgIGJvb2wgbmVlZHNUeXBlQXJndW1lbnRzID0KICAgICAgICAgIGNsb3NlZFdvcmxkLnJ0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY2xzKTsKICAgICAgaWYgKG5lZWRzVHlwZUFyZ3VtZW50cykgewogICAgICAgIGlmIChvcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gdHlwZUFyZ3VtZW50ID0KICAgICAgICAgICAgICBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aSh0aGlzVHlwZSwgc291cmNlRWxlbWVudCk7CiAgICAgICAgICBjb25zdHJ1Y3RvckFyZ3VtZW50cy5hZGQodHlwZUFyZ3VtZW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUmVhZCB0aGUgdmFsdWVzIG9mIHRoZSB0eXBlIGFyZ3VtZW50cyBhbmQgY3JlYXRlIGEKICAgICAgICAgIC8vIEhUeXBlSW5mb0V4cHJlc3Npb24gdG8gc2V0IG9uIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdC4KICAgICAgICAgIExpc3Q8SEluc3RydWN0aW9uPiB0eXBlQXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgICAgICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CiAgICAgICAgICBmb3IgKERhcnRUeXBlIHR5cGVWYXJpYWJsZSBpbiB0aGlzVHlwZS50eXBlQXJndW1lbnRzKSB7CiAgICAgICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IGxvY2Fsc0hhbmRsZXIKICAgICAgICAgICAgICAgIC5yZWFkTG9jYWwobG9jYWxzSGFuZGxlci5nZXRUeXBlVmFyaWFibGVBc0xvY2FsKHR5cGVWYXJpYWJsZSkpOwogICAgICAgICAgICB0eXBlQXJndW1lbnRzLmFkZChhcmd1bWVudCk7CiAgICAgICAgICB9CgogICAgICAgICAgSEluc3RydWN0aW9uIHR5cGVJbmZvID0gbmV3IEhUeXBlSW5mb0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRSwKICAgICAgICAgICAgICB0aGlzVHlwZSwKICAgICAgICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICAgICAgICAgIGFkZCh0eXBlSW5mbyk7CiAgICAgICAgICBjb25zdHJ1Y3RvckFyZ3VtZW50cy5hZGQodHlwZUluZm8pOwogICAgICAgIH0KICAgICAgfQogICAgICBuZXdPYmplY3QgPSBuZXcgSENyZWF0ZShjbHMsIGNvbnN0cnVjdG9yQXJndW1lbnRzLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbEV4YWN0KGNscyksIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgaW5zdGFudGlhdGVkVHlwZXM6IGluc3RhbnRpYXRlZFR5cGVzLAogICAgICAgICAgaGFzUnRpSW5wdXQ6IG5lZWRzVHlwZUFyZ3VtZW50cyk7CgogICAgICBhZGQobmV3T2JqZWN0KTsKICAgIH0KICAgIF9yZW1vdmVJbXBsaWNpdEluc3RhbnRpYXRpb24odGhpc1R5cGUpOwoKICAgIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvcjsKICAgIC8vIEdlbmVyYXRlIGNhbGxzIHRvIHRoZSBjb25zdHJ1Y3RvciBib2RpZXMuCiAgICBmb3IgKGlyLkNvbnN0cnVjdG9yIGJvZHkgaW4gY29uc3RydWN0b3JEYXRhLmNvbnN0cnVjdG9yQ2hhaW4ucmV2ZXJzZWQpIHsKICAgICAgaWYgKF9pc0VtcHR5U3RhdGVtZW50KGJvZHkuZnVuY3Rpb24uYm9keSkpIGNvbnRpbnVlOwoKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGJvZHlDYWxsSW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgICAgaWYgKGlzQ3VzdG9tRWxlbWVudCkgewogICAgICAgIGlmIChpbnRlcmNlcHRvciA9PSBudWxsKSB7CiAgICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gbmV3IEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZShjbHMpOwogICAgICAgICAgaW50ZXJjZXB0b3IgPSBncmFwaC5hZGRDb25zdGFudChjb25zdGFudCwgY2xvc2VkV29ybGQpOwogICAgICAgIH0KICAgICAgICBib2R5Q2FsbElucHV0cy5hZGQoaW50ZXJjZXB0b3IpOwogICAgICB9CiAgICAgIGJvZHlDYWxsSW5wdXRzLmFkZChuZXdPYmplY3QpOwoKICAgICAgLy8gUGFzcyB1bmNhcHR1cmVkIGFyZ3VtZW50cyBmaXJzdCwgY2FwdHVyZWQgYXJndW1lbnRzIGluIGEgYm94LCB0aGVuIHR5cGUKICAgICAgLy8gYXJndW1lbnRzLgoKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgaW5saW5lZENvbnN0cnVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoYm9keSk7CgogICAgICBfaW5saW5lZEZyb20oCiAgICAgICAgICBpbmxpbmVkQ29uc3RydWN0b3IsIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYWxsKGJvZHksIGJvZHkpLAogICAgICAgICAgKCkgewogICAgICAgIENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvckJvZHkgPQogICAgICAgICAgICBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3RvckJvZHkoYm9keSk7CgogICAgICAgIHZvaWQgaGFuZGxlUGFyYW1ldGVyKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwge2Jvb2wgaXNFbGlkZWR9KSB7CiAgICAgICAgICBpZiAoaXNFbGlkZWQpIHJldHVybjsKCiAgICAgICAgICBMb2NhbCBwYXJhbWV0ZXIgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZSk7CiAgICAgICAgICAvLyBJZiBbcGFyYW1ldGVyXSBpcyBib3hlZCwgaXQgd2lsbCBiZSBhIGZpZWxkIGluIHRoZSBib3ggcGFzc2VkIGFzCiAgICAgICAgICAvLyB0aGUgbGFzdCBwYXJhbWV0ZXIuIFNvIG5vIG5lZWQgdG8gZGlyZWN0bHkgcGFzcyBpdC4KICAgICAgICAgIGlmICghbG9jYWxzSGFuZGxlci5pc0JveGVkKHBhcmFtZXRlcikpIHsKICAgICAgICAgICAgYm9keUNhbGxJbnB1dHMuYWRkKGxvY2Fsc0hhbmRsZXIucmVhZExvY2FsKHBhcmFtZXRlcikpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUHJvdmlkZSB0aGUgcGFyYW1ldGVycyB0byB0aGUgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciBib2R5LgogICAgICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyKF9lbGVtZW50TWFwLCBjb25zdHJ1Y3RvckJvZHksIGhhbmRsZVBhcmFtZXRlcik7CgogICAgICAgIC8vIElmIHRoZXJlIGFyZSBsb2NhbHMgdGhhdCBlc2NhcGUgKGkuZS4gbXV0YXRlZCBpbiBjbG9zdXJlcyksIHdlIHBhc3MgdGhlCiAgICAgICAgLy8gYm94IHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICBDYXB0dXJlZFNjb3BlIHNjb3BlRGF0YSA9CiAgICAgICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDYXB0dXJlZFNjb3BlKGNvbnN0cnVjdG9yQm9keSk7CiAgICAgICAgaWYgKHNjb3BlRGF0YS5yZXF1aXJlc0NvbnRleHRCb3gpIHsKICAgICAgICAgIGJvZHlDYWxsSW5wdXRzLmFkZChsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChzY29wZURhdGEuY29udGV4dCkpOwogICAgICAgIH0KCiAgICAgICAgLy8gUGFzcyB0eXBlIGFyZ3VtZW50cy4KICAgICAgICBDbGFzc0VudGl0eSBpbmxpbmVkQ29uc3RydWN0b3JDbGFzcyA9IGNvbnN0cnVjdG9yQm9keS5lbmNsb3NpbmdDbGFzczsKICAgICAgICBpZiAoY2xvc2VkV29ybGQucnRpTmVlZAogICAgICAgICAgICAuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoaW5saW5lZENvbnN0cnVjdG9yQ2xhc3MpKSB7CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0KICAgICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGlubGluZWRDb25zdHJ1Y3RvckNsYXNzKTsKICAgICAgICAgIGZvciAoRGFydFR5cGUgdHlwZVZhcmlhYmxlIGluIHRoaXNUeXBlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgICAgRGFydFR5cGUgcmVzdWx0ID0gbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dCh0eXBlVmFyaWFibGUpOwogICAgICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPQogICAgICAgICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQocmVzdWx0LCBzb3VyY2VFbGVtZW50KTsKICAgICAgICAgICAgYm9keUNhbGxJbnB1dHMuYWRkKGFyZ3VtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaXNDdXN0b21FbGVtZW50ICYmIC8vIFRPRE8oMTM4MzYpOiBGaXggaW5saW5pbmcuCiAgICAgICAgICAgIF90cnlJbmxpbmVNZXRob2QoY29uc3RydWN0b3JCb2R5LCBudWxsLCBudWxsLCBib2R5Q2FsbElucHV0cywgbnVsbCwKICAgICAgICAgICAgICAgIG5vZGUsIHNvdXJjZUluZm9ybWF0aW9uKSkgewogICAgICAgICAgcG9wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9pbnZva2VDb25zdHJ1Y3RvckJvZHkoYm9keSwgYm9keUNhbGxJbnB1dHMsCiAgICAgICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZERlY2xhcmF0aW9uKGNvbnN0cnVjdG9yKSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICBpZiAoX2lubGluaW5nU3RhY2suaXNFbXB0eSkgewogICAgICBfY2xvc2VBbmRHb3RvRXhpdCgKICAgICAgICAgIG5ldyBIUmV0dXJuKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBuZXdPYmplY3QsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgICB9IGVsc2UgewogICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKF9yZXR1cm5Mb2NhbCwgbmV3T2JqZWN0LAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIHN0YXRpYyBib29sIF9pc0VtcHR5U3RhdGVtZW50KGlyLlN0YXRlbWVudCBib2R5KSB7CiAgICBpZiAoYm9keSBpcyBpci5FbXB0eVN0YXRlbWVudCkgcmV0dXJuIHRydWU7CiAgICBpZiAoYm9keSBpcyBpci5CbG9jaykgcmV0dXJuIGJvZHkuc3RhdGVtZW50cy5ldmVyeShfaXNFbXB0eVN0YXRlbWVudCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIF9pbnZva2VDb25zdHJ1Y3RvckJvZHkoaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBNZW1iZXJFbnRpdHkgY29uc3RydWN0b3JCb2R5ID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3JCb2R5KGNvbnN0cnVjdG9yKTsKICAgIEhJbnZva2VDb25zdHJ1Y3RvckJvZHkgaW52b2tlID0gbmV3IEhJbnZva2VDb25zdHJ1Y3RvckJvZHkoY29uc3RydWN0b3JCb2R5LAogICAgICAgIGlucHV0cywgX2Fic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGFkZChpbnZva2UpOwogIH0KCiAgLy8vIFNldHMgY29udGV4dCBmb3IgZ2VuZXJhdGluZyBjb2RlIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBpbmxpbmluZwogIC8vLyBbaW5saW5lZFRhcmdldF0uCiAgdm9pZCBfaW5saW5lZEZyb20oTWVtYmVyRW50aXR5IGlubGluZWRUYXJnZXQsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGNhbGxTb3VyY2VJbmZvcm1hdGlvbiwgZigpKSB7CiAgICByZXBvcnRlci53aXRoQ3VycmVudEVsZW1lbnQoaW5saW5lZFRhcmdldCwgKCkgewogICAgICBfZW50ZXJGcmFtZShpbmxpbmVkVGFyZ2V0LCBjYWxsU291cmNlSW5mb3JtYXRpb24pOwogICAgICB2YXIgcmVzdWx0ID0gZigpOwogICAgICBfbGVhdmVGcmFtZSgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSk7CiAgfQoKICB2b2lkIF9lbnN1cmVUeXBlVmFyaWFibGVzRm9ySW5pdGlhbGl6ZXJzKAogICAgICBDb25zdHJ1Y3RvckRhdGEgY29uc3RydWN0b3JEYXRhLCBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcykgewogICAgaWYgKCFjb25zdHJ1Y3RvckRhdGEuaW5jbHVkZWRDbGFzc2VzLmFkZChlbmNsb3NpbmdDbGFzcykpIHJldHVybjsKICAgIGlmIChfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhlbmNsb3NpbmdDbGFzcykpIHsKICAgICAgLy8gSWYgW2VuY2xvc2luZ0NsYXNzXSBuZWVkcyBSVEksIHdlIGhhdmUgdG8gZ2l2ZSBhIHZhbHVlIHRvIGl0cyB0eXBlCiAgICAgIC8vIHBhcmFtZXRlcnMuIEZvciBhIHN1cGVyIGNvbnN0cnVjdG9yIGNhbGwsIHRoZSB0eXBlIGlzIHRoZSBzdXBlcnR5cGUKICAgICAgLy8gb2YgY3VycmVudCBjbGFzcy4gRm9yIGEgcmVkaXJlY3RpbmcgY29uc3RydWN0b3IsIHRoZSB0eXBlIGlzIHRoZQogICAgICAvLyBjdXJyZW50IHR5cGUuIFtMb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0XSB0YWtlcyBjYXJlIG9mIGJvdGguCiAgICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGVuY2xvc2luZ0NsYXNzKTsKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dCh0aGlzVHlwZSk7CiAgICAgIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cyA9IHR5cGUudHlwZUFyZ3VtZW50czsKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZVZhcmlhYmxlcyA9IHRoaXNUeXBlLnR5cGVBcmd1bWVudHM7CiAgICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09IHR5cGVWYXJpYWJsZXMubGVuZ3RoKTsKICAgICAgSXRlcmF0b3I8RGFydFR5cGU+IHZhcmlhYmxlcyA9IHR5cGVWYXJpYWJsZXMuaXRlcmF0b3I7CiAgICAgIHR5cGUudHlwZUFyZ3VtZW50cy5mb3JFYWNoKChEYXJ0VHlwZSBhcmd1bWVudCkgewogICAgICAgIHZhcmlhYmxlcy5tb3ZlTmV4dCgpOwogICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlID0gdmFyaWFibGVzLmN1cnJlbnQ7CiAgICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbCgKICAgICAgICAgICAgbG9jYWxzSGFuZGxlci5nZXRUeXBlVmFyaWFibGVBc0xvY2FsKHR5cGVWYXJpYWJsZSksCiAgICAgICAgICAgIF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KGFyZ3VtZW50LCBzb3VyY2VFbGVtZW50KSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8vIENvbGxlY3RzIHRoZSB2YWx1ZXMgZm9yIGZpZWxkIGluaXRpYWxpemVycyBmb3IgdGhlIGRpcmVjdCBmaWVsZHMgb2YKICAvLy8gW2NsYXp6XS4KICB2b2lkIF9jb2xsZWN0RmllbGRWYWx1ZXMoaXIuQ2xhc3MgY2xhenosIENvbnN0cnVjdG9yRGF0YSBjb25zdHJ1Y3RvckRhdGEpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IF9lbGVtZW50TWFwLmdldENsYXNzKGNsYXp6KTsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaERpcmVjdEluc3RhbmNlRmllbGQoY2xzLCAoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgICAgX2Vuc3VyZVR5cGVWYXJpYWJsZXNGb3JJbml0aWFsaXplcnMoCiAgICAgICAgICBjb25zdHJ1Y3RvckRhdGEsIGZpZWxkLmVuY2xvc2luZ0NsYXNzKTsKCiAgICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oZmllbGQpOwogICAgICBpci5GaWVsZCBub2RlOwogICAgICBzd2l0Y2ggKGRlZmluaXRpb24ua2luZCkgewogICAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICAgICAgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBmYWlsZWRBdChmaWVsZCwgIlVuZXhwZWN0ZWQgbWVtYmVyIGRlZmluaXRpb24gJGRlZmluaXRpb24uIik7CiAgICAgIH0KCiAgICAgIGJvb2wgaWdub3JlQWxsb2NhdG9yQW5hbHlzaXMgPSBmYWxzZTsKICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykpIHsKICAgICAgICAvLyBATmF0aXZlIGNsYXNzZXMgaGF2ZSAnZmllbGRzJyB3aGljaCBhcmUgcmVhbGx5IGdldHRlcnMvc2V0dGVyLiAgRG8KICAgICAgICAvLyBub3QgdHJ5IHRvIGluaXRpYWxpemUgZS5nLiAndGFnTmFtZScuCiAgICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSkgcmV0dXJuOwogICAgICAgIC8vIEZpZWxkcyB0aGF0IHN1cnZpdmUgdGhpcyB0ZXN0IGFyZSBmaWVsZHMgb2YgY3VzdG9tIGVsZW1lbnRzLgogICAgICAgIGlnbm9yZUFsbG9jYXRvckFuYWx5c2lzID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKGlnbm9yZUFsbG9jYXRvckFuYWx5c2lzIHx8CiAgICAgICAgICAhX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKS5pc0luaXRpYWxpemVkSW5BbGxvY2F0b3IpIHsKICAgICAgICBpZiAobm9kZS5pbml0aWFsaXplciA9PSBudWxsKSB7CiAgICAgICAgICBjb25zdHJ1Y3RvckRhdGEuZmllbGRWYWx1ZXNbZmllbGRdID0KICAgICAgICAgICAgICBncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBDb21waWxlIHRoZSBpbml0aWFsaXplciBpbiB0aGUgY29udGV4dCBvZiB0aGUgZmllbGQgc28gd2Uga25vdyB0aGF0CiAgICAgICAgICAvLyBjbGFzcyB0eXBlIHBhcmFtZXRlcnMgYXJlIGFjY2Vzc2VkIGFzIHZhbHVlcy4KICAgICAgICAgIC8vIFRPRE8oc3JhKTogSXQgd291bGQgYmUgc3VmZmljaWVudCB0byBrbm93IHRoZSBjb250ZXh0IHdhcyBhIGZpZWxkCiAgICAgICAgICAvLyBpbml0aWFsaXplci4KICAgICAgICAgIF9pbmxpbmVkRnJvbShmaWVsZCwKICAgICAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQXNzaWdubWVudChub2RlLmluaXRpYWxpemVyKSwgKCkgewogICAgICAgICAgICBub2RlLmluaXRpYWxpemVyLmFjY2VwdCh0aGlzKTsKICAgICAgICAgICAgY29uc3RydWN0b3JEYXRhLmZpZWxkVmFsdWVzW2ZpZWxkXSA9IHBvcCgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIHN0YXRpYyBib29sIF9pc1JlZGlyZWN0aW5nQ29uc3RydWN0b3IoaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IpID0+CiAgICAgIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycwogICAgICAgICAgLmFueSgoaW5pdGlhbGl6ZXIpID0+IGluaXRpYWxpemVyIGlzIGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpOwoKICAvLy8gQ29sbGVjdHMgZmllbGQgaW5pdGlhbGl6ZXJzIGFsbCB0aGUgd2F5IHVwIHRoZSBpbmhlcml0YW5jZSBjaGFpbi4KICB2b2lkIF9idWlsZEluaXRpYWxpemVycygKICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIENvbnN0cnVjdG9yRGF0YSBjb25zdHJ1Y3RvckRhdGEpIHsKICAgIGFzc2VydCgKICAgICAgICBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikgPT0gX2xvY2Fsc01hcC5jdXJyZW50TWVtYmVyLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBfbG9jYWxzTWFwLmN1cnJlbnRNZW1iZXIsCiAgICAgICAgICAgICdFeHBlY3RlZCAke19sb2NhbHNNYXAuY3VycmVudE1lbWJlcn0gJwogICAgICAgICAgICAnYnV0IGZvdW5kICR7X2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpfS4nKSk7CiAgICBjb25zdHJ1Y3RvckRhdGEuY29uc3RydWN0b3JDaGFpbi5hZGQoY29uc3RydWN0b3IpOwoKICAgIGlmICghX2lzUmVkaXJlY3RpbmdDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikpIHsKICAgICAgLy8gQ29tcHV0ZSB2YWx1ZXMgZm9yIGZpZWxkIGluaXRpYWxpemVycywgYnV0IG9ubHkgaWYgdGhpcyBpcyBub3QgYQogICAgICAvLyByZWRpcmVjdGluZyBjb25zdHJ1Y3Rvciwgc2luY2UgdGhlIHRhcmdldCB3aWxsIGNvbXB1dGUgdGhlIGZpZWxkcy4KICAgICAgX2NvbGxlY3RGaWVsZFZhbHVlcyhjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcywgY29uc3RydWN0b3JEYXRhKTsKICAgIH0KICAgIHZhciBmb3VuZFN1cGVyT3JSZWRpcmVjdENhbGwgPSBmYWxzZTsKICAgIGZvciAodmFyIGluaXRpYWxpemVyIGluIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycykgewogICAgICBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuRmllbGRJbml0aWFsaXplcikgewogICAgICAgIEZpZWxkRW50aXR5IGZpZWxkID0gX2VsZW1lbnRNYXAuZ2V0RmllbGQoaW5pdGlhbGl6ZXIuZmllbGQpOwogICAgICAgIGlmICghX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKS5pc0luaXRpYWxpemVkSW5BbGxvY2F0b3IpIHsKICAgICAgICAgIGluaXRpYWxpemVyLnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgICAgICAgIGNvbnN0cnVjdG9yRGF0YS5maWVsZFZhbHVlc1tmaWVsZF0gPSBwb3AoKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuU3VwZXJJbml0aWFsaXplcikgewogICAgICAgIGFzc2VydCghZm91bmRTdXBlck9yUmVkaXJlY3RDYWxsKTsKICAgICAgICBmb3VuZFN1cGVyT3JSZWRpcmVjdENhbGwgPSB0cnVlOwogICAgICAgIF9pbmxpbmVTdXBlckluaXRpYWxpemVyKGluaXRpYWxpemVyLCBjb25zdHJ1Y3RvckRhdGEsIGNvbnN0cnVjdG9yKTsKICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyKSB7CiAgICAgICAgYXNzZXJ0KCFmb3VuZFN1cGVyT3JSZWRpcmVjdENhbGwpOwogICAgICAgIGZvdW5kU3VwZXJPclJlZGlyZWN0Q2FsbCA9IHRydWU7CiAgICAgICAgX2lubGluZVJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgICAgICAgIGluaXRpYWxpemVyLCBjb25zdHJ1Y3RvckRhdGEsIGNvbnN0cnVjdG9yKTsKICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5Mb2NhbEluaXRpYWxpemVyKSB7CiAgICAgICAgLy8gTG9jYWxJbml0aWFsaXplciBpcyBsaWtlIGEgbGV0LWV4cHJlc3Npb24gdGhhdCBpcyBpbiBzY29wZSBmb3IgdGhlCiAgICAgICAgLy8gcmVzdCBvZiB0aGUgaW5pdGlhbGl6ZXJzLgogICAgICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBpbml0aWFsaXplci52YXJpYWJsZTsKICAgICAgICBhc3NlcnQodmFyaWFibGUuaXNGaW5hbCk7CiAgICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIuYWNjZXB0KHRoaXMpOwogICAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IHBvcCgpOwogICAgICAgIC8vIFRPRE8oc3JhKTogQXBwbHkgaW5mZXJyZWQgdHlwZSBpbmZvcm1hdGlvbi4KICAgICAgICBfbGV0QmluZGluZ3NbdmFyaWFibGVdID0gdmFsdWU7CiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuQXNzZXJ0SW5pdGlhbGl6ZXIpIHsKICAgICAgICAvLyBBc3NlcnQgaW4gaW5pdGlhbGl6ZXIgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaW4gZGFydDJqcy4KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IGFzc2VydCBpbiBpbml0aWFsaXplci4KICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5JbnZhbGlkSW5pdGlhbGl6ZXIpIHsKICAgICAgICBhc3NlcnQoZmFsc2UsICdpci5JbnZhbGlkSW5pdGlhbGl6ZXIgbm90IGhhbmRsZWQnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoZmFsc2UsICdVbmhhbmRsZWQgaW5pdGlhbGl6ZXIgaXIuJHtpbml0aWFsaXplci5ydW50aW1lVHlwZX0nKTsKICAgICAgfQogICAgfQoKICAgIGlmICghZm91bmRTdXBlck9yUmVkaXJlY3RDYWxsKSB7CiAgICAgIGFzc2VydCgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldENsYXNzKGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzKSA9PQogICAgICAgICAgICAgICAgICBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyB8fAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5hbnkoX0Vycm9uZW91c0luaXRpYWxpemVyVmlzaXRvci5jaGVjayksCiAgICAgICAgICAnQWxsIGNvbnN0cnVjdG9ycyBzaG91bGQgaGF2ZSBzdXBlci0gb3IgcmVkaXJlY3RpbmctIGluaXRpYWxpemVycywnCiAgICAgICAgICAnIGV4Y2VwdCBPYmplY3QoKScKICAgICAgICAgICcgJHtjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnN9Jyk7CiAgICB9CiAgfQoKICBMaXN0PEhJbnN0cnVjdGlvbj4gX25vcm1hbGl6ZUFuZEJ1aWxkQXJndW1lbnRzKAogICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24sIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHZhciBidWlsdEFyZ3VtZW50cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICB2YXIgcG9zaXRpb25hbEluZGV4ID0gMDsKICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZvckVhY2goKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgICBpZiAocG9zaXRpb25hbEluZGV4IDwgYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoKSB7CiAgICAgICAgYXJndW1lbnRzLnBvc2l0aW9uYWxbcG9zaXRpb25hbEluZGV4KytdLmFjY2VwdCh0aGlzKTsKICAgICAgICBidWlsdEFyZ3VtZW50cy5hZGQocG9wKCkpOwogICAgICB9IGVsc2UgewogICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSA9CiAgICAgICAgICAgIF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZS5pbml0aWFsaXplciwgaW1wbGljaXROdWxsOiB0cnVlKTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgIGNvbnN0YW50VmFsdWUgIT0gbnVsbCwKICAgICAgICAgICAgZmFpbGVkQXQoX2VsZW1lbnRNYXAuZ2V0TWV0aG9kKGZ1bmN0aW9uLnBhcmVudCksCiAgICAgICAgICAgICAgICAnTm8gY29uc3RhbnQgY29tcHV0ZWQgZm9yICRub2RlJykpOwogICAgICAgIGJ1aWx0QXJndW1lbnRzLmFkZChncmFwaC5hZGRDb25zdGFudChjb25zdGFudFZhbHVlLCBjbG9zZWRXb3JsZCkpOwogICAgICB9CiAgICB9KTsKICAgIGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy50b0xpc3QoKQogICAgICAuLnNvcnQobmFtZWRPcmRlcmluZykKICAgICAgLi5mb3JFYWNoKChpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgICAgICB2YXIgY29ycmVzcG9uZGluZ05hbWVkID0gYXJndW1lbnRzLm5hbWVkCiAgICAgICAgICAgIC5maXJzdFdoZXJlKChuYW1lZCkgPT4gbmFtZWQubmFtZSA9PSBub2RlLm5hbWUsIG9yRWxzZTogKCkgPT4gbnVsbCk7CiAgICAgICAgaWYgKGNvcnJlc3BvbmRpbmdOYW1lZCAhPSBudWxsKSB7CiAgICAgICAgICBjb3JyZXNwb25kaW5nTmFtZWQudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgICAgICAgYnVpbHRBcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudFZhbHVlID0gX2VsZW1lbnRNYXAKICAgICAgICAgICAgICAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlLmluaXRpYWxpemVyLCBpbXBsaWNpdE51bGw6IHRydWUpOwogICAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAgIGNvbnN0YW50VmFsdWUgIT0gbnVsbCwKICAgICAgICAgICAgICBmYWlsZWRBdChfZWxlbWVudE1hcC5nZXRNZXRob2QoZnVuY3Rpb24ucGFyZW50KSwKICAgICAgICAgICAgICAgICAgJ05vIGNvbnN0YW50IGNvbXB1dGVkIGZvciAkbm9kZScpKTsKICAgICAgICAgIGJ1aWx0QXJndW1lbnRzLmFkZChncmFwaC5hZGRDb25zdGFudChjb25zdGFudFZhbHVlLCBjbG9zZWRXb3JsZCkpOwogICAgICAgIH0KICAgICAgfSk7CgogICAgcmV0dXJuIGJ1aWx0QXJndW1lbnRzOwogIH0KCiAgLy8vIElubGluZXMgdGhlIGdpdmVuIHJlZGlyZWN0aW5nIFtjb25zdHJ1Y3Rvcl0ncyBpbml0aWFsaXplcnMgYnkgY29sbGVjdGluZwogIC8vLyBpdHMgZmllbGQgdmFsdWVzIGFuZCBidWlsZGluZyBpdHMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXJzLiBXZSB2aXNpdCBzdXBlcgogIC8vLyBjb25zdHJ1Y3RvcnMgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIFtPYmplY3RdIGNvbnN0cnVjdG9yLgogIHZvaWQgX2lubGluZVJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplciBpbml0aWFsaXplciwKICAgICAgQ29uc3RydWN0b3JEYXRhIGNvbnN0cnVjdG9yRGF0YSwgaXIuQ29uc3RydWN0b3IgY2FsbGVyKSB7CiAgICB2YXIgc3VwZXJPclJlZGlyZWN0Q29uc3RydWN0b3IgPSBpbml0aWFsaXplci50YXJnZXQ7CiAgICB2YXIgYXJndW1lbnRzID0gX25vcm1hbGl6ZUFuZEJ1aWxkQXJndW1lbnRzKAogICAgICAgIHN1cGVyT3JSZWRpcmVjdENvbnN0cnVjdG9yLmZ1bmN0aW9uLCBpbml0aWFsaXplci5hcmd1bWVudHMpOwoKICAgIC8vIFJlZGlyZWN0aW5nIGluaXRpYWxpemVyIGFscmVhZHkgaGFzIFtsb2NhbHNIYW5kbGVyXSBiaW5kaW5ncyBmb3IgdHlwZQogICAgLy8gcGFyYW1ldGVycyBmcm9tIHRoZSByZWRpcmVjdGluZyBjb25zdHJ1Y3Rvci4KCiAgICAvLyBGb3IgcmVkaXJlY3RpbmcgY29uc3RydWN0b3JzLCB0aGUgZmllbGRzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgbGF0ZXIgYnkgdGhlCiAgICAvLyBlZmZlY3RpdmUgdGFyZ2V0LCBzbyB3ZSBkb24ndCBkbyBpdCBoZXJlLgoKICAgIF9pbmxpbmVTdXBlck9yUmVkaXJlY3RDb21tb24oaW5pdGlhbGl6ZXIsIHN1cGVyT3JSZWRpcmVjdENvbnN0cnVjdG9yLAogICAgICAgIGFyZ3VtZW50cywgY29uc3RydWN0b3JEYXRhLCBjYWxsZXIpOwogIH0KCiAgLy8vIElubGluZXMgdGhlIGdpdmVuIHN1cGVyIFtjb25zdHJ1Y3Rvcl0ncyBpbml0aWFsaXplcnMgYnkgY29sbGVjdGluZyBpdHMKICAvLy8gZmllbGQgdmFsdWVzIGFuZCBidWlsZGluZyBpdHMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXJzLiBXZSB2aXNpdCBzdXBlcgogIC8vLyBjb25zdHJ1Y3RvcnMgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIFtPYmplY3RdIGNvbnN0cnVjdG9yLgogIHZvaWQgX2lubGluZVN1cGVySW5pdGlhbGl6ZXIoaXIuU3VwZXJJbml0aWFsaXplciBpbml0aWFsaXplciwKICAgICAgQ29uc3RydWN0b3JEYXRhIGNvbnN0cnVjdG9yRGF0YSwgaXIuQ29uc3RydWN0b3IgY2FsbGVyKSB7CiAgICB2YXIgdGFyZ2V0ID0gaW5pdGlhbGl6ZXIudGFyZ2V0OwogICAgdmFyIGFyZ3VtZW50cyA9CiAgICAgICAgX25vcm1hbGl6ZUFuZEJ1aWxkQXJndW1lbnRzKHRhcmdldC5mdW5jdGlvbiwgaW5pdGlhbGl6ZXIuYXJndW1lbnRzKTsKCiAgICBpci5DbGFzcyBjYWxsZXJDbGFzcyA9IGNhbGxlci5lbmNsb3NpbmdDbGFzczsKICAgIGlyLlN1cGVydHlwZSBzdXBlcnR5cGUgPSBjYWxsZXJDbGFzcy5zdXBlcnR5cGU7CgogICAgLy8gVGhlIGNsYXNzIG9mIHRoZSBzdXBlci1jb25zdHJ1Y3RvciBtYXkgbm90IGJlIHRoZSBzdXBlcnR5cGUgY2xhc3MuIEluCiAgICAvLyB0aGlzIGNhc2UsIHdlIG11c3QgZ28gdXAgdGhlIGNsYXNzIGhpZXJhcmNoeSB1bnRpbCB3ZSByZWFjaCB0aGUgY2xhc3MKICAgIC8vIGNvbnRhaW5pbmcgdGhlIHN1cGVyLWNvbnN0cnVjdG9yLgogICAgd2hpbGUgKHN1cGVydHlwZS5jbGFzc05vZGUgIT0gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzKSB7CiAgICAgIC8vIEZpZWxkcyBmcm9tIHVubmFtZWQgbWl4aW4gYXBwbGljYXRpb24gY2xhc3NlcyAoaWUgT2JqZWN0JkZvbykgZ2V0CiAgICAgIC8vICJjb2xsZWN0ZWQiIHdpdGggdGhlIHJlZ3VsYXIgc3VwZXJ0eXBlIGZpZWxkcywgc28gd2UgbXVzdCBiaW5kIHR5cGUKICAgICAgLy8gcGFyYW1ldGVycyBmcm9tIGJvdGggdGhlIHN1cGVydHlwZSBhbmQgdGhlIHN1cGVydHlwZSdzIG1peGluIGNsYXNzZXMKICAgICAgLy8gYmVmb3JlIGNvbGxlY3RpbmcgdGhlIGZpZWxkIHZhbHVlcy4KICAgICAgX2NvbGxlY3RGaWVsZFZhbHVlcyhzdXBlcnR5cGUuY2xhc3NOb2RlLCBjb25zdHJ1Y3RvckRhdGEpOwogICAgICBzdXBlcnR5cGUgPSBzdXBlcnR5cGUuY2xhc3NOb2RlLnN1cGVydHlwZTsKICAgIH0KICAgIHN1cGVydHlwZSA9IHN1cGVydHlwZS5jbGFzc05vZGUuc3VwZXJ0eXBlOwoKICAgIF9pbmxpbmVTdXBlck9yUmVkaXJlY3RDb21tb24oCiAgICAgICAgaW5pdGlhbGl6ZXIsIHRhcmdldCwgYXJndW1lbnRzLCBjb25zdHJ1Y3RvckRhdGEsIGNhbGxlcik7CiAgfQoKICB2b2lkIF9pbmxpbmVTdXBlck9yUmVkaXJlY3RDb21tb24oCiAgICAgIGlyLkluaXRpYWxpemVyIGluaXRpYWxpemVyLAogICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cywKICAgICAgQ29uc3RydWN0b3JEYXRhIGNvbnN0cnVjdG9yRGF0YSwKICAgICAgaXIuQ29uc3RydWN0b3IgY2FsbGVyKSB7CiAgICB2YXIgaW5kZXggPSAwOwoKICAgIENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQgPSBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcik7CiAgICBTY29wZUluZm8gb2xkU2NvcGVJbmZvID0gbG9jYWxzSGFuZGxlci5zY29wZUluZm87CgogICAgX2lubGluZWRGcm9tKAogICAgICAgIGVsZW1lbnQsIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYWxsKGluaXRpYWxpemVyLCBpbml0aWFsaXplciksCiAgICAgICAgKCkgewogICAgICB2b2lkIGhhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgICAgICBMb2NhbCBwYXJhbWV0ZXIgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZSk7CiAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gYXJndW1lbnRzW2luZGV4KytdOwogICAgICAgIC8vIEJlY2F1c2Ugd2UgYXJlIGlubGluaW5nIHRoZSBpbml0aWFsaXplciwgd2UgbXVzdCB1cGRhdGUKICAgICAgICAvLyB3aGF0IHdhcyBnaXZlbiBhcyBwYXJhbWV0ZXIuIFRoaXMgd2lsbCBiZSB1c2VkIGluIGNhc2UKICAgICAgICAvLyB0aGVyZSBpcyBhIHBhcmFtZXRlciBjaGVjayBleHByZXNzaW9uIGluIHRoZSBpbml0aWFsaXplci4KICAgICAgICBwYXJhbWV0ZXJzW3BhcmFtZXRlcl0gPSBhcmd1bWVudDsKICAgICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKHBhcmFtZXRlciwgYXJndW1lbnQpOwogICAgICB9CgogICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5mb3JFYWNoKGhhbmRsZVBhcmFtZXRlcik7CiAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy50b0xpc3QoKQogICAgICAgIC4uc29ydChuYW1lZE9yZGVyaW5nKQogICAgICAgIC4uZm9yRWFjaChoYW5kbGVQYXJhbWV0ZXIpOwoKICAgICAgX2Vuc3VyZVR5cGVWYXJpYWJsZXNGb3JJbml0aWFsaXplcnMoCiAgICAgICAgICBjb25zdHJ1Y3RvckRhdGEsIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpOwoKICAgICAgLy8gU2V0IHRoZSBsb2NhbHMgaGFuZGxlciBzdGF0ZSBhcyBpZiB3ZSB3ZXJlIGlubGluaW5nIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgU2NvcGVJbmZvIG5ld1Njb3BlSW5mbyA9IF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRTY29wZUluZm8oZWxlbWVudCk7CiAgICAgIGxvY2Fsc0hhbmRsZXIuc2NvcGVJbmZvID0gbmV3U2NvcGVJbmZvOwogICAgICBsb2NhbHNIYW5kbGVyLmVudGVyU2NvcGUoX2Nsb3N1cmVEYXRhTG9va3VwLmdldENhcHR1cmVkU2NvcGUoZWxlbWVudCksCiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkRGVjbGFyYXRpb24oZWxlbWVudCkpOwogICAgICBfYnVpbGRJbml0aWFsaXplcnMoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yRGF0YSk7CiAgICB9KTsKICAgIGxvY2Fsc0hhbmRsZXIuc2NvcGVJbmZvID0gb2xkU2NvcGVJbmZvOwogIH0KCiAgLy8vIENvbnN0cnVjdHMgYSBzcGVjaWFsIHNpZ25hdHVyZSBmdW5jdGlvbiBmb3IgYSBjbG9zdXJlLiBJdCBpcyB1bmlxdWUgaW4KICAvLy8gdGhhdCBubyBjb3JyZXNwb25kaW5nIGlyLk5vZGUgYWN0dWFsbHkgZXhpc3RzIGZvciBpdC4gV2UganVzdCB1c2UgdGhlCiAgLy8vIHRhcmdldEVsZW1lbnQuCiAgdm9pZCBfYnVpbGRNZXRob2RTaWduYXR1cmUoaXIuRnVuY3Rpb25Ob2RlIG9yaWdpbmFsQ2xvc3VyZU5vZGUpIHsKICAgIF9vcGVuRnVuY3Rpb24odGFyZ2V0RWxlbWVudCwgY2hlY2tzOiBUYXJnZXRDaGVja3Mubm9uZSk7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gdHlwZUFyZ3VtZW50cyA9IDxISW5zdHJ1Y3Rpb24+W107CgogICAgLy8gQWRkIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzLgogICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0RnVuY3Rpb25UeXBlKG9yaWdpbmFsQ2xvc3VyZU5vZGUpOwogICAgZnVuY3Rpb25UeXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlVHlwZSkgewogICAgICBEYXJ0VHlwZSByZXN1bHQgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KHR5cGVWYXJpYWJsZVR5cGUpOwogICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPQogICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQocmVzdWx0LCBzb3VyY2VFbGVtZW50KTsKICAgICAgdHlwZUFyZ3VtZW50cy5hZGQoYXJndW1lbnQpOwogICAgfSk7CiAgICBwdXNoKG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUsCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0RnVuY3Rpb25UeXBlKG9yaWdpbmFsQ2xvc3VyZU5vZGUpLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZnVuY3Rpb25UeXBlKSk7CiAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBwb3AoKTsKICAgIGNsb3NlKG5ldyBIUmV0dXJuKF9hYnN0cmFjdFZhbHVlRG9tYWluLCB2YWx1ZSwKICAgICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFJldHVybihvcmlnaW5hbENsb3N1cmVOb2RlKSkpCiAgICAgICAgLmFkZFN1Y2Nlc3NvcihncmFwaC5leGl0KTsKCiAgICBfY2xvc2VGdW5jdGlvbigpOwogIH0KCiAgLy8vIENvbnN0cnVjdHMgYSBzcGVjaWFsIHNpZ25hdHVyZSBmdW5jdGlvbiBmb3IgYSBjbG9zdXJlLgogIHZvaWQgX2J1aWxkTWV0aG9kU2lnbmF0dXJlTmV3UnRpKGlyLkZ1bmN0aW9uTm9kZSBvcmlnaW5hbENsb3N1cmVOb2RlKSB7CiAgICAvLyBUaGUgc2lnbmF0dXJlIGZ1bmN0aW9uIGhhcyBubyBjb3JyZXNwb25kaW5nIGlyLk5vZGUsIHNvIHdlIGp1c3QgdXNlIHRoZQogICAgLy8gdGFyZ2V0RWxlbWVudCB0byBzZXQgdXAgdGhlIHR5cGUgZW52aXJvbm1lbnQuCiAgICBfb3BlbkZ1bmN0aW9uKHRhcmdldEVsZW1lbnQsIGNoZWNrczogVGFyZ2V0Q2hlY2tzLm5vbmUpOwogICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0RnVuY3Rpb25UeXBlKG9yaWdpbmFsQ2xvc3VyZU5vZGUpOwogICAgSEluc3RydWN0aW9uIHJ0aSA9CiAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnROZXdSdGkoZnVuY3Rpb25UeXBlLCBzb3VyY2VFbGVtZW50KTsKICAgIGNsb3NlKG5ldyBIUmV0dXJuKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBydGksCiAgICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRSZXR1cm4ob3JpZ2luYWxDbG9zdXJlTm9kZSkpKQogICAgICAgIC5hZGRTdWNjZXNzb3IoZ3JhcGguZXhpdCk7CiAgICBfY2xvc2VGdW5jdGlvbigpOwogIH0KCiAgLy8vIEJ1aWxkcyBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIGJvZHkuCiAgdm9pZCBfYnVpbGRDb25zdHJ1Y3RvckJvZHkoaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICAgIEZ1bmN0aW9uRW50aXR5IGNvbnN0cnVjdG9yQm9keSA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3JCb2R5KGNvbnN0cnVjdG9yKTsKICAgIF9vcGVuRnVuY3Rpb24oY29uc3RydWN0b3JCb2R5LAogICAgICAgIGZ1bmN0aW9uTm9kZTogY29uc3RydWN0b3IuZnVuY3Rpb24sCiAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlOiBjb25zdHJ1Y3RvckJvZHkucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGNoZWNrczogVGFyZ2V0Q2hlY2tzLm5vbmUpOwogICAgY29uc3RydWN0b3IuZnVuY3Rpb24uYm9keS5hY2NlcHQodGhpcyk7CiAgICBfY2xvc2VGdW5jdGlvbigpOwogIH0KCiAgLy8vIEJ1aWxkcyBhIFNTQSBncmFwaCBmb3IgRnVuY3Rpb25Ob2RlcywgZm91bmQgaW4gRnVuY3Rpb25FeHByZXNzaW9ucyBhbmQKICAvLy8gUHJvY2VkdXJlcy4KICB2b2lkIF9idWlsZEZ1bmN0aW9uTm9kZSgKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUpIHsKICAgIGlmIChmdW5jdGlvbk5vZGUuYXN5bmNNYXJrZXIgIT0gaXIuQXN5bmNNYXJrZXIuU3luYykgewogICAgICBfYnVpbGRHZW5lcmF0b3IoZnVuY3Rpb24sIGZ1bmN0aW9uTm9kZSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBfb3BlbkZ1bmN0aW9uKGZ1bmN0aW9uLAogICAgICAgIGZ1bmN0aW9uTm9kZTogZnVuY3Rpb25Ob2RlLAogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZTogZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGNoZWNrczogX2NoZWNrc0ZvckZ1bmN0aW9uKGZ1bmN0aW9uKSk7CgogICAgLy8gSWYgW2Z1bmN0aW9uTm9kZV0gaXMgYG9wZXJhdG9yPT1gIHdlIGV4cGxpY2l0bHkgYWRkIGEgbnVsbCBjaGVjayBhdCB0aGUKICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgbWV0aG9kLiBUaGlzIGlzIHRvIGF2b2lkIGhhdmluZyBjYWxsIHNpdGVzIGRvIHRoZSBudWxsCiAgICAvLyBjaGVjay4KICAgIGlmIChmdW5jdGlvbi5uYW1lID09ICc9PScpIHsKICAgICAgaWYgKCFfY29tbW9uRWxlbWVudHMub3BlcmF0b3JFcUhhbmRsZXNOdWxsQXJndW1lbnQoZnVuY3Rpb24pKSB7CiAgICAgICAgX2hhbmRsZUlmKAogICAgICAgICAgICB2aXNpdENvbmRpdGlvbjogKCkgewogICAgICAgICAgICAgIEhQYXJhbWV0ZXJWYWx1ZSBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLnZhbHVlcy5maXJzdDsKICAgICAgICAgICAgICBwdXNoKG5ldyBISWRlbnRpdHkocGFyYW1ldGVyLCBncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpLAogICAgICAgICAgICAgICAgICBudWxsLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICB2aXNpdFRoZW46ICgpIHsKICAgICAgICAgICAgICBfY2xvc2VBbmRHb3RvRXhpdChuZXcgSFJldHVybigKICAgICAgICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sCiAgICAgICAgICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgY2xvc2VkV29ybGQpLAogICAgICAgICAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkUmV0dXJuKGZ1bmN0aW9uTm9kZSkpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdmlzaXRFbHNlOiBudWxsLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZElmKGZ1bmN0aW9uTm9kZSkpOwogICAgICB9CiAgICB9CiAgICBpZiAoY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoJ3VucmVhY2hhYmxlLXRocm93JykpIHsKICAgICAgdmFyIGVtcHR5UGFyYW1ldGVycyA9IHBhcmFtZXRlcnMudmFsdWVzLndoZXJlKChwKSA9PgogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uaXNFbXB0eShwLmluc3RydWN0aW9uVHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSk7CiAgICAgIGlmIChlbXB0eVBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICAgIF9hZGRDb21tZW50KCcke2VtcHR5UGFyYW1ldGVyc30gaW5mZXJyZWQgYXMgW2VtcHR5XScpOwogICAgICAgIGFkZChuZXcgSEludm9rZVN0YXRpYygKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmFzc2VydFVucmVhY2hhYmxlTWV0aG9kLAogICAgICAgICAgICA8SEluc3RydWN0aW9uPltdLAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdKSk7CiAgICAgICAgX2Nsb3NlRnVuY3Rpb24oKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uTm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgfQoKICAvLy8gQWRkcyBhIEphdmFTY3JpcHQgY29tbWVudCB0byB0aGUgb3V0cHV0LiBUaGUgY29tbWVudCB3aWxsIGJlIG9taXR0ZWQgaW4KICAvLy8gbWluaWZpZWQgbW9kZS4gIEVhY2ggbGluZSBpbiBbdGV4dF0gaXMgcHJlY2VkZWQgd2l0aCBgLy9gIGFuZCBpbmRlbnRlZC4KICAvLy8gVXNlIHNwYXJpbmdseS4gSW4gb3JkZXIgZm9yIHRoZSBjb21tZW50IHRvIGJlIHJldGFpbmVkIGl0IGlzIG1vZGVsZWQgYXMKICAvLy8gaGF2aW5nIHNpZGUgZWZmZWN0cyB3aGljaCB3aWxsIGluaGliaXQgY29kZSBtb3Rpb24uCiAgLy8gVE9ETyhzcmEpOiBGaWd1cmUgb3V0IGhvdyB0byBrZWVwIGNvbW1lbnQgYW5jaG9yZWQgd2l0aG91dCBlZmZlY3RzLgogIHZvaWQgX2FkZENvbW1lbnQoU3RyaW5nIHRleHQpIHsKICAgIGFkZChuZXcgSEZvcmVpZ25Db2RlKGpzLmpzLnN0YXRlbWVudFRlbXBsYXRlWWllbGRpbmcobmV3IGpzLkNvbW1lbnQodGV4dCkpLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCA8SEluc3RydWN0aW9uPltdLAogICAgICAgIGlzU3RhdGVtZW50OiB0cnVlKSk7CiAgfQoKICAvLy8gQnVpbGRzIGEgU1NBIGdyYXBoIGZvciBhIHN5bmMqL2FzeW5jL2FzeW5jKiBnZW5lcmF0b3IuICBXZSBnZW5lcmF0ZSBhCiAgLy8vIGVudHJ5IGZ1bmN0aW9uIHdoaWNoIHRhaWwtY2FsbHMgYSBib2R5IGZ1bmN0aW9uLiBUaGUgZW50cnkgY29udGFpbnMKICAvLy8gcGVyLWludm9jYXRpb24gY2hlY2tzIGFuZCB0aGUgYm9keSwgd2hpY2ggaXMgbGF0ZXIgdHJhbnNmb3JtZWQsIGNvbnRhaW5zCiAgLy8vIHRoZSByZS1lbnRyYW50ICdzdGF0ZSBtYWNoaW5lJyBjb2RlLgogIHZvaWQgX2J1aWxkR2VuZXJhdG9yKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlKSB7CiAgICBfb3BlbkZ1bmN0aW9uKGZ1bmN0aW9uLAogICAgICAgIGZ1bmN0aW9uTm9kZTogZnVuY3Rpb25Ob2RlLAogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZTogZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGNoZWNrczogX2NoZWNrc0ZvckZ1bmN0aW9uKGZ1bmN0aW9uKSk7CgogICAgLy8gUHJlcGFyZSB0byB0YWlsLWNhbGwgdGhlIGJvZHkuCgogICAgLy8gSXMgJ2J1aWxkQXN5bmNCb2R5JyB0aGUgYmVzdCBsb2NhdGlvbiBmb3IgdGhlIGVudHJ5PwogICAgdmFyIHNvdXJjZUluZm9ybWF0aW9uID0gX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEFzeW5jQm9keSgpOwoKICAgIC8vIEZvcndhcmQgYWxsIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBib2R5LgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBpZiAoZ3JhcGgudGhpc0luc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgaW5wdXRzLmFkZChncmFwaC50aGlzSW5zdHJ1Y3Rpb24pOwogICAgfQogICAgaWYgKGdyYXBoLmV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXIgIT0gbnVsbCkgewogICAgICBpbnB1dHMuYWRkKGdyYXBoLmV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXIpOwogICAgfQogICAgZm9yIChMb2NhbCBsb2NhbCBpbiBwYXJhbWV0ZXJzLmtleXMpIHsKICAgICAgaWYgKCFlbGlkZWRQYXJhbWV0ZXJzLmNvbnRhaW5zKGxvY2FsKSkgewogICAgICAgIGlucHV0cy5hZGQobG9jYWxzSGFuZGxlci5yZWFkTG9jYWwobG9jYWwpKTsKICAgICAgfQogICAgfQogICAgZm9yIChMb2NhbCBsb2NhbCBpbiBfZnVuY3Rpb25UeXBlUGFyYW1ldGVyTG9jYWxzKSB7CiAgICAgIGlucHV0cy5hZGQobG9jYWxzSGFuZGxlci5yZWFkTG9jYWwobG9jYWwpKTsKICAgIH0KCiAgICAvLyBBZGQgdGhlIHR5cGUgcGFyYW1ldGVyIGZvciB0aGUgZ2VuZXJhdG9yJ3MgZWxlbWVudCB0eXBlLgogICAgRGFydFR5cGUgZWxlbWVudFR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKAogICAgICAgIGZ1bmN0aW9uLmFzeW5jTWFya2VyLCBfcmV0dXJuVHlwZSk7CgogICAgaWYgKGVsZW1lbnRUeXBlLmNvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMpIHsKICAgICAgLy8gVHlwZSBtdXN0IGJlIGNvbXB1dGVkIGluIHRoZSBlbnRyeSBmdW5jdGlvbiwgd2hlcmUgdGhlIHR5cGUgdmFyaWFibGVzCiAgICAgIC8vIGFyZSBpbiBzY29wZSwgYW5kIHBhc3NlZCB0byB0aGUgYm9keSBmdW5jdGlvbi4KICAgICAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgIGlucHV0cwogICAgICAgICAgICAuYWRkKF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpKGVsZW1lbnRUeXBlLCBmdW5jdGlvbikpOwogICAgICB9IGVsc2UgewogICAgICAgIGlucHV0cy5hZGQoX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQoZWxlbWVudFR5cGUsIGZ1bmN0aW9uKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFR5cGVzIHdpdGggbm8gdHlwZSB2YXJpYWJsZXMgY2FuIGJlIGVtaXR0ZWQgYXMgcGFydCBvZiB0aGUgZ2VuZXJhdG9yLAogICAgICAvLyBhdm9pZGluZyBhbiBleHRyYSBhcmd1bWVudC4KICAgICAgaWYgKF9nZW5lcmF0ZWRFbnRyeUlzRW1wdHkoKSkgewogICAgICAgIC8vIElmIHRoZSBlbnRyeSBmdW5jdGlvbiBpcyBlbXB0eSAoZS5nLiBubyBhcmd1bWVudCBjaGVja3MpIGFuZCB0aGUgdHlwZQogICAgICAgIC8vIGNhbiBiZSBnZW5lcmF0ZWQgaW4gYm9keSwgJ2lubGluZScgdGhlIGJvZHkgYnkgZ2VuZXJhdGluZyBpdCBpbgogICAgICAgIC8vIHBsYWNlLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIHN1YnNlcXVlbnQgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGNvZGUKICAgICAgICAvLyBpcyAnY29ycmVjdCcgZm9yIHRoZSBlbXB0eSBlbnRyeSBmdW5jdGlvbiBjb2RlLgogICAgICAgIGdyYXBoLm5lZWRzQXN5bmNSZXdyaXRlID0gdHJ1ZTsKICAgICAgICBncmFwaC5hc3luY0VsZW1lbnRUeXBlID0gZWxlbWVudFR5cGU7CiAgICAgICAgZnVuY3Rpb25Ob2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgSkdlbmVyYXRvckJvZHkgYm9keSA9IF9lbGVtZW50TWFwLmdldEdlbmVyYXRvckJvZHkoZnVuY3Rpb24pOwogICAgcHVzaChuZXcgSEludm9rZUdlbmVyYXRvckJvZHkoCiAgICAgICAgYm9keSwKICAgICAgICBpbnB1dHMsCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIC8vIFRPRE86IGJldHRlciB0eXBlLgogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKSk7CgogICAgX2Nsb3NlQW5kR290b0V4aXQoCiAgICAgICAgbmV3IEhSZXR1cm4oX2Fic3RyYWN0VmFsdWVEb21haW4sIHBvcCgpLCBzb3VyY2VJbmZvcm1hdGlvbikpOwoKICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgfQoKICAvLy8gQnVpbGRzIGEgU1NBIGdyYXBoIGZvciBhIHN5bmMqL2FzeW5jL2FzeW5jKiBnZW5lcmF0b3IgYm9keS4KICB2b2lkIF9idWlsZEdlbmVyYXRvckJvZHkoCiAgICAgIEpHZW5lcmF0b3JCb2R5IGZ1bmN0aW9uLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlKSB7CiAgICBGdW5jdGlvbkVudGl0eSBlbnRyeSA9IGZ1bmN0aW9uLmZ1bmN0aW9uOwogICAgX29wZW5GdW5jdGlvbihlbnRyeSwKICAgICAgICBmdW5jdGlvbk5vZGU6IGZ1bmN0aW9uTm9kZSwKICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmU6IGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBjaGVja3M6IFRhcmdldENoZWNrcy5ub25lKTsKICAgIGdyYXBoLm5lZWRzQXN5bmNSZXdyaXRlID0gdHJ1ZTsKICAgIGlmICghZnVuY3Rpb24uZWxlbWVudFR5cGUuY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcykgewogICAgICAvLyBXZSBjYW4gZ2VuZXJhdGUgdGhlIGVsZW1lbnQgdHlwZSBpbiBwbGFjZQogICAgICBncmFwaC5hc3luY0VsZW1lbnRUeXBlID0gZnVuY3Rpb24uZWxlbWVudFR5cGU7CiAgICB9CiAgICBmdW5jdGlvbk5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgICBfY2xvc2VGdW5jdGlvbigpOwogIH0KCiAgYm9vbCBfZ2VuZXJhdGVkRW50cnlJc0VtcHR5KCkgewogICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBjdXJyZW50OwogICAgLy8gSWYgYGJsb2NrLmlkYCBpcyBub3QgMSB0aGVuIHdlIGdlbmVyYXRlZCBzb21lIGNvbnRyb2wgZmxvdy4KICAgIGlmIChibG9jay5pZCAhPSAxKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiBub2RlID0gYmxvY2suZmlyc3Q7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dCkgewogICAgICBpZiAobm9kZSBpcyBIR290bykgY29udGludWU7CiAgICAgIGlmIChub2RlIGlzIEhMb2FkVHlwZSkgY29udGludWU7IC8vIE9ycGhhbmVkIGlmIGNoZWNrIGlzIHJlZHVuZGFudC4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIF9wb3RlbnRpYWxseUFkZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZUNoZWNrcygKICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLCBUYXJnZXRDaGVja3MgdGFyZ2V0Q2hlY2tzKSB7CiAgICAvLyBQdXQgdGhlIHR5cGUgY2hlY2tzIGluIHRoZSBmaXJzdCBzdWNjZXNzb3Igb2YgdGhlIGVudHJ5LAogICAgLy8gYmVjYXVzZSB0aGF0IGlzIHdoZXJlIHRoZSB0eXBlIGd1YXJkcyB3aWxsIGFsc28gYmUgaW5zZXJ0ZWQuCiAgICAvLyBUaGlzIHdheSB3ZSBlbnN1cmUgdGhhdCBhIHR5cGUgZ3VhcmQgd2lsbCBkb21pbmF0ZSB0aGUgdHlwZQogICAgLy8gY2hlY2suCgogICAgaWYgKHRhcmdldENoZWNrcy5jaGVja1R5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIF9jaGVja1R5cGVWYXJpYWJsZUJvdW5kcyh0YXJnZXRFbGVtZW50KTsKICAgIH0KCiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPQogICAgICAgIF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24odGFyZ2V0RWxlbWVudCk7CiAgICBib29sIG5vZGVJc0NvbnN0cnVjdG9yQm9keSA9IGRlZmluaXRpb24ua2luZCA9PSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keTsKCiAgICB2b2lkIF9oYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgIGlmIChub2RlSXNDb25zdHJ1Y3RvckJvZHkgJiYKICAgICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cAogICAgICAgICAgICAgIC5nZXRDYXB0dXJlZFNjb3BlKHRhcmdldEVsZW1lbnQpCiAgICAgICAgICAgICAgLmlzQm94ZWRWYXJpYWJsZShsb2NhbCkpIHsKICAgICAgICAvLyBJZiBsb2NhbCBpcyBib3hlZCwgdGhlbiBgdmFyaWFibGVgIHdpbGwgYmUgYSBmaWVsZCBpbnNpZGUgdGhlIGJveAogICAgICAgIC8vIHBhc3NlZCBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIsIHNvIG5vIG5lZWQgdG8gdXBkYXRlIG91ciBsb2NhbHMKICAgICAgICAvLyBoYW5kbGVyIG9yIGNoZWNrIHR5cGVzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIEhJbnN0cnVjdGlvbiBuZXdQYXJhbWV0ZXIgPSBsb2NhbHNIYW5kbGVyLmRpcmVjdExvY2Fsc1tsb2NhbF07CiAgICAgIGFzc2VydChuZXdQYXJhbWV0ZXIgIT0gbnVsbCwgIk5vIGluaXRpYWwgaW5zdHJ1Y3Rpb24gZm9yICR7bG9jYWx9LiIpOwogICAgICBEYXJ0VHlwZSB0eXBlID0gX2dldERhcnRUeXBlSWZWYWxpZCh2YXJpYWJsZS50eXBlKTsKCiAgICAgIGlmICh0YXJnZXRDaGVja3MuY2hlY2tBbGxQYXJhbWV0ZXJzIHx8CiAgICAgICAgICAodGFyZ2V0Q2hlY2tzLmNoZWNrQ292YXJpYW50UGFyYW1ldGVycyAmJgogICAgICAgICAgICAgICh2YXJpYWJsZS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsIHx8IHZhcmlhYmxlLmlzQ292YXJpYW50KSkpIHsKICAgICAgICBuZXdQYXJhbWV0ZXIgPSBfdHlwZUJ1aWxkZXIucG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZQYXJhbWV0ZXIoCiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQsIG5ld1BhcmFtZXRlciwgdHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3UGFyYW1ldGVyID0gX3R5cGVCdWlsZGVyLnRydXN0VHlwZU9mUGFyYW1ldGVyKG5ld1BhcmFtZXRlciwgdHlwZSk7CiAgICAgIH0KCiAgICAgIGxvY2Fsc0hhbmRsZXIuZGlyZWN0TG9jYWxzW2xvY2FsXSA9IG5ld1BhcmFtZXRlcjsKICAgIH0KCiAgICBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5mb3JFYWNoKF9oYW5kbGVQYXJhbWV0ZXIpOwogICAgZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLnRvTGlzdCgpLi5mb3JFYWNoKF9oYW5kbGVQYXJhbWV0ZXIpOwogIH0KCiAgdm9pZCBfY2hlY2tUeXBlVmFyaWFibGVCb3VuZHMoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICBpZiAoX3J0aU5lZWQubWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKG1ldGhvZCkgJiYKICAgICAgICBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobWV0aG9kKS5pc0VtaXR0ZWQpIHsKICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gZ2V0RnVuY3Rpb25Ob2RlKF9lbGVtZW50TWFwLCBtZXRob2QpOwogICAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBmdW5jdGlvbi50eXBlUGFyYW1ldGVycykgewogICAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFR5cGVWYXJpYWJsZSgKICAgICAgICAgICAgbmV3IGlyLlR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIpLCBfZWxlbWVudE1hcCk7CiAgICAgICAgSEluc3RydWN0aW9uIG5ld1BhcmFtZXRlciA9IGxvY2Fsc0hhbmRsZXIuZGlyZWN0TG9jYWxzW2xvY2FsXTsKICAgICAgICBEYXJ0VHlwZSBib3VuZCA9IF9nZXREYXJ0VHlwZUlmVmFsaWQodHlwZVBhcmFtZXRlci5ib3VuZCk7CiAgICAgICAgaWYgKCFib3VuZC5pc0R5bmFtaWMgJiYKICAgICAgICAgICAgIWJvdW5kLmlzVm9pZCAmJgogICAgICAgICAgICBib3VuZCAhPSBfY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSkgewogICAgICAgICAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgICAgICBfY2hlY2tUeXBlQm91bmQobmV3UGFyYW1ldGVyLCBib3VuZCwgbG9jYWwubmFtZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYXNzZXJ0SXNUeXBlKAogICAgICAgICAgICAgICAgbmV3UGFyYW1ldGVyLAogICAgICAgICAgICAgICAgYm91bmQsCiAgICAgICAgICAgICAgICAiVGhlIHR5cGUgYXJndW1lbnQgJyIsCiAgICAgICAgICAgICAgICAiJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHRoZSB0eXBlIHZhcmlhYmxlIGJvdW5kICciLAogICAgICAgICAgICAgICAgIicgb2YgdHlwZSB2YXJpYWJsZSAnJHtsb2NhbC5uYW1lfScgaW4gJyR7bWV0aG9kLm5hbWV9Jy4iKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBCdWlsZHMgYSBTU0EgZ3JhcGggZm9yIEZ1bmN0aW9uTm9kZXMgb2YgZXh0ZXJuYWwgbWV0aG9kcy4KICB2b2lkIF9idWlsZEV4dGVybmFsRnVuY3Rpb25Ob2RlKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTm9uLWpzLWludGVyb3AgZXh0ZXJuYWwgZnVuY3Rpb25zIHNob3VsZAogICAgLy8gdGhyb3cgYSBydW50aW1lIGVycm9yLgogICAgYXNzZXJ0KGZ1bmN0aW9uTm9kZS5ib2R5ID09IG51bGwpOwogICAgX29wZW5GdW5jdGlvbihmdW5jdGlvbiwKICAgICAgICBmdW5jdGlvbk5vZGU6IGZ1bmN0aW9uTm9kZSwKICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmU6IGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBjaGVja3M6IF9jaGVja3NGb3JGdW5jdGlvbihmdW5jdGlvbikpOwoKICAgIGlmIChjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKHRhcmdldEVsZW1lbnQpKSB7CiAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTmF0aXZlTWV0aG9kKHRhcmdldEVsZW1lbnQpOwogICAgICBTdHJpbmcgbmF0aXZlTmFtZTsKICAgICAgaWYgKGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaGFzRml4ZWRCYWNrZW5kTmFtZSh0YXJnZXRFbGVtZW50KSkgewogICAgICAgIG5hdGl2ZU5hbWUgPSBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmdldEZpeGVkQmFja2VuZE5hbWUodGFyZ2V0RWxlbWVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmF0aXZlTmFtZSA9IHRhcmdldEVsZW1lbnQubmFtZTsKICAgICAgfQoKICAgICAgU3RyaW5nIHRlbXBsYXRlUmVjZWl2ZXIgPSAnJzsKICAgICAgTGlzdDxTdHJpbmc+IHRlbXBsYXRlQXJndW1lbnRzID0gPFN0cmluZz5bXTsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICAgIGlmICh0YXJnZXRFbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICB0ZW1wbGF0ZVJlY2VpdmVyID0gJyMuJzsKICAgICAgICBpbnB1dHMuYWRkKGxvY2Fsc0hhbmRsZXIucmVhZFRoaXMoCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOgogICAgICAgICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdldChmdW5jdGlvbk5vZGUpKSk7CiAgICAgIH0KCiAgICAgIHZvaWQgaGFuZGxlUGFyYW1ldGVyKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW0pIHsKICAgICAgICB0ZW1wbGF0ZUFyZ3VtZW50cy5hZGQoJyMnKTsKICAgICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShwYXJhbSk7CiAgICAgICAgLy8gQ29udmVydCBEYXJ0IGZ1bmN0aW9uIHRvIEphdmFTY3JpcHQgZnVuY3Rpb24uCiAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gbG9jYWxzSGFuZGxlci5yZWFkTG9jYWwobG9jYWwpOwogICAgICAgIGlyLkRhcnRUeXBlIHR5cGUgPSBwYXJhbS50eXBlOwogICAgICAgIGlmICh0eXBlIGlzIGlyLkZ1bmN0aW9uVHlwZSkgewogICAgICAgICAgaW50IGFyaXR5ID0gdHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7CiAgICAgICAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDb252ZXJ0ZXIsCiAgICAgICAgICAgICAgW2FyZ3VtZW50LCBncmFwaC5hZGRDb25zdGFudEludChhcml0eSwgY2xvc2VkV29ybGQpXSwKICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG51bGwpOwogICAgICAgICAgYXJndW1lbnQgPSBwb3AoKTsKICAgICAgICB9CiAgICAgICAgaW5wdXRzLmFkZChhcmd1bWVudCk7CiAgICAgIH0KCiAgICAgIGZvciAoaW50IHBvc2l0aW9uID0gMDsKICAgICAgICAgIHBvc2l0aW9uIDwgZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgICAgICAgcG9zaXRpb24rKykgewogICAgICAgIGhhbmRsZVBhcmFtZXRlcihmdW5jdGlvbk5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnNbcG9zaXRpb25dKTsKICAgICAgfQogICAgICBpZiAoZnVuY3Rpb25Ob2RlLm5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMgPSBmdW5jdGlvbk5vZGUKICAgICAgICAgICAgLm5hbWVkUGFyYW1ldGVycwogICAgICAgICAgICAvLyBGaWx0ZXIgZWxpZGVkIHBhcmFtZXRlcnMuCiAgICAgICAgICAgIC53aGVyZSgocCkgPT4KICAgICAgICAgICAgICAgIGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuY29udGFpbnMocC5uYW1lKSkKICAgICAgICAgICAgLnRvTGlzdCgpOwogICAgICAgIC8vIFNvcnQgYnkgZmlsZSBvZmZzZXQgdG8gdmlzaXQgcGFyYW1ldGVycyBpbiBkZWNsYXJhdGlvbiBvcmRlci4KICAgICAgICBuYW1lZFBhcmFtZXRlcnMuc29ydChuYXRpdmVPcmRlcmluZyk7CiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLmZvckVhY2goaGFuZGxlUGFyYW1ldGVyKTsKICAgICAgfQoKICAgICAgU3RyaW5nIGFyZ3VtZW50cyA9IHRlbXBsYXRlQXJndW1lbnRzLmpvaW4oJywnKTsKCiAgICAgIC8vIFRPRE8oc3JhKTogVXNlIGRlY2xhcmVkIHR5cGUgb3IgTmF0aXZlQmVoYXZpb3IgdHlwZS4KICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzayA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgICBTdHJpbmcgdGVtcGxhdGU7CiAgICAgIGlmICh0YXJnZXRFbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgICAgdGVtcGxhdGUgPSAnJHt0ZW1wbGF0ZVJlY2VpdmVyfSRuYXRpdmVOYW1lJzsKICAgICAgfSBlbHNlIGlmICh0YXJnZXRFbGVtZW50LmlzU2V0dGVyKSB7CiAgICAgICAgdGVtcGxhdGUgPSAnJHt0ZW1wbGF0ZVJlY2VpdmVyfSRuYXRpdmVOYW1lID0gJHthcmd1bWVudHN9JzsKICAgICAgfSBlbHNlIHsKICAgICAgICB0ZW1wbGF0ZSA9ICcke3RlbXBsYXRlUmVjZWl2ZXJ9JG5hdGl2ZU5hbWUoJHthcmd1bWVudHN9KSc7CiAgICAgIH0KCiAgICAgIHB1c2gobmV3IEhGb3JlaWduQ29kZSgKICAgICAgICAgIGpzLmpzLnVuY2FjaGVkRXhwcmVzc2lvblRlbXBsYXRlKHRlbXBsYXRlKSwgdHlwZU1hc2ssIGlucHV0cywKICAgICAgICAgIGVmZmVjdHM6IG5ldyBTaWRlRWZmZWN0cygpKSk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFByb3ZpZGUgc291cmNlIGluZm9ybWF0aW9uLgogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBwb3AoKTsKICAgICAgaWYgKHRhcmdldEVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgICB2YWx1ZSA9IGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgICAgY2xvc2UobmV3IEhSZXR1cm4oX2Fic3RyYWN0VmFsdWVEb21haW4sIHZhbHVlLAogICAgICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRSZXR1cm4oZnVuY3Rpb25Ob2RlKSkpCiAgICAgICAgICAuYWRkU3VjY2Vzc29yKGdyYXBoLmV4aXQpOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBIYW5kbGUgSlMtaW50ZXJvcCBtZXRob2RzLgogICAgX2Nsb3NlRnVuY3Rpb24oKTsKICB9CgogIHZvaWQgX2FkZEltcGxpY2l0SW5zdGFudGlhdGlvbihEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgIF9jdXJyZW50SW1wbGljaXRJbnN0YW50aWF0aW9ucy5hZGQodHlwZSk7CiAgICB9CiAgfQoKICB2b2lkIF9yZW1vdmVJbXBsaWNpdEluc3RhbnRpYXRpb24oRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICBfY3VycmVudEltcGxpY2l0SW5zdGFudGlhdGlvbnMucmVtb3ZlTGFzdCgpOwogICAgfQogIH0KCiAgVGFyZ2V0Q2hlY2tzIF9jaGVja3NGb3JGdW5jdGlvbihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgaWYgKCFmdW5jdGlvbi5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIC8vIFN0YXRpYyBtZXRob2RzIHdpdGggbm8gdGVhci1vZmYgY2FuIGJlIGdlbmVyYXRlZCB3aXRoIG5vIGNoZWNrcy4KICAgICAgTWVtYmVyQWNjZXNzIGFjY2VzcyA9IGNsb3NlZFdvcmxkLmdldE1lbWJlckFjY2VzcyhmdW5jdGlvbik7CiAgICAgIGlmIChhY2Nlc3MgIT0gbnVsbCAmJiBhY2Nlc3MucmVhZHMuaXNFbXB0eSkgewogICAgICAgIHJldHVybiBUYXJnZXRDaGVja3Mubm9uZTsKICAgICAgfQogICAgfQogICAgLy8gVE9ETyhzcmEpOiBJbnN0YW5jZSBtZXRob2RzIGNhbiBiZSBnZW5lcmF0ZWQgd2l0aCByZWR1Y2VkIGNoZWNrcyBpZgogICAgLy8gY2FsbGVkIG9ubHkgZnJvbSBub24tZHluYW1pYyBjYWxsLXNpdGVzLgogICAgcmV0dXJuIFRhcmdldENoZWNrcy5keW5hbWljQ2hlY2tzOwogIH0KCiAgdm9pZCBfb3BlbkZ1bmN0aW9uKE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIHtpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlLAogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICBUYXJnZXRDaGVja3MgY2hlY2tzfSkgewogICAgYXNzZXJ0KGNoZWNrcyAhPSBudWxsKTsKCiAgICBNYXA8TG9jYWwsIEFic3RyYWN0VmFsdWU+IHBhcmFtZXRlck1hcCA9IHt9OwogICAgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBlbGlkZWRQYXJhbWV0ZXJzID0gW107CiAgICBTZXQ8TG9jYWw+IGVsaWRlZFBhcmFtZXRlclNldCA9IG5ldyBTZXQoKTsKICAgIGlmIChmdW5jdGlvbk5vZGUgIT0gbnVsbCkgewogICAgICBhc3NlcnQocGFyYW1ldGVyU3RydWN0dXJlICE9IG51bGwpOwoKICAgICAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLAogICAgICAgICAge2Jvb2wgaXNPcHRpb25hbCwgYm9vbCBpc0VsaWRlZH0pIHsKICAgICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlKTsKICAgICAgICBpZiAoaXNFbGlkZWQpIHsKICAgICAgICAgIGVsaWRlZFBhcmFtZXRlcnMuYWRkKG5vZGUpOwogICAgICAgICAgZWxpZGVkUGFyYW1ldGVyU2V0LmFkZChsb2NhbCk7CiAgICAgICAgfQogICAgICAgIHBhcmFtZXRlck1hcFtsb2NhbF0gPQogICAgICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5nZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihsb2NhbCk7CiAgICAgIH0KCiAgICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyQnlGdW5jdGlvbk5vZGUoCiAgICAgICAgICBmdW5jdGlvbk5vZGUsIHBhcmFtZXRlclN0cnVjdHVyZSwgaGFuZGxlUGFyYW1ldGVyKTsKCiAgICAgIF9yZXR1cm5UeXBlID0gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUoZnVuY3Rpb25Ob2RlLnJldHVyblR5cGUpOwogICAgfQoKICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gZ3JhcGguYWRkTmV3QmxvY2soKTsKICAgIC8vIENyZWF0ZSBgZ3JhcGguZW50cnlgIGFzIGFuIGluaXRpYWxseSBlbXB0eSBibG9jay4gYGdyYXBoLmVudHJ5YCBpcwogICAgLy8gdHJlYXRlZCBzcGVjaWFsbHkgKGhvbGRpbmcgcGFyYW1ldGVycywgbG9jYWwgdmFyaWFibGVzIGFuZCBjb25zdGFudHMpCiAgICAvLyBidXQgY2Fubm90IHJlY2VpdmUgY29uc3RhbnRzIGJlZm9yZSBpdCBoYXMgYmVlbiBjbG9zZWQuIEJ5IGNsb3NpbmcgaXQKICAgIC8vIGhlcmUsIHdlIGNhbiB1c2UgY29uc3RhbnRzIGluIHRoZSBjb2RlIHRoYXQgc2V0cyB1cCB0aGUgZnVuY3Rpb24uCiAgICBvcGVuKGdyYXBoLmVudHJ5KTsKICAgIGNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpLmFkZFN1Y2Nlc3NvcihibG9jayk7CiAgICBvcGVuKGJsb2NrKTsKCiAgICBsb2NhbHNIYW5kbGVyLnN0YXJ0RnVuY3Rpb24oCiAgICAgICAgdGFyZ2V0RWxlbWVudCwKICAgICAgICBfY2xvc3VyZURhdGFMb29rdXAuZ2V0U2NvcGVJbmZvKHRhcmdldEVsZW1lbnQpLAogICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDYXB0dXJlZFNjb3BlKHRhcmdldEVsZW1lbnQpLAogICAgICAgIHBhcmFtZXRlck1hcCwKICAgICAgICBlbGlkZWRQYXJhbWV0ZXJTZXQsCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZERlY2xhcmF0aW9uKHRhcmdldEVsZW1lbnQpLAogICAgICAgIGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keTogdGFyZ2V0RWxlbWVudCBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpOwoKICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlIGluIGVsaWRlZFBhcmFtZXRlcnMpIHsKICAgICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZSk7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwobG9jYWwsIF9kZWZhdWx0VmFsdWVGb3JQYXJhbWV0ZXIobm9kZSkpOwogICAgfQoKICAgIF9hZGRDbGFzc1R5cGVWYXJpYWJsZXNJZk5lZWRlZChtZW1iZXIpOwogICAgX2FkZEZ1bmN0aW9uVHlwZVZhcmlhYmxlc0lmTmVlZGVkKG1lbWJlcik7CgogICAgaWYgKGZ1bmN0aW9uTm9kZSAhPSBudWxsKSB7CiAgICAgIF9wb3RlbnRpYWxseUFkZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZUNoZWNrcyhmdW5jdGlvbk5vZGUsIGNoZWNrcyk7CiAgICB9CiAgICBfaW5zZXJ0Q292ZXJhZ2VDYWxsKG1lbWJlcik7CiAgfQoKICB2b2lkIF9jbG9zZUZ1bmN0aW9uKCkgewogICAgaWYgKCFpc0Fib3J0ZWQoKSkgX2Nsb3NlQW5kR290b0V4aXQobmV3IEhHb3RvKF9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICBncmFwaC5maW5hbGl6ZShfYWJzdHJhY3RWYWx1ZURvbWFpbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHROb2RlKGlyLk5vZGUgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuaGFuZGxlZCBub2RlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KSIpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGN1cnJlbnQgc291cmNlIGVsZW1lbnQuIFRoaXMgaXMgdXNlZCBieSB0aGUgdHlwZSBidWlsZGVyLgogIC8vIFRPRE8oZWZvcnR1bmEpOiBVcGRhdGUgdGhpcyB3aGVuIHdlIGltcGxlbWVudCBpbmxpbmluZy4KICAvLyBUT0RPKHNyYSk6IFJlLWltcGxlbWVudCB0eXBlIGJ1aWxkZXIgdXNpbmcgS2VybmVsIHR5cGVzIGFuZCB0aGUKICAvLyBgdGFyZ2V0YCBmb3IgY29udGV4dC4KICBNZW1iZXJFbnRpdHkgZ2V0IHNvdXJjZUVsZW1lbnQgPT4gX2N1cnJlbnRGcmFtZS5tZW1iZXI7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChpci5DaGVja0xpYnJhcnlJc0xvYWRlZCBjaGVja0xvYWQpIHsKICAgIEltcG9ydEVudGl0eSBpbXBvcnQgPSBfZWxlbWVudE1hcC5nZXRJbXBvcnQoY2hlY2tMb2FkLmltcG9ydCk7CiAgICBTdHJpbmcgbG9hZElkID0gY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEuZ2V0SW1wb3J0RGVmZXJOYW1lKAogICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBjaGVja0xvYWQpLCBpbXBvcnQpOwogICAgSEluc3RydWN0aW9uIHByZWZpeENvbnN0YW50ID0gZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcobG9hZElkLCBjbG9zZWRXb3JsZCk7CiAgICBISW5zdHJ1Y3Rpb24gdXJpQ29uc3RhbnQgPQogICAgICAgIGdyYXBoLmFkZENvbnN0YW50U3RyaW5nKCcke2ltcG9ydC51cml9JywgY2xvc2VkV29ybGQpOwogICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIF9jb21tb25FbGVtZW50cy5jaGVja0RlZmVycmVkSXNMb2FkZWQsCiAgICAgICAgW3ByZWZpeENvbnN0YW50LCB1cmlDb25zdGFudF0sCiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAKICAgICAgICAgICAgLmdldFJldHVyblR5cGVPZihfY29tbW9uRWxlbWVudHMuY2hlY2tEZWZlcnJlZElzTG9hZGVkKSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExvYWRMaWJyYXJ5KGlyLkxvYWRMaWJyYXJ5IGxvYWRMaWJyYXJ5KSB7CiAgICBTdHJpbmcgbG9hZElkID0gY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEuZ2V0SW1wb3J0RGVmZXJOYW1lKAogICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBsb2FkTGlicmFyeSksCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0SW1wb3J0KGxvYWRMaWJyYXJ5LmltcG9ydCkpOwogICAgLy8gVE9ETyhlZm9ydHVuYSk6IFNvdXJjZSBpbmZvcm1hdGlvbiEKICAgIHB1c2gobmV3IEhJbnZva2VTdGF0aWMoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmxvYWREZWZlcnJlZExpYnJhcnksCiAgICAgICAgPEhJbnN0cnVjdGlvbj5bZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcobG9hZElkLCBjbG9zZWRXb3JsZCldLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICB0YXJnZXRDYW5UaHJvdzogZmFsc2UpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCbG9jayhpci5CbG9jayBibG9jaykgewogICAgYXNzZXJ0KCFpc0Fib3J0ZWQoKSk7CiAgICBpZiAoIV9pc1JlYWNoYWJsZSkgcmV0dXJuOyAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiB3aGVuIGlubGluaW5nLgogICAgZm9yIChpci5TdGF0ZW1lbnQgc3RhdGVtZW50IGluIGJsb2NrLnN0YXRlbWVudHMpIHsKICAgICAgc3RhdGVtZW50LmFjY2VwdCh0aGlzKTsKICAgICAgaWYgKCFfaXNSZWFjaGFibGUpIHsKICAgICAgICAvLyBUaGUgYmxvY2sgaGFzIGJlZW4gYWJvcnRlZCBieSBhIHJldHVybiBvciBhIHRocm93LgogICAgICAgIGlmIChzdGFjay5pc05vdEVtcHR5KSB7CiAgICAgICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgJ05vbi1lbXB0eSBpbnN0cnVjdGlvbiBzdGFjay4nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoIWN1cnJlbnQuaXNDbG9zZWQoKSk7CiAgICBpZiAoc3RhY2suaXNOb3RFbXB0eSkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAnTm9uLWVtcHR5IGluc3RydWN0aW9uIHN0YWNrJyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RW1wdHlTdGF0ZW1lbnQoaXIuRW1wdHlTdGF0ZW1lbnQgbm9kZSkgewogICAgLy8gRW1wdHkgc3RhdGVtZW50IGFkZHMgbm8gaW5zdHJ1Y3Rpb25zIHRvIGN1cnJlbnQgYmxvY2suCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChpci5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmICghX2lzUmVhY2hhYmxlKSByZXR1cm47CiAgICBpci5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSBub2RlLmV4cHJlc3Npb247CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBpci5UaHJvdyAmJiBfaW5saW5pbmdTdGFjay5pc0VtcHR5KSB7CiAgICAgIF92aXNpdFRocm93RXhwcmVzc2lvbihleHByZXNzaW9uLmV4cHJlc3Npb24pOwogICAgICBfaGFuZGxlSW5UcnlTdGF0ZW1lbnQoKTsKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFRocm93KG5vZGUuZXhwcmVzc2lvbik7CiAgICAgIF9jbG9zZUFuZEdvdG9FeGl0KAogICAgICAgICAgbmV3IEhUaHJvdyhfYWJzdHJhY3RWYWx1ZURvbWFpbiwgcG9wKCksIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBleHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgICAgcG9wKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlKTsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR2V0KG5vZGUpOwogICAgaWYgKCFjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YQogICAgICAgIC5oYXNPbmx5Tm9uRGVmZXJyZWRJbXBvcnRQYXRoc1RvQ29uc3RhbnQodGFyZ2V0RWxlbWVudCwgdmFsdWUpKSB7CiAgICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdCA9CiAgICAgICAgICBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yQ29uc3RhbnQodmFsdWUpOwogICAgICBDb25zdGFudFZhbHVlIGRlZmVycmVkQ29uc3RhbnQgPQogICAgICAgICAgbmV3IERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSh2YWx1ZSwgb3V0cHV0VW5pdCk7CiAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQ29uc3RhbnRVc2UobmV3IENvbnN0YW50VXNlLmRlZmVycmVkKGRlZmVycmVkQ29uc3RhbnQpKTsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZERlZmVycmVkQ29uc3RhbnQoCiAgICAgICAgICBkZWZlcnJlZENvbnN0YW50LCBzb3VyY2VJbmZvcm1hdGlvbiwgY2xvc2VkV29ybGQpKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudCh2YWx1ZSwgY2xvc2VkV29ybGQsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoaXIuUmV0dXJuU3RhdGVtZW50IG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkUmV0dXJuKG5vZGUpOwogICAgSEluc3RydWN0aW9uIHZhbHVlOwogICAgaWYgKG5vZGUuZXhwcmVzc2lvbiA9PSBudWxsKSB7CiAgICAgIHZhbHVlID0gZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSB7CiAgICAgIG5vZGUuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICAgIHZhbHVlID0gcG9wKCk7CiAgICAgIGlmIChfY3VycmVudEZyYW1lLmFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLkFTWU5DKSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXMgdGhpcyBzcGVjaWFsLWNhc2luZyBvZiBhc3luYyBzdGlsbCBuZWVkZWQKICAgICAgICAvLyBvciBzaG91bGQgd2UgdXNlIHRoZSBnZW5lcmFsIGNoZWNrIGJlbG93PwogICAgICAgIC8qaWYgKG9wdGlvbnMuZW5hYmxlVHlwZUFzc2VydGlvbnMgJiYKICAgICAgICAgICAgIWlzVmFsaWRBc3luY1JldHVyblR5cGUoX3JldHVyblR5cGUpKSB7CiAgICAgICAgICBnZW5lcmF0ZVR5cGVFcnJvcigKICAgICAgICAgICAgICAiQXN5bmMgZnVuY3Rpb24gcmV0dXJuZWQgYSBGdXR1cmUsIgogICAgICAgICAgICAgICIgd2FzIGRlY2xhcmVkIHRvIHJldHVybiBhICR7X3JldHVyblR5cGV9LiIsCiAgICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgcG9wKCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSovCiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFsdWUgPSBfdHlwZUJ1aWxkZXIucG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZBc3NpZ25tZW50KAogICAgICAgICAgICBfY3VycmVudEZyYW1lLm1lbWJlciwgdmFsdWUsIF9yZXR1cm5UeXBlKTsKICAgICAgfQogICAgfQogICAgX2hhbmRsZUluVHJ5U3RhdGVtZW50KCk7CiAgICBpZiAoX2lubGluaW5nU3RhY2suaXNFbXB0eSAmJiB0YXJnZXRFbGVtZW50LmlzU2V0dGVyKSB7CiAgICAgIGlmIChub2RlLnBhcmVudCBpcyBpci5GdW5jdGlvbk5vZGUpIHsKICAgICAgICAvLyBBbiBhcnJvdyBmdW5jdGlvbiBkZWZpbml0aW9uIG9mIGEgc2V0dGVyIGhhcyBhIFJldHVyblN0YXRlbW50IGFzIGEKICAgICAgICAvLyBib2R5LCBlLmcuICJzZXQgZm9vKHgpID0+IHRoaXMuX3ggPSB4OyIuIFRoZXJlIGlzIG5vIHdheSB0byBhY2Nlc3MKICAgICAgICAvLyB0aGUgcmV0dXJuZWQgdmFsdWUsIHNvIGRvbid0IGVtaXQgYSByZXR1cm4uCiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBfZW1pdFJldHVybih2YWx1ZSwgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvclN0YXRlbWVudChpci5Gb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgYXNzZXJ0KF9pc1JlYWNoYWJsZSk7CiAgICBhc3NlcnQobm9kZS5ib2R5ICE9IG51bGwpOwogICAgdm9pZCBidWlsZEluaXRpYWxpemVyKCkgewogICAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gaW4gbm9kZS52YXJpYWJsZXMpIHsKICAgICAgICBkZWNsYXJhdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gYnVpbGRDb25kaXRpb24oKSB7CiAgICAgIGlmIChub2RlLmNvbmRpdGlvbiA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGdyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBjbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgICAgbm9kZS5jb25kaXRpb24uYWNjZXB0KHRoaXMpOwogICAgICByZXR1cm4gcG9wQm9vbGlmaWVkKCk7CiAgICB9CgogICAgdm9pZCBidWlsZFVwZGF0ZSgpIHsKICAgICAgZm9yIChpci5FeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gbm9kZS51cGRhdGVzKSB7CiAgICAgICAgZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICAgICAgYXNzZXJ0KCFpc0Fib3J0ZWQoKSk7CiAgICAgICAgLy8gVGhlIHJlc3VsdCBvZiB0aGUgdXBkYXRlIGluc3RydWN0aW9uIGlzbid0IHVzZWQsIGFuZCBjYW4ganVzdAogICAgICAgIC8vIGJlIGRyb3BwZWQuCiAgICAgICAgcG9wKCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGJ1aWxkQm9keSgpIHsKICAgICAgbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICAgIH0KCiAgICBKdW1wVGFyZ2V0IGp1bXBUYXJnZXQgPSBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JGb3Iobm9kZSk7CiAgICBfbG9vcEhhbmRsZXIuaGFuZGxlTG9vcCgKICAgICAgICBub2RlLAogICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDYXB0dXJlZExvb3BTY29wZShub2RlKSwKICAgICAgICBqdW1wVGFyZ2V0LAogICAgICAgIGJ1aWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgYnVpbGRDb25kaXRpb24sCiAgICAgICAgYnVpbGRVcGRhdGUsCiAgICAgICAgYnVpbGRCb2R5LAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRMb29wKG5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0FzeW5jKSB7CiAgICAgIF9idWlsZEFzeW5jRm9ySW4obm9kZSk7CiAgICB9IGVsc2UgaWYgKF90eXBlSW5mZXJlbmNlTWFwLmlzSnNJbmRleGFibGVJdGVyYXRvcigKICAgICAgICBub2RlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbikpIHsKICAgICAgLy8gSWYgdGhlIGV4cHJlc3Npb24gYmVpbmcgaXRlcmF0ZWQgb3ZlciBpcyBhIEpTIGluZGV4YWJsZSB0eXBlLCB3ZSBjYW4KICAgICAgLy8gZ2VuZXJhdGUgYW4gb3B0aW1pemVkIHZlcnNpb24gb2YgZm9yLWluIHRoYXQgdXNlcyBpbmRleGluZy4KICAgICAgX2J1aWxkRm9ySW5JbmRleGFibGUobm9kZSk7CiAgICB9IGVsc2UgewogICAgICBfYnVpbGRGb3JJbkl0ZXJhdG9yKG5vZGUpOwogICAgfQogIH0KCiAgLy8vIEJ1aWxkcyB0aGUgZ3JhcGggZm9yIGEgZm9yLWluIG5vZGUgd2l0aCBhbiBpbmRleGFibGUgZXhwcmVzc2lvbi4KICAvLy8KICAvLy8gSW4gdGhpcyBjYXNlIHdlIGJ1aWxkOgogIC8vLwogIC8vLyAgICBpbnQgZW5kID0gYS5sZW5ndGg7CiAgLy8vICAgIGZvciAoaW50IGkgPSAwOwogIC8vLyAgICAgICAgIGkgPCBhLmxlbmd0aDsKICAvLy8gICAgICAgICBjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihhLmxlbmd0aCA9PSBlbmQsIGEpLCArK2kpIHsKICAvLy8gICAgICA8ZGVjbGFyZWRJZGVudGlmaWVyPiA9IGFbaV07CiAgLy8vICAgICAgPGJvZHk+CiAgLy8vICAgIH0KICB2b2lkIF9idWlsZEZvckluSW5kZXhhYmxlKGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIFN5bnRoZXRpY0xvY2FsIGluZGV4VmFyaWFibGUgPSBsb2NhbHNIYW5kbGVyLmNyZWF0ZUxvY2FsKCdfaScpOwoKICAgIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgc2hhcmVkIGJ5IGluaXRpYWxpemVyLCBjb25kaXRpb24sIGJvZHkgYW5kIHVwZGF0ZS4KICAgIEhJbnN0cnVjdGlvbiBhcnJheTsgLy8gU2V0IGluIGJ1aWxkSW5pdGlhbGl6ZXIuCiAgICBib29sIGlzRml4ZWQ7IC8vIFNldCBpbiBidWlsZEluaXRpYWxpemVyLgogICAgSEluc3RydWN0aW9uIG9yaWdpbmFsTGVuZ3RoID0gbnVsbDsgLy8gU2V0IGZvciBncm93YWJsZSBsaXN0cy4KCiAgICBISW5zdHJ1Y3Rpb24gYnVpbGRHZXRMZW5ndGgoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgICAgSEdldExlbmd0aCByZXN1bHQgPSBuZXcgSEdldExlbmd0aCgKICAgICAgICAgIGFycmF5LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGUsCiAgICAgICAgICBpc0Fzc2lnbmFibGU6ICFpc0ZpeGVkKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgYWRkKHJlc3VsdCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgdm9pZCBidWlsZENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvckNoZWNrKCkgewogICAgICBpZiAob3JpZ2luYWxMZW5ndGggPT0gbnVsbCkgcmV0dXJuOwogICAgICAvLyBUaGUgc3RhdGljIGNhbGwgY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoKSBpcyBleHBhbmRlZCBpbgogICAgICAvLyBjb2RlZ2VuIHRvOgogICAgICAvLwogICAgICAvLyAgICAgYXJyYXkubGVuZ3RoID09IF9lbmQgfHwgdGhyb3dDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoYXJyYXkpCiAgICAgIC8vCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRGb3JJbk1vdmVOZXh0KG5vZGUpOwogICAgICBISW5zdHJ1Y3Rpb24gbGVuZ3RoID0gYnVpbGRHZXRMZW5ndGgoc291cmNlSW5mb3JtYXRpb24pOwogICAgICBwdXNoKG5ldyBISWRlbnRpdHkoCiAgICAgICAgICBsZW5ndGgsIG9yaWdpbmFsTGVuZ3RoLCBudWxsLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24pOwogICAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IsCiAgICAgICAgICBbcG9wKCksIGFycmF5XSwKICAgICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZigKICAgICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IpLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcG9wKCk7CiAgICB9CgogICAgdm9pZCBidWlsZEluaXRpYWxpemVyKCkgewogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkRm9ySW5JdGVyYXRvcihub2RlKTsKCiAgICAgIG5vZGUuaXRlcmFibGUuYWNjZXB0KHRoaXMpOwogICAgICBhcnJheSA9IHBvcCgpOwogICAgICBpc0ZpeGVkID0gX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5pc0ZpeGVkTGVuZ3RoSnNJbmRleGFibGUoYXJyYXkuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwoCiAgICAgICAgICBpbmRleFZhcmlhYmxlLCBncmFwaC5hZGRDb25zdGFudEludCgwLCBjbG9zZWRXb3JsZCksCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBvcmlnaW5hbExlbmd0aCA9IGJ1aWxkR2V0TGVuZ3RoKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gYnVpbGRDb25kaXRpb24oKSB7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRGb3JJbk1vdmVOZXh0KG5vZGUpOwogICAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChpbmRleFZhcmlhYmxlLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgSEluc3RydWN0aW9uIGxlbmd0aCA9IGJ1aWxkR2V0TGVuZ3RoKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgSEluc3RydWN0aW9uIGNvbXBhcmUgPQogICAgICAgICAgbmV3IEhMZXNzKGluZGV4LCBsZW5ndGgsIG51bGwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKQogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIGFkZChjb21wYXJlKTsKICAgICAgcmV0dXJuIGNvbXBhcmU7CiAgICB9CgogICAgdm9pZCBidWlsZEJvZHkoKSB7CiAgICAgIC8vIElmIHdlIGhhZCBtZWNoYW5pY2FsbHkgaW5saW5lZCBBcnJheUl0ZXJhdG9yLm1vdmVOZXh0KCksIGl0IHdvdWxkIGhhdmUKICAgICAgLy8gaW5zZXJ0ZWQgdGhlIENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvciBjaGVjayBhcyBwYXJ0IG9mIHRoZQogICAgICAvLyBjb25kaXRpb24uICBJdCBpcyBub3QgbmVjZXNzYXJ5IG9uIHRoZSBmaXJzdCBpdGVyYXRpb24gc2luY2UgdGhlcmUgaXMKICAgICAgLy8gbm8gY29kZSBiZXR3ZWVuIGNhbGxzIHRvIGBnZXQgaXRlcmF0b3JgIGFuZCBgbW92ZU5leHRgLCBzbyB0aGUgdGVzdCBpcwogICAgICAvLyBtb3ZlZCB0byB0aGUgbG9vcCB1cGRhdGUuCgogICAgICAvLyBGaW5kIGEgdHlwZSBmb3IgdGhlIGVsZW1lbnQuIFVzZSB0aGUgZWxlbWVudCB0eXBlIG9mIHRoZSBpbmRleGVyIG9mIHRoZQogICAgICAvLyBhcnJheSwgYXMgdGhpcyBpcyBzdHJvbmdlciB0aGFuIHRoZSBpdGVyYXRvcidzIGBnZXQgY3VycmVudGAgdHlwZSwgZm9yCiAgICAgIC8vIGV4YW1wbGUsIGBnZXQgY3VycmVudGAgaW5jbHVkZXMgbnVsbC4KICAgICAgLy8gVE9ETyhzcmEpOiBUaGUgZWxlbWVudCB0eXBlIG9mIGEgY29udGFpbmVyIHR5cGUgbWFzayBtaWdodCBiZSBiZXR0ZXIuCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9IF90eXBlSW5mZXJlbmNlTWFwLmluZmVycmVkSW5kZXhUeXBlKG5vZGUpOwoKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluQ3VycmVudChub2RlKTsKICAgICAgSEluc3RydWN0aW9uIGluZGV4ID0gbG9jYWxzSGFuZGxlci5yZWFkTG9jYWwoaW5kZXhWYXJpYWJsZSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IG5ldyBISW5kZXgoYXJyYXksIGluZGV4LCBudWxsLCB0eXBlKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgYWRkKHZhbHVlKTsKCiAgICAgIExvY2FsIGxvb3BWYXJpYWJsZUxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUudmFyaWFibGUpOwogICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKGxvb3BWYXJpYWJsZUxvY2FsLCB2YWx1ZSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIC8vIEhpbnQgdG8gbmFtZSBsb29wIHZhbHVlIGFmdGVyIG5hbWUgb2YgbG9vcCB2YXJpYWJsZS4KICAgICAgaWYgKGxvb3BWYXJpYWJsZUxvY2FsIGlzISBTeW50aGV0aWNMb2NhbCkgewogICAgICAgIHZhbHVlLnNvdXJjZUVsZW1lbnQgPz89IGxvb3BWYXJpYWJsZUxvY2FsOwogICAgICB9CgogICAgICBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgfQoKICAgIHZvaWQgYnVpbGRVcGRhdGUoKSB7CiAgICAgIC8vIFNlZSBidWlsZEJvZHkgYXMgdG8gd2h5IHdlIGNoZWNrIGhlcmUuCiAgICAgIGJ1aWxkQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yQ2hlY2soKTsKCiAgICAgIC8vIFRPRE8oc3JhKTogSXQgd291bGQgYmUgc2xpZ2h0bHkgc2hvcnRlciB0byBnZW5lcmF0ZSBgYVtpKytdYCBpbiB0aGUKICAgICAgLy8gYm9keSAoYW5kIHRoYXQgbW9yZSBjbG9zZWx5IGZvbGxvd3Mgd2hhdCBhbiBpbmxpbmVkIGl0ZXJhdG9yIHdvdWxkIGRvKQogICAgICAvLyBidXQgdGhlIGNvZGUgaXMgaG9ycmlibGUgYXMgYGkrMWAgaXMgY2FycmllZCBhcm91bmQgdGhlIGxvb3AgaW4gYW4KICAgICAgLy8gYWRkaXRpb25hbCB2YXJpYWJsZS4KICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluU2V0KG5vZGUpOwogICAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChpbmRleFZhcmlhYmxlLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgSEluc3RydWN0aW9uIG9uZSA9IGdyYXBoLmFkZENvbnN0YW50SW50KDEsIGNsb3NlZFdvcmxkKTsKICAgICAgSEluc3RydWN0aW9uIGFkZEluc3RydWN0aW9uID0KICAgICAgICAgIG5ldyBIQWRkKGluZGV4LCBvbmUsIG51bGwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZSkKICAgICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgICBhZGQoYWRkSW5zdHJ1Y3Rpb24pOwogICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKGluZGV4VmFyaWFibGUsIGFkZEluc3RydWN0aW9uLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KCiAgICBfbG9vcEhhbmRsZXIuaGFuZGxlTG9vcCgKICAgICAgICBub2RlLAogICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDYXB0dXJlZExvb3BTY29wZShub2RlKSwKICAgICAgICBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JGb3JJbihub2RlKSwKICAgICAgICBidWlsZEluaXRpYWxpemVyLAogICAgICAgIGJ1aWxkQ29uZGl0aW9uLAogICAgICAgIGJ1aWxkVXBkYXRlLAogICAgICAgIGJ1aWxkQm9keSwKICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkTG9vcChub2RlKSk7CiAgfQoKICB2b2lkIF9idWlsZEZvckluSXRlcmF0b3IoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgLy8gR2VuZXJhdGUgYSBzdHJ1Y3R1cmUgZXF1aXZhbGVudCB0bzoKICAgIC8vICAgSXRlcmF0b3I8RT4gJGl0ZXIgPSA8aXRlcmFibGU+Lml0ZXJhdG9yOwogICAgLy8gICB3aGlsZSAoJGl0ZXIubW92ZU5leHQoKSkgewogICAgLy8gICAgIDx2YXJpYWJsZT4gPSAkaXRlci5jdXJyZW50OwogICAgLy8gICAgIDxib2R5PgogICAgLy8gICB9CgogICAgLy8gVGhlIGl0ZXJhdG9yIGlzIHNoYXJlZCBiZXR3ZWVuIGluaXRpYWxpemVyLCBjb25kaXRpb24gYW5kIGJvZHkuCiAgICBISW5zdHJ1Y3Rpb24gaXRlcmF0b3I7CiAgICBTdGF0aWNUeXBlIGl0ZXJhdG9yVHlwZSA9IF9nZXRTdGF0aWNGb3JJbkl0ZXJhdG9yVHlwZShub2RlKTsKCiAgICB2b2lkIGJ1aWxkSW5pdGlhbGl6ZXIoKSB7CiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlID0gX3R5cGVJbmZlcmVuY2VNYXAudHlwZU9mSXRlcmF0b3Iobm9kZSk7CiAgICAgIG5vZGUuaXRlcmFibGUuYWNjZXB0KHRoaXMpOwogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgICAgX3B1c2hEeW5hbWljSW52b2NhdGlvbigKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBfZ2V0U3RhdGljVHlwZShub2RlLml0ZXJhYmxlKSwKICAgICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICAgIFNlbGVjdG9ycy5pdGVyYXRvciwKICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwKICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRGb3JJbkl0ZXJhdG9yKG5vZGUpKTsKICAgICAgaXRlcmF0b3IgPSBwb3AoKTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gYnVpbGRDb25kaXRpb24oKSB7CiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlID0KICAgICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLnR5cGVPZkl0ZXJhdG9yTW92ZU5leHQobm9kZSk7CiAgICAgIF9wdXNoRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgICBub2RlLAogICAgICAgICAgaXRlcmF0b3JUeXBlLAogICAgICAgICAgcmVjZWl2ZXJUeXBlLAogICAgICAgICAgU2VsZWN0b3JzLm1vdmVOZXh0LAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5baXRlcmF0b3JdLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluTW92ZU5leHQobm9kZSkpOwogICAgICByZXR1cm4gcG9wQm9vbGlmaWVkKCk7CiAgICB9CgogICAgdm9pZCBidWlsZEJvZHkoKSB7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRGb3JJbkN1cnJlbnQobm9kZSk7CiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlID0KICAgICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLnR5cGVPZkl0ZXJhdG9yQ3VycmVudChub2RlKTsKICAgICAgX3B1c2hEeW5hbWljSW52b2NhdGlvbihub2RlLCBpdGVyYXRvclR5cGUsIHJlY2VpdmVyVHlwZSwKICAgICAgICAgIFNlbGVjdG9ycy5jdXJyZW50LCBbaXRlcmF0b3JdLCBjb25zdCA8RGFydFR5cGU+W10sIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAgIExvY2FsIGxvb3BWYXJpYWJsZUxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUudmFyaWFibGUpOwogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBfdHlwZUJ1aWxkZXIucG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZBc3NpZ25tZW50KAogICAgICAgICAgX2N1cnJlbnRGcmFtZS5tZW1iZXIsIHBvcCgpLCBfZ2V0RGFydFR5cGVJZlZhbGlkKG5vZGUudmFyaWFibGUudHlwZSkpOwogICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKGxvb3BWYXJpYWJsZUxvY2FsLCB2YWx1ZSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIC8vIEhpbnQgdG8gbmFtZSBsb29wIHZhbHVlIGFmdGVyIG5hbWUgb2YgbG9vcCB2YXJpYWJsZS4KICAgICAgaWYgKGxvb3BWYXJpYWJsZUxvY2FsIGlzISBTeW50aGV0aWNMb2NhbCkgewogICAgICAgIHZhbHVlLnNvdXJjZUVsZW1lbnQgPz89IGxvb3BWYXJpYWJsZUxvY2FsOwogICAgICB9CiAgICAgIG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgICB9CgogICAgX2xvb3BIYW5kbGVyLmhhbmRsZUxvb3AoCiAgICAgICAgbm9kZSwKICAgICAgICBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2FwdHVyZWRMb29wU2NvcGUobm9kZSksCiAgICAgICAgX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yRm9ySW4obm9kZSksCiAgICAgICAgYnVpbGRJbml0aWFsaXplciwKICAgICAgICBidWlsZENvbmRpdGlvbiwKICAgICAgICAoKSB7fSwKICAgICAgICBidWlsZEJvZHksCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZExvb3Aobm9kZSkpOwogIH0KCiAgdm9pZCBfYnVpbGRBc3luY0ZvckluKGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIC8vIFRoZSBhc3luYy1mb3IgaXMgaW1wbGVtZW50ZWQgd2l0aCBhIFN0cmVhbUl0ZXJhdG9yLgogICAgSEluc3RydWN0aW9uIHN0cmVhbUl0ZXJhdG9yOwoKICAgIG5vZGUuaXRlcmFibGUuYWNjZXB0KHRoaXMpOwoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMgPSBbcG9wKCldOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gX2NvbW1vbkVsZW1lbnRzLnN0cmVhbUl0ZXJhdG9yOwogICAgRGFydFR5cGUgdHlwZUFyZyA9IF9lbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudmFyaWFibGUudHlwZSk7CiAgICBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZSA9CiAgICAgICAgbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dChuZXcgSW50ZXJmYWNlVHlwZShjbHMsIFt0eXBlQXJnXSkpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGQgYmUgdGhlIGV4YWN0IHR5cGUuCiAgICBTdGF0aWNUeXBlIHN0YXRpY0luc3RhbmNlVHlwZSA9CiAgICAgICAgbmV3IFN0YXRpY1R5cGUoaW5zdGFuY2VUeXBlLCBDbGFzc1JlbGF0aW9uLnN1YnR5cGUpOwogICAgX2FkZEltcGxpY2l0SW5zdGFudGlhdGlvbihpbnN0YW5jZVR5cGUpOwogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRGb3JJbkl0ZXJhdG9yKG5vZGUpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUGFzcyB0eXBlIGFyZ3VtZW50cyB0byBjb25zdHJ1Y3RvcnMgbGlrZSBjYWxsaW5nCiAgICAvLyBhIGdlbmVyaWMgbWV0aG9kLgogICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscykpIHsKICAgICAgX2FkZFR5cGVBcmd1bWVudHMoYXJndW1lbnRzLCBbdHlwZUFyZ10sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gX2NvbW1vbkVsZW1lbnRzLnN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3I7CiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oY29uc3RydWN0b3IsIGFyZ3VtZW50cywKICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YoY29uc3RydWN0b3IpLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgaW5zdGFuY2VUeXBlOiBpbnN0YW5jZVR5cGUsIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgc3RyZWFtSXRlcmF0b3IgPSBwb3AoKTsKCiAgICB2b2lkIGJ1aWxkSW5pdGlhbGl6ZXIoKSB7fQoKICAgIEhJbnN0cnVjdGlvbiBidWlsZENvbmRpdGlvbigpIHsKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPQogICAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAudHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChub2RlKTsKICAgICAgX3B1c2hEeW5hbWljSW52b2NhdGlvbigKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBzdGF0aWNJbnN0YW5jZVR5cGUsCiAgICAgICAgICByZWNlaXZlclR5cGUsCiAgICAgICAgICBTZWxlY3RvcnMubW92ZU5leHQsCiAgICAgICAgICBbc3RyZWFtSXRlcmF0b3JdLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluTW92ZU5leHQobm9kZSkpOwogICAgICBISW5zdHJ1Y3Rpb24gZnV0dXJlID0gcG9wKCk7CiAgICAgIHB1c2gobmV3IEhBd2FpdChmdXR1cmUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKSk7CiAgICAgIHJldHVybiBwb3BCb29saWZpZWQoKTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkQm9keSgpIHsKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPQogICAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAudHlwZU9mSXRlcmF0b3JDdXJyZW50KG5vZGUpOwogICAgICBfcHVzaER5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgbm9kZSwKICAgICAgICAgIHN0YXRpY0luc3RhbmNlVHlwZSwKICAgICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICAgIFNlbGVjdG9ycy5jdXJyZW50LAogICAgICAgICAgW3N0cmVhbUl0ZXJhdG9yXSwKICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRGb3JJbkl0ZXJhdG9yKG5vZGUpKTsKICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbCgKICAgICAgICAgIF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlLnZhcmlhYmxlKSwgcG9wKCkpOwogICAgICBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgfQoKICAgIHZvaWQgYnVpbGRVcGRhdGUoKSB7fQoKICAgIC8vIENyZWF0ZXMgYSBzeW50aGV0aWMgdHJ5L2ZpbmFsbHkgYmxvY2sgaW4gY2FzZSBhbnl0aGluZyBhc3luYyBnb2VzIGFtaXNzLgogICAgVHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlciB0cnlCdWlsZGVyID0gbmV3IFRyeUNhdGNoRmluYWxseUJ1aWxkZXIoCiAgICAgICAgdGhpcywgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZExvb3Aobm9kZSkpOwogICAgLy8gQnVpbGQgZmFrZSB0cnkgYm9keToKICAgIF9sb29wSGFuZGxlci5oYW5kbGVMb29wKAogICAgICAgIG5vZGUsCiAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwLmdldENhcHR1cmVkTG9vcFNjb3BlKG5vZGUpLAogICAgICAgIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckZvckluKG5vZGUpLAogICAgICAgIGJ1aWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgYnVpbGRDb25kaXRpb24sCiAgICAgICAgYnVpbGRVcGRhdGUsCiAgICAgICAgYnVpbGRCb2R5LAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRMb29wKG5vZGUpKTsKCiAgICB2b2lkIGZpbmFsaXplckZ1bmN0aW9uKCkgewogICAgICBfcHVzaER5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgbm9kZSwKICAgICAgICAgIHN0YXRpY0luc3RhbmNlVHlwZSwKICAgICAgICAgIG51bGwsCiAgICAgICAgICBTZWxlY3RvcnMuY2FuY2VsLAogICAgICAgICAgW3N0cmVhbUl0ZXJhdG9yXSwKICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIKICAgICAgICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgICAgICAgLmJ1aWxkR2VuZXJpYyhub2RlKSk7CiAgICAgIGFkZChuZXcgSEF3YWl0KHBvcCgpLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSkpOwogICAgfQoKICAgIHRyeUJ1aWxkZXIKICAgICAgLi5jbG9zZVRyeUJvZHkoKQogICAgICAuLmJ1aWxkRmluYWxseUJsb2NrKGZpbmFsaXplckZ1bmN0aW9uKQogICAgICAuLmNsZWFuVXAoKTsKICB9CgogIEhJbnN0cnVjdGlvbiBfY2FsbFNldFJ1bnRpbWVUeXBlSW5mbyhISW5zdHJ1Y3Rpb24gdHlwZUluZm8sCiAgICAgIEhJbnN0cnVjdGlvbiBuZXdPYmplY3QsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBTZXQgdGhlIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiBvbiB0aGUgb2JqZWN0LgogICAgRnVuY3Rpb25FbnRpdHkgdHlwZUluZm9TZXR0ZXJGbiA9IF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm87CiAgICAvLyBUT0RPKGVmb3J0dW5hKTogSW5zZXJ0IHNvdXJjZSBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0YXRpYyBpbnZvY2F0aW9uLgogICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKHR5cGVJbmZvU2V0dGVyRm4sIDxISW5zdHJ1Y3Rpb24+W25ld09iamVjdCwgdHlwZUluZm9dLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAvLyBUaGUgbmV3IG9iamVjdCB3aWxsIG5vdyBiZSByZWZlcmVuY2VkIHRocm91Z2ggdGhlCiAgICAvLyBgc2V0UnVudGltZVR5cGVJbmZvYCBjYWxsLiBXZSB0aGVyZWZvcmUgc2V0IHRoZSB0eXBlIG9mIHRoYXQKICAgIC8vIGluc3RydWN0aW9uIHRvIGJlIG9mIHRoZSBvYmplY3QncyB0eXBlLgogICAgYXNzZXJ0KAogICAgICAgIHN0YWNrLmxhc3QgaXMgSEludm9rZVN0YXRpYyB8fCBzdGFjay5sYXN0ID09IG5ld09iamVjdCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgYHN0YWNrLmxhc3RgOiBGb3VuZCAke3N0YWNrLmxhc3R9LCAiCiAgICAgICAgICAgICJleHBlY3RlZCAke25ld09iamVjdH0gb3IgYW4gSEludm9rZVN0YXRpYy4gIgogICAgICAgICAgICAiU3RhdGU6IHR5cGVJbmZvPSR0eXBlSW5mbywgc3RhY2s9JHN0YWNrLiIpKTsKICAgIHN0YWNrLmxhc3QuaW5zdHJ1Y3Rpb25UeXBlID0gbmV3T2JqZWN0Lmluc3RydWN0aW9uVHlwZTsKICAgIHJldHVybiBwb3AoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRXaGlsZVN0YXRlbWVudChpci5XaGlsZVN0YXRlbWVudCBub2RlKSB7CiAgICBhc3NlcnQoX2lzUmVhY2hhYmxlKTsKICAgIEhJbnN0cnVjdGlvbiBidWlsZENvbmRpdGlvbigpIHsKICAgICAgbm9kZS5jb25kaXRpb24uYWNjZXB0KHRoaXMpOwogICAgICByZXR1cm4gcG9wQm9vbGlmaWVkKCk7CiAgICB9CgogICAgX2xvb3BIYW5kbGVyLmhhbmRsZUxvb3AoCiAgICAgICAgbm9kZSwKICAgICAgICBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2FwdHVyZWRMb29wU2NvcGUobm9kZSksCiAgICAgICAgX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yV2hpbGUobm9kZSksCiAgICAgICAgKCkge30sCiAgICAgICAgYnVpbGRDb25kaXRpb24sCiAgICAgICAgKCkge30sICgpIHsKICAgICAgbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICAgIH0sIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRMb29wKG5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb1N0YXRlbWVudChpci5Eb1N0YXRlbWVudCBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZExvb3Aobm9kZSk7CiAgICAvLyBUT0RPKGVmb3J0dW5hKTogSSB0aGluayB0aGlzIGNhbiBiZSByZXdyaXR0ZW4gdXNpbmcKICAgIC8vIExvb3BIYW5kbGVyLmhhbmRsZUxvb3Agd2l0aCBzb21lIHRyaWNrcyBhYm91dCB3aGVuIHRoZSAidXBkYXRlIiBoYXBwZW5zLgogICAgTG9jYWxzSGFuZGxlciBzYXZlZExvY2FscyA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20obG9jYWxzSGFuZGxlcik7CiAgICBDYXB0dXJlZExvb3BTY29wZSBsb29wQ2xvc3VyZUluZm8gPQogICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDYXB0dXJlZExvb3BTY29wZShub2RlKTsKICAgIGxvY2Fsc0hhbmRsZXIuc3RhcnRMb29wKGxvb3BDbG9zdXJlSW5mbywgc291cmNlSW5mb3JtYXRpb24pOwogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JEbyhub2RlKTsKICAgIEp1bXBIYW5kbGVyIGp1bXBIYW5kbGVyID0gX2xvb3BIYW5kbGVyLmJlZ2luTG9vcEhlYWRlcihub2RlLCB0YXJnZXQpOwogICAgSExvb3BJbmZvcm1hdGlvbiBsb29wSW5mbyA9IGN1cnJlbnQubG9vcEluZm9ybWF0aW9uOwogICAgSEJhc2ljQmxvY2sgbG9vcEVudHJ5QmxvY2sgPSBjdXJyZW50OwogICAgSEJhc2ljQmxvY2sgYm9keUVudHJ5QmxvY2sgPSBjdXJyZW50OwogICAgYm9vbCBoYXNDb250aW51ZXMgPSB0YXJnZXQgIT0gbnVsbCAmJiB0YXJnZXQuaXNDb250aW51ZVRhcmdldDsKICAgIGlmIChoYXNDb250aW51ZXMpIHsKICAgICAgLy8gQWRkIGV4dHJhIGJsb2NrIHRvIGhhbmcgbGFiZWxzIG9uLgogICAgICAvLyBJdCBkb2Vzbid0IGN1cnJlbnRseSB3b3JrIGlmIHRoZXkgYXJlIG9uIHRoZSBzYW1lIGJsb2NrIGFzIHRoZQogICAgICAvLyBITG9vcEluZm8uIFRoZSBoYW5kbGluZyBvZiBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24gd2lsbCB2aXNpdCBhCiAgICAgIC8vIFN1YkdyYXBoIHRoYXQgc3RhcnRzIGF0IHRoZSBzYW1lIGJsb2NrIGFnYWluLCBzbyB0aGUgSExvb3BJbmZvIGlzCiAgICAgIC8vIGVpdGhlciBoYW5kbGVkIHR3aWNlLCBvciBpdCdzIGhhbmRsZWQgYWZ0ZXIgdGhlIGxhYmVsZWQgYmxvY2sgaW5mbywKICAgICAgLy8gYm90aCBvZiB3aGljaCBnZW5lcmF0ZSB0aGUgd3JvbmcgY29kZS4KICAgICAgLy8gVXNpbmcgYSBzZXBhcmF0ZSBibG9jayBpcyBqdXN0IGEgc2ltcGxlIHdvcmthcm91bmQuCiAgICAgIGJvZHlFbnRyeUJsb2NrID0gb3Blbk5ld0Jsb2NrKCk7CiAgICB9CiAgICBsb2NhbHNIYW5kbGVyLmVudGVyTG9vcEJvZHkobG9vcENsb3N1cmVJbmZvLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwoKICAgIC8vIElmIHRoZXJlIGFyZSBubyBjb250aW51ZXMgd2UgY291bGQgYXZvaWQgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb25kaXRpb24KICAgIC8vIGJsb2NrLiBUaGlzIGNvdWxkIGFsc28gbGVhZCB0byBhIGJsb2NrIGhhdmluZyBtdWx0aXBsZSBlbnRyaWVzIGFuZCBleGl0cy4KICAgIEhCYXNpY0Jsb2NrIGJvZHlFeGl0QmxvY2s7CiAgICBib29sIGlzQWJvcnRpbmdCb2R5ID0gZmFsc2U7CiAgICBpZiAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIGJvZHlFeGl0QmxvY2sgPSBjbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIGlzQWJvcnRpbmdCb2R5ID0gdHJ1ZTsKICAgICAgYm9keUV4aXRCbG9jayA9IGxhc3RPcGVuZWRCbG9jazsKICAgIH0KCiAgICBTdWJFeHByZXNzaW9uIGNvbmRpdGlvbkV4cHJlc3Npb247CiAgICBib29sIGxvb3BJc0RlZ2VuZXJhdGUgPSBpc0Fib3J0aW5nQm9keSAmJiAhaGFzQ29udGludWVzOwogICAgaWYgKCFsb29wSXNEZWdlbmVyYXRlKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGNvbmRpdGlvbkJsb2NrID0gYWRkTmV3QmxvY2soKTsKCiAgICAgIExpc3Q8TG9jYWxzSGFuZGxlcj4gY29udGludWVIYW5kbGVycyA9IDxMb2NhbHNIYW5kbGVyPltdOwogICAgICBqdW1wSGFuZGxlcgogICAgICAgICAgLmZvckVhY2hDb250aW51ZSgoSENvbnRpbnVlIGluc3RydWN0aW9uLCBMb2NhbHNIYW5kbGVyIGxvY2FscykgewogICAgICAgIGluc3RydWN0aW9uLmJsb2NrLmFkZFN1Y2Nlc3Nvcihjb25kaXRpb25CbG9jayk7CiAgICAgICAgY29udGludWVIYW5kbGVycy5hZGQobG9jYWxzKTsKICAgICAgfSk7CgogICAgICBpZiAoIWlzQWJvcnRpbmdCb2R5KSB7CiAgICAgICAgYm9keUV4aXRCbG9jay5hZGRTdWNjZXNzb3IoY29uZGl0aW9uQmxvY2spOwogICAgICB9CgogICAgICBpZiAoIWNvbnRpbnVlSGFuZGxlcnMuaXNFbXB0eSkgewogICAgICAgIGlmICghaXNBYm9ydGluZ0JvZHkpIGNvbnRpbnVlSGFuZGxlcnMuYWRkKGxvY2Fsc0hhbmRsZXIpOwogICAgICAgIGxvY2Fsc0hhbmRsZXIgPQogICAgICAgICAgICBzYXZlZExvY2Fscy5tZXJnZU11bHRpcGxlKGNvbnRpbnVlSGFuZGxlcnMsIGNvbmRpdGlvbkJsb2NrKTsKICAgICAgICBTdWJHcmFwaCBib2R5R3JhcGggPSBuZXcgU3ViR3JhcGgoYm9keUVudHJ5QmxvY2ssIGJvZHlFeGl0QmxvY2spOwogICAgICAgIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBsYWJlbHMgPSBqdW1wSGFuZGxlci5sYWJlbHM7CiAgICAgICAgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbiBib2R5SW5mbyA9CiAgICAgICAgICAgIG5ldyBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uKGJvZHlHcmFwaCk7CiAgICAgICAgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgaWYgKCFsYWJlbHMuaXNFbXB0eSkgewogICAgICAgICAgaW5mbyA9CiAgICAgICAgICAgICAgbmV3IEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbihib2R5SW5mbywgbGFiZWxzLCBpc0NvbnRpbnVlOiB0cnVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5mbyA9IG5ldyBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24uaW1wbGljaXQoYm9keUluZm8sIHRhcmdldCwKICAgICAgICAgICAgICBpc0NvbnRpbnVlOiB0cnVlKTsKICAgICAgICB9CiAgICAgICAgYm9keUVudHJ5QmxvY2suc2V0QmxvY2tGbG93KGluZm8sIGNvbmRpdGlvbkJsb2NrKTsKICAgICAgfQogICAgICBvcGVuKGNvbmRpdGlvbkJsb2NrKTsKCiAgICAgIG5vZGUuY29uZGl0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgYXNzZXJ0KCFpc0Fib3J0ZWQoKSk7CiAgICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb25JbnN0cnVjdGlvbiA9IHBvcEJvb2xpZmllZCgpOwogICAgICBIQmFzaWNCbG9jayBjb25kaXRpb25FbmRCbG9jayA9IGNsb3NlKG5ldyBITG9vcEJyYW5jaCgKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICAgICAgY29uZGl0aW9uSW5zdHJ1Y3Rpb24sCiAgICAgICAgICBITG9vcEJyYW5jaC5ET19XSElMRV9MT09QKSk7CgogICAgICBIQmFzaWNCbG9jayBhdm9pZENyaXRpY2FsRWRnZSA9IGFkZE5ld0Jsb2NrKCk7CiAgICAgIGNvbmRpdGlvbkVuZEJsb2NrLmFkZFN1Y2Nlc3Nvcihhdm9pZENyaXRpY2FsRWRnZSk7CiAgICAgIG9wZW4oYXZvaWRDcml0aWNhbEVkZ2UpOwogICAgICBjbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgICAgYXZvaWRDcml0aWNhbEVkZ2UuYWRkU3VjY2Vzc29yKGxvb3BFbnRyeUJsb2NrKTsgLy8gVGhlIGJhY2stZWRnZS4KCiAgICAgIGNvbmRpdGlvbkV4cHJlc3Npb24gPQogICAgICAgICAgbmV3IFN1YkV4cHJlc3Npb24oY29uZGl0aW9uQmxvY2ssIGNvbmRpdGlvbkVuZEJsb2NrKTsKCiAgICAgIC8vIEF2b2lkIGEgY3JpdGljYWwgZWRnZSBmcm9tIHRoZSBjb25kaXRpb24gdG8gdGhlIGxvb3AtZXhpdCBib2R5LgogICAgICBIQmFzaWNCbG9jayBjb25kaXRpb25FeGl0QmxvY2sgPSBhZGROZXdCbG9jaygpOwogICAgICBvcGVuKGNvbmRpdGlvbkV4aXRCbG9jayk7CiAgICAgIGNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgICBjb25kaXRpb25FbmRCbG9jay5hZGRTdWNjZXNzb3IoY29uZGl0aW9uRXhpdEJsb2NrKTsKCiAgICAgIF9sb29wSGFuZGxlci5lbmRMb29wKAogICAgICAgICAgbG9vcEVudHJ5QmxvY2ssIGNvbmRpdGlvbkV4aXRCbG9jaywganVtcEhhbmRsZXIsIGxvY2Fsc0hhbmRsZXIpOwoKICAgICAgbG9vcEVudHJ5QmxvY2sucG9zdFByb2Nlc3NMb29wSGVhZGVyKCk7CiAgICAgIFN1YkdyYXBoIGJvZHlHcmFwaCA9IG5ldyBTdWJHcmFwaChsb29wRW50cnlCbG9jaywgYm9keUV4aXRCbG9jayk7CiAgICAgIEhMb29wQmxvY2tJbmZvcm1hdGlvbiBsb29wQmxvY2tJbmZvID0gbmV3IEhMb29wQmxvY2tJbmZvcm1hdGlvbigKICAgICAgICAgIEhMb29wQmxvY2tJbmZvcm1hdGlvbi5ET19XSElMRV9MT09QLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIHdyYXBFeHByZXNzaW9uR3JhcGgoY29uZGl0aW9uRXhwcmVzc2lvbiksCiAgICAgICAgICB3cmFwU3RhdGVtZW50R3JhcGgoYm9keUdyYXBoKSwKICAgICAgICAgIG51bGwsCiAgICAgICAgICBsb29wRW50cnlCbG9jay5sb29wSW5mb3JtYXRpb24udGFyZ2V0LAogICAgICAgICAgbG9vcEVudHJ5QmxvY2subG9vcEluZm9ybWF0aW9uLmxhYmVscywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgbG9vcEVudHJ5QmxvY2suc2V0QmxvY2tGbG93KGxvb3BCbG9ja0luZm8sIGN1cnJlbnQpOwogICAgICBsb29wSW5mby5sb29wQmxvY2tJbmZvcm1hdGlvbiA9IGxvb3BCbG9ja0luZm87CiAgICB9IGVsc2UgewogICAgICAvLyBTaW5jZSB0aGUgbG9vcCBoYXMgbm8gYmFjayBlZGdlLCB3ZSByZW1vdmUgdGhlIGxvb3AgaW5mb3JtYXRpb24gb24gdGhlCiAgICAgIC8vIGhlYWRlci4KICAgICAgbG9vcEVudHJ5QmxvY2subG9vcEluZm9ybWF0aW9uID0gbnVsbDsKCiAgICAgIGlmIChqdW1wSGFuZGxlci5oYXNBbnlCcmVhaygpKSB7CiAgICAgICAgLy8gTnVsbCBicmFuY2hCbG9jayBiZWNhdXNlIHRoZSBib2R5IG9mIHRoZSBkby13aGlsZSBsb29wIGFsd2F5cyBhYm9ydHMsCiAgICAgICAgLy8gc28gd2UgbmV2ZXIgZ2V0IHRvIHRoZSBjb25kaXRpb24uCiAgICAgICAgX2xvb3BIYW5kbGVyLmVuZExvb3AobG9vcEVudHJ5QmxvY2ssIG51bGwsIGp1bXBIYW5kbGVyLCBsb2NhbHNIYW5kbGVyKTsKCiAgICAgICAgLy8gU2luY2UgdGhlIGJvZHkgb2YgdGhlIGxvb3AgaGFzIGEgYnJlYWssIHdlIGF0dGFjaCBhIHN5bnRoZXNpemVkIGxhYmVsCiAgICAgICAgLy8gdG8gdGhlIGJvZHkuCiAgICAgICAgU3ViR3JhcGggYm9keUdyYXBoID0gbmV3IFN1YkdyYXBoKGJvZHlFbnRyeUJsb2NrLCBib2R5RXhpdEJsb2NrKTsKICAgICAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckRvKG5vZGUpOwogICAgICAgIExhYmVsRGVmaW5pdGlvbiBsYWJlbCA9IHRhcmdldC5hZGRMYWJlbCgnbG9vcCcsIGlzQnJlYWtUYXJnZXQ6IHRydWUpOwogICAgICAgIEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbiBpbmZvID0gbmV3IEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbigKICAgICAgICAgICAgbmV3IEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24oYm9keUdyYXBoKSwgPExhYmVsRGVmaW5pdGlvbj5bbGFiZWxdKTsKICAgICAgICBsb29wRW50cnlCbG9jay5zZXRCbG9ja0Zsb3coaW5mbywgY3VycmVudCk7CiAgICAgICAganVtcEhhbmRsZXIuZm9yRWFjaEJyZWFrKChIQnJlYWsgYnJlYWtJbnN0cnVjdGlvbiwgXykgewogICAgICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBicmVha0luc3RydWN0aW9uLmJsb2NrOwogICAgICAgICAgYmxvY2suYWRkQXRFeGl0KG5ldyBIQnJlYWsudG9MYWJlbCgKICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgbGFiZWwsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgICBibG9jay5yZW1vdmUoYnJlYWtJbnN0cnVjdGlvbik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGp1bXBIYW5kbGVyLmNsb3NlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SWZTdGF0ZW1lbnQoaXIuSWZTdGF0ZW1lbnQgbm9kZSkgewogICAgX2hhbmRsZUlmKAogICAgICAgIHZpc2l0Q29uZGl0aW9uOiAoKSA9PiBub2RlLmNvbmRpdGlvbi5hY2NlcHQodGhpcyksCiAgICAgICAgdmlzaXRUaGVuOiAoKSA9PiBub2RlLnRoZW4uYWNjZXB0KHRoaXMpLAogICAgICAgIHZpc2l0RWxzZTogKCkgPT4gbm9kZS5vdGhlcndpc2U/LmFjY2VwdCh0aGlzKSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZElmKG5vZGUpKTsKICB9CgogIHZvaWQgX2hhbmRsZUlmKAogICAgICB7aXIuTm9kZSBub2RlLAogICAgICB2b2lkIHZpc2l0Q29uZGl0aW9uKCksCiAgICAgIHZvaWQgdmlzaXRUaGVuKCksCiAgICAgIHZvaWQgdmlzaXRFbHNlKCksCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgU3NhQnJhbmNoQnVpbGRlciBicmFuY2hCdWlsZGVyID0gbmV3IFNzYUJyYW5jaEJ1aWxkZXIodGhpcywKICAgICAgICBub2RlID09IG51bGwgPyBudWxsIDogX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIG5vZGUpKTsKICAgIGJyYW5jaEJ1aWxkZXIuaGFuZGxlSWYodmlzaXRDb25kaXRpb24sIHZpc2l0VGhlbiwgdmlzaXRFbHNlLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpci5FeHByZXNzaW9uIG9wZXJhbmQgPSBub2RlLm9wZXJhbmQ7CiAgICBvcGVyYW5kLmFjY2VwdCh0aGlzKTsKCiAgICBTdGF0aWNUeXBlIG9wZXJhbmRUeXBlID0gX2dldFN0YXRpY1R5cGUob3BlcmFuZCk7CiAgICBEYXJ0VHlwZSB0eXBlID0gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlKTsKICAgIGlmIChfZWxlbWVudE1hcC50eXBlcy5pc1N1YnR5cGUob3BlcmFuZFR5cGUudHlwZSwgdHlwZSkpIHsKICAgICAgLy8gU2tpcCB1bm5lZWRlZCBjYXN0cy4KICAgICAgaWYgKG9wZXJhbmQgaXMhIGlyLlByb3BlcnR5R2V0KSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBwcm9wZXJ0eSBnZXQuIEN1cnJlbnRseSBDRkUgaW5zZXJ0cwogICAgICAgIC8vIGEgc2VlbWluZ2x5IHVubmVjZXNzYXJ5IGNhc3Qgb24gdGVhcm9mZnMgdGhhdCBjb250YWluIHR5cGUgdmFyaWFibGVzCiAgICAgICAgLy8gaW4gY29udHJhdmFyaWFudCBwb3NpdGlvbnMuIFNpbmNlIHRoZXNlIGNhc3RzIGFyZSBub3QgbWFya2VkIHdlCiAgICAgICAgLy8gY2Fubm90IGVhc2lseSBkZXRlY3Qgd2hlbiB3ZSBhY3R1YWxseSBuZWVkIHRoZSBjYXN0LiBTZWUgdGVzdAogICAgICAgIC8vIGBsYW5ndWFnZV8yL2luc3RhbnRpYXRlX3RlYXJvZmZfYWZ0ZXJfY29udHJhdmFyaWFuY2VfY2hlY2tfdGVzdGAuCiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBcyhub2RlKTsKICAgIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uSW5zdHJ1Y3Rpb24gPSBwb3AoKTsKCiAgICBpZiAobm9kZS50eXBlIGlzIGlyLkludmFsaWRUeXBlKSB7CiAgICAgIF9nZW5lcmF0ZVR5cGVFcnJvcignaW52YWxpZCB0eXBlJywgc291cmNlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm47CiAgICB9CgogICAgQ2hlY2tQb2xpY3kgcG9saWN5OwogICAgaWYgKG5vZGUuaXNUeXBlRXJyb3IpIHsKICAgICAgcG9saWN5ID0gY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAuZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5KF9jdXJyZW50RnJhbWUubWVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHBvbGljeSA9IGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgLmdldEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5KF9jdXJyZW50RnJhbWUubWVtYmVyKTsKICAgIH0KCiAgICBpZiAocG9saWN5LmlzRW1pdHRlZCkgewogICAgICBISW5zdHJ1Y3Rpb24gY29udmVydGVkID0gX3R5cGVCdWlsZGVyLmJ1aWxkVHlwZUNvbnZlcnNpb24oCiAgICAgICAgICBleHByZXNzaW9uSW5zdHJ1Y3Rpb24sCiAgICAgICAgICBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KHR5cGUpLAogICAgICAgICAgbm9kZS5pc1R5cGVFcnJvcgogICAgICAgICAgICAgID8gSFR5cGVDb252ZXJzaW9uLlRZUEVfQ0hFQ0sKICAgICAgICAgICAgICA6IEhUeXBlQ29udmVyc2lvbi5DQVNUX0NIRUNLLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgaWYgKGNvbnZlcnRlZCAhPSBleHByZXNzaW9uSW5zdHJ1Y3Rpb24pIHsKICAgICAgICBhZGQoY29udmVydGVkKTsKICAgICAgfQogICAgICBzdGFjay5hZGQoY29udmVydGVkKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YWNrLmFkZChleHByZXNzaW9uSW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgdm9pZCBfZ2VuZXJhdGVFcnJvcihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2ssIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gZXJyb3JNZXNzYWdlID0gZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcobWVzc2FnZSwgY2xvc2VkV29ybGQpOwogICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIGZ1bmN0aW9uLCBbZXJyb3JNZXNzYWdlXSwgdHlwZU1hc2ssIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdm9pZCBfZ2VuZXJhdGVUeXBlRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBfZ2VuZXJhdGVFcnJvcigKICAgICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dUeXBlRXJyb3IsCiAgICAgICAgbWVzc2FnZSwKICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YoX2NvbW1vbkVsZW1lbnRzLnRocm93VHlwZUVycm9yKSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIF9nZW5lcmF0ZVVuc3VwcG9ydGVkRXJyb3IoCiAgICAgIFN0cmluZyBtZXNzYWdlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgX2dlbmVyYXRlRXJyb3IoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93VW5zdXBwb3J0ZWRFcnJvciwKICAgICAgICBtZXNzYWdlLAogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwCiAgICAgICAgICAgIC5nZXRSZXR1cm5UeXBlT2YoX2NvbW1vbkVsZW1lbnRzLnRocm93VW5zdXBwb3J0ZWRFcnJvciksCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzc2VydFN0YXRlbWVudChpci5Bc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKCFvcHRpb25zLmVuYWJsZVVzZXJBc3NlcnRpb25zKSByZXR1cm47CiAgICB2YXIgc291cmNlSW5mb3JtYXRpb24gPSBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQXNzZXJ0KG5vZGUpOwogICAgaWYgKG5vZGUubWVzc2FnZSA9PSBudWxsKSB7CiAgICAgIG5vZGUuY29uZGl0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmFzc2VydEhlbHBlciwKICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W3BvcCgpXSwKICAgICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZihfY29tbW9uRWxlbWVudHMuYXNzZXJ0SGVscGVyKSwKICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHBvcCgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gaWYgKGFzc2VydFRlc3QoY29uZGl0aW9uKSkgYXNzZXJ0VGhyb3cobWVzc2FnZSk7CiAgICB2b2lkIGJ1aWxkQ29uZGl0aW9uKCkgewogICAgICBub2RlLmNvbmRpdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5hc3NlcnRUZXN0LAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5bcG9wKCldLAogICAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAuZ2V0UmV0dXJuVHlwZU9mKF9jb21tb25FbGVtZW50cy5hc3NlcnRUZXN0KSwKICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAgdm9pZCBmYWlsKCkgewogICAgICBub2RlLm1lc3NhZ2UuYWNjZXB0KHRoaXMpOwogICAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuYXNzZXJ0VGhyb3csCiAgICAgICAgICA8SEluc3RydWN0aW9uPltwb3AoKV0sCiAgICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YoX2NvbW1vbkVsZW1lbnRzLmFzc2VydFRocm93KSwKICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHBvcCgpOwogICAgfQoKICAgIF9oYW5kbGVJZih2aXNpdENvbmRpdGlvbjogYnVpbGRDb25kaXRpb24sIHZpc2l0VGhlbjogZmFpbCk7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtKdW1wSGFuZGxlcl0gZm9yIGEgc3RhdGVtZW50LiBUaGUgbm9kZSBtdXN0IGJlIGEganVtcAogIC8vLyB0YXJnZXQuIElmIHRoZXJlIGFyZSBubyBicmVha3Mgb3IgY29udGludWVzIHRhcmdldGluZyB0aGUgc3RhdGVtZW50LAogIC8vLyBhIHNwZWNpYWwgIm51bGwgaGFuZGxlciIgaXMgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIFtpc0xvb3BKdW1wXSBpcyB0cnVlIHdoZW4gdGhlIGp1bXAgaGFuZGxlciBpcyBmb3IgYSBsb29wLiBUaGlzIGlzIHVzZWQKICAvLy8gdG8gZGlzdGluZ3Vpc2ggdGhlIHN5bnRoZXNpemVkIGxvb3AgY3JlYXRlZCBmb3IgYSBzd2l0Y2ggc3RhdGVtZW50IHdpdGgKICAvLy8gY29udGludWUgc3RhdGVtZW50cyBmcm9tIHNpbXBsZSBzd2l0Y2ggc3RhdGVtZW50cy4KICBKdW1wSGFuZGxlciBjcmVhdGVKdW1wSGFuZGxlcihpci5UcmVlTm9kZSBub2RlLCBKdW1wVGFyZ2V0IHRhcmdldCwKICAgICAge2Jvb2wgaXNMb29wSnVtcDogZmFsc2V9KSB7CiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKICAgICAgLy8gTm8gYnJlYWtzIG9yIGNvbnRpbnVlcyB0byB0aGlzIG5vZGUuCiAgICAgIHJldHVybiBuZXcgTnVsbEp1bXBIYW5kbGVyKHJlcG9ydGVyKTsKICAgIH0KICAgIGlmIChpc0xvb3BKdW1wICYmIG5vZGUgaXMgaXIuU3dpdGNoU3RhdGVtZW50KSB7CiAgICAgIHJldHVybiBuZXcgS2VybmVsU3dpdGNoQ2FzZUp1bXBIYW5kbGVyKHRoaXMsIHRhcmdldCwgbm9kZSwgX2xvY2Fsc01hcCk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBKdW1wSGFuZGxlcih0aGlzLCB0YXJnZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJyZWFrU3RhdGVtZW50KGlyLkJyZWFrU3RhdGVtZW50IG5vZGUpIHsKICAgIGFzc2VydCghaXNBYm9ydGVkKCkpOwogICAgX2hhbmRsZUluVHJ5U3RhdGVtZW50KCk7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckJyZWFrKG5vZGUpOwogICAgYXNzZXJ0KHRhcmdldCAhPSBudWxsKTsKICAgIEp1bXBIYW5kbGVyIGhhbmRsZXIgPSBqdW1wVGFyZ2V0c1t0YXJnZXRdOwogICAgYXNzZXJ0KGhhbmRsZXIgIT0gbnVsbCk7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdvdG8obm9kZSk7CiAgICBpZiAoX2xvY2Fsc01hcC5nZW5lcmF0ZUNvbnRpbnVlRm9yQnJlYWsobm9kZSkpIHsKICAgICAgaWYgKGhhbmRsZXIubGFiZWxzLmlzTm90RW1wdHkpIHsKICAgICAgICBoYW5kbGVyLmdlbmVyYXRlQ29udGludWUoc291cmNlSW5mb3JtYXRpb24sIGhhbmRsZXIubGFiZWxzLmZpcnN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBoYW5kbGVyLmdlbmVyYXRlQ29udGludWUoc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoaGFuZGxlci5sYWJlbHMuaXNOb3RFbXB0eSkgewogICAgICAgIGhhbmRsZXIuZ2VuZXJhdGVCcmVhayhzb3VyY2VJbmZvcm1hdGlvbiwgaGFuZGxlci5sYWJlbHMuZmlyc3QpOwogICAgICB9IGVsc2UgewogICAgICAgIGhhbmRsZXIuZ2VuZXJhdGVCcmVhayhzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGlyLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgaXIuU3RhdGVtZW50IGJvZHkgPSBub2RlLmJvZHk7CiAgICBpZiAoSnVtcFZpc2l0b3IuY2FuQmVCcmVha1RhcmdldChib2R5KSkgewogICAgICAvLyBsb29wcyBhbmQgc3dpdGNoZXMgaGFuZGxlIGJyZWFrcyBvbiB0aGVpciBvd24KICAgICAgYm9keS5hY2NlcHQodGhpcyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIEp1bXBUYXJnZXQganVtcFRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckxhYmVsKG5vZGUpOwogICAgaWYgKGp1bXBUYXJnZXQgPT0gbnVsbCkgewogICAgICAvLyBUaGUgbGFiZWwgaXMgbm90IG5lZWRlZC4KICAgICAgYm9keS5hY2NlcHQodGhpcyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBKdW1wSGFuZGxlciBoYW5kbGVyID0gY3JlYXRlSnVtcEhhbmRsZXIobm9kZSwganVtcFRhcmdldCk7CgogICAgTG9jYWxzSGFuZGxlciBiZWZvcmVMb2NhbHMgPSBuZXcgTG9jYWxzSGFuZGxlci5mcm9tKGxvY2Fsc0hhbmRsZXIpOwoKICAgIEhCYXNpY0Jsb2NrIG5ld0Jsb2NrID0gb3Blbk5ld0Jsb2NrKCk7CiAgICBib2R5LmFjY2VwdCh0aGlzKTsKICAgIFN1YkdyYXBoIGJvZHlHcmFwaCA9IG5ldyBTdWJHcmFwaChuZXdCbG9jaywgbGFzdE9wZW5lZEJsb2NrKTsKCiAgICBIQmFzaWNCbG9jayBqb2luQmxvY2sgPSBncmFwaC5hZGROZXdCbG9jaygpOwogICAgTGlzdDxMb2NhbHNIYW5kbGVyPiBicmVha0hhbmRsZXJzID0gPExvY2Fsc0hhbmRsZXI+W107CiAgICBoYW5kbGVyLmZvckVhY2hCcmVhaygoSEJyZWFrIGJyZWFrSW5zdHJ1Y3Rpb24sIExvY2Fsc0hhbmRsZXIgbG9jYWxzKSB7CiAgICAgIGJyZWFrSW5zdHJ1Y3Rpb24uYmxvY2suYWRkU3VjY2Vzc29yKGpvaW5CbG9jayk7CiAgICAgIGJyZWFrSGFuZGxlcnMuYWRkKGxvY2Fscyk7CiAgICB9KTsKCiAgICBpZiAoIWlzQWJvcnRlZCgpKSB7CiAgICAgIGdvdG8oY3VycmVudCwgam9pbkJsb2NrKTsKICAgICAgYnJlYWtIYW5kbGVycy5hZGQobG9jYWxzSGFuZGxlcik7CiAgICB9CgogICAgb3Blbihqb2luQmxvY2spOwogICAgbG9jYWxzSGFuZGxlciA9IGJlZm9yZUxvY2Fscy5tZXJnZU11bHRpcGxlKGJyZWFrSGFuZGxlcnMsIGpvaW5CbG9jayk7CgogICAgLy8gVGhlcmUgd2FzIGF0IGxlYXN0IG9uZSByZWFjaGFibGUgYnJlYWssIHNvIHRoZSBsYWJlbCBpcyBuZWVkZWQuCiAgICBuZXdCbG9jay5zZXRCbG9ja0Zsb3coCiAgICAgICAgbmV3IEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbigKICAgICAgICAgICAgbmV3IEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24oYm9keUdyYXBoKSwgaGFuZGxlci5sYWJlbHMpLAogICAgICAgIGpvaW5CbG9jayk7CiAgICBoYW5kbGVyLmNsb3NlKCk7CiAgfQoKICAvLy8gTG9vcCB0aHJvdWdoIHRoZSBjYXNlcyBpbiBhIHN3aXRjaCBhbmQgY3JlYXRlIGEgbWFwcGluZyBvZiBjYXNlCiAgLy8vIGV4cHJlc3Npb25zIHRvIGNvbnN0YW50cy4KICBNYXA8aXIuRXhwcmVzc2lvbiwgQ29uc3RhbnRWYWx1ZT4gX2J1aWxkU3dpdGNoQ2FzZUNvbnN0YW50cygKICAgICAgaXIuU3dpdGNoU3RhdGVtZW50IHN3aXRjaFN0YXRlbWVudCkgewogICAgTWFwPGlyLkV4cHJlc3Npb24sIENvbnN0YW50VmFsdWU+IGNvbnN0YW50cyA9CiAgICAgICAgbmV3IE1hcDxpci5FeHByZXNzaW9uLCBDb25zdGFudFZhbHVlPigpOwogICAgZm9yIChpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gc3dpdGNoU3RhdGVtZW50LmNhc2VzKSB7CiAgICAgIGZvciAoaXIuRXhwcmVzc2lvbiBjYXNlRXhwcmVzc2lvbiBpbiBzd2l0Y2hDYXNlLmV4cHJlc3Npb25zKSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUoY2FzZUV4cHJlc3Npb24pOwogICAgICAgIGNvbnN0YW50c1tjYXNlRXhwcmVzc2lvbl0gPSBjb25zdGFudDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbnN0YW50czsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBfaGFuZGxlSW5UcnlTdGF0ZW1lbnQoKTsKICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yQ29udGludWVTd2l0Y2gobm9kZSk7CiAgICBhc3NlcnQodGFyZ2V0ICE9IG51bGwpOwogICAgSnVtcEhhbmRsZXIgaGFuZGxlciA9IGp1bXBUYXJnZXRzW3RhcmdldF07CiAgICBhc3NlcnQoaGFuZGxlciAhPSBudWxsKTsKICAgIGFzc2VydCh0YXJnZXQubGFiZWxzLmlzTm90RW1wdHkpOwogICAgaGFuZGxlci5nZW5lcmF0ZUNvbnRpbnVlKAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRHb3RvKG5vZGUpLCB0YXJnZXQubGFiZWxzLmZpcnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkU3dpdGNoKG5vZGUpOwogICAgLy8gVGhlIHN3aXRjaCBjYXNlIGluZGljZXMgbXVzdCBtYXRjaCB0aG9zZSBjb21wdXRlZCBpbgogICAgLy8gW0tlcm5lbFN3aXRjaENhc2VKdW1wSGFuZGxlcl0uCiAgICBib29sIGhhc0NvbnRpbnVlID0gZmFsc2U7CiAgICBNYXA8aXIuU3dpdGNoQ2FzZSwgaW50PiBjYXNlSW5kZXggPSBuZXcgTWFwPGlyLlN3aXRjaENhc2UsIGludD4oKTsKICAgIGludCBzd2l0Y2hJbmRleCA9IDE7CiAgICBib29sIGhhc0RlZmF1bHQgPSBmYWxzZTsKICAgIGZvciAoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlIGluIG5vZGUuY2FzZXMpIHsKICAgICAgaWYgKF9pc0RlZmF1bHRDYXNlKHN3aXRjaENhc2UpKSB7CiAgICAgICAgaGFzRGVmYXVsdCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKFN3aXRjaENvbnRpbnVlQW5hbHlzaXMuY29udGFpbnNDb250aW51ZShzd2l0Y2hDYXNlLmJvZHkpKSB7CiAgICAgICAgaGFzQ29udGludWUgPSB0cnVlOwogICAgICB9CiAgICAgIGNhc2VJbmRleFtzd2l0Y2hDYXNlXSA9IHN3aXRjaEluZGV4OwogICAgICBzd2l0Y2hJbmRleCsrOwogICAgfQoKICAgIEp1bXBIYW5kbGVyIGp1bXBIYW5kbGVyID0KICAgICAgICBjcmVhdGVKdW1wSGFuZGxlcihub2RlLCBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JTd2l0Y2gobm9kZSkpOwogICAgaWYgKCFoYXNDb250aW51ZSkgewogICAgICAvLyBJZiB0aGUgc3dpdGNoIHN0YXRlbWVudCBoYXMgbm8gc3dpdGNoIGNhc2VzIHRhcmdldGVkIGJ5IGNvbnRpbnVlCiAgICAgIC8vIHN0YXRlbWVudHMgd2UgZW5jb2RlIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGRpcmVjdGx5LgogICAgICBfYnVpbGRTaW1wbGVTd2l0Y2hTdGF0ZW1lbnQobm9kZSwganVtcEhhbmRsZXIsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIF9idWlsZENvbXBsZXhTd2l0Y2hTdGF0ZW1lbnQoCiAgICAgICAgICBub2RlLCBqdW1wSGFuZGxlciwgY2FzZUluZGV4LCBoYXNEZWZhdWx0LCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICAvLy8gSGVscGVyIGZvciBidWlsZGluZyBzd2l0Y2ggc3RhdGVtZW50cy4KICBzdGF0aWMgYm9vbCBfaXNEZWZhdWx0Q2FzZShpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UpID0+CiAgICAgIHN3aXRjaENhc2UgPT0gbnVsbCB8fCBzd2l0Y2hDYXNlLmlzRGVmYXVsdDsKCiAgLy8vIEhlbHBlciBmb3IgYnVpbGRpbmcgc3dpdGNoIHN0YXRlbWVudHMuCiAgSEluc3RydWN0aW9uIF9idWlsZEV4cHJlc3Npb24oaXIuU3dpdGNoU3RhdGVtZW50IHN3aXRjaFN0YXRlbWVudCkgewogICAgc3dpdGNoU3RhdGVtZW50LmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpOwogICAgcmV0dXJuIHBvcCgpOwogIH0KCiAgLy8vIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIHRoZSBsaXN0IG9mIGNvbnN0YW50cyB0aGF0IG1ha2UgdXAgdGhlCiAgLy8vIHN3aXRjaCBjYXNlIGJyYW5jaGVzLgogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gX2dldFN3aXRjaENvbnN0YW50cygKICAgICAgaXIuU3dpdGNoU3RhdGVtZW50IHBhcmVudFN3aXRjaCwgaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKSB7CiAgICBNYXA8aXIuRXhwcmVzc2lvbiwgQ29uc3RhbnRWYWx1ZT4gY29uc3RhbnRzTG9va3VwID0KICAgICAgICBfYnVpbGRTd2l0Y2hDYXNlQ29uc3RhbnRzKHBhcmVudFN3aXRjaCk7CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IGNvbnN0YW50TGlzdCA9IDxDb25zdGFudFZhbHVlPltdOwogICAgaWYgKHN3aXRjaENhc2UgIT0gbnVsbCkgewogICAgICBmb3IgKHZhciBleHByZXNzaW9uIGluIHN3aXRjaENhc2UuZXhwcmVzc2lvbnMpIHsKICAgICAgICBjb25zdGFudExpc3QuYWRkKGNvbnN0YW50c0xvb2t1cFtleHByZXNzaW9uXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb25zdGFudExpc3Q7CiAgfQoKICAvLy8gQnVpbGRzIGEgc2ltcGxlIHN3aXRjaCBzdGF0ZW1lbnQgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHVzZXMgb2YgY29udGludWUKICAvLy8gc3RhdGVtZW50cyB0byBsYWJlbGVkIHN3aXRjaCBjYXNlcy4KICB2b2lkIF9idWlsZFNpbXBsZVN3aXRjaFN0YXRlbWVudChpci5Td2l0Y2hTdGF0ZW1lbnQgc3dpdGNoU3RhdGVtZW50LAogICAgICBKdW1wSGFuZGxlciBqdW1wSGFuZGxlciwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHZvaWQgYnVpbGRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSkgewogICAgICBzd2l0Y2hDYXNlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgfQoKICAgIF9oYW5kbGVTd2l0Y2goCiAgICAgICAgc3dpdGNoU3RhdGVtZW50LAogICAgICAgIGp1bXBIYW5kbGVyLAogICAgICAgIF9idWlsZEV4cHJlc3Npb24sCiAgICAgICAgc3dpdGNoU3RhdGVtZW50LmNhc2VzLAogICAgICAgIF9nZXRTd2l0Y2hDb25zdGFudHMsCiAgICAgICAgX2lzRGVmYXVsdENhc2UsCiAgICAgICAgYnVpbGRTd2l0Y2hDYXNlLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGp1bXBIYW5kbGVyLmNsb3NlKCk7CiAgfQoKICAvLy8gQnVpbGRzIGEgc3dpdGNoIHN0YXRlbWVudCB0aGF0IGNhbiBoYW5kbGUgYXJiaXRyYXJ5IHVzZXMgb2YgY29udGludWUKICAvLy8gc3RhdGVtZW50cyB0byBsYWJlbGVkIHN3aXRjaCBjYXNlcy4KICB2b2lkIF9idWlsZENvbXBsZXhTd2l0Y2hTdGF0ZW1lbnQoCiAgICAgIGlyLlN3aXRjaFN0YXRlbWVudCBzd2l0Y2hTdGF0ZW1lbnQsCiAgICAgIEp1bXBIYW5kbGVyIGp1bXBIYW5kbGVyLAogICAgICBNYXA8aXIuU3dpdGNoQ2FzZSwgaW50PiBjYXNlSW5kZXgsCiAgICAgIGJvb2wgaGFzRGVmYXVsdCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIC8vIElmIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGhhcyBzd2l0Y2ggY2FzZXMgdGFyZ2V0ZWQgYnkgY29udGludWUKICAgIC8vIHN0YXRlbWVudHMgd2UgY3JlYXRlIHRoZSBmb2xsb3dpbmcgZW5jb2Rpbmc6CiAgICAvLwogICAgLy8gICBzd2l0Y2ggKGUpIHsKICAgIC8vICAgICBsXzE6IGNhc2UgZTA6IHNfMTsgYnJlYWs7CiAgICAvLyAgICAgbF8yOiBjYXNlIGUxOiBzXzI7IGNvbnRpbnVlIGxfaTsKICAgIC8vICAgICAuLi4KICAgIC8vICAgICBsX246IGRlZmF1bHQ6IHNfbjsgY29udGludWUgbF9qOwogICAgLy8gICB9CiAgICAvLwogICAgLy8gaXMgZW5jb2RlZCBhcwogICAgLy8KICAgIC8vICAgdmFyIHRhcmdldDsKICAgIC8vICAgc3dpdGNoIChlKSB7CiAgICAvLyAgICAgY2FzZSBlMTogdGFyZ2V0ID0gMTsgYnJlYWs7CiAgICAvLyAgICAgY2FzZSBlMjogdGFyZ2V0ID0gMjsgYnJlYWs7CiAgICAvLyAgICAgLi4uCiAgICAvLyAgICAgZGVmYXVsdDogdGFyZ2V0ID0gbjsgYnJlYWs7CiAgICAvLyAgIH0KICAgIC8vICAgbDogd2hpbGUgKHRydWUpIHsKICAgIC8vICAgIHN3aXRjaCAodGFyZ2V0KSB7CiAgICAvLyAgICAgICBjYXNlIDE6IHNfMTsgYnJlYWsgbDsKICAgIC8vICAgICAgIGNhc2UgMjogc18yOyB0YXJnZXQgPSBpOyBjb250aW51ZSBsOwogICAgLy8gICAgICAgLi4uCiAgICAvLyAgICAgICBjYXNlIG46IHNfbjsgdGFyZ2V0ID0gajsgY29udGludWUgbDsKICAgIC8vICAgICB9CiAgICAvLyAgIH0KICAgIC8vCiAgICAvLyBUaGlzIGlzIGJlY2F1c2UgSlMgZG9lcyBub3QgaGF2ZSB0aGlzIHNhbWUgImNvbnRpbnVlIGxhYmVsIiBzZW1hbnRpY3Mgc28KICAgIC8vIHdlIGVuY29kZSBpdCBpbiB0aGUgZm9ybSBvZiBhIHN0YXRlIG1hY2hpbmUuCgogICAgSnVtcFRhcmdldCBzd2l0Y2hUYXJnZXQgPQogICAgICAgIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvclN3aXRjaChzd2l0Y2hTdGF0ZW1lbnQpOwogICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChzd2l0Y2hUYXJnZXQsIGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwoKICAgIHZhciBzd2l0Y2hDYXNlcyA9IHN3aXRjaFN0YXRlbWVudC5jYXNlczsKICAgIGlmICghaGFzRGVmYXVsdCkgewogICAgICAvLyBVc2UgbnVsbCBhcyB0aGUgbWFya2VyIGZvciBhIHN5bnRoZXRpYyBkZWZhdWx0IGNsYXVzZS4KICAgICAgLy8gVGhlIHN5bnRoZXRpYyBkZWZhdWx0IGlzIGFkZGVkIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZXJlIHdvdWxkIGJlIG5vCiAgICAgIC8vIGdvb2QgcGxhY2UgdG8gZ2l2ZSBhIGRlZmF1bHQgdmFsdWUgdG8gdGhlIGxvY2FsLgogICAgICBzd2l0Y2hDYXNlcyA9IG5ldyBMaXN0PGlyLlN3aXRjaENhc2U+LmZyb20oc3dpdGNoQ2FzZXMpOwogICAgICBzd2l0Y2hDYXNlcy5hZGQobnVsbCk7CiAgICB9CgogICAgdm9pZCBidWlsZFN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKSB7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGNhc2VTb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgICBpZiAoc3dpdGNoQ2FzZSAhPSBudWxsKSB7CiAgICAgICAgY2FzZVNvdXJjZUluZm9ybWF0aW9uID0gX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdvdG8oc3dpdGNoQ2FzZSk7CiAgICAgICAgLy8gR2VuZXJhdGUgJ3RhcmdldCA9IGk7IGJyZWFrOycgZm9yIHN3aXRjaCBjYXNlIGkuCiAgICAgICAgaW50IGluZGV4ID0gY2FzZUluZGV4W3N3aXRjaENhc2VdOwogICAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IGdyYXBoLmFkZENvbnN0YW50SW50KGluZGV4LCBjbG9zZWRXb3JsZCk7CiAgICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChzd2l0Y2hUYXJnZXQsIHZhbHVlLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogY2FzZVNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBHZW5lcmF0ZSBzeW50aGV0aWMgZGVmYXVsdCBjYXNlICd0YXJnZXQgPSBudWxsOyBicmVhazsnLgogICAgICAgIEhJbnN0cnVjdGlvbiBudWxsVmFsdWUgPSBncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpOwogICAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwoc3dpdGNoVGFyZ2V0LCBudWxsVmFsdWUsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBjYXNlU291cmNlSW5mb3JtYXRpb24pOwogICAgICB9CiAgICAgIGp1bXBUYXJnZXRzW3N3aXRjaFRhcmdldF0uZ2VuZXJhdGVCcmVhayhjYXNlU291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIF9oYW5kbGVTd2l0Y2goCiAgICAgICAgc3dpdGNoU3RhdGVtZW50LAogICAgICAgIGp1bXBIYW5kbGVyLAogICAgICAgIF9idWlsZEV4cHJlc3Npb24sCiAgICAgICAgc3dpdGNoQ2FzZXMsCiAgICAgICAgX2dldFN3aXRjaENvbnN0YW50cywKICAgICAgICBfaXNEZWZhdWx0Q2FzZSwKICAgICAgICBidWlsZFN3aXRjaENhc2UsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAganVtcEhhbmRsZXIuY2xvc2UoKTsKCiAgICBISW5zdHJ1Y3Rpb24gYnVpbGRDb25kaXRpb24oKSA9PiBncmFwaC5hZGRDb25zdGFudEJvb2wodHJ1ZSwgY2xvc2VkV29ybGQpOwoKICAgIHZvaWQgYnVpbGRTd2l0Y2goKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBidWlsZEV4cHJlc3Npb24oaXIuU3dpdGNoU3RhdGVtZW50IG5vdFVzZWQpIHsKICAgICAgICByZXR1cm4gbG9jYWxzSGFuZGxlci5yZWFkTG9jYWwoc3dpdGNoVGFyZ2V0KTsKICAgICAgfQoKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXRDb25zdGFudHMoCiAgICAgICAgICBpci5Td2l0Y2hTdGF0ZW1lbnQgcGFyZW50U3dpdGNoLCBpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UpIHsKICAgICAgICByZXR1cm4gPENvbnN0YW50VmFsdWU+WwogICAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludEZyb21JbnQoY2FzZUluZGV4W3N3aXRjaENhc2VdKQogICAgICAgIF07CiAgICAgIH0KCiAgICAgIHZvaWQgYnVpbGRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSkgewogICAgICAgIHN3aXRjaENhc2UuYm9keS5hY2NlcHQodGhpcyk7CiAgICAgICAgaWYgKCFpc0Fib3J0ZWQoKSkgewogICAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgYnJlYWsgdGhlIGxvb3AgaWYgdGhlIGNhc2UgZmFsbHMgdGhyb3VnaC4gKFRoaXMKICAgICAgICAgIC8vIGlzIG9ubHkgcG9zc2libGUgZm9yIHRoZSBsYXN0IGNhc2UuKQogICAgICAgICAganVtcFRhcmdldHNbc3dpdGNoVGFyZ2V0XS5nZW5lcmF0ZUJyZWFrKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFBhc3MgYSBbTnVsbEp1bXBIYW5kbGVyXSBiZWNhdXNlIHRoZSB0YXJnZXQgZm9yIHRoZSBjb250YWluZWQgYnJlYWsKICAgICAgLy8gaXMgbm90IHRoZSBnZW5lcmF0ZWQgc3dpdGNoIHN0YXRlbWVudCBidXQgaW5zdGVhZCB0aGUgbG9vcCBnZW5lcmF0ZWQKICAgICAgLy8gaW4gdGhlIGNhbGwgdG8gW2hhbmRsZUxvb3BdIGJlbG93LgogICAgICBfaGFuZGxlU3dpdGNoKAogICAgICAgICAgc3dpdGNoU3RhdGVtZW50LCAvLyBub3IgaXMgYnVpbGRFeHByZXNzaW9uLgogICAgICAgICAgbmV3IE51bGxKdW1wSGFuZGxlcihyZXBvcnRlciksCiAgICAgICAgICBidWlsZEV4cHJlc3Npb24sCiAgICAgICAgICBzd2l0Y2hTdGF0ZW1lbnQuY2FzZXMsCiAgICAgICAgICBnZXRDb25zdGFudHMsCiAgICAgICAgICAoXykgPT4gZmFsc2UsIC8vIE5vIGNhc2UgaXMgZGVmYXVsdC4KICAgICAgICAgIGJ1aWxkU3dpdGNoQ2FzZSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkTG9vcCgpIHsKICAgICAgX2xvb3BIYW5kbGVyLmhhbmRsZUxvb3AoCiAgICAgICAgICBzd2l0Y2hTdGF0ZW1lbnQsCiAgICAgICAgICBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2FwdHVyZWRMb29wU2NvcGUoc3dpdGNoU3RhdGVtZW50KSwKICAgICAgICAgIHN3aXRjaFRhcmdldCwKICAgICAgICAgICgpIHt9LAogICAgICAgICAgYnVpbGRDb25kaXRpb24sCiAgICAgICAgICAoKSB7fSwKICAgICAgICAgIGJ1aWxkU3dpdGNoLAogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZExvb3Aoc3dpdGNoU3RhdGVtZW50KSk7CiAgICB9CgogICAgaWYgKGhhc0RlZmF1bHQpIHsKICAgICAgYnVpbGRMb29wKCk7CiAgICB9IGVsc2UgewogICAgICAvLyBJZiB0aGUgc3dpdGNoIHN0YXRlbWVudCBoYXMgbm8gZGVmYXVsdCBjYXNlLCBzdXJyb3VuZCB0aGUgbG9vcCB3aXRoCiAgICAgIC8vIGEgdGVzdCBvZiB0aGUgdGFyZ2V0LiBTbzoKICAgICAgLy8gYGlmICh0YXJnZXQpIHdoaWxlICh0cnVlKSAuLi5gIElmIHRoZXJlJ3Mgbm8gZGVmYXVsdCBjYXNlLCB0YXJnZXQgaXMKICAgICAgLy8gbnVsbCwgc28gd2UgZG9uJ3QgZHJvcCBpbnRvIHRoZSB3aGlsZSBsb29wLgogICAgICB2b2lkIGJ1aWxkQ29uZGl0aW9uKCkgewogICAgICAgIGpzLlRlbXBsYXRlIGNvZGUgPSBqcy5qcy5wYXJzZUZvcmVpZ25KUygnIycpOwogICAgICAgIHB1c2gobmV3IEhGb3JlaWduQ29kZShjb2RlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwKICAgICAgICAgICAgW2xvY2Fsc0hhbmRsZXIucmVhZExvY2FsKHN3aXRjaFRhcmdldCldLAogICAgICAgICAgICBuYXRpdmVCZWhhdmlvcjogTmF0aXZlQmVoYXZpb3IuUFVSRSkpOwogICAgICB9CgogICAgICBfaGFuZGxlSWYoCiAgICAgICAgICBub2RlOiBzd2l0Y2hTdGF0ZW1lbnQsCiAgICAgICAgICB2aXNpdENvbmRpdGlvbjogYnVpbGRDb25kaXRpb24sCiAgICAgICAgICB2aXNpdFRoZW46IGJ1aWxkTG9vcCwKICAgICAgICAgIHZpc2l0RWxzZTogKCkgPT4ge30sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgLy8vIENyZWF0ZXMgYSBzd2l0Y2ggc3RhdGVtZW50LgogIC8vLwogIC8vLyBbanVtcEhhbmRsZXJdIGlzIHRoZSBbSnVtcEhhbmRsZXJdIGZvciB0aGUgY3JlYXRlZCBzd2l0Y2ggc3RhdGVtZW50LgogIC8vLyBbYnVpbGRTd2l0Y2hDYXNlXSBjcmVhdGVzIHRoZSBzdGF0ZW1lbnRzIGZvciB0aGUgc3dpdGNoIGNhc2UuCiAgdm9pZCBfaGFuZGxlU3dpdGNoKAogICAgICBpci5Td2l0Y2hTdGF0ZW1lbnQgc3dpdGNoU3RhdGVtZW50LAogICAgICBKdW1wSGFuZGxlciBqdW1wSGFuZGxlciwKICAgICAgSEluc3RydWN0aW9uIGJ1aWxkRXhwcmVzc2lvbihpci5Td2l0Y2hTdGF0ZW1lbnQgc3RhdGVtZW50KSwKICAgICAgTGlzdDxpci5Td2l0Y2hDYXNlPiBzd2l0Y2hDYXNlcywKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXRDb25zdGFudHMoCiAgICAgICAgICBpci5Td2l0Y2hTdGF0ZW1lbnQgcGFyZW50U3dpdGNoLCBpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UpLAogICAgICBib29sIGlzRGVmYXVsdENhc2UoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKSwKICAgICAgdm9pZCBidWlsZFN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIEhCYXNpY0Jsb2NrIGV4cHJlc3Npb25TdGFydCA9IG9wZW5OZXdCbG9jaygpOwogICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24gPSBidWlsZEV4cHJlc3Npb24oc3dpdGNoU3RhdGVtZW50KTsKCiAgICBpZiAoc3dpdGNoQ2FzZXMuaXNFbXB0eSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgSFN3aXRjaCBzd2l0Y2hJbnN0cnVjdGlvbiA9CiAgICAgICAgbmV3IEhTd2l0Y2goX2Fic3RyYWN0VmFsdWVEb21haW4sIDxISW5zdHJ1Y3Rpb24+W2V4cHJlc3Npb25dKTsKICAgIEhCYXNpY0Jsb2NrIGV4cHJlc3Npb25FbmQgPSBjbG9zZShzd2l0Y2hJbnN0cnVjdGlvbik7CiAgICBMb2NhbHNIYW5kbGVyIHNhdmVkTG9jYWxzID0gbG9jYWxzSGFuZGxlcjsKCiAgICBMaXN0PEhTdGF0ZW1lbnRJbmZvcm1hdGlvbj4gc3RhdGVtZW50cyA9IDxIU3RhdGVtZW50SW5mb3JtYXRpb24+W107CiAgICBib29sIGhhc0RlZmF1bHQgPSBmYWxzZTsKICAgIGZvciAoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlIGluIHN3aXRjaENhc2VzKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gZ3JhcGguYWRkTmV3QmxvY2soKTsKICAgICAgZm9yIChDb25zdGFudFZhbHVlIGNvbnN0YW50CiAgICAgICAgICBpbiBnZXRDb25zdGFudHMoc3dpdGNoU3RhdGVtZW50LCBzd2l0Y2hDYXNlKSkgewogICAgICAgIEhDb25zdGFudCBoQ29uc3RhbnQgPSBncmFwaC5hZGRDb25zdGFudChjb25zdGFudCwgY2xvc2VkV29ybGQpOwogICAgICAgIHN3aXRjaEluc3RydWN0aW9uLmlucHV0cy5hZGQoaENvbnN0YW50KTsKICAgICAgICBoQ29uc3RhbnQudXNlZEJ5LmFkZChzd2l0Y2hJbnN0cnVjdGlvbik7CiAgICAgICAgZXhwcmVzc2lvbkVuZC5hZGRTdWNjZXNzb3IoYmxvY2spOwogICAgICB9CgogICAgICBpZiAoaXNEZWZhdWx0Q2FzZShzd2l0Y2hDYXNlKSkgewogICAgICAgIC8vIEFuIEhTd2l0Y2ggaGFzIG4gaW5wdXRzIGFuZCBuKzEgc3VjY2Vzc29ycywgdGhlIGxhc3QgYmVpbmcgdGhlCiAgICAgICAgLy8gZGVmYXVsdCBjYXNlLgogICAgICAgIGV4cHJlc3Npb25FbmQuYWRkU3VjY2Vzc29yKGJsb2NrKTsKICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsKICAgICAgfQogICAgICBvcGVuKGJsb2NrKTsKICAgICAgbG9jYWxzSGFuZGxlciA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20oc2F2ZWRMb2NhbHMpOwogICAgICBidWlsZFN3aXRjaENhc2Uoc3dpdGNoQ2FzZSk7CiAgICAgIGlmICghaXNBYm9ydGVkKCkgJiYKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlaW5zZXJ0IHRoaXMgaWYgYGlzUmVhY2hhYmxlYCBpcyBubyBsb25nZXIKICAgICAgICAgIC8vIHNldCB0byBgZmFsc2VgIHdoZW4gYF90cnlJbmxpbmVNZXRob2RgIHNlZXMgYW4gYWx3YXlzIHRocm93aW5nCiAgICAgICAgICAvLyBtZXRob2QuCiAgICAgICAgICAvL3N3aXRjaENhc2UgPT0gc3dpdGNoQ2FzZXMubGFzdCAmJgogICAgICAgICAgIWlzRGVmYXVsdENhc2Uoc3dpdGNoQ2FzZSkpIHsKICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkZWZhdWx0LCB3ZSB3aWxsIGFkZCBvbmUgbGF0ZXIgdG8gYXZvaWQKICAgICAgICAvLyB0aGUgY3JpdGljYWwgZWRnZS4gU28gd2UgZ2VuZXJhdGUgYSBicmVhayBzdGF0ZW1lbnQgdG8gbWFrZQogICAgICAgIC8vIHN1cmUgdGhlIGxhc3QgY2FzZSBkb2VzIG5vdCBmYWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1bHQgY2FzZS4KICAgICAgICBqdW1wSGFuZGxlci5nZW5lcmF0ZUJyZWFrKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfQogICAgICBzdGF0ZW1lbnRzLmFkZCgKICAgICAgICAgIG5ldyBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uKG5ldyBTdWJHcmFwaChibG9jaywgbGFzdE9wZW5lZEJsb2NrKSkpOwogICAgfQoKICAgIC8vIEFkZCBhIGpvaW4tYmxvY2sgaWYgbmVjZXNzYXJ5LgogICAgLy8gV2UgY3JlYXRlIFtqb2luQmxvY2tdIGVhcmx5LCBhbmQgdGhlbiBnbyB0aHJvdWdoIHRoZSBjYXNlcyB0aGF0IG1pZ2h0CiAgICAvLyB3YW50IHRvIGp1bXAgdG8gaXQuIEluIGVhY2ggY2FzZSwgaWYgd2UgYWRkIFtqb2luQmxvY2tdIGFzIGEgc3VjY2Vzc29yCiAgICAvLyBvZiBhbm90aGVyIGJsb2NrLCB3ZSBhbHNvIGFkZCBhbiBlbGVtZW50IHRvIFtjYXNlSGFuZGxlcnNdIHRoYXQgaXMgdXNlZAogICAgLy8gdG8gY3JlYXRlIHRoZSBwaGlzIGluIFtqb2luQmxvY2tdLgogICAgLy8gSWYgd2UgbmV2ZXIganVtcCB0byB0aGUgam9pbiBibG9jaywgW2Nhc2VIYW5kbGVyc10gd2lsbCBzdGF5IGVtcHR5LCBhbmQKICAgIC8vIHRoZSBqb2luIGJsb2NrIGlzIG5ldmVyIGFkZGVkIHRvIHRoZSBncmFwaC4KICAgIEhCYXNpY0Jsb2NrIGpvaW5CbG9jayA9IG5ldyBIQmFzaWNCbG9jaygpOwogICAgTGlzdDxMb2NhbHNIYW5kbGVyPiBjYXNlSGFuZGxlcnMgPSA8TG9jYWxzSGFuZGxlcj5bXTsKICAgIGp1bXBIYW5kbGVyLmZvckVhY2hCcmVhaygoSEJyZWFrIGluc3RydWN0aW9uLCBMb2NhbHNIYW5kbGVyIGxvY2FscykgewogICAgICBpbnN0cnVjdGlvbi5ibG9jay5hZGRTdWNjZXNzb3Ioam9pbkJsb2NrKTsKICAgICAgY2FzZUhhbmRsZXJzLmFkZChsb2NhbHMpOwogICAgfSk7CiAgICBqdW1wSGFuZGxlci5mb3JFYWNoQ29udGludWUoKEhDb250aW51ZSBpbnN0cnVjdGlvbiwgTG9jYWxzSGFuZGxlciBsb2NhbHMpIHsKICAgICAgYXNzZXJ0KAogICAgICAgICAgZmFsc2UsCiAgICAgICAgICBmYWlsZWRBdChfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgc3dpdGNoU3RhdGVtZW50KSwKICAgICAgICAgICAgICAnQ29udGludWUgY2Fubm90IHRhcmdldCBhIHN3aXRjaC4nKSk7CiAgICB9KTsKICAgIGlmICghaXNBYm9ydGVkKCkpIHsKICAgICAgY3VycmVudC5jbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgICAgbGFzdE9wZW5lZEJsb2NrLmFkZFN1Y2Nlc3Nvcihqb2luQmxvY2spOwogICAgICBjYXNlSGFuZGxlcnMuYWRkKGxvY2Fsc0hhbmRsZXIpOwogICAgfQogICAgaWYgKCFoYXNEZWZhdWx0KSB7CiAgICAgIC8vIEFsd2F5cyBjcmVhdGUgYSBkZWZhdWx0IGNhc2UsIHRvIGF2b2lkIGEgY3JpdGljYWwgZWRnZSBpbiB0aGUKICAgICAgLy8gZ3JhcGguCiAgICAgIEhCYXNpY0Jsb2NrIGRlZmF1bHRDYXNlID0gYWRkTmV3QmxvY2soKTsKICAgICAgZXhwcmVzc2lvbkVuZC5hZGRTdWNjZXNzb3IoZGVmYXVsdENhc2UpOwogICAgICBvcGVuKGRlZmF1bHRDYXNlKTsKICAgICAgY2xvc2UobmV3IEhHb3RvKF9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICAgIGRlZmF1bHRDYXNlLmFkZFN1Y2Nlc3Nvcihqb2luQmxvY2spOwogICAgICBjYXNlSGFuZGxlcnMuYWRkKHNhdmVkTG9jYWxzKTsKICAgICAgc3RhdGVtZW50cy5hZGQobmV3IEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24oCiAgICAgICAgICBuZXcgU3ViR3JhcGgoZGVmYXVsdENhc2UsIGRlZmF1bHRDYXNlKSkpOwogICAgfQogICAgYXNzZXJ0KGNhc2VIYW5kbGVycy5sZW5ndGggPT0gam9pbkJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGgpOwogICAgaWYgKGNhc2VIYW5kbGVycy5pc05vdEVtcHR5KSB7CiAgICAgIGdyYXBoLmFkZEJsb2NrKGpvaW5CbG9jayk7CiAgICAgIG9wZW4oam9pbkJsb2NrKTsKICAgICAgaWYgKGNhc2VIYW5kbGVycy5sZW5ndGggPT0gMSkgewogICAgICAgIGxvY2Fsc0hhbmRsZXIgPSBjYXNlSGFuZGxlcnNbMF07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9jYWxzSGFuZGxlciA9IHNhdmVkTG9jYWxzLm1lcmdlTXVsdGlwbGUoY2FzZUhhbmRsZXJzLCBqb2luQmxvY2spOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBUaGUgam9pbmJsb2NrIGlzIG5vdCB1c2VkLgogICAgICBqb2luQmxvY2sgPSBudWxsOwogICAgfQoKICAgIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiBleHByZXNzaW9uSW5mbyA9CiAgICAgICAgbmV3IEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbigKICAgICAgICAgICAgbmV3IFN1YkV4cHJlc3Npb24oZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kKSk7CiAgICBleHByZXNzaW9uU3RhcnQuc2V0QmxvY2tGbG93KAogICAgICAgIG5ldyBIU3dpdGNoQmxvY2tJbmZvcm1hdGlvbihleHByZXNzaW9uSW5mbywgc3RhdGVtZW50cywKICAgICAgICAgICAganVtcEhhbmRsZXIudGFyZ2V0LCBqdW1wSGFuZGxlci5sYWJlbHMsIHNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICBqb2luQmxvY2spOwoKICAgIGp1bXBIYW5kbGVyLmNsb3NlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKGlyLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBTc2FCcmFuY2hCdWlsZGVyIGJyYW5jaGVyID0gbmV3IFNzYUJyYW5jaEJ1aWxkZXIodGhpcyk7CiAgICBicmFuY2hlci5oYW5kbGVDb25kaXRpb25hbCgoKSA9PiBub2RlLmNvbmRpdGlvbi5hY2NlcHQodGhpcyksCiAgICAgICAgKCkgPT4gbm9kZS50aGVuLmFjY2VwdCh0aGlzKSwgKCkgPT4gbm9kZS5vdGhlcndpc2UuYWNjZXB0KHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihpci5Mb2dpY2FsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBTc2FCcmFuY2hCdWlsZGVyIGJyYW5jaGVyID0gbmV3IFNzYUJyYW5jaEJ1aWxkZXIodGhpcyk7CiAgICBTdHJpbmcgb3BlcmF0b3IgPSBub2RlLm9wZXJhdG9yOwogICAgLy8gaXIuTG9naWNhbEV4cHJlc3Npb24gY2xhaW1zIHRvIGFsbG93ICc/PycgYXMgYW4gb3BlcmF0b3IgYnV0IGN1cnJlbnRseQogICAgLy8gdGhhdCBpcyBleHBhbmRlZCBpbnRvIGEgbGV0LXRyZWUuCiAgICBhc3NlcnQob3BlcmF0b3IgPT0gJyYmJyB8fCBvcGVyYXRvciA9PSAnfHwnKTsKICAgIF9oYW5kbGVMb2dpY2FsRXhwcmVzc2lvbihub2RlLmxlZnQsICgpID0+IG5vZGUucmlnaHQuYWNjZXB0KHRoaXMpLCBicmFuY2hlciwKICAgICAgICBvcGVyYXRvciwgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEJpbmFyeShub2RlKSk7CiAgfQoKICAvLy8gT3B0aW1pemVzIGxvZ2ljYWwgYmluYXJ5IGV4cHJlc3Npb24gd2hlcmUgdGhlIGxlZnQgaGFzIHRoZSBzYW1lIGxvZ2ljYWwKICAvLy8gYmluYXJ5IG9wZXJhdG9yLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCB0cmFuc2Zvcm1zIHRoZSBvcGVyYXRvciBieSBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIFtsZWZ0XSBpcwogIC8vLyBhIGxvZ2ljYWwgImFuZCIgb3IgbG9naWNhbCAib3IiLiBUaGVuIGl0IHVzZXMgW2JyYW5jaEJ1aWxkZXJdIHRvIGJ1aWxkIHRoZQogIC8vLyBncmFwaCBmb3IgdGhlIG9wdGltaXplZCBleHByZXNzaW9uLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgYCh4ICYmIHkpICYmIHpgIGlzIHRyYW5zZm9ybWVkIGludG8gYHggJiYgKHkgJiYgeilgOgogIC8vLwogIHZvaWQgX2hhbmRsZUxvZ2ljYWxFeHByZXNzaW9uKAogICAgICBpci5FeHByZXNzaW9uIGxlZnQsCiAgICAgIHZvaWQgdmlzaXRSaWdodCgpLAogICAgICBTc2FCcmFuY2hCdWlsZGVyIGJyYW5jaGVyLAogICAgICBTdHJpbmcgb3BlcmF0b3IsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAobGVmdCBpcyBpci5Mb2dpY2FsRXhwcmVzc2lvbiAmJiBsZWZ0Lm9wZXJhdG9yID09IG9wZXJhdG9yKSB7CiAgICAgIGlyLkV4cHJlc3Npb24gaW5uZXJMZWZ0ID0gbGVmdC5sZWZ0OwogICAgICBpci5FeHByZXNzaW9uIG1pZGRsZSA9IGxlZnQucmlnaHQ7CiAgICAgIF9oYW5kbGVMb2dpY2FsRXhwcmVzc2lvbigKICAgICAgICAgIGlubmVyTGVmdCwKICAgICAgICAgICgpID0+IF9oYW5kbGVMb2dpY2FsRXhwcmVzc2lvbihtaWRkbGUsIHZpc2l0UmlnaHQsIGJyYW5jaGVyLCBvcGVyYXRvciwKICAgICAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQmluYXJ5KG1pZGRsZSkpLAogICAgICAgICAgYnJhbmNoZXIsCiAgICAgICAgICBvcGVyYXRvciwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGJyYW5jaGVyLmhhbmRsZUxvZ2ljYWxCaW5hcnkoCiAgICAgICAgICAoKSA9PiBsZWZ0LmFjY2VwdCh0aGlzKSwgdmlzaXRSaWdodCwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICBpc0FuZDogb3BlcmF0b3IgPT0gJyYmJyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50TGl0ZXJhbChpci5JbnRMaXRlcmFsIG5vZGUpIHsKICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudEludEFzVW5zaWduZWQobm9kZS52YWx1ZSwgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVMaXRlcmFsKGlyLkRvdWJsZUxpdGVyYWwgbm9kZSkgewogICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50RG91YmxlKG5vZGUudmFsdWUsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbExpdGVyYWwoaXIuQm9vbExpdGVyYWwgbm9kZSkgewogICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50Qm9vbChub2RlLnZhbHVlLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0xpdGVyYWwoaXIuU3RyaW5nTGl0ZXJhbCBub2RlKSB7CiAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcobm9kZS52YWx1ZSwgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgc3RhY2suYWRkKAogICAgICAgIGdyYXBoLmFkZENvbnN0YW50KF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZSksIGNsb3NlZFdvcmxkKSk7CiAgICByZWdpc3RyeT8ucmVnaXN0ZXJDb25zdFN5bWJvbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROdWxsTGl0ZXJhbChpci5OdWxsTGl0ZXJhbCBub2RlKSB7CiAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgfQoKICAvLy8gU2V0IHRoZSBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24gaWYgbmVjZXNzYXJ5LgogIEhJbnN0cnVjdGlvbiBfc2V0TGlzdFJ1bnRpbWVUeXBlSW5mb0lmTmVlZGVkKEhJbnN0cnVjdGlvbiBvYmplY3QsCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmICghX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHModHlwZS5lbGVtZW50KSB8fCB0eXBlLnRyZWF0QXNSYXcpIHsKICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH0KICAgIGlmIChvcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgLy8gW3R5cGVdIGNvdWxkIGJlIGBMaXN0PFQ+YCwgc28gZW5zdXJlIGl0IGlzIGBKU0FycmF5PFQ+YC4KICAgICAgSW50ZXJmYWNlVHlwZSBhcnJheVR5cGUgPQogICAgICAgICAgSW50ZXJmYWNlVHlwZShfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzLCB0eXBlLnR5cGVBcmd1bWVudHMpOwogICAgICBISW5zdHJ1Y3Rpb24gcnRpID0KICAgICAgICAgIF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpKGFycmF5VHlwZSwgc291cmNlRWxlbWVudCk7CgogICAgICAvLyBUT0RPKDE1NDg5KTogUmVnaXN0ZXIgYXQgY29kZWdlbi4KICAgICAgcmVnaXN0cnk/LnJlZ2lzdGVySW5zdGFudGlhdGlvbih0eXBlKTsKICAgICAgcmV0dXJuIF9jYWxsU2V0UnVudGltZVR5cGVJbmZvKHJ0aSwgb2JqZWN0LCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnQgaW4gdHlwZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGFyZ3VtZW50cy5hZGQoX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQoYXJndW1lbnQsIHNvdXJjZUVsZW1lbnQpKTsKICAgIH0KICAgIC8vIFRPRE8oMTU0ODkpOiBSZWdpc3RlciBhdCBjb2RlZ2VuLgogICAgcmVnaXN0cnk/LnJlZ2lzdGVySW5zdGFudGlhdGlvbih0eXBlKTsKICAgIHJldHVybiBfY2FsbFNldFJ1bnRpbWVUeXBlSW5mb1dpdGhUeXBlQXJndW1lbnRzKAogICAgICAgIHR5cGUsIGFyZ3VtZW50cywgb2JqZWN0LCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdExpdGVyYWwoaXIuTGlzdExpdGVyYWwgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGxpc3RJbnN0cnVjdGlvbjsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgbGlzdEluc3RydWN0aW9uID0KICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50KF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZSksIGNsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBlbGVtZW50cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICAgIGZvciAoaXIuRXhwcmVzc2lvbiBlbGVtZW50IGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgICBlbGVtZW50LmFjY2VwdCh0aGlzKTsKICAgICAgICBlbGVtZW50cy5hZGQocG9wKCkpOwogICAgICB9CiAgICAgIGxpc3RJbnN0cnVjdGlvbiA9IF9idWlsZExpdGVyYWxMaXN0KGVsZW1lbnRzKTsKICAgICAgYWRkKGxpc3RJbnN0cnVjdGlvbik7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRMaXN0TGl0ZXJhbChub2RlKTsKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dCgKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5saXN0VHlwZShfZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGVBcmd1bWVudCkpKTsKICAgICAgbGlzdEluc3RydWN0aW9uID0gX3NldExpc3RSdW50aW1lVHlwZUluZm9JZk5lZWRlZCgKICAgICAgICAgIGxpc3RJbnN0cnVjdGlvbiwgdHlwZSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9CiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAudHlwZU9mTGlzdExpdGVyYWwobm9kZSwgX2Fic3RyYWN0VmFsdWVEb21haW4pOwogICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKHR5cGUpLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgIGxpc3RJbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGUgPSB0eXBlOwogICAgfQogICAgc3RhY2suYWRkKGxpc3RJbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgc3RhY2suYWRkKAogICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnQoX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlKSwgY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFRoZSBzZXQgbGl0ZXJhbCBjb25zdHJ1Y3RvcnMgdGFrZSB0aGUgZWxlbWVudHMgYXMgYSBMaXN0LgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGVsZW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBlbGVtZW50IGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgZWxlbWVudC5hY2NlcHQodGhpcyk7CiAgICAgIGVsZW1lbnRzLmFkZChwb3AoKSk7CiAgICB9CgogICAgLy8gVGhlIGNvbnN0cnVjdG9yIGlzIGEgcHJvY2VkdXJlIGJlY2F1c2UgaXQncyBhIGZhY3RvcnkuCiAgICBGdW5jdGlvbkVudGl0eSBjb25zdHJ1Y3RvcjsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgaWYgKGVsZW1lbnRzLmlzRW1wdHkpIHsKICAgICAgY29uc3RydWN0b3IgPSBfY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHk7CiAgICB9IGVsc2UgewogICAgICBjb25zdHJ1Y3RvciA9IF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ29uc3RydWN0b3I7CiAgICAgIEhMaXRlcmFsTGlzdCBhcmdMaXN0ID0gX2J1aWxkTGl0ZXJhbExpc3QoZWxlbWVudHMpOwogICAgICBhZGQoYXJnTGlzdCk7CiAgICAgIGlucHV0cy5hZGQoYXJnTGlzdCk7CiAgICB9CgogICAgYXNzZXJ0KAogICAgICAgIGNvbnN0cnVjdG9yIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmIGNvbnN0cnVjdG9yLmlzRmFjdG9yeUNvbnN0cnVjdG9yKTsKCiAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KAogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRUeXBlKF9lbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KSkpOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3M7CgogICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscykpIHsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHR5cGVJbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgICB0eXBlLnR5cGVBcmd1bWVudHMuZm9yRWFjaCgoRGFydFR5cGUgYXJndW1lbnQpIHsKICAgICAgICB0eXBlSW5wdXRzCiAgICAgICAgICAgIC5hZGQoX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQoYXJndW1lbnQsIHNvdXJjZUVsZW1lbnQpKTsKICAgICAgfSk7CgogICAgICAvLyBXZSBsaWZ0IHRoaXMgY29tbW9uIGNhbGwgcGF0dGVybiBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgc3BhY2UKICAgICAgLy8gaW4gdGhlIG91dHB1dC4KICAgICAgaWYgKHR5cGVJbnB1dHMuZXZlcnkoKEhJbnN0cnVjdGlvbiBpbnB1dCkgPT4KICAgICAgICAgIGlucHV0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkpIHsKICAgICAgICBpZiAoZWxlbWVudHMuaXNFbXB0eSkgewogICAgICAgICAgY29uc3RydWN0b3IgPSBfY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdHJ1Y3RvciA9IF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsVW50eXBlZE1ha2VyOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpbnB1dHMuYWRkQWxsKHR5cGVJbnB1dHMpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIGlzIG5lZWRlZCBhbmQgdGhlIHNldCBsaXRlcmFsIGhhcyBubyB0eXBlCiAgICAvLyBwYXJhbWV0ZXIsICdjb25zdHJ1Y3RvcicgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCBmb3J3YXJkcyB0aGUgY2FsbCB0bwogICAgLy8gdGhlIGZhY3RvcnkgY29uc3RydWN0b3Igd2l0aG91dCBhIHR5cGUgcGFyYW1ldGVyLgogICAgYXNzZXJ0KGNvbnN0cnVjdG9yLmlzRnVuY3Rpb24gfHwKICAgICAgICAoY29uc3RydWN0b3IgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYgY29uc3RydWN0b3IuaXNGYWN0b3J5Q29uc3RydWN0b3IpKTsKCiAgICAvLyBUaGUgaW5zdHJ1Y3Rpb24gdHlwZSB3aWxsIGFsd2F5cyBiZSBhIHN1YnR5cGUgb2YgdGhlIHNldExpdGVyYWxDbGFzcywgYnV0CiAgICAvLyB0eXBlIGluZmVyZW5jZSBtaWdodCBkaXNjb3ZlciBhIG1vcmUgc3BlY2lmaWMgdHlwZSBvciBmaW5kIG5vdGhpbmcgKGluCiAgICAvLyBkYXJ0MmpzIHVuaXQgdGVzdHMpLgoKICAgIEFic3RyYWN0VmFsdWUgc2V0VHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmNyZWF0ZU5vbk51bGxTdWJ0eXBlKF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ2xhc3MpOwogICAgQWJzdHJhY3RWYWx1ZSByZXR1cm5UeXBlTWFzayA9CiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAuZ2V0UmV0dXJuVHlwZU9mKGNvbnN0cnVjdG9yKTsKICAgIEFic3RyYWN0VmFsdWUgaW5zdHJ1Y3Rpb25UeXBlID0KICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oc2V0VHlwZSwgcmV0dXJuVHlwZU1hc2spOwoKICAgIF9hZGRJbXBsaWNpdEluc3RhbnRpYXRpb24odHlwZSk7CiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgY29uc3RydWN0b3IsIGlucHV0cywgaW5zdHJ1Y3Rpb25UeXBlLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGROZXcobm9kZSkpOwogICAgX3JlbW92ZUltcGxpY2l0SW5zdGFudGlhdGlvbih0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBMaXRlcmFsKGlyLk1hcExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICBzdGFjay5hZGQoCiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudChfZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUpLCBjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gVGhlIG1hcCBsaXRlcmFsIGNvbnN0cnVjdG9ycyB0YWtlIHRoZSBrZXktdmFsdWUgcGFpcnMgYXMgYSBMaXN0CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gY29uc3RydWN0b3JBcmdzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGZvciAoaXIuTWFwRW50cnkgbWFwRW50cnkgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIG1hcEVudHJ5LmtleS5hY2NlcHQodGhpcyk7CiAgICAgIGNvbnN0cnVjdG9yQXJncy5hZGQocG9wKCkpOwogICAgICBtYXBFbnRyeS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgIGNvbnN0cnVjdG9yQXJncy5hZGQocG9wKCkpOwogICAgfQoKICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBpcyBhIHByb2NlZHVyZSBiZWNhdXNlIGl0J3MgYSBmYWN0b3J5LgogICAgRnVuY3Rpb25FbnRpdHkgY29uc3RydWN0b3I7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGlmIChjb25zdHJ1Y3RvckFyZ3MuaXNFbXB0eSkgewogICAgICBjb25zdHJ1Y3RvciA9IF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0cnVjdG9yID0gX2NvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxDb25zdHJ1Y3RvcjsKICAgICAgSExpdGVyYWxMaXN0IGFyZ0xpc3QgPSBfYnVpbGRMaXRlcmFsTGlzdChjb25zdHJ1Y3RvckFyZ3MpOwogICAgICBhZGQoYXJnTGlzdCk7CiAgICAgIGlucHV0cy5hZGQoYXJnTGlzdCk7CiAgICB9CgogICAgYXNzZXJ0KAogICAgICAgIGNvbnN0cnVjdG9yIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmIGNvbnN0cnVjdG9yLmlzRmFjdG9yeUNvbnN0cnVjdG9yKTsKCiAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KF9jb21tb25FbGVtZW50cy5tYXBUeXBlKAogICAgICAgIF9lbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUua2V5VHlwZSksCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS52YWx1ZVR5cGUpKSk7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKCiAgICBpZiAoX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY2xzKSkgewogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gdHlwZUlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICAgIHR5cGUudHlwZUFyZ3VtZW50cy5mb3JFYWNoKChEYXJ0VHlwZSBhcmd1bWVudCkgewogICAgICAgIHR5cGVJbnB1dHMKICAgICAgICAgICAgLmFkZChfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudChhcmd1bWVudCwgc291cmNlRWxlbWVudCkpOwogICAgICB9KTsKCiAgICAgIC8vIFdlIGxpZnQgdGhpcyBjb21tb24gY2FsbCBwYXR0ZXJuIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gdG8gc2F2ZSBzcGFjZQogICAgICAvLyBpbiB0aGUgb3V0cHV0LgogICAgICBpZiAodHlwZUlucHV0cy5ldmVyeSgoSEluc3RydWN0aW9uIGlucHV0KSA9PgogICAgICAgICAgaW5wdXQuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSkgewogICAgICAgIGlmIChjb25zdHJ1Y3RvckFyZ3MuaXNFbXB0eSkgewogICAgICAgICAgY29uc3RydWN0b3IgPSBfY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdHJ1Y3RvciA9IF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsVW50eXBlZE1ha2VyOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpbnB1dHMuYWRkQWxsKHR5cGVJbnB1dHMpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIGlzIG5lZWRlZCBhbmQgdGhlIG1hcCBsaXRlcmFsIGhhcyBubyB0eXBlCiAgICAvLyBwYXJhbWV0ZXJzLCAnY29uc3RydWN0b3InIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHRoYXQgZm9yd2FyZHMgdGhlIGNhbGwgdG8KICAgIC8vIHRoZSBmYWN0b3J5IGNvbnN0cnVjdG9yIHdpdGhvdXQgdHlwZSBwYXJhbWV0ZXJzLgogICAgYXNzZXJ0KGNvbnN0cnVjdG9yLmlzRnVuY3Rpb24gfHwKICAgICAgICAoY29uc3RydWN0b3IgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYgY29uc3RydWN0b3IuaXNGYWN0b3J5Q29uc3RydWN0b3IpKTsKCiAgICAvLyBUaGUgaW5zdHJ1Y3Rpb24gdHlwZSB3aWxsIGFsd2F5cyBiZSBhIHN1YnR5cGUgb2YgdGhlIG1hcExpdGVyYWxDbGFzcywgYnV0CiAgICAvLyB0eXBlIGluZmVyZW5jZSBtaWdodCBkaXNjb3ZlciBhIG1vcmUgc3BlY2lmaWMgdHlwZSwgb3IgZmluZCBub3RoaW5nIChpbgogICAgLy8gZGFydDJqcyB1bml0IHRlc3RzKS4KCiAgICBBYnN0cmFjdFZhbHVlIG1hcFR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5jcmVhdGVOb25OdWxsU3VidHlwZShfY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzKTsKICAgIEFic3RyYWN0VmFsdWUgcmV0dXJuVHlwZU1hc2sgPQogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZihjb25zdHJ1Y3Rvcik7CiAgICBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZSA9CiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKG1hcFR5cGUsIHJldHVyblR5cGVNYXNrKTsKCiAgICBfYWRkSW1wbGljaXRJbnN0YW50aWF0aW9uKHR5cGUpOwogICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIGNvbnN0cnVjdG9yLCBpbnB1dHMsIGluc3RydWN0aW9uVHlwZSwgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkTmV3KG5vZGUpKTsKICAgIF9yZW1vdmVJbXBsaWNpdEluc3RhbnRpYXRpb24odHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwRW50cnkoaXIuTWFwRW50cnkgbm9kZSkgewogICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAnaXIuTWFwRW50cnkgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdmlzaXRNYXBMaXRlcmFsJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRHZXQobm9kZSk7CiAgICBpci5EYXJ0VHlwZSB0eXBlID0gbm9kZS50eXBlOwogICAgaWYgKHR5cGUgaXMgaXIuSW50ZXJmYWNlVHlwZSB8fAogICAgICAgIHR5cGUgaXMgaXIuRHluYW1pY1R5cGUgfHwKICAgICAgICB0eXBlIGlzIGlyLlR5cGVkZWZUeXBlIHx8CiAgICAgICAgdHlwZSBpcyBpci5GdW5jdGlvblR5cGUpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZSk7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudChjb25zdGFudCwgY2xvc2VkV29ybGQsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgYXNzZXJ0KAogICAgICAgIHR5cGUgaXMgaXIuVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIHR5cGUgbGl0ZXJhbCAke25vZGV9LiIpKTsKICAgIC8vIEZvciBvdGhlciB0eXBlcyAoZS5nLiBUeXBlUGFyYW1ldGVyVHlwZSwgZnVuY3Rpb24gdHlwZXMgZnJvbSBleHBhbmRlZAogICAgLy8gdHlwZWRlZnMpLCBsb29rLXVwIG9yIGNvbnN0cnVjdCBhIHJlaWZpZWQgdHlwZSByZXByZXNlbnRhdGlvbiBhbmQgY29udmVydAogICAgLy8gdG8gYSBSdW50aW1lVHlwZS4KCiAgICBEYXJ0VHlwZSBkYXJ0VHlwZSA9IF9lbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpOwogICAgZGFydFR5cGUgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KGRhcnRUeXBlKTsKICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KAogICAgICAgIGRhcnRUeXBlLCBzb3VyY2VFbGVtZW50LAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZVJ1bnRpbWVUeXBlLAogICAgICAgIDxISW5zdHJ1Y3Rpb24+W3ZhbHVlXSwKICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YoX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZVJ1bnRpbWVUeXBlKSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUpIHsKICAgIGlyLk1lbWJlciBzdGF0aWNUYXJnZXQgPSBub2RlLnRhcmdldDsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR2V0KG5vZGUpOwogICAgaWYgKHN0YXRpY1RhcmdldCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICBzdGF0aWNUYXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkdldHRlcikgewogICAgICBGdW5jdGlvbkVudGl0eSBnZXR0ZXIgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIoc3RhdGljVGFyZ2V0KTsKICAgICAgLy8gSW52b2tlIHRoZSBnZXR0ZXIKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKGdldHRlciwgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSwKICAgICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZihnZXR0ZXIpLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIGlmIChzdGF0aWNUYXJnZXQgaXMgaXIuRmllbGQpIHsKICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBfZWxlbWVudE1hcC5nZXRGaWVsZChzdGF0aWNUYXJnZXQpOwogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPSBfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpOwogICAgICBpZiAoZmllbGREYXRhLmlzRWFnZXIpIHsKICAgICAgICBwdXNoKG5ldyBIU3RhdGljKGZpZWxkLCBfdHlwZUluZmVyZW5jZU1hcC5nZXRJbmZlcnJlZFR5cGVPZihmaWVsZCksCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0gZWxzZSBpZiAoZmllbGREYXRhLmlzRWZmZWN0aXZlbHlDb25zdGFudCkgewogICAgICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdCA9CiAgICAgICAgICAgIGNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIoZmllbGQpOwogICAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IHRoaXMgaXMgbm90IGVxdWl2YWxlbnQgdG8gd2hhdCB0aGUgb2xkIEZFIGRvZXM6IGlmCiAgICAgICAgLy8gdGhlcmUgaXMgbm8gcHJlZml4IHRoZSBvbGQgRkUgd291bGRuJ3QgdHJlYXQgdGhpcyBpbiBhbnkgc3BlY2lhbAogICAgICAgIC8vIHdheS4gQWxzbywgaWYgdGhlIHByZWZpeCBwb2ludHMgdG8gYSBjb25zdGFudCBpbiB0aGUgbWFpbiBvdXRwdXQKICAgICAgICAvLyB1bml0LCB0aGUgb2xkIEZFIHdvdWxkIHN0aWxsIGdlbmVyYXRlIGEgZGVmZXJyZWQgd3JhcHBlciBoZXJlLgogICAgICAgIGlmICghY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEKICAgICAgICAgICAgLmhhc09ubHlOb25EZWZlcnJlZEltcG9ydFBhdGhzKHRhcmdldEVsZW1lbnQsIGZpZWxkKSkgewogICAgICAgICAgQ29uc3RhbnRWYWx1ZSBkZWZlcnJlZENvbnN0YW50ID0gbmV3IERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSgKICAgICAgICAgICAgICBmaWVsZERhdGEuaW5pdGlhbFZhbHVlLCBvdXRwdXRVbml0KTsKICAgICAgICAgIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgLnJlZ2lzdGVyQ29uc3RhbnRVc2UobmV3IENvbnN0YW50VXNlLmRlZmVycmVkKGRlZmVycmVkQ29uc3RhbnQpKTsKICAgICAgICAgIHN0YWNrLmFkZChncmFwaC5hZGREZWZlcnJlZENvbnN0YW50KAogICAgICAgICAgICAgIGRlZmVycmVkQ29uc3RhbnQsIHNvdXJjZUluZm9ybWF0aW9uLCBjbG9zZWRXb3JsZCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnQoZmllbGREYXRhLmluaXRpYWxWYWx1ZSwgY2xvc2VkV29ybGQsCiAgICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgZmllbGREYXRhLmlzTGF6eSwgIlVuZXhwZWN0ZWQgZmllbGQgZGF0YSBmb3IgJGZpZWxkOiAkZmllbGREYXRhIik7CiAgICAgICAgcHVzaChuZXcgSExhenlTdGF0aWMoZmllbGQsIF90eXBlSW5mZXJlbmNlTWFwLmdldEluZmVycmVkVHlwZU9mKGZpZWxkKSwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBpcyBhIGNvbnN0YW50IHRlYXIgb2ZmLCBzbyB3ZSBzaG91bGQgaGF2ZQogICAgICAvLyBjcmVhdGVkIGEgY29uc3RhbnQgdmFsdWUgaW5zdGVhZC4gUmVtb3ZlIHRoaXMgY2FzZSB3aGVuIHdlIHVzZSBDRkUKICAgICAgLy8gY29uc3RhbnRzLgogICAgICBGdW5jdGlvbkVudGl0eSBtZW1iZXIgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIoc3RhdGljVGFyZ2V0KTsKICAgICAgcHVzaChuZXcgSFN0YXRpYyhtZW1iZXIsIF90eXBlSW5mZXJlbmNlTWFwLmdldEluZmVycmVkVHlwZU9mKG1lbWJlciksCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY1NldChpci5TdGF0aWNTZXQgbm9kZSkgewogICAgbm9kZS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBwb3AoKTsKCiAgICBpci5NZW1iZXIgc3RhdGljVGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICBpZiAoc3RhdGljVGFyZ2V0IGlzIGlyLlByb2NlZHVyZSkgewogICAgICBGdW5jdGlvbkVudGl0eSBzZXR0ZXIgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIoc3RhdGljVGFyZ2V0KTsKICAgICAgLy8gSW52b2tlIHRoZSBzZXR0ZXIKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKHNldHRlciwgPEhJbnN0cnVjdGlvbj5bdmFsdWVdLAogICAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAuZ2V0UmV0dXJuVHlwZU9mKHNldHRlciksIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkU2V0KG5vZGUpKTsKICAgICAgcG9wKCk7CiAgICB9IGVsc2UgewogICAgICBNZW1iZXJFbnRpdHkgdGFyZ2V0ID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKHN0YXRpY1RhcmdldCk7CiAgICAgIGlmICghX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKHRhcmdldCkuaXNFbGlkZWQpIHsKICAgICAgICBhZGQobmV3IEhTdGF0aWNTdG9yZSgKICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sCiAgICAgICAgICAgIHRhcmdldCwKICAgICAgICAgICAgX3R5cGVCdWlsZGVyLnBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mQXNzaWdubWVudCgKICAgICAgICAgICAgICAgIHRhcmdldCwgdmFsdWUsIF9nZXREYXJ0VHlwZUlmVmFsaWQoc3RhdGljVGFyZ2V0LnNldHRlclR5cGUpKSkpOwogICAgICB9CiAgICB9CiAgICBzdGFjay5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIG5vZGUucmVjZWl2ZXIuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gcG9wKCk7CgogICAgX3B1c2hEeW5hbWljSW52b2NhdGlvbigKICAgICAgICBub2RlLAogICAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUucmVjZWl2ZXIpLAogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLnJlY2VpdmVyVHlwZU9mR2V0KG5vZGUpLAogICAgICAgIG5ldyBTZWxlY3Rvci5nZXR0ZXIoX2VsZW1lbnRNYXAuZ2V0TmFtZShub2RlLm5hbWUpKSwKICAgICAgICA8SEluc3RydWN0aW9uPltyZWNlaXZlcl0sCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRHZXQobm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlR2V0KGlyLlZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgSEluc3RydWN0aW9uIGxldEJpbmRpbmcgPSBfbGV0QmluZGluZ3NbdmFyaWFibGVdOwogICAgaWYgKGxldEJpbmRpbmcgIT0gbnVsbCkgewogICAgICBzdGFjay5hZGQobGV0QmluZGluZyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlLnZhcmlhYmxlKTsKICAgIHN0YWNrLmFkZChsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChsb2NhbCwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdldChub2RlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb3BlcnR5U2V0KGlyLlByb3BlcnR5U2V0IG5vZGUpIHsKICAgIG5vZGUucmVjZWl2ZXIuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gcG9wKCk7CiAgICBub2RlLnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IHBvcCgpOwoKICAgIF9wdXNoRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgbm9kZSwKICAgICAgICBfZ2V0U3RhdGljVHlwZShub2RlLnJlY2VpdmVyKSwKICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5yZWNlaXZlclR5cGVPZlNldChub2RlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbiksCiAgICAgICAgbmV3IFNlbGVjdG9yLnNldHRlcihfZWxlbWVudE1hcC5nZXROYW1lKG5vZGUubmFtZSkpLAogICAgICAgIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyLCB2YWx1ZV0sCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBc3NpZ25tZW50KG5vZGUpKTsKCiAgICBwb3AoKTsKICAgIHN0YWNrLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoaXIuRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgewogICAgbm9kZS5yZWNlaXZlci5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBwb3AoKTsKCiAgICAvLyBGYWtlIGRpcmVjdCBjYWxsIHdpdGggYSBkeW5hbWljIGNhbGwuCiAgICAvLyBUT0RPKHNyYSk6IEltcGxlbWVudCBkaXJlY3QgaW52b2NhdGlvbnMgcHJvcGVybHkuCiAgICBfcHVzaER5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgIG5vZGUsCiAgICAgICAgX2dldFN0YXRpY1R5cGUobm9kZS5yZWNlaXZlciksCiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAucmVjZWl2ZXJUeXBlT2ZEaXJlY3RHZXQobm9kZSksCiAgICAgICAgbmV3IFNlbGVjdG9yLmdldHRlcihfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZS50YXJnZXQpLm1lbWJlck5hbWUpLAogICAgICAgIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdldChub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoaXIuRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcignaXIuRGlyZWN0UHJvcGVydHlTZXQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKGlyLkRpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcignaXIuRGlyZWN0TWV0aG9kSW52b2NhdGlvbicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN1cGVyUHJvcGVydHlTZXQoaXIuU3VwZXJQcm9wZXJ0eVNldCBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEFzc2lnbm1lbnQobm9kZSk7CiAgICBub2RlLnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IHBvcCgpOwoKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBfZWxlbWVudE1hcAogICAgICAgIC5nZXRTdXBlck1lbWJlcihfY3VycmVudEZyYW1lLm1lbWJlciwgbm9kZS5uYW1lLCBzZXR0ZXI6IHRydWUpOwogICAgaWYgKG1lbWJlciA9PSBudWxsKSB7CiAgICAgIF9nZW5lcmF0ZVN1cGVyTm9TdWNoTWV0aG9kKG5vZGUsIF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpLm5hbWUgKyAiPSIsCiAgICAgICAgICA8SEluc3RydWN0aW9uPlt2YWx1ZV0sIGNvbnN0IDxEYXJ0VHlwZT5bXSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgX2J1aWxkSW52b2tlU3VwZXIoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKSwKICAgICAgICAgIF9lbGVtZW50TWFwLmdldENsYXNzKF9jb250YWluaW5nQ2xhc3Mobm9kZSkpLAogICAgICAgICAgbWVtYmVyLAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5bdmFsdWVdLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogICAgcG9wKCk7CiAgICBzdGFjay5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlU2V0KGlyLlZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIG5vZGUudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIHZhbHVlID0gcG9wKCk7CiAgICBfdmlzaXRMb2NhbFNldHRlcigKICAgICAgICBub2RlLnZhcmlhYmxlLCB2YWx1ZSwgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEFzc2lnbm1lbnQobm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlKTsKICAgIGlmIChub2RlLmluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIGluaXRpYWxWYWx1ZSA9IGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCk7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwobG9jYWwsIGluaXRpYWxWYWx1ZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlLmluaXRpYWxpemVyKTsKICAgICAgYXNzZXJ0KGNvbnN0YW50ICE9IG51bGwsIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUpKTsKICAgICAgSEluc3RydWN0aW9uIGluaXRpYWxWYWx1ZSA9IGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBjbG9zZWRXb3JsZCk7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwobG9jYWwsIGluaXRpYWxWYWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBub2RlLmluaXRpYWxpemVyLmFjY2VwdCh0aGlzKTsKICAgICAgSEluc3RydWN0aW9uIGluaXRpYWxWYWx1ZSA9IHBvcCgpOwoKICAgICAgX3Zpc2l0TG9jYWxTZXR0ZXIoCiAgICAgICAgICBub2RlLCBpbml0aWFsVmFsdWUsIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBc3NpZ25tZW50KG5vZGUpKTsKCiAgICAgIC8vIElnbm9yZSB2YWx1ZQogICAgICBwb3AoKTsKICAgIH0KICB9CgogIHZvaWQgX3Zpc2l0TG9jYWxTZXR0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgSEluc3RydWN0aW9uIHZhbHVlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwoKICAgIC8vIEdpdmUgdGhlIHZhbHVlIGEgbmFtZSBpZiBpdCBkb2Vzbid0IGhhdmUgb25lIGFscmVhZHkuCiAgICBpZiAodmFsdWUuc291cmNlRWxlbWVudCA9PSBudWxsKSB7CiAgICAgIHZhbHVlLnNvdXJjZUVsZW1lbnQgPSBsb2NhbDsKICAgIH0KCiAgICBzdGFjay5hZGQodmFsdWUpOwogICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbCgKICAgICAgICBsb2NhbCwKICAgICAgICBfdHlwZUJ1aWxkZXIucG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZBc3NpZ25tZW50KAogICAgICAgICAgICBfY3VycmVudEZyYW1lLm1lbWJlciwgdmFsdWUsIF9nZXREYXJ0VHlwZUlmVmFsaWQodmFyaWFibGUudHlwZSkpLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGV0KGlyLkxldCBub2RlKSB7CiAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZTsKICAgIHZhcmlhYmxlLmluaXRpYWxpemVyLmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiBpbml0aWFsaXplZFZhbHVlID0gcG9wKCk7CiAgICAvLyBUT0RPKHNyYSk6IEFwcGx5IGluZmVycmVkIHR5cGUgaW5mb3JtYXRpb24uCiAgICBfbGV0QmluZGluZ3NbdmFyaWFibGVdID0gaW5pdGlhbGl6ZWRWYWx1ZTsKICAgIG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmxvY2tFeHByZXNzaW9uKGlyLkJsb2NrRXhwcmVzc2lvbiBub2RlKSB7CiAgICBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgbm9kZS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgfQoKICAvLy8gRXh0cmFjdHMgdGhlIGxpc3Qgb2YgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgcG9zaXRpb25hbCBzdWJzZXQgb2YgYXJndW1lbnRzLgogIExpc3Q8SEluc3RydWN0aW9uPiBfdmlzaXRQb3NpdGlvbmFsQXJndW1lbnRzKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIExpc3Q8SEluc3RydWN0aW9uPiByZXN1bHQgPSA8SEluc3RydWN0aW9uPltdOwogICAgZm9yIChpci5FeHByZXNzaW9uIGFyZ3VtZW50IGluIGFyZ3VtZW50cy5wb3NpdGlvbmFsKSB7CiAgICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgICAgcmVzdWx0LmFkZChwb3AoKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIEJ1aWxkcyB0aGUgbGlzdCBvZiBpbnN0cnVjdGlvbnMgZm9yIHRoZSBleHByZXNzaW9ucyBpbiB0aGUgYXJndW1lbnRzIHRvIGEKICAvLy8gZHluYW1pYyB0YXJnZXQgKG1lbWJlciBmdW5jdGlvbikuICBEeW5hbWljIHRhcmdldHMgdXNlIHN0dWJzIHRvIGFkZAogIC8vLyBkZWZhdWx0ZWQgYXJndW1lbnRzLCBzbyAodW5saWtlIHN0YXRpYyB0YXJnZXRzKSB3ZSBkbyBub3QgYWRkIHRoZSBkZWZhdWx0CiAgLy8vIHZhbHVlcy4KICBMaXN0PEhJbnN0cnVjdGlvbj4gX3Zpc2l0QXJndW1lbnRzRm9yRHluYW1pY1RhcmdldCgKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbl0pIHsKICAgIExpc3Q8SEluc3RydWN0aW9uPiB2YWx1ZXMgPSBfdmlzaXRQb3NpdGlvbmFsQXJndW1lbnRzKGFyZ3VtZW50cyk7CgogICAgaWYgKGFyZ3VtZW50cy5uYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIE1hcDxTdHJpbmcsIEhJbnN0cnVjdGlvbj4gbmFtZWRWYWx1ZXMgPSA8U3RyaW5nLCBISW5zdHJ1Y3Rpb24+e307CiAgICAgIGZvciAoaXIuTmFtZWRFeHByZXNzaW9uIGFyZ3VtZW50IGluIGFyZ3VtZW50cy5uYW1lZCkgewogICAgICAgIGFyZ3VtZW50LnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgICAgICBuYW1lZFZhbHVlc1thcmd1bWVudC5uYW1lXSA9IHBvcCgpOwogICAgICB9CiAgICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKSkgewogICAgICAgIHZhbHVlcy5hZGQobmFtZWRWYWx1ZXNbbmFtZV0pOwogICAgICB9CiAgICB9CgogICAgX2FkZFR5cGVBcmd1bWVudHModmFsdWVzLCB0eXBlQXJndW1lbnRzLCBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgcmV0dXJuIHZhbHVlczsKICB9CgogIC8vLyBCdWlsZCB0aGUgYXJndW1lbnQgbGlzdCBmb3IgSlMtaW50ZXJvcCBpbnZvY2F0aW9ucywgd2hpY2ggaGF2ZSBzbGlnaHRseQogIC8vLyBkaWZmZXJlbnQgc2VtYW50aWNzIHRoYW4gZGFydCBiZWNhdXNlIG9mIEpTJ3MgbnVsbCB2cyB1bmRlZmluZWQgYW5kIGxhY2sKICAvLy8gb2YgbmFtZWQgYXJndW1lbnRzLiBSZXR1cm4gbnVsbCBpZiB0aGUgYXJndW1lbnRzIGNvdWxkIG5vdCBiZSBjb3JyZWN0bHkKICAvLy8gcGFyc2VkIGJlY2F1c2UgdGhlIHVzZXIgcHJvdmlkZWQgY29kZSB3aXRoIG5hbWVkIHBhcmFtZXRlcnMgaW4gYSBKUyAobm9uCiAgLy8vIGZhY3RvcnkpIGZ1bmN0aW9uLgogIExpc3Q8SEluc3RydWN0aW9uPiBfdmlzaXRBcmd1bWVudHNGb3JOYXRpdmVTdGF0aWNUYXJnZXQoCiAgICAgIGlyLkZ1bmN0aW9uTm9kZSB0YXJnZXQsIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIC8vIFZpc2l0IGFyZ3VtZW50cyBpbiBzb3VyY2Ugb3JkZXIsIHRoZW4gcmUtb3JkZXIgYW5kIGZpbGwgaW4gZGVmYXVsdHMuCiAgICB2YXIgdmFsdWVzID0gX3Zpc2l0UG9zaXRpb25hbEFyZ3VtZW50cyhhcmd1bWVudHMpOwoKICAgIGlmICh0YXJnZXQubmFtZWRQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gT25seSBhbm9ueW1vdXMgZmFjdG9yeSBjb25zdHJ1Y3RvcnMgaW52b2x2aW5nIEpTIGludGVyb3AgYXJlIGFsbG93ZWQgdG8KICAgICAgLy8gaGF2ZSBuYW1lZCBwYXJhbWV0ZXJzLiBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLgogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlcih0YXJnZXQucGFyZW50KTsKICAgICAgaWYgKGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmIGZ1bmN0aW9uLmlzRmFjdG9yeUNvbnN0cnVjdG9yKSB7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBIYXZlIGEgIkNvbXBpbGVkQXJndW1lbnRzIiBzdHJ1Y3R1cmUgdG8ganVzdCB1cGRhdGUgd2l0aAogICAgICAgIC8vIHdoYXQgdmFsdWVzIHdlIGhhdmUgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBtYXAgYW5kIGRlLXBvcHVsYXRpbmcgaXQuCiAgICAgICAgdmFyIG5hbWVkVmFsdWVzID0gPFN0cmluZywgSEluc3RydWN0aW9uPnt9OwogICAgICAgIGZvciAoaXIuTmFtZWRFeHByZXNzaW9uIGFyZ3VtZW50IGluIGFyZ3VtZW50cy5uYW1lZCkgewogICAgICAgICAgYXJndW1lbnQudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgICAgICAgbmFtZWRWYWx1ZXNbYXJndW1lbnQubmFtZV0gPSBwb3AoKTsKICAgICAgICB9CgogICAgICAgIC8vIFZpc2l0IG5hbWVkIGFyZ3VtZW50cyBpbiBwYXJhbWV0ZXItcG9zaXRpb24gb3JkZXIsIHNlbGVjdGluZyBwcm92aWRlZAogICAgICAgIC8vIG9yIGRlZmF1bHQgdmFsdWUuCiAgICAgICAgdmFyIG5hbWVkUGFyYW1ldGVycyA9IHRhcmdldC5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KCk7CiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLnNvcnQobmF0aXZlT3JkZXJpbmcpOwogICAgICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgaW4gbmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBuYW1lZFZhbHVlc1twYXJhbWV0ZXIubmFtZV07CiAgICAgICAgICB2YWx1ZXMuYWRkKHZhbHVlKTsKICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgIG5hbWVkVmFsdWVzLnJlbW92ZShwYXJhbWV0ZXIubmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzc2VydChuYW1lZFZhbHVlcy5pc0VtcHR5KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBiZWNhdXNlIEpTIGNhbm5vdCBoYW5kbGUgbmFtZWQgcGFyYW1ldGVycy4KICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCB0YXJnZXQpLAogICAgICAgICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FVEhPRF9XSVRIX05BTUVEX0FSR1VNRU5UUywKICAgICAgICAgICAgeydtZXRob2QnOiBmdW5jdGlvbi5uYW1lfSk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfQoKICAvLy8gRmlsbHMgW3R5cGVBcmd1bWVudHNdIHdpdGggdGhlIHR5cGUgYXJndW1lbnRzIG5lZWRlZCBmb3IgW3NlbGVjdG9yXSBhbmQKICAvLy8gcmV0dXJucyB0aGUgc2VsZWN0b3IgY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIHR5cGUgYXJndW1lbnRzLgogIFNlbGVjdG9yIF9maWxsRHluYW1pY1R5cGVBcmd1bWVudHMoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBpci5Bcmd1bWVudHMgYXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBpZiAoc2VsZWN0b3IudHlwZUFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgIGlmIChfcnRpTmVlZC5zZWxlY3Rvck5lZWRzVHlwZUFyZ3VtZW50cyhzZWxlY3RvcikpIHsKICAgICAgICB0eXBlQXJndW1lbnRzLmFkZEFsbChhcmd1bWVudHMudHlwZXMubWFwKF9lbGVtZW50TWFwLmdldERhcnRUeXBlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnRvTm9uR2VuZXJpYygpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2VsZWN0b3I7CiAgfQoKICBMaXN0PERhcnRUeXBlPiBfZ2V0Q29uc3RydWN0b3JUeXBlQXJndW1lbnRzKAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciwgaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUGFzcyB0eXBlIGFyZ3VtZW50cyB0byBjb25zdHJ1Y3RvcnMgbGlrZSBjYWxsaW5nCiAgICAvLyBhIGdlbmVyaWMgbWV0aG9kLgogICAgcmV0dXJuIGNvbnN0IDxEYXJ0VHlwZT5bXTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gdHlwZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0bwogIC8vIGNvbnN0cnVjdG9ycyBsaWtlIGNhbGxpbmcgYSBnZW5lcmljIG1ldGhvZC4KICBMaXN0PERhcnRUeXBlPiBfZ2V0Q2xhc3NUeXBlQXJndW1lbnRzKAogICAgICBDbGFzc0VudGl0eSBjbHMsIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjbHMpKSB7CiAgICAgIHJldHVybiBhcmd1bWVudHMudHlwZXMubWFwKF9lbGVtZW50TWFwLmdldERhcnRUeXBlKS50b0xpc3QoKTsKICAgIH0KICAgIHJldHVybiBjb25zdCA8RGFydFR5cGU+W107CiAgfQoKICBMaXN0PERhcnRUeXBlPiBfZ2V0U3RhdGljVHlwZUFyZ3VtZW50cygKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChfcnRpTmVlZC5tZXRob2ROZWVkc1R5cGVBcmd1bWVudHMoZnVuY3Rpb24pKSB7CiAgICAgIHJldHVybiBhcmd1bWVudHMudHlwZXMubWFwKF9lbGVtZW50TWFwLmdldERhcnRUeXBlKS50b0xpc3QoKTsKICAgIH0KICAgIHJldHVybiBjb25zdCA8RGFydFR5cGU+W107CiAgfQoKICAvLy8gQnVpbGQgYXJndW1lbnQgbGlzdCBpbiBjYW5vbmljYWwgb3JkZXIgZm9yIGEgc3RhdGljIFt0YXJnZXRdLCBpbmNsdWRpbmcKICAvLy8gZmlsbGluZyBpbiB0aGUgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZS4KICBMaXN0PEhJbnN0cnVjdGlvbj4gX3Zpc2l0QXJndW1lbnRzRm9yU3RhdGljVGFyZ2V0KAogICAgICBpci5GdW5jdGlvbk5vZGUgdGFyZ2V0LAogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICBpci5Bcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gVmlzaXQgYXJndW1lbnRzIGluIHNvdXJjZSBvcmRlciwgdGhlbiByZS1vcmRlciBhbmQgZmlsbCBpbiBkZWZhdWx0cy4KICAgIExpc3Q8SEluc3RydWN0aW9uPiB2YWx1ZXMgPSBfdmlzaXRQb3NpdGlvbmFsQXJndW1lbnRzKGFyZ3VtZW50cyk7CgogICAgd2hpbGUgKHZhbHVlcy5sZW5ndGggPCBwYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPQogICAgICAgICAgdGFyZ2V0LnBvc2l0aW9uYWxQYXJhbWV0ZXJzW3ZhbHVlcy5sZW5ndGhdOwogICAgICB2YWx1ZXMuYWRkKF9kZWZhdWx0VmFsdWVGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKSk7CiAgICB9CgogICAgaWYgKHBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBNYXA8U3RyaW5nLCBISW5zdHJ1Y3Rpb24+IG5hbWVkVmFsdWVzID0ge307CiAgICAgIGZvciAoaXIuTmFtZWRFeHByZXNzaW9uIGFyZ3VtZW50IGluIGFyZ3VtZW50cy5uYW1lZCkgewogICAgICAgIGFyZ3VtZW50LnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgICAgICBuYW1lZFZhbHVlc1thcmd1bWVudC5uYW1lXSA9IHBvcCgpOwogICAgICB9CgogICAgICAvLyBWaXNpdCBuYW1lZCBhcmd1bWVudHMgaW4gcGFyYW1ldGVyLXBvc2l0aW9uIG9yZGVyLCBzZWxlY3RpbmcgcHJvdmlkZWQKICAgICAgLy8gb3IgZGVmYXVsdCB2YWx1ZS4KICAgICAgLy8gVE9ETyhzcmEpOiBFbnN1cmUgdGhlIHN0b3JlZCBvcmRlciBpcyBjYW5vbmljYWwgc28gd2UgZG9uJ3QgaGF2ZSB0bwogICAgICAvLyBzb3J0LiBUaGUgb2xkIGJ1aWxkZXIgdXNlcyBDYWxsU3RydWN0dXJlLm1ha2VBcmd1bWVudExpc3Qgd2hpY2ggZGVwZW5kcwogICAgICAvLyBvbiB0aGUgb2xkIGVsZW1lbnQgbW9kZWwuCiAgICAgIExpc3Q8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzID0gdGFyZ2V0Lm5hbWVkUGFyYW1ldGVycwogICAgICAgICAgLy8gRmlsdGVyIGVsaWRlZCBwYXJhbWV0ZXJzLgogICAgICAgICAgLndoZXJlKChwKSA9PiBwYXJhbWV0ZXJTdHJ1Y3R1cmUubmFtZWRQYXJhbWV0ZXJzLmNvbnRhaW5zKHAubmFtZSkpCiAgICAgICAgICAudG9MaXN0KCkKICAgICAgICAgICAgLi5zb3J0KG5hbWVkT3JkZXJpbmcpOwogICAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIG5hbWVkUGFyYW1ldGVycykgewogICAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IG5hbWVkVmFsdWVzW3BhcmFtZXRlci5uYW1lXTsKICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgdmFsdWVzLmFkZChfZGVmYXVsdFZhbHVlRm9yUGFyYW1ldGVyKHBhcmFtZXRlcikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YWx1ZXMuYWRkKHZhbHVlKTsKICAgICAgICAgIG5hbWVkVmFsdWVzLnJlbW92ZShwYXJhbWV0ZXIubmFtZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzc2VydChuYW1lZFZhbHVlcy5pc0VtcHR5KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChhcmd1bWVudHMubmFtZWQuaXNFbXB0eSk7CiAgICB9CgogICAgX2FkZFR5cGVBcmd1bWVudHModmFsdWVzLCB0eXBlQXJndW1lbnRzLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICByZXR1cm4gdmFsdWVzOwogIH0KCiAgdm9pZCBfYWRkVHlwZUFyZ3VtZW50cyhMaXN0PEhJbnN0cnVjdGlvbj4gdmFsdWVzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKHR5cGVBcmd1bWVudHMuaXNFbXB0eSkgcmV0dXJuOwogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgdmFsdWVzLmFkZChfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudCh0eXBlLCBzb3VyY2VFbGVtZW50LAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBISW5zdHJ1Y3Rpb24gX2RlZmF1bHRWYWx1ZUZvclBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlcikgewogICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIuaW5pdGlhbGl6ZXIsIGltcGxpY2l0TnVsbDogdHJ1ZSk7CiAgICBhc3NlcnQoY29uc3RhbnQgIT0gbnVsbCwgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSkpOwogICAgcmV0dXJuIGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljSW52b2NhdGlvbihpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlyLlByb2NlZHVyZSB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2FsbChub2RlLCBub2RlKTsKICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKHRhcmdldCk7CiAgICBpZiAoX2NvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbkhlbHBlcihmdW5jdGlvbikpIHsKICAgICAgX2hhbmRsZUludm9rZVN0YXRpY0ZvcmVpZ24obm9kZSwgZnVuY3Rpb24pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKF9jb21tb25FbGVtZW50cy5pc0V4dHJhY3RUeXBlQXJndW1lbnRzKGZ1bmN0aW9uKSAmJgogICAgICAgIF9oYW5kbGVFeHRyYWN0VHlwZUFyZ3VtZW50cyhub2RlLCBzb3VyY2VJbmZvcm1hdGlvbikpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2sgPSBfdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YoZnVuY3Rpb24pOwoKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgIF9nZXRTdGF0aWNUeXBlQXJndW1lbnRzKGZ1bmN0aW9uLCBub2RlLmFyZ3VtZW50cyk7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzID0gY2xvc2VkV29ybGQubmF0aXZlRGF0YQogICAgICAgICAgICAuaXNKc0ludGVyb3BNZW1iZXIoZnVuY3Rpb24pCiAgICAgICAgPyBfdmlzaXRBcmd1bWVudHNGb3JOYXRpdmVTdGF0aWNUYXJnZXQodGFyZ2V0LmZ1bmN0aW9uLCBub2RlLmFyZ3VtZW50cykKICAgICAgICA6IF92aXNpdEFyZ3VtZW50c0ZvclN0YXRpY1RhcmdldCgKICAgICAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uLAogICAgICAgICAgICBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLAogICAgICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgLy8gRXJyb3IgaW4gdGhlIGFyZ3VtZW50cyBwcm92aWRlZC4gRG8gbm90IHByb2Nlc3MgZnVydGhlci4KICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7IC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjawogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmIGZ1bmN0aW9uLmlzRmFjdG9yeUNvbnN0cnVjdG9yKSB7CiAgICAgIF9oYW5kbGVJbnZva2VGYWN0b3J5Q29uc3RydWN0b3IoCiAgICAgICAgICBub2RlLCBmdW5jdGlvbiwgdHlwZU1hc2ssIGFyZ3VtZW50cywgc291cmNlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gU3RhdGljIG1ldGhvZHMgY3VycmVudGx5IGlnbm9yZSB0aGUgdHlwZSBwYXJhbWV0ZXJzLgogICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKGZ1bmN0aW9uLCBhcmd1bWVudHMsIHR5cGVNYXNrLCB0eXBlQXJndW1lbnRzLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIF9oYW5kbGVJbnZva2VGYWN0b3J5Q29uc3RydWN0b3IoCiAgICAgIGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbiwKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgZnVuY3Rpb24sCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2ssCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAoZnVuY3Rpb24uaXNFeHRlcm5hbCAmJiBmdW5jdGlvbi5pc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yKSB7CiAgICAgIGlmIChpbnZvY2F0aW9uLmlzQ29uc3QpIHsKICAgICAgICAvLyBKdXN0IGxpa2UgYWxsIGNvbnN0IGNvbnN0cnVjdG9ycyAoc2VlIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKS4KICAgICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnQoCiAgICAgICAgICAgIF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUoaW52b2NhdGlvbiksIGNsb3NlZFdvcmxkLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfZ2VuZXJhdGVVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAnJHtmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2Z1bmN0aW9uLm5hbWV9ICcKICAgICAgICAgICAgJ2NhbiBvbmx5IGJlIHVzZWQgYXMgYSBjb25zdCBjb25zdHJ1Y3RvcicsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBpc0ZpeGVkTGlzdCA9IGZhbHNlOyAvLyBBbnkgZml4ZWQgbGlzdCwgZS5nLiBuZXcgTGlzdCgxMCksICBVSW50OExpc3QuCgogICAgLy8gUmVjb2duaXplIGBuZXcgTGlzdCgpYCBhbmQgYG5ldyBMaXN0KG4pYC4KICAgIGJvb2wgaXNGaXhlZExpc3RDb25zdHJ1Y3RvckNhbGwgPSBmYWxzZTsKICAgIGJvb2wgaXNHcm93YWJsZUxpc3RDb25zdHJ1Y3RvckNhbGwgPSBmYWxzZTsKICAgIGlmIChfY29tbW9uRWxlbWVudHMuaXNVbm5hbWVkTGlzdENvbnN0cnVjdG9yKGZ1bmN0aW9uKSAmJgogICAgICAgIGludm9jYXRpb24uYXJndW1lbnRzLm5hbWVkLmlzRW1wdHkpIHsKICAgICAgaW50IGFyZ3VtZW50Q291bnQgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsKICAgICAgaXNGaXhlZExpc3RDb25zdHJ1Y3RvckNhbGwgPSBhcmd1bWVudENvdW50ID09IDE7CiAgICAgIGlzR3Jvd2FibGVMaXN0Q29uc3RydWN0b3JDYWxsID0gYXJndW1lbnRDb3VudCA9PSAwOwogICAgICBpc0ZpeGVkTGlzdCA9IGlzRml4ZWRMaXN0Q29uc3RydWN0b3JDYWxsOwogICAgfQoKICAgIEludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlID0gX2VsZW1lbnRNYXAuY3JlYXRlSW50ZXJmYWNlVHlwZSgKICAgICAgICBpbnZvY2F0aW9uLnRhcmdldC5lbmNsb3NpbmdDbGFzcywgaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXMpOwoKICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSA9IHR5cGVNYXNrOwoKICAgIGJvb2wgaXNKU0FycmF5VHlwZWRDb25zdHJ1Y3RvciA9CiAgICAgICAgZnVuY3Rpb24gPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlUeXBlZENvbnN0cnVjdG9yOwoKICAgIF9pbmZlcnJlZFR5cGVPZk5ld0xpc3QoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICAgIHJldHVybiBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLnR5cGVPZk5ld0xpc3Qobm9kZSkgPz8KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgfQoKICAgIGlmIChpc0ZpeGVkTGlzdENvbnN0cnVjdG9yQ2FsbCkgewogICAgICBhc3NlcnQoCiAgICAgICAgICAvLyBBcmd1bWVudHMgbWF5IGluY2x1ZGUgdGhlIHR5cGUuCiAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09IDEgfHwgYXJndW1lbnRzLmxlbmd0aCA9PSAyLAogICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgZnVuY3Rpb24sCiAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgYXJndW1lbnRzLiAiCiAgICAgICAgICAgICAgIkV4cGVjdGVkIDEtMiBhcmd1bWVudCwgYWN0dWFsOiAkYXJndW1lbnRzLiIpKTsKICAgICAgSEluc3RydWN0aW9uIGxlbmd0aElucHV0ID0gYXJndW1lbnRzLmZpcnN0OwogICAgICBpZiAobGVuZ3RoSW5wdXQuaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICAgIEhQcmltaXRpdmVDaGVjayBjb252ZXJzaW9uID0gbmV3IEhQcmltaXRpdmVDaGVjaygKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLm51bVR5cGUsCiAgICAgICAgICAgIEhQcmltaXRpdmVDaGVjay5BUkdVTUVOVF9UWVBFX0NIRUNLLAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5udW1UeXBlLAogICAgICAgICAgICBsZW5ndGhJbnB1dCwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgIGFkZChjb252ZXJzaW9uKTsKICAgICAgICBsZW5ndGhJbnB1dCA9IGNvbnZlcnNpb247CiAgICAgIH0KICAgICAganMuVGVtcGxhdGUgY29kZSA9IGpzLmpzLnBhcnNlRm9yZWlnbkpTKCduZXcgQXJyYXkoIyknKTsKICAgICAgdmFyIGJlaGF2aW9yID0gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CgogICAgICB2YXIgZXhwZWN0ZWRUeXBlID0KICAgICAgICAgIF9lbGVtZW50TWFwLmdldERhcnRUeXBlKGludm9jYXRpb24uZ2V0U3RhdGljVHlwZShudWxsKSk7CiAgICAgIGJlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkLmFkZChleHBlY3RlZFR5cGUpOwogICAgICBiZWhhdmlvci50eXBlc1JldHVybmVkLmFkZChleHBlY3RlZFR5cGUpOwoKICAgICAgLy8gVGhlIGFsbG9jYXRpb24gY2FuIHRocm93IG9ubHkgaWYgdGhlIGdpdmVuIGxlbmd0aCBpcyBhIGRvdWJsZSBvcgogICAgICAvLyBvdXRzaWRlIHRoZSB1bnNpZ25lZCAzMiBiaXQgcmFuZ2UuCiAgICAgIC8vIFRPRE8oc3JhKTogQXJyYXkgYWxsb2NhdGlvbiBzaG91bGQgYmUgYW4gaW5zdHJ1Y3Rpb24gc28gdGhhdCBjYW5UaHJvdwogICAgICAvLyBjYW4gZGVwZW5kIG9uIGEgbGVuZ3RoIHR5cGUgZGlzY292ZXJlZCBpbiBvcHRpbWl6YXRpb24uCiAgICAgIGJvb2wgY2FuVGhyb3cgPSB0cnVlOwogICAgICBpZiAobGVuZ3RoSW5wdXQuaXNVSW50MzIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICBjYW5UaHJvdyA9IGZhbHNlOwogICAgICB9CgogICAgICB2YXIgaW5mZXJyZWRUeXBlID0gX2luZmVycmVkVHlwZU9mTmV3TGlzdChpbnZvY2F0aW9uKTsKICAgICAgcmVzdWx0VHlwZSA9CiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0FsbChpbmZlcnJlZFR5cGUpLmlzUG90ZW50aWFsbHlUcnVlCiAgICAgICAgICAgICAgPyBfYWJzdHJhY3RWYWx1ZURvbWFpbi5maXhlZExpc3RUeXBlCiAgICAgICAgICAgICAgOiBpbmZlcnJlZFR5cGU7CiAgICAgIEhGb3JlaWduQ29kZSBmb3JlaWduID0gbmV3IEhGb3JlaWduQ29kZSgKICAgICAgICAgIGNvZGUsIHJlc3VsdFR5cGUsIDxISW5zdHJ1Y3Rpb24+W2xlbmd0aElucHV0XSwKICAgICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBiZWhhdmlvciwKICAgICAgICAgIHRocm93QmVoYXZpb3I6CiAgICAgICAgICAgICAgY2FuVGhyb3cgPyBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWSA6IE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVIpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgICBwdXNoKGZvcmVpZ24pOwogICAgICAvLyBUT0RPKHJlZGVtcHRpb24pOiBHbG9iYWwgdHlwZSBhbmFseXNpcyB0cmFjaW5nIG1heSBoYXZlIGRldGVybWluZWQgdGhhdAogICAgICAvLyB0aGUgZml4ZWQtbGVuZ3RoIHByb3BlcnR5IGlzIG5ldmVyIGNoZWNrZWQuIElmIHNvLCB3ZSBjYW4gYXZvaWQgbWFya2luZwogICAgICAvLyB0aGUgYXJyYXkuCiAgICAgIHsKICAgICAgICBqcy5UZW1wbGF0ZSBjb2RlID0ganMuanMucGFyc2VGb3JlaWduSlMocicjLmZpeGVkJGxlbmd0aCA9IEFycmF5Jyk7CiAgICAgICAgLy8gV2Ugc2V0IHRoZSBpbnN0cnVjdGlvbiBhcyBbY2FuVGhyb3ddIHRvIGF2b2lkIGl0IGJlaW5nIGRlYWQgY29kZS4KICAgICAgICAvLyBXZSBuZWVkIGEgZmluZXIgZ3JhaW5lZCBzaWRlIGVmZmVjdC4KICAgICAgICBhZGQobmV3IEhGb3JlaWduQ29kZShjb2RlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5udWxsVHlwZSwgW3N0YWNrLmxhc3RdLAogICAgICAgICAgICB0aHJvd0JlaGF2aW9yOiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWSkpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzR3Jvd2FibGVMaXN0Q29uc3RydWN0b3JDYWxsKSB7CiAgICAgIHB1c2goX2J1aWxkTGl0ZXJhbExpc3QoPEhJbnN0cnVjdGlvbj5bXSkpOwogICAgICB2YXIgaW5mZXJyZWRUeXBlID0gX2luZmVycmVkVHlwZU9mTmV3TGlzdChpbnZvY2F0aW9uKTsKICAgICAgcmVzdWx0VHlwZSA9CiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0FsbChpbmZlcnJlZFR5cGUpLmlzUG90ZW50aWFsbHlUcnVlCiAgICAgICAgICAgICAgPyBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ncm93YWJsZUxpc3RUeXBlCiAgICAgICAgICAgICAgOiBpbmZlcnJlZFR5cGU7CiAgICAgIHN0YWNrLmxhc3QuaW5zdHJ1Y3Rpb25UeXBlID0gcmVzdWx0VHlwZTsKICAgIH0gZWxzZSBpZiAoaXNKU0FycmF5VHlwZWRDb25zdHJ1Y3RvcikgewogICAgICAvLyBUT0RPKHNyYSk6IEluc3RlYWQgb2YgY2FsbGluZyB0aGUgaWRlbnRpdHktbGlrZSBmYWN0b3J5IGNvbnN0cnVjdG9yLAogICAgICAvLyBzaW1wbHkgc2VsZWN0IHRoZSBzaW5nbGUgYXJndW1lbnQuCiAgICAgIC8vIEZhY3RvcnkgY29uc3RydWN0b3JzIHRha2UgdHlwZSBwYXJhbWV0ZXJzLgogICAgICBpZiAoY2xvc2VkV29ybGQucnRpTmVlZAogICAgICAgICAgLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzKSkge30KICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICBfZ2V0Q29uc3RydWN0b3JUeXBlQXJndW1lbnRzKGZ1bmN0aW9uLCBpbnZvY2F0aW9uLmFyZ3VtZW50cyk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gdHlwZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0bwogICAgICAvLyBjb25zdHJ1Y3RvcnMgbGlrZSBjYWxsaW5nIGEgZ2VuZXJpYyBtZXRob2QuCiAgICAgIF9hZGRUeXBlQXJndW1lbnRzKAogICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgX2dldENsYXNzVHlwZUFyZ3VtZW50cyhmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcywgaW52b2NhdGlvbi5hcmd1bWVudHMpLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oZnVuY3Rpb24sIGFyZ3VtZW50cywgdHlwZU1hc2ssIHR5cGVBcmd1bWVudHMsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgLy8gRmFjdG9yeSBjb25zdHJ1Y3RvcnMgdGFrZSB0eXBlIHBhcmFtZXRlcnMuCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgICAgX2dldENvbnN0cnVjdG9yVHlwZUFyZ3VtZW50cyhmdW5jdGlvbiwgaW52b2NhdGlvbi5hcmd1bWVudHMpOwogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIHR5cGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8KICAgICAgLy8gY29uc3RydWN0b3JzIGxpa2UgY2FsbGluZyBhIGdlbmVyaWMgbWV0aG9kLgogICAgICBfYWRkVHlwZUFyZ3VtZW50cygKICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgIF9nZXRDbGFzc1R5cGVBcmd1bWVudHMoZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MsIGludm9jYXRpb24uYXJndW1lbnRzKSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgaW5zdGFuY2VUeXBlID0gbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dChpbnN0YW5jZVR5cGUpOwogICAgICBfYWRkSW1wbGljaXRJbnN0YW50aWF0aW9uKGluc3RhbmNlVHlwZSk7CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbihmdW5jdGlvbiwgYXJndW1lbnRzLCB0eXBlTWFzaywgdHlwZUFyZ3VtZW50cywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbiwgaW5zdGFuY2VUeXBlOiBpbnN0YW5jZVR5cGUpOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBuZXdJbnN0YW5jZSA9IHN0YWNrLmxhc3Q7CgogICAgaWYgKGlzRml4ZWRMaXN0KSB7CiAgICAgIC8vIElmIHdlIGlubGluZWQgYSBjb25zdHJ1Y3RvciB0aGUgY2FsbC1zaXRlLXNwZWNpZmljIHR5cGUgZnJvbSB0eXBlCiAgICAgIC8vIGluZmVyZW5jZSAoZS5nLiBhIGNvbnRhaW5lciB0eXBlKSB3aWxsIG5vdCBiZSBvbiB0aGUgbm9kZS4gU3RvcmUgdGhlCiAgICAgIC8vIG1vcmUgc3BlY2lhbGl6ZWQgdHlwZSBvbiB0aGUgYWxsb2NhdGlvbi4KICAgICAgbmV3SW5zdGFuY2UuaW5zdHJ1Y3Rpb25UeXBlID0gcmVzdWx0VHlwZTsKICAgICAgZ3JhcGguYWxsb2NhdGVkRml4ZWRMaXN0cy5hZGQobmV3SW5zdGFuY2UpOwogICAgfQoKICAgIGlmIChfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhfY29tbW9uRWxlbWVudHMubGlzdENsYXNzKSAmJgogICAgICAgIChpc0ZpeGVkTGlzdENvbnN0cnVjdG9yQ2FsbCB8fAogICAgICAgICAgICBpc0dyb3dhYmxlTGlzdENvbnN0cnVjdG9yQ2FsbCB8fAogICAgICAgICAgICBpc0pTQXJyYXlUeXBlZENvbnN0cnVjdG9yKSkgewogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBfZWxlbWVudE1hcC5jcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICAgICAgaW52b2NhdGlvbi50YXJnZXQuZW5jbG9zaW5nQ2xhc3MsIGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzKTsKICAgICAgc3RhY2sKICAgICAgICAgIC5hZGQoX3NldExpc3RSdW50aW1lVHlwZUluZm9JZk5lZWRlZChwb3AoKSwgdHlwZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIC8vLyBSZXBsYWNlIGNhbGxzIHRvIGBleHRyYWN0VHlwZUFyZ3VtZW50c2Agd2l0aCBlcXVpdmFsZW50IGNvZGUuIFJldHVybnMKICAvLy8gYHRydWVgIGlmIGBleHRyYWN0VHlwZUFyZ3VtZW50c2AgaXMgaGFuZGxlZC4KICBib29sIF9oYW5kbGVFeHRyYWN0VHlwZUFyZ3VtZW50cygKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gRXhwYW5kIGNhbGxzIGFzIGZvbGxvd3M6CiAgICAvLwogICAgLy8gICAgIHIgPSBleHRyYWN0VHlwZUFyZ3VtZW50czxNYXA+KGUsIGYpCiAgICAvLyAtLT4KICAgIC8vICAgICBpbnRlcmNlcHRvciA9IGdldEludGVyY2VwdG9yKGUpOwogICAgLy8gICAgIFQxID0gZ2V0UnVudGltZVR5cGVBcmd1bWVudEludGVyY2VwdGVkKGludGVyY2VwdG9yLCBlLCAnTWFwJywgMCk7CiAgICAvLyAgICAgVDIgPSBnZXRSdW50aW1lVHlwZUFyZ3VtZW50SW50ZXJjZXB0ZWQoaW50ZXJjZXB0b3IsIGUsICdNYXAnLCAxKTsKICAgIC8vICAgICByID0gZjxUMSwgVDI+KCk7CiAgICAvLwogICAgLy8gVE9ETyhzcmEpOiBTaG91bGQgd2UgYWRkIGEgY2hlY2sgYmVmb3JlIHRoZSB2YXJpYWJsZSBleHRyYWN0aW9uPyBXZSBjb3VsZAogICAgLy8gYWRkIGEgdHlwZSBjaGVjayAod2hpY2ggd291bGQgcGVybWl0IGBudWxsYCksIG9yIGFkZCBhbiBpcy1jaGVjayB3aXRoIGFuCiAgICAvLyBleHBsaWNpdCB0aHJvdy4KCiAgICBpZiAoaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggIT0gMikgcmV0dXJuIGZhbHNlOwogICAgaWYgKGludm9jYXRpb24uYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHJldHVybiBmYWxzZTsKICAgIHZhciB0eXBlcyA9IGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzOwogICAgaWYgKHR5cGVzLmxlbmd0aCAhPSAxKSByZXR1cm4gZmFsc2U7CgogICAgLy8gVGhlIHR5cGUgc2hvdWxkIGJlIGEgc2luZ2xlIHR5cGUgbmFtZS4KICAgIGlyLkRhcnRUeXBlIHR5cGUgPSB0eXBlcy5maXJzdDsKICAgIERhcnRUeXBlIHR5cGVWYWx1ZSA9CiAgICAgICAgbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dChfZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSk7CiAgICBpZiAodHlwZVZhbHVlIGlzISBJbnRlcmZhY2VUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlVmFsdWU7CiAgICBpZiAoIWludGVyZmFjZVR5cGUudHJlYXRBc1JhdykgcmV0dXJuIGZhbHNlOwoKICAgIENsYXNzRW50aXR5IGNscyA9IGludGVyZmFjZVR5cGUuZWxlbWVudDsKICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cyA9CiAgICAgICAgX3Zpc2l0UG9zaXRpb25hbEFyZ3VtZW50cyhpbnZvY2F0aW9uLmFyZ3VtZW50cyk7CgogICAgSEluc3RydWN0aW9uIG9iamVjdCA9IGFyZ3VtZW50c1swXTsKICAgIEhJbnN0cnVjdGlvbiBjbG9zdXJlID0gYXJndW1lbnRzWzFdOwogICAgSEluc3RydWN0aW9uIGludGVyY2VwdG9yID0gX2ludGVyY2VwdG9yRm9yKG9iamVjdCwgc291cmNlSW5mb3JtYXRpb24pOwoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltjbG9zdXJlXTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSA8RGFydFR5cGU+W107CgogICAgdGhpc1R5cGUudHlwZUFyZ3VtZW50cy5mb3JFYWNoKChfdHlwZVZhcmlhYmxlKSB7CiAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUgPSBfdHlwZVZhcmlhYmxlOwogICAgICB0eXBlQXJndW1lbnRzLmFkZCh2YXJpYWJsZSk7CiAgICAgIEhJbnN0cnVjdGlvbiByZWFkVHlwZSA9IG5ldyBIVHlwZUluZm9SZWFkVmFyaWFibGUuaW50ZXJjZXB0ZWQoCiAgICAgICAgICB2YXJpYWJsZSwgaW50ZXJjZXB0b3IsIG9iamVjdCwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICBhZGQocmVhZFR5cGUpOwogICAgICBpbnB1dHMuYWRkKHJlYWRUeXBlKTsKICAgIH0pOwoKICAgIC8vIFRPRE8oc3JhKTogSW4gY29tcGxpYW5jZSBtb2RlLCBpbnNlcnQgYSBjaGVjayB0aGF0IFtjbG9zdXJlXSBpcyBhCiAgICAvLyBmdW5jdGlvbiBvZiBOIHR5cGUgYXJndW1lbnRzLgoKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0KICAgICAgICBuZXcgU2VsZWN0b3IuY2FsbENsb3N1cmUoMCwgY29uc3QgPFN0cmluZz5bXSwgdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgU3RhdGljVHlwZSByZWNlaXZlclN0YXRpY1R5cGUgPQogICAgICAgIF9nZXRTdGF0aWNUeXBlKGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWxbMV0pOwogICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5jcmVhdGVGcm9tU3RhdGljVHlwZShyZWNlaXZlclN0YXRpY1R5cGUudHlwZSwKICAgICAgICAgICAgY2xhc3NSZWxhdGlvbjogcmVjZWl2ZXJTdGF0aWNUeXBlLnJlbGF0aW9uLCBudWxsYWJsZTogdHJ1ZSkKICAgICAgICAuYWJzdHJhY3RWYWx1ZTsKICAgIHB1c2gobmV3IEhJbnZva2VDbG9zdXJlKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGlucHV0cywKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgdHlwZUFyZ3VtZW50cykpOwoKICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCBfaGFuZGxlSW52b2tlU3RhdGljRm9yZWlnbigKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBTdHJpbmcgbmFtZSA9IG1lbWJlci5uYW1lOwogICAgaWYgKG5hbWUgPT0gJ0pTJykgewogICAgICBfaGFuZGxlRm9yZWlnbkpzKGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdEQVJUX0NMT1NVUkVfVE9fSlMnKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduRGFydENsb3N1cmVUb0pzKGludm9jYXRpb24sICdEQVJUX0NMT1NVUkVfVE9fSlMnKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnUkFXX0RBUlRfRlVOQ1RJT05fUkVGJykgewogICAgICBfaGFuZGxlRm9yZWlnblJhd0Z1bmN0aW9uUmVmKGludm9jYXRpb24sICdSQVdfREFSVF9GVU5DVElPTl9SRUYnKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnSlNfU0VUX1NUQVRJQ19TVEFURScpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25Kc1NldFN0YXRpY1N0YXRlKGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdKU19HRVRfU1RBVElDX1NUQVRFJykgewogICAgICBfaGFuZGxlRm9yZWlnbkpzR2V0U3RhdGljU3RhdGUoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0pTX0dFVF9OQU1FJykgewogICAgICBfaGFuZGxlRm9yZWlnbkpzR2V0TmFtZShpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnSlNfRU1CRURERURfR0xPQkFMJykgewogICAgICBfaGFuZGxlRm9yZWlnbkpzRW1iZWRkZWRHbG9iYWwoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0pTX0JVSUxUSU4nKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduSnNCdWlsdGluKGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdKU19HRVRfRkxBRycpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25Kc0dldEZsYWcoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0pTX0VGRkVDVCcpIHsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdKU19JTlRFUkNFUFRPUl9DT05TVEFOVCcpIHsKICAgICAgX2hhbmRsZUpzSW50ZXJjZXB0b3JDb25zdGFudChpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnZ2V0SW50ZXJjZXB0b3InKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduR2V0SW50ZXJjZXB0b3IoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ2dldEpTQXJyYXlJbnRlcm9wUnRpJykgewogICAgICBfaGFuZGxlRm9yZWlnbkdldEpTQXJyYXlJbnRlcm9wUnRpKGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdKU19TVFJJTkdfQ09OQ0FUJykgewogICAgICBfaGFuZGxlSnNTdHJpbmdDb25jYXQoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ19jcmVhdGVJbnZvY2F0aW9uTWlycm9yJykgewogICAgICBfaGFuZGxlQ3JlYXRlSW52b2NhdGlvbk1pcnJvcihpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICAiVW5rbm93biBmb3JlaWduOiAke25hbWV9Iik7CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVDcmVhdGVJbnZvY2F0aW9uTWlycm9yKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaXIuU3RyaW5nTGl0ZXJhbCBuYW1lTGl0ZXJhbCA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWxbMF07CiAgICBTdHJpbmcgbmFtZSA9IG5hbWVMaXRlcmFsLnZhbHVlOwoKICAgIGlyLkxpc3RMaXRlcmFsIHR5cGVBcmd1bWVudHNMaXRlcmFsID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbFsxXTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgIHR5cGVBcmd1bWVudHNMaXRlcmFsLmV4cHJlc3Npb25zLm1hcCgoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICAgIGlyLlR5cGVMaXRlcmFsIHR5cGVMaXRlcmFsID0gZXhwcmVzc2lvbjsKICAgICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGVMaXRlcmFsLnR5cGUpOwogICAgfSkudG9MaXN0KCk7CgogICAgaXIuTGlzdExpdGVyYWwgcG9zaXRpb25hbEFyZ3VtZW50c0xpdGVyYWwgPQogICAgICAgIGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWxbMl07CiAgICBpci5FeHByZXNzaW9uIG5hbWVkQXJndW1lbnRzTGl0ZXJhbCA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWxbM107CiAgICBNYXA8U3RyaW5nLCBpci5FeHByZXNzaW9uPiBuYW1lZEFyZ3VtZW50cyA9IHt9OwogICAgaXIuSW50TGl0ZXJhbCBraW5kTGl0ZXJhbCA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWxbNF07CgogICAgTmFtZSBtZW1iZXJOYW1lID0gbmV3IE5hbWUobmFtZSwgX2N1cnJlbnRGcmFtZS5tZW1iZXIubGlicmFyeSk7CiAgICBTZWxlY3RvciBzZWxlY3RvcjsKICAgIHN3aXRjaCAoa2luZExpdGVyYWwudmFsdWUpIHsKICAgICAgY2FzZSBpbnZvY2F0aW9uTWlycm9yR2V0dGVyS2luZDoKICAgICAgICBzZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5nZXR0ZXIobWVtYmVyTmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgaW52b2NhdGlvbk1pcnJvclNldHRlcktpbmQ6CiAgICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3Iuc2V0dGVyKG1lbWJlck5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIGludm9jYXRpb25NaXJyb3JNZXRob2RLaW5kOgogICAgICAgIGlmIChtZW1iZXJOYW1lID09IE5hbWVzLklOREVYX05BTUUpIHsKICAgICAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yLmluZGV4KCk7CiAgICAgICAgfSBlbHNlIGlmIChtZW1iZXJOYW1lID09IE5hbWVzLklOREVYX1NFVF9OQU1FKSB7CiAgICAgICAgICBzZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5pbmRleFNldCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAobmFtZWRBcmd1bWVudHNMaXRlcmFsIGlzIGlyLk1hcExpdGVyYWwpIHsKICAgICAgICAgICAgbmFtZWRBcmd1bWVudHNMaXRlcmFsLmVudHJpZXMuZm9yRWFjaCgoaXIuTWFwRW50cnkgZW50cnkpIHsKICAgICAgICAgICAgICBpci5TdHJpbmdMaXRlcmFsIGtleSA9IGVudHJ5LmtleTsKICAgICAgICAgICAgICBuYW1lZEFyZ3VtZW50c1trZXkudmFsdWVdID0gZW50cnkudmFsdWU7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIGlmIChuYW1lZEFyZ3VtZW50c0xpdGVyYWwgaXMgaXIuQ29uc3RhbnRFeHByZXNzaW9uICYmCiAgICAgICAgICAgICAgbmFtZWRBcmd1bWVudHNMaXRlcmFsLmNvbnN0YW50IGlzIGlyLk1hcENvbnN0YW50KSB7CiAgICAgICAgICAgIGlyLk1hcENvbnN0YW50IGNvbnN0YW50ID0gbmFtZWRBcmd1bWVudHNMaXRlcmFsLmNvbnN0YW50OwogICAgICAgICAgICBmb3IgKGlyLkNvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gY29uc3RhbnQuZW50cmllcykgewogICAgICAgICAgICAgIGlyLlN0cmluZ0NvbnN0YW50IGtleSA9IGVudHJ5LmtleTsKICAgICAgICAgICAgICBuYW1lZEFyZ3VtZW50c1trZXkudmFsdWVdID0KICAgICAgICAgICAgICAgICAgbmV3IGlyLkNvbnN0YW50RXhwcmVzc2lvbihlbnRyeS52YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShpbnZvY2F0aW9uKSwKICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIG5hbWVkIGFyZ3VtZW50cyB2YWx1ZSBpbiBjcmVhdGVJbnZvY2F0aW9uTWlycnJvcjogIgogICAgICAgICAgICAgICAgIiR7bmFtZWRBcmd1bWVudHNMaXRlcmFsfS4iKTsKICAgICAgICAgIH0KICAgICAgICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlKAogICAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHNMaXRlcmFsLmV4cHJlc3Npb25zLmxlbmd0aCwKICAgICAgICAgICAgICBuYW1lZEFyZ3VtZW50cy5rZXlzLnRvTGlzdCgpLAogICAgICAgICAgICAgIHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgICAgICAgIGlmIChTZWxlY3Rvci5pc09wZXJhdG9yTmFtZShuYW1lKSkgewogICAgICAgICAgICBzZWxlY3RvciA9CiAgICAgICAgICAgICAgICBuZXcgU2VsZWN0b3IoU2VsZWN0b3JLaW5kLk9QRVJBVE9SLCBtZW1iZXJOYW1lLCBjYWxsU3RydWN0dXJlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yLmNhbGwobWVtYmVyTmFtZSwgY2FsbFN0cnVjdHVyZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQoKICAgIEhDb25zdGFudCBuYW1lQ29uc3RhbnQgPSBncmFwaC5hZGRDb25zdGFudCgKICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3ltYm9sKGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLCBuYW1lKSwKICAgICAgICBjbG9zZWRXb3JsZCk7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gYXJndW1lbnQgaW4gcG9zaXRpb25hbEFyZ3VtZW50c0xpdGVyYWwuZXhwcmVzc2lvbnMpIHsKICAgICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICBhcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgIH0KICAgIGlmIChuYW1lZEFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIE1hcDxTdHJpbmcsIEhJbnN0cnVjdGlvbj4gbmFtZWRWYWx1ZXMgPSA8U3RyaW5nLCBISW5zdHJ1Y3Rpb24+e307CiAgICAgIG5hbWVkQXJndW1lbnRzLmZvckVhY2goKFN0cmluZyBuYW1lLCBpci5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgICAgdmFsdWUuYWNjZXB0KHRoaXMpOwogICAgICAgIG5hbWVkVmFsdWVzW25hbWVdID0gcG9wKCk7CiAgICAgIH0pOwogICAgICBmb3IgKFN0cmluZyBuYW1lIGluIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUuZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCkpIHsKICAgICAgICBhcmd1bWVudHMuYWRkKG5hbWVkVmFsdWVzW25hbWVdKTsKICAgICAgfQogICAgfQoKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2FsbChpbnZvY2F0aW9uLCBpbnZvY2F0aW9uKTsKICAgIF9hZGRUeXBlQXJndW1lbnRzKGFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cywgc291cmNlSW5mb3JtYXRpb24pOwoKICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudHNJbnN0cnVjdGlvbiA9IF9idWlsZExpdGVyYWxMaXN0KGFyZ3VtZW50cyk7CiAgICBhZGQoYXJndW1lbnRzSW5zdHJ1Y3Rpb24pOwoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudE5hbWVzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGZvciAoU3RyaW5nIGFyZ3VtZW50TmFtZQogICAgICAgIGluIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUuZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCkpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBhcmd1bWVudE5hbWVDb25zdGFudCA9CiAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKGFyZ3VtZW50TmFtZSk7CiAgICAgIGFyZ3VtZW50TmFtZXMuYWRkKGdyYXBoLmFkZENvbnN0YW50KGFyZ3VtZW50TmFtZUNvbnN0YW50LCBjbG9zZWRXb3JsZCkpOwogICAgfQogICAgSEluc3RydWN0aW9uIGFyZ3VtZW50TmFtZXNJbnN0cnVjdGlvbiA9IF9idWlsZExpdGVyYWxMaXN0KGFyZ3VtZW50TmFtZXMpOwogICAgYWRkKGFyZ3VtZW50TmFtZXNJbnN0cnVjdGlvbik7CgogICAgSEluc3RydWN0aW9uIHR5cGVBcmd1bWVudENvdW50ID0KICAgICAgICBncmFwaC5hZGRDb25zdGFudEludCh0eXBlQXJndW1lbnRzLmxlbmd0aCwgY2xvc2VkV29ybGQpOwoKICAgIGpzLk5hbWUgaW50ZXJuYWxOYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKCiAgICBDb25zdGFudFZhbHVlIGtpbmRDb25zdGFudCA9CiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludEZyb21JbnQoc2VsZWN0b3IuaW52b2NhdGlvbk1pcnJvcktpbmQpOwoKICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICBfY29tbW9uRWxlbWVudHMuY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvciwKICAgICAgICBbCiAgICAgICAgICBuYW1lQ29uc3RhbnQsCiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudFN0cmluZ0Zyb21OYW1lKGludGVybmFsTmFtZSwgY2xvc2VkV29ybGQpLAogICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnQoa2luZENvbnN0YW50LCBjbG9zZWRXb3JsZCksCiAgICAgICAgICBhcmd1bWVudHNJbnN0cnVjdGlvbiwKICAgICAgICAgIGFyZ3VtZW50TmFtZXNJbnN0cnVjdGlvbiwKICAgICAgICAgIHR5cGVBcmd1bWVudENvdW50LAogICAgICAgIF0sCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBib29sIF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24sCiAgICAgIHtpbnQgbWluUG9zaXRpb25hbCwgaW50IG1heFBvc2l0aW9uYWwsIGludCB0eXBlQXJndW1lbnRDb3VudCA9IDB9KSB7CiAgICBTdHJpbmcgcGx1cmFsaXplQXJndW1lbnRzKGludCBjb3VudCwgW1N0cmluZyBhZGplY3RpdmUgPSAnJ10pIHsKICAgICAgaWYgKGNvdW50ID09IDApIHJldHVybiAnbm8gJHthZGplY3RpdmV9YXJndW1lbnRzJzsKICAgICAgaWYgKGNvdW50ID09IDEpIHJldHVybiAnb25lICR7YWRqZWN0aXZlfWFyZ3VtZW50JzsKICAgICAgaWYgKGNvdW50ID09IDIpIHJldHVybiAndHdvICR7YWRqZWN0aXZlfWFyZ3VtZW50cyc7CiAgICAgIHJldHVybiAnJGNvdW50ICR7YWRqZWN0aXZlfWFyZ3VtZW50cyc7CiAgICB9CgogICAgU3RyaW5nIG5hbWUoKSA9PiBpbnZvY2F0aW9uLnRhcmdldC5uYW1lLm5hbWU7CgogICAgaXIuQXJndW1lbnRzIGFyZ3VtZW50cyA9IGludm9jYXRpb24uYXJndW1lbnRzOwogICAgYm9vbCBiYWQgPSBmYWxzZTsKICAgIGlmIChhcmd1bWVudHMudHlwZXMubGVuZ3RoICE9IHR5cGVBcmd1bWVudENvdW50KSB7CiAgICAgIFN0cmluZyBleHBlY3RlZCA9IHBsdXJhbGl6ZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRDb3VudCwgJ3R5cGUgJyk7CiAgICAgIFN0cmluZyBhY3R1YWwgPSBwbHVyYWxpemVBcmd1bWVudHMoYXJndW1lbnRzLnR5cGVzLmxlbmd0aCwgJ3R5cGUgJyk7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgICB7J3RleHQnOiAiRXJyb3I6ICcke25hbWUoKX0nIHRha2VzICRleHBlY3RlZCwgbm90ICRhY3R1YWwuIn0pOwogICAgICBiYWQgPSB0cnVlOwogICAgfQogICAgaWYgKGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IG1pblBvc2l0aW9uYWwpIHsKICAgICAgU3RyaW5nIHBocmFzZSA9IHBsdXJhbGl6ZUFyZ3VtZW50cyhtaW5Qb3NpdGlvbmFsKTsKICAgICAgaWYgKG1heFBvc2l0aW9uYWwgIT0gbWluUG9zaXRpb25hbCkgcGhyYXNlID0gJ2F0IGxlYXN0ICRwaHJhc2UnOwogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgICAgeyd0ZXh0JzogIkVycm9yOiBUb28gZmV3IGFyZ3VtZW50cy4gJyR7bmFtZSgpfScgdGFrZXMgJHBocmFzZS4ifSk7CiAgICAgIGJhZCA9IHRydWU7CiAgICB9CiAgICBpZiAobWF4UG9zaXRpb25hbCAhPSBudWxsICYmIGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA+IG1heFBvc2l0aW9uYWwpIHsKICAgICAgU3RyaW5nIHBocmFzZSA9IHBsdXJhbGl6ZUFyZ3VtZW50cyhtYXhQb3NpdGlvbmFsKTsKICAgICAgaWYgKG1heFBvc2l0aW9uYWwgIT0gbWluUG9zaXRpb25hbCkgcGhyYXNlID0gJ2F0IG1vc3QgJHBocmFzZSc7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgICB7J3RleHQnOiAiRXJyb3I6IFRvbyBtYW55IGFyZ3VtZW50cy4gJyR7bmFtZSgpfScgdGFrZXMgJHBocmFzZS4ifSk7CiAgICAgIGJhZCA9IHRydWU7CiAgICB9CiAgICBpZiAoYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICAgIHsndGV4dCc6ICJFcnJvcjogJyR7bmFtZSgpfScgZG9lcyBub3QgdGFrZSBuYW1lZCBhcmd1bWVudHMuIn0pOwogICAgICBiYWQgPSB0cnVlOwogICAgfQogICAgcmV0dXJuIGJhZDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGFyZ3VtZW50LiBUaGUgYXJndW1lbnQgbXVzdCBldmFsdWF0ZSB0byBhCiAgLy8vIGNvbnN0YW50LiAgSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRoZSBlcnJvciBpcyByZXBvcnRlZCBhbmQgYG51bGxgIGlzCiAgLy8vIHJldHVybmVkLgogIFN0cmluZyBfZm9yZWlnbkNvbnN0YW50U3RyaW5nQXJndW1lbnQoCiAgICAgIGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbiwgaW50IHBvc2l0aW9uLCBTdHJpbmcgbWV0aG9kTmFtZSwKICAgICAgW1N0cmluZyBhZGplY3RpdmUgPSAnJ10pIHsKICAgIGlyLkV4cHJlc3Npb24gYXJndW1lbnQgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsW3Bvc2l0aW9uXTsKICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHBvcCgpOwoKICAgIGlmICghaW5zdHJ1Y3Rpb24uaXNDb25zdGFudFN0cmluZygpKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBhcmd1bWVudCksCiAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLCB7CiAgICAgICAgJ3RleHQnOiAiRXJyb3I6IEV4cGVjdGVkIFN0cmluZyBjb25zdGFudCBhcyAke2FkamVjdGl2ZX1hcmd1bWVudCAiCiAgICAgICAgICAgICJ0byAnJG1ldGhvZE5hbWUnLiIKICAgICAgfSk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIEhDb25zdGFudCBoQ29uc3RhbnQgPSBpbnN0cnVjdGlvbjsKICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgc3RyaW5nQ29uc3RhbnQgPSBoQ29uc3RhbnQuY29uc3RhbnQ7CiAgICByZXR1cm4gc3RyaW5nQ29uc3RhbnQuc3RyaW5nVmFsdWU7CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduRGFydENsb3N1cmVUb0pzKAogICAgICBpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24sIFN0cmluZyBuYW1lKSB7CiAgICAvLyBUT0RPKHNyYSk6IERvIHdlIG5lZWQgdG8gd3JhcCB0aGUgY2xvc3VyZSBpbiBzb21ldGhpbmcgdGhhdCBzYXZlcyB0aGUKICAgIC8vIGN1cnJlbnQgaXNvbGF0ZT8KICAgIF9oYW5kbGVGb3JlaWduUmF3RnVuY3Rpb25SZWYoaW52b2NhdGlvbiwgbmFtZSk7CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduUmF3RnVuY3Rpb25SZWYoCiAgICAgIGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbiwgU3RyaW5nIG5hbWUpIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAxLCBtYXhQb3NpdGlvbmFsOiAxKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlyLkV4cHJlc3Npb24gY2xvc3VyZSA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuc2luZ2xlOwogICAgU3RyaW5nIHByb2JsZW0gPSAncmVxdWlyZXMgYSBzdGF0aWMgbWV0aG9kIG9yIHRvcC1sZXZlbCBtZXRob2QnOwoKICAgIGJvb2wgaGFuZGxlVGFyZ2V0KGlyLlByb2NlZHVyZSBwcm9jZWR1cmUpIHsKICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gcHJvY2VkdXJlLmZ1bmN0aW9uOwogICAgICBpZiAoZnVuY3Rpb24gIT0gbnVsbCAmJgogICAgICAgICAgZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9PQogICAgICAgICAgICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCAmJgogICAgICAgICAgZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgICBwdXNoKG5ldyBIRm9yZWlnbkNvZGUoCiAgICAgICAgICAgIGpzLmpzLmV4cHJlc3Npb25UZW1wbGF0ZVlpZWxkaW5nKF9lbWl0dGVyCiAgICAgICAgICAgICAgICAuc3RhdGljRnVuY3Rpb25BY2Nlc3MoX2VsZW1lbnRNYXAuZ2V0TWV0aG9kKHByb2NlZHVyZSkpKSwKICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsCiAgICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBOYXRpdmVCZWhhdmlvci5QVVJFLAogICAgICAgICAgICBmb3JlaWduRnVuY3Rpb246IF9lbGVtZW50TWFwLmdldE1ldGhvZChwcm9jZWR1cmUpKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcHJvYmxlbSA9ICdkb2VzIG5vdCBoYW5kbGUgYSBjbG9zdXJlIHdpdGggb3B0aW9uYWwgcGFyYW1ldGVycyc7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoY2xvc3VyZSBpcyBpci5TdGF0aWNHZXQpIHsKICAgICAgaXIuTWVtYmVyIHN0YXRpY1RhcmdldCA9IGNsb3N1cmUudGFyZ2V0OwogICAgICBpZiAoc3RhdGljVGFyZ2V0IGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgIGlmIChzdGF0aWNUYXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICAgICAgaWYgKGhhbmRsZVRhcmdldChzdGF0aWNUYXJnZXQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY2xvc3VyZSBpcyBpci5Db25zdGFudEV4cHJlc3Npb24gJiYKICAgICAgICBjbG9zdXJlLmNvbnN0YW50IGlzIGlyLlRlYXJPZmZDb25zdGFudCkgewogICAgICBpci5UZWFyT2ZmQ29uc3RhbnQgdGVhck9mZiA9IGNsb3N1cmUuY29uc3RhbnQ7CiAgICAgIGlmIChoYW5kbGVUYXJnZXQodGVhck9mZi5wcm9jZWR1cmUpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgIHsndGV4dCc6ICInJG5hbWUnICRwcm9ibGVtLiJ9KTsKICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgcmV0dXJuOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkpzU2V0U3RhdGljU3RhdGUoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMSwgbWF4UG9zaXRpb25hbDogMSkpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gX3Zpc2l0UG9zaXRpb25hbEFyZ3VtZW50cyhpbnZvY2F0aW9uLmFyZ3VtZW50cyk7CgogICAgU3RyaW5nIGlzb2xhdGVOYW1lID0gX25hbWVyLnN0YXRpY1N0YXRlSG9sZGVyOwogICAgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMuZW1wdHkoKTsKICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICBwdXNoKG5ldyBIRm9yZWlnbkNvZGUoanMuanMucGFyc2VGb3JlaWduSlMoIiRpc29sYXRlTmFtZSA9ICMiKSwKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgaW5wdXRzLAogICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBOYXRpdmVCZWhhdmlvci5DSEFOR0VTX09USEVSLCBlZmZlY3RzOiBzaWRlRWZmZWN0cykpOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkpzR2V0U3RhdGljU3RhdGUoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMCwgbWF4UG9zaXRpb25hbDogMCkpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBwdXNoKG5ldyBIRm9yZWlnbkNvZGUoanMuanMucGFyc2VGb3JlaWduSlMoX25hbWVyLnN0YXRpY1N0YXRlSG9sZGVyKSwKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgPEhJbnN0cnVjdGlvbj5bXSwKICAgICAgICBuYXRpdmVCZWhhdmlvcjogTmF0aXZlQmVoYXZpb3IuREVQRU5EU19PVEhFUikpOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkpzR2V0TmFtZShpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAxLCBtYXhQb3NpdGlvbmFsOiAxKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlyLk5vZGUgYXJndW1lbnQgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0OwogICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gcG9wKCk7CgogICAgaWYgKGluc3RydWN0aW9uIGlzIEhDb25zdGFudCkgewogICAgICBqcy5OYW1lIG5hbWUgPSBfZ2V0TmFtZUZvckpzR2V0TmFtZShpbnN0cnVjdGlvbi5jb25zdGFudCwgX25hbWVyKTsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50U3RyaW5nRnJvbU5hbWUobmFtZSwgY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgYXJndW1lbnQpLAogICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgeyd0ZXh0JzogJ0Vycm9yOiBFeHBlY3RlZCBhIEpzR2V0TmFtZSBlbnVtIHZhbHVlLid9KTsKICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICB9CgogIGludCBfZXh0cmFjdEVudW1JbmRleEZyb21Db25zdGFudFZhbHVlKAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQpIHsKICAgIGlmIChjb25zdGFudCBpcyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUpIHsKICAgICAgaWYgKGNvbnN0YW50LnR5cGUuZWxlbWVudCA9PSBjbGFzc0VsZW1lbnQpIHsKICAgICAgICBhc3NlcnQoY29uc3RhbnQuZmllbGRzLmxlbmd0aCA9PSAxIHx8IGNvbnN0YW50LmZpZWxkcy5sZW5ndGggPT0gMik7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSBpbmRleENvbnN0YW50ID0gY29uc3RhbnQuZmllbGRzLnZhbHVlcy5maXJzdDsKICAgICAgICBpZiAoaW5kZXhDb25zdGFudCBpcyBJbnRDb25zdGFudFZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gaW5kZXhDb25zdGFudC5pbnRWYWx1ZS50b0ludCgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW2pzLk5hbWVdIGZvciB0aGUgYEpzR2V0TmFtZWAgW2NvbnN0YW50XSB2YWx1ZS4KICBqcy5OYW1lIF9nZXROYW1lRm9ySnNHZXROYW1lKENvbnN0YW50VmFsdWUgY29uc3RhbnQsIE1vZHVsYXJOYW1lciBuYW1lcikgewogICAgaW50IGluZGV4ID0gX2V4dHJhY3RFbnVtSW5kZXhGcm9tQ29uc3RhbnRWYWx1ZSgKICAgICAgICBjb25zdGFudCwgX2NvbW1vbkVsZW1lbnRzLmpzR2V0TmFtZUVudW0pOwogICAgaWYgKGluZGV4ID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5hbWVyLmdldE5hbWVGb3JKc0dldE5hbWUoCiAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgSnNHZXROYW1lLnZhbHVlc1tpbmRleF0pOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkpzRW1iZWRkZWRHbG9iYWwoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMiwgbWF4UG9zaXRpb25hbDogMikpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIFN0cmluZyBnbG9iYWxOYW1lID0gX2ZvcmVpZ25Db25zdGFudFN0cmluZ0FyZ3VtZW50KAogICAgICAgIGludm9jYXRpb24sIDEsICdKU19FTUJFRERFRF9HTE9CQUwnLCAnc2Vjb25kICcpOwogICAganMuVGVtcGxhdGUgZXhwciA9IGpzLmpzLmV4cHJlc3Npb25UZW1wbGF0ZVlpZWxkaW5nKAogICAgICAgIF9lbWl0dGVyLmdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoZ2xvYmFsTmFtZSkpOwoKICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0KICAgICAgICBfZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckpzRW1iZWRkZWRHbG9iYWxDYWxsKGludm9jYXRpb24pOwogICAgYXNzZXJ0KAogICAgICAgIG5hdGl2ZUJlaGF2aW9yICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgICAiTm8gTmF0aXZlQmVoYXZpb3IgZm9yICRpbnZvY2F0aW9uIikpOwoKICAgIEFic3RyYWN0VmFsdWUgc3NhVHlwZSA9CiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAudHlwZUZyb21OYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvciwgY2xvc2VkV29ybGQpOwogICAgcHVzaChuZXcgSEZvcmVpZ25Db2RlKGV4cHIsIHNzYVR5cGUsIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgbmF0aXZlQmVoYXZpb3I6IG5hdGl2ZUJlaGF2aW9yKSk7CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduSnNCdWlsdGluKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLCBtaW5Qb3NpdGlvbmFsOiAyKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIExpc3Q8aXIuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbDsKICAgIGlyLkV4cHJlc3Npb24gbmFtZUFyZ3VtZW50ID0gYXJndW1lbnRzWzFdOwoKICAgIG5hbWVBcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBwb3AoKTsKCiAgICBqcy5UZW1wbGF0ZSB0ZW1wbGF0ZTsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ29uc3RhbnQpIHsKICAgICAgdGVtcGxhdGUgPSBfZ2V0SnNCdWlsdGluVGVtcGxhdGUoaW5zdHJ1Y3Rpb24uY29uc3RhbnQsIF9lbWl0dGVyKTsKICAgIH0KICAgIGlmICh0ZW1wbGF0ZSA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBuYW1lQXJndW1lbnQpLAogICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICAgIHsndGV4dCc6ICdFcnJvcjogRXhwZWN0ZWQgYSBKc0J1aWx0aW4gZW51bSB2YWx1ZS4nfSk7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gYXJndW1lbnQgaW4gYXJndW1lbnRzLnNraXAoMikpIHsKICAgICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICBpbnB1dHMuYWRkKHBvcCgpKTsKICAgIH0KCiAgICBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0J1aWx0aW5DYWxsKGludm9jYXRpb24pOwogICAgYXNzZXJ0KAogICAgICAgIG5hdGl2ZUJlaGF2aW9yICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgICAiTm8gTmF0aXZlQmVoYXZpb3IgZm9yICRpbnZvY2F0aW9uIikpOwoKICAgIEFic3RyYWN0VmFsdWUgc3NhVHlwZSA9CiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAudHlwZUZyb21OYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvciwgY2xvc2VkV29ybGQpOwogICAgcHVzaChuZXcgSEZvcmVpZ25Db2RlKHRlbXBsYXRlLCBzc2FUeXBlLCBpbnB1dHMsCiAgICAgICAgbmF0aXZlQmVoYXZpb3I6IG5hdGl2ZUJlaGF2aW9yKSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW2pzLlRlbXBsYXRlXSBmb3IgdGhlIGBKc0J1aWx0aW5gIFtjb25zdGFudF0gdmFsdWUuCiAganMuVGVtcGxhdGUgX2dldEpzQnVpbHRpblRlbXBsYXRlKAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBpbnQgaW5kZXggPSBfZXh0cmFjdEVudW1JbmRleEZyb21Db25zdGFudFZhbHVlKAogICAgICAgIGNvbnN0YW50LCBfY29tbW9uRWxlbWVudHMuanNCdWlsdGluRW51bSk7CiAgICBpZiAoaW5kZXggPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX3RlbXBsYXRlRm9yQnVpbHRpbihKc0J1aWx0aW4udmFsdWVzW2luZGV4XSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgSlMgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBbYnVpbHRpbl0uCiAganMuVGVtcGxhdGUgX3RlbXBsYXRlRm9yQnVpbHRpbihKc0J1aWx0aW4gYnVpbHRpbikgewogICAgc3dpdGNoIChidWlsdGluKSB7CiAgICAgIGNhc2UgSnNCdWlsdGluLmRhcnRPYmplY3RDb25zdHJ1Y3RvcjoKICAgICAgICBDbGFzc0VudGl0eSBvYmplY3RDbGFzcyA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzOwogICAgICAgIHJldHVybiBqcy5qcwogICAgICAgICAgICAuZXhwcmVzc2lvblRlbXBsYXRlWWllbGRpbmcoX2VtaXR0ZXIudHlwZUFjY2VzcyhvYmplY3RDbGFzcykpOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uZGFydENsb3N1cmVDb25zdHJ1Y3RvcjoKICAgICAgICBDbGFzc0VudGl0eSBjbG9zdXJlQ2xhc3MgPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5jbG9zdXJlQ2xhc3M7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBTaG91bGQgYWRkIGEgZGVwZW5kZW5jeSBvbiB0aGUgY29uc3RydWN0b3IgdXNlZCBhcyBhCiAgICAgICAgLy8gdG9rZW4uCiAgICAgICAgcmVnaXN0cnkKICAgICAgICAgICAgLy8gaWdub3JlOmRlcHJlY2F0ZWRfbWVtYmVyX3VzZV9mcm9tX3NhbWVfcGFja2FnZQogICAgICAgICAgICAucmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhjbG9zdXJlQ2xhc3MpOwogICAgICAgIHJldHVybiBqcy5qcwogICAgICAgICAgICAuZXhwcmVzc2lvblRlbXBsYXRlWWllbGRpbmcoX2VtaXR0ZXIudHlwZUFjY2VzcyhjbG9zdXJlQ2xhc3MpKTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmlzQ2hlY2tQcm9wZXJ0eVRvSnNDb25zdHJ1Y3Rvck5hbWU6CiAgICAgICAgaW50IGlzUHJlZml4TGVuZ3RoID0gX25hbWVyLmZpeGVkTmFtZXMub3BlcmF0b3JJc1ByZWZpeC5sZW5ndGg7CiAgICAgICAgcmV0dXJuIGpzLmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcignIy5zdWJzdHJpbmcoJGlzUHJlZml4TGVuZ3RoKScpOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uaXNGdW5jdGlvblR5cGU6CiAgICAgICAgcmV0dXJuIF9ydGlFbmNvZGVyLnRlbXBsYXRlRm9ySXNGdW5jdGlvblR5cGU7CgogICAgICBjYXNlIEpzQnVpbHRpbi5pc0Z1dHVyZU9yVHlwZToKICAgICAgICByZXR1cm4gX3J0aUVuY29kZXIudGVtcGxhdGVGb3JJc0Z1dHVyZU9yVHlwZTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmlzVm9pZFR5cGU6CiAgICAgICAgcmV0dXJuIF9ydGlFbmNvZGVyLnRlbXBsYXRlRm9ySXNWb2lkVHlwZTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmlzRHluYW1pY1R5cGU6CiAgICAgICAgcmV0dXJuIF9ydGlFbmNvZGVyLnRlbXBsYXRlRm9ySXNEeW5hbWljVHlwZTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmlzSnNJbnRlcm9wVHlwZUFyZ3VtZW50OgogICAgICAgIHJldHVybiBfcnRpRW5jb2Rlci50ZW1wbGF0ZUZvcklzSnNJbnRlcm9wVHlwZUFyZ3VtZW50OwoKICAgICAgY2FzZSBKc0J1aWx0aW4ucmF3UnRpVG9Kc0NvbnN0cnVjdG9yTmFtZToKICAgICAgICByZXR1cm4ganMuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIjLm5hbWUiKTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLnJhd1J1bnRpbWVUeXBlOgogICAgICAgIHJldHVybiBqcy5qcy5leHByZXNzaW9uVGVtcGxhdGVGb3IoIiMuY29uc3RydWN0b3IiKTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmlzU3VidHlwZToKICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogbW92ZSB0aGlzIGNsb3NlciB0byB3aGVyZSBpcy1jaGVjayBwcm9wZXJ0aWVzIGFyZQogICAgICAgIC8vIGJ1aWx0LgogICAgICAgIFN0cmluZyBpc1ByZWZpeCA9IF9uYW1lci5maXhlZE5hbWVzLm9wZXJhdG9ySXNQcmVmaXg7CiAgICAgICAgcmV0dXJuIGpzLmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiKCckaXNQcmVmaXgnICsgIykgaW4gIy5wcm90b3R5cGUiKTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmlzR2l2ZW5UeXBlUnRpOgogICAgICAgIHJldHVybiBqcy5qcy5leHByZXNzaW9uVGVtcGxhdGVGb3IoJyMubmFtZSA9PT0gIycpOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uZ2V0TWV0YWRhdGE6CiAgICAgICAgU3RyaW5nIG1ldGFkYXRhQWNjZXNzID0KICAgICAgICAgICAgX2VtaXR0ZXIuZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2Vzc1N0cmluZyhNRVRBREFUQSk7CiAgICAgICAgcmV0dXJuIGpzLmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiJG1ldGFkYXRhQWNjZXNzWyNdIik7CgogICAgICBjYXNlIEpzQnVpbHRpbi5nZXRUeXBlOgogICAgICAgIFN0cmluZyB0eXBlc0FjY2VzcyA9IF9lbWl0dGVyLmdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3NTdHJpbmcoVFlQRVMpOwogICAgICAgIHJldHVybiBqcy5qcy5leHByZXNzaW9uVGVtcGxhdGVGb3IoIiR0eXBlc0FjY2Vzc1sjXSIpOwoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICJVbmhhbmRsZWQgQnVpbHRpbjogJGJ1aWx0aW4iKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25Kc0dldEZsYWcoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMSwgbWF4UG9zaXRpb25hbDogMSkpIHsKICAgICAgc3RhY2suYWRkKAogICAgICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRCb29sKGZhbHNlLCBjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9IF9mb3JlaWduQ29uc3RhbnRTdHJpbmdBcmd1bWVudChpbnZvY2F0aW9uLCAwLCAnSlNfR0VUX0ZMQUcnKTsKICAgIGJvb2wgdmFsdWUgPSBfZ2V0RmxhZ1ZhbHVlKG5hbWUpOwogICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICAgIHsndGV4dCc6ICdFcnJvcjogVW5rbm93biBpbnRlcm5hbCBmbGFnICIkbmFtZSIuJ30pOwogICAgfSBlbHNlIHsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50Qm9vbCh2YWx1ZSwgY2xvc2VkV29ybGQpKTsKICAgIH0KICB9CgogIHZvaWQgX2hhbmRsZUpzSW50ZXJjZXB0b3JDb25zdGFudChpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIC8vIFNpbmdsZSBhcmd1bWVudCBtdXN0IGJlIGEgVHlwZUNvbnN0YW50IHdoaWNoIGlzIGNvbnZlcnRlZCBpbnRvIGEKICAgIC8vIEludGVyY2VwdG9yQ29uc3RhbnQuCiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMSwgbWF4UG9zaXRpb25hbDogMSkpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlyLkV4cHJlc3Npb24gYXJndW1lbnQgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLnNpbmdsZTsKICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudEluc3RydWN0aW9uID0gcG9wKCk7CiAgICBpZiAoYXJndW1lbnRJbnN0cnVjdGlvbiBpcyBIQ29uc3RhbnQpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBhcmd1bWVudENvbnN0YW50ID0gYXJndW1lbnRJbnN0cnVjdGlvbi5jb25zdGFudDsKICAgICAgaWYgKGFyZ3VtZW50Q29uc3RhbnQgaXMgVHlwZUNvbnN0YW50VmFsdWUgJiYKICAgICAgICAgIGFyZ3VtZW50Q29uc3RhbnQucmVwcmVzZW50ZWRUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBhcmd1bWVudENvbnN0YW50LnJlcHJlc2VudGVkVHlwZTsKICAgICAgICAvLyBUT0RPKHNyYSk6IENoZWNrIHRoYXQgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIFtJbnRlcmNlcHRvcl0uCiAgICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IG5ldyBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUodHlwZS5lbGVtZW50KTsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBncmFwaC5hZGRDb25zdGFudChjb25zdGFudCwgY2xvc2VkV29ybGQpOwogICAgICAgIHN0YWNrLmFkZChpbnN0cnVjdGlvbik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQpOwogICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkdldEludGVyY2VwdG9yKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgLy8gU2luZ2xlIGFyZ3VtZW50IGlzIHRoZSBpbnRlcmNlcHRlZCBvYmplY3QuCiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMSwgbWF4UG9zaXRpb25hbDogMSkpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlyLkV4cHJlc3Npb24gYXJndW1lbnQgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLnNpbmdsZTsKICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudEluc3RydWN0aW9uID0gcG9wKCk7CgogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYWxsKGludm9jYXRpb24sIGludm9jYXRpb24pOwogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0KICAgICAgICBfaW50ZXJjZXB0b3JGb3IoYXJndW1lbnRJbnN0cnVjdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAgc3RhY2suYWRkKGluc3RydWN0aW9uKTsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25HZXRKU0FycmF5SW50ZXJvcFJ0aShpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICAgICAgbWluUG9zaXRpb25hbDogMCwgbWF4UG9zaXRpb25hbDogMCkgfHwKICAgICAgICAhb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBUT0RPKHNyYSk6IEludHJvZHVjZSAnYW55JyB0eXBlLgogICAgSW50ZXJmYWNlVHlwZSBpbnRlcm9wVHlwZSA9CiAgICAgICAgSW50ZXJmYWNlVHlwZShfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzLCBbRHluYW1pY1R5cGUoKV0pOwogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYWxsKGludm9jYXRpb24sIGludm9jYXRpb24pOwogICAgSEluc3RydWN0aW9uIHJ0aSA9IEhMb2FkVHlwZShpbnRlcm9wVHlwZSwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIHB1c2gocnRpKTsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25Kcyhpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAyLCBtYXhQb3NpdGlvbmFsOiBudWxsLCB0eXBlQXJndW1lbnRDb3VudDogMSkpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0NhbGwoaW52b2NhdGlvbik7CiAgICBhc3NlcnQoCiAgICAgICAgbmF0aXZlQmVoYXZpb3IgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICAgICJObyBOYXRpdmVCZWhhdmlvciBmb3IgJGludm9jYXRpb24iKSk7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gYXJndW1lbnQgaW4gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5za2lwKDIpKSB7CiAgICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgICAgaW5wdXRzLmFkZChwb3AoKSk7CiAgICB9CgogICAgaWYgKG5hdGl2ZUJlaGF2aW9yLmNvZGVUZW1wbGF0ZS5wb3NpdGlvbmFsQXJndW1lbnRDb3VudCAhPSBpbnB1dHMubGVuZ3RoKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsKICAgICAgICAndGV4dCc6ICdNaXNtYXRjaCBiZXR3ZWVuIG51bWJlciBvZiBwbGFjZWhvbGRlcnMnCiAgICAgICAgICAgICcgYW5kIG51bWJlciBvZiBhcmd1bWVudHMuJwogICAgICB9KTsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoSGFzQ2FwdHVyZWRQbGFjZWhvbGRlcnMuY2hlY2sobmF0aXZlQmVoYXZpb3IuY29kZVRlbXBsYXRlLmFzdCkpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfUExBQ0VIT0xERVJfQ0FQVFVSRSk7CiAgICB9CgogICAgQWJzdHJhY3RWYWx1ZSBzc2FUeXBlID0KICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC50eXBlRnJvbU5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yLCBjbG9zZWRXb3JsZCk7CgogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSBudWxsOwogICAgSEluc3RydWN0aW9uIGNvZGUgPSBuZXcgSEZvcmVpZ25Db2RlKAogICAgICAgIG5hdGl2ZUJlaGF2aW9yLmNvZGVUZW1wbGF0ZSwgc3NhVHlwZSwgaW5wdXRzLAogICAgICAgIGlzU3RhdGVtZW50OiAhbmF0aXZlQmVoYXZpb3IuY29kZVRlbXBsYXRlLmlzRXhwcmVzc2lvbiwKICAgICAgICBlZmZlY3RzOiBuYXRpdmVCZWhhdmlvci5zaWRlRWZmZWN0cywKICAgICAgICBuYXRpdmVCZWhhdmlvcjogbmF0aXZlQmVoYXZpb3IpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIHB1c2goY29kZSk7CgogICAgRGFydFR5cGUgdHlwZSA9IF9nZXREYXJ0VHlwZUlmVmFsaWQoaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXMuc2luZ2xlKTsKICAgIEFic3RyYWN0VmFsdWUgdHJ1c3RlZE1hc2sgPSBfdHlwZUJ1aWxkZXIudHJ1c3RUeXBlTWFzayh0eXBlKTsKCiAgICBpZiAodHJ1c3RlZE1hc2sgIT0gbnVsbCkgewogICAgICAvLyBXZSBvbmx5IGFsbG93IHRoZSB0eXBlIGFyZ3VtZW50IHRvIG5hcnJvdyBgZHluYW1pY2AsIHdoaWNoIHByb2JhYmx5CiAgICAgIC8vIGNvbWVzIGZyb20gYW4gdW5zcGVjaWZpZWQgcmV0dXJuIHR5cGUgaW4gdGhlIE5hdGl2ZUJlaGF2aW9yLgogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5jb250YWluc0FsbChjb2RlLmluc3RydWN0aW9uVHlwZSkKICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgdHlwZSB3aXRoIHRoZSBuYXJyb3dlciB0eXBlLgogICAgICAgIGNvZGUuaW5zdHJ1Y3Rpb25UeXBlID0gdHJ1c3RlZE1hc2s7CiAgICAgIH0gZWxzZSBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5jb250YWlucyh0cnVzdGVkTWFzaywgY29kZS5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICAvLyBJdCBpcyBhY2NlcHRhYmxlIGZvciB0aGUgdHlwZSBwYXJhbWV0ZXIgdG8gYmUgYnJvYWRlciB0aGFuIHRoZQogICAgICAgIC8vIHNwZWNpZmllZCB0eXBlLgogICAgICB9IGVsc2UgewogICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLCB7CiAgICAgICAgICAndGV4dCc6ICdUeXBlIGFyZ3VtZW50IHRvbyBuYXJyb3cgZm9yIHNwZWNpZmllZCBiZWhhdmlvciB0eXBlICcKICAgICAgICAgICAgICAnKCR7dHJ1c3RlZE1hc2t9IGRvZXMgbm90IGFsbG93ICcKICAgICAgICAgICAgICAnYWxsIHZhbHVlcyBpbiAke2NvZGUuaW5zdHJ1Y3Rpb25UeXBlfSknCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX2hhbmRsZUpzU3RyaW5nQ29uY2F0KGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDIsIG1heFBvc2l0aW9uYWw6IDIpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gX3Zpc2l0UG9zaXRpb25hbEFyZ3VtZW50cyhpbnZvY2F0aW9uLmFyZ3VtZW50cyk7CiAgICBwdXNoKG5ldyBIU3RyaW5nQ29uY2F0KAogICAgICAgIGlucHV0c1swXSwgaW5wdXRzWzFdLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKSk7CiAgfQoKICB2b2lkIF9wdXNoU3RhdGljSW52b2NhdGlvbihNZW1iZXJFbnRpdHkgdGFyZ2V0LCBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGVNYXNrLCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sIEludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlfSkgewogICAgLy8gVE9ETyhyZWRlbXB0aW9uKTogUGFzcyBjdXJyZW50IG5vZGUgaWYgbmVlZGVkLgogICAgaWYgKF90cnlJbmxpbmVNZXRob2QoCiAgICAgICAgdGFyZ2V0LCBudWxsLCBudWxsLCBhcmd1bWVudHMsIHR5cGVBcmd1bWVudHMsIG51bGwsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIGluc3RhbmNlVHlwZTogaW5zdGFuY2VUeXBlKSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIGluc3RydWN0aW9uOwogICAgaWYgKGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNKc0ludGVyb3BNZW1iZXIodGFyZ2V0KSkgewogICAgICBpbnN0cnVjdGlvbiA9IF9pbnZva2VKc0ludGVyb3BGdW5jdGlvbih0YXJnZXQsIGFyZ3VtZW50cyk7CiAgICB9IGVsc2UgewogICAgICBpbnN0cnVjdGlvbiA9IG5ldyBISW52b2tlU3RhdGljKAogICAgICAgICAgdGFyZ2V0LCBhcmd1bWVudHMsIHR5cGVNYXNrLCB0eXBlQXJndW1lbnRzLAogICAgICAgICAgdGFyZ2V0Q2FuVGhyb3c6ICFfaW5mZXJyZWREYXRhLmdldENhbm5vdFRocm93KHRhcmdldCkpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwoKICAgICAgaWYgKF9jdXJyZW50SW1wbGljaXRJbnN0YW50aWF0aW9ucy5pc05vdEVtcHR5KSB7CiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5zdGFudGlhdGVkVHlwZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxJbnRlcmZhY2VUeXBlPi5mcm9tKF9jdXJyZW50SW1wbGljaXRJbnN0YW50aWF0aW9ucyk7CiAgICAgIH0KICAgICAgaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMgPSBfaW5mZXJyZWREYXRhLmdldFNpZGVFZmZlY3RzT2ZFbGVtZW50KHRhcmdldCk7CiAgICB9CiAgICBwdXNoKGluc3RydWN0aW9uKTsKICB9CgogIHZvaWQgX3B1c2hEeW5hbWljSW52b2NhdGlvbigKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBTdGF0aWNUeXBlIHN0YXRpY1JlY2VpdmVyVHlwZSwKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgQWJzdHJhY3RWYWx1ZSB0eXBlQm91bmQgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5jcmVhdGVGcm9tU3RhdGljVHlwZShzdGF0aWNSZWNlaXZlclR5cGUudHlwZSwKICAgICAgICAgICAgY2xhc3NSZWxhdGlvbjogc3RhdGljUmVjZWl2ZXJUeXBlLnJlbGF0aW9uLCBudWxsYWJsZTogdHJ1ZSkKICAgICAgICAuYWJzdHJhY3RWYWx1ZTsKICAgIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyVHlwZSA9PSBudWxsCiAgICAgICAgPyB0eXBlQm91bmQKICAgICAgICA6IF9hYnN0cmFjdFZhbHVlRG9tYWluLmludGVyc2VjdGlvbihyZWNlaXZlclR5cGUsIHR5cGVCb3VuZCk7CgogICAgLy8gV2UgcHJlZmVyIHRvIG5vdCBpbmxpbmUgY2VydGFpbiBvcGVyYXRpb25zIG9uIGluZGV4YWJsZXMsCiAgICAvLyBiZWNhdXNlIHRoZSBjb25zdGFudCBmb2xkZXIgd2lsbCBoYW5kbGUgdGhlbSBiZXR0ZXIgYW5kIHR1cm4KICAgIC8vIHRoZW0gaW50byBzaW1wbGVyIGluc3RydWN0aW9ucyB0aGF0IGFsbG93IGZ1cnRoZXIKICAgIC8vIG9wdGltaXphdGlvbnMuCiAgICBib29sIGlzT3B0aW1pemFibGVPcGVyYXRpb25PbkluZGV4YWJsZSgKICAgICAgICBTZWxlY3RvciBzZWxlY3RvciwgTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgICAgYm9vbCBpc0xlbmd0aCA9IHNlbGVjdG9yLmlzR2V0dGVyICYmIHNlbGVjdG9yLm5hbWUgPT0gImxlbmd0aCI7CiAgICAgIGlmIChpc0xlbmd0aCB8fCBzZWxlY3Rvci5pc0luZGV4KSB7CiAgICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKAogICAgICAgICAgICBlbGVtZW50LmVuY2xvc2luZ0NsYXNzLCBfY29tbW9uRWxlbWVudHMuanNJbmRleGFibGVDbGFzcyk7CiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNJbmRleFNldCkgewogICAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YnR5cGVPZigKICAgICAgICAgICAgZWxlbWVudC5lbmNsb3NpbmdDbGFzcywgX2NvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUluZGV4YWJsZUNsYXNzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGlzT3B0aW1pemFibGVPcGVyYXRpb24oU2VsZWN0b3Igc2VsZWN0b3IsIE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGlmIChpc09wdGltaXphYmxlT3BlcmF0aW9uT25JbmRleGFibGUoc2VsZWN0b3IsIGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKCFfaW50ZXJjZXB0b3JEYXRhLmludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChzZWxlY3Rvci5pc09wZXJhdG9yKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHNlbGVjdG9yLmlzU2V0dGVyKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHNlbGVjdG9yLmlzSW5kZXgpIHJldHVybiB0cnVlOwogICAgICBpZiAoc2VsZWN0b3IuaXNJbmRleFNldCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0FycmF5QWRkIHx8CiAgICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0FycmF5UmVtb3ZlTGFzdCB8fAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmlzSnNTdHJpbmdTcGxpdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9CiAgICAgICAgY2xvc2VkV29ybGQubG9jYXRlU2luZ2xlTWVtYmVyKHNlbGVjdG9yLCByZWNlaXZlclR5cGUpOwogICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJgogICAgICAgICFlbGVtZW50LmlzRmllbGQgJiYKICAgICAgICAhKGVsZW1lbnQuaXNHZXR0ZXIgJiYgc2VsZWN0b3IuaXNDYWxsKSAmJgogICAgICAgICEoZWxlbWVudC5pc0Z1bmN0aW9uICYmIHNlbGVjdG9yLmlzR2V0dGVyKSAmJgogICAgICAgICFpc09wdGltaXphYmxlT3BlcmF0aW9uKHNlbGVjdG9yLCBlbGVtZW50KSkgewogICAgICBpZiAoX3RyeUlubGluZU1ldGhvZChlbGVtZW50LCBzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudHMsCiAgICAgICAgICB0eXBlQXJndW1lbnRzLCBub2RlLCBzb3VyY2VJbmZvcm1hdGlvbikpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBhcmd1bWVudHMuZmlyc3Q7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKCiAgICBzZWxlY3RvciA/Pz0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSk7CgogICAgYm9vbCBpc0ludGVyY2VwdGVkID0KICAgICAgICBjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZFNlbGVjdG9yKHNlbGVjdG9yKTsKCiAgICBpZiAoaXNJbnRlcmNlcHRlZCkgewogICAgICBISW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IgPSBfaW50ZXJjZXB0b3JGb3IocmVjZWl2ZXIsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgaW5wdXRzLmFkZChpbnRlcmNlcHRvcik7CiAgICB9CiAgICBpbnB1dHMuYWRkQWxsKGFyZ3VtZW50cyk7CgogICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlID0KICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5yZXN1bHRUeXBlT2ZTZWxlY3RvcihzZWxlY3RvciwgcmVjZWl2ZXJUeXBlKTsKICAgIGlmIChzZWxlY3Rvci5pc0dldHRlcikgewogICAgICBwdXNoKG5ldyBISW52b2tlRHluYW1pY0dldHRlcihzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBlbGVtZW50LCBpbnB1dHMsCiAgICAgICAgICBpc0ludGVyY2VwdGVkLCByZXN1bHRUeXBlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICBwdXNoKG5ldyBISW52b2tlRHluYW1pY1NldHRlcihzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBlbGVtZW50LCBpbnB1dHMsCiAgICAgICAgICBpc0ludGVyY2VwdGVkLCByZXN1bHRUeXBlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgIGFzc2VydCghaXNJbnRlcmNlcHRlZCk7CiAgICAgIHB1c2gobmV3IEhJbnZva2VDbG9zdXJlKAogICAgICAgICAgc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgaW5wdXRzLCByZXN1bHRUeXBlLCB0eXBlQXJndW1lbnRzKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBISW52b2tlRHluYW1pY01ldGhvZChzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBpbnB1dHMsIHJlc3VsdFR5cGUsCiAgICAgICAgICB0eXBlQXJndW1lbnRzLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgIGlzSW50ZXJjZXB0ZWQ6IGlzSW50ZXJjZXB0ZWQpKTsKICAgIH0KICB9CgogIEhGb3JlaWduQ29kZSBfaW52b2tlSnNJbnRlcm9wRnVuY3Rpb24oCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMpIHsKICAgIGFzc2VydChjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKGVsZW1lbnQpKTsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTmF0aXZlTWV0aG9kKGVsZW1lbnQpOwoKICAgIGlmIChlbGVtZW50IGlzIENvbnN0cnVjdG9yRW50aXR5ICYmCiAgICAgICAgZWxlbWVudC5pc0ZhY3RvcnlDb25zdHJ1Y3RvciAmJgogICAgICAgIF9uYXRpdmVEYXRhLmlzQW5vbnltb3VzSnNJbnRlcm9wQ2xhc3MoZWxlbWVudC5lbmNsb3NpbmdDbGFzcykpIHsKICAgICAgLy8gRmFjdG9yeSBjb25zdHJ1Y3RvciB0aGF0IGlzIHN5bnRhY3RpYyBzdWdhciBmb3IgY3JlYXRpbmcgYSBKYXZhU2NyaXB0CiAgICAgIC8vIG9iamVjdCBsaXRlcmFsLgogICAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IGVsZW1lbnQ7CiAgICAgIGludCBpID0gMDsKICAgICAgaW50IHBvc2l0aW9ucyA9IDA7CiAgICAgIHZhciBmaWx0ZXJlZEFyZ3VtZW50cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICAgIHZhciBwYXJhbWV0ZXJOYW1lTWFwID0gbmV3IE1hcDxTdHJpbmcsIGpzLkV4cHJlc3Npb24+KCk7CgogICAgICAvLyBOb3RlOiB3ZSBkb24ndCB1c2UgYGNvbnN0cnVjdG9yLnBhcmFtZXRlclN0cnVjdHVyZWAgaGVyZSBiZWNhdXNlCiAgICAgIC8vIHdlIGRvbid0IGVsaWRlIHBhcmFtZXRlcnMgdG8ganMtaW50ZXJvcCBleHRlcm5hbCBzdGF0aWMgdGFyZ2V0cwogICAgICAvLyAoaW5jbHVkaW5nIGZhY3RvcnkgY29uc3RydWN0b3JzLikKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogY2FuIHdlIGVsaWRlIHRob3NlIHBhcmFtZXRlcnM/IFRoaXMgc2hvdWxkIGJlCiAgICAgIC8vIGNvbnNpc3RlbnQgd2l0aCB3aGF0IHdlIGRvIHdpdGggaW5zdGFuY2UgbWV0aG9kcy4KICAgICAgaXIuUHJvY2VkdXJlIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKGNvbnN0cnVjdG9yKS5ub2RlOwogICAgICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgICBub2RlLmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy50b0xpc3QoKTsKICAgICAgbmFtZWRQYXJhbWV0ZXJzLnNvcnQobmF0aXZlT3JkZXJpbmcpOwogICAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgaW4gbmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgU3RyaW5nIHBhcmFtZXRlck5hbWUgPSB2YXJpYWJsZS5uYW1lOwogICAgICAgIC8vIFRPRE8oamFjb2JyKTogY29uc2lkZXIgdGhyb3dpbmcgaWYgcGFyYW1ldGVyIG5hbWVzIGRvIG5vdCBtYXRjaAogICAgICAgIC8vIG5hbWVzIG9mIHByb3BlcnRpZXMgaW4gdGhlIGNsYXNzLgogICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IGFyZ3VtZW50c1tpXTsKICAgICAgICBpZiAoYXJndW1lbnQgIT0gbnVsbCkgewogICAgICAgICAgZmlsdGVyZWRBcmd1bWVudHMuYWRkKGFyZ3VtZW50KTsKICAgICAgICAgIHZhciBqc05hbWUgPSBfbmF0aXZlRGF0YS5jb21wdXRlVW5lc2NhcGVkSlNJbnRlcm9wTmFtZShwYXJhbWV0ZXJOYW1lKTsKICAgICAgICAgIHBhcmFtZXRlck5hbWVNYXBbanNOYW1lXSA9IG5ldyBqcy5JbnRlcnBvbGF0ZWRFeHByZXNzaW9uKHBvc2l0aW9ucysrKTsKICAgICAgICB9CiAgICAgICAgaSsrOwogICAgICB9CiAgICAgIHZhciBjb2RlVGVtcGxhdGUgPQogICAgICAgICAgbmV3IGpzLlRlbXBsYXRlKG51bGwsIGpzLm9iamVjdExpdGVyYWwocGFyYW1ldGVyTmFtZU1hcCkpOwoKICAgICAgdmFyIG5hdGl2ZUJlaGF2aW9yID0gbmV3IE5hdGl2ZUJlaGF2aW9yKCkuLmNvZGVUZW1wbGF0ZSA9IGNvZGVUZW1wbGF0ZTsKICAgICAgaWYgKG9wdGlvbnMudHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMpIHsKICAgICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0KICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcyk7CiAgICAgICAgbmF0aXZlQmVoYXZpb3IudHlwZXNSZXR1cm5lZC5hZGQodGhpc1R5cGUpOwogICAgICB9CiAgICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBTb3VyY2UgaW5mb3JtYXRpb24uCiAgICAgIHJldHVybiBuZXcgSEZvcmVpZ25Db2RlKAogICAgICAgICAgY29kZVRlbXBsYXRlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgZmlsdGVyZWRBcmd1bWVudHMsCiAgICAgICAgICBuYXRpdmVCZWhhdmlvcjogbmF0aXZlQmVoYXZpb3IpOwogICAgfQoKICAgIHZhciB0YXJnZXQgPSBuZXcgSEZvcmVpZ25Db2RlKAogICAgICAgIGpzLmpzCiAgICAgICAgICAgIC5wYXJzZUZvcmVpZ25KUygiJHtfbmF0aXZlRGF0YS5nZXRGaXhlZEJhY2tlbmRNZXRob2RQYXRoKGVsZW1lbnQpfS4iCiAgICAgICAgICAgICAgICAiJHtfbmF0aXZlRGF0YS5nZXRGaXhlZEJhY2tlbmROYW1lKGVsZW1lbnQpfSIpLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgIDxISW5zdHJ1Y3Rpb24+W10pOwogICAgYWRkKHRhcmdldCk7CiAgICAvLyBTdHJpcCBvZmYgdHJhaWxpbmcgYXJndW1lbnRzIHRoYXQgd2VyZSBub3Qgc3BlY2lmaWVkLgogICAgLy8gd2UgY291bGQgYXNzZXJ0IHRoYXQgdGhlIHRyYWlsaW5nIGFyZ3VtZW50cyBhcmUgYWxsIG51bGwuCiAgICAvLyBUT0RPKGphY29icik6IHJld3JpdGUgbmFtZWQgYXJndW1lbnRzIHRvIGFuIG9iamVjdCBsaXRlcmFsIG1hdGNoaW5nCiAgICAvLyB0aGUgZmFjdG9yeSBjb25zdHJ1Y3RvciBjYXNlLgogICAgYXJndW1lbnRzID0gYXJndW1lbnRzLndoZXJlKChhcmcpID0+IGFyZyAhPSBudWxsKS50b0xpc3QoKTsKICAgIHZhciBpbnB1dHMgPSA8SEluc3RydWN0aW9uPlt0YXJnZXRdLi5hZGRBbGwoYXJndW1lbnRzKTsKCiAgICB2YXIgbmF0aXZlQmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKS4uc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKCiAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudCBpcyBDb25zdHJ1Y3RvckVudGl0eQogICAgICAgID8gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShlbGVtZW50LmVuY2xvc2luZ0NsYXNzKQogICAgICAgIDogX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZWxlbWVudCkucmV0dXJuVHlwZTsKICAgIC8vIE5hdGl2ZSBiZWhhdmlvciBlZmZlY3RzIGhlcmUgYXJlIHNpbWlsYXIgdG8gbmF0aXZlL2JlaGF2aW9yLmRhcnQuCiAgICAvLyBUaGUgcmV0dXJuIHR5cGUgaXMgZHluYW1pYyBpZiB3ZSBkb24ndCB0cnVzdCBqcy1pbnRlcm9wIHR5cGUKICAgIC8vIGRlY2xhcmF0aW9ucy4KICAgIG5hdGl2ZUJlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkKAogICAgICAgIG9wdGlvbnMudHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgPyB0eXBlIDogY29uc3QgRHluYW1pY1R5cGUoKSk7CgogICAgLy8gVGhlIGFsbG9jYXRpb24gZWZmZWN0cyBpbmNsdWRlIHRoZSBkZWNsYXJlZCB0eXBlIGlmIGl0IGlzIG5hdGl2ZSAod2hpY2gKICAgIC8vIGluY2x1ZGVzIGpzIGludGVyb3AgdHlwZXMpLgogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKHR5cGUuZWxlbWVudCkpIHsKICAgICAgbmF0aXZlQmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQuYWRkKHR5cGUpOwogICAgfQoKICAgIC8vIEl0IGFsc28gaW5jbHVkZXMgYW55IG90aGVyIEpTIGludGVyb3AgdHlwZSBpZiB3ZSBkb24ndCB0cnVzdCB0aGUKICAgIC8vIGFubm90YXRpb24gb3IgaWYgaXMgZGVjbGFyZWQgdG9vIGJyb2FkLgogICAgaWYgKCFvcHRpb25zLnRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zIHx8CiAgICAgICAgdHlwZSA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSB8fAogICAgICAgIHR5cGUgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgbmF0aXZlQmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQuYWRkKF9lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgIC5nZXRUaGlzVHlwZShfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MpKTsKICAgIH0KCiAgICBTdHJpbmcgdGVtcGxhdGU7CiAgICBpZiAoZWxlbWVudC5pc0dldHRlcikgewogICAgICB0ZW1wbGF0ZSA9ICcjJzsKICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc1NldHRlcikgewogICAgICB0ZW1wbGF0ZSA9ICcjID0gIyc7CiAgICB9IGVsc2UgewogICAgICB2YXIgYXJncyA9IG5ldyBMaXN0LmZpbGxlZChhcmd1bWVudHMubGVuZ3RoLCAnIycpLmpvaW4oJywnKTsKICAgICAgdGVtcGxhdGUgPSBlbGVtZW50LmlzQ29uc3RydWN0b3IgPyAibmV3ICMoJGFyZ3MpIiA6ICIjKCRhcmdzKSI7CiAgICB9CiAgICBqcy5UZW1wbGF0ZSBjb2RlVGVtcGxhdGUgPSBqcy5qcy5wYXJzZUZvcmVpZ25KUyh0ZW1wbGF0ZSk7CiAgICBuYXRpdmVCZWhhdmlvci5jb2RlVGVtcGxhdGUgPSBjb2RlVGVtcGxhdGU7CgogICAgLy8gVE9ETyhlZm9ydHVuYSk6IEFkZCBzb3VyY2UgaW5mb3JtYXRpb24uCiAgICByZXR1cm4gbmV3IEhGb3JlaWduQ29kZSgKICAgICAgICBjb2RlVGVtcGxhdGUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBpbnB1dHMsCiAgICAgICAgbmF0aXZlQmVoYXZpb3I6IG5hdGl2ZUJlaGF2aW9yKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbk5vZGUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ3JlYXRlKG5vZGUpOwogICAgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBjbG9zdXJlSW5mbyA9CiAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwLmdldENsb3N1cmVJbmZvKG5vZGUucGFyZW50KTsKICAgIENsYXNzRW50aXR5IGNsb3N1cmVDbGFzc0VudGl0eSA9IGNsb3N1cmVJbmZvLmNsb3N1cmVDbGFzc0VudGl0eTsKCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gY2FwdHVyZWRWYXJpYWJsZXMgPSA8SEluc3RydWN0aW9uPltdOwogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoSW5zdGFuY2VGaWVsZChjbG9zdXJlQ2xhc3NFbnRpdHksCiAgICAgICAgKF8sIEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzRWxpZGVkKSByZXR1cm47CiAgICAgIGNhcHR1cmVkVmFyaWFibGVzCiAgICAgICAgICAuYWRkKGxvY2Fsc0hhbmRsZXIucmVhZExvY2FsKGNsb3N1cmVJbmZvLmdldExvY2FsRm9yRmllbGQoZmllbGQpKSk7CiAgICB9KTsKCiAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPQogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxFeGFjdChjbG9zdXJlQ2xhc3NFbnRpdHkpOwogICAgLy8gVE9ETyhlZm9ydHVuYSk6IEFkZCBzb3VyY2UgaW5mb3JtYXRpb24gaGVyZS4KICAgIHB1c2gobmV3IEhDcmVhdGUoCiAgICAgICAgY2xvc3VyZUNsYXNzRW50aXR5LCBjYXB0dXJlZFZhcmlhYmxlcywgdHlwZSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgY2FsbE1ldGhvZDogY2xvc3VyZUluZm8uY2FsbE1ldGhvZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogICAgYXNzZXJ0KF9pc1JlYWNoYWJsZSk7CiAgICBkZWNsYXJhdGlvbi5mdW5jdGlvbi5hY2NlcHQodGhpcyk7CiAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShkZWNsYXJhdGlvbi52YXJpYWJsZSk7CiAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKGxvY2FsLCBwb3AoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKGlyLkZ1bmN0aW9uRXhwcmVzc2lvbiBmdW5jRXhwcmVzc2lvbikgewogICAgZnVuY0V4cHJlc3Npb24uZnVuY3Rpb24uYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbnRpYXRpb24oaXIuSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICB2YXIgYXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIG5vZGUuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICBhcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgIFN0YXRpY1R5cGUgZXhwcmVzc2lvblR5cGUgPSBfZ2V0U3RhdGljVHlwZShub2RlLmV4cHJlc3Npb24pOwogICAgYm9vbCB0eXBlQXJndW1lbnRzTmVlZGVkID0gX3J0aU5lZWQuaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgICBleHByZXNzaW9uVHlwZS50eXBlLCBub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMKICAgICAgICAubWFwKCh0eXBlKSA9PiB0eXBlQXJndW1lbnRzTmVlZGVkCiAgICAgICAgICAgID8gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSkKICAgICAgICAgICAgOiBfY29tbW9uRWxlbWVudHMuZHluYW1pY1R5cGUpCiAgICAgICAgLnRvTGlzdCgpOwogICAgcmVnaXN0cnkucmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbigKICAgICAgICBuZXcgR2VuZXJpY0luc3RhbnRpYXRpb24oZXhwcmVzc2lvblR5cGUudHlwZSwgdHlwZUFyZ3VtZW50cykpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FuIHdlIGF2b2lkIGNyZWF0aW5nIHRoZSBpbnN0YW50aWF0aW9uIG9iamVjdD8KICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9CiAgICAgICAgICBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudCh0eXBlLCBzb3VyY2VFbGVtZW50KTsKICAgICAgYXJndW1lbnRzLmFkZChpbnN0cnVjdGlvbik7CiAgICB9CiAgICBpbnQgdHlwZUFyZ3VtZW50Q291bnQgPSBub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoOwogICAgYm9vbCB0YXJnZXRDYW5UaHJvdyA9IGZhbHNlOyAvLyBUT0RPKHNyYSk6IElzIHRoaXMgdHJ1ZT8KICAgIEZ1bmN0aW9uRW50aXR5IHRhcmdldCA9CiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldEluc3RhbnRpYXRlRnVuY3Rpb24odHlwZUFyZ3VtZW50Q291bnQpOwogICAgaWYgKHRhcmdldCA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgbm9kZSksCiAgICAgICAgICAnR2VuZXJpYyBmdW5jdGlvbiBpbnN0YW50aWF0aW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgJwogICAgICAgICAgJyR7dHlwZUFyZ3VtZW50Q291bnR9IHR5cGUgYXJndW1lbnRzJyk7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbmV3IEhJbnZva2VTdGF0aWMoCiAgICAgICAgdGFyZ2V0LCBhcmd1bWVudHMsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmZ1bmN0aW9uVHlwZSwgPERhcnRUeXBlPltdLAogICAgICAgIHRhcmdldENhblRocm93OiB0YXJnZXRDYW5UaHJvdyk7CiAgICAvLyBUT0RPKHNyYSk6IC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbgogICAgaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMKICAgICAgLi5jbGVhckFsbERlcGVuZGVuY2llcygpCiAgICAgIC4uY2xlYXJBbGxTaWRlRWZmZWN0cygpOwoKICAgIHB1c2goaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1ldGhvZEludm9jYXRpb24oaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICBub2RlLnJlY2VpdmVyLmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IHBvcCgpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSA8RGFydFR5cGU+W107CiAgICBzZWxlY3RvciA9CiAgICAgICAgX2ZpbGxEeW5hbWljVHlwZUFyZ3VtZW50cyhzZWxlY3Rvciwgbm9kZS5hcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgX3B1c2hEeW5hbWljSW52b2NhdGlvbigKICAgICAgICBub2RlLAogICAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUucmVjZWl2ZXIpLAogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLnJlY2VpdmVyVHlwZU9mSW52b2NhdGlvbihub2RlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbiksCiAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLi5hZGRBbGwoX3Zpc2l0QXJndW1lbnRzRm9yRHluYW1pY1RhcmdldCgKICAgICAgICAgICAgc2VsZWN0b3IsIG5vZGUuYXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSksCiAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2FsbChub2RlLnJlY2VpdmVyLCBub2RlKSk7CiAgfQoKICBISW50ZXJjZXB0b3IgX2ludGVyY2VwdG9yRm9yKAogICAgICBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0ZWQsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBISW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IgPQogICAgICAgIG5ldyBISW50ZXJjZXB0b3IoaW50ZXJjZXB0ZWQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKQogICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgYWRkKGludGVyY2VwdG9yKTsKICAgIHJldHVybiBpbnRlcmNlcHRvcjsKICB9CgogIHN0YXRpYyBpci5DbGFzcyBfY29udGFpbmluZ0NsYXNzKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIHdoaWxlIChub2RlICE9IG51bGwpIHsKICAgICAgaWYgKG5vZGUgaXMgaXIuQ2xhc3MpIHJldHVybiBub2RlOwogICAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgX2dlbmVyYXRlU3VwZXJOb1N1Y2hNZXRob2QoCiAgICAgIGlyLkV4cHJlc3Npb24gaW52b2NhdGlvbiwKICAgICAgU3RyaW5nIHB1YmxpY05hbWUsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKGludm9jYXRpb24pOwogICAgQ2xhc3NFbnRpdHkgY29udGFpbmluZ0NsYXNzID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRDbGFzcyhfY29udGFpbmluZ0NsYXNzKGludm9jYXRpb24pKTsKICAgIEZ1bmN0aW9uRW50aXR5IG5vU3VjaE1ldGhvZCA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3VwZXJOb1N1Y2hNZXRob2QoY29udGFpbmluZ0NsYXNzKTsKCiAgICBDb25zdGFudFZhbHVlIG5hbWVDb25zdGFudCA9IGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTdHJpbmcocHVibGljTmFtZSk7CgogICAganMuTmFtZSBpbnRlcm5hbE5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoc2VsZWN0b3IpOwoKICAgIHZhciBhcmd1bWVudHNJbnN0cnVjdGlvbiA9IF9idWlsZExpdGVyYWxMaXN0KGFyZ3VtZW50cyk7CiAgICBhZGQoYXJndW1lbnRzSW5zdHJ1Y3Rpb24pOwoKICAgIHZhciBhcmd1bWVudE5hbWVzID0gbmV3IExpc3Q8SEluc3RydWN0aW9uPigpOwogICAgZm9yIChTdHJpbmcgYXJndW1lbnROYW1lIGluIHNlbGVjdG9yLm5hbWVkQXJndW1lbnRzKSB7CiAgICAgIENvbnN0YW50VmFsdWUgYXJndW1lbnROYW1lQ29uc3RhbnQgPQogICAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN0cmluZyhhcmd1bWVudE5hbWUpOwogICAgICBhcmd1bWVudE5hbWVzLmFkZChncmFwaC5hZGRDb25zdGFudChhcmd1bWVudE5hbWVDb25zdGFudCwgY2xvc2VkV29ybGQpKTsKICAgIH0KICAgIHZhciBhcmd1bWVudE5hbWVzSW5zdHJ1Y3Rpb24gPSBfYnVpbGRMaXRlcmFsTGlzdChhcmd1bWVudE5hbWVzKTsKICAgIGFkZChhcmd1bWVudE5hbWVzSW5zdHJ1Y3Rpb24pOwoKICAgIENvbnN0YW50VmFsdWUga2luZENvbnN0YW50ID0KICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50RnJvbUludChzZWxlY3Rvci5pbnZvY2F0aW9uTWlycm9yS2luZCk7CgogICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVJbnZvY2F0aW9uTWlycm9yLAogICAgICAgIFsKICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50KG5hbWVDb25zdGFudCwgY2xvc2VkV29ybGQpLAogICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmdGcm9tTmFtZShpbnRlcm5hbE5hbWUsIGNsb3NlZFdvcmxkKSwKICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50KGtpbmRDb25zdGFudCwgY2xvc2VkV29ybGQpLAogICAgICAgICAgYXJndW1lbnRzSW5zdHJ1Y3Rpb24sCiAgICAgICAgICBhcmd1bWVudE5hbWVzSW5zdHJ1Y3Rpb24sCiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudEludCh0eXBlQXJndW1lbnRzLmxlbmd0aCwgY2xvc2VkV29ybGQpLAogICAgICAgIF0sCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsCiAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwoKICAgIF9idWlsZEludm9rZVN1cGVyKFNlbGVjdG9ycy5ub1N1Y2hNZXRob2RfLCBjb250YWluaW5nQ2xhc3MsIG5vU3VjaE1ldGhvZCwKICAgICAgICA8SEluc3RydWN0aW9uPltwb3AoKV0sIHR5cGVBcmd1bWVudHMsIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEhJbnN0cnVjdGlvbiBfYnVpbGRJbnZva2VTdXBlcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIENsYXNzRW50aXR5IGNvbnRhaW5pbmdDbGFzcywKICAgICAgTWVtYmVyRW50aXR5IHRhcmdldCwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cywKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9CiAgICAgICAgbG9jYWxzSGFuZGxlci5yZWFkVGhpcyhzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgYm9vbCBpc0ludGVyY2VwdGVkID0KICAgICAgICBjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZFNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChpc0ludGVyY2VwdGVkKSB7CiAgICAgIGlucHV0cy5hZGQoX2ludGVyY2VwdG9yRm9yKHJlY2VpdmVyLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogICAgaW5wdXRzLmFkZChyZWNlaXZlcik7CiAgICBpbnB1dHMuYWRkQWxsKGFyZ3VtZW50cyk7CgogICAgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzazsKICAgIGlmICh0YXJnZXQgaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgdHlwZU1hc2sgPSBfdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YodGFyZ2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIHR5cGVNYXNrID0gX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICB9CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBuZXcgSEludm9rZVN1cGVyKAogICAgICAgIHRhcmdldCwKICAgICAgICBjb250YWluaW5nQ2xhc3MsCiAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgaW5wdXRzLAogICAgICAgIGlzSW50ZXJjZXB0ZWQsCiAgICAgICAgdHlwZU1hc2ssCiAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICBpc1NldHRlcjogc2VsZWN0b3IuaXNTZXR0ZXIgfHwgc2VsZWN0b3IuaXNJbmRleFNldCk7CiAgICBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cyA9CiAgICAgICAgX2luZmVycmVkRGF0YS5nZXRTaWRlRWZmZWN0c09mU2VsZWN0b3Ioc2VsZWN0b3IsIG51bGwpOwogICAgcHVzaChpbnN0cnVjdGlvbik7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb247CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChpci5TdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR2V0KG5vZGUpOwogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3VwZXJNZW1iZXIoX2N1cnJlbnRGcmFtZS5tZW1iZXIsIG5vZGUubmFtZSk7CiAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgX2dlbmVyYXRlU3VwZXJOb1N1Y2hNZXRob2Qobm9kZSwgX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSkubmFtZSwKICAgICAgICAgIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10sIGNvbnN0IDxEYXJ0VHlwZT5bXSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKG1lbWJlcik7CiAgICAgIGlmIChmaWVsZERhdGEuaXNFZmZlY3RpdmVseUNvbnN0YW50KSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGZpZWxkRGF0YS5jb25zdGFudFZhbHVlOwogICAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudCh2YWx1ZSwgY2xvc2VkV29ybGQsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgX2J1aWxkSW52b2tlU3VwZXIoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSksCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q2xhc3MoX2NvbnRhaW5pbmdDbGFzcyhub2RlKSksCiAgICAgICAgbWVtYmVyLAogICAgICAgIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2FsbChub2RlLCBub2RlKTsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIF9lbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKF9jdXJyZW50RnJhbWUubWVtYmVyLCBub2RlLm5hbWUpOwogICAgaWYgKG1lbWJlciA9PSBudWxsKSB7CiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSk7CiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSA8RGFydFR5cGU+W107CiAgICAgIHNlbGVjdG9yID0KICAgICAgICAgIF9maWxsRHluYW1pY1R5cGVBcmd1bWVudHMoc2VsZWN0b3IsIG5vZGUuYXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cyA9IF92aXNpdEFyZ3VtZW50c0ZvckR5bmFtaWNUYXJnZXQoCiAgICAgICAgICBzZWxlY3Rvciwgbm9kZS5hcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgICBfZ2VuZXJhdGVTdXBlck5vU3VjaE1ldGhvZCgKICAgICAgICAgIG5vZGUsIHNlbGVjdG9yLm5hbWUsIGFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cywgc291cmNlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm47CiAgICB9CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICBfZ2V0U3RhdGljVHlwZUFyZ3VtZW50cyhtZW1iZXIsIG5vZGUuYXJndW1lbnRzKTsKCiAgICBNZW1iZXJEZWZpbml0aW9uIHRhcmdldERlZmluaXRpb24gPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKG1lbWJlcik7CiAgICBpci5Qcm9jZWR1cmUgdGFyZ2V0ID0gdGFyZ2V0RGVmaW5pdGlvbi5ub2RlOwogICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBtZW1iZXI7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzID0gX3Zpc2l0QXJndW1lbnRzRm9yU3RhdGljVGFyZ2V0KAogICAgICAgIHRhcmdldC5mdW5jdGlvbiwKICAgICAgICBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgbm9kZS5hcmd1bWVudHMsCiAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBfYnVpbGRJbnZva2VTdXBlcigKICAgICAgICBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKSwKICAgICAgICBfZWxlbWVudE1hcC5nZXRDbGFzcyhfY29udGFpbmluZ0NsYXNzKG5vZGUpKSwKICAgICAgICBtZW1iZXIsCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdm9pZCBfYXNzZXJ0SXNUeXBlKEhJbnN0cnVjdGlvbiBzdWJ0eXBlSW5zdHJ1Y3Rpb24sIERhcnRUeXBlIHN1cGVydHlwZSwKICAgICAgU3RyaW5nIHByZWZpeCwgU3RyaW5nIGluZml4LCBTdHJpbmcgc3VmZml4KSB7CiAgICBISW5zdHJ1Y3Rpb24gc3VwZXJ0eXBlSW5zdHJ1Y3Rpb24gPSBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudCgKICAgICAgICBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KHN1cGVydHlwZSksIHNvdXJjZUVsZW1lbnQpOwogICAgSEluc3RydWN0aW9uIHByZWZpeEluc3RydWN0aW9uID0KICAgICAgICBncmFwaC5hZGRDb25zdGFudFN0cmluZyhwcmVmaXgsIGNsb3NlZFdvcmxkKTsKICAgIEhJbnN0cnVjdGlvbiBpbmZpeEluc3RydWN0aW9uID0gZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcoaW5maXgsIGNsb3NlZFdvcmxkKTsKICAgIEhJbnN0cnVjdGlvbiBzdWZmaXhJbnN0cnVjdGlvbiA9CiAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcoc3VmZml4LCBjbG9zZWRXb3JsZCk7CiAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50ID0gX2NvbW1vbkVsZW1lbnRzLmFzc2VydElzU3VidHlwZTsKICAgIHZhciBpbnB1dHMgPSA8SEluc3RydWN0aW9uPlsKICAgICAgc3VidHlwZUluc3RydWN0aW9uLAogICAgICBzdXBlcnR5cGVJbnN0cnVjdGlvbiwKICAgICAgcHJlZml4SW5zdHJ1Y3Rpb24sCiAgICAgIGluZml4SW5zdHJ1Y3Rpb24sCiAgICAgIHN1ZmZpeEluc3RydWN0aW9uCiAgICBdOwogICAgSEluc3RydWN0aW9uIGFzc2VydElzU3VidHlwZSA9IG5ldyBISW52b2tlU3RhdGljKGVsZW1lbnQsIGlucHV0cywKICAgICAgICBzdWJ0eXBlSW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlLCBjb25zdCA8RGFydFR5cGU+W10pOwogICAgYWRkKGFzc2VydElzU3VidHlwZSk7CiAgfQoKICB2b2lkIF9jaGVja1R5cGVCb3VuZCgKICAgICAgSEluc3RydWN0aW9uIHR5cGVJbnN0cnVjdGlvbiwgRGFydFR5cGUgYm91bmQsIFN0cmluZyB2YXJpYWJsZU5hbWUpIHsKICAgIEhJbnN0cnVjdGlvbiBib3VuZEluc3RydWN0aW9uID0gX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnROZXdSdGkoCiAgICAgICAgbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dChib3VuZCksIHNvdXJjZUVsZW1lbnQpOwoKICAgIEhJbnN0cnVjdGlvbiB2YXJpYWJsZU5hbWVJbnN0cnVjdGlvbiA9CiAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcodmFyaWFibGVOYW1lLCBjbG9zZWRXb3JsZCk7CiAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50ID0gX2NvbW1vbkVsZW1lbnRzLmNoZWNrVHlwZUJvdW5kOwogICAgdmFyIGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+WwogICAgICB0eXBlSW5zdHJ1Y3Rpb24sCiAgICAgIGJvdW5kSW5zdHJ1Y3Rpb24sCiAgICAgIHZhcmlhYmxlTmFtZUluc3RydWN0aW9uCiAgICBdOwogICAgSEluc3RydWN0aW9uIGNoZWNrQm91bmQgPSBuZXcgSEludm9rZVN0YXRpYygKICAgICAgICBlbGVtZW50LCBpbnB1dHMsIHR5cGVJbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGUsIGNvbnN0IDxEYXJ0VHlwZT5bXSk7CiAgICBhZGQoY2hlY2tCb3VuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZE5ldyhub2RlKTsKICAgIGlyLkNvbnN0cnVjdG9yIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlKTsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBjbG9zZWRXb3JsZCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICByZXR1cm47CiAgICB9CgogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcih0YXJnZXQpOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3M7CiAgICBBYnN0cmFjdFZhbHVlIHR5cGVNYXNrID0gX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbEV4YWN0KGNscyk7CiAgICBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZSA9IF9lbGVtZW50TWFwLmNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgICAgdGFyZ2V0LmVuY2xvc2luZ0NsYXNzLCBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgICBpbnN0YW5jZVR5cGUgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KGluc3RhbmNlVHlwZSk7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBpZiAoY29uc3RydWN0b3IuaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IgJiYKICAgICAgICBfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcykgJiYKICAgICAgICAhX25hdGl2ZURhdGEuaXNKc0ludGVyb3BNZW1iZXIoY29uc3RydWN0b3IpKSB7CiAgICAgIC8vIE5hdGl2ZSBjbGFzcyBnZW5lcmF0aXZlIGNvbnN0cnVjdG9ycyB0YWtlIGEgcHJlLWNvbnN0cnVjdGVkIG9iamVjdC4KICAgICAgYXJndW1lbnRzLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgIH0KICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgIF9nZXRDb25zdHJ1Y3RvclR5cGVBcmd1bWVudHMoY29uc3RydWN0b3IsIG5vZGUuYXJndW1lbnRzKTsKICAgIGFyZ3VtZW50cy5hZGRBbGwoY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihjb25zdHJ1Y3RvcikKICAgICAgICA/IF92aXNpdEFyZ3VtZW50c0Zvck5hdGl2ZVN0YXRpY1RhcmdldCh0YXJnZXQuZnVuY3Rpb24sIG5vZGUuYXJndW1lbnRzKQogICAgICAgIDogX3Zpc2l0QXJndW1lbnRzRm9yU3RhdGljVGFyZ2V0KAogICAgICAgICAgICB0YXJnZXQuZnVuY3Rpb24sCiAgICAgICAgICAgIGNvbnN0cnVjdG9yLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMsCiAgICAgICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBpZiAoX2NvbW1vbkVsZW1lbnRzLmlzU3ltYm9sQ29uc3RydWN0b3IoY29uc3RydWN0b3IpKSB7CiAgICAgIGNvbnN0cnVjdG9yID0gX2NvbW1vbkVsZW1lbnRzLnN5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB0eXBlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvCiAgICAvLyBjb25zdHJ1Y3RvcnMgbGlrZSBjYWxsaW5nIGEgZ2VuZXJpYyBtZXRob2QuCiAgICBfYWRkVHlwZUFyZ3VtZW50cyhhcmd1bWVudHMsIF9nZXRDbGFzc1R5cGVBcmd1bWVudHMoY2xzLCBub2RlLmFyZ3VtZW50cyksCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgX2FkZEltcGxpY2l0SW5zdGFudGlhdGlvbihpbnN0YW5jZVR5cGUpOwogICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKGNvbnN0cnVjdG9yLCBhcmd1bWVudHMsIHR5cGVNYXNrLCB0eXBlQXJndW1lbnRzLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbiwgaW5zdGFuY2VUeXBlOiBpbnN0YW5jZVR5cGUpOwogICAgX3JlbW92ZUltcGxpY2l0SW5zdGFudGlhdGlvbihpbnN0YW5jZVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElzRXhwcmVzc2lvbihpci5Jc0V4cHJlc3Npb24gbm9kZSkgewogICAgbm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uID0gcG9wKCk7CiAgICBfcHVzaElzVGVzdChub2RlLnR5cGUsIGV4cHJlc3Npb24sIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRJcyhub2RlKSk7CiAgfQoKICB2b2lkIF9wdXNoSXNUZXN0KGlyLkRhcnRUeXBlIHR5cGUsIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gTm90ZTogVGhlIGNhbGwgdG8gInVuYWxpYXMiIHRoaXMgdHlwZSBsaWtlIGluIHRoZSBvcmlnaW5hbCBTU0EgYnVpbGRlciBpcwogICAgLy8gdW5uZWNlc3NhcnkgaW4ga2VybmVsIGJlY2F1c2UgS2VybmVsIGhhcyBubyBub3Rpb24gb2YgdHlwZWRlZi4KICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBBZGQgdGVzdCBmb3IgdGhpcy4KCiAgICBpZiAodHlwZSBpcyBpci5JbnZhbGlkVHlwZSkgewogICAgICAvLyBUT0RPKHNyYSk6IE1ha2UgSW52YWxpZFR5cGUgY2FycnkgYSBtZXNzYWdlLgogICAgICBfZ2VuZXJhdGVUeXBlRXJyb3IoJ2ludmFsaWQgdHlwZScsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcG9wKCk7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudEJvb2wodHJ1ZSwgY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIERhcnRUeXBlIHR5cGVWYWx1ZSA9CiAgICAgICAgbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dChfZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSk7CgogICAgaWYgKHR5cGVWYWx1ZS50cmVhdEFzRHluYW1pYykgewogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAob3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBydGkgPQogICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnROZXdSdGkodHlwZVZhbHVlLCBzb3VyY2VFbGVtZW50KTsKICAgICAgQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24gY2hlY2tlZFR5cGUgPQogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlRnJvbVN0YXRpY1R5cGUodHlwZVZhbHVlLCBudWxsYWJsZTogZmFsc2UpOwoKICAgICAgcHVzaChISXNUZXN0KHR5cGVWYWx1ZSwgY2hlY2tlZFR5cGUsIGV4cHJlc3Npb24sIHJ0aSwKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZVZhbHVlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICBISW5zdHJ1Y3Rpb24gcmVwcmVzZW50YXRpb24gPQogICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQodHlwZVZhbHVlLCBzb3VyY2VFbGVtZW50KTsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+WwogICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgcmVwcmVzZW50YXRpb24sCiAgICAgIF07CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbihfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25UeXBlVGVzdCwgaW5wdXRzLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIEhJbnN0cnVjdGlvbiBjYWxsID0gcG9wKCk7CiAgICAgIHB1c2gobmV3IEhJcy5jb21wb3VuZCh0eXBlVmFsdWUsIGV4cHJlc3Npb24sIGNhbGwsCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICh0eXBlVmFsdWUgaXMgRnV0dXJlT3JUeXBlKSB7CiAgICAgIEhJbnN0cnVjdGlvbiByZXByZXNlbnRhdGlvbiA9CiAgICAgICAgICBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudCh0eXBlVmFsdWUsIHNvdXJjZUVsZW1lbnQpOwogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bCiAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICByZXByZXNlbnRhdGlvbiwKICAgICAgXTsKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKF9jb21tb25FbGVtZW50cy5mdXR1cmVPclRlc3QsIGlucHV0cywKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBISW5zdHJ1Y3Rpb24gY2FsbCA9IHBvcCgpOwogICAgICBwdXNoKG5ldyBISXMuY29tcG91bmQodHlwZVZhbHVlLCBleHByZXNzaW9uLCBjYWxsLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZVZhbHVlIGlzIFR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgSEluc3RydWN0aW9uIHJ1bnRpbWVUeXBlID0KICAgICAgICAgIF90eXBlQnVpbGRlci5hZGRUeXBlVmFyaWFibGVSZWZlcmVuY2UodHlwZVZhbHVlLCBzb3VyY2VFbGVtZW50KTsKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmNoZWNrU3VidHlwZU9mUnVudGltZVR5cGUsCiAgICAgICAgICA8SEluc3RydWN0aW9uPltleHByZXNzaW9uLCBydW50aW1lVHlwZV0sCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwKICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHB1c2gobmV3IEhJcy52YXJpYWJsZSh0eXBlVmFsdWUsIGV4cHJlc3Npb24sIHBvcCgpLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZVZhbHVlIGlzIEludGVyZmFjZVR5cGUgJiYgIV9jYW5JZ25vcmVUeXBlQXJndW1lbnRzKHR5cGVWYWx1ZSkpIHsKICAgICAgSEluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9ucyA9IF90eXBlQnVpbGRlcgogICAgICAgICAgLmJ1aWxkVHlwZUFyZ3VtZW50UmVwcmVzZW50YXRpb25zKHR5cGVWYWx1ZSwgc291cmNlRWxlbWVudCk7CiAgICAgIGFkZChyZXByZXNlbnRhdGlvbnMpOwogICAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gdHlwZVZhbHVlLmVsZW1lbnQ7CiAgICAgIGpzLk5hbWUgb3BlcmF0b3IgPSBfbmFtZXIub3BlcmF0b3JJcyhlbGVtZW50KTsKICAgICAgSEluc3RydWN0aW9uIGlzRmllbGROYW1lID0KICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50U3RyaW5nRnJvbU5hbWUob3BlcmF0b3IsIGNsb3NlZFdvcmxkKTsKICAgICAgSEluc3RydWN0aW9uIGFzRmllbGROYW1lID0KICAgICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YnR5cGUoZWxlbWVudCkgfHwKICAgICAgICAgICAgICAgICAgY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpCiAgICAgICAgICAgICAgPyBncmFwaC5hZGRDb25zdGFudFN0cmluZ0Zyb21OYW1lKAogICAgICAgICAgICAgICAgICBfbmFtZXIuc3Vic3RpdHV0aW9uTmFtZShlbGVtZW50KSwgY2xvc2VkV29ybGQpCiAgICAgICAgICAgICAgOiBncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpOwogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bCiAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICBpc0ZpZWxkTmFtZSwKICAgICAgICByZXByZXNlbnRhdGlvbnMsCiAgICAgICAgYXNGaWVsZE5hbWUKICAgICAgXTsKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKF9jb21tb25FbGVtZW50cy5jaGVja1N1YnR5cGUsIGlucHV0cywKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBwdXNoKG5ldyBISXMuY29tcG91bmQodHlwZVZhbHVlLCBleHByZXNzaW9uLCBwb3AoKSwKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKF9oYXNEaXJlY3RDaGVja0Zvcih0eXBlVmFsdWUpKSB7CiAgICAgIHB1c2gobmV3IEhJcy5kaXJlY3QodHlwZVZhbHVlLCBleHByZXNzaW9uLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFRoZSBpbnRlcmNlcHRvciBpcyBub3QgYWx3YXlzIG5lZWRlZC4gIEl0IGlzIHJlbW92ZWQgYnkgb3B0aW1pemF0aW9uCiAgICAvLyB3aGVuIHRoZSByZWNlaXZlciB0eXBlIG9yIHRlc3RlZCB0eXBlIHBlcm1pdC4KICAgIHB1c2gobmV3IEhJcy5yYXcoCiAgICAgICAgdHlwZVZhbHVlLAogICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgX2ludGVyY2VwdG9yRm9yKGV4cHJlc3Npb24sIHNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgcmV0dXJuOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBjaGVja2luZyBvZiBbdHlwZV0gaXMgcGVyZm9ybWVkIGRpcmVjdGx5IG9uIHRoZQogIC8vLyBvYmplY3QgYW5kIG5vdCBvbiBhbiBpbnRlcmNlcHRvci4KICBib29sIF9oYXNEaXJlY3RDaGVja0ZvcihEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAoIXR5cGUuaXNJbnRlcmZhY2VUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IGludGVyZmFjZVR5cGUuZWxlbWVudDsKICAgIHJldHVybiBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLm51bUNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3M7CiAgfQoKICAvLy8gV2hldGhlciBhbiBpcy1jaGVjayBmb3IgW3R5cGVdIGNhbiBiZSBkb25lIGlnbm9yaW5nIHR5cGUtYXJndW1lbnRzLgogIC8vLyBUaGlzIHdpbGwgYmUgdHJ1ZSBpZiBbdHlwZV0gaXMgcmF3LCBvciBhbGwgaXRzIHR5cGUtYXJndW1lbnRzIG1hdGNoIHRoZQogIC8vLyB0eXBlLXBhcmFtZXRlciBib3VuZHMuCiAgYm9vbCBfY2FuSWdub3JlVHlwZUFyZ3VtZW50cyhJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKHR5cGUuZWxlbWVudCk7CiAgICBMaXN0PERhcnRUeXBlPiBib3VuZHMgPSB0aGlzVHlwZS50eXBlQXJndW1lbnRzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBib3VuZHMubGVuZ3RoOyBpKyspIHsKICAgICAgRGFydFR5cGUgYXJnID0gdHlwZS50eXBlQXJndW1lbnRzW2ldOwogICAgICBpZiAoYXJnLnRyZWF0QXNEeW5hbWljKSBjb250aW51ZTsKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUgPSBib3VuZHNbaV07CiAgICAgIERhcnRUeXBlIGJvdW5kID0KICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlLmVsZW1lbnQpOwogICAgICBpZiAoYm91bmQgIT0gYXJnKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICBfdmlzaXRUaHJvd0V4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIGlmIChfaXNSZWFjaGFibGUpIHsKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFRocm93KG5vZGUpOwogICAgICBfaGFuZGxlSW5UcnlTdGF0ZW1lbnQoKTsKICAgICAgcHVzaCgKICAgICAgICAgIG5ldyBIVGhyb3dFeHByZXNzaW9uKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBwb3AoKSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgX2lzUmVhY2hhYmxlID0gZmFsc2U7CiAgICB9CiAgfQoKICB2b2lkIF92aXNpdFRocm93RXhwcmVzc2lvbihpci5FeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGJvb2wgb2xkID0gX2luRXhwcmVzc2lvbk9mVGhyb3c7CiAgICB0cnkgewogICAgICBfaW5FeHByZXNzaW9uT2ZUaHJvdyA9IHRydWU7CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0KHRoaXMpOwogICAgfSBmaW5hbGx5IHsKICAgICAgX2luRXhwcmVzc2lvbk9mVGhyb3cgPSBvbGQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0WWllbGRTdGF0ZW1lbnQoaXIuWWllbGRTdGF0ZW1lbnQgbm9kZSkgewogICAgbm9kZS5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgIGFkZChuZXcgSFlpZWxkKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBwb3AoKSwgbm9kZS5pc1lpZWxkU3RhciwKICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkWWllbGQobm9kZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBd2FpdEV4cHJlc3Npb24oaXIuQXdhaXRFeHByZXNzaW9uIG5vZGUpIHsKICAgIG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gYXdhaXRlZCA9IHBvcCgpOwogICAgLy8gVE9ETyhoZXJodXQpOiBJbXByb3ZlIHRoaXMgdHlwZS4KICAgIHB1c2gobmV3IEhBd2FpdChhd2FpdGVkLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSkKICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBd2FpdChub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UmV0aHJvdyhpci5SZXRocm93IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBleGNlcHRpb24gPSBfcmV0aHJvd2FibGVFeGNlcHRpb247CiAgICBpZiAoZXhjZXB0aW9uID09IG51bGwpIHsKICAgICAgZXhjZXB0aW9uID0gZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKTsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgbm9kZSksCiAgICAgICAgICAncmV0aHJvd2FibGVFeGNlcHRpb24gc2hvdWxkIG5vdCBiZSBudWxsLicpOwogICAgfQogICAgX2hhbmRsZUluVHJ5U3RhdGVtZW50KCk7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFRocm93KG5vZGUpOwogICAgX2Nsb3NlQW5kR290b0V4aXQobmV3IEhUaHJvdygKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgZXhjZXB0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICBpc1JldGhyb3c6IHRydWUpKTsKICAgIC8vIGlyLlJldGhyb3cgaXMgYW4gZXhwcmVzc2lvbiBzbyB3ZSBuZWVkIHRvIHB1c2ggYSB2YWx1ZSAtIGEgY29uc3RhbnQgd2l0aAogICAgLy8gbm8gdHlwZS4KICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudFVucmVhY2hhYmxlKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhpc0V4cHJlc3Npb24oaXIuVGhpc0V4cHJlc3Npb24gbm9kZSkgewogICAgc3RhY2suYWRkKGxvY2Fsc0hhbmRsZXIucmVhZFRoaXMoCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRHZXQobm9kZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROb3QoaXIuTm90IG5vZGUpIHsKICAgIG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7CiAgICBwdXNoKG5ldyBITm90KHBvcEJvb2xpZmllZCgpLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkKICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRVbmFyeShub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIHN0cmluZ0NvbmNhdCkgewogICAgS2VybmVsU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyID0gbmV3IEtlcm5lbFN0cmluZ0J1aWxkZXIodGhpcyk7CiAgICBzdHJpbmdDb25jYXQuYWNjZXB0KHN0cmluZ0J1aWxkZXIpOwogICAgc3RhY2suYWRkKHN0cmluZ0J1aWxkZXIucmVzdWx0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUcnlDYXRjaChpci5UcnlDYXRjaCBub2RlKSB7CiAgICBUcnlDYXRjaEZpbmFsbHlCdWlsZGVyIHRyeUJ1aWxkZXIgPSBuZXcgVHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlcigKICAgICAgICB0aGlzLCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkVHJ5KG5vZGUpKTsKICAgIG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgICB0cnlCdWlsZGVyCiAgICAgIC4uY2xvc2VUcnlCb2R5KCkKICAgICAgLi5idWlsZENhdGNoKG5vZGUpCiAgICAgIC4uY2xlYW5VcCgpOwogIH0KCiAgLy8vIGB0cnkgeyAuLi4gfSBjYXRjaCB7IC4uLiB9IGZpbmFsbHkgeyAuLi4gfWAgc3RhdGVtZW50cyBhcmUgYSBsaXR0bGUgZnVubnkKICAvLy8gYmVjYXVzZSBhIHRyeSBjYW4gaGF2ZSBvbmUgb3IgYm90aCBvZiB7Y2F0Y2h8ZmluYWxseX0uIFRoZSB3YXkgdGhpcyBpcwogIC8vLyBlbmNvZGVkIGluIGtlcm5lbCBBU1QgYXJlIHR3byBzZXBhcmF0ZSBjbGFzc2VzIHdpdGggbm8gY29tbW9uIHN1cGVyY2xhc3MKICAvLy8gYXNpZGUgZnJvbSBTdGF0ZW1lbnQuIElmIGEgc3RhdGVtZW50IGhhcyBib3RoIGBjYXRjaGAgYW5kIGBmaW5hbGx5YAogIC8vLyBjbGF1c2VzIHRoZW4gaXQgaXMgZW5jb2RlZCBpbiBrZXJuZWwgYXMgc28gdGhhdCB0aGUgVHJ5Q2F0Y2ggaXMgdGhlIGJvZHkKICAvLy8gc3RhdGVtZW50IG9mIHRoZSBUcnlGaW5hbGx5LiBUbyBwcm9kdWNlIG1vcmUgZWZmaWNpZW50IGNvZGUgcmF0aGVyIHRoYW4KICAvLy8gbmVzdGVkIHRyeSBzdGF0ZW1lbnRzLCB0aGUgdmlzaXRvcnMgYXZvaWQgb25lIHBvdGVudGlhbCBsZXZlbCBvZgogIC8vLyByZWN1cnNpb24uCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRyeUZpbmFsbHkoaXIuVHJ5RmluYWxseSBub2RlKSB7CiAgICBUcnlDYXRjaEZpbmFsbHlCdWlsZGVyIHRyeUJ1aWxkZXIgPSBuZXcgVHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlcigKICAgICAgICB0aGlzLCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkVHJ5KG5vZGUpKTsKCiAgICAvLyBXZSBkbyB0aGVzZSBzaGVuYW5pZ2FucyB0byBwcm9kdWNlIGJldHRlciBsb29raW5nIGNvZGUgdGhhdCBkb2Vzbid0CiAgICAvLyBoYXZlIG5lc3RlZCB0cnkgc3RhdGVtZW50cy4KICAgIGlmIChub2RlLmJvZHkgaXMgaXIuVHJ5Q2F0Y2gpIHsKICAgICAgaXIuVHJ5Q2F0Y2ggdHJ5Q2F0Y2ggPSBub2RlLmJvZHk7CiAgICAgIHRyeUNhdGNoLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgICB0cnlCdWlsZGVyCiAgICAgICAgLi5jbG9zZVRyeUJvZHkoKQogICAgICAgIC4uYnVpbGRDYXRjaCh0cnlDYXRjaCk7CiAgICB9IGVsc2UgewogICAgICBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgICB0cnlCdWlsZGVyLmNsb3NlVHJ5Qm9keSgpOwogICAgfQoKICAgIHRyeUJ1aWxkZXIKICAgICAgLi5idWlsZEZpbmFsbHlCbG9jaygoKSB7CiAgICAgICAgbm9kZS5maW5hbGl6ZXIuYWNjZXB0KHRoaXMpOwogICAgICB9KQogICAgICAuLmNsZWFuVXAoKTsKICB9CgogIC8vLyBUcnkgdG8gaW5saW5lIFtlbGVtZW50XSB3aXRoaW4gdGhlIGNvcnJlY3QgY29udGV4dCBvZiB0aGUgYnVpbGRlci4gVGhlCiAgLy8vIGluc2VydGlvbiBwb2ludCBpcyB0aGUgc3RhdGUgb2YgdGhlIGJ1aWxkZXIuCiAgYm9vbCBfdHJ5SW5saW5lTWV0aG9kKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHByb3ZpZGVkQXJndW1lbnRzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5Ob2RlIGN1cnJlbnROb2RlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge0ludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlfSkgewogICAgaWYgKGZ1bmN0aW9uLmlzRXh0ZXJuYWwpIHsKICAgICAgLy8gRG9uJ3QgaW5saW5lIGV4dGVybmFsIG1ldGhvZHM7IHRoZXNlIHNob3VsZCBqdXN0IGZhaWwgYXQgcnVudGltZS4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihmdW5jdGlvbikgJiYKICAgICAgICAhKGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmIGZ1bmN0aW9uLmlzRmFjdG9yeUNvbnN0cnVjdG9yKSkgewogICAgICAvLyBXZSBvbmx5IGlubGluZSBmYWN0b3J5IEphdmFTY3JpcHQgaW50ZXJvcCBjb25zdHJ1Y3RvcnMuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIGluc2lkZUxvb3AgPSBsb29wRGVwdGggPiAwIHx8IGdyYXBoLmNhbGxlZEluTG9vcDsKCiAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB0aGUgaW5saW5pbmcgZGVjaXNpb24gaXMgaW4gdGhlIGNhY2hlIGFuZCB3ZSBjYW4ndAogICAgLy8gaW5saW5lIChubyBuZWVkIHRvIGNoZWNrIHRoZSBoYXJkIGNvbnN0cmFpbnRzKS4KICAgIGlmIChfaW5saW5lQ2FjaGUubWFya2VkQXNOb0lubGluZShmdW5jdGlvbikpIHJldHVybiBmYWxzZTsKICAgIGJvb2wgY2FjaGVkQ2FuQmVJbmxpbmVkID0KICAgICAgICBfaW5saW5lQ2FjaGUuY2FuSW5saW5lKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiBpbnNpZGVMb29wKTsKICAgIGlmIChjYWNoZWRDYW5CZUlubGluZWQgPT0gZmFsc2UpIHJldHVybiBmYWxzZTsKCiAgICBib29sIG1lZXRzSGFyZENvbnN0cmFpbnRzKCkgewogICAgICBpZiAob3B0aW9ucy5kaXNhYmxlSW5saW5pbmcpIHJldHVybiBmYWxzZTsKCiAgICAgIGFzc2VydCgKICAgICAgICAgIHNlbGVjdG9yICE9IG51bGwgfHwKICAgICAgICAgICAgICBmdW5jdGlvbi5pc1N0YXRpYyB8fAogICAgICAgICAgICAgIGZ1bmN0aW9uLmlzVG9wTGV2ZWwgfHwKICAgICAgICAgICAgICBmdW5jdGlvbi5pc0NvbnN0cnVjdG9yIHx8CiAgICAgICAgICAgICAgZnVuY3Rpb24gaXMgQ29uc3RydWN0b3JCb2R5RW50aXR5LAogICAgICAgICAgZmFpbGVkQXQoZnVuY3Rpb24sICJNaXNzaW5nIHNlbGVjdG9yIGZvciBpbmxpbmluZyBvZiAkZnVuY3Rpb24uIikpOwogICAgICBpZiAoc2VsZWN0b3IgIT0gbnVsbCkgewogICAgICAgIGlmICghc2VsZWN0b3IuYXBwbGllcyhmdW5jdGlvbikpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAobWFzayAhPSBudWxsICYmCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgICAuaXNUYXJnZXRpbmdNZW1iZXIobWFzaywgZnVuY3Rpb24sIHNlbGVjdG9yLm1lbWJlck5hbWUpCiAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihmdW5jdGlvbikpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIERvbid0IGlubGluZSBvcGVyYXRvcj09IG1ldGhvZHMgaWYgdGhlIHBhcmFtZXRlciBjYW4gYmUgbnVsbC4KICAgICAgaWYgKGZ1bmN0aW9uLm5hbWUgPT0gJz09JykgewogICAgICAgIGlmIChmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcyAhPSBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MgJiYKICAgICAgICAgICAgcHJvdmlkZWRBcmd1bWVudHNbMV0KICAgICAgICAgICAgICAgIC5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIEdlbmVyYXRpdmUgY29uc3RydWN0b3JzIG9mIG5hdGl2ZSBjbGFzc2VzIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5CiAgICAgIC8vIGFuZCBoYXZlIGFuIGV4dHJhIGFyZ3VtZW50IHRoYXQgY2F1c2VzIHByb2JsZW1zIHdpdGggaW5saW5pbmcuCiAgICAgIGlmIChmdW5jdGlvbiBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJgogICAgICAgICAgZnVuY3Rpb24uaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IgJiYKICAgICAgICAgIF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLy8gQSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIGJvZHkgaXMgbm90IHNlZW4gYnkgZ2xvYmFsIGFuYWx5c2lzLAogICAgICAvLyBzbyB3ZSBzaG91bGQgbm90IHF1ZXJ5IGZvciBpdHMgdHlwZS4KICAgICAgaWYgKGZ1bmN0aW9uIGlzISBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHsKICAgICAgICBpZiAoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cy5yZXN1bHRPZk1lbWJlcihmdW5jdGlvbikudGhyb3dzQWx3YXlzKSB7CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJdCBzZWVtcyB3cm9uZyB0byBzZXQgYGlzUmVhY2hhYmxlYCB0byBgZmFsc2VgCiAgICAgICAgICAvLyBzaW5jZSB3ZSBhcmUgX25vdF8gZ29pbmcgdG8gaW5saW5lIFtmdW5jdGlvbl0uIFRoaXMgaGFzCiAgICAgICAgICAvLyBpbXBsaWNhdGlvbnMgaW4gc3dpdGNoIGNhc2VzIHdoZXJlIHdlIG1pZ2h0IG5lZWQgdG8gaW5zZXJ0IGEKICAgICAgICAgIC8vIGBicmVha2AgdGhhdCB3YXMgc2tpcHBlZCBkdWUgdG8gYGlzUmVhY2hhYmxlYCBiZWluZyBgZmFsc2VgLgogICAgICAgICAgX2lzUmVhY2hhYmxlID0gZmFsc2U7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBib29sIGRvZXNOb3RDb250YWluQ29kZShJbmxpbmVEYXRhIGlubGluZURhdGEpIHsKICAgICAgLy8gQSBmdW5jdGlvbiB3aXRoIHNpemUgMSBkb2VzIG5vdCBjb250YWluIGFueSBjb2RlLgogICAgICByZXR1cm4gaW5saW5lRGF0YS5jYW5CZUlubGluZWQobWF4SW5saW5pbmdOb2RlczogMSk7CiAgICB9CgogICAgYm9vbCByZWR1Y3RpdmVIZXVyaXN0aWMoSW5saW5lRGF0YSBpbmxpbmVEYXRhKSB7CiAgICAgIC8vIFRoZSBjYWxsIGlzIG9uIGEgcGF0aCB3aGljaCBpcyBleGVjdXRlZCByYXJlbHksIHNvIGlubGluZSBvbmx5IGlmIGl0CiAgICAgIC8vIGRvZXMgbm90IG1ha2UgdGhlIHByb2dyYW0gbGFyZ2VyLgogICAgICBpZiAoX2lzQ2FsbGVkT25jZShmdW5jdGlvbikpIHsKICAgICAgICByZXR1cm4gaW5saW5lRGF0YS5jYW5CZUlubGluZWQoKTsKICAgICAgfQogICAgICBpZiAoaW5saW5lRGF0YS5jYW5CZUlubGluZWRSZWR1Y3RpdmUoCiAgICAgICAgICBhcmd1bWVudENvdW50OiBwcm92aWRlZEFyZ3VtZW50cy5sZW5ndGgpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGRvZXNOb3RDb250YWluQ29kZShpbmxpbmVEYXRhKTsKICAgIH0KCiAgICBib29sIGhldXJpc3RpY1NheUdvb2RUb0dvKCkgewogICAgICAvLyBEb24ndCBpbmxpbmUgcmVjdXJzaXZlbHksCiAgICAgIGlmIChfaW5saW5pbmdTdGFjay5hbnkoKGVudHJ5KSA9PiBlbnRyeS5mdW5jdGlvbiA9PSBmdW5jdGlvbikpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8vIERvbid0IGlubGluZSBhY3Jvc3MgZGVmZXJyZWQgaW1wb3J0IHRvIHByZXZlbnQgbGVha2luZyBjb2RlLiBUaGUgb25seQogICAgICAvLyBleGNlcHRpb24gaXMgYW4gZW1wdHkgZnVuY3Rpb24gKHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gY29kZSkuCiAgICAgIGJvb2wgaGFzT25seU5vbkRlZmVycmVkSW1wb3J0UGF0aHMgPSBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YQogICAgICAgICAgLmhhc09ubHlOb25EZWZlcnJlZEltcG9ydFBhdGhzKF9pbml0aWFsVGFyZ2V0RWxlbWVudCwgZnVuY3Rpb24pOwoKICAgICAgSW5saW5lRGF0YSBpbmxpbmVEYXRhID0KICAgICAgICAgIF9pbmxpbmVEYXRhQ2FjaGUuZ2V0SW5saW5lRGF0YShfZWxlbWVudE1hcCwgZnVuY3Rpb24pOwoKICAgICAgaWYgKCFoYXNPbmx5Tm9uRGVmZXJyZWRJbXBvcnRQYXRocykgewogICAgICAgIHJldHVybiBkb2VzTm90Q29udGFpbkNvZGUoaW5saW5lRGF0YSk7CiAgICAgIH0KCiAgICAgIC8vIERvIG5vdCBpbmxpbmUgY29kZSB0aGF0IGlzIHJhcmVseSBleGVjdXRlZCB1bmxlc3MgaXQgcmVkdWNlcyBzaXplLgogICAgICBpZiAoX2luRXhwcmVzc2lvbk9mVGhyb3cgfHwgX2luTGF6eUluaXRpYWxpemVyRXhwcmVzc2lvbikgewogICAgICAgIHJldHVybiByZWR1Y3RpdmVIZXVyaXN0aWMoaW5saW5lRGF0YSk7CiAgICAgIH0KCiAgICAgIGlmIChjYWNoZWRDYW5CZUlubGluZWQgPT0gdHJ1ZSkgewogICAgICAgIC8vIFdlIG1heSBoYXZlIGZvcmNlZCB0aGUgaW5saW5pbmcgb2Ygc29tZSBtZXRob2RzLiBUaGVyZWZvcmUgY2hlY2sKICAgICAgICAvLyBpZiB3ZSBjYW4gaW5saW5lIHRoaXMgbWV0aG9kIHJlZ2FyZGxlc3Mgb2Ygc2l6ZS4KICAgICAgICBTdHJpbmcgcmVhc29uOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgKHJlYXNvbiA9IGlubGluZURhdGEuY2Fubm90QmVJbmxpbmVkUmVhc29uKGFsbG93TG9vcHM6IHRydWUpKSA9PQogICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgZmFpbGVkQXQoZnVuY3Rpb24sICJDYW5ub3QgaW5saW5lICRmdW5jdGlvbjogJHJlYXNvbiIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgaW50IG51bVBhcmFtZXRlcnMgPSBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUudG90YWxQYXJhbWV0ZXJzOwogICAgICBpbnQgbWF4SW5saW5pbmdOb2RlczsKICAgICAgaWYgKGluc2lkZUxvb3ApIHsKICAgICAgICBtYXhJbmxpbmluZ05vZGVzID0gSW5saW5lV2VlZGVyLklOTElOSU5HX05PREVTX0lOU0lERV9MT09QICsKICAgICAgICAgICAgSW5saW5lV2VlZGVyLklOTElOSU5HX05PREVTX0lOU0lERV9MT09QX0FSR19GQUNUT1IgKiBudW1QYXJhbWV0ZXJzOwogICAgICB9IGVsc2UgewogICAgICAgIG1heElubGluaW5nTm9kZXMgPSBJbmxpbmVXZWVkZXIuSU5MSU5JTkdfTk9ERVNfT1VUU0lERV9MT09QICsKICAgICAgICAgICAgSW5saW5lV2VlZGVyLklOTElOSU5HX05PREVTX09VVFNJREVfTE9PUF9BUkdfRkFDVE9SICogbnVtUGFyYW1ldGVyczsKICAgICAgfQoKICAgICAgYm9vbCBtYXJrZWRUcnlJbmxpbmUgPSBfaW5saW5lQ2FjaGUubWFya2VkQXNUcnlJbmxpbmUoZnVuY3Rpb24pOwogICAgICBib29sIGNhbGxlZE9uY2UgPSBfaXNDYWxsZWRPbmNlKGZ1bmN0aW9uKTsKICAgICAgLy8gSWYgYSBtZXRob2QgaXMgY2FsbGVkIG9ubHkgb25jZSwgYW5kIGFsbCB0aGUgbWV0aG9kcyBpbiB0aGUgaW5saW5pbmcKICAgICAgLy8gc3RhY2sgYXJlIGNhbGxlZCBvbmx5IG9uY2UgYXMgd2VsbCwgd2Uga25vdyB3ZSB3aWxsIHNhdmUgb24gb3V0cHV0IHNpemUKICAgICAgLy8gYnkgaW5saW5pbmcgdGhpcyBtZXRob2QuCiAgICAgIGlmIChtYXJrZWRUcnlJbmxpbmUgfHwgY2FsbGVkT25jZSkgewogICAgICAgIG1heElubGluaW5nTm9kZXMgPSBudWxsOwogICAgICB9CiAgICAgIGJvb2wgYWxsb3dMb29wcyA9IGZhbHNlOwogICAgICBpZiAobWFya2VkVHJ5SW5saW5lKSB7CiAgICAgICAgYWxsb3dMb29wcyA9IHRydWU7CiAgICAgIH0KCiAgICAgIGJvb2wgY2FuSW5saW5lID0gaW5saW5lRGF0YS5jYW5CZUlubGluZWQoCiAgICAgICAgICBtYXhJbmxpbmluZ05vZGVzOiBtYXhJbmxpbmluZ05vZGVzLCBhbGxvd0xvb3BzOiBhbGxvd0xvb3BzKTsKICAgICAgaWYgKG1hcmtlZFRyeUlubGluZSkgewogICAgICAgIGlmIChjYW5JbmxpbmUpIHsKICAgICAgICAgIF9pbmxpbmVDYWNoZS5tYXJrQXNJbmxpbmFibGUoZnVuY3Rpb24sIGluc2lkZUxvb3A6IHRydWUpOwogICAgICAgICAgX2lubGluZUNhY2hlLm1hcmtBc0lubGluYWJsZShmdW5jdGlvbiwgaW5zaWRlTG9vcDogZmFsc2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfaW5saW5lQ2FjaGUubWFya0FzTm9uSW5saW5hYmxlKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiB0cnVlKTsKICAgICAgICAgIF9pbmxpbmVDYWNoZS5tYXJrQXNOb25JbmxpbmFibGUoZnVuY3Rpb24sIGluc2lkZUxvb3A6IGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2FsbGVkT25jZSkgewogICAgICAgIC8vIFRPRE8oMzQyMDMpOiBXZSBjYW4ndCB1cGRhdGUgdGhlIGRlY2lzaW9uIGR1ZSB0byBpbXByZWNpc2lvbiBpbiB0aGUKICAgICAgICAvLyBjYWxsZWRPbmNlIGRhdGEsIGRlc2NyaWJlZCBpbiBJc3N1ZSAzNDIwMy4KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoY2FuSW5saW5lKSB7CiAgICAgICAgICBfaW5saW5lQ2FjaGUubWFya0FzSW5saW5hYmxlKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiBpbnNpZGVMb29wKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9pc0Z1bmN0aW9uQ2FsbGVkT25jZShmdW5jdGlvbikpIHsKICAgICAgICAgICAgLy8gVE9ETygzNDIwMyk6IFdlIGNhbid0IHVwZGF0ZSB0aGUgZGVjaXNpb24gZHVlIHRvIGltcHJlY2lzaW9uIGluCiAgICAgICAgICAgIC8vIHRoZSBjYWxsZWRPbmNlIGRhdGEsIGRlc2NyaWJlZCBpbiBJc3N1ZSAzNDIwMy4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9pbmxpbmVDYWNoZS5tYXJrQXNOb25JbmxpbmFibGUoZnVuY3Rpb24sIGluc2lkZUxvb3A6IGluc2lkZUxvb3ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY2FuSW5saW5lOwogICAgfQoKICAgIHZvaWQgZG9JbmxpbmluZygpIHsKICAgICAgaWYgKGZ1bmN0aW9uLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgICAgbmV3IFN0YXRpY1VzZS5jb25zdHJ1Y3RvcklubGluaW5nKGZ1bmN0aW9uLCBpbnN0YW5jZVR5cGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoaW5zdGFuY2VUeXBlID09IG51bGwsCiAgICAgICAgICAgICJVbmV4cGVjdGVkIGluc3RhbmNlIHR5cGUgZm9yICRmdW5jdGlvbjogJGluc3RhbmNlVHlwZSIpOwogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgICBuZXcgU3RhdGljVXNlLm1ldGhvZElubGluaW5nKGZ1bmN0aW9uLCB0eXBlQXJndW1lbnRzKSk7CiAgICAgIH0KCiAgICAgIC8vIEFkZCBhbiBleHBsaWNpdCBudWxsIGNoZWNrIG9uIHRoZSByZWNlaXZlciBiZWZvcmUgZG9pbmcgdGhlCiAgICAgIC8vIGlubGluaW5nLiBXZSB1c2UgW2VsZW1lbnRdIHRvIGdldCB0aGUgc2FtZSBuYW1lIGluIHRoZQogICAgICAvLyBOb1N1Y2hNZXRob2RFcnJvciBtZXNzYWdlIGFzIGlmIHdlIGhhZCBjYWxsZWQgaXQuCiAgICAgIGlmIChmdW5jdGlvbi5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICBmdW5jdGlvbiBpcyEgQ29uc3RydWN0b3JCb2R5RW50aXR5ICYmCiAgICAgICAgICAobWFzayA9PSBudWxsIHx8CiAgICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKG1hc2spLmlzUG90ZW50aWFsbHlUcnVlKSkgewogICAgICAgIGFkZChuZXcgSEZpZWxkR2V0KG51bGwsIHByb3ZpZGVkQXJndW1lbnRzWzBdLAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICAgIGlzQXNzaWduYWJsZTogZmFsc2UpKTsKICAgICAgfQogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gY29tcGlsZWRBcmd1bWVudHMgPSBfY29tcGxldGVDYWxsQXJndW1lbnRzTGlzdCgKICAgICAgICAgIGZ1bmN0aW9uLCBzZWxlY3RvciwgcHJvdmlkZWRBcmd1bWVudHMsIGN1cnJlbnROb2RlKTsKICAgICAgX2VudGVySW5saW5lZE1ldGhvZChmdW5jdGlvbiwgY29tcGlsZWRBcmd1bWVudHMsIGluc3RhbmNlVHlwZSk7CiAgICAgIF9pbmxpbmVkRnJvbShmdW5jdGlvbiwgc291cmNlSW5mb3JtYXRpb24sICgpIHsKICAgICAgICBpZiAoIV9pc1JlYWNoYWJsZSkgewogICAgICAgICAgX2VtaXRSZXR1cm4oZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfZG9JbmxpbmUoZnVuY3Rpb24pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIF9sZWF2ZUlubGluZWRNZXRob2QoKTsKICAgIH0KCiAgICBpZiAobWVldHNIYXJkQ29uc3RyYWludHMoKSAmJiBoZXVyaXN0aWNTYXlHb29kVG9HbygpKSB7CiAgICAgIGRvSW5saW5pbmcoKTsKICAgICAgX2luZm9SZXBvcnRlcj8ucmVwb3J0SW5saW5lZCgKICAgICAgICAgIGZ1bmN0aW9uLAogICAgICAgICAgX2lubGluaW5nU3RhY2suaXNFbXB0eQogICAgICAgICAgICAgID8gdGFyZ2V0RWxlbWVudAogICAgICAgICAgICAgIDogX2lubGluaW5nU3RhY2subGFzdC5mdW5jdGlvbik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIGEgY29tcGxldGUgYXJndW1lbnQgbGlzdCBmb3IgYSBjYWxsIG9mIFtmdW5jdGlvbl0uCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IF9jb21wbGV0ZUNhbGxBcmd1bWVudHNMaXN0KAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBwcm92aWRlZEFyZ3VtZW50cywKICAgICAgaXIuTm9kZSBjdXJyZW50Tm9kZSkgewogICAgYXNzZXJ0KHByb3ZpZGVkQXJndW1lbnRzICE9IG51bGwpOwoKICAgIGJvb2wgaXNJbnN0YW5jZU1lbWJlciA9IGZ1bmN0aW9uLmlzSW5zdGFuY2VNZW1iZXI7CiAgICAvLyBGb3Igc3RhdGljIGNhbGxzLCBbcHJvdmlkZWRBcmd1bWVudHNdIGlzIGNvbXBsZXRlLCBkZWZhdWx0IGFyZ3VtZW50cwogICAgLy8gaGF2ZSBiZWVuIGluY2x1ZGVkIGlmIG5lY2Vzc2FyeSwgc2VlIFttYWtlU3RhdGljQXJndW1lbnRMaXN0XS4KICAgIGlmICghaXNJbnN0YW5jZU1lbWJlciB8fAogICAgICAgIGN1cnJlbnROb2RlID09IG51bGwgfHwgLy8gSW4gZXJyb25lb3VzIGNvZGUsIGN1cnJlbnROb2RlIGNhbiBiZSBudWxsLgogICAgICAgIF9wcm92aWRlZEFyZ3VtZW50c0tub3duVG9CZUNvbXBsZXRlKGN1cnJlbnROb2RlKSB8fAogICAgICAgIGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSB8fAogICAgICAgIHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIC8vIEZvciB0aGVzZSBjYXNlcywgdGhlIHByb3ZpZGVkIGFyZ3VtZW50IGxpc3QgaXMga25vd24gdG8gYmUgY29tcGxldGUuCiAgICAgIHJldHVybiBwcm92aWRlZEFyZ3VtZW50czsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfY29tcGxldGVEeW5hbWljQ2FsbEFyZ3VtZW50c0xpc3QoCiAgICAgICAgICBzZWxlY3RvciwgZnVuY3Rpb24sIHByb3ZpZGVkQXJndW1lbnRzKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgY29tcGxldGUgYXJndW1lbnQgbGlzdCBmb3IgYSBkeW5hbWljIGNhbGwgb2YgW2Z1bmN0aW9uXS4gVGhlCiAgLy8vIGluaXRpYWwgYXJndW1lbnQgbGlzdCBbcHJvdmlkZWRBcmd1bWVudHNdLCBjcmVhdGVkIGJ5CiAgLy8vIFthZGREeW5hbWljU2VuZEFyZ3VtZW50c1RvTGlzdF0sIGRvZXMgbm90IGluY2x1ZGUgdmFsdWVzIGZvciBkZWZhdWx0CiAgLy8vIGFyZ3VtZW50cyB1c2VkIGluIHRoZSBjYWxsLiBUaGUgcmVhc29uIGlzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiAod2hpY2gKICAvLy8gZGVmaW5lcyB0aGUgZGVmYXVsdHMpIGlzIG5vdCBrbm93bi4KICAvLy8KICAvLy8gSG93ZXZlciwgaW5saW5pbmcgY2FuIG9ubHkgYmUgcGVyZm9ybWVkIHdoZW4gdGhlIHRhcmdldCBmdW5jdGlvbiBjYW4gYmUKICAvLy8gcmVzb2x2ZWQgc3RhdGljYWxseS4gVGhlIGRlZmF1bHRzIGNhbiB0aGVyZWZvcmUgYmUgaW5jbHVkZWQgYXQgdGhpcyBwb2ludC4KICAvLy8KICAvLy8gVGhlIFtwcm92aWRlZEFyZ3VtZW50c10gbGlzdCBjb250YWlucyBmaXJzdCBhbGwgcG9zaXRpb25hbCBhcmd1bWVudHMsIHRoZW4KICAvLy8gdGhlIHByb3ZpZGVkIG5hbWVkIGFyZ3VtZW50cyAodGhlIG5hbWVkIGFyZ3VtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZQogIC8vLyBbc2VsZWN0b3JdKSBpbiBhIHNwZWNpZmljIG9yZGVyIChzZWUgW2FkZER5bmFtaWNTZW5kQXJndW1lbnRzVG9MaXN0XSkuCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IF9jb21wbGV0ZUR5bmFtaWNDYWxsQXJndW1lbnRzTGlzdChTZWxlY3RvciBzZWxlY3RvciwKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIExpc3Q8SEluc3RydWN0aW9uPiBwcm92aWRlZEFyZ3VtZW50cykgewogICAgYXNzZXJ0KHNlbGVjdG9yLmFwcGxpZXMoZnVuY3Rpb24pKTsKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmU7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlOwogICAgTGlzdDxTdHJpbmc+IHNlbGVjdG9yQXJndW1lbnROYW1lcyA9CiAgICAgICAgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKTsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBjb21waWxlZEFyZ3VtZW50cyA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4oCiAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlLnRvdGFsUGFyYW1ldGVycyArCiAgICAgICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyArCiAgICAgICAgICAgIDEpOyAvLyBQbHVzIG9uZSBmb3IgcmVjZWl2ZXIuCgogICAgaW50IGNvbXBpbGVkQXJndW1lbnRJbmRleCA9IDA7CgogICAgLy8gQ29weSByZWNlaXZlci4KICAgIGNvbXBpbGVkQXJndW1lbnRzW2NvbXBpbGVkQXJndW1lbnRJbmRleCsrXSA9IHByb3ZpZGVkQXJndW1lbnRzWzBdOwoKICAgIC8vLyBPZmZzZXQgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgaW4gW3Byb3ZpZGVkQXJndW1lbnRzXS4KICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRPZmZzZXQgPSAxOwoKICAgIC8vLyBPZmZzZXQgb2YgbmFtZWQgYXJndW1lbnRzIGluIFtwcm92aWRlZEFyZ3VtZW50c10uCiAgICBpbnQgbmFtZWRBcmd1bWVudE9mZnNldCA9IGNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQgKyAxOwoKICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRJbmRleCA9IDA7CiAgICBpbnQgbmFtZWRBcmd1bWVudEluZGV4ID0gMDsKCiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hQYXJhbWV0ZXIoZnVuY3Rpb24sCiAgICAgICAgKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSkgewogICAgICBpZiAocG9zaXRpb25hbEFyZ3VtZW50SW5kZXggPCBwYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgICBpZiAocG9zaXRpb25hbEFyZ3VtZW50SW5kZXggPCBjYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50KSB7CiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPSBwcm92aWRlZEFyZ3VtZW50c1sKICAgICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRPZmZzZXQgKyBwb3NpdGlvbmFsQXJndW1lbnRJbmRleCsrXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KGRlZmF1bHRWYWx1ZSAhPSBudWxsLAogICAgICAgICAgICAgIGZhaWxlZEF0KGZ1bmN0aW9uLCAnTm8gY29uc3RhbnQgY29tcHV0ZWQgZm9yIHBhcmFtZXRlciAkbmFtZScpKTsKICAgICAgICAgIGNvbXBpbGVkQXJndW1lbnRzW2NvbXBpbGVkQXJndW1lbnRJbmRleCsrXSA9CiAgICAgICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnQoZGVmYXVsdFZhbHVlLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIEV4YW1wbGU6CiAgICAgICAgLy8gICAgIHZvaWQgZm9vKGEsIHtiLCBkLCBjfSkKICAgICAgICAvLyAgICAgZm9vKDAsIGQgPSAxLCBiID0gMikKICAgICAgICAvLwogICAgICAgIC8vIHByb3ZpZGVkQXJndW1lbnRzID0gWzAsIDIsIDFdCiAgICAgICAgLy8gc2VsZWN0b3JBcmd1bWVudE5hbWVzID0gW2IsIGRdCiAgICAgICAgLy8gcGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycyA9IFtiLCBjLCBkXQogICAgICAgIC8vCiAgICAgICAgLy8gRm9yIGVhY2ggcGFyYW1ldGVyIG5hbWUgaW4gdGhlIHNpZ25hdHVyZSwgaWYgdGhlIGFyZ3VtZW50IG5hbWUKICAgICAgICAvLyBtYXRjaGVzIHdlIHVzZSB0aGUgbmV4dCBwcm92aWRlZCBhcmd1bWVudCwgb3RoZXJ3aXNlIHdlIGdldCB0aGUKICAgICAgICAvLyBkZWZhdWx0LgogICAgICAgIGlmIChuYW1lZEFyZ3VtZW50SW5kZXggPCBzZWxlY3RvckFyZ3VtZW50TmFtZXMubGVuZ3RoICYmCiAgICAgICAgICAgIG5hbWUgPT0gc2VsZWN0b3JBcmd1bWVudE5hbWVzW25hbWVkQXJndW1lbnRJbmRleF0pIHsKICAgICAgICAgIC8vIFRoZSBuYW1lZCBhcmd1bWVudCB3YXMgcHJvdmlkZWQgaW4gdGhlIGZ1bmN0aW9uIGludm9jYXRpb24uCiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPQogICAgICAgICAgICAgIHByb3ZpZGVkQXJndW1lbnRzW25hbWVkQXJndW1lbnRPZmZzZXQgKyBuYW1lZEFyZ3VtZW50SW5kZXgrK107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChkZWZhdWx0VmFsdWUgIT0gbnVsbCwKICAgICAgICAgICAgICBmYWlsZWRBdChmdW5jdGlvbiwgJ05vIGNvbnN0YW50IGNvbXB1dGVkIGZvciBwYXJhbWV0ZXIgJG5hbWUnKSk7CiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPQogICAgICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50KGRlZmF1bHRWYWx1ZSwgY2xvc2VkV29ybGQpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBpZiAoX3J0aU5lZWQubWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKGZ1bmN0aW9uKSkgewogICAgICBpZiAoY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PQogICAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgLy8vIE9mZnNldCBvZiB0eXBlIGFyZ3VtZW50cyBpbiBbcHJvdmlkZWRBcmd1bWVudHNdLgogICAgICAgIGludCB0eXBlQXJndW1lbnRPZmZzZXQgPSBjYWxsU3RydWN0dXJlLmFyZ3VtZW50Q291bnQgKyAxOwogICAgICAgIC8vIFBhc3MgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMuCiAgICAgICAgZm9yIChpbnQgdHlwZUFyZ3VtZW50SW5kZXggPSAwOwogICAgICAgICAgICB0eXBlQXJndW1lbnRJbmRleCA8IGNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQ7CiAgICAgICAgICAgIHR5cGVBcmd1bWVudEluZGV4KyspIHsKICAgICAgICAgIGNvbXBpbGVkQXJndW1lbnRzW2NvbXBpbGVkQXJndW1lbnRJbmRleCsrXSA9CiAgICAgICAgICAgICAgcHJvdmlkZWRBcmd1bWVudHNbdHlwZUFyZ3VtZW50T2Zmc2V0ICsgdHlwZUFyZ3VtZW50SW5kZXhdOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSAwKTsKICAgICAgICAvLyBQYXNzIHR5cGUgdmFyaWFibGUgYm91bmRzIGFzIHR5cGUgYXJndW1lbnRzLgogICAgICAgIGZvciAoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUKICAgICAgICAgICAgaW4gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoZnVuY3Rpb24pKSB7CiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPQogICAgICAgICAgICAgIF9jb21wdXRlVHlwZUFyZ3VtZW50RGVmYXVsdFZhbHVlKGZ1bmN0aW9uLCB0eXBlVmFyaWFibGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbXBpbGVkQXJndW1lbnRzOwogIH0KCiAgSEluc3RydWN0aW9uIF9jb21wdXRlVHlwZUFyZ3VtZW50RGVmYXVsdFZhbHVlKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUpIHsKICAgIERhcnRUeXBlIGJvdW5kID0KICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFR5cGVWYXJpYWJsZURlZmF1bHRUeXBlKHR5cGVWYXJpYWJsZS5lbGVtZW50KTsKICAgIGlmIChib3VuZC5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgLy8gVE9ETygzMzQyMik6IFN1cHBvcnQgdHlwZSB2YXJpYWJsZXMgaW4gZGVmYXVsdAogICAgICAvLyB0eXBlcy4gVGVtcG9yYXJpbHkgdXNpbmcgdGhlICJhbnkiIHR5cGUgKGVuY29kZWQgYXMgLTIpIHRvCiAgICAgIC8vIGF2b2lkIGZhaWxpbmcgb24gYm91bmRzIGNoZWNrcy4KICAgICAgcmV0dXJuIGdyYXBoLmFkZENvbnN0YW50SW50KC0yLCBjbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQoYm91bmQsIGZ1bmN0aW9uKTsKICAgIH0KICB9CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJlZm9yZSBpbmxpbmluZyB0aGUgYm9keSBvZiBbZnVuY3Rpb25dIGludG8gdGhpcwogIC8vLyBbU3NhR3JhcGhCdWlsZGVyXS4KICB2b2lkIF9lbnRlcklubGluZWRNZXRob2QoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBjb21waWxlZEFyZ3VtZW50cywgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGUpIHsKICAgIEtlcm5lbElubGluaW5nU3RhdGUgc3RhdGUgPSBuZXcgS2VybmVsSW5saW5pbmdTdGF0ZSgKICAgICAgICBmdW5jdGlvbiwKICAgICAgICBfcmV0dXJuTG9jYWwsCiAgICAgICAgX3JldHVyblR5cGUsCiAgICAgICAgc3RhY2ssCiAgICAgICAgbG9jYWxzSGFuZGxlciwKICAgICAgICBfaW5UcnlTdGF0ZW1lbnQsCiAgICAgICAgX2lzQ2FsbGVkT25jZShmdW5jdGlvbikpOwogICAgX2lubGluaW5nU3RhY2suYWRkKHN0YXRlKTsKCiAgICAvLyBTZXR0aW5nIHVwIHRoZSBzdGF0ZSBvZiB0aGUgKEFTVCkgYnVpbGRlciBpcyBwZXJmb3JtZWQgZXZlbiB3aGVuIHRoZQogICAgLy8gaW5saW5lZCBmdW5jdGlvbiBpcyBpbiBJUiwgYmVjYXVzZSB0aGUgaXJJbmxpbmVyIHVzZXMgdGhlIFtyZXR1cm5FbGVtZW50XQogICAgLy8gb2YgdGhlIEFTVCBidWlsZGVyLgogICAgX3NldHVwU3RhdGVGb3JJbmxpbmluZyhmdW5jdGlvbiwgY29tcGlsZWRBcmd1bWVudHMsIGluc3RhbmNlVHlwZSk7CiAgfQoKICAvLy8gVGhpcyBtZXRob2Qgc2V0cyB1cCB0aGUgbG9jYWwgc3RhdGUgb2YgdGhlIGJ1aWxkZXIgZm9yIGlubGluaW5nCiAgLy8vIFtmdW5jdGlvbl0uIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uIGFyZSBpbnNlcnRlZCBpbnRvIHRoZQogIC8vLyBbbG9jYWxzSGFuZGxlcl0uCiAgLy8vCiAgLy8vIFdoZW4gaW5saW5pbmcgYSBmdW5jdGlvbiwgYHJldHVybmAgc3RhdGVtZW50cyBhcmUgbm90IGVtaXR0ZWQgYXMKICAvLy8gW0hSZXR1cm5dIGluc3RydWN0aW9ucy4gSW5zdGVhZCwgdGhlIHZhbHVlIG9mIGEgc3ludGhldGljIGVsZW1lbnQgaXMKICAvLy8gdXBkYXRlZCBpbiB0aGUgW2xvY2Fsc0hhbmRsZXJdLiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgc3VjaCBhbiBlbGVtZW50IGFuZAogIC8vLyBzdG9yZXMgaXQgaW4gdGhlIFtfcmV0dXJuTG9jYWxdIGZpZWxkLgogIHZvaWQgX3NldHVwU3RhdGVGb3JJbmxpbmluZyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGNvbXBpbGVkQXJndW1lbnRzLCBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZSkgewogICAgbG9jYWxzSGFuZGxlciA9IG5ldyBMb2NhbHNIYW5kbGVyKAogICAgICAgIHRoaXMsCiAgICAgICAgZnVuY3Rpb24sCiAgICAgICAgZnVuY3Rpb24sCiAgICAgICAgaW5zdGFuY2VUeXBlID8/IF9lbGVtZW50TWFwLmdldE1lbWJlclRoaXNUeXBlKGZ1bmN0aW9uKSwKICAgICAgICBfbmF0aXZlRGF0YSwKICAgICAgICBfaW50ZXJjZXB0b3JEYXRhKTsKICAgIGxvY2Fsc0hhbmRsZXIuc2NvcGVJbmZvID0gX2Nsb3N1cmVEYXRhTG9va3VwLmdldFNjb3BlSW5mbyhmdW5jdGlvbik7CgogICAgQ2FwdHVyZWRTY29wZSBzY29wZURhdGEgPSBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2FwdHVyZWRTY29wZShmdW5jdGlvbik7CiAgICBib29sIGZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHkgPSBmdW5jdGlvbiBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHk7CgogICAgX3JldHVybkxvY2FsID0gbmV3IFN5bnRoZXRpY0xvY2FsKCJyZXN1bHQiLCBmdW5jdGlvbiwgZnVuY3Rpb24pOwogICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChfcmV0dXJuTG9jYWwsIGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwoKICAgIF9pblRyeVN0YXRlbWVudCA9IGZhbHNlOyAvLyBUT0RPKGxyeSk6IHdoeT8gRG9jdW1lbnQuCgogICAgaW50IGFyZ3VtZW50SW5kZXggPSAwOwogICAgaWYgKGZ1bmN0aW9uLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChsb2NhbHNIYW5kbGVyLnNjb3BlSW5mby50aGlzTG9jYWwsCiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdKTsKICAgIH0KCiAgICBib29sIGhhc0JveCA9IGZhbHNlOwogICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwID0KICAgICAgICBjbG9zZWRXb3JsZC5nbG9iYWxMb2NhbHNNYXAuZ2V0TG9jYWxzTWFwKGZ1bmN0aW9uKTsKICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyKF9lbGVtZW50TWFwLCBmdW5jdGlvbiwKICAgICAgICAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwge2Jvb2wgaXNFbGlkZWR9KSB7CiAgICAgIExvY2FsIGxvY2FsID0gbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogICAgICBpZiAoaXNFbGlkZWQpIHsKICAgICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKGxvY2FsLCBfZGVmYXVsdFZhbHVlRm9yUGFyYW1ldGVyKHZhcmlhYmxlKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChmb3JHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5ICYmIHNjb3BlRGF0YS5pc0JveGVkVmFyaWFibGUobG9jYWwpKSB7CiAgICAgICAgLy8gVGhlIHBhcmFtZXRlciB3aWxsIGJlIGEgZmllbGQgaW4gdGhlIGJveCBwYXNzZWQgYXMgdGhlIGxhc3QKICAgICAgICAvLyBwYXJhbWV0ZXIuIFNvIG5vIG5lZWQgdG8gaGF2ZSBpdC4KICAgICAgICBoYXNCb3ggPSB0cnVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdOwogICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKGxvY2FsLCBhcmd1bWVudCk7CiAgICB9KTsKCiAgICBpZiAoaGFzQm94KSB7CiAgICAgIEhJbnN0cnVjdGlvbiBib3ggPSBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdOwogICAgICBhc3NlcnQoYm94IGlzIEhDcmVhdGVCb3gpOwogICAgICAvLyBUT0RPKHNyYSk6IE1ha2UgaW5saW5pbmcgb2YgY2xvc3VyZXMgd29yay4gV2Ugc2hvdWxkIGFsd2F5cyBjYWxsCiAgICAgIC8vIGVudGVyU2NvcGUsIGFuZCBwYXNzIGluIHRoZSBpbmxpbmVkICd0aGlzJyBhcyB3ZWxsIGFzIHRoZSAnYm94Jy4KICAgICAgbG9jYWxzSGFuZGxlci5lbnRlclNjb3BlKHNjb3BlRGF0YSwgbnVsbCwKICAgICAgICAgIGlubGluZWRCb3g6IGJveCwKICAgICAgICAgIGZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHk6IGZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHkpOwogICAgfQoKICAgIENsYXNzRW50aXR5IGVuY2xvc2luZyA9IGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKChmdW5jdGlvbi5pc0NvbnN0cnVjdG9yIHx8IGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSkgJiYKICAgICAgICBfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhlbmNsb3NpbmcpKSB7CiAgICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGVuY2xvc2luZyk7CiAgICAgIHRoaXNUeXBlLnR5cGVBcmd1bWVudHMuZm9yRWFjaCgoX3R5cGVWYXJpYWJsZSkgewogICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlID0gX3R5cGVWYXJpYWJsZTsKICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdOwogICAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwoCiAgICAgICAgICAgIGxvY2Fsc0hhbmRsZXIuZ2V0VHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUpLCBhcmd1bWVudCk7CiAgICAgIH0pOwogICAgfQogICAgaWYgKF9ydGlOZWVkLm1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhmdW5jdGlvbikpIHsKICAgICAgYm9vbCBpbmxpbmVUeXBlUGFyYW1ldGVycyA9CiAgICAgICAgICBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPT0gMDsKICAgICAgZm9yIChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZQogICAgICAgICAgaW4gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoZnVuY3Rpb24pKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50OwogICAgICAgIGlmIChpbmxpbmVUeXBlUGFyYW1ldGVycykgewogICAgICAgICAgLy8gQWRkIGlubGluZWQgdHlwZSBwYXJhbWV0ZXJzLgogICAgICAgICAgYXJndW1lbnQgPSBfY29tcHV0ZVR5cGVBcmd1bWVudERlZmF1bHRWYWx1ZShmdW5jdGlvbiwgdHlwZVZhcmlhYmxlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXJndW1lbnQgPSBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdOwogICAgICAgIH0KICAgICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKAogICAgICAgICAgICBsb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlKSwgYXJndW1lbnQpOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoCiAgICAgICAgYXJndW1lbnRJbmRleCA9PSBjb21waWxlZEFyZ3VtZW50cy5sZW5ndGggfHwKICAgICAgICAgICAgIV9ydGlOZWVkLm1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhmdW5jdGlvbikgJiYKICAgICAgICAgICAgICAgIGNvbXBpbGVkQXJndW1lbnRzLmxlbmd0aCAtIGFyZ3VtZW50SW5kZXggPT0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGZ1bmN0aW9uLAogICAgICAgICAgICAiT25seSAke2FyZ3VtZW50SW5kZXh9IG9mICR7Y29tcGlsZWRBcmd1bWVudHMubGVuZ3RofSAiCiAgICAgICAgICAgICJhcmd1bWVudHMgaGF2ZSBiZWVuIHJlYWQgZnJvbTogJHtjb21waWxlZEFyZ3VtZW50c30gcGFzc2VkIHRvICIKICAgICAgICAgICAgIiRmdW5jdGlvbi4iKSk7CgogICAgX3JldHVyblR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShmdW5jdGlvbikucmV0dXJuVHlwZTsKICAgIHN0YWNrID0gPEhJbnN0cnVjdGlvbj5bXTsKCiAgICBfaW5zZXJ0Q292ZXJhZ2VDYWxsKGZ1bmN0aW9uKTsKICB9CgogIHZvaWQgX2xlYXZlSW5saW5lZE1ldGhvZCgpIHsKICAgIEhJbnN0cnVjdGlvbiByZXN1bHQgPSBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChfcmV0dXJuTG9jYWwpOwogICAgS2VybmVsSW5saW5pbmdTdGF0ZSBzdGF0ZSA9IF9pbmxpbmluZ1N0YWNrLnJlbW92ZUxhc3QoKTsKICAgIF9yZXN0b3JlU3RhdGUoc3RhdGUpOwogICAgc3RhY2suYWRkKHJlc3VsdCk7CiAgfQoKICB2b2lkIF9yZXN0b3JlU3RhdGUoS2VybmVsSW5saW5pbmdTdGF0ZSBzdGF0ZSkgewogICAgbG9jYWxzSGFuZGxlciA9IHN0YXRlLm9sZExvY2Fsc0hhbmRsZXI7CiAgICBfcmV0dXJuTG9jYWwgPSBzdGF0ZS5vbGRSZXR1cm5Mb2NhbDsKICAgIF9pblRyeVN0YXRlbWVudCA9IHN0YXRlLmluVHJ5U3RhdGVtZW50OwogICAgX3JldHVyblR5cGUgPSBzdGF0ZS5vbGRSZXR1cm5UeXBlOwogICAgYXNzZXJ0KHN0YWNrLmlzRW1wdHkpOwogICAgc3RhY2sgPSBzdGF0ZS5vbGRTdGFjazsKICB9CgogIGJvb2wgX3Byb3ZpZGVkQXJndW1lbnRzS25vd25Ub0JlQ29tcGxldGUoaXIuTm9kZSBjdXJyZW50Tm9kZSkgewogICAgLyogV2hlbiBpbmxpbmluZyB0aGUgaXRlcmF0b3IgbWV0aG9kcyBnZW5lcmF0ZWQgZm9yIGEgZm9yLWluIGxvb3AsIHRoZQogICAgICogW2N1cnJlbnROb2RlXSBpcyB0aGUgW0ZvckluXSB0cmVlLiBUaGUgY29tcGlsZXItZ2VuZXJhdGVkIGl0ZXJhdG9yCiAgICAgKiBpbnZvY2F0aW9ucyBhcmUga25vd24gdG8gaGF2ZSBmdWxseSBzcGVjaWZpZWQgYXJndW1lbnQgbGlzdHMsIG5vIGRlZmF1bHQKICAgICAqIGFyZ3VtZW50cyBhcmUgdXNlZC4gU2VlIGludm9jYXRpb25zIG9mIFtwdXNoSW52b2tlRHluYW1pY10gaW4KICAgICAqIFt2aXNpdEZvckluXS4KICAgICAqLwogICAgLy8gVE9ETyhyZWRlbXB0aW9uKTogSXMgdGhpcyB2YWxpZCBoZXJlPwogICAgcmV0dXJuIGN1cnJlbnROb2RlIGlzIGlyLkZvckluU3RhdGVtZW50OwogIH0KCiAgdm9pZCBfZW1pdFJldHVybihISW5zdHJ1Y3Rpb24gdmFsdWUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAoX2lubGluaW5nU3RhY2suaXNFbXB0eSkgewogICAgICBfY2xvc2VBbmRHb3RvRXhpdCgKICAgICAgICAgIG5ldyBIUmV0dXJuKF9hYnN0cmFjdFZhbHVlRG9tYWluLCB2YWx1ZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwoX3JldHVybkxvY2FsLCB2YWx1ZSk7CiAgICB9CiAgfQoKICB2b2lkIF9kb0lubGluZShGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgX3Zpc2l0SW5saW5lZEZ1bmN0aW9uKGZ1bmN0aW9uKTsKICB9CgogIC8vLyBSdW4gdGhpcyBidWlsZGVyIG9uIHRoZSBib2R5IG9mIHRoZSBbZnVuY3Rpb25dIHRvIGJlIGlubGluZWQuCiAgdm9pZCBfdmlzaXRJbmxpbmVkRnVuY3Rpb24oRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIF9wb3RlbnRpYWxseUNoZWNrSW5saW5lZFBhcmFtZXRlclR5cGVzKGZ1bmN0aW9uKTsKCiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKGZ1bmN0aW9uKTsKICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgICBfYnVpbGRDb25zdHJ1Y3RvcihmdW5jdGlvbiwgZGVmaW5pdGlvbi5ub2RlKTsKICAgICAgICByZXR1cm47CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24uYm9keS5hY2NlcHQodGhpcyk7CiAgICAgICAgcmV0dXJuOwogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgICAgIG5vZGUuZnVuY3Rpb24uYm9keS5hY2NlcHQodGhpcyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgbm9kZS5mdW5jdGlvbi5ib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgbm9kZS5mdW5jdGlvbi5ib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgICByZXR1cm47CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBmYWlsZWRBdChmdW5jdGlvbiwgIlVuZXhwZWN0ZWQgaW5saW5lZCBmdW5jdGlvbjogJGRlZmluaXRpb24iKTsKICB9CgogIC8vLyBHZW5lcmF0ZXMgdHlwZSB0ZXN0cyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGlubGluZWQgZnVuY3Rpb24uCiAgdm9pZCBfcG90ZW50aWFsbHlDaGVja0lubGluZWRQYXJhbWV0ZXJUeXBlcyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgLy8gVE9ETyhzcmEpOiBJbmNvcnBvcmF0ZSBwcm9wZXJ0aWVzIG9mIGNhbGwgc2l0ZSB0byBoZWxwIGRldGVybWluZSB3aGljaAogICAgLy8gdHlwZSBwYXJhbWV0ZXJzIGFuZCB2YWx1ZSBwYXJhbWV0ZXJzIG5lZWQgdG8gYmUgY2hlY2tlZC4KICAgIGJvb2wgdHJ1c3RlZCA9IGZhbHNlOwogICAgaWYgKGZ1bmN0aW9uLmlzU3RhdGljIHx8CiAgICAgICAgZnVuY3Rpb24uaXNUb3BMZXZlbCB8fAogICAgICAgIGZ1bmN0aW9uLmlzQ29uc3RydWN0b3IgfHwKICAgICAgICBmdW5jdGlvbiBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHsKICAgICAgLy8gV2UgaW5saW5lIHN0YXRpYyBtZXRob2RzLCB0b3AtbGV2ZWwgbWV0aG9kcywgY29uc3RydWN0b3JzIGFuZAogICAgICAvLyBjb25zdHJ1Y3RvciBib2RpZXMgb25seSBmcm9tIGRpcmVjdCBjYWxsIHNpdGVzLgogICAgICB0cnVzdGVkID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoIXRydXN0ZWQpIHsKICAgICAgX2NoZWNrVHlwZVZhcmlhYmxlQm91bmRzKGZ1bmN0aW9uKTsKICAgIH0KCiAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAgPQogICAgICAgIGNsb3NlZFdvcmxkLmdsb2JhbExvY2Fsc01hcC5nZXRMb2NhbHNNYXAoZnVuY3Rpb24pOwogICAgZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXIoX2VsZW1lbnRNYXAsIGZ1bmN0aW9uLAogICAgICAgIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCB7Ym9vbCBpc0VsaWRlZH0pIHsKICAgICAgTG9jYWwgcGFyYW1ldGVyID0gbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChwYXJhbWV0ZXIpOwogICAgICBEYXJ0VHlwZSB0eXBlID0gbG9jYWxzTWFwLmdldExvY2FsVHlwZShfZWxlbWVudE1hcCwgcGFyYW1ldGVyKTsKICAgICAgSEluc3RydWN0aW9uIGNoZWNrZWRPclRydXN0ZWQ7CiAgICAgIGlmICh0cnVzdGVkKSB7CiAgICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90eXBlQnVpbGRlci50cnVzdFR5cGVPZlBhcmFtZXRlcihhcmd1bWVudCwgdHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZlBhcmFtZXRlcigKICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3VtZW50LCB0eXBlKTsKICAgICAgfQogICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKHBhcmFtZXRlciwgY2hlY2tlZE9yVHJ1c3RlZCk7CiAgICB9KTsKICB9CgogIGJvb2wgZ2V0IF9hbGxJbmxpbmVkRnVuY3Rpb25zQ2FsbGVkT25jZSB7CiAgICByZXR1cm4gX2lubGluaW5nU3RhY2suaXNFbXB0eSB8fCBfaW5saW5pbmdTdGFjay5sYXN0LmFsbEZ1bmN0aW9uc0NhbGxlZE9uY2U7CiAgfQoKICBib29sIF9pc0Z1bmN0aW9uQ2FsbGVkT25jZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBDb25zdHJ1Y3RvckJvZHlFbGVtZW50cyBhcmUgbm90IGluIHRoZSB0eXBlIGluZmVyZW5jZSBncmFwaC4KICAgIGlmIChlbGVtZW50IGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSkgewogICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gc3ViY2xhc3NlcyB3aXRoIGNvbnN0cnVjdG9ycyB0aGF0IGhhdmUgdGhpcyBjb25zdHJ1Y3RvcgogICAgICAvLyBhcyBhIHN1cGVyY29uc3RydWN0b3IsIGl0IGlzIGNhbGxlZCBvbmNlIGJ5IHRoZSBnZW5lcmF0aXZlCiAgICAgIC8vIGNvbnN0cnVjdG9yJ3MgZmFjdG9yeS4gIEEgc2ltcGxpZmllZCB2ZXJzaW9uIGlzIHRvIGNoZWNrIHRoaXMgaXMgYQogICAgICAvLyBjb25zdHJ1Y3RvciBib2R5IGZvciBhIGxlYWYgY2xhc3MuCiAgICAgIENsYXNzRW50aXR5IGNsYXNzXyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkKGNsYXNzXykpIHsKICAgICAgICByZXR1cm4gIWNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5kaXJlY3RseUluc3RhbnRpYXRlZChjbGFzc18pOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLnJlc3VsdE9mTWVtYmVyKGVsZW1lbnQpLmlzQ2FsbGVkT25jZTsKICB9CgogIGJvb2wgX2lzQ2FsbGVkT25jZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2FsbElubGluZWRGdW5jdGlvbnNDYWxsZWRPbmNlICYmIF9pc0Z1bmN0aW9uQ2FsbGVkT25jZShlbGVtZW50KTsKICB9CgogIHZvaWQgX2luc2VydENvdmVyYWdlQ2FsbChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKCFvcHRpb25zLmV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uKSByZXR1cm47CiAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMudHJhY2VIZWxwZXIpIHJldHVybjsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNyZWF0ZSBhIGJldHRlciB1dWlkIGZvciBlbGVtZW50cy4KICAgIEhDb25zdGFudCBpZENvbnN0YW50ID0gZ3JhcGguYWRkQ29uc3RhbnRJbnQoZWxlbWVudC5oYXNoQ29kZSwgY2xvc2VkV29ybGQpOwogICAgbihlKSA9PiBlID09IG51bGwgPyAnJyA6IGUubmFtZTsKICAgIFN0cmluZyBuYW1lID0gIiR7bihlbGVtZW50LmxpYnJhcnkpfToke24oZWxlbWVudC5lbmNsb3NpbmdDbGFzcyl9LiIKICAgICAgICAiJHtuKGVsZW1lbnQpfSI7CiAgICBIQ29uc3RhbnQgbmFtZUNvbnN0YW50ID0gZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcobmFtZSwgY2xvc2VkV29ybGQpOwogICAgYWRkKG5ldyBISW52b2tlU3RhdGljKAogICAgICAgIF9jb21tb25FbGVtZW50cy50cmFjZUhlbHBlciwKICAgICAgICA8SEluc3RydWN0aW9uPltpZENvbnN0YW50LCBuYW1lQ29uc3RhbnRdLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSkpOwogIH0KfQoKLy8vIERhdGEgY29sbGVjdGVkIHRvIGNyZWF0ZSBhIGNvbnN0cnVjdG9yLgpjbGFzcyBDb25zdHJ1Y3RvckRhdGEgewogIC8vLyBJbmxpbmVkIChzdXBlcikgY29uc3RydWN0b3JzLgogIGZpbmFsIExpc3Q8aXIuQ29uc3RydWN0b3I+IGNvbnN0cnVjdG9yQ2hhaW4gPSA8aXIuQ29uc3RydWN0b3I+W107CgogIC8vLyBJbml0aWFsIHZhbHVlcyBmb3IgYWxsIGluc3RhbmNlIGZpZWxkcy4KICBmaW5hbCBNYXA8RmllbGRFbnRpdHksIEhJbnN0cnVjdGlvbj4gZmllbGRWYWx1ZXMgPQogICAgICA8RmllbGRFbnRpdHksIEhJbnN0cnVjdGlvbj57fTsKCiAgLy8vIENsYXNzZXMgZm9yIHdoaWNoIHR5cGUgdmFyaWFibGVzIGhhdmUgYmVlbiBwcmVwYXJlZC4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGluY2x1ZGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7Cn0KCmNsYXNzIEtlcm5lbElubGluaW5nU3RhdGUgewogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uOwogIGZpbmFsIExvY2FsIG9sZFJldHVybkxvY2FsOwogIGZpbmFsIERhcnRUeXBlIG9sZFJldHVyblR5cGU7CiAgZmluYWwgTGlzdDxISW5zdHJ1Y3Rpb24+IG9sZFN0YWNrOwogIGZpbmFsIExvY2Fsc0hhbmRsZXIgb2xkTG9jYWxzSGFuZGxlcjsKICBmaW5hbCBib29sIGluVHJ5U3RhdGVtZW50OwogIGZpbmFsIGJvb2wgYWxsRnVuY3Rpb25zQ2FsbGVkT25jZTsKCiAgS2VybmVsSW5saW5pbmdTdGF0ZSgKICAgICAgdGhpcy5mdW5jdGlvbiwKICAgICAgdGhpcy5vbGRSZXR1cm5Mb2NhbCwKICAgICAgdGhpcy5vbGRSZXR1cm5UeXBlLAogICAgICB0aGlzLm9sZFN0YWNrLAogICAgICB0aGlzLm9sZExvY2Fsc0hhbmRsZXIsCiAgICAgIHRoaXMuaW5UcnlTdGF0ZW1lbnQsCiAgICAgIHRoaXMuYWxsRnVuY3Rpb25zQ2FsbGVkT25jZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdLZXJuZWxJbmxpbmluZ1N0YXRlKCRmdW5jdGlvbiwnCiAgICAgICdhbGxGdW5jdGlvbnNDYWxsZWRPbmNlPSRhbGxGdW5jdGlvbnNDYWxsZWRPbmNlKSc7Cn0KCi8vLyBDbGFzcyBpbiBjaGFyZ2Ugb2YgYnVpbGRpbmcgdHJ5LCBjYXRjaCBhbmQvb3IgZmluYWxseSBibG9ja3MuIFRoaXMgaGFuZGxlcwovLy8gdGhlIGluc3RydWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgb3V0cHV0IGFuZCB0aGUgZG9taW5hdG9yIGNhbGN1bGF0aW9uIG9mCi8vLyB0aGlzIHNlcXVlbmNlIG9mIGNvZGUuCmNsYXNzIFRyeUNhdGNoRmluYWxseUJ1aWxkZXIgewogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBrZXJuZWxCdWlsZGVyOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uIHRyeVNvdXJjZUluZm9ybWF0aW9uOwoKICBIQmFzaWNCbG9jayBlbnRlckJsb2NrOwogIEhCYXNpY0Jsb2NrIHN0YXJ0VHJ5QmxvY2s7CiAgSEJhc2ljQmxvY2sgZW5kVHJ5QmxvY2s7CiAgSEJhc2ljQmxvY2sgc3RhcnRDYXRjaEJsb2NrOwogIEhCYXNpY0Jsb2NrIGVuZENhdGNoQmxvY2s7CiAgSEJhc2ljQmxvY2sgc3RhcnRGaW5hbGx5QmxvY2s7CiAgSEJhc2ljQmxvY2sgZW5kRmluYWxseUJsb2NrOwogIEhCYXNpY0Jsb2NrIGV4aXRCbG9jazsKICBIVHJ5IHRyeUluc3RydWN0aW9uOwogIEhMb2NhbFZhbHVlIGV4Y2VwdGlvbjsKCiAgLy8vIFRydWUgaWYgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhpcyB0cnkgc3RhdGVtZW50IHdhcyBhbHNvIHBhcnQgb2YgYQogIC8vLyB0cnkvY2F0Y2gvZmluYWxseSBzdGF0ZW1lbnQuCiAgYm9vbCBwcmV2aW91c2x5SW5UcnlTdGF0ZW1lbnQ7CgogIFN1YkdyYXBoIGJvZHlHcmFwaDsKICBTdWJHcmFwaCBjYXRjaEdyYXBoOwogIFN1YkdyYXBoIGZpbmFsbHlHcmFwaDsKCiAgLy8gVGhlIG9yaWdpbmFsIHNldCBvZiBsb2NhbHMgdGhhdCB3ZXJlIGRlZmluZWQgYmVmb3JlIHRoaXMgdHJ5IGJsb2NrLgogIC8vIFRoZSBjYXRjaCBibG9jayBhbmQgdGhlIGZpbmFsbHkgYmxvY2sgbXVzdCBub3QgcmV1c2UgdGhlIGV4aXN0aW5nIGxvY2FscwogIC8vIGhhbmRsZXIuIE5vbmUgb2YgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIGluIHRoZSBib2R5LWJsb2NrCiAgLy8gd2lsbCBiZSB1c2VkLCBidXQgZm9yIGxvb3BzIHdlIHdpbGwgYWRkICh1bm5lY2Vzc2FyeSkgcGhpcyB0aGF0IHdpbGwKICAvLyByZWZlcmVuY2UgdGhlIGJvZHkgdmFyaWFibGVzLiBUaGlzIG1ha2VzIGl0IGxvb2sgYXMgaWYgdGhlIHZhcmlhYmxlcyB3ZXJlCiAgLy8gdXNlZCBpbiBhIG5vbi1kb21pbmF0ZWQgYmxvY2suCiAgTG9jYWxzSGFuZGxlciBvcmlnaW5hbFNhdmVkTG9jYWxzOwoKICBUcnlDYXRjaEZpbmFsbHlCdWlsZGVyKHRoaXMua2VybmVsQnVpbGRlciwgdGhpcy50cnlTb3VyY2VJbmZvcm1hdGlvbikgewogICAgdHJ5SW5zdHJ1Y3Rpb24gPSBuZXcgSFRyeShrZXJuZWxCdWlsZGVyLl9hYnN0cmFjdFZhbHVlRG9tYWluKTsKICAgIG9yaWdpbmFsU2F2ZWRMb2NhbHMgPSBuZXcgTG9jYWxzSGFuZGxlci5mcm9tKGtlcm5lbEJ1aWxkZXIubG9jYWxzSGFuZGxlcik7CiAgICBlbnRlckJsb2NrID0ga2VybmVsQnVpbGRlci5vcGVuTmV3QmxvY2soKTsKICAgIGtlcm5lbEJ1aWxkZXIuY2xvc2UodHJ5SW5zdHJ1Y3Rpb24pOwogICAgcHJldmlvdXNseUluVHJ5U3RhdGVtZW50ID0ga2VybmVsQnVpbGRlci5faW5UcnlTdGF0ZW1lbnQ7CiAgICBrZXJuZWxCdWlsZGVyLl9pblRyeVN0YXRlbWVudCA9IHRydWU7CgogICAgc3RhcnRUcnlCbG9jayA9IGtlcm5lbEJ1aWxkZXIuZ3JhcGguYWRkTmV3QmxvY2soKTsKICAgIGtlcm5lbEJ1aWxkZXIub3BlbihzdGFydFRyeUJsb2NrKTsKICB9CgogIHZvaWQgX2FkZEV4aXRUcnlTdWNjZXNzb3Ioc3VjY2Vzc29yKSB7CiAgICBpZiAoc3VjY2Vzc29yID09IG51bGwpIHJldHVybjsKICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgYmxvY2tzIGNyZWF0ZWQgaW5zaWRlIHRoaXMgdHJ5L2NhdGNoLCBhbmQKICAgIC8vIGF0dGFjaCBzdWNjZXNzb3IgaW5mb3JtYXRpb24gdG8gYmxvY2tzIHRoYXQgZW5kIHdpdGgKICAgIC8vIFtIRXhpdFRyeV0uCiAgICBmb3IgKGludCBpID0gc3RhcnRUcnlCbG9jay5pZDsgaSA8IHN1Y2Nlc3Nvci5pZDsgaSsrKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0ga2VybmVsQnVpbGRlci5ncmFwaC5ibG9ja3NbaV07CiAgICAgIHZhciBsYXN0ID0gYmxvY2subGFzdDsKICAgICAgaWYgKGxhc3QgaXMgSEV4aXRUcnkpIHsKICAgICAgICBibG9jay5hZGRTdWNjZXNzb3Ioc3VjY2Vzc29yKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfYWRkT3B0aW9uYWxTdWNjZXNzb3IoYmxvY2sxLCBibG9jazIpIHsKICAgIGlmIChibG9jazIgIT0gbnVsbCkgYmxvY2sxLmFkZFN1Y2Nlc3NvcihibG9jazIpOwogIH0KCiAgLy8vIEhlbHBlciBmdW5jdGlvbiB0byBzZXQgdXAgYmFzaWMgYmxvY2sgc3VjY2Vzc29ycyBmb3IgdHJ5LWNhdGNoLWZpbmFsbHkKICAvLy8gc2VxdWVuY2VzLgogIHZvaWQgX3NldEJsb2NrU3VjY2Vzc29ycygpIHsKICAgIC8vIFNldHVwIGFsbCBzdWNjZXNzb3JzLiBUaGUgZW50cnkgYmxvY2sgdGhhdCBjb250YWlucyB0aGUgW0hUcnldCiAgICAvLyBoYXMgMSkgdGhlIGJvZHksIDIpIHRoZSBjYXRjaCwgMykgdGhlIGZpbmFsbHksIGFuZCA0KSB0aGUgZXhpdAogICAgLy8gYmxvY2tzIGFzIHN1Y2Nlc3NvcnMuCiAgICBlbnRlckJsb2NrLmFkZFN1Y2Nlc3NvcihzdGFydFRyeUJsb2NrKTsKICAgIF9hZGRPcHRpb25hbFN1Y2Nlc3NvcihlbnRlckJsb2NrLCBzdGFydENhdGNoQmxvY2spOwogICAgX2FkZE9wdGlvbmFsU3VjY2Vzc29yKGVudGVyQmxvY2ssIHN0YXJ0RmluYWxseUJsb2NrKTsKICAgIGVudGVyQmxvY2suYWRkU3VjY2Vzc29yKGV4aXRCbG9jayk7CgogICAgLy8gVGhlIGJvZHkgaGFzIGVpdGhlciB0aGUgY2F0Y2ggb3IgdGhlIGZpbmFsbHkgYmxvY2sgYXMgc3VjY2Vzc29yLgogICAgaWYgKGVuZFRyeUJsb2NrICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KHN0YXJ0Q2F0Y2hCbG9jayAhPSBudWxsIHx8IHN0YXJ0RmluYWxseUJsb2NrICE9IG51bGwpOwogICAgICBlbmRUcnlCbG9jay5hZGRTdWNjZXNzb3IoCiAgICAgICAgICBzdGFydENhdGNoQmxvY2sgIT0gbnVsbCA/IHN0YXJ0Q2F0Y2hCbG9jayA6IHN0YXJ0RmluYWxseUJsb2NrKTsKICAgICAgZW5kVHJ5QmxvY2suYWRkU3VjY2Vzc29yKGV4aXRCbG9jayk7CiAgICB9CgogICAgLy8gVGhlIGNhdGNoIGJsb2NrIGhhcyBlaXRoZXIgdGhlIGZpbmFsbHkgb3IgdGhlIGV4aXQgYmxvY2sgYXMKICAgIC8vIHN1Y2Nlc3Nvci4KICAgIGVuZENhdGNoQmxvY2s/LmFkZFN1Y2Nlc3NvcigKICAgICAgICBzdGFydEZpbmFsbHlCbG9jayAhPSBudWxsID8gc3RhcnRGaW5hbGx5QmxvY2sgOiBleGl0QmxvY2spOwoKICAgIC8vIFRoZSBmaW5hbGx5IGJsb2NrIGhhcyB0aGUgZXhpdCBibG9jayBhcyBzdWNjZXNzb3IuCiAgICBlbmRGaW5hbGx5QmxvY2s/LmFkZFN1Y2Nlc3NvcihleGl0QmxvY2spOwoKICAgIC8vIElmIGEgYmxvY2sgaW5zaWRlIHRyeS9jYXRjaCBhYm9ydHMgKGVnIHdpdGggYSByZXR1cm4gc3RhdGVtZW50KSwKICAgIC8vIHdlIGV4cGxpY2l0bHkgbWFyayB0aGlzIGJsb2NrIGEgcHJlZGVjZXNzb3Igb2YgdGhlIGNhdGNoCiAgICAvLyBibG9jayBhbmQgdGhlIGZpbmFsbHkgYmxvY2suCiAgICBfYWRkRXhpdFRyeVN1Y2Nlc3NvcihzdGFydENhdGNoQmxvY2spOwogICAgX2FkZEV4aXRUcnlTdWNjZXNzb3Ioc3RhcnRGaW5hbGx5QmxvY2spOwogIH0KCiAgLy8vIEJ1aWxkIHRoZSBmaW5hbGx5e30gY2xhdXNlIG9mIGEgdHJ5L3tjYXRjaH0vZmluYWxseSBzdGF0ZW1lbnQuIE5vdGUgdGhpcwogIC8vLyBkb2VzIG5vdCBleGFtaW5lIHRoZSBib2R5IG9mIHRoZSB0cnkgY2xhdXNlLCBvbmx5IHRoZSBmaW5hbGx5IHBvcnRpb24uCiAgdm9pZCBidWlsZEZpbmFsbHlCbG9jayh2b2lkIGJ1aWxkRmluYWxpemVyKCkpIHsKICAgIGtlcm5lbEJ1aWxkZXIubG9jYWxzSGFuZGxlciA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20ob3JpZ2luYWxTYXZlZExvY2Fscyk7CiAgICBzdGFydEZpbmFsbHlCbG9jayA9IGtlcm5lbEJ1aWxkZXIuZ3JhcGguYWRkTmV3QmxvY2soKTsKICAgIGtlcm5lbEJ1aWxkZXIub3BlbihzdGFydEZpbmFsbHlCbG9jayk7CiAgICBidWlsZEZpbmFsaXplcigpOwogICAgaWYgKCFrZXJuZWxCdWlsZGVyLmlzQWJvcnRlZCgpKSB7CiAgICAgIGVuZEZpbmFsbHlCbG9jayA9CiAgICAgICAgICBrZXJuZWxCdWlsZGVyLmNsb3NlKG5ldyBIR290byhrZXJuZWxCdWlsZGVyLl9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICB9CiAgICB0cnlJbnN0cnVjdGlvbi5maW5hbGx5QmxvY2sgPSBzdGFydEZpbmFsbHlCbG9jazsKICAgIGZpbmFsbHlHcmFwaCA9CiAgICAgICAgbmV3IFN1YkdyYXBoKHN0YXJ0RmluYWxseUJsb2NrLCBrZXJuZWxCdWlsZGVyLmxhc3RPcGVuZWRCbG9jayk7CiAgfQoKICB2b2lkIGNsb3NlVHJ5Qm9keSgpIHsKICAgIC8vIFdlIHVzZSBhIFtIRXhpdFRyeV0gaW5zdGVhZCBvZiBhIFtIR290b10gZm9yIHRoZSB0cnkgYmxvY2sKICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBoYXZlIG11bHRpcGxlIHN1Y2Nlc3NvcnM6IHRoZSBqb2luIGJsb2NrLCBhbmQKICAgIC8vIHRoZSBjYXRjaCBvciBmaW5hbGx5IGJsb2NrLgogICAgaWYgKCFrZXJuZWxCdWlsZGVyLmlzQWJvcnRlZCgpKSB7CiAgICAgIGVuZFRyeUJsb2NrID0KICAgICAgICAgIGtlcm5lbEJ1aWxkZXIuY2xvc2UobmV3IEhFeGl0VHJ5KGtlcm5lbEJ1aWxkZXIuX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgIH0KICAgIGJvZHlHcmFwaCA9IG5ldyBTdWJHcmFwaChzdGFydFRyeUJsb2NrLCBrZXJuZWxCdWlsZGVyLmxhc3RPcGVuZWRCbG9jayk7CiAgfQoKICB2b2lkIGJ1aWxkQ2F0Y2goaXIuVHJ5Q2F0Y2ggdHJ5Q2F0Y2gpIHsKICAgIGtlcm5lbEJ1aWxkZXIubG9jYWxzSGFuZGxlciA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20ob3JpZ2luYWxTYXZlZExvY2Fscyk7CiAgICBzdGFydENhdGNoQmxvY2sgPSBrZXJuZWxCdWlsZGVyLmdyYXBoLmFkZE5ld0Jsb2NrKCk7CiAgICBrZXJuZWxCdWlsZGVyLm9wZW4oc3RhcnRDYXRjaEJsb2NrKTsKICAgIC8vIE5vdGUgdGhhdCB0aGUgbmFtZSBvZiB0aGlzIGxvY2FsIGlzIGlycmVsZXZhbnQuCiAgICBTeW50aGV0aWNMb2NhbCBsb2NhbCA9IGtlcm5lbEJ1aWxkZXIubG9jYWxzSGFuZGxlci5jcmVhdGVMb2NhbCgnZXhjZXB0aW9uJyk7CiAgICBleGNlcHRpb24gPQogICAgICAgIG5ldyBITG9jYWxWYWx1ZShsb2NhbCwga2VybmVsQnVpbGRlci5fYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSB0cnlTb3VyY2VJbmZvcm1hdGlvbjsKICAgIGtlcm5lbEJ1aWxkZXIuYWRkKGV4Y2VwdGlvbik7CiAgICBISW5zdHJ1Y3Rpb24gb2xkUmV0aHJvd2FibGVFeGNlcHRpb24gPSBrZXJuZWxCdWlsZGVyLl9yZXRocm93YWJsZUV4Y2VwdGlvbjsKICAgIGtlcm5lbEJ1aWxkZXIuX3JldGhyb3dhYmxlRXhjZXB0aW9uID0gZXhjZXB0aW9uOwoKICAgIGtlcm5lbEJ1aWxkZXIuX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIGtlcm5lbEJ1aWxkZXIuX2NvbW1vbkVsZW1lbnRzLmV4Y2VwdGlvblVud3JhcHBlciwKICAgICAgICBbZXhjZXB0aW9uXSwKICAgICAgICBrZXJuZWxCdWlsZGVyLl90eXBlSW5mZXJlbmNlTWFwCiAgICAgICAgICAgIC5nZXRSZXR1cm5UeXBlT2Yoa2VybmVsQnVpbGRlci5fY29tbW9uRWxlbWVudHMuZXhjZXB0aW9uVW53cmFwcGVyKSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHRyeVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIEhJbnZva2VTdGF0aWMgdW53cmFwcGVkRXhjZXB0aW9uID0ga2VybmVsQnVpbGRlci5wb3AoKTsKICAgIHRyeUluc3RydWN0aW9uLmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKICAgIGludCBjYXRjaGVzSW5kZXggPSAwOwoKICAgIHZvaWQgcHVzaENvbmRpdGlvbihpci5DYXRjaCBjYXRjaEJsb2NrKSB7CiAgICAgIC8vIGBndWFyZGAgaXMgb2Z0ZW4gYGR5bmFtaWNgLCB3aGljaCBnZW5lcmF0ZXMgYHRydWVgLgogICAgICBrZXJuZWxCdWlsZGVyLl9wdXNoSXNUZXN0KGNhdGNoQmxvY2suZ3VhcmQsIHVud3JhcHBlZEV4Y2VwdGlvbiwKICAgICAgICAgIGtlcm5lbEJ1aWxkZXIuX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhdGNoKGNhdGNoQmxvY2spKTsKICAgIH0KCiAgICB2b2lkIHZpc2l0VGhlbigpIHsKICAgICAgaXIuQ2F0Y2ggY2F0Y2hCbG9jayA9IHRyeUNhdGNoLmNhdGNoZXNbY2F0Y2hlc0luZGV4XTsKICAgICAgY2F0Y2hlc0luZGV4Kys7CiAgICAgIGlmIChjYXRjaEJsb2NrLmV4Y2VwdGlvbiAhPSBudWxsKSB7CiAgICAgICAgTG9jYWwgZXhjZXB0aW9uVmFyaWFibGUgPQogICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShjYXRjaEJsb2NrLmV4Y2VwdGlvbik7CiAgICAgICAga2VybmVsQnVpbGRlci5sb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKAogICAgICAgICAgICBleGNlcHRpb25WYXJpYWJsZSwgdW53cmFwcGVkRXhjZXB0aW9uLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjoKICAgICAgICAgICAgICAgIGtlcm5lbEJ1aWxkZXIuX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhdGNoKGNhdGNoQmxvY2spKTsKICAgICAgfQogICAgICBpZiAoY2F0Y2hCbG9jay5zdGFja1RyYWNlICE9IG51bGwpIHsKICAgICAgICBrZXJuZWxCdWlsZGVyLl9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAga2VybmVsQnVpbGRlci5fY29tbW9uRWxlbWVudHMudHJhY2VGcm9tRXhjZXB0aW9uLAogICAgICAgICAgICBbZXhjZXB0aW9uXSwKICAgICAgICAgICAga2VybmVsQnVpbGRlci5fdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YoCiAgICAgICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9jb21tb25FbGVtZW50cy50cmFjZUZyb21FeGNlcHRpb24pLAogICAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOgogICAgICAgICAgICAgICAga2VybmVsQnVpbGRlci5fc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2F0Y2goY2F0Y2hCbG9jaykpOwogICAgICAgIEhJbnN0cnVjdGlvbiB0cmFjZUluc3RydWN0aW9uID0ga2VybmVsQnVpbGRlci5wb3AoKTsKICAgICAgICBMb2NhbCB0cmFjZVZhcmlhYmxlID0KICAgICAgICAgICAga2VybmVsQnVpbGRlci5fbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUoY2F0Y2hCbG9jay5zdGFja1RyYWNlKTsKICAgICAgICBrZXJuZWxCdWlsZGVyLmxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwodHJhY2VWYXJpYWJsZSwgdHJhY2VJbnN0cnVjdGlvbiwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246CiAgICAgICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYXRjaChjYXRjaEJsb2NrKSk7CiAgICAgIH0KICAgICAgY2F0Y2hCbG9jay5ib2R5LmFjY2VwdChrZXJuZWxCdWlsZGVyKTsKICAgIH0KCiAgICB2b2lkIHZpc2l0RWxzZSgpIHsKICAgICAgaWYgKGNhdGNoZXNJbmRleCA+PSB0cnlDYXRjaC5jYXRjaGVzLmxlbmd0aCkgewogICAgICAgIGtlcm5lbEJ1aWxkZXIuX2Nsb3NlQW5kR290b0V4aXQobmV3IEhUaHJvdygKICAgICAgICAgICAga2VybmVsQnVpbGRlci5fYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgICAgICAgZXhjZXB0aW9uLAogICAgICAgICAgICBleGNlcHRpb24uc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICAgIGlzUmV0aHJvdzogdHJ1ZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIGlyLkNhdGNoIG5leHRDYXRjaCA9IHRyeUNhdGNoLmNhdGNoZXNbY2F0Y2hlc0luZGV4XTsKICAgICAgICBrZXJuZWxCdWlsZGVyLl9oYW5kbGVJZigKICAgICAgICAgICAgdmlzaXRDb25kaXRpb246ICgpIHsKICAgICAgICAgICAgICBwdXNoQ29uZGl0aW9uKG5leHRDYXRjaCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHZpc2l0VGhlbjogdmlzaXRUaGVuLAogICAgICAgICAgICB2aXNpdEVsc2U6IHZpc2l0RWxzZSwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246CiAgICAgICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYXRjaChuZXh0Q2F0Y2gpKTsKICAgICAgfQogICAgfQoKICAgIGlyLkNhdGNoIGZpcnN0QmxvY2sgPSB0cnlDYXRjaC5jYXRjaGVzW2NhdGNoZXNJbmRleF07CiAgICBrZXJuZWxCdWlsZGVyLl9oYW5kbGVJZigKICAgICAgICB2aXNpdENvbmRpdGlvbjogKCkgewogICAgICAgICAgcHVzaENvbmRpdGlvbihmaXJzdEJsb2NrKTsKICAgICAgICB9LAogICAgICAgIHZpc2l0VGhlbjogdmlzaXRUaGVuLAogICAgICAgIHZpc2l0RWxzZTogdmlzaXRFbHNlLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOgogICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYXRjaChmaXJzdEJsb2NrKSk7CiAgICBpZiAoIWtlcm5lbEJ1aWxkZXIuaXNBYm9ydGVkKCkpIHsKICAgICAgZW5kQ2F0Y2hCbG9jayA9CiAgICAgICAgICBrZXJuZWxCdWlsZGVyLmNsb3NlKG5ldyBIR290byhrZXJuZWxCdWlsZGVyLl9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICB9CgogICAga2VybmVsQnVpbGRlci5fcmV0aHJvd2FibGVFeGNlcHRpb24gPSBvbGRSZXRocm93YWJsZUV4Y2VwdGlvbjsKICAgIHRyeUluc3RydWN0aW9uLmNhdGNoQmxvY2sgPSBzdGFydENhdGNoQmxvY2s7CiAgICBjYXRjaEdyYXBoID0gbmV3IFN1YkdyYXBoKHN0YXJ0Q2F0Y2hCbG9jaywga2VybmVsQnVpbGRlci5sYXN0T3BlbmVkQmxvY2spOwogIH0KCiAgdm9pZCBjbGVhblVwKCkgewogICAgZXhpdEJsb2NrID0ga2VybmVsQnVpbGRlci5ncmFwaC5hZGROZXdCbG9jaygpOwogICAgX3NldEJsb2NrU3VjY2Vzc29ycygpOwoKICAgIC8vIFVzZSB0aGUgbG9jYWxzIGhhbmRsZXIgbm90IGFsdGVyZWQgYnkgdGhlIGNhdGNoIGFuZCBmaW5hbGx5CiAgICAvLyBibG9ja3MuCiAgICBrZXJuZWxCdWlsZGVyLmxvY2Fsc0hhbmRsZXIgPSBvcmlnaW5hbFNhdmVkTG9jYWxzOwogICAga2VybmVsQnVpbGRlci5vcGVuKGV4aXRCbG9jayk7CiAgICBlbnRlckJsb2NrLnNldEJsb2NrRmxvdygKICAgICAgICBuZXcgSFRyeUJsb2NrSW5mb3JtYXRpb24oCiAgICAgICAgICAgIGtlcm5lbEJ1aWxkZXIud3JhcFN0YXRlbWVudEdyYXBoKGJvZHlHcmFwaCksCiAgICAgICAgICAgIGV4Y2VwdGlvbiwKICAgICAgICAgICAga2VybmVsQnVpbGRlci53cmFwU3RhdGVtZW50R3JhcGgoY2F0Y2hHcmFwaCksCiAgICAgICAgICAgIGtlcm5lbEJ1aWxkZXIud3JhcFN0YXRlbWVudEdyYXBoKGZpbmFsbHlHcmFwaCkpLAogICAgICAgIGV4aXRCbG9jayk7CiAgICBrZXJuZWxCdWlsZGVyLl9pblRyeVN0YXRlbWVudCA9IHByZXZpb3VzbHlJblRyeVN0YXRlbWVudDsKICB9Cn0KCmNsYXNzIEtlcm5lbFR5cGVCdWlsZGVyIGV4dGVuZHMgVHlwZUJ1aWxkZXIgewogIEpzVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwoKICBLZXJuZWxUeXBlQnVpbGRlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlciwgdGhpcy5fZWxlbWVudE1hcCkKICAgICAgOiBzdXBlcihidWlsZGVyKTsKCiAgQG92ZXJyaWRlCiAgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGdldCBidWlsZGVyID0+IHN1cGVyLmJ1aWxkZXI7CgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGNvbXB1dGVUeXBlVmFyaWFibGVBY2Nlc3MoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzRm9yTWVtYmVyKG1lbWJlcik7CiAgfQp9CgpjbGFzcyBfRXJyb25lb3VzSW5pdGlhbGl6ZXJWaXNpdG9yIGV4dGVuZHMgaXIuVmlzaXRvcjxib29sPiB7CiAgX0Vycm9uZW91c0luaXRpYWxpemVyVmlzaXRvcigpOwoKICAvLyBUT0RPKDMwODA5KTogVXNlIGNvbnN0IGNvbnN0cnVjdG9yLgogIHN0YXRpYyBib29sIGNoZWNrKGlyLkluaXRpYWxpemVyIGluaXRpYWxpemVyKSA9PgogICAgICBpbml0aWFsaXplci5hY2NlcHQobmV3IF9FcnJvbmVvdXNJbml0aWFsaXplclZpc2l0b3IoKSk7CgogIEBvdmVycmlkZQogIGJvb2wgZGVmYXVsdEluaXRpYWxpemVyKGlyLk5vZGUgbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnZhbGlkSW5pdGlhbGl6ZXIoaXIuSW52YWxpZEluaXRpYWxpemVyIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMb2NhbEluaXRpYWxpemVyKGlyLkxvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXI/LmFjY2VwdCh0aGlzKSA/PyBmYWxzZTsKICB9CgogIC8vIEV4cHJlc3Npb25zOiBEb2VzIHRoZSBleHByZXNzaW9uIGFsd2F5cyB0aHJvdz8KICBAb3ZlcnJpZGUKICBib29sIGRlZmF1bHRFeHByZXNzaW9uKGlyLkV4cHJlc3Npb24gbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSA9PiB0cnVlOwoKICAvLyBUT0RPKHNyYSk6IFdlIG1pZ2h0IG5lZWQgdG8gbWF0Y2ggb3RoZXIgZXhwcmVzc2lvbnMgdGhhdCBhbHdheXMgdGhyb3cgYnV0CiAgLy8gaW4gYSBzdWJleHByZXNzaW9uLgp9CgovLy8gU3BlY2lhbCBbSnVtcEhhbmRsZXJdIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gaGFuZGxlIGNvbnRpbnVlIHN0YXRlbWVudHMKLy8vIHRhcmdldGluZyBzd2l0Y2ggY2FzZXMuCmNsYXNzIEtlcm5lbFN3aXRjaENhc2VKdW1wSGFuZGxlciBleHRlbmRzIFN3aXRjaENhc2VKdW1wSGFuZGxlciB7CiAgS2VybmVsU3dpdGNoQ2FzZUp1bXBIYW5kbGVyKEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyLCBKdW1wVGFyZ2V0IHRhcmdldCwKICAgICAgaXIuU3dpdGNoU3RhdGVtZW50IHN3aXRjaFN0YXRlbWVudCwgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwKQogICAgICA6IHN1cGVyKGJ1aWxkZXIsIHRhcmdldCkgewogICAgLy8gVGhlIHN3aXRjaCBjYXNlIGluZGljZXMgbXVzdCBtYXRjaCB0aG9zZSBjb21wdXRlZCBpbgogICAgLy8gW0tlcm5lbFNzYUJ1aWxkZXIuYnVpbGRTd2l0Y2hDYXNlQ29uc3RhbnRzXS4KICAgIC8vIFN3aXRjaCBpbmRpY2VzIGFyZSAxLWJhc2VkIHNvIHdlIGNhbiBieXBhc3MgdGhlIHN5bnRoZXRpYyBsb29wIHdoZW4gbm8KICAgIC8vIGNhc2VzIG1hdGNoIHNpbXBseSBieSBicmFuY2hpbmcgb24gdGhlIGluZGV4ICh3aGljaCBkZWZhdWx0cyB0byBudWxsKS4KICAgIC8vIFRPRE8KICAgIGludCBzd2l0Y2hJbmRleCA9IDE7CiAgICBmb3IgKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBzd2l0Y2hTdGF0ZW1lbnQuY2FzZXMpIHsKICAgICAgSnVtcFRhcmdldCBjb250aW51ZVRhcmdldCA9CiAgICAgICAgICBsb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvclN3aXRjaENhc2Uoc3dpdGNoQ2FzZSk7CiAgICAgIGlmIChjb250aW51ZVRhcmdldCAhPSBudWxsKSB7CiAgICAgICAgdGFyZ2V0SW5kZXhNYXBbY29udGludWVUYXJnZXRdID0gc3dpdGNoSW5kZXg7CiAgICAgICAgYXNzZXJ0KGJ1aWxkZXIuanVtcFRhcmdldHNbY29udGludWVUYXJnZXRdID09IG51bGwpOwogICAgICAgIGJ1aWxkZXIuanVtcFRhcmdldHNbY29udGludWVUYXJnZXRdID0gdGhpczsKICAgICAgfQogICAgICBzd2l0Y2hJbmRleCsrOwogICAgfQogIH0KfQoKY2xhc3MgU3RhdGljVHlwZSB7CiAgZmluYWwgRGFydFR5cGUgdHlwZTsKICBmaW5hbCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uOwoKICBTdGF0aWNUeXBlKHRoaXMudHlwZSwgdGhpcy5yZWxhdGlvbik7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdHlwZS5oYXNoQ29kZSAqIDEzICsgcmVsYXRpb24uaGFzaENvZGUgKiAxOTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFN0YXRpY1R5cGUgJiYKICAgICAgICB0eXBlID09IG90aGVyLnR5cGUgJiYKICAgICAgICByZWxhdGlvbiA9PSBvdGhlci5yZWxhdGlvbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTdGF0aWNUeXBlKCR0eXBlLCRyZWxhdGlvbiknOwp9CgpjbGFzcyBJbmxpbmVEYXRhIHsKICBib29sIGlzQ29uc3RydWN0b3IgPSBmYWxzZTsKICBib29sIGNvZGVBZnRlclJldHVybiA9IGZhbHNlOwogIGJvb2wgaGFzTG9vcCA9IGZhbHNlOwogIGJvb2wgaGFzQ2xvc3VyZSA9IGZhbHNlOwogIGJvb2wgaGFzVHJ5ID0gZmFsc2U7CiAgYm9vbCBoYXNBc3luY0F3YWl0ID0gZmFsc2U7CiAgYm9vbCBoYXNUaHJvdyA9IGZhbHNlOwogIGJvb2wgaGFzTG9uZ1N0cmluZyA9IGZhbHNlOwogIGJvb2wgaGFzRXh0ZXJuYWxDb25zdGFudENvbnN0cnVjdG9yQ2FsbCA9IGZhbHNlOwogIGJvb2wgaGFzVHlwZUFyZ3VtZW50cyA9IGZhbHNlOwogIGJvb2wgaGFzQXJndW1lbnREZWZhdWx0aW5nID0gZmFsc2U7CiAgYm9vbCBoYXNDYXN0ID0gZmFsc2U7CiAgYm9vbCBoYXNJZiA9IGZhbHNlOwogIExpc3Q8aW50PiBhcmd1bWVudENvdW50cyA9IFtdOwogIGludCByZWd1bGFyTm9kZUNvdW50ID0gMDsKICBpbnQgY2FsbENvdW50ID0gMDsKICBpbnQgcmVkdWN0aXZlTm9kZUNvdW50ID0gMDsKCiAgSW5saW5lRGF0YSgpOwoKICBJbmxpbmVEYXRhLmludGVybmFsKAogICAgICB7dGhpcy5jb2RlQWZ0ZXJSZXR1cm4sCiAgICAgIHRoaXMuaGFzTG9vcCwKICAgICAgdGhpcy5oYXNDbG9zdXJlLAogICAgICB0aGlzLmhhc1RyeSwKICAgICAgdGhpcy5oYXNBc3luY0F3YWl0LAogICAgICB0aGlzLmhhc1Rocm93LAogICAgICB0aGlzLmhhc0xvbmdTdHJpbmcsCiAgICAgIHRoaXMucmVndWxhck5vZGVDb3VudCwKICAgICAgdGhpcy5jYWxsQ291bnR9KTsKCiAgYm9vbCBjYW5CZUlubGluZWQoe2ludCBtYXhJbmxpbmluZ05vZGVzLCBib29sIGFsbG93TG9vcHM6IGZhbHNlfSkgewogICAgcmV0dXJuIGNhbm5vdEJlSW5saW5lZFJlYXNvbigKICAgICAgICAgICAgbWF4SW5saW5pbmdOb2RlczogbWF4SW5saW5pbmdOb2RlcywgYWxsb3dMb29wczogYWxsb3dMb29wcykgPT0KICAgICAgICBudWxsOwogIH0KCiAgU3RyaW5nIGNhbm5vdEJlSW5saW5lZFJlYXNvbih7aW50IG1heElubGluaW5nTm9kZXMsIGJvb2wgYWxsb3dMb29wczogZmFsc2V9KSB7CiAgICBpZiAoaGFzTG9vcCAmJiAhYWxsb3dMb29wcykgewogICAgICByZXR1cm4gJ2xvb3AnOwogICAgfSBlbHNlIGlmIChoYXNUcnkpIHsKICAgICAgcmV0dXJuICd0cnknOwogICAgfSBlbHNlIGlmIChoYXNDbG9zdXJlKSB7CiAgICAgIHJldHVybiAnY2xvc3VyZSc7CiAgICB9IGVsc2UgaWYgKGNvZGVBZnRlclJldHVybikgewogICAgICByZXR1cm4gJ2NvZGUgYWZ0ZXIgcmV0dXJuJzsKICAgIH0gZWxzZSBpZiAoaGFzQXN5bmNBd2FpdCkgewogICAgICByZXR1cm4gJ2FzeW5jL2F3YWl0JzsKICAgIH0gZWxzZSBpZiAobWF4SW5saW5pbmdOb2RlcyAhPSBudWxsICYmCiAgICAgICAgcmVndWxhck5vZGVDb3VudCAtIDEgPiBtYXhJbmxpbmluZ05vZGVzKSB7CiAgICAgIHJldHVybiAndG9vIG1hbnkgbm9kZXMgKCR7cmVndWxhck5vZGVDb3VudCAtIDF9PiRtYXhJbmxpbmluZ05vZGVzKSc7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgY2FuQmVJbmxpbmVkUmVkdWN0aXZlKHtpbnQgYXJndW1lbnRDb3VudH0pIHsKICAgIHJldHVybiBjYW5ub3RCZUlubGluZWRSZWR1Y3RpdmVSZWFzb24oYXJndW1lbnRDb3VudDogYXJndW1lbnRDb3VudCkgPT0gbnVsbDsKICB9CgogIFN0cmluZyBjYW5ub3RCZUlubGluZWRSZWR1Y3RpdmVSZWFzb24oe2ludCBhcmd1bWVudENvdW50fSkgewogICAgaWYgKGhhc1RyeSkgewogICAgICByZXR1cm4gJ3RyeSc7CiAgICB9IGVsc2UgaWYgKGhhc0Nsb3N1cmUpIHsKICAgICAgcmV0dXJuICdjbG9zdXJlJzsKICAgIH0gZWxzZSBpZiAoY29kZUFmdGVyUmV0dXJuKSB7CiAgICAgIHJldHVybiAnY29kZSBhZnRlciByZXR1cm4nOwogICAgfSBlbHNlIGlmIChoYXNBc3luY0F3YWl0KSB7CiAgICAgIHJldHVybiAnYXN5bmMvYXdhaXQnOwogICAgfSBlbHNlIGlmIChjYWxsQ291bnQgPiAxKSB7CiAgICAgIHJldHVybiAndG9vIG1hbnkgY2FsbHMnOwogICAgfSBlbHNlIGlmIChoYXNUaHJvdykgewogICAgICByZXR1cm4gJ3Rocm93JzsKICAgIH0gZWxzZSBpZiAoaGFzTG9uZ1N0cmluZykgewogICAgICByZXR1cm4gJ2xvbmcgc3RyaW5nJzsKICAgIH0gZWxzZSBpZiAoaGFzRXh0ZXJuYWxDb25zdGFudENvbnN0cnVjdG9yQ2FsbCkgewogICAgICByZXR1cm4gJ2V4dGVybmFsIGNvbnN0IGNvbnN0cnVjdG9yJzsKICAgIH0gZWxzZSBpZiAoaGFzVHlwZUFyZ3VtZW50cykgewogICAgICByZXR1cm4gJ3R5cGUgYXJndW1lbnRzJzsKICAgIH0gZWxzZSBpZiAoaGFzQXJndW1lbnREZWZhdWx0aW5nKSB7CiAgICAgIHJldHVybiAnYXJndW1lbnQgZGVmYXVsdGluZyc7CiAgICB9IGVsc2UgaWYgKGhhc0Nhc3QpIHsKICAgICAgcmV0dXJuICdjYXN0JzsKICAgIH0gZWxzZSBpZiAoaGFzSWYpIHsKICAgICAgcmV0dXJuICdpZic7CiAgICB9IGVsc2UgaWYgKGlzQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuICdjb25zdHJ1Y3Rvcic7CiAgICB9CiAgICBmb3IgKGludCBjb3VudCBpbiBhcmd1bWVudENvdW50cykgewogICAgICBpZiAoY291bnQgPiBhcmd1bWVudENvdW50KSB7CiAgICAgICAgcmV0dXJuICdpbmNyZWFzaW5nIGFyZ3VtZW50cyc7CiAgICAgIH0KICAgIH0KICAgIC8vIE5vZGUgYnVkZ2V0IHRoYXQgY292ZXJzIG9uZSBjYWxsIGFuZCB0aGUgcGFzc2VkLWluIGFyZ3VtZW50cy4KICAgIC8vIFRoZSArMSBhbHNvIGFsbG93cyBhIHRvcC1sZXZlbCB6ZXJvLWFyZ3VtZW50IHRvIGJlIGlubGluZWQgaWYgaXQKICAgIC8vIHJldHVybnMgYSBjb25zdGFudC4KICAgIGludCBtYXhJbmxpbmluZ05vZGVzID0gYXJndW1lbnRDb3VudCArIDE7CiAgICBpZiAocmVkdWN0aXZlTm9kZUNvdW50ID4gbWF4SW5saW5pbmdOb2RlcykgewogICAgICByZXR1cm4gJ3RvbyBtYW55IG5vZGVzICgke3JlZHVjdGl2ZU5vZGVDb3VudH0+JG1heElubGluaW5nTm9kZXMpJzsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdJbmxpbmVEYXRhKCcpOwogICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICBpZiAoaXNDb25zdHJ1Y3RvcikgewogICAgICBzYi53cml0ZSgnaXNDb25zdHJ1Y3RvcicpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChjb2RlQWZ0ZXJSZXR1cm4pIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnY29kZUFmdGVyUmV0dXJuJyk7CiAgICAgIGNvbW1hID0gJywnOwogICAgfQogICAgaWYgKGhhc0xvb3ApIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnaGFzTG9vcCcpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChoYXNDbG9zdXJlKSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc0Nsb3N1cmUnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzVHJ5KSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc1RyeScpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChoYXNBc3luY0F3YWl0KSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc0FzeW5jQXdhaXQnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzVGhyb3cpIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnaGFzVGhyb3cnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzTG9uZ1N0cmluZykgewogICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgIHNiLndyaXRlKCdoYXNMb25nU3RyaW5nJyk7CiAgICAgIGNvbW1hID0gJywnOwogICAgfQogICAgaWYgKGhhc0V4dGVybmFsQ29uc3RhbnRDb25zdHJ1Y3RvckNhbGwpIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnaGFzRXh0ZXJuYWxDb25zdGFudENvbnN0cnVjdG9yQ2FsbCcpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChoYXNUeXBlQXJndW1lbnRzKSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc1R5cGVBcmd1bWVudHMnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzQXJndW1lbnREZWZhdWx0aW5nKSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc0FyZ3VtZW50RGVmYXVsdGluZycpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChoYXNDYXN0KSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc0Nhc3QnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzSWYpIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnaGFzSWYnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoYXJndW1lbnRDb3VudHMuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgIHNiLndyaXRlKCdhcmd1bWVudENvdW50cz17JHthcmd1bWVudENvdW50cy5qb2luKCcsJyl9fScpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIHNiLndyaXRlKGNvbW1hKTsKICAgIHNiLndyaXRlKCdyZWd1bGFyTm9kZUNvdW50PSRyZWd1bGFyTm9kZUNvdW50LCcpOwogICAgc2Iud3JpdGUoJ2NhbGxDb3VudD0kY2FsbENvdW50LCcpOwogICAgc2Iud3JpdGUoJ3JlZHVjdGl2ZU5vZGVDb3VudD0kcmVkdWN0aXZlTm9kZUNvdW50Jyk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBJbmxpbmVEYXRhQ2FjaGUgewogIGZpbmFsIGJvb2wgZW5hYmxlVXNlckFzc2VydGlvbnM7CiAgZmluYWwgYm9vbCBvbWl0SW1wbGljaXRDYXN0czsKCiAgSW5saW5lRGF0YUNhY2hlKAogICAgICB7dGhpcy5lbmFibGVVc2VyQXNzZXJ0aW9uczogZmFsc2UsIHRoaXMub21pdEltcGxpY2l0Q2FzdHM6IGZhbHNlfSk7CgogIE1hcDxGdW5jdGlvbkVudGl0eSwgSW5saW5lRGF0YT4gX2NhY2hlID0ge307CgogIElubGluZURhdGEgZ2V0SW5saW5lRGF0YShKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIF9jYWNoZVtmdW5jdGlvbl0gPz89IElubGluZVdlZWRlci5jb21wdXRlSW5saW5lRGF0YSgKICAgICAgICBlbGVtZW50TWFwLCBmdW5jdGlvbiwKICAgICAgICBlbmFibGVVc2VyQXNzZXJ0aW9uczogZW5hYmxlVXNlckFzc2VydGlvbnMsCiAgICAgICAgb21pdEltcGxpY2l0Q2FzdHM6IG9taXRJbXBsaWNpdENhc3RzKTsKICB9Cn0KCmNsYXNzIElubGluZVdlZWRlciBleHRlbmRzIGlyLlZpc2l0b3IgewogIC8vIEludmFyaWFudDogKklOU0lERV9MT09QKiA+ICpPVVRTSURFX0xPT1AqCiAgc3RhdGljIGNvbnN0IElOTElOSU5HX05PREVTX09VVFNJREVfTE9PUCA9IDE1OwogIHN0YXRpYyBjb25zdCBJTkxJTklOR19OT0RFU19PVVRTSURFX0xPT1BfQVJHX0ZBQ1RPUiA9IDM7CiAgc3RhdGljIGNvbnN0IElOTElOSU5HX05PREVTX0lOU0lERV9MT09QID0gMzQ7CiAgc3RhdGljIGNvbnN0IElOTElOSU5HX05PREVTX0lOU0lERV9MT09QX0FSR19GQUNUT1IgPSA0OwoKICBmaW5hbCBib29sIGVuYWJsZVVzZXJBc3NlcnRpb25zOwogIGZpbmFsIGJvb2wgb21pdEltcGxpY2l0Q2FzdHM7CgogIGZpbmFsIElubGluZURhdGEgZGF0YSA9IG5ldyBJbmxpbmVEYXRhKCk7CiAgYm9vbCBzZWVuUmV0dXJuID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIG5vZGUtY291bnQgaXMgY29sbGVjdG9yIHRvIGRldGVybWluZSBpZiBhIGZ1bmN0aW9uIGNhbiBiZQogIC8vLyBpbmxpbmVkLgogIGJvb2wgY291bnRSZWd1bGFyTm9kZSA9IHRydWU7CgogIC8vLyBXaGV0aGVyIG5vZGUtY291bnQgaXMgY29sbGVjdGVkIHRvIGRldGVybWluZSBpZiBpbmxpbmluZyBhIGZ1bmN0aW9uIGlzCiAgLy8vIHZlcnkgbGlrZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgLy8vCiAgLy8vIEZvciB0aGUgcmVkdWN0aXZlIGFuYWx5c2lzOgogIC8vLyBXZSBhbGxvdyB0aGUgYm9keSB0byBiZSBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgbW9yZQogIC8vLyBpbnB1dHMgdGhhbiB0aGUgaW5saW5lZS4KICAvLy8KICAvLy8gV2UgYWxsb3cgdGhlIGJvZHkgdG8gYmUgdGhlIHJldHVybiBvZiBhbiAnZWxpZ2libGUnIGNvbnN0YW50LiBBIGNvbnN0YW50CiAgLy8vIGlzICdlbGlnaWJsZScgaWYgaXQgaXMgbm90IGxhcmdlIChlLmcuIGEgbG9uZyBzdHJpbmcpLgogIC8vLwogIC8vLyBXZSBza2lwICdlIGFze1R5cGVFcnJvcn0gVCcgd2hlbiB0aGUgY2hlY2tzIGFyZSBvbWl0dGVkLgogIC8vCiAgLy8gVE9ETyhzcmEpOiBDb25zaWRlciBzbGlnaHRseSBleHBhbnNpdmUgc2ltcGxlIGNvbnN0cnVjdG9ycyB3aGVyZSBhbGwgd2UKICAvLyBnYWluIGlzIGEgJ25ldycga2V5d29yZCwgZS5nLiBgbmV3IFguRm9vKGEpYCB2cyBgWC5Gb28kKGEpYC4KICAvLwogIC8vIFRPRE8oMjUyMzEpOiBNYWtlIGxhcmdlciBzdHJpbmcgY29uc3RhbnRzIGVsaWdpYmxlIGJ5IHNoYXJpbmcgcmVmZXJlbmNlcy4KICBib29sIGNvdW50UmVkdWN0aXZlTm9kZSA9IHRydWU7CgogIElubGluZVdlZWRlcigKICAgICAge3RoaXMuZW5hYmxlVXNlckFzc2VydGlvbnM6IGZhbHNlLCB0aGlzLm9taXRJbXBsaWNpdENhc3RzOiBmYWxzZX0pOwoKICBzdGF0aWMgSW5saW5lRGF0YSBjb21wdXRlSW5saW5lRGF0YSgKICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sCiAgICAgIHtib29sIGVuYWJsZVVzZXJBc3NlcnRpb25zOiBmYWxzZSwgYm9vbCBvbWl0SW1wbGljaXRDYXN0czogZmFsc2V9KSB7CiAgICBJbmxpbmVXZWVkZXIgdmlzaXRvciA9IG5ldyBJbmxpbmVXZWVkZXIoCiAgICAgICAgZW5hYmxlVXNlckFzc2VydGlvbnM6IGVuYWJsZVVzZXJBc3NlcnRpb25zLAogICAgICAgIG9taXRJbXBsaWNpdENhc3RzOiBvbWl0SW1wbGljaXRDYXN0cyk7CiAgICBpci5GdW5jdGlvbk5vZGUgbm9kZSA9IGdldEZ1bmN0aW9uTm9kZShlbGVtZW50TWFwLCBmdW5jdGlvbik7CiAgICBub2RlLmFjY2VwdCh2aXNpdG9yKTsKICAgIGlmIChmdW5jdGlvbi5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIHZpc2l0b3IuZGF0YS5pc0NvbnN0cnVjdG9yID0gdHJ1ZTsKICAgICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKGZ1bmN0aW9uKTsKICAgICAgdmlzaXRvci5za2lwUmVkdWN0aXZlTm9kZXMoKCkgewogICAgICAgIGlyLk5vZGUgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICAgICAgdmlzaXRvci52aXNpdExpc3Qobm9kZS5pbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gdmlzaXRvci5kYXRhOwogIH0KCiAgdm9pZCBza2lwUmVndWxhck5vZGVzKHZvaWQgZigpKSB7CiAgICBib29sIG9sZENvdW50UmVndWxhck5vZGUgPSBjb3VudFJlZ3VsYXJOb2RlOwogICAgY291bnRSZWd1bGFyTm9kZSA9IGZhbHNlOwogICAgZigpOwogICAgY291bnRSZWd1bGFyTm9kZSA9IG9sZENvdW50UmVndWxhck5vZGU7CiAgfQoKICB2b2lkIHNraXBSZWR1Y3RpdmVOb2Rlcyh2b2lkIGYoKSkgewogICAgYm9vbCBvbGRDb3VudFJlZHVjdGl2ZU5vZGUgPSBjb3VudFJlZHVjdGl2ZU5vZGU7CiAgICBjb3VudFJlZHVjdGl2ZU5vZGUgPSBmYWxzZTsKICAgIGYoKTsKICAgIGNvdW50UmVkdWN0aXZlTm9kZSA9IG9sZENvdW50UmVkdWN0aXZlTm9kZTsKICB9CgogIHZvaWQgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpIHsKICAgIGlmIChjb3VudFJlZ3VsYXJOb2RlKSB7CiAgICAgIGRhdGEucmVndWxhck5vZGVDb3VudCsrOwogICAgICBpZiAoc2VlblJldHVybikgewogICAgICAgIGRhdGEuY29kZUFmdGVyUmV0dXJuID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZWdpc3RlclJlZHVjdGl2ZU5vZGUoKSB7CiAgICBpZiAoY291bnRSZWR1Y3RpdmVOb2RlKSB7CiAgICAgIGRhdGEucmVkdWN0aXZlTm9kZUNvdW50Kys7CiAgICAgIGlmIChzZWVuUmV0dXJuKSB7CiAgICAgICAgZGF0YS5jb2RlQWZ0ZXJSZXR1cm4gPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHVucmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCkgewogICAgaWYgKGNvdW50UmVkdWN0aXZlTm9kZSkgewogICAgICBkYXRhLnJlZHVjdGl2ZU5vZGVDb3VudC0tOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdChpci5Ob2RlIG5vZGUpID0+IG5vZGU/LmFjY2VwdCh0aGlzKTsKCiAgdm9pZCB2aXNpdExpc3QoTGlzdDxpci5Ob2RlPiBub2RlcykgewogICAgZm9yIChpci5Ob2RlIG5vZGUgaW4gbm9kZXMpIHsKICAgICAgdmlzaXQobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoaXIuUmV0dXJuU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIHNlZW5SZXR1cm4gPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICBkYXRhLmhhc1Rocm93ID0gdHJ1ZTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIF9oYW5kbGVMb29wKGlyLk5vZGUgbm9kZSkgewogICAgLy8gSXQncyBhY3R1YWxseSBub3QgZGlmZmljdWx0IHRvIGlubGluZSBhIG1ldGhvZCB3aXRoIGEgbG9vcCwgYnV0IG91cgogICAgLy8gbWVhc3VyZW1lbnRzIHNob3cgdGhhdCBpdCdzIGN1cnJlbnRseSBiZXR0ZXIgdG8gbm90IGlubGluZSBhIG1ldGhvZCB0aGF0CiAgICAvLyBjb250YWlucyBhIGxvb3AuCiAgICBkYXRhLmhhc0xvb3AgPSB0cnVlOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGb3JTdGF0ZW1lbnQoaXIuRm9yU3RhdGVtZW50IG5vZGUpIHsKICAgIF9oYW5kbGVMb29wKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICBfaGFuZGxlTG9vcChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0V2hpbGVTdGF0ZW1lbnQoaXIuV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgX2hhbmRsZUxvb3Aobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IG5vZGUpIHsKICAgIF9oYW5kbGVMb29wKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUcnlDYXRjaChpci5UcnlDYXRjaCBub2RlKSB7CiAgICBkYXRhLmhhc1RyeSA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRyeUZpbmFsbHkoaXIuVHJ5RmluYWxseSBub2RlKSB7CiAgICBkYXRhLmhhc1RyeSA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgZGF0YS5oYXNDbG9zdXJlID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIGRhdGEuaGFzQ2xvc3VyZSA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZ1bmN0aW9uTm9kZShpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUuYXN5bmNNYXJrZXIgIT0gaXIuQXN5bmNNYXJrZXIuU3luYykgewogICAgICBkYXRhLmhhc0FzeW5jQXdhaXQgPSB0cnVlOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBDb3N0IG9mIHBhcmFtZXRlciBjaGVja2luZz8KICAgIHNraXBSZWR1Y3RpdmVOb2RlcygoKSB7CiAgICAgIHZpc2l0TGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgICAgdmlzaXRMaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgICB2aXNpdExpc3Qobm9kZS5uYW1lZFBhcmFtZXRlcnMpOwogICAgICB2aXNpdChub2RlLnJldHVyblR5cGUpOwogICAgfSk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIEhldXJpc3RpYzogSW4gInBhcmFtZXRlciA/IEEgOiBCIiB0aGVyZSBpcyBhIGhpZ2ggcHJvYmFiaWxpdHkgdGhhdAogICAgLy8gcGFyYW1ldGVyIGlzIGEgY29uc3RhbnQuIEFzc3VtaW5nIHRoZSBwYXJhbWV0ZXIgaXMgY29uc3RhbnQsIHdlIGNhbgogICAgLy8gY29tcHV0ZSBhIGNvdW50IHRoYXQgaXMgYm91bmRlZCBieSB0aGUgbGFyZ2VzdCBhcm0gcmF0aGVyIHRoYW4gdGhlIHN1bSBvZgogICAgLy8gYm90aCBhcm1zLgogICAgaXIuRXhwcmVzc2lvbiBjb25kaXRpb24gPSBub2RlLmNvbmRpdGlvbjsKICAgIHZpc2l0KGNvbmRpdGlvbik7CiAgICBpbnQgY29tbW9uUHJlZml4Q291bnQgPSBkYXRhLnJlZ3VsYXJOb2RlQ291bnQ7CgogICAgdmlzaXQobm9kZS50aGVuKTsKICAgIGludCB0aGVuQ291bnQgPSBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgLSBjb21tb25QcmVmaXhDb3VudDsKCiAgICBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgPSBjb21tb25QcmVmaXhDb3VudDsKICAgIHZpc2l0KG5vZGUub3RoZXJ3aXNlKTsKICAgIGludCBlbHNlQ291bnQgPSBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgLSBjb21tb25QcmVmaXhDb3VudDsKCiAgICBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgPSBjb21tb25QcmVmaXhDb3VudCArIHRoZW5Db3VudCArIGVsc2VDb3VudDsKICAgIGlmIChjb25kaXRpb24gaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgICBjb25kaXRpb24udmFyaWFibGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uTm9kZSkgewogICAgICBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgPQogICAgICAgICAgY29tbW9uUHJlZml4Q291bnQgKyAodGhlbkNvdW50ID4gZWxzZUNvdW50ID8gdGhlbkNvdW50IDogZWxzZUNvdW50KTsKICAgIH0KICAgIC8vIFRoaXMgaXMgbGFzdCBzbyB0aGF0IFt0b29EaWZmaWN1bHRdIGlzIGFsd2F5cyB1cGRhdGVkLgogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgcmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCk7CiAgICBza2lwUmVndWxhck5vZGVzKCgpID0+IHZpc2l0KG5vZGUuc3RhdGljVHlwZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBc3NlcnRJbml0aWFsaXplcihpci5Bc3NlcnRJbml0aWFsaXplciBub2RlKSB7CiAgICBpZiAoIWVuYWJsZVVzZXJBc3NlcnRpb25zKSByZXR1cm47CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFzc2VydFN0YXRlbWVudChpci5Bc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKCFlbmFibGVVc2VyQXNzZXJ0aW9ucykgcmV0dXJuOwogICAgZGVmYXVsdE5vZGUobm9kZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ2FsbCgpIHsKICAgICsrZGF0YS5jYWxsQ291bnQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEVtcHR5U3RhdGVtZW50KGlyLkVtcHR5U3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChpci5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmxvY2soaXIuQmxvY2sgbm9kZSkgewogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgcmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCk7CiAgICAvLyBBdm9pZCBjb3B5aW5nIGxvbmcgc3RyaW5ncyBpbnRvIGNhbGwgc2l0ZS4KICAgIGlmIChub2RlLnZhbHVlLmxlbmd0aCA+IDE0KSB7CiAgICAgIGRhdGEuaGFzTG9uZ1N0cmluZyA9IHRydWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyQ2FsbCgpOwogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgcmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCk7CiAgICBza2lwUmVkdWN0aXZlTm9kZXMoKCkgPT4gdmlzaXQobm9kZS5uYW1lKSk7CiAgICB2aXNpdChub2RlLnJlY2VpdmVyKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoaXIuRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgewogICAgcmVnaXN0ZXJDYWxsKCk7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICByZWdpc3RlclJlZHVjdGl2ZU5vZGUoKTsKICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRQcm9wZXJ0eVNldChpci5Qcm9wZXJ0eVNldCBub2RlKSB7CiAgICByZWdpc3RlckNhbGwoKTsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgc2tpcFJlZHVjdGl2ZU5vZGVzKCgpID0+IHZpc2l0KG5vZGUubmFtZSkpOwogICAgdmlzaXQobm9kZS5yZWNlaXZlcik7CiAgICB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoaXIuRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgcmVnaXN0ZXJDYWxsKCk7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICByZWdpc3RlclJlZHVjdGl2ZU5vZGUoKTsKICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgdmlzaXQobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlR2V0KGlyLlZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgc2tpcFJlZHVjdGl2ZU5vZGVzKCgpID0+IHZpc2l0KG5vZGUucHJvbW90ZWRUeXBlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRoaXNFeHByZXNzaW9uKGlyLlRoaXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUpIHsKICAgIC8vIEFzc3VtZSBsYXp5LWluaXQgc3RhdGljLCBsb2FkZWQgdmlhIGEgY2FsbDogYCQuJGdldCRmb28oKWAuCiAgICByZWdpc3RlckNhbGwoKTsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICAvLyBBIGNvbnN0IGNvbnN0cnVjdG9yIGNhbGwgY29tcGlsZXMgdG8gYSBjb25zdGFudCBwb29sIHJlZmVyZW5jZS4KICAgICAgc2tpcFJlZHVjdGl2ZU5vZGVzKCgpID0+IG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKSk7CiAgICB9IGVsc2UgewogICAgICByZWdpc3RlckNhbGwoKTsKICAgICAgX3Byb2Nlc3NBcmd1bWVudHMobm9kZS5hcmd1bWVudHMsIG5vZGUudGFyZ2V0Py5mdW5jdGlvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIGRhdGEuaGFzRXh0ZXJuYWxDb25zdGFudENvbnN0cnVjdG9yQ2FsbCA9IHRydWU7CiAgICAgIHNraXBSZWR1Y3RpdmVOb2RlcygoKSA9PiBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcykpOwogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJDYWxsKCk7CiAgICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgICBfcHJvY2Vzc0FyZ3VtZW50cyhub2RlLmFyZ3VtZW50cywgbm9kZS50YXJnZXQ/LmZ1bmN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0TWV0aG9kSW52b2NhdGlvbihpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgcmVnaXN0ZXJDYWxsKCk7CiAgICB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIHNraXBSZWR1Y3RpdmVOb2RlcygoKSA9PiB2aXNpdChub2RlLm5hbWUpKTsKICAgIF9wcm9jZXNzQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzLCBudWxsKTsKICB9CgogIF9wcm9jZXNzQXJndW1lbnRzKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMsIGlyLkZ1bmN0aW9uTm9kZSB0YXJnZXQpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIGlmIChhcmd1bWVudHMudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICBkYXRhLmhhc1R5cGVBcmd1bWVudHMgPSB0cnVlOwogICAgICBza2lwUmVkdWN0aXZlTm9kZXMoKCkgPT4gdmlzaXRMaXN0KGFyZ3VtZW50cy50eXBlcykpOwogICAgfQogICAgaW50IGNvdW50ID0gYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoICsgYXJndW1lbnRzLm5hbWVkLmxlbmd0aDsKICAgIGRhdGEuYXJndW1lbnRDb3VudHMuYWRkKGNvdW50KTsKCiAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKICAgICAgLy8gRGlzYWxsb3cgZGVmYXVsdGVkIG9wdGlvbmFsIGFyZ3VtZW50cyBzaW5jZSB0aGV5IHdpbGwgYmUgcGFzc2VkCiAgICAgIC8vIGV4cGxpY2l0bHkuCiAgICAgIGlmICh0YXJnZXQucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICsgdGFyZ2V0Lm5hbWVkUGFyYW1ldGVycy5sZW5ndGggPgogICAgICAgICAgY291bnQpIHsKICAgICAgICBkYXRhLmhhc0FyZ3VtZW50RGVmYXVsdGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KCiAgICB2aXNpdExpc3QoYXJndW1lbnRzLnBvc2l0aW9uYWwpOwogICAgZm9yIChpci5OYW1lZEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgICBleHByZXNzaW9uLnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICB2aXNpdChub2RlLm9wZXJhbmQpOwogICAgc2tpcFJlZHVjdGl2ZU5vZGVzKCgpID0+IHZpc2l0KG5vZGUudHlwZSkpOwogICAgaWYgKCEobm9kZS5pc1R5cGVFcnJvciAmJiBvbWl0SW1wbGljaXRDYXN0cykpIHsKICAgICAgZGF0YS5oYXNDYXN0ID0gdHJ1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHNraXBSZWR1Y3RpdmVOb2RlcygoKSB7CiAgICAgIHZpc2l0TGlzdChub2RlLmFubm90YXRpb25zKTsKICAgICAgdmlzaXQobm9kZS50eXBlKTsKICAgIH0pOwogICAgdmlzaXQobm9kZS5pbml0aWFsaXplcik7CgogICAgLy8gQSBsb2NhbCB2YXJpYWJsZSBpcyBhbiBhbGlhcyBmb3IgdGhlIGluaXRpYWxpemVyIGV4cHJlc3Npb24uCiAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgIHVucmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCk7IC8vIGRpc2NvdW50IG9uZSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlLgogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJZlN0YXRlbWVudChpci5JZlN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICBub2RlLnZpc2l0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IQYEAQwqFBsdMBoEAQw2FBsdGgQBDCoUGx0wGhcEAQw2FBsdGhcEAQwqGx04BAEMMBsdBAEMJkMUGx0EAQw+Gx0YSToNFkAGBAEMNBsYNjoNFh9ABgQBDDQbHRQaMC0EAUYbJiQ8BkYkARpJFU8TKwgGASU9HSUGBAEMLBsZMDQbBgQBDDobHCMYCB0BRCRMBgQBDCobHhcEAgEscGFja2FnZTpjb21waWxlci9zcmMvc3NhL2J1aWxkZXJfa2VybmVsLmRhcnQsc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL3R5cGVzLmRhcnSLSy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKCmNsYXNzIEFic3RyYWN0VmFsdWVGYWN0b3J5IHsKICBzdGF0aWMgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFJldHVyblR5cGVGb3JFbGVtZW50KAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzKSB7CiAgICByZXR1cm4gcmVzdWx0cy5yZXN1bHRPZk1lbWJlcihlbGVtZW50KS5yZXR1cm5UeXBlID8/CiAgICAgICAgcmVzdWx0cy5jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogIH0KCiAgc3RhdGljIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRUeXBlRm9yTWVtYmVyKAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0T2ZNZW1iZXIoZWxlbWVudCkudHlwZSA/PwogICAgICAgIHJlc3VsdHMuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICB9CgogIHN0YXRpYyBBYnN0cmFjdFZhbHVlIGluZmVycmVkVHlwZUZvclBhcmFtZXRlcigKICAgICAgTG9jYWwgZWxlbWVudCwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0T2ZQYXJhbWV0ZXIoZWxlbWVudCkgPz8KICAgICAgICByZXN1bHRzLmNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgfQoKICBzdGF0aWMgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFJlc3VsdFR5cGVGb3JTZWxlY3RvcihTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlciwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0VHlwZU9mU2VsZWN0b3Ioc2VsZWN0b3IsIHJlY2VpdmVyKSA/PwogICAgICAgIHJlc3VsdHMuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICB9CgogIHN0YXRpYyBBYnN0cmFjdFZhbHVlIGZyb21OYXRpdmVCZWhhdmlvcigKICAgICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIHZhciB0eXBlc1JldHVybmVkID0gbmF0aXZlQmVoYXZpb3IudHlwZXNSZXR1cm5lZDsKICAgIGlmICh0eXBlc1JldHVybmVkLmlzRW1wdHkpIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwoKICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CgogICAgLy8gW3R5cGVdIGlzIGVpdGhlciBhbiBpbnN0YW5jZSBvZiBbRGFydFR5cGVdIG9yIHNwZWNpYWwgb2JqZWN0cwogICAgLy8gbGlrZSBbbmF0aXZlLlNwZWNpYWxUeXBlLkpzT2JqZWN0XS4KICAgIEFic3RyYWN0VmFsdWUgZnJvbU5hdGl2ZVR5cGUoZHluYW1pYyB0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IFNwZWNpYWxUeXBlLkpzT2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgLmNyZWF0ZU5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyk7CiAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZvaWQpIHsKICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5udWxsVHlwZTsKICAgICAgfSBlbHNlIGlmICh0eXBlLmlzRHluYW1pYykgewogICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gY29tbW9uRWxlbWVudHMubnVsbFR5cGUpIHsKICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5udWxsVHlwZTsKICAgICAgfSBlbHNlIGlmICh0eXBlLnRyZWF0QXNEeW5hbWljKSB7CiAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YnR5cGUodHlwZS5lbGVtZW50KTsKICAgICAgfQogICAgfQoKICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0ID0KICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLnVuaW9uT2ZNYW55KHR5cGVzUmV0dXJuZWQubWFwKGZyb21OYXRpdmVUeXBlKSk7CiAgICBhc3NlcnQoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0VtcHR5KHJlc3VsdCkuaXNQb3RlbnRpYWxseUZhbHNlLAogICAgICAgICJVbmV4cGVjdGVkIGVtcHR5IHJldHVybiB2YWx1ZSBmb3IgJG5hdGl2ZUJlaGF2aW9yLiIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KSQBOTjwBNiQxISIyKgEdNUQ5PQQBLkIzPQQBMTsxPQQBSEQ/PQQBK0FPNkcBQAFFKzEqIz0gLSMwNC0oMA9HCAYBG0xDPxMEAgEjcGFja2FnZTpjb21waWxlci9zcmMvc3NhL3R5cGVzLmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfbW9kZWwvY2xvc3VyZS5kYXJ0wACrvS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnIHNob3cgTmFtZTsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2lyL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX2NhY2hlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZW52LmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vc3NhL3R5cGVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICdqc193b3JsZF9idWlsZGVyLmRhcnQnIHNob3cgSnNDbG9zZWRXb3JsZEJ1aWxkZXI7CmltcG9ydCAnbG9jYWxzLmRhcnQnOwoKY2xhc3MgQ2xvc3VyZURhdGFJbXBsIGltcGxlbWVudHMgQ2xvc3VyZURhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ2xvc3VyZURhdGFdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1kYXRhJzsKCiAgZmluYWwgSnNUb0VsZW1lbnRNYXAgX2VsZW1lbnRNYXA7CgogIC8vLyBNYXAgb2YgdGhlIHNjb3BpbmcgaW5mb3JtYXRpb24gdGhhdCBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIgZW50aXR5LgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIFNjb3BlSW5mbz4gX3Njb3BlTWFwOwogIGZpbmFsIE1hcDxpci5UcmVlTm9kZSwgQ2FwdHVyZWRTY29wZT4gX2NhcHR1cmVkU2NvcGVzTWFwOwogIC8vIEluZGljYXRlcyB0aGUgdHlwZSB2YXJpYWJsZXMgKGlmIGFueSkgdGhhdCBhcmUgY2FwdHVyZWQgaW4gYSBnaXZlbgogIC8vIFNpZ25hdHVyZSBmdW5jdGlvbi4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBDYXB0dXJlZFNjb3BlPiBfY2FwdHVyZWRTY29wZUZvclNpZ25hdHVyZU1hcDsKCiAgZmluYWwgTWFwPGlyLkxvY2FsRnVuY3Rpb24sIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8+CiAgICAgIF9sb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcDsKCiAgQ2xvc3VyZURhdGFJbXBsKHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX3Njb3BlTWFwLCB0aGlzLl9jYXB0dXJlZFNjb3Blc01hcCwKICAgICAgdGhpcy5fY2FwdHVyZWRTY29wZUZvclNpZ25hdHVyZU1hcCwgdGhpcy5fbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXApOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0Nsb3N1cmVEYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENsb3N1cmVEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgc2hhcmVkIFtTY29wZUluZm9dLgogICAgTWFwPE1lbWJlckVudGl0eSwgU2NvcGVJbmZvPiBzY29wZU1hcCA9IHNvdXJjZS5yZWFkTWVtYmVyTWFwKAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBuZXcgU2NvcGVJbmZvLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIE1hcDxpci5UcmVlTm9kZSwgQ2FwdHVyZWRTY29wZT4gY2FwdHVyZWRTY29wZXNNYXAgPSBzb3VyY2UKICAgICAgICAucmVhZFRyZWVOb2RlTWFwKCgpID0+IG5ldyBDYXB0dXJlZFNjb3BlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIENhcHR1cmVkU2NvcGU+IGNhcHR1cmVkU2NvcGVGb3JTaWduYXR1cmVNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICAgICAgICBuZXcgQ2FwdHVyZWRTY29wZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBNYXA8aXIuTG9jYWxGdW5jdGlvbiwgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbz4KICAgICAgICBsb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcCA9IHNvdXJjZS5yZWFkVHJlZU5vZGVNYXAoCiAgICAgICAgICAgICgpID0+IG5ldyBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2xvc3VyZURhdGFJbXBsKGVsZW1lbnRNYXAsIHNjb3BlTWFwLCBjYXB0dXJlZFNjb3Blc01hcCwKICAgICAgICBjYXB0dXJlZFNjb3BlRm9yU2lnbmF0dXJlTWFwLCBsb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcCk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtDbG9zdXJlRGF0YV0gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAoX3Njb3BlTWFwLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBTY29wZUluZm8gaW5mbykgPT4gaW5mby53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgc2luay53cml0ZVRyZWVOb2RlTWFwKF9jYXB0dXJlZFNjb3Blc01hcCwgKENhcHR1cmVkU2NvcGUgc2NvcGUpIHsKICAgICAgc2NvcGUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKAogICAgICAgIF9jYXB0dXJlZFNjb3BlRm9yU2lnbmF0dXJlTWFwLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBDYXB0dXJlZFNjb3BlIHNjb3BlKSA9PgogICAgICAgICAgICBzY29wZS53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgc2luay53cml0ZVRyZWVOb2RlTWFwKF9sb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcCwKICAgICAgICAoQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBpbmZvKSB7CiAgICAgIGluZm8ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU2NvcGVJbmZvIGdldFNjb3BlSW5mbyhNZW1iZXJFbnRpdHkgZW50aXR5KSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyBjaGVjayB3aGVuIGNvbnN0cnVjdG9yIGJvZGllcyBhIGNyZWF0ZWQKICAgIC8vIGVhZ2VybHkgd2l0aCB0aGUgSi1tb2RlbDsgYSBjb25zdHJ1Y3RvciBib2R5IHNob3VsZCBoYXZlIGl0J3Mgb3duCiAgICAvLyBbQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mb10uCiAgICBpZiAoZW50aXR5IGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSkgewogICAgICBDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3JCb2R5ID0gZW50aXR5OwogICAgICBlbnRpdHkgPSBjb25zdHJ1Y3RvckJvZHkuY29uc3RydWN0b3I7CiAgICB9CgogICAgU2NvcGVJbmZvIHNjb3BlSW5mbyA9IF9zY29wZU1hcFtlbnRpdHldOwogICAgYXNzZXJ0KAogICAgICAgIHNjb3BlSW5mbyAhPSBudWxsLCBmYWlsZWRBdChlbnRpdHksICJNaXNzaW5nIHNjb3BlIGluZm8gZm9yICRlbnRpdHkuIikpOwogICAgcmV0dXJuIHNjb3BlSW5mbzsKICB9CgogIC8vIFRPRE8oZWZvcnR1bmEpOiBFdmVudHVhbGx5IGNhcHR1cmVkU2NvcGVzTWFwW25vZGVdIHNob3VsZCBhbHdheXMKICAvLyBiZSBub24tbnVsbCwgYW5kIHdlIHNob3VsZCBqdXN0IHRlc3QgdGhhdCB3aXRoIGFuIGFzc2VydC4KICBAb3ZlcnJpZGUKICBDYXB0dXJlZFNjb3BlIGdldENhcHR1cmVkU2NvcGUoTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihlbnRpdHkpOwogICAgc3dpdGNoIChkZWZpbml0aW9uLmtpbmQpIHsKICAgICAgY2FzZSBNZW1iZXJLaW5kLnJlZ3VsYXI6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keToKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsOgogICAgICAgIHJldHVybiBfY2FwdHVyZWRTY29wZXNNYXBbZGVmaW5pdGlvbi5ub2RlXSA/PyBjb25zdCBDYXB0dXJlZFNjb3BlKCk7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5zaWduYXR1cmU6CiAgICAgICAgcmV0dXJuIF9jYXB0dXJlZFNjb3BlRm9yU2lnbmF0dXJlTWFwW2VudGl0eV0gPz8gY29uc3QgQ2FwdHVyZWRTY29wZSgpOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IGZhaWxlZEF0KGVudGl0eSwgIlVuZXhwZWN0ZWQgbWVtYmVyIGRlZmluaXRpb24gJGRlZmluaXRpb24iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIC8vIFRPRE8oZWZvcnR1bmEpOiBFdmVudHVhbGx5IGNhcHR1cmVkU2NvcGVzTWFwW25vZGVdIHNob3VsZCBhbHdheXMKICAvLyBiZSBub24tbnVsbCwgYW5kIHdlIHNob3VsZCBqdXN0IHRlc3QgdGhhdCB3aXRoIGFuIGFzc2VydC4KICBDYXB0dXJlZExvb3BTY29wZSBnZXRDYXB0dXJlZExvb3BTY29wZShpci5Ob2RlIGxvb3BOb2RlKSA9PgogICAgICBfY2FwdHVyZWRTY29wZXNNYXBbbG9vcE5vZGVdID8/IGNvbnN0IENhcHR1cmVkTG9vcFNjb3BlKCk7CgogIEBvdmVycmlkZQogIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8gZ2V0Q2xvc3VyZUluZm8oaXIuTG9jYWxGdW5jdGlvbiBub2RlKSB7CiAgICB2YXIgY2xvc3VyZSA9IF9sb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcFtub2RlXTsKICAgIGFzc2VydCgKICAgICAgICBjbG9zdXJlICE9IG51bGwsCiAgICAgICAgIkNvcnJlc3BvbmRpbmcgY2xvc3VyZSBjbGFzcyBub3QgZm91bmQgZm9yICRub2RlLiAiCiAgICAgICAgIkNsb3N1cmVzIGZvdW5kIGZvciAke19sb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcC5rZXlzfSIpOwogICAgcmV0dXJuIGNsb3N1cmU7CiAgfQp9CgovLy8gQ2xvc3VyZSBjb252ZXJzaW9uIGNvZGUgdXNpbmcgb3VyIG5ldyBFbnRpdHkgbW9kZWwuIENsb3N1cmUgY29udmVyc2lvbiBpcwovLy8gbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHNlbWFudGljcyBvZiBjbG9zdXJlcyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50IGluIERhcnQKLy8vIHRoYW4gSmF2YVNjcmlwdC4gQ2xvc3VyZSBjb252ZXJzaW9uIGlzIHNlcGFyYXRlZCBvdXQgaW50byB0d28gcGhhc2VzOgovLy8gZ2VuZXJhdGlvbiBvZiBhIG5ldyAodGVtcG9yYXJ5KSByZXByZXNlbnRhdGlvbiB0byBzdG9yZSB3aGVyZSB2YXJpYWJsZXMgbmVlZAovLy8gdG8gYmUgaG9pc3RlZC9jYXB0dXJlZCB1cCBhdCBhbm90aGVyIGxldmVsIHRvIHJlLXdyaXRlIHRoZSBjbG9zdXJlLCBhbmQgdGhlbgovLy8gdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSB3aGVyZSB3ZSBnZW5lcmF0ZSBlbGVtZW50cyBhbmQvb3IgaW5zdHJ1Y3Rpb25zIHRvCi8vLyByZXByZXNlbnQgdGhpcyBuZXcgY29kZSBwYXRoLgovLy8KLy8vIEZvciBhIGdlbmVyYWwgZXhwbGFuYXRpb24gb2YgaG93IGNsb3N1cmUgY29udmVyc2lvbiB3b3JrcyBhdCBhIGhpZ2ggbGV2ZWwsCi8vLyBjaGVjayBvdXQ6Ci8vLyBodHRwOi8vc2llay5ibG9nc3BvdC5jb20vMjAxMi8wNy9lc3NlbmNlLW9mLWNsb3N1cmUtY29udmVyc2lvbi5odG1sIG9yCi8vLyBodHRwOi8vbWF0dC5taWdodC5uZXQvYXJ0aWNsZXMvY2xvc3VyZS1jb252ZXJzaW9uLy4KCmNsYXNzIENsb3N1cmVEYXRhQnVpbGRlciB7CiAgZmluYWwgSnNUb0VsZW1lbnRNYXAgX2VsZW1lbnRNYXA7CiAgZmluYWwgR2xvYmFsTG9jYWxzTWFwIF9nbG9iYWxMb2NhbHNNYXA7CiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhIF9hbm5vdGF0aW9uc0RhdGE7CgogIC8vLyBNYXAgb2YgdGhlIHNjb3BpbmcgaW5mb3JtYXRpb24gdGhhdCBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIgZW50aXR5LgogIE1hcDxNZW1iZXJFbnRpdHksIFNjb3BlSW5mbz4gX3Njb3BlTWFwID0ge307CiAgTWFwPGlyLlRyZWVOb2RlLCBDYXB0dXJlZFNjb3BlPiBfY2FwdHVyZWRTY29wZXNNYXAgPSB7fTsKICAvLyBJbmRpY2F0ZXMgdGhlIHR5cGUgdmFyaWFibGVzIChpZiBhbnkpIHRoYXQgYXJlIGNhcHR1cmVkIGluIGEgZ2l2ZW4KICAvLyBTaWduYXR1cmUgZnVuY3Rpb24uCiAgTWFwPE1lbWJlckVudGl0eSwgQ2FwdHVyZWRTY29wZT4gX2NhcHR1cmVkU2NvcGVGb3JTaWduYXR1cmVNYXAgPSB7fTsKCiAgTWFwPGlyLkxvY2FsRnVuY3Rpb24sIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8+CiAgICAgIF9sb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcCA9IHt9OwoKICBDbG9zdXJlRGF0YUJ1aWxkZXIoCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX2dsb2JhbExvY2Fsc01hcCwgdGhpcy5fYW5ub3RhdGlvbnNEYXRhKTsKCiAgdm9pZCBfdXBkYXRlU2NvcGVCYXNlZE9uUnRpTmVlZChLZXJuZWxTY29wZUluZm8gc2NvcGUsIENsb3N1cmVSdGlOZWVkIHJ0aU5lZWQsCiAgICAgIE1lbWJlckVudGl0eSBvdXRlcm1vc3RFbnRpdHkpIHsKICAgIGJvb2wgaW5jbHVkZUZvclJ0aShTZXQ8VmFyaWFibGVVc2U+IHVzZVNldCkgewogICAgICBmb3IgKFZhcmlhYmxlVXNlIHVzYWdlIGluIHVzZVNldCkgewogICAgICAgIHN3aXRjaCAodXNhZ2Uua2luZCkgewogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQuZXhwbGljaXQ6CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLmltcGxpY2l0Q2FzdDoKICAgICAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgIC5nZXRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3kob3V0ZXJtb3N0RW50aXR5KQogICAgICAgICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQubG9jYWxUeXBlOgogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLmNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50OgogICAgICAgICAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9CiAgICAgICAgICAgICAgICBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcih1c2FnZS5tZW1iZXIpOwogICAgICAgICAgICBpZiAocnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcykpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLnN0YXRpY1R5cGVBcmd1bWVudDoKICAgICAgICAgICAgRnVuY3Rpb25FbnRpdHkgbWV0aG9kID0gX2VsZW1lbnRNYXAuZ2V0TWV0aG9kKHVzYWdlLm1lbWJlcik7CiAgICAgICAgICAgIGlmIChydGlOZWVkLm1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhtZXRob2QpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5pbnN0YW5jZVR5cGVBcmd1bWVudDoKICAgICAgICAgICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcih1c2FnZS5pbnZvY2F0aW9uKTsKICAgICAgICAgICAgaWYgKHJ0aU5lZWQuc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5sb2NhbFR5cGVBcmd1bWVudDoKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJhY2sgZGlyZWN0IGxvY2FsCiAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGludm9jYXRpb25zIGFuZCBub3QgaGF2ZSB0byB1c2UgdGhlIHNlbGVjdG9yIGhlcmUuCiAgICAgICAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3IodXNhZ2UuaW52b2NhdGlvbik7CiAgICAgICAgICAgIGlmIChydGlOZWVkLmxvY2FsRnVuY3Rpb25OZWVkc1R5cGVBcmd1bWVudHModXNhZ2UubG9jYWxGdW5jdGlvbikgfHwKICAgICAgICAgICAgICAgIHJ0aU5lZWQuc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5tZW1iZXJQYXJhbWV0ZXI6CiAgICAgICAgICAgIGlmIChfYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kob3V0ZXJtb3N0RW50aXR5KQogICAgICAgICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IF9lbGVtZW50TWFwLmdldE1ldGhvZCh1c2FnZS5tZW1iZXIpOwogICAgICAgICAgICAgIGlmIChydGlOZWVkLm1ldGhvZE5lZWRzU2lnbmF0dXJlKG1ldGhvZCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLmxvY2FsUGFyYW1ldGVyOgogICAgICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YQogICAgICAgICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG91dGVybW9zdEVudGl0eSkKICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChydGlOZWVkCiAgICAgICAgICAgICAgICAubG9jYWxGdW5jdGlvbk5lZWRzU2lnbmF0dXJlKHVzYWdlLmxvY2FsRnVuY3Rpb24pKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5tZW1iZXJSZXR1cm5UeXBlOgogICAgICAgICAgICBGdW5jdGlvbkVudGl0eSBtZXRob2QgPSBfZWxlbWVudE1hcC5nZXRNZXRob2QodXNhZ2UubWVtYmVyKTsKICAgICAgICAgICAgaWYgKHJ0aU5lZWQubWV0aG9kTmVlZHNTaWduYXR1cmUobWV0aG9kKSkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQubG9jYWxSZXR1cm5UeXBlOgogICAgICAgICAgICBpZiAocnRpTmVlZC5sb2NhbEZ1bmN0aW9uTmVlZHNTaWduYXR1cmUodXNhZ2UubG9jYWxGdW5jdGlvbikpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLmZpZWxkVHlwZToKICAgICAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShvdXRlcm1vc3RFbnRpdHkpCiAgICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5saXN0TGl0ZXJhbDoKICAgICAgICAgICAgaWYgKHJ0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5zZXRMaXRlcmFsOgogICAgICAgICAgICBpZiAocnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgICAgICAgICAgIF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDbGFzcykpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLm1hcExpdGVyYWw6CiAgICAgICAgICAgIGlmIChydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICAgICAgICAgICAgX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzKSkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQuaW5zdGFudGlhdGlvblR5cGVBcmd1bWVudDoKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi4KICAgICAgICAgICAgaWYgKHJ0aU5lZWQuaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgICAgICAgICAgIG51bGwsIHVzYWdlLmluc3RhbnRpYXRpb24udHlwZUFyZ3VtZW50cy5sZW5ndGgpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoaW5jbHVkZUZvclJ0aShzY29wZS50aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSkpIHsKICAgICAgc2NvcGUudGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSA9IHRydWU7CiAgICB9CiAgICBzY29wZS5mcmVlVmFyaWFibGVzRm9yUnRpLmZvckVhY2goCiAgICAgICAgKFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCB0eXBlVmFyaWFibGUsIFNldDxWYXJpYWJsZVVzZT4gdXNlU2V0KSB7CiAgICAgIGlmIChpbmNsdWRlRm9yUnRpKHVzZVNldCkpIHsKICAgICAgICBzY29wZS5mcmVlVmFyaWFibGVzLmFkZCh0eXBlVmFyaWFibGUpOwogICAgICB9CiAgICB9KTsKICB9CgogIENsb3N1cmVEYXRhIGNyZWF0ZUNsb3N1cmVFbnRpdGllcygKICAgICAgSnNDbG9zZWRXb3JsZEJ1aWxkZXIgY2xvc2VkV29ybGRCdWlsZGVyLAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBDbG9zdXJlU2NvcGVNb2RlbD4gY2xvc3VyZU1vZGVscywKICAgICAgQ2xvc3VyZVJ0aU5lZWQgcnRpTmVlZCwKICAgICAgTGlzdDxGdW5jdGlvbkVudGl0eT4gY2FsbE1ldGhvZHMpIHsKICAgIGNsb3N1cmVNb2RlbHMuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgQ2xvc3VyZVNjb3BlTW9kZWwgbW9kZWwpIHsKICAgICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwID0gX2dsb2JhbExvY2Fsc01hcC5nZXRMb2NhbHNNYXAobWVtYmVyKTsKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGFsbEJveGVkVmFyaWFibGVzID0KICAgICAgICAgIF9lbGVtZW50TWFwLm1ha2VSZWNvcmRDb250YWluZXIobW9kZWwuc2NvcGVJbmZvLCBtZW1iZXIsIGxvY2Fsc01hcCk7CiAgICAgIF9zY29wZU1hcFttZW1iZXJdID0gbmV3IEpzU2NvcGVJbmZvLmZyb20oCiAgICAgICAgICBhbGxCb3hlZFZhcmlhYmxlcywgbW9kZWwuc2NvcGVJbmZvLCBsb2NhbHNNYXAsIF9lbGVtZW50TWFwKTsKCiAgICAgIG1vZGVsLmNhcHR1cmVkU2NvcGVzTWFwCiAgICAgICAgICAuZm9yRWFjaCgoaXIuTm9kZSBub2RlLCBLZXJuZWxDYXB0dXJlZFNjb3BlIHNjb3BlKSB7CiAgICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzID0KICAgICAgICAgICAgX2VsZW1lbnRNYXAubWFrZVJlY29yZENvbnRhaW5lcihzY29wZSwgbWVtYmVyLCBsb2NhbHNNYXApOwogICAgICAgIF91cGRhdGVTY29wZUJhc2VkT25SdGlOZWVkKHNjb3BlLCBydGlOZWVkLCBtZW1iZXIpOwoKICAgICAgICBpZiAoc2NvcGUgaXMgS2VybmVsQ2FwdHVyZWRMb29wU2NvcGUpIHsKICAgICAgICAgIF9jYXB0dXJlZFNjb3Blc01hcFtub2RlXSA9IG5ldyBKc0NhcHR1cmVkTG9vcFNjb3BlLmZyb20oCiAgICAgICAgICAgICAgYm94ZWRWYXJpYWJsZXMsIHNjb3BlLCBsb2NhbHNNYXAsIF9lbGVtZW50TWFwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2NhcHR1cmVkU2NvcGVzTWFwW25vZGVdID0gbmV3IEpzQ2FwdHVyZWRTY29wZS5mcm9tKAogICAgICAgICAgICAgIGJveGVkVmFyaWFibGVzLCBzY29wZSwgbG9jYWxzTWFwLCBfZWxlbWVudE1hcCk7CiAgICAgICAgfQogICAgICAgIGFsbEJveGVkVmFyaWFibGVzLmFkZEFsbChib3hlZFZhcmlhYmxlcyk7CiAgICAgIH0pOwoKICAgICAgTWFwPGlyLkxvY2FsRnVuY3Rpb24sIEtlcm5lbFNjb3BlSW5mbz4gY2xvc3VyZXNUb0dlbmVyYXRlID0KICAgICAgICAgIG1vZGVsLmNsb3N1cmVzVG9HZW5lcmF0ZTsKICAgICAgZm9yIChpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgaW4gY2xvc3VyZXNUb0dlbmVyYXRlLmtleXMpIHsKICAgICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlID0gbm9kZS5mdW5jdGlvbjsKICAgICAgICBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGNsb3N1cmVDbGFzc0luZm8gPSBfcHJvZHVjZVN5bnRoZXRpY0VsZW1lbnRzKAogICAgICAgICAgICBjbG9zZWRXb3JsZEJ1aWxkZXIsCiAgICAgICAgICAgIG1lbWJlciwKICAgICAgICAgICAgZnVuY3Rpb25Ob2RlLAogICAgICAgICAgICBjbG9zdXJlc1RvR2VuZXJhdGVbbm9kZV0sCiAgICAgICAgICAgIGFsbEJveGVkVmFyaWFibGVzLAogICAgICAgICAgICBydGlOZWVkLAogICAgICAgICAgICBjcmVhdGVTaWduYXR1cmVNZXRob2Q6CiAgICAgICAgICAgICAgICBydGlOZWVkLmxvY2FsRnVuY3Rpb25OZWVkc1NpZ25hdHVyZShmdW5jdGlvbk5vZGUucGFyZW50KSk7CiAgICAgICAgLy8gQWRkIGFsc28gZm9yIHRoZSBjYWxsIG1ldGhvZC4KICAgICAgICBfc2NvcGVNYXBbY2xvc3VyZUNsYXNzSW5mby5jYWxsTWV0aG9kXSA9IGNsb3N1cmVDbGFzc0luZm87CiAgICAgICAgaWYgKGNsb3N1cmVDbGFzc0luZm8uc2lnbmF0dXJlTWV0aG9kICE9IG51bGwpIHsKICAgICAgICAgIF9zY29wZU1hcFtjbG9zdXJlQ2xhc3NJbmZvLnNpZ25hdHVyZU1ldGhvZF0gPSBjbG9zdXJlQ2xhc3NJbmZvOwoKICAgICAgICAgIC8vIFNldCB1cCBjYXB0dXJlZFNjb3BlIGZvciBzaWduYXR1cmUgbWV0aG9kLiBUaGlzIGlzIGRpc3RpbmN0IGZyb20KICAgICAgICAgIC8vIF9jYXB0dXJlZFNjb3Blc01hcCBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgaXIuTm9kZSBmb3IKICAgICAgICAgIC8vIHRoZSBzaWduYXR1cmUuCiAgICAgICAgICBpZiAocnRpTmVlZC5sb2NhbEZ1bmN0aW9uTmVlZHNTaWduYXR1cmUoZnVuY3Rpb25Ob2RlLnBhcmVudCkgJiYKICAgICAgICAgICAgICBtb2RlbC5jYXB0dXJlZFNjb3Blc01hcFtmdW5jdGlvbk5vZGVdICE9IG51bGwpIHsKICAgICAgICAgICAgS2VybmVsQ2FwdHVyZWRTY29wZSBjYXB0dXJlZFNjb3BlID0KICAgICAgICAgICAgICAgIG1vZGVsLmNhcHR1cmVkU2NvcGVzTWFwW2Z1bmN0aW9uTm9kZV07CiAgICAgICAgICAgIGFzc2VydChjYXB0dXJlZFNjb3BlIGlzISBLZXJuZWxDYXB0dXJlZExvb3BTY29wZSk7CiAgICAgICAgICAgIEtlcm5lbENhcHR1cmVkU2NvcGUgc2lnbmF0dXJlQ2FwdHVyZWRTY29wZSA9CiAgICAgICAgICAgICAgICBuZXcgS2VybmVsQ2FwdHVyZWRTY29wZS5mb3JTaWduYXR1cmUoY2FwdHVyZWRTY29wZSk7CiAgICAgICAgICAgIF91cGRhdGVTY29wZUJhc2VkT25SdGlOZWVkKHNpZ25hdHVyZUNhcHR1cmVkU2NvcGUsIHJ0aU5lZWQsIG1lbWJlcik7CiAgICAgICAgICAgIF9jYXB0dXJlZFNjb3BlRm9yU2lnbmF0dXJlTWFwW2Nsb3N1cmVDbGFzc0luZm8uc2lnbmF0dXJlTWV0aG9kXSA9CiAgICAgICAgICAgICAgICBuZXcgSnNDYXB0dXJlZFNjb3BlLmZyb20oCiAgICAgICAgICAgICAgICAgICAge30sIHNpZ25hdHVyZUNhcHR1cmVkU2NvcGUsIGxvY2Fsc01hcCwgX2VsZW1lbnRNYXApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYWxsTWV0aG9kcy5hZGQoY2xvc3VyZUNsYXNzSW5mby5jYWxsTWV0aG9kKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gbmV3IENsb3N1cmVEYXRhSW1wbChfZWxlbWVudE1hcCwgX3Njb3BlTWFwLCBfY2FwdHVyZWRTY29wZXNNYXAsCiAgICAgICAgX2NhcHR1cmVkU2NvcGVGb3JTaWduYXR1cmVNYXAsIF9sb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcCk7CiAgfQoKICAvLy8gR2l2ZW4gd2hhdCB2YXJpYWJsZXMgYXJlIGNhcHR1cmVkIGF0IGVhY2ggcG9pbnQsIGNvbnN0cnVjdCBjbG9zdXJlIGNsYXNzZXMKICAvLy8gd2l0aCBmaWVsZHMgY29udGFpbmluZyB0aGUgY2FwdHVyZWQgdmFyaWFibGVzIHRvIHJlcGxpY2F0ZSB0aGUgRGFydAogIC8vLyBjbG9zdXJlIHNlbWFudGljcyBpbiBKUy4gSWYgdGhpcyBjbG9zdXJlIGNhcHR1cmVzIGFueSB2YXJpYWJsZXMgKG1lYW5pbmcKICAvLy8gdGhlIGNsb3N1cmUgYWNjZXNzZXMgYSB2YXJpYWJsZSB0aGF0IGdldHMgYWNjZXNzZWQgYXQgc29tZSBwb2ludCksIHRoZW4KICAvLy8gYm94Rm9yQ2FwdHVyZWRWYXJpYWJsZXMgc3RvcmVzIHRoZSBsb2NhbCBjb250ZXh0IGZvciB0aG9zZSB2YXJpYWJsZXMuCiAgLy8vIElmIG5vIHZhcmlhYmxlcyBhcmUgY2FwdHVyZWQsIHRoaXMgcGFyYW1ldGVyIGlzIG51bGwuCiAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mbyBfcHJvZHVjZVN5bnRoZXRpY0VsZW1lbnRzKAogICAgICBKc0Nsb3NlZFdvcmxkQnVpbGRlciBjbG9zZWRXb3JsZEJ1aWxkZXIsCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBub2RlLAogICAgICBLZXJuZWxTY29wZUluZm8gaW5mbywKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzLAogICAgICBDbG9zdXJlUnRpTmVlZCBydGlOZWVkLAogICAgICB7Ym9vbCBjcmVhdGVTaWduYXR1cmVNZXRob2R9KSB7CiAgICBfdXBkYXRlU2NvcGVCYXNlZE9uUnRpTmVlZChpbmZvLCBydGlOZWVkLCBtZW1iZXIpOwogICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwID0gX2dsb2JhbExvY2Fsc01hcC5nZXRMb2NhbHNNYXAobWVtYmVyKTsKICAgIEtlcm5lbENsb3N1cmVDbGFzc0luZm8gY2xvc3VyZUNsYXNzSW5mbyA9CiAgICAgICAgY2xvc2VkV29ybGRCdWlsZGVyLmJ1aWxkQ2xvc3VyZUNsYXNzKAogICAgICAgICAgICBtZW1iZXIsIG5vZGUsIG1lbWJlci5saWJyYXJ5LCBib3hlZFZhcmlhYmxlcywgaW5mbywgbG9jYWxzTWFwLAogICAgICAgICAgICBjcmVhdGVTaWduYXR1cmVNZXRob2Q6IGNyZWF0ZVNpZ25hdHVyZU1ldGhvZCk7CgogICAgLy8gV2Ugd2FudCB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBvaW50CiAgICAvLyB0byB0aGUgY29ycmVjdCBjbG9zdXJlIGNsYXNzLgogICAgX2dsb2JhbExvY2Fsc01hcC5zZXRMb2NhbHNNYXAoY2xvc3VyZUNsYXNzSW5mby5jYWxsTWV0aG9kLCBsb2NhbHNNYXApOwogICAgaWYgKGNsb3N1cmVDbGFzc0luZm8uc2lnbmF0dXJlTWV0aG9kICE9IG51bGwpIHsKICAgICAgX2dsb2JhbExvY2Fsc01hcC5zZXRMb2NhbHNNYXAoCiAgICAgICAgICBjbG9zdXJlQ2xhc3NJbmZvLnNpZ25hdHVyZU1ldGhvZCwgbG9jYWxzTWFwKTsKICAgIH0KICAgIGlmIChub2RlLnBhcmVudCBpcyBpci5NZW1iZXIpIHsKICAgICAgYXNzZXJ0KF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlLnBhcmVudCkgPT0gbWVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChub2RlLnBhcmVudCBpcyBpci5Mb2NhbEZ1bmN0aW9uKTsKICAgICAgX2xvY2FsQ2xvc3VyZVJlcHJlc2VudGF0aW9uTWFwW25vZGUucGFyZW50XSA9IGNsb3N1cmVDbGFzc0luZm87CiAgICB9CiAgICByZXR1cm4gY2xvc3VyZUNsYXNzSW5mbzsKICB9Cn0KCi8vLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBvciBjcmVhdGUgYSBMb2NhbCB2YXJpYWJsZSBvdXQgb2YgYSB2YXJpYWJsZQovLy8gZGVjbGFyYXRpb24gb3IgdHlwZSBwYXJhbWV0ZXIuCkxvY2FsIF9nZXRMb2NhbCgKICAgIGlyLk5vZGUgdmFyaWFibGUsIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCwgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogIGFzc2VydCh2YXJpYWJsZSBpcyBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHx8CiAgICAgIHZhcmlhYmxlIGlzIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCk7CiAgaWYgKHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgIHJldHVybiBsb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZSh2YXJpYWJsZSk7CiAgfSBlbHNlIGlmICh2YXJpYWJsZSBpcyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQpIHsKICAgIHJldHVybiBsb2NhbHNNYXAuZ2V0TG9jYWxUeXBlVmFyaWFibGUodmFyaWFibGUudHlwZSwgZWxlbWVudE1hcCk7CiAgfQogIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdPbmx5IGtub3cgaG93IHRvIGdldC9jcmVhdGUgbG9jYWxzIGZvciAnCiAgICAgICdWYXJpYWJsZURlY2xhcmF0aW9ucyBvciBUeXBlUGFyYW1ldGVyVHlwZVdpdGhDb250ZXh0LiBSZWNpZXZlZCAnCiAgICAgICcke3ZhcmlhYmxlLnJ1bnRpbWVUeXBlfScpOwp9CgpjbGFzcyBKc1Njb3BlSW5mbyBleHRlbmRzIFNjb3BlSW5mbyB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKc1Njb3BlSW5mb10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdzY29wZS1pbmZvJzsKCiAgZmluYWwgSXRlcmFibGU8TG9jYWw+IGxvY2Fsc1VzZWRJblRyeU9yU3luYzsKICBAb3ZlcnJpZGUKICBmaW5hbCBMb2NhbCB0aGlzTG9jYWw7CiAgZmluYWwgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzOwoKICAvLy8gVGhlIHNldCBvZiB2YXJpYWJsZXMgdGhhdCB3ZXJlIGRlZmluZWQgaW4gYW5vdGhlciBzY29wZSwgYnV0IGFyZSB1c2VkIGluCiAgLy8vIHRoaXMgc2NvcGUuCiAgZmluYWwgU2V0PExvY2FsPiBmcmVlVmFyaWFibGVzOwoKICBKc1Njb3BlSW5mby5pbnRlcm5hbCh0aGlzLmxvY2Fsc1VzZWRJblRyeU9yU3luYywgdGhpcy50aGlzTG9jYWwsCiAgICAgIHRoaXMuYm94ZWRWYXJpYWJsZXMsIHRoaXMuZnJlZVZhcmlhYmxlcyk7CgogIEpzU2NvcGVJbmZvLmZyb20odGhpcy5ib3hlZFZhcmlhYmxlcywgS2VybmVsU2NvcGVJbmZvIGluZm8sCiAgICAgIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCwgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkKICAgICAgOiB0aGlzLnRoaXNMb2NhbCA9IGluZm8uaGFzVGhpc0xvY2FsCiAgICAgICAgICAgID8gbmV3IFRoaXNMb2NhbChsb2NhbHNNYXAuY3VycmVudE1lbWJlci5lbmNsb3NpbmdDbGFzcykKICAgICAgICAgICAgOiBudWxsLAogICAgICAgIHRoaXMubG9jYWxzVXNlZEluVHJ5T3JTeW5jID0KICAgICAgICAgICAgaW5mby5sb2NhbHNVc2VkSW5UcnlPclN5bmMubWFwKGxvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKS50b1NldCgpLAogICAgICAgIHRoaXMuZnJlZVZhcmlhYmxlcyA9IGluZm8uZnJlZVZhcmlhYmxlcwogICAgICAgICAgICAubWFwKChpci5Ob2RlIG5vZGUpID0+IF9nZXRMb2NhbChub2RlLCBsb2NhbHNNYXAsIGVsZW1lbnRNYXApKQogICAgICAgICAgICAudG9TZXQoKSB7CiAgICBpZiAoaW5mby50aGlzVXNlZEFzRnJlZVZhcmlhYmxlKSB7CiAgICAgIHRoaXMuZnJlZVZhcmlhYmxlcy5hZGQodGhpcy50aGlzTG9jYWwpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQm94ZWRWYXJpYWJsZShmKExvY2FsIGxvY2FsLCBGaWVsZEVudGl0eSBmaWVsZCkpIHsKICAgIGJveGVkVmFyaWFibGVzLmZvckVhY2goKExvY2FsIGwsIEpSZWNvcmRGaWVsZCBib3gpIHsKICAgICAgZihsLCBib3gpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGxvY2FsSXNVc2VkSW5UcnlPclN5bmMoTG9jYWwgdmFyaWFibGUpID0+CiAgICAgIGxvY2Fsc1VzZWRJblRyeU9yU3luYy5jb250YWlucyh2YXJpYWJsZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCd0aGlzPSR0aGlzTG9jYWwsJyk7CiAgICBzYi53cml0ZSgnbG9jYWxzVXNlZEluVHJ5T3JTeW5jPXske2xvY2Fsc1VzZWRJblRyeU9yU3luYy5qb2luKCcsICcpfX0nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0JveGVkVmFyaWFibGUoTG9jYWwgdmFyaWFibGUpID0+IGJveGVkVmFyaWFibGVzLmNvbnRhaW5zS2V5KHZhcmlhYmxlKTsKCiAgZmFjdG9yeSBKc1Njb3BlSW5mby5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSXRlcmFibGU8TG9jYWw+IGxvY2Fsc1VzZWRJblRyeU9yU3luYyA9IHNvdXJjZS5yZWFkTG9jYWxzKCk7CiAgICBMb2NhbCB0aGlzTG9jYWwgPSBzb3VyY2UucmVhZExvY2FsT3JOdWxsKCk7CiAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMgPQogICAgICAgIHNvdXJjZS5yZWFkTG9jYWxNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4oKCkgPT4gc291cmNlLnJlYWRNZW1iZXIoKSk7CiAgICBTZXQ8TG9jYWw+IGZyZWVWYXJpYWJsZXMgPSBzb3VyY2UucmVhZExvY2FscygpLnRvU2V0KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpzU2NvcGVJbmZvLmludGVybmFsKAogICAgICAgIGxvY2Fsc1VzZWRJblRyeU9yU3luYywgdGhpc0xvY2FsLCBib3hlZFZhcmlhYmxlcywgZnJlZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShTY29wZUluZm9LaW5kLnNjb3BlSW5mbyk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTG9jYWxzKGxvY2Fsc1VzZWRJblRyeU9yU3luYyk7CiAgICBzaW5rLndyaXRlTG9jYWxPck51bGwodGhpc0xvY2FsKTsKICAgIHNpbmsud3JpdGVMb2NhbE1hcChib3hlZFZhcmlhYmxlcywgc2luay53cml0ZU1lbWJlcik7CiAgICBzaW5rLndyaXRlTG9jYWxzKGZyZWVWYXJpYWJsZXMpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIEpzQ2FwdHVyZWRTY29wZSBleHRlbmRzIEpzU2NvcGVJbmZvIGltcGxlbWVudHMgQ2FwdHVyZWRTY29wZSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKc0NhcHR1cmVkU2NvcGVdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2FwdHVyZWQtc2NvcGUnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBMb2NhbCBjb250ZXh0OwoKICBKc0NhcHR1cmVkU2NvcGUuaW50ZXJuYWwoCiAgICAgIEl0ZXJhYmxlPExvY2FsPiBsb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgIExvY2FsIHRoaXNMb2NhbCwKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzLAogICAgICBTZXQ8TG9jYWw+IGZyZWVWYXJpYWJsZXMsCiAgICAgIHRoaXMuY29udGV4dCkKICAgICAgOiBzdXBlci5pbnRlcm5hbCgKICAgICAgICAgICAgbG9jYWxzVXNlZEluVHJ5T3JTeW5jLCB0aGlzTG9jYWwsIGJveGVkVmFyaWFibGVzLCBmcmVlVmFyaWFibGVzKTsKCiAgSnNDYXB0dXJlZFNjb3BlLmZyb20oCiAgICAgIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiBib3hlZFZhcmlhYmxlcywKICAgICAgS2VybmVsQ2FwdHVyZWRTY29wZSBjYXB0dXJlZFNjb3BlLAogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAsCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApCiAgICAgIDogdGhpcy5jb250ZXh0ID0KICAgICAgICAgICAgYm94ZWRWYXJpYWJsZXMuaXNOb3RFbXB0eSA/IGJveGVkVmFyaWFibGVzLnZhbHVlcy5maXJzdC5ib3ggOiBudWxsLAogICAgICAgIHN1cGVyLmZyb20oYm94ZWRWYXJpYWJsZXMsIGNhcHR1cmVkU2NvcGUsIGxvY2Fsc01hcCwgZWxlbWVudE1hcCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHJlcXVpcmVzQ29udGV4dEJveCA9PiBib3hlZFZhcmlhYmxlcy5pc05vdEVtcHR5OwoKICBmYWN0b3J5IEpzQ2FwdHVyZWRTY29wZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSXRlcmFibGU8TG9jYWw+IGxvY2Fsc1VzZWRJblRyeU9yU3luYyA9IHNvdXJjZS5yZWFkTG9jYWxzKCk7CiAgICBMb2NhbCB0aGlzTG9jYWwgPSBzb3VyY2UucmVhZExvY2FsT3JOdWxsKCk7CiAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMgPQogICAgICAgIHNvdXJjZS5yZWFkTG9jYWxNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4oKCkgPT4gc291cmNlLnJlYWRNZW1iZXIoKSk7CiAgICBTZXQ8TG9jYWw+IGZyZWVWYXJpYWJsZXMgPSBzb3VyY2UucmVhZExvY2FscygpLnRvU2V0KCk7CiAgICBMb2NhbCBjb250ZXh0ID0gc291cmNlLnJlYWRMb2NhbE9yTnVsbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKc0NhcHR1cmVkU2NvcGUuaW50ZXJuYWwobG9jYWxzVXNlZEluVHJ5T3JTeW5jLCB0aGlzTG9jYWwsCiAgICAgICAgYm94ZWRWYXJpYWJsZXMsIGZyZWVWYXJpYWJsZXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oU2NvcGVJbmZvS2luZC5jYXB0dXJlZFNjb3BlKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVMb2NhbHMobG9jYWxzVXNlZEluVHJ5T3JTeW5jKTsKICAgIHNpbmsud3JpdGVMb2NhbE9yTnVsbCh0aGlzTG9jYWwpOwogICAgc2luay53cml0ZUxvY2FsTWFwKGJveGVkVmFyaWFibGVzLCBzaW5rLndyaXRlTWVtYmVyKTsKICAgIHNpbmsud3JpdGVMb2NhbHMoZnJlZVZhcmlhYmxlcyk7CiAgICBzaW5rLndyaXRlTG9jYWxPck51bGwoY29udGV4dCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgSnNDYXB0dXJlZExvb3BTY29wZSBleHRlbmRzIEpzQ2FwdHVyZWRTY29wZSBpbXBsZW1lbnRzIENhcHR1cmVkTG9vcFNjb3BlIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pzQ2FwdHVyZWRMb29wU2NvcGVdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2FwdHVyZWQtbG9vcC1zY29wZSc7CgogIEBvdmVycmlkZQogIGZpbmFsIExpc3Q8TG9jYWw+IGJveGVkTG9vcFZhcmlhYmxlczsKCiAgSnNDYXB0dXJlZExvb3BTY29wZS5pbnRlcm5hbCgKICAgICAgSXRlcmFibGU8TG9jYWw+IGxvY2Fsc1VzZWRJblRyeU9yU3luYywKICAgICAgTG9jYWwgdGhpc0xvY2FsLAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMsCiAgICAgIFNldDxMb2NhbD4gZnJlZVZhcmlhYmxlcywKICAgICAgTG9jYWwgY29udGV4dCwKICAgICAgdGhpcy5ib3hlZExvb3BWYXJpYWJsZXMpCiAgICAgIDogc3VwZXIuaW50ZXJuYWwobG9jYWxzVXNlZEluVHJ5T3JTeW5jLCB0aGlzTG9jYWwsIGJveGVkVmFyaWFibGVzLAogICAgICAgICAgICBmcmVlVmFyaWFibGVzLCBjb250ZXh0KTsKCiAgSnNDYXB0dXJlZExvb3BTY29wZS5mcm9tKAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMsCiAgICAgIEtlcm5lbENhcHR1cmVkTG9vcFNjb3BlIGNhcHR1cmVkU2NvcGUsCiAgICAgIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCwKICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkKICAgICAgOiB0aGlzLmJveGVkTG9vcFZhcmlhYmxlcyA9IGNhcHR1cmVkU2NvcGUuYm94ZWRMb29wVmFyaWFibGVzCiAgICAgICAgICAgIC5tYXAobG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUpCiAgICAgICAgICAgIC50b0xpc3QoKSwKICAgICAgICBzdXBlci5mcm9tKGJveGVkVmFyaWFibGVzLCBjYXB0dXJlZFNjb3BlLCBsb2NhbHNNYXAsIGVsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNCb3hlZExvb3BWYXJpYWJsZXMgPT4gYm94ZWRMb29wVmFyaWFibGVzLmlzTm90RW1wdHk7CgogIGZhY3RvcnkgSnNDYXB0dXJlZExvb3BTY29wZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSXRlcmFibGU8TG9jYWw+IGxvY2Fsc1VzZWRJblRyeU9yU3luYyA9IHNvdXJjZS5yZWFkTG9jYWxzKCk7CiAgICBMb2NhbCB0aGlzTG9jYWwgPSBzb3VyY2UucmVhZExvY2FsT3JOdWxsKCk7CiAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMgPQogICAgICAgIHNvdXJjZS5yZWFkTG9jYWxNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4oKCkgPT4gc291cmNlLnJlYWRNZW1iZXIoKSk7CiAgICBTZXQ8TG9jYWw+IGZyZWVWYXJpYWJsZXMgPSBzb3VyY2UucmVhZExvY2FscygpLnRvU2V0KCk7CiAgICBMb2NhbCBjb250ZXh0ID0gc291cmNlLnJlYWRMb2NhbE9yTnVsbCgpOwogICAgTGlzdDxMb2NhbD4gYm94ZWRMb29wVmFyaWFibGVzID0gc291cmNlLnJlYWRMb2NhbHMoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSnNDYXB0dXJlZExvb3BTY29wZS5pbnRlcm5hbChsb2NhbHNVc2VkSW5UcnlPclN5bmMsIHRoaXNMb2NhbCwKICAgICAgICBib3hlZFZhcmlhYmxlcywgZnJlZVZhcmlhYmxlcywgY29udGV4dCwgYm94ZWRMb29wVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRMb29wU2NvcGUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxvY2Fscyhsb2NhbHNVc2VkSW5UcnlPclN5bmMpOwogICAgc2luay53cml0ZUxvY2FsT3JOdWxsKHRoaXNMb2NhbCk7CiAgICBzaW5rLndyaXRlTG9jYWxNYXAoYm94ZWRWYXJpYWJsZXMsIHNpbmsud3JpdGVNZW1iZXIpOwogICAgc2luay53cml0ZUxvY2FscyhmcmVlVmFyaWFibGVzKTsKICAgIHNpbmsud3JpdGVMb2NhbE9yTnVsbChjb250ZXh0KTsKICAgIHNpbmsud3JpdGVMb2NhbHMoYm94ZWRMb29wVmFyaWFibGVzKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW5hbWUgdGhpcyBjbGFzcy4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWRkIHVuaXR0ZXN0IGZvciB0aGUgY29tcHV0ZWQgW0Nsb3N1cmVDbGFzc10uCmNsYXNzIEtlcm5lbENsb3N1cmVDbGFzc0luZm8gZXh0ZW5kcyBKc1Njb3BlSW5mbwogICAgaW1wbGVtZW50cyBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0tlcm5lbENsb3N1cmVDbGFzc0luZm9dIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1yZXByZXNlbnRhdGlvbi1pbmZvJzsKCiAgQG92ZXJyaWRlCiAgSkZ1bmN0aW9uIGNhbGxNZXRob2Q7CiAgQG92ZXJyaWRlCiAgSlNpZ25hdHVyZU1ldGhvZCBzaWduYXR1cmVNZXRob2Q7CiAgQG92ZXJyaWRlCiAgZmluYWwgTG9jYWwgY2xvc3VyZUVudGl0eTsKICBAb3ZlcnJpZGUKICBmaW5hbCBMb2NhbCB0aGlzTG9jYWw7CiAgQG92ZXJyaWRlCiAgZmluYWwgSkNsYXNzIGNsb3N1cmVDbGFzc0VudGl0eTsKCiAgZmluYWwgTWFwPExvY2FsLCBKRmllbGQ+IGxvY2FsVG9GaWVsZE1hcDsKCiAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mby5pbnRlcm5hbCgKICAgICAgSXRlcmFibGU8TG9jYWw+IGxvY2Fsc1VzZWRJblRyeU9yU3luYywKICAgICAgdGhpcy50aGlzTG9jYWwsCiAgICAgIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiBib3hlZFZhcmlhYmxlcywKICAgICAgU2V0PExvY2FsPiBmcmVlVmFyaWFibGVzLAogICAgICB0aGlzLmNhbGxNZXRob2QsCiAgICAgIHRoaXMuc2lnbmF0dXJlTWV0aG9kLAogICAgICB0aGlzLmNsb3N1cmVFbnRpdHksCiAgICAgIHRoaXMuY2xvc3VyZUNsYXNzRW50aXR5LAogICAgICB0aGlzLmxvY2FsVG9GaWVsZE1hcCkKICAgICAgOiBzdXBlci5pbnRlcm5hbCgKICAgICAgICAgICAgbG9jYWxzVXNlZEluVHJ5T3JTeW5jLCB0aGlzTG9jYWwsIGJveGVkVmFyaWFibGVzLCBmcmVlVmFyaWFibGVzKTsKCiAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mby5mcm9tU2NvcGVJbmZvKAogICAgICB0aGlzLmNsb3N1cmVDbGFzc0VudGl0eSwKICAgICAgaXIuRnVuY3Rpb25Ob2RlIGNsb3N1cmVTb3VyY2VOb2RlLAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMsCiAgICAgIEtlcm5lbFNjb3BlSW5mbyBpbmZvLAogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAsCiAgICAgIHRoaXMuY2xvc3VyZUVudGl0eSwKICAgICAgdGhpcy50aGlzTG9jYWwsCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApCiAgICAgIDogbG9jYWxUb0ZpZWxkTWFwID0gbmV3IE1hcDxMb2NhbCwgSkZpZWxkPigpLAogICAgICAgIHN1cGVyLmZyb20oYm94ZWRWYXJpYWJsZXMsIGluZm8sIGxvY2Fsc01hcCwgZWxlbWVudE1hcCk7CgogIGZhY3RvcnkgS2VybmVsQ2xvc3VyZUNsYXNzSW5mby5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSXRlcmFibGU8TG9jYWw+IGxvY2Fsc1VzZWRJblRyeU9yU3luYyA9IHNvdXJjZS5yZWFkTG9jYWxzKCk7CiAgICBMb2NhbCB0aGlzTG9jYWwgPSBzb3VyY2UucmVhZExvY2FsT3JOdWxsKCk7CiAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMgPQogICAgICAgIHNvdXJjZS5yZWFkTG9jYWxNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4oKCkgPT4gc291cmNlLnJlYWRNZW1iZXIoKSk7CiAgICBTZXQ8TG9jYWw+IGZyZWVWYXJpYWJsZXMgPSBzb3VyY2UucmVhZExvY2FscygpLnRvU2V0KCk7CiAgICBKRnVuY3Rpb24gY2FsbE1ldGhvZCA9IHNvdXJjZS5yZWFkTWVtYmVyKCk7CiAgICBKU2lnbmF0dXJlTWV0aG9kIHNpZ25hdHVyZU1ldGhvZCA9IHNvdXJjZS5yZWFkTWVtYmVyT3JOdWxsKCk7CiAgICBMb2NhbCBjbG9zdXJlRW50aXR5ID0gc291cmNlLnJlYWRMb2NhbE9yTnVsbCgpOwogICAgSkNsYXNzIGNsb3N1cmVDbGFzc0VudGl0eSA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgIE1hcDxMb2NhbCwgSkZpZWxkPiBsb2NhbFRvRmllbGRNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkTG9jYWxNYXAoKCkgPT4gc291cmNlLnJlYWRNZW1iZXIoKSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEtlcm5lbENsb3N1cmVDbGFzc0luZm8uaW50ZXJuYWwoCiAgICAgICAgbG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICAgIHRoaXNMb2NhbCwKICAgICAgICBib3hlZFZhcmlhYmxlcywKICAgICAgICBmcmVlVmFyaWFibGVzLAogICAgICAgIGNhbGxNZXRob2QsCiAgICAgICAgc2lnbmF0dXJlTWV0aG9kLAogICAgICAgIGNsb3N1cmVFbnRpdHksCiAgICAgICAgY2xvc3VyZUNsYXNzRW50aXR5LAogICAgICAgIGxvY2FsVG9GaWVsZE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShTY29wZUluZm9LaW5kLmNsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8pOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxvY2Fscyhsb2NhbHNVc2VkSW5UcnlPclN5bmMpOwogICAgc2luay53cml0ZUxvY2FsT3JOdWxsKHRoaXNMb2NhbCk7CiAgICBzaW5rLndyaXRlTG9jYWxNYXAoYm94ZWRWYXJpYWJsZXMsIHNpbmsud3JpdGVNZW1iZXIpOwogICAgc2luay53cml0ZUxvY2FscyhmcmVlVmFyaWFibGVzKTsKICAgIHNpbmsud3JpdGVNZW1iZXIoY2FsbE1ldGhvZCk7CiAgICBzaW5rLndyaXRlTWVtYmVyT3JOdWxsKHNpZ25hdHVyZU1ldGhvZCk7CiAgICBzaW5rLndyaXRlTG9jYWxPck51bGwoY2xvc3VyZUVudGl0eSk7CiAgICBzaW5rLndyaXRlQ2xhc3MoY2xvc3VyZUNsYXNzRW50aXR5KTsKICAgIHNpbmsud3JpdGVMb2NhbE1hcChsb2NhbFRvRmllbGRNYXAsIHNpbmsud3JpdGVNZW1iZXIpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8TG9jYWw+IGdldCBjcmVhdGVkRmllbGRFbnRpdGllcyA9PiBsb2NhbFRvRmllbGRNYXAua2V5cy50b0xpc3QoKTsKCiAgQG92ZXJyaWRlCiAgTG9jYWwgZ2V0TG9jYWxGb3JGaWVsZChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgZm9yIChMb2NhbCBsb2NhbCBpbiBsb2NhbFRvRmllbGRNYXAua2V5cykgewogICAgICBpZiAobG9jYWxUb0ZpZWxkTWFwW2xvY2FsXSA9PSBmaWVsZCkgewogICAgICAgIHJldHVybiBsb2NhbDsKICAgICAgfQogICAgfQogICAgZmFpbGVkQXQoZmllbGQsICJObyBsb2NhbCBmb3IgJGZpZWxkLiBPcHRpb25zOiAkbG9jYWxUb0ZpZWxkTWFwIik7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEZpZWxkRW50aXR5IGdldCB0aGlzRmllbGRFbnRpdHkgPT4gbG9jYWxUb0ZpZWxkTWFwW3RoaXNMb2NhbF07CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEZyZWVWYXJpYWJsZShmKExvY2FsIHZhcmlhYmxlLCBKRmllbGQgZmllbGQpKSB7CiAgICBsb2NhbFRvRmllbGRNYXAuZm9yRWFjaChmKTsKICAgIGJveGVkVmFyaWFibGVzLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Nsb3N1cmUgPT4gdHJ1ZTsKfQoKY2xhc3MgSkNsb3N1cmVDbGFzcyBleHRlbmRzIEpDbGFzcyB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ2xvc3VyZUNsYXNzXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Nsb3N1cmUtY2xhc3MnOwoKICBKQ2xvc3VyZUNsYXNzKEpMaWJyYXJ5IGxpYnJhcnksIFN0cmluZyBuYW1lKQogICAgICA6IHN1cGVyKGxpYnJhcnksIG5hbWUsIGlzQWJzdHJhY3Q6IGZhbHNlKTsKCiAgZmFjdG9yeSBKQ2xvc3VyZUNsYXNzLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKTGlicmFyeSBsaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5KCk7CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpDbG9zdXJlQ2xhc3MobGlicmFyeSwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NLaW5kLmNsb3N1cmUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ2xvc3VyZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtqc0VsZW1lbnRQcmVmaXh9Y2xvc3VyZV9jbGFzcygkbmFtZSknOwp9CgpjbGFzcyBBbm9ueW1vdXNDbG9zdXJlTG9jYWwgaW1wbGVtZW50cyBMb2NhbCB7CiAgZmluYWwgSkNsb3N1cmVDbGFzcyBjbG9zdXJlQ2xhc3M7CgogIEFub255bW91c0Nsb3N1cmVMb2NhbCh0aGlzLmNsb3N1cmVDbGFzcyk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnJzsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBjbG9zdXJlQ2xhc3MuaGFzaENvZGUgKiAxMzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBBbm9ueW1vdXNDbG9zdXJlTG9jYWwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBjbG9zdXJlQ2xhc3MgPT0gb3RoZXIuY2xvc3VyZUNsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJyR7anNFbGVtZW50UHJlZml4fWFub255bW91c19jbG9zdXJlX2xvY2FsKCR7Y2xvc3VyZUNsYXNzLm5hbWV9KSc7Cn0KCmNsYXNzIEpDbG9zdXJlRmllbGQgZXh0ZW5kcyBKRmllbGQgaW1wbGVtZW50cyBQcml2YXRlbHlOYW1lZEpTRW50aXR5IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pDbG9zdXJlQ2xhc3NdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1maWVsZCc7CgogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBkZWNsYXJlZE5hbWU7CgogIEpDbG9zdXJlRmllbGQoCiAgICAgIFN0cmluZyBuYW1lLCBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGNvbnRhaW5pbmdDbGFzcywgU3RyaW5nIGRlY2xhcmVkTmFtZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0Fzc2lnbmFibGV9KQogICAgICA6IHRoaXMuaW50ZXJuYWwoCiAgICAgICAgICAgIGNvbnRhaW5pbmdDbGFzcy5jbG9zdXJlQ2xhc3NFbnRpdHkubGlicmFyeSwKICAgICAgICAgICAgY29udGFpbmluZ0NsYXNzLmNsb3N1cmVDbGFzc0VudGl0eSwKICAgICAgICAgICAgbmV3IE5hbWUobmFtZSwgY29udGFpbmluZ0NsYXNzLmNsb3N1cmVDbGFzc0VudGl0eS5saWJyYXJ5KSwKICAgICAgICAgICAgZGVjbGFyZWROYW1lLAogICAgICAgICAgICBpc0Fzc2lnbmFibGU6IGlzQXNzaWduYWJsZSwKICAgICAgICAgICAgaXNDb25zdDogaXNDb25zdCk7CgogIEpDbG9zdXJlRmllbGQuaW50ZXJuYWwoSkxpYnJhcnkgbGlicmFyeSwgSkNsb3N1cmVDbGFzcyBlbmNsb3NpbmdDbGFzcywKICAgICAgTmFtZSBtZW1iZXJOYW1lLCB0aGlzLmRlY2xhcmVkTmFtZSwge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0Fzc2lnbmFibGV9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBtZW1iZXJOYW1lLAogICAgICAgICAgICBpc0Fzc2lnbmFibGU6IGlzQXNzaWduYWJsZSwgaXNDb25zdDogaXNDb25zdCwgaXNTdGF0aWM6IGZhbHNlKTsKCiAgZmFjdG9yeSBKQ2xvc3VyZUZpZWxkLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKQ2xhc3MgY2xzID0gc291cmNlLnJlYWRDbGFzcygpOwogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgU3RyaW5nIGRlY2xhcmVkTmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBib29sIGlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNBc3NpZ25hYmxlID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpDbG9zdXJlRmllbGQuaW50ZXJuYWwoCiAgICAgICAgY2xzLmxpYnJhcnksIGNscywgbmV3IE5hbWUobmFtZSwgY2xzLmxpYnJhcnkpLCBkZWNsYXJlZE5hbWUsCiAgICAgICAgaXNBc3NpZ25hYmxlOiBpc0Fzc2lnbmFibGUsIGlzQ29uc3Q6IGlzQ29uc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuY2xvc3VyZUZpZWxkKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZVN0cmluZyhkZWNsYXJlZE5hbWUpOwogICAgc2luay53cml0ZUJvb2woaXNDb25zdCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0Fzc2lnbmFibGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIEVudGl0eSBnZXQgcm9vdE9mU2NvcGUgPT4gZW5jbG9zaW5nQ2xhc3M7Cn0KCmNsYXNzIFJlY29yZENsYXNzRGF0YSBpbXBsZW1lbnRzIEpDbGFzc0RhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbUmVjb3JkQ2xhc3NEYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3JlY29yZC1jbGFzcy1kYXRhJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CgogIEBvdmVycmlkZQogIGZpbmFsIEludGVyZmFjZVR5cGUgdGhpc1R5cGU7CgogIEBvdmVycmlkZQogIGZpbmFsIE9yZGVyZWRUeXBlU2V0IG9yZGVyZWRUeXBlU2V0OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZTsKCiAgUmVjb3JkQ2xhc3NEYXRhKAogICAgICB0aGlzLmRlZmluaXRpb24sIHRoaXMudGhpc1R5cGUsIHRoaXMuc3VwZXJ0eXBlLCB0aGlzLm9yZGVyZWRUeXBlU2V0KTsKCiAgZmFjdG9yeSBSZWNvcmRDbGFzc0RhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIENsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbmV3IENsYXNzRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGUoKTsKICAgIE9yZGVyZWRUeXBlU2V0IG9yZGVyZWRUeXBlU2V0ID0KICAgICAgICBuZXcgT3JkZXJlZFR5cGVTZXQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFJlY29yZENsYXNzRGF0YShkZWZpbml0aW9uLCB0aGlzVHlwZSwgc3VwZXJ0eXBlLCBvcmRlcmVkVHlwZVNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NEYXRhS2luZC5yZWNvcmQpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZGVmaW5pdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUodGhpc1R5cGUpOwogICAgc2luay53cml0ZURhcnRUeXBlKHN1cGVydHlwZSk7CiAgICBvcmRlcmVkVHlwZVNldC53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNaXhpbkFwcGxpY2F0aW9uID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VudW1DbGFzcyA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0IGNhbGxUeXBlID0+IG51bGw7CgogIEBvdmVycmlkZQogIExpc3Q8SW50ZXJmYWNlVHlwZT4gZ2V0IGludGVyZmFjZXMgPT4gY29uc3QgPEludGVyZmFjZVR5cGU+W107CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IG1peGVkSW5UeXBlID0+IG51bGw7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IHJhd1R5cGUgPT4gdGhpc1R5cGU7Cn0KCi8vLyBBIGNvbnRhaW5lciBmb3IgdmFyaWFibGVzIGRlY2xhcmVkIGluIGEgcGFydGljdWxhciBzY29wZSB0aGF0IGFyZSBhY2Nlc3NlZAovLy8gZWxzZXdoZXJlLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBEb24ndCBpbXBsZW1lbnQgSkNsYXNzLiBUaGlzIGlzbid0IGFjdHVhbGx5IGEKLy8gY2xhc3MuCmNsYXNzIEpSZWNvcmQgZXh0ZW5kcyBKQ2xhc3MgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSlJlY29yZF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdyZWNvcmQnOwoKICBKUmVjb3JkKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUpCiAgICAgIDogc3VwZXIobGlicmFyeSwgbmFtZSwgaXNBYnN0cmFjdDogZmFsc2UpOwoKICBmYWN0b3J5IEpSZWNvcmQucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEpMaWJyYXJ5IGxpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnkoKTsKICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSlJlY29yZChsaWJyYXJ5LCBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpDbGFzc0tpbmQucmVjb3JkKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5KGxpYnJhcnkpOwogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Nsb3N1cmUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke2pzRWxlbWVudFByZWZpeH1yZWNvcmRfY29udGFpbmVyKCRuYW1lKSc7Cn0KCi8vLyBBIHZhcmlhYmxlIHRoYXQgaGFzIGJlZW4gImJveGVkIiB0byBwcmV2ZW50IG5hbWUgc2hhZG93aW5nIHdpdGggdGhlCi8vLyBvcmlnaW5hbCB2YXJpYWJsZSBhbmQgZW5zdXJlIHRoYXQgdGhpcyB2YXJpYWJsZSBpcyB1cGRhdGVkL3JlYWQgd2l0aCB0aGUKLy8vIG1vc3QgcmVjZW50IHZhbHVlLgpjbGFzcyBKUmVjb3JkRmllbGQgZXh0ZW5kcyBKRmllbGQgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSlJlY29yZEZpZWxkXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3JlY29yZC1maWVsZCc7CgogIGZpbmFsIEJveExvY2FsIGJveDsKCiAgSlJlY29yZEZpZWxkKFN0cmluZyBuYW1lLCB0aGlzLmJveCwge2Jvb2wgaXNDb25zdH0pCiAgICAgIDogc3VwZXIoYm94LmNvbnRhaW5lci5saWJyYXJ5LCBib3guY29udGFpbmVyLAogICAgICAgICAgICBuZXcgTmFtZShuYW1lLCBib3guY29udGFpbmVyLmxpYnJhcnkpLAogICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsIGlzQXNzaWduYWJsZTogdHJ1ZSwgaXNDb25zdDogaXNDb25zdCk7CgogIGZhY3RvcnkgSlJlY29yZEZpZWxkLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3MgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICBib29sIGlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSlJlY29yZEZpZWxkKG5hbWUsIG5ldyBCb3hMb2NhbChlbmNsb3NpbmdDbGFzcyksCiAgICAgICAgaXNDb25zdDogaXNDb25zdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyS2luZC5yZWNvcmRGaWVsZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZUNsYXNzKGVuY2xvc2luZ0NsYXNzKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ29uc3QpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGVzZSBhbm9tYWxpZXMuIE1heWJlIGJ5IHNlcGFyYXRpbmcgdGhlCiAgLy8gSi1lbnRpdGllcyBmcm9tIHRoZSBLLWVudGl0aWVzLgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZhbHNlOwp9CgpjbGFzcyBDbG9zdXJlQ2xhc3NEYXRhIGV4dGVuZHMgUmVjb3JkQ2xhc3NEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0Nsb3N1cmVDbGFzc0RhdGFdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1jbGFzcy1kYXRhJzsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGNhbGxUeXBlOwoKICBDbG9zdXJlQ2xhc3NEYXRhKENsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlLAogICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSwgT3JkZXJlZFR5cGVTZXQgb3JkZXJlZFR5cGVTZXQpCiAgICAgIDogc3VwZXIoZGVmaW5pdGlvbiwgdGhpc1R5cGUsIHN1cGVydHlwZSwgb3JkZXJlZFR5cGVTZXQpOwoKICBmYWN0b3J5IENsb3N1cmVDbGFzc0RhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIENsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbmV3IENsYXNzRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGUoKTsKICAgIE9yZGVyZWRUeXBlU2V0IG9yZGVyZWRUeXBlU2V0ID0KICAgICAgICBuZXcgT3JkZXJlZFR5cGVTZXQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBGdW5jdGlvblR5cGUgY2FsbFR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENsb3N1cmVDbGFzc0RhdGEoZGVmaW5pdGlvbiwgdGhpc1R5cGUsIHN1cGVydHlwZSwgb3JkZXJlZFR5cGVTZXQpCiAgICAgIC4uY2FsbFR5cGUgPSBjYWxsVHlwZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpDbGFzc0RhdGFLaW5kLmNsb3N1cmUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZGVmaW5pdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUodGhpc1R5cGUpOwogICAgc2luay53cml0ZURhcnRUeXBlKHN1cGVydHlwZSk7CiAgICBvcmRlcmVkVHlwZVNldC53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUoY2FsbFR5cGUpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIENsb3N1cmVDbGFzc0RlZmluaXRpb24gaW1wbGVtZW50cyBDbGFzc0RlZmluaXRpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ2xvc3VyZUNsYXNzRGVmaW5pdGlvbl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbG9zdXJlLWNsYXNzLWRlZmluaXRpb24nOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTb3VyY2VTcGFuIGxvY2F0aW9uOwoKICBDbG9zdXJlQ2xhc3NEZWZpbml0aW9uKHRoaXMubG9jYXRpb24pOwoKICBmYWN0b3J5IENsb3N1cmVDbGFzc0RlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFNvdXJjZVNwYW4gbG9jYXRpb24gPSBzb3VyY2UucmVhZFNvdXJjZVNwYW4oKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2xvc3VyZUNsYXNzRGVmaW5pdGlvbihsb2NhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShDbGFzc0tpbmQuY2xvc3VyZSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlU291cmNlU3Bhbihsb2NhdGlvbik7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NLaW5kIGdldCBraW5kID0+IENsYXNzS2luZC5jbG9zdXJlOwoKICBAb3ZlcnJpZGUKICBpci5Ob2RlIGdldCBub2RlID0+CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdDbG9zdXJlQ2xhc3NEZWZpbml0aW9uLm5vZGUgZm9yICRsb2NhdGlvbicpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2xvc3VyZUNsYXNzRGVmaW5pdGlvbihraW5kOiRraW5kLGxvY2F0aW9uOiRsb2NhdGlvbiknOwp9CgphYnN0cmFjdCBjbGFzcyBDbG9zdXJlTWVtYmVyRGF0YSBpbXBsZW1lbnRzIEpNZW1iZXJEYXRhIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb247CiAgZmluYWwgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZTsKCiAgQ2xvc3VyZU1lbWJlckRhdGEodGhpcy5kZWZpbml0aW9uLCB0aGlzLm1lbWJlclRoaXNUeXBlKTsKCiAgQG92ZXJyaWRlCiAgU3RhdGljVHlwZUNhY2hlIGdldCBzdGF0aWNUeXBlcyB7CiAgICAvLyBUaGUgY2FjaGVkIHR5cGVzIGFyZSBzdG9yZWQgaW4gdGhlIGRhdGEgZm9yIGVuY2xvc2luZyBtZW1iZXIuCiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2xvc3VyZU1lbWJlckRhdGEuc3RhdGljVHlwZXMiKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIG1lbWJlclRoaXNUeXBlOwogIH0KfQoKY2xhc3MgQ2xvc3VyZUZ1bmN0aW9uRGF0YSBleHRlbmRzIENsb3N1cmVNZW1iZXJEYXRhCiAgICB3aXRoIEZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbiwgRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluCiAgICBpbXBsZW1lbnRzIEZ1bmN0aW9uRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbG9zdXJlRnVuY3Rpb25EYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Nsb3N1cmUtZnVuY3Rpb24tZGF0YSc7CgogIGZpbmFsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzczsKCiAgQ2xvc3VyZUZ1bmN0aW9uRGF0YSgKICAgICAgQ2xvc3VyZU1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiwKICAgICAgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSwKICAgICAgdGhpcy5mdW5jdGlvblR5cGUsCiAgICAgIHRoaXMuZnVuY3Rpb25Ob2RlLAogICAgICB0aGlzLmNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzKQogICAgICA6IHN1cGVyKGRlZmluaXRpb24sIG1lbWJlclRoaXNUeXBlKTsKCiAgZmFjdG9yeSBDbG9zdXJlRnVuY3Rpb25EYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBDbG9zdXJlTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KICAgICAgICBuZXcgTWVtYmVyRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSA9IHNvdXJjZS5yZWFkVHJlZU5vZGUoKTsKICAgIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzID0KICAgICAgICBzb3VyY2UucmVhZEVudW0oQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MudmFsdWVzKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2xvc3VyZUZ1bmN0aW9uRGF0YShkZWZpbml0aW9uLCBtZW1iZXJUaGlzVHlwZSwgZnVuY3Rpb25UeXBlLAogICAgICAgIGZ1bmN0aW9uTm9kZSwgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlckRhdGFLaW5kLmNsb3N1cmVGdW5jdGlvbik7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBkZWZpbml0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZShtZW1iZXJUaGlzVHlwZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZShmdW5jdGlvblR5cGUpOwogICAgc2luay53cml0ZVRyZWVOb2RlKGZ1bmN0aW9uTm9kZSk7CiAgICBzaW5rLndyaXRlRW51bShjbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gZnVuY3Rpb25UeXBlOwogIH0KfQoKY2xhc3MgQ2xvc3VyZUZpZWxkRGF0YSBleHRlbmRzIENsb3N1cmVNZW1iZXJEYXRhIGltcGxlbWVudHMgSkZpZWxkRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbG9zdXJlRmllbGREYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Nsb3N1cmUtZmllbGQtZGF0YSc7CgogIERhcnRUeXBlIF90eXBlOwoKICBDbG9zdXJlRmllbGREYXRhKE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiwgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSkKICAgICAgOiBzdXBlcihkZWZpbml0aW9uLCBtZW1iZXJUaGlzVHlwZSk7CgogIGZhY3RvcnkgQ2xvc3VyZUZpZWxkRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KICAgICAgICBuZXcgTWVtYmVyRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENsb3N1cmVGaWVsZERhdGEoZGVmaW5pdGlvbiwgbWVtYmVyVGhpc1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlckRhdGFLaW5kLmNsb3N1cmVGaWVsZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBkZWZpbml0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZShtZW1iZXJUaGlzVHlwZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRGaWVsZFR5cGUoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgaWYgKF90eXBlICE9IG51bGwpIHJldHVybiBfdHlwZTsKICAgIGlyLlRyZWVOb2RlIHNvdXJjZU5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICBpci5EYXJ0VHlwZSB0eXBlOwogICAgaWYgKHNvdXJjZU5vZGUgaXMgaXIuQ2xhc3MpIHsKICAgICAgdHlwZSA9IHNvdXJjZU5vZGUudGhpc1R5cGU7CiAgICB9IGVsc2UgaWYgKHNvdXJjZU5vZGUgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICB0eXBlID0gc291cmNlTm9kZS50eXBlOwogICAgfSBlbHNlIGlmIChzb3VyY2VOb2RlIGlzIGlyLkZpZWxkKSB7CiAgICAgIHR5cGUgPSBzb3VyY2VOb2RlLnR5cGU7CiAgICB9IGVsc2UgaWYgKHNvdXJjZU5vZGUgaXMgaXIuVHlwZUxpdGVyYWwpIHsKICAgICAgdHlwZSA9IHNvdXJjZU5vZGUudHlwZTsKICAgIH0gZWxzZSBpZiAoc291cmNlTm9kZSBpcyBpci5UeXBlZGVmKSB7CiAgICAgIHR5cGUgPSBzb3VyY2VOb2RlLnR5cGU7CiAgICB9IGVsc2UgaWYgKHNvdXJjZU5vZGUgaXMgaXIuVHlwZVBhcmFtZXRlcikgewogICAgICB0eXBlID0gc291cmNlTm9kZS5ib3VuZDsKICAgIH0gZWxzZSB7CiAgICAgIGZhaWxlZEF0KAogICAgICAgICAgZGVmaW5pdGlvbi5sb2NhdGlvbiwKICAgICAgICAgICdVbmV4cGVjdGVkIG5vZGUgdHlwZSAke3NvdXJjZU5vZGV9IGluICcKICAgICAgICAgICdDbG9zdXJlRmllbGREYXRhLmdldEZpZWxkVHlwZScpOwogICAgfQogICAgcmV0dXJuIF90eXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICBmYWlsZWRBdCgKICAgICAgICBkZWZpbml0aW9uLmxvY2F0aW9uLAogICAgICAgICJVbmV4cGVjdGVkIGZpZWxkICR7ZGVmaW5pdGlvbn0gaW4gIgogICAgICAgICJDbG9zdXJlRmllbGREYXRhLmdldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uIik7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyA9PgogICAgICBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5ub25lOwp9CgpjbGFzcyBDbG9zdXJlTWVtYmVyRGVmaW5pdGlvbiBpbXBsZW1lbnRzIE1lbWJlckRlZmluaXRpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ2xvc3VyZU1lbWJlckRlZmluaXRpb25dIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1tZW1iZXItZGVmaW5pdGlvbic7CgogIEBvdmVycmlkZQogIGZpbmFsIFNvdXJjZVNwYW4gbG9jYXRpb247CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyS2luZCBraW5kOwogIEBvdmVycmlkZQogIGZpbmFsIGlyLlRyZWVOb2RlIG5vZGU7CgogIENsb3N1cmVNZW1iZXJEZWZpbml0aW9uKHRoaXMubG9jYXRpb24sIHRoaXMua2luZCwgdGhpcy5ub2RlKQogICAgICA6IGFzc2VydCgKICAgICAgICAgICAga2luZCA9PSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsIHx8IGtpbmQgPT0gTWVtYmVyS2luZC5jbG9zdXJlRmllbGQpOwoKICBmYWN0b3J5IENsb3N1cmVNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIE1lbWJlcktpbmQga2luZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTb3VyY2VTcGFuIGxvY2F0aW9uID0gc291cmNlLnJlYWRTb3VyY2VTcGFuKCk7CiAgICBpci5UcmVlTm9kZSBub2RlID0gc291cmNlLnJlYWRUcmVlTm9kZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDbG9zdXJlTWVtYmVyRGVmaW5pdGlvbihsb2NhdGlvbiwga2luZCwgbm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVTb3VyY2VTcGFuKGxvY2F0aW9uKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZShub2RlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2xvc3VyZU1lbWJlckRlZmluaXRpb24oa2luZDoka2luZCxsb2NhdGlvbjokbG9jYXRpb24pJzsKfQoKY2xhc3MgUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbiBpbXBsZW1lbnRzIENsYXNzRGVmaW5pdGlvbiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtSZWNvcmRDb250YWluZXJEZWZpbml0aW9uXSBvYmplY3RzIGluCiAgLy8vIGEgZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3JlY29yZC1kZWZpbml0aW9uJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlU3BhbiBsb2NhdGlvbjsKCiAgUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbih0aGlzLmxvY2F0aW9uKTsKCiAgZmFjdG9yeSBSZWNvcmRDb250YWluZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTb3VyY2VTcGFuIGxvY2F0aW9uID0gc291cmNlLnJlYWRTb3VyY2VTcGFuKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFJlY29yZENvbnRhaW5lckRlZmluaXRpb24obG9jYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oQ2xhc3NLaW5kLnJlY29yZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlU291cmNlU3Bhbihsb2NhdGlvbik7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NLaW5kIGdldCBraW5kID0+IENsYXNzS2luZC5yZWNvcmQ7CgogIEBvdmVycmlkZQogIGlyLk5vZGUgZ2V0IG5vZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICdSZWNvcmRDb250YWluZXJEZWZpbml0aW9uLm5vZGUgZm9yICRsb2NhdGlvbicpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbihraW5kOiRraW5kLGxvY2F0aW9uOiRsb2NhdGlvbiknOwp9CgphYnN0cmFjdCBjbGFzcyBDbG9zdXJlUnRpTmVlZCB7CiAgYm9vbCBjbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhDbGFzc0VudGl0eSBjbHMpOwoKICBib29sIG1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBtZXRob2QpOwoKICBib29sIG1ldGhvZE5lZWRzU2lnbmF0dXJlKE1lbWJlckVudGl0eSBtZXRob2QpOwoKICBib29sIGxvY2FsRnVuY3Rpb25OZWVkc1R5cGVBcmd1bWVudHMoaXIuTG9jYWxGdW5jdGlvbiBub2RlKTsKCiAgYm9vbCBsb2NhbEZ1bmN0aW9uTmVlZHNTaWduYXR1cmUoaXIuTG9jYWxGdW5jdGlvbiBub2RlKTsKCiAgYm9vbCBzZWxlY3Rvck5lZWRzVHlwZUFyZ3VtZW50cyhTZWxlY3RvciBzZWxlY3Rvcik7CgogIGJvb2wgaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQpOwp9CoUDAE5OPAEoARoZKCQrIR0hJyknHyIuIyQYOhYBL0UdLAEkAU4wPEgZSAE5JgFNUAE5LjYXOEJMP05ENjs1QE0VSEYEAS8MKBUjTkYjCBknNio6KyIIEwQBDDBQSSQrNiwGAS0MURYEAUY/DDhLHx8jJyNNIU8PTAYEAQxGPz5BAQxEOAwZPEYUBAIBTk9KUVFQIgRPD0s4ARskKioBTi87SBlHATMrARZHAVEmMioeKRkTLSFBHhsOEyoTOCw6TxsOEzNJPBsOEzVLQBsOEzJMS0tQQBsOEzAhOh4bFUs6HRAOEy8hOh4bH0UbDhMxSTgbDhMwTBsOEyohOh4bDhMsMTwbDhMrMT8bDhMrMT8bDhM6SzlDGw4TCggUBgFBKwYnTiMvCAgEASUvOh4qS0szTzBHAR4/Mkc8ATBDPhE/PgoyCgFCJD82TSAUGiYfFSNLKUM4SgFOThxKPzA3PzlFUU4qSQwKNggIS0gEAVFKT05MPDQvGxwcLx4mN0kuLks7AU0lSzQlOAYkPA0vRgYdBAIBRiMRUC8wLDE4RgRESCICASZFHSoBLwwZMQFPEiIBQzABPj4rRBQlUDBLFycuBgQBDEE5EQgEAQwxMAEMFioiTRoEAQxQAT4XQTAuTTwVJUoEAQwoLRUtJjolEwQCAUVJHS4BDBcBHC0XLyAUGE4BGC8pIyEXUEoBDDwBQhdBMC5NPC4VSjEEAQwoMRUtJjolJBMEAgFRTR0zAQwoASAtFy8gFR9JJQEcLy0jIUMtF0oBDEMBRhdBMC5NPC46FU5FBAEMKDUVLSY6JSQqEwQCAStGMStQHTsBDBgMJAwdDBkMIwEsASMtFi8gFxwaHxwYTgEoHykvHCMaFiE0QQFJF0EwLk08MEI0NCk4FTAfExgXFBkXHBoEAQwoPRUtJjolIi0qKTsTBAEMSQEMLjAtFggGRxEEAQxBAQw+IB8EAQweAgElRx0tAS8xAUAXLScVLQQBDCgoFSAcEwQBDB4BDEECAS8kASwBDBkBDDIBDBwtNy8EAQwXSQIBR0cdLQEMHQERUCkXODBIGigfAUlNM0wBQBclJy8mKxUnRTcEAQwoLhUlHCQdIhMEAQwsAgEuSR0xAQwkAQwgAQwnAQwhARNMAUIXUTQ1JDcVUQQBDCgrFSYiIyoTBAEMKAEMIQEMIQEMQQEMKQEMKQIBTw9GCh9BHSYBLjEBOhctJxUnBAEMKCcVIBwTBAEMHwEMRAIBSE0XJEYdLAEWATY0M0QBPxcnMCYVQBsEAQwoLRUcJR0TBAFKJQwmAQwgAQweAgExSh0yAQwZAUc+QAFDF1E0NSQ3MxVRHQQBDCgsFSYiIyoiEwQCATpQHTgBDB0BKQFJFzMVMQQBDCgnFSQTBAEMKwEMFk8BDFACAToMJSYBOwEMJEVBBAEMPxsEAgE0Sx5NHTUBIwwmDDkBFyokGRkkKwFGFyk5STc6NjkVTTAEAQwoNRUmOSYmLRMEAQw8GQQCAUlKHTIBEgFOKwFDFyI5SRU9BAEMKDIVJjkTBAEMNSUuFiIiNx4pHi8eKx4xHw0QHzMsBjEEAQxNDh0tOBEEAQw5JAIBPFEdOQEMHQwZDBoBPxBQATYsFzMuFT4EAQwoGhUkHhMEAQxRAgE9UR8xAQwdASwBTBczFTQEAQwoJhUkEwQBDCoBDDI3AQwXQgIBIDEBOAEyAT8BOwE2ASg1AgEqcGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvY2xvc3VyZS5kYXJ0L3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX21vZGVsL2Vudi5kYXJ0wACFqS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfbW9kZWwuZW52OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RydWN0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2luZGV4ZWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfY2FjaGUuZGFydCc7CmltcG9ydCAnLi4vaXIvdmlzaXRvcnMuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vb3JkZXJlZF90eXBlc2V0LmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9zc2EvdHlwZV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXBfaW1wbC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy5kYXJ0JzsKCi8vLyBFbnZpcm9ubWVudCBmb3IgZmFzdCBsb29rdXAgb2YgY29tcG9uZW50IGxpYnJhcmllcy4KY2xhc3MgSlByb2dyYW1FbnYgewogIGZpbmFsIEl0ZXJhYmxlPGlyLkNvbXBvbmVudD4gX2NvbXBvbmVudHM7CiAgZmluYWwgTWFwPFVyaSwgSkxpYnJhcnlFbnY+IF9saWJyYXJ5TWFwID0ge307CgogIEpQcm9ncmFtRW52KHRoaXMuX2NvbXBvbmVudHMpOwoKICAvLy8gVE9ETyhqb2hubml3aW50aGVyKTogSGFuZGxlIGFyYml0cmFyeSBsb2FkIG9yZGVyIGlmIG5lZWRlZC4KICBpci5NZW1iZXIgZ2V0IG1haW5NZXRob2QgPT4gX2NvbXBvbmVudHMuZmlyc3Q/Lm1haW5NZXRob2Q7CgogIGlyLkNvbXBvbmVudCBnZXQgbWFpbkNvbXBvbmVudCA9PiBfY29tcG9uZW50cy5maXJzdDsKCiAgdm9pZCByZWdpc3RlckxpYnJhcnkoSkxpYnJhcnlFbnYgZW52KSB7CiAgICBfbGlicmFyeU1hcFtlbnYubGlicmFyeS5pbXBvcnRVcmldID0gZW52OwogIH0KCiAgLy8vIFJldHVybiB0aGUgW0pMaWJyYXJ5RW52XSBmb3IgdGhlIGxpYnJhcnkgd2l0aCB0aGUgY2Fub25pY2FsIFt1cmldLgogIEpMaWJyYXJ5RW52IGxvb2t1cExpYnJhcnkoVXJpIHVyaSkgewogICAgcmV0dXJuIF9saWJyYXJ5TWFwW3VyaV07CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGxpYnJhcnkgaW4gdGhpcyBlbnZpcm9ubWVudC4KICB2b2lkIGZvckVhY2hMaWJyYXJ5KHZvaWQgZihKTGlicmFyeUVudiBsaWJyYXJ5KSkgewogICAgX2xpYnJhcnlNYXAudmFsdWVzLmZvckVhY2goZik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpYnJhcmllcyBpbiB0aGlzIGVudmlyb25tZW50LgogIGludCBnZXQgbGVuZ3RoIHsKICAgIHJldHVybiBfbGlicmFyeU1hcC5sZW5ndGg7CiAgfQp9CgovLy8gRW52aXJvbm1lbnQgZm9yIGZhc3QgbG9va3VwIG9mIGxpYnJhcnkgY2xhc3NlcyBhbmQgbWVtYmVycy4KY2xhc3MgSkxpYnJhcnlFbnYgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkxpYnJhcnlFbnZdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnbGlicmFyeS1lbnYnOwoKICBmaW5hbCBpci5MaWJyYXJ5IGxpYnJhcnk7CiAgZmluYWwgTWFwPFN0cmluZywgSkNsYXNzRW52PiBfY2xhc3NNYXAgPSB7fTsKICBmaW5hbCBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IF9tZW1iZXJNYXA7CiAgZmluYWwgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfc2V0dGVyTWFwOwoKICBKTGlicmFyeUVudih0aGlzLmxpYnJhcnksIHRoaXMuX21lbWJlck1hcCwgdGhpcy5fc2V0dGVyTWFwKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtKTGlicmFyeUVudl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKTGlicmFyeUVudi5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuTGlicmFyeSBsaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5Tm9kZSgpOwogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBtZW1iZXJNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nTWFwKHNvdXJjZS5yZWFkTWVtYmVyTm9kZSk7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IHNldHRlck1hcCA9CiAgICAgICAgc291cmNlLnJlYWRTdHJpbmdNYXAoc291cmNlLnJlYWRNZW1iZXJOb2RlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSkxpYnJhcnlFbnYobGlicmFyeSwgbWVtYmVyTWFwLCBzZXR0ZXJNYXApOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSkxpYnJhcnlFbnZdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTGlicmFyeU5vZGUobGlicmFyeSk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKF9tZW1iZXJNYXAsIHNpbmsud3JpdGVNZW1iZXJOb2RlKTsKICAgIHNpbmsud3JpdGVTdHJpbmdNYXAoX3NldHRlck1hcCwgc2luay53cml0ZU1lbWJlck5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDbGFzcyhTdHJpbmcgbmFtZSwgSkNsYXNzRW52IGNsYXNzRW52KSB7CiAgICBfY2xhc3NNYXBbbmFtZV0gPSBjbGFzc0VudjsKICB9CgogIC8vLyBSZXR1cm4gdGhlIFtKQ2xhc3NFbnZdIGZvciB0aGUgY2xhc3MgW25hbWVdIGluIFtsaWJyYXJ5XS4KICBKQ2xhc3NFbnYgbG9va3VwQ2xhc3MoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBfY2xhc3NNYXBbbmFtZV07CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNsYXNzIGluIHRoaXMgbGlicmFyeS4KICB2b2lkIGZvckVhY2hDbGFzcyh2b2lkIGYoSkNsYXNzRW52IGNscykpIHsKICAgIF9jbGFzc01hcC52YWx1ZXMuZm9yRWFjaChmKTsKICB9CgogIC8vLyBSZXR1cm4gdGhlIFtpci5NZW1iZXJdIGZvciB0aGUgbWVtYmVyIFtuYW1lXSBpbiBbbGlicmFyeV0uCiAgaXIuTWVtYmVyIGxvb2t1cE1lbWJlcihTdHJpbmcgbmFtZSwge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIHJldHVybiBzZXR0ZXIgPyBfc2V0dGVyTWFwW25hbWVdIDogX21lbWJlck1hcFtuYW1lXTsKICB9CgogIHZvaWQgZm9yRWFjaE1lbWJlcih2b2lkIGYoaXIuTWVtYmVyIG1lbWJlcikpIHsKICAgIF9tZW1iZXJNYXAudmFsdWVzLmZvckVhY2goZik7CiAgICBmb3IgKGlyLk1lbWJlciBtZW1iZXIgaW4gX3NldHRlck1hcC52YWx1ZXMpIHsKICAgICAgaWYgKG1lbWJlciBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU2tpcCBmaWVsZHM7IHRoZXNlIGFyZSBhbHNvIGluIF9tZW1iZXJNYXAuCiAgICAgIH0KICAgIH0KICB9Cn0KCmNsYXNzIEpMaWJyYXJ5RGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKTGlicmFyeURhdGFdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnbGlicmFyeS1kYXRhJzsKCiAgZmluYWwgaXIuTGlicmFyeSBsaWJyYXJ5OwogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIGRpcmVjdCBhY2Nlc3MgdG8gW2ltcG9ydHNdLiBJdCBtaWdodCBiZSBudWxsIGlmCiAgLy8gaXQgaGFzbid0IGJlZW4gY29tcHV0ZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIFtLTGlicmFyeURhdGFdLgogIGZpbmFsIE1hcDxpci5MaWJyYXJ5RGVwZW5kZW5jeSwgSW1wb3J0RW50aXR5PiBpbXBvcnRzOwoKICBKTGlicmFyeURhdGEodGhpcy5saWJyYXJ5LCB0aGlzLmltcG9ydHMpOwoKICBmYWN0b3J5IEpMaWJyYXJ5RGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuTGlicmFyeSBsaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5Tm9kZSgpOwogICAgaW50IGltcG9ydENvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIE1hcDxpci5MaWJyYXJ5RGVwZW5kZW5jeSwgSW1wb3J0RW50aXR5PiBpbXBvcnRzOwogICAgaWYgKGltcG9ydENvdW50ID4gMCkgewogICAgICBpbXBvcnRzID0ge307CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1wb3J0Q291bnQ7IGkrKykgewogICAgICAgIGludCBpbmRleCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgICAgSW1wb3J0RW50aXR5IGltcG9ydCA9IHNvdXJjZS5yZWFkSW1wb3J0KCk7CiAgICAgICAgaW1wb3J0c1tsaWJyYXJ5LmRlcGVuZGVuY2llc1tpbmRleF1dID0gaW1wb3J0OwogICAgICB9CiAgICB9CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpMaWJyYXJ5RGF0YShsaWJyYXJ5LCBpbXBvcnRzKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5Tm9kZShsaWJyYXJ5KTsKICAgIGlmIChpbXBvcnRzID09IG51bGwpIHsKICAgICAgc2luay53cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpbmsud3JpdGVJbnQoaW1wb3J0cy5sZW5ndGgpOwogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBmb3IgKGlyLkxpYnJhcnlEZXBlbmRlbmN5IG5vZGUgaW4gbGlicmFyeS5kZXBlbmRlbmNpZXMpIHsKICAgICAgICBJbXBvcnRFbnRpdHkgaW1wb3J0ID0gaW1wb3J0c1tub2RlXTsKICAgICAgICBpZiAoaW1wb3J0ICE9IG51bGwpIHsKICAgICAgICAgIHNpbmsud3JpdGVJbnQoaW5kZXgpOwogICAgICAgICAgc2luay53cml0ZUltcG9ydChpbXBvcnQpOwogICAgICAgIH0KICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICB9CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0pDbGFzc0Vudl0gc3ViY2xhc3NlcyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIEpDbGFzc0VudktpbmQgeyBub2RlLCBjbG9zdXJlLCByZWNvcmQgfQoKLy8vIE1lbWJlciBkYXRhIGZvciBhIGNsYXNzLgphYnN0cmFjdCBjbGFzcyBKQ2xhc3NFbnYgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSkNsYXNzRW52XSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEpDbGFzc0Vudi5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIEpDbGFzc0VudktpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShKQ2xhc3NFbnZLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBKQ2xhc3NFbnZLaW5kLm5vZGU6CiAgICAgICAgcmV0dXJuIG5ldyBKQ2xhc3NFbnZJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpDbGFzc0VudktpbmQuY2xvc3VyZToKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVDbGFzc0Vudi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKQ2xhc3NFbnZLaW5kLnJlY29yZDoKICAgICAgICByZXR1cm4gbmV3IFJlY29yZEVudi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbnN1cHBvcnRlZCBKQ2xhc3NFbnZLaW5kICRraW5kIik7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtKQ2xhc3NFbnZdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFRoZSBbaXIuQ2xhc3NdIHRoYXQgZGVmaW5lZCB0aGUgY2xhc3MsIGlmIGFueS4KICBpci5DbGFzcyBnZXQgY2xzOwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgYW4gdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbi4KICBib29sIGdldCBpc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uOwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiB0aGF0IG1peGVzIGluIG1ldGhvZHMgd2l0aCBzdXBlcgogIC8vLyBjYWxscy4KICBib29sIGdldCBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbjsKCiAgLy8vIFJldHVybiB0aGUgW01lbWJlckVudGl0eV0gZm9yIHRoZSBtZW1iZXIgW25hbWVdIGluIHRoZSBjbGFzcy4gSWYgW3NldHRlcl0KICAvLy8gaXMgYHRydWVgLCB0aGUgc2V0dGVyIG9yIGFzc2lnbmFibGUgZmllbGQgY29ycmVzcG9uZGluZyB0byBbbmFtZV0gaXMKICAvLy8gcmV0dXJuZWQuCiAgTWVtYmVyRW50aXR5IGxvb2t1cE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIG1lbWJlciBvZiBbY2xzXS4KICB2b2lkIGZvckVhY2hNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKTsKCiAgLy8vIFJldHVybiB0aGUgW0NvbnN0cnVjdG9yRW50aXR5XSBmb3IgdGhlIGNvbnN0cnVjdG9yIFtuYW1lXSBpbiBbY2xzXS4KICBDb25zdHJ1Y3RvckVudGl0eSBsb29rdXBDb25zdHJ1Y3RvcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggY29uc3RydWN0b3Igb2YgW2Nsc10uCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3IoCiAgICAgIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNvbnN0cnVjdG9yIGJvZHkgZm9yIHRoZSBsaXZlIGNvbnN0cnVjdG9ycyBpbiB0aGUKICAvLy8gY2xhc3MuCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3JCb2R5KHZvaWQgZihDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3IpKTsKfQoKLy8vIEVudmlyb25tZW50IGZvciBmYXN0IGxvb2t1cCBvZiBjbGFzcyBtZW1iZXJzLgpjbGFzcyBKQ2xhc3NFbnZJbXBsIGltcGxlbWVudHMgSkNsYXNzRW52IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pDbGFzc0Vudl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbGFzcy1lbnYnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5DbGFzcyBjbHM7CiAgZmluYWwgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfY29uc3RydWN0b3JNYXA7CiAgZmluYWwgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfbWVtYmVyTWFwOwogIGZpbmFsIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX3NldHRlck1hcDsKICBmaW5hbCBMaXN0PGlyLk1lbWJlcj4gX21lbWJlcnM7IC8vIGluIGRlY2xhcmF0aW9uIG9yZGVyLgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNTdXBlck1peGluQXBwbGljYXRpb247CgogIC8vLyBDb25zdHJ1Y3RvciBib2RpZXMgY3JlYXRlZCBmb3IgdGhpcyBjbGFzcy4KICBMaXN0PENvbnN0cnVjdG9yQm9keUVudGl0eT4gX2NvbnN0cnVjdG9yQm9keUxpc3Q7CgogIEpDbGFzc0VudkltcGwodGhpcy5jbHMsIHRoaXMuX2NvbnN0cnVjdG9yTWFwLCB0aGlzLl9tZW1iZXJNYXAsCiAgICAgIHRoaXMuX3NldHRlck1hcCwgdGhpcy5fbWVtYmVycywgdGhpcy5pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbik7CgogIGZhY3RvcnkgSkNsYXNzRW52SW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuQ2xhc3MgY2xzID0gc291cmNlLnJlYWRDbGFzc05vZGUoKTsKICAgIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gY29uc3RydWN0b3JNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nTWFwKHNvdXJjZS5yZWFkTWVtYmVyTm9kZSk7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IG1lbWJlck1hcCA9CiAgICAgICAgc291cmNlLnJlYWRTdHJpbmdNYXAoc291cmNlLnJlYWRNZW1iZXJOb2RlKTsKICAgIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gc2V0dGVyTWFwID0KICAgICAgICBzb3VyY2UucmVhZFN0cmluZ01hcChzb3VyY2UucmVhZE1lbWJlck5vZGUpOwogICAgTGlzdDxpci5NZW1iZXI+IG1lbWJlcnMgPSBzb3VyY2UucmVhZE1lbWJlck5vZGVzKCk7CiAgICBib29sIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpDbGFzc0VudkltcGwoY2xzLCBjb25zdHJ1Y3Rvck1hcCwgbWVtYmVyTWFwLCBzZXR0ZXJNYXAsIG1lbWJlcnMsCiAgICAgICAgaXNTdXBlck1peGluQXBwbGljYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSkNsYXNzRW52S2luZC5ub2RlKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzc05vZGUoY2xzKTsKICAgIHNpbmsud3JpdGVTdHJpbmdNYXAoX2NvbnN0cnVjdG9yTWFwLCBzaW5rLndyaXRlTWVtYmVyTm9kZSk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKF9tZW1iZXJNYXAsIHNpbmsud3JpdGVNZW1iZXJOb2RlKTsKICAgIHNpbmsud3JpdGVTdHJpbmdNYXAoX3NldHRlck1hcCwgc2luay53cml0ZU1lbWJlck5vZGUpOwogICAgc2luay53cml0ZU1lbWJlck5vZGVzKF9tZW1iZXJzKTsKICAgIHNpbmsud3JpdGVCb29sKGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uID0+IGNscy5pc0Fub255bW91c01peGluOwoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9va3VwTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgaXIuTWVtYmVyIG1lbWJlciA9IHNldHRlciA/IF9zZXR0ZXJNYXBbbmFtZV0gOiBfbWVtYmVyTWFwW25hbWVdOwogICAgcmV0dXJuIG1lbWJlciAhPSBudWxsID8gZWxlbWVudE1hcC5nZXRNZW1iZXIobWVtYmVyKSA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBfbWVtYmVycy5mb3JFYWNoKChpci5NZW1iZXIgbWVtYmVyKSB7CiAgICAgIGYoZWxlbWVudE1hcC5nZXRNZW1iZXIobWVtYmVyKSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIFN0cmluZyBuYW1lKSB7CiAgICBpci5NZW1iZXIgY29uc3RydWN0b3IgPSBfY29uc3RydWN0b3JNYXBbbmFtZV07CiAgICByZXR1cm4gY29uc3RydWN0b3IgIT0gbnVsbCA/IGVsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpIDogbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICBfY29uc3RydWN0b3JNYXAudmFsdWVzLmZvckVhY2goKGlyLk1lbWJlciBjb25zdHJ1Y3RvcikgewogICAgICBmKGVsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpKTsKICAgIH0pOwogIH0KCiAgdm9pZCBhZGRDb25zdHJ1Y3RvckJvZHkoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yQm9keSkgewogICAgX2NvbnN0cnVjdG9yQm9keUxpc3QgPz89IDxDb25zdHJ1Y3RvckJvZHlFbnRpdHk+W107CiAgICBfY29uc3RydWN0b3JCb2R5TGlzdC5hZGQoY29uc3RydWN0b3JCb2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yQm9keSh2b2lkIGYoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yKSkgewogICAgX2NvbnN0cnVjdG9yQm9keUxpc3Q/LmZvckVhY2goZik7CiAgfQp9CgpjbGFzcyBSZWNvcmRFbnYgaW1wbGVtZW50cyBKQ2xhc3NFbnYgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbUmVjb3JkRW52XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3JlY29yZC1lbnYnOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBJbmRleGVkTWVtYmVyPiBfbWVtYmVyTWFwOwoKICBSZWNvcmRFbnYodGhpcy5fbWVtYmVyTWFwKTsKCiAgZmFjdG9yeSBSZWNvcmRFbnYucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1hcDxTdHJpbmcsIEluZGV4ZWRNZW1iZXI+IF9tZW1iZXJNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nTWFwKCgpID0+IHNvdXJjZS5yZWFkTWVtYmVyKCkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBSZWNvcmRFbnYoX21lbWJlck1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NFbnZLaW5kLnJlY29yZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKAogICAgICAgIF9tZW1iZXJNYXAsIChJbmRleGVkTWVtYmVyIG1lbWJlcikgPT4gc2luay53cml0ZU1lbWJlcihtZW1iZXIpKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvckJvZHkodm9pZCBmKENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvcikpIHsKICAgIC8vIFdlIGRvIG5vdCBjcmVhdGUgY29uc3RydWN0b3IgYm9kaWVzIGZvciBjb250YWluZXJzLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3IoCiAgICAgIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikpIHsKICAgIC8vIFdlIGRvIG5vdCBjcmVhdGUgY29uc3RydWN0b3JzIGZvciBjb250YWluZXJzLgogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUpIHsKICAgIC8vIFdlIGRvIG5vdCBjcmVhdGUgY29uc3RydWN0b3JzIGZvciBjb250YWluZXJzLgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBfbWVtYmVyTWFwLnZhbHVlcy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIHJldHVybiBfbWVtYmVyTWFwW25hbWVdOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbiA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTdXBlck1peGluQXBwbGljYXRpb24gPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGlyLkNsYXNzIGdldCBjbHMgPT4gbnVsbDsKfQoKY2xhc3MgQ2xvc3VyZUNsYXNzRW52IGV4dGVuZHMgUmVjb3JkRW52IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0Nsb3N1cmVDbGFzc0Vudl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbG9zdXJlLWNsYXNzLWVudic7CgogIENsb3N1cmVDbGFzc0VudihNYXA8U3RyaW5nLCBNZW1iZXJFbnRpdHk+IG1lbWJlck1hcCkgOiBzdXBlcihtZW1iZXJNYXApOwoKICBmYWN0b3J5IENsb3N1cmVDbGFzc0Vudi5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWFwPFN0cmluZywgSW5kZXhlZE1lbWJlcj4gX21lbWJlck1hcCA9CiAgICAgICAgc291cmNlLnJlYWRTdHJpbmdNYXAoKCkgPT4gc291cmNlLnJlYWRNZW1iZXIoKSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENsb3N1cmVDbGFzc0VudihfbWVtYmVyTWFwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpDbGFzc0VudktpbmQuY2xvc3VyZSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKAogICAgICAgIF9tZW1iZXJNYXAsIChJbmRleGVkTWVtYmVyIG1lbWJlcikgPT4gc2luay53cml0ZU1lbWJlcihtZW1iZXIpKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9va3VwTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgaWYgKHNldHRlcikgewogICAgICAvLyBBbGwgY2xvc3VyZSBmaWVsZHMgYXJlIGZpbmFsLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBzdXBlci5sb29rdXBNZW1iZXIoZWxlbWVudE1hcCwgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogIH0KfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0pDbGFzc0RhdGFdIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBKQ2xhc3NEYXRhS2luZCB7IG5vZGUsIGNsb3N1cmUsIHJlY29yZCB9CgphYnN0cmFjdCBjbGFzcyBKQ2xhc3NEYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pDbGFzc0RhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSkNsYXNzRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIEpDbGFzc0RhdGFLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSkNsYXNzRGF0YUtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIEpDbGFzc0RhdGFLaW5kLm5vZGU6CiAgICAgICAgcmV0dXJuIG5ldyBKQ2xhc3NEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKQ2xhc3NEYXRhS2luZC5jbG9zdXJlOgogICAgICAgIHJldHVybiBuZXcgQ2xvc3VyZUNsYXNzRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKQ2xhc3NEYXRhS2luZC5yZWNvcmQ6CiAgICAgICAgcmV0dXJuIG5ldyBSZWNvcmRDbGFzc0RhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBKQ2xhc3NEYXRhS2luZCAka2luZCIpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSkNsYXNzRGF0YV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICBDbGFzc0RlZmluaXRpb24gZ2V0IGRlZmluaXRpb247CgogIEludGVyZmFjZVR5cGUgZ2V0IHRoaXNUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHJhd1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgc3VwZXJ0eXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IG1peGVkSW5UeXBlOwogIExpc3Q8SW50ZXJmYWNlVHlwZT4gZ2V0IGludGVyZmFjZXM7CiAgT3JkZXJlZFR5cGVTZXQgZ2V0IG9yZGVyZWRUeXBlU2V0OwogIERhcnRUeXBlIGdldCBjYWxsVHlwZTsKCiAgYm9vbCBnZXQgaXNFbnVtQ2xhc3M7CiAgYm9vbCBnZXQgaXNNaXhpbkFwcGxpY2F0aW9uOwp9CgpjbGFzcyBKQ2xhc3NEYXRhSW1wbCBpbXBsZW1lbnRzIEpDbGFzc0RhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkNsYXNzRGF0YUltcGxdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xhc3MtZGF0YSc7CgogIGZpbmFsIGlyLkNsYXNzIGNsczsKICBAb3ZlcnJpZGUKICBmaW5hbCBDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbjsKICBAb3ZlcnJpZGUKICBib29sIGlzTWl4aW5BcHBsaWNhdGlvbjsKICBib29sIGlzQ2FsbFR5cGVDb21wdXRlZCA9IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlOwogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgcmF3VHlwZTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIG1peGVkSW5UeXBlOwogIEBvdmVycmlkZQogIExpc3Q8SW50ZXJmYWNlVHlwZT4gaW50ZXJmYWNlczsKICBAb3ZlcnJpZGUKICBPcmRlcmVkVHlwZVNldCBvcmRlcmVkVHlwZVNldDsKCiAgSkNsYXNzRGF0YUltcGwodGhpcy5jbHMsIHRoaXMuZGVmaW5pdGlvbik7CgogIGZhY3RvcnkgSkNsYXNzRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkNsYXNzIGNscyA9IHNvdXJjZS5yZWFkQ2xhc3NOb2RlKCk7CiAgICBDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IG5ldyBDbGFzc0RlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpDbGFzc0RhdGFJbXBsKGNscywgZGVmaW5pdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NEYXRhS2luZC5ub2RlKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzc05vZGUoY2xzKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW51bUNsYXNzID0+IGNscyAhPSBudWxsICYmIGNscy5pc0VudW07CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldCBjYWxsVHlwZSA9PiBudWxsOwp9CgovLy8gRW51bSB1c2VkIGZvciBpZGVudGlmeWluZyBbSk1lbWJlckRhdGFdIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBKTWVtYmVyRGF0YUtpbmQgewogIGZ1bmN0aW9uLAogIGZpZWxkLAogIGNvbnN0cnVjdG9yLAogIGNvbnN0cnVjdG9yQm9keSwKICBzaWduYXR1cmUsCiAgZ2VuZXJhdG9yQm9keSwKICBjbG9zdXJlRnVuY3Rpb24sCiAgY2xvc3VyZUZpZWxkLAp9CgphYnN0cmFjdCBjbGFzcyBKTWVtYmVyRGF0YSB7CiAgTWVtYmVyRGVmaW5pdGlvbiBnZXQgZGVmaW5pdGlvbjsKCiAgSW50ZXJmYWNlVHlwZSBnZXRNZW1iZXJUaGlzVHlwZShKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0IGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzOwoKICBTdGF0aWNUeXBlQ2FjaGUgZ2V0IHN0YXRpY1R5cGVzOwoKICBKTWVtYmVyRGF0YSgpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pNZW1iZXJEYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEpNZW1iZXJEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgSk1lbWJlckRhdGFLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSk1lbWJlckRhdGFLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuZnVuY3Rpb246CiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkRhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJEYXRhS2luZC5maWVsZDoKICAgICAgICByZXR1cm4gbmV3IEpGaWVsZERhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJEYXRhS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgICByZXR1cm4gbmV3IEpDb25zdHJ1Y3RvckRhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJEYXRhS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvckJvZHlEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuc2lnbmF0dXJlOgogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlRnVuY3Rpb25EYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJEYXRhS2luZC5nZW5lcmF0b3JCb2R5OgogICAgICAgIHJldHVybiBuZXcgR2VuZXJhdG9yQm9keUZ1bmN0aW9uRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuY2xvc3VyZUZ1bmN0aW9uOgogICAgICAgIHJldHVybiBuZXcgQ2xvc3VyZUZ1bmN0aW9uRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuY2xvc3VyZUZpZWxkOgogICAgICAgIHJldHVybiBuZXcgQ2xvc3VyZUZpZWxkRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIEpNZW1iZXJEYXRhS2luZCAka2luZCIpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSk1lbWJlckRhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKfQoKYWJzdHJhY3QgY2xhc3MgSk1lbWJlckRhdGFJbXBsIGltcGxlbWVudHMgSk1lbWJlckRhdGEgewogIGZpbmFsIGlyLk1lbWJlciBub2RlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb247CgogIEBvdmVycmlkZQogIGZpbmFsIFN0YXRpY1R5cGVDYWNoZSBzdGF0aWNUeXBlczsKCiAgSk1lbWJlckRhdGFJbXBsKHRoaXMubm9kZSwgdGhpcy5kZWZpbml0aW9uLCB0aGlzLnN0YXRpY1R5cGVzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRNZW1iZXJUaGlzVHlwZShKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEZ1bmN0aW9uRGF0YSBpbXBsZW1lbnRzIEpNZW1iZXJEYXRhIHsKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgdm9pZCBmb3JFYWNoUGFyYW1ldGVyKAogICAgICBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB2b2lkIGYoRGFydFR5cGUgdHlwZSwgU3RyaW5nIG5hbWUsIENvbnN0YW50VmFsdWUgZGVmYXVsdFZhbHVlKSwKICAgICAge2Jvb2wgaXNOYXRpdmU6IGZhbHNlfSk7Cn0KCmFic3RyYWN0IGNsYXNzIEZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbiBpbXBsZW1lbnRzIEZ1bmN0aW9uRGF0YSB7CiAgaXIuRnVuY3Rpb25Ob2RlIGdldCBmdW5jdGlvbk5vZGU7CiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBfdHlwZVZhcmlhYmxlczsKCiAgQG92ZXJyaWRlCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoCiAgICAgIGNvdmFyaWFudCBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICBpZiAoX3R5cGVWYXJpYWJsZXMgPT0gbnVsbCkgewogICAgICBpZiAoZnVuY3Rpb25Ob2RlLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgICBfdHlwZVZhcmlhYmxlcyA9IGNvbnN0IDxUeXBlVmFyaWFibGVUeXBlPltdOwogICAgICB9IGVsc2UgewogICAgICAgIGlyLlRyZWVOb2RlIHBhcmVudCA9IGZ1bmN0aW9uTm9kZS5wYXJlbnQ7CiAgICAgICAgaWYgKHBhcmVudCBpcyBpci5Db25zdHJ1Y3RvciB8fAogICAgICAgICAgICAocGFyZW50IGlzIGlyLlByb2NlZHVyZSAmJgogICAgICAgICAgICAgICAgcGFyZW50LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSkgewogICAgICAgICAgX3R5cGVWYXJpYWJsZXMgPSBjb25zdCA8VHlwZVZhcmlhYmxlVHlwZT5bXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3R5cGVWYXJpYWJsZXMgPSBmdW5jdGlvbk5vZGUudHlwZVBhcmFtZXRlcnMKICAgICAgICAgICAgICAubWFwPFR5cGVWYXJpYWJsZVR5cGU+KChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRNYXAKICAgICAgICAgICAgICAgIC5nZXREYXJ0VHlwZShuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpOwogICAgICAgICAgfSkudG9MaXN0KCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZXM7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkRhdGFGb3JFYWNoUGFyYW1ldGVyTWl4aW4gaW1wbGVtZW50cyBGdW5jdGlvbkRhdGEgewogIGlyLkZ1bmN0aW9uTm9kZSBnZXQgZnVuY3Rpb25Ob2RlOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHZvaWQgZihEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpLAogICAgICB7Ym9vbCBpc05hdGl2ZTogZmFsc2V9KSB7CiAgICB2b2lkIGhhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIHtib29sIGlzT3B0aW9uYWw6IHRydWV9KSB7CiAgICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgICAgIFN0cmluZyBuYW1lID0gbm9kZS5uYW1lOwogICAgICBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZTsKICAgICAgaWYgKGlzT3B0aW9uYWwpIHsKICAgICAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBlbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZS5pbml0aWFsaXplcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG5ldyBOdWxsQ29uc3RhbnRWYWx1ZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBmKHR5cGUsIG5hbWUsIGRlZmF1bHRWYWx1ZSk7CiAgICB9CgogICAgZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXJCeUZ1bmN0aW9uTm9kZShmdW5jdGlvbk5vZGUsIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIsIHtib29sIGlzT3B0aW9uYWwsIGJvb2wgaXNFbGlkZWR9KSB7CiAgICAgIGlmICghaXNFbGlkZWQpIHsKICAgICAgICBoYW5kbGVQYXJhbWV0ZXIocGFyYW1ldGVyLCBpc09wdGlvbmFsOiBpc09wdGlvbmFsKTsKICAgICAgfQogICAgfSwgdXNlTmF0aXZlT3JkZXJpbmc6IGlzTmF0aXZlKTsKICB9Cn0KCmNsYXNzIEZ1bmN0aW9uRGF0YUltcGwgZXh0ZW5kcyBKTWVtYmVyRGF0YUltcGwKICAgIHdpdGggRnVuY3Rpb25EYXRhVHlwZVZhcmlhYmxlc01peGluLCBGdW5jdGlvbkRhdGFGb3JFYWNoUGFyYW1ldGVyTWl4aW4KICAgIGltcGxlbWVudHMgRnVuY3Rpb25EYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0Z1bmN0aW9uRGF0YUltcGxdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZnVuY3Rpb24tZGF0YSc7CgogIEBvdmVycmlkZQogIGZpbmFsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGU7CiAgRnVuY3Rpb25UeXBlIF90eXBlOwoKICBGdW5jdGlvbkRhdGFJbXBsKGlyLk1lbWJlciBub2RlLCB0aGlzLmZ1bmN0aW9uTm9kZSwKICAgICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMpCiAgICAgIDogc3VwZXIobm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwoKICBmYWN0b3J5IEZ1bmN0aW9uRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLk1lbWJlciBub2RlID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlOwogICAgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgZnVuY3Rpb25Ob2RlID0gbm9kZS5mdW5jdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIlVuZXhwZWN0ZWQgbWVtYmVyIG5vZGUgJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pLiIpOwogICAgfQogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KICAgICAgICBuZXcgTWVtYmVyRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIFN0YXRpY1R5cGVDYWNoZSBzdGF0aWNUeXBlcyA9CiAgICAgICAgbmV3IFN0YXRpY1R5cGVDYWNoZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBub2RlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25EYXRhSW1wbChub2RlLCBmdW5jdGlvbk5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5mdW5jdGlvbik7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZShub2RlKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc3RhdGljVHlwZXMud3JpdGVUb0RhdGFTaW5rKHNpbmssIG5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoY292YXJpYW50IEpzS2VybmVsVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBfdHlwZSA/Pz0gZWxlbWVudE1hcC5nZXRGdW5jdGlvblR5cGUoZnVuY3Rpb25Ob2RlKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyB7CiAgICBpZiAobm9kZS5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm4gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucHJvcGVydHk7CiAgICByZXR1cm4gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3Mubm9uZTsKICB9Cn0KCmNsYXNzIFNpZ25hdHVyZUZ1bmN0aW9uRGF0YSBpbXBsZW1lbnRzIEZ1bmN0aW9uRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtTaWduYXR1cmVGdW5jdGlvbkRhdGFdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc2lnbmF0dXJlLWZ1bmN0aW9uLWRhdGEnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb247CiAgZmluYWwgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzczsKICBmaW5hbCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzOwoKICBTaWduYXR1cmVGdW5jdGlvbkRhdGEodGhpcy5kZWZpbml0aW9uLCB0aGlzLm1lbWJlclRoaXNUeXBlLAogICAgICB0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0aGlzLmNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzKTsKCiAgZmFjdG9yeSBTaWduYXR1cmVGdW5jdGlvbkRhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBJbnRlcmZhY2VUeXBlIG1lbWJlclRoaXNUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZShhbGxvd051bGw6IHRydWUpOwogICAgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IHNvdXJjZS5yZWFkVHlwZVBhcmFtZXRlck5vZGVzKCk7CiAgICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyA9CiAgICAgICAgc291cmNlLnJlYWRFbnVtKENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnZhbHVlcyk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFNpZ25hdHVyZUZ1bmN0aW9uRGF0YSgKICAgICAgICBkZWZpbml0aW9uLCBtZW1iZXJUaGlzVHlwZSwgdHlwZVBhcmFtZXRlcnMsIGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5zaWduYXR1cmUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZGVmaW5pdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUobWVtYmVyVGhpc1R5cGUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlVHlwZVBhcmFtZXRlck5vZGVzKHR5cGVQYXJhbWV0ZXJzKTsKICAgIHNpbmsud3JpdGVFbnVtKGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0aWNUeXBlQ2FjaGUgZ2V0IHN0YXRpY1R5cGVzID0+IGNvbnN0IFN0YXRpY1R5cGVDYWNoZSgpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiU2lnbmF0dXJlRnVuY3Rpb25EYXRhLmdldEZ1bmN0aW9uVHlwZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIHR5cGVQYXJhbWV0ZXJzCiAgICAgICAgLm1hcDxUeXBlVmFyaWFibGVUeXBlPigoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyKSB7CiAgICAgIHJldHVybiBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5ldyBpci5UeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyKSk7CiAgICB9KS50b0xpc3QoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFBhcmFtZXRlcigKICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgdm9pZCBmKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSksCiAgICAgIHtib29sIGlzTmF0aXZlOiBmYWxzZX0pIHsKICAgIHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoJ1NpZ25hdHVyZURhdGEuZm9yRWFjaFBhcmFtZXRlcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRNZW1iZXJUaGlzVHlwZShKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gbWVtYmVyVGhpc1R5cGU7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBEZWxlZ2F0ZWRGdW5jdGlvbkRhdGEgaW1wbGVtZW50cyBGdW5jdGlvbkRhdGEgewogIGZpbmFsIEZ1bmN0aW9uRGF0YSBiYXNlRGF0YTsKCiAgRGVsZWdhdGVkRnVuY3Rpb25EYXRhKHRoaXMuYmFzZURhdGEpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gYmFzZURhdGEuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnRNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIGJhc2VEYXRhLmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhlbGVtZW50TWFwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFBhcmFtZXRlcigKICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgdm9pZCBmKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSksCiAgICAgIHtib29sIGlzTmF0aXZlOiBmYWxzZX0pIHsKICAgIHJldHVybiBiYXNlRGF0YS5mb3JFYWNoUGFyYW1ldGVyKGVsZW1lbnRNYXAsIHBhcmFtZXRlclN0cnVjdHVyZSwgZiwKICAgICAgICBpc05hdGl2ZTogaXNOYXRpdmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRNZW1iZXJUaGlzVHlwZShKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gYmFzZURhdGEuZ2V0TWVtYmVyVGhpc1R5cGUoZWxlbWVudE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgPT4KICAgICAgYmFzZURhdGEuY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3M7Cn0KCmNsYXNzIEdlbmVyYXRvckJvZHlGdW5jdGlvbkRhdGEgZXh0ZW5kcyBEZWxlZ2F0ZWRGdW5jdGlvbkRhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbR2VuZXJhdG9yQm9keUZ1bmN0aW9uRGF0YV0gb2JqZWN0cyBpbgogIC8vLyBhIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdnZW5lcmF0b3ItYm9keS1kYXRhJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uOwoKICBHZW5lcmF0b3JCb2R5RnVuY3Rpb25EYXRhKEZ1bmN0aW9uRGF0YSBiYXNlRGF0YSwgdGhpcy5kZWZpbml0aW9uKQogICAgICA6IHN1cGVyKGJhc2VEYXRhKTsKCiAgZmFjdG9yeSBHZW5lcmF0b3JCb2R5RnVuY3Rpb25EYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaGFyZSB0aGUgb3JpZ2luYWwgYmFzZSBkYXRhIG9uIGRlc2VyaWFsaXphdGlvbi4KICAgIEZ1bmN0aW9uRGF0YSBiYXNlRGF0YSA9IG5ldyBKTWVtYmVyRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEdlbmVyYXRvckJvZHlGdW5jdGlvbkRhdGEoYmFzZURhdGEsIGRlZmluaXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlckRhdGFLaW5kLmdlbmVyYXRvckJvZHkpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgYmFzZURhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgZGVmaW5pdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RhdGljVHlwZUNhY2hlIGdldCBzdGF0aWNUeXBlcyA9PiBjb25zdCBTdGF0aWNUeXBlQ2FjaGUoKTsKfQoKYWJzdHJhY3QgY2xhc3MgSkNvbnN0cnVjdG9yRGF0YSBleHRlbmRzIEZ1bmN0aW9uRGF0YSB7CiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBnZXRDb25zdHJ1Y3RvckNvbnN0YW50KAogICAgICBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3Rvcik7Cn0KCmNsYXNzIEpDb25zdHJ1Y3RvckRhdGFJbXBsIGV4dGVuZHMgRnVuY3Rpb25EYXRhSW1wbAogICAgaW1wbGVtZW50cyBKQ29uc3RydWN0b3JEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pDb25zdHJ1Y3RvckRhdGFJbXBsXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvbnN0cnVjdG9yLWRhdGEnOwoKICBDb25zdGFudENvbnN0cnVjdG9yIF9jb25zdGFudENvbnN0cnVjdG9yOwogIEpDb25zdHJ1Y3RvckJvZHkgY29uc3RydWN0b3JCb2R5OwoKICBKQ29uc3RydWN0b3JEYXRhSW1wbChpci5NZW1iZXIgbm9kZSwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSwKICAgICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMpCiAgICAgIDogc3VwZXIobm9kZSwgZnVuY3Rpb25Ob2RlLCBkZWZpbml0aW9uLCBzdGF0aWNUeXBlcyk7CgogIGZhY3RvcnkgSkNvbnN0cnVjdG9yRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLk1lbWJlciBub2RlID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlOwogICAgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgZnVuY3Rpb25Ob2RlID0gbm9kZS5mdW5jdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIlVuZXhwZWN0ZWQgbWVtYmVyIG5vZGUgJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pLiIpOwogICAgfQogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KICAgICAgICBuZXcgTWVtYmVyRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIFN0YXRpY1R5cGVDYWNoZSBzdGF0aWNUeXBlcyA9CiAgICAgICAgbmV3IFN0YXRpY1R5cGVDYWNoZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBub2RlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSkNvbnN0cnVjdG9yRGF0YUltcGwoCiAgICAgICAgbm9kZSwgZnVuY3Rpb25Ob2RlLCBkZWZpbml0aW9uLCBzdGF0aWNUeXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyRGF0YUtpbmQuY29uc3RydWN0b3IpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUobm9kZSk7CiAgICBkZWZpbml0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIGFzc2VydChjb25zdHJ1Y3RvckJvZHkgPT0gbnVsbCk7CiAgICBzdGF0aWNUeXBlcy53cml0ZVRvRGF0YVNpbmsoc2luaywgbm9kZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBnZXRDb25zdHJ1Y3RvckNvbnN0YW50KAogICAgICBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikgewogICAgaWYgKF9jb25zdGFudENvbnN0cnVjdG9yID09IG51bGwpIHsKICAgICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IgJiYgY29uc3RydWN0b3IuaXNDb25zdCkgewogICAgICAgIF9jb25zdGFudENvbnN0cnVjdG9yID0KICAgICAgICAgICAgbmV3IENvbnN0YW50aWZpZXIoZWxlbWVudE1hcCkuY29tcHV0ZUNvbnN0YW50Q29uc3RydWN0b3Iobm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNvbnN0cnVjdG9yLAogICAgICAgICAgICAiVW5leHBlY3RlZCBjb25zdHJ1Y3RvciAkY29uc3RydWN0b3IgaW4gIgogICAgICAgICAgICAiQ29uc3RydWN0b3JEYXRhSW1wbC5fZ2V0Q29uc3RydWN0b3JDb25zdGFudCIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2NvbnN0YW50Q29uc3RydWN0b3I7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgPT4KICAgICAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucGFyYW1ldGVyOwp9CgpjbGFzcyBDb25zdHJ1Y3RvckJvZHlEYXRhSW1wbCBleHRlbmRzIEZ1bmN0aW9uRGF0YUltcGwgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ29uc3RydWN0b3JCb2R5RGF0YUltcGxdIG9iamVjdHMgaW4KICAvLy8gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY29uc3RydWN0b3ItYm9keS1kYXRhJzsKCiAgQ29uc3RydWN0b3JCb2R5RGF0YUltcGwoaXIuTWVtYmVyIG5vZGUsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUsCiAgICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzKQogICAgICA6IHN1cGVyKG5vZGUsIGZ1bmN0aW9uTm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwoKICBmYWN0b3J5IENvbnN0cnVjdG9yQm9keURhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5NZW1iZXIgbm9kZSA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZTsKICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICBmdW5jdGlvbk5vZGUgPSBub2RlLmZ1bmN0aW9uOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJVbmV4cGVjdGVkIG1lbWJlciBub2RlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KS4iKTsKICAgIH0KICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMgPQogICAgICAgIG5ldyBTdGF0aWNUeXBlQ2FjaGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgbm9kZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yQm9keURhdGFJbXBsKAogICAgICAgIG5vZGUsIGZ1bmN0aW9uTm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlckRhdGFLaW5kLmNvbnN0cnVjdG9yQm9keSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZShub2RlKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc3RhdGljVHlwZXMud3JpdGVUb0RhdGFTaW5rKHNpbmssIG5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcixzcmEpOiBDb25zdHJ1Y3RvciBib2RpZXMgc2hvdWxkIGFjY2VzcyB0eXBlIHZhcmlhYmxlcwogIC8vIHRocm91Z2ggYHRoaXNgLgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyA9PgogICAgICBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5wYXJhbWV0ZXI7Cn0KCmFic3RyYWN0IGNsYXNzIEpGaWVsZERhdGEgZXh0ZW5kcyBKTWVtYmVyRGF0YSB7CiAgRGFydFR5cGUgZ2V0RmllbGRUeXBlKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgIEpzS2VybmVsVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwp9CgpjbGFzcyBKRmllbGREYXRhSW1wbCBleHRlbmRzIEpNZW1iZXJEYXRhSW1wbCBpbXBsZW1lbnRzIEpGaWVsZERhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkZpZWxkRGF0YUltcGxdIG9iamVjdHMgaW4KICAvLy8gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZmllbGQtZGF0YSc7CgogIERhcnRUeXBlIF90eXBlOwogIENvbnN0YW50RXhwcmVzc2lvbiBfY29uc3RhbnRFeHByZXNzaW9uOwoKICBKRmllbGREYXRhSW1wbCgKICAgICAgaXIuRmllbGQgbm9kZSwgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMpCiAgICAgIDogc3VwZXIobm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwoKICBmYWN0b3J5IEpGaWVsZERhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5NZW1iZXIgbm9kZSA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KICAgICAgICBuZXcgTWVtYmVyRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIFN0YXRpY1R5cGVDYWNoZSBzdGF0aWNUeXBlcyA9CiAgICAgICAgbmV3IFN0YXRpY1R5cGVDYWNoZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBub2RlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSkZpZWxkRGF0YUltcGwobm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlckRhdGFLaW5kLmZpZWxkKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKG5vZGUpOwogICAgZGVmaW5pdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzdGF0aWNUeXBlcy53cml0ZVRvRGF0YVNpbmsoc2luaywgbm9kZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRmllbGQgZ2V0IG5vZGUgPT4gc3VwZXIubm9kZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0RmllbGRUeXBlKGNvdmFyaWFudCBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX3R5cGUgPz89IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgaWYgKF9jb25zdGFudEV4cHJlc3Npb24gPT0gbnVsbCkgewogICAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgICAgX2NvbnN0YW50RXhwcmVzc2lvbiA9CiAgICAgICAgICAgIG5ldyBDb25zdGFudGlmaWVyKGVsZW1lbnRNYXApLnZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBkZWZpbml0aW9uLmxvY2F0aW9uLAogICAgICAgICAgICAiVW5leHBlY3RlZCBmaWVsZCAke2RlZmluaXRpb259IGluICIKICAgICAgICAgICAgIkZpZWxkRGF0YUltcGwuZ2V0RmllbGRDb25zdGFudCIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2NvbnN0YW50RXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyB7CiAgICBpZiAobm9kZS5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm4gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MuaW5zdGFuY2VGaWVsZDsKICAgIHJldHVybiBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5ub25lOwogIH0KfQoKY2xhc3MgSlR5cGVkZWZEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pUeXBlZGVmRGF0YV0gb2JqZWN0cyBpbgogIC8vLyBhIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICd0eXBlZGVmLWRhdGEnOwoKICBmaW5hbCBpci5UeXBlZGVmIG5vZGU7CiAgZmluYWwgVHlwZWRlZlR5cGUgcmF3VHlwZTsKCiAgSlR5cGVkZWZEYXRhKHRoaXMubm9kZSwgdGhpcy5yYXdUeXBlKTsKCiAgZmFjdG9yeSBKVHlwZWRlZkRhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLlR5cGVkZWYgbm9kZSA9IHNvdXJjZS5yZWFkVHlwZWRlZk5vZGUoKTsKICAgIFR5cGVkZWZUeXBlIHJhd1R5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpUeXBlZGVmRGF0YShub2RlLCByYXdUeXBlKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVUeXBlZGVmTm9kZShub2RlKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZShyYXdUeXBlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBKVHlwZVZhcmlhYmxlRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKVHlwZVZhcmlhYmxlRGF0YV0gb2JqZWN0cyBpbgogIC8vLyBhIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICd0eXBlLXZhcmlhYmxlLWRhdGEnOwoKICBmaW5hbCBpci5UeXBlUGFyYW1ldGVyIG5vZGU7CiAgRGFydFR5cGUgX2JvdW5kOwogIERhcnRUeXBlIF9kZWZhdWx0VHlwZTsKCiAgSlR5cGVWYXJpYWJsZURhdGEodGhpcy5ub2RlKTsKCiAgZmFjdG9yeSBKVHlwZVZhcmlhYmxlRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuVHlwZVBhcmFtZXRlciBub2RlID0gc291cmNlLnJlYWRUeXBlUGFyYW1ldGVyTm9kZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKVHlwZVZhcmlhYmxlRGF0YShub2RlKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVUeXBlUGFyYW1ldGVyTm9kZShub2RlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRCb3VuZChJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX2JvdW5kID8/PSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUuYm91bmQpOwogIH0KCiAgRGFydFR5cGUgZ2V0RGVmYXVsdFR5cGUoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF9kZWZhdWx0VHlwZSA/Pz0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLmRlZmF1bHRUeXBlKTsKICB9Cn0KhEkATk48AR4BKAEZKSgjJCMhISceJyIuIxcbIBgBOBQsMAEhAUI9ATcBKi4EAUknHQQBNjUjBAE7Ex8EAgFAFEUdKwEcLysrAT8BOT4XMyc1JzUVOwQBLygVJDs7EwQBOCAEAUAnHAQBMC0hBAFBPjkEATEiMiQTDzYIBgQCARVGHSwBHFBDOQEsAT8XMyg1GxQuJjM3CAYVLwQBKBUkGxgNJRVALR4gJAoRCAYTBAIBRy0BHRs3PEAUHz0iPyE5BkMEAS0nATUUATkmAVANJAFQSxBEHQEqTgFKTwEvG0kBSw1KAgEyK0MdKQEMFjArKzsMJgExNAFBRQFAFyssNSc1JzU4NhVRIgQBDCgoFR5AOzslLRMEAQw+AQxEHkVBBAEMTyonCAQBDFAzUAQBDBtKPTEIBAFDOC8EAQxLJgQCASdDHSoBLwEeATwXLDkVJgQBDCgqFRlJEwQBDEs7BAEMG0o1BAEMUDURBAEMTyIEAQxEHh0EAQwvAQwtAQwcAgEqSR0xAUsBQhcsORUsBAEMKCsVGUkTBAEMRB4SJxMGQQQCAUguARw4PUIUID4jQCI/BkMEAS4nASIBHh0fISYlGQEYHwIBLUgdKgEWDCQMGyMBDBoMGQwbDB0MIgwhAS0BQRcrURUwBAEMKCkVHiYTBAEMNQEMIQIBSRcMCQ8TDRETEAIBHSMBPgE3ASMBEQE5PkQUJUAiPihELEcmRSpJLEMpQAZEBAEvJwIBOBgBDCUBDCUBQQEMPzYtFz0GEQQCATU7AU4BGSEtRh8CAUgkKQEMMzMiMTUPMignPDcRN0geRxcKCAYbBAIBSyQBDBkhLUYgUTkfIhgoSBEyCggjBgFMTxc8CCUEAgEvSx5KHS0BDCYWATZALgFDFy4iICQpJA0iQgYiOSI+FU4EAQwoLhUgJi0TBAEMTD8EAQw4SCkEAgE2Tx03AQwlJgw5LwE+OgFIFyI5SU02ORUmTgQBDCgvFSY5Mi0TBAEMPgEMTEkEAQxPGkJOEQQBDBkhLUYgRAQBDD8bBAIBPx8BKAEMTDEEAQxPOgQBDBkhLUYgSB0EAQw/MwQBDDkoAgFAUR8zAQwlAUQZAUwXTUgiORVABAEMKDMVJCYTBAEMPgIBNy5HAgE0Ik4dMAEsJAFFQDwBRxcuIiAkKSQNIkIGIjkiPhUlNgQBDCgxFSAmJS0TBAEMLkgoOx9MDxIZNjwIBiEEAQw5KQIBOU8fNQFIQDwBShcuIiAkKSQNIkIGIjkiPhUoNgQBDCg1FSAmLRMEAU4VDDkpAgEwNAExKAIBRUYfKgESKgESTy4BQRcuIjkiPhU+BAEMKCsVICYtEwQBDCMBDEU4BAEMMSknGh5DDxIhMS8IBiAEAQw4TSkEAgEVRB8sARkdASkBPxcwMRUsBAEoFSEhEwQCARpJHzIBHxMZASABRBc8FSgEASgVJxMEATE6BAE3RgQCASZwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9lbnYuZGFydDxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19tb2RlbC9lbGVtZW50X21hcF9pbXBsLmRhcnTAAXu4Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIHNob3cgTGluaywgTGlua0J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY2xvc3VyZS5kYXJ0JyBzaG93IEJveExvY2FsLCBUaGlzTG9jYWw7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29tcGlsZV90aW1lX2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RydWN0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9ldmFsdWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXR5X3V0aWxzLmRhcnQnIGFzIHV0aWxzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2luZGV4ZWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vZW52aXJvbm1lbnQuZGFydCc7CmltcG9ydCAnLi4vaXIvY2FjaGVkX3N0YXRpY190eXBlLmRhcnQnOwppbXBvcnQgJy4uL2lyL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vaXIvZGVidWcuZGFydCc7CmltcG9ydCAnLi4vaXIvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vaXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvdmlzaXRvcnMuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfYmFzZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZV9jYWNoZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZV9wcm92aWRlci5kYXJ0JzsKaW1wb3J0ICcuLi9pci91dGlsLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwvZWxlbWVudF9tYXBfaW1wbC5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwvZW52LmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9rZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vb3JkZXJlZF90eXBlc2V0LmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9zc2EvdHlwZV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKCmltcG9ydCAnY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICdlbnYuZGFydCc7CmltcG9ydCAnbG9jYWxzLmRhcnQnOwoKY2xhc3MgSnNLZXJuZWxUb0VsZW1lbnRNYXAgaW1wbGVtZW50cyBKc1RvRWxlbWVudE1hcCwgSXJUb0VsZW1lbnRNYXAgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSnNLZXJuZWxUb0VsZW1lbnRNYXBdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnanMta2VybmVsLXRvLWVsZW1lbnQtbWFwJzsKCiAgLy8vIFRhZ3MgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBzdWJzZWN0aW9ucyBvZiBhCiAgLy8vIFtKc0tlcm5lbFRvRWxlbWVudE1hcF0gb2JqZWN0IGluIGEgZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGlicmFyeVRhZyA9ICdsaWJyYXJpZXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY2xhc3NUYWcgPSAnY2xhc3Nlcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0eXBlZGVmVGFnID0gJ3R5cGVkZWZzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG1lbWJlclRhZyA9ICdtZW1iZXJzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHR5cGVWYXJpYWJsZVRhZyA9ICd0eXBlLXZhcmlhYmxlcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBsaWJyYXJ5RGF0YVRhZyA9ICdsaWJyYXJ5LWRhdGEnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY2xhc3NEYXRhVGFnID0gJ2NsYXNzLWRhdGEnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHlwZWRlZkRhdGFUYWcgPSAndHlwZWRlZi1kYXRhJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG1lbWJlckRhdGFUYWcgPSAnbWVtYmVyLWRhdGEnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHlwZVZhcmlhYmxlRGF0YVRhZyA9ICd0eXBlLXZhcmlhYmxlLWRhdGEnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbmVzdGVkQ2xvc3VyZXNUYWcgPSAnbmVzdGVkLWNsb3N1cmVzJzsKCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7CiAgQG92ZXJyaWRlCiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyOwogIENvbW1vbkVsZW1lbnRzSW1wbCBfY29tbW9uRWxlbWVudHM7CiAgSnNFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBEYXJ0VHlwZUNvbnZlcnRlciBfdHlwZUNvbnZlcnRlcjsKICBKc0NvbnN0YW50RW52aXJvbm1lbnQgX2NvbnN0YW50RW52aXJvbm1lbnQ7CiAgS2VybmVsRGFydFR5cGVzIF90eXBlczsKICBpci5UeXBlRW52aXJvbm1lbnQgX3R5cGVFbnZpcm9ubWVudDsKICBpci5DbGFzc0hpZXJhcmNoeSBfY2xhc3NIaWVyYXJjaHk7CiAgQ29uc3RhbnRWYWx1ZWZpZXIgX2NvbnN0YW50VmFsdWVmaWVyOwoKICAvLy8gTGlicmFyeSBlbnZpcm9ubWVudC4gVXNlZCBmb3IgZmFzdCBsb29rdXAuCiAgSlByb2dyYW1FbnYgcHJvZ3JhbUVudjsKCiAgZmluYWwgRW50aXR5RGF0YUVudk1hcDxJbmRleGVkTGlicmFyeSwgSkxpYnJhcnlEYXRhLCBKTGlicmFyeUVudj4gbGlicmFyaWVzID0KICAgICAgbmV3IEVudGl0eURhdGFFbnZNYXA8SW5kZXhlZExpYnJhcnksIEpMaWJyYXJ5RGF0YSwgSkxpYnJhcnlFbnY+KCk7CiAgZmluYWwgRW50aXR5RGF0YUVudk1hcDxJbmRleGVkQ2xhc3MsIEpDbGFzc0RhdGEsIEpDbGFzc0Vudj4gY2xhc3NlcyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhRW52TWFwPEluZGV4ZWRDbGFzcywgSkNsYXNzRGF0YSwgSkNsYXNzRW52PigpOwogIGZpbmFsIEVudGl0eURhdGFNYXA8SW5kZXhlZE1lbWJlciwgSk1lbWJlckRhdGE+IG1lbWJlcnMgPQogICAgICBuZXcgRW50aXR5RGF0YU1hcDxJbmRleGVkTWVtYmVyLCBKTWVtYmVyRGF0YT4oKTsKICBmaW5hbCBFbnRpdHlEYXRhTWFwPEluZGV4ZWRUeXBlVmFyaWFibGUsIEpUeXBlVmFyaWFibGVEYXRhPiB0eXBlVmFyaWFibGVzID0KICAgICAgbmV3IEVudGl0eURhdGFNYXA8SW5kZXhlZFR5cGVWYXJpYWJsZSwgSlR5cGVWYXJpYWJsZURhdGE+KCk7CiAgZmluYWwgRW50aXR5RGF0YU1hcDxJbmRleGVkVHlwZWRlZiwgSlR5cGVkZWZEYXRhPiB0eXBlZGVmcyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhTWFwPEluZGV4ZWRUeXBlZGVmLCBKVHlwZWRlZkRhdGE+KCk7CgogIGZpbmFsIE1hcDxpci5MaWJyYXJ5LCBJbmRleGVkTGlicmFyeT4gbGlicmFyeU1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5DbGFzcywgSW5kZXhlZENsYXNzPiBjbGFzc01hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5UeXBlZGVmLCBJbmRleGVkVHlwZWRlZj4gdHlwZWRlZk1hcCA9IHt9OwoKICAvLy8gTWFwIGZyb20gW2lyLlR5cGVQYXJhbWV0ZXJdIG5vZGVzIHRvIHRoZSBjb3JyZXNwb25kaW5nCiAgLy8vIFtUeXBlVmFyaWFibGVFbnRpdHldLgogIC8vLwogIC8vLyBOb3JtYWxseSB0aGUgdHlwZSB2YXJpYWJsZXMgYXJlIFtJbmRleGVkVHlwZVZhcmlhYmxlXXMsIGJ1dCBmb3IgdHlwZQogIC8vLyBwYXJhbWV0ZXJzIG9uIGxvY2FsIGZ1bmN0aW9uIChpbiB0aGUgZnJvbnRlbmQpIHRoZXNlIGFyZSBfbm90XyBzaW5jZQogIC8vLyB0aGVpciB0eXBlIGRlY2xhcmF0aW9uIGlzIG5laXRoZXIgYSBjbGFzcyBub3IgYSBtZW1iZXIuIEluIHRoZSBiYWNrZW5kLAogIC8vLyB0aGVzZSB0eXBlIHBhcmFtZXRlcnMgYmVsb25nIHRvIHRoZSBjYWxsLW1ldGhvZCBhbmQgYXJlIHRoZXJlZm9yZSBpbmRleGVkLgogIGZpbmFsIE1hcDxpci5UeXBlUGFyYW1ldGVyLCBUeXBlVmFyaWFibGVFbnRpdHk+IHR5cGVWYXJpYWJsZU1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5NZW1iZXIsIEluZGV4ZWRDb25zdHJ1Y3Rvcj4gY29uc3RydWN0b3JNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuUHJvY2VkdXJlLCBJbmRleGVkRnVuY3Rpb24+IG1ldGhvZE1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5GaWVsZCwgSW5kZXhlZEZpZWxkPiBmaWVsZE1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5UcmVlTm9kZSwgTG9jYWw+IGxvY2FsRnVuY3Rpb25NYXAgPSB7fTsKCiAgLy8vIE1hcCBmcm9tIG1lbWJlcnMgdG8gdGhlIGNhbGwgbWV0aG9kcyBjcmVhdGVkIGZvciB0aGVpciBuZXN0ZWQgY2xvc3VyZXMuCiAgTWFwPEluZGV4ZWRNZW1iZXIsIExpc3Q8SW5kZXhlZEZ1bmN0aW9uPj4gX25lc3RlZENsb3N1cmVNYXAgPSB7fTsKCiAgLy8vIE5hdGl2ZURhdGEgaXMgbmVlZCBmb3IgY29tcHV0YXRpb24gb2YgdGhlIGRlZmF1bHQgc3VwZXIgY2xhc3MgYW5kCiAgLy8vIHBhcmFtZXRlciBvcmRlcmluZy4KICBOYXRpdmVEYXRhIG5hdGl2ZURhdGE7CgogIE1hcDxJbmRleGVkRnVuY3Rpb24sIEpHZW5lcmF0b3JCb2R5PiBfZ2VuZXJhdG9yQm9kaWVzID0ge307CgogIE1hcDxJbmRleGVkQ2xhc3MsIExpc3Q8SW5kZXhlZE1lbWJlcj4+IF9pbmplY3RlZENsYXNzTWVtYmVycyA9IHt9OwoKICBMYXRlT3V0cHV0VW5pdERhdGFCdWlsZGVyIGxhdGVPdXRwdXRVbml0RGF0YUJ1aWxkZXI7CgogIEpzS2VybmVsVG9FbGVtZW50TWFwKAogICAgICB0aGlzLnJlcG9ydGVyLAogICAgICBFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBfZWxlbWVudE1hcCwKICAgICAgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+IGxpdmVNZW1iZXJVc2FnZSwKICAgICAgQW5ub3RhdGlvbnNEYXRhIGFubm90YXRpb25zKQogICAgICA6IHRoaXMub3B0aW9ucyA9IF9lbGVtZW50TWFwLm9wdGlvbnMgewogICAgX2VsZW1lbnRFbnZpcm9ubWVudCA9IG5ldyBKc0VsZW1lbnRFbnZpcm9ubWVudCh0aGlzKTsKICAgIF9jb21tb25FbGVtZW50cyA9CiAgICAgICAgbmV3IENvbW1vbkVsZW1lbnRzSW1wbChfZWxlbWVudEVudmlyb25tZW50LCBfZWxlbWVudE1hcC5vcHRpb25zKTsKICAgIF9jb25zdGFudEVudmlyb25tZW50ID0gbmV3IEpzQ29uc3RhbnRFbnZpcm9ubWVudCh0aGlzLCBlbnZpcm9ubWVudCk7CiAgICBfdHlwZUNvbnZlcnRlciA9IG5ldyBEYXJ0VHlwZUNvbnZlcnRlcih0aGlzKTsKICAgIF90eXBlcyA9IG5ldyBLZXJuZWxEYXJ0VHlwZXModGhpcyk7CiAgICBfY29uc3RhbnRWYWx1ZWZpZXIgPSBuZXcgQ29uc3RhbnRWYWx1ZWZpZXIodGhpcyk7CgogICAgcHJvZ3JhbUVudiA9IF9lbGVtZW50TWFwLmVudi5jb252ZXJ0KCk7CiAgICBmb3IgKGludCBsaWJyYXJ5SW5kZXggPSAwOwogICAgICAgIGxpYnJhcnlJbmRleCA8IF9lbGVtZW50TWFwLmxpYnJhcmllcy5sZW5ndGg7CiAgICAgICAgbGlicmFyeUluZGV4KyspIHsKICAgICAgSW5kZXhlZExpYnJhcnkgb2xkTGlicmFyeSA9IF9lbGVtZW50TWFwLmxpYnJhcmllcy5nZXRFbnRpdHkobGlicmFyeUluZGV4KTsKICAgICAgS0xpYnJhcnlFbnYgb2xkRW52ID0gX2VsZW1lbnRNYXAubGlicmFyaWVzLmdldEVudihvbGRMaWJyYXJ5KTsKICAgICAgS0xpYnJhcnlEYXRhIGRhdGEgPSBfZWxlbWVudE1hcC5saWJyYXJpZXMuZ2V0RGF0YShvbGRMaWJyYXJ5KTsKICAgICAgSW5kZXhlZExpYnJhcnkgbmV3TGlicmFyeSA9CiAgICAgICAgICBuZXcgSkxpYnJhcnkob2xkTGlicmFyeS5uYW1lLCBvbGRMaWJyYXJ5LmNhbm9uaWNhbFVyaSk7CiAgICAgIEpMaWJyYXJ5RW52IG5ld0VudiA9IG9sZEVudi5jb252ZXJ0KF9lbGVtZW50TWFwLCBsaXZlTWVtYmVyVXNhZ2UpOwogICAgICBsaWJyYXJ5TWFwW29sZEVudi5saWJyYXJ5XSA9CiAgICAgICAgICBsaWJyYXJpZXMucmVnaXN0ZXI8SW5kZXhlZExpYnJhcnksIEpMaWJyYXJ5RGF0YSwgSkxpYnJhcnlFbnY+KAogICAgICAgICAgICAgIG5ld0xpYnJhcnksIGRhdGEuY29udmVydCgpLCBuZXdFbnYpOwogICAgICBhc3NlcnQobmV3TGlicmFyeS5saWJyYXJ5SW5kZXggPT0gb2xkTGlicmFyeS5saWJyYXJ5SW5kZXgpOwogICAgICBwcm9ncmFtRW52LnJlZ2lzdGVyTGlicmFyeShuZXdFbnYpOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRmlsdGVyIHVudXNlZCBjbGFzc2VzLgogICAgZm9yIChpbnQgY2xhc3NJbmRleCA9IDA7CiAgICAgICAgY2xhc3NJbmRleCA8IF9lbGVtZW50TWFwLmNsYXNzZXMubGVuZ3RoOwogICAgICAgIGNsYXNzSW5kZXgrKykgewogICAgICBJbmRleGVkQ2xhc3Mgb2xkQ2xhc3MgPSBfZWxlbWVudE1hcC5jbGFzc2VzLmdldEVudGl0eShjbGFzc0luZGV4KTsKICAgICAgS0NsYXNzRW52IGVudiA9IF9lbGVtZW50TWFwLmNsYXNzZXMuZ2V0RW52KG9sZENsYXNzKTsKICAgICAgS0NsYXNzRGF0YSBkYXRhID0gX2VsZW1lbnRNYXAuY2xhc3Nlcy5nZXREYXRhKG9sZENsYXNzKTsKICAgICAgSW5kZXhlZExpYnJhcnkgb2xkTGlicmFyeSA9IG9sZENsYXNzLmxpYnJhcnk7CiAgICAgIExpYnJhcnlFbnRpdHkgbmV3TGlicmFyeSA9IGxpYnJhcmllcy5nZXRFbnRpdHkob2xkTGlicmFyeS5saWJyYXJ5SW5kZXgpOwogICAgICBJbmRleGVkQ2xhc3MgbmV3Q2xhc3MgPSBuZXcgSkNsYXNzKG5ld0xpYnJhcnksIG9sZENsYXNzLm5hbWUsCiAgICAgICAgICBpc0Fic3RyYWN0OiBvbGRDbGFzcy5pc0Fic3RyYWN0KTsKICAgICAgSkNsYXNzRW52IG5ld0VudiA9IGVudi5jb252ZXJ0KF9lbGVtZW50TWFwLCBsaXZlTWVtYmVyVXNhZ2UpOwogICAgICBjbGFzc01hcFtlbnYuY2xzXSA9IGNsYXNzZXMucmVnaXN0ZXIobmV3Q2xhc3MsIGRhdGEuY29udmVydCgpLCBuZXdFbnYpOwogICAgICBhc3NlcnQobmV3Q2xhc3MuY2xhc3NJbmRleCA9PSBvbGRDbGFzcy5jbGFzc0luZGV4KTsKICAgICAgbGlicmFyaWVzLmdldEVudihuZXdDbGFzcy5saWJyYXJ5KS5yZWdpc3RlckNsYXNzKG5ld0NsYXNzLm5hbWUsIG5ld0Vudik7CiAgICB9CiAgICBmb3IgKGludCB0eXBlZGVmSW5kZXggPSAwOwogICAgICAgIHR5cGVkZWZJbmRleCA8IF9lbGVtZW50TWFwLnR5cGVkZWZzLmxlbmd0aDsKICAgICAgICB0eXBlZGVmSW5kZXgrKykgewogICAgICBJbmRleGVkVHlwZWRlZiBvbGRUeXBlZGVmID0gX2VsZW1lbnRNYXAudHlwZWRlZnMuZ2V0RW50aXR5KHR5cGVkZWZJbmRleCk7CiAgICAgIEtUeXBlZGVmRGF0YSBkYXRhID0gX2VsZW1lbnRNYXAudHlwZWRlZnMuZ2V0RGF0YShvbGRUeXBlZGVmKTsKICAgICAgSW5kZXhlZExpYnJhcnkgb2xkTGlicmFyeSA9IG9sZFR5cGVkZWYubGlicmFyeTsKICAgICAgTGlicmFyeUVudGl0eSBuZXdMaWJyYXJ5ID0gbGlicmFyaWVzLmdldEVudGl0eShvbGRMaWJyYXJ5LmxpYnJhcnlJbmRleCk7CiAgICAgIEluZGV4ZWRUeXBlZGVmIG5ld1R5cGVkZWYgPSBuZXcgSlR5cGVkZWYobmV3TGlicmFyeSwgb2xkVHlwZWRlZi5uYW1lKTsKICAgICAgdHlwZWRlZk1hcFtkYXRhLm5vZGVdID0gdHlwZWRlZnMucmVnaXN0ZXIoCiAgICAgICAgICBuZXdUeXBlZGVmLAogICAgICAgICAgbmV3IEpUeXBlZGVmRGF0YSgKICAgICAgICAgICAgICBkYXRhLm5vZGUsCiAgICAgICAgICAgICAgbmV3IFR5cGVkZWZUeXBlKAogICAgICAgICAgICAgICAgICBuZXdUeXBlZGVmLAogICAgICAgICAgICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICAgICAgICAgICAgZGF0YS5ub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgY29uc3QgRHluYW1pY1R5cGUoKSksCiAgICAgICAgICAgICAgICAgIGdldERhcnRUeXBlKGRhdGEubm9kZS50eXBlKSkpKTsKICAgICAgYXNzZXJ0KG5ld1R5cGVkZWYudHlwZWRlZkluZGV4ID09IG9sZFR5cGVkZWYudHlwZWRlZkluZGV4KTsKICAgIH0KCiAgICBmb3IgKGludCBtZW1iZXJJbmRleCA9IDA7CiAgICAgICAgbWVtYmVySW5kZXggPCBfZWxlbWVudE1hcC5tZW1iZXJzLmxlbmd0aDsKICAgICAgICBtZW1iZXJJbmRleCsrKSB7CiAgICAgIEluZGV4ZWRNZW1iZXIgb2xkTWVtYmVyID0gX2VsZW1lbnRNYXAubWVtYmVycy5nZXRFbnRpdHkobWVtYmVySW5kZXgpOwogICAgICBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSA9IGxpdmVNZW1iZXJVc2FnZVtvbGRNZW1iZXJdOwogICAgICBpZiAobWVtYmVyVXNhZ2UgPT0gbnVsbCkgewogICAgICAgIG1lbWJlcnMuc2tpcEluZGV4KG9sZE1lbWJlci5tZW1iZXJJbmRleCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgS01lbWJlckRhdGEgZGF0YSA9IF9lbGVtZW50TWFwLm1lbWJlcnMuZ2V0RGF0YShvbGRNZW1iZXIpOwogICAgICBJbmRleGVkTGlicmFyeSBvbGRMaWJyYXJ5ID0gb2xkTWVtYmVyLmxpYnJhcnk7CiAgICAgIEluZGV4ZWRDbGFzcyBvbGRDbGFzcyA9IG9sZE1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgICAgTGlicmFyeUVudGl0eSBuZXdMaWJyYXJ5ID0gbGlicmFyaWVzLmdldEVudGl0eShvbGRMaWJyYXJ5LmxpYnJhcnlJbmRleCk7CiAgICAgIENsYXNzRW50aXR5IG5ld0NsYXNzID0KICAgICAgICAgIG9sZENsYXNzICE9IG51bGwgPyBjbGFzc2VzLmdldEVudGl0eShvbGRDbGFzcy5jbGFzc0luZGV4KSA6IG51bGw7CiAgICAgIEluZGV4ZWRNZW1iZXIgbmV3TWVtYmVyOwogICAgICBOYW1lIG1lbWJlck5hbWUgPSBuZXcgTmFtZShvbGRNZW1iZXIubWVtYmVyTmFtZS50ZXh0LCBuZXdMaWJyYXJ5LAogICAgICAgICAgaXNTZXR0ZXI6IG9sZE1lbWJlci5tZW1iZXJOYW1lLmlzU2V0dGVyKTsKICAgICAgaWYgKG9sZE1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgSW5kZXhlZEZpZWxkIGZpZWxkID0gb2xkTWVtYmVyOwogICAgICAgIG5ld01lbWJlciA9IG5ldyBKRmllbGQobmV3TGlicmFyeSwgbmV3Q2xhc3MsIG1lbWJlck5hbWUsCiAgICAgICAgICAgIGlzU3RhdGljOiBmaWVsZC5pc1N0YXRpYywKICAgICAgICAgICAgaXNBc3NpZ25hYmxlOiBmaWVsZC5pc0Fzc2lnbmFibGUsCiAgICAgICAgICAgIGlzQ29uc3Q6IGZpZWxkLmlzQ29uc3QpOwogICAgICB9IGVsc2UgaWYgKG9sZE1lbWJlci5pc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgSW5kZXhlZENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gb2xkTWVtYmVyOwogICAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPQogICAgICAgICAgICBhbm5vdGF0aW9ucy5oYXNOb0VsaXNpb24oY29uc3RydWN0b3IpCiAgICAgICAgICAgICAgICA/IGNvbnN0cnVjdG9yLnBhcmFtZXRlclN0cnVjdHVyZQogICAgICAgICAgICAgICAgOiBtZW1iZXJVc2FnZS5pbnZva2VkUGFyYW1ldGVyczsKICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNGYWN0b3J5Q29uc3RydWN0b3IpIHsKICAgICAgICAgIC8vIFRPRE8ocmVkZW1wdGlvbik6IFRoaXMgc2hvdWxkIGJlIGEgSkZ1bmN0aW9uLgogICAgICAgICAgbmV3TWVtYmVyID0gbmV3IEpGYWN0b3J5Q29uc3RydWN0b3IoCiAgICAgICAgICAgICAgbmV3Q2xhc3MsIG1lbWJlck5hbWUsIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICAgICAgICBpc0V4dGVybmFsOiBjb25zdHJ1Y3Rvci5pc0V4dGVybmFsLAogICAgICAgICAgICAgIGlzQ29uc3Q6IGNvbnN0cnVjdG9yLmlzQ29uc3QsCiAgICAgICAgICAgICAgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IuaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3Rvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5ld01lbWJlciA9IG5ldyBKR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKAogICAgICAgICAgICAgIG5ld0NsYXNzLCBtZW1iZXJOYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgaXNFeHRlcm5hbDogY29uc3RydWN0b3IuaXNFeHRlcm5hbCwgaXNDb25zdDogY29uc3RydWN0b3IuaXNDb25zdCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG9sZE1lbWJlci5pc0dldHRlcikgewogICAgICAgIEluZGV4ZWRGdW5jdGlvbiBnZXR0ZXIgPSBvbGRNZW1iZXI7CiAgICAgICAgbmV3TWVtYmVyID0gbmV3IEpHZXR0ZXIoCiAgICAgICAgICAgIG5ld0xpYnJhcnksIG5ld0NsYXNzLCBtZW1iZXJOYW1lLCBnZXR0ZXIuYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGlzU3RhdGljOiBnZXR0ZXIuaXNTdGF0aWMsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGdldHRlci5pc0V4dGVybmFsLAogICAgICAgICAgICBpc0Fic3RyYWN0OiBnZXR0ZXIuaXNBYnN0cmFjdCk7CiAgICAgIH0gZWxzZSBpZiAob2xkTWVtYmVyLmlzU2V0dGVyKSB7CiAgICAgICAgSW5kZXhlZEZ1bmN0aW9uIHNldHRlciA9IG9sZE1lbWJlcjsKICAgICAgICBuZXdNZW1iZXIgPSBuZXcgSlNldHRlcihuZXdMaWJyYXJ5LCBuZXdDbGFzcywgbWVtYmVyTmFtZSwKICAgICAgICAgICAgaXNTdGF0aWM6IHNldHRlci5pc1N0YXRpYywKICAgICAgICAgICAgaXNFeHRlcm5hbDogc2V0dGVyLmlzRXh0ZXJuYWwsCiAgICAgICAgICAgIGlzQWJzdHJhY3Q6IHNldHRlci5pc0Fic3RyYWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBJbmRleGVkRnVuY3Rpb24gZnVuY3Rpb24gPSBvbGRNZW1iZXI7CiAgICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9CiAgICAgICAgICAgIGFubm90YXRpb25zLmhhc05vRWxpc2lvbihmdW5jdGlvbikKICAgICAgICAgICAgICAgID8gZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlCiAgICAgICAgICAgICAgICA6IG1lbWJlclVzYWdlLmludm9rZWRQYXJhbWV0ZXJzOwogICAgICAgIG5ld01lbWJlciA9IG5ldyBKTWV0aG9kKG5ld0xpYnJhcnksIG5ld0NsYXNzLCBtZW1iZXJOYW1lLAogICAgICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGZ1bmN0aW9uLmFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogZnVuY3Rpb24uaXNTdGF0aWMsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGZ1bmN0aW9uLmlzRXh0ZXJuYWwsCiAgICAgICAgICAgIGlzQWJzdHJhY3Q6IGZ1bmN0aW9uLmlzQWJzdHJhY3QpOwogICAgICB9CiAgICAgIG1lbWJlcnMucmVnaXN0ZXIobmV3TWVtYmVyLCBkYXRhLmNvbnZlcnQoKSk7CiAgICAgIGFzc2VydCgKICAgICAgICAgIG5ld01lbWJlci5tZW1iZXJJbmRleCA9PSBvbGRNZW1iZXIubWVtYmVySW5kZXgsCiAgICAgICAgICAiTWVtYmVyIGluZGV4IG1pc21hdGNoOiAiCiAgICAgICAgICAiT2xkIG1lbWJlciAkb2xkTWVtYmVyIGhhcyBpbmRleCAke29sZE1lbWJlci5tZW1iZXJJbmRleH0gIgogICAgICAgICAgIndoZXJlYXMgbmV3IG1lbWJlciAkbmV3TWVtYmVyIGhhcyBpbmRleCAke25ld01lbWJlci5tZW1iZXJJbmRleH0iKTsKICAgICAgaWYgKG5ld01lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgZmllbGRNYXBbZGF0YS5ub2RlXSA9IG5ld01lbWJlcjsKICAgICAgfSBlbHNlIGlmIChuZXdNZW1iZXIuaXNDb25zdHJ1Y3RvcikgewogICAgICAgIGNvbnN0cnVjdG9yTWFwW2RhdGEubm9kZV0gPSBuZXdNZW1iZXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWV0aG9kTWFwW2RhdGEubm9kZV0gPSBuZXdNZW1iZXI7CiAgICAgIH0KICAgIH0KICAgIGZvciAoaW50IHR5cGVWYXJpYWJsZUluZGV4ID0gMDsKICAgICAgICB0eXBlVmFyaWFibGVJbmRleCA8IF9lbGVtZW50TWFwLnR5cGVWYXJpYWJsZXMubGVuZ3RoOwogICAgICAgIHR5cGVWYXJpYWJsZUluZGV4KyspIHsKICAgICAgSW5kZXhlZFR5cGVWYXJpYWJsZSBvbGRUeXBlVmFyaWFibGUgPQogICAgICAgICAgX2VsZW1lbnRNYXAudHlwZVZhcmlhYmxlcy5nZXRFbnRpdHkodHlwZVZhcmlhYmxlSW5kZXgpOwogICAgICBLVHlwZVZhcmlhYmxlRGF0YSBvbGRUeXBlVmFyaWFibGVEYXRhID0KICAgICAgICAgIF9lbGVtZW50TWFwLnR5cGVWYXJpYWJsZXMuZ2V0RGF0YShvbGRUeXBlVmFyaWFibGUpOwogICAgICBFbnRpdHkgbmV3VHlwZURlY2xhcmF0aW9uOwogICAgICBpZiAob2xkVHlwZVZhcmlhYmxlLnR5cGVEZWNsYXJhdGlvbiBpcyBDbGFzc0VudGl0eSkgewogICAgICAgIEluZGV4ZWRDbGFzcyBjbHMgPSBvbGRUeXBlVmFyaWFibGUudHlwZURlY2xhcmF0aW9uOwogICAgICAgIG5ld1R5cGVEZWNsYXJhdGlvbiA9IGNsYXNzZXMuZ2V0RW50aXR5KGNscy5jbGFzc0luZGV4KTsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTa2lwIHR5cGUgdmFyaWFibGVzIG9mIHVudXNlZCBjbGFzc2VzLgogICAgICB9IGVsc2UgaWYgKG9sZFR5cGVWYXJpYWJsZS50eXBlRGVjbGFyYXRpb24gaXMgTWVtYmVyRW50aXR5KSB7CiAgICAgICAgSW5kZXhlZE1lbWJlciBtZW1iZXIgPSBvbGRUeXBlVmFyaWFibGUudHlwZURlY2xhcmF0aW9uOwogICAgICAgIG5ld1R5cGVEZWNsYXJhdGlvbiA9IG1lbWJlcnMuZ2V0RW50aXR5KG1lbWJlci5tZW1iZXJJbmRleCk7CiAgICAgICAgaWYgKG5ld1R5cGVEZWNsYXJhdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICB0eXBlVmFyaWFibGVzLnNraXBJbmRleCh0eXBlVmFyaWFibGVJbmRleCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KG9sZFR5cGVWYXJpYWJsZS50eXBlRGVjbGFyYXRpb24gaXMgTG9jYWwpOwogICAgICB9CiAgICAgIEluZGV4ZWRUeXBlVmFyaWFibGUgbmV3VHlwZVZhcmlhYmxlID0gY3JlYXRlVHlwZVZhcmlhYmxlKAogICAgICAgICAgbmV3VHlwZURlY2xhcmF0aW9uLCBvbGRUeXBlVmFyaWFibGUubmFtZSwgb2xkVHlwZVZhcmlhYmxlLmluZGV4KTsKICAgICAgdHlwZVZhcmlhYmxlTWFwW29sZFR5cGVWYXJpYWJsZURhdGEubm9kZV0gPQogICAgICAgICAgdHlwZVZhcmlhYmxlcy5yZWdpc3RlcjxJbmRleGVkVHlwZVZhcmlhYmxlLCBKVHlwZVZhcmlhYmxlRGF0YT4oCiAgICAgICAgICAgICAgbmV3VHlwZVZhcmlhYmxlLCBvbGRUeXBlVmFyaWFibGVEYXRhLmNvcHkoKSk7CiAgICAgIGFzc2VydChuZXdUeXBlVmFyaWFibGUudHlwZVZhcmlhYmxlSW5kZXggPT0KICAgICAgICAgIG9sZFR5cGVWYXJpYWJsZS50eXBlVmFyaWFibGVJbmRleCk7CiAgICB9CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBXZSBzaG91bGQgY2xvc2UgdGhlIGVudmlyb25tZW50IGluIHRoZSBiZWdpbm5pbmcgb2YKICAgIC8vIHRoaXMgY29uc3RydWN0b3IgYnV0IGN1cnJlbnRseSB3ZSBuZWVkIHRoZSBbTWVtYmVyRW50aXR5XSB0byBxdWVyeSBpZiB0aGUKICAgIC8vIG1lbWJlciBpcyBsaXZlLCB0aHVzIHBvdGVudGlhbGx5IGNyZWF0aW5nIHRoZSBbTWVtYmVyRW50aXR5XSBpbiB0aGUKICAgIC8vIHByb2Nlc3MuIEF2b2lkIHRoaXMuCiAgICBfZWxlbWVudE1hcC5lbnZJc0Nsb3NlZCA9IHRydWU7CiAgfQoKICBKc0tlcm5lbFRvRWxlbWVudE1hcC5yZWFkRnJvbURhdGFTb3VyY2UodGhpcy5vcHRpb25zLCB0aGlzLnJlcG9ydGVyLAogICAgICBFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgaXIuQ29tcG9uZW50IGNvbXBvbmVudCwgRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQgPSBuZXcgSnNFbGVtZW50RW52aXJvbm1lbnQodGhpcyk7CiAgICBfY29tbW9uRWxlbWVudHMgPSBuZXcgQ29tbW9uRWxlbWVudHNJbXBsKF9lbGVtZW50RW52aXJvbm1lbnQsIG9wdGlvbnMpOwogICAgX2NvbnN0YW50RW52aXJvbm1lbnQgPSBuZXcgSnNDb25zdGFudEVudmlyb25tZW50KHRoaXMsIGVudmlyb25tZW50KTsKICAgIF90eXBlQ29udmVydGVyID0gbmV3IERhcnRUeXBlQ29udmVydGVyKHRoaXMpOwogICAgX3R5cGVzID0gbmV3IEtlcm5lbERhcnRUeXBlcyh0aGlzKTsKICAgIF9jb25zdGFudFZhbHVlZmllciA9IG5ldyBDb25zdGFudFZhbHVlZmllcih0aGlzKTsKCiAgICBzb3VyY2UucmVnaXN0ZXJDb21wb25lbnRMb29rdXAobmV3IENvbXBvbmVudExvb2t1cChjb21wb25lbnQpKTsKICAgIF9FbnRpdHlMb29rdXAgZW50aXR5TG9va3VwID0gbmV3IF9FbnRpdHlMb29rdXAoKTsKICAgIHNvdXJjZS5yZWdpc3RlckVudGl0eUxvb2t1cChlbnRpdHlMb29rdXApOwoKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgc291cmNlLmJlZ2luKGxpYnJhcnlUYWcpOwogICAgaW50IGxpYnJhcnlDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpYnJhcnlDb3VudDsgaSsrKSB7CiAgICAgIGludCBpbmRleCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgIEpMaWJyYXJ5IGxpYnJhcnkgPSBuZXcgSkxpYnJhcnkucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGVudGl0eUxvb2t1cC5yZWdpc3RlckxpYnJhcnkoaW5kZXgsIGxpYnJhcnkpOwogICAgfQogICAgc291cmNlLmVuZChsaWJyYXJ5VGFnKTsKCiAgICBzb3VyY2UuYmVnaW4oY2xhc3NUYWcpOwogICAgaW50IGNsYXNzQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc0NvdW50OyBpKyspIHsKICAgICAgaW50IGluZGV4ID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgSkNsYXNzIGNscyA9IG5ldyBKQ2xhc3MucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGVudGl0eUxvb2t1cC5yZWdpc3RlckNsYXNzKGluZGV4LCBjbHMpOwogICAgfQogICAgc291cmNlLmVuZChjbGFzc1RhZyk7CgogICAgc291cmNlLmJlZ2luKHR5cGVkZWZUYWcpOwogICAgaW50IHR5cGVkZWZDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVkZWZDb3VudDsgaSsrKSB7CiAgICAgIGludCBpbmRleCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgIEpUeXBlZGVmIHR5cGVkZWYgPSBuZXcgSlR5cGVkZWYucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGVudGl0eUxvb2t1cC5yZWdpc3RlclR5cGVkZWYoaW5kZXgsIHR5cGVkZWYpOwogICAgfQogICAgc291cmNlLmVuZCh0eXBlZGVmVGFnKTsKCiAgICBzb3VyY2UuYmVnaW4obWVtYmVyVGFnKTsKICAgIGludCBtZW1iZXJDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lbWJlckNvdW50OyBpKyspIHsKICAgICAgaW50IGluZGV4ID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgSk1lbWJlciBtZW1iZXIgPSBuZXcgSk1lbWJlci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgZW50aXR5TG9va3VwLnJlZ2lzdGVyTWVtYmVyKGluZGV4LCBtZW1iZXIpOwogICAgfQogICAgc291cmNlLmVuZChtZW1iZXJUYWcpOwoKICAgIHNvdXJjZS5iZWdpbih0eXBlVmFyaWFibGVUYWcpOwogICAgaW50IHR5cGVWYXJpYWJsZUNvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVZhcmlhYmxlQ291bnQ7IGkrKykgewogICAgICBpbnQgaW5kZXggPSBzb3VyY2UucmVhZEludCgpOwogICAgICBKVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSA9IG5ldyBKVHlwZVZhcmlhYmxlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBlbnRpdHlMb29rdXAucmVnaXN0ZXJUeXBlVmFyaWFibGUoaW5kZXgsIHR5cGVWYXJpYWJsZSk7CiAgICB9CiAgICBzb3VyY2UuZW5kKHR5cGVWYXJpYWJsZVRhZyk7CgogICAgcHJvZ3JhbUVudiA9IG5ldyBKUHJvZ3JhbUVudihbY29tcG9uZW50XSk7CiAgICBzb3VyY2UuYmVnaW4obGlicmFyeURhdGFUYWcpOwogICAgZW50aXR5TG9va3VwLmZvckVhY2hMaWJyYXJ5KChpbnQgaW5kZXgsIEpMaWJyYXJ5IGxpYnJhcnkpIHsKICAgICAgSkxpYnJhcnlFbnYgZW52ID0gbmV3IEpMaWJyYXJ5RW52LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBKTGlicmFyeURhdGEgZGF0YSA9IG5ldyBKTGlicmFyeURhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGxpYnJhcnlNYXBbZW52LmxpYnJhcnldID0KICAgICAgICAgIGxpYnJhcmllcy5yZWdpc3RlckJ5SW5kZXgoaW5kZXgsIGxpYnJhcnksIGRhdGEsIGVudik7CiAgICAgIHByb2dyYW1FbnYucmVnaXN0ZXJMaWJyYXJ5KGVudik7CiAgICAgIGFzc2VydChpbmRleCA9PSBsaWJyYXJ5LmxpYnJhcnlJbmRleCk7CiAgICB9KTsKICAgIHNvdXJjZS5lbmQobGlicmFyeURhdGFUYWcpOwoKICAgIHNvdXJjZS5iZWdpbihjbGFzc0RhdGFUYWcpOwogICAgZW50aXR5TG9va3VwLmZvckVhY2hDbGFzcygoaW50IGluZGV4LCBKQ2xhc3MgY2xzKSB7CiAgICAgIEpDbGFzc0VudiBlbnYgPSBuZXcgSkNsYXNzRW52LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBKQ2xhc3NEYXRhIGRhdGEgPSBuZXcgSkNsYXNzRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2xhc3NNYXBbZW52LmNsc10gPSBjbGFzc2VzLnJlZ2lzdGVyQnlJbmRleChpbmRleCwgY2xzLCBkYXRhLCBlbnYpOwogICAgICBpZiAoY2xzIGlzISBKUmVjb3JkICYmIGNscyBpcyEgSkNsb3N1cmVDbGFzcykgewogICAgICAgIC8vIFN5bnRoZXNpemVkIGNsYXNzZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBsaWJyYXJ5IGVudmlyb25tZW50LgogICAgICAgIGxpYnJhcmllcy5nZXRFbnYoY2xzLmxpYnJhcnkpLnJlZ2lzdGVyQ2xhc3MoY2xzLm5hbWUsIGVudik7CiAgICAgIH0KICAgICAgYXNzZXJ0KGluZGV4ID09IGNscy5jbGFzc0luZGV4KTsKICAgIH0pOwogICAgc291cmNlLmVuZChjbGFzc0RhdGFUYWcpOwoKICAgIHNvdXJjZS5iZWdpbih0eXBlZGVmRGF0YVRhZyk7CiAgICBlbnRpdHlMb29rdXAuZm9yRWFjaFR5cGVkZWYoKGludCBpbmRleCwgSlR5cGVkZWYgdHlwZWRlZikgewogICAgICBKVHlwZWRlZkRhdGEgZGF0YSA9IG5ldyBKVHlwZWRlZkRhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIHR5cGVkZWZNYXBbZGF0YS5ub2RlXSA9IHR5cGVkZWZzLnJlZ2lzdGVyQnlJbmRleChpbmRleCwgdHlwZWRlZiwgZGF0YSk7CiAgICAgIGFzc2VydChpbmRleCA9PSB0eXBlZGVmLnR5cGVkZWZJbmRleCk7CiAgICB9KTsKICAgIHNvdXJjZS5lbmQodHlwZWRlZkRhdGFUYWcpOwoKICAgIHNvdXJjZS5iZWdpbihtZW1iZXJEYXRhVGFnKTsKICAgIGVudGl0eUxvb2t1cC5mb3JFYWNoTWVtYmVyKChpbnQgaW5kZXgsIEluZGV4ZWRNZW1iZXIgbWVtYmVyKSB7CiAgICAgIEpNZW1iZXJEYXRhIGRhdGEgPSBuZXcgSk1lbWJlckRhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIG1lbWJlcnMucmVnaXN0ZXJCeUluZGV4KGluZGV4LCBtZW1iZXIsIGRhdGEpOwogICAgICBzd2l0Y2ggKGRhdGEuZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLnJlZ3VsYXI6CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yOgogICAgICAgICAgaXIuTWVtYmVyIG5vZGUgPSBkYXRhLmRlZmluaXRpb24ubm9kZTsKICAgICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICAgICAgICBmaWVsZE1hcFtub2RlXSA9IG1lbWJlcjsKICAgICAgICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICAgICAgY29uc3RydWN0b3JNYXBbbm9kZV0gPSBtZW1iZXI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXRob2RNYXBbbm9kZV0gPSBtZW1iZXI7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICB9CiAgICAgIGFzc2VydChpbmRleCA9PSBtZW1iZXIubWVtYmVySW5kZXgpOwogICAgfSk7CiAgICBzb3VyY2UuZW5kKG1lbWJlckRhdGFUYWcpOwoKICAgIHNvdXJjZS5iZWdpbih0eXBlVmFyaWFibGVEYXRhVGFnKTsKICAgIGVudGl0eUxvb2t1cC5mb3JFYWNoVHlwZVZhcmlhYmxlKChpbnQgaW5kZXgsIEpUeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlKSB7CiAgICAgIEpUeXBlVmFyaWFibGVEYXRhIGRhdGEgPSBuZXcgSlR5cGVWYXJpYWJsZURhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIHR5cGVWYXJpYWJsZU1hcFtkYXRhLm5vZGVdID0KICAgICAgICAgIHR5cGVWYXJpYWJsZXMucmVnaXN0ZXJCeUluZGV4KGluZGV4LCB0eXBlVmFyaWFibGUsIGRhdGEpOwogICAgICBhc3NlcnQoaW5kZXggPT0gdHlwZVZhcmlhYmxlLnR5cGVWYXJpYWJsZUluZGV4KTsKICAgIH0pOwogICAgc291cmNlLmVuZCh0eXBlVmFyaWFibGVEYXRhVGFnKTsKCiAgICBzb3VyY2UuYmVnaW4obmVzdGVkQ2xvc3VyZXNUYWcpOwogICAgX25lc3RlZENsb3N1cmVNYXAuYWRkQWxsKHNvdXJjZS5yZWFkTWVtYmVyTWFwKAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBzb3VyY2UucmVhZE1lbWJlcnM8SW5kZXhlZEZ1bmN0aW9uPigpKSk7CiAgICBzb3VyY2UuZW5kKG5lc3RlZENsb3N1cmVzVGFnKTsKCiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgfQoKICAvLy8gUHJlcGFyZXMgdGhlIGVudGl0eSBtYXBzIGZvciBjb2RlZ2VuIHNlcmlhbGl6YXRpb24gYW5kIHJldHVybnMgdGhlIG1lbWJlcgogIC8vLyBpbmRleCBsaW1pdCBmb3IgZWFybHkgbWVtYmVycy4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhbGwgbGF0ZSBtZW1iZXJzLCBzdWNoIGFzIGNvbnN0cnVjdG9yIGJvZGllcyBhbmQKICAvLy8gZ2VuZXJhdG9yIGJvZGllcywgYW5kIGNsb3NlcyB0aGUgZW50aXR5IG1hcHMgZm9yIGZ1cnRoZXIgcmVnaXN0cmF0aW9uLgogIGludCBwcmVwYXJlRm9yQ29kZWdlblNlcmlhbGl6YXRpb24oKSB7CiAgICBpbnQgbGVuZ3RoID0gbWVtYmVycy5sZW5ndGg7CiAgICBmb3IgKGludCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgbGVuZ3RoOyBtZW1iZXJJbmRleCsrKSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBtZW1iZXJzLmdldEVudGl0eShtZW1iZXJJbmRleCk7CiAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgY29udGludWU7CiAgICAgIGlmIChtZW1iZXIgaXMgSkdlbmVyYXRpdmVDb25zdHJ1Y3RvcikgewogICAgICAgIGdldENvbnN0cnVjdG9yQm9keShtZW1iZXJzLmdldERhdGEobWVtYmVyKS5kZWZpbml0aW9uLm5vZGUpOwogICAgICB9CiAgICAgIGlmIChtZW1iZXIgaXMgSW5kZXhlZEZ1bmN0aW9uICYmIG1lbWJlci5hc3luY01hcmtlciAhPSBBc3luY01hcmtlci5TWU5DKSB7CiAgICAgICAgZ2V0R2VuZXJhdG9yQm9keShtZW1iZXIpOwogICAgICB9CiAgICB9CiAgICBsaWJyYXJpZXMuY2xvc2UoKTsKICAgIGNsYXNzZXMuY2xvc2UoKTsKICAgIG1lbWJlcnMuY2xvc2UoKTsKICAgIHR5cGVkZWZzLmNsb3NlKCk7CiAgICB0eXBlVmFyaWFibGVzLmNsb3NlKCk7CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSnNUb0VsZW1lbnRNYXBdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CgogICAgLy8gU2VyaWFsaXplIHRoZSBlbnRpdGllcyBiZWZvcmUgc2VyaWFsaXppbmcgdGhlIGRhdGEuCiAgICBzaW5rLmJlZ2luKGxpYnJhcnlUYWcpOwogICAgc2luay53cml0ZUludChsaWJyYXJpZXMuc2l6ZSk7CiAgICBsaWJyYXJpZXMuZm9yRWFjaCgoSkxpYnJhcnkgbGlicmFyeSwgXywgX18pIHsKICAgICAgc2luay53cml0ZUludChsaWJyYXJ5LmxpYnJhcnlJbmRleCk7CiAgICAgIGxpYnJhcnkud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CiAgICBzaW5rLmVuZChsaWJyYXJ5VGFnKTsKCiAgICBzaW5rLmJlZ2luKGNsYXNzVGFnKTsKICAgIHNpbmsud3JpdGVJbnQoY2xhc3Nlcy5zaXplKTsKICAgIGNsYXNzZXMuZm9yRWFjaCgoSkNsYXNzIGNscywgXywgX18pIHsKICAgICAgc2luay53cml0ZUludChjbHMuY2xhc3NJbmRleCk7CiAgICAgIGNscy53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKICAgIHNpbmsuZW5kKGNsYXNzVGFnKTsKCiAgICBzaW5rLmJlZ2luKHR5cGVkZWZUYWcpOwogICAgc2luay53cml0ZUludCh0eXBlZGVmcy5zaXplKTsKICAgIHR5cGVkZWZzLmZvckVhY2goKEpUeXBlZGVmIHR5cGVkZWYsIF8pIHsKICAgICAgc2luay53cml0ZUludCh0eXBlZGVmLnR5cGVkZWZJbmRleCk7CiAgICAgIHR5cGVkZWYud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CiAgICBzaW5rLmVuZCh0eXBlZGVmVGFnKTsKCiAgICBzaW5rLmJlZ2luKG1lbWJlclRhZyk7CiAgICBzaW5rLndyaXRlSW50KG1lbWJlcnMuc2l6ZSk7CiAgICBtZW1iZXJzLmZvckVhY2goKEpNZW1iZXIgbWVtYmVyLCBfKSB7CiAgICAgIHNpbmsud3JpdGVJbnQobWVtYmVyLm1lbWJlckluZGV4KTsKICAgICAgbWVtYmVyLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQobWVtYmVyVGFnKTsKCiAgICBzaW5rLmJlZ2luKHR5cGVWYXJpYWJsZVRhZyk7CiAgICBzaW5rLndyaXRlSW50KHR5cGVWYXJpYWJsZXMuc2l6ZSk7CiAgICB0eXBlVmFyaWFibGVzLmZvckVhY2goKEpUeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlLCBfKSB7CiAgICAgIHNpbmsud3JpdGVJbnQodHlwZVZhcmlhYmxlLnR5cGVWYXJpYWJsZUluZGV4KTsKICAgICAgdHlwZVZhcmlhYmxlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQodHlwZVZhcmlhYmxlVGFnKTsKCiAgICAvLyBTZXJpYWxpemUgdGhlIGVudGl0eSBkYXRhIGFmdGVyIGhhdmluZyBzZXJpYWxpemVkIHRoZSBlbnRpdGllcy4KICAgIHNpbmsuYmVnaW4obGlicmFyeURhdGFUYWcpOwogICAgbGlicmFyaWVzLmZvckVhY2goKF8sIEpMaWJyYXJ5RGF0YSBkYXRhLCBKTGlicmFyeUVudiBlbnYpIHsKICAgICAgZW52LndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgICAgZGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKICAgIHNpbmsuZW5kKGxpYnJhcnlEYXRhVGFnKTsKCiAgICBzaW5rLmJlZ2luKGNsYXNzRGF0YVRhZyk7CiAgICBjbGFzc2VzLmZvckVhY2goKF8sIEpDbGFzc0RhdGEgZGF0YSwgSkNsYXNzRW52IGVudikgewogICAgICBlbnYud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgICBkYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQoY2xhc3NEYXRhVGFnKTsKCiAgICBzaW5rLmJlZ2luKHR5cGVkZWZEYXRhVGFnKTsKICAgIHR5cGVkZWZzLmZvckVhY2goKF8sIEpUeXBlZGVmRGF0YSBkYXRhKSB7CiAgICAgIGRhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CiAgICBzaW5rLmVuZCh0eXBlZGVmRGF0YVRhZyk7CgogICAgc2luay5iZWdpbihtZW1iZXJEYXRhVGFnKTsKICAgIG1lbWJlcnMuZm9yRWFjaCgoXywgSk1lbWJlckRhdGEgZGF0YSkgewogICAgICBkYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQobWVtYmVyRGF0YVRhZyk7CgogICAgc2luay5iZWdpbih0eXBlVmFyaWFibGVEYXRhVGFnKTsKICAgIHR5cGVWYXJpYWJsZXMuZm9yRWFjaCgoXywgSlR5cGVWYXJpYWJsZURhdGEgZGF0YSkgewogICAgICBkYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQodHlwZVZhcmlhYmxlRGF0YVRhZyk7CgogICAgc2luay5iZWdpbihuZXN0ZWRDbG9zdXJlc1RhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKAogICAgICAgIF9uZXN0ZWRDbG9zdXJlTWFwLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBMaXN0PEluZGV4ZWRGdW5jdGlvbj4gZnVuY3Rpb25zKSA9PgogICAgICAgICAgICBzaW5rLndyaXRlTWVtYmVycyhmdW5jdGlvbnMpKTsKICAgIHNpbmsuZW5kKG5lc3RlZENsb3N1cmVzVGFnKTsKCiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGVzIGdldCB0eXBlcyA9PiBfdHlwZXM7CgogIEBvdmVycmlkZQogIEpzRWxlbWVudEVudmlyb25tZW50IGdldCBlbGVtZW50RW52aXJvbm1lbnQgPT4gX2VsZW1lbnRFbnZpcm9ubWVudDsKCiAgQG92ZXJyaWRlCiAgQ29tbW9uRWxlbWVudHNJbXBsIGdldCBjb21tb25FbGVtZW50cyA9PiBfY29tbW9uRWxlbWVudHM7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBfbWFpbkZ1bmN0aW9uIHsKICAgIHJldHVybiBwcm9ncmFtRW52Lm1haW5NZXRob2QgIT0gbnVsbAogICAgICAgID8gZ2V0TWV0aG9kSW50ZXJuYWwocHJvZ3JhbUVudi5tYWluTWV0aG9kKQogICAgICAgIDogbnVsbDsKICB9CgogIExpYnJhcnlFbnRpdHkgZ2V0IF9tYWluTGlicmFyeSB7CiAgICByZXR1cm4gcHJvZ3JhbUVudi5tYWluTWV0aG9kICE9IG51bGwKICAgICAgICA/IGdldExpYnJhcnlJbnRlcm5hbChwcm9ncmFtRW52Lm1haW5NZXRob2QuZW5jbG9zaW5nTGlicmFyeSkKICAgICAgICA6IG51bGw7CiAgfQoKICBTb3VyY2VTcGFuIGdldFNvdXJjZVNwYW4oU3Bhbm5hYmxlIHNwYW5uYWJsZSwgRW50aXR5IGN1cnJlbnRFbGVtZW50KSB7CiAgICBTb3VyY2VTcGFuIGZyb21TcGFubmFibGUoU3Bhbm5hYmxlIHNwYW5uYWJsZSkgewogICAgICBpZiAoc3Bhbm5hYmxlIGlzIEluZGV4ZWRMaWJyYXJ5ICYmCiAgICAgICAgICBzcGFubmFibGUubGlicmFyeUluZGV4IDwgbGlicmFyaWVzLmxlbmd0aCkgewogICAgICAgIEpMaWJyYXJ5RW52IGVudiA9IGxpYnJhcmllcy5nZXRFbnYoc3Bhbm5hYmxlKTsKICAgICAgICByZXR1cm4gY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoZW52LmxpYnJhcnkpOwogICAgICB9IGVsc2UgaWYgKHNwYW5uYWJsZSBpcyBJbmRleGVkQ2xhc3MgJiYKICAgICAgICAgIHNwYW5uYWJsZS5jbGFzc0luZGV4IDwgY2xhc3Nlcy5sZW5ndGgpIHsKICAgICAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoc3Bhbm5hYmxlKTsKICAgICAgICBhc3NlcnQoZGF0YSAhPSBudWxsLCAiTm8gZGF0YSBmb3IgJHNwYW5uYWJsZSBpbiAkdGhpcyIpOwogICAgICAgIHJldHVybiBkYXRhLmRlZmluaXRpb24ubG9jYXRpb247CiAgICAgIH0gZWxzZSBpZiAoc3Bhbm5hYmxlIGlzIEluZGV4ZWRNZW1iZXIgJiYKICAgICAgICAgIHNwYW5uYWJsZS5tZW1iZXJJbmRleCA8IG1lbWJlcnMubGVuZ3RoKSB7CiAgICAgICAgSk1lbWJlckRhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShzcGFubmFibGUpOwogICAgICAgIGFzc2VydChkYXRhICE9IG51bGwsICJObyBkYXRhIGZvciAkc3Bhbm5hYmxlIGluICR0aGlzIik7CiAgICAgICAgcmV0dXJuIGRhdGEuZGVmaW5pdGlvbi5sb2NhdGlvbjsKICAgICAgfSBlbHNlIGlmIChzcGFubmFibGUgaXMgSkxvY2FsKSB7CiAgICAgICAgcmV0dXJuIGdldFNvdXJjZVNwYW4oc3Bhbm5hYmxlLm1lbWJlckNvbnRleHQsIGN1cnJlbnRFbGVtZW50KTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBTb3VyY2VTcGFuIHNvdXJjZVNwYW4gPSBmcm9tU3Bhbm5hYmxlKHNwYW5uYWJsZSk7CiAgICBzb3VyY2VTcGFuID8/PSBmcm9tU3Bhbm5hYmxlKGN1cnJlbnRFbGVtZW50KTsKICAgIHJldHVybiBzb3VyY2VTcGFuOwogIH0KCiAgTGlicmFyeUVudGl0eSBsb29rdXBMaWJyYXJ5KFVyaSB1cmkpIHsKICAgIEpMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBwcm9ncmFtRW52Lmxvb2t1cExpYnJhcnkodXJpKTsKICAgIGlmIChsaWJyYXJ5RW52ID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIGdldExpYnJhcnlJbnRlcm5hbChsaWJyYXJ5RW52LmxpYnJhcnksIGxpYnJhcnlFbnYpOwogIH0KCiAgU3RyaW5nIF9nZXRMaWJyYXJ5TmFtZShJbmRleGVkTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgSkxpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICByZXR1cm4gbGlicmFyeUVudi5saWJyYXJ5Lm5hbWUgPz8gJyc7CiAgfQoKICBNZW1iZXJFbnRpdHkgbG9va3VwTGlicmFyeU1lbWJlcihJbmRleGVkTGlicmFyeSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShsaWJyYXJ5KSk7CiAgICBKTGlicmFyeUVudiBsaWJyYXJ5RW52ID0gbGlicmFyaWVzLmdldEVudihsaWJyYXJ5KTsKICAgIGlyLk1lbWJlciBtZW1iZXIgPSBsaWJyYXJ5RW52Lmxvb2t1cE1lbWJlcihuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICByZXR1cm4gbWVtYmVyICE9IG51bGwgPyBnZXRNZW1iZXIobWVtYmVyKSA6IG51bGw7CiAgfQoKICB2b2lkIF9mb3JFYWNoTGlicmFyeU1lbWJlcigKICAgICAgSW5kZXhlZExpYnJhcnkgbGlicmFyeSwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgSkxpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICBsaWJyYXJ5RW52LmZvckVhY2hNZW1iZXIoKGlyLk1lbWJlciBub2RlKSB7CiAgICAgIGYoZ2V0TWVtYmVyKG5vZGUpKTsKICAgIH0pOwogIH0KCiAgQ2xhc3NFbnRpdHkgbG9va3VwQ2xhc3MoSW5kZXhlZExpYnJhcnkgbGlicmFyeSwgU3RyaW5nIG5hbWUpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShsaWJyYXJ5KSk7CiAgICBKTGlicmFyeUVudiBsaWJyYXJ5RW52ID0gbGlicmFyaWVzLmdldEVudihsaWJyYXJ5KTsKICAgIEpDbGFzc0VudiBjbGFzc0VudiA9IGxpYnJhcnlFbnYubG9va3VwQ2xhc3MobmFtZSk7CiAgICBpZiAoY2xhc3NFbnYgIT0gbnVsbCkgewogICAgICByZXR1cm4gZ2V0Q2xhc3NJbnRlcm5hbChjbGFzc0Vudi5jbHMsIGNsYXNzRW52KTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBfZm9yRWFjaENsYXNzKEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnksIHZvaWQgZihDbGFzc0VudGl0eSBjbHMpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgSkxpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICBsaWJyYXJ5RW52LmZvckVhY2hDbGFzcygoSkNsYXNzRW52IGNsYXNzRW52KSB7CiAgICAgIGlmICghY2xhc3NFbnYuaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgIGYoZ2V0Q2xhc3NJbnRlcm5hbChjbGFzc0Vudi5jbHMsIGNsYXNzRW52KSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgTWVtYmVyRW50aXR5IGxvb2t1cENsYXNzTWVtYmVyKEluZGV4ZWRDbGFzcyBjbHMsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgSkNsYXNzRW52IGNsYXNzRW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIHJldHVybiBjbGFzc0Vudi5sb29rdXBNZW1iZXIodGhpcywgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogIH0KCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoSW5kZXhlZENsYXNzIGNscywgU3RyaW5nIG5hbWUpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0VudiBjbGFzc0VudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICByZXR1cm4gY2xhc3NFbnYubG9va3VwQ29uc3RydWN0b3IodGhpcywgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgIGlyLkNsYXNzIGNscywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGdldENsYXNzKGNscyksIGdldERhcnRUeXBlcyh0eXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldExpYnJhcnkoaXIuTGlicmFyeSBub2RlKSA9PiBnZXRMaWJyYXJ5SW50ZXJuYWwobm9kZSk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldENsYXNzKGlyLkNsYXNzIG5vZGUpID0+IGdldENsYXNzSW50ZXJuYWwobm9kZSk7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0U3VwZXJUeXBlKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLnN1cGVydHlwZTsKICB9CgogIHZvaWQgX2Vuc3VyZVRoaXNBbmRSYXdUeXBlKENsYXNzRW50aXR5IGNscywgSkNsYXNzRGF0YSBkYXRhKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBpZiAoZGF0YSBpcyBKQ2xhc3NEYXRhSW1wbCAmJiBkYXRhLnRoaXNUeXBlID09IG51bGwpIHsKICAgICAgaXIuQ2xhc3Mgbm9kZSA9IGRhdGEuY2xzOwogICAgICBpZiAobm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgZGF0YS50aGlzVHlwZSA9CiAgICAgICAgICAgIGRhdGEucmF3VHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGNscywgY29uc3QgPERhcnRUeXBlPltdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkYXRhLnRoaXNUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmdlbmVyYXRlKG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICAgICAgKGludCBpbmRleCkgewogICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlVHlwZSgKICAgICAgICAgICAgICAgICAgZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwobm9kZS50eXBlUGFyYW1ldGVyc1tpbmRleF0pKTsKICAgICAgICAgICAgfSkpOwogICAgICAgIGRhdGEucmF3VHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgICAgICBjbHMsCiAgICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgY29uc3QgRHluYW1pY1R5cGUoKSkpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlVmFyaWFibGVFbnRpdHkgZ2V0VHlwZVZhcmlhYmxlKGlyLlR5cGVQYXJhbWV0ZXIgbm9kZSkgPT4KICAgICAgZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwobm9kZSk7CgogIHZvaWQgX2Vuc3VyZVN1cGVydHlwZXMoQ2xhc3NFbnRpdHkgY2xzLCBKQ2xhc3NEYXRhIGRhdGEpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIGlmIChkYXRhIGlzIEpDbGFzc0RhdGFJbXBsICYmIGRhdGEub3JkZXJlZFR5cGVTZXQgPT0gbnVsbCkgewogICAgICBfZW5zdXJlVGhpc0FuZFJhd1R5cGUoY2xzLCBkYXRhKTsKCiAgICAgIGlyLkNsYXNzIG5vZGUgPSBkYXRhLmNsczsKCiAgICAgIGlmIChub2RlLnN1cGVydHlwZSA9PSBudWxsKSB7CiAgICAgICAgZGF0YS5vcmRlcmVkVHlwZVNldCA9IG5ldyBPcmRlcmVkVHlwZVNldC5zaW5nbGV0b24oZGF0YS50aGlzVHlwZSk7CiAgICAgICAgZGF0YS5pc01peGluQXBwbGljYXRpb24gPSBmYWxzZTsKICAgICAgICBkYXRhLmludGVyZmFjZXMgPSBjb25zdCA8SW50ZXJmYWNlVHlwZT5bXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBJbnRlcmZhY2VUeXBlIHByb2Nlc3NTdXBlcnR5cGUoaXIuU3VwZXJ0eXBlIG5vZGUpIHsKICAgICAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0gX3R5cGVDb252ZXJ0ZXIudmlzaXRTdXBlcnR5cGUobm9kZSk7CiAgICAgICAgICBJbmRleGVkQ2xhc3Mgc3VwZXJjbGFzcyA9IHN1cGVydHlwZS5lbGVtZW50OwogICAgICAgICAgSkNsYXNzRGF0YSBzdXBlcmRhdGEgPSBjbGFzc2VzLmdldERhdGEoc3VwZXJjbGFzcyk7CiAgICAgICAgICBfZW5zdXJlU3VwZXJ0eXBlcyhzdXBlcmNsYXNzLCBzdXBlcmRhdGEpOwogICAgICAgICAgcmV0dXJuIHN1cGVydHlwZTsKICAgICAgICB9CgogICAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlOwogICAgICAgIExpbmtCdWlsZGVyPEludGVyZmFjZVR5cGU+IGxpbmtCdWlsZGVyID0KICAgICAgICAgICAgbmV3IExpbmtCdWlsZGVyPEludGVyZmFjZVR5cGU+KCk7CiAgICAgICAgaWYgKG5vZGUuaXNNaXhpbkRlY2xhcmF0aW9uKSB7CiAgICAgICAgICAvLyBBIG1peGluIGRlY2xhcmF0aW9uCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICBtaXhpbiBNIG9uIEEsIEIsIEMge30KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBpcyBlbmNvZGVkIGJ5IENGRSBhcwogICAgICAgICAgLy8KICAgICAgICAgIC8vICAgYWJzdHJhY3QgY2xhc3MgTSBleHRlbmRzIEEgaW1wbGVtZW50cyBCLCBDIHt9CiAgICAgICAgICAvLyAgIGFic3RyYWN0IGNsYXNzIE0gZXh0ZW5kcyBBJkImQyB7fQogICAgICAgICAgLy8KICAgICAgICAgIC8vIGJ1dCB3ZSBlbmNvZGUgaXQgYXMKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgIGFic3RyYWN0IGNsYXNzIE0gZXh0ZW5kcyBPYmplY3QgaW1wbGVtZW50cyBBLCBCLCBDIHt9CiAgICAgICAgICAvLwogICAgICAgICAgLy8gc28gd2UgbmVlZCBnZXQgdGhlIHN1cGVyY2xhc3NlcyBmcm9tIHRoZSBvbi1jbGF1c2UsIEEsIEIsIGFuZCBDLAogICAgICAgICAgLy8gdGhyb3VnaCBbc3VwZXJjbGFzc0NvbnN0cmFpbnRzXS4KICAgICAgICAgIGZvciAoaXIuU3VwZXJ0eXBlIGNvbnN0cmFpbnQgaW4gbm9kZS5zdXBlcmNsYXNzQ29uc3RyYWludHMoKSkgewogICAgICAgICAgICBsaW5rQnVpbGRlci5hZGRMYXN0KHByb2Nlc3NTdXBlcnR5cGUoY29uc3RyYWludCkpOwogICAgICAgICAgfQogICAgICAgICAgLy8gU2V0IHN1cGVyY2xhc3MgdG8gYE9iamVjdGAuCiAgICAgICAgICBzdXBlcnR5cGUgPSBfY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3VwZXJ0eXBlID0gcHJvY2Vzc1N1cGVydHlwZShub2RlLnN1cGVydHlwZSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdXBlcnR5cGUgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpIHsKICAgICAgICAgIENsYXNzRW50aXR5IGRlZmF1bHRTdXBlcmNsYXNzID0KICAgICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2V0RGVmYXVsdFN1cGVyY2xhc3MoY2xzLCBuYXRpdmVEYXRhKTsKICAgICAgICAgIGRhdGEuc3VwZXJ0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGRlZmF1bHRTdXBlcmNsYXNzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YS5zdXBlcnR5cGUgPSBzdXBlcnR5cGU7CiAgICAgICAgfQogICAgICAgIGlmIChub2RlLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICAgIGRhdGEuaXNNaXhpbkFwcGxpY2F0aW9uID0gdHJ1ZTsKICAgICAgICAgIGxpbmtCdWlsZGVyCiAgICAgICAgICAgICAgLmFkZExhc3QoZGF0YS5taXhlZEluVHlwZSA9IHByb2Nlc3NTdXBlcnR5cGUobm9kZS5taXhlZEluVHlwZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXRhLmlzTWl4aW5BcHBsaWNhdGlvbiA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBub2RlLmltcGxlbWVudGVkVHlwZXMuZm9yRWFjaCgoaXIuU3VwZXJ0eXBlIHN1cGVydHlwZSkgewogICAgICAgICAgbGlua0J1aWxkZXIuYWRkTGFzdChwcm9jZXNzU3VwZXJ0eXBlKHN1cGVydHlwZSkpOwogICAgICAgIH0pOwogICAgICAgIExpbms8SW50ZXJmYWNlVHlwZT4gaW50ZXJmYWNlcyA9CiAgICAgICAgICAgIGxpbmtCdWlsZGVyLnRvTGluayhjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCkpOwogICAgICAgIE9yZGVyZWRUeXBlU2V0QnVpbGRlciBzZXRCdWlsZGVyID0KICAgICAgICAgICAgbmV3IEtlcm5lbE9yZGVyZWRUeXBlU2V0QnVpbGRlcih0aGlzLCBjbHMpOwogICAgICAgIGRhdGEub3JkZXJlZFR5cGVTZXQgPSBzZXRCdWlsZGVyLmNyZWF0ZU9yZGVyZWRUeXBlU2V0KAogICAgICAgICAgICBkYXRhLnN1cGVydHlwZSwgaW50ZXJmYWNlcy5yZXZlcnNlKGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKSkpOwogICAgICAgIGRhdGEuaW50ZXJmYWNlcyA9IG5ldyBMaXN0PEludGVyZmFjZVR5cGU+LmZyb20oaW50ZXJmYWNlcy50b0xpc3QoKSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIFR5cGVkZWZUeXBlIGdldFR5cGVkZWZUeXBlKGlyLlR5cGVkZWYgbm9kZSkgewogICAgSW5kZXhlZFR5cGVkZWYgdHlwZWRlZiA9IGdldFR5cGVkZWZJbnRlcm5hbChub2RlKTsKICAgIHJldHVybiB0eXBlZGVmcy5nZXREYXRhKHR5cGVkZWYpLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgZ2V0TWVtYmVyKGlyLk1lbWJlciBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBpci5GaWVsZCkgewogICAgICByZXR1cm4gZ2V0RmllbGRJbnRlcm5hbChub2RlKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3JJbnRlcm5hbChub2RlKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgaWYgKG5vZGUua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3JJbnRlcm5hbChub2RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZ2V0TWV0aG9kSW50ZXJuYWwobm9kZSk7CiAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIG1lbWJlcjogJG5vZGUiKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBnZXRTdXBlck1lbWJlcihNZW1iZXJFbnRpdHkgY29udGV4dCwgaXIuTmFtZSBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgLy8gV2UgY2FuIG5vIGxvbmdlciB0cnVzdCB0aGUgaW50ZXJmYWNlIHRhcmdldCBvZiB0aGUgc3VwZXIgYWNjZXNzIHNpbmNlIGl0CiAgICAvLyBtaWdodCBiZSBhIG1lbWJlciB0aGF0IHdlIGhhdmUgY2xvbmVkLgogICAgQ2xhc3NFbnRpdHkgY2xzID0gZ2V0TWVtYmVyVGhpc1R5cGUoY29udGV4dCkuZWxlbWVudDsKICAgIGFzc2VydCgKICAgICAgICBjbHMgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChjb250ZXh0LAogICAgICAgICAgICAiTm8gZW5jbG9zaW5nIGNsYXNzIGZvciBzdXBlciBtZW1iZXIgYWNjZXNzIGluICRjb250ZXh0LiIpKTsKICAgIEluZGV4ZWRDbGFzcyBzdXBlcmNsYXNzID0gZ2V0U3VwZXJUeXBlKGNscyk/LmVsZW1lbnQ7CiAgICB3aGlsZSAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgIEpDbGFzc0VudiBlbnYgPSBjbGFzc2VzLmdldEVudihzdXBlcmNsYXNzKTsKICAgICAgTWVtYmVyRW50aXR5IHN1cGVyTWVtYmVyID0KICAgICAgICAgIGVudi5sb29rdXBNZW1iZXIodGhpcywgbmFtZS5uYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICAgIGlmIChzdXBlck1lbWJlciAhPSBudWxsKSB7CiAgICAgICAgaWYgKCFzdXBlck1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm4gbnVsbDsKICAgICAgICBpZiAoIXN1cGVyTWVtYmVyLmlzQWJzdHJhY3QpIHsKICAgICAgICAgIHJldHVybiBzdXBlck1lbWJlcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3VwZXJjbGFzcyA9IGdldFN1cGVyVHlwZShzdXBlcmNsYXNzKT8uZWxlbWVudDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0Q29uc3RydWN0b3IoaXIuTWVtYmVyIG5vZGUpID0+CiAgICAgIGdldENvbnN0cnVjdG9ySW50ZXJuYWwobm9kZSk7CgogIENvbnN0cnVjdG9yRW50aXR5IGdldFN1cGVyQ29uc3RydWN0b3IoCiAgICAgIGlyLkNvbnN0cnVjdG9yIHNvdXJjZU5vZGUsIGlyLk1lbWJlciB0YXJnZXROb2RlKSB7CiAgICBDb25zdHJ1Y3RvckVudGl0eSBzb3VyY2UgPSBnZXRDb25zdHJ1Y3Rvcihzb3VyY2VOb2RlKTsKICAgIENsYXNzRW50aXR5IHNvdXJjZUNsYXNzID0gc291cmNlLmVuY2xvc2luZ0NsYXNzOwogICAgQ29uc3RydWN0b3JFbnRpdHkgdGFyZ2V0ID0gZ2V0Q29uc3RydWN0b3IodGFyZ2V0Tm9kZSk7CiAgICBDbGFzc0VudGl0eSB0YXJnZXRDbGFzcyA9IHRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIEluZGV4ZWRDbGFzcyBzdXBlckNsYXNzID0gZ2V0U3VwZXJUeXBlKHNvdXJjZUNsYXNzKT8uZWxlbWVudDsKICAgIGlmIChzdXBlckNsYXNzID09IHRhcmdldENsYXNzKSB7CiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CiAgICBKQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoc3VwZXJDbGFzcyk7CiAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IGVudi5sb29rdXBDb25zdHJ1Y3Rvcih0aGlzLCB0YXJnZXQubmFtZSk7CiAgICBpZiAoY29uc3RydWN0b3IgIT0gbnVsbCkgewogICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICB9CiAgICB0aHJvdyBmYWlsZWRBdChzb3VyY2UsICJTdXBlciBjb25zdHJ1Y3RvciBmb3IgJHNvdXJjZSBub3QgZm91bmQuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXRNZXRob2QoaXIuUHJvY2VkdXJlIG5vZGUpID0+IGdldE1ldGhvZEludGVybmFsKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXRGaWVsZChpci5GaWVsZCBub2RlKSA9PiBnZXRGaWVsZEludGVybmFsKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXREYXJ0VHlwZShpci5EYXJ0VHlwZSB0eXBlKSA9PiBfdHlwZUNvbnZlcnRlci5jb252ZXJ0KHR5cGUpOwoKICBAb3ZlcnJpZGUKICBUeXBlVmFyaWFibGVUeXBlIGdldFR5cGVWYXJpYWJsZVR5cGUoaXIuVHlwZVBhcmFtZXRlclR5cGUgdHlwZSkgPT4KICAgICAgZ2V0RGFydFR5cGUodHlwZSk7CgogIEBvdmVycmlkZQogIExpc3Q8RGFydFR5cGU+IGdldERhcnRUeXBlcyhMaXN0PGlyLkRhcnRUeXBlPiB0eXBlcykgewogICAgTGlzdDxEYXJ0VHlwZT4gbGlzdCA9IDxEYXJ0VHlwZT5bXTsKICAgIHR5cGVzLmZvckVhY2goKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgICAgbGlzdC5hZGQoZ2V0RGFydFR5cGUodHlwZSkpOwogICAgfSk7CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0SW50ZXJmYWNlVHlwZShpci5JbnRlcmZhY2VUeXBlIHR5cGUpID0+CiAgICAgIF90eXBlQ29udmVydGVyLmNvbnZlcnQodHlwZSk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIERhcnRUeXBlIHJldHVyblR5cGU7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgLy8gVGhlIHJldHVybiB0eXBlIG9uIGdlbmVyYXRpdmUgY29uc3RydWN0b3JzIGlzIGB2b2lkYCwgYnV0IHdlIG5lZWQKICAgICAgLy8gYGR5bmFtaWNgIHR5cGUgdG8gbWF0Y2ggdGhlIGVsZW1lbnQgbW9kZWwuCiAgICAgIHJldHVyblR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuVHlwZSA9IGdldERhcnRUeXBlKG5vZGUucmV0dXJuVHlwZSk7CiAgICB9CiAgICBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJUeXBlcyA9IDxEYXJ0VHlwZT5bXTsKICAgIExpc3Q8RGFydFR5cGU+IG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMgPSA8RGFydFR5cGU+W107CgogICAgRGFydFR5cGUgZ2V0UGFyYW1ldGVyVHlwZShpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICAgIGlmICh2YXJpYWJsZS5pc0NvdmFyaWFudCB8fCB2YXJpYWJsZS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgLy8gQSBjb3ZhcmlhbnQgcGFyYW1ldGVyIGhhcyB0eXBlIGBPYmplY3RgIGluIHRoZSBtZXRob2Qgc2lnbmF0dXJlLgogICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlOwogICAgICB9CiAgICAgIHJldHVybiBnZXREYXJ0VHlwZSh2YXJpYWJsZS50eXBlKTsKICAgIH0KCiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgaW4gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBpZiAocGFyYW1ldGVyVHlwZXMubGVuZ3RoID09IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuYWRkKGdldFBhcmFtZXRlclR5cGUodmFyaWFibGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwYXJhbWV0ZXJUeXBlcy5hZGQoZ2V0UGFyYW1ldGVyVHlwZSh2YXJpYWJsZSkpOwogICAgICB9CiAgICB9CiAgICBMaXN0PFN0cmluZz4gbmFtZWRQYXJhbWV0ZXJzID0gPFN0cmluZz5bXTsKICAgIExpc3Q8RGFydFR5cGU+IG5hbWVkUGFyYW1ldGVyVHlwZXMgPSA8RGFydFR5cGU+W107CiAgICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IHNvcnRlZE5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KCkuLnNvcnQoKGEsIGIpID0+IGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKSk7CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgaW4gc29ydGVkTmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGQodmFyaWFibGUubmFtZSk7CiAgICAgIG5hbWVkUGFyYW1ldGVyVHlwZXMuYWRkKGdldFBhcmFtZXRlclR5cGUodmFyaWFibGUpKTsKICAgIH0KICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHR5cGVWYXJpYWJsZXM7CiAgICBpZiAobm9kZS50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVQYXJhbWV0ZXJzID0gPERhcnRUeXBlPltdOwogICAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgdHlwZVBhcmFtZXRlcnMKICAgICAgICAgICAgLmFkZChnZXREYXJ0VHlwZShuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpKTsKICAgICAgfQogICAgICB0eXBlVmFyaWFibGVzID0gbmV3IExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+LmdlbmVyYXRlKAogICAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAoaW50IGluZGV4KSA9PiBuZXcgRnVuY3Rpb25UeXBlVmFyaWFibGUoaW5kZXgpKTsKCiAgICAgIERhcnRUeXBlIHN1YnN0KERhcnRUeXBlIHR5cGUpIHsKICAgICAgICByZXR1cm4gdHlwZS5zdWJzdCh0eXBlVmFyaWFibGVzLCB0eXBlUGFyYW1ldGVycyk7CiAgICAgIH0KCiAgICAgIHJldHVyblR5cGUgPSBzdWJzdChyZXR1cm5UeXBlKTsKICAgICAgcGFyYW1ldGVyVHlwZXMgPSBwYXJhbWV0ZXJUeXBlcy5tYXAoc3Vic3QpLnRvTGlzdCgpOwogICAgICBvcHRpb25hbFBhcmFtZXRlclR5cGVzID0gb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5tYXAoc3Vic3QpLnRvTGlzdCgpOwogICAgICBuYW1lZFBhcmFtZXRlclR5cGVzID0gbmFtZWRQYXJhbWV0ZXJUeXBlcy5tYXAoc3Vic3QpLnRvTGlzdCgpOwogICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICB0eXBlVmFyaWFibGVzW2luZGV4XS5ib3VuZCA9CiAgICAgICAgICAgIHN1YnN0KGdldERhcnRUeXBlKG5vZGUudHlwZVBhcmFtZXRlcnNbaW5kZXhdLmJvdW5kKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHR5cGVWYXJpYWJsZXMgPSBjb25zdCA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W107CiAgICB9CgogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1ldGVyVHlwZXMsIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLCBuYW1lZFBhcmFtZXRlclR5cGVzLCB0eXBlVmFyaWFibGVzKTsKICB9CgogIENvbnN0YW50VmFsdWUgY29tcHV0ZUNvbnN0YW50VmFsdWUoCiAgICAgIFNwYW5uYWJsZSBzcGFubmFibGUsIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCwKICAgICAge2Jvb2wgcmVxdWlyZUNvbnN0YW50OiB0cnVlfSkgewogICAgcmV0dXJuIF9jb25zdGFudEVudmlyb25tZW50Ll9nZXRDb25zdGFudFZhbHVlKHNwYW5uYWJsZSwgY29uc3RhbnQsCiAgICAgICAgY29uc3RhbnRSZXF1aXJlZDogcmVxdWlyZUNvbnN0YW50KTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHN1YnN0QnlDb250ZXh0KERhcnRUeXBlIHR5cGUsIEludGVyZmFjZVR5cGUgY29udGV4dCkgewogICAgcmV0dXJuIHR5cGUuc3Vic3QoCiAgICAgICAgY29udGV4dC50eXBlQXJndW1lbnRzLCBnZXRUaGlzVHlwZShjb250ZXh0LmVsZW1lbnQpLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGBjYWxsYCBtZXRob2Qgb24gJ3R5cGUnLgogIC8vLwogIC8vLyBJZiBbdHlwZV0gZG9lc24ndCBoYXZlIGEgYGNhbGxgIG1lbWJlciBgbnVsbGAgaXMgcmV0dXJuZWQuIElmIFt0eXBlXSBoYXMKICAvLy8gYW4gaW52YWxpZCBgY2FsbGAgbWVtYmVyIChub24tbWV0aG9kIG9yIGEgc3ludGhlc2l6ZWQgbWV0aG9kIHdpdGggYm90aAogIC8vLyBvcHRpb25hbCBhbmQgbmFtZWQgcGFyYW1ldGVycykgYSBbRHluYW1pY1R5cGVdIGlzIHJldHVybmVkLgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldENhbGxUeXBlKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgSW5kZXhlZENsYXNzIGNscyA9IHR5cGUuZWxlbWVudDsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgaWYgKGRhdGEuY2FsbFR5cGUgIT0gbnVsbCkgewogICAgICByZXR1cm4gc3Vic3RCeUNvbnRleHQoZGF0YS5jYWxsVHlwZSwgdHlwZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0VGhpc1R5cGUoSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgSkNsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlVGhpc0FuZFJhd1R5cGUoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLnRoaXNUeXBlOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBfZ2V0UmF3VHlwZShJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVUaGlzQW5kUmF3VHlwZShjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEucmF3VHlwZTsKICB9CgogIEZ1bmN0aW9uVHlwZSBfZ2V0RnVuY3Rpb25UeXBlKEluZGV4ZWRGdW5jdGlvbiBmdW5jdGlvbikgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGZ1bmN0aW9uKSk7CiAgICBGdW5jdGlvbkRhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmdW5jdGlvbik7CiAgICByZXR1cm4gZGF0YS5nZXRGdW5jdGlvblR5cGUodGhpcyk7CiAgfQoKICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IF9nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoSW5kZXhlZEZ1bmN0aW9uIGZ1bmN0aW9uKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoZnVuY3Rpb24pKTsKICAgIEZ1bmN0aW9uRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKGZ1bmN0aW9uKTsKICAgIHJldHVybiBkYXRhLmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyh0aGlzKTsKICB9CgogIERhcnRUeXBlIF9nZXRGaWVsZFR5cGUoSW5kZXhlZEZpZWxkIGZpZWxkKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoZmllbGQpKTsKICAgIEpGaWVsZERhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmaWVsZCk7CiAgICByZXR1cm4gZGF0YS5nZXRGaWVsZFR5cGUodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChJbmRleGVkVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KHR5cGVWYXJpYWJsZSkpOwogICAgSlR5cGVWYXJpYWJsZURhdGEgZGF0YSA9IHR5cGVWYXJpYWJsZXMuZ2V0RGF0YSh0eXBlVmFyaWFibGUpOwogICAgcmV0dXJuIGRhdGEuZ2V0Qm91bmQodGhpcyk7CiAgfQoKICBEYXJ0VHlwZSBfZ2V0VHlwZVZhcmlhYmxlRGVmYXVsdFR5cGUoSW5kZXhlZFR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseSh0eXBlVmFyaWFibGUpKTsKICAgIEpUeXBlVmFyaWFibGVEYXRhIGRhdGEgPSB0eXBlVmFyaWFibGVzLmdldERhdGEodHlwZVZhcmlhYmxlKTsKICAgIHJldHVybiBkYXRhLmdldERlZmF1bHRUeXBlKHRoaXMpOwogIH0KCiAgQ2xhc3NFbnRpdHkgZ2V0QXBwbGllZE1peGluKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLm1peGVkSW5UeXBlPy5lbGVtZW50OwogIH0KCiAgYm9vbCBfaXNNaXhpbkFwcGxpY2F0aW9uKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLmlzTWl4aW5BcHBsaWNhdGlvbjsKICB9CgogIGJvb2wgX2lzVW5uYW1lZE1peGluQXBwbGljYXRpb24oSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgSkNsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICByZXR1cm4gZW52LmlzVW5uYW1lZE1peGluQXBwbGljYXRpb247CiAgfQoKICBib29sIF9pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbihJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIHJldHVybiBlbnYuaXNTdXBlck1peGluQXBwbGljYXRpb247CiAgfQoKICB2b2lkIF9mb3JFYWNoU3VwZXJ0eXBlKEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIGRhdGEub3JkZXJlZFR5cGVTZXQuc3VwZXJ0eXBlcy5mb3JFYWNoKGYpOwogIH0KCiAgdm9pZCBfZm9yRWFjaENvbnN0cnVjdG9yKEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBtZW1iZXIpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIGVudi5mb3JFYWNoQ29uc3RydWN0b3IodGhpcywgZik7CiAgfQoKICB2b2lkIF9mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0VudiBlbnYgPSBjbGFzc2VzLmdldEVudihjbHMpOwogICAgZW52LmZvckVhY2hNZW1iZXIodGhpcywgKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgZihtZW1iZXIpOwogICAgfSk7CiAgfQoKICB2b2lkIF9mb3JFYWNoQ2xhc3NNZW1iZXIoCiAgICAgIEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihDbGFzc0VudGl0eSBjbHMsIE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIGVudi5mb3JFYWNoTWVtYmVyKHRoaXMsIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGYoY2xzLCBtZW1iZXIpOwogICAgfSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICBpZiAoZGF0YS5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICBfZm9yRWFjaENsYXNzTWVtYmVyKGRhdGEuc3VwZXJ0eXBlLmVsZW1lbnQsIGYpOwogICAgfQogIH0KCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBfZ2V0Q29uc3RydWN0b3JDb25zdGFudChJbmRleGVkQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjb25zdHJ1Y3RvcikpOwogICAgSkNvbnN0cnVjdG9yRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKGNvbnN0cnVjdG9yKTsKICAgIHJldHVybiBkYXRhLmdldENvbnN0cnVjdG9yQ29uc3RhbnQodGhpcywgY29uc3RydWN0b3IpOwogIH0KCiAgQ29uc3RhbnRFeHByZXNzaW9uIF9nZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbihJbmRleGVkRmllbGQgZmllbGQpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShmaWVsZCkpOwogICAgSkZpZWxkRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKGZpZWxkKTsKICAgIHJldHVybiBkYXRhLmdldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBhc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIE9yZGVyZWRUeXBlU2V0IG9yZGVyZWRUeXBlU2V0ID0gZ2V0T3JkZXJlZFR5cGVTZXQodHlwZS5lbGVtZW50KTsKICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0KICAgICAgICBvcmRlcmVkVHlwZVNldC5hc0luc3RhbmNlT2YoY2xzLCBnZXRIaWVyYXJjaHlEZXB0aChjbHMpKTsKICAgIGlmIChzdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICBzdXBlcnR5cGUgPSBzdWJzdEJ5Q29udGV4dChzdXBlcnR5cGUsIHR5cGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVydHlwZTsKICB9CgogIEBvdmVycmlkZQogIE9yZGVyZWRUeXBlU2V0IGdldE9yZGVyZWRUeXBlU2V0KEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLm9yZGVyZWRUeXBlU2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldEhpZXJhcmNoeURlcHRoKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLm9yZGVyZWRUeXBlU2V0Lm1heERlcHRoOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0SW50ZXJmYWNlcyhJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5pbnRlcmZhY2VzOwogIH0KCiAgTWVtYmVyRGVmaW5pdGlvbiBnZXRNZW1iZXJEZWZpbml0aW9uSW50ZXJuYWwoY292YXJpYW50IEluZGV4ZWRNZW1iZXIgbWVtYmVyKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobWVtYmVyKSk7CiAgICByZXR1cm4gbWVtYmVycy5nZXREYXRhKG1lbWJlcikuZGVmaW5pdGlvbjsKICB9CgogIENsYXNzRGVmaW5pdGlvbiBnZXRDbGFzc0RlZmluaXRpb25JbnRlcm5hbChjb3ZhcmlhbnQgSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgcmV0dXJuIGNsYXNzZXMuZ2V0RGF0YShjbHMpLmRlZmluaXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBJbXBvcnRFbnRpdHkgZ2V0SW1wb3J0KGlyLkxpYnJhcnlEZXBlbmRlbmN5IG5vZGUpIHsKICAgIGlyLkxpYnJhcnkgbGlicmFyeSA9IG5vZGUucGFyZW50OwogICAgSkxpYnJhcnlEYXRhIGRhdGEgPSBsaWJyYXJpZXMuZ2V0RGF0YShnZXRMaWJyYXJ5SW50ZXJuYWwobGlicmFyeSkpOwogICAgcmV0dXJuIGRhdGEuaW1wb3J0c1tub2RlXTsKICB9CgogIGlyLlR5cGVFbnZpcm9ubWVudCBnZXQgdHlwZUVudmlyb25tZW50IHsKICAgIGlmIChfdHlwZUVudmlyb25tZW50ID09IG51bGwpIHsKICAgICAgX3R5cGVFbnZpcm9ubWVudCA/Pz0gbmV3IGlyLlR5cGVFbnZpcm9ubWVudCgKICAgICAgICAgIG5ldyBpci5Db3JlVHlwZXMocHJvZ3JhbUVudi5tYWluQ29tcG9uZW50KSwgY2xhc3NIaWVyYXJjaHkpOwogICAgfQogICAgcmV0dXJuIF90eXBlRW52aXJvbm1lbnQ7CiAgfQoKICBpci5DbGFzc0hpZXJhcmNoeSBnZXQgY2xhc3NIaWVyYXJjaHkgewogICAgaWYgKF9jbGFzc0hpZXJhcmNoeSA9PSBudWxsKSB7CiAgICAgIF9jbGFzc0hpZXJhcmNoeSA/Pz0gbmV3IGlyLkNsYXNzSGllcmFyY2h5KHByb2dyYW1FbnYubWFpbkNvbXBvbmVudCk7CiAgICB9CiAgICByZXR1cm4gX2NsYXNzSGllcmFyY2h5OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RhdGljVHlwZVByb3ZpZGVyIGdldFN0YXRpY1R5cGVQcm92aWRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBNZW1iZXJEZWZpbml0aW9uIG1lbWJlckRlZmluaXRpb24gPSBtZW1iZXJzLmdldERhdGEobWVtYmVyKS5kZWZpbml0aW9uOwogICAgU3RhdGljVHlwZUNhY2hlIGNhY2hlZFN0YXRpY1R5cGVzOwogICAgaXIuSW50ZXJmYWNlVHlwZSB0aGlzVHlwZTsKICAgIHN3aXRjaCAobWVtYmVyRGVmaW5pdGlvbi5raW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgaXIuTWVtYmVyIG5vZGUgPSBtZW1iZXJEZWZpbml0aW9uLm5vZGU7CiAgICAgICAgdGhpc1R5cGUgPSBub2RlLmVuY2xvc2luZ0NsYXNzPy50aGlzVHlwZTsKICAgICAgICBjYWNoZWRTdGF0aWNUeXBlcyA9IG1lbWJlcnMuZ2V0RGF0YShtZW1iZXIpLnN0YXRpY1R5cGVzOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUNhbGw6CiAgICAgICAgaXIuVHJlZU5vZGUgbm9kZSA9IG1lbWJlckRlZmluaXRpb24ubm9kZTsKICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7CiAgICAgICAgICBpZiAobm9kZSBpcyBpci5NZW1iZXIpIHsKICAgICAgICAgICAgaXIuTWVtYmVyIG1lbWJlciA9IG5vZGU7CiAgICAgICAgICAgIHRoaXNUeXBlID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzPy50aGlzVHlwZTsKICAgICAgICAgICAgY2FjaGVkU3RhdGljVHlwZXMgPSBtZW1iZXJzLmdldERhdGEoZ2V0TWVtYmVyKG1lbWJlcikpLnN0YXRpY1R5cGVzOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlRmllbGQ6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5zaWduYXR1cmU6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5OgogICAgICAgIGNhY2hlZFN0YXRpY1R5cGVzID0gY29uc3QgU3RhdGljVHlwZUNhY2hlKCk7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgYXNzZXJ0KGNhY2hlZFN0YXRpY1R5cGVzICE9IG51bGwsICJObyBzdGF0aWMgdHlwZXMgY2FjaGVkIGZvciAkbWVtYmVyLiIpOwogICAgcmV0dXJuIG5ldyBDYWNoZWRTdGF0aWNUeXBlKHR5cGVFbnZpcm9ubWVudCwgY2FjaGVkU3RhdGljVHlwZXMsCiAgICAgICAgbmV3IFRoaXNJbnRlcmZhY2VUeXBlLmZyb20odGhpc1R5cGUpKTsKICB9CgogIEBvdmVycmlkZQogIE5hbWUgZ2V0TmFtZShpci5OYW1lIG5hbWUpIHsKICAgIHJldHVybiBuZXcgTmFtZSgKICAgICAgICBuYW1lLm5hbWUsIG5hbWUuaXNQcml2YXRlID8gZ2V0TGlicmFyeShuYW1lLmxpYnJhcnkpIDogbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDYWxsU3RydWN0dXJlIGdldENhbGxTdHJ1Y3R1cmUoaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaW50IGFyZ3VtZW50Q291bnQgPSBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggKyBhcmd1bWVudHMubmFtZWQubGVuZ3RoOwogICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzID0gYXJndW1lbnRzLm5hbWVkLm1hcCgoZSkgPT4gZS5uYW1lKS50b0xpc3QoKTsKICAgIHJldHVybiBuZXcgQ2FsbFN0cnVjdHVyZSgKICAgICAgICBhcmd1bWVudENvdW50LCBuYW1lZEFyZ3VtZW50cywgYXJndW1lbnRzLnR5cGVzLmxlbmd0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTZWxlY3RvciBnZXRTZWxlY3Rvcihpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBUaGlzIGlzIHNjcmVhbWluZyBmb3IgYSBjb21tb24gaW50ZXJmYWNlIGJldHdlZW4KICAgIC8vIFByb3BlcnR5R2V0IGFuZCBTdXBlclByb3BlcnR5R2V0IChhbmQgc2FtZSBmb3IgKkdldCkuIFRhbGsgdG8ga2VybmVsCiAgICAvLyBmb2xrcy4KICAgIGlmIChub2RlIGlzIGlyLlByb3BlcnR5R2V0KSB7CiAgICAgIHJldHVybiBnZXRHZXR0ZXJTZWxlY3Rvcihub2RlLm5hbWUpOwogICAgfQogICAgaWYgKG5vZGUgaXMgaXIuRGlyZWN0UHJvcGVydHlHZXQpIHsKICAgICAgcmV0dXJuIGdldEdldHRlclNlbGVjdG9yKG5vZGUudGFyZ2V0Lm5hbWUpOwogICAgfQogICAgaWYgKG5vZGUgaXMgaXIuU3VwZXJQcm9wZXJ0eUdldCkgewogICAgICByZXR1cm4gZ2V0R2V0dGVyU2VsZWN0b3Iobm9kZS5uYW1lKTsKICAgIH0KICAgIGlmIChub2RlIGlzIGlyLlByb3BlcnR5U2V0KSB7CiAgICAgIHJldHVybiBnZXRTZXR0ZXJTZWxlY3Rvcihub2RlLm5hbWUpOwogICAgfQogICAgaWYgKG5vZGUgaXMgaXIuU3VwZXJQcm9wZXJ0eVNldCkgewogICAgICByZXR1cm4gZ2V0U2V0dGVyU2VsZWN0b3Iobm9kZS5uYW1lKTsKICAgIH0KICAgIGlmIChub2RlIGlzIGlyLkludm9jYXRpb25FeHByZXNzaW9uKSB7CiAgICAgIHJldHVybiBnZXRJbnZvY2F0aW9uU2VsZWN0b3Iobm9kZSk7CiAgICB9CiAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICJDYW4gb25seSBnZXQgdGhlIHNlbGVjdG9yIGZvciBhIHByb3BlcnR5IGdldCBvciBhbiBpbnZvY2F0aW9uOiAiCiAgICAgICAgIiR7bm9kZX0iKTsKICB9CgogIFNlbGVjdG9yIGdldEludm9jYXRpb25TZWxlY3Rvcihpci5JbnZvY2F0aW9uRXhwcmVzc2lvbiBpbnZvY2F0aW9uKSB7CiAgICBOYW1lIG5hbWUgPSBnZXROYW1lKGludm9jYXRpb24ubmFtZSk7CiAgICBTZWxlY3RvcktpbmQga2luZDsKICAgIGlmIChTZWxlY3Rvci5pc09wZXJhdG9yTmFtZShuYW1lLnRleHQpKSB7CiAgICAgIGlmIChuYW1lID09IE5hbWVzLklOREVYX05BTUUgfHwgbmFtZSA9PSBOYW1lcy5JTkRFWF9TRVRfTkFNRSkgewogICAgICAgIGtpbmQgPSBTZWxlY3RvcktpbmQuSU5ERVg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAga2luZCA9IFNlbGVjdG9yS2luZC5PUEVSQVRPUjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAga2luZCA9IFNlbGVjdG9yS2luZC5DQUxMOwogICAgfQoKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IGdldENhbGxTdHJ1Y3R1cmUoaW52b2NhdGlvbi5hcmd1bWVudHMpOwogICAgcmV0dXJuIG5ldyBTZWxlY3RvcihraW5kLCBuYW1lLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIFNlbGVjdG9yIGdldEdldHRlclNlbGVjdG9yKGlyLk5hbWUgaXJOYW1lKSB7CiAgICBOYW1lIG5hbWUgPSBuZXcgTmFtZSgKICAgICAgICBpck5hbWUubmFtZSwgaXJOYW1lLmlzUHJpdmF0ZSA/IGdldExpYnJhcnkoaXJOYW1lLmxpYnJhcnkpIDogbnVsbCk7CiAgICByZXR1cm4gbmV3IFNlbGVjdG9yLmdldHRlcihuYW1lKTsKICB9CgogIFNlbGVjdG9yIGdldFNldHRlclNlbGVjdG9yKGlyLk5hbWUgaXJOYW1lKSB7CiAgICBOYW1lIG5hbWUgPSBuZXcgTmFtZSgKICAgICAgICBpck5hbWUubmFtZSwgaXJOYW1lLmlzUHJpdmF0ZSA/IGdldExpYnJhcnkoaXJOYW1lLmxpYnJhcnkpIDogbnVsbCk7CiAgICByZXR1cm4gbmV3IFNlbGVjdG9yLnNldHRlcihuYW1lKTsKICB9CgogIC8vLyBMb29rcyB1cCBbdHlwZU5hbWVdIGZvciB1c2UgaW4gdGhlIHNwZWMtc3RyaW5nIG9mIGEgYEpTYCBjYWxsLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGlzIGluIFtuYXRpdmUuTmF0aXZlQmVoYXZpb3JdIGluc3RlYWQgb2YgY2FsbGluZwogIC8vIHRoZSBgRm9yZWlnblJlc29sdmVyYC4KICBUeXBlTG9va3VwIHR5cGVMb29rdXAoe2Jvb2wgcmVzb2x2ZUFzUmF3OiB0cnVlfSkgewogICAgcmV0dXJuIHJlc29sdmVBc1JhdwogICAgICAgID8gKF9jYWNoZWRUeXBlTG9va3VwUmF3ID8/PSBfdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IHRydWUpKQogICAgICAgIDogKF9jYWNoZWRUeXBlTG9va3VwRnVsbCA/Pz0gX3R5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiBmYWxzZSkpOwogIH0KCiAgVHlwZUxvb2t1cCBfY2FjaGVkVHlwZUxvb2t1cFJhdzsKICBUeXBlTG9va3VwIF9jYWNoZWRUeXBlTG9va3VwRnVsbDsKCiAgVHlwZUxvb2t1cCBfdHlwZUxvb2t1cCh7Ym9vbCByZXNvbHZlQXNSYXc6IHRydWV9KSB7CiAgICBib29sIGNhY2hlZE1heUxvb2t1cEluTWFpbjsKICAgIGJvb2wgbWF5TG9va3VwSW5NYWluKCkgewogICAgICB2YXIgbWFpblVyaSA9IGVsZW1lbnRFbnZpcm9ubWVudC5tYWluTGlicmFyeS5jYW5vbmljYWxVcmk7CiAgICAgIC8vIFRlc3RzIHBlcm1pdCBsb29rdXAgb3V0c2lkZSBvZiBkYXJ0OiBsaWJyYXJpZXMuCiAgICAgIHJldHVybiBtYWluVXJpLnBhdGguY29udGFpbnMoJ3Rlc3RzL2NvbXBpbGVyL2RhcnQyanNfbmF0aXZlJykgfHwKICAgICAgICAgIG1haW5VcmkucGF0aC5jb250YWlucygndGVzdHMvY29tcGlsZXIvZGFydDJqc19leHRyYScpOwogICAgfQoKICAgIERhcnRUeXBlIGxvb2t1cChTdHJpbmcgdHlwZU5hbWUsIHtib29sIHJlcXVpcmVkfSkgewogICAgICBEYXJ0VHlwZSBmaW5kSW5MaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgICAgIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBDbGFzcyhsaWJyYXJ5LCB0eXBlTmFtZSk7CiAgICAgICAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWxpZ24gc2VtYW50aWNzLgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFzUmF3CiAgICAgICAgICAgICAgICA/IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGNscykKICAgICAgICAgICAgICAgIDogZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBEYXJ0VHlwZSBmaW5kSW4oVXJpIHVyaSkgewogICAgICAgIHJldHVybiBmaW5kSW5MaWJyYXJ5KGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMaWJyYXJ5KHVyaSkpOwogICAgICB9CgogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBOYXJyb3cgdGhlIHNldCBvZiBsb29rdXBzIGJhc2VkIG9uIHRoZSBkZXBlbmRpbmcKICAgICAgLy8gbGlicmFyeS4KICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgbW9yZSByZXN1bHRzIHRvIGF2b2lkIHJlZHVuZGFudCBsb29rdXBzPwogICAgICBEYXJ0VHlwZSB0eXBlOwogICAgICBpZiAoY2FjaGVkTWF5TG9va3VwSW5NYWluID8/PSBtYXlMb29rdXBJbk1haW4oKSkgewogICAgICAgIHR5cGUgPz89IGZpbmRJbkxpYnJhcnkoZWxlbWVudEVudmlyb25tZW50Lm1haW5MaWJyYXJ5KTsKICAgICAgfQogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2NvcmUpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X19qc19oZWxwZXIpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X19pbnRlcmNlcHRvcnMpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfY29sbGVjdGlvbik7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfbWF0aCk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfaHRtbCk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfaHRtbF9jb21tb24pOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X3N2Zyk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfd2ViX2F1ZGlvKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF93ZWJfZ2wpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X3dlYl9zcWwpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2luZGV4ZWRfZGIpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X3R5cGVkX2RhdGEpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X19ydGkpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X21pcnJvcnMpOwogICAgICBpZiAodHlwZSA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsndGV4dCc6ICJUeXBlICckdHlwZU5hbWUnIG5vdCBmb3VuZC4ifSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CgogICAgcmV0dXJuIGxvb2t1cDsKICB9CgogIFN0cmluZyBfZ2V0U3RyaW5nQXJndW1lbnQoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlLCBpbnQgaW5kZXgpIHsKICAgIHJldHVybiBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsW2luZGV4XS5hY2NlcHQobmV3IFN0cmluZ2lmaWVyKCkpOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgdGhpcyBmb3IgbGF0ZXIgdXNlLgogIEBvdmVycmlkZQogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNDYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMiB8fAogICAgICAgIG5vZGUuYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgU3RyaW5nIHNwZWNTdHJpbmcgPSBfZ2V0U3RyaW5nQXJndW1lbnQobm9kZSwgMCk7CiAgICBpZiAoc3BlY1N0cmluZyA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19GSVJTVCk7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KCiAgICBTdHJpbmcgY29kZVN0cmluZyA9IF9nZXRTdHJpbmdBcmd1bWVudChub2RlLCAxKTsKICAgIGlmIChjb2RlU3RyaW5nID09IG51bGwpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX1NFQ09ORCk7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KCiAgICByZXR1cm4gTmF0aXZlQmVoYXZpb3Iub2ZKc0NhbGwoCiAgICAgICAgc3BlY1N0cmluZywKICAgICAgICBjb2RlU3RyaW5nLAogICAgICAgIHR5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiB0cnVlKSwKICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgIHJlcG9ydGVyLAogICAgICAgIGNvbW1vbkVsZW1lbnRzKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIHRoaXMgZm9yIGxhdGVyIHVzZS4KICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckpzQnVpbHRpbkNhbGwoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCAxKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiSlMgYnVpbHRpbiBleHByZXNzaW9uIGhhcyBubyB0eXBlLiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCAyKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiSlMgYnVpbHRpbiBpcyBtaXNzaW5nIG5hbWUuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIFN0cmluZyBzcGVjU3RyaW5nID0gX2dldFN0cmluZ0FyZ3VtZW50KG5vZGUsIDApOwogICAgaWYgKHNwZWNTdHJpbmcgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIHJldHVybiBOYXRpdmVCZWhhdmlvci5vZkpzQnVpbHRpbkNhbGwoCiAgICAgICAgc3BlY1N0cmluZywKICAgICAgICB0eXBlTG9va3VwKHJlc29sdmVBc1JhdzogdHJ1ZSksCiAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICByZXBvcnRlciwKICAgICAgICBjb21tb25FbGVtZW50cyk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSB0aGlzIGZvciBsYXRlciB1c2UuCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0VtYmVkZGVkR2xvYmFsQ2FsbCgKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCAxKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJKUyBlbWJlZGRlZCBnbG9iYWwgZXhwcmVzc2lvbiBoYXMgbm8gdHlwZS4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMikgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIkpTIGVtYmVkZGVkIGdsb2JhbCBpcyBtaXNzaW5nIG5hbWUuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA+IDIgfHwKICAgICAgICBub2RlLmFyZ3VtZW50cy5uYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJKUyBlbWJlZGRlZCBnbG9iYWwgaGFzIG1vcmUgdGhhbiAyIGFyZ3VtZW50cy4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgU3RyaW5nIHNwZWNTdHJpbmcgPSBfZ2V0U3RyaW5nQXJndW1lbnQobm9kZSwgMCk7CiAgICBpZiAoc3BlY1N0cmluZyA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiVW5leHBlY3RlZCBmaXJzdCBhcmd1bWVudC4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgcmV0dXJuIE5hdGl2ZUJlaGF2aW9yLm9mSnNFbWJlZGRlZEdsb2JhbENhbGwoCiAgICAgICAgc3BlY1N0cmluZywKICAgICAgICB0eXBlTG9va3VwKHJlc29sdmVBc1JhdzogdHJ1ZSksCiAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICByZXBvcnRlciwKICAgICAgICBjb21tb25FbGVtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGdldENvbnN0YW50VmFsdWUoaXIuRXhwcmVzc2lvbiBub2RlLAogICAgICB7Ym9vbCByZXF1aXJlQ29uc3RhbnQ6IHRydWUsIGJvb2wgaW1wbGljaXROdWxsOiBmYWxzZX0pIHsKICAgIGlmIChub2RlIGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbikgewogICAgICByZXR1cm4gX2NvbnN0YW50VmFsdWVmaWVyLnZpc2l0Q29uc3RhbnQobm9kZS5jb25zdGFudCk7CiAgICB9CgogICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50OwogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICBpZiAoIWltcGxpY2l0TnVsbCkgewogICAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAnTm8gZXhwcmVzc2lvbiBmb3IgY29uc3RhbnQuJyk7CiAgICAgIH0KICAgICAgY29uc3RhbnQgPSBuZXcgTnVsbENvbnN0YW50RXhwcmVzc2lvbigpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3RhbnQgPQogICAgICAgICAgbmV3IENvbnN0YW50aWZpZXIodGhpcywgcmVxdWlyZUNvbnN0YW50OiByZXF1aXJlQ29uc3RhbnQpLnZpc2l0KG5vZGUpOwogICAgfQogICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHsKICAgICAgaWYgKHJlcXVpcmVDb25zdGFudCkgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAnTm8gY29uc3RhbnQgZm9yICR7RGVidWdQcmludGVyLnByZXR0eVByaW50KG5vZGUpfScpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGNvbXB1dGVDb25zdGFudFZhbHVlKAogICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLCBjb25zdGFudCwKICAgICAgICByZXF1aXJlQ29uc3RhbnQ6IHJlcXVpcmVDb25zdGFudCk7CiAgICBpZiAoIXZhbHVlLmlzQ29uc3RhbnQgJiYgIXJlcXVpcmVDb25zdGFudCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIC8vLyBDb252ZXJ0cyBbYW5ub3RhdGlvbnNdIGludG8gYSBsaXN0IG9mIFtDb25zdGFudFZhbHVlXXMuCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXRNZXRhZGF0YShMaXN0PGlyLkV4cHJlc3Npb24+IGFubm90YXRpb25zKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgcmV0dXJuIGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwogICAgTGlzdDxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSA9IDxDb25zdGFudFZhbHVlPltdOwogICAgYW5ub3RhdGlvbnMuZm9yRWFjaCgoaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICAgIG1ldGFkYXRhLmFkZChnZXRDb25zdGFudFZhbHVlKG5vZGUpKTsKICAgIH0pOwogICAgcmV0dXJuIG1ldGFkYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0U3VwZXJOb1N1Y2hNZXRob2QoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICB3aGlsZSAoY2xzICE9IG51bGwpIHsKICAgICAgY2xzID0gZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKAogICAgICAgICAgY2xzLCBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKTsKICAgICAgaWYgKG1lbWJlciAhPSBudWxsICYmICFtZW1iZXIuaXNBYnN0cmFjdCkgewogICAgICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbikgewogICAgICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBtZW1iZXI7CiAgICAgICAgICBpZiAoZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID49IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBJZiBbbWVtYmVyXSBpcyBub3QgYSB2YWxpZCBgbm9TdWNoTWV0aG9kYCB0aGUgdGFyZ2V0IGlzCiAgICAgICAgLy8gYE9iamVjdC5zdXBlck5vU3VjaE1ldGhvZGAuCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoCiAgICAgICAgY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MsIElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8pOwogICAgYXNzZXJ0KGZ1bmN0aW9uICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoY2xzLCAiTm8gc3VwZXIgbm9TdWNoTWV0aG9kIGZvdW5kIGZvciBjbGFzcyAkY2xzLiIpKTsKICAgIHJldHVybiBmdW5jdGlvbjsKICB9CgogIFR5cGVWYXJpYWJsZUVudGl0eSBjcmVhdGVUeXBlVmFyaWFibGUoCiAgICAgIEVudGl0eSB0eXBlRGVjbGFyYXRpb24sIFN0cmluZyBuYW1lLCBpbnQgaW5kZXgpIHsKICAgIHJldHVybiBuZXcgSlR5cGVWYXJpYWJsZSh0eXBlRGVjbGFyYXRpb24sIG5hbWUsIGluZGV4KTsKICB9CgogIEpDb25zdHJ1Y3RvckJvZHkgY3JlYXRlQ29uc3RydWN0b3JCb2R5KAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSkgewogICAgcmV0dXJuIG5ldyBKQ29uc3RydWN0b3JCb2R5KGNvbnN0cnVjdG9yLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUpOwogIH0KCiAgSkdlbmVyYXRvckJvZHkgY3JlYXRlR2VuZXJhdG9yQm9keSgKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIERhcnRUeXBlIGVsZW1lbnRUeXBlKSB7CiAgICByZXR1cm4gbmV3IEpHZW5lcmF0b3JCb2R5KGZ1bmN0aW9uLCBlbGVtZW50VHlwZSk7CiAgfQoKICB2b2lkIGZvckVhY2hOZXN0ZWRDbG9zdXJlKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCB2b2lkIGYoRnVuY3Rpb25FbnRpdHkgY2xvc3VyZSkpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShtZW1iZXIpKTsKICAgIF9uZXN0ZWRDbG9zdXJlTWFwW21lbWJlcl0/LmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldE1lbWJlclRoaXNUeXBlKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBtZW1iZXJzLmdldERhdGEobWVtYmVyKS5nZXRNZW1iZXJUaGlzVHlwZSh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzRm9yTWVtYmVyKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVycy5nZXREYXRhKG1lbWJlcikuY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3M7CiAgfQoKICBib29sIGNoZWNrRmFtaWx5KEVudGl0eSBlbnRpdHkpIHsKICAgIGFzc2VydCgKICAgICAgICAnJGVudGl0eScuc3RhcnRzV2l0aChqc0VsZW1lbnRQcmVmaXgpLAogICAgICAgIGZhaWxlZEF0KGVudGl0eSwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZW50aXR5ICRlbnRpdHksIGV4cGVjdGVkIGZhbWlseSAkanNFbGVtZW50UHJlZml4LiIpKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3Bhbm5hYmxlIGdldFNwYW5uYWJsZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBpci5Ob2RlIG5vZGUpIHsKICAgIFNvdXJjZVNwYW4gc291cmNlU3BhbjsKICAgIGlmIChub2RlIGlzIGlyLlRyZWVOb2RlKSB7CiAgICAgIHNvdXJjZVNwYW4gPSBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKTsKICAgIH0KICAgIHNvdXJjZVNwYW4gPz89IGdldFNvdXJjZVNwYW4obWVtYmVyLCBudWxsKTsKICAgIHJldHVybiBzb3VyY2VTcGFuOwogIH0KCiAgSXRlcmFibGU8TGlicmFyeUVudGl0eT4gZ2V0IGxpYnJhcnlMaXN0SW50ZXJuYWwgewogICAgcmV0dXJuIGxpYnJhcnlNYXAudmFsdWVzOwogIH0KCiAgTGlicmFyeUVudGl0eSBnZXRMaWJyYXJ5SW50ZXJuYWwoaXIuTGlicmFyeSBub2RlLCBbSkxpYnJhcnlFbnYgZW52XSkgewogICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gbGlicmFyeU1hcFtub2RlXTsKICAgIGFzc2VydChsaWJyYXJ5ICE9IG51bGwsICJObyBsaWJyYXJ5IGVudGl0eSBmb3IgJG5vZGUiKTsKICAgIHJldHVybiBsaWJyYXJ5OwogIH0KCiAgQ2xhc3NFbnRpdHkgZ2V0Q2xhc3NJbnRlcm5hbChpci5DbGFzcyBub2RlLCBbSkNsYXNzRW52IGVudl0pIHsKICAgIENsYXNzRW50aXR5IGNscyA9IGNsYXNzTWFwW25vZGVdOwogICAgYXNzZXJ0KGNscyAhPSBudWxsLCAiTm8gY2xhc3MgZW50aXR5IGZvciAkbm9kZSIpOwogICAgcmV0dXJuIGNsczsKICB9CgogIEZpZWxkRW50aXR5IGdldEZpZWxkSW50ZXJuYWwoaXIuRmllbGQgbm9kZSkgewogICAgRmllbGRFbnRpdHkgZmllbGQgPSBmaWVsZE1hcFtub2RlXTsKICAgIGFzc2VydChmaWVsZCAhPSBudWxsLCAiTm8gZmllbGQgZW50aXR5IGZvciAkbm9kZSIpOwogICAgcmV0dXJuIGZpZWxkOwogIH0KCiAgRnVuY3Rpb25FbnRpdHkgZ2V0TWV0aG9kSW50ZXJuYWwoaXIuUHJvY2VkdXJlIG5vZGUpIHsKICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gbWV0aG9kTWFwW25vZGVdOwogICAgYXNzZXJ0KGZ1bmN0aW9uICE9IG51bGwsICJObyBmdW5jdGlvbiBlbnRpdHkgZm9yICRub2RlIik7CiAgICByZXR1cm4gZnVuY3Rpb247CiAgfQoKICBDb25zdHJ1Y3RvckVudGl0eSBnZXRDb25zdHJ1Y3RvckludGVybmFsKGlyLk1lbWJlciBub2RlKSB7CiAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yTWFwW25vZGVdOwogICAgYXNzZXJ0KGNvbnN0cnVjdG9yICE9IG51bGwsICJObyBjb25zdHJ1Y3RvciBlbnRpdHkgZm9yICRub2RlIik7CiAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgfQoKICBUeXBlVmFyaWFibGVFbnRpdHkgZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwoaXIuVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICBUeXBlVmFyaWFibGVFbnRpdHkgdHlwZVZhcmlhYmxlID0gdHlwZVZhcmlhYmxlTWFwW25vZGVdOwogICAgaWYgKHR5cGVWYXJpYWJsZSA9PSBudWxsKSB7CiAgICAgIGlmIChub2RlLnBhcmVudCBpcyBpci5GdW5jdGlvbk5vZGUpIHsKICAgICAgICBpci5GdW5jdGlvbk5vZGUgZnVuYyA9IG5vZGUucGFyZW50OwogICAgICAgIGludCBpbmRleCA9IGZ1bmMudHlwZVBhcmFtZXRlcnMuaW5kZXhPZihub2RlKTsKICAgICAgICBpZiAoZnVuYy5wYXJlbnQgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gZnVuYy5wYXJlbnQ7CiAgICAgICAgICBpci5DbGFzcyBjbHMgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKICAgICAgICAgIHR5cGVWYXJpYWJsZU1hcFtub2RlXSA9CiAgICAgICAgICAgICAgdHlwZVZhcmlhYmxlID0gZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwoY2xzLnR5cGVQYXJhbWV0ZXJzW2luZGV4XSk7CiAgICAgICAgfSBlbHNlIGlmIChmdW5jLnBhcmVudCBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICAgIGlyLlByb2NlZHVyZSBwcm9jZWR1cmUgPSBmdW5jLnBhcmVudDsKICAgICAgICAgIGlmIChwcm9jZWR1cmUua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgICAgICAgaXIuQ2xhc3MgY2xzID0gcHJvY2VkdXJlLmVuY2xvc2luZ0NsYXNzOwogICAgICAgICAgICB0eXBlVmFyaWFibGVNYXBbbm9kZV0gPSB0eXBlVmFyaWFibGUgPQogICAgICAgICAgICAgICAgZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwoY2xzLnR5cGVQYXJhbWV0ZXJzW2luZGV4XSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3NlcnQoCiAgICAgICAgdHlwZVZhcmlhYmxlICE9IG51bGwsCiAgICAgICAgIk5vIHR5cGUgdmFyaWFibGUgZW50aXR5IGZvciAkbm9kZSBvbiAiCiAgICAgICAgIiR7bm9kZS5wYXJlbnQgaXMgaXIuRnVuY3Rpb25Ob2RlID8gbm9kZS5wYXJlbnQucGFyZW50IDogbm9kZS5wYXJlbnR9Iik7CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlOwogIH0KCiAgVHlwZWRlZkVudGl0eSBnZXRUeXBlZGVmSW50ZXJuYWwoaXIuVHlwZWRlZiBub2RlKSB7CiAgICBUeXBlZGVmRW50aXR5IHR5cGVkZWYgPSB0eXBlZGVmTWFwW25vZGVdOwogICAgYXNzZXJ0KHR5cGVkZWYgIT0gbnVsbCwgIk5vIHR5cGVkZWYgZW50aXR5IGZvciAkbm9kZSIpOwogICAgcmV0dXJuIHR5cGVkZWY7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXRDb25zdHJ1Y3RvckJvZHkoaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBnZXRDb25zdHJ1Y3Rvcihub2RlKTsKICAgIHJldHVybiBfZ2V0Q29uc3RydWN0b3JCb2R5KGNvbnN0cnVjdG9yKTsKICB9CgogIEpDb25zdHJ1Y3RvckJvZHkgX2dldENvbnN0cnVjdG9yQm9keShJbmRleGVkQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICAgIEpDb25zdHJ1Y3RvckRhdGFJbXBsIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoY29uc3RydWN0b3IpOwogICAgaWYgKGRhdGEuY29uc3RydWN0b3JCb2R5ID09IG51bGwpIHsKICAgICAgLy8vIFRoZSBjb25zdHJ1Y3RvciBjYWxscyB0aGUgY29uc3RydWN0b3IgYm9keSB3aXRoIGFsbCBwYXJhbWV0ZXJzLgogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgcGFyYW1ldGVycyB0aGF0IGFyZSBub3QgdXNlZCBpbiB0aGUKICAgICAgLy8gIGNvbnN0cnVjdG9yIGJvZHkuCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPQogICAgICAgICAgX2dldFBhcmFtZXRlclN0cnVjdHVyZUZyb21GdW5jdGlvbk5vZGUoZGF0YS5ub2RlLmZ1bmN0aW9uKTsKCiAgICAgIEpDb25zdHJ1Y3RvckJvZHkgY29uc3RydWN0b3JCb2R5ID0KICAgICAgICAgIGNyZWF0ZUNvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3RvciwgcGFyYW1ldGVyU3RydWN0dXJlKTsKICAgICAgbWVtYmVycy5yZWdpc3RlcjxJbmRleGVkRnVuY3Rpb24sIEZ1bmN0aW9uRGF0YT4oCiAgICAgICAgICBjb25zdHJ1Y3RvckJvZHksCiAgICAgICAgICBuZXcgQ29uc3RydWN0b3JCb2R5RGF0YUltcGwoCiAgICAgICAgICAgICAgZGF0YS5ub2RlLAogICAgICAgICAgICAgIGRhdGEubm9kZS5mdW5jdGlvbiwKICAgICAgICAgICAgICBuZXcgU3BlY2lhbE1lbWJlckRlZmluaXRpb24oCiAgICAgICAgICAgICAgICAgIGRhdGEubm9kZSwgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHkpLAogICAgICAgICAgICAgIGRhdGEuc3RhdGljVHlwZXMpKTsKICAgICAgSW5kZXhlZENsYXNzIGNscyA9IGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzOwogICAgICBKQ2xhc3NFbnZJbXBsIGNsYXNzRW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhpcyBieSBvbmx5IGluY2x1ZGluZyBsaXZlIG1lbWJlcnMgaW4gdGhlCiAgICAgIC8vIGpzLW1vZGVsLgogICAgICBjbGFzc0Vudi5hZGRDb25zdHJ1Y3RvckJvZHkoY29uc3RydWN0b3JCb2R5KTsKICAgICAgbGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlci5yZWdpc3RlckNvbG9jYXRlZE1lbWJlcnMoCiAgICAgICAgICBjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JCb2R5KTsKICAgICAgZGF0YS5jb25zdHJ1Y3RvckJvZHkgPSBjb25zdHJ1Y3RvckJvZHk7CiAgICB9CiAgICByZXR1cm4gZGF0YS5jb25zdHJ1Y3RvckJvZHk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJEZWZpbml0aW9uIGdldE1lbWJlckRlZmluaXRpb24oTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIGdldE1lbWJlckRlZmluaXRpb25JbnRlcm5hbChtZW1iZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuTWVtYmVyIGdldE1lbWJlckNvbnRleHROb2RlKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlyLk1lbWJlciBnZXRQYXJlbnRNZW1iZXIoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuTWVtYmVyKSB7CiAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICB9CiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IGdldE1lbWJlckRlZmluaXRpb24obWVtYmVyKTsKICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgcmV0dXJuIGRlZmluaXRpb24ubm9kZTsKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsOgogICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUZpZWxkOgogICAgICBjYXNlIE1lbWJlcktpbmQuc2lnbmF0dXJlOgogICAgICBjYXNlIE1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keToKICAgICAgICByZXR1cm4gZ2V0UGFyZW50TWVtYmVyKGRlZmluaXRpb24ubm9kZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5leHBlY3RlZCBtZW1iZXIga2luZCAke2RlZmluaXRpb259Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0RlZmluaXRpb24gZ2V0Q2xhc3NEZWZpbml0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGdldENsYXNzRGVmaW5pdGlvbkludGVybmFsKGNscyk7CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIHBhcmFtZXRlciBvZiBbZnVuY3Rpb25dIHByb3ZpZGluZyB0aGUgdHlwZSBhbmQgbmFtZSBvZgogIC8vLyB0aGUgcGFyYW1ldGVyIGFuZCB0aGUgW2RlZmF1bHRWYWx1ZV0gaWYgdGhlIHBhcmFtZXRlciBpcyBvcHRpb25hbC4KICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoY292YXJpYW50IEluZGV4ZWRGdW5jdGlvbiBmdW5jdGlvbiwKICAgICAgdm9pZCBmKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSksCiAgICAgIHtib29sIGlzTmF0aXZlOiBmYWxzZX0pIHsKICAgIEZ1bmN0aW9uRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKGZ1bmN0aW9uKTsKICAgIGRhdGEuZm9yRWFjaFBhcmFtZXRlcih0aGlzLCBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUsIGYsCiAgICAgICAgaXNOYXRpdmU6IGlzTmF0aXZlKTsKICB9CgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yQm9keSgKICAgICAgSW5kZXhlZENsYXNzIGNscywgdm9pZCBmKENvbnN0cnVjdG9yQm9keUVudGl0eSBtZW1iZXIpKSB7CiAgICBKQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIGVudi5mb3JFYWNoQ29uc3RydWN0b3JCb2R5KGYpOwogIH0KCiAgdm9pZCBmb3JFYWNoSW5qZWN0ZWRDbGFzc01lbWJlcigKICAgICAgSW5kZXhlZENsYXNzIGNscywgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBfaW5qZWN0ZWRDbGFzc01lbWJlcnNbY2xzXT8uZm9yRWFjaChmKTsKICB9CgogIEpSZWNvcmRGaWVsZCBfY29uc3RydWN0UmVjb3JkRmllbGRFbnRyeSgKICAgICAgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSwKICAgICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwKICAgICAgQm94TG9jYWwgYm94TG9jYWwsCiAgICAgIE1hcDxTdHJpbmcsIE1lbWJlckVudGl0eT4gbWVtYmVyTWFwLAogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXApIHsKICAgIExvY2FsIGxvY2FsID0gbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogICAgSlJlY29yZEZpZWxkIGJveGVkRmllbGQgPQogICAgICAgIG5ldyBKUmVjb3JkRmllbGQobG9jYWwubmFtZSwgYm94TG9jYWwsIGlzQ29uc3Q6IHZhcmlhYmxlLmlzQ29uc3QpOwogICAgbWVtYmVycy5yZWdpc3RlcigKICAgICAgICBib3hlZEZpZWxkLAogICAgICAgIG5ldyBDbG9zdXJlRmllbGREYXRhKAogICAgICAgICAgICBuZXcgQ2xvc3VyZU1lbWJlckRlZmluaXRpb24oY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUodmFyaWFibGUpLAogICAgICAgICAgICAgICAgTWVtYmVyS2luZC5jbG9zdXJlRmllbGQsIHZhcmlhYmxlKSwKICAgICAgICAgICAgbWVtYmVyVGhpc1R5cGUpKTsKICAgIG1lbWJlck1hcFtib3hlZEZpZWxkLm5hbWVdID0gYm94ZWRGaWVsZDsKCiAgICByZXR1cm4gYm94ZWRGaWVsZDsKICB9CgogIC8vLyBNYWtlIGEgY29udGFpbmVyIGNvbnRyb2xsaW5nIGFjY2VzcyB0byByZWNvcmRzLCB0aGF0IGlzLCB2YXJpYWJsZXMgdGhhdAogIC8vLyBhcmUgYWNjZXNzZWQgaW4gZGlmZmVyZW50IHNjb3Blcy4gVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBjb250YWluZXIKICAvLy8gYW5kIHJldHVybnMgYSBtYXAgb2YgbG9jYWxzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlY29yZHMgY3JlYXRlZC4KICBAb3ZlcnJpZGUKICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gbWFrZVJlY29yZENvbnRhaW5lcigKICAgICAgS2VybmVsU2NvcGVJbmZvIGluZm8sIE1lbWJlckVudGl0eSBtZW1iZXIsIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCkgewogICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkRmllbGRzID0ge307CiAgICBpZiAoaW5mby5ib3hlZFZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIE5vZGVCb3ggYm94ID0gaW5mby5jYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yOwoKICAgICAgTWFwPFN0cmluZywgSW5kZXhlZE1lbWJlcj4gbWVtYmVyTWFwID0gPFN0cmluZywgSW5kZXhlZE1lbWJlcj57fTsKICAgICAgSlJlY29yZCBjb250YWluZXIgPSBuZXcgSlJlY29yZChtZW1iZXIubGlicmFyeSwgYm94Lm5hbWUpOwogICAgICBCb3hMb2NhbCBib3hMb2NhbCA9IG5ldyBCb3hMb2NhbChjb250YWluZXIpOwogICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoY29udGFpbmVyLCBjb25zdCA8RGFydFR5cGU+W10pOwogICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9IGNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGU7CiAgICAgIEpDbGFzc0RhdGEgY29udGFpbmVyRGF0YSA9IG5ldyBSZWNvcmRDbGFzc0RhdGEoCiAgICAgICAgICBuZXcgUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbihnZXRNZW1iZXJEZWZpbml0aW9uKG1lbWJlcikubG9jYXRpb24pLAogICAgICAgICAgdGhpc1R5cGUsCiAgICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgICBnZXRPcmRlcmVkVHlwZVNldChzdXBlcnR5cGUuZWxlbWVudCkuZXh0ZW5kQ2xhc3ModGhpc1R5cGUpKTsKICAgICAgY2xhc3Nlcy5yZWdpc3Rlcihjb250YWluZXIsIGNvbnRhaW5lckRhdGEsIG5ldyBSZWNvcmRFbnYobWVtYmVyTWFwKSk7CgogICAgICBJbnRlcmZhY2VUeXBlIG1lbWJlclRoaXNUeXBlID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzICE9IG51bGwKICAgICAgICAgID8gZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKG1lbWJlci5lbmNsb3NpbmdDbGFzcykKICAgICAgICAgIDogbnVsbDsKICAgICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIGluZm8uYm94ZWRWYXJpYWJsZXMpIHsKICAgICAgICBib3hlZEZpZWxkc1tsb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZSh2YXJpYWJsZSldID0KICAgICAgICAgICAgX2NvbnN0cnVjdFJlY29yZEZpZWxkRW50cnkoCiAgICAgICAgICAgICAgICBtZW1iZXJUaGlzVHlwZSwgdmFyaWFibGUsIGJveExvY2FsLCBtZW1iZXJNYXAsIGxvY2Fsc01hcCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBib3hlZEZpZWxkczsKICB9CgogIGJvb2wgX2lzSW5SZWNvcmQoCiAgICAgICAgICBMb2NhbCBsb2NhbCwgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlKSA9PgogICAgICByZWNvcmRGaWVsZHNWaXNpYmxlSW5TY29wZS5jb250YWluc0tleShsb2NhbCk7CgogIFBhcmFtZXRlclN0cnVjdHVyZSBfZ2V0UGFyYW1ldGVyU3RydWN0dXJlRnJvbUZ1bmN0aW9uTm9kZSgKICAgICAgaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlcnMgPSBub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgICBpbnQgcG9zaXRpb25hbFBhcmFtZXRlcnMgPSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGludCB0eXBlUGFyYW1ldGVycyA9IG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoOwogICAgTGlzdDxTdHJpbmc+IG5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMubWFwKChwKSA9PiBwLm5hbWUpLnRvTGlzdCgpLi5zb3J0KCk7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclN0cnVjdHVyZShyZXF1aXJlZFBhcmFtZXRlcnMsIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVycywgdHlwZVBhcmFtZXRlcnMpOwogIH0KCiAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mbyBjb25zdHJ1Y3RDbG9zdXJlQ2xhc3MoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBub2RlLAogICAgICBKTGlicmFyeSBlbmNsb3NpbmdMaWJyYXJ5LAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gcmVjb3JkRmllbGRzVmlzaWJsZUluU2NvcGUsCiAgICAgIEtlcm5lbFNjb3BlSW5mbyBpbmZvLAogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAsCiAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlLAogICAgICB7Ym9vbCBjcmVhdGVTaWduYXR1cmVNZXRob2R9KSB7CiAgICBJbnRlcmZhY2VUeXBlIG1lbWJlclRoaXNUeXBlID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzICE9IG51bGwKICAgICAgICA/IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShtZW1iZXIuZW5jbG9zaW5nQ2xhc3MpCiAgICAgICAgOiBudWxsOwogICAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgdHlwZVZhcmlhYmxlQWNjZXNzID0KICAgICAgICBtZW1iZXJzLmdldERhdGEobWVtYmVyKS5jbGFzc1R5cGVWYXJpYWJsZUFjY2VzczsKICAgIGlmICh0eXBlVmFyaWFibGVBY2Nlc3MgPT0gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MuaW5zdGFuY2VGaWVsZCkgewogICAgICAvLyBBIGNsb3N1cmUgaW4gYSBmaWVsZCBpbml0aWFsaXplciB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgaW4gdGhlCiAgICAgIC8vIGNvbnN0cnVjdG9yIGFuZCB0eXBlIHZhcmlhYmxlcyBhcmUgdGhlcmVmb3JlIGFjY2Vzc2VkIHRocm91Z2gKICAgICAgLy8gcGFyYW1ldGVycy4KICAgICAgdHlwZVZhcmlhYmxlQWNjZXNzID0gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucGFyYW1ldGVyOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSBfY29tcHV0ZUNsb3N1cmVOYW1lKG5vZGUpOwogICAgU291cmNlU3BhbiBsb2NhdGlvbiA9IGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpOwogICAgTWFwPFN0cmluZywgSW5kZXhlZE1lbWJlcj4gbWVtYmVyTWFwID0gPFN0cmluZywgSW5kZXhlZE1lbWJlcj57fTsKCiAgICBKQ2xhc3MgY2xhc3NFbnRpdHkgPSBuZXcgSkNsb3N1cmVDbGFzcyhlbmNsb3NpbmdMaWJyYXJ5LCBuYW1lKTsKICAgIC8vIENyZWF0ZSBhIGNsYXNzRGF0YSBhbmQgc2V0IHVwIHRoZSBpbnRlcmZhY2VzIGFuZCBzdWJjbGFzcwogICAgLy8gcmVsYXRpb25zaGlwcyB0aGF0IF9lbnN1cmVTdXBlcnR5cGVzIGFuZCBfZW5zdXJlVGhpc0FuZFJhd1R5cGUgYXJlIGRvaW5nCiAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoY2xhc3NFbnRpdHksIGNvbnN0IDxEYXJ0VHlwZT5bXSk7CiAgICBDbG9zdXJlQ2xhc3NEYXRhIGNsb3N1cmVEYXRhID0gbmV3IENsb3N1cmVDbGFzc0RhdGEoCiAgICAgICAgbmV3IENsb3N1cmVDbGFzc0RlZmluaXRpb24obG9jYXRpb24pLAogICAgICAgIHRoaXNUeXBlLAogICAgICAgIHN1cGVydHlwZSwKICAgICAgICBnZXRPcmRlcmVkVHlwZVNldChzdXBlcnR5cGUuZWxlbWVudCkuZXh0ZW5kQ2xhc3ModGhpc1R5cGUpKTsKICAgIGNsYXNzZXMucmVnaXN0ZXIoY2xhc3NFbnRpdHksIGNsb3N1cmVEYXRhLCBuZXcgQ2xvc3VyZUNsYXNzRW52KG1lbWJlck1hcCkpOwoKICAgIExvY2FsIGNsb3N1cmVFbnRpdHk7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbikgewogICAgICBpci5GdW5jdGlvbkRlY2xhcmF0aW9uIHBhcmVudCA9IG5vZGUucGFyZW50OwogICAgICBjbG9zdXJlRW50aXR5ID0gbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUocGFyZW50LnZhcmlhYmxlKTsKICAgIH0gZWxzZSBpZiAobm9kZS5wYXJlbnQgaXMgaXIuRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgIGNsb3N1cmVFbnRpdHkgPSBuZXcgQW5vbnltb3VzQ2xvc3VyZUxvY2FsKGNsYXNzRW50aXR5KTsKICAgIH0KCiAgICBJbmRleGVkRnVuY3Rpb24gY2FsbE1ldGhvZCA9IG5ldyBKQ2xvc3VyZUNhbGxNZXRob2QoY2xhc3NFbnRpdHksCiAgICAgICAgX2dldFBhcmFtZXRlclN0cnVjdHVyZUZyb21GdW5jdGlvbk5vZGUobm9kZSksIGdldEFzeW5jTWFya2VyKG5vZGUpKTsKICAgIF9uZXN0ZWRDbG9zdXJlTWFwCiAgICAgICAgLnB1dElmQWJzZW50KG1lbWJlciwgKCkgPT4gPEluZGV4ZWRGdW5jdGlvbj5bXSkKICAgICAgICAuYWRkKGNhbGxNZXRob2QpOwogICAgLy8gV2UgbmVlZCBjcmVhdGUgdGhlIHR5cGUgdmFyaWFibGUgaGVyZSAtIGJlZm9yZSB3ZSB0cnkgdG8gbWFrZSBsb2NhbAogICAgLy8gdmFyaWFibGVzIGZyb20gdGhlbSAoaW4gYEpzU2NvcGVJbmZvLmZyb21gIGNhbGxlZCB0aHJvdWdoCiAgICAvLyBgS2VybmVsQ2xvc3VyZUNsYXNzSW5mby5mcm9tU2NvcGVJbmZvYCBiZWxvdykuCiAgICBpbnQgaW5kZXggPSAwOwogICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICB0eXBlVmFyaWFibGVNYXBbdHlwZVBhcmFtZXRlcl0gPSB0eXBlVmFyaWFibGVzLnJlZ2lzdGVyKAogICAgICAgICAgY3JlYXRlVHlwZVZhcmlhYmxlKGNhbGxNZXRob2QsIHR5cGVQYXJhbWV0ZXIubmFtZSwgaW5kZXgpLAogICAgICAgICAgbmV3IEpUeXBlVmFyaWFibGVEYXRhKHR5cGVQYXJhbWV0ZXIpKTsKICAgICAgaW5kZXgrKzsKICAgIH0KCiAgICBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGNsb3N1cmVDbGFzc0luZm8gPQogICAgICAgIG5ldyBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvLmZyb21TY29wZUluZm8oCiAgICAgICAgICAgIGNsYXNzRW50aXR5LAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICA8TG9jYWwsIEpSZWNvcmRGaWVsZD57fSwKICAgICAgICAgICAgaW5mbywKICAgICAgICAgICAgbG9jYWxzTWFwLAogICAgICAgICAgICBjbG9zdXJlRW50aXR5LAogICAgICAgICAgICBpbmZvLmhhc1RoaXNMb2NhbAogICAgICAgICAgICAgICAgPyBuZXcgVGhpc0xvY2FsKGxvY2Fsc01hcC5jdXJyZW50TWVtYmVyLmVuY2xvc2luZ0NsYXNzKQogICAgICAgICAgICAgICAgOiBudWxsLAogICAgICAgICAgICB0aGlzKTsKICAgIF9idWlsZENsb3N1cmVDbGFzc0ZpZWxkcyhjbG9zdXJlQ2xhc3NJbmZvLCBtZW1iZXIsIG1lbWJlclRoaXNUeXBlLCBpbmZvLAogICAgICAgIGxvY2Fsc01hcCwgcmVjb3JkRmllbGRzVmlzaWJsZUluU2NvcGUsIG1lbWJlck1hcCk7CgogICAgaWYgKGNyZWF0ZVNpZ25hdHVyZU1ldGhvZCkgewogICAgICBfY29uc3RydWN0U2lnbmF0dXJlTWV0aG9kKGNsb3N1cmVDbGFzc0luZm8sIG1lbWJlck1hcCwgbm9kZSwKICAgICAgICAgIG1lbWJlclRoaXNUeXBlLCBsb2NhdGlvbiwgdHlwZVZhcmlhYmxlQWNjZXNzKTsKICAgIH0KCiAgICBjbG9zdXJlRGF0YS5jYWxsVHlwZSA9IGdldEZ1bmN0aW9uVHlwZShub2RlKTsKCiAgICBtZW1iZXJzLnJlZ2lzdGVyPEluZGV4ZWRGdW5jdGlvbiwgRnVuY3Rpb25EYXRhPigKICAgICAgICBjYWxsTWV0aG9kLAogICAgICAgIG5ldyBDbG9zdXJlRnVuY3Rpb25EYXRhKAogICAgICAgICAgICBuZXcgQ2xvc3VyZU1lbWJlckRlZmluaXRpb24oCiAgICAgICAgICAgICAgICBsb2NhdGlvbiwgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbCwgbm9kZS5wYXJlbnQpLAogICAgICAgICAgICBtZW1iZXJUaGlzVHlwZSwKICAgICAgICAgICAgY2xvc3VyZURhdGEuY2FsbFR5cGUsCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZUFjY2VzcykpOwogICAgbWVtYmVyTWFwW2NhbGxNZXRob2QubmFtZV0gPSBjbG9zdXJlQ2xhc3NJbmZvLmNhbGxNZXRob2QgPSBjYWxsTWV0aG9kOwogICAgcmV0dXJuIGNsb3N1cmVDbGFzc0luZm87CiAgfQoKICB2b2lkIF9idWlsZENsb3N1cmVDbGFzc0ZpZWxkcygKICAgICAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mbyBjbG9zdXJlQ2xhc3NJbmZvLAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBJbnRlcmZhY2VUeXBlIG1lbWJlclRoaXNUeXBlLAogICAgICBLZXJuZWxTY29wZUluZm8gaW5mbywKICAgICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwLAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gcmVjb3JkRmllbGRzVmlzaWJsZUluU2NvcGUsCiAgICAgIE1hcDxTdHJpbmcsIE1lbWJlckVudGl0eT4gbWVtYmVyTWFwKSB7CiAgICAvLyBUT0RPKGVmb3J0dW5hKTogTGltaXQgZmllbGQgbnVtYmVyIHVzYWdlIHRvIHdoZW4gd2UgbmVlZCB0byBkaXN0aW5ndWlzaAogICAgLy8gYmV0d2VlbiB0d28gdmFyaWFibGVzIHdpdGggdGhlIHNhbWUgbmFtZSBmcm9tIGRpZmZlcmVudCBzY29wZXMuCiAgICBpbnQgZmllbGROdW1iZXIgPSAwOwoKICAgIC8vIEZvciB0aGUgY2FwdHVyZWQgdmFyaWFibGVzIHRoYXQgYXJlIGJveGVkLCBlbnN1cmUgdGhpcyBjbG9zdXJlIGhhcyBhCiAgICAvLyBmaWVsZCB0byByZWZlcmVuY2UgdGhlIGJveC4gVGhpcyBwdXRzIHRoZSBib3hlcyBmaXJzdCBpbiB0aGUgY2xvc3VyZSBsaWtlCiAgICAvLyB0aGUgQVNUIGZyb250LWVuZCwgYnV0IG90aGVyd2lzZSB0aGVyZSBpcyBubyByZWFzb24gdG8gc2VwYXJhdGUgdGhpcyBsb29wCiAgICAvLyBmcm9tIHRoZSBvbmUgYmVsb3cuCiAgICAvLyBUT0RPKHJlZGVtcHRpb24pOiBNZXJnZSB0aGlzIGxvb3AgYW5kIHRoZSBmb2xsb3dpbmcuCgogICAgZm9yIChpci5Ob2RlIHZhcmlhYmxlIGluIGluZm8uZnJlZVZhcmlhYmxlcykgewogICAgICBpZiAodmFyaWFibGUgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICAgIExvY2FsIGNhcHR1cmVkTG9jYWwgPSBsb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgICAgaWYgKF9pc0luUmVjb3JkKGNhcHR1cmVkTG9jYWwsIHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlKSkgewogICAgICAgICAgYm9vbCBjb25zdHJ1Y3RlZEZpZWxkID0gX2NvbnN0cnVjdENsb3N1cmVGaWVsZEZvclJlY29yZCgKICAgICAgICAgICAgICBjYXB0dXJlZExvY2FsLAogICAgICAgICAgICAgIGNsb3N1cmVDbGFzc0luZm8sCiAgICAgICAgICAgICAgbWVtYmVyVGhpc1R5cGUsCiAgICAgICAgICAgICAgbWVtYmVyTWFwLAogICAgICAgICAgICAgIHZhcmlhYmxlLAogICAgICAgICAgICAgIHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlLAogICAgICAgICAgICAgIGZpZWxkTnVtYmVyKTsKICAgICAgICAgIGlmIChjb25zdHJ1Y3RlZEZpZWxkKSBmaWVsZE51bWJlcisrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIEFkZCBhIGZpZWxkIGZvciB0aGUgY2FwdHVyZWQgJ3RoaXMnLgogICAgaWYgKGluZm8udGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSkgewogICAgICBfY29uc3RydWN0Q2xvc3VyZUZpZWxkKAogICAgICAgICAgY2xvc3VyZUNsYXNzSW5mby50aGlzTG9jYWwsCiAgICAgICAgICBjbG9zdXJlQ2xhc3NJbmZvLAogICAgICAgICAgbWVtYmVyVGhpc1R5cGUsCiAgICAgICAgICBtZW1iZXJNYXAsCiAgICAgICAgICBnZXRDbGFzc0RlZmluaXRpb24obWVtYmVyLmVuY2xvc2luZ0NsYXNzKS5ub2RlLAogICAgICAgICAgdHJ1ZSwKICAgICAgICAgIGZhbHNlLAogICAgICAgICAgZmllbGROdW1iZXIpOwogICAgICBmaWVsZE51bWJlcisrOwogICAgfQoKICAgIGZvciAoaXIuTm9kZSB2YXJpYWJsZSBpbiBpbmZvLmZyZWVWYXJpYWJsZXMpIHsKICAgICAgLy8gTWFrZSBhIGNvcnJlc3BvbmRpbmcgZmllbGQgZW50aXR5IGluIHRoaXMgY2xvc3VyZSBjbGFzcyBmb3IgdGhlCiAgICAgIC8vIGZyZWUgdmFyaWFibGVzIGluIHRoZSBLZXJuZWxTY29wZUluZm8uZnJlZVZhcmlhYmxlLgogICAgICBpZiAodmFyaWFibGUgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICAgIExvY2FsIGNhcHR1cmVkTG9jYWwgPSBsb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgICAgaWYgKCFfaXNJblJlY29yZChjYXB0dXJlZExvY2FsLCByZWNvcmRGaWVsZHNWaXNpYmxlSW5TY29wZSkpIHsKICAgICAgICAgIF9jb25zdHJ1Y3RDbG9zdXJlRmllbGQoCiAgICAgICAgICAgICAgY2FwdHVyZWRMb2NhbCwKICAgICAgICAgICAgICBjbG9zdXJlQ2xhc3NJbmZvLAogICAgICAgICAgICAgIG1lbWJlclRoaXNUeXBlLAogICAgICAgICAgICAgIG1lbWJlck1hcCwKICAgICAgICAgICAgICB2YXJpYWJsZSwKICAgICAgICAgICAgICB2YXJpYWJsZS5pc0NvbnN0LAogICAgICAgICAgICAgIGZhbHNlLCAvLyBDbG9zdXJlIGZpZWxkIGlzIG5ldmVyIGFzc2lnbmVkIChvbmx5IGJveCBmaWVsZHMpLgogICAgICAgICAgICAgIGZpZWxkTnVtYmVyKTsKICAgICAgICAgIGZpZWxkTnVtYmVyKys7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHZhcmlhYmxlIGlzIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCkgewogICAgICAgIF9jb25zdHJ1Y3RDbG9zdXJlRmllbGQoCiAgICAgICAgICAgIGxvY2Fsc01hcC5nZXRMb2NhbFR5cGVWYXJpYWJsZSh2YXJpYWJsZS50eXBlLCB0aGlzKSwKICAgICAgICAgICAgY2xvc3VyZUNsYXNzSW5mbywKICAgICAgICAgICAgbWVtYmVyVGhpc1R5cGUsCiAgICAgICAgICAgIG1lbWJlck1hcCwKICAgICAgICAgICAgdmFyaWFibGUudHlwZS5wYXJhbWV0ZXIsCiAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgIGZhbHNlLAogICAgICAgICAgICBmaWVsZE51bWJlcik7CiAgICAgICAgZmllbGROdW1iZXIrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBmaWVsZCBub2RlIHR5cGU6ICR2YXJpYWJsZSIpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmVjb3JkcyBwb2ludCB0byBvbmUgb3IgbW9yZSBsb2NhbCB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gYW5vdGhlciBzY29wZQogIC8vLyB0aGF0IGFyZSBjYXB0dXJlZCBpbiBhIHNjb3BlLiBBY2Nlc3MgdG8gdGhvc2UgdmFyaWFibGVzIGdvZXMgZW50aXJlbHkKICAvLy8gdGhyb3VnaCB0aGUgcmVjb3JkIGNvbnRhaW5lciwgc28gd2Ugb25seSBjcmVhdGUgYSBmaWVsZCBmb3IgdGhlICpyZWNvcmQqCiAgLy8vIGhvbGRpbmcgW2NhcHR1cmVkTG9jYWxdIGFuZCBub3QgdGhlIGluZGl2aWR1YWwgbG9jYWwgdmFyaWFibGVzIGFjY2Vzc2VkCiAgLy8vIHRocm91Z2ggdGhlIHJlY29yZC4gUmVjb3JkcywgYnkgZGVmaW5pdGlvbiwgYXJlIG5vdCBtdXRhYmxlICh0aG91Z2ggdGhlCiAgLy8vIGxvY2FscyB0aGV5IGNvbnRhaW4gbWF5IGJlKS4gUmV0dXJucyBgdHJ1ZWAgaWYgd2UgY29uc3RydWN0ZWQgYSBuZXcgZmllbGQKICAvLy8gaW4gdGhlIGNsb3N1cmUgY2xhc3MuCiAgYm9vbCBfY29uc3RydWN0Q2xvc3VyZUZpZWxkRm9yUmVjb3JkKAogICAgICBMb2NhbCBjYXB0dXJlZExvY2FsLAogICAgICBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGNsb3N1cmVDbGFzc0luZm8sCiAgICAgIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGUsCiAgICAgIE1hcDxTdHJpbmcsIE1lbWJlckVudGl0eT4gbWVtYmVyTWFwLAogICAgICBpci5UcmVlTm9kZSBzb3VyY2VOb2RlLAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gcmVjb3JkRmllbGRzVmlzaWJsZUluU2NvcGUsCiAgICAgIGludCBmaWVsZE51bWJlcikgewogICAgSlJlY29yZEZpZWxkIHJlY29yZEZpZWxkID0gcmVjb3JkRmllbGRzVmlzaWJsZUluU2NvcGVbY2FwdHVyZWRMb2NhbF07CgogICAgLy8gRG9uJ3QgY29uc3RydWN0IGEgbmV3IGZpZWxkIGlmIHRoZSBib3ggdGhhdCBob2xkcyB0aGlzIGxvY2FsIGFscmVhZHkgaGFzCiAgICAvLyBhIGZpZWxkIGluIHRoZSBjbG9zdXJlIGNsYXNzLgogICAgaWYgKGNsb3N1cmVDbGFzc0luZm8ubG9jYWxUb0ZpZWxkTWFwLmNvbnRhaW5zS2V5KHJlY29yZEZpZWxkLmJveCkpIHsKICAgICAgY2xvc3VyZUNsYXNzSW5mby5ib3hlZFZhcmlhYmxlc1tjYXB0dXJlZExvY2FsXSA9IHJlY29yZEZpZWxkOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgRmllbGRFbnRpdHkgY2xvc3VyZUZpZWxkID0gbmV3IEpDbG9zdXJlRmllbGQoCiAgICAgICAgJ19ib3hfJGZpZWxkTnVtYmVyJywgY2xvc3VyZUNsYXNzSW5mbywgcmVjb3JkRmllbGQuYm94Lm5hbWUsCiAgICAgICAgaXNDb25zdDogdHJ1ZSwgaXNBc3NpZ25hYmxlOiBmYWxzZSk7CgogICAgbWVtYmVycy5yZWdpc3RlcjxJbmRleGVkRmllbGQsIEpGaWVsZERhdGE+KAogICAgICAgIGNsb3N1cmVGaWVsZCwKICAgICAgICBuZXcgQ2xvc3VyZUZpZWxkRGF0YSgKICAgICAgICAgICAgbmV3IENsb3N1cmVNZW1iZXJEZWZpbml0aW9uKAogICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoc291cmNlTm9kZSksCiAgICAgICAgICAgICAgICBNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZCwKICAgICAgICAgICAgICAgIHNvdXJjZU5vZGUpLAogICAgICAgICAgICBtZW1iZXJUaGlzVHlwZSkpOwogICAgbWVtYmVyTWFwW2Nsb3N1cmVGaWVsZC5uYW1lXSA9IGNsb3N1cmVGaWVsZDsKICAgIGNsb3N1cmVDbGFzc0luZm8ubG9jYWxUb0ZpZWxkTWFwW3JlY29yZEZpZWxkLmJveF0gPSBjbG9zdXJlRmllbGQ7CiAgICBjbG9zdXJlQ2xhc3NJbmZvLmJveGVkVmFyaWFibGVzW2NhcHR1cmVkTG9jYWxdID0gcmVjb3JkRmllbGQ7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgX2NvbnN0cnVjdFNpZ25hdHVyZU1ldGhvZCgKICAgICAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mbyBjbG9zdXJlQ2xhc3NJbmZvLAogICAgICBNYXA8U3RyaW5nLCBNZW1iZXJFbnRpdHk+IG1lbWJlck1hcCwKICAgICAgaXIuRnVuY3Rpb25Ob2RlIGNsb3N1cmVTb3VyY2VOb2RlLAogICAgICBJbnRlcmZhY2VUeXBlIG1lbWJlclRoaXNUeXBlLAogICAgICBTb3VyY2VTcGFuIGxvY2F0aW9uLAogICAgICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyB0eXBlVmFyaWFibGVBY2Nlc3MpIHsKICAgIEZ1bmN0aW9uRW50aXR5IHNpZ25hdHVyZU1ldGhvZCA9CiAgICAgICAgbmV3IEpTaWduYXR1cmVNZXRob2QoY2xvc3VyZUNsYXNzSW5mby5jbG9zdXJlQ2xhc3NFbnRpdHkpOwogICAgbWVtYmVycy5yZWdpc3RlcjxJbmRleGVkRnVuY3Rpb24sIEZ1bmN0aW9uRGF0YT4oCiAgICAgICAgc2lnbmF0dXJlTWV0aG9kLAogICAgICAgIG5ldyBTaWduYXR1cmVGdW5jdGlvbkRhdGEoCiAgICAgICAgICAgIG5ldyBTcGVjaWFsTWVtYmVyRGVmaW5pdGlvbigKICAgICAgICAgICAgICAgIGNsb3N1cmVTb3VyY2VOb2RlLnBhcmVudCwgTWVtYmVyS2luZC5zaWduYXR1cmUpLAogICAgICAgICAgICBtZW1iZXJUaGlzVHlwZSwKICAgICAgICAgICAgY2xvc3VyZVNvdXJjZU5vZGUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZUFjY2VzcykpOwogICAgbWVtYmVyTWFwW3NpZ25hdHVyZU1ldGhvZC5uYW1lXSA9CiAgICAgICAgY2xvc3VyZUNsYXNzSW5mby5zaWduYXR1cmVNZXRob2QgPSBzaWduYXR1cmVNZXRob2Q7CiAgfQoKICB2b2lkIF9jb25zdHJ1Y3RDbG9zdXJlRmllbGQoCiAgICAgIExvY2FsIGNhcHR1cmVkTG9jYWwsCiAgICAgIEtlcm5lbENsb3N1cmVDbGFzc0luZm8gY2xvc3VyZUNsYXNzSW5mbywKICAgICAgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSwKICAgICAgTWFwPFN0cmluZywgTWVtYmVyRW50aXR5PiBtZW1iZXJNYXAsCiAgICAgIGlyLlRyZWVOb2RlIHNvdXJjZU5vZGUsCiAgICAgIGJvb2wgaXNDb25zdCwKICAgICAgYm9vbCBpc0Fzc2lnbmFibGUsCiAgICAgIGludCBmaWVsZE51bWJlcikgewogICAgRmllbGRFbnRpdHkgY2xvc3VyZUZpZWxkID0gbmV3IEpDbG9zdXJlRmllbGQoCiAgICAgICAgX2dldENsb3N1cmVWYXJpYWJsZU5hbWUoY2FwdHVyZWRMb2NhbC5uYW1lLCBmaWVsZE51bWJlciksCiAgICAgICAgY2xvc3VyZUNsYXNzSW5mbywKICAgICAgICBjYXB0dXJlZExvY2FsLm5hbWUsCiAgICAgICAgaXNDb25zdDogaXNDb25zdCwKICAgICAgICBpc0Fzc2lnbmFibGU6IGlzQXNzaWduYWJsZSk7CgogICAgbWVtYmVycy5yZWdpc3RlcjxJbmRleGVkRmllbGQsIEpGaWVsZERhdGE+KAogICAgICAgIGNsb3N1cmVGaWVsZCwKICAgICAgICBuZXcgQ2xvc3VyZUZpZWxkRGF0YSgKICAgICAgICAgICAgbmV3IENsb3N1cmVNZW1iZXJEZWZpbml0aW9uKAogICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoc291cmNlTm9kZSksCiAgICAgICAgICAgICAgICBNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZCwKICAgICAgICAgICAgICAgIHNvdXJjZU5vZGUpLAogICAgICAgICAgICBtZW1iZXJUaGlzVHlwZSkpOwogICAgbWVtYmVyTWFwW2Nsb3N1cmVGaWVsZC5uYW1lXSA9IGNsb3N1cmVGaWVsZDsKICAgIGNsb3N1cmVDbGFzc0luZm8ubG9jYWxUb0ZpZWxkTWFwW2NhcHR1cmVkTG9jYWxdID0gY2xvc3VyZUZpZWxkOwogIH0KCiAgLy8gUmV0dXJucyBhIG5vbi11bmlxdWUgbmFtZSBmb3IgdGhlIGdpdmVuIGNsb3N1cmUgZWxlbWVudC4KICBTdHJpbmcgX2NvbXB1dGVDbG9zdXJlTmFtZShpci5UcmVlTm9kZSB0cmVlTm9kZSkgewogICAgdmFyIHBhcnRzID0gPFN0cmluZz5bXTsKICAgIC8vIEZpcnN0IGFub255bW91cyBpcyBjYWxsZWQgJ2Nsb3N1cmUnLCBvdXRlciBvbmVzIGNhbGxlZCAnJyB0byBnaXZlIGEKICAgIC8vIGNvbXBvdW5kIG5hbWUgd2hlcmUgaW5jcmVhc2luZyBuZXN0aW5nIGxldmVsIGNvcnJlc3BvbmRzIHRvIGV4dHJhCiAgICAvLyB1bmRlcnNjb3Jlcy4KICAgIHZhciBhbm9ueW1vdXMgPSAnY2xvc3VyZSc7CiAgICBpci5UcmVlTm9kZSBjdXJyZW50ID0gdHJlZU5vZGU7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaW1wbGlmeSBjb21wdXRlZCBuYW1lcy4KICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgdmFyIG5vZGUgPSBjdXJyZW50OwogICAgICBpZiAobm9kZSBpcyBpci5GdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICBwYXJ0cy5hZGQoYW5vbnltb3VzKTsKICAgICAgICBhbm9ueW1vdXMgPSAnJzsKICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IG5vZGUudmFyaWFibGUubmFtZTsKICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmIG5hbWUgIT0gIiIpIHsKICAgICAgICAgIHBhcnRzLmFkZCh1dGlscy5vcGVyYXRvck5hbWVUb0lkZW50aWZpZXIobmFtZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYXJ0cy5hZGQoYW5vbnltb3VzKTsKICAgICAgICAgIGFub255bW91cyA9ICcnOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkNsYXNzKSB7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBEbyBzb21ldGhpbmcgd2l0aCBhYnN0cmFjdGVkIG1peGluIHR5cGUgbmFtZXMgbGlrZSAnXiNVMCcuCiAgICAgICAgcGFydHMuYWRkKG5vZGUubmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICBpZiAobm9kZS5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkgewogICAgICAgICAgcGFydHMuYWRkKHV0aWxzLnJlY29uc3RydWN0Q29uc3RydWN0b3JOYW1lKGdldE1lbWJlcihub2RlKSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYXJ0cy5hZGQodXRpbHMub3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyKG5vZGUubmFtZS5uYW1lKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgICBwYXJ0cy5hZGQodXRpbHMucmVjb25zdHJ1Y3RDb25zdHJ1Y3Rvck5hbWUoZ2V0TWVtYmVyKG5vZGUpKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50OwogICAgfQogICAgcmV0dXJuIHBhcnRzLnJldmVyc2VkLmpvaW4oJ18nKTsKICB9CgogIC8vLyBHZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgW2lkXXRoIGNsb3N1cmUgZmllbGQsIHdpdGggcHJvcG9zZWQgbmFtZQogIC8vLyBbbmFtZV0uCiAgLy8vCiAgLy8vIFRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiBbQ2xvc3VyZUZpZWxkRWxlbWVudF1zLCBhbmQgbXVzdAogIC8vLyB0aGVyZWZvcmUgYmUgdW5pcXVlIHRvIGF2b2lkIGJyZWFraW5nIGFuIGludmFyaWFudCBpbiB0aGUgZWxlbWVudCBtb2RlbAogIC8vLyAoY2xhc3NlcyBjYW5ub3QgZGVjbGFyZSBtdWx0aXBsZSBmaWVsZHMgd2l0aCB0aGUgc2FtZSBuYW1lKS4KICAvLy8KICAvLy8gQWxzbywgdGhlIG5hbWVzIHNob3VsZCBiZSBkaXN0aW5jdCBmcm9tIHJlYWwgZmllbGQgbmFtZXMgdG8gcHJldmVudAogIC8vLyBjbGFzaGVzIHdpdGggc2VsZWN0b3JzIGZvciB0aG9zZSBmaWVsZHMuCiAgLy8vCiAgLy8vIFRoZXNlIG5hbWVzIGFyZSBub3QgdXNlZCBpbiBnZW5lcmF0ZWQgY29kZSwganVzdCBhcyBlbGVtZW50IG5hbWUuCiAgU3RyaW5nIF9nZXRDbG9zdXJlVmFyaWFibGVOYW1lKFN0cmluZyBuYW1lLCBpbnQgaWQpIHsKICAgIHJldHVybiAiX2NhcHR1cmVkXyR7bmFtZX1fJGlkIjsKICB9CgogIEBvdmVycmlkZQogIEpHZW5lcmF0b3JCb2R5IGdldEdlbmVyYXRvckJvZHkoY292YXJpYW50IEluZGV4ZWRGdW5jdGlvbiBmdW5jdGlvbikgewogICAgSkdlbmVyYXRvckJvZHkgZ2VuZXJhdG9yQm9keSA9IF9nZW5lcmF0b3JCb2RpZXNbZnVuY3Rpb25dOwogICAgaWYgKGdlbmVyYXRvckJvZHkgPT0gbnVsbCkgewogICAgICBGdW5jdGlvbkRhdGEgZnVuY3Rpb25EYXRhID0gbWVtYmVycy5nZXREYXRhKGZ1bmN0aW9uKTsKICAgICAgaXIuVHJlZU5vZGUgbm9kZSA9IGZ1bmN0aW9uRGF0YS5kZWZpbml0aW9uLm5vZGU7CiAgICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlID0KICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKGZ1bmN0aW9uKTsKICAgICAgZ2VuZXJhdG9yQm9keSA9IGNyZWF0ZUdlbmVyYXRvckJvZHkoZnVuY3Rpb24sIGVsZW1lbnRUeXBlKTsKICAgICAgbWVtYmVycy5yZWdpc3RlcjxJbmRleGVkRnVuY3Rpb24sIEZ1bmN0aW9uRGF0YT4oCiAgICAgICAgICBnZW5lcmF0b3JCb2R5LAogICAgICAgICAgbmV3IEdlbmVyYXRvckJvZHlGdW5jdGlvbkRhdGEoZnVuY3Rpb25EYXRhLAogICAgICAgICAgICAgIG5ldyBTcGVjaWFsTWVtYmVyRGVmaW5pdGlvbihub2RlLCBNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHkpKSk7CgogICAgICBpZiAoZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oc3JhKTogSW50ZWdyYXRlIHRoaXMgd2l0aCBDbGFzc0VudkltcGwuYWRkQ29uc3RydWN0b3JCb2R5ID8KICAgICAgICAoX2luamVjdGVkQ2xhc3NNZW1iZXJzW2Z1bmN0aW9uLmVuY2xvc2luZ0NsYXNzXSA/Pz0gPEluZGV4ZWRNZW1iZXI+W10pCiAgICAgICAgICAgIC5hZGQoZ2VuZXJhdG9yQm9keSk7CiAgICAgIH0KICAgICAgbGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlci5yZWdpc3RlckNvbG9jYXRlZE1lbWJlcnMoCiAgICAgICAgICBnZW5lcmF0b3JCb2R5LmZ1bmN0aW9uLCBnZW5lcmF0b3JCb2R5KTsKICAgICAgX2dlbmVyYXRvckJvZGllc1tmdW5jdGlvbl0gPSBnZW5lcmF0b3JCb2R5OwogICAgfQogICAgcmV0dXJuIGdlbmVyYXRvckJvZHk7CiAgfQp9CgpjbGFzcyBKc0VsZW1lbnRFbnZpcm9ubWVudCBleHRlbmRzIEVsZW1lbnRFbnZpcm9ubWVudAogICAgaW1wbGVtZW50cyBKRWxlbWVudEVudmlyb25tZW50IHsKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwoKICBKc0VsZW1lbnRFbnZpcm9ubWVudCh0aGlzLmVsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXQgZHluYW1pY1R5cGUgPT4gY29uc3QgRHluYW1pY1R5cGUoKTsKCiAgQG92ZXJyaWRlCiAgTGlicmFyeUVudGl0eSBnZXQgbWFpbkxpYnJhcnkgPT4gZWxlbWVudE1hcC5fbWFpbkxpYnJhcnk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBtYWluRnVuY3Rpb24gPT4gZWxlbWVudE1hcC5fbWFpbkZ1bmN0aW9uOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBnZXQgbGlicmFyaWVzID0+IGVsZW1lbnRNYXAubGlicmFyeUxpc3RJbnRlcm5hbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldExpYnJhcnlOYW1lKExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldExpYnJhcnlOYW1lKGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFRoaXNUeXBlKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFJhd1R5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5fZ2V0UmF3VHlwZShjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0dlbmVyaWNDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBnZXRUaGlzVHlwZShjbHMpLnR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNNaXhpbkFwcGxpY2F0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2lzTWl4aW5BcHBsaWNhdGlvbihjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2lzVW5uYW1lZE1peGluQXBwbGljYXRpb24oY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdXBlck1peGluQXBwbGljYXRpb24oQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5faXNTdXBlck1peGluQXBwbGljYXRpb24oY2xzKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldEVmZmVjdGl2ZU1peGluQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBpZiAoIWlzTWl4aW5BcHBsaWNhdGlvbihjbHMpKSByZXR1cm4gbnVsbDsKICAgIGRvIHsKICAgICAgY2xzID0gZWxlbWVudE1hcC5nZXRBcHBsaWVkTWl4aW4oY2xzKTsKICAgIH0gd2hpbGUgKGlzTWl4aW5BcHBsaWNhdGlvbihjbHMpKTsKICAgIHJldHVybiBjbHM7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChUeXBlVmFyaWFibGVFbnRpdHkgdHlwZVZhcmlhYmxlKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRUeXBlVmFyaWFibGVCb3VuZCh0eXBlVmFyaWFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZVZhcmlhYmxlRGVmYXVsdFR5cGUoVHlwZVZhcmlhYmxlRW50aXR5IHR5cGVWYXJpYWJsZSkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldFR5cGVWYXJpYWJsZURlZmF1bHRUeXBlKHR5cGVWYXJpYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgIENsYXNzRW50aXR5IGNscywgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5fZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5fZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKGZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEZ1bmN0aW9uQXN5bmNPclN5bmNTdGFyRWxlbWVudFR5cGUoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIC8vIFRPRE8oc3JhKTogU2hvdWxkIGJlIGdldHRpbmcgdGhlIERhcnRUeXBlIGZyb20gdGhlIG5vZGUuCiAgICBEYXJ0VHlwZSByZXR1cm5UeXBlID0gZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uKS5yZXR1cm5UeXBlOwogICAgcmV0dXJuIGdldEFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKGZ1bmN0aW9uLmFzeW5jTWFya2VyLCByZXR1cm5UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKAogICAgICBBc3luY01hcmtlciBhc3luY01hcmtlciwgRGFydFR5cGUgcmV0dXJuVHlwZSkgewogICAgc3dpdGNoIChhc3luY01hcmtlcikgewogICAgICBjYXNlIEFzeW5jTWFya2VyLlNZTkM6CiAgICAgICAgcmV0dXJuIHJldHVyblR5cGU7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU1lOQ19TVEFSOgogICAgICAgIGlmIChyZXR1cm5UeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICAgIGlmIChyZXR1cm5UeXBlLmVsZW1lbnQgPT0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50cy5pdGVyYWJsZUNsYXNzKSB7CiAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLnR5cGVBcmd1bWVudHMuZmlyc3Q7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBkeW5hbWljVHlwZTsKICAgICAgY2FzZSBBc3luY01hcmtlci5BU1lOQzoKICAgICAgICBpZiAocmV0dXJuVHlwZSBpcyBGdXR1cmVPclR5cGUpIHJldHVybiByZXR1cm5UeXBlLnR5cGVBcmd1bWVudDsKICAgICAgICBpZiAocmV0dXJuVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBpZiAocmV0dXJuVHlwZS5lbGVtZW50ID09IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMuZnV0dXJlQ2xhc3MpIHsKICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGUudHlwZUFyZ3VtZW50cy5maXJzdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGR5bmFtaWNUeXBlOwogICAgICBjYXNlIEFzeW5jTWFya2VyLkFTWU5DX1NUQVI6CiAgICAgICAgaWYgKHJldHVyblR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgaWYgKHJldHVyblR5cGUuZWxlbWVudCA9PSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLnN0cmVhbUNsYXNzKSB7CiAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLnR5cGVBcmd1bWVudHMuZmlyc3Q7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBkeW5hbWljVHlwZTsKICAgIH0KICAgIGFzc2VydChmYWxzZSwgJ1VuZXhwZWN0ZWQgbWFya2VyICR7YXN5bmNNYXJrZXJ9Jyk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEZpZWxkVHlwZShGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldEZpZWxkVHlwZShmaWVsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0TG9jYWxGdW5jdGlvblR5cGUoY292YXJpYW50IEtMb2NhbEZ1bmN0aW9uIGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gZnVuY3Rpb24uZnVuY3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VW5hbGlhc2VkVHlwZShEYXJ0VHlwZSB0eXBlKSA9PiB0eXBlOwoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBsb29rdXBDb25zdHJ1Y3RvcihDbGFzc0VudGl0eSBjbHMsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IGVsZW1lbnRNYXAubG9va3VwQ29uc3RydWN0b3IoY2xzLCBuYW1lKTsKICAgIGlmIChjb25zdHJ1Y3RvciA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJUaGUgY29uc3RydWN0b3IgJyRuYW1lJyB3YXMgbm90IGZvdW5kIGluIGNsYXNzICcke2Nscy5uYW1lfScgIgogICAgICAgICAgImluIGxpYnJhcnkgJHtjbHMubGlicmFyeS5jYW5vbmljYWxVcml9LiIpOwogICAgfQogICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZSwgYm9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBlbGVtZW50TWFwLmxvb2t1cENsYXNzTWVtYmVyKGNscywgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgaWYgKG1lbWJlciA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIHRocm93IGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiVGhlIG1lbWJlciAnJG5hbWUnIHdhcyBub3QgZm91bmQgaW4gJHtjbHMubmFtZX0uIik7CiAgICB9CiAgICByZXR1cm4gbWVtYmVyOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0U3VwZXJDbGFzcyhDbGFzc0VudGl0eSBjbHMsCiAgICAgIHtib29sIHNraXBVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbnM6IGZhbHNlfSkgewogICAgYXNzZXJ0KGVsZW1lbnRNYXAuY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gZWxlbWVudE1hcC5nZXRTdXBlclR5cGUoY2xzKT8uZWxlbWVudDsKICAgIGlmIChza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zKSB7CiAgICAgIHdoaWxlIChzdXBlcmNsYXNzICE9IG51bGwgJiYKICAgICAgICAgIGVsZW1lbnRNYXAuX2lzVW5uYW1lZE1peGluQXBwbGljYXRpb24oc3VwZXJjbGFzcykpIHsKICAgICAgICBzdXBlcmNsYXNzID0gZWxlbWVudE1hcC5nZXRTdXBlclR5cGUoc3VwZXJjbGFzcyk/LmVsZW1lbnQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdXBlcmNsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoU3VwZXJ0eXBlKENsYXNzRW50aXR5IGNscywgdm9pZCBmKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaFN1cGVydHlwZShjbHMsIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTG9jYWxDbGFzc01lbWJlcihDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXIoCiAgICAgIENsYXNzRW50aXR5IGNscywgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBlbGVtZW50TWFwLmZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyKGNscywgZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDbGFzc01lbWJlcigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgZGVjbGFyZXIsIE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoQ2xhc3NNZW1iZXIoY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hDb25zdHJ1Y3RvcihjbHMsIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3JCb2R5KAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICBlbGVtZW50TWFwLmZvckVhY2hDb25zdHJ1Y3RvckJvZHkoY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaE5lc3RlZENsb3N1cmUoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIHZvaWQgZihGdW5jdGlvbkVudGl0eSBjbG9zdXJlKSkgewogICAgZWxlbWVudE1hcC5mb3JFYWNoTmVzdGVkQ2xvc3VyZShtZW1iZXIsIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTGlicmFyeU1lbWJlcigKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hMaWJyYXJ5TWVtYmVyKGxpYnJhcnksIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cExpYnJhcnlNZW1iZXIoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZSwgYm9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBlbGVtZW50TWFwLmxvb2t1cExpYnJhcnlNZW1iZXIobGlicmFyeSwgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgaWYgKG1lbWJlciA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiVGhlIG1lbWJlciAnJHtuYW1lfScgd2FzIG5vdCBmb3VuZCBpbiBsaWJyYXJ5ICcke2xpYnJhcnkubmFtZX0nLiIpOwogICAgfQogICAgcmV0dXJuIG1lbWJlcjsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGxvb2t1cENsYXNzKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pIHsKICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnRNYXAubG9va3VwQ2xhc3MobGlicmFyeSwgbmFtZSk7CiAgICBpZiAoY2xzID09IG51bGwgJiYgcmVxdWlyZWQpIHsKICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJUaGUgY2xhc3MgJyRuYW1lJyAgd2FzIG5vdCBmb3VuZCBpbiBsaWJyYXJ5ICcke2xpYnJhcnkubmFtZX0nLiIpOwogICAgfQogICAgcmV0dXJuIGNsczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENsYXNzKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgdm9pZCBmKENsYXNzRW50aXR5IGNscykpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hDbGFzcyhsaWJyYXJ5LCBmKTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgbG9va3VwTGlicmFyeShVcmkgdXJpLCB7Ym9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBlbGVtZW50TWFwLmxvb2t1cExpYnJhcnkodXJpKTsKICAgIGlmIChsaWJyYXJ5ID09IG51bGwgJiYgcmVxdWlyZWQpIHsKICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlRoZSBsaWJyYXJ5ICckdXJpJyB3YXMgbm90IGZvdW5kLiIpOwogICAgfQogICAgcmV0dXJuIGxpYnJhcnk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRW51bUNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgYXNzZXJ0KGVsZW1lbnRNYXAuY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGNsYXNzRGF0YSA9IGVsZW1lbnRNYXAuY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICByZXR1cm4gY2xhc3NEYXRhLmlzRW51bUNsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoUGFyYW1ldGVyKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLAogICAgICB2b2lkIGYoRGFydFR5cGUgdHlwZSwgU3RyaW5nIG5hbWUsIENvbnN0YW50VmFsdWUgZGVmYXVsdFZhbHVlKSkgewogICAgZWxlbWVudE1hcC5mb3JFYWNoUGFyYW1ldGVyKGZ1bmN0aW9uLCBmLAogICAgICAgIGlzTmF0aXZlOiBlbGVtZW50TWFwLm5hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIoZnVuY3Rpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFBhcmFtZXRlckFzTG9jYWwoR2xvYmFsTG9jYWxzTWFwIGdsb2JhbExvY2Fsc01hcCwKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIHZvaWQgZihMb2NhbCBwYXJhbWV0ZXIpKSB7CiAgICBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckFzTG9jYWwoZ2xvYmFsTG9jYWxzTWFwLCBlbGVtZW50TWFwLCBmdW5jdGlvbiwKICAgICAgICAoTG9jYWwgcGFyYW1ldGVyLCB7Ym9vbCBpc0VsaWRlZH0pIHsKICAgICAgaWYgKCFpc0VsaWRlZCkgewogICAgICAgIGYocGFyYW1ldGVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hJbnN0YW5jZUZpZWxkKAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDbGFzc0VudGl0eSBkZWNsYXJlciwgRmllbGRFbnRpdHkgZmllbGQpKSB7CiAgICBmb3JFYWNoQ2xhc3NNZW1iZXIoY2xzLCAoQ2xhc3NFbnRpdHkgZGVjbGFyZXIsIE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmIG1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgZihkZWNsYXJlciwgbWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hEaXJlY3RJbnN0YW5jZUZpZWxkKENsYXNzRW50aXR5IGNscywgdm9pZCBmKEZpZWxkRW50aXR5IGZpZWxkKSkgewogICAgLy8gVE9ETyhzcmEpOiBBZGQgRWxlbWVudEVudmlyb25tZW50LmZvckVhY2hEaXJlY3RJbnN0YW5jZUZpZWxkIG9yCiAgICAvLyBwYXJhbWV0ZXJpemUgW2ZvckVhY2hJbnN0YW5jZUZpZWxkXSB0byBmaWx0ZXIgbWVtYmVycyB0byBhdm9pZCBhCiAgICAvLyBwb3RlbnRpYWxseSBPKG5eMikgc2NhbiBvZiB0aGUgc3VwZXJjbGFzc2VzLgogICAgZm9yRWFjaENsYXNzTWVtYmVyKGNscywgKENsYXNzRW50aXR5IGRlY2xhcmVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlmIChkZWNsYXJlciAhPSBjbHMpIHJldHVybjsKICAgICAgaWYgKCFtZW1iZXIuaXNGaWVsZCkgcmV0dXJuOwogICAgICBpZiAoIW1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm47CiAgICAgIGYobWVtYmVyKTsKICAgIH0pOwogIH0KfQoKLy8vIFtCZWhhdmlvckJ1aWxkZXJdIGZvciBrZXJuZWwgYmFzZWQgZWxlbWVudHMuCmNsYXNzIEpzQmVoYXZpb3JCdWlsZGVyIGV4dGVuZHMgQmVoYXZpb3JCdWlsZGVyIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50OwogIEBvdmVycmlkZQogIGZpbmFsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlQmFzaWNEYXRhOwogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKCiAgSnNCZWhhdmlvckJ1aWxkZXIodGhpcy5lbGVtZW50RW52aXJvbm1lbnQsIHRoaXMuY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMubmF0aXZlQmFzaWNEYXRhLCB0aGlzLnJlcG9ydGVyLCB0aGlzLl9vcHRpb25zKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgPT4KICAgICAgX29wdGlvbnMudHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnM7Cn0KCi8vLyBDb25zdGFudCBlbnZpcm9ubWVudCBtYXBwaW5nIFtDb25zdGFudEV4cHJlc3Npb25dcyB0byBbQ29uc3RhbnRWYWx1ZV1zIHVzaW5nCi8vLyBbX0V2YWx1YXRpb25FbnZpcm9ubWVudF0gZm9yIHRoZSBldmFsdWF0aW9uLgpjbGFzcyBKc0NvbnN0YW50RW52aXJvbm1lbnQgaW1wbGVtZW50cyBDb25zdGFudEVudmlyb25tZW50IHsKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKICBmaW5hbCBFbnZpcm9ubWVudCBfZW52aXJvbm1lbnQ7CgogIE1hcDxDb25zdGFudEV4cHJlc3Npb24sIENvbnN0YW50VmFsdWU+IF92YWx1ZU1hcCA9CiAgICAgIDxDb25zdGFudEV4cHJlc3Npb24sIENvbnN0YW50VmFsdWU+e307CgogIEpzQ29uc3RhbnRFbnZpcm9ubWVudCh0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9lbnZpcm9ubWVudCk7CgogIENvbnN0YW50VmFsdWUgX2dldENvbnN0YW50VmFsdWUoCiAgICAgIFNwYW5uYWJsZSBzcGFubmFibGUsIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICB7Ym9vbCBjb25zdGFudFJlcXVpcmVkfSkgewogICAgcmV0dXJuIF92YWx1ZU1hcC5wdXRJZkFic2VudChleHByZXNzaW9uLCAoKSB7CiAgICAgIHJldHVybiBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBKc0V2YWx1YXRpb25FbnZpcm9ubWVudCgKICAgICAgICAgIF9lbGVtZW50TWFwLCBfZW52aXJvbm1lbnQsIHNwYW5uYWJsZSwKICAgICAgICAgIGNvbnN0YW50UmVxdWlyZWQ6IGNvbnN0YW50UmVxdWlyZWQpKTsKICAgIH0pOwogIH0KfQoKLy8vIEV2YWx1YXRpb24gZW52aXJvbm1lbnQgdXNlZCBmb3IgY29tcHV0aW5nIFtDb25zdGFudFZhbHVlXXMgZm9yCi8vLyBrZXJuZWwgYmFzZWQgW0NvbnN0YW50RXhwcmVzc2lvbl1zLgpjbGFzcyBKc0V2YWx1YXRpb25FbnZpcm9ubWVudCBleHRlbmRzIEV2YWx1YXRpb25FbnZpcm9ubWVudEJhc2UgewogIGZpbmFsIEpzS2VybmVsVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwogIGZpbmFsIEVudmlyb25tZW50IF9lbnZpcm9ubWVudDsKCiAgSnNFdmFsdWF0aW9uRW52aXJvbm1lbnQoCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX2Vudmlyb25tZW50LCBTcGFubmFibGUgc3Bhbm5hYmxlLAogICAgICB7Ym9vbCBjb25zdGFudFJlcXVpcmVkfSkKICAgICAgOiBzdXBlcihzcGFubmFibGUsIGNvbnN0YW50UmVxdWlyZWQ6IGNvbnN0YW50UmVxdWlyZWQpOwoKICBAb3ZlcnJpZGUKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIERhcnRUeXBlcyBnZXQgdHlwZXMgPT4gX2VsZW1lbnRNYXAudHlwZXM7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHN1YnN0QnlDb250ZXh0KERhcnRUeXBlIGJhc2UsIEludGVyZmFjZVR5cGUgdGFyZ2V0KSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuc3Vic3RCeUNvbnRleHQoYmFzZSwgdGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50Q29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3JDb25zdGFudChDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLl9nZXRDb25zdHJ1Y3RvckNvbnN0YW50KGNvbnN0cnVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRGaWVsZENvbnN0YW50KEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuX2dldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKGZpZWxkKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRMb2NhbENvbnN0YW50KExvY2FsIGxvY2FsKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCJfRXZhbHVhdGlvbkVudmlyb25tZW50LmdldExvY2FsQ29uc3RhbnQiKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyByZWFkRnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2Vudmlyb25tZW50LnZhbHVlT2YobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEaWFnbm9zdGljUmVwb3J0ZXIgZ2V0IHJlcG9ydGVyID0+IF9lbGVtZW50TWFwLnJlcG9ydGVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBlbmFibGVBc3NlcnRpb25zID0+IF9lbGVtZW50TWFwLm9wdGlvbnMuZW5hYmxlVXNlckFzc2VydGlvbnM7Cn0KCi8vLyBbRW50aXR5TG9va3VwXSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIGRlc2VyaWFsaXplIFtKc0tlcm5lbFRvRWxlbWVudE1hcF0uCi8vLwovLy8gU2luY2UgZGF0YSBvYmplY3RzIGFuZCBlbnZpcm9ubWVudHMgYXJlIHJlZ2lzdGVyZWQgdG9nZXRoZXIgd2l0aCB0aGVpcgovLy8gZW50aXR5IHdlIG5lZWQgdG8gaGF2ZSBhIHNlcGFyYXRlIGxvb2t1cC1ieS1pbmRleCBtZWNoYW5pc20gdG8gYWxsb3cgZm9yCi8vLyBpbmRleC1iYXNlZCByZWZlcmVuY2Ugd2l0aGluIGRhdGEgb2JqZWN0cyBhbmQgZW52aXJvbm1lbnRzLgpjbGFzcyBfRW50aXR5TG9va3VwIGltcGxlbWVudHMgRW50aXR5TG9va3VwIHsKICBmaW5hbCBNYXA8aW50LCBKTGlicmFyeT4gX2xpYnJhcmllcyA9IHt9OwogIGZpbmFsIE1hcDxpbnQsIEpDbGFzcz4gX2NsYXNzZXMgPSB7fTsKICBmaW5hbCBNYXA8aW50LCBKVHlwZWRlZj4gX3R5cGVkZWZzID0ge307CiAgZmluYWwgTWFwPGludCwgSk1lbWJlcj4gX21lbWJlcnMgPSB7fTsKICBmaW5hbCBNYXA8aW50LCBKVHlwZVZhcmlhYmxlPiBfdHlwZVZhcmlhYmxlcyA9IHt9OwoKICB2b2lkIHJlZ2lzdGVyTGlicmFyeShpbnQgaW5kZXgsIEpMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGFzc2VydCghX2xpYnJhcmllcy5jb250YWluc0tleShpbmRleCksCiAgICAgICAgIkxpYnJhcnkgZm9yIGluZGV4ICRpbmRleCBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIik7CiAgICBfbGlicmFyaWVzW2luZGV4XSA9IGxpYnJhcnk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ2xhc3MoaW50IGluZGV4LCBKQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoIV9jbGFzc2VzLmNvbnRhaW5zS2V5KGluZGV4KSwKICAgICAgICAiQ2xhc3MgZm9yIGluZGV4ICRpbmRleCBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIik7CiAgICBfY2xhc3Nlc1tpbmRleF0gPSBjbHM7CiAgfQoKICB2b2lkIHJlZ2lzdGVyVHlwZWRlZihpbnQgaW5kZXgsIEpUeXBlZGVmIHR5cGVkZWYpIHsKICAgIGFzc2VydCghX3R5cGVkZWZzLmNvbnRhaW5zS2V5KGluZGV4KSwKICAgICAgICAiVHlwZWRlZiBmb3IgaW5kZXggJGluZGV4IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4iKTsKICAgIF90eXBlZGVmc1tpbmRleF0gPSB0eXBlZGVmOwogIH0KCiAgdm9pZCByZWdpc3Rlck1lbWJlcihpbnQgaW5kZXgsIEpNZW1iZXIgbWVtYmVyKSB7CiAgICBhc3NlcnQoIV9tZW1iZXJzLmNvbnRhaW5zS2V5KGluZGV4KSwKICAgICAgICAiTWVtYmVyIGZvciBpbmRleCAkaW5kZXggaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiIpOwogICAgX21lbWJlcnNbaW5kZXhdID0gbWVtYmVyOwogIH0KCiAgdm9pZCByZWdpc3RlclR5cGVWYXJpYWJsZShpbnQgaW5kZXgsIEpUeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlKSB7CiAgICBhc3NlcnQoIV90eXBlVmFyaWFibGVzLmNvbnRhaW5zS2V5KGluZGV4KSwKICAgICAgICAiVHlwZSB2YXJpYWJsZSBmb3IgaW5kZXggJGluZGV4IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4iKTsKICAgIF90eXBlVmFyaWFibGVzW2luZGV4XSA9IHR5cGVWYXJpYWJsZTsKICB9CgogIHZvaWQgZm9yRWFjaExpYnJhcnkodm9pZCBmKGludCBpbmRleCwgSkxpYnJhcnkgbGlicmFyeSkpIHsKICAgIF9saWJyYXJpZXMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgZm9yRWFjaENsYXNzKHZvaWQgZihpbnQgaW5kZXgsIEpDbGFzcyBjbHMpKSB7CiAgICBfY2xhc3Nlcy5mb3JFYWNoKGYpOwogIH0KCiAgdm9pZCBmb3JFYWNoVHlwZWRlZih2b2lkIGYoaW50IGluZGV4LCBKVHlwZWRlZiB0eXBlZGVmKSkgewogICAgX3R5cGVkZWZzLmZvckVhY2goZik7CiAgfQoKICB2b2lkIGZvckVhY2hNZW1iZXIodm9pZCBmKGludCBpbmRleCwgSk1lbWJlciBtZW1iZXIpKSB7CiAgICBfbWVtYmVycy5mb3JFYWNoKGYpOwogIH0KCiAgdm9pZCBmb3JFYWNoVHlwZVZhcmlhYmxlKHZvaWQgZihpbnQgaW5kZXgsIEpUeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlKSkgewogICAgX3R5cGVWYXJpYWJsZXMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRMaWJyYXJ5IGdldExpYnJhcnlCeUluZGV4KGludCBpbmRleCkgewogICAgSW5kZXhlZExpYnJhcnkgbGlicmFyeSA9IF9saWJyYXJpZXNbaW5kZXhdOwogICAgYXNzZXJ0KGxpYnJhcnkgIT0gbnVsbCwgIk5vIGxpYnJhcnkgZm91bmQgZm9yIGluZGV4ICRpbmRleCIpOwogICAgcmV0dXJuIGxpYnJhcnk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkQ2xhc3MgZ2V0Q2xhc3NCeUluZGV4KGludCBpbmRleCkgewogICAgSW5kZXhlZENsYXNzIGNscyA9IF9jbGFzc2VzW2luZGV4XTsKICAgIGFzc2VydChjbHMgIT0gbnVsbCwgIk5vIGNsYXNzIGZvdW5kIGZvciBpbmRleCAkaW5kZXgiKTsKICAgIHJldHVybiBjbHM7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkVHlwZWRlZiBnZXRUeXBlZGVmQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYgPSBfdHlwZWRlZnNbaW5kZXhdOwogICAgYXNzZXJ0KHR5cGVkZWYgIT0gbnVsbCwgIk5vIHR5cGVkZWYgZm91bmQgZm9yIGluZGV4ICRpbmRleCIpOwogICAgcmV0dXJuIHR5cGVkZWY7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkTWVtYmVyIGdldE1lbWJlckJ5SW5kZXgoaW50IGluZGV4KSB7CiAgICBJbmRleGVkTWVtYmVyIG1lbWJlciA9IF9tZW1iZXJzW2luZGV4XTsKICAgIGFzc2VydChtZW1iZXIgIT0gbnVsbCwgIk5vIG1lbWJlciBmb3VuZCBmb3IgaW5kZXggJGluZGV4Iik7CiAgICByZXR1cm4gbWVtYmVyOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZFR5cGVWYXJpYWJsZSBnZXRUeXBlVmFyaWFibGVCeUluZGV4KGludCBpbmRleCkgewogICAgSW5kZXhlZFR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgPSBfdHlwZVZhcmlhYmxlc1tpbmRleF07CiAgICBhc3NlcnQodHlwZVZhcmlhYmxlICE9IG51bGwsICJObyB0eXBlIHZhcmlhYmxlIGZvdW5kIGZvciBpbmRleCAkaW5kZXgiKTsKICAgIHJldHVybiB0eXBlVmFyaWFibGU7CiAgfQp9CgovLy8gW0VudGl0eUxvb2t1cF0gaW1wbGVtZW50YXRpb24gZm9yIGFuIGZ1bGx5IGJ1aWx0IFtKc0tlcm5lbFRvRWxlbWVudE1hcF0uCmNsYXNzIENsb3NlZEVudGl0eUxvb2t1cCBpbXBsZW1lbnRzIEVudGl0eUxvb2t1cCB7CiAgZmluYWwgSnNLZXJuZWxUb0VsZW1lbnRNYXAgX2VsZW1lbnRNYXA7CgogIENsb3NlZEVudGl0eUxvb2t1cCh0aGlzLl9lbGVtZW50TWFwKTsKCiAgQG92ZXJyaWRlCiAgSW5kZXhlZFR5cGVWYXJpYWJsZSBnZXRUeXBlVmFyaWFibGVCeUluZGV4KGludCBpbmRleCkgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLnR5cGVWYXJpYWJsZXMuZ2V0RW50aXR5KGluZGV4KTsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRNZW1iZXIgZ2V0TWVtYmVyQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC5tZW1iZXJzLmdldEVudGl0eShpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkVHlwZWRlZiBnZXRUeXBlZGVmQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC50eXBlZGVmcy5nZXRFbnRpdHkoaW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZENsYXNzIGdldENsYXNzQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC5jbGFzc2VzLmdldEVudGl0eShpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkTGlicmFyeSBnZXRMaWJyYXJ5QnlJbmRleChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC5saWJyYXJpZXMuZ2V0RW50aXR5KGluZGV4KTsKICB9Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIHNlcmlhbGl6YXRpb24gb2YgJ2xhdGUgbWVtYmVycycsIHRoYXQgaXMsIG1lbWJlcnMgbm9ybWFsbHkKLy8vIGNyZWF0ZWQgb24gZGVtYW5kLCBsaWtlIGNvbnN0cnVjdG9yIGJvZGllcyBhbmQgZ2VuZXJhdG9yIGJvZGllcy4KZW51bSBMYXRlTWVtYmVyS2luZCB7CiAgY29uc3RydWN0b3JCb2R5LAogIGdlbmVyYXRvckJvZHksCn0KCi8vLyBFbnRpdHkgcmVhZGVyIHRoYXQgc3VwcG9ydHMgbWVtYmVyIGVudGl0aWVzIG5vcm1hbGx5IGNyZWF0ZWQgb24tZGVtYW5kLCBsaWtlCi8vLyBjb25zdHJ1Y3RvciBib2RpZXMgYW5kIGdlbmVyYXRvciBib2RpZXMuCi8vLwovLy8gVGhlIHN1cHBvcnQgZW5jb2RpbmcgY29ycmVzcG9uZHMgdG8gdGhlIGVuY29kaW5nIGdlbmVyYXRlZCBieSB0aGUKLy8vIFtDbG9zZWRFbnRpdHlXcml0ZXJdLgpjbGFzcyBDbG9zZWRFbnRpdHlSZWFkZXIgZXh0ZW5kcyBFbnRpdHlSZWFkZXIgewogIGZpbmFsIEpzS2VybmVsVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwoKICBDbG9zZWRFbnRpdHlSZWFkZXIodGhpcy5fZWxlbWVudE1hcCk7CgogIEBvdmVycmlkZQogIEluZGV4ZWRNZW1iZXIgcmVhZE1lbWJlckZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCkgewogICAgaW50IGluZGV4ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGlmIChpbmRleCA9PSAwKSB7CiAgICAgIHJldHVybiBfcmVhZExhdGVNZW1iZXJGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGVudGl0eUxvb2t1cCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZW50aXR5TG9va3VwLmdldE1lbWJlckJ5SW5kZXgoaW5kZXggLSAxKTsKICAgIH0KICB9CgogIEluZGV4ZWRNZW1iZXIgX3JlYWRMYXRlTWVtYmVyRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbnRpdHlMb29rdXAgZW50aXR5TG9va3VwKSB7CiAgICBMYXRlTWVtYmVyS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKExhdGVNZW1iZXJLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBMYXRlTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgSW5kZXhlZENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgICAgICByZXR1cm4gX2VsZW1lbnRNYXAuX2dldENvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3Rvcik7CiAgICAgIGNhc2UgTGF0ZU1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keToKICAgICAgICBJbmRleGVkRnVuY3Rpb24gZnVuY3Rpb24gPSBzb3VyY2UucmVhZE1lbWJlcigpOwogICAgICAgIHJldHVybiBfZWxlbWVudE1hcC5nZXRHZW5lcmF0b3JCb2R5KGZ1bmN0aW9uKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIGxhdGUgbWVtYmVyIGtpbmQ6ICRraW5kLiIpOwogIH0KfQoKLy8vIEVudGl0eSB3cml0ZXIgdGhhdCBzdXBwb3J0cyBtZW1iZXIgZW50aXRpZXMgbm9ybWFsbHkgY3JlYXRlZCBvbi1kZW1hbmQsIGxpa2UKLy8vIGNvbnN0cnVjdG9yIGJvZGllcyBhbmQgZ2VuZXJhdG9yIGJvZGllcy4KLy8vCi8vLyBUaGUgZ2VuZXJhdGVkIGVuY29kaW5nIGNvcnJlc3BvbmRzIHRvIHRoZSBlbmNvZGluZyByZWFkIGJ5IHRoZQovLy8gW0Nsb3NlZEVudGl0eVJlYWRlcl0uCmNsYXNzIENsb3NlZEVudGl0eVdyaXRlciBleHRlbmRzIEVudGl0eVdyaXRlciB7CiAgZmluYWwgaW50IF9lYXJseU1lbWJlckluZGV4TGltaXQ7CgogIGZpbmFsIEpzS2VybmVsVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwoKICBDbG9zZWRFbnRpdHlXcml0ZXIodGhpcy5fZWxlbWVudE1hcCwgdGhpcy5fZWFybHlNZW1iZXJJbmRleExpbWl0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU1lbWJlclRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSW5kZXhlZE1lbWJlciB2YWx1ZSkgewogICAgaWYgKHZhbHVlLm1lbWJlckluZGV4ID49IF9lYXJseU1lbWJlckluZGV4TGltaXQpIHsKICAgICAgc2luay53cml0ZUludCgwKTsKICAgICAgX3dyaXRlTGF0ZU1lbWJlclRvRGF0YVNpbmsoc2luaywgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUludCh2YWx1ZS5tZW1iZXJJbmRleCArIDEpOwogICAgfQogIH0KCiAgdm9pZCBfd3JpdGVMYXRlTWVtYmVyVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBJbmRleGVk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YXJ0JzsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnOwppbXBvcnQgJy4uL2RpYWdub3N0aWNzL2RpYWdub3N0aWNfbGlzdGVuZXIuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXR5X3V0aWxzLmRhcnQnIGFzIHV0aWxzOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2Vudmlyb25tZW50LmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19lbWl0dGVyL3NvcnRlci5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbm9fc3VjaF9tZXRob2RfcmVnaXN0cnkuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvbG9jYWxzLmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3Nfc2V0LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2Z1bmN0aW9uX3NldC5kYXJ0JyBzaG93IEZ1bmN0aW9uU2V0OwppbXBvcnQgJy4uL3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcF9pbXBsLmRhcnQnOwppbXBvcnQgJ2xvY2Fscy5kYXJ0JzsKCmNsYXNzIEpzQ2xvc2VkV29ybGQgaW1wbGVtZW50cyBKQ2xvc2VkV29ybGQgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Nsb3NlZC13b3JsZCc7CgogIEBvdmVycmlkZQogIGZpbmFsIE5hdGl2ZURhdGEgbmF0aXZlRGF0YTsKICBAb3ZlcnJpZGUKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgaW50ZXJjZXB0b3JEYXRhOwogIEBvdmVycmlkZQogIGZpbmFsIEJhY2tlbmRVc2FnZSBiYWNrZW5kVXNhZ2U7CiAgQG92ZXJyaWRlCiAgZmluYWwgTm9TdWNoTWV0aG9kRGF0YSBub1N1Y2hNZXRob2REYXRhOwoKICBGdW5jdGlvblNldCBfYWxsRnVuY3Rpb25zOwoKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IG1peGluVXNlczsKICBNYXA8Q2xhc3NFbnRpdHksIExpc3Q8Q2xhc3NFbnRpdHk+PiBfbGl2ZU1peGluVXNlczsKCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzOwoKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIE1hcDxDbGFzc0VudGl0eSwgYm9vbD4+IF9zdWJ0eXBlQ292ZXJlZEJ5Q2FjaGUgPQogICAgICA8Q2xhc3NFbnRpdHksIE1hcDxDbGFzc0VudGl0eSwgYm9vbD4+e307CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhbiB0aGlzIGJlIGRlcml2ZWQgZnJvbSBbQ2xhc3NTZXRdcz8KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGltcGxlbWVudGVkQ2xhc3NlczsKCiAgZmluYWwgU2V0PE1lbWJlckVudGl0eT4gbGl2ZUluc3RhbmNlTWVtYmVyczsKCiAgLy8vIE1lbWJlcnMgdGhhdCBhcmUgd3JpdHRlbiBlaXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBhIHNldHRlciBzZWxlY3Rvci4KICBmaW5hbCBTZXQ8TWVtYmVyRW50aXR5PiBhc3NpZ25lZEluc3RhbmNlTWVtYmVyczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBsaXZlTmF0aXZlQ2xhc3NlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU2V0PE1lbWJlckVudGl0eT4gcHJvY2Vzc2VkTWVtYmVyczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHk7CgogIGZpbmFsIEpzS2VybmVsVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CiAgQG92ZXJyaWRlCiAgZmluYWwgUnVudGltZVR5cGVzTmVlZCBydGlOZWVkOwogIEFic3RyYWN0VmFsdWVEb21haW4gX2Fic3RyYWN0VmFsdWVEb21haW47CiAgQG92ZXJyaWRlCiAgZmluYWwgSkZpZWxkQW5hbHlzaXMgZmllbGRBbmFseXNpczsKICBAb3ZlcnJpZGUKICBmaW5hbCBBbm5vdGF0aW9uc0RhdGEgYW5ub3RhdGlvbnNEYXRhOwogIEBvdmVycmlkZQogIGZpbmFsIEdsb2JhbExvY2Fsc01hcCBnbG9iYWxMb2NhbHNNYXA7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xvc3VyZURhdGEgY2xvc3VyZURhdGFMb29rdXA7CiAgQG92ZXJyaWRlCiAgZmluYWwgT3V0cHV0VW5pdERhdGEgb3V0cHV0VW5pdERhdGE7CiAgU29ydGVyIF9zb3J0ZXI7CgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlckFjY2Vzcz4gbWVtYmVyQWNjZXNzOwoKICBKc0Nsb3NlZFdvcmxkKAogICAgICB0aGlzLmVsZW1lbnRNYXAsCiAgICAgIHRoaXMubmF0aXZlRGF0YSwKICAgICAgdGhpcy5pbnRlcmNlcHRvckRhdGEsCiAgICAgIHRoaXMuYmFja2VuZFVzYWdlLAogICAgICB0aGlzLnJ0aU5lZWQsCiAgICAgIHRoaXMuZmllbGRBbmFseXNpcywKICAgICAgdGhpcy5ub1N1Y2hNZXRob2REYXRhLAogICAgICB0aGlzLmltcGxlbWVudGVkQ2xhc3NlcywKICAgICAgdGhpcy5saXZlTmF0aXZlQ2xhc3NlcywKICAgICAgdGhpcy5saXZlSW5zdGFuY2VNZW1iZXJzLAogICAgICB0aGlzLmFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzLAogICAgICB0aGlzLnByb2Nlc3NlZE1lbWJlcnMsCiAgICAgIHRoaXMubWl4aW5Vc2VzLAogICAgICB0aGlzLnR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMsCiAgICAgIHRoaXMuY2xhc3NIaWVyYXJjaHksCiAgICAgIEFic3RyYWN0VmFsdWVTdHJhdGVneSBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgIHRoaXMuYW5ub3RhdGlvbnNEYXRhLAogICAgICB0aGlzLmdsb2JhbExvY2Fsc01hcCwKICAgICAgdGhpcy5jbG9zdXJlRGF0YUxvb2t1cCwKICAgICAgdGhpcy5vdXRwdXRVbml0RGF0YSwKICAgICAgdGhpcy5tZW1iZXJBY2Nlc3MpIHsKICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluID0gYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LmNyZWF0ZURvbWFpbih0aGlzKTsKICB9CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSnNDbG9zZWRXb3JsZF0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKc0Nsb3NlZFdvcmxkLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgICAgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWVTdHJhdGVneSBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKCiAgICBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwID0KICAgICAgICBuZXcgSnNLZXJuZWxUb0VsZW1lbnRNYXAucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgICAgICBvcHRpb25zLCByZXBvcnRlciwgZW52aXJvbm1lbnQsIGNvbXBvbmVudCwgc291cmNlKTsKICAgIEdsb2JhbExvY2Fsc01hcCBnbG9iYWxMb2NhbHNNYXAgPQogICAgICAgIG5ldyBHbG9iYWxMb2NhbHNNYXAucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UucmVnaXN0ZXJMb2NhbExvb2t1cChuZXcgTG9jYWxMb29rdXBJbXBsKGdsb2JhbExvY2Fsc01hcCkpOwogICAgQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHkgPSBuZXcgQ2xhc3NIaWVyYXJjaHkucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgIHNvdXJjZSwgZWxlbWVudE1hcC5jb21tb25FbGVtZW50cyk7CiAgICBOYXRpdmVEYXRhIG5hdGl2ZURhdGEgPSBuZXcgTmF0aXZlRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgc291cmNlLCBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICBlbGVtZW50TWFwLm5hdGl2ZURhdGEgPSBuYXRpdmVEYXRhOwogICAgSW50ZXJjZXB0b3JEYXRhIGludGVyY2VwdG9yRGF0YSA9IG5ldyBJbnRlcmNlcHRvckRhdGEucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgIHNvdXJjZSwgbmF0aXZlRGF0YSwgZWxlbWVudE1hcC5jb21tb25FbGVtZW50cyk7CiAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlID0gbmV3IEJhY2tlbmRVc2FnZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIFJ1bnRpbWVUeXBlc05lZWQgcnRpTmVlZCA9IG5ldyBSdW50aW1lVHlwZXNOZWVkLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICBzb3VyY2UsIGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50KTsKICAgIEpGaWVsZEFuYWx5c2lzIGFsbG9jYXRvckFuYWx5c2lzID0KICAgICAgICBuZXcgSkZpZWxkQW5hbHlzaXMucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgb3B0aW9ucyk7CiAgICBOb1N1Y2hNZXRob2REYXRhIG5vU3VjaE1ldGhvZERhdGEgPQogICAgICAgIG5ldyBOb1N1Y2hNZXRob2REYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwoKICAgIFNldDxDbGFzc0VudGl0eT4gaW1wbGVtZW50ZWRDbGFzc2VzID0gc291cmNlLnJlYWRDbGFzc2VzKCkudG9TZXQoKTsKICAgIFNldDxDbGFzc0VudGl0eT4gbGl2ZU5hdGl2ZUNsYXNzZXMgPSBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpOwogICAgU2V0PE1lbWJlckVudGl0eT4gbGl2ZUluc3RhbmNlTWVtYmVycyA9IHNvdXJjZS5yZWFkTWVtYmVycygpLnRvU2V0KCk7CiAgICBTZXQ8TWVtYmVyRW50aXR5PiBhc3NpZ25lZEluc3RhbmNlTWVtYmVycyA9IHNvdXJjZS5yZWFkTWVtYmVycygpLnRvU2V0KCk7CiAgICBTZXQ8TWVtYmVyRW50aXR5PiBwcm9jZXNzZWRNZW1iZXJzID0gc291cmNlLnJlYWRNZW1iZXJzKCkudG9TZXQoKTsKICAgIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gbWl4aW5Vc2VzID0KICAgICAgICBzb3VyY2UucmVhZENsYXNzTWFwKCgpID0+IHNvdXJjZS5yZWFkQ2xhc3NlcygpLnRvU2V0KCkpOwogICAgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzID0KICAgICAgICBzb3VyY2UucmVhZENsYXNzTWFwKCgpID0+IHNvdXJjZS5yZWFkQ2xhc3NlcygpLnRvU2V0KCkpOwoKICAgIEFubm90YXRpb25zRGF0YSBhbm5vdGF0aW9uc0RhdGEgPQogICAgICAgIG5ldyBBbm5vdGF0aW9uc0RhdGEucmVhZEZyb21EYXRhU291cmNlKG9wdGlvbnMsIHNvdXJjZSk7CgogICAgQ2xvc3VyZURhdGEgY2xvc3VyZURhdGEgPQogICAgICAgIG5ldyBDbG9zdXJlRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoZWxlbWVudE1hcCwgc291cmNlKTsKCiAgICBPdXRwdXRVbml0RGF0YSBvdXRwdXRVbml0RGF0YSA9CiAgICAgICAgbmV3IE91dHB1dFVuaXREYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgZWxlbWVudE1hcC5sYXRlT3V0cHV0VW5pdERhdGFCdWlsZGVyID0KICAgICAgICBuZXcgTGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlcihvdXRwdXRVbml0RGF0YSk7CgogICAgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyQWNjZXNzPiBtZW1iZXJBY2Nlc3MgPSBzb3VyY2UucmVhZE1lbWJlck1hcCgKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gbmV3IE1lbWJlckFjY2Vzcy5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CgogICAgc291cmNlLmVuZCh0YWcpOwoKICAgIHJldHVybiBuZXcgSnNDbG9zZWRXb3JsZCgKICAgICAgICBlbGVtZW50TWFwLAogICAgICAgIG5hdGl2ZURhdGEsCiAgICAgICAgaW50ZXJjZXB0b3JEYXRhLAogICAgICAgIGJhY2tlbmRVc2FnZSwKICAgICAgICBydGlOZWVkLAogICAgICAgIGFsbG9jYXRvckFuYWx5c2lzLAogICAgICAgIG5vU3VjaE1ldGhvZERhdGEsCiAgICAgICAgaW1wbGVtZW50ZWRDbGFzc2VzLAogICAgICAgIGxpdmVOYXRpdmVDbGFzc2VzLAogICAgICAgIGxpdmVJbnN0YW5jZU1lbWJlcnMsCiAgICAgICAgYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMsCiAgICAgICAgcHJvY2Vzc2VkTWVtYmVycywKICAgICAgICBtaXhpblVzZXMsCiAgICAgICAgdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlcywKICAgICAgICBjbGFzc0hpZXJhcmNoeSwKICAgICAgICBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgICAgYW5ub3RhdGlvbnNEYXRhLAogICAgICAgIGdsb2JhbExvY2Fsc01hcCwKICAgICAgICBjbG9zdXJlRGF0YSwKICAgICAgICBvdXRwdXRVbml0RGF0YSwKICAgICAgICBtZW1iZXJBY2Nlc3MpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSnNDbG9zZWRXb3JsZF0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGVsZW1lbnRNYXAud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgZ2xvYmFsTG9jYWxzTWFwLndyaXRlVG9EYXRhU2luayhzaW5rKTsKCiAgICBjbGFzc0hpZXJhcmNoeS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBuYXRpdmVEYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIGludGVyY2VwdG9yRGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBiYWNrZW5kVXNhZ2Uud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgcnRpTmVlZC53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBmaWVsZEFuYWx5c2lzLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIG5vU3VjaE1ldGhvZERhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZUNsYXNzZXMoaW1wbGVtZW50ZWRDbGFzc2VzKTsKICAgIHNpbmsud3JpdGVDbGFzc2VzKGxpdmVOYXRpdmVDbGFzc2VzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKGxpdmVJbnN0YW5jZU1lbWJlcnMpOwogICAgc2luay53cml0ZU1lbWJlcnMoYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMpOwogICAgc2luay53cml0ZU1lbWJlcnMocHJvY2Vzc2VkTWVtYmVycyk7CiAgICBzaW5rLndyaXRlQ2xhc3NNYXAoCiAgICAgICAgbWl4aW5Vc2VzLCAoU2V0PENsYXNzRW50aXR5PiBzZXQpID0+IHNpbmsud3JpdGVDbGFzc2VzKHNldCkpOwogICAgc2luay53cml0ZUNsYXNzTWFwKHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMsCiAgICAgICAgKFNldDxDbGFzc0VudGl0eT4gc2V0KSA9PiBzaW5rLndyaXRlQ2xhc3NlcyhzZXQpKTsKICAgIGFubm90YXRpb25zRGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBjbG9zdXJlRGF0YUxvb2t1cC53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBvdXRwdXRVbml0RGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKAogICAgICAgIG1lbWJlckFjY2VzcywKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyQWNjZXNzIGFjY2VzcykgPT4KICAgICAgICAgICAgYWNjZXNzLndyaXRlVG9EYXRhU2luayhzaW5rKSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50ID0+IGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50OwoKICBAb3ZlcnJpZGUKICBKQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIERhcnRUeXBlcyBnZXQgZGFydFR5cGVzID0+IGVsZW1lbnRNYXAudHlwZXM7CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbXBsZW1lbnRlZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBpbXBsZW1lbnRlZENsYXNzZXMuY29udGFpbnMoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldEx1Yk9mSW5zdGFudGlhdGVkU3ViY2xhc3NlcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIGlmIChuYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoY2xzKSkgewogICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3M7CiAgICB9CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgaGllcmFyY2h5ID0gY2xhc3NIaWVyYXJjaHkuZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKGNscyk7CiAgICByZXR1cm4gaGllcmFyY2h5ICE9IG51bGwKICAgICAgICA/IGhpZXJhcmNoeS5nZXRMdWJPZkluc3RhbnRpYXRlZFN1YmNsYXNzZXMoKQogICAgICAgIDogbnVsbDsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldEx1Yk9mSW5zdGFudGlhdGVkU3VidHlwZXMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBpZiAobmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHsKICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdE9iamVjdENsYXNzOwogICAgfQogICAgQ2xhc3NTZXQgY2xhc3NTZXQgPSBjbGFzc0hpZXJhcmNoeS5nZXRDbGFzc1NldChjbHMpOwogICAgcmV0dXJuIGNsYXNzU2V0ICE9IG51bGwgPyBjbGFzc1NldC5nZXRMdWJPZkluc3RhbnRpYXRlZFN1YnR5cGVzKCkgOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1VzZWRBc01peGluKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuICFtaXhpblVzZXNPZihjbHMpLmlzRW1wdHk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FueVN1YmNsYXNzT2ZNaXhpblVzZVRoYXRJbXBsZW1lbnRzKAogICAgICBDbGFzc0VudGl0eSBjbHMsIENsYXNzRW50aXR5IHR5cGUpIHsKICAgIHJldHVybiBtaXhpblVzZXNPZihjbHMpCiAgICAgICAgLmFueSgodXNlKSA9PiBoYXNBbnlTdWJjbGFzc1RoYXRJbXBsZW1lbnRzKHVzZSwgdHlwZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBldmVyeVN1YnR5cGVJc1N1YmNsYXNzT2ZPck1peGluVXNlT2YoQ2xhc3NFbnRpdHkgeCwgQ2xhc3NFbnRpdHkgeSkgewogICAgTWFwPENsYXNzRW50aXR5LCBib29sPiBzZWNvbmRNYXAgPQogICAgICAgIF9zdWJ0eXBlQ292ZXJlZEJ5Q2FjaGVbeF0gPz89IDxDbGFzc0VudGl0eSwgYm9vbD57fTsKICAgIHJldHVybiBzZWNvbmRNYXBbeV0gPz89IGNsYXNzSGllcmFyY2h5LnN1YnR5cGVzT2YoeCkuZXZlcnkoCiAgICAgICAgKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgICAgICAgY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKGNscywgeSkgfHwKICAgICAgICAgICAgaXNTdWJjbGFzc09mTWl4aW5Vc2VPZihjbHMsIHkpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzQW55U3ViY2xhc3NUaGF0SW1wbGVtZW50cyhDbGFzc0VudGl0eSBzdXBlcmNsYXNzLCBDbGFzc0VudGl0eSB0eXBlKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IHN1YmNsYXNzZXMgPSB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzW3N1cGVyY2xhc3NdOwogICAgaWYgKHN1YmNsYXNzZXMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1YmNsYXNzZXMuY29udGFpbnModHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG5lZWRzTm9TdWNoTWV0aG9kKAogICAgICBDbGFzc0VudGl0eSBiYXNlLCBTZWxlY3RvciBzZWxlY3RvciwgQ2xhc3NRdWVyeSBxdWVyeSkgewogICAgLy8vIFJldHVybnMgYHRydWVgIGlmIHN1YmNsYXNzZXMgaW4gdGhlIFtyb290Tm9kZV0gdHJlZSBuZWVkcyBub1N1Y2hNZXRob2QKICAgIC8vLyBoYW5kbGluZy4KICAgIGJvb2wgc3ViY2xhc3Nlc05lZWROb1N1Y2hNZXRob2QoQ2xhc3NIaWVyYXJjaHlOb2RlIHJvb3ROb2RlKSB7CiAgICAgIGlmICghcm9vdE5vZGUuaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgICAvLyBObyBzdWJjbGFzcyBuZWVkcyBub1N1Y2hNZXRob2QgaGFuZGxpbmcgc2luY2UgdGhleSBhcmUgYWxsCiAgICAgICAgLy8gdW5pbnN0YW50aWF0ZWQuCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIENsYXNzRW50aXR5IHJvb3RDbGFzcyA9IHJvb3ROb2RlLmNsczsKICAgICAgaWYgKF9oYXNDb25jcmV0ZU1hdGNoKHJvb3RDbGFzcywgc2VsZWN0b3IpKSB7CiAgICAgICAgLy8gVGhlIHJvb3Qgc3ViY2xhc3MgaGFzIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gc28gbm8gc3ViY2xhc3MgbmVlZHMKICAgICAgICAvLyBub1N1Y2hNZXRob2QgaGFuZGxpbmcuCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGVsc2UgaWYgKHJvb3ROb2RlLmlzRXhwbGljaXRseUluc3RhbnRpYXRlZCkgewogICAgICAgIC8vIFRoZSByb290IGNsYXNzIG5lZWQgbm9TdWNoTWV0aG9kIGhhbmRsaW5nLgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIEl0ZXJhdGlvblN0ZXAgcmVzdWx0ID0gcm9vdE5vZGUuZm9yRWFjaFN1YmNsYXNzKChDbGFzc0VudGl0eSBzdWJjbGFzcykgewogICAgICAgIGlmIChfaGFzQ29uY3JldGVNYXRjaChzdWJjbGFzcywgc2VsZWN0b3IsCiAgICAgICAgICAgIHN0b3BBdFN1cGVyY2xhc3M6IHJvb3RDbGFzcykpIHsKICAgICAgICAgIC8vIEZvdW5kIGEgbWF0Y2ggLSBza2lwIGFsbCBzdWJjbGFzc2VzLgogICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuU0tJUF9TVUJDTEFTU0VTOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBTdG9wIGZhc3QgLSB3ZSBmb3VuZCBhIG5lZWQgZm9yIG5vU3VjaE1ldGhvZCBoYW5kbGluZy4KICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLlNUT1A7CiAgICAgICAgfQogICAgICB9LCBDbGFzc0hpZXJhcmNoeU5vZGUuRVhQTElDSVRMWV9JTlNUQU5USUFURUQsIHN0cmljdDogdHJ1ZSk7CiAgICAgIC8vIFdlIHN0b3BwZWQgZmFzdCBzbyB3ZSBuZWVkIG5vU3VjaE1ldGhvZCBoYW5kbGluZy4KICAgICAgcmV0dXJuIHJlc3VsdCA9PSBJdGVyYXRpb25TdGVwLlNUT1A7CiAgICB9CgogICAgQ2xhc3NTZXQgY2xhc3NTZXQgPSBjbGFzc0hpZXJhcmNoeS5nZXRDbGFzc1NldChiYXNlKTsKICAgIGFzc2VydChjbGFzc1NldCAhPSBudWxsLCBmYWlsZWRBdChiYXNlLCAiTm8gY2xhc3Mgc2V0IGZvciAkYmFzZS4iKSk7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IGNsYXNzU2V0Lm5vZGU7CiAgICBpZiAocXVlcnkgPT0gQ2xhc3NRdWVyeS5FWEFDVCkgewogICAgICByZXR1cm4gbm9kZS5pc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQgJiYKICAgICAgICAgICFfaGFzQ29uY3JldGVNYXRjaChiYXNlLCBzZWxlY3Rvcik7CiAgICB9IGVsc2UgaWYgKHF1ZXJ5ID09IENsYXNzUXVlcnkuU1VCQ0xBU1MpIHsKICAgICAgcmV0dXJuIHN1YmNsYXNzZXNOZWVkTm9TdWNoTWV0aG9kKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKHN1YmNsYXNzZXNOZWVkTm9TdWNoTWV0aG9kKG5vZGUpKSByZXR1cm4gdHJ1ZTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3VidHlwZU5vZGUgaW4gY2xhc3NTZXQuc3VidHlwZU5vZGVzKSB7CiAgICAgICAgaWYgKHN1YmNsYXNzZXNOZWVkTm9TdWNoTWV0aG9kKHN1YnR5cGVOb2RlKSkgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNvbW1vblN1cGVydHlwZXNPZihJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3NlcykgewogICAgSXRlcmF0b3I8Q2xhc3NFbnRpdHk+IGl0ZXJhdG9yID0gY2xhc3Nlcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIGNvbnN0IDxDbGFzc0VudGl0eT5bXTsKCiAgICBDbGFzc0VudGl0eSBjbHMgPSBpdGVyYXRvci5jdXJyZW50OwogICAgT3JkZXJlZFR5cGVTZXQgdHlwZVNldCA9IGVsZW1lbnRNYXAuZ2V0T3JkZXJlZFR5cGVTZXQoY2xzKTsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIHR5cGVTZXQudHlwZXMubWFwKCh0eXBlKSA9PiB0eXBlLmVsZW1lbnQpOwoKICAgIGludCBkZXB0aCA9IHR5cGVTZXQubWF4RGVwdGg7CiAgICBMaW5rPE9yZGVyZWRUeXBlU2V0PiBvdGhlclR5cGVTZXRzID0gY29uc3QgTGluazxPcmRlcmVkVHlwZVNldD4oKTsKICAgIGRvIHsKICAgICAgQ2xhc3NFbnRpdHkgb3RoZXJDbGFzcyA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIE9yZGVyZWRUeXBlU2V0IG90aGVyVHlwZVNldCA9IGVsZW1lbnRNYXAuZ2V0T3JkZXJlZFR5cGVTZXQob3RoZXJDbGFzcyk7CiAgICAgIG90aGVyVHlwZVNldHMgPSBvdGhlclR5cGVTZXRzLnByZXBlbmQob3RoZXJUeXBlU2V0KTsKICAgICAgaWYgKG90aGVyVHlwZVNldC5tYXhEZXB0aCA8IGRlcHRoKSB7CiAgICAgICAgZGVwdGggPSBvdGhlclR5cGVTZXQubWF4RGVwdGg7CiAgICAgIH0KICAgIH0gd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpOwoKICAgIExpc3Q8Q2xhc3NFbnRpdHk+IGNvbW1vblN1cGVydHlwZXMgPSA8Q2xhc3NFbnRpdHk+W107CiAgICBPVVRFUjoKICAgIGZvciAoTGluazxJbnRlcmZhY2VUeXBlPiBsaW5rID0gdHlwZVNldFtkZXB0aF07CiAgICAgICAgbGluay5oZWFkLmVsZW1lbnQgIT0gY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3M7CiAgICAgICAgbGluayA9IGxpbmsudGFpbCkgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBsaW5rLmhlYWQuZWxlbWVudDsKICAgICAgZm9yIChMaW5rPE9yZGVyZWRUeXBlU2V0PiBsaW5rID0gb3RoZXJUeXBlU2V0czsKICAgICAgICAgICFsaW5rLmlzRW1wdHk7CiAgICAgICAgICBsaW5rID0gbGluay50YWlsKSB7CiAgICAgICAgaWYgKGxpbmsuaGVhZC5hc0luc3RhbmNlT2YoY2xzLCBlbGVtZW50TWFwLmdldEhpZXJhcmNoeURlcHRoKGNscykpID09CiAgICAgICAgICAgIG51bGwpIHsKICAgICAgICAgIGNvbnRpbnVlIE9VVEVSOwogICAgICAgIH0KICAgICAgfQogICAgICBjb21tb25TdXBlcnR5cGVzLmFkZChjbHMpOwogICAgfQogICAgY29tbW9uU3VwZXJ0eXBlcy5hZGQoY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpOwogICAgcmV0dXJuIGNvbW1vblN1cGVydHlwZXM7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gbWl4aW5Vc2VzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBpZiAoX2xpdmVNaXhpblVzZXMgPT0gbnVsbCkgewogICAgICBfbGl2ZU1peGluVXNlcyA9IG5ldyBNYXA8Q2xhc3NFbnRpdHksIExpc3Q8Q2xhc3NFbnRpdHk+PigpOwogICAgICBmb3IgKENsYXNzRW50aXR5IG1peGluIGluIG1peGluVXNlcy5rZXlzKSB7CiAgICAgICAgTGlzdDxDbGFzc0VudGl0eT4gdXNlcyA9IDxDbGFzc0VudGl0eT5bXTsKCiAgICAgICAgdm9pZCBhZGRMaXZlVXNlKENsYXNzRW50aXR5IG1peGluQXBwbGljYXRpb24pIHsKICAgICAgICAgIGlmIChjbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChtaXhpbkFwcGxpY2F0aW9uKSkgewogICAgICAgICAgICB1c2VzLmFkZChtaXhpbkFwcGxpY2F0aW9uKTsKICAgICAgICAgIH0gZWxzZSBpZiAoX2lzTmFtZWRNaXhpbkFwcGxpY2F0aW9uKG1peGluQXBwbGljYXRpb24pKSB7CiAgICAgICAgICAgIFNldDxDbGFzc0VudGl0eT4gbmV4dCA9IG1peGluVXNlc1ttaXhpbkFwcGxpY2F0aW9uXTsKICAgICAgICAgICAgaWYgKG5leHQgIT0gbnVsbCkgewogICAgICAgICAgICAgIG5leHQuZm9yRWFjaChhZGRMaXZlVXNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbWl4aW5Vc2VzW21peGluXS5mb3JFYWNoKGFkZExpdmVVc2UpOwogICAgICAgIGlmICh1c2VzLmlzTm90RW1wdHkpIHsKICAgICAgICAgIF9saXZlTWl4aW5Vc2VzW21peGluXSA9IHVzZXM7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gdXNlcyA9IF9saXZlTWl4aW5Vc2VzW2Nsc107CiAgICByZXR1cm4gdXNlcyAhPSBudWxsID8gdXNlcyA6IGNvbnN0IDxDbGFzc0VudGl0eT5bXTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzQW55U3ViY2xhc3NUaGF0TWl4ZXMoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcywgQ2xhc3NFbnRpdHkgbWl4aW4pIHsKICAgIHJldHVybiBtaXhpblVzZXNPZihtaXhpbikuYW55KChDbGFzc0VudGl0eSBlYWNoKSB7CiAgICAgIHJldHVybiBjbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2YoZWFjaCwgc3VwZXJjbGFzcyk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJjbGFzc09mTWl4aW5Vc2VPZihDbGFzc0VudGl0eSBjbHMsIENsYXNzRW50aXR5IG1peGluKSB7CiAgICBpZiAoaXNVc2VkQXNNaXhpbihtaXhpbikpIHsKICAgICAgQ2xhc3NFbnRpdHkgY3VycmVudCA9IGNsczsKICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICAgIENsYXNzRW50aXR5IGN1cnJlbnRNaXhpbiA9IGVsZW1lbnRNYXAuZ2V0QXBwbGllZE1peGluKGN1cnJlbnQpOwogICAgICAgIGlmIChjdXJyZW50TWl4aW4gPT0gbWl4aW4pIHJldHVybiB0cnVlOwogICAgICAgIGN1cnJlbnQgPSBlbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjdXJyZW50KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBfZW5zdXJlRnVuY3Rpb25TZXQoKSB7CiAgICBpZiAoX2FsbEZ1bmN0aW9ucyA9PSBudWxsKSB7CiAgICAgIC8vIFtGdW5jdGlvblNldF0gaXMgY3JlYXRlZCBsYXppbHkgYmVjYXVzZSBpdCBpcyBub3QgdXNlZCB3aGVuIHdlIHN3aXRjaAogICAgICAvLyBmcm9tIGEgZnJvbnRlbmQgdG8gYSBiYWNrZW5kIG1vZGVsIGJlZm9yZSBpbmZlcmVuY2UuCiAgICAgIF9hbGxGdW5jdGlvbnMgPSBuZXcgRnVuY3Rpb25TZXQobGl2ZUluc3RhbmNlTWVtYmVycyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGluY2x1ZGVzQ2xvc3VyZUNhbGwoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpIHsKICAgIHJldHVybiBzZWxlY3Rvci5uYW1lID09IElkZW50aWZpZXJzLmNhbGwgJiYKICAgICAgICAocmVjZWl2ZXIgPT0gbnVsbCB8fAogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgdGhpcyBoYXZlIGJlZW4gYGludGVyc2VjdHNgIGluc3RlYWQ/CiAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgICAgIC5jb250YWlucyhyZWNlaXZlciwgYWJzdHJhY3RWYWx1ZURvbWFpbi5mdW5jdGlvblR5cGUpCiAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlUmVjZWl2ZXJUeXBlKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKSB7CiAgICBfZW5zdXJlRnVuY3Rpb25TZXQoKTsKICAgIGlmIChpbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCByZWNlaXZlcikpIHsKICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICB9CiAgICByZXR1cm4gX2FsbEZ1bmN0aW9ucy5yZWNlaXZlclR5cGUoc2VsZWN0b3IsIHJlY2VpdmVyLCBhYnN0cmFjdFZhbHVlRG9tYWluKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gbG9jYXRlTWVtYmVycygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpIHsKICAgIF9lbnN1cmVGdW5jdGlvblNldCgpOwogICAgcmV0dXJuIF9hbGxGdW5jdGlvbnMuZmlsdGVyKHNlbGVjdG9yLCByZWNlaXZlciwgYWJzdHJhY3RWYWx1ZURvbWFpbik7CiAgfQoKICBib29sIGhhc0FueVVzZXJEZWZpbmVkR2V0dGVyKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKSB7CiAgICBfZW5zdXJlRnVuY3Rpb25TZXQoKTsKICAgIHJldHVybiBfYWxsRnVuY3Rpb25zCiAgICAgICAgLmZpbHRlcihzZWxlY3RvciwgcmVjZWl2ZXIsIGFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmFueSgoZWFjaCkgPT4gZWFjaC5pc0dldHRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9jYXRlU2luZ2xlTWVtYmVyKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKSB7CiAgICBpZiAoaW5jbHVkZXNDbG9zdXJlQ2FsbChzZWxlY3RvciwgcmVjZWl2ZXIpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmVjZWl2ZXIgPz89IGFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5sb2NhdGVTaW5nbGVNZW1iZXIocmVjZWl2ZXIsIHNlbGVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZmllbGROZXZlckNoYW5nZXMoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmICghZWxlbWVudC5pc0ZpZWxkKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihlbGVtZW50KSkgewogICAgICAvLyBTb21lIG5hdGl2ZSBmaWVsZHMgYXJlIHZpZXdzIG9mIGRhdGEgdGhhdCBtYXkgYmUgY2hhbmdlZCBieSBvcGVyYXRpb25zLgogICAgICAvLyBFLmcuIG5vZGUuZmlyc3RDaGlsZCBkZXBlbmRzIG9uIHBhcmVudE5vZGUucmVtb3ZlQmVmb3JlKG4xLCBuMikuCiAgICAgIC8vIFRPRE8oc3JhKTogUmVmaW5lIHRoZSBlZmZlY3QgY2xhc3NpZmljYXRpb24gc28gdGhhdCBuYXRpdmUgZWZmZWN0cyBhcmUKICAgICAgLy8gZGlzdGluY3QgZnJvbSBvcmRpbmFyeSBEYXJ0IGVmZmVjdHMuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoIWVsZW1lbnQuaXNBc3NpZ25hYmxlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICByZXR1cm4gIWFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzLmNvbnRhaW5zKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgU29ydGVyIGdldCBzb3J0ZXIgewogICAgcmV0dXJuIF9zb3J0ZXIgPz89IG5ldyBLZXJuZWxTb3J0ZXIoZWxlbWVudE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBhYnN0cmFjdFZhbHVlRG9tYWluIHsKICAgIHJldHVybiBfYWJzdHJhY3RWYWx1ZURvbWFpbjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzRWxlbWVudEluKENsYXNzRW50aXR5IGNscywgTmFtZSBuYW1lLCBFbnRpdHkgZWxlbWVudCkgewogICAgd2hpbGUgKGNscyAhPSBudWxsKSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgIC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKGNscywgbmFtZS50ZXh0LCBzZXR0ZXI6IG5hbWUuaXNTZXR0ZXIpOwogICAgICBpZiAobWVtYmVyICE9IG51bGwgJiYKICAgICAgICAgICFtZW1iZXIuaXNBYnN0cmFjdCAmJgogICAgICAgICAgKCFuYW1lLmlzUHJpdmF0ZSB8fCBtZW1iZXIubGlicmFyeSA9PSBuYW1lLmxpYnJhcnkpKSB7CiAgICAgICAgcmV0dXJuIG1lbWJlciA9PSBlbGVtZW50OwogICAgICB9CiAgICAgIGNscyA9IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIGEgW3NlbGVjdG9yXSBjYWxsIG9uIGFuIGluc3RhbmNlIG9mIFtjbHNdCiAgLy8vIHdpbGwgaGl0IGEgbWV0aG9kIGF0IHJ1bnRpbWUsIGFuZCBub3QgZ28gdGhyb3VnaCBbbm9TdWNoTWV0aG9kXS4KICBib29sIF9oYXNDb25jcmV0ZU1hdGNoKENsYXNzRW50aXR5IGNscywgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIHtDbGFzc0VudGl0eSBzdG9wQXRTdXBlcmNsYXNzfSkgewogICAgYXNzZXJ0KGNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGNscyksCiAgICAgICAgZmFpbGVkQXQoY2xzLCAnJGNscyBoYXMgbm90IGJlZW4gaW5zdGFudGlhdGVkLicpKTsKICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0gZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgLmxvb2t1cENsYXNzTWVtYmVyKGNscywgc2VsZWN0b3IubmFtZSwgc2V0dGVyOiBzZWxlY3Rvci5pc1NldHRlcik7CiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CgogICAgaWYgKGVsZW1lbnQuaXNBYnN0cmFjdCkgewogICAgICBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIHJldHVybiBfaGFzQ29uY3JldGVNYXRjaCgKICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGVuY2xvc2luZ0NsYXNzKSwgc2VsZWN0b3IpOwogICAgfQogICAgcmV0dXJuIHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBfaXNOYW1lZE1peGluQXBwbGljYXRpb24oQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudEVudmlyb25tZW50LmlzTWl4aW5BcHBsaWNhdGlvbihjbHMpICYmCiAgICAgICAgIWVsZW1lbnRFbnZpcm9ubWVudC5pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJBY2Nlc3MgZ2V0TWVtYmVyQWNjZXNzKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBtZW1iZXJBY2Nlc3NbbWVtYmVyXTsKICB9Cn0KCmNsYXNzIEtlcm5lbFNvcnRlciBpbXBsZW1lbnRzIFNvcnRlciB7CiAgZmluYWwgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKCiAgS2VybmVsU29ydGVyKHRoaXMuZWxlbWVudE1hcCk7CgogIGludCBfY29tcGFyZUxpYnJhcmllcyhMaWJyYXJ5RW50aXR5IGEsIExpYnJhcnlFbnRpdHkgYikgewogICAgcmV0dXJuIHV0aWxzLmNvbXBhcmVMaWJyYXJpZXNVcmlzKGEuY2Fub25pY2FsVXJpLCBiLmNhbm9uaWNhbFVyaSk7CiAgfQoKICBpbnQgX2NvbXBhcmVTb3VyY2VTcGFucyhFbnRpdHkgZW50aXR5MSwgU291cmNlU3BhbiBzb3VyY2VTcGFuMSwKICAgICAgRW50aXR5IGVudGl0eTIsIFNvdXJjZVNwYW4gc291cmNlU3BhbjIpIHsKICAgIGludCByID0gdXRpbHMuY29tcGFyZVNvdXJjZVVyaXMoc291cmNlU3BhbjEudXJpLCBzb3VyY2VTcGFuMi51cmkpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gdXRpbHMuY29tcGFyZUVudGl0aWVzKAogICAgICAgIGVudGl0eTEsIHNvdXJjZVNwYW4xLmJlZ2luLCBudWxsLCBlbnRpdHkyLCBzb3VyY2VTcGFuMi5iZWdpbiwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBzb3J0TGlicmFyaWVzKEl0ZXJhYmxlPExpYnJhcnlFbnRpdHk+IGxpYnJhcmllcykgewogICAgcmV0dXJuIGxpYnJhcmllcy50b0xpc3QoKS4uc29ydChfY29tcGFyZUxpYnJhcmllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUPiBzb3J0TWVtYmVyczxUIGV4dGVuZHMgTWVtYmVyRW50aXR5PihJdGVyYWJsZTxUPiBtZW1iZXJzKSB7CiAgICByZXR1cm4gbWVtYmVycy50b0xpc3QoKS4uc29ydChjb21wYXJlTWVtYmVyc0J5TG9jYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHNvcnRDbGFzc2VzKEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICBMaXN0PENsYXNzRW50aXR5PiByZWd1bGFyQ2xhc3NlcyA9IDxDbGFzc0VudGl0eT5bXTsKICAgIExpc3Q8Q2xhc3NFbnRpdHk+IHVubmFtZWRNaXhpbnMgPSA8Q2xhc3NFbnRpdHk+W107CiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBjbGFzc2VzKSB7CiAgICAgIGlmIChlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKGNscykpIHsKICAgICAgICB1bm5hbWVkTWl4aW5zLmFkZChjbHMpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlZ3VsYXJDbGFzc2VzLmFkZChjbHMpOwogICAgICB9CiAgICB9CiAgICBMaXN0PENsYXNzRW50aXR5PiBzb3J0ZWQgPSA8Q2xhc3NFbnRpdHk+W107CiAgICByZWd1bGFyQ2xhc3Nlcy5zb3J0KGNvbXBhcmVDbGFzc2VzQnlMb2NhdGlvbik7CiAgICBzb3J0ZWQuYWRkQWxsKHJlZ3VsYXJDbGFzc2VzKTsKICAgIHVubmFtZWRNaXhpbnMuc29ydCgoYSwgYikgewogICAgICBpbnQgcmVzdWx0ID0gX2NvbXBhcmVMaWJyYXJpZXMoYS5saWJyYXJ5LCBiLmxpYnJhcnkpOwogICAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7CiAgICAgIHJlc3VsdCA9IGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKICAgICAgYXNzZXJ0KHJlc3VsdCAhPSAwLAogICAgICAgICAgZmFpbGVkQXQoYSwgIk11bHRpcGxlIG1peGlucyBuYW1lZCAke2EubmFtZX06ICRhIHZzICRiLiIpKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0pOwogICAgc29ydGVkLmFkZEFsbCh1bm5hbWVkTWl4aW5zKTsKICAgIHJldHVybiBzb3J0ZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUeXBlZGVmRW50aXR5PiBzb3J0VHlwZWRlZnMoSXRlcmFibGU8VHlwZWRlZkVudGl0eT4gdHlwZWRlZnMpIHsKICAgIC8vIFRPRE8ocmVkZW1wdGlvbik6IFN1cHBvcnQgdGhpcy4KICAgIGFzc2VydCh0eXBlZGVmcy5pc0VtcHR5KTsKICAgIHJldHVybiB0eXBlZGVmczsKICB9CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlTGlicmFyaWVzQnlMb2NhdGlvbihMaWJyYXJ5RW50aXR5IGEsIExpYnJhcnlFbnRpdHkgYikgewogICAgcmV0dXJuIF9jb21wYXJlTGlicmFyaWVzKGEsIGIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVDbGFzc2VzQnlMb2NhdGlvbihDbGFzc0VudGl0eSBhLCBDbGFzc0VudGl0eSBiKSB7CiAgICBpbnQgciA9IF9jb21wYXJlTGlicmFyaWVzKGEubGlicmFyeSwgYi5saWJyYXJ5KTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24xID0gZWxlbWVudE1hcC5nZXRDbGFzc0RlZmluaXRpb24oYSk7CiAgICBDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbjIgPSBlbGVtZW50TWFwLmdldENsYXNzRGVmaW5pdGlvbihiKTsKICAgIHJldHVybiBfY29tcGFyZVNvdXJjZVNwYW5zKAogICAgICAgIGEsIGRlZmluaXRpb24xLmxvY2F0aW9uLCBiLCBkZWZpbml0aW9uMi5sb2NhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZVR5cGVkZWZzQnlMb2NhdGlvbihUeXBlZGVmRW50aXR5IGEsIFR5cGVkZWZFbnRpdHkgYikgewogICAgLy8gVE9ETyhyZWRlbXB0aW9uKTogU3VwcG9ydCB0aGlzLgogICAgZmFpbGVkQXQoYSwgJ0tlcm5lbFNvcnRlci5jb21wYXJlVHlwZWRlZnNCeUxvY2F0aW9uIHVuaW1wbGVtZW50ZWQnKTsKICAgIHJldHVybiAwOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVNZW1iZXJzQnlMb2NhdGlvbihNZW1iZXJFbnRpdHkgYSwgTWVtYmVyRW50aXR5IGIpIHsKICAgIGludCByID0gX2NvbXBhcmVMaWJyYXJpZXMoYS5saWJyYXJ5LCBiLmxpYnJhcnkpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24xID0gZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKGEpOwogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uMiA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihiKTsKICAgIHJldHVybiBfY29tcGFyZVNvdXJjZVNwYW5zKAogICAgICAgIGEsIGRlZmluaXRpb24xLmxvY2F0aW9uLCBiLCBkZWZpbml0aW9uMi5sb2NhdGlvbik7CiAgfQp9CgovLy8gW0xvY2FsTG9va3VwXSBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIGRlc2VyaWFsaXplIFtKc0Nsb3NlZFdvcmxkXS4KY2xhc3MgTG9jYWxMb29rdXBJbXBsIGltcGxlbWVudHMgTG9jYWxMb29rdXAgewogIGZpbmFsIEdsb2JhbExvY2Fsc01hcCBfZ2xvYmFsTG9jYWxzTWFwOwoKICBMb2NhbExvb2t1cEltcGwodGhpcy5fZ2xvYmFsTG9jYWxzTWFwKTsKCiAgQG92ZXJyaWRlCiAgTG9jYWwgZ2V0TG9jYWxCeUluZGV4KE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0LCBpbnQgaW5kZXgpIHsKICAgIEtlcm5lbFRvTG9jYWxzTWFwSW1wbCBtYXAgPSBfZ2xvYmFsTG9jYWxzTWFwLmdldExvY2Fsc01hcChtZW1iZXJDb250ZXh0KTsKICAgIHJldHVybiBtYXAuZ2V0TG9jYWxCeUluZGV4KGluZGV4KTsKICB9Cn0Kgp0ATk48AShEARoZH0wgMiQxISEeMSQpLCsuKTU2IiIaLislOSgkGBsgFgEuLAEMHwwpDCMMKwEdATY2AUkBSi8BQC0BLwFNMwEMLAEMLAEMJwEpDCIsDCYMKQwpDCcMJxIBNgERFxccGRQaHR8eICQdFikbMxwcHhsbRQQBOywfIx8zHhsXASY1QCY4RkssPzAoTjhNSDAnQCg5AUhHSk5HM0FGQQEmQQEeQAEkNys3AUlPARUBHhQUGRYRGxocGx0hGhMmGB8ZGRUYFwQBMSgVJisBKiYrKCMpLCsqLDApGEY1OystKhkWNisTBAEMTwEMQwEMLwEMKC0EAQxALDUGTh01EAQBDD4sNQY5TgQBDCgmBAEMLyscQAQBDEwnPUAdMy0EAQxQTComBAEMGj9PEkMmRhsWCCw0UCIWNjYVCE8yLDIwEUQlCkQ7KwYBOkktJS4uLy8NOUZCCBQGBAEMTDc8AShAUAEiRwkxTjsrJwgjAToLNDkcKzYZHk4UGgoIIQY2HQQBDDciQjIyAThBKENBICgODAoBLh8oCggGNjgEAQxMNzwIBAEMRCAhIEgwPQgGEgQBHiFPPjwGBAEMSDAdUCBGJQQBDFEaMy4GUAQBDCgzGkoEAUwaGTknBAEMTzMTBjJHBAEMMSguUUpQLhQGASETBiQ5BhIEAQwWNQQBDDAhBAEMQhovShwgQSIIMwYSBAFARz0oLzsuSycBHjsgRwYtBAEzOTwEAQw2IQQCAScjASEBPEcEAUIwRxoiTQQBDE04BAEMST0EAQxFODcnSiAPIQgGMDMjIDwmKRpGFQgiEwQBDEsnHhUEAQxFJAQBDD81GkREIDsEAQxEJ0kOBAEMQTUaRkYgOwQCAUYvKgEqAQxBTicEAgErcGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvanNfd29ybGQuZGFydDxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19tb2RlbC9qc193b3JsZF9idWlsZGVyLmRhcnTAAI17Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2luZGV4ZWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2lyL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmRfdXNhZ2UuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9rZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX3NldC5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdjbG9zdXJlLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwX2ltcGwuZGFydCc7CmltcG9ydCAnanNfd29ybGQuZGFydCc7CmltcG9ydCAnbG9jYWxzLmRhcnQnOwoKY2xhc3MgSnNDbG9zZWRXb3JsZEJ1aWxkZXIgewogIGZpbmFsIEpzS2VybmVsVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NIaWVyYXJjaHlOb2RlPiBfY2xhc3NIaWVyYXJjaHlOb2RlcyA9CiAgICAgIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwKCk7CiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBDbGFzc1NldD4gX2NsYXNzU2V0cyA9IDxDbGFzc0VudGl0eSwgQ2xhc3NTZXQ+e307CiAgZmluYWwgR2xvYmFsTG9jYWxzTWFwIF9nbG9iYWxMb2NhbHNNYXA7CiAgZmluYWwgQ2xvc3VyZURhdGFCdWlsZGVyIF9jbG9zdXJlRGF0YUJ1aWxkZXI7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEFic3RyYWN0VmFsdWVTdHJhdGVneSBfYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5OwoKICBKc0Nsb3NlZFdvcmxkQnVpbGRlcih0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9nbG9iYWxMb2NhbHNNYXAsCiAgICAgIHRoaXMuX2Nsb3N1cmVEYXRhQnVpbGRlciwgdGhpcy5fb3B0aW9ucywgdGhpcy5fYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5KTsKCiAgRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+IF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKICBDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzID0+IF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBKc0Nsb3NlZFdvcmxkIGNvbnZlcnRDbG9zZWRXb3JsZCgKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBDbG9zdXJlU2NvcGVNb2RlbD4gY2xvc3VyZU1vZGVscywKICAgICAgT3V0cHV0VW5pdERhdGEga091dHB1dFVuaXREYXRhKSB7CiAgICBKc1RvRnJvbnRlbmRNYXAgbWFwID0gbmV3IEpzVG9Gcm9udGVuZE1hcEltcGwoX2VsZW1lbnRNYXApOwoKICAgIEJhY2tlbmRVc2FnZSBiYWNrZW5kVXNhZ2UgPQogICAgICAgIF9jb252ZXJ0QmFja2VuZFVzYWdlKG1hcCwgY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlKTsKICAgIE5hdGl2ZURhdGEgbmF0aXZlRGF0YSA9IF9jb252ZXJ0TmF0aXZlRGF0YShtYXAsIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEpOwogICAgX2VsZW1lbnRNYXAubmF0aXZlRGF0YSA9IG5hdGl2ZURhdGE7CiAgICBJbnRlcmNlcHRvckRhdGEgaW50ZXJjZXB0b3JEYXRhID0KICAgICAgICBfY29udmVydEludGVyY2VwdG9yRGF0YShtYXAsIG5hdGl2ZURhdGEsIGNsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YSk7CgogICAgU2V0PENsYXNzRW50aXR5PiBpbXBsZW1lbnRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAgIC8vLyBDb252ZXJ0cyBbbm9kZV0gZnJvbSB0aGUgZnJvbnRlbmQgd29ybGQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKICAgIC8vLyBbQ2xhc3NIaWVyYXJjaHlOb2RlXSBmb3IgdGhlIGJhY2tlbmQgd29ybGQuCiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgY29udmVydENsYXNzSGllcmFyY2h5Tm9kZShDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSkgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBtYXAudG9CYWNrZW5kQ2xhc3Mobm9kZS5jbHMpOwogICAgICBpZiAoY2xvc2VkV29ybGQuaXNJbXBsZW1lbnRlZChub2RlLmNscykpIHsKICAgICAgICBpbXBsZW1lbnRlZENsYXNzZXMuYWRkKGNscyk7CiAgICAgIH0KICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5ld05vZGUgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlcy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgcGFyZW50Tm9kZTsKICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlICE9IG51bGwpIHsKICAgICAgICAgIHBhcmVudE5vZGUgPSBjb252ZXJ0Q2xhc3NIaWVyYXJjaHlOb2RlKG5vZGUucGFyZW50Tm9kZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlKHBhcmVudE5vZGUsIGNscywgbm9kZS5oaWVyYXJjaHlEZXB0aCk7CiAgICAgIH0pOwogICAgICBuZXdOb2RlLmlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCA9IG5vZGUuaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkOwogICAgICBuZXdOb2RlLmlzRGlyZWN0bHlJbnN0YW50aWF0ZWQgPSBub2RlLmlzRGlyZWN0bHlJbnN0YW50aWF0ZWQ7CiAgICAgIHJldHVybiBuZXdOb2RlOwogICAgfQoKICAgIC8vLyBDb252ZXJ0cyBbY2xhc3NTZXRdIGZyb20gdGhlIGZyb250ZW5kIHdvcmxkIHRvIHRoZSBjb3JyZXNwb25kaW5nCiAgICAvLy8gW0NsYXNzU2V0XSBmb3IgdGhlIGJhY2tlbmQgd29ybGQuCiAgICBDbGFzc1NldCBjb252ZXJ0Q2xhc3NTZXQoQ2xhc3NTZXQgY2xhc3NTZXQpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gbWFwLnRvQmFja2VuZENsYXNzKGNsYXNzU2V0LmNscyk7CiAgICAgIHJldHVybiBfY2xhc3NTZXRzLnB1dElmQWJzZW50KGNscywgKCkgewogICAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBuZXdOb2RlID0gY29udmVydENsYXNzSGllcmFyY2h5Tm9kZShjbGFzc1NldC5ub2RlKTsKICAgICAgICBDbGFzc1NldCBuZXdDbGFzc1NldCA9IG5ldyBDbGFzc1NldChuZXdOb2RlKTsKICAgICAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBzdWJ0eXBlIGluIGNsYXNzU2V0LnN1YnR5cGVOb2RlcykgewogICAgICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5ld1N1YnR5cGUgPSBjb252ZXJ0Q2xhc3NIaWVyYXJjaHlOb2RlKHN1YnR5cGUpOwogICAgICAgICAgbmV3Q2xhc3NTZXQuYWRkU3VidHlwZShuZXdTdWJ0eXBlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld0NsYXNzU2V0OwogICAgICB9KTsKICAgIH0KCiAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeQogICAgICAgIC5nZXRDbGFzc0hpZXJhcmNoeU5vZGUoY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpCiAgICAgICAgLmZvckVhY2hTdWJjbGFzcygoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGNvbnZlcnRDbGFzc1NldChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5nZXRDbGFzc1NldChjbHMpKTsKICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICB9LCBDbGFzc0hpZXJhcmNoeU5vZGUuQUxMKTsKCiAgICBTZXQ8TWVtYmVyRW50aXR5PiBsaXZlSW5zdGFuY2VNZW1iZXJzID0KICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyU2V0KGNsb3NlZFdvcmxkLmxpdmVJbnN0YW5jZU1lbWJlcnMpOwoKICAgIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gbWl4aW5Vc2VzID0KICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NNYXAoY2xvc2VkV29ybGQubWl4aW5Vc2VzLCBtYXAudG9CYWNrZW5kQ2xhc3NTZXQpOwoKICAgIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzTWFwKAogICAgICAgICAgICBjbG9zZWRXb3JsZC50eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzLCBtYXAudG9CYWNrZW5kQ2xhc3NTZXQpOwoKICAgIFNldDxNZW1iZXJFbnRpdHk+IGFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzID0KICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyU2V0KGNsb3NlZFdvcmxkLmFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzKTsKCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGxpdmVOYXRpdmVDbGFzc2VzID0KICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NTZXQoY2xvc2VkV29ybGQubGl2ZU5hdGl2ZUNsYXNzZXMpOwoKICAgIFNldDxNZW1iZXJFbnRpdHk+IHByb2Nlc3NlZE1lbWJlcnMgPQogICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJTZXQoY2xvc2VkV29ybGQubGl2ZU1lbWJlclVzYWdlLmtleXMpOwoKICAgIFJ1bnRpbWVUeXBlc05lZWQgcnRpTmVlZDsKCiAgICBMaXN0PEZ1bmN0aW9uRW50aXR5PiBjYWxsTWV0aG9kcyA9IDxGdW5jdGlvbkVudGl0eT5bXTsKICAgIENsb3N1cmVEYXRhIGNsb3N1cmVEYXRhOwogICAgaWYgKF9vcHRpb25zLmRpc2FibGVSdGlPcHRpbWl6YXRpb24pIHsKICAgICAgcnRpTmVlZCA9IG5ldyBUcml2aWFsUnVudGltZVR5cGVzTmVlZCgpOwogICAgICBjbG9zdXJlRGF0YSA9IF9jbG9zdXJlRGF0YUJ1aWxkZXIuY3JlYXRlQ2xvc3VyZUVudGl0aWVzKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJNYXAoY2xvc3VyZU1vZGVscywgaWRlbnRpdHkpLAogICAgICAgICAgY29uc3QgVHJpdmlhbENsb3N1cmVSdGlOZWVkKCksCiAgICAgICAgICBjYWxsTWV0aG9kcyk7CiAgICB9IGVsc2UgewogICAgICBSdW50aW1lVHlwZXNOZWVkSW1wbCBrZXJuZWxSdGlOZWVkID0gY2xvc2VkV29ybGQucnRpTmVlZDsKICAgICAgU2V0PGlyLkxvY2FsRnVuY3Rpb24+IGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nU2lnbmF0dXJlID0KICAgICAgICAgIG5ldyBTZXQ8aXIuTG9jYWxGdW5jdGlvbj4oKTsKICAgICAgZm9yIChLTG9jYWxGdW5jdGlvbiBsb2NhbEZ1bmN0aW9uCiAgICAgICAgICBpbiBrZXJuZWxSdGlOZWVkLmxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZSkgewogICAgICAgIGlyLkxvY2FsRnVuY3Rpb24gbm9kZSA9IGxvY2FsRnVuY3Rpb24ubm9kZTsKICAgICAgICBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZS5hZGQobm9kZSk7CiAgICAgIH0KICAgICAgU2V0PGlyLkxvY2FsRnVuY3Rpb24+IGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICBuZXcgU2V0PGlyLkxvY2FsRnVuY3Rpb24+KCk7CiAgICAgIGZvciAoS0xvY2FsRnVuY3Rpb24gbG9jYWxGdW5jdGlvbgogICAgICAgICAgaW4ga2VybmVsUnRpTmVlZC5sb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzKSB7CiAgICAgICAgaXIuTG9jYWxGdW5jdGlvbiBub2RlID0gbG9jYWxGdW5jdGlvbi5ub2RlOwogICAgICAgIGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nVHlwZUFyZ3VtZW50cy5hZGQobm9kZSk7CiAgICAgIH0KCiAgICAgIFJ1bnRpbWVUeXBlc05lZWRJbXBsIGpSdGlOZWVkID0KICAgICAgICAgIF9jb252ZXJ0UnVudGltZVR5cGVzTmVlZChtYXAsIGJhY2tlbmRVc2FnZSwga2VybmVsUnRpTmVlZCk7CiAgICAgIGNsb3N1cmVEYXRhID0gX2Nsb3N1cmVEYXRhQnVpbGRlci5jcmVhdGVDbG9zdXJlRW50aXRpZXMoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgbWFwLnRvQmFja2VuZE1lbWJlck1hcChjbG9zdXJlTW9kZWxzLCBpZGVudGl0eSksCiAgICAgICAgICBuZXcgSnNDbG9zdXJlUnRpTmVlZCgKICAgICAgICAgICAgICBqUnRpTmVlZCwKICAgICAgICAgICAgICBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgICAgICAgICAgbG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdTaWduYXR1cmUpLAogICAgICAgICAgY2FsbE1ldGhvZHMpOwoKICAgICAgTGlzdDxGdW5jdGlvbkVudGl0eT4gY2FsbE1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlID0gPEZ1bmN0aW9uRW50aXR5PltdOwogICAgICBmb3IgKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSBpbiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZSkgewogICAgICAgIGNhbGxNZXRob2RzTmVlZGluZ1NpZ25hdHVyZQogICAgICAgICAgICAuYWRkKGNsb3N1cmVEYXRhLmdldENsb3N1cmVJbmZvKG5vZGUpLmNhbGxNZXRob2QpOwogICAgICB9CiAgICAgIExpc3Q8RnVuY3Rpb25FbnRpdHk+IGNhbGxNZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMgPSA8RnVuY3Rpb25FbnRpdHk+W107CiAgICAgIGZvciAoaXIuTG9jYWxGdW5jdGlvbiBub2RlIGluIGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nVHlwZUFyZ3VtZW50cykgewogICAgICAgIGNhbGxNZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMKICAgICAgICAgICAgLmFkZChjbG9zdXJlRGF0YS5nZXRDbG9zdXJlSW5mbyhub2RlKS5jYWxsTWV0aG9kKTsKICAgICAgfQogICAgICBqUnRpTmVlZC5tZXRob2RzTmVlZGluZ1NpZ25hdHVyZS5hZGRBbGwoY2FsbE1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlKTsKICAgICAgalJ0aU5lZWQubWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzCiAgICAgICAgICAuYWRkQWxsKGNhbGxNZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMpOwoKICAgICAgcnRpTmVlZCA9IGpSdGlOZWVkOwogICAgfQoKICAgIE5vU3VjaE1ldGhvZERhdGFJbXBsIG9sZE5vU3VjaE1ldGhvZERhdGEgPSBjbG9zZWRXb3JsZC5ub1N1Y2hNZXRob2REYXRhOwogICAgTm9TdWNoTWV0aG9kRGF0YSBub1N1Y2hNZXRob2REYXRhID0gbmV3IE5vU3VjaE1ldGhvZERhdGFJbXBsKAogICAgICAgIG1hcC50b0JhY2tlbmRGdW5jdGlvblNldChvbGROb1N1Y2hNZXRob2REYXRhLnRocm93aW5nSW1wbHMpLAogICAgICAgIG1hcC50b0JhY2tlbmRGdW5jdGlvblNldChvbGROb1N1Y2hNZXRob2REYXRhLm90aGVySW1wbHMpLAogICAgICAgIG1hcC50b0JhY2tlbmRGdW5jdGlvblNldChvbGROb1N1Y2hNZXRob2REYXRhLmZvcndhcmRpbmdTeW50YXhJbXBscykpOwoKICAgIEpGaWVsZEFuYWx5c2lzIGFsbG9jYXRvckFuYWx5c2lzID0KICAgICAgICBKRmllbGRBbmFseXNpcy5mcm9tKGNsb3NlZFdvcmxkLCBtYXAsIF9vcHRpb25zKTsKCiAgICBBbm5vdGF0aW9uc0RhdGFJbXBsIG9sZEFubm90YXRpb25zRGF0YSA9IGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YTsKICAgIEFubm90YXRpb25zRGF0YSBhbm5vdGF0aW9uc0RhdGEgPSBuZXcgQW5ub3RhdGlvbnNEYXRhSW1wbChfb3B0aW9ucywKICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyTWFwKG9sZEFubm90YXRpb25zRGF0YS5wcmFnbWFBbm5vdGF0aW9ucywgaWRlbnRpdHkpKTsKCiAgICBPdXRwdXRVbml0RGF0YSBvdXRwdXRVbml0RGF0YSA9CiAgICAgICAgX2NvbnZlcnRPdXRwdXRVbml0RGF0YShtYXAsIGtPdXRwdXRVbml0RGF0YSwgY2xvc3VyZURhdGEpOwoKICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlckFjY2Vzcz4gbWVtYmVyQWNjZXNzID0gbWFwLnRvQmFja2VuZE1lbWJlck1hcCgKICAgICAgICBjbG9zZWRXb3JsZC5saXZlTWVtYmVyVXNhZ2UsCiAgICAgICAgKE1lbWJlclVzYWdlIHVzYWdlKSA9PgogICAgICAgICAgICBuZXcgTWVtYmVyQWNjZXNzKHVzYWdlLnJlYWRzLCB1c2FnZS53cml0ZXMsIHVzYWdlLmludm9rZXMpKTsKCiAgICByZXR1cm4gbmV3IEpzQ2xvc2VkV29ybGQoCiAgICAgICAgX2VsZW1lbnRNYXAsCiAgICAgICAgbmF0aXZlRGF0YSwKICAgICAgICBpbnRlcmNlcHRvckRhdGEsCiAgICAgICAgYmFja2VuZFVzYWdlLAogICAgICAgIHJ0aU5lZWQsCiAgICAgICAgYWxsb2NhdG9yQW5hbHlzaXMsCiAgICAgICAgbm9TdWNoTWV0aG9kRGF0YSwKICAgICAgICBpbXBsZW1lbnRlZENsYXNzZXMsCiAgICAgICAgbGl2ZU5hdGl2ZUNsYXNzZXMsCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW5jbHVkZSB0aGUgY2FsbCBtZXRob2Qgd2hlbiB3ZSBjYW4gYWxzbwogICAgICAgIC8vIHJlcHJlc2VudCB0aGUgc3ludGhlc2l6ZWQgY2FsbCBtZXRob2RzIGZvciBzdGF0aWMgYW5kIGluc3RhbmNlIG1ldGhvZAogICAgICAgIC8vIGNsb3N1cml6YXRpb25zLgogICAgICAgIGxpdmVJbnN0YW5jZU1lbWJlcnMgLyouLmFkZEFsbChjYWxsTWV0aG9kcykqLywKICAgICAgICBhc3NpZ25lZEluc3RhbmNlTWVtYmVycywKICAgICAgICBwcm9jZXNzZWRNZW1iZXJzLAogICAgICAgIG1peGluVXNlcywKICAgICAgICB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzLAogICAgICAgIG5ldyBDbGFzc0hpZXJhcmNoeUltcGwoCiAgICAgICAgICAgIF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLCBfY2xhc3NIaWVyYXJjaHlOb2RlcywgX2NsYXNzU2V0cyksCiAgICAgICAgX2Fic3RyYWN0VmFsdWVTdHJhdGVneSwKICAgICAgICBhbm5vdGF0aW9uc0RhdGEsCiAgICAgICAgX2dsb2JhbExvY2Fsc01hcCwKICAgICAgICBjbG9zdXJlRGF0YSwKICAgICAgICBvdXRwdXRVbml0RGF0YSwKICAgICAgICBtZW1iZXJBY2Nlc3MpOwogIH0KCiAgQmFja2VuZFVzYWdlIF9jb252ZXJ0QmFja2VuZFVzYWdlKAogICAgICBKc1RvRnJvbnRlbmRNYXAgbWFwLCBCYWNrZW5kVXNhZ2VJbXBsIGJhY2tlbmRVc2FnZSkgewogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZEZ1bmN0aW9uU2V0KGJhY2tlbmRVc2FnZS5nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcyk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzID0KICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NTZXQoYmFja2VuZFVzYWdlLmdsb2JhbENsYXNzRGVwZW5kZW5jaWVzKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gaGVscGVyRnVuY3Rpb25zVXNlZCA9CiAgICAgICAgbWFwLnRvQmFja2VuZEZ1bmN0aW9uU2V0KGJhY2tlbmRVc2FnZS5oZWxwZXJGdW5jdGlvbnNVc2VkKTsKICAgIFNldDxDbGFzc0VudGl0eT4gaGVscGVyQ2xhc3Nlc1VzZWQgPQogICAgICAgIG1hcC50b0JhY2tlbmRDbGFzc1NldChiYWNrZW5kVXNhZ2UuaGVscGVyQ2xhc3Nlc1VzZWQpOwogICAgU2V0PFJ1bnRpbWVUeXBlVXNlPiBydW50aW1lVHlwZVVzZXMgPQogICAgICAgIGJhY2tlbmRVc2FnZS5ydW50aW1lVHlwZVVzZXMubWFwKChSdW50aW1lVHlwZVVzZSBydW50aW1lVHlwZVVzZSkgewogICAgICByZXR1cm4gbmV3IFJ1bnRpbWVUeXBlVXNlKAogICAgICAgICAgcnVudGltZVR5cGVVc2Uua2luZCwKICAgICAgICAgIG1hcC50b0JhY2tlbmRUeXBlKHJ1bnRpbWVUeXBlVXNlLnJlY2VpdmVyVHlwZSksCiAgICAgICAgICBtYXAudG9CYWNrZW5kVHlwZShydW50aW1lVHlwZVVzZS5hcmd1bWVudFR5cGUpKTsKICAgIH0pLnRvU2V0KCk7CgogICAgcmV0dXJuIG5ldyBCYWNrZW5kVXNhZ2VJbXBsKAogICAgICAgIGdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzOiBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcywKICAgICAgICBnbG9iYWxDbGFzc0RlcGVuZGVuY2llczogZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMsCiAgICAgICAgaGVscGVyRnVuY3Rpb25zVXNlZDogaGVscGVyRnVuY3Rpb25zVXNlZCwKICAgICAgICBoZWxwZXJDbGFzc2VzVXNlZDogaGVscGVyQ2xhc3Nlc1VzZWQsCiAgICAgICAgbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZzoKICAgICAgICAgICAgYmFja2VuZFVzYWdlLm5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcsCiAgICAgICAgbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHk6CiAgICAgICAgICAgIGJhY2tlbmRVc2FnZS5uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSwKICAgICAgICByZXF1aXJlc1ByZWFtYmxlOiBiYWNrZW5kVXNhZ2UucmVxdWlyZXNQcmVhbWJsZSwKICAgICAgICBydW50aW1lVHlwZVVzZXM6IHJ1bnRpbWVUeXBlVXNlcywKICAgICAgICBpc0Z1bmN0aW9uQXBwbHlVc2VkOiBiYWNrZW5kVXNhZ2UuaXNGdW5jdGlvbkFwcGx5VXNlZCwKICAgICAgICBpc01pcnJvcnNVc2VkOiBiYWNrZW5kVXNhZ2UuaXNNaXJyb3JzVXNlZCwKICAgICAgICBpc05vU3VjaE1ldGhvZFVzZWQ6IGJhY2tlbmRVc2FnZS5pc05vU3VjaE1ldGhvZFVzZWQsCiAgICAgICAgaXNIdG1sTG9hZGVkOiBiYWNrZW5kVXNhZ2UuaXNIdG1sTG9hZGVkKTsKICB9CgogIE5hdGl2ZUJhc2ljRGF0YSBfY29udmVydE5hdGl2ZUJhc2ljRGF0YSgKICAgICAgSnNUb0Zyb250ZW5kTWFwIG1hcCwgTmF0aXZlQmFzaWNEYXRhSW1wbCBuYXRpdmVCYXNpY0RhdGEpIHsKICAgIE1hcDxDbGFzc0VudGl0eSwgTmF0aXZlQ2xhc3NUYWc+IG5hdGl2ZUNsYXNzVGFnSW5mbyA9CiAgICAgICAgPENsYXNzRW50aXR5LCBOYXRpdmVDbGFzc1RhZz57fTsKICAgIG5hdGl2ZUJhc2ljRGF0YS5uYXRpdmVDbGFzc1RhZ0luZm8KICAgICAgICAuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzLCBOYXRpdmVDbGFzc1RhZyB0YWcpIHsKICAgICAgbmF0aXZlQ2xhc3NUYWdJbmZvW21hcC50b0JhY2tlbmRDbGFzcyhjbHMpXSA9IHRhZzsKICAgIH0pOwogICAgTWFwPExpYnJhcnlFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wTGlicmFyaWVzID0KICAgICAgICBtYXAudG9CYWNrZW5kTGlicmFyeU1hcChuYXRpdmVCYXNpY0RhdGEuanNJbnRlcm9wTGlicmFyaWVzLCBpZGVudGl0eSk7CiAgICBNYXA8Q2xhc3NFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wQ2xhc3NlcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzTWFwKG5hdGl2ZUJhc2ljRGF0YS5qc0ludGVyb3BDbGFzc2VzLCBpZGVudGl0eSk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGFub255bW91c0pzSW50ZXJvcENsYXNzZXMgPQogICAgICAgIG1hcC50b0JhY2tlbmRDbGFzc1NldChuYXRpdmVCYXNpY0RhdGEuYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlcyk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcE1lbWJlcnMgPQogICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJNYXAobmF0aXZlQmFzaWNEYXRhLmpzSW50ZXJvcE1lbWJlcnMsIGlkZW50aXR5KTsKICAgIHJldHVybiBuZXcgTmF0aXZlQmFzaWNEYXRhSW1wbCgKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIG5hdGl2ZUNsYXNzVGFnSW5mbywKICAgICAgICBqc0ludGVyb3BMaWJyYXJpZXMsCiAgICAgICAganNJbnRlcm9wQ2xhc3NlcywKICAgICAgICBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLAogICAgICAgIGpzSW50ZXJvcE1lbWJlcnMpOwogIH0KCiAgTmF0aXZlRGF0YSBfY29udmVydE5hdGl2ZURhdGEoCiAgICAgIEpzVG9Gcm9udGVuZE1hcCBtYXAsIE5hdGl2ZURhdGFJbXBsIG5hdGl2ZURhdGEpIHsKICAgIGNvbnZlcnROYXRpdmVCZWhhdmlvclR5cGUodHlwZSkgewogICAgICBpZiAodHlwZSBpcyBEYXJ0VHlwZSkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIGZyZWUgdmFyaWFibGVzIGluIHR5cGVzLiBJZiB0aGUgdHlwZQogICAgICAgIC8vIHB1bGxlZCBmcm9tIGEgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGl0IG1pZ2h0IGNvbnRhaW4gYSBmdW5jdGlvbgogICAgICAgIC8vIHR5cGUgdmFyaWFibGUgdGhhdCBzaG91bGQgcHJvYmFibHkgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGl0cyBib3VuZC4KICAgICAgICByZXR1cm4gbWFwLnRvQmFja2VuZFR5cGUodHlwZSwgYWxsb3dGcmVlVmFyaWFibGVzOiB0cnVlKTsKICAgICAgfQogICAgICBhc3NlcnQodHlwZSBpcyBTcGVjaWFsVHlwZSk7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQoKICAgIE5hdGl2ZUJlaGF2aW9yIGNvbnZlcnROYXRpdmVCZWhhdmlvcihOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgICBOYXRpdmVCZWhhdmlvciBuZXdCZWhhdmlvciA9IG5ldyBOYXRpdmVCZWhhdmlvcigpOwoKICAgICAgZm9yIChkeW5hbWljIHR5cGUgaW4gYmVoYXZpb3IudHlwZXNSZXR1cm5lZCkgewogICAgICAgIG5ld0JlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkKGNvbnZlcnROYXRpdmVCZWhhdmlvclR5cGUodHlwZSkpOwogICAgICB9CiAgICAgIGZvciAoZHluYW1pYyB0eXBlIGluIGJlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgbmV3QmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQuYWRkKGNvbnZlcnROYXRpdmVCZWhhdmlvclR5cGUodHlwZSkpOwogICAgICB9CgogICAgICBuZXdCZWhhdmlvci5jb2RlVGVtcGxhdGVUZXh0ID0gYmVoYXZpb3IuY29kZVRlbXBsYXRlVGV4dDsKICAgICAgbmV3QmVoYXZpb3IuY29kZVRlbXBsYXRlID0gYmVoYXZpb3IuY29kZVRlbXBsYXRlOwogICAgICBuZXdCZWhhdmlvci50aHJvd0JlaGF2aW9yID0gYmVoYXZpb3IudGhyb3dCZWhhdmlvcjsKICAgICAgbmV3QmVoYXZpb3IuaXNBbGxvY2F0aW9uID0gYmVoYXZpb3IuaXNBbGxvY2F0aW9uOwogICAgICBuZXdCZWhhdmlvci51c2VHdm4gPSBiZWhhdmlvci51c2VHdm47CiAgICAgIHJldHVybiBuZXdCZWhhdmlvcjsKICAgIH0KCiAgICBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlQmFzaWNEYXRhID0gX2NvbnZlcnROYXRpdmVCYXNpY0RhdGEobWFwLCBuYXRpdmVEYXRhKTsKCiAgICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IG5hdGl2ZU1lbWJlck5hbWUgPQogICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJNYXAobmF0aXZlRGF0YS5uYXRpdmVNZW1iZXJOYW1lLCBpZGVudGl0eSk7CiAgICBNYXA8RnVuY3Rpb25FbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVNZXRob2RCZWhhdmlvciA9CiAgICAgICAgPEZ1bmN0aW9uRW50aXR5LCBOYXRpdmVCZWhhdmlvcj57fTsKICAgIG5hdGl2ZURhdGEubmF0aXZlTWV0aG9kQmVoYXZpb3IKICAgICAgICAuZm9yRWFjaCgoRnVuY3Rpb25FbnRpdHkgbWV0aG9kLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgICBGdW5jdGlvbkVudGl0eSBiYWNrZW5kTWV0aG9kID0gbWFwLnRvQmFja2VuZE1lbWJlcihtZXRob2QpOwogICAgICBpZiAoYmFja2VuZE1ldGhvZCAhPSBudWxsKSB7CiAgICAgICAgLy8gSWYgW21ldGhvZF0gaXNuJ3QgdXNlZCBpdCBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQKICAgICAgICAvLyBtZXRob2QuCiAgICAgICAgbmF0aXZlTWV0aG9kQmVoYXZpb3JbYmFja2VuZE1ldGhvZF0gPSBjb252ZXJ0TmF0aXZlQmVoYXZpb3IoYmVoYXZpb3IpOwogICAgICB9CiAgICB9KTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciA9CiAgICAgICAgbWFwLnRvQmFja2VuZE1lbWJlck1hcCgKICAgICAgICAgICAgbmF0aXZlRGF0YS5uYXRpdmVGaWVsZExvYWRCZWhhdmlvciwgY29udmVydE5hdGl2ZUJlaGF2aW9yKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IgPQogICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJNYXAoCiAgICAgICAgICAgIG5hdGl2ZURhdGEubmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yLCBjb252ZXJ0TmF0aXZlQmVoYXZpb3IpOwogICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRhSW1wbCgKICAgICAgICBuYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgbmF0aXZlTWVtYmVyTmFtZSwKICAgICAgICBuYXRpdmVNZXRob2RCZWhhdmlvciwKICAgICAgICBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciwKICAgICAgICBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IpOwogIH0KCiAgSW50ZXJjZXB0b3JEYXRhIF9jb252ZXJ0SW50ZXJjZXB0b3JEYXRhKEpzVG9Gcm9udGVuZE1hcCBtYXAsCiAgICAgIE5hdGl2ZURhdGEgbmF0aXZlRGF0YSwgSW50ZXJjZXB0b3JEYXRhSW1wbCBpbnRlcmNlcHRvckRhdGEpIHsKICAgIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJFbnRpdHk+PiBpbnRlcmNlcHRlZE1lbWJlcnMgPQogICAgICAgIDxTdHJpbmcsIFNldDxNZW1iZXJFbnRpdHk+Pnt9OwogICAgaW50ZXJjZXB0b3JEYXRhLmludGVyY2VwdGVkTWVtYmVycwogICAgICAgIC5mb3JFYWNoKChTdHJpbmcgbmFtZSwgU2V0PE1lbWJlckVudGl0eT4gbWVtYmVycykgewogICAgICBpbnRlcmNlcHRlZE1lbWJlcnNbbmFtZV0gPSBtYXAudG9CYWNrZW5kTWVtYmVyU2V0KG1lbWJlcnMpOwogICAgfSk7CiAgICByZXR1cm4gbmV3IEludGVyY2VwdG9yRGF0YUltcGwoCiAgICAgICAgbmF0aXZlRGF0YSwKICAgICAgICBfY29tbW9uRWxlbWVudHMsCiAgICAgICAgaW50ZXJjZXB0ZWRNZW1iZXJzLAogICAgICAgIG1hcC50b0JhY2tlbmRDbGFzc1NldChpbnRlcmNlcHRvckRhdGEuaW50ZXJjZXB0ZWRDbGFzc2VzKSwKICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NTZXQoCiAgICAgICAgICAgIGludGVyY2VwdG9yRGF0YS5jbGFzc2VzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2VzKSk7CiAgfQoKICBSdW50aW1lVHlwZXNOZWVkIF9jb252ZXJ0UnVudGltZVR5cGVzTmVlZChKc1RvRnJvbnRlbmRNYXAgbWFwLAogICAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlLCBSdW50aW1lVHlwZXNOZWVkSW1wbCBydGlOZWVkKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzU2V0KHJ0aU5lZWQuY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzID0KICAgICAgICBtYXAudG9CYWNrZW5kRnVuY3Rpb25TZXQocnRpTmVlZC5tZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZSA9CiAgICAgICAgbWFwLnRvQmFja2VuZEZ1bmN0aW9uU2V0KHJ0aU5lZWQubWV0aG9kc05lZWRpbmdTaWduYXR1cmUpOwogICAgU2V0PFNlbGVjdG9yPiBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgcnRpTmVlZC5zZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cy5tYXAoKFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICAgIGlmIChzZWxlY3Rvci5tZW1iZXJOYW1lLmlzUHJpdmF0ZSkgewogICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IoCiAgICAgICAgICAgIHNlbGVjdG9yLmtpbmQsCiAgICAgICAgICAgIG5ldyBQcml2YXRlTmFtZShzZWxlY3Rvci5tZW1iZXJOYW1lLnRleHQsCiAgICAgICAgICAgICAgICBtYXAudG9CYWNrZW5kTGlicmFyeShzZWxlY3Rvci5tZW1iZXJOYW1lLmxpYnJhcnkpLAogICAgICAgICAgICAgICAgaXNTZXR0ZXI6IHNlbGVjdG9yLm1lbWJlck5hbWUuaXNTZXR0ZXIpLAogICAgICAgICAgICBzZWxlY3Rvci5jYWxsU3RydWN0dXJlKTsKICAgICAgfQogICAgICByZXR1cm4gc2VsZWN0b3I7CiAgICB9KS50b1NldCgpOwogICAgcmV0dXJuIG5ldyBSdW50aW1lVHlwZXNOZWVkSW1wbCgKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgICBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZSwKICAgICAgICBtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgICAgbnVsbCwKICAgICAgICBudWxsLAogICAgICAgIHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgIHJ0aU5lZWQuaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cyk7CiAgfQoKICAvLy8gQ29uc3RydWN0IGEgY2xvc3VyZSBjbGFzcyBhbmQgc2V0IHVwIHRoZSBuZWNlc3NhcnkgY2xhc3MgaW5mZXJlbmNlCiAgLy8vIGhpZXJhcmNoeS4KICBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGJ1aWxkQ2xvc3VyZUNsYXNzKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBpci5GdW5jdGlvbk5vZGUgb3JpZ2luYWxDbG9zdXJlRnVuY3Rpb25Ob2RlLAogICAgICBKTGlicmFyeSBlbmNsb3NpbmdMaWJyYXJ5LAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMsCiAgICAgIEtlcm5lbFNjb3BlSW5mbyBpbmZvLAogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAsCiAgICAgIHtib29sIGNyZWF0ZVNpZ25hdHVyZU1ldGhvZH0pIHsKICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzOwoKICAgIEtlcm5lbENsb3N1cmVDbGFzc0luZm8gY2xvc3VyZUNsYXNzSW5mbyA9IF9lbGVtZW50TWFwLmNvbnN0cnVjdENsb3N1cmVDbGFzcygKICAgICAgICBtZW1iZXIsCiAgICAgICAgb3JpZ2luYWxDbG9zdXJlRnVuY3Rpb25Ob2RlLAogICAgICAgIGVuY2xvc2luZ0xpYnJhcnksCiAgICAgICAgYm94ZWRWYXJpYWJsZXMsCiAgICAgICAgaW5mbywKICAgICAgICBsb2NhbHNNYXAsCiAgICAgICAgbmV3IEludGVyZmFjZVR5cGUoc3VwZXJjbGFzcywgY29uc3QgW10pLAogICAgICAgIGNyZWF0ZVNpZ25hdHVyZU1ldGhvZDogY3JlYXRlU2lnbmF0dXJlTWV0aG9kKTsKCiAgICAvLyBUZWxsIHRoZSBoaWVyYXJjaHkgdGhhdCB0aGlzIGlzIHRoZSBzdXBlciBjbGFzcy4gdGhlbiB3ZSBjYW4gdXNlCiAgICAvLyAuZ2V0U3VwZXJ0eXBlcyhjbGFzcykKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBwYXJlbnROb2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbc3VwZXJjbGFzc107CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IG5ldyBDbGFzc0hpZXJhcmNoeU5vZGUocGFyZW50Tm9kZSwKICAgICAgICBjbG9zdXJlQ2xhc3NJbmZvLmNsb3N1cmVDbGFzc0VudGl0eSwgcGFyZW50Tm9kZS5oaWVyYXJjaHlEZXB0aCArIDEpOwogICAgX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xvc3VyZUNsYXNzSW5mby5jbG9zdXJlQ2xhc3NFbnRpdHldID0gbm9kZTsKICAgIF9jbGFzc1NldHNbY2xvc3VyZUNsYXNzSW5mby5jbG9zdXJlQ2xhc3NFbnRpdHldID0gbmV3IENsYXNzU2V0KG5vZGUpOwogICAgbm9kZS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkID0gdHJ1ZTsKCiAgICByZXR1cm4gY2xvc3VyZUNsYXNzSW5mbzsKICB9CgogIE91dHB1dFVuaXREYXRhIF9jb252ZXJ0T3V0cHV0VW5pdERhdGEoSnNUb0Zyb250ZW5kTWFwSW1wbCBtYXAsCiAgICAgIE91dHB1dFVuaXREYXRhIGRhdGEsIENsb3N1cmVEYXRhIGNsb3N1cmVEYXRhTG9va3VwKSB7CiAgICAvLyBDb252ZXJ0IGZyb250LWVuZCBtYXBzIGNvbnRhaW5pbmcgSy1jbGFzcyBhbmQgSy1sb2NhbCBmdW5jdGlvbiBrZXlzIHRvIGEKICAgIC8vIGJhY2tlbmQgbWFwIHVzaW5nIEotY2xhc3NlcyBhcyBrZXlzLgogICAgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiBjb252ZXJ0Q2xhc3NNYXAoCiAgICAgICAgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiBjbGFzc01hcCwKICAgICAgICBNYXA8TG9jYWwsIE91dHB1dFVuaXQ+IGxvY2FsRnVuY3Rpb25NYXApIHsKICAgICAgdmFyIHJlc3VsdCA9IDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD57fTsKICAgICAgY2xhc3NNYXAuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgZW50aXR5LCBPdXRwdXRVbml0IHVuaXQpIHsKICAgICAgICBDbGFzc0VudGl0eSBiYWNrZW5kRW50aXR5ID0gbWFwLnRvQmFja2VuZENsYXNzKGVudGl0eSk7CiAgICAgICAgaWYgKGJhY2tlbmRFbnRpdHkgIT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgW2VudGl0eV0gaXNuJ3QgdXNlZCBpdCBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQKICAgICAgICAgIC8vIGVudGl0eS4KICAgICAgICAgIHJlc3VsdFtiYWNrZW5kRW50aXR5XSA9IHVuaXQ7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgbG9jYWxGdW5jdGlvbk1hcC5mb3JFYWNoKChMb2NhbCBlbnRpdHksIE91dHB1dFVuaXQgdW5pdCkgewogICAgICAgIC8vIEVuc3VyZSBjbG9zdXJlIGNsYXNzZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgdW5pdCBjb3JyZXNwb25kaW5nCiAgICAgICAgLy8gdG8gdGhlIGxvY2FsIGZ1bmN0aW9uLgogICAgICAgIGlmIChlbnRpdHkgaXMgS0xvY2FsRnVuY3Rpb24pIHsKICAgICAgICAgIHZhciBjbG9zdXJlSW5mbyA9IGNsb3N1cmVEYXRhTG9va3VwLmdldENsb3N1cmVJbmZvKGVudGl0eS5ub2RlKTsKICAgICAgICAgIHJlc3VsdFtjbG9zdXJlSW5mby5jbG9zdXJlQ2xhc3NFbnRpdHldID0gdW5pdDsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIC8vIENvbnZlcnQgZnJvbnQtZW5kIG1hcHMgY29udGFpbmluZyBLLW1lbWJlciBhbmQgSy1sb2NhbCBmdW5jdGlvbiBrZXlzIHRvCiAgICAvLyBhIGJhY2tlbmQgbWFwIHVzaW5nIEotbWVtYmVycyBhcyBrZXlzLgogICAgTWFwPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD4gY29udmVydE1lbWJlck1hcCgKICAgICAgICBNYXA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0PiBtZW1iZXJNYXAsCiAgICAgICAgTWFwPExvY2FsLCBPdXRwdXRVbml0PiBsb2NhbEZ1bmN0aW9uTWFwKSB7CiAgICAgIHZhciByZXN1bHQgPSA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0Pnt9OwogICAgICBtZW1iZXJNYXAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IGVudGl0eSwgT3V0cHV0VW5pdCB1bml0KSB7CiAgICAgICAgTWVtYmVyRW50aXR5IGJhY2tlbmRFbnRpdHkgPSBtYXAudG9CYWNrZW5kTWVtYmVyKGVudGl0eSk7CiAgICAgICAgaWYgKGJhY2tlbmRFbnRpdHkgIT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgW2VudGl0eV0gaXNuJ3QgdXNlZCBpdCBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQKICAgICAgICAgIC8vIGVudGl0eS4KICAgICAgICAgIHJlc3VsdFtiYWNrZW5kRW50aXR5XSA9IHVuaXQ7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgbG9jYWxGdW5jdGlvbk1hcC5mb3JFYWNoKChMb2NhbCBlbnRpdHksIE91dHB1dFVuaXQgdW5pdCkgewogICAgICAgIC8vIEVuc3VyZSBjbG9zdXJlIGNhbGwtbWV0aG9kcyBhcmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCB1bml0CiAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgbG9jYWwgZnVuY3Rpb24uCiAgICAgICAgaWYgKGVudGl0eSBpcyBLTG9jYWxGdW5jdGlvbikgewogICAgICAgICAgdmFyIGNsb3N1cmVJbmZvID0gY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2xvc3VyZUluZm8oZW50aXR5Lm5vZGUpOwogICAgICAgICAgcmVzdWx0W2Nsb3N1cmVJbmZvLmNhbGxNZXRob2RdID0gdW5pdDsKICAgICAgICAgIGlmIChjbG9zdXJlSW5mby5zaWduYXR1cmVNZXRob2QgIT0gbnVsbCkgewogICAgICAgICAgICByZXN1bHRbY2xvc3VyZUluZm8uc2lnbmF0dXJlTWV0aG9kXSA9IHVuaXQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICByZXR1cm4gbmV3IE91dHB1dFVuaXREYXRhLmZyb20oCiAgICAgICAgZGF0YSwKICAgICAgICBtYXAudG9CYWNrZW5kTGlicmFyeSwKICAgICAgICBjb252ZXJ0Q2xhc3NNYXAsCiAgICAgICAgY29udmVydE1lbWJlck1hcCwKICAgICAgICAobSkgPT4gY29udmVydE1hcDxDb25zdGFudFZhbHVlLCBPdXRwdXRVbml0LCBPdXRwdXRVbml0PigKICAgICAgICAgICAgbSwgbWFwLnRvQmFja2VuZENvbnN0YW50LCAodikgPT4gdikpOwogIH0KfQoKY2xhc3MgVHJpdmlhbENsb3N1cmVSdGlOZWVkIGltcGxlbWVudHMgQ2xvc3VyZVJ0aU5lZWQgewogIGNvbnN0IFRyaXZpYWxDbG9zdXJlUnRpTmVlZCgpOwoKICBAb3ZlcnJpZGUKICBib29sIGxvY2FsRnVuY3Rpb25OZWVkc1NpZ25hdHVyZShpci5Ob2RlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBtZXRob2QpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgbG9jYWxGdW5jdGlvbk5lZWRzVHlwZUFyZ3VtZW50cyhpci5Ob2RlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoU2VsZWN0b3Igc2VsZWN0b3IpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgbWV0aG9kTmVlZHNTaWduYXR1cmUoTWVtYmVyRW50aXR5IG1ldGhvZCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnN0YW50aWF0aW9uTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICAgICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQpID0+CiAgICAgIHRydWU7Cn0KCmNsYXNzIEpzQ2xvc3VyZVJ0aU5lZWQgaW1wbGVtZW50cyBDbG9zdXJlUnRpTmVlZCB7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZCBydGlOZWVkOwogIGZpbmFsIFNldDxpci5Mb2NhbEZ1bmN0aW9uPiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHM7CiAgZmluYWwgU2V0PGlyLkxvY2FsRnVuY3Rpb24+IGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nU2lnbmF0dXJlOwoKICBKc0Nsb3N1cmVSdGlOZWVkKHRoaXMucnRpTmVlZCwgdGhpcy5sb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMubG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdTaWduYXR1cmUpOwoKICBAb3ZlcnJpZGUKICBib29sIGxvY2FsRnVuY3Rpb25OZWVkc1NpZ25hdHVyZShpci5Mb2NhbEZ1bmN0aW9uIG5vZGUpIHsKICAgIHJldHVybiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZS5jb250YWlucyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKSA9PgogICAgICBydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscyk7CgogIEBvdmVycmlkZQogIGJvb2wgbWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgPT4KICAgICAgcnRpTmVlZC5tZXRob2ROZWVkc1R5cGVBcmd1bWVudHMobWV0aG9kKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBsb2NhbEZ1bmN0aW9uTmVlZHNUeXBlQXJndW1lbnRzKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSkgewogICAgcmV0dXJuIGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoU2VsZWN0b3Igc2VsZWN0b3IpID0+CiAgICAgIHJ0aU5lZWQuc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoc2VsZWN0b3IpOwoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzU2lnbmF0dXJlKE1lbWJlckVudGl0eSBtZXRob2QpID0+CiAgICAgIHJ0aU5lZWQubWV0aG9kTmVlZHNTaWduYXR1cmUobWV0aG9kKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnN0YW50aWF0aW9uTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICAgICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQpID0+CiAgICAgIHJ0aU5lZWQuaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cyhmdW5jdGlvblR5cGUsIHR5cGVBcmd1bWVudENvdW50KTsKfQoKLy8vIE1hcCBmcm9tICdmcm9udGVuZCcgdG8gJ2JhY2tlbmQnIGVsZW1lbnRzLgovLy8KLy8vIEZyb250ZW5kIGVsZW1lbnRzIGFyZSB3aGF0IHdlIHJlYWQgaW4sIHRoZXNlIHR5cGljYWxseSByZXByZXNlbnRzIGNvbmNlcHRzCi8vLyBpbiBEYXJ0LiBCYWNrZW5kIGVsZW1lbnRzIGFyZSB3aGF0IHdlIGdlbmVyYXRlLCB0aGVzZSBtYXkgaW5jbHVkZSBlbGVtZW50cwovLy8gdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhIERhcnQgY29uY2VwdCwgc3VjaCBhcyBjbG9zdXJlIGNsYXNzZXMuCi8vLwovLy8gUXVlcnlpbmcgZm9yIHRoZSBmcm9udGVuZCBlbGVtZW50IGZvciBhIGJhY2tlbmQtb25seSBlbGVtZW50IHRocm93cyBhbgovLy8gZXhjZXB0aW9uLgphYnN0cmFjdCBjbGFzcyBKc1RvRnJvbnRlbmRNYXAgewogIExpYnJhcnlFbnRpdHkgdG9CYWNrZW5kTGlicmFyeShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICBDbGFzc0VudGl0eSB0b0JhY2tlbmRDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgYmFja2VuZCBtZW1iZXIgY29ycmVzcG9uZGluZyB0byBbbWVtYmVyXS4gSWYgYSBtZW1iZXIgaXNuJ3QKICAvLy8gbGl2ZSwgaXQgZG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBiYWNrZW5kIG1lbWJlciBhbmQgYG51bGxgIGlzCiAgLy8vIHJldHVybmVkIGluc3RlYWQuCiAgTWVtYmVyRW50aXR5IHRvQmFja2VuZE1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgRGFydFR5cGUgdG9CYWNrZW5kVHlwZShEYXJ0VHlwZSB0eXBlLCB7Ym9vbCBhbGxvd0ZyZWVWYXJpYWJsZXM6IGZhbHNlfSk7CgogIENvbnN0YW50VmFsdWUgdG9CYWNrZW5kQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSB2YWx1ZSwge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICBTZXQ8TGlicmFyeUVudGl0eT4gdG9CYWNrZW5kTGlicmFyeVNldChJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBzZXQpIHsKICAgIHJldHVybiBzZXQubWFwKHRvQmFja2VuZExpYnJhcnkpLnRvU2V0KCk7CiAgfQoKICBTZXQ8Q2xhc3NFbnRpdHk+IHRvQmFja2VuZENsYXNzU2V0KEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzZXQpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpbHRlciB1bnVzZWQgY2xhc3Nlcy4KICAgIHJldHVybiBzZXQubWFwKHRvQmFja2VuZENsYXNzKS50b1NldCgpOwogIH0KCiAgU2V0PE1lbWJlckVudGl0eT4gdG9CYWNrZW5kTWVtYmVyU2V0KEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gc2V0KSB7CiAgICByZXR1cm4gc2V0Lm1hcCh0b0JhY2tlbmRNZW1iZXIpLndoZXJlKChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIC8vIE1lbWJlcnMgdGhhdCBhcmUgbm90IGxpdmUgZG9uJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYmFja2VuZCBtZW1iZXIuCiAgICAgIHJldHVybiBtZW1iZXIgIT0gbnVsbDsKICAgIH0pLnRvU2V0KCk7CiAgfQoKICBTZXQ8RmllbGRFbnRpdHk+IHRvQmFja2VuZEZpZWxkU2V0KEl0ZXJhYmxlPEZpZWxkRW50aXR5PiBzZXQpIHsKICAgIFNldDxGaWVsZEVudGl0eT4gbmV3U2V0ID0gbmV3IFNldDxGaWVsZEVudGl0eT4oKTsKICAgIGZvciAoRmllbGRFbnRpdHkgZWxlbWVudCBpbiBzZXQpIHsKICAgICAgRmllbGRFbnRpdHkgYmFja2VuZEZpZWxkID0gdG9CYWNrZW5kTWVtYmVyKGVsZW1lbnQpOwogICAgICBpZiAoYmFja2VuZEZpZWxkICE9IG51bGwpIHsKICAgICAgICAvLyBNZW1iZXJzIHRoYXQgYXJlIG5vdCBsaXZlIGRvbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQgbWVtYmVyLgogICAgICAgIG5ld1NldC5hZGQoYmFja2VuZEZpZWxkKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ld1NldDsKICB9CgogIFNldDxGdW5jdGlvbkVudGl0eT4gdG9CYWNrZW5kRnVuY3Rpb25TZXQoSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IHNldCkgewogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBuZXdTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwogICAgZm9yIChGdW5jdGlvbkVudGl0eSBlbGVtZW50IGluIHNldCkgewogICAgICBGdW5jdGlvbkVudGl0eSBiYWNrZW5kRnVuY3Rpb24gPSB0b0JhY2tlbmRNZW1iZXIoZWxlbWVudCk7CiAgICAgIGlmIChiYWNrZW5kRnVuY3Rpb24gIT0gbnVsbCkgewogICAgICAgIC8vIE1lbWJlcnMgdGhhdCBhcmUgbm90IGxpdmUgZG9uJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYmFja2VuZCBtZW1iZXIuCiAgICAgICAgbmV3U2V0LmFkZChiYWNrZW5kRnVuY3Rpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3U2V0OwogIH0KCiAgTWFwPExpYnJhcnlFbnRpdHksIFY+IHRvQmFja2VuZExpYnJhcnlNYXA8Vj4oCiAgICAgIE1hcDxMaWJyYXJ5RW50aXR5LCBWPiBtYXAsIFYgY29udmVydChWIHZhbHVlKSkgewogICAgcmV0dXJuIGNvbnZlcnRNYXAobWFwLCB0b0JhY2tlbmRMaWJyYXJ5LCBjb252ZXJ0KTsKICB9CgogIE1hcDxDbGFzc0VudGl0eSwgVj4gdG9CYWNrZW5kQ2xhc3NNYXA8Vj4oCiAgICAgIE1hcDxDbGFzc0VudGl0eSwgVj4gbWFwLCBWIGNvbnZlcnQoViB2YWx1ZSkpIHsKICAgIHJldHVybiBjb252ZXJ0TWFwKG1hcCwgdG9CYWNrZW5kQ2xhc3MsIGNvbnZlcnQpOwogIH0KCiAgTWFwPE1lbWJlckVudGl0eSwgVjI+IHRvQmFja2VuZE1lbWJlck1hcDxWMSwgVjI+KAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBWMT4gbWFwLCBWMiBjb252ZXJ0KFYxIHZhbHVlKSkgewogICAgcmV0dXJuIGNvbnZlcnRNYXAobWFwLCB0b0JhY2tlbmRNZW1iZXIsIGNvbnZlcnQpOwogIH0KfQoKRSBpZGVudGl0eTxFPihFIGVsZW1lbnQpID0+IGVsZW1lbnQ7CgpNYXA8SywgVjI+IGNvbnZlcnRNYXA8SywgVjEsIFYyPigKICAgIE1hcDxLLCBWMT4gbWFwLCBLIGNvbnZlcnRLZXkoSyBrZXkpLCBWMiBjb252ZXJ0VmFsdWUoVjEgdmFsdWUpKSB7CiAgTWFwPEssIFYyPiBuZXdNYXAgPSA8SywgVjI+e307CiAgbWFwLmZvckVhY2goKEsga2V5LCBWMSB2YWx1ZSkgewogICAgSyBuZXdLZXkgPSBjb252ZXJ0S2V5KGtleSk7CiAgICBWMiBuZXdWYWx1ZSA9IGNvbnZlcnRWYWx1ZSh2YWx1ZSk7CiAgICBpZiAobmV3S2V5ICE9IG51bGwgJiYgbmV3VmFsdWUgIT0gbnVsbCkgewogICAgICAvLyBFbnRpdGllcyB0aGF0IGFyZSBub3QgdXNlZCBkb24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBiYWNrZW5kIGVudGl0eS4KICAgICAgbmV3TWFwW25ld0tleV0gPSBuZXdWYWx1ZTsKICAgIH0KICB9KTsKICByZXR1cm4gbmV3TWFwOwp9CgpjbGFzcyBKc1RvRnJvbnRlbmRNYXBJbXBsIGV4dGVuZHMgSnNUb0Zyb250ZW5kTWFwIHsKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBfYmFja2VuZDsKCiAgSnNUb0Zyb250ZW5kTWFwSW1wbCh0aGlzLl9iYWNrZW5kKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdG9CYWNrZW5kVHlwZShEYXJ0VHlwZSB0eXBlLCB7Ym9vbCBhbGxvd0ZyZWVWYXJpYWJsZXM6IGZhbHNlfSkgPT4KICAgICAgdHlwZSA9PSBudWxsCiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogbmV3IF9UeXBlQ29udmVydGVyKGFsbG93RnJlZVZhcmlhYmxlczogYWxsb3dGcmVlVmFyaWFibGVzKQogICAgICAgICAgICAgIC52aXNpdCh0eXBlLCB0b0JhY2tlbmRFbnRpdHkpOwoKICBFbnRpdHkgdG9CYWNrZW5kRW50aXR5KEVudGl0eSBlbnRpdHkpIHsKICAgIGlmIChlbnRpdHkgaXMgQ2xhc3NFbnRpdHkpIHJldHVybiB0b0JhY2tlbmRDbGFzcyhlbnRpdHkpOwogICAgaWYgKGVudGl0eSBpcyBNZW1iZXJFbnRpdHkpIHJldHVybiB0b0JhY2tlbmRNZW1iZXIoZW50aXR5KTsKICAgIGlmIChlbnRpdHkgaXMgVHlwZWRlZkVudGl0eSkgcmV0dXJuIHRvQmFja2VuZFR5cGVkZWYoZW50aXR5KTsKICAgIGlmIChlbnRpdHkgaXMgVHlwZVZhcmlhYmxlRW50aXR5KSB7CiAgICAgIHJldHVybiB0b0JhY2tlbmRUeXBlVmFyaWFibGUoZW50aXR5KTsKICAgIH0KICAgIGFzc2VydChlbnRpdHkgaXMgTGlicmFyeUVudGl0eSwgJ3VuZXhwZWN0ZWQgZW50aXR5ICR7ZW50aXR5LnJ1bnRpbWVUeXBlfScpOwogICAgcmV0dXJuIHRvQmFja2VuZExpYnJhcnkoZW50aXR5KTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgdG9CYWNrZW5kTGlicmFyeShjb3ZhcmlhbnQgSW5kZXhlZExpYnJhcnkgbGlicmFyeSkgewogICAgcmV0dXJuIF9iYWNrZW5kLmxpYnJhcmllcy5nZXRFbnRpdHkobGlicmFyeS5saWJyYXJ5SW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgdG9CYWNrZW5kQ2xhc3MoY292YXJpYW50IEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIHJldHVybiBfYmFja2VuZC5jbGFzc2VzLmdldEVudGl0eShjbHMuY2xhc3NJbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgdG9CYWNrZW5kTWVtYmVyKGNvdmFyaWFudCBJbmRleGVkTWVtYmVyIG1lbWJlcikgewogICAgcmV0dXJuIF9iYWNrZW5kLm1lbWJlcnMuZ2V0RW50aXR5KG1lbWJlci5tZW1iZXJJbmRleCk7CiAgfQoKICBUeXBlZGVmRW50aXR5IHRvQmFja2VuZFR5cGVkZWYoY292YXJpYW50IEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYpIHsKICAgIHJldHVybiBfYmFja2VuZC50eXBlZGVmcy5nZXRFbnRpdHkodHlwZWRlZi50eXBlZGVmSW5kZXgpOwogIH0KCiAgVHlwZVZhcmlhYmxlRW50aXR5IHRvQmFja2VuZFR5cGVWYXJpYWJsZShUeXBlVmFyaWFibGVFbnRpdHkgdHlwZVZhcmlhYmxlKSB7CiAgICBpZiAodHlwZVZhcmlhYmxlIGlzIEtMb2NhbFR5cGVWYXJpYWJsZSkgewogICAgICBmYWlsZWRBdCgKICAgICAgICAgIHR5cGVWYXJpYWJsZSwgIkxvY2FsIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzIGFyZSBub3Qgc3VwcG9ydGVkLiIpOwogICAgfQogICAgSW5kZXhlZFR5cGVWYXJpYWJsZSBpbmRleGVkVHlwZVZhcmlhYmxlID0gdHlwZVZhcmlhYmxlOwogICAgcmV0dXJuIF9iYWNrZW5kLnR5cGVWYXJpYWJsZXMKICAgICAgICAuZ2V0RW50aXR5KGluZGV4ZWRUeXBlVmFyaWFibGUudHlwZVZhcmlhYmxlSW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB0b0JhY2tlbmRDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHsKICAgICAgaWYgKCFhbGxvd051bGwpIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignTnVsbCBub3QgYWxsb3dlZCBhcyBjb25zdGFudCB2YWx1ZS4nKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBjb25zdGFudC5hY2NlcHQobmV3IF9Db25zdGFudENvbnZlcnRlcih0b0JhY2tlbmRFbnRpdHkpLCBudWxsKTsKICB9Cn0KCnR5cGVkZWYgRW50aXR5IF9FbnRpdHlDb252ZXJ0ZXIoRW50aXR5IGNscyk7CgpjbGFzcyBfVHlwZUNvbnZlcnRlciBpbXBsZW1lbnRzIERhcnRUeXBlVmlzaXRvcjxEYXJ0VHlwZSwgX0VudGl0eUNvbnZlcnRlcj4gewogIGZpbmFsIGJvb2wgYWxsb3dGcmVlVmFyaWFibGVzOwoKICBNYXA8RnVuY3Rpb25UeXBlVmFyaWFibGUsIEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBfZnVuY3Rpb25UeXBlVmFyaWFibGVzID0KICAgICAgPEZ1bmN0aW9uVHlwZVZhcmlhYmxlLCBGdW5jdGlvblR5cGVWYXJpYWJsZT57fTsKCiAgX1R5cGVDb252ZXJ0ZXIoe3RoaXMuYWxsb3dGcmVlVmFyaWFibGVzOiBmYWxzZX0pOwoKICBMaXN0PERhcnRUeXBlPiBjb252ZXJ0VHlwZXMoCiAgICAgICAgICBMaXN0PERhcnRUeXBlPiB0eXBlcywgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpID0+CiAgICAgIHZpc2l0TGlzdCh0eXBlcywgY29udmVydGVyKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXQoRGFydFR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIHJldHVybiB0eXBlLmFjY2VwdCh0aGlzLCBjb252ZXJ0ZXIpOwogIH0KCiAgTGlzdDxEYXJ0VHlwZT4gdmlzaXRMaXN0KExpc3Q8RGFydFR5cGU+IHR5cGVzLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgTGlzdDxEYXJ0VHlwZT4gbGlzdCA9IDxEYXJ0VHlwZT5bXTsKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICBsaXN0LmFkZCh2aXNpdCh0eXBlLCBjb252ZXJ0ZXIpKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSB0eXBlLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgIGNvbnZlcnRlcih0eXBlLmVsZW1lbnQpLCB2aXNpdExpc3QodHlwZS50eXBlQXJndW1lbnRzLCBjb252ZXJ0ZXIpKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIHJldHVybiBuZXcgVHlwZWRlZlR5cGUoCiAgICAgICAgY29udmVydGVyKHR5cGUuZWxlbWVudCksCiAgICAgICAgdmlzaXRMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgY29udmVydGVyKSwKICAgICAgICB2aXNpdCh0eXBlLnVuYWxpYXNlZCwgY29udmVydGVyKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFR5cGVWYXJpYWJsZVR5cGUoCiAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlVHlwZShjb252ZXJ0ZXIodHlwZS5lbGVtZW50KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHR5cGVWYXJpYWJsZXMgPSA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W107CiAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgdHlwZVZhcmlhYmxlcy5hZGQoX2Z1bmN0aW9uVHlwZVZhcmlhYmxlc1t0eXBlVmFyaWFibGVdID0KICAgICAgICAgIG5ldyBGdW5jdGlvblR5cGVWYXJpYWJsZSh0eXBlVmFyaWFibGUuaW5kZXgpKTsKICAgIH0KICAgIGZvciAoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICBfZnVuY3Rpb25UeXBlVmFyaWFibGVzW3R5cGVWYXJpYWJsZV0uYm91bmQgPSB0eXBlVmFyaWFibGUuYm91bmQgIT0gbnVsbAogICAgICAgICAgPyB2aXNpdCh0eXBlVmFyaWFibGUuYm91bmQsIGNvbnZlcnRlcikKICAgICAgICAgIDogbnVsbDsKICAgIH0KICAgIERhcnRUeXBlIHJldHVyblR5cGUgPSB2aXNpdCh0eXBlLnJldHVyblR5cGUsIGNvbnZlcnRlcik7CiAgICBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJUeXBlcyA9IHZpc2l0TGlzdCh0eXBlLnBhcmFtZXRlclR5cGVzLCBjb252ZXJ0ZXIpOwogICAgTGlzdDxEYXJ0VHlwZT4gb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyA9CiAgICAgICAgdmlzaXRMaXN0KHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgY29udmVydGVyKTsKICAgIExpc3Q8RGFydFR5cGU+IG5hbWVkUGFyYW1ldGVyVHlwZXMgPQogICAgICAgIHZpc2l0TGlzdCh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMsIGNvbnZlcnRlcik7CiAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgX2Z1bmN0aW9uVHlwZVZhcmlhYmxlcy5yZW1vdmUodHlwZVZhcmlhYmxlKTsKICAgIH0KICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtZXRlclR5cGVzLCBvcHRpb25hbFBhcmFtZXRlclR5cGVzLAogICAgICAgIHR5cGUubmFtZWRQYXJhbWV0ZXJzLCBuYW1lZFBhcmFtZXRlclR5cGVzLCB0eXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoCiAgICAgIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUsIF9FbnRpdHlDb252ZXJ0ZXIgY29udmVydGVyKSB7CiAgICBEYXJ0VHlwZSByZXN1bHQgPSBfZnVuY3Rpb25UeXBlVmFyaWFibGVzW3R5cGVdOwogICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGFsbG93RnJlZVZhcmlhYmxlcykgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIGFzc2VydChyZXN1bHQgIT0gbnVsbCwKICAgICAgICAiRnVuY3Rpb24gdHlwZSB2YXJpYWJsZSAkdHlwZSBub3QgZm91bmQgaW4gJF9mdW5jdGlvblR5cGVWYXJpYWJsZXMiKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIHR5cGUsIF9FbnRpdHlDb252ZXJ0ZXIgY29udmVydGVyKSB7CiAgICByZXR1cm4gY29uc3QgVm9pZFR5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RnV0dXJlT3JUeXBlKEZ1dHVyZU9yVHlwZSB0eXBlLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgcmV0dXJuIG5ldyBGdXR1cmVPclR5cGUodmlzaXQodHlwZS50eXBlQXJndW1lbnQsIGNvbnZlcnRlcikpOwogIH0KfQoKY2xhc3MgX0NvbnN0YW50Q29udmVydGVyIGltcGxlbWVudHMgQ29uc3RhbnRWYWx1ZVZpc2l0b3I8Q29uc3RhbnRWYWx1ZSwgTnVsbD4gewogIGZpbmFsIEVudGl0eSBGdW5jdGlvbihFbnRpdHkpIHRvQmFja2VuZEVudGl0eTsKICBmaW5hbCBfVHlwZUNvbnZlcnRlciB0eXBlQ29udmVydGVyOwoKICBfQ29uc3RhbnRDb252ZXJ0ZXIodGhpcy50b0JhY2tlbmRFbnRpdHkpCiAgICAgIDogdHlwZUNvbnZlcnRlciA9IG5ldyBfVHlwZUNvbnZlcnRlcigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0TnVsbChOdWxsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgPT4gY29uc3RhbnQ7CiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdEludChJbnRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSA9PiBjb25zdGFudDsKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0RG91YmxlKERvdWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+IGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRCb29sKEJvb2xDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSA9PiBjb25zdGFudDsKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0U3RyaW5nKFN0cmluZ0NvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+IGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXREdW1teUludGVyY2VwdG9yKAogICAgICAgICAgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+CiAgICAgIGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRVbnJlYWNoYWJsZShVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+CiAgICAgIGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRKc05hbWUoSnNOYW1lQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgPT4gY29uc3RhbnQ7CiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdE5vbkNvbnN0YW50KE5vbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+IGNvbnN0YW50OwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSh0b0JhY2tlbmRFbnRpdHkoY29uc3RhbnQuZWxlbWVudCksCiAgICAgICAgdHlwZUNvbnZlcnRlci52aXNpdChjb25zdGFudC50eXBlLCB0b0JhY2tlbmRFbnRpdHkpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRMaXN0KExpc3RDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZUNvbnZlcnRlci52aXNpdChjb25zdGFudC50eXBlLCB0b0JhY2tlbmRFbnRpdHkpOwogICAgTGlzdDxDb25zdGFudFZhbHVlPiBlbnRyaWVzID0gX2hhbmRsZVZhbHVlcyhjb25zdGFudC5lbnRyaWVzKTsKICAgIGlmIChpZGVudGljYWwoZW50cmllcywgY29uc3RhbnQuZW50cmllcykgJiYgdHlwZSA9PSBjb25zdGFudC50eXBlKSB7CiAgICAgIHJldHVybiBjb25zdGFudDsKICAgIH0KICAgIHJldHVybiBuZXcgTGlzdENvbnN0YW50VmFsdWUodHlwZSwgZW50cmllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0U2V0KAogICAgICBjb3ZhcmlhbnQgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRTZXRDb25zdGFudCBjb25zdGFudCwgXykgewogICAgRGFydFR5cGUgdHlwZSA9IHR5cGVDb252ZXJ0ZXIudmlzaXQoY29uc3RhbnQudHlwZSwgdG9CYWNrZW5kRW50aXR5KTsKICAgIE1hcENvbnN0YW50VmFsdWUgZW50cmllcyA9IGNvbnN0YW50LmVudHJpZXMuYWNjZXB0KHRoaXMsIG51bGwpOwogICAgaWYgKGlkZW50aWNhbChlbnRyaWVzLCBjb25zdGFudC5lbnRyaWVzKSAmJiB0eXBlID09IGNvbnN0YW50LnR5cGUpIHsKICAgICAgcmV0dXJuIGNvbnN0YW50OwogICAgfQogICAgcmV0dXJuIG5ldyBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdFNldENvbnN0YW50KHR5cGUsIGVudHJpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdE1hcCgKICAgICAgY292YXJpYW50IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQgY29uc3RhbnQsIF8pIHsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlQ29udmVydGVyLnZpc2l0KGNvbnN0YW50LnR5cGUsIHRvQmFja2VuZEVudGl0eSk7CiAgICBMaXN0Q29uc3RhbnRWYWx1ZSBrZXlzID0gY29uc3RhbnQua2V5TGlzdC5hY2NlcHQodGhpcywgbnVsbCk7CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcyA9IF9oYW5kbGVWYWx1ZXMoY29uc3RhbnQudmFsdWVzKTsKICAgIENvbnN0YW50VmFsdWUgcHJvdG9WYWx1ZSA9IGNvbnN0YW50LnByb3RvVmFsdWU/LmFjY2VwdCh0aGlzLCBudWxsKTsKICAgIGlmIChpZGVudGljYWwoa2V5cywgY29uc3RhbnQua2V5cykgJiYKICAgICAgICBpZGVudGljYWwodmFsdWVzLCBjb25zdGFudC52YWx1ZXMpICYmCiAgICAgICAgdHlwZSA9PSBjb25zdGFudC50eXBlICYmCiAgICAgICAgcHJvdG9WYWx1ZSA9PSBjb25zdGFudC5wcm90b1ZhbHVlKSB7CiAgICAgIHJldHVybiBjb25zdGFudDsKICAgIH0KICAgIHJldHVybiBuZXcgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudCgKICAgICAgICB0eXBlLCBrZXlzLCB2YWx1ZXMsIHByb3RvVmFsdWUsIGNvbnN0YW50Lm9ubHlTdHJpbmdLZXlzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRDb25zdHJ1Y3RlZChDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pIHsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlQ29udmVydGVyLnZpc2l0KGNvbnN0YW50LnR5cGUsIHRvQmFja2VuZEVudGl0eSk7CiAgICBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+IGZpZWxkcyA9IHt9OwogICAgY29uc3RhbnQuZmllbGRzLmZvckVhY2goKGYsIHYpIHsKICAgICAgRmllbGRFbnRpdHkgYmFja2VuZEZpZWxkID0gdG9CYWNrZW5kRW50aXR5KGYpOwogICAgICBhc3NlcnQoYmFja2VuZEZpZWxkICE9IG51bGwsICJObyBiYWNrZW5kIGZpZWxkIGZvciAkZi4iKTsKICAgICAgZmllbGRzW2JhY2tlbmRGaWVsZF0gPSB2LmFjY2VwdCh0aGlzLCBudWxsKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUodHlwZSwgZmllbGRzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRUeXBlKFR5cGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZUNvbnZlcnRlci52aXNpdChjb25zdGFudC50eXBlLCB0b0JhY2tlbmRFbnRpdHkpOwogICAgRGFydFR5cGUgcmVwcmVzZW50ZWRUeXBlID0KICAgICAgICB0eXBlQ29udmVydGVyLnZpc2l0KGNvbnN0YW50LnJlcHJlc2VudGVkVHlwZSwgdG9CYWNrZW5kRW50aXR5KTsKICAgIGlmICh0eXBlID09IGNvbnN0YW50LnR5cGUgJiYgcmVwcmVzZW50ZWRUeXBlID09IGNvbnN0YW50LnJlcHJlc2VudGVkVHlwZSkgewogICAgICByZXR1cm4gY29uc3RhbnQ7CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVDb25zdGFudFZhbHVlKHJlcHJlc2VudGVkVHlwZSwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0SW50ZXJjZXB0b3IoSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICAvLyBJbnRlcmNlcHRvciBjb25zdGFudHMgYXJlIG9ubHkgY3JlYXRlZCBpbiB0aGUgU1NBIGdyYXBoIGJ1aWxkZXIuCiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVW5leHBlY3RlZCB2aXNpdEludGVyY2VwdG9yICR7Y29uc3RhbnQudG9TdHJ1Y3R1cmVkVGV4dCgpfSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdERlZmVycmVkR2xvYmFsKERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgewogICAgLy8gRGVmZXJyZWQgZ2xvYmFsIGNvbnN0YW50cyBhcmUgb25seSBjcmVhdGVkIGluIHRoZSBTU0EgZ3JhcGggYnVpbGRlci4KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJVbmV4cGVjdGVkIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSAke2NvbnN0YW50LnRvU3RydWN0dXJlZFRleHQoKX0iKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICBDb25zdGFudFZhbHVlIGZ1bmN0aW9uID0gY29uc3RhbnQuZnVuY3Rpb24uYWNjZXB0KHRoaXMsIG51bGwpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgdHlwZUNvbnZlcnRlci5jb252ZXJ0VHlwZXMoY29uc3RhbnQudHlwZUFyZ3VtZW50cywgdG9CYWNrZW5kRW50aXR5KTsKICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUodHlwZUFyZ3VtZW50cywgZnVuY3Rpb24pOwogIH0KCiAgTGlzdDxDb25zdGFudFZhbHVlPiBfaGFuZGxlVmFsdWVzKExpc3Q8Q29uc3RhbnRWYWx1ZT4gdmFsdWVzKSB7CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IHJlc3VsdDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgdmFyIG5ld1ZhbHVlID0gdmFsdWUuYWNjZXB0KHRoaXMsIG51bGwpOwogICAgICBpZiAobmV3VmFsdWUgIT0gdmFsdWUgJiYgcmVzdWx0ID09IG51bGwpIHsKICAgICAgICByZXN1bHQgPSB2YWx1ZXMuc3VibGlzdCgwLCBpKS50b0xpc3QoKTsKICAgICAgfQogICAgICByZXN1bHQ/LmFkZChuZXdWYWx1ZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0ID8/IHZhbHVlczsKICB9Cn0Kg8MATk48ASgBGhkiPyMgJCMhITEdKSssLik1NiMiGislIygkGBcYGyAYFgEdKkQkSyowIjYBQE0BUEQBJCA6KEABID1NKSZPAUIBRTRMNjElCE4nJ0MKTQpIRBYGAUkqMjouTzZETi4KHAoGAR9HLUQlIAEsQQEzTQFGH04BMEUBKT4BKUIBHgE7HSsvPxA7KRgNQEInKD00NwhGJyhBNDsIASZGPxA7IBg3NBgBTUskPwhRTyg/CEwrNAEaBgFNQkVCTgEnOQFKSFEBJEMBSyUfSQEeFRQZFhEbGhwbSVEbNyEaEyYgSyAZGhUYFwQBJTw1Sy9FLkQpPypLIR86OxABIUA6Mi4sPSo7OSo/Mz0yBAErQjopJzk5CDRPMEsxSjFMJB0cHBojGwQBITgmHktLT0IIIxMGAUQ5ATVICDlMCAFAODo4LBoGAVABMUc/LCREQiNKE08ICEAgSEEgSR8ZGh4hIwQBP0Q4Jyc8QggkFBkcQx9CBAFBQTNENkcyQzJIKx0bNkM5JQgXECUdJSElDg4nNQQBSREsGzMhLxwjJjsBURAlGhgOEzE3AUgdRkFNRkooAR0EAUE8UCwyLzMwP0AlTBUoCgpBUCIoSzkKChUGAU8uNDEzMUFCJUwVKAoKQUcwKEsxNTgMCgoVBgEkDh4ZGkIyBAIBOCEBDDoBDDkBDEABDD4BDD4BDDoBDCg7DAIBMyJHQwFPMQEMPD8EAQwzLAEMOjABDEBDBAEMODQBDDQsAQwoO1ACAS8ET09HBEsPITkBLwFOSRg1AUsBUQFILgQBQjMsBAFFQk4dEAQBQjYnOyJQIggGEwQBSzwqQSVQJQgGEwQBMDc3BAEsNTUEATQ5NgQCASUBIkYhIiAnLk8hBgYRAgE0JwEmAQxNExFHLQEqPkBCKCwGUCUEAQxFPwQBDDs3BAEMQTsEAUU+BAFOLhBNBjwiOwQBDDohHBhLCBMGSwQCAS0BTiEBSzYBNAEfPyMBDD4pBAFPKCMoBhEEAQxMIAQBDFAeTAQBDEwcITIrBAEMIjs6BAEMTklEPzkGRE4xEgY9Tyw7KThEMwZQQwQBDCY/NDATBhtOEwQBDEYdBAEMTkIEAgFQMSYBKy4BDEYMRAxKDEYMSgwnOBAMShAMSgxMAQxDSD4EAQw7SUNJFwYxBAEMGkVJREkXBkUEAQwaRUlCQUgqLiEtFwY2QgQBDElJMSU1QDMINwQBDDtJH0hQFwY5BAEMSUggRwQBDE9MIFIEAQxNQyNNRAQBQiAuHS8xMAgdBh0EAgEzcGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvanNfd29ybGRfYnVpbGRlci5kYXJ0NXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2NvbW1vbi9iYWNrZW5kX2FwaS5kYXJ0g94vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmJhY2tlbmRfYXBpOwoKaW1wb3J0ICcuLi9jb21tb24vcmVzb2x1dGlvbi5kYXJ0JyBzaG93IFJlc29sdXRpb25JbXBhY3Q7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnIHNob3cgV29ybGRJbXBhY3Q7CgovLy8gVGFyZ2V0LXNwZWNpZmljIHRyYW5zZm9ybWF0aW9uIGZvciByZXNvbHV0aW9uIHdvcmxkIGltcGFjdHMuCi8vLwovLy8gVGhpcyBwcm9jZXNzZXMgdGFyZ2V0LWFnbm9zdGljIFtSZXNvbHV0aW9uSW1wYWN0XXMgYW5kIGNyZWF0ZXMgW1dvcmxkSW1wYWN0XQovLy8gaW4gd2hpY2ggYmFja2VuZC90YXJnZXQgc3BlY2lmaWMgaW1wYWN0IGRhdGEgaXMgYWRkZWQsIGZvciBleGFtcGxlOiBpZgovLy8gY2VydGFpbiBmZWF0dXJlIGlzIHVzZWQgdGhhdCByZXF1aXJlcyBzb21lIGhlbHBlciBjb2RlIGZyb20gdGhlIGJhY2tlbmQKLy8vIGxpYnJhcmllcywgdGhpcyB3aWxsIGJlIGluY2x1ZGVkIGJ5IHRoZSBpbXBhY3QgdHJhbnNmb3JtZXIuCmNsYXNzIEltcGFjdFRyYW5zZm9ybWVyIHsKICAvLy8gVHJhbnNmb3JtIHRoZSBbUmVzb2x1dGlvbkltcGFjdF0gaW50byBhIFtXb3JsZEltcGFjdF0gYWRkaW5nIHRoZQogIC8vLyBiYWNrZW5kIGRlcGVuZGVuY2llcyBmb3IgZmVhdHVyZXMgdXNlZCBpbiBbd29ybGRJbXBhY3RdLgogIFdvcmxkSW1wYWN0IHRyYW5zZm9ybVJlc29sdXRpb25JbXBhY3QoUmVzb2x1dGlvbkltcGFjdCB3b3JsZEltcGFjdCkgewogICAgcmV0dXJuIHdvcmxkSW1wYWN0OwogIH0KfQoYAE5OPAEdATo5AUEEUUtMQBpHP0gYBAIBLHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1vbi9iYWNrZW5kX2FwaS5kYXJ0NHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2NvbW1vbi9yZXNvbHV0aW9uLmRhcnSE2y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29tbW9uLnJlc29sdXRpb247CgppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JyBzaG93IENvbnN0YW50RXhwcmVzc2lvbjsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcgc2hvdyBXb3JsZEltcGFjdDsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwoKY2xhc3MgUmVzb2x1dGlvbkltcGFjdCBleHRlbmRzIFdvcmxkSW1wYWN0IHsKICBjb25zdCBSZXNvbHV0aW9uSW1wYWN0KCk7CgogIEl0ZXJhYmxlPEZlYXR1cmU+IGdldCBmZWF0dXJlcyA9PiBjb25zdCA8RmVhdHVyZT5bXTsKICBJdGVyYWJsZTxNYXBMaXRlcmFsVXNlPiBnZXQgbWFwTGl0ZXJhbHMgPT4gY29uc3QgPE1hcExpdGVyYWxVc2U+W107CiAgSXRlcmFibGU8U2V0TGl0ZXJhbFVzZT4gZ2V0IHNldExpdGVyYWxzID0+IGNvbnN0IDxTZXRMaXRlcmFsVXNlPltdOwogIEl0ZXJhYmxlPExpc3RMaXRlcmFsVXNlPiBnZXQgbGlzdExpdGVyYWxzID0+IGNvbnN0IDxMaXN0TGl0ZXJhbFVzZT5bXTsKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBjb25zdFN5bWJvbE5hbWVzID0+IGNvbnN0IDxTdHJpbmc+W107CiAgSXRlcmFibGU8Q29uc3RhbnRFeHByZXNzaW9uPiBnZXQgY29uc3RhbnRMaXRlcmFscyA9PgogICAgICBjb25zdCA8Q29uc3RhbnRFeHByZXNzaW9uPltdOwogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgc2VlbkNsYXNzZXMgPT4gY29uc3QgPENsYXNzRW50aXR5PltdOwogIEl0ZXJhYmxlPFJ1bnRpbWVUeXBlVXNlPiBnZXQgcnVudGltZVR5cGVVc2VzID0+IGNvbnN0IDxSdW50aW1lVHlwZVVzZT5bXTsKCiAgSXRlcmFibGU8ZHluYW1pYz4gZ2V0IG5hdGl2ZURhdGEgPT4gY29uc3QgPGR5bmFtaWM+W107CgogIEl0ZXJhYmxlPEdlbmVyaWNJbnN0YW50aWF0aW9uPiBnZXQgZ2VuZXJpY0luc3RhbnRpYXRpb25zID0+CiAgICAgIGNvbnN0IDxHZW5lcmljSW5zdGFudGlhdGlvbj5bXTsKfQofAE5OPAEjAUAkOSMBLRwBN0ZGST03JEJMATkBPiYCAStwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vcmVzb2x1dGlvbi5kYXJ0MXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL2Fubm90YXRpb25zLmRhcnSy3C8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnbW9kdWxhci5kYXJ0JzsKCmNsYXNzIElyQW5ub3RhdGlvbkRhdGEgewogIE1hcDxpci5DbGFzcywgU3RyaW5nPiBfbmF0aXZlQ2xhc3NOYW1lcyA9IHt9OwogIFNldDxpci5NZW1iZXI+IF9uYXRpdmVNZW1iZXJzID0ge307CiAgTWFwPGlyLk1lbWJlciwgU3RyaW5nPiBfbmF0aXZlTWVtYmVyTmFtZXMgPSB7fTsKICBNYXA8aXIuTWVtYmVyLCBMaXN0PFN0cmluZz4+IF9jcmVhdGVzQW5ub3RhdGlvbnMgPSB7fTsKICBNYXA8aXIuTWVtYmVyLCBMaXN0PFN0cmluZz4+IF9yZXR1cm5zQW5ub3RhdGlvbnMgPSB7fTsKCiAgTWFwPGlyLkxpYnJhcnksIFN0cmluZz4gX2pzSW50ZXJvcExpYnJhcnlOYW1lcyA9IHt9OwogIE1hcDxpci5DbGFzcywgU3RyaW5nPiBfanNJbnRlcm9wQ2xhc3NOYW1lcyA9IHt9OwogIFNldDxpci5DbGFzcz4gX2Fub255bW91c0pzSW50ZXJvcENsYXNzZXMgPSB7fTsKICBNYXA8aXIuTWVtYmVyLCBTdHJpbmc+IF9qc0ludGVyb3BNZW1iZXJOYW1lcyA9IHt9OwoKICBNYXA8aXIuTWVtYmVyLCBMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPj4gX21lbWJlclByYWdtYUFubm90YXRpb25zID0ge307CgogIC8vIFJldHVybnMgdGhlIHRleHQgZnJvbSB0aGUgYEBOYXRpdmUoPHRleHQ+KWAgYW5ub3RhdGlvbiBvZiBbbm9kZV0sIGlmIGFueS4KICBTdHJpbmcgZ2V0TmF0aXZlQ2xhc3NOYW1lKGlyLkNsYXNzIG5vZGUpID0+IF9uYXRpdmVDbGFzc05hbWVzW25vZGVdOwoKICAvLyBSZXR1cm5zIGB0cnVlYCBpZiBbbm9kZV0gaGFzIGEgbmF0aXZlIGJvZHksIGFzIGluIGBtZXRob2QoKSBuYXRpdmU7YC4KICBib29sIGhhc05hdGl2ZUJvZHkoaXIuTWVtYmVyIG5vZGUpID0+IF9uYXRpdmVNZW1iZXJzLmNvbnRhaW5zKG5vZGUpOwoKICAvLyBSZXR1cm5zIHRoZSB0ZXh0IGZyb20gdGhlIGBASlNOYW1lKDx0ZXh0PilgIGFubm90YXRpb24gb2YgW25vZGVdLCBpZiBhbnkuCiAgU3RyaW5nIGdldE5hdGl2ZU1lbWJlck5hbWUoaXIuTWVtYmVyIG5vZGUpID0+IF9uYXRpdmVNZW1iZXJOYW1lc1tub2RlXTsKCiAgLy8gUmV0dXJucyBhIGxpc3Qgb2YgdGhlIHRleHQgZnJvbSB0aGUgYEBDcmVhdGVzKDx0ZXh0PilgIGFubm90YXRpb24gb2YKICAvLyBbbm9kZV0uCiAgTGlzdDxTdHJpbmc+IGdldENyZWF0ZXNBbm5vdGF0aW9ucyhpci5NZW1iZXIgbm9kZSkgPT4KICAgICAgX2NyZWF0ZXNBbm5vdGF0aW9uc1tub2RlXSA/PyBjb25zdCBbXTsKCiAgLy8gUmV0dXJucyBhIGxpc3Qgb2YgdGhlIHRleHQgZnJvbSB0aGUgYEBSZXR1cm5zKDx0ZXh0PilgIGFubm90YXRpb24gb2YKICAvLyBbbm9kZV0uCiAgTGlzdDxTdHJpbmc+IGdldFJldHVybnNBbm5vdGF0aW9ucyhpci5NZW1iZXIgbm9kZSkgPT4KICAgICAgX3JldHVybnNBbm5vdGF0aW9uc1tub2RlXSA/PyBjb25zdCBbXTsKCiAgLy8gUmV0dXJucyB0aGUgdGV4dCBmcm9tIHRoZSBgQEpTKDx0ZXh0PilgIGFubm90YXRpb24gb2YgW25vZGVdLCBpZiBhbnkuCiAgU3RyaW5nIGdldEpzSW50ZXJvcExpYnJhcnlOYW1lKGlyLkxpYnJhcnkgbm9kZSkgPT4KICAgICAgX2pzSW50ZXJvcExpYnJhcnlOYW1lc1tub2RlXTsKCiAgLy8gUmV0dXJucyB0aGUgdGV4dCBmcm9tIHRoZSBgQEpTKDx0ZXh0PilgIGFubm90YXRpb24gb2YgW25vZGVdLCBpZiBhbnkuCiAgU3RyaW5nIGdldEpzSW50ZXJvcENsYXNzTmFtZShpci5DbGFzcyBub2RlKSA9PiBfanNJbnRlcm9wQ2xhc3NOYW1lc1tub2RlXTsKCiAgLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW25vZGVdIGlzIGFubm90YXRlZCB3aXRoIGBAYW5vbnltb3VzYC4KICBib29sIGlzQW5vbnltb3VzSnNJbnRlcm9wQ2xhc3MoaXIuQ2xhc3Mgbm9kZSkgPT4KICAgICAgX2Fub255bW91c0pzSW50ZXJvcENsYXNzZXMuY29udGFpbnMobm9kZSk7CgogIC8vIFJldHVybnMgdGhlIHRleHQgZnJvbSB0aGUgYEBKUyg8dGV4dD4pYCBhbm5vdGF0aW9uIG9mIFtub2RlXSwgaWYgYW55LgogIFN0cmluZyBnZXRKc0ludGVyb3BNZW1iZXJOYW1lKGlyLk1lbWJlciBub2RlKSA9PiBfanNJbnRlcm9wTWVtYmVyTmFtZXNbbm9kZV07CgogIC8vIFJldHVybnMgYSBsaXN0IG9mIHRoZSBgQHByYWdtYSgnZGFydDJqczo8c3VmZml4PicpYCBhbm5vdGF0aW9ucyBvbiBbbm9kZV0uCiAgTGlzdDxQcmFnbWFBbm5vdGF0aW9uRGF0YT4gZ2V0TWVtYmVyUHJhZ21hQW5ub3RhdGlvbkRhdGEoaXIuTWVtYmVyIG5vZGUpID0+CiAgICAgIF9tZW1iZXJQcmFnbWFBbm5vdGF0aW9uc1tub2RlXSA/PyBjb25zdCBbXTsKCiAgdm9pZCBmb3JFYWNoTmF0aXZlQ2xhc3Modm9pZCBGdW5jdGlvbihpci5DbGFzcywgU3RyaW5nKSBmKSB7CiAgICBfbmF0aXZlQ2xhc3NOYW1lcy5mb3JFYWNoKGYpOwogIH0KCiAgdm9pZCBmb3JFYWNoSnNJbnRlcm9wTGlicmFyeSh2b2lkIEZ1bmN0aW9uKGlyLkxpYnJhcnksIFN0cmluZykgZikgewogICAgX2pzSW50ZXJvcExpYnJhcnlOYW1lcy5mb3JFYWNoKGYpOwogIH0KCiAgdm9pZCBmb3JFYWNoSnNJbnRlcm9wQ2xhc3MoCiAgICAgIHZvaWQgRnVuY3Rpb24oaXIuQ2xhc3MsIFN0cmluZywge2Jvb2wgaXNBbm9ueW1vdXN9KSBmKSB7CiAgICBfanNJbnRlcm9wQ2xhc3NOYW1lcy5mb3JFYWNoKChpci5DbGFzcyBub2RlLCBTdHJpbmcgbmFtZSkgewogICAgICBmKG5vZGUsIG5hbWUsIGlzQW5vbnltb3VzOiBpc0Fub255bW91c0pzSW50ZXJvcENsYXNzKG5vZGUpKTsKICAgIH0pOwogIH0KCiAgdm9pZCBmb3JFYWNoSnNJbnRlcm9wTWVtYmVyKHZvaWQgRnVuY3Rpb24oaXIuTWVtYmVyLCBTdHJpbmcpIGYpIHsKICAgIF9qc0ludGVyb3BMaWJyYXJ5TmFtZXMuZm9yRWFjaCgoaXIuTGlicmFyeSBsaWJyYXJ5LCBfKSB7CiAgICAgIGZvciAoaXIuTWVtYmVyIG1lbWJlciBpbiBsaWJyYXJ5Lm1lbWJlcnMpIHsKICAgICAgICBpZiAobWVtYmVyLmlzRXh0ZXJuYWwpIHsKICAgICAgICAgIGYobWVtYmVyLCBfanNJbnRlcm9wTWVtYmVyTmFtZXNbbWVtYmVyXSA/PyBtZW1iZXIubmFtZS5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgX2pzSW50ZXJvcENsYXNzTmFtZXMuZm9yRWFjaCgoaXIuQ2xhc3MgY2xzLCBfKSB7CiAgICAgIGZvciAoaXIuTWVtYmVyIG1lbWJlciBpbiBjbHMubWVtYmVycykgewogICAgICAgIGlmIChtZW1iZXIgaXMgaXIuRmllbGQpIGNvbnRpbnVlOwogICAgICAgIFN0cmluZyBuYW1lID0gX2pzSW50ZXJvcE1lbWJlck5hbWVzW21lbWJlcl07CiAgICAgICAgaWYgKG1lbWJlci5pc0V4dGVybmFsKSB7CiAgICAgICAgICBuYW1lID8/PSBtZW1iZXIubmFtZS5uYW1lOwogICAgICAgIH0KICAgICAgICBmKG1lbWJlciwgbmFtZSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBmb3JFYWNoTmF0aXZlTWV0aG9kRGF0YSgKICAgICAgdm9pZCBGdW5jdGlvbihpci5NZW1iZXIsIFN0cmluZyBuYW1lLCBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywKICAgICAgICAgICAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucykKICAgICAgICAgIGYpIHsKICAgIGZvciAoaXIuTWVtYmVyIG5vZGUgaW4gX25hdGl2ZU1lbWJlcnMpIHsKICAgICAgaWYgKG5vZGUgaXMhIGlyLkZpZWxkKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBfbmF0aXZlTWVtYmVyTmFtZXNbbm9kZV0gPz8gbm9kZS5uYW1lLm5hbWU7CiAgICAgICAgZihub2RlLCBuYW1lLCBnZXRDcmVhdGVzQW5ub3RhdGlvbnMobm9kZSksIGdldFJldHVybnNBbm5vdGF0aW9ucyhub2RlKSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgZm9yRWFjaE5hdGl2ZUZpZWxkRGF0YSgKICAgICAgdm9pZCBGdW5jdGlvbihpci5NZW1iZXIsIFN0cmluZyBuYW1lLCBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywKICAgICAgICAgICAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucykKICAgICAgICAgIGYpIHsKICAgIGZvciAoaXIuQ2xhc3MgY2xzIGluIF9uYXRpdmVDbGFzc05hbWVzLmtleXMpIHsKICAgICAgZm9yIChpci5GaWVsZCBmaWVsZCBpbiBjbHMuZmllbGRzKSB7CiAgICAgICAgaWYgKGZpZWxkLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICAgIFN0cmluZyBuYW1lID0gX25hdGl2ZU1lbWJlck5hbWVzW2ZpZWxkXSA/PyBmaWVsZC5uYW1lLm5hbWU7CiAgICAgICAgICBmKGZpZWxkLCBuYW1lLCBnZXRDcmVhdGVzQW5ub3RhdGlvbnMoZmllbGQpLAogICAgICAgICAgICAgIGdldFJldHVybnNBbm5vdGF0aW9ucyhmaWVsZCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKSXJBbm5vdGF0aW9uRGF0YSBwcm9jZXNzQW5ub3RhdGlvbnMoTW9kdWxhckNvcmUgbW9kdWxhckNvcmUpIHsKICBpci5Db21wb25lbnQgY29tcG9uZW50ID0gbW9kdWxhckNvcmUuY29tcG9uZW50OwogIElyQW5ub3RhdGlvbkRhdGEgZGF0YSA9IG5ldyBJckFubm90YXRpb25EYXRhKCk7CgogIHZvaWQgcHJvY2Vzc01lbWJlcihpci5NZW1iZXIgbWVtYmVyKSB7CiAgICBMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPiBwcmFnbWFBbm5vdGF0aW9uczsKICAgIExpc3Q8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnM7CiAgICBMaXN0PFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zOwogICAgZm9yIChpci5FeHByZXNzaW9uIGFubm90YXRpb24gaW4gbWVtYmVyLmFubm90YXRpb25zKSB7CiAgICAgIGlmIChhbm5vdGF0aW9uIGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbikgewogICAgICAgIGlyLkNvbnN0YW50IGNvbnN0YW50ID0KICAgICAgICAgICAgbW9kdWxhckNvcmUuY29uc3RhbnRFdmFsdWF0b3IuZXZhbHVhdGUoYW5ub3RhdGlvbik7CgogICAgICAgIFN0cmluZyBqc05hbWUgPSBfZ2V0SnNJbnRlcm9wTmFtZShjb25zdGFudCk7CiAgICAgICAgaWYgKGpzTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICBkYXRhLl9qc0ludGVyb3BNZW1iZXJOYW1lc1ttZW1iZXJdID0ganNOYW1lOwogICAgICAgIH0KCiAgICAgICAgYm9vbCBpc05hdGl2ZU1lbWJlciA9IF9pc05hdGl2ZU1lbWJlcihjb25zdGFudCk7CiAgICAgICAgaWYgKGlzTmF0aXZlTWVtYmVyKSB7CiAgICAgICAgICBkYXRhLl9uYXRpdmVNZW1iZXJzLmFkZChtZW1iZXIpOwogICAgICAgIH0KCiAgICAgICAgU3RyaW5nIG5hdGl2ZU5hbWUgPSBfZ2V0TmF0aXZlTWVtYmVyTmFtZShjb25zdGFudCk7CiAgICAgICAgaWYgKG5hdGl2ZU5hbWUgIT0gbnVsbCkgewogICAgICAgICAgZGF0YS5fbmF0aXZlTWVtYmVyTmFtZXNbbWVtYmVyXSA9IG5hdGl2ZU5hbWU7CiAgICAgICAgfQoKICAgICAgICBTdHJpbmcgY3JlYXRlcyA9IF9nZXRDcmVhdGVzQW5ub3RhdGlvbihjb25zdGFudCk7CiAgICAgICAgaWYgKGNyZWF0ZXMgIT0gbnVsbCkgewogICAgICAgICAgaWYgKGNyZWF0ZXNBbm5vdGF0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAgIGRhdGEuX2NyZWF0ZXNBbm5vdGF0aW9uc1ttZW1iZXJdID0gY3JlYXRlc0Fubm90YXRpb25zID0gW107CiAgICAgICAgICB9CiAgICAgICAgICBjcmVhdGVzQW5ub3RhdGlvbnMuYWRkKGNyZWF0ZXMpOwogICAgICAgIH0KCiAgICAgICAgU3RyaW5nIHJldHVybnMgPSBfZ2V0UmV0dXJuc0Fubm90YXRpb24oY29uc3RhbnQpOwogICAgICAgIGlmIChyZXR1cm5zICE9IG51bGwpIHsKICAgICAgICAgIGlmIChyZXR1cm5zQW5ub3RhdGlvbnMgPT0gbnVsbCkgewogICAgICAgICAgICBkYXRhLl9yZXR1cm5zQW5ub3RhdGlvbnNbbWVtYmVyXSA9IHJldHVybnNBbm5vdGF0aW9ucyA9IFtdOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuc0Fubm90YXRpb25zLmFkZChyZXR1cm5zKTsKICAgICAgICB9CgogICAgICAgIFByYWdtYUFubm90YXRpb25EYXRhIHByYWdtYUFubm90YXRpb24gPSBfZ2V0UHJhZ21hQW5ub3RhdGlvbihjb25zdGFudCk7CiAgICAgICAgaWYgKHByYWdtYUFubm90YXRpb24gIT0gbnVsbCkgewogICAgICAgICAgaWYgKHByYWdtYUFubm90YXRpb25zID09IG51bGwpIHsKICAgICAgICAgICAgZGF0YS5fbWVtYmVyUHJhZ21hQW5ub3RhdGlvbnNbbWVtYmVyXSA9IHByYWdtYUFubm90YXRpb25zID0gW107CiAgICAgICAgICB9CiAgICAgICAgICBwcmFnbWFBbm5vdGF0aW9ucy5hZGQocHJhZ21hQW5ub3RhdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBmb3IgKGlyLkxpYnJhcnkgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gYW5ub3RhdGlvbiBpbiBsaWJyYXJ5LmFubm90YXRpb25zKSB7CiAgICAgIGlmIChhbm5vdGF0aW9uIGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbikgewogICAgICAgIGlyLkNvbnN0YW50IGNvbnN0YW50ID0KICAgICAgICAgICAgbW9kdWxhckNvcmUuY29uc3RhbnRFdmFsdWF0b3IuZXZhbHVhdGUoYW5ub3RhdGlvbik7CgogICAgICAgIFN0cmluZyBqc05hbWUgPSBfZ2V0SnNJbnRlcm9wTmFtZShjb25zdGFudCk7CiAgICAgICAgaWYgKGpzTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICBkYXRhLl9qc0ludGVyb3BMaWJyYXJ5TmFtZXNbbGlicmFyeV0gPSBqc05hbWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IgKGlyLkNsYXNzIGNscyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgZm9yIChpci5FeHByZXNzaW9uIGFubm90YXRpb24gaW4gY2xzLmFubm90YXRpb25zKSB7CiAgICAgICAgaWYgKGFubm90YXRpb24gaXMgaXIuQ29uc3RhbnRFeHByZXNzaW9uKSB7CiAgICAgICAgICBpci5Db25zdGFudCBjb25zdGFudCA9CiAgICAgICAgICAgICAgbW9kdWxhckNvcmUuY29uc3RhbnRFdmFsdWF0b3IuZXZhbHVhdGUoYW5ub3RhdGlvbik7CgogICAgICAgICAgU3RyaW5nIG5hdGl2ZUNsYXNzTmFtZSA9IF9nZXROYXRpdmVDbGFzc05hbWUoY29uc3RhbnQpOwogICAgICAgICAgaWYgKG5hdGl2ZUNsYXNzTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgIGRhdGEuX25hdGl2ZUNsYXNzTmFtZXNbY2xzXSA9IG5hdGl2ZUNsYXNzTmFtZTsKICAgICAgICAgIH0KCiAgICAgICAgICBTdHJpbmcganNOYW1lID0gX2dldEpzSW50ZXJvcE5hbWUoY29uc3RhbnQpOwogICAgICAgICAgaWYgKGpzTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgIGRhdGEuX2pzSW50ZXJvcENsYXNzTmFtZXNbY2xzXSA9IGpzTmFtZTsKICAgICAgICAgIH0KCiAgICAgICAgICBib29sIGlzQW5vbnltb3VzSnNJbnRlcm9wQ2xhc3MgPSBfaXNBbm9ueW1vdXNKc0ludGVyb3AoY29uc3RhbnQpOwogICAgICAgICAgaWYgKGlzQW5vbnltb3VzSnNJbnRlcm9wQ2xhc3MpIHsKICAgICAgICAgICAgZGF0YS5fYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIGNscy5tZW1iZXJzKSB7CiAgICAgICAgcHJvY2Vzc01lbWJlcihtZW1iZXIpOwogICAgICB9CiAgICB9CiAgICBmb3IgKGlyLk1lbWJlciBtZW1iZXIgaW4gbGlicmFyeS5tZW1iZXJzKSB7CiAgICAgIHByb2Nlc3NNZW1iZXIobWVtYmVyKTsKICAgIH0KICB9CiAgcmV0dXJuIGRhdGE7Cn0KClN0cmluZyBfZ2V0TmF0aXZlQ2xhc3NOYW1lKGlyLkNvbnN0YW50IGNvbnN0YW50KSB7CiAgaWYgKGNvbnN0YW50IGlzIGlyLkluc3RhbmNlQ29uc3RhbnQpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFkZCBhbiBJckNvbW1vbkVsZW1lbnRzIGZvciB0aGVzZSBxdWVyaWVzOyBpLmUuCiAgICAvLyBgY29tbW9uRWxlbWVudHMuaXNOYXRpdmVBbm5vdGF0aW9uQ2xhc3MoY29uc3RhbnQuY2xhc3NOb2RlKWAuCiAgICBpZiAoY29uc3RhbnQuY2xhc3NOb2RlLm5hbWUgPT0gJ05hdGl2ZScgJiYKICAgICAgICBjb25zdGFudC5jbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkgPT0gVXJpcy5kYXJ0X19qc19oZWxwZXIpIHsKICAgICAgaWYgKGNvbnN0YW50LmZpZWxkVmFsdWVzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgaXIuQ29uc3RhbnQgZmllbGRWYWx1ZSA9IGNvbnN0YW50LmZpZWxkVmFsdWVzLnZhbHVlcy5zaW5nbGU7CiAgICAgICAgU3RyaW5nIG5hbWU7CiAgICAgICAgaWYgKGZpZWxkVmFsdWUgaXMgaXIuU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgICAgIG5hbWUgPSBmaWVsZFZhbHVlLnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbmFtZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCmJvb2wgX2lzTmF0aXZlTWVtYmVyKGlyLkNvbnN0YW50IGNvbnN0YW50KSB7CiAgcmV0dXJuIGNvbnN0YW50IGlzIGlyLkluc3RhbmNlQ29uc3RhbnQgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLm5hbWUgPT0gJ0V4dGVybmFsTmFtZScgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpID09IFVyaXMuZGFydF9faW50ZXJuYWw7Cn0KClN0cmluZyBfZ2V0TmF0aXZlTWVtYmVyTmFtZShpci5Db25zdGFudCBjb25zdGFudCkgewogIGlmIChjb25zdGFudCBpcyBpci5JbnN0YW5jZUNvbnN0YW50ICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5uYW1lID09ICdKU05hbWUnICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSA9PSBVcmlzLmRhcnRfX2pzX2hlbHBlcikgewogICAgYXNzZXJ0KGNvbnN0YW50LmZpZWxkVmFsdWVzLmxlbmd0aCA9PSAxKTsKICAgIGlyLkNvbnN0YW50IGZpZWxkVmFsdWUgPSBjb25zdGFudC5maWVsZFZhbHVlcy52YWx1ZXMuc2luZ2xlOwogICAgaWYgKGZpZWxkVmFsdWUgaXMgaXIuU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIGZpZWxkVmFsdWUudmFsdWU7CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9CgpTdHJpbmcgX2dldENyZWF0ZXNBbm5vdGF0aW9uKGlyLkNvbnN0YW50IGNvbnN0YW50KSB7CiAgaWYgKGNvbnN0YW50IGlzIGlyLkluc3RhbmNlQ29uc3RhbnQgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLm5hbWUgPT0gJ0NyZWF0ZXMnICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSA9PSBVcmlzLmRhcnRfX2pzX2hlbHBlcikgewogICAgYXNzZXJ0KGNvbnN0YW50LmZpZWxkVmFsdWVzLmxlbmd0aCA9PSAxKTsKICAgIGlyLkNvbnN0YW50IGZpZWxkVmFsdWUgPSBjb25zdGFudC5maWVsZFZhbHVlcy52YWx1ZXMuc2luZ2xlOwogICAgaWYgKGZpZWxkVmFsdWUgaXMgaXIuU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIGZpZWxkVmFsdWUudmFsdWU7CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9CgpTdHJpbmcgX2dldFJldHVybnNBbm5vdGF0aW9uKGlyLkNvbnN0YW50IGNvbnN0YW50KSB7CiAgaWYgKGNvbnN0YW50IGlzIGlyLkluc3RhbmNlQ29uc3RhbnQgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLm5hbWUgPT0gJ1JldHVybnMnICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSA9PSBVcmlzLmRhcnRfX2pzX2hlbHBlcikgewogICAgYXNzZXJ0KGNvbnN0YW50LmZpZWxkVmFsdWVzLmxlbmd0aCA9PSAxKTsKICAgIGlyLkNvbnN0YW50IGZpZWxkVmFsdWUgPSBjb25zdGFudC5maWVsZFZhbHVlcy52YWx1ZXMuc2luZ2xlOwogICAgaWYgKGZpZWxkVmFsdWUgaXMgaXIuU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIGZpZWxkVmFsdWUudmFsdWU7CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9CgpTdHJpbmcgX2dldEpzSW50ZXJvcE5hbWUoaXIuQ29uc3RhbnQgY29uc3RhbnQpIHsKICBpZiAoY29uc3RhbnQgaXMgaXIuSW5zdGFuY2VDb25zdGFudCAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUubmFtZSA9PSAnSlMnICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSA9PSBVcmlzLnBhY2thZ2VfanMpIHsKICAgIGFzc2VydChjb25zdGFudC5maWVsZFZhbHVlcy5sZW5ndGggPT0gMSk7CiAgICBpci5Db25zdGFudCBmaWVsZFZhbHVlID0gY29uc3RhbnQuZmllbGRWYWx1ZXMudmFsdWVzLnNpbmdsZTsKICAgIGlmIChmaWVsZFZhbHVlIGlzIGlyLk51bGxDb25zdGFudCkgewogICAgICByZXR1cm4gJyc7CiAgICB9IGVsc2UgaWYgKGZpZWxkVmFsdWUgaXMgaXIuU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIGZpZWxkVmFsdWUudmFsdWU7CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9Cgpib29sIF9pc0Fub255bW91c0pzSW50ZXJvcChpci5Db25zdGFudCBjb25zdGFudCkgewogIHJldHVybiBjb25zdGFudCBpcyBpci5JbnN0YW5jZUNvbnN0YW50ICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5uYW1lID09ICdfQW5vbnltb3VzJyAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkgPT0gVXJpcy5wYWNrYWdlX2pzOwp9CgpjbGFzcyBQcmFnbWFBbm5vdGF0aW9uRGF0YSB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBub24gJ2RhcnQyanM6JyBwcmFnbWEgbmFtZXMgaWYgbmVjZXNzYXJ5LgogIGZpbmFsIFN0cmluZyBzdWZmaXg7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgb3B0aW9ucyBvYmplY3RzIHdoZW4gbmVjZXNzYXJ5LgogIGZpbmFsIGJvb2wgaGFzT3B0aW9uczsKCiAgY29uc3QgUHJhZ21hQW5ub3RhdGlvbkRhdGEodGhpcy5zdWZmaXgsIHt0aGlzLmhhc09wdGlvbnM6IGZhbHNlfSk7CgogIFN0cmluZyBnZXQgbmFtZSA9PiAnZGFydDJqczokc3VmZml4JzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1ByYWdtYUFubm90YXRpb25EYXRhKCRuYW1lKSc7Cn0KClByYWdtYUFubm90YXRpb25EYXRhIF9nZXRQcmFnbWFBbm5vdGF0aW9uKGlyLkNvbnN0YW50IGNvbnN0YW50KSB7CiAgaWYgKGNvbnN0YW50IGlzISBpci5JbnN0YW5jZUNvbnN0YW50KSByZXR1cm4gbnVsbDsKICBpci5JbnN0YW5jZUNvbnN0YW50IHZhbHVlID0gY29uc3RhbnQ7CiAgaXIuQ2xhc3MgY2xzID0gdmFsdWUuY2xhc3NOb2RlOwogIFVyaSB1cmkgPSBjbHMuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmk7CiAgaWYgKHVyaSA9PSBVcmlzLnBhY2thZ2VfbWV0YV9kYXJ0MmpzKSB7CiAgICBpZiAoY2xzLm5hbWUgPT0gJ19Ob0lubGluZScpIHsKICAgICAgcmV0dXJuIGNvbnN0IFByYWdtYUFubm90YXRpb25EYXRhKCdub0lubGluZScpOwogICAgfSBlbHNlIGlmIChjbHMubmFtZSA9PSAnX1RyeUlubGluZScpIHsKICAgICAgcmV0dXJuIGNvbnN0IFByYWdtYUFubm90YXRpb25EYXRhKCd0cnlJbmxpbmUnKTsKICAgIH0KICB9IGVsc2UgaWYgKHVyaSA9PSBVcmlzLmRhcnRfY29yZSAmJiBjbHMubmFtZSA9PSAncHJhZ21hJykgewogICAgaXIuQ29uc3RhbnQgbmFtZVZhbHVlOwogICAgaXIuQ29uc3RhbnQgb3B0aW9uc1ZhbHVlOwogICAgdmFsdWUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoaXIuUmVmZXJlbmNlIHJlZmVyZW5jZSwgaXIuQ29uc3RhbnQgZmllbGRWYWx1ZSkgewogICAgICBpci5GaWVsZCBmaWVsZCA9IHJlZmVyZW5jZS5hc0ZpZWxkOwogICAgICBpZiAoZmllbGQubmFtZS5uYW1lID09ICduYW1lJykgewogICAgICAgIG5hbWVWYWx1ZSA9IGZpZWxkVmFsdWU7CiAgICAgIH0gZWxzZSBpZiAoZmllbGQubmFtZS5uYW1lID09ICdvcHRpb25zJykgewogICAgICAgIG9wdGlvbnNWYWx1ZSA9IGZpZWxkVmFsdWU7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKG5hbWVWYWx1ZSBpcyEgaXIuU3RyaW5nQ29uc3RhbnQpIHJldHVybiBudWxsOwogICAgaXIuU3RyaW5nQ29uc3RhbnQgc3RyaW5nVmFsdWUgPSBuYW1lVmFsdWU7CiAgICBTdHJpbmcgbmFtZSA9IHN0cmluZ1ZhbHVlLnZhbHVlOwogICAgU3RyaW5nIHByZWZpeCA9ICdkYXJ0MmpzOic7CiAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSByZXR1cm4gbnVsbDsKICAgIFN0cmluZyBzdWZmaXggPSBuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTsKICAgIHJldHVybiBuZXcgUHJhZ21hQW5ub3RhdGlvbkRhdGEoc3VmZml4LAogICAgICAgIGhhc09wdGlvbnM6IG9wdGlvbnNWYWx1ZSBpcyEgaXIuTnVsbENvbnN0YW50KTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KCkxpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IGNvbXB1dGVQcmFnbWFBbm5vdGF0aW9uRGF0YUZyb21Jcihpci5NZW1iZXIgbWVtYmVyKSB7CiAgTGlzdDxQcmFnbWFBbm5vdGF0aW9uRGF0YT4gYW5ub3RhdGlvbnMgPSBbXTsKICBmb3IgKGlyLkV4cHJlc3Npb24gbWV0YWRhdGEgaW4gbWVtYmVyLmFubm90YXRpb25zKSB7CiAgICBpZiAobWV0YWRhdGEgaXMhIGlyLkNvbnN0YW50RXhwcmVzc2lvbikgY29udGludWU7CiAgICBpci5Db25zdGFudEV4cHJlc3Npb24gY29uc3RhbnRFeHByZXNzaW9uID0gbWV0YWRhdGE7CiAgICBpci5Db25zdGFudCBjb25zdGFudCA9IGNvbnN0YW50RXhwcmVzc2lvbi5jb25zdGFudDsKICAgIGFzc2VydChjb25zdGFudCBpcyEgaXIuVW5ldmFsdWF0ZWRDb25zdGFudCwKICAgICAgICAiVW5leHBlY3RlZCB1bmV2YWx1YXRlZCBjb25zdGFudCBvbiAkbWVtYmVyOiAkbWV0YWRhdGEiKTsKICAgIFByYWdtYUFubm90YXRpb25EYXRhIGRhdGEgPSBfZ2V0UHJhZ21hQW5ub3RhdGlvbihjb25zdGFudCk7CiAgICBpZiAoZGF0YSAhPSBudWxsKSB7CiAgICAgIGFubm90YXRpb25zLmFkZChkYXRhKTsKICAgIH0KICB9CiAgcmV0dXJuIGFubm90YXRpb25zOwp9CoF3AE5OPAEoHxcBGTAmMjk5ATczMTUBTAFPRwFLRwFPSgFKDTgtAUoNOC0BSzUkAUtNAT4zMQFLUAFQTjIBPyIEAUYnBAEeP0BDCAQBRD0yIUgKCAg1Lio1ISUKGQgIBAEgUTMPLR9CUQgGBAEfUTMPMysmRjctCggGBAIBPzIyASkyJSU7MR9AATUeNwoBOR4rCgE8IjgKATofLEgMKwoBOh8sSAwrCgFQKCtMDDMKCAYEATQ8MR9AATUeOQoIBiw6MyFCAUIpOwwBNyA1DAFMKzYMCgguHwgGMB0GBA8CATMpTEUvUS5FFS8jChwXCggGBA8CAS0sM0wCATQpLU8uQSsfBgQPAgE1KS5PLkErHwYEDwIBNSkuTy5BKx8GBA8CATEpKUouQSkRMh8GBA8CATMsMUgCAR1MFwFCGQFFASgBDDYCAUI1KCIsKiM1KzYGPhseUSonIDEjCAg2LyUgLzMsNwQPAgFRLzc2OTgwQkAYHQYEFgIBKHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2Fubm90YXRpb25zLmRhcnQtc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvY2xvc3VyZS5kYXJ0uLkvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgovLy8gQ29sbGVjdGlvbiBvZiBzY29wZSBkYXRhIGNvbGxlY3RlZCBmb3IgYSBzaW5nbGUgbWVtYmVyLgpjbGFzcyBDbG9zdXJlU2NvcGVNb2RlbCB7CiAgLy8vIENvbGxlY3Rpb24gW1Njb3BlSW5mb10gZGF0YSBmb3IgdGhlIG1lbWJlci4KICBLZXJuZWxTY29wZUluZm8gc2NvcGVJbmZvOwoKICAvLy8gQ29sbGVjdGVkIFtDYXB0dXJlZFNjb3BlXSBkYXRhIGZvciBub2Rlcy4KICBNYXA8aXIuTm9kZSwgS2VybmVsQ2FwdHVyZWRTY29wZT4gY2FwdHVyZWRTY29wZXNNYXAgPQogICAgICA8aXIuTm9kZSwgS2VybmVsQ2FwdHVyZWRTY29wZT57fTsKCiAgLy8vIENvbGxlY3RlZCBbU2NvcGVJbmZvXSBkYXRhIGZvciBub2Rlcy4KICBNYXA8aXIuTG9jYWxGdW5jdGlvbiwgS2VybmVsU2NvcGVJbmZvPiBjbG9zdXJlc1RvR2VuZXJhdGUgPQogICAgICA8aXIuTG9jYWxGdW5jdGlvbiwgS2VybmVsU2NvcGVJbmZvPnt9OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJyRzY29wZUluZm9cbiRjYXB0dXJlZFNjb3Blc01hcFxuJGNsb3N1cmVzVG9HZW5lcmF0ZSc7CiAgfQp9CgpjbGFzcyBLZXJuZWxTY29wZUluZm8gewogIGZpbmFsIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBsb2NhbHNVc2VkSW5UcnlPclN5bmM7CiAgZmluYWwgYm9vbCBoYXNUaGlzTG9jYWw7CiAgZmluYWwgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGJveGVkVmFyaWFibGVzOwogIC8vIElmIGJveGVkVmFyaWFibGVzIGlzIGVtcHR5LCB0aGlzIHdpbGwgYmUgbnVsbCwgYmVjYXVzZSBubyB2YXJpYWJsZXMgd2lsbAogIC8vIG5lZWQgdG8gYmUgYm94ZWQuCiAgZmluYWwgTm9kZUJveCBjYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yOwoKICAvLy8gVGhlIHNldCBvZiB2YXJpYWJsZXMgdGhhdCB3ZXJlIGRlZmluZWQgaW4gYW5vdGhlciBzY29wZSwgYnV0IGFyZSB1c2VkIGluCiAgLy8vIHRoaXMgc2NvcGUuIFRoZSBpdGVtcyBpbiB0aGlzIHNldCBhcmUgZWl0aGVyIG9mIHR5cGUgVmFyaWFibGVEZWNsYXJhdGlvbgogIC8vLyBvciBUeXBlUGFyYW1ldGVyVHlwZVdpdGhDb250ZXh0LgogIFNldDxpci5Ob2RlIC8qIFZhcmlhYmxlRGVjbGFyYXRpb24gfCBUeXBlUGFyYW1ldGVyVHlwZVdpdGhDb250ZXh0ICovID4KICAgICAgZnJlZVZhcmlhYmxlcyA9IG5ldyBTZXQ8aXIuTm9kZT4oKTsKCiAgLy8vIEEgc2V0IG9mIHR5cGUgcGFyYW1ldGVycyB0aGF0IGFyZSBkZWZpbmVkIGluIGFub3RoZXIgc2NvcGUgYW5kIGFyZSBvbmx5CiAgLy8vIHVzZWQgaWYgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIGlzIGNoZWNrZWQuIElmIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbgogIC8vLyBuZWVkcyB0byBiZSByZXRhaW5lZCwgYWxsIG9mIHRoZXNlIHR5cGUgdmFyaWFibGVzIHdpbGwgYmUgYWRkZWQgb3QgdGhlCiAgLy8vIGZyZWVWYXJpYWJsZXMgc2V0LiBXaGV0aGVyIHRoZXNlIHZhcmlhYmxlcyBhcmUgYWN0dWFsbHkgdXNlZCBhcwogIC8vLyBmcmVlVmFyaWFibGVzIHdpbGwgYmUgc2V0IGJ5IHRoZSB0aW1lIHRoaXMgc3RydWN0dXJlIGlzIGNvbnZlcnRlZCB0byBhCiAgLy8vIEpzU2NvcGVJbmZvLCBzbyBKc1Njb3BlSW5mbyBkb2VzIG5vdCBuZWVkIHRvIHVzZSB0aGVtLgogIE1hcDxUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQsIFNldDxWYXJpYWJsZVVzZT4+IGZyZWVWYXJpYWJsZXNGb3JSdGkgPQogICAgICA8VHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0LCBTZXQ8VmFyaWFibGVVc2U+Pnt9OwoKICAvLy8gSWYgdHJ1ZSwgYHRoaXNgIGlzIHVzZWQgYXMgYSBmcmVlIHZhcmlhYmxlLCBpbiB0aGlzIHNjb3BlLiBJdCBpcyBzdG9yZWQKICAvLy8gc2VwYXJhdGVseSBmcm9tIFtmcmVlVmFyaWFibGVzXSBiZWNhdXNlIHRoZXJlIGlzIG5vIHNpbmdsZQogIC8vLyBgVmFyaWFibGVEZWNsYXJhdGlvbmAgbm9kZSB0aGF0IHJlcHJlc2VudHMgYHRoaXNgLgogIGJvb2wgdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSA9IGZhbHNlOwoKICAvLy8gSWYgdHJ1ZSwgYHRoaXNgIGlzIHVzZWQgYXMgYSBmcmVlIHZhcmlhYmxlLCBpbiB0aGlzIHNjb3BlIGlmIHdlIGFyZSBhbHNvCiAgLy8vIHBlcmZvcm1pbmcgcnVudGltZSB0eXBlIGNoZWNrcy4gSXQgaXMgc3RvcmVkCiAgLy8vIHNlcGFyYXRlbHkgZnJvbSBbdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZV0gYmVjYXVzZSB3ZSBkb24ndCBrbm93IGF0IHRoaXMKICAvLy8gc3RhZ2UgaWYgd2Ugd2lsbCBiZSBuZWVkaW5nIHR5cGUgY2hlY2tzIGZvciB0aGlzIHNjb3BlLgogIFNldDxWYXJpYWJsZVVzZT4gdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGkgPSBuZXcgU2V0PFZhcmlhYmxlVXNlPigpOwoKICBLZXJuZWxTY29wZUluZm8odGhpcy5oYXNUaGlzTG9jYWwpCiAgICAgIDogbG9jYWxzVXNlZEluVHJ5T3JTeW5jID0gbmV3IFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPigpLAogICAgICAgIGJveGVkVmFyaWFibGVzID0gbmV3IFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPigpLAogICAgICAgIGNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3IgPSBudWxsOwoKICBLZXJuZWxTY29wZUluZm8uZnJvbSh0aGlzLmhhc1RoaXNMb2NhbCwgS2VybmVsU2NvcGVJbmZvIGluZm8pCiAgICAgIDogbG9jYWxzVXNlZEluVHJ5T3JTeW5jID0gaW5mby5sb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgICAgYm94ZWRWYXJpYWJsZXMgPSBpbmZvLmJveGVkVmFyaWFibGVzLAogICAgICAgIGNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3IgPSBudWxsOwoKICBLZXJuZWxTY29wZUluZm8ud2l0aEJveGVkVmFyaWFibGVzKAogICAgICB0aGlzLmJveGVkVmFyaWFibGVzLAogICAgICB0aGlzLmNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3IsCiAgICAgIHRoaXMubG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICB0aGlzLmZyZWVWYXJpYWJsZXMsCiAgICAgIHRoaXMuZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgdGhpcy50aGlzVXNlZEFzRnJlZVZhcmlhYmxlLAogICAgICB0aGlzLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLAogICAgICB0aGlzLmhhc1RoaXNMb2NhbCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdLZXJuZWxTY29wZUluZm8odGhpcz0kaGFzVGhpc0xvY2FsLCcpOwogICAgc2Iud3JpdGUoJ2ZyZWVWcmlhYmxlcz0kZnJlZVZhcmlhYmxlcywnKTsKICAgIHNiLndyaXRlKCdsb2NhbHNVc2VkSW5UcnlPclN5bmM9eyR7bG9jYWxzVXNlZEluVHJ5T3JTeW5jLmpvaW4oJywgJyl9fScpOwogICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICBzYi53cml0ZSgnZnJlZVZhcmlhYmxlc0ZvclJ0aT17Jyk7CiAgICBmcmVlVmFyaWFibGVzRm9yUnRpLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgc2Iud3JpdGUoJyRjb21tYSRrZXk6JHZhbHVlJyk7CiAgICAgIGNvbW1hID0gJywnOwogICAgfSk7CiAgICBzYi53cml0ZSgnfSknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgS2VybmVsQ2FwdHVyZWRTY29wZSBleHRlbmRzIEtlcm5lbFNjb3BlSW5mbyB7CiAgS2VybmVsQ2FwdHVyZWRTY29wZSgKICAgICAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGJveGVkVmFyaWFibGVzLAogICAgICBOb2RlQm94IGNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3IsCiAgICAgIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBsb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgIFNldDxpci5Ob2RlIC8qIFZhcmlhYmxlRGVjbGFyYXRpb24gfCBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgKi8gPgogICAgICAgICAgZnJlZVZhcmlhYmxlcywKICAgICAgTWFwPFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCwgU2V0PFZhcmlhYmxlVXNlPj4gZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgYm9vbCB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlLAogICAgICBTZXQ8VmFyaWFibGVVc2U+IHRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLAogICAgICBib29sIGhhc1RoaXNMb2NhbCkKICAgICAgOiBzdXBlci53aXRoQm94ZWRWYXJpYWJsZXMoCiAgICAgICAgICAgIGJveGVkVmFyaWFibGVzLAogICAgICAgICAgICBjYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yLAogICAgICAgICAgICBsb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgICAgICAgIGZyZWVWYXJpYWJsZXMsCiAgICAgICAgICAgIGZyZWVWYXJpYWJsZXNGb3JSdGksCiAgICAgICAgICAgIHRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgICAgICAgIHRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLAogICAgICAgICAgICBoYXNUaGlzTG9jYWwpOwoKICAvLyBMb29wcyB0aHJvdWdoIHRoZSBmcmVlIHZhcmlhYmxlcyBvZiBhbiBleGlzdGluZyBLZXJuZWxDYXB0dXJlZFNjb3BlIGFuZAogIC8vIGNyZWF0ZXMgYSBuZXcgS2VybmVsQ2FwdHVyZWRTY29wZSB0aGF0IG9ubHkgY2FwdHVyZXMgdHlwZSB2YXJpYWJsZXMuCiAgS2VybmVsQ2FwdHVyZWRTY29wZS5mb3JTaWduYXR1cmUoS2VybmVsQ2FwdHVyZWRTY29wZSBzY29wZSkKICAgICAgOiB0aGlzKAogICAgICAgICAgICBfZW1wdHksCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIF9lbXB0eSwKICAgICAgICAgICAgc2NvcGUuZnJlZVZhcmlhYmxlcy53aGVyZSgKICAgICAgICAgICAgICAgIChpci5Ob2RlIHZhcmlhYmxlKSA9PiB2YXJpYWJsZSBpcyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQpLAogICAgICAgICAgICBzY29wZS5mcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICAgICAgICBzY29wZS50aGlzVXNlZEFzRnJlZVZhcmlhYmxlLAogICAgICAgICAgICBzY29wZS50aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSwKICAgICAgICAgICAgc2NvcGUuaGFzVGhpc0xvY2FsKTsKCiAgLy8gU2lsbHkgaGFjayBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY29uc3Qgc2V0cy4KICBzdGF0aWMgZmluYWwgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IF9lbXB0eSA9IG5ldyBTZXQoKTsKCiAgYm9vbCBnZXQgcmVxdWlyZXNDb250ZXh0Qm94ID0+IGJveGVkVmFyaWFibGVzLmlzTm90RW1wdHk7Cn0KCmNsYXNzIEtlcm5lbENhcHR1cmVkTG9vcFNjb3BlIGV4dGVuZHMgS2VybmVsQ2FwdHVyZWRTY29wZSB7CiAgZmluYWwgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBib3hlZExvb3BWYXJpYWJsZXM7CgogIEtlcm5lbENhcHR1cmVkTG9vcFNjb3BlKAogICAgICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gYm94ZWRWYXJpYWJsZXMsCiAgICAgIE5vZGVCb3ggY2FwdHVyZWRWYXJpYWJsZXNBY2Nlc3NvciwKICAgICAgdGhpcy5ib3hlZExvb3BWYXJpYWJsZXMsCiAgICAgIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBsb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgIFNldDxpci5Ob2RlIC8qIFZhcmlhYmxlRGVjbGFyYXRpb24gfCBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgKi8gPgogICAgICAgICAgZnJlZVZhcmlhYmxlcywKICAgICAgTWFwPFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCwgU2V0PFZhcmlhYmxlVXNlPj4gZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgYm9vbCB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlLAogICAgICBTZXQ8VmFyaWFibGVVc2U+IHRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLAogICAgICBib29sIGhhc1RoaXNMb2NhbCkKICAgICAgOiBzdXBlcigKICAgICAgICAgICAgYm94ZWRWYXJpYWJsZXMsCiAgICAgICAgICAgIGNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3IsCiAgICAgICAgICAgIGxvY2Fsc1VzZWRJblRyeU9yU3luYywKICAgICAgICAgICAgZnJlZVZhcmlhYmxlcywKICAgICAgICAgICAgZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgICAgICAgdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSwKICAgICAgICAgICAgdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgICAgICAgIGhhc1RoaXNMb2NhbCk7CgogIGJvb2wgZ2V0IGhhc0JveGVkTG9vcFZhcmlhYmxlcyA9PiBib3hlZExvb3BWYXJpYWJsZXMuaXNOb3RFbXB0eTsKfQoKLy8vIEEgbG9jYWwgdmFyaWFibGUgdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gYSB2YXJpYWJsZSB0aGF0IGhhcyBiZWVuIGNhcHR1cmVkCi8vLyBmcm9tIG9uZSBzY29wZSB0byBhbm90aGVyLiBUaGlzIGlzIHRoZSBpci5Ob2RlIHZlcnNpb24gdGhhdCBjb3JyZXNwb25kcyB0bwovLy8gW0JveExvY2FsXS4KY2xhc3MgTm9kZUJveCB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgaXIuVHJlZU5vZGUgZXhlY3V0YWJsZUNvbnRleHQ7CiAgTm9kZUJveCh0aGlzLm5hbWUsIHRoaXMuZXhlY3V0YWJsZUNvbnRleHQpOwp9CgplbnVtIFZhcmlhYmxlVXNlS2luZCB7CiAgLy8vIEFuIGV4cGxpY2l0IHZhcmlhYmxlIHVzZS4KICAvLy8KICAvLy8gRm9yIHR5cGUgdmFyaWFibGUgdGhpcyBpcyBhbiBleHBsaWNpdCBhcy1jYXN0LCBhbiBpcy10ZXN0IG9yIGEgdHlwZQogIC8vLyBsaXRlcmFsLgogIGV4cGxpY2l0LAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHVzZWQgaW4gdGhlIHR5cGUgb2YgYSBsb2NhbCB2YXJpYWJsZS4KICBsb2NhbFR5cGUsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgdXNlZCBpbiBhbiBpbXBsaWNpdCBjYXN0LgogIGltcGxpY2l0Q2FzdCwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBwYXNzZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQgb2YgYSBsaXN0IGxpdGVyYWwuCiAgbGlzdExpdGVyYWwsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgcGFzc2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50IG9mIGEgc2V0IGxpdGVyYWwuCiAgc2V0TGl0ZXJhbCwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBwYXNzZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQgb2YgYSBtYXAgbGl0ZXJhbC4KICBtYXBMaXRlcmFsLAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHBhc3NlZCBhcyBhIHR5cGUgYXJndW1lbnQgdG8gYSBjb25zdHJ1Y3Rvci4KICBjb25zdHJ1Y3RvclR5cGVBcmd1bWVudCwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBwYXNzZWQgYXMgYSB0eXBlIGFyZ3VtZW50IHRvIGEgc3RhdGljIG1ldGhvZC4KICBzdGF0aWNUeXBlQXJndW1lbnQsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgcGFzc2VkIGFzIGEgdHlwZSBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBtZXRob2QuCiAgaW5zdGFuY2VUeXBlQXJndW1lbnQsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgcGFzc2VkIGFzIGEgdHlwZSBhcmd1bWVudCB0byBhIGxvY2FsIGZ1bmN0aW9uLgogIGxvY2FsVHlwZUFyZ3VtZW50LAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIGluIGEgcGFyYW1ldGVyIHR5cGUgb2YgYSBtZW1iZXIuCiAgbWVtYmVyUGFyYW1ldGVyLAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIGluIGEgcGFyYW1ldGVyIHR5cGUgb2YgYSBsb2NhbCBmdW5jdGlvbi4KICBsb2NhbFBhcmFtZXRlciwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSB1c2VkIGluIGEgcmV0dXJuIHR5cGUgb2YgYSBtZW1iZXIuCiAgbWVtYmVyUmV0dXJuVHlwZSwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSB1c2VkIGluIGEgcmV0dXJuIHR5cGUgb2YgYSBsb2NhbCBmdW5jdGlvbi4KICBsb2NhbFJldHVyblR5cGUsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgaW4gYSBmaWVsZCB0eXBlLgogIGZpZWxkVHlwZSwKCiAgLy8vIEEgdHlwZSBhcmd1bWVudCBvZiBhbiBnZW5lcmljIGluc3RhbnRpYXRpb24uCiAgaW5zdGFudGlhdGlvblR5cGVBcmd1bWVudCwKfQoKY2xhc3MgVmFyaWFibGVVc2UgewogIGZpbmFsIFZhcmlhYmxlVXNlS2luZCBraW5kOwogIGZpbmFsIGlyLk1lbWJlciBtZW1iZXI7CiAgZmluYWwgaXIuTG9jYWxGdW5jdGlvbiBsb2NhbEZ1bmN0aW9uOwogIGZpbmFsIGlyLk1ldGhvZEludm9jYXRpb24gaW52b2NhdGlvbjsKICBmaW5hbCBpci5JbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb247CgogIGNvbnN0IFZhcmlhYmxlVXNlLl9zaW1wbGUodGhpcy5raW5kKQogICAgICA6IHRoaXMubWVtYmVyID0gbnVsbCwKICAgICAgICB0aGlzLmxvY2FsRnVuY3Rpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW52b2NhdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnN0YW50aWF0aW9uID0gbnVsbDsKCiAgVmFyaWFibGVVc2UubWVtYmVyUGFyYW1ldGVyKHRoaXMubWVtYmVyKQogICAgICA6IHRoaXMua2luZCA9IFZhcmlhYmxlVXNlS2luZC5tZW1iZXJQYXJhbWV0ZXIsCiAgICAgICAgdGhpcy5sb2NhbEZ1bmN0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmludm9jYXRpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbiA9IG51bGw7CgogIFZhcmlhYmxlVXNlLmxvY2FsUGFyYW1ldGVyKHRoaXMubG9jYWxGdW5jdGlvbikKICAgICAgOiB0aGlzLmtpbmQgPSBWYXJpYWJsZVVzZUtpbmQubG9jYWxQYXJhbWV0ZXIsCiAgICAgICAgdGhpcy5tZW1iZXIgPSBudWxsLAogICAgICAgIHRoaXMuaW52b2NhdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnN0YW50aWF0aW9uID0gbnVsbDsKCiAgVmFyaWFibGVVc2UubWVtYmVyUmV0dXJuVHlwZSh0aGlzLm1lbWJlcikKICAgICAgOiB0aGlzLmtpbmQgPSBWYXJpYWJsZVVzZUtpbmQubWVtYmVyUmV0dXJuVHlwZSwKICAgICAgICB0aGlzLmxvY2FsRnVuY3Rpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW52b2NhdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnN0YW50aWF0aW9uID0gbnVsbDsKCiAgVmFyaWFibGVVc2UubG9jYWxSZXR1cm5UeXBlKHRoaXMubG9jYWxGdW5jdGlvbikKICAgICAgOiB0aGlzLmtpbmQgPSBWYXJpYWJsZVVzZUtpbmQubG9jYWxSZXR1cm5UeXBlLAogICAgICAgIHRoaXMubWVtYmVyID0gbnVsbCwKICAgICAgICB0aGlzLmludm9jYXRpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbiA9IG51bGw7CgogIFZhcmlhYmxlVXNlLmNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50KHRoaXMubWVtYmVyKQogICAgICA6IHRoaXMua2luZCA9IFZhcmlhYmxlVXNlS2luZC5jb25zdHJ1Y3RvclR5cGVBcmd1bWVudCwKICAgICAgICB0aGlzLmxvY2FsRnVuY3Rpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW52b2NhdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnN0YW50aWF0aW9uID0gbnVsbDsKCiAgVmFyaWFibGVVc2Uuc3RhdGljVHlwZUFyZ3VtZW50KHRoaXMubWVtYmVyKQogICAgICA6IHRoaXMua2luZCA9IFZhcmlhYmxlVXNlS2luZC5zdGF0aWNUeXBlQXJndW1lbnQsCiAgICAgICAgdGhpcy5sb2NhbEZ1bmN0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmludm9jYXRpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbiA9IG51bGw7CgogIFZhcmlhYmxlVXNlLmluc3RhbmNlVHlwZUFyZ3VtZW50KHRoaXMuaW52b2NhdGlvbikKICAgICAgOiB0aGlzLmtpbmQgPSBWYXJpYWJsZVVzZUtpbmQuaW5zdGFuY2VUeXBlQXJndW1lbnQsCiAgICAgICAgdGhpcy5tZW1iZXIgPSBudWxsLAogICAgICAgIHRoaXMubG9jYWxGdW5jdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnN0YW50aWF0aW9uID0gbnVsbDsKCiAgVmFyaWFibGVVc2UubG9jYWxUeXBlQXJndW1lbnQodGhpcy5sb2NhbEZ1bmN0aW9uLCB0aGlzLmludm9jYXRpb24pCiAgICAgIDogdGhpcy5raW5kID0gVmFyaWFibGVVc2VLaW5kLmxvY2FsVHlwZUFyZ3VtZW50LAogICAgICAgIHRoaXMubWVtYmVyID0gbnVsbCwKICAgICAgICB0aGlzLmluc3RhbnRpYXRpb24gPSBudWxsOwoKICBWYXJpYWJsZVVzZS5pbnN0YW50aWF0aW9uVHlwZUFyZ3VtZW50KHRoaXMuaW5zdGFudGlhdGlvbikKICAgICAgOiB0aGlzLmtpbmQgPSBWYXJpYWJsZVVzZUtpbmQuaW5zdGFudGlhdGlvblR5cGVBcmd1bWVudCwKICAgICAgICB0aGlzLm1lbWJlciA9IG51bGwsCiAgICAgICAgdGhpcy5sb2NhbEZ1bmN0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmludm9jYXRpb24gPSBudWxsOwoKICBzdGF0aWMgY29uc3QgVmFyaWFibGVVc2UgZXhwbGljaXQgPQogICAgICBjb25zdCBWYXJpYWJsZVVzZS5fc2ltcGxlKFZhcmlhYmxlVXNlS2luZC5leHBsaWNpdCk7CgogIHN0YXRpYyBjb25zdCBWYXJpYWJsZVVzZSBsb2NhbFR5cGUgPQogICAgICBjb25zdCBWYXJpYWJsZVVzZS5fc2ltcGxlKFZhcmlhYmxlVXNlS2luZC5sb2NhbFR5cGUpOwoKICBzdGF0aWMgY29uc3QgVmFyaWFibGVVc2UgaW1wbGljaXRDYXN0ID0KICAgICAgY29uc3QgVmFyaWFibGVVc2UuX3NpbXBsZShWYXJpYWJsZVVzZUtpbmQuaW1wbGljaXRDYXN0KTsKCiAgc3RhdGljIGNvbnN0IFZhcmlhYmxlVXNlIGxpc3RMaXRlcmFsID0KICAgICAgY29uc3QgVmFyaWFibGVVc2UuX3NpbXBsZShWYXJpYWJsZVVzZUtpbmQubGlzdExpdGVyYWwpOwoKICBzdGF0aWMgY29uc3QgVmFyaWFibGVVc2Ugc2V0TGl0ZXJhbCA9CiAgICAgIGNvbnN0IFZhcmlhYmxlVXNlLl9zaW1wbGUoVmFyaWFibGVVc2VLaW5kLnNldExpdGVyYWwpOwoKICBzdGF0aWMgY29uc3QgVmFyaWFibGVVc2UgbWFwTGl0ZXJhbCA9CiAgICAgIGNvbnN0IFZhcmlhYmxlVXNlLl9zaW1wbGUoVmFyaWFibGVVc2VLaW5kLm1hcExpdGVyYWwpOwoKICBzdGF0aWMgY29uc3QgVmFyaWFibGVVc2UgZmllbGRUeXBlID0KICAgICAgY29uc3QgVmFyaWFibGVVc2UuX3NpbXBsZShWYXJpYWJsZVVzZUtpbmQuZmllbGRUeXBlKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PgogICAgICBraW5kLmhhc2hDb2RlICogMTEgKwogICAgICBtZW1iZXIuaGFzaENvZGUgKiAxMyArCiAgICAgIGxvY2FsRnVuY3Rpb24uaGFzaENvZGUgKiAxNyArCiAgICAgIGludm9jYXRpb24uaGFzaENvZGUgKiAxOSArCiAgICAgIGluc3RhbnRpYXRpb24uaGFzaENvZGUgKiAyMzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBWYXJpYWJsZVVzZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGtpbmQgPT0gb3RoZXIua2luZCAmJgogICAgICAgIG1lbWJlciA9PSBvdGhlci5tZW1iZXIgJiYKICAgICAgICBsb2NhbEZ1bmN0aW9uID09IG90aGVyLmxvY2FsRnVuY3Rpb24gJiYKICAgICAgICBpbnZvY2F0aW9uID09IG90aGVyLmludm9jYXRpb24gJiYKICAgICAgICBpbnN0YW50aWF0aW9uID09IG90aGVyLmluc3RhbnRpYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVmFyaWFibGVVc2Uoa2luZD0ka2luZCxtZW1iZXI9JG1lbWJlciwnCiAgICAgICdsb2NhbEZ1bmN0aW9uPSRsb2NhbEZ1bmN0aW9uLGludm9jYXRpb249JGludm9jYXRpb24sJwogICAgICAnaW5zdGFudGlhdGlvbj0kaW5zdGFudGlhdGlvbiknOwp9CgplbnVtIFR5cGVWYXJpYWJsZUtpbmQgeyBjbHMsIG1ldGhvZCwgbG9jYWwsIGZ1bmN0aW9uIH0KCi8vLyBBIGZha2UgaXIuTm9kZSB0aGF0IGhvbGRzIHRoZSBUeXBlUGFyYW1ldGVyVHlwZSBhcyB3ZWxsIGFzIHRoZSBjb250ZXh0IGluCi8vLyB3aGljaCBpdCBvY2N1cnMuCmNsYXNzIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCBpbXBsZW1lbnRzIGlyLk5vZGUgewogIGZpbmFsIGlyLk5vZGUgY29udGV4dDsKICBmaW5hbCBpci5UeXBlUGFyYW1ldGVyVHlwZSB0eXBlOwogIGZpbmFsIFR5cGVWYXJpYWJsZUtpbmQga2luZDsKICBmaW5hbCBpci5UcmVlTm9kZSB0eXBlRGVjbGFyYXRpb247CgogIC8vLyBbY29udGV4dF0gY2FuIGJlIGVpdGhlciBhbiBpci5NZW1iZXIgb3IgYSBpci5GdW5jdGlvbkRlY2xhcmF0aW9uIG9yCiAgLy8vIGlyLkZ1bmN0aW9uRXhwcmVzc2lvbi4KICBmYWN0b3J5IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCgKICAgICAgaXIuVHlwZVBhcmFtZXRlclR5cGUgdHlwZSwgaXIuVHJlZU5vZGUgY29udGV4dCkgewogICAgVHlwZVZhcmlhYmxlS2luZCBraW5kOwogICAgaXIuVHJlZU5vZGUgdHlwZURlY2xhcmF0aW9uID0gdHlwZS5wYXJhbWV0ZXIucGFyZW50OwogICAgaWYgKHR5cGVEZWNsYXJhdGlvbiA9PSBudWxsKSB7CiAgICAgIC8vIFdlIGhhdmUgYSBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlLCBsaWtlIGBUYCBpbiBgdm9pZCBGdW5jdGlvbjxUPihpbnQpYC4KICAgICAga2luZCA9IFR5cGVWYXJpYWJsZUtpbmQuZnVuY3Rpb247CiAgICB9IGVsc2UgaWYgKHR5cGVEZWNsYXJhdGlvbiBpcyBpci5DbGFzcykgewogICAgICAvLyBXZSBoYXZlIGEgY2xhc3MgdHlwZSB2YXJpYWJsZSwgbGlrZSBgVGAgaW4gYGNsYXNzIENsYXNzPFQ+IHsgLi4uIH1gLgogICAgICBraW5kID0gVHlwZVZhcmlhYmxlS2luZC5jbHM7CiAgICB9IGVsc2UgaWYgKHR5cGVEZWNsYXJhdGlvbi5wYXJlbnQgaXMgaXIuTWVtYmVyKSB7CiAgICAgIGlyLk1lbWJlciBtZW1iZXIgPSB0eXBlRGVjbGFyYXRpb24ucGFyZW50OwogICAgICBpZiAobWVtYmVyIGlzIGlyLkNvbnN0cnVjdG9yIHx8CiAgICAgICAgICAobWVtYmVyIGlzIGlyLlByb2NlZHVyZSAmJiBtZW1iZXIuaXNGYWN0b3J5KSkgewogICAgICAgIC8vIFdlIGhhdmUgYSBzeW50aGVzaXplZCBnZW5lcmljIG1ldGhvZCB0eXBlIHZhcmlhYmxlIGZvciBhIGNsYXNzIHR5cGUKICAgICAgICAvLyB2YXJpYWJsZS4KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBIYW5kbGUgY29uc3RydWN0b3IvZmFjdG9yeSB0eXBlIHZhcmlhYmxlcyBhcwogICAgICAgIC8vIG1ldGhvZCB0eXBlIHZhcmlhYmxlcy4KICAgICAgICBraW5kID0gVHlwZVZhcmlhYmxlS2luZC5jbHM7CiAgICAgICAgdHlwZURlY2xhcmF0aW9uID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFdlIGhhdmUgYSBnZW5lcmljIG1ldGhvZCB0eXBlIHZhcmlhYmxlLCBsaWtlIGBUYCBpbgogICAgICAgIC8vIGBtPFQ+KCkgeyAuLi4gfWAuCiAgICAgICAga2luZCA9IFR5cGVWYXJpYWJsZUtpbmQubWV0aG9kOwogICAgICAgIHR5cGVEZWNsYXJhdGlvbiA9IHR5cGVEZWNsYXJhdGlvbi5wYXJlbnQ7CiAgICAgICAgY29udGV4dCA9IHR5cGVEZWNsYXJhdGlvbjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gV2UgaGF2ZSBhIGdlbmVyaWMgbG9jYWwgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZSwgbGlrZSBgVGAgaW4KICAgICAgLy8gYG0oKSB7IGxvY2FsPFQ+KCkgeyAuLi4gfSAuLi4gfWAuCiAgICAgIGFzc2VydCh0eXBlRGVjbGFyYXRpb24ucGFyZW50IGlzIGlyLkxvY2FsRnVuY3Rpb24sCiAgICAgICAgICAiVW5leHBlY3RlZCB0eXBlIGRlY2xhcmF0aW9uOiAkdHlwZURlY2xhcmF0aW9uIik7CiAgICAgIGtpbmQgPSBUeXBlVmFyaWFibGVLaW5kLmxvY2FsOwogICAgICB0eXBlRGVjbGFyYXRpb24gPSB0eXBlRGVjbGFyYXRpb24ucGFyZW50OwogICAgICBjb250ZXh0ID0gdHlwZURlY2xhcmF0aW9uOwogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQuaW50ZXJuYWwoCiAgICAgICAgdHlwZSwgY29udGV4dCwga2luZCwgdHlwZURlY2xhcmF0aW9uKTsKICB9CgogIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dC5pbnRlcm5hbCgKICAgICAgdGhpcy50eXBlLCB0aGlzLmNvbnRleHQsIHRoaXMua2luZCwgdGhpcy50eXBlRGVjbGFyYXRpb24pOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoaXIuVmlzaXRvciB2KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0LmFjY2VwdCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihpci5WaXNpdG9yIHYpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQudmlzaXRDaGlsZHJlbicpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0eXBlLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZSAmJiBjb250ZXh0ID09IG90aGVyLmNvbnRleHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0KHR5cGU9JHR5cGUsY29udGV4dD0kY29udGV4dCwnCiAgICAgICdraW5kPSRraW5kLHR5cGVEZWNsYXJhdGlvbj0kdHlwZURlY2xhcmF0aW9uKSc7Cn0KgaMATk48ASgBPBoyHQEwOCgBLD4tAQwWQgQCARg7GzROFysBT08nSSoBTk9NRk09SzkBTkE5JwFPM00+TgElQzwqAUA8LioBJhsmIhogIy0aAQwWKjUuTRcnLyUTCBQaBAIBNBcyKTlMGU4jORkiHCcjGyEkLhsBTUo+DhQSFCdQJyo0IQEyPwE8AgE8OQEbMikfOUwZTiM5GQ8cJyMbISQuGwFDAgFPTxAQFScuAgEXIAZKDwwBPA0BMBABRQ8BRA4BRA4BQhsBRBYBRxgBRRUBNxMBPxIBORQBQRMBJw0BMx0CARQeGigoKAEnHCMgIwErNSMgIwExNBwgIwEsNiMgIwEyNRwgIwEzPSMgIwEuOCMgIwE0OhwjIwFFNxwjATw/HCMgASY7ASc8ASo/ASk+ASg9ASg9ASc8AQwWGx0kISMBDBwtLSEiMCouBAEMQD0nAgE3AU4VNxkjHyUBSh0nOBs5I1AoLk4jNjEmOk8VTSIlMQ8/HSgyIwgNRSs5PCUwIQY1LwQBKEEBDBlGBAEMIE0EAQwlAQwcPTsEAQwXQTYCASRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9jbG9zdXJlLmRhcnQsc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvaW1wYWN0LmRhcnTAAGAtLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnCiAgICBzaG93IG9wZXJhdG9yRnJvbVN0cmluZzsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJ2ltcGFjdF9kYXRhLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZV9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICdzY29wZS5kYXJ0JzsKaW1wb3J0ICdzdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICdzdGF0aWNfdHlwZV9jYWNoZS5kYXJ0JzsKaW1wb3J0ICd1dGlsLmRhcnQnOwoKLy8vIEludGVyZmFjZSBmb3IgY29sbGVjdGluZyB3b3JsZCBpbXBhY3QgZGF0YS4KLy8vCi8vLyBUaGlzIGlzIHVzZWQgYm90aCBmb3IgZGlyZWN0IHdvcmxkIGltcGFjdCBjb21wdXRhdGlvbiB0aHJvdWdoIHRoZQovLy8gW0tlcm5lbEltcGFjdEJ1aWxkZXJdIGFuZCBmb3Igc2VyaWFsaXphdGlvbiB0aHJvdWdoIHRoZSBbSW1wYWN0QnVpbGRlcl0KLy8vIGFuZCBbSW1wYWN0TG9hZGVyXS4KYWJzdHJhY3QgY2xhc3MgSW1wYWN0UmVnaXN0cnkgewogIHZvaWQgcmVnaXN0ZXJJbnRMaXRlcmFsKGludCB2YWx1ZSk7CgogIHZvaWQgcmVnaXN0ZXJEb3VibGVMaXRlcmFsKGRvdWJsZSB2YWx1ZSk7CgogIHZvaWQgcmVnaXN0ZXJCb29sTGl0ZXJhbChib29sIHZhbHVlKTsKCiAgdm9pZCByZWdpc3RlclN0cmluZ0xpdGVyYWwoU3RyaW5nIHZhbHVlKTsKCiAgdm9pZCByZWdpc3RlclN5bWJvbExpdGVyYWwoU3RyaW5nIHZhbHVlKTsKCiAgdm9pZCByZWdpc3Rlck51bGxMaXRlcmFsKCk7CgogIHZvaWQgcmVnaXN0ZXJMaXN0TGl0ZXJhbChpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0VtcHR5fSk7CgogIHZvaWQgcmVnaXN0ZXJTZXRMaXRlcmFsKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICB7Ym9vbCBpc0NvbnN0LCBib29sIGlzRW1wdHl9KTsKCiAgdm9pZCByZWdpc3Rlck1hcExpdGVyYWwoaXIuRGFydFR5cGUga2V5VHlwZSwgaXIuRGFydFR5cGUgdmFsdWVUeXBlLAogICAgICB7Ym9vbCBpc0NvbnN0LCBib29sIGlzRW1wdHl9KTsKCiAgdm9pZCByZWdpc3RlclN0YXRpY1RlYXJPZmYoCiAgICAgIGlyLlByb2NlZHVyZSBwcm9jZWR1cmUsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCk7CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNHZXQoaXIuTWVtYmVyIG1lbWJlciwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KTsKCiAgdm9pZCByZWdpc3RlclN0YXRpY1NldChpci5NZW1iZXIgbWVtYmVyLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpOwoKICB2b2lkIHJlZ2lzdGVyQXNzZXJ0KHtib29sIHdpdGhNZXNzYWdlfSk7CgogIHZvaWQgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbigKICAgICAgaXIuRnVuY3Rpb25UeXBlIGV4cHJlc3Npb25UeXBlLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgdm9pZCByZWdpc3RlclN5bmNTdGFyKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlKTsKCiAgdm9pZCByZWdpc3RlckFzeW5jKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlKTsKCiAgdm9pZCByZWdpc3RlckFzeW5jU3Rhcihpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSk7CgogIHZvaWQgcmVnaXN0ZXJTdHJpbmdDb25jYXRlbmF0aW9uKCk7CgogIHZvaWQgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uKGlyLlRyZWVOb2RlIG5vZGUpOwoKICB2b2lkIHJlZ2lzdGVyTG9jYWxXaXRob3V0SW5pdGlhbGl6ZXIoKTsKCiAgdm9pZCByZWdpc3RlcklzQ2hlY2soaXIuRGFydFR5cGUgdHlwZSk7CgogIHZvaWQgcmVnaXN0ZXJJbXBsaWNpdENhc3QoaXIuRGFydFR5cGUgdHlwZSk7CgogIHZvaWQgcmVnaXN0ZXJBc0Nhc3QoaXIuRGFydFR5cGUgdHlwZSk7CgogIHZvaWQgcmVnaXN0ZXJUaHJvdygpOwoKICB2b2lkIHJlZ2lzdGVyU3luY0ZvckluKGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZSwgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbik7CgogIHZvaWQgcmVnaXN0ZXJBc3luY0ZvckluKGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZSwgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbik7CgogIHZvaWQgcmVnaXN0ZXJDYXRjaCgpOwoKICB2b2lkIHJlZ2lzdGVyU3RhY2tUcmFjZSgpOwoKICB2b2lkIHJlZ2lzdGVyQ2F0Y2hUeXBlKGlyLkRhcnRUeXBlIHR5cGUpOwoKICB2b2lkIHJlZ2lzdGVyVHlwZUxpdGVyYWwoaXIuRGFydFR5cGUgdHlwZSwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KTsKCiAgdm9pZCByZWdpc3RlckZpZWxkSW5pdGlhbGl6YXRpb24oaXIuRmllbGQgbm9kZSk7CgogIHZvaWQgcmVnaXN0ZXJGaWVsZENvbnN0YW50SW5pdGlhbGl6YXRpb24oCiAgICAgIGlyLkZpZWxkIG5vZGUsIENvbnN0YW50UmVmZXJlbmNlIGNvbnN0YW50KTsKCiAgdm9pZCByZWdpc3RlckxvYWRMaWJyYXJ5KCk7CgogIHZvaWQgcmVnaXN0ZXJSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIHZvaWQgcmVnaXN0ZXJQYXJhbWV0ZXJDaGVjayhpci5EYXJ0VHlwZSB0eXBlKTsKCiAgdm9pZCByZWdpc3RlckxhenlGaWVsZCgpOwoKICB2b2lkIHJlZ2lzdGVyTmV3KAogICAgICBpci5NZW1iZXIgY29uc3RydWN0b3IsCiAgICAgIGlyLkludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0LAogICAgICB7Ym9vbCBpc0NvbnN0fSk7CgogIHZvaWQgcmVnaXN0ZXJDb25zdEluc3RhbnRpYXRpb24oaXIuQ2xhc3MgY2xzLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpOwoKICB2b2lkIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbigKICAgICAgaXIuUHJvY2VkdXJlIHRhcmdldCwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KTsKCiAgdm9pZCByZWdpc3RlckxvY2FsRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICBpci5GdW5jdGlvbkRlY2xhcmF0aW9uIGxvY2FsRnVuY3Rpb24sCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHJlZ2lzdGVyRHluYW1pY0ludm9jYXRpb24oCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwKICAgICAgaXIuTmFtZSBuYW1lLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgdm9pZCByZWdpc3Rlckluc3RhbmNlSW52b2NhdGlvbigKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLAogICAgICBpci5NZW1iZXIgdGFyZ2V0LAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgdm9pZCByZWdpc3RlckZ1bmN0aW9uSW52b2NhdGlvbigKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgdm9pZCByZWdpc3RlckR5bmFtaWNHZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTmFtZSBuYW1lKTsKCiAgdm9pZCByZWdpc3Rlckluc3RhbmNlR2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk1lbWJlciB0YXJnZXQpOwoKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1NldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5OYW1lIG5hbWUpOwoKICB2b2lkIHJlZ2lzdGVySW5zdGFuY2VTZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTWVtYmVyIHRhcmdldCk7CgogIHZvaWQgcmVnaXN0ZXJTdXBlckludm9jYXRpb24oaXIuTmFtZSBuYW1lLCBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgdm9pZCByZWdpc3RlclN1cGVyR2V0KGlyLk5hbWUgbmFtZSk7CgogIHZvaWQgcmVnaXN0ZXJTdXBlclNldChpci5OYW1lIG5hbWUpOwoKICB2b2lkIHJlZ2lzdGVyU3VwZXJJbml0aWFsaXplcigKICAgICAgaXIuQ29uc3RydWN0b3Igc291cmNlLAogICAgICBpci5Db25zdHJ1Y3RvciB0YXJnZXQsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHJlZ2lzdGVyUnVudGltZVR5cGVVc2UoaXIuUHJvcGVydHlHZXQgbm9kZSwgUnVudGltZVR5cGVVc2VLaW5kIGtpbmQsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlKTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZXNlIHdoZW4gQ0ZFIHByb3ZpZGVzIGNvbnN0YW50cy4KICB2b2lkIHJlZ2lzdGVyQ29uc3RydWN0b3JOb2RlKGlyLkNvbnN0cnVjdG9yIG5vZGUpOwogIHZvaWQgcmVnaXN0ZXJGaWVsZE5vZGUoaXIuRmllbGQgbm9kZSk7CiAgdm9pZCByZWdpc3RlclByb2NlZHVyZU5vZGUoaXIuUHJvY2VkdXJlIG5vZGUpOwogIHZvaWQgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uTm9kZShpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpOwogIHZvaWQgcmVnaXN0ZXJTd2l0Y2hTdGF0ZW1lbnROb2RlKGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKTsKICB2b2lkIHJlZ2lzdGVyQ29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKTsKfQoKYWJzdHJhY3QgY2xhc3MgSW1wYWN0QnVpbGRlckJhc2UgZXh0ZW5kcyBTdGF0aWNUeXBlVmlzaXRvcgogICAgaW1wbGVtZW50cyBJbXBhY3RSZWdpc3RyeSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgVmFyaWFibGVTY29wZU1vZGVsIHZhcmlhYmxlU2NvcGVNb2RlbDsKCiAgSW1wYWN0QnVpbGRlckJhc2UoaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwKICAgICAgaXIuQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHksIHRoaXMudmFyaWFibGVTY29wZU1vZGVsKQogICAgICA6IHN1cGVyKHR5cGVFbnZpcm9ubWVudCwgY2xhc3NIaWVyYXJjaHkpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludExpdGVyYWwoaXIuSW50TGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3RlckludExpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZURvdWJsZUxpdGVyYWwoaXIuRG91YmxlTGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3RlckRvdWJsZUxpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUJvb2xMaXRlcmFsKGlyLkJvb2xMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyQm9vbExpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ0xpdGVyYWwoaXIuU3RyaW5nTGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3RlclN0cmluZ0xpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN5bWJvbExpdGVyYWwoaXIuU3ltYm9sTGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3RlclN5bWJvbExpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU51bGxMaXRlcmFsKGlyLk51bGxMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyTnVsbExpdGVyYWwoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGlzdExpdGVyYWwoaXIuTGlzdExpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJMaXN0TGl0ZXJhbChub2RlLnR5cGVBcmd1bWVudCwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QsIGlzRW1wdHk6IG5vZGUuZXhwcmVzc2lvbnMuaXNFbXB0eSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNldExpdGVyYWwoaXIuU2V0TGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3RlclNldExpdGVyYWwobm9kZS50eXBlQXJndW1lbnQsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0LCBpc0VtcHR5OiBub2RlLmV4cHJlc3Npb25zLmlzRW1wdHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVNYXBMaXRlcmFsKGlyLk1hcExpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJNYXBMaXRlcmFsKG5vZGUua2V5VHlwZSwgbm9kZS52YWx1ZVR5cGUsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0LCBpc0VtcHR5OiBub2RlLmVudHJpZXMuaXNFbXB0eSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0YXRpY0dldChpci5TdGF0aWNHZXQgbm9kZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkgewogICAgaXIuTWVtYmVyIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgaWYgKHRhcmdldCBpcyBpci5Qcm9jZWR1cmUgJiYgdGFyZ2V0LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5NZXRob2QpIHsKICAgICAgcmVnaXN0ZXJTdGF0aWNUZWFyT2ZmKHRhcmdldCwgZ2V0RGVmZXJyZWRJbXBvcnQobm9kZSkpOwogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJTdGF0aWNHZXQodGFyZ2V0LCBnZXREZWZlcnJlZEltcG9ydChub2RlKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0YXRpY1NldChpci5TdGF0aWNTZXQgbm9kZSwgaXIuRGFydFR5cGUgdmFsdWVUeXBlKSB7CiAgICByZWdpc3RlclN0YXRpY1NldChub2RlLnRhcmdldCwgZ2V0RGVmZXJyZWRJbXBvcnQobm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc3NlcnRTdGF0ZW1lbnQoaXIuQXNzZXJ0U3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyQXNzZXJ0KHdpdGhNZXNzYWdlOiBub2RlLm1lc3NhZ2UgIT0gbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUluc3RhbnRpYXRpb24oaXIuSW5zdGFudGlhdGlvbiBub2RlLAogICAgICBpci5GdW5jdGlvblR5cGUgZXhwcmVzc2lvblR5cGUsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHsKICAgIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oZXhwcmVzc2lvblR5cGUsIG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIGhhbmRsZUFzeW5jTWFya2VyKGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbikgewogICAgaXIuQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIgPSBmdW5jdGlvbi5hc3luY01hcmtlcjsKICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUgPSBmdW5jdGlvbi5yZXR1cm5UeXBlOwoKICAgIHN3aXRjaCAoYXN5bmNNYXJrZXIpIHsKICAgICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmNTdGFyOgogICAgICAgIGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlID0gY29uc3QgaXIuRHluYW1pY1R5cGUoKTsKICAgICAgICBpZiAocmV0dXJuVHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBpZiAocmV0dXJuVHlwZS5jbGFzc05vZGUgPT0gdHlwZUVudmlyb25tZW50LmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKSB7CiAgICAgICAgICAgIGVsZW1lbnRUeXBlID0gcmV0dXJuVHlwZS50eXBlQXJndW1lbnRzLmZpcnN0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZWdpc3RlclN5bmNTdGFyKGVsZW1lbnRUeXBlKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuQXN5bmM6CiAgICAgICAgaXIuRGFydFR5cGUgZWxlbWVudFR5cGUgPSBjb25zdCBpci5EeW5hbWljVHlwZSgpOwogICAgICAgIGlmIChyZXR1cm5UeXBlIGlzIGlyLkludGVyZmFjZVR5cGUpIHsKICAgICAgICAgIGlmIChyZXR1cm5UeXBlLmNsYXNzTm9kZSA9PSB0eXBlRW52aXJvbm1lbnQuY29yZVR5cGVzLmZ1dHVyZU9yQ2xhc3MpIHsKICAgICAgICAgICAgZWxlbWVudFR5cGUgPSByZXR1cm5UeXBlLnR5cGVBcmd1bWVudHMuZmlyc3Q7CiAgICAgICAgICB9IGVsc2UgaWYgKHJldHVyblR5cGUuY2xhc3NOb2RlID09CiAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LmNvcmVUeXBlcy5mdXR1cmVDbGFzcykgewogICAgICAgICAgICBlbGVtZW50VHlwZSA9IHJldHVyblR5cGUudHlwZUFyZ3VtZW50cy5maXJzdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVnaXN0ZXJBc3luYyhlbGVtZW50VHlwZSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jU3RhcjoKICAgICAgICBpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSA9IGNvbnN0IGlyLkR5bmFtaWNUeXBlKCk7CiAgICAgICAgaWYgKHJldHVyblR5cGUgaXMgaXIuSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgaWYgKHJldHVyblR5cGUuY2xhc3NOb2RlID09IHR5cGVFbnZpcm9ubWVudC5jb3JlVHlwZXMuc3RyZWFtQ2xhc3MpIHsKICAgICAgICAgICAgZWxlbWVudFR5cGUgPSByZXR1cm5UeXBlLnR5cGVBcmd1bWVudHMuZmlyc3Q7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlZ2lzdGVyQXN5bmNTdGFyKGVsZW1lbnRUeXBlKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuU3luY1lpZWxkaW5nOgogICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICJVbmV4cGVjdGVkIGFzeW5jIG1hcmtlcjogJHthc3luY01hcmtlcn0iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyU3RyaW5nQ29uY2F0ZW5hdGlvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCBoYW5kbGVGdW5jdGlvbkRlY2xhcmF0aW9uKGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uKG5vZGUpOwogICAgaGFuZGxlQXN5bmNNYXJrZXIobm9kZS5mdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uKG5vZGUpOwogICAgaGFuZGxlQXN5bmNNYXJrZXIobm9kZS5mdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pbml0aWFsaXplciA9PSBudWxsKSB7CiAgICAgIHJlZ2lzdGVyTG9jYWxXaXRob3V0SW5pdGlhbGl6ZXIoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSXNFeHByZXNzaW9uKGlyLklzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZWdpc3RlcklzQ2hlY2sobm9kZS50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlLCBpci5EYXJ0VHlwZSBvcGVyYW5kVHlwZSkgewogICAgaWYgKHR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihvcGVyYW5kVHlwZSwgbm9kZS50eXBlKSkgewogICAgICAvLyBTa2lwIHVubmVlZGVkIGNhc3RzLgogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobm9kZS5pc1R5cGVFcnJvcikgewogICAgICByZWdpc3RlckltcGxpY2l0Q2FzdChub2RlLnR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJBc0Nhc3Qobm9kZS50eXBlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVGhyb3coaXIuVGhyb3cgbm9kZSkgewogICAgcmVnaXN0ZXJUaHJvdygpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBub2RlLCBpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUsCiAgICAgIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZSkgewogICAgaWYgKG5vZGUuaXNBc3luYykgewogICAgICByZWdpc3RlckFzeW5jRm9ySW4oaXRlcmFibGVUeXBlLCBpdGVyYXRvclR5cGUsCiAgICAgICAgICBjb21wdXRlQ2xhc3NSZWxhdGlvbkZyb21UeXBlKGl0ZXJhdG9yVHlwZSkpOwogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJTeW5jRm9ySW4oaXRlcmFibGVUeXBlLCBpdGVyYXRvclR5cGUsCiAgICAgICAgICBjb21wdXRlQ2xhc3NSZWxhdGlvbkZyb21UeXBlKGl0ZXJhdG9yVHlwZSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDYXRjaChpci5DYXRjaCBub2RlKSB7CiAgICByZWdpc3RlckNhdGNoKCk7CiAgICBpZiAobm9kZS5zdGFja1RyYWNlICE9IG51bGwpIHsKICAgICAgcmVnaXN0ZXJTdGFja1RyYWNlKCk7CiAgICB9CiAgICBpZiAobm9kZS5ndWFyZCBpcyEgaXIuRHluYW1pY1R5cGUpIHsKICAgICAgcmVnaXN0ZXJDYXRjaFR5cGUobm9kZS5ndWFyZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVR5cGVMaXRlcmFsKGlyLlR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyVHlwZUxpdGVyYWwobm9kZS50eXBlLCBnZXREZWZlcnJlZEltcG9ydChub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZpZWxkSW5pdGlhbGl6ZXIoaXIuRmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICByZWdpc3RlckZpZWxkSW5pdGlhbGl6YXRpb24obm9kZS5maWVsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxvYWRMaWJyYXJ5KGlyLkxvYWRMaWJyYXJ5IG5vZGUpIHsKICAgIHJlZ2lzdGVyTG9hZExpYnJhcnkoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplciBub2RlLCBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMpIHsKICAgIHJlZ2lzdGVyUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgICBub2RlLnRhcmdldCwKICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCwKICAgICAgICBfZ2V0TmFtZWRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpLAogICAgICAgIG5vZGUuYXJndW1lbnRzLnR5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUGFyYW1ldGVyKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyKSB7CiAgICByZWdpc3RlclBhcmFtZXRlckNoZWNrKHBhcmFtZXRlci50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU2lnbmF0dXJlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgcmVnaXN0ZXJQYXJhbWV0ZXJDaGVjayhwYXJhbWV0ZXIuYm91bmQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDb25zdHJ1Y3Rvcihpci5Db25zdHJ1Y3RvciBub2RlKSB7CiAgICByZWdpc3RlckNvbnN0cnVjdG9yTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRmllbGQoaXIuRmllbGQgZmllbGQpIHsKICAgIHJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2soZmllbGQudHlwZSk7CiAgICBpZiAoZmllbGQuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICBpZiAoIWZpZWxkLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICAgICFmaWVsZC5pc0NvbnN0ICYmCiAgICAgICAgICBmaWVsZC5pbml0aWFsaXplciBpcyEgaXIuTnVsbExpdGVyYWwpIHsKICAgICAgICByZWdpc3RlckxhenlGaWVsZCgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZWdpc3Rlck51bGxMaXRlcmFsKCk7CiAgICB9CiAgICByZWdpc3RlckZpZWxkTm9kZShmaWVsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVByb2NlZHVyZShpci5Qcm9jZWR1cmUgcHJvY2VkdXJlKSB7CiAgICBoYW5kbGVBc3luY01hcmtlcihwcm9jZWR1cmUuZnVuY3Rpb24pOwogICAgcmVnaXN0ZXJQcm9jZWR1cmVOb2RlKHByb2NlZHVyZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNvbnN0cnVjdG9ySW52b2NhdGlvbihpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSwKICAgICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7CiAgICByZWdpc3Rlck5ldygKICAgICAgICBub2RlLnRhcmdldCwKICAgICAgICBub2RlLmNvbnN0cnVjdGVkVHlwZSwKICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCwKICAgICAgICBfZ2V0TmFtZWRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpLAogICAgICAgIG5vZGUuYXJndW1lbnRzLnR5cGVzLAogICAgICAgIGdldERlZmVycmVkSW1wb3J0KG5vZGUpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJlZ2lzdGVyQ29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlKG5vZGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSwKICAgICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzLCBpci5EYXJ0VHlwZSByZXR1cm5UeXBlKSB7CiAgICBpbnQgcG9zaXRpb25Bcmd1bWVudHMgPSBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsKICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cyA9IF9nZXROYW1lZEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gbm9kZS5hcmd1bWVudHMudHlwZXM7CiAgICBpZiAobm9kZS50YXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogV2Ugc2hvdWxkIG5vdCBtYXJrIHRoZSB0eXBlIGFzIGluc3RhbnRpYXRlZCBidXQKICAgICAgLy8gcmF0aGVyIGZvbGxvdyB0aGUgdHlwZSBhcmd1bWVudHMgZGlyZWN0bHkuCiAgICAgIC8vCiAgICAgIC8vIENvbnNpZGVyIHRoaXM6CiAgICAgIC8vCiAgICAgIC8vICAgIGFic3RyYWN0IGNsYXNzIEE8VD4gewogICAgICAvLyAgICAgIGZhY3RvcnkgQS5yZWd1bGFyKCkgPT4gbmV3IEI8VD4oKTsKICAgICAgLy8gICAgICBmYWN0b3J5IEEucmVkaXJlY3QoKSA9IEI8VD47CiAgICAgIC8vICAgIH0KICAgICAgLy8KICAgICAgLy8gICAgY2xhc3MgQjxUPiBpbXBsZW1lbnRzIEE8VD4ge30KICAgICAgLy8KICAgICAgLy8gICAgbWFpbigpIHsKICAgICAgLy8gICAgICBwcmludChuZXcgQTxpbnQ+LnJlZ3VsYXIoKSBpcyBCPGludD4pOwogICAgICAvLyAgICAgIHByaW50KG5ldyBBPFN0cmluZz4ucmVkaXJlY3QoKSBpcyBCPFN0cmluZz4pOwogICAgICAvLyAgICB9CiAgICAgIC8vCiAgICAgIC8vIFRvIHRyYWNrIHRoYXQgQiBpcyBhY3R1YWxseSBpbnN0YW50aWF0ZWQgYXMgQjxpbnQ+IGFuZCBCPFN0cmluZz4gd2UKICAgICAgLy8gbmVlZCB0byBmb2xsb3cgdGhlIHR5cGUgYXJndW1lbnRzIHBhc3NlZCB0byBBLnJlZ3VsYXIgYW5kIEEucmVkaXJlY3QKICAgICAgLy8gdG8gQi4gQ3VycmVudGx5LCB3ZSBvbmx5IGRvIHRoaXMgc291bmRseSBpZiB3ZSByZWdpc3RlciBBPGludD4gYW5kCiAgICAgIC8vIEE8U3RyaW5nPiBhcyBpbnN0YW50aWF0ZWQuIFdlIHNob3VsZCBpbnN0ZWFkIHJlZ2lzdGVyIHRoYXQgQS5UIGlzCiAgICAgIC8vIGluc3RhbnRpYXRlZCBhcyBpbnQgYW5kIFN0cmluZy4KICAgICAgcmVnaXN0ZXJOZXcoCiAgICAgICAgICBub2RlLnRhcmdldCwKICAgICAgICAgIG5ldyBpci5JbnRlcmZhY2VUeXBlKG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzLCB0eXBlQXJndW1lbnRzKSwKICAgICAgICAgIHBvc2l0aW9uQXJndW1lbnRzLAogICAgICAgICAgbmFtZWRBcmd1bWVudHMsCiAgICAgICAgICBub2RlLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgIGdldERlZmVycmVkSW1wb3J0KG5vZGUpLAogICAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbihub2RlLnRhcmdldCwgcG9zaXRpb25Bcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLAogICAgICAgICAgdHlwZUFyZ3VtZW50cywgZ2V0RGVmZXJyZWRJbXBvcnQobm9kZSkpOwogICAgfQogICAgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWV0aG9kSW52b2NhdGlvbigKICAgICAgaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywKICAgICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSkgewogICAgaW50IHBvc2l0aW9uQXJndW1lbnRzID0gbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGg7CiAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMgPSBfZ2V0TmFtZWRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IG5vZGUuYXJndW1lbnRzLnR5cGVzOwogICAgaXIuRXhwcmVzc2lvbiByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICBpZiAocmVjZWl2ZXIgaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgICByZWNlaXZlci52YXJpYWJsZS5pc0ZpbmFsICYmCiAgICAgICAgcmVjZWl2ZXIudmFyaWFibGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uSW52b2NhdGlvbihyZWNlaXZlci52YXJpYWJsZS5wYXJlbnQsCiAgICAgICAgICBwb3NpdGlvbkFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgfSBlbHNlIHsKICAgICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiA9IGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGUocmVjZWl2ZXJUeXBlKTsKCiAgICAgIGlyLk1lbWJlciBpbnRlcmZhY2VUYXJnZXQgPSBub2RlLmludGVyZmFjZVRhcmdldDsKICAgICAgaWYgKGludGVyZmFjZVRhcmdldCA9PSBudWxsKSB7CiAgICAgICAgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbihyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCBub2RlLm5hbWUsCiAgICAgICAgICAgIHBvc2l0aW9uQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyk7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdHJlYXRpbmcgYSBrbm93biBmdW5jdGlvbiBjYWxsIGFzIGEKICAgICAgICAvLyBkeW5hbWljIGNhbGwgd2hlbiBDRkUgcHJvdmlkZXMgYSB3YXkgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3by4KICAgICAgICBpZiAob3BlcmF0b3JGcm9tU3RyaW5nKG5vZGUubmFtZS5uYW1lKSA9PSBudWxsICYmCiAgICAgICAgICAgIHJlY2VpdmVyVHlwZSBpcyBpci5EeW5hbWljVHlwZSkgewogICAgICAgICAgLy8gV2UgbWlnaHQgaW1wbGljaXRseSBjYWxsIGEgZ2V0dGVyIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uLgogICAgICAgICAgcmVnaXN0ZXJGdW5jdGlvbkludm9jYXRpb24oY29uc3QgaXIuRHluYW1pY1R5cGUoKSwgcG9zaXRpb25Bcmd1bWVudHMsCiAgICAgICAgICAgICAgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0IGlzIGlyLkZpZWxkIHx8CiAgICAgICAgICAgIGludGVyZmFjZVRhcmdldCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgIGludGVyZmFjZVRhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuR2V0dGVyKSB7CiAgICAgICAgICByZWdpc3Rlckluc3RhbmNlSW52b2NhdGlvbihyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCBpbnRlcmZhY2VUYXJnZXQsCiAgICAgICAgICAgICAgcG9zaXRpb25Bcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgICAgIHJlZ2lzdGVyRnVuY3Rpb25JbnZvY2F0aW9uKGludGVyZmFjZVRhcmdldC5nZXR0ZXJUeXBlLAogICAgICAgICAgICAgIHBvc2l0aW9uQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlZ2lzdGVySW5zdGFuY2VJbnZvY2F0aW9uKHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIGludGVyZmFjZVRhcmdldCwKICAgICAgICAgICAgICBwb3NpdGlvbkFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEaXJlY3RNZXRob2RJbnZvY2F0aW9uKAogICAgICBpci5EaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzLAogICAgICBpci5EYXJ0VHlwZSByZXR1cm5UeXBlKSB7CiAgICByZWdpc3Rlckluc3RhbmNlSW52b2NhdGlvbigKICAgICAgICByZWNlaXZlclR5cGUsCiAgICAgICAgQ2xhc3NSZWxhdGlvbi5leGFjdCwKICAgICAgICBub2RlLnRhcmdldCwKICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCwKICAgICAgICBfZ2V0TmFtZWRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpLAogICAgICAgIG5vZGUuYXJndW1lbnRzLnR5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUHJvcGVydHlHZXQoCiAgICAgIGlyLlByb3BlcnR5R2V0IG5vZGUsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkgewogICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiA9IGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGUocmVjZWl2ZXJUeXBlKTsKICAgIGlmIChub2RlLmludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFuY2VHZXQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgbm9kZS5pbnRlcmZhY2VUYXJnZXQpOwogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJEeW5hbWljR2V0KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIG5vZGUubmFtZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZURpcmVjdFByb3BlcnR5R2V0KGlyLkRpcmVjdFByb3BlcnR5R2V0IG5vZGUsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkgewogICAgcmVnaXN0ZXJJbnN0YW5jZUdldChyZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24uZXhhY3QsIG5vZGUudGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUHJvcGVydHlTZXQoCiAgICAgIGlyLlByb3BlcnR5U2V0IG5vZGUsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgdmFsdWVUeXBlKSB7CiAgICBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uID0gY29tcHV0ZUNsYXNzUmVsYXRpb25Gcm9tVHlwZShyZWNlaXZlclR5cGUpOwogICAgaWYgKG5vZGUuaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW5jZVNldChyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCBub2RlLmludGVyZmFjZVRhcmdldCk7CiAgICB9IGVsc2UgewogICAgICByZWdpc3RlckR5bmFtaWNTZXQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgbm9kZS5uYW1lKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRGlyZWN0UHJvcGVydHlTZXQoaXIuRGlyZWN0UHJvcGVydHlTZXQgbm9kZSwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUpIHsKICAgIHJlZ2lzdGVySW5zdGFuY2VTZXQocmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uLmV4YWN0LCBub2RlLnRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN1cGVyTWV0aG9kSW52b2NhdGlvbihpci5TdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSwKICAgICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzLCBpci5EYXJ0VHlwZSByZXR1cm5UeXBlKSB7CiAgICByZWdpc3RlclN1cGVySW52b2NhdGlvbihub2RlLm5hbWUsIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoLAogICAgICAgIF9nZXROYW1lZEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyksIG5vZGUuYXJndW1lbnRzLnR5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3VwZXJQcm9wZXJ0eUdldCgKICAgICAgaXIuU3VwZXJQcm9wZXJ0eUdldCBub2RlLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7CiAgICByZWdpc3RlclN1cGVyR2V0KG5vZGUubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN1cGVyUHJvcGVydHlTZXQoaXIuU3VwZXJQcm9wZXJ0eVNldCBub2RlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUpIHsKICAgIHJlZ2lzdGVyU3VwZXJTZXQobm9kZS5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3VwZXJJbml0aWFsaXplcigKICAgICAgaXIuU3VwZXJJbml0aWFsaXplciBub2RlLCBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMpIHsKICAgIHJlZ2lzdGVyU3VwZXJJbml0aWFsaXplcigKICAgICAgICBub2RlLnBhcmVudCwKICAgICAgICBub2RlLnRhcmdldCwKICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCwKICAgICAgICBfZ2V0TmFtZWRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpLAogICAgICAgIG5vZGUuYXJndW1lbnRzLnR5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyU3dpdGNoU3RhdGVtZW50Tm9kZShub2RlKTsKICAgIHJldHVybiBzdXBlci52aXNpdFN3aXRjaFN0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUnVudGltZVR5cGVVc2UoaXIuUHJvcGVydHlHZXQgbm9kZSwgUnVudGltZVR5cGVVc2VLaW5kIGtpbmQsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlKSB7CiAgICByZWdpc3RlclJ1bnRpbWVUeXBlVXNlKG5vZGUsIGtpbmQsIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ29uc3RhbnRFeHByZXNzaW9uKGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQgPSBnZXREZWZlcnJlZEltcG9ydChub2RlKTsKICAgIG5ldyBDb25zdGFudEltcGFjdFZpc2l0b3IodGhpcywgaW1wb3J0LCBub2RlKS52aXNpdENvbnN0YW50KG5vZGUuY29uc3RhbnQpOwogIH0KfQoKLy8vIFZpc2l0b3IgdGhhdCBidWlsZHMgYW4gW0ltcGFjdERhdGFdIG9iamVjdCBmb3IgdGhlIHdvcmxkIGltcGFjdC4KY2xhc3MgSW1wYWN0QnVpbGRlciBleHRlbmRzIEltcGFjdEJ1aWxkZXJCYXNlIHdpdGggSW1wYWN0UmVnaXN0cnlNaXhpbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCB1c2VBc3NlcnRzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpbmZlckVmZmVjdGl2ZWx5RmluYWxWYXJpYWJsZVR5cGVzOwoKICBJbXBhY3RCdWlsZGVyKGlyLlR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsCiAgICAgIGlyLkNsYXNzSGllcmFyY2h5IGNsYXNzSGllcmFyY2h5LCBWYXJpYWJsZVNjb3BlTW9kZWwgdmFyaWFibGVTY29wZU1vZGVsLAogICAgICB7dGhpcy51c2VBc3NlcnRzOiBmYWxzZSwgdGhpcy5pbmZlckVmZmVjdGl2ZWx5RmluYWxWYXJpYWJsZVR5cGVzOiB0cnVlfSkKICAgICAgOiBzdXBlcih0eXBlRW52aXJvbm1lbnQsIGNsYXNzSGllcmFyY2h5LCB2YXJpYWJsZVNjb3BlTW9kZWwpOwoKICBJbXBhY3RCdWlsZGVyRGF0YSBjb21wdXRlSW1wYWN0KGlyLk1lbWJlciBub2RlKSB7CiAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgdHlwZU1hcHNGb3JUZXN0aW5nID0ge307CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgIHJldHVybiBuZXcgSW1wYWN0QnVpbGRlckRhdGEoCiAgICAgICAgaW1wYWN0RGF0YSwgdHlwZU1hcHNGb3JUZXN0aW5nLCBnZXRTdGF0aWNUeXBlQ2FjaGUoKSk7CiAgfQp9CgovLy8gUmV0dXJuIHRoZSBuYW1lZCBhcmd1bWVudHMgbmFtZXMgYXMgYSBsaXN0IG9mIHN0cmluZ3MuCkxpc3Q8U3RyaW5nPiBfZ2V0TmFtZWRBcmd1bWVudHMoaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgPT4KICAgIGFyZ3VtZW50cy5uYW1lZC5tYXAoKG4pID0+IG4ubmFtZSkudG9MaXN0KCk7CgpjbGFzcyBJbXBhY3RCdWlsZGVyRGF0YSB7CiAgZmluYWwgSW1wYWN0RGF0YSBpbXBhY3REYXRhOwogIGZpbmFsIE1hcDxpci5FeHByZXNzaW9uLCBUeXBlTWFwPiB0eXBlTWFwc0ZvclRlc3Rpbmc7CiAgZmluYWwgU3RhdGljVHlwZUNhY2hlIGNhY2hlZFN0YXRpY1R5cGVzOwoKICBJbXBhY3RCdWlsZGVyRGF0YSgKICAgICAgdGhpcy5pbXBhY3REYXRhLCB0aGlzLnR5cGVNYXBzRm9yVGVzdGluZywgdGhpcy5jYWNoZWRTdGF0aWNUeXBlcyk7Cn0KCmNsYXNzIENvbnN0YW50SW1wYWN0VmlzaXRvciBleHRlbmRzIGlyLlZpc2l0T25jZUNvbnN0YW50VmlzaXRvciB7CiAgZmluYWwgSW1wYWN0UmVnaXN0cnkgcmVnaXN0cnk7CiAgZmluYWwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0OwogIGZpbmFsIGlyLkNvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBDb25zdGFudEltcGFjdFZpc2l0b3IodGhpcy5yZWdpc3RyeSwgdGhpcy5pbXBvcnQsIHRoaXMuZXhwcmVzc2lvbik7CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdENvbnN0YW50KGlyLkNvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJVbmV4cGVjdGVkIGNvbnN0YW50ICR7bm9kZX0gKCR7bm9kZS5ydW50aW1lVHlwZX0pLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoaXIuVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSB7CiAgICAvLyBEbyBub3RoaW5nLiBUaGlzIG9jY3VycyB3aGVuIHRoZSBjb25zdGFudCBjb3VsZG4ndCBiZSBldmFsdWF0ZWQgYmVjYXVzZQogICAgLy8gb2YgYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChpci5UeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyVHlwZUxpdGVyYWwobm9kZS50eXBlLCBpbXBvcnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRlYXJPZmZDb25zdGFudChpci5UZWFyT2ZmQ29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNUZWFyT2ZmKG5vZGUucHJvY2VkdXJlLCBpbXBvcnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoaXIuUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKAogICAgICAgIG5vZGUudGVhck9mZkNvbnN0YW50LnByb2NlZHVyZS5mdW5jdGlvbi5mdW5jdGlvblR5cGUsIG5vZGUudHlwZXMpOwogICAgdmlzaXRDb25zdGFudChub2RlLnRlYXJPZmZDb25zdGFudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdGFuY2VDb25zdGFudChpci5JbnN0YW5jZUNvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQ29uc3RJbnN0YW50aWF0aW9uKAogICAgICAgIG5vZGUuY2xhc3NOb2RlLCBub2RlLnR5cGVBcmd1bWVudHMsIGltcG9ydCk7CiAgICBub2RlLmZpZWxkVmFsdWVzLmZvckVhY2goKGlyLlJlZmVyZW5jZSByZWZlcmVuY2UsIGlyLkNvbnN0YW50IHZhbHVlKSB7CiAgICAgIGlyLkZpZWxkIGZpZWxkID0gcmVmZXJlbmNlLmFzRmllbGQ7CiAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRmllbGRDb25zdGFudEluaXRpYWxpemF0aW9uKAogICAgICAgICAgZmllbGQsIG5ldyBDb25zdGFudFJlZmVyZW5jZShleHByZXNzaW9uLCB2YWx1ZSkpOwogICAgICB2aXNpdENvbnN0YW50KHZhbHVlKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldENvbnN0YW50KGlyLlNldENvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU2V0TGl0ZXJhbChub2RlLnR5cGVBcmd1bWVudCwKICAgICAgICBpc0NvbnN0OiB0cnVlLCBpc0VtcHR5OiBub2RlLmVudHJpZXMuaXNFbXB0eSk7CiAgICBmb3IgKGlyLkNvbnN0YW50IGVsZW1lbnQgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIHZpc2l0Q29uc3RhbnQoZWxlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdENvbnN0YW50KGlyLkxpc3RDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3Rlckxpc3RMaXRlcmFsKG5vZGUudHlwZUFyZ3VtZW50LAogICAgICAgIGlzQ29uc3Q6IHRydWUsIGlzRW1wdHk6IG5vZGUuZW50cmllcy5pc0VtcHR5KTsKICAgIGZvciAoaXIuQ29uc3RhbnQgZWxlbWVudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgdmlzaXRDb25zdGFudChlbGVtZW50KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBDb25zdGFudChpci5NYXBDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3Rlck1hcExpdGVyYWwobm9kZS5rZXlUeXBlLCBub2RlLnZhbHVlVHlwZSwKICAgICAgICBpc0NvbnN0OiB0cnVlLCBpc0VtcHR5OiBub2RlLmVudHJpZXMuaXNFbXB0eSk7CiAgICBmb3IgKGlyLkNvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIHZpc2l0Q29uc3RhbnQoZW50cnkua2V5KTsKICAgICAgdmlzaXRDb25zdGFudChlbnRyeS52YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3ltYm9sQ29uc3RhbnQoaXIuU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSGFuZGxlIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZS4KICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3ltYm9sTGl0ZXJhbChub2RlLm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbnN0YW50KGlyLlN0cmluZ0NvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RyaW5nTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVDb25zdGFudChpci5Eb3VibGVDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3RlckRvdWJsZUxpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50Q29uc3RhbnQoaXIuSW50Q29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJJbnRMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xDb25zdGFudChpci5Cb29sQ29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJCb29sTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROdWxsQ29uc3RhbnQoaXIuTnVsbENvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTnVsbExpdGVyYWwoKTsKICB9Cn0KgyUATk48ATkdASg0NQEZGRslFRshFAEwBEZMGCAmASwBKAEsASwBHgE0JQEzJQFGJQEePAFJAUkBKwElSAEyAS8BMwEmATABKgEqAS8BKQEYAU0sAU4sARgBHQEsAUsBMwEsMgEeASciHyMoATEBHAEUHR0fIycjFwFRJAEhGx8jJyQBKCwfIygBIiAeFB8jKAEjIB4YHyMoASMgHyMoARtHARxLARtHARxLAUZFAScBJwEhHR0fIygBTDsBRDUpMT89TgIBOyAMLwE4QTABDC4kBAEMNCcEAQwwJQQBDDQnBAEMNCcEAQwwGwQBDDArQwQBDC4qQwQBDC41PwQBDEQkTD4NOgYEAQxDPQQBDDg3BAEMMkBGBAE1NzIBGyAPJDouUToMCicPASE6LlE6LTc6DAokDwElOi5POgwKKA8BKCw4BgQBDEAjBAEMQCEmBAEMPiEmBAEMQCQpBgQBDDIgBAEMSz8eDgYcJw0hBgQBDCQVBAEMTiIYNTcNNDcGBAEMJBUjHAYpJQYEAQwwPQQBDDotBAEMMBsEAQwlRSQVKiwfBAEMOywEAQwvPi8GBAEMMCMEAQwlKCUlHDIdCA0dBh4EAQwxKyYEAQxCPREVHiosHiEgGDQGBAEMOD0+Rjw4TjQJGAkiMSsOCSoJFTU8DglNTkxLKRMXSx0aICMiDU8zBigEAQwfICAjID5GPCwmJT5APQ1LATglRT9KSDouSFAuCg8rL0NOQUFBEU5BCggGBAEMJSYgIyAgFh0VKiwfBAEMGk9JKEkNPQYEAQw6OkkEAQwaTkkoSQ09BgQBDDo5SQQBDEI9SUMEAQwfOiEEAQxRIQQBDB8/HhUVKiwfBAEMNyctBAEMSjxEBAEMPjtQBAIBRUkMGQEMLAE0T09EATQgHwYXIj8EAgE7OzEBGh84KwEVSQIBQiElKgFGAQwrID8EAQw/TyAEAQw/NQQBDDc8BAEMUStLKQQBDDkpNUsqNDwcCAQBDC8zNzAeBgQBDDE0NzAeBgQBDC8+NzYgIgYEAQw1Oi8EAQw1MAQBDDUwBAEMLy0EAQwxLgQBDDEkBAIBI3BhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2ltcGFjdC5kYXJ0MXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL2ltcGFjdF9kYXRhLmRhcnTAAMy5Ly8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJ2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICdpbXBhY3QuZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ3N0YXRpY190eXBlLmRhcnQnOwoKLy8vIFtJbXBhY3RSZWdpc3RyeV0gdGhhdCBzdG9yZXMgcmVnaXN0ZXJlZCBpbXBhY3QgaW4gYW4gW0ltcGFjdERhdGFdIG9iamVjdC4KYWJzdHJhY3QgY2xhc3MgSW1wYWN0UmVnaXN0cnlNaXhpbiBpbXBsZW1lbnRzIEltcGFjdFJlZ2lzdHJ5IHsKICBmaW5hbCBJbXBhY3REYXRhSW1wbCBfZGF0YSA9IG5ldyBJbXBhY3REYXRhSW1wbCgpOwoKICBJbXBhY3REYXRhIGdldCBpbXBhY3REYXRhID0+IF9kYXRhOwoKICB2b2lkIF9yZWdpc3RlckZlYXR1cmUoX0ZlYXR1cmUgZmVhdHVyZSkgewogICAgX2RhdGEuX2ZlYXR1cmVzID8/PSBuZXcgRW51bVNldDxfRmVhdHVyZT4oKTsKICAgIF9kYXRhLl9mZWF0dXJlcy5hZGQoZmVhdHVyZSk7CiAgfQoKICB2b2lkIF9yZWdpc3RlclR5cGVVc2UoaXIuRGFydFR5cGUgdHlwZSwgX1R5cGVVc2VLaW5kIGtpbmQpIHsKICAgIF9kYXRhLl90eXBlVXNlcyA/Pz0gW107CiAgICBfZGF0YS5fdHlwZVVzZXMuYWRkKG5ldyBfVHlwZVVzZSh0eXBlLCBraW5kKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3VwZXJJbml0aWFsaXplcigKICAgICAgaXIuQ29uc3RydWN0b3Igc291cmNlLAogICAgICBpci5Db25zdHJ1Y3RvciB0YXJnZXQsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIF9kYXRhLl9zdXBlckluaXRpYWxpemVycyA/Pz0gW107CiAgICBfZGF0YS5fc3VwZXJJbml0aWFsaXplcnMuYWRkKG5ldyBfU3VwZXJJbml0aWFsaXplcigKICAgICAgICBzb3VyY2UsCiAgICAgICAgdGFyZ2V0LAogICAgICAgIG5ldyBfQ2FsbFN0cnVjdHVyZSgKICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3VwZXJTZXQoaXIuTmFtZSBuYW1lKSB7CiAgICBfZGF0YS5fc3VwZXJTZXRzID8/PSBbXTsKICAgIF9kYXRhLl9zdXBlclNldHMuYWRkKG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN1cGVyR2V0KGlyLk5hbWUgbmFtZSkgewogICAgX2RhdGEuX3N1cGVyR2V0cyA/Pz0gW107CiAgICBfZGF0YS5fc3VwZXJHZXRzLmFkZChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdXBlckludm9jYXRpb24oaXIuTmFtZSBuYW1lLCBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBfZGF0YS5fc3VwZXJJbnZvY2F0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5fc3VwZXJJbnZvY2F0aW9ucy5hZGQobmV3IF9TdXBlckludm9jYXRpb24oCiAgICAgICAgbmFtZSwKICAgICAgICBuZXcgX0NhbGxTdHJ1Y3R1cmUoCiAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckluc3RhbmNlU2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk1lbWJlciB0YXJnZXQpIHsKICAgIF9kYXRhLl9pbnN0YW5jZVNldHMgPz89IFtdOwogICAgX2RhdGEuX2luc3RhbmNlU2V0cwogICAgICAgIC5hZGQobmV3IF9JbnN0YW5jZUFjY2VzcyhyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCB0YXJnZXQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEeW5hbWljU2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk5hbWUgbmFtZSkgewogICAgX2RhdGEuX2R5bmFtaWNTZXRzID8/PSBbXTsKICAgIF9kYXRhLl9keW5hbWljU2V0cy5hZGQobmV3IF9EeW5hbWljQWNjZXNzKHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIG5hbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZUdldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5NZW1iZXIgdGFyZ2V0KSB7CiAgICBfZGF0YS5faW5zdGFuY2VHZXRzID8/PSBbXTsKICAgIF9kYXRhLl9pbnN0YW5jZUdldHMKICAgICAgICAuYWRkKG5ldyBfSW5zdGFuY2VBY2Nlc3MocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgdGFyZ2V0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRHluYW1pY0dldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5OYW1lIG5hbWUpIHsKICAgIF9kYXRhLl9keW5hbWljR2V0cyA/Pz0gW107CiAgICBfZGF0YS5fZHluYW1pY0dldHMuYWRkKG5ldyBfRHluYW1pY0FjY2VzcyhyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCBuYW1lKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIF9kYXRhLl9mdW5jdGlvbkludm9jYXRpb25zID8/PSBbXTsKICAgIF9kYXRhLl9mdW5jdGlvbkludm9jYXRpb25zLmFkZChuZXcgX0Z1bmN0aW9uSW52b2NhdGlvbigKICAgICAgICByZWNlaXZlclR5cGUsCiAgICAgICAgbmV3IF9DYWxsU3RydWN0dXJlKAogICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cykpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb24oCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwKICAgICAgaXIuTWVtYmVyIHRhcmdldCwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgX2RhdGEuX2luc3RhbmNlSW52b2NhdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX2luc3RhbmNlSW52b2NhdGlvbnMuYWRkKG5ldyBfSW5zdGFuY2VJbnZvY2F0aW9uKAogICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICByZWxhdGlvbiwKICAgICAgICB0YXJnZXQsCiAgICAgICAgbmV3IF9DYWxsU3RydWN0dXJlKAogICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cykpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLAogICAgICBpci5OYW1lIG5hbWUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIF9kYXRhLl9keW5hbWljSW52b2NhdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX2R5bmFtaWNJbnZvY2F0aW9ucy5hZGQobmV3IF9EeW5hbWljSW52b2NhdGlvbigKICAgICAgICByZWNlaXZlclR5cGUsCiAgICAgICAgcmVsYXRpb24sCiAgICAgICAgbmFtZSwKICAgICAgICBuZXcgX0NhbGxTdHJ1Y3R1cmUoCiAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvY2FsRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICBpci5GdW5jdGlvbkRlY2xhcmF0aW9uIGxvY2FsRnVuY3Rpb24sCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIF9kYXRhLl9sb2NhbEZ1bmN0aW9uSW52b2NhdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9ucy5hZGQobmV3IF9Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbigKICAgICAgICBsb2NhbEZ1bmN0aW9uLAogICAgICAgIG5ldyBfQ2FsbFN0cnVjdHVyZSgKICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbigKICAgICAgaXIuUHJvY2VkdXJlIHRhcmdldCwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBfZGF0YS5fc3RhdGljSW52b2NhdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX3N0YXRpY0ludm9jYXRpb25zLmFkZChuZXcgX1N0YXRpY0ludm9jYXRpb24oCiAgICAgICAgdGFyZ2V0LAogICAgICAgIG5ldyBfQ2FsbFN0cnVjdHVyZShwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyksCiAgICAgICAgaW1wb3J0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTmV3KAogICAgICBpci5NZW1iZXIgY29uc3RydWN0b3IsCiAgICAgIGlyLkludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0LAogICAgICB7Ym9vbCBpc0NvbnN0fSkgewogICAgX2RhdGEuX2NvbnN0cnVjdG9ySW52b2NhdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX2NvbnN0cnVjdG9ySW52b2NhdGlvbnMuYWRkKG5ldyBfQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgIGNvbnN0cnVjdG9yLAogICAgICAgIHR5cGUsCiAgICAgICAgbmV3IF9DYWxsU3RydWN0dXJlKHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSwKICAgICAgICBpbXBvcnQsCiAgICAgICAgaXNDb25zdDogaXNDb25zdCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0SW5zdGFudGlhdGlvbihpci5DbGFzcyBjbHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgX2RhdGEuX2NvbnN0SW5zdGFudGlhdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX2NvbnN0SW5zdGFudGlhdGlvbnMKICAgICAgICAuYWRkKG5ldyBfQ29uc3RJbnN0YW50aWF0aW9uKGNscywgdHlwZUFyZ3VtZW50cywgaW1wb3J0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTGF6eUZpZWxkKCkgewogICAgX3JlZ2lzdGVyRmVhdHVyZShfRmVhdHVyZS5sYXp5RmllbGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclBhcmFtZXRlckNoZWNrKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIF9yZWdpc3RlclR5cGVVc2UodHlwZSwgX1R5cGVVc2VLaW5kLnBhcmFtZXRlckNoZWNrKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgX2RhdGEuX3JlZGlyZWN0aW5nSW5pdGlhbGl6ZXJzID8/PSBbXTsKICAgIF9kYXRhLl9yZWRpcmVjdGluZ0luaXRpYWxpemVycy5hZGQobmV3IF9SZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICAgIGNvbnN0cnVjdG9yLAogICAgICAgIG5ldyBfQ2FsbFN0cnVjdHVyZSgKICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9hZExpYnJhcnkoKSB7CiAgICBfcmVnaXN0ZXJGZWF0dXJlKF9GZWF0dXJlLmxvYWRMaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJGaWVsZEluaXRpYWxpemF0aW9uKGlyLkZpZWxkIG5vZGUpIHsKICAgIF9kYXRhLl9maWVsZEluaXRpYWxpemVycyA/Pz0gW107CiAgICBfZGF0YS5fZmllbGRJbml0aWFsaXplcnMuYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckZpZWxkQ29uc3RhbnRJbml0aWFsaXphdGlvbigKICAgICAgaXIuRmllbGQgbm9kZSwgQ29uc3RhbnRSZWZlcmVuY2UgY29uc3RhbnQpIHsKICAgIF9kYXRhLl9maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzID8/PSB7fTsKICAgIF9kYXRhLl9maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzLnB1dElmQWJzZW50KG5vZGUsICgpID0+IFtdKS5hZGQoY29uc3RhbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclR5cGVMaXRlcmFsKGlyLkRhcnRUeXBlIHR5cGUsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgX2RhdGEuX3R5cGVMaXRlcmFscyA/Pz0gW107CiAgICBfZGF0YS5fdHlwZUxpdGVyYWxzLmFkZChuZXcgX1R5cGVMaXRlcmFsKHR5cGUsIGltcG9ydCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNhdGNoVHlwZShpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBfcmVnaXN0ZXJUeXBlVXNlKHR5cGUsIF9UeXBlVXNlS2luZC5jYXRjaFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YWNrVHJhY2UoKSB7CiAgICBfcmVnaXN0ZXJGZWF0dXJlKF9GZWF0dXJlLnN0YWNrVHJhY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNhdGNoKCkgewogICAgX3JlZ2lzdGVyRmVhdHVyZShfRmVhdHVyZS5jYXRjaENsYXVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXN5bmNGb3JJbihpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUsIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiBpdGVyYXRvckNsYXNzUmVsYXRpb24pIHsKICAgIF9kYXRhLl9mb3JJbkRhdGEgPz89IFtdOwogICAgX2RhdGEuX2ZvckluRGF0YS5hZGQobmV3IF9Gb3JJbkRhdGEoCiAgICAgICAgaXRlcmFibGVUeXBlLCBpdGVyYXRvclR5cGUsIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbiwKICAgICAgICBpc0FzeW5jOiB0cnVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3luY0ZvckluKGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZSwgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbikgewogICAgX2RhdGEuX2ZvckluRGF0YSA/Pz0gW107CiAgICBfZGF0YS5fZm9ySW5EYXRhLmFkZChuZXcgX0ZvckluRGF0YSgKICAgICAgICBpdGVyYWJsZVR5cGUsIGl0ZXJhdG9yVHlwZSwgaXRlcmF0b3JDbGFzc1JlbGF0aW9uLAogICAgICAgIGlzQXN5bmM6IGZhbHNlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVGhyb3coKSB7CiAgICBfcmVnaXN0ZXJGZWF0dXJlKF9GZWF0dXJlLnRocm93RXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXNDYXN0KGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIF9yZWdpc3RlclR5cGVVc2UodHlwZSwgX1R5cGVVc2VLaW5kLmFzQ2FzdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW1wbGljaXRDYXN0KGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIF9yZWdpc3RlclR5cGVVc2UodHlwZSwgX1R5cGVVc2VLaW5kLmltcGxpY2l0Q2FzdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySXNDaGVjayhpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBfcmVnaXN0ZXJUeXBlVXNlKHR5cGUsIF9UeXBlVXNlS2luZC5pc0NoZWNrKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2NhbFdpdGhvdXRJbml0aWFsaXplcigpIHsKICAgIF9yZWdpc3RlckZlYXR1cmUoX0ZlYXR1cmUubG9jYWxXaXRob3V0SW5pdGlhbGl6ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvY2FsRnVuY3Rpb24oaXIuVHJlZU5vZGUgbm9kZSkgewogICAgX2RhdGEuX2xvY2FsRnVuY3Rpb25zID8/PSBbXTsKICAgIF9kYXRhLl9sb2NhbEZ1bmN0aW9ucy5hZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RyaW5nQ29uY2F0ZW5hdGlvbigpIHsKICAgIF9yZWdpc3RlckZlYXR1cmUoX0ZlYXR1cmUuc3RyaW5nQ29uY2F0ZW5hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXN5bmNTdGFyKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlKSB7CiAgICBfcmVnaXN0ZXJUeXBlVXNlKGVsZW1lbnRUeXBlLCBfVHlwZVVzZUtpbmQuYXN5bmNTdGFyTWFya2VyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc3luYyhpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgX3JlZ2lzdGVyVHlwZVVzZShlbGVtZW50VHlwZSwgX1R5cGVVc2VLaW5kLmFzeW5jTWFya2VyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTeW5jU3Rhcihpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgX3JlZ2lzdGVyVHlwZVVzZShlbGVtZW50VHlwZSwgX1R5cGVVc2VLaW5kLnN5bmNTdGFyTWFya2VyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbigKICAgICAgaXIuRnVuY3Rpb25UeXBlIGV4cHJlc3Npb25UeXBlLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBfZGF0YS5fZ2VuZXJpY0luc3RhbnRpYXRpb25zID8/PSBbXTsKICAgIF9kYXRhLl9nZW5lcmljSW5zdGFudGlhdGlvbnMKICAgICAgICAuYWRkKG5ldyBfR2VuZXJpY0luc3RhbnRpYXRpb24oZXhwcmVzc2lvblR5cGUsIHR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc3NlcnQoe2Jvb2wgd2l0aE1lc3NhZ2V9KSB7CiAgICBfcmVnaXN0ZXJGZWF0dXJlKHdpdGhNZXNzYWdlCiAgICAgICAgPyBfRmVhdHVyZS5hc3NlcnRXaXRoTWVzc2FnZQogICAgICAgIDogX0ZlYXR1cmUuYXNzZXJ0V2l0aG91dE1lc3NhZ2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY1NldChpci5NZW1iZXIgbWVtYmVyLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIF9kYXRhLl9zdGF0aWNTZXRzID8/PSBbXTsKICAgIF9kYXRhLl9zdGF0aWNTZXRzLmFkZChuZXcgX1N0YXRpY0FjY2VzcyhtZW1iZXIsIGltcG9ydCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY0dldChpci5NZW1iZXIgbWVtYmVyLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIF9kYXRhLl9zdGF0aWNHZXRzID8/PSBbXTsKICAgIF9kYXRhLl9zdGF0aWNHZXRzLmFkZChuZXcgX1N0YXRpY0FjY2VzcyhtZW1iZXIsIGltcG9ydCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY1RlYXJPZmYoCiAgICAgIGlyLlByb2NlZHVyZSBwcm9jZWR1cmUsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgX2RhdGEuX3N0YXRpY1RlYXJPZmZzID8/PSBbXTsKICAgIF9kYXRhLl9zdGF0aWNUZWFyT2Zmcy5hZGQobmV3IF9TdGF0aWNBY2Nlc3MocHJvY2VkdXJlLCBpbXBvcnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJNYXBMaXRlcmFsKGlyLkRhcnRUeXBlIGtleVR5cGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0VtcHR5fSkgewogICAgX2RhdGEuX21hcExpdGVyYWxzID8/PSBbXTsKICAgIF9kYXRhLl9tYXBMaXRlcmFscy5hZGQobmV3IF9NYXBMaXRlcmFsKGtleVR5cGUsIHZhbHVlVHlwZSwKICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LCBpc0VtcHR5OiBpc0VtcHR5KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTGlzdExpdGVyYWwoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNFbXB0eX0pIHsKICAgIF9kYXRhLl9saXN0TGl0ZXJhbHMgPz89IFtdOwogICAgX2RhdGEuX2xpc3RMaXRlcmFscy5hZGQoCiAgICAgICAgbmV3IF9Db250YWluZXJMaXRlcmFsKGVsZW1lbnRUeXBlLCBpc0NvbnN0OiBpc0NvbnN0LCBpc0VtcHR5OiBpc0VtcHR5KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU2V0TGl0ZXJhbChpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0VtcHR5fSkgewogICAgX2RhdGEuX3NldExpdGVyYWxzID8/PSBbXTsKICAgIF9kYXRhLl9zZXRMaXRlcmFscy5hZGQoCiAgICAgICAgbmV3IF9Db250YWluZXJMaXRlcmFsKGVsZW1lbnRUeXBlLCBpc0NvbnN0OiBpc0NvbnN0LCBpc0VtcHR5OiBpc0VtcHR5KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTnVsbExpdGVyYWwoKSB7CiAgICBfcmVnaXN0ZXJGZWF0dXJlKF9GZWF0dXJlLm51bGxMaXRlcmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTeW1ib2xMaXRlcmFsKFN0cmluZyB2YWx1ZSkgewogICAgX2RhdGEuX3N5bWJvbExpdGVyYWxzID8/PSBbXTsKICAgIF9kYXRhLl9zeW1ib2xMaXRlcmFscy5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0cmluZ0xpdGVyYWwoU3RyaW5nIHZhbHVlKSB7CiAgICBfZGF0YS5fc3RyaW5nTGl0ZXJhbHMgPz89IFtdOwogICAgX2RhdGEuX3N0cmluZ0xpdGVyYWxzLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQm9vbExpdGVyYWwoYm9vbCB2YWx1ZSkgewogICAgX2RhdGEuX2Jvb2xMaXRlcmFscyA/Pz0gW107CiAgICBfZGF0YS5fYm9vbExpdGVyYWxzLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRG91YmxlTGl0ZXJhbChkb3VibGUgdmFsdWUpIHsKICAgIF9kYXRhLl9kb3VibGVMaXRlcmFscyA/Pz0gW107CiAgICBfZGF0YS5fZG91YmxlTGl0ZXJhbHMuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnRMaXRlcmFsKGludCB2YWx1ZSkgewogICAgX2RhdGEuX2ludExpdGVyYWxzID8/PSBbXTsKICAgIF9kYXRhLl9pbnRMaXRlcmFscy5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclJ1bnRpbWVUeXBlVXNlKGlyLlByb3BlcnR5R2V0IG5vZGUsIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSkgewogICAgX2RhdGEuX3J1bnRpbWVUeXBlVXNlcyA/Pz0gW107CiAgICBfZGF0YS5fcnVudGltZVR5cGVVc2VzCiAgICAgICAgLmFkZChuZXcgX1J1bnRpbWVUeXBlVXNlKG5vZGUsIGtpbmQsIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRUeXBlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RydWN0b3JOb2RlKGlyLkNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIF9kYXRhLl9jb25zdHJ1Y3Rvck5vZGVzID8/PSBbXTsKICAgIF9kYXRhLl9jb25zdHJ1Y3Rvck5vZGVzLmFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJGaWVsZE5vZGUoaXIuRmllbGQgbm9kZSkgewogICAgX2RhdGEuX2ZpZWxkTm9kZXMgPz89IFtdOwogICAgX2RhdGEuX2ZpZWxkTm9kZXMuYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclByb2NlZHVyZU5vZGUoaXIuUHJvY2VkdXJlIG5vZGUpIHsKICAgIF9kYXRhLl9wcm9jZWR1cmVOb2RlcyA/Pz0gW107CiAgICBfZGF0YS5fcHJvY2VkdXJlTm9kZXMuYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY0ludm9jYXRpb25Ob2RlKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgX2RhdGEuX3N0YXRpY0ludm9jYXRpb25Ob2RlcyA/Pz0gW107CiAgICBfZGF0YS5fc3RhdGljSW52b2NhdGlvbk5vZGVzLmFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTd2l0Y2hTdGF0ZW1lbnROb2RlKGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBfZGF0YS5fc3dpdGNoU3RhdGVtZW50Tm9kZXMgPz89IFtdOwogICAgX2RhdGEuX3N3aXRjaFN0YXRlbWVudE5vZGVzLmFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGUoaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIF9kYXRhLl9jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzID8/PSBbXTsKICAgIF9kYXRhLl9jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzLmFkZChub2RlKTsKICB9Cn0KCi8vLyBEYXRhIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSB3b3JsZCBpbXBhY3QgZGF0YSBkZXJpdmVkIHB1cmVseSBmcm9tIGtlcm5lbC4KYWJzdHJhY3QgY2xhc3MgSW1wYWN0RGF0YSB7CiAgZmFjdG9yeSBJbXBhY3REYXRhLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSA9CiAgICAgIEltcGFjdERhdGFJbXBsLmZyb21EYXRhU291cmNlOwoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIC8vLyBSZWdpc3RlcnMgdGhlIGltcGFjdCBkYXRhIHdpdGggW3JlZ2lzdHJ5XS4KICB2b2lkIGFwcGx5KEltcGFjdFJlZ2lzdHJ5IHJlZ2lzdHJ5KTsKfQoKY2xhc3MgSW1wYWN0RGF0YUltcGwgaW1wbGVtZW50cyBJbXBhY3REYXRhIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdJbXBhY3REYXRhJzsKCiAgTGlzdDxfU3VwZXJJbml0aWFsaXplcj4gX3N1cGVySW5pdGlhbGl6ZXJzOwogIExpc3Q8aXIuTmFtZT4gX3N1cGVyU2V0czsKICBMaXN0PGlyLk5hbWU+IF9zdXBlckdldHM7CiAgTGlzdDxfU3VwZXJJbnZvY2F0aW9uPiBfc3VwZXJJbnZvY2F0aW9uczsKICBMaXN0PF9JbnN0YW5jZUFjY2Vzcz4gX2luc3RhbmNlU2V0czsKICBMaXN0PF9EeW5hbWljQWNjZXNzPiBfZHluYW1pY1NldHM7CiAgTGlzdDxfSW5zdGFuY2VBY2Nlc3M+IF9pbnN0YW5jZUdldHM7CiAgTGlzdDxfRHluYW1pY0FjY2Vzcz4gX2R5bmFtaWNHZXRzOwogIExpc3Q8X0Z1bmN0aW9uSW52b2NhdGlvbj4gX2Z1bmN0aW9uSW52b2NhdGlvbnM7CiAgTGlzdDxfSW5zdGFuY2VJbnZvY2F0aW9uPiBfaW5zdGFuY2VJbnZvY2F0aW9uczsKICBMaXN0PF9EeW5hbWljSW52b2NhdGlvbj4gX2R5bmFtaWNJbnZvY2F0aW9uczsKICBMaXN0PF9Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbj4gX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uczsKICBMaXN0PF9TdGF0aWNJbnZvY2F0aW9uPiBfc3RhdGljSW52b2NhdGlvbnM7CiAgTGlzdDxfQ29uc3RydWN0b3JJbnZvY2F0aW9uPiBfY29uc3RydWN0b3JJbnZvY2F0aW9uczsKICBMaXN0PF9Db25zdEluc3RhbnRpYXRpb24+IF9jb25zdEluc3RhbnRpYXRpb25zOwogIEVudW1TZXQ8X0ZlYXR1cmU+IF9mZWF0dXJlczsKICBMaXN0PF9UeXBlVXNlPiBfdHlwZVVzZXM7CiAgTGlzdDxfUmVkaXJlY3RpbmdJbml0aWFsaXplcj4gX3JlZGlyZWN0aW5nSW5pdGlhbGl6ZXJzOwogIExpc3Q8aXIuRmllbGQ+IF9maWVsZEluaXRpYWxpemVyczsKICBNYXA8aXIuRmllbGQsIExpc3Q8Q29uc3RhbnRSZWZlcmVuY2U+PiBfZmllbGRDb25zdGFudEluaXRpYWxpemVyczsKICBMaXN0PF9UeXBlTGl0ZXJhbD4gX3R5cGVMaXRlcmFsczsKICBMaXN0PGlyLlRyZWVOb2RlPiBfbG9jYWxGdW5jdGlvbnM7CiAgTGlzdDxfR2VuZXJpY0luc3RhbnRpYXRpb24+IF9nZW5lcmljSW5zdGFudGlhdGlvbnM7CiAgTGlzdDxfU3RhdGljQWNjZXNzPiBfc3RhdGljU2V0czsKICBMaXN0PF9TdGF0aWNBY2Nlc3M+IF9zdGF0aWNHZXRzOwogIExpc3Q8X1N0YXRpY0FjY2Vzcz4gX3N0YXRpY1RlYXJPZmZzOwogIExpc3Q8X01hcExpdGVyYWw+IF9tYXBMaXRlcmFsczsKICBMaXN0PF9Db250YWluZXJMaXRlcmFsPiBfbGlzdExpdGVyYWxzOwogIExpc3Q8X0NvbnRhaW5lckxpdGVyYWw+IF9zZXRMaXRlcmFsczsKICBMaXN0PFN0cmluZz4gX3N5bWJvbExpdGVyYWxzOwogIExpc3Q8U3RyaW5nPiBfc3RyaW5nTGl0ZXJhbHM7CiAgTGlzdDxib29sPiBfYm9vbExpdGVyYWxzOwogIExpc3Q8ZG91YmxlPiBfZG91YmxlTGl0ZXJhbHM7CiAgTGlzdDxpbnQ+IF9pbnRMaXRlcmFsczsKICBMaXN0PF9SdW50aW1lVHlwZVVzZT4gX3J1bnRpbWVUeXBlVXNlczsKICBMaXN0PF9Gb3JJbkRhdGE+IF9mb3JJbkRhdGE7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGVzZSB3aGVuIENGRSBwcm92aWRlcyBjb25zdGFudHMuCiAgTGlzdDxpci5Db25zdHJ1Y3Rvcj4gX2NvbnN0cnVjdG9yTm9kZXM7CiAgTGlzdDxpci5GaWVsZD4gX2ZpZWxkTm9kZXM7CiAgTGlzdDxpci5Qcm9jZWR1cmU+IF9wcm9jZWR1cmVOb2RlczsKICBMaXN0PGlyLlN3aXRjaFN0YXRlbWVudD4gX3N3aXRjaFN0YXRlbWVudE5vZGVzOwogIExpc3Q8aXIuU3RhdGljSW52b2NhdGlvbj4gX3N0YXRpY0ludm9jYXRpb25Ob2RlczsKICBMaXN0PGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbj4gX2NvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZXM7CgogIEltcGFjdERhdGFJbXBsKCk7CgogIEltcGFjdERhdGFJbXBsLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIF9zdXBlckluaXRpYWxpemVycyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX1N1cGVySW5pdGlhbGl6ZXIuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3VwZXJTZXRzID0gc291cmNlLnJlYWRMaXN0KCgpID0+IHNvdXJjZS5yZWFkTmFtZSgpLCBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3VwZXJHZXRzID0gc291cmNlLnJlYWRMaXN0KCgpID0+IHNvdXJjZS5yZWFkTmFtZSgpLCBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3VwZXJJbnZvY2F0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX1N1cGVySW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9pbnN0YW5jZVNldHMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9JbnN0YW5jZUFjY2Vzcy5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9keW5hbWljU2V0cyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0R5bmFtaWNBY2Nlc3MuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfaW5zdGFuY2VHZXRzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfSW5zdGFuY2VBY2Nlc3MuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZHluYW1pY0dldHMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9EeW5hbWljQWNjZXNzLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2Z1bmN0aW9uSW52b2NhdGlvbnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9GdW5jdGlvbkludm9jYXRpb24uZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfaW5zdGFuY2VJbnZvY2F0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0luc3RhbmNlSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9keW5hbWljSW52b2NhdGlvbnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9EeW5hbWljSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9sb2NhbEZ1bmN0aW9uSW52b2NhdGlvbnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zdGF0aWNJbnZvY2F0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX1N0YXRpY0ludm9jYXRpb24uZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfY29uc3RydWN0b3JJbnZvY2F0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0NvbnN0cnVjdG9ySW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9mZWF0dXJlcyA9IG5ldyBFbnVtU2V0PF9GZWF0dXJlPi5mcm9tVmFsdWUoc291cmNlLnJlYWRJbnQoKSk7CiAgICBfdHlwZVVzZXMgPSBzb3VyY2UucmVhZExpc3QoKCkgPT4gbmV3IF9UeXBlVXNlLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3JlZGlyZWN0aW5nSW5pdGlhbGl6ZXJzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfUmVkaXJlY3RpbmdJbml0aWFsaXplci5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9maWVsZEluaXRpYWxpemVycyA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZXMoZW1wdHlBc051bGw6IHRydWUpOwogICAgX2ZpZWxkQ29uc3RhbnRJbml0aWFsaXplcnMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTm9kZU1hcChzb3VyY2UucmVhZFRyZWVOb2RlcywgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3R5cGVMaXRlcmFscyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX1R5cGVMaXRlcmFsLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2xvY2FsRnVuY3Rpb25zID0gc291cmNlLnJlYWRUcmVlTm9kZXMoZW1wdHlBc051bGw6IHRydWUpOwogICAgX2dlbmVyaWNJbnN0YW50aWF0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0dlbmVyaWNJbnN0YW50aWF0aW9uLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N0YXRpY1NldHMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9TdGF0aWNBY2Nlc3MuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3RhdGljR2V0cyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX1N0YXRpY0FjY2Vzcy5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zdGF0aWNUZWFyT2ZmcyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX1N0YXRpY0FjY2Vzcy5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9tYXBMaXRlcmFscyA9IHNvdXJjZS5yZWFkTGlzdCgoKSA9PiBuZXcgX01hcExpdGVyYWwuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfbGlzdExpdGVyYWxzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfQ29udGFpbmVyTGl0ZXJhbC5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zZXRMaXRlcmFscyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0NvbnRhaW5lckxpdGVyYWwuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3ltYm9sTGl0ZXJhbHMgPSBzb3VyY2UucmVhZFN0cmluZ3MoZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N0cmluZ0xpdGVyYWxzID0gc291cmNlLnJlYWRTdHJpbmdzKGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9ib29sTGl0ZXJhbHMgPSBzb3VyY2UucmVhZExpc3QoKCkgPT4gc291cmNlLnJlYWRCb29sKCksIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9kb3VibGVMaXRlcmFscyA9CiAgICAgICAgc291cmNlLnJlYWRMaXN0KCgpID0+IHNvdXJjZS5yZWFkRG91YmxlVmFsdWUoKSwgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2ludExpdGVyYWxzID0KICAgICAgICBzb3VyY2UucmVhZExpc3QoKCkgPT4gc291cmNlLnJlYWRJbnRlZ2VyVmFsdWUoKSwgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3J1bnRpbWVUeXBlVXNlcyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX1J1bnRpbWVUeXBlVXNlLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGVzZSB3aGVuIENGRSBwcm92aWRlcyBjb25zdGFudHMuCiAgICBfY29uc3RydWN0b3JOb2RlcyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJOb2Rlczxpci5Db25zdHJ1Y3Rvcj4oZW1wdHlBc051bGw6IHRydWUpOwogICAgX2ZpZWxkTm9kZXMgPSBzb3VyY2UucmVhZE1lbWJlck5vZGVzPGlyLkZpZWxkPihlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfcHJvY2VkdXJlTm9kZXMgPSBzb3VyY2UucmVhZE1lbWJlck5vZGVzPGlyLlByb2NlZHVyZT4oZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N3aXRjaFN0YXRlbWVudE5vZGVzID0KICAgICAgICBzb3VyY2UucmVhZFRyZWVOb2Rlczxpci5Td2l0Y2hTdGF0ZW1lbnQ+KGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zdGF0aWNJbnZvY2F0aW9uTm9kZXMgPQogICAgICAgIHNvdXJjZS5yZWFkVHJlZU5vZGVzPGlyLlN0YXRpY0ludm9jYXRpb24+KGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzID0KICAgICAgICBzb3VyY2UucmVhZFRyZWVOb2Rlczxpci5Db25zdHJ1Y3Rvckludm9jYXRpb24+KGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CgogICAgc2luay53cml0ZUxpc3QoCiAgICAgICAgX3N1cGVySW5pdGlhbGl6ZXJzLCAoX1N1cGVySW5pdGlhbGl6ZXIgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfc3VwZXJTZXRzLCBzaW5rLndyaXRlTmFtZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9zdXBlckdldHMsIHNpbmsud3JpdGVOYW1lLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoCiAgICAgICAgX3N1cGVySW52b2NhdGlvbnMsIChfU3VwZXJJbnZvY2F0aW9uIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2luc3RhbmNlU2V0cywgKF9JbnN0YW5jZUFjY2VzcyBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9keW5hbWljU2V0cywgKF9EeW5hbWljQWNjZXNzIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2luc3RhbmNlR2V0cywgKF9JbnN0YW5jZUFjY2VzcyBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9keW5hbWljR2V0cywgKF9EeW5hbWljQWNjZXNzIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoCiAgICAgICAgX2Z1bmN0aW9uSW52b2NhdGlvbnMsIChfRnVuY3Rpb25JbnZvY2F0aW9uIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoCiAgICAgICAgX2luc3RhbmNlSW52b2NhdGlvbnMsIChfSW5zdGFuY2VJbnZvY2F0aW9uIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoCiAgICAgICAgX2R5bmFtaWNJbnZvY2F0aW9ucywgKF9EeW5hbWljSW52b2NhdGlvbiBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9sb2NhbEZ1bmN0aW9uSW52b2NhdGlvbnMsCiAgICAgICAgKF9Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbiBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIF9zdGF0aWNJbnZvY2F0aW9ucywgKF9TdGF0aWNJbnZvY2F0aW9uIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2NvbnN0cnVjdG9ySW52b2NhdGlvbnMsCiAgICAgICAgKF9Db25zdHJ1Y3Rvckludm9jYXRpb24gbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlSW50KF9mZWF0dXJlcz8udmFsdWUgPz8gMCk7CiAgICBzaW5rLndyaXRlTGlzdChfdHlwZVVzZXMsIChfVHlwZVVzZSBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9yZWRpcmVjdGluZ0luaXRpYWxpemVycywKICAgICAgICAoX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZXMoX2ZpZWxkSW5pdGlhbGl6ZXJzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZU1lbWJlck5vZGVNYXAoX2ZpZWxkQ29uc3RhbnRJbml0aWFsaXplcnMsIHNpbmsud3JpdGVUcmVlTm9kZXMsCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF90eXBlTGl0ZXJhbHMsIChfVHlwZUxpdGVyYWwgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVzKF9sb2NhbEZ1bmN0aW9ucywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMsIChfR2VuZXJpY0luc3RhbnRpYXRpb24gbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfc3RhdGljU2V0cywgKF9TdGF0aWNBY2Nlc3MgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfc3RhdGljR2V0cywgKF9TdGF0aWNBY2Nlc3MgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfc3RhdGljVGVhck9mZnMsIChfU3RhdGljQWNjZXNzIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX21hcExpdGVyYWxzLCAoX01hcExpdGVyYWwgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfbGlzdExpdGVyYWxzLCAoX0NvbnRhaW5lckxpdGVyYWwgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfc2V0TGl0ZXJhbHMsIChfQ29udGFpbmVyTGl0ZXJhbCBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVTdHJpbmdzKF9zeW1ib2xMaXRlcmFscywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVTdHJpbmdzKF9zdHJpbmdMaXRlcmFscywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9ib29sTGl0ZXJhbHMsIHNpbmsud3JpdGVCb29sLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2RvdWJsZUxpdGVyYWxzLCBzaW5rLndyaXRlRG91YmxlVmFsdWUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfaW50TGl0ZXJhbHMsIHNpbmsud3JpdGVJbnRlZ2VyVmFsdWUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfcnVudGltZVR5cGVVc2VzLCAoX1J1bnRpbWVUeXBlVXNlIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGVzZSB3aGVuIENGRSBwcm92aWRlcyBjb25zdGFudHMuCiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZXMoX2NvbnN0cnVjdG9yTm9kZXMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZXMoX2ZpZWxkTm9kZXMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZXMoX3Byb2NlZHVyZU5vZGVzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVRyZWVOb2Rlcyhfc3dpdGNoU3RhdGVtZW50Tm9kZXMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVzKF9zdGF0aWNJbnZvY2F0aW9uTm9kZXMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVzKF9jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzLCBhbGxvd051bGw6IHRydWUpOwoKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFwcGx5KEltcGFjdFJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7CiAgICBpZiAoX3N1cGVySW5pdGlhbGl6ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChfU3VwZXJJbml0aWFsaXplciBkYXRhIGluIF9zdXBlckluaXRpYWxpemVycykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3VwZXJJbml0aWFsaXplcigKICAgICAgICAgICAgZGF0YS5zb3VyY2UsCiAgICAgICAgICAgIGRhdGEudGFyZ2V0LAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3VwZXJTZXRzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5OYW1lIGRhdGEgaW4gX3N1cGVyU2V0cykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3VwZXJTZXQoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3VwZXJHZXRzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5OYW1lIGRhdGEgaW4gX3N1cGVyR2V0cykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3VwZXJHZXQoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3VwZXJJbnZvY2F0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1N1cGVySW52b2NhdGlvbiBkYXRhIGluIF9zdXBlckludm9jYXRpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdXBlckludm9jYXRpb24oCiAgICAgICAgICAgIGRhdGEubmFtZSwKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2luc3RhbmNlU2V0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0luc3RhbmNlQWNjZXNzIGRhdGEgaW4gX2luc3RhbmNlU2V0cykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVySW5zdGFuY2VTZXQoCiAgICAgICAgICAgIGRhdGEucmVjZWl2ZXJUeXBlLCBkYXRhLmNsYXNzUmVsYXRpb24sIGRhdGEudGFyZ2V0KTsKICAgICAgfQogICAgfQogICAgaWYgKF9keW5hbWljU2V0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0R5bmFtaWNBY2Nlc3MgZGF0YSBpbiBfZHluYW1pY1NldHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckR5bmFtaWNTZXQoCiAgICAgICAgICAgIGRhdGEucmVjZWl2ZXJUeXBlLCBkYXRhLmNsYXNzUmVsYXRpb24sIGRhdGEubmFtZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfaW5zdGFuY2VHZXRzICE9IG51bGwpIHsKICAgICAgZm9yIChfSW5zdGFuY2VBY2Nlc3MgZGF0YSBpbiBfaW5zdGFuY2VHZXRzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJJbnN0YW5jZUdldCgKICAgICAgICAgICAgZGF0YS5yZWNlaXZlclR5cGUsIGRhdGEuY2xhc3NSZWxhdGlvbiwgZGF0YS50YXJnZXQpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2R5bmFtaWNHZXRzICE9IG51bGwpIHsKICAgICAgZm9yIChfRHluYW1pY0FjY2VzcyBkYXRhIGluIF9keW5hbWljR2V0cykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRHluYW1pY0dldCgKICAgICAgICAgICAgZGF0YS5yZWNlaXZlclR5cGUsIGRhdGEuY2xhc3NSZWxhdGlvbiwgZGF0YS5uYW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKF9mdW5jdGlvbkludm9jYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChfRnVuY3Rpb25JbnZvY2F0aW9uIGRhdGEgaW4gX2Z1bmN0aW9uSW52b2NhdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckZ1bmN0aW9uSW52b2NhdGlvbigKICAgICAgICAgICAgZGF0YS5yZWNlaXZlclR5cGUsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgaWYgKF9pbnN0YW5jZUludm9jYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChfSW5zdGFuY2VJbnZvY2F0aW9uIGRhdGEgaW4gX2luc3RhbmNlSW52b2NhdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3Rlckluc3RhbmNlSW52b2NhdGlvbigKICAgICAgICAgICAgZGF0YS5yZWNlaXZlclR5cGUsCiAgICAgICAgICAgIGRhdGEuY2xhc3NSZWxhdGlvbiwKICAgICAgICAgICAgZGF0YS50YXJnZXQsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgaWYgKF9keW5hbWljSW52b2NhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9EeW5hbWljSW52b2NhdGlvbiBkYXRhIGluIF9keW5hbWljSW52b2NhdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgICBkYXRhLnJlY2VpdmVyVHlwZSwKICAgICAgICAgICAgZGF0YS5jbGFzc1JlbGF0aW9uLAogICAgICAgICAgICBkYXRhLm5hbWUsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgaWYgKF9sb2NhbEZ1bmN0aW9uSW52b2NhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbiBkYXRhIGluIF9sb2NhbEZ1bmN0aW9uSW52b2NhdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckxvY2FsRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICAgICAgICBkYXRhLmxvY2FsRnVuY3Rpb24sCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zdGF0aWNJbnZvY2F0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1N0YXRpY0ludm9jYXRpb24gZGF0YSBpbiBfc3RhdGljSW52b2NhdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICAgIGRhdGEudGFyZ2V0LAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5pbXBvcnQpOwogICAgICAgIDsKICAgICAgfQogICAgfQogICAgaWYgKF9jb25zdHJ1Y3Rvckludm9jYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChfQ29uc3RydWN0b3JJbnZvY2F0aW9uIGRhdGEgaW4gX2NvbnN0cnVjdG9ySW52b2NhdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3Rlck5ldygKICAgICAgICAgICAgZGF0YS5jb25zdHJ1Y3RvciwKICAgICAgICAgICAgZGF0YS50eXBlLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5pbXBvcnQsCiAgICAgICAgICAgIGlzQ29uc3Q6IGRhdGEuaXNDb25zdCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfY29uc3RJbnN0YW50aWF0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0NvbnN0SW5zdGFudGlhdGlvbiBkYXRhIGluIF9jb25zdEluc3RhbnRpYXRpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJDb25zdEluc3RhbnRpYXRpb24oCiAgICAgICAgICAgIGRhdGEuY2xzLCBkYXRhLnR5cGVBcmd1bWVudHMsIGRhdGEuaW1wb3J0KTsKICAgICAgfQogICAgfQogICAgaWYgKF9mZWF0dXJlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0ZlYXR1cmUgZGF0YSBpbiBfZmVhdHVyZXMuaXRlcmFibGUoX0ZlYXR1cmUudmFsdWVzKSkgewogICAgICAgIHN3aXRjaCAoZGF0YSkgewogICAgICAgICAgY2FzZSBfRmVhdHVyZS5sYXp5RmllbGQ6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTGF6eUZpZWxkKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfRmVhdHVyZS5sb2FkTGlicmFyeToKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJMb2FkTGlicmFyeSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUuc3RhY2tUcmFjZToKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdGFja1RyYWNlKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfRmVhdHVyZS5jYXRjaENsYXVzZToKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJDYXRjaCgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUudGhyb3dFeHByZXNzaW9uOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlclRocm93KCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfRmVhdHVyZS5sb2NhbFdpdGhvdXRJbml0aWFsaXplcjoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJMb2NhbFdpdGhvdXRJbml0aWFsaXplcigpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUuc3RyaW5nQ29uY2F0ZW5hdGlvbjoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdHJpbmdDb25jYXRlbmF0aW9uKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfRmVhdHVyZS5hc3NlcnRXaXRoTWVzc2FnZToKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBc3NlcnQod2l0aE1lc3NhZ2U6IHRydWUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUuYXNzZXJ0V2l0aG91dE1lc3NhZ2U6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXNzZXJ0KHdpdGhNZXNzYWdlOiBmYWxzZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfRmVhdHVyZS5udWxsTGl0ZXJhbDoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJOdWxsTGl0ZXJhbCgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChfdHlwZVVzZXMgIT0gbnVsbCkgewogICAgICBmb3IgKF9UeXBlVXNlIGRhdGEgaW4gX3R5cGVVc2VzKSB7CiAgICAgICAgc3dpdGNoIChkYXRhLmtpbmQpIHsKICAgICAgICAgIGNhc2UgX1R5cGVVc2VLaW5kLnBhcmFtZXRlckNoZWNrOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlclBhcmFtZXRlckNoZWNrKGRhdGEudHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfVHlwZVVzZUtpbmQuY2F0Y2hUeXBlOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckNhdGNoVHlwZShkYXRhLnR5cGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1R5cGVVc2VLaW5kLmFzQ2FzdDoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBc0Nhc3QoZGF0YS50eXBlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9UeXBlVXNlS2luZC5pbXBsaWNpdENhc3Q6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVySW1wbGljaXRDYXN0KGRhdGEudHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfVHlwZVVzZUtpbmQuaXNDaGVjazoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJJc0NoZWNrKGRhdGEudHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfVHlwZVVzZUtpbmQuYXN5bmNTdGFyTWFya2VyOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFzeW5jU3RhcihkYXRhLnR5cGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1R5cGVVc2VLaW5kLmFzeW5jTWFya2VyOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFzeW5jKGRhdGEudHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfVHlwZVVzZUtpbmQuc3luY1N0YXJNYXJrZXI6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3luY1N0YXIoZGF0YS50eXBlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoX3JlZGlyZWN0aW5nSW5pdGlhbGl6ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChfUmVkaXJlY3RpbmdJbml0aWFsaXplciBkYXRhIGluIF9yZWRpcmVjdGluZ0luaXRpYWxpemVycykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgICAgICAgZGF0YS5jb25zdHJ1Y3RvciwKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2ZpZWxkSW5pdGlhbGl6ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5GaWVsZCBkYXRhIGluIF9maWVsZEluaXRpYWxpemVycykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRmllbGRJbml0aWFsaXphdGlvbihkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzICE9IG51bGwpIHsKICAgICAgX2ZpZWxkQ29uc3RhbnRJbml0aWFsaXplcnMKICAgICAgICAgIC5mb3JFYWNoKChpci5GaWVsZCBmaWVsZCwgTGlzdDxDb25zdGFudFJlZmVyZW5jZT4gY29uc3RhbnRzKSB7CiAgICAgICAgZm9yIChDb25zdGFudFJlZmVyZW5jZSBjb25zdGFudCBpbiBjb25zdGFudHMpIHsKICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRmllbGRDb25zdGFudEluaXRpYWxpemF0aW9uKGZpZWxkLCBjb25zdGFudCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGlmIChfdHlwZUxpdGVyYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChfVHlwZUxpdGVyYWwgZGF0YSBpbiBfdHlwZUxpdGVyYWxzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJUeXBlTGl0ZXJhbChkYXRhLnR5cGUsIGRhdGEuaW1wb3J0KTsKICAgICAgfQogICAgfQogICAgaWYgKF9sb2NhbEZ1bmN0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuVHJlZU5vZGUgZGF0YSBpbiBfbG9jYWxGdW5jdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckxvY2FsRnVuY3Rpb24oZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZ2VuZXJpY0luc3RhbnRpYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChfR2VuZXJpY0luc3RhbnRpYXRpb24gZGF0YSBpbiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbigKICAgICAgICAgICAgZGF0YS5leHByZXNzaW9uVHlwZSwgZGF0YS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zdGF0aWNTZXRzICE9IG51bGwpIHsKICAgICAgZm9yIChfU3RhdGljQWNjZXNzIGRhdGEgaW4gX3N0YXRpY1NldHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1NldChkYXRhLnRhcmdldCwgZGF0YS5pbXBvcnQpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N0YXRpY0dldHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9TdGF0aWNBY2Nlc3MgZGF0YSBpbiBfc3RhdGljR2V0cykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljR2V0KGRhdGEudGFyZ2V0LCBkYXRhLmltcG9ydCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3RhdGljVGVhck9mZnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9TdGF0aWNBY2Nlc3MgZGF0YSBpbiBfc3RhdGljVGVhck9mZnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1RlYXJPZmYoZGF0YS50YXJnZXQsIGRhdGEuaW1wb3J0KTsKICAgICAgfQogICAgfQogICAgaWYgKF9tYXBMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoX01hcExpdGVyYWwgZGF0YSBpbiBfbWFwTGl0ZXJhbHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3Rlck1hcExpdGVyYWwoZGF0YS5rZXlUeXBlLCBkYXRhLnZhbHVlVHlwZSwKICAgICAgICAgICAgaXNDb25zdDogZGF0YS5pc0NvbnN0LCBpc0VtcHR5OiBkYXRhLmlzRW1wdHkpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2xpc3RMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0NvbnRhaW5lckxpdGVyYWwgZGF0YSBpbiBfbGlzdExpdGVyYWxzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJMaXN0TGl0ZXJhbChkYXRhLmVsZW1lbnRUeXBlLAogICAgICAgICAgICBpc0NvbnN0OiBkYXRhLmlzQ29uc3QsIGlzRW1wdHk6IGRhdGEuaXNFbXB0eSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc2V0TGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9Db250YWluZXJMaXRlcmFsIGRhdGEgaW4gX3NldExpdGVyYWxzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTZXRMaXRlcmFsKGRhdGEuZWxlbWVudFR5cGUsCiAgICAgICAgICAgIGlzQ29uc3Q6IGRhdGEuaXNDb25zdCwgaXNFbXB0eTogZGF0YS5pc0VtcHR5KTsKICAgICAgfQogICAgfQogICAgaWYgKF9zeW1ib2xMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoU3RyaW5nIGRhdGEgaW4gX3N5bWJvbExpdGVyYWxzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTeW1ib2xMaXRlcmFsKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N0cmluZ0xpdGVyYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChTdHJpbmcgZGF0YSBpbiBfc3RyaW5nTGl0ZXJhbHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0cmluZ0xpdGVyYWwoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfYm9vbExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChib29sIGRhdGEgaW4gX2Jvb2xMaXRlcmFscykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQm9vbExpdGVyYWwoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZG91YmxlTGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBmb3IgKGRvdWJsZSBkYXRhIGluIF9kb3VibGVMaXRlcmFscykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRG91YmxlTGl0ZXJhbChkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9pbnRMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGRhdGEgaW4gX2ludExpdGVyYWxzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJJbnRMaXRlcmFsKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3J1bnRpbWVUeXBlVXNlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1J1bnRpbWVUeXBlVXNlIGRhdGEgaW4gX3J1bnRpbWVUeXBlVXNlcykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyUnVudGltZVR5cGVVc2UoCiAgICAgICAgICAgIGRhdGEubm9kZSwgZGF0YS5raW5kLCBkYXRhLnJlY2VpdmVyVHlwZSwgZGF0YS5hcmd1bWVudFR5cGUpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2ZvckluRGF0YSAhPSBudWxsKSB7CiAgICAgIGZvciAoX0ZvckluRGF0YSBkYXRhIGluIF9mb3JJbkRhdGEpIHsKICAgICAgICBpZiAoZGF0YS5pc0FzeW5jKSB7CiAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFzeW5jRm9ySW4oCiAgICAgICAgICAgICAgZGF0YS5pdGVyYWJsZVR5cGUsIGRhdGEuaXRlcmF0b3JUeXBlLCBkYXRhLml0ZXJhdG9yQ2xhc3NSZWxhdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3luY0ZvckluKAogICAgICAgICAgICAgIGRhdGEuaXRlcmFibGVUeXBlLCBkYXRhLml0ZXJhdG9yVHlwZSwgZGF0YS5pdGVyYXRvckNsYXNzUmVsYXRpb24pOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGVzZSB3aGVuIENGRSBwcm92aWRlcyBjb25zdGFudHMuCiAgICBpZiAoX2NvbnN0cnVjdG9yTm9kZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLkNvbnN0cnVjdG9yIGRhdGEgaW4gX2NvbnN0cnVjdG9yTm9kZXMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckNvbnN0cnVjdG9yTm9kZShkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9maWVsZE5vZGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5GaWVsZCBkYXRhIGluIF9maWVsZE5vZGVzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJGaWVsZE5vZGUoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfcHJvY2VkdXJlTm9kZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLlByb2NlZHVyZSBkYXRhIGluIF9wcm9jZWR1cmVOb2RlcykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyUHJvY2VkdXJlTm9kZShkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zd2l0Y2hTdGF0ZW1lbnROb2RlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuU3dpdGNoU3RhdGVtZW50IGRhdGEgaW4gX3N3aXRjaFN0YXRlbWVudE5vZGVzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTd2l0Y2hTdGF0ZW1lbnROb2RlKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N0YXRpY0ludm9jYXRpb25Ob2RlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuU3RhdGljSW52b2NhdGlvbiBkYXRhIGluIF9zdGF0aWNJbnZvY2F0aW9uTm9kZXMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY0ludm9jYXRpb25Ob2RlKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2NvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBkYXRhIGluIF9jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJDb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGUoZGF0YSk7CiAgICAgIH0KICAgIH0KICB9Cn0KCmNsYXNzIF9DYWxsU3RydWN0dXJlIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfQ2FsbFN0cnVjdHVyZSc7CgogIGZpbmFsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgZmluYWwgaW50IHBvc2l0aW9uYWxBcmd1bWVudHM7CiAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzOwoKICBfQ2FsbFN0cnVjdHVyZS5pbnRlcm5hbCgKICAgICAgdGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLnBvc2l0aW9uYWxBcmd1bWVudHMsIHRoaXMubmFtZWRBcmd1bWVudHMpOwoKICBmYWN0b3J5IF9DYWxsU3RydWN0dXJlKGludCBwb3NpdGlvbmFsQXJndW1lbnRzLCBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgX0NhbGxTdHJ1Y3R1cmUuaW50ZXJuYWwoCiAgICAgICAgdHlwZUFyZ3VtZW50cywgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMpOwogIH0KCiAgZmFjdG9yeSBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGVzKCk7CiAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMgPSBzb3VyY2UucmVhZFN0cmluZ3MoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0NhbGxTdHJ1Y3R1cmUuaW50ZXJuYWwoCiAgICAgICAgdHlwZUFyZ3VtZW50cywgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGVzKHR5cGVBcmd1bWVudHMpOwogICAgc2luay53cml0ZUludChwb3NpdGlvbmFsQXJndW1lbnRzKTsKICAgIHNpbmsud3JpdGVTdHJpbmdzKG5hbWVkQXJndW1lbnRzKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfU3VwZXJJbml0aWFsaXplciB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX1N1cGVySW5pdGlhbGl6ZXInOwoKICBmaW5hbCBpci5Db25zdHJ1Y3RvciBzb3VyY2U7CiAgZmluYWwgaXIuQ29uc3RydWN0b3IgdGFyZ2V0OwogIGZpbmFsIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CgogIF9TdXBlckluaXRpYWxpemVyKHRoaXMuc291cmNlLCB0aGlzLnRhcmdldCwgdGhpcy5jYWxsU3RydWN0dXJlKTsKCiAgZmFjdG9yeSBfU3VwZXJJbml0aWFsaXplci5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5Db25zdHJ1Y3RvciBzb3VyY2VDb25zdHJ1Y3RvciA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgaXIuQ29uc3RydWN0b3IgdGFyZ2V0Q29uc3RydWN0b3IgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX1N1cGVySW5pdGlhbGl6ZXIoCiAgICAgICAgc291cmNlQ29uc3RydWN0b3IsIHRhcmdldENvbnN0cnVjdG9yLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZShzb3VyY2UpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUodGFyZ2V0KTsKICAgIGNhbGxTdHJ1Y3R1cmUudG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfU3VwZXJJbnZvY2F0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfU3VwZXJJbnZvY2F0aW9uJzsKCiAgZmluYWwgaXIuTmFtZSBuYW1lOwogIGZpbmFsIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CgogIF9TdXBlckludm9jYXRpb24odGhpcy5uYW1lLCB0aGlzLmNhbGxTdHJ1Y3R1cmUpOwoKICBmYWN0b3J5IF9TdXBlckludm9jYXRpb24uZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuTmFtZSBuYW1lID0gc291cmNlLnJlYWROYW1lKCk7CiAgICBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9TdXBlckludm9jYXRpb24obmFtZSwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU5hbWUobmFtZSk7CiAgICBjYWxsU3RydWN0dXJlLnRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0luc3RhbmNlQWNjZXNzIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfSW5zdGFuY2VBY2Nlc3MnOwoKICBmaW5hbCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGU7CiAgZmluYWwgQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uOwogIGZpbmFsIGlyLk1lbWJlciB0YXJnZXQ7CgogIF9JbnN0YW5jZUFjY2Vzcyh0aGlzLnJlY2VpdmVyVHlwZSwgdGhpcy5jbGFzc1JlbGF0aW9uLCB0aGlzLnRhcmdldCk7CgogIGZhY3RvcnkgX0luc3RhbmNlQWNjZXNzLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBDbGFzc1JlbGF0aW9uIGNsYXNzUmVsYXRpb24gPSBzb3VyY2UucmVhZEVudW0oQ2xhc3NSZWxhdGlvbi52YWx1ZXMpOwogICAgaXIuTWVtYmVyIHRhcmdldCA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfSW5zdGFuY2VBY2Nlc3MocmVjZWl2ZXJUeXBlLCBjbGFzc1JlbGF0aW9uLCB0YXJnZXQpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUocmVjZWl2ZXJUeXBlKTsKICAgIHNpbmsud3JpdGVFbnVtKGNsYXNzUmVsYXRpb24pOwogICAgc2luay53cml0ZU1lbWJlck5vZGUodGFyZ2V0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfRHluYW1pY0FjY2VzcyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0R5bmFtaWNBY2Nlc3MnOwoKICBmaW5hbCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGU7CiAgZmluYWwgQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uOwogIGZpbmFsIGlyLk5hbWUgbmFtZTsKCiAgX0R5bmFtaWNBY2Nlc3ModGhpcy5yZWNlaXZlclR5cGUsIHRoaXMuY2xhc3NSZWxhdGlvbiwgdGhpcy5uYW1lKTsKCiAgZmFjdG9yeSBfRHluYW1pY0FjY2Vzcy5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uID0gc291cmNlLnJlYWRFbnVtKENsYXNzUmVsYXRpb24udmFsdWVzKTsKICAgIGlyLk5hbWUgbmFtZSA9IHNvdXJjZS5yZWFkTmFtZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfRHluYW1pY0FjY2VzcyhyZWNlaXZlclR5cGUsIGNsYXNzUmVsYXRpb24sIG5hbWUpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUocmVjZWl2ZXJUeXBlKTsKICAgIHNpbmsud3JpdGVFbnVtKGNsYXNzUmVsYXRpb24pOwogICAgc2luay53cml0ZU5hbWUobmFtZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0Z1bmN0aW9uSW52b2NhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0Z1bmN0aW9uSW52b2NhdGlvbic7CgogIGZpbmFsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZTsKICBmaW5hbCBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwoKICBfRnVuY3Rpb25JbnZvY2F0aW9uKHRoaXMucmVjZWl2ZXJUeXBlLCB0aGlzLmNhbGxTdHJ1Y3R1cmUpOwoKICBmYWN0b3J5IF9GdW5jdGlvbkludm9jYXRpb24uZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0Z1bmN0aW9uSW52b2NhdGlvbihyZWNlaXZlclR5cGUsIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUocmVjZWl2ZXJUeXBlKTsKICAgIGNhbGxTdHJ1Y3R1cmUudG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfSW5zdGFuY2VJbnZvY2F0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfSW5zdGFuY2VJbnZvY2F0aW9uJzsKCiAgZmluYWwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwogIGZpbmFsIENsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbjsKICBmaW5hbCBpci5NZW1iZXIgdGFyZ2V0OwogIGZpbmFsIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CgogIF9JbnN0YW5jZUludm9jYXRpb24oCiAgICAgIHRoaXMucmVjZWl2ZXJUeXBlLCB0aGlzLmNsYXNzUmVsYXRpb24sIHRoaXMudGFyZ2V0LCB0aGlzLmNhbGxTdHJ1Y3R1cmUpOwoKICBmYWN0b3J5IF9JbnN0YW5jZUludm9jYXRpb24uZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIENsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbiA9IHNvdXJjZS5yZWFkRW51bShDbGFzc1JlbGF0aW9uLnZhbHVlcyk7CiAgICBpci5NZW1iZXIgdGFyZ2V0ID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9JbnN0YW5jZUludm9jYXRpb24oCiAgICAgICAgcmVjZWl2ZXJUeXBlLCBjbGFzc1JlbGF0aW9uLCB0YXJnZXQsIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUocmVjZWl2ZXJUeXBlKTsKICAgIHNpbmsud3JpdGVFbnVtKGNsYXNzUmVsYXRpb24pOwogICAgc2luay53cml0ZU1lbWJlck5vZGUodGFyZ2V0KTsKICAgIGNhbGxTdHJ1Y3R1cmUudG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfRHluYW1pY0ludm9jYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19EeW5hbWljSW52b2NhdGlvbic7CgogIGZpbmFsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZTsKICBmaW5hbCBDbGFzc1JlbGF0aW9uIGNsYXNzUmVsYXRpb247CiAgZmluYWwgaXIuTmFtZSBuYW1lOwogIGZpbmFsIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CgogIF9EeW5hbWljSW52b2NhdGlvbigKICAgICAgdGhpcy5yZWNlaXZlclR5cGUsIHRoaXMuY2xhc3NSZWxhdGlvbiwgdGhpcy5uYW1lLCB0aGlzLmNhbGxTdHJ1Y3R1cmUpOwoKICBmYWN0b3J5IF9EeW5hbWljSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uID0gc291cmNlLnJlYWRFbnVtKENsYXNzUmVsYXRpb24udmFsdWVzKTsKICAgIGlyLk5hbWUgbmFtZSA9IHNvdXJjZS5yZWFkTmFtZSgpOwogICAgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgcmVjZWl2ZXJUeXBlLCBjbGFzc1JlbGF0aW9uLCBuYW1lLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHJlY2VpdmVyVHlwZSk7CiAgICBzaW5rLndyaXRlRW51bShjbGFzc1JlbGF0aW9uKTsKICAgIHNpbmsud3JpdGVOYW1lKG5hbWUpOwogICAgY2FsbFN0cnVjdHVyZS50b0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uJzsKCiAgZmluYWwgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBsb2NhbEZ1bmN0aW9uOwogIGZpbmFsIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CgogIF9Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbih0aGlzLmxvY2FsRnVuY3Rpb24sIHRoaXMuY2FsbFN0cnVjdHVyZSk7CgogIGZhY3RvcnkgX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gbG9jYWxGdW5jdGlvbiA9IHNvdXJjZS5yZWFkVHJlZU5vZGUoKTsKICAgIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uKGxvY2FsRnVuY3Rpb24sIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZShsb2NhbEZ1bmN0aW9uKTsKICAgIGNhbGxTdHJ1Y3R1cmUudG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfU3RhdGljSW52b2NhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX1N0YXRpY0ludm9jYXRpb24nOwoKICBmaW5hbCBpci5Qcm9jZWR1cmUgdGFyZ2V0OwogIGZpbmFsIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CiAgZmluYWwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0OwoKICBfU3RhdGljSW52b2NhdGlvbih0aGlzLnRhcmdldCwgdGhpcy5jYWxsU3RydWN0dXJlLCB0aGlzLmltcG9ydCk7CgogIGZhY3RvcnkgX1N0YXRpY0ludm9jYXRpb24uZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuUHJvY2VkdXJlIHRhcmdldCA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0ID0gc291cmNlLnJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX1N0YXRpY0ludm9jYXRpb24odGFyZ2V0LCBjYWxsU3RydWN0dXJlLCBpbXBvcnQpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKHRhcmdldCk7CiAgICBjYWxsU3RydWN0dXJlLnRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKGltcG9ydCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0NvbnN0cnVjdG9ySW52b2NhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0NvbnN0cnVjdG9ySW52b2NhdGlvbic7CgogIGZpbmFsIGlyLk1lbWJlciBjb25zdHJ1Y3RvcjsKICBmaW5hbCBpci5JbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKICBmaW5hbCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQ7CiAgZmluYWwgYm9vbCBpc0NvbnN0OwoKICBfQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLnR5cGUsIHRoaXMuY2FsbFN0cnVjdHVyZSwgdGhpcy5pbXBvcnQsCiAgICAgIHt0aGlzLmlzQ29uc3R9KTsKCiAgZmFjdG9yeSBfQ29uc3RydWN0b3JJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLk1lbWJlciBjb25zdHJ1Y3RvciA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgaXIuSW50ZXJmYWNlVHlwZSB0eXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCA9IHNvdXJjZS5yZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKCk7CiAgICBib29sIGlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0NvbnN0cnVjdG9ySW52b2NhdGlvbihjb25zdHJ1Y3RvciwgdHlwZSwgY2FsbFN0cnVjdHVyZSwgaW1wb3J0LAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKGNvbnN0cnVjdG9yKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUodHlwZSk7CiAgICBjYWxsU3RydWN0dXJlLnRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKGltcG9ydCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0NvbnN0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfQ29uc3RJbnN0YW50aWF0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfQ29uc3RJbnN0YW50aWF0aW9uJzsKCiAgZmluYWwgaXIuQ2xhc3MgY2xzOwogIGZpbmFsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgZmluYWwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0OwoKICBfQ29uc3RJbnN0YW50aWF0aW9uKHRoaXMuY2xzLCB0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMuaW1wb3J0KTsKCiAgZmFjdG9yeSBfQ29uc3RJbnN0YW50aWF0aW9uLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkNsYXNzIGNscyA9IHNvdXJjZS5yZWFkQ2xhc3NOb2RlKCk7CiAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGVzKCk7CiAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQgPSBzb3VyY2UucmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfQ29uc3RJbnN0YW50aWF0aW9uKGNscywgdHlwZUFyZ3VtZW50cywgaW1wb3J0KTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NOb2RlKGNscyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2Rlcyh0eXBlQXJndW1lbnRzKTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoaW1wb3J0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgplbnVtIF9GZWF0dXJlIHsKICBsYXp5RmllbGQsCiAgbG9hZExpYnJhcnksCiAgc3RhY2tUcmFjZSwKICBjYXRjaENsYXVzZSwKICB0aHJvd0V4cHJlc3Npb24sCiAgbG9jYWxXaXRob3V0SW5pdGlhbGl6ZXIsCiAgc3RyaW5nQ29uY2F0ZW5hdGlvbiwKICBhc3NlcnRXaXRoTWVzc2FnZSwKICBhc3NlcnRXaXRob3V0TWVzc2FnZSwKICBudWxsTGl0ZXJhbCwKfQoKY2xhc3MgX1R5cGVVc2UgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19UeXBlVXNlJzsKCiAgZmluYWwgaXIuRGFydFR5cGUgdHlwZTsKICBmaW5hbCBfVHlwZVVzZUtpbmQga2luZDsKCiAgX1R5cGVVc2UodGhpcy50eXBlLCB0aGlzLmtpbmQpOwoKICBmYWN0b3J5IF9UeXBlVXNlLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIHR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgX1R5cGVVc2VLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oX1R5cGVVc2VLaW5kLnZhbHVlcyk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9UeXBlVXNlKHR5cGUsIGtpbmQpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUodHlwZSk7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgplbnVtIF9UeXBlVXNlS2luZCB7CiAgcGFyYW1ldGVyQ2hlY2ssCiAgY2F0Y2hUeXBlLAogIGFzQ2FzdCwKICBpbXBsaWNpdENhc3QsCiAgaXNDaGVjaywKICBhc3luY1N0YXJNYXJrZXIsCiAgYXN5bmNNYXJrZXIsCiAgc3luY1N0YXJNYXJrZXIsCn0KCmNsYXNzIF9SZWRpcmVjdGluZ0luaXRpYWxpemVyIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfUmVkaXJlY3RpbmdJbml0aWFsaXplcic7CgogIGZpbmFsIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yOwogIGZpbmFsIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CgogIF9SZWRpcmVjdGluZ0luaXRpYWxpemVyKHRoaXMuY29uc3RydWN0b3IsIHRoaXMuY2FsbFN0cnVjdHVyZSk7CgogIGZhY3RvcnkgX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXIuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoY29uc3RydWN0b3IsIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKGNvbnN0cnVjdG9yKTsKICAgIGNhbGxTdHJ1Y3R1cmUudG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfVHlwZUxpdGVyYWwgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19UeXBlTGl0ZXJhbCc7CgogIGZpbmFsIGlyLkRhcnRUeXBlIHR5cGU7CiAgZmluYWwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0OwoKICBfVHlwZUxpdGVyYWwodGhpcy50eXBlLCB0aGlzLmltcG9ydCk7CgogIGZhY3RvcnkgX1R5cGVMaXRlcmFsLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIHR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0ID0gc291cmNlLnJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX1R5cGVMaXRlcmFsKHR5cGUsIGltcG9ydCk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZSh0eXBlKTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoaW1wb3J0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfR2VuZXJpY0luc3RhbnRpYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19HZW5lcmljSW5zdGFudGlhdGlvbic7CgogIGZpbmFsIGlyLkZ1bmN0aW9uVHlwZSBleHByZXNzaW9uVHlwZTsKICBmaW5hbCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICBfR2VuZXJpY0luc3RhbnRpYXRpb24odGhpcy5leHByZXNzaW9uVHlwZSwgdGhpcy50eXBlQXJndW1lbnRzKTsKCiAgZmFjdG9yeSBfR2VuZXJpY0luc3RhbnRpYXRpb24uZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRnVuY3Rpb25UeXBlIGV4cHJlc3Npb25UeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZXMoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0dlbmVyaWNJbnN0YW50aWF0aW9uKGV4cHJlc3Npb25UeXBlLCB0eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKGV4cHJlc3Npb25UeXBlKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGVzKHR5cGVBcmd1bWVudHMpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9TdGF0aWNBY2Nlc3MgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19TdGF0aWNBY2Nlc3MnOwoKICBmaW5hbCBpci5NZW1iZXIgdGFyZ2V0OwogIGZpbmFsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKCiAgX1N0YXRpY0FjY2Vzcyh0aGlzLnRhcmdldCwgdGhpcy5pbXBvcnQpOwoKICBmYWN0b3J5IF9TdGF0aWNBY2Nlc3MuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuTWVtYmVyIHRhcmdldCA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0ID0gc291cmNlLnJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX1N0YXRpY0FjY2Vzcyh0YXJnZXQsIGltcG9ydCk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUodGFyZ2V0KTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoaW1wb3J0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfTWFwTGl0ZXJhbCB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX01hcExpdGVyYWwnOwoKICBmaW5hbCBpci5EYXJ0VHlwZSBrZXlUeXBlOwogIGZpbmFsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZTsKICBmaW5hbCBib29sIGlzQ29uc3Q7CiAgZmluYWwgYm9vbCBpc0VtcHR5OwoKICBfTWFwTGl0ZXJhbCh0aGlzLmtleVR5cGUsIHRoaXMudmFsdWVUeXBlLCB7dGhpcy5pc0NvbnN0LCB0aGlzLmlzRW1wdHl9KTsKCiAgZmFjdG9yeSBfTWFwTGl0ZXJhbC5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSBrZXlUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBib29sIGlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFbXB0eSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIF9NYXBMaXRlcmFsKGtleVR5cGUsIHZhbHVlVHlwZSwgaXNDb25zdDogaXNDb25zdCwgaXNFbXB0eTogaXNFbXB0eSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShrZXlUeXBlKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUodmFsdWVUeXBlKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ29uc3QpOwogICAgc2luay53cml0ZUJvb2woaXNFbXB0eSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0NvbnRhaW5lckxpdGVyYWwgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19Db250YWluZXJMaXRlcmFsJzsKCiAgZmluYWwgaXIuRGFydFR5cGUgZWxlbWVudFR5cGU7CiAgZmluYWwgYm9vbCBpc0NvbnN0OwogIGZpbmFsIGJvb2wgaXNFbXB0eTsKCiAgX0NvbnRhaW5lckxpdGVyYWwodGhpcy5lbGVtZW50VHlwZSwge3RoaXMuaXNDb25zdCwgdGhpcy5pc0VtcHR5fSk7CgogIGZhY3RvcnkgX0NvbnRhaW5lckxpdGVyYWwuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUgZWxlbWVudFR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgYm9vbCBpc0NvbnN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzRW1wdHkgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHJldHVybiBuZXcgX0NvbnRhaW5lckxpdGVyYWwoZWxlbWVudFR5cGUsCiAgICAgICAgaXNDb25zdDogaXNDb25zdCwgaXNFbXB0eTogaXNFbXB0eSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShlbGVtZW50VHlwZSk7CiAgICBzaW5rLndyaXRlQm9vbChpc0NvbnN0KTsKICAgIHNpbmsud3JpdGVCb29sKGlzRW1wdHkpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9SdW50aW1lVHlwZVVzZSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX1J1bnRpbWVUeXBlVXNlJzsKCiAgZmluYWwgaXIuUHJvcGVydHlHZXQgbm9kZTsKICBmaW5hbCBSdW50aW1lVHlwZVVzZUtpbmQga2luZDsKICBmaW5hbCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGU7CiAgZmluYWwgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlOwoKICBfUnVudGltZVR5cGVVc2UodGhpcy5ub2RlLCB0aGlzLmtpbmQsIHRoaXMucmVjZWl2ZXJUeXBlLCB0aGlzLmFyZ3VtZW50VHlwZSk7CgogIGZhY3RvcnkgX1J1bnRpbWVUeXBlVXNlLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLlRyZWVOb2RlIG5vZGUgPSBzb3VyY2UucmVhZFRyZWVOb2RlKCk7CiAgICBSdW50aW1lVHlwZVVzZUtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShSdW50aW1lVHlwZVVzZUtpbmQudmFsdWVzKTsKICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZShhbGxvd051bGw6IHRydWUpOwogICAgcmV0dXJuIG5ldyBfUnVudGltZVR5cGVVc2Uobm9kZSwga2luZCwgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudFR5cGUpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZShub2RlKTsKICAgIHNpbmsud3JpdGVFbnVtKGtpbmQpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShyZWNlaXZlclR5cGUpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShhcmd1bWVudFR5cGUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0ZvckluRGF0YSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0ZvckluRGF0YSc7CgogIGZpbmFsIGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZTsKICBmaW5hbCBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGU7CiAgZmluYWwgQ2xhc3NSZWxhdGlvbiBpdGVyYXRvckNsYXNzUmVsYXRpb247CiAgZmluYWwgYm9vbCBpc0FzeW5jOwoKICBfRm9ySW5EYXRhKHRoaXMuaXRlcmFibGVUeXBlLCB0aGlzLml0ZXJhdG9yVHlwZSwgdGhpcy5pdGVyYXRvckNsYXNzUmVsYXRpb24sCiAgICAgIHt0aGlzLmlzQXN5bmN9KTsKCiAgZmFjdG9yeSBfRm9ySW5EYXRhLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZShhbGxvd051bGw6IHRydWUpOwogICAgQ2xhc3NSZWxhdGlvbiBpdGVyYXRvckNsYXNzUmVsYXRpb24gPSBzb3VyY2UucmVhZEVudW0oQ2xhc3NSZWxhdGlvbi52YWx1ZXMpOwogICAgYm9vbCBpc0FzeW5jID0gc291cmNlLnJlYWRCb29sKCk7CiAgICByZXR1cm4gbmV3IF9Gb3JJbkRhdGEoaXRlcmFibGVUeXBlLCBpdGVyYXRvclR5cGUsIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbiwKICAgICAgICBpc0FzeW5jOiBpc0FzeW5jKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKGl0ZXJhYmxlVHlwZSk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKGl0ZXJhdG9yVHlwZSk7CiAgICBzaW5rLndyaXRlRW51bShpdGVyYXRvckNsYXNzUmVsYXRpb24pOwogICAgc2luay53cml0ZUJvb2woaXNBc3luYyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQqGdQBOTjwBKDQ1AS4fGRYlGwFOPzUBJgEsMSIEAT8cMwQBDCEdHR8jKSU4EBAcQwQBDCgdIAQBDCgdIAQBDEZGJDYOHEMEAQwcTCAYQwQBDBtIH04EAQwcTCAYQwQBDBtIH04EAQwjIB8jKSc8FhxDBAEMIyAeGB8jKSc8FhIQHEMEAQwiIB4UHyMpJjoWEg4cQwQBDCgsHyMpLEYXHEMEAQwhGx8jJyUlOBBQEgQBDBQdHR8jJyMYKkIVDlAQHAQBDFElJx9DBAEMHSoEAQwyOQQBDCciHyMpK0QVHEMEAQwfLAQBDDQlKAQBDCwzLVAEAQxMID0EAQwtNAQBDB4rBAEMGSwEAQxOLR0pOxkEAQxNLR0pOxoEAQwZMAQBDCoxBAEMMDcEAQwrMgQBDCs4BAEMMSIlBAEMJzQEAQw0QQQBDDA9BAEMM0AEAQwlSSkhSAQBDCwhJSoEAQxKHj4EAQxKHj4EAQwePSJFBAEMRiYfPy4EAQw0JiAdUQQBDDMmHxxRBAEMHywEAQwtIiYEAQwtIiYEAQwpICQEAQwtIiYEAQwnHyMEAQxMPCMbSwQBDDYkJwQBDCoeIQQBDDIiJQQBDEApLAQBDD4oKwQBDE8zNgQCAVAcOSUBIgExJwIBLSoBLhwcLCclJyUyMjA8LjgyHxw6JUUkJTYjIyciKSggIBwgGiofAUQqHiYyNEMBFAE1Fyo8HE5OKTscJTocJDkcJTocJDkcLD4cLD4cKz0cMUMcKjwcL0EcQ0scMEIcRCFLJTccPy5AHCM4HCM4HCc4HFEcJTwcJDwcPT1RFkwTTSg6HAFGGENHTxxFHUYnSxUEAQwjFQEUSRpBQRRHGk0aSxpNGksaFE0aFE0aFEsaLjwaFEkaLDoaKkIaLTsaQE0aSho7FFEaSRpJGk0aSBpPGk4aOTlETUtQGgFGPzk9QUJMARMEAQwoJjsrGRk0Ly8IBh4pKQgGHikpCAYlOSoXNC8vCAYhNCZBCAYgMiU/CAYhNCZBCAYgMiU/CAYoPy0fNC8vCAYoPy0fIBk0Ly8IBic9LB8gFzQvLwgGLUkyIDQvLwgGJjsrGTQvLhoKCAYrRR4eFzQvLhkkCAYoPy04CAYdQxgjKhMlLBMkKxMlJhMpJhMxOBMtNBMrOBMuORMlLBMKCAYdKR0sOBMnMxMkMBMqNhMlMRMtMxMpLxMsMhMKCAYsRzEeNC8vCAYmMjQIBi4hSThJCgoGITE+CAYjMi4IBipDLzYIBh8wPggGHzA+CAYjNEIIBiAvQjsIBiE2NzsIBiA1NjsIBiMtLggGIy0uCAYhKSwIBiMtLggGICcrCAYkNylJCAYeLBwnUREmUQoIBgFGJTcwCAYfKyoIBiMzLggGKT80CAYqQTUIBjRQPwgGBAIBFy4BKSElARtKAU8pKD0EAT0XQjA4FSg9BAEjFSwoJxMEAgEaMQEfHyYBQwFAF0BAThUiPgQBIxUiIiQTBAIBGTABFiYBMwE/FyZOFTYEASMVGiQTBAIBGC8BIiUaAUcBPhc6STAVRQQBIxUqIyITBAIBFy4BIiUWAUQBPRc6SSYVQgQBIxUqIxoTBAIBHDMBIiYBPgFCFzpOFUEEASMVKiQTBAIBHDMBIiUaJgEXTwFCFzpJME4VJD0EASMVKiMiJBMEAgEbMgEiJRYmARZNAUEXOkkmThUjOwQBIxUqIxokEwQCASE4AS4mAUQBRxdCThVHBAEjFSckEwQCARoxAR0mJQFDAUAXM05MFUEEASMVIiQzEwQCAR82AR8fJiUWARpEFwFFFzU3TkwmFVAbBAEjFSciJDMdEwQCARwzARYpJQFCAUIXK0JMFUAEASMVHiwzEwQCARANDw4PExsXFRgPAgERKAEaGwEiATcXMj4VJQQBIxUiGhMEAgEUEg0KEAsTDxICASA3ASQmAUEBRhc6ThVEBAEjFSckEwQCARUsARolASgBOxcyTBUrBAEjFSIzEwQCAR41ASgpAUIBRBdAQhVFBAEjFSwsEwQCARYtARolASsBPBcwTBUuBAEjFSIzEwQCARQrAR0fFhYBSwE6FzU3JiYVUAQBIxUlJx0dEwQCARoxASEWFgFFAUAXOSYmLi0EASMVKR0dEwQCARgvAR0hIiIBTwE+Fy5KOklIBAEjFR4aKjsTBAIBEyoBIiItFgFPFwE5FzpJUSZNGwQBIxUqKisdEwQCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9pbXBhY3RfZGF0YS5kYXJ0LXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL21vZHVsYXIuZGFydITgLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JzsKaW1wb3J0ICdhbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICdjb25zdGFudHMuZGFydCc7CmltcG9ydCAnaW1wYWN0LmRhcnQnOwppbXBvcnQgJ3Njb3BlLmRhcnQnOwoKY2xhc3MgTW9kdWxhckNvcmUgewogIGZpbmFsIGlyLkNvbXBvbmVudCBjb21wb25lbnQ7CiAgZmluYWwgRGFydDJqc0NvbnN0YW50RXZhbHVhdG9yIGNvbnN0YW50RXZhbHVhdG9yOwoKICBNb2R1bGFyQ29yZSh0aGlzLmNvbXBvbmVudCwgdGhpcy5jb25zdGFudEV2YWx1YXRvcik7Cn0KCmNsYXNzIE1vZHVsYXJNZW1iZXJEYXRhIHsKICBmaW5hbCBTY29wZU1vZGVsIHNjb3BlTW9kZWw7CiAgZmluYWwgSW1wYWN0QnVpbGRlckRhdGEgaW1wYWN0QnVpbGRlckRhdGE7CgogIE1vZHVsYXJNZW1iZXJEYXRhKHRoaXMuc2NvcGVNb2RlbCwgdGhpcy5pbXBhY3RCdWlsZGVyRGF0YSk7Cn0KCmFic3RyYWN0IGNsYXNzIE1vZHVsYXJTdHJhdGVneSB7CiAgTGlzdDxQcmFnbWFBbm5vdGF0aW9uRGF0YT4gZ2V0UHJhZ21hQW5ub3RhdGlvbkRhdGEoaXIuTWVtYmVyIG5vZGUpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGUgbmVlZCBmb3IgcGFzc2luZyBbcHJhZ21hQW5ub3RhdGlvbnNdLgogIE1vZHVsYXJNZW1iZXJEYXRhIGdldE1vZHVsYXJNZW1iZXJEYXRhKAogICAgICBpci5NZW1iZXIgbm9kZSwgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBwcmFnbWFBbm5vdGF0aW9ucyk7Cn0KKABOTjwBKDQvMTUBKR8bGRYVARQgNAE3AgEaHy0BPgIBIUYBSipEAgEkcGFja2FnZTpjb21waWxlci9zcmMvaXIvbW9kdWxhci5kYXJ0K3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL3Njb3BlLmRhcnSPGC8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdjbG9zdXJlLmRhcnQnOwppbXBvcnQgJ3Njb3BlX3Zpc2l0b3IuZGFydCc7CmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnQnIGFzIGlyOwoKY2xhc3MgU2NvcGVNb2RlbCB7CiAgZmluYWwgQ2xvc3VyZVNjb3BlTW9kZWwgY2xvc3VyZVNjb3BlTW9kZWw7CiAgZmluYWwgVmFyaWFibGVTY29wZU1vZGVsIHZhcmlhYmxlU2NvcGVNb2RlbDsKICBmaW5hbCBJbml0aWFsaXplckNvbXBsZXhpdHkgaW5pdGlhbGl6ZXJDb21wbGV4aXR5OwoKICBjb25zdCBTY29wZU1vZGVsKAogICAgICB7dGhpcy5jbG9zdXJlU2NvcGVNb2RlbCwKICAgICAgdGhpcy52YXJpYWJsZVNjb3BlTW9kZWwsCiAgICAgIHRoaXMuaW5pdGlhbGl6ZXJDb21wbGV4aXR5fSkKICAgICAgOiBhc3NlcnQoaW5pdGlhbGl6ZXJDb21wbGV4aXR5ICE9IG51bGwpOwoKICAvLy8gSW5zcGVjdCBtZW1iZXJzIGFuZCBtYXJrIGlmIHRob3NlIG1lbWJlcnMgY2FwdHVyZSBhbnkgc3RhdGUgdGhhdCBuZWVkcyB0bwogIC8vLyBiZSBtYXJrZWQgYXMgZnJlZSB2YXJpYWJsZXMuCiAgZmFjdG9yeSBTY29wZU1vZGVsLmZyb20oCiAgICAgIGlyLk1lbWJlciBub2RlLCBpci5Db25zdGFudEV2YWx1YXRvciBjb25zdGFudEV2YWx1YXRvcikgewogICAgU2NvcGVNb2RlbEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBTY29wZU1vZGVsQnVpbGRlcihjb25zdGFudEV2YWx1YXRvcik7CiAgICByZXR1cm4gYnVpbGRlci5jb21wdXRlTW9kZWwobm9kZSk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBWYXJpYWJsZVNjb3BlTW9kZWwgewogIFZhcmlhYmxlU2NvcGUgZ2V0U2NvcGVGb3IoaXIuVHJlZU5vZGUgbm9kZSk7CiAgSXRlcmFibGU8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gZ2V0IGFzc2lnbmVkVmFyaWFibGVzOwogIGJvb2wgaXNFZmZlY3RpdmVseUZpbmFsKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSk7Cn0KCmNsYXNzIFZhcmlhYmxlU2NvcGVNb2RlbEltcGwgaW1wbGVtZW50cyBWYXJpYWJsZVNjb3BlTW9kZWwgewogIE1hcDxpci5UcmVlTm9kZSwgVmFyaWFibGVTY29wZT4gX3Njb3BlTWFwID0ge307CiAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IF9hc3NpZ25lZFZhcmlhYmxlczsKCiAgVmFyaWFibGVTY29wZSBjcmVhdGVTY29wZUZvcihpci5UcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX3Njb3BlTWFwW25vZGVdID8/PSBuZXcgVmFyaWFibGVTY29wZUltcGwoKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgX2Fzc2lnbmVkVmFyaWFibGVzID8/PSBuZXcgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+KCk7CiAgICBfYXNzaWduZWRWYXJpYWJsZXMuYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFyaWFibGVTY29wZSBnZXRTY29wZUZvcihpci5UcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX3Njb3BlTWFwW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gZ2V0IGFzc2lnbmVkVmFyaWFibGVzID0+CiAgICAgIF9hc3NpZ25lZFZhcmlhYmxlcyA/PyA8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0VmZmVjdGl2ZWx5RmluYWwoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gX2Fzc2lnbmVkVmFyaWFibGVzID09IG51bGwgfHwgIV9hc3NpZ25lZFZhcmlhYmxlcy5jb250YWlucyhub2RlKTsKICB9Cn0KCi8vLyBWYXJpYWJsZSBpbmZvcm1hdGlvbiBmb3IgYSBzY29wZS4KYWJzdHJhY3QgY2xhc3MgVmFyaWFibGVTY29wZSB7CiAgLy8vIFJldHVybnMgdGhlIHNldCBvZiBbaXIuVmFyaWFibGVEZWNsYXJhdGlvbl1zIHRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGluCiAgLy8vIHRoaXMgc2NvcGUuCiAgSXRlcmFibGU8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gZ2V0IGFzc2lnbmVkVmFyaWFibGVzOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBzY29wZSBoYXMgYSBbaXIuQ29udGludWVTd2l0Y2hTdGF0ZW1lbnRdLgogIGJvb2wgZ2V0IGhhc0NvbnRpbnVlU3dpdGNoOwp9CgpjbGFzcyBWYXJpYWJsZVNjb3BlSW1wbCBpbXBsZW1lbnRzIFZhcmlhYmxlU2NvcGUgewogIExpc3Q8VmFyaWFibGVTY29wZT4gX3N1YlNjb3BlczsKICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gX2Fzc2lnbmVkVmFyaWFibGVzOwogIEBvdmVycmlkZQogIGJvb2wgaGFzQ29udGludWVTd2l0Y2ggPSBmYWxzZTsKCiAgdm9pZCBhZGRTdWJTY29wZShWYXJpYWJsZVNjb3BlIHNjb3BlKSB7CiAgICBfc3ViU2NvcGVzID8/PSA8VmFyaWFibGVTY29wZT5bXTsKICAgIF9zdWJTY29wZXMuYWRkKHNjb3BlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIF9hc3NpZ25lZFZhcmlhYmxlcyA/Pz0gbmV3IFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPigpOwogICAgX2Fzc2lnbmVkVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBnZXQgYXNzaWduZWRWYXJpYWJsZXMgc3luYyogewogICAgaWYgKF9hc3NpZ25lZFZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIHlpZWxkKiBfYXNzaWduZWRWYXJpYWJsZXM7CiAgICB9CiAgICBpZiAoX3N1YlNjb3BlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoVmFyaWFibGVTY29wZSBzdWJTY29wZSBpbiBfc3ViU2NvcGVzKSB7CiAgICAgICAgeWllbGQqIHN1YlNjb3BlLmFzc2lnbmVkVmFyaWFibGVzOwogICAgICB9CiAgICB9CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBWYXJpYWJsZUNvbGxlY3Rvck1peGluIHsKICBWYXJpYWJsZVNjb3BlSW1wbCBjdXJyZW50VmFyaWFibGVTY29wZTsKICBWYXJpYWJsZVNjb3BlTW9kZWxJbXBsIHZhcmlhYmxlU2NvcGVNb2RlbCA9IG5ldyBWYXJpYWJsZVNjb3BlTW9kZWxJbXBsKCk7CgogIHZvaWQgdmlzaXRJblZhcmlhYmxlU2NvcGUoaXIuVHJlZU5vZGUgcm9vdCwgdm9pZCBmKCkpIHsKICAgIFZhcmlhYmxlU2NvcGVJbXBsIG9sZFNjb3BlID0gY3VycmVudFZhcmlhYmxlU2NvcGU7CiAgICBjdXJyZW50VmFyaWFibGVTY29wZSA9IHZhcmlhYmxlU2NvcGVNb2RlbC5jcmVhdGVTY29wZUZvcihyb290KTsKICAgIG9sZFNjb3BlPy5hZGRTdWJTY29wZShjdXJyZW50VmFyaWFibGVTY29wZSk7CiAgICBmKCk7CiAgICBjdXJyZW50VmFyaWFibGVTY29wZSA9IG9sZFNjb3BlOwogIH0KCiAgdm9pZCByZWdpc3RlckFzc2lnbmVkVmFyaWFibGUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBjdXJyZW50VmFyaWFibGVTY29wZT8ucmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlKG5vZGUpOwogICAgdmFyaWFibGVTY29wZU1vZGVsLnJlZ2lzdGVyQXNzaWduZWRWYXJpYWJsZShub2RlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb250aW51ZVN3aXRjaCgpIHsKICAgIGN1cnJlbnRWYXJpYWJsZVNjb3BlPy5oYXNDb250aW51ZVN3aXRjaCA9IHRydWU7CiAgfQp9Cn0ATk48ASgXHUwBEy0vNQEUHx8jLwFQIxtASicEAgEkLzo4AgE9MjIBMzgEAT8+IgQBDDAcBAEMPDgBDDlNBAIBJh9REjoBRx4CATMiMgwiASomGwQBQz4mBAEMQSYhBh4zKwgGBAIBKCpMATo3RDEJJQQBPzo3BAEiNAQCASJwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zY29wZS5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0vFsvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2Zyb250ZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL2lyL3J1bnRpbWVfdHlwZV9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBTZXRsZXQ7CmltcG9ydCAnYmFja2VuZF9pbXBhY3QuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBCYWNrZW5kVXNhZ2UgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQmFja2VuZFVzYWdlXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEJhY2tlbmRVc2FnZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpID0KICAgICAgQmFja2VuZFVzYWdlSW1wbC5yZWFkRnJvbURhdGFTb3VyY2U7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0JhY2tlbmRVc2FnZV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICBib29sIG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWc7CiAgYm9vbCBuZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyBhIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgYmFja2VuZC4KICBib29sIGlzRnVuY3Rpb25Vc2VkQnlCYWNrZW5kKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGFuIGluc3RhbmNlIGZpZWxkIG9mIGEgY2xhc3MgaW5zdGFudGlhdGVkCiAgLy8vIGJ5IHRoZSBiYWNrZW5kLgogIGJvb2wgaXNGaWVsZFVzZWRCeUJhY2tlbmQoRmllbGRFbnRpdHkgZWxlbWVudCk7CgogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXM7CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXM7CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgaGVscGVyQ2xhc3Nlc1VzZWQ7CgogIEl0ZXJhYmxlPFJ1bnRpbWVUeXBlVXNlPiBnZXQgcnVudGltZVR5cGVVc2VzOwoKICAvLy8gYHRydWVgIGlmIGEgY29yZS1saWJyYXJ5IGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBwcmVhbWJsZSBmaWxlIHRvIGZ1bmN0aW9uLgogIGJvb2wgZ2V0IHJlcXVpcmVzUHJlYW1ibGU7CgogIC8vLyBgdHJ1ZWAgb2YgYE9iamVjdC5ydW50aW1lVHlwZWAgaXMgdXNlZC4KICBib29sIGdldCBpc1J1bnRpbWVUeXBlVXNlZDsKCiAgLy8vIGB0cnVlYCBpZiBgRnVuY3Rpb24uYXBwbHlgIGlzIHVzZWQuCiAgYm9vbCBnZXQgaXNGdW5jdGlvbkFwcGx5VXNlZDsKCiAgLy8vIGB0cnVlYCBpZiAnZGFydDptaXJyb3JzJyBmZWF0dXJlcyBhcmUgdXNlZC4KICBib29sIGdldCBpc01pcnJvcnNVc2VkOwoKICAvLy8gYHRydWVgIGlmIGBub1N1Y2hNZXRob2RgIGlzIHVzZWQuCiAgYm9vbCBnZXQgaXNOb1N1Y2hNZXRob2RVc2VkOwoKICAvLy8gYHRydWVgIGlmIHRoZSBgZGFydDpodG1sYCBpcyBsb2FkZWQuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBpcyBhbHdheXMgYHRydWVgIHdpdGggdGhlIENGRS4KICBib29sIGdldCBpc0h0bWxMb2FkZWQ7Cn0KCmFic3RyYWN0IGNsYXNzIEJhY2tlbmRVc2FnZUJ1aWxkZXIgewogIC8vLyBUaGUgYmFja2VuZCBtdXN0ICphbHdheXMqIGNhbGwgdGhpcyBtZXRob2Qgd2hlbiBlbnF1ZXVpbmcgYW4gZnVuY3Rpb24KICAvLy8gZWxlbWVudC4gQ2FsbHMgZG9uZSBieSB0aGUgYmFja2VuZCBhcmUgbm90IHNlZW4gYnkgZ2xvYmFsCiAgLy8vIG9wdGltaXphdGlvbnMsIHNvIHRoZXkgd291bGQgbWFrZSB0aGVzZSBvcHRpbWl6YXRpb25zIHVuc291bmQuCiAgLy8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGNvbGxlY3QgdGhlIGxpc3Qgb2YgbWV0aG9kcyB0aGUgYmFja2VuZCBtYXkKICAvLy8gY2FsbC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXBsYWNlIHRoaXMgd2l0aCBhIG1vcmUgcHJlY2lzZSBtb2RlbGxpbmc7IHR5cGUKICAvLyBpbmZlcmVuY2Ugb2YgcGFyYW1ldGVycyBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgZGlzYWJsZWQuCiAgdm9pZCByZWdpc3RlckJhY2tlbmRGdW5jdGlvblVzZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFRoZSBiYWNrZW5kIG11c3QgKmFsd2F5cyogY2FsbCB0aGlzIG1ldGhvZCB3aGVuIGluc3RhbnRpYXRpbmcgYSBjbGFzcy4KICAvLy8gSW5zdGFudGlhdGlvbnMgZG9uZSBieSB0aGUgYmFja2VuZCBhcmUgbm90IHNlZW4gYnkgZ2xvYmFsIG9wdGltaXphdGlvbnMsCiAgLy8vIHNvIHRoZXkgd291bGQgbWFrZSB0aGVzZSBvcHRpbWl6YXRpb25zIHVuc291bmQuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvCiAgLy8vIGNvbGxlY3QgdGhlIGxpc3Qgb2YgY2xhc3NlcyB0aGUgYmFja2VuZCBtYXkgaW5zdGFudGlhdGUuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwbGFjZSB0aGlzIHdpdGggYSBtb3JlIHByZWNpc2UgbW9kZWxsaW5nOyB0eXBlCiAgLy8gaW5mZXJlbmNlIG9mIHRoZSBpbnN0YW5jZSBmaWVsZHMgb2YgdGhlc2UgY2xhc3NlcyBpcyBkaXNhYmxlZC4KICB2b2lkIHJlZ2lzdGVyQmFja2VuZENsYXNzVXNlKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICB2b2lkIHJlZ2lzdGVyR2xvYmFsRnVuY3Rpb25EZXBlbmRlbmN5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwogIHZvaWQgcmVnaXN0ZXJHbG9iYWxDbGFzc0RlcGVuZGVuY3koQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBDb2xsZWN0IGJhY2tlbmQgdXNlIGZyb20gW2JhY2tlbmRJbXBhY3RdLgogIHZvaWQgcHJvY2Vzc0JhY2tlbmRJbXBhY3QoQmFja2VuZEltcGFjdCBiYWNrZW5kSW1wYWN0KTsKCiAgdm9pZCByZWdpc3RlclVzZWRNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZWdpc3RlciB1c2Ugb2YgYHJ1bnRpbWVUeXBlYC4KICB2b2lkIHJlZ2lzdGVyUnVudGltZVR5cGVVc2UoUnVudGltZVR5cGVVc2UgcnVudGltZVR5cGVVc2UpOwoKICAvLy8gYHRydWVgIGlmIGBGdW5jdGlvbi5hcHBseWAgaXMgdXNlZC4KICBib29sIGlzRnVuY3Rpb25BcHBseVVzZWQ7CgogIC8vLyBgdHJ1ZWAgaWYgYG5vU3VjaE1ldGhvZGAgaXMgdXNlZC4KICBib29sIGlzTm9TdWNoTWV0aG9kVXNlZDsKCiAgLy8vIFJlZ2lzdGVyIHRoYXQgYGRhcnQ6aHRtbGAgaXMgbG9hZGVkLgogIHZvaWQgcmVnaXN0ZXJIdG1sSXNMb2FkZWQoKTsKCiAgQmFja2VuZFVzYWdlIGNsb3NlKCk7Cn0KCmNsYXNzIEJhY2tlbmRVc2FnZUJ1aWxkZXJJbXBsIGltcGxlbWVudHMgQmFja2VuZFVzYWdlQnVpbGRlciB7CiAgRnJvbnRlbmRTdHJhdGVneSBfZnJvbnRlbmRTdHJhdGVneTsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoZXNlLgogIFNldGxldDxGdW5jdGlvbkVudGl0eT4gX2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzOwogIFNldGxldDxDbGFzc0VudGl0eT4gX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzOwoKICAvLy8gTGlzdCBvZiBtZXRob2RzIHRoYXQgdGhlIGJhY2tlbmQgbWF5IHVzZS4KICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9oZWxwZXJGdW5jdGlvbnNVc2VkID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgLy8vIExpc3Qgb2YgY2xhc3NlcyB0aGF0IHRoZSBiYWNrZW5kIG1heSB1c2UuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfaGVscGVyQ2xhc3Nlc1VzZWQgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBmaW5hbCBTZXQ8UnVudGltZVR5cGVVc2U+IF9ydW50aW1lVHlwZVVzZXMgPSBuZXcgU2V0PFJ1bnRpbWVUeXBlVXNlPigpOwoKICBib29sIF9uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnID0gZmFsc2U7CiAgYm9vbCBfbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHkgPSBmYWxzZTsKCiAgLy8vIGB0cnVlYCBpZiBhIGNvcmUtbGlicmFyeSBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcHJlYW1ibGUgZmlsZSB0byBmdW5jdGlvbi4KICBib29sIHJlcXVpcmVzUHJlYW1ibGUgPSBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1bmN0aW9uQXBwbHlVc2VkID0gZmFsc2U7CgogIC8vLyBgdHJ1ZWAgaWYgJ2RhcnQ6bWlycm9ycycgZmVhdHVyZXMgYXJlIHVzZWQuCiAgYm9vbCBpc01pcnJvcnNVc2VkID0gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgaXNOb1N1Y2hNZXRob2RVc2VkID0gZmFsc2U7CgogIGJvb2wgaXNIdG1sTG9hZGVkID0gZmFsc2U7CgogIEJhY2tlbmRVc2FnZUJ1aWxkZXJJbXBsKHRoaXMuX2Zyb250ZW5kU3RyYXRlZ3kpOwoKICBLQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfZnJvbnRlbmRTdHJhdGVneS5jb21tb25FbGVtZW50czsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckJhY2tlbmRGdW5jdGlvblVzZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoX2lzVmFsaWRCYWNrZW5kVXNlKGVsZW1lbnQsIGVsZW1lbnQubGlicmFyeSksCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIkJhY2tlbmQgdXNlIG9mICRlbGVtZW50IGlzIG5vdCBhbGxvd2VkLiIpKTsKICAgIF9oZWxwZXJGdW5jdGlvbnNVc2VkLmFkZChlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJCYWNrZW5kQ2xhc3NVc2UoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KF9pc1ZhbGlkQmFja2VuZFVzZShlbGVtZW50LCBlbGVtZW50LmxpYnJhcnkpLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJCYWNrZW5kIHVzZSBvZiAkZWxlbWVudCBpcyBub3QgYWxsb3dlZC4iKSk7CiAgICBfaGVscGVyQ2xhc3Nlc1VzZWQuYWRkKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBfaXNWYWxpZEJhY2tlbmRVc2UoRW50aXR5IGVsZW1lbnQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgaWYgKF9pc1ZhbGlkRW50aXR5KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIFNvdXJjZVNwYW4gc3BhbiA9IF9mcm9udGVuZFN0cmF0ZWd5LnNwYW5Gcm9tU3Bhbm5hYmxlKGVsZW1lbnQsIGVsZW1lbnQpOwogICAgaWYgKGxpYnJhcnkuY2Fub25pY2FsVXJpLnNjaGVtZSA9PSAnZGFydCcgJiYKICAgICAgICBzcGFuLnVyaS5wYXRoLmNvbnRhaW5zKCdfaW50ZXJuYWwvanNfcnVudGltZS9saWIvJykpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogV2Ugc2hvdWxkIGJlIG1vcmUgcHJlY2lzZSBhYm91dCB0aGVzZS4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBib29sIF9pc1ZhbGlkRW50aXR5KEVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJgogICAgICAgIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5zdHJlYW1JdGVyYXRvckNvbnN0cnVjdG9yIHx8CiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pc1N5bWJvbENvbnN0cnVjdG9yKGVsZW1lbnQpIHx8CiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pc1N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yKGVsZW1lbnQpKSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGVzZSBhcmUgdmFsaWQgYnV0IHdlIGNvdWxkIGJlIG1vcmUgcHJlY2lzZS4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLnN5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5vYmplY3ROb1N1Y2hNZXRob2QpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhlc2UgYXJlIHZhbGlkIGJ1dCB3ZSBjb3VsZCBiZSBtb3JlIHByZWNpc2UuCiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy51bm1vZGlmaWFibGVTZXRDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcykgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGVzZS4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIF9wcm9jZXNzQmFja2VuZFN0YXRpY1VzZShGdW5jdGlvbkVudGl0eSBlbGVtZW50LAogICAgICB7Ym9vbCBpc0dsb2JhbDogZmFsc2V9KSB7CiAgICByZWdpc3RlckJhY2tlbmRGdW5jdGlvblVzZShlbGVtZW50KTsKICAgIGlmIChpc0dsb2JhbCkgewogICAgICByZWdpc3Rlckdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jeShlbGVtZW50KTsKICAgIH0KICB9CgogIHZvaWQgX3Byb2Nlc3NCYWNrZW5kSW5zdGFudGlhdGlvbihDbGFzc0VudGl0eSBjbHMsIHtib29sIGlzR2xvYmFsOiBmYWxzZX0pIHsKICAgIHJlZ2lzdGVyQmFja2VuZENsYXNzVXNlKGNscyk7CiAgICBpZiAoaXNHbG9iYWwpIHsKICAgICAgcmVnaXN0ZXJHbG9iYWxDbGFzc0RlcGVuZGVuY3koY2xzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc0JhY2tlbmRJbXBhY3QoQmFja2VuZEltcGFjdCBiYWNrZW5kSW1wYWN0KSB7CiAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IHN0YXRpY1VzZSBpbiBiYWNrZW5kSW1wYWN0LnN0YXRpY1VzZXMpIHsKICAgICAgYXNzZXJ0KHN0YXRpY1VzZSAhPSBudWxsKTsKICAgICAgX3Byb2Nlc3NCYWNrZW5kU3RhdGljVXNlKHN0YXRpY1VzZSk7CiAgICB9CiAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IHN0YXRpY1VzZSBpbiBiYWNrZW5kSW1wYWN0Lmdsb2JhbFVzZXMpIHsKICAgICAgYXNzZXJ0KHN0YXRpY1VzZSAhPSBudWxsKTsKICAgICAgX3Byb2Nlc3NCYWNrZW5kU3RhdGljVXNlKHN0YXRpY1VzZSwgaXNHbG9iYWw6IHRydWUpOwogICAgfQogICAgZm9yIChJbnRlcmZhY2VUeXBlIGluc3RhbnRpYXRlZFR5cGUgaW4gYmFja2VuZEltcGFjdC5pbnN0YW50aWF0ZWRUeXBlcykgewogICAgICByZWdpc3RlckJhY2tlbmRDbGFzc1VzZShpbnN0YW50aWF0ZWRUeXBlLmVsZW1lbnQpOwogICAgfQogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gYmFja2VuZEltcGFjdC5pbnN0YW50aWF0ZWRDbGFzc2VzKSB7CiAgICAgIF9wcm9jZXNzQmFja2VuZEluc3RhbnRpYXRpb24oY2xzKTsKICAgIH0KICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGJhY2tlbmRJbXBhY3QuZ2xvYmFsQ2xhc3NlcykgewogICAgICBfcHJvY2Vzc0JhY2tlbmRJbnN0YW50aWF0aW9uKGNscywgaXNHbG9iYWw6IHRydWUpOwogICAgfQogICAgZm9yIChCYWNrZW5kSW1wYWN0IG90aGVySW1wYWN0IGluIGJhY2tlbmRJbXBhY3Qub3RoZXJJbXBhY3RzKSB7CiAgICAgIHByb2Nlc3NCYWNrZW5kSW1wYWN0KG90aGVySW1wYWN0KTsKICAgIH0KICAgIGZvciAoQmFja2VuZEZlYXR1cmUgZmVhdHVyZSBpbiBiYWNrZW5kSW1wYWN0LmZlYXR1cmVzKSB7CiAgICAgIHN3aXRjaCAoZmVhdHVyZSkgewogICAgICAgIGNhc2UgQmFja2VuZEZlYXR1cmUubmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHk6CiAgICAgICAgICBfbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHkgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBCYWNrZW5kRmVhdHVyZS5uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnOgogICAgICAgICAgX25lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJVc2VkTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgPT0gX2NvbW1vbkVsZW1lbnRzLmdldElzb2xhdGVBZmZpbml0eVRhZ01hcmtlcikgewogICAgICBfbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZyA9IHRydWU7CiAgICB9IGVsc2UgaWYgKG1lbWJlciA9PSBfY29tbW9uRWxlbWVudHMucmVxdWlyZXNQcmVhbWJsZU1hcmtlcikgewogICAgICByZXF1aXJlc1ByZWFtYmxlID0gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoX2NvbW1vbkVsZW1lbnRzLmlzRnVuY3Rpb25BcHBseU1ldGhvZChtZW1iZXIpKSB7CiAgICAgIGlzRnVuY3Rpb25BcHBseVVzZWQgPSB0cnVlOwogICAgfSBlbHNlIGlmIChtZW1iZXIubGlicmFyeSA9PSBfY29tbW9uRWxlbWVudHMubWlycm9yc0xpYnJhcnkpIHsKICAgICAgaXNNaXJyb3JzVXNlZCA9IHRydWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyR2xvYmFsRnVuY3Rpb25EZXBlbmRlbmN5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50ICE9IG51bGwpOwogICAgaWYgKF9nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcyA9PSBudWxsKSB7CiAgICAgIF9nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcyA9IG5ldyBTZXRsZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CiAgICB9CiAgICBfZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMuYWRkKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckdsb2JhbENsYXNzRGVwZW5kZW5jeShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudCAhPSBudWxsKTsKICAgIGlmIChfZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMgPT0gbnVsbCkgewogICAgICBfZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMgPSBuZXcgU2V0bGV0PENsYXNzRW50aXR5PigpOwogICAgfQogICAgX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzLmFkZChlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJSdW50aW1lVHlwZVVzZShSdW50aW1lVHlwZVVzZSBydW50aW1lVHlwZVVzZSkgewogICAgX3J1bnRpbWVUeXBlVXNlcy5hZGQocnVudGltZVR5cGVVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckh0bWxJc0xvYWRlZCgpIHsKICAgIGlzSHRtbExvYWRlZCA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBCYWNrZW5kVXNhZ2UgY2xvc2UoKSB7CiAgICByZXR1cm4gbmV3IEJhY2tlbmRVc2FnZUltcGwoCiAgICAgICAgZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXM6IF9nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcywKICAgICAgICBnbG9iYWxDbGFzc0RlcGVuZGVuY2llczogX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzLAogICAgICAgIGhlbHBlckZ1bmN0aW9uc1VzZWQ6IF9oZWxwZXJGdW5jdGlvbnNVc2VkLAogICAgICAgIGhlbHBlckNsYXNzZXNVc2VkOiBfaGVscGVyQ2xhc3Nlc1VzZWQsCiAgICAgICAgbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZzogX25lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcsCiAgICAgICAgbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHk6IF9uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSwKICAgICAgICByZXF1aXJlc1ByZWFtYmxlOiByZXF1aXJlc1ByZWFtYmxlLAogICAgICAgIHJ1bnRpbWVUeXBlVXNlczogX3J1bnRpbWVUeXBlVXNlcywKICAgICAgICBpc0Z1bmN0aW9uQXBwbHlVc2VkOiBpc0Z1bmN0aW9uQXBwbHlVc2VkLAogICAgICAgIGlzTWlycm9yc1VzZWQ6IGlzTWlycm9yc1VzZWQsCiAgICAgICAgaXNOb1N1Y2hNZXRob2RVc2VkOiBpc05vU3VjaE1ldGhvZFVzZWQsCiAgICAgICAgaXNIdG1sTG9hZGVkOiBpc0h0bWxMb2FkZWQpOwogIH0KfQoKY2xhc3MgQmFja2VuZFVzYWdlSW1wbCBpbXBsZW1lbnRzIEJhY2tlbmRVc2FnZSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtCYWNrZW5kVXNhZ2VdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnYmFja2VuZC11c2FnZSc7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGUgbmVlZCBmb3IgdGhlc2UuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXM7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXM7CgogIC8vLyBTZXQgb2YgZnVuY3Rpb25zIGNhbGxlZCBieSB0aGUgYmFja2VuZC4KICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9oZWxwZXJGdW5jdGlvbnNVc2VkOwoKICAvLy8gU2V0IG9mIGNsYXNzZXMgaW5zdGFudGlhdGVkIGJ5IHRoZSBiYWNrZW5kLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX2hlbHBlckNsYXNzZXNVc2VkOwoKICBmaW5hbCBTZXQ8UnVudGltZVR5cGVVc2U+IF9ydW50aW1lVHlwZVVzZXM7CgogIEBvdmVycmlkZQogIGJvb2wgbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZzsKICBAb3ZlcnJpZGUKICBib29sIG5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIHJlcXVpcmVzUHJlYW1ibGU7CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNGdW5jdGlvbkFwcGx5VXNlZDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc01pcnJvcnNVc2VkOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzTm9TdWNoTWV0aG9kVXNlZDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0h0bWxMb2FkZWQ7CgogIEJhY2tlbmRVc2FnZUltcGwoCiAgICAgIHtTZXQ8RnVuY3Rpb25FbnRpdHk+IGdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzLAogICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzLAogICAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGhlbHBlckZ1bmN0aW9uc1VzZWQsCiAgICAgIFNldDxDbGFzc0VudGl0eT4gaGVscGVyQ2xhc3Nlc1VzZWQsCiAgICAgIHRoaXMubmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZywKICAgICAgdGhpcy5uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSwKICAgICAgdGhpcy5yZXF1aXJlc1ByZWFtYmxlLAogICAgICBTZXQ8UnVudGltZVR5cGVVc2U+IHJ1bnRpbWVUeXBlVXNlcywKICAgICAgdGhpcy5pc0Z1bmN0aW9uQXBwbHlVc2VkLAogICAgICB0aGlzLmlzTWlycm9yc1VzZWQsCiAgICAgIHRoaXMuaXNOb1N1Y2hNZXRob2RVc2VkLAogICAgICB0aGlzLmlzSHRtbExvYWRlZH0pCiAgICAgIDogdGhpcy5fZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMgPSBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcywKICAgICAgICB0aGlzLl9nbG9iYWxDbGFzc0RlcGVuZGVuY2llcyA9IGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzLAogICAgICAgIHRoaXMuX2hlbHBlckZ1bmN0aW9uc1VzZWQgPSBoZWxwZXJGdW5jdGlvbnNVc2VkLAogICAgICAgIHRoaXMuX2hlbHBlckNsYXNzZXNVc2VkID0gaGVscGVyQ2xhc3Nlc1VzZWQsCiAgICAgICAgdGhpcy5fcnVudGltZVR5cGVVc2VzID0gcnVudGltZVR5cGVVc2VzOwoKICBmYWN0b3J5IEJhY2tlbmRVc2FnZUltcGwucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyczxGdW5jdGlvbkVudGl0eT4oKS50b1NldCgpOwogICAgU2V0PENsYXNzRW50aXR5PiBnbG9iYWxDbGFzc0RlcGVuZGVuY2llcyA9IHNvdXJjZS5yZWFkQ2xhc3NlcygpLnRvU2V0KCk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGhlbHBlckZ1bmN0aW9uc1VzZWQgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyczxGdW5jdGlvbkVudGl0eT4oKS50b1NldCgpOwogICAgU2V0PENsYXNzRW50aXR5PiBoZWxwZXJDbGFzc2VzVXNlZCA9IHNvdXJjZS5yZWFkQ2xhc3NlcygpLnRvU2V0KCk7CiAgICBTZXQ8UnVudGltZVR5cGVVc2U+IHJ1bnRpbWVUeXBlVXNlcyA9IHNvdXJjZS5yZWFkTGlzdCgoKSB7CiAgICAgIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFJ1bnRpbWVUeXBlVXNlS2luZC52YWx1ZXMpOwogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICAgIERhcnRUeXBlIGFyZ3VtZW50VHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGUoYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgcmV0dXJuIG5ldyBSdW50aW1lVHlwZVVzZShraW5kLCByZWNlaXZlclR5cGUsIGFyZ3VtZW50VHlwZSk7CiAgICB9KS50b1NldCgpOwogICAgYm9vbCBuZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIG5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIHJlcXVpcmVzUHJlYW1ibGUgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNGdW5jdGlvbkFwcGx5VXNlZCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc01pcnJvcnNVc2VkID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzTm9TdWNoTWV0aG9kVXNlZCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0h0bWxMb2FkZWQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQmFja2VuZFVzYWdlSW1wbCgKICAgICAgICBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llczogZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMsCiAgICAgICAgZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXM6IGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzLAogICAgICAgIGhlbHBlckZ1bmN0aW9uc1VzZWQ6IGhlbHBlckZ1bmN0aW9uc1VzZWQsCiAgICAgICAgaGVscGVyQ2xhc3Nlc1VzZWQ6IGhlbHBlckNsYXNzZXNVc2VkLAogICAgICAgIHJ1bnRpbWVUeXBlVXNlczogcnVudGltZVR5cGVVc2VzLAogICAgICAgIG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWc6IG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcsCiAgICAgICAgbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHk6IG5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5LAogICAgICAgIHJlcXVpcmVzUHJlYW1ibGU6IHJlcXVpcmVzUHJlYW1ibGUsCiAgICAgICAgaXNGdW5jdGlvbkFwcGx5VXNlZDogaXNGdW5jdGlvbkFwcGx5VXNlZCwKICAgICAgICBpc01pcnJvcnNVc2VkOiBpc01pcnJvcnNVc2VkLAogICAgICAgIGlzTm9TdWNoTWV0aG9kVXNlZDogaXNOb1N1Y2hNZXRob2RVc2VkLAogICAgICAgIGlzSHRtbExvYWRlZDogaXNIdG1sTG9hZGVkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKF9nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcyk7CiAgICBzaW5rLndyaXRlQ2xhc3NlcyhfZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMpOwogICAgc2luay53cml0ZU1lbWJlcnMoX2hlbHBlckZ1bmN0aW9uc1VzZWQpOwogICAgc2luay53cml0ZUNsYXNzZXMoX2hlbHBlckNsYXNzZXNVc2VkKTsKICAgIHNpbmsud3JpdGVMaXN0KHJ1bnRpbWVUeXBlVXNlcywgKFJ1bnRpbWVUeXBlVXNlIHJ1bnRpbWVUeXBlVXNlKSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKHJ1bnRpbWVUeXBlVXNlLmtpbmQpOwogICAgICBzaW5rLndyaXRlRGFydFR5cGUocnVudGltZVR5cGVVc2UucmVjZWl2ZXJUeXBlKTsKICAgICAgc2luay53cml0ZURhcnRUeXBlKHJ1bnRpbWVUeXBlVXNlLmFyZ3VtZW50VHlwZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIH0pOwogICAgc2luay53cml0ZUJvb2wobmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZyk7CiAgICBzaW5rLndyaXRlQm9vbChuZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSk7CiAgICBzaW5rLndyaXRlQm9vbChyZXF1aXJlc1ByZWFtYmxlKTsKICAgIHNpbmsud3JpdGVCb29sKGlzRnVuY3Rpb25BcHBseVVzZWQpOwogICAgc2luay53cml0ZUJvb2woaXNNaXJyb3JzVXNlZCk7CiAgICBzaW5rLndyaXRlQm9vbChpc05vU3VjaE1ldGhvZFVzZWQpOwogICAgc2luay53cml0ZUJvb2woaXNIdG1sTG9hZGVkKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnVuY3Rpb25Vc2VkQnlCYWNrZW5kKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfaGVscGVyRnVuY3Rpb25zVXNlZC5jb250YWlucyhlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGaWVsZFVzZWRCeUJhY2tlbmQoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9oZWxwZXJDbGFzc2VzVXNlZC5jb250YWlucyhlbGVtZW50LmVuY2xvc2luZ0NsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMgPT4KICAgICAgX2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzID8/IGNvbnN0IDxGdW5jdGlvbkVudGl0eT5bXTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBnbG9iYWxDbGFzc0RlcGVuZGVuY2llcyA9PgogICAgICBfZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMgPz8gY29uc3QgPENsYXNzRW50aXR5PltdOwoKICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IGhlbHBlckZ1bmN0aW9uc1VzZWQgPT4gX2hlbHBlckZ1bmN0aW9uc1VzZWQ7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgaGVscGVyQ2xhc3Nlc1VzZWQgPT4gX2hlbHBlckNsYXNzZXNVc2VkOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1J1bnRpbWVUeXBlVXNlZCA9PiBfcnVudGltZVR5cGVVc2VzLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFJ1bnRpbWVUeXBlVXNlPiBnZXQgcnVudGltZVR5cGVVc2VzID0+IF9ydW50aW1lVHlwZVVzZXM7Cn0KgbgATk48ARkiJCEkKy4jKB4BHjo/KwEwJwErKQFHOAFPFjIBOwE1AS8BMAFQHQEuHgEqIAEyGgEoHwErPhkCASVMQEVHDEs9OwFNT0s/S0Q1AUE7ATA6ATABJT4BKhwBKBsBKx8BGAIBPyY1NjABME4BMEYBSgE0MgFQIQEMJAEyHgEMIwEdATMBSwEMPDlHJwQBDDY5RyUEAUMuTTE/RRMNFAYEASgoQTxGTBNHOUwTNzY2OzQyKxMGEgQBOCApFDEGBAFPIhQqBgQBDDtBISsGQSE7Bk45BkEpBjs5BkQpBj0ZPjQRQDYRCAYEAQwxQTJDH0AiQxwGBAEMQh0vQgYuBAEMPB0sPAYrBAEMPyoEAQwgGQQBDBkhQTszL1FNLCsyJjAlBAIBMUYdLQE1OTMBLjIBMi0BLgEMKwwpAQwfAQwiAQwcAQwhAQwbARQ3MC8qLy0dKyAaHxpHQTk1MQFDFzU2TS42Rz9MNURDEEE/LzIsMSsVIUA6Mi4qUEwsMiYwJQQBDCgVNDEtK0YrN0gIODYmKSMoIhMEAQw5MwQBDDNABAEMPT8BDDc5AUwBDEUBDD0BDEQCATJwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2JhY2tlbmRfdXNhZ2UuZGFydEFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL3Jlc29sdXRpb25fbGlzdGVuZXIuZGFydMAAS/AvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19iYWNrZW5kLmJhY2tlbmQucmVzb2x1dGlvbl9saXN0ZW5lcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnM7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgS0NvbW1vbkVsZW1lbnRzLCBLRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnF1ZXVlLmRhcnQnIHNob3cgRW5xdWV1ZXIsIEVucXVldWVyTGlzdGVuZXI7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JyBzaG93IENvbXBpbGVyT3B0aW9uczsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgU3RhdGljVXNlLCBUeXBlVXNlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JwogICAgc2hvdyBXb3JsZEltcGFjdCwgV29ybGRJbXBhY3RCdWlsZGVyLCBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsOwppbXBvcnQgJ2ZpZWxkX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ2JhY2tlbmRfaW1wYWN0LmRhcnQnOwppbXBvcnQgJ2JhY2tlbmRfdXNhZ2UuZGFydCc7CmltcG9ydCAnY2hlY2tlZF9tb2RlX2hlbHBlcnMuZGFydCc7CmltcG9ydCAnY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnbmF0aXZlX2RhdGEuZGFydCcgc2hvdyBOYXRpdmVCYXNpY0RhdGE7CmltcG9ydCAnbm9fc3VjaF9tZXRob2RfcmVnaXN0cnkuZGFydCc7CgpjbGFzcyBSZXNvbHV0aW9uRW5xdWV1ZXJMaXN0ZW5lciBleHRlbmRzIEVucXVldWVyTGlzdGVuZXIgewogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSBuZWVkIGZvciB0aGlzLgogIGZpbmFsIERlZmVycmVkTG9hZFRhc2sgX2RlZmVycmVkTG9hZFRhc2s7CgogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBLRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgS0NvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBCYWNrZW5kSW1wYWN0cyBfaW1wYWN0czsKCiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVEYXRhOwogIGZpbmFsIEludGVyY2VwdG9yRGF0YUJ1aWxkZXIgX2ludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBCYWNrZW5kVXNhZ2VCdWlsZGVyIF9iYWNrZW5kVXNhZ2U7CgogIGZpbmFsIE5vU3VjaE1ldGhvZFJlZ2lzdHJ5IF9ub1N1Y2hNZXRob2RSZWdpc3RyeTsKICBmaW5hbCBDdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcyBfY3VzdG9tRWxlbWVudHNBbmFseXNpczsKCiAgZmluYWwgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyIF9uYXRpdmVFbnF1ZXVlcjsKICBmaW5hbCBLRmllbGRBbmFseXNpcyBfZmllbGRBbmFseXNpczsKCiAgLy8vIFRydWUgd2hlbiB3ZSBlbnF1ZXVlIHRoZSBsb2FkTGlicmFyeSBjb2RlLgogIGJvb2wgX2lzTG9hZExpYnJhcnlGdW5jdGlvblJlc29sdmVkID0gZmFsc2U7CgogIFJlc29sdXRpb25FbnF1ZXVlckxpc3RlbmVyKAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLl9pbXBhY3RzLAogICAgICB0aGlzLl9uYXRpdmVEYXRhLAogICAgICB0aGlzLl9pbnRlcmNlcHRvckRhdGEsCiAgICAgIHRoaXMuX2JhY2tlbmRVc2FnZSwKICAgICAgdGhpcy5fbm9TdWNoTWV0aG9kUmVnaXN0cnksCiAgICAgIHRoaXMuX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMsCiAgICAgIHRoaXMuX25hdGl2ZUVucXVldWVyLAogICAgICB0aGlzLl9maWVsZEFuYWx5c2lzLAogICAgICB0aGlzLl9kZWZlcnJlZExvYWRUYXNrKTsKCiAgdm9pZCBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KAogICAgICBXb3JsZEltcGFjdEJ1aWxkZXIgYnVpbGRlciwgQmFja2VuZEltcGFjdCBpbXBhY3QpIHsKICAgIGltcGFjdC5yZWdpc3RlckltcGFjdChidWlsZGVyLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgIF9iYWNrZW5kVXNhZ2UucHJvY2Vzc0JhY2tlbmRJbXBhY3QoaW1wYWN0KTsKICB9CgogIHZvaWQgX2FkZEludGVyY2VwdG9ycyhDbGFzc0VudGl0eSBjbHMsIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKSB7CiAgICBfaW50ZXJjZXB0b3JEYXRhLmFkZEludGVyY2VwdG9ycyhjbHMpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgbmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihfZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoY2xzKSkpOwogICAgX2JhY2tlbmRVc2FnZS5yZWdpc3RlckJhY2tlbmRDbGFzc1VzZShjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgaW1wYWN0QnVpbGRlciA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBfYmFja2VuZFVzYWdlLnByb2Nlc3NCYWNrZW5kSW1wYWN0KF9pbXBhY3RzLm1lbWJlckNsb3N1cmUpOwogICAgaW1wYWN0QnVpbGRlcgogICAgICAgIC5hZGRJbXBhY3QoX2ltcGFjdHMubWVtYmVyQ2xvc3VyZS5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCkpOwogICAgRnVuY3Rpb25UeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShlbGVtZW50KTsKICAgIGlmICh0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcykgewogICAgICBpbXBhY3RCdWlsZGVyLmFkZEltcGFjdChfcmVnaXN0ZXJDb21wdXRlU2lnbmF0dXJlKCkpOwogICAgfQogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlckdldE9mU3RhdGljRnVuY3Rpb24oKSB7CiAgICBfYmFja2VuZFVzYWdlLnByb2Nlc3NCYWNrZW5kSW1wYWN0KF9pbXBhY3RzLnN0YXRpY0Nsb3N1cmUpOwogICAgcmV0dXJuIF9pbXBhY3RzLnN0YXRpY0Nsb3N1cmUuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgV29ybGRJbXBhY3QgX3JlZ2lzdGVyQ29tcHV0ZVNpZ25hdHVyZSgpIHsKICAgIF9iYWNrZW5kVXNhZ2UucHJvY2Vzc0JhY2tlbmRJbXBhY3QoX2ltcGFjdHMuY29tcHV0ZVNpZ25hdHVyZSk7CiAgICByZXR1cm4gX2ltcGFjdHMuY29tcHV0ZVNpZ25hdHVyZS5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW5zdGFudGlhdGVkVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIHtib29sIGlzR2xvYmFsOiBmYWxzZSwgYm9vbCBuYXRpdmVVc2FnZTogZmFsc2V9KSB7CiAgICBpZiAoaXNHbG9iYWwpIHsKICAgICAgX2JhY2tlbmRVc2FnZS5yZWdpc3Rlckdsb2JhbENsYXNzRGVwZW5kZW5jeSh0eXBlLmVsZW1lbnQpOwogICAgfQogICAgaWYgKG5hdGl2ZVVzYWdlKSB7CiAgICAgIF9uYXRpdmVFbnF1ZXVlci5vbkluc3RhbnRpYXRlZFR5cGUodHlwZSk7CiAgICB9CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIFtXb3JsZEltcGFjdF0gb2YgY2FsbGluZyBbbWFpbk1ldGhvZF0gYXMgdGhlIGVudHJ5IHBvaW50LgogIFdvcmxkSW1wYWN0IF9jb21wdXRlTWFpbkltcGFjdChGdW5jdGlvbkVudGl0eSBtYWluTWV0aG9kKSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIG1haW5JbXBhY3QgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbWFpbk1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmUuY2FsbFN0cnVjdHVyZTsKICAgIGlmIChjYWxsU3RydWN0dXJlLmFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgIF9pbXBhY3RzLm1haW5XaXRoQXJndW1lbnRzCiAgICAgICAgICAucmVnaXN0ZXJJbXBhY3QobWFpbkltcGFjdCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgIF9iYWNrZW5kVXNhZ2UucHJvY2Vzc0JhY2tlbmRJbXBhY3QoX2ltcGFjdHMubWFpbldpdGhBcmd1bWVudHMpOwogICAgICBtYWluSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UobWFpbk1ldGhvZCwgY2FsbFN0cnVjdHVyZSkpOwogICAgfQogICAgaWYgKG1haW5NZXRob2QuaXNHZXR0ZXIpIHsKICAgICAgbWFpbkltcGFjdC5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0dldChtYWluTWV0aG9kKSk7CiAgICB9IGVsc2UgewogICAgICBtYWluSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UobWFpbk1ldGhvZCwgQ2FsbFN0cnVjdHVyZS5OT19BUkdTKSk7CiAgICB9CiAgICByZXR1cm4gbWFpbkltcGFjdDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbV29ybGRJbXBhY3RdIG9mIGVuYWJsaW5nIGRlZmVycmVkIGxvYWRpbmcuCiAgV29ybGRJbXBhY3QgX2NvbXB1dGVEZWZlcnJlZExvYWRpbmdJbXBhY3QoKSB7CiAgICBfYmFja2VuZFVzYWdlLnByb2Nlc3NCYWNrZW5kSW1wYWN0KF9pbXBhY3RzLmRlZmVycmVkTG9hZGluZyk7CiAgICByZXR1cm4gX2ltcGFjdHMuZGVmZXJyZWRMb2FkaW5nLmNyZWF0ZUltcGFjdChfZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25RdWV1ZU9wZW4oCiAgICAgIEVucXVldWVyIGVucXVldWVyLCBGdW5jdGlvbkVudGl0eSBtYWluTWV0aG9kLCBJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgaWYgKF9kZWZlcnJlZExvYWRUYXNrLmlzUHJvZ3JhbVNwbGl0KSB7CiAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KF9jb21wdXRlRGVmZXJyZWRMb2FkaW5nSW1wYWN0KCksCiAgICAgICAgICBpbXBhY3RTb3VyY2U6ICdkZWZlcnJlZCBsb2FkJyk7CiAgICB9CiAgICBlbnF1ZXVlci5hcHBseUltcGFjdChfbmF0aXZlRW5xdWV1ZXIucHJvY2Vzc05hdGl2ZUNsYXNzZXMobGlicmFyaWVzKSwKICAgICAgICBpbXBhY3RTb3VyY2U6ICduYXRpdmUgY2xhc3NlcycpOwogICAgaWYgKG1haW5NZXRob2QgIT0gbnVsbCkgewogICAgICBlbnF1ZXVlci5hcHBseUltcGFjdChfY29tcHV0ZU1haW5JbXBhY3QobWFpbk1ldGhvZCksCiAgICAgICAgICBpbXBhY3RTb3VyY2U6ICdtYWluIGltcGFjdCcpOwogICAgfQogICAgLy8gRWxlbWVudHMgcmVxdWlyZWQgYnkgZW5xdWV1ZUhlbHBlcnMgYXJlIGdsb2JhbCBkZXBlbmRlbmNpZXMKICAgIC8vIHRoYXQgYXJlIG5vdCBwdWxsZWQgaW4gYnkgYSBwYXJ0aWN1bGFyIGVsZW1lbnQuCiAgICBlbnF1ZXVlci5hcHBseUltcGFjdChjb21wdXRlSGVscGVyc0ltcGFjdCgpLCBpbXBhY3RTb3VyY2U6ICdoZWxwZXJzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9uUXVldWVFbXB0eShFbnF1ZXVlciBlbnF1ZXVlciwgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHJlY2VudENsYXNzZXMpIHsKICAgIC8vIEFkZCBlbGVtZW50cyB1c2VkIHN5bnRoZXRpY2FsbHksIHRoYXQgaXMsIHRocm91Z2ggZmVhdHVyZXMgcmF0aGVyIHRoYW4KICAgIC8vIHN5bnRheCwgZm9yIGluc3RhbmNlIGN1c3RvbSBlbGVtZW50cy4KICAgIC8vCiAgICAvLyBSZXR1cm4gZWFybHkgaWYgYW55IGVsZW1lbnRzIGFyZSBhZGRlZCB0byBhdm9pZCBjb3VudGluZyB0aGUgZWxlbWVudHMgYXMKICAgIC8vIGR1ZSB0byBtaXJyb3JzLgogICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMuZmx1c2goKSwKICAgICAgICBpbXBhY3RTb3VyY2U6IF9jdXN0b21FbGVtZW50c0FuYWx5c2lzKTsKCiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiByZWNlbnRDbGFzc2VzKSB7CiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0gX2VsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKAogICAgICAgICAgY2xzLCBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKTsKICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJgogICAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICBlbGVtZW50LmlzRnVuY3Rpb24gJiYKICAgICAgICAgICFlbGVtZW50LmlzQWJzdHJhY3QpIHsKICAgICAgICBfbm9TdWNoTWV0aG9kUmVnaXN0cnkucmVnaXN0ZXJOb1N1Y2hNZXRob2QoZWxlbWVudCk7CiAgICAgIH0KICAgIH0KICAgIF9ub1N1Y2hNZXRob2RSZWdpc3RyeS5vblF1ZXVlRW1wdHkoKTsKICAgIGlmICghX2JhY2tlbmRVc2FnZS5pc05vU3VjaE1ldGhvZFVzZWQgJiYKICAgICAgICAoX25vU3VjaE1ldGhvZFJlZ2lzdHJ5Lmhhc1Rocm93aW5nTm9TdWNoTWV0aG9kIHx8CiAgICAgICAgICAgIF9ub1N1Y2hNZXRob2RSZWdpc3RyeS5oYXNDb21wbGV4Tm9TdWNoTWV0aG9kKSkgewogICAgICBfYmFja2VuZFVzYWdlLnByb2Nlc3NCYWNrZW5kSW1wYWN0KF9pbXBhY3RzLm5vU3VjaE1ldGhvZFN1cHBvcnQpOwogICAgICBlbnF1ZXVlci5hcHBseUltcGFjdCgKICAgICAgICAgIF9pbXBhY3RzLm5vU3VjaE1ldGhvZFN1cHBvcnQuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpKTsKICAgICAgX2JhY2tlbmRVc2FnZS5pc05vU3VjaE1ldGhvZFVzZWQgPSB0cnVlOwogICAgfQoKICAgIGlmICghZW5xdWV1ZXIucXVldWVJc0VtcHR5KSByZXR1cm4gZmFsc2U7CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uUXVldWVDbG9zZWQoKSB7fQoKICAvLy8gQWRkcyB0aGUgaW1wYWN0IG9mIFtjb25zdGFudF0gdG8gW2ltcGFjdEJ1aWxkZXJdLgogIHZvaWQgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50KAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50SW50ZXJuYWwoY29uc3RhbnQsIGltcGFjdEJ1aWxkZXIpOwoKICAgIGZvciAoQ29uc3RhbnRWYWx1ZSBkZXBlbmRlbmN5IGluIGNvbnN0YW50LmdldERlcGVuZGVuY2llcygpKSB7CiAgICAgIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudChkZXBlbmRlbmN5LCBpbXBhY3RCdWlsZGVyKTsKICAgIH0KICB9CgogIHZvaWQgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50SW50ZXJuYWwoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gY29uc3RhbnQuZ2V0VHlwZShfY29tbW9uRWxlbWVudHMpOwogICAgX2NvbXB1dGVJbXBhY3RGb3JJbnN0YW50aWF0ZWRDb25zdGFudFR5cGUodHlwZSwgaW1wYWN0QnVpbGRlcik7CgogICAgaWYgKGNvbnN0YW50LmlzRnVuY3Rpb24pIHsKICAgICAgRnVuY3Rpb25Db25zdGFudFZhbHVlIGZ1bmN0aW9uID0gY29uc3RhbnQ7CiAgICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY1RlYXJPZmYoZnVuY3Rpb24uZWxlbWVudCkpOwogICAgfSBlbHNlIGlmIChjb25zdGFudC5pc0ludGVyY2VwdG9yKSB7CiAgICAgIC8vIEFuIGludGVyY2VwdG9yIGNvbnN0YW50IHJlZmVyZW5jZXMgdGhlIGNsYXNzJ3MgcHJvdG90eXBlIGNoYWluLgogICAgICBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgaW50ZXJjZXB0b3IgPSBjb25zdGFudDsKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShpbnRlcmNlcHRvci5jbHMpOwogICAgICBfY29tcHV0ZUltcGFjdEZvckluc3RhbnRpYXRlZENvbnN0YW50VHlwZSh0eXBlLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQuaXNUeXBlKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlciA9IF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgIGhlbHBlciwgaGVscGVyLnBhcmFtZXRlclN0cnVjdHVyZS5jYWxsU3RydWN0dXJlKSk7CiAgICAgIF9iYWNrZW5kVXNhZ2UucmVnaXN0ZXJCYWNrZW5kRnVuY3Rpb25Vc2UoaGVscGVyKTsKICAgICAgaW1wYWN0QnVpbGRlcgogICAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy50eXBlVHlwZSkpOwogICAgfQogIH0KCiAgdm9pZCBfY29tcHV0ZUltcGFjdEZvckluc3RhbnRpYXRlZENvbnN0YW50VHlwZSgKICAgICAgRGFydFR5cGUgdHlwZSwgV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIpIHsKICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbih0eXBlKSk7CiAgICAgIGlmICh0eXBlLmVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLnR5cGVMaXRlcmFsQ2xhc3MpIHsKICAgICAgICAvLyBJZiB3ZSB1c2UgYSB0eXBlIGxpdGVyYWwgaW4gYSBjb25zdGFudCwgdGhlIGNvbXBpbGUgdGltZQogICAgICAgIC8vIGNvbnN0YW50IGVtaXR0ZXIgd2lsbCBnZW5lcmF0ZSBhIGNhbGwgdG8gdGhlIGNyZWF0ZVJ1bnRpbWVUeXBlCiAgICAgICAgLy8gaGVscGVyIHNvIHdlIHJlZ2lzdGVyIGEgdXNlIG9mIHRoYXQuCiAgICAgICAgRnVuY3Rpb25FbnRpdHkgaGVscGVyID0gX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZVJ1bnRpbWVUeXBlOwogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICAgIGhlbHBlciwgaGVscGVyLnBhcmFtZXRlclN0cnVjdHVyZS5jYWxsU3RydWN0dXJlKSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyVXNlZENvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgaW1wYWN0QnVpbGRlciA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnQoY29uc3RhbnQsIGltcGFjdEJ1aWxkZXIpOwogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlclVzZWRFbGVtZW50KE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgd29ybGRJbXBhY3QgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMucmVnaXN0ZXJTdGF0aWNVc2UobWVtYmVyKTsKCiAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24pIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBtZW1iZXI7CiAgICAgIGlmIChmdW5jdGlvbi5pc0V4dGVybmFsKSB7CiAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uKTsKCiAgICAgICAgdmFyIGFsbFBhcmFtZXRlclR5cGVzID0gPERhcnRUeXBlPltdCiAgICAgICAgICAuLmFkZEFsbChmdW5jdGlvblR5cGUucGFyYW1ldGVyVHlwZXMpCiAgICAgICAgICAuLmFkZEFsbChmdW5jdGlvblR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcykKICAgICAgICAgIC4uYWRkQWxsKGZ1bmN0aW9uVHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzKTsKICAgICAgICBmb3IgKHZhciB0eXBlIGluIGFsbFBhcmFtZXRlclR5cGVzKSB7CiAgICAgICAgICBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSB8fCB0eXBlLmlzVHlwZWRlZikgewogICAgICAgICAgICB2YXIgY2xvc3VyZUNvbnZlcnRlciA9IF9jb21tb25FbGVtZW50cy5jbG9zdXJlQ29udmVydGVyOwogICAgICAgICAgICB3b3JsZEltcGFjdC5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgICAgICAgIG5ldyBTdGF0aWNVc2UuaW1wbGljaXRJbnZva2UoY2xvc3VyZUNvbnZlcnRlcikpOwogICAgICAgICAgICBfYmFja2VuZFVzYWdlLnJlZ2lzdGVyQmFja2VuZEZ1bmN0aW9uVXNlKGNsb3N1cmVDb252ZXJ0ZXIpOwogICAgICAgICAgICBfYmFja2VuZFVzYWdlLnJlZ2lzdGVyR2xvYmFsRnVuY3Rpb25EZXBlbmRlbmN5KGNsb3N1cmVDb252ZXJ0ZXIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGZ1bmN0aW9uLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBmdW5jdGlvbi5lbmNsb3NpbmdDbGFzczsKCiAgICAgICAgaWYgKGZ1bmN0aW9uLm5hbWUgPT0gSWRlbnRpZmllcnMuY2FsbCAmJgogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmlzR2VuZXJpY0NsYXNzKGNscykpIHsKICAgICAgICAgIHdvcmxkSW1wYWN0LmFkZEltcGFjdChfcmVnaXN0ZXJDb21wdXRlU2lnbmF0dXJlKCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgX2JhY2tlbmRVc2FnZS5yZWdpc3RlclVzZWRNZW1iZXIobWVtYmVyKTsKCiAgICBpZiAoX2NvbW1vbkVsZW1lbnRzLmlzQ3JlYXRlSW52b2NhdGlvbk1pcnJvckhlbHBlcihtZW1iZXIpKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3Qod29ybGRJbXBhY3QsIF9pbXBhY3RzLm5vU3VjaE1ldGhvZFN1cHBvcnQpOwogICAgfQoKICAgIGlmIChfZWxlbWVudEVudmlyb25tZW50LmlzRGVmZXJyZWRMb2FkTGlicmFyeUdldHRlcihtZW1iZXIpKSB7CiAgICAgIC8vIFRPRE8oc2lndXJkbSk6IENyZWF0ZSBhIGZ1bmN0aW9uIHJlZ2lzdGVyTG9hZExpYnJhcnlBY2Nlc3MuCiAgICAgIGlmICghX2lzTG9hZExpYnJhcnlGdW5jdGlvblJlc29sdmVkKSB7CiAgICAgICAgX2lzTG9hZExpYnJhcnlGdW5jdGlvblJlc29sdmVkID0gdHJ1ZTsKICAgICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KHdvcmxkSW1wYWN0LCBfaW1wYWN0cy5sb2FkTGlicmFyeSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobWVtYmVyLmlzR2V0dGVyICYmIG1lbWJlci5uYW1lID09IElkZW50aWZpZXJzLnJ1bnRpbWVUeXBlXykgewogICAgICAvLyBFbmFibGUgcnVudGltZSB0eXBlIHN1cHBvcnQgaWYgd2UgZGlzY292ZXIgYSBnZXR0ZXIgY2FsbGVkCiAgICAgIC8vIHJ1bnRpbWVUeXBlLiBXZSBoYXZlIHRvIGVuYWJsZSBydW50aW1lIHR5cGUgYmVmb3JlIGhpdHRpbmcgdGhlCiAgICAgIC8vIGNvZGVnZW4sIHNvIHRoYXQgY29uc3RydWN0b3JzIGtub3cgd2hldGhlciB0aGV5IG5lZWQgdG8gZ2VuZXJhdGUgY29kZQogICAgICAvLyBmb3IgcnVudGltZSB0eXBlLgogICAgICAvLyBUT0RPKGFoZSk6IFJlY29yZCBwcmVjaXNlIGRlcGVuZGVuY3kgaGVyZS4KICAgICAgd29ybGRJbXBhY3QuYWRkSW1wYWN0KF9yZWdpc3RlclJ1bnRpbWVUeXBlKCkpOwogICAgfQoKICAgIHJldHVybiB3b3JsZEltcGFjdDsKICB9CgogIC8vLyBDYWxsZWQgdG8gcmVnaXN0ZXIgdGhhdCB0aGUgYHJ1bnRpbWVUeXBlYCBwcm9wZXJ0eSBoYXMgYmVlbiBhY2Nlc3NlZC4gQW55CiAgLy8vIGJhY2tlbmQgc3BlY2lmaWMgW1dvcmxkSW1wYWN0XSBvZiB0aGlzIGlzIHJldHVybmVkLgogIFdvcmxkSW1wYWN0IF9yZWdpc3RlclJ1bnRpbWVUeXBlKCkgewogICAgX2JhY2tlbmRVc2FnZS5wcm9jZXNzQmFja2VuZEltcGFjdChfaW1wYWN0cy5ydW50aW1lVHlwZVN1cHBvcnQpOwogICAgcmV0dXJuIF9pbXBhY3RzLnJ1bnRpbWVUeXBlU3VwcG9ydC5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgfQoKICBXb3JsZEltcGFjdCBfcHJvY2Vzc0NsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEV4dHJhY3QgYW4gYGltcGxlbWVudGF0aW9uQ2xhc3Nlc09mKC4uLilgIGZ1bmN0aW9uCiAgICAvLyBmb3IgdGhlc2UgaW50byBbQ29tbW9uRWxlbWVudHNdIG9yIFtCYWNrZW5kSW1wYWN0c10uCiAgICAvLyBSZWdpc3RlciBhbnkgaGVscGVyIHRoYXQgd2lsbCBiZSBuZWVkZWQgYnkgdGhlIGJhY2tlbmQuCiAgICBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5pbnRDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm51bUNsYXNzKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMubnVtQ2xhc3Nlcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcykgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLmxpc3RPclN0cmluZ0NsYXNzZXMpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3MpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5mdW5jdGlvbkNsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5tYXBDbGFzcykgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLm1hcENsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5zZXRDbGFzcykgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLnNldENsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5ib3VuZENsb3N1cmVDbGFzcykgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLmJvdW5kQ2xvc3VyZUNsYXNzKTsKICAgIH0gZWxzZSBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKSkgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLm5hdGl2ZU9yRXh0ZW5kc0NsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ2xhc3MpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5tYXBMaXRlcmFsQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDbGFzcykgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLnNldExpdGVyYWxDbGFzcyk7CiAgICB9CiAgICBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5jbG9zdXJlQ2xhc3MpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5jbG9zdXJlQ2xhc3MpOwogICAgfQogICAgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMubGlzdENsYXNzZXMpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmludENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmRvdWJsZUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5ib29sQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5udWxsQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5udW1DbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycygKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5qc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycygKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5qc1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycygKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKSkgewogICAgICBfaW50ZXJjZXB0b3JEYXRhLmFkZEludGVyY2VwdG9yc0Zvck5hdGl2ZUNsYXNzTWVtYmVycyhjbHMpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzSW5kZXhpbmdCZWhhdmlvckludGVyZmFjZSkgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLmpzSW5kZXhpbmdCZWhhdmlvcik7CiAgICB9CgogICAgX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMucmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhjbHMpOwogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlckltcGxlbWVudGVkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX3Byb2Nlc3NDbGFzcyhjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIF9maWVsZEFuYWx5c2lzLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoY2xzKTsKICAgIHJldHVybiBfcHJvY2Vzc0NsYXNzKGNscyk7CiAgfQoKICAvLy8gQ29tcHV0ZSB0aGUgW1dvcmxkSW1wYWN0XSBmb3IgYmFja2VuZCBoZWxwZXIgbWV0aG9kcy4KICBXb3JsZEltcGFjdCBjb21wdXRlSGVscGVyc0ltcGFjdCgpIHsKICAgIGFzc2VydChfY29tbW9uRWxlbWVudHMuaW50ZXJjZXB0b3JzTGlicmFyeSAhPSBudWxsKTsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgaW1wYWN0QnVpbGRlciA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IE5vdCBlbnF1ZXVpbmcgdGhvc2UgdHdvIGNsYXNzZXMgY3VycmVudGx5IG1ha2UKICAgIC8vIHRoZSBjb21waWxlciBwb3RlbnRpYWxseSBjcmFzaC4gSG93ZXZlciwgYW55IHJlYXNvbmFibGUgcHJvZ3JhbQogICAgLy8gd2lsbCBpbnN0YW50aWF0ZSB0aG9zZSB0d28gY2xhc3Nlcy4KICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIGlmIChfb3B0aW9ucy5kaXNhYmxlUnRpT3B0aW1pemF0aW9uKSB7CiAgICAgIC8vIFdoZW4gUlRJIG9wdGltaXphdGlvbiBpcyBkaXNhYmxlZCB3ZSBhbHdheXMgbmVlZCBhbGwgUlRJIGhlbHBlcnMsIHNvCiAgICAgIC8vIHJlZ2lzdGVyIHRoZXNlIGhlcmUuCiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMuY29tcHV0ZVNpZ25hdHVyZSk7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMuZ2V0UnVudGltZVR5cGVBcmd1bWVudCk7CiAgICB9CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMudHJhY2VIZWxwZXIpOwogICAgfQoKICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMucnRpQWRkUnVsZXMpOwogICAgfQoKICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMuYXNzZXJ0VW5yZWFjaGFibGUpOwogICAgX3JlZ2lzdGVyQ2hlY2tlZE1vZGVIZWxwZXJzKGltcGFjdEJ1aWxkZXIpOwogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICB2b2lkIF9yZWdpc3RlckNoZWNrZWRNb2RlSGVscGVycyhXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgLy8gV2UgcmVnaXN0ZXIgYWxsIHRoZSBfY29tbW9uRWxlbWVudHMgaW4gdGhlIHJlc29sdXRpb24gcXVldWUuCiAgICAvLyBUT0RPKDEzMTU1KTogRmluZCBhIHdheSB0byByZWdpc3RlciBmZXdlciBfY29tbW9uRWxlbWVudHMuCiAgICBMaXN0PEZ1bmN0aW9uRW50aXR5PiBzdGF0aWNVc2VzID0gPEZ1bmN0aW9uRW50aXR5PltdOwogICAgZm9yIChDaGVja2VkTW9kZUhlbHBlciBoZWxwZXIgaW4gQ2hlY2tlZE1vZGVIZWxwZXJzLmhlbHBlcnMpIHsKICAgICAgc3RhdGljVXNlcy5hZGQoaGVscGVyLmdldFN0YXRpY1VzZShfY29tbW9uRWxlbWVudHMpLmVsZW1lbnQpOwogICAgfQogICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdCgKICAgICAgICBpbXBhY3RCdWlsZGVyLCBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBzdGF0aWNVc2VzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxvZ1N1bW1hcnkodm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpKSB7CiAgICBfbmF0aXZlRW5xdWV1ZXIubG9nU3VtbWFyeShsb2cpOwogIH0KfQqB0gBOTjwBMAEwTCMgJCE6IS89NydCHh4dJCggMCcBPDMsASIxKSEBJTErATRCATInATEvAR4VIBwVGB0aIiQcGx8BHzo5MAQBTSsjSTAEAQxBSUASTkYmPAYaBAEMLkBFBAEsQ0gEAQw0ORRBBhcwBgQBTT5GTyshPEYkQgYfSQ0kSgYXBAE+MEJHBAEMFE8sPCoGSikeOygGQzdLBAEMTk4tB1AXOjABLUkrHSYgIT0IBiotOj1IHEsvBgEuAREEAQwaATgtQksBQ0cGBAE1QjdEAR8xFE0pSTdNRiJBQj04FFEGBAEyOSFGPkRKMENEPwgGBAEMPUlDGgQBDDlHNwEdKCEkOwEtMDg2LjdFK0FIThMMCggnMwExNz4KCAYuAUJJBgFDRS0vQwgGAUZESE8bNDUGARgEAVA6J0VKBAEvSU88PysuK0IzLks3RTJAMkA7STtMOUc5RwYvRAYuMEYzLzQ5O0VMSk9RQzItQ0tGRkY1MEZGMy5EMy5EMjBDS0ZGRkZBUEYYSEgYSkMYRTtCRUoGATwaBAEMOh8EAQw7Mx8EATwnOUlHRytCQitOHkhOBgEyQwYBJUMGAUcwGgQBR0RCOkNEBhxDBAEMLiUEAgE4cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9yZXNvbHV0aW9uX2xpc3RlbmVyLmRhcnRGc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydMAAtlsvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19iYWNrZW5kLnJ1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzLCBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvcnVudGltZV90eXBlX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9rZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX3NldC5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2JhY2tlbmRfdXNhZ2UuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBSdGlOb2RlIHsKICBFbnRpdHkgZ2V0IGVudGl0eTsKICBTZXQ8UnRpTm9kZT4gX2RlcGVuZGVuY2llczsKICBpbnQgX3Rlc3RTdGF0ZSA9IDA7CiAgaW50IF9saXRlcmFsU3RhdGUgPSAwOwoKICBJdGVyYWJsZTxSdGlOb2RlPiBnZXQgZGVwZW5kZW5jaWVzID0+IF9kZXBlbmRlbmNpZXMgPz8gY29uc3QgPFJ0aU5vZGU+W107CgogIGJvb2wgZ2V0IGhhc0RpcmVjdFRlc3QgPT4gX3Rlc3RTdGF0ZSAmIDEgIT0gMDsKICBib29sIGdldCBoYXNJbmRpcmVjdFRlc3QgPT4gX3Rlc3RTdGF0ZSAmIDIgIT0gMDsKCiAgYm9vbCBnZXQgaGFzVGVzdCA9PiBfdGVzdFN0YXRlICE9IDA7CgogIGJvb2wgZ2V0IGhhc0RpcmVjdExpdGVyYWwgPT4gX2xpdGVyYWxTdGF0ZSAmIDEgIT0gMDsKICBib29sIGdldCBoYXNJbmRpcmVjdExpdGVyYWwgPT4gX2xpdGVyYWxTdGF0ZSAmIDIgIT0gMDsKCiAgYm9vbCBnZXQgaGFzTGl0ZXJhbCA9PiBfbGl0ZXJhbFN0YXRlICE9IDA7CgogIGJvb2wgZ2V0IGhhc1VzZSA9PiBoYXNUZXN0IHx8IGhhc0xpdGVyYWw7CgogIC8vLyBSZWdpc3RlciB0aGF0IGlmIFtlbnRpdHldIG5lZWRzIHR5cGUgYXJndW1lbnRzIHRoZW4gc28gZG9lcyBgbm9kZS5lbnRpdHlgLgogIGJvb2wgYWRkRGVwZW5kZW5jeShSdGlOb2RlIG5vZGUpIHsKICAgIGlmIChlbnRpdHkgPT0gbm9kZS5lbnRpdHkpIHsKICAgICAgLy8gU2tpcCB0cml2aWFsIGRlcGVuZGVuY2llczsgaWYgW2VudGl0eV0gbmVlZHMgdHlwZSBhcmd1bWVudHMgc28gZG9lcwogICAgICAvLyBbZW50aXR5XSEKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2RlcGVuZGVuY2llcyA/Pz0gbmV3IFNldDxSdGlOb2RlPigpOwogICAgcmV0dXJuIF9kZXBlbmRlbmNpZXMuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCBtYXJrVGVzdCh7Ym9vbCBkaXJlY3R9KSB7CiAgICBzZXRUZXN0U3RhdGUoZGlyZWN0ID8gMSA6IDIpOwogIH0KCiAgdm9pZCBtYXJrRGlyZWN0VGVzdCgpIHsKICAgIHNldFRlc3RTdGF0ZSgxKTsKICB9CgogIHZvaWQgbWFya0luZGlyZWN0VGVzdCgpIHsKICAgIHNldFRlc3RTdGF0ZSgyKTsKICB9CgogIHZvaWQgc2V0VGVzdFN0YXRlKGludCB2YWx1ZSkgewogICAgaWYgKF90ZXN0U3RhdGUgIT0gdmFsdWUpIHsKICAgICAgaWYgKF90ZXN0U3RhdGUgPT0gMCkgewogICAgICAgIF90ZXN0U3RhdGUgfD0gdmFsdWU7CiAgICAgICAgaWYgKF9kZXBlbmRlbmNpZXMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChSdGlOb2RlIG5vZGUgaW4gX2RlcGVuZGVuY2llcykgewogICAgICAgICAgICBub2RlLm1hcmtJbmRpcmVjdFRlc3QoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3Rlc3RTdGF0ZSA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIG1hcmtEaXJlY3RMaXRlcmFsKCkgewogICAgc2V0TGl0ZXJhbFN0YXRlKDEpOwogIH0KCiAgdm9pZCBtYXJrSW5kaXJlY3RMaXRlcmFsKCkgewogICAgc2V0TGl0ZXJhbFN0YXRlKDIpOwogIH0KCiAgdm9pZCBzZXRMaXRlcmFsU3RhdGUoaW50IHZhbHVlKSB7CiAgICBpZiAoX2xpdGVyYWxTdGF0ZSAhPSB2YWx1ZSkgewogICAgICBpZiAoX2xpdGVyYWxTdGF0ZSA9PSAwKSB7CiAgICAgICAgX2xpdGVyYWxTdGF0ZSB8PSB2YWx1ZTsKICAgICAgICBpZiAoX2RlcGVuZGVuY2llcyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKFJ0aU5vZGUgbm9kZSBpbiBfZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgICAgIG5vZGUubWFya0luZGlyZWN0TGl0ZXJhbCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfbGl0ZXJhbFN0YXRlID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICB9CgogIFN0cmluZyBnZXQga2luZDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoa2luZCk7CiAgICBzYi53cml0ZSgnOicpOwogICAgc2Iud3JpdGUoZW50aXR5KTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgQ2xhc3NOb2RlIGV4dGVuZHMgUnRpTm9kZSB7CiAgZmluYWwgQ2xhc3NFbnRpdHkgY2xzOwoKICBDbGFzc05vZGUodGhpcy5jbHMpOwoKICBAb3ZlcnJpZGUKICBFbnRpdHkgZ2V0IGVudGl0eSA9PiBjbHM7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQga2luZCA9PiAnY2xhc3MnOwp9CgpjbGFzcyBNZXRob2ROb2RlIGV4dGVuZHMgUnRpTm9kZSB7CiAgZmluYWwgRW50aXR5IGZ1bmN0aW9uOwogIGZpbmFsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgZmluYWwgYm9vbCBpc0NhbGxUYXJnZXQ7CiAgZmluYWwgTmFtZSBpbnN0YW5jZU5hbWU7CiAgZmluYWwgYm9vbCBpc05vU3VjaE1ldGhvZDsKCiAgTWV0aG9kTm9kZSh0aGlzLmZ1bmN0aW9uLCB0aGlzLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAge3RoaXMuaXNDYWxsVGFyZ2V0LCB0aGlzLmluc3RhbmNlTmFtZSwgdGhpcy5pc05vU3VjaE1ldGhvZDogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgRW50aXR5IGdldCBlbnRpdHkgPT4gZnVuY3Rpb247CgogIGJvb2wgc2VsZWN0b3JBcHBsaWVzKFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICBpZiAoaXNOb1N1Y2hNZXRob2QpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIChpc0NhbGxUYXJnZXQgJiYgc2VsZWN0b3IuaXNDbG9zdXJlQ2FsbCB8fAogICAgICAgICAgICBpbnN0YW5jZU5hbWUgPT0gc2VsZWN0b3IubWVtYmVyTmFtZSkgJiYKICAgICAgICBzZWxlY3Rvci5jYWxsU3RydWN0dXJlLnNpZ25hdHVyZUFwcGxpZXMocGFyYW1ldGVyU3RydWN0dXJlKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQga2luZCA9PiAnbWV0aG9kJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ01ldGhvZE5vZGUoJyk7CiAgICBzYi53cml0ZSgnZnVuY3Rpb249JGZ1bmN0aW9uJyk7CiAgICBzYi53cml0ZSgnLHBhcmFtZXRlclN0cnVjdHVyZT0kcGFyYW1ldGVyU3RydWN0dXJlJyk7CiAgICBzYi53cml0ZSgnLGlzQ2FsbFRhcmdldD0kaXNDYWxsVGFyZ2V0Jyk7CiAgICBzYi53cml0ZSgnLGluc3RhbmNlTmFtZT0kaW5zdGFuY2VOYW1lJyk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBUeXBlVmFyaWFibGVUZXN0cyB7CiAgTGlzdDxSdGlOb2RlPiBfbm9kZXMgPSA8UnRpTm9kZT5bXTsKICBNYXA8Q2xhc3NFbnRpdHksIENsYXNzTm9kZT4gX2NsYXNzZXMgPSA8Q2xhc3NFbnRpdHksIENsYXNzTm9kZT57fTsKICBNYXA8RW50aXR5LCBNZXRob2ROb2RlPiBfbWV0aG9kcyA9IDxFbnRpdHksIE1ldGhvZE5vZGU+e307CiAgTWFwPFNlbGVjdG9yLCBTZXQ8RW50aXR5Pj4gX2FwcGxpZWRTZWxlY3Rvck1hcDsKICBNYXA8R2VuZXJpY0luc3RhbnRpYXRpb24sIFNldDxFbnRpdHk+PiBfaW5zdGFudGlhdGlvbk1hcDsKCiAgLy8vIEFsbCBleHBsaWNpdCBpcy10ZXN0cy4KICBmaW5hbCBTZXQ8RGFydFR5cGU+IGV4cGxpY2l0SXNDaGVja3M7CgogIC8vLyBBbGwgaW1wbGljaXQgaXMtdGVzdHMuCiAgZmluYWwgU2V0PERhcnRUeXBlPiBpbXBsaWNpdElzQ2hlY2tzID0gbmV3IFNldDxEYXJ0VHlwZT4oKTsKCiAgVHlwZVZhcmlhYmxlVGVzdHMoCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBEYXJ0VHlwZXMgdHlwZXMsCiAgICAgIEJ1aWx0V29ybGQgd29ybGQsCiAgICAgIFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4gZ2VuZXJpY0luc3RhbnRpYXRpb25zLAogICAgICB7Ym9vbCBmb3JSdGlOZWVkczogdHJ1ZX0pCiAgICAgIDogZXhwbGljaXRJc0NoZWNrcyA9IG5ldyBTZXQ8RGFydFR5cGU+LmZyb20od29ybGQuaXNDaGVja3MpIHsKICAgIF9zZXR1cERlcGVuZGVuY2llcygKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsIGNvbW1vbkVsZW1lbnRzLCB3b3JsZCwgZ2VuZXJpY0luc3RhbnRpYXRpb25zLAogICAgICAgIGZvclJ0aU5lZWRzOiBmb3JSdGlOZWVkcyk7CiAgICBfcHJvcGFnYXRlVGVzdHMoY29tbW9uRWxlbWVudHMsIGVsZW1lbnRFbnZpcm9ubWVudCwgd29ybGQpOwogICAgaWYgKGZvclJ0aU5lZWRzKSB7CiAgICAgIF9wcm9wYWdhdGVMaXRlcmFscyhlbGVtZW50RW52aXJvbm1lbnQsIHdvcmxkKTsKICAgIH0KICAgIF9jb2xsZWN0UmVzdWx0cyhjb21tb25FbGVtZW50cywgZWxlbWVudEVudmlyb25tZW50LCB0eXBlcywgd29ybGQsCiAgICAgICAgZm9yUnRpTmVlZHM6IGZvclJ0aU5lZWRzKTsKICB9CgogIC8vLyBDbGFzc2VzIHdob3NlIHR5cGUgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgdXNlZCBpbgogIC8vLyBpcy10ZXN0cy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBhbmQgYEJgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQTxUPiB7CiAgLy8vICAgICAgIG0obykgPT4gbyBpcyBUOwogIC8vLyAgICAgfQogIC8vLyAgICAgY2xhc3MgQjxTPiB7CiAgLy8vICAgICAgIG0obykgPT4gbmV3IEE8Uz4oKS5tKG8pOwogIC8vLyAgICAgfQogIC8vLyAgICAgbWFpbigpID0+IG5ldyBCPGludD4oKS5tKDApOwogIC8vLwogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgY2xhc3NUZXN0c0ZvclRlc3RpbmcgPT4KICAgICAgX2NsYXNzZXMudmFsdWVzLndoZXJlKChuKSA9PiBuLmhhc1Rlc3QpLm1hcCgobikgPT4gbi5jbHMpLnRvU2V0KCk7CgogIC8vLyBDbGFzc2VzIHRoYXQgZXhwbGljaXRseSB1c2UgdGhlaXIgdHlwZSB2YXJpYWJsZXMgaW4gaXMtdGVzdHMuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgQWAgaW46CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBPFQ+IHsKICAvLy8gICAgICAgbShvKSA9PiBvIGlzIFQ7CiAgLy8vICAgICB9CiAgLy8vICAgICBtYWluKCkgPT4gbmV3IEE8aW50PigpLm0oMCk7CiAgLy8vCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBkaXJlY3RDbGFzc1Rlc3RzRm9yVGVzdGluZyA9PgogICAgICBfY2xhc3Nlcy52YWx1ZXMud2hlcmUoKG4pID0+IG4uaGFzRGlyZWN0VGVzdCkubWFwKChuKSA9PiBuLmNscykudG9TZXQoKTsKCiAgLy8vIE1ldGhvZHMgdGhhdCBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgdXNlIHRoZWlyIHR5cGUgdmFyaWFibGVzIGluCiAgLy8vIGlzLXRlc3RzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYG0xYCBhbmQgYG0yYGluOgogIC8vLwogIC8vLyAgICAgbTE8VD4obykgPT4gbyBpcyBUOwogIC8vLyAgICAgbTI8Uz4obykgPT4gbTE8Uz4obyk7CiAgLy8vICAgICBtYWluKCkgPT4gbTI8aW50PigwKTsKICAvLy8KICBJdGVyYWJsZTxFbnRpdHk+IGdldCBtZXRob2RUZXN0c0ZvclRlc3RpbmcgPT4KICAgICAgX21ldGhvZHMudmFsdWVzLndoZXJlKChuKSA9PiBuLmhhc1Rlc3QpLm1hcCgobikgPT4gbi5mdW5jdGlvbikudG9TZXQoKTsKCiAgLy8vIE1ldGhvZHMgdGhhdCBleHBsaWNpdGx5IHVzZSB0aGVpciB0eXBlIHZhcmlhYmxlcyBpbiBpcy10ZXN0cy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBtYCBpbjoKICAvLy8KICAvLy8gICAgIG08VD4obykgPT4gbyBpcyBUOwogIC8vLyAgICAgbWFpbigpID0+IG08aW50PigwKTsKICAvLy8KICBJdGVyYWJsZTxFbnRpdHk+IGdldCBkaXJlY3RNZXRob2RUZXN0c0ZvclRlc3RpbmcgPT4gX21ldGhvZHMudmFsdWVzCiAgICAgIC53aGVyZSgobikgPT4gbi5oYXNEaXJlY3RUZXN0KQogICAgICAubWFwKChuKSA9PiBuLmZ1bmN0aW9uKQogICAgICAudG9TZXQoKTsKCiAgLy8vIFRoZSBlbnRpdGllcyB0aGF0IG5lZWQgdHlwZSBhcmd1bWVudHMgYXQgcnVudGltZSBpZiB0aGUgJ2tleSBlbnRpdHknIG5lZWRzCiAgLy8vIHR5cGUgYXJndW1lbnRzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2U6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBPFQ+IHsKICAvLy8gICAgICAgbSgpID0+IG5ldyBCPFQ+KCk7CiAgLy8vICAgICB9CiAgLy8vICAgICBjbGFzcyBCPFQ+IHt9CiAgLy8vICAgICBtYWluKCkgPT4gbmV3IEE8U3RyaW5nPigpLm0oKSBpcyBCPGludD47CiAgLy8vCiAgLy8vIEhlcmUgYEFgIG5lZWRzIHR5cGUgYXJndW1lbnRzIGF0IHJ1bnRpbWUgYmVjYXVzZSB0aGUga2V5IGVudGl0eSBgQmAgbmVlZHMKICAvLy8gaXQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIGNoZWNrIGFnYWluc3QgYEI8aW50PmAuCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGFsc28gaW52b2x2ZSBnZW5lcmljIG1ldGhvZHM6CiAgLy8vCiAgLy8vICAgIGNsYXNzIEE8VD4ge30KICAvLy8gICAgbWV0aG9kPFQ+KCkgPT4gbmV3IEE8VD4oKTsKICAvLy8gICAgbWFpbigpID0+IG1ldGhvZDxpbnQ+KCkgaXMgQTxpbnQ+KCk7CiAgLy8vCiAgLy8vIEhlcmUgYG1ldGhvZGAgbmVlZCB0eXBlIGFyZ3VtZW50cyBhdCBydW50aW1lIGJlY2F1c2UgdGhlIGtleSBlbnRpdHkgYEFgCiAgLy8vIG5lZWRzIGl0IGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjaGVjayBhZ2FpbnN0IGBBPGludD5gLgogIC8vLwogIEl0ZXJhYmxlPEVudGl0eT4gZ2V0VHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzKEVudGl0eSBlbnRpdHkpIHsKICAgIEl0ZXJhYmxlPFJ0aU5vZGU+IGRlcGVuZGVuY2llczsKICAgIGlmIChlbnRpdHkgaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgZGVwZW5kZW5jaWVzID0gX2NsYXNzZXNbZW50aXR5XT8uZGVwZW5kZW5jaWVzOwogICAgfSBlbHNlIHsKICAgICAgZGVwZW5kZW5jaWVzID0gX21ldGhvZHNbZW50aXR5XT8uZGVwZW5kZW5jaWVzOwogICAgfQogICAgaWYgKGRlcGVuZGVuY2llcyA9PSBudWxsKSByZXR1cm4gY29uc3QgPEVudGl0eT5bXTsKICAgIHJldHVybiBkZXBlbmRlbmNpZXMubWFwKChuKSA9PiBuLmVudGl0eSkudG9TZXQoKTsKICB9CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggc2VsZWN0b3IgdGhhdCBhcHBsaWVzIHRvIGdlbmVyaWMgW3RhcmdldHNdLgogIHZvaWQgZm9yRWFjaEFwcGxpZWRTZWxlY3Rvcih2b2lkIGYoU2VsZWN0b3Igc2VsZWN0b3IsIFNldDxFbnRpdHk+IHRhcmdldHMpKSB7CiAgICBfYXBwbGllZFNlbGVjdG9yTWFwLmZvckVhY2goZik7CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGdlbmVyaWMgaW5zdGFudGlhdGlvbiB0aGF0IGFwcGxpZXMgdG8gZ2VuZXJpYwogIC8vLyBjbG9zdXJpemVkIFt0YXJnZXRzXS4KICB2b2lkIGZvckVhY2hHZW5lcmljSW5zdGFudGlhdGlvbigKICAgICAgdm9pZCBmKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24sIFNldDxFbnRpdHk+IHRhcmdldHMpKSB7CiAgICBfaW5zdGFudGlhdGlvbk1hcD8uZm9yRWFjaChmKTsKICB9CgogIENsYXNzTm9kZSBfZ2V0Q2xhc3NOb2RlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9jbGFzc2VzLnB1dElmQWJzZW50KGNscywgKCkgewogICAgICBDbGFzc05vZGUgbm9kZSA9IG5ldyBDbGFzc05vZGUoY2xzKTsKICAgICAgX25vZGVzLmFkZChub2RlKTsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9KTsKICB9CgogIE1ldGhvZE5vZGUgX2dldE1ldGhvZE5vZGUoRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgQnVpbHRXb3JsZCB3b3JsZCwgRW50aXR5IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gX21ldGhvZHMucHV0SWZBYnNlbnQoZnVuY3Rpb24sICgpIHsKICAgICAgTWV0aG9kTm9kZSBub2RlOwogICAgICBpZiAoZnVuY3Rpb24gaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgICBOYW1lIGluc3RhbmNlTmFtZTsKICAgICAgICBib29sIGlzQ2FsbFRhcmdldDsKICAgICAgICBib29sIGlzTm9TdWNoTWV0aG9kOwogICAgICAgIGlmIChmdW5jdGlvbi5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgICBpc0NhbGxUYXJnZXQgPSB3b3JsZC5jbG9zdXJpemVkTWVtYmVycy5jb250YWlucyhmdW5jdGlvbik7CiAgICAgICAgICBpbnN0YW5jZU5hbWUgPSBmdW5jdGlvbi5tZW1iZXJOYW1lOwogICAgICAgICAgaXNOb1N1Y2hNZXRob2QgPSBpbnN0YW5jZU5hbWUudGV4dCA9PSBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpc0NhbGxUYXJnZXQgPSB3b3JsZC5jbG9zdXJpemVkU3RhdGljcy5jb250YWlucyhmdW5jdGlvbik7CiAgICAgICAgICBpc05vU3VjaE1ldGhvZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBub2RlID0gbmV3IE1ldGhvZE5vZGUoZnVuY3Rpb24sIGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICAgICAgaXNDYWxsVGFyZ2V0OiBpc0NhbGxUYXJnZXQsCiAgICAgICAgICAgIGluc3RhbmNlTmFtZTogaW5zdGFuY2VOYW1lLAogICAgICAgICAgICBpc05vU3VjaE1ldGhvZDogaXNOb1N1Y2hNZXRob2QpOwogICAgICB9IGVsc2UgewogICAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPSBuZXcgUGFyYW1ldGVyU3RydWN0dXJlLmZyb21UeXBlKAogICAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZ2V0TG9jYWxGdW5jdGlvblR5cGUoZnVuY3Rpb24pKTsKICAgICAgICBub2RlID0gbmV3IE1ldGhvZE5vZGUoZnVuY3Rpb24sIHBhcmFtZXRlclN0cnVjdHVyZSwgaXNDYWxsVGFyZ2V0OiB0cnVlKTsKICAgICAgfQogICAgICBfbm9kZXMuYWRkKG5vZGUpOwogICAgICByZXR1cm4gbm9kZTsKICAgIH0pOwogIH0KCiAgdm9pZCBfc2V0dXBEZXBlbmRlbmNpZXMoCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBCdWlsdFdvcmxkIHdvcmxkLAogICAgICBTZXQ8R2VuZXJpY0luc3RhbnRpYXRpb24+IGdlbmVyaWNJbnN0YW50aWF0aW9ucywKICAgICAge2Jvb2wgZm9yUnRpTmVlZHM6IHRydWV9KSB7CiAgICAvLy8gUmVnaXN0ZXIgdGhhdCBpZiBgbm9kZS5lbnRpdHlgIG5lZWRzIHR5cGUgYXJndW1lbnRzIHRoZW4gc28gZG8gZW50aXRpZXMKICAgIC8vLyB3aG9zZSB0eXBlIHZhcmlhYmxlcyBvY2N1ciBpbiBbdHlwZV0uCiAgICAvLy8KICAgIC8vLyBGb3IgaW5zdGFuY2UgaWYgYEFgIG5lZWRzIHR5cGUgYXJndW1lbnRzIHRoZW4gc28gZG9lcyBgQmAgaW46CiAgICAvLy8KICAgIC8vLyAgIGNsYXNzIEE8VD4ge30KICAgIC8vLyAgIGNsYXNzIEI8VD4geyBtKCkgPT4gbmV3IEE8VD4oKTsgfQogICAgLy8vCiAgICB2b2lkIHJlZ2lzdGVyRGVwZW5kZW5jaWVzKFJ0aU5vZGUgbm9kZSwgRGFydFR5cGUgdHlwZSkgewogICAgICB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKSB7CiAgICAgICAgRW50aXR5IHR5cGVEZWNsYXJhdGlvbiA9IHR5cGVWYXJpYWJsZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKICAgICAgICBpZiAodHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgICAgICBub2RlLmFkZERlcGVuZGVuY3koX2dldENsYXNzTm9kZSh0eXBlRGVjbGFyYXRpb24pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbm9kZS5hZGREZXBlbmRlbmN5KAogICAgICAgICAgICAgIF9nZXRNZXRob2ROb2RlKGVsZW1lbnRFbnZpcm9ubWVudCwgd29ybGQsIHR5cGVEZWNsYXJhdGlvbikpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgLy8gQWRkIHRoZSBydGkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGltcGxpY2l0IGluIHRoZSB3YXkgdGhlIGJhY2tlbmQKICAgIC8vIGdlbmVyYXRlcyBjb2RlOiB3aGVuIHdlIGNyZWF0ZSBhIG5ldyBbTGlzdF0sIHdlIGFjdHVhbGx5IGNyZWF0ZSBhCiAgICAvLyBbSlNBcnJheV0gaW4gdGhlIGJhY2tlbmQgYW5kIHdlIG5lZWQgdG8gYWRkIHR5cGUgYXJndW1lbnRzIHRvIHRoZSBjYWxscwogICAgLy8gb2YgdGhlIGxpc3QgY29uc3RydWN0b3Igd2hlbmV2ZXIgd2UgZGV0ZXJtaW5lIHRoYXQgW0pTQXJyYXldIG5lZWRzIHR5cGUKICAgIC8vIGFyZ3VtZW50cy4KICAgIC8vCiAgICAvLyBUaGlzIGlzIG5lZWQgZm9yIGluc3RhbmNlIGZvcjoKICAgIC8vCiAgICAvLyAgICB2YXIgbGlzdCA9IDxpbnQ+W107CiAgICAvLyAgICB2YXIgc2V0ID0gbGlzdC50b1NldCgpOwogICAgLy8gICAgc2V0IGlzIFNldDxTdHJpbmc+OwogICAgLy8KICAgIC8vIEl0IGFsc28gb2NjdXJzIGZvciBbTWFwXSB2cyBbSnNMaW5rZWRIYXNoTWFwXSBpbjoKICAgIC8vCiAgICAvLyAgICB2YXIgbWFwID0gPGludCwgZG91YmxlPnt9OwogICAgLy8gICAgdmFyIHNldCA9IG1hcC5rZXlzLnRvU2V0KCk7CiAgICAvLyAgICBzZXQgaXMgU2V0PFN0cmluZz47CiAgICAvLwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWFrZSB0aGlzIGRlcGVuZGVuY3kgdmlzaWJsZSBmcm9tIGNvZGUsIHBvc3NpYmx5CiAgICAvLyB1c2luZyBnZW5lcmljIG1ldGhvZHMuCiAgICBpZiAoY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzICE9IG51bGwpIHsKICAgICAgX2dldENsYXNzTm9kZShjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpCiAgICAgICAgICAuYWRkRGVwZW5kZW5jeShfZ2V0Q2xhc3NOb2RlKGNvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcykpOwogICAgfQogICAgaWYgKGNvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDbGFzcyAhPSBudWxsKSB7CiAgICAgIF9nZXRDbGFzc05vZGUoY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbENsYXNzKQogICAgICAgICAgLmFkZERlcGVuZGVuY3koX2dldENsYXNzTm9kZShjb21tb25FbGVtZW50cy5zZXRDbGFzcykpOwogICAgfQogICAgaWYgKGNvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxDbGFzcyAhPSBudWxsKSB7CiAgICAgIF9nZXRDbGFzc05vZGUoY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzKQogICAgICAgICAgLmFkZERlcGVuZGVuY3koX2dldENsYXNzTm9kZShjb21tb25FbGVtZW50cy5tYXBDbGFzcykpOwogICAgfQoKICAgIHZvaWQgcHJvY2Vzc0NoZWNrZWRUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIC8vIFJlZ2lzdGVyIHRoYXQgaWYgW2Nsc10gbmVlZHMgdHlwZSBhcmd1bWVudHMgdGhlbiBzbyBkbyB0aGUgZW50aXRpZXMKICAgICAgICAvLyB0aGF0IGRlY2xhcmUgdHlwZSB2YXJpYWJsZXMgb2NjdXJyaW5nIGluIFt0eXBlXS4KICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSB0eXBlLmVsZW1lbnQ7CiAgICAgICAgcmVnaXN0ZXJEZXBlbmRlbmNpZXMoX2dldENsYXNzTm9kZShjbHMpLCB0eXBlKTsKICAgICAgfQogICAgICBpZiAodHlwZSBpcyBGdXR1cmVPclR5cGUpIHsKICAgICAgICAvLyBbdHlwZV0gaXMgYEZ1dHVyZU9yPFg+YC4KCiAgICAgICAgLy8gRm9yIHRoZSBpbXBsaWVkIGBpcyBGdXR1cmU8WD5gIHRlc3QsIHJlZ2lzdGVyIHRoYXQgaWYgYEZ1dHVyZWAgbmVlZHMKICAgICAgICAvLyB0eXBlIGFyZ3VtZW50cyB0aGVuIHNvIGRvIHRoZSBlbnRpdGllcyB0aGF0IGRlY2xhcmUgdHlwZSB2YXJpYWJsZXMKICAgICAgICAvLyBvY2N1cnJpbmcgaW4gYHR5cGUudHlwZUFyZ3VtZW50YC4KICAgICAgICByZWdpc3RlckRlcGVuZGVuY2llcygKICAgICAgICAgICAgX2dldENsYXNzTm9kZShjb21tb25FbGVtZW50cy5mdXR1cmVDbGFzcyksIHR5cGUudHlwZUFyZ3VtZW50KTsKICAgICAgICAvLyBQcm9jZXNzIGB0eXBlLnR5cGVBcmd1bWVudGAgZm9yIHRoZSBpbXBsaWVkIGBpcyBYYCB0ZXN0LgogICAgICAgIHByb2Nlc3NDaGVja2VkVHlwZSh0eXBlLnR5cGVBcmd1bWVudCk7CiAgICAgIH0KICAgIH0KCiAgICB3b3JsZC5pc0NoZWNrcy5mb3JFYWNoKHByb2Nlc3NDaGVja2VkVHlwZSk7CgogICAgd29ybGQuaW5zdGFudGlhdGVkVHlwZXMuZm9yRWFjaCgoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICAgIC8vIFJlZ2lzdGVyIHRoYXQgaWYgW2Nsc10gbmVlZHMgdHlwZSBhcmd1bWVudHMgdGhlbiBzbyBkbyB0aGUgZW50aXRpZXMKICAgICAgLy8gdGhhdCBkZWNsYXJlIHR5cGUgdmFyaWFibGVzIG9jY3VycmluZyBpbiBbdHlwZV0uCiAgICAgIENsYXNzRW50aXR5IGNscyA9IHR5cGUuZWxlbWVudDsKICAgICAgcmVnaXN0ZXJEZXBlbmRlbmNpZXMoX2dldENsYXNzTm9kZShjbHMpLCB0eXBlKTsKICAgIH0pOwoKICAgIHdvcmxkLmZvckVhY2hTdGF0aWNUeXBlQXJndW1lbnQoCiAgICAgICAgKEVudGl0eSBlbnRpdHksIEl0ZXJhYmxlPERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgICAgLy8gUmVnaXN0ZXIgdGhhdCBpZiBbZW50aXR5XSBuZWVkcyB0eXBlIGFyZ3VtZW50cyB0aGVuIHNvIGRvIHRoZQogICAgICAgIC8vIGVudGl0aWVzIHRoYXQgZGVjbGFyZSB0eXBlIHZhcmlhYmxlcyBvY2N1cnJpbmcgaW4gW3R5cGVdLgogICAgICAgIHJlZ2lzdGVyRGVwZW5kZW5jaWVzKAogICAgICAgICAgICBfZ2V0TWV0aG9kTm9kZShlbGVtZW50RW52aXJvbm1lbnQsIHdvcmxkLCBlbnRpdHkpLCB0eXBlKTsKICAgICAgfQogICAgfSk7CgogICAgd29ybGQuZm9yRWFjaER5bmFtaWNUeXBlQXJndW1lbnQoCiAgICAgICAgKFNlbGVjdG9yIHNlbGVjdG9yLCBJdGVyYWJsZTxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgICB2b2lkIHByb2Nlc3NFbnRpdHkoRW50aXR5IGVudGl0eSkgewogICAgICAgIE1ldGhvZE5vZGUgbm9kZSA9IF9nZXRNZXRob2ROb2RlKGVsZW1lbnRFbnZpcm9ubWVudCwgd29ybGQsIGVudGl0eSk7CiAgICAgICAgaWYgKG5vZGUuc2VsZWN0b3JBcHBsaWVzKHNlbGVjdG9yKSkgewogICAgICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhhdCBpZiBgbm9kZS5lbnRpdHlgIG5lZWRzIHR5cGUgYXJndW1lbnRzIHRoZW4gc28gZG8KICAgICAgICAgICAgLy8gdGhlIGVudGl0aWVzIHRoYXQgZGVjbGFyZSB0eXBlIHZhcmlhYmxlcyBvY2N1cnJpbmcgaW4gW3R5cGVdLgogICAgICAgICAgICByZWdpc3RlckRlcGVuZGVuY2llcyhub2RlLCB0eXBlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHdvcmxkLmZvckVhY2hHZW5lcmljSW5zdGFuY2VNZXRob2QocHJvY2Vzc0VudGl0eSk7CiAgICAgIHdvcmxkLmdlbmVyaWNMb2NhbEZ1bmN0aW9ucy5mb3JFYWNoKHByb2Nlc3NFbnRpdHkpOwogICAgICB3b3JsZC5jbG9zdXJpemVkU3RhdGljcy5mb3JFYWNoKHByb2Nlc3NFbnRpdHkpOwogICAgICB3b3JsZC51c2VyTm9TdWNoTWV0aG9kcy5mb3JFYWNoKHByb2Nlc3NFbnRpdHkpOwogICAgfSk7CgogICAgZm9yIChHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uIGluIGdlbmVyaWNJbnN0YW50aWF0aW9ucykgewogICAgICB2b2lkIHByb2Nlc3NFbnRpdHkoRW50aXR5IGVudGl0eSkgewogICAgICAgIE1ldGhvZE5vZGUgbm9kZSA9IF9nZXRNZXRob2ROb2RlKGVsZW1lbnRFbnZpcm9ubWVudCwgd29ybGQsIGVudGl0eSk7CiAgICAgICAgaWYgKG5vZGUucGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzID09CiAgICAgICAgICAgIGluc3RhbnRpYXRpb24udHlwZUFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICAgIGlmIChmb3JSdGlOZWVkcykgewogICAgICAgICAgICBfaW5zdGFudGlhdGlvbk1hcCA/Pz0gPEdlbmVyaWNJbnN0YW50aWF0aW9uLCBTZXQ8RW50aXR5Pj57fTsKICAgICAgICAgICAgX2luc3RhbnRpYXRpb25NYXAKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChpbnN0YW50aWF0aW9uLCAoKSA9PiBuZXcgU2V0PEVudGl0eT4oKSkKICAgICAgICAgICAgICAgIC5hZGQoZW50aXR5KTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiBpbnN0YW50aWF0aW9uLnR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhhdCBpZiBgbm9kZS5lbnRpdHlgIG5lZWRzIHR5cGUgYXJndW1lbnRzIHRoZW4gc28gZG8KICAgICAgICAgICAgLy8gdGhlIGVudGl0aWVzIHRoYXQgZGVjbGFyZSB0eXBlIHZhcmlhYmxlcyBvY2N1cnJpbmcgaW4gW3R5cGVdLgogICAgICAgICAgICByZWdpc3RlckRlcGVuZGVuY2llcyhub2RlLCB0eXBlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHdvcmxkLmNsb3N1cml6ZWRNZW1iZXJzLmZvckVhY2gocHJvY2Vzc0VudGl0eSk7CiAgICAgIHdvcmxkLmNsb3N1cml6ZWRTdGF0aWNzLmZvckVhY2gocHJvY2Vzc0VudGl0eSk7CiAgICAgIHdvcmxkLmdlbmVyaWNMb2NhbEZ1bmN0aW9ucy5mb3JFYWNoKHByb2Nlc3NFbnRpdHkpOwogICAgfQogIH0KCiAgdm9pZCBfcHJvcGFnYXRlVGVzdHMoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsIEJ1aWx0V29ybGQgd29ybGRCdWlsZGVyKSB7CiAgICB2b2lkIHByb2Nlc3NUeXBlVmFyaWFibGVUeXBlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwge2Jvb2wgZGlyZWN0OiB0cnVlfSkgewogICAgICBUeXBlVmFyaWFibGVFbnRpdHkgdmFyaWFibGUgPSB0eXBlLmVsZW1lbnQ7CiAgICAgIGlmICh2YXJpYWJsZS50eXBlRGVjbGFyYXRpb24gaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICBfZ2V0Q2xhc3NOb2RlKHZhcmlhYmxlLnR5cGVEZWNsYXJhdGlvbikubWFya1Rlc3QoZGlyZWN0OiBkaXJlY3QpOwogICAgICB9IGVsc2UgewogICAgICAgIF9nZXRNZXRob2ROb2RlKAogICAgICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LCB3b3JsZEJ1aWxkZXIsIHZhcmlhYmxlLnR5cGVEZWNsYXJhdGlvbikKICAgICAgICAgICAgLm1hcmtUZXN0KGRpcmVjdDogZGlyZWN0KTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgcHJvY2Vzc1R5cGUoRGFydFR5cGUgdHlwZSwge2Jvb2wgZGlyZWN0OiB0cnVlfSkgewogICAgICBpZiAodHlwZSBpcyBGdXR1cmVPclR5cGUpIHsKICAgICAgICBfZ2V0Q2xhc3NOb2RlKGNvbW1vbkVsZW1lbnRzLmZ1dHVyZUNsYXNzKS5tYXJrSW5kaXJlY3RUZXN0KCk7CiAgICAgICAgcHJvY2Vzc1R5cGUodHlwZS50eXBlQXJndW1lbnQsIGRpcmVjdDogZmFsc2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICAgICAgICBwcm9jZXNzVHlwZVZhcmlhYmxlVHlwZSh0eXBlLCBkaXJlY3Q6IGRpcmVjdCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KCiAgICB3b3JsZEJ1aWxkZXIuaXNDaGVja3MuZm9yRWFjaChwcm9jZXNzVHlwZSk7CiAgfQoKICB2b2lkIF9wcm9wYWdhdGVMaXRlcmFscygKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwgQnVpbHRXb3JsZCB3b3JsZCkgewogICAgd29ybGQudHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzLmZvckVhY2goKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlVHlwZSkgewogICAgICBUeXBlVmFyaWFibGVFbnRpdHkgdmFyaWFibGUgPSB0eXBlVmFyaWFibGVUeXBlLmVsZW1lbnQ7CiAgICAgIGlmICh2YXJpYWJsZS50eXBlRGVjbGFyYXRpb24gaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICBfZ2V0Q2xhc3NOb2RlKHZhcmlhYmxlLnR5cGVEZWNsYXJhdGlvbikubWFya0RpcmVjdExpdGVyYWwoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfZ2V0TWV0aG9kTm9kZShlbGVtZW50RW52aXJvbm1lbnQsIHdvcmxkLCB2YXJpYWJsZS50eXBlRGVjbGFyYXRpb24pCiAgICAgICAgICAgIC5tYXJrRGlyZWN0TGl0ZXJhbCgpOwogICAgICB9CiAgICB9KTsKICB9CgogIFN0cmluZyBkdW1wKHtib29sIHZlcmJvc2U6IGZhbHNlfSkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICAgIHZvaWQgYWRkTm9kZShSdGlOb2RlIG5vZGUpIHsKICAgICAgaWYgKG5vZGUuaGFzVXNlIHx8IG5vZGUuZGVwZW5kZW5jaWVzLmlzTm90RW1wdHkgfHwgdmVyYm9zZSkgewogICAgICAgIHNiLndyaXRlKCcgJG5vZGUnKTsKICAgICAgICBTdHJpbmcgY29tbWEgPSAnJzsKICAgICAgICBpZiAobm9kZS5fdGVzdFN0YXRlICYgMSAhPSAwKSB7CiAgICAgICAgICBzYi53cml0ZSgnIGRpcmVjdCB0ZXN0Jyk7CiAgICAgICAgICBjb21tYSA9ICcsJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUuX3Rlc3RTdGF0ZSAmIDIgIT0gMCkgewogICAgICAgICAgc2Iud3JpdGUoJyRjb21tYSBpbmRpcmVjdCB0ZXN0Jyk7CiAgICAgICAgICBjb21tYSA9ICcsJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUuX2xpdGVyYWxTdGF0ZSAmIDEgIT0gMCkgewogICAgICAgICAgc2Iud3JpdGUoJyRjb21tYSBkaXJlY3QgbGl0ZXJhbCcpOwogICAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgICAgfQogICAgICAgIGlmIChub2RlLl9saXRlcmFsU3RhdGUgJiAyICE9IDApIHsKICAgICAgICAgIHNiLndyaXRlKCckY29tbWEgaW5kaXJlY3QgbGl0ZXJhbCcpOwogICAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgICAgfQogICAgICAgIGlmIChub2RlLmRlcGVuZGVuY2llcy5pc05vdEVtcHR5IHx8IHZlcmJvc2UpIHsKICAgICAgICAgIHNiLndyaXRlbG4oJzonKTsKICAgICAgICAgIG5vZGUuZGVwZW5kZW5jaWVzLmZvckVhY2goKG4pID0+IHNiLndyaXRlbG4oJyAgJG4nKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNiLndyaXRlbG4oKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFkZFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgICBzYi53cml0ZWxuKCcgJHR5cGUnKTsKICAgIH0KCiAgICBzYi53cml0ZWxuKCdjbGFzc2VzOicpOwogICAgX2NsYXNzZXMudmFsdWVzLmZvckVhY2goYWRkTm9kZSk7CiAgICBzYi53cml0ZWxuKCdtZXRob2RzOicpOwogICAgX21ldGhvZHMudmFsdWVzLmZvckVhY2goYWRkTm9kZSk7CiAgICBzYi53cml0ZWxuKCdleHBsaWNpdCBpcy10ZXN0czonKTsKICAgIGV4cGxpY2l0SXNDaGVja3MuZm9yRWFjaChhZGRUeXBlKTsKICAgIHNiLndyaXRlbG4oJ2ltcGxpY2l0IGlzLXRlc3RzOicpOwogICAgaW1wbGljaXRJc0NoZWNrcy5mb3JFYWNoKGFkZFR5cGUpOwoKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgdm9pZCBfY29sbGVjdFJlc3VsdHMoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsIERhcnRUeXBlcyB0eXBlcywgQnVpbHRXb3JsZCB3b3JsZCwKICAgICAge2Jvb2wgZm9yUnRpTmVlZHM6IHRydWV9KSB7CiAgICAvLy8gUmVnaXN0ZXIgdGhlIGltcGxpY2l0IGlzLXRlc3Qgb2YgW3R5cGVdLgogICAgLy8vCiAgICAvLy8gSWYgW3R5cGVdIGlzIG9mIHRoZSBmb3JtIGBGdXR1cmVPcjxYPmAsIGFsc28gcmVnaXN0ZXIgdGhlIGltcGxpY2l0CiAgICAvLy8gaXMtdGVzdHMgb2YgYEZ1dHVyZTxYPmAgYW5kIGBYYC4KICAgIHZvaWQgYWRkSW1wbGljaXRDaGVjayhEYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGlmIChpbXBsaWNpdElzQ2hlY2tzLmFkZCh0eXBlKSkgewogICAgICAgIGlmICh0eXBlIGlzIEZ1dHVyZU9yVHlwZSkgewogICAgICAgICAgYWRkSW1wbGljaXRDaGVjayhjb21tb25FbGVtZW50cy5mdXR1cmVUeXBlKHR5cGUudHlwZUFyZ3VtZW50KSk7CiAgICAgICAgICBhZGRJbXBsaWNpdENoZWNrKHR5cGUudHlwZUFyZ3VtZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFkZEltcGxpY2l0Q2hlY2tzKEl0ZXJhYmxlPERhcnRUeXBlPiB0eXBlcykgewogICAgICB0eXBlcy5mb3JFYWNoKGFkZEltcGxpY2l0Q2hlY2spOwogICAgfQoKICAgIHdvcmxkLmlzQ2hlY2tzLmZvckVhY2goKERhcnRUeXBlIHR5cGUpIHsKICAgICAgaWYgKHR5cGUgaXMgRnV0dXJlT3JUeXBlKSB7CiAgICAgICAgYWRkSW1wbGljaXRDaGVjayhjb21tb25FbGVtZW50cy5mdXR1cmVUeXBlKHR5cGUudHlwZUFyZ3VtZW50KSk7CiAgICAgICAgYWRkSW1wbGljaXRDaGVjayh0eXBlLnR5cGVBcmd1bWVudCk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIENvbXB1dGUgdHlwZSBhcmd1bWVudHMgb2YgY2xhc3NlcyB0aGF0IHVzZSBvbmUgb2YgdGhlaXIgdHlwZSB2YXJpYWJsZXMgaW4KICAgIC8vIGlzLWNoZWNrcyBhbmQgYWRkIHRoZSBpcy1jaGVja3MgdGhhdCB0aGV5IGltcGx5LgogICAgX2NsYXNzZXMuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc05vZGUgbm9kZSkgewogICAgICBpZiAoIW5vZGUuaGFzVGVzdCkgcmV0dXJuOwogICAgICAvLyBGaW5kIGFsbCBpbnN0YW50aWF0ZWQgdHlwZXMgdGhhdCBhcmUgYSBzdWJ0eXBlIG9mIGEgY2xhc3MgdGhhdCB1c2VzCiAgICAgIC8vIG9uZSBvZiBpdHMgdHlwZSBhcmd1bWVudHMgaW4gYW4gaXMtY2hlY2sgYW5kIGFkZCB0aGUgYXJndW1lbnRzIHRvIHRoZQogICAgICAvLyBzZXQgb2YgaXMtY2hlY2tzLgogICAgICBmb3IgKEludGVyZmFjZVR5cGUgdHlwZSBpbiB3b3JsZC5pbnN0YW50aWF0ZWRUeXBlcykgewogICAgICAgIC8vIFdlIG5lZWQgdGhlIHR5cGUgYXMgaW5zdGFuY2Ugb2YgaXRzIHN1cGVyY2xhc3MgYW55d2F5LCBzbyB3ZSBqdXN0CiAgICAgICAgLy8gdHJ5IHRvIGNvbXB1dGUgdGhlIHN1YnN0aXR1dGlvbjsgaWYgdGhlIHJlc3VsdCBpcyBbOm51bGw6XSwgdGhlCiAgICAgICAgLy8gY2xhc3NlcyBhcmUgbm90IHJlbGF0ZWQuCiAgICAgICAgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZSA9IHR5cGVzLmFzSW5zdGFuY2VPZih0eXBlLCBjbHMpOwogICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIGluc3RhbmNlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgICAgYWRkSW1wbGljaXRDaGVjayhhcmd1bWVudC51bmFsaWFzZWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgd29ybGQuZm9yRWFjaFN0YXRpY1R5cGVBcmd1bWVudCgKICAgICAgICAoRW50aXR5IGZ1bmN0aW9uLCBJdGVyYWJsZTxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgICBpZiAoIV9nZXRNZXRob2ROb2RlKGVsZW1lbnRFbnZpcm9ubWVudCwgd29ybGQsIGZ1bmN0aW9uKS5oYXNUZXN0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGFkZEltcGxpY2l0Q2hlY2tzKHR5cGVBcmd1bWVudHMpOwogICAgfSk7CgogICAgaWYgKGZvclJ0aU5lZWRzKSB7CiAgICAgIF9hcHBsaWVkU2VsZWN0b3JNYXAgPSA8U2VsZWN0b3IsIFNldDxFbnRpdHk+Pnt9OwogICAgfQoKICAgIHdvcmxkLmZvckVhY2hEeW5hbWljVHlwZUFyZ3VtZW50KAogICAgICAgIChTZWxlY3RvciBzZWxlY3RvciwgSXRlcmFibGU8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgICAgZm9yIChNZXRob2ROb2RlIG5vZGUgaW4gX21ldGhvZHMudmFsdWVzKSB7CiAgICAgICAgaWYgKG5vZGUuc2VsZWN0b3JBcHBsaWVzKHNlbGVjdG9yKSkgewogICAgICAgICAgaWYgKGZvclJ0aU5lZWRzKSB7CiAgICAgICAgICAgIF9hcHBsaWVkU2VsZWN0b3JNYXAKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChzZWxlY3RvciwgKCkgPT4gbmV3IFNldDxFbnRpdHk+KCkpCiAgICAgICAgICAgICAgICAuYWRkKG5vZGUuZW50aXR5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChub2RlLmhhc1Rlc3QpIHsKICAgICAgICAgICAgYWRkSW1wbGljaXRDaGVja3ModHlwZUFyZ3VtZW50cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHRoZSBjbGFzc2VzIGFuZCBtZXRob2RzIHRoYXQgbmVlZCBydW50aW1lIHR5cGVzLgphYnN0cmFjdCBjbGFzcyBSdW50aW1lVHlwZXNOZWVkIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW1J1bnRpbWVUeXBlc05lZWRdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgUnVudGltZVR5cGVzTmVlZC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSB7CiAgICBib29sIGlzVHJpdmlhbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgaWYgKGlzVHJpdmlhbCkgewogICAgICByZXR1cm4gY29uc3QgVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWQoKTsKICAgIH0KICAgIHJldHVybiBuZXcgUnVudGltZVR5cGVzTmVlZEltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgIHNvdXJjZSwgZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1J1bnRpbWVUeXBlc05lZWRdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIG5lZWRzIHR5cGUgYXJndW1lbnRzIGF0IHJ1bnRpbWUgdHlwZS4KICAvLy8KICAvLy8gVGhpcyBpcyBmb3IgaW5zdGFuY2UgdGhlIGNhc2UgZm9yIGdlbmVyaWMgY2xhc3NlcyB1c2VkIGluIGEgdHlwZSB0ZXN0OgogIC8vLwogIC8vLyAgIGNsYXNzIEM8VD4ge30KICAvLy8gICBtYWluKCkgewogIC8vLyAgICAgbmV3IEM8aW50PigpIGlzIEM8aW50PjsKICAvLy8gICAgIG5ldyBDPFN0cmluZz4oKSBpcyBDPFN0cmluZz47CiAgLy8vICAgfQogIC8vLwogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZXRob2RdIG5lZWRzIHR5cGUgYXJndW1lbnRzIGF0IHJ1bnRpbWUgdHlwZS4KICAvLy8KICAvLy8gVGhpcyBpcyBmb3IgaW5zdGFuY2UgdGhlIGNhc2UgZm9yIGdlbmVyaWMgbWV0aG9kcyB0aGF0IHVzZSB0eXBlIHRlc3RzOgogIC8vLwogIC8vLyAgIG1ldGhvZDxUPihUIHQpID0+IHQgaXMgVDsKICAvLy8gICBtYWluKCkgewogIC8vLyAgICAgbWV0aG9kPGludD4oMCk7CiAgLy8vICAgICBtZXRob2Q8U3RyaW5nPignJyk7CiAgLy8vICAgfQogIC8vLwogIGJvb2wgbWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhIHNpZ25hdHVyZSBpcyBuZWVkZWQgZm9yIFttZXRob2RdLgogIC8vLwogIC8vLyBBIHNpZ25hdHVyZSBpcyBhIHJ1bnRpbWUgbWV0aG9kIHR5cGUgZGVzY3JpcHRvciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMKICAvLy8gYSBydW50aW1lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0eXBlIG9mIHRoZSBtZXRob2QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZm9yIGluc3RhbmNlIG5lZWRlZCBmb3IgaW5zdGFuY2UgbWV0aG9kcyBvZiBnZW5lcmljIGNsYXNzZXMgdGhhdAogIC8vLyBhcmUgdG9ybiBvZmYgYW5kIHdob3NlIHR5cGUgdGhlcmVmb3JlIHBvdGVudGlhbGx5IGlzIHVzZWQgaW4gYSB0eXBlIHRlc3Q6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBDPFQ+IHsKICAvLy8gICAgICAgbWV0aG9kKFQgdCkge30KICAvLy8gICAgIH0KICAvLy8gICAgIG1haW4oKSB7CiAgLy8vICAgICAgIG5ldyBDPGludD4oKS5tZXRob2QgaXMgdm9pZCBGdW5jdGlvbihpbnQpOwogIC8vLyAgICAgICBuZXcgQzxTdHJpbmc+KCkubWV0aG9kIGlzIHZvaWQgRnVuY3Rpb24oU3RyaW5nKTsKICAvLy8gICAgIH0KICAvLy8KICAvLy8gU2luY2UgdHlwZSBvZiB0aGUgbWV0aG9kIGRlcGVuZHMgb24gdGhlIHR5cGUgYXJndW1lbnQgb2YgaXRzIGVuY2xvc2luZwogIC8vLyBjbGFzcywgdGhlIHR5cGUgb2YgdGhlIG1ldGhvZCBpcyBhIEphdmFTY3JpcHQgZnVuY3Rpb24gbGlrZToKICAvLy8KICAvLy8gICAgc2lnbmF0dXJlOiBmdW5jdGlvbiAoVCkgewogIC8vLyAgICAgIHJldHVybiB7J2Z1bmMnOiB0cnVlLCBwYXJhbXM6IFtUXX07CiAgLy8vICAgIH0KICAvLy8KICBib29sIG1ldGhvZE5lZWRzU2lnbmF0dXJlKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhIGR5bmFtaWMgY2FsbCBvZiBbc2VsZWN0b3JdIG5lZWRzIHRvIHBhc3MgdHlwZQogIC8vLyBhcmd1bWVudHMuCiAgYm9vbCBzZWxlY3Rvck5lZWRzVHlwZUFyZ3VtZW50cyhTZWxlY3RvciBzZWxlY3Rvcik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhIGdlbmVyaWMgaW5zdGFudGlhdGlvbiBvbiBhbiBleHByZXNzaW9uIG9mIHR5cGUKICAvLy8gW2Z1bmN0aW9uVHlwZV0gd2l0aCB0aGUgZ2l2ZW4gW3R5cGVBcmd1bWVudENvdW50XSBuZWVkcyB0byBwYXNzIHR5cGUKICAvLy8gYXJndW1lbnRzLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBbZnVuY3Rpb25UeXBlXS4KICBib29sIGluc3RhbnRpYXRpb25OZWVkc1R5cGVBcmd1bWVudHMoCiAgICAgIERhcnRUeXBlIGZ1bmN0aW9uVHlwZSwgaW50IHR5cGVBcmd1bWVudENvdW50KTsKfQoKY2xhc3MgVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWQgaW1wbGVtZW50cyBSdW50aW1lVHlwZXNOZWVkIHsKICBjb25zdCBUcml2aWFsUnVudGltZVR5cGVzTmVlZCgpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlQm9vbCh0cnVlKTsgLy8gSXMgdHJpdmlhbC4KICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzU2lnbmF0dXJlKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtZXRob2ROZWVkc1R5cGVBcmd1bWVudHMoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSA9PgogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBbGlnbiBoYW5kbGluZyBvZiB0eXBlIGFyZ3VtZW50cyBwYXNzZWQgdG8gZmFjdG9yeQogICAgICAvLyBjb25zdHJ1Y3RvcnMgd2l0aCB0eXBlIGFyZ3VtZW50cyBwYXNzZWQgdGhlIHJlZ3VsYXIgZ2VuZXJpYyBtZXRob2RzLgogICAgICAhKG1ldGhvZCBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJiBtZXRob2QuaXNGYWN0b3J5Q29uc3RydWN0b3IpOwoKICBAb3ZlcnJpZGUKICBib29sIHNlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzKFNlbGVjdG9yIHNlbGVjdG9yKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGluc3RhbnRpYXRpb25OZWVkc1R5cGVBcmd1bWVudHMoCiAgICAgIERhcnRUeXBlIGZ1bmN0aW9uVHlwZSwgaW50IHR5cGVBcmd1bWVudENvdW50KSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCmNsYXNzIFJ1bnRpbWVUeXBlc05lZWRJbXBsIGltcGxlbWVudHMgUnVudGltZVR5cGVzTmVlZCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtSdW50aW1lVHlwZXNOZWVkXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3J1bnRpbWUtdHlwZXMtbmVlZCc7CgogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzOwogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc05lZWRpbmdTaWduYXR1cmU7CiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHM7CiAgZmluYWwgU2V0PExvY2FsPiBsb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmU7CiAgZmluYWwgU2V0PExvY2FsPiBsb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzOwogIGZpbmFsIFNldDxTZWxlY3Rvcj4gc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHM7CiAgZmluYWwgU2V0PGludD4gaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50czsKCiAgUnVudGltZVR5cGVzTmVlZEltcGwoCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgdGhpcy5jbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMubWV0aG9kc05lZWRpbmdTaWduYXR1cmUsCiAgICAgIHRoaXMubWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICB0aGlzLmxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZSwKICAgICAgdGhpcy5sb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICB0aGlzLnNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICB0aGlzLmluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMpOwoKICBmYWN0b3J5IFJ1bnRpbWVUeXBlc05lZWRJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMgPQogICAgICAgIHNvdXJjZS5yZWFkQ2xhc3NlczxDbGFzc0VudGl0eT4oKS50b1NldCgpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZSA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpLnRvU2V0KCk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpLnRvU2V0KCk7CiAgICBTZXQ8U2VsZWN0b3I+IHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzID0KICAgICAgICBzb3VyY2UucmVhZExpc3QoKCkgPT4gbmV3IFNlbGVjdG9yLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKS50b1NldCgpOwogICAgU2V0PGludD4gaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgc291cmNlLnJlYWRMaXN0KHNvdXJjZS5yZWFkSW50KS50b1NldCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBSdW50aW1lVHlwZXNOZWVkSW1wbCgKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgIG1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlLAogICAgICAgIG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgICBudWxsLAogICAgICAgIG51bGwsCiAgICAgICAgc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgICAgaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlQm9vbChmYWxzZSk7IC8vIElzIF9ub3RfIHRyaXZpYWwuCiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NlcyhjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMpOwogICAgc2luay53cml0ZU1lbWJlcnMobWV0aG9kc05lZWRpbmdTaWduYXR1cmUpOwogICAgc2luay53cml0ZU1lbWJlcnMobWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzKTsKICAgIGFzc2VydChsb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmUgPT0gbnVsbCk7CiAgICBhc3NlcnQobG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9PSBudWxsKTsKICAgIHNpbmsud3JpdGVMaXN0KHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgIChTZWxlY3RvciBzZWxlY3RvcikgPT4gc2VsZWN0b3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICAgIHNpbmsud3JpdGVMaXN0KGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMsIHNpbmsud3JpdGVJbnQpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIGJvb2wgY2hlY2tDbGFzcyhjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKENsYXNzRW50aXR5IGNscykgewogICAgYXNzZXJ0KGNoZWNrQ2xhc3MoY2xzKSk7CiAgICBpZiAoIV9lbGVtZW50RW52aXJvbm1lbnQuaXNHZW5lcmljQ2xhc3MoY2xzKSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyhjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBtZXRob2ROZWVkc1NpZ25hdHVyZShGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIG1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlLmNvbnRhaW5zKGZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgbWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzLmNvbnRhaW5zKGZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIGlmIChzZWxlY3Rvci5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09IDApIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyhzZWxlY3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGluc3RhbnRpYXRpb25OZWVkc1R5cGVBcmd1bWVudHMoCiAgICAgIERhcnRUeXBlIGZ1bmN0aW9uVHlwZSwgaW50IHR5cGVBcmd1bWVudENvdW50KSB7CiAgICByZXR1cm4gaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyh0eXBlQXJndW1lbnRDb3VudCk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciBjb21wdXRpbmcgY2xhc3NlcyBhbmQgbWV0aG9kcyB0aGF0IG5lZWQgcnVudGltZSB0eXBlcy4KYWJzdHJhY3QgY2xhc3MgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgewogIC8vLyBSZWdpc3RlcnMgdGhhdCBbY2xzXSB1c2VzIG9uZSBvZiBpdHMgdHlwZSB2YXJpYWJsZXMgYXMgYSBsaXRlcmFsLgogIHZvaWQgcmVnaXN0ZXJDbGFzc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW21ldGhvZF0gdXNlcyBvbmUgb2YgaXRzIHR5cGUgdmFyaWFibGVzIGFzIGEgbGl0ZXJhbC4KICB2b2lkIHJlZ2lzdGVyTWV0aG9kVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCk7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBbbG9jYWxGdW5jdGlvbl0gdXNlcyBvbmUgb2YgaXRzIHR5cGUgdmFyaWFibGVzIGFzIGEKICAvLy8gbGl0ZXJhbC4KICB2b2lkIHJlZ2lzdGVyTG9jYWxGdW5jdGlvblVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbChMb2NhbCBsb2NhbEZ1bmN0aW9uKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IGEgZ2VuZXJpYyBbaW5zdGFudGlhdGlvbl0gaXMgdXNlZC4KICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbik7CgogIC8vLyBDb21wdXRlcyB0aGUgW1J1bnRpbWVUeXBlc05lZWRdIGZvciB0aGUgZGF0YSByZWdpc3RlcmVkIHdpdGggdGhpcyBidWlsZGVyLgogIFJ1bnRpbWVUeXBlc05lZWQgY29tcHV0ZVJ1bnRpbWVUeXBlc05lZWQoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpOwp9CgpjbGFzcyBUcml2aWFsUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgaW1wbGVtZW50cyBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciB7CiAgY29uc3QgVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyKCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDbGFzc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbChDbGFzc0VudGl0eSBjbHMpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJNZXRob2RVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9jYWxGdW5jdGlvblVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbChMb2NhbCBsb2NhbEZ1bmN0aW9uKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbikge30KCiAgQG92ZXJyaWRlCiAgUnVudGltZVR5cGVzTmVlZCBjb21wdXRlUnVudGltZVR5cGVzTmVlZCgKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucykgewogICAgcmV0dXJuIGNvbnN0IFRyaXZpYWxSdW50aW1lVHlwZXNOZWVkKCk7CiAgfQp9CgpjbGFzcyBSdW50aW1lVHlwZXNOZWVkQnVpbGRlckltcGwgaW1wbGVtZW50cyBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciB7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gY2xhc3Nlc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHMgPQogICAgICBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IG1ldGhvZHNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzID0KICAgICAgbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgZmluYWwgU2V0PExvY2FsPiBsb2NhbEZ1bmN0aW9uc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHMgPSBuZXcgU2V0PExvY2FsPigpOwoKICBNYXA8U2VsZWN0b3IsIFNldDxFbnRpdHk+PiBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50c0ZvclRlc3Rpbmc7CgogIE1hcDxHZW5lcmljSW5zdGFudGlhdGlvbiwgU2V0PEVudGl0eT4+CiAgICAgIGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHNGb3JUZXN0aW5nOwoKICBmaW5hbCBTZXQ8R2VuZXJpY0luc3RhbnRpYXRpb24+IF9nZW5lcmljSW5zdGFudGlhdGlvbnMgPQogICAgICBuZXcgU2V0PEdlbmVyaWNJbnN0YW50aWF0aW9uPigpOwoKICBUeXBlVmFyaWFibGVUZXN0cyB0eXBlVmFyaWFibGVUZXN0c0ZvclRlc3Rpbmc7CgogIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVySW1wbCh0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2xhc3NVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBjbGFzc2VzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscy5hZGQoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJNZXRob2RVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICBtZXRob2RzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscy5hZGQobWV0aG9kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKExvY2FsIGxvY2FsRnVuY3Rpb24pIHsKICAgIGxvY2FsRnVuY3Rpb25zVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscy5hZGQobG9jYWxGdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbikgewogICAgX2dlbmVyaWNJbnN0YW50aWF0aW9ucy5hZGQoaW5zdGFudGlhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBSdW50aW1lVHlwZXNOZWVkIGNvbXB1dGVSdW50aW1lVHlwZXNOZWVkKAogICAgICBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CiAgICBUeXBlVmFyaWFibGVUZXN0cyB0eXBlVmFyaWFibGVUZXN0cyA9IG5ldyBUeXBlVmFyaWFibGVUZXN0cygKICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgY2xvc2VkV29ybGQuZGFydFR5cGVzLAogICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMpOwogICAgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZSA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CiAgICBTZXQ8TG9jYWw+IGxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZSA9IG5ldyBTZXQ8TG9jYWw+KCk7CiAgICBTZXQ8TG9jYWw+IGxvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMgPSBuZXcgU2V0PExvY2FsPigpOwogICAgU2V0PEVudGl0eT4gcHJvY2Vzc2VkRW50aXRpZXMgPSBuZXcgU2V0PEVudGl0eT4oKTsKCiAgICAvLyBGaW5kIHRoZSBjbGFzc2VzIHRoYXQgbmVlZCB0eXBlIGFyZ3VtZW50cyBhdCBydW50aW1lLiBTdWNoCiAgICAvLyBjbGFzc2VzIGFyZToKICAgIC8vICgxKSB1c2VkIGluIGFuIGlzIGNoZWNrIHdpdGggdHlwZSB2YXJpYWJsZXMsCiAgICAvLyAoMikgZGVwZW5kZW5jaWVzIG9mIGNsYXNzZXMgaW4gKDEpLAogICAgLy8gKDMpIHN1YmNsYXNzZXMgb2YgKDIpIGFuZCAoMykuCiAgICB2b2lkIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMoRW50aXR5IGVudGl0eSkgewogICAgICAvLyBGdW5jdGlvbnMgd2l0aCB0eXBlIGFyZ3VtZW50cyBjYW4gaGF2ZSBkZXBlbmRlbmNpZXMgb2YgZWFjaCBvdGhlciAoaWYKICAgICAgLy8gdGhlIGZ1bmN0aW9ucyBjYWxsIGVhY2ggb3RoZXIpIHNvIHdlIGtlZXAgYSBzZXQgdG8gcHJldmVudCBpbmZpbml0ZWx5CiAgICAgIC8vIHJlY3Vyc2luZyBvdmVyIHRoZSBzYW1lIGVudGl0aWVzLgogICAgICBpZiAocHJvY2Vzc2VkRW50aXRpZXMuY29udGFpbnMoZW50aXR5KSkgcmV0dXJuOwoKICAgICAgcHJvY2Vzc2VkRW50aXRpZXMuYWRkKGVudGl0eSk7CiAgICAgIGlmIChlbnRpdHkgaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBlbnRpdHk7CiAgICAgICAgaWYgKCFfZWxlbWVudEVudmlyb25tZW50LmlzR2VuZXJpY0NsYXNzKGNscykpIHJldHVybjsKICAgICAgICBpZiAoY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzLmNvbnRhaW5zKGNscykpIHJldHVybjsKICAgICAgICBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMuYWRkKGNscyk7CgogICAgICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogVGhpcyBzaG91bGQgdXNlIHN1YmNsYXNzZXMsIG5vdCBzdWJ0eXBlcy4KICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5mb3JFYWNoU3RyaWN0U3VidHlwZU9mKGNscywKICAgICAgICAgICAgKENsYXNzRW50aXR5IHN1YikgewogICAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyhzdWIpOwogICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoZW50aXR5IGlzIEZ1bmN0aW9uRW50aXR5KSB7CiAgICAgICAgbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzLmFkZChlbnRpdHkpOwogICAgICB9IGVsc2UgewogICAgICAgIGxvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMuYWRkKGVudGl0eSk7CiAgICAgIH0KCiAgICAgIEl0ZXJhYmxlPEVudGl0eT4gZGVwZW5kZW5jaWVzID0KICAgICAgICAgIHR5cGVWYXJpYWJsZVRlc3RzLmdldFR5cGVBcmd1bWVudERlcGVuZGVuY2llcyhlbnRpdHkpOwogICAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaCgoRW50aXR5IG90aGVyKSB7CiAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyhvdGhlcik7CiAgICAgIH0pOwogICAgfQoKICAgIFNldDxMb2NhbD4gbG9jYWxGdW5jdGlvbnMgPSBjbG9zZWRXb3JsZC5sb2NhbEZ1bmN0aW9ucy50b1NldCgpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBjbG9zdXJpemVkTWVtYmVycyA9CiAgICAgICAgY2xvc2VkV29ybGQuY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXMudG9TZXQoKTsKCiAgICAvLyBDaGVjayBsb2NhbCBmdW5jdGlvbnMgYW5kIGNsb3N1cml6ZWQgbWVtYmVycy4KICAgIHZvaWQgY2hlY2tDbG9zdXJlcyh7RGFydFR5cGUgcG90ZW50aWFsU3VidHlwZU9mfSkgewogICAgICBib29sIGNoZWNrRnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUpIHsKICAgICAgICBDbGFzc0VudGl0eSBjb250ZXh0Q2xhc3MgPSBEYXJ0VHlwZXMuZ2V0Q2xhc3NDb250ZXh0KGZ1bmN0aW9uVHlwZSk7CiAgICAgICAgaWYgKGNvbnRleHRDbGFzcyAhPSBudWxsICYmCiAgICAgICAgICAgIChwb3RlbnRpYWxTdWJ0eXBlT2YgPT0gbnVsbCB8fAogICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuZGFydFR5cGVzCiAgICAgICAgICAgICAgICAgICAgLmlzUG90ZW50aWFsU3VidHlwZShmdW5jdGlvblR5cGUsIHBvdGVudGlhbFN1YnR5cGVPZikpKSB7CiAgICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKGNvbnRleHRDbGFzcyk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBTZXQ8TG9jYWw+IGxvY2FsRnVuY3Rpb25zVG9SZW1vdmU7CiAgICAgIFNldDxGdW5jdGlvbkVudGl0eT4gY2xvc3VyaXplZE1lbWJlcnNUb1JlbW92ZTsKICAgICAgZm9yIChMb2NhbCBmdW5jdGlvbiBpbiBsb2NhbEZ1bmN0aW9ucykgewogICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldExvY2FsRnVuY3Rpb25UeXBlKGZ1bmN0aW9uKTsKICAgICAgICBpZiAocG90ZW50aWFsU3VidHlwZU9mID09IG51bGwgfHwKICAgICAgICAgICAgY2xvc2VkV29ybGQuZGFydFR5cGVzCiAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxTdWJ0eXBlKGZ1bmN0aW9uVHlwZSwgcG90ZW50aWFsU3VidHlwZU9mLAogICAgICAgICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSByZWdpc3RlciBnZW5lcmljIGluc3RhbnRpYXRpb25zCiAgICAgICAgICAgICAgICAgICAgLy8gaW5zdGVhZC4KICAgICAgICAgICAgICAgICAgICBhc3N1bWVJbnN0YW50aWF0aW9uczogX2dlbmVyaWNJbnN0YW50aWF0aW9ucy5pc05vdEVtcHR5KSkgewogICAgICAgICAgZnVuY3Rpb25UeXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKSB7CiAgICAgICAgICAgIEVudGl0eSB0eXBlRGVjbGFyYXRpb24gPSB0eXBlVmFyaWFibGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb247CiAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkRW50aXRpZXMuY29udGFpbnModHlwZURlY2xhcmF0aW9uKSkgewogICAgICAgICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHModHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBsb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmUuYWRkKGZ1bmN0aW9uKTsKICAgICAgICAgIGxvY2FsRnVuY3Rpb25zVG9SZW1vdmUgPz89IG5ldyBTZXQ8TG9jYWw+KCk7CiAgICAgICAgICBsb2NhbEZ1bmN0aW9uc1RvUmVtb3ZlLmFkZChmdW5jdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gaW4gY2xvc3VyaXplZE1lbWJlcnMpIHsKICAgICAgICBpZiAoY2hlY2tGdW5jdGlvblR5cGUoX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZnVuY3Rpb24pKSkgewogICAgICAgICAgbWV0aG9kc05lZWRpbmdTaWduYXR1cmUuYWRkKGZ1bmN0aW9uKTsKICAgICAgICAgIGNsb3N1cml6ZWRNZW1iZXJzVG9SZW1vdmUgPz89IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CiAgICAgICAgICBjbG9zdXJpemVkTWVtYmVyc1RvUmVtb3ZlLmFkZChmdW5jdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsb2NhbEZ1bmN0aW9uc1RvUmVtb3ZlICE9IG51bGwpIHsKICAgICAgICBsb2NhbEZ1bmN0aW9ucy5yZW1vdmVBbGwobG9jYWxGdW5jdGlvbnNUb1JlbW92ZSk7CiAgICAgIH0KICAgICAgaWYgKGNsb3N1cml6ZWRNZW1iZXJzVG9SZW1vdmUgIT0gbnVsbCkgewogICAgICAgIGNsb3N1cml6ZWRNZW1iZXJzLnJlbW92ZUFsbChjbG9zdXJpemVkTWVtYmVyc1RvUmVtb3ZlKTsKICAgICAgfQogICAgfQoKICAgIC8vIENvbXB1dGUgdGhlIHNldCBvZiBhbGwgY2xhc3NlcyBhbmQgbWV0aG9kcyB0aGF0IG5lZWQgcnVudGltZSB0eXBlCiAgICAvLyBpbmZvcm1hdGlvbi4KCiAgICB2b2lkIHByb2Nlc3NDaGVja3MoU2V0PERhcnRUeXBlPiBjaGVja3MpIHsKICAgICAgY2hlY2tzLmZvckVhY2goKERhcnRUeXBlIHR5cGUpIHsKICAgICAgICBpZiAodHlwZS5pc0ludGVyZmFjZVR5cGUpIHsKICAgICAgICAgIEludGVyZmFjZVR5cGUgaXRmID0gdHlwZTsKICAgICAgICAgIGlmICghaXRmLnRyZWF0QXNSYXcpIHsKICAgICAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyhpdGYuZWxlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUpIHsKICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGNoZWNrcyBhZ2FpbnN0IHR5cGUgdmFyaWFibGVzIGFuZCBmdW5jdGlvbiB0eXBlcwogICAgICAgICAgICAvLyBjb250YWluaW5nIHR5cGUgdmFyaWFibGVzLgogICAgICAgICAgICBFbnRpdHkgdHlwZURlY2xhcmF0aW9uID0gdHlwZVZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwogICAgICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKHR5cGVEZWNsYXJhdGlvbik7CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICh0eXBlLmlzRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgIGNoZWNrQ2xvc3VyZXMocG90ZW50aWFsU3VidHlwZU9mOiB0eXBlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlIGlzIEZ1dHVyZU9yVHlwZSkgewogICAgICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKAogICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuZnV0dXJlQ2xhc3MpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgcHJvY2Vzc0NoZWNrcyh0eXBlVmFyaWFibGVUZXN0cy5leHBsaWNpdElzQ2hlY2tzKTsKICAgIHByb2Nlc3NDaGVja3ModHlwZVZhcmlhYmxlVGVzdHMuaW1wbGljaXRJc0NoZWNrcyk7CgogICAgLy8gQWRkIHRoZSBjbGFzc2VzLCBtZXRob2RzIGFuZCBsb2NhbCBmdW5jdGlvbnMgdGhhdCBuZWVkIHR5cGUgYXJndW1lbnRzCiAgICAvLyBiZWNhdXNlIHRoZXkgdXNlIGEgdHlwZSB2YXJpYWJsZSBhcyBhIGxpdGVyYWwuCiAgICBjbGFzc2VzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscy5mb3JFYWNoKHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMpOwogICAgbWV0aG9kc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHMuZm9yRWFjaChwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKTsKICAgIGxvY2FsRnVuY3Rpb25zVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscwogICAgICAgIC5mb3JFYWNoKHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMpOwoKICAgIGlmIChjbG9zZWRXb3JsZC5pc01lbWJlclVzZWQoCiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuaW52b2NhdGlvblR5cGVBcmd1bWVudEdldHRlcikpIHsKICAgICAgLy8gSWYgYEludm9jYXRpb24udHlwZUFyZ3VtZW50c2AgaXMgbGl2ZSwgbWFyayBhbGwgdXNlci1kZWZpbmVkCiAgICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBgbm9TdWNoTWV0aG9kYCBhcyBuZWVkaW5nIHR5cGUgYXJndW1lbnRzLgogICAgICBmb3IgKE1lbWJlckVudGl0eSBtZW1iZXIgaW4gY2xvc2VkV29ybGQudXNlck5vU3VjaE1ldGhvZHMpIHsKICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKG1lbWJlcik7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGNoZWNrRnVuY3Rpb24oRW50aXR5IGZ1bmN0aW9uLCBGdW5jdGlvblR5cGUgdHlwZSkgewogICAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBEYXJ0VHlwZSBib3VuZCA9IHR5cGVWYXJpYWJsZS5ib3VuZDsKICAgICAgICBpZiAoIWJvdW5kLmlzRHluYW1pYyAmJgogICAgICAgICAgICAhYm91bmQuaXNWb2lkICYmCiAgICAgICAgICAgIGJvdW5kICE9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpIHsKICAgICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMoZnVuY3Rpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgY2xvc2VkV29ybGQuZm9yRWFjaEdlbmVyaWNNZXRob2QoKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgICBpZiAoY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobWV0aG9kKQogICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgIGNoZWNrRnVuY3Rpb24obWV0aG9kLCBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShtZXRob2QpKTsKICAgICAgfQogICAgfSk7CiAgICBmb3IgKEtMb2NhbEZ1bmN0aW9uIGZ1bmN0aW9uIGluIGNsb3NlZFdvcmxkLmdlbmVyaWNMb2NhbEZ1bmN0aW9ucykgewogICAgICBpZiAoY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IEBwcmFnbWEgb24gbG9jYWwgZnVuY3Rpb25zIGFuZCB1c2UKICAgICAgICAgIC8vIHRoaXMgaGVyZSBpbnN0ZWFkIG9mIHRoZSBlbmNsb3NpbmcgbWVtYmVyLgogICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KGZ1bmN0aW9uLm1lbWJlckNvbnRleHQpCiAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgY2hlY2tGdW5jdGlvbigKICAgICAgICAgICAgZnVuY3Rpb24sIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0TG9jYWxGdW5jdGlvblR5cGUoZnVuY3Rpb24pKTsKICAgICAgfQogICAgfQoKICAgIEJhY2tlbmRVc2FnZSBiYWNrZW5kVXNhZ2UgPSBjbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2U7CiAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICAgIC8vLyBTZXQgdG8gYHRydWVgIGlmIHN1YmNsYXNzZXMgb2YgYE9iamVjdGAgbmVlZCBydW50aW1lVHlwZS4gVGhpcyBpcwogICAgLy8vIG9ubHkgdXNlZCB0byBzdG9wIHRoZSBjb21wdXRhdGlvbiBlYXJseS4KICAgIGJvb2wgbmVlZGVkT25BbGwgPSBmYWxzZTsKCiAgICAvLy8gU2V0IHRvIGB0cnVlYCBpZiBzdWJjbGFzc2VzIG9mIGBGdW5jdGlvbmAgbmVlZCBydW50aW1lVHlwZS4KICAgIGJvb2wgbmVlZGVkT25GdW5jdGlvbnMgPSBmYWxzZTsKCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXNEaXJlY3RseU5lZWRpbmdSdW50aW1lVHlwZSA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogICAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGltcGxpZWRDbGFzc2VzKERhcnRUeXBlIHR5cGUpIHsKICAgICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIHJldHVybiBbdHlwZS5lbGVtZW50XTsKICAgICAgfSBlbHNlIGlmICh0eXBlIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgICAgcmV0dXJuIFtjb21tb25FbGVtZW50cy5vYmplY3RDbGFzc107CiAgICAgIH0gZWxzZSBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbmNsdWRlIG9ubHkgcG90ZW50aWFsIGZ1bmN0aW9uIHR5cGUgc3VidHlwZXMuCiAgICAgICAgcmV0dXJuIFtjb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzXTsKICAgICAgfSBlbHNlIGlmICh0eXBlIGlzIFZvaWRUeXBlKSB7CiAgICAgICAgLy8gTm8gY2xhc3NlcyBpbXBsaWVkLgogICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlVmFyaWFibGUpIHsKICAgICAgICByZXR1cm4gaW1wbGllZENsYXNzZXModHlwZS5ib3VuZCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZSBpcyBGdXR1cmVPclR5cGUpIHsKICAgICAgICByZXR1cm4gW2NvbW1vbkVsZW1lbnRzLmZ1dHVyZUNsYXNzXQogICAgICAgICAgLi5hZGRBbGwoaW1wbGllZENsYXNzZXModHlwZS50eXBlQXJndW1lbnQpKTsKICAgICAgfSBlbHNlIGlmICh0eXBlIGlzIFR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYW4gd2UgZG8gYmV0dGVyPwogICAgICAgIHJldHVybiBpbXBsaWVkQ2xhc3NlcygKICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUeXBlVmFyaWFibGVCb3VuZCh0eXBlLmVsZW1lbnQpKTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5leHBlY3RlZCB0eXBlICR0eXBlJyk7CiAgICB9CgogICAgdm9pZCBhZGRDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgICAgY2xhc3Nlc0RpcmVjdGx5TmVlZGluZ1J1bnRpbWVUeXBlLmFkZChjbHMpOwogICAgICB9CiAgICAgIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpIHsKICAgICAgICBuZWVkZWRPbkFsbCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzKSB7CiAgICAgICAgbmVlZGVkT25GdW5jdGlvbnMgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgZm9yIChSdW50aW1lVHlwZVVzZSBydW50aW1lVHlwZVVzZSBpbiBiYWNrZW5kVXNhZ2UucnVudGltZVR5cGVVc2VzKSB7CiAgICAgIHN3aXRjaCAocnVudGltZVR5cGVVc2Uua2luZCkgewogICAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzoKICAgICAgICAgIGlmICghb3B0aW9ucy5sYXhSdW50aW1lVHlwZVRvU3RyaW5nKSB7CiAgICAgICAgICAgIGltcGxpZWRDbGFzc2VzKHJ1bnRpbWVUeXBlVXNlLnJlY2VpdmVyVHlwZSkuZm9yRWFjaChhZGRDbGFzcyk7CiAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOgogICAgICAgICAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHJlY2VpdmVyQ2xhc3NlcyA9CiAgICAgICAgICAgICAgaW1wbGllZENsYXNzZXMocnVudGltZVR5cGVVc2UucmVjZWl2ZXJUeXBlKTsKICAgICAgICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBhcmd1bWVudENsYXNzZXMgPQogICAgICAgICAgICAgIGltcGxpZWRDbGFzc2VzKHJ1bnRpbWVUeXBlVXNlLmFyZ3VtZW50VHlwZSk7CgogICAgICAgICAgZm9yIChDbGFzc0VudGl0eSByZWNlaXZlckNsYXNzIGluIHJlY2VpdmVyQ2xhc3NlcykgewogICAgICAgICAgICBmb3IgKENsYXNzRW50aXR5IGFyZ3VtZW50Q2xhc3MgaW4gYXJndW1lbnRDbGFzc2VzKSB7CiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3BlY2lhbCBjYXNlIHVzZSBvZiBgdGhpcy5ydW50aW1lVHlwZWAuCiAgICAgICAgICAgICAgU3ViY2xhc3NSZXN1bHQgcmVzdWx0ID0gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkKICAgICAgICAgICAgICAgICAgLmNvbW1vblN1YmNsYXNzZXMocmVjZWl2ZXJDbGFzcywgQ2xhc3NRdWVyeS5TVUJUWVBFLAogICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDbGFzcywgQ2xhc3NRdWVyeS5TVUJUWVBFKTsKICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5raW5kKSB7CiAgICAgICAgICAgICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5FTVBUWToKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5FWEFDVDE6CiAgICAgICAgICAgICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TVUJDTEFTUzE6CiAgICAgICAgICAgICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TVUJUWVBFMToKICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MocmVjZWl2ZXJDbGFzcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuRVhBQ1QyOgogICAgICAgICAgICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCQ0xBU1MyOgogICAgICAgICAgICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTI6CiAgICAgICAgICAgICAgICAgIGFkZENsYXNzKGFyZ3VtZW50Q2xhc3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNFVDoKICAgICAgICAgICAgICAgICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gcmVzdWx0LmNsYXNzZXMpIHsKICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyhjbHMpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZWVkZWRPbkFsbCkgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC51bmtub3duOgogICAgICAgICAgaW1wbGllZENsYXNzZXMocnVudGltZVR5cGVVc2UucmVjZWl2ZXJUeXBlKS5mb3JFYWNoKGFkZENsYXNzKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChuZWVkZWRPbkFsbCkgYnJlYWs7CiAgICB9CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGFsbENsYXNzZXNOZWVkaW5nUnVudGltZVR5cGU7CiAgICBpZiAobmVlZGVkT25BbGwpIHsKICAgICAgbmVlZGVkT25GdW5jdGlvbnMgPSB0cnVlOwogICAgICBhbGxDbGFzc2VzTmVlZGluZ1J1bnRpbWVUeXBlID0gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkKICAgICAgICAgIC5zdWJjbGFzc2VzT2YoY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpCiAgICAgICAgICAudG9TZXQoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFsbENsYXNzZXNOZWVkaW5nUnVudGltZVR5cGUgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHRoaXMgb3BlcmF0aW9uIGRpcmVjdGx5IGluCiAgICAgIC8vIFtDbG9zZWRXb3JsZF0gdXNpbmcgdGhlIFtDbGFzc1NldF1zLgogICAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBjbGFzc2VzRGlyZWN0bHlOZWVkaW5nUnVudGltZVR5cGUpIHsKICAgICAgICBpZiAoIWFsbENsYXNzZXNOZWVkaW5nUnVudGltZVR5cGUuY29udGFpbnMoY2xzKSkgewogICAgICAgICAgYWxsQ2xhc3Nlc05lZWRpbmdSdW50aW1lVHlwZQogICAgICAgICAgICAgIC5hZGRBbGwoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuc3VidHlwZXNPZihjbHMpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFsbENsYXNzZXNOZWVkaW5nUnVudGltZVR5cGUuZm9yRWFjaChwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKTsKICAgIGlmIChuZWVkZWRPbkZ1bmN0aW9ucykgewogICAgICBmb3IgKExvY2FsIGZ1bmN0aW9uIGluIGNsb3NlZFdvcmxkLmdlbmVyaWNMb2NhbEZ1bmN0aW9ucykgewogICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMoZnVuY3Rpb24pOwogICAgICB9CiAgICAgIGZvciAoTG9jYWwgZnVuY3Rpb24gaW4gbG9jYWxGdW5jdGlvbnMpIHsKICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRMb2NhbEZ1bmN0aW9uVHlwZShmdW5jdGlvbik7CiAgICAgICAgZnVuY3Rpb25UeXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKSB7CiAgICAgICAgICBFbnRpdHkgdHlwZURlY2xhcmF0aW9uID0gdHlwZVZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwogICAgICAgICAgaWYgKCFwcm9jZXNzZWRFbnRpdGllcy5jb250YWlucyh0eXBlRGVjbGFyYXRpb24pKSB7CiAgICAgICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHModHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBsb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmUuYWRkQWxsKGxvY2FsRnVuY3Rpb25zKTsKICAgICAgfQogICAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uCiAgICAgICAgICBpbiBjbG9zZWRXb3JsZC5jbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlcykgewogICAgICAgIG1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlLmFkZChmdW5jdGlvbik7CiAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyhmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcyk7CiAgICAgIH0KICAgIH0KCiAgICBTZXQ8U2VsZWN0b3I+IHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzID0gbmV3IFNldDxTZWxlY3Rvcj4oKTsKICAgIHR5cGVWYXJpYWJsZVRlc3RzCiAgICAgICAgLmZvckVhY2hBcHBsaWVkU2VsZWN0b3IoKFNlbGVjdG9yIHNlbGVjdG9yLCBTZXQ8RW50aXR5PiB0YXJnZXRzKSB7CiAgICAgIGZvciAoRW50aXR5IHRhcmdldCBpbiB0YXJnZXRzKSB7CiAgICAgICAgaWYgKG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyh0YXJnZXQpIHx8CiAgICAgICAgICAgIGxvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnModGFyZ2V0KSkgewogICAgICAgICAgc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHMuYWRkKHNlbGVjdG9yKTsKICAgICAgICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICAgICAgICBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50c0ZvclRlc3RpbmcgPz89CiAgICAgICAgICAgICAgICA8U2VsZWN0b3IsIFNldDxFbnRpdHk+Pnt9OwogICAgICAgICAgICBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50c0ZvclRlc3RpbmcKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChzZWxlY3RvciwgKCkgPT4gbmV3IFNldDxFbnRpdHk+KCkpCiAgICAgICAgICAgICAgICAuYWRkKHRhcmdldCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIFNldDxpbnQ+IGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMgPSBuZXcgU2V0PGludD4oKTsKICAgIHR5cGVWYXJpYWJsZVRlc3RzLmZvckVhY2hHZW5lcmljSW5zdGFudGlhdGlvbigKICAgICAgICAoR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbiwgU2V0PEVudGl0eT4gdGFyZ2V0cykgewogICAgICBmb3IgKEVudGl0eSB0YXJnZXQgaW4gdGFyZ2V0cykgewogICAgICAgIGlmIChtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnModGFyZ2V0KSB8fAogICAgICAgICAgICBsb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzLmNvbnRhaW5zKHRhcmdldCkpIHsKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIGluc3RhbnRpYXRlZAogICAgICAgICAgLy8gZXhwcmVzc2lvbi4KICAgICAgICAgIGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMKICAgICAgICAgICAgICAuYWRkKGluc3RhbnRpYXRpb24udHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgICAgICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgICAgICAgIGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHNGb3JUZXN0aW5nID8/PQogICAgICAgICAgICAgICAgPEdlbmVyaWNJbnN0YW50aWF0aW9uLCBTZXQ8RW50aXR5Pj57fTsKICAgICAgICAgICAgaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50c0ZvclRlc3RpbmcKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChpbnN0YW50aWF0aW9uLCAoKSA9PiBuZXcgU2V0PEVudGl0eT4oKSkKICAgICAgICAgICAgICAgIC5hZGQodGFyZ2V0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICB0eXBlVmFyaWFibGVUZXN0c0ZvclRlc3RpbmcgPSB0eXBlVmFyaWFibGVUZXN0czsKICAgIH0KCiAgICAvKnByaW50KHR5cGVWYXJpYWJsZVRlc3RzLmR1bXAoKSk7CiAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7CiAgICBwcmludCgnY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzOicpOwogICAgY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzLmZvckVhY2goKGUpID0+IHByaW50KCcgICRlJykpOwogICAgcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwogICAgcHJpbnQoJ21ldGhvZHNOZWVkaW5nU2lnbmF0dXJlOicpOwogICAgbWV0aG9kc05lZWRpbmdTaWduYXR1cmUuZm9yRWFjaCgoZSkgPT4gcHJpbnQoJyAgJGUnKSk7CiAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7CiAgICBwcmludCgnbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzOicpOwogICAgbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzLmZvckVhY2goKGUpID0+IHByaW50KCcgICRlJykpOwogICAgcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwogICAgcHJpbnQoJ2xvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZTonKTsKICAgIGxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZS5mb3JFYWNoKChlKSA9PiBwcmludCgnICAkZScpKTsKICAgIHByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIHByaW50KCdsb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzOicpOwogICAgbG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cy5mb3JFYWNoKChlKSA9PiBwcmludCgnICAkZScpKTsKICAgIHByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIHByaW50KCdzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50czonKTsKICAgIHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzLmZvckVhY2goKGUpID0+IHByaW50KCcgICRlJykpOwogICAgcHJpbnQoJ2luc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHM6ICcKICAgICAgICAnJGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMnKTsqLwoKICAgIHJldHVybiBuZXcgUnVudGltZVR5cGVzTmVlZEltcGwoCiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgICAgbWV0aG9kc05lZWRpbmdTaWduYXR1cmUsCiAgICAgICAgbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgIGxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZSwKICAgICAgICBsb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgIHNlbGVjdG9yc05l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aW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBLRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKCi8vLyBJbnRlcmZhY2UgZm9yIGNvbXB1dGluZyBuYXRpdmUgbWVtYmVycy4KYWJzdHJhY3QgY2xhc3MgTmF0aXZlTWVtYmVyUmVzb2x2ZXIgewogIC8vLyBDb21wdXRlcyB3aGV0aGVyIFtub2RlXSBpcyBuYXRpdmUgb3IgSnNJbnRlcm9wLgogIHZvaWQgcmVzb2x2ZU5hdGl2ZU1lbWJlcihpci5NZW1iZXIgbm9kZSwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSk7Cn0KCi8vLyBEZXRlcm1pbmVzIGFsbCBuYXRpdmUgY2xhc3NlcyBpbiBhIHNldCBvZiBsaWJyYXJpZXMuCmFic3RyYWN0IGNsYXNzIE5hdGl2ZUNsYXNzRmluZGVyIHsKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIGFsbCBuYXRpdmUgY2xhc3NlcyBkZWNsYXJlZCBpbiBbbGlicmFyaWVzXS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gY29tcHV0ZU5hdGl2ZUNsYXNzZXMoSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpOwp9CgpjbGFzcyBCYXNlTmF0aXZlQ2xhc3NGaW5kZXIgaW1wbGVtZW50cyBOYXRpdmVDbGFzc0ZpbmRlciB7CiAgZmluYWwgS0VsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlQmFzaWNEYXRhOwoKICBNYXA8U3RyaW5nLCBDbGFzc0VudGl0eT4gX3RhZ093bmVyID0gbmV3IE1hcDxTdHJpbmcsIENsYXNzRW50aXR5PigpOwoKICBCYXNlTmF0aXZlQ2xhc3NGaW5kZXIodGhpcy5fZWxlbWVudEVudmlyb25tZW50LCB0aGlzLl9uYXRpdmVCYXNpY0RhdGEpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gY29tcHV0ZU5hdGl2ZUNsYXNzZXMoSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpIHsKICAgIFNldDxDbGFzc0VudGl0eT4gbmF0aXZlQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICBsaWJyYXJpZXMuZm9yRWFjaCgodXJpKSA9PiBfcHJvY2Vzc05hdGl2ZUNsYXNzZXNJbkxpYnJhcnkoCiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMaWJyYXJ5KHVyaSksIG5hdGl2ZUNsYXNzZXMpKTsKICAgIF9wcm9jZXNzU3ViY2xhc3Nlc09mTmF0aXZlQ2xhc3NlcyhsaWJyYXJpZXMsIG5hdGl2ZUNsYXNzZXMpOwogICAgcmV0dXJuIG5hdGl2ZUNsYXNzZXM7CiAgfQoKICAvLy8gQWRkcyBhbGwgZGlyZWN0bHkgbmF0aXZlIGNsYXNzZXMgZGVjbGFyZWQgaW4gW2xpYnJhcnldIHRvIFtuYXRpdmVDbGFzc2VzXS4KICB2b2lkIF9wcm9jZXNzTmF0aXZlQ2xhc3Nlc0luTGlicmFyeSgKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTZXQ8Q2xhc3NFbnRpdHk+IG5hdGl2ZUNsYXNzZXMpIHsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzKGxpYnJhcnksIChDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgaWYgKF9uYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVDbGFzcyhjbHMpKSB7CiAgICAgICAgX3Byb2Nlc3NOYXRpdmVDbGFzcyhjbHMsIG5hdGl2ZUNsYXNzZXMpOwogICAgICB9CiAgICB9KTsKICB9CgogIC8vLyBBZGRzIFtjbHNdIHRvIFtuYXRpdmVDbGFzc2VzXSBhbmQgcGVyZm9ybXMgZnVydGhlciBwcm9jZXNzaW5nIG9mIFtjbHNdLAogIC8vLyBpZiBuZWNlc3NhcnkuCiAgdm9pZCBfcHJvY2Vzc05hdGl2ZUNsYXNzKAogICAgICBjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzLCBTZXQ8Q2xhc3NFbnRpdHk+IG5hdGl2ZUNsYXNzZXMpIHsKICAgIG5hdGl2ZUNsYXNzZXMuYWRkKGNscyk7CiAgICAvLyBKcyBJbnRlcm9wIGludGVyZmFjZXMgZG8gbm90IGhhdmUgdGFncy4KICAgIGlmIChfbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoY2xzKSkgcmV0dXJuOwogICAgLy8gU2luY2Ugd2UgbWFwIGZyb20gZGlzcGF0Y2ggdGFncyB0byBjbGFzc2VzLCBhIGRpc3BhdGNoIHRhZyBtdXN0IGJlIHVzZWQKICAgIC8vIG9uIG9ubHkgb25lIG5hdGl2ZSBjbGFzcy4KICAgIGZvciAoU3RyaW5nIHRhZyBpbiBfbmF0aXZlQmFzaWNEYXRhLmdldE5hdGl2ZVRhZ3NPZkNsYXNzKGNscykpIHsKICAgICAgQ2xhc3NFbnRpdHkgb3duZXIgPSBfdGFnT3duZXJbdGFnXTsKICAgICAgaWYgKG93bmVyICE9IG51bGwpIHsKICAgICAgICBpZiAob3duZXIgIT0gY2xzKSB7CiAgICAgICAgICBmYWlsZWRBdChjbHMsICJUYWcgJyR0YWcnIGFscmVhZHkgaW4gdXNlIGJ5ICcke293bmVyLm5hbWV9JyIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfdGFnT3duZXJbdGFnXSA9IGNsczsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHN1cGVyIGNsYXNzIG9mIFtjbHNdIG9yIGBudWxsYCBvZiBbY2xzXSBoYXMKICAvLy8gbm8gZXhwbGljaXQgc3VwZXJjbGFzcy4KICBTdHJpbmcgX2ZpbmRFeHRlbmRzTmFtZU9mQ2xhc3MoY292YXJpYW50IENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAuZ2V0U3VwZXJDbGFzcyhjbHMsIHNraXBVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbnM6IHRydWUpCiAgICAgICAgPy5uYW1lOwogIH0KCiAgLy8vIEFkZHMgYWxsIHN1YmNsYXNzZXMgb2YgW25hdGl2ZUNsYXNzZXNdIGZvdW5kIGluIFtsaWJyYXJpZXNdIHRvCiAgLy8vIFtuYXRpdmVDbGFzc2VzXS4KICB2b2lkIF9wcm9jZXNzU3ViY2xhc3Nlc09mTmF0aXZlQ2xhc3NlcygKICAgICAgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMsIFNldDxDbGFzc0VudGl0eT4gbmF0aXZlQ2xhc3NlcykgewogICAgU2V0PENsYXNzRW50aXR5PiBuYXRpdmVDbGFzc2VzQW5kU3ViY2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICAvLyBDb2xsZWN0IHBvdGVudGlhbCBzdWJjbGFzc2VzLCBlLmcuCiAgICAvLwogICAgLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBmb28uQSB7fQogICAgLy8KICAgIC8vIFN0cmluZyAiQSIgaGFzIGEgcG90ZW50aWFsIHN1YmNsYXNzIEIuCgogICAgTWFwPFN0cmluZywgU2V0PENsYXNzRW50aXR5Pj4gcG90ZW50aWFsRXh0ZW5kcyA9CiAgICAgICAgPFN0cmluZywgU2V0PENsYXNzRW50aXR5Pj57fTsKCiAgICBsaWJyYXJpZXMuZm9yRWFjaCgoVXJpIHVyaSkgewogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBfZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExpYnJhcnkodXJpKTsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3MobGlicmFyeSwgKENsYXNzRW50aXR5IGNscykgewogICAgICAgIFN0cmluZyBleHRlbmRzTmFtZSA9IF9maW5kRXh0ZW5kc05hbWVPZkNsYXNzKGNscyk7CiAgICAgICAgaWYgKGV4dGVuZHNOYW1lICE9IG51bGwpIHsKICAgICAgICAgIFNldDxDbGFzc0VudGl0eT4gcG90ZW50aWFsU3ViY2xhc3NlcyA9IHBvdGVudGlhbEV4dGVuZHMucHV0SWZBYnNlbnQoCiAgICAgICAgICAgICAgZXh0ZW5kc05hbWUsICgpID0+IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCkpOwogICAgICAgICAgcG90ZW50aWFsU3ViY2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgLy8gUmVzb2x2ZSBhbGwgdGhlIG5hdGl2ZSBjbGFzc2VzIGFuZCBhbnkgY2xhc3NlcyB0aGF0IG1pZ2h0IGV4dGVuZCB0aGVtIGluCiAgICAvLyBbcG90ZW50aWFsRXh0ZW5kc10sIGFuZCB0aGVuIGNoZWNrIHRoYXQgdGhlIHByb3Blcmx5IHJlc29sdmVkIGNsYXNzIGlzIGluCiAgICAvLyBmYWN0IGEgc3ViY2xhc3Mgb2YgYSBuYXRpdmUgY2xhc3MuCgogICAgQ2xhc3NFbnRpdHkgbmF0aXZlU3VwZXJjbGFzc09mKENsYXNzRW50aXR5IGNscykgewogICAgICBpZiAoX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKGNscykpIHJldHVybiBjbHM7CiAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgaWYgKHN1cGVyY2xhc3MgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBuYXRpdmVTdXBlcmNsYXNzT2Yoc3VwZXJjbGFzcyk7CiAgICB9CgogICAgdm9pZCB3YWxrUG90ZW50aWFsU3ViY2xhc3NlcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICAgIGlmIChuYXRpdmVDbGFzc2VzQW5kU3ViY2xhc3Nlcy5jb250YWlucyhlbGVtZW50KSkgcmV0dXJuOwogICAgICBDbGFzc0VudGl0eSBuYXRpdmVTdXBlcmNsYXNzID0gbmF0aXZlU3VwZXJjbGFzc09mKGVsZW1lbnQpOwogICAgICBpZiAobmF0aXZlU3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgICAgbmF0aXZlQ2xhc3Nlc0FuZFN1YmNsYXNzZXMuYWRkKGVsZW1lbnQpOwogICAgICAgIFNldDxDbGFzc0VudGl0eT4gcG90ZW50aWFsU3ViY2xhc3NlcyA9IHBvdGVudGlhbEV4dGVuZHNbZWxlbWVudC5uYW1lXTsKICAgICAgICBpZiAocG90ZW50aWFsU3ViY2xhc3NlcyAhPSBudWxsKSB7CiAgICAgICAgICBwb3RlbnRpYWxTdWJjbGFzc2VzLmZvckVhY2god2Fsa1BvdGVudGlhbFN1YmNsYXNzZXMpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIG5hdGl2ZUNsYXNzZXMuZm9yRWFjaCh3YWxrUG90ZW50aWFsU3ViY2xhc3Nlcyk7CiAgICBuYXRpdmVDbGFzc2VzLmFkZEFsbChuYXRpdmVDbGFzc2VzQW5kU3ViY2xhc3Nlcyk7CiAgfQp9CgovLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3ZhbHVlXSBpcyBuYW1lZCBhbm5vdGF0aW9uIGJhc2VkIG9uIFthbm5vdGF0aW9uQ2xhc3NdLgpib29sIGlzQW5ub3RhdGlvbigKICAgIFNwYW5uYWJsZSBzcGFubmFibGUsIENvbnN0YW50VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGFubm90YXRpb25DbGFzcykgewogIGlmICghdmFsdWUuaXNDb25zdHJ1Y3RlZE9iamVjdCkgcmV0dXJuIG51bGw7CiAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0cnVjdGVkT2JqZWN0ID0gdmFsdWU7CiAgcmV0dXJuIGNvbnN0cnVjdGVkT2JqZWN0LnR5cGUuZWxlbWVudCA9PSBhbm5vdGF0aW9uQ2xhc3M7Cn0KCi8vLyBFeHRyYWN0cyB0aGUgbmFtZSBpZiBbdmFsdWVdIGlzIGEgbmFtZWQgYW5ub3RhdGlvbiBiYXNlZCBvbgovLy8gW2Fubm90YXRpb25DbGFzc10sIG90aGVyd2lzZSByZXR1cm5zIGBudWxsYC4KU3RyaW5nIHJlYWRBbm5vdGF0aW9uTmFtZSgKICAgIFNwYW5uYWJsZSBzcGFubmFibGUsIENvbnN0YW50VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGFubm90YXRpb25DbGFzcywKICAgIHtTdHJpbmcgZGVmYXVsdFZhbHVlfSkgewogIGlmICghdmFsdWUuaXNDb25zdHJ1Y3RlZE9iamVjdCkgcmV0dXJuIG51bGw7CiAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0cnVjdGVkT2JqZWN0ID0gdmFsdWU7CiAgaWYgKGNvbnN0cnVjdGVkT2JqZWN0LnR5cGUuZWxlbWVudCAhPSBhbm5vdGF0aW9uQ2xhc3MpIHJldHVybiBudWxsOwoKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBmaWVsZHMgPSBjb25zdHJ1Y3RlZE9iamVjdC5maWVsZHMudmFsdWVzOwogIC8vIFRPRE8oc3JhKTogQmV0dGVyIHZhbGlkYXRpb24gb2YgdGhlIGNvbnN0YW50LgogIGlmIChmaWVsZHMubGVuZ3RoICE9IDEpIHsKICAgIGZhaWxlZEF0KAogICAgICAgIHNwYW5uYWJsZSwgJ0Fubm90YXRpb25zIG5lZWRzIG9uZSBzdHJpbmc6ICR7dmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpfScpOwogICAgcmV0dXJuIG51bGw7CiAgfSBlbHNlIGlmIChmaWVsZHMuc2luZ2xlIGlzIFN0cmluZ0NvbnN0YW50VmFsdWUpIHsKICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgc3BlY1N0cmluZ0NvbnN0YW50ID0gZmllbGRzLnNpbmdsZTsKICAgIHJldHVybiBzcGVjU3RyaW5nQ29uc3RhbnQuc3RyaW5nVmFsdWU7CiAgfSBlbHNlIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCAmJiBmaWVsZHMuc2luZ2xlIGlzIE51bGxDb25zdGFudFZhbHVlKSB7CiAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogIH0gZWxzZSB7CiAgICBmYWlsZWRBdCgKICAgICAgICBzcGFubmFibGUsICdBbm5vdGF0aW9ucyBuZWVkcyBvbmUgc3RyaW5nOiAke3ZhbHVlLnRvU3RydWN0dXJlZFRleHQoKX0nKTsKICAgIHJldHVybiBudWxsOwogIH0KfQqAqwBOTjwBKAEZOyMkISkBLCY2TQIBOSNFRwIBOzEqAUcBSgEMSD0/QUEaBAFRJz9CMTEICAQBThQcQxwvOE8hRSobHEkKDx4IBgQBSh4+H0AQBAFFFypBSioHJAcuATUmASJGRDsjTzooCgoIAVBRKgE2O0crLQYBOEBCJjFPK0AKCAYBNDYEAgFOE00vNjwCAUAxG0sdLzZGAUQzHA5RETU8K0sZCw5REQQCASlwYWNrYWdlOmNvbXBpbGVyL3NyYy9uYXRpdmUvcmVzb2x2ZXIuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwvZGVmZXJyZWRfbG9hZC5kYXJ0mhwvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBrZXJuZWwuZGVmZXJyZWRfbG9hZF9kYXRhOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci91dGlsLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwLmRhcnQnOwoKY2xhc3MgS2VybmVsRGVmZXJyZWRMb2FkVGFzayBleHRlbmRzIERlZmVycmVkTG9hZFRhc2sgewogIEtlcm5lbFRvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKICBNYXA8aXIuTGlicmFyeSwgU2V0PGlyLk5hbWVkTm9kZT4+IF9hZGRpdGlvbmFsRXhwb3J0c1NldHMgPQogICAgICA8aXIuTGlicmFyeSwgU2V0PGlyLk5hbWVkTm9kZT4+e307CgogIEtlcm5lbERlZmVycmVkTG9hZFRhc2soQ29tcGlsZXIgY29tcGlsZXIsIHRoaXMuX2VsZW1lbnRNYXApIDogc3VwZXIoY29tcGlsZXIpOwoKICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IF9maW5kSW1wb3J0c1RvKGlyLk5hbWVkTm9kZSBub2RlLCBTdHJpbmcgbm9kZU5hbWUsCiAgICAgIGlyLkxpYnJhcnkgZW5jbG9zaW5nTGlicmFyeSwgTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gbWVhc3VyZVN1YnRhc2soJ2ZpbmQtaW1wb3J0cycsICgpIHsKICAgICAgTGlzdDxJbXBvcnRFbnRpdHk+IGltcG9ydHMgPSBbXTsKICAgICAgaXIuTGlicmFyeSBzb3VyY2UgPSBfZWxlbWVudE1hcC5nZXRMaWJyYXJ5Tm9kZShsaWJyYXJ5KTsKICAgICAgaWYgKCFzb3VyY2UuZGVwZW5kZW5jaWVzLmFueSgoZCkgPT4gZC5pc0RlZmVycmVkKSkgcmV0dXJuIGNvbnN0IFtdOwogICAgICBmb3IgKGlyLkxpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgaW4gc291cmNlLmRlcGVuZGVuY2llcykgewogICAgICAgIGlmIChkZXBlbmRlbmN5LmlzRXhwb3J0KSBjb250aW51ZTsKICAgICAgICBpZiAoIV9pc1Zpc2libGUoZGVwZW5kZW5jeS5jb21iaW5hdG9ycywgbm9kZU5hbWUpKSBjb250aW51ZTsKICAgICAgICBpZiAoZW5jbG9zaW5nTGlicmFyeSA9PSBkZXBlbmRlbmN5LnRhcmdldExpYnJhcnkgfHwKICAgICAgICAgICAgYWRkaXRpb25hbEV4cG9ydHMoZGVwZW5kZW5jeS50YXJnZXRMaWJyYXJ5KS5jb250YWlucyhub2RlKSkgewogICAgICAgICAgaW1wb3J0cy5hZGQoX2VsZW1lbnRNYXAuZ2V0SW1wb3J0KGRlcGVuZGVuY3kpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGltcG9ydHM7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gY2xhc3NJbXBvcnRzVG8oCiAgICAgIENsYXNzRW50aXR5IGVsZW1lbnQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgaXIuQ2xhc3Mgbm9kZSA9IF9lbGVtZW50TWFwLmdldENsYXNzTm9kZShlbGVtZW50KTsKICAgIHJldHVybiBfZmluZEltcG9ydHNUbyhub2RlLCBub2RlLm5hbWUsIG5vZGUuZW5jbG9zaW5nTGlicmFyeSwgbGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IHR5cGVkZWZJbXBvcnRzVG8oCiAgICAgIFR5cGVkZWZFbnRpdHkgZWxlbWVudCwgTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICBpci5UeXBlZGVmIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRUeXBlZGVmTm9kZShlbGVtZW50KTsKICAgIHJldHVybiBfZmluZEltcG9ydHNUbyhub2RlLCBub2RlLm5hbWUsIG5vZGUuZW5jbG9zaW5nTGlicmFyeSwgbGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IG1lbWJlckltcG9ydHNUbygKICAgICAgRW50aXR5IGVsZW1lbnQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgaXIuTWVtYmVyIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKGVsZW1lbnQpOwogICAgcmV0dXJuIF9maW5kSW1wb3J0c1RvKAogICAgICAgIG5vZGUgaXMgaXIuQ29uc3RydWN0b3IgPyBub2RlLmVuY2xvc2luZ0NsYXNzIDogbm9kZSwKICAgICAgICBub2RlIGlzIGlyLkNvbnN0cnVjdG9yID8gbm9kZS5lbmNsb3NpbmdDbGFzcy5uYW1lIDogbm9kZS5uYW1lLm5hbWUsCiAgICAgICAgbm9kZS5lbmNsb3NpbmdMaWJyYXJ5LAogICAgICAgIGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjaGVja0ZvckRlZmVycmVkRXJyb3JDYXNlcyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIC8vIE5vdGhpbmcgdG8gZG8uIFRoZSBGRSBjaGVja3MgZm9yIGVycm9yIGNhc2VzIHVwZnJvbnQuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNvbGxlY3RDb25zdGFudHNGcm9tTWV0YWRhdGEoCiAgICAgIEVudGl0eSBlbGVtZW50LCBTZXQ8Q29uc3RhbnRWYWx1ZT4gY29uc3RhbnRzKSB7CiAgICAvLyBOb3RoaW5nIHRvIGRvLiBLZXJuZWwtcGlwZWxpbmUgZG9lc24ndCBzdXBwb3J0IG1pcnJvcnMsIHNvIHdlIGRvbid0IG5lZWQKICAgIC8vIHRvIHRyYWNrIGFueSBjb25zdGFudHMgZnJvbSBtZXRhLWRhdGEuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNvbGxlY3RDb25zdGFudHNJbkJvZHkoTWVtYmVyRW50aXR5IGVsZW1lbnQsIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpIHsKICAgIGlyLk1lbWJlciBub2RlID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShlbGVtZW50KTsKCiAgICAvLyBGZXRjaCB0aGUgaW50ZXJuYWwgbm9kZSBpbiBvcmRlciB0byBza2lwIGFubm90YXRpb25zIG9uIHRoZSBtZW1iZXIuCiAgICAvLyBUT0RPKHNpZ211bmQpOiByZXBsYWNlIHRoaXMgcGF0dGVybiB3aGVuIHRoZSBrZXJuZWwtYXN0IHByb3ZpZGVzIGEgYmV0dGVyCiAgICAvLyB3YXkgdG8gc2tpcCBhbm5vdGF0aW9ucyAoaXNzdWUgMzE1NjUpLgogICAgdmFyIHZpc2l0b3IgPSBuZXcgQ29uc3RhbnRDb2xsZWN0b3IoX2VsZW1lbnRNYXAsIGRlcGVuZGVuY2llcyk7CiAgICBpZiAobm9kZSBpcyBpci5GaWVsZCkgewogICAgICBub2RlLmluaXRpYWxpemVyPy5hY2NlcHQodmlzaXRvcik7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICBub2RlLmluaXRpYWxpemVycy5mb3JFYWNoKChpKSA9PiBpLmFjY2VwdCh2aXNpdG9yKSk7CiAgICB9CiAgICBub2RlLmZ1bmN0aW9uPy5hY2NlcHQodmlzaXRvcik7CiAgfQoKICBTZXQ8aXIuTmFtZWROb2RlPiBhZGRpdGlvbmFsRXhwb3J0cyhpci5MaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHJldHVybiBfYWRkaXRpb25hbEV4cG9ydHNTZXRzW2xpYnJhcnldID8/PSBuZXcgU2V0PGlyLk5hbWVkTm9kZT4uZnJvbSgKICAgICAgICBsaWJyYXJ5LmFkZGl0aW9uYWxFeHBvcnRzLm1hcCgoaXIuUmVmZXJlbmNlIHJlZikgPT4gcmVmLm5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYW51cCgpIHsKICAgIF9hZGRpdGlvbmFsRXhwb3J0c1NldHMgPSBudWxsOwogIH0KfQoKLy8vIFJldHVybnMgd2hldGhlciBbbmFtZV0gd291bGQgYmUgdmlzaWJsZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGxpc3Qgb2YKLy8vIHNob3cvaGlkZSBbY29tYmluYXRvcnNdLgpib29sIF9pc1Zpc2libGUoTGlzdDxpci5Db21iaW5hdG9yPiBjb21iaW5hdG9ycywgU3RyaW5nIG5hbWUpIHsKICBmb3IgKHZhciBjIGluIGNvbWJpbmF0b3JzKSB7CiAgICBpZiAoYy5pc1Nob3cgJiYgIWMubmFtZXMuY29udGFpbnMobmFtZSkpIHJldHVybiBmYWxzZTsKICAgIGlmIChjLmlzSGlkZSAmJiBjLm5hbWVzLmNvbnRhaW5zKG5hbWUpKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CgpjbGFzcyBDb25zdGFudENvbGxlY3RvciBleHRlbmRzIGlyLlJlY3Vyc2l2ZVZpc2l0b3IgewogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwogIGZpbmFsIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXM7CgogIENvbnN0YW50Q29sbGVjdG9yKHRoaXMuZWxlbWVudE1hcCwgdGhpcy5kZXBlbmRlbmNpZXMpOwoKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgdm9pZCBhZGQoaXIuRXhwcmVzc2lvbiBub2RlLCB7Ym9vbCByZXF1aXJlZDogdHJ1ZX0pIHsKICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPQogICAgICAgIGVsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlLCByZXF1aXJlQ29uc3RhbnQ6IHJlcXVpcmVkKTsKICAgIGlmIChjb25zdGFudCAhPSBudWxsKSB7CiAgICAgIGRlcGVuZGVuY2llcy5hZGRDb25zdGFudCgKICAgICAgICAgIGNvbnN0YW50LCBlbGVtZW50TWFwLmdldEltcG9ydChnZXREZWZlcnJlZEltcG9ydChub2RlKSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludExpdGVyYWwoaXIuSW50TGl0ZXJhbCBsaXRlcmFsKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG91YmxlTGl0ZXJhbChpci5Eb3VibGVMaXRlcmFsIGxpdGVyYWwpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sTGl0ZXJhbChpci5Cb29sTGl0ZXJhbCBsaXRlcmFsKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIGxpdGVyYWwpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbGl0ZXJhbCkgPT4gYWRkKGxpdGVyYWwpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TnVsbExpdGVyYWwoaXIuTnVsbExpdGVyYWwgbGl0ZXJhbCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIGxpdGVyYWwpIHsKICAgIGlmIChsaXRlcmFsLmlzQ29uc3QpIHsKICAgICAgYWRkKGxpdGVyYWwpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIudmlzaXRMaXN0TGl0ZXJhbChsaXRlcmFsKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRMaXRlcmFsKGlyLlNldExpdGVyYWwgbGl0ZXJhbCkgewogICAgaWYgKGxpdGVyYWwuaXNDb25zdCkgewogICAgICBhZGQobGl0ZXJhbCk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci52aXNpdFNldExpdGVyYWwobGl0ZXJhbCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIGxpdGVyYWwpIHsKICAgIGlmIChsaXRlcmFsLmlzQ29uc3QpIHsKICAgICAgYWRkKGxpdGVyYWwpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIudmlzaXRNYXBMaXRlcmFsKGxpdGVyYWwpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICBhZGQobm9kZSk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci52aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlUGFyYW1ldGVyKGlyLlR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgLy8gV2UgYXZvaWQgdmlzaXRpbmcgbWV0YWRhdGEgb24gdGhlIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLiBUaGUgYm91bmQKICAgIC8vIGNhbm5vdCBob2xkIGNvbnN0YW50cyBzbyB3ZSBza2lwIHRoYXQgYXMgd2VsbC4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgLy8gV2UgYXZvaWQgdmlzaXRpbmcgbWV0YWRhdGEgb24gdGhlIHBhcmFtZXRlciBkZWNsYXJhdGlvbiBieSBvbmx5IHZpc2l0aW5nCiAgICAvLyB0aGUgaW5pdGlhbGl6ZXIuIFRoZSB0eXBlIGNhbm5vdCBob2xkIGNvbnN0YW50cyBzbyBjYW4ga2FuIHNraXAgdGhhdAogICAgLy8gYXMgd2VsbC4KICAgIG5vZGUuaW5pdGlhbGl6ZXI/LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlTGl0ZXJhbChpci5UeXBlTGl0ZXJhbCBub2RlKSB7CiAgICBpZiAobm9kZS50eXBlIGlzISBpci5UeXBlUGFyYW1ldGVyVHlwZSkgYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbnRpYXRpb24oaXIuSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGUgQ0ZFIHNob3VsZCBtYXJrIGNvbnN0YW50IGluc3RhbnRpYXRpb25zIGFzCiAgICAvLyBjb25zdGFudC4KICAgIGFkZChub2RlLCByZXF1aXJlZDogZmFsc2UpOwogICAgc3VwZXIudmlzaXRJbnN0YW50aWF0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgYWRkKG5vZGUpOwogIH0KfQqA3wBOTjwBIwEoASIpIyAkGhsBOCI+KQFRAUw8Lyc/SkUrRTxKOgoIFggEAQwpNDdMBAEMKzY7TAQBDCovORs9TB8SBAEMOz0EAQwlNlAuBAEMUTkBS1EuRBwpDgYBIjsGJAQBPEtIBAEMEyMEAgFLHUAfOzoEDwIBNicjATkBQgE4HUYcIEQGBAEMMQEMNwEMMwEMNwEMRQEMMwEMMhsUDScGBAEMMBsUDSYGBAEMMBsUDSYGBAEMQxgRDS4GBAEMM082BAEMP1BMECQEAQwvNwQBDDNLESAkBAEMPQ8EAgEucGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2RlZmVycmVkX2xvYWQuZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwvZWxlbWVudF9tYXAuZGFydJwuLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEtDb21tb25FbGVtZW50cywgS0VsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwoKLy8vIEludGVyZmFjZSB0aGF0IHRyYW5zbGF0ZXMgYmV0d2VlbiBLZXJuZWwgSVIgbm9kZXMgYW5kIGVudGl0aWVzIHVzZWQgZm9yCi8vLyBjb21wdXRpbmcgdGhlIFtXb3JsZEltcGFjdF0gZm9yIG1lbWJlcnMuCmFic3RyYWN0IGNsYXNzIEtlcm5lbFRvRWxlbWVudE1hcCB7CiAgS0VsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50OwogIE5hdGl2ZUJhc2ljRGF0YSBnZXQgbmF0aXZlQmFzaWNEYXRhOwoKICAvLy8gQWNjZXNzIHRvIHRoZSBjb21tb25seSB1c2VkIGVsZW1lbnRzIGFuZCB0eXBlcy4KICBLQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzOwoKICAvLy8gQWNjZXNzIHRvIHRoZSBbRGFydFR5cGVzXSBvYmplY3QuCiAgRGFydFR5cGVzIGdldCB0eXBlczsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgZW52aXJvbm1lbnQgZm9yIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtb2RlbC4KICBpci5UeXBlRW52aXJvbm1lbnQgZ2V0IHR5cGVFbnZpcm9ubWVudDsKCiAgLy8vIFJldHVybnMgdGhlIGNsYXNzIGhpZXJhcmNoeSBmb3IgdGhlIHVuZGVybHlpbmcga2VybmVsIG1vZGVsLgogIGlyLkNsYXNzSGllcmFyY2h5IGdldCBjbGFzc0hpZXJhcmNoeTsKCiAgLy8vIFJldHVybnMgdGhlIFtEYXJ0VHlwZV0gY29ycmVzcG9uZGluZyB0byBbdHlwZV0uCiAgRGFydFR5cGUgZ2V0RGFydFR5cGUoaXIuRGFydFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbSW50ZXJmYWNlVHlwZV0gY29ycmVzcG9uZGluZyB0byBbdHlwZV0uCiAgSW50ZXJmYWNlVHlwZSBnZXRJbnRlcmZhY2VUeXBlKGlyLkludGVyZmFjZVR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbVHlwZVZhcmlhYmxlVHlwZV0gY29ycmVzcG9uZGluZyB0byBbdHlwZV0uCiAgVHlwZVZhcmlhYmxlVHlwZSBnZXRUeXBlVmFyaWFibGVUeXBlKGlyLlR5cGVQYXJhbWV0ZXJUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0Z1bmN0aW9uVHlwZV0gb2YgdGhlIFtub2RlXS4KICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybiB0aGUgW0ludGVyZmFjZVR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFtjbHNdIHdpdGggdGhlIGdpdmVuCiAgLy8vIFt0eXBlQXJndW1lbnRzXS4KICBJbnRlcmZhY2VUeXBlIGNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgIGlyLkNsYXNzIGNscywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ2FsbFN0cnVjdHVyZV0gY29ycmVzcG9uZGluZyB0byB0aGUgW2FyZ3VtZW50c10uCiAgQ2FsbFN0cnVjdHVyZSBnZXRDYWxsU3RydWN0dXJlKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgW1NlbGVjdG9yXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnZvY2F0aW9uIG9mIFtuYW1lXSB3aXRoCiAgLy8vIFthcmd1bWVudHNdLgogIFNlbGVjdG9yIGdldEludm9jYXRpb25TZWxlY3Rvcihpci5OYW1lIG5hbWUsIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsIGludCB0eXBlQXJndW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIFtNZW1iZXJFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1lbWJlciBbbm9kZV0uCiAgTWVtYmVyRW50aXR5IGdldE1lbWJlcihpci5NZW1iZXIgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRnVuY3Rpb25FbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb2NlZHVyZSBbbm9kZV0uCiAgRnVuY3Rpb25FbnRpdHkgZ2V0TWV0aG9kKGlyLlByb2NlZHVyZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDb25zdHJ1Y3RvckVudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgZ2VuZXJhdGl2ZSBvciBmYWN0b3J5CiAgLy8vIGNvbnN0cnVjdG9yIFtub2RlXS4KICBDb25zdHJ1Y3RvckVudGl0eSBnZXRDb25zdHJ1Y3Rvcihpci5NZW1iZXIgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRmllbGRFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpZWxkIFtub2RlXS4KICBGaWVsZEVudGl0eSBnZXRGaWVsZChpci5GaWVsZCBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDbGFzc0VudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgY2xhc3MgW25vZGVdLgogIENsYXNzRW50aXR5IGdldENsYXNzKGlyLkNsYXNzIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW1R5cGVkZWZUeXBlXSBjb3JyZXNwb25kaW5nIHRvIHJhdyB0eXBlIG9mIHRoZSB0eXBlZGVmIFtub2RlXS4KICBUeXBlZGVmVHlwZSBnZXRUeXBlZGVmVHlwZShpci5UeXBlZGVmIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgc3VwZXIgW01lbWJlckVudGl0eV0gZm9yIGEgc3VwZXIgaW52b2NhdGlvbiwgZ2V0IG9yIHNldCBvZgogIC8vLyBbbmFtZV0gZnJvbSB0aGUgbWVtYmVyIFtjb250ZXh0XS4KICBNZW1iZXJFbnRpdHkgZ2V0U3VwZXJNZW1iZXIoTWVtYmVyRW50aXR5IGNvbnRleHQsIGlyLk5hbWUgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pOwoKICAvLy8gUmV0dXJucyB0aGUgYG5vU3VjaE1ldGhvZGAgW0Z1bmN0aW9uRW50aXR5XSBjYWxsIGZyb20gYQogIC8vLyBgc3VwZXIubm9TdWNoTWV0aG9kYCBpbnZvY2F0aW9uIHdpdGhpbiBbY2xzXS4KICBGdW5jdGlvbkVudGl0eSBnZXRTdXBlck5vU3VjaE1ldGhvZChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgW05hbWVdIGNvcnJlc3BvbmRpbmcgdG8gW25hbWVdLgogIE5hbWUgZ2V0TmFtZShpci5OYW1lIG5hbWUpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtOYXRpdmVCZWhhdmlvcl0gZm9yIGEgY2FsbCB0byB0aGUgW0pTXSBmdW5jdGlvbi4KICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckpzQ2FsbChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtOYXRpdmVCZWhhdmlvcl0gZm9yIGEgY2FsbCB0byB0aGUgW0pTX0JVSUxUSU5dCiAgLy8vIGZ1bmN0aW9uLgogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNCdWlsdGluQ2FsbChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtOYXRpdmVCZWhhdmlvcl0gZm9yIGEgY2FsbCB0byB0aGUKICAvLy8gW0pTX0VNQkVEREVEX0dMT0JBTF0gZnVuY3Rpb24uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0VtYmVkZGVkR2xvYmFsQ2FsbCgKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtqcy5OYW1lXSBmb3IgdGhlIGBKc0dldE5hbWVgIFtjb25zdGFudF0gdmFsdWUuCiAganMuTmFtZSBnZXROYW1lRm9ySnNHZXROYW1lKENvbnN0YW50VmFsdWUgY29uc3RhbnQsIE5hbWVyIG5hbWVyKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbQ29uc3RhbnRWYWx1ZV0gZm9yIHRoZSBjb25zdGFudCBbZXhwcmVzc2lvbl0uCiAgQ29uc3RhbnRWYWx1ZSBnZXRDb25zdGFudFZhbHVlKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAge2Jvb2wgcmVxdWlyZUNvbnN0YW50OiB0cnVlLCBib29sIGltcGxpY2l0TnVsbDogZmFsc2V9KTsKCiAgLy8vIFJldHVybiB0aGUgW0ltcG9ydEVudGl0eV0gY29ycmVzcG9uZGluZyB0byBbbm9kZV0uCiAgSW1wb3J0RW50aXR5IGdldEltcG9ydChpci5MaWJyYXJ5RGVwZW5kZW5jeSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIGRlZmluaW5nIG5vZGUgZm9yIFtjbHNdLgogIGlyLkNsYXNzIGdldENsYXNzTm9kZShjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIEFkZHMgbGlicmFyaWVzIGluIFtjb21wb25lbnRdIHRvIHRoZSBzZXQgb2YgbGlicmFyaWVzLgogIC8vLwogIC8vLyBUaGUgbWFpbiBtZXRob2Qgb2YgdGhlIGZpcnN0IGNvbXBvbmVudCBpcyB1c2VkIGFzIHRoZSBtYWluIG1ldGhvZCBmb3IgdGhlCiAgLy8vIGNvbXBpbGF0aW9uLgogIHZvaWQgYWRkQ29tcG9uZW50KGlyLkNvbXBvbmVudCBjb21wb25lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbnN0cnVjdG9yRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIGEgc3VwZXIgaW5pdGlhbGl6ZXIgaW4KICAvLy8gW2NvbnN0cnVjdG9yXS4KICAvLy8KICAvLy8gVGhlIElSIHJlc29sdmVzIHN1cGVyIGluaXRpYWxpemVycyB0byBhIFt0YXJnZXRdIHVwIGluIHRoZSB0eXBlIGhpZXJhcmNoeS4KICAvLy8gTW9zdCBvZiB0aGUgdGltZSwgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIGVudGl0eQogIC8vLyBjb3JyZXNwb25kaW5nIHRvIHRoYXQgdGFyZ2V0LiBJbiB0aGUgcHJlc2VuY2Ugb2YgdW5uYW1lZCBtaXhpbnMsIHRoaXMKICAvLy8gZnVuY3Rpb24gcmV0dXJucyBhbiBlbnRpdHkgZm9yIGFuIGludGVybWVkaWF0ZSBzeW50aGV0aWMgY29uc3RydWN0b3IgdGhhdAogIC8vLyBrZXJuZWwgZG9lc24ndCBleHBsaWNpdGx5IHJlcHJlc2VudC4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGU6CiAgLy8vICAgICBjbGFzcyBNIHt9CiAgLy8vICAgICBjbGFzcyBDIGV4dGVuZHMgT2JqZWN0IHdpdGggTSB7fQogIC8vLwogIC8vLyBLZXJuZWwgd2lsbCBzYXkgdGhhdCBDKCkncyBzdXBlciBpbml0aWFsaXplciByZXNvbHZlcyB0byBPYmplY3QoKSwgYnV0CiAgLy8vIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZW50aXR5IHJlcHJlc2VudGluZyB0aGUgdW5uYW1lZCBtaXhpbgogIC8vLyBhcHBsaWNhdGlvbiAiT2JqZWN0K00iJ3MgY29uc3RydWN0b3IuCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0U3VwZXJDb25zdHJ1Y3RvcigKICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIGlyLk1lbWJlciB0YXJnZXQpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIG5hdGl2ZSBiZWhhdmlvciBmb3IgcmVhZGluZyB0aGUgbmF0aXZlIFtmaWVsZF0uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZExvYWQoaXIuRmllbGQgZmllbGQsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLCBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucywKICAgICAge2Jvb2wgaXNKc0ludGVyb3B9KTsKCiAgLy8vIENvbXB1dGVzIHRoZSBuYXRpdmUgYmVoYXZpb3IgZm9yIHdyaXRpbmcgdG8gdGhlIG5hdGl2ZSBbZmllbGRdLgogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRTdG9yZShpci5GaWVsZCBmaWVsZCk7CgogIC8vLyBDb21wdXRlcyB0aGUgbmF0aXZlIGJlaGF2aW9yIGZvciBjYWxsaW5nIHRoZSBmdW5jdGlvbiBvciBjb25zdHJ1Y3RvcgogIC8vLyBbbWVtYmVyXS4KICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvck1ldGhvZChpci5NZW1iZXIgbWVtYmVyLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgIHtib29sIGlzSnNJbnRlcm9wfSk7CgogIC8vLyBDb21wdXRlIHRoZSBraW5kIG9mIGZvcmVpZ24gaGVscGVyIGZ1bmN0aW9uIGNhbGxlZCBieSBbbm9kZV0sIGlmIGFueS4KICBGb3JlaWduS2luZCBnZXRGb3JlaWduS2luZChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtJbnRlcmZhY2VUeXBlXSByZWZlcmVuY2VkIGJ5IGEgY2FsbCB0byB0aGUKICAvLy8gW0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UXSBmdW5jdGlvbiwgaWYgYW55LgogIEludGVyZmFjZVR5cGUgZ2V0SW50ZXJmYWNlVHlwZUZvckpzSW50ZXJjZXB0b3JDYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTG9jYWxdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvY2FsIGZ1bmN0aW9uIFtub2RlXS4KICBMb2NhbCBnZXRMb2NhbEZ1bmN0aW9uKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbaXIuTGlicmFyeV0gY29ycmVzcG9uZGluZyB0byBbbGlicmFyeV0uCiAgaXIuTGlicmFyeSBnZXRMaWJyYXJ5Tm9kZShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICAvLy8gUmV0dXJucyB0aGUgbm9kZSB0aGF0IGRlZmluZXMgW3R5cGVkZWZdLgogIGlyLlR5cGVkZWYgZ2V0VHlwZWRlZk5vZGUoY292YXJpYW50IFR5cGVkZWZFbnRpdHkgdHlwZWRlZik7CgogIC8vLyBSZXR1cm5zIHRoZSBkZWZpbmluZyBub2RlIGZvciBbbWVtYmVyXS4KICBpci5NZW1iZXIgZ2V0TWVtYmVyTm9kZShjb3ZhcmlhbnQgTWVtYmVyRW50aXR5IG1lbWJlcik7Cn0KCi8vLyBLaW5kcyBvZiBmb3JlaWduIGZ1bmN0aW9ucy4KZW51bSBGb3JlaWduS2luZCB7CiAgSlMsCiAgSlNfQlVJTFRJTiwKICBKU19FTUJFRERFRF9HTE9CQUwsCiAgSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQsCiAgTk9ORSwKfQqAvABOTjwBKDQ1ASNMJCEhHiMpIiokAUwtJC4nATYmASgXAUQqAUMoATYqATs5AT5DATA2AUsXJTYBRDoBTBNINwFFKgFKLwFRGjQBQycBQycBUS8BTShCHQE+NDgBMh4BRUcBQxBOATYlOyEBQkQBQjs/ATk1ASs0AT0GUBMtAU4VBlFHTFArBhMVKwZNSSwpNQFDP1AbAUZBAUsQPlAbAUw4AT8yUAFGMQE7NAEvPgEuOgIBIBMGDhYbCAIBLHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9lbGVtZW50X21hcC5kYXJ0OnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9lbGVtZW50X21hcF9pbXBsLmRhcnTAATOhLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5rZXJuZWwuZWxlbWVudF9tYXA7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29tcGlsZV90aW1lX2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RydWN0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9ldmFsdWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2luZGV4ZWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vZW52aXJvbm1lbnQuZGFydCc7CmltcG9ydCAnLi4vZnJvbnRlbmRfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vaXIvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vaXIvY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2RlYnVnLmRhcnQnOwppbXBvcnQgJy4uL2lyL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2lyL2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICcuLi9pci9pbXBhY3RfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZV9jYWNoZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zY29wZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci92aXNpdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9pci91dGlsLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbm9fc3VjaF9tZXRob2RfcmVnaXN0cnkuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvbG9jYWxzLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9kYXJ0MmpzX3RhcmdldC5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL3Jlc29sdmVyLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vb3JkZXJlZF90eXBlc2V0LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKCmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnZW52LmRhcnQnOwppbXBvcnQgJ2tlbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICdrZXJuZWxfaW1wYWN0LmRhcnQnOwoKcGFydCAnbmF0aXZlX2Jhc2ljX2RhdGEuZGFydCc7CnBhcnQgJ25vX3N1Y2hfbWV0aG9kX3Jlc29sdmVyLmRhcnQnOwoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtLZXJuZWxUb0VsZW1lbnRNYXBdIHRoYXQgb25seSBzdXBwb3J0cyB3b3JsZAovLy8gaW1wYWN0IGNvbXB1dGF0aW9uLgpjbGFzcyBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGltcGxlbWVudHMgS2VybmVsVG9FbGVtZW50TWFwLCBJclRvRWxlbWVudE1hcCB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7CiAgQG92ZXJyaWRlCiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyOwogIGZpbmFsIEVudmlyb25tZW50IF9lbnZpcm9ubWVudDsKICBDb21tb25FbGVtZW50c0ltcGwgX2NvbW1vbkVsZW1lbnRzOwogIEtlcm5lbEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIERhcnRUeXBlQ29udmVydGVyIF90eXBlQ29udmVydGVyOwogIEtlcm5lbENvbnN0YW50RW52aXJvbm1lbnQgX2NvbnN0YW50RW52aXJvbm1lbnQ7CiAgS2VybmVsRGFydFR5cGVzIF90eXBlczsKICBpci5UeXBlRW52aXJvbm1lbnQgX3R5cGVFbnZpcm9ubWVudDsKICBpci5DbGFzc0hpZXJhcmNoeSBfY2xhc3NIaWVyYXJjaHk7CiAgRGFydDJqc0NvbnN0YW50RXZhbHVhdG9yIF9jb25zdGFudEV2YWx1YXRvcjsKICBDb25zdGFudFZhbHVlZmllciBfY29uc3RhbnRWYWx1ZWZpZXI7CgogIC8vLyBMaWJyYXJ5IGVudmlyb25tZW50LiBVc2VkIGZvciBmYXN0IGxvb2t1cC4KICBLUHJvZ3JhbUVudiBlbnYgPSBuZXcgS1Byb2dyYW1FbnYoKTsKCiAgZmluYWwgRW50aXR5RGF0YUVudk1hcDxJbmRleGVkTGlicmFyeSwgS0xpYnJhcnlEYXRhLCBLTGlicmFyeUVudj4gbGlicmFyaWVzID0KICAgICAgbmV3IEVudGl0eURhdGFFbnZNYXA8SW5kZXhlZExpYnJhcnksIEtMaWJyYXJ5RGF0YSwgS0xpYnJhcnlFbnY+KCk7CiAgZmluYWwgRW50aXR5RGF0YUVudk1hcDxJbmRleGVkQ2xhc3MsIEtDbGFzc0RhdGEsIEtDbGFzc0Vudj4gY2xhc3NlcyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhRW52TWFwPEluZGV4ZWRDbGFzcywgS0NsYXNzRGF0YSwgS0NsYXNzRW52PigpOwogIGZpbmFsIEVudGl0eURhdGFNYXA8SW5kZXhlZE1lbWJlciwgS01lbWJlckRhdGE+IG1lbWJlcnMgPQogICAgICBuZXcgRW50aXR5RGF0YU1hcDxJbmRleGVkTWVtYmVyLCBLTWVtYmVyRGF0YT4oKTsKICBmaW5hbCBFbnRpdHlEYXRhTWFwPEluZGV4ZWRUeXBlVmFyaWFibGUsIEtUeXBlVmFyaWFibGVEYXRhPiB0eXBlVmFyaWFibGVzID0KICAgICAgbmV3IEVudGl0eURhdGFNYXA8SW5kZXhlZFR5cGVWYXJpYWJsZSwgS1R5cGVWYXJpYWJsZURhdGE+KCk7CiAgZmluYWwgRW50aXR5RGF0YU1hcDxJbmRleGVkVHlwZWRlZiwgS1R5cGVkZWZEYXRhPiB0eXBlZGVmcyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhTWFwPEluZGV4ZWRUeXBlZGVmLCBLVHlwZWRlZkRhdGE+KCk7CgogIC8vLyBTZXQgdG8gYHRydWVgIGJlZm9yZSBjcmVhdGluZyB0aGUgSi1Xb3JsZCBmcm9tIHRoZSBLLVdvcmxkIHRvIGFzc2VydCB0aGF0CiAgLy8vIG5vIGVudGl0aWVzIGFyZSBjcmVhdGVkIGxhdGUuCiAgYm9vbCBlbnZJc0Nsb3NlZCA9IGZhbHNlOwoKICBmaW5hbCBNYXA8aXIuTGlicmFyeSwgSW5kZXhlZExpYnJhcnk+IGxpYnJhcnlNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuQ2xhc3MsIEluZGV4ZWRDbGFzcz4gY2xhc3NNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuVHlwZWRlZiwgSW5kZXhlZFR5cGVkZWY+IHR5cGVkZWZNYXAgPSB7fTsKCiAgLy8vIE1hcCBmcm9tIFtpci5UeXBlUGFyYW1ldGVyXSBub2RlcyB0byB0aGUgY29ycmVzcG9uZGluZwogIC8vLyBbVHlwZVZhcmlhYmxlRW50aXR5XS4KICAvLy8KICAvLy8gTm9ybWFsbHkgdGhlIHR5cGUgdmFyaWFibGVzIGFyZSBbSW5kZXhlZFR5cGVWYXJpYWJsZV1zLCBidXQgZm9yIHR5cGUKICAvLy8gcGFyYW1ldGVycyBvbiBsb2NhbCBmdW5jdGlvbiAoaW4gdGhlIGZyb250ZW5kKSB0aGVzZSBhcmUgX25vdF8gc2luY2UKICAvLy8gdGhlaXIgdHlwZSBkZWNsYXJhdGlvbiBpcyBuZWl0aGVyIGEgY2xhc3Mgbm9yIGEgbWVtYmVyLiBJbiB0aGUgYmFja2VuZCwKICAvLy8gdGhlc2UgdHlwZSBwYXJhbWV0ZXJzIGJlbG9uZyB0byB0aGUgY2FsbC1tZXRob2QgYW5kIGFyZSB0aGVyZWZvcmUgaW5kZXhlZC4KICBmaW5hbCBNYXA8aXIuVHlwZVBhcmFtZXRlciwgVHlwZVZhcmlhYmxlRW50aXR5PiB0eXBlVmFyaWFibGVNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuTWVtYmVyLCBJbmRleGVkQ29uc3RydWN0b3I+IGNvbnN0cnVjdG9yTWFwID0ge307CiAgZmluYWwgTWFwPGlyLlByb2NlZHVyZSwgSW5kZXhlZEZ1bmN0aW9uPiBtZXRob2RNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuRmllbGQsIEluZGV4ZWRGaWVsZD4gZmllbGRNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIExvY2FsPiBsb2NhbEZ1bmN0aW9uTWFwID0ge307CgogIEJlaGF2aW9yQnVpbGRlciBfbmF0aXZlQmVoYXZpb3JCdWlsZGVyOwogIEZyb250ZW5kU3RyYXRlZ3kgX2Zyb250ZW5kU3RyYXRlZ3k7CgogIE1hcDxLTWVtYmVyLCBNYXA8aXIuRXhwcmVzc2lvbiwgVHlwZU1hcD4+IHR5cGVNYXBzRm9yVGVzdGluZzsKCiAgS2VybmVsVG9FbGVtZW50TWFwSW1wbCgKICAgICAgdGhpcy5yZXBvcnRlciwgdGhpcy5fZW52aXJvbm1lbnQsIHRoaXMuX2Zyb250ZW5kU3RyYXRlZ3ksIHRoaXMub3B0aW9ucykgewogICAgX2VsZW1lbnRFbnZpcm9ubWVudCA9IG5ldyBLZXJuZWxFbGVtZW50RW52aXJvbm1lbnQodGhpcyk7CiAgICBfY29tbW9uRWxlbWVudHMgPSBuZXcgQ29tbW9uRWxlbWVudHNJbXBsKF9lbGVtZW50RW52aXJvbm1lbnQsIG9wdGlvbnMpOwogICAgX2NvbnN0YW50RW52aXJvbm1lbnQgPSBuZXcgS2VybmVsQ29uc3RhbnRFbnZpcm9ubWVudCh0aGlzLCBfZW52aXJvbm1lbnQpOwogICAgX3R5cGVDb252ZXJ0ZXIgPSBuZXcgRGFydFR5cGVDb252ZXJ0ZXIodGhpcyk7CiAgICBfdHlwZXMgPSBuZXcgS2VybmVsRGFydFR5cGVzKHRoaXMpOwogICAgX2NvbnN0YW50VmFsdWVmaWVyID0gbmV3IENvbnN0YW50VmFsdWVmaWVyKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGVzIGdldCB0eXBlcyA9PiBfdHlwZXM7CgogIEBvdmVycmlkZQogIEtlcm5lbEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50ID0+IF9lbGVtZW50RW52aXJvbm1lbnQ7CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzSW1wbCBnZXQgY29tbW9uRWxlbWVudHMgPT4gX2NvbW1vbkVsZW1lbnRzOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgX21haW5GdW5jdGlvbiB7CiAgICByZXR1cm4gZW52Lm1haW5NZXRob2QgIT0gbnVsbCA/IGdldE1ldGhvZEludGVybmFsKGVudi5tYWluTWV0aG9kKSA6IG51bGw7CiAgfQoKICBMaWJyYXJ5RW50aXR5IGdldCBfbWFpbkxpYnJhcnkgewogICAgcmV0dXJuIGVudi5tYWluTWV0aG9kICE9IG51bGwKICAgICAgICA/IGdldExpYnJhcnlJbnRlcm5hbChlbnYubWFpbk1ldGhvZC5lbmNsb3NpbmdMaWJyYXJ5KQogICAgICAgIDogbnVsbDsKICB9CgogIFNvdXJjZVNwYW4gZ2V0U291cmNlU3BhbihTcGFubmFibGUgc3Bhbm5hYmxlLCBFbnRpdHkgY3VycmVudEVsZW1lbnQpIHsKICAgIFNvdXJjZVNwYW4gZnJvbVNwYW5uYWJsZShTcGFubmFibGUgc3Bhbm5hYmxlKSB7CiAgICAgIGlmIChzcGFubmFibGUgaXMgSW5kZXhlZExpYnJhcnkgJiYKICAgICAgICAgIHNwYW5uYWJsZS5saWJyYXJ5SW5kZXggPCBsaWJyYXJpZXMubGVuZ3RoKSB7CiAgICAgICAgS0xpYnJhcnlFbnYgZW52ID0gbGlicmFyaWVzLmdldEVudihzcGFubmFibGUpOwogICAgICAgIHJldHVybiBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShlbnYubGlicmFyeSk7CiAgICAgIH0gZWxzZSBpZiAoc3Bhbm5hYmxlIGlzIEluZGV4ZWRDbGFzcyAmJgogICAgICAgICAgc3Bhbm5hYmxlLmNsYXNzSW5kZXggPCBjbGFzc2VzLmxlbmd0aCkgewogICAgICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShzcGFubmFibGUpOwogICAgICAgIGFzc2VydChkYXRhICE9IG51bGwsICJObyBkYXRhIGZvciAkc3Bhbm5hYmxlIGluICR0aGlzIik7CiAgICAgICAgcmV0dXJuIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGRhdGEubm9kZSk7CiAgICAgIH0gZWxzZSBpZiAoc3Bhbm5hYmxlIGlzIEluZGV4ZWRNZW1iZXIgJiYKICAgICAgICAgIHNwYW5uYWJsZS5tZW1iZXJJbmRleCA8IG1lbWJlcnMubGVuZ3RoKSB7CiAgICAgICAgS01lbWJlckRhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShzcGFubmFibGUpOwogICAgICAgIGFzc2VydChkYXRhICE9IG51bGwsICJObyBkYXRhIGZvciAkc3Bhbm5hYmxlIGluICR0aGlzIik7CiAgICAgICAgcmV0dXJuIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGRhdGEubm9kZSk7CiAgICAgIH0gZWxzZSBpZiAoc3Bhbm5hYmxlIGlzIEtMb2NhbEZ1bmN0aW9uKSB7CiAgICAgICAgcmV0dXJuIGdldFNvdXJjZVNwYW4oc3Bhbm5hYmxlLm1lbWJlckNvbnRleHQsIGN1cnJlbnRFbGVtZW50KTsKICAgICAgfSBlbHNlIGlmIChzcGFubmFibGUgaXMgSkxvY2FsKSB7CiAgICAgICAgcmV0dXJuIGdldFNvdXJjZVNwYW4oc3Bhbm5hYmxlLm1lbWJlckNvbnRleHQsIGN1cnJlbnRFbGVtZW50KTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBTb3VyY2VTcGFuIHNvdXJjZVNwYW4gPSBmcm9tU3Bhbm5hYmxlKHNwYW5uYWJsZSk7CiAgICBzb3VyY2VTcGFuID8/PSBmcm9tU3Bhbm5hYmxlKGN1cnJlbnRFbGVtZW50KTsKICAgIHJldHVybiBzb3VyY2VTcGFuOwogIH0KCiAgTGlicmFyeUVudGl0eSBsb29rdXBMaWJyYXJ5KFVyaSB1cmkpIHsKICAgIEtMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBlbnYubG9va3VwTGlicmFyeSh1cmkpOwogICAgaWYgKGxpYnJhcnlFbnYgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gZ2V0TGlicmFyeUludGVybmFsKGxpYnJhcnlFbnYubGlicmFyeSwgbGlicmFyeUVudik7CiAgfQoKICBTdHJpbmcgX2dldExpYnJhcnlOYW1lKEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShsaWJyYXJ5KSk7CiAgICBLTGlicmFyeUVudiBsaWJyYXJ5RW52ID0gbGlicmFyaWVzLmdldEVudihsaWJyYXJ5KTsKICAgIHJldHVybiBsaWJyYXJ5RW52LmxpYnJhcnkubmFtZSA/PyAnJzsKICB9CgogIE1lbWJlckVudGl0eSBsb29rdXBMaWJyYXJ5TWVtYmVyKEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEtMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBsaWJyYXJpZXMuZ2V0RW52KGxpYnJhcnkpOwogICAgaXIuTWVtYmVyIG1lbWJlciA9IGxpYnJhcnlFbnYubG9va3VwTWVtYmVyKG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICAgIHJldHVybiBtZW1iZXIgIT0gbnVsbCA/IGdldE1lbWJlcihtZW1iZXIpIDogbnVsbDsKICB9CgogIHZvaWQgX2ZvckVhY2hMaWJyYXJ5TWVtYmVyKAogICAgICBJbmRleGVkTGlicmFyeSBsaWJyYXJ5LCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShsaWJyYXJ5KSk7CiAgICBLTGlicmFyeUVudiBsaWJyYXJ5RW52ID0gbGlicmFyaWVzLmdldEVudihsaWJyYXJ5KTsKICAgIGxpYnJhcnlFbnYuZm9yRWFjaE1lbWJlcigoaXIuTWVtYmVyIG5vZGUpIHsKICAgICAgZihnZXRNZW1iZXIobm9kZSkpOwogICAgfSk7CiAgfQoKICBDbGFzc0VudGl0eSBsb29rdXBDbGFzcyhJbmRleGVkTGlicmFyeSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEtMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBsaWJyYXJpZXMuZ2V0RW52KGxpYnJhcnkpOwogICAgS0NsYXNzRW52IGNsYXNzRW52ID0gbGlicmFyeUVudi5sb29rdXBDbGFzcyhuYW1lKTsKICAgIGlmIChjbGFzc0VudiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBnZXRDbGFzc0ludGVybmFsKGNsYXNzRW52LmNscywgY2xhc3NFbnYpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIF9mb3JFYWNoQ2xhc3MoSW5kZXhlZExpYnJhcnkgbGlicmFyeSwgdm9pZCBmKENsYXNzRW50aXR5IGNscykpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShsaWJyYXJ5KSk7CiAgICBLTGlicmFyeUVudiBsaWJyYXJ5RW52ID0gbGlicmFyaWVzLmdldEVudihsaWJyYXJ5KTsKICAgIGxpYnJhcnlFbnYuZm9yRWFjaENsYXNzKChLQ2xhc3NFbnYgY2xhc3NFbnYpIHsKICAgICAgaWYgKCFjbGFzc0Vudi5pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgZihnZXRDbGFzc0ludGVybmFsKGNsYXNzRW52LmNscywgY2xhc3NFbnYpKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIGVuc3VyZUNsYXNzTWVtYmVycyhpci5DbGFzcyBub2RlKSB7CiAgICBjbGFzc2VzLmdldEVudihnZXRDbGFzc0ludGVybmFsKG5vZGUpKS5lbnN1cmVNZW1iZXJzKHRoaXMpOwogIH0KCiAgTWVtYmVyRW50aXR5IGxvb2t1cENsYXNzTWVtYmVyKEluZGV4ZWRDbGFzcyBjbHMsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRW52IGNsYXNzRW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIHJldHVybiBjbGFzc0Vudi5sb29rdXBNZW1iZXIodGhpcywgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogIH0KCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoSW5kZXhlZENsYXNzIGNscywgU3RyaW5nIG5hbWUpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0VudiBjbGFzc0VudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICByZXR1cm4gY2xhc3NFbnYubG9va3VwQ29uc3RydWN0b3IodGhpcywgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgIGlyLkNsYXNzIGNscywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGdldENsYXNzKGNscyksIGdldERhcnRUeXBlcyh0eXBlQXJndW1lbnRzKSk7CiAgfQoKICBMaWJyYXJ5RW50aXR5IGdldExpYnJhcnkoaXIuTGlicmFyeSBub2RlKSA9PiBnZXRMaWJyYXJ5SW50ZXJuYWwobm9kZSk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldENsYXNzKGlyLkNsYXNzIG5vZGUpID0+IGdldENsYXNzSW50ZXJuYWwobm9kZSk7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0U3VwZXJUeXBlKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLnN1cGVydHlwZTsKICB9CgogIHZvaWQgX2Vuc3VyZVRoaXNBbmRSYXdUeXBlKENsYXNzRW50aXR5IGNscywgS0NsYXNzRGF0YSBkYXRhKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBpZiAoZGF0YSBpcyBLQ2xhc3NEYXRhSW1wbCAmJiBkYXRhLnRoaXNUeXBlID09IG51bGwpIHsKICAgICAgaXIuQ2xhc3Mgbm9kZSA9IGRhdGEubm9kZTsKICAgICAgaWYgKG5vZGUudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAgIGRhdGEudGhpc1R5cGUgPQogICAgICAgICAgICBkYXRhLnJhd1R5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZShjbHMsIGNvbnN0IDxEYXJ0VHlwZT5bXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGF0YS50aGlzVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgICAgICBjbHMsCiAgICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5nZW5lcmF0ZShub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwKICAgICAgICAgICAgICAgIChpbnQgaW5kZXgpIHsKICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZVR5cGUoCiAgICAgICAgICAgICAgICAgIGdldFR5cGVWYXJpYWJsZUludGVybmFsKG5vZGUudHlwZVBhcmFtZXRlcnNbaW5kZXhdKSk7CiAgICAgICAgICAgIH0pKTsKICAgICAgICBkYXRhLnJhd1R5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgY2xzLAogICAgICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IER5bmFtaWNUeXBlKCkpKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZVZhcmlhYmxlRW50aXR5IGdldFR5cGVWYXJpYWJsZShpci5UeXBlUGFyYW1ldGVyIG5vZGUpID0+CiAgICAgIGdldFR5cGVWYXJpYWJsZUludGVybmFsKG5vZGUpOwoKICB2b2lkIF9lbnN1cmVTdXBlcnR5cGVzKENsYXNzRW50aXR5IGNscywgS0NsYXNzRGF0YSBkYXRhKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBpZiAoZGF0YSBpcyBLQ2xhc3NEYXRhSW1wbCAmJiBkYXRhLm9yZGVyZWRUeXBlU2V0ID09IG51bGwpIHsKICAgICAgX2Vuc3VyZVRoaXNBbmRSYXdUeXBlKGNscywgZGF0YSk7CgogICAgICBpci5DbGFzcyBub2RlID0gZGF0YS5ub2RlOwoKICAgICAgaWYgKG5vZGUuc3VwZXJ0eXBlID09IG51bGwpIHsKICAgICAgICBkYXRhLm9yZGVyZWRUeXBlU2V0ID0gbmV3IE9yZGVyZWRUeXBlU2V0LnNpbmdsZXRvbihkYXRhLnRoaXNUeXBlKTsKICAgICAgICBkYXRhLmlzTWl4aW5BcHBsaWNhdGlvbiA9IGZhbHNlOwogICAgICAgIGRhdGEuaW50ZXJmYWNlcyA9IGNvbnN0IDxJbnRlcmZhY2VUeXBlPltdOwogICAgICB9IGVsc2UgewogICAgICAgIEludGVyZmFjZVR5cGUgcHJvY2Vzc1N1cGVydHlwZShpci5TdXBlcnR5cGUgbm9kZSkgewogICAgICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBfdHlwZUNvbnZlcnRlci52aXNpdFN1cGVydHlwZShub2RlKTsKICAgICAgICAgIEluZGV4ZWRDbGFzcyBzdXBlcmNsYXNzID0gc3VwZXJ0eXBlLmVsZW1lbnQ7CiAgICAgICAgICBLQ2xhc3NEYXRhIHN1cGVyZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShzdXBlcmNsYXNzKTsKICAgICAgICAgIF9lbnN1cmVTdXBlcnR5cGVzKHN1cGVyY2xhc3MsIHN1cGVyZGF0YSk7CiAgICAgICAgICByZXR1cm4gc3VwZXJ0eXBlOwogICAgICAgIH0KCiAgICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGU7CiAgICAgICAgaXIuTGlua0J1aWxkZXI8SW50ZXJmYWNlVHlwZT4gbGlua0J1aWxkZXIgPQogICAgICAgICAgICBuZXcgaXIuTGlua0J1aWxkZXI8SW50ZXJmYWNlVHlwZT4oKTsKICAgICAgICBpZiAobm9kZS5pc01peGluRGVjbGFyYXRpb24pIHsKICAgICAgICAgIC8vIEEgbWl4aW4gZGVjbGFyYXRpb24KICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgIG1peGluIE0gb24gQSwgQiwgQyB7fQogICAgICAgICAgLy8KICAgICAgICAgIC8vIGlzIGVuY29kZWQgYnkgQ0ZFIGFzCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICBhYnN0cmFjdCBjbGFzcyBNIGV4dGVuZHMgQSBpbXBsZW1lbnRzIEIsIEMge30KICAgICAgICAgIC8vICAgYWJzdHJhY3QgY2xhc3MgTSBleHRlbmRzIEEmQiZDIHt9CiAgICAgICAgICAvLwogICAgICAgICAgLy8gYnV0IHdlIGVuY29kZSBpdCBhcwogICAgICAgICAgLy8KICAgICAgICAgIC8vICAgYWJzdHJhY3QgY2xhc3MgTSBleHRlbmRzIE9iamVjdCBpbXBsZW1lbnRzIEEsIEIsIEMge30KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBzbyB3ZSBuZWVkIGdldCB0aGUgc3VwZXJjbGFzc2VzIGZyb20gdGhlIG9uLWNsYXVzZSwgQSwgQiwgYW5kIEMsCiAgICAgICAgICAvLyB0aHJvdWdoIFtzdXBlcmNsYXNzQ29uc3RyYWludHNdLgogICAgICAgICAgZm9yIChpci5TdXBlcnR5cGUgY29uc3RyYWludCBpbiBub2RlLnN1cGVyY2xhc3NDb25zdHJhaW50cygpKSB7CiAgICAgICAgICAgIGxpbmtCdWlsZGVyLmFkZExhc3QocHJvY2Vzc1N1cGVydHlwZShjb25zdHJhaW50KSk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBTZXQgc3VwZXJjbGFzcyB0byBgT2JqZWN0YC4KICAgICAgICAgIHN1cGVydHlwZSA9IF9jb21tb25FbGVtZW50cy5vYmplY3RUeXBlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdXBlcnR5cGUgPSBwcm9jZXNzU3VwZXJ0eXBlKG5vZGUuc3VwZXJ0eXBlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN1cGVydHlwZSA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSkgewogICAgICAgICAgQ2xhc3NFbnRpdHkgZGVmYXVsdFN1cGVyY2xhc3MgPQogICAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5nZXREZWZhdWx0U3VwZXJjbGFzcyhjbHMsIG5hdGl2ZUJhc2ljRGF0YSk7CiAgICAgICAgICBkYXRhLnN1cGVydHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShkZWZhdWx0U3VwZXJjbGFzcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRhdGEuc3VwZXJ0eXBlID0gc3VwZXJ0eXBlOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZS5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBkYXRhLmlzTWl4aW5BcHBsaWNhdGlvbiA9IHRydWU7CiAgICAgICAgICBsaW5rQnVpbGRlcgogICAgICAgICAgICAgIC5hZGRMYXN0KGRhdGEubWl4ZWRJblR5cGUgPSBwcm9jZXNzU3VwZXJ0eXBlKG5vZGUubWl4ZWRJblR5cGUpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YS5pc01peGluQXBwbGljYXRpb24gPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbm9kZS5pbXBsZW1lbnRlZFR5cGVzLmZvckVhY2goKGlyLlN1cGVydHlwZSBzdXBlcnR5cGUpIHsKICAgICAgICAgIGxpbmtCdWlsZGVyLmFkZExhc3QocHJvY2Vzc1N1cGVydHlwZShzdXBlcnR5cGUpKTsKICAgICAgICB9KTsKICAgICAgICBpci5MaW5rPEludGVyZmFjZVR5cGU+IGludGVyZmFjZXMgPQogICAgICAgICAgICBsaW5rQnVpbGRlci50b0xpbmsoY29uc3QgaXIuTGluazxJbnRlcmZhY2VUeXBlPigpKTsKICAgICAgICBPcmRlcmVkVHlwZVNldEJ1aWxkZXIgc2V0QnVpbGRlciA9CiAgICAgICAgICAgIG5ldyBLZXJuZWxPcmRlcmVkVHlwZVNldEJ1aWxkZXIodGhpcywgY2xzKTsKICAgICAgICBkYXRhLm9yZGVyZWRUeXBlU2V0ID0gc2V0QnVpbGRlci5jcmVhdGVPcmRlcmVkVHlwZVNldCgKICAgICAgICAgICAgZGF0YS5zdXBlcnR5cGUsIGludGVyZmFjZXMucmV2ZXJzZShjb25zdCBpci5MaW5rPEludGVyZmFjZVR5cGU+KCkpKTsKICAgICAgICBkYXRhLmludGVyZmFjZXMgPSBuZXcgTGlzdDxJbnRlcmZhY2VUeXBlPi5mcm9tKGludGVyZmFjZXMudG9MaXN0KCkpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlZGVmVHlwZSBnZXRUeXBlZGVmVHlwZShpci5UeXBlZGVmIG5vZGUpIHsKICAgIEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYgPSBnZXRUeXBlZGVmSW50ZXJuYWwobm9kZSk7CiAgICByZXR1cm4gdHlwZWRlZnMuZ2V0RGF0YSh0eXBlZGVmKS5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGdldE1lbWJlcihpci5NZW1iZXIgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgaXIuRmllbGQpIHsKICAgICAgcmV0dXJuIGdldEZpZWxkSW50ZXJuYWwobm9kZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuIGdldENvbnN0cnVjdG9ySW50ZXJuYWwobm9kZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgIGlmIChub2RlLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgICAgcmV0dXJuIGdldENvbnN0cnVjdG9ySW50ZXJuYWwobm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGdldE1ldGhvZEludGVybmFsKG5vZGUpOwogICAgICB9CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBtZW1iZXI6ICRub2RlIik7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgZ2V0U3VwZXJNZW1iZXIoTWVtYmVyRW50aXR5IGNvbnRleHQsIGlyLk5hbWUgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIC8vIFdlIGNhbiBubyBsb25nZXIgdHJ1c3QgdGhlIGludGVyZmFjZSB0YXJnZXQgb2YgdGhlIHN1cGVyIGFjY2VzcyBzaW5jZSBpdAogICAgLy8gbWlnaHQgYmUgYSBtZW1iZXIgdGhhdCB3ZSBoYXZlIGNsb25lZC4KICAgIENsYXNzRW50aXR5IGNscyA9IGNvbnRleHQuZW5jbG9zaW5nQ2xhc3M7CiAgICBhc3NlcnQoCiAgICAgICAgY2xzICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoY29udGV4dCwKICAgICAgICAgICAgIk5vIGVuY2xvc2luZyBjbGFzcyBmb3Igc3VwZXIgbWVtYmVyIGFjY2VzcyBpbiAkY29udGV4dC4iKSk7CiAgICBJbmRleGVkQ2xhc3Mgc3VwZXJjbGFzcyA9IGdldFN1cGVyVHlwZShjbHMpPy5lbGVtZW50OwogICAgd2hpbGUgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICBLQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoc3VwZXJjbGFzcyk7CiAgICAgIE1lbWJlckVudGl0eSBzdXBlck1lbWJlciA9CiAgICAgICAgICBlbnYubG9va3VwTWVtYmVyKHRoaXMsIG5hbWUubmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgICBpZiAoc3VwZXJNZW1iZXIgIT0gbnVsbCkgewogICAgICAgIGlmICghc3VwZXJNZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKCFzdXBlck1lbWJlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgICByZXR1cm4gc3VwZXJNZW1iZXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN1cGVyY2xhc3MgPSBnZXRTdXBlclR5cGUoc3VwZXJjbGFzcyk/LmVsZW1lbnQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGdldENvbnN0cnVjdG9yKGlyLk1lbWJlciBub2RlKSA9PgogICAgICBnZXRDb25zdHJ1Y3RvckludGVybmFsKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXRTdXBlckNvbnN0cnVjdG9yKAogICAgICBpci5Db25zdHJ1Y3RvciBzb3VyY2VOb2RlLCBpci5NZW1iZXIgdGFyZ2V0Tm9kZSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgc291cmNlID0gZ2V0Q29uc3RydWN0b3Ioc291cmNlTm9kZSk7CiAgICBDbGFzc0VudGl0eSBzb3VyY2VDbGFzcyA9IHNvdXJjZS5lbmNsb3NpbmdDbGFzczsKICAgIENvbnN0cnVjdG9yRW50aXR5IHRhcmdldCA9IGdldENvbnN0cnVjdG9yKHRhcmdldE5vZGUpOwogICAgQ2xhc3NFbnRpdHkgdGFyZ2V0Q2xhc3MgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICBJbmRleGVkQ2xhc3Mgc3VwZXJDbGFzcyA9IGdldFN1cGVyVHlwZShzb3VyY2VDbGFzcyk/LmVsZW1lbnQ7CiAgICBpZiAoc3VwZXJDbGFzcyA9PSB0YXJnZXRDbGFzcykgewogICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQoKICAgIC8vLyBUaGlzIHBhdGggaXMgbmVlZGVkIGZvciBzeW50aGV0aWNhbGx5IGluamVjdGVkIHN1cGVyY2xhc3NlcyBsaWtlCiAgICAvLy8gYEludGVyY2VwdG9yYCBhbmQgYEphdmFTY3JpcHRPYmplY3RgLgogICAgS0NsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KHN1cGVyQ2xhc3MpOwogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBlbnYubG9va3VwQ29uc3RydWN0b3IodGhpcywgdGFyZ2V0Lm5hbWUpOwogICAgaWYgKGNvbnN0cnVjdG9yICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgfQogICAgdGhyb3cgZmFpbGVkQXQoc291cmNlLCAiU3VwZXIgY29uc3RydWN0b3IgZm9yICRzb3VyY2Ugbm90IGZvdW5kLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0TWV0aG9kKGlyLlByb2NlZHVyZSBub2RlKSA9PiBnZXRNZXRob2RJbnRlcm5hbChub2RlKTsKCiAgQG92ZXJyaWRlCiAgRmllbGRFbnRpdHkgZ2V0RmllbGQoaXIuRmllbGQgbm9kZSkgPT4gZ2V0RmllbGRJbnRlcm5hbChub2RlKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0RGFydFR5cGUoaXIuRGFydFR5cGUgdHlwZSkgPT4gX3R5cGVDb252ZXJ0ZXIuY29udmVydCh0eXBlKTsKCiAgQG92ZXJyaWRlCiAgVHlwZVZhcmlhYmxlVHlwZSBnZXRUeXBlVmFyaWFibGVUeXBlKGlyLlR5cGVQYXJhbWV0ZXJUeXBlIHR5cGUpID0+CiAgICAgIGdldERhcnRUeXBlKHR5cGUpOwoKICBMaXN0PERhcnRUeXBlPiBnZXREYXJ0VHlwZXMoTGlzdDxpci5EYXJ0VHlwZT4gdHlwZXMpIHsKICAgIExpc3Q8RGFydFR5cGU+IGxpc3QgPSA8RGFydFR5cGU+W107CiAgICB0eXBlcy5mb3JFYWNoKChpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGxpc3QuYWRkKGdldERhcnRUeXBlKHR5cGUpKTsKICAgIH0pOwogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEludGVyZmFjZVR5cGUoaXIuSW50ZXJmYWNlVHlwZSB0eXBlKSA9PgogICAgICBfdHlwZUNvbnZlcnRlci5jb252ZXJ0KHR5cGUpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBEYXJ0VHlwZSByZXR1cm5UeXBlOwogICAgaWYgKG5vZGUucGFyZW50IGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIC8vIFRoZSByZXR1cm4gdHlwZSBvbiBnZW5lcmF0aXZlIGNvbnN0cnVjdG9ycyBpcyBgdm9pZGAsIGJ1dCB3ZSBuZWVkCiAgICAgIC8vIGBkeW5hbWljYCB0eXBlIHRvIG1hdGNoIHRoZSBlbGVtZW50IG1vZGVsLgogICAgICByZXR1cm5UeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVyblR5cGUgPSBnZXREYXJ0VHlwZShub2RlLnJldHVyblR5cGUpOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVyVHlwZXMgPSA8RGFydFR5cGU+W107CiAgICBMaXN0PERhcnRUeXBlPiBvcHRpb25hbFBhcmFtZXRlclR5cGVzID0gPERhcnRUeXBlPltdOwoKICAgIERhcnRUeXBlIGdldFBhcmFtZXRlclR5cGUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgICBpZiAodmFyaWFibGUuaXNDb3ZhcmlhbnQgfHwgdmFyaWFibGUuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgIC8vIEEgY292YXJpYW50IHBhcmFtZXRlciBoYXMgdHlwZSBgT2JqZWN0YCBpbiB0aGUgbWV0aG9kIHNpZ25hdHVyZS4KICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZTsKICAgICAgfQogICAgICByZXR1cm4gZ2V0RGFydFR5cGUodmFyaWFibGUudHlwZSk7CiAgICB9CgogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgaWYgKHBhcmFtZXRlclR5cGVzLmxlbmd0aCA9PSBub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgICBvcHRpb25hbFBhcmFtZXRlclR5cGVzLmFkZChnZXRQYXJhbWV0ZXJUeXBlKHZhcmlhYmxlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFyYW1ldGVyVHlwZXMuYWRkKGdldFBhcmFtZXRlclR5cGUodmFyaWFibGUpKTsKICAgICAgfQogICAgfQogICAgTGlzdDxTdHJpbmc+IG5hbWVkUGFyYW1ldGVycyA9IDxTdHJpbmc+W107CiAgICBMaXN0PERhcnRUeXBlPiBuYW1lZFBhcmFtZXRlclR5cGVzID0gPERhcnRUeXBlPltdOwogICAgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBzb3J0ZWROYW1lZFBhcmFtZXRlcnMgPQogICAgICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLnRvTGlzdCgpLi5zb3J0KChhLCBiKSA9PiBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSkpOwogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIHNvcnRlZE5hbWVkUGFyYW1ldGVycykgewogICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkKHZhcmlhYmxlLm5hbWUpOwogICAgICBuYW1lZFBhcmFtZXRlclR5cGVzLmFkZChnZXRQYXJhbWV0ZXJUeXBlKHZhcmlhYmxlKSk7CiAgICB9CiAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiB0eXBlVmFyaWFibGVzOwogICAgaWYgKG5vZGUudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlUGFyYW1ldGVycyA9IDxEYXJ0VHlwZT5bXTsKICAgICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICAgIHR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgIC5hZGQoZ2V0RGFydFR5cGUobmV3IGlyLlR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIpKSk7CiAgICAgIH0KICAgICAgdHlwZVZhcmlhYmxlcyA9IG5ldyBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPi5nZW5lcmF0ZSgKICAgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgKGludCBpbmRleCkgPT4gbmV3IEZ1bmN0aW9uVHlwZVZhcmlhYmxlKGluZGV4KSk7CgogICAgICBEYXJ0VHlwZSBzdWJzdChEYXJ0VHlwZSB0eXBlKSB7CiAgICAgICAgcmV0dXJuIHR5cGUuc3Vic3QodHlwZVZhcmlhYmxlcywgdHlwZVBhcmFtZXRlcnMpOwogICAgICB9CgogICAgICByZXR1cm5UeXBlID0gc3Vic3QocmV0dXJuVHlwZSk7CiAgICAgIHBhcmFtZXRlclR5cGVzID0gcGFyYW1ldGVyVHlwZXMubWFwKHN1YnN0KS50b0xpc3QoKTsKICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyA9IG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMubWFwKHN1YnN0KS50b0xpc3QoKTsKICAgICAgbmFtZWRQYXJhbWV0ZXJUeXBlcyA9IG5hbWVkUGFyYW1ldGVyVHlwZXMubWFwKHN1YnN0KS50b0xpc3QoKTsKICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgdHlwZVZhcmlhYmxlc1tpbmRleF0uYm91bmQgPQogICAgICAgICAgICBzdWJzdChnZXREYXJ0VHlwZShub2RlLnR5cGVQYXJhbWV0ZXJzW2luZGV4XS5ib3VuZCkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0eXBlVmFyaWFibGVzID0gY29uc3QgPEZ1bmN0aW9uVHlwZVZhcmlhYmxlPltdOwogICAgfQoKICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtZXRlclR5cGVzLCBvcHRpb25hbFBhcmFtZXRlclR5cGVzLAogICAgICAgIG5hbWVkUGFyYW1ldGVycywgbmFtZWRQYXJhbWV0ZXJUeXBlcywgdHlwZVZhcmlhYmxlcyk7CiAgfQoKICBDb25zdGFudFZhbHVlIGNvbXB1dGVDb25zdGFudFZhbHVlKAogICAgICBTcGFubmFibGUgc3Bhbm5hYmxlLCBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQsCiAgICAgIHtib29sIHJlcXVpcmVDb25zdGFudDogdHJ1ZSwgYm9vbCBjaGVja0Nhc3RzOiB0cnVlfSkgewogICAgcmV0dXJuIF9jb25zdGFudEVudmlyb25tZW50Ll9nZXRDb25zdGFudFZhbHVlKHNwYW5uYWJsZSwgY29uc3RhbnQsCiAgICAgICAgY29uc3RhbnRSZXF1aXJlZDogcmVxdWlyZUNvbnN0YW50LCBjaGVja0Nhc3RzOiBjaGVja0Nhc3RzKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHN1YnN0QnlDb250ZXh0KERhcnRUeXBlIHR5cGUsIEludGVyZmFjZVR5cGUgY29udGV4dCkgewogICAgcmV0dXJuIHR5cGUuc3Vic3QoCiAgICAgICAgY29udGV4dC50eXBlQXJndW1lbnRzLCBnZXRUaGlzVHlwZShjb250ZXh0LmVsZW1lbnQpLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGBjYWxsYCBtZXRob2Qgb24gJ3R5cGUnLgogIC8vLwogIC8vLyBJZiBbdHlwZV0gZG9lc24ndCBoYXZlIGEgYGNhbGxgIG1lbWJlciBgbnVsbGAgaXMgcmV0dXJuZWQuIElmIFt0eXBlXSBoYXMKICAvLy8gYW4gaW52YWxpZCBgY2FsbGAgbWVtYmVyIChub24tbWV0aG9kIG9yIGEgc3ludGhlc2l6ZWQgbWV0aG9kIHdpdGggYm90aAogIC8vLyBvcHRpb25hbCBhbmQgbmFtZWQgcGFyYW1ldGVycykgYSBbRHluYW1pY1R5cGVdIGlzIHJldHVybmVkLgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldENhbGxUeXBlKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgSW5kZXhlZENsYXNzIGNscyA9IHR5cGUuZWxlbWVudDsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgaWYgKGRhdGEuY2FsbFR5cGUgIT0gbnVsbCkgewogICAgICByZXR1cm4gc3Vic3RCeUNvbnRleHQoZGF0YS5jYWxsVHlwZSwgdHlwZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0VGhpc1R5cGUoSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlVGhpc0FuZFJhd1R5cGUoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLnRoaXNUeXBlOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBfZ2V0UmF3VHlwZShJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVUaGlzQW5kUmF3VHlwZShjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEucmF3VHlwZTsKICB9CgogIERhcnRUeXBlIF9nZXRGaWVsZFR5cGUoSW5kZXhlZEZpZWxkIGZpZWxkKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoZmllbGQpKTsKICAgIEtGaWVsZERhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmaWVsZCk7CiAgICByZXR1cm4gZGF0YS5nZXRGaWVsZFR5cGUodGhpcyk7CiAgfQoKICBGdW5jdGlvblR5cGUgX2dldEZ1bmN0aW9uVHlwZShJbmRleGVkRnVuY3Rpb24gZnVuY3Rpb24pIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShmdW5jdGlvbikpOwogICAgS0Z1bmN0aW9uRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKGZ1bmN0aW9uKTsKICAgIHJldHVybiBkYXRhLmdldEZ1bmN0aW9uVHlwZSh0aGlzKTsKICB9CgogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gX2dldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhJbmRleGVkRnVuY3Rpb24gZnVuY3Rpb24pIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShmdW5jdGlvbikpOwogICAgS0Z1bmN0aW9uRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKGZ1bmN0aW9uKTsKICAgIHJldHVybiBkYXRhLmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGVWYXJpYWJsZUJvdW5kKEluZGV4ZWRUeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkodHlwZVZhcmlhYmxlKSk7CiAgICBLVHlwZVZhcmlhYmxlRGF0YSBkYXRhID0gdHlwZVZhcmlhYmxlcy5nZXREYXRhKHR5cGVWYXJpYWJsZSk7CiAgICByZXR1cm4gZGF0YS5nZXRCb3VuZCh0aGlzKTsKICB9CgogIENsYXNzRW50aXR5IGdldEFwcGxpZWRNaXhpbihJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5taXhlZEluVHlwZT8uZWxlbWVudDsKICB9CgogIGJvb2wgX2lzTWl4aW5BcHBsaWNhdGlvbihJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5pc01peGluQXBwbGljYXRpb247CiAgfQoKICBib29sIF9pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0VudiBlbnYgPSBjbGFzc2VzLmdldEVudihjbHMpOwogICAgcmV0dXJuIGVudi5pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uOwogIH0KCiAgdm9pZCBfZm9yRWFjaFN1cGVydHlwZShJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICBkYXRhLm9yZGVyZWRUeXBlU2V0LnN1cGVydHlwZXMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgX2ZvckVhY2hNaXhpbihJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgbWl4aW4pKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICB3aGlsZSAoY2xzICE9IG51bGwpIHsKICAgICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICAgIGlmIChkYXRhLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICBmKGRhdGEubWl4ZWRJblR5cGUuZWxlbWVudCk7CiAgICAgIH0KICAgICAgY2xzID0gZGF0YS5zdXBlcnR5cGU/LmVsZW1lbnQ7CiAgICB9CiAgfQoKICB2b2lkIF9mb3JFYWNoQ29uc3RydWN0b3IoSW5kZXhlZENsYXNzIGNscywgdm9pZCBmKENvbnN0cnVjdG9yRW50aXR5IG1lbWJlcikpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0VudiBlbnYgPSBjbGFzc2VzLmdldEVudihjbHMpOwogICAgZW52LmZvckVhY2hDb25zdHJ1Y3Rvcih0aGlzLCBmKTsKICB9CgogIHZvaWQgX2ZvckVhY2hMb2NhbENsYXNzTWVtYmVyKEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICBlbnYuZm9yRWFjaE1lbWJlcih0aGlzLCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBmKG1lbWJlcik7CiAgICB9KTsKICB9CgogIHZvaWQgZm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXIoCiAgICAgIEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgJ0tlcm5lbFRvRWxlbWVudE1hcEJhc2UuX2ZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyJyk7CiAgfQoKICB2b2lkIF9mb3JFYWNoQ2xhc3NNZW1iZXIoCiAgICAgIEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihDbGFzc0VudGl0eSBjbHMsIE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIGVudi5mb3JFYWNoTWVtYmVyKHRoaXMsIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGYoY2xzLCBtZW1iZXIpOwogICAgfSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICBpZiAoZGF0YS5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICBfZm9yRWFjaENsYXNzTWVtYmVyKGRhdGEuc3VwZXJ0eXBlLmVsZW1lbnQsIGYpOwogICAgfQogIH0KCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBfZ2V0Q29uc3RydWN0b3JDb25zdGFudChJbmRleGVkQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjb25zdHJ1Y3RvcikpOwogICAgS0NvbnN0cnVjdG9yRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKGNvbnN0cnVjdG9yKTsKICAgIHJldHVybiBkYXRhLmdldENvbnN0cnVjdG9yQ29uc3RhbnQodGhpcywgY29uc3RydWN0b3IpOwogIH0KCiAgQ29uc3RhbnRFeHByZXNzaW9uIF9nZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbihJbmRleGVkRmllbGQgZmllbGQpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShmaWVsZCkpOwogICAgS0ZpZWxkRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKGZpZWxkKTsKICAgIHJldHVybiBkYXRhLmdldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBhc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIE9yZGVyZWRUeXBlU2V0IG9yZGVyZWRUeXBlU2V0ID0gZ2V0T3JkZXJlZFR5cGVTZXQodHlwZS5lbGVtZW50KTsKICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0KICAgICAgICBvcmRlcmVkVHlwZVNldC5hc0luc3RhbmNlT2YoY2xzLCBnZXRIaWVyYXJjaHlEZXB0aChjbHMpKTsKICAgIGlmIChzdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICBzdXBlcnR5cGUgPSBzdWJzdEJ5Q29udGV4dChzdXBlcnR5cGUsIHR5cGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVydHlwZTsKICB9CgogIEBvdmVycmlkZQogIE9yZGVyZWRUeXBlU2V0IGdldE9yZGVyZWRUeXBlU2V0KEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLm9yZGVyZWRUeXBlU2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldEhpZXJhcmNoeURlcHRoKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLm9yZGVyZWRUeXBlU2V0Lm1heERlcHRoOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0SW50ZXJmYWNlcyhJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5pbnRlcmZhY2VzOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuTWVtYmVyIGdldE1lbWJlck5vZGUoY292YXJpYW50IEluZGV4ZWRNZW1iZXIgbWVtYmVyKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobWVtYmVyKSk7CiAgICByZXR1cm4gbWVtYmVycy5nZXREYXRhKG1lbWJlcikubm9kZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkNsYXNzIGdldENsYXNzTm9kZShjb3ZhcmlhbnQgSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgcmV0dXJuIGNsYXNzZXMuZ2V0RGF0YShjbHMpLm5vZGU7CiAgfQoKICBpci5UeXBlZGVmIF9nZXRUeXBlZGVmTm9kZShjb3ZhcmlhbnQgSW5kZXhlZFR5cGVkZWYgdHlwZWRlZikgewogICAgcmV0dXJuIHR5cGVkZWZzLmdldERhdGEodHlwZWRlZikubm9kZTsKICB9CgogIEBvdmVycmlkZQogIEltcG9ydEVudGl0eSBnZXRJbXBvcnQoaXIuTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpci5MaWJyYXJ5IGxpYnJhcnkgPSBub2RlLnBhcmVudDsKICAgIEtMaWJyYXJ5RGF0YSBkYXRhID0gbGlicmFyaWVzLmdldERhdGEoZ2V0TGlicmFyeUludGVybmFsKGxpYnJhcnkpKTsKICAgIHJldHVybiBkYXRhLmltcG9ydHNbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UeXBlRW52aXJvbm1lbnQgZ2V0IHR5cGVFbnZpcm9ubWVudCB7CiAgICByZXR1cm4gX3R5cGVFbnZpcm9ubWVudCA/Pz0gbmV3IGlyLlR5cGVFbnZpcm9ubWVudCgKICAgICAgICBuZXcgaXIuQ29yZVR5cGVzKGVudi5tYWluQ29tcG9uZW50KSwgY2xhc3NIaWVyYXJjaHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuQ2xhc3NIaWVyYXJjaHkgZ2V0IGNsYXNzSGllcmFyY2h5IHsKICAgIHJldHVybiBfY2xhc3NIaWVyYXJjaHkgPz89IG5ldyBpci5DbGFzc0hpZXJhcmNoeShlbnYubWFpbkNvbXBvbmVudCk7CiAgfQoKICBEYXJ0MmpzQ29uc3RhbnRFdmFsdWF0b3IgZ2V0IGNvbnN0YW50RXZhbHVhdG9yIHsKICAgIHJldHVybiBfY29uc3RhbnRFdmFsdWF0b3IgPz89IG5ldyBEYXJ0MmpzQ29uc3RhbnRFdmFsdWF0b3IodHlwZUVudmlyb25tZW50LAogICAgICAgIChpci5Mb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBMaXN0PGlyLkxvY2F0ZWRNZXNzYWdlPiBjb250ZXh0KSB7CiAgICAgIHJlcG9ydExvY2F0ZWRNZXNzYWdlKHJlcG9ydGVyLCBtZXNzYWdlLCBjb250ZXh0KTsKICAgIH0sIGVudmlyb25tZW50OiBfZW52aXJvbm1lbnQudG9NYXAoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYW1lIGdldE5hbWUoaXIuTmFtZSBuYW1lKSB7CiAgICByZXR1cm4gbmV3IE5hbWUoCiAgICAgICAgbmFtZS5uYW1lLCBuYW1lLmlzUHJpdmF0ZSA/IGdldExpYnJhcnkobmFtZS5saWJyYXJ5KSA6IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2FsbFN0cnVjdHVyZSBnZXRDYWxsU3RydWN0dXJlKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGludCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoICsgYXJndW1lbnRzLm5hbWVkLmxlbmd0aDsKICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cyA9IGFyZ3VtZW50cy5uYW1lZC5tYXAoKGUpID0+IGUubmFtZSkudG9MaXN0KCk7CiAgICByZXR1cm4gbmV3IENhbGxTdHJ1Y3R1cmUoCiAgICAgICAgYXJndW1lbnRDb3VudCwgbmFtZWRBcmd1bWVudHMsIGFyZ3VtZW50cy50eXBlcy5sZW5ndGgpOwogIH0KCiAgUGFyYW1ldGVyU3RydWN0dXJlIGdldFBhcmFtZXRlclN0cnVjdHVyZShpci5GdW5jdGlvbk5vZGUgbm9kZSwKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB0eXBlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvCiAgICAgIC8vIGNvbnN0cnVjdG9ycyBsaWtlIGNhbGxpbmcgYSBnZW5lcmljIG1ldGhvZC4KICAgICAge2Jvb2wgaW5jbHVkZVR5cGVQYXJhbWV0ZXJzOiB0cnVlfSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgdGhlIGNvbXB1dGVkIGZ1bmN0aW9uIHR5cGUuCiAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJzID0gbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50OwogICAgaW50IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7CiAgICBpbnQgdHlwZVBhcmFtZXRlcnMgPSBub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIExpc3Q8U3RyaW5nPiBuYW1lZFBhcmFtZXRlcnMgPQogICAgICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLm1hcCgocCkgPT4gcC5uYW1lKS50b0xpc3QoKS4uc29ydCgpOwogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUocmVxdWlyZWRQYXJhbWV0ZXJzLCBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBuYW1lZFBhcmFtZXRlcnMsIGluY2x1ZGVUeXBlUGFyYW1ldGVycyA/IHR5cGVQYXJhbWV0ZXJzIDogMCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTZWxlY3RvciBnZXRJbnZvY2F0aW9uU2VsZWN0b3IoaXIuTmFtZSBpck5hbWUsIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsIGludCB0eXBlQXJndW1lbnRzKSB7CiAgICBOYW1lIG5hbWUgPSBnZXROYW1lKGlyTmFtZSk7CiAgICBTZWxlY3RvcktpbmQga2luZDsKICAgIGlmIChTZWxlY3Rvci5pc09wZXJhdG9yTmFtZShuYW1lLnRleHQpKSB7CiAgICAgIGlmIChuYW1lID09IE5hbWVzLklOREVYX05BTUUgfHwgbmFtZSA9PSBOYW1lcy5JTkRFWF9TRVRfTkFNRSkgewogICAgICAgIGtpbmQgPSBTZWxlY3RvcktpbmQuSU5ERVg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAga2luZCA9IFNlbGVjdG9yS2luZC5PUEVSQVRPUjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAga2luZCA9IFNlbGVjdG9yS2luZC5DQUxMOwogICAgfQoKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlKAogICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMgKyBuYW1lZEFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgbmFtZWRBcmd1bWVudHMsCiAgICAgICAgdHlwZUFyZ3VtZW50cyk7CiAgICByZXR1cm4gbmV3IFNlbGVjdG9yKGtpbmQsIG5hbWUsIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgU2VsZWN0b3IgZ2V0R2V0dGVyU2VsZWN0b3IoaXIuTmFtZSBpck5hbWUpIHsKICAgIE5hbWUgbmFtZSA9IG5ldyBOYW1lKAogICAgICAgIGlyTmFtZS5uYW1lLCBpck5hbWUuaXNQcml2YXRlID8gZ2V0TGlicmFyeShpck5hbWUubGlicmFyeSkgOiBudWxsKTsKICAgIHJldHVybiBuZXcgU2VsZWN0b3IuZ2V0dGVyKG5hbWUpOwogIH0KCiAgU2VsZWN0b3IgZ2V0U2V0dGVyU2VsZWN0b3IoaXIuTmFtZSBpck5hbWUpIHsKICAgIE5hbWUgbmFtZSA9IG5ldyBOYW1lKAogICAgICAgIGlyTmFtZS5uYW1lLCBpck5hbWUuaXNQcml2YXRlID8gZ2V0TGlicmFyeShpck5hbWUubGlicmFyeSkgOiBudWxsKTsKICAgIHJldHVybiBuZXcgU2VsZWN0b3Iuc2V0dGVyKG5hbWUpOwogIH0KCiAgLy8vIExvb2tzIHVwIFt0eXBlTmFtZV0gZm9yIHVzZSBpbiB0aGUgc3BlYy1zdHJpbmcgb2YgYSBgSlNgIGNhbGwuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHRoaXMgaW4gW05hdGl2ZUJlaGF2aW9yXSBpbnN0ZWFkIG9mIGNhbGxpbmcKICAvLyB0aGUgYEZvcmVpZ25SZXNvbHZlcmAuCiAgVHlwZUxvb2t1cCB0eXBlTG9va3VwKHtib29sIHJlc29sdmVBc1JhdzogdHJ1ZX0pIHsKICAgIHJldHVybiByZXNvbHZlQXNSYXcKICAgICAgICA/IChfY2FjaGVkVHlwZUxvb2t1cFJhdyA/Pz0gX3R5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiB0cnVlKSkKICAgICAgICA6IChfY2FjaGVkVHlwZUxvb2t1cEZ1bGwgPz89IF90eXBlTG9va3VwKHJlc29sdmVBc1JhdzogZmFsc2UpKTsKICB9CgogIFR5cGVMb29rdXAgX2NhY2hlZFR5cGVMb29rdXBSYXc7CiAgVHlwZUxvb2t1cCBfY2FjaGVkVHlwZUxvb2t1cEZ1bGw7CgogIFR5cGVMb29rdXAgX3R5cGVMb29rdXAoe2Jvb2wgcmVzb2x2ZUFzUmF3OiB0cnVlfSkgewogICAgYm9vbCBjYWNoZWRNYXlMb29rdXBJbk1haW47CiAgICBib29sIG1heUxvb2t1cEluTWFpbigpIHsKICAgICAgdmFyIG1haW5VcmkgPSBlbGVtZW50RW52aXJvbm1lbnQubWFpbkxpYnJhcnkuY2Fub25pY2FsVXJpOwogICAgICAvLyBUZXN0cyBwZXJtaXQgbG9va3VwIG91dHNpZGUgb2YgZGFydDogbGlicmFyaWVzLgogICAgICByZXR1cm4gbWFpblVyaS5wYXRoLmNvbnRhaW5zKCd0ZXN0cy9jb21waWxlci9kYXJ0MmpzX25hdGl2ZScpIHx8CiAgICAgICAgICBtYWluVXJpLnBhdGguY29udGFpbnMoJ3Rlc3RzL2NvbXBpbGVyL2RhcnQyanNfZXh0cmEnKTsKICAgIH0KCiAgICBEYXJ0VHlwZSBsb29rdXAoU3RyaW5nIHR5cGVOYW1lLCB7Ym9vbCByZXF1aXJlZH0pIHsKICAgICAgRGFydFR5cGUgZmluZEluTGlicmFyeShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgICAgICBpZiAobGlicmFyeSAhPSBudWxsKSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50RW52aXJvbm1lbnQubG9va3VwQ2xhc3MobGlicmFyeSwgdHlwZU5hbWUpOwogICAgICAgICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFsaWduIHNlbWFudGljcy4KICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVBc1JhdwogICAgICAgICAgICAgICAgPyBlbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShjbHMpCiAgICAgICAgICAgICAgICA6IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgRGFydFR5cGUgZmluZEluKFVyaSB1cmkpIHsKICAgICAgICByZXR1cm4gZmluZEluTGlicmFyeShlbGVtZW50RW52aXJvbm1lbnQubG9va3VwTGlicmFyeSh1cmkpKTsKICAgICAgfQoKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTmFycm93IHRoZSBzZXQgb2YgbG9va3VwcyBiYXNlZCBvbiB0aGUgZGVwZW5kaW5nCiAgICAgIC8vIGxpYnJhcnkuCiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIG1vcmUgcmVzdWx0cyB0byBhdm9pZCByZWR1bmRhbnQgbG9va3Vwcz8KICAgICAgRGFydFR5cGUgdHlwZTsKICAgICAgaWYgKGNhY2hlZE1heUxvb2t1cEluTWFpbiA/Pz0gbWF5TG9va3VwSW5NYWluKCkpIHsKICAgICAgICB0eXBlID8/PSBmaW5kSW5MaWJyYXJ5KGVsZW1lbnRFbnZpcm9ubWVudC5tYWluTGlicmFyeSk7CiAgICAgIH0KICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9jb3JlKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9fanNfaGVscGVyKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9faW50ZXJjZXB0b3JzKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9fbmF0aXZlX3R5cGVkX2RhdGEpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2NvbGxlY3Rpb24pOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X21hdGgpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2h0bWwpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2h0bWxfY29tbW9uKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9zdmcpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X3dlYl9hdWRpbyk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfd2ViX2dsKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF93ZWJfc3FsKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9pbmRleGVkX2RiKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF90eXBlZF9kYXRhKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9fcnRpKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9taXJyb3JzKTsKICAgICAgaWYgKHR5cGUgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZShDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLCB7J3RleHQnOiAiVHlwZSAnJHR5cGVOYW1lJyBub3QgZm91bmQuIn0pOwogICAgICB9CiAgICAgIHJldHVybiB0eXBlOwogICAgfQoKICAgIHJldHVybiBsb29rdXA7CiAgfQoKICBTdHJpbmcgX2dldFN0cmluZ0FyZ3VtZW50KGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSwgaW50IGluZGV4KSB7CiAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbFtpbmRleF0uYWNjZXB0KG5ldyBTdHJpbmdpZmllcigpKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIHRoaXMgZm9yIGxhdGVyIHVzZS4KICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckpzQ2FsbChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IDIgfHwKICAgICAgICBub2RlLmFyZ3VtZW50cy5uYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KUyk7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIFN0cmluZyBzcGVjU3RyaW5nID0gX2dldFN0cmluZ0FyZ3VtZW50KG5vZGUsIDApOwogICAgaWYgKHNwZWNTdHJpbmcgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfRklSU1QpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CgogICAgU3RyaW5nIGNvZGVTdHJpbmcgPSBfZ2V0U3RyaW5nQXJndW1lbnQobm9kZSwgMSk7CiAgICBpZiAoY29kZVN0cmluZyA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19TRUNPTkQpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CgogICAgcmV0dXJuIE5hdGl2ZUJlaGF2aW9yLm9mSnNDYWxsKAogICAgICAgIHNwZWNTdHJpbmcsCiAgICAgICAgY29kZVN0cmluZywKICAgICAgICB0eXBlTG9va3VwKHJlc29sdmVBc1JhdzogdHJ1ZSksCiAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICByZXBvcnRlciwKICAgICAgICBjb21tb25FbGVtZW50cyk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSB0aGlzIGZvciBsYXRlciB1c2UuCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0J1aWx0aW5DYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMSkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIkpTIGJ1aWx0aW4gZXhwcmVzc2lvbiBoYXMgbm8gdHlwZS4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMikgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIkpTIGJ1aWx0aW4gaXMgbWlzc2luZyBuYW1lLiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICBTdHJpbmcgc3BlY1N0cmluZyA9IF9nZXRTdHJpbmdBcmd1bWVudChub2RlLCAwKTsKICAgIGlmIChzcGVjU3RyaW5nID09IG51bGwpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50LiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICByZXR1cm4gTmF0aXZlQmVoYXZpb3Iub2ZKc0J1aWx0aW5DYWxsKAogICAgICAgIHNwZWNTdHJpbmcsCiAgICAgICAgdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IHRydWUpLAogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgcmVwb3J0ZXIsCiAgICAgICAgY29tbW9uRWxlbWVudHMpOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgdGhpcyBmb3IgbGF0ZXIgdXNlLgogIEBvdmVycmlkZQogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGwoCiAgICAgIGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMSkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiSlMgZW1iZWRkZWQgZ2xvYmFsIGV4cHJlc3Npb24gaGFzIG5vIHR5cGUuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IDIpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJKUyBlbWJlZGRlZCBnbG9iYWwgaXMgbWlzc2luZyBuYW1lLiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPiAyIHx8CiAgICAgICAgbm9kZS5hcmd1bWVudHMubmFtZWQuaXNOb3RFbXB0eSkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiSlMgZW1iZWRkZWQgZ2xvYmFsIGhhcyBtb3JlIHRoYW4gMiBhcmd1bWVudHMuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIFN0cmluZyBzcGVjU3RyaW5nID0gX2dldFN0cmluZ0FyZ3VtZW50KG5vZGUsIDApOwogICAgaWYgKHNwZWNTdHJpbmcgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIHJldHVybiBOYXRpdmVCZWhhdmlvci5vZkpzRW1iZWRkZWRHbG9iYWxDYWxsKAogICAgICAgIHNwZWNTdHJpbmcsCiAgICAgICAgdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IHRydWUpLAogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgcmVwb3J0ZXIsCiAgICAgICAgY29tbW9uRWxlbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuTmFtZSBnZXROYW1lRm9ySnNHZXROYW1lKENvbnN0YW50VmFsdWUgY29uc3RhbnQsIE5hbWVyIG5hbWVyKSB7CiAgICBpbnQgaW5kZXggPSBleHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWUoCiAgICAgICAgY29uc3RhbnQsIGNvbW1vbkVsZW1lbnRzLmpzR2V0TmFtZUVudW0pOwogICAgaWYgKGluZGV4ID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5hbWVyLmdldE5hbWVGb3JKc0dldE5hbWUoCiAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgSnNHZXROYW1lLnZhbHVlc1tpbmRleF0pOwogIH0KCiAgaW50IGV4dHJhY3RFbnVtSW5kZXhGcm9tQ29uc3RhbnRWYWx1ZSgKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50KSB7CiAgICBpZiAoY29uc3RhbnQgaXMgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlKSB7CiAgICAgIGlmIChjb25zdGFudC50eXBlLmVsZW1lbnQgPT0gY2xhc3NFbGVtZW50KSB7CiAgICAgICAgYXNzZXJ0KGNvbnN0YW50LmZpZWxkcy5sZW5ndGggPT0gMSB8fCBjb25zdGFudC5maWVsZHMubGVuZ3RoID09IDIpOwogICAgICAgIENvbnN0YW50VmFsdWUgaW5kZXhDb25zdGFudCA9IGNvbnN0YW50LmZpZWxkcy52YWx1ZXMuZmlyc3Q7CiAgICAgICAgaWYgKGluZGV4Q29uc3RhbnQgaXMgSW50Q29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgcmV0dXJuIGluZGV4Q29uc3RhbnQuaW50VmFsdWUudG9JbnQoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBnZXRDb25zdGFudFZhbHVlKGlyLkV4cHJlc3Npb24gbm9kZSwKICAgICAge2Jvb2wgcmVxdWlyZUNvbnN0YW50OiB0cnVlLAogICAgICBib29sIGltcGxpY2l0TnVsbDogZmFsc2UsCiAgICAgIGJvb2wgY2hlY2tDYXN0czogdHJ1ZX0pIHsKICAgIGlmIChub2RlIGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbikgewogICAgICBpci5Db25zdGFudCBjb25zdGFudCA9CiAgICAgICAgICBjb25zdGFudEV2YWx1YXRvci5ldmFsdWF0ZShub2RlLCByZXF1aXJlQ29uc3RhbnQ6IHJlcXVpcmVDb25zdGFudCk7CiAgICAgIGlmIChjb25zdGFudCA9PSBudWxsKSB7CiAgICAgICAgaWYgKHJlcXVpcmVDb25zdGFudCkgewogICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAgICAgJ05vIGNvbnN0YW50IGZvciAke0RlYnVnUHJpbnRlci5wcmV0dHlQcmludChub2RlKX0nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9jb25zdGFudFZhbHVlZmllci52aXNpdENvbnN0YW50KGNvbnN0YW50KTsKICAgICAgfQogICAgfQoKICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudDsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgaWYgKCFpbXBsaWNpdE51bGwpIHsKICAgICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgJ05vIGV4cHJlc3Npb24gZm9yIGNvbnN0YW50LicpOwogICAgICB9CiAgICAgIGNvbnN0YW50ID0gbmV3IE51bGxDb25zdGFudEV4cHJlc3Npb24oKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0YW50ID0KICAgICAgICAgIG5ldyBDb25zdGFudGlmaWVyKHRoaXMsIHJlcXVpcmVDb25zdGFudDogcmVxdWlyZUNvbnN0YW50KS52aXNpdChub2RlKTsKICAgIH0KICAgIGlmIChjb25zdGFudCA9PSBudWxsKSB7CiAgICAgIGlmIChyZXF1aXJlQ29uc3RhbnQpIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICAgJ05vIGNvbnN0YW50IGZvciAke0RlYnVnUHJpbnRlci5wcmV0dHlQcmludChub2RlKX0nKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBjb21wdXRlQ29uc3RhbnRWYWx1ZSgKICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwgY29uc3RhbnQsCiAgICAgICAgcmVxdWlyZUNvbnN0YW50OiByZXF1aXJlQ29uc3RhbnQsIGNoZWNrQ2FzdHM6IGNoZWNrQ2FzdHMpOwogICAgaWYgKCF2YWx1ZS5pc0NvbnN0YW50ICYmICFyZXF1aXJlQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLy8gQ29udmVydHMgW2Fubm90YXRpb25zXSBpbnRvIGEgbGlzdCBvZiBbQ29uc3RhbnRWYWx1ZV1zLgogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0TWV0YWRhdGEoTGlzdDxpci5FeHByZXNzaW9uPiBhbm5vdGF0aW9ucykgewogICAgaWYgKGFubm90YXRpb25zLmlzRW1wdHkpIHJldHVybiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGEgPSA8Q29uc3RhbnRWYWx1ZT5bXTsKICAgIGFubm90YXRpb25zLmZvckVhY2goKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgICAvLyBXZSBza2lwIHRoZSBpbXBsaWNpdCBjYXN0IGNoZWNrcyBmb3IgbWV0YWRhdGEgdG8gYXZvaWQgY2lyY3VsYXIKICAgICAgLy8gZGVwZW5kZW5jaWVzIGluIHRoZSBqcy1pbnRlcm9wIGNsYXNzIHJlZ2lzdHJhdGlvbi4KICAgICAgbWV0YWRhdGEuYWRkKGdldENvbnN0YW50VmFsdWUobm9kZSwgY2hlY2tDYXN0czogZmFsc2UpKTsKICAgIH0pOwogICAgcmV0dXJuIG1ldGFkYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0U3VwZXJOb1N1Y2hNZXRob2QoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICB3aGlsZSAoY2xzICE9IG51bGwpIHsKICAgICAgY2xzID0gZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKAogICAgICAgICAgY2xzLCBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKTsKICAgICAgaWYgKG1lbWJlciAhPSBudWxsICYmICFtZW1iZXIuaXNBYnN0cmFjdCkgewogICAgICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbikgewogICAgICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBtZW1iZXI7CiAgICAgICAgICBpZiAoZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID49IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBJZiBbbWVtYmVyXSBpcyBub3QgYSB2YWxpZCBgbm9TdWNoTWV0aG9kYCB0aGUgdGFyZ2V0IGlzCiAgICAgICAgLy8gYE9iamVjdC5zdXBlck5vU3VjaE1ldGhvZGAuCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoCiAgICAgICAgY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MsIElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8pOwogICAgYXNzZXJ0KGZ1bmN0aW9uICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoY2xzLCAiTm8gc3VwZXIgbm9TdWNoTWV0aG9kIGZvdW5kIGZvciBjbGFzcyAkY2xzLiIpKTsKICAgIHJldHVybiBmdW5jdGlvbjsKICB9CgogIEl0ZXJhYmxlPExpYnJhcnlFbnRpdHk+IGdldCBsaWJyYXJ5TGlzdEludGVybmFsIHsKICAgIGlmIChlbnYubGVuZ3RoICE9IGxpYnJhcnlNYXAubGVuZ3RoKSB7CiAgICAgIC8vIENyZWF0ZSBhIFtLTGlicmFyeV0gZm9yIGVhY2ggbGlicmFyeS4KICAgICAgZW52LmZvckVhY2hMaWJyYXJ5KChLTGlicmFyeUVudiBlbnYpIHsKICAgICAgICBnZXRMaWJyYXJ5SW50ZXJuYWwoZW52LmxpYnJhcnksIGVudik7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIGxpYnJhcnlNYXAudmFsdWVzOwogIH0KCiAgTGlicmFyeUVudGl0eSBnZXRMaWJyYXJ5SW50ZXJuYWwoaXIuTGlicmFyeSBub2RlLCBbS0xpYnJhcnlFbnYgbGlicmFyeUVudl0pIHsKICAgIHJldHVybiBsaWJyYXJ5TWFwW25vZGVdID8/PSBfZ2V0TGlicmFyeUNyZWF0ZShub2RlLCBsaWJyYXJ5RW52KTsKICB9CgogIExpYnJhcnlFbnRpdHkgX2dldExpYnJhcnlDcmVhdGUoaXIuTGlicmFyeSBub2RlLCBLTGlicmFyeUVudiBsaWJyYXJ5RW52KSB7CiAgICBhc3NlcnQoCiAgICAgICAgIWVudklzQ2xvc2VkLAogICAgICAgICJFbnZpcm9ubWVudCBvZiAkdGhpcyBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgIgogICAgICAgICJsaWJyYXJ5IGZvciAkbm9kZS4iKTsKICAgIFVyaSBjYW5vbmljYWxVcmkgPSBub2RlLmltcG9ydFVyaTsKICAgIFN0cmluZyBuYW1lID0gbm9kZS5uYW1lOwogICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICAvLyBVc2UgdGhlIGZpbGUgbmFtZSBhcyBzY3JpcHQgbmFtZS4KICAgICAgU3RyaW5nIHBhdGggPSBjYW5vbmljYWxVcmkucGF0aDsKICAgICAgbmFtZSA9IHBhdGguc3Vic3RyaW5nKHBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpOwogICAgfQogICAgSW5kZXhlZExpYnJhcnkgbGlicmFyeSA9IGNyZWF0ZUxpYnJhcnkobmFtZSwgY2Fub25pY2FsVXJpKTsKICAgIHJldHVybiBsaWJyYXJpZXMucmVnaXN0ZXIobGlicmFyeSwgbmV3IEtMaWJyYXJ5RGF0YShub2RlKSwKICAgICAgICBsaWJyYXJ5RW52ID8/IGVudi5sb29rdXBMaWJyYXJ5KGNhbm9uaWNhbFVyaSkpOwogIH0KCiAgQ2xhc3NFbnRpdHkgZ2V0Q2xhc3NJbnRlcm5hbChpci5DbGFzcyBub2RlLCBbS0NsYXNzRW52IGNsYXNzRW52XSkgewogICAgcmV0dXJuIGNsYXNzTWFwW25vZGVdID8/PSBfZ2V0Q2xhc3NDcmVhdGUobm9kZSwgY2xhc3NFbnYpOwogIH0KCiAgQ2xhc3NFbnRpdHkgX2dldENsYXNzQ3JlYXRlKGlyLkNsYXNzIG5vZGUsIEtDbGFzc0VudiBjbGFzc0VudikgewogICAgYXNzZXJ0KAogICAgICAgICFlbnZJc0Nsb3NlZCwKICAgICAgICAiRW52aXJvbm1lbnQgb2YgJHRoaXMgaXMgY2xvc2VkLiBUcnlpbmcgdG8gY3JlYXRlICIKICAgICAgICAiY2xhc3MgZm9yICRub2RlLiIpOwogICAgS0xpYnJhcnkgbGlicmFyeSA9IGdldExpYnJhcnlJbnRlcm5hbChub2RlLmVuY2xvc2luZ0xpYnJhcnkpOwogICAgaWYgKGNsYXNzRW52ID09IG51bGwpIHsKICAgICAgY2xhc3NFbnYgPSBsaWJyYXJpZXMuZ2V0RW52KGxpYnJhcnkpLmxvb2t1cENsYXNzKG5vZGUubmFtZSk7CiAgICB9CiAgICBJbmRleGVkQ2xhc3MgY2xzID0KICAgICAgICBjcmVhdGVDbGFzcyhsaWJyYXJ5LCBub2RlLm5hbWUsIGlzQWJzdHJhY3Q6IG5vZGUuaXNBYnN0cmFjdCk7CiAgICByZXR1cm4gY2xhc3Nlcy5yZWdpc3RlcihjbHMsIG5ldyBLQ2xhc3NEYXRhSW1wbChub2RlKSwgY2xhc3NFbnYpOwogIH0KCiAgVHlwZWRlZkVudGl0eSBnZXRUeXBlZGVmSW50ZXJuYWwoaXIuVHlwZWRlZiBub2RlKSB7CiAgICByZXR1cm4gdHlwZWRlZk1hcFtub2RlXSA/Pz0gX2dldFR5cGVkZWZDcmVhdGUobm9kZSk7CiAgfQoKICBUeXBlZGVmRW50aXR5IF9nZXRUeXBlZGVmQ3JlYXRlKGlyLlR5cGVkZWYgbm9kZSkgewogICAgYXNzZXJ0KAogICAgICAgICFlbnZJc0Nsb3NlZCwKICAgICAgICAiRW52aXJvbm1lbnQgb2YgJHRoaXMgaXMgY2xvc2VkLiBUcnlpbmcgdG8gY3JlYXRlICIKICAgICAgICAidHlwZWRlZiBmb3IgJG5vZGUuIik7CiAgICBJbmRleGVkTGlicmFyeSBsaWJyYXJ5ID0gZ2V0TGlicmFyeUludGVybmFsKG5vZGUuZW5jbG9zaW5nTGlicmFyeSk7CiAgICBJbmRleGVkVHlwZWRlZiB0eXBlZGVmID0gY3JlYXRlVHlwZWRlZihsaWJyYXJ5LCBub2RlLm5hbWUpOwogICAgVHlwZWRlZlR5cGUgdHlwZWRlZlR5cGUgPSBuZXcgVHlwZWRlZlR5cGUoCiAgICAgICAgdHlwZWRlZiwKICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgY29uc3QgRHluYW1pY1R5cGUoKSksCiAgICAgICAgZ2V0RGFydFR5cGUobm9kZS50eXBlKSk7CiAgICByZXR1cm4gdHlwZWRlZnMucmVnaXN0ZXIoCiAgICAgICAgdHlwZWRlZiwgbmV3IEtUeXBlZGVmRGF0YShub2RlLCB0eXBlZGVmLCB0eXBlZGVmVHlwZSkpOwogIH0KCiAgVHlwZVZhcmlhYmxlRW50aXR5IGdldFR5cGVWYXJpYWJsZUludGVybmFsKGlyLlR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgcmV0dXJuIHR5cGVWYXJpYWJsZU1hcFtub2RlXSA/Pz0gX2dldFR5cGVWYXJpYWJsZUNyZWF0ZShub2RlKTsKICB9CgogIFR5cGVWYXJpYWJsZUVudGl0eSBfZ2V0VHlwZVZhcmlhYmxlQ3JlYXRlKGlyLlR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgYXNzZXJ0KAogICAgICAgICFlbnZJc0Nsb3NlZCwKICAgICAgICAiRW52aXJvbm1lbnQgb2YgJHRoaXMgaXMgY2xvc2VkLiBUcnlpbmcgdG8gY3JlYXRlICIKICAgICAgICAidHlwZSB2YXJpYWJsZSBmb3IgJG5vZGUuIik7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgaXIuQ2xhc3MpIHsKICAgICAgaXIuQ2xhc3MgY2xzID0gbm9kZS5wYXJlbnQ7CiAgICAgIGludCBpbmRleCA9IGNscy50eXBlUGFyYW1ldGVycy5pbmRleE9mKG5vZGUpOwogICAgICByZXR1cm4gdHlwZVZhcmlhYmxlcy5yZWdpc3RlcigKICAgICAgICAgIGNyZWF0ZVR5cGVWYXJpYWJsZShnZXRDbGFzc0ludGVybmFsKGNscyksIG5vZGUubmFtZSwgaW5kZXgpLAogICAgICAgICAgbmV3IEtUeXBlVmFyaWFibGVEYXRhKG5vZGUpKTsKICAgIH0KICAgIGlmIChub2RlLnBhcmVudCBpcyBpci5GdW5jdGlvbk5vZGUpIHsKICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmMgPSBub2RlLnBhcmVudDsKICAgICAgaW50IGluZGV4ID0gZnVuYy50eXBlUGFyYW1ldGVycy5pbmRleE9mKG5vZGUpOwogICAgICBpZiAoZnVuYy5wYXJlbnQgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IGZ1bmMucGFyZW50OwogICAgICAgIGlyLkNsYXNzIGNscyA9IGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzOwogICAgICAgIHJldHVybiBnZXRUeXBlVmFyaWFibGVJbnRlcm5hbChjbHMudHlwZVBhcmFtZXRlcnNbaW5kZXhdKTsKICAgICAgfSBlbHNlIGlmIChmdW5jLnBhcmVudCBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICBpci5Qcm9jZWR1cmUgcHJvY2VkdXJlID0gZnVuYy5wYXJlbnQ7CiAgICAgICAgaWYgKHByb2NlZHVyZS5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkgewogICAgICAgICAgaXIuQ2xhc3MgY2xzID0gcHJvY2VkdXJlLmVuY2xvc2luZ0NsYXNzOwogICAgICAgICAgcmV0dXJuIGdldFR5cGVWYXJpYWJsZUludGVybmFsKGNscy50eXBlUGFyYW1ldGVyc1tpbmRleF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdHlwZVZhcmlhYmxlcy5yZWdpc3RlcigKICAgICAgICAgICAgICBjcmVhdGVUeXBlVmFyaWFibGUoCiAgICAgICAgICAgICAgICAgIGdldE1ldGhvZEludGVybmFsKHByb2NlZHVyZSksIG5vZGUubmFtZSwgaW5kZXgpLAogICAgICAgICAgICAgIG5ldyBLVHlwZVZhcmlhYmxlRGF0YShub2RlKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZ1bmMucGFyZW50IGlzIGlyLkxvY2FsRnVuY3Rpb24pIHsKICAgICAgICAvLyBFbnN1cmUgdGhhdCBsb2NhbCBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlcyBoYXZlIGJlZW4gY3JlYXRlZC4KICAgICAgICBnZXRMb2NhbEZ1bmN0aW9uKGZ1bmMucGFyZW50KTsKICAgICAgICByZXR1cm4gdHlwZVZhcmlhYmxlTWFwW25vZGVdOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbnN1cHBvcnRlZCBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlciBwYXJlbnQgJwogICAgICAgICAgICAnbm9kZSAke2Z1bmMucGFyZW50fS4nKTsKICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgcGFyYW1ldGVyIHR5cGUgbm9kZSAkbm9kZS4nKTsKICB9CgogIENvbnN0cnVjdG9yRW50aXR5IGdldENvbnN0cnVjdG9ySW50ZXJuYWwoaXIuTWVtYmVyIG5vZGUpIHsKICAgIHJldHVybiBjb25zdHJ1Y3Rvck1hcFtub2RlXSA/Pz0gX2dldENvbnN0cnVjdG9yQ3JlYXRlKG5vZGUpOwogIH0KCiAgQ29uc3RydWN0b3JFbnRpdHkgX2dldENvbnN0cnVjdG9yQ3JlYXRlKGlyLk1lbWJlciBub2RlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgIWVudklzQ2xvc2VkLAogICAgICAgICJFbnZpcm9ubWVudCBvZiAkdGhpcyBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgIgogICAgICAgICJjb25zdHJ1Y3RvciBmb3IgJG5vZGUuIik7CiAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlOwogICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MgPSBnZXRDbGFzc0ludGVybmFsKG5vZGUuZW5jbG9zaW5nQ2xhc3MpOwogICAgTmFtZSBuYW1lID0gZ2V0TmFtZShub2RlLm5hbWUpOwogICAgYm9vbCBpc0V4dGVybmFsID0gbm9kZS5pc0V4dGVybmFsOwoKICAgIEluZGV4ZWRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvcjsKICAgIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICAgIGNvbnN0cnVjdG9yID0gY3JlYXRlR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKGVuY2xvc2luZ0NsYXNzLCBuYW1lLAogICAgICAgICAgZ2V0UGFyYW1ldGVyU3RydWN0dXJlKGZ1bmN0aW9uTm9kZSwgaW5jbHVkZVR5cGVQYXJhbWV0ZXJzOiBmYWxzZSksCiAgICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICBmdW5jdGlvbk5vZGUgPSBub2RlLmZ1bmN0aW9uOwogICAgICBib29sIGlzRnJvbUVudmlyb25tZW50ID0gaXNFeHRlcm5hbCAmJgogICAgICAgICAgbmFtZS50ZXh0ID09ICdmcm9tRW52aXJvbm1lbnQnICYmCiAgICAgICAgICBjb25zdCBbJ2ludCcsICdib29sJywgJ1N0cmluZyddLmNvbnRhaW5zKGVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgICBjb25zdHJ1Y3RvciA9IGNyZWF0ZUZhY3RvcnlDb25zdHJ1Y3RvcihlbmNsb3NpbmdDbGFzcywgbmFtZSwKICAgICAgICAgIGdldFBhcmFtZXRlclN0cnVjdHVyZShmdW5jdGlvbk5vZGUsIGluY2x1ZGVUeXBlUGFyYW1ldGVyczogZmFsc2UpLAogICAgICAgICAgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwKICAgICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCwKICAgICAgICAgIGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3I6IGlzRnJvbUVudmlyb25tZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENvbnZlcnQgYG5vZGUubG9jYXRpb25gIHRvIGEgW1NvdXJjZVNwYW5dLgogICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgY29uc3RydWN0b3Igbm9kZTogJHtub2RlfS4iKTsKICAgIH0KICAgIHJldHVybiBtZW1iZXJzLnJlZ2lzdGVyPEluZGV4ZWRDb25zdHJ1Y3RvciwgS0NvbnN0cnVjdG9yRGF0YT4oCiAgICAgICAgY29uc3RydWN0b3IsIG5ldyBLQ29uc3RydWN0b3JEYXRhSW1wbChub2RlLCBmdW5jdGlvbk5vZGUpKTsKICB9CgogIEZ1bmN0aW9uRW50aXR5IGdldE1ldGhvZEludGVybmFsKGlyLlByb2NlZHVyZSBub2RlKSB7CiAgICAvLyBbX2dldE1ldGhvZENyZWF0ZV0gaW5zZXJ0cyB0aGUgY3JlYXRlZCBmdW5jdGlvbiBpbiBbbWV0aG9kTWFwXSBzbyB3ZQogICAgLy8gZG9uJ3QgbmVlZCB0byB1c2UgPz89IGhlcmUuCiAgICByZXR1cm4gbWV0aG9kTWFwW25vZGVdID8/IF9nZXRNZXRob2RDcmVhdGUobm9kZSk7CiAgfQoKICBGdW5jdGlvbkVudGl0eSBfZ2V0TWV0aG9kQ3JlYXRlKGlyLlByb2NlZHVyZSBub2RlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgIWVudklzQ2xvc2VkLAogICAgICAgICJFbnZpcm9ubWVudCBvZiAkdGhpcyBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgIgogICAgICAgICJmdW5jdGlvbiBmb3IgJG5vZGUuIik7CiAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbjsKICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeTsKICAgIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzOwogICAgaWYgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBlbmNsb3NpbmdDbGFzcyA9IGdldENsYXNzSW50ZXJuYWwobm9kZS5lbmNsb3NpbmdDbGFzcyk7CiAgICAgIGxpYnJhcnkgPSBlbmNsb3NpbmdDbGFzcy5saWJyYXJ5OwogICAgfSBlbHNlIHsKICAgICAgbGlicmFyeSA9IGdldExpYnJhcnlJbnRlcm5hbChub2RlLmVuY2xvc2luZ0xpYnJhcnkpOwogICAgfQogICAgTmFtZSBuYW1lID0gZ2V0TmFtZShub2RlLm5hbWUpOwogICAgYm9vbCBpc1N0YXRpYyA9IG5vZGUuaXNTdGF0aWM7CiAgICBib29sIGlzRXh0ZXJuYWwgPSBub2RlLmlzRXh0ZXJuYWw7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgYCYmICFub2RlLmlzRXh0ZXJuYWxgIHdoZW4gIzMxMjMzIGlzIGZpeGVkLgogICAgYm9vbCBpc0Fic3RyYWN0ID0gbm9kZS5pc0Fic3RyYWN0ICYmICFub2RlLmlzRXh0ZXJuYWw7CiAgICBBc3luY01hcmtlciBhc3luY01hcmtlciA9IGdldEFzeW5jTWFya2VyKG5vZGUuZnVuY3Rpb24pOwogICAgc3dpdGNoIChub2RlLmtpbmQpIHsKICAgICAgY2FzZSBpci5Qcm9jZWR1cmVLaW5kLkZhY3Rvcnk6CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjcmVhdGUgbWV0aG9kIGZyb20gZmFjdG9yeS4iKTsKICAgICAgY2FzZSBpci5Qcm9jZWR1cmVLaW5kLkdldHRlcjoKICAgICAgICBmdW5jdGlvbiA9IGNyZWF0ZUdldHRlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgaXIuUHJvY2VkdXJlS2luZC5NZXRob2Q6CiAgICAgIGNhc2UgaXIuUHJvY2VkdXJlS2luZC5PcGVyYXRvcjoKICAgICAgICBmdW5jdGlvbiA9IGNyZWF0ZU1ldGhvZChsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwKICAgICAgICAgICAgZ2V0UGFyYW1ldGVyU3RydWN0dXJlKG5vZGUuZnVuY3Rpb24pLCBhc3luY01hcmtlciwKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBpci5Qcm9jZWR1cmVLaW5kLlNldHRlcjoKICAgICAgICBhc3NlcnQoYXN5bmNNYXJrZXIgPT0gQXN5bmNNYXJrZXIuU1lOQyk7CiAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVTZXR0ZXIobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUuc2V0dGVyLAogICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgbWVtYmVycy5yZWdpc3RlcjxJbmRleGVkRnVuY3Rpb24sIEtGdW5jdGlvbkRhdGE+KAogICAgICAgIGZ1bmN0aW9uLCBuZXcgS0Z1bmN0aW9uRGF0YUltcGwobm9kZSwgbm9kZS5mdW5jdGlvbikpOwogICAgLy8gV2UgbmVlZCB0byByZWdpc3RlciB0aGUgZnVuY3Rpb24gYmVmb3JlIGNyZWF0aW5nIHRoZSB0eXBlIHZhcmlhYmxlcy4KICAgIG1ldGhvZE1hcFtub2RlXSA9IGZ1bmN0aW9uOwogICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gbm9kZS5mdW5jdGlvbi50eXBlUGFyYW1ldGVycykgewogICAgICBnZXRUeXBlVmFyaWFibGUodHlwZVBhcmFtZXRlcik7CiAgICB9CiAgICByZXR1cm4gZnVuY3Rpb247CiAgfQoKICBGaWVsZEVudGl0eSBnZXRGaWVsZEludGVybmFsKGlyLkZpZWxkIG5vZGUpIHsKICAgIHJldHVybiBmaWVsZE1hcFtub2RlXSA/Pz0gX2dldEZpZWxkQ3JlYXRlKG5vZGUpOwogIH0KCiAgRmllbGRFbnRpdHkgX2dldEZpZWxkQ3JlYXRlKGlyLkZpZWxkIG5vZGUpIHsKICAgIGFzc2VydCgKICAgICAgICAhZW52SXNDbG9zZWQsCiAgICAgICAgIkVudmlyb25tZW50IG9mICR0aGlzIGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGNyZWF0ZSAiCiAgICAgICAgImZpZWxkIGZvciAkbm9kZS4iKTsKICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeTsKICAgIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzOwogICAgaWYgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBlbmNsb3NpbmdDbGFzcyA9IGdldENsYXNzSW50ZXJuYWwobm9kZS5lbmNsb3NpbmdDbGFzcyk7CiAgICAgIGxpYnJhcnkgPSBlbmNsb3NpbmdDbGFzcy5saWJyYXJ5OwogICAgfSBlbHNlIHsKICAgICAgbGlicmFyeSA9IGdldExpYnJhcnlJbnRlcm5hbChub2RlLmVuY2xvc2luZ0xpYnJhcnkpOwogICAgfQogICAgTmFtZSBuYW1lID0gZ2V0TmFtZShub2RlLm5hbWUpOwogICAgYm9vbCBpc1N0YXRpYyA9IG5vZGUuaXNTdGF0aWM7CiAgICBJbmRleGVkRmllbGQgZmllbGQgPSBjcmVhdGVGaWVsZChsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsCiAgICAgICAgaXNBc3NpZ25hYmxlOiBub2RlLmlzTXV0YWJsZSwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgcmV0dXJuIG1lbWJlcnMucmVnaXN0ZXI8SW5kZXhlZEZpZWxkLCBLRmllbGREYXRhPigKICAgICAgICBmaWVsZCwgbmV3IEtGaWVsZERhdGFJbXBsKG5vZGUpKTsKICB9CgogIGJvb2wgY2hlY2tGYW1pbHkoRW50aXR5IGVudGl0eSkgewogICAgYXNzZXJ0KAogICAgICAgICckZW50aXR5Jy5zdGFydHNXaXRoKGtFbGVtZW50UHJlZml4KSwKICAgICAgICBmYWlsZWRBdChlbnRpdHksCiAgICAgICAgICAgICJVbmV4cGVjdGVkIGVudGl0eSAkZW50aXR5LCBleHBlY3RlZCBmYW1pbHkgJGtFbGVtZW50UHJlZml4LiIpKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8vIE5hdGl2ZUJhc2ljRGF0YSBpcyBuZWVkIGZvciBjb21wdXRhdGlvbiBvZiB0aGUgZGVmYXVsdCBzdXBlciBjbGFzcy4KICBAb3ZlcnJpZGUKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IG5hdGl2ZUJhc2ljRGF0YSA9PiBfZnJvbnRlbmRTdHJhdGVneS5uYXRpdmVCYXNpY0RhdGE7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQ29tcG9uZW50KGlyLkNvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGVudi5hZGRDb21wb25lbnQoY29tcG9uZW50KTsKICB9CgogIEJlaGF2aW9yQnVpbGRlciBnZXQgbmF0aXZlQmVoYXZpb3JCdWlsZGVyID0+CiAgICAgIF9uYXRpdmVCZWhhdmlvckJ1aWxkZXIgPz89IG5ldyBLZXJuZWxCZWhhdmlvckJ1aWxkZXIoZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgY29tbW9uRWxlbWVudHMsIG5hdGl2ZUJhc2ljRGF0YSwgcmVwb3J0ZXIsIG9wdGlvbnMpOwoKICBSZXNvbHV0aW9uSW1wYWN0IGNvbXB1dGVXb3JsZEltcGFjdChLTWVtYmVyIG1lbWJlciwKICAgICAgVmFyaWFibGVTY29wZU1vZGVsIHZhcmlhYmxlU2NvcGVNb2RlbCwgU2V0PFByYWdtYUFubm90YXRpb24+IGFubm90YXRpb25zLAogICAgICB7SW1wYWN0QnVpbGRlckRhdGEgaW1wYWN0QnVpbGRlckRhdGF9KSB7CiAgICBLTWVtYmVyRGF0YSBtZW1iZXJEYXRhID0gbWVtYmVycy5nZXREYXRhKG1lbWJlcik7CiAgICBpci5NZW1iZXIgbm9kZSA9IG1lbWJlckRhdGEubm9kZTsKCiAgICBpZiAoaW1wYWN0QnVpbGRlckRhdGEgIT0gbnVsbCkgewogICAgICBpZiAoaW1wYWN0QnVpbGRlckRhdGEudHlwZU1hcHNGb3JUZXN0aW5nICE9IG51bGwpIHsKICAgICAgICB0eXBlTWFwc0ZvclRlc3RpbmcgPz89IHt9OwogICAgICAgIHR5cGVNYXBzRm9yVGVzdGluZ1ttZW1iZXJdID0gaW1wYWN0QnVpbGRlckRhdGEudHlwZU1hcHNGb3JUZXN0aW5nOwogICAgICB9CiAgICAgIEltcGFjdERhdGEgaW1wYWN0RGF0YSA9IGltcGFjdEJ1aWxkZXJEYXRhLmltcGFjdERhdGE7CiAgICAgIG1lbWJlckRhdGEuc3RhdGljVHlwZXMgPSBpbXBhY3RCdWlsZGVyRGF0YS5jYWNoZWRTdGF0aWNUeXBlczsKICAgICAgS2VybmVsSW1wYWN0Q29udmVydGVyIGNvbnZlcnRlciA9IG5ldyBLZXJuZWxJbXBhY3RDb252ZXJ0ZXIoCiAgICAgICAgICB0aGlzLCBtZW1iZXIsIHJlcG9ydGVyLCBvcHRpb25zLCBfY29uc3RhbnRWYWx1ZWZpZXIpOwogICAgICByZXR1cm4gY29udmVydGVyLmNvbnZlcnQoaW1wYWN0RGF0YSk7CiAgICB9IGVsc2UgewogICAgICBLZXJuZWxJbXBhY3RCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgS2VybmVsSW1wYWN0QnVpbGRlcigKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBtZW1iZXIsCiAgICAgICAgICByZXBvcnRlciwKICAgICAgICAgIG9wdGlvbnMsCiAgICAgICAgICB2YXJpYWJsZVNjb3BlTW9kZWwsCiAgICAgICAgICBhbm5vdGF0aW9ucywKICAgICAgICAgIF9jb25zdGFudFZhbHVlZmllcik7CiAgICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICAgIHR5cGVNYXBzRm9yVGVzdGluZyA/Pz0ge307CiAgICAgICAgdHlwZU1hcHNGb3JUZXN0aW5nW21lbWJlcl0gPSBidWlsZGVyLnR5cGVNYXBzRm9yVGVzdGluZyA9IHt9OwogICAgICB9CiAgICAgIG5vZGUuYWNjZXB0KGJ1aWxkZXIpOwogICAgICBtZW1iZXJEYXRhLnN0YXRpY1R5cGVzID0gYnVpbGRlci5nZXRTdGF0aWNUeXBlQ2FjaGUoKTsKICAgICAgcmV0dXJuIGJ1aWxkZXIuaW1wYWN0QnVpbGRlcjsKICAgIH0KICB9CgogIFN0YXRpY1R5cGVDYWNoZSBnZXRDYWNoZWRTdGF0aWNUeXBlcyhLTWVtYmVyIG1lbWJlcikgewogICAgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzID0gbWVtYmVycy5nZXREYXRhKG1lbWJlcikuc3RhdGljVHlwZXM7CiAgICBhc3NlcnQoc3RhdGljVHlwZXMgIT0gbnVsbCwgIk5vIHN0YXRpYyB0eXBlcyBjYWNoZWQgZm9yICRtZW1iZXIuIik7CiAgICByZXR1cm4gc3RhdGljVHlwZXM7CiAgfQoKICBNYXA8aXIuRXhwcmVzc2lvbiwgVHlwZU1hcD4gZ2V0VHlwZU1hcHNGb3JUZXN0aW5nKEtNZW1iZXIgbWVtYmVyKSB7CiAgICByZXR1cm4gdHlwZU1hcHNGb3JUZXN0aW5nW21lbWJlcl07CiAgfQoKICAvLy8gUmV0dXJucyB0aGUga2VybmVsIFtpci5Qcm9jZWR1cmVdIG5vZGUgZm9yIHRoZSBbbWV0aG9kXS4KICBpci5Qcm9jZWR1cmUgX2xvb2t1cFByb2NlZHVyZShLRnVuY3Rpb24gbWV0aG9kKSB7CiAgICByZXR1cm4gbWVtYmVycy5nZXREYXRhKG1ldGhvZCkubm9kZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkxpYnJhcnkgZ2V0TGlicmFyeU5vZGUoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gbGlicmFyaWVzLmdldERhdGEobGlicmFyeSkubGlicmFyeTsKICB9CgogIEBvdmVycmlkZQogIExvY2FsIGdldExvY2FsRnVuY3Rpb24oaXIuTG9jYWxGdW5jdGlvbiBub2RlKSB7CiAgICBLTG9jYWxGdW5jdGlvbiBsb2NhbEZ1bmN0aW9uID0gbG9jYWxGdW5jdGlvbk1hcFtub2RlXTsKICAgIGlmIChsb2NhbEZ1bmN0aW9uID09IG51bGwpIHsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQ7CiAgICAgIEVudGl0eSBleGVjdXRhYmxlQ29udGV4dDsKICAgICAgaXIuVHJlZU5vZGUgcGFyZW50ID0gbm9kZS5wYXJlbnQ7CiAgICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCkgewogICAgICAgIGlmIChwYXJlbnQgaXMgaXIuTWVtYmVyKSB7CiAgICAgICAgICBleGVjdXRhYmxlQ29udGV4dCA9IG1lbWJlckNvbnRleHQgPSBnZXRNZW1iZXIocGFyZW50KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50IGlzIGlyLkxvY2FsRnVuY3Rpb24pIHsKICAgICAgICAgIEtMb2NhbEZ1bmN0aW9uIGxvY2FsRnVuY3Rpb24gPSBnZXRMb2NhbEZ1bmN0aW9uKHBhcmVudCk7CiAgICAgICAgICBleGVjdXRhYmxlQ29udGV4dCA9IGxvY2FsRnVuY3Rpb247CiAgICAgICAgICBtZW1iZXJDb250ZXh0ID0gbG9jYWxGdW5jdGlvbi5tZW1iZXJDb250ZXh0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7CiAgICAgIH0KICAgICAgU3RyaW5nIG5hbWU7CiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbjsKICAgICAgaWYgKG5vZGUgaXMgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbikgewogICAgICAgIG5hbWUgPSBub2RlLnZhcmlhYmxlLm5hbWU7CiAgICAgICAgZnVuY3Rpb24gPSBub2RlLmZ1bmN0aW9uOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgICAgZnVuY3Rpb24gPSBub2RlLmZ1bmN0aW9uOwogICAgICB9CiAgICAgIGxvY2FsRnVuY3Rpb24gPSBsb2NhbEZ1bmN0aW9uTWFwW25vZGVdID0KICAgICAgICAgIG5ldyBLTG9jYWxGdW5jdGlvbihuYW1lLCBtZW1iZXJDb250ZXh0LCBleGVjdXRhYmxlQ29udGV4dCwgbm9kZSk7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIExpc3Q8S0xvY2FsVHlwZVZhcmlhYmxlPiB0eXBlVmFyaWFibGVzID0gPEtMb2NhbFR5cGVWYXJpYWJsZT5bXTsKICAgICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICB0eXBlVmFyaWFibGVzLmFkZCh0eXBlVmFyaWFibGVNYXBbdHlwZVBhcmFtZXRlcl0gPQogICAgICAgICAgICBuZXcgS0xvY2FsVHlwZVZhcmlhYmxlKGxvY2FsRnVuY3Rpb24sIHR5cGVQYXJhbWV0ZXIubmFtZSwgaW5kZXgpKTsKICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICAgIGluZGV4ID0gMDsKICAgICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICB0eXBlVmFyaWFibGVzW2luZGV4XS5ib3VuZCA9IGdldERhcnRUeXBlKHR5cGVQYXJhbWV0ZXIuYm91bmQpOwogICAgICAgIHR5cGVWYXJpYWJsZXNbaW5kZXhdLmRlZmF1bHRUeXBlID0KICAgICAgICAgICAgZ2V0RGFydFR5cGUodHlwZVBhcmFtZXRlci5kZWZhdWx0VHlwZSk7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgICBsb2NhbEZ1bmN0aW9uLmZ1bmN0aW9uVHlwZSA9IGdldEZ1bmN0aW9uVHlwZShmdW5jdGlvbik7CiAgICB9CiAgICByZXR1cm4gbG9jYWxGdW5jdGlvbjsKICB9CgogIGJvb2wgX2ltcGxlbWVudHNGdW5jdGlvbihJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIE9yZGVyZWRUeXBlU2V0IG9yZGVyZWRUeXBlU2V0ID0gZGF0YS5vcmRlcmVkVHlwZVNldDsKICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0gb3JkZXJlZFR5cGVTZXQuYXNJbnN0YW5jZU9mKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3MsCiAgICAgICAgZ2V0SGllcmFyY2h5RGVwdGgoY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcykpOwogICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGRhdGEuY2FsbFR5cGUgaXMgRnVuY3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuVHlwZWRlZiBnZXRUeXBlZGVmTm9kZShUeXBlZGVmRW50aXR5IHR5cGVkZWYpIHsKICAgIHJldHVybiBfZ2V0VHlwZWRlZk5vZGUodHlwZWRlZik7CiAgfQoKICBAb3ZlcnJpZGUKICBGb3JlaWduS2luZCBnZXRGb3JlaWduS2luZChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChjb21tb25FbGVtZW50cy5pc0ZvcmVpZ25IZWxwZXIoZ2V0TWVtYmVyKG5vZGUudGFyZ2V0KSkpIHsKICAgICAgc3dpdGNoIChub2RlLnRhcmdldC5uYW1lLm5hbWUpIHsKICAgICAgICBjYXNlIElkZW50aWZpZXJzLkpTOgogICAgICAgICAgcmV0dXJuIEZvcmVpZ25LaW5kLkpTOwogICAgICAgIGNhc2UgSWRlbnRpZmllcnMuSlNfQlVJTFRJTjoKICAgICAgICAgIHJldHVybiBGb3JlaWduS2luZC5KU19CVUlMVElOOwogICAgICAgIGNhc2UgSWRlbnRpZmllcnMuSlNfRU1CRURERURfR0xPQkFMOgogICAgICAgICAgcmV0dXJuIEZvcmVpZ25LaW5kLkpTX0VNQkVEREVEX0dMT0JBTDsKICAgICAgICBjYXNlIElkZW50aWZpZXJzLkpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UOgogICAgICAgICAgcmV0dXJuIEZvcmVpZ25LaW5kLkpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gRm9yZWlnbktpbmQuTk9ORTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0SW50ZXJmYWNlVHlwZUZvckpzSW50ZXJjZXB0b3JDYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoICE9IDEgfHwKICAgICAgICBub2RlLmFyZ3VtZW50cy5uYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZShDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UKTsKICAgIH0KICAgIGlyLk5vZGUgYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0OwogICAgaWYgKGFyZ3VtZW50IGlzIGlyLlR5cGVMaXRlcmFsICYmIGFyZ3VtZW50LnR5cGUgaXMgaXIuSW50ZXJmYWNlVHlwZSkgewogICAgICByZXR1cm4gZ2V0SW50ZXJmYWNlVHlwZShhcmd1bWVudC50eXBlKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgdGhpcyBmb3IgbGF0ZXIgdXNlLgogIEBvdmVycmlkZQogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRMb2FkKGlyLkZpZWxkIGZpZWxkLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgIHtib29sIGlzSnNJbnRlcm9wfSkgewogICAgRGFydFR5cGUgdHlwZSA9IGdldERhcnRUeXBlKGZpZWxkLnR5cGUpOwogICAgcmV0dXJuIG5hdGl2ZUJlaGF2aW9yQnVpbGRlci5idWlsZEZpZWxkTG9hZEJlaGF2aW9yKHR5cGUsCiAgICAgICAgY3JlYXRlc0Fubm90YXRpb25zLCByZXR1cm5zQW5ub3RhdGlvbnMsIHR5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiBmYWxzZSksCiAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIHRoaXMgZm9yIGxhdGVyIHVzZS4KICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckZpZWxkU3RvcmUoaXIuRmllbGQgZmllbGQpIHsKICAgIERhcnRUeXBlIHR5cGUgPSBnZXREYXJ0VHlwZShmaWVsZC50eXBlKTsKICAgIHJldHVybiBuYXRpdmVCZWhhdmlvckJ1aWxkZXIuYnVpbGRGaWVsZFN0b3JlQmVoYXZpb3IodHlwZSk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSB0aGlzIGZvciBsYXRlciB1c2UuCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JNZXRob2QoaXIuTWVtYmVyIG1lbWJlciwKICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMsIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zLAogICAgICB7Ym9vbCBpc0pzSW50ZXJvcH0pIHsKICAgIERhcnRUeXBlIHR5cGU7CiAgICBpZiAobWVtYmVyIGlzIGlyLlByb2NlZHVyZSkgewogICAgICB0eXBlID0gZ2V0RnVuY3Rpb25UeXBlKG1lbWJlci5mdW5jdGlvbik7CiAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICB0eXBlID0gZ2V0RnVuY3Rpb25UeXBlKG1lbWJlci5mdW5jdGlvbik7CiAgICB9IGVsc2UgewogICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiVW5leHBlY3RlZCBtZXRob2Qgbm9kZSAkbWVtYmVyLiIpOwogICAgfQogICAgcmV0dXJuIG5hdGl2ZUJlaGF2aW9yQnVpbGRlci5idWlsZE1ldGhvZEJlaGF2aW9yKHR5cGUsIGNyZWF0ZXNBbm5vdGF0aW9ucywKICAgICAgICByZXR1cm5zQW5ub3RhdGlvbnMsIHR5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiBmYWxzZSksCiAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKTsKICB9CgogIEluZGV4ZWRMaWJyYXJ5IGNyZWF0ZUxpYnJhcnkoU3RyaW5nIG5hbWUsIFVyaSBjYW5vbmljYWxVcmkpIHsKICAgIHJldHVybiBuZXcgS0xpYnJhcnkobmFtZSwgY2Fub25pY2FsVXJpKTsKICB9CgogIEluZGV4ZWRDbGFzcyBjcmVhdGVDbGFzcyhMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBpc0Fic3RyYWN0fSkgewogICAgcmV0dXJuIG5ldyBLQ2xhc3MobGlicmFyeSwgbmFtZSwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgfQoKICBJbmRleGVkVHlwZWRlZiBjcmVhdGVUeXBlZGVmKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBuZXcgS1R5cGVkZWYobGlicmFyeSwgbmFtZSk7CiAgfQoKICBUeXBlVmFyaWFibGVFbnRpdHkgY3JlYXRlVHlwZVZhcmlhYmxlKAogICAgICBFbnRpdHkgdHlwZURlY2xhcmF0aW9uLCBTdHJpbmcgbmFtZSwgaW50IGluZGV4KSB7CiAgICByZXR1cm4gbmV3IEtUeXBlVmFyaWFibGUodHlwZURlY2xhcmF0aW9uLCBuYW1lLCBpbmRleCk7CiAgfQoKICBJbmRleGVkQ29uc3RydWN0b3IgY3JlYXRlR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzLAogICAgICBOYW1lIG5hbWUsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHtib29sIGlzRXh0ZXJuYWwsIGJvb2wgaXNDb25zdH0pIHsKICAgIHJldHVybiBuZXcgS0dlbmVyYXRpdmVDb25zdHJ1Y3RvcihlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQ29uc3Q6IGlzQ29uc3QpOwogIH0KCiAgSW5kZXhlZENvbnN0cnVjdG9yIGNyZWF0ZUZhY3RvcnlDb25zdHJ1Y3RvcihDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcywKICAgICAgTmFtZSBuYW1lLCBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB7Ym9vbCBpc0V4dGVybmFsLCBib29sIGlzQ29uc3QsIGJvb2wgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3Rvcn0pIHsKICAgIHJldHVybiBuZXcgS0ZhY3RvcnlDb25zdHJ1Y3RvcihlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsCiAgICAgICAgaXNDb25zdDogaXNDb25zdCwKICAgICAgICBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yOiBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yKTsKICB9CgogIEluZGV4ZWRGdW5jdGlvbiBjcmVhdGVHZXR0ZXIoTGlicmFyeUVudGl0eSBsaWJyYXJ5LAogICAgICBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLCBBc3luY01hcmtlciBhc3luY01hcmtlciwKICAgICAge2Jvb2wgaXNTdGF0aWMsIGJvb2wgaXNFeHRlcm5hbCwgYm9vbCBpc0Fic3RyYWN0fSkgewogICAgcmV0dXJuIG5ldyBLR2V0dGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBhc3luY01hcmtlciwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogIH0KCiAgSW5kZXhlZEZ1bmN0aW9uIGNyZWF0ZU1ldGhvZCgKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LAogICAgICBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcywKICAgICAgTmFtZSBuYW1lLAogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICBBc3luY01hcmtlciBhc3luY01hcmtlciwKICAgICAge2Jvb2wgaXNTdGF0aWMsCiAgICAgIGJvb2wgaXNFeHRlcm5hbCwKICAgICAgYm9vbCBpc0Fic3RyYWN0fSkgewogICAgcmV0dXJuIG5ldyBLTWV0aG9kKAogICAgICAgIGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGFzeW5jTWFya2VyLAogICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgfQoKICBJbmRleGVkRnVuY3Rpb24gY3JlYXRlU2V0dGVyKAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU3RhdGljLCBib29sIGlzRXh0ZXJuYWwsIGJvb2wgaXNBYnN0cmFjdH0pIHsKICAgIHJldHVybiBuZXcgS1NldHRlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogIH0KCiAgSW5kZXhlZEZpZWxkIGNyZWF0ZUZpZWxkKAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU3RhdGljLCBib29sIGlzQXNzaWduYWJsZSwgYm9vbCBpc0NvbnN0fSkgewogICAgcmV0dXJuIG5ldyBLRmllbGQobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0Fzc2lnbmFibGU6IGlzQXNzaWduYWJsZSwgaXNDb25zdDogaXNDb25zdCk7CiAgfQp9CgpjbGFzcyBLZXJuZWxFbGVtZW50RW52aXJvbm1lbnQgZXh0ZW5kcyBFbGVtZW50RW52aXJvbm1lbnQKICAgIGltcGxlbWVudHMgS0VsZW1lbnRFbnZpcm9ubWVudCB7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwOwoKICBLZXJuZWxFbGVtZW50RW52aXJvbm1lbnQodGhpcy5lbGVtZW50TWFwKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0IGR5bmFtaWNUeXBlID0+IGNvbnN0IER5bmFtaWNUeXBlKCk7CgogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IG1haW5MaWJyYXJ5ID0+IGVsZW1lbnRNYXAuX21haW5MaWJyYXJ5OwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgbWFpbkZ1bmN0aW9uID0+IGVsZW1lbnRNYXAuX21haW5GdW5jdGlvbjsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TGlicmFyeUVudGl0eT4gZ2V0IGxpYnJhcmllcyA9PiBlbGVtZW50TWFwLmxpYnJhcnlMaXN0SW50ZXJuYWw7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRMaWJyYXJ5TmFtZShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9nZXRMaWJyYXJ5TmFtZShsaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0VGhpc1R5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRUaGlzVHlwZShjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRSYXdUeXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldFJhd1R5cGUoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNHZW5lcmljQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZ2V0VGhpc1R5cGUoY2xzKS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTWl4aW5BcHBsaWNhdGlvbihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9pc01peGluQXBwbGljYXRpb24oY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChUeXBlVmFyaWFibGVFbnRpdHkgdHlwZVZhcmlhYmxlKSB7CiAgICBpZiAodHlwZVZhcmlhYmxlIGlzIEtMb2NhbFR5cGVWYXJpYWJsZSkgcmV0dXJuIHR5cGVWYXJpYWJsZS5ib3VuZDsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFR5cGVWYXJpYWJsZUJvdW5kKHR5cGVWYXJpYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgIENsYXNzRW50aXR5IGNscywgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5fZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5fZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKGZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEZpZWxkVHlwZShGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldEZpZWxkVHlwZShmaWVsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0TG9jYWxGdW5jdGlvblR5cGUoY292YXJpYW50IEtMb2NhbEZ1bmN0aW9uIGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gZnVuY3Rpb24uZnVuY3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldEZpZWxkQ29uc3RhbnRGb3JUZXN0aW5nKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5fZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oZmllbGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VW5hbGlhc2VkVHlwZShEYXJ0VHlwZSB0eXBlKSA9PiB0eXBlOwoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBsb29rdXBDb25zdHJ1Y3RvcihDbGFzc0VudGl0eSBjbHMsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IGVsZW1lbnRNYXAubG9va3VwQ29uc3RydWN0b3IoY2xzLCBuYW1lKTsKICAgIGlmIChjb25zdHJ1Y3RvciA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJUaGUgY29uc3RydWN0b3IgJyRuYW1lJyB3YXMgbm90IGZvdW5kIGluIGNsYXNzICcke2Nscy5uYW1lfScgIgogICAgICAgICAgImluIGxpYnJhcnkgJHtjbHMubGlicmFyeS5jYW5vbmljYWxVcml9LiIpOwogICAgfQogICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZSwgYm9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBlbGVtZW50TWFwLmxvb2t1cENsYXNzTWVtYmVyKGNscywgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgaWYgKG1lbWJlciA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIHRocm93IGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiVGhlIG1lbWJlciAnJG5hbWUnIHdhcyBub3QgZm91bmQgaW4gJHtjbHMubmFtZX0uIik7CiAgICB9CiAgICByZXR1cm4gbWVtYmVyOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0U3VwZXJDbGFzcyhDbGFzc0VudGl0eSBjbHMsCiAgICAgIHtib29sIHNraXBVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbnM6IGZhbHNlfSkgewogICAgYXNzZXJ0KGVsZW1lbnRNYXAuY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gZWxlbWVudE1hcC5nZXRTdXBlclR5cGUoY2xzKT8uZWxlbWVudDsKICAgIGlmIChza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zKSB7CiAgICAgIHdoaWxlIChzdXBlcmNsYXNzICE9IG51bGwgJiYKICAgICAgICAgIGVsZW1lbnRNYXAuX2lzVW5uYW1lZE1peGluQXBwbGljYXRpb24oc3VwZXJjbGFzcykpIHsKICAgICAgICBzdXBlcmNsYXNzID0gZWxlbWVudE1hcC5nZXRTdXBlclR5cGUoc3VwZXJjbGFzcyk/LmVsZW1lbnQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdXBlcmNsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoU3VwZXJ0eXBlKENsYXNzRW50aXR5IGNscywgdm9pZCBmKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaFN1cGVydHlwZShjbHMsIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTWl4aW4oQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgbWl4aW4pKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoTWl4aW4oY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywgZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDbGFzc01lbWJlcigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgZGVjbGFyZXIsIE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoQ2xhc3NNZW1iZXIoY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hDb25zdHJ1Y3RvcihjbHMsIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTGlicmFyeU1lbWJlcigKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hMaWJyYXJ5TWVtYmVyKGxpYnJhcnksIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cExpYnJhcnlNZW1iZXIoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZSwgYm9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBlbGVtZW50TWFwLmxvb2t1cExpYnJhcnlNZW1iZXIobGlicmFyeSwgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgaWYgKG1lbWJlciA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiVGhlIG1lbWJlciAnJHtuYW1lfScgd2FzIG5vdCBmb3VuZCBpbiBsaWJyYXJ5ICcke2xpYnJhcnkubmFtZX0nLiIpOwogICAgfQogICAgcmV0dXJuIG1lbWJlcjsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGxvb2t1cENsYXNzKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pIHsKICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnRNYXAubG9va3VwQ2xhc3MobGlicmFyeSwgbmFtZSk7CiAgICBpZiAoY2xzID09IG51bGwgJiYgcmVxdWlyZWQpIHsKICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJUaGUgY2xhc3MgJyRuYW1lJyAgd2FzIG5vdCBmb3VuZCBpbiBsaWJyYXJ5ICcke2xpYnJhcnkubmFtZX0nLiIpOwogICAgfQogICAgcmV0dXJuIGNsczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENsYXNzKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgdm9pZCBmKENsYXNzRW50aXR5IGNscykpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hDbGFzcyhsaWJyYXJ5LCBmKTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgbG9va3VwTGlicmFyeShVcmkgdXJpLCB7Ym9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBlbGVtZW50TWFwLmxvb2t1cExpYnJhcnkodXJpKTsKICAgIGlmIChsaWJyYXJ5ID09IG51bGwgJiYgcmVxdWlyZWQpIHsKICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlRoZSBsaWJyYXJ5ICckdXJpJyB3YXMgbm90IGZvdW5kLiIpOwogICAgfQogICAgcmV0dXJuIGxpYnJhcnk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRGVmZXJyZWRMb2FkTGlicmFyeUdldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAvLyBUaGUgZnJvbnQtZW5kIGdlbmVyYXRlcyB0aGUgZ2V0dGVyIG9mIGxvYWRMaWJyYXJ5IGV4cGxpY2l0bHkgYXMgY29kZQogICAgLy8gc28gdGhlcmUgaXMgbm8gaW1wbGljaXQgcmVwcmVzZW50YXRpb24gYmFzZWQgb24gYSAibG9hZExpYnJhcnkiIG1lbWJlci4KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldExpYnJhcnlNZXRhZGF0YShjb3ZhcmlhbnQgSW5kZXhlZExpYnJhcnkgbGlicmFyeSkgewogICAgYXNzZXJ0KGVsZW1lbnRNYXAuY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgS0xpYnJhcnlEYXRhIGxpYnJhcnlEYXRhID0gZWxlbWVudE1hcC5saWJyYXJpZXMuZ2V0RGF0YShsaWJyYXJ5KTsKICAgIHJldHVybiBsaWJyYXJ5RGF0YS5nZXRNZXRhZGF0YShlbGVtZW50TWFwKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gZ2V0SW1wb3J0cyhjb3ZhcmlhbnQgSW5kZXhlZExpYnJhcnkgbGlicmFyeSkgewogICAgYXNzZXJ0KGVsZW1lbnRNYXAuY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgS0xpYnJhcnlEYXRhIGxpYnJhcnlEYXRhID0gZWxlbWVudE1hcC5saWJyYXJpZXMuZ2V0RGF0YShsaWJyYXJ5KTsKICAgIHJldHVybiBsaWJyYXJ5RGF0YS5nZXRJbXBvcnRzKGVsZW1lbnRNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0Q2xhc3NNZXRhZGF0YShjb3ZhcmlhbnQgSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGVsZW1lbnRNYXAuY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGNsYXNzRGF0YSA9IGVsZW1lbnRNYXAuY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICByZXR1cm4gY2xhc3NEYXRhLmdldE1ldGFkYXRhKGVsZW1lbnRNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TWVtYmVyTWV0YWRhdGEoY292YXJpYW50IEluZGV4ZWRNZW1iZXIgbWVtYmVyLAogICAgICB7Ym9vbCBpbmNsdWRlUGFyYW1ldGVyTWV0YWRhdGE6IGZhbHNlfSkgewogICAgLy8gVE9ETyhyZWRlbXB0aW9uKTogU3VwcG9ydCBpbmNsdWRlUGFyYW1ldGVyTWV0YWRhdGEuCiAgICBhc3NlcnQoZWxlbWVudE1hcC5jaGVja0ZhbWlseShtZW1iZXIpKTsKICAgIEtNZW1iZXJEYXRhIG1lbWJlckRhdGEgPSBlbGVtZW50TWFwLm1lbWJlcnMuZ2V0RGF0YShtZW1iZXIpOwogICAgcmV0dXJuIG1lbWJlckRhdGEuZ2V0TWV0YWRhdGEoZWxlbWVudE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRW51bUNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgYXNzZXJ0KGVsZW1lbnRNYXAuY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGNsYXNzRGF0YSA9IGVsZW1lbnRNYXAuY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICByZXR1cm4gY2xhc3NEYXRhLmlzRW51bUNsYXNzOwogIH0KfQoKLy8vIFtCZWhhdmlvckJ1aWxkZXJdIGZvciBrZXJuZWwgYmFzZWQgZWxlbWVudHMuCmNsYXNzIEtlcm5lbEJlaGF2aW9yQnVpbGRlciBleHRlbmRzIEJlaGF2aW9yQnVpbGRlciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudDsKICBAb3ZlcnJpZGUKICBmaW5hbCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50czsKICBAb3ZlcnJpZGUKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YTsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CgogIEtlcm5lbEJlaGF2aW9yQnVpbGRlcih0aGlzLmVsZW1lbnRFbnZpcm9ubWVudCwgdGhpcy5jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5uYXRpdmVCYXNpY0RhdGEsIHRoaXMucmVwb3J0ZXIsIHRoaXMuX29wdGlvbnMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCB0cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucyA9PgogICAgICBfb3B0aW9ucy50cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9uczsKfQoKLy8vIENvbnN0YW50IGVudmlyb25tZW50IG1hcHBpbmcgW0NvbnN0YW50RXhwcmVzc2lvbl1zIHRvIFtDb25zdGFudFZhbHVlXXMgdXNpbmcKLy8vIFtfRXZhbHVhdGlvbkVudmlyb25tZW50XSBmb3IgdGhlIGV2YWx1YXRpb24uCmNsYXNzIEtlcm5lbENvbnN0YW50RW52aXJvbm1lbnQgaW1wbGVtZW50cyBDb25zdGFudEVudmlyb25tZW50IHsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIF9lbGVtZW50TWFwOwogIGZpbmFsIEVudmlyb25tZW50IF9lbnZpcm9ubWVudDsKCiAgTWFwPENvbnN0YW50RXhwcmVzc2lvbiwgQ29uc3RhbnRWYWx1ZT4gX3ZhbHVlTWFwID0KICAgICAgPENvbnN0YW50RXhwcmVzc2lvbiwgQ29uc3RhbnRWYWx1ZT57fTsKCiAgS2VybmVsQ29uc3RhbnRFbnZpcm9ubWVudCh0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9lbnZpcm9ubWVudCk7CgogIENvbnN0YW50VmFsdWUgX2dldENvbnN0YW50VmFsdWUoCiAgICAgIFNwYW5uYWJsZSBzcGFubmFibGUsIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICB7Ym9vbCBjb25zdGFudFJlcXVpcmVkLCBib29sIGNoZWNrQ2FzdHM6IHRydWV9KSB7CiAgICByZXR1cm4gX3ZhbHVlTWFwLnB1dElmQWJzZW50KGV4cHJlc3Npb24sICgpIHsKICAgICAgcmV0dXJuIGV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEtlcm5lbEV2YWx1YXRpb25FbnZpcm9ubWVudCgKICAgICAgICAgIF9lbGVtZW50TWFwLCBfZW52aXJvbm1lbnQsIHNwYW5uYWJsZSwKICAgICAgICAgIGNvbnN0YW50UmVxdWlyZWQ6IGNvbnN0YW50UmVxdWlyZWQsIGNoZWNrQ2FzdHM6IGNoZWNrQ2FzdHMpKTsKICAgIH0pOwogIH0KfQoKLy8vIEV2YWx1YXRpb24gZW52aXJvbm1lbnQgdXNlZCBmb3IgY29tcHV0aW5nIFtDb25zdGFudFZhbHVlXXMgZm9yCi8vLyBrZXJuZWwgYmFzZWQgW0NvbnN0YW50RXhwcmVzc2lvbl1zLgpjbGFzcyBLZXJuZWxFdmFsdWF0aW9uRW52aXJvbm1lbnQgZXh0ZW5kcyBFdmFsdWF0aW9uRW52aXJvbm1lbnRCYXNlIHsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIF9lbGVtZW50TWFwOwogIGZpbmFsIEVudmlyb25tZW50IF9lbnZpcm9ubWVudDsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGNoZWNrQ2FzdHM7CgogIEtlcm5lbEV2YWx1YXRpb25FbnZpcm9ubWVudCgKICAgICAgdGhpcy5fZWxlbWVudE1hcCwgdGhpcy5fZW52aXJvbm1lbnQsIFNwYW5uYWJsZSBzcGFubmFibGUsCiAgICAgIHtib29sIGNvbnN0YW50UmVxdWlyZWQsIHRoaXMuY2hlY2tDYXN0czogdHJ1ZX0pCiAgICAgIDogc3VwZXIoc3Bhbm5hYmxlLCBjb25zdGFudFJlcXVpcmVkOiBjb25zdGFudFJlcXVpcmVkKTsKCiAgQG92ZXJyaWRlCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZXMgZ2V0IHR5cGVzID0+IF9lbGVtZW50TWFwLnR5cGVzOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdEJ5Q29udGV4dChEYXJ0VHlwZSBiYXNlLCBJbnRlcmZhY2VUeXBlIHRhcmdldCkgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLnN1YnN0QnlDb250ZXh0KGJhc2UsIHRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yIGdldENvbnN0cnVjdG9yQ29uc3RhbnQoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC5fZ2V0Q29uc3RydWN0b3JDb25zdGFudChjb25zdHJ1Y3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLl9nZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbihmaWVsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0TG9jYWxDb25zdGFudChMb2NhbCBsb2NhbCkgewogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigiX0V2YWx1YXRpb25FbnZpcm9ubWVudC5nZXRMb2NhbENvbnN0YW50Iik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVhZEZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIF9lbnZpcm9ubWVudC52YWx1ZU9mKG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlciA9PiBfZWxlbWVudE1hcC5yZXBvcnRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgZW5hYmxlQXNzZXJ0aW9ucyA9PiBfZWxlbWVudE1hcC5vcHRpb25zLmVuYWJsZVVzZXJBc3NlcnRpb25zOwp9CgpjbGFzcyBLZXJuZWxOYXRpdmVNZW1iZXJSZXNvbHZlciBpbXBsZW1lbnRzIE5hdGl2ZU1lbWJlclJlc29sdmVyIHsKICBzdGF0aWMgZmluYWwgUmVnRXhwIF9pZGVudGlmaWVyID0gbmV3IFJlZ0V4cChyJ15bYS16QS1aXyRdW2EtekEtWjAtOV8kXSokJyk7CgogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgX2VsZW1lbnRNYXA7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVCYXNpY0RhdGE7CiAgZmluYWwgTmF0aXZlRGF0YUJ1aWxkZXIgX25hdGl2ZURhdGFCdWlsZGVyOwoKICBLZXJuZWxOYXRpdmVNZW1iZXJSZXNvbHZlcigKICAgICAgdGhpcy5fZWxlbWVudE1hcCwgdGhpcy5fbmF0aXZlQmFzaWNEYXRhLCB0aGlzLl9uYXRpdmVEYXRhQnVpbGRlcik7CgogIEtFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4gX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50OwoKICBDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzID0+IF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlc29sdmVOYXRpdmVNZW1iZXIoaXIuTWVtYmVyIG5vZGUsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEpIHsKICAgIGJvb2wgaXNKc0ludGVyb3AgPSBfaXNKc0ludGVyb3BNZW1iZXIobm9kZSk7CiAgICBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUgfHwgbm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICBGdW5jdGlvbkVudGl0eSBtZXRob2QgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgIGJvb2wgaXNOYXRpdmUgPSBfcHJvY2Vzc01ldGhvZEFubm90YXRpb25zKG5vZGUsIGFubm90YXRpb25EYXRhKTsKICAgICAgaWYgKGlzTmF0aXZlIHx8IGlzSnNJbnRlcm9wKSB7CiAgICAgICAgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IgPSBfY29tcHV0ZU5hdGl2ZU1ldGhvZEJlaGF2aW9yKAogICAgICAgICAgICBtZXRob2QsIGFubm90YXRpb25EYXRhLAogICAgICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApOwogICAgICAgIF9uYXRpdmVEYXRhQnVpbGRlci5zZXROYXRpdmVNZXRob2RCZWhhdmlvcihtZXRob2QsIGJlaGF2aW9yKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkZpZWxkKSB7CiAgICAgIEZpZWxkRW50aXR5IGZpZWxkID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICBib29sIGlzTmF0aXZlID0gX3Byb2Nlc3NGaWVsZEFubm90YXRpb25zKG5vZGUsIGFubm90YXRpb25EYXRhKTsKICAgICAgaWYgKGlzTmF0aXZlIHx8IGlzSnNJbnRlcm9wKSB7CiAgICAgICAgTmF0aXZlQmVoYXZpb3IgZmllbGRMb2FkQmVoYXZpb3IgPSBfY29tcHV0ZU5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yKAogICAgICAgICAgICBmaWVsZCwgYW5ub3RhdGlvbkRhdGEsCiAgICAgICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCk7CiAgICAgICAgTmF0aXZlQmVoYXZpb3IgZmllbGRTdG9yZUJlaGF2aW9yID0KICAgICAgICAgICAgX2NvbXB1dGVOYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IoZmllbGQpOwogICAgICAgIF9uYXRpdmVEYXRhQnVpbGRlci5zZXROYXRpdmVGaWVsZExvYWRCZWhhdmlvcihmaWVsZCwgZmllbGRMb2FkQmVoYXZpb3IpOwogICAgICAgIF9uYXRpdmVEYXRhQnVpbGRlci5zZXROYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IoCiAgICAgICAgICAgIGZpZWxkLCBmaWVsZFN0b3JlQmVoYXZpb3IpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUHJvY2VzcyB0aGUgcG90ZW50aWFsbHkgbmF0aXZlIFtmaWVsZF0uIEFkZHMgaW5mb3JtYXRpb24gZnJvbSBtZXRhZGF0YQogIC8vLyBhdHRyaWJ1dGVzLiBSZXR1cm5zIGB0cnVlYCBvZiBbbWV0aG9kXSBpcyBuYXRpdmUuCiAgYm9vbCBfcHJvY2Vzc0ZpZWxkQW5ub3RhdGlvbnMoCiAgICAgIGlyLkZpZWxkIG5vZGUsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEpIHsKICAgIGlmIChub2RlLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICBfbmF0aXZlQmFzaWNEYXRhCiAgICAgICAgICAgIC5pc05hdGl2ZUNsYXNzKF9lbGVtZW50TWFwLmdldENsYXNzKG5vZGUuZW5jbG9zaW5nQ2xhc3MpKSkgewogICAgICAvLyBFeGNsdWRlIG5vbi1pbnN0YW5jZSAoc3RhdGljKSBmaWVsZHMgLSB0aGV5IGFyZSBub3QgcmVhbGx5IG5hdGl2ZSBhbmQKICAgICAgLy8gYXJlIGNvbXBpbGVkIGFzIGlzb2xhdGUgZ2xvYmFscy4gIEFjY2VzcyBvZiBhIHByb3BlcnR5IG9mIGEgY29uc3RydWN0b3IKICAgICAgLy8gZnVuY3Rpb24gb3IgYSBub24tbWV0aG9kIHByb3BlcnR5IGluIHRoZSBwcm90b3R5cGUgY2hhaW4sIG11c3QgYmUgY29kZWQKICAgICAgLy8gdXNpbmcgYSBKUy1jYWxsLgogICAgICBfc2V0TmF0aXZlTmFtZShub2RlLCBhbm5vdGF0aW9uRGF0YSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIG5hbWUgPSBfZmluZEpzTmFtZUZyb21Bbm5vdGF0aW9uKG5vZGUsIGFubm90YXRpb25EYXRhKTsKICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwKICAgICAgICAgICAgJ0BKU05hbWUoLi4uKSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN0YXRpYyBmaWVsZHM6ICcKICAgICAgICAgICAgJyRub2RlLicpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUHJvY2VzcyB0aGUgcG90ZW50aWFsbHkgbmF0aXZlIFttZXRob2RdLiBBZGRzIGluZm9ybWF0aW9uIGZyb20gbWV0YWRhdGEKICAvLy8gYXR0cmlidXRlcy4gUmV0dXJucyBgdHJ1ZWAgb2YgW21ldGhvZF0gaXMgbmF0aXZlLgogIGJvb2wgX3Byb2Nlc3NNZXRob2RBbm5vdGF0aW9ucygKICAgICAgaXIuTWVtYmVyIG5vZGUsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEpIHsKICAgIGlmIChfaXNOYXRpdmVNZXRob2Qobm9kZSwgYW5ub3RhdGlvbkRhdGEpKSB7CiAgICAgIGlmIChub2RlLmVuY2xvc2luZ0NsYXNzICE9IG51bGwgJiYgIW5vZGUuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIGlmICghX25hdGl2ZUJhc2ljRGF0YQogICAgICAgICAgICAuaXNOYXRpdmVDbGFzcyhfZWxlbWVudE1hcC5nZXRDbGFzcyhub2RlLmVuY2xvc2luZ0NsYXNzKSkpIHsKICAgICAgICAgIF9lbGVtZW50TWFwLnJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5OQVRJVkVfTk9OX0lOU1RBTkNFX0lOX05PTl9OQVRJVkVfQ0xBU1MpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBfc2V0TmF0aXZlTmFtZUZvclN0YXRpY01ldGhvZChub2RlLCBhbm5vdGF0aW9uRGF0YSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3NldE5hdGl2ZU5hbWUobm9kZSwgYW5ub3RhdGlvbkRhdGEpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFNldHMgdGhlIG5hdGl2ZSBuYW1lIG9mIFtlbGVtZW50XSwgZWl0aGVyIGZyb20gYW4gYW5ub3RhdGlvbiwgb3IKICAvLy8gZGVmYXVsdGluZyB0byB0aGUgRGFydCBuYW1lLgogIHZvaWQgX3NldE5hdGl2ZU5hbWUoaXIuTWVtYmVyIG5vZGUsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEpIHsKICAgIFN0cmluZyBuYW1lID0gX2ZpbmRKc05hbWVGcm9tQW5ub3RhdGlvbihub2RlLCBhbm5vdGF0aW9uRGF0YSk7CiAgICBuYW1lID8/PSBub2RlLm5hbWUubmFtZTsKICAgIF9uYXRpdmVEYXRhQnVpbGRlci5zZXROYXRpdmVNZW1iZXJOYW1lKF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKSwgbmFtZSk7CiAgfQoKICAvLy8gU2V0cyB0aGUgbmF0aXZlIG5hbWUgb2YgdGhlIHN0YXRpYyBuYXRpdmUgbWV0aG9kIFtlbGVtZW50XSwgdXNpbmcgdGhlCiAgLy8vIGZvbGxvd2luZyBydWxlczoKICAvLy8gMS4gSWYgW2VsZW1lbnRdIGhhcyBhIEBKU05hbWUgYW5ub3RhdGlvbiB0aGF0IGlzIGFuIGlkZW50aWZpZXIsIHF1YWxpZnkKICAvLy8gICAgdGhhdCBpZGVudGlmaWVyIHRvIHRoZSBATmF0aXZlIG5hbWUgb2YgdGhlIGVuY2xvc2luZyBjbGFzcwogIC8vLyAyLiBJZiBbZWxlbWVudF0gaGFzIGEgQEpTTmFtZSBhbm5vdGF0aW9uIHRoYXQgaXMgbm90IGFuIGlkZW50aWZpZXIsCiAgLy8vICAgIHVzZSB0aGUgZGVjbGFyZWQgQEpTTmFtZSBhcyB0aGUgZXhwcmVzc2lvbgogIC8vLyAzLiBJZiBbZWxlbWVudF0gZG9lcyBub3QgaGF2ZSBhIEBKU05hbWUgYW5ub3RhdGlvbiwgcXVhbGlmeSB0aGUgbmFtZSBvZgogIC8vLyAgICB0aGUgbWV0aG9kIHdpdGggdGhlIEBOYXRpdmUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzLgogIHZvaWQgX3NldE5hdGl2ZU5hbWVGb3JTdGF0aWNNZXRob2QoCiAgICAgIGlyLk1lbWJlciBub2RlLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhKSB7CiAgICBTdHJpbmcgbmFtZSA9IF9maW5kSnNOYW1lRnJvbUFubm90YXRpb24obm9kZSwgYW5ub3RhdGlvbkRhdGEpOwogICAgbmFtZSA/Pz0gbm9kZS5uYW1lLm5hbWU7CiAgICBpZiAoX2lzSWRlbnRpZmllcihuYW1lKSkgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBfZWxlbWVudE1hcC5nZXRDbGFzcyhub2RlLmVuY2xvc2luZ0NsYXNzKTsKICAgICAgTGlzdDxTdHJpbmc+IG5hdGl2ZU5hbWVzID0gX25hdGl2ZUJhc2ljRGF0YS5nZXROYXRpdmVUYWdzT2ZDbGFzcyhjbHMpOwogICAgICBpZiAobmF0aXZlTmFtZXMubGVuZ3RoICE9IDEpIHsKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksCiAgICAgICAgICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIGEgbmF0aXZlIG5hbWUgZm9yIHRoZSBlbmNsb3NpbmcgY2xhc3MsICcKICAgICAgICAgICAgJ29wdGlvbnM6ICRuYXRpdmVOYW1lcycpOwogICAgICB9CiAgICAgIF9uYXRpdmVEYXRhQnVpbGRlci5zZXROYXRpdmVNZW1iZXJOYW1lKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpLCAnJHtuYXRpdmVOYW1lc1swXX0uJG5hbWUnKTsKICAgIH0gZWxzZSB7CiAgICAgIF9uYXRpdmVEYXRhQnVpbGRlci5zZXROYXRpdmVNZW1iZXJOYW1lKF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKSwgbmFtZSk7CiAgICB9CiAgfQoKICBib29sIF9pc0lkZW50aWZpZXIoU3RyaW5nIHMpID0+IF9pZGVudGlmaWVyLmhhc01hdGNoKHMpOwoKICAvLy8gUmV0dXJucyB0aGUgSlNOYW1lIGFubm90YXRpb24gc3RyaW5nIG9yIGBudWxsYCBpZiBubyBKU05hbWUgYW5ub3RhdGlvbiBpcwogIC8vLyBwcmVzZW50LgogIFN0cmluZyBfZmluZEpzTmFtZUZyb21Bbm5vdGF0aW9uKAogICAgICBpci5NZW1iZXIgbm9kZSwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSkgewogICAgU3RyaW5nIGpzTmFtZTsKICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgIGpzTmFtZSA9IGFubm90YXRpb25EYXRhLmdldE5hdGl2ZU1lbWJlck5hbWUobm9kZSk7CiAgICB9IGVsc2UgewogICAgICBTb3VyY2VTcGFuIHNvdXJjZVNwYW4gPSBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKTsKICAgICAgZm9yIChDb25zdGFudFZhbHVlIHZhbHVlIGluIF9lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgIC5nZXRNZW1iZXJNZXRhZGF0YShfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSkpKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSByZWFkQW5ub3RhdGlvbk5hbWUoCiAgICAgICAgICAgIHNvdXJjZVNwYW4sIHZhbHVlLCBfY29tbW9uRWxlbWVudHMuYW5ub3RhdGlvbkpTTmFtZUNsYXNzKTsKICAgICAgICBpZiAoanNOYW1lID09IG51bGwpIHsKICAgICAgICAgIGpzTmFtZSA9IG5hbWU7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgIHNvdXJjZVNwYW4sICdUb28gbWFueSBKU05hbWUgYW5ub3RhdGlvbnM6ICR7dmFsdWUudG9EYXJ0VGV4dCgpfScpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGpzTmFtZTsKICB9CgogIE5hdGl2ZUJlaGF2aW9yIF9jb21wdXRlTmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKGNvdmFyaWFudCBLRmllbGQgZmllbGQpIHsKICAgIGlyLkZpZWxkIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKGZpZWxkKTsKICAgIHJldHVybiBfZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckZpZWxkU3RvcmUobm9kZSk7CiAgfQoKICBOYXRpdmVCZWhhdmlvciBfY29tcHV0ZU5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yKAogICAgICBLRmllbGQgZmllbGQsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEsCiAgICAgIHtib29sIGlzSnNJbnRlcm9wfSkgewogICAgaXIuRmllbGQgbm9kZSA9IF9lbGVtZW50TWFwLmdldE1lbWJlck5vZGUoZmllbGQpOwogICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnM7CiAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9uczsKICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgIGNyZWF0ZXNBbm5vdGF0aW9ucyA9IGFubm90YXRpb25EYXRhLmdldENyZWF0ZXNBbm5vdGF0aW9ucyhub2RlKTsKICAgICAgcmV0dXJuc0Fubm90YXRpb25zID0gYW5ub3RhdGlvbkRhdGEuZ2V0UmV0dXJuc0Fubm90YXRpb25zKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSA9CiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKGZpZWxkKTsKICAgICAgY3JlYXRlc0Fubm90YXRpb25zID0gZ2V0Q3JlYXRlc0Fubm90YXRpb25zKAogICAgICAgICAgX2VsZW1lbnRNYXAucmVwb3J0ZXIsIF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICAgIHJldHVybnNBbm5vdGF0aW9ucyA9IGdldFJldHVybnNBbm5vdGF0aW9ucygKICAgICAgICAgIF9lbGVtZW50TWFwLnJlcG9ydGVyLCBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgfQogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRMb2FkKAogICAgICAgIG5vZGUsIGNyZWF0ZXNBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLAogICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCk7CiAgfQoKICBOYXRpdmVCZWhhdmlvciBfY29tcHV0ZU5hdGl2ZU1ldGhvZEJlaGF2aW9yKAogICAgICBLRnVuY3Rpb24gZnVuY3Rpb24sIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEsCiAgICAgIHtib29sIGlzSnNJbnRlcm9wfSkgewogICAgaXIuTWVtYmVyIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKGZ1bmN0aW9uKTsKICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zOwogICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnM7CiAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICBjcmVhdGVzQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uRGF0YS5nZXRDcmVhdGVzQW5ub3RhdGlvbnMobm9kZSk7CiAgICAgIHJldHVybnNBbm5vdGF0aW9ucyA9IGFubm90YXRpb25EYXRhLmdldFJldHVybnNBbm5vdGF0aW9ucyhub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGEgPQogICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShmdW5jdGlvbik7CiAgICAgIGNyZWF0ZXNBbm5vdGF0aW9ucyA9IGdldENyZWF0ZXNBbm5vdGF0aW9ucygKICAgICAgICAgIF9lbGVtZW50TWFwLnJlcG9ydGVyLCBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgICByZXR1cm5zQW5ub3RhdGlvbnMgPSBnZXRSZXR1cm5zQW5ub3RhdGlvbnMoCiAgICAgICAgICBfZWxlbWVudE1hcC5yZXBvcnRlciwgX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgIH0KICAgIHJldHVybiBfZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvck1ldGhvZCgKICAgICAgICBub2RlLCBjcmVhdGVzQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywKICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApOwogIH0KCiAgYm9vbCBfaXNOYXRpdmVNZXRob2QoaXIuTWVtYmVyIG5vZGUsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEpIHsKICAgIGlmICghbWF5YmVFbmFibGVOYXRpdmUobm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSkpIHJldHVybiBmYWxzZTsKICAgIGJvb2wgaGFzTmF0aXZlQm9keTsKICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgIGhhc05hdGl2ZUJvZHkgPSBhbm5vdGF0aW9uRGF0YS5oYXNOYXRpdmVCb2R5KG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgaGFzTmF0aXZlQm9keSA9IG5vZGUuYW5ub3RhdGlvbnMuYW55KChpci5FeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgICAgICByZXR1cm4gZXhwcmVzc2lvbiBpcyBpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gJiYKICAgICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0SW50ZXJmYWNlVHlwZShleHByZXNzaW9uLmNvbnN0cnVjdGVkVHlwZSkgPT0KICAgICAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5leHRlcm5hbE5hbWVUeXBlOwogICAgICB9KTsKICAgIH0KICAgIGlmICghaGFzTmF0aXZlQm9keSAmJgogICAgICAgIG5vZGUuaXNFeHRlcm5hbCAmJgogICAgICAgICFfbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKSkpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hvdWxkIHdlIGNoYW5nZSBkYXJ0Omh0bWwgYW5kIGZyaWVuZHMgdG8gdXNlCiAgICAgIC8vICBgZXh0ZXJuYWxgIGluc3RlYWQgb2YgdGhlIG5hdGl2ZSBib2R5IHN5bnRheD8KICAgICAgX2VsZW1lbnRNYXAucmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksIE1lc3NhZ2VLaW5kLk5PTl9OQVRJVkVfRVhURVJOQUwpOwogICAgfQogICAgcmV0dXJuIGhhc05hdGl2ZUJvZHk7CiAgfQoKICBib29sIF9pc0pzSW50ZXJvcE1lbWJlcihpci5NZW1iZXIgbm9kZSkgewogICAgcmV0dXJuIF9uYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BNZW1iZXIoX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpKTsKICB9Cn0KCmNsYXNzIEtlcm5lbENsYXNzUXVlcmllcyBleHRlbmRzIENsYXNzUXVlcmllcyB7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwOwoKICBLZXJuZWxDbGFzc1F1ZXJpZXModGhpcy5lbGVtZW50TWFwKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0RGVjbGFyYXRpb24oQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gY2xzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0U3VwZXJ0eXBlcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldE9yZGVyZWRUeXBlU2V0KGNscykuc3VwZXJ0eXBlczsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldFN1cGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRTdXBlclR5cGUoY2xzKT8uZWxlbWVudDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW1wbGVtZW50c0Z1bmN0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2ltcGxlbWVudHNGdW5jdGlvbihjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldEhpZXJhcmNoeURlcHRoKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0SGllcmFyY2h5RGVwdGgoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldEFwcGxpZWRNaXhpbihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldEFwcGxpZWRNaXhpbihjbHMpOwogIH0KfQoKRGlhZ25vc3RpY01lc3NhZ2UgX2NyZWF0ZURpYWdub3N0aWNNZXNzYWdlKAogICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLCBpci5Mb2NhdGVkTWVzc2FnZSBtZXNzYWdlKSB7CiAgU291cmNlU3BhbiBzb3VyY2VTcGFuID0gbmV3IFNvdXJjZVNwYW4oCiAgICAgIG1lc3NhZ2UudXJpLCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UuY2hhck9mZnNldCArIG1lc3NhZ2UubGVuZ3RoKTsKICByZXR1cm4gcmVwb3J0ZXIuY3JlYXRlTWVzc2FnZSgKICAgICAgc291cmNlU3BhbiwgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogbWVzc2FnZS5tZXNzYWdlfSk7Cn0KCnZvaWQgcmVwb3J0TG9jYXRlZE1lc3NhZ2UoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgaXIuTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgTGlzdDxpci5Mb2NhdGVkTWVzc2FnZT4gY29udGV4dCkgewogIERpYWdub3N0aWNNZXNzYWdlIGRpYWdub3N0aWNNZXNzYWdlID0KICAgICAgX2NyZWF0ZURpYWdub3N0aWNNZXNzYWdlKHJlcG9ydGVyLCBtZXNzYWdlKTsKICBMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcyA9IFtdOwogIGZvciAoaXIuTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSBpbiBjb250ZXh0KSB7CiAgICBpbmZvcy5hZGQoX2NyZWF0ZURpYWdub3N0aWNNZXNzYWdlKHJlcG9ydGVyLCBtZXNzYWdlKSk7CiAgfQogIHJlcG9ydGVyLnJlcG9ydEVycm9yKGRpYWdub3N0aWNNZXNzYWdlLCBpbmZvcyk7Cn0KiL0ATk48ASQBQDgoNC8xNQEZHyQiKSknKCMkIyEhHiQhHxshHCEhJxsbHhoeKSMpNSIoIiIaIiorJAEbExkdAR8lAUQYTSEMJSImMCQyGiclLygBMScBUElIQzw3TkM/OQFQJBwBOTM5AT0cBktLTlFIQDszNwEqJgFAARpQPkxOMig2BAEMIQEMSgEMPAElTgQBIyI+EAQBSTQpNzc7LjM2QTkvNDdBOTBHKEcI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O0clQCQnRggjN0YlTCMnLDVROCgIBgQBTTghOCEZSU9RURosEw1FGhIxSxcIBhIEAU44IjkxQx5JMzNEGAo9Dy4IEwYSBAFHI0lDHU8EAUwXTkRKNE5CJjlDHR9DTSUSMUomCC5DDVEGBAE7AVAPJDkTIjkNQzY9KkceGSMUUQoIBhMEAUw2PQQBMjUcNikpIkdHDSU4MkcyRwY2NiMEAS87HDopKSJHRw0lOzJHMkcGMzYjBAFKSxgiOg1IOUgyCgYaG0xMOC9RBhoEASxMBAIBMCsBJwEMMBAEAQw7OQQBDC8yBAEMLTAEAQwrLgQBDDEsBAIBLD4qTSFDAgE3QigzJi88BDICATFwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvZWxlbWVudF9tYXBfaW1wbC5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9uYXRpdmVfYmFzaWNfZGF0YS5kYXJ0tMsvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWFrZSB0aGlzIGEgc2VwYXJhdGUgbGlicmFyeS4KcGFydCBvZiBkYXJ0MmpzLmtlcm5lbC5lbGVtZW50X21hcDsKCmNsYXNzIEtlcm5lbEFubm90YXRpb25Qcm9jZXNzb3IgaW1wbGVtZW50cyBBbm5vdGF0aW9uUHJvY2Vzc29yIHsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXA7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhQnVpbGRlciBfbmF0aXZlQmFzaWNEYXRhQnVpbGRlcjsKICBmaW5hbCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhOwoKICBLZXJuZWxBbm5vdGF0aW9uUHJvY2Vzc29yKAogICAgICB0aGlzLmVsZW1lbnRNYXAsIHRoaXMuX25hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIsIHRoaXMuYW5ub3RhdGlvbkRhdGEpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGV4dHJhY3ROYXRpdmVBbm5vdGF0aW9ucyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIEtFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50ID0gZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgICBLQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3MobGlicmFyeSwgKENsYXNzRW50aXR5IGNscykgewogICAgICBpci5DbGFzcyBub2RlID0gZWxlbWVudE1hcC5nZXRDbGFzc05vZGUoY2xzKTsKICAgICAgU3RyaW5nIGFubm90YXRpb25OYW1lOwogICAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICAgIGFubm90YXRpb25OYW1lID0gYW5ub3RhdGlvbkRhdGEuZ2V0TmF0aXZlQ2xhc3NOYW1lKG5vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIGJyYW5jaCB3aGVuIHdlIHVzZSBjb25zdGFudHMgZnJvbQogICAgICAgIC8vIENGRS4KICAgICAgICBmb3IgKENvbnN0YW50VmFsdWUgdmFsdWUgaW4gZWxlbWVudEVudmlyb25tZW50LmdldENsYXNzTWV0YWRhdGEoY2xzKSkgewogICAgICAgICAgU3RyaW5nIG5hbWUgPSByZWFkQW5ub3RhdGlvbk5hbWUoCiAgICAgICAgICAgICAgY2xzLCB2YWx1ZSwgY29tbW9uRWxlbWVudHMubmF0aXZlQW5ub3RhdGlvbkNsYXNzKTsKICAgICAgICAgIGlmIChhbm5vdGF0aW9uTmFtZSA9PSBudWxsKSB7CiAgICAgICAgICAgIGFubm90YXRpb25OYW1lID0gbmFtZTsKICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgIGZhaWxlZEF0KGNscywgJ1RvbyBtYW55IG5hbWUgYW5ub3RhdGlvbnMuJyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChhbm5vdGF0aW9uTmFtZSAhPSBudWxsKSB7CiAgICAgICAgX25hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIuc2V0TmF0aXZlQ2xhc3NUYWdJbmZvKGNscywgYW5ub3RhdGlvbk5hbWUpOwogICAgICB9CiAgICB9KTsKICB9CgogIFN0cmluZyBnZXRKc0ludGVyb3BOYW1lKAogICAgICBTcGFubmFibGUgc3Bhbm5hYmxlLCBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSkgewogICAgS0NvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKICAgIFN0cmluZyBhbm5vdGF0aW9uTmFtZTsKICAgIGZvciAoQ29uc3RhbnRWYWx1ZSB2YWx1ZSBpbiBtZXRhZGF0YSkgewogICAgICBTdHJpbmcgbmFtZSA9IHJlYWRBbm5vdGF0aW9uTmFtZSgKICAgICAgICAgIHNwYW5uYWJsZSwgdmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzQW5ub3RhdGlvbkNsYXNzLAogICAgICAgICAgZGVmYXVsdFZhbHVlOiAnJyk7CiAgICAgIGlmIChhbm5vdGF0aW9uTmFtZSA9PSBudWxsKSB7CiAgICAgICAgYW5ub3RhdGlvbk5hbWUgPSBuYW1lOwogICAgICB9IGVsc2UgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgc2hvdWxkIGJlIGFuIGVycm9yLCBub3QgYSBjcmFzaC4KICAgICAgICBmYWlsZWRBdChzcGFubmFibGUsICdUb28gbWFueSBuYW1lIGFubm90YXRpb25zLicpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYW5ub3RhdGlvbk5hbWU7CiAgfQoKICB2b2lkIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJzKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICBpZiAoZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIGVsZW1lbnRNYXAucmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgZnVuY3Rpb24sCiAgICAgICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FVEhPRF9XSVRIX05BTUVEX0FSR1VNRU5UUywKICAgICAgICAgIHsnbWV0aG9kJzogZnVuY3Rpb24ubmFtZX0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBleHRyYWN0SnNJbnRlcm9wQW5ub3RhdGlvbnMoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIgPSBlbGVtZW50TWFwLnJlcG9ydGVyOwogICAgS0VsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQgPSBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKICAgIEtDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogICAgaXIuTGlicmFyeSBsaWJyYXJ5Tm9kZSA9IGVsZW1lbnRNYXAuZ2V0TGlicmFyeU5vZGUobGlicmFyeSk7CiAgICBTdHJpbmcgbGlicmFyeU5hbWU7CiAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICBsaWJyYXJ5TmFtZSA9IGFubm90YXRpb25EYXRhLmdldEpzSW50ZXJvcExpYnJhcnlOYW1lKGxpYnJhcnlOb2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gd2UgdXNlIGNvbnN0YW50cyBmcm9tIENGRS4KICAgICAgbGlicmFyeU5hbWUgPSBnZXRKc0ludGVyb3BOYW1lKAogICAgICAgICAgbGlicmFyeSwgZWxlbWVudEVudmlyb25tZW50LmdldExpYnJhcnlNZXRhZGF0YShsaWJyYXJ5KSk7CiAgICB9CiAgICBmaW5hbCBib29sIGlzRXhwbGljaXRseWx5SnNMaWJyYXJ5ID0gbGlicmFyeU5hbWUgIT0gbnVsbDsKICAgIGJvb2wgaXNKc0xpYnJhcnkgPSBpc0V4cGxpY2l0bHlseUpzTGlicmFyeTsKCiAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaExpYnJhcnlNZW1iZXIobGlicmFyeSwgKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgaXIuTWVtYmVyIG1lbWJlck5vZGUgPSBlbGVtZW50TWFwLmdldE1lbWJlck5vZGUobWVtYmVyKTsKICAgICAgU3RyaW5nIG1lbWJlck5hbWU7CiAgICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgICAgbWVtYmVyTmFtZSA9IGFubm90YXRpb25EYXRhLmdldEpzSW50ZXJvcE1lbWJlck5hbWUobWVtYmVyTm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB3ZSB1c2UgY29uc3RhbnRzIGZyb20gQ0ZFLgogICAgICAgIG1lbWJlck5hbWUgPSBnZXRKc0ludGVyb3BOYW1lKAogICAgICAgICAgICBsaWJyYXJ5LCBlbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEobWVtYmVyKSk7CiAgICAgIH0KICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgaWYgKG1lbWJlck5hbWUgIT0gbnVsbCkgewogICAgICAgICAgLy8gVE9ETygzNDE3NCk6IERpc2FsbG93IGpzLWludGVyb3AgZmllbGRzLgogICAgICAgICAgLypyZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgbWVtYmVyLCBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURUQpOyovCiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gbWVtYmVyOwogICAgICAgIGlmIChmdW5jdGlvbi5pc0V4dGVybmFsICYmIGlzRXhwbGljaXRseWx5SnNMaWJyYXJ5KSB7CiAgICAgICAgICAvLyBFeHRlcm5hbCBtZW1iZXJzIG9mIGV4cGxpY2l0IGpzLWludGVyb3AgbGlicmFyeSBhcmUgaW1wbGljaXRseQogICAgICAgICAgLy8ganMtaW50ZXJvcCBtZW1iZXJzLgogICAgICAgICAgbWVtYmVyTmFtZSA/Pz0gZnVuY3Rpb24ubmFtZTsKICAgICAgICB9CiAgICAgICAgaWYgKG1lbWJlck5hbWUgIT0gbnVsbCkgewogICAgICAgICAgaWYgKCFmdW5jdGlvbi5pc0V4dGVybmFsKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IERpc2FsbG93IG5vbi1leHRlcm5hbCBqcy1pbnRlcm9wIG1lbWJlcnMuCiAgICAgICAgICAgIC8qcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgZnVuY3Rpb24sIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTk9OX0VYVEVSTkFMX01FTUJFUik7Ki8KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9uYXRpdmVCYXNpY0RhdGFCdWlsZGVyLm1hcmtBc0pzSW50ZXJvcE1lbWJlcihmdW5jdGlvbiwgbWVtYmVyTmFtZSk7CiAgICAgICAgICAgIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJzKGZ1bmN0aW9uKTsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXQgaXMgdW5jbGVhciB3aGV0aGVyIGxpYnJhcnkgY2FuIGJlCiAgICAgICAgICAgIC8vIGltcGxpY2l0bHkganMtaW50ZXJvcC4gRm9yIG5vdyB3ZSBhbGxvdyBpdC4KICAgICAgICAgICAgaXNKc0xpYnJhcnkgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24uaXNFeHRlcm5hbCAmJgogICAgICAgICAgICAhY29tbW9uRWxlbWVudHMuaXNFeHRlcm5hbEFsbG93ZWQoZnVuY3Rpb24pKSB7CiAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgZnVuY3Rpb24sIE1lc3NhZ2VLaW5kLk5PTl9OQVRJVkVfRVhURVJOQUwpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzcyhsaWJyYXJ5LCAoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IG1ldGFkYXRhOwogICAgICBpci5DbGFzcyBjbGFzc05vZGUgPSBlbGVtZW50TWFwLmdldENsYXNzTm9kZShjbHMpOwogICAgICBTdHJpbmcgY2xhc3NOYW1lOwogICAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICAgIGNsYXNzTmFtZSA9IGFubm90YXRpb25EYXRhLmdldEpzSW50ZXJvcENsYXNzTmFtZShjbGFzc05vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIG1ldGFkYXRhID0gZWxlbWVudEVudmlyb25tZW50LmdldENsYXNzTWV0YWRhdGEoY2xzKTsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIHdlIHVzZSBjb25zdGFudHMgZnJvbSBDRkUuCiAgICAgICAgY2xhc3NOYW1lID0gZ2V0SnNJbnRlcm9wTmFtZShjbHMsIG1ldGFkYXRhKTsKICAgICAgfQogICAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwpIHsKICAgICAgICBib29sIGlzQW5vbnltb3VzOwogICAgICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgICAgICBpc0Fub255bW91cyA9IGFubm90YXRpb25EYXRhLmlzQW5vbnltb3VzSnNJbnRlcm9wQ2xhc3MoY2xhc3NOb2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXNBbm9ueW1vdXMgPSBmYWxzZTsKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIGJyYW5jaCB3aGVuIHdlIHVzZSBjb25zdGFudHMgZnJvbQogICAgICAgICAgLy8gQ0ZFLgogICAgICAgICAgZm9yIChDb25zdGFudFZhbHVlIHZhbHVlIGluIG1ldGFkYXRhKSB7CiAgICAgICAgICAgIGlmIChpc0Fubm90YXRpb24oY2xzLCB2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNBbm9ueW1vdXNDbGFzcykpIHsKICAgICAgICAgICAgICBpc0Fub255bW91cyA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwb3J0IGFuIGVycm9yIGlmIHRoZSBjbGFzcyBpcyBhbm9ueW1vdXMgYnV0CiAgICAgICAgLy8gaGFzIGEgbm9uLWVtcHR5IG5hbWUuCiAgICAgICAgX25hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIubWFya0FzSnNJbnRlcm9wQ2xhc3MoY2xzLAogICAgICAgICAgICBuYW1lOiBjbGFzc05hbWUsIGlzQW5vbnltb3VzOiBpc0Fub255bW91cyk7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXQgaXMgdW5jbGVhciB3aGV0aGVyIGxpYnJhcnkgY2FuIGJlIGltcGxpY2l0bHkKICAgICAgICAvLyBqcy1pbnRlcm9wLiBGb3Igbm93IHdlIGFsbG93IGl0LgogICAgICAgIGlzSnNMaWJyYXJ5ID0gdHJ1ZTsKCiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywgKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICAgICAgICAvLyBUT0RPKDM0MTc0KTogRGlzYWxsb3cganMtaW50ZXJvcCBmaWVsZHMuCiAgICAgICAgICAgIC8qcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgbWVtYmVyLCBNZXNzYWdlS2luZC5JTVBMSUNJVF9KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURUQpOyovCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IG1lbWJlcjsKICAgICAgICAgICAgaXIuTWVtYmVyIG1lbWJlck5vZGUgPSBlbGVtZW50TWFwLmdldE1lbWJlck5vZGUobWVtYmVyKTsKICAgICAgICAgICAgU3RyaW5nIG1lbWJlck5hbWU7CiAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgbWVtYmVyTmFtZSA9IGFubm90YXRpb25EYXRhLmdldEpzSW50ZXJvcE1lbWJlck5hbWUobWVtYmVyTm9kZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB3ZSB1c2UgY29uc3RhbnRzIGZyb20gQ0ZFLgogICAgICAgICAgICAgIG1lbWJlck5hbWUgPSBnZXRKc0ludGVyb3BOYW1lKAogICAgICAgICAgICAgICAgICBsaWJyYXJ5LCBlbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEoZnVuY3Rpb24pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZnVuY3Rpb24uaXNFeHRlcm5hbCkgewogICAgICAgICAgICAgIG1lbWJlck5hbWUgPz89IGZ1bmN0aW9uLm5hbWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG1lbWJlck5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGV4cGxpY2l0CiAgICAgICAgICAgICAgLy8gbWVtYmVyIG5hbWUgYW5ub3RhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIG9uIGluc3RhbmNlIG1lbWJlcnMuCiAgICAgICAgICAgICAgX25hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIubWFya0FzSnNJbnRlcm9wTWVtYmVyKAogICAgICAgICAgICAgICAgICBmdW5jdGlvbiwgbWVtYmVyTmFtZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghZnVuY3Rpb24uaXNFeHRlcm5hbCAmJgogICAgICAgICAgICAgICAgIWZ1bmN0aW9uLmlzQWJzdHJhY3QgJiYKICAgICAgICAgICAgICAgICFmdW5jdGlvbi5pc1N0YXRpYykgewogICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX01FTUJFUiwKICAgICAgICAgICAgICAgICAgeydjbHMnOiBjbHMubmFtZSwgJ21lbWJlcic6IG1lbWJlci5uYW1lfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJzKGZ1bmN0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENvbnN0cnVjdG9yKGNscywKICAgICAgICAgICAgKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSB7CiAgICAgICAgICBTdHJpbmcgbWVtYmVyTmFtZSA9IGdldEpzSW50ZXJvcE5hbWUoCiAgICAgICAgICAgICAgbGlicmFyeSwgZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKGNvbnN0cnVjdG9yKSk7CiAgICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNFeHRlcm5hbCkgewogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJdCBzaG91bGQgcHJvYmFibHkgYmUgYW4gZXJyb3IgdG8gaGF2ZSBhCiAgICAgICAgICAgIC8vIG5vLW5hbWUgY29uc3RydWN0b3Igd2l0aG91dCBhIEBKUygpIGFubm90YXRpb24uCiAgICAgICAgICAgIG1lbWJlck5hbWUgPz89IGNvbnN0cnVjdG9yLm5hbWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobWVtYmVyTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGV4cGxpY2l0CiAgICAgICAgICAgIC8vIG1lbWJlciBuYW1lIGFubm90YXRpb25zIGFyZSBub3QgYWxsb3dlZCBvbiBpbnN0YW5jZSBtZW1iZXJzLgogICAgICAgICAgICBfbmF0aXZlQmFzaWNEYXRhQnVpbGRlci5tYXJrQXNKc0ludGVyb3BNZW1iZXIoCiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciwgbWVtYmVyTmFtZSk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVE9ETygzMzgzNCk6IEl0IGlzIGEgYnJlYWtpbmcgY2hhbmdlIChhdCBsZWFzdCBhZ2FpbnN0IGluIHNvbWUgb2YKICAgICAgICAgIC8vIG91ciBvd24gdGVzdHMpIGJ1dCBKUy1pbnRlcm9wIGNvbnN0cnVjdG9ycyBzaG91bGQgYmUgcmVxdWlyZWQgdG8gYmUKICAgICAgICAgIC8vIGV4dGVybmFsIHNpbmNlIHdlIG90aGVyd2lzZSBhbGxvdyBjcmVhdGluZyBhIERhcnQgb2JqZWN0IHRoYXQgdHJpZXMKICAgICAgICAgIC8vIHRvIHBhc3MgYXMgYSBKUy1pbnRlcm9wIGNsYXNzLgogICAgICAgICAgLyppZiAoIWNvbnN0cnVjdG9yLmlzRXh0ZXJuYWwpIHsKICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKGNvbnN0cnVjdG9yLAogICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfQ09OU1RSVUNUT1IsIHsKICAgICAgICAgICAgICAnY2xzJzogY2xzLm5hbWUsCiAgICAgICAgICAgICAgJ2NvbnN0cnVjdG9yJzoKICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IubmFtZS5pc0VtcHR5ID8gJyR7Y2xzLm5hbWV9LicgOiBjb25zdHJ1Y3Rvci5uYW1lCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSovCgogICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzRmFjdG9yeUNvbnN0cnVjdG9yICYmIGlzQW5vbnltb3VzKSB7CiAgICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnMgPiAwKSB7CiAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciwKICAgICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQKICAgICAgICAgICAgICAgICAgICAgIC5KU19PQkpFQ1RfTElURVJBTF9DT05TVFJVQ1RPUl9XSVRIX1BPU0lUSU9OQUxfQVJHVU1FTlRTLAogICAgICAgICAgICAgICAgICB7J2Nscyc6IGNscy5uYW1lfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnN0cnVjdG9yKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoY2xzLCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgICAgU3RyaW5nIG1lbWJlck5hbWUgPSBnZXRKc0ludGVyb3BOYW1lKAogICAgICAgICAgICAgIGxpYnJhcnksIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShtZW1iZXIpKTsKICAgICAgICAgIGlmIChtZW1iZXJOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgbWVtYmVyLCBNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FTUJFUl9JTl9OT05fSlNfSU5URVJPUF9DTEFTUyk7CiAgICAgICAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSkgewogICAgICAgICAgICBpZiAobWVtYmVyLmlzRXh0ZXJuYWwgJiYKICAgICAgICAgICAgICAgICFjb21tb25FbGVtZW50cy5pc0V4dGVybmFsQWxsb3dlZChtZW1iZXIpKSB7CiAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgICBtZW1iZXIsIE1lc3NhZ2VLaW5kLk5PTl9OQVRJVkVfRVhURVJOQUwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDb25zdHJ1Y3RvcihjbHMsCiAgICAgICAgICAgIChDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikgewogICAgICAgICAgU3RyaW5nIG1lbWJlck5hbWUgPSBnZXRKc0ludGVyb3BOYW1lKAogICAgICAgICAgICAgIGxpYnJhcnksIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShjb25zdHJ1Y3RvcikpOwogICAgICAgICAgaWYgKG1lbWJlck5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoY29uc3RydWN0b3IsCiAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FTUJFUl9JTl9OT05fSlNfSU5URVJPUF9DTEFTUyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNFeHRlcm5hbCAmJgogICAgICAgICAgICAgICAgIWNvbW1vbkVsZW1lbnRzLmlzRXh0ZXJuYWxBbGxvd2VkKGNvbnN0cnVjdG9yKSkgewogICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IsIE1lc3NhZ2VLaW5kLk5PTl9OQVRJVkVfRVhURVJOQUwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwoKICAgIGlmIChpc0pzTGlicmFyeSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJdCBpcyB1bmNsZWFyIHdoZXRoZXIgbGlicmFyeSBjYW4gYmUgaW1wbGljaXRseQogICAgICAvLyBqcy1pbnRlcm9wLiBGb3Igbm93IHdlIGFsbG93IGl0IGFuZCBhc3N1bWUgdGhlIGVtcHR5IG5hbWUuCiAgICAgIGxpYnJhcnlOYW1lID8/PSAnJzsKICAgICAgX25hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIubWFya0FzSnNJbnRlcm9wTGlicmFyeShsaWJyYXJ5LAogICAgICAgICAgbmFtZTogbGlicmFyeU5hbWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcm9jZXNzSnNJbnRlcm9wQW5ub3RhdGlvbnMoCiAgICAgIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGEsIE5hdGl2ZURhdGFCdWlsZGVyIG5hdGl2ZURhdGFCdWlsZGVyKSB7CiAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIgPSBlbGVtZW50TWFwLnJlcG9ydGVyOwogICAgS0VsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQgPSBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKICAgIEtDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogICAgZm9yIChMaWJyYXJ5RW50aXR5IGxpYnJhcnkgaW4gZWxlbWVudEVudmlyb25tZW50LmxpYnJhcmllcykgewogICAgICAvLyBFcnJvciBjaGVja2luZyBmb3IgY2xhc3MgaW5oZXJpdGFuY2UgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIGZpcnN0IHBhc3MKICAgICAgLy8gdGhyb3VnaCBhbGwgdGhlIGNsYXNzZXMgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZSB0byBkZWNsYXJlIGEgc3ViY2xhc3MKICAgICAgLy8gYmVmb3JlIGEgc3VwZXJjbGFzcyB0aGF0IGhhcyBub3QgeWV0IGhhZCAibWFya0pzSW50ZXJvcENsYXNzIiBjYWxsZWQgb24KICAgICAgLy8gaXQuCiAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3MobGlicmFyeSwgKENsYXNzRW50aXR5IGNscykgewogICAgICAgIGlyLkNsYXNzIGNsYXNzTm9kZSA9IGVsZW1lbnRNYXAuZ2V0Q2xhc3NOb2RlKGNscyk7CiAgICAgICAgU3RyaW5nIGNsYXNzTmFtZTsKICAgICAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICAgICAgY2xhc3NOYW1lID0gYW5ub3RhdGlvbkRhdGEuZ2V0SnNJbnRlcm9wQ2xhc3NOYW1lKGNsYXNzTm9kZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gd2UgdXNlIGNvbnN0YW50cyBmcm9tIENGRS4KICAgICAgICAgIGNsYXNzTmFtZSA/Pz0KICAgICAgICAgICAgICBnZXRKc0ludGVyb3BOYW1lKGNscywgZWxlbWVudEVudmlyb25tZW50LmdldENsYXNzTWV0YWRhdGEoY2xzKSk7CiAgICAgICAgfQogICAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkgewogICAgICAgICAgYm9vbCBpbXBsZW1lbnRzSnNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MgPSBmYWxzZTsKICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoU3VwZXJ0eXBlKGNscywgKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSB7CiAgICAgICAgICAgIGlmIChzdXBlcnR5cGUuZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcykgewogICAgICAgICAgICAgIGltcGxlbWVudHNKc0phdmFTY3JpcHRPYmplY3RDbGFzcyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFpbXBsZW1lbnRzSnNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgY2xzLCBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0NMQVNTX0NBTk5PVF9FWFRFTkRfREFSVF9DTEFTUywgewogICAgICAgICAgICAgICdjbHMnOiBjbHMubmFtZSwKICAgICAgICAgICAgICAnc3VwZXJjbGFzcyc6IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscykubmFtZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KfQqBSgBOTjwBNiQBQSs4KQEdSwEMOUxAAUE0HSRCD04QUCxBKCMlOQwKCCRMCAgEARs/QBssKD4dJB8hRjsIBhsEATpCLhQ+JgYEAQw8N0xAAUEYIkkNSiZEBj4wAU0/GSRID0wnRAgcIjYpRQoPKj5MISgKIiZOK0kTUS9JOyAMKjsnOgoICAFBKDkYJEUPPUw1CB8aJk0RH1ASMk0iFQ4MCk4hOjhQLBwBUCA4K1ATLkUfKk4VUi1MDicsDiZNTj0pDgEoKCYrHEQ9DgEvDAwzLjBLKE0/LQwkS0w7KgwBT1FRLCs1SR8dTxAOAUFLKx8eUCYOEzIMDA9QMEYkKVAxJT0rPA4MDDMuMEskNUgTKkIrQQ4MDAgIARdORBo+HgYEAQwkTjdMQAFCT05RDUM7GiZHEU4YTwohOk9POA4ONClOH0cQDAoKBgQCATJwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvbmF0aXZlX2Jhc2ljX2RhdGEuZGFydEFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwvbm9fc3VjaF9tZXRob2RfcmVzb2x2ZXIuZGFydIlTLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydDJqcy5rZXJuZWwuZWxlbWVudF9tYXA7CgpjbGFzcyBLZXJuZWxOb1N1Y2hNZXRob2RSZXNvbHZlciBpbXBsZW1lbnRzIE5vU3VjaE1ldGhvZFJlc29sdmVyIHsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXA7CgogIEtlcm5lbE5vU3VjaE1ldGhvZFJlc29sdmVyKHRoaXMuZWxlbWVudE1hcCk7CgogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PiBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc0ZvcndhcmRpbmdTeW50YXgoS0Z1bmN0aW9uIG1ldGhvZCkgewogICAgaXIuUHJvY2VkdXJlIG5vZGUgPSBlbGVtZW50TWFwLl9sb29rdXBQcm9jZWR1cmUobWV0aG9kKTsKICAgIGlmIChub2RlLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBmYWxzZTsKICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gZmlyc3RQYXJhbWV0ZXIgPQogICAgICAgIG5vZGUuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuZmlyc3Q7CiAgICBpci5TdGF0ZW1lbnQgYm9keSA9IG5vZGUuZnVuY3Rpb24uYm9keTsKICAgIGlyLkV4cHJlc3Npb24gZXhwcjsKICAgIGlmIChib2R5IGlzIGlyLkJsb2NrICYmIGJvZHkuc3RhdGVtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIGlyLkJsb2NrIGJsb2NrID0gYm9keTsKICAgICAgYm9keSA9IGJsb2NrLnN0YXRlbWVudHMuZmlyc3Q7CiAgICB9CiAgICBpZiAoYm9keSBpcyBpci5SZXR1cm5TdGF0ZW1lbnQpIHsKICAgICAgZXhwciA9IGJvZHkuZXhwcmVzc2lvbjsKICAgIH0KICAgIGlmIChleHByIGlzIGlyLkFzRXhwcmVzc2lvbiAmJgogICAgICAgIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUoZXhwci50eXBlKSA9PSBfY29tbW9uRWxlbWVudHMuZHluYW1pY1R5cGUpIHsKICAgICAgaXIuQXNFeHByZXNzaW9uIGFzRXhwcmVzc2lvbiA9IGV4cHI7CiAgICAgIGV4cHIgPSBhc0V4cHJlc3Npb24ub3BlcmFuZDsKICAgIH0KICAgIGlmIChleHByIGlzIGlyLlN1cGVyTWV0aG9kSW52b2NhdGlvbiAmJgogICAgICAgIGV4cHIubmFtZS5uYW1lID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8pIHsKICAgICAgaXIuQXJndW1lbnRzIGFyZ3VtZW50cyA9IGV4cHIuYXJndW1lbnRzOwogICAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID09IDEgJiYKICAgICAgICAgIGFyZ3VtZW50cy5uYW1lZC5pc0VtcHR5ICYmCiAgICAgICAgICBhcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICAgIGlyLlZhcmlhYmxlR2V0IGdldCA9IGFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0OwogICAgICAgIHJldHVybiBnZXQudmFyaWFibGUgPT0gZmlyc3RQYXJhbWV0ZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzVGhyb3dpbmdTeW50YXgoS0Z1bmN0aW9uIG1ldGhvZCkgewogICAgaXIuUHJvY2VkdXJlIG5vZGUgPSBlbGVtZW50TWFwLl9sb29rdXBQcm9jZWR1cmUobWV0aG9kKTsKICAgIGlyLlN0YXRlbWVudCBib2R5ID0gbm9kZS5mdW5jdGlvbi5ib2R5OwogICAgaWYgKGJvZHkgaXMgaXIuQmxvY2sgJiYgYm9keS5zdGF0ZW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgaXIuQmxvY2sgYmxvY2sgPSBib2R5OwogICAgICBib2R5ID0gYmxvY2suc3RhdGVtZW50cy5maXJzdDsKICAgIH0KICAgIGlyLkV4cHJlc3Npb24gZXhwcjsKICAgIGlmIChib2R5IGlzIGlyLlJldHVyblN0YXRlbWVudCkgewogICAgICBleHByID0gYm9keS5leHByZXNzaW9uOwogICAgfSBlbHNlIGlmIChib2R5IGlzIGlyLkV4cHJlc3Npb25TdGF0ZW1lbnQpIHsKICAgICAgZXhwciA9IGJvZHkuZXhwcmVzc2lvbjsKICAgIH0KICAgIHJldHVybiBleHByIGlzIGlyLlRocm93OwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0U3VwZXJOb1N1Y2hNZXRob2QoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRTdXBlck5vU3VjaE1ldGhvZChtZXRob2QuZW5jbG9zaW5nQ2xhc3MpOwogIH0KfQpIAE5OPAEkAUMrAS8BTwFDAQwvPUIsMiwYOh0lBiYeBiNMKyMGLDcvLiU6OS8IBhIEAQwtPSw6HSUGGCYeMR4GHQQBDD9DBAIBOHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9ub19zdWNoX21ldGhvZF9yZXNvbHZlci5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9mcm9udF9lbmRfYWRhcHRlci5kYXJ0jxovLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEhlbHBlciBjbGFzc2VzIGFuZCBtZXRob2RzIHRvIGFkYXB0IGJldHdlZW4gYHBhY2thZ2U6Y29tcGlsZXJgIGFuZAovLy8gYHBhY2thZ2U6ZnJvbnRfZW5kYCBBUElzLgpsaWJyYXJ5IGNvbXBpbGVyLmtlcm5lbC5mcm9udF9lbmRfYWRhcHRlcjsKCmltcG9ydCAnZGFydDphc3luYyc7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKCmltcG9ydCAnLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9maWxlLmRhcnQnOwoKLy8vIEEgZnJvbnQtZW5kcydzIFtGaWxlU3lzdGVtXSB0aGF0IHVzZXMgZGFydDJqcydzIFthcGkuQ29tcGlsZXJJbnB1dF0uCmNsYXNzIENvbXBpbGVyRmlsZVN5c3RlbSBpbXBsZW1lbnRzIGZlLkZpbGVTeXN0ZW0gewogIGZpbmFsIGFwaS5Db21waWxlcklucHV0IGlucHV0UHJvdmlkZXI7CgogIENvbXBpbGVyRmlsZVN5c3RlbSh0aGlzLmlucHV0UHJvdmlkZXIpOwoKICBAb3ZlcnJpZGUKICBmZS5GaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSA9PSAnZGF0YScpIHsKICAgICAgcmV0dXJuIG5ldyBmZS5EYXRhRmlsZVN5c3RlbUVudGl0eShVcmkuYmFzZS5yZXNvbHZlVXJpKHVyaSkpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBfQ29tcGlsZXJGaWxlU3lzdGVtRW50aXR5KHVyaSwgdGhpcyk7CiAgICB9CiAgfQp9CgpjbGFzcyBfQ29tcGlsZXJGaWxlU3lzdGVtRW50aXR5IGltcGxlbWVudHMgZmUuRmlsZVN5c3RlbUVudGl0eSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHVyaTsKICBmaW5hbCBDb21waWxlckZpbGVTeXN0ZW0gZnM7CgogIF9Db21waWxlckZpbGVTeXN0ZW1FbnRpdHkodGhpcy51cmksIHRoaXMuZnMpOwoKICBAb3ZlcnJpZGUKICBGdXR1cmU8U3RyaW5nPiByZWFkQXNTdHJpbmcoKSBhc3luYyB7CiAgICBhcGkuSW5wdXQgaW5wdXQ7CiAgICB0cnkgewogICAgICBpbnB1dCA9IGF3YWl0IGZzLmlucHV0UHJvdmlkZXIKICAgICAgICAgIC5yZWFkRnJvbVVyaSh1cmksIGlucHV0S2luZDogYXBpLklucHV0S2luZC5VVEY4KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IGZlLkZpbGVTeXN0ZW1FeGNlcHRpb24odXJpLCAnJGUnKTsKICAgIH0KICAgIGlmIChpbnB1dCA9PSBudWxsKSB0aHJvdyBuZXcgZmUuRmlsZVN5c3RlbUV4Y2VwdGlvbih1cmksICJGaWxlIG5vdCBmb3VuZCIpOwogICAgLy8gVE9ETyhzaWdtdW5kKTogdGVjaG5pY2FsbHkgc29tZW9uZSBjb3VsZCBwcm92aWRlIGRhcnQyanMgd2l0aCBhbiBpbnB1dAogICAgLy8gdGhhdCBpcyBub3QgYSBTb3VyY2VGaWxlLiBOb3RlIHRoYXQgdGhpcyBhc3N1bXB0aW9uIGlzIGFsc28gZG9uZSBpbiB0aGUKICAgIC8vIChub24ta2VybmVsKSBTY3JpcHRMb2FkZXIuCiAgICBTb3VyY2VGaWxlIGZpbGUgPSBpbnB1dCBhcyBTb3VyY2VGaWxlOwogICAgcmV0dXJuIGZpbGUuc2xvd1RleHQoKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxMaXN0PGludD4+IHJlYWRBc0J5dGVzKCkgYXN5bmMgewogICAgYXBpLklucHV0IGlucHV0OwogICAgdHJ5IHsKICAgICAgaW5wdXQgPSBhd2FpdCBmcy5pbnB1dFByb3ZpZGVyCiAgICAgICAgICAucmVhZEZyb21VcmkodXJpLCBpbnB1dEtpbmQ6IGFwaS5JbnB1dEtpbmQuYmluYXJ5KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IGZlLkZpbGVTeXN0ZW1FeGNlcHRpb24odXJpLCAnJGUnKTsKICAgIH0KICAgIGlmIChpbnB1dCA9PSBudWxsKSB0aHJvdyBuZXcgZmUuRmlsZVN5c3RlbUV4Y2VwdGlvbih1cmksICJGaWxlIG5vdCBmb3VuZCIpOwogICAgcmV0dXJuIGlucHV0LmRhdGE7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgYXN5bmMgewogICAgdHJ5IHsKICAgICAgYXBpLklucHV0IGlucHV0ID0gYXdhaXQgZnMuaW5wdXRQcm92aWRlcgogICAgICAgICAgLnJlYWRGcm9tVXJpKHVyaSwgaW5wdXRLaW5kOiBhcGkuSW5wdXRLaW5kLmJpbmFyeSk7CiAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgovLy8gUmVwb3J0IGEgW21lc3NhZ2VdIHJlY2VpdmVkIGZyb20gdGhlIGZyb250LWVuZCwgdXNpbmcgZGFydDJqcydzCi8vLyBbRGlhZ25vc3RpY1JlcG9ydGVyXS4Kdm9pZCByZXBvcnRGcm9udEVuZE1lc3NhZ2UoCiAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIGZlLkRpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICBTcGFubmFibGUgX2dldFNwYW5uYWJsZShmZS5EaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBVcmkgdXJpID0gZmUuZ2V0TWVzc2FnZVVyaShtZXNzYWdlKTsKICAgIGludCBvZmZzZXQgPSBmZS5nZXRNZXNzYWdlQ2hhck9mZnNldChtZXNzYWdlKTsKICAgIGludCBsZW5ndGggPSBmZS5nZXRNZXNzYWdlTGVuZ3RoKG1lc3NhZ2UpOwogICAgaWYgKHVyaSAhPSBudWxsICYmIG9mZnNldCAhPSAtMSkgewogICAgICByZXR1cm4gbmV3IFNvdXJjZVNwYW4odXJpLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gTk9fTE9DQVRJT05fU1BBTk5BQkxFOwogICAgfQogIH0KCiAgRGlhZ25vc3RpY01lc3NhZ2UgX2NvbnZlcnRNZXNzYWdlKGZlLkRpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIFNwYW5uYWJsZSBzcGFuID0gX2dldFNwYW5uYWJsZShtZXNzYWdlKTsKICAgIFN0cmluZyB0ZXh0ID0gZmUuZ2V0TWVzc2FnZUhlYWRlclRleHQobWVzc2FnZSk7CiAgICByZXR1cm4gcmVwb3J0ZXIuY3JlYXRlTWVzc2FnZShzcGFuLCBNZXNzYWdlS2luZC5HRU5FUklDLCB7J3RleHQnOiB0ZXh0fSk7CiAgfQoKICBMaXN0PGZlLkRpYWdub3N0aWNNZXNzYWdlPiByZWxhdGVkSW5mb3JtYXRpb24gPQogICAgICBmZS5nZXRNZXNzYWdlUmVsYXRlZEluZm9ybWF0aW9uKG1lc3NhZ2UpOwogIERpYWdub3N0aWNNZXNzYWdlIG1haW5NZXNzYWdlID0gX2NvbnZlcnRNZXNzYWdlKG1lc3NhZ2UpOwogIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zID0gcmVsYXRlZEluZm9ybWF0aW9uICE9IG51bGwKICAgICAgPyByZWxhdGVkSW5mb3JtYXRpb24ubWFwKF9jb252ZXJ0TWVzc2FnZSkudG9MaXN0KCkKICAgICAgOiBjb25zdCBbXTsKICBzd2l0Y2ggKG1lc3NhZ2Uuc2V2ZXJpdHkpIHsKICAgIGNhc2UgZmUuU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtOgogICAgICB0aHJvdyBtYWluTWVzc2FnZS5tZXNzYWdlLmNvbXB1dGVNZXNzYWdlKCk7CiAgICBjYXNlIGZlLlNldmVyaXR5LmVycm9yOgogICAgICByZXBvcnRlci5yZXBvcnRFcnJvcihtYWluTWVzc2FnZSwgaW5mb3MpOwogICAgICBicmVhazsKICAgIGNhc2UgZmUuU2V2ZXJpdHkud2FybmluZzoKICAgICAgcmVwb3J0ZXIucmVwb3J0V2FybmluZyhtYWluTWVzc2FnZSwgaW5mb3MpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoJ3VuaGFuZGxlZCBzZXZlcml0eSAke21lc3NhZ2Uuc2V2ZXJpdHl9Jyk7CiAgfQp9CnwATk48AUceKwEVAUABKQEZIQFJNCkBKgEMLiBEDTcGBAIBQQwRHwEwAQwoFQolPBIzBlBOTyIrHAQBDCoVCiU+EjMGUBcEAQwgCi8+HBIUBgQCAUQaHEE6KTMvJzsNJAYEAUQtNE4EATIwPD05Eh4mMhwwDR4yDQ1OBAIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9mcm9udF9lbmRfYWRhcHRlci5kYXJ0KnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2Nsb3N1cmUuZGFydLj5Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICdqc19tb2RlbC9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJ2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJ3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBDbGFzcyB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGZvciBob3cgY2xvc3VyZXMgYXJlIHJld3JpdHRlbi9yZXByZXNlbnRlZAovLy8gdG8gcHJlc2VydmUgRGFydCBzZW1hbnRpY3Mgd2hlbiBjb21waWxlZCB0byBKYXZhU2NyaXB0LiBHaXZlbiBhIHBhcnRpY3VsYXIKLy8vIG5vZGUgdG8gbG9vayB1cCwgaXQgcmV0dXJucyBhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbgovLy8gb2YgaG93IGNsb3N1cmUgY29udmVyc2lvbiBpcyBpbXBsZW1lbnRlZC4gVCBpcyBhbiBpci5Ob2RlIG9yIE5vZGUuCmFic3RyYWN0IGNsYXNzIENsb3N1cmVEYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0Nsb3N1cmVEYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENsb3N1cmVEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIERhdGFTb3VyY2Ugc291cmNlKSA9CiAgICAgIENsb3N1cmVEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2U7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0Nsb3N1cmVEYXRhXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIC8vLyBMb29rIHVwIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YXJpYWJsZXMgdGhhdCBoYXZlIGJlZW4gbXV0YXRlZCBhbmQgYXJlCiAgLy8vIHVzZWQgaW5zaWRlIHRoZSBzY29wZSBvZiBbbm9kZV0uCiAgU2NvcGVJbmZvIGdldFNjb3BlSW5mbyhNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBnZXRDbG9zdXJlSW5mbyhpci5Mb2NhbEZ1bmN0aW9uIGxvY2FsRnVuY3Rpb24pOwoKICAvLy8gTG9vayB1cCBpbmZvcm1hdGlvbiBhYm91dCBhIGxvb3AsIGluIGNhc2UgYW55IHZhcmlhYmxlcyBpdCBkZWNsYXJlcyBuZWVkCiAgLy8vIHRvIGJlIGJveGVkL3NuYXBzaG90dGVkLgogIENhcHR1cmVkTG9vcFNjb3BlIGdldENhcHR1cmVkTG9vcFNjb3BlKGlyLk5vZGUgbG9vcE5vZGUpOwoKICAvLy8gQWNjZXNzb3IgdG8gdGhlIGluZm9ybWF0aW9uIGFib3V0IHNjb3BlcyB0aGF0IGNsb3N1cmVzIGNhcHR1cmUuIFVzZWQgYnkKICAvLy8gdGhlIFNTQSBidWlsZGVyLgogIENhcHR1cmVkU2NvcGUgZ2V0Q2FwdHVyZWRTY29wZShNZW1iZXJFbnRpdHkgZW50aXR5KTsKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW1Njb3BlSW5mb10gc3ViY2xhc3NlcyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIFNjb3BlSW5mb0tpbmQgewogIHNjb3BlSW5mbywKICBjYXB0dXJlZFNjb3BlLAogIGNhcHR1cmVkTG9vcFNjb3BlLAogIGNsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8sCn0KCi8vLyBDbGFzcyB0aGF0IHJlcHJlc2VudHMgb25lIGxldmVsIG9mIHNjb3BpbmcgaW5mb3JtYXRpb24sIHdoZXRoZXIgdGhpcyBzY29wZQovLy8gaXMgYSBjbG9zdXJlIG9yIG5vdC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgdXNlZCB0byBzdG9yZSBpbmZvcm1hdGlvbgovLy8gYWJvdXQgdGhlIHVzYWdlIG9mIHZhcmlhYmxlcyBpbiB0cnkgb3Igc3luYyBibG9ja3MsIGJlY2F1c2UgdGhleSBuZWVkIHRvIGJlCi8vLyBib3hlZC4KLy8vCi8vLyBWYXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBpbiBhIHRyeSBtdXN0IGJlIHRyZWF0ZWQgYXMgYm94ZWQgYmVjYXVzZSB0aGUKLy8vIGNvbnRyb2wgZmxvdyBjYW4gYmUgbm9uLWxpbmVhci4gQWxzbyBwYXJhbWV0ZXJzIHRvIGEgYHN5bmMqYCBnZW5lcmF0b3IgbXVzdAovLy8gYmUgYm94ZWQsIGJlY2F1c2Ugb2YgdGhlIHdheSB3ZSByZXdyaXRlIHN5bmMqIGZ1bmN0aW9ucy4gU2VlIGFsc28gY29tbWVudHMKLy8vIGluIFtDbG9zdXJlQ2xhc3NNYXAudXNlTG9jYWxdLgpjbGFzcyBTY29wZUluZm8gewogIGNvbnN0IFNjb3BlSW5mbygpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW1Njb3BlSW5mb10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBTY29wZUluZm8ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBTY29wZUluZm9LaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oU2NvcGVJbmZvS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5zY29wZUluZm86CiAgICAgICAgcmV0dXJuIG5ldyBKc1Njb3BlSW5mby5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNhcHR1cmVkU2NvcGU6CiAgICAgICAgcmV0dXJuIG5ldyBKc0NhcHR1cmVkU2NvcGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jYXB0dXJlZExvb3BTY29wZToKICAgICAgICByZXR1cm4gbmV3IEpzQ2FwdHVyZWRMb29wU2NvcGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvOgogICAgICAgIHJldHVybiBuZXcgS2VybmVsQ2xvc3VyZUNsYXNzSW5mby5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbmV4cGVjdGVkIFNjb3BlSW5mb0tpbmQgJGtpbmQnKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1Njb3BlSW5mb10gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCcke3J1bnRpbWVUeXBlfS53cml0ZVRvRGF0YVNpbmsnKTsKICB9CgogIC8vLyBDb252ZW5pZW5jZSByZWZlcmVuY2UgcG9pbnRlciB0byB0aGUgZWxlbWVudCByZXByZXNlbnRpbmcgYHRoaXNgLgogIC8vLyBJZiB0aGlzIHNjb3BlIGlzIG5vdCBpbiBhbiBpbnN0YW5jZSBtZW1iZXIsIGl0IHdpbGwgYmUgbnVsbC4KICBMb2NhbCBnZXQgdGhpc0xvY2FsID0+IG51bGw7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBbdmFyaWFibGVdIGlzIHVzZWQgaW5zaWRlIGEgYHRyeWAgYmxvY2sgb3IgYSBgc3luYypgCiAgLy8vIGdlbmVyYXRvciAodGhpcyBpcyBpbXBvcnRhbnQgdG8ga25vdyBiZWNhdXNlIGJveGluZy9yZWRpcmVjdGlvbiBuZWVkcyB0bwogIC8vLyBoYXBwZW4gZm9yIHRob3NlIGxvY2FsIHZhcmlhYmxlcykuCiAgLy8vCiAgLy8vIFZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGluIGEgdHJ5IG11c3QgYmUgdHJlYXRlZCBhcyBib3hlZCBiZWNhdXNlIHRoZQogIC8vLyBjb250cm9sIGZsb3cgY2FuIGJlIG5vbi1saW5lYXIuCiAgLy8vCiAgLy8vIEFsc28gcGFyYW1ldGVycyB0byBhIGBzeW5jKmAgZ2VuZXJhdG9yIG11c3QgYmUgYm94ZWQsIGJlY2F1c2Ugb2YgdGhlIHdheQogIC8vLyB3ZSByZXdyaXRlIHN5bmMqIGZ1bmN0aW9ucy4gU2VlIGFsc28gY29tbWVudHMgaW4KICAvLy8gW0Nsb3N1cmVDbGFzc01hcC51c2VMb2NhbF0uCiAgYm9vbCBsb2NhbElzVXNlZEluVHJ5T3JTeW5jKExvY2FsIHZhcmlhYmxlKSA9PiBmYWxzZTsKCiAgLy8vIExvb3AgdGhyb3VnaCBlYWNoIHZhcmlhYmxlIHRoYXQgaGFzIGJlZW4gZGVmaW5lZCBpbiB0aGlzIHNjb3BlLCBtb2RpZmllZAogIC8vLyBhbnl3aGVyZSAodGhpcyBzY29wZSBvciBhbm90aGVyIHNjb3BlKSBhbmQgdXNlZCBpbiBhbm90aGVyIHNjb3BlLiBCZWNhdXNlCiAgLy8vIGl0IGlzIHVzZWQgaW4gYW5vdGhlciBzY29wZSwgdGhlc2UgdmFyaWFibGVzIG5lZWQgdG8gYmUgImJveGVkIiwgY3JlYXRpbmcKICAvLy8gYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFjY2Vzc2VzIHRvIHRoZXNlIHZhcmlhYmxlcyBzbyB0aGF0IGFjY2Vzc2VzIGdldAogIC8vLyB0aGUgY29ycmVjdCB1cGRhdGVkIHZhbHVlLiBUaGUgdmFyaWFibGVzIGluIGxvY2Fsc1VzZWRJblRyeU9yU3luYyBtYXkKICAvLy8gYmUgaW5jbHVkZWQgaW4gdGhpcyBzZXQuCiAgLy8vCiAgLy8vIEluIHRoZSBjYXNlIG9mIGxvb3BzLCB0aGlzIGlzIHRoZSBzZXQgb2YgaXRlcmF0aW9uIHZhcmlhYmxlcyAob3IgYW55CiAgLy8vIHZhcmlhYmxlcyBkZWNsYXJlZCBpbiB0aGUgZm9yIGxvb3AgZXhwcmVzc2lvbiAoYGZvciAoLi4uaGVyZS4uLilgKSB0aGF0CiAgLy8vIG5lZWQgdG8gYmUgYm94ZWQgdG8gc25hcHNob3QgdGhlaXIgdmFsdWUuCiAgdm9pZCBmb3JFYWNoQm94ZWRWYXJpYWJsZShmKExvY2FsIGxvY2FsLCBGaWVsZEVudGl0eSBmaWVsZCkpIHt9CgogIC8vLyBUcnVlIGlmIFt2YXJpYWJsZV0gaGFzIGJlZW4gbXV0YXRlZCBhbmQgaXMgYWxzbyB1c2VkIGluIGFub3RoZXIgc2NvcGUuCiAgYm9vbCBpc0JveGVkVmFyaWFibGUoTG9jYWwgdmFyaWFibGUpID0+IGZhbHNlOwp9CgovLy8gQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSB1c2FnZSBvZiBhIHNjb3BlIHRoYXQgaGFzIGJlZW4gY2FwdHVyZWQgaW4gdGhlCi8vLyBjb250ZXh0IG9mIGEgY2xvc3VyZS4KY2xhc3MgQ2FwdHVyZWRTY29wZSBleHRlbmRzIFNjb3BlSW5mbyB7CiAgY29uc3QgQ2FwdHVyZWRTY29wZSgpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0NhcHR1cmVkU2NvcGVdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgQ2FwdHVyZWRTY29wZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIFNjb3BlSW5mb0tpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShTY29wZUluZm9LaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLnNjb3BlSW5mbzoKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNsb3N1cmVSZXByZXNlbnRhdGlvbkluZm86CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VuZXhwZWN0ZWQgQ2FwdHVyZWRTY29wZSBraW5kICRraW5kJyk7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jYXB0dXJlZFNjb3BlOgogICAgICAgIHJldHVybiBuZXcgSnNDYXB0dXJlZFNjb3BlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRMb29wU2NvcGU6CiAgICAgICAgcmV0dXJuIG5ldyBKc0NhcHR1cmVkTG9vcFNjb3BlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VuZXhwZWN0ZWQgU2NvcGVJbmZvS2luZCAka2luZCcpOwogIH0KCiAgLy8vIElmIHRydWUsIHRoaXMgY2xvc3VyZSBhY2Nlc3NlcyBhIHZhcmlhYmxlIHRoYXQgd2FzIGRlZmluZWQgaW4gYW4gb3V0c2lkZQogIC8vLyBzY29wZSBhbmQgdGhpcyB2YXJpYWJsZSBnZXRzIG1vZGlmaWVkIGF0IHNvbWUgcG9pbnQgKHNvbWV0aW1lcyB3ZSBzYXkgdGhhdAogIC8vLyB2YXJpYWJsZSBoYXMgYmVlbiAiY2FwdHVyZWQiKS4gSW4gdGhpcyBzaXR1YXRpb24sIGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlCiAgLy8vIGlzIGNvbnRyb2xsZWQgdmlhIGEgd3JhcHBlciAoYm94KSBzbyB0aGF0IHVwZGF0ZXMgdG8gdGhpcyB2YXJpYWJsZQogIC8vLyBhcmUgZG9uZSBpbiBhIHdheSB0aGF0IGlzIGluIGxpbmUgd2l0aCBEYXJ0J3MgY2xvc3VyZSBydWxlcy4KICBib29sIGdldCByZXF1aXJlc0NvbnRleHRCb3ggPT4gZmFsc2U7CgogIC8vLyBBY2Nlc3NvciB0byB0aGUgbG9jYWwgZW52aXJvbm1lbnQgaW4gd2hpY2ggYSBwYXJ0aWN1bGFyIGNsb3N1cmUgbm9kZSBpcwogIC8vLyBleGVjdXRlZC4gVGhpcyB3aWxsIGVuY2Fwc3VsYXRlIHRoZSB2YWx1ZSBvZiBhbnkgdmFyaWFibGVzIHRoYXQgaGF2ZSBiZWVuCiAgLy8vIHNjb3BlZCBpbnRvIHRoaXMgY29udGV4dCBmcm9tIG91dHNpZGUuIFRoaXMgaXMgYW4gYWNjZXNzb3IgdG8gdGhlCiAgLy8vIGNvbnRleHRCb3ggdGhhdCBbcmVxdWlyZXNDb250ZXh0Qm94XSBpcyB0ZXN0aW5nIGlzIHJlcXVpcmVkLgogIExvY2FsIGdldCBjb250ZXh0ID0+IG51bGw7Cn0KCi8vLyBDbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0dWFsIG1lY2hhbmljcyBvZiBob3cgdmFsdWVzIG9mIHZhcmlhYmxlcwovLy8gaW5zdGFudGlhdGVkIGluIGEgbG9vcCBhcmUgY2FwdHVyZWQgaW5zaWRlIGNsb3N1cmVzIGluIHRoZSBsb29wIGJvZHkuCi8vLyBVbmxpa2UgSlMsIHRoZSB2YWx1ZSBvZiBhIGRlY2xhcmVkIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGluIGFueSBjbG9zdXJlCi8vLyBpcyBjYXB0dXJlZC9zbmFwc2hvdHRlZCBpbnNpZGUgYXQgZWFjaCBpdGVyYXRpb24gcG9pbnQsIGFzIGlmIHdlIGNyZWF0ZWQgYQovLy8gbmV3IGxvY2FsIHZhcmlhYmxlIGZvciB0aGF0IHZhbHVlIGluc2lkZSB0aGUgbG9vcC4gRm9yIGV4YW1wbGUsIGZvciB0aGUKLy8vIGZvbGxvd2luZyBsb29wOgovLy8KLy8vICAgICB2YXIgbHN0ID0gW107Ci8vLyAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIGxzdC5hZGQoKCk9PmkpOwovLy8gICAgIHZhciByZXN1bHQgPSBsaXN0Lm1hcCgoZikgPT4gZigpKS50b0xpc3QoKTsKLy8vCi8vLyBgcmVzdWx0YCB3aWxsIGJlIFswLCAxLCAyLCAzLCA0XSwgd2hlcmVhcyB3ZXJlIHRoaXMgSlMgY29kZQovLy8gdGhlIHJlc3VsdCB3b3VsZCBiZSBbNSwgNSwgNSwgNSwgNV0uIEJlY2F1c2Ugb2YgdGhpcyBkaWZmZXJlbmNlIHdlIG5lZWQgdG8KLy8vIGNyZWF0ZSBhIGNsb3N1cmUgZm9yIHRoZXNlIHNvcnRzIG9mIGxvb3BzIHRvIGNhcHR1cmUgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgYXQKLy8vIGVhY2ggaXRlcmF0aW9uLCBieSBib3hpbmcgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZVtzXS4KY2xhc3MgQ2FwdHVyZWRMb29wU2NvcGUgZXh0ZW5kcyBDYXB0dXJlZFNjb3BlIHsKICBjb25zdCBDYXB0dXJlZExvb3BTY29wZSgpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0NhcHR1cmVkTG9vcFNjb3BlXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENhcHR1cmVkTG9vcFNjb3BlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgU2NvcGVJbmZvS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFNjb3BlSW5mb0tpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuc2NvcGVJbmZvOgogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbzoKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNhcHR1cmVkU2NvcGU6CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VuZXhwZWN0ZWQgQ2FwdHVyZWRMb29wU2NvcGUga2luZCAka2luZCcpOwogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRMb29wU2NvcGU6CiAgICAgICAgcmV0dXJuIG5ldyBKc0NhcHR1cmVkTG9vcFNjb3BlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VuZXhwZWN0ZWQgU2NvcGVJbmZvS2luZCAka2luZCcpOwogIH0KCiAgLy8vIFRydWUgaWYgdGhpcyBsb29wIHNjb3BlIGRlY2xhcmVzIGluIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsb29wCiAgLy8vIGBmb3IgKDxoZXJlPjsuLi47Li4uKWAgYW55IHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgYm94ZWQuCiAgYm9vbCBnZXQgaGFzQm94ZWRMb29wVmFyaWFibGVzID0+IGZhbHNlOwoKICAvLy8gVGhlIHNldCBvZiBpdGVyYXRpb24gdmFyaWFibGVzIChvciB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gdGhlIGZvciBsb29wCiAgLy8vIGV4cHJlc3Npb24gKGBmb3IgKDxoZXJlPjsgLi4uIDsgLi4uKWApIHRoYXQgbmVlZCB0byBiZSBib3hlZCB0byBzbmFwc2hvdAogIC8vLyB0aGVpciB2YWx1ZS4gVGhlc2UgdmFyaWFibGVzIGFyZSBhbHNvIGluY2x1ZGVkIGluIHRoZSBzZXQgb2YKICAvLy8gYGZvckVhY2hCb3hlZFZhcmlhYmxlYCBtZXRob2QuIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBzZXRzIGlzCiAgLy8vIGluIHRoaXMgZXhhbXBsZToKICAvLy8KICAvLy8gICAgIHJ1bihmKSA9PiBmKCk7CiAgLy8vICAgICB2YXIgYTsKICAvLy8gICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgLy8vICAgICAgIHZhciBiID0gMzsKICAvLy8gICAgICAgYSA9ICgpID0+IGIgPSBpOwogIC8vLyAgICAgfQogIC8vLwogIC8vLyBgaWAgd291bGQgYmUgYSBwYXJ0IG9mIHRoZSBib3hlZExvb3BWYXJpYWJsZXMgQU5EIGJveGVkVmFyaWFibGVzLCBidXQgYgogIC8vLyB3b3VsZCBvbmx5IGJlIGEgcGFydCBvZiBib3hlZFZhcmlhYmxlcy4KICBMaXN0PExvY2FsPiBnZXQgYm94ZWRMb29wVmFyaWFibGVzID0+IGNvbnN0IDxMb2NhbD5bXTsKfQoKLy8vIENsYXNzIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3R1YWwgbWVjaGFuaWNzIG9mIGhvdyB0aGUgY29udmVydGVkLCByZXdyaXR0ZW4KLy8vIGNsb3N1cmUgaXMgaW1wbGVtZW50ZWQuIEZvciBleGFtcGxlLCBmb3IgdGhlIGZvbGxvd2luZyBjbG9zdXJlIChuYW1lZCBmb28KLy8vIGZvciBjb252ZW5pZW5jZSk6Ci8vLwovLy8gICB2YXIgZm9vID0gKHgpID0+IHkgKyB4OwovLy8KLy8vIFdlIHdvdWxkIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBjbGFzcyB0byBjb250cm9sIGFjY2VzcyB0byB0aGVzZSB2YXJpYWJsZXMgaW4KLy8vIHRoZSBmb2xsb3dpbmcgd2F5IChtb2R1bG8gbmFtaW5nIG9mIHZhcmlhYmxlcywgYXNzdW1pbmcgdGhhdCB5IGlzIG1vZGlmaWVkCi8vLyBlbHNld2hlcmUgaW4gaXRzIHNjb3BlKToKLy8vCi8vLyAgICBjbGFzcyBGb29DbG9zdXJlIHsKLy8vICAgICAgIGludCB5OwovLy8gICAgICAgRm9vQ2xvc3VyZSh0aGlzLnkpOwovLy8gICAgICAgY2FsbCh4KSA9PiB0aGlzLnkgKyB4OwovLy8gICAgfQovLy8KLy8vICBhbmQgdGhlbiB0byBleGVjdXRlIHRoaXMgY2xvc3VyZSwgZm9yIGV4YW1wbGU6Ci8vLwovLy8gICAgIHZhciBmb28gPSBuZXcgRm9vQ2xvc3VyZSgxKTsKLy8vICAgICBmb28uY2FsbCgyKTsKLy8vCi8vLyBpZiBgeWAgaXMgbW9kaWZpZWQgZWxzZXdoZXJlIHdpdGhpbiBpdHMgc2NvcGUsIGFjY2Vzc2VzIHRvIHkgYW55d2hlcmUgaW4gdGhlCi8vLyBjb2RlIHdpbGwgYmUgY29udHJvbGxlZCB2aWEgYSBib3ggb2JqZWN0LgovLy8KLy8vIEJlY2F1c2UgaW4gdGhlc2UgZXhhbXBsZXMgYHlgIHdhcyBkZWNsYXJlZCBpbiBzb21lIG90aGVyLCBvdXRlciBzY29wZSwgYnV0Ci8vLyB1c2VkIGluIHRoZSBpbm5lciBzY29wZSBvZiB0aGlzIGNsb3N1cmUsIHdlIHNheSBgeWAgaXMgYSAiY2FwdHVyZWQiCi8vLyB2YXJpYWJsZS4KLy8vIFRPRE8oZWZvcnR1bmEpOiBNYWtlIGludGVyZmFjZSBzaW1wbGVyIGluIHN1YnNlcXVlbnQgcmVmYWN0b3JpbmdzLgpjbGFzcyBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGV4dGVuZHMgU2NvcGVJbmZvIHsKICBjb25zdCBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvKCk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mb10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgU2NvcGVJbmZvS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFNjb3BlSW5mb0tpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuc2NvcGVJbmZvOgogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRTY29wZToKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNhcHR1cmVkTG9vcFNjb3BlOgogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAnVW5leHBlY3RlZCBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGtpbmQgJGtpbmQnKTsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNsb3N1cmVSZXByZXNlbnRhdGlvbkluZm86CiAgICAgICAgcmV0dXJuIG5ldyBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VuZXhwZWN0ZWQgU2NvcGVJbmZvS2luZCAka2luZCcpOwogIH0KCiAgLy8vIFRoZSBvcmlnaW5hbCBsb2NhbCBmdW5jdGlvbiBiZWZvcmUgYW55IHRyYW5zbGF0aW9uLgogIC8vLwogIC8vLyBXaWxsIGJlIG51bGwgZm9yIG1ldGhvZHMuCiAgTG9jYWwgZ2V0IGNsb3N1cmVFbnRpdHkgPT4gbnVsbDsKCiAgLy8vIFRoZSBlbnRpdHkgZm9yIHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgcmV3cml0dGVuIGNsb3N1cmUgaW4gdGhlCiAgLy8vIGVtaXR0ZWQgSmF2YVNjcmlwdC4KICAvLy8KICAvLy8gQ2xvc3VyZXMgYXJlIHJld3JpdHRlbiBpbiB0aGUgZm9ybSBvZiBjbGFzc2VzIHRoYXQgaGF2ZSBmaWVsZHMgdG8gY29udHJvbAogIC8vLyB0aGUgcmVkaXJlY3Rpb24gYW5kIGVkaXRpbmcgb2YgY2FwdHVyZWQgdmFyaWFibGVzLgogIENsYXNzRW50aXR5IGdldCBjbG9zdXJlQ2xhc3NFbnRpdHkgPT4gbnVsbDsKCiAgLy8vIFRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIFtsb2NhbF0gZnVuY3Rpb24gYXMgYSBgY2FsbGAgbWV0aG9kIG9uCiAgLy8vIHRoZSBjbG9zdXJlIGNsYXNzLgogIEZ1bmN0aW9uRW50aXR5IGdldCBjYWxsTWV0aG9kID0+IG51bGw7CgogIC8vLyBUaGUgc2lnbmF0dXJlIG1ldGhvZCBmb3IgW2NhbGxNZXRob2RdIGlmIG5lZWRlZC4KICBGdW5jdGlvbkVudGl0eSBnZXQgc2lnbmF0dXJlTWV0aG9kID0+IG51bGw7CgogIC8vLyBMaXN0IG9mIGxvY2FscyB0aGF0IHRoaXMgY2xvc3VyZSBjbGFzcyBoYXMgY3JlYXRlZCBjb3JyZXNwb25kaW5nIGZpZWxkCiAgLy8vIGVudGl0aWVzIGZvci4KICBAZGVwcmVjYXRlZAogIExpc3Q8TG9jYWw+IGdldCBjcmVhdGVkRmllbGRFbnRpdGllcyA9PiBjb25zdCA8TG9jYWw+W107CgogIC8vLyBBcyBzaG93biBpbiB0aGUgZXhhbXBsZSBpbiB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGlzIGNsYXNzLCB3ZQogIC8vLyBjcmVhdGUgZmllbGRzIGluIHRoZSBjbG9zdXJlIGNsYXNzIGZvciBlYWNoIGNhcHR1cmVkIHZhcmlhYmxlLiBUaGlzIGlzIGFuCiAgLy8vIGFjY2Vzc29yIHRoZSBbbG9jYWxdIGZvciB3aGljaCBbZmllbGRdIHdhcyBjcmVhdGVkLgogIC8vLyBSZXR1cm5zIHRoZSBbbG9jYWxdIGZvciB3aGljaCBbZmllbGRdIHdhcyBjcmVhdGVkLgogIExvY2FsIGdldExvY2FsRm9yRmllbGQoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIGZhaWxlZEF0KGZpZWxkLCAiTm8gbG9jYWwgZm9yICRmaWVsZC4iKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIENvbnZlbmllbmNlIHBvaW50ZXIgdG8gdGhlIGZpZWxkIGVudGl0eSByZXByZXNlbnRhdGlvbiBpbiB0aGUgY2xvc3VyZQogIC8vLyBjbGFzcyBvZiB0aGUgZWxlbWVudCByZXByZXNlbnRpbmcgYHRoaXNgLgogIEZpZWxkRW50aXR5IGdldCB0aGlzRmllbGRFbnRpdHkgPT4gbnVsbDsKCiAgLy8vIExvb3AgdGhyb3VnaCBlYWNoIHZhcmlhYmxlIHRoYXQgaGFzIGJlZW4gYm94ZWQgaW4gdGhpcyBjbG9zdXJlIGNsYXNzLiBPbmx5CiAgLy8vIGNhcHR1cmVkIHZhcmlhYmxlcyB0aGF0IGFyZSBtdXRhdGVkIG5lZWQgdG8gYmUgImJveGVkIiAod2hpY2ggYmFzaWNhbGx5CiAgLy8vIHB1dHMgYSB0aGluIGxheWVyIGJldHdlZW4gdXBkYXRlcyBhbmQgcmVhZHMgdG8gdGhpcyB2YXJpYWJsZSB0byBlbnN1cmUKICAvLy8gdGhhdCBldmVyeSBwbGFjZSB0aGF0IGFjY2Vzc2VzIGl0IGdldHMgdGhlIGNvcnJlY3QgdXBkYXRlZCB2YWx1ZSkuIFRoaXMKICAvLy8gaW5jbHVkZXMgbG9vcGluZyBvdmVyIHZhcmlhYmxlcyB0aGF0IHdlcmUgYm94ZWQgZnJvbSBvdGhlciBzY29wZXMsIG5vdAogIC8vLyBzdHJpY3RseSB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGlzIGNsb3N1cmUsIHVubGlrZSB0aGUgYmVoYXZpb3IgaW4KICAvLy8gdGhlIHN1cGVyY2xhc3MgU2NvcGVJbmZvLgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEJveGVkVmFyaWFibGUoZihMb2NhbCBsb2NhbCwgRmllbGRFbnRpdHkgZmllbGQpKSB7fQoKICAvLy8gTG9vcCB0aHJvdWdoIGVhY2ggZnJlZSB2YXJpYWJsZSBpbiB0aGlzIGNsb3N1cmUuIEZyZWUgdmFyaWFibGVzIGFyZSB0aGUKICAvLy8gdmFyaWFibGVzIHRoYXQgaGF2ZSBiZWVuIGNhcHR1cmVkICpqdXN0KiBpbiB0aGlzIGNsb3N1cmUsIG5vdCBpbiBuZXN0ZWQKICAvLy8gc2NvcGVzLgogIHZvaWQgZm9yRWFjaEZyZWVWYXJpYWJsZShmKExvY2FsIHZhcmlhYmxlLCBGaWVsZEVudGl0eSBmaWVsZCkpIHt9CgogIC8vIFRPRE8oZWZvcnR1bmEpOiBSZW1vdmUgdGhpcyBtZXRob2QuIFRoZSBvbGQgc3lzdGVtIHdhcyB1c2luZwogIC8vIENsb3N1cmVDbGFzc01hcHMgZm9yIHNpdHVhdGlvbnMgb3RoZXIgdGhhbiBjbG9zdXJlIGNsYXNzIG1hcHMsIGFuZCB0aGF0J3MKICAvLyBqdXN0IGNvbmZ1c2luZy4KICBib29sIGdldCBpc0Nsb3N1cmUgPT4gZmFsc2U7Cn0KCi8vLyBBIGxvY2FsIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlIGJveCBvYmplY3QgaG9sZGluZyB0aGUgW0JveEZpZWxkRWxlbWVudF0KLy8vIGZpZWxkcy4KY2xhc3MgQm94TG9jYWwgZXh0ZW5kcyBMb2NhbCB7CiAgZmluYWwgQ2xhc3NFbnRpdHkgY29udGFpbmVyOwoKICBCb3hMb2NhbCh0aGlzLmNvbnRhaW5lcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiBjb250YWluZXIubmFtZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIEJveExvY2FsICYmIG90aGVyLmNvbnRhaW5lciA9PSBjb250YWluZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGNvbnRhaW5lci5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0JveExvY2FsKCRuYW1lKSc7Cn0KCi8vLyBBIGxvY2FsIHZhcmlhYmxlIHVzZWQgZW5jb2RlIHRoZSBkaXJlY3QgKHVuY2FwdHVyZWQpIHJlZmVyZW5jZXMgdG8gW3RoaXNdLgpjbGFzcyBUaGlzTG9jYWwgZXh0ZW5kcyBMb2NhbCB7CiAgZmluYWwgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3M7CgogIFRoaXNMb2NhbCh0aGlzLmVuY2xvc2luZ0NsYXNzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+ICd0aGlzJzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFRoaXNMb2NhbCAmJiBvdGhlci5lbmNsb3NpbmdDbGFzcyA9PSBlbmNsb3NpbmdDbGFzczsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gZW5jbG9zaW5nQ2xhc3MuaGFzaENvZGU7Cn0KCi8vLyBBIHR5cGUgdmFyaWFibGUgYXMgYSBsb2NhbCB2YXJpYWJsZS4KY2xhc3MgVHlwZVZhcmlhYmxlTG9jYWwgaW1wbGVtZW50cyBMb2NhbCB7CiAgZmluYWwgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGU7CgogIFR5cGVWYXJpYWJsZUxvY2FsKHRoaXMudHlwZVZhcmlhYmxlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+IHR5cGVWYXJpYWJsZS5lbGVtZW50Lm5hbWU7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdHlwZVZhcmlhYmxlLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIFR5cGVWYXJpYWJsZUxvY2FsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlID09IG90aGVyLnR5cGVWYXJpYWJsZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCd0eXBlX3ZhcmlhYmxlX2xvY2FsKCcpOwogICAgc2Iud3JpdGUodHlwZVZhcmlhYmxlKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLwovLy8gTW92ZSB0aGUgYmVsb3cgY2xhc3NlcyB0byBhIEpTIG1vZGVsIGV2ZW50dWFsbHkuCi8vLwphYnN0cmFjdCBjbGFzcyBKU0VudGl0eSBpbXBsZW1lbnRzIE1lbWJlckVudGl0eSB7CiAgU3RyaW5nIGdldCBkZWNsYXJlZE5hbWU7Cn0KCmFic3RyYWN0IGNsYXNzIFByaXZhdGVseU5hbWVkSlNFbnRpdHkgaW1wbGVtZW50cyBKU0VudGl0eSB7CiAgRW50aXR5IGdldCByb290T2ZTY29wZTsKfQqBgQBOTjwBKBYhHiAkKwFPT1BHHTkqOioBLycBTScvAUwBTx88AU4XNwIBRxUNERUdAgFPSFALBEpQTyMSFQE3PEAUJDsoPyxDNEYGQgQBLShCBAFIQx8BUE8pBkwmBk83IjgBT1BQTUwfBktOMEIBTTECAUoaKBkBO0BAFCQ0Syg/LEMGQgQBT1FQSUMoAU5QSEMdAgFJSk5PTBQEFjQ0BEBPUTkwHQE/REAUJDQoTyxDBkIEAUVCKwFMT0NPFwYZESgXHQwGTi45AgFOThYEHgRRTx0EGhEeIQkENAQlFQRRLgRPSA5HNCUBR0xAFCQoLCRANEYGQgQBOgYgIwFOGgZQOS4BThkpATcuAU0UDjsBS1A6OS4tEQQBTDArAVFOTU5NSSAMQgFOTg5EAUJPFR8CAVAMHx8BHAEMJQEMHD4EAQwqAQwqAgFPICQBIgEMHQEMHEkEAQwvAgEpKycBKAEMMAEMLQEMHDMvBAEMFiomHBMaBAIBBDUEMhsCATwaAgEhcGFja2FnZTpjb21waWxlci9zcmMvY2xvc3VyZS5kYXJ0MXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2VsZW1lbnRzL2p1bXBzLmRhcnSESS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGVsZW1lbnRzLmp1bXBzOwoKaW1wb3J0ICdlbnRpdGllcy5kYXJ0JzsKCi8vLyBUaGUgbGFiZWwgZW50aXR5IGRlZmluZWQgYnkgYSBsYWJlbGVkIHN0YXRlbWVudC4KYWJzdHJhY3QgY2xhc3MgTGFiZWxEZWZpbml0aW9uIGV4dGVuZHMgRW50aXR5IHsKICBTdHJpbmcgZ2V0IGxhYmVsTmFtZTsKICBKdW1wVGFyZ2V0IGdldCB0YXJnZXQ7CgogIGJvb2wgZ2V0IGlzVGFyZ2V0ID0+IGlzQnJlYWtUYXJnZXQgfHwgaXNDb250aW51ZVRhcmdldDsKCiAgYm9vbCBnZXQgaXNCcmVha1RhcmdldDsKICBib29sIGdldCBpc0NvbnRpbnVlVGFyZ2V0Owp9CgovLy8gQSBqdW1wIHRhcmdldCBpcyB0aGUgcmVmZXJlbmNlIHBvaW50IG9mIGEgc3RhdGVtZW50IG9yIHN3aXRjaC1jYXNlLAovLy8gZWl0aGVyIGJ5IGxhYmVsIG9yIGFzIHRoZSBkZWZhdWx0IHRhcmdldCBvZiBhIGJyZWFrIG9yIGNvbnRpbnVlLgphYnN0cmFjdCBjbGFzcyBKdW1wVGFyZ2V0IGV4dGVuZHMgTG9jYWwgewogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAndGFyZ2V0JzsKCiAgYm9vbCBnZXQgaXNUYXJnZXQgPT4gaXNCcmVha1RhcmdldCB8fCBpc0NvbnRpbnVlVGFyZ2V0OwoKICBpbnQgZ2V0IG5lc3RpbmdMZXZlbDsKICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gZ2V0IGxhYmVsczsKCiAgYm9vbCBnZXQgaXNCcmVha1RhcmdldDsKICBib29sIGdldCBpc0NvbnRpbnVlVGFyZ2V0OwogIGJvb2wgZ2V0IGlzU3dpdGNoOwogIGJvb2wgZ2V0IGlzU3dpdGNoQ2FzZTsKCiAgTGFiZWxEZWZpbml0aW9uIGFkZExhYmVsKFN0cmluZyBsYWJlbE5hbWUsCiAgICAgIHtib29sIGlzQnJlYWtUYXJnZXQ6IGZhbHNlLCBib29sIGlzQ29udGludWVUYXJnZXQ6IGZhbHNlfSk7Cn0KKABOTjwBGAEYATUwGBkBOgEaHQIBSEUqDB8BOgEYJAEaHRUZAS1CAgEocGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvanVtcHMuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0lbMvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX21vZGVsLnR5cGVfcmVjaXBlOwoKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKCi8vLyBBIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIHNoYXBlIG9yIGxheW91dCBvZiBhIHJlaWZpZWQgdHlwZQovLy8gZW52aXJvbm1lbnQuCi8vLwovLy8gQSB0eXBlIGVudmlyb25tZW50IG1hcHMgdHlwZSBwYXJhbWV0ZXIgdmFyaWFibGVzIHRvIHR5cGUgdmFsdWVzLiBUaGUgdHlwZQovLy8gdmFyaWFibGVzIGFyZSBtb3N0bHkgZWxpZGVkIGluIHRoZSBydW50aW1lIHJlcHJlc2VudGF0aW9uLCByZXBsYWNlZCBieQovLy8gaW5kZXhlcyBpbnRvIHRoZSByZWlmaWVkIGVudmlyb25tZW50LgphYnN0cmFjdCBjbGFzcyBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgewogIC8vLyBTdHJ1Y3R1cmFsIGVxdWFsaXR5IG9uIFtUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmVdLgogIHN0YXRpYyBib29sIHNhbWUoVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGEsIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBiKSB7CiAgICBpZiAoYSBpcyBTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgaWYgKGIgaXMgU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKSB7CiAgICAgICAgcmV0dXJuIGEudmFyaWFibGUgPT0gYi52YXJpYWJsZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gX3NhbWVGdWxsU3RydWN0dXJlKGEsIGIpOwogIH0KCiAgc3RhdGljIGJvb2wgX3NhbWVGdWxsU3RydWN0dXJlKAogICAgICBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGEsIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgYikgewogICAgaWYgKGEuY2xhc3NUeXBlICE9IGIuY2xhc3NUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGFCaW5kaW5ncyA9IGEuYmluZGluZ3M7CiAgICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGJCaW5kaW5ncyA9IGIuYmluZGluZ3M7CiAgICBpZiAoYUJpbmRpbmdzLmxlbmd0aCAhPSBiQmluZGluZ3MubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFCaW5kaW5ncy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoYUJpbmRpbmdzW2ldICE9IGJCaW5kaW5nc1tpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CgovLy8gQSBzaW5nbGV0b24gdHlwZSBlbnZpcm9ubWVudCBtYXBzIGEgYmluZHMgYSBzaW5nbGUgdmFsdWUuCmNsYXNzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBleHRlbmRzIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSB7CiAgZmluYWwgVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZTsKCiAgU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKHRoaXMudmFyaWFibGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKCR2YXJpYWJsZSknOwp9CgovLy8gQSB0eXBlIGVudmlyb25tZW50IGNvbnRhaW5pbmcgYW4gaW50ZXJmYWNlIHR5cGUgYW5kL29yIGEgdHVwbGUgb2YgZnVuY3Rpb24KLy8vIHR5cGUgcGFyYW1ldGVycy4KY2xhc3MgRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBleHRlbmRzIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSBjbGFzc1R5cGU7CiAgZmluYWwgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBiaW5kaW5nczsKCiAgRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSh7dGhpcy5jbGFzc1R5cGUsIHRoaXMuYmluZGluZ3MgPSBjb25zdCBbXX0pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSgkY2xhc3NUeXBlLCAkYmluZGluZ3MpJzsKfQoKLy8vIEEgVHlwZVJlY2lwZSBpcyBldmFsdWF0ZWQgYWdhaW5zdCBhIHR5cGUgZW52aXJvbm1lbnQgdG8gcHJvZHVjZSBlaXRoZXIgYQovLy8gdHlwZSwgb3IgYW5vdGhlciB0eXBlIGVudmlyb25tZW50LgphYnN0cmFjdCBjbGFzcyBUeXBlUmVjaXBlIHsKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaXMgW3JlY2lwZUJdIGV2YWx1YXRlZCBpbiBhbiBlbnZpcm9ubWVudCBkZXNjcmliZWQgYnkKICAvLy8gW3N0cnVjdHVyZUJdIGdpdmVzIHRoZSBzYW1lIHR5cGUgYXMgW3JlY2lwZUFdIGV2YWx1YXRlZCBpbiBlbnZpcm9ubWVudAogIC8vLyBkZXNjcmliZWQgYnkgW3N0cnVjdHVyZUFdLgogIHN0YXRpYyBib29sIHlpZWxkc1NhbWVUeXBlKAogICAgICBUeXBlUmVjaXBlIHJlY2lwZUEsCiAgICAgIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBzdHJ1Y3R1cmVBLAogICAgICBUeXBlUmVjaXBlIHJlY2lwZUIsCiAgICAgIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBzdHJ1Y3R1cmVCKSB7CiAgICBpZiAocmVjaXBlQSA9PSByZWNpcGVCICYmCiAgICAgICAgVHlwZUVudmlyb25tZW50U3RydWN0dXJlLnNhbWUoc3RydWN0dXJlQSwgc3RydWN0dXJlQikpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBUeXBlIHJlY2lwZXMgdGhhdCBhcmUgZGlmZmVyZW50IGJ1dCBlcXVhbCBtb2R1bG8gbmFtaW5nIGFsc28KICAgIC8vIHlpZWxkIHRoZSBzYW1lIHR5cGUsIGUuZy4gYExpc3Q8WD4gQFhgIGFuZCBgTGlzdDxZPiBAWWAuCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3JlY2lwZV0gZXZhbHVhdGVzIGluIGFuIGVudmlyb25tZW50IHdpdGggW3N0cnVjdHVyZV0gdG8KICAvLy8gdGhlIGVudmlyb25tZW50LgogIHN0YXRpYyBib29sIGlzSWRlbnRpdHkoCiAgICAgIFR5cGVSZWNpcGUgcmVjaXBlLCBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgc3RydWN0dXJlKSB7CiAgICBpZiAoc3RydWN0dXJlIGlzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSAmJgogICAgICAgIHJlY2lwZSBpcyBUeXBlRXhwcmVzc2lvblJlY2lwZSkgewogICAgICBpZiAoc3RydWN0dXJlLnZhcmlhYmxlID09IHJlY2lwZS50eXBlKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCi8vLyBBIHJlY2lwZSB0aGF0IHlpZWxkcyBhIHJlaWZpZWQgdHlwZS4KY2xhc3MgVHlwZUV4cHJlc3Npb25SZWNpcGUgZXh0ZW5kcyBUeXBlUmVjaXBlIHsKICBmaW5hbCBEYXJ0VHlwZSB0eXBlOwoKICBUeXBlRXhwcmVzc2lvblJlY2lwZSh0aGlzLnR5cGUpOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgVHlwZUV4cHJlc3Npb25SZWNpcGUgJiYgdHlwZSA9PSBvdGhlci50eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1R5cGVFeHByZXNzaW9uUmVjaXBlKCR0eXBlKSc7Cn0KCi8vLyBBIHJlY2lwZSB0aGF0IHlpZWxkcyBhIHJlaWZpZWQgdHlwZSBlbnZpcm9ubWVudC4KYWJzdHJhY3QgY2xhc3MgVHlwZUVudmlyb25tZW50UmVjaXBlIGV4dGVuZHMgVHlwZVJlY2lwZSB7fQoKLy8vIEEgcmVjaXBlIHRoYXQgeWllbGRzIGEgcmVpZmllZCB0eXBlIGVudmlyb25tZW50IHRoYXQgYmluZHMgYSBzaW5nbGUgZ2VuZXJpYwovLy8gZnVuY3Rpb24gdHlwZSBwYXJhbWV0ZXIuCmNsYXNzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZSBleHRlbmRzIFR5cGVFbnZpcm9ubWVudFJlY2lwZSB7CiAgZmluYWwgRGFydFR5cGUgdHlwZTsKCiAgU2luZ2xldG9uVHlwZUVudmlyb25tZW50UmVjaXBlKHRoaXMudHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRSZWNpcGUgJiYgdHlwZSA9PSBvdGhlci50eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1NpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZSgkdHlwZSknOwp9CgovLy8gQSByZWNpcGUgdGhhdCB5aWVsZHMgYSByZWlmaWVkIHR5cGUgZW52aXJvbm1lbnQgdGhhdCBiaW5kcyBhIGNsYXNzIGluc3RhbmNlCi8vLyB0eXBlIGFuZC9vciBhIHR1cGxlIG9mIHR5cGVzLCB1c3VhbGx5IGdlbmVyaWMgZnVuY3Rpb24gdHlwZSBhcmd1bWVudHMuCi8vLwovLy8gV2l0aCBubyBjbGFzcyBpcyBhbHNvIHVzZWQgYXMgYSB0dXBsZSBvZiB0eXBlcy4KY2xhc3MgRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZSBleHRlbmRzIFR5cGVFbnZpcm9ubWVudFJlY2lwZSB7CiAgLy8vIFR5cGUgZXhwcmVzc2lvbiBmb3IgdGhlIGludGVyZmFjZSB0eXBlIG9mIGEgY2xhc3Mgc2NvcGUuICBgbnVsbGAgZm9yCiAgLy8vIGVudmlyb25tZW50cyBvdXRzaWRlIGEgY2xhc3Mgc2NvcGUgb3IgYSBjbGFzcyBzY29wZSB3aGVyZSBubyBzdXBlcnR5cGUgaXMKICAvLy8gZ2VuZXJpYywgb3Igd2hlcmUgb3B0aW1pemF0aW9uIGhhcyBkZXRlcm1pbmVkIHRoYXQgbm8gdXNlIG9mIHRoZQogIC8vLyBlbnZpcm9ubWVudCByZXF1aXJlcyBhbnkgb2YgdGhlIGNsYXNzIHR5cGUgdmFyaWFibGVzLgogIGZpbmFsIEludGVyZmFjZVR5cGUgY2xhc3NUeXBlOwoKICAvLyBUeXBlIGV4cHJlc3Npb25zIGZvciB0aGUgdHVwbGUgb2YgZnVuY3Rpb24gdHlwZSBhcmd1bWVudHMuCiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZXM7CgogIEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUoe3RoaXMuY2xhc3NUeXBlLCB0aGlzLnR5cGVzID0gY29uc3QgW119KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUgJiYgX2VxdWFsKHRoaXMsIG90aGVyKTsKICB9CgogIHN0YXRpYyBib29sIF9lcXVhbChGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlIGEsIEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUgYikgewogICAgaWYgKGEuY2xhc3NUeXBlICE9IGIuY2xhc3NUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBMaXN0PERhcnRUeXBlPiBhVHlwZXMgPSBhLnR5cGVzOwogICAgTGlzdDxEYXJ0VHlwZT4gYlR5cGVzID0gYi50eXBlczsKICAgIGlmIChhVHlwZXMubGVuZ3RoICE9IGJUeXBlcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYVR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChhVHlwZXNbaV0gIT0gYlR5cGVzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlKCRjbGFzc1R5cGUsICR0eXBlcyknOwp9CoClAE5OPAEmASEBTxEETksqKjlNMjQpCBQGJQQBIkgyMzM8MTYGEQQCAT5LIwE0AQxHAgFPFUYhKQFMAQxOAgFNJxxLTSEeGisaLR5BEwYBT0ASBAFRFxo/Oio6BhIEAgEpMBcBIwEMHEAEAQw2AgE1OwFQHUUXAS0BDBxKBAEMQAIBUEsENEBLUEc8IQFAHgFGAQwcRgQBUTIlJTYuMAYRBAEMSAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnRCc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL2ludm9rZV9keW5hbWljX3NwZWNpYWxpemVycy5kYXJ0wADK3y8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdsb2dnaW5nLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ3R5cGVzLmRhcnQnOwoKLy8vIFtJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXJdIGFuZCBpdHMgc3ViY2xhc3NlcyBhcmUgaGVscGVycyB0bwovLy8gb3B0aW1pemUgaW50ZXJjZXB0ZWQgZHluYW1pYyBjYWxscy4gSXQga25vd3Mgd2hhdCBpbnB1dCB0eXBlcwovLy8gd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgcGVyZm9ybWFuY2UsIGFuZCBob3cgdG8gY2hhbmdlIGEgaW52b2tlCi8vLyBkeW5hbWljIHRvIGEgYnVpbHRpbiBpbnN0cnVjdGlvbiAoZS5nLiBISW5kZXgsIEhCaXROb3QpLgpjbGFzcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IEludm9rZUR5bmFtaWNTcGVjaWFsaXplcigpOwoKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIEFic3RyYWN0VmFsdWVGYWN0b3J5LmluZmVycmVkUmVzdWx0VHlwZUZvclNlbGVjdG9yKAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBpbnN0cnVjdGlvbi5yZWNlaXZlclR5cGUsIHJlc3VsdHMpOwogIH0KCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIGNsZWFyQWxsU2lkZUVmZmVjdHMoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgaW5zdHJ1Y3Rpb24uc2V0VXNlR3ZuKCk7CiAgfQoKICBTZWxlY3RvciByZW5hbWVUb09wdGltaXplZFNlbGVjdG9yKAogICAgICBTdHJpbmcgbmFtZSwgU2VsZWN0b3Igc2VsZWN0b3IsIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgaWYgKHNlbGVjdG9yLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHNlbGVjdG9yOwogICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5jYWxsKG5ldyBOYW1lKG5hbWUsIGNvbW1vbkVsZW1lbnRzLmludGVyY2VwdG9yc0xpYnJhcnkpLAogICAgICAgIG5ldyBDYWxsU3RydWN0dXJlKHNlbGVjdG9yLmFyZ3VtZW50Q291bnQpKTsKICB9CgogIGNvbnN0YW50X3N5c3RlbS5PcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gbnVsbDsKCiAgc3RhdGljIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciBsb29rdXBTcGVjaWFsaXplcihTZWxlY3RvciBzZWxlY3RvcikgewogICAgaWYgKHNlbGVjdG9yLmlzSW5kZXgpIHJldHVybiBjb25zdCBJbmRleFNwZWNpYWxpemVyKCk7CiAgICBpZiAoc2VsZWN0b3IuaXNJbmRleFNldCkgcmV0dXJuIGNvbnN0IEluZGV4QXNzaWduU3BlY2lhbGl6ZXIoKTsKICAgIFN0cmluZyBuYW1lID0gc2VsZWN0b3IubmFtZTsKICAgIGlmIChzZWxlY3Rvci5pc09wZXJhdG9yKSB7CiAgICAgIGlmIChuYW1lID09ICd1bmFyeS0nKSByZXR1cm4gY29uc3QgVW5hcnlOZWdhdGVTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnficpIHJldHVybiBjb25zdCBCaXROb3RTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnKycpIHJldHVybiBjb25zdCBBZGRTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnLScpIHJldHVybiBjb25zdCBTdWJ0cmFjdFNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICcqJykgcmV0dXJuIGNvbnN0IE11bHRpcGx5U3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJy8nKSByZXR1cm4gY29uc3QgRGl2aWRlU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJ34vJykgcmV0dXJuIGNvbnN0IFRydW5jYXRpbmdEaXZpZGVTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnJScpIHJldHVybiBjb25zdCBNb2R1bG9TcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnPj4nKSByZXR1cm4gY29uc3QgU2hpZnRSaWdodFNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICc8PCcpIHJldHVybiBjb25zdCBTaGlmdExlZnRTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnJicpIHJldHVybiBjb25zdCBCaXRBbmRTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnfCcpIHJldHVybiBjb25zdCBCaXRPclNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICdeJykgcmV0dXJuIGNvbnN0IEJpdFhvclNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICc9PScpIHJldHVybiBjb25zdCBFcXVhbHNTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnPCcpIHJldHVybiBjb25zdCBMZXNzU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJzw9JykgcmV0dXJuIGNvbnN0IExlc3NFcXVhbFNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICc+JykgcmV0dXJuIGNvbnN0IEdyZWF0ZXJTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnPj0nKSByZXR1cm4gY29uc3QgR3JlYXRlckVxdWFsU3BlY2lhbGl6ZXIoKTsKICAgICAgcmV0dXJuIGNvbnN0IEludm9rZUR5bmFtaWNTcGVjaWFsaXplcigpOwogICAgfQogICAgaWYgKHNlbGVjdG9yLmlzQ2FsbCkgewogICAgICBpZiAoc2VsZWN0b3IubmFtZWRBcmd1bWVudHMubGVuZ3RoID09IDApIHsKICAgICAgICBpbnQgYXJndW1lbnRDb3VudCA9IHNlbGVjdG9yLmFyZ3VtZW50Q291bnQ7CiAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMCkgewogICAgICAgICAgaWYgKG5hbWUgPT0gJ2FicycpIHJldHVybiBjb25zdCBBYnNTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ3JvdW5kJykgcmV0dXJuIGNvbnN0IFJvdW5kU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICd0cmltJykgcmV0dXJuIGNvbnN0IFRyaW1TcGVjaWFsaXplcigpOwogICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnRDb3VudCA9PSAxKSB7CiAgICAgICAgICBpZiAobmFtZSA9PSAnY29kZVVuaXRBdCcpIHJldHVybiBjb25zdCBDb2RlVW5pdEF0U3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdjb21wYXJlVG8nKSByZXR1cm4gY29uc3QgQ29tcGFyZVRvU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdyZW1haW5kZXInKSByZXR1cm4gY29uc3QgUmVtYWluZGVyU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdzdWJzdHJpbmcnKSByZXR1cm4gY29uc3QgU3Vic3RyaW5nU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdjb250YWlucycpIHJldHVybiBjb25zdCBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ2luZGV4T2YnKSByZXR1cm4gY29uc3QgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdzdGFydHNXaXRoJykgcmV0dXJuIGNvbnN0IFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnZW5kc1dpdGgnKSByZXR1cm4gY29uc3QgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIoKTsKICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50Q291bnQgPT0gMikgewogICAgICAgICAgaWYgKG5hbWUgPT0gJ3N1YnN0cmluZycpIHJldHVybiBjb25zdCBTdWJzdHJpbmdTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ2NvbnRhaW5zJykgcmV0dXJuIGNvbnN0IFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnaW5kZXhPZicpIHJldHVybiBjb25zdCBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ3N0YXJ0c1dpdGgnKSByZXR1cm4gY29uc3QgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdlbmRzV2l0aCcpIHJldHVybiBjb25zdCBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcigpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbnN0IEludm9rZUR5bmFtaWNTcGVjaWFsaXplcigpOwogIH0KfQoKY2xhc3MgSW5kZXhBc3NpZ25TcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgSW5kZXhBc3NpZ25TcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAocmVjZWl2ZXIKICAgICAgICAuaXNNdXRhYmxlSW5kZXhhYmxlKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1lcmdlIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50LgogICAgaWYgKGluZGV4LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UgJiYKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IGFubm90YXRpb25zIG9uIHRoZSBwb3NzaWJsZSB0YXJnZXRzCiAgICAgICAgLy8gYW5kIHVzZWQgdGhlaXIgcGFyYW1ldGVyIGNoZWNrIHBvbGljeSBoZXJlLgogICAgICAgIGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShudWxsKS5pc0VtaXR0ZWQpIHsKICAgICAgLy8gV2Ugd2FudCB0aGUgcmlnaHQgY2hlY2tlZCBtb2RlIGVycm9yLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBpbnN0cnVjdGlvbi5pbnB1dHNbM107CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IGFubm90YXRpb25zIG9uIHRoZSBwb3NzaWJsZSB0YXJnZXRzCiAgICAvLyBhbmQgdXNlZCB0aGVpciBwYXJhbWV0ZXIgY2hlY2sgcG9saWN5IGhlcmUuCiAgICBpZiAoY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG51bGwpLmlzRW1pdHRlZCkgewogICAgICBpZiAoIV92YWx1ZVBhcmFtZXRlckNoZWNrQWx3YXlzU3VjY2VlZHMoCiAgICAgICAgICBpbnN0cnVjdGlvbiwgcmVjZWl2ZXIsIHZhbHVlLCBjb21tb25FbGVtZW50cywgY2xvc2VkV29ybGQpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIEhJbmRleEFzc2lnbiBjb252ZXJ0ZWQgPSBuZXcgSEluZGV4QXNzaWduKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgICAgcmVjZWl2ZXIsIGluZGV4LCB2YWx1ZSwgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IpOwogICAgbG9nPy5yZWdpc3RlckluZGV4QXNzaWduKGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgcmV0dXJuIGNvbnZlcnRlZDsKICB9CgogIC8vLyBSZXR1cm5zIFt0cnVlXSBpZiBbdmFsdWVdIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJlaW5nIHN0b3JlZCBpbnRvCiAgLy8vIGluZGV4YWJsZSBbcmVjZWl2ZXJdLgogIGJvb2wgX3ZhbHVlUGFyYW1ldGVyQ2hlY2tBbHdheXNTdWNjZWVkcygKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciwKICAgICAgSEluc3RydWN0aW9uIHZhbHVlLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gSGFuZGxlIHR5cGVkIGFycmF5cyBieSByZWNvZ25pemluZyB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gb2YgYFtdPWAgYW5kCiAgICAvLyBjaGVja2luZyBpZiBbdmFsdWVdIGhhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KICAgIGlmIChpbnN0cnVjdGlvbi5lbGVtZW50ICE9IG51bGwpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gaW5zdHJ1Y3Rpb24uZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy50eXBlZEFycmF5T2ZJbnRDbGFzcykgewogICAgICAgIHJldHVybiB2YWx1ZQogICAgICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlOwogICAgICB9IGVsc2UgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy50eXBlZEFycmF5T2ZEb3VibGVDbGFzcykgewogICAgICAgIHJldHVybiB2YWx1ZS5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlOwogICAgICB9CiAgICB9CgogICAgLy8gVGhlIHR5cGUgY2hlY2sgd2lsbCBwYXNzIGlmIGl0IHBhc3NlZCBiZWZvcmUuIFdlIGtub3cgaXQgcGFzc2VkIGJlZm9yZSBpZgogICAgLy8gdGhlIHZhbHVlIHdhcyBsb2FkZWQgZnJvbSB0aGUgc2FtZSBpbmRleGFibGUuCiAgICBpZiAodmFsdWUgaXMgSEluZGV4KSB7CiAgICAgIGlmICh2YWx1ZS5yZWNlaXZlci5ub25DaGVjaygpID09IHJlY2VpdmVyLm5vbkNoZWNrKCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCmNsYXNzIEluZGV4U3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IEluZGV4U3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgdmFyIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgaWYgKGluc3RydWN0aW9uLmlucHV0c1sxXQogICAgICAgIC5pc0luZGV4YWJsZVByaW1pdGl2ZShhYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdCiAgICAgICAgICAgIC5pc0ludGVnZXIoYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZSAmJgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgYW5ub3RhdGlvbnMgb24gdGhlIHBvc3NpYmxlIHRhcmdldHMKICAgICAgICAvLyBhbmQgdXNlZCB0aGVpciBwYXJhbWV0ZXIgY2hlY2sgcG9saWN5IGhlcmUuCiAgICAgICAgY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG51bGwpLmlzRW1pdHRlZCkgewogICAgICAvLyBXZSB3YW50IHRoZSByaWdodCBjaGVja2VkIG1vZGUgZXJyb3IuCiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPQogICAgICAgIGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCkuaW5zdHJ1Y3Rpb25UeXBlOwogICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZSA9CiAgICAgICAgQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRSZXN1bHRUeXBlRm9yU2VsZWN0b3IoCiAgICAgICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCByZWNlaXZlclR5cGUsIHJlc3VsdHMpOwogICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNUeXBlZEFycmF5KHJlY2VpdmVyVHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBlbGVtZW50VHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwoZWxlbWVudFR5cGUpOwogICAgfQogICAgSEluZGV4IGNvbnZlcnRlZCA9IG5ldyBISW5kZXgoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLCBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGVsZW1lbnRUeXBlKTsKICAgIGxvZz8ucmVnaXN0ZXJJbmRleChpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgfQp9CgpjbGFzcyBCaXROb3RTcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgQml0Tm90U3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uYml0Tm90OwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIEFsbCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gcHJpbWl0aXZlIHR5cGVzIGVpdGhlciBwcm9kdWNlIGFuCiAgICAvLyBpbnRlZ2VyIG9yIHRocm93IGFuIGVycm9yLgogICAgaWYgKGluc3RydWN0aW9uLmlucHV0c1sxXQogICAgICAgIC5pc1ByaW1pdGl2ZU9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMlR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgaWYgKGlucHV0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgSEJpdE5vdCBjb252ZXJ0ZWQgPSBuZXcgSEJpdE5vdChpbnB1dCwgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogICAgICBsb2c/LnJlZ2lzdGVyQml0Tm90KGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICByZXR1cm4gY29udmVydGVkOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBVbmFyeU5lZ2F0ZVNwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBVbmFyeU5lZ2F0ZVNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5VbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLm5lZ2F0ZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gb3BlcmFuZCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIGlmIChvcGVyYW5kCiAgICAgICAgLmlzTnVtYmVyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgLy8gV2UgaGF2ZSBpbnRlZ2VyIHN1YmNsYXNzZXMgdGhhdCByZXByZXNlbnQgcmFuZ2VzLCBzbyB3aWRlbiBhbnkgaW50CiAgICAgIC8vIHN1YmNsYXNzIHRvIGZ1bGwgaW50ZWdlci4KICAgICAgaWYgKG9wZXJhbmQKICAgICAgICAgIC5pc0ludGVnZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZTsKICAgICAgfQogICAgICBpZiAob3BlcmFuZAogICAgICAgICAgLmlzRG91YmxlT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmRvdWJsZVR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ubnVtVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBpZiAoaW5wdXQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBITmVnYXRlIGNvbnZlcnRlZCA9IG5ldyBITmVnYXRlKGlucHV0LCBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgICAgIGxvZz8ucmVnaXN0ZXJVbmFyeU5lZ2F0ZShpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgQWJzU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IEFic1NwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5VbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmFiczsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBpZiAoaW5wdXQKICAgICAgICAuaXNOdW1iZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChpbnB1dC5pbnN0cnVjdGlvblR5cGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIGlmIChpbnB1dC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIEhBYnMgY29udmVydGVkID0gbmV3IEhBYnMoaW5wdXQsIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICAgICAgbG9nPy5yZWdpc3RlckFicyhpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkge30KfQoKYWJzdHJhY3QgY2xhc3MgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKGxlZnQKICAgICAgICAgICAgLmlzSW50ZWdlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0CiAgICAgICAgICAgIC5pc0ludGVnZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZTsKICAgIH0KICAgIGlmIChsZWZ0LmlzTnVtYmVyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGxlZnQKICAgICAgICAgICAgICAuaXNEb3VibGVPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSB8fAogICAgICAgICAgcmlnaHQKICAgICAgICAgICAgICAuaXNEb3VibGVPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmRvdWJsZVR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ubnVtVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBib29sIGlzQnVpbHRpbihISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdCiAgICAgICAgICAgIC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXQogICAgICAgICAgICAuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBpZiAoaXNCdWlsdGluKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgSEluc3RydWN0aW9uIGJ1aWx0aW4gPQogICAgICAgICAgbmV3QnVpbHRpblZhcmlhbnQoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgYnVpbHRpbik7CiAgICAgIH0KICAgICAgaWYgKGJ1aWx0aW4gIT0gbnVsbCkgewogICAgICAgIHJldHVybiBidWlsdGluOwogICAgICB9CiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUgaXMgbm8gYnVpbHRpbiBlcXVpdmFsZW50IGluc3RydWN0aW9uLCB3ZSBrbm93CiAgICAgIC8vIHRoZSBpbnN0cnVjdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdCwgYW5kIHRoYXQgaXQKICAgICAgLy8gY2FuIGJlIEdWTidlZC4KICAgICAgY2xlYXJBbGxTaWRlRWZmZWN0cyhpbnN0cnVjdGlvbik7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgaW5wdXRzQXJlTnVtKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIHJldHVybiBsZWZ0CiAgICAgICAgICAgIC5pc051bWJlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzTnVtYmVyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBib29sIGlucHV0c0FyZVBvc2l0aXZlSW50ZWdlcnMoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIHJldHVybiBsZWZ0CiAgICAgICAgICAgIC5pc1Bvc2l0aXZlSW50ZWdlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0CiAgICAgICAgICAgIC5pc1Bvc2l0aXZlSW50ZWdlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9CgogIGJvb2wgaW5wdXRzQXJlVUludDMxKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIHJldHVybiBsZWZ0LmlzVUludDMxKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodC5pc1VJbnQzMShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKTsKfQoKY2xhc3MgQWRkU3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIgewogIGNvbnN0IEFkZFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaW5wdXRzQXJlVUludDMxKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMyVHlwZTsKICAgIH0KICAgIGlmIChpbnB1dHNBcmVQb3NpdGl2ZUludGVnZXJzKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5hZGQ7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIQWRkKAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlckFkZChvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIERpdmlkZVNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyIHsKICBjb25zdCBEaXZpZGVTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uZGl2aWRlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIGlmIChsZWZ0LmlzTnVtYmVyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIRGl2aWRlKGluc3RydWN0aW9uLmlucHV0c1sxXSwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmRvdWJsZVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyRGl2aWRlKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgTW9kdWxvU3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIgewogIGNvbnN0IE1vZHVsb1NwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaW5wdXRzQXJlUG9zaXRpdmVJbnRlZ2VycyhpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0ubW9kdWxvOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIE1vZHVsbyBjYW5ub3QgYmUgbWFwcGVkIHRvIHRoZSBuYXRpdmUgb3BlcmF0b3IgKGRpZmZlcmVudCBzZW1hbnRpY3MpLgoKICAgIC8vIFdlIGNhbiB1c2UgSFJlbWFpbmRlciBpZiBib3RoIGlucHV0cyBhcmUgbm9uLW5lZ2F0aXZlIGFuZCB0aGUgcmVjZWl2ZXIKICAgIC8vIGNhbm5vdCBiZSAtMC4wLiAgTm90ZSB0aGF0IC0wLjAgaXMgY29uc2lkZXJlZCB0byBiZSBhbiBpbnQsIHNvIHVudGlsIHdlCiAgICAvLyB0cmFjayAtMC4wIHByZWNpc2VseSwgd2UgaGF2ZSB0byBzeW50YXRpY2FsbHkgZmlsdGVyIGlucHV0cyB0aGF0IGNhbm5vdAogICAgLy8gZ2VuZXJhdGUgLTAuMC4KICAgIGJvb2wgY2FuQmVQb3NpdGl2ZVplcm8oSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICAgIGlmIChpbnB1dCBpcyBIQ29uc3RhbnQpIHsKICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gaW5wdXQuY29uc3RhbnQ7CiAgICAgICAgaWYgKHZhbHVlIGlzIERvdWJsZUNvbnN0YW50VmFsdWUgJiYgdmFsdWUuaXNaZXJvKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAodmFsdWUgaXMgSW50Q29uc3RhbnRWYWx1ZSAmJiB2YWx1ZS5pc1plcm8pIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBib29sIGluUGhpID0gZmFsc2U7CiAgICBib29sIGNhbkJlTmVnYXRpdmVaZXJvKEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgICBpZiAoaW5wdXQgaXMgSENvbnN0YW50KSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGlucHV0LmNvbnN0YW50OwogICAgICAgIGlmICh2YWx1ZSBpcyBEb3VibGVDb25zdGFudFZhbHVlICYmIHZhbHVlLmlzTWludXNaZXJvKSByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGlucHV0IGlzIEhBZGQpIHsKICAgICAgICAvLyAnKycgY2FuIG9ubHkgZ2VuZXJhdGUgLTAuMCB3aGVuIGJvdGggaW5wdXRzIGFyZSAtMC4wLgogICAgICAgIHJldHVybiBjYW5CZU5lZ2F0aXZlWmVybyhpbnB1dC5sZWZ0KSAmJiBjYW5CZU5lZ2F0aXZlWmVybyhpbnB1dC5yaWdodCk7CiAgICAgIH0KICAgICAgaWYgKGlucHV0IGlzIEhTdWJ0cmFjdCkgewogICAgICAgIHJldHVybiBjYW5CZU5lZ2F0aXZlWmVybyhpbnB1dC5sZWZ0KSAmJiBjYW5CZVBvc2l0aXZlWmVybyhpbnB1dC5yaWdodCk7CiAgICAgIH0KICAgICAgaWYgKGlucHV0IGlzIEhQaGkpIHsKICAgICAgICBpZiAoaW5QaGkpIHJldHVybiB0cnVlOwogICAgICAgIGluUGhpID0gdHJ1ZTsKICAgICAgICBib29sIHJlc3VsdCA9IGlucHV0LmlucHV0cy5hbnkoY2FuQmVOZWdhdGl2ZVplcm8pOwogICAgICAgIGluUGhpID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBpZiAoaW5wdXRzQXJlUG9zaXRpdmVJbnRlZ2VycyhpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpICYmCiAgICAgICAgIWNhbkJlTmVnYXRpdmVaZXJvKGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCkpKSB7CiAgICAgIHJldHVybiBuZXcgSFJlbWFpbmRlcigKICAgICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKToKICAgIC8vICAgYSAlIE4gLS0+ICBhICYgKE4tMSksIE49Ml5rLCB3aGVyZSBhPj0wLCBkb2VzIG5vdCBoYXZlIC0wLjAgcHJvYmxlbS4KCiAgICAvLyBUT0RPKHNyYSk6IFdlIGNvdWxkIGF2b2lkIHByb2JsZW1zIHdpdGggLTAuMCBpZiB3ZSBnZW5lcmF0ZSB4ICUgeSBhcyAoeCArCiAgICAvLyAwKSAlIHksIGJ1dCB3ZSB3b3VsZCBoYXZlIHRvIGZpeCBIQWRkIG9wdGltaXphdGlvbnMuCgogICAgLy8gVE9ETyhzcmEpOiBXZSBjb3VsZCByZXBsYWNlICRtb2Qgd2l0aCBIUmVtYWluZGVyIHdoZW4gd2UgZG9uJ3QgY2FyZSBhYm91dAogICAgLy8gYSAtMC4wIHJlc3VsdCAoZS5nLiBhICUgMTAgPT0gMCwgYVtpICUgM10pLiBUaGlzIGlzIHRyaWNreSwgc2luY2Ugd2UKICAgIC8vIGRvbid0IHdhbnQgdG8gcnVpbiBHVk4gb3Bwb3J0dW5pdGllcy4KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyTW9kdWxvKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgUmVtYWluZGVyU3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIgewogIGNvbnN0IFJlbWFpbmRlclNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaW5wdXRzQXJlUG9zaXRpdmVJbnRlZ2VycyhpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0ucmVtYWluZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSFJlbWFpbmRlcigKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJSZW1haW5kZXIob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBNdWx0aXBseVNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyIHsKICBjb25zdCBNdWx0aXBseVNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5tdWx0aXBseTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaW5wdXRzQXJlUG9zaXRpdmVJbnRlZ2VycyhpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBITXVsdGlwbHkoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyTXVsdGlwbHkob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBTdWJ0cmFjdFNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyIHsKICBjb25zdCBTdWJ0cmFjdFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5zdWJ0cmFjdDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhTdWJ0cmFjdCgKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJTdWJ0cmFjdChvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIFRydW5jYXRpbmdEaXZpZGVTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplciB7CiAgY29uc3QgVHJ1bmNhdGluZ0RpdmlkZVNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS50cnVuY2F0aW5nRGl2aWRlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChoYXNVaW50MzFSZXN1bHQoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzFUeXBlOwogICAgfQogICAgaWYgKGlucHV0c0FyZVBvc2l0aXZlSW50ZWdlcnMoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGU7CiAgICB9CiAgICBpZiAoaW5wdXRzQXJlTnVtKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBib29sIGlzTm90WmVybyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmICghaW5zdHJ1Y3Rpb24uaXNDb25zdGFudEludGVnZXIoKSkgcmV0dXJuIGZhbHNlOwogICAgSENvbnN0YW50IHJpZ2h0Q29uc3RhbnQgPSBpbnN0cnVjdGlvbjsKICAgIEludENvbnN0YW50VmFsdWUgaW50Q29uc3RhbnQgPSByaWdodENvbnN0YW50LmNvbnN0YW50OwogICAgQmlnSW50IGNvdW50ID0gaW50Q29uc3RhbnQuaW50VmFsdWU7CiAgICByZXR1cm4gY291bnQgIT0gQmlnSW50Lnplcm87CiAgfQoKICBib29sIGlzVHdvT3JHcmVhdGVyKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaWYgKCFpbnN0cnVjdGlvbi5pc0NvbnN0YW50SW50ZWdlcigpKSByZXR1cm4gZmFsc2U7CiAgICBIQ29uc3RhbnQgcmlnaHRDb25zdGFudCA9IGluc3RydWN0aW9uOwogICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRDb25zdGFudCA9IHJpZ2h0Q29uc3RhbnQuY29uc3RhbnQ7CiAgICBCaWdJbnQgY291bnQgPSBpbnRDb25zdGFudC5pbnRWYWx1ZTsKICAgIHJldHVybiBjb3VudCA+PSBCaWdJbnQudHdvOwogIH0KCiAgYm9vbCBoYXNVaW50MzFSZXN1bHQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKHJpZ2h0CiAgICAgICAgLmlzUG9zaXRpdmVJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGxlZnQuaXNVSW50MzEoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgaXNOb3RaZXJvKHJpZ2h0KSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChsZWZ0LmlzVUludDMyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgIGlzVHdvT3JHcmVhdGVyKHJpZ2h0KSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAoaXNCdWlsdGluKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgaWYgKHJpZ2h0CiAgICAgICAgICAgICAgLmlzUG9zaXRpdmVJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgIGlzTm90WmVybyhyaWdodCkpIHsKICAgICAgICBpZiAoaGFzVWludDMxUmVzdWx0KGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQgPQogICAgICAgICAgICAgIG5ld0J1aWx0aW5WYXJpYW50KGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICAgICAgfQogICAgICAgIC8vIFdlIGNhbiBjYWxsIF90ZGl2RmFzdCBiZWNhdXNlIHRoZSByaHMgaXMgYSAzMmJpdCBpbnRlZ2VyCiAgICAgICAgLy8gYW5kIG5vdCAwLCBub3IgLTEuCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IgPSByZW5hbWVUb09wdGltaXplZFNlbGVjdG9yKAogICAgICAgICAgICAnX3RkaXZGYXN0JywgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNvbW1vbkVsZW1lbnRzKTsKICAgICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIG51bGwpOwogICAgICAgIH0KICAgICAgfQogICAgICBjbGVhckFsbFNpZGVFZmZlY3RzKGluc3RydWN0aW9uKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSFRydW5jYXRpbmdEaXZpZGUoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyVHJ1bmNhdGluZ0RpdmlkZShvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEJpbmFyeUJpdE9wU3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIgewogIGNvbnN0IEJpbmFyeUJpdE9wU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIEFsbCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gbnVtYmVyIHR5cGVzIGVpdGhlciBwcm9kdWNlIGFuIHVuc2lnbmVkIDMyLWJpdAogICAgLy8gaW50ZWdlciBvciB0aHJvdyBhbiBlcnJvci4KICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgaWYgKGxlZnQuaXNOdW1iZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzJUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIGJvb2wgYXJndW1lbnRMZXNzVGhhbjMyKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIGFyZ3VtZW50SW5SYW5nZShpbnN0cnVjdGlvbiwgMCwgMzEpOwogIH0KCiAgYm9vbCBhcmd1bWVudEluUmFuZ2UoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBpbnQgbG93LCBpbnQgaGlnaCkgewogICAgaWYgKGluc3RydWN0aW9uLmlzQ29uc3RhbnRJbnRlZ2VyKCkpIHsKICAgICAgSENvbnN0YW50IHJpZ2h0Q29uc3RhbnQgPSBpbnN0cnVjdGlvbjsKICAgICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRDb25zdGFudCA9IHJpZ2h0Q29uc3RhbnQuY29uc3RhbnQ7CiAgICAgIGludCB2YWx1ZSA9IGludENvbnN0YW50LmludFZhbHVlLnRvSW50KCk7CiAgICAgIGFzc2VydChpbnRDb25zdGFudC5pbnRWYWx1ZSA9PQogICAgICAgICAgbmV3IEJpZ0ludC5mcm9tKGludENvbnN0YW50LmludFZhbHVlLnRvSW50KCkpKTsKICAgICAgcmV0dXJuIHZhbHVlID49IGxvdyAmJiB2YWx1ZSA8PSBoaWdoOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBJbnRlZ3JhdGUgd2l0aCB0aGUgYml0LXdpZHRoIGFuYWx5c2lzIGluIGNvZGVnZW4uZGFydC4KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQml0QW5kKSB7CiAgICAgIHJldHVybiBsb3cgPT0gMCAmJgogICAgICAgICAgKGFyZ3VtZW50SW5SYW5nZShpbnN0cnVjdGlvbi5pbnB1dHNbMF0sIGxvdywgaGlnaCkgfHwKICAgICAgICAgICAgICBhcmd1bWVudEluUmFuZ2UoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLCBsb3csIGhpZ2gpKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgaXNQb3NpdGl2ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gVE9ETzogV2Ugc2hvdWxkIHVzZSB0aGUgdmFsdWUgcmFuZ2UgYW5hbHlzaXMuIEN1cnJlbnRseSwgcmFuZ2VzCiAgICAvLyBhcmUgZGlzY2FyZGVkIGp1c3QgYWZ0ZXIgdGhlIGFuYWx5c2lzLgogICAgcmV0dXJuIGluc3RydWN0aW9uCiAgICAgICAgLmlzUG9zaXRpdmVJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgfQp9CgpjbGFzcyBTaGlmdExlZnRTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUJpdE9wU3BlY2lhbGl6ZXIgewogIGNvbnN0IFNoaWZ0TGVmdFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5zaGlmdExlZnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChsZWZ0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGFyZ3VtZW50TGVzc1RoYW4zMihyaWdodCkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gY29udmVydGVkID0KICAgICAgICAgICAgbmV3QnVpbHRpblZhcmlhbnQoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICAgICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICAgIH0KICAgICAgLy8gRXZlbiBpZiB0aGVyZSBpcyBubyBidWlsdGluIGVxdWl2YWxlbnQgaW5zdHJ1Y3Rpb24sIHdlIGtub3cKICAgICAgLy8gdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0LCBhbmQgdGhhdCBpdAogICAgICAvLyBjYW4gYmUgR1ZOJ2VkLgogICAgICBjbGVhckFsbFNpZGVFZmZlY3RzKGluc3RydWN0aW9uKTsKICAgICAgaWYgKGlzUG9zaXRpdmUocmlnaHQsIGNsb3NlZFdvcmxkKSkgewogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yID0gcmVuYW1lVG9PcHRpbWl6ZWRTZWxlY3RvcigKICAgICAgICAgICAgJ19zaGxQb3NpdGl2ZScsIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjb21tb25FbGVtZW50cyk7CiAgICAgIH0KICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgbnVsbCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSFNoaWZ0TGVmdCgKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJTaGlmdExlZnQob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBTaGlmdFJpZ2h0U3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlCaXRPcFNwZWNpYWxpemVyIHsKICBjb25zdCBTaGlmdFJpZ2h0U3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgaWYgKGxlZnQuaXNVSW50MzIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gbGVmdC5pbnN0cnVjdGlvblR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAobGVmdC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIGlmIChhcmd1bWVudExlc3NUaGFuMzIocmlnaHQpICYmIGlzUG9zaXRpdmUobGVmdCwgY2xvc2VkV29ybGQpKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGNvbnZlcnRlZCA9CiAgICAgICAgICAgIG5ld0J1aWx0aW5WYXJpYW50KGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29udmVydGVkOwogICAgICB9CiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUgaXMgbm8gYnVpbHRpbiBlcXVpdmFsZW50IGluc3RydWN0aW9uLCB3ZSBrbm93CiAgICAgIC8vIHRoZSBpbnN0cnVjdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdCwgYW5kIHRoYXQgaXQKICAgICAgLy8gY2FuIGJlIEdWTidlZC4KICAgICAgY2xlYXJBbGxTaWRlRWZmZWN0cyhpbnN0cnVjdGlvbik7CiAgICAgIGlmIChpc1Bvc2l0aXZlKHJpZ2h0LCBjbG9zZWRXb3JsZCkgJiYgaXNQb3NpdGl2ZShsZWZ0LCBjbG9zZWRXb3JsZCkpIHsKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciA9IHJlbmFtZVRvT3B0aW1pemVkU2VsZWN0b3IoCiAgICAgICAgICAgICdfc2hyQm90aFBvc2l0aXZlJywgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNvbW1vbkVsZW1lbnRzKTsKICAgICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIG51bGwpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpc1Bvc2l0aXZlKGxlZnQsIGNsb3NlZFdvcmxkKSAmJgogICAgICAgICAgcmlnaHQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yID0gcmVuYW1lVG9PcHRpbWl6ZWRTZWxlY3RvcigKICAgICAgICAgICAgJ19zaHJSZWNlaXZlclBvc2l0aXZlJywgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNvbW1vbkVsZW1lbnRzKTsKICAgICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIG51bGwpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpc1Bvc2l0aXZlKHJpZ2h0LCBjbG9zZWRXb3JsZCkpIHsKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciA9IHJlbmFtZVRvT3B0aW1pemVkU2VsZWN0b3IoCiAgICAgICAgICAgICdfc2hyT3RoZXJQb3NpdGl2ZScsIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjb21tb25FbGVtZW50cyk7CiAgICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBudWxsKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSFNoaWZ0UmlnaHQoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLnNoaWZ0UmlnaHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJTaGlmdFJpZ2h0KG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgQml0T3JTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUJpdE9wU3BlY2lhbGl6ZXIgewogIGNvbnN0IEJpdE9yU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmJpdE9yOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKGxlZnQuaXNVSW50MzEoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzVUludDMxKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMxVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIQml0T3IoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyQml0T3Iob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBCaXRBbmRTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUJpdE9wU3BlY2lhbGl6ZXIgewogIGNvbnN0IEJpdEFuZFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5iaXRBbmQ7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAobGVmdAogICAgICAgICAgICAuaXNQcmltaXRpdmVPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAobGVmdC5pc1VJbnQzMShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlIHx8CiAgICAgICAgICAgIHJpZ2h0LmlzVUludDMxKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMVR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSEJpdEFuZCgKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJCaXRBbmQob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBCaXRYb3JTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUJpdE9wU3BlY2lhbGl6ZXIgewogIGNvbnN0IEJpdFhvclNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5iaXRYb3I7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAobGVmdC5pc1VJbnQzMShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNVSW50MzEoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzFUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhCaXRYb3IoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyQml0WG9yKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgUmVsYXRpb25hbFNwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBSZWxhdGlvbmFsU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpbnN0cnVjdGlvbi5pbnB1dHNbMV0KICAgICAgICAuaXNQcmltaXRpdmVPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChsZWZ0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQgPSBuZXdCdWlsdGluVmFyaWFudChpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpOwogICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICB9CiAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudCgKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpOwp9CgpjbGFzcyBFcXVhbHNTcGVjaWFsaXplciBleHRlbmRzIFJlbGF0aW9uYWxTcGVjaWFsaXplciB7CiAgY29uc3QgRXF1YWxzU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZSA9IGxlZnQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgaWYgKHJpZ2h0LmlzQ29uc3RhbnROdWxsKCkgfHwKICAgICAgICBsZWZ0CiAgICAgICAgICAgIC5pc1ByaW1pdGl2ZU9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBISW5zdHJ1Y3Rpb24gY29udmVydGVkID0gbmV3QnVpbHRpblZhcmlhbnQoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKTsKICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgfQogICAgICByZXR1cm4gY29udmVydGVkOwogICAgfQogICAgaWYgKGNsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGluc3RydWN0aW9uVHlwZSkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG1hdGNoZXMgPQogICAgICAgIGNsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGluc3RydWN0aW9uVHlwZSk7CiAgICAvLyBUaGlzIHRlc3QgcmVsaWVzIG9uIGBPYmplY3QuPT1gIGFuZCBgSW50ZXJjZXB0b3IuPT1gIGFsd2F5cyBiZWluZwogICAgLy8gaW1wbGVtZW50ZWQgYmVjYXVzZSBpZiB0aGUgc2VsZWN0b3IgbWF0Y2hlcyBieSBzdWJ0eXBlLCBpdCBzdGlsbCB3aWxsIGJlCiAgICAvLyBhIHJlZ3VsYXIgb2JqZWN0IG9yIGFuIGludGVyY2VwdG9yLgogICAgaWYgKG1hdGNoZXMKICAgICAgICAuZXZlcnkoY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuaXNEZWZhdWx0RXF1YWxpdHlJbXBsZW1lbnRhdGlvbikpIHsKICAgICAgSEluc3RydWN0aW9uIGNvbnZlcnRlZCA9IG5ld0J1aWx0aW5WYXJpYW50KGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCk7CiAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmVxdWFsOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhJZGVudGl0eShpbnN0cnVjdGlvbi5pbnB1dHNbMV0sIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJFcXVhbHMob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBMZXNzU3BlY2lhbGl6ZXIgZXh0ZW5kcyBSZWxhdGlvbmFsU3BlY2lhbGl6ZXIgewogIGNvbnN0IExlc3NTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0ubGVzczsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudCgKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBITGVzcyhpbnN0cnVjdGlvbi5pbnB1dHNbMV0sIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJMZXNzKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgR3JlYXRlclNwZWNpYWxpemVyIGV4dGVuZHMgUmVsYXRpb25hbFNwZWNpYWxpemVyIHsKICBjb25zdCBHcmVhdGVyU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmdyZWF0ZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSEdyZWF0ZXIoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLCBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyR3JlYXRlcihvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIEdyZWF0ZXJFcXVhbFNwZWNpYWxpemVyIGV4dGVuZHMgUmVsYXRpb25hbFNwZWNpYWxpemVyIHsKICBjb25zdCBHcmVhdGVyRXF1YWxTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uZ3JlYXRlckVxdWFsOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhHcmVhdGVyRXF1YWwoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLCBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyR3JlYXRlckVxdWFsKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgTGVzc0VxdWFsU3BlY2lhbGl6ZXIgZXh0ZW5kcyBSZWxhdGlvbmFsU3BlY2lhbGl6ZXIgewogIGNvbnN0IExlc3NFcXVhbFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5sZXNzRXF1YWw7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSExlc3NFcXVhbChpbnN0cnVjdGlvbi5pbnB1dHNbMV0sIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJMZXNzRXF1YWwob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBDb2RlVW5pdEF0U3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IENvZGVVbml0QXRTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY29kZVVuaXRBdDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IGEgYnVpbHRpbiBIQ29kZVVuaXRBdCBpbnN0cnVjdGlvbiBhbmQgdGhlIHNhbWUgaW5kZXgKICAgIC8vIGJvdW5kcyBjaGVja2luZyBvcHRpbWl6YXRpb25zIGFzIGZvciBISW5kZXguCiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpOwogICAgaWYgKHJlY2VpdmVyCiAgICAgICAgLmlzU3RyaW5nT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgLy8gRXZlbiBpZiB0aGVyZSBpcyBubyBidWlsdGluIGVxdWl2YWxlbnQgaW5zdHJ1Y3Rpb24sIHdlIGtub3cKICAgICAgLy8gU3RyaW5nLmNvZGVVbml0QXQgZG9lcyBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3QgKG90aGVyIHRoYW4gdGhyb3dpbmcpLAogICAgICAvLyBhbmQgdGhhdCBpdCBjYW4gYmUgR1ZOJ2VkLgogICAgICBjbGVhckFsbFNpZGVFZmZlY3RzKGluc3RydWN0aW9uKTsKICAgICAgaWYgKGluc3RydWN0aW9uLmlucHV0cy5sYXN0CiAgICAgICAgICAuaXNQb3NpdGl2ZUludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IgPSByZW5hbWVUb09wdGltaXplZFNlbGVjdG9yKAogICAgICAgICAgICAnX2NvZGVVbml0QXQnLCBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY29tbW9uRWxlbWVudHMpOwogICAgICB9CiAgICAgIGxvZz8ucmVnaXN0ZXJDb2RlVW5pdEF0KGluc3RydWN0aW9uKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgQ29tcGFyZVRvU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IENvbXBhcmVUb1NwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCk7CiAgICAvLyBgY29tcGFyZVRvYCBoYXMgbm8gc2lkZS1lZmZlY3QgKG90aGVyIHRoYW4gdGhyb3dpbmcpIGFuZCBjYW4gYmUgR1ZOJ2VkCiAgICAvLyBmb3Igc29tZSBrbm93biB0eXBlcy4KICAgIGlmIChyZWNlaXZlcgogICAgICAgICAgICAuaXNTdHJpbmdPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgfHwKICAgICAgICByZWNlaXZlcgogICAgICAgICAgICAuaXNOdW1iZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgLy8gUmVwbGFjZSBgYS5jb21wYXJlVG8oYSlgIHdpdGggYDBgLCBidXQgb25seSBpZiByZWNlaXZlciBhbmQgYXJndW1lbnQKICAgICAgLy8gYXJlIHN1Y2ggdGhhdCBubyBleGNlcHRpb25zIGNhbiBiZSB0aHJvd24uCiAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IGluc3RydWN0aW9uLmlucHV0cy5sYXN0OwogICAgICBpZiAoKHJlY2VpdmVyCiAgICAgICAgICAgICAgICAgIC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgICAgIGFyZ3VtZW50CiAgICAgICAgICAgICAgICAgIC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgfHwKICAgICAgICAgIChyZWNlaXZlcgogICAgICAgICAgICAgICAgICAuaXNTdHJpbmcoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgICAgICBhcmd1bWVudAogICAgICAgICAgICAgICAgICAuaXNTdHJpbmcoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpKSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChyZWNlaXZlci5ub25DaGVjaygpLCBhcmd1bWVudC5ub25DaGVjaygpKSkgewogICAgICAgICAgSEluc3RydWN0aW9uIGNvbnZlcnRlZCA9IGdyYXBoLmFkZENvbnN0YW50SW50KDAsIGNsb3NlZFdvcmxkKTsKICAgICAgICAgIGxvZz8ucmVnaXN0ZXJDb21wYXJlVG8oaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgICAgICByZXR1cm4gY29udmVydGVkOwogICAgICAgIH0KICAgICAgfQogICAgICBjbGVhckFsbFNpZGVFZmZlY3RzKGluc3RydWN0aW9uKTsKICAgICAgbG9nPy5yZWdpc3RlckNvbXBhcmVUbyhpbnN0cnVjdGlvbik7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIElkZW1wb3RlbnRTdHJpbmdPcGVyYXRpb25TcGVjaWFsaXplcgogICAgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IElkZW1wb3RlbnRTdHJpbmdPcGVyYXRpb25TcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpOwogICAgaWYgKHJlY2VpdmVyCiAgICAgICAgLmlzU3RyaW5nT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgLy8gU3RyaW5nLnh4eCBkb2VzIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdCAob3RoZXIgdGhhbiB0aHJvd2luZyksIGFuZCBpdAogICAgICAvLyBjYW4gYmUgR1ZOJ2VkLgogICAgICBjbGVhckFsbFNpZGVFZmZlY3RzKGluc3RydWN0aW9uKTsKICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbihPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsKTsKfQoKY2xhc3MgU3Vic3RyaW5nU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJZGVtcG90ZW50U3RyaW5nT3BlcmF0aW9uU3BlY2lhbGl6ZXIgewogIGNvbnN0IFN1YnN0cmluZ1NwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCkgewogICAgbG9nLnJlZ2lzdGVyU3Vic3RyaW5nKG9yaWdpbmFsKTsKICB9Cn0KCmNsYXNzIFRyaW1TcGVjaWFsaXplciBleHRlbmRzIElkZW1wb3RlbnRTdHJpbmdPcGVyYXRpb25TcGVjaWFsaXplciB7CiAgY29uc3QgVHJpbVNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCkgewogICAgbG9nLnJlZ2lzdGVyVHJpbShvcmlnaW5hbCk7CiAgfQp9CgpjbGFzcyBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKTsKICAgIEhJbnN0cnVjdGlvbiBwYXR0ZXJuID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKHJlY2VpdmVyCiAgICAgICAgICAgIC5pc1N0cmluZ09yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHBhdHRlcm4KICAgICAgICAgICAgLmlzU3RyaW5nT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIC8vIFN0cmluZy5jb250YWlucyhTdHJpbmcgcykgZG9lcyBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3QgKG90aGVyIHRoYW4KICAgICAgLy8gdGhyb3dpbmcpLCBhbmQgaXQgY2FuIGJlIEdWTidlZC4KICAgICAgY2xlYXJBbGxTaWRlRWZmZWN0cyhpbnN0cnVjdGlvbik7CiAgICAgIGxvZz8ucmVnaXN0ZXJQYXR0ZXJuTWF0Y2goaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBSb3VuZFNwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBSb3VuZFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5VbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLnJvdW5kOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgs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ZSB0aGF0IGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhlIFNzYSBncmFwaCB0aGUgYmFzaWMgYmxvY2tzIGFyZQogIC8vIG5vdCByZXF1aXJlZCB0byBiZSB2YWxpZCB5ZXQuCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGN1cnJlbnRCbG9jayA9IGJsb2NrOwogICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47IC8vIERvbid0IG5lZWQgdG8gY29udGludWUgaWYgd2UgYXJlIGFscmVhZHkgaW52YWxpZC4KCiAgICAvLyBUZXN0IHRoYXQgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaXMgYSBicmFuY2hpbmcgaW5zdHJ1Y3Rpb24gYW5kIHRoYXQgdGhlCiAgICAvLyBiYXNpYyBibG9jayBjb250YWlucyB0aGUgYnJhbmNoLXRhcmdldC4KICAgIGlmIChibG9jay5maXJzdCA9PSBudWxsIHx8IGJsb2NrLmxhc3QgPT0gbnVsbCkgewogICAgICBtYXJrSW52YWxpZCgiZW1wdHkgYmxvY2siKTsKICAgIH0KICAgIGlmIChibG9jay5sYXN0IGlzISBIQ29udHJvbEZsb3cpIHsKICAgICAgbWFya0ludmFsaWQoImJsb2NrIGVuZHMgd2l0aCBub24tdGFpbCBub2RlLiIpOwogICAgfQogICAgaWYgKGJsb2NrLmxhc3QgaXMgSElmICYmIGJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoICE9IDIpIHsKICAgICAgbWFya0ludmFsaWQoIklmIG5vZGUgd2l0aG91dCB0d28gc3VjY2Vzc29ycyIpOwogICAgfQogICAgaWYgKGJsb2NrLmxhc3QgaXMgSENvbmRpdGlvbmFsQnJhbmNoICYmIGJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoICE9IDIpIHsKICAgICAgbWFya0ludmFsaWQoIkNvbmRpdGlvbmFsIG5vZGUgd2l0aG91dCB0d28gc3VjY2Vzc29ycyIpOwogICAgfQogICAgaWYgKGJsb2NrLmxhc3QgaXMgSExvb3BCcmFuY2gpIHsKICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGJsb2NrIHdlIGluc2VydGVkIHRvIGF2b2lkIGNyaXRpY2FsIGVkZ2VzIHNhdGlzZmllcwogICAgICAvLyBvdXIgYXNzdW1wdGlvbnMuIFRoYXQgaXMsIGl0IG11c3Qgbm90IGNvbnRhaW4gYW55IGluc3RydWN0aW9ucwogICAgICAvLyAoYWx0aG91Z2ggaXQgbWF5IGNvbnRhaW4gcGhpLXVwZGF0ZXMpLgogICAgICBIQmFzaWNCbG9jayBhdm9pZENyaXRpY2FsRWRnZUJsb2NrID0gYmxvY2suc3VjY2Vzc29ycy5sYXN0OwogICAgICBpZiAoYXZvaWRDcml0aWNhbEVkZ2VCbG9jay5maXJzdCBpcyEgSEdvdG8pIHsKICAgICAgICBtYXJrSW52YWxpZCgiQ3JpdGljYWwgZWRnZSBibG9jayBjb250YWlucyBpbnN0cnVjdGlvbnMiKTsKICAgICAgfQogICAgfQogICAgaWYgKGJsb2NrLmxhc3QgaXMgSEdvdG8gJiYgYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggIT0gMSkgewogICAgICBtYXJrSW52YWxpZCgiR290byBub2RlIHdpdGggbm90IGV4YWN0bHkgb25lIHN1Y2Nlc3NvciIpOwogICAgfQogICAgaWYgKGJsb2NrLmxhc3QgaXMgSEp1bXAgJiYgYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggIT0gMSkgewogICAgICBtYXJrSW52YWxpZCgiQnJlYWsgb3IgY29udGludWUgbm9kZSB3aXRob3V0IG9uZSBzdWNjZXNzb3IiKTsKICAgIH0KICAgIGlmICgoYmxvY2subGFzdCBpcyBIUmV0dXJuIHx8IGJsb2NrLmxhc3QgaXMgSFRocm93KSAmJgogICAgICAgIChibG9jay5zdWNjZXNzb3JzLmxlbmd0aCAhPSAxIHx8ICFibG9jay5zdWNjZXNzb3JzWzBdLmlzRXhpdEJsb2NrKCkpKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJSZXR1cm4gb3IgdGhyb3cgbm9kZSB3aXRoID4gMSBzdWNjZXNzb3IgIgogICAgICAgICAgIm9yIG5vdCBnb2luZyB0byBleGl0LWJsb2NrIik7CiAgICB9CiAgICBpZiAoYmxvY2subGFzdCBpcyBIRXhpdCAmJiAhYmxvY2suc3VjY2Vzc29ycy5pc0VtcHR5KSB7CiAgICAgIG1hcmtJbnZhbGlkKCJFeGl0IGJsb2NrIHdpdGggc3VjY2Vzc29yIik7CiAgICB9CgogICAgaWYgKGJsb2NrLnN1Y2Nlc3NvcnMuaXNFbXB0eSAmJiAhYmxvY2suaXNFeGl0QmxvY2soKSkgewogICAgICBtYXJrSW52YWxpZCgiTm9uLWV4aXQgYmxvY2sgd2l0aG91dCBzdWNjZXNzb3IiKTsKICAgIH0KCiAgICAvLyBDaGVjayB0aGF0IHN1Y2Nlc3NvcnMgaWRzIGFyZSBhbHdheXMgaGlnaGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lLgogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoaXMgaXMsIG9mIGNvdXJzZSwgbm90IHRydWUgZm9yIGJhY2stYnJhbmNoZXMuCiAgICBpZiAoYmxvY2suaWQgPT0gbnVsbCkgbWFya0ludmFsaWQoImJsb2NrIHdpdGhvdXQgaWQiKTsKICAgIGZvciAoSEJhc2ljQmxvY2sgc3VjY2Vzc29yIGluIGJsb2NrLnN1Y2Nlc3NvcnMpIHsKICAgICAgaWYgKCFpc1ZhbGlkKSBicmVhazsKICAgICAgaWYgKHN1Y2Nlc3Nvci5pZCA9PSBudWxsKSBtYXJrSW52YWxpZCgic3VjY2Vzc29yIHdpdGhvdXQgaWQiKTsKICAgICAgaWYgKHN1Y2Nlc3Nvci5pZCA8PSBibG9jay5pZCAmJiAhc3VjY2Vzc29yLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgICAgbWFya0ludmFsaWQoInN1Y2Nlc3NvciB3aXRoIGxvd2VyIGlkLCBidXQgbm90IGEgbG9vcC1oZWFkZXIiKTsKICAgICAgfQogICAgfQogICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgYSBjcml0aWNhbCBlZGdlLgogICAgaWYgKGlzVmFsaWQgJiYKICAgICAgICBibG9jay5zdWNjZXNzb3JzLmxlbmd0aCA+IDEgJiYKICAgICAgICBibG9jay5sYXN0IGlzISBIVHJ5ICYmCiAgICAgICAgYmxvY2subGFzdCBpcyEgSEV4aXRUcnkgJiYKICAgICAgICBibG9jay5sYXN0IGlzISBIU3dpdGNoKSB7CiAgICAgIGZvciAoSEJhc2ljQmxvY2sgc3VjY2Vzc29yIGluIGJsb2NrLnN1Y2Nlc3NvcnMpIHsKICAgICAgICBpZiAoIWlzVmFsaWQpIGJyZWFrOwogICAgICAgIGlmIChzdWNjZXNzb3IucHJlZGVjZXNzb3JzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICBtYXJrSW52YWxpZCgiU1NBIGdyYXBoIGNvbnRhaW5zIGNyaXRpY2FsIGVkZ2UuIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gQ2hlY2sgdGhhdCB0aGUgZW50cmllcyBpbiB0aGUgZG9taW5hdGVkLWxpc3QgYXJlIHNvcnRlZC4KICAgIGludCBsYXN0SWQgPSAwOwogICAgZm9yIChIQmFzaWNCbG9jayBkb21pbmF0ZWQgaW4gYmxvY2suZG9taW5hdGVkQmxvY2tzKSB7CiAgICAgIGlmICghaXNWYWxpZCkgYnJlYWs7CiAgICAgIGlmICghaWRlbnRpY2FsKGRvbWluYXRlZC5kb21pbmF0b3IsIGJsb2NrKSkgewogICAgICAgIG1hcmtJbnZhbGlkKCJkb21pbmF0ZWQgYmxvY2sgbm90IHBvaW50aW5nIGJhY2siKTsKICAgICAgfQogICAgICBpZiAoZG9taW5hdGVkLmlkID09IG51bGwgfHwgZG9taW5hdGVkLmlkIDw9IGxhc3RJZCkgewogICAgICAgIG1hcmtJbnZhbGlkKCJkb21pbmF0ZWQuaWQgPT0gbnVsbCBvciBkb21pbmF0ZWQgaGFzIDw9IGlkIik7CiAgICAgIH0KICAgICAgbGFzdElkID0gZG9taW5hdGVkLmlkOwogICAgfQoKICAgIGlmICghaXNWYWxpZCkgcmV0dXJuOwogICAgYmxvY2suZm9yRWFjaFBoaSh2aXNpdEluc3RydWN0aW9uKTsKCiAgICAvLyBDaGVjayB0aGF0IHRoZSBibG9ja3Mgb2YgdGhlIHBhcmFtZXRlcnMgb2YgYSBwaGkgYXJlIGRvbWluYXRpbmcgdGhlCiAgICAvLyBjb3JyZXNwb25kaW5nIHByZWRlY2Vzc29yIGJsb2NrLiBOb3RlIHRoYXQgYSBibG9jayBkb21pbmF0ZXMKICAgIC8vIGl0c2VsZi4KICAgIGJsb2NrLmZvckVhY2hQaGkoKEhQaGkgcGhpKSB7CiAgICAgIGFzc2VydChwaGkuaW5wdXRzLmxlbmd0aCA8PSBibG9jay5wcmVkZWNlc3NvcnMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaGkuaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGlucHV0ID0gcGhpLmlucHV0c1tpXTsKICAgICAgICBpZiAoIWlucHV0LmJsb2NrLmRvbWluYXRlcyhibG9jay5wcmVkZWNlc3NvcnNbaV0pKSB7CiAgICAgICAgICBtYXJrSW52YWxpZCgiRGVmaW5pdGlvbiBkb2VzIG5vdCBkb21pbmF0ZSB1c2UiKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIENoZWNrIHRoYXQgdGhlIGJsb2NrcyBvZiB0aGUgaW5wdXRzIG9mIGFuIGluc3RydWN0aW9uIGRvbWluYXRlIHRoZQogICAgLy8gaW5zdHJ1Y3Rpb24ncyBibG9jay4KICAgIGJsb2NrLmZvckVhY2hJbnN0cnVjdGlvbigoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGZvciAoSEluc3RydWN0aW9uIGlucHV0IGluIGluc3RydWN0aW9uLmlucHV0cykgewogICAgICAgIGlmICghaW5wdXQuYmxvY2suZG9taW5hdGVzKGJsb2NrKSkgewogICAgICAgICAgbWFya0ludmFsaWQoIkRlZmluaXRpb24gZG9lcyBub3QgZG9taW5hdGUgdXNlIik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBzdXBlci52aXNpdEJhc2ljQmxvY2soYmxvY2spOwogIH0KCiAgLy8gTGltaXQgZm9yIHRoZSBzaXplIG9mIGBpbnB1dHNgIGFuZCBgdXNlZEJ5YCBsaXN0cy4gV2UgYXNzdW1lIGxpc3RzIGxvbmdlcgogIC8vIHRoYW4gdGhpcyBhcmUgT0sgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIE8oTl4yKSB2YWxpZGF0aW9uIGdldHRpbmcgb3V0IG9mCiAgLy8gaGFuZC4KICAvLwogIC8vIFBvc3RlciBjaGlsZDogY29yZWxpYl8yL3JlZ2V4cC9wY3JlX3Rlc3QuZGFydCwgd2hpY2ggaGFzIGEgN0tMT0MgbWFpbigpLgogIHN0YXRpYyBjb25zdCBpbnQga01heFZhbGlkYXRlZEluc3RydWN0aW9uTGlzdExlbmd0aCA9IDEwMDA7CgogIC8vLyBWZXJpZmllcyBbaW5zdHJ1Y3Rpb25dIGlzIGNvbnRhaW5lZCBpbiBbaW5zdHJ1Y3Rpb25zXSBbY291bnRdIHRpbWVzLgogIHN0YXRpYyBib29sIGNoZWNrSW5zdHJ1Y3Rpb25Db3VudCgKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGluc3RydWN0aW9ucywgSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBpbnQgY291bnQpIHsKICAgIGlmIChpbnN0cnVjdGlvbnMubGVuZ3RoID4ga01heFZhbGlkYXRlZEluc3RydWN0aW9uTGlzdExlbmd0aCkgcmV0dXJuIHRydWU7CiAgICBpbnQgcmVzdWx0ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChpZGVudGljYWwoaW5zdHJ1Y3Rpb25zW2ldLCBpbnN0cnVjdGlvbikpIHJlc3VsdCsrOwogICAgfQogICAgcmV0dXJuIHJlc3VsdCA9PSBjb3VudDsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHByZWRpY2F0ZSByZXR1cm5zIHRydWUgZm9yIGV2ZXJ5IGluc3RydWN0aW9uIGluIHRoZQogIC8vLyBsaXN0LiBUaGUgYXJndW1lbnQgdG8gW2ZdIGlzIGFuIGluc3RydWN0aW9uIHdpdGggdGhlIGNvdW50IG9mIGhvdyBvZnRlbgogIC8vLyBpdCBhcHBlYXJlZCBpbiB0aGUgbGlzdCBbaW5zdHJ1Y3Rpb25zXS4KICBzdGF0aWMgYm9vbCBldmVyeUluc3RydWN0aW9uKAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zLCBib29sIEZ1bmN0aW9uKEhJbnN0cnVjdGlvbiwgaW50KSBmKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IGtNYXhWYWxpZGF0ZWRJbnN0cnVjdGlvbkxpc3RMZW5ndGgpIHJldHVybiB0cnVlOwogICAgdmFyIGNvcHkgPSBuZXcgTGlzdDxISW5zdHJ1Y3Rpb24+LmZyb20oaW5zdHJ1Y3Rpb25zKTsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIHNvcnQgSEluc3RydWN0aW9ucyBiZWZvcmUKICAgIC8vIHdlIGhhdmUgYXNzaWduZWQgYW4gSUQuIFRoZSBsb29wIGlzIHRoZXJlZm9yZSBPKG5eMikgZm9yIG5vdy4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY3VycmVudCA9IGNvcHlbaV07CiAgICAgIGlmIChjdXJyZW50ID09IG51bGwpIGNvbnRpbnVlOwogICAgICBpbnQgY291bnQgPSAxOwogICAgICBmb3IgKGludCBqID0gaSArIDE7IGogPCBjb3B5Lmxlbmd0aDsgaisrKSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChjb3B5W2pdLCBjdXJyZW50KSkgewogICAgICAgICAgY29weVtqXSA9IG51bGw7CiAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWYoY3VycmVudCwgY291bnQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIFZlcmlmaWVzIHRoYXQgd2UgYXJlIGluIHRoZSB1c2UgbGlzdCBvZiBvdXIgaW5wdXRzLgogICAgYm9vbCBoYXNDb3JyZWN0SW5wdXRzKCkgewogICAgICBib29sIGluQmFzaWNCbG9jayA9IGluc3RydWN0aW9uLmlzSW5CYXNpY0Jsb2NrKCk7CiAgICAgIHJldHVybiBldmVyeUluc3RydWN0aW9uKGluc3RydWN0aW9uLmlucHV0cywgKGlucHV0LCBjb3VudCkgewogICAgICAgIGlmIChpbkJhc2ljQmxvY2spIHsKICAgICAgICAgIHJldHVybiBpbnB1dC5pc0luQmFzaWNCbG9jaygpICYmCiAgICAgICAgICAgICAgY2hlY2tJbnN0cnVjdGlvbkNvdW50KGlucHV0LnVzZWRCeSwgaW5zdHJ1Y3Rpb24sIGNvdW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGNoZWNrSW5zdHJ1Y3Rpb25Db3VudChpbnB1dC51c2VkQnksIGluc3RydWN0aW9uLCAwKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIC8vIFZlcmlmaWVzIHRoYXQgYWxsIG91ciB1c2VzIGhhdmUgdXMgaW4gdGhlaXIgaW5wdXRzLgogICAgYm9vbCBoYXNDb3JyZWN0VXNlcygpIHsKICAgICAgaWYgKCFpbnN0cnVjdGlvbi5pc0luQmFzaWNCbG9jaygpKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGV2ZXJ5SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24udXNlZEJ5LCAodXNlLCBjb3VudCkgewogICAgICAgIHJldHVybiB1c2UuaXNJbkJhc2ljQmxvY2soKSAmJgogICAgICAgICAgICBjaGVja0luc3RydWN0aW9uQ291bnQodXNlLmlucHV0cywgaW5zdHJ1Y3Rpb24sIGNvdW50KTsKICAgICAgfSk7CiAgICB9CgogICAgaWYgKCFpZGVudGljYWwoaW5zdHJ1Y3Rpb24uYmxvY2ssIGN1cnJlbnRCbG9jaykpIHsKICAgICAgbWFya0ludmFsaWQoIkluc3RydWN0aW9uIGluIHdyb25nIGJsb2NrIik7CiAgICB9CiAgICBpZiAoIWhhc0NvcnJlY3RJbnB1dHMoKSkgewogICAgICBtYXJrSW52YWxpZCgiSW5jb3JyZWN0IGlucHV0cyIpOwogICAgfQogICAgaWYgKCFoYXNDb3JyZWN0VXNlcygpKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJJbmNvcnJlY3QgdXNlcyIpOwogICAgfQogIH0KfQqA1gBOTjwBFQEvFxABJBUhBAEkExUEAUkjDCwaTwFOLzUiBic1Bj01Bkw+BiVNSDBCNEIIBj8/Bj9DBjtQPSkGPDAGATw3BgFJRzs2G0VDRwgGMBMnHyMiOB0yPAoIBgFAFDsbNDoIPEQIHQYBGigBS0QPIj40LD07CggIAUocOjctOwoICAEiBAFPTQsFTj4BSyVOTxQ0PQYcBAFOTi4gTU86TkUsHSUVMisaEwoILAYRBAEMNDseOEMcK0cRRgoKBgE7HDZBJ0MKBgE3MQYfJwYdJQYEAgEmcGFja2FnZTpjb21waWxlci9zcmMvc3NhL3ZhbGlkYXRlLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZWxlbWVudHMvZW50aXR5X3V0aWxzLmRhcnSUBi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGVudGl0eV91dGlsczsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnCiAgICBzaG93IGlzVXNlckRlZmluYWJsZU9wZXJhdG9yLCBpc01pbnVzT3BlcmF0b3I7CgppbXBvcnQgJ2VudGl0aWVzLmRhcnQnOwoKLy8gU29tZXdoYXQgc3RhYmxlIG9yZGVyaW5nIGZvciBsaWJyYXJpZXMgdXNpbmcgW1VyaV1zCmludCBjb21wYXJlTGlicmFyaWVzVXJpcyhVcmkgYSwgVXJpIGIpIHsKICBpZiAoYSA9PSBiKSByZXR1cm4gMDsKCiAgaW50IGJ5Q2Fub25pY2FsVXJpUGF0aCgpIHsKICAgIHJldHVybiBhLnBhdGguY29tcGFyZVRvKGIucGF0aCk7CiAgfQoKICAvLyBPcmRlcjogcGxhdGZvcm0gPCBwYWNrYWdlIDwgb3RoZXIuCiAgaWYgKGEuc2NoZW1lID09ICdkYXJ0JykgewogICAgaWYgKGIuc2NoZW1lID09ICdkYXJ0JykgcmV0dXJuIGJ5Q2Fub25pY2FsVXJpUGF0aCgpOwogICAgcmV0dXJuIC0xOwogIH0KICBpZiAoYi5zY2hlbWUgPT0gJ2RhcnQnKSByZXR1cm4gMTsKCiAgaWYgKGEuc2NoZW1lID09ICdwYWNrYWdlJykgewogICAgaWYgKGIuc2NoZW1lID09ICdwYWNrYWdlJykgcmV0dXJuIGJ5Q2Fub25pY2FsVXJpUGF0aCgpOwogICAgcmV0dXJuIC0xOwogIH0KICBpZiAoYi5zY2hlbWUgPT0gJ3BhY2thZ2UnKSByZXR1cm4gMTsKCiAgcmV0dXJuIF9jb21wYXJlQ2Fub25pY2FsVXJpKGEsIGIpOwp9CgppbnQgX2NvbXBhcmVDYW5vbmljYWxVcmkoVXJpIGEsIFVyaSBiKSB7CiAgaW50IHIgPSBhLnNjaGVtZS5jb21wYXJlVG8oYi5zY2hlbWUpOwogIGlmIChyICE9IDApIHJldHVybiByOwoKICAvLyBXZSB3b3VsZCBsaWtlIHRoZSBvcmRlciBvZiAnZmlsZTonIFVyaXMgdG8gYmUgc3RhYmxlIGFjcm9zcyBkaWZmZXJlbnQKICAvLyB1c2VycyBvciBkaWZmZXJlbnQgYnVpbGRzIGZyb20gdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLiAgV2Ugc29ydCBieQogIC8vIHBhdGhTZWdtZW50cyBlbGVtZW50cyBmcm9tIHRoZSBsYXN0IHRvIHRoZSBmaXJzdCBzaW5jZSB0aGF0IHRlbmRzIHRvIGZpbmQKICAvLyBhIHN0YWJsZSBkaXN0aW5jdGlvbiByZWdhcmRsZXNzIG9mIGRpcmVjdG9yeSByb290LgogIExpc3Q8U3RyaW5nPiBhU2VnbWVudHMgPSBhLnBhdGhTZWdtZW50czsKICBMaXN0PFN0cmluZz4gYlNlZ21lbnRzID0gYi5wYXRoU2VnbWVudHM7CiAgaW50IGFJID0gYVNlZ21lbnRzLmxlbmd0aDsKICBpbnQgYkkgPSBiU2VnbWVudHMubGVuZ3RoOwogIHdoaWxlIChhSSA+IDAgJiYgYkkgPiAwKSB7CiAgICBTdHJpbmcgYVNlZ21lbnQgPSBhU2VnbWVudHNbLS1hSV07CiAgICBTdHJpbmcgYlNlZ21lbnQgPSBiU2VnbWVudHNbLS1iSV07CiAgICByID0gYVNlZ21lbnQuY29tcGFyZVRvKGJTZWdtZW50KTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogIH0KICByZXR1cm4gYUkuY29tcGFyZVRvKGJJKTsgLy8gU2hvcnRlc3QgZmlyc3QuCn0KCi8vLyBDb21wYXJlIFVSSXMgb2YgY29tcGlsYXRpb24gdW5pdHMuCmludCBjb21wYXJlU291cmNlVXJpcyhVcmkgdXJpMSwgVXJpIHVyaTIpIHsKICBpZiAodXJpMSA9PSB1cmkyKSByZXR1cm4gMDsKICAvLyBDb21waWxhdGlvbiB1bml0cyBhcmUgY29tcGFyZWQgb25seSB3aXRoaW4gdGhlIHNhbWUgbGlicmFyeSBzbyB3ZSBleHBlY3QKICAvLyB0aGUgVXJpcyB0byB1c3VhbGx5IGJlIGNsdXN0ZXJlZCB0b2dldGhlciB3aXRoIGEgY29tbW9uIHNjaGVtZSBhbmQgcGF0aAogIC8vIHByZWZpeC4KICByZXR1cm4gJyR7dXJpMX0nLmNvbXBhcmVUbygnJHt1cmkyfScpOwp9CgovLy8gQ29tcGFyZSBlbnRpdGllcyB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdC4KaW50IGNvbXBhcmVFbnRpdGllcyhFbnRpdHkgZWxlbWVudDEsIGludCBsaW5lMSwgaW50IGNvbHVtbjEsIEVudGl0eSBlbGVtZW50MiwKICAgIGludCBsaW5lMiwgaW50IGNvbHVtbjIpIHsKICBsaW5lMSA/Pz0gLTE7CiAgbGluZTIgPz89IC0xOwogIGludCByID0gbGluZTEuY29tcGFyZVRvKGxpbmUyKTsKICBpZiAociAhPSAwKSByZXR1cm4gcjsKCiAgY29sdW1uMSA/Pz0gLTE7CiAgY29sdW1uMiA/Pz0gLTE7CiAgciA9IGNvbHVtbjEuY29tcGFyZVRvKGNvbHVtbjIpOwogIGlmIChyICE9IDApIHJldHVybiByOwoKICByID0gZWxlbWVudDEubmFtZS5jb21wYXJlVG8oZWxlbWVudDIubmFtZSk7CiAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CgogIC8vIFNhbWUgZmlsZSwgcG9zaXRpb24gYW5kIG5hbWUuICBJZiB0aGlzIGhhcHBlbnMsIHdlIHNob3VsZCBmaW5kIG91dCB3aHkKICAvLyBhbmQgbWFrZSB0aGUgb3JkZXIgdG90YWwgYW5kIGluZGVwZW5kZW50IG9mIGhhc2hDb2RlLgogIHJldHVybiBlbGVtZW50MS5oYXNoQ29kZS5jb21wYXJlVG8oZWxlbWVudDIuaGFzaENvZGUpOwp9CgpTdHJpbmcgcmVjb25zdHJ1Y3RDb25zdHJ1Y3Rvck5hbWUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogIFN0cmluZyBjbGFzc05hbWUgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWU7CiAgaWYgKGVsZW1lbnQubmFtZSA9PSAnJykgewogICAgcmV0dXJuIGNsYXNzTmFtZTsKICB9IGVsc2UgewogICAgcmV0dXJuICckY2xhc3NOYW1lXCQke2VsZW1lbnQubmFtZX0nOwogIH0KfQoKU3RyaW5nIHJlY29uc3RydWN0Q29uc3RydWN0b3JOYW1lU291cmNlU3RyaW5nKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICBpZiAoZWxlbWVudC5uYW1lID09ICcnKSB7CiAgICByZXR1cm4gZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lOwogIH0gZWxzZSB7CiAgICByZXR1cm4gcmVjb25zdHJ1Y3RDb25zdHJ1Y3Rvck5hbWUoZWxlbWVudCk7CiAgfQp9CgovLy8gTWFwIGFuIG9wZXJhdG9yLW5hbWUgdG8gYSB2YWxpZCBKYXZhU2NyaXB0IGlkZW50aWZpZXIuCi8vLwovLy8gRm9yIG5vbi1vcGVyYXRvciBuYW1lcywgdGhpcyBtZXRob2QganVzdCByZXR1cm5zIGl0cyBpbnB1dC4KLy8vCi8vLyBUaGUgcmVzdWx0cyByZXR1cm5lZCBmcm9tIHRoaXMgbWV0aG9kIGFyZSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkCi8vLyBKYXZhU2NyaXB0IGlkZW50aWZpZXJzLCBleGNlcHQgaXQgbWF5IGluY2x1ZGUgcmVzZXJ2ZWQgd29yZHMgZm9yCi8vLyBub24tb3BlcmF0b3IgbmFtZXMuClN0cmluZyBvcGVyYXRvck5hbWVUb0lkZW50aWZpZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICByZXR1cm4gbmFtZTsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJz09JykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkZXEnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnficpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJG5vdCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICdbXScpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGluZGV4JzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJ1tdPScpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGluZGV4U2V0JzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJyonKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRtdWwnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnLycpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGRpdic7CiAgfSBlbHNlIGlmIChuYW1lID09ICclJykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkbW9kJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJ34vJykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkdGRpdic7CiAgfSBlbHNlIGlmIChuYW1lID09ICcrJykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkYWRkJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJzw8JykgewogICAgcmV0dXJuIHInb3BlcmF0b3Ikc2hsJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJz4+JykgewogICAgcmV0dXJuIHInb3BlcmF0b3Ikc2hyJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJz4+PicpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJHNocnUnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnPj0nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRnZSc7CiAgfSBlbHNlIGlmIChuYW1lID09ICc+JykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkZ3QnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnPD0nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRsZSc7CiAgfSBlbHNlIGlmIChuYW1lID09ICc8JykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkbHQnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnJicpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGFuZCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICdeJykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkeG9yJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJ3wnKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRvcic7CiAgfSBlbHNlIGlmIChuYW1lID09ICctJykgewogICAgcmV0dXJuIHInb3BlcmF0b3Ikc3ViJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJ3VuYXJ5LScpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJG5lZ2F0ZSc7CiAgfSBlbHNlIHsKICAgIHJldHVybiBuYW1lOwogIH0KfQoKU3RyaW5nIGNvbnN0cnVjdE9wZXJhdG9yTmFtZU9yTnVsbChTdHJpbmcgb3AsIGJvb2wgaXNVbmFyeSkgewogIGlmIChpc01pbnVzT3BlcmF0b3Iob3ApKSB7CiAgICByZXR1cm4gaXNVbmFyeSA/ICd1bmFyeS0nIDogb3A7CiAgfSBlbHNlIGlmIChpc1VzZXJEZWZpbmFibGVPcGVyYXRvcihvcCkgfHwgb3AgPT0gJz8/JykgewogICAgcmV0dXJuIG9wOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KClN0cmluZyBjb25zdHJ1Y3RPcGVyYXRvck5hbWUoU3RyaW5nIG9wLCBib29sIGlzVW5hcnkpIHsKICBTdHJpbmcgb3BlcmF0b3JOYW1lID0gY29uc3RydWN0T3BlcmF0b3JOYW1lT3JOdWxsKG9wLCBpc1VuYXJ5KTsKICBpZiAob3BlcmF0b3JOYW1lID09IG51bGwpCiAgICB0aHJvdyAnVW5oYW5kbGVkIG9wZXJhdG9yOiAkb3AnOwogIGVsc2UKICAgIHJldHVybiBvcGVyYXRvck5hbWU7Cn0KgLMATk48ARYBOTMBGAE3KRgBHSUEASgcOQ8EJAEfPA8EJwElAgEpKBgBS0dPOCsrHR0dJycmGgQuAgEnLB5OTQ0pAgE3Th4QECIYARISIhgBLhgBTDs5AgE8MhwWCyoEAgFIHCgLMAQCATsEQARFRRgvFhEdGxwcHR4eIRwcHBwcHB0dHBwdHB0cHh0dGxwbHRscGxwcHBwcGxwcIR8LEQQCAT4dJDoPCxEEAgE4QhwlBxkCAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9lbnRpdHlfdXRpbHMuZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbGVtZW50cy9vcGVyYXRvcnMuZGFydKFfLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5vcGVyYXRvcnM7CgppbXBvcnQgJ25hbWVzLmRhcnQnIHNob3cgUHVibGljTmFtZTsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvciwgU2VsZWN0b3JLaW5kOwoKZW51bSBVbmFyeU9wZXJhdG9yS2luZCB7CiAgTk9ULAogIE5FR0FURSwKICBDT01QTEVNRU5ULAp9CgpjbGFzcyBVbmFyeU9wZXJhdG9yIHsKICBmaW5hbCBVbmFyeU9wZXJhdG9yS2luZCBraW5kOwogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFN0cmluZyBzZWxlY3Rvck5hbWU7CgogIGNvbnN0IFVuYXJ5T3BlcmF0b3IodGhpcy5raW5kLCB0aGlzLm5hbWUsIHRoaXMuc2VsZWN0b3JOYW1lKTsKCiAgYm9vbCBnZXQgaXNVc2VyRGVmaW5hYmxlID0+IHNlbGVjdG9yTmFtZSAhPSBudWxsOwoKICBTZWxlY3RvciBnZXQgc2VsZWN0b3IgPT4gbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5PUEVSQVRPUiwKICAgICAgbmV3IFB1YmxpY05hbWUoc2VsZWN0b3JOYW1lKSwgQ2FsbFN0cnVjdHVyZS5OT19BUkdTKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKCiAgLy8vIFRoZSB1bmFyeSAhIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBVbmFyeU9wZXJhdG9yIE5PVCA9CiAgICAgIGNvbnN0IFVuYXJ5T3BlcmF0b3IoVW5hcnlPcGVyYXRvcktpbmQuTk9ULCAnIScsIG51bGwpOwoKICAvLy8gVGhlIHVuYXJ5IC0gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IFVuYXJ5T3BlcmF0b3IgTkVHQVRFID0KICAgICAgY29uc3QgVW5hcnlPcGVyYXRvcihVbmFyeU9wZXJhdG9yS2luZC5ORUdBVEUsICctJywgJ3VuYXJ5LScpOwoKICAvLy8gVGhlIHVuYXJ5IH4gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IFVuYXJ5T3BlcmF0b3IgQ09NUExFTUVOVCA9CiAgICAgIGNvbnN0IFVuYXJ5T3BlcmF0b3IoVW5hcnlPcGVyYXRvcktpbmQuQ09NUExFTUVOVCwgJ34nLCAnficpOwoKICBzdGF0aWMgVW5hcnlPcGVyYXRvciBwYXJzZShTdHJpbmcgdmFsdWUpIHsKICAgIHN3aXRjaCAodmFsdWUpIHsKICAgICAgY2FzZSAnISc6CiAgICAgICAgcmV0dXJuIE5PVDsKICAgICAgY2FzZSAnLSc6CiAgICAgICAgcmV0dXJuIE5FR0FURTsKICAgICAgY2FzZSAnfic6CiAgICAgICAgcmV0dXJuIENPTVBMRU1FTlQ7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICAvLyBpZ25vcmU6IE1JU1NJTkdfUkVUVVJOCiAgc3RhdGljIFVuYXJ5T3BlcmF0b3IgZnJvbUtpbmQoVW5hcnlPcGVyYXRvcktpbmQga2luZCkgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgVW5hcnlPcGVyYXRvcktpbmQuTk9UOgogICAgICAgIHJldHVybiBOT1Q7CiAgICAgIGNhc2UgVW5hcnlPcGVyYXRvcktpbmQuTkVHQVRFOgogICAgICAgIHJldHVybiBORUdBVEU7CiAgICAgIGNhc2UgVW5hcnlPcGVyYXRvcktpbmQuQ09NUExFTUVOVDoKICAgICAgICByZXR1cm4gQ09NUExFTUVOVDsKICAgIH0KICB9Cn0KCmVudW0gQmluYXJ5T3BlcmF0b3JLaW5kIHsKICBFUSwKICBOT1RfRVEsCiAgSU5ERVgsCiAgQURELAogIFNVQiwKICBNVUwsCiAgRElWLAogIElESVYsCiAgTU9ELAogIFNITCwKICBTSFIsCiAgU0hSVSwKICBHVEVRLAogIEdULAogIExURVEsCiAgTFQsCiAgQU5ELAogIE9SLAogIFhPUiwKICBMT0dJQ0FMX0FORCwKICBMT0dJQ0FMX09SLAogIElGX05VTEwsCn0KCmNsYXNzIEJpbmFyeU9wZXJhdG9yIHsKICBmaW5hbCBCaW5hcnlPcGVyYXRvcktpbmQga2luZDsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyh0aGlzLmtpbmQsIHRoaXMubmFtZSk7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBvcGVyYXRvciBjYW4gYmUgaW1wbGVtZW50ZWQgdGhyb3VnaCBhbiBgb3BlcmF0b3IgW25hbWVdYAogIC8vLyBtZXRob2QuCiAgYm9vbCBnZXQgaXNVc2VyRGVmaW5hYmxlID0+IHRydWU7CgogIFN0cmluZyBnZXQgc2VsZWN0b3JOYW1lID0+IG5hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7CgogIC8vLyBUaGUgPT0gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIEVRID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuRVEsICc9PScpOwoKICAvLy8gVGhlICE9IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBOT1RfRVEgPSBjb25zdCBfTm90RXF1YWxzT3BlcmF0b3IoKTsKCiAgLy8vIFRoZSBbXSBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgSU5ERVggPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5JTkRFWCwgJ1tdJyk7CgogIC8vLyBUaGUgYmluYXJ5ICsgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIEFERCA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLkFERCwgJysnKTsKCiAgLy8vIFRoZSBiaW5hcnkgLSBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgU1VCID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuU1VCLCAnLScpOwoKICAvLy8gVGhlIGJpbmFyeSAqIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBNVUwgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5NVUwsICcqJyk7CgogIC8vLyBUaGUgYmluYXJ5IC8gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIERJViA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLkRJViwgJy8nKTsKCiAgLy8vIFRoZSBiaW5hcnkgfi8gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIElESVYgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5JRElWLCAnfi8nKTsKCiAgLy8vIFRoZSBiaW5hcnkgJSBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgTU9EID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuTU9ELCAnJScpOwoKICAvLy8gVGhlIGJpbmFyeSA8PCBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgU0hMID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuU0hMLCAnPDwnKTsKCiAgLy8vIFRoZSBiaW5hcnkgPj4gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIFNIUiA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLlNIUiwgJz4+Jyk7CgogIC8vLyBUaGUgYmluYXJ5ID4+PiBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgU0hSVSA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLlNIUlUsICc+PicpOwoKICAvLy8gVGhlIGJpbmFyeSA+PSBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgR1RFUSA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLkdURVEsICc+PScpOwoKICAvLy8gVGhlIGJpbmFyeSA+IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBHVCA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLkdULCAnPicpOwoKICAvLy8gVGhlIGJpbmFyeSA8PSBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgTFRFUSA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLkxURVEsICc8PScpOwoKICAvLy8gVGhlIGJpbmFyeSA8IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBMVCA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLkxULCAnPCcpOwoKICAvLy8gVGhlIGJpbmFyeSAmIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBBTkQgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5BTkQsICcmJyk7CgogIC8vLyBUaGUgYmluYXJ5IHwgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIE9SID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuT1IsICd8Jyk7CgogIC8vLyBUaGUgYmluYXJ5IF4gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIFhPUiA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLlhPUiwgJ14nKTsKCiAgLy8vIFRoZSBsb2dpY2FsICYmIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBMT0dJQ0FMX0FORCA9CiAgICAgIGNvbnN0IF9Mb2dpY2FsT3BlcmF0b3IoQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfQU5ELCAnJiYnKTsKCiAgLy8vIFRoZSBiaW5hcnkgfCBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgTE9HSUNBTF9PUiA9CiAgICAgIGNvbnN0IF9Mb2dpY2FsT3BlcmF0b3IoQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfT1IsICd8fCcpOwoKICAvLy8gVGhlIGlmLW51bGwgPz8gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIElGX05VTEwgPQogICAgICBjb25zdCBfSWZOdWxsT3BlcmF0b3IoQmluYXJ5T3BlcmF0b3JLaW5kLklGX05VTEwsICc/PycpOwoKICBzdGF0aWMgQmluYXJ5T3BlcmF0b3IgcGFyc2UoU3RyaW5nIHZhbHVlKSB7CiAgICBzd2l0Y2ggKHZhbHVlKSB7CiAgICAgIGNhc2UgJyYmJzoKICAgICAgICByZXR1cm4gTE9HSUNBTF9BTkQ7CiAgICAgIGNhc2UgJ3x8JzoKICAgICAgICByZXR1cm4gTE9HSUNBTF9PUjsKICAgICAgY2FzZSAnPz8nOgogICAgICAgIHJldHVybiBJRl9OVUxMOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBwYXJzZVVzZXJEZWZpbmFibGUodmFsdWUpOwogICAgfQogIH0KCiAgc3RhdGljIEJpbmFyeU9wZXJhdG9yIHBhcnNlVXNlckRlZmluYWJsZShTdHJpbmcgdmFsdWUpIHsKICAgIHN3aXRjaCAodmFsdWUpIHsKICAgICAgY2FzZSAnPT0nOgogICAgICAgIHJldHVybiBFUTsKICAgICAgY2FzZSAnIT0nOgogICAgICAgIHJldHVybiBOT1RfRVE7CiAgICAgIGNhc2UgJ1tdJzoKICAgICAgICByZXR1cm4gSU5ERVg7CiAgICAgIGNhc2UgJyonOgogICAgICAgIHJldHVybiBNVUw7CiAgICAgIGNhc2UgJy8nOgogICAgICAgIHJldHVybiBESVY7CiAgICAgIGNhc2UgJyUnOgogICAgICAgIHJldHVybiBNT0Q7CiAgICAgIGNhc2UgJ34vJzoKICAgICAgICByZXR1cm4gSURJVjsKICAgICAgY2FzZSAnKyc6CiAgICAgICAgcmV0dXJuIEFERDsKICAgICAgY2FzZSAnLSc6CiAgICAgICAgcmV0dXJuIFNVQjsKICAgICAgY2FzZSAnPDwnOgogICAgICAgIHJldHVybiBTSEw7CiAgICAgIGNhc2UgJz4+JzoKICAgICAgICByZXR1cm4gU0hSOwogICAgICBjYXNlICc+Pj4nOgogICAgICAgIHJldHVybiBTSFJVOwogICAgICBjYXNlICc+PSc6CiAgICAgICAgcmV0dXJuIEdURVE7CiAgICAgIGNhc2UgJz4nOgogICAgICAgIHJldHVybiBHVDsKICAgICAgY2FzZSAnPD0nOgogICAgICAgIHJldHVybiBMVEVROwogICAgICBjYXNlICc8JzoKICAgICAgICByZXR1cm4gTFQ7CiAgICAgIGNhc2UgJyYnOgogICAgICAgIHJldHVybiBBTkQ7CiAgICAgIGNhc2UgJ14nOgogICAgICAgIHJldHVybiBYT1I7CiAgICAgIGNhc2UgJ3wnOgogICAgICAgIHJldHVybiBPUjsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8vIGlnbm9yZTogTUlTU0lOR19SRVRVUk4KICBzdGF0aWMgQmluYXJ5T3BlcmF0b3IgZnJvbUtpbmQoQmluYXJ5T3BlcmF0b3JLaW5kIGtpbmQpIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5FUToKICAgICAgICByZXR1cm4gRVE7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk5PVF9FUToKICAgICAgICByZXR1cm4gTk9UX0VROwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JTkRFWDoKICAgICAgICByZXR1cm4gSU5ERVg7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk1VTDoKICAgICAgICByZXR1cm4gTVVMOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5ESVY6CiAgICAgICAgcmV0dXJuIERJVjsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTU9EOgogICAgICAgIHJldHVybiBNT0Q7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklESVY6CiAgICAgICAgcmV0dXJuIElESVY7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkFERDoKICAgICAgICByZXR1cm4gQUREOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TVUI6CiAgICAgICAgcmV0dXJuIFNVQjsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hMOgogICAgICAgIHJldHVybiBTSEw7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNIUjoKICAgICAgICByZXR1cm4gU0hSOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TSFJVOgogICAgICAgIHJldHVybiBTSFJVOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5HVEVROgogICAgICAgIHJldHVybiBHVEVROwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5HVDoKICAgICAgICByZXR1cm4gR1Q7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxURVE6CiAgICAgICAgcmV0dXJuIExURVE7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxUOgogICAgICAgIHJldHVybiBMVDsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuQU5EOgogICAgICAgIHJldHVybiBBTkQ7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlhPUjoKICAgICAgICByZXR1cm4gWE9SOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5PUjoKICAgICAgICByZXR1cm4gT1I7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfQU5EOgogICAgICAgIHJldHVybiBMT0dJQ0FMX0FORDsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9PUjoKICAgICAgICByZXR1cm4gTE9HSUNBTF9PUjsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSUZfTlVMTDoKICAgICAgICByZXR1cm4gSUZfTlVMTDsKICAgIH0KICB9Cn0KCi8vLyBUaGUgb3BlcmF0b3IgIT0sIHdoaWNoIGlzIG5vdCB1c2VyIGRlZmluYWJsZSBvcGVyYXRvciBidXQgaW5zdGVhZCBpcyBhCi8vLyBuZWdhdGlvbiBvZiBhIGNhbGwgdG8gdXNlciBkZWZpbmFibGUgb3BlcmF0b3IsIG5hbWVseSA9PS4KY2xhc3MgX05vdEVxdWFsc09wZXJhdG9yIGV4dGVuZHMgQmluYXJ5T3BlcmF0b3IgewogIGNvbnN0IF9Ob3RFcXVhbHNPcGVyYXRvcigpIDogc3VwZXIuXyhCaW5hcnlPcGVyYXRvcktpbmQuTk9UX0VRLCAnIT0nKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVc2VyRGVmaW5hYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHNlbGVjdG9yTmFtZSA9PiAnPT0nOwp9CgovLy8gVGhlIG9wZXJhdG9ycyAmJiBhbmQgfHwgd2hpY2ggYXJlIG5vdCB1c2VyIGRlZmluYWJsZSBvcGVyYXRvcnMgYnV0IGNvbnRyb2wKLy8vIHN0cnVjdHVyZXMuCmNsYXNzIF9Mb2dpY2FsT3BlcmF0b3IgZXh0ZW5kcyBCaW5hcnlPcGVyYXRvciB7CiAgY29uc3QgX0xvZ2ljYWxPcGVyYXRvcihCaW5hcnlPcGVyYXRvcktpbmQga2luZCwgU3RyaW5nIG5hbWUpCiAgICAgIDogc3VwZXIuXyhraW5kLCBuYW1lKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVc2VyRGVmaW5hYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHNlbGVjdG9yTmFtZSA9PiBudWxsOwp9CgovLy8gVGhlIG9wZXJhdG9ycyA/PyBpcyBub3QgdXNlciBkZWZpbmFibGUuCmNsYXNzIF9JZk51bGxPcGVyYXRvciBleHRlbmRzIEJpbmFyeU9wZXJhdG9yIHsKICBjb25zdCBfSWZOdWxsT3BlcmF0b3IoQmluYXJ5T3BlcmF0b3JLaW5kIGtpbmQsIFN0cmluZyBuYW1lKQogICAgICA6IHN1cGVyLl8oa2luZCwgbmFtZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVXNlckRlZmluYWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzZWxlY3Rvck5hbWUgPT4gJz8/JzsKfQqBVwBOTjwBGwElPUABGQcKDgIBFiAVHQFAATQBPzwBDB0BHCM9ARwmRAEcKkMBLRUQFBAXEBsPFQYEARw6FCIUJRcpGwYEAgEaBgoJBwcHBwgHBwcICAYIBgcGBw8OCwIBFyEVATABTg4kASMBDB0BFyM7ARdDARcmPgEdJDsBHSQ7AR0kOwEdJDsBHiU9AR0kOwEeJDwBHiQ8AR8lPQEeJT0BHSM6AR4lPQEdIzoBHSQ7AR0jOgEdJDsBHyxEAR0rQwEfKD8BLhURHBEbERgPKgYEATsVERMRFxEWEBQQFBAUERUQFBAUERQRFBIVERUQExEVEBMQFBAUEBMPFQYEARw8FCITJhclFiMUIxQjFCQVIxQjFCMUIxQkFSQVIhMkFSITIxQjFCITKxwqGycYBgQCAUs+MkkBDCUBDCMCAU8QMD8dAQwlAQwjAgEsLz4dAQwlAQwjAgEscGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvb3BlcmF0b3JzLmRhcnRFc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2ludm9jYXRpb25fbWlycm9yX2NvbnN0YW50cy5kYXJ0gVcvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKY29uc3QgaW50IGludm9jYXRpb25NaXJyb3JNZXRob2RLaW5kID0gMDsKY29uc3QgaW50IGludm9jYXRpb25NaXJyb3JHZXR0ZXJLaW5kID0gMTsKY29uc3QgaW50IGludm9jYXRpb25NaXJyb3JTZXR0ZXJLaW5kID0gMjsKCQBOTjwBKioqATxwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvaW52b2NhdGlvbl9taXJyb3JfY29uc3RhbnRzLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2tlcm5lbF93b3JsZC5kYXJ0mbUvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JyBzaG93IEtGaWVsZEFuYWx5c2lzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKCmltcG9ydCAnZWxlbWVudF9tYXBfaW1wbC5kYXJ0JzsKCmNsYXNzIEtDbG9zZWRXb3JsZEltcGwgaW1wbGVtZW50cyBLQ2xvc2VkV29ybGQgewogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgS0VsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQ7CgogIEBvdmVycmlkZQogIGZpbmFsIERhcnRUeXBlcyBkYXJ0VHlwZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEtDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50czsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTmF0aXZlRGF0YSBuYXRpdmVEYXRhOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgaW50ZXJjZXB0b3JEYXRhOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBOb1N1Y2hNZXRob2REYXRhIG5vU3VjaE1ldGhvZERhdGE7CgogIEBvdmVycmlkZQogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gbWl4aW5Vc2VzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXM7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhbiB0aGlzIGJlIGRlcml2ZWQgZnJvbSBbQ2xhc3NTZXRdcz8KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9pbXBsZW1lbnRlZENsYXNzZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gbGl2ZUluc3RhbmNlTWVtYmVyczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBhc3NpZ25lZEluc3RhbmNlTWVtYmVyczsKICBAb3ZlcnJpZGUKICBmaW5hbCBLRmllbGRBbmFseXNpcyBmaWVsZEFuYWx5c2lzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxDbGFzc0VudGl0eT4gbGl2ZU5hdGl2ZUNsYXNzZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBsaXZlTWVtYmVyVXNhZ2U7CgogIEBvdmVycmlkZQogIGZpbmFsIENsYXNzSGllcmFyY2h5IGNsYXNzSGllcmFyY2h5OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBBbm5vdGF0aW9uc0RhdGEgYW5ub3RhdGlvbnNEYXRhOwoKICBSdW50aW1lVHlwZXNOZWVkIF9ydGlOZWVkOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXQ8RGFydFR5cGU+IGlzQ2hlY2tzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXQ8VHlwZVZhcmlhYmxlVHlwZT4gbmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpOwoKICBmaW5hbCBNYXA8RW50aXR5LCBTZXQ8RGFydFR5cGU+PiBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXM7CgogIGZpbmFsIE1hcDxTZWxlY3RvciwgU2V0PERhcnRUeXBlPj4gZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU2V0PFR5cGVWYXJpYWJsZVR5cGU+IHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU2V0PExvY2FsPiBnZW5lcmljTG9jYWxGdW5jdGlvbnM7CgogIEBvdmVycmlkZQogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPExvY2FsPiBsb2NhbEZ1bmN0aW9uczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gaW5zdGFudGlhdGVkVHlwZXM7CgogIEBvdmVycmlkZQogIFJ1bnRpbWVUeXBlc05lZWQgZ2V0IHJ0aU5lZWQgPT4gX3J0aU5lZWQ7CgogIEtDbG9zZWRXb3JsZEltcGwodGhpcy5lbGVtZW50TWFwLAogICAgICB7Q29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIHRoaXMuZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLmRhcnRUeXBlcywKICAgICAgdGhpcy5jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5uYXRpdmVEYXRhLAogICAgICB0aGlzLmludGVyY2VwdG9yRGF0YSwKICAgICAgdGhpcy5iYWNrZW5kVXNhZ2UsCiAgICAgIHRoaXMubm9TdWNoTWV0aG9kRGF0YSwKICAgICAgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgcnRpTmVlZEJ1aWxkZXIsCiAgICAgIHRoaXMuZmllbGRBbmFseXNpcywKICAgICAgU2V0PENsYXNzRW50aXR5PiBpbXBsZW1lbnRlZENsYXNzZXMsCiAgICAgIHRoaXMubGl2ZU5hdGl2ZUNsYXNzZXMsCiAgICAgIHRoaXMubGl2ZUluc3RhbmNlTWVtYmVycywKICAgICAgdGhpcy5hc3NpZ25lZEluc3RhbmNlTWVtYmVycywKICAgICAgdGhpcy5saXZlTWVtYmVyVXNhZ2UsCiAgICAgIHRoaXMubWl4aW5Vc2VzLAogICAgICB0aGlzLnR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMsCiAgICAgIHRoaXMuY2xhc3NIaWVyYXJjaHksCiAgICAgIHRoaXMuYW5ub3RhdGlvbnNEYXRhLAogICAgICB0aGlzLmlzQ2hlY2tzLAogICAgICB0aGlzLm5hbWVkVHlwZVZhcmlhYmxlc05ld1J0aSwKICAgICAgdGhpcy5zdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMsCiAgICAgIHRoaXMuZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgdGhpcy50eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHMsCiAgICAgIHRoaXMuZ2VuZXJpY0xvY2FsRnVuY3Rpb25zLAogICAgICB0aGlzLmNsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzLAogICAgICB0aGlzLmxvY2FsRnVuY3Rpb25zLAogICAgICB0aGlzLmluc3RhbnRpYXRlZFR5cGVzfSkKICAgICAgOiBfaW1wbGVtZW50ZWRDbGFzc2VzID0gaW1wbGVtZW50ZWRDbGFzc2VzIHsKICAgIF9ydGlOZWVkID0gcnRpTmVlZEJ1aWxkZXIuY29tcHV0ZVJ1bnRpbWVUeXBlc05lZWQodGhpcywgb3B0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW1wbGVtZW50ZWQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2ltcGxlbWVudGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpOwogIH0KCiAgLy8vIE5lZWRlZCBmb3IgdGVzdGluZy4KICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBwcm9jZXNzZWRNZW1iZXJzID0+IGxpdmVNZW1iZXJVc2FnZS5rZXlzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hTdGF0aWNUeXBlQXJndW1lbnQoCiAgICAgIHZvaWQgZihFbnRpdHkgZnVuY3Rpb24sIFNldDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykpIHsKICAgIHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoRHluYW1pY1R5cGVBcmd1bWVudCgKICAgICAgdm9pZCBmKFNlbGVjdG9yIHNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpKSB7CiAgICBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTWVtYmVyVXNlZChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBsaXZlTWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoR2VuZXJpY01ldGhvZChGdW5jdGlvbiBmKSB7CiAgICBsaXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgaWYgKG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSAmJgogICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZW1iZXIpLmlzTm90RW1wdHkpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoR2VuZXJpY0luc3RhbmNlTWV0aG9kKEZ1bmN0aW9uIGYpIHsKICAgIGxpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICBpZiAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5ICYmCiAgICAgICAgICBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZW1iZXIpLmlzTm90RW1wdHkpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgTGlzdDxGdW5jdGlvbkVudGl0eT4gX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGU7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgdXNlck5vU3VjaE1ldGhvZHMgewogICAgaWYgKF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlID09IG51bGwpIHsKICAgICAgX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGUgPSA8RnVuY3Rpb25FbnRpdHk+W107CgogICAgICBsaXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UpIHsKICAgICAgICBpZiAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5ICYmIG1lbWJlclVzYWdlLmhhc1VzZSkgewogICAgICAgICAgaWYgKG1lbWJlci5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICAgICAgbWVtYmVyLm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyAmJgogICAgICAgICAgICAgICFjb21tb25FbGVtZW50cy5pc0RlZmF1bHROb1N1Y2hNZXRob2RJbXBsZW1lbnRhdGlvbihtZW1iZXIpKSB7CiAgICAgICAgICAgIF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlLmFkZChtZW1iZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlOwogIH0KCiAgU2V0PEZ1bmN0aW9uRW50aXR5PiBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBjbG9zdXJpemVkTWVtYmVycyB7CiAgICBpZiAoX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGUgPT0gbnVsbCkgewogICAgICBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZSA9IHt9OwogICAgICBsaXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24gJiYgbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgJiYgdXNhZ2UuaGFzUmVhZCkgewogICAgICAgICAgX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGUuYWRkKG1lbWJlcik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZTsKICB9CgogIFNldDxGdW5jdGlvbkVudGl0eT4gX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGU7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgY2xvc3VyaXplZFN0YXRpY3MgewogICAgaWYgKF9jbG9zdXJpemVkU3RhdGljc0NhY2hlID09IG51bGwpIHsKICAgICAgX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGUgPSB7fTsKICAgICAgbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uICYmCiAgICAgICAgICAgIChtZW1iZXIuaXNTdGF0aWMgfHwgbWVtYmVyLmlzVG9wTGV2ZWwpICYmCiAgICAgICAgICAgIHVzYWdlLmhhc1JlYWQpIHsKICAgICAgICAgIF9jbG9zdXJpemVkU3RhdGljc0NhY2hlLmFkZChtZW1iZXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGU7CiAgfQp9CoDuAE5OPAEfIiQhKUArLik1NhorKCQYASABMSsBDDABDB0BDCgBDB8BDCkBDCMBDCsBDDYBDEkBQC4BDDQBDDgMJgEMMQEMOAEMJwEMKQEdAQwgAQw4AUMBRgEMOAEMKgEMRAEMKAEMMwEMLAEkIB8WGxccGR0uGiseICQcFikbHBUlKywlIjMbHzNGBAEMKC4EARpHAQwiPi8EAQwjQDAEAQxRAQwqRyZMEwgIBAEMMkcmJUwTCAgEATABDDMrNAFPPik6TTEMCgoGASQEAS8BDDMrJElNLwoKBiQEAS8BDDMrJEkhNh0vCgoGJAQCAS1wYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VybmVsX3dvcmxkLmRhcnQ0c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9zb3J0ZXIuZGFydIRLLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnNvcnRlcjsKCmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CgovLy8gU29ydGluZyBzdHJhdGVneSBmb3IgbGlicmFyaWVzLCBjbGFzc2VzIGFuZCBtZW1iZXJzLgphYnN0cmFjdCBjbGFzcyBTb3J0ZXIgewogIC8vLyBSZXR1cm5zIGEgc29ydGVkIGxpc3Qgb2YgW2xpYnJhcmllc10uCiAgSXRlcmFibGU8TGlicmFyeUVudGl0eT4gc29ydExpYnJhcmllcyhJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBsaWJyYXJpZXMpOwoKICAvLy8gUmV0dXJucyBhIHNvcnRlZCBsaXN0IG9mIFtjbGFzc2VzXS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc29ydENsYXNzZXMoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpOwoKICAvLy8gUmV0dXJucyBhIHNvcnRlZCBsaXN0IG9mIFt0eXBlZGVmc10uCiAgSXRlcmFibGU8VHlwZWRlZkVudGl0eT4gc29ydFR5cGVkZWZzKEl0ZXJhYmxlPFR5cGVkZWZFbnRpdHk+IHR5cGVkZWZzKTsKCiAgLy8vIFJldHVybnMgYSBzb3J0ZWQgbGlzdCBvZiBbbWVtYmVyc10uCiAgSXRlcmFibGU8VD4gc29ydE1lbWJlcnM8VCBleHRlbmRzIE1lbWJlckVudGl0eT4oSXRlcmFibGU8VD4gbWVtYmVycyk7CgogIGludCBjb21wYXJlTGlicmFyaWVzQnlMb2NhdGlvbihMaWJyYXJ5RW50aXR5IGEsIExpYnJhcnlFbnRpdHkgYik7CiAgaW50IGNvbXBhcmVDbGFzc2VzQnlMb2NhdGlvbihDbGFzc0VudGl0eSBhLCBDbGFzc0VudGl0eSBiKTsKICBpbnQgY29tcGFyZVR5cGVkZWZzQnlMb2NhdGlvbihUeXBlZGVmRW50aXR5IGEsIFR5cGVkZWZFbnRpdHkgYik7CiAgaW50IGNvbXBhcmVNZW1iZXJzQnlMb2NhdGlvbihNZW1iZXJFbnRpdHkgYSwgTWVtYmVyRW50aXR5IGIpOwp9Ch0ATk48ASMBJAE5GCxMASpEAStKASpIAUQ+Q0ACAStwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3NvcnRlci5kYXJ0OXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2NvbnN0YW50cy9jb25zdHJ1Y3RvcnMuZGFydKsDLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb25zdGFudHMuY29uc3RydWN0b3JzOwoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JyBzaG93IEZpZWxkRW50aXR5OwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnZXZhbHVhdGlvbi5kYXJ0JzsKaW1wb3J0ICdleHByZXNzaW9ucy5kYXJ0JzsKCmVudW0gQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQgewogIEdFTkVSQVRJVkUsCiAgUkVESVJFQ1RJTkdfR0VORVJBVElWRSwKICBSRURJUkVDVElOR19GQUNUT1JZLAogIEVSUk9ORU9VUywKfQoKY2xhc3MgSW5zdGFuY2VEYXRhIHsKICBmaW5hbCBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50RXhwcmVzc2lvbj4gZmllbGRNYXA7CiAgZmluYWwgTGlzdDxBc3NlcnRDb25zdGFudEV4cHJlc3Npb24+IGFzc2VydGlvbnM7CgogIEluc3RhbmNlRGF0YSh0aGlzLmZpZWxkTWFwLCB0aGlzLmFzc2VydGlvbnMpOwp9CgovLy8gRGVmaW5pdGlvbiBvZiBhIGNvbnN0YW50IGNvbnN0cnVjdG9yLgphYnN0cmFjdCBjbGFzcyBDb25zdGFudENvbnN0cnVjdG9yIHsKICBDb25zdGFudENvbnN0cnVjdG9yS2luZCBnZXQga2luZDsKCiAgLy8vIENvbXB1dGVzIHRoZSB0eXBlIG9mIHRoZSBpbnN0YW5jZSBjcmVhdGVkIGluIGEgY29uc3QgY29uc3RydWN0b3IKICAvLy8gaW52b2NhdGlvbiB3aXRoIHR5cGUgW25ld1R5cGVdLgogIEludGVyZmFjZVR5cGUgY29tcHV0ZUluc3RhbmNlVHlwZSgKICAgICAgRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LCBJbnRlcmZhY2VUeXBlIG5ld1R5cGUpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIGNvbnN0YW50IGV4cHJlc3Npb25zIG9mIHRoZSBmaWVsZHMgYW5kIGluaXRpYWxpemVyIGFzc2VydGlvbnMKICAvLy8gb2YgdGhlIGNyZWF0ZWQgaW5zdGFuY2UgaW4gYSBjb25zdCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIHdpdGgKICAvLy8gW2FyZ3VtZW50c10uCiAgSW5zdGFuY2VEYXRhIGNvbXB1dGVJbnN0YW5jZURhdGEoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gYXJndW1lbnRzLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpOwoKICBhY2NlcHQoQ29uc3RhbnRDb25zdHJ1Y3RvclZpc2l0b3IgdmlzaXRvciwgYXJnKTsKfQoKYWJzdHJhY3QgY2xhc3MgQ29uc3RhbnRDb25zdHJ1Y3RvclZpc2l0b3I8UiwgQT4gewogIGNvbnN0IENvbnN0YW50Q29uc3RydWN0b3JWaXNpdG9yKCk7CgogIFIgdmlzaXQoCiAgICAgIGNvdmFyaWFudCBDb25zdGFudENvbnN0cnVjdG9yIGNvbnN0YW50Q29uc3RydWN0b3IsIGNvdmFyaWFudCBBIGNvbnRleHQpIHsKICAgIHJldHVybiBjb25zdGFudENvbnN0cnVjdG9yLmFjY2VwdCh0aGlzLCBjb250ZXh0KTsKICB9CgogIFIgdmlzaXRHZW5lcmF0aXZlKAogICAgICBjb3ZhcmlhbnQgR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IgY29uc3RydWN0b3IsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdFJlZGlyZWN0aW5nR2VuZXJhdGl2ZSgKICAgICAgY292YXJpYW50IFJlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IgY29uc3RydWN0b3IsCiAgICAgIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdFJlZGlyZWN0aW5nRmFjdG9yeSgKICAgICAgY292YXJpYW50IFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0YW50Q29uc3RydWN0b3IgY29uc3RydWN0b3IsCiAgICAgIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdEVycm9uZW91cygKICAgICAgY292YXJpYW50IEVycm9uZW91c0NvbnN0YW50Q29uc3RydWN0b3IgY29uc3RydWN0b3IsIGNvdmFyaWFudCBBIGFyZyk7Cn0KCi8vLyBBIGdlbmVyYXRpdmUgY29uc3RhbnQgY29uc3RydWN0b3IuCmNsYXNzIEdlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yIGltcGxlbWVudHMgQ29uc3RhbnRDb25zdHJ1Y3RvciB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIE1hcDxkeW5hbWljIC8qaW50fFN0cmluZyovLCBDb25zdGFudEV4cHJlc3Npb24+IGRlZmF1bHRWYWx1ZXM7CiAgZmluYWwgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudEV4cHJlc3Npb24+IGZpZWxkTWFwOwogIGZpbmFsIExpc3Q8QXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uPiBhc3NlcnRpb25zOwogIGZpbmFsIENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uIHN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uOwoKICBHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3Rvcih0aGlzLnR5cGUsIHRoaXMuZGVmYXVsdFZhbHVlcywgdGhpcy5maWVsZE1hcCwKICAgICAgdGhpcy5hc3NlcnRpb25zLCB0aGlzLnN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQuR0VORVJBVElWRTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBjb21wdXRlSW5zdGFuY2VUeXBlKAogICAgICBFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIEludGVyZmFjZVR5cGUgbmV3VHlwZSkgewogICAgcmV0dXJuIGVudmlyb25tZW50LnN1YnN0QnlDb250ZXh0KHR5cGUsIG5ld1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5zdGFuY2VEYXRhIGNvbXB1dGVJbnN0YW5jZURhdGEoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gYXJndW1lbnRzLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJncyA9CiAgICAgICAgbmV3IE5vcm1hbGl6ZWRBcmd1bWVudHMoZGVmYXVsdFZhbHVlcywgY2FsbFN0cnVjdHVyZSwgYXJndW1lbnRzKTsKICAgIEluc3RhbmNlRGF0YSBhcHBsaWVkSW5zdGFuY2VEYXRhID0KICAgICAgICBhcHBseUluc3RhbmNlRGF0YShlbnZpcm9ubWVudCwgYXJncywgc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24pOwogICAgZmllbGRNYXAuZm9yRWFjaCgoRmllbGRFbnRpdHkgZmllbGQsIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCkgewogICAgICBhcHBsaWVkSW5zdGFuY2VEYXRhLmZpZWxkTWFwW2ZpZWxkXSA9IGNvbnN0YW50LmFwcGx5KGFyZ3MpOwogICAgfSk7CiAgICBmb3IgKEFzc2VydENvbnN0YW50RXhwcmVzc2lvbiBhc3NlcnRpb24gaW4gYXNzZXJ0aW9ucykgewogICAgICBhcHBsaWVkSW5zdGFuY2VEYXRhLmFzc2VydGlvbnMuYWRkKGFzc2VydGlvbi5hcHBseShhcmdzKSk7CiAgICB9CiAgICByZXR1cm4gYXBwbGllZEluc3RhbmNlRGF0YTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudENvbnN0cnVjdG9yVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0R2VuZXJhdGl2ZSh0aGlzLCBhcmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgaGFzaCA9IEhhc2hpbmcub2JqZWN0SGFzaCh0eXBlKTsKICAgIGhhc2ggPSBIYXNoaW5nLm1hcEhhc2goZGVmYXVsdFZhbHVlcywgaGFzaCk7CiAgICBoYXNoID0gSGFzaGluZy5tYXBIYXNoKGZpZWxkTWFwLCBoYXNoKTsKICAgIHJldHVybiBIYXNoaW5nLm9iamVjdEhhc2goc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24sIGhhc2gpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZSAmJgogICAgICAgIHN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uID09IG90aGVyLnN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uICYmCiAgICAgICAgbWFwRXF1YWxzKGRlZmF1bHRWYWx1ZXMsIG90aGVyLmRlZmF1bHRWYWx1ZXMpICYmCiAgICAgICAgbWFwRXF1YWxzKGZpZWxkTWFwLCBvdGhlci5maWVsZE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgieyd0eXBlJzogJHR5cGUiKTsKICAgIGRlZmF1bHRWYWx1ZXMuZm9yRWFjaCgoa2V5LCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgICBzYi53cml0ZSgiLFxuICdkZWZhdWx0OiR7a2V5fSc6ICR7ZXhwcmVzc2lvbi50b0RhcnRUZXh0KCl9Iik7CiAgICB9KTsKICAgIGZpZWxkTWFwLmZvckVhY2goKEZpZWxkRW50aXR5IGZpZWxkLCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgICBzYi53cml0ZSgiLFxuICdmaWVsZDoke2ZpZWxkfSc6ICR7ZXhwcmVzc2lvbi50b0RhcnRUZXh0KCl9Iik7CiAgICB9KTsKICAgIGlmIChzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbiAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCIsXG4gJ2NvbnN0cnVjdG9yOiAke3N1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uLnRvRGFydFRleHQoKX0iKTsKICAgIH0KICAgIHNiLndyaXRlKCJ9Iik7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyBib29sIG1hcEVxdWFscyhNYXAgbWFwMSwgTWFwIG1hcDIpIHsKICAgIGlmIChtYXAxLmxlbmd0aCAhPSBtYXAxLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yICh2YXIga2V5IGluIG1hcDEua2V5cykgewogICAgICBpZiAobWFwMVtrZXldICE9IG1hcDJba2V5XSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gQ3JlYXRlcyB0aGUgZmllbGQtdG8tY29uc3RhbnQgbWFwIGZyb20gYXBwbHlpbmcgW2FyZ3NdIHRvCiAgLy8vIFtjb25zdHJ1Y3Rvckludm9jYXRpb25dLiBJZiBbY29uc3RydWN0b3JJbnZvY2F0aW9uXSBpcyBgbnVsbGAsIGFuIGVtcHR5CiAgLy8vIG1hcCBpcyBjcmVhdGVkLiBSZXR1cm5zIGBudWxsYCBpZiBhbiBlcnJvbmVvdXMgY29uc3RhbnQgY29uc3RydWN0b3Igd2FzCiAgLy8vIGVuY291bnRlcmVkIGluIHRoZSBzdXBlci1jaGFpbi4KICBzdGF0aWMgSW5zdGFuY2VEYXRhIGFwcGx5SW5zdGFuY2VEYXRhKAogICAgICBFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJncywKICAgICAgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gY29uc3RydWN0b3JJbnZvY2F0aW9uKSB7CiAgICBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50RXhwcmVzc2lvbj4gYXBwbGllZEZpZWxkTWFwID0KICAgICAgICA8RmllbGRFbnRpdHksIENvbnN0YW50RXhwcmVzc2lvbj57fTsKICAgIExpc3Q8QXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uPiBhcHBsaWVkQXNzZXJ0aW9ucyA9CiAgICAgICAgPEFzc2VydENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICAgIGlmIChjb25zdHJ1Y3Rvckludm9jYXRpb24gIT0gbnVsbCkgewogICAgICBJbnN0YW5jZURhdGEgaW5zdGFuY2VEYXRhID0KICAgICAgICAgIGNvbnN0cnVjdG9ySW52b2NhdGlvbi5jb21wdXRlSW5zdGFuY2VEYXRhKGVudmlyb25tZW50KTsKICAgICAgaWYgKGluc3RhbmNlRGF0YSA9PSBudWxsKSB7CiAgICAgICAgLy8gQW4gZXJyb25lb3VzIGNvbnN0YW50IGNvbnN0cnVjdG9yIHdhcyBlbmNvdW50ZXJlZCBpbiB0aGUgc3VwZXItY2hhaW4uCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaW5zdGFuY2VEYXRhLmZpZWxkTWFwCiAgICAgICAgICAuZm9yRWFjaCgoRmllbGRFbnRpdHkgZmllbGQsIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCkgewogICAgICAgIGFwcGxpZWRGaWVsZE1hcFtmaWVsZF0gPSBjb25zdGFudC5hcHBseShhcmdzKTsKICAgICAgfSk7CiAgICAgIGZvciAoQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uIGFzc2VydGlvbiBpbiBpbnN0YW5jZURhdGEuYXNzZXJ0aW9ucykgewogICAgICAgIGFwcGxpZWRBc3NlcnRpb25zLmFkZChhc3NlcnRpb24uYXBwbHkoYXJncykpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IEluc3RhbmNlRGF0YShhcHBsaWVkRmllbGRNYXAsIGFwcGxpZWRBc3NlcnRpb25zKTsKICB9Cn0KCi8vLyBBIHJlZGlyZWN0aW5nIGdlbmVyYXRpdmUgY29uc3RhbnQgY29uc3RydWN0b3IuCmNsYXNzIFJlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IgaW1wbGVtZW50cyBDb25zdGFudENvbnN0cnVjdG9yIHsKICBmaW5hbCBNYXA8ZHluYW1pYyAvKmludHxTdHJpbmcqLywgQ29uc3RhbnRFeHByZXNzaW9uPiBkZWZhdWx0VmFsdWVzOwogIGZpbmFsIENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uIHRoaXNDb25zdHJ1Y3Rvckludm9jYXRpb247CgogIFJlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IoCiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlcywgdGhpcy50aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQgZ2V0IGtpbmQgewogICAgcmV0dXJuIENvbnN0YW50Q29uc3RydWN0b3JLaW5kLlJFRElSRUNUSU5HX0dFTkVSQVRJVkU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGNvbXB1dGVJbnN0YW5jZVR5cGUoCiAgICAgIEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgSW50ZXJmYWNlVHlwZSBuZXdUeXBlKSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuc3Vic3RCeUNvbnRleHQoCiAgICAgICAgdGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbi5jb21wdXRlSW5zdGFuY2VUeXBlKGVudmlyb25tZW50KSwgbmV3VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnN0YW5jZURhdGEgY29tcHV0ZUluc3RhbmNlRGF0YShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgTm9ybWFsaXplZEFyZ3VtZW50cyBhcmdzID0KICAgICAgICBuZXcgTm9ybWFsaXplZEFyZ3VtZW50cyhkZWZhdWx0VmFsdWVzLCBjYWxsU3RydWN0dXJlLCBhcmd1bWVudHMpOwogICAgSW5zdGFuY2VEYXRhIGFwcGxpZWRJbnN0YW5jZURhdGEgPQogICAgICAgIEdlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yLmFwcGx5SW5zdGFuY2VEYXRhKAogICAgICAgICAgICBlbnZpcm9ubWVudCwgYXJncywgdGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgICByZXR1cm4gYXBwbGllZEluc3RhbmNlRGF0YTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudENvbnN0cnVjdG9yVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0UmVkaXJlY3RpbmdHZW5lcmF0aXZlKHRoaXMsIGFyZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gSGFzaGluZy5vYmplY3RIYXNoKHRoaXNDb25zdHJ1Y3Rvckludm9jYXRpb24pOwogICAgcmV0dXJuIEhhc2hpbmcubWFwSGFzaChkZWZhdWx0VmFsdWVzLCBoYXNoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRoaXNDb25zdHJ1Y3Rvckludm9jYXRpb24gPT0gb3RoZXIudGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbiAmJgogICAgICAgIEdlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yLm1hcEVxdWFscygKICAgICAgICAgICAgZGVmYXVsdFZhbHVlcywgb3RoZXIuZGVmYXVsdFZhbHVlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgieyd0eXBlJzogJHt0aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uLnR5cGV9Iik7CiAgICBkZWZhdWx0VmFsdWVzLmZvckVhY2goKGtleSwgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgICAgc2Iud3JpdGUoIixcbiAnZGVmYXVsdDoke2tleX0nOiAke2V4cHJlc3Npb24udG9EYXJ0VGV4dCgpfSIpOwogICAgfSk7CiAgICBzYi53cml0ZSgiLFxuICdjb25zdHJ1Y3Rvcic6ICR7dGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbi50b0RhcnRUZXh0KCl9Iik7CiAgICBzYi53cml0ZSgifSIpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gQSByZWRpcmVjdGluZyBmYWN0b3J5IGNvbnN0YW50IGNvbnN0cnVjdG9yLgpjbGFzcyBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdGFudENvbnN0cnVjdG9yIGltcGxlbWVudHMgQ29uc3RhbnRDb25zdHJ1Y3RvciB7CiAgZmluYWwgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gdGFyZ2V0Q29uc3RydWN0b3JJbnZvY2F0aW9uOwoKICBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdGFudENvbnN0cnVjdG9yKHRoaXMudGFyZ2V0Q29uc3RydWN0b3JJbnZvY2F0aW9uKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQgZ2V0IGtpbmQgewogICAgcmV0dXJuIENvbnN0YW50Q29uc3RydWN0b3JLaW5kLlJFRElSRUNUSU5HX0ZBQ1RPUlk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGNvbXB1dGVJbnN0YW5jZVR5cGUoCiAgICAgIEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgSW50ZXJmYWNlVHlwZSBuZXdUeXBlKSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuc3Vic3RCeUNvbnRleHQoCiAgICAgICAgdGFyZ2V0Q29uc3RydWN0b3JJbnZvY2F0aW9uLmNvbXB1dGVJbnN0YW5jZVR5cGUoZW52aXJvbm1lbnQpLCBuZXdUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEluc3RhbmNlRGF0YSBjb21wdXRlSW5zdGFuY2VEYXRhKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGFyZ3VtZW50cywgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICBDb25zdGFudENvbnN0cnVjdG9yIGNvbnN0YW50Q29uc3RydWN0b3IgPQogICAgICAgIGVudmlyb25tZW50LmdldENvbnN0cnVjdG9yQ29uc3RhbnQodGFyZ2V0Q29uc3RydWN0b3JJbnZvY2F0aW9uLnRhcmdldCk7CiAgICByZXR1cm4gY29uc3RhbnRDb25zdHJ1Y3Rvci5jb21wdXRlSW5zdGFuY2VEYXRhKAogICAgICAgIGVudmlyb25tZW50LCBhcmd1bWVudHMsIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50Q29uc3RydWN0b3JWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnkodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIEhhc2hpbmcub2JqZWN0SGFzaCh0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdGFudENvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdGFyZ2V0Q29uc3RydWN0b3JJbnZvY2F0aW9uID09IG90aGVyLnRhcmdldENvbnN0cnVjdG9ySW52b2NhdGlvbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCJ7Iik7CiAgICBzYi53cml0ZSgiJ2NvbnN0cnVjdG9yJzogJHt0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24udG9EYXJ0VGV4dCgpfSIpOwogICAgc2Iud3JpdGUoIn0iKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIEEgY29uc3RhbnQgY29uc3RydWN0b3Igd2l0aCBlcnJvcnMuCmNsYXNzIEVycm9uZW91c0NvbnN0YW50Q29uc3RydWN0b3IgaW1wbGVtZW50cyBDb25zdGFudENvbnN0cnVjdG9yIHsKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yS2luZCBnZXQga2luZCA9PiBDb25zdGFudENvbnN0cnVjdG9yS2luZC5FUlJPTkVPVVM7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudENvbnN0cnVjdG9yVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RXJyb25lb3VzKHRoaXMsIGFyZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnN0YW5jZURhdGEgY29tcHV0ZUluc3RhbmNlRGF0YShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGNvbXB1dGVJbnN0YW5jZVR5cGUoCiAgICAgIEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgSW50ZXJmYWNlVHlwZSBuZXdUeXBlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAnRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3Rvci5jb21wdXRlSW5zdGFuY2VUeXBlJyk7CiAgfQp9CoFFAE5OPAEoATUhPRwaGwEfDhoXDQIBFTczATACASolJAFHJiVBAVFFE0ZIATMCATImAQtQNgQBFU0gRhgdQxgUTAIBJ0UcRzczQgFOOQEMSgEMJUI2BAEMRkkfSidKSEIIPUEGIAQBDDQvBAEMFSkxLEEEAQwcLT8hSjktBAEMFiogQUQISkQILlAGExoEAS4yISQWCAYRBAFATk4mKSkgPTstNyYpIkIiURUIHEY3Ckw2CAZBBAIBM1BHQQEsOwEMJTsEAQwlQidOBAEMRkkfSic5OyAEAQw0OgQBDBU+MQQBDBwtSksxMQQBDBYqPEFECE4TGgQCATBNQwFLAQwlOAQBDCVCJ1AEAQxGSS5QNDAEAQw0NwQBDBU8BAEMHC1HTQQBDBYqE0wTGgQCAShEDEkBDDQuBAEMRkkRBAEMJUIgPQQCATBwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb25zdGFudHMvY29uc3RydWN0b3JzLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29uc3RhbnRzL2V2YWx1YXRpb24uZGFydKTFLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb25zdGFudHMuZXZhbHVhdGlvbjsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIHNob3cgTGluazsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICdjb25zdHJ1Y3RvcnMuZGFydCc7CmltcG9ydCAnZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAndmFsdWVzLmRhcnQnOwoKLy8vIEVudmlyb25tZW50IHVzZWQgZm9yIGV2YWx1YXRpbmcgY29uc3RhbnQgZXhwcmVzc2lvbnMuCmFic3RyYWN0IGNsYXNzIEV2YWx1YXRpb25FbnZpcm9ubWVudCB7CiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzOwoKICBEYXJ0VHlwZXMgZ2V0IHR5cGVzOwoKICAvLy8gVHlwZSBpbiB0aGUgZW5jbG9zaW5nIGNvbnN0cnVjdGVkCiAgSW50ZXJmYWNlVHlwZSBnZXQgZW5jbG9zaW5nQ29uc3RydWN0ZWRUeXBlOwoKICAvLy8gUmVhZCBlbnZpcm9ubWVudHMgc3RyaW5nIHBhc3NlZCBpbiB1c2luZyB0aGUgJy1EbmFtZT12YWx1ZScgb3B0aW9uLgogIFN0cmluZyByZWFkRnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDb25zdGFudEV4cHJlc3Npb25dIGZvciB0aGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50IFtsb2NhbF0uCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldExvY2FsQ29uc3RhbnQoY292YXJpYW50IExvY2FsIGxvY2FsKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDb25zdGFudEV4cHJlc3Npb25dIGZvciB0aGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50IFtmaWVsZF0uCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldEZpZWxkQ29uc3RhbnQoY292YXJpYW50IEZpZWxkRW50aXR5IGZpZWxkKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDb25zdGFudENvbnN0cnVjdG9yXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb25zdGFudAogIC8vLyBbY29uc3RydWN0b3JdLgogIENvbnN0YW50Q29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3JDb25zdGFudCgKICAgICAgY292YXJpYW50IENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKTsKCiAgLy8vIFBlcmZvcm1zIHRoZSBzdWJzdGl0dXRpb24gb2YgdGhlIHR5cGUgYXJndW1lbnRzIG9mIFt0YXJnZXRdIGZvciB0aGVpcgogIC8vLyBjb3JyZXNwb25kaW5nIHR5cGUgdmFyaWFibGVzIGluIFt0eXBlXS4KICBEYXJ0VHlwZSBzdWJzdEJ5Q29udGV4dCgKICAgICAgY292YXJpYW50IERhcnRUeXBlIGJhc2UsIGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHRhcmdldCk7CgogIC8vLyBSZXR1cm5zIFt0eXBlXSBpbiB0aGUgY29udGV4dCBvZiB0aGUgW2VuY2xvc2luZ0NvbnN0cnVjdGVkVHlwZV0uCiAgRGFydFR5cGUgZ2V0VHlwZUluQ29udGV4dChEYXJ0VHlwZSB0eXBlKTsKCiAgdm9pZCByZXBvcnRXYXJuaW5nKAogICAgICBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTWVzc2FnZUtpbmQga2luZCwgTWFwIGFyZ3VtZW50cyk7CgogIHZvaWQgcmVwb3J0RXJyb3IoCiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uLCBNZXNzYWdlS2luZCBraW5kLCBNYXAgYXJndW1lbnRzKTsKCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZUNvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yLAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoKSk7CgogIENvbnN0YW50VmFsdWUgZXZhbHVhdGVNYXBCb2R5KENvbnN0YW50VmFsdWUgZXZhbHVhdGUoKSk7CgogIENvbnN0YW50VmFsdWUgZXZhbHVhdGVGaWVsZChGaWVsZEVudGl0eSBmaWVsZCwgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZSgpKTsKCiAgLy8vIGB0cnVlYCBpZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLgogIGJvb2wgZ2V0IGVuYWJsZUFzc2VydGlvbnM7CgogIC8vLyBJZiBgdHJ1ZWAsIGltcGxpY2l0IGNhc3RzIHNob3VsZCBiZSBjaGVja2VkLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4ganMtaW50ZXJvcCBjbGFzc2VzCiAgLy8vIGFuZCB0aGVpciBtZXRhZGF0YS4gRm9yIG5vbi1tZXRhZGF0YSBjb25zdGFudHMgd2UgYWx3YXlzIGNoZWNrIHRoZSBjYXN0cy4KICBib29sIGdldCBjaGVja0Nhc3RzOwp9CgphYnN0cmFjdCBjbGFzcyBFdmFsdWF0aW9uRW52aXJvbm1lbnRCYXNlIGltcGxlbWVudHMgRXZhbHVhdGlvbkVudmlyb25tZW50IHsKICBMaW5rPFNwYW5uYWJsZT4gX3NwYW5uYWJsZVN0YWNrID0gY29uc3QgTGluazxTcGFubmFibGU+KCk7CiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBlbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGU7CiAgZmluYWwgU2V0PEZpZWxkRW50aXR5PiBfY3VycmVudGx5RXZhbHVhdGVkRmllbGRzID0gbmV3IFNldDxGaWVsZEVudGl0eT4oKTsKICBmaW5hbCBib29sIGNvbnN0YW50UmVxdWlyZWQ7CgogIEV2YWx1YXRpb25FbnZpcm9ubWVudEJhc2UoU3Bhbm5hYmxlIHNwYW5uYWJsZSwge3RoaXMuY29uc3RhbnRSZXF1aXJlZH0pIHsKICAgIF9zcGFubmFibGVTdGFjayA9IF9zcGFubmFibGVTdGFjay5wcmVwZW5kKHNwYW5uYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjaGVja0Nhc3RzID0+IHRydWU7CgogIERpYWdub3N0aWNSZXBvcnRlciBnZXQgcmVwb3J0ZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBbU3Bhbm5hYmxlXSB1c2VkIGZvciByZXBvcnRpbmcgZXJyb3JzIGFuZCB3YXJuaW5ncy4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgc2Vjb25kLXRvLWxhc3QgaW4gdGhlIHNwYW5uYWJsZSBzdGFjaywgaWYgYXZhaWxhYmxlLCB0byBwb2ludAogIC8vLyB0byB0aGUgdXNlLCByYXRoZXIgdGhhbiB0aGUgZGVjbGFyYXRpb24sIG9mIGEgY29uc3RydWN0b3Igb3IgZmllbGQuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZQogIC8vLwogIC8vLyAgICBjb25zdCBmb28gPSBjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZm9vIiwgZGVmYXVsdDogMCk7CiAgLy8vCiAgLy8vIHdpbGwgcG9pbnQgdG8gYGZvb2AgaW5zdGVhZCBvZiB0aGUgZGVjbGFyYXRpb24gb2YgYGJvb2wuZnJvbUVudmlyb25tZW50YC4KICBTcGFubmFibGUgZ2V0IF9zcGFubmFibGUgPT4gX3NwYW5uYWJsZVN0YWNrLnRhaWwuaXNFbXB0eQogICAgICA/IF9zcGFubmFibGVTdGFjay5oZWFkCiAgICAgIDogX3NwYW5uYWJsZVN0YWNrLnRhaWwuaGVhZDsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZUZpZWxkKEZpZWxkRW50aXR5IGZpZWxkLCBDb25zdGFudFZhbHVlIGV2YWx1YXRlKCkpIHsKICAgIGlmIChfY3VycmVudGx5RXZhbHVhdGVkRmllbGRzLmFkZChmaWVsZCkpIHsKICAgICAgX3NwYW5uYWJsZVN0YWNrID0gX3NwYW5uYWJsZVN0YWNrLnByZXBlbmQoZmllbGQpOwogICAgICBDb25zdGFudFZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKCk7CiAgICAgIF9jdXJyZW50bHlFdmFsdWF0ZWRGaWVsZHMucmVtb3ZlKGZpZWxkKTsKICAgICAgX3NwYW5uYWJsZVN0YWNrID0gX3NwYW5uYWJsZVN0YWNrLnRhaWw7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBpZiAoY29uc3RhbnRSZXF1aXJlZCkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBmaWVsZCwgTWVzc2FnZUtpbmQuQ1lDTElDX0NPTVBJTEVfVElNRV9DT05TVEFOVFMpOwogICAgfQogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlQ29uc3RydWN0b3IoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IsCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZSgpKSB7CiAgICBfc3Bhbm5hYmxlU3RhY2sgPSBfc3Bhbm5hYmxlU3RhY2sucHJlcGVuZChjb25zdHJ1Y3Rvcik7CiAgICB2YXIgb2xkID0gZW5jbG9zaW5nQ29uc3RydWN0ZWRUeXBlOwogICAgZW5jbG9zaW5nQ29uc3RydWN0ZWRUeXBlID0gdHlwZTsKICAgIENvbnN0YW50VmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoKTsKICAgIC8vIEFsbCBjb25zdCBzZXQgbGl0ZXJhbHMgaGF2ZSBhcyBhbiBpbW1lZGlhdGUgY2hpbGQgYSBjb25zdCBtYXAuIFRoZSBtYXAKICAgIC8vIGV2YWx1YXRlIG1ldGhvZCBjYWxscyBldmFsdWF0ZU1hcEJvZHkgYW5kIHJlc2V0IHRoaXMgZmxhZyBpbW1lZGlhdGVseS4KICAgIC8vIEJlY2F1c2UgdGhlcmUgYXJlIG5vIG90aGVyIGNoaWxkcmVuLCB0aGUgZmxhZyBpcyBrZXB0IGZhbHNlLgogICAgZW5jbG9zaW5nQ29uc3RydWN0ZWRUeXBlID0gb2xkOwogICAgX3NwYW5uYWJsZVN0YWNrID0gX3NwYW5uYWJsZVN0YWNrLnRhaWw7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZU1hcEJvZHkoQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZSgpKSB7CiAgICByZXR1cm4gZXZhbHVhdGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0RXJyb3IoCiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uLCBNZXNzYWdlS2luZCBraW5kLCBNYXAgYXJndW1lbnRzKSB7CiAgICBpZiAoY29uc3RhbnRSZXF1aXJlZCkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgW0NvbnN0YW50RXhwcmVzc2lvbl0gaGF2ZSBhIGxvY2F0aW9uPwogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoX3NwYW5uYWJsZSwga2luZCwgYXJndW1lbnRzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0V2FybmluZygKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kIGtpbmQsIE1hcCBhcmd1bWVudHMpIHsKICAgIGlmIChjb25zdGFudFJlcXVpcmVkKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydFdhcm5pbmdNZXNzYWdlKF9zcGFubmFibGUsIGtpbmQsIGFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlSW5Db250ZXh0KERhcnRUeXBlIHR5cGUpIHsKICAgIC8vIFJ1bm5pbmcgZXhhbXBsZSBmb3IgY29tbWVudHM6CiAgICAvLwogICAgLy8gICAgIGNsYXNzIEE8VD4gewogICAgLy8gICAgICAgZmluYWwgVCB0OwogICAgLy8gICAgICAgY29uc3QgQShkeW5hbWljIHQpIDogdGhpcy50ID0gdDsgLy8gaW1wbGljaXRseSBgdCBhcyBBLlRgCiAgICAvLyAgICAgfQogICAgLy8gICAgIGNsYXNzIEI8Uz4gZXh0ZW5kcyBBPFM+IHsKICAgIC8vICAgICAgIGNvbnN0IEIoZHluYW1pYyBzKSA6IHN1cGVyKHMpOwogICAgLy8gICAgIH0KICAgIC8vICAgICBtYWluKCkgPT4gY29uc3QgQjxudW0+KDApOwogICAgLy8KICAgIC8vIFdlIHZpc2l0IGB0IGFzIEEuVGAgd2hpbGUgZXZhbHVhdGluZyBgY29uc3QgQjxudW0+KDApYC4KCiAgICAvLyBUaGUgYGFzYCB0eXBlIGlzIGBBLlRgLgogICAgRGFydFR5cGUgdHlwZUluQ29udGV4dCA9IHR5cGU7CgogICAgLy8gVGhlIGVuY2xvc2luZyB0eXBlIGlzIGBCPG51bT5gLgogICAgRGFydFR5cGUgZW5jbG9zaW5nVHlwZSA9IGVuY2xvc2luZ0NvbnN0cnVjdGVkVHlwZTsKICAgIGlmIChlbmNsb3NpbmdUeXBlICE9IG51bGwpIHsKICAgICAgQ2xhc3NFbnRpdHkgY29udGV4dENsYXNzOwogICAgICB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgewogICAgICAgIGlmICh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgICAgICAvLyBXZSBmaW5kIGBBYCBmcm9tIGBBLlRgLiBTaW5jZSB3ZSBkb24ndCBoYXZlIG5lc3RlZCBjbGFzc2VzLCBjbGFzcwogICAgICAgICAgLy8gYmFzZWQgdHlwZSB2YXJpYWJsZXMgY2FuIG9ubHkgY29tZSBmcm9tIHRoZSBzYW1lIGNsYXNzLgogICAgICAgICAgY29udGV4dENsYXNzID0gdHlwZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAoY29udGV4dENsYXNzICE9IG51bGwpIHsKICAgICAgICAvLyBUaGUgZW5jbG9zaW5nIHR5cGUgYEI8bnVtPmAgYXMgYW4gaW5zdGFuY2Ugb2YgYEFgIGlzIGBBPG51bT5gLgogICAgICAgIGVuY2xvc2luZ1R5cGUgPSB0eXBlcy5hc0luc3RhbmNlT2YoZW5jbG9zaW5nVHlwZSwgY29udGV4dENsYXNzKTsKICAgICAgfQogICAgICAvLyBgQS5UYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZW5jbG9zaW5nIHR5cGUgYEE8bnVtPmAgaXMgYG51bWAuCiAgICAgIHR5cGVJbkNvbnRleHQgPSBlbmNsb3NpbmdUeXBlICE9IG51bGwKICAgICAgICAgID8gc3Vic3RCeUNvbnRleHQodHlwZUluQ29udGV4dCwgZW5jbG9zaW5nVHlwZSkKICAgICAgICAgIDogdHlwZUluQ29udGV4dDsKICAgIH0KICAgIHJldHVybiB0eXBlSW5Db250ZXh0OwogIH0KfQoKLy8vIFRoZSBub3JtYWxpemVkIGFyZ3VtZW50cyBwYXNzZWQgdG8gYSBjb25zdCBjb25zdHJ1Y3RvciBjb21wdXRlZCBmcm9tIHRoZQovLy8gYWN0dWFsIFthcmd1bWVudHNdIGFuZCB0aGUgW2RlZmF1bHRWYWx1ZXNdIG9mIHRoZSBjYWxsZWQgY29uc3RydXJjdG9yLgpjbGFzcyBOb3JtYWxpemVkQXJndW1lbnRzIHsKICBmaW5hbCBNYXA8ZHluYW1pYyAvKmludHxTdHJpbmcqLywgQ29uc3RhbnRFeHByZXNzaW9uPiBkZWZhdWx0VmFsdWVzOwogIGZpbmFsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKICBmaW5hbCBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gYXJndW1lbnRzOwoKICBOb3JtYWxpemVkQXJndW1lbnRzKHRoaXMuZGVmYXVsdFZhbHVlcywgdGhpcy5jYWxsU3RydWN0dXJlLCB0aGlzLmFyZ3VtZW50cyk7CgogIC8vLyBSZXR1cm5zIHRoZSBub3JtYWxpemVkIG5hbWVkIGFyZ3VtZW50IFtuYW1lXS4KICBDb25zdGFudEV4cHJlc3Npb24gZ2V0TmFtZWRBcmd1bWVudChTdHJpbmcgbmFtZSkgewogICAgaW50IGluZGV4ID0gY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cy5pbmRleE9mKG5hbWUpOwogICAgaWYgKGluZGV4ID09IC0xKSB7CiAgICAgIC8vIFRoZSBuYW1lZCBhcmd1bWVudCBpcyBub3QgcHJvdmlkZWQuCiAgICAgIGFzc2VydCgKICAgICAgICAgIGRlZmF1bHRWYWx1ZXNbbmFtZV0gIT0gbnVsbCwKICAgICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgIk5vIGRlZmF1bHQgdmFsdWUgZm9yIG5hbWVkIGFyZ3VtZW50ICckbmFtZScgaW4gJHRoaXMuIikpOwogICAgICByZXR1cm4gZGVmYXVsdFZhbHVlc1tuYW1lXTsKICAgIH0KICAgIENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSA9CiAgICAgICAgYXJndW1lbnRzW2luZGV4ICsgY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRDb3VudF07CiAgICBhc3NlcnQoCiAgICAgICAgdmFsdWUgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiTm8gdmFsdWUgZm9yIG5hbWVkIGFyZ3VtZW50ICckbmFtZScgaW4gJHRoaXMuIikpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgW2luZGV4XXRoIHBvc2l0aW9uYWwgYXJndW1lbnQuCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldFBvc2l0aW9uYWxBcmd1bWVudChpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA+PSBjYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50KSB7CiAgICAgIC8vIFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIG5vdCBwcm92aWRlZC4KICAgICAgYXNzZXJ0KAogICAgICAgICAgZGVmYXVsdFZhbHVlc1tpbmRleF0gIT0gbnVsbCwKICAgICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgIk5vIGRlZmF1bHQgdmFsdWUgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQgJGluZGV4IGluICR0aGlzLiIpKTsKICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXNbaW5kZXhdOwogICAgfQogICAgQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlID0gYXJndW1lbnRzW2luZGV4XTsKICAgIGFzc2VydCgKICAgICAgICB2YWx1ZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICJObyB2YWx1ZSBmb3IgcG9zaXRpb25hbCBhcmd1bWVudCAkaW5kZXggaW4gJHRoaXMuIikpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ05vcm1hbGl6ZWRBcmd1bWVudHNbJyk7CiAgICBzYi53cml0ZSgnZGVmYXVsdFZhbHVlcz17Jyk7CiAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgIGRlZmF1bHRWYWx1ZXMuZm9yRWFjaCgodmFyIGtleSwgQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgfQogICAgICBpZiAoa2V5IGlzIFN0cmluZykgewogICAgICAgIHNiLndyaXRlKCciJyk7CiAgICAgICAgc2Iud3JpdGUoa2V5KTsKICAgICAgICBzYi53cml0ZSgnIicpOwogICAgICB9IGVsc2UgewogICAgICAgIHNiLndyaXRlKGtleSk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJzonKTsKICAgICAgc2Iud3JpdGUodmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICB9KTsKICAgIHNiLndyaXRlKCd9LGNhbGxTdHJ1Y3R1cmU9Jyk7CiAgICBzYi53cml0ZShjYWxsU3RydWN0dXJlKTsKICAgIHNiLndyaXRlKCcsYXJndW1lbnRzPVsnKTsKICAgIGFyZ3VtZW50cy5mb3JFYWNoKChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICB9CiAgICAgIHNiLndyaXRlKHZhbHVlLnRvU3RydWN0dXJlZFRleHQoKSk7CiAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgfSk7CiAgICBzYi53cml0ZSgnXV0nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQqBGABOTjwBJgFEARk2JCE9HBsWATonJQEXASguAUorAU4+AU5EAUYVLjABTC4bQAFHLAEWRwEURwFDNQE7AUwBKB0BMwZNUBcCAUw9DCpNHwFMOgQBDB8BIwFGBlBKBhMGRAZQOx0jAQxNMDgpLy4VBhwjPQYjBAEMQzY8KCUnTk5EJCwTBAEMPBcEAQwUSBxLQAYEAQwWSBxCBgQBDC0lBxgYRw0lLA0mBz8BHyMBJzchIDk7T0U3CgoiSkkIRyw5GwYaBAIBTUscRyUsAU8BNDU8Fy0OJy5JIgYfQgwXLD8SBAE8ODoyDiguTSMGMQwXLEMSBAEMFiomIR1AGBcIGxcXFw8XCBUqGQgiHR4zGBcIKhkIFBoEAgEucGFja2FnZTpjb21waWxlci9zcmMvY29uc3RhbnRzL2V2YWx1YXRpb24uZGFydEBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2ZvcndhcmRpbmdfbm9kZS5kYXJ0v+4vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCIKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgQ2xhc3MsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgTWVtYmVyLAogICAgICAgIE5hbWUsCiAgICAgICAgTmFtZWRFeHByZXNzaW9uLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFJldHVyblN0YXRlbWVudCwKICAgICAgICBTdXBlck1ldGhvZEludm9jYXRpb24sCiAgICAgICAgU3VwZXJQcm9wZXJ0eUdldCwKICAgICAgICBTdXBlclByb3BlcnR5U2V0LAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBWYXJpYWJsZUdldCwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHJhbnNmb3JtYXRpb25zL2ZsYWdzLmRhcnQnIHNob3cgVHJhbnNmb3JtZXJGbGFnOwoKaW1wb3J0ICJwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCIgc2hvdyBTdWJzdGl0dXRpb247CgppbXBvcnQgIi4uL3Byb2JsZW1zLmRhcnQiIHNob3cgdW5oYW5kbGVkOwoKaW1wb3J0ICIuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVyZW5jZV9lbmdpbmUuZGFydCIKICAgIHNob3cgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5LCBWYXJpYW5jZTsKCmltcG9ydCAiLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcnJlci5kYXJ0IiBzaG93IGdldE5hbWVkRm9ybWFsOwoKaW1wb3J0ICJrZXJuZWxfYnVpbGRlci5kYXJ0IgogICAgc2hvdyBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIsIEJ1aWxkZXIsIERlbGF5ZWRNZW1iZXIsIENsYXNzQnVpbGRlcjsKCmNsYXNzIEZvcndhcmRpbmdOb2RlIHsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5OwoKICBmaW5hbCBDbGFzc0J1aWxkZXIgcGFyZW50OwoKICBmaW5hbCBCdWlsZGVyIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0OwoKICBmaW5hbCBQcm9jZWR1cmVLaW5kIGtpbmQ7CgogIC8vLyBBIGxpc3QgY29udGFpbmluZyB0aGUgZGlyZWN0bHkgaW1wbGVtZW50ZWQgYW5kIGRpcmVjdGx5IGluaGVyaXRlZAogIC8vLyBwcm9jZWR1cmVzIG9mIHRoZSBjbGFzcyBpbiBxdWVzdGlvbi4KICBmaW5hbCBMaXN0PEJ1aWxkZXI+IF9jYW5kaWRhdGVzOwoKICBGb3J3YXJkaW5nTm9kZSh0aGlzLmhpZXJhcmNoeSwgdGhpcy5wYXJlbnQsCiAgICAgIHRoaXMuY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQsIHRoaXMuX2NhbmRpZGF0ZXMsIHRoaXMua2luZCk7CgogIE5hbWUgZ2V0IG5hbWUgPT4gY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQudGFyZ2V0Lm5hbWU7CgogIENsYXNzIGdldCBlbmNsb3NpbmdDbGFzcyA9PiBwYXJlbnQuY2xzOwoKICAvLy8gRmluaXNoZXMgaGFuZGxpbmcgb2YgdGhpcyBub2RlIGJ5IHByb3BhZ2F0aW5nIGNvdmFyaWFuY2UgYW5kIGNyZWF0aW5nCiAgLy8vIGZvcndhcmRpbmcgc3R1YnMgaWYgbmVjZXNzYXJ5LgogIE1lbWJlciBmaW5hbGl6ZSgpID0+IF9jb21wdXRlQ292YXJpYW5jZUZpeGVzKCk7CgogIC8vLyBUYWcgdGhlIHBhcmFtZXRlcnMgb2YgW2ludGVyZmFjZU1lbWJlcl0gdGhhdCBuZWVkIHR5cGUgY2hlY2tzCiAgLy8vCiAgLy8vIFBhcmFtZXRlcnMgY2FuIG5lZWQgdHlwZSBjaGVja3MgZm9yIGNhbGxzIGNvbWluZyBmcm9tIHN0YXRpY2FsbHkgdHlwZWQKICAvLy8gY2FsbCBzaXRlcywgZHVlIHRvIGNvdmFyaWFudCBnZW5lcmljcyBhbmQgb3ZlcnJpZGVzIHdpdGggZXhwbGljaXQKICAvLy8gYGNvdmFyaWFudGAgcGFyYW1ldGVycy4KICAvLy8KICAvLy8gVGFnIHBhcmFtZXRlcnMgb2YgW2ludGVyZmFjZU1lbWJlcl0gdGhhdCBuZWVkIHN1Y2ggY2hlY2tzIHdoZW4gdGhlIG1lbWJlcgogIC8vLyBvY2N1cnMgaW4gW2VuY2xvc2luZ0NsYXNzXSdzIGludGVyZmFjZS4gIElmIHBhcmFtZXRlcnMgbmVlZCBjaGVja3MgYnV0CiAgLy8vIHRoZXkgd291bGQgbm90IGJlIGNoZWNrZWQgaW4gYW4gaW5oZXJpdGVkIGltcGxlbWVudGF0aW9uLCBhIGZvcndhcmRpbmcKICAvLy8gc3R1YiBpcyBpbnRyb2R1Y2VkIGFzIGEgcGxhY2UgdG8gcHV0IHRoZSBjaGVja3MuCiAgTWVtYmVyIF9jb21wdXRlQ292YXJpYW5jZUZpeGVzKCkgewogICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciA9IGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0LnRhcmdldDsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPQogICAgICAgIF9zdWJzdGl0dXRpb25Gb3IoaW50ZXJmYWNlTWVtYmVyLCBlbmNsb3NpbmdDbGFzcyk7CiAgICAvLyBXZSBhbHdheXMgY3JlYXRlIGEgZm9yd2FyZGluZyBzdHViIHdoZW4gd2UndmUgaW5oZXJpdGVkIGEgbWVtYmVyIGZyb20gYW4KICAgIC8vIGludGVyZmFjZSBvdGhlciB0aGFuIHRoZSBmaXJzdCBvdmVycmlkZSBjYW5kaWRhdGUuICBUaGlzIGlzIHRvIHdvcmsKICAgIC8vIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgS2VybmVsIHR5cGUgY2hlY2tlciB3aGVyZSBpdCBjaG9vc2VzIHRoZSBmaXJzdAogICAgLy8gb3ZlcnJpZGUgY2FuZGlkYXRlLgogICAgLy8KICAgIC8vIFRPRE8oa21pbGxpa2luKTogRml4IHRoZSBLZXJuZWwgdHlwZSBjaGVja2VyIGFuZCBzdG9wIGNyZWF0aW5nIHRoZXNlCiAgICAvLyBleHRyYSBzdHVicy4KICAgIE1lbWJlciBzdHViID0gaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IGVuY2xvc2luZ0NsYXNzIHx8CiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlciA9PSBnZXRDYW5kaWRhdGVBdCgwKQogICAgICAgID8gaW50ZXJmYWNlTWVtYmVyCiAgICAgICAgOiBfY3JlYXRlRm9yd2FyZGluZ1N0dWIoc3Vic3RpdHV0aW9uLCBpbnRlcmZhY2VNZW1iZXIpOwoKICAgIEZ1bmN0aW9uTm9kZSBpbnRlcmZhY2VGdW5jdGlvbiA9IGludGVyZmFjZU1lbWJlci5mdW5jdGlvbjsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gaW50ZXJmYWNlUG9zaXRpb25hbFBhcmFtZXRlcnMgPQogICAgICAgIGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJzKGludGVyZmFjZU1lbWJlcik7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGludGVyZmFjZU5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24/Lm5hbWVkUGFyYW1ldGVycyA/PyBbXTsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gaW50ZXJmYWNlVHlwZVBhcmFtZXRlcnMgPQogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uPy50eXBlUGFyYW1ldGVycyA/PyBbXTsKCiAgICB2b2lkIGNyZWF0ZVN0dWJJZk5lZWRlZCgpIHsKICAgICAgaWYgKHN0dWIgIT0gaW50ZXJmYWNlTWVtYmVyKSByZXR1cm47CiAgICAgIGlmIChpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MgPT0gZW5jbG9zaW5nQ2xhc3MpIHJldHVybjsKICAgICAgc3R1YiA9IF9jcmVhdGVGb3J3YXJkaW5nU3R1YihzdWJzdGl0dXRpb24sIGludGVyZmFjZU1lbWJlcik7CiAgICB9CgogICAgYm9vbCBpc0ltcGxDcmVhdGVkID0gZmFsc2U7CiAgICB2b2lkIGNyZWF0ZUltcGxJZk5lZWRlZCgpIHsKICAgICAgaWYgKGlzSW1wbENyZWF0ZWQpIHJldHVybjsKICAgICAgY3JlYXRlU3R1YklmTmVlZGVkKCk7CiAgICAgIF9jcmVhdGVGb3J3YXJkaW5nSW1wbElmTmVlZGVkKHN0dWIuZnVuY3Rpb24pOwogICAgICBpc0ltcGxDcmVhdGVkID0gdHJ1ZTsKICAgIH0KCiAgICBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkgbmVlZHNDaGVja1Zpc2l0b3IgPQogICAgICAgIGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkKICAgICAgICAgICAgPyBudWxsCiAgICAgICAgICAgIC8vIFRPRE8oYWhlKTogSXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBjYWNoZSB0aGlzIG9iamVjdC4KICAgICAgICAgICAgOiBuZXcgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5KAogICAgICAgICAgICAgICAgZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgICAvLyBXZSBhcmUgY2hlY2tpbmcgdGhlIHBhcmFtZXRlciB0eXBlcyBhbmQgdGhlc2UgYXJlIGluIGEKICAgICAgICAgICAgICAgIC8vIGNvbnRyYXZhcmlhbnQgcG9zaXRpb24uCiAgICAgICAgICAgICAgICBpbml0aWFsVmFyaWFuY2U6IFZhcmlhbmNlLmNvbnRyYXZhcmlhbnQpOwogICAgYm9vbCBuZWVkc0NoZWNrKERhcnRUeXBlIHR5cGUpID0+IG5lZWRzQ2hlY2tWaXNpdG9yID09IG51bGwKICAgICAgICA/IGZhbHNlCiAgICAgICAgOiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUodHlwZSkuYWNjZXB0KG5lZWRzQ2hlY2tWaXNpdG9yKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJmYWNlUG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPSBpbnRlcmZhY2VQb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgYm9vbCBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0KICAgICAgICAgIHBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsIHx8IG5lZWRzQ2hlY2socGFyYW1ldGVyLnR5cGUpOwogICAgICBib29sIGlzQ292YXJpYW50ID0gcGFyYW1ldGVyLmlzQ292YXJpYW50OwogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHN1cGVyUGFyYW1ldGVyID0gcGFyYW1ldGVyOwogICAgICBmb3IgKGludCBqID0gMDsgaiA8IF9jYW5kaWRhdGVzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgTWVtYmVyIG90aGVyTWVtYmVyID0gZ2V0Q2FuZGlkYXRlQXQoaik7CiAgICAgICAgaWYgKG90aGVyTWVtYmVyIGlzIEZvcndhcmRpbmdOb2RlKSBjb250aW51ZTsKICAgICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG90aGVyUG9zaXRpb25hbFBhcmFtZXRlcnMgPQogICAgICAgICAgICBnZXRQb3NpdGlvbmFsUGFyYW1ldGVycyhvdGhlck1lbWJlcik7CiAgICAgICAgaWYgKG90aGVyUG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoIDw9IGkpIGNvbnRpbnVlOwogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gb3RoZXJQYXJhbWV0ZXIgPSBvdGhlclBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAgIGlmIChqID09IDApIHN1cGVyUGFyYW1ldGVyID0gb3RoZXJQYXJhbWV0ZXI7CiAgICAgICAgaWYgKGlkZW50aWNhbChvdGhlck1lbWJlciwgaW50ZXJmYWNlTWVtYmVyKSkgY29udGludWU7CiAgICAgICAgaWYgKG90aGVyUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAob3RoZXJQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHsKICAgICAgICAgIGlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBpZiAoIXN1cGVyUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGNyZWF0ZUltcGxJZk5lZWRlZCgpOwogICAgICAgIH0KICAgICAgICBpZiAoIXBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgICAgIHN0dWIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0uaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc0NvdmFyaWFudCkgewogICAgICAgIGlmICghc3VwZXJQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHsKICAgICAgICAgIGNyZWF0ZUltcGxJZk5lZWRlZCgpOwogICAgICAgIH0KICAgICAgICBpZiAoIXBhcmFtZXRlci5pc0NvdmFyaWFudCkgewogICAgICAgICAgY3JlYXRlU3R1YklmTmVlZGVkKCk7CiAgICAgICAgICBzdHViLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLmlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyID0gaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzW2ldOwogICAgICBib29sIGlzR2VuZXJpY0NvdmFyaWFudEltcGwgPQogICAgICAgICAgcGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgfHwgbmVlZHNDaGVjayhwYXJhbWV0ZXIudHlwZSk7CiAgICAgIGJvb2wgaXNDb3ZhcmlhbnQgPSBwYXJhbWV0ZXIuaXNDb3ZhcmlhbnQ7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gc3VwZXJQYXJhbWV0ZXIgPSBwYXJhbWV0ZXI7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgX2NhbmRpZGF0ZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBNZW1iZXIgb3RoZXJNZW1iZXIgPSBnZXRDYW5kaWRhdGVBdChqKTsKICAgICAgICBpZiAob3RoZXJNZW1iZXIgaXMgRm9yd2FyZGluZ05vZGUpIGNvbnRpbnVlOwogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gb3RoZXJQYXJhbWV0ZXIgPQogICAgICAgICAgICBnZXROYW1lZEZvcm1hbChvdGhlck1lbWJlci5mdW5jdGlvbiwgcGFyYW1ldGVyLm5hbWUpOwogICAgICAgIGlmIChvdGhlclBhcmFtZXRlciA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICBpZiAoaiA9PSAwKSBzdXBlclBhcmFtZXRlciA9IG90aGVyUGFyYW1ldGVyOwogICAgICAgIGlmIChpZGVudGljYWwob3RoZXJNZW1iZXIsIGludGVyZmFjZU1lbWJlcikpIGNvbnRpbnVlOwogICAgICAgIGlmIChvdGhlclBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgICBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKG90aGVyUGFyYW1ldGVyLmlzQ292YXJpYW50KSB7CiAgICAgICAgICBpc0NvdmFyaWFudCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgaWYgKCFzdXBlclBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgICBjcmVhdGVJbXBsSWZOZWVkZWQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFwYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgY3JlYXRlU3R1YklmTmVlZGVkKCk7CiAgICAgICAgICBzdHViLmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVyc1tpXS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGlzQ292YXJpYW50KSB7CiAgICAgICAgaWYgKCFzdXBlclBhcmFtZXRlci5pc0NvdmFyaWFudCkgewogICAgICAgICAgY3JlYXRlSW1wbElmTmVlZGVkKCk7CiAgICAgICAgfQogICAgICAgIGlmICghcGFyYW1ldGVyLmlzQ292YXJpYW50KSB7CiAgICAgICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgICAgIHN0dWIuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzW2ldLmlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJmYWNlVHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gaW50ZXJmYWNlVHlwZVBhcmFtZXRlcnNbaV07CiAgICAgIGJvb2wgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHR5cGVQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCB8fAogICAgICAgICAgbmVlZHNDaGVjayh0eXBlUGFyYW1ldGVyLmJvdW5kKTsKICAgICAgVHlwZVBhcmFtZXRlciBzdXBlclR5cGVQYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVyOwogICAgICBmb3IgKGludCBqID0gMDsgaiA8IF9jYW5kaWRhdGVzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgTWVtYmVyIG90aGVyTWVtYmVyID0gZ2V0Q2FuZGlkYXRlQXQoaik7CiAgICAgICAgaWYgKG90aGVyTWVtYmVyIGlzIEZvcndhcmRpbmdOb2RlKSBjb250aW51ZTsKICAgICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IG90aGVyVHlwZVBhcmFtZXRlcnMgPQogICAgICAgICAgICBvdGhlck1lbWJlci5mdW5jdGlvbi50eXBlUGFyYW1ldGVyczsKICAgICAgICBpZiAob3RoZXJUeXBlUGFyYW1ldGVycy5sZW5ndGggPD0gaSkgY29udGludWU7CiAgICAgICAgVHlwZVBhcmFtZXRlciBvdGhlclR5cGVQYXJhbWV0ZXIgPSBvdGhlclR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIGlmIChqID09IDApIHN1cGVyVHlwZVBhcmFtZXRlciA9IG90aGVyVHlwZVBhcmFtZXRlcjsKICAgICAgICBpZiAoaWRlbnRpY2FsKG90aGVyTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIpKSBjb250aW51ZTsKICAgICAgICBpZiAob3RoZXJUeXBlUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgIGlmICghc3VwZXJUeXBlUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGNyZWF0ZUltcGxJZk5lZWRlZCgpOwogICAgICAgIH0KICAgICAgICBpZiAoIXR5cGVQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgY3JlYXRlU3R1YklmTmVlZGVkKCk7CiAgICAgICAgICBzdHViLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzW2ldLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0dWI7CiAgfQoKICB2b2lkIF9jcmVhdGVGb3J3YXJkaW5nSW1wbElmTmVlZGVkKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbikgewogICAgaWYgKGZ1bmN0aW9uLmJvZHkgIT0gbnVsbCkgewogICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGFuIGltcGxlbWVudGF0aW9uOyBub3RoaW5nIGZ1cnRoZXIgbmVlZHMgdG8gYmUgZG9uZS4KICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gRmluZCB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gaW4gdGhlIHN1cGVyY2xhc3M7IHRoaXMgaXMgd2hhdCB3ZSBuZWVkCiAgICAvLyB0byBmb3J3YXJkIHRvLiAgSWYgd2UgY2FuJ3QgZmluZCBvbmUsIHRoZW4gdGhlIG1ldGhvZCBpcyBmdWxseSBhYnN0cmFjdAogICAgLy8gYW5kIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCiAgICBDbGFzcyBzdXBlcmNsYXNzID0gZW5jbG9zaW5nQ2xhc3Muc3VwZXJjbGFzczsKICAgIGlmIChzdXBlcmNsYXNzID09IG51bGwpIHJldHVybjsKICAgIFByb2NlZHVyZSBwcm9jZWR1cmUgPSBmdW5jdGlvbi5wYXJlbnQ7CiAgICBNZW1iZXIgc3VwZXJUYXJnZXQgPSBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXRLZXJuZWwoCiAgICAgICAgc3VwZXJjbGFzcywgcHJvY2VkdXJlLm5hbWUsIGtpbmQgPT0gUHJvY2VkdXJlS2luZC5TZXR0ZXIpOwogICAgaWYgKHN1cGVyVGFyZ2V0ID09IG51bGwpIHJldHVybjsKICAgIGlmIChzdXBlclRhcmdldCBpcyBQcm9jZWR1cmUgJiYgc3VwZXJUYXJnZXQuaXNGb3J3YXJkaW5nU3R1YikgewogICAgICBzdXBlclRhcmdldCA9IF9nZXRGb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0KHN1cGVyVGFyZ2V0KTsKICAgIH0KICAgIHByb2NlZHVyZS5pc0Fic3RyYWN0ID0gZmFsc2U7CiAgICBpZiAoIXByb2NlZHVyZS5pc0ZvcndhcmRpbmdTdHViKSB7CiAgICAgIC8vIFRoaXMgcHJvY2VkdXJlIGV4aXN0cyBhYnN0cmFjdGx5IGluIHRoZSBzb3VyY2UgY29kZTsgd2UgbmVlZCB0byBtYWtlIGl0CiAgICAgIC8vIGNvbmNyZXRlIGFuZCBnaXZlIGl0IGEgYm9keSB0aGF0IGlzIGEgZm9yd2FyZGluZyBzdHViLiAgVGhpcyBzaXR1YXRpb24KICAgICAgLy8gaXMgY2FsbGVkIGEgImZvcndhcmRpbmcgc2VtaS1zdHViIi4KICAgICAgcHJvY2VkdXJlLmlzRm9yd2FyZGluZ1N0dWIgPSB0cnVlOwogICAgICBwcm9jZWR1cmUuaXNGb3J3YXJkaW5nU2VtaVN0dWIgPSB0cnVlOwogICAgfQogICAgTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsQXJndW1lbnRzID0gZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMKICAgICAgICAubWFwPEV4cHJlc3Npb24+KChwYXJhbWV0ZXIpID0+IG5ldyBWYXJpYWJsZUdldChwYXJhbWV0ZXIpKQogICAgICAgIC50b0xpc3QoKTsKICAgIExpc3Q8TmFtZWRFeHByZXNzaW9uPiBuYW1lZEFyZ3VtZW50cyA9IGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycwogICAgICAgIC5tYXAoKHBhcmFtZXRlcikgPT4KICAgICAgICAgICAgbmV3IE5hbWVkRXhwcmVzc2lvbihwYXJhbWV0ZXIubmFtZSwgbmV3IFZhcmlhYmxlR2V0KHBhcmFtZXRlcikpKQogICAgICAgIC50b0xpc3QoKTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBmdW5jdGlvbi50eXBlUGFyYW1ldGVycwogICAgICAgIC5tYXA8RGFydFR5cGU+KCh0eXBlUGFyYW1ldGVyKSA9PiBuZXcgVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpCiAgICAgICAgLnRvTGlzdCgpOwogICAgQXJndW1lbnRzIGFyZ3VtZW50cyA9IG5ldyBBcmd1bWVudHMocG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICB0eXBlczogdHlwZUFyZ3VtZW50cywgbmFtZWQ6IG5hbWVkQXJndW1lbnRzKTsKICAgIEV4cHJlc3Npb24gc3VwZXJDYWxsOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5NZXRob2Q6CiAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5PcGVyYXRvcjoKICAgICAgICBzdXBlckNhbGwgPSBuZXcgU3VwZXJNZXRob2RJbnZvY2F0aW9uKG5hbWUsIGFyZ3VtZW50cywgc3VwZXJUYXJnZXQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFByb2NlZHVyZUtpbmQuR2V0dGVyOgogICAgICAgIHN1cGVyQ2FsbCA9IG5ldyBTdXBlclByb3BlcnR5R2V0KG5hbWUsIHN1cGVyVGFyZ2V0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLlNldHRlcjoKICAgICAgICBzdXBlckNhbGwgPQogICAgICAgICAgICBuZXcgU3VwZXJQcm9wZXJ0eVNldChuYW1lLCBwb3NpdGlvbmFsQXJndW1lbnRzWzBdLCBzdXBlclRhcmdldCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdW5oYW5kbGVkKCcka2luZCcsICdfY3JlYXRlRm9yd2FyZGluZ0ltcGxJZk5lZWRlZCcsIC0xLCBudWxsKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIGZ1bmN0aW9uLmJvZHkgPSBuZXcgUmV0dXJuU3RhdGVtZW50KHN1cGVyQ2FsbCkuLnBhcmVudCA9IGZ1bmN0aW9uOwogICAgcHJvY2VkdXJlLnRyYW5zZm9ybWVyRmxhZ3MgfD0gVHJhbnNmb3JtZXJGbGFnLnN1cGVyQ2FsbHM7CiAgICBwcm9jZWR1cmUuZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCA9IHN1cGVyVGFyZ2V0OwogIH0KCiAgLy8vIENyZWF0ZXMgYSBmb3J3YXJkaW5nIHN0dWIgYmFzZWQgb24gdGhlIGdpdmVuIFt0YXJnZXRdLgogIFByb2NlZHVyZSBfY3JlYXRlRm9yd2FyZGluZ1N0dWIoU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiwgTWVtYmVyIHRhcmdldCkgewogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBjb3B5UGFyYW1ldGVyKFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyKSB7CiAgICAgIHJldHVybiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihwYXJhbWV0ZXIubmFtZSwKICAgICAgICAgIHR5cGU6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShwYXJhbWV0ZXIudHlwZSksCiAgICAgICAgICBpc0NvdmFyaWFudDogcGFyYW1ldGVyLmlzQ292YXJpYW50KQogICAgICAgIC4uaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsOwogICAgfQoKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdGFyZ2V0VHlwZVBhcmFtZXRlcnMgPQogICAgICAgIHRhcmdldC5mdW5jdGlvbj8udHlwZVBhcmFtZXRlcnMgPz8gW107CiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzOwogICAgaWYgKHRhcmdldFR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgdHlwZVBhcmFtZXRlcnMgPQogICAgICAgICAgbmV3IExpc3Q8VHlwZVBhcmFtZXRlcj4uZmlsbGVkKHRhcmdldFR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgbnVsbCk7CiAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gYWRkaXRpb25hbFN1YnN0aXR1dGlvbiA9CiAgICAgICAgICA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFyZ2V0VHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBUeXBlUGFyYW1ldGVyIHRhcmdldFR5cGVQYXJhbWV0ZXIgPSB0YXJnZXRUeXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBuZXcgVHlwZVBhcmFtZXRlcigKICAgICAgICAgICAgdGFyZ2V0VHlwZVBhcmFtZXRlci5uYW1lLCBudWxsKQogICAgICAgICAgLi5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdGFyZ2V0VHlwZVBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsOwogICAgICAgIHR5cGVQYXJhbWV0ZXJzW2ldID0gdHlwZVBhcmFtZXRlcjsKICAgICAgICBhZGRpdGlvbmFsU3Vic3RpdHV0aW9uW3RhcmdldFR5cGVQYXJhbWV0ZXJdID0KICAgICAgICAgICAgbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIpOwogICAgICB9CiAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5jb21iaW5lKAogICAgICAgICAgc3Vic3RpdHV0aW9uLCBTdWJzdGl0dXRpb24uZnJvbU1hcChhZGRpdGlvbmFsU3Vic3RpdHV0aW9uKSk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICB0eXBlUGFyYW1ldGVyc1tpXS5ib3VuZCA9CiAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSh0YXJnZXRUeXBlUGFyYW1ldGVyc1tpXS5ib3VuZCk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMgPQogICAgICAgIGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJzKHRhcmdldCkubWFwKGNvcHlQYXJhbWV0ZXIpLnRvTGlzdCgpOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMgPQogICAgICAgIHRhcmdldC5mdW5jdGlvbj8ubmFtZWRQYXJhbWV0ZXJzPy5tYXAoY29weVBhcmFtZXRlcik/LnRvTGlzdCgpID8/IFtdOwogICAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uTm9kZShudWxsLAogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycywKICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogZ2V0UmVxdWlyZWRQYXJhbWV0ZXJDb3VudCh0YXJnZXQpLAogICAgICAgIHJldHVyblR5cGU6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShnZXRSZXR1cm5UeXBlKHRhcmdldCkpKTsKICAgIE1lbWJlciBmaW5hbFRhcmdldDsKICAgIGlmICh0YXJnZXQgaXMgUHJvY2VkdXJlICYmIHRhcmdldC5pc0ZvcndhcmRpbmdTdHViKSB7CiAgICAgIGZpbmFsVGFyZ2V0ID0gdGFyZ2V0LmZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0OwogICAgfSBlbHNlIHsKICAgICAgZmluYWxUYXJnZXQgPSB0YXJnZXQ7CiAgICB9CiAgICByZXR1cm4gbmV3IFByb2NlZHVyZShuYW1lLCBraW5kLCBmdW5jdGlvbiwKICAgICAgICBpc0Fic3RyYWN0OiB0cnVlLAogICAgICAgIGlzRm9yd2FyZGluZ1N0dWI6IHRydWUsCiAgICAgICAgZmlsZVVyaTogZW5jbG9zaW5nQ2xhc3MuZmlsZVVyaSwKICAgICAgICBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldDogZmluYWxUYXJnZXQpCiAgICAgIC4uc3RhcnRGaWxlT2Zmc2V0ID0gZW5jbG9zaW5nQ2xhc3MuZmlsZU9mZnNldAogICAgICAuLmZpbGVPZmZzZXQgPSBlbmNsb3NpbmdDbGFzcy5maWxlT2Zmc2V0CiAgICAgIC4ucGFyZW50ID0gZW5jbG9zaW5nQ2xhc3M7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW2lddGggZWxlbWVudCBvZiBbX2NhbmRpZGF0ZXNdLCBmaW5hbGl6aW5nIGl0IGlmIG5lY2Vzc2FyeS4KICBNZW1iZXIgZ2V0Q2FuZGlkYXRlQXQoaW50IGkpIHsKICAgIEJ1aWxkZXIgY2FuZGlkYXRlID0gX2NhbmRpZGF0ZXNbaV07CiAgICBhc3NlcnQoY2FuZGlkYXRlIGlzISBEZWxheWVkTWVtYmVyKTsKICAgIHJldHVybiBjYW5kaWRhdGUudGFyZ2V0OwogIH0KCiAgc3RhdGljIE1lbWJlciBfZ2V0Rm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldChQcm9jZWR1cmUgZm9yd2FyZGluZ1N0dWIpIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogd2hlbiBkYXJ0YnVnLmNvbS8zMTU2MiBpcyBmaXhlZCwgdGhpcyBzaG91bGQgYmVjb21lCiAgICAvLyBlYXNpZXIuCiAgICBSZXR1cm5TdGF0ZW1lbnQgYm9keSA9IGZvcndhcmRpbmdTdHViLmZ1bmN0aW9uLmJvZHk7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBib2R5LmV4cHJlc3Npb247CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBTdXBlck1ldGhvZEludm9jYXRpb24pIHsKICAgICAgcmV0dXJuIGV4cHJlc3Npb24uaW50ZXJmYWNlVGFyZ2V0OwogICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGlzIFN1cGVyUHJvcGVydHlTZXQpIHsKICAgICAgcmV0dXJuIGV4cHJlc3Npb24uaW50ZXJmYWNlVGFyZ2V0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgnJHtleHByZXNzaW9uLnJ1bnRpbWVUeXBlfScsCiAgICAgICAgICAnX2dldEZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQnLCAtMSwgbnVsbCk7CiAgICB9CiAgfQoKICBTdWJzdGl0dXRpb24gX3N1YnN0aXR1dGlvbkZvcihNZW1iZXIgY2FuZGlkYXRlLCBDbGFzcyBjbGFzc18pIHsKICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoaGllcmFyY2h5LmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgY2xhc3NfLnRoaXNUeXBlLCBjYW5kaWRhdGUuZW5jbG9zaW5nQ2xhc3MpKTsKICB9CgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gZ2V0UG9zaXRpb25hbFBhcmFtZXRlcnMoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBGaWVsZCkgewogICAgICBpZiAoa2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcikgewogICAgICAgIHJldHVybiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bCiAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbigiXyIsCiAgICAgICAgICAgICAgdHlwZTogbWVtYmVyLnR5cGUsIGlzQ292YXJpYW50OiBtZW1iZXIuaXNDb3ZhcmlhbnQpCiAgICAgICAgICAgIC4uaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IG1lbWJlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsCiAgICAgICAgXTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gPFZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBtZW1iZXIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICB9CiAgfQoKICBpbnQgZ2V0UmVxdWlyZWRQYXJhbWV0ZXJDb3VudChNZW1iZXIgbWVtYmVyKSB7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLkdldHRlcjoKICAgICAgICByZXR1cm4gMDsKICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLlNldHRlcjoKICAgICAgICByZXR1cm4gMTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbWVtYmVyLmZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBnZXRSZXR1cm5UeXBlKE1lbWJlciBtZW1iZXIpIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFByb2NlZHVyZUtpbmQuR2V0dGVyOgogICAgICAgIHJldHVybiBtZW1iZXIgaXMgRmllbGQgPyBtZW1iZXIudHlwZSA6IG1lbWJlci5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgICBjYXNlIFByb2NlZHVyZUtpbmQuU2V0dGVyOgogICAgICAgIHJldHVybiBjb25zdCBWb2lkVHlwZSgpOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBtZW1iZXIuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgIH0KICB9Cn0KgaYATk48ASEJEw8SFA8WEA4ZExcZHxoaFxsdFRIBSQE9ASoBNjkBQwEdRgEXKQEdAS8BHAFIKyMBLkgBPgEqAUwlMgFEBk1IHgZQTU03JUMgO1BLShsHTBRGMRpAAT8+MjkyMjEBICtEQwYBICAhHDQcBgE9LhNEOC9KKzpAEEdFSCRKMDY1MDU+Mj1LNT81KQoqHgoIJDYgCjEgTwoIGSsgCiYgRAoIBkBDJEowNjUwNS1CLjU/NSkKKh4KCCQ2IAoxIEoKCBkrIAomID8KCAY/QEwrODUwNTIxN0M9PzkpCggkOiAKNSBJCggGEQQBPiFPDgZQTykyJCs8QyVEQAYiJ1FQLSktBklEE0QcTRM7UBM9NhoUISNNDyE9DyEUTQ8PRw8GRz43BAE9Tkc1PS5FBgEvLygrF008Jz5FOSxRKzYyCCtHOCJICAY1RTBOMzQqKENJGDo6DRwGLxogKTQ0LyEEAU4hKCkdBAFKTA85LS8pMSkNNDYGBAFCTzUEAUUbKiYnQkULDygIDTMGBAExFCESIRIPNwYEASoUIUshIQ8rBgQCATdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2ZvcndhcmRpbmdfbm9kZS5kYXJ0NnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdHlwZXMuZGFydMAAahIvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS50eXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgTnVsbGFiaWxpdHksCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmVHlwZSwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlcjsKCmNsYXNzIFR5cGVzIHsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5OwoKICBUeXBlcyh0aGlzLmhpZXJhcmNoeSk7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgW3NdIGlzIGEgc3VidHlwZSBvZiBbdF0uCiAgYm9vbCBpc1N1YnR5cGVPZktlcm5lbChEYXJ0VHlwZSBzLCBEYXJ0VHlwZSB0KSB7CiAgICBpZiAocyBpcyBJbnZhbGlkVHlwZSkgewogICAgICAvLyBJbnZhbGlkVHlwZSBpcyBhIGJvdHRvbSB0eXBlLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmICh0IGlzIEludmFsaWRUeXBlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBpc1N1YnR5cGVPZktlcm5lbE51bGxhYmlsaXR5KHMsIHMubnVsbGFiaWxpdHksIHQsIHQubnVsbGFiaWxpdHkpOwogIH0KCiAgYm9vbCBpc1N1YnR5cGVPZktlcm5lbE51bGxhYmlsaXR5KAogICAgICBEYXJ0VHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIERhcnRUeXBlIHQsIHROdWxsYWJpbGl0eSkgewogICAgaWYgKHMgaXMgQm90dG9tVHlwZSkgewogICAgICByZXR1cm4gdHJ1ZTsgLy8gUnVsZSAzLgogICAgfQogICAgaWYgKHQgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgcmV0dXJuIHRydWU7IC8vIFJ1bGUgMi4KICAgIH0KICAgIGlmICh0IGlzIFZvaWRUeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOyAvLyBSdWxlIDIuCiAgICB9CiAgICBpZiAodCBpcyBCb3R0b21UeXBlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICh0IGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgQ2xhc3MgY2xzID0gdC5jbGFzc05vZGU7CiAgICAgIGlmIChjbHMgPT0gaGllcmFyY2h5Lm9iamVjdEtlcm5lbENsYXNzKSB7CiAgICAgICAgcmV0dXJuIHRydWU7IC8vIFJ1bGUgMi4KICAgICAgfQogICAgICBpZiAoY2xzID09IGhpZXJhcmNoeS5mdXR1cmVPcktlcm5lbENsYXNzKSB7CiAgICAgICAgY29uc3QgSXNGdXR1cmVPclN1YnR5cGVPZiByZWxhdGlvbiA9IGNvbnN0IElzRnV0dXJlT3JTdWJ0eXBlT2YoKTsKICAgICAgICBpZiAocyBpcyBEeW5hbWljVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRHluYW1pY1JlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBWb2lkVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVm9pZFJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gaGllcmFyY2h5LmZ1dHVyZU9yS2VybmVsQ2xhc3MKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzRnV0dXJlT3JSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5wcm9tb3RlZEJvdW5kID09IG51bGwKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IElzSW50ZXJmYWNlU3VidHlwZU9mIHJlbGF0aW9uID0gY29uc3QgSXNJbnRlcmZhY2VTdWJ0eXBlT2YoKTsKICAgICAgICBpZiAocyBpcyBEeW5hbWljVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRHluYW1pY1JlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBWb2lkVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVm9pZFJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gaGllcmFyY2h5LmZ1dHVyZU9yS2VybmVsQ2xhc3MKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzRnV0dXJlT3JSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5wcm9tb3RlZEJvdW5kID09IG51bGwKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHQgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIGNvbnN0IElzRnVuY3Rpb25TdWJ0eXBlT2YgcmVsYXRpb24gPSBjb25zdCBJc0Z1bmN0aW9uU3VidHlwZU9mKCk7CiAgICAgIGlmIChzIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRHluYW1pY1JlbGF0ZWQoCiAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIFZvaWRUeXBlKSB7CiAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVm9pZFJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIHJldHVybiBzLmNsYXNzTm9kZSA9PSBoaWVyYXJjaHkuZnV0dXJlT3JLZXJuZWxDbGFzcwogICAgICAgICAgICA/IHJlbGF0aW9uLmlzRnV0dXJlT3JSZWxhdGVkKHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgIHJldHVybiByZWxhdGlvbi5pc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgICByZXR1cm4gcy5wcm9tb3RlZEJvdW5kID09IG51bGwKICAgICAgICAgICAgPyByZWxhdGlvbi5pc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKAogICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZWRlZlR5cGUpIHsKICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHQgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgaWYgKHQucHJvbW90ZWRCb3VuZCA9PSBudWxsKSB7CiAgICAgICAgY29uc3QgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mIHJlbGF0aW9uID0KICAgICAgICAgICAgY29uc3QgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mKCk7CiAgICAgICAgaWYgKHMgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0R5bmFtaWNSZWxhdGVkKAogICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgVm9pZFR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc1ZvaWRSZWxhdGVkKHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgcmV0dXJuIHMuY2xhc3NOb2RlID09IGhpZXJhcmNoeS5mdXR1cmVPcktlcm5lbENsYXNzCiAgICAgICAgICAgICAgPyByZWxhdGlvbi5pc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgICAgOiByZWxhdGlvbi5pc0ludGVyZmFjZVJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNGdW5jdGlvblJlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICAgICAgcmV0dXJuIHMucHJvbW90ZWRCb3VuZCA9PSBudWxsCiAgICAgICAgICAgICAgPyByZWxhdGlvbi5pc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlZGVmVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVHlwZWRlZlJlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBJc0ludGVyc2VjdGlvblN1YnR5cGVPZiByZWxhdGlvbiA9CiAgICAgICAgICAgIGNvbnN0IElzSW50ZXJzZWN0aW9uU3VidHlwZU9mKCk7CiAgICAgICAgaWYgKHMgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0R5bmFtaWNSZWxhdGVkKAogICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgVm9pZFR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc1ZvaWRSZWxhdGVkKHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgcmV0dXJuIHMuY2xhc3NOb2RlID09IGhpZXJhcmNoeS5mdXR1cmVPcktlcm5lbENsYXNzCiAgICAgICAgICAgICAgPyByZWxhdGlvbi5pc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgICAgOiByZWxhdGlvbi5pc0ludGVyZmFjZVJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNGdW5jdGlvblJlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICAgICAgcmV0dXJuIHMucHJvbW90ZWRCb3VuZCA9PSBudWxsCiAgICAgICAgICAgICAgPyByZWxhdGlvbi5pc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlZGVmVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVHlwZWRlZlJlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0IGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgIGNvbnN0IElzVHlwZWRlZlN1YnR5cGVPZiByZWxhdGlvbiA9IGNvbnN0IElzVHlwZWRlZlN1YnR5cGVPZigpOwogICAgICBpZiAocyBpcyBEeW5hbWljVHlwZSkgewogICAgICAgIHJldHVybiByZWxhdGlvbi5pc0R5bmFtaWNSZWxhdGVkKAogICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgIH0gZWxzZSBpZiAocyBpcyBWb2lkVHlwZSkgewogICAgICAgIHJldHVybiByZWxhdGlvbi5pc1ZvaWRSZWxhdGVkKHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gaGllcmFyY2h5LmZ1dHVyZU9yS2VybmVsQ2xhc3MKICAgICAgICAgICAgPyByZWxhdGlvbi5pc0Z1dHVyZU9yUmVsYXRlZChzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgOiByZWxhdGlvbi5pc0ludGVyZmFjZVJlbGF0ZWQoCiAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgIH0gZWxzZSBpZiAocyBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNGdW5jdGlvblJlbGF0ZWQoCiAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgcmV0dXJuIHMucHJvbW90ZWRCb3VuZCA9PSBudWxsCiAgICAgICAgICAgID8gcmVsYXRpb24uaXNUeXBlUGFyYW1ldGVyUmVsYXRlZCgKICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVHlwZWRlZlJlbGF0ZWQoCiAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgIlVuaGFuZGxlZCB0eXBlOiAke3QucnVudGltZVR5cGV9IjsKICAgIH0KICAgIHRocm93ICJVbmhhbmRsZWQgdHlwZSBjb21iaW5hdGlvbjogJHt0LnJ1bnRpbWVUeXBlfSAke3MucnVudGltZVR5cGV9IjsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgYWxsIHR5cGVzIGluIFtzXSBhbmQgW3RdIHBhaXJ3aXNlIGFyZSBzdWJ0eXBlcy4KICBib29sIGFyZVN1YnR5cGVzT2ZLZXJuZWwoTGlzdDxEYXJ0VHlwZT4gcywgTGlzdDxEYXJ0VHlwZT4gdCkgewogICAgaWYgKHMubGVuZ3RoICE9IHQubGVuZ3RoKSB7CiAgICAgIHRocm93ICJOdW1iZXJzIG9mIHR5cGUgYXJndW1lbnRzIGRvbid0IG1hdGNoICRzICR0LiI7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFpc1N1YnR5cGVPZktlcm5lbChzW2ldLCB0W2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIGlzU2FtZVR5cGVLZXJuZWwoRGFydFR5cGUgcywgRGFydFR5cGUgdCkgewogICAgcmV0dXJuIGlzU3VidHlwZU9mS2VybmVsKHMsIHQpICYmIGlzU3VidHlwZU9mS2VybmVsKHQsIHMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgVHlwZVJlbGF0aW9uPFQgZXh0ZW5kcyBEYXJ0VHlwZT4gewogIGNvbnN0IFR5cGVSZWxhdGlvbigpOwoKICBib29sIGlzRHluYW1pY1JlbGF0ZWQoRHluYW1pY1R5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpOwoKICBib29sIGlzVm9pZFJlbGF0ZWQoVm9pZFR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpOwoKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZChJbnRlcmZhY2VUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgVCB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKTsKCiAgYm9vbCBpc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFQgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcyk7CgogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgVCB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKTsKCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgVCB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKTsKCiAgYm9vbCBpc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKFR5cGVQYXJhbWV0ZXJUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVCB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKTsKCiAgYm9vbCBpc1R5cGVkZWZSZWxhdGVkKFR5cGVkZWZUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgVCB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKTsKfQoKY2xhc3MgSXNJbnRlcmZhY2VTdWJ0eXBlT2YgZXh0ZW5kcyBUeXBlUmVsYXRpb248SW50ZXJmYWNlVHlwZT4gewogIGNvbnN0IElzSW50ZXJmYWNlU3VidHlwZU9mKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmZhY2VSZWxhdGVkKEludGVyZmFjZVR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIGlmIChzLmNsYXNzTm9kZSA9PSB0eXBlcy5oaWVyYXJjaHkubnVsbEtlcm5lbENsYXNzKSB7CiAgICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCB0byBhdm9pZCBpbnN0YW50aWF0aW5nIHVubmVjZXNzYXJ5IHR5cGUKICAgICAgLy8gYXJndW1lbnRzIGluIGdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgSW50ZXJmYWNlVHlwZSBhc1N1cGVydHlwZSA9CiAgICAgICAgdHlwZXMuaGllcmFyY2h5LmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YocywgdC5jbGFzc05vZGUpOwogICAgaWYgKGFzU3VwZXJ0eXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHR5cGVzLmFyZVN1YnR5cGVzT2ZLZXJuZWwoCiAgICAgICAgICBhc1N1cGVydHlwZS50eXBlQXJndW1lbnRzLCB0LnR5cGVBcmd1bWVudHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKFR5cGVQYXJhbWV0ZXJUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy5wYXJhbWV0ZXIuYm91bmQsIHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMgPSBmdXR1cmVPci50eXBlQXJndW1lbnRzOwogICAgaWYgKCF0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChhcmd1bWVudHMuc2luZ2xlLCB0KSkgewogICAgICByZXR1cm4gZmFsc2U7IC8vIFJ1bGUgNy4xCiAgICB9CiAgICBpZiAoIXR5cGVzLmlzU3VidHlwZU9mS2VybmVsKAogICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKHR5cGVzLmhpZXJhcmNoeS5mdXR1cmVLZXJuZWxDbGFzcywgYXJndW1lbnRzKSwgdCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSdWxlIDcuMgogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoaW50ZXJzZWN0aW9uLnByb21vdGVkQm91bmQsIHQpOyAvLyBSdWxlIDEyLgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0R5bmFtaWNSZWxhdGVkKER5bmFtaWNUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnVuY3Rpb25SZWxhdGVkKEZ1bmN0aW9uVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHQuY2xhc3NOb2RlID09IHR5cGVzLmhpZXJhcmNoeS5mdW5jdGlvbktlcm5lbENsYXNzOyAvLyBSdWxlIDE0LgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1R5cGVkZWZSZWxhdGVkKFR5cGVkZWZUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBSdWxlIDUuCiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy51bmFsaWFzLCB0KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNWb2lkUmVsYXRlZChWb2lkVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIEludGVyZmFjZVR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgSXNGdW5jdGlvblN1YnR5cGVPZiBleHRlbmRzIFR5cGVSZWxhdGlvbjxGdW5jdGlvblR5cGU+IHsKICBjb25zdCBJc0Z1bmN0aW9uU3VidHlwZU9mKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgRnVuY3Rpb25UeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gc1R5cGVWYXJpYWJsZXMgPSBzLnR5cGVQYXJhbWV0ZXJzOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0VHlwZVZhcmlhYmxlcyA9IHQudHlwZVBhcmFtZXRlcnM7CiAgICBpZiAoc1R5cGVWYXJpYWJsZXMubGVuZ3RoICE9IHRUeXBlVmFyaWFibGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHNUeXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gSWYgdGhlIGZ1bmN0aW9uIHR5cGVzIGhhdmUgdHlwZSB2YXJpYWJsZXMsIHdlIGFscGhhLXJlbmFtZSB0aGUgdHlwZQogICAgICAvLyB2YXJpYWJsZXMgb2YgW3NdIHRvIHVzZSB0aG9zZSBvZiBbdF0uCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVWYXJpYWJsZVN1YnN0aXR1dGlvbiA9IDxEYXJ0VHlwZT5bXTsKICAgICAgYm9vbCBzZWNvbmRCb3VuZHNDaGVja05lZWRlZCA9IGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNUeXBlVmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgVHlwZVBhcmFtZXRlciBzVHlwZVZhcmlhYmxlID0gc1R5cGVWYXJpYWJsZXNbaV07CiAgICAgICAgVHlwZVBhcmFtZXRlciB0VHlwZVZhcmlhYmxlID0gdFR5cGVWYXJpYWJsZXNbaV07CiAgICAgICAgaWYgKCF0eXBlcy5pc1NhbWVUeXBlS2VybmVsKHNUeXBlVmFyaWFibGUuYm91bmQsIHRUeXBlVmFyaWFibGUuYm91bmQpKSB7CiAgICAgICAgICAvLyBJZiB0aGUgYm91bmRzIGFyZW4ndCB0aGUgc2FtZSwgd2UgbmVlZCB0byB0cnkgYWdhaW4gYWZ0ZXIKICAgICAgICAgIC8vIGNvbXB1dGluZyB0aGUgc3Vic3RpdHV0aW9uIG9mIHR5cGUgdmFyaWFibGVzLgogICAgICAgICAgc2Vjb25kQm91bmRzQ2hlY2tOZWVkZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICB0eXBlVmFyaWFibGVTdWJzdGl0dXRpb24uYWRkKG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0VHlwZVZhcmlhYmxlKSk7CiAgICAgIH0KICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9CiAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKHNUeXBlVmFyaWFibGVzLCB0eXBlVmFyaWFibGVTdWJzdGl0dXRpb24pOwogICAgICBpZiAoc2Vjb25kQm91bmRzQ2hlY2tOZWVkZWQpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNUeXBlVmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBUeXBlUGFyYW1ldGVyIHNUeXBlVmFyaWFibGUgPSBzVHlwZVZhcmlhYmxlc1tpXTsKICAgICAgICAgIFR5cGVQYXJhbWV0ZXIgdFR5cGVWYXJpYWJsZSA9IHRUeXBlVmFyaWFibGVzW2ldOwogICAgICAgICAgaWYgKCF0eXBlcy5pc1NhbWVUeXBlS2VybmVsKAogICAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShzVHlwZVZhcmlhYmxlLmJvdW5kKSwKICAgICAgICAgICAgICB0VHlwZVZhcmlhYmxlLmJvdW5kKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHMgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUocy53aXRob3V0VHlwZVBhcmFtZXRlcnMpOwogICAgfQogICAgaWYgKCF0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnJldHVyblR5cGUsIHQucmV0dXJuVHlwZSkpIHJldHVybiBmYWxzZTsKICAgIExpc3Q8RGFydFR5cGU+IHNQb3NpdGlvbmFsID0gcy5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgIExpc3Q8RGFydFR5cGU+IHRQb3NpdGlvbmFsID0gdC5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgIGlmIChzLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPiB0LnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgLy8gUnVsZSAxNSwgbjEgPD0gbjIuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzUG9zaXRpb25hbC5sZW5ndGggPCB0UG9zaXRpb25hbC5sZW5ndGgpIHsKICAgICAgLy8gUnVsZSAxNSwgbjEgKyBrMSA+PSBuMiArIGsyLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRQb3NpdGlvbmFsLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwodFBvc2l0aW9uYWxbaV0sIHNQb3NpdGlvbmFsW2ldKSkgewogICAgICAgIC8vIFJ1bGUgMTUsIFRqIDw6IFNqLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgTGlzdDxOYW1lZFR5cGU+IHNOYW1lZCA9IHMubmFtZWRQYXJhbWV0ZXJzOwogICAgTGlzdDxOYW1lZFR5cGU+IHROYW1lZCA9IHQubmFtZWRQYXJhbWV0ZXJzOwogICAgaWYgKHNOYW1lZC5pc05vdEVtcHR5IHx8IHROYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIC8vIFJ1bGUgMTYsIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIG11c3QgYmUgdGhlIHNhbWUuCiAgICAgIGlmIChzUG9zaXRpb25hbC5sZW5ndGggIT0gdFBvc2l0aW9uYWwubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChzLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgIT0gdC5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSByZXR1cm4gZmFsc2U7CgogICAgICAvLyBSdWxlIDE2LCB0aGUgcGFyYW1ldGVyIG5hbWVzIG9mIFt0XSBtdXN0IGJlIGEgc3Vic2V0IG9mIHRob3NlIG9mCiAgICAgIC8vIFtzXS4gQWxzbywgZm9yIHRoZSBpbnRlcnNlY3Rpb24sIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgb2YgW3RdIG11c3QKICAgICAgLy8gYmUgYSBzdWJ0eXBlIG9mIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgb2YgW3NdLgogICAgICBpbnQgc0NvdW50ID0gMDsKICAgICAgZm9yIChpbnQgdENvdW50ID0gMDsgdENvdW50IDwgdE5hbWVkLmxlbmd0aDsgdENvdW50KyspIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IHROYW1lZFt0Q291bnRdLm5hbWU7CiAgICAgICAgZm9yICg7IHNDb3VudCA8IHNOYW1lZC5sZW5ndGg7IHNDb3VudCsrKSB7CiAgICAgICAgICBpZiAoc05hbWVkW3NDb3VudF0ubmFtZSA9PSBuYW1lKSBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKHNDb3VudCA9PSBzTmFtZWQubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKCF0eXBlcy5pc1N1YnR5cGVPZktlcm5lbCgKICAgICAgICAgICAgdE5hbWVkW3RDb3VudF0udHlwZSwgc05hbWVkW3NDb3VudF0udHlwZSkpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyZmFjZVJlbGF0ZWQoSW50ZXJmYWNlVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEZ1bmN0aW9uVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gdHlwZXMuaGllcmFyY2h5Lm51bGxLZXJuZWxDbGFzczsgLy8gUnVsZSA0LgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0R5bmFtaWNSZWxhdGVkKER5bmFtaWNUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgRnVuY3Rpb25UeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdXR1cmVPclJlbGF0ZWQoCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsCiAgICAgIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksCiAgICAgIEZ1bmN0aW9uVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgRnVuY3Rpb25UeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFJ1bGUgMTIuCiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoaW50ZXJzZWN0aW9uLnByb21vdGVkQm91bmQsIHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKFR5cGVQYXJhbWV0ZXJUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgRnVuY3Rpb25UeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFJ1bGUgMTMuCiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy5wYXJhbWV0ZXIuYm91bmQsIHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1R5cGVkZWZSZWxhdGVkKFR5cGVkZWZUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgRnVuY3Rpb25UeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFJ1bGUgNS4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnVuYWxpYXMsIHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1ZvaWRSZWxhdGVkKFZvaWRUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgRnVuY3Rpb25UeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCmNsYXNzIElzVHlwZVBhcmFtZXRlclN1YnR5cGVPZiBleHRlbmRzIFR5cGVSZWxhdGlvbjxUeXBlUGFyYW1ldGVyVHlwZT4gewogIGNvbnN0IElzVHlwZVBhcmFtZXRlclN1YnR5cGVPZigpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoVHlwZVBhcmFtZXRlclR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gcy5wYXJhbWV0ZXIgPT0gdC5wYXJhbWV0ZXIgfHwKICAgICAgICAvLyBSdWxlIDEzLgogICAgICAgIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMuYm91bmQsIHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBpbnRlcnNlY3Rpb24ucGFyYW1ldGVyID09IHQucGFyYW1ldGVyOyAvLyBSdWxlIDguCiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZChJbnRlcmZhY2VUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHMuY2xhc3NOb2RlID09IHR5cGVzLmhpZXJhcmNoeS5udWxsS2VybmVsQ2xhc3M7IC8vIFJ1bGUgNC4KICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEeW5hbWljUmVsYXRlZChEeW5hbWljVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1R5cGVkZWZSZWxhdGVkKFR5cGVkZWZUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMudW5hbGlhcywgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVm9pZFJlbGF0ZWQoVm9pZFR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUeXBlUGFyYW1ldGVyVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgpjbGFzcyBJc1R5cGVkZWZTdWJ0eXBlT2YgZXh0ZW5kcyBUeXBlUmVsYXRpb248VHlwZWRlZlR5cGU+IHsKICBjb25zdCBJc1R5cGVkZWZTdWJ0eXBlT2YoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyZmFjZVJlbGF0ZWQoSW50ZXJmYWNlVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVkZWZUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCB0LnVuYWxpYXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0R5bmFtaWNSZWxhdGVkKER5bmFtaWNUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgVHlwZWRlZlR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIHQudW5hbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnVuY3Rpb25SZWxhdGVkKEZ1bmN0aW9uVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVkZWZUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCB0LnVuYWxpYXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgVHlwZWRlZlR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKGZ1dHVyZU9yLCB0LnVuYWxpYXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVkZWZUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChpbnRlcnNlY3Rpb24sIHQudW5hbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoVHlwZVBhcmFtZXRlclR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlZGVmVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocywgdC51bmFsaWFzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlZGVmUmVsYXRlZChUeXBlZGVmVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIFR5cGVkZWZUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnVuYWxpYXMsIHQudW5hbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVm9pZFJlbGF0ZWQoVm9pZFR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUeXBlZGVmVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocywgdC51bmFsaWFzKTsKICB9Cn0KCmNsYXNzIElzRnV0dXJlT3JTdWJ0eXBlT2YgZXh0ZW5kcyBUeXBlUmVsYXRpb248SW50ZXJmYWNlVHlwZT4gewogIGNvbnN0IElzRnV0dXJlT3JTdWJ0eXBlT2YoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyZmFjZVJlbGF0ZWQoSW50ZXJmYWNlVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMgPSBmdXR1cmVPci50eXBlQXJndW1lbnRzOwogICAgaWYgKHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIGFyZ3VtZW50cy5zaW5nbGUpKSB7CiAgICAgIHJldHVybiB0cnVlOyAvLyBSdWxlIDExLgogICAgfQogICAgLy8gUnVsZSAxMC4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbCgKICAgICAgICBzLCBuZXcgSW50ZXJmYWNlVHlwZSh0eXBlcy5oaWVyYXJjaHkuZnV0dXJlS2VybmVsQ2xhc3MsIGFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBzRnV0dXJlT3IsCiAgICAgIE51bGxhYmlsaXR5IHNGdXR1cmVPck51bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHRGdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgdEZ1dHVyZU9yTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBUaGlzIGZvbGxvd3MgZnJvbSBjb21iaW5pbmcgcnVsZXMgNywgMTAsIGFuZCAxMS4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbCgKICAgICAgICBzRnV0dXJlT3IudHlwZUFyZ3VtZW50cy5zaW5nbGUsIHRGdXR1cmVPci50eXBlQXJndW1lbnRzLnNpbmdsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRHluYW1pY1JlbGF0ZWQoRHluYW1pY1R5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLCBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSAxMS4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCBmdXR1cmVPci50eXBlQXJndW1lbnRzLnNpbmdsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVm9pZFJlbGF0ZWQoVm9pZFR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLCBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSAxMS4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCBmdXR1cmVPci50eXBlQXJndW1lbnRzLnNpbmdsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoVHlwZVBhcmFtZXRlclR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLCBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzID0gZnV0dXJlT3IudHlwZUFyZ3VtZW50czsKICAgIGlmICh0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCBhcmd1bWVudHMuc2luZ2xlKSkgewogICAgICAvLyBSdWxlIDExLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBpZiAodHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy5wYXJhbWV0ZXIuYm91bmQsIGZ1dHVyZU9yKSkgewogICAgICAvLyBSdWxlIDEzLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvLyBSdWxlIDEwLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKAogICAgICAgIHMsIG5ldyBJbnRlcmZhY2VUeXBlKHR5cGVzLmhpZXJhcmNoeS5mdXR1cmVLZXJuZWxDbGFzcywgYXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnVuY3Rpb25SZWxhdGVkKEZ1bmN0aW9uVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBSdWxlIDExLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIGZ1dHVyZU9yLnR5cGVBcmd1bWVudHMuc2luZ2xlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgaWYgKGlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoaW50ZXJzZWN0aW9uLCBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwgZnV0dXJlT3IsCiAgICAgICAgZnV0dXJlT3JOdWxsYWJpbGl0eSwgdHlwZXMpKSB7CiAgICAgIC8vIFJ1bGUgOC4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAvLyBSdWxlIDEyLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKGludGVyc2VjdGlvbi5wcm9tb3RlZEJvdW5kLCBmdXR1cmVPcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZWRlZlJlbGF0ZWQoVHlwZWRlZlR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLCBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMudW5hbGlhcywgZnV0dXJlT3IpOwogIH0KfQoKY2xhc3MgSXNJbnRlcnNlY3Rpb25TdWJ0eXBlT2YgZXh0ZW5kcyBUeXBlUmVsYXRpb248VHlwZVBhcmFtZXRlclR5cGU+IHsKICBjb25zdCBJc0ludGVyc2VjdGlvblN1YnR5cGVPZigpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgc0ludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgc0ludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0SW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSB0SW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBSdWxlIDkuCiAgICByZXR1cm4gY29uc3QgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mKCkuaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICBzSW50ZXJzZWN0aW9uLAogICAgICAgICAgICBzSW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgICAgICAgIHRJbnRlcnNlY3Rpb24sCiAgICAgICAgICAgIHRJbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgICAgICAgdHlwZXMpICYmCiAgICAgICAgdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoc0ludGVyc2VjdGlvbiwgdEludGVyc2VjdGlvbi5wcm9tb3RlZEJvdW5kKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlUGFyYW1ldGVyUmVsYXRlZCgKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgcywKICAgICAgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSA5LgogICAgcmV0dXJuIGNvbnN0IElzVHlwZVBhcmFtZXRlclN1YnR5cGVPZigpLmlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoCiAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgaW50ZXJzZWN0aW9uLCBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwgdHlwZXMpICYmCiAgICAgICAgdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocywgaW50ZXJzZWN0aW9uLnByb21vdGVkQm91bmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyZmFjZVJlbGF0ZWQoCiAgICAgIEludGVyZmFjZVR5cGUgcywKICAgICAgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHMuY2xhc3NOb2RlID09IHR5cGVzLmhpZXJhcmNoeS5udWxsS2VybmVsQ2xhc3M7IC8vIFJ1bGUgNC4KICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEeW5hbWljUmVsYXRlZCgKICAgICAgRHluYW1pY1R5cGUgcywKICAgICAgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgRnVuY3Rpb25UeXBlIHMsCiAgICAgIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdXR1cmVPclJlbGF0ZWQoCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsCiAgICAgIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBi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aXN0ZW5lciBidXQgaWdub3JlcwovLy8gYWxsIG90aGVyIGV2ZW50cy4KY2xhc3MgRXJyb3JEZWxlZ2F0aW9uTGlzdGVuZXIgZXh0ZW5kcyBMaXN0ZW5lciB7CiAgTGlzdGVuZXIgZGVsZWdhdGU7CgogIEVycm9yRGVsZWdhdGlvbkxpc3RlbmVyKHRoaXMuZGVsZWdhdGUpOwoKICB2b2lkIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgVG9rZW4gc3RhcnRUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIHJldHVybiBkZWxlZ2F0ZS5oYW5kbGVSZWNvdmVyYWJsZUVycm9yKG1lc3NhZ2UsIHN0YXJ0VG9rZW4sIGVuZFRva2VuKTsKICB9Cn0KGABOTjwBLgErASYBTBYxFQEqAR87SwQCAUFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2Vycm9yX2RlbGVnYXRpb25fbGlzdGVuZXIuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvaWdub3JlZF9wYXJzZXJfZXJyb3JzLmRhcnSCii8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmlnbm9yZWRfcGFyc2VyX2Vycm9yczsKCmltcG9ydCAnZmFzdGFfY29kZXMuZGFydCcgc2hvdyBDb2RlLCBjb2RlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0OwoKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBvcHRpb25hbDsKCmltcG9ydCAnc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKYm9vbCBpc0lnbm9yZWRQYXJzZXJFcnJvcihDb2RlPE9iamVjdD4gY29kZSwgVG9rZW4gdG9rZW4pIHsKICBpZiAoY29kZSA9PSBjb2RlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0KSB7CiAgICAvLyBJZ25vcmVkLiBUaGlzIGVycm9yIGlzIGhhbmRsZWQgaW4gdGhlIG91dGxpbmUgcGhhc2UgKHBhcnQgcmVzb2x1dGlvbikuCiAgICByZXR1cm4gb3B0aW9uYWwoInBhcnQiLCB0b2tlbik7CiAgfSBlbHNlIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KFgBOTjwBJQFDASQBIgE8Lk4kCxIEAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2lnbm9yZWRfcGFyc2VyX2Vycm9ycy5kYXJ0QnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvZGlyZWN0aXZlX2NvbnRleHQuZGFydIzELy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCc7CmltcG9ydCAncGFyc2VyLmRhcnQnOwppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCc7CgpjbGFzcyBEaXJlY3RpdmVDb250ZXh0IHsKICBEaXJlY3RpdmVTdGF0ZSBzdGF0ZSA9IERpcmVjdGl2ZVN0YXRlLlVua25vd247CgogIHZvaWQgY2hlY2tTY3JpcHRUYWcoUGFyc2VyIHBhcnNlciwgVG9rZW4gdG9rZW4pIHsKICAgIGlmIChzdGF0ZSA9PSBEaXJlY3RpdmVTdGF0ZS5Vbmtub3duKSB7CiAgICAgIHN0YXRlID0gRGlyZWN0aXZlU3RhdGUuU2NyaXB0OwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBUaGUgc2Nhbm5lciBvbmx5IHByb2R1Y2VzIHRoZSBTQ1JJUFRfVEFHCiAgICAvLyB3aGVuIGl0IGlzIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgZmlsZS4KICAgIHRocm93ICJJbnRlcm5hbCBlcnJvcjogVW5leHBlY3RlZCBzY3JpcHQgdGFnLiI7CiAgfQoKICB2b2lkIGNoZWNrRGVjbGFyYXRpb24oKSB7CiAgICBpZiAoc3RhdGUgIT0gRGlyZWN0aXZlU3RhdGUuUGFydE9mKSB7CiAgICAgIHN0YXRlID0gRGlyZWN0aXZlU3RhdGUuRGVjbGFyYXRpb25zOwogICAgfQogIH0KCiAgdm9pZCBjaGVja0V4cG9ydChQYXJzZXIgcGFyc2VyLCBUb2tlbiB0b2tlbikgewogICAgaWYgKHN0YXRlLmluZGV4IDw9IERpcmVjdGl2ZVN0YXRlLkltcG9ydEFuZEV4cG9ydC5pbmRleCkgewogICAgICBzdGF0ZSA9IERpcmVjdGl2ZVN0YXRlLkltcG9ydEFuZEV4cG9ydDsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChzdGF0ZSA9PSBEaXJlY3RpdmVTdGF0ZS5QYXJ0KSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlRXhwb3J0QWZ0ZXJQYXJ0KTsKICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuUGFydE9mKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrSW1wb3J0KFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGUuaW5kZXggPD0gRGlyZWN0aXZlU3RhdGUuSW1wb3J0QW5kRXhwb3J0LmluZGV4KSB7CiAgICAgIHN0YXRlID0gRGlyZWN0aXZlU3RhdGUuSW1wb3J0QW5kRXhwb3J0OwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBSZWNvdmVyeQogICAgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlBhcnQpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VJbXBvcnRBZnRlclBhcnQpOwogICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBEaXJlY3RpdmVTdGF0ZS5QYXJ0T2YpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tMaWJyYXJ5KFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGUuaW5kZXggPCBEaXJlY3RpdmVTdGF0ZS5MaWJyYXJ5LmluZGV4KSB7CiAgICAgIHN0YXRlID0gRGlyZWN0aXZlU3RhdGUuTGlicmFyeTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChzdGF0ZSA9PSBEaXJlY3RpdmVTdGF0ZS5MaWJyYXJ5KSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlTXVsdGlwbGVMaWJyYXJ5RGlyZWN0aXZlcyk7CiAgICB9IGVsc2UgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlBhcnRPZikgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydCk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZUxpYnJhcnlEaXJlY3RpdmVOb3RGaXJzdCk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrUGFydChQYXJzZXIgcGFyc2VyLCBUb2tlbiB0b2tlbikgewogICAgaWYgKHN0YXRlLmluZGV4IDw9IERpcmVjdGl2ZVN0YXRlLlBhcnQuaW5kZXgpIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5QYXJ0OwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBSZWNvdmVyeQogICAgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlBhcnRPZikgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydCk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZURpcmVjdGl2ZUFmdGVyRGVjbGFyYXRpb24pOwogICAgfQogIH0KCiAgdm9pZCBjaGVja1BhcnRPZihQYXJzZXIgcGFyc2VyLCBUb2tlbiB0b2tlbikgewogICAgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlVua25vd24pIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5QYXJ0T2Y7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuUGFydE9mKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlUGFydE9mVHdpY2UpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQpOwogICAgfQogIH0KfQoKZW51bSBEaXJlY3RpdmVTdGF0ZSB7CiAgVW5rbm93biwKICBTY3JpcHQsCiAgTGlicmFyeSwKICBJbXBvcnRBbmRFeHBvcnQsCiAgUGFydCwKICBQYXJ0T2YsCiAgRGVjbGFyYXRpb25zLAp9Cm4ATk48AR4WIwEZMQE0KyUOBjAvNAQBHCorBgQBMT8uDgYQKEQxTQ1OBgQBMT8uDgYQKEQxTQ1OBgQBMjYmDgYQK04xTQ1NBgQBLzQjDgYQKk0NTgYEATErJQ4GECpADU0GBAIBFgsKCxMIChACATlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2RpcmVjdGl2ZV9jb250ZXh0LmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9mb3J3YXJkaW5nX2xpc3RlbmVyLmRhcnTAAJDOLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vbWVzc2FnZXMuZGFydCc7CmltcG9ydCAnLi4vcGFyc2VyLmRhcnQnOwppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCc7CgpjbGFzcyBGb3J3YXJkaW5nTGlzdGVuZXIgaW1wbGVtZW50cyBMaXN0ZW5lciB7CiAgTGlzdGVuZXIgbGlzdGVuZXI7CiAgYm9vbCBmb3J3YXJkRXJyb3JzID0gdHJ1ZTsKCiAgRm9yd2FyZGluZ0xpc3RlbmVyKFt0aGlzLmxpc3RlbmVyXSk7CgogIEBvdmVycmlkZQogIHNldCBzdXBwcmVzc1BhcnNlRXJyb3JzKGJvb2wgdmFsdWUpIHsKICAgIGxpc3RlbmVyPy5zdXBwcmVzc1BhcnNlRXJyb3JzID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBVcmkgZ2V0IHVyaSA9PiBsaXN0ZW5lcj8udXJpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Bcmd1bWVudHModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCkgewogICAgbGlzdGVuZXI/LmJlZ2luQXNzZXJ0KGFzc2VydEtleXdvcmQsIGtpbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkF3YWl0RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luQXdhaXRFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5CaW5hcnlFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5CaW5hcnlFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5CbG9jayhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luQmxvY2sodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkJsb2NrRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5CbG9ja0Z1bmN0aW9uQm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2FzY2FkZShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luQ2FzY2FkZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2FzZUV4cHJlc3Npb24oVG9rZW4gY2FzZUtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNhc2VFeHByZXNzaW9uKGNhc2VLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DYXRjaENsYXVzZShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luQ2F0Y2hDbGF1c2UodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNsYXNzRGVjbGFyYXRpb24oVG9rZW4gYmVnaW4sIFRva2VuIGFic3RyYWN0VG9rZW4sIFRva2VuIG5hbWUpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNsYXNzRGVjbGFyYXRpb24oYmVnaW4sIGFic3RyYWN0VG9rZW4sIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNsYXNzT3JNaXhpbkJvZHkoQ2xhc3NLaW5kIGtpbmQsIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5DbGFzc09yTWl4aW5Cb2R5KGtpbmQsIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db21iaW5hdG9ycyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luQ29tYmluYXRvcnModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbXBpbGF0aW9uVW5pdChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luQ29tcGlsYXRpb25Vbml0KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db25kaXRpb25hbEV4cHJlc3Npb24oVG9rZW4gcXVlc3Rpb24pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbihxdWVzdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uZGl0aW9uYWxVcmkoVG9rZW4gaWZLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Db25kaXRpb25hbFVyaShpZktleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbmRpdGlvbmFsVXJpcyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luQ29uZGl0aW9uYWxVcmlzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db25zdEV4cHJlc3Npb24oVG9rZW4gY29uc3RLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Db25zdEV4cHJlc3Npb24oY29uc3RLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db25zdExpdGVyYWwoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNvbnN0TGl0ZXJhbCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uc3RydWN0b3JSZWZlcmVuY2UoVG9rZW4gc3RhcnQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNvbnN0cnVjdG9yUmVmZXJlbmNlKHN0YXJ0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Eb1doaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Eb1doaWxlU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Eb1doaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRG9XaGlsZVN0YXRlbWVudEJvZHkodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkVsc2VTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkVsc2VTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkVudW0oVG9rZW4gZW51bUtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkVudW0oZW51bUtleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkV4cG9ydChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRXhwb3J0KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbihUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBuYW1lKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbihleHRlbnNpb25LZXl3b3JkLCBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBsYXN0Q29uc3VtZWQsIFRva2VuIGV4dGVybmFsVG9rZW4sIFRva2VuIGNvbnN0VG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZhY3RvcnlNZXRob2QobGFzdENvbnN1bWVkLCBleHRlcm5hbFRva2VuLCBjb25zdFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5GaWVsZEluaXRpYWxpemVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JDb250cm9sRmxvdyhUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRm9yQ29udHJvbEZsb3coYXdhaXRUb2tlbiwgZm9yVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvckluQm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRm9ySW5Cb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JJbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZvckluRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ybWFsUGFyYW1ldGVyKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQsIFRva2VuIHJlcXVpcmVkVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiB2YXJGaW5hbE9yQ29uc3QpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZvcm1hbFBhcmFtZXRlcigKICAgICAgICB0b2tlbiwga2luZCwgcmVxdWlyZWRUb2tlbiwgY292YXJpYW50VG9rZW4sIHZhckZpbmFsT3JDb25zdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZvcm1hbFBhcmFtZXRlcnModG9rZW4sIGtpbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvclN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRm9yU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Gb3JTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZ1bmN0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25OYW1lKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5GdW5jdGlvbk5hbWUodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZShUb2tlbiBiZWdpblRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5GdW5jdGlvblR5cGUoYmVnaW5Ub2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlQWxpYXMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZ1bmN0aW9uVHlwZUFsaWFzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5IaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5IaWRlKGhpZGVLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5JZkNvbnRyb2xGbG93KFRva2VuIGlmVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbklmQ29udHJvbEZsb3coaWZUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSWZTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbklmU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5JbXBvcnQoaW1wb3J0S2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Jbml0aWFsaXplZElkZW50aWZpZXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Jbml0aWFsaXplcih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSW5pdGlhbGl6ZXJzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Jbml0aWFsaXplcnModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxhYmVsZWRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4sIGludCBsYWJlbENvdW50KSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5MYWJlbGVkU3RhdGVtZW50KHRva2VuLCBsYWJlbENvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5MaWJyYXJ5TmFtZShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTGlicmFyeU5hbWUodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxpdGVyYWxTdHJpbmcoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkxpdGVyYWxTdHJpbmcodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxpdGVyYWxTeW1ib2woVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkxpdGVyYWxTeW1ib2wodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5NZW1iZXIoKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5NZW1iZXIoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5NZXRhZGF0YShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTWV0YWRhdGEodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1ldGFkYXRhU3RhcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTWV0YWRhdGFTdGFyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5NZXRob2QoVG9rZW4gZXh0ZXJuYWxUb2tlbiwgVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIFRva2VuIGdldE9yU2V0LCBUb2tlbiBuYW1lKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5NZXRob2QoZXh0ZXJuYWxUb2tlbiwgc3RhdGljVG9rZW4sIGNvdmFyaWFudFRva2VuLAogICAgICAgIHZhckZpbmFsT3JDb25zdCwgZ2V0T3JTZXQsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1peGluRGVjbGFyYXRpb24oVG9rZW4gbWl4aW5LZXl3b3JkLCBUb2tlbiBuYW1lKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5NaXhpbkRlY2xhcmF0aW9uKG1peGluS2V5d29yZCwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5OYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgIFRva2VuIGJlZ2luLCBUb2tlbiBhYnN0cmFjdFRva2VuLCBUb2tlbiBuYW1lKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5OYW1lZE1peGluQXBwbGljYXRpb24oYmVnaW4sIGFic3RyYWN0VG9rZW4sIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk5ld0V4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbk5ld0V4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5QYXJ0KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5QYXJ0KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5QYXJ0T2YoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblBhcnRPZih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luUmV0aHJvd1N0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luUmV0aHJvd1N0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luUmV0dXJuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5SZXR1cm5TdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblNob3coVG9rZW4gc2hvd0tleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpblNob3coc2hvd0tleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblN3aXRjaEJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Td2l0Y2hCbG9jayh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luU3dpdGNoQ2FzZShpbnQgbGFiZWxDb3VudCwgaW50IGV4cHJlc3Npb25Db3VudCwgVG9rZW4gZmlyc3RUb2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luU3dpdGNoQ2FzZShsYWJlbENvdW50LCBleHByZXNzaW9uQ291bnQsIGZpcnN0VG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblN3aXRjaFN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luU3dpdGNoU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UaGVuQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblRoZW5Db250cm9sRmxvdyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luVGhlblN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVG9wTGV2ZWxNZW1iZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblRvcExldmVsTWVtYmVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Ub3BMZXZlbE1ldGhvZChUb2tlbiBsYXN0Q29uc3VtZWQsIFRva2VuIGV4dGVybmFsVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblRvcExldmVsTWV0aG9kKGxhc3RDb25zdW1lZCwgZXh0ZXJuYWxUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVHJ5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5UcnlTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblR5cGVBcmd1bWVudHModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVMaXN0KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5UeXBlTGlzdCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVHlwZVZhcmlhYmxlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5UeXBlVmFyaWFibGUodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVWYXJpYWJsZXMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblR5cGVWYXJpYWJsZXModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblZhcmlhYmxlSW5pdGlhbGl6ZXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblZhcmlhYmxlc0RlY2xhcmF0aW9uKAogICAgICBUb2tlbiB0b2tlbiwgVG9rZW4gbGF0ZVRva2VuLCBUb2tlbiB2YXJGaW5hbE9yQ29uc3QpIHsKICAgIGxpc3RlbmVyPy5iZWdpblZhcmlhYmxlc0RlY2xhcmF0aW9uKHRva2VuLCBsYXRlVG9rZW4sIHZhckZpbmFsT3JDb25zdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luV2hpbGVTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbldoaWxlU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5XaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbldoaWxlU3RhdGVtZW50Qm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luWWllbGRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbllpZWxkU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGlzY2FyZFR5cGVSZXBsYWNlZFdpdGhDb21tZW50VHlwZUFzc2lnbigpIHsKICAgIGxpc3RlbmVyPy5kaXNjYXJkVHlwZVJlcGxhY2VkV2l0aENvbW1lbnRUeXBlQXNzaWduKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQXJndW1lbnRzKGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCwgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBUb2tlbiBjb21tYVRva2VuLCBUb2tlbiBzZW1pY29sb25Ub2tlbikgewogICAgbGlzdGVuZXI/LmVuZEFzc2VydCgKICAgICAgICBhc3NlcnRLZXl3b3JkLCBraW5kLCBsZWZ0UGFyZW50aGVzaXMsIGNvbW1hVG9rZW4sIHNlbWljb2xvblRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQXdhaXRFeHByZXNzaW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQXdhaXRFeHByZXNzaW9uKGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW52YWxpZEF3YWl0RXhwcmVzc2lvbigKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4sIE1lc3NhZ2VDb2RlIGVycm9yQ29kZSkgewogICAgbGlzdGVuZXI/LmVuZEludmFsaWRBd2FpdEV4cHJlc3Npb24oYmVnaW5Ub2tlbiwgZW5kVG9rZW4sIGVycm9yQ29kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRCaW5hcnlFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQmxvY2soaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEJsb2NrKGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEJsb2NrRnVuY3Rpb25Cb2R5KGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRCbG9ja0Z1bmN0aW9uQm9keShjb3VudCwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDYXNjYWRlKCkgewogICAgbGlzdGVuZXI/LmVuZENhc2NhZGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2FzZUV4cHJlc3Npb24oVG9rZW4gY29sb24pIHsKICAgIGxpc3RlbmVyPy5lbmRDYXNlRXhwcmVzc2lvbihjb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENhdGNoQ2xhdXNlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ2F0Y2hDbGF1c2UodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDbGFzc0RlY2xhcmF0aW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ2xhc3NEZWNsYXJhdGlvbihiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzT3JNaXhpbkJvZHkoCiAgICAgIENsYXNzS2luZCBraW5kLCBpbnQgbWVtYmVyQ291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ2xhc3NPck1peGluQm9keShraW5kLCBtZW1iZXJDb3VudCwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb21iaW5hdG9ycyhpbnQgY291bnQpIHsKICAgIGxpc3RlbmVyPy5lbmRDb21iaW5hdG9ycyhjb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbXBpbGF0aW9uVW5pdChpbnQgY291bnQsIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ29tcGlsYXRpb25Vbml0KGNvdW50LCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsRXhwcmVzc2lvbihUb2tlbiBxdWVzdGlvbiwgVG9rZW4gY29sb24pIHsKICAgIGxpc3RlbmVyPy5lbmRDb25kaXRpb25hbEV4cHJlc3Npb24ocXVlc3Rpb24sIGNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uZGl0aW9uYWxVcmkoVG9rZW4gaWZLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW4sIFRva2VuIGVxdWFsU2lnbikgewogICAgbGlzdGVuZXI/LmVuZENvbmRpdGlvbmFsVXJpKGlmS2V5d29yZCwgbGVmdFBhcmVuLCBlcXVhbFNpZ24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25kaXRpb25hbFVyaXMoaW50IGNvdW50KSB7CiAgICBsaXN0ZW5lcj8uZW5kQ29uZGl0aW9uYWxVcmlzKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uc3RFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ29uc3RFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uc3RMaXRlcmFsKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ29uc3RMaXRlcmFsKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgIFRva2VuIHN0YXJ0LCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZENvbnN0cnVjdG9yUmVmZXJlbmNlKHN0YXJ0LCBwZXJpb2RCZWZvcmVOYW1lLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZERvV2hpbGVTdGF0ZW1lbnQoCiAgICAgIFRva2VuIGRvS2V5d29yZCwgVG9rZW4gd2hpbGVLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZERvV2hpbGVTdGF0ZW1lbnQoZG9LZXl3b3JkLCB3aGlsZUtleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRG9XaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmREb1doaWxlU3RhdGVtZW50Qm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEVsc2VTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRFbHNlU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRW51bShUb2tlbiBlbnVtS2V5d29yZCwgVG9rZW4gbGVmdEJyYWNlLCBpbnQgY291bnQpIHsKICAgIGxpc3RlbmVyPy5lbmRFbnVtKGVudW1LZXl3b3JkLCBsZWZ0QnJhY2UsIGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRXhwb3J0KFRva2VuIGV4cG9ydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgbGlzdGVuZXI/LmVuZEV4cG9ydChleHBvcnRLZXl3b3JkLCBzZW1pY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFeHRlbnNpb25EZWNsYXJhdGlvbigKICAgICAgVG9rZW4gZXh0ZW5zaW9uS2V5d29yZCwgVG9rZW4gb25LZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEV4dGVuc2lvbkRlY2xhcmF0aW9uKGV4dGVuc2lvbktleXdvcmQsIG9uS2V5d29yZCwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBmYWN0b3J5S2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGYWN0b3J5TWV0aG9kKGJlZ2luVG9rZW4sIGZhY3RvcnlLZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gYXNzaWdubWVudCwgVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGaWVsZEluaXRpYWxpemVyKGFzc2lnbm1lbnQsIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRmllbGRzKFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGaWVsZHMoc3RhdGljVG9rZW4sIGNvdmFyaWFudFRva2VuLCBsYXRlVG9rZW4sIHZhckZpbmFsT3JDb25zdCwKICAgICAgICBjb3VudCwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JDb250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZvckNvbnRyb2xGbG93KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW4oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGb3JJbihlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckluQm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZvckluQm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckluQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGb3JJbkNvbnRyb2xGbG93KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW5FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9ySW5FeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVyKAogICAgICBUb2tlbiB0aGlzS2V5d29yZCwKICAgICAgVG9rZW4gcGVyaW9kQWZ0ZXJUaGlzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIGluaXRpYWxpemVyU3RhcnQsCiAgICAgIFRva2VuIGluaXRpYWxpemVyRW5kLAogICAgICBGb3JtYWxQYXJhbWV0ZXJLaW5kIGtpbmQsCiAgICAgIE1lbWJlcktpbmQgbWVtYmVyS2luZCkgewogICAgbGlzdGVuZXI/LmVuZEZvcm1hbFBhcmFtZXRlcih0aGlzS2V5d29yZCwgcGVyaW9kQWZ0ZXJUaGlzLCBuYW1lVG9rZW4sCiAgICAgICAgaW5pdGlhbGl6ZXJTdGFydCwgaW5pdGlhbGl6ZXJFbmQsIGtpbmQsIG1lbWJlcktpbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkgewogICAgbGlzdGVuZXI/LmVuZEZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVycygKICAgICAgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9ybWFsUGFyYW1ldGVycyhjb3VudCwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4sIGtpbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JTdGF0ZW1lbnQoVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGb3JTdGF0ZW1lbnQoZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9yU3RhdGVtZW50Qm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZ1bmN0aW9uRXhwcmVzc2lvbihiZWdpblRva2VuLCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uTmFtZShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZ1bmN0aW9uTmFtZShiZWdpblRva2VuLCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZShUb2tlbiBmdW5jdGlvblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIGxpc3RlbmVyPy5lbmRGdW5jdGlvblR5cGUoZnVuY3Rpb25Ub2tlbiwgcXVlc3Rpb25NYXJrKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlQWxpYXMoCiAgICAgIFRva2VuIHR5cGVkZWZLZXl3b3JkLCBUb2tlbiBlcXVhbHMsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRnVuY3Rpb25UeXBlQWxpYXModHlwZWRlZktleXdvcmQsIGVxdWFscywgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIG5hbWVUb2tlbiwgVG9rZW4gcXVlc3Rpb24pIHsKICAgIGxpc3RlbmVyPy5lbmRGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKG5hbWVUb2tlbiwgcXVlc3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRIaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uZW5kSGlkZShoaWRlS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZElmQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRJZkNvbnRyb2xGbG93KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSWZFbHNlQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRJZkVsc2VDb250cm9sRmxvdyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZElmU3RhdGVtZW50KFRva2VuIGlmVG9rZW4sIFRva2VuIGVsc2VUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZElmU3RhdGVtZW50KGlmVG9rZW4sIGVsc2VUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbXBvcnQoVG9rZW4gaW1wb3J0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uZW5kSW1wb3J0KGltcG9ydEtleXdvcmQsIHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEluaXRpYWxpemVkSWRlbnRpZmllcihUb2tlbiBuYW1lVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRJbml0aWFsaXplZElkZW50aWZpZXIobmFtZVRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRJbml0aWFsaXplcih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEluaXRpYWxpemVycyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kSW5pdGlhbGl6ZXJzKGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExhYmVsZWRTdGF0ZW1lbnQoaW50IGxhYmVsQ291bnQpIHsKICAgIGxpc3RlbmVyPy5lbmRMYWJlbGVkU3RhdGVtZW50KGxhYmVsQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaWJyYXJ5TmFtZShUb2tlbiBsaWJyYXJ5S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uZW5kTGlicmFyeU5hbWUobGlicmFyeUtleXdvcmQsIHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRMaXRlcmFsU3RyaW5nKGludGVycG9sYXRpb25Db3VudCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaXRlcmFsU3ltYm9sKFRva2VuIGhhc2hUb2tlbiwgaW50IGlkZW50aWZpZXJDb3VudCkgewogICAgbGlzdGVuZXI/LmVuZExpdGVyYWxTeW1ib2woaGFzaFRva2VuLCBpZGVudGlmaWVyQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24oZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZW1iZXIoKSB7CiAgICBsaXN0ZW5lcj8uZW5kTWVtYmVyKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1ldGFkYXRhKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kTWV0YWRhdGEoYmVnaW5Ub2tlbiwgcGVyaW9kQmVmb3JlTmFtZSwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRhZGF0YVN0YXIoaW50IGNvdW50KSB7CiAgICBsaXN0ZW5lcj8uZW5kTWV0YWRhdGFTdGFyKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0aG9kKFRva2VuIGdldE9yU2V0LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBiZWdpblBhcmFtLAogICAgICBUb2tlbiBiZWdpbkluaXRpYWxpemVycywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRNZXRob2QoCiAgICAgICAgZ2V0T3JTZXQsIGJlZ2luVG9rZW4sIGJlZ2luUGFyYW0sIGJlZ2luSW5pdGlhbGl6ZXJzLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1peGluRGVjbGFyYXRpb24oVG9rZW4gbWl4aW5LZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZE1peGluRGVjbGFyYXRpb24obWl4aW5LZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24oZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmROYW1lZE1peGluQXBwbGljYXRpb24oVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCwgVG9rZW4gZXF1YWxzLAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmROYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgICAgYmVnaW4sIGNsYXNzS2V5d29yZCwgZXF1YWxzLCBpbXBsZW1lbnRzS2V5d29yZCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmROZXdFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kTmV3RXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycygKICAgICAgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZE9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyhjb3VudCwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRQYXJ0KFRva2VuIHBhcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5lbmRQYXJ0KHBhcnRLZXl3b3JkLCBzZW1pY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRQYXJ0T2YoCiAgICAgIFRva2VuIHBhcnRLZXl3b3JkLCBUb2tlbiBvZktleXdvcmQsIFRva2VuIHNlbWljb2xvbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBsaXN0ZW5lcj8uZW5kUGFydE9mKHBhcnRLZXl3b3JkLCBvZktleXdvcmQsIHNlbWljb2xvbiwgaGFzTmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUmV0aHJvd1N0YXRlbWVudChUb2tlbiByZXRocm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kUmV0aHJvd1N0YXRlbWVudChyZXRocm93VG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUmV0dXJuU3RhdGVtZW50KAogICAgICBib29sIGhhc0V4cHJlc3Npb24sIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kUmV0dXJuU3RhdGVtZW50KGhhc0V4cHJlc3Npb24sIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kU2hvdyhUb2tlbiBzaG93S2V5d29yZCkgewogICAgbGlzdGVuZXI/LmVuZFNob3coc2hvd0tleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRTd2l0Y2hCbG9jayhpbnQgY2FzZUNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFN3aXRjaEJsb2NrKGNhc2VDb3VudCwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRTd2l0Y2hDYXNlKAogICAgICBpbnQgbGFiZWxDb3VudCwKICAgICAgaW50IGV4cHJlc3Npb25Db3VudCwKICAgICAgVG9rZW4gZGVmYXVsdEtleXdvcmQsCiAgICAgIFRva2VuIGNvbG9uQWZ0ZXJEZWZhdWx0LAogICAgICBpbnQgc3RhdGVtZW50Q291bnQsCiAgICAgIFRva2VuIGZpcnN0VG9rZW4sCiAgICAgIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kU3dpdGNoQ2FzZShsYWJlbENvdW50LCBleHByZXNzaW9uQ291bnQsIGRlZmF1bHRLZXl3b3JkLAogICAgICAgIGNvbG9uQWZ0ZXJEZWZhdWx0LCBzdGF0ZW1lbnRDb3VudCwgZmlyc3RUb2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRTd2l0Y2hTdGF0ZW1lbnQoVG9rZW4gc3dpdGNoS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRTd2l0Y2hTdGF0ZW1lbnQoc3dpdGNoS2V5d29yZCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUaGVuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kVGhlblN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRvcExldmVsRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxGaWVsZHMoCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIGludCBjb3VudCwKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRUb3BMZXZlbEZpZWxkcyhzdGF0aWNUb2tlbiwgY292YXJpYW50VG9rZW4sIGxhdGVUb2tlbiwKICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRvcExldmVsTWV0aG9kKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGdldE9yU2V0LCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFRvcExldmVsTWV0aG9kKGJlZ2luVG9rZW4sIGdldE9yU2V0LCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRyeVN0YXRlbWVudChpbnQgY2F0Y2hDb3VudCwgVG9rZW4gdHJ5S2V5d29yZCwgVG9rZW4gZmluYWxseUtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5lbmRUcnlTdGF0ZW1lbnQoY2F0Y2hDb3VudCwgdHJ5S2V5d29yZCwgZmluYWxseUtleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlQXJndW1lbnRzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRUeXBlQXJndW1lbnRzKGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVMaXN0KGludCBjb3VudCkgewogICAgbGlzdGVuZXI/LmVuZFR5cGVMaXN0KGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZVZhcmlhYmxlKFRva2VuIHRva2VuLCBpbnQgaW5kZXgsIFRva2VuIGV4dGVuZHNPclN1cGVyKSB7CiAgICBsaXN0ZW5lcj8uZW5kVHlwZVZhcmlhYmxlKHRva2VuLCBpbmRleCwgZXh0ZW5kc09yU3VwZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlVmFyaWFibGVzKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kVHlwZVZhcmlhYmxlcyhiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gYXNzaWdubWVudE9wZXJhdG9yKSB7CiAgICBsaXN0ZW5lcj8uZW5kVmFyaWFibGVJbml0aWFsaXplcihhc3NpZ25tZW50T3BlcmF0b3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRWYXJpYWJsZXNEZWNsYXJhdGlvbihpbnQgY291bnQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kVmFyaWFibGVzRGVjbGFyYXRpb24oY291bnQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kV2hpbGVTdGF0ZW1lbnQoVG9rZW4gd2hpbGVLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFdoaWxlU3RhdGVtZW50KHdoaWxlS2V5d29yZCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRXaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRXaGlsZVN0YXRlbWVudEJvZHkodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRZaWVsZFN0YXRlbWVudChUb2tlbiB5aWVsZFRva2VuLCBUb2tlbiBzdGFyVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kWWllbGRTdGF0ZW1lbnQoeWllbGRUb2tlbiwgc3RhclRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzT3BlcmF0b3IoVG9rZW4gb3BlcmF0b3IpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVBc09wZXJhdG9yKG9wZXJhdG9yKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzeW5jTW9kaWZpZXIoVG9rZW4gYXN5bmNUb2tlbiwgVG9rZW4gc3RhclRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQXN5bmNNb2RpZmllcihhc3luY1Rva2VuLCBzdGFyVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVCcmVha1N0YXRlbWVudCgKICAgICAgYm9vbCBoYXNUYXJnZXQsIFRva2VuIGJyZWFrS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVCcmVha1N0YXRlbWVudChoYXNUYXJnZXQsIGJyZWFrS2V5d29yZCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDYXNlTWF0Y2goVG9rZW4gY2FzZUtleXdvcmQsIFRva2VuIGNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ2FzZU1hdGNoKGNhc2VLZXl3b3JkLCBjb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNhdGNoQmxvY2soVG9rZW4gb25LZXl3b3JkLCBUb2tlbiBjYXRjaEtleXdvcmQsIFRva2VuIGNvbW1hKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ2F0Y2hCbG9jayhvbktleXdvcmQsIGNhdGNoS2V5d29yZCwgY29tbWEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc0V4dGVuZHMoVG9rZW4gZXh0ZW5kc0tleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDbGFzc0V4dGVuZHMoZXh0ZW5kc0tleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc0hlYWRlcihUb2tlbiBiZWdpbiwgVG9rZW4gY2xhc3NLZXl3b3JkLCBUb2tlbiBuYXRpdmVUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUNsYXNzSGVhZGVyKGJlZ2luLCBjbGFzc0tleXdvcmQsIG5hdGl2ZVRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NOb1dpdGhDbGF1c2UoKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ2xhc3NOb1dpdGhDbGF1c2UoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cygKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIGludCBpbnRlcmZhY2VzQ291bnQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKGltcGxlbWVudHNLZXl3b3JkLCBpbnRlcmZhY2VzQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc1dpdGhDbGF1c2UoVG9rZW4gd2l0aEtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDbGFzc1dpdGhDbGF1c2Uod2l0aEtleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDb21tZW50UmVmZXJlbmNlKAogICAgICBUb2tlbiBuZXdLZXl3b3JkLCBUb2tlbiBwcmVmaXgsIFRva2VuIHBlcmlvZCwgVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDb21tZW50UmVmZXJlbmNlKG5ld0tleXdvcmQsIHByZWZpeCwgcGVyaW9kLCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNvbW1lbnRSZWZlcmVuY2VUZXh0KFN0cmluZyByZWZlcmVuY2VTb3VyY2UsIGludCByZWZlcmVuY2VPZmZzZXQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDb21tZW50UmVmZXJlbmNlVGV4dChyZWZlcmVuY2VTb3VyY2UsIHJlZmVyZW5jZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNvbmRpdGlvbmFsRXhwcmVzc2lvbkNvbG9uKCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUNvbmRpdGlvbmFsRXhwcmVzc2lvbkNvbG9uKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNvbnRpbnVlU3RhdGVtZW50KAogICAgICBib29sIGhhc1RhcmdldCwgVG9rZW4gY29udGludWVLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUNvbnRpbnVlU3RhdGVtZW50KGhhc1RhcmdldCwgY29udGludWVLZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZURpcmVjdGl2ZXNPbmx5KCkgewogICAgbGlzdGVuZXI/LmhhbmRsZURpcmVjdGl2ZXNPbmx5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZURvdHRlZE5hbWUoaW50IGNvdW50LCBUb2tlbiBmaXJzdElkZW50aWZpZXIpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVEb3R0ZWROYW1lKGNvdW50LCBmaXJzdElkZW50aWZpZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFbHNlQ29udHJvbEZsb3coVG9rZW4gZWxzZVRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRWxzZUNvbnRyb2xGbG93KGVsc2VUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUVtcHR5RnVuY3Rpb25Cb2R5KFRva2VuIHNlbWljb2xvbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUVtcHR5RnVuY3Rpb25Cb2R5KHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUVtcHR5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRW1wdHlTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFcnJvclRva2VuKEVycm9yVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVFcnJvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShUb2tlbiBhcnJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkoYXJyb3dUb2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFeHByZXNzaW9uU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRXhwcmVzc2lvblN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUV4dHJhbmVvdXNFeHByZXNzaW9uKFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVFeHRyYW5lb3VzRXhwcmVzc2lvbih0b2tlbiwgbWVzc2FnZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZpbmFsbHlCbG9jayhUb2tlbiBmaW5hbGx5S2V5d29yZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUZpbmFsbHlCbG9jayhmaW5hbGx5S2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckluaXRpYWxpemVyRW1wdHlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVGb3JJbml0aWFsaXplckxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckluTG9vcFBhcnRzKFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIGZvclRva2VuLAogICAgICBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsIFRva2VuIGluS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUZvckluTG9vcFBhcnRzKAogICAgICAgIGF3YWl0VG9rZW4sIGZvclRva2VuLCBsZWZ0UGFyZW50aGVzaXMsIGluS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckxvb3BQYXJ0cyhUb2tlbiBmb3JLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW4sCiAgICAgIFRva2VuIGxlZnRTZXBhcmF0b3IsIGludCB1cGRhdGVFeHByZXNzaW9uQ291bnQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVGb3JMb29wUGFydHMoCiAgICAgICAgZm9yS2V5d29yZCwgbGVmdFBhcmVuLCBsZWZ0U2VwYXJhdG9yLCB1cGRhdGVFeHByZXNzaW9uQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JtYWxQYXJhbWV0ZXJXaXRob3V0VmFsdWUoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVGb3JtYWxQYXJhbWV0ZXJXaXRob3V0VmFsdWUodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkKFRva2VuIHRva2VuLCBib29sIGlzRXhwcmVzc2lvbkJvZHkpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkKHRva2VuLCBpc0V4cHJlc3Npb25Cb2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUlkZW50aWZpZXIodG9rZW4sIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJZGVudGlmaWVyTGlzdChpbnQgY291bnQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJZGVudGlmaWVyTGlzdChjb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUltcG9ydFByZWZpeChUb2tlbiBkZWZlcnJlZEtleXdvcmQsIFRva2VuIGFzS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUltcG9ydFByZWZpeChkZWZlcnJlZEtleXdvcmQsIGFzS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUluZGV4ZWRFeHByZXNzaW9uKAogICAgICBUb2tlbiBvcGVuU3F1YXJlQnJhY2tldCwgVG9rZW4gY2xvc2VTcXVhcmVCcmFja2V0KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW5kZXhlZEV4cHJlc3Npb24ob3BlblNxdWFyZUJyYWNrZXQsIGNsb3NlU3F1YXJlQnJhY2tldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludGVycG9sYXRpb25FeHByZXNzaW9uKFRva2VuIGxlZnRCcmFja2V0LCBUb2tlbiByaWdodEJyYWNrZXQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihsZWZ0QnJhY2tldCwgcmlnaHRCcmFja2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnZhbGlkRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRGdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnZhbGlkRnVuY3Rpb25Cb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZE1lbWJlcihUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUludmFsaWRNZW1iZXIoZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkT3BlcmF0b3JOYW1lKFRva2VuIG9wZXJhdG9yS2V5d29yZCwgVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnZhbGlkT3BlcmF0b3JOYW1lKG9wZXJhdG9yS2V5d29yZCwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkU3RhdGVtZW50KFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnZhbGlkU3RhdGVtZW50KHRva2VuLCBtZXNzYWdlKTsKICB9CgogIHZvaWQgaGFuZGxlSW52YWxpZFRvcExldmVsQmxvY2soVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnZhbGlkVG9wTGV2ZWxCbG9jayh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uKFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24oZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUludmFsaWRUeXBlQXJndW1lbnRzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFR5cGVSZWZlcmVuY2UoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnZhbGlkVHlwZVJlZmVyZW5jZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlzT3BlcmF0b3IoVG9rZW4gaXNPcGVyYXRvciwgVG9rZW4gbm90KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSXNPcGVyYXRvcihpc09wZXJhdG9yLCBub3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMYWJlbChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUxhYmVsKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbEJvb2woVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVMaXRlcmFsQm9vbCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxEb3VibGUoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVMaXRlcmFsRG91YmxlKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbEludChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUxpdGVyYWxJbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsTGlzdCgKICAgICAgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBjb25zdEtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTGl0ZXJhbExpc3QoY291bnQsIGJlZ2luVG9rZW4sIGNvbnN0S2V5d29yZCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsTWFwRW50cnkoVG9rZW4gY29sb24sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTGl0ZXJhbE1hcEVudHJ5KGNvbG9uLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxOdWxsKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTGl0ZXJhbE51bGwodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsU2V0T3JNYXAoCiAgICBpbnQgY291bnQsCiAgICBUb2tlbiBsZWZ0QnJhY2UsCiAgICBUb2tlbiBjb25zdEtleXdvcmQsCiAgICBUb2tlbiByaWdodEJyYWNlLAogICAgLy8gVE9ETyhkYW5ydWJlbCk6IGhhc1NldEVudHJ5IHBhcmFtZXRlciBleGlzdHMgZm9yIHJlcGxpY2F0aW5nIGV4aXN0aW5nCiAgICAvLyBiZWhhdmlvciBhbmQgd2lsbCBiZSByZW1vdmVkIG9uY2UgdW5pZmllZCBjb2xsZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQKICAgIGJvb2wgaGFzU2V0RW50cnksCiAgKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTGl0ZXJhbFNldE9yTWFwKAogICAgICAgIGNvdW50LCBsZWZ0QnJhY2UsIGNvbnN0S2V5d29yZCwgcmlnaHRCcmFjZSwgaGFzU2V0RW50cnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVNaXhpbkhlYWRlcihUb2tlbiBtaXhpbktleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVNaXhpbkhlYWRlcihtaXhpbktleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVNaXhpbk9uKFRva2VuIG9uS2V5d29yZCwgaW50IHR5cGVDb3VudCkgewogICAgbGlzdGVuZXI/LmhhbmRsZU1peGluT24ob25LZXl3b3JkLCB0eXBlQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYW1lZEFyZ3VtZW50KFRva2VuIGNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTmFtZWRBcmd1bWVudChjb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UoVG9rZW4gd2l0aEtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNlKHdpdGhLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlQ2xhdXNlKFRva2VuIG5hdGl2ZVRva2VuLCBib29sIGhhc05hbWUpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOYXRpdmVDbGF1c2UobmF0aXZlVG9rZW4sIGhhc05hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHkoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keShuYXRpdmVUb2tlbiwgc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZChUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZChuYXRpdmVUb2tlbiwgc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5U2tpcHBlZChUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5U2tpcHBlZChuYXRpdmVUb2tlbiwgc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Bcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb0FyZ3VtZW50cyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vQ29tbWVudFJlZmVyZW5jZSgpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb0NvbW1lbnRSZWZlcmVuY2UoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Db25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0ZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb0ZpZWxkSW5pdGlhbGl6ZXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyh0b2tlbiwga2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9GdW5jdGlvbkJvZHkodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0luaXRpYWxpemVycygpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb0luaXRpYWxpemVycygpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb05hbWUoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb05hbWUodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbihUb2tlbiBiYW5nKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9uTnVsbEFzc2VydEV4cHJlc3Npb24oYmFuZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZShUb2tlbiBsYXN0Q29uc3VtZWQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb1R5cGUobGFzdENvbnN1bWVkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9UeXBlQXJndW1lbnRzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9UeXBlVmFyaWFibGVzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9WYXJpYWJsZUluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9WYXJpYWJsZUluaXRpYWxpemVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlT3BlcmF0b3IoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVPcGVyYXRvcih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU9wZXJhdG9yTmFtZShUb2tlbiBvcGVyYXRvcktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlT3BlcmF0b3JOYW1lKG9wZXJhdG9yS2V5d29yZCwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlUGFyZW50aGVzaXplZENvbmRpdGlvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlUGFyZW50aGVzaXplZEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVRdWFsaWZpZWQoVG9rZW4gcGVyaW9kKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlUXVhbGlmaWVkKHBlcmlvZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgVG9rZW4gc3RhcnRUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGlmIChmb3J3YXJkRXJyb3JzKSB7CiAgICAgIGxpc3RlbmVyPy5oYW5kbGVSZWNvdmVyYWJsZUVycm9yKG1lc3NhZ2UsIHN0YXJ0VG9rZW4sIGVuZFRva2VuKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3ZlckNsYXNzSGVhZGVyKCkgewogICAgbGlzdGVuZXI/LmhhbmRsZVJlY292ZXJDbGFzc0hlYWRlcigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVySW1wb3J0KFRva2VuIHNlbWljb2xvbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVJlY292ZXJJbXBvcnQoc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3Zlck1peGluSGVhZGVyKCkgewogICAgbGlzdGVuZXI/LmhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTY3JpcHQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVTY3JpcHQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTZW5kKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlU2VuZChiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNwcmVhZEV4cHJlc3Npb24oVG9rZW4gc3ByZWFkVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVTcHJlYWRFeHByZXNzaW9uKHNwcmVhZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nSnV4dGFwb3NpdGlvbihpbnQgbGl0ZXJhbENvdW50KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlU3RyaW5nSnV4dGFwb3NpdGlvbihsaXRlcmFsQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdHJpbmdQYXJ0KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlU3RyaW5nUGFydCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN1cGVyRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgbGlzdGVuZXI/LmhhbmRsZVN1cGVyRXhwcmVzc2lvbih0b2tlbiwgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN5bWJvbFZvaWQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVTeW1ib2xWb2lkKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVGhpc0V4cHJlc3Npb24oVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVUaGlzRXhwcmVzc2lvbih0b2tlbiwgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVRocm93RXhwcmVzc2lvbihUb2tlbiB0aHJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVRocm93RXhwcmVzc2lvbih0aHJvd1Rva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVR5cGUoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVHlwZShiZWdpblRva2VuLCBxdWVzdGlvbk1hcmspOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUeXBlVmFyaWFibGVzRGVmaW5lZChUb2tlbiB0b2tlbiwgaW50IGNvdW50KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVHlwZVZhcmlhYmxlc0RlZmluZWQodG9rZW4sIGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVW5hcnlQb3N0Zml4QXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVVbmFyeVByZWZpeEFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVW5hcnlQcmVmaXhFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVW5hcnlQcmVmaXhFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBsb2NhdGlvbiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewogICAgbGlzdGVuZXI/LmhhbmRsZVVuZXNjYXBlRXJyb3IobWVzc2FnZSwgbG9jYXRpb24sIG9mZnNldCwgbGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIGVxdWFscywgVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVWYWx1ZWRGb3JtYWxQYXJhbWV0ZXIoZXF1YWxzLCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVZvaWRLZXl3b3JkKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVm9pZEtleXdvcmQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dF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KioEAQwsLAQBDCwsBAEMMjIEAQwlJQQBDEA6BAEMMzMEAQw0NAQBDCcnBAEMHzsZRwYEAQwkKgQBDC4uBAEMJCoEAQwjIwQBDDYwBAEMMzMEAQw1NwQBDCcnBAEMRzUEAQwnJwQBDEY0BAEMQTsEAQw6NAQBDDw4BAEMPT0EAQw8PAQBDDIyBAEMHEFGBAEMQDoEAQwoKAQBDB8eBAEMNzcEAQw9PQQBDD09BAIBO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZm9yd2FyZGluZ19saXN0ZW5lci5kYXJ0Q3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvbGl0ZXJhbF9lbnRyeV9pbmZvLmRhcnSLHC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JzsKaW1wb3J0ICdpZGVudGlmaWVyX2NvbnRleHQuZGFydCc7CmltcG9ydCAnbGl0ZXJhbF9lbnRyeV9pbmZvX2ltcGwuZGFydCc7CmltcG9ydCAncGFyc2VyLmRhcnQnOwppbXBvcnQgJ3V0aWwuZGFydCc7CgovLy8gW3NpbXBsZUVudHJ5XSBpcyB0aGUgZmlyc3Qgc3RlcCBmb3IgcGFyc2luZyBhIGxpdGVyYWwgZW50cnkKLy8vIHdpdGhvdXQgYW55IGNvbnRyb2wgZmxvdyBvciBzcHJlYWQgY29sbGVjdGlvbiBvcGVyYXRvci4KY29uc3QgTGl0ZXJhbEVudHJ5SW5mbyBzaW1wbGVFbnRyeSA9IGNvbnN0IExpdGVyYWxFbnRyeUluZm8odHJ1ZSwgMCk7CgovLy8gW0xpdGVyYWxFbnRyeUluZm9dIHJlcHJlc2VudHMgc3RlcHMgZm9yIHByb2Nlc3NpbmcgYW4gZW50cnkKLy8vIGluIGEgbGl0ZXJhbCBsaXN0LCBtYXAsIG9yIHNldC4gVGhlc2Ugc3RlcHMgd2lsbCBoYW5kbGUgcGFyc2luZwovLy8gYm90aCBjb250cm9sIGZsb3cgYW5kIHNwcmVhZGFibGUgb3BlcmF0b3JzLCBhbmQgaW5kaWNhdGUKLy8vIHdoZW4gdGhlIGNsaWVudCBzaG91bGQgcGFyc2UgdGhlIGxpdGVyYWwgZW50cnkuCi8vLwovLy8gQ2xpZW50cyBzaG91bGQgcGFyc2UgYSBzaW5nbGUgZW50cnkgaW4gYSBsaXN0LCBzZXQsIG9yIG1hcCBsaWtlIHRoaXM6Ci8vLyBgYGAKLy8vICAgIExpdGVyYWxFbnRyeUluZm8gaW5mbyA9IGNvbXB1dGVMaXRlcmFsRW50cnkodG9rZW4pOwovLy8gICAgd2hpbGUgKGluZm8gIT0gbnVsbCkgewovLy8gICAgICBpZiAoaW5mby5oYXNFbnRyeSkgewovLy8gICAgICAgIC4uLiBwYXJzZSBleHByZXNzaW9uIChgOmAgZXhwcmVzc2lvbik/IC4uLgovLy8gICAgICAgIHRva2VuID0gbGFzdENvbnN1bWVkVG9rZW47Ci8vLyAgICAgIH0gZWxzZSB7Ci8vLyAgICAgICAgdG9rZW4gPSBpbmZvLnBhcnNlKHRva2VuLCBwYXJzZXIpOwovLy8gICAgICB9Ci8vLyAgICAgIGluZm8gPSBpbmZvLmNvbXB1dGVOZXh0KHRva2VuKTsKLy8vICAgIH0KLy8vIGBgYApjbGFzcyBMaXRlcmFsRW50cnlJbmZvIHsKICAvLy8gYHRydWVgIGlmIGFuIGVudHJ5IHNob3VsZCBiZSBwYXJzZWQgYnkgdGhlIGNhbGxlcgogIC8vLyBvciBgZmFsc2VgIGlmIHRoaXMgb2JqZWN0J3MgW3BhcnNlXSBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZC4KICBmaW5hbCBib29sIGhhc0VudHJ5OwoKICAvLy8gVXNlZCBmb3IgcmVjb3ZlcnksIHRoaXMgaW5kaWNhdGVzCiAgLy8vICsxIGZvciBhbiBgaWZgIGNvbmRpdGlvbiBhbmQgLTEgZm9yIGBlbHNlYC4KICBmaW5hbCBpbnQgaWZDb25kaXRpb25EZWx0YTsKCiAgY29uc3QgTGl0ZXJhbEVudHJ5SW5mbyh0aGlzLmhhc0VudHJ5LCB0aGlzLmlmQ29uZGl0aW9uRGVsdGEpOwoKICAvLy8gUGFyc2UgdGhlIGNvbnRyb2wgZmxvdyBhbmQgc3ByZWFkIGNvbGxlY3Rpb24gYXNwZWN0cyBvZiB0aGlzIGVudHJ5LgogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICB0aHJvdyBoYXNFbnRyeQogICAgICAgID8gJ0ludGVybmFsIEVycm9yOiBzaG91bGQgbm90IGNhbGwgcGFyc2UnCiAgICAgICAgOiAnSW50ZXJuYWwgRXJyb3I6ICRydW50aW1lVHlwZSBzaG91bGQgaW1wbGVtZW50IHBhcnNlJzsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBuZXh0IHN0ZXAgd2hlbiBwYXJzaW5nIGFuIGVudHJ5IG9yIGBudWxsYCBpZiBub25lLgogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pID0+IG51bGw7Cn0KCi8vLyBDb21wdXRlIHRoZSBbTGl0ZXJhbEVudHJ5SW5mb10gZm9yIHRoZSBsaXRlcmFsIGxpc3QsIG1hcCwgb3Igc2V0IGVudHJ5LgpMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVMaXRlcmFsRW50cnkoVG9rZW4gdG9rZW4pIHsKICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICBpZiAob3B0aW9uYWwoJ2lmJywgbmV4dCkpIHsKICAgIHJldHVybiBpZkNvbmRpdGlvbjsKICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdmb3InLCBuZXh0KSB8fAogICAgICAob3B0aW9uYWwoJ2F3YWl0JywgbmV4dCkgJiYgb3B0aW9uYWwoJ2ZvcicsIG5leHQubmV4dCkpKSB7CiAgICByZXR1cm4gbmV3IEZvckNvbmRpdGlvbigpOwogIH0gZWxzZSBpZiAob3B0aW9uYWwoJy4uLicsIG5leHQpIHx8IG9wdGlvbmFsKCcuLi4/JywgbmV4dCkpIHsKICAgIHJldHVybiBzcHJlYWRPcGVyYXRvcjsKICB9CiAgcmV0dXJuIHNpbXBsZUVudHJ5Owp9CgovLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gW3Rva2VuXSBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIHRoZSBzdGFydCBvZgovLy8gYSBsaXRlcmFsIGVudHJ5IGluIGEgbGlzdCwgc2V0LCBvciBtYXAgZm9yIHRoZSBwdXJwb3NlcyBvZiByZWNvdmVyeS4KYm9vbCBsb29rc0xpa2VMaXRlcmFsRW50cnkoVG9rZW4gdG9rZW4pID0+CiAgICBsb29rc0xpa2VFeHByZXNzaW9uU3RhcnQodG9rZW4pIHx8CiAgICBvcHRpb25hbCgnLi4uJywgdG9rZW4pIHx8CiAgICBvcHRpb25hbCgnLi4uPycsIHRva2VuKSB8fAogICAgb3B0aW9uYWwoJ2lmJywgdG9rZW4pIHx8CiAgICBvcHRpb25hbCgnZm9yJywgdG9rZW4pIHx8CiAgICAob3B0aW9uYWwoJ2F3YWl0JywgdG9rZW4pICYmIG9wdGlvbmFsKCdmb3InLCB0b2tlbi5uZXh0KSk7Ck8ATU48ARoiJxYUAUA8RgFARD00BEoIOx4eNiYSLgspCQgZOEMXASgyHgFAAUosEzJBBAFFNQIBTDQbHhgmQR9AGwQWAgFLSSsnHh8dHj8BOnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbGl0ZXJhbF9lbnRyeV9pbmZvLmRhcnQ7c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9sb29wX3N0YXRlLmRhcnSBhS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci5sb29wX3N0YXRlOwoKZW51bSBMb29wU3RhdGUgewogIE91dHNpZGVMb29wLAogIEluc2lkZVN3aXRjaCwgLy8gYGJyZWFrYCBzdGF0ZW1lbnQgYWxsb3dlZAogIEluc2lkZUxvb3AsIC8vIGBicmVha2AgYW5kIGBjb250aW51ZWAgc3RhdGVtZW50cyBhbGxvd2VkCn0KDQBOTjwBIQERDy07AgEycGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9sb29wX3N0YXRlLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9tb2RpZmllcl9jb250ZXh0LmRhcnS7tS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBLZXl3b3JkLCBUb2tlbjsKaW1wb3J0ICcuLi9tZXNzYWdlcy5kYXJ0JyBhcyBmYXN0YTsKaW1wb3J0ICdmb3JtYWxfcGFyYW1ldGVyX2tpbmQuZGFydCc7CmltcG9ydCAnbWVtYmVyX2tpbmQuZGFydCcgc2hvdyBNZW1iZXJLaW5kOwppbXBvcnQgJ3BhcnNlci5kYXJ0JyBzaG93IFBhcnNlcjsKaW1wb3J0ICd1dGlsLmRhcnQnIHNob3cgb3B0aW9uYWw7Cgpib29sIGlzTW9kaWZpZXIoVG9rZW4gdG9rZW4pIHsKICBpZiAoIXRva2VuLmlzTW9kaWZpZXIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9IGVsc2UgaWYgKHRva2VuLnR5cGUuaXNCdWlsdEluKSB7CiAgICAvLyBBIGJ1aWx0LWluIGtleXdvcmQgY2FuIG9ubHkgYmUgYSBtb2RpZmllciBhcyBsb25nIGFzIGl0IGlzCiAgICAvLyBmb2xsb3dlZCBieSBhbm90aGVyIGtleXdvcmQgb3IgYW4gaWRlbnRpZmllci4gT3RoZXJ3aXNlLCBpdCBpcyB0aGUKICAgIC8vIGlkZW50aWZpZXIuCiAgICAvLwogICAgLy8gRm9yIGV4YW1wbGUsIGBleHRlcm5hbGAgaXMgYSBtb2RpZmllciBpbiB0aGlzIGRlY2xhcmF0aW9uOgogICAgLy8gICBleHRlcm5hbCBGb28gZm9vKCk7CiAgICAvLyBidXQgaXMgdGhlIGlkZW50aWZpZXIgaW4gdGhpcyBkZWNsYXJhdGlvbgogICAgLy8gICBleHRlcm5hbCgpID0+IHRydWU7CiAgICAvLyBhbmQgaW4KICAgIC8vICAgZm9yIChmaW5hbCBleHRlcm5hbCBpbiBsaXN0KSB7IH0KICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgS2V5d29yZCBrZXl3b3JkID0gbmV4dC5rZXl3b3JkOwogICAgaWYgKGtleXdvcmQgPT0gbnVsbCAmJiAhbmV4dC5pc0lkZW50aWZpZXIgfHwga2V5d29yZCA9PSBLZXl3b3JkLklOKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgcmV0dXJuIHRydWU7Cn0KCi8vLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcGFyc2UgbW9kaWZpZXJzIGluIG1vc3QgbG9jYXRpb25zIHdoZXJlIG1vZGlmaWVycwovLy8gY2FuIG9jY3VyLCBidXQgZG9lcyBub3QgY2FsbCBoYW5kbGVNb2RpZmllciBvciBoYW5kbGVNb2RpZmllcnMuCmNsYXNzIE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0IHsKICBmaW5hbCBQYXJzZXIgcGFyc2VyOwogIFRva2VuIGFic3RyYWN0VG9rZW47CiAgVG9rZW4gY29uc3RUb2tlbjsKICBUb2tlbiBjb3ZhcmlhbnRUb2tlbjsKICBUb2tlbiBleHRlcm5hbFRva2VuOwogIFRva2VuIGZpbmFsVG9rZW47CiAgVG9rZW4gbGF0ZVRva2VuOwogIFRva2VuIHJlcXVpcmVkVG9rZW47CiAgVG9rZW4gc3RhdGljVG9rZW47CiAgVG9rZW4gdmFyVG9rZW47CgogIC8vIFNldCBgdHJ1ZWAgd2hlbiBwYXJzaW5nIG1vZGlmaWVycyBhZnRlciB0aGUgYGZhY3RvcnlgIHRva2VuLgogIGJvb2wgYWZ0ZXJGYWN0b3J5ID0gZmFsc2U7CgogIC8vIFRPRE8oZGFucnViZWwpOiBSZXBsYWNlIFtNb2RpZmllclJlY292ZXJ5Q29udGV4dF0gYW5kIFtNb2RpZmllckNvbnRleHRdCiAgLy8gd2l0aCB0aGlzIGNsYXNzLgoKICBNb2RpZmllclJlY292ZXJ5Q29udGV4dCh0aGlzLnBhcnNlcik7CgogIHNldCBzdGF0aWNPckNvdmFyaWFudChUb2tlbiBzdGF0aWNPckNvdmFyaWFudCkgewogICAgaWYgKHN0YXRpY09yQ292YXJpYW50ID09IG51bGwpIHsKICAgICAgY292YXJpYW50VG9rZW4gPSBudWxsOwogICAgICBzdGF0aWNUb2tlbiA9IG51bGw7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdjb3ZhcmlhbnQnLCBzdGF0aWNPckNvdmFyaWFudCkpIHsKICAgICAgY292YXJpYW50VG9rZW4gPSBzdGF0aWNPckNvdmFyaWFudDsKICAgICAgc3RhdGljVG9rZW4gPSBudWxsOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnc3RhdGljJywgc3RhdGljT3JDb3ZhcmlhbnQpKSB7CiAgICAgIGNvdmFyaWFudFRva2VuID0gbnVsbDsKICAgICAgc3RhdGljVG9rZW4gPSBzdGF0aWNPckNvdmFyaWFudDsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvcjogIgogICAgICAgICAgIlVuZXhwZWN0ZWQgc3RhdGljT3JDb3ZhcmlhbnQgJyRzdGF0aWNPckNvdmFyaWFudCcuIjsKICAgIH0KICB9CgogIFRva2VuIGdldCB2YXJGaW5hbE9yQ29uc3QgPT4gdmFyVG9rZW4gPz8gZmluYWxUb2tlbiA/PyBjb25zdFRva2VuOwoKICBzZXQgdmFyRmluYWxPckNvbnN0KFRva2VuIHZhckZpbmFsT3JDb25zdCkgewogICAgaWYgKHZhckZpbmFsT3JDb25zdCA9PSBudWxsKSB7CiAgICAgIHZhclRva2VuID0gbnVsbDsKICAgICAgZmluYWxUb2tlbiA9IG51bGw7CiAgICAgIGNvbnN0VG9rZW4gPSBudWxsOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgndmFyJywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICB2YXJUb2tlbiA9IHZhckZpbmFsT3JDb25zdDsKICAgICAgZmluYWxUb2tlbiA9IG51bGw7CiAgICAgIGNvbnN0VG9rZW4gPSBudWxsOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnZmluYWwnLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgIHZhclRva2VuID0gbnVsbDsKICAgICAgZmluYWxUb2tlbiA9IHZhckZpbmFsT3JDb25zdDsKICAgICAgY29uc3RUb2tlbiA9IG51bGw7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdjb25zdCcsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgdmFyVG9rZW4gPSBudWxsOwogICAgICBmaW5hbFRva2VuID0gbnVsbDsKICAgICAgY29uc3RUb2tlbiA9IHZhckZpbmFsT3JDb25zdDsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvcjogVW5leHBlY3RlZCB2YXJGaW5hbE9yQ29uc3QgJyR2YXJGaW5hbE9yQ29uc3QnLiI7CiAgICB9CiAgfQoKICAvLy8gUGFyc2UgbW9kaWZpZXJzIGZvciBjbGFzcyBtZXRob2RzIGFuZCBmaWVsZHMuCiAgVG9rZW4gcGFyc2VDbGFzc01lbWJlck1vZGlmaWVycyhUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSBwYXJzZU1vZGlmaWVycyh0b2tlbik7CiAgICBpZiAoYWJzdHJhY3RUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgYWJzdHJhY3RUb2tlbiwgZmFzdGEubWVzc2FnZUFic3RyYWN0Q2xhc3NNZW1iZXIpOwogICAgfQogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKHJlcXVpcmVkVG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIG1vZGlmaWVycyBmb3IgZm9ybWFsIHBhcmFtZXRlcnMuCiAgVG9rZW4gcGFyc2VGb3JtYWxQYXJhbWV0ZXJNb2RpZmllcnMoCiAgICAgIFRva2VuIHRva2VuLCBGb3JtYWxQYXJhbWV0ZXJLaW5kIHBhcmFtZXRlcktpbmQsIE1lbWJlcktpbmQgbWVtYmVyS2luZCkgewogICAgdG9rZW4gPSBwYXJzZU1vZGlmaWVycyh0b2tlbik7CgogICAgaWYgKHBhcmFtZXRlcktpbmQgIT0gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkKSB7CiAgICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihyZXF1aXJlZFRva2VuKTsKICAgIH0KICAgIGlmIChtZW1iZXJLaW5kID09IE1lbWJlcktpbmQuU3RhdGljTWV0aG9kIHx8CiAgICAgICAgbWVtYmVyS2luZCA9PSBNZW1iZXJLaW5kLlRvcExldmVsTWV0aG9kKSB7CiAgICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcih0aGlzLmNvdmFyaWFudFRva2VuKTsKICAgICAgdGhpcy5jb3ZhcmlhbnRUb2tlbiA9IG51bGw7CiAgICB9CiAgICBpZiAoY29uc3RUb2tlbiAhPSBudWxsKSB7CiAgICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihjb25zdFRva2VuKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyS2luZCA9PSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCkgewogICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VGdW5jdGlvblR5cGVkUGFyYW1ldGVyVmFyKTsKICAgICAgfQogICAgfQogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGFic3RyYWN0VG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGV4dGVybmFsVG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGxhdGVUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoc3RhdGljVG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIG1vZGlmaWVycyBhZnRlciB0aGUgYGZhY3RvcnlgIHRva2VuLgogIFRva2VuIHBhcnNlTW9kaWZpZXJzQWZ0ZXJGYWN0b3J5KFRva2VuIHRva2VuKSB7CiAgICBhZnRlckZhY3RvcnkgPSB0cnVlOwogICAgdG9rZW4gPSBwYXJzZU1vZGlmaWVycyh0b2tlbik7CiAgICBpZiAoYWJzdHJhY3RUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgYWJzdHJhY3RUb2tlbiwgZmFzdGEubWVzc2FnZUFic3RyYWN0Q2xhc3NNZW1iZXIpOwogICAgfQogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGxhdGVUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIocmVxdWlyZWRUb2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2UgbW9kaWZpZXJzIGZvciB0b3AgbGV2ZWwgZnVuY3Rpb25zIGFuZCBmaWVsZHMuCiAgVG9rZW4gcGFyc2VUb3BMZXZlbE1vZGlmaWVycyhUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSBwYXJzZU1vZGlmaWVycyh0b2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoYWJzdHJhY3RUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoY292YXJpYW50VG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKHJlcXVpcmVkVG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKHN0YXRpY1Rva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSBtb2RpZmllcnMgZm9yIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KICBUb2tlbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25Nb2RpZmllcnMoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gcGFyc2VNb2RpZmllcnModG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGFic3RyYWN0VG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGNvdmFyaWFudFRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihleHRlcm5hbFRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihyZXF1aXJlZFRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihzdGF0aWNUb2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2UgbW9kaWZpZXJzIGR1cmluZyByZWNvdmVyeSB3aGVuIG1vZGlmaWVycyBhcmUgb3V0IG9mIG9yZGVyCiAgLy8vIG9yIGludmFsaWQuIFR5cGljYWxseSBjbGllbnRzIGNhbGwgbWV0aG9kcyBsaWtlCiAgLy8vIFtwYXJzZUNsYXNzTWVtYmVyTW9kaWZpZXJzXSB3aGljaCBpbiB0dXJuIGNhbGxzIHRoaXMgbWV0aG9kLAogIC8vLyByYXRoZXIgdGhhbiBjYWxsaW5nIHRoaXMgbWV0aG9kIGRpcmVjdGx5LgogIC8vLwogIC8vLyBUaGUgdmFyaW91cyBtb2RpZmllciB0b2tlbiBwYXJhbWV0ZXJzIHJlcHJlc2VudCB0b2tlbnMgb2YgbW9kaWZpZXJzCiAgLy8vIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkIHByaW9yIHRvIHJlY292ZXJ5LiBUaGUgW3N0YXRpY09yQ292YXJpYW50XQogIC8vLyBwYXJhbWV0ZXIgaXMgZm9yIGNvbnZlbmllbmNlIGlmIGNhbGxlciBoYXMgYSB0b2tlbiB0aGF0IG1heSBiZSBlaXRoZXIKICAvLy8gYHN0YXRpY2Agb3IgYGNvdmFyaWFudGAuIFRoZSBmaXJzdCBub24tbnVsbCBwYXJhbWV0ZXIgb2YKICAvLy8gW3N0YXRpY09yQ292YXJpYW50XSwgW3N0YXRpY1Rva2VuXSwgb3IgW2NvdmFyaWFudFRva2VuXSB3aWxsIGJlIHVzZWQsCiAgLy8vIGluIHRoYXQgb3JkZXIsIGFuZCB0aGUgb3RoZXJzIGlnbm9yZWQuCiAgVG9rZW4gcGFyc2VNb2RpZmllcnMoVG9rZW4gdG9rZW4pIHsKICAgIC8vIFByb2Nlc3MgaW52YWxpZCBhbmQgb3V0LW9mLW9yZGVyIG1vZGlmaWVycwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBmaW5hbCB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgICAgaWYgKGlkZW50aWNhbCgnYWJzdHJhY3QnLCB2YWx1ZSkpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VBYnN0cmFjdCh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJ2NvbnN0JywgdmFsdWUpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlQ29uc3QodG9rZW4pOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdjb3ZhcmlhbnQnLCB2YWx1ZSkpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VDb3ZhcmlhbnQodG9rZW4pOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdleHRlcm5hbCcsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUV4dGVybmFsKHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgnZmluYWwnLCB2YWx1ZSkpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VGaW5hbCh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJ2xhdGUnLCB2YWx1ZSkpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VMYXRlKHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgncmVxdWlyZWQnLCB2YWx1ZSkpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VSZXF1aXJlZCh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJ3N0YXRpYycsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZVN0YXRpYyh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJ3ZhcicsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZVZhcih0b2tlbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93ICdJbnRlcm5hbCBFcnJvcjogVW5oYW5kbGVkIG1vZGlmaWVyOiAkdmFsdWUnOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChhZnRlckZhY3RvcnkgJiYgaWRlbnRpY2FsKCdmYWN0b3J5JywgdmFsdWUpKSB7CiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyKTsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUFic3RyYWN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnYWJzdHJhY3QnLCBuZXh0KSk7CiAgICBpZiAoYWJzdHJhY3RUb2tlbiA9PSBudWxsKSB7CiAgICAgIGFic3RyYWN0VG9rZW4gPSBuZXh0OwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZUNvbnN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnY29uc3QnLCBuZXh0KSk7CiAgICBpZiAodmFyRmluYWxPckNvbnN0ID09IG51bGwgJiYgY292YXJpYW50VG9rZW4gPT0gbnVsbCkgewogICAgICBjb25zdFRva2VuID0gbmV4dDsKCiAgICAgIGlmIChhZnRlckZhY3RvcnkpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgJ2ZhY3RvcnknKTsKICAgICAgfSBlbHNlIGlmIChsYXRlVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydENvbmZsaWN0aW5nTW9kaWZpZXJzKG5leHQsIGxhdGVUb2tlbik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICB9IGVsc2UgaWYgKGNvdmFyaWFudFRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgY292YXJpYW50VG9rZW4pOwogICAgfSBlbHNlIGlmIChmaW5hbFRva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUNvbnN0QW5kRmluYWwpOwogICAgfSBlbHNlIGlmICh2YXJUb2tlbiAhPSBudWxsKSB7CiAgICAgIHJlcG9ydENvbmZsaWN0aW5nTW9kaWZpZXJzKG5leHQsIHZhclRva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICdJbnRlcm5hbCBFcnJvcjogVW5leHBlY3RlZCB2YXJGaW5hbE9yQ29uc3Q6ICR2YXJGaW5hbE9yQ29uc3QnOwogICAgfQogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZUNvdmFyaWFudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2NvdmFyaWFudCcsIG5leHQpKTsKICAgIGlmIChjb25zdFRva2VuID09IG51bGwgJiYKICAgICAgICBjb3ZhcmlhbnRUb2tlbiA9PSBudWxsICYmCiAgICAgICAgc3RhdGljVG9rZW4gPT0gbnVsbCAmJgogICAgICAgICFhZnRlckZhY3RvcnkpIHsKICAgICAgY292YXJpYW50VG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgdmFyVG9rZW4ubGV4ZW1lKTsKICAgICAgfSBlbHNlIGlmIChmaW5hbFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgZmluYWxUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKG5leHQsIGxhdGVUb2tlbi5sZXhlbWUpOwogICAgICB9CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihuZXh0KTsKICAgIH0gZWxzZSBpZiAoY29uc3RUb2tlbiAhPSBudWxsKSB7CiAgICAgIHJlcG9ydENvbmZsaWN0aW5nTW9kaWZpZXJzKG5leHQsIGNvbnN0VG9rZW4pOwogICAgfSBlbHNlIGlmIChzdGF0aWNUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VDb3ZhcmlhbnRBbmRTdGF0aWMpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJ0ludGVybmFsIEVycm9yOiBVbmhhbmRsZWQgcmVjb3Zlcnk6ICRuZXh0JzsKICAgIH0KICAgIHJldHVybiBuZXh0OwogIH0KCiAgVG9rZW4gcGFyc2VFeHRlcm5hbChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2V4dGVybmFsJywgbmV4dCkpOwogICAgaWYgKGV4dGVybmFsVG9rZW4gPT0gbnVsbCkgewogICAgICBleHRlcm5hbFRva2VuID0gbmV4dDsKCiAgICAgIGlmIChhZnRlckZhY3RvcnkpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgJ2ZhY3RvcnknKTsKICAgICAgfSBlbHNlIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgY29uc3RUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKHN0YXRpY1Rva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgc3RhdGljVG9rZW4ubGV4ZW1lKTsKICAgICAgfSBlbHNlIGlmIChsYXRlVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBsYXRlVG9rZW4ubGV4ZW1lKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZUZpbmFsKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZmluYWwnLCBuZXh0KSk7CiAgICBpZiAodmFyRmluYWxPckNvbnN0ID09IG51bGwgJiYgIWFmdGVyRmFjdG9yeSkgewogICAgICBmaW5hbFRva2VuID0gbmV4dDsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChmaW5hbFRva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICB9IGVsc2UgaWYgKGFmdGVyRmFjdG9yeSkgewogICAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIobmV4dCk7CiAgICB9IGVsc2UgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlQ29uc3RBbmRGaW5hbCk7CiAgICB9IGVsc2UgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUZpbmFsQW5kVmFyKTsKICAgIH0gZWxzZSBpZiAobGF0ZVRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKG5leHQsIGxhdGVUb2tlbi5sZXhlbWUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJ0ludGVybmFsIEVycm9yOiBVbmV4cGVjdGVkIHZhckZpbmFsT3JDb25zdDogJHZhckZpbmFsT3JDb25zdCc7CiAgICB9CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlTGF0ZShUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2xhdGUnLCBuZXh0KSk7CiAgICBpZiAobGF0ZVRva2VuID09IG51bGwpIHsKICAgICAgbGF0ZVRva2VuID0gbmV4dDsKCiAgICAgIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRDb25mbGljdGluZ01vZGlmaWVycyhuZXh0LCBjb25zdFRva2VuKTsKICAgICAgfSBlbHNlIGlmICh2YXJUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgdmFyVG9rZW4pOwogICAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBmaW5hbFRva2VuLmxleGVtZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyKTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgVG9rZW4gcGFyc2VSZXF1aXJlZChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3JlcXVpcmVkJywgbmV4dCkpOwogICAgaWYgKHJlcXVpcmVkVG9rZW4gPT0gbnVsbCkgewogICAgICByZXF1aXJlZFRva2VuID0gbmV4dDsKCiAgICAgIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIocmVxdWlyZWRUb2tlbiwgY29uc3RUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGNvdmFyaWFudFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIocmVxdWlyZWRUb2tlbiwgY292YXJpYW50VG9rZW4ubGV4ZW1lKTsKICAgICAgfSBlbHNlIGlmIChmaW5hbFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIocmVxdWlyZWRUb2tlbiwgZmluYWxUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIocmVxdWlyZWRUb2tlbiwgdmFyVG9rZW4ubGV4ZW1lKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZVN0YXRpYyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3N0YXRpYycsIG5leHQpKTsKICAgIGlmIChjb3ZhcmlhbnRUb2tlbiA9PSBudWxsICYmIHN0YXRpY1Rva2VuID09IG51bGwgJiYgIWFmdGVyRmFjdG9yeSkgewogICAgICBzdGF0aWNUb2tlbiA9IG5leHQ7CgogICAgICBpZiAoY29uc3RUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKG5leHQsIGNvbnN0VG9rZW4ubGV4ZW1lKTsKICAgICAgfSBlbHNlIGlmIChmaW5hbFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgZmluYWxUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgdmFyVG9rZW4ubGV4ZW1lKTsKICAgICAgfSBlbHNlIGlmIChsYXRlVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBsYXRlVG9rZW4ubGV4ZW1lKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGNvdmFyaWFudFRva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUNvdmFyaWFudEFuZFN0YXRpYyk7CiAgICB9IGVsc2UgaWYgKHN0YXRpY1Rva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICB9IGVsc2UgaWYgKGFmdGVyRmFjdG9yeSkgewogICAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIobmV4dCk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAnSW50ZXJuYWwgRXJyb3I6IFVuaGFuZGxlZCByZWNvdmVyeTogJG5leHQnOwogICAgfQogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZVZhcihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3ZhcicsIG5leHQpKTsKICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgPT0gbnVsbCAmJiAhYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIHZhclRva2VuID0gbmV4dDsKCiAgICAgIGlmIChsYXRlVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydENvbmZsaWN0aW5nTW9kaWZpZXJzKG5leHQsIGxhdGVUb2tlbik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmICh2YXJUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgfSBlbHNlIGlmIChhZnRlckZhY3RvcnkpIHsKICAgICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKG5leHQpOwogICAgfSBlbHNlIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgY29uc3RUb2tlbik7CiAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRmluYWxBbmRWYXIpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJ0ludGVybmFsIEVycm9yOiBVbmV4cGVjdGVkIHZhckZpbmFsT3JDb25zdDogJHZhckZpbmFsT3JDb25zdCc7CiAgICB9CiAgICByZXR1cm4gbmV4dDsKICB9CgogIHZvaWQgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMoVG9rZW4gbW9kaWZpZXIsIFRva2VuIGVhcmxpZXJNb2RpZmllcikgewogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgbW9kaWZpZXIsCiAgICAgICAgZmFzdGEudGVtcGxhdGVDb25mbGljdGluZ01vZGlmaWVycwogICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhtb2RpZmllci5sZXhlbWUsIGVhcmxpZXJNb2RpZmllci5sZXhlbWUpKTsKICB9CgogIHZvaWQgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKFRva2VuIG1vZGlmaWVyKSB7CiAgICBpZiAobW9kaWZpZXIgIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG1vZGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICB9CiAgfQoKICB2b2lkIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihUb2tlbiBtb2RpZmllciwgU3RyaW5nIGJlZm9yZU1vZGlmaWVyKSB7CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICBtb2RpZmllciwKICAgICAgICBmYXN0YS50ZW1wbGF0ZU1vZGlmaWVyT3V0T2ZPcmRlcgogICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhtb2RpZmllci5sZXhlbWUsIGJlZm9yZU1vZGlmaWVyKSk7CiAgfQp9CoHdAE5OPAE3JCUrIiIBHxsSJUJKEwdCHTEdDiodJEoUBgQPAgFMRCAXFxQYFxQTFxUSAUIdAU0WASgBMyUdGjsqGjgdJw0fQAYEAUUBLyMXGRkzIhkZNRckGTUXGSQNTgYEATQxIyElPAYtEgQBLSdPIwE+LwYxMzUiBh4sQyUnRggGLS0pKxIEATEyGSMhJTwGKS0SBAE6LiMtLi0rEgQBMTkjLS4tLSsSBAFGNkMwBkpPTD9MLSYyHRMmHiwoMCU0KTMoMCUvJDMoMSYuIxE+CkAwNRYPDwgZBhIEASUdKCEcEwYBECwxEQQBIh0lPRkBGjMmNQgTBgEQHi4zKTglRyMyDUwGEQQBJh0pHiIfGR0BHjknOyY6CBMGARAiLjMfJiU0JkwNOQYRBAElHSghHAEaMyc7KDwmOggTBgEQLDERBAEiHSU0GRMGARAeLjMfJiVHI0UkOA1MBhEEASEdJB0YASA2JTQnOwgTBgEQLDERBAElHSghHAEgRCtIJ0QlQggTBgEQLDERBAEjHSZKGgEgOyc7JTkmOggTBgEQIkwmLjMfJg05BhEEASAdIzQXAR81CBMGARAcLjMfJiU0JUUNTAYRBAFLIxIrRgQBMhwuNwYEAUkjEik+BAIBOHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbW9kaWZpZXJfY29udGV4dC5kYXJ0Q3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvcmVjb3ZlcnlfbGlzdGVuZXJzLmRhcnSJ6C8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnZm9yd2FyZGluZ19saXN0ZW5lci5kYXJ0JyBzaG93IEZvcndhcmRpbmdMaXN0ZW5lcjsKCmNsYXNzIENsYXNzSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lciBleHRlbmRzIEZvcndhcmRpbmdMaXN0ZW5lciB7CiAgVG9rZW4gZXh0ZW5kc0tleXdvcmQ7CiAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQ7CiAgVG9rZW4gd2l0aEtleXdvcmQ7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBleHRlbmRzS2V5d29yZCA9IG51bGw7CiAgICBpbXBsZW1lbnRzS2V5d29yZCA9IG51bGw7CiAgICB3aXRoS2V5d29yZCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzRXh0ZW5kcyhUb2tlbiBleHRlbmRzS2V5d29yZCkgewogICAgdGhpcy5leHRlbmRzS2V5d29yZCA9IGV4dGVuZHNLZXl3b3JkOwogICAgc3VwZXIuaGFuZGxlQ2xhc3NFeHRlbmRzKGV4dGVuZHNLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cygKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIGludCBpbnRlcmZhY2VzQ291bnQpIHsKICAgIHRoaXMuaW1wbGVtZW50c0tleXdvcmQgPSBpbXBsZW1lbnRzS2V5d29yZDsKICAgIHN1cGVyLmhhbmRsZUNsYXNzT3JNaXhpbkltcGxlbWVudHMoaW1wbGVtZW50c0tleXdvcmQsIGludGVyZmFjZXNDb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzV2l0aENsYXVzZShUb2tlbiB3aXRoS2V5d29yZCkgewogICAgdGhpcy53aXRoS2V5d29yZCA9IHdpdGhLZXl3b3JkOwogICAgc3VwZXIuaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKHdpdGhLZXl3b3JkKTsKICB9Cn0KCmNsYXNzIEltcG9ydFJlY292ZXJ5TGlzdGVuZXIgZXh0ZW5kcyBGb3J3YXJkaW5nTGlzdGVuZXIgewogIFRva2VuIGFzS2V5d29yZDsKICBUb2tlbiBkZWZlcnJlZEtleXdvcmQ7CiAgVG9rZW4gaWZLZXl3b3JkOwogIGJvb2wgaGFzQ29tYmluYXRvciA9IGZhbHNlOwoKICB2b2lkIGNsZWFyKCkgewogICAgYXNLZXl3b3JkID0gbnVsbDsKICAgIGRlZmVycmVkS2V5d29yZCA9IG51bGw7CiAgICBpZktleXdvcmQgPSBudWxsOwogICAgaGFzQ29tYmluYXRvciA9IGZhbHNlOwogIH0KCiAgdm9pZCBlbmRDb25kaXRpb25hbFVyaShUb2tlbiBpZktleXdvcmQsIFRva2VuIGxlZnRQYXJlbiwgVG9rZW4gZXF1YWxTaWduKSB7CiAgICB0aGlzLmlmS2V5d29yZCA9IGlmS2V5d29yZDsKICAgIHN1cGVyLmVuZENvbmRpdGlvbmFsVXJpKGlmS2V5d29yZCwgbGVmdFBhcmVuLCBlcXVhbFNpZ24pOwogIH0KCiAgdm9pZCBlbmRIaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7CiAgICB0aGlzLmhhc0NvbWJpbmF0b3IgPSB0cnVlOwogICAgc3VwZXIuZW5kSGlkZShoaWRlS2V5d29yZCk7CiAgfQoKICB2b2lkIGVuZFNob3coVG9rZW4gc2hvd0tleXdvcmQpIHsKICAgIHRoaXMuaGFzQ29tYmluYXRvciA9IHRydWU7CiAgICBzdXBlci5lbmRTaG93KHNob3dLZXl3b3JkKTsKICB9CgogIHZvaWQgaGFuZGxlSW1wb3J0UHJlZml4KFRva2VuIGRlZmVycmVkS2V5d29yZCwgVG9rZW4gYXNLZXl3b3JkKSB7CiAgICB0aGlzLmRlZmVycmVkS2V5d29yZCA9IGRlZmVycmVkS2V5d29yZDsKICAgIHRoaXMuYXNLZXl3b3JkID0gYXNLZXl3b3JkOwogICAgc3VwZXIuaGFuZGxlSW1wb3J0UHJlZml4KGRlZmVycmVkS2V5d29yZCwgYXNLZXl3b3JkKTsKICB9Cn0KCmNsYXNzIE1peGluSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lciBleHRlbmRzIEZvcndhcmRpbmdMaXN0ZW5lciB7CiAgVG9rZW4gb25LZXl3b3JkOwogIFRva2VuIGltcGxlbWVudHNLZXl3b3JkOwoKICB2b2lkIGNsZWFyKCkgewogICAgb25LZXl3b3JkID0gbnVsbDsKICAgIGltcGxlbWVudHNLZXl3b3JkID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cygKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIGludCBpbnRlcmZhY2VzQ291bnQpIHsKICAgIHRoaXMuaW1wbGVtZW50c0tleXdvcmQgPSBpbXBsZW1lbnRzS2V5d29yZDsKICAgIHN1cGVyLmhhbmRsZUNsYXNzT3JNaXhpbkltcGxlbWVudHMoaW1wbGVtZW50c0tleXdvcmQsIGludGVyZmFjZXNDb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU1peGluT24oVG9rZW4gb25LZXl3b3JkLCBpbnQgdHlwZUNvdW50KSB7CiAgICB0aGlzLm9uS2V5d29yZCA9IG9uS2V5d29yZDsKICAgIHN1cGVyLmhhbmRsZU1peGluT24ob25LZXl3b3JkLCB0eXBlQ291bnQpOwogIH0KfQpiAE5OPAEuATsBPxgbFQERGx4YBAEMMiouBAEMJTYwTAQBDDIkLgQCAToTGRMeAREWHBYbBAFOID4EASQfIAQBJB8gBAFELCA6BAIBPxMbAREWHgQBDCU2MEwEAQw3IC8EAgE6cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9yZWNvdmVyeV9saXN0ZW5lcnMuZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL3Rva2VuX3N0cmVhbV9yZXdyaXRlci5kYXJ0nMUvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9zY2FubmVyL2Vycm9yX3Rva2VuLmRhcnQnIHNob3cgVW5tYXRjaGVkVG9rZW47CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcKICAgIHNob3cKICAgICAgICBCZWdpblRva2VuLAogICAgICAgIEtleXdvcmQsCiAgICAgICAgU2ltcGxlVG9rZW4sCiAgICAgICAgU3ludGhldGljQmVnaW5Ub2tlbiwKICAgICAgICBTeW50aGV0aWNLZXl3b3JkVG9rZW4sCiAgICAgICAgU3ludGhldGljU3RyaW5nVG9rZW4sCiAgICAgICAgU3ludGhldGljVG9rZW4sCiAgICAgICAgVG9rZW4sCiAgICAgICAgVG9rZW5UeXBlOwoKLy8vIFByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IG9mIGluc2VydGluZyB0b2tlbnMgaW50byBhIHRva2VuIHN0cmVhbS4gVGhpcwovLy8gaW1wbGVtZW50YXRpb24gZG9lcyB0aGlzIGJ5IHJld3JpdGluZyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gcG9pbnQgdG8gdGhlCi8vLyBpbnNlcnRlZCB0b2tlbi4KY2xhc3MgVG9rZW5TdHJlYW1SZXdyaXRlciB3aXRoIF9Ub2tlblN0cmVhbU1peGluIHsKICAvLyBUT0RPKGJyaWFud2lsa2Vyc29uKToKICAvLwogIC8vIFdoZW4gd2UgZ2V0IHRvIHRoZSBwb2ludCBvZiByZW1vdmluZyBgdG9rZW4ucHJldmlvdXNgLCB0aGUgcGxhbiBpcyB0bwogIC8vIGNvbnZlcnQgdGhpcyBpbnRvIGFuIGludGVyZmFjZSBhbmQgcHJvdmlkZSB0d28gaW1wbGVtZW50YXRpb25zLgogIC8vCiAgLy8gT25lLCB1c2VkIGJ5IEZhc3RhLCB3aWxsIGNvbm5lY3QgdGhlIGluc2VydGVkIHRva2VucyB0byB0aGUgZm9sbG93aW5nIHRva2VuCiAgLy8gd2l0aG91dCBtb2RpZnlpbmcgdGhlIHByZXZpb3VzIHRva2VuLgogIC8vCiAgLy8gVGhlIG90aGVyLCB1c2VkIGJ5ICdhbmFseXplcicsIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUKICAvLyBzdHJlYW0gKGFjdHVhbGx5IHdpdGggdGhlIEJPRiBtYXJrZXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtKS4gSXQKICAvLyB3aWxsIGJlIGNyZWF0ZWQgb25seSB3aGVuIGludm9raW5nICdhbmFseXplcicgc3BlY2lmaWMgcGFyc2UgbWV0aG9kcyAoaW4KICAvLyBgUGFyc2VyYCksIHN1Y2ggYXMKICAvLwogIC8vIFRva2VuIHBhcnNlVW5pdFdpdGhSZXdyaXRlKFRva2VuIGJvZikgewogIC8vICAgcmV3cml0ZXIgPSBBbmFseXplclRva2VuU3RyZWFtUmV3cml0ZXIoYm9mKTsKICAvLyAgIHJldHVybiBwYXJzZVVuaXQoYm9mLm5leHQpOwogIC8vIH0KICAvLwoKICAvLy8gSW5zZXJ0IGEgc3ludGhldGljIG9wZW4gYW5kIGNsb3NlIHBhcmVudGhlc2lzIGFuZCByZXR1cm4gdGhlIG5ldyBzeW50aGV0aWMKICAvLy8gb3BlbiBwYXJlbnRoZXNpcy4gSWYgW2luc2VydElkZW50aWZpZXJdIGlzIHRydWUsIHRoZW4gYSBzeW50aGV0aWMKICAvLy8gaWRlbnRpZmllciBpcyBpbmNsdWRlZCBiZXR3ZWVuIHRoZSBvcGVuIGFuZCBjbG9zZSBwYXJlbnRoZXNpcy4KICBUb2tlbiBpbnNlcnRQYXJlbnMoVG9rZW4gdG9rZW4sIGJvb2wgaW5jbHVkZUlkZW50aWZpZXIpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaW50IG9mZnNldCA9IG5leHQuY2hhck9mZnNldDsKICAgIEJlZ2luVG9rZW4gbGVmdFBhcmVuID0KICAgICAgICBuZXh0ID0gbmV3IFN5bnRoZXRpY0JlZ2luVG9rZW4oVG9rZW5UeXBlLk9QRU5fUEFSRU4sIG9mZnNldCk7CiAgICBpZiAoaW5jbHVkZUlkZW50aWZpZXIpIHsKICAgICAgbmV4dCA9IG5leHQuc2V0TmV4dCgKICAgICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbihUb2tlblR5cGUuSURFTlRJRklFUiwgJycsIG9mZnNldCwgMCkpOwogICAgfQogICAgbmV4dCA9IG5leHQuc2V0TmV4dChuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNMT1NFX1BBUkVOLCBvZmZzZXQpKTsKICAgIGxlZnRQYXJlbi5lbmRHcm91cCA9IG5leHQ7CiAgICBuZXh0LnNldE5leHQodG9rZW4ubmV4dCk7CgogICAgLy8gQSBuby1vcCByZXdyaXRlciBjb3VsZCBza2lwIHRoaXMgc3RlcC4KICAgIHRva2VuLnNldE5leHQobGVmdFBhcmVuKTsKCiAgICByZXR1cm4gbGVmdFBhcmVuOwogIH0KCiAgLy8vIEluc2VydCBbbmV3VG9rZW5dIGFmdGVyIFt0b2tlbl0gYW5kIHJldHVybiBbbmV3VG9rZW5dLgogIFRva2VuIGluc2VydFRva2VuKFRva2VuIHRva2VuLCBUb2tlbiBuZXdUb2tlbikgewogICAgbmV3VG9rZW4uc2V0TmV4dCh0b2tlbi5uZXh0KTsKCiAgICAvLyBBIG5vLW9wIHJld3JpdGVyIGNvdWxkIHNraXAgdGhpcyBzdGVwLgogICAgdG9rZW4uc2V0TmV4dChuZXdUb2tlbik7CgogICAgcmV0dXJuIG5ld1Rva2VuOwogIH0KCiAgLy8vIE1vdmUgW2VuZEdyb3VwXSAoYSBzeW50aGV0aWMgYClgLCBgXWAsIG9yIGB9YCB0b2tlbikgYW5kIGFzc29jaWF0ZWQKICAvLy8gZXJyb3IgdG9rZW4gYWZ0ZXIgW3Rva2VuXSBpbiB0aGUgdG9rZW4gc3RyZWFtIGFuZCByZXR1cm4gW2VuZEdyb3VwXS4KICBUb2tlbiBtb3ZlU3ludGhldGljKFRva2VuIHRva2VuLCBUb2tlbiBlbmRHcm91cCkgewogICAgYXNzZXJ0KGVuZEdyb3VwLmJlZm9yZVN5bnRoZXRpYyAhPSBudWxsKTsKICAgIFRva2VuIGVycm9yVG9rZW47CiAgICBpZiAoZW5kR3JvdXAubmV4dCBpcyBVbm1hdGNoZWRUb2tlbikgewogICAgICBlcnJvclRva2VuID0gZW5kR3JvdXAubmV4dDsKICAgIH0KCiAgICAvLyBSZW1vdmUgZW5kR3JvdXAgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbgogICAgZW5kR3JvdXAuYmVmb3JlU3ludGhldGljLnNldE5leHQoKGVycm9yVG9rZW4gPz8gZW5kR3JvdXApLm5leHQpOwoKICAgIC8vIEluc2VydCBlbmRHcm91cCBpbnRvIGl0cyBuZXcgbG9jYXRpb24KICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgdG9rZW4uc2V0TmV4dChlbmRHcm91cCk7CiAgICAoZXJyb3JUb2tlbiA/PyBlbmRHcm91cCkuc2V0TmV4dChuZXh0KTsKICAgIGVuZEdyb3VwLm9mZnNldCA9IG5leHQub2Zmc2V0OwogICAgaWYgKGVycm9yVG9rZW4gIT0gbnVsbCkgewogICAgICBlcnJvclRva2VuLm9mZnNldCA9IG5leHQub2Zmc2V0OwogICAgfQoKICAgIHJldHVybiBlbmRHcm91cDsKICB9CgogIC8vLyBSZXBsYWNlIHRoZSBzaW5nbGUgdG9rZW4gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBbcHJldmlvdXNUb2tlbl0gd2l0aAogIC8vLyB0aGUgY2hhaW4gb2YgdG9rZW5zIHN0YXJ0aW5nIGF0IHRoZSBbcmVwbGFjZW1lbnRUb2tlbl0uIFJldHVybiB0aGUKICAvLy8gW3JlcGxhY2VtZW50VG9rZW5dLgogIFRva2VuIHJlcGxhY2VUb2tlbkZvbGxvd2luZyhUb2tlbiBwcmV2aW91c1Rva2VuLCBUb2tlbiByZXBsYWNlbWVudFRva2VuKSB7CiAgICBUb2tlbiByZXBsYWNlZFRva2VuID0gcHJldmlvdXNUb2tlbi5uZXh0OwogICAgcHJldmlvdXNUb2tlbi5zZXROZXh0KHJlcGxhY2VtZW50VG9rZW4pOwoKICAgIChyZXBsYWNlbWVudFRva2VuIGFzIFNpbXBsZVRva2VuKS5wcmVjZWRpbmdDb21tZW50cyA9CiAgICAgICAgcmVwbGFjZWRUb2tlbi5wcmVjZWRpbmdDb21tZW50czsKCiAgICBfbGFzdFRva2VuSW5DaGFpbihyZXBsYWNlbWVudFRva2VuKS5zZXROZXh0KHJlcGxhY2VkVG9rZW4ubmV4dCk7CgogICAgcmV0dXJuIHJlcGxhY2VtZW50VG9rZW47CiAgfQoKICAvLy8gR2l2ZW4gdGhlIFtmaXJzdFRva2VuXSBpbiBhIGNoYWluIG9mIHRva2VucyB0byBiZSBpbnNlcnRlZCwgcmV0dXJuIHRoZQogIC8vLyBsYXN0IHRva2VuIGluIHRoZSBjaGFpbi4KICAvLy8KICAvLy8gQXMgYSBzaWRlLWVmZmVjdCwgdGhpcyBtZXRob2QgYWxzbyBlbnN1cmVzIHRoYXQgdGhlIHRva2VucyBpbiB0aGUgY2hhaW4KICAvLy8gaGF2ZSB0aGVpciBgcHJldmlvdXNgIHBvaW50ZXJzIHNldCBjb3JyZWN0bHkuCiAgVG9rZW4gX2xhc3RUb2tlbkluQ2hhaW4oVG9rZW4gZmlyc3RUb2tlbikgewogICAgVG9rZW4gcHJldmlvdXM7CiAgICBUb2tlbiBjdXJyZW50ID0gZmlyc3RUb2tlbjsKICAgIHdoaWxlIChjdXJyZW50Lm5leHQgIT0gbnVsbCAmJiBjdXJyZW50Lm5leHQudHlwZSAhPSBUb2tlblR5cGUuRU9GKSB7CiAgICAgIGlmIChwcmV2aW91cyAhPSBudWxsKSB7CiAgICAgICAgY3VycmVudC5wcmV2aW91cyA9IHByZXZpb3VzOwogICAgICB9CiAgICAgIHByZXZpb3VzID0gY3VycmVudDsKICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDsKICAgIH0KICAgIGlmIChwcmV2aW91cyAhPSBudWxsKSB7CiAgICAgIGN1cnJlbnQucHJldmlvdXMgPSBwcmV2aW91czsKICAgIH0KICAgIHJldHVybiBjdXJyZW50OwogIH0KfQoKLy8vIFByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IG9mIGFkZGluZyB0b2tlbnMgdGhhdCBsZWFkIGludG8gYSB0b2tlbiBzdHJlYW0KLy8vIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbCB0b2tlbiBzdHJlYW0gYW5kIG5vdCBzZXR0aW5nIHRoZSBhbnkgdG9rZW4ncwovLy8gYHByZXZpb3VzYCBmaWVsZC4KY2xhc3MgVG9rZW5TdHJlYW1HaG9zdFdyaXRlcgogICAgd2l0aCBfVG9rZW5TdHJlYW1NaXhpbgogICAgaW1wbGVtZW50cyBUb2tlblN0cmVhbVJld3JpdGVyIHsKICBAb3ZlcnJpZGUKICBUb2tlbiBpbnNlcnRQYXJlbnMoVG9rZW4gdG9rZW4sIGJvb2wgaW5jbHVkZUlkZW50aWZpZXIpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaW50IG9mZnNldCA9IG5leHQuY2hhck9mZnNldDsKICAgIEJlZ2luVG9rZW4gbGVmdFBhcmVuID0KICAgICAgICBuZXh0ID0gbmV3IFN5bnRoZXRpY0JlZ2luVG9rZW4oVG9rZW5UeXBlLk9QRU5fUEFSRU4sIG9mZnNldCk7CiAgICBpZiAoaW5jbHVkZUlkZW50aWZpZXIpIHsKICAgICAgVG9rZW4gaWRlbnRpZmllciA9CiAgICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlLklERU5USUZJRVIsICcnLCBvZmZzZXQsIDApOwogICAgICBuZXh0Lm5leHQgPSBpZGVudGlmaWVyOwogICAgICBuZXh0ID0gaWRlbnRpZmllcjsKICAgIH0KICAgIFRva2VuIHJpZ2h0UGFyZW4gPSBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNMT1NFX1BBUkVOLCBvZmZzZXQpOwogICAgbmV4dC5uZXh0ID0gcmlnaHRQYXJlbjsKICAgIHJpZ2h0UGFyZW4ubmV4dCA9IHRva2VuLm5leHQ7CgogICAgcmV0dXJuIGxlZnRQYXJlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIGluc2VydFRva2VuKFRva2VuIHRva2VuLCBUb2tlbiBuZXdUb2tlbikgewogICAgbmV3VG9rZW4ubmV4dCA9IHRva2VuLm5leHQ7CiAgICByZXR1cm4gbmV3VG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBtb3ZlU3ludGhldGljKFRva2VuIHRva2VuLCBUb2tlbiBlbmRHcm91cCkgewogICAgVG9rZW4gbmV3RW5kR3JvdXAgPQogICAgICAgIG5ldyBTeW50aGV0aWNUb2tlbihlbmRHcm91cC50eXBlLCB0b2tlbi5uZXh0LmNoYXJPZmZzZXQpOwogICAgbmV3RW5kR3JvdXAubmV4dCA9IHRva2VuLm5leHQ7CiAgICByZXR1cm4gbmV3RW5kR3JvdXA7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiByZXBsYWNlVG9rZW5Gb2xsb3dpbmcoVG9rZW4gcHJldmlvdXNUb2tlbiwgVG9rZW4gcmVwbGFjZW1lbnRUb2tlbikgewogICAgVG9rZW4gcmVwbGFjZWRUb2tlbiA9IHByZXZpb3VzVG9rZW4ubmV4dDsKCiAgICAocmVwbGFjZW1lbnRUb2tlbiBhcyBTaW1wbGVUb2tlbikucHJlY2VkaW5nQ29tbWVudHMgPQogICAgICAgIHJlcGxhY2VkVG9rZW4ucHJlY2VkaW5nQ29tbWVudHM7CgogICAgX2xhc3RUb2tlbkluQ2hhaW4ocmVwbGFjZW1lbnRUb2tlbikubmV4dCA9IHJlcGxhY2VkVG9rZW4ubmV4dDsKICAgIHJldHVybiByZXBsYWNlbWVudFRva2VuOwogIH0KCiAgLy8vIEdpdmVuIHRoZSBbZmlyc3RUb2tlbl0gaW4gYSBjaGFpbiBvZiB0b2tlbnMgdG8gYmUgaW5zZXJ0ZWQsIHJldHVybiB0aGUKICAvLy8gbGFzdCB0b2tlbiBpbiB0aGUgY2hhaW4uCiAgVG9rZW4gX2xhc3RUb2tlbkluQ2hhaW4oVG9rZW4gZmlyc3RUb2tlbikgewogICAgVG9rZW4gY3VycmVudCA9IGZpcnN0VG9rZW47CiAgICB3aGlsZSAoY3VycmVudC5uZXh0ICE9IG51bGwgJiYgY3VycmVudC5uZXh0LnR5cGUgIT0gVG9rZW5UeXBlLkVPRikgewogICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgfQogICAgcmV0dXJuIGN1cnJlbnQ7CiAgfQp9CgptaXhpbiBfVG9rZW5TdHJlYW1NaXhpbiB7CiAgLy8vIEluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIGFmdGVyIFt0b2tlbl0gYW5kIHJldHVybiB0aGUgbmV3IGlkZW50aWZpZXIuCiAgVG9rZW4gaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgW1N0cmluZyB2YWx1ZV0pIHsKICAgIHJldHVybiBpbnNlcnRUb2tlbigKICAgICAgICB0b2tlbiwKICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgICAgICAgIFRva2VuVHlwZS5JREVOVElGSUVSLCB2YWx1ZSA/PyAnJywgdG9rZW4ubmV4dC5jaGFyT2Zmc2V0LCAwKSk7CiAgfQoKICAvLy8gSW5zZXJ0IGEgbmV3IHN5bnRoZXRpYyBba2V5d29yZF0gYWZ0ZXIgW3Rva2VuXSBhbmQgcmV0dXJuIHRoZSBuZXcgdG9rZW4uCiAgVG9rZW4gaW5zZXJ0U3ludGhldGljS2V5d29yZChUb2tlbiB0b2tlbiwgS2V5d29yZCBrZXl3b3JkKSA9PiBpbnNlcnRUb2tlbigKICAgICAgdG9rZW4sIG5ldyBTeW50aGV0aWNLZXl3b3JkVG9rZW4oa2V5d29yZCwgdG9rZW4ubmV4dC5jaGFyT2Zmc2V0KSk7CgogIC8vLyBJbnNlcnQgYSBuZXcgc2ltcGxlIHN5bnRoZXRpYyB0b2tlbiBvZiBbbmV3VG9rZW5UeXBlXSBhZnRlciBbdG9rZW5dCiAgLy8vIGFuZCByZXR1cm4gdGhlIG5ldyB0b2tlbi4KICBUb2tlbiBpbnNlcnRTeW50aGV0aWNUb2tlbihUb2tlbiB0b2tlbiwgVG9rZW5UeXBlIG5ld1Rva2VuVHlwZSkgewogICAgYXNzZXJ0KG5ld1Rva2VuVHlwZSBpcyEgS2V5d29yZCwgJ3VzZSBpbnNlcnRTeW50aGV0aWNLZXl3b3JkIGluc3RlYWQnKTsKICAgIHJldHVybiBpbnNlcnRUb2tlbigKICAgICAgICB0b2tlbiwgbmV3IFN5bnRoZXRpY1Rva2VuKG5ld1Rva2VuVHlwZSwgdG9rZW4ubmV4dC5jaGFyT2Zmc2V0KSk7CiAgfQoKICAvLy8gSW5zZXJ0IFtuZXdUb2tlbl0gYWZ0ZXIgW3Rva2VuXSBhbmQgcmV0dXJuIFtuZXdUb2tlbl0uCiAgVG9rZW4gaW5zZXJ0VG9rZW4oVG9rZW4gdG9rZW4sIFRva2VuIG5ld1Rva2VuKTsKfQqA3QBOTjwBOgEiCRQRFR0fHhgPEwFKTRQzGwVLRQVRKwVQTk4YBS00IwcFAVFIRTwdIhtGHRtKBkwfHgEuHgEWBAE9MyIBLh0BFQQBSks1LhYrIgYBMUUBLR0dLCMeJwYBFQQBTkkaTS4tATopAUUBHQQBTR8GTjQuFCBJHiUIGh4GHCMGFAQCAUtQFh0bJQw8HSIbRh0ZSR4ZBkocIgEWBAEMMyAVBAEMNRhCIxgEAQxNLgE6KQFDHQQBTR8uIEkeBhQEAgEaUUEYDyJLBAFPTUkBSiBETBhJBAE9MgIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdG9rZW5fc3RyZWFtX3Jld3JpdGVyLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci90eXBlX2luZm8uZGFydLTVLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLnR5cGVfaW5mbzsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuLCBUb2tlblR5cGU7CgppbXBvcnQgJy4uL3NjYW5uZXIvdG9rZW5fY29uc3RhbnRzLmRhcnQnIHNob3cgSURFTlRJRklFUl9UT0tFTiwgS0VZV09SRF9UT0tFTjsKCmltcG9ydCAncGFyc2VyLmRhcnQnIHNob3cgUGFyc2VyOwoKaW1wb3J0ICd0eXBlX2luZm9faW1wbC5kYXJ0JzsKCmltcG9ydCAndXRpbC5kYXJ0JyBzaG93IGlzT25lT2YsIG9wdGlvbmFsOwoKLy8vIFtUeXBlSW5mb10gcHJvdmlkZXMgaW5mb3JtYXRpb24gY29sbGVjdGVkIGJ5IFtjb21wdXRlVHlwZV0KLy8vIGFib3V0IGEgcGFydGljdWxhciB0eXBlIHJlZmVyZW5jZS4KYWJzdHJhY3QgY2xhc3MgVHlwZUluZm8gewogIC8vLyBSZXR1cm4gdHlwZSBpbmZvIHJlcHJlc2VudGluZyB0aGUgcmVjZWl2ZXIgd2l0aG91dCB0aGUgdHJhaWxpbmcgYD9gCiAgLy8vIG9yIHRoZSByZWNlaXZlciBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgcmVwcmVzZW50IGEgbnVsbGFibGUgdHlwZS4KICBUeXBlSW5mbyBnZXQgYXNOb25OdWxsYWJsZTsKCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgdGhlIHRva2VucyBjb21wcmlzaW5nIHRoZSB0eXBlIHJlcHJlc2VudGVkIGJ5IHRoZQogIC8vLyByZWNlaXZlciBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIHZhbGlkIHN0YW5kYWxvbmUgZXhwcmVzc2lvbi4KICAvLy8gRm9yIGV4YW1wbGUsIGBBYCBvciBgQS5iYCBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyB0eXBlIHJlZmVyZW5jZXMKICAvLy8gb3IgZXhwcmVzc2lvbnMsIHdoaWxlIGBBPFQ+YCBvbmx5IGxvb2tzIGxpa2UgYSB0eXBlIHJlZmVyZW5jZS4KICBib29sIGdldCBjb3VsZEJlRXhwcmVzc2lvbjsKCiAgLy8vIFJldHVybiB0cnVlIGlmIHRoZSByZWNlaXZlciBoYXMgYSB0cmFpbGluZyBgP2AuCiAgYm9vbCBnZXQgaXNOdWxsYWJsZTsKCiAgLy8vIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSB0b2tlbiBhZnRlciBbdG9rZW5dIG11c3QgYmUgYSB0eXBlIChub3Qgdm9pZCkuCiAgLy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBldmVudCBtZXRob2RzIG9uIHRoZSBbUGFyc2VyXSdzCiAgLy8vIGxpc3RlbmVyIHRvIGhhbmRsZSB0aGUgdHlwZSwgaW5zZXJ0aW5nIGEgc3ludGhldGljIHR5cGUgcmVmZXJlbmNlIGlmCiAgLy8vIG5lY2Vzc2FyeS4gVGhpcyBtYXkgbW9kaWZ5IHRoZSB0b2tlbiBzdHJlYW0gd2hlbiBwYXJzaW5nIGA+PmAgb3IgYD4+PmAKICAvLy8gb3IgYD4+Pj1gIGluIHZhbGlkIGNvZGUgb3IgZHVyaW5nIHJlY292ZXJ5LgogIFRva2VuIGVuc3VyZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKTsKCiAgLy8vIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSB0b2tlbiBhZnRlciBbdG9rZW5dIG11c3QgYmUgYSB0eXBlIG9yIHZvaWQuCiAgLy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBldmVudCBtZXRob2RzIG9uIHRoZSBbUGFyc2VyXSdzCiAgLy8vIGxpc3RlbmVyIHRvIGhhbmRsZSB0aGUgdHlwZSwgaW5zZXJ0aW5nIGEgc3ludGhldGljIHR5cGUgcmVmZXJlbmNlIGlmCiAgLy8vIG5lY2Vzc2FyeS4gVGhpcyBtYXkgbW9kaWZ5IHRoZSB0b2tlbiBzdHJlYW0gd2hlbiBwYXJzaW5nIGA+PmAgb3IgYD4+PmAKICAvLy8gb3IgYD4+Pj1gIGluIHZhbGlkIGNvZGUgb3IgZHVyaW5nIHJlY292ZXJ5LgogIFRva2VuIGVuc3VyZVR5cGVPclZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpOwoKICAvLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHBhcnNlIGFuIG9wdGlvbmFsIHR5cGUgKG5vdCB2b2lkKSBhZnRlciBbdG9rZW5dLgogIC8vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgbWV0aG9kcyBvbiB0aGUgW1BhcnNlcl0ncwogIC8vLyBsaXN0ZW5lciB0byBoYW5kbGUgdGhlIHR5cGUuIFRoaXMgbWF5IG1vZGlmeSB0aGUgdG9rZW4gc3RyZWFtCiAgLy8vIHdoZW4gcGFyc2luZyBgPj5gIG9yIGA+Pj5gIG9yIGA+Pj49YCAgaW4gdmFsaWQgY29kZSBvciBkdXJpbmcgcmVjb3ZlcnkuCiAgVG9rZW4gcGFyc2VUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcik7CgogIC8vLyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gcGFyc2UgYW4gb3B0aW9uYWwgdHlwZSBvciB2b2lkIGFmdGVyIFt0b2tlbl0uCiAgLy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBldmVudCBtZXRob2RzIG9uIHRoZSBbUGFyc2VyXSdzCiAgLy8vIGxpc3RlbmVyIHRvIGhhbmRsZSB0aGUgdHlwZS4gVGhpcyBtYXkgbW9kaWZ5IHRoZSB0b2tlbiBzdHJlYW0KICAvLy8gd2hlbiBwYXJzaW5nIGA+PmAgb3IgYD4+PmAgb3IgYD4+Pj1gIGluIHZhbGlkIGNvZGUgb3IgZHVyaW5nIHJlY292ZXJ5LgogIFRva2VuIHBhcnNlVHlwZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcik7CgogIC8vLyBDYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgW3Rva2VuXSBiZWZvcmUgdGhlIHR5cGUgdG8gb2J0YWluCiAgLy8vIHRoZSBsYXN0IHRva2VuIGluIHRoZSB0eXBlLiBJZiB0aGVyZSBpcyBubyB0eXBlLCB0aGVuIHRoaXMgbWV0aG9kCiAgLy8vIHdpbGwgcmV0dXJuIFt0b2tlbl0uIFRoaXMgZG9lcyBub3QgbW9kaWZ5IHRoZSB0b2tlbiBzdHJlYW0uCiAgVG9rZW4gc2tpcFR5cGUoVG9rZW4gdG9rZW4pOwp9CgovLy8gW1R5cGVQYXJhbU9yQXJnSW5mb10gcHJvdmlkZXMgaW5mb3JtYXRpb24gY29sbGVjdGVkIGJ5Ci8vLyBbY29tcHV0ZVR5cGVQYXJhbU9yQXJnXSBhYm91dCBhIHBhcnRpY3VsYXIgZ3JvdXAgb2YgdHlwZSBhcmd1bWVudHMKLy8vIG9yIHR5cGUgcGFyYW1ldGVycy4KYWJzdHJhY3QgY2xhc3MgVHlwZVBhcmFtT3JBcmdJbmZvIHsKICBjb25zdCBUeXBlUGFyYW1PckFyZ0luZm8oKTsKCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgdGhlIHJlY2VpdmVyIHJlcHJlc2VudHMgYSBzaW5nbGUgdHlwZSBhcmd1bWVudAogIGJvb2wgZ2V0IGlzU2ltcGxlVHlwZUFyZ3VtZW50ID0+IGZhbHNlOwoKICAvLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMKICBpbnQgZ2V0IHR5cGVBcmd1bWVudENvdW50OwoKICAvLy8gUmV0dXJuIHRoZSBzaW1wbGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzaW1wbGUgdHlwZSBhcmd1bWVudAogIC8vLyBvciB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhpcyBpcyBub3QgYSBzaW1wbGUgdHlwZSBhcmd1bWVudC4KICBUeXBlSW5mbyBnZXQgdHlwZUluZm8gewogICAgdGhyb3cgIkludGVybmFsIGVycm9yOiAkcnVudGltZVR5cGUgaXMgbm90IGEgU2ltcGxlVHlwZUFyZ3VtZW50LiI7CiAgfQoKICAvLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHBhcnNlIG9wdGlvbmFsIHR5cGUgYXJndW1lbnRzIGFmdGVyIFt0b2tlbl0uCiAgLy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBldmVudCBtZXRob2RzIG9uIHRoZSBbUGFyc2VyXSdzCiAgLy8vIGxpc3RlbmVyIHRvIGhhbmRsZSB0aGUgYXJndW1lbnRzLiBUaGlzIG1heSBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbQogIC8vLyB3aGVuIHBhcnNpbmcgYD4+YCBvciBgPj4+YCBvciBgPj4+PWAgaW4gdmFsaWQgY29kZSBvciBkdXJpbmcgcmVjb3ZlcnkuCiAgVG9rZW4gcGFyc2VBcmd1bWVudHMoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpOwoKICAvLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHBhcnNlIG9wdGlvbmFsIHR5cGUgcGFyYW1ldGVycwogIC8vLyAoYWxzbyBrbm93biBhcyB0eXBlIHZhcmlhYmxlcykgYWZ0ZXIgW3Rva2VuXS4KICAvLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGV2ZW50IG1ldGhvZHMgb24gdGhlIFtQYXJzZXJdJ3MKICAvLy8gbGlzdGVuZXIgdG8gaGFuZGxlIHRoZSBwYXJhbWV0ZXJzLiBUaGlzIG1heSBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbQogIC8vLyB3aGVuIHBhcnNpbmcgYD4+YCBvciBgPj4+YCBvciBgPj4+PWAgaW4gdmFsaWQgY29kZSBvciBkdXJpbmcgcmVjb3ZlcnkuCiAgVG9rZW4gcGFyc2VWYXJpYWJsZXMoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpOwoKICAvLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIFt0b2tlbl0gYmVmb3JlIHRoZSB0eXBlIHZhciB0byBvYnRhaW4KICAvLy8gdGhlIGxhc3QgdG9rZW4gaW4gdGhlIHR5cGUgdmFyLiBJZiB0aGVyZSBpcyBubyB0eXBlIHZhciwgdGhlbiB0aGlzIG1ldGhvZAogIC8vLyB3aWxsIHJldHVybiBbdG9rZW5dLiBUaGlzIGRvZXMgbm90IG1vZGlmeSB0aGUgdG9rZW4gc3RyZWFtLgogIFRva2VuIHNraXAoVG9rZW4gdG9rZW4pOwp9CgovLy8gW05vVHlwZV0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZUluZm9dIHJldHVybmVkIGJ5IFtjb21wdXRlVHlwZV0gd2hlbgovLy8gdGhlcmUgaXMgbm8gdHlwZSBpbmZvcm1hdGlvbiBpbiB0aGUgc291cmNlLgpjb25zdCBUeXBlSW5mbyBub1R5cGUgPSBjb25zdCBOb1R5cGUoKTsKCi8vLyBbTm9UeXBlUGFyYW1PckFyZ10gaXMgYSBzcGVjaWFsaXplZCBbVHlwZVBhcmFtT3JBcmdJbmZvXSByZXR1cm5lZCBieQovLy8gW2NvbXB1dGVUeXBlUGFyYW1PckFyZ10gd2hlbiBubyB0eXBlIHBhcmFtZXRlcnMgb3IgYXJndW1lbnRzIGFyZSBmb3VuZC4KY29uc3QgVHlwZVBhcmFtT3JBcmdJbmZvIG5vVHlwZVBhcmFtT3JBcmcgPSBjb25zdCBOb1R5cGVQYXJhbU9yQXJnKCk7CgovLy8gW1ZvaWRUeXBlXSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlSW5mb10gcmV0dXJuZWQgYnkgW2NvbXB1dGVUeXBlXSB3aGVuCi8vLyBgdm9pZGAgYXBwZWFycyBpbiB0aGUgc291cmNlLgpjb25zdCBUeXBlSW5mbyB2b2lkVHlwZSA9IGNvbnN0IFZvaWRUeXBlKCk7Cgpib29sIGlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUoVG9rZW4gdG9rZW4pIHsKICByZXR1cm4gb3B0aW9uYWwoJ0Z1bmN0aW9uJywgdG9rZW4pICYmCiAgICAgIChvcHRpb25hbCgnPCcsIHRva2VuLm5leHQpIHx8IG9wdGlvbmFsKCcoJywgdG9rZW4ubmV4dCkpOwp9Cgpib29sIGlzVmFsaWRUeXBlUmVmZXJlbmNlKFRva2VuIHRva2VuKSB7CiAgaW50IGtpbmQgPSB0b2tlbi5raW5kOwogIGlmIChJREVOVElGSUVSX1RPS0VOID09IGtpbmQpIHJldHVybiB0cnVlOwogIGlmIChLRVlXT1JEX1RPS0VOID09IGtpbmQpIHsKICAgIFRva2VuVHlwZSB0eXBlID0gdG9rZW4udHlwZTsKICAgIFN0cmluZyB2YWx1ZSA9IHR5cGUubGV4ZW1lOwogICAgcmV0dXJuIHR5cGUuaXNQc2V1ZG8gfHwKICAgICAgICAodHlwZS5pc0J1aWx0SW4gJiYgb3B0aW9uYWwoJy4nLCB0b2tlbi5uZXh0KSkgfHwKICAgICAgICAoaWRlbnRpY2FsKHZhbHVlLCAnZHluYW1pYycpKSB8fAogICAgICAgIChpZGVudGljYWwodmFsdWUsICd2b2lkJykpOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCi8vLyBDYWxsZWQgYnkgdGhlIHBhcnNlciB0byBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgYSBwb3NzaWJsZSB0eXBlIHJlZmVyZW5jZQovLy8gdGhhdCBmb2xsb3dzIFt0b2tlbl0uIFRoaXMgZG9lcyBub3QgbW9kaWZ5IHRoZSB0b2tlbiBzdHJlYW0uCi8vLwovLy8gSWYgW2luRGVjbGFyYXRpb25dIGlzIGB0cnVlYCwgdGhlbiB0aGlzIHdpbGwgbW9yZSBhZ2dyZXNzaXZlbHkgcmVjb3ZlcgovLy8gZ2l2ZW4gdW5iYWxhbmNlZCBgPGAgYD5gIGFuZCBpbnZhbGlkIHBhcmFtZXRlcnMgb3IgYXJndW1lbnRzLgpUeXBlSW5mbyBjb21wdXRlVHlwZShmaW5hbCBUb2tlbiB0b2tlbiwgYm9vbCByZXF1aXJlZCwKICAgIFtib29sIGluRGVjbGFyYXRpb24gPSBmYWxzZV0pIHsKICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICBpZiAoIWlzVmFsaWRUeXBlUmVmZXJlbmNlKG5leHQpKSB7CiAgICBpZiAobmV4dC50eXBlLmlzQnVpbHRJbikgewogICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtT3JBcmcgPQogICAgICAgICAgY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5leHQsIGluRGVjbGFyYXRpb24pOwogICAgICBpZiAodHlwZVBhcmFtT3JBcmcgIT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIC8vIFJlY292ZXJ5OiBidWlsdC1pbiBgPGAgLi4uIGA+YAogICAgICAgIGlmIChyZXF1aXJlZCB8fCBsb29rc0xpa2VOYW1lKHR5cGVQYXJhbU9yQXJnLnNraXAobmV4dCkubmV4dCkpIHsKICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKHRva2VuLCB0eXBlUGFyYW1PckFyZykKICAgICAgICAgICAgICAuY29tcHV0ZUJ1aWx0aW5PclZhckFzVHlwZShyZXF1aXJlZCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJlcXVpcmVkIHx8IGlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dC5uZXh0KSkgewogICAgICAgIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICAgICAgaWYgKCghaWRlbnRpY2FsKCdnZXQnLCB2YWx1ZSkgJiYKICAgICAgICAgICAgIWlkZW50aWNhbCgnc2V0JywgdmFsdWUpICYmCiAgICAgICAgICAgICFpZGVudGljYWwoJ2ZhY3RvcnknLCB2YWx1ZSkgJiYKICAgICAgICAgICAgIWlkZW50aWNhbCgnb3BlcmF0b3InLCB2YWx1ZSkgJiYKICAgICAgICAgICAgIShpZGVudGljYWwoJ3R5cGVkZWYnLCB2YWx1ZSkgJiYgbmV4dC5uZXh0LmlzSWRlbnRpZmllcikpKSB7CiAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXhUeXBlSW5mbyh0b2tlbiwgdHlwZVBhcmFtT3JBcmcpCiAgICAgICAgICAgICAgLmNvbXB1dGVCdWlsdGluT3JWYXJBc1R5cGUocmVxdWlyZWQpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChyZXF1aXJlZCkgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAob3B0aW9uYWwoJy4nLCBuZXh0KSkgewogICAgICAgIC8vIExvb2tzIGxpa2UgcHJlZml4ZWQgdHlwZSBtaXNzaW5nIHRoZSBwcmVmaXgKICAgICAgICByZXR1cm4gbmV3IENvbXBsZXhUeXBlSW5mbygKICAgICAgICAgICAgICAgIHRva2VuLCBjb21wdXRlVHlwZVBhcmFtT3JBcmcobmV4dCwgaW5EZWNsYXJhdGlvbikpCiAgICAgICAgICAgIC5jb21wdXRlUHJlZml4ZWRUeXBlKHJlcXVpcmVkKTsKICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkgJiYKICAgICAgICAgIGlzT25lT2YobmV4dC5uZXh0LCBjb25zdCBbJzwnLCAnLCcsICc+J10pKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZUluZm8oCiAgICAgICAgICAgICAgICB0b2tlbiwgY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5leHQsIGluRGVjbGFyYXRpb24pKQogICAgICAgICAgICAuY29tcHV0ZUJ1aWx0aW5PclZhckFzVHlwZShyZXF1aXJlZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub1R5cGU7CiAgfQoKICBpZiAob3B0aW9uYWwoJ3ZvaWQnLCBuZXh0KSkgewogICAgbmV4dCA9IG5leHQubmV4dDsKICAgIGlmIChpc0dlbmVyYWxpemVkRnVuY3Rpb25UeXBlKG5leHQpKSB7CiAgICAgIC8vIGB2b2lkYCBgRnVuY3Rpb25gIC4uLgogICAgICByZXR1cm4gbmV3IENvbXBsZXhUeXBlSW5mbyh0b2tlbiwgbm9UeXBlUGFyYW1PckFyZykKICAgICAgICAgIC5jb21wdXRlVm9pZEdGVChyZXF1aXJlZCk7CiAgICB9CiAgICAvLyBgdm9pZGAKICAgIHJldHVybiB2b2lkVHlwZTsKICB9CgogIGlmIChpc0dlbmVyYWxpemVkRnVuY3Rpb25UeXBlKG5leHQpKSB7CiAgICAvLyBgRnVuY3Rpb25gIC4uLgogICAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZUluZm8odG9rZW4sIG5vVHlwZVBhcmFtT3JBcmcpCiAgICAgICAgLmNvbXB1dGVOb1R5cGVHRlQodG9rZW4sIHJlcXVpcmVkKTsKICB9CgogIC8vIFdlJ3ZlIHNlZW4gYW4gaWRlbnRpZmllci4KCiAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVQYXJhbU9yQXJnID0KICAgICAgY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5leHQsIGluRGVjbGFyYXRpb24pOwogIGlmICh0eXBlUGFyYW1PckFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICBpZiAodHlwZVBhcmFtT3JBcmcuaXNTaW1wbGVUeXBlQXJndW1lbnQpIHsKICAgICAgLy8gV2UndmUgc2VlbiBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA+YAogICAgICBuZXh0ID0gdHlwZVBhcmFtT3JBcmcuc2tpcChuZXh0KS5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJz8nLCBuZXh0KSkgewogICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgICAgaWYgKCFpc0dlbmVyYWxpemVkRnVuY3Rpb25UeXBlKG5leHQpKSB7CiAgICAgICAgICBpZiAoKHJlcXVpcmVkIHx8IGxvb2tzTGlrZU5hbWUobmV4dCkpICYmCiAgICAgICAgICAgICAgdHlwZVBhcmFtT3JBcmcgPT0gc2ltcGxlVHlwZUFyZ3VtZW50MSkgewogICAgICAgICAgICAvLyBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA+YCBgP2AgaWRlbnRpZmllcgogICAgICAgICAgICByZXR1cm4gc2ltcGxlTnVsbGFibGVUeXBlV2l0aDFBcmd1bWVudDsKICAgICAgICAgIH0KICAgICAgICAgIC8vIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYD5gIGA/YCBub24taWRlbnRpZmllcgogICAgICAgICAgcmV0dXJuIG5vVHlwZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIWlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dCkpIHsKICAgICAgICBpZiAocmVxdWlyZWQgfHwgbG9va3NMaWtlTmFtZShuZXh0KSkgewogICAgICAgICAgLy8gaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBgPmAgaWRlbnRpZmllcgogICAgICAgICAgcmV0dXJuIHR5cGVQYXJhbU9yQXJnLnR5cGVJbmZvOwogICAgICAgIH0KICAgICAgICAvLyBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA+YCBub24taWRlbnRpZmllcgogICAgICAgIHJldHVybiBub1R5cGU7CiAgICAgIH0KICAgIH0KICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBhZGRpbmcgYSBjb25zdCBmb3IKICAgIC8vIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYCxgIGlkZW50aWZpZXIgYD5gCiAgICAvLyBpZiB0aGF0IHByb3ZlcyB0byBiZSBhIGNvbW1vbiBjYXNlLgoKICAgIC8vIGlkZW50aWZpZXIgYDxgIC4uLiBgPmAKICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKHRva2VuLCB0eXBlUGFyYW1PckFyZykKICAgICAgICAuY29tcHV0ZVNpbXBsZVdpdGhUeXBlQXJndW1lbnRzKHJlcXVpcmVkKTsKICB9CgogIGFzc2VydCh0eXBlUGFyYW1PckFyZyA9PSBub1R5cGVQYXJhbU9yQXJnKTsKICBuZXh0ID0gbmV4dC5uZXh0OwogIGlmIChvcHRpb25hbCgnLicsIG5leHQpKSB7CiAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgaWYgKGlzVmFsaWRUeXBlUmVmZXJlbmNlKG5leHQpKSB7CiAgICAgIC8vIFdlJ3ZlIHNlZW4gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllcgogICAgICB0eXBlUGFyYW1PckFyZyA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyhuZXh0LCBpbkRlY2xhcmF0aW9uKTsKICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgaWYgKHR5cGVQYXJhbU9yQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICBpZiAob3B0aW9uYWwoJz8nLCBuZXh0KSkgewogICAgICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgICAgIGlmICghaXNHZW5lcmFsaXplZEZ1bmN0aW9uVHlwZShuZXh0KSkgewogICAgICAgICAgICBpZiAocmVxdWlyZWQgfHwgbG9va3NMaWtlTmFtZShuZXh0KSkgewogICAgICAgICAgICAgIC8vIGlkZW50aWZpZXIgYC5gIGlkZW50aWZpZXIgYD9gIGlkZW50aWZpZXIKICAgICAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogY29uc2lkZXIgYWRkaW5nIFByZWZpeGVkTnVsbGFibGVUeXBlCiAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGJ1aWxkIGNvbXBsZXggdHlwZQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIGlkZW50aWZpZXIgYC5gIGlkZW50aWZpZXIgYD9gIG5vbi1pZGVudGlmaWVyCiAgICAgICAgICAgICAgcmV0dXJuIG5vVHlwZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dCkpIHsKICAgICAgICAgICAgaWYgKHJlcXVpcmVkIHx8IGxvb2tzTGlrZU5hbWUobmV4dCkpIHsKICAgICAgICAgICAgICAvLyBpZGVudGlmaWVyIGAuYCBpZGVudGlmaWVyIGlkZW50aWZpZXIKICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ZWRUeXBlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIGlkZW50aWZpZXIgYC5gIGlkZW50aWZpZXIgbm9uLWlkZW50aWZpZXIKICAgICAgICAgICAgICByZXR1cm4gbm9UeXBlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIGlkZW50aWZpZXIgYC5gIGlkZW50aWZpZXIKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZUluZm8odG9rZW4sIHR5cGVQYXJhbU9yQXJnKQogICAgICAgICAgLmNvbXB1dGVQcmVmaXhlZFR5cGUocmVxdWlyZWQpOwogICAgfQogICAgLy8gaWRlbnRpZmllciBgLmAgbm9uLWlkZW50aWZpZXIKICAgIGlmIChyZXF1aXJlZCkgewogICAgICB0eXBlUGFyYW1PckFyZyA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbi5uZXh0Lm5leHQsIGluRGVjbGFyYXRpb24pOwogICAgICByZXR1cm4gbmV3IENvbXBsZXhUeXBlSW5mbyh0b2tlbiwgdHlwZVBhcmFtT3JBcmcpCiAgICAgICAgICAuY29tcHV0ZVByZWZpeGVkVHlwZShyZXF1aXJlZCk7CiAgICB9CiAgICByZXR1cm4gbm9UeXBlOwogIH0KCiAgYXNzZXJ0KHR5cGVQYXJhbU9yQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpOwogIGlmIChpc0dlbmVyYWxpemVkRnVuY3Rpb25UeXBlKG5leHQpKSB7CiAgICAvLyBpZGVudGlmaWVyIGBGdW5jdGlvbmAKICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKHRva2VuLCBub1R5cGVQYXJhbU9yQXJnKQogICAgICAgIC5jb21wdXRlSWRlbnRpZmllckdGVChyZXF1aXJlZCk7CiAgfQoKICBpZiAob3B0aW9uYWwoJz8nLCBuZXh0KSkgewogICAgbmV4dCA9IG5leHQubmV4dDsKICAgIGlmIChpc0dlbmVyYWxpemVkRnVuY3Rpb25UeXBlKG5leHQpKSB7CiAgICAgIC8vIGlkZW50aWZpZXIgYD9gIEZ1bmN0aW9uIGAoYAogICAgICByZXR1cm4gbmV3IENvbXBsZXhUeXBlSW5mbyh0b2tlbiwgbm9UeXBlUGFyYW1PckFyZykKICAgICAgICAgIC5jb21wdXRlSWRlbnRpZmllclF1ZXN0aW9uR0ZUKHJlcXVpcmVkKTsKICAgIH0gZWxzZSBpZiAocmVxdWlyZWQgfHwgbG9va3NMaWtlTmFtZShuZXh0KSkgewogICAgICAvLyBpZGVudGlmaWVyIGA/YAogICAgICByZXR1cm4gc2ltcGxlTnVsbGFibGVUeXBlOwogICAgfQogIH0gZWxzZSBpZiAocmVxdWlyZWQgfHwgbG9va3NMaWtlTmFtZShuZXh0KSkgewogICAgLy8gaWRlbnRpZmllciBpZGVudGlmaWVyCiAgICByZXR1cm4gc2ltcGxlVHlwZTsKICB9CiAgcmV0dXJuIG5vVHlwZTsKfQoKLy8vIENhbGxlZCBieSB0aGUgcGFyc2VyIHRvIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBhIHBvc3NpYmxlIGdyb3VwIG9mIHR5cGUKLy8vIHBhcmFtZXRlcnMgb3IgdHlwZSBhcmd1bWVudHMgdGhhdCBmb2xsb3cgW3Rva2VuXS4KLy8vIFRoaXMgZG9lcyBub3QgbW9kaWZ5IHRoZSB0b2tlbiBzdHJlYW0uCi8vLwovLy8gSWYgW2luRGVjbGFyYXRpb25dIGlzIGB0cnVlYCwgdGhlbiB0aGlzIHdpbGwgbW9yZSBhZ2dyZXNzaXZlbHkgcmVjb3ZlcgovLy8gZ2l2ZW4gdW5iYWxhbmNlZCBgPGAgYD5gIGFuZCBpbnZhbGlkIHBhcmFtZXRlcnMgb3IgYXJndW1lbnRzLgpUeXBlUGFyYW1PckFyZ0luZm8gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKFRva2VuIHRva2VuLAogICAgW2Jvb2wgaW5EZWNsYXJhdGlvbiA9IGZhbHNlXSkgewogIFRva2VuIGJlZ2luR3JvdXAgPSB0b2tlbi5uZXh0OwogIGlmICghb3B0aW9uYWwoJzwnLCBiZWdpbkdyb3VwKSkgewogICAgcmV0dXJuIG5vVHlwZVBhcmFtT3JBcmc7CiAgfQoKICAvLyBpZGVudGlmaWVyIGA8YCBgdm9pZGAgYD5gIGFuZCBgPGAgYGR5bmFtaWNgIGA+YAogIC8vIGFyZSBoYW5kbGVkIGJ5IENvbXBsZXhUeXBlSW5mby4KICBUb2tlbiBuZXh0ID0gYmVnaW5Hcm91cC5uZXh0OwogIGlmICgobmV4dC5raW5kID09IElERU5USUZJRVJfVE9LRU4gfHwgbmV4dC50eXBlLmlzUHNldWRvKSkgewogICAgaWYgKG9wdGlvbmFsKCc+JywgbmV4dC5uZXh0KSkgewogICAgICByZXR1cm4gc2ltcGxlVHlwZUFyZ3VtZW50MTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJz4+JywgbmV4dC5uZXh0KSkgewogICAgICByZXR1cm4gc2ltcGxlVHlwZUFyZ3VtZW50MUd0R3Q7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCc+PScsIG5leHQubmV4dCkpIHsKICAgICAgcmV0dXJuIHNpbXBsZVR5cGVBcmd1bWVudDFHdEVxOwogICAgfQogIH0gZWxzZSBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgcmV0dXJuIG5vVHlwZVBhcmFtT3JBcmc7CiAgfQoKICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgYWRkaW5nIGFkZGl0aW9uYWwgY29uc3QgZm9yIGNvbW1vbiBzaXR1YXRpb25zLgogIHJldHVybiBuZXcgQ29tcGxleFR5cGVQYXJhbU9yQXJnSW5mbyh0b2tlbiwgaW5EZWNsYXJhdGlvbikuY29tcHV0ZSgpOwp9CgovLy8gQ2FsbGVkIGJ5IHRoZSBwYXJzZXIgdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGEgcG9zc2libGUgZ3JvdXAgb2YgdHlwZQovLy8gdHlwZSBhcmd1bWVudHMgdGhhdCBmb2xsb3cgW3Rva2VuXSBhbmQgdGhhdCBhcmUgZm9sbG93ZWQgYnkgJygnLgovLy8gUmV0dXJucyB0aGUgdHlwZSBhcmd1bWVudHMgaWYgW3Rva2VuXSBtYXRjaGVzICc8JyB0eXBlICgnLCcgdHlwZSkqICc+JyAnKCcsCi8vLyBhbmQgb3RoZXJ3aXNlIHJldHVybnMgW25vVHlwZVBhcmFtT3JBcmddLiBUaGUgZmluYWwgJygnIGlzIG5vdCBwYXJ0IG9mIHRoZQovLy8gZ3JhbW1hciBjb25zdHJ1Y3QgYHR5cGVBcmd1bWVudHNgLCBidXQgaXQgaXMgcmVxdWlyZWQgaGVyZSBzdWNoIHRoYXQgdHlwZQovLy8gYXJndW1lbnRzIGluIGdlbmVyaWMgbWV0aG9kIGludm9jYXRpb25zIGNhbiBiZSByZWNvZ25pemVkLCBhbmQgYXMgZmV3IGFzCi8vLyBwb3NzaWJsZSBvdGhlciBjb25zdHJ1Y3RzIHdpbGwgcGFzcyAoZS5nLiwgJ2EgPCBDLCBEID4gMycpLgpUeXBlUGFyYW1PckFyZ0luZm8gY29tcHV0ZU1ldGhvZFR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZyA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbik7CiAgcmV0dXJuIG9wdGlvbmFsKCcoJywgdHlwZUFyZy5za2lwKHRva2VuKS5uZXh0KSA/IHR5cGVBcmcgOiBub1R5cGVQYXJhbU9yQXJnOwp9CoFbAE5OPAEgATkBTwEiAR4BKwE/JxpKSh4BSUZIRR4BNhcBUU5LTTI3AU5OS00yNgFNTkRONgFKTkRNLwFESEIfAgE7RxgkHgFGKgEqHQFHQxpHBAFJTklNNAE7NE5KTTQBSFBCGwIBSDAoAUlMRgFKIiwBLihAAgEpGS0fISAcOSkkBBACAU9BBEtCNyQbJR8qNjAqSTw0CkUpKSgsLUk8NAoIGxIhNyRDLCo3JEMyCAYTBAEgFisfOiUGDhUEASkWOCwEAR8BJjIsLzItIRowMzc8NAw+GQo1LzYqCjgXCAYzNCsBHjYzBAEuFB0WJi5DGDAjHDIzOkY0FT4dDgwRMjM2IxU6HQ4MCggjOCoGJRROOCoGEwQBLikdOCkEAR0WKyU6MzIYIQYwHRcEEQIBTjYrBEtCNiQhJB0EATUlID8kIiwmLCYGJB0EAU1IAgFORVBPTk1APT1PAgExcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci90eXBlX2luZm8uZGFydEhzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2lkZW50aWZpZXJfY29udGV4dF9pbXBsLmRhcnTAAI7WLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBhcyBmYXN0YTsKCmltcG9ydCAnLi4vc2Nhbm5lci90b2tlbl9jb25zdGFudHMuZGFydCcgc2hvdyBJREVOVElGSUVSX1RPS0VOLCBTVFJJTkdfVE9LRU47CgppbXBvcnQgJ2lkZW50aWZpZXJfY29udGV4dC5kYXJ0JzsKCmltcG9ydCAncGFyc2VyLmRhcnQnIHNob3cgUGFyc2VyOwoKaW1wb3J0ICd0eXBlX2luZm8uZGFydCcgc2hvdyBpc1ZhbGlkVHlwZVJlZmVyZW5jZTsKCmltcG9ydCAndXRpbC5kYXJ0JyBzaG93IGlzT25lT2ZPckVvZiwgb3B0aW9uYWw7CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5jYXRjaFBhcmFtZXRlcl0uCmNsYXNzIENhdGNoUGFyYW1ldGVySWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgQ2F0Y2hQYXJhbWV0ZXJJZGVudGlmaWVyQ29udGV4dCgpIDogc3VwZXIoJ2NhdGNoUGFyYW1ldGVyJyk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihpZGVudGlmaWVyLCBwYXJzZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoaWRlbnRpZmllciwgZmFzdGEubWVzc2FnZUNhdGNoU3ludGF4KTsKICAgIGlmIChsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJywnLCAnKSddKSkgewogICAgICByZXR1cm4gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogICAgfSBlbHNlIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICByZXR1cm4gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uRGVjbGFyYXRpb25dLgpjbGFzcyBDbGFzc09yTWl4aW5PckV4dGVuc2lvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IENsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdjbGFzc09yTWl4aW5EZWNsYXJhdGlvbicsCiAgICAgICAgICAgIGluRGVjbGFyYXRpb246IHRydWUsIGlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkOiBmYWxzZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLnR5cGUuaXNQc2V1ZG8pIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllciwKICAgICAgICAgICAgY29uc3QgWyc8JywgJ3snLCAnZXh0ZW5kcycsICd3aXRoJywgJ2ltcGxlbWVudHMnLCAnb24nXSkpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWZpZXIudHlwZS5pc0J1aWx0SW4pIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5jb21iaW5hdG9yXS4KY2xhc3MgQ29tYmluYXRvcklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IENvbWJpbmF0b3JJZGVudGlmaWVyQ29udGV4dCgpIDogc3VwZXIoJ2NvbWJpbmF0b3InKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgY29uc3QgZm9sbG93aW5nVmFsdWVzID0gY29uc3QgWyc7JywgJywnLCAnaWYnLCAnYXMnLCAnc2hvdycsICdoaWRlJ107CgogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGlmICghbG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllci5uZXh0LCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICAgIH0KICAgICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBhIHZhbGlkIGlkZW50aWZpZXIgbmFtZSwgdGhlIGltcG9ydCBkZWNsYXJhdGlvbgogICAgICAvLyBpcyBpbnZhbGlkIGFuZCB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGRlY2xhcmF0aW9uLgogICAgICAvLyBJbiB0aGlzIHNpdHVhdGlvbiwgZmFsbCB0aHJvdWdoIHRvIGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyLgogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGZvbGxvd2luZ1ZhbHVlcykgfHwKICAgICAgICBsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5jb25zdHJ1Y3RvclJlZmVyZW5jZV0KLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQuY29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25dCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LmNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzXS4KY2xhc3MgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignY29uc3RydWN0b3JSZWZlcmVuY2UnLCBpc1Njb3BlUmVmZXJlbmNlOiB0cnVlKTsKCiAgY29uc3QgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdjb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbicsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgY29uc3QgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoKQogICAgICA6IHN1cGVyKCdjb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cycsCiAgICAgICAgICAgIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmRvdHRlZE5hbWVdLgpjbGFzcyBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgRG90dGVkTmFtZUlkZW50aWZpZXJDb250ZXh0KCkgOiBzdXBlcignZG90dGVkTmFtZScpOwoKICBjb25zdCBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCkKICAgICAgOiBzdXBlcignZG90dGVkTmFtZUNvbnRpbnVhdGlvbicsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgY29uc3QgZm9sbG93aW5nVmFsdWVzID0gY29uc3QgWycuJywgJz09JywgJyknXTsKCiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgLy8gRG90dGVkTmFtZUlkZW50aWZpZXJDb250ZXh0IGFyZSBvbmx5IHVzZWQgaW4gY29uZGl0aW9uYWwgaW1wb3J0CiAgICAgIC8vIGV4cHJlc3Npb25zLiBBbHRob3VnaCBzb21lIHRvcCBsZXZlbCBrZXl3b3JkcyBzdWNoIGFzIGBpbXBvcnRgIGNhbiBiZQogICAgICAvLyB1c2VkIGFzIGlkZW50aWZpZXJzLCB0aGV5IGFyZSBtb3JlIGxpa2VseSB0aGUgc3RhcnQgb2YgdGhlIG5leHQKICAgICAgLy8gZGlyZWN0aXZlIG9yIGRlY2xhcmF0aW9uLgogICAgICBpZiAoIWlkZW50aWZpZXIuaXNUb3BMZXZlbEtleXdvcmQgfHwKICAgICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLm5leHQsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgICAgfQogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAobG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5lbnVtRGVjbGFyYXRpb25dLgpjbGFzcyBFbnVtRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBFbnVtRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2VudW1EZWNsYXJhdGlvbicsCiAgICAgICAgICAgIGluRGVjbGFyYXRpb246IHRydWUsIGlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkOiBmYWxzZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLnR5cGUuaXNQc2V1ZG8pIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWyd7J10pKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIGlmIChpZGVudGlmaWVyLnR5cGUuaXNCdWlsdEluKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQuZW51bVZhbHVlRGVjbGFyYXRpb25dLgpjbGFzcyBFbnVtVmFsdWVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IEVudW1WYWx1ZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdlbnVtVmFsdWVEZWNsYXJhdGlvbicsIGluRGVjbGFyYXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgIGlmIChsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWycsJywgJ30nXSkpIHsKICAgICAgcmV0dXJuIHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICAgIH0gZWxzZSBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgcmV0dXJuIHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uXS4KY2xhc3MgRXhwcmVzc2lvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IEV4cHJlc3Npb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2V4cHJlc3Npb24nLCBpc1Njb3BlUmVmZXJlbmNlOiB0cnVlKTsKCiAgY29uc3QgRXhwcmVzc2lvbklkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ2V4cHJlc3Npb25Db250aW51YXRpb24nLCBpc0NvbnRpbnVhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBpZiAob3B0aW9uYWwoJ2F3YWl0JywgaWRlbnRpZmllcikgJiYgaWRlbnRpZmllci5uZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgIC8vIEFsdGhvdWdoIHRoZSBgYXdhaXRgIGNhbiBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24sCiAgICAgICAgLy8gaXQgaXMgZm9sbG93ZWQgYnkgYW5vdGhlciBpZGVudGlmaWVyIHdoaWNoIGRvZXMgbm90IGZvcm0KICAgICAgICAvLyBhIHZhbGlkIGV4cHJlc3Npb24uIFJlcG9ydCBhbiBlcnJvciBvbiB0aGUgYGF3YWl0YCB0b2tlbgogICAgICAgIC8vIHJhdGhlciB0aGFuIHRoZSB0b2tlbiBmb2xsb3dpbmcgaXQuCiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKCiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCkgQ29uc2lkZXIgYSBuZXcgbGlzdGVuZXIgZXZlbnQgc28gdGhhdCBhbmFseXplcgogICAgICAgIC8vIGNhbiByZXByZXNlbnQgdGhpcyBhcyBhbiBhd2FpdCBleHByZXNzaW9uIGluIGEgY29udGV4dCB0aGF0IGRvZXMKICAgICAgICAvLyBub3QgYWxsb3cgYXdhaXQuCiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIubmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihpZGVudGlmaWVyLCBwYXJzZXIpOwogICAgICB9CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICBpZiAoIWxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0KGlkZW50aWZpZXIpKSB7CiAgICAgIGlmIChpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIGlmIChpc0NvbnRpbnVhdGlvbiB8fCAhaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnYXMnLCAnaXMnXSkpIHsKICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICghaWRlbnRpZmllci5pc09wZXJhdG9yICYmCiAgICAgICAgICAhaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsCiAgICAgICAgICAgICAgY29uc3QgWycuJywgJywnLCAnKCcsICcpJywgJ1snLCAnXScsICd9JywgJz8nLCAnOicsICc7J10pKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICB0b2tlbiA9IGlkZW50aWZpZXI7CiAgICAgICAgaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgIH0KICAgIC8vIEluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgcmV0dXJuIHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmZpZWxkRGVjbGFyYXRpb25dLgpjbGFzcyBGaWVsZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgRmllbGREZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignZmllbGREZWNsYXJhdGlvbicsIGluRGVjbGFyYXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWyc7JywgJz0nLCAnLCcsICd9J10pIHx8CiAgICAgICAgbG9va3NMaWtlU3RhcnRPZk5leHRDbGFzc01lbWJlcihpZGVudGlmaWVyKSkgewogICAgICByZXR1cm4gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMpOwogICAgfSBlbHNlIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICByZXR1cm4gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllciwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllciksCiAgICAgICAgICBtZXNzYWdlT25Ub2tlbjogaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5maWVsZEluaXRpYWxpemVyXS4KY2xhc3MgRmllbGRJbml0aWFsaXplcklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IEZpZWxkSW5pdGlhbGl6ZXJJZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2ZpZWxkSW5pdGlhbGl6ZXInLCBpc0NvbnRpbnVhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIGFzc2VydChvcHRpb25hbCgnLicsIHRva2VuKSk7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgIC8vIEluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgcmV0dXJuIHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uXS4KY2xhc3MgRm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBGb3JtYWxQYXJhbWV0ZXJEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignZm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb24nLCBpbkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBjb25zdCBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbJzonLCAnPScsICcsJywgJygnLCAnKScsICdbJywgJ10nLCAneycsICd9J107CiAgICBpZiAobG9va3NMaWtlU3RhcnRPZk5leHRDbGFzc01lbWJlcihpZGVudGlmaWVyKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0KGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5pbXBvcnRQcmVmaXhEZWNsYXJhdGlvbl0uCmNsYXNzIEltcG9ydFByZWZpeElkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IEltcG9ydFByZWZpeElkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignaW1wb3J0UHJlZml4RGVjbGFyYXRpb24nLAogICAgICAgICAgICBpbkRlY2xhcmF0aW9uOiB0cnVlLCBpc0J1aWx0SW5JZGVudGlmaWVyQWxsb3dlZDogZmFsc2UpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci50eXBlLmlzUHNldWRvKSB7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBjb25zdCBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbJzsnLCAnaWYnLCAnc2hvdycsICdoaWRlJywgJ2RlZmVycmVkJywgJ2FzJ107CiAgICBpZiAoaWRlbnRpZmllci50eXBlLmlzQnVpbHRJbiAmJgogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLm5leHQsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKY2xhc3MgTGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IExpdGVyYWxTeW1ib2xJZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2xpdGVyYWxTeW1ib2wnLCBpblN5bWJvbDogdHJ1ZSk7CgogIGNvbnN0IExpdGVyYWxTeW1ib2xJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdsaXRlcmFsU3ltYm9sQ29udGludWF0aW9uJywKICAgICAgICAgICAgaW5TeW1ib2w6IHRydWUsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICByZXR1cm4gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5sb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb25dCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LmxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkNvbnRpbnVhdGlvbl0uCmNsYXNzIExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uJywgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIGNvbnN0IExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ2xvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkNvbnRpbnVhdGlvbicsCiAgICAgICAgICAgIGluRGVjbGFyYXRpb246IHRydWUsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnLicsICcoJywgJ3snLCAnPT4nXSkgfHwKICAgICAgICBsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChpZGVudGlmaWVyKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmxhYmVsRGVjbGFyYXRpb25dLgpjbGFzcyBMYWJlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTGFiZWxEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbGFiZWxEZWNsYXJhdGlvbicsIGluRGVjbGFyYXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoaWRlbnRpZmllciwgcGFyc2VyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWyc6J10pIHx8CiAgICAgICAgbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoaWRlbnRpZmllcikpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5sYWJlbFJlZmVyZW5jZV0uCmNsYXNzIExhYmVsUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTGFiZWxSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpIDogc3VwZXIoJ2xhYmVsUmVmZXJlbmNlJyk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihpZGVudGlmaWVyLCBwYXJzZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJzsnXSkpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5saWJyYXJ5TmFtZV0sCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LmxpYnJhcnlOYW1lQ29udGludWF0aW9uXQovLy8gYW5kIFtJZGVudGlmaWVyQ29udGV4dC5wYXJ0TmFtZV0sCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lQ29udGludWF0aW9uXS4KY2xhc3MgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2xpYnJhcnlOYW1lJywgaW5MaWJyYXJ5T3JQYXJ0T2ZEZWNsYXJhdGlvbjogdHJ1ZSk7CgogIGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdsaWJyYXJ5TmFtZUNvbnRpbnVhdGlvbicsCiAgICAgICAgICAgIGluTGlicmFyeU9yUGFydE9mRGVjbGFyYXRpb246IHRydWUsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgY29uc3QgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lKCkKICAgICAgOiBzdXBlcigncGFydE5hbWUnLCBpbkxpYnJhcnlPclBhcnRPZkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgY29uc3QgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lQ29udGludWF0aW9uKCkKICAgICAgOiBzdXBlcigncGFydE5hbWVDb250aW51YXRpb24nLAogICAgICAgICAgICBpbkxpYnJhcnlPclBhcnRPZkRlY2xhcmF0aW9uOiB0cnVlLCBpc0NvbnRpbnVhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGNvbnN0IGZvbGxvd2luZ1ZhbHVlcyA9IGNvbnN0IFsnLicsICc7J107CgogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIFRva2VuIG5leHQgPSBpZGVudGlmaWVyLm5leHQ7CiAgICAgIGlmICghbG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgICBpc09uZU9mT3JFb2YobmV4dCwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgICB9CiAgICAgIC8vIEFsdGhvdWdoIHRoaXMgaXMgYSB2YWxpZCBsaWJyYXJ5IG5hbWUsIHRoZSBsaWJyYXJ5IGRlY2xhcmF0aW9uCiAgICAgIC8vIGlzIGludmFsaWQgYW5kIHRoaXMgbG9va3MgbGlrZSB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZGVjbGFyYXRpb24uCiAgICAgIC8vIEluIHRoaXMgc2l0dWF0aW9uLCBmYWxsIHRocm91Z2ggdG8gaW5zZXJ0IGEgc3ludGhldGljIGxpYnJhcnkgbmFtZS4KICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBmb2xsb3dpbmdWYWx1ZXMpIHx8CiAgICAgICAgbG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQubG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXS4KY2xhc3MgTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdsb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24nLCBpbkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnOycsICc9JywgJywnLCAneycsICd9J10pIHx8CiAgICAgICAgbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoaWRlbnRpZmllcikgfHwKICAgICAgICBpZGVudGlmaWVyLmtpbmQgPT0gU1RSSU5HX1RPS0VOKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQubWV0YWRhdGFSZWZlcmVuY2VdCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0Lm1ldGFkYXRhQ29udGludWF0aW9uXQovLy8gYW5kIFtJZGVudGlmaWVyQ29udGV4dC5tZXRhZGF0YUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50c10uCmNsYXNzIE1ldGFkYXRhUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTWV0YWRhdGFSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ21ldGFkYXRhUmVmZXJlbmNlJywgaXNTY29wZVJlZmVyZW5jZTogdHJ1ZSk7CgogIGNvbnN0IE1ldGFkYXRhUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCkKICAgICAgOiBzdXBlcignbWV0YWRhdGFDb250aW51YXRpb24nLCBpc0NvbnRpbnVhdGlvbjogdHJ1ZSk7CgogIGNvbnN0IE1ldGFkYXRhUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKCkKICAgICAgOiBzdXBlcignbWV0YWRhdGFDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMnLCBpc0NvbnRpbnVhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihpZGVudGlmaWVyLCBwYXJzZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJ3snLCAnfScsICcoJywgJyknLCAnXSddKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXJ0T2ZOZXh0Q2xhc3NNZW1iZXIoaWRlbnRpZmllcikgfHwKICAgICAgICBsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChpZGVudGlmaWVyKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uXSwKLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQubWV0aG9kRGVjbGFyYXRpb25Db250aW51YXRpb25dLAovLy8gYW5kIFtJZGVudGlmaWVyQ29udGV4dC5vcGVyYXRvck5hbWVdLgpjbGFzcyBNZXRob2REZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdtZXRob2REZWNsYXJhdGlvbicsIGluRGVjbGFyYXRpb246IHRydWUpOwoKICBjb25zdCBNZXRob2REZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ21ldGhvZERlY2xhcmF0aW9uQ29udGludWF0aW9uJywKICAgICAgICAgICAgaW5EZWNsYXJhdGlvbjogdHJ1ZSwgaXNDb250aW51YXRpb246IHRydWUpOwoKICBjb25zdCBNZXRob2REZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0Lm9wZXJhdG9yTmFtZSgpCiAgICAgIDogc3VwZXIoJ29wZXJhdG9yTmFtZScsIGluRGVjbGFyYXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpZGVudGlmaWVyLmlzVXNlckRlZmluYWJsZU9wZXJhdG9yICYmICFpc0NvbnRpbnVhdGlvbikgewogICAgICByZXR1cm4gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllciwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLm1lc3NhZ2VNaXNzaW5nT3BlcmF0b3JLZXl3b3JkLAogICAgICAgICAgbWVzc2FnZU9uVG9rZW46IGlkZW50aWZpZXIpOwogICAgfSBlbHNlIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWycuJywgJygnLCAneycsICc9PicsICd9J10pIHx8CiAgICAgICAgbG9va3NMaWtlU3RhcnRPZk5leHRDbGFzc01lbWJlcihpZGVudGlmaWVyKSkgewogICAgICByZXR1cm4gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMpOwogICAgfSBlbHNlIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICByZXR1cm4gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllciwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllciksCiAgICAgICAgICBtZXNzYWdlT25Ub2tlbjogaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5uYW1lZEFyZ3VtZW50UmVmZXJlbmNlXS4KY2xhc3MgTmFtZWRBcmd1bWVudFJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IE5hbWVkQXJndW1lbnRSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ25hbWVkQXJndW1lbnRSZWZlcmVuY2UnLCBhbGxvd2VkSW5Db25zdGFudEV4cHJlc3Npb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoaWRlbnRpZmllciwgcGFyc2VyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWyc6J10pKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQudG9wTGV2ZWxGdW5jdGlvbkRlY2xhcmF0aW9uXQovLy8gYW5kIFtJZGVudGlmaWVyQ29udGV4dC50b3BMZXZlbFZhcmlhYmxlRGVjbGFyYXRpb25dLgpjbGFzcyBUb3BMZXZlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgZmluYWwgTGlzdDxTdHJpbmc+IGZvbGxvd2luZ1ZhbHVlczsKCiAgY29uc3QgVG9wTGV2ZWxEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KFN0cmluZyBuYW1lLCB0aGlzLmZvbGxvd2luZ1ZhbHVlcykKICAgICAgOiBzdXBlcihuYW1lLCBpbkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwoKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBUb2tlbiBuZXh0ID0gaWRlbnRpZmllci5uZXh0OwogICAgICBpZiAoIWxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgICAgaXNPbmVPZk9yRW9mKG5leHQsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgICAgfQogICAgICAvLyBBbHRob3VnaCB0aGlzIGlzIGEgdmFsaWQgdG9wIGxldmVsIG5hbWUsIHRoZSBkZWNsYXJhdGlvbgogICAgICAvLyBpcyBpbnZhbGlkIGFuZCB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGRlY2xhcmF0aW9uLgogICAgICAvLyBJbiB0aGlzIHNpdHVhdGlvbiwgZmFsbCB0aHJvdWdoIHRvIGluc2VydCBhIHN5bnRoZXRpYyBuYW1lLgogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAobG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWZpZXIudHlwZS5pc0J1aWx0SW4pIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC50eXBlZGVmRGVjbGFyYXRpb25dLgpjbGFzcyBUeXBlZGVmRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBUeXBlZGVmRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ3R5cGVkZWZEZWNsYXJhdGlvbicsCiAgICAgICAgICAgIGluRGVjbGFyYXRpb246IHRydWUsIGlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkOiBmYWxzZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLnR5cGUuaXNQc2V1ZG8pIHsKICAgICAgaWYgKG9wdGlvbmFsKCdGdW5jdGlvbicsIGlkZW50aWZpZXIpKSB7CiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgfQogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgY29uc3QgZm9sbG93aW5nVmFsdWVzID0gY29uc3QgWycoJywgJzwnLCAnPScsICc7J107CiAgICBpZiAoaWRlbnRpZmllci50eXBlLmlzQnVpbHRJbiAmJgogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLm5leHQsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQudHlwZVJlZmVyZW5jZV0uCmNsYXNzIFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBUeXBlUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCd0eXBlUmVmZXJlbmNlJywKICAgICAgICAgICAgaXNTY29wZVJlZmVyZW5jZTogdHJ1ZSwKICAgICAgICAgICAgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IGZhbHNlLAogICAgICAgICAgICByZWNvdmVyeVRlbXBsYXRlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkVHlwZSk7CgogIGNvbnN0IFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCd0eXBlUmVmZXJlbmNlQ29udGludWF0aW9uJywKICAgICAgICAgICAgaXNDb250aW51YXRpb246IHRydWUsIGlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkOiBmYWxzZSk7CgogIGNvbnN0IFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5wcmVmaXhlZCgpCiAgICAgIDogc3VwZXIoJ3ByZWZpeGVkVHlwZVJlZmVyZW5jZScsCiAgICAgICAgICAgIGlzU2NvcGVSZWZlcmVuY2U6IHRydWUsCiAgICAgICAgICAgIGlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkOiB0cnVlLAogICAgICAgICAgICByZWNvdmVyeVRlbXBsYXRlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkVHlwZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG5leHQua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpc1ZhbGlkVHlwZVJlZmVyZW5jZShuZXh0KSkgewogICAgICByZXR1cm4gbmV4dDsKICAgIH0gZWxzZSBpZiAobmV4dC5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgaWYgKG9wdGlvbmFsKCJ2b2lkIiwgbmV4dCkpIHsKICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlSW52YWxpZFZvaWQpOwogICAgICB9IGVsc2UgaWYgKG5leHQudHlwZS5pc0J1aWx0SW4pIHsKICAgICAgICBpZiAoIWlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkKSB7CiAgICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVyQXNUeXBlKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3ZhcicsIG5leHQpKSB7CiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZVZhckFzVHlwZU5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkVHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkVHlwZSk7CiAgICBpZiAoIWlzT25lT2ZPckVvZigKICAgICAgICBuZXh0LCBjb25zdCBbJz4nLCAnKScsICdbJywgJ10nLCAnW10nLCAneycsICd9JywgJywnLCAnOyddKSkgewogICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgfQogICAgLy8gSW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICByZXR1cm4gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogIH0KfQoKLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC50eXBlVmFyaWFibGVEZWNsYXJhdGlvbl0uCmNsYXNzIFR5cGVWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgVHlwZVZhcmlhYmxlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ3R5cGVWYXJpYWJsZURlY2xhcmF0aW9uJywKICAgICAgICAgICAgaW5EZWNsYXJhdGlvbjogdHJ1ZSwgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IGZhbHNlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIudHlwZS5pc1BzZXVkbykgewogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgY29uc3QgZm9sbG93aW5nVmFsdWVzID0gY29uc3QgWyc8JywgJz4nLCAnOycsICd9JywgJ2V4dGVuZHMnLCAnc3VwZXInXTsKICAgIGlmIChsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICBsb29rc0xpa2VTdGFydE9mTmV4dENsYXNzTWVtYmVyKGlkZW50aWZpZXIpIHx8CiAgICAgICAgbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoaWRlbnRpZmllcikgfHwKICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpZmllci50eXBlLmlzQnVpbHRJbikgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCnZvaWQgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoVG9rZW4gaWRlbnRpZmllciwgUGFyc2VyIHBhcnNlcikgewogIGlmICghcGFyc2VyLmluUGxhaW5TeW5jICYmIGlkZW50aWZpZXIudHlwZS5pc1BzZXVkbykgewogICAgaWYgKG9wdGlvbmFsKCdhd2FpdCcsIGlkZW50aWZpZXIpKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKGlkZW50aWZpZXIsIGZhc3RhLm1lc3NhZ2VBd2FpdEFzSWRlbnRpZmllcik7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd5aWVsZCcsIGlkZW50aWZpZXIpKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKGlkZW50aWZpZXIsIGZhc3RhLm1lc3NhZ2VZaWVsZEFzSWRlbnRpZmllcik7CiAgICB9CiAgfQp9Cgpib29sIGxvb2tzTGlrZVN0YXJ0T2ZOZXh0Q2xhc3NNZW1iZXIoVG9rZW4gdG9rZW4pID0+CiAgICB0b2tlbi5pc01vZGlmaWVyIHx8IGlzT25lT2ZPckVvZih0b2tlbiwgY29uc3QgWydAJywgJ2dldCcsICdzZXQnLCAndm9pZCddKTsKCmJvb2wgbG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKFRva2VuIHRva2VuKSA9PgogICAgdG9rZW4uaXNUb3BMZXZlbEtleXdvcmQgfHwKICAgIGlzT25lT2ZPckVvZih0b2tlbiwgY29uc3QgWydjb25zdCcsICdnZXQnLCAnZmluYWwnLCAnc2V0JywgJ3ZhcicsICd2b2lkJ10pOwqDuwBOTjwBLgEnAU4BIgEiATMBMAEsQkUBDDcjMSM8GQYBEEkvNj80RUFEBhcEAgFASzMpRQEMNyMxJBkGARA/IUhBUCwuRQ0uOS9HQ0wIBhcEAgEoPj0BDDcjMUoBI0I8GwhKS0sGARA1P0FQDS45L0dDTAgGFwQCATE9UEgwPwE9SQFPRCMBDDcjMSM8GQYBEC1BUA0uOQYXBAIBKD49ATM/AQw3IzE0ASNJT0kjKzwbCAYBED81QVANLjkvR0NMCAYXBAIBLUMrIUUBDDcjMSQZBgEQPzFBUCwuRQ0uOS9HQ0wIBhcEAgEySDA8AQw3IzEjGQYBECw3PzY/NEVBRAYXBAIBKD4mNQEzPwEMNyMxI0s+REQvMDgBSUwcIA8+CBkGARAsNzAuTx0KKyRLRxwhCAY7PQQCAS5ELDgBDDcjMSMZBgEQQDc8NEVBQE8nDS45GQYEAgEuRCw5AQw3IiMxIxkGARAsNzs9BAIBOE42QgEMNyMxIzwZBgEQUTcvNUFQDS45L0dDTAgGFwQCATVAKClFAQw3IzEkGQYBEFElOi5FRjVBUA0uOS9HQ0wIBhcEAgFBKTABNiszAQw3IzEjGQYBEDlOBAIBNUJMNEABQTY4AQw3IzEjPBkGARBBL0FQDS45L0dDTAgGFwQCAS5ELDgBDDcjMSM8GQYBEDEvQVANLjkvR0NMCAYXBAIBLEJFAQw3IzEjPBkGARAxQVANLjkvR0NMCAYXBAIBKTQmMjsjQgEwKUcBLD8BOCZHAQw3IzEuASMkQjEbCEhLTQYBEDU/QVANLjkvR0NMCAYXBAIBNkw0QAEMNyMxIzwZBgEQRS8rQVANLjkvR0NMCAYXBAIBLjFERS08ATo9AUxPAQw3IzEjPBkGARBFPzcvQVANLjkvR0NMCAYXBAIBLzsqRS05ATovOAE6NAEMNyMxIxkGARBBQDgnTTc8NEVBQE8nDS45GQYEAgE0SjJMAQw3IzEjPBkGARAxQVANLjkvR0NMCAYXBAIBODlHJgFQKgEMNyMxASMkQjEbCEJLRQYBED81QVAsLkUNLjkvR0NMCAYXBAIBMEYuJEUBDDcjMSQuMDsIGQYBEDglOi5FRjVBUA0uOS9HQ0wIBhcEAgErQSkfJC87ATYrRgEyJyQuOwEMNx0rJhMtJEcoKzI8CipJDzAvCBMGThdHRRQZBjs9BAIBNEszKUUBDDcjMSQZBgEQTD83LzUuOUUsLkUNLjkvR0NMCAYXBAIBSTkpUTBRBgQCATVQAT0fUAE/cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9pZGVudGlmaWVyX2NvbnRleHRfaW1wbC5kYXJ0TXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvcHJvZ3JhbV9idWlsZGVyL3Byb2dyYW1fYnVpbGRlci5kYXJ0wAC/ey8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5wcm9ncmFtX2J1aWxkZXI7CgppbXBvcnQgJ2RhcnQ6aW8nOwppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBqc29uRGVjb2RlOwoKaW1wb3J0ICcuLi8uLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgTmFtZXMsIFNlbGVjdG9yczsKaW1wb3J0ICcuLi8uLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnCiAgICBzaG93IENvbnN0YW50VmFsdWUsIEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZTsKaW1wb3J0ICcuLi8uLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBKQ29tbW9uRWxlbWVudHMsIEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JwogICAgc2hvdyBkZWZlcnJlZFBhcnRGaWxlTmFtZSwgT3V0cHV0VW5pdCwgT3V0cHV0VW5pdERhdGE7CmltcG9ydCAnLi4vLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCcKICAgIHNob3cgRmllbGRBbmFseXNpc0RhdGEsIEpGaWVsZEFuYWx5c2lzOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL2N1c3RvbV9lbGVtZW50c19hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBOYW1lciwgU3RyaW5nQmFja2VkTmFtZTsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0JwogICAgc2hvdyBSdW50aW1lVHlwZXNDaGVja3MsIFJ1bnRpbWVUeXBlc0VuY29kZXI7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX25ldy5kYXJ0JwogICAgc2hvdyBSZWNpcGVFbmNvZGVyLCBSZWNpcGVFbmNvZGluZzsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JyBzaG93IFJ1bnRpbWVUeXBlc05lZWQ7CmltcG9ydCAnLi4vLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCcgc2hvdyBKR2VuZXJhdG9yQm9keSwgSlNpZ25hdHVyZU1ldGhvZDsKaW1wb3J0ICcuLi8uLi9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0JwogICAgc2hvdyBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlLCBUeXBlRXhwcmVzc2lvblJlY2lwZTsKaW1wb3J0ICcuLi8uLi9uYXRpdmUvZW5xdWV1ZS5kYXJ0JyBzaG93IE5hdGl2ZUNvZGVnZW5FbnF1ZXVlcjsKaW1wb3J0ICcuLi8uLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi8uLi91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi8uLi91bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnQnIHNob3cgU2VsZWN0b3JDb25zdHJhaW50czsKaW1wb3J0ICcuLi8uLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICcuLi9qc19lbWl0dGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NTdHViR2VuZXJhdG9yLAogICAgICAgIENvZGVFbWl0dGVyVGFzaywKICAgICAgICBFbWl0dGVyLAogICAgICAgIEluc3RhbnRpYXRpb25TdHViR2VuZXJhdG9yLAogICAgICAgIEludGVyY2VwdG9yU3R1YkdlbmVyYXRvciwKICAgICAgICBNYWluQ2FsbFN0dWJHZW5lcmF0b3IsCiAgICAgICAgUGFyYW1ldGVyU3R1YkdlbmVyYXRvciwKICAgICAgICBSdW50aW1lVHlwZUdlbmVyYXRvciwKICAgICAgICBUeXBlVGVzdFByb3BlcnRpZXM7CmltcG9ydCAnLi4vbW9kZWwuZGFydCc7CmltcG9ydCAnLi4vc29ydGVyLmRhcnQnOwoKcGFydCAnY29sbGVjdG9yLmRhcnQnOwpwYXJ0ICdmaWVsZF92aXNpdG9yLmRhcnQnOwpwYXJ0ICdyZWdpc3RyeS5kYXJ0JzsKCi8vLyBCdWlsZHMgYSBzZWxmLWNvbnRhaW5lZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvZ3JhbSB0aGF0IGNhbiB0aGVuIGJlCi8vLyBlbWl0dGVkIG1vcmUgZWFzaWx5IGJ5IHRoZSBpbmRpdmlkdWFsIGVtaXR0ZXJzLgpjbGFzcyBQcm9ncmFtQnVpbGRlciB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgZmluYWwgSkVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIEpDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgT3V0cHV0VW5pdERhdGEgX291dHB1dFVuaXREYXRhOwogIGZpbmFsIENvZGVnZW5Xb3JsZCBfY29kZWdlbldvcmxkOwogIGZpbmFsIE5hdGl2ZUNvZGVnZW5FbnF1ZXVlciBfbmF0aXZlQ29kZWdlbkVucXVldWVyOwogIGZpbmFsIEJhY2tlbmRVc2FnZSBfYmFja2VuZFVzYWdlOwogIGZpbmFsIE5hdGl2ZURhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZCBfcnRpTmVlZDsKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgX2ludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBSdW50aW1lVHlwZXNDaGVja3MgX3J0aUNoZWNrczsKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIF9ydGlFbmNvZGVyOwogIGZpbmFsIFJlY2lwZUVuY29kZXIgX3J0aVJlY2lwZUVuY29kZXI7CiAgZmluYWwgT25lU2hvdEludGVyY2VwdG9yRGF0YSBfb25lU2hvdEludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBDdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcyBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXM7CiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwganMuRXhwcmVzc2lvbj4gX2dlbmVyYXRlZENvZGU7CiAgZmluYWwgTmFtZXIgX25hbWVyOwogIGZpbmFsIENvZGVFbWl0dGVyVGFzayBfdGFzazsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIEpGaWVsZEFuYWx5c2lzIF9maWVsZEFuYWx5c2lzOwogIGZpbmFsIEluZmVycmVkRGF0YSBfaW5mZXJyZWREYXRhOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CgogIC8vLyBUaGUgW1NvcnRlcl0gdXNlZCBmb3Igb3JkZXJpbmcgZWxlbWVudHMgaW4gdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0LgogIGZpbmFsIFNvcnRlciBfc29ydGVyOwoKICAvLy8gQ29udGFpbnMgdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbiB0aGUgcHJvZ3JhbSBidWlsZGVyIHVzZWQgdG8gYnVpbGQKICAvLy8gdGhlIG1vZGVsLgogIC8vIFRoZSBjb2xsZWN0b3Igd2lsbCBiZSBmaWxsZWQgb24gdGhlIGZpcnN0IGNhbGwgdG8gYGJ1aWxkUHJvZ3JhbWAuCiAgLy8gSXQgaXMgcHVibGljbHkgZXhwb3NlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIE5ldyBjb2RlCiAgLy8gKGFuZCBpbiBwYXJ0aWN1bGFyIG5ldyBlbWl0dGVycykgc2hvdWxkIG5vdCBhY2Nlc3MgaXQgb3V0c2lkZSB0aGlzIGNsYXNzLgogIGZpbmFsIENvbGxlY3RvciBjb2xsZWN0b3I7CgogIGZpbmFsIFJlZ2lzdHJ5IF9yZWdpc3RyeTsKCiAgZmluYWwgRnVuY3Rpb25FbnRpdHkgX21haW5GdW5jdGlvbjsKICBmaW5hbCBJdGVyYWJsZTxDbGFzc0VudGl0eT4gX3J0aU5lZWRlZENsYXNzZXM7CgogIC8vLyBUcnVlIGlmIHRoZSBwcm9ncmFtIHNob3VsZCBzdG9yZSBmdW5jdGlvbiB0eXBlcyBpbiB0aGUgbWV0YWRhdGEuCiAgYm9vbCBfc3RvcmVGdW5jdGlvblR5cGVzSW5NZXRhZGF0YSA9IGZhbHNlOwoKICBmaW5hbCBTZXQ8VHlwZVZhcmlhYmxlVHlwZT4gX2xhdGVOYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkgPSB7fTsKCiAgQ2xhc3NIaWVyYXJjaHkgZ2V0IF9jbGFzc0hpZXJhcmNoeSA9PiBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHk7CgogIFByb2dyYW1CdWlsZGVyKAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9yZXBvcnRlciwKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5fb3V0cHV0VW5pdERhdGEsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwKICAgICAgdGhpcy5fbmF0aXZlQ29kZWdlbkVucXVldWVyLAogICAgICB0aGlzLl9iYWNrZW5kVXNhZ2UsCiAgICAgIHRoaXMuX25hdGl2ZURhdGEsCiAgICAgIHRoaXMuX3J0aU5lZWQsCiAgICAgIHRoaXMuX2ludGVyY2VwdG9yRGF0YSwKICAgICAgdGhpcy5fcnRpQ2hlY2tzLAogICAgICB0aGlzLl9ydGlFbmNvZGVyLAogICAgICB0aGlzLl9ydGlSZWNpcGVFbmNvZGVyLAogICAgICB0aGlzLl9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLAogICAgICB0aGlzLl9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcywKICAgICAgdGhpcy5fZ2VuZXJhdGVkQ29kZSwKICAgICAgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX3Rhc2ssCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9maWVsZEFuYWx5c2lzLAogICAgICB0aGlzLl9pbmZlcnJlZERhdGEsCiAgICAgIHRoaXMuX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgIHRoaXMuX3NvcnRlciwKICAgICAgdGhpcy5fcnRpTmVlZGVkQ2xhc3NlcywKICAgICAgdGhpcy5fbWFpbkZ1bmN0aW9uKQogICAgICA6IHRoaXMuY29sbGVjdG9yID0gbmV3IENvbGxlY3RvcigKICAgICAgICAgICAgX29wdGlvbnMsCiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cywKICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgICAgX291dHB1dFVuaXREYXRhLAogICAgICAgICAgICBfY29kZWdlbldvcmxkLAogICAgICAgICAgICBfbmFtZXIsCiAgICAgICAgICAgIF90YXNrLmVtaXR0ZXIsCiAgICAgICAgICAgIF9uYXRpdmVEYXRhLAogICAgICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLAogICAgICAgICAgICBfb25lU2hvdEludGVyY2VwdG9yRGF0YSwKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLAogICAgICAgICAgICBfcnRpTmVlZGVkQ2xhc3NlcywKICAgICAgICAgICAgX2dlbmVyYXRlZENvZGUsCiAgICAgICAgICAgIF9zb3J0ZXIpLAogICAgICAgIHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KF9vdXRwdXRVbml0RGF0YS5tYWluT3V0cHV0VW5pdCwgX3NvcnRlcik7CgogIC8vLyBNYXBwaW5nIGZyb20gW0NsYXNzRW50aXR5XSB0byBjb25zdHJ1Y3RlZCBbQ2xhc3NdLiBXZSBuZWVkIHRoaXMgdG8KICAvLy8gdXBkYXRlIHRoZSBzdXBlcmNsYXNzIGluIHRoZSBbQ2xhc3NdLgogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3M+IF9jbGFzc2VzID0gPENsYXNzRW50aXR5LCBDbGFzcz57fTsKCiAgLy8vIE1hcHBpbmcgZnJvbSBbT3V0cHV0VW5pdF0gdG8gY29uc3RydWN0ZWQgW0ZyYWdtZW50XS4gV2UgbmVlZCB0aGlzIHRvCiAgLy8vIGdlbmVyYXRlIHRoZSBkZWZlcnJlZExvYWRpbmdNYXAgKHRvIGtub3cgd2hpY2ggaHVua3MgdG8gbG9hZCkuCiAgZmluYWwgTWFwPE91dHB1dFVuaXQsIEZyYWdtZW50PiBfb3V0cHV0cyA9IDxPdXRwdXRVbml0LCBGcmFnbWVudD57fTsKCiAgLy8vIE1hcHBpbmcgZnJvbSBbQ29uc3RhbnRWYWx1ZV0gdG8gY29uc3RydWN0ZWQgW0NvbnN0YW50XS4gV2UgbmVlZCB0aGlzIHRvCiAgLy8vIHVwZGF0ZSBmaWVsZC1pbml0aWFsaXplcnMgdG8gcG9pbnQgdG8gdGhlIENvbnN0YW50TW9kZWwuCiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIENvbnN0YW50PiBfY29uc3RhbnRzID0gPENvbnN0YW50VmFsdWUsIENvbnN0YW50Pnt9OwoKICBTZXQ8Q2xhc3M+IF91bm5lZWRlZE5hdGl2ZUNsYXNzZXM7CgogIC8vLyBDbGFzc2VzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBkdXJpbmcgYSBwcm9maWxlIHJ1bi4KICAvLy8KICAvLy8gVGhlc2UgY2xhc3NlcyBzaG91bGQgbm90IGJlIHNvZnQtZGVmZXJyZWQuCiAgLy8vCiAgLy8vIEFsc28gY29udGFpbnMgY2xhc3NlcyB0aGF0IGFyZSBub3QgdHJhY2tlZCBieSB0aGUgcHJvZmlsZSBydW4gKGxpa2UKICAvLy8gaW50ZXJjZXB0b3JzLCAuLi4pLgogIFNldDxDbGFzc0VudGl0eT4gX25vdFNvZnREZWZlcnJlZDsKCiAgUHJvZ3JhbSBidWlsZFByb2dyYW0oe2Jvb2wgc3RvcmVGdW5jdGlvblR5cGVzSW5NZXRhZGF0YTogZmFsc2V9KSB7CiAgICBjb2xsZWN0b3IuY29sbGVjdCgpOwogICAgX2luaXRpYWxpemVTb2Z0RGVmZXJyZWRNYXAoKTsKCiAgICB0aGlzLl9zdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhID0gc3RvcmVGdW5jdGlvblR5cGVzSW5NZXRhZGF0YTsKICAgIC8vIE5vdGU6IEluIHJhcmUgY2FzZXMgKG1vc3RseSB0ZXN0cykgb3V0cHV0IHVuaXRzIGNhbiBiZSBlbXB0eS4gVGhpcwogICAgLy8gaGFwcGVucyB3aGVuIHRoZSBkZWZlcnJlZCBjb2RlIGlzIGRlYWQtY29kZSBlbGltaW5hdGVkIGJ1dCB3ZSBzdGlsbCBuZWVkCiAgICAvLyB0byBjaGVjayB0aGF0IHRoZSBsaWJyYXJ5IGhhcyBiZWVuIGxvYWRlZC4KICAgIF9jbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0cwogICAgICAgIC5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlck91dHB1dFVuaXQpOwogICAgY29sbGVjdG9yLm91dHB1dENsYXNzTGlzdHMuZm9yRWFjaChfcmVnaXN0cnkucmVnaXN0ZXJDbGFzc2VzKTsKICAgIGNvbGxlY3Rvci5vdXRwdXRTdGF0aWNMaXN0cy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlck1lbWJlcnMpOwogICAgY29sbGVjdG9yLm91dHB1dENvbnN0YW50TGlzdHMuZm9yRWFjaChfcmVnaXN0ZXJDb25zdGFudHMpOwogICAgY29sbGVjdG9yLm91dHB1dFN0YXRpY05vbkZpbmFsRmllbGRMaXN0cy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlck1lbWJlcnMpOwoKICAgIC8vIFdlIGFsd2F5cyBhZGQgdGhlIGN1cnJlbnQgaXNvbGF0ZSBob2xkZXIuCiAgICBfcmVnaXN0ZXJTdGF0aWNTdGF0ZUhvbGRlcigpOwoKICAgIC8vIFdlIG5lZWQgdG8gcnVuIHRoZSBuYXRpdmUtcHJlcGFyYXRpb24gYmVmb3JlIHdlIGJ1aWxkIHRoZSBvdXRwdXQuIFRoZQogICAgLy8gcHJlcGFyYXRpb24gY29kZSwgaW4gdHVybiBuZWVkcyB0aGUgY2xhc3NlcyB0byBiZSBzZXQgdXAuCiAgICAvLyBXZSB0aHVzIGJ1aWxkIHRoZSBjbGFzc2VzIGJlZm9yZSBidWlsZGluZyB0aGVpciBjb250YWluZXJzLgogICAgY29sbGVjdG9yLm91dHB1dENsYXNzTGlzdHMKICAgICAgICAuZm9yRWFjaCgoT3V0cHV0VW5pdCBfLCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICAgIGNsYXNzZXMuZm9yRWFjaChfYnVpbGRDbGFzcyk7CiAgICB9KTsKCiAgICAvLyBSZXNvbHZlIHRoZSBzdXBlcmNsYXNzIHJlZmVyZW5jZXMgYWZ0ZXIgd2UndmUgcHJvY2Vzc2VkIGFsbCB0aGUgY2xhc3Nlcy4KICAgIF9jbGFzc2VzLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgQ2xhc3MgYykgewogICAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgIGlmIChzdXBlcmNsYXNzICE9IG51bGwpIHsKICAgICAgICBjLnNldFN1cGVyY2xhc3MoX2NsYXNzZXNbc3VwZXJjbGFzc10pOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgYy5zdXBlcmNsYXNzICE9IG51bGwsCiAgICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgICAgY2xzLAogICAgICAgICAgICAgICAgIk5vIENsYXNzIGZvciBoYXMgYmVlbiBjcmVhdGVkIGZvciBzdXBlcmNsYXNzICIKICAgICAgICAgICAgICAgICIke3N1cGVyY2xhc3N9IG9mICRjLiIpKTsKICAgICAgfQogICAgICBpZiAoYy5pc1NpbXBsZU1peGluQXBwbGljYXRpb24gfHwgYy5pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgIENsYXNzRW50aXR5IGVmZmVjdGl2ZU1peGluQ2xhc3MgPQogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldEVmZmVjdGl2ZU1peGluQ2xhc3MoY2xzKTsKICAgICAgICBjLnNldE1peGluQ2xhc3MoX2NsYXNzZXNbZWZmZWN0aXZlTWl4aW5DbGFzc10pOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgYy5taXhpbkNsYXNzICE9IG51bGwsCiAgICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgICAgY2xzLAogICAgICAgICAgICAgICAgIk5vIGNsYXNzIGZvciBlZmZlY3RpdmUgbWl4aW4gJHtlZmZlY3RpdmVNaXhpbkNsYXNzfSBvbiAiCiAgICAgICAgICAgICAgICAiJGNscy4iKSk7CiAgICAgIH0KICAgIH0pOwoKICAgIExpc3Q8Q2xhc3M+IG5hdGl2ZUNsYXNzZXMgPSBjb2xsZWN0b3IubmF0aXZlQ2xhc3Nlc0FuZFN1YmNsYXNzZXMKICAgICAgICAubWFwKChDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQpID0+IF9jbGFzc2VzW2NsYXNzRWxlbWVudF0pCiAgICAgICAgLnRvTGlzdCgpOwoKICAgIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0b3JDbGFzc2VzTmVlZGVkQnlDb25zdGFudHMgPQogICAgICAgIGNvbGxlY3Rvci5jb21wdXRlSW50ZXJjZXB0b3JzUmVmZXJlbmNlZEZyb21Db25zdGFudHMoKTsKCiAgICBfdW5uZWVkZWROYXRpdmVDbGFzc2VzID0gX3Rhc2submF0aXZlRW1pdHRlci5wcmVwYXJlTmF0aXZlQ2xhc3NlcygKICAgICAgICBuYXRpdmVDbGFzc2VzLCBpbnRlcmNlcHRvckNsYXNzZXNOZWVkZWRCeUNvbnN0YW50cywgX3J0aU5lZWRlZENsYXNzZXMpOwoKICAgIF9hZGRKc0ludGVyb3BTdHVicyhfcmVnaXN0cnkubWFpbkxpYnJhcmllc01hcCk7CgogICAgTWFpbkZyYWdtZW50IG1haW5GcmFnbWVudCA9IF9idWlsZE1haW5GcmFnbWVudChfcmVnaXN0cnkubWFpbkxpYnJhcmllc01hcCk7CiAgICBJdGVyYWJsZTxGcmFnbWVudD4gZGVmZXJyZWRGcmFnbWVudHMgPQogICAgICAgIF9yZWdpc3RyeS5kZWZlcnJlZExpYnJhcmllc01hcC5tYXAoX2J1aWxkRGVmZXJyZWRGcmFnbWVudCk7CgogICAgTGlzdDxGcmFnbWVudD4gZnJhZ21lbnRzID0gbmV3IExpc3Q8RnJhZ21lbnQ+KF9yZWdpc3RyeS5saWJyYXJpZXNNYXBDb3VudCk7CiAgICBmcmFnbWVudHNbMF0gPSBtYWluRnJhZ21lbnQ7CiAgICBmcmFnbWVudHMuc2V0QWxsKDEsIGRlZmVycmVkRnJhZ21lbnRzKTsKCiAgICBfbWFya0VhZ2VyQ2xhc3NlcygpOwoKICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIGFzc29jaWF0ZU5hbWVkVHlwZVZhcmlhYmxlc05ld1J0aSgpOwogICAgfQoKICAgIExpc3Q8SG9sZGVyPiBob2xkZXJzID0gX3JlZ2lzdHJ5LmhvbGRlcnMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgYm9vbCBuZWVkc05hdGl2ZVN1cHBvcnQgPQogICAgICAgIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIuaGFzSW5zdGFudGlhdGVkTmF0aXZlQ2xhc3NlczsKCiAgICBhc3NlcnQoIW5lZWRzTmF0aXZlU3VwcG9ydCB8fCBuYXRpdmVDbGFzc2VzLmlzTm90RW1wdHkpOwoKICAgIExpc3Q8anMuVG9rZW5GaW5hbGl6ZXI+IGZpbmFsaXplcnMgPSBbX3Rhc2subWV0YWRhdGFDb2xsZWN0b3JdOwogICAgaWYgKF9uYW1lciBpcyBqcy5Ub2tlbkZpbmFsaXplcikgewogICAgICB2YXIgbmFtaW5nRmluYWxpemVyID0gX25hbWVyOwogICAgICBmaW5hbGl6ZXJzLmFkZChuYW1pbmdGaW5hbGl6ZXIgYXMganMuVG9rZW5GaW5hbGl6ZXIpOwogICAgfQoKICAgIHJldHVybiBuZXcgUHJvZ3JhbShmcmFnbWVudHMsIGhvbGRlcnMsIF9idWlsZExvYWRNYXAoKSwKICAgICAgICBfYnVpbGRUeXBlVG9JbnRlcmNlcHRvck1hcCgpLCBfdGFzay5tZXRhZGF0YUNvbGxlY3RvciwgZmluYWxpemVycywKICAgICAgICBuZWVkc05hdGl2ZVN1cHBvcnQ6IG5lZWRzTmF0aXZlU3VwcG9ydCwKICAgICAgICBvdXRwdXRDb250YWluc0NvbnN0YW50TGlzdDogY29sbGVjdG9yLm91dHB1dENvbnRhaW5zQ29uc3RhbnRMaXN0LAogICAgICAgIGhhc1NvZnREZWZlcnJlZENsYXNzZXM6IF9ub3RTb2Z0RGVmZXJyZWQgIT0gbnVsbCk7CiAgfQoKICB2b2lkIF9tYXJrRWFnZXJDbGFzc2VzKCkgewogICAgX21hcmtFYWdlckludGVyY2VwdG9yQ2xhc3NlcygpOwogIH0KCiAgdm9pZCBfaW5pdGlhbGl6ZVNvZnREZWZlcnJlZE1hcCgpIHsKICAgIHZhciBhbGxvY2F0ZWRDbGFzc2VzUGF0aCA9IF9vcHRpb25zLmV4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aDsKICAgIGlmIChhbGxvY2F0ZWRDbGFzc2VzUGF0aCAhPSBudWxsKSB7CiAgICAgIC8vIFRPRE8oMjk1NzQpOiB0aGUgZm9sbG93aW5nIGJsYWNrbGlzdCBpcyBhZC1ob2MgYW5kIHBvdGVudGlhbGx5CiAgICAgIC8vIGluY29tcGxldGUuIFdlIG5lZWQgdG8gbWFyayBhbGwgY2xhc3NlcyBhcyBibGFjayBsaXN0ZWQsIHRoYXQgYXJlCiAgICAgIC8vIHVzZWQgd2l0aG91dCBjb2RlIGdvaW5nIHRocm91Z2ggdGhlIGNsYXNzJyBjb25zdHJ1Y3Rvci4KICAgICAgdmFyIGJsYWNrTGlzdCA9IFsKICAgICAgICAnZGFydDpfaW50ZXJjZXB0b3JzJywKICAgICAgICAnZGFydDpodG1sJywKICAgICAgICAnZGFydDp0eXBlZF9kYXRhX2ltcGxlbWVudGF0aW9uJywKICAgICAgICAnZGFydDpfbmF0aXZlX3R5cGVkX2RhdGEnCiAgICAgIF0udG9TZXQoKTsKCiAgICAgIC8vIFRPRE8oMjk1NzQpOiB0aGUgY29tcGlsZXIgc2hvdWxkIG5vdCBqdXN0IHVzZSBkYXJ0OmlvIHRvIGdldCB0aGUKICAgICAgLy8gY29udGVudHMgb2YgYSBmaWxlLgogICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShhbGxvY2F0ZWRDbGFzc2VzUGF0aCk7CgogICAgICAvLyBUT0RPKDI5NTc0KTogYXJlIHRoZSBmb2xsb3dpbmcgY2hlY2tzIG5lY2Vzc2FyeT8KICAgICAgLy8gVG8gbWFrZSBjb21waWxhdGlvbiBpbiBidWlsZC1zeXN0ZW1zIGVhc2llciwgd2UgaWdub3JlIG5vbi1leGlzdGluZwogICAgICAvLyBvciBlbXB0eSBwcm9maWxlcy4KICAgICAgaWYgKCFmaWxlLmV4aXN0c1N5bmMoKSkgewogICAgICAgIF9yZXBvcnRlci5sb2coIlByb2ZpbGUgZmlsZSBkb2VzIG5vdCBleGlzdDogJGFsbG9jYXRlZENsYXNzZXNQYXRoIik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChmaWxlLmxlbmd0aFN5bmMoKSA9PSAwKSB7CiAgICAgICAgX3JlcG9ydGVyLmxvZygiUHJvZmlsZSBpbmZvcm1hdGlvbiAoYWxsb2NhdGVkIGNsYXNzZXMpIGlzIGVtcHR5LiIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgU3RyaW5nIGRhdGEgPSBuZXcgRmlsZShhbGxvY2F0ZWRDbGFzc2VzUGF0aCkucmVhZEFzU3RyaW5nU3luYygpOwogICAgICBTZXQ8U3RyaW5nPiBhbGxvY2F0ZWRDbGFzc2VzS2V5cyA9IGpzb25EZWNvZGUoZGF0YSkua2V5cy50b1NldCgpOwogICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGFsbG9jYXRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAgICAgLy8gQ29sbGVjdHMgYWxsIHN1cGVyIGFuZCBtaXhpbiBjbGFzc2VzIG9mIGEgY2xhc3MuCiAgICAgIHZvaWQgY29sbGVjdChDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICAgICAgYWxsb2NhdGVkQ2xhc3Nlcy5hZGQoZWxlbWVudCk7CiAgICAgICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGVsZW1lbnQpKSB7CiAgICAgICAgICBjb2xsZWN0KF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RWZmZWN0aXZlTWl4aW5DbGFzcyhlbGVtZW50KSk7CiAgICAgICAgfQogICAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoZWxlbWVudCk7CiAgICAgICAgaWYgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICAgICAgY29sbGVjdChzdXBlcmNsYXNzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIEZvciBldmVyeSBrbm93biBjbGFzcywgc2VlIGlmIGl0IHdhcyBhbGxvY2F0ZWQgaW4gdGhlIHByb2ZpbGUuIElmIHllcywKICAgICAgLy8gY29sbGVjdCBpdHMgZGVwZW5kZW5jaWVzIChzdXBlcnMgYW5kIG1peGlucykgYW5kIG1hcmsgdGhlbSBhcwogICAgICAvLyBub3Qtc29mdC1kZWZlcnJhYmxlLgogICAgICBjb2xsZWN0b3Iub3V0cHV0Q2xhc3NMaXN0cy5mb3JFYWNoKChfLCBMaXN0PENsYXNzRW50aXR5PiBlbGVtZW50cykgewogICAgICAgIGZvciAoQ2xhc3NFbnRpdHkgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICAgICAgLy8gVE9ETygyOTU3NCk6IHNoYXJlIHRoZSBlbmNvZGluZyBvZiB0aGUgZWxlbWVudCB3aXRoIHRoZSBjb2RlCiAgICAgICAgICAvLyB0aGF0IGVtaXRzIHRoZSBwcm9maWxlLXJ1bi4KICAgICAgICAgIHZhciBrZXkgPSAiJHtlbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpfToke2VsZW1lbnQubmFtZX0iOwogICAgICAgICAgaWYgKGFsbG9jYXRlZENsYXNzZXNLZXlzLmNvbnRhaW5zKGtleSkgfHwKICAgICAgICAgICAgICBfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpIHx8CiAgICAgICAgICAgICAgYmxhY2tMaXN0LmNvbnRhaW5zKGVsZW1lbnQubGlicmFyeS5jYW5vbmljYWxVcmkudG9TdHJpbmcoKSkpIHsKICAgICAgICAgICAgY29sbGVjdChlbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICBfbm90U29mdERlZmVycmVkID0gYWxsb2NhdGVkQ2xhc3NlczsKICAgIH0KICB9CgogIC8vLyBCdWlsZHMgYSBtYXAgZnJvbSBsb2FkSWQgdG8gb3V0cHV0cy10by1sb2FkLgogIE1hcDxTdHJpbmcsIExpc3Q8RnJhZ21lbnQ+PiBfYnVpbGRMb2FkTWFwKCkgewogICAgTWFwPFN0cmluZywgTGlzdDxGcmFnbWVudD4+IGxvYWRNYXAgPSA8U3RyaW5nLCBMaXN0PEZyYWdtZW50Pj57fTsKICAgIF9jbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5odW5rc1RvTG9hZAogICAgICAgIC5mb3JFYWNoKChTdHJpbmcgbG9hZElkLCBMaXN0PE91dHB1dFVuaXQ+IG91dHB1dFVuaXRzKSB7CiAgICAgIGxvYWRNYXBbbG9hZElkXSA9IG91dHB1dFVuaXRzCiAgICAgICAgICAubWFwKChPdXRwdXRVbml0IHVuaXQpID0+IF9vdXRwdXRzW3VuaXRdKQogICAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgfSk7CiAgICByZXR1cm4gbG9hZE1hcDsKICB9CgogIGpzLkV4cHJlc3Npb24gX2J1aWxkVHlwZVRvSW50ZXJjZXB0b3JNYXAoKSB7CiAgICBJbnRlcmNlcHRvclN0dWJHZW5lcmF0b3Igc3R1YkdlbmVyYXRvciA9IG5ldyBJbnRlcmNlcHRvclN0dWJHZW5lcmF0b3IoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIF90YXNrLmVtaXR0ZXIsCiAgICAgICAgX25hdGl2ZUNvZGVnZW5FbnF1ZXVlciwKICAgICAgICBfbmFtZXIsCiAgICAgICAgX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzLAogICAgICAgIF9jb2RlZ2VuV29ybGQsCiAgICAgICAgX2Nsb3NlZFdvcmxkKTsKICAgIHJldHVybiBzdHViR2VuZXJhdG9yLmdlbmVyYXRlVHlwZVRvSW50ZXJjZXB0b3JNYXAoKTsKICB9CgogIE1haW5GcmFnbWVudCBfYnVpbGRNYWluRnJhZ21lbnQoTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgLy8gQ29uc3RydWN0IHRoZSBtYWluIG91dHB1dCBmcm9tIHRoZSBsaWJyYXJpZXMgYW5kIHRoZSByZWdpc3RlcmVkIGhvbGRlcnMuCiAgICBNYWluRnJhZ21lbnQgcmVzdWx0ID0gbmV3IE1haW5GcmFnbWVudCgKICAgICAgICBsaWJyYXJpZXNNYXAub3V0cHV0VW5pdCwKICAgICAgICAiIiwgLy8gVGhlIGVtcHR5IHN0cmluZyBpcyB0aGUgbmFtZSBmb3IgdGhlIG1haW4gb3V0cHV0IGZpbGUuCiAgICAgICAgX2J1aWxkSW52b2tlTWFpbigpLAogICAgICAgIF9idWlsZExpYnJhcmllcyhsaWJyYXJpZXNNYXApLAogICAgICAgIF9idWlsZFN0YXRpY05vbkZpbmFsRmllbGRzKGxpYnJhcmllc01hcCksCiAgICAgICAgX2J1aWxkU3RhdGljTGF6aWx5SW5pdGlhbGl6ZWRGaWVsZHMobGlicmFyaWVzTWFwKSwKICAgICAgICBfYnVpbGRDb25zdGFudHMobGlicmFyaWVzTWFwKSk7CiAgICBfb3V0cHV0c1tsaWJyYXJpZXNNYXAub3V0cHV0VW5pdF0gPSByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAganMuU3RhdGVtZW50IF9idWlsZEludm9rZU1haW4oKSB7CiAgICByZXR1cm4gTWFpbkNhbGxTdHViR2VuZXJhdG9yLmdlbmVyYXRlSW52b2tlTWFpbigKICAgICAgICBfdGFzay5lbWl0dGVyLCBfbWFpbkZ1bmN0aW9uKTsKICB9CgogIERlZmVycmVkRnJhZ21lbnQgX2J1aWxkRGVmZXJyZWRGcmFnbWVudChMaWJyYXJpZXNNYXAgbGlicmFyaWVzTWFwKSB7CiAgICBEZWZlcnJlZEZyYWdtZW50IHJlc3VsdCA9IG5ldyBEZWZlcnJlZEZyYWdtZW50KAogICAgICAgIGxpYnJhcmllc01hcC5vdXRwdXRVbml0LAogICAgICAgIGRlZmVycmVkUGFydEZpbGVOYW1lKF9vcHRpb25zLCBsaWJyYXJpZXNNYXAubmFtZSwgYWRkRXh0ZW5zaW9uOiBmYWxzZSksCiAgICAgICAgbGlicmFyaWVzTWFwLm5hbWUsCiAgICAgICAgX2J1aWxkTGlicmFyaWVzKGxpYnJhcmllc01hcCksCiAgICAgICAgX2J1aWxkU3RhdGljTm9uRmluYWxGaWVsZHMobGlicmFyaWVzTWFwKSwKICAgICAgICBfYnVpbGRTdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcyhsaWJyYXJpZXNNYXApLAogICAgICAgIF9idWlsZENvbnN0YW50cyhsaWJyYXJpZXNNYXApKTsKICAgIF9vdXRwdXRzW2xpYnJhcmllc01hcC5vdXRwdXRVbml0XSA9IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PENvbnN0YW50PiBfYnVpbGRDb25zdGFudHMoTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiBjb25zdGFudFZhbHVlcyA9CiAgICAgICAgY29sbGVjdG9yLm91dHB1dENvbnN0YW50TGlzdHNbbGlicmFyaWVzTWFwLm91dHB1dFVuaXRdOwogICAgaWYgKGNvbnN0YW50VmFsdWVzID09IG51bGwpIHJldHVybiBjb25zdCA8Q29uc3RhbnQ+W107CiAgICByZXR1cm4gY29uc3RhbnRWYWx1ZXMKICAgICAgICAubWFwKChDb25zdGFudFZhbHVlIHZhbHVlKSA9PiBfY29uc3RhbnRzW3ZhbHVlXSkKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgfQoKICBMaXN0PFN0YXRpY0ZpZWxkPiBfYnVpbGRTdGF0aWNOb25GaW5hbEZpZWxkcyhMaWJyYXJpZXNNYXAgbGlicmFyaWVzTWFwKSB7CiAgICBMaXN0PEZpZWxkRW50aXR5PiBzdGF0aWNOb25GaW5hbEZpZWxkcyA9CiAgICAgICAgY29sbGVjdG9yLm91dHB1dFN0YXRpY05vbkZpbmFsRmllbGRMaXN0c1tsaWJyYXJpZXNNYXAub3V0cHV0VW5pdF07CiAgICBpZiAoc3RhdGljTm9uRmluYWxGaWVsZHMgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxTdGF0aWNGaWVsZD5bXTsKCiAgICByZXR1cm4gc3RhdGljTm9uRmluYWxGaWVsZHMubWFwKF9idWlsZFN0YXRpY0ZpZWxkKS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICB9CgogIFN0YXRpY0ZpZWxkIF9idWlsZFN0YXRpY0ZpZWxkKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9IF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShlbGVtZW50KTsKICAgIENvbnN0YW50VmFsdWUgaW5pdGlhbFZhbHVlID0gZmllbGREYXRhLmluaXRpYWxWYWx1ZTsKICAgIGpzLkV4cHJlc3Npb24gY29kZTsKICAgIGlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkgewogICAgICAvLyBUT0RPKHphcmFoKTogVGhlIGhvbGRlciBzaG91bGQgbm90IGJlIHJlZ2lzdGVyZWQgZHVyaW5nIGJ1aWxkaW5nIG9mCiAgICAgIC8vIGEgc3RhdGljIGZpZWxkLgogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoX25hbWVyLmdsb2JhbE9iamVjdEZvckNvbnN0YW50KGluaXRpYWxWYWx1ZSksCiAgICAgICAgICBpc0NvbnN0YW50c0hvbGRlcjogdHJ1ZSk7CiAgICAgIGNvZGUgPSBfdGFzay5lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKGluaXRpYWxWYWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoZmllbGREYXRhLmlzRWFnZXIpOwogICAgICBjb2RlID0gX2dlbmVyYXRlZENvZGVbZWxlbWVudF07CiAgICB9CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKGVsZW1lbnQpOwoKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgbWlkZGxlIG9mCiAgICAvLyBidWlsZGluZyBhIHN0YXRpYyBmaWVsZC4gKE5vdGUgdGhhdCB0aGUgc3RhdGljLXN0YXRlIGhvbGRlciB3YXMKICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBlYXJsaWVyLCBhbmQgdGhhdCB3ZSBqdXN0IGNhbGwgdGhlIHJlZ2lzdGVyIHRvIGdldAogICAgLy8gdGhlIGhvbGRlci1pbnN0YW5jZS4KICAgIHJldHVybiBuZXcgU3RhdGljRmllbGQoCiAgICAgICAgZWxlbWVudCwgbmFtZSwgbnVsbCwgX3JlZ2lzdGVyU3RhdGljU3RhdGVIb2xkZXIoKSwgY29kZSwKICAgICAgICBpc0ZpbmFsOiBmYWxzZSwKICAgICAgICBpc0xhenk6IGZhbHNlLAogICAgICAgIGlzSW5pdGlhbGl6ZWRCeUNvbnN0YW50OiBpbml0aWFsVmFsdWUgIT0gbnVsbCk7CiAgfQoKICBMaXN0PFN0YXRpY0ZpZWxkPiBfYnVpbGRTdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcygKICAgICAgTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgTGlzdDxGaWVsZEVudGl0eT4gbGF6eUZpZWxkcyA9IFtdOwogICAgX2NvZGVnZW5Xb3JsZC5mb3JFYWNoU3RhdGljRmllbGQoKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzTGF6eSAmJgogICAgICAgICAgX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIoZmllbGQpID09CiAgICAgICAgICAgICAgbGlicmFyaWVzTWFwLm91dHB1dFVuaXQpIHsKICAgICAgICBsYXp5RmllbGRzLmFkZChmaWVsZCk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIF9zb3J0ZXIKICAgICAgICAuc29ydE1lbWJlcnMobGF6eUZpZWxkcykKICAgICAgICAubWFwKF9idWlsZExhenlGaWVsZCkKICAgICAgICAud2hlcmUoKGZpZWxkKSA9PiBmaWVsZCAhPSBudWxsKSAvLyBIYXBwZW5zIHdoZW4gdGhlIGZpZWxkIHdhcyB1bnVzZWQuCiAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogIH0KCiAgU3RhdGljRmllbGQgX2J1aWxkTGF6eUZpZWxkKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzLkV4cHJlc3Npb24gY29kZSA9IF9nZW5lcmF0ZWRDb2RlW2VsZW1lbnRdOwogICAgLy8gVGhlIGNvZGUgaXMgbnVsbCBpZiB3ZSBlbmRlZCB1cCBub3QgbmVlZGluZyB0aGUgbGF6aWx5CiAgICAvLyBpbml0aWFsaXplZCBmaWVsZCBhZnRlciBhbGwgYmVjYXVzZSBvZiBjb25zdGFudCBmb2xkaW5nCiAgICAvLyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uLgogICAgaWYgKGNvZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmdsb2JhbFByb3BlcnR5TmFtZUZvck1lbWJlcihlbGVtZW50KTsKICAgIGpzLk5hbWUgZ2V0dGVyTmFtZSA9IF9uYW1lci5sYXp5SW5pdGlhbGl6ZXJOYW1lKGVsZW1lbnQpOwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIHJlZ2lzdHJ5IGluIHRoZSBtaWRkbGUgb2YKICAgIC8vIGJ1aWxkaW5nIGEgc3RhdGljIGZpZWxkLiAoTm90ZSB0aGF0IHRoZSBzdGF0aWMtc3RhdGUgaG9sZGVyIHdhcwogICAgLy8gYWxyZWFkeSByZWdpc3RlcmVkIGVhcmxpZXIsIGFuZCB0aGF0IHdlIGp1c3QgY2FsbCB0aGUgcmVnaXN0ZXIgdG8gZ2V0CiAgICAvLyB0aGUgaG9sZGVyLWluc3RhbmNlLgogICAgcmV0dXJuIG5ldyBTdGF0aWNGaWVsZCgKICAgICAgICBlbGVtZW50LCBuYW1lLCBnZXR0ZXJOYW1lLCBfcmVnaXN0ZXJTdGF0aWNTdGF0ZUhvbGRlcigpLCBjb2RlLAogICAgICAgIGlzRmluYWw6ICFlbGVtZW50LmlzQXNzaWduYWJsZSwgaXNMYXp5OiB0cnVlKTsKICB9CgogIExpc3Q8TGlicmFyeT4gX2J1aWxkTGlicmFyaWVzKExpYnJhcmllc01hcCBsaWJyYXJpZXNNYXApIHsKICAgIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzID0gbmV3IExpc3Q8TGlicmFyeT4obGlicmFyaWVzTWFwLmxlbmd0aCk7CiAgICBpbnQgY291bnQgPSAwOwogICAgbGlicmFyaWVzTWFwLmZvckVhY2goKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgTGlzdDxDbGFzc0VudGl0eT4gY2xhc3NlcywKICAgICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVycykgewogICAgICBsaWJyYXJpZXNbY291bnQrK10gPSBfYnVpbGRMaWJyYXJ5KGxpYnJhcnksIGNsYXNzZXMsIG1lbWJlcnMpOwogICAgfSk7CiAgICByZXR1cm4gbGlicmFyaWVzOwogIH0KCiAgdm9pZCBfYWRkSnNJbnRlcm9wU3R1YnMoTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgaWYgKF9jbGFzc2VzLmNvbnRhaW5zS2V5KF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykpIHsKICAgICAganMuTmFtZSB0b1N0cmluZ0ludm9jYXRpb24gPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoU2VsZWN0b3JzLnRvU3RyaW5nXyk7CiAgICAgIC8vIFRPRE8oamFjb2JyKTogcmVnaXN0ZXIgdG9TdHJpbmcgYXMgdXNlZCBzbyB0aGF0IGl0IGlzIGFsd2F5cyBhY2Nlc3NpYmxlCiAgICAgIC8vIGZyb20gSmF2YVNjcmlwdC4KICAgICAgX2NsYXNzZXNbX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzXS5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2QoCiAgICAgICAgICBuZXcgU3RyaW5nQmFja2VkTmFtZSgidG9TdHJpbmciKSwKICAgICAgICAgIGpzLmpzKCdmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuIyh0aGlzKSB9JywgdG9TdHJpbmdJbnZvY2F0aW9uKSkpOwogICAgfQoKICAgIC8vIFdlIGFkZCBhbGwgbWVtYmVycyBmcm9tIGNsYXNzZXMgbWFya2VkIHdpdGggaXNKc0ludGVyb3AgdG8gdGhlIGJhc2UKICAgIC8vIEludGVyY2VwdG9yIGNsYXNzIHdpdGggaW1wbGVtZW50YXRpb25zIHRoYXQgZGlyZWN0bHkgY2FsbCB0aGUKICAgIC8vIGNvcnJlc3BvbmRpbmcgSmF2YVNjcmlwdCBtZW1iZXIuIFdlIGRvIG5vdCBhdHRlbXB0IHRvIGJpbmQgdGhpcyB3aGVuCiAgICAvLyB0ZWFyaW5nIG9mZiBKYXZhU2NyaXB0IG1ldGhvZHMgYXMgd2UgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gY2FsbGluZwogICAgLy8gYSByZWd1bGFyIGdldHRlciB0aGF0IHJldHVybnMgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uIGFuZCB0ZWFyaW5nIG9mZgogICAgLy8gYSBtZXRob2QgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgZXhpc3QgbXVsdGlwbGUgSmF2YVNjcmlwdCBjbGFzc2VzCiAgICAvLyB0aGF0IGNvbmZsaWN0IG9uIHdoZXRoZXIgdGhlIG1lbWJlciBpcyBhIGdldHRlciBvciBhIG1ldGhvZC4KICAgIENsYXNzIGludGVyY2VwdG9yQ2xhc3MgPSBfY2xhc3Nlc1tfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3NdOwogICAgU2V0PFN0cmluZz4gc3R1Yk5hbWVzID0ge307CiAgICBsaWJyYXJpZXNNYXAKICAgICAgICAuZm9yRWFjaCgoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc0VsZW1lbnRzLCBfKSB7CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGNsYXNzRWxlbWVudHMpIHsKICAgICAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywKICAgICAgICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgICAgICBTdHJpbmcganNOYW1lID0KICAgICAgICAgICAgICAgIF9uYXRpdmVEYXRhLmNvbXB1dGVVbmVzY2FwZWRKU0ludGVyb3BOYW1lKG1lbWJlci5uYW1lKTsKICAgICAgICAgICAgaWYgKCFtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuOwogICAgICAgICAgICBpZiAobWVtYmVyLmlzR2V0dGVyIHx8IG1lbWJlci5pc0ZpZWxkIHx8IG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAgSXRlcmFibGU8U2VsZWN0b3I+IHNlbGVjdG9ycyA9CiAgICAgICAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQuZ2V0dGVySW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgICAgICAgICAgIGlmIChzZWxlY3RvcnMgIT0gbnVsbCAmJiAhc2VsZWN0b3JzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzKSB7CiAgICAgICAgICAgICAgICAgIGpzLk5hbWUgc3R1Yk5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoc2VsZWN0b3IpOwogICAgICAgICAgICAgICAgICBpZiAoc3R1Yk5hbWVzLmFkZChzdHViTmFtZS5rZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JDbGFzcy5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2Qoc3R1Yk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGpzLmpzKCdmdW5jdGlvbihvYmopIHsgcmV0dXJuIG9iai4jIH0nLCBbanNOYW1lXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG1lbWJlcikpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobWVtYmVyLmlzU2V0dGVyIHx8IChtZW1iZXIuaXNGaWVsZCAmJiAhbWVtYmVyLmlzQ29uc3QpKSB7CiAgICAgICAgICAgICAgSXRlcmFibGU8U2VsZWN0b3I+IHNlbGVjdG9ycyA9CiAgICAgICAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQuc2V0dGVySW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgICAgICAgICAgIGlmIChzZWxlY3RvcnMgIT0gbnVsbCAmJiAhc2VsZWN0b3JzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICAgIHZhciBzdHViTmFtZSA9IF9uYW1lci5zZXR0ZXJGb3JNZW1iZXIobWVtYmVyKTsKICAgICAgICAgICAgICAgIGlmIChzdHViTmFtZXMuYWRkKHN0dWJOYW1lLmtleSkpIHsKICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JDbGFzcy5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2Qoc3R1Yk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBqcy5qcygnZnVuY3Rpb24ob2JqLCB2KSB7IHJldHVybiBvYmouIyA9IHYgfScsIFtqc05hbWVdKSwKICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG1lbWJlcikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gR2VuZXJhdGluZyBzdHVicyBmb3IgZGlyZWN0IGNhbGxzIGFuZCBzdHVicyBmb3IgY2FsbC10aHJvdWdoCiAgICAgICAgICAgIC8vIG9mIGdldHRlcnMgdGhhdCBoYXBwZW4gdG8gYmUgZnVuY3Rpb25zLgogICAgICAgICAgICBib29sIGlzRnVuY3Rpb25MaWtlID0gZmFsc2U7CiAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBudWxsOwoKICAgICAgICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAgRnVuY3Rpb25FbnRpdHkgZm4gPSBtZW1iZXI7CiAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZm4pOwogICAgICAgICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0dldHRlcikgewogICAgICAgICAgICAgIGlzRnVuY3Rpb25MaWtlID0gdHJ1ZTsKICAgICAgICAgICAgfSAvLyBUT0RPKGphY29icik6IGhhbmRsZSBmaWVsZCBlbGVtZW50cy4KCiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uTGlrZSB8fCBmdW5jdGlvblR5cGUgIT0gbnVsbCkgewogICAgICAgICAgICAgIGludCBtaW5BcmdzOwogICAgICAgICAgICAgIGludCBtYXhBcmdzOwogICAgICAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgbWluQXJncyA9IGZ1bmN0aW9uVHlwZS5wYXJhbWV0ZXJUeXBlcy5sZW5ndGg7CiAgICAgICAgICAgICAgICBtYXhBcmdzID0gbWluQXJncyArIGZ1bmN0aW9uVHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLmxlbmd0aDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbWluQXJncyA9IDA7CiAgICAgICAgICAgICAgICBtYXhBcmdzID0gMzI3Njc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBfY29kZWdlbldvcmxkLmludm9jYXRpb25zQnlOYW1lKG1lbWJlci5uYW1lKTsKICAgICAgICAgICAgICAvLyBOYW1lZCBhcmd1bWVudHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiBJbiB0aGUgZnV0dXJlIHdlCiAgICAgICAgICAgICAgLy8gbWF5IHdhbnQgdG8gbWFwIG5hbWVkIGFyZ3VtZW50cyB0byBhbiBvYmplY3QgbGl0ZXJhbCBjb250YWluaW5nCiAgICAgICAgICAgICAgLy8gYWxsIG5hbWVkIGFyZ3VtZW50cy4KICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JzICE9IG51bGwgJiYgIXNlbGVjdG9ycy5pc0VtcHR5KSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBhcml0eSBtYXRjaGVzIHRoaXMgbWVtYmVyLgogICAgICAgICAgICAgICAgICB2YXIgYXJndW1lbnRDb3VudCA9IHNlbGVjdG9yLmFyZ3VtZW50Q291bnQ7CiAgICAgICAgICAgICAgICAgIC8vIEpTIGludGVyb3AgZG9lcyBub3Qgc3VwcG9ydCBuYW1lZCBhcmd1bWVudHMuCiAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5uYW1lZEFyZ3VtZW50Q291bnQgPiAwKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCBtaW5BcmdzKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiBtYXhBcmdzKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgdmFyIHN0dWJOYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgICAgICAgICAgICAgICAgaWYgKCFzdHViTmFtZXMuYWRkKHN0dWJOYW1lLmtleSkpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9CiAgICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdDxTdHJpbmc+LmdlbmVyYXRlKGFyZ3VtZW50Q291bnQsIChpKSA9PiAncCRpJyk7CgogICAgICAgICAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGdlbmVyYXRlIHRoZSBzYW1lIHN0dWIgbWV0aG9kIGZvciBkaXJlY3QKICAgICAgICAgICAgICAgICAgLy8gY2FsbHMgYW5kIGNhbGwtdGhyb3VnaHMgb2YgZ2V0dGVycyBzbyB0aGF0IGNhbGxpbmcgYQogICAgICAgICAgICAgICAgICAvLyBnZXR0ZXIgdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gYmVoYXZlcyB0aGUgc2FtZSBhcyBjYWxsaW5nCiAgICAgICAgICAgICAgICAgIC8vIGEgbWV0aG9kLiBUaGlzIGlzIGhlbHBmdWwgYXMgbWFueSB0eXBlZCBKYXZhU2NyaXB0IEFQSXMKICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBtZW1iZXIgZnVuY3Rpb25zIHdpdGggZ2V0dGVycyB0aGF0IHJldHVybgogICAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbnMuIFRoZSBiZWhhdmlvciBvZiB0aGlzIHNvbHV0aW9uIG1hdGNoZXMgSmF2YVNjcmlwdAogICAgICAgICAgICAgICAgICAvLyBiZWhhdmlvciBpbXBsaWNpdGx5IGJpbmRpbmcgdGhpcyBvbmx5IHdoZW4gSmF2YVNjcmlwdAogICAgICAgICAgICAgICAgICAvLyB3b3VsZC4KICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JDbGFzcy5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2QoCiAgICAgICAgICAgICAgICAgICAgICBzdHViTmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGpzLmpzKCdmdW5jdGlvbihyZWNlaXZlciwgIykgeyByZXR1cm4gcmVjZWl2ZXIuIygjKSB9JywKICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyYW1ldGVycywganNOYW1lLCBwYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBtZW1iZXIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICAvLyBOb3RlIHRoYXQgYSBsaWJyYXJ5LWVsZW1lbnQgbWF5IGhhdmUgbXVsdGlwbGUgW0xpYnJhcnldcywgaWYgaXQgaXMgc3BsaXQKICAvLyBpbnRvIG11bHRpcGxlIG91dHB1dCB1bml0cy4KICBMaWJyYXJ5IF9idWlsZExpYnJhcnkoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc0VsZW1lbnRzLAogICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVyRWxlbWVudHMpIHsKICAgIFN0cmluZyB1cmkgPSBsaWJyYXJ5LmNhbm9uaWNhbFVyaS50b1N0cmluZygpOwoKICAgIExpc3Q8U3RhdGljTWV0aG9kPiBzdGF0aWNzID0gbWVtYmVyRWxlbWVudHMKICAgICAgICAud2hlcmUoKGUpID0+ICFlLmlzRmllbGQpCiAgICAgICAgLmNhc3Q8RnVuY3Rpb25FbnRpdHk+KCkKICAgICAgICAubWFwPFN0YXRpY01ldGhvZD4oX2J1aWxkU3RhdGljTWV0aG9kKQogICAgICAgIC50b0xpc3QoKTsKCiAgICBpZiAobGlicmFyeSA9PSBfY29tbW9uRWxlbWVudHMuaW50ZXJjZXB0b3JzTGlicmFyeSkgewogICAgICBzdGF0aWNzLmFkZEFsbChfZ2VuZXJhdGVHZXRJbnRlcmNlcHRvck1ldGhvZHMoKSk7CiAgICAgIHN0YXRpY3MuYWRkQWxsKF9nZW5lcmF0ZU9uZVNob3RJbnRlcmNlcHRvcnMoKSk7CiAgICB9CgogICAgTGlzdDxDbGFzcz4gY2xhc3NlcyA9IGNsYXNzRWxlbWVudHMKICAgICAgICAubWFwKChDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQpID0+IF9jbGFzc2VzW2NsYXNzRWxlbWVudF0pCiAgICAgICAgLndoZXJlKChDbGFzcyBjbHMpID0+CiAgICAgICAgICAgICFjbHMuaXNOYXRpdmUgfHwgIV91bm5lZWRlZE5hdGl2ZUNsYXNzZXMuY29udGFpbnMoY2xzKSkKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgYm9vbCB2aXNpdFN0YXRpY3MgPSB0cnVlOwogICAgTGlzdDxGaWVsZD4gc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbiA9CiAgICAgICAgX2J1aWxkRmllbGRzKGxpYnJhcnk6IGxpYnJhcnksIHZpc2l0U3RhdGljczogdmlzaXRTdGF0aWNzKTsKCiAgICByZXR1cm4gbmV3IExpYnJhcnkoCiAgICAgICAgbGlicmFyeSwgdXJpLCBzdGF0aWNzLCBjbGFzc2VzLCBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uKTsKICB9CgogIGJvb2wgX2lzU29mdERlZmVycmVkKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfbm90U29mdERlZmVycmVkICE9IG51bGwgJiYgIV9ub3RTb2Z0RGVmZXJyZWQuY29udGFpbnMoZWxlbWVudCk7CiAgfQoKICBDbGFzcyBfYnVpbGRDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIGJvb2wgb25seUZvclJ0aSA9IGNvbGxlY3Rvci5jbGFzc2VzT25seU5lZWRlZEZvclJ0aS5jb250YWlucyhjbHMpOwogICAgYm9vbCBoYXNSdGlGaWVsZCA9IF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscyk7CiAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgIC8vIFRPRE8oamFjb2JyKTogY2hlY2sgd2hldGhlciB0aGUgY2xhc3MgaGFzIGFueSBhY3RpdmUgc3RhdGljIGZpZWxkcwogICAgICAvLyBpZiBpdCBkb2VzIG5vdCB3ZSBjYW4gc3VwcHJlc3MgaXQgY29tcGxldGVseS4KICAgICAgb25seUZvclJ0aSA9IHRydWU7CiAgICB9CiAgICBib29sIGlzQ2xvc3VyZUJhc2VDbGFzcyA9IGNscyA9PSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzOwoKICAgIExpc3Q8TWV0aG9kPiBtZXRob2RzID0gW107CiAgICBMaXN0PFN0dWJNZXRob2Q+IGNhbGxTdHVicyA9IDxTdHViTWV0aG9kPltdOwoKICAgIENsYXNzU3R1YkdlbmVyYXRvciBjbGFzc1N0dWJHZW5lcmF0b3IgPSBuZXcgQ2xhc3NTdHViR2VuZXJhdG9yKAogICAgICAgIF90YXNrLmVtaXR0ZXIsIF9jb21tb25FbGVtZW50cywgX25hbWVyLCBfY29kZWdlbldvcmxkLCBfY2xvc2VkV29ybGQsCiAgICAgICAgZW5hYmxlTWluaWZpY2F0aW9uOiBfb3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24pOwogICAgUnVudGltZVR5cGVHZW5lcmF0b3IgcnVudGltZVR5cGVHZW5lcmF0b3IgPSBuZXcgUnVudGltZVR5cGVHZW5lcmF0b3IoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIF9vdXRwdXRVbml0RGF0YSwKICAgICAgICBfdGFzaywKICAgICAgICBfbmFtZXIsCiAgICAgICAgX3J0aUNoZWNrcywKICAgICAgICBfcnRpRW5jb2Rlcik7CgogICAgdm9pZCB2aXNpdEluc3RhbmNlTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgaWYgKCFtZW1iZXIuaXNBYnN0cmFjdCAmJiAhbWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBpZiAobWVtYmVyIGlzISBKU2lnbmF0dXJlTWV0aG9kKSB7CiAgICAgICAgICBNZXRob2QgbWV0aG9kID0gX2J1aWxkTWV0aG9kKG1lbWJlcik7CiAgICAgICAgICBpZiAobWV0aG9kICE9IG51bGwpIG1ldGhvZHMuYWRkKG1ldGhvZCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIgfHwgbWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycyA9CiAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQuaW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgICAgIGlmIChzZWxlY3RvcnMgIT0gbnVsbCAmJiAhc2VsZWN0b3JzLmlzRW1wdHkpIHsKICAgICAgICAgIE1hcDxqcy5OYW1lLCBqcy5FeHByZXNzaW9uPiBjYWxsU3R1YnNGb3JNZW1iZXIgPQogICAgICAgICAgICAgIGNsYXNzU3R1YkdlbmVyYXRvci5nZW5lcmF0ZUNhbGxTdHVic0ZvckdldHRlcihtZW1iZXIsIHNlbGVjdG9ycyk7CiAgICAgICAgICBjYWxsU3R1YnNGb3JNZW1iZXIuZm9yRWFjaCgoanMuTmFtZSBuYW1lLCBqcy5FeHByZXNzaW9uIGNvZGUpIHsKICAgICAgICAgICAgY2FsbFN0dWJzLmFkZChfYnVpbGRTdHViTWV0aG9kKG5hbWUsIGNvZGUsIGVsZW1lbnQ6IG1lbWJlcikpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdm9pZCB2aXNpdE1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlmIChtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIHZpc2l0SW5zdGFuY2VNZW1iZXIobWVtYmVyKTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8U3R1Yk1ldGhvZD4gbm9TdWNoTWV0aG9kU3R1YnMgPSA8U3R1Yk1ldGhvZD5bXTsKCiAgICBpZiAoX2JhY2tlbmRVc2FnZS5pc05vU3VjaE1ldGhvZFVzZWQgJiYKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgIE1hcDxqcy5OYW1lLCBTZWxlY3Rvcj4gc2VsZWN0b3JzID0KICAgICAgICAgIGNsYXNzU3R1YkdlbmVyYXRvci5jb21wdXRlU2VsZWN0b3JzRm9yTnNtSGFuZGxlcnMoKTsKICAgICAgc2VsZWN0b3JzLmZvckVhY2goKGpzLk5hbWUgbmFtZSwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgICAgICAvLyBJZiB0aGUgcHJvZ3JhbSBjb250YWlucyBgY29uc3QgU3ltYm9sYCBuYW1lcyB3ZSBoYXZlIHRvIHJldGFpbiB0aGVtLgogICAgICAgIFN0cmluZyBzZWxlY3Rvck5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgICAgIGlmIChzZWxlY3Rvci5pc1NldHRlcikgc2VsZWN0b3JOYW1lID0gIiRzZWxlY3Rvck5hbWU9IjsKICAgICAgICBub1N1Y2hNZXRob2RTdHVicy5hZGQoCiAgICAgICAgICAgIGNsYXNzU3R1YkdlbmVyYXRvci5nZW5lcmF0ZVN0dWJGb3JOb1N1Y2hNZXRob2QobmFtZSwgc2VsZWN0b3IpKTsKICAgICAgfSk7CiAgICB9CgogICAgaWYgKGlzQ2xvc3VyZUJhc2VDbGFzcykgewogICAgICAvLyBXZSBhZGQgYSBzcGVjaWFsIGdldHRlciB0byBhbGxvdyBmb3IgdGVhcmluZyBvZmYgYSBjbG9zdXJlIGZyb20gaXRzZWxmLgogICAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZ2V0dGVyRm9yTWVtYmVyKE5hbWVzLmNhbGwpOwogICAgICBqcy5GdW4gZnVuY3Rpb24gPSBqcy5qcygnZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9Jyk7CiAgICAgIGNhbGxTdHVicy5hZGQoX2J1aWxkU3R1Yk1ldGhvZChuYW1lLCBmdW5jdGlvbikpOwogICAgfQoKICAgIGlmIChfY29tbW9uRWxlbWVudHMuaXNJbnN0YW50aWF0aW9uQ2xhc3MoY2xzKSAmJiAhb25seUZvclJ0aSkgewogICAgICBjYWxsU3R1YnMuYWRkQWxsKF9nZW5lcmF0ZUluc3RhbnRpYXRpb25TdHVicyhjbHMpKTsKICAgIH0KCiAgICAvLyBNaXhpbkFwcGxpY2F0aW9ucyBydW4gdGhyb3VnaCB0aGUgbWVtYmVycyBvZiB0aGVpciBtaXhpbi4gSGVyZSwgd2UgYXJlCiAgICAvLyBvbmx5IGludGVyZXN0ZWQgaW4gZGlyZWN0IG1lbWJlcnMuCiAgICBib29sIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID0gZmFsc2U7CiAgICBpZiAoIW9ubHlGb3JSdGkpIHsKICAgICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNTdXBlck1peGluQXBwbGljYXRpb24oY2xzKSkgewogICAgICAgIExpc3Q8TWVtYmVyRW50aXR5PiBtZW1iZXJzID0gPE1lbWJlckVudGl0eT5bXTsKICAgICAgICB2b2lkIGFkZChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgICBpZiAobWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IGNscykgewogICAgICAgICAgICBtZW1iZXJzLmFkZChtZW1iZXIpOwogICAgICAgICAgICBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywgYWRkKTsKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyKGNscywgYWRkKTsKCiAgICAgICAgaWYgKG1lbWJlcnMuaXNOb3RFbXB0eSkgewogICAgICAgICAgX3NvcnRlci5zb3J0TWVtYmVycyhtZW1iZXJzKS5mb3JFYWNoKHZpc2l0TWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIV9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGNscykpIHsKICAgICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVycyA9IDxNZW1iZXJFbnRpdHk+W107CiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbHMsIG1lbWJlcnMuYWRkKTsKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyKGNscywgbWVtYmVycy5hZGQpOwogICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENvbnN0cnVjdG9yQm9keShjbHMsIG1lbWJlcnMuYWRkKTsKICAgICAgICBfc29ydGVyLnNvcnRNZW1iZXJzKG1lbWJlcnMpLmZvckVhY2godmlzaXRNZW1iZXIpOwogICAgICB9CiAgICB9CiAgICBib29sIGlzSW50ZXJjZXB0ZWRDbGFzcyA9IF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKGNscyk7CiAgICBMaXN0PEZpZWxkPiBpbnN0YW5jZUZpZWxkcyA9IG9ubHlGb3JSdGkKICAgICAgICA/IGNvbnN0IDxGaWVsZD5bXQogICAgICAgIDogX2J1aWxkRmllbGRzKAogICAgICAgICAgICBjbHM6IGNscywKICAgICAgICAgICAgdmlzaXRTdGF0aWNzOiBmYWxzZSwKICAgICAgICAgICAgaXNIb2xkZXJJbnRlcmNlcHRlZENsYXNzOiBpc0ludGVyY2VwdGVkQ2xhc3MpOwogICAgTGlzdDxGaWVsZD4gc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbiA9IG9ubHlGb3JSdGkKICAgICAgICA/IGNvbnN0IDxGaWVsZD5bXQogICAgICAgIDogX2J1aWxkRmllbGRzKAogICAgICAgICAgICBjbHM6IGNscywKICAgICAgICAgICAgdmlzaXRTdGF0aWNzOiB0cnVlLAogICAgICAgICAgICBpc0hvbGRlckludGVyY2VwdGVkQ2xhc3M6IGlzSW50ZXJjZXB0ZWRDbGFzcyk7CgogICAgVHlwZVRlc3RQcm9wZXJ0aWVzIHR5cGVUZXN0cyA9IHJ1bnRpbWVUeXBlR2VuZXJhdG9yLmdlbmVyYXRlSXNUZXN0cygKICAgICAgICBjbHMsIF9nZW5lcmF0ZWRDb2RlLAogICAgICAgIHN0b3JlRnVuY3Rpb25UeXBlSW5NZXRhZGF0YTogX3N0b3JlRnVuY3Rpb25UeXBlc0luTWV0YWRhdGEpOwoKICAgIExpc3Q8U3R1Yk1ldGhvZD4gY2hlY2tlZFNldHRlcnMgPSA8U3R1Yk1ldGhvZD5bXTsKICAgIExpc3Q8U3R1Yk1ldGhvZD4gaXNDaGVja3MgPSA8U3R1Yk1ldGhvZD5bXTsKICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW5zdGVhZCBvZiBnZW5lcmF0aW5nIGFsbCBzdHVicyBmb3IgZWFjaAogICAgICAvLyBqcy1pbnRlcm9wIGNsYXNzIHdlIHNob3VsZCBnZW5lcmF0ZSBhIHN0dWIgZm9yIGVhY2ggaW1wbGVtZW50ZWQgY2xhc3MuCiAgICAgIC8vIEN1cnJlbnRseSB3ZSBnZW5lcmF0ZSBkdXBsaWNhdGVzIGlmIGEgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYnkgbXVsdGlwbGUKICAgICAgLy8ganMtaW50ZXJvcCBjbGFzc2VzLgogICAgICB0eXBlVGVzdHMuZm9yRWFjaFByb3BlcnR5KF9zb3J0ZXIsIChqcy5OYW1lIG5hbWUsIGpzLk5vZGUgY29kZSkgewogICAgICAgIF9jbGFzc2VzW19jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzc10KICAgICAgICAgICAgLmlzQ2hlY2tzCiAgICAgICAgICAgIC5hZGQoX2J1aWxkU3R1Yk1ldGhvZChuYW1lLCBjb2RlKSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChGaWVsZCBmaWVsZCBpbiBpbnN0YW5jZUZpZWxkcykgewogICAgICAgIGlmIChmaWVsZC5uZWVkc0NoZWNrZWRTZXR0ZXIpIHsKICAgICAgICAgIGFzc2VydCghZmllbGQubmVlZHNVbmNoZWNrZWRTZXR0ZXIpOwogICAgICAgICAgRmllbGRFbnRpdHkgZWxlbWVudCA9IGZpZWxkLmVsZW1lbnQ7CiAgICAgICAgICBqcy5FeHByZXNzaW9uIGNvZGUgPSBfZ2VuZXJhdGVkQ29kZVtlbGVtZW50XTsKICAgICAgICAgIGFzc2VydChjb2RlICE9IG51bGwsICJObyBzZXR0ZXIgY29kZSBmb3IgZmllbGQ6ICRmaWVsZCIpOwogICAgICAgICAgaWYgKGNvZGUgPT0gbnVsbCkgewogICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBvY2N1ciBiZWNhdXNlIGNvZGVnZW4gbWVtYmVyIHVzYWdlIGlzIG5vdwogICAgICAgICAgICAvLyBsaW1pdGVkIGJ5IGNsb3NlZCB3b3JsZCBtZW1iZXIgdXNhZ2UuIEluIHRoZSBjYXNlIHdlJ3ZlIG1pc3NlZCBhCiAgICAgICAgICAgIC8vIHNwb3Qgd2UgY2F1dGlvdXNseSBnZW5lcmF0ZSBhbiBlbXB0eSBmdW5jdGlvbi4KICAgICAgICAgICAgY29kZSA9IGpzLmpzKCJmdW5jdGlvbigpIHt9Iik7CiAgICAgICAgICB9CiAgICAgICAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZGVyaXZlU2V0dGVyTmFtZShmaWVsZC5hY2Nlc3Nvck5hbWUpOwogICAgICAgICAgY2hlY2tlZFNldHRlcnMuYWRkKF9idWlsZFN0dWJNZXRob2QobmFtZSwgY29kZSwgZWxlbWVudDogZWxlbWVudCkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdHlwZVRlc3RzLmZvckVhY2hQcm9wZXJ0eShfc29ydGVyLCAoanMuTmFtZSBuYW1lLCBqcy5Ob2RlIGNvZGUpIHsKICAgICAgICBpc0NoZWNrcy5hZGQoX2J1aWxkU3R1Yk1ldGhvZChuYW1lLCBjb2RlKSk7CiAgICAgIH0pOwogICAgfQoKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5jbGFzc05hbWUoY2xzKTsKICAgIFN0cmluZyBob2xkZXJOYW1lID0gX25hbWVyLmdsb2JhbE9iamVjdEZvckNsYXNzKGNscyk7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIG1pZGRsZSBvZgogICAgLy8gYnVpbGRpbmcgYSBjbGFzcy4KICAgIEhvbGRlciBob2xkZXIgPSBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoaG9sZGVyTmFtZSk7CiAgICBib29sIGlzSW5zdGFudGlhdGVkID0gIV9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoY2xzKSAmJgogICAgICAgIF9jb2RlZ2VuV29ybGQuZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzLmNvbnRhaW5zKGNscyk7CgogICAgQ2xhc3MgcmVzdWx0OwogICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGNscykgJiYKICAgICAgICAhb25seUZvclJ0aSAmJgogICAgICAgICFpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbikgewogICAgICBhc3NlcnQoIV9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSk7CiAgICAgIGFzc2VydChtZXRob2RzLmlzRW1wdHkpOwogICAgICBhc3NlcnQoIWlzQ2xvc3VyZUJhc2VDbGFzcyk7CgogICAgICByZXN1bHQgPSBuZXcgTWl4aW5BcHBsaWNhdGlvbigKICAgICAgICAgIGNscywKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBob2xkZXIsCiAgICAgICAgICBpbnN0YW5jZUZpZWxkcywKICAgICAgICAgIHN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb24sCiAgICAgICAgICBjYWxsU3R1YnMsCiAgICAgICAgICBjaGVja2VkU2V0dGVycywKICAgICAgICAgIGlzQ2hlY2tzLAogICAgICAgICAgX3J0aUNoZWNrcy5yZXF1aXJlZENoZWNrc1tjbHNdLAogICAgICAgICAgdHlwZVRlc3RzLmZ1bmN0aW9uVHlwZUluZGV4LAogICAgICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZDogaXNJbnN0YW50aWF0ZWQsCiAgICAgICAgICBoYXNSdGlGaWVsZDogaGFzUnRpRmllbGQsCiAgICAgICAgICBvbmx5Rm9yUnRpOiBvbmx5Rm9yUnRpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IG5ldyBDbGFzcygKICAgICAgICAgIGNscywKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBob2xkZXIsCiAgICAgICAgICBtZXRob2RzLAogICAgICAgICAgaW5zdGFuY2VGaWVsZHMsCiAgICAgICAgICBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uLAogICAgICAgICAgY2FsbFN0dWJzLAogICAgICAgICAgbm9TdWNoTWV0aG9kU3R1YnMsCiAgICAgICAgICBjaGVja2VkU2V0dGVycywKICAgICAgICAgIGlzQ2hlY2tzLAogICAgICAgICAgX3J0aUNoZWNrcy5yZXF1aXJlZENoZWNrc1tjbHNdLAogICAgICAgICAgdHlwZVRlc3RzLmZ1bmN0aW9uVHlwZUluZGV4LAogICAgICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZDogaXNJbnN0YW50aWF0ZWQsCiAgICAgICAgICBoYXNSdGlGaWVsZDogaGFzUnRpRmllbGQsCiAgICAgICAgICBvbmx5Rm9yUnRpOiBvbmx5Rm9yUnRpLAogICAgICAgICAgaXNOYXRpdmU6IF9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSwKICAgICAgICAgIGlzQ2xvc3VyZUJhc2VDbGFzczogaXNDbG9zdXJlQmFzZUNsYXNzLAogICAgICAgICAgaXNTb2Z0RGVmZXJyZWQ6IF9pc1NvZnREZWZlcnJlZChjbHMpLAogICAgICAgICAgaXNTdXBlck1peGluQXBwbGljYXRpb246IGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKTsKICAgIH0KICAgIF9jbGFzc2VzW2Nsc10gPSByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBhc3NvY2lhdGVOYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkoKSB7CiAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlIGluIF9jb2RlZ2VuV29ybGQubmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpCiAgICAgICAgLnVuaW9uKF9sYXRlTmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpKSkgewogICAgICBmb3IgKENsYXNzRW50aXR5IGVudGl0eQogICAgICAgICAgaW4gX2NsYXNzSGllcmFyY2h5LnN1YnR5cGVzT2YodHlwZVZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uKSkgewogICAgICAgIENsYXNzIGNscyA9IF9jbGFzc2VzW2VudGl0eV07CiAgICAgICAgaWYgKGNscyA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICBjbHMubmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpLmFkZCh0eXBlVmFyaWFibGUpOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIF9tZXRob2ROZWVkc1N0dWJzKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgaWYgKG1ldGhvZCBpcyBKR2VuZXJhdG9yQm9keSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG1ldGhvZCBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBtZXRob2QucGFyYW1ldGVyU3RydWN0dXJlLm9wdGlvbmFsUGFyYW1ldGVycyAhPSAwIHx8CiAgICAgICAgbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyAhPSAwOwogIH0KCiAgYm9vbCBfbWV0aG9kQ2FuQmVBcHBsaWVkKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgcmV0dXJuIF9iYWNrZW5kVXNhZ2UuaXNGdW5jdGlvbkFwcGx5VXNlZCAmJgogICAgICAgIF9pbmZlcnJlZERhdGEuZ2V0TWlnaHRCZVBhc3NlZFRvQXBwbHkobWV0aG9kKTsKICB9CgogIC8qIE1hcCB8IExpc3QgKi8gX2NvbXB1dGVQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgdmFyIC8qIE1hcCB8IExpc3QgKi8gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOwogICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9IG1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgICBpZiAocGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyA9IG5ldyBNYXA8U3RyaW5nLCBDb25zdGFudFZhbHVlPigpOwogICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hQYXJhbWV0ZXIobWV0aG9kLAogICAgICAgICAgKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSkgewogICAgICAgIGlmIChwYXJhbWV0ZXJTdHJ1Y3R1cmUubmFtZWRQYXJhbWV0ZXJzLmNvbnRhaW5zKG5hbWUpKSB7CiAgICAgICAgICBhc3NlcnQoZGVmYXVsdFZhbHVlICE9IG51bGwpOwogICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzW25hbWVdID0gZGVmYXVsdFZhbHVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMgPSA8Q29uc3RhbnRWYWx1ZT5bXTsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoUGFyYW1ldGVyKG1ldGhvZCwKICAgICAgICAgIChEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpIHsKICAgICAgICBpZiAoaW5kZXggPj0gcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVycykgewogICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLmFkZChkZWZhdWx0VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmRleCsrOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM7CiAgfQoKICBEYXJ0TWV0aG9kIF9idWlsZE1ldGhvZChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIubWV0aG9kUHJvcGVydHlOYW1lKGVsZW1lbnQpOwogICAganMuRXhwcmVzc2lvbiBjb2RlID0gX2dlbmVyYXRlZENvZGVbZWxlbWVudF07CgogICAgLy8gVE9ETyhrYXNwZXJsKTogRmlndXJlIG91dCB1bmRlciB3aGljaCBjb25kaXRpb25zIGNvZGUgaXMgbnVsbC4KICAgIGlmIChjb2RlID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIGJvb2wgY2FuVGVhck9mZiA9IGZhbHNlOwogICAganMuTmFtZSB0ZWFyT2ZmTmFtZTsKICAgIGJvb2wgaXNDbG9zdXJlQ2FsbE1ldGhvZCA9IGZhbHNlOwogICAgYm9vbCBpc05vdEFwcGx5VGFyZ2V0ID0KICAgICAgICAhZWxlbWVudC5pc0Z1bmN0aW9uIHx8IGVsZW1lbnQuaXNHZXR0ZXIgfHwgZWxlbWVudC5pc1NldHRlcjsKCiAgICBib29sIGNhbkJlQXBwbGllZCA9IF9tZXRob2RDYW5CZUFwcGxpZWQoZWxlbWVudCk7CgogICAganMuTmFtZSBhbGlhc05hbWUgPSBfY29kZWdlbldvcmxkLmlzQWxpYXNlZFN1cGVyTWVtYmVyKGVsZW1lbnQpCiAgICAgICAgPyBfbmFtZXIuYWxpYXNlZFN1cGVyTWVtYmVyUHJvcGVydHlOYW1lKGVsZW1lbnQpCiAgICAgICAgOiBudWxsOwoKICAgIGlmIChpc05vdEFwcGx5VGFyZ2V0KSB7CiAgICAgIGNhblRlYXJPZmYgPSBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChlbGVtZW50LmVuY2xvc2luZ0NsYXNzLmlzQ2xvc3VyZSkgewogICAgICAgIGNhblRlYXJPZmYgPSBmYWxzZTsKICAgICAgICBpc0Nsb3N1cmVDYWxsTWV0aG9kID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBDYXJlZnVsIHdpdGggb3BlcmF0b3JzLgogICAgICAgIGNhblRlYXJPZmYgPSBfY29kZWdlbldvcmxkLmhhc0ludm9rZWRHZXR0ZXIoZWxlbWVudCkgfHwKICAgICAgICAgICAgX2NvZGVnZW5Xb3JsZC5tZXRob2RzTmVlZHNTdXBlckdldHRlcihlbGVtZW50KTsKICAgICAgICB0ZWFyT2ZmTmFtZSA9IF9uYW1lci5nZXR0ZXJGb3JFbGVtZW50KGVsZW1lbnQpOwogICAgICB9CiAgICB9CgogICAgaWYgKGNhblRlYXJPZmYpIHsKICAgICAgYXNzZXJ0KGVsZW1lbnQgaXMhIENvbnN0cnVjdG9yRW50aXR5LCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICAgIGFzc2VydChlbGVtZW50IGlzISBDb25zdHJ1Y3RvckJvZHlFbnRpdHksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIH0KCiAgICBib29sIGlzSW50ZXJjZXB0ZWQgPQogICAgICAgIF9jbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE1ldGhvZChlbGVtZW50KTsKCiAgICBqcy5OYW1lIGNhbGxOYW1lID0gbnVsbDsKICAgIGlmIChjYW5UZWFyT2ZmKSB7CiAgICAgIFNlbGVjdG9yIGNhbGxTZWxlY3RvciA9CiAgICAgICAgICBuZXcgU2VsZWN0b3IuZnJvbUVsZW1lbnQoZWxlbWVudCkudG9DYWxsU2VsZWN0b3IoKTsKICAgICAgY2FsbE5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoY2FsbFNlbGVjdG9yKTsKICAgIH0KCiAgICBEYXJ0VHlwZSBtZW1iZXJUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZWxlbWVudCk7CiAgICBqcy5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZTsKICAgIGlmIChjYW5UZWFyT2ZmKSB7CiAgICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdCA9IF9vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yTWVtYmVyKGVsZW1lbnQpOwogICAgICBmdW5jdGlvblR5cGUgPQogICAgICAgICAgX2dlbmVyYXRlRnVuY3Rpb25UeXBlKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MsIG1lbWJlclR5cGUsIG91dHB1dFVuaXQpOwogICAgfQoKICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGVsZW1lbnQ7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZTsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVyczsKICAgIHZhciAvKiBMaXN0IHwgTWFwICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICAgIGludCBhcHBseUluZGV4ID0gMDsKICAgIGlmIChjYW5CZUFwcGxpZWQpIHsKICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzID0gX2NvbXB1dGVQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKG1ldGhvZCk7CiAgICAgIGlmIChwYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPiAwKSB7CiAgICAgICAgYXBwbHlJbmRleCA9IDE7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbmV3IEluc3RhbmNlTWV0aG9kKGVsZW1lbnQsIG5hbWUsIGNvZGUsCiAgICAgICAgX2dlbmVyYXRlUGFyYW1ldGVyU3R1YnMoZWxlbWVudCwgY2FuVGVhck9mZiwgY2FuQmVBcHBsaWVkKSwgY2FsbE5hbWUsCiAgICAgICAgbmVlZHNUZWFyT2ZmOiBjYW5UZWFyT2ZmLAogICAgICAgIHRlYXJPZmZOYW1lOiB0ZWFyT2ZmTmFtZSwKICAgICAgICBpc0Nsb3N1cmVDYWxsTWV0aG9kOiBpc0Nsb3N1cmVDYWxsTWV0aG9kLAogICAgICAgIGlzSW50ZXJjZXB0ZWQ6IGlzSW50ZXJjZXB0ZWQsCiAgICAgICAgYWxpYXNOYW1lOiBhbGlhc05hbWUsCiAgICAgICAgY2FuQmVBcHBsaWVkOiBjYW5CZUFwcGxpZWQsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICBmdW5jdGlvblR5cGU6IGZ1bmN0aW9uVHlwZSwKICAgICAgICBhcHBseUluZGV4OiBhcHBseUluZGV4KTsKICB9CgogIGpzLkV4cHJlc3Npb24gX2dlbmVyYXRlRnVuY3Rpb25UeXBlKENsYXNzRW50aXR5IC8qPyovIGVuY2xvc2luZ0NsYXNzLAogICAgICBGdW5jdGlvblR5cGUgdHlwZSwgT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICBpZiAodHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgICBSZWNpcGVFbmNvZGluZyBlbmNvZGluZyA9IF9ydGlSZWNpcGVFbmNvZGVyLmVuY29kZVJlY2lwZSgKICAgICAgICAgICAgX3Rhc2suZW1pdHRlciwKICAgICAgICAgICAgRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSgKICAgICAgICAgICAgICAgIGNsYXNzVHlwZTogX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShlbmNsb3NpbmdDbGFzcykpLAogICAgICAgICAgICBUeXBlRXhwcmVzc2lvblJlY2lwZSh0eXBlKSk7CiAgICAgICAgX2xhdGVOYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkuYWRkQWxsKGVuY29kaW5nLnR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBlbmNvZGluZy5yZWNpcGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAganMuRXhwcmVzc2lvbiB0aGlzQWNjZXNzID0ganMuanMocid0aGlzLiRyZWNlaXZlcicpOwogICAgICAgIHJldHVybiBfcnRpRW5jb2Rlci5nZXRTaWduYXR1cmVFbmNvZGluZygKICAgICAgICAgICAgX25hbWVyLCBfdGFzay5lbWl0dGVyLCB0eXBlLCB0aGlzQWNjZXNzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF90YXNrLm1ldGFkYXRhQ29sbGVjdG9yLnJlaWZ5VHlwZSh0eXBlLCBvdXRwdXRVbml0KTsKICAgIH0KICB9CgogIExpc3Q8UGFyYW1ldGVyU3R1Yk1ldGhvZD4gX2dlbmVyYXRlUGFyYW1ldGVyU3R1YnMoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIGJvb2wgY2FuVGVhck9mZiwgYm9vbCBjYW5CZUFwcGxpZWQpIHsKICAgIGlmICghX21ldGhvZE5lZWRzU3R1YnMoZWxlbWVudCkpIHJldHVybiBjb25zdCA8UGFyYW1ldGVyU3R1Yk1ldGhvZD5bXTsKCiAgICBQYXJhbWV0ZXJTdHViR2VuZXJhdG9yIGdlbmVyYXRvciA9IG5ldyBQYXJhbWV0ZXJTdHViR2VuZXJhdG9yKAogICAgICAgIF90YXNrLmVtaXR0ZXIsCiAgICAgICAgX3Rhc2submF0aXZlRW1pdHRlciwKICAgICAgICBfbmFtZXIsCiAgICAgICAgX3J0aUVuY29kZXIsCiAgICAgICAgX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSA/IF9ydGlSZWNpcGVFbmNvZGVyIDogbnVsbCwKICAgICAgICBfbmF0aXZlRGF0YSwKICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLAogICAgICAgIF9jb2RlZ2VuV29ybGQsCiAgICAgICAgX2Nsb3NlZFdvcmxkLAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KTsKICAgIHJldHVybiBnZW5lcmF0b3IuZ2VuZXJhdGVQYXJhbWV0ZXJTdHVicyhlbGVtZW50LAogICAgICAgIGNhblRlYXJPZmY6IGNhblRlYXJPZmYsIGNhbkJlQXBwbGllZDogY2FuQmVBcHBsaWVkKTsKICB9CgogIExpc3Q8U3R1Yk1ldGhvZD4gX2dlbmVyYXRlSW5zdGFudGlhdGlvblN0dWJzKENsYXNzRW50aXR5IGluc3RhbnRpYXRpb25DbGFzcykgewogICAgSW5zdGFudGlhdGlvblN0dWJHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IEluc3RhbnRpYXRpb25TdHViR2VuZXJhdG9yKAogICAgICAgIF90YXNrLCBfbmFtZXIsIF9jbG9zZWRXb3JsZCwgX2NvZGVnZW5Xb3JsZCwgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpOwogICAgcmV0dXJuIGdlbmVyYXRvci5nZW5lcmF0ZVN0dWJzKGluc3RhbnRpYXRpb25DbGFzcywgbnVsbCk7CiAgfQoKICAvLy8gQnVpbGRzIGEgc3R1YiBtZXRob2QuCiAgLy8vCiAgLy8vIFN0dWIgbWV0aG9kcyBtYXkgaGF2ZSBhbiBlbGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgZm9yIGNvZGUtc2l6ZQogIC8vLyBhdHRyaWJ1dGlvbi4KICBNZXRob2QgX2J1aWxkU3R1Yk1ldGhvZChqcy5OYW1lIG5hbWUsIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAge01lbWJlckVudGl0eSBlbGVtZW50fSkgewogICAgcmV0dXJuIG5ldyBTdHViTWV0aG9kKG5hbWUsIGNvZGUsIGVsZW1lbnQ6IGVsZW1lbnQpOwogIH0KCiAgLy8gVGhlIGdldEludGVyY2VwdG9yIG1ldGhvZHMgZGlyZWN0bHkgYWNjZXNzIHRoZSBwcm90b3R5cGUgb2YgY2xhc3Nlcy4KICAvLyBXZSBtdXN0IGV2YWx1YXRlIHRoZXNlIGNsYXNzZXMgZWFnZXJseSBzbyB0aGF0IHRoZSBwcm90b3R5cGUgaXMKICAvLyBhY2Nlc3NpYmxlLgogIHZvaWQgX21hcmtFYWdlckludGVyY2VwdG9yQ2xhc3NlcygpIHsKICAgIEl0ZXJhYmxlPFNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3I+IGludGVyY2VwdG9ycyA9CiAgICAgICAgX29uZVNob3RJbnRlcmNlcHRvckRhdGEuc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnM7CiAgICBmb3IgKFNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IgaW4gaW50ZXJjZXB0b3JzKSB7CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgZWxlbWVudCBpbiBpbnRlcmNlcHRvci5jbGFzc2VzKSB7CiAgICAgICAgQ2xhc3MgY2xzID0gX2NsYXNzZXNbZWxlbWVudF07CiAgICAgICAgaWYgKGNscyAhPSBudWxsKSBjbHMuaXNFYWdlciA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIEl0ZXJhYmxlPFN0YXRpY1N0dWJNZXRob2Q+IF9nZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kcygpIHsKICAgIEludGVyY2VwdG9yU3R1YkdlbmVyYXRvciBzdHViR2VuZXJhdG9yID0gbmV3IEludGVyY2VwdG9yU3R1YkdlbmVyYXRvcigKICAgICAgICBfY29tbW9uRWxlbWVudHMsCiAgICAgICAgX3Rhc2suZW1pdHRlciwKICAgICAgICBfbmF0aXZlQ29kZWdlbkVucXVldWVyLAogICAgICAgIF9uYW1lciwKICAgICAgICBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMsCiAgICAgICAgX2NvZGVnZW5Xb3JsZCwKICAgICAgICBfY2xvc2VkV29ybGQpOwoKICAgIFN0cmluZyBob2xkZXJOYW1lID0KICAgICAgICBfbmFtZXIuZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeShfY29tbW9uRWxlbWVudHMuaW50ZXJjZXB0b3JzTGlicmFyeSk7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIG1pZGRsZSBvZgogICAgLy8gZ2VuZXJhdGluZyB0aGUgaW50ZXJjZXB0b3IgbWV0aG9kcy4KICAgIEhvbGRlciBob2xkZXIgPSBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoaG9sZGVyTmFtZSk7CiAgICBMaXN0PGpzLk5hbWU+IG5hbWVzID0gW107CiAgICBNYXA8anMuTmFtZSwgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcj4gaW50ZXJjZXB0b3JNYXAgPSB7fTsKICAgIGZvciAoU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvciBpbnRlcmNlcHRvcgogICAgICAgIGluIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLnNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzKSB7CiAgICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5uYW1lRm9yR2V0SW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IuY2xhc3Nlcyk7CiAgICAgIG5hbWVzLmFkZChuYW1lKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgIWludGVyY2VwdG9yTWFwLmNvbnRhaW5zS2V5KG5hbWUpLAogICAgICAgICAgIkR1cGxpY2F0ZSBzcGVjaWFsaXplZCBnZXQgaW50ZXJjZXB0b3IgZm9yICRuYW1lOiBFeGlzdGluZzogIgogICAgICAgICAgIiR7aW50ZXJjZXB0b3JNYXBbbmFtZV19LCBuZXcgJHtpbnRlcmNlcHRvcn0uIik7CiAgICAgIGludGVyY2VwdG9yTWFwW25hbWVdID0gaW50ZXJjZXB0b3I7CiAgICB9CiAgICBuYW1lcy5zb3J0KCk7CiAgICByZXR1cm4gbmFtZXMubWFwKChqcy5OYW1lIG5hbWUpIHsKICAgICAgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvciBpbnRlcmNlcHRvciA9IGludGVyY2VwdG9yTWFwW25hbWVdOwogICAgICBqcy5FeHByZXNzaW9uIGNvZGUgPQogICAgICAgICAgc3R1YkdlbmVyYXRvci5nZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kKGludGVyY2VwdG9yKTsKICAgICAgcmV0dXJuIG5ldyBTdGF0aWNTdHViTWV0aG9kKG5hbWUsIGhvbGRlciwgY29kZSk7CiAgICB9KTsKICB9CgogIExpc3Q8RmllbGQ+IF9idWlsZEZpZWxkcygKICAgICAge2Jvb2wgdmlzaXRTdGF0aWNzOiBmYWxzZSwKICAgICAgYm9vbCBpc0hvbGRlckludGVyY2VwdGVkQ2xhc3M6IGZhbHNlLAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksCiAgICAgIENsYXNzRW50aXR5IGNsc30pIHsKICAgIExpc3Q8RmllbGQ+IGZpZWxkcyA9IDxGaWVsZD5bXTsKCiAgICB2b2lkIHZpc2l0RmllbGQoRmllbGRFbnRpdHkgZmllbGQsIGpzLk5hbWUgbmFtZSwganMuTmFtZSBhY2Nlc3Nvck5hbWUsCiAgICAgICAgYm9vbCBuZWVkc0dldHRlciwgYm9vbCBuZWVkc1NldHRlciwgYm9vbCBuZWVkc0NoZWNrZWRTZXR0ZXIpIHsKICAgICAgaW50IGdldHRlckZsYWdzID0gMDsKICAgICAgaWYgKG5lZWRzR2V0dGVyKSB7CiAgICAgICAgaWYgKHZpc2l0U3RhdGljcyB8fAogICAgICAgICAgICAhX2ludGVyY2VwdG9yRGF0YS5maWVsZEhhc0ludGVyY2VwdGVkR2V0dGVyKGZpZWxkKSkgewogICAgICAgICAgZ2V0dGVyRmxhZ3MgPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBnZXR0ZXJGbGFncyArPSAyOwogICAgICAgICAgLy8gVE9ETyhzcmEpOiAnaXNJbnRlcmNlcHRlZENsYXNzJyBtaWdodCBub3QgYmUgdGhlIGNvcnJlY3QgdGVzdAogICAgICAgICAgLy8gZm9yIG1ldGhvZHMgZm9yY2VkIHRvIHVzZSB0aGUgaW50ZXJjZXB0b3IgY29udmVudGlvbiBiZWNhdXNlCiAgICAgICAgICAvLyB0aGUgbWV0aG9kJ3MgY2xhc3Mgd2FzIGVsc2V3aGVyZSBtaXhlZC1pbiB0byBhbiBpbnRlcmNlcHRvci4KICAgICAgICAgIGlmICghaXNIb2xkZXJJbnRlcmNlcHRlZENsYXNzKSB7CiAgICAgICAgICAgIGdldHRlckZsYWdzICs9IDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBpbnQgc2V0dGVyRmxhZ3MgPSAwOwogICAgICBpZiAobmVlZHNTZXR0ZXIpIHsKICAgICAgICBpZiAodmlzaXRTdGF0aWNzIHx8CiAgICAgICAgICAgICFfaW50ZXJjZXB0b3JEYXRhLmZpZWxkSGFzSW50ZXJjZXB0ZWRTZXR0ZXIoZmllbGQpKSB7CiAgICAgICAgICBzZXR0ZXJGbGFncyA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNldHRlckZsYWdzICs9IDI7CiAgICAgICAgICBpZiAoIWlzSG9sZGVySW50ZXJjZXB0ZWRDbGFzcykgewogICAgICAgICAgICBzZXR0ZXJGbGFncyArPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKTsKICAgICAgQ29uc3RhbnRWYWx1ZSBpbml0aWFsaXplckluQWxsb2NhdG9yOwogICAgICBpZiAoZmllbGREYXRhLmlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcikgewogICAgICAgIGluaXRpYWxpemVySW5BbGxvY2F0b3IgPSBmaWVsZERhdGEuaW5pdGlhbFZhbHVlOwogICAgICB9CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZTsKICAgICAgaWYgKGZpZWxkRGF0YS5pc0VmZmVjdGl2ZWx5Q29uc3RhbnQpIHsKICAgICAgICBjb25zdGFudFZhbHVlID0gZmllbGREYXRhLmNvbnN0YW50VmFsdWU7CiAgICAgIH0KCiAgICAgIGZpZWxkcy5hZGQobmV3IEZpZWxkKAogICAgICAgICAgZmllbGQsCiAgICAgICAgICBuYW1lLAogICAgICAgICAgYWNjZXNzb3JOYW1lLAogICAgICAgICAgZ2V0dGVyRmxhZ3MsCiAgICAgICAgICBzZXR0ZXJGbGFncywKICAgICAgICAgIG5lZWRzQ2hlY2tlZFNldHRlciwKICAgICAgICAgIGluaXRpYWxpemVySW5BbGxvY2F0b3IsCiAgICAgICAgICBjb25zdGFudFZhbHVlLAogICAgICAgICAgZmllbGREYXRhLmlzRWxpZGVkKSk7CiAgICB9CgogICAgRmllbGRWaXNpdG9yIHZpc2l0b3IgPSBuZXcgRmllbGRWaXNpdG9yKF9vcHRpb25zLCBfZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIF9jb21tb25FbGVtZW50cywgX2NvZGVnZW5Xb3JsZCwgX25hdGl2ZURhdGEsIF9uYW1lciwgX2Nsb3NlZFdvcmxkKTsKICAgIHZpc2l0b3IudmlzaXRGaWVsZHModmlzaXRGaWVsZCwKICAgICAgICB2aXNpdFN0YXRpY3M6IHZpc2l0U3RhdGljcywgbGlicmFyeTogbGlicmFyeSwgY2xzOiBjbHMpOwoKICAgIHJldHVybiBmaWVsZHM7CiAgfQoKICBJdGVyYWJsZTxTdGF0aWNTdHViTWV0aG9kPiBfZ2VuZXJhdGVPbmVTaG90SW50ZXJjZXB0b3JzKCkgewogICAgSW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yIHN0dWJHZW5lcmF0b3IgPSBuZXcgSW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yKAogICAgICAgIF9jb21tb25FbGVtZW50cywKICAgICAgICBfdGFzay5lbWl0dGVyLAogICAgICAgIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIsCiAgICAgICAgX25hbWVyLAogICAgICAgIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcywKICAgICAgICBfY29kZWdlbldvcmxkLAogICAgICAgIF9jbG9zZWRXb3JsZCk7CgogICAgU3RyaW5nIGhvbGRlck5hbWUgPQogICAgICAgIF9uYW1lci5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5KF9jb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5KTsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgbWlkZGxlIG9mCiAgICAvLyBnZW5lcmF0aW5nIHRoZSBpbnRlcmNlcHRvciBtZXRob2RzLgogICAgSG9sZGVyIGhvbGRlciA9IF9yZWdpc3RyeS5yZWdpc3RlckhvbGRlcihob2xkZXJOYW1lKTsKICAgIExpc3Q8anMuTmFtZT4gbmFtZXMgPSBbXTsKICAgIE1hcDxqcy5OYW1lLCBPbmVTaG90SW50ZXJjZXB0b3I+IGludGVyY2VwdG9yTWFwID0ge307CiAgICBmb3IgKE9uZVNob3RJbnRlcmNlcHRvciBpbnRlcmNlcHRvcgogICAgICAgIGluIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLm9uZVNob3RJbnRlcmNlcHRvcnMpIHsKICAgICAganMuTmFtZSBuYW1lID0gX25hbWVyLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3IoCiAgICAgICAgICBpbnRlcmNlcHRvci5zZWxlY3RvciwgaW50ZXJjZXB0b3IuY2xhc3Nlcyk7CiAgICAgIG5hbWVzLmFkZChuYW1lKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgIWludGVyY2VwdG9yTWFwLmNvbnRhaW5zS2V5KG5hbWUpLAogICAgICAgICAgIkR1cGxpY2F0ZSBzcGVjaWFsaXplZCBnZXQgaW50ZXJjZXB0b3IgZm9yICRuYW1lOiBFeGlzdGluZzogIgogICAgICAgICAgIiR7aW50ZXJjZXB0b3JNYXBbbmFtZV19LCBuZXcgJHtpbnRlcmNlcHRvcn0uIik7CiAgICAgIGludGVyY2VwdG9yTWFwW25hbWVdID0gaW50ZXJjZXB0b3I7CiAgICB9CiAgICBuYW1lcy5zb3J0KCk7CiAgICByZXR1cm4gbmFtZXMubWFwKChqcy5OYW1lIG5hbWUpIHsKICAgICAgT25lU2hvdEludGVyY2VwdG9yIGludGVyY2VwdG9yID0gaW50ZXJjZXB0b3JNYXBbbmFtZV07CiAgICAgIGpzLkV4cHJlc3Npb24gY29kZSA9CiAgICAgICAgICBzdHViR2VuZXJhdG9yLmdlbmVyYXRlT25lU2hvdEludGVyY2VwdG9yKGludGVyY2VwdG9yKTsKICAgICAgcmV0dXJuIG5ldyBTdGF0aWNTdHViTWV0aG9kKG5hbWUsIGhvbGRlciwgY29kZSk7CiAgICB9KTsKICB9CgogIFN0YXRpY0RhcnRNZXRob2QgX2J1aWxkU3RhdGljTWV0aG9kKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5tZXRob2RQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgICBTdHJpbmcgaG9sZGVyID0gX25hbWVyLmdsb2JhbE9iamVjdEZvck1lbWJlcihlbGVtZW50KTsKICAgIGpzLkV4cHJlc3Npb24gY29kZSA9IF9nZW5lcmF0ZWRDb2RlW2VsZW1lbnRdOwoKICAgIGJvb2wgaXNBcHBseVRhcmdldCA9CiAgICAgICAgIWVsZW1lbnQuaXNDb25zdHJ1Y3RvciAmJiAhZWxlbWVudC5pc0dldHRlciAmJiAhZWxlbWVudC5pc1NldHRlcjsKICAgIGJvb2wgY2FuQmVBcHBsaWVkID0gX21ldGhvZENhbkJlQXBwbGllZChlbGVtZW50KTsKCiAgICBib29sIG5lZWRzVGVhck9mZiA9CiAgICAgICAgaXNBcHBseVRhcmdldCAmJiBfY29kZWdlbldvcmxkLmNsb3N1cml6ZWRTdGF0aWNzLmNvbnRhaW5zKGVsZW1lbnQpOwoKICAgIGpzLk5hbWUgdGVhck9mZk5hbWUgPQogICAgICAgIG5lZWRzVGVhck9mZiA/IF9uYW1lci5zdGF0aWNDbG9zdXJlTmFtZShlbGVtZW50KSA6IG51bGw7CgogICAganMuTmFtZSBjYWxsTmFtZSA9IG51bGw7CiAgICBpZiAobmVlZHNUZWFyT2ZmKSB7CiAgICAgIFNlbGVjdG9yIGNhbGxTZWxlY3RvciA9CiAgICAgICAgICBuZXcgU2VsZWN0b3IuZnJvbUVsZW1lbnQoZWxlbWVudCkudG9DYWxsU2VsZWN0b3IoKTsKICAgICAgY2FsbE5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoY2FsbFNlbGVjdG9yKTsKICAgIH0KICAgIGpzLkV4cHJlc3Npb24gZnVuY3Rpb25UeXBlOwogICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnQpOwogICAgaWYgKG5lZWRzVGVhck9mZikgewogICAgICBPdXRwdXRVbml0IG91dHB1dFVuaXQgPSBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvck1lbWJlcihlbGVtZW50KTsKICAgICAgZnVuY3Rpb25UeXBlID0gX2dlbmVyYXRlRnVuY3Rpb25UeXBlKG51bGwsIHR5cGUsIG91dHB1dFVuaXQpOwogICAgfQoKICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGVsZW1lbnQ7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZTsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVyczsKICAgIHZhciAvKiBMaXN0IHwgTWFwICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICAgIGludCBhcHBseUluZGV4ID0gMDsKICAgIGlmIChjYW5CZUFwcGxpZWQpIHsKICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzID0gX2NvbXB1dGVQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKG1ldGhvZCk7CiAgICAgIGlmIChwYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPiAwKSB7CiAgICAgICAgYXBwbHlJbmRleCA9IDE7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIG1pZGRsZSBvZgogICAgLy8gYnVpbGRpbmcgYSBzdGF0aWMgbWV0aG9kLgogICAgcmV0dXJuIG5ldyBTdGF0aWNEYXJ0TWV0aG9kKAogICAgICAgIGVsZW1lbnQsCiAgICAgICAgbmFtZSwKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoaG9sZGVyKSwKICAgICAgICBjb2RlLAogICAgICAgIF9nZW5lcmF0ZVBhcmFtZXRlclN0dWJzKGVsZW1lbnQsIG5lZWRzVGVhck9mZiwgY2FuQmVBcHBsaWVkKSwKICAgICAgICBjYWxsTmFtZSwKICAgICAgICBuZWVkc1RlYXJPZmY6IG5lZWRzVGVhck9mZiwKICAgICAgICB0ZWFyT2ZmTmFtZTogdGVhck9mZk5hbWUsCiAgICAgICAgY2FuQmVBcHBsaWVkOiBjYW5CZUFwcGxpZWQsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICBmdW5jdGlvblR5cGU6IGZ1bmN0aW9uVHlwZSwKICAgICAgICBhcHBseUluZGV4OiBhcHBseUluZGV4KTsKICB9CgogIHZvaWQgX3JlZ2lzdGVyQ29uc3RhbnRzKAogICAgICBPdXRwdXRVbml0IG91dHB1dFVuaXQsIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGNvbnN0YW50VmFsdWVzKSB7CiAgICAvLyBgY29uc3RhbnRWYWx1ZXNgIGlzIG51bGwgaWYgYW4gb3V0cHV0VW5pdCBkb2Vzbid0IGNvbnRhaW4gYW55IGNvbnN0YW50cy4KICAgIGlmIChjb25zdGFudFZhbHVlcyA9PSBudWxsKSByZXR1cm47CiAgICBmb3IgKENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSBpbiBjb25zdGFudFZhbHVlcykgewogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJDb25zdGFudChvdXRwdXRVbml0LCBjb25zdGFudFZhbHVlKTsKICAgICAgYXNzZXJ0KCFfY29uc3RhbnRzLmNvbnRhaW5zS2V5KGNvbnN0YW50VmFsdWUpKTsKICAgICAganMuTmFtZSBuYW1lID0gX25hbWVyLmNvbnN0YW50TmFtZShjb25zdGFudFZhbHVlKTsKICAgICAgU3RyaW5nIGNv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c3JjL2pzX2VtaXR0ZXIvcHJvZ3JhbV9idWlsZGVyL2ZpZWxkX3Zpc2l0b3IuZGFydJpLLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydDJqcy5qc19lbWl0dGVyLnByb2dyYW1fYnVpbGRlcjsKCi8vLyBbbWVtYmVyXSBpcyBhIGZpZWxkIChpbnN0YW5jZSwgc3RhdGljLCBvciB0b3AgbGV2ZWwpLgovLy8KLy8vIFtuYW1lXSBpcyB0aGUgZmllbGQgbmFtZSB0aGF0IHRoZSBbTmFtZXJdIGhhcyBwaWNrZWQgZm9yIHRoaXMgZmllbGQncwovLy8gc3RvcmFnZSwgdGhhdCBpcywgdGhlIEphdmFTY3JpcHQgcHJvcGVydHkgbmFtZS4KLy8vCi8vLyBbYWNjZXNzb3JOYW1lXSBpcyB0aGUgbmFtZSBvZiB0aGUgYWNjZXNzb3IuIEZvciBpbnN0YW5jZSBmaWVsZHMgdGhpcyBpcwovLy8gbW9zdGx5IHRoZSBzYW1lIGFzIFtuYW1lXSBleGNlcHQgd2hlbiBbbWVtYmVyXSBpcyBzaGFkb3dpbmcgYSBmaWVsZCBpbiBpdHMKLy8vIHN1cGVyY2xhc3MuICBGb3Igb3RoZXIgZmllbGRzLCB0aGV5IGFyZSByYXJlbHkgdGhlIHNhbWUuCi8vLwovLy8gW25lZWRzR2V0dGVyXSBhbmQgW25lZWRzU2V0dGVyXSByZXByZXNlbnQgaWYgYSBnZXR0ZXIgb3IgYSBzZXR0ZXIKLy8vIHJlc3BlY3RpdmVseSBpcyBuZWVkZWQuICBUaGVyZSBhcmUgbWFueSBmYWN0b3JzIGluIHRoaXMsIGZvciBleGFtcGxlLCBpZiB0aGUKLy8vIGFjY2Vzc29yIGNhbiBiZSBpbmxpbmVkLgovLy8KLy8vIFtuZWVkc0NoZWNrZWRTZXR0ZXJdIGluZGljYXRlcyB0aGF0IGEgY2hlY2tlZCBnZXR0ZXIgaXMgbmVlZGVkLCBhbmQgaW4gdGhpcwovLy8gY2FzZSwgW25lZWRzU2V0dGVyXSBpcyBhbHdheXMgZmFsc2UuIFtuZWVkc0NoZWNrZWRTZXR0ZXJdIGlzIG9ubHkgdHJ1ZSB3aGVuCi8vLyB0eXBlIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQgKGNoZWNrZWQgbW9kZSkuCnR5cGVkZWYgdm9pZCBBY2NlcHRGaWVsZChGaWVsZEVudGl0eSBtZW1iZXIsIGpzLk5hbWUgbmFtZSwganMuTmFtZSBhY2Nlc3Nvck5hbWUsCiAgICBib29sIG5lZWRzR2V0dGVyLCBib29sIG5lZWRzU2V0dGVyLCBib29sIG5lZWRzQ2hlY2tlZFNldHRlcik7CgpjbGFzcyBGaWVsZFZpc2l0b3IgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBKRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgSkNvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBDb2RlZ2VuV29ybGQgX2NvZGVnZW5Xb3JsZDsKICBmaW5hbCBOYXRpdmVEYXRhIF9uYXRpdmVEYXRhOwogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwoKICBGaWVsZFZpc2l0b3IodGhpcy5fb3B0aW9ucywgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LCB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5fY29kZWdlbldvcmxkLCB0aGlzLl9uYXRpdmVEYXRhLCB0aGlzLl9uYW1lciwgdGhpcy5fY2xvc2VkV29ybGQpOwoKICAvLy8gSW52b2tlcyBbZl0gZm9yIGVhY2ggb2YgdGhlIGZpZWxkcyBvZiBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIFtlbGVtZW50XSBtdXN0IGJlIGEgW0NsYXNzRW50aXR5XSBvciBhIFtMaWJyYXJ5RW50aXR5XS4KICAvLy8KICAvLy8gSWYgW2VsZW1lbnRdIGlzIGEgW0NsYXNzRW50aXR5XSwgdGhlIHN0YXRpYyBmaWVsZHMgb2YgdGhlIGNsYXNzIGFyZQogIC8vLyB2aXNpdGVkIGlmIFt2aXNpdFN0YXRpY3NdIGlzIHRydWUgYW5kIHRoZSBpbnN0YW5jZSBmaWVsZHMgYXJlIHZpc2l0ZWQgaWYKICAvLy8gW3Zpc2l0U3RhdGljc10gaXMgZmFsc2UuCiAgLy8vCiAgLy8vIElmIFtlbGVtZW50XSBpcyBhIFtMaWJyYXJ5RW50aXR5XSwgW3Zpc2l0U3RhdGljc10gbXVzdCBiZSB0cnVlLgogIC8vLwogIC8vLyBXaGVuIHZpc2l0aW5nIHRoZSBpbnN0YW5jZSBmaWVsZHMgb2YgYSBjbGFzcywgdGhlIGZpZWxkcyBvZiBpdHMgc3VwZXJjbGFzcwogIC8vLyBhcmUgYWxzbyB2aXNpdGVkIGlmIHRoZSBjbGFzcyBpcyBpbnN0YW50aWF0ZWQuCiAgLy8vCiAgLy8vIEludmFyaWFudDogW2VsZW1lbnRdIG11c3QgYmUgYSBkZWNsYXJhdGlvbiBlbGVtZW50LgogIHZvaWQgdmlzaXRGaWVsZHMoQWNjZXB0RmllbGQgZiwKICAgICAge2Jvb2wgdmlzaXRTdGF0aWNzOiBmYWxzZSwgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBDbGFzc0VudGl0eSBjbHN9KSB7CiAgICBib29sIGlzTmF0aXZlQ2xhc3MgPSBmYWxzZTsKICAgIGJvb2wgaXNMaWJyYXJ5ID0gZmFsc2U7CiAgICBib29sIGlzSW5zdGFudGlhdGVkID0gZmFsc2U7CiAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgaXNOYXRpdmVDbGFzcyA9IF9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKTsKCiAgICAgIC8vIElmIHRoZSBjbGFzcyBpcyBuZXZlciBpbnN0YW50aWF0ZWQgd2Ugc3RpbGwgbmVlZCB0byBzZXQgaXQgdXAgZm9yCiAgICAgIC8vIGluaGVyaXRhbmNlIHB1cnBvc2VzLCBidXQgd2UgY2FuIHNpbXBsaWZ5IGl0cyBKYXZhU2NyaXB0IGNvbnN0cnVjdG9yLgogICAgICBpc0luc3RhbnRpYXRlZCA9IF9jb2RlZ2VuV29ybGQuZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzLmNvbnRhaW5zKGNscyk7CiAgICB9IGVsc2UgaWYgKGxpYnJhcnkgIT0gbnVsbCkgewogICAgICBpc0xpYnJhcnkgPSB0cnVlOwogICAgICBhc3NlcnQodmlzaXRTdGF0aWNzLCBmYWlsZWRBdChsaWJyYXJ5KSk7CiAgICB9IGVsc2UgewogICAgICBmYWlsZWRBdCgKICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgJ0V4cGVjdGVkIGEgQ2xhc3NFbnRpdHkgb3IgYSBMaWJyYXJ5RW50aXR5LicpOwogICAgfQoKICAgIHZvaWQgdmlzaXRGaWVsZChGaWVsZEVudGl0eSBmaWVsZCwge0NsYXNzRW50aXR5IGhvbGRlcn0pIHsKICAgICAgYm9vbCBpc01peGluTmF0aXZlRmllbGQgPQogICAgICAgICAgaXNOYXRpdmVDbGFzcyAmJiBfZWxlbWVudEVudmlyb25tZW50LmlzTWl4aW5BcHBsaWNhdGlvbihob2xkZXIpOwoKICAgICAgLy8gU2VlIGlmIHdlIGNhbiBkeW5hbWljYWxseSBjcmVhdGUgZ2V0dGVycyBhbmQgc2V0dGVycy4KICAgICAgLy8gV2UgY2FuIG9ubHkgZ2VuZXJhdGUgZ2V0dGVycyBhbmQgc2V0dGVycyBmb3IgW2VsZW1lbnRdIHNpbmNlCiAgICAgIC8vIHRoZSBmaWVsZHMgb2Ygc3VwZXIgY2xhc3NlcyBjb3VsZCBiZSBvdmVyd3JpdHRlbiB3aXRoIGdldHRlcnMgb3IKICAgICAgLy8gc2V0dGVycy4KICAgICAgYm9vbCBuZWVkc0dldHRlciA9IGZhbHNlOwogICAgICBib29sIG5lZWRzU2V0dGVyID0gZmFsc2U7CiAgICAgIGlmIChpc0xpYnJhcnkgfHwgaXNNaXhpbk5hdGl2ZUZpZWxkIHx8IGhvbGRlciA9PSBjbHMpIHsKICAgICAgICBuZWVkc0dldHRlciA9IGZpZWxkTmVlZHNHZXR0ZXIoZmllbGQpOwogICAgICAgIG5lZWRzU2V0dGVyID0gZmllbGROZWVkc1NldHRlcihmaWVsZCk7CiAgICAgIH0KCiAgICAgIGlmICgoaXNJbnN0YW50aWF0ZWQgJiYgIV9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSkgfHwKICAgICAgICAgIG5lZWRzR2V0dGVyIHx8CiAgICAgICAgICBuZWVkc1NldHRlcikgewogICAgICAgIGpzLk5hbWUgYWNjZXNzb3JOYW1lID0gX25hbWVyLmZpZWxkQWNjZXNzb3JOYW1lKGZpZWxkKTsKICAgICAgICBqcy5OYW1lIGZpZWxkTmFtZSA9IF9uYW1lci5maWVsZFByb3BlcnR5TmFtZShmaWVsZCk7CiAgICAgICAgYm9vbCBuZWVkc0NoZWNrZWRTZXR0ZXIgPSBmYWxzZTsKICAgICAgICBpZiAoX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KGZpZWxkKQogICAgICAgICAgICAgICAgLmlzRW1pdHRlZCAmJgogICAgICAgICAgICBuZWVkc1NldHRlciAmJgogICAgICAgICAgICAhY2FuQXZvaWRHZW5lcmF0ZWRDaGVja2VkU2V0dGVyKGZpZWxkKSkgewogICAgICAgICAgbmVlZHNDaGVja2VkU2V0dGVyID0gdHJ1ZTsKICAgICAgICAgIG5lZWRzU2V0dGVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIC8vIEdldHRlcnMgYW5kIHNldHRlcnMgd2l0aCBzdWZmaXhlcyB3aWxsIGJlIGdlbmVyYXRlZCBkeW5hbWljYWxseS4KICAgICAgICBmKGZpZWxkLCBmaWVsZE5hbWUsIGFjY2Vzc29yTmFtZSwgbmVlZHNHZXR0ZXIsIG5lZWRzU2V0dGVyLAogICAgICAgICAgICBuZWVkc0NoZWNrZWRTZXR0ZXIpOwogICAgICB9CiAgICB9CgogICAgaWYgKGlzTGlicmFyeSkgewogICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMaWJyYXJ5TWVtYmVyKGxpYnJhcnksIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB2aXNpdEZpZWxkKG1lbWJlcik7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmICh2aXNpdFN0YXRpY3MpIHsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbHMsIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmIG1lbWJlci5pc1N0YXRpYykgewogICAgICAgICAgdmlzaXRGaWVsZChtZW1iZXIsIGhvbGRlcjogY2xzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhrYXNwZXJsKTogV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0byBvbmx5IGVtaXQgb25lIHZlcnNpb24gb2YKICAgICAgLy8gb3ZlcnJpZGRlbiBmaWVsZHMuIFJpZ2h0IG5vdywgd2UgcmVseSBvbiB0aGUgb3JkZXJpbmcgc28gdGhlCiAgICAgIC8vIGZpZWxkcyBwdWxsZWQgaW4gZnJvbSBtaXhpbnMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGZpZWxkcyBmcm9tCiAgICAgIC8vIHRoZSBjbGFzcyBkZWZpbml0aW9uLgoKICAgICAgLy8gSWYgYSBjbGFzcyBpcyBub3QgaW5zdGFudGlhdGVkIHRoZW4gd2UgYWRkIHRoZSBmaWVsZCBqdXN0IHNvIHdlIGNhbgogICAgICAvLyBnZW5lcmF0ZSB0aGUgZmllbGQgZ2V0dGVyL3NldHRlciBkeW5hbWljYWxseS4gU2luY2UgdGhpcyBpcyBvbmx5CiAgICAgIC8vIGFsbG93ZWQgb24gZmllbGRzIHRoYXQgYXJlIGluIFtlbGVtZW50XSB3ZSBkb24ndCBuZWVkIHRvIHZpc2l0CiAgICAgIC8vIHN1cGVyY2xhc3NlcyBmb3Igbm9uLWluc3RhbnRpYXRlZCBjbGFzc2VzLgogICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzc01lbWJlcihjbHMsCiAgICAgICAgICAoQ2xhc3NFbnRpdHkgaG9sZGVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgaWYgKGNscyAhPSBob2xkZXIgJiYgIWlzSW5zdGFudGlhdGVkKSByZXR1cm47CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmICFtZW1iZXIuaXNTdGF0aWMpIHsKICAgICAgICAgIHZpc2l0RmllbGQobWVtYmVyLCBob2xkZXI6IGhvbGRlcik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9CgogIGJvb2wgZmllbGROZWVkc0dldHRlcihGaWVsZEVudGl0eSBmaWVsZCkgewogICAgYXNzZXJ0KGZpZWxkLmlzRmllbGQpOwogICAgaWYgKGZpZWxkQWNjZXNzTmV2ZXJUaHJvd3MoZmllbGQpKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZmllbGQuaXNJbnN0YW5jZU1lbWJlciAmJiBfY29kZWdlbldvcmxkLmhhc0ludm9rZWRHZXR0ZXIoZmllbGQpOwogIH0KCiAgYm9vbCBmaWVsZE5lZWRzU2V0dGVyKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICBhc3NlcnQoZmllbGQuaXNGaWVsZCk7CiAgICBpZiAoZmllbGRBY2Nlc3NOZXZlclRocm93cyhmaWVsZCkpIHJldHVybiBmYWxzZTsKICAgIGlmICghZmllbGQuaXNBc3NpZ25hYmxlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZmllbGQuaXNJbnN0YW5jZU1lbWJlciAmJiBfY29kZWdlbldvcmxkLmhhc0ludm9rZWRTZXR0ZXIoZmllbGQpOwogIH0KCiAgc3RhdGljIGJvb2wgZmllbGRBY2Nlc3NOZXZlclRocm93cyhGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuCiAgICAgICAgLy8gV2UgbmV2ZXIgYWNjZXNzIGEgZmllbGQgaW4gYSBjbG9zdXJlIChhIGNhcHR1cmVkIHZhcmlhYmxlKSB3aXRob3V0CiAgICAgICAgLy8ga25vd2luZyB0aGF0IGl0IGlzIHRoZXJlLiAgVGhlcmVmb3JlIHdlIGRvbid0IG5lZWQgdG8gdXNlIGEgZ2V0dGVyCiAgICAgICAgLy8gKHRoYXQgd2lsbCB0aHJvdyBpZiB0aGUgZ2V0dGVyIG1ldGhvZCBpcyBtaXNzaW5nKSwgYnV0IGNhbiBhbHdheXMKICAgICAgICAvLyBhY2Nlc3MgdGhlIGZpZWxkIGRpcmVjdGx5LgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJldHVybiBgdHJ1ZWAgSkNsb3N1cmVGaWVsZC4KICAgICAgICBmYWxzZTsKICB9CgogIGJvb2wgY2FuQXZvaWRHZW5lcmF0ZWRDaGVja2VkU2V0dGVyKEZpZWxkRW50aXR5IG1lbWJlcikgewogICAgLy8gV2UgbmV2ZXIgZ2VuZXJhdGUgYWNjZXNzb3JzIGZvciB0b3AtbGV2ZWwvc3RhdGljIGZpZWxkcy4KICAgIGlmICghbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybiB0cnVlOwogICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RmllbGRUeXBlKG1lbWJlcik7CiAgICByZXR1cm4gdHlwZS50cmVhdEFzRHluYW1pYyB8fCB0eXBlID09IF9jb21tb25FbGVtZW50cy5vYmplY3RUeXBlOwogIH0KfQqApwBOTjwBLAE6BEo0BExPPQRGUR0EUFAwUUIBFSIxKSQgFiMBTk0BNwY+BkpPHwZGBlE1BjoiTCAcIRc2AUtPUCIYLw0QUAYBPyBLAT9GShIgID4vLwgBQRkZQD0pKTAeGzYlHwpMRCEIBgEVUDAKH08xKwoKDUhGSB8BTUpINDI2NjIuCgoGBAEtGzVMBAEtGzUrTAQBOgtOTk0mPQ8EATxALz5GBAIBQnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvcHJvZ3JhbV9idWlsZGVyL2ZpZWxkX3Zpc2l0b3IuZGFydEdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3Byb2dyYW1fYnVpbGRlci9jb2xsZWN0b3IuZGFydK8cLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydDJqcy5qc19lbWl0dGVyLnByb2dyYW1fYnVpbGRlcjsKCi8vLyBHZW5lcmF0ZXMgdGhlIGNvZGUgZm9yIGFsbCB1c2VkIGNsYXNzZXMgaW4gdGhlIHByb2dyYW0uIFN0YXRpYyBmaWVsZHMgKGV2ZW4KLy8vIGluIGNsYXNzZXMpIGFyZSBpZ25vcmVkLCBzaW5jZSB0aGV5IGNhbiBiZSB0cmVhdGVkIGFzIG5vbi1jbGFzcyBlbGVtZW50cy4KLy8vCi8vLyBUaGUgY29kZSBmb3IgdGhlIGNvbnRhaW5pbmcgKHVzZWQpIG1ldGhvZHMgbXVzdCBleGlzdCBpbiB0aGUgYHVuaXZlcnNlYC4KY2xhc3MgQ29sbGVjdG9yIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgSkNvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBKRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgT3V0cHV0VW5pdERhdGEgX291dHB1dFVuaXREYXRhOwogIGZpbmFsIENvZGVnZW5Xb3JsZCBfY29kZWdlbldvcmxkOwogIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgY29kZS1lbWl0dGVyIHRhc2sgc2hvdWxkIG5vdCBuZWVkIGEgbmFtZXIuCiAgZmluYWwgTmFtZXIgX25hbWVyOwogIGZpbmFsIEVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgX2ludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBPbmVTaG90SW50ZXJjZXB0b3JEYXRhIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfcnRpTmVlZGVkQ2xhc3NlczsKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBqcy5FeHByZXNzaW9uPiBfZ2VuZXJhdGVkQ29kZTsKICBmaW5hbCBTb3J0ZXIgX3NvcnRlcjsKCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBuZWVkZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAvLyBUaGlzIGZpZWxkIGlzIHNldCBpbiBbY29tcHV0ZU5lZWRlZERlY2xhcmF0aW9uc10uCiAgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzT25seU5lZWRlZEZvclJ0aTsKICBmaW5hbCBNYXA8T3V0cHV0VW5pdCwgTGlzdDxDbGFzc0VudGl0eT4+IG91dHB1dENsYXNzTGlzdHMgPQogICAgICBuZXcgTWFwPE91dHB1dFVuaXQsIExpc3Q8Q2xhc3NFbnRpdHk+PigpOwogIGZpbmFsIE1hcDxPdXRwdXRVbml0LCBMaXN0PENvbnN0YW50VmFsdWU+PiBvdXRwdXRDb25zdGFudExpc3RzID0KICAgICAgbmV3IE1hcDxPdXRwdXRVbml0LCBMaXN0PENvbnN0YW50VmFsdWU+PigpOwogIGZpbmFsIE1hcDxPdXRwdXRVbml0LCBMaXN0PE1lbWJlckVudGl0eT4+IG91dHB1dFN0YXRpY0xpc3RzID0KICAgICAgbmV3IE1hcDxPdXRwdXRVbml0LCBMaXN0PE1lbWJlckVudGl0eT4+KCk7CiAgZmluYWwgTWFwPE91dHB1dFVuaXQsIExpc3Q8RmllbGRFbnRpdHk+PiBvdXRwdXRTdGF0aWNOb25GaW5hbEZpZWxkTGlzdHMgPQogICAgICBuZXcgTWFwPE91dHB1dFVuaXQsIExpc3Q8RmllbGRFbnRpdHk+PigpOwogIGZpbmFsIE1hcDxPdXRwdXRVbml0LCBTZXQ8TGlicmFyeUVudGl0eT4+IG91dHB1dExpYnJhcnlMaXN0cyA9CiAgICAgIG5ldyBNYXA8T3V0cHV0VW5pdCwgU2V0PExpYnJhcnlFbnRpdHk+PigpOwoKICAvLy8gVHJ1ZSwgaWYgdGhlIG91dHB1dCBjb250YWlucyBhIGNvbnN0YW50IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgZmxhZyBpcyB1cGRhdGVkIGluIFtjb21wdXRlTmVlZGVkQ29uc3RhbnRzXS4KICBib29sIG91dHB1dENvbnRhaW5zQ29uc3RhbnRMaXN0ID0gZmFsc2U7CgogIGZpbmFsIExpc3Q8Q2xhc3NFbnRpdHk+IG5hdGl2ZUNsYXNzZXNBbmRTdWJjbGFzc2VzID0gPENsYXNzRW50aXR5PltdOwoKICBDb2xsZWN0b3IoCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuX291dHB1dFVuaXREYXRhLAogICAgICB0aGlzLl9jb2RlZ2VuV29ybGQsCiAgICAgIHRoaXMuX25hbWVyLAogICAgICB0aGlzLl9lbWl0dGVyLAogICAgICB0aGlzLl9uYXRpdmVEYXRhLAogICAgICB0aGlzLl9pbnRlcmNlcHRvckRhdGEsCiAgICAgIHRoaXMuX29uZVNob3RJbnRlcmNlcHRvckRhdGEsCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9ydGlOZWVkZWRDbGFzc2VzLAogICAgICB0aGlzLl9nZW5lcmF0ZWRDb2RlLAogICAgICB0aGlzLl9zb3J0ZXIpOwoKICBTZXQ8Q2xhc3NFbnRpdHk+IGNvbXB1dGVJbnRlcmNlcHRvcnNSZWZlcmVuY2VkRnJvbUNvbnN0YW50cygpIHsKICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBjb25zdGFudHMgPSBfY29kZWdlbldvcmxkLmdldENvbnN0YW50c0ZvckVtaXNzaW9uKCk7CiAgICBmb3IgKENvbnN0YW50VmFsdWUgY29uc3RhbnQgaW4gY29uc3RhbnRzKSB7CiAgICAgIGlmIChjb25zdGFudCBpcyBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUpIHsKICAgICAgICBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgaW50ZXJjZXB0b3JDb25zdGFudCA9IGNvbnN0YW50OwogICAgICAgIGNsYXNzZXMuYWRkKGludGVyY2VwdG9yQ29uc3RhbnQuY2xzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNsYXNzZXM7CiAgfQoKICAvLy8gUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgaXRzIGFyZ3VtZW50IGlzIGEgY2xhc3MKICAvLy8gdGhhdCBuZWVkcyB0byBiZSBlbWl0dGVkLgogIEZ1bmN0aW9uIGNvbXB1dGVDbGFzc0ZpbHRlcihJdGVyYWJsZTxDbGFzc0VudGl0eT4gYmFja2VuZFR5cGVIZWxwZXJzKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IHVubmVlZGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICAvLyBUaGUgW0Jvb2xdIGNsYXNzIGlzIG5vdCBtYXJrZWQgYXMgYWJzdHJhY3QsIGJ1dCBoYXMgYSBmYWN0b3J5CiAgICAvLyBjb25zdHJ1Y3RvciB0aGF0IGFsd2F5cyB0aHJvd3MuIFdlIG5ldmVyIG5lZWQgdG8gZW1pdCBpdC4KICAgIHVubmVlZGVkQ2xhc3Nlcy5hZGQoX2NvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcyk7CgogICAgLy8gR28gb3ZlciBzcGVjaWFsaXplZCBpbnRlcmNlcHRvcnMgYW5kIHRoZW4gY29uc3RhbnRzIHRvIGtub3cgd2hpY2gKICAgIC8vIGludGVyY2VwdG9ycyBhcmUgbmVlZGVkLgogICAgU2V0PENsYXNzRW50aXR5PiBuZWVkZWQgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgZm9yIChTcGVjaWFsaXplZEdldEludGVyY2VwdG9yIGludGVyY2VwdG9yCiAgICAgICAgaW4gX29uZVNob3RJbnRlcmNlcHRvckRhdGEuc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMpIHsKICAgICAgbmVlZGVkLmFkZEFsbChpbnRlcmNlcHRvci5jbGFzc2VzKTsKICAgIH0KCiAgICAvLyBBZGQgaW50ZXJjZXB0b3JzIHJlZmVyZW5jZWQgYnkgY29uc3RhbnRzLgogICAgbmVlZGVkLmFkZEFsbChjb21wdXRlSW50ZXJjZXB0b3JzUmVmZXJlbmNlZEZyb21Db25zdGFudHMoKSk7CgogICAgLy8gQWRkIHVubmVlZGVkIGludGVyY2VwdG9ycyB0byB0aGUgW3VubmVlZGVkQ2xhc3Nlc10gc2V0LgogICAgZm9yIChDbGFzc0VudGl0eSBpbnRlcmNlcHRvciBpbiBfaW50ZXJjZXB0b3JEYXRhLmludGVyY2VwdGVkQ2xhc3NlcykgewogICAgICBpZiAoIW5lZWRlZC5jb250YWlucyhpbnRlcmNlcHRvcikgJiYKICAgICAgICAgIGludGVyY2VwdG9yICE9IF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICAgIHVubmVlZGVkQ2xhc3Nlcy5hZGQoaW50ZXJjZXB0b3IpOwogICAgICB9CiAgICB9CgogICAgLy8gVGhlc2UgY2xhc3NlcyBhcmUganVzdCBoZWxwZXJzIGZvciB0aGUgYmFja2VuZCdzIHR5cGUgc3lzdGVtLgogICAgdW5uZWVkZWRDbGFzc2VzLmFkZEFsbChiYWNrZW5kVHlwZUhlbHBlcnMpOwoKICAgIHJldHVybiAoQ2xhc3NFbnRpdHkgY2xzKSA9PiAhdW5uZWVkZWRDbGFzc2VzLmNvbnRhaW5zKGNscyk7CiAgfQoKICAvLyBSZXR1cm4gdGhlIGNsYXNzZXMgdGhhdCBhcmUganVzdCBoZWxwZXJzIGZvciB0aGUgYmFja2VuZCdzIHR5cGUgc3lzdGVtLgogIHN0YXRpYyBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0QmFja2VuZFR5cGVIZWxwZXJzKAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpIHsKICAgIHJldHVybiA8Q2xhc3NFbnRpdHk+WwogICAgICBjb21tb25FbGVtZW50cy5qc011dGFibGVBcnJheUNsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcywKICAgICAgY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcywKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWFyayB0aGlzIGFzIGEgYmFja2VuZCB0eXBlIGhlbHBlcjoKICAgICAgLy9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcwogICAgXTsKICB9CgogIC8vLyBDb21wdXRlIGFsbCB0aGUgY29uc3RhbnRzIHRoYXQgbXVzdCBiZSBlbWl0dGVkLgogIHZvaWQgY29tcHV0ZU5lZWRlZENvbnN0YW50cygpIHsKICAgIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGNvbnN0YW50cyA9CiAgICAgICAgX2NvZGVnZW5Xb3JsZC5nZXRDb25zdGFudHNGb3JFbWlzc2lvbihfZW1pdHRlci5jb21wYXJlQ29uc3RhbnRzKTsKICAgIGZvciAoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCBpbiBjb25zdGFudHMpIHsKICAgICAgaWYgKF9lbWl0dGVyLmlzQ29uc3RhbnRJbmxpbmVkT3JBbHJlYWR5RW1pdHRlZChjb25zdGFudCkpIGNvbnRpbnVlOwoKICAgICAgaWYgKGNvbnN0YW50LmlzTGlzdCkgb3V0cHV0Q29udGFpbnNDb25zdGFudExpc3QgPSB0cnVlOwoKICAgICAgT3V0cHV0VW5pdCBjb25zdGFudFVuaXQgPSBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvckNvbnN0YW50KGNvbnN0YW50KTsKICAgICAgaWYgKGNvbnN0YW50VW5pdCA9PSBudWxsKSB7CiAgICAgICAgLy8gVGhlIGJhY2stZW5kIGludHJvZHVjZXMgc29tZSBjb25zdGFudHMsIGxpa2UgIkludGVyY2VwdG9yQ29uc3RhbnQiIG9yCiAgICAgICAgLy8gc29tZSBsaXN0IGNvbnN0YW50cy4gVGhleSBhcmUgZW1pdHRlZCBpbiB0aGUgbWFpbiBvdXRwdXQtdW5pdC4KICAgICAgICAvLyBUT0RPKHNpZ3VyZG0pOiBXZSBzaG91bGQgdHJhY2sgdGhvc2UgY29uc3RhbnRzLgogICAgICAgIGNvbnN0YW50VW5pdCA9IF9vdXRwdXRVbml0RGF0YS5tYWluT3V0cHV0VW5pdDsKICAgICAgfQogICAgICBvdXRwdXRDb25zdGFudExpc3RzCiAgICAgICAgICAucHV0SWZBYnNlbnQoY29uc3RhbnRVbml0LCAoKSA9PiBuZXcgTGlzdDxDb25zdGFudFZhbHVlPigpKQogICAgICAgICAgLmFkZChjb25zdGFudCk7CiAgICB9CiAgfQoKICAvLy8gQ29tcHV0ZSBhbGwgdGhlIGNsYXNzZXMgYW5kIHR5cGVkZWZzIHRoYXQgbXVzdCBiZSBlbWl0dGVkLgogIHZvaWQgY29tcHV0ZU5lZWRlZERlY2xhcmF0aW9ucygpIHsKICAgIFNldDxDbGFzc0VudGl0eT4gYmFja2VuZFR5cGVIZWxwZXJzID0KICAgICAgICBnZXRCYWNrZW5kVHlwZUhlbHBlcnMoX2NvbW1vbkVsZW1lbnRzKS50b1NldCgpOwoKICAgIC8vIENvbXB1dGUgbmVlZGVkIGNsYXNzZXMuCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGluc3RhbnRpYXRlZENsYXNzZXMgPQogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20gYSBjb2RlZ2VuIGNsb3NlZAogICAgICAgIC8vIHdvcmxkLgogICAgICAgIF9jb2RlZ2VuV29ybGQuZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzCiAgICAgICAgICAgIC53aGVyZShjb21wdXRlQ2xhc3NGaWx0ZXIoYmFja2VuZFR5cGVIZWxwZXJzKSkKICAgICAgICAgICAgLnRvU2V0KCk7CgogICAgdm9pZCBhZGRDbGFzc1dpdGhTdXBlcmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIG5lZWRlZENsYXNzZXMuYWRkKGNscyk7CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICAgICAgc3VwZXJjbGFzcyAhPSBudWxsOwogICAgICAgICAgc3VwZXJjbGFzcyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhzdXBlcmNsYXNzKSkgewogICAgICAgIG5lZWRlZENsYXNzZXMuYWRkKHN1cGVyY2xhc3MpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBhZGRDbGFzc2VzV2l0aFN1cGVyY2xhc3NlcyhJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3NlcykgewogICAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBjbGFzc2VzKSB7CiAgICAgICAgYWRkQ2xhc3NXaXRoU3VwZXJjbGFzc2VzKGNscyk7CiAgICAgIH0KICAgIH0KCiAgICAvLyAxLiBXZSBuZWVkIHRvIGdlbmVyYXRlIGFsbCBjbGFzc2VzIHRoYXQgYXJlIGluc3RhbnRpYXRlZC4KICAgIGFkZENsYXNzZXNXaXRoU3VwZXJjbGFzc2VzKGluc3RhbnRpYXRlZENsYXNzZXMpOwoKICAgIC8vIDIuIEFkZCBhbGwgY2xhc3NlcyB1c2VkIGFzIG1peGlucy4KICAgIFNldDxDbGFzc0VudGl0eT4gbWl4aW5DbGFzc2VzID0gbmVlZGVkQ2xhc3NlcwogICAgICAgIC53aGVyZShfZWxlbWVudEVudmlyb25tZW50LmlzTWl4aW5BcHBsaWNhdGlvbikKICAgICAgICAubWFwKF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RWZmZWN0aXZlTWl4aW5DbGFzcykKICAgICAgICAudG9TZXQoKTsKICAgIG5lZWRlZENsYXNzZXMuYWRkQWxsKG1peGluQ2xhc3Nlcyk7CgogICAgLy8gMy4gRmluZCBhbGwgY2xhc3NlcyBuZWVkZWQgZm9yIHJ0aS4KICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgdGhlIHBlbnVsdGltYXRlIHN0ZXAsIGF0IHRoaXMgcG9pbnQsCiAgICAvLyBuZWVkZWRDbGFzc2VzIG11c3Qgb25seSBjb250YWluIGNsYXNzZXMgdGhhdCBoYXZlIGJlZW4gcmVzb2x2ZWQgYW5kCiAgICAvLyBjb2RlZ2VuJ2QuIFRoZSBydGlOZWVkZWRDbGFzc2VzIG1heSBjb250YWluIGFkZGl0aW9uYWwgY2xhc3NlcywgYnV0CiAgICAvLyB0aGVzZSBhcmUgdGhvdWdodCB0byBub3QgaGF2ZSBiZWVuIGluc3RhbnRpYXRlZCwgc28gd2UgbmVlZCB0byBiZSBhYmxlCiAgICAvLyB0byBpZGVudGlmeSB0aGVtIGxhdGVyIGFuZCBtYWtlIHN1cmUgd2Ugb25seSBlbWl0ICJlbXB0eSBzaGVsbHMiIHdpdGhvdXQKICAgIC8vIGZpZWxkcywgZXRjLgogICAgY2xhc3Nlc09ubHlOZWVkZWRGb3JSdGkgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gX3J0aU5lZWRlZENsYXNzZXMpIHsKICAgICAgaWYgKGJhY2tlbmRUeXBlSGVscGVycy5jb250YWlucyhjbHMpKSBjb250aW51ZTsKICAgICAgd2hpbGUgKGNscyAhPSBudWxsICYmICFuZWVkZWRDbGFzc2VzLmNvbnRhaW5zKGNscykpIHsKICAgICAgICBpZiAoIWNsYXNzZXNPbmx5TmVlZGVkRm9yUnRpLmFkZChjbHMpKSBicmVhazsKICAgICAgICBjbHMgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgfQogICAgfQoKICAgIG5lZWRlZENsYXNzZXMuYWRkQWxsKGNsYXNzZXNPbmx5TmVlZGVkRm9yUnRpKTsKCiAgICAvLyBUT0RPKDE4MTc1LCBmbG9pdHNjaCk6IHJlbW92ZSBvbmNlIGlzc3VlIDE4MTc1IGlzIGZpeGVkLgogICAgaWYgKG5lZWRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpKSB7CiAgICAgIG5lZWRlZENsYXNzZXMuYWRkKF9jb21tb25FbGVtZW50cy5pbnRDbGFzcyk7CiAgICB9CiAgICBpZiAobmVlZGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcykpIHsKICAgICAgbmVlZGVkQ2xhc3Nlcy5hZGQoX2NvbW1vbkVsZW1lbnRzLmRvdWJsZUNsYXNzKTsKICAgIH0KICAgIGlmIChuZWVkZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzKSkgewogICAgICBuZWVkZWRDbGFzc2VzLmFkZChfY29tbW9uRWxlbWVudHMubnVtQ2xhc3MpOwogICAgfQogICAgaWYgKG5lZWRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpKSB7CiAgICAgIG5lZWRlZENsYXNzZXMuYWRkKF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcyk7CiAgICB9CiAgICBpZiAobmVlZGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MpKSB7CiAgICAgIG5lZWRlZENsYXNzZXMuYWRkKF9jb21tb25FbGVtZW50cy5ib29sQ2xhc3MpOwogICAgfQogICAgaWYgKG5lZWRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykpIHsKICAgICAgbmVlZGVkQ2xhc3Nlcy5hZGQoX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyk7CiAgICB9CgogICAgLy8gNC4gRmluYWxseSwgc29ydCB0aGUgY2xhc3Nlcy4KICAgIExpc3Q8Q2xhc3NFbnRpdHk+IHNvcnRlZENsYXNzZXMgPSBfc29ydGVyLnNvcnRDbGFzc2VzKG5lZWRlZENsYXNzZXMpOwoKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIHNvcnRlZENsYXNzZXMpIHsKICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykgJiYKICAgICAgICAgICFjbGFzc2VzT25seU5lZWRlZEZvclJ0aS5jb250YWlucyhjbHMpKSB7CiAgICAgICAgLy8gRm9yIG5vdywgbmF0aXZlIGNsYXNzZXMgYW5kIHJlbGF0ZWQgY2xhc3NlcyBjYW5ub3QgYmUgZGVmZXJyZWQuCiAgICAgICAgbmF0aXZlQ2xhc3Nlc0FuZFN1YmNsYXNzZXMuYWRkKGNscyk7CiAgICAgICAgYXNzZXJ0KCFfb3V0cHV0VW5pdERhdGEuaXNEZWZlcnJlZENsYXNzKGNscyksIGZhaWxlZEF0KGNscykpOwogICAgICAgIG91dHB1dENsYXNzTGlzdHMKICAgICAgICAgICAgLnB1dElmQWJzZW50KAogICAgICAgICAgICAgICAgX291dHB1dFVuaXREYXRhLm1haW5PdXRwdXRVbml0LCAoKSA9PiBuZXcgTGlzdDxDbGFzc0VudGl0eT4oKSkKICAgICAgICAgICAgLmFkZChjbHMpOwogICAgICB9IGVsc2UgewogICAgICAgIG91dHB1dENsYXNzTGlzdHMKICAgICAgICAgICAgLnB1dElmQWJzZW50KF9vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yQ2xhc3MoY2xzKSwKICAgICAgICAgICAgICAgICgpID0+IG5ldyBMaXN0PENsYXNzRW50aXR5PigpKQogICAgICAgICAgICAuYWRkKGNscyk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY29tcHV0ZU5lZWRlZFN0YXRpY3MoKSB7CiAgICBib29sIGlzU3RhdGljRnVuY3Rpb24oTWVtYmVyRW50aXR5IGVsZW1lbnQpID0+CiAgICAgICAgIWVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciAmJiAhZWxlbWVudC5pc0ZpZWxkOwoKICAgIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZWxlbWVudHMgPQogICAgICAgIF9nZW5lcmF0ZWRDb2RlLmtleXMud2hlcmUoaXNTdGF0aWNGdW5jdGlvbik7CgogICAgZm9yIChNZW1iZXJFbnRpdHkgbWVtYmVyIGluIF9zb3J0ZXIuc29ydE1lbWJlcnMoZWxlbWVudHMpKSB7CiAgICAgIExpc3Q8TWVtYmVyRW50aXR5PiBsaXN0ID0gb3V0cHV0U3RhdGljTGlzdHMucHV0SWZBYnNlbnQoCiAgICAgICAgICBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvck1lbWJlcihtZW1iZXIpLAogICAgICAgICAgKCkgPT4gbmV3IExpc3Q8TWVtYmVyRW50aXR5PigpKTsKICAgICAgbGlzdC5hZGQobWVtYmVyKTsKICAgIH0KICB9CgogIHZvaWQgY29tcHV0ZU5lZWRlZFN0YXRpY05vbkZpbmFsRmllbGRzKCkgewogICAgYWRkVG9PdXRwdXRVbml0KEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgICAgTGlzdDxGaWVsZEVudGl0eT4gbGlzdCA9IG91dHB1dFN0YXRpY05vbkZpbmFsRmllbGRMaXN0cy5wdXRJZkFic2VudCgKICAgICAgICAgIF9vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yTWVtYmVyKGVsZW1lbnQpLAogICAgICAgICAgKCkgPT4gbmV3IExpc3Q8RmllbGRFbnRpdHk+KCkpOwogICAgICBsaXN0LmFkZChlbGVtZW50KTsKICAgIH0KCiAgICBMaXN0PEZpZWxkRW50aXR5PiBlYWdlckZpZWxkcyA9IFtdOwogICAgX2NvZGVnZW5Xb3JsZC5mb3JFYWNoU3RhdGljRmllbGQoKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzRWFnZXIpIHsKICAgICAgICBlYWdlckZpZWxkcy5hZGQoZmllbGQpOwogICAgICB9CiAgICB9KTsKCiAgICBlYWdlckZpZWxkcy5zb3J0KChGaWVsZEVudGl0eSBhLCBGaWVsZEVudGl0eSBiKSB7CiAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGFGaWVsZERhdGEgPSBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoYSk7CiAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGJGaWVsZERhdGEgPSBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoYik7CiAgICAgIGludCBhSW5kZXggPSBhRmllbGREYXRhLmVhZ2VyQ3JlYXRpb25JbmRleDsKICAgICAgaW50IGJJbmRleCA9IGJGaWVsZERhdGEuZWFnZXJDcmVhdGlvbkluZGV4OwogICAgICBpZiAoYUluZGV4ICE9IG51bGwgJiYgYkluZGV4ICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gYUluZGV4LmNvbXBhcmVUbyhiSW5kZXgpOwogICAgICB9IGVsc2UgaWYgKGFJbmRleCAhPSBudWxsKSB7CiAgICAgICAgLy8gU29ydCBbYl0gYmVmb3JlIFthXS4KICAgICAgICByZXR1cm4gMTsKICAgICAgfSBlbHNlIGlmIChiSW5kZXggIT0gbnVsbCkgewogICAgICAgIC8vIFNvcnQgW2FdIGJlZm9yZSBbYl0uCiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBfc29ydGVyLmNvbXBhcmVNZW1iZXJzQnlMb2NhdGlvbihhLCBiKTsKICAgICAgfQogICAgfSk7CiAgICBlYWdlckZpZWxkcy5mb3JFYWNoKGFkZFRvT3V0cHV0VW5pdCk7CiAgfQoKICB2b2lkIGNvbXB1dGVOZWVkZWRMaWJyYXJpZXMoKSB7CiAgICBfZ2VuZXJhdGVkQ29kZS5rZXlzLmZvckVhY2goKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgIE91dHB1dFVuaXQgdW5pdCA9IF9vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yTWVtYmVyKGVsZW1lbnQpOwogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBlbGVtZW50LmxpYnJhcnk7CiAgICAgIG91dHB1dExpYnJhcnlMaXN0cwogICAgICAgICAgLnB1dElmQWJzZW50KHVuaXQsICgpID0+IG5ldyBTZXQ8TGlicmFyeUVudGl0eT4oKSkKICAgICAgICAgIC5hZGQobGlicmFyeSk7CiAgICB9KTsKICAgIG5lZWRlZENsYXNzZXMuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgICBPdXRwdXRVbml0IHVuaXQgPSBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvckNsYXNzKGVsZW1lbnQpOwogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBlbGVtZW50LmxpYnJhcnk7CiAgICAgIG91dHB1dExpYnJhcnlMaXN0cwogICAgICAgICAgLnB1dElmQWJzZW50KHVuaXQsICgpID0+IG5ldyBTZXQ8TGlicmFyeUVudGl0eT4oKSkKICAgICAgICAgIC5hZGQobGlicmFyeSk7CiAgICB9KTsKICB9CgogIHZvaWQgY29sbGVjdCgpIHsKICAgIGNvbXB1dGVOZWVkZWREZWNsYXJhdGlvbnMoKTsKICAgIGNvbXB1dGVOZWVkZWRDb25zdGFudHMoKTsKICAgIGNvbXB1dGVOZWVkZWRTdGF0aWNzKCk7CiAgICBjb21wdXRlTmVlZGVkU3RhdGljTm9uRmluYWxGaWVsZHMoKTsKICAgIGNvbXB1dGVOZWVkZWRMaWJyYXJpZXMoKTsKICB9Cn0KgUEATk48ASwBUE4ETRIiKTEoJEQWGiAqOCMsORgBQTcsPjBDMkAxTDBBMQE0BjgrAUgBDRUcIBwaExUYHSQZHhsVAUI3UTAyQS4IBhQEAUUgSj9FQTQBSSA2L0EqBgExQQE/Sys4KggGAUUwAUAEAU02KBoqKC1CMSQkKAcEATYiKEowSgE+AVEiUUo7NwgaRhoGBAFBJSo4AR8rThIyOxYBNR5MHkgnCAYBRSknCAYBQTUBKjI3ORIoAStJS0tOUBQ2MTY8NjYIBgEzAUA+MwZBNgZBMwZBNgY/NAZANAYBJUoBLTY0Sy1GGRpPFw8ZQi8XCAYEASAzNwEmNQFBPzcrGAYEAS0rSzgqGQYBKDtEIAgIATZRUTIyLikjIBIjIBMPNwgIKgQBIjlGLxk9GQgyRS8ZPRkIBAETIR4cKR4EAgE+cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9wcm9ncmFtX2J1aWxkZXIvY29sbGVjdG9yLmRhcnRGc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9wcm9ncmFtX2J1aWxkZXIvcmVnaXN0cnkuZGFydJOWLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydDJqcy5qc19lbWl0dGVyLnByb2dyYW1fYnVpbGRlcjsKCmNsYXNzIExpYnJhcnlDb250ZW50cyB7CiAgZmluYWwgTGlzdDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IDxDbGFzc0VudGl0eT5bXTsKICBmaW5hbCBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVycyA9IDxNZW1iZXJFbnRpdHk+W107Cn0KCi8vLyBNYXBzIFtMaWJyYXJ5RW50aXR5XXMgdG8gdGhlaXIgW0NsYXNzRW50aXR5XXMgYW5kIFtNZW1iZXJFbnRpdHldcy4KLy8vCi8vLyBGdW5kYW1lbnRhbGx5LCB0aGlzIGNsYXNzIG5pY2VseSBlbmNhcHN1bGF0ZXMgYQovLy8gYE1hcDxMaWJyYXJ5RW50aXR5LCBQYWlyPExpc3Q8Q2xhc3NFbnRpdHk+LCBMaXN0PE1lbWJlckVudGl0eT4+PmAuCi8vLwovLy8gVGhlcmUgZXhpc3RzIGV4YWN0bHkgb25lIGluc3RhbmNlIHBlciBbT3V0cHV0VW5pdF0uCmNsYXNzIExpYnJhcmllc01hcCB7CiAgZmluYWwgTWFwPExpYnJhcnlFbnRpdHksIExpYnJhcnlDb250ZW50cz4gX21hcHBpbmcgPQogICAgICA8TGlicmFyeUVudGl0eSwgTGlicmFyeUNvbnRlbnRzPnt9OwoKICAvLyBJdCBpcyB2ZXJ5IGNvbW1vbiB0byBhY2Nlc3MgdGhlIHNhbWUgbGlicmFyeSBtdWx0aXBsZSB0aW1lcyBpbiBhIHJvdywgc28KICAvLyB3ZSBjYWNoZSB0aGUgbGFzdCBhY2Nlc3MuCiAgTGlicmFyeUVudGl0eSBfbGFzdExpYnJhcnk7CiAgTGlicmFyeUNvbnRlbnRzIF9sYXN0TWFwcGluZzsKCiAgLy8vIEEgdW5pcXVlIG5hbWUgcmVwcmVzZW50aW5nIHRoaXMgaW5zdGFuY2UuCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgT3V0cHV0VW5pdCBvdXRwdXRVbml0OwoKICBMaWJyYXJpZXNNYXAubWFpbih0aGlzLm91dHB1dFVuaXQpIDogbmFtZSA9ICIiOwoKICBMaWJyYXJpZXNNYXAuZGVmZXJyZWQodGhpcy5vdXRwdXRVbml0LCB0aGlzLm5hbWUpIHsKICAgIGFzc2VydChuYW1lICE9ICIiKTsKICB9CgogIExpYnJhcnlDb250ZW50cyBfZ2V0TWFwcGluZyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIGlmIChfbGFzdExpYnJhcnkgIT0gbGlicmFyeSkgewogICAgICBfbGFzdExpYnJhcnkgPSBsaWJyYXJ5OwogICAgICBfbGFzdE1hcHBpbmcgPSBfbWFwcGluZy5wdXRJZkFic2VudChsaWJyYXJ5LCAoKSA9PiBuZXcgTGlicmFyeUNvbnRlbnRzKCkpOwogICAgfQogICAgcmV0dXJuIF9sYXN0TWFwcGluZzsKICB9CgogIHZvaWQgYWRkQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBfZ2V0TWFwcGluZyhsaWJyYXJ5KS5jbGFzc2VzLmFkZChlbGVtZW50KTsKICB9CgogIHZvaWQgYWRkTWVtYmVyKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIF9nZXRNYXBwaW5nKGxpYnJhcnkpLm1lbWJlcnMuYWRkKGVsZW1lbnQpOwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4gX21hcHBpbmcubGVuZ3RoOwoKICB2b2lkIGZvckVhY2goCiAgICAgIHZvaWQgZihMaWJyYXJ5RW50aXR5IGxpYnJhcnksIExpc3Q8Q2xhc3NFbnRpdHk+IGNsYXNzZXMsCiAgICAgICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVycykpIHsKICAgIF9tYXBwaW5nLmZvckVhY2goKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgTGlicmFyeUNvbnRlbnRzIG1hcHBpbmcpIHsKICAgICAgZihsaWJyYXJ5LCBtYXBwaW5nLmNsYXNzZXMsIG1hcHBpbmcubWVtYmVycyk7CiAgICB9KTsKICB9Cn0KCi8vLyBLZWVwcyB0cmFjayBvZiBhbGwgZWxlbWVudHMgYW5kIGhvbGRlcnMuCi8vLwovLy8gVGhpcyBjbGFzcyBhc3NpZ25zIGVhY2ggcmVnaXN0ZXJlZCBlbGVtZW50IHRvIGl0cyBbTGlicmFyaWVzTWFwXSAod2hpY2ggYXJlCi8vLyBpbiBiaWplY3Rpb24gd2l0aCBbT3V0cHV0VW5pdF1zKS4KLy8vCi8vLyBSZWdpc3RlcmVkIGhvbGRlcnMgYXJlIGFzc2lnbmVkIGEgbmFtZS4KY2xhc3MgUmVnaXN0cnkgewogIGZpbmFsIE91dHB1dFVuaXQgX21haW5PdXRwdXRVbml0OwogIGZpbmFsIFNvcnRlciBfc29ydGVyOwogIGZpbmFsIE1hcDxTdHJpbmcsIEhvbGRlcj4gX2hvbGRlcnNNYXAgPSA8U3RyaW5nLCBIb2xkZXI+e307CiAgZmluYWwgTWFwPE91dHB1dFVuaXQsIExpYnJhcmllc01hcD4gX2RlZmVycmVkTGlicmFyaWVzTWFwID0KICAgICAgPE91dHB1dFVuaXQsIExpYnJhcmllc01hcD57fTsKCiAgLy8vIENhY2hlIGZvciB0aGUgbGFzdCBzZWVuIG91dHB1dCB1bml0LgogIE91dHB1dFVuaXQgX2xhc3RPdXRwdXRVbml0OwogIExpYnJhcmllc01hcCBfbGFzdExpYnJhcmllc01hcDsKCiAgSXRlcmFibGU8SG9sZGVyPiBnZXQgaG9sZGVycyA9PiBfaG9sZGVyc01hcC52YWx1ZXM7CiAgSXRlcmFibGU8TGlicmFyaWVzTWFwPiBnZXQgZGVmZXJyZWRMaWJyYXJpZXNNYXAgPT4KICAgICAgX2RlZmVycmVkTGlicmFyaWVzTWFwLnZhbHVlczsKCiAgLy8gQWRkIG9uZSBmb3IgdGhlIG1haW4gbGlicmFyaWVzIG1hcC4KICBpbnQgZ2V0IGxpYnJhcmllc01hcENvdW50ID0+IF9kZWZlcnJlZExpYnJhcmllc01hcC5sZW5ndGggKyAxOwoKICBMaWJyYXJpZXNNYXAgbWFpbkxpYnJhcmllc01hcDsKCiAgUmVnaXN0cnkodGhpcy5fbWFpbk91dHB1dFVuaXQsIHRoaXMuX3NvcnRlcik7CgogIExpYnJhcmllc01hcCBfbWFwVW5pdFRvTGlicmFyaWVzTWFwKE91dHB1dFVuaXQgdGFyZ2V0VW5pdCkgewogICAgaWYgKHRhcmdldFVuaXQgPT0gX2xhc3RPdXRwdXRVbml0KSByZXR1cm4gX2xhc3RMaWJyYXJpZXNNYXA7CgogICAgTGlicmFyaWVzTWFwIHJlc3VsdCA9ICh0YXJnZXRVbml0ID09IF9tYWluT3V0cHV0VW5pdCkKICAgICAgICA/IG1haW5MaWJyYXJpZXNNYXAKICAgICAgICA6IF9kZWZlcnJlZExpYnJhcmllc01hcFt0YXJnZXRVbml0XTsKCiAgICBhc3NlcnQocmVzdWx0ICE9IG51bGwpOwogICAgX2xhc3RPdXRwdXRVbml0ID0gdGFyZ2V0VW5pdDsKICAgIF9sYXN0TGlicmFyaWVzTWFwID0gcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgcmVnaXN0ZXJPdXRwdXRVbml0KE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgaWYgKG91dHB1dFVuaXQgPT0gX21haW5PdXRwdXRVbml0KSB7CiAgICAgIGFzc2VydChtYWluTGlicmFyaWVzTWFwID09IG51bGwpOwogICAgICBtYWluTGlicmFyaWVzTWFwID0gbmV3IExpYnJhcmllc01hcC5tYWluKF9tYWluT3V0cHV0VW5pdCk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoIV9kZWZlcnJlZExpYnJhcmllc01hcC5jb250YWluc0tleShvdXRwdXRVbml0KSk7CiAgICAgIFN0cmluZyBuYW1lID0gb3V0cHV0VW5pdC5uYW1lOwogICAgICBfZGVmZXJyZWRMaWJyYXJpZXNNYXBbb3V0cHV0VW5pdF0gPQogICAgICAgICAgbmV3IExpYnJhcmllc01hcC5kZWZlcnJlZChvdXRwdXRVbml0LCBuYW1lKTsKICAgIH0KICB9CgogIC8vLyBBZGRzIGFsbCBlbGVtZW50cyB0byB0aGVpciByZXNwZWN0aXZlIGxpYnJhcmllcyBpbiB0aGUgY29ycmVjdAogIC8vLyBsaWJyYXJpZXMgbWFwLgogIHZvaWQgcmVnaXN0ZXJDbGFzc2VzKE91dHB1dFVuaXQgb3V0cHV0VW5pdCwgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGVsZW1lbnRzKSB7CiAgICBMaWJyYXJpZXNNYXAgdGFyZ2V0TGlicmFyaWVzTWFwID0gX21hcFVuaXRUb0xpYnJhcmllc01hcChvdXRwdXRVbml0KTsKICAgIGZvciAoQ2xhc3NFbnRpdHkgZWxlbWVudCBpbiBfc29ydGVyLnNvcnRDbGFzc2VzKGVsZW1lbnRzKSkgewogICAgICB0YXJnZXRMaWJyYXJpZXNNYXAuYWRkQ2xhc3MoZWxlbWVudC5saWJyYXJ5LCBlbGVtZW50KTsKICAgIH0KICB9CgogIC8vLyBBZGRzIGFsbCBlbGVtZW50cyB0byB0aGVpciByZXNwZWN0aXZlIGxpYnJhcmllcyBpbiB0aGUgY29ycmVjdAogIC8vLyBsaWJyYXJpZXMgbWFwLgogIHZvaWQgcmVnaXN0ZXJNZW1iZXJzKE91dHB1dFVuaXQgb3V0cHV0VW5pdCwgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBlbGVtZW50cykgewogICAgTGlicmFyaWVzTWFwIHRhcmdldExpYnJhcmllc01hcCA9IF9tYXBVbml0VG9MaWJyYXJpZXNNYXAob3V0cHV0VW5pdCk7CiAgICBmb3IgKE1lbWJlckVudGl0eSBlbGVtZW50IGluIF9zb3J0ZXIuc29ydE1lbWJlcnMoZWxlbWVudHMpKSB7CiAgICAgIHRhcmdldExpYnJhcmllc01hcC5hZGRNZW1iZXIoZWxlbWVudC5saWJyYXJ5LCBlbGVtZW50KTsKICAgIH0KICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdGFudChPdXRwdXRVbml0IG91dHB1dFVuaXQsIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSkgewogICAgLy8gSWdub3JlIGZvciBub3cuCiAgfQoKICBIb2xkZXIgcmVnaXN0ZXJIb2xkZXIoU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIGlzU3RhdGljU3RhdGVIb2xkZXI6IGZhbHNlLCBib29sIGlzQ29uc3RhbnRzSG9sZGVyOiBmYWxzZX0pIHsKICAgIGFzc2VydChfaG9sZGVyc01hcFtuYW1lXSA9PSBudWxsIHx8CiAgICAgICAgKF9ob2xkZXJzTWFwW25hbWVdLmlzU3RhdGljU3RhdGVIb2xkZXIgPT0gaXNTdGF0aWNTdGF0ZUhvbGRlciAmJgogICAgICAgICAgICBfaG9sZGVyc01hcFtuYW1lXS5pc0NvbnN0YW50c0hvbGRlciA9PSBpc0NvbnN0YW50c0hvbGRlcikpOwoKICAgIHJldHVybiBfaG9sZGVyc01hcC5wdXRJZkFic2VudChuYW1lLCAoKSB7CiAgICAgIHJldHVybiBuZXcgSG9sZGVyKG5hbWUsIF9ob2xkZXJzTWFwLmxlbmd0aCwKICAgICAgICAgIGlzU3RhdGljU3RhdGVIb2xkZXI6IGlzU3RhdGljU3RhdGVIb2xkZXIsCiAgICAgICAgICBpc0NvbnN0YW50c0hvbGRlcjogaXNDb25zdGFudHNIb2xkZXIpOwogICAgfSk7CiAgfQp9CoCZAE5OPAEsARg1NwIBRwQ0RwQ4FTcqAU4fHiABMBUfATIBNhgEATcjHlEGGQQBPi8EAUAvBAElARA/KUg0CAQCAS0EUCYELBEkGD4+JAErHiIBNjUkASlBASEBMAE/QQE6Gy0BHCIgEwQBMykoQQ0+JSo3BgQBRRVQSkE9BgQBRRVRSkI+BgQBThcEASVKKElIAS4yNDEIBAIBPXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvcHJvZ3JhbV9idWlsZGVyL3JlZ2lzdHJ5LmRhcnRFc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9zdGFydHVwX2VtaXR0ZXIvZW1pdHRlci5kYXJ0nXMvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuc3RhcnR1cF9lbWl0dGVyOwoKaW1wb3J0ICcuLi8uLi8uLi9jb21waWxlcl9uZXcuZGFydCc7CmltcG9ydCAnLi4vLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uLy4uL2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uLy4uL2NvbW1vbi90YXNrcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0OwppbXBvcnQgJy4uLy4uL2R1bXBfaW5mby5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9jb25zdGFudF9lbWl0dGVyLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCc7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19uZXcuZGFydCcgc2hvdyBSZWNpcGVFbmNvZGVyOwppbXBvcnQgJy4uLy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnIHNob3cgQ29kZWdlbldvcmxkOwppbXBvcnQgJy4uLy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIuZGFydCcgc2hvdyBFbWl0dGVyLCBNb2R1bGFyRW1pdHRlcjsKaW1wb3J0ICcuLi9tb2RlbC5kYXJ0JzsKaW1wb3J0ICcuLi9wcm9ncmFtX2J1aWxkZXIvcHJvZ3JhbV9idWlsZGVyLmRhcnQnIHNob3cgUHJvZ3JhbUJ1aWxkZXI7CmltcG9ydCAnbW9kZWxfZW1pdHRlci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIE1vZHVsYXJFbWl0dGVyQmFzZSBpbXBsZW1lbnRzIE1vZHVsYXJFbWl0dGVyIHsKICBmaW5hbCBNb2R1bGFyTmFtZXIgX25hbWVyOwoKICBNb2R1bGFyRW1pdHRlckJhc2UodGhpcy5fbmFtZXIpOwoKICBqcy5Qcm9wZXJ0eUFjY2VzcyBnbG9iYWxQcm9wZXJ0eUFjY2Vzc0ZvckNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzcyhlbGVtZW50KTsKICAgIGpzLlByb3BlcnR5QWNjZXNzIHBhID0KICAgICAgICBuZXcganMuUHJvcGVydHlBY2Nlc3MoX25hbWVyLnJlYWRHbG9iYWxPYmplY3RGb3JDbGFzcyhlbGVtZW50KSwgbmFtZSk7CiAgICByZXR1cm4gcGE7CiAgfQoKICBqcy5Qcm9wZXJ0eUFjY2VzcyBnbG9iYWxQcm9wZXJ0eUFjY2Vzc0ZvclR5cGUoRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlKGVsZW1lbnQpOwogICAganMuUHJvcGVydHlBY2Nlc3MgcGEgPQogICAgICAgIG5ldyBqcy5Qcm9wZXJ0eUFjY2VzcyhfbmFtZXIucmVhZEdsb2JhbE9iamVjdEZvclR5cGUoZWxlbWVudCksIG5hbWUpOwogICAgcmV0dXJuIHBhOwogIH0KCiAganMuUHJvcGVydHlBY2Nlc3MgZ2xvYmFsUHJvcGVydHlBY2Nlc3NGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXIoZWxlbWVudCk7CiAgICBqcy5Qcm9wZXJ0eUFjY2VzcyBwYSA9CiAgICAgICAgbmV3IGpzLlByb3BlcnR5QWNjZXNzKF9uYW1lci5yZWFkR2xvYmFsT2JqZWN0Rm9yTWVtYmVyKGVsZW1lbnQpLCBuYW1lKTsKICAgIHJldHVybiBwYTsKICB9CgogIEBvdmVycmlkZQogIGpzLlByb3BlcnR5QWNjZXNzIGNvbnN0cnVjdG9yQWNjZXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBnbG9iYWxQcm9wZXJ0eUFjY2Vzc0ZvckNsYXNzKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiBpc29sYXRlTGF6eUluaXRpYWxpemVyQWNjZXNzKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcganMuUHJvcGVydHlBY2Nlc3MoX25hbWVyLnJlYWRHbG9iYWxPYmplY3RGb3JNZW1iZXIoZWxlbWVudCksCiAgICAgICAgX25hbWVyLmxhenlJbml0aWFsaXplck5hbWUoZWxlbWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuUHJvcGVydHlBY2Nlc3Mgc3RhdGljRnVuY3Rpb25BY2Nlc3MoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGdsb2JhbFByb3BlcnR5QWNjZXNzRm9yTWVtYmVyKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuUHJvcGVydHlBY2Nlc3Mgc3RhdGljRmllbGRBY2Nlc3MoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGdsb2JhbFByb3BlcnR5QWNjZXNzRm9yTWVtYmVyKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuUHJvcGVydHlBY2Nlc3MgcHJvdG90eXBlQWNjZXNzKENsYXNzRW50aXR5IGVsZW1lbnQsCiAgICAgIHtib29sIGhhc0JlZW5JbnN0YW50aWF0ZWR9KSB7CiAgICBqcy5FeHByZXNzaW9uIGNvbnN0cnVjdG9yID0KICAgICAgICBoYXNCZWVuSW5zdGFudGlhdGVkID8gY29uc3RydWN0b3JBY2Nlc3MoZWxlbWVudCkgOiB0eXBlQWNjZXNzKGVsZW1lbnQpOwogICAgcmV0dXJuIGpzLmpzKCcjLnByb3RvdHlwZScsIGNvbnN0cnVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdHlwZUFjY2VzcyhFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGdsb2JhbFByb3BlcnR5QWNjZXNzRm9yVHlwZShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzLk5hbWUgdHlwZUFjY2Vzc05ld1J0aShFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9uYW1lci5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuTmFtZSB0eXBlVmFyaWFibGVBY2Nlc3NOZXdSdGkoVHlwZVZhcmlhYmxlRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfbmFtZXIuZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gc3RhdGljQ2xvc3VyZUFjY2VzcyhGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IGpzLkNhbGwoCiAgICAgICAgbmV3IGpzLlByb3BlcnR5QWNjZXNzKF9uYW1lci5yZWFkR2xvYmFsT2JqZWN0Rm9yTWVtYmVyKGVsZW1lbnQpLAogICAgICAgICAgICBfbmFtZXIuc3RhdGljQ2xvc3VyZU5hbWUoZWxlbWVudCkpLAogICAgICAgIGNvbnN0IFtdKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzU3RyaW5nKFN0cmluZyBnbG9iYWwpIHsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBkb24ndCB1c2UgJ2luaXQnIGFzIGdsb2JhbCBlbWJlZGRlciBzdG9yYWdlLgogICAgcmV0dXJuICdpbml0LiRnbG9iYWwnOwogIH0KfQoKY2xhc3MgTW9kdWxhckVtaXR0ZXJJbXBsIGV4dGVuZHMgTW9kdWxhckVtaXR0ZXJCYXNlIHsKICBmaW5hbCBDb2RlZ2VuUmVnaXN0cnkgX3JlZ2lzdHJ5OwogIGZpbmFsIE1vZHVsYXJDb25zdGFudEVtaXR0ZXIgX2NvbnN0YW50RW1pdHRlcjsKCiAgTW9kdWxhckVtaXR0ZXJJbXBsKAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsIHRoaXMuX3JlZ2lzdHJ5LCBDb21waWxlck9wdGlvbnMgb3B0aW9ucykKICAgICAgOiBfY29uc3RhbnRFbWl0dGVyID0gbmV3IE1vZHVsYXJDb25zdGFudEVtaXR0ZXIob3B0aW9ucyksCiAgICAgICAgc3VwZXIobmFtZXIpOwoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIGNvbnN0YW50UmVmZXJlbmNlKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIGlmIChjb25zdGFudC5pc0Z1bmN0aW9uKSB7CiAgICAgIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBmdW5jdGlvbiA9IGNvbnN0YW50OwogICAgICByZXR1cm4gc3RhdGljQ2xvc3VyZUFjY2VzcyhmdW5jdGlvbi5lbGVtZW50KTsKICAgIH0KICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IF9jb25zdGFudEVtaXR0ZXIuZ2VuZXJhdGUoY29uc3RhbnQpOwogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gZXhwcmVzc2lvbjsKICAgIH0KICAgIGV4cHJlc3Npb24gPQogICAgICAgIG5ldyBNb2R1bGFyRXhwcmVzc2lvbihNb2R1bGFyRXhwcmVzc2lvbktpbmQuY29uc3RhbnQsIGNvbnN0YW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJFeHByZXNzaW9uKGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoU3RyaW5nIGdsb2JhbCkgewogICAganMuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gbmV3IE1vZHVsYXJFeHByZXNzaW9uKAogICAgICAgIE1vZHVsYXJFeHByZXNzaW9uS2luZC5lbWJlZGRlZEdsb2JhbEFjY2VzcywgZ2xvYmFsKTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJFeHByZXNzaW9uKGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQp9CgpjbGFzcyBFbWl0dGVySW1wbCBleHRlbmRzIE1vZHVsYXJFbWl0dGVyQmFzZSBpbXBsZW1lbnRzIEVtaXR0ZXIgewogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIF9ydGlFbmNvZGVyOwogIGZpbmFsIFJlY2lwZUVuY29kZXIgX3J0aVJlY2lwZUVuY29kZXI7CiAgZmluYWwgQ29tcGlsZXJUYXNrIF90YXNrOwogIE1vZGVsRW1pdHRlciBfZW1pdHRlcjsKCiAgQG92ZXJyaWRlCiAgUHJvZ3JhbSBwcm9ncmFtRm9yVGVzdGluZzsKCiAgRW1pdHRlckltcGwoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICB0aGlzLl9yZXBvcnRlciwKICAgICAgQ29tcGlsZXJPdXRwdXQgb3V0cHV0UHJvdmlkZXIsCiAgICAgIER1bXBJbmZvVGFzayBkdW1wSW5mb1Rhc2ssCiAgICAgIE5hbWVyIG5hbWVyLAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fcnRpRW5jb2RlciwKICAgICAgdGhpcy5fcnRpUmVjaXBlRW5jb2RlciwKICAgICAgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LAogICAgICB0aGlzLl90YXNrLAogICAgICBib29sIHNob3VsZEdlbmVyYXRlU291cmNlTWFwKQogICAgICA6IHN1cGVyKG5hbWVyKSB7CiAgICBfZW1pdHRlciA9IG5ldyBNb2RlbEVtaXR0ZXIoCiAgICAgICAgb3B0aW9ucywKICAgICAgICBfcmVwb3J0ZXIsCiAgICAgICAgb3V0cHV0UHJvdmlkZXIsCiAgICAgICAgZHVtcEluZm9UYXNrLAogICAgICAgIG5hbWVyLAogICAgICAgIF9jbG9zZWRXb3JsZCwKICAgICAgICBfdGFzaywKICAgICAgICB0aGlzLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgICAgX3J0aUVuY29kZXIsCiAgICAgICAgX3J0aVJlY2lwZUVuY29kZXIsCiAgICAgICAgc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgTmFtZXIgZ2V0IF9uYW1lciA9PiBzdXBlci5fbmFtZXI7CgogIEBvdmVycmlkZQogIGludCBlbWl0UHJvZ3JhbShQcm9ncmFtQnVpbGRlciBwcm9ncmFtQnVpbGRlciwgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCkgewogICAgUHJvZ3JhbSBwcm9ncmFtID0gX3Rhc2subWVhc3VyZVN1YnRhc2soJ2J1aWxkIHByb2dyYW0nLCAoKSB7CiAgICAgIHJldHVybiBwcm9ncmFtQnVpbGRlci5idWlsZFByb2dyYW0oKTsKICAgIH0pOwogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgIHByb2dyYW1Gb3JUZXN0aW5nID0gcHJvZ3JhbTsKICAgIH0KICAgIHJldHVybiBfdGFzay5tZWFzdXJlU3VidGFzaygnZW1pdCBwcm9ncmFtJywgKCkgewogICAgICByZXR1cm4gX2VtaXR0ZXIuZW1pdFByb2dyYW0ocHJvZ3JhbSwgY29kZWdlbldvcmxkKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiBpbnRlcmNlcHRvckNsYXNzQWNjZXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBnbG9iYWxQcm9wZXJ0eUFjY2Vzc0ZvckNsYXNzKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50SW5saW5lZE9yQWxyZWFkeUVtaXR0ZWQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgcmV0dXJuIF9lbWl0dGVyLmlzQ29uc3RhbnRJbmxpbmVkT3JBbHJlYWR5RW1pdHRlZChjb25zdGFudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZUNvbnN0YW50cyhDb25zdGFudFZhbHVlIGEsIENvbnN0YW50VmFsdWUgYikgewogICAgcmV0dXJuIF9lbWl0dGVyLmNvbXBhcmVDb25zdGFudHMoYSwgYik7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIGNvbnN0YW50UmVmZXJlbmNlKENvbnN0YW50VmFsdWUgdmFsdWUpIHsKICAgIHJldHVybiBfZW1pdHRlci5nZW5lcmF0ZUNvbnN0YW50UmVmZXJlbmNlKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhTdHJpbmcgZ2xvYmFsKSB7CiAgICByZXR1cm4ganMuanMoZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2Vzc1N0cmluZyhnbG9iYWwpKTsKICB9CgogIEBvdmVycmlkZQogIC8vIFRPRE8oaGVyaHV0KTogVXNlIGEgc2luZ2xlIHNoYXJlZCBmdW5jdGlvbi4KICBqcy5FeHByZXNzaW9uIGdlbmVyYXRlRnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7CiAgICByZXR1cm4ganMuanMoJ2Z1bmN0aW9uKCkge30nKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gaW50ZXJjZXB0b3JQcm90b3R5cGVBY2Nlc3MoQ2xhc3NFbnRpdHkgZSkgewogICAgcmV0dXJuIGpzLmpzKCcjLnByb3RvdHlwZScsIGludGVyY2VwdG9yQ2xhc3NBY2Nlc3MoZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdlbmVyYXRlZFNpemUoT3V0cHV0VW5pdCB1bml0KSB7CiAgICBpZiAoX2VtaXR0ZXIub21pdHRlZEZyYWdtZW50cy5hbnkoKGYpID0+IGYub3V0cHV0VW5pdCA9PSB1bml0KSkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIEZyYWdtZW50IGtleSA9IF9lbWl0dGVyLm91dHB1dEJ1ZmZlcnMua2V5cwogICAgICAgIC5maXJzdFdoZXJlKChGcmFnbWVudCBmcmFnbWVudCkgPT4gZnJhZ21lbnQub3V0cHV0VW5pdCA9PSB1bml0KTsKICAgIHJldHVybiBfZW1pdHRlci5vdXRwdXRCdWZmZXJzW2tleV0ubGVuZ3RoOwogIH0KfQqA+gBOTjwBLAElHCQiJjMfJyshMSYuRR1GLToYRh0BPh0BIwFIPxtPDwQBQj4bTg8EAUpAG1APBAEMPTIEAQxETC4EAQxDMwQBDD0zBAEMOSQgUC4EAQwtMQQBDC02BAEMQT8EAQw+GEkwEwQBDD1EGwQCATYjMQEWQ0AWAQw8HzE0BkQeGQYRSTUXBAEMPjY9NRcEAgFCJiMpKRwZAQwdAQ8fFiUhExkYHjsSJBchERMYFg8WDw4jFRsiBAEMJAEMTkEsCCAjBjU6CAQBDD4yBAEMQ0EEAQw7LAQBDDk2BAEMPj4EAQwxNCMEAQw8PAQBDCdGEAYvSS8EAgE8cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9zdGFydHVwX2VtaXR0ZXIvZW1pdHRlci5kYXJ0QHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvbWV0YWRhdGFfY29sbGVjdG9yLmRhcnSiTi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5tZXRhZGF0YV9jb2xsZWN0b3I7CgppbXBvcnQgJ3BhY2thZ2U6anNfYXN0L3NyYy9wcmVjZWRlbmNlLmRhcnQnIGFzIGpzX3ByZWNlZGVuY2U7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBKRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JyBzaG93IE91dHB1dFVuaXQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCcgc2hvdyBGdW5jdGlvbkVudGl0eTsKCmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydCcgc2hvdyBSdW50aW1lVHlwZXNFbmNvZGVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19uZXcuZGFydCcgc2hvdyBSZWNpcGVFbmNvZGVyOwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnIHNob3cgVHlwZUV4cHJlc3Npb25SZWNpcGU7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKCmltcG9ydCAnY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBFbWl0dGVyOwoKLy8vIFJlcHJlc2VudHMgYW4gZW50cnkncyBwb3NpdGlvbiBpbiBvbmUgb2YgdGhlIGdsb2JhbCBtZXRhZGF0YSBhcnJheXMuCi8vLwovLy8gW19yY10gaXMgdXNlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMgb2YgdGhlIHRva2VuIGluIHRoZQovLy8gYXN0IGZvciBhIHByb2dyYW0uCi8vLyBbdmFsdWVdIGlzIHRoZSBhY3R1YWwgcG9zaXRpb24sIG9uY2UgdGhleSBoYXZlIGJlZW4gZmluYWxpemVkLgphYnN0cmFjdCBjbGFzcyBfTWV0YWRhdGFFbnRyeSBleHRlbmRzIGpzQXN0LkRlZmVycmVkTnVtYmVyCiAgICBpbXBsZW1lbnRzIENvbXBhcmFibGUsIGpzQXN0LlJlZmVyZW5jZUNvdW50ZWRBc3ROb2RlIHsKICBqc0FzdC5FeHByZXNzaW9uIGdldCBlbnRyeTsKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHZhbHVlOwogIGludCBnZXQgX3JjOwoKICAvLyBNYXJrIHRoaXMgZW50cnkgYXMgc2Vlbi4gT24gdGhlIGZpcnN0IHRpbWUgdGhpcyBpcyBzZWVuLCB0aGUgdmlzaXRvcgogIC8vIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgW2VudHJ5XSB0byBhbHNvIG1hcmsgcG90ZW50aWFsIFtfTWV0YWRhdGFFbnRyeV0KICAvLyBpbnN0YW5jZXMgaW4gdGhlIFtlbnRyeV0gYXMgc2Vlbi4KICBAb3ZlcnJpZGUKICB2b2lkIG1hcmtTZWVuKGpzQXN0LlRva2VuQ291bnRlciB2aXNpdG9yKTsKfQoKY2xhc3MgX0JvdW5kTWV0YWRhdGFFbnRyeSBleHRlbmRzIF9NZXRhZGF0YUVudHJ5IHsKICBpbnQgX3ZhbHVlID0gLTE7CiAgQG92ZXJyaWRlCiAgaW50IF9yYyA9IDA7CiAgQG92ZXJyaWRlCiAgZmluYWwganNBc3QuRXhwcmVzc2lvbiBlbnRyeTsKCiAgX0JvdW5kTWV0YWRhdGFFbnRyeSh0aGlzLmVudHJ5KTsKCiAgYm9vbCBnZXQgaXNGaW5hbGl6ZWQgPT4gX3ZhbHVlICE9IC0xOwoKICBmaW5hbGl6ZShpbnQgdmFsdWUpIHsKICAgIGFzc2VydCghaXNGaW5hbGl6ZWQpOwogICAgX3ZhbHVlID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHZhbHVlIHsKICAgIGFzc2VydChpc0ZpbmFsaXplZCk7CiAgICByZXR1cm4gX3ZhbHVlOwogIH0KCiAgYm9vbCBnZXQgaXNVc2VkID0+IF9yYyA+IDA7CgogIEBvdmVycmlkZQogIHZvaWQgbWFya1NlZW4oanNBc3QuQmFzZVZpc2l0b3IgdmlzaXRvcikgewogICAgX3JjKys7CiAgICBpZiAoX3JjID09IDEpIGVudHJ5LmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlVG8oY292YXJpYW50IF9NZXRhZGF0YUVudHJ5IG90aGVyKSA9PiBvdGhlci5fcmMgLSB0aGlzLl9yYzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ19Cb3VuZE1ldGFkYXRhRW50cnkoJGhhc2hDb2RlLHJjPSRfcmMsX3ZhbHVlPSRfdmFsdWUpJzsKfQoKY2xhc3MgX01ldGFkYXRhTGlzdCBleHRlbmRzIGpzQXN0LkRlZmVycmVkRXhwcmVzc2lvbiB7CiAganNBc3QuRXhwcmVzc2lvbiBfdmFsdWU7CgogIHZvaWQgc2V0RXhwcmVzc2lvbihqc0FzdC5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICBhc3NlcnQoX3ZhbHVlID09IG51bGwpOwogICAgYXNzZXJ0KHZhbHVlLnByZWNlZGVuY2VMZXZlbCA9PSB0aGlzLnByZWNlZGVuY2VMZXZlbCk7CiAgICBfdmFsdWUgPSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gZ2V0IHZhbHVlIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCk7CiAgICByZXR1cm4gX3ZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4ganNfcHJlY2VkZW5jZS5QUklNQVJZOwp9CgpjbGFzcyBNZXRhZGF0YUNvbGxlY3RvciBpbXBsZW1lbnRzIGpzQXN0LlRva2VuRmluYWxpemVyIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyOwogIGZpbmFsIEVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgUnVudGltZVR5cGVzRW5jb2RlciBfcnRpRW5jb2RlcjsKICBmaW5hbCBSZWNpcGVFbmNvZGVyIF9ydGlSZWNpcGVFbmNvZGVyOwogIGZpbmFsIEpFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKCiAgLy8vIEEgbWFwIHdpdGggYSB0b2tlbiBwZXIgb3V0cHV0IHVuaXQgZm9yIGEgbGlzdCBvZiBleHByZXNzaW9ucyB0aGF0CiAgLy8vIHJlcHJlc2VudCBtZXRhZGF0YSwgcGFyYW1ldGVyIG5hbWVzIGFuZCB0eXBlIHZhcmlhYmxlIHR5cGVzLgogIE1hcDxPdXRwdXRVbml0LCBfTWV0YWRhdGFMaXN0PiBfbWV0YWRhdGFUb2tlbnMgPQogICAgICBuZXcgTWFwPE91dHB1dFVuaXQsIF9NZXRhZGF0YUxpc3Q+KCk7CgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0TWV0YWRhdGFGb3JPdXRwdXRVbml0KE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgcmV0dXJuIF9tZXRhZGF0YVRva2Vucy5wdXRJZkFic2VudChvdXRwdXRVbml0LCAoKSA9PiBuZXcgX01ldGFkYXRhTGlzdCgpKTsKICB9CgogIC8vLyBBIG1hcCB1c2VkIHRvIGNhbm9uaWNhbGl6ZSB0aGUgZW50cmllcyBvZiBtZXRhZGF0YS4KICBNYXA8T3V0cHV0VW5pdCwgTWFwPFN0cmluZywgX0JvdW5kTWV0YWRhdGFFbnRyeT4+IF9tZXRhZGF0YU1hcCA9CiAgICAgIDxPdXRwdXRVbml0LCBNYXA8U3RyaW5nLCBfQm91bmRNZXRhZGF0YUVudHJ5Pj57fTsKCiAgLy8vIEEgbWFwIHdpdGggYSB0b2tlbiBmb3IgYSBsaXN0cyBvZiBKUyBleHByZXNzaW9ucywgb25lIHRva2VuIGZvciBlYWNoCiAgLy8vIG91dHB1dCB1bml0LiBPbmNlIGZpbmFsaXplZCwgdGhlIGVudHJpZXMgcmVwcmVzZW50IHR5cGVzIGluY2x1ZGluZwogIC8vLyBmdW5jdGlvbiB0eXBlcyBhbmQgdHlwZWRlZnMuCiAgTWFwPE91dHB1dFVuaXQsIF9NZXRhZGF0YUxpc3Q+IF90eXBlc1Rva2VucyA9CiAgICAgIG5ldyBNYXA8T3V0cHV0VW5pdCwgX01ldGFkYXRhTGlzdD4oKTsKCiAganNBc3QuRXhwcmVzc2lvbiBnZXRUeXBlc0Zvck91dHB1dFVuaXQoT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICByZXR1cm4gX3R5cGVzVG9rZW5zLnB1dElmQWJzZW50KG91dHB1dFVuaXQsICgpID0+IG5ldyBfTWV0YWRhdGFMaXN0KCkpOwogIH0KCiAgLy8vIEEgbWFwIHVzZWQgdG8gY2Fub25pY2FsaXplIHRoZSBlbnRyaWVzIG9mIHR5cGVzLgogIE1hcDxPdXRwdXRVbml0LCBNYXA8RGFydFR5cGUsIF9Cb3VuZE1ldGFkYXRhRW50cnk+PiBfdHlwZXNNYXAgPQogICAgICA8T3V0cHV0VW5pdCwgTWFwPERhcnRUeXBlLCBfQm91bmRNZXRhZGF0YUVudHJ5Pj57fTsKCiAgTWV0YWRhdGFDb2xsZWN0b3IodGhpcy5fb3B0aW9ucywgdGhpcy5yZXBvcnRlciwgdGhpcy5fZW1pdHRlciwKICAgICAgdGhpcy5fcnRpRW5jb2RlciwgdGhpcy5fcnRpUmVjaXBlRW5jb2RlciwgdGhpcy5fZWxlbWVudEVudmlyb25tZW50KTsKCiAgTGlzdDxqc0FzdC5EZWZlcnJlZE51bWJlcj4gcmVpZnlEZWZhdWx0QXJndW1lbnRzKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICAvLyBUT0RPKHNyYSk6IFRoZXNlIGFyZSBzdG9yZWQgb24gdGhlIEluc3RhbmNlTWV0aG9kIG9yIFN0YXRpY0RhcnRNZXRob2QuCiAgICBMaXN0PGpzQXN0LkRlZmVycmVkTnVtYmVyPiBkZWZhdWx0VmFsdWVzID0gPGpzQXN0LkRlZmVycmVkTnVtYmVyPltdOwogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoUGFyYW1ldGVyKGZ1bmN0aW9uLAogICAgICAgIChfLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCkgcmV0dXJuOwogICAgICBqc0FzdC5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSBfZW1pdHRlci5jb25zdGFudFJlZmVyZW5jZShjb25zdGFudCk7CiAgICAgIGRlZmF1bHRWYWx1ZXMuYWRkKF9hZGRHbG9iYWxNZXRhZGF0YShleHByZXNzaW9uLCBvdXRwdXRVbml0KSk7CiAgICB9KTsKICAgIHJldHVybiBkZWZhdWx0VmFsdWVzOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiByZWlmeVR5cGUoRGFydFR5cGUgdHlwZSwgT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICByZXR1cm4gYWRkVHlwZUluT3V0cHV0VW5pdCh0eXBlLCBvdXRwdXRVbml0KTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gcmVpZnlOYW1lKFN0cmluZyBuYW1lLCBPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgIHJldHVybiBfYWRkR2xvYmFsTWV0YWRhdGEoanMuc3RyaW5nKG5hbWUpLCBvdXRwdXRVbml0KTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gcmVpZnlFeHByZXNzaW9uKAogICAgICBqc0FzdC5FeHByZXNzaW9uIGV4cHJlc3Npb24sIE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgcmV0dXJuIF9hZGRHbG9iYWxNZXRhZGF0YShleHByZXNzaW9uLCBvdXRwdXRVbml0KTsKICB9CgogIF9NZXRhZGF0YUVudHJ5IF9hZGRHbG9iYWxNZXRhZGF0YShqc0FzdC5Ob2RlIG5vZGUsIE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgU3RyaW5nIG5hbWVUb0tleShqc0FzdC5OYW1lIG5hbWUpID0+ICIke25hbWUua2V5fSI7CiAgICBTdHJpbmcgcHJpbnRlZCA9IGpzQXN0LnByZXR0eVByaW50KG5vZGUsCiAgICAgICAgZW5hYmxlTWluaWZpY2F0aW9uOiBfb3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24sCiAgICAgICAgcmVuYW1lckZvck5hbWVzOiBuYW1lVG9LZXkpOwogICAgX21ldGFkYXRhTWFwW291dHB1dFVuaXRdID8/PSBuZXcgTWFwPFN0cmluZywgX0JvdW5kTWV0YWRhdGFFbnRyeT4oKTsKICAgIHJldHVybiBfbWV0YWRhdGFNYXBbb3V0cHV0VW5pdF0ucHV0SWZBYnNlbnQocHJpbnRlZCwgKCkgewogICAgICByZXR1cm4gbmV3IF9Cb3VuZE1ldGFkYXRhRW50cnkobm9kZSk7CiAgICB9KTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gX2NvbXB1dGVUeXBlUmVwcmVzZW50YXRpb24oRGFydFR5cGUgdHlwZSkgewogICAganNBc3QuRXhwcmVzc2lvbiByZXByZXNlbnRhdGlvbiA9CiAgICAgICAgX3J0aUVuY29kZXIuZ2V0VHlwZVJlcHJlc2VudGF0aW9uKF9lbWl0dGVyLCB0eXBlLCAodmFyaWFibGUpIHsKICAgICAgZmFpbGVkQXQoCiAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAiVHlwZSByZXByZXNlbnRhdGlvbiBmb3IgdHlwZSB2YXJpYWJsZSAkdmFyaWFibGUgaW4gIgogICAgICAgICAgIiR0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgICAgIHJldHVybiBqc0FzdC5MaXRlcmFsTnVsbCgpOwogICAgfSwgKFR5cGVkZWZUeXBlIHR5cGVkZWYpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgaWYgKHJlcHJlc2VudGF0aW9uIGlzIGpzQXN0LkxpdGVyYWxTdHJpbmcpIHsKICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgcmVwcmVzZW50YXRpb24gdG8gYmUgYSBzdHJpbmcsIHNpbmNlIHdlIHVzZQogICAgICAvLyBzdHJpbmdzIGFzIGluZGljYXRvciBmb3Igbm9uLWluaXRpYWxpemVkIHR5cGVzIGluIHRoZSBsYXp5IGVtaXR0ZXIuCiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICdyZWlmaWVkIHR5cGVzIHNob3VsZCBub3QgYmUgc3RyaW5ncy4nKTsKICAgIH0KCiAgICByZXR1cm4gcmVwcmVzZW50YXRpb247CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIF9jb21wdXRlVHlwZVJlcHJlc2VudGF0aW9uTmV3UnRpKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBfcnRpUmVjaXBlRW5jb2Rlci5lbmNvZGVHcm91bmRSZWNpcGUoCiAgICAgICAgX2VtaXR0ZXIsIFR5cGVFeHByZXNzaW9uUmVjaXBlKHR5cGUpKTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gYWRkVHlwZUluT3V0cHV0VW5pdChEYXJ0VHlwZSB0eXBlLCBPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgIF90eXBlc01hcFtvdXRwdXRVbml0XSA/Pz0gbmV3IE1hcDxEYXJ0VHlwZSwgX0JvdW5kTWV0YWRhdGFFbnRyeT4oKTsKICAgIHJldHVybiBfdHlwZXNNYXBbb3V0cHV0VW5pdF0ucHV0SWZBYnNlbnQodHlwZSwgKCkgewogICAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgIHJldHVybiBuZXcgX0JvdW5kTWV0YWRhdGFFbnRyeShfY29tcHV0ZVR5cGVSZXByZXNlbnRhdGlvbk5ld1J0aSh0eXBlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBfQm91bmRNZXRhZGF0YUVudHJ5KF9jb21wdXRlVHlwZVJlcHJlc2VudGF0aW9uKHR5cGUpKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZpbmFsaXplVG9rZW5zKCkgewogICAgdm9pZCBjb3VudFRva2Vuc0luVHlwZXMoSXRlcmFibGU8X0JvdW5kTWV0YWRhdGFFbnRyeT4gZW50cmllcykgewogICAgICBqc0FzdC5Ub2tlbkNvdW50ZXIgY291bnRlciA9IG5ldyBqc0FzdC5Ub2tlbkNvdW50ZXIoKTsKICAgICAgZW50cmllcwogICAgICAgICAgLndoZXJlKChfQm91bmRNZXRhZGF0YUVudHJ5IGUpID0+IGUuX3JjID4gMCkKICAgICAgICAgIC5tYXAoKF9Cb3VuZE1ldGFkYXRhRW50cnkgZSkgPT4gZS5lbnRyeSkKICAgICAgICAgIC5mb3JFYWNoKGNvdW50ZXIuY291bnRUb2tlbnMpOwogICAgfQoKICAgIGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIgZmluYWxpemVNYXAoTWFwPGR5bmFtaWMsIF9Cb3VuZE1ldGFkYXRhRW50cnk+IG1hcCkgewogICAgICBib29sIGlzVXNlZChfQm91bmRNZXRhZGF0YUVudHJ5IGVudHJ5KSA9PiBlbnRyeS5pc1VzZWQ7CiAgICAgIExpc3Q8X0JvdW5kTWV0YWRhdGFFbnRyeT4gZW50cmllcyA9IG1hcC52YWx1ZXMud2hlcmUoaXNVc2VkKS50b0xpc3QoKTsKICAgICAgZW50cmllcy5zb3J0KCk7CgogICAgICAvLyBUT0RPKGhlcmh1dCk6IEJ1Y2tldCBlbnRyaWVzIGJ5IGluZGV4IGxlbmd0aCBhbmQgdXNlIGEgc3RhYmxlCiAgICAgIC8vICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIHdpdGhpbiBidWNrZXRzLgogICAgICBpbnQgY291bnQgPSAwOwogICAgICBmb3IgKF9Cb3VuZE1ldGFkYXRhRW50cnkgZW50cnkgaW4gZW50cmllcykgewogICAgICAgIGVudHJ5LmZpbmFsaXplKGNvdW50KyspOwogICAgICB9CgogICAgICBMaXN0PGpzQXN0Lk5vZGU+IHZhbHVlcyA9CiAgICAgICAgICBlbnRyaWVzLm1hcCgoX0JvdW5kTWV0YWRhdGFFbnRyeSBlKSA9PiBlLmVudHJ5KS50b0xpc3QoKTsKCiAgICAgIHJldHVybiBuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcih2YWx1ZXMpOwogICAgfQoKICAgIF9tZXRhZGF0YVRva2Vucy5mb3JFYWNoKChPdXRwdXRVbml0IG91dHB1dFVuaXQsIF9NZXRhZGF0YUxpc3QgdG9rZW4pIHsKICAgICAgTWFwIG1ldGFkYXRhTWFwID0gX21ldGFkYXRhTWFwW291dHB1dFVuaXRdOwogICAgICBpZiAobWV0YWRhdGFNYXAgIT0gbnVsbCkgewogICAgICAgIHRva2VuLnNldEV4cHJlc3Npb24oZmluYWxpemVNYXAobWV0YWRhdGFNYXApKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0b2tlbi5zZXRFeHByZXNzaW9uKG5ldyBqc0FzdC5BcnJheUluaXRpYWxpemVyKFtdKSk7CiAgICAgIH0KICAgIH0pOwoKICAgIF90eXBlc1Rva2Vucy5mb3JFYWNoKChPdXRwdXRVbml0IG91dHB1dFVuaXQsIF9NZXRhZGF0YUxpc3QgdG9rZW4pIHsKICAgICAgTWFwIHR5cGVzTWFwID0gX3R5cGVzTWFwW291dHB1dFVuaXRdOwogICAgICBpZiAodHlwZXNNYXAgIT0gbnVsbCkgewogICAgICAgIGNvdW50VG9rZW5zSW5UeXBlcyh0eXBlc01hcC52YWx1ZXMpOwogICAgICAgIHRva2VuLnNldEV4cHJlc3Npb24oZmluYWxpemVNYXAodHlwZXNNYXApKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0b2tlbi5zZXRFeHByZXNzaW9uKG5ldyBqc0FzdC5BcnJheUluaXRpYWxpemVyKFtdKSk7CiAgICAgIH0KICAgIH0pOwogIH0KfQqBBwBOTjwBLwE+ARk7IzA4ASQhISBEQkEaAS4BSQRIF0M7Ox4MEQ8BSkwnDC0CATMTDA8MIAEjASgBGBoUBAEMEhkTBAEeAQwtCykEAQxJAQxQAgE3GwEvHDsUBAEMHxwTBAEMNAIBOiIlGikpMQFIQzMsAUVPBAE6QzgBS0kjMCwBQkwEATdCOgFBSwE0OE5JMzMkSkUIGgQBRTIEAUM8BAEkPDcEAU44LTklST4sCAQBPyZHECFAJiIfFAgBMUdNHkoGARsEAUUxLwQBT0g4J1APSggIBAEMGkU9DjczKQYBUD5NFgFHNBUzIQgBIEQBMQYBSzIhNw89CAgBSCweLTQPPQgIBAIBN3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbWV0YWRhdGFfY29sbGVjdG9yLmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9tb2RlbC5kYXJ0wABRAy8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMubmV3X2pzX2VtaXR0ZXIubW9kZWw7CgppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCcgc2hvdyBDb25zdGFudFZhbHVlOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzIHNob3cgRXhwcmVzc2lvbiwgTmFtZSwgU3RhdGVtZW50LCBUb2tlbkZpbmFsaXplcjsKaW1wb3J0ICcuLi9qcy9qc19kZWJ1Zy5kYXJ0JyBhcyBqcyBzaG93IG5vZGVUb1N0cmluZzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICdqc19lbWl0dGVyLmRhcnQnIHNob3cgTWV0YWRhdGFDb2xsZWN0b3I7CgpjbGFzcyBQcm9ncmFtIHsKICBmaW5hbCBMaXN0PEZyYWdtZW50PiBmcmFnbWVudHM7CiAgZmluYWwgTGlzdDxIb2xkZXI+IGhvbGRlcnM7CiAgZmluYWwgYm9vbCBvdXRwdXRDb250YWluc0NvbnN0YW50TGlzdDsKICBmaW5hbCBib29sIG5lZWRzTmF0aXZlU3VwcG9ydDsKICBmaW5hbCBib29sIGhhc1NvZnREZWZlcnJlZENsYXNzZXM7CgogIC8vLyBBIG1hcCBmcm9tIGxvYWQgaWQgdG8gdGhlIGxpc3Qgb2YgZnJhZ21lbnRzIHRoYXQgbmVlZCB0byBiZSBsb2FkZWQuCiAgZmluYWwgTWFwPFN0cmluZywgTGlzdDxGcmFnbWVudD4+IGxvYWRNYXA7CgogIC8vIElmIHRoaXMgZmllbGQgaXMgbm90IGBudWxsYCB0aGVuIGl0cyB2YWx1ZSBtdXN0IGJlIGVtaXR0ZWQgaW4gdGhlIGVtYmVkZGVkCiAgLy8gZ2xvYmFsIGBUWVBFX1RPX0lOVEVSQ0VQVE9SX01BUGAuIFRoZSBtYXAgcmVmZXJlbmNlcyBjb25zdGFudHMgYW5kIGNsYXNzZXMuCiAgZmluYWwganMuRXhwcmVzc2lvbiB0eXBlVG9JbnRlcmNlcHRvck1hcDsKCiAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIHNob3VsZCBzdG9yZSB0aGUgbWV0YWRhdGEgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdG9yaW5nCiAgLy8gdGhlIGNvbGxlY3Rvci4gSG93ZXZlciwgdGhlIG9sZCBlbWl0dGVyIHN0aWxsIHVwZGF0ZXMgdGhlIGRhdGEuCiAgZmluYWwgTWV0YWRhdGFDb2xsZWN0b3IgX21ldGFkYXRhQ29sbGVjdG9yOwogIGZpbmFsIEl0ZXJhYmxlPGpzLlRva2VuRmluYWxpemVyPiBmaW5hbGl6ZXJzOwoKICBQcm9ncmFtKHRoaXMuZnJhZ21lbnRzLCB0aGlzLmhvbGRlcnMsIHRoaXMubG9hZE1hcCwgdGhpcy50eXBlVG9JbnRlcmNlcHRvck1hcCwKICAgICAgdGhpcy5fbWV0YWRhdGFDb2xsZWN0b3IsIHRoaXMuZmluYWxpemVycywKICAgICAge3RoaXMubmVlZHNOYXRpdmVTdXBwb3J0LAogICAgICB0aGlzLm91dHB1dENvbnRhaW5zQ29uc3RhbnRMaXN0LAogICAgICB0aGlzLmhhc1NvZnREZWZlcnJlZENsYXNzZXN9KSB7CiAgICBhc3NlcnQobmVlZHNOYXRpdmVTdXBwb3J0ICE9IG51bGwpOwogICAgYXNzZXJ0KG91dHB1dENvbnRhaW5zQ29uc3RhbnRMaXN0ICE9IG51bGwpOwogIH0KCiAgLy8vIEFjY2Vzc29yIGZvciB0aGUgbGlzdCBvZiBtZXRhZGF0YSBlbnRyaWVzIGZvciBhIGdpdmVuIFtPdXRwdXRVbml0XS4KICAvLy8KICAvLy8gVGhlcmUgaXMgb25lIGxpc3QgZm9yIGVhY2ggb3V0cHV0IHVuaXQuIFRoZSBsaXN0IGJlbG9uZ2luZyB0byB0aGUgbWFpbgogIC8vLyB1bml0IG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgYE1FVEFEQVRBYCBlbWJlZGRlZCBnbG9iYWwuCiAgLy8vIFRoZSBsaXN0IHJlZmVyZW5jZXMgY29uc3RhbnRzIGFuZCBtdXN0IGhlbmNlIGJlIGVtaXR0ZWQgYWZ0ZXIgY29uc3RhbnRzCiAgLy8vIGhhdmUgYmVlbiBpbml0aWFsaXplZC4KICAvLy8KICAvLy8gTm90ZTogdGhlIG1ldGFkYXRhIGlzIGRlcml2ZWQgZnJvbSB0aGUgdGFzaydzIGBtZXRhZGF0YUNvbGxlY3RvcmAuIFRoZQogIC8vLyBsaXN0IG11c3Qgbm90IGJlIGVtaXR0ZWQgYmVmb3JlIGFsbCBvcGVyYXRpb25zIG9uIGl0IGFyZSBkb25lLiBGb3IKICAvLy8gZXhhbXBsZSwgdGhlIG9sZCBlbWl0dGVyIGdlbmVyYXRlcyBtZXRhZGF0YSB3aGVuIGVtaXR0aW5nIHJlZmxlY3Rpb24KICAvLy8gZGF0YS4KICBqcy5FeHByZXNzaW9uIG1ldGFkYXRhRm9yT3V0cHV0VW5pdChPdXRwdXRVbml0IHVuaXQpIHsKICAgIHJldHVybiBfbWV0YWRhdGFDb2xsZWN0b3IuZ2V0TWV0YWRhdGFGb3JPdXRwdXRVbml0KHVuaXQpOwogIH0KCiAgLy8vIEFjY2Vzc29yIGZvciB0aGUgbGlzdCBvZiB0eXBlIGVudHJpZXMgZm9yIGEgZ2l2ZW4gW091dHB1dFVuaXRdLgogIC8vLwogIC8vLyBUaGVyZSBpcyBvbmUgbGlzdCBmb3IgZWFjaCBvdXRwdXQgdW5pdC4gVGhlIGxpc3QgYmVsb25naW5nIHRvIHRoZSBtYWluCiAgLy8vIHVuaXQgbXVzdCBiZSBlbWl0dGVkIGluIHRoZSBgVFlQRVNgIGVtYmVkZGVkIGdsb2JhbC4gVGhlIGxpc3QgcmVmZXJlbmNlcwogIC8vLyBjb25zdGFudHMgYW5kIG11c3QgaGVuY2UgYmUgZW1pdHRlZCBhZnRlciBjb25zdGFudHMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLgogIC8vLwogIC8vLyBOb3RlOiB0aGUgbWV0YWRhdGEgaXMgZGVyaXZlZCBmcm9tIHRoZSB0YXNrJ3MgYG1ldGFkYXRhQ29sbGVjdG9yYC4gVGhlCiAgLy8vIGxpc3QgaXMgb25seSBhIHBsYWNlaG9sZGVyIGFuZCB3aWxsIGJlIGZpbGxlZCBpbiBvbmNlIG1ldGFkYXRhIGNvbGxlY3Rpb24KICAvLy8gaXMgZmluYWxpemVkLgogIGpzLkV4cHJlc3Npb24gbWV0YWRhdGFUeXBlc0Zvck91dHB1dFVuaXQoT3V0cHV0VW5pdCB1bml0KSB7CiAgICByZXR1cm4gX21ldGFkYXRhQ29sbGVjdG9yLmdldFR5cGVzRm9yT3V0cHV0VW5pdCh1bml0KTsKICB9CgogIGJvb2wgZ2V0IGlzU3BsaXQgPT4gZnJhZ21lbnRzLmxlbmd0aCA+IDE7CiAgSXRlcmFibGU8RnJhZ21lbnQ+IGdldCBkZWZlcnJlZEZyYWdtZW50cyA9PiBmcmFnbWVudHMuc2tpcCgxKTsKICBGcmFnbWVudCBnZXQgbWFpbkZyYWdtZW50ID0+IGZyYWdtZW50cy5maXJzdDsKfQoKLy8vIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgY29udGFpbnMgc3RhdGljIHN0YXRlLCBsaWtlCi8vLyBjbGFzc2VzIG9yIGZ1bmN0aW9ucy4KY2xhc3MgSG9sZGVyIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBpbnQgaW5kZXg7CiAgZmluYWwgYm9vbCBpc1N0YXRpY1N0YXRlSG9sZGVyOwogIGZpbmFsIGJvb2wgaXNDb25zdGFudHNIb2xkZXI7CgogIEhvbGRlcih0aGlzLm5hbWUsIHRoaXMuaW5kZXgsCiAgICAgIHt0aGlzLmlzU3RhdGljU3RhdGVIb2xkZXI6IGZhbHNlLCB0aGlzLmlzQ29uc3RhbnRzSG9sZGVyOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0hvbGRlcihuYW1lPSR7bmFtZX0pJzsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgb25lIG91dHB1dCBmaWxlLgovLy8KLy8vIElmIG5vIGxpYnJhcnkgaXMgZGVmZXJyZWQsIHRoZXJlIGlzIG9ubHkgb25lIFtGcmFnbWVudF0gb2YgdHlwZQovLy8gW01haW5GcmFnbWVudF0uCmFic3RyYWN0IGNsYXNzIEZyYWdtZW50IHsKICAvLy8gVGhlIG91dHB1dFVuaXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtb2RlbC4KICAvLy8gVXNlcyBpbmRpY2F0ZSBtaXNzaW5nIGluZm9ybWF0aW9uIGluIHRoZSBtb2RlbC4KICBmaW5hbCBPdXRwdXRVbml0IG91dHB1dFVuaXQ7CgogIGZpbmFsIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzOwogIGZpbmFsIExpc3Q8Q29uc3RhbnQ+IGNvbnN0YW50czsKICAvLyBUT0RPKGZsb2l0c2NoKTogc2hvdWxkIHdlIG1vdmUgc3RhdGljIGZpZWxkcyBpbnRvIGxpYnJhcmllcyBvciBjbGFzc2VzPwogIGZpbmFsIExpc3Q8U3RhdGljRmllbGQ+IHN0YXRpY05vbkZpbmFsRmllbGRzOwogIC8vIFRPRE8oZmxvaXRzY2gpOiBsYXp5IGZpZWxkcyBzaG91bGQgYmUgaW4gdGhlaXIgbGlicmFyeSBvciBldmVuIGNsYXNzLgogIGZpbmFsIExpc3Q8U3RhdGljRmllbGQ+IHN0YXRpY0xhemlseUluaXRpYWxpemVkRmllbGRzOwoKICAvLy8gT3V0cHV0IGZpbGUgbmFtZSB3aXRob3V0IGV4dGVuc2lvbi4KICBmaW5hbCBTdHJpbmcgb3V0cHV0RmlsZU5hbWU7CgogIEZyYWdtZW50KAogICAgICB0aGlzLm91dHB1dFVuaXQsCiAgICAgIHRoaXMub3V0cHV0RmlsZU5hbWUsCiAgICAgIHRoaXMubGlicmFyaWVzLAogICAgICB0aGlzLnN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICB0aGlzLnN0YXRpY0xhemlseUluaXRpYWxpemVkRmllbGRzLAogICAgICB0aGlzLmNvbnN0YW50cyk7CgogIGJvb2wgZ2V0IGlzTWFpbkZyYWdtZW50Owp9CgovLy8gVGhlIG1haW4gb3V0cHV0IGZpbGUuCi8vLwovLy8gVGhpcyBjb2RlIGVtaXR0ZWQgZnJvbSB0aGlzIFtGcmFnbWVudF0gbXVzdCBiZSBsb2FkZWQgZmlyc3QuIEl0IGNhbiB0aGVuIGxvYWQKLy8vIG90aGVyIFtEZWZlcnJlZEZyYWdtZW50XXMuCmNsYXNzIE1haW5GcmFnbWVudCBleHRlbmRzIEZyYWdtZW50IHsKICBmaW5hbCBqcy5TdGF0ZW1lbnQgaW52b2tlTWFpbjsKCiAgTWFpbkZyYWdtZW50KAogICAgICBPdXRwdXRVbml0IG91dHB1dFVuaXQsCiAgICAgIFN0cmluZyBvdXRwdXRGaWxlTmFtZSwKICAgICAgdGhpcy5pbnZva2VNYWluLAogICAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcywKICAgICAgTGlzdDxTdGF0aWNGaWVsZD4gc3RhdGljTm9uRmluYWxGaWVsZHMsCiAgICAgIExpc3Q8U3RhdGljRmllbGQ+IHN0YXRpY0xhemlseUluaXRpYWxpemVkRmllbGRzLAogICAgICBMaXN0PENvbnN0YW50PiBjb25zdGFudHMpCiAgICAgIDogc3VwZXIob3V0cHV0VW5pdCwgb3V0cHV0RmlsZU5hbWUsIGxpYnJhcmllcywgc3RhdGljTm9uRmluYWxGaWVsZHMsCiAgICAgICAgICAgIHN0YXRpY0xhemlseUluaXRpYWxpemVkRmllbGRzLCBjb25zdGFudHMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01haW5GcmFnbWVudCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ01haW5GcmFnbWVudCgpJzsKICB9Cn0KCi8vLyBBbiBvdXRwdXQgKGZpbGUpIGZvciBkZWZlcnJlZCBjb2RlLgpjbGFzcyBEZWZlcnJlZEZyYWdtZW50IGV4dGVuZHMgRnJhZ21lbnQgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBEZWZlcnJlZEZyYWdtZW50KAogICAgICBPdXRwdXRVbml0IG91dHB1dFVuaXQsCiAgICAgIFN0cmluZyBvdXRwdXRGaWxlTmFtZSwKICAgICAgdGhpcy5uYW1lLAogICAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcywKICAgICAgTGlzdDxTdGF0aWNGaWVsZD4gc3RhdGljTm9uRmluYWxGaWVsZHMsCiAgICAgIExpc3Q8U3RhdGljRmllbGQ+IHN0YXRpY0xhemlseUluaXRpYWxpemVkRmllbGRzLAogICAgICBMaXN0PENvbnN0YW50PiBjb25zdGFudHMpCiAgICAgIDogc3VwZXIob3V0cHV0VW5pdCwgb3V0cHV0RmlsZU5hbWUsIGxpYnJhcmllcywgc3RhdGljTm9uRmluYWxGaWVsZHMsCiAgICAgICAgICAgIHN0YXRpY0xhemlseUluaXRpYWxpemVkRmllbGRzLCBjb25zdGFudHMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01haW5GcmFnbWVudCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdEZWZlcnJlZEZyYWdtZW50KG5hbWU9JHtuYW1lfSknOwogIH0KfQoKY2xhc3MgQ29uc3RhbnQgewogIGZpbmFsIGpzLk5hbWUgbmFtZTsKICBmaW5hbCBIb2xkZXIgaG9sZGVyOwogIGZpbmFsIENvbnN0YW50VmFsdWUgdmFsdWU7CgogIENvbnN0YW50KHRoaXMubmFtZSwgdGhpcy5ob2xkZXIsIHRoaXMudmFsdWUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0NvbnN0YW50KG5hbWU9JHtuYW1lLmtleX0sdmFsdWU9JHt2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCl9KSc7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBGaWVsZENvbnRhaW5lciB7CiAgTGlzdDxGaWVsZD4gZ2V0IHN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb247Cn0KCmNsYXNzIExpYnJhcnkgaW1wbGVtZW50cyBGaWVsZENvbnRhaW5lciB7CiAgLy8vIFRoZSBlbGVtZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbW9kZWwuCiAgLy8vIFVzZXMgaW5kaWNhdGUgbWlzc2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgbW9kZWwuCiAgZmluYWwgTGlicmFyeUVudGl0eSBlbGVtZW50OwoKICBmaW5hbCBTdHJpbmcgdXJpOwogIGZpbmFsIExpc3Q8U3RhdGljTWV0aG9kPiBzdGF0aWNzOwogIGZpbmFsIExpc3Q8Q2xhc3M+IGNsYXNzZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIExpc3Q8RmllbGQ+IHN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb247CgogIExpYnJhcnkodGhpcy5lbGVtZW50LCB0aGlzLnVyaSwgdGhpcy5zdGF0aWNzLCB0aGlzLmNsYXNzZXMsCiAgICAgIHRoaXMuc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnTGlicmFyeSh1cmk9JHt1cml9LGVsZW1lbnQ9JHtlbGVtZW50fSknOwogIH0KfQoKY2xhc3MgU3RhdGljRmllbGQgewogIC8vLyBUaGUgZWxlbWVudCBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1vZGVsLgogIC8vLyBVc2VzIGluZGljYXRlIG1pc3NpbmcgaW5mb3JtYXRpb24gaW4gdGhlIG1vZGVsLgogIGZpbmFsIEZpZWxkRW50aXR5IGVsZW1lbnQ7CgogIGZpbmFsIGpzLk5hbWUgbmFtZTsKICBmaW5hbCBqcy5OYW1lIGdldHRlck5hbWU7CiAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZSBob2xkZXIgZm9yIHN0YXRpYyBmaWVsZHMgaXMgdGhlIGlzb2xhdGUgb2JqZWN0LiBXZQogIC8vIGNvdWxkIHJlbW92ZSB0aGlzIGZpZWxkIGFuZCB1c2UgdGhlIGlzb2xhdGUgb2JqZWN0IGRpcmVjdGx5LgogIGZpbmFsIEhvbGRlciBob2xkZXI7CiAgZmluYWwganMuRXhwcmVzc2lvbiBjb2RlOwogIGZpbmFsIGJvb2wgaXNGaW5hbDsKICBmaW5hbCBib29sIGlzTGF6eTsKICBmaW5hbCBib29sIGlzSW5pdGlhbGl6ZWRCeUNvbnN0YW50OwoKICBTdGF0aWNGaWVsZCh0aGlzLmVsZW1lbnQsIHRoaXMubmFtZSwgdGhpcy5nZXR0ZXJOYW1lLCB0aGlzLmhvbGRlciwgdGhpcy5jb2RlLAogICAgICB7dGhpcy5pc0ZpbmFsLCB0aGlzLmlzTGF6eSwgdGhpcy5pc0luaXRpYWxpemVkQnlDb25zdGFudDogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdTdGF0aWNGaWVsZChuYW1lPSR7bmFtZS5rZXl9LGVsZW1lbnQ9JHtlbGVtZW50fSknOwogIH0KfQoKLy8gVE9ETyhmaXNoeXRoZWZpc2gsIHNyYSk6IFNwbGl0IHR5cGUgaW5mb3JtYXRpb24gaW50byBzZXBhcmF0ZSBtb2RlbCBvYmplY3QuCmNsYXNzIENsYXNzIGltcGxlbWVudHMgRmllbGRDb250YWluZXIgewogIC8vLyBUaGUgZWxlbWVudCBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1vZGVsLgogIC8vLyBVc2VzIGluZGljYXRlIG1pc3NpbmcgaW5mb3JtYXRpb24gaW4gdGhlIG1vZGVsLgogIGZpbmFsIENsYXNzRW50aXR5IGVsZW1lbnQ7CgogIGZpbmFsIGpzLk5hbWUgbmFtZTsKICBmaW5hbCBIb2xkZXIgaG9sZGVyOwogIENsYXNzIF9zdXBlcmNsYXNzOwogIENsYXNzIF9taXhpbkNsYXNzOwogIGZpbmFsIExpc3Q8TWV0aG9kPiBtZXRob2RzOwogIGZpbmFsIExpc3Q8RmllbGQ+IGZpZWxkczsKICBmaW5hbCBMaXN0PFN0dWJNZXRob2Q+IGlzQ2hlY2tzOwogIGZpbmFsIENsYXNzQ2hlY2tzIGNsYXNzQ2hlY2tzTmV3UnRpOwogIGZpbmFsIFNldDxUeXBlVmFyaWFibGVUeXBlPiBuYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkgPSB7fTsKICBmaW5hbCBMaXN0PFN0dWJNZXRob2Q+IGNoZWNrZWRTZXR0ZXJzOwoKICAvLy8gU3R1YiBtZXRob2RzIGZvciB0aGlzIGNsYXNzIHRoYXQgYXJlIGNhbGwgc3R1YnMgZm9yIGdldHRlcnMuCiAgZmluYWwgTGlzdDxTdHViTWV0aG9kPiBjYWxsU3R1YnM7CgogIC8vLyBub1N1Y2hNZXRob2Qgc3R1YnMgaW4gdGhlIHNwZWNpYWwgY2FzZSB0aGF0IHRoZSBjbGFzcyBpcyBPYmplY3QuCiAgZmluYWwgTGlzdDxTdHViTWV0aG9kPiBub1N1Y2hNZXRob2RTdHViczsKICBAb3ZlcnJpZGUKICBmaW5hbCBMaXN0PEZpZWxkPiBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uOwogIGZpbmFsIGJvb2wgaGFzUnRpRmllbGQ7IC8vIFBlci1pbnN0YW5jZSBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24gcHNldWRvLWZpZWxkLgogIGZpbmFsIGJvb2wgb25seUZvclJ0aTsKICBmaW5hbCBib29sIGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQ7CiAgZmluYWwgYm9vbCBpc05hdGl2ZTsKICBmaW5hbCBib29sIGlzQ2xvc3VyZUJhc2VDbGFzczsgLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIGNsb3N1cmVzLgoKICAvLy8gV2hldGhlciB0aGlzIGNsYXNzIHNob3VsZCBiZSBzb2Z0IGRlZmVycmVkLgogIC8vLwogIC8vLyBBIHNvZnQtZGVmZXJyZWQgY2xhc3MgaXMgb25seSBmdWxseSBpbml0aWFsaXplZCBhdCBmaXJzdCBpbnN0YW50aWF0aW9uLgogIGZpbmFsIGJvb2wgaXNTb2Z0RGVmZXJyZWQ7CgogIGZpbmFsIGJvb2wgaXNTdXBlck1peGluQXBwbGljYXRpb247CgogIC8vIElmIHRoZSBjbGFzcyBpbXBsZW1lbnRzIGEgZnVuY3Rpb24gdHlwZSwgYW5kIHRoZSB0eXBlIGlzIGVuY29kZWQgaW4gdGhlCiAgLy8gbWV0YXRhZGEgdGFibGUsIHRoZW4gdGhpcyBmaWVsZCBjb250YWlucyB0aGUgaW5kZXggaW50byB0aGF0IGZpZWxkLgogIGZpbmFsIGpzLkV4cHJlc3Npb24gZnVuY3Rpb25UeXBlSW5kZXg7CgogIC8vLyBXaGV0aGVyIHRoZSBjbGFzcyBtdXN0IGJlIGV2YWx1YXRlZCBlYWdlcmx5LgogIGJvb2wgaXNFYWdlciA9IGZhbHNlOwoKICAvLy8gTGVhZiB0YWdzLiBTZWUgW05hdGl2ZUVtaXR0ZXIucHJlcGFyZU5hdGl2ZUNsYXNzZXNdLgogIExpc3Q8U3RyaW5nPiBuYXRpdmVMZWFmVGFnczsKCiAgLy8vIE5vbi1sZWFmIHRhZ3MuIFNlZSBbTmF0aXZlRW1pdHRlci5wcmVwYXJlTmF0aXZlQ2xhc3Nlc10uCiAgTGlzdDxTdHJpbmc+IG5hdGl2ZU5vbkxlYWZUYWdzOwoKICAvLy8gTmF0aXZlIGV4dGVuc2lvbnMuIFNlZSBbTmF0aXZlRW1pdHRlci5wcmVwYXJlTmF0aXZlQ2xhc3Nlc10uCiAgTGlzdDxDbGFzcz4gbmF0aXZlRXh0ZW5zaW9uczsKCiAgQ2xhc3MoCiAgICAgIHRoaXMuZWxlbWVudCwKICAgICAgdGhpcy5uYW1lLAogICAgICB0aGlzLmhvbGRlciwKICAgICAgdGhpcy5tZXRob2RzLAogICAgICB0aGlzLmZpZWxkcywKICAgICAgdGhpcy5zdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uLAogICAgICB0aGlzLmNhbGxTdHVicywKICAgICAgdGhpcy5ub1N1Y2hNZXRob2RTdHVicywKICAgICAgdGhpcy5jaGVja2VkU2V0dGVycywKICAgICAgdGhpcy5pc0NoZWNrcywKICAgICAgdGhpcy5jbGFzc0NoZWNrc05ld1J0aSwKICAgICAgdGhpcy5mdW5jdGlvblR5cGVJbmRleCwKICAgICAge3RoaXMuaGFzUnRpRmllbGQsCiAgICAgIHRoaXMub25seUZvclJ0aSwKICAgICAgdGhpcy5pc0RpcmVjdGx5SW5zdGFudGlhdGVkLAogICAgICB0aGlzLmlzTmF0aXZlLAogICAgICB0aGlzLmlzQ2xvc3VyZUJhc2VDbGFzcywKICAgICAgdGhpcy5pc1NvZnREZWZlcnJlZCA9IGZhbHNlLAogICAgICB0aGlzLmlzU3VwZXJNaXhpbkFwcGxpY2F0aW9ufSkgewogICAgYXNzZXJ0KG9ubHlGb3JSdGkgIT0gbnVsbCk7CiAgICBhc3NlcnQoaXNEaXJlY3RseUluc3RhbnRpYXRlZCAhPSBudWxsKTsKICAgIGFzc2VydChpc05hdGl2ZSAhPSBudWxsKTsKICAgIGFzc2VydChpc0Nsb3N1cmVCYXNlQ2xhc3MgIT0gbnVsbCk7CiAgfQoKICBib29sIGdldCBpc1NpbXBsZU1peGluQXBwbGljYXRpb24gPT4gZmFsc2U7CgogIENsYXNzIGdldCBzdXBlcmNsYXNzID0+IF9zdXBlcmNsYXNzOwoKICB2b2lkIHNldFN1cGVyY2xhc3MoQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgX3N1cGVyY2xhc3MgPSBzdXBlcmNsYXNzOwogIH0KCiAgQ2xhc3MgZ2V0IG1peGluQ2xhc3MgPT4gX21peGluQ2xhc3M7CgogIHZvaWQgc2V0TWl4aW5DbGFzcyhDbGFzcyBtaXhpbkNsYXNzKSB7CiAgICBfbWl4aW5DbGFzcyA9IG1peGluQ2xhc3M7CiAgfQoKICBqcy5OYW1lIGdldCBzdXBlcmNsYXNzTmFtZSA9PiBzdXBlcmNsYXNzID09IG51bGwgPyBudWxsIDogc3VwZXJjbGFzcy5uYW1lOwoKICBpbnQgZ2V0IHN1cGVyY2xhc3NIb2xkZXJJbmRleCA9PgogICAgICAoc3VwZXJjbGFzcyA9PSBudWxsKSA/IDAgOiBzdXBlcmNsYXNzLmhvbGRlci5pbmRleDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0NsYXNzKG5hbWU9JHtuYW1lLmtleX0sZWxlbWVudD0kZWxlbWVudCknOwp9CgpjbGFzcyBNaXhpbkFwcGxpY2F0aW9uIGV4dGVuZHMgQ2xhc3MgewogIE1peGluQXBwbGljYXRpb24oCiAgICAgIENsYXNzRW50aXR5IGVsZW1lbnQsCiAgICAgIGpzLk5hbWUgbmFtZSwKICAgICAgSG9sZGVyIGhvbGRlciwKICAgICAgTGlzdDxGaWVsZD4gaW5zdGFuY2VGaWVsZHMsCiAgICAgIExpc3Q8RmllbGQ+IHN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb24sCiAgICAgIExpc3Q8U3R1Yk1ldGhvZD4gY2FsbFN0dWJzLAogICAgICBMaXN0PFN0dWJNZXRob2Q+IGNoZWNrZWRTZXR0ZXJzLAogICAgICBMaXN0PFN0dWJNZXRob2Q+IGlzQ2hlY2tzLAogICAgICBDbGFzc0NoZWNrcyBjbGFzc0NoZWNrc05ld1J0aSwKICAgICAganMuRXhwcmVzc2lvbiBmdW5jdGlvblR5cGVJbmRleCwKICAgICAge2Jvb2wgaGFzUnRpRmllbGQsCiAgICAgIGJvb2wgb25seUZvclJ0aSwKICAgICAgYm9vbCBpc0RpcmVjdGx5SW5zdGFudGlhdGVkfSkKICAgICAgOiBzdXBlcigKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgaG9sZGVyLAogICAgICAgICAgICBjb25zdCA8TWV0aG9kPltdLAogICAgICAgICAgICBpbnN0YW5jZUZpZWxkcywKICAgICAgICAgICAgc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbiwKICAgICAgICAgICAgY2FsbFN0dWJzLAogICAgICAgICAgICBjb25zdCA8U3R1Yk1ldGhvZD5bXSwKICAgICAgICAgICAgY2hlY2tlZFNldHRlcnMsCiAgICAgICAgICAgIGlzQ2hlY2tzLAogICAgICAgICAgICBjbGFzc0NoZWNrc05ld1J0aSwKICAgICAgICAgICAgZnVuY3Rpb25UeXBlSW5kZXgsCiAgICAgICAgICAgIGhhc1J0aUZpZWxkOiBoYXNSdGlGaWVsZCwKICAgICAgICAgICAgb25seUZvclJ0aTogb25seUZvclJ0aSwKICAgICAgICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZDogaXNEaXJlY3RseUluc3RhbnRpYXRlZCwKICAgICAgICAgICAgaXNOYXRpdmU6IGZhbHNlLAogICAgICAgICAgICBpc0Nsb3N1cmVCYXNlQ2xhc3M6IGZhbHNlLAogICAgICAgICAgICBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbjogZmFsc2UpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NpbXBsZU1peGluQXBwbGljYXRpb24gPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ01peGluKG5hbWU9JHtuYW1lLmtleX0sZWxlbWVudD0kZWxlbWVudCknOwp9CgovLy8gQSBmaWVsZC4KLy8vCi8vLyBJbiBnZW5lcmFsIHJlcHJlc2VudHMgYW4gaW5zdGFuY2UgZmllbGQsIGJ1dCBmb3IgcmVmbGVjdGlvbiBtYXkgYWxzbwovLy8gcmVwcmVzZW50IHN0YXRpYyBmaWVsZHMuCmNsYXNzIEZpZWxkIHsKICAvLy8gVGhlIGVsZW1lbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtb2RlbC4KICAvLy8gVXNlcyBpbmRpY2F0ZSBtaXNzaW5nIGluZm9ybWF0aW9uIGluIHRoZSBtb2RlbC4KICBmaW5hbCBGaWVsZEVudGl0eSBlbGVtZW50OwoKICBmaW5hbCBqcy5OYW1lIG5hbWU7CiAgZmluYWwganMuTmFtZSBhY2Nlc3Nvck5hbWU7CgogIC8vLyAwMDogRG9lcyBub3QgbmVlZCBhbnkgZ2V0dGVyLgogIC8vLyAwMTogIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5maWVsZDsgfQogIC8vLyAxMDogIGZ1bmN0aW9uKHJlY2VpdmVyKSB7IHJldHVybiByZWNlaXZlci5maWVsZDsgfQogIC8vLyAxMTogIGZ1bmN0aW9uKHJlY2VpdmVyKSB7IHJldHVybiB0aGlzLmZpZWxkOyB9CiAgZmluYWwgaW50IGdldHRlckZsYWdzOwoKICAvLy8gMDA6IERvZXMgbm90IG5lZWQgYW55IHNldHRlci4KICAvLy8gMDE6ICBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLmZpZWxkID0gdmFsdWU7IH0KICAvLy8gMTA6ICBmdW5jdGlvbihyZWNlaXZlciwgdmFsdWUpIHsgcmVjZWl2ZXIuZmllbGQgPSB2YWx1ZTsgfQogIC8vLyAxMTogIGZ1bmN0aW9uKHJlY2VpdmVyLCB2YWx1ZSkgeyB0aGlzLmZpZWxkID0gdmFsdWU7IH0KICBmaW5hbCBpbnQgc2V0dGVyRmxhZ3M7CgogIGZpbmFsIGJvb2wgbmVlZHNDaGVja2VkU2V0dGVyOwoKICBmaW5hbCBDb25zdGFudFZhbHVlIGluaXRpYWxpemVySW5BbGxvY2F0b3I7CgogIGZpbmFsIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZTsKCiAgZmluYWwgYm9vbCBpc0VsaWRlZDsKCiAgLy8gVE9ETyhmbG9pdHNjaCk6IHN1cHBvcnQgcmVuYW1lZCBmaWVsZHMuCiAgRmllbGQoCiAgICAgIHRoaXMuZWxlbWVudCwKICAgICAgdGhpcy5uYW1lLAogICAgICB0aGlzLmFjY2Vzc29yTmFtZSwKICAgICAgdGhpcy5nZXR0ZXJGbGFncywKICAgICAgdGhpcy5zZXR0ZXJGbGFncywKICAgICAgdGhpcy5uZWVkc0NoZWNrZWRTZXR0ZXIsCiAgICAgIHRoaXMuaW5pdGlhbGl6ZXJJbkFsbG9jYXRvciwKICAgICAgdGhpcy5jb25zdGFudFZhbHVlLAogICAgICB0aGlzLmlzRWxpZGVkKTsKCiAgYm9vbCBnZXQgbmVlZHNHZXR0ZXIgPT4gZ2V0dGVyRmxhZ3MgIT0gMDsKICBib29sIGdldCBuZWVkc1VuY2hlY2tlZFNldHRlciA9PiBzZXR0ZXJGbGFncyAhPSAwOwoKICBib29sIGdldCBuZWVkc0ludGVyY2VwdGVkR2V0dGVyID0+IGdldHRlckZsYWdzID4gMTsKICBib29sIGdldCBuZWVkc0ludGVyY2VwdGVkU2V0dGVyID0+IHNldHRlckZsYWdzID4gMTsKCiAgYm9vbCBnZXQgbmVlZHNJbnRlcmNlcHRlZEdldHRlck9uUmVjZWl2ZXIgPT4gZ2V0dGVyRmxhZ3MgPT0gMjsKICBib29sIGdldCBuZWVkc0ludGVyY2VwdGVkU2V0dGVyT25SZWNlaXZlciA9PiBzZXR0ZXJGbGFncyA9PSAyOwoKICBib29sIGdldCBuZWVkc0ludGVyY2VwdGVkR2V0dGVyT25UaGlzID0+IGdldHRlckZsYWdzID09IDM7CiAgYm9vbCBnZXQgbmVlZHNJbnRlcmNlcHRlZFNldHRlck9uVGhpcyA9PiBzZXR0ZXJGbGFncyA9PSAzOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0ZpZWxkKG5hbWU9JHtuYW1lLmtleX0sZWxlbWVudD0ke2VsZW1lbnR9KSc7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBNZXRob2QgewogIC8vLyBUaGUgZWxlbWVudCBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1vZGVsLgogIC8vLyBVc2VzIGluZGljYXRlIG1pc3NpbmcgaW5mb3JtYXRpb24gaW4gdGhlIG1vZGVsLgogIGZpbmFsIE1lbWJlckVudGl0eSBlbGVtZW50OwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG1ldGhvZC4gSWYgdGhlIG1ldGhvZCBpcyBhIFtQYXJhbWV0ZXJTdHViTWV0aG9kXSBmb3IgYQogIC8vLyBzdGF0aWMgZnVuY3Rpb24sIHRoZW4gdGhlIG5hbWUgY2FuIGJlIGBudWxsYC4gSW4gdGhhdCBjYXNlLCBvbmx5IHRoZQogIC8vLyBbUGFyYW1ldGVyU3R1Yk1ldGhvZC5jYWxsTmFtZV0gc2hvdWxkIGJlIHVzZWQuCiAgZmluYWwganMuTmFtZSBuYW1lOwogIGZpbmFsIGpzLkV4cHJlc3Npb24gY29kZTsKCiAgTWV0aG9kKHRoaXMuZWxlbWVudCwgdGhpcy5uYW1lLCB0aGlzLmNvZGUpOwp9CgovLy8gQSBtZXRob2QgdGhhdCBjb3JyZXNwb25kcyB0byBhIG1ldGhvZCBpbiB0aGUgb3JpZ2luYWwgRGFydCBwcm9ncmFtLgphYnN0cmFjdCBjbGFzcyBEYXJ0TWV0aG9kIGV4dGVuZHMgTWV0aG9kIHsKICBmaW5hbCBib29sIG5lZWRzVGVhck9mZjsKICBmaW5hbCBqcy5OYW1lIHRlYXJPZmZOYW1lOwogIGZpbmFsIExpc3Q8UGFyYW1ldGVyU3R1Yk1ldGhvZD4gcGFyYW1ldGVyU3R1YnM7CiAgZmluYWwgYm9vbCBjYW5CZUFwcGxpZWQ7CiAgZmluYWwgaW50IGFwcGx5SW5kZXg7CgogIC8vIElzIG5vbi1udWxsIGlmIFtuZWVkc1RlYXJPZmZdLgogIC8vCiAgLy8gSWYgdGhlIHR5cGUgaXMgZW5jb2RlZCBpbiB0aGUgbWV0YWRhdGEgdGFibGUgdGhpcyBmaWVsZCBjb250YWlucyBhbiBpbmRleAogIC8vIGludG8gdGhlIHRhYmxlLiBPdGhlcndpc2UgdGhlIHR5cGUgY29udGFpbnMgdHlwZSB2YXJpYWJsZXMgaW4gd2hpY2ggY2FzZQogIC8vIHRoaXMgZmllbGQgaG9sZHMgYSBmdW5jdGlvbiBjb21wdXRpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4KICBmaW5hbCBqcy5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZTsKCiAgLy8gU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciB0aGlzIG1ldGhvZC4gW29wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlc10gaXMKICAvLyBvbmx5IHJlcXVpcmVkIGFuZCBzdG9yZWQgaGVyZSBpZiB0aGUgbWV0aG9kIFtjYW5CZUFwcGxpZWRdLiBUaGUgY291bnQgaXMKICAvLyBhbHdheXMgc3RvcmVkIHRvIGhlbHAgc2VsZWN0IHNwZWNpYWxpemVkIHRlYXItb2ZmIHBhdGhzLgogIGZpbmFsIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50OwogIGZpbmFsIC8qIE1hcCB8IExpc3QgKi8gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOwoKICAvLyBJZiB0aGlzIG1ldGhvZCBjYW4gYmUgdG9ybiBvZmYsIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nCiAgLy8gY2FsbCBtZXRob2QuIEZvciBleGFtcGxlLCBmb3IgdGhlIG1lbWJlciBgZm9vJDEkbmFtZWAgaXQgd291bGQgYmUKICAvLyBgY2FsbCQxJG5hbWVgIChpbiB1bm1pbmlmaWVkIG1vZGUpLgogIGZpbmFsIGpzLk5hbWUgY2FsbE5hbWU7CgogIERhcnRNZXRob2QoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwganMuTmFtZSBuYW1lLCBqcy5FeHByZXNzaW9uIGNvZGUsCiAgICAgIHRoaXMucGFyYW1ldGVyU3R1YnMsIHRoaXMuY2FsbE5hbWUsCiAgICAgIHt0aGlzLm5lZWRzVGVhck9mZiwKICAgICAgdGhpcy50ZWFyT2ZmTmFtZSwKICAgICAgdGhpcy5jYW5CZUFwcGxpZWQsCiAgICAgIHRoaXMucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgdGhpcy5vcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIHRoaXMuZnVuY3Rpb25UeXBlLAogICAgICB0aGlzLmFwcGx5SW5kZXh9KQogICAgICA6IHN1cGVyKGVsZW1lbnQsIG5hbWUsIGNvZGUpIHsKICAgIGFzc2VydChuZWVkc1RlYXJPZmYgIT0gbnVsbCk7CiAgICBhc3NlcnQoIW5lZWRzVGVhck9mZiB8fCB0ZWFyT2ZmTmFtZSAhPSBudWxsKTsKICAgIGFzc2VydChjYW5CZUFwcGxpZWQgIT0gbnVsbCk7CiAgICBhc3NlcnQoIWNhbkJlQXBwbGllZCB8fAogICAgICAgIChyZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9IG51bGwgJiYKICAgICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzICE9IG51bGwpKTsKICB9CgogIGJvb2wgZ2V0IGlzU3RhdGljOwp9CgpjbGFzcyBJbnN0YW5jZU1ldGhvZCBleHRlbmRzIERhcnRNZXRob2QgewogIC8vLyBBbiBhbHRlcm5hdGl2ZSBuYW1lIGZvciB0aGlzIG1ldGhvZC4gVGhpcyBpcyB1c2VkIHRvIG1vZGVsIGNhbGxzIHRvCiAgLy8vIGEgbWV0aG9kIHZpYSBgc3VwZXJgLiBJZiBbYWxpYXNOYW1lXSBpcyBub24tbnVsbCwgdGhlIGVtaXR0ZXIgaGFzIHRvCiAgLy8vIGVuc3VyZSB0aGF0IHRoaXMgbWV0aG9kIGlzIHJlZ2lzdGVyZWQgb24gdGhlIHByb3RvdHlwZSB1bmRlciBib3RoIFtuYW1lXQogIC8vLyBhbmQgW2FsaWFzTmFtZV0uCiAgZmluYWwganMuTmFtZSBhbGlhc05hbWU7CgogIC8vLyBUcnVlIGlmIHRoaXMgaXMgdGhlIGltcGxpY2l0IGBjYWxsYCBpbnN0YW5jZSBtZXRob2Qgb2YgYW4gYW5vbnltb3VzCiAgLy8vIGNsb3N1cmUuIFRoaXMgcHJlZGljYXRlIGlzIGZhbHNlIGZvciBleHBsaWNpdCBgY2FsbGAgbWV0aG9kcyBhbmQgZm9yCiAgLy8vIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0b3JuIG9mZi4KICBmaW5hbCBib29sIGlzQ2xvc3VyZUNhbGxNZXRob2Q7CgogIC8vLyBUcnVlIGlmIHRoZSBpbnRlcmNlcHRvciBjYWxsaW5nIGNvbnZlbnRpb24gaXMgdXNlZCBmb3IgdGhpcyBtZXRob2QuCiAgZmluYWwgYm9vbCBpc0ludGVyY2VwdGVkOwoKICAvLy8gTmFtZSBjYWxsZWQgdmlhIHRoZSBnZW5lcmFsICdjYXRjaCBhbGwnIHBhdGggb2YgRnVuY3Rpb24uYXBwbHkuCiAgLy8vZmluYWwganMuTmFtZSBhcHBseU5hbWU7CgogIEluc3RhbmNlTWV0aG9kKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIGpzLk5hbWUgbmFtZSwganMuRXhwcmVzc2lvbiBjb2RlLAogICAgICBMaXN0PFBhcmFtZXRlclN0dWJNZXRob2Q+IHBhcmFtZXRlclN0dWJzLCBqcy5OYW1lIGNhbGxOYW1lLAogICAgICB7Ym9vbCBuZWVkc1RlYXJPZmYsCiAgICAgIGpzLk5hbWUgdGVhck9mZk5hbWUsCiAgICAgIHRoaXMuYWxpYXNOYW1lLAogICAgICBib29sIGNhbkJlQXBwbGllZCwKICAgICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgIC8qIExpc3QgfCBNYXAgKi8gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICB0aGlzLmlzQ2xvc3VyZUNhbGxNZXRob2QsCiAgICAgIHRoaXMuaXNJbnRlcmNlcHRlZCwKICAgICAganMuRXhwcmVzc2lvbiBmdW5jdGlvblR5cGUsCiAgICAgIGludCBhcHBseUluZGV4fSkKICAgICAgOiBzdXBlcihlbGVtZW50LCBuYW1lLCBjb2RlLCBwYXJhbWV0ZXJTdHVicywgY2FsbE5hbWUsCiAgICAgICAgICAgIG5lZWRzVGVhck9mZjogbmVlZHNUZWFyT2ZmLAogICAgICAgICAgICB0ZWFyT2ZmTmFtZTogdGVhck9mZk5hbWUsCiAgICAgICAgICAgIGNhbkJlQXBwbGllZDogY2FuQmVBcHBsaWVkLAogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgICAgZnVuY3Rpb25UeXBlOiBmdW5jdGlvblR5cGUsCiAgICAgICAgICAgIGFwcGx5SW5kZXg6IGFwcGx5SW5kZXgpIHsKICAgIGFzc2VydChpc0Nsb3N1cmVDYWxsTWV0aG9kICE9IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnSW5zdGFuY2VNZXRob2QobmFtZT0ke25hbWUua2V5fSxlbGVtZW50PSR7ZWxlbWVudH0nCiAgICAgICAgJyxjb2RlPSR7anMubm9kZVRvU3RyaW5nKGNvZGUpfSknOwogIH0KfQoKLy8vIEEgbWV0aG9kIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBiYWNrZW5kIGFuZCBoYXMgbm90IGRpcmVjdCBjb3JyZXNwb25kZW5jZQovLy8gdG8gYSBtZXRob2QgaW4gdGhlIG9yaWdpbmFsIERhcnQgcHJvZ3JhbS4gRXhhbXBsZXMgYXJlIGdldHRlciBhbmQgc2V0dGVyCi8vLyBzdHVicyBhbmQgc3R1YnMgdG8gZGlzcGF0Y2ggY2FsbHMgdG8gbWV0aG9kcyB3aXRoIG9wdGlvbmFsIHBhcmFtZXRlcnMuCmNsYXNzIFN0dWJNZXRob2QgZXh0ZW5kcyBNZXRob2QgewogIFN0dWJNZXRob2QoanMuTmFtZSBuYW1lLCBqcy5FeHByZXNzaW9uIGNvZGUsIHtNZW1iZXJFbnRpdHkgZWxlbWVudH0pCiAgICAgIDogc3VwZXIoZWxlbWVudCwgbmFtZSwgY29kZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnU3R1Yk1ldGhvZChuYW1lPSR7bmFtZS5rZXl9LGVsZW1lbnQ9JHtlbGVtZW50fScKICAgICAgICAnLGNvZGU9JHtqcy5ub2RlVG9TdHJpbmcoY29kZSl9KSc7CiAgfQp9CgovLy8gQSBzdHViIHRoYXQgYWRhcHRzIGFuZCByZWRpcmVjdHMgdG8gdGhlIG1haW4gbWV0aG9kICh0aGUgb25lIGNvbnRhaW5pbmcpCi8vLyB0aGUgYWN0dWFsIGNvZGUuCi8vLwovLy8gRm9yIGV4YW1wbGUsIGdpdmVuIGEgbWV0aG9kIGBmb28kMih4LCBbeTogNDk5XSlgIGEgcG9zc2libGUgcGFyYW1ldGVyCi8vLyBzdHViLW1ldGhvZCBjb3VsZCBiZSBgZm9vJDEoeCkgPT4gZm9vJDIoeCwgNDk5KWAuCi8vLwovLy8gUGFyYW1ldGVyU3R1Yk1ldGhvZHMgYXJlIGFsd2F5cyBhdHRhY2hlZCB0byAoc3RhdGljIG9yIGluc3RhbmNlKSBtZXRob2RzLgpjbGFzcyBQYXJhbWV0ZXJTdHViTWV0aG9kIGV4dGVuZHMgU3R1Yk1ldGhvZCB7CiAgLy8vIFRoZSBgY2FsbGAgbmFtZSBvZiB0aGlzIHN0dWIuCiAgLy8vCiAgLy8vIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIGlzIHRvcm4gb2ZmLCBpdCBpcyBpbnZva2VkIGFzIGEgYGNhbGxgIG1lbWJlciBhbmQKICAvLy8gbm90IGl0J3Mgb3JpZ2luYWwgbmFtZSBhbnltb3JlLiBUaGUgW2NhbGxOYW1lXSBwcm92aWRlcyB0aGUgc3R1YidzCiAgLy8vIG5hbWUgd2hlbiBpdCBpcyB1c2VkIHRoaXMgd2F5LgogIC8vLwogIC8vLyBJZiBhIHN0dWIncyBtZW1iZXIgY2FuIG5vdCBiZSB0b3JuIG9mZiwgdGhlIFtjYWxsTmFtZV0gaXMgYG51bGxgLgogIGpzLk5hbWUgY2FsbE5hbWU7CgogIFBhcmFtZXRlclN0dWJNZXRob2QoanMuTmFtZSBuYW1lLCB0aGlzLmNhbGxOYW1lLCBqcy5FeHByZXNzaW9uIGNvZGUsCiAgICAgIHtNZW1iZXJFbnRpdHkgZWxlbWVudH0pCiAgICAgIDogc3VwZXIobmFtZSwgY29kZSwgZWxlbWVudDogZWxlbWVudCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnUGFyYW1ldGVyU3R1Yk1ldGhvZChuYW1lPSR7bmFtZS5rZXl9LCBjYWxsTmFtZT0ke2NhbGxOYW1lPy5rZXl9JwogICAgICAgICcsIGVsZW1lbnQ9JHtlbGVtZW50fScKICAgICAgICAnLCBjb2RlPSR7anMubm9kZVRvU3RyaW5nKGNvZGUpfSknOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgU3RhdGljTWV0aG9kIGltcGxlbWVudHMgTWV0aG9kIHsKICBIb2xkZXIgZ2V0IGhvbGRlcjsKfQoKY2xhc3MgU3RhdGljRGFydE1ldGhvZCBleHRlbmRzIERhcnRNZXRob2QgaW1wbGVtZW50cyBTdGF0aWNNZXRob2QgewogIEBvdmVycmlkZQogIGZpbmFsIEhvbGRlciBob2xkZXI7CgogIFN0YXRpY0RhcnRNZXRob2QoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIGpzLk5hbWUgbmFtZSwKICAgICAgdGhpcy5ob2xkZXIsCiAgICAgIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAgTGlzdDxQYXJhbWV0ZXJTdHViTWV0aG9kPiBwYXJhbWV0ZXJTdHVicywKICAgICAganMuTmFtZSBjYWxsTmFtZSwKICAgICAge2Jvb2wgbmVlZHNUZWFyT2ZmLAogICAgICBqcy5OYW1lIHRlYXJPZmZOYW1lLAogICAgICBib29sIGNhbkJlQXBwbGllZCwKICAgICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgIC8qIExpc3QgfCBNYXAgKi8gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICBqcy5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZSwKICAgICAgaW50IGFwcGx5SW5kZXh9KQogICAgICA6IHN1cGVyKGVsZW1lbnQsIG5hbWUsIGNvZGUsIHBhcmFtZXRlclN0dWJzLCBjYWxsTmFtZSwKICAgICAgICAgICAgbmVlZHNUZWFyT2ZmOiBuZWVkc1RlYXJPZmYsCiAgICAgICAgICAgIHRlYXJPZmZOYW1lOiB0ZWFyT2ZmTmFtZSwKICAgICAgICAgICAgY2FuQmVBcHBsaWVkOiBjYW5CZUFwcGxpZWQsCiAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczogb3B0aW9uYWxQYXJh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RnVuY3Rpb25UeXBlOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCcgc2hvdyBOYXRpdmVDb2RlZ2VuRW5xdWV1ZXI7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ2NvZGVfZW1pdHRlcl90YXNrLmRhcnQnIHNob3cgQ29kZUVtaXR0ZXJUYXNrOwppbXBvcnQgJ21vZGVsLmRhcnQnOwoKY2xhc3MgTmF0aXZlRW1pdHRlciB7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIF9lbWl0dGVyVGFzazsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIE5hdGl2ZUNvZGVnZW5FbnF1ZXVlciBfbmF0aXZlQ29kZWdlbkVucXVldWVyOwoKICAvLyBXaGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBjb250YWlucyBuYXRpdmUgY2xhc3Nlcy4KICBib29sIGhhc05hdGl2ZUNsYXNzZXMgPSBmYWxzZTsKCiAgLy8gQ2FjaGVzIHRoZSBuYXRpdmUgc3VidHlwZXMgb2YgYSBuYXRpdmUgY2xhc3MuCiAgTWFwPENsYXNzRW50aXR5LCBMaXN0PENsYXNzRW50aXR5Pj4gc3VidHlwZXMgPQogICAgICA8Q2xhc3NFbnRpdHksIExpc3Q8Q2xhc3NFbnRpdHk+Pnt9OwoKICAvLyBDYWNoZXMgdGhlIGRpcmVjdCBuYXRpdmUgc3VidHlwZXMgb2YgYSBuYXRpdmUgY2xhc3MuCiAgTWFwPENsYXNzRW50aXR5LCBMaXN0PENsYXNzRW50aXR5Pj4gZGlyZWN0U3VidHlwZXMgPQogICAgICA8Q2xhc3NFbnRpdHksIExpc3Q8Q2xhc3NFbnRpdHk+Pnt9OwoKICAvLyBDYWNoZXMgdGhlIG1ldGhvZHMgdGhhdCBoYXZlIGEgbmF0aXZlIGJvZHkuCiAgU2V0PEZ1bmN0aW9uRW50aXR5PiBuYXRpdmVNZXRob2RzID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgTmF0aXZlRW1pdHRlcigKICAgICAgdGhpcy5fZW1pdHRlclRhc2ssIHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLl9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIpOwoKICBKQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwogIE5hdGl2ZURhdGEgZ2V0IF9uYXRpdmVEYXRhID0+IF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhOwogIEludGVyY2VwdG9yRGF0YSBnZXQgX2ludGVyY2VwdG9yRGF0YSA9PiBfY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhOwoKICAvLy8gUHJlcGFyZXMgbmF0aXZlIGNsYXNzZXMgZm9yIGVtaXNzaW9uLiBSZXR1cm5zIHRoZSB1bm5lZWRlZCBjbGFzc2VzLgogIC8vLwogIC8vLyBSZW1vdmVzIHRyaXZpYWwgY2xhc3NlcyAodGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgYSBzdXBlciB0eXBlKSBhbmQKICAvLy8gZ2VuZXJhdGVzIHByb3BlcnRpZXMgdGhhdCBoYXZlIHRvIGJlIGFkZGVkIHRvIGNsYXNzZXMgKG5hdGl2ZSBvciBub3QpLgogIC8vLwogIC8vLyBVcGRhdGVzIHRoZSBgbmF0aXZlTGVhZlRhZ3NgLCBgbmF0aXZlTm9uTGVhZlRhZ3NgIGFuZCBgbmF0aXZlRXh0ZW5zaW9uc2AKICAvLy8gZmllbGRzIG9mIHRoZSBnaXZlbiBjbGFzc2VzLiBUaGlzIGRhdGEgbXVzdCBiZSBlbWl0dGVkIHdpdGggdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgY2xhc3Nlcy4KICAvLy8KICAvLy8gVGhlIGludGVyY2VwdG9ycyBhcmUgZmlsdGVyZWQgdG8gYXZvaWQgZW1pdHRpbmcgdHJpdmlhbCBpbnRlcmNlcHRvcnMuICBGb3IKICAvLy8gZXhhbXBsZSwgaWYgdGhlIHByb2dyYW0gY29udGFpbnMgbm8gY29kZSB0aGF0IGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZQogIC8vLyBudW1lcm91cyBzdWJjbGFzc2VzIG9mIGBFbGVtZW50YCB0aGVuIHdlIGNhbiBwcmV0ZW5kIHRoYXQgYEVsZW1lbnRgIGlzIGEKICAvLy8gbGVhZiBjbGFzcywgYW5kIGFsbCBpbnN0YW5jZXMgb2Ygc3ViY2xhc3NlcyBvZiBgRWxlbWVudGAgYXJlIGluc3RhbmNlcyBvZgogIC8vLyBgRWxlbWVudGAuCiAgLy8vCiAgLy8vIFRoZXJlIGlzIGFsc28gYSBwZXJmb3JtYW5jZSBiZW5lZml0IChpbiBhZGRpdGlvbiB0byB0aGUgb2J2aW91cyBjb2RlIHNpemUKICAvLy8gYmVuZWZpdCksIGR1ZSB0byBob3cgW2dldE5hdGl2ZUludGVyY2VwdG9yXSB3b3Jrcy4gIEZpbmRpbmcgdGhlCiAgLy8vIGludGVyY2VwdG9yIG9mIGEgbGVhZiBjbGFzcyBpbiB0aGUgaGllcmFyY2h5IGlzIG1vcmUgZWZmaWNpZW50IHRoYXQgYQogIC8vLyBub24tbGVhZiwgc28gaXQgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugd2hlbiBtb3JlIGNsYXNzZXMgY2FuIGJlIHRyZWF0ZWQgYXMKICAvLy8gbGVhdmVzLgogIC8vLwogIC8vLyBbY2xhc3Nlc10gY29udGFpbnMgbmF0aXZlIGNsYXNzZXMsIG1peGluIGFwcGxpY2F0aW9ucywgYW5kIHVzZXIgc3ViY2xhc3NlcwogIC8vLyBvZiBuYXRpdmUgY2xhc3Nlcy4KICAvLy8KICAvLy8gW2ludGVyY2VwdG9yQ2xhc3Nlc05lZWRlZEJ5Q29uc3RhbnRzXSBjb250YWlucyB0aGUgaW50ZXJjZXB0b3JzIHRoYXQgYXJlCiAgLy8vIHJlZmVyZW5jZWQgYnkgY29uc3RhbnRzLgogIC8vLwogIC8vLyBbY2xhc3Nlc01vZGlmaWVkQnlFbWl0UlRJU3VwcG9ydF0gY29udGFpbnMgdGhlIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IG11c3QKICAvLy8gZXhpc3QsIGJlY2F1c2UgcnVudGltZS10eXBlIHN1cHBvcnQgYWRkcyBpbmZvcm1hdGlvbiB0byB0aGUgY2xhc3MuCiAgU2V0PENsYXNzPiBwcmVwYXJlTmF0aXZlQ2xhc3NlcygKICAgICAgTGlzdDxDbGFzcz4gY2xhc3NlcywKICAgICAgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRvckNsYXNzZXNOZWVkZWRCeUNvbnN0YW50cywKICAgICAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNsYXNzZXNOZWVkZWRGb3JSdGkpIHsKICAgIGFzc2VydChjbGFzc2VzLmV2ZXJ5KChDbGFzcyBjbHMpID0+IGNscyAhPSBudWxsKSk7CgogICAgaGFzTmF0aXZlQ2xhc3NlcyA9IGNsYXNzZXMuaXNOb3RFbXB0eTsKCiAgICAvLyBDb21wdXRlIGEgcHJlLW9yZGVyIHRyYXZlcnNhbCBvZiB0aGUgc3ViY2xhc3MgZm9yZXN0LiAgV2UgYWN0dWFsbHkgd2FudCBhCiAgICAvLyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBidXQgaXQgaXMgZWFzaWVyIHRvIGNvbXB1dGUgdGhlIHByZS1vcmRlciBhbmQgdXNlIGl0CiAgICAvLyBpbiByZXZlcnNlLgogICAgTGlzdDxDbGFzcz4gcHJlT3JkZXIgPSA8Q2xhc3M+W107CiAgICBTZXQ8Q2xhc3M+IHNlZW4gPSBuZXcgU2V0PENsYXNzPigpOwoKICAgIENsYXNzIG9iamVjdENsYXNzID0gbnVsbDsKICAgIENsYXNzIGpzSW50ZXJjZXB0b3JDbGFzcyA9IG51bGw7CgogICAgdm9pZCB3YWxrKENsYXNzIGNscykgewogICAgICBpZiAoY2xzLmVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgICAgb2JqZWN0Q2xhc3MgPSBjbHM7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChjbHMuZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNJbnRlcmNlcHRvckNsYXNzKSB7CiAgICAgICAganNJbnRlcmNlcHRvckNsYXNzID0gY2xzOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoc2Vlbi5jb250YWlucyhjbHMpKSByZXR1cm47CiAgICAgIHNlZW4uYWRkKGNscyk7CiAgICAgIHdhbGsoY2xzLnN1cGVyY2xhc3MpOwogICAgICBwcmVPcmRlci5hZGQoY2xzKTsKICAgIH0KCiAgICBjbGFzc2VzLmZvckVhY2god2Fsayk7CgogICAgLy8gRmluZCB3aGljaCBjbGFzc2VzIGFyZSBuZWVkZWQgYW5kIHdoaWNoIGFyZSBub24tbGVhZiBjbGFzc2VzLiAgQW55IGNsYXNzCiAgICAvLyB0aGF0IGlzIG5vdCBuZWVkZWQgY2FuIGJlIHRyZWF0ZWQgYXMgYSBsZWFmIGNsYXNzIGVxdWl2YWxlbnQgdG8gc29tZQogICAgLy8gbmVlZGVkIGNsYXNzLgoKICAgIFNldDxDbGFzcz4gbmVlZGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3M+KCk7CiAgICBTZXQ8Q2xhc3M+IG5vbkxlYWZDbGFzc2VzID0gbmV3IFNldDxDbGFzcz4oKTsKCiAgICBNYXA8Q2xhc3MsIExpc3Q8Q2xhc3M+PiBleHRlbnNpb25Qb2ludHMgPSBjb21wdXRlRXh0ZW5zaW9uUG9pbnRzKHByZU9yZGVyKTsKCiAgICBuZWVkZWRDbGFzc2VzLmFkZChvYmplY3RDbGFzcyk7CgogICAgZm9yIChDbGFzcyBjbHMgaW4gcHJlT3JkZXIucmV2ZXJzZWQpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gY2xzLmVsZW1lbnQ7CiAgICAgIC8vIFBvc3Qtb3JkZXIgdHJhdmVyc2FsIGVuc3VyZXMgd2UgdmlzaXQgdGhlIHN1YmNsYXNzZXMgYmVmb3JlIHRoZWlyCiAgICAgIC8vIHN1cGVyY2xhc3MuICBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gdGVsbCBpZiBhIGNsYXNzIGlzIG5lZWRlZCBiZWNhdXNlIGEKICAgICAgLy8gc3ViY2xhc3MgaXMgbmVlZGVkLgogICAgICBib29sIG5lZWRlZCA9IGZhbHNlOwogICAgICBpZiAoIWNscy5pc05hdGl2ZSkgewogICAgICAgIC8vIE1peGluIGFwcGxpY2F0aW9ucyAobmF0aXZlK21peGluKSBhcmUgbm9uLW5hdGl2ZSwgc28gW2NsYXNzRWxlbWVudF0KICAgICAgICAvLyBoYXMgYWxyZWFkeSBiZWVuIGVtaXR0ZWQgYXMgYSByZWd1bGFyIGNsYXNzLiAgTWFyayBbY2xhc3NFbGVtZW50XSBhcwogICAgICAgIC8vICduZWVkZWQnIHRvIGVuc3VyZSB0aGUgbmF0aXZlIHN1cGVyY2xhc3MgaXMgbmVlZGVkLgogICAgICAgIG5lZWRlZCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoIWlzVHJpdmlhbENsYXNzKGNscykpIHsKICAgICAgICBuZWVkZWQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGludGVyY2VwdG9yQ2xhc3Nlc05lZWRlZEJ5Q29uc3RhbnRzLmNvbnRhaW5zKGNsYXNzRWxlbWVudCkpIHsKICAgICAgICBuZWVkZWQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGNsYXNzZXNOZWVkZWRGb3JSdGkuY29udGFpbnMoY2xhc3NFbGVtZW50KSkgewogICAgICAgIG5lZWRlZCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9uUG9pbnRzLmNvbnRhaW5zS2V5KGNscykpIHsKICAgICAgICBuZWVkZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNsYXNzRWxlbWVudCkpIHsKICAgICAgICBuZWVkZWQgPSB0cnVlOyAvLyBUT0RPKGphY29icik6IHdlIGRvbid0IG5lZWQgYWxsIGludGVyb3AgY2xhc3Nlcy4KICAgICAgfSBlbHNlIGlmIChjbHMuaXNOYXRpdmUgJiYKICAgICAgICAgIF9uYXRpdmVEYXRhLmhhc05hdGl2ZVRhZ3NGb3JjZWROb25MZWFmKGNsYXNzRWxlbWVudCkpIHsKICAgICAgICBuZWVkZWQgPSB0cnVlOwogICAgICAgIG5vbkxlYWZDbGFzc2VzLmFkZChjbHMpOwogICAgICB9CgogICAgICBpZiAobmVlZGVkIHx8IG5lZWRlZENsYXNzZXMuY29udGFpbnMoY2xzKSkgewogICAgICAgIG5lZWRlZENsYXNzZXMuYWRkKGNscyk7CiAgICAgICAgbmVlZGVkQ2xhc3Nlcy5hZGQoY2xzLnN1cGVyY2xhc3MpOwogICAgICAgIG5vbkxlYWZDbGFzc2VzLmFkZChjbHMuc3VwZXJjbGFzcyk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDb2xsZWN0IGFsbCB0aGUgdGFncyB0aGF0IG1hcCB0byBlYWNoIG5hdGl2ZSBjbGFzcy4KCiAgICBNYXA8Q2xhc3MsIFNldDxTdHJpbmc+PiBsZWFmVGFncyA9IG5ldyBNYXA8Q2xhc3MsIFNldDxTdHJpbmc+PigpOwogICAgTWFwPENsYXNzLCBTZXQ8U3RyaW5nPj4gbm9ubGVhZlRhZ3MgPSBuZXcgTWFwPENsYXNzLCBTZXQ8U3RyaW5nPj4oKTsKCiAgICBmb3IgKENsYXNzIGNscyBpbiBjbGFzc2VzKSB7CiAgICAgIGlmICghY2xzLmlzTmF0aXZlKSBjb250aW51ZTsKICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IGNscy5lbGVtZW50OwogICAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhlbGVtZW50KSkgY29udGludWU7CiAgICAgIExpc3Q8U3RyaW5nPiBuYXRpdmVUYWdzID0gX25hdGl2ZURhdGEuZ2V0TmF0aXZlVGFnc09mQ2xhc3MoY2xzLmVsZW1lbnQpOwoKICAgICAgaWYgKG5vbkxlYWZDbGFzc2VzLmNvbnRhaW5zKGNscykgfHwgZXh0ZW5zaW9uUG9pbnRzLmNvbnRhaW5zS2V5KGNscykpIHsKICAgICAgICBub25sZWFmVGFncwogICAgICAgICAgICAucHV0SWZBYnNlbnQoY2xzLCAoKSA9PiBuZXcgU2V0PFN0cmluZz4oKSkKICAgICAgICAgICAgLmFkZEFsbChuYXRpdmVUYWdzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBDbGFzcyBzdWZmaWNpbmdJbnRlcmNlcHRvciA9IGNsczsKICAgICAgICB3aGlsZSAoIW5lZWRlZENsYXNzZXMuY29udGFpbnMoc3VmZmljaW5nSW50ZXJjZXB0b3IpKSB7CiAgICAgICAgICBzdWZmaWNpbmdJbnRlcmNlcHRvciA9IHN1ZmZpY2luZ0ludGVyY2VwdG9yLnN1cGVyY2xhc3M7CiAgICAgICAgfQogICAgICAgIGlmIChzdWZmaWNpbmdJbnRlcmNlcHRvciA9PSBvYmplY3RDbGFzcykgewogICAgICAgICAgc3VmZmljaW5nSW50ZXJjZXB0b3IgPSBqc0ludGVyY2VwdG9yQ2xhc3M7CiAgICAgICAgfQogICAgICAgIGxlYWZUYWdzCiAgICAgICAgICAgIC5wdXRJZkFic2VudChzdWZmaWNpbmdJbnRlcmNlcHRvciwgKCkgPT4gbmV3IFNldDxTdHJpbmc+KCkpCiAgICAgICAgICAgIC5hZGRBbGwobmF0aXZlVGFncyk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGZpbGxOYXRpdmVJbmZvKENsYXNzIGNscykgewogICAgICBhc3NlcnQoY2xzLm5hdGl2ZUxlYWZUYWdzID09IG51bGwgJiYKICAgICAgICAgIGNscy5uYXRpdmVOb25MZWFmVGFncyA9PSBudWxsICYmCiAgICAgICAgICBjbHMubmF0aXZlRXh0ZW5zaW9ucyA9PSBudWxsKTsKICAgICAgaWYgKGxlYWZUYWdzW2Nsc10gIT0gbnVsbCkgewogICAgICAgIGNscy5uYXRpdmVMZWFmVGFncyA9IGxlYWZUYWdzW2Nsc10udG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIH0KICAgICAgaWYgKG5vbmxlYWZUYWdzW2Nsc10gIT0gbnVsbCkgewogICAgICAgIGNscy5uYXRpdmVOb25MZWFmVGFncyA9IG5vbmxlYWZUYWdzW2Nsc10udG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIH0KICAgICAgY2xzLm5hdGl2ZUV4dGVuc2lvbnMgPSBleHRlbnNpb25Qb2ludHNbY2xzXTsKICAgIH0KCiAgICAvLyBBZGQgcHJvcGVydGllcyBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29uc3RydWN0IG1hcHMgdXNlZAogICAgLy8gYnkgZ2V0TmF0aXZlSW50ZXJjZXB0b3IgYW5kIGN1c3RvbSBlbGVtZW50cy4KICAgIGlmIChfbmF0aXZlQ29kZWdlbkVucXVldWVyLmhhc0luc3RhbnRpYXRlZE5hdGl2ZUNsYXNzZXMpIHsKICAgICAgZmlsbE5hdGl2ZUluZm8oanNJbnRlcmNlcHRvckNsYXNzKTsKICAgICAgZm9yIChDbGFzcyBjbHMgaW4gY2xhc3NlcykgewogICAgICAgIGlmICghY2xzLmlzTmF0aXZlIHx8IG5lZWRlZENsYXNzZXMuY29udGFpbnMoY2xzKSkgewogICAgICAgICAgZmlsbE5hdGl2ZUluZm8oY2xzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKHNyYSk6IElzc3VlICMxMzczMS0gdGhpcyBpcyBjb21tZW50ZWQgb3V0IGFzIHBhcnQgb2YgY3VzdG9tCiAgICAvLyBlbGVtZW50IGNvbnN0cnVjdG9yIHdvcmsuCiAgICAvLyAoZmxvaXRzY2g6IHdhcyBydW4gb24gZXZlcnkgbmF0aXZlIGNsYXNzLikKICAgIC8vYXNzZXJ0KCFjbGFzc0VsZW1lbnQuaGFzQmFja2VuZE1lbWJlcnMpOwoKICAgIHJldHVybiBjbGFzc2VzCiAgICAgICAgLndoZXJlKChDbGFzcyBjbHMpID0+IGNscy5pc05hdGl2ZSAmJiAhbmVlZGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpKQogICAgICAgIC50b1NldCgpOwogIH0KCiAgLy8vIENvbXB1dGVzIHRoZSBuYXRpdmUgY2xhc3NlcyB0aGF0IGFyZSBleHRlbmRlZCAoc3ViY2xhc3NlZCkgYnkgbm9uLW5hdGl2ZQogIC8vLyBjbGFzc2VzIGFuZCB0aGUgc2V0IG5vbi1tYXRpdmUgY2xhc3NlcyB0aGF0IGV4dGVuZCB0aGVtLiAgKEEgTGlzdCBpcyB1c2VkCiAgLy8vIGluc3RlYWQgb2YgYSBTZXQgZm9yIG91dCBzdGFiaWxpdHkpLgogIE1hcDxDbGFzcywgTGlzdDxDbGFzcz4+IGNvbXB1dGVFeHRlbnNpb25Qb2ludHMoTGlzdDxDbGFzcz4gY2xhc3NlcykgewogICAgQ2xhc3MgbmF0aXZlU3VwZXJjbGFzc09mKENsYXNzIGNscykgewogICAgICBpZiAoY2xzID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBpZiAoY2xzLmlzTmF0aXZlKSByZXR1cm4gY2xzOwogICAgICByZXR1cm4gbmF0aXZlU3VwZXJjbGFzc09mKGNscy5zdXBlcmNsYXNzKTsKICAgIH0KCiAgICBDbGFzcyBuYXRpdmVBbmNlc3Rvck9mKENsYXNzIGNscykgewogICAgICByZXR1cm4gbmF0aXZlU3VwZXJjbGFzc09mKGNscy5zdXBlcmNsYXNzKTsKICAgIH0KCiAgICBNYXA8Q2xhc3MsIExpc3Q8Q2xhc3M+PiBtYXAgPSBuZXcgTWFwPENsYXNzLCBMaXN0PENsYXNzPj4oKTsKCiAgICBmb3IgKENsYXNzIGNscyBpbiBjbGFzc2VzKSB7CiAgICAgIGlmIChjbHMuaXNOYXRpdmUpIGNvbnRpbnVlOwogICAgICBDbGFzcyBuYXRpdmVBbmNlc3RvciA9IG5hdGl2ZUFuY2VzdG9yT2YoY2xzKTsKICAgICAgaWYgKG5hdGl2ZUFuY2VzdG9yICE9IG51bGwpIHsKICAgICAgICBtYXAucHV0SWZBYnNlbnQobmF0aXZlQW5jZXN0b3IsICgpID0+IDxDbGFzcz5bXSkuYWRkKGNscyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBib29sIGlzVHJpdmlhbENsYXNzKENsYXNzIGNscykgewogICAgYm9vbCBuZWVkc0FjY2Vzc29yKEZpZWxkIGZpZWxkKSB7CiAgICAgIHJldHVybiBmaWVsZC5uZWVkc0dldHRlciB8fAogICAgICAgICAgZmllbGQubmVlZHNVbmNoZWNrZWRTZXR0ZXIgfHwKICAgICAgICAgIGZpZWxkLm5lZWRzQ2hlY2tlZFNldHRlcjsKICAgIH0KCiAgICByZXR1cm4gY2xzLm1ldGhvZHMuaXNFbXB0eSAmJgogICAgICAgIGNscy5pc0NoZWNrcy5pc0VtcHR5ICYmCiAgICAgICAgY2xzLmNhbGxTdHVicy5pc0VtcHR5ICYmCiAgICAgICAgIWNscy5zdXBlcmNsYXNzLmlzU2ltcGxlTWl4aW5BcHBsaWNhdGlvbiAmJgogICAgICAgICFjbHMuZmllbGRzLmFueShuZWVkc0FjY2Vzc29yKTsKICB9CgogIHZvaWQgcG90ZW50aWFsbHlDb252ZXJ0RGFydENsb3N1cmVzVG9KcyhMaXN0PGpzQXN0LlN0YXRlbWVudD4gc3RhdGVtZW50cywKICAgICAgRnVuY3Rpb25FbnRpdHkgbWVtYmVyLCBMaXN0PGpzQXN0LlBhcmFtZXRlcj4gc3R1YlBhcmFtZXRlcnMpIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gY2xvc3VyZUNvbnZlcnRlcjsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFBhcmFtZXRlcihtZW1iZXIsCiAgICAgICAgKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBfKSB7CiAgICAgIC8vIElmIFtuYW1lXSBpcyBub3QgaW4gW3N0dWJQYXJhbWV0ZXJzXSwgdGhlbiB0aGUgcGFyYW1ldGVyIGlzIGFuIG9wdGlvbmFsCiAgICAgIC8vIHBhcmFtZXRlciB0aGF0IHdhcyBub3QgcHJvdmlkZWQgZm9yIHRoaXMgc3R1Yi4KICAgICAgZm9yIChqc0FzdC5QYXJhbWV0ZXIgc3R1YlBhcmFtZXRlciBpbiBzdHViUGFyYW1ldGVycykgewogICAgICAgIGlmIChzdHViUGFyYW1ldGVyLm5hbWUgPT0gbmFtZSkgewogICAgICAgICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwogICAgICAgICAgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgICAgICAgY2xvc3VyZUNvbnZlcnRlciA/Pz0gX2VtaXR0ZXJUYXNrLmVtaXR0ZXIKICAgICAgICAgICAgICAgIC5zdGF0aWNGdW5jdGlvbkFjY2VzcyhfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNvbnZlcnRlcik7CgogICAgICAgICAgICAvLyBUaGUgcGFyYW1ldGVyIHR5cGUgaXMgYSBmdW5jdGlvbiB0eXBlIGVpdGhlciBkaXJlY3RseSBvciB0aHJvdWdoCiAgICAgICAgICAgIC8vIHR5cGVkZWYocykuCiAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSB0eXBlOwogICAgICAgICAgICBpbnQgYXJpdHkgPSBmdW5jdGlvblR5cGUucGFyYW1ldGVyVHlwZXMubGVuZ3RoOwogICAgICAgICAgICBzdGF0ZW1lbnRzLmFkZChqcwogICAgICAgICAgICAgICAgLnN0YXRlbWVudCgnIyA9ICMoIywgJGFyaXR5KScsIFtuYW1lLCBjbG9zdXJlQ29udmVydGVyLCBuYW1lXSkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgTGlzdDxqc0FzdC5TdGF0ZW1lbnQ+IGdlbmVyYXRlUGFyYW1ldGVyU3R1YlN0YXRlbWVudHMoCiAgICAgIEZ1bmN0aW9uRW50aXR5IG1lbWJlciwKICAgICAgYm9vbCBpc0ludGVyY2VwdGVkTWV0aG9kLAogICAgICBqc0FzdC5OYW1lIGludm9jYXRpb25OYW1lLAogICAgICBMaXN0PGpzQXN0LlBhcmFtZXRlcj4gc3R1YlBhcmFtZXRlcnMsCiAgICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzQnVmZmVyLAogICAgICBpbnQgaW5kZXhPZkxhc3RPcHRpb25hbEFyZ3VtZW50SW5QYXJhbWV0ZXJzKSB7CiAgICAvLyBUaGUgdGFyZ2V0IEpTIGZ1bmN0aW9uIG1heSBjaGVjayBhcmd1bWVudHMubGVuZ3RoIHNvIHdlIG5lZWQgdG8KICAgIC8vIG1ha2Ugc3VyZSBub3QgdG8gcGFzcyBhbnkgdW5zcGVjaWZpZWQgb3B0aW9uYWwgYXJndW1lbnRzIHRvIGl0LgogICAgLy8gRm9yIGV4YW1wbGUsIGZvciB0aGUgZm9sbG93aW5nIERhcnQgbWV0aG9kOgogICAgLy8gICBmb28oe3gsIHksIHp9KTsKICAgIC8vIFRoZSBjYWxsOgogICAgLy8gICBmb28oeTogMSkKICAgIC8vIG11c3QgYmUgdHVybmVkIGludG8gYSBKUyBjYWxsIHRvOgogICAgLy8gICBmb28obnVsbCwgeSkuCgogICAgTGlzdDxqc0FzdC5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSA8anNBc3QuU3RhdGVtZW50PltdOwogICAgcG90ZW50aWFsbHlDb252ZXJ0RGFydENsb3N1cmVzVG9KcyhzdGF0ZW1lbnRzLCBtZW1iZXIsIHN0dWJQYXJhbWV0ZXJzKTsKCiAgICBTdHJpbmcgdGFyZ2V0OwogICAganNBc3QuRXhwcmVzc2lvbiByZWNlaXZlcjsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzOwoKICAgIGFzc2VydChuYXRpdmVNZXRob2RzLmNvbnRhaW5zKG1lbWJlciksIGZhaWxlZEF0KG1lbWJlcikpOwogICAgLy8gV2hlbiBjYWxsaW5nIGEgSlMgbWV0aG9kLCB3ZSBjYWxsIGl0IHdpdGggdGhlIG5hdGl2ZSBuYW1lLCBhbmQgb25seSB0aGUKICAgIC8vIGFyZ3VtZW50cyB1cCB1bnRpbCB0aGUgbGFzdCBvbmUgcHJvdmlkZWQuCiAgICB0YXJnZXQgPSBfbmF0aXZlRGF0YS5nZXRGaXhlZEJhY2tlbmROYW1lKG1lbWJlcik7CgogICAgaWYgKGlzSW50ZXJjZXB0ZWRNZXRob2QpIHsKICAgICAgcmVjZWl2ZXIgPSBhcmd1bWVudHNCdWZmZXJbMF07CiAgICAgIGFyZ3VtZW50cyA9IGFyZ3VtZW50c0J1ZmZlci5zdWJsaXN0KAogICAgICAgICAgMSwgaW5kZXhPZkxhc3RPcHRpb25hbEFyZ3VtZW50SW5QYXJhbWV0ZXJzICsgMSk7CiAgICB9IGVsc2UgewogICAgICAvLyBOYXRpdmUgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW50ZXJjZXB0ZWQgbXVzdCBiZSBzdGF0aWMuCiAgICAgIGFzc2VydChtZW1iZXIuaXNTdGF0aWMsIGZhaWxlZEF0KG1lbWJlcikpOwogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHNCdWZmZXIuc3VibGlzdCgKICAgICAgICAgIDAsIGluZGV4T2ZMYXN0T3B0aW9uYWxBcmd1bWVudEluUGFyYW1ldGVycyArIDEpOwogICAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BNZW1iZXIobWVtYmVyKSkgewogICAgICAgIC8vIGZpeGVkQmFja2VuZFBhdGggaXMgYWxsb3dlZCB0byBoYXZlIHRoZSBmb3JtIGZvby5iYXIuYmF6IGZvcgogICAgICAgIC8vIGludGVyb3AuIFRoaXMgdGVtcGxhdGUgaXMgdW5jYWNoZWQgdG8gYXZvaWQgcG9zc2libHkgcnVubmluZyBvdXQgb2YKICAgICAgICAvLyBtZW1vcnkgd2hlbiBEYXJ0MkpzIGlzIHJ1biBpbiBzZXJ2ZXIgbW9kZS4gSW4gcmVhbGl0eSB0aGUgcmlzayBvZgogICAgICAgIC8vIGNhY2hpbmcgdGhlc2UgdGVtcGxhdGVzIGNhdXNpbmcgYW4gaXNzdWUgIGlzIHZlcnkgbG93IGFzIGVhY2ggY2xhc3MKICAgICAgICAvLyBhbmQgbGlicmFyeSB0aGF0IHVzZXMgdHlwZWQgSmF2YVNjcmlwdCBpbnRlcm9wIHdpbGwgY3JlYXRlIG9ubHkgMQogICAgICAgIC8vIHVuaXF1ZSB0ZW1wbGF0ZS4KICAgICAgICByZWNlaXZlciA9IGpzCiAgICAgICAgICAgIC51bmNhY2hlZEV4cHJlc3Npb25UZW1wbGF0ZSgKICAgICAgICAgICAgICAgIF9uYXRpdmVEYXRhLmdldEZpeGVkQmFja2VuZE1ldGhvZFBhdGgobWVtYmVyKSkKICAgICAgICAgICAgLmluc3RhbnRpYXRlKFtdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZWNlaXZlciA9IGpzKCd0aGlzJyk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRlbWVudHMKICAgICAgICAuYWRkKGpzLnN0YXRlbWVudCgncmV0dXJuICMuIygjKScsIFtyZWNlaXZlciwgdGFyZ2V0LCBhcmd1bWVudHNdKSk7CgogICAgcmV0dXJuIHN0YXRlbWVudHM7CiAgfQoKICBib29sIGlzU3VwZXJ0eXBlT2ZOYXRpdmVDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoX2ludGVyY2VwdG9yRGF0YS5pc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3MoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIHN1YnR5cGVzW2VsZW1lbnRdICE9IG51bGw7CiAgfQoKICBib29sIHJlcXVpcmVzTmF0aXZlSXNDaGVjayhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICAvLyBUT0RPKHNyYSk6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uLiAgSXQgZGV0ZXJtaW5lcyBpZiBhIG5hdGl2ZSB0eXBlIG1heQogICAgLy8gc2F0aXNmeSBhIGNoZWNrIGFnYWluc3QgW2VsZW1lbnRdLCBpbiB3aGljaCBjYXNlIGFuIGludGVyY2VwdG9yIG11c3QgYmUKICAgIC8vIHVzZWQuICBXZSBzaG91bGQgYWxzbyB1c2UgYW4gaW50ZXJjZXB0b3IgaWYgdGhlIGNoZWNrIGNhbid0IGJlIHNhdGlzZmllZAogICAgLy8gYnkgYSBuYXRpdmUgY2xhc3MgaW4gY2FzZSB3ZSBnZXQgYSBuYXRpdmUgaW5zdGFuY2UgdGhhdCB0cmllcyB0byBzcG9vZgogICAgLy8gdGhlIHR5cGUgaW5mby4gIGkuZSB0aGUgY3JpdGVyaWEgZm9yIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBhbiBpbnRlcmNlcHRvcgogICAgLy8gaXMgd2hldGhlciB0aGUgcmVjZWl2ZXIgY2FuIGJlIG5hdGl2ZSwgbm90IHRoZSB0eXBlIG9mIHRoZSB0ZXN0LgogICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudDsKICAgIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBpc1N1cGVydHlwZU9mTmF0aXZlQ2xhc3MoZWxlbWVudCk7CiAgfQp9CoFvAE5OPAErARlMPSQhIC4pPCoBNhUBFiYjNgE2IQEzMSoBOjcqATFBARFKAUYxJzlIAUoGTE0GT0YdBlFQT1ARBlBGTE8OBlEZBk8fBk9JIxs8MzcBKwFRURMmKAEeJQEbOBsQCD8iEAgmFRwZBgEbAVBMFQExMgFQASQBKy5LUB0bG09QPxcpF08XPxc1Fwg4SyFCFyEIATMgKywIBgE7AUZJASEjKTtPAU4UNyEPKkBCCjM1ChFIIQgGASUrKykjRAgmSggzBgFPND8qIzwfCggGAUghMi8BE0wSBAFPUCtIKiQkMQYBKDEGAUEBISI0JEMIBhAEASMmIigkBgEiICE0KAQBTEUnMSpROD4qISU2SQFQGy48HlETDAoICAQBOR0gISwuNUdHMxkREykXATxMARMfJgE+TzE2AR8lKzsNQTErOzNIT01PTRwWKT8eDx8IBg9MARcEATdBEwYBJgQBNExPUE5RSB8/LgQCATNwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL25hdGl2ZV9lbWl0dGVyLmRhcnRAc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci90eXBlX3Rlc3RfcmVnaXN0cnkuZGFydIl2Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnR5cGVfdGVzdF9yZWdpc3RyeTsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydCcKICAgIHNob3cgUnVudGltZVR5cGVzQ2hlY2tzLCBSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnCiAgICBzaG93IFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnM7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CgpjbGFzcyBUeXBlVGVzdFJlZ2lzdHJ5IHsKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKCiAgLy8vIEFmdGVyIFtjb21wdXRlTmVlZGVkQ2xhc3Nlc10gdGhpcyBzZXQgb25seSBjb250YWlucyBjbGFzc2VzIHRoYXQgYXJlIG9ubHkKICAvLy8gdXNlZCBmb3IgUlRJLgogIFNldDxDbGFzc0VudGl0eT4gX3J0aU5lZWRlZENsYXNzZXM7CgogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKCiAgUnVudGltZVR5cGVzQ2hlY2tzIF9ydGlDaGVja3M7CgogIFR5cGVUZXN0UmVnaXN0cnkodGhpcy5fb3B0aW9ucywgdGhpcy5fZWxlbWVudEVudmlyb25tZW50KTsKCiAgUnVudGltZVR5cGVzQ2hlY2tzIGdldCBydGlDaGVja3MgewogICAgYXNzZXJ0KAogICAgICAgIF9ydGlDaGVja3MgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJSdW50aW1lVHlwZXNDaGVja3MgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC4iKSk7CiAgICByZXR1cm4gX3J0aUNoZWNrczsKICB9CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgcnRpTmVlZGVkQ2xhc3NlcyB7CiAgICBhc3NlcnQoCiAgICAgICAgX3J0aU5lZWRlZENsYXNzZXMgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJydGlOZWVkZWRDbGFzc2VzIGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQuIikpOwogICAgcmV0dXJuIF9ydGlOZWVkZWRDbGFzc2VzOwogIH0KCiAgdm9pZCBjb21wdXRlUnRpTmVlZGVkQ2xhc3NlcyhSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zIHJ0aVN1YnN0aXR1dGlvbnMsCiAgICAgIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gbGl2ZU1lbWJlcnMpIHsKICAgIF9ydGlOZWVkZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgICB2b2lkIGFkZENsYXNzV2l0aFN1cGVyY2xhc3NlcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgX3J0aU5lZWRlZENsYXNzZXMuYWRkKGNscyk7CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICAgICAgc3VwZXJjbGFzcyAhPSBudWxsOwogICAgICAgICAgc3VwZXJjbGFzcyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhzdXBlcmNsYXNzKSkgewogICAgICAgIF9ydGlOZWVkZWRDbGFzc2VzLmFkZChzdXBlcmNsYXNzKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYWRkQ2xhc3Nlc1dpdGhTdXBlcmNsYXNzZXMoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gY2xhc3NlcykgewogICAgICAgIGFkZENsYXNzV2l0aFN1cGVyY2xhc3NlcyhjbHMpOwogICAgICB9CiAgICB9CgogICAgLy8gQWRkIGNsYXNzZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0eXBlIGFyZ3VtZW50cyBvciBzdWJzdGl0dXRpb25zIGluCiAgICAvLyBhcmd1bWVudCBjaGVja3MuCiAgICBhZGRDbGFzc2VzV2l0aFN1cGVyY2xhc3NlcyhydGlDaGVja3MucmVxdWlyZWRDbGFzc2VzKTsKICB9CgogIHZvaWQgY29tcHV0ZVJlcXVpcmVkVHlwZUNoZWNrcygKICAgICAgUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlciBydGlDaGVja3NCdWlsZGVyLCBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkKSB7CiAgICBfcnRpQ2hlY2tzID0gcnRpQ2hlY2tzQnVpbGRlci5jb21wdXRlUmVxdWlyZWRDaGVja3MoY29kZWdlbldvcmxkLCBfb3B0aW9ucyk7CiAgfQp9CkwATk48AS8BGSIkKjgyJBoxARkwAVAUJgEiASEBPQElDBwoPxcEAS8MIyg9HgQBSywwATUiTB5IKwgGAUUpJwgGAU0YOwQBIk9RBAIBN3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvdHlwZV90ZXN0X3JlZ2lzdHJ5LmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZWxlbWVudHMvaW5kZXhlZC5kYXJ0oUAvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEluZGV4ZWQgZW50aXR5IGludGVyZmFjZXMgZm9yIG1vZGVsaW5nIGVsZW1lbnRzIGRlcml2ZWQgZnJvbSBLZXJuZWwgSVIuCgppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgX0luZGV4ZWQgewogIGludCBfaW5kZXg7Cn0KCmFic3RyYWN0IGNsYXNzIEluZGV4ZWRMaWJyYXJ5IGV4dGVuZHMgX0luZGV4ZWQgaW1wbGVtZW50cyBMaWJyYXJ5RW50aXR5IHsKICAvLy8gTGlicmFyeSBpbmRleCB1c2VkIGZvciBmYXN0IGxvb2t1cCBpbiBbS2VybmVsVG9FbGVtZW50TWFwQmFzZV0uCiAgaW50IGdldCBsaWJyYXJ5SW5kZXggPT4gX2luZGV4OwogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gNyAqIF9pbmRleCArIDI7Cn0KCmFic3RyYWN0IGNsYXNzIEluZGV4ZWRDbGFzcyBleHRlbmRzIF9JbmRleGVkIGltcGxlbWVudHMgQ2xhc3NFbnRpdHkgewogIC8vLyBDbGFzcyBpbmRleCB1c2VkIGZvciBmYXN0IGxvb2t1cCBpbiBbS2VybmVsVG9FbGVtZW50TWFwQmFzZV0uCiAgaW50IGdldCBjbGFzc0luZGV4ID0+IF9pbmRleDsKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDcgKiBfaW5kZXggKyAxOwp9CgphYnN0cmFjdCBjbGFzcyBJbmRleGVkTWVtYmVyIGV4dGVuZHMgX0luZGV4ZWQgaW1wbGVtZW50cyBNZW1iZXJFbnRpdHkgewogIC8vLyBNZW1iZXIgaW5kZXggdXNlZCBmb3IgZmFzdCBsb29rdXAgaW4gW0tlcm5lbFRvRWxlbWVudE1hcEJhc2VdLgogIGludCBnZXQgbWVtYmVySW5kZXggPT4gX2luZGV4OwogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gNyAqIF9pbmRleDsKfQoKYWJzdHJhY3QgY2xhc3MgSW5kZXhlZEZ1bmN0aW9uIGV4dGVuZHMgX0luZGV4ZWQKICAgIGltcGxlbWVudHMgSW5kZXhlZE1lbWJlciwgRnVuY3Rpb25FbnRpdHkge30KCmFic3RyYWN0IGNsYXNzIEluZGV4ZWRDb25zdHJ1Y3RvcgogICAgaW1wbGVtZW50cyBJbmRleGVkRnVuY3Rpb24sIENvbnN0cnVjdG9yRW50aXR5IHt9CgphYnN0cmFjdCBjbGFzcyBJbmRleGVkRmllbGQgaW1wbGVtZW50cyBJbmRleGVkTWVtYmVyLCBGaWVsZEVudGl0eSB7fQoKYWJzdHJhY3QgY2xhc3MgSW5kZXhlZFR5cGVWYXJpYWJsZSBleHRlbmRzIF9JbmRleGVkCiAgICBpbXBsZW1lbnRzIFR5cGVWYXJpYWJsZUVudGl0eSB7CiAgLy8vIFR5cGUgdmFyaWFibGUgaW5kZXggdXNlZCBmb3IgZmFzdCBsb29rdXAgaW4gW0tlcm5lbFRvRWxlbWVudE1hcEJhc2VdLgogIGludCBnZXQgdHlwZVZhcmlhYmxlSW5kZXggPT4gX2luZGV4Owp9CgphYnN0cmFjdCBjbGFzcyBJbmRleGVkVHlwZWRlZiBleHRlbmRzIF9JbmRleGVkIGltcGxlbWVudHMgVHlwZWRlZkVudGl0eSB7CiAgLy8vIFR5cGVkZWYgaW5kZXggdXNlZCBmb3IgZmFzdCBsb29rdXAgaW4gW0tlcm5lbFRvRWxlbWVudE1hcEJhc2VdLgogIGludCBnZXQgdHlwZWRlZkluZGV4ID0+IF9pbmRleDsKfQoKYWJzdHJhY3QgY2xhc3MgSW5kZXhlZExvY2FsIGV4dGVuZHMgX0luZGV4ZWQgaW1wbGVtZW50cyBMb2NhbCB7CiAgaW50IGdldCBsb2NhbEluZGV4ID0+IF9pbmRleDsKfQoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb24gZm9yIGFuIGluZGV4IGJhc2VkIG1hcCBvZiBlbnRpdGllcyBvZiB0eXBlIFtFXS4KYWJzdHJhY3QgY2xhc3MgRW50aXR5TWFwQmFzZTxFIGV4dGVuZHMgX0luZGV4ZWQ+IHsKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKCiAgaW50IF9zaXplID0gMDsKICBMaXN0PEU+IF9saXN0ID0gPEU+W107CgogIC8vLyBSZXR1cm5zIHRoZSBbaW5kZXhddGggZW50aXR5IGluIHRoZSBtYXAuCiAgRSBnZXRFbnRpdHkoaW50IGluZGV4KSA9PiBfbGlzdFtpbmRleF07CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygbm9uLW51bGwgZW50aXRpZXMgaW4gdGhlIG1hcC4KICBpbnQgZ2V0IHNpemUgPT4gX3NpemU7CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgKG51bGwgYW5kIG5vbi1udWxsKSBlbnRpdGllcyBpbiB0aGUgbWFwLgogIGludCBnZXQgbGVuZ3RoID0+IF9saXN0Lmxlbmd0aDsKCiAgLy8vIENsb3NlcyB0aGUgZW50aXR5IG1hcCwgcHJvaGliaXRpbmcgZnVydGhlciByZWdpc3RyYXRpb24uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBubyBuZXcgZW50aXRpZXMgYXJlIGFkZGVkIHdoaWxlIHNlcmlhbGl6aW5nCiAgLy8vIG1vZHVsYXIgY29kZSBnZW5lcmF0aW9uIGRhdGEuCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jbG9zZWQgPSB0cnVlOwogIH0KfQoKLy8vIEluZGV4IGJhc2VkIG1hcCBvZiBlbnRpdGllcyBvZiB0eXBlIFtFXS4KY2xhc3MgRW50aXR5TWFwPEUgZXh0ZW5kcyBfSW5kZXhlZD4gZXh0ZW5kcyBFbnRpdHlNYXBCYXNlPEU+IHsKICAvLy8gUmVnaXN0ZXJzIGEgbmV3IFtlbnRpdHldLgogIC8vLwogIC8vLyBUaGUgaW5kZXggb2YgW2VudGl0eV0gaXMgc2V0IHRvIG1hdGNoIGl0cyBpbmRleCBpbiB0aGUgZW50aXR5IGxpc3QgaW4gdGhpcwogIC8vLyBtYXAuCiAgRTAgcmVnaXN0ZXI8RTAgZXh0ZW5kcyBFPihFMCBlbnRpdHkpIHsKICAgIGFzc2VydCgKICAgICAgICAhX2Nsb3NlZCwgIlRyeWluZyB0byByZWdpc3RlciAkZW50aXR5IEAgJHtfbGlzdC5sZW5ndGh9IHdoZW4gY2xvc2VkLiIpOwogICAgYXNzZXJ0KGVudGl0eSAhPSBudWxsKTsKICAgIGFzc2VydChlbnRpdHkuX2luZGV4ID09IG51bGwpOwogICAgZW50aXR5Ll9pbmRleCA9IF9saXN0Lmxlbmd0aDsKICAgIF9saXN0LmFkZChlbnRpdHkpOwogICAgX3NpemUrKzsKICAgIHJldHVybiBlbnRpdHk7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIGEgbmV3IFtlbnRpdHldIGJ5IHRoZSBnaXZlbiBbaW5kZXhdLgogIEUwIHJlZ2lzdGVyQnlJbmRleDxFMCBleHRlbmRzIEU+KGludCBpbmRleCwgRTAgZW50aXR5KSB7CiAgICBhc3NlcnQoaW5kZXggPj0gX2xpc3QubGVuZ3RoKTsKICAgIF9saXN0Lmxlbmd0aCA9IGluZGV4OwogICAgcmV0dXJuIHJlZ2lzdGVyKGVudGl0eSk7CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIG5vbi1udWxsIGVudGl0eS4KICB2b2lkIGZvckVhY2g8RTAgZXh0ZW5kcyBFPih2b2lkIGYoRTAgZW50aXR5KSkgewogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IF9saXN0Lmxlbmd0aDsgaW5kZXgrKykgewogICAgICBFIGVudGl0eSA9IF9saXN0W2luZGV4XTsKICAgICAgaWYgKGVudGl0eSAhPSBudWxsKSB7CiAgICAgICAgZihlbnRpdHkpOwogICAgICB9CiAgICB9CiAgfQp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBhbiBpbmRleCBiYXNlZCBtYXAgb2YgZW50aXRpZXMgb2YgdHlwZSBbRV0gd2l0aCBhCi8vLyBjb3JyZXNwb25kaW5nIGRhdGEgb2JqZWN0IG9mIHR5cGUgW0RdLgphYnN0cmFjdCBjbGFzcyBFbnRpdHlEYXRhTWFwQmFzZTxFIGV4dGVuZHMgX0luZGV4ZWQsIEQ+CiAgICBleHRlbmRzIEVudGl0eU1hcEJhc2U8RT4gewogIExpc3Q8RD4gX2RhdGEgPSA8RD5bXTsKCiAgLy8vIFJldHVybnMgdGhlIGRhdGEgb2JqZWN0IHN0b3JlZCBmb3IgdGhlIFtpbmRleF10aCBlbnRpdHkuCiAgRCBnZXREYXRhKEUgZW50aXR5KSB7CiAgICBpbnQgaW5kZXggPSBlbnRpdHkuX2luZGV4OwogICAgaWYgKGluZGV4IDwgX2xpc3QubGVuZ3RoICYmIGluZGV4ID49IF9kYXRhLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigKICAgICAgICAgICdEYXRhIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQgZm9yICR7X2xpc3RbaW5kZXhdfS4nKTsKICAgIH0KICAgIHJldHVybiBfZGF0YVtpbmRleF07CiAgfQp9CgovLy8gSW5kZXggYmFzZWQgbWFwIG9mIGVudGl0aWVzIG9mIHR5cGUgW0VdIHdpdGggYSBjb3JyZXNwb25kaW5nIGRhdGEgb2JqZWN0Ci8vLyBvZiB0eXBlIFtEXS4KY2xhc3MgRW50aXR5RGF0YU1hcDxFIGV4dGVuZHMgX0luZGV4ZWQsIEQ+IGV4dGVuZHMgRW50aXR5RGF0YU1hcEJhc2U8RSwgRD4gewogIC8vLyBNYXJrIGVudGl0eSBbaW5kZXhdIGFzIG1pc3NpbmcKICB2b2lkIHNraXBJbmRleChpbnQgaW5kZXgpIHsKICAgIGFzc2VydChpbmRleCA9PSBfbGlzdC5sZW5ndGgpOwogICAgX2xpc3QuYWRkKG51bGwpOwogICAgX2RhdGEuYWRkKG51bGwpOwogIH0KCiAgLy8vIFJlZ2lzdGVycyBhIG5ldyBbZW50aXR5XSB3aXRoIGFuIGFzc29jaWF0ZWQgW2RhdGFdIG9iamVjdC4KICAvLy8KICAvLy8gVGhlIGluZGV4IG9mIFtlbnRpdHldIGlzIHNldCB0byBtYXRjaCBpdHMgaW5kZXggaW4gdGhlIGVudGl0eSBhbmQgZGF0YQogIC8vLyBsaXN0cyBpbiB0aGlzIG1hcC4KICBFMCByZWdpc3RlcjxFMCBleHRlbmRzIEUsIEQwIGV4dGVuZHMgRD4oRTAgZW50aXR5LCBEMCBkYXRhKSB7CiAgICBhc3NlcnQoCiAgICAgICAgIV9jbG9zZWQsICJUcnlpbmcgdG8gcmVnaXN0ZXIgJGVudGl0eSBAICR7X2xpc3QubGVuZ3RofSB3aGVuIGNsb3NlZC4iKTsKICAgIGFzc2VydChlbnRpdHkgIT0gbnVsbCk7CiAgICBhc3NlcnQoZW50aXR5Ll9pbmRleCA9PSBudWxsKTsKICAgIGFzc2VydCgKICAgICAgICBfbGlzdC5sZW5ndGggPT0gX2RhdGEubGVuZ3RoLAogICAgICAgICdEYXRhIGxpc3QgbGVuZ3RoICR7X2RhdGEubGVuZ3RofSBpbmNvbnNpc3RlbnQgJwogICAgICAgICd3aXRoIGVudGl0eSBsaXN0IGxlbmd0aCAke19saXN0Lmxlbmd0aH0uJyk7CiAgICBlbnRpdHkuX2luZGV4ID0gX2xpc3QubGVuZ3RoOwogICAgX2xpc3QuYWRkKGVudGl0eSk7CiAgICBfc2l6ZSsrOwogICAgYXNzZXJ0KGRhdGEgIT0gbnVsbCk7CiAgICBfZGF0YS5hZGQoZGF0YSk7CiAgICByZXR1cm4gZW50aXR5OwogIH0KCiAgLy8vIFJlZ2lzdGVycyBhIG5ldyBbZW50aXR5XSB3aXRoIGFuIGFzc29jaWF0ZWQgW2RhdGFdIG9iamVjdCBieSB0aGUgZ2l2ZW4KICAvLy8gW2luZGV4XS4KICBFMCByZWdpc3RlckJ5SW5kZXg8RTAgZXh0ZW5kcyBFLCBEMCBleHRlbmRzIEQ+KAogICAgICBpbnQgaW5kZXgsIEUwIGVudGl0eSwgRDAgZGF0YSkgewogICAgYXNzZXJ0KGluZGV4ID49IF9saXN0Lmxlbmd0aCk7CiAgICBfbGlzdC5sZW5ndGggPSBfZGF0YS5sZW5ndGggPSBpbmRleDsKICAgIHJldHVybiByZWdpc3RlcihlbnRpdHksIGRhdGEpOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBub24tbnVsbCBlbnRpdHkgd2l0aCBpdHMgY29ycmVzcG9uZGluZyBkYXRhIG9iamVjdC4KICB2b2lkIGZvckVhY2g8RTAgZXh0ZW5kcyBFLCBEMCBleHRlbmRzIEQ+KHZvaWQgZihFMCBlbnRpdHksIEQwIGRhdGEpKSB7CiAgICBpZiAoX2xpc3QubGVuZ3RoICE9IF9kYXRhLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignRGF0YSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkLicpOwogICAgfQogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IF9saXN0Lmxlbmd0aDsgaW5kZXgrKykgewogICAgICBFIGVudGl0eSA9IF9saXN0W2luZGV4XTsKICAgICAgaWYgKGVudGl0eSAhPSBudWxsKSB7CiAgICAgICAgZihlbnRpdHksIF9kYXRhW2luZGV4XSk7CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIGZvciBhbiBpbmRleCBiYXNlZCBvZiBlbnRpdGllcyBvZiB0eXBlIFtFXSB3aXRoIGEKLy8vIGNvcnJlc3BvbmRpbmcgZGF0YSBvYmplY3Qgb2YgdHlwZSBbRF0gYW5kIGFuIGVudmlyb25tZW50IG9mIHR5cGUgW1ZdLgphYnN0cmFjdCBjbGFzcyBFbnRpdHlEYXRhRW52TWFwQmFzZTxFIGV4dGVuZHMgX0luZGV4ZWQsIEQsIFY+CiAgICBleHRlbmRzIEVudGl0eURhdGFNYXBCYXNlPEUsIEQ+IHsKICBMaXN0PFY+IF9lbnYgPSA8Vj5bXTsKCiAgLy8vIFJldHVybnMgdGhlIGVudmlyb25tZW50IG9iamVjdCBzdG9yZWQgZm9yIHRoZSBbaW5kZXhddGggZW50aXR5LgogIFYgZ2V0RW52KEUgZW50aXR5KSB7CiAgICBpbnQgaW5kZXggPSBlbnRpdHkuX2luZGV4OwogICAgaWYgKGluZGV4IDwgX2xpc3QubGVuZ3RoICYmIGluZGV4ID49IF9lbnYubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKAogICAgICAgICAgJ0VudiBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkIGZvciAke19saXN0W2luZGV4XX0uJyk7CiAgICB9CiAgICByZXR1cm4gX2VudltpbmRleF07CiAgfQp9CgovLy8gSW5kZXggYmFzZWQgb2YgZW50aXRpZXMgb2YgdHlwZSBbRV0gd2l0aCBhIGNvcnJlc3BvbmRpbmcgZGF0YSBvYmplY3Qgb2YKLy8vIHR5cGUgW0RdIGFuZCBhbiBlbnZpcm9ubWVudCBvZiB0eXBlIFtWXS4KY2xhc3MgRW50aXR5RGF0YUVudk1hcDxFIGV4dGVuZHMgX0luZGV4ZWQsIEQsIFY+CiAgICBleHRlbmRzIEVudGl0eURhdGFFbnZNYXBCYXNlPEUsIEQsIFY+IHsKICAvLy8gUmVnaXN0ZXJzIGEgbmV3IFtlbnRpdHldIHdpdGggYW4gYXNzb2NpYXRlZCBbZGF0YV0gb2JqZWN0IGFuZCBlbnZpcm9ubWVudAogIC8vLyBbZW52XS4KICAvLy8KICAvLy8gVGhlIGluZGV4IG9mIFtlbnRpdHldIGlzIHNldCB0byBtYXRjaCBpdHMgaW5kZXggaW4gdGhlIGVudGl0eSwgZGF0YSBhbmQKICAvLy8gZW52aXJvbm1lbnQgbGlzdHMgaW4gdGhpcyBtYXAuCiAgRTAgcmVnaXN0ZXI8RTAgZXh0ZW5kcyBFLCBEMCBleHRlbmRzIEQsIFYwIGV4dGVuZHMgVj4oCiAgICAgIEUwIGVudGl0eSwgRDAgZGF0YSwgVjAgZW52KSB7CiAgICBhc3NlcnQoCiAgICAgICAgIV9jbG9zZWQsICJUcnlpbmcgdG8gcmVnaXN0ZXIgJGVudGl0eSBAICR7X2xpc3QubGVuZ3RofSB3aGVuIGNsb3NlZC4iKTsKICAgIGFzc2VydChlbnRpdHkgIT0gbnVsbCk7CiAgICBhc3NlcnQoZW50aXR5Ll9pbmRleCA9PSBudWxsKTsKICAgIGFzc2VydCgKICAgICAgICBfbGlzdC5sZW5ndGggPT0gX2RhdGEubGVuZ3RoLAogICAgICAgICdEYXRhIGxpc3QgbGVuZ3RoICR7X2RhdGEubGVuZ3RofSBpbmNvbnNpc3RlbnQgJwogICAgICAgICd3aXRoIGVudGl0eSBsaXN0IGxlbmd0aCAke19saXN0Lmxlbmd0aH0uJyk7CiAgICBhc3NlcnQoCiAgICAgICAgX2xpc3QubGVuZ3RoID09IF9lbnYubGVuZ3RoLAogICAgICAgICdFbnYgbGlzdCBsZW5ndGggJHtfZW52Lmxlbmd0aH0gaW5jb25zaXN0ZW50ICcKICAgICAgICAnd2l0aCBlbnRpdHkgbGlzdCBsZW5ndGggJHtfbGlzdC5sZW5ndGh9LicpOwogICAgZW50aXR5Ll9pbmRleCA9IF9saXN0Lmxlbmd0aDsKICAgIF9saXN0LmFkZChlbnRpdHkpOwogICAgX3NpemUrKzsKICAgIGFzc2VydChkYXRhICE9IG51bGwpOwogICAgX2RhdGEuYWRkKGRhdGEpOwogICAgYXNzZXJ0KGVudiAhPSBudWxsKTsKICAgIF9lbnYuYWRkKGVudik7CiAgICByZXR1cm4gZW50aXR5OwogIH0KCiAgLy8vIFJlZ2lzdGVycyBhIG5ldyBbZW50aXR5XSB3aXRoIGFuIGFzc29jaWF0ZWQgW2RhdGFdIG9iamVjdCBhbmQgZW52aXJvbm1lbnQKICAvLy8gW2Vudl0gYnkgdGhlIGdpdmVuIFtpbmRleF0uCiAgRTAgcmVnaXN0ZXJCeUluZGV4PEUwIGV4dGVuZHMgRSwgRDAgZXh0ZW5kcyBELCBWMCBleHRlbmRzIFY+KAogICAgICBpbnQgaW5kZXgsIEUwIGVudGl0eSwgRDAgZGF0YSwgVjAgZW52KSB7CiAgICBhc3NlcnQoaW5kZXggPj0gX2xpc3QubGVuZ3RoKTsKICAgIF9saXN0Lmxlbmd0aCA9IF9kYXRhLmxlbmd0aCA9IF9lbnYubGVuZ3RoID0gaW5kZXg7CiAgICByZXR1cm4gcmVnaXN0ZXIoZW50aXR5LCBkYXRhLCBlbnYpOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBub24tbnVsbCBlbnRpdHkgd2l0aCBpdHMgY29ycmVzcG9uZGluZyBkYXRhIG9iamVjdCBhbmQKICAvLy8gZW52aXJvbm1lbnQuCiAgdm9pZCBmb3JFYWNoPEUwIGV4dGVuZHMgRSwgRDAgZXh0ZW5kcyBELCBWMCBleHRlbmRzIFY+KAogICAgICB2b2lkIGYoRTAgZW50aXR5LCBEMCBkYXRhLCBWMCBlbnYpKSB7CiAgICBpZiAoX2xpc3QubGVuZ3RoICE9IF9kYXRhLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignRGF0YSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkLicpOwogICAgfQogICAgaWYgKF9saXN0Lmxlbmd0aCAhPSBfZW52Lmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignRW52IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQuJyk7CiAgICB9CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgX2xpc3QubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIEUgZW50aXR5ID0gX2xpc3RbaW5kZXhdOwogICAgICBpZiAoZW50aXR5ICE9IG51bGwpIHsKICAgICAgICBmKGVudGl0eSwgX2RhdGFbaW5kZXhdLCBfZW52W2luZGV4XSk7CiAgICAgIH0KICAgIH0KICB9Cn0KgQoATk48AUwBJAEaDgIBSkYiDCYCAUZEIAwmAgFIRSEMIgIBMDABIjUBRQE0JEwnAgFKRiICAUAgAgFIMxgBERkBLyoBOhkBQiIBPwZOJBEUBAIBLT8gBlELKQxQHCMiFw0TBAE1OyMaHQQBKjI5HxwTCAYEAgFNKzgfGQE/GB85HEsGGQQCAU0RTSUeIxUVBAFBBk0ZQAxQHCMMJjk1IhcNGhUTBAFNDzInIykjBAFNSShIBjkfHCEIBgQCAUpKPiYYAUYXHzgcSgYYBAIBTC0xLFANBk4lOSQMUBwjDCY5NQwlNzUiFw0aFRkTEwQBUCJALyM3KAQBUBM6LChIBidHBjkfHC4IBgQCASpwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9pbmRleGVkLmRhcnQvc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvY29uc3RhbnRzLmRhcnSWNC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2tlcm5lbC9kYXJ0MmpzX3RhcmdldC5kYXJ0JzsKCnR5cGVkZWYgUmVwb3J0RXJyb3JGdW5jdGlvbiA9IHZvaWQgRnVuY3Rpb24oCiAgICBpci5Mb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBMaXN0PGlyLkxvY2F0ZWRNZXNzYWdlPiBjb250ZXh0KTsKCmNsYXNzIERhcnQyanNDb25zdGFudEV2YWx1YXRvciBleHRlbmRzIGlyLkNvbnN0YW50RXZhbHVhdG9yIHsKICBmaW5hbCBib29sIF9zdXBwb3J0UmVldmFsdWF0aW9uRm9yVGVzdGluZzsKCiAgYm9vbCByZXF1aXJlc0NvbnN0YW50OwoKICBEYXJ0MmpzQ29uc3RhbnRFdmFsdWF0b3IoCiAgICAgIGlyLlR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFJlcG9ydEVycm9yRnVuY3Rpb24gcmVwb3J0RXJyb3IsCiAgICAgIHtNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50OiBjb25zdCB7fSwKICAgICAgYm9vbCBzdXBwb3J0UmVldmFsdWF0aW9uRm9yVGVzdGluZzogZmFsc2V9KQogICAgICA6IF9zdXBwb3J0UmVldmFsdWF0aW9uRm9yVGVzdGluZyA9IHN1cHBvcnRSZWV2YWx1YXRpb25Gb3JUZXN0aW5nLAogICAgICAgIHN1cGVyKAogICAgICAgICAgICBjb25zdCBEYXJ0MmpzQ29uc3RhbnRzQmFja2VuZChzdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzOiBmYWxzZSksCiAgICAgICAgICAgIGVudmlyb25tZW50LAogICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgICAgIG5ldyBFcnJvclJlcG9ydGVyKHJlcG9ydEVycm9yKSk7CgogIEBvdmVycmlkZQogIEVycm9yUmVwb3J0ZXIgZ2V0IGVycm9yUmVwb3J0ZXIgPT4gc3VwZXIuZXJyb3JSZXBvcnRlcjsKCiAgQG92ZXJyaWRlCiAgaXIuQ29uc3RhbnQgZXZhbHVhdGUoaXIuRXhwcmVzc2lvbiBub2RlLCB7Ym9vbCByZXF1aXJlQ29uc3RhbnQ6IHRydWV9KSB7CiAgICBlcnJvclJlcG9ydGVyLnJlcXVpcmVzQ29uc3RhbnQgPSByZXF1aXJlQ29uc3RhbnQ7CiAgICBpZiAobm9kZSBpcyBpci5Db25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgaXIuQ29uc3RhbnQgY29uc3RhbnQgPSBub2RlLmNvbnN0YW50OwogICAgICBpZiAoY29uc3RhbnQgaXMgaXIuVW5ldmFsdWF0ZWRDb25zdGFudCkgewogICAgICAgIGlyLkNvbnN0YW50IHJlc3VsdCA9IHN1cGVyLmV2YWx1YXRlKGNvbnN0YW50LmV4cHJlc3Npb24pOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgcmVzdWx0IGlzIGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQgfHwKICAgICAgICAgICAgICAgICFyZXN1bHQuYWNjZXB0KGNvbnN0IFVuZXZhbHVhdGVkQ29uc3RhbnRGaW5kZXIoKSksCiAgICAgICAgICAgICJJbnZhbGlkIGNvbnN0YW50IHJlc3VsdCAkcmVzdWx0IGZyb20gJHtjb25zdGFudC5leHByZXNzaW9ufS4iKTsKICAgICAgICBpZiAoIV9zdXBwb3J0UmVldmFsdWF0aW9uRm9yVGVzdGluZykgewogICAgICAgICAgbm9kZS5jb25zdGFudCA9IHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29uc3RhbnQ7CiAgICB9CiAgICBpZiAocmVxdWlyZUNvbnN0YW50KSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEhhbmRsZSByZXBvcnRpbmcgb2YgY29tcGlsZS10aW1lIGNvbnN0YW50CiAgICAgIC8vIGV2YWx1YXRpb24gZXJyb3JzLgogICAgICByZXR1cm4gc3VwZXIuZXZhbHVhdGUobm9kZSk7CiAgICB9IGVsc2UgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBzdXBlci5ldmFsdWF0ZShub2RlKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgfQp9CgpjbGFzcyBFcnJvclJlcG9ydGVyIGltcGxlbWVudHMgaXIuRXJyb3JSZXBvcnRlciB7CiAgZmluYWwgUmVwb3J0RXJyb3JGdW5jdGlvbiBfcmVwb3J0RXJyb3I7CiAgYm9vbCByZXF1aXJlc0NvbnN0YW50OwoKICBFcnJvclJlcG9ydGVyKHRoaXMuX3JlcG9ydEVycm9yKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRJbnZhbGlkRXhwcmVzc2lvbihpci5JbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBJZ25vcmUuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydChpci5Mb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBMaXN0PGlyLkxvY2F0ZWRNZXNzYWdlPiBjb250ZXh0KSB7CiAgICBpZiAocmVxdWlyZXNDb25zdGFudCkgewogICAgICBfcmVwb3J0RXJyb3IobWVzc2FnZSwgY29udGV4dCk7CiAgICB9CiAgfQp9CgovLy8gW2lyLkNvbnN0YW50XSB2aXNpdG9yIHRoYXQgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZpc2l0b3IgY29uc3RhbnQgY29udGFpbnMKLy8vIGFuIFtpci5VbmV2YWx1YXRlZENvbnN0YW50XS4KY2xhc3MgVW5ldmFsdWF0ZWRDb25zdGFudEZpbmRlciBleHRlbmRzIGlyLkNvbnN0YW50VmlzaXRvcjxib29sPiB7CiAgY29uc3QgVW5ldmFsdWF0ZWRDb25zdGFudEZpbmRlcigpOwoKICBAb3ZlcnJpZGUKICBib29sIGRlZmF1bHRDb25zdGFudChpci5Db25zdGFudCBub2RlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoaXIuVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChpci5QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBub2RlLnRlYXJPZmZDb25zdGFudC5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW5zdGFuY2VDb25zdGFudChpci5JbnN0YW5jZUNvbnN0YW50IG5vZGUpIHsKICAgIGZvciAoaXIuQ29uc3RhbnQgdmFsdWUgaW4gbm9kZS5maWVsZFZhbHVlcy52YWx1ZXMpIHsKICAgICAgaWYgKHZhbHVlLmFjY2VwdCh0aGlzKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0U2V0Q29uc3RhbnQoaXIuU2V0Q29uc3RhbnQgbm9kZSkgewogICAgZm9yIChpci5Db25zdGFudCB2YWx1ZSBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgaWYgKHZhbHVlLmFjY2VwdCh0aGlzKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGlzdENvbnN0YW50KGlyLkxpc3RDb25zdGFudCBub2RlKSB7CiAgICBmb3IgKGlyLkNvbnN0YW50IHZhbHVlIGluIG5vZGUuZW50cmllcykgewogICAgICBpZiAodmFsdWUuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRNYXBDb25zdGFudChpci5NYXBDb25zdGFudCBub2RlKSB7CiAgICBmb3IgKGlyLkNvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIGlmIChlbnRyeS5rZXkuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGVudHJ5LnZhbHVlLmFjY2VwdCh0aGlzKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gQ2xhc3MgdG8gcmVwcmVzZW50IGEgcmVmZXJlbmNlIHRvIGEgY29uc3RhbnQgaW4gYWxsb2NhdGlvbiBub2Rlcy4KLy8vCi8vLyBUaGlzIGNsYXNzIGlzIG5lZWRlZCBpbiBvcmRlciB0byBzdXBwb3J0IHNlcmlhbGl6YXRpb24gb2YgcmVmZXJlbmNlcyB0bwovLy8gY29uc3RhbnQgbm9kZXMuIFNpbmNlIHRoZSBjb25zdGFudCBub2RlcyBhcmUgbm90IFtpci5UcmVlTm9kZV1zIHdlIGNhbiBvbmx5Ci8vLyBzZXJpYWxpemUgdGhlIGNvbnN0YW50cyBhcyB2YWx1ZXMgd2hpY2ggd291bGQgYnlwYXNzIGJ5IHRoZSBjYW5vbmljYWxpemF0aW9uCi8vLyBwZXJmb3JtZWQgYnkgdGhlIENGRS4gVGhpcyBjbGFzcyBleHRlbmRzIG9ubHkgYXMgYSB0cmljayB0byBlYXNpbHkgcGFzcwovLy8gaXQgdGhyb3VnaCBzZXJpYWxpemF0aW9uLgovLy8KLy8vIEJ5IGFkZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiBpbiB3aGljaCB0aGUgY29uc3RhbnQKLy8vIG9jY3VycmVkLCB3ZSBjYW4gc2VyaWFsaXplIHJlZmVyZW5jZXMgdG8gY29uc3RhbnRzIGluIHR3byBzdGVwczogYSByZWZlcmVuY2UKLy8vIHRvIHRoZSBjb25zdGFudCBleHByZXNzaW9uIGZvbGxvd2VkIGJ5IGFuIGluZGV4IG9mIHRoZSByZWZlcnJlZCBjb25zdGFudAovLy8gaW4gdGhlIHRyYXZlcnNhbCBvcmRlciBvZiB0aGUgY29uc3RhbnQgaGVsZCBieSB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbi4KLy8vCi8vLyBUaGlzIGlzIHVzZWQgZm9yIGxpc3QsIG1hcCwgYW5kIHNldCBsaXRlcmFscy4KY2xhc3MgQ29uc3RhbnRSZWZlcmVuY2UgZXh0ZW5kcyBpci5UcmVlTm9kZSB7CiAgZmluYWwgaXIuQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb247CiAgZmluYWwgaXIuQ29uc3RhbnQgY29uc3RhbnQ7CgogIENvbnN0YW50UmVmZXJlbmNlKHRoaXMuZXhwcmVzc2lvbiwgdGhpcy5jb25zdGFudCk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDaGlsZHJlbihpci5WaXNpdG9yIHYpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDb25zdGFudFJlZmVyZW5jZS52aXNpdENoaWxkcmVuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoaXIuVHJlZVZpc2l0b3IgdikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNvbnN0YW50UmVmZXJlbmNlLmFjY2VwdCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oaXIuVHJhbnNmb3JtZXIgdikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNvbnN0YW50UmVmZXJlbmNlLnRyYW5zZm9ybUNoaWxkcmVuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDEzICogY29uc3RhbnQuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgQ29uc3RhbnRSZWZlcmVuY2UgJiYgY29uc3RhbnQgPT0gb3RoZXIuY29uc3RhbnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ29uc3RhbnRSZWZlcmVuY2UoY29uc3RhbnQ9JGNvbnN0YW50KSc7Cn0KgMEATk48ASg1TEABKAEtQQE+LQEZARxLMjJID1AZHS0BDDoBDEs2KSwwQhAwQ00vIgoXCBcGG0gcIw0MJRQVCAYEAgEyKhkBJAEMPA8EAQxMHCYGBAIBTyFDJQEMMwEMRgEMUS4EAQw5OSAVCAYSBAEMLy4gFQgGEgQBDDEuIBUIBhIEAQwvNiQVCCYVCAYSBAIBRgRMUFFMHgRLUU1MBDIuKh4BNQEMJUMEAQwdPAQBDChHBAEMLgEMIy1FBAEMQAIBJnBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2NvbnN0YW50cy5kYXJ0NnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL3N0YXRpY190eXBlX2Jhc2UuZGFydJpHLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKLy8vIFNwZWNpYWwgYm90dG9tIHR5cGUgdXNlZCB0byBzaWduYWwgdGhhdCBhbiBleHByZXNzaW9uIG9yIHN0YXRlbWVudCBkb2VzCi8vLyBub3QgY29tcGxldGUgbm9ybWFsbHkuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIGluc3RhbmNlIG9mIHRocm93IGV4cHJlc3Npb25zCi8vLyBhbmQgcmV0dXJuIHN0YXRlbWVudHMuCmNsYXNzIERvZXNOb3RDb21wbGV0ZVR5cGUgZXh0ZW5kcyBpci5Cb3R0b21UeXBlIHsKICBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdEb2VzTm90Q29tcGxldGVUeXBlKCknOwp9CgovLy8gU3BlY2lhbCBpbnRlcmZhY2UgdHlwZSB1c2VkIHRvIHNpZ25hbCB0aGF0IHRoZSBzdGF0aWMgdHlwZSBvZiBhbiBleHByZXNzaW9uCi8vLyBoYXMgcHJlY2lzaW9uIG9mIGEgdGhpcy1leHByZXNzaW9uLgpjbGFzcyBUaGlzSW50ZXJmYWNlVHlwZSBleHRlbmRzIGlyLkludGVyZmFjZVR5cGUgewogIFRoaXNJbnRlcmZhY2VUeXBlKGlyLkNsYXNzIGNsYXNzTm9kZSwgW0xpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHNdKQogICAgICA6IHN1cGVyKGNsYXNzTm9kZSwgdHlwZUFyZ3VtZW50cyk7CgogIGZhY3RvcnkgVGhpc0ludGVyZmFjZVR5cGUuZnJvbShpci5JbnRlcmZhY2VUeXBlIHR5cGUpID0+IHR5cGUgIT0gbnVsbAogICAgICA/IG5ldyBUaGlzSW50ZXJmYWNlVHlwZSh0eXBlLmNsYXNzTm9kZSwgdHlwZS50eXBlQXJndW1lbnRzKQogICAgICA6IG51bGw7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICd0aGlzOiR7c3VwZXIudG9TdHJpbmcoKX0nOwp9CgovLy8gU3BlY2lhbCBpbnRlcmZhY2UgdHlwZSB1c2VkIHRvIHNpZ25hbCB0aGF0IHRoZSBzdGF0aWMgdHlwZSBvZiBhbiBleHByZXNzaW9uCi8vLyBpcyBleGFjdCwgaS5lLiB0aGUgcnVudGltZSB0eXBlIGlzIG5vdCBhIHN1YnR5cGUgb3Igc3ViY2xhc3Mgb2YgdGhlIHR5cGUuCmNsYXNzIEV4YWN0SW50ZXJmYWNlVHlwZSBleHRlbmRzIGlyLkludGVyZmFjZVR5cGUgewogIEV4YWN0SW50ZXJmYWNlVHlwZShpci5DbGFzcyBjbGFzc05vZGUsIFtMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzXSkKICAgICAgOiBzdXBlcihjbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwoKICBmYWN0b3J5IEV4YWN0SW50ZXJmYWNlVHlwZS5mcm9tKGlyLkludGVyZmFjZVR5cGUgdHlwZSkgPT4gdHlwZSAhPSBudWxsCiAgICAgID8gbmV3IEV4YWN0SW50ZXJmYWNlVHlwZSh0eXBlLmNsYXNzTm9kZSwgdHlwZS50eXBlQXJndW1lbnRzKQogICAgICA6IG51bGw7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdleGFjdDoke3N1cGVyLnRvU3RyaW5nKCl9JzsKfQoKLy8vIEJhc2UgY2xhc3MgZm9yIGNvbXB1dGluZyBzdGF0aWMgdHlwZXMuCi8vLwovLy8gVGhpcyBjbGFzcyB1c2VzIHRoZSB2aXNpdG9yIHBhdHRlcm4gdG8gY29tcHV0ZSB0aGUgc3RhdGljIHR5cGUgdGhhdCBhcmUKLy8vIGRpcmVjdGx5IGRlZmluZWQgYnkgdGhlIGV4cHJlc3Npb24ga2luZC4KLy8vCi8vLyBTdWJjbGFzc2VzIHdpbGwgY29tcHV0ZSB0aGUgc3RhdGljIHR5cGUgb3IgdXNlIGEgY2FjaGUgdG8gbG9vayB1cCB0aGUgc3RhdGljCi8vLyB0eXBlIG9mIGV4cHJlc3Npb24gd2hvc2Ugc3RhdGljIHR5cGUgaXMgbm90IGRpcmVjdGx5IGRlZmluZWQgYnkgdGhlCi8vLyBleHByZXNzaW9uIGtpbmQuIEZvciBpbnN0YW5jZSBtZXRob2QgaW52b2NhdGlvbnMgd2hvc2Ugc3RhdGljIHR5cGUgZGVwZW5kCi8vLyBvbiB0aGUgc3RhdGljIHR5cGVzIG9mIHRoZSByZWNlaXZlciBhbmQgdHlwZSBhcmd1bWVudHMgYW5kIHRoZSBzaWduYXR1cmUKLy8vIG9mIHRoZSB0YXJnZXRlZCBwcm9jZWR1cmUuCmFic3RyYWN0IGNsYXNzIFN0YXRpY1R5cGVCYXNlIGV4dGVuZHMgaXIuVmlzaXRvcjxpci5EYXJ0VHlwZT4gewogIGZpbmFsIGlyLlR5cGVFbnZpcm9ubWVudCBfdHlwZUVudmlyb25tZW50OwoKICBTdGF0aWNUeXBlQmFzZSh0aGlzLl90eXBlRW52aXJvbm1lbnQpOwoKICBmYWlsKFN0cmluZyBtZXNzYWdlKSA9PiBtZXNzYWdlOwoKICBpci5UeXBlRW52aXJvbm1lbnQgZ2V0IHR5cGVFbnZpcm9ubWVudCA9PiBfdHlwZUVudmlyb25tZW50OwoKICBUaGlzSW50ZXJmYWNlVHlwZSBnZXQgdGhpc1R5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIGRlZmF1bHROb2RlKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIG51bGw7CiAgfQoKICBpci5EYXJ0VHlwZSB2aXNpdE5vZGUoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZT8uYWNjZXB0KHRoaXMpOwogIH0KCiAgTnVsbCB2aXNpdE5vZGVzKExpc3Q8aXIuTm9kZT4gbm9kZXMpIHsKICAgIGZvciAoaXIuTm9kZSBub2RlIGluIG5vZGVzKSB7CiAgICAgIHZpc2l0Tm9kZShub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIGRlZmF1bHRFeHByZXNzaW9uKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgdGhyb3cgZmFpbCgnVW5oYW5kbGVkIG5vZGUgJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEFzRXhwcmVzc2lvbihpci5Bc0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGUudHlwZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0QXdhaXRFeHByZXNzaW9uKGlyLkF3YWl0RXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LnVuZnV0dXJlVHlwZSh2aXNpdE5vZGUobm9kZS5vcGVyYW5kKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEJvb2xMaXRlcmFsKGlyLkJvb2xMaXRlcmFsIG5vZGUpID0+IHR5cGVFbnZpcm9ubWVudC5ib29sVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChpci5DaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlKSA9PgogICAgICB0eXBlRW52aXJvbm1lbnQub2JqZWN0VHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbm9kZSkgPT4KICAgICAgdHlwZUVudmlyb25tZW50LnN0cmluZ1R5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQuc3RyaW5nVHlwZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TnVsbExpdGVyYWwoaXIuTnVsbExpdGVyYWwgbm9kZSkgPT4gdHlwZUVudmlyb25tZW50Lm51bGxUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEludExpdGVyYWwoaXIuSW50TGl0ZXJhbCBub2RlKSA9PiB0eXBlRW52aXJvbm1lbnQuaW50VHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXREb3VibGVMaXRlcmFsKGlyLkRvdWJsZUxpdGVyYWwgbm9kZSkgPT4KICAgICAgdHlwZUVudmlyb25tZW50LmRvdWJsZVR5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3ltYm9sTGl0ZXJhbChpci5TeW1ib2xMaXRlcmFsIG5vZGUpID0+CiAgICAgIHR5cGVFbnZpcm9ubWVudC5zeW1ib2xUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdExpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQubGl0ZXJhbExpc3RUeXBlKG5vZGUudHlwZUFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQubGl0ZXJhbFNldFR5cGUobm9kZS50eXBlQXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRNYXBMaXRlcmFsKGlyLk1hcExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5saXRlcmFsTWFwVHlwZShub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0VmFyaWFibGVTZXQoaXIuVmFyaWFibGVTZXQgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0UHJvcGVydHlTZXQoaXIuUHJvcGVydHlTZXQgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoaXIuRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFRoaXNJbnRlcmZhY2VUeXBlIHZpc2l0VGhpc0V4cHJlc3Npb24oaXIuVGhpc0V4cHJlc3Npb24gbm9kZSkgPT4gdGhpc1R5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3RhdGljR2V0KGlyLlN0YXRpY0dldCBub2RlKSA9PiBub2RlLnRhcmdldC5nZXR0ZXJUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN0YXRpY1NldChpci5TdGF0aWNTZXQgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChpci5TdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFRocm93KGlyLlRocm93IG5vZGUpID0+IGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRSZXRocm93KGlyLlJldGhyb3cgbm9kZSkgPT4gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKGlyLkxvZ2ljYWxFeHByZXNzaW9uIG5vZGUpID0+CiAgICAgIHR5cGVFbnZpcm9ubWVudC5ib29sVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXROb3QoaXIuTm90IG5vZGUpIHsKICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihpci5Db25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGUuc3RhdGljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0SXNFeHByZXNzaW9uKGlyLklzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmJvb2xUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRUeXBlTGl0ZXJhbChpci5UeXBlTGl0ZXJhbCBub2RlKSA9PiB0eXBlRW52aXJvbm1lbnQudHlwZVR5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKGlyLkZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5mdW5jdGlvbi5mdW5jdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdExldChpci5MZXQgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRCbG9ja0V4cHJlc3Npb24oaXIuQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEludmFsaWRFeHByZXNzaW9uKGlyLkludmFsaWRFeHByZXNzaW9uIG5vZGUpID0+CiAgICAgIGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRMb2FkTGlicmFyeShpci5Mb2FkTGlicmFyeSBub2RlKSB7CiAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmZ1dHVyZVR5cGUoY29uc3QgaXIuRHluYW1pY1R5cGUoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW5jbHVkZSBpbnRlcmZhY2UgZXhhY3RuZXNzIHdoZXJlIGFwcGxpY2FibGUuCiAgICByZXR1cm4gbm9kZS5nZXRTdGF0aWNUeXBlKHR5cGVFbnZpcm9ubWVudCk7CiAgfQp9CoDrAE5OPAEoNC8xNQFMThsyHwEMMAIBUCgzSykBSEIOAQwzAgFQTjRMKQFJQw4BDDQCASsETC0EUUhOTR9ALQEpASMBPgEiAQwqEQQBKB8EASkiFwYEAQw2PgQBDDgWBAEMPkIEAQxRAQxJIgEMOyIBDEYnBAEMUQEMTgEMOyIBDDsiAQw2PwQBDDQ+BAEMNEkEAQw2IgQBDDYiBAEMQiIEAQxNAQxLAQwyIgQBDEAiBAEMSAEMTAEMQyABDCYlBAEMShwEAQw4JQQBDFEBDEQnBAEMJiEEAQw+IgQBDEMjAQw2PwQBDERKMAQCAS1wYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zdGF0aWNfdHlwZV9iYXNlLmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanMvcmV3cml0ZV9hc3luYy5kYXJ0wAF3pi8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHJld3JpdGVfYXN5bmM7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CmltcG9ydCAnZGFydDptYXRoJyBzaG93IG1heDsKCmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9hc3luY19hd2FpdF9lcnJvcl9jb2Rlcy5kYXJ0JyBhcyBlcnJvcl9jb2RlczsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JyBzaG93IFNvdXJjZUluZm9ybWF0aW9uOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IFBhaXI7CmltcG9ydCAnanMuZGFydCcgYXMganM7CgovLy8gUmV3cml0ZXMgYSBbanMuRnVuXSB3aXRoIGFzeW5jL3N5bmMqL2FzeW5jKiBmdW5jdGlvbnMgYW5kIGF3YWl0IGFuZCB5aWVsZAovLy8gKHdpdGggZGFydC1saWtlIHNlbWFudGljcykgdG8gYW4gZXF1aXZhbGVudCBmdW5jdGlvbiB3aXRob3V0IHRoZXNlLgovLy8gYXdhaXQtZm9yIGlzIG5vdCBoYW5kbGVkIGFuZCBtdXN0IGJlIHJld3JpdHRlbiBiZWZvcmUuIChDdXJyZW50bHkgaGFuZGxlZAovLy8gaW4gc3NhL2J1aWxkZXIuZGFydCkuCi8vLwovLy8gV2hlbiBnZW5lcmF0aW5nIHRoZSBpbnB1dCB0byB0aGlzLCBzcGVjaWFsIGNhcmUgbXVzdCBiZSB0YWtlbiB0aGF0Ci8vLyBwYXJhbWV0ZXJzIHRvIHN5bmMqIGZ1bmN0aW9ucyB0aGF0IGFyZSBtdXRhdGVkIGluIHRoZSBib2R5IG11c3QgYmUgYm94ZWQuCi8vLyAoQ3VycmVudGx5IGhhbmRsZWQgaW4gY2xvc3VyZS5kYXJ0KS4KLy8vCi8vLyBMb29rIGF0IFtyZXdyaXRlRnVuY3Rpb25dLCBbdmlzaXREYXJ0WWllbGRdIGFuZCBbdmlzaXRBd2FpdF0gZm9yIG1vcmUKLy8vIGV4cGxhbmF0aW9uLgphYnN0cmFjdCBjbGFzcyBBc3luY1Jld3JpdGVyQmFzZSBleHRlbmRzIGpzLk5vZGVWaXNpdG9yIHsKICAvLyBMb2NhbCB2YXJpYWJsZXMgYXJlIGhvaXN0ZWQgdG8gdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24sIHNvIHRoZXkgYXJlCiAgLy8gY29sbGVjdGVkIGhlcmUuCiAgTGlzdDxqcy5WYXJpYWJsZURlY2xhcmF0aW9uPiBsb2NhbFZhcmlhYmxlcyA9IDxqcy5WYXJpYWJsZURlY2xhcmF0aW9uPltdOwoKICBNYXA8anMuTm9kZSwgaW50PiBjb250aW51ZUxhYmVscyA9IG5ldyBNYXA8anMuTm9kZSwgaW50PigpOwogIE1hcDxqcy5Ob2RlLCBpbnQ+IGJyZWFrTGFiZWxzID0gbmV3IE1hcDxqcy5Ob2RlLCBpbnQ+KCk7CgogIC8vLyBUaGUgbGFiZWwgb2YgYSBmaW5hbGx5IHBhcnQuCiAgTWFwPGpzLkJsb2NrLCBpbnQ+IGZpbmFsbHlMYWJlbHMgPSBuZXcgTWFwPGpzLkJsb2NrLCBpbnQ+KCk7CgogIC8vLyBUaGUgbGFiZWwgb2YgdGhlIGNhdGNoIGhhbmRsZXIgb2YgYSBbanMuVHJ5XSBvciBhIFtqcy5GdW5dIG9yIFtqcy5DYXRjaF0uCiAgLy8vCiAgLy8vIFRoZXNlIG1hcmsgdGhlIHBvaW50cyBhbiBlcnJvciBjYW4gYmUgY29uc3VtZWQuCiAgLy8vCiAgLy8vIC0gVGhlIGhhbmRsZXIgb2YgYSBbanMuRnVuXSBpcyB0aGUgb3V0ZXJtb3N0IGFuZCB3aWxsIHJldGhyb3cgdGhlIGVycm9yLgogIC8vLyAtIFRoZSBoYW5kbGVyIG9mIGEgW2pzLlRyeV0gd2lsbCBydW4gdGhlIGNhdGNoIGhhbmRsZXIuCiAgLy8vIC0gVGhlIGhhbmRsZXIgb2YgYSBbanMuQ2F0Y2hdIGlzIGEgc3ludGhldGljIGhhbmRsZXIgdGhhdCBlbnN1cmVzIHRoZQogIC8vLyAgIHJpZ2h0IGZpbmFsbHkgYmxvY2tzIGFyZSBydW4gaWYgYW4gZXJyb3IgaXMgdGhyb3duIGluc2lkZSBhCiAgLy8vICAgY2F0Y2gtaGFuZGxlci4KICBNYXA8anMuTm9kZSwgaW50PiBoYW5kbGVyTGFiZWxzID0gbmV3IE1hcDxqcy5Ob2RlLCBpbnQ+KCk7CgogIGludCBleGl0TGFiZWw7CiAgaW50IHJldGhyb3dMYWJlbDsKCiAgLy8vIEEgc3RhY2sgb2YgYWxsIChzdXJyb3VuZGluZykganVtcCB0YXJnZXRzLgogIC8vLwogIC8vLyBKdW1wIHRhcmdldHMgYXJlOgogIC8vLwogIC8vLyAqIFRoZSBmdW5jdGlvbiwgc2lnbmFsbGluZyBhIHJldHVybiBvciB1bmNhdWdodCB0aHJvdy4KICAvLy8gKiBMb29wcy4KICAvLy8gKiBMYWJlbGVkU3RhdGVtZW50cyAoYWxzbyB1c2VkIGZvciAnY29udGludWUnIHdoZW4gYXR0YWNoZWQgdG8gbG9vcHMpLgogIC8vLyAqIFRyeSBzdGF0ZW1lbnRzLCBmb3IgY2F0Y2ggYW5kIGZpbmFsbHkgaGFuZGxlcnMuCiAgLy8vICogQ2F0Y2ggaGFuZGxlcnMsIHdoZW4gaW5zaWRlIGEgY2F0Y2gtcGFydCBvZiBhIHRyeSwgdGhlIGNhdGNoLWhhbmRsZXIgaXMKICAvLy8gICB1c2VkIHRvIGFzc29jaWF0ZSB3aXRoIGEgc3ludGhldGljIGhhbmRsZXIgdGhhdCB3aWxsIGVuc3VyZSB0aGUgcmlnaHQKICAvLy8gICBmaW5hbGx5IGJsb2NrcyBhcmUgdmlzaXRlZC4KICAvLy8KICAvLy8gV2hlbiBqdW1waW5nIHRvIGEgdGFyZ2V0IGl0IGlzIG5lY2Vzc2FyeSB0byB2aXNpdCBhbGwgZmluYWxsaWVzIHRoYXQKICAvLy8gYXJlIG9uIHRoZSB3YXkgdG8gdGFyZ2V0IChpLmUuIG1vcmUgbmVzdGVkIHRoYW4gdGhlIGp1bXAgdGFyZ2V0KS4KICBMaXN0PGpzLk5vZGU+IGp1bXBUYXJnZXRzID0gPGpzLk5vZGU+W107CgogIExpc3Q8aW50PiBjb250aW51ZVN0YWNrID0gPGludD5bXTsKICBMaXN0PGludD4gYnJlYWtTdGFjayA9IDxpbnQ+W107CiAgTGlzdDxpbnQ+IHJldHVyblN0YWNrID0gPGludD5bXTsKCiAgTGlzdDxQYWlyPFN0cmluZywgU3RyaW5nPj4gdmFyaWFibGVSZW5hbWluZ3MgPSA8UGFpcjxTdHJpbmcsIFN0cmluZz4+W107CgogIFByZVRyYW5zbGF0aW9uQW5hbHlzaXMgYW5hbHlzaXM7CgogIGZpbmFsIEZ1bmN0aW9uIHNhZmVWYXJpYWJsZU5hbWU7CgogIC8vIEFsbCB0aGUgPHg+TmFtZSB2YXJpYWJsZXMgYXJlIG5hbWVzIG9mIEphdmFzY3JpcHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlCiAgLy8gdHJhbnNmb3JtZWQgY29kZS4KCiAgLy8vIENvbnRhaW5zIHRoZSByZXN1bHQgb2YgYW4gYXdhaXRlZCBleHByZXNzaW9uLCBvciBhIGNvbmRpdGlvbmFsIG9yCiAgLy8vIGxhenkgYm9vbGVhbiBvcGVyYXRvci4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUgYSBjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIHJvdWdobHkgdHJhbnNsYXRlZCBsaWtlOgogIC8vLyBbW2NvbmQgPyBhIDogYl1dCiAgLy8vCiAgLy8vIEJlY29tZXM6CiAgLy8vCiAgLy8vIHdoaWxlIHRydWUgeyAvLyBvdXRlciB3aGlsZSBsb29wCiAgLy8vICAgc3dpdGNoIChnb3RvKSB7IC8vIFNpbXVsYXRlcyBnb3RvCiAgLy8vICAgICAuLi4KICAvLy8gICAgICAgZ290byA9IFtbY29uZF1dID8gdGhlbkxhYmVsIDogZWxzZUxhYmVsCiAgLy8vICAgICAgIGJyZWFrOwogIC8vLyAgICAgY2FzZSB0aGVuTGFiZWw6CiAgLy8vICAgICAgIHJlc3VsdCA9IFtbYV1dOwogIC8vLyAgICAgICBnb3RvID0gam9pbkxhYmVsOwogIC8vLyAgICAgY2FzZSBlbHNlTGFiZWw6CiAgLy8vICAgICAgIHJlc3VsdCA9IFtbYl1dOwogIC8vLyAgICAgY2FzZSBqb2luTGFiZWw6CiAgLy8vICAgICAgIC8vIE5vdyB0aGUgcmVzdWx0IG9mIGNvbXB1dGluZyB0aGUgY29uZGl0aW9uIGlzIGluIHJlc3VsdC4KICAvLy8gICAgIC4uLi4KICAvLy8gICB9CiAgLy8vIH0KICAvLy8KICAvLy8gSXQgaXMgYSBwYXJhbWV0ZXIgdG8gdGhlIFtib2R5XSBmdW5jdGlvbiwgc28gdGhhdCBbYXdhaXRTdGF0ZW1lbnRdIGNhbgogIC8vLyBjYWxsIFtib2R5XSB3aXRoIHRoZSByZXN1bHQgb2YgYW4gYXdhaXRlZCBGdXR1cmUuCiAganMuVmFyaWFibGVVc2UgZ2V0IHJlc3VsdCA9PiBuZXcganMuVmFyaWFibGVVc2UocmVzdWx0TmFtZSk7CiAgU3RyaW5nIHJlc3VsdE5hbWU7CgogIC8vLyBBIHBhcmFtZXRlciB0byB0aGUgW2JvZHlOYW1lXSBmdW5jdGlvbi4gSW5kaWNhdGluZyBpZiB3ZSBhcmUgaW4gc3VjY2VzcwogIC8vLyBvciBlcnJvciBjYXNlLgogIFN0cmluZyBlcnJvckNvZGVOYW1lOwoKICAvLy8gVGhlIGlubmVyIGZ1bmN0aW9uIHRoYXQgaXMgc2NoZWR1bGVkIHRvIGRvIGVhY2ggYXdhaXQveWllbGQsCiAgLy8vIGFuZCBjYWxsZWQgdG8gZG8gYSBuZXcgaXRlcmF0aW9uIGZvciBzeW5jKi4KICBqcy5OYW1lIGJvZHlOYW1lOwoKICAvLy8gVXNlZCB0byBzaW11bGF0ZSBhIGdvdG8uCiAgLy8vCiAgLy8vIFRvICJnb3RvIiBhIGxhYmVsLCB0aGUgbGFiZWwgaXMgYXNzaWduZWQgdG8gdGhpcyB2YXJpYWJsZSwgYW5kIGJyZWFrIG91dAogIC8vLyBvZiB0aGUgc3dpdGNoIHRvIHRha2UgYW5vdGhlciBpdGVyYXRpb24gaW4gdGhlIHdoaWxlIGxvb3AuIFNlZSBbYWRkR290b10KICBqcy5WYXJpYWJsZVVzZSBnZXQgZ290byA9PiBuZXcganMuVmFyaWFibGVVc2UoZ290b05hbWUpOwogIFN0cmluZyBnb3RvTmFtZTsKCiAgLy8vIFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIGxhYmVsIG9mIHRoZSBjdXJyZW50IGVycm9yIGhhbmRsZXIuCiAganMuVmFyaWFibGVVc2UgZ2V0IGhhbmRsZXIgPT4gbmV3IGpzLlZhcmlhYmxlVXNlKGhhbmRsZXJOYW1lKTsKICBTdHJpbmcgaGFuZGxlck5hbWU7CgogIC8vLyBTZXQgdG8gYHRydWVgIGlmIGFueSBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudCBsYWJlbHMgaXMgYSBoYW5kbGVyLiBBdCB0aGUKICAvLy8gZW5kIG9mIHJld3JpdGluZyB0aGlzIGlzIHVzZWQgdG8gc2VlIGlmIGEgc2hvcnRlciBmb3JtIG9mIGVycm9yIGhhbmRsaW5nCiAgLy8vIGNhbiBiZSB1c2VkLiBUaGUgc2hvcnRlciBmb3JtIGNvdWxkIGJlIGEgY2hhbmdlIGluIHRoZSBtZXRob2QgYm9pbGVycGxhdGUsCiAgLy8vIGluIHRoZSBzdGF0ZSBtYWNoaW5lIHdyYXBwZXIsIG9yIG5vdCBpbXBsZW1lbnRlZC4gW2FkZEVycm9yRXhpdF0gY2FuIHRlc3QKICAvLy8gdGhpcyB0byBlbGlkZSB0aGUgZXJyb3IgZXhpdCBoYW5kbGVyIHdoZW4gdGhlcmUgYXJlIG5vIG90aGVyIGhhbmRsZXJzLCBvcgogIC8vLyBzZXQgaXQgdG8gYHRydWVgIGlmIHRoZXJlIGlzIG5vIHNob3J0ZXIgZm9ybS4KICBib29sIGhhc0hhbmRsZXJMYWJlbHMgPSBmYWxzZTsKCiAgLy8vIEEgc3RhY2sgb2YgbGFiZWxzIG9mIGZpbmFsbHkgYmxvY2tzIHRvIHZpc2l0LCBhbmQgdGhlIGxhYmVsIHRvIGdvIHRvIGFmdGVyCiAgLy8vIHRoZSBsYXN0LgogIGpzLlZhcmlhYmxlVXNlIGdldCBuZXh0ID0+IG5ldyBqcy5WYXJpYWJsZVVzZShuZXh0TmFtZSk7CiAgU3RyaW5nIG5leHROYW1lOwoKICAvLy8gVGhlIGN1cnJlbnQgcmV0dXJuZWQgdmFsdWUgKGEgZmluYWxseSBibG9jayBtYXkgb3ZlcndyaXRlIGl0KS4KICBqcy5WYXJpYWJsZVVzZSBnZXQgcmV0dXJuVmFsdWUgPT4gbmV3IGpzLlZhcmlhYmxlVXNlKHJldHVyblZhbHVlTmFtZSk7CiAgU3RyaW5nIHJldHVyblZhbHVlTmFtZTsKCiAgLy8vIFN0b3JlcyB0aGUgY3VycmVudCBlcnJvciB3aGVuIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBoYW5kbGluZyBhbiBlcnJvci4KICBqcy5WYXJpYWJsZVVzZSBnZXQgY3VycmVudEVycm9yID0+IG5ldyBqcy5WYXJpYWJsZVVzZShjdXJyZW50RXJyb3JOYW1lKTsKICBTdHJpbmcgY3VycmVudEVycm9yTmFtZTsKCiAgLy8vIFRoZSBsYWJlbCBvZiB0aGUgb3V0ZXIgbG9vcC4KICAvLy8KICAvLy8gVXNlZCBpZiB0aGVyZSBhcmUgdW50cmFuc2Zvcm1lZCBsb29wcyBjb250YWluaW5nIGJyZWFrIG9yIGNvbnRpbnVlcyB0bwogIC8vLyB0YXJnZXRzIG91dHNpZGUgdGhlIGxvb3AuCiAgU3RyaW5nIG91dGVyTGFiZWxOYW1lOwoKICAvLy8gSWYgamF2YXNjcmlwdCBgdGhpc2AgaXMgdXNlZCwgaXQgaXMgYWNjZXNzZWQgdmlhIHRoaXMgdmFyaWFibGUsIGluIHRoZQogIC8vLyBbYm9keU5hbWVdIGZ1bmN0aW9uLgogIGpzLlZhcmlhYmxlVXNlIGdldCBzZWxmID0+IG5ldyBqcy5WYXJpYWJsZVVzZShzZWxmTmFtZSk7CiAgU3RyaW5nIHNlbGZOYW1lOwoKICAvLy8gVGhlIHJld3JpdHRlbiBjb2RlIGNhbiB0YWtlIHR5cGUgYXJndW1lbnRzLiBUaGVzZSBhcmUgYWRkZWQgaWYgbmVlZGVkLgogIExpc3Q8U3RyaW5nPiB0eXBlQXJndW1lbnROYW1lcyA9IDxTdHJpbmc+W107CgogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nIG9ubHkuCiAgU3Bhbm5hYmxlIGdldCBzcGFubmFibGUgewogICAgcmV0dXJuIChfc3Bhbm5hYmxlID09IG51bGwpID8gTk9fTE9DQVRJT05fU1BBTk5BQkxFIDogX3NwYW5uYWJsZTsKICB9CgogIFNwYW5uYWJsZSBfc3Bhbm5hYmxlOwoKICBpbnQgX2N1cnJlbnRMYWJlbCA9IDA7CgogIC8vIFRoZSBoaWdoZXN0IHRlbXBvcmFyeSB2YXJpYWJsZSBpbmRleCBjdXJyZW50bHkgaW4gdXNlLgogIGludCBjdXJyZW50VGVtcFZhckluZGV4ID0gMDsKICAvLyBUaGUgaGlnaGVzdCB0ZW1wb3JhcnkgdmFyaWFibGUgaW5kZXggZXZlciBpbiB1c2UgaW4gdGhpcyBmdW5jdGlvbi4KICBpbnQgdGVtcFZhckhpZ2hXYXRlck1hcmsgPSAwOwogIE1hcDxpbnQsIGpzLkV4cHJlc3Npb24+IHRlbXBWYXJOYW1lcyA9IG5ldyBNYXA8aW50LCBqcy5FeHByZXNzaW9uPigpOwoKICBib29sIGdldCBpc0FzeW5jID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzU3luY1N0YXIgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNBc3luY1N0YXIgPT4gZmFsc2U7CgogIEFzeW5jUmV3cml0ZXJCYXNlKAogICAgICB0aGlzLnJlcG9ydGVyLCB0aGlzLl9zcGFubmFibGUsIHRoaXMuc2FmZVZhcmlhYmxlTmFtZSwgdGhpcy5ib2R5TmFtZSk7CgogIC8vLyBJbml0aWFsaXplIG5hbWVzIHVzZWQgYnkgdGhlIHN1YkNsYXNzLgogIHZvaWQgaW5pdGlhbGl6ZU5hbWVzKCk7CgogIC8vLyBNYWluIGVudHJ5IHBvaW50LgogIC8vLyBSZXdyaXRlcyBhIHN5bmMqL2FzeW5jL2FzeW5jKiBmdW5jdGlvbiB0byBhbiBlcXVpdmFsZW50IG5vcm1hbCBmdW5jdGlvbi4KICAvLy8KICAvLy8gW3NwYW5uYWJsZV0gY2FuIGJlIHBhc3NlZCB0byBoYXZlIGEgbG9jYXRpb24gZm9yIGVycm9yIG1lc3NhZ2VzLgogIGpzLkZ1biByZXdyaXRlKGpzLkZ1biBub2RlLCBTb3VyY2VJbmZvcm1hdGlvbiBib2R5U291cmNlSW5mb3JtYXRpb24sCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGV4aXRTb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgW1NwYW5uYWJsZSBzcGFubmFibGVdKSB7CiAgICBfc3Bhbm5hYmxlID0gc3Bhbm5hYmxlOwoKICAgIGFuYWx5c2lzID0gbmV3IFByZVRyYW5zbGF0aW9uQW5hbHlzaXModW5zdXBwb3J0ZWQpOwogICAgYW5hbHlzaXMuYW5hbHl6ZShub2RlKTsKCiAgICAvLyBUbyBhdm9pZCBuYW1lIGNvbGxpc2lvbnMgd2l0aCBleGlzdGluZyBuYW1lcywgdGhlIGZyZXNoIG5hbWVzIGFyZQogICAgLy8gZ2VuZXJhdGVkIGFmdGVyIHRoZSBhbmFseXNpcy4KICAgIHJlc3VsdE5hbWUgPSBmcmVzaE5hbWUoInJlc3VsdCIpOwogICAgZXJyb3JDb2RlTmFtZSA9IGZyZXNoTmFtZSgiZXJyb3JDb2RlIik7CiAgICBnb3RvTmFtZSA9IGZyZXNoTmFtZSgiZ290byIpOwogICAgaGFuZGxlck5hbWUgPSBmcmVzaE5hbWUoImhhbmRsZXIiKTsKICAgIG5leHROYW1lID0gZnJlc2hOYW1lKCJuZXh0Iik7CiAgICByZXR1cm5WYWx1ZU5hbWUgPSBmcmVzaE5hbWUoInJldHVyblZhbHVlIik7CiAgICBjdXJyZW50RXJyb3JOYW1lID0gZnJlc2hOYW1lKCJjdXJyZW50RXJyb3IiKTsKICAgIG91dGVyTGFiZWxOYW1lID0gZnJlc2hOYW1lKCJvdXRlciIpOwogICAgc2VsZk5hbWUgPSBmcmVzaE5hbWUoInNlbGYiKTsKICAgIC8vIEluaXRpYWxpemUgbmFtZXMgc3BlY2lmaWMgdG8gdGhlIHN1YmNsYXNzLgogICAgaW5pdGlhbGl6ZU5hbWVzKCk7CgogICAgcmV0dXJuIHJld3JpdGVGdW5jdGlvbihub2RlLCBib2R5U291cmNlSW5mb3JtYXRpb24sIGV4aXRTb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBqcy5FeHByZXNzaW9uIGdldCBjdXJyZW50RXJyb3JIYW5kbGVyIHsKICAgIHJldHVybiBqcy5udW1iZXIoaGFuZGxlckxhYmVsc1sKICAgICAgICBqdW1wVGFyZ2V0cy5sYXN0V2hlcmUoKG5vZGUpID0+IGhhbmRsZXJMYWJlbHNbbm9kZV0gIT0gbnVsbCldKTsKICB9CgogIGludCBhbGxvY2F0ZVRlbXBWYXIoKSB7CiAgICBhc3NlcnQodGVtcFZhckhpZ2hXYXRlck1hcmsgPj0gY3VycmVudFRlbXBWYXJJbmRleCk7CiAgICBjdXJyZW50VGVtcFZhckluZGV4Kys7CiAgICB0ZW1wVmFySGlnaFdhdGVyTWFyayA9IG1heChjdXJyZW50VGVtcFZhckluZGV4LCB0ZW1wVmFySGlnaFdhdGVyTWFyayk7CiAgICByZXR1cm4gY3VycmVudFRlbXBWYXJJbmRleDsKICB9CgogIGpzLlZhcmlhYmxlVXNlIHVzZVRlbXBWYXIoaW50IGkpIHsKICAgIHJldHVybiB0ZW1wVmFyTmFtZXMucHV0SWZBYnNlbnQoCiAgICAgICAgaSwgKCkgPT4gbmV3IGpzLlZhcmlhYmxlVXNlKGZyZXNoTmFtZSgidGVtcCRpIikpKTsKICB9CgogIC8vLyBHZW5lcmF0ZXMgYSB2YXJpYWJsZSBuYW1lIHdpdGggW3NhZmVWYXJpYWJsZU5hbWVdIGJhc2VkIG9uIFtvcmlnaW5hbE5hbWVdCiAgLy8vIHdpdGggYSBzdWZmaXggdG8gZ3VhcmFudGVlIGl0IGRvZXMgbm90IGNvbGxpZGUgd2l0aCBhbHJlYWR5IHVzZWQgbmFtZXMuCiAgU3RyaW5nIGZyZXNoTmFtZShTdHJpbmcgb3JpZ2luYWxOYW1lKSB7CiAgICBTdHJpbmcgc2FmZU5hbWUgPSBzYWZlVmFyaWFibGVOYW1lKG9yaWdpbmFsTmFtZSk7CiAgICBTdHJpbmcgcmVzdWx0ID0gc2FmZU5hbWU7CiAgICBpbnQgY291bnRlciA9IDE7CiAgICB3aGlsZSAoYW5hbHlzaXMudXNlZE5hbWVzLmNvbnRhaW5zKHJlc3VsdCkpIHsKICAgICAgcmVzdWx0ID0gIiRzYWZlTmFtZSRjb3VudGVyIjsKICAgICAgKytjb3VudGVyOwogICAgfQogICAgYW5hbHlzaXMudXNlZE5hbWVzLmFkZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8anMuRXhwcmVzc2lvbj4gcHJvY2Vzc1R5cGVBcmd1bWVudHMoTGlzdDxqcy5FeHByZXNzaW9uPiB0eXBlcykgewogICAgaWYgKHR5cGVzID09IG51bGwpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBmcmVzaE5hbWUoJ3R5cGUnKTsKICAgICAgdHlwZUFyZ3VtZW50TmFtZXMuYWRkKG5hbWUpOwogICAgICByZXR1cm4gPGpzLkV4cHJlc3Npb24+W25ldyBqcy5WYXJpYWJsZVVzZShuYW1lKV07CiAgICB9CiAgICByZXR1cm4gdHlwZXM7CiAgfQoKICAvLy8gQWxsIHRoZSBwaWVjZXMgYXJlIGNvbGxlY3RlZCBpbiB0aGlzIG1hcCwgdG8gY3JlYXRlIGEgc3dpdGNoIHdpdGggYSBjYXNlCiAgLy8vIGZvciBlYWNoIGxhYmVsLgogIC8vLwogIC8vLyBUaGUgb3JkZXIgaXMgaW1wb3J0YW50LCB0aGVyZWZvcmUgdGhlIHR5cGUgaXMgZXhwbGljaXRseSBMaW5rZWRIYXNoTWFwLgogIExpbmtlZEhhc2hNYXA8aW50LCBMaXN0PGpzLlN0YXRlbWVudD4+IGxhYmVsbGVkUGFydHMgPQogICAgICBuZXcgTGlua2VkSGFzaE1hcDxpbnQsIExpc3Q8anMuU3RhdGVtZW50Pj4oKTsKCiAgLy8vIERlc2NyaXB0aW9uIG9mIGVhY2ggbGFiZWwgZm9yIHJlYWRhYmlsaXR5IG9mIHRoZSBub24tbWluaWZpZWQgb3V0cHV0LgogIE1hcDxpbnQsIFN0cmluZz4gbGFiZWxDb21tZW50cyA9IG5ldyBNYXA8aW50LCBTdHJpbmc+KCk7CgogIC8vLyBUcnVlIGlmIHRoZSBmdW5jdGlvbiBoYXMgYW55IHRyeSBibG9ja3MgY29udGFpbmluZyBhd2FpdC4KICBib29sIGhhc1RyeUJsb2NrcyA9IGZhbHNlOwoKICAvLy8gVHJ1ZSBpZiB0aGUgdHJhdmVyc2lvbiBjdXJyZW50bHkgaXMgaW5zaWRlIGEgbG9vcCBvciBzd2l0Y2ggZm9yIHdoaWNoCiAgLy8vIFtzaG91bGRUcmFuc2Zvcm1dIGlzIGZhbHNlLgogIGJvb2wgaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlID0gZmFsc2U7CgogIC8vLyBUcnVlIGlmIGEgbGFiZWwgaXMgdXNlZCB0byBicmVhayB0byBhbiBvdXRlciBzd2l0Y2gtc3RhdGVtZW50LgogIGJvb2wgaGFzSnVtcFRob3VnaE91dGVyTGFiZWwgPSBmYWxzZTsKCiAgLy8vIFRydWUgaWYgdGhlcmUgaXMgYSBjYXRjaC1oYW5kbGVyIHByb3RlY3RlZCBieSBhIGZpbmFsbHkgd2l0aCBubyBlbmNsb3NpbmcKICAvLy8gY2F0Y2gtaGFuZGxlcnMuCiAgYm9vbCBuZWVkc1JldGhyb3cgPSBmYWxzZTsKCiAgLy8vIEJ1ZmZlciBmb3IgY29sbGVjdGluZyB0cmFuc2xhdGVkIHN0YXRlbWVudHMgYmVsb25naW5nIHRvIHRoZSBzYW1lIHN3aXRjaAogIC8vLyBjYXNlLgogIExpc3Q8anMuU3RhdGVtZW50PiBjdXJyZW50U3RhdGVtZW50QnVmZmVyOwoKICAvLyBMYWJlbHMgd2lsbCBiZWNvbWUgY2FzZXMgaW4gdGhlIGJpZyBzd2l0Y2ggZXhwcmVzc2lvbiwgYW5kIGBnb3RvIGxhYmVsYAogIC8vIGlzIGV4cHJlc3NlZCBieSBhc3NpZ25pbmcgdG8gdGhlIHN3aXRjaCBrZXkgW2dvdG9OYW1lXSBhbmQgYnJlYWtpbmcgb3V0IG9mCiAgLy8gdGhlIHN3aXRjaC4KCiAgaW50IG5ld0xhYmVsKFtTdHJpbmcgY29tbWVudF0pIHsKICAgIGludCByZXN1bHQgPSBfY3VycmVudExhYmVsOwogICAgX2N1cnJlbnRMYWJlbCsrOwogICAgaWYgKGNvbW1lbnQgIT0gbnVsbCkgewogICAgICBsYWJlbENvbW1lbnRzW3Jlc3VsdF0gPSBjb21tZW50OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBCZWdpbnMgb3V0cHV0dGluZyBzdGF0ZW1lbnRzIHRvIGEgbmV3IGJ1ZmZlciB3aXRoIGxhYmVsIFtsYWJlbF0uCiAgLy8vCiAgLy8vIEVhY2ggYnVmZmVyIGVuZHMgdXAgYXMgaXRzIG93biBjYXNlIHBhcnQgaW4gdGhlIGJpZyBzdGF0ZS1zd2l0Y2guCiAgdm9pZCBiZWdpbkxhYmVsKGludCBsYWJlbCkgewogICAgYXNzZXJ0KCFsYWJlbGxlZFBhcnRzLmNvbnRhaW5zS2V5KGxhYmVsKSk7CiAgICBjdXJyZW50U3RhdGVtZW50QnVmZmVyID0gPGpzLlN0YXRlbWVudD5bXTsKICAgIGxhYmVsbGVkUGFydHNbbGFiZWxdID0gY3VycmVudFN0YXRlbWVudEJ1ZmZlcjsKICAgIGFkZFN0YXRlbWVudChuZXcganMuQ29tbWVudChsYWJlbENvbW1lbnRzW2xhYmVsXSkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBzdGF0ZW1lbnQgYXNzaWduaW5nIHRvIHRoZSB2YXJpYWJsZSBuYW1lZCBbZ290b05hbWVdLgogIC8vLyBUaGlzIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGJyZWFrIGZvciB0aGUgZ290byB0byBiZSBleGVjdXRlZC4gVXNlCiAgLy8vIFtnb3RvV2l0aEJyZWFrXSBvciBbYWRkR290b10gZm9yIHRoaXMuCiAganMuU3RhdGVtZW50IHNldEdvdG9WYXJpYWJsZShpbnQgbGFiZWwsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICByZXR1cm4gbmV3IGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQoanMuanMoJyMgPSAjJywKICAgICAgICBbZ290bywganMubnVtYmVyKGxhYmVsKV0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgLy8vIFJldHVybnMgYSBibG9jayB0aGF0IGhhcyBhIGdvdG8gdG8gW2xhYmVsXSBpbmNsdWRpbmcgdGhlIGJyZWFrLgogIC8vLwogIC8vLyBBbHNvIGluc2VydHMgYSBjb21tZW50IGRlc2NyaWJpbmcgdGhlIGxhYmVsIGlmIGF2YWlsYWJsZS4KICBqcy5CbG9jayBnb3RvQW5kQnJlYWsoaW50IGxhYmVsLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSA8anMuU3RhdGVtZW50PltdOwogICAgaWYgKGxhYmVsQ29tbWVudHMuY29udGFpbnNLZXkobGFiZWwpKSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKG5ldyBqcy5Db21tZW50KCJnb3RvICR7bGFiZWxDb21tZW50c1tsYWJlbF19IikpOwogICAgfQogICAgc3RhdGVtZW50cy5hZGQoc2V0R290b1ZhcmlhYmxlKGxhYmVsLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgaWYgKGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZSkgewogICAgICBoYXNKdW1wVGhvdWdoT3V0ZXJMYWJlbCA9IHRydWU7CiAgICAgIHN0YXRlbWVudHMuYWRkKG5ldyBqcy5CcmVhayhvdXRlckxhYmVsTmFtZSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YXRlbWVudHMKICAgICAgICAgIC5hZGQobmV3IGpzLkJyZWFrKG51bGwpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogICAgcmV0dXJuIG5ldyBqcy5CbG9jayhzdGF0ZW1lbnRzKTsKICB9CgogIC8vLyBBZGRzIGEgZ290byB0byBbbGFiZWxdIGluY2x1ZGluZyB0aGUgYnJlYWsuCiAgLy8vCiAgLy8vIEFsc28gaW5zZXJ0cyBhIGNvbW1lbnQgZGVzY3JpYmluZyB0aGUgbGFiZWwgaWYgYXZhaWxhYmxlLgogIHZvaWQgYWRkR290byhpbnQgbGFiZWwsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAobGFiZWxDb21tZW50cy5jb250YWluc0tleShsYWJlbCkpIHsKICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5Db21tZW50KCJnb3RvICR7bGFiZWxDb21tZW50c1tsYWJlbF19IikpOwogICAgfQogICAgYWRkU3RhdGVtZW50KHNldEdvdG9WYXJpYWJsZShsYWJlbCwgc291cmNlSW5mb3JtYXRpb24pKTsKCiAgICBhZGRCcmVhayhzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIGFkZFN0YXRlbWVudChqcy5TdGF0ZW1lbnQgbm9kZSkgewogICAgY3VycmVudFN0YXRlbWVudEJ1ZmZlci5hZGQobm9kZSk7CiAgfQoKICB2b2lkIGFkZEV4cHJlc3Npb25TdGF0ZW1lbnQoanMuRXhwcmVzc2lvbiBub2RlKSB7CiAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSkpOwogIH0KCiAgLy8vIFRydWUgaWYgdGhlcmUgaXMgYW4gYXdhaXQgb3IgeWllbGQgaW4gW25vZGVdIG9yIHNvbWUgc3ViZXhwcmVzc2lvbi4KICBib29sIHNob3VsZFRyYW5zZm9ybShqcy5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBhbmFseXNpcy5oYXNBd2FpdE9yWWllbGQuY29udGFpbnMobm9kZSk7CiAgfQoKICB2b2lkIHVuc3VwcG9ydGVkKGpzLk5vZGUgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIk5vZGUgJG5vZGUgY2Fubm90IGJlIHRyYW5zZm9ybWVkIGJ5IHRoZSBhd2FpdC1zeW5jIHRyYW5zZm9ybWVyIik7CiAgfQoKICB2b2lkIHVucmVhY2hhYmxlKGpzLk5vZGUgbm9kZSkgewogICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihzcGFubmFibGUsICJJbnRlcm5hbCBlcnJvciwgdHJ5aW5nIHRvIHZpc2l0ICRub2RlIik7CiAgfQoKICB2aXNpdFN0YXRlbWVudChqcy5TdGF0ZW1lbnQgbm9kZSkgewogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICAvLy8gVmlzaXRzIFtub2RlXSB0byBlbnN1cmUgaXRzIHNpZGVlZmZlY3RzIGFyZSBwZXJmb3JtZWQsIGJ1dCB0aHJvd2luZyBhd2F5CiAgLy8vIHRoZSByZXN1bHQuCiAgLy8vCiAgLy8vIElmIHRoZSByZXR1cm4gdmFsdWUgb2YgdmlzaXRpbmcgW25vZGVdIGlzIGFuIGV4cHJlc3Npb24gZ3VhcmFudGVlZCB0byBoYXZlCiAgLy8vIG5vIHNpZGUgZWZmZWN0LCBpdCBpcyBkcm9wcGVkLgogIHZvaWQgdmlzaXRFeHByZXNzaW9uSWdub3JlUmVzdWx0KGpzLkV4cHJlc3Npb24gbm9kZSkgewogICAgLy8gVE9ETygyODc2Myk6IFJlbW92ZSBgPGR5bmFtaWM+YCB3aGVuIGlzc3VlIDI4NzYzIGlzIGZpeGVkLgogICAganMuRXhwcmVzc2lvbiByZXN1bHQgPSBub2RlLmFjY2VwdDxkeW5hbWljPih0aGlzKTsKICAgIGlmICghKHJlc3VsdCBpcyBqcy5MaXRlcmFsIHx8IHJlc3VsdCBpcyBqcy5WYXJpYWJsZVVzZSkpIHsKICAgICAgYWRkRXhwcmVzc2lvblN0YXRlbWVudChyZXN1bHQpOwogICAgfQogIH0KCiAganMuRXhwcmVzc2lvbiB2aXNpdEV4cHJlc3Npb24oanMuRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBUT0RPKDI4NzYzKTogUmVtb3ZlIGA8ZHluYW1pYz5gIHdoZW4gaXNzdWUgMjg3NjMgaXMgZml4ZWQuCiAgICByZXR1cm4gbm9kZS5hY2NlcHQ8ZHluYW1pYz4odGhpcyk7CiAgfQoKICAvLy8gQ2FsbHMgW2ZuXSB3aXRoIHRoZSB2YWx1ZSBvZiBldmFsdWF0aW5nIFtub2RlMV0gYW5kIFtub2RlMl0uCiAgLy8vCiAgLy8vIEJvdGggbm9kZXMgYXJlIGV2YWx1YXRlZCBpbiBvcmRlci4KICAvLy8KICAvLy8gSWYgbm9kZTIgbXVzdCBiZSB0cmFuc2Zvcm1lZCAoc2VlIFtzaG91bGRUcmFuc2Zvcm1dKSwgdGhlbiB0aGUgZXZhbHVhdGlvbgogIC8vLyBvZiBub2RlMSBpcyBhZGRlZCB0byB0aGUgY3VycmVudCBzdGF0ZW1lbnQtbGlzdCBhbmQgdGhlIHJlc3VsdCBpcyBzdG9yZWQKICAvLy8gaW4gYSB0ZW1wb3JhcnkgdmFyaWFibGUuIFRoZSBldmFsdWF0aW9uIG9mIG5vZGUyIGlzIHRoZW4gZnJlZSB0byBlbWl0CiAgLy8vIHN0YXRlbWVudHMgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHJlc3VsdCBvZiBub2RlMS4KICAvLy8KICAvLy8gVGhpcyBpcyBuZWNlc3NhcnksIGJlY2F1c2UgYXdhaXQgb3IgeWllbGQgZXhwcmVzc2lvbnMgaGF2ZSB0byBlbWl0CiAgLy8vIHN0YXRlbWVudHMsIGFuZCB0aGVzZSBzdGF0ZW1lbnRzIGNvdWxkIGFmZmVjdCB0aGUgdmFsdWUgb2Ygbm9kZTEuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlOgogIC8vLwogIC8vLyAtIF9zdG9yZUlmTmVjZXNzYXJ5KHNvbWVMaXRlcmFsKSByZXR1cm5zIHNvbWVMaXRlcmFsLgogIC8vLyAtIF9zdG9yZUlmTmVjZXNzYXJ5KHNvbWVWYXJpYWJsZSkKICAvLy8gICBpbnNlcnRzOiB2YXIgdGVtcFggPSBzb21lVmFyaWFibGUKICAvLy8gICByZXR1cm5zOiB0ZW1wWAogIC8vLyAgIHdoZXJlIHRlbXBYIGlzIGEgZnJlc2ggdGVtcG9yYXJ5IHZhcmlhYmxlLgogIGpzLkV4cHJlc3Npb24gX3N0b3JlSWZOZWNlc3NhcnkoanMuRXhwcmVzc2lvbiByZXN1bHQpIHsKICAgIC8vIE5vdGUgdGhhdCBSZWdFeGVzLCBqcy5BcnJheUluaXRpYWxpemVyIGFuZCBqcy5PYmplY3RJbml0aWFsaXplciBhcmUgbm90CiAgICAvLyBbanMuTGl0ZXJhbF1zLgogICAgaWYgKHJlc3VsdCBpcyBqcy5MaXRlcmFsKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKHJlc3VsdCBpcyBqcy5WYXJpYWJsZVVzZSkgewogICAgICBpZiAocmVzdWx0Lm5hbWUgPT0gc2VsZk5hbWUpIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAganMuRXhwcmVzc2lvbiB0ZW1wVmFyID0gdXNlVGVtcFZhcihhbGxvY2F0ZVRlbXBWYXIoKSk7CiAgICBhZGRTdGF0ZW1lbnQoanMuanMuc3RhdGVtZW50KCcjID0gIzsnLCBbdGVtcFZhciwgcmVzdWx0XSkpOwogICAgcmV0dXJuIHRlbXBWYXI7CiAgfQoKICAvLyBUT0RPKHNpZ3VyZG0pOiBUaGlzIGlzIG9ic29sZXRlIC0gYWxsIGNhbGxzIHVzZSBzdG9yZTogZmFsc2UuIFJlcGxhY2Ugd2l0aAogIC8vIHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICB3aXRoRXhwcmVzc2lvbihqcy5FeHByZXNzaW9uIG5vZGUsIGZuKGpzLkV4cHJlc3Npb24gcmVzdWx0KSwge2Jvb2wgc3RvcmV9KSB7CiAgICBpbnQgb2xkVGVtcFZhckluZGV4ID0gY3VycmVudFRlbXBWYXJJbmRleDsKICAgIGpzLkV4cHJlc3Npb24gdmlzaXRlZCA9IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICAgIGlmIChzdG9yZSkgewogICAgICB2aXNpdGVkID0gX3N0b3JlSWZOZWNlc3NhcnkodmlzaXRlZCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gZm4odmlzaXRlZCk7CiAgICBjdXJyZW50VGVtcFZhckluZGV4ID0gb2xkVGVtcFZhckluZGV4OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDYWxscyBbZm5dIHdpdGggdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIFtub2RlXS4gVGFraW5nIHNwZWNpYWwgY2FyZSBvZgogIC8vLyBwcm9wZXJ0eSBhY2Nlc3Nlcy4KICAvLy8KICAvLy8gSWYgW3N0b3JlXSBpcyB0cnVlIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBbbm9kZV0gaXMgc3RvcmVkIGluIGEKICAvLy8gdGVtcG9yYXJ5LgogIC8vLwogIC8vLyBXZSBjYW5ub3QgcmV3cml0ZSBgPHJlY2VpdmVyPi5tKClgIHRvOgogIC8vLyAgICAgdGVtcCA9IDxyZWNlaXZlcj4ubTsKICAvLy8gICAgIHRlbXAoKTsKICAvLy8gQmVjYXVzZSB0aGlzIGxlYXZlcyBgdGhpc2AgdW5ib3VuZCBpbiB0aGUgY2FsbC4gQnV0IGJlY2F1c2Ugb2YgZGFydAogIC8vLyBldmFsdWF0aW9uIG9yZGVyIHdlIGNhbiB3cml0ZToKICAvLy8gICAgIHRlbXAgPSA8cmVjZWl2ZXI+OwogIC8vLyAgICAgdGVtcC5tKCk7CiAgd2l0aENhbGxUYXJnZXRFeHByZXNzaW9uKGpzLkV4cHJlc3Npb24gbm9kZSwgZm4oanMuRXhwcmVzc2lvbiByZXN1bHQpLAogICAgICB7Ym9vbCBzdG9yZX0pIHsKICAgIGludCBvbGRUZW1wVmFySW5kZXggPSBjdXJyZW50VGVtcFZhckluZGV4OwogICAganMuRXhwcmVzc2lvbiB2aXNpdGVkID0gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogICAganMuRXhwcmVzc2lvbiBzZWxlY3RvcjsKICAgIGpzLkV4cHJlc3Npb24gc3RvcmVkSWZOZWVkZWQ7CiAgICBpZiAoc3RvcmUpIHsKICAgICAgaWYgKHZpc2l0ZWQgaXMganMuUHJvcGVydHlBY2Nlc3MpIHsKICAgICAgICBqcy5Qcm9wZXJ0eUFjY2VzcyBwcm9wZXJ0eUFjY2VzcyA9IHZpc2l0ZWQ7CiAgICAgICAgc2VsZWN0b3IgPSBwcm9wZXJ0eUFjY2Vzcy5zZWxlY3RvcjsKICAgICAgICB2aXNpdGVkID0gcHJvcGVydHlBY2Nlc3MucmVjZWl2ZXI7CiAgICAgIH0KICAgICAgc3RvcmVkSWZOZWVkZWQgPSBfc3RvcmVJZk5lY2Vzc2FyeSh2aXNpdGVkKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0b3JlZElmTmVlZGVkID0gdmlzaXRlZDsKICAgIH0KICAgIGpzLkV4cHJlc3Npb24gcmVzdWx0OwogICAgaWYgKHNlbGVjdG9yID09IG51bGwpIHsKICAgICAgcmVzdWx0ID0gZm4oc3RvcmVkSWZOZWVkZWQpOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gZm4obmV3IGpzLlByb3BlcnR5QWNjZXNzKHN0b3JlZElmTmVlZGVkLCBzZWxlY3RvcikpOwogICAgfQogICAgY3VycmVudFRlbXBWYXJJbmRleCA9IG9sZFRlbXBWYXJJbmRleDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ2FsbHMgW2ZuXSB3aXRoIHRoZSB2YWx1ZSBvZiBldmFsdWF0aW5nIFtub2RlMV0gYW5kIFtub2RlMl0uCiAgLy8vCiAgLy8vIElmIGBzaG91bGRUcmFuc2Zvcm0obm9kZTIpYCB0aGUgZmlyc3QgZXhwcmVzc2lvbiBpcyBzdG9yZWQgaW4gYSB0ZW1wb3JhcnkKICAvLy8gdmFyaWFibGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYmVjYXVzZSBub2RlMSBtdXN0IGJlIGV2YWx1YXRlZCBiZWZvcmUgdmlzaXRpbmcgbm9kZTIsCiAgLy8vIGJlY2F1c2UgdGhlIGV2YWx1YXRpb24gb2YgYW4gYXdhaXQgb3IgeWllbGQgY2Fubm90IGJlIGV4cHJlc3NlZCBhcwogIC8vLyBhbiBleHByZXNzaW9uLCB2aXNpdGluZyBub2RlMiBpdCB3aWxsIG91dHB1dCBzdGF0ZW1lbnRzIHRoYXQKICAvLy8gbWlnaHQgaGF2ZSBhbiBpbmZsdWVuY2Ugb24gdGhlIHZhbHVlIG9mIG5vZGUxLgogIHdpdGhFeHByZXNzaW9uMihqcy5FeHByZXNzaW9uIG5vZGUxLCBqcy5FeHByZXNzaW9uIG5vZGUyLAogICAgICBmbihqcy5FeHByZXNzaW9uIHJlc3VsdDEsIGpzLkV4cHJlc3Npb24gcmVzdWx0MikpIHsKICAgIGludCBvbGRUZW1wVmFySW5kZXggPSBjdXJyZW50VGVtcFZhckluZGV4OwogICAganMuRXhwcmVzc2lvbiByMSA9IHZpc2l0RXhwcmVzc2lvbihub2RlMSk7CiAgICBpZiAoc2hvdWxkVHJhbnNmb3JtKG5vZGUyKSkgewogICAgICByMSA9IF9zdG9yZUlmTmVjZXNzYXJ5KHIxKTsKICAgIH0KICAgIGpzLkV4cHJlc3Npb24gcjIgPSB2aXNpdEV4cHJlc3Npb24obm9kZTIpOwogICAgdmFyIHJlc3VsdCA9IGZuKHIxLCByMik7CiAgICBjdXJyZW50VGVtcFZhckluZGV4ID0gb2xkVGVtcFZhckluZGV4OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDYWxscyBbZm5dIHdpdGggdGhlIHZhbHVlIG9mIGV2YWx1YXRpbmcgYWxsIFtub2Rlc10uCiAgLy8vCiAgLy8vIEFsbCByZXN1bHRzIGJlZm9yZSB0aGUgbGFzdCBub2RlIHdoZXJlIGBzaG91bGRUcmFuc2Zvcm0obm9kZSlgIGFyZSBzdG9yZWQKICAvLy8gaW4gdGVtcG9yYXJ5IHZhcmlhYmxlcy4KICAvLy8KICAvLy8gU2VlIG1vcmUgZXhwbGFuYXRpb24gb24gW3dpdGhFeHByZXNzaW9uMl0uCiAgLy8vCiAgLy8vIElmIGFueSBvZiB0aGUgbm9kZXMgYXJlIG51bGwsIHRoZXkgYXJlIGlnbm9yZWQsIGFuZCBhIG51bGwgaXMgcGFzc2VkIHRvCiAgLy8vIFtmbl0gaW4gdGhhdCBwbGFjZS4KICB3aXRoRXhwcmVzc2lvbnMoTGlzdDxqcy5FeHByZXNzaW9uPiBub2RlcywgZm4oTGlzdDxqcy5FeHByZXNzaW9uPiByZXN1bHRzKSkgewogICAgaW50IG9sZFRlbXBWYXJJbmRleCA9IGN1cnJlbnRUZW1wVmFySW5kZXg7CiAgICAvLyBGaW5kIGxhc3Qgb2NjdXJlbmNlIG9mIGEgJ3RyYW5zZm9ybScgZXhwcmVzc2lvbiBpbiBbbm9kZXNdLgogICAgLy8gQWxsIGV4cHJlc3Npb25zIGJlZm9yZSB0aGF0IG11c3QgYmUgc3RvcmVkIGluIHRlbXAtdmFycy4KICAgIGludCBsYXN0VHJhbnNmb3JtSW5kZXggPSAwOwogICAgZm9yIChpbnQgaSA9IG5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgIGlmIChub2Rlc1tpXSA9PSBudWxsKSBjb250aW51ZTsKICAgICAgaWYgKHNob3VsZFRyYW5zZm9ybShub2Rlc1tpXSkpIHsKICAgICAgICBsYXN0VHJhbnNmb3JtSW5kZXggPSBpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBMaXN0PGpzLk5vZGU+IHZpc2l0ZWQgPSBub2Rlcy50YWtlKGxhc3RUcmFuc2Zvcm1JbmRleCkubWFwKChqcy5Ob2RlIG5vZGUpIHsKICAgICAgcmV0dXJuIChub2RlID09IG51bGwpID8gbnVsbCA6IF9zdG9yZUlmTmVjZXNzYXJ5KHZpc2l0RXhwcmVzc2lvbihub2RlKSk7CiAgICB9KS50b0xpc3QoKTsKICAgIHZpc2l0ZWQuYWRkQWxsKAogICAgICAgIG5vZGVzLnNraXAobGFzdFRyYW5zZm9ybUluZGV4KS5tYXA8anMuRXhwcmVzc2lvbj4oKGpzLk5vZGUgbm9kZSkgewogICAgICByZXR1cm4gKG5vZGUgPT0gbnVsbCkgPyBudWxsIDogdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogICAgfSkpOwogICAgdmFyIHJlc3VsdCA9IGZuKHZpc2l0ZWQpOwogICAgY3VycmVudFRlbXBWYXJJbmRleCA9IG9sZFRlbXBWYXJJbmRleDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gRW1pdHMgdGhlIHJldHVybiBibG9jayB0aGF0IGFsbCByZXR1cm5zIGp1bXAgdG8gKGFmdGVyIGdvaW5nCiAgLy8vIHRocm91Z2ggYWxsIHRoZSBlbmNsb3NpbmcgZmluYWxseSBibG9ja3MpLiBUaGUganVtcCB0byBoZXJlIGlzIG1hZGUgaW4KICAvLy8gW3Zpc2l0UmV0dXJuXS4KICB2b2lkIGFkZFN1Y2Nlc3NFeGl0KFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgLy8vIEVtaXRzIHRoZSBibG9jayB0aGF0IGNvbnRyb2wgZmxvd3MgdG8gaWYgYW4gZXJyb3IgaGFzIGJlZW4gdGhyb3duCiAgLy8vIGJ1dCBub3QgY2F1Z2h0LiAoYWZ0ZXIgZ29pbmcgdGhyb3VnaCBhbGwgdGhlIGVuY2xvc2luZyBmaW5hbGx5IGJsb2NrcykuCiAgdm9pZCBhZGRFcnJvckV4aXQoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pOwoKICB2b2lkIGFkZEZ1bmN0aW9uRXhpdHMoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGFkZFN1Y2Nlc3NFeGl0KHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGFkZEVycm9yRXhpdChzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgcmV3cml0dGVuIGZ1bmN0aW9uLgogIGpzLkZ1biBmaW5pc2hGdW5jdGlvbigKICAgICAgTGlzdDxqcy5QYXJhbWV0ZXI+IHBhcmFtZXRlcnMsCiAgICAgIExpc3Q8anMuUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAganMuU3RhdGVtZW50IHJld3JpdHRlbkJvZHksCiAgICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IHZhcmlhYmxlRGVjbGFyYXRpb25zLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBib2R5U291cmNlSW5mb3JtYXRpb24pOwoKICBJdGVyYWJsZTxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiB2YXJpYWJsZUluaXRpYWxpemF0aW9ucygKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pOwoKICAvLy8gUmV3cml0ZXMgYW4gYXN5bmMvc3luYyovYXN5bmMqIGZ1bmN0aW9uIHRvIGEgbm9ybWFsIEphdmFzY3JpcHQgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIFRoZSBjb250cm9sIGZsb3cgaXMgZmxhdHRlbmVkIGJ5IHNpbXVsYXRpbmcgJ2dvdG8nIHVzaW5nIGEgc3dpdGNoIGluIGEKICAvLy8gbG9vcCBhbmQgYSBzdGF0ZSB2YXJpYWJsZSBbZ290b10gaW5zaWRlIGEgbmVzdGVkIGZ1bmN0aW9uIFtib2R5XQogIC8vLyB0aGF0IGNhbiBiZSBjYWxsZWQgYmFjayBieSBbYXN5bmNTdGFySGVscGVyXS9bYXN5bmNTdGFySGVscGVyXS90aGUKICAvLy8gW0l0ZXJhdG9yXS4KICAvLy8KICAvLy8gTG9jYWwgdmFyaWFibGVzIGFyZSBob2lzdGVkIG91dHNpZGUgdGhlIGhlbHBlci4KICAvLy8KICAvLy8gQXdhaXRzIGluIGFzeW5jL2FzeW5jKiBhcmUgdHJhbnNsYXRlZCB0byBjb2RlIHRoYXQgcmVtZW1iZXJzIHRoZSBjdXJyZW50CiAgLy8vIGxvY2F0aW9uIChzbyB0aGUgZnVuY3Rpb24gY2FuIHJlc3VtZSBmcm9tIHdoZXJlIGl0IHdhcykgZm9sbG93ZWQgYnkgYQogIC8vLyBbYXdhaXRTdGF0ZW1lbnRdLiBUaGUgaGVscGVyIHNldHMgdXAgdGhlIHdhaXRpbmcgZm9yIHRoZSBhd2FpdGVkCiAgLy8vIHZhbHVlIGFuZCByZXR1cm5zIGEgZnV0dXJlIHdoaWNoIGlzIGltbWVkaWF0ZWx5IHJldHVybmVkIGJ5IHRoZQogIC8vLyBbYXdhaXRTdGF0ZW1lbnRdLgogIC8vLwogIC8vLyBZaWVsZHMgaW4gc3luYyovYXN5bmMqIGFyZSB0cmFuc2xhdGVkIHRvIGEgY2FsbHMgdG8gaGVscGVyIGZ1bmN0aW9ucy4KICAvLy8gKHNlZSBbdmlzaXRZaWVsZF0pCiAgLy8vCiAgLy8vIFNpbXBsaWZpZWQgZXhhbXBsZXMgKG5vdCB0aGUgZXhhY3QgdHJhbnNsYXRpb24sIGJ1dCBpbnRlbmRlZCB0byBzaG93IHRoZQogIC8vLyBpZGVhcyk6CiAgLy8vCiAgLy8vIGZ1bmN0aW9uICh4LCB5LCB6KSBhc3luYyB7CiAgLy8vICAgdmFyIHAgPSBhd2FpdCBmb28oKTsKICAvLy8gICByZXR1cm4gYmFyKHApOwogIC8vLyB9CiAgLy8vCiAgLy8vIEJlY29tZXMgKHdpdGhvdXQgZXJyb3IgaGFuZGxpbmcpOgogIC8vLwogIC8vLyBmdW5jdGlvbih4LCB5LCB6KSB7CiAgLy8vICAgdmFyIGdvdG8gPSAwLCByZXR1cm5WYWx1ZSwgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpLCBwOwogIC8vLyAgIGZ1bmN0aW9uIGJvZHkocmVzdWx0KSB7CiAgLy8vICAgICB3aGlsZSAodHJ1ZSkgewogIC8vLyAgICAgICBzd2l0Y2ggKGdvdG8pIHsKICAvLy8gICAgICAgICBjYXNlIDA6CiAgLy8vICAgICAgICAgICBnb3RvID0gMSAvLyBSZW1lbWJlciB3aGVyZSB0byBjb250aW51ZSB3aGVuIHRoZSBmdXR1cmUgc3VjY2VlZHMuCiAgLy8vICAgICAgICAgICByZXR1cm4gdGhlbkhlbHBlcihmb28oKSwgaGVscGVyLCBjb21wbGV0ZXIpOwogIC8vLyAgICAgICAgIGNhc2UgMToKICAvLy8gICAgICAgICAgIHAgPSByZXN1bHQ7CiAgLy8vICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGJhcihwKTsKICAvLy8gICAgICAgICAgIGdvdG8gPSAyOwogIC8vLyAgICAgICAgICAgYnJlYWs7CiAgLy8vICAgICAgICAgY2FzZSAyOgogIC8vLyAgICAgICAgICAgcmV0dXJuIHRoZW5IZWxwZXIocmV0dXJuVmFsdWUsIG51bGwsIGNvbXBsZXRlcikKICAvLy8gICAgICAgfQogIC8vLyAgICAgfQogIC8vLyAgICAgcmV0dXJuIHRoZW5IZWxwZXIobnVsbCwgaGVscGVyLCBjb21wbGV0ZXIpOwogIC8vLyAgIH0KICAvLy8gfQogIC8vLwogIC8vLyBUcnkvY2F0Y2ggaXMgaW1wbGVtZW50ZWQgYnkgbWFpbnRhaW5pbmcgW2hhbmRsZXJdIHRvIGNvbnRhaW4gdGhlIGxhYmVsCiAgLy8vIG9mIHRoZSBjdXJyZW50IGhhbmRsZXIuIElmIFtib2R5XSB0aHJvd3MsIHRoZSBjYWxsZXIgc2hvdWxkIGNhdGNoIHRoZQogIC8vLyBlcnJvciBhbmQgcmVjYWxsIFtib2R5XSB3aXRoIGZpcnN0IGFyZ3VtZW50IFtlcnJvcl9jb2Rlcy5FUlJPUl0gYW5kCiAgLy8vIHNlY29uZCBhcmd1bWVudCB0aGUgZXJyb3IuCiAgLy8vCiAgLy8vIEEgYGZpbmFsbHlgIGNsYXVzZSBpcyBjb21waWxlZCBzaW1pbGFyIHRvIG5vcm1hbCBjb2RlLCB3aXRoIHRoZSBhZGRpdGlvbmFsCiAgLy8vIGNvbXBsZXhpdHkgdGhhdCBgZmluYWxseWAgY2xhdXNlcyBuZWVkIHRvIGtub3cgd2hlcmUgdG8ganVtcCB0byBhZnRlciB0aGUKICAvLy8gY2xhdXNlIGlzIGRvbmUuIEluIHRoZSB0cmFuc2xhdGlvbiwgZWFjaCBmbG93LXBhdGggdGhhdCBlbnRlcnMgYSBgZmluYWxseWAKICAvLy8gc2V0cyB1cCB0aGUgdmFyaWFibGUgW25leHRdIHdpdGggYSBzdGFjayBvZiBmaW5hbGx5LWJsb2NrcyBhbmQgYSBmaW5hbAogIC8vLyBqdW1wLXRhcmdldCAoZXhpdCwgY2F0Y2gsIC4uLikuCiAgLy8vCiAgLy8vIGZ1bmN0aW9uKHgsIHksIHopIGFzeW5jIHsKICAvLy8gICB0cnkgewogIC8vLyAgICAgdHJ5IHsKICAvLy8gICAgICAgdGhyb3cgImVycm9yIjsKICAvLy8gICAgIH0gZmluYWxseSB7CiAgLy8vICAgICAgIGZpbmFsaXplMSgpOwogIC8vLyAgICAgfQogIC8vLyAgIH0gY2F0Y2ggKGUpIHsKICAvLy8gICAgIGhhbmRsZShlKTsKICAvLy8gICB9IGZpbmFsbHkgewogIC8vLyAgICAgZmluYWxpemUyKCk7CiAgLy8vICAgfQogIC8vLyB9CiAgLy8vCiAgLy8vIFRyYW5zbGF0ZXMgaW50byAoYmVzaWRlcyB0aGUgZmFjdCB0aGF0IHN0cnVjdHVyZXMgbm90IGNvbnRhaW5pbmcKICAvLy8gYXdhaXQveWllbGQveWllbGQqIGFyZSBsZWZ0IGludGFjdCk6CiAgLy8vCiAgLy8vIGZ1bmN0aW9uKHgsIHksIHopIHsKICAvLy8gICB2YXIgZ290byA9IDA7CiAgLy8vICAgdmFyIHJldHVyblZhbHVlOwogIC8vLyAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgLy8vICAgdmFyIGhhbmRsZXIgPSA4OyAvLyBPdXRzaWRlIHRyeS1ibG9ja3MgZ28gdG8gdGhlIHJldGhyb3cgbGFiZWwuCiAgLy8vICAgdmFyIHA7CiAgLy8vICAgdmFyIGN1cnJlbnRFcnJvcjsKICAvLy8gICAvLyBUaGUgcmVzdWx0IGNhbiBiZSBlaXRoZXIgdGhlIHJlc3VsdCBvZiBhbiBhd2FpdGVkIGZ1dHVyZSwgb3IgYW4KICAvLy8gICAvLyBlcnJvciBpZiB0aGUgZnV0dXJlIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yLgogIC8vLyAgIGZ1bmN0aW9uIGJvZHkoZXJyb3JDb2RlLCByZXN1bHQpIHsKICAvLy8gICAgIGlmIChlcnJvckNvZGUgPT0gMSkgewogIC8vLyAgICAgICBjdXJyZW50RXJyb3IgPSByZXN1bHQ7CiAgLy8vICAgICAgIGdvdG8gPSBoYW5kbGVyOwogIC8vLyAgICAgfQogIC8vLyAgICAgd2hpbGUgKHRydWUpIHsKICAvLy8gICAgICAgc3dpdGNoIChnb3RvKSB7CiAgLy8vICAgICAgICAgY2FzZSAwOgogIC8vLyAgICAgICAgICAgaGFuZGxlciA9IDQ7IC8vIFRoZSBvdXRlciBjYXRjaC1oYW5kbGVyCiAgLy8vICAgICAgICAgICBoYW5kbGVyID0gMTsgLy8gVGhlIGlubmVyIChpbXBsaWNpdCkgY2F0Y2gtaGFuZGxlcgogIC8vLyAgICAgICAgICAgdGhyb3cgImVycm9yIjsKICAvLy8gICAgICAgICAgIG5leHQgPSBbM107CiAgLy8vICAgICAgICAgICAvLyBBZnRlciB0aGUgZmluYWxseSAoMikgY29udGludWUgbm9ybWFsbHkgYWZ0ZXIgdGhlIHRyeS4KICAvLy8gICAgICAgICAgIGdvdG8gPSAyOwogIC8vLyAgICAgICAgICAgYnJlYWs7CiAgLy8vICAgICAgICAgY2FzZSAxOiAvLyAoaW1wbGljaXQpIGNhdGNoIGhhbmRsZXIgZm9yIGlubmVyIHRyeS4KICAvLy8gICAgICAgICAgIG5leHQgPSBbM107IC8vIGRlc3RpbmF0aW9uIGFmdGVyIHRoZSBmaW5hbGx5LgogIC8vLyAgICAgICAgICAgLy8gZmFsbC10aG91Z2ggdG8gdGhlIGZpbmFsbHkgaGFuZGxlci4KICAvLy8gICAgICAgICBjYXNlIDI6IC8vIGZpbmFsbHkgZm9yIGlubmVyIHRyeQogIC8vLyAgICAgICAgICAgaGFuZGxlciA9IDQ7IC8vIGNhdGNoLWhhbmRsZXIgZm9yIG91dGVyIHRyeS4KICAvLy8gICAgICAgICAgIGZpbmFsaXplMSgpOwogIC8vLyAgICAgICAgICAgZ290byA9IG5leHQucG9wKCk7CiAgLy8vICAgICAgICAgICBicmVhazsKICAvLy8gICAgICAgICBjYXNlIDM6IC8vIGV4aXRpbmcgaW5uZXIgdHJ5LgogIC8vLyAgICAgICAgICAgbmV4dCA9IFs2XTsKICAvLy8gICAgICAgICAgIGdvdG8gPSA1OyAvLyBmaW5hbGx5IGhhbmRsZXIgZm9yIG91dGVyIHRyeS4KICAvLy8gICAgICAgICAgIGJyZWFrOwogIC8vLyAgICAgICAgIGNhc2UgNDogLy8gY2F0Y2ggaGFuZGxlciBmb3Igb3V0ZXIgdHJ5LgogIC8vLyAgICAgICAgICAgaGFuZGxlciA9IDU7IC8vIElmIHRoZSBoYW5kbGVyIHRocm93cywgZG8gdGhlIGZpbmFsbHkgLi4KICAvLy8gICAgICAgICAgIG5leHQgPSBbOF0gLy8gLi4uIGFuZCByZXRocm93LgogIC8vLyAgICAgICAgICAgZSA9IHN0b3JlZEVycm9yOwogIC8vLyAgICAgICAgICAgaGFuZGxlKGUpOwogIC8vLyAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGZpbmFsbHkuCiAgLy8vICAgICAgICAgY2FzZSA1OiAvLyBmaW5hbGx5IGhhbmRsZXIgZm9yIG91dGVyIHRyeS4KICAvLy8gICAgICAgICAgIGhhbmRsZXIgPSBudWxsOwogIC8vLyAgICAgICAgICAgZmluYWxpemUyKCk7CiAgLy8vICAgICAgICAgICBnb3RvID0gbmV4dC5wb3AoKTsKICAvLy8gICAgICAgICAgIGJyZWFrOwogIC8vLyAgICAgICAgIGNhc2UgNjogLy8gRXhpdGluZyBvdXRlciB0cnkuCiAgLy8vICAgICAgICAgY2FzZSA3OiAvLyByZXR1cm4KICAvLy8gICAgICAgICAgIHJldHVybiB0aGVuSGVscGVyKHJldHVyblZhbHVlLCAwLCBjb21wbGV0ZXIpOwogIC8vLyAgICAgICAgIGNhc2UgODogLy8gUmV0aHJvdwogIC8vLyAgICAgICAgICAgcmV0dXJuIHRoZW5IZWxwZXIoY3VycmVudEVycm9yLCAxLCBjb21wbGV0ZXIpOwogIC8vLyAgICAgICB9CiAgLy8vICAgICB9CiAgLy8vICAgICByZXR1cm4gdGhlbkhlbHBlcihudWxsLCBoZWxwZXIsIGNvbXBsZXRlcik7CiAgLy8vICAgfQogIC8vLyB9CiAgLy8vCiAgLy8vIFtib2R5U291cmNlSW5mb3JtYXRpb25dIGlzIHVzZWQgb24gY29kZSBnZW5lcmF0ZWQgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24KICAvLy8gYm9keSBhbmQgW2V4aXRTb3VyY2VJbmZvcm1hdGlvbl0gaXMgdXNlZCBvbiBjb2RlIGdlbmVyYXRlZCB0byBleGl0IHRoZQogIC8vLyBmdW5jdGlvbi4KICBqcy5FeHByZXNzaW9uIHJld3JpdGVGdW5jdGlvbigKICAgICAganMuRnVuIG5vZGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGJvZHlTb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgU291cmNlSW5mb3JtYXRpb24gZXhpdFNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBiZWdpbkxhYmVsKG5ld0xhYmVsKCJGdW5jdGlvbiBzdGFydCIpKTsKICAgIC8vIEFzeW5jU3RhciBuZWVkcyBhIHJldHVybiBsYWJlbCBmb3IgaXRzIGhhbmRsaW5nIG9mIGNhbmNlbGxhdGlvbi4gU2VlCiAgICAvLyBbdmlzaXREYXJ0WWllbGRdLgogICAgZXhpdExhYmVsID0gKGFuYWx5c2lzLmhhc0V4cGxpY2l0UmV0dXJucyB8fCBpc0FzeW5jU3RhcikKICAgICAgICA/IG5ld0xhYmVsKCJyZXR1cm4iKQogICAgICAgIDogbnVsbDsKICAgIHJldGhyb3dMYWJlbCA9IG5ld0xhYmVsKCJyZXRocm93Iik7CiAgICBoYW5kbGVyTGFiZWxzW25vZGVdID0gcmV0aHJvd0xhYmVsOwogICAganMuU3RhdGVtZW50IGJvZHkgPSBub2RlLmJvZHk7CiAgICBqdW1wVGFyZ2V0cy5hZGQobm9kZSk7CiAgICB2aXNpdFN0YXRlbWVudChib2R5KTsKICAgIGp1bXBUYXJnZXRzLnJlbW92ZUxhc3QoKTsKICAgIGFkZEZ1bmN0aW9uRXhpdHMoZXhpdFNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICBMaXN0PGpzLlN3aXRjaENsYXVzZT4gY2xhdXNlcyA9IGxhYmVsbGVkUGFydHMua2V5cy5tYXAoKGxhYmVsKSB7CiAgICAgIHJldHVybiBuZXcganMuQ2FzZShqcy5udW1iZXIobGFiZWwpLCBuZXcganMuQmxvY2sobGFiZWxsZWRQYXJ0c1tsYWJlbF0pKTsKICAgIH0pLnRvTGlzdCgpOwogICAganMuU3RhdGVtZW50IHJld3JpdHRlbkJvZHkgPSBuZXcganMuU3dpdGNoKGdvdG8sIGNsYXVzZXMpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAgaWYgKGhhc0p1bXBUaG91Z2hPdXRlckxhYmVsKSB7CiAgICAgIHJld3JpdHRlbkJvZHkgPSBuZXcganMuTGFiZWxlZFN0YXRlbWVudChvdXRlckxhYmVsTmFtZSwgcmV3cml0dGVuQm9keSk7CiAgICB9CiAgICByZXdyaXR0ZW5Cb2R5ID0ganMuanMKICAgICAgICAuc3RhdGVtZW50KCd3aGlsZSAodHJ1ZSkgeyN9JywgcmV3cml0dGVuQm9keSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IHZhcmlhYmxlcyA9IDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPltdOwoKICAgIHZhcmlhYmxlcy5hZGQoCiAgICAgICAgX21ha2VWYXJpYWJsZUluaXRpYWxpemVyKGdvdG8sIGpzLm51bWJlcigwKSwgYm9keVNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB2YXJpYWJsZXMuYWRkQWxsKHZhcmlhYmxlSW5pdGlhbGl6YXRpb25zKGJvZHlTb3VyY2VJbmZvcm1hdGlvbikpOwogICAgaWYgKGhhc0hhbmRsZXJMYWJlbHMpIHsKICAgICAgdmFyaWFibGVzLmFkZChfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXIoCiAgICAgICAgICBoYW5kbGVyLCBqcy5udW1iZXIocmV0aHJvd0xhYmVsKSwgYm9keVNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIHZhcmlhYmxlcy5hZGQoCiAgICAgICAgICBfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXIoY3VycmVudEVycm9yLCBudWxsLCBib2R5U291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICAgIGlmIChhbmFseXNpcy5oYXNGaW5hbGx5IHx8IChpc0FzeW5jU3RhciAmJiBhbmFseXNpcy5oYXNZaWVsZCkpIHsKICAgICAgdmFyaWFibGVzLmFkZChfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXIobmV4dCwKICAgICAgICAgIG5ldyBqcy5BcnJheUluaXRpYWxpemVyKDxqcy5FeHByZXNzaW9uPltdKSwgYm9keVNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgICBpZiAoYW5hbHlzaXMuaGFzVGhpcyAmJiAhaXNTeW5jU3RhcikgewogICAgICAvLyBTeW5jKiBmdW5jdGlvbnMgbXVzdCByZW1lbWJlciBgdGhpc2Agb24gdGhlIGxldmVsIG9mIHRoZSBvdXRlcgogICAgICAvLyBmdW5jdGlvbi4KICAgICAgdmFyaWFibGVzLmFkZCgKICAgICAgICAgIF9tYWtlVmFyaWFibGVJbml0aWFsaXplcihzZWxmLCBqcy5qcygndGhpcycpLCBib2R5U291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICAgIHZhcmlhYmxlcy5hZGRBbGwobG9jYWxWYXJpYWJsZXMubWFwKChqcy5WYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICAgIHJldHVybiBuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbihkZWNsYXJhdGlvbiwgbnVsbCk7CiAgICB9KSk7CiAgICB2YXJpYWJsZXMuYWRkQWxsKG5ldyBJdGVyYWJsZS5nZW5lcmF0ZSgKICAgICAgICB0ZW1wVmFySGlnaFdhdGVyTWFyaywKICAgICAgICAoaW50IGkpID0+IF9tYWtlVmFyaWFibGVJbml0aWFsaXplcigKICAgICAgICAgICAgdXNlVGVtcFZhcihpICsgMSkubmFtZSwgbnVsbCwgYm9keVNvdXJjZUluZm9ybWF0aW9uKSkpOwogICAganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgdmFyaWFibGVEZWNsYXJhdGlvbnMgPQogICAgICAgIG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh2YXJpYWJsZXMpOwoKICAgIC8vIE5hbWVzIGFyZSBhbHJlYWR5IHNhZmUgd2hlbiBhZGRlZC4KICAgIExpc3Q8anMuUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9CiAgICAgICAgdHlwZUFyZ3VtZW50TmFtZXMubWFwKChuYW1lKSA9PiBuZXcganMuUGFyYW1ldGVyKG5hbWUpKS50b0xpc3QoKTsKICAgIHJldHVybiBmaW5pc2hGdW5jdGlvbihub2RlLnBhcmFtcywgdHlwZVBhcmFtZXRlcnMsIHJld3JpdHRlbkJvZHksCiAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbnMsIG5vZGUuc291cmNlSW5mb3JtYXRpb24sIGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0RnVuKGpzLkZ1biBub2RlKSB7CiAgICBpZiAobm9kZS5hc3luY01vZGlmaWVyLmlzQXN5bmMgfHwgbm9kZS5hc3luY01vZGlmaWVyLmlzWWllbGRpbmcpIHsKICAgICAgLy8gVGhlIHRyYW5zbGF0aW9uIGRvZXMgbm90IGhhbmRsZSBuZXN0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGdlbmVyYXRvcnMKICAgICAgLy8gb3IgYXN5bmNocm9ub3VzLiAgVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBvbmx5IGJlIG9uZXMgdGhhdCBhcmUKICAgICAgLy8gaW50cm9kdWNlZCBieSBKUyBmb3JlaWduIGNvZGUgZnJvbSBvdXIgb3duIGxpYnJhcmllcy4KICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIHNwYW5uYWJsZSwgJ05lc3RlZCBmdW5jdGlvbiBpcyBhIGdlbmVyYXRvciBvciBhc3luY2hyb25vdXMuJyk7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRBY2Nlc3MoanMuUHJvcGVydHlBY2Nlc3Mgbm9kZSkgewogICAgcmV0dXJuIHdpdGhFeHByZXNzaW9uMihub2RlLnJlY2VpdmVyLCBub2RlLnNlbGVjdG9yLAogICAgICAgIChyZWNlaXZlciwgc2VsZWN0b3IpID0+IGpzLmpzKCcjWyNdJywgW3JlY2VpdmVyLCBzZWxlY3Rvcl0pKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRBcnJheUhvbGUoanMuQXJyYXlIb2xlIG5vZGUpIHsKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdEFycmF5SW5pdGlhbGl6ZXIoanMuQXJyYXlJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gd2l0aEV4cHJlc3Npb25zKG5vZGUuZWxlbWVudHMsIChlbGVtZW50cykgewogICAgICByZXR1cm4gbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0QXNzaWdubWVudChqcy5Bc3NpZ25tZW50IG5vZGUpIHsKICAgIGlmICghc2hvdWxkVHJhbnNmb3JtKG5vZGUpKSB7CiAgICAgIHJldHVybiBuZXcganMuQXNzaWdubWVudC5jb21wb3VuZCh2aXNpdEV4cHJlc3Npb24obm9kZS5sZWZ0SGFuZFNpZGUpLAogICAgICAgICAgbm9kZS5vcCwgdmlzaXRFeHByZXNzaW9uKG5vZGUudmFsdWUpKTsKICAgIH0KICAgIGpzLkV4cHJlc3Npb24gbGVmdEhhbmRTaWRlID0gbm9kZS5sZWZ0SGFuZFNpZGU7CiAgICBpZiAobGVmdEhhbmRTaWRlIGlzIGpzLlZhcmlhYmxlVXNlKSB7CiAgICAgIHJldHVybiB3aXRoRXhwcmVzc2lvbihub2RlLnZhbHVlLCAoanMuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICAgIC8vIEEgbm9uLWNvbXBvdW5kIFtqcy5Bc3NpZ25tZW50XSBoYXMgYG9wPT1udWxsYC4gU28gaXQgd29ya3Mgb3V0IHRvCiAgICAgICAgLy8gdXNlIFtqcy5Bc3NpZ25tZW50LmNvbXBvdW5kXSBmb3IgYWxsIGNhc2VzLgogICAgICAgIC8vIFZpc2l0IHRoZSBbanMuVmFyaWFibGVVc2VdIHRvIGVuc3VyZSByZW5hbWluZyBpcyBkb25lIGNvcnJlY3RseS4KICAgICAgICByZXR1cm4gbmV3IGpzLkFzc2lnbm1lbnQuY29tcG91bmQoCiAgICAgICAgICAgIHZpc2l0RXhwcmVzc2lvbihsZWZ0SGFuZFNpZGUpLCBub2RlLm9wLCB2YWx1ZSk7CiAgICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICB9IGVsc2UgaWYgKGxlZnRIYW5kU2lkZSBpcyBqcy5Qcm9wZXJ0eUFjY2VzcykgewogICAgICByZXR1cm4gd2l0aEV4cHJlc3Npb25zKAogICAgICAgICAgW2xlZnRIYW5kU2lkZS5yZWNlaXZlciwgbGVmdEhhbmRTaWRlLnNlbGVjdG9yLCBub2RlLnZhbHVlXSwKICAgICAgICAgIChldmFsdWF0ZWQpIHsKICAgICAgICByZXR1cm4gbmV3IGpzLkFzc2lnbm1lbnQuY29tcG91bmQoCiAgICAgICAgICAgIG5ldyBqcy5Qcm9wZXJ0eUFjY2VzcyhldmFsdWF0ZWRbMF0sIGV2YWx1YXRlZFsxXSksCiAgICAgICAgICAgIG5vZGUub3AsCiAgICAgICAgICAgIGV2YWx1YXRlZFsyXSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgIlVuZXhwZWN0ZWQgYXNzaWdubWVudCBsZWZ0IGhhbmQgc2lkZSAkbGVmdEhhbmRTaWRlIjsKICAgIH0KICB9CgogIGpzLlN0YXRlbWVudCBhd2FpdFN0YXRlbWVudCgKICAgICAganMuRXhwcmVzc2lvbiB2YWx1ZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pOwoKICAvLy8gQW4gYXdhaXQgaXMgdHJhbnNsYXRlZCB0byBhbiBbYXdhaXRTdGF0ZW1lbnRdLgogIC8vLwogIC8vLyBTZWUgdGhlIGNvbW1lbnRzIG9mIFtyZXdyaXRlRnVuY3Rpb25dIGZvciBhbiBleGFtcGxlLgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRBd2FpdChqcy5Bd2FpdCBub2RlKSB7CiAgICBhc3NlcnQoaXNBc3luYyB8fCBpc0FzeW5jU3Rhcik7CiAgICBpbnQgYWZ0ZXJBd2FpdCA9IG5ld0xhYmVsKCJyZXR1cm5pbmcgZnJvbSBhd2FpdC4iKTsKICAgIHdpdGhFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgKGpzLkV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgYWRkU3RhdGVtZW50KHNldEdvdG9WYXJpYWJsZShhZnRlckF3YWl0LCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIGFkZFN0YXRlbWVudChhd2FpdFN0YXRlbWVudCh2YWx1ZSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgIGJlZ2luTGFiZWwoYWZ0ZXJBd2FpdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENoZWNrcyBpZiBbbm9kZV0gaXMgdGhlIHZhcmlhYmxlIG5hbWVkIFtyZXN1bHROYW1lXS4KICAvLy8KICAvLy8gW3Jlc3VsdF0gaXMgdXNlZCB0byBob2xkIHRoZSByZXN1bHQgb2YgYSB0cmFuc2Zvcm1lZCBjb21wdXRhdGlvbgogIC8vLyBmb3IgZXhhbXBsZSB0aGUgcmVzdWx0IG9mIGF3YWl0aW5nLCBvciB0aGUgcmVzdWx0IG9mIGEgY29uZGl0aW9uYWwgb3IKICAvLy8gc2hvcnQtY2lyY3VpdGluZyBleHByZXNzaW9uLgogIC8vLyBJZiB0aGUgc3ViZXhwcmVzc2lvbiBvZiBzb21lIHRyYW5zZm9ybWVkIG5vZGUgYWxyZWFkeSBpcyB0cmFuc2Zvcm1lZCBhbmQKICAvLy8gdmlzaXRpbmcgaXQgcmV0dXJucyBbcmVzdWx0XSwgaXQgaXMgbm90IHJlZHVuZGFudGx5IGFzc2lnbmVkIHRvIGl0c2VsZgogIC8vLyBhZ2Fpbi4KICBib29sIGlzUmVzdWx0KGpzLkV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGUgaXMganMuVmFyaWFibGVVc2UgJiYgbm9kZS5uYW1lID09IHJlc3VsdE5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0QmluYXJ5KGpzLkJpbmFyeSBub2RlKSB7CiAgICBpZiAoc2hvdWxkVHJhbnNmb3JtKG5vZGUucmlnaHQpICYmIChub2RlLm9wID09ICJ8fCIgfHwgbm9kZS5vcCA9PSAiJiYiKSkgewogICAgICBpbnQgdGhlbkxhYmVsID0gbmV3TGFiZWwoInRoZW4iKTsKICAgICAgaW50IGpvaW5MYWJlbCA9IG5ld0xhYmVsKCJqb2luIik7CiAgICAgIHdpdGhFeHByZXNzaW9uKG5vZGUubGVmdCwgKGpzLkV4cHJlc3Npb24gbGVmdCkgewogICAgICAgIGpzLlN0YXRlbWVudCBhc3NpZ25MZWZ0ID0gaXNSZXN1bHQobGVmdCkKICAgICAgICAgICAgPyBuZXcganMuQmxvY2suZW1wdHkoKQogICAgICAgICAgICA6IGpzLmpzLnN0YXRlbWVudCgnIyA9ICM7JywgW3Jlc3VsdCwgbGVmdF0pOwogICAgICAgIGlmIChub2RlLm9wID09ICImJiIpIHsKICAgICAgICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoJ2lmICgjKSB7I30gZWxzZSAjJywgWwogICAgICAgICAgICBsZWZ0LAogICAgICAgICAgICBnb3RvQW5kQnJlYWsodGhlbkxhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICAgICAgYXNzaWduTGVmdAogICAgICAgICAgXSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQobm9kZS5vcCA9PSAifHwiKTsKICAgICAgICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoJ2lmICgjKSB7I30gZWxzZSAjJywgWwogICAgICAgICAgICBsZWZ0LAogICAgICAgICAgICBhc3NpZ25MZWZ0LAogICAgICAgICAgICBnb3RvQW5kQnJlYWsodGhlbkxhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKQogICAgICAgICAgXSkpOwogICAgICAgIH0KICAgICAgfSwgc3RvcmU6IHRydWUpOwogICAgICBhZGRHb3RvKGpvaW5MYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIGJlZ2luTGFiZWwodGhlbkxhYmVsKTsKICAgICAgd2l0aEV4cHJlc3Npb24obm9kZS5yaWdodCwgKGpzLkV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgICBpZiAoIWlzUmVzdWx0KHZhbHVlKSkgewogICAgICAgICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgnIyA9ICM7JywgW3Jlc3VsdCwgdmFsdWVdKSk7CiAgICAgICAgfQogICAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgICBiZWdpbkxhYmVsKGpvaW5MYWJlbCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgcmV0dXJuIHdpdGhFeHByZXNzaW9uMihub2RlLmxlZnQsIG5vZGUucmlnaHQsCiAgICAgICAgKGxlZnQsIHJpZ2h0KSA9PiBuZXcganMuQmluYXJ5KG5vZGUub3AsIGxlZnQsIHJpZ2h0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmxvY2soanMuQmxvY2sgbm9kZSkgewogICAgZm9yIChqcy5TdGF0ZW1lbnQgc3RhdGVtZW50IGluIG5vZGUuc3RhdGVtZW50cykgewogICAgICB2aXNpdFN0YXRlbWVudChzdGF0ZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJyZWFrKGpzLkJyZWFrIG5vZGUpIHsKICAgIGpzLk5vZGUgdGFyZ2V0ID0gYW5hbHlzaXMudGFyZ2V0c1tub2RlXTsKICAgIGlmICghc2hvdWxkVHJhbnNmb3JtKHRhcmdldCkpIHsKICAgICAgYWRkU3RhdGVtZW50KG5vZGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0cmFuc2xhdGVKdW1wKHRhcmdldCwgYnJlYWtMYWJlbHNbdGFyZ2V0XSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0Q2FsbChqcy5DYWxsIG5vZGUpIHsKICAgIGJvb2wgc3RvcmVUYXJnZXQgPSBub2RlLmFyZ3VtZW50cy5hbnkoc2hvdWxkVHJhbnNmb3JtKTsKICAgIHJldHVybiB3aXRoQ2FsbFRhcmdldEV4cHJlc3Npb24obm9kZS50YXJnZXQsICh0YXJnZXQpIHsKICAgICAgcmV0dXJuIHdpdGhFeHByZXNzaW9ucyhub2RlLmFyZ3VtZW50cywgKExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICAgICAgcmV0dXJuIG5ldyBqcy5DYWxsKHRhcmdldCwgYXJndW1lbnRzKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9KTsKICAgIH0sIHN0b3JlOiBzdG9yZVRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2FzZShqcy5DYXNlIG5vZGUpIHsKICAgIHJldHVybiB1bnJlYWNoYWJsZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYXRjaChqcy5DYXRjaCBub2RlKSB7CiAgICByZXR1cm4gdW5yZWFjaGFibGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29tbWVudChqcy5Db21tZW50IG5vZGUpIHsKICAgIGFkZFN0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRDb25kaXRpb25hbChqcy5Db25kaXRpb25hbCBub2RlKSB7CiAgICBpZiAoIXNob3VsZFRyYW5zZm9ybShub2RlLnRoZW4pICYmICFzaG91bGRUcmFuc2Zvcm0obm9kZS5vdGhlcndpc2UpKSB7CiAgICAgIHJldHVybiBqcy5qcygnIyA/ICMgOiAjJywgWwogICAgICAgIHZpc2l0RXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbiksCiAgICAgICAgdmlzaXRFeHByZXNzaW9uKG5vZGUudGhlbiksCiAgICAgICAgdmlzaXRFeHByZXNzaW9uKG5vZGUub3RoZXJ3aXNlKQogICAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBpbnQgdGhlbkxhYmVsID0gbmV3TGFiZWwoInRoZW4iKTsKICAgIGludCBqb2luTGFiZWwgPSBuZXdMYWJlbCgiam9pbiIpOwogICAgaW50IGVsc2VMYWJlbCA9IG5ld0xhYmVsKCJlbHNlIik7CiAgICB3aXRoRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbiwgKGpzLkV4cHJlc3Npb24gY29uZGl0aW9uKSB7CiAgICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoJyMgPSAjID8gIyA6ICM7JywKICAgICAgICAgIFtnb3RvLCBjb25kaXRpb24sIGpzLm51bWJlcih0aGVuTGFiZWwpLCBqcy5udW1iZXIoZWxzZUxhYmVsKV0pKTsKICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICBhZGRCcmVhayhub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGJlZ2luTGFiZWwodGhlbkxhYmVsKTsKICAgIHdpdGhFeHByZXNzaW9uKG5vZGUudGhlbiwgKGpzLkV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgaWYgKCFpc1Jlc3VsdCh2YWx1ZSkpIHsKICAgICAgICBhZGRTdGF0ZW1lbnQoanMuanMuc3RhdGVtZW50KCcjID0gIzsnLCBbcmVzdWx0LCB2YWx1ZV0pKTsKICAgICAgfQogICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgIGFkZEdvdG8oam9pbkxhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGJlZ2luTGFiZWwoZWxzZUxhYmVsKTsKICAgIHdpdGhFeHByZXNzaW9uKG5vZGUub3RoZXJ3aXNlLCAoanMuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBpZiAoIWlzUmVzdWx0KHZhbHVlKSkgewogICAgICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoJyMgPSAjOycsIFtyZXN1bHQsIHZhbHVlXSkpOwogICAgICB9CiAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgYmVnaW5MYWJlbChqb2luTGFiZWwpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb250aW51ZShqcy5Db250aW51ZSBub2RlKSB7CiAgICBqcy5Ob2RlIHRhcmdldCA9IGFuYWx5c2lzLnRhcmdldHNbbm9kZV07CiAgICBpZiAoIXNob3VsZFRyYW5zZm9ybSh0YXJnZXQpKSB7CiAgICAgIGFkZFN0YXRlbWVudChub2RlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdHJhbnNsYXRlSnVtcCh0YXJnZXQsIGNvbnRpbnVlTGFiZWxzW3RhcmdldF0sIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgLy8vIEVtaXRzIGEgYnJlYWsgc3RhdGVtZW50IHRoYXQgZXhpdHMgdGhlIGJpZyBzd2l0Y2ggc3RhdGVtZW50LgogIHZvaWQgYWRkQnJlYWsoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGUpIHsKICAgICAgaGFzSnVtcFRob3VnaE91dGVyTGFiZWwgPSB0cnVlOwogICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLkJyZWFrKG91dGVyTGFiZWxOYW1lKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5CcmVhayhudWxsKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIC8vLyBDb21tb24gY29kZSBmb3IgaGFuZGxpbmcgYnJlYWssIGNvbnRpbnVlLCByZXR1cm4uCiAgLy8vCiAgLy8vIEl0IGlzIG5lY2Vzc2FyeSB0byBydW4gYWxsIG5lc3RpbmcgZmluYWxseS1oYW5kbGVycyBiZXR3ZWVuIHRoZSBqdW1wIGFuZAogIC8vLyB0aGUgdGFyZ2V0LiBGb3IgdGhhdCBbbmV4dF0gaXMgdXNlZCBhcyBhIHN0YWNrIG9mIHBsYWNlcyB0byBnby4KICAvLy8KICAvLy8gU2VlIGFsc28gW3Jld3JpdGVGdW5jdGlvbl0uCiAgdm9pZCB0cmFuc2xhdGVKdW1wKAogICAgICBqcy5Ob2RlIHRhcmdldCwgaW50IHRhcmdldExhYmVsLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gQ29tcHV0ZSBhIHN0YWNrIG9mIGFsbCB0aGUgJ2ZpbmFsbHknIG5vZGVzIHRoYXQgbXVzdCBiZSB2aXNpdGVkIGJlZm9yZQogICAgLy8gdGhlIGp1bXAuCiAgICAvLyBUaGUgYm90dG9tIG9mIHRoZSBzdGFjayBpcyB0aGUgbGFiZWwgd2hlcmUgdGhlIGp1bXAgZ29lcyB0by4KICAgIExpc3Q8aW50PiBqdW1wU3RhY2sgPSA8aW50PltdOwogICAgZm9yIChqcy5Ob2RlIG5vZGUgaW4ganVtcFRhcmdldHMucmV2ZXJzZWQpIHsKICAgICAgaWYgKGZpbmFsbHlMYWJlbHNbbm9kZV0gIT0gbnVsbCkgewogICAgICAgIGp1bXBTdGFjay5hZGQoZmluYWxseUxhYmVsc1tub2RlXSk7CiAgICAgIH0gZWxzZSBpZiAobm9kZSA9PSB0YXJnZXQpIHsKICAgICAgICBqdW1wU3RhY2suYWRkKHRhcmdldExhYmVsKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICAvLyBJZ25vcmUgb3RoZXIgbm9kZXMuCiAgICB9CiAgICBqdW1wU3RhY2sgPSBqdW1wU3RhY2sucmV2ZXJzZWQudG9MaXN0KCk7CiAgICAvLyBBcyB0aGUgcHJvZ3JhbSBqdW1wcyBkaXJlY3RseSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaXQgaXMgdGFrZW4gb2ZmCiAgICAvLyBub3cuCiAgICBpbnQgZmlyc3RUYXJnZXQgPSBqdW1wU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgaWYgKGp1bXBTdGFjay5pc05vdEVtcHR5KSB7CiAgICAgIGpzLkV4cHJlc3Npb24ganNKdW1wU3RhY2sgPSBuZXcganMuQXJyYXlJbml0aWFsaXplcigKICAgICAgICAgIGp1bXBTdGFjay5tYXAoKGludCBsYWJlbCkgPT4ganMubnVtYmVyKGxhYmVsKSkudG9MaXN0KCkpOwogICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQoanMuanMoIiMgPSAjIiwKICAgICAgICAgIFtuZXh0LCBqc0p1bXBTdGFja10pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpKTsKICAgIH0KICAgIGFkZEdvdG8oZmlyc3RUYXJnZXQsIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREZWZhdWx0KGpzLkRlZmF1bHQgbm9kZSkgPT4gdW5yZWFjaGFibGUobm9kZSk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREbyhqcy5EbyBub2RlKSB7CiAgICBpZiAoIXNob3VsZFRyYW5zZm9ybShub2RlKSkgewogICAgICBib29sIG9sZEluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZSA9IGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZTsKICAgICAgaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlID0gdHJ1ZTsKICAgICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgnZG8geyN9IHdoaWxlICgjKScsCiAgICAgICAgICBbdHJhbnNsYXRlVG9TdGF0ZW1lbnQobm9kZS5ib2R5KSwgdmlzaXRFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uKV0pKTsKICAgICAgaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlID0gb2xkSW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgc3RhcnRMYWJlbCA9IG5ld0xhYmVsKCJkbyBib2R5Iik7CgogICAgaW50IGNvbnRpbnVlTGFiZWwgPSBuZXdMYWJlbCgiZG8gY29uZGl0aW9uIik7CiAgICBjb250aW51ZUxhYmVsc1tub2RlXSA9IGNvbnRpbnVlTGFiZWw7CgogICAgaW50IGFmdGVyTGFiZWwgPSBuZXdMYWJlbCgiYWZ0ZXIgZG8iKTsKICAgIGJyZWFrTGFiZWxzW25vZGVdID0gYWZ0ZXJMYWJlbDsKCiAgICBiZWdpbkxhYmVsKHN0YXJ0TGFiZWwpOwoKICAgIGp1bXBUYXJnZXRzLmFkZChub2RlKTsKICAgIHZpc2l0U3RhdGVtZW50KG5vZGUuYm9keSk7CiAgICBqdW1wVGFyZ2V0cy5yZW1vdmVMYXN0KCk7CgogICAgYmVnaW5MYWJlbChjb250aW51ZUxhYmVsKTsKICAgIHdpdGhFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uLCAoanMuRXhwcmVzc2lvbiBjb25kaXRpb24pIHsKICAgICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgnaWYgKCMpICMnLAogICAgICAgICAgW2NvbmRpdGlvbiwgZ290b0FuZEJyZWFrKHN0YXJ0TGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pXSkpOwogICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgIGJlZ2luTGFiZWwoYWZ0ZXJMYWJlbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RW1wdHlTdGF0ZW1lbnQoanMuRW1wdHlTdGF0ZW1lbnQgbm9kZSkgewogICAgYWRkU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoanMuRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdEV4cHJlc3Npb25JZ25vcmVSZXN1bHQobm9kZS5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3IoanMuRm9yIG5vZGUpIHsKICAgIGlmICghc2hvdWxkVHJhbnNmb3JtKG5vZGUpKSB7CiAgICAgIGJvb2wgb2xkSW5zaWRlVW50cmFuc2xhdGVkID0gaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlOwogICAgICBpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGUgPSB0cnVlOwogICAgICAvLyBOb3RlIHRoYXQgbm9kZS5pbml0LCBub2RlLmNvbmRpdGlvbiwgbm9kZS51cGRhdGUgYWxsIGNhbiBiZSBudWxsLCBidXQKICAgICAgLy8gd2l0aEV4cHJlc3Npb25zIGhhbmRsZXMgdGhhdC4KICAgICAgd2l0aEV4cHJlc3Npb25zKFtub2RlLmluaXQsIG5vZGUuY29uZGl0aW9uLCBub2RlLnVwZGF0ZV0sCiAgICAgICAgICAoTGlzdDxqcy5FeHByZXNzaW9uPiB0cmFuc2Zvcm1lZCkgewogICAgICAgIGFkZFN0YXRlbWVudChuZXcganMuRm9yKHRyYW5zZm9ybWVkWzBdLCB0cmFuc2Zvcm1lZFsxXSwgdHJhbnNmb3JtZWRbMl0sCiAgICAgICAgICAgIHRyYW5zbGF0ZVRvU3RhdGVtZW50KG5vZGUuYm9keSkpKTsKICAgICAgfSk7CiAgICAgIGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZSA9IG9sZEluc2lkZVVudHJhbnNsYXRlZDsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChub2RlLmluaXQgIT0gbnVsbCkgewogICAgICB2aXNpdEV4cHJlc3Npb25JZ25vcmVSZXN1bHQobm9kZS5pbml0KTsKICAgIH0KICAgIGludCBzdGFydExhYmVsID0gbmV3TGFiZWwoImZvciBjb25kaXRpb24iKTsKICAgIC8vIElmIHRoZXJlIGlzIG5vIHVwZGF0ZSwgY29udGludWluZyB0aGUgbG9vcCBpcyB0aGUgc2FtZSBhcyBnb2luZyB0byB0aGUKICAgIC8vIHN0YXJ0LgogICAgaW50IGNvbnRpbnVlTGFiZWwgPQogICAgICAgIChub2RlLnVwZGF0ZSA9PSBudWxsKSA/IHN0YXJ0TGFiZWwgOiBuZXdMYWJlbCgiZm9yIHVwZGF0ZSIpOwogICAgY29udGludWVMYWJlbHNbbm9kZV0gPSBjb250aW51ZUxhYmVsOwogICAgaW50IGFmdGVyTGFiZWwgPSBuZXdMYWJlbCgiYWZ0ZXIgZm9yIik7CiAgICBicmVha0xhYmVsc1tub2RlXSA9IGFmdGVyTGFiZWw7CiAgICBiZWdpbkxhYmVsKHN0YXJ0TGFiZWwpOwogICAganMuRXhwcmVzc2lvbiBjb25kaXRpb24gPSBub2RlLmNvbmRpdGlvbjsKICAgIGlmIChjb25kaXRpb24gPT0gbnVsbCB8fAogICAgICAgIChjb25kaXRpb24gaXMganMuTGl0ZXJhbEJvb2wgJiYgY29uZGl0aW9uLnZhbHVlID09IHRydWUpKSB7CiAgICAgIGFkZFN0YXRlbWVudChuZXcganMuQ29tbWVudCgidHJpdmlhbCBjb25kaXRpb24iKSk7CiAgICB9IGVsc2UgewogICAgICB3aXRoRXhwcmVzc2lvbihjb25kaXRpb24sIChqcy5FeHByZXNzaW9uIGNvbmRpdGlvbikgewogICAgICAgIGFkZFN0YXRlbWVudChuZXcganMuSWYubm9FbHNlKG5ldyBqcy5QcmVmaXgoIiEiLCBjb25kaXRpb24pLAogICAgICAgICAgICBnb3RvQW5kQnJlYWsoYWZ0ZXJMYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpKTsKICAgICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgIH0KICAgIGp1bXBUYXJnZXRzLmFkZChub2RlKTsKICAgIHZpc2l0U3RhdGVtZW50KG5vZGUuYm9keSk7CiAgICBqdW1wVGFyZ2V0cy5yZW1vdmVMYXN0KCk7CiAgICBpZiAobm9kZS51cGRhdGUgIT0gbnVsbCkgewogICAgICBiZWdpbkxhYmVsKGNvbnRpbnVlTGFiZWwpOwogICAgICB2aXNpdEV4cHJlc3Npb25JZ25vcmVSZXN1bHQobm9kZS51cGRhdGUpOwogICAgfQogICAgYWRkR290byhzdGFydExhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGJlZ2luTGFiZWwoYWZ0ZXJMYWJlbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Rm9ySW4oanMuRm9ySW4gbm9kZSkgewogICAgLy8gVGhlIGRhcnQgb3V0cHV0IGN1cnJlbnRseSBuZXZlciB1c2VzIGZvci1pbiBsb29wcy4KICAgIHRocm93ICJKYXZhc2NyaXB0IGZvci1pbiBub3QgaW1wbGVtZW50ZWQgeWV0IGluIHRoZSBhd2FpdCB0cmFuc2Zvcm1hdGlvbiI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihqcy5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHRyYW5zbGF0ZVRvU3RhdGVtZW50U2VxdWVuY2UoanMuU3RhdGVtZW50IG5vZGUpIHsKICAgIGFzc2VydCghc2hvdWxkVHJhbnNmb3JtKG5vZGUpKTsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBvbGRCdWZmZXIgPSBjdXJyZW50U3RhdGVtZW50QnVmZmVyOwogICAgY3VycmVudFN0YXRlbWVudEJ1ZmZlciA9IDxqcy5TdGF0ZW1lbnQ+W107CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gcmVzdWx0QnVmZmVyID0gY3VycmVudFN0YXRlbWVudEJ1ZmZlcjsKICAgIHZpc2l0U3RhdGVtZW50KG5vZGUpOwogICAgY3VycmVudFN0YXRlbWVudEJ1ZmZlciA9IG9sZEJ1ZmZlcjsKICAgIHJldHVybiByZXN1bHRCdWZmZXI7CiAgfQoKICBqcy5TdGF0ZW1lbnQgdHJhbnNsYXRlVG9TdGF0ZW1lbnQoanMuU3RhdGVtZW50IG5vZGUpIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gdHJhbnNsYXRlVG9TdGF0ZW1lbnRTZXF1ZW5jZShub2RlKTsKICAgIGlmIChzdGF0ZW1lbnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gc3RhdGVtZW50cy5zaW5nbGU7CiAgICByZXR1cm4gbmV3IGpzLkJsb2NrKHN0YXRlbWVudHMpOwogIH0KCiAganMuQmxvY2sgdHJhbnNsYXRlVG9CbG9jayhqcy5TdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBqcy5CbG9jayh0cmFuc2xhdGVUb1N0YXRlbWVudFNlcXVlbmNlKG5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZihqcy5JZiBub2RlKSB7CiAgICBpZiAoIXNob3VsZFRyYW5zZm9ybShub2RlLnRoZW4pICYmICFzaG91bGRUcmFuc2Zvcm0obm9kZS5vdGhlcndpc2UpKSB7CiAgICAgIHdpdGhFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uLCAoanMuRXhwcmVzc2lvbiBjb25kaXRpb24pIHsKICAgICAgICBqcy5TdGF0ZW1lbnQgdHJhbnNsYXRlZFRoZW4gPSB0cmFuc2xhdGVUb1N0YXRlbWVudChub2RlLnRoZW4pOwogICAgICAgIGpzLlN0YXRlbWVudCB0cmFuc2xhdGVkRWxzZSA9IHRyYW5zbGF0ZVRvU3RhdGVtZW50KG5vZGUub3RoZXJ3aXNlKTsKICAgICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLklmKGNvbmRpdGlvbiwgdHJhbnNsYXRlZFRoZW4sIHRyYW5zbGF0ZWRFbHNlKSk7CiAgICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCB0aGVuTGFiZWwgPSBuZXdMYWJlbCgidGhlbiIpOwogICAgaW50IGpvaW5MYWJlbCA9IG5ld0xhYmVsKCJqb2luIik7CiAgICBpbnQgZWxzZUxhYmVsID0KICAgICAgICAobm9kZS5vdGhlcndpc2UgaXMganMuRW1wdHlTdGF0ZW1lbnQpID8gam9pbkxhYmVsIDogbmV3TGFiZWwoImVsc2UiKTsKCiAgICB3aXRoRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbiwgKGpzLkV4cHJlc3Npb24gY29uZGl0aW9uKSB7CiAgICAgIGFkZEV4cHJlc3Npb25TdGF0ZW1lbnQobmV3IGpzLkFzc2lnbm1lbnQoCiAgICAgICAgICBnb3RvLAogICAgICAgICAgbmV3IGpzLkNvbmRpdGlvbmFsKAogICAgICAgICAgICAgIGNvbmRpdGlvbiwganMubnVtYmVyKHRoZW5MYWJlbCksIGpzLm51bWJlcihlbHNlTGFiZWwpKSkpOwogICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgIGFkZEJyZWFrKG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgYmVnaW5MYWJlbCh0aGVuTGFiZWwpOwogICAgdmlzaXRTdGF0ZW1lbnQobm9kZS50aGVuKTsKICAgIGlmIChub2RlLm90aGVyd2lzZSBpcyEganMuRW1wdHlTdGF0ZW1lbnQpIHsKICAgICAgYWRkR290byhqb2luTGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICBiZWdpbkxhYmVsKGVsc2VMYWJlbCk7CiAgICAgIHZpc2l0U3RhdGVtZW50KG5vZGUub3RoZXJ3aXNlKTsKICAgIH0KICAgIGJlZ2luTGFiZWwoam9pbkxhYmVsKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihqcy5JbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oanMuSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKGpzLkludGVycG9sYXRlZExpdGVyYWwgbm9kZSkgPT4gdW5zdXBwb3J0ZWQobm9kZSk7CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKGpzLkludGVycG9sYXRlZFBhcmFtZXRlciBub2RlKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludGVycG9sYXRlZFNlbGVjdG9yKGpzLkludGVycG9sYXRlZFNlbGVjdG9yIG5vZGUpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJwb2xhdGVkU3RhdGVtZW50KGpzLkludGVycG9sYXRlZFN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGFiZWxlZFN0YXRlbWVudChqcy5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmICghc2hvdWxkVHJhbnNmb3JtKG5vZGUpKSB7CiAgICAgIGFkZFN0YXRlbWVudCgKICAgICAgICAgIG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KG5vZGUubGFiZWwsIHRyYW5zbGF0ZVRvU3RhdGVtZW50KG5vZGUuYm9keSkpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gYGNvbnRpbnVlIGxhYmVsYCBpcyByZWFsbHkgY29udGludWluZyB0aGUgbmVzdGVkIGxvb3AuCiAgICAvLyBUaGlzIGlzIHNldCB1cCBpbiBbUHJlVHJhbnNsYXRpb25BbmFseXNpcy52aXNpdENvbnRpbnVlXS4KICAgIC8vIEhlcmUgd2Ugb25seSBuZWVkIGEgYnJlYWtMYWJlbDoKICAgIGludCBicmVha0xhYmVsID0gbmV3TGFiZWwoImJyZWFrICR7bm9kZS5sYWJlbH0iKTsKICAgIGJyZWFrTGFiZWxzW25vZGVdID0gYnJlYWtMYWJlbDsKCiAgICBqdW1wVGFyZ2V0cy5hZGQobm9kZSk7CiAgICB2aXNpdFN0YXRlbWVudChub2RlLmJvZHkpOwogICAganVtcFRhcmdldHMucmVtb3ZlTGFzdCgpOwogICAgYmVnaW5MYWJlbChicmVha0xhYmVsKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRMaXRlcmFsQm9vbChqcy5MaXRlcmFsQm9vbCBub2RlKSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICB2aXNpdExpdGVyYWxFeHByZXNzaW9uKGpzLkxpdGVyYWxFeHByZXNzaW9uIG5vZGUpID0+IHVuc3VwcG9ydGVkKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0TGl0ZXJhbE51bGwoanMuTGl0ZXJhbE51bGwgbm9kZSkgPT4gbm9kZTsKCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdExpdGVyYWxOdW1iZXIoanMuTGl0ZXJhbE51bWJlciBub2RlKSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoanMuTGl0ZXJhbFN0YXRlbWVudCBub2RlKSA9PiB1bnN1cHBvcnRlZChub2RlKTsKCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdExpdGVyYWxTdHJpbmcoanMuTGl0ZXJhbFN0cmluZyBub2RlKSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihqcy5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpID0+IG5vZGU7CgogIEBvdmVycmlkZQogIGpzLk5hbWUgdmlzaXROYW1lKGpzLk5hbWUgbm9kZSkgPT4gbm9kZTsKCiAgQG92ZXJyaWRlCiAganMuUGFyZW50aGVzZXMgdmlzaXRQYXJlbnRoZXNlcyhqcy5QYXJlbnRoZXNlcyBub2RlKSB7CiAgICB1bnN1cHBvcnRlZChub2RlKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROYW1lZEZ1bmN0aW9uKGpzLk5hbWVkRnVuY3Rpb24gbm9kZSkgewogICAgdW5zdXBwb3J0ZWQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKGpzLkRlZmVycmVkRXhwcmVzc2lvbiBub2RlKSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0RGVmZXJyZWROdW1iZXIoanMuRGVmZXJyZWROdW1iZXIgbm9kZSkgPT4gbm9kZTsKCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdERlZmVycmVkU3RyaW5nKGpzLkRlZmVycmVkU3RyaW5nIG5vZGUpID0+IG5vZGU7CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXROZXcoanMuTmV3IG5vZGUpIHsKICAgIGJvb2wgc3RvcmVUYXJnZXQgPSBub2RlLmFyZ3VtZW50cy5hbnkoc2hvdWxkVHJhbnNmb3JtKTsKICAgIHJldHVybiB3aXRoQ2FsbFRhcmdldEV4cHJlc3Npb24obm9kZS50YXJnZXQsICh0YXJnZXQpIHsKICAgICAgcmV0dXJuIHdpdGhFeHByZXNzaW9ucyhub2RlLmFyZ3VtZW50cywgKExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICAgICAgcmV0dXJuIG5ldyBqcy5OZXcodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9KTsKICAgIH0sIHN0b3JlOiBzdG9yZVRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoanMuT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIHdpdGhFeHByZXNzaW9ucygKICAgICAgICBub2RlLnByb3BlcnRpZXMubWFwKChqcy5Qcm9wZXJ0eSBwcm9wZXJ0eSkgPT4gcHJvcGVydHkudmFsdWUpLnRvTGlzdCgpLAogICAgICAgIChMaXN0PGpzLk5vZGU+IHZhbHVlcykgewogICAgICBMaXN0PGpzLlByb3BlcnR5PiBwcm9wZXJ0aWVzID0gbmV3IExpc3QuZ2VuZXJhdGUodmFsdWVzLmxlbmd0aCwgKGludCBpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBqcy5Qcm9wZXJ0eShub2RlLnByb3BlcnRpZXNbaV0ubmFtZSwgdmFsdWVzW2ldKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcganMuT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcyk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UGFyYW1ldGVyKGpzLlBhcmFtZXRlciBub2RlKSA9PiB1bnJlYWNoYWJsZShub2RlKTsKCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdFBvc3RmaXgoanMuUG9zdGZpeCBub2RlKSB7CiAgICBpZiAobm9kZS5vcCA9PSAiKysiIHx8IG5vZGUub3AgPT0gIi0tIikgewogICAgICBqcy5FeHByZXNzaW9uIGFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudDsKICAgICAgaWYgKGFyZ3VtZW50IGlzIGpzLlZhcmlhYmxlVXNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBqcy5Qb3N0Zml4KG5vZGUub3AsIHZpc2l0RXhwcmVzc2lvbihhcmd1bWVudCkpOwogICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50IGlzIGpzLlByb3BlcnR5QWNjZXNzKSB7CiAgICAgICAgcmV0dXJuIHdpdGhFeHByZXNzaW9uMihhcmd1bWVudC5yZWNlaXZlciwgYXJndW1lbnQuc2VsZWN0b3IsCiAgICAgICAgICAgIChyZWNlaXZlciwgc2VsZWN0b3IpIHsKICAgICAgICAgIHJldHVybiBuZXcganMuUG9zdGZpeCgKICAgICAgICAgICAgICBub2RlLm9wLCBuZXcganMuUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIHNlbGVjdG9yKSk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgIlVuZXhwZWN0ZWQgcG9zdGZpeCAke25vZGUub3B9ICIKICAgICAgICAgICAgIm9wZXJhdG9yIGFyZ3VtZW50ICR7bm9kZS5hcmd1bWVudH0iOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gd2l0aEV4cHJlc3Npb24obm9kZS5hcmd1bWVudCwKICAgICAgICAoanMuRXhwcmVzc2lvbiBhcmd1bWVudCkgPT4gbmV3IGpzLlBvc3RmaXgobm9kZS5vcCwgYXJndW1lbnQpLAogICAgICAgIHN0b3JlOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0UHJlZml4KGpzLlByZWZpeCBub2RlKSB7CiAgICBpZiAobm9kZS5vcCA9PSAiKysiIHx8IG5vZGUub3AgPT0gIi0tIikgewogICAgICBqcy5FeHByZXNzaW9uIGFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudDsKICAgICAgaWYgKGFyZ3VtZW50IGlzIGpzLlZhcmlhYmxlVXNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBqcy5QcmVmaXgobm9kZS5vcCwgdmlzaXRFeHByZXNzaW9uKGFyZ3VtZW50KSk7CiAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgaXMganMuUHJvcGVydHlBY2Nlc3MpIHsKICAgICAgICByZXR1cm4gd2l0aEV4cHJlc3Npb24yKGFyZ3VtZW50LnJlY2VpdmVyLCBhcmd1bWVudC5zZWxlY3RvciwKICAgICAgICAgICAgKHJlY2VpdmVyLCBzZWxlY3RvcikgewogICAgICAgICAgcmV0dXJuIG5ldyBqcy5QcmVmaXgoCiAgICAgICAgICAgICAgbm9kZS5vcCwgbmV3IGpzLlByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBzZWxlY3RvcikpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93ICJVbmV4cGVjdGVkIHByZWZpeCAke25vZGUub3B9IG9wZXJhdG9yICIKICAgICAgICAgICAgImFyZ3VtZW50ICR7bm9kZS5hcmd1bWVudH0iOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gd2l0aEV4cHJlc3Npb24obm9kZS5hcmd1bWVudCwKICAgICAgICAoanMuRXhwcmVzc2lvbiBhcmd1bWVudCkgPT4gbmV3IGpzLlByZWZpeChub2RlLm9wLCBhcmd1bWVudCksCiAgICAgICAgc3RvcmU6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UHJvZ3JhbShqcy5Qcm9ncmFtIG5vZGUpID0+IHVuc3VwcG9ydGVkKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBqcy5Qcm9wZXJ0eSB2aXNpdFByb3BlcnR5KGpzLlByb3BlcnR5IG5vZGUpIHsKICAgIHJldHVybiB3aXRoRXhwcmVzc2lvbigKICAgICAgICBub2RlLnZhbHVlLCAoanMuRXhwcmVzc2lvbiB2YWx1ZSkgPT4gbmV3IGpzLlByb3BlcnR5KG5vZGUubmFtZSwgdmFsdWUpLAogICAgICAgIHN0b3JlOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0UmVnRXhwTGl0ZXJhbChqcy5SZWdFeHBMaXRlcmFsIG5vZGUpID0+IG5vZGU7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZXR1cm4oanMuUmV0dXJuIG5vZGUpIHsKICAgIGpzLk5vZGUgdGFyZ2V0ID0gYW5hbHlzaXMudGFyZ2V0c1tub2RlXTsKICAgIGlmIChub2RlLnZhbHVlICE9IG51bGwpIHsKICAgICAgaWYgKGlzU3luY1N0YXIgfHwgaXNBc3luY1N0YXIpIHsKICAgICAgICAvLyBFdmVuIHRob3VnaCBgcmV0dXJuIGV4cHI7YCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgZGFydCBzeW5jKiBhbmQKICAgICAgICAvLyBhc3luYyogIGNvZGUsIHRoZSBiYWNrZW5kIHNvbWV0aW1lcyBnZW5lcmF0ZXMgY29kZSBsaWtlIHRoaXMsIGJ1dAogICAgICAgIC8vIG9ubHkgd2hlbiBpdCBpcyBrbm93biB0aGF0IHRoZSAnZXhwcicgdGhyb3dzLCBhbmQgdGhlIHJldHVybiBpcyBqdXN0CiAgICAgICAgLy8gdG8gdGVsbCB0aGUgSmF2YVNjcmlwdCBWTSB0aGF0IHRoZSBjb2RlIHdvbid0IGNvbnRpbnVlIGhlcmUuCiAgICAgICAgLy8gSXQgaXMgdGhlcmVmb3JlIGludGVycHJldGVkIGFzIGBleHByOyByZXR1cm47YAogICAgICAgIHZpc2l0RXhwcmVzc2lvbklnbm9yZVJlc3VsdChub2RlLnZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3aXRoRXhwcmVzc2lvbihub2RlLnZhbHVlLCAoanMuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICAgICAgYWRkU3RhdGVtZW50KGpzLmpzCiAgICAgICAgICAgICAgLnN0YXRlbWVudCgiIyA9ICM7IiwgW3JldHVyblZhbHVlLCB2YWx1ZV0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICAgICAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICAgIH0KICAgIH0KICAgIHRyYW5zbGF0ZUp1bXAodGFyZ2V0LCBleGl0TGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaChqcy5Td2l0Y2ggbm9kZSkgewogICAgaWYgKCFub2RlLmNhc2VzLmFueShzaG91bGRUcmFuc2Zvcm0pKSB7CiAgICAgIC8vIElmIG9ubHkgdGhlIGtleSBoYXMgYW4gYXdhaXQsIHRyYW5zbGF0aW9uIGNhbiBiZSBzaW1wbGlmaWVkLgogICAgICBib29sIG9sZEluc2lkZVVudHJhbnNsYXRlZCA9IGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZTsKICAgICAgaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlID0gdHJ1ZTsKICAgICAgd2l0aEV4cHJlc3Npb24obm9kZS5rZXksIChqcy5FeHByZXNzaW9uIGtleSkgewogICAgICAgIExpc3Q8anMuU3dpdGNoQ2xhdXNlPiBjYXNlcyA9IG5vZGUuY2FzZXMubWFwKChqcy5Td2l0Y2hDbGF1c2UgY2xhdXNlKSB7CiAgICAgICAgICBpZiAoY2xhdXNlIGlzIGpzLkNhc2UpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBqcy5DYXNlKAogICAgICAgICAgICAgICAgY2xhdXNlLmV4cHJlc3Npb24sIHRyYW5zbGF0ZVRvQmxvY2soY2xhdXNlLmJvZHkpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBuZXcganMuRGVmYXVsdCgKICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVRvQmxvY2soKGNsYXVzZSBhcyBqcy5EZWZhdWx0KS5ib2R5KSk7CiAgICAgICAgICB9CiAgICAgICAgfSkudG9MaXN0KCk7CiAgICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5Td2l0Y2goa2V5LCBjYXNlcykpOwogICAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgICBpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGUgPSBvbGRJbnNpZGVVbnRyYW5zbGF0ZWQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBiZWZvcmUgPSBuZXdMYWJlbCgic3dpdGNoIik7CiAgICBpbnQgYWZ0ZXIgPSBuZXdMYWJlbCgiYWZ0ZXIgc3dpdGNoIik7CiAgICBicmVha0xhYmVsc1tub2RlXSA9IGFmdGVyOwoKICAgIGJlZ2luTGFiZWwoYmVmb3JlKTsKICAgIExpc3Q8aW50PiBsYWJlbHMgPSBuZXcgTGlzdDxpbnQ+KG5vZGUuY2FzZXMubGVuZ3RoKTsKCiAgICBib29sIGFueUNhc2VFeHByZXNzaW9uVHJhbnNmb3JtZWQgPSBub2RlLmNhc2VzLmFueSgKICAgICAgICAoanMuU3dpdGNoQ2xhdXNlIHgpID0+IHggaXMganMuQ2FzZSAmJiBzaG91bGRUcmFuc2Zvcm0oeC5leHByZXNzaW9uKSk7CiAgICBpZiAoYW55Q2FzZUV4cHJlc3Npb25UcmFuc2Zvcm1lZCkgewogICAgICBpbnQgZGVmYXVsdEluZGV4ID0gbnVsbDsgLy8gTnVsbCBtZWFucyBubyBkZWZhdWx0IHdhcyBmb3VuZC4KICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gYXdhaXQgaW4gb25lIG9mIHRoZSBrZXlzLCBhIGNoYWluIG9mIGlmcyBoYXMgdG8gYmUgdXNlZC4KCiAgICAgIHdpdGhFeHByZXNzaW9uKG5vZGUua2V5LCAoanMuRXhwcmVzc2lvbiBrZXkpIHsKICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgZm9yIChqcy5Td2l0Y2hDbGF1c2UgY2xhdXNlIGluIG5vZGUuY2FzZXMpIHsKICAgICAgICAgIGlmIChjbGF1c2UgaXMganMuRGVmYXVsdCkgewogICAgICAgICAgICAvLyBUaGUgZ290byBmb3IgdGhlIGRlZmF1bHQgY2FzZSBpcyBhZGRlZCBhZnRlciBhbGwgbm9uLWRlZmF1bHQKICAgICAgICAgICAgLy8gY2xhdXNlcyBoYXZlIGJlZW4gaGFuZGxlZC4KICAgICAgICAgICAgZGVmYXVsdEluZGV4ID0gaTsKICAgICAgICAgICAgbGFiZWxzW2ldID0gbmV3TGFiZWwoImRlZmF1bHQiKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9IGVsc2UgaWYgKGNsYXVzZSBpcyBqcy5DYXNlKSB7CiAgICAgICAgICAgIGxhYmVsc1tpXSA9IG5ld0xhYmVsKCJjYXNlIik7CiAgICAgICAgICAgIHdpdGhFeHByZXNzaW9uKGNsYXVzZS5leHByZXNzaW9uLCAoZXhwcmVzc2lvbikgewogICAgICAgICAgICAgIGFkZFN0YXRlbWVudChuZXcganMuSWYubm9FbHNlKAogICAgICAgICAgICAgICAgICBuZXcganMuQmluYXJ5KCI9PT0iLCBrZXksIGV4cHJlc3Npb24pLAogICAgICAgICAgICAgICAgICBnb3RvQW5kQnJlYWsobGFiZWxzW2ldLCBjbGF1c2Uuc291cmNlSW5mb3JtYXRpb24pKSk7CiAgICAgICAgICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgICB9LCBzdG9yZTogdHJ1ZSk7CgogICAgICBpZiAoZGVmYXVsdEluZGV4ID09IG51bGwpIHsKICAgICAgICBhZGRHb3RvKGFmdGVyLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhZGRHb3RvKGxhYmVsc1tkZWZhdWx0SW5kZXhdLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYm9vbCBoYXNEZWZhdWx0ID0gZmFsc2U7CiAgICAgIGludCBpID0gMDsKICAgICAgTGlzdDxqcy5Td2l0Y2hDbGF1c2U+IGNsYXVzZXMgPSA8anMuU3dpdGNoQ2xhdXNlPltdOwogICAgICBmb3IgKGpzLlN3aXRjaENsYXVzZSBjbGF1c2UgaW4gbm9kZS5jYXNlcykgewogICAgICAgIGlmIChjbGF1c2UgaXMganMuQ2FzZSkgewogICAgICAgICAgbGFiZWxzW2ldID0gbmV3TGFiZWwoImNhc2UiKTsKICAgICAgICAgIGNsYXVzZXMuYWRkKG5ldyBqcy5DYXNlKHZpc2l0RXhwcmVzc2lvbihjbGF1c2UuZXhwcmVzc2lvbiksCiAgICAgICAgICAgICAgZ290b0FuZEJyZWFrKGxhYmVsc1tpXSwgY2xhdXNlLnNvdXJjZUluZm9ybWF0aW9uKSkpOwogICAgICAgIH0gZWxzZSBpZiAoY2xhdXNlIGlzIGpzLkRlZmF1bHQpIHsKICAgICAgICAgIGxhYmVsc1tpXSA9IG5ld0xhYmVsKCJkZWZhdWx0Iik7CiAgICAgICAgICBjbGF1c2VzLmFkZChuZXcganMuRGVmYXVsdCgKICAgICAgICAgICAgICBnb3RvQW5kQnJlYWsobGFiZWxzW2ldLCBjbGF1c2Uuc291cmNlSW5mb3JtYXRpb24pKSk7CiAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihzcGFubmFibGUsICJVbmtub3duIGNsYXVzZSB0eXBlICRjbGF1c2UiKTsKICAgICAgICB9CiAgICAgICAgaSsrOwogICAgICB9CiAgICAgIGlmICghaGFzRGVmYXVsdCkgewogICAgICAgIGNsYXVzZXMKICAgICAgICAgICAgLmFkZChuZXcganMuRGVmYXVsdChnb3RvQW5kQnJlYWsoYWZ0ZXIsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pKSk7CiAgICAgIH0KICAgICAgd2l0aEV4cHJlc3Npb24obm9kZS5rZXksIChqcy5FeHByZXNzaW9uIGtleSkgewogICAgICAgIGFkZFN0YXRlbWVudChuZXcganMuU3dpdGNoKGtleSwgY2xhdXNlcykpOwogICAgICB9LCBzdG9yZTogZmFsc2UpOwoKICAgICAgYWRkQnJlYWsobm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAganVtcFRhcmdldHMuYWRkKG5vZGUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsYWJlbHMubGVuZ3RoOyBpKyspIHsKICAgICAgYmVnaW5MYWJlbChsYWJlbHNbaV0pOwogICAgICB2aXNpdFN0YXRlbWVudChub2RlLmNhc2VzW2ldLmJvZHkpOwogICAgfQogICAgYmVnaW5MYWJlbChhZnRlcik7CiAgICBqdW1wVGFyZ2V0cy5yZW1vdmVMYXN0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0VGhpcyhqcy5UaGlzIG5vZGUpIHsKICAgIHJldHVybiBzZWxmOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRocm93KGpzLlRocm93IG5vZGUpIHsKICAgIHdpdGhFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgKGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLlRocm93KGV4cHJlc3Npb24pCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgfQoKICBzZXRFcnJvckhhbmRsZXIoW2ludCBlcnJvckhhbmRsZXJdKSB7CiAgICBoYXNIYW5kbGVyTGFiZWxzID0gdHJ1ZTsgLy8gVE9ETyhzcmEpOiBBZGQgc2hvcnQgZm9ybSBlcnJvciBoYW5kbGVyLgogICAganMuRXhwcmVzc2lvbiBsYWJlbCA9CiAgICAgICAgKGVycm9ySGFuZGxlciA9PSBudWxsKSA/IGN1cnJlbnRFcnJvckhhbmRsZXIgOiBqcy5udW1iZXIoZXJyb3JIYW5kbGVyKTsKICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoJyMgPSAjOycsIFtoYW5kbGVyLCBsYWJlbF0pKTsKICB9CgogIExpc3Q8aW50PiBfZmluYWxsaWVzVXBUb0FuZEVuY2xvc2luZ0hhbmRsZXIoKSB7CiAgICBMaXN0PGludD4gcmVzdWx0ID0gPGludD5bXTsKICAgIGZvciAoaW50IGkgPSBqdW1wVGFyZ2V0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICBqcy5Ob2RlIG5vZGUgPSBqdW1wVGFyZ2V0c1tpXTsKICAgICAgaW50IGhhbmRsZXJMYWJlbCA9IGhhbmRsZXJMYWJlbHNbbm9kZV07CiAgICAgIGlmIChoYW5kbGVyTGFiZWwgIT0gbnVsbCkgewogICAgICAgIHJlc3VsdC5hZGQoaGFuZGxlckxhYmVsKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpbnQgZmluYWxseUxhYmVsID0gZmluYWxseUxhYmVsc1tub2RlXTsKICAgICAgaWYgKGZpbmFsbHlMYWJlbCAhPSBudWxsKSB7CiAgICAgICAgcmVzdWx0LmFkZChmaW5hbGx5TGFiZWwpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0LnJldmVyc2VkLnRvTGlzdCgpOwogIH0KCiAgLy8vIFNlZSB0aGUgY29tbWVudHMgb2YgW3Jld3JpdGVGdW5jdGlvbl0gZm9yIG1vcmUgZXhwbGFuYXRpb24uCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRyeShqcy5Ucnkgbm9kZSkgewogICAgaWYgKCFzaG91bGRUcmFuc2Zvcm0obm9kZSkpIHsKICAgICAganMuQmxvY2sgYm9keSA9IHRyYW5zbGF0ZVRvQmxvY2sobm9kZS5ib2R5KTsKICAgICAganMuQ2F0Y2ggY2F0Y2hQYXJ0ID0gKG5vZGUuY2F0Y2hQYXJ0ID09IG51bGwpCiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogbmV3IGpzLkNhdGNoKG5vZGUuY2F0Y2hQYXJ0LmRlY2xhcmF0aW9uLAogICAgICAgICAgICAgIHRyYW5zbGF0ZVRvQmxvY2sobm9kZS5jYXRjaFBhcnQuYm9keSkpOwogICAgICBqcy5CbG9jayBmaW5hbGx5UGFydCA9IChub2RlLmZpbmFsbHlQYXJ0ID09IG51bGwpCiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogdHJhbnNsYXRlVG9CbG9jayhub2RlLmZpbmFsbHlQYXJ0KTsKICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5UcnkoYm9keSwgY2F0Y2hQYXJ0LCBmaW5hbGx5UGFydCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaGFzVHJ5QmxvY2tzID0gdHJ1ZTsKICAgIGludCB1bmNhdWdodExhYmVsID0gbmV3TGFiZWwoInVuY2F1Z2h0Iik7CiAgICBpbnQgaGFuZGxlckxhYmVsID0KICAgICAgICAobm9kZS5jYXRjaFBhcnQgPT0gbnVsbCkgPyB1bmNhdWdodExhYmVsIDogbmV3TGFiZWwoImNhdGNoIik7CgogICAgaW50IGZpbmFsbHlMYWJlbCA9IG5ld0xhYmVsKCJmaW5hbGx5Iik7CiAgICBpbnQgYWZ0ZXJGaW5hbGx5TGFiZWwgPSBuZXdMYWJlbCgiYWZ0ZXIgZmluYWxseSIpOwogICAgaWYgKG5vZGUuZmluYWxseVBhcnQgIT0gbnVsbCkgewogICAgICBmaW5hbGx5TGFiZWxzW25vZGUuZmluYWxseVBhcnRdID0gZmluYWxseUxhYmVsOwogICAgICBqdW1wVGFyZ2V0cy5hZGQobm9kZS5maW5hbGx5UGFydCk7CiAgICB9CgogICAgaGFuZGxlckxhYmVsc1tub2RlXSA9IGhhbmRsZXJMYWJlbDsKICAgIGp1bXBUYXJnZXRzLmFkZChub2RlKTsKCiAgICAvLyBTZXQgdGhlIGVycm9yIGhhbmRsZXIgaGVyZS4gSXQgbXVzdCBiZSBjbGVhcmVkIG9uIGV2ZXJ5IHBhdGggb3V0OwogICAgLy8gbm9ybWFsIGFuZCBlcnJvciBleGl0LgogICAgc2V0RXJyb3JIYW5kbGVyKCk7CgogICAgdmlzaXRTdGF0ZW1lbnQobm9kZS5ib2R5KTsKCiAgICBqcy5Ob2RlIGxhc3QgPSBqdW1wVGFyZ2V0cy5yZW1vdmVMYXN0KCk7CiAgICBhc3NlcnQobGFzdCA9PSBub2RlKTsKCiAgICBpZiAobm9kZS5maW5hbGx5UGFydCA9PSBudWxsKSB7CiAgICAgIHNldEVycm9ySGFuZGxlcigpOwogICAgICBhZGRHb3RvKGFmdGVyRmluYWxseUxhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoZSBoYW5kbGVyIGlzIHJlc2V0IGFzIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmluYWxseSBibG9jay4KICAgICAgYWRkU3RhdGVtZW50KAogICAgICAgICAganMuanMuc3RhdGVtZW50KCIjLnB1c2goIyk7IiwgW25leHQsIGpzLm51bWJlcihhZnRlckZpbmFsbHlMYWJlbCldKSk7CiAgICAgIGFkZEdvdG8oZmluYWxseUxhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KCiAgICBpZiAobm9kZS5jYXRjaFBhcnQgIT0gbnVsbCkgewogICAgICBiZWdpbkxhYmVsKGhhbmRsZXJMYWJlbCk7CiAgICAgIC8vIFt1bmNhdWdodExhYmVsXSBpcyB0aGUgaGFuZGxlciBmb3IgdGhlIGNvZGUgaW4gdGhlIGNhdGNoLXBhcnQuCiAgICAgIC8vIEl0IGVuc3VyZXMgdGhhdCBbbmV4dE5hbWVdIGlzIHNldCB1cCB0byBydW4gdGhlIHJpZ2h0IGZpbmFsbHkgYmxvY2tzLgogICAgICBoYW5kbGVyTGFiZWxzW25vZGUuY2F0Y2hQYXJ0XSA9IHVuY2F1Z2h0TGFiZWw7CiAgICAgIGp1bXBUYXJnZXRzLmFkZChub2RlLmNhdGNoUGFydCk7CiAgICAgIHNldEVycm9ySGFuZGxlcigpOwogICAgICAvLyBUaGUgY2F0Y2ggZGVjbGFyYXRpb24gbmFtZSBjYW4gc2hhZG93IG91dGVyIHZhcmlhYmxlcywgc28gYSBmcmVzaCBuYW1lCiAgICAgIC8vIGlzIG5lZWRlZCB0byBhdm9pZCBjb2xsaXNpb25zLiAgU2VlIEVjbWEgMjYyLCAzcmQgZWRpdGlvbiwKICAgICAgLy8gc2VjdGlvbiAxMi4xNC4KICAgICAgU3RyaW5nIGVycm9yUmVuYW1lID0gZnJlc2hOYW1lKG5vZGUuY2F0Y2hQYXJ0LmRlY2xhcmF0aW9uLm5hbWUpOwogICAgICBsb2NhbFZhcmlhYmxlcy5hZGQobmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24oZXJyb3JSZW5hbWUpKTsKICAgICAgdmFyaWFibGVSZW5hbWluZ3MKICAgICAgICAgIC5hZGQobmV3IFBhaXIobm9kZS5jYXRjaFBhcnQuZGVjbGFyYXRpb24ubmFtZSwgZXJyb3JSZW5hbWUpKTsKICAgICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgiIyA9ICM7IiwgW2Vycm9yUmVuYW1lLCBjdXJyZW50RXJyb3JdKSk7CiAgICAgIHZpc2l0U3RhdGVtZW50KG5vZGUuY2F0Y2hQYXJ0LmJvZHkpOwogICAgICB2YXJpYWJsZVJlbmFtaW5ncy5yZW1vdmVMYXN0KCk7CiAgICAgIGlmIChub2RlLmZpbmFsbHlQYXJ0ICE9IG51bGwpIHsKICAgICAgICAvLyBUaGUgZXJyb3IgaGFzIGJlZW4gY2F1Z2h0LCBzbyBhZnRlciB0aGUgZmluYWxseSwgY29udGludWUgYWZ0ZXIgdGhlCiAgICAgICAgLy8gdHJ5LgogICAgICAgIGFkZFN0YXRlbWVudChqcy5qcwogICAgICAgICAgICAuc3RhdGVtZW50KCIjLnB1c2goIyk7IiwgW25leHQsIGpzLm51bWJlcihhZnRlckZpbmFsbHlMYWJlbCldKSk7CiAgICAgICAgYWRkR290byhmaW5hbGx5TGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIGFkZEdvdG8oYWZ0ZXJGaW5hbGx5TGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9CiAgICAgIGpzLk5vZGUgbGFzdCA9IGp1bXBUYXJnZXRzLnJlbW92ZUxhc3QoKTsKICAgICAgYXNzZXJ0KGxhc3QgPT0gbm9kZS5jYXRjaFBhcnQpOwogICAgfQoKICAgIC8vIFRoZSAidW5jYXVnaHQiLWhhbmRsZXIgdGVsbHMgdGhlIGZpbmFsbHktYmxvY2sgdG8gY29udGludWUgd2l0aAogICAgLy8gdGhlIGVuY2xvc2luZyBmaW5hbGx5LWJsb2NrcyB1bnRpbCB0aGUgY3VycmVudCBjYXRjaC1oYW5kbGVyLgogICAgYmVnaW5MYWJlbCh1bmNhdWdodExhYmVsKTsKCiAgICBMaXN0PGludD4gZW5jbG9zaW5nRmluYWxsaWVzID0gX2ZpbmFsbGllc1VwVG9BbmRFbmNsb3NpbmdIYW5kbGVyKCk7CgogICAgaW50IG5leHRMYWJlbCA9IGVuY2xvc2luZ0ZpbmFsbGllcy5yZW1vdmVMYXN0KCk7CiAgICBpZiAoZW5jbG9zaW5nRmluYWxsaWVzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gW2VuY2xvc2luZ0ZpbmFsbGllc10gY2FuIGJlIGVtcHR5IGlmIHRoZXJlIGlzIG5vIHN1cnJvdW5kaW5nIGZpbmFsbHkKICAgICAgLy8gYmxvY2tzLiBUaGVuIFtuZXh0TGFiZWxdIHdpbGwgYmUgW3JldGhyb3dMYWJlbF0uCiAgICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoIiMgPSAjOyIsIFsKICAgICAgICBuZXh0LAogICAgICAgIG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGVuY2xvc2luZ0ZpbmFsbGllcy5tYXAoanMubnVtYmVyKS50b0xpc3QoKSkKICAgICAgXSkpOwogICAgfQogICAgaWYgKG5vZGUuZmluYWxseVBhcnQgPT0gbnVsbCkgewogICAgICAvLyBUaGUgZmluYWxseS1ibG9jayBiZWxvbmdpbmcgdG8gW25vZGVdIHdpbGwgYmUgdmlzaXRlZCBiZWNhdXNlIG9mCiAgICAgIC8vIGZhbGx0aHJvdWdoLiBJZiBpdCBkb2VzIG5vdCBleGlzdCwgYWRkIGFuIGV4cGxpY2l0IGdvdG8uCiAgICAgIGFkZEdvdG8obmV4dExhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICAgIGlmIChub2RlLmZpbmFsbHlQYXJ0ICE9IG51bGwpIHsKICAgICAganMuTm9kZSBsYXN0ID0ganVtcFRhcmdldHMucmVtb3ZlTGFzdCgpOwogICAgICBhc3NlcnQobGFzdCA9PSBub2RlLmZpbmFsbHlQYXJ0KTsKCiAgICAgIGJlZ2luTGFiZWwoZmluYWxseUxhYmVsKTsKICAgICAgc2V0RXJyb3JIYW5kbGVyKCk7CiAgICAgIHZpc2l0U3RhdGVtZW50KG5vZGUuZmluYWxseVBhcnQpOwogICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLkNvbW1lbnQoIi8vIGdvdG8gdGhlIG5leHQgZmluYWxseSBoYW5kbGVyIikpOwogICAgICBhZGRTdGF0ZW1lbnQoanMuanMuc3RhdGVtZW50KCIjID0gIy5wb3AoKTsiLCBbZ290bywgbmV4dF0pKTsKICAgICAgYWRkQnJlYWsobm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBiZWdpbkxhYmVsKGFmdGVyRmluYWxseUxhYmVsKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihqcy5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHVucmVhY2hhYmxlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUpIHsKICAgIGZvciAoanMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBpbml0aWFsaXphdGlvbiBpbiBub2RlLmRlY2xhcmF0aW9ucykgewogICAgICBqcy5WYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gaW5pdGlhbGl6YXRpb24uZGVjbGFyYXRpb247CiAgICAgIGxvY2FsVmFyaWFibGVzLmFkZChkZWNsYXJhdGlvbik7CiAgICAgIGlmIChpbml0aWFsaXphdGlvbi52YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgd2l0aEV4cHJlc3Npb24oaW5pdGlhbGl6YXRpb24udmFsdWUsIChqcy5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgICAgICBhZGRFeHByZXNzaW9uU3RhdGVtZW50KAogICAgICAgICAgICAgIG5ldyBqcy5Bc3NpZ25tZW50KG5ldyBqcy5WYXJpYWJsZVVzZShkZWNsYXJhdGlvbi5uYW1lKSwgdmFsdWUpKTsKICAgICAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4ganMubnVtYmVyKDApOyAvLyBEdW1teSBleHByZXNzaW9uLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oanMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlKSB7CiAgICB1bnJlYWNoYWJsZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRWYXJpYWJsZVVzZShqcy5WYXJpYWJsZVVzZSBub2RlKSB7CiAgICBQYWlyPFN0cmluZywgU3RyaW5nPiByZW5hbWluZyA9IHZhcmlhYmxlUmVuYW1pbmdzLmxhc3RXaGVyZSgKICAgICAgICAoUGFpciByZW5hbWluZykgPT4gcmVuYW1pbmcuYSA9PSBub2RlLm5hbWUsCiAgICAgICAgb3JFbHNlOiAoKSA9PiBudWxsKTsKICAgIGlmIChyZW5hbWluZyA9PSBudWxsKSByZXR1cm4gbm9kZTsKICAgIHJldHVybiBuZXcganMuVmFyaWFibGVVc2UocmVuYW1pbmcuYik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0V2hpbGUoanMuV2hpbGUgbm9kZSkgewogICAgaWYgKCFzaG91bGRUcmFuc2Zvcm0obm9kZSkpIHsKICAgICAgYm9vbCBvbGRJbnNpZGVVbnRyYW5zbGF0ZWQgPSBpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGU7CiAgICAgIGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZSA9IHRydWU7CiAgICAgIHdpdGhFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uLCAoanMuRXhwcmVzc2lvbiBjb25kaXRpb24pIHsKICAgICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLldoaWxlKGNvbmRpdGlvbiwgdHJhbnNsYXRlVG9TdGF0ZW1lbnQobm9kZS5ib2R5KSkpOwogICAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgICBpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGUgPSBvbGRJbnNpZGVVbnRyYW5zbGF0ZWQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBjb250aW51ZUxhYmVsID0gbmV3TGFiZWwoIndoaWxlIGNvbmRpdGlvbiIpOwogICAgY29udGludWVMYWJlbHNbbm9kZV0gPSBjb250aW51ZUxhYmVsOwogICAgYmVnaW5MYWJlbChjb250aW51ZUxhYmVsKTsKCiAgICBpbnQgYWZ0ZXJMYWJlbCA9IG5ld0xhYmVsKCJhZnRlciB3aGlsZSIpOwogICAgYnJlYWtMYWJlbHNbbm9kZV0gPSBhZnRlckxhYmVsOwogICAganMuRXhwcmVzc2lvbiBjb25kaXRpb24gPSBub2RlLmNvbmRpdGlvbjsKICAgIC8vIElmIHRoZSBjb25kaXRpb24gaXMgYHRydWVgLCBhIHRlc3QgaXMgbm90IG5lZWRlZC4KICAgIGlmICghKGNvbmRpdGlvbiBpcyBqcy5MaXRlcmFsQm9vbCAmJiBjb25kaXRpb24udmFsdWUgPT0gdHJ1ZSkpIHsKICAgICAgd2l0aEV4cHJlc3Npb24obm9kZS5jb25kaXRpb24sIChqcy5FeHByZXNzaW9uIGNvbmRpdGlvbikgewogICAgICAgIGFkZFN0YXRlbWVudChuZXcganMuSWYubm9FbHNlKG5ldyBqcy5QcmVmaXgoIiEiLCBjb25kaXRpb24pLAogICAgICAgICAgICBnb3RvQW5kQnJlYWsoYWZ0ZXJMYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpKTsKICAgICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgIH0KICAgIGp1bXBUYXJnZXRzLmFkZChub2RlKTsKICAgIHZpc2l0U3RhdGVtZW50KG5vZGUuYm9keSk7CiAgICBqdW1wVGFyZ2V0cy5yZW1vdmVMYXN0KCk7CiAgICBhZGRHb3RvKGNvbnRpbnVlTGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgYmVnaW5MYWJlbChhZnRlckxhYmVsKTsKICB9CgogIGFkZFlpZWxkKGpzLkRhcnRZaWVsZCBub2RlLCBqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERhcnRZaWVsZChqcy5EYXJ0WWllbGQgbm9kZSkgewogICAgYXNzZXJ0KGlzU3luY1N0YXIgfHwgaXNBc3luY1N0YXIpOwogICAgaW50IGxhYmVsID0gbmV3TGFiZWwoImFmdGVyIHlpZWxkIik7CiAgICAvLyBEb24ndCBkbyBhIGJyZWFrIGhlcmUgZm9yIHRoZSBnb3RvLCBidXQgaW5zdGVhZCBhIHJldHVybiBpbiBlaXRoZXIKICAgIC8vIGFkZFN5bllpZWxkIG9yIGFkZEFzeW5jWWllbGQuCiAgICB3aXRoRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIChqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgICAgYWRkU3RhdGVtZW50KHNldEdvdG9WYXJpYWJsZShsYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICBhZGRZaWVsZChub2RlLCBleHByZXNzaW9uLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICBiZWdpbkxhYmVsKGxhYmVsKTsKICB9Cn0KCmpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24gX21ha2VWYXJpYWJsZUluaXRpYWxpemVyKGR5bmFtaWMgdmFyaWFibGUsCiAgICBqcy5FeHByZXNzaW9uIGluaXRWYWx1ZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICBqcy5WYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwogIGlmICh2YXJpYWJsZSBpcyBqcy5WYXJpYWJsZVVzZSkgewogICAgZGVjbGFyYXRpb24gPSBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbih2YXJpYWJsZS5uYW1lKTsKICB9IGVsc2UgaWYgKHZhcmlhYmxlIGlzIFN0cmluZykgewogICAgZGVjbGFyYXRpb24gPSBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbih2YXJpYWJsZSk7CiAgfSBlbHNlIHsKICAgIGFzc2VydCh2YXJpYWJsZSBpcyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgIGRlY2xhcmF0aW9uID0gdmFyaWFibGU7CiAgfQogIHJldHVybiBuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbihkZWNsYXJhdGlvbiwgaW5pdFZhbHVlKQogICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKfQoKY2xhc3MgQXN5bmNSZXdyaXRlciBleHRlbmRzIEFzeW5jUmV3cml0ZXJCYXNlIHsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0FzeW5jID0+IHRydWU7CgogIC8vLyBUaGUgQ29tcGxldGVyIHRoYXQgd2lsbCBmaW5pc2ggYW4gYXN5bmMgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIE5vdCB1c2VkIGZvciBzeW5jKiBvciBhc3luYyogZnVuY3Rpb25zLgogIFN0cmluZyBjb21wbGV0ZXJOYW1lOwogIGpzLlZhcmlhYmxlVXNlIGdldCBjb21wbGV0ZXIgPT4gbmV3IGpzLlZhcmlhYmxlVXNlKGNvbXBsZXRlck5hbWUpOwoKICAvLy8gVGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBhbiBhc3luYyBmdW5jdGlvbiB0byBpbml0aWF0ZSBhc3luY2hyb25vdXMKICAvLy8gZXhlY3V0aW9uIG9mIHRoZSBib2R5LiAgVGhpcyBpcyBjYWxsZWQgd2l0aDoKICAvLy8KICAvLy8gLSBUaGUgYm9keSBmdW5jdGlvbiBbYm9keU5hbWVdLgogIC8vLyAtIHRoZSBjb21wbGV0ZXIgb2JqZWN0IFtjb21wbGV0ZXJdLgogIC8vLwogIC8vLyBJdCByZXR1cm5zIHRoZSBjb21wbGV0ZXIncyBmdXR1cmUuIFBhc3NpbmcgdGhlIGNvbXBsZXRlciBhbmQgcmV0dXJuaW5nIGl0cwogIC8vLyBmdXR1cmUgaXMgYSBjb252ZW5pZW5jZSB0byBhbGxvdyBib3RoIHRoZSBpbml0aWF0aW9uIGFuZCBmZXRjaGluZyB0aGUKICAvLy8gZnV0dXJlIHRvIGJlIGNvbXBhY3RseSBlbmNvZGVkIGluIGEgcmV0dXJuIHN0YXRlbWVudCdzIGV4cHJlc3Npb24uCiAgZmluYWwganMuRXhwcmVzc2lvbiBhc3luY1N0YXJ0OwoKICAvLy8gRnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBhc3luYyBmdW5jdGlvbiB0byBzaW11bGF0ZSBhbiBgYXdhaXRgCiAgLy8vIGV4cHJlc3Npb24uIEl0IGlzIGNhbGxlZCB3aXRoOgogIC8vLwogIC8vLyAtIFRoZSB2YWx1ZSB0byBhd2FpdAogIC8vLyAtIFRoZSBib2R5IGZ1bmN0aW9uIFtib2R5TmFtZV0KICBmaW5hbCBqcy5FeHByZXNzaW9uIGFzeW5jQXdhaXQ7CgogIC8vLyBGdW5jdGlvbiBjYWxsZWQgYnkgdGhlIGFzeW5jIGZ1bmN0aW9uIHRvIHNpbXVsYXRlIGEgcmV0dXJuLgogIC8vLyBJdCBpcyBjYWxsZWQgd2l0aDoKICAvLy8KICAvLy8gLSBUaGUgdmFsdWUgdG8gcmV0dXJuCiAgLy8vIC0gVGhlIGNvbXBsZXRlciBvYmplY3QgW2NvbXBsZXRlcl0KICBmaW5hbCBqcy5FeHByZXNzaW9uIGFzeW5jUmV0dXJuOwoKICAvLy8gRnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBhc3luYyBmdW5jdGlvbiB0byBzaW11bGF0ZSBhIHJldGhyb3cuCiAgLy8vIEl0IGlzIGNhbGxlZCB3aXRoOgogIC8vLwogIC8vLyAtIFRoZSB2YWx1ZSBjb250YWluaW5nIHRoZSBleGNlcHRpb24gYW5kIHN0YWNrCiAgLy8vIC0gVGhlIGNvbXBsZXRlciBvYmplY3QgW2NvbXBsZXRlcl0KICBmaW5hbCBqcy5FeHByZXNzaW9uIGFzeW5jUmV0aHJvdzsKCiAgLy8vIENvbnN0cnVjdG9yIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgW2NvbXBsZXRlcl0gdmFyaWFibGUuCiAgLy8vCiAgLy8vIFNwZWNpZmljIHRvIGFzeW5jIG1ldGhvZHMuCiAgZmluYWwganMuRXhwcmVzc2lvbiBjb21wbGV0ZXJGYWN0b3J5OwogIExpc3Q8anMuRXhwcmVzc2lvbj4gY29tcGxldGVyRmFjdG9yeVR5cGVBcmd1bWVudHM7CgogIGZpbmFsIGpzLkV4cHJlc3Npb24gd3JhcEJvZHk7CgogIEFzeW5jUmV3cml0ZXIoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLCBTcGFubmFibGUgc3Bhbm5hYmxlLAogICAgICB7dGhpcy5hc3luY1N0YXJ0LAogICAgICB0aGlzLmFzeW5jQXdhaXQsCiAgICAgIHRoaXMuYXN5bmNSZXR1cm4sCiAgICAgIHRoaXMuYXN5bmNSZXRocm93LAogICAgICB0aGlzLmNvbXBsZXRlckZhY3RvcnksCiAgICAgIHRoaXMuY29tcGxldGVyRmFjdG9yeVR5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMud3JhcEJvZHksCiAgICAgIFN0cmluZyBzYWZlVmFyaWFibGVOYW1lKFN0cmluZyBwcm9wb3NlZE5hbWUpLAogICAgICBqcy5OYW1lIGJvZHlOYW1lfSkKICAgICAgOiBzdXBlcihyZXBvcnRlciwgc3Bhbm5hYmxlLCBzYWZlVmFyaWFibGVOYW1lLCBib2R5TmFtZSk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkWWllbGQoanMuRGFydFlpZWxkIG5vZGUsIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3Ioc3Bhbm5hYmxlLCAiWWllbGQgaW4gbm9uLWdlbmVyYXRpbmcgYXN5bmMgZnVuY3Rpb24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkRXJyb3JFeGl0KFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAoIWhhc0hhbmRsZXJMYWJlbHMpIHJldHVybjsgLy8gcmV0aHJvdyBoYW5kbGVkIGluIG1ldGhvZCBib2lsZXJwbGF0ZS4KICAgIGJlZ2luTGFiZWwocmV0aHJvd0xhYmVsKTsKICAgIGpzLkV4cHJlc3Npb24gdGhlbkhlbHBlckNhbGwgPSBqcy5qcygKICAgICAgICAiI3RoZW5IZWxwZXIoI2N1cnJlbnRFcnJvciwgI2NvbXBsZXRlcikiLCB7CiAgICAgICJ0aGVuSGVscGVyIjogYXN5bmNSZXRocm93LAogICAgICAiY3VycmVudEVycm9yIjogY3VycmVudEVycm9yLAogICAgICAiY29tcGxldGVyIjogY29tcGxldGVyCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgYWRkU3RhdGVtZW50KAogICAgICAgIG5ldyBqcy5SZXR1cm4odGhlbkhlbHBlckNhbGwpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgLy8vIFJldHVybmluZyBmcm9tIGFuIGFzeW5jIG1ldGhvZCBjYWxscyBbYXN5bmNTdGFySGVscGVyXSB3aXRoIHRoZSByZXN1bHQuCiAgLy8vICh0aGUgcmVzdWx0IG1pZ2h0IGhhdmUgYmVlbiBzdG9yZWQgaW4gW3JldHVyblZhbHVlXSBieSBzb21lIGZpbmFsbHkKICAvLy8gYmxvY2spLgogIEBvdmVycmlkZQogIHZvaWQgYWRkU3VjY2Vzc0V4aXQoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChhbmFseXNpcy5oYXNFeHBsaWNpdFJldHVybnMpIHsKICAgICAgYmVnaW5MYWJlbChleGl0TGFiZWwpOwogICAgfSBlbHNlIHsKICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5Db21tZW50KCJpbXBsaWNpdCByZXR1cm4iKSk7CiAgICB9CgogICAganMuRXhwcmVzc2lvbiBydW50aW1lSGVscGVyQ2FsbCA9CiAgICAgICAganMuanMoIiNydW50aW1lSGVscGVyKCNyZXR1cm5WYWx1ZSwgI2NvbXBsZXRlcikiLCB7CiAgICAgICJydW50aW1lSGVscGVyIjogYXN5bmNSZXR1cm4sCiAgICAgICJyZXR1cm5WYWx1ZSI6CiAgICAgICAgICBhbmFseXNpcy5oYXNFeHBsaWNpdFJldHVybnMgPyByZXR1cm5WYWx1ZSA6IG5ldyBqcy5MaXRlcmFsTnVsbCgpLAogICAgICAiY29tcGxldGVyIjogY29tcGxldGVyCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgYWRkU3RhdGVtZW50KG5ldyBqcy5SZXR1cm4ocnVudGltZUhlbHBlckNhbGwpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gdmFyaWFibGVJbml0aWFsaXphdGlvbnMoCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IHZhcmlhYmxlcyA9IDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPltdOwogICAgdmFyaWFibGVzLmFkZChfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXIoCiAgICAgICAgY29tcGxldGVyLAogICAgICAgIGpzLmpzKCcjKCMpJywgWwogICAgICAgICAgY29tcGxldGVyRmFjdG9yeSwKICAgICAgICAgIGNvbXBsZXRlckZhY3RvcnlUeXBlQXJndW1lbnRzCiAgICAgICAgXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgaWYgKGFuYWx5c2lzLmhhc0V4cGxpY2l0UmV0dXJucykgewogICAgICB2YXJpYWJsZXMKICAgICAgICAgIC5hZGQoX21ha2VWYXJpYWJsZUluaXRpYWxpemVyKHJldHVyblZhbHVlLCBudWxsLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogICAgcmV0dXJuIHZhcmlhYmxlczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5pdGlhbGl6ZU5hbWVzKCkgewogICAgY29tcGxldGVyTmFtZSA9IGZyZXNoTmFtZSgiY29tcGxldGVyIik7CiAgICBjb21wbGV0ZXJGYWN0b3J5VHlwZUFyZ3VtZW50cyA9CiAgICAgICAgcHJvY2Vzc1R5cGVBcmd1bWVudHMoY29tcGxldGVyRmFjdG9yeVR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuU3RhdGVtZW50IGF3YWl0U3RhdGVtZW50KAogICAgICBqcy5FeHByZXNzaW9uIHZhbHVlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAganMuRXhwcmVzc2lvbiBhc3luY0hlbHBlckNhbGwgPSBqcy5qcygiI2FzeW5jSGVscGVyKCN2YWx1ZSwgI2JvZHlOYW1lKSIsIHsKICAgICAgImFzeW5jSGVscGVyIjogYXN5bmNBd2FpdCwKICAgICAgInZhbHVlIjogdmFsdWUsCiAgICAgICJib2R5TmFtZSI6IGJvZHlOYW1lLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHJldHVybiBuZXcganMuUmV0dXJuKGFzeW5jSGVscGVyQ2FsbCkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkZ1biBmaW5pc2hGdW5jdGlvbigKICAgICAgTGlzdDxqcy5QYXJhbWV0ZXI+IHBhcmFtZXRlcnMsCiAgICAgIExpc3Q8anMuUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAganMuU3RhdGVtZW50IHJld3JpdHRlbkJvZHksCiAgICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IHZhcmlhYmxlRGVjbGFyYXRpb25zLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBib2R5U291cmNlSW5mb3JtYXRpb24pIHsKICAgIGpzLkV4cHJlc3Npb24gYXN5bmNSZXRocm93Q2FsbCA9CiAgICAgICAganMuanMoIiNhc3luY1JldGhyb3coI3Jlc3VsdCwgI2NvbXBsZXRlcikiLCB7CiAgICAgICJyZXN1bHQiOiByZXN1bHROYW1lLAogICAgICAiYXN5bmNSZXRocm93IjogYXN5bmNSZXRocm93LAogICAgICAiY29tcGxldGVyIjogY29tcGxldGVyLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5SZXR1cm4gcmV0dXJuQXN5bmNSZXRocm93ID0gbmV3IGpzLlJldHVybihhc3luY1JldGhyb3dDYWxsKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlN0YXRlbWVudCBlcnJvckNoZWNrID0ganMuanMuc3RhdGVtZW50KCIiIgogICAgICBpZiAoI2Vycm9yQ29kZSA9PT0gI0VSUk9SKSB7CiAgICAgICAgaWYgKCNoYXNIYW5kbGVyTGFiZWxzKSB7CiAgICAgICAgICAgICNjdXJyZW50RXJyb3IgPSAjcmVzdWx0OwogICAgICAgICAgICAjZ290byA9ICNoYW5kbGVyOwogICAgICAgIH0gZWxzZQogICAgICAgICAgICAjcmV0dXJuQXN5bmNSZXRocm93OwogICAgICB9IiIiLCB7CiAgICAgICJlcnJvckNvZGUiOiBlcnJvckNvZGVOYW1lLAogICAgICAiRVJST1IiOiBqcy5udW1iZXIoZXJyb3JfY29kZXMuRVJST1IpLAogICAgICAiaGFzSGFuZGxlckxhYmVscyI6IGhhc0hhbmRsZXJMYWJlbHMsCiAgICAgICJjdXJyZW50RXJyb3IiOiBjdXJyZW50RXJyb3IsCiAgICAgICJyZXN1bHQiOiByZXN1bHROYW1lLAogICAgICAiZ290byI6IGdvdG8sCiAgICAgICJoYW5kbGVyIjogaGFuZGxlciwKICAgICAgInJldHVybkFzeW5jUmV0aHJvdyI6IHJldHVybkFzeW5jUmV0aHJvdywKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuRnVuIGlubmVyRnVuY3Rpb24gPSBqcy5qcygiIiIKICAgICAgZnVuY3Rpb24gKCNlcnJvckNvZGUsICNyZXN1bHQpIHsKICAgICAgICAjZXJyb3JDaGVjazsKICAgICAgICAjcmV3cml0dGVuQm9keTsKICAgICAgfSIiIiwgewogICAgICAiZXJyb3JDb2RlIjogZXJyb3JDb2RlTmFtZSwKICAgICAgInJlc3VsdCI6IHJlc3VsdE5hbWUsCiAgICAgICJlcnJvckNoZWNrIjogZXJyb3JDaGVjaywKICAgICAgInJld3JpdHRlbkJvZHkiOiByZXdyaXR0ZW5Cb2R5LAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGZ1bmN0aW9uU291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBhc3luY1N0YXJ0Q2FsbCA9IGpzLmpzKCIjYXN5bmNTdGFydCgjYm9keU5hbWUsICNjb21wbGV0ZXIpIiwgewogICAgICAiYXN5bmNTdGFydCI6IGFzeW5jU3RhcnQsCiAgICAgICJib2R5TmFtZSI6IGJvZHlOYW1lLAogICAgICAiY29tcGxldGVyIjogY29tcGxldGVyLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5SZXR1cm4gcmV0dXJuQXN5bmNTdGFydCA9IG5ldyBqcy5SZXR1cm4oYXN5bmNTdGFydENhbGwpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiB3cmFwQm9keUNhbGwgPSBqcy5qcygiI3dyYXBCb2R5KCNpbm5lckZ1bmN0aW9uKSIsIHsKICAgICAgIndyYXBCb2R5Ijogd3JhcEJvZHksCiAgICAgICJpbm5lckZ1bmN0aW9uIjogaW5uZXJGdW5jdGlvbiwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAgcmV0dXJuIGpzLmpzKCIiIgogICAgICAgIGZ1bmN0aW9uICgjcGFyYW1ldGVycywgI3R5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAjdmFyaWFibGVEZWNsYXJhdGlvbnM7CiAgICAgICAgICB2YXIgI2JvZHlOYW1lID0gI3dyYXBCb2R5Q2FsbDsKICAgICAgICAgICNyZXR1cm5Bc3luY1N0YXJ0OwogICAgICAgIH0iIiIsIHsKICAgICAgInBhcmFtZXRlcnMiOiBwYXJhbWV0ZXJzLAogICAgICAidHlwZVBhcmFtZXRlcnMiOiB0eXBlUGFyYW1ldGVycywKICAgICAgInZhcmlhYmxlRGVjbGFyYXRpb25zIjogdmFyaWFibGVEZWNsYXJhdGlvbnMsCiAgICAgICJib2R5TmFtZSI6IGJvZHlOYW1lLAogICAgICAid3JhcEJvZHlDYWxsIjogd3JhcEJvZHlDYWxsLAogICAgICAicmV0dXJuQXN5bmNTdGFydCI6IHJldHVybkFzeW5jU3RhcnQsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oZnVuY3Rpb25Tb3VyY2VJbmZvcm1hdGlvbik7CiAgfQp9CgpjbGFzcyBTeW5jU3RhclJld3JpdGVyIGV4dGVuZHMgQXN5bmNSZXdyaXRlckJhc2UgewogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3luY1N0YXIgPT4gdHJ1ZTsKCiAgLy8vIENvbnN0cnVjdG9yIGNyZWF0aW5nIHRoZSBJdGVyYWJsZSBmb3IgYSBzeW5jKiBtZXRob2QuIENhbGxlZCB3aXRoCiAgLy8vIFtib2R5TmFtZV0uCiAgZmluYWwganMuRXhwcmVzc2lvbiBpdGVyYWJsZUZhY3Rvcnk7CiAgTGlzdDxqcy5FeHByZXNzaW9uPiBpdGVyYWJsZUZhY3RvcnlUeXBlQXJndW1lbnRzOwoKICAvLy8gQSBKUyBFeHByZXNzaW9uIHRoYXQgY3JlYXRlcyBhIG1hcmtlciBzaG93aW5nIHRoYXQgaXRlcmF0aW9uIGlzIG92ZXIuCiAgLy8vCiAgLy8vIENhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KICBmaW5hbCBqcy5FeHByZXNzaW9uIGVuZE9mSXRlcmF0aW9uOwoKICAvLy8gQSBKUyBFeHByZXNzaW9uIHRoYXQgY3JlYXRlcyBhIG1hcmtlciBpbmRpY2F0aW9uIGEgJ3lpZWxkKicgc3RhdGVtZW50LgogIC8vLwogIC8vLyBDYWxsZWQgd2l0aCB0aGUgc3RyZWFtIHRvIHlpZWxkIGZyb20uCiAgZmluYWwganMuRXhwcmVzc2lvbiB5aWVsZFN0YXJFeHByZXNzaW9uOwoKICAvLy8gVXNlZCBieSBzeW5jKiBmdW5jdGlvbnMgdG8gdGhyb3cgZXhlcHRpb25zLgogIGZpbmFsIGpzLkV4cHJlc3Npb24gdW5jYXVnaHRFcnJvckV4cHJlc3Npb247CgogIFN5bmNTdGFyUmV3cml0ZXIoRGlhZ25vc3RpY1JlcG9ydGVyIGRpYWdub3N0aWNMaXN0ZW5lciwgc3Bhbm5hYmxlLAogICAgICB7dGhpcy5lbmRPZkl0ZXJhdGlvbiwKICAgICAgdGhpcy5pdGVyYWJsZUZhY3RvcnksCiAgICAgIHRoaXMuaXRlcmFibGVGYWN0b3J5VHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy55aWVsZFN0YXJFeHByZXNzaW9uLAogICAgICB0aGlzLnVuY2F1Z2h0RXJyb3JFeHByZXNzaW9uLAogICAgICBTdHJpbmcgc2FmZVZhcmlhYmxlTmFtZShTdHJpbmcgcHJvcG9zZWROYW1lKSwKICAgICAganMuTmFtZSBib2R5TmFtZX0pCiAgICAgIDogc3VwZXIoZGlhZ25vc3RpY0xpc3RlbmVyLCBzcGFubmFibGUsIHNhZmVWYXJpYWJsZU5hbWUsIGJvZHlOYW1lKTsKCiAgLy8vIFRyYW5zbGF0ZXMgYSB5aWVsZC95aWVsZCogaW4gYW4gc3luYyouCiAgLy8vCiAgLy8vIGB5aWVsZGAgaW4gYSBzeW5jKiBmdW5jdGlvbiBqdXN0IHJldHVybnMgW3ZhbHVlXS4KICAvLy8gYHlpZWxkKmAgd3JhcHMgW3ZhbHVlXSBpbiBhIFt5aWVsZFN0YXJFeHByZXNzaW9uXSBhbmQgcmV0dXJucyBpdC4KICBAb3ZlcnJpZGUKICB2b2lkIGFkZFlpZWxkKGpzLkRhcnRZaWVsZCBub2RlLCBqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAobm9kZS5oYXNTdGFyKSB7CiAgICAgIGFkZFN0YXRlbWVudChuZXcganMuUmV0dXJuKG5ldyBqcy5DYWxsKHlpZWxkU3RhckV4cHJlc3Npb24sIFtleHByZXNzaW9uXSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZFN0YXRlbWVudCgKICAgICAgICAgIG5ldyBqcy5SZXR1cm4oZXhwcmVzc2lvbikud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5GdW4gZmluaXNoRnVuY3Rpb24oCiAgICAgIExpc3Q8anMuUGFyYW1ldGVyPiBwYXJhbWV0ZXJzLAogICAgICBMaXN0PGpzLlBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIGpzLlN0YXRlbWVudCByZXdyaXR0ZW5Cb2R5LAogICAgICBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdCB2YXJpYWJsZURlY2xhcmF0aW9ucywKICAgICAgU291cmNlSW5mb3JtYXRpb24gZnVuY3Rpb25Tb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgU291cmNlSW5mb3JtYXRpb24gYm9keVNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBFYWNoIGl0ZXJhdG9yIGludm9jYXRpb24gb24gdGhlIGl0ZXJhYmxlIHNob3VsZCB3b3JrIG9uIGl0cyBvd24gY29weSBvZgogICAgLy8gdGhlIHBhcmFtZXRlcnMuCiAgICAvLyBUT0RPKHNpZ3VyZG0pOiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBjb3B5aW5nIGZvciBwYXJhbWV0ZXJzIHRoYXQgYXJlCiAgICAvLyBtdXRhdGVkLgogICAgTGlzdDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiBkZWNsYXJhdGlvbnMgPQogICAgICAgIDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPltdOwogICAgTGlzdDxqcy5QYXJhbWV0ZXI+IHJlbmFtZWRQYXJhbWV0ZXJzID0gPGpzLlBhcmFtZXRlcj5bXTsKICAgIGZvciAoanMuUGFyYW1ldGVyIHBhcmFtZXRlciBpbiBwYXJhbWV0ZXJzKSB7CiAgICAgIFN0cmluZyBuYW1lID0gcGFyYW1ldGVyLm5hbWU7CiAgICAgIFN0cmluZyByZW5hbWVkTmFtZSA9IGZyZXNoTmFtZShuYW1lKTsKICAgICAgcmVuYW1lZFBhcmFtZXRlcnMuYWRkKG5ldyBqcy5QYXJhbWV0ZXIocmVuYW1lZE5hbWUpKTsKICAgICAgZGVjbGFyYXRpb25zLmFkZChuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbigKICAgICAgICAgIG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKG5hbWUpLCBuZXcganMuVmFyaWFibGVVc2UocmVuYW1lZE5hbWUpKSk7CiAgICB9CiAgICBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBjb3B5UGFyYW1ldGVycyA9CiAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGRlY2xhcmF0aW9ucyk7CgogICAganMuRXhwcmVzc2lvbiBzZXRDdXJyZW50RXJyb3IgPSBqcy5qcygiI2N1cnJlbnRFcnJvciA9ICNyZXN1bHQiLCB7CiAgICAgICJyZXN1bHQiOiByZXN1bHROYW1lLAogICAgICAiY3VycmVudEVycm9yIjogY3VycmVudEVycm9yTmFtZSwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBzZXRHb3RvID0ganMuanMoIiNnb3RvID0gI2hhbmRsZXIiLCB7CiAgICAgICJnb3RvIjogZ290bywKICAgICAgImhhbmRsZXIiOiBoYW5kbGVyLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5TdGF0ZW1lbnQgY2hlY2tFcnJvckNvZGUgPSBqcy5qcy5zdGF0ZW1lbnQoIiIiCiAgICAgICAgICBpZiAoI2Vycm9yQ29kZSA9PT0gI0VSUk9SKSB7CiAgICAgICAgICAgICAgI3NldEN1cnJlbnRFcnJvcjsKICAgICAgICAgICAgICAjc2V0R290bzsKICAgICAgICAgIH0iIiIsIHsKICAgICAgImVycm9yQ29kZSI6IGVycm9yQ29kZU5hbWUsCiAgICAgICJFUlJPUiI6IGpzLm51bWJlcihlcnJvcl9jb2Rlcy5FUlJPUiksCiAgICAgICJzZXRDdXJyZW50RXJyb3IiOiBzZXRDdXJyZW50RXJyb3IsCiAgICAgICJzZXRHb3RvIjogc2V0R290bywKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuTmFtZWRGdW5jdGlvbiBpbm5lcklubmVyRnVuY3Rpb24gPSBqcy5qcygiIiIKICAgICAgICAgIGZ1bmN0aW9uICNib2R5KCNlcnJvckNvZGUsICNyZXN1bHQpIHsKICAgICAgICAgICAgI2NoZWNrRXJyb3JDb2RlOwogICAgICAgICAgICAjaGVscGVyQm9keTsKICAgICAgICAgIH0iIiIsIHsKICAgICAgImhlbHBlckJvZHkiOiByZXdyaXR0ZW5Cb2R5LAogICAgICAiZXJyb3JDb2RlIjogZXJyb3JDb2RlTmFtZSwKICAgICAgImJvZHkiOiBib2R5TmFtZSwKICAgICAgInJlc3VsdCI6IHJlc3VsdE5hbWUsCiAgICAgICJjaGVja0Vycm9yQ29kZSI6IGNoZWNrRXJyb3JDb2RlLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGZ1bmN0aW9uU291cmNlSW5mb3JtYXRpb24pOwogICAganMuUmV0dXJuIHJldHVybklubmVySW5uZXJGdW5jdGlvbiA9IG5ldyBqcy5SZXR1cm4oaW5uZXJJbm5lckZ1bmN0aW9uKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkZ1biBpbm5lckZ1bmN0aW9uID0ganMuanMoIiIiCiAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICgjaGFzUGFyYW1ldGVycykgewogICAgICAgICAgICAgICNjb3B5UGFyYW1ldGVyczsKICAgICAgICAgICAgfQogICAgICAgICAgICAjdmFyRGVjbDsKICAgICAgICAgICAgI3JldHVybklubmVySW5uZXJGdW5jdGlvbjsKICAgICAgICAgIH0iIiIsIHsKICAgICAgImhhc1BhcmFtZXRlcnMiOiBwYXJhbWV0ZXJzLmlzTm90RW1wdHksCiAgICAgICJjb3B5UGFyYW1ldGVycyI6IGNvcHlQYXJhbWV0ZXJzLAogICAgICAidmFyRGVjbCI6IHZhcmlhYmxlRGVjbGFyYXRpb25zLAogICAgICAicmV0dXJuSW5uZXJJbm5lckZ1bmN0aW9uIjogcmV0dXJuSW5uZXJJbm5lckZ1bmN0aW9uLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGZ1bmN0aW9uU291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBjYWxsSXRlcmFibGVGYWN0b3J5ID0KICAgICAgICBqcy5qcygiI2l0ZXJhYmxlRmFjdG9yeSgjaW5uZXJGdW5jdGlvbiwgI3R5cGUpIiwgewogICAgICAiaXRlcmFibGVGYWN0b3J5IjogaXRlcmFibGVGYWN0b3J5LAogICAgICAidHlwZSI6IGl0ZXJhYmxlRmFjdG9yeVR5cGVBcmd1bWVudHMsCiAgICAgICJpbm5lckZ1bmN0aW9uIjogaW5uZXJGdW5jdGlvbiwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuU3RhdGVtZW50IHJldHVybkNhbGxJdGVyYWJsZUZhY3RvcnkgPSBuZXcganMuUmV0dXJuKGNhbGxJdGVyYWJsZUZhY3RvcnkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAgcmV0dXJuIGpzLmpzKCIiIgogICAgICAgICAgZnVuY3Rpb24gKCNyZW5hbWVkUGFyYW1ldGVycywgI3R5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgIGlmICgjbmVlZHNUaGlzKQogICAgICAgICAgICAgIHZhciAjc2VsZiA9IHRoaXM7CiAgICAgICAgICAgICNyZXR1cm5DYWxsSXRlcmFibGVGYWN0b3J5OwogICAgICAgICAgfQogICAgICAgICAgIiIiLCB7CiAgICAgICJyZW5hbWVkUGFyYW1ldGVycyI6IHJlbmFtZWRQYXJhbWV0ZXJzLAogICAgICAidHlwZVBhcmFtZXRlcnMiOiB0eXBlUGFyYW1ldGVycywKICAgICAgIm5lZWRzVGhpcyI6IGFuYWx5c2lzLmhhc1RoaXMsCiAgICAgICJzZWxmIjogc2VsZk5hbWUsCiAgICAgICJyZXR1cm5DYWxsSXRlcmFibGVGYWN0b3J5IjogcmV0dXJuQ2FsbEl0ZXJhYmxlRmFjdG9yeSwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkRXJyb3JFeGl0KFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBoYXNIYW5kbGVyTGFiZWxzID0gdHJ1ZTsgLy8gVE9ETyhzcmEpOiBBZGQgc2hvcnQgZm9ybSBlcnJvciBoYW5kbGVyLgogICAgYmVnaW5MYWJlbChyZXRocm93TGFiZWwpOwogICAganMuRXhwcmVzc2lvbiB1bmNhdWdodEVycm9yRXhwcmVzc2lvbkNhbGwgPSBqcy5qcygnIygjKScsIFsKICAgICAgdW5jYXVnaHRFcnJvckV4cHJlc3Npb24sCiAgICAgIGN1cnJlbnRFcnJvcgogICAgXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGFkZFN0YXRlbWVudChuZXcganMuUmV0dXJuKHVuY2F1Z2h0RXJyb3JFeHByZXNzaW9uQ2FsbCkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICAvLy8gUmV0dXJuaW5nIGZyb20gYSBzeW5jKiBmdW5jdGlvbiByZXR1cm5zIGFuIFtlbmRPZkl0ZXJhdGlvbl0gbWFya2VyLgogIEBvdmVycmlkZQogIHZvaWQgYWRkU3VjY2Vzc0V4aXQoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChhbmFseXNpcy5oYXNFeHBsaWNpdFJldHVybnMpIHsKICAgICAgYmVnaW5MYWJlbChleGl0TGFiZWwpOwogICAgfSBlbHNlIHsKICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5Db21tZW50KCJpbXBsaWNpdCByZXR1cm4iKSk7CiAgICB9CiAgICBqcy5FeHByZXNzaW9uIGVuZE9mSXRlcmF0aW9uQ2FsbCA9CiAgICAgICAganMuanMoJyMoKScsIFtlbmRPZkl0ZXJhdGlvbl0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLlJldHVybihlbmRPZkl0ZXJhdGlvbkNhbGwpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gdmFyaWFibGVJbml0aWFsaXphdGlvbnMoCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IHZhcmlhYmxlcyA9IDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPltdOwogICAgcmV0dXJuIHZhcmlhYmxlczsKICB9CgogIEBvdmVycmlkZQogIGpzLlN0YXRlbWVudCBhd2FpdFN0YXRlbWVudCgKICAgICAganMuRXhwcmVzc2lvbiB2YWx1ZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHRocm93IHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgc3Bhbm5hYmxlLCAiU3luYyogZnVuY3Rpb25zIGNhbm5vdCBjb250YWluIGF3YWl0IHN0YXRlbWVudHMuIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGluaXRpYWxpemVOYW1lcygpIHsKICAgIGl0ZXJhYmxlRmFjdG9yeVR5cGVBcmd1bWVudHMgPQogICAgICAgIHByb2Nlc3NUeXBlQXJndW1lbnRzKGl0ZXJhYmxlRmFjdG9yeVR5cGVBcmd1bWVudHMpOwogIH0KfQoKY2xhc3MgQXN5bmNTdGFyUmV3cml0ZXIgZXh0ZW5kcyBBc3luY1Jld3JpdGVyQmFzZSB7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNBc3luY1N0YXIgPT4gdHJ1ZTsKCiAgLy8vIFRoZSBzdGFjayBvZiBsYWJlbHMgb2YgZmluYWxseSBibG9ja3MgdG8gYXNzaWduIHRvIFtuZXh0XSBpZiB0aGUKICAvLy8gYXN5bmMqIFtTdHJlYW1TdWJzY3JpcHRpb25dIHdhcyBjYW5jZWxlZCBkdXJpbmcgYSB5aWVsZC4KICBqcy5WYXJpYWJsZVVzZSBnZXQgbmV4dFdoZW5DYW5jZWxlZCB7CiAgICByZXR1cm4gbmV3IGpzLlZhcmlhYmxlVXNlKG5leHRXaGVuQ2FuY2VsZWROYW1lKTsKICB9CgogIFN0cmluZyBuZXh0V2hlbkNhbmNlbGVkTmFtZTsKCiAgLy8vIFRoZSBTdHJlYW1Db250cm9sbGVyIHRoYXQgY29udHJvbHMgYW4gYXN5bmMqIGZ1bmN0aW9uLgogIFN0cmluZyBjb250cm9sbGVyTmFtZTsKICBqcy5WYXJpYWJsZVVzZSBnZXQgY29udHJvbGxlciA9PiBuZXcganMuVmFyaWFibGVVc2UoY29udHJvbGxlck5hbWUpOwoKICAvLy8gVGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBhbiBhc3luYyogZnVuY3Rpb24gdG8gc2ltdWxhdGUgYW4gYXdhaXQsIHlpZWxkIG9yCiAgLy8vIHlpZWxkKi4KICAvLy8KICAvLy8gRm9yIGFuIGF3YWl0L3lpZWxkL3lpZWxkKiBpdCBpcyBjYWxsZWQgd2l0aDoKICAvLy8KICAvLy8gLSBUaGUgdmFsdWUgdG8gYXdhaXQveWllbGRFeHByZXNzaW9uKHZhbHVlIHRvIHlpZWxkKS8KICAvLy8geWllbGRTdGFyRXhwcmVzc2lvbihzdHJlYW0gdG8geWllbGQpCiAgLy8vIC0gVGhlIGJvZHkgZnVuY3Rpb24gW2JvZHlOYW1lXQogIC8vLyAtIFRoZSBjb250cm9sbGVyIG9iamVjdCBbY29udHJvbGxlck5hbWVdCiAgLy8vCiAgLy8vIEZvciBhIHJldHVybiBpdCBpcyBjYWxsZWQgd2l0aDoKICAvLy8KICAvLy8gLSBudWxsCiAgLy8vIC0gbnVsbAogIC8vLyAtIFRoZSBbY29udHJvbGxlck5hbWVdCiAgLy8vIC0gbnVsbC4KICBmaW5hbCBqcy5FeHByZXNzaW9uIGFzeW5jU3RhckhlbHBlcjsKCiAgLy8vIENvbnN0cnVjdG9yIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgW2NvbnRyb2xsZXJOYW1lXSB2YXJpYWJsZS4KICAvLy8KICAvLy8gU3BlY2lmaWMgdG8gYXN5bmMqIG1ldGhvZHMuCiAgZmluYWwganMuRXhwcmVzc2lvbiBuZXdDb250cm9sbGVyOwogIExpc3Q8anMuRXhwcmVzc2lvbj4gbmV3Q29udHJvbGxlclR5cGVBcmd1bWVudHM7CgogIC8vLyBVc2VkIHRvIGdldCB0aGUgYFN0cmVhbWAgb3V0IG9mIHRoZSBbY29udHJvbGxlck5hbWVdIHZhcmlhYmxlLgogIGZpbmFsIGpzLkV4cHJlc3Npb24gc3RyZWFtT2ZDb250cm9sbGVyOwoKICAvLy8gQSBKUyBFeHByZXNzaW9uIHRoYXQgY3JlYXRlcyBhIG1hcmtlciBpbmRpY2F0aW5nIGEgJ3lpZWxkJyBzdGF0ZW1lbnQuCiAgLy8vCiAgLy8vIENhbGxlZCB3aXRoIHRoZSB2YWx1ZSB0byB5aWVsZC4KICBmaW5hbCBqcy5FeHByZXNzaW9uIHlpZWxkRXhwcmVzc2lvbjsKCiAgLy8vIEEgSlMgRXhwcmVzc2lvbiB0aGF0IGNyZWF0ZXMgYSBtYXJrZXIgaW5kaWNhdGlvbiBhICd5aWVsZConIHN0YXRlbWVudC4KICAvLy8KICAvLy8gQ2FsbGVkIHdpdGggdGhlIHN0cmVhbSB0byB5aWVsZCBmcm9tLgogIGZpbmFsIGpzLkV4cHJlc3Npb24geWllbGRTdGFyRXhwcmVzc2lvbjsKCiAgZmluYWwganMuRXhwcmVzc2lvbiB3cmFwQm9keTsKCiAgQXN5bmNTdGFyUmV3cml0ZXIoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLCBTcGFubmFibGUgc3Bhbm5hYmxlLAogICAgICB7dGhpcy5hc3luY1N0YXJIZWxwZXIsCiAgICAgIHRoaXMuc3RyZWFtT2ZDb250cm9sbGVyLAogICAgICB0aGlzLm5ld0NvbnRyb2xsZXIsCiAgICAgIHRoaXMubmV3Q29udHJvbGxlclR5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMueWllbGRFeHByZXNzaW9uLAogICAgICB0aGlzLnlpZWxkU3RhckV4cHJlc3Npb24sCiAgICAgIHRoaXMud3JhcEJvZHksCiAgICAgIFN0cmluZyBzYWZlVmFyaWFibGVOYW1lKFN0cmluZyBwcm9wb3NlZE5hbWUpLAogICAgICBqcy5OYW1lIGJvZHlOYW1lfSkKICAgICAgOiBzdXBlcihyZXBvcnRlciwgc3Bhbm5hYmxlLCBzYWZlVmFyaWFibGVOYW1lLCBib2R5TmFtZSk7CgogIC8vLyBUcmFuc2xhdGVzIGEgeWllbGQveWllbGQqIGluIGFuIGFzeW5jKiBmdW5jdGlvbi4KICAvLy8KICAvLy8geWllbGQveWllbGQqIGluIGFuIGFzeW5jKiBmdW5jdGlvbiBpcyB0cmFuc2xhdGVkIG11Y2ggbGlrZSB0aGUgYGF3YWl0YCBpcwogIC8vLyB0cmFuc2xhdGVkIGluIFt2aXNpdEF3YWl0XSwgb25seSB0aGUgb2JqZWN0IGlzIHdyYXBwZWQgaW4gYQogIC8vLyBbeWllbGRFeHByZXNzaW9uXS9beWllbGRTdGFyRXhwcmVzc2lvbl0gdG8gbGV0IFthc3luY1N0YXJIZWxwZXJdCiAgLy8vIGRpc3Rpbmd1aXNoIHRoZW0uCiAgLy8vIEFsc28gW25leHRXaGVuQ2FuY2VsZWRdIGlzIHNldCB1cCB0byBjb250YWluIHRoZSBmaW5hbGx5IGJsb2NrcyB0aGF0CiAgLy8vIG11c3QgYmUgcnVuIGluIGNhc2UgdGhlIHN0cmVhbSB3YXMgY2FuY2VsZWQuCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRZaWVsZChqcy5EYXJ0WWllbGQgbm9kZSwganMuRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gRmluZCBhbGwgdGhlIGZpbmFsbHkgYmxvY2tzIHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBpZiB0aGUgc3RyZWFtIGlzCiAgICAvLyBjYW5jZWxlZCBkdXJpbmcgdGhlIHlpZWxkLgogICAgLy8gQXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBsYWJlbC4KICAgIExpc3Q8aW50PiBlbmNsb3NpbmdGaW5hbGx5TGFiZWxzID0gPGludD5bZXhpdExhYmVsXTsKICAgIGVuY2xvc2luZ0ZpbmFsbHlMYWJlbHMuYWRkQWxsKGp1bXBUYXJnZXRzCiAgICAgICAgLndoZXJlKChqcy5Ob2RlIG5vZGUpID0+IGZpbmFsbHlMYWJlbHNbbm9kZV0gIT0gbnVsbCkKICAgICAgICAubWFwKChqcy5Ob2RlIG5vZGUpID0+IGZpbmFsbHlMYWJlbHNbbm9kZV0pKTsKICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoIiMgPSAjOyIsIFsKICAgICAgbmV4dFdoZW5DYW5jZWxlZCwKICAgICAgbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoZW5jbG9zaW5nRmluYWxseUxhYmVscy5tYXAoanMubnVtYmVyKS50b0xpc3QoKSkKICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAganMuRXhwcmVzc2lvbiB5aWVsZEV4cHJlc3Npb25DYWxsID0ganMuanMoIiN5aWVsZEV4cHJlc3Npb24oI2V4cHJlc3Npb24pIiwgewogICAgICAieWllbGRFeHByZXNzaW9uIjogbm9kZS5oYXNTdGFyID8geWllbGRTdGFyRXhwcmVzc2lvbiA6IHlpZWxkRXhwcmVzc2lvbiwKICAgICAgImV4cHJlc3Npb24iOiBleHByZXNzaW9uLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gYXN5bmNTdGFySGVscGVyQ2FsbCA9IGpzCiAgICAgICAgLmpzKCIjYXN5bmNTdGFySGVscGVyKCN5aWVsZEV4cHJlc3Npb25DYWxsLCAjYm9keU5hbWUsICNjb250cm9sbGVyKSIsIHsKICAgICAgImFzeW5jU3RhckhlbHBlciI6IGFzeW5jU3RhckhlbHBlciwKICAgICAgInlpZWxkRXhwcmVzc2lvbkNhbGwiOiB5aWVsZEV4cHJlc3Npb25DYWxsLAogICAgICAiYm9keU5hbWUiOiBib2R5TmFtZSwKICAgICAgImNvbnRyb2xsZXIiOiBjb250cm9sbGVyTmFtZSwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLlJldHVybihhc3luY1N0YXJIZWxwZXJDYWxsKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkZ1biBmaW5pc2hGdW5jdGlvbigKICAgICAgTGlzdDxqcy5QYXJhbWV0ZXI+IHBhcmFtZXRlcnMsCiAgICAgIExpc3Q8anMuUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAganMuU3RhdGVtZW50IHJld3JpdHRlbkJvZHksCiAgICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IHZhcmlhYmxlRGVjbGFyYXRpb25zLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBib2R5U291cmNlSW5mb3JtYXRpb24pIHsKICAgIGpzLkV4cHJlc3Npb24gdXBkYXRlTmV4dCA9IGpzLmpzKCIjbmV4dCA9ICNuZXh0V2hlbkNhbmNlbGVkIiwgewogICAgICAibmV4dCI6IG5leHQsCiAgICAgICJuZXh0V2hlbkNhbmNlbGVkIjogbmV4dFdoZW5DYW5jZWxlZCwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBjYWxsUG9wID0ganMuanMoIiNuZXh0LnBvcCgpIiwgewogICAgICAibmV4dCI6IG5leHQsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gZ290b0NhbmNlbGxlZCA9IGpzLmpzKCIjZ290byA9ICNjYWxsUG9wIiwgewogICAgICAiZ290byI6IGdvdG8sCiAgICAgICJjYWxsUG9wIjogY2FsbFBvcCwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiB1cGRhdGVFcnJvciA9IGpzLmpzKCIjY3VycmVudEVycm9yID0gI3Jlc3VsdCIsIHsKICAgICAgImN1cnJlbnRFcnJvciI6IGN1cnJlbnRFcnJvciwKICAgICAgInJlc3VsdCI6IHJlc3VsdE5hbWUsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gZ290b0Vycm9yID0ganMuanMoIiNnb3RvID0gI2hhbmRsZXIiLCB7CiAgICAgICJnb3RvIjogZ290bywKICAgICAgImhhbmRsZXIiOiBoYW5kbGVyLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5TdGF0ZW1lbnQgYnJlYWtTdGF0ZW1lbnQgPQogICAgICAgIG5ldyBqcy5CcmVhayhudWxsKS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlN0YXRlbWVudCBzd2l0Y2hDYXNlID0ganMuanMuc3RhdGVtZW50KCIiIgogICAgICAgIHN3aXRjaCAoI2Vycm9yQ29kZSkgewogICAgICAgICAgY2FzZSAjU1RSRUFNX1dBU19DQU5DRUxFRDoKICAgICAgICAgICAgI3VwZGF0ZU5leHQ7CiAgICAgICAgICAgICNnb3RvQ2FuY2VsbGVkOwogICAgICAgICAgICAjYnJlYWs7CiAgICAgICAgICBjYXNlICNFUlJPUjoKICAgICAgICAgICAgI3VwZGF0ZUVycm9yOwogICAgICAgICAgICAjZ290b0Vycm9yOwogICAgICAgIH0iIiIsIHsKICAgICAgImVycm9yQ29kZSI6IGVycm9yQ29kZU5hbWUsCiAgICAgICJTVFJFQU1fV0FTX0NBTkNFTEVEIjoganMubnVtYmVyKGVycm9yX2NvZGVzLlNUUkVBTV9XQVNfQ0FOQ0VMRUQpLAogICAgICAidXBkYXRlTmV4dCI6IHVwZGF0ZU5leHQsCiAgICAgICJnb3RvQ2FuY2VsbGVkIjogZ290b0NhbmNlbGxlZCwKICAgICAgImJyZWFrIjogYnJlYWtTdGF0ZW1lbnQsCiAgICAgICJFUlJPUiI6IGpzLm51bWJlcihlcnJvcl9jb2Rlcy5FUlJPUiksCiAgICAgICJ1cGRhdGVFcnJvciI6IHVwZGF0ZUVycm9yLAogICAgICAiZ290b0Vycm9yIjogZ290b0Vycm9yLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5TdGF0ZW1lbnQgaWZFcnJvciA9IGpzLmpzLnN0YXRlbWVudCgiIiIKICAgICAgICBpZiAoI2Vycm9yQ29kZSA9PT0gI0VSUk9SKSB7CiAgICAgICAgICAjdXBkYXRlRXJyb3I7CiAgICAgICAgICAjZ290b0Vycm9yOwogICAgICAgIH0iIiIsIHsKICAgICAgImVycm9yQ29kZSI6IGVycm9yQ29kZU5hbWUsCiAgICAgICJFUlJPUiI6IGpzLm51bWJlcihlcnJvcl9jb2Rlcy5FUlJPUiksCiAgICAgICJ1cGRhdGVFcnJvciI6IHVwZGF0ZUVycm9yLAogICAgICAiZ290b0Vycm9yIjogZ290b0Vycm9yLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5TdGF0ZW1lbnQgaWZIYXNZaWVsZCA9IGpzLmpzLnN0YXRlbWVudCgiIiIKICAgICAgICBpZiAoI2hhc1lpZWxkKSB7CiAgICAgICAgICAjc3dpdGNoQ2FzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAjaWZFcnJvcjsKICAgICAgICB9CiAgICAiIiIsIHsKICAgICAgImhhc1lpZWxkIjogYW5hbHlzaXMuaGFzWWllbGQsCiAgICAgICJzd2l0Y2hDYXNlIjogc3dpdGNoQ2FzZSwKICAgICAgImlmRXJyb3IiOiBpZkVycm9yLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5GdW4gaW5uZXJGdW5jdGlvbiA9IGpzLmpzKCIiIgogICAgICAgIGZ1bmN0aW9uICgjZXJyb3JDb2RlLCAjcmVzdWx0KSB7CiAgICAgICAgICAjaWZIYXNZaWVsZDsKICAgICAgICAgICNyZXdyaXR0ZW5Cb2R5OwogICAgICAgIH0iIiIsIHsKICAgICAgImVycm9yQ29kZSI6IGVycm9yQ29kZU5hbWUsCiAgICAgICJyZXN1bHQiOiByZXN1bHROYW1lLAogICAgICAiaWZIYXNZaWVsZCI6IGlmSGFzWWllbGQsCiAgICAgICJyZXdyaXR0ZW5Cb2R5IjogcmV3cml0dGVuQm9keSwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gd3JhcEJvZHlDYWxsID0ganMuanMoIiN3cmFwQm9keSgjaW5uZXJGdW5jdGlvbikiLCB7CiAgICAgICJ3cmFwQm9keSI6IHdyYXBCb2R5LAogICAgICAiaW5uZXJGdW5jdGlvbiI6IGlubmVyRnVuY3Rpb24sCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlN0YXRlbWVudCBkZWNsYXJlQm9keU5hbWUgPQogICAgICAgIGpzLmpzLnN0YXRlbWVudCgidmFyICNib2R5TmFtZSA9ICN3cmFwQm9keUNhbGw7IiwgewogICAgICAiYm9keU5hbWUiOiBib2R5TmFtZSwKICAgICAgIndyYXBCb2R5Q2FsbCI6IHdyYXBCb2R5Q2FsbCwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBzdHJlYW1PZkNvbnRyb2xsZXJDYWxsID0KICAgICAgICBqcy5qcygiI3N0cmVhbU9mQ29udHJvbGxlcigjY29udHJvbGxlcikiLCB7CiAgICAgICJzdHJlYW1PZkNvbnRyb2xsZXIiOiBzdHJlYW1PZkNvbnRyb2xsZXIsCiAgICAgICJjb250cm9sbGVyIjogY29udHJvbGxlck5hbWUsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlJldHVybiByZXR1cm5TdHJlYW1PZkNvbnRyb2xsZXJDYWxsID0KICAgICAgICBuZXcganMuUmV0dXJuKHN0cmVhbU9mQ29udHJvbGxlckNhbGwpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHJldHVybiBqcy5qcygiIiIKICAgICAgICBmdW5jdGlvbiAoI3BhcmFtZXRlcnMsICN0eXBlUGFyYW1ldGVycykgewogICAgICAgICAgI2RlY2xhcmVCb2R5TmFtZTsKICAgICAgICAgICN2YXJpYWJsZURlY2xhcmF0aW9uczsKICAgICAgICAgICNyZXR1cm5TdHJlYW1PZkNvbnRyb2xsZXJDYWxsOwogICAgICAgIH0iIiIsIHsKICAgICAgInBhcmFtZXRlcnMiOiBwYXJhbWV0ZXJzLAogICAgICAidHlwZVBhcmFtZXRlcnMiOiB0eXBlUGFyYW1ldGVycywKICAgICAgImRlY2xhcmVCb2R5TmFtZSI6IGRlY2xhcmVCb2R5TmFtZSwKICAgICAgInZhcmlhYmxlRGVjbGFyYXRpb25zIjogdmFyaWFibGVEZWNsYXJhdGlvbnMsCiAgICAgICJyZXR1cm5TdHJlYW1PZkNvbnRyb2xsZXJDYWxsIjogcmV0dXJuU3RyZWFtT2ZDb250cm9sbGVyQ2FsbCwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkRXJyb3JFeGl0KFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBoYXNIYW5kbGVyTGFiZWxzID0gdHJ1ZTsKICAgIGJlZ2luTGFiZWwocmV0aHJvd0xhYmVsKTsKICAgIGpzLkV4cHJlc3Npb24gYXN5bmNIZWxwZXJDYWxsID0KICAgICAgICBqcy5qcygiI2FzeW5jSGVscGVyKCNjdXJyZW50RXJyb3IsICNlcnJvckNvZGUsICNjb250cm9sbGVyKSIsIHsKICAgICAgImFzeW5jSGVscGVyIjogYXN5bmNTdGFySGVscGVyLAogICAgICAiZXJyb3JDb2RlIjoganMubnVtYmVyKGVycm9yX2NvZGVzLkVSUk9SKSwKICAgICAgImN1cnJlbnRFcnJvciI6IGN1cnJlbnRFcnJvciwKICAgICAgImNvbnRyb2xsZXIiOiBjb250cm9sbGVyTmFtZQogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGFkZFN0YXRlbWVudChuZXcganMuUmV0dXJuKGFzeW5jSGVscGVyQ2FsbCkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICAvLy8gUmV0dXJuaW5nIGZyb20gYW4gYXN5bmMqIGZ1bmN0aW9uIGNhbGxzIHRoZSBbc3RyZWFtSGVscGVyXSB3aXRoIGFuCiAgLy8vIFtlbmRPZkl0ZXJhdGlvbl0gbWFya2VyLgogIEBvdmVycmlkZQogIHZvaWQgYWRkU3VjY2Vzc0V4aXQoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGJlZ2luTGFiZWwoZXhpdExhYmVsKTsKCiAgICBqcy5FeHByZXNzaW9uIHN0cmVhbUhlbHBlckNhbGwgPQogICAgICAgIGpzLmpzKCIjc3RyZWFtSGVscGVyKG51bGwsICNzdWNjZXNzQ29kZSwgI2NvbnRyb2xsZXIpIiwgewogICAgICAic3RyZWFtSGVscGVyIjogYXN5bmNTdGFySGVscGVyLAogICAgICAic3VjY2Vzc0NvZGUiOiBqcy5udW1iZXIoZXJyb3JfY29kZXMuU1VDQ0VTUyksCiAgICAgICJjb250cm9sbGVyIjogY29udHJvbGxlck5hbWUKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLlJldHVybihzdHJlYW1IZWxwZXJDYWxsKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IHZhcmlhYmxlSW5pdGlhbGl6YXRpb25zKAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgTGlzdDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiB2YXJpYWJsZXMgPSA8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj5bXTsKICAgIHZhcmlhYmxlcy5hZGQoX21ha2VWYXJpYWJsZUluaXRpYWxpemVyKAogICAgICAgIGNvbnRyb2xsZXIsCiAgICAgICAganMuanMoJyMoIywgIyknLCBbCiAgICAgICAgICBuZXdDb250cm9sbGVyLAogICAgICAgICAgYm9keU5hbWUsCiAgICAgICAgICBuZXdDb250cm9sbGVyVHlwZUFyZ3VtZW50cwogICAgICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbiksCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIGlmIChhbmFseXNpcy5oYXNZaWVsZCkgewogICAgICB2YXJpYWJsZXMuYWRkKAogICAgICAgICAgX21ha2VWYXJpYWJsZUluaXRpYWxpemVyKG5leHRXaGVuQ2FuY2VsZWQsIG51bGwsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgICByZXR1cm4gdmFyaWFibGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbml0aWFsaXplTmFtZXMoKSB7CiAgICBjb250cm9sbGVyTmFtZSA9IGZyZXNoTmFtZSgiY29udHJvbGxlciIpOwogICAgbmV4dFdoZW5DYW5jZWxlZE5hbWUgPSBmcmVzaE5hbWUoIm5leHRXaGVuQ2FuY2VsZWQiKTsKICAgIG5ld0NvbnRyb2xsZXJUeXBlQXJndW1lbnRzID0KICAgICAgICBwcm9jZXNzVHlwZUFyZ3VtZW50cyhuZXdDb250cm9sbGVyVHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5TdGF0ZW1lbnQgYXdhaXRTdGF0ZW1lbnQoCiAgICAgIGpzLkV4cHJlc3Npb24gdmFsdWUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBqcy5FeHByZXNzaW9uIGFzeW5jSGVscGVyQ2FsbCA9CiAgICAgICAganMuanMoIiNhc3luY0hlbHBlcigjdmFsdWUsICNib2R5TmFtZSwgI2NvbnRyb2xsZXIpIiwgewogICAgICAiYXN5bmNIZWxwZXIiOiBhc3luY1N0YXJIZWxwZXIsCiAgICAgICJ2YWx1ZSI6IHZhbHVlLAogICAgICAiYm9keU5hbWUiOiBib2R5TmFtZSwKICAgICAgImNvbnRyb2xsZXIiOiBjb250cm9sbGVyTmFtZQogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHJldHVybiBuZXcganMuUmV0dXJuKGFzeW5jSGVscGVyQ2FsbCkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICB9Cn0KCi8vLyBGaW5kcyBvdXQKLy8vCi8vLyAtIHdoaWNoIGV4cHJlc3Npb25zIGhhdmUgeWllbGQgb3IgYXdhaXQgbmVzdGVkIGluIHRoZW0uCi8vLyAtIHRhcmdldHMgb2YganVtcHMKLy8vIC0gYSBzZXQgb2YgdXNlZCBuYW1lcy4KLy8vIC0gaWYgYW55IFtUaGlzXS1leHByZXNzaW9ucyBhcmUgdXNlZC4KY2xhc3MgUHJlVHJhbnNsYXRpb25BbmFseXNpcyBleHRlbmRzIGpzLk5vZGVWaXNpdG9yPGJvb2w+IHsKICBTZXQ8anMuTm9kZT4gaGFzQXdhaXRPcllpZWxkID0gbmV3IFNldDxqcy5Ob2RlPigpOwoKICBNYXA8anMuTm9kZSwganMuTm9kZT4gdGFyZ2V0cyA9IG5ldyBNYXA8anMuTm9kZSwganMuTm9kZT4oKTsKICBMaXN0PGpzLk5vZGU+IGxvb3BzQW5kU3dpdGNoZXMgPSA8anMuTm9kZT5bXTsKICBMaXN0PGpzLkxhYmVsZWRTdGF0ZW1lbnQ+IGxhYmVsbGVkU3RhdGVtZW50cyA9IDxqcy5MYWJlbGVkU3RhdGVtZW50PltdOwogIFNldDxTdHJpbmc+IHVzZWROYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICBib29sIGhhc0V4cGxpY2l0UmV0dXJucyA9IGZhbHNlOwoKICBib29sIGhhc1RoaXMgPSBmYWxzZTsKCiAgYm9vbCBoYXNZaWVsZCA9IGZhbHNlOwoKICBib29sIGhhc0ZpbmFsbHkgPSBmYWxzZTsKCiAgLy8gVGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBiZWluZyBhbmFseXplZC4KICBqcy5GdW4gY3VycmVudEZ1bmN0aW9uOwoKICAvLyBGb3IgZXJyb3IgbWVzc2FnZXMuCiAgZmluYWwgRnVuY3Rpb24gdW5zdXBwb3J0ZWQ7CgogIFByZVRyYW5zbGF0aW9uQW5hbHlzaXModm9pZCB0aGlzLnVuc3VwcG9ydGVkKGpzLk5vZGUgbm9kZSkpOwoKICBib29sIHZpc2l0KGpzLk5vZGUgbm9kZSkgewogICAgYm9vbCBjb250YWluc0F3YWl0ID0gbm9kZS5hY2NlcHQodGhpcyk7CiAgICBpZiAoY29udGFpbnNBd2FpdCkgewogICAgICBoYXNBd2FpdE9yWWllbGQuYWRkKG5vZGUpOwogICAgfQogICAgcmV0dXJuIGNvbnRhaW5zQXdhaXQ7CiAgfQoKICBhbmFseXplKGpzLkZ1biBub2RlKSB7CiAgICBjdXJyZW50RnVuY3Rpb24gPSBub2RlOwogICAgbm9kZS5wYXJhbXMuZm9yRWFjaCh2aXNpdCk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEFjY2Vzcyhqcy5Qcm9wZXJ0eUFjY2VzcyBub2RlKSB7CiAgICBib29sIHJlY2VpdmVyID0gdmlzaXQobm9kZS5yZWNlaXZlcik7CiAgICBib29sIHNlbGVjdG9yID0gdmlzaXQobm9kZS5zZWxlY3Rvcik7CiAgICByZXR1cm4gcmVjZWl2ZXIgfHwgc2VsZWN0b3I7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QXJyYXlIb2xlKGpzLkFycmF5SG9sZSBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QXJyYXlJbml0aWFsaXplcihqcy5BcnJheUluaXRpYWxpemVyIG5vZGUpIHsKICAgIGJvb2wgY29udGFpbnNBd2FpdCA9IGZhbHNlOwogICAgZm9yIChqcy5FeHByZXNzaW9uIGVsZW1lbnQgaW4gbm9kZS5lbGVtZW50cykgewogICAgICBpZiAodmlzaXQoZWxlbWVudCkpIGNvbnRhaW5zQXdhaXQgPSB0cnVlOwogICAgfQogICAgcmV0dXJuIGNvbnRhaW5zQXdhaXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QXNzaWdubWVudChqcy5Bc3NpZ25tZW50IG5vZGUpIHsKICAgIGJvb2wgbGVmdEhhbmRTaWRlID0gdmlzaXQobm9kZS5sZWZ0SGFuZFNpZGUpOwogICAgYm9vbCB2YWx1ZSA9IChub2RlLnZhbHVlID09IG51bGwpID8gZmFsc2UgOiB2aXNpdChub2RlLnZhbHVlKTsKICAgIHJldHVybiBsZWZ0SGFuZFNpZGUgfHwgdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QXdhaXQoanMuQXdhaXQgbm9kZSkgewogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEJpbmFyeShqcy5CaW5hcnkgbm9kZSkgewogICAgYm9vbCBsZWZ0ID0gdmlzaXQobm9kZS5sZWZ0KTsKICAgIGJvb2wgcmlnaHQgPSB2aXNpdChub2RlLnJpZ2h0KTsKICAgIHJldHVybiBsZWZ0IHx8IHJpZ2h0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEJsb2NrKGpzLkJsb2NrIG5vZGUpIHsKICAgIGJvb2wgY29udGFpbnNBd2FpdCA9IGZhbHNlOwogICAgZm9yIChqcy5TdGF0ZW1lbnQgc3RhdGVtZW50IGluIG5vZGUuc3RhdGVtZW50cykgewogICAgICBpZiAodmlzaXQoc3RhdGVtZW50KSkgY29udGFpbnNBd2FpdCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gY29udGFpbnNBd2FpdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRCcmVhayhqcy5CcmVhayBub2RlKSB7CiAgICBpZiAobm9kZS50YXJnZXRMYWJlbCAhPSBudWxsKSB7CiAgICAgIHRhcmdldHNbbm9kZV0gPQogICAgICAgICAgbGFiZWxsZWRTdGF0ZW1lbnRzLmxhc3RXaGVyZSgoanMuTGFiZWxlZFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgICAgICByZXR1cm4gc3RhdGVtZW50LmxhYmVsID09IG5vZGUudGFyZ2V0TGFiZWw7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgdGFyZ2V0c1tub2RlXSA9IGxvb3BzQW5kU3dpdGNoZXMubGFzdDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYWxsKGpzLkNhbGwgbm9kZSkgewogICAgYm9vbCBjb250YWluc0F3YWl0ID0gdmlzaXQobm9kZS50YXJnZXQpOwogICAgZm9yIChqcy5FeHByZXNzaW9uIGFyZ3VtZW50IGluIG5vZGUuYXJndW1lbnRzKSB7CiAgICAgIGlmICh2aXNpdChhcmd1bWVudCkpIGNvbnRhaW5zQXdhaXQgPSB0cnVlOwogICAgfQogICAgcmV0dXJuIGNvbnRhaW5zQXdhaXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Q2FzZShqcy5DYXNlIG5vZGUpIHsKICAgIGJvb2wgZXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgICBib29sIGJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIGV4cHJlc3Npb24gfHwgYm9keTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYXRjaChqcy5DYXRjaCBub2RlKSB7CiAgICBib29sIGRlY2xhcmF0aW9uID0gdmlzaXQobm9kZS5kZWNsYXJhdGlvbik7CiAgICBib29sIGJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIGRlY2xhcmF0aW9uIHx8IGJvZHk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Q29tbWVudChqcy5Db21tZW50IG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDb25kaXRpb25hbChqcy5Db25kaXRpb25hbCBub2RlKSB7CiAgICBib29sIGNvbmRpdGlvbiA9IHZpc2l0KG5vZGUuY29uZGl0aW9uKTsKICAgIGJvb2wgdGhlbiA9IHZpc2l0KG5vZGUudGhlbik7CiAgICBib29sIG90aGVyd2lzZSA9IHZpc2l0KG5vZGUub3RoZXJ3aXNlKTsKICAgIHJldHVybiBjb25kaXRpb24gfHwgdGhlbiB8fCBvdGhlcndpc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Q29udGludWUoanMuQ29udGludWUgbm9kZSkgewogICAgaWYgKG5vZGUudGFyZ2V0TGFiZWwgIT0gbnVsbCkgewogICAgICBqcy5MYWJlbGVkU3RhdGVtZW50IHRhcmdldExhYmVsID0gbGFiZWxsZWRTdGF0ZW1lbnRzLmxhc3RXaGVyZSgKICAgICAgICAgIChqcy5MYWJlbGVkU3RhdGVtZW50IHN0bSkgPT4gc3RtLmxhYmVsID09IG5vZGUudGFyZ2V0TGFiZWwpOwogICAgICBqcy5Mb29wIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldExhYmVsLmJvZHk7CiAgICAgIHRhcmdldHNbbm9kZV0gPSB0YXJnZXRTdGF0ZW1lbnQ7CiAgICB9IGVsc2UgewogICAgICB0YXJnZXRzW25vZGVdID0KICAgICAgICAgIGxvb3BzQW5kU3dpdGNoZXMubGFzdFdoZXJlKChqcy5Ob2RlIG5vZGUpID0+IG5vZGUgaXMhIGpzLlN3aXRjaCk7CiAgICB9CiAgICBhc3NlcnQoKCkgewogICAgICBqcy5Ob2RlIHRhcmdldCA9IHRhcmdldHNbbm9kZV07CiAgICAgIHJldHVybiB0YXJnZXQgaXMganMuTG9vcCB8fAogICAgICAgICAgKHRhcmdldCBpcyBqcy5MYWJlbGVkU3RhdGVtZW50ICYmIHRhcmdldC5ib2R5IGlzIGpzLkxvb3ApOwogICAgfSgpKTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXREZWZhdWx0KGpzLkRlZmF1bHQgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0KG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RG8oanMuRG8gbm9kZSkgewogICAgbG9vcHNBbmRTd2l0Y2hlcy5hZGQobm9kZSk7CiAgICBib29sIGJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgYm9vbCBjb25kaXRpb24gPSB2aXNpdChub2RlLmNvbmRpdGlvbik7CiAgICBsb29wc0FuZFN3aXRjaGVzLnJlbW92ZUxhc3QoKTsKICAgIHJldHVybiBib2R5IHx8IGNvbmRpdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRFbXB0eVN0YXRlbWVudChqcy5FbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChqcy5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZvcihqcy5Gb3Igbm9kZSkgewogICAgYm9vbCBpbml0ID0gKG5vZGUuaW5pdCA9PSBudWxsKSA/IGZhbHNlIDogdmlzaXQobm9kZS5pbml0KTsKICAgIGJvb2wgY29uZGl0aW9uID0gKG5vZGUuY29uZGl0aW9uID09IG51bGwpID8gZmFsc2UgOiB2aXNpdChub2RlLmNvbmRpdGlvbik7CiAgICBib29sIHVwZGF0ZSA9IChub2RlLnVwZGF0ZSA9PSBudWxsKSA/IGZhbHNlIDogdmlzaXQobm9kZS51cGRhdGUpOwogICAgbG9vcHNBbmRTd2l0Y2hlcy5hZGQobm9kZSk7CiAgICBib29sIGJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgbG9vcHNBbmRTd2l0Y2hlcy5yZW1vdmVMYXN0KCk7CiAgICByZXR1cm4gaW5pdCB8fCBjb25kaXRpb24gfHwgdXBkYXRlIHx8IGJvZHk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Rm9ySW4oanMuRm9ySW4gbm9kZSkgewogICAgYm9vbCBvYmplY3QgPSB2aXNpdChub2RlLm9iamVjdCk7CiAgICBsb29wc0FuZFN3aXRjaGVzLmFkZChub2RlKTsKICAgIGJvb2wgYm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICBsb29wc0FuZFN3aXRjaGVzLnJlbW92ZUxhc3QoKTsKICAgIHJldHVybiBvYmplY3QgfHwgYm9keTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW4oanMuRnVuIG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKGpzLkZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdElmKGpzLklmIG5vZGUpIHsKICAgIGJvb2wgY29uZGl0aW9uID0gdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgYm9vbCB0aGVuID0gdmlzaXQobm9kZS50aGVuKTsKICAgIGJvb2wgb3RoZXJ3aXNlID0gdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgcmV0dXJuIGNvbmRpdGlvbiB8fCB0aGVuIHx8IG90aGVyd2lzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKGpzLkludGVycG9sYXRlZEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uKGpzLkludGVycG9sYXRlZERlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKGpzLkludGVycG9sYXRlZExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcihqcy5JbnRlcnBvbGF0ZWRQYXJhbWV0ZXIgbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZFNlbGVjdG9yKGpzLkludGVycG9sYXRlZFNlbGVjdG9yIG5vZGUpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQoanMuSW50ZXJwb2xhdGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGpzLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgdXNlZE5hbWVzLmFkZChub2RlLmxhYmVsKTsKICAgIGxhYmVsbGVkU3RhdGVtZW50cy5hZGQobm9kZSk7CiAgICBib29sIGNvbnRhaW5zQXdhaXQgPSB2aXNpdChub2RlLmJvZHkpOwogICAgbGFiZWxsZWRTdGF0ZW1lbnRzLnJlbW92ZUxhc3QoKTsKICAgIHJldHVybiBjb250YWluc0F3YWl0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihqcy5EZWZlcnJlZEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERlZmVycmVkTnVtYmVyKGpzLkRlZmVycmVkTnVtYmVyIG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXREZWZlcnJlZFN0cmluZyhqcy5EZWZlcnJlZFN0cmluZyBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbEJvb2woanMuTGl0ZXJhbEJvb2wgbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxFeHByZXNzaW9uKGpzLkxpdGVyYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsTnVsbChqcy5MaXRlcmFsTnVsbCBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbE51bWJlcihqcy5MaXRlcmFsTnVtYmVyIG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsU3RhdGVtZW50KGpzLkxpdGVyYWxTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxTdHJpbmcoanMuTGl0ZXJhbFN0cmluZyBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihqcy5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXROYW1lKGpzLk5hbWUgbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFBhcmVudGhlc2VzKGpzLlBhcmVudGhlc2VzIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdChub2RlLmVuY2xvc2VkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXROYW1lZEZ1bmN0aW9uKGpzLk5hbWVkRnVuY3Rpb24gbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE5ldyhqcy5OZXcgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Q2FsbChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRPYmplY3RJbml0aWFsaXplcihqcy5PYmplY3RJbml0aWFsaXplciBub2RlKSB7CiAgICBib29sIGNvbnRhaW5zQXdhaXQgPSBmYWxzZTsKICAgIGZvciAoanMuUHJvcGVydHkgcHJvcGVydHkgaW4gbm9kZS5wcm9wZXJ0aWVzKSB7CiAgICAgIGlmICh2aXNpdChwcm9wZXJ0eSkpIGNvbnRhaW5zQXdhaXQgPSB0cnVlOwogICAgfQogICAgcmV0dXJuIGNvbnRhaW5zQXdhaXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UGFyYW1ldGVyKGpzLlBhcmFtZXRlciBub2RlKSB7CiAgICB1c2VkTmFtZXMuYWRkKG5vZGUubmFtZSk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UG9zdGZpeChqcy5Qb3N0Zml4IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdChub2RlLmFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQcmVmaXgoanMuUHJlZml4IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdChub2RlLmFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQcm9ncmFtKGpzLlByb2dyYW0gbm9kZSkgewogICAgdGhyb3cgIlVuZXhwZWN0ZWQiOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFByb3BlcnR5KGpzLlByb3BlcnR5IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRSZWdFeHBMaXRlcmFsKGpzLlJlZ0V4cExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFJldHVybihqcy5SZXR1cm4gbm9kZSkgewogICAgaGFzRXhwbGljaXRSZXR1cm5zID0gdHJ1ZTsKICAgIHRhcmdldHNbbm9kZV0gPSBjdXJyZW50RnVuY3Rpb247CiAgICBpZiAobm9kZS52YWx1ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdmlzaXQobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0U3dpdGNoKGpzLlN3aXRjaCBub2RlKSB7CiAgICBsb29wc0FuZFN3aXRjaGVzLmFkZChub2RlKTsKICAgIC8vIElmIHRoZSBrZXkgaGFzIGFuIGBhd2FpdGAgZXhwcmVzc2lvbiwgZG8gbm90IHRyYW5zZm9ybSB0aGUKICAgIC8vIGJvZHkgb2YgdGhlIHN3aXRjaC4KICAgIHZpc2l0KG5vZGUua2V5KTsKICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICBmb3IgKGpzLlN3aXRjaENsYXVzZSBjbGF1c2UgaW4gbm9kZS5jYXNlcykgewogICAgICBpZiAodmlzaXQoY2xhdXNlKSkgcmVzdWx0ID0gdHJ1ZTsKICAgIH0KICAgIGxvb3BzQW5kU3dpdGNoZXMucmVtb3ZlTGFzdCgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUaGlzKGpzLlRoaXMgbm9kZSkgewogICAgaGFzVGhpcyA9IHRydWU7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VGhyb3coanMuVGhyb3cgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VHJ5KGpzLlRyeSBub2RlKSB7CiAgICBib29sIGJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgYm9vbCBjYXRjaFBhcnQgPSAobm9kZS5jYXRjaFBhcnQgPT0gbnVsbCkgPyBmYWxzZSA6IHZpc2l0KG5vZGUuY2F0Y2hQYXJ0KTsKICAgIGJvb2wgZmluYWxseVBhcnQgPQogICAgICAgIChub2RlLmZpbmFsbHlQYXJ0ID09IG51bGwpID8gZmFsc2UgOiB2aXNpdChub2RlLmZpbmFsbHlQYXJ0KTsKICAgIGlmIChmaW5hbGx5UGFydCAhPSBudWxsKSBoYXNGaW5hbGx5ID0gdHJ1ZTsKICAgIHJldHVybiBib2R5IHx8IGNhdGNoUGFydCB8fCBmaW5hbGx5UGFydDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKGpzLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgdXNlZE5hbWVzLmFkZChub2RlLm5hbWUpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUpIHsKICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICBmb3IgKGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24gaW5pdCBpbiBub2RlLmRlY2xhcmF0aW9ucykgewogICAgICBpZiAodmlzaXQoaW5pdCkpIHJlc3VsdCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oanMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlKSB7CiAgICByZXR1cm4gdmlzaXRBc3NpZ25tZW50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Ci8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6bWF0aCcgYXMgbWF0aDsKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgUXVldWU7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBzaG93IExpbms7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL2NvZGVnZW4uZGFydCcgc2hvdyBDb2RlZ2VuUmVnaXN0cnk7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgTWVhc3VyZXIsIENvbXBpbGVyVGFzazsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9qdW1wcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmQuZGFydCcgc2hvdyBDb2RlZ2VuSW5wdXRzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvY2hlY2tlZF9tb2RlX2hlbHBlcnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTW9kdWxhck5hbWVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQnCiAgICBzaG93IFJlY2lwZUVuY29kZXIsIFJlY2lwZUVuY29kaW5nOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBNb2R1bGFyRW1pdHRlcjsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50cy5kYXJ0JyBzaG93IEpHZW5lcmF0b3JCb2R5OwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnIHNob3cgVHlwZUV4cHJlc3Npb25SZWNpcGU7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdHJhY2VyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IENvbnN0YW50VXNlLCBEeW5hbWljVXNlLCBTdGF0aWNVc2UsIFR5cGVVc2U7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnY29kZWdlbl9oZWxwZXJzLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ3ZhcmlhYmxlX2FsbG9jYXRvci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIENvZGVnZW5QaGFzZSB7CiAgU3RyaW5nIGdldCBuYW1lID0+ICckcnVudGltZVR5cGUnOwogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpOwp9CgpjbGFzcyBTc2FDb2RlR2VuZXJhdG9yVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKCiAgU3NhQ29kZUdlbmVyYXRvclRhc2soCiAgICAgIE1lYXN1cmVyIG1lYXN1cmVyLCB0aGlzLl9vcHRpb25zLCB0aGlzLnNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpCiAgICAgIDogc3VwZXIobWVhc3VyZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ1NTQSBjb2RlIGdlbmVyYXRvcic7CgogIGpzLkZ1biBidWlsZEphdmFTY3JpcHRGdW5jdGlvbihib29sIG5lZWRzQXN5bmNSZXdyaXRlLCBGdW5jdGlvbkVudGl0eSBlbGVtZW50LAogICAgICBMaXN0PGpzLlBhcmFtZXRlcj4gcGFyYW1ldGVycywganMuQmxvY2sgYm9keSkgewogICAganMuRnVuIGZpbmlzaChqcy5Bc3luY01vZGlmaWVyIGFzeW5jTW9kaWZpZXIpIHsKICAgICAgcmV0dXJuIG5ldyBqcy5GdW4ocGFyYW1ldGVycywgYm9keSwgYXN5bmNNb2RpZmllcjogYXN5bmNNb2RpZmllcikKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb25TdHJhdGVneQogICAgICAgICAgICAgIC5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChlbGVtZW50KQogICAgICAgICAgICAgIC5idWlsZERlY2xhcmF0aW9uKGVsZW1lbnQpKTsKICAgIH0KCiAgICBpZiAobmVlZHNBc3luY1Jld3JpdGUpIHsKICAgICAgcmV0dXJuIGZpbmlzaChlbGVtZW50LmFzeW5jTWFya2VyLmlzQXN5bmMKICAgICAgICAgID8gKGVsZW1lbnQuYXN5bmNNYXJrZXIuaXNZaWVsZGluZwogICAgICAgICAgICAgID8ganMuQXN5bmNNb2RpZmllci5hc3luY1N0YXIKICAgICAgICAgICAgICA6IGpzLkFzeW5jTW9kaWZpZXIuYXN5bmMpCiAgICAgICAgICA6IChlbGVtZW50LmFzeW5jTWFya2VyLmlzWWllbGRpbmcKICAgICAgICAgICAgICA/IGpzLkFzeW5jTW9kaWZpZXIuc3luY1N0YXIKICAgICAgICAgICAgICA6IGpzLkFzeW5jTW9kaWZpZXIuc3luYykpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZpbmlzaChqcy5Bc3luY01vZGlmaWVyLnN5bmMpOwogICAgfQogIH0KCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUNvZGUoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRlTGF6eUluaXRpYWxpemVyKAogICAgICAgICAgbWVtYmVyLCBncmFwaCwgY29kZWdlbiwgY2xvc2VkV29ybGQsIHJlZ2lzdHJ5LCBuYW1lciwgZW1pdHRlcik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZ2VuZXJhdGVNZXRob2QoCiAgICAgICAgICBtZW1iZXIsIGdyYXBoLCBjb2RlZ2VuLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIG5hbWVyLCBlbWl0dGVyKTsKICAgIH0KICB9CgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVMYXp5SW5pdGlhbGl6ZXIoCiAgICAgIEZpZWxkRW50aXR5IGZpZWxkLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgcmV0dXJuIG1lYXN1cmUoKCkgewogICAgICBjb2RlZ2VuLnRyYWNlci50cmFjZUdyYXBoKCJjb2RlZ2VuIiwgZ3JhcGgpOwogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kKICAgICAgICAgIC5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChmaWVsZCkKICAgICAgICAgIC5idWlsZERlY2xhcmF0aW9uKGZpZWxkKTsKICAgICAgU3NhQ29kZUdlbmVyYXRvciBjb2RlR2VuZXJhdG9yID0gbmV3IFNzYUNvZGVHZW5lcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgX29wdGlvbnMsCiAgICAgICAgICBlbWl0dGVyLAogICAgICAgICAgY29kZWdlbi5jaGVja2VkTW9kZUhlbHBlcnMsCiAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsCiAgICAgICAgICBjb2RlZ2VuLnJ0aUVuY29kZXIsCiAgICAgICAgICBjb2RlZ2VuLnJ0aVJlY2lwZUVuY29kZXIsCiAgICAgICAgICBuYW1lciwKICAgICAgICAgIGNvZGVnZW4udHJhY2VyLAogICAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgICByZWdpc3RyeSk7CiAgICAgIGNvZGVHZW5lcmF0b3IudmlzaXRHcmFwaChncmFwaCk7CiAgICAgIHJldHVybiBuZXcganMuRnVuKGNvZGVHZW5lcmF0b3IucGFyYW1ldGVycywgY29kZUdlbmVyYXRvci5ib2R5KQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9KTsKICB9CgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVNZXRob2QoCiAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIHJldHVybiBtZWFzdXJlKCgpIHsKICAgICAgaWYgKG1ldGhvZC5hc3luY01hcmtlciAhPSBBc3luY01hcmtlci5TWU5DKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBc3luY01hcmtlcihtZXRob2QuYXN5bmNNYXJrZXIpOwogICAgICB9CiAgICAgIFNzYUNvZGVHZW5lcmF0b3IgY29kZUdlbmVyYXRvciA9IG5ldyBTc2FDb2RlR2VuZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIF9vcHRpb25zLAogICAgICAgICAgZW1pdHRlciwKICAgICAgICAgIGNvZGVnZW4uY2hlY2tlZE1vZGVIZWxwZXJzLAogICAgICAgICAgY29kZWdlbi5ydGlTdWJzdGl0dXRpb25zLAogICAgICAgICAgY29kZWdlbi5ydGlFbmNvZGVyLAogICAgICAgICAgY29kZWdlbi5ydGlSZWNpcGVFbmNvZGVyLAogICAgICAgICAgbmFtZXIsCiAgICAgICAgICBjb2RlZ2VuLnRyYWNlciwKICAgICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgICAgcmVnaXN0cnkpOwogICAgICBjb2RlR2VuZXJhdG9yLnZpc2l0R3JhcGgoZ3JhcGgpOwogICAgICBjb2RlZ2VuLnRyYWNlci50cmFjZUdyYXBoKCJjb2RlZ2VuIiwgZ3JhcGgpOwogICAgICByZXR1cm4gYnVpbGRKYXZhU2NyaXB0RnVuY3Rpb24oZ3JhcGgubmVlZHNBc3luY1Jld3JpdGUsIG1ldGhvZCwKICAgICAgICAgIGNvZGVHZW5lcmF0b3IucGFyYW1ldGVycywgY29kZUdlbmVyYXRvci5ib2R5KTsKICAgIH0pOwogIH0KfQoKY2xhc3MgU3NhQ29kZUdlbmVyYXRvciBpbXBsZW1lbnRzIEhWaXNpdG9yLCBIQmxvY2tJbmZvcm1hdGlvblZpc2l0b3IgewogIC8vLyBSZXR1cm5lZCBieSBbZXhwcmVzc2lvblR5cGVdIHRvIHRlbGwgaG93IGNvZGUgY2FuIGJlIGdlbmVyYXRlZCBmb3IKICAvLy8gYSBzdWJncmFwaC4KICAvLy8gLSBbVFlQRV9TVEFURU1FTlRdIG1lYW5zIHRoYXQgdGhlIGdyYXBoIG11c3QgYmUgZ2VuZXJhdGVkIGFzIGEgc3RhdGVtZW50LAogIC8vLyB3aGljaCBpcyBhbHdheXMgcG9zc2libGUuCiAgLy8vIC0gW1RZUEVfRVhQUkVTU0lPTl0gbWVhbnMgdGhhdCB0aGUgZ3JhcGggY2FuIGJlIGdlbmVyYXRlZCBhcyBhbiBleHByZXNzaW9uLAogIC8vLyBvciBwb3NzaWJseSBzZXZlcmFsIGNvbW1hLXNlcGFyYXRlZCBleHByZXNzaW9ucy4KICAvLy8gLSBbVFlQRV9ERUNMQVJBVElPTl0gbWVhbnMgdGhhdCB0aGUgZ3JhcGggY2FuIGJlIGdlbmVyYXRlZCBhcyBhbgogIC8vLyBleHByZXNzaW9uLCBhbmQgdGhhdCBpdCBvbmx5IGdlbmVyYXRlcyBleHByZXNzaW9ucyBvZiB0aGUgZm9ybQogIC8vLyAgIHZhcmlhYmxlID0gZXhwcmVzc2lvbgogIC8vLyB3aGljaCBhcmUgYWxzbyB2YWxpZCBhcyBwYXJ0cyBvZiBhICJ2YXIiIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9TVEFURU1FTlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9FWFBSRVNTSU9OID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfREVDTEFSQVRJT04gPSAyOwoKICAvLy8gV2hldGhlciB3ZSBhcmUgY3VycmVudGx5IGdlbmVyYXRpbmcgZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiBzdGF0ZW1lbnRzLgogIC8vLyBUaGlzIGluY2x1ZGVzIGRlY2xhcmF0aW9ucywgd2hpY2ggYXJlIGdlbmVyYXRlZCBhcyBleHByZXNzaW9ucy4KICBib29sIGlzR2VuZXJhdGluZ0V4cHJlc3Npb24gPSBmYWxzZTsKCiAgZmluYWwgQ29tcGlsZXJUYXNrIF9jb2RlZ2VuVGFzazsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgTW9kdWxhckVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgQ2hlY2tlZE1vZGVIZWxwZXJzIF9jaGVja2VkTW9kZUhlbHBlcnM7CiAgZmluYWwgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBfcnRpU3Vic3RpdHV0aW9uczsKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIF9ydGlFbmNvZGVyOwogIGZpbmFsIFJlY2lwZUVuY29kZXIgX3J0aVJlY2lwZUVuY29kZXI7CiAgZmluYWwgTW9kdWxhck5hbWVyIF9uYW1lcjsKICBmaW5hbCBUcmFjZXIgX3RyYWNlcjsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvZGVnZW5SZWdpc3RyeSBfcmVnaXN0cnk7CgogIGZpbmFsIFNldDxISW5zdHJ1Y3Rpb24+IGdlbmVyYXRlQXRVc2VTaXRlOwogIGZpbmFsIFNldDxISW5zdHJ1Y3Rpb24+IGNvbnRyb2xGbG93T3BlcmF0b3JzOwogIGZpbmFsIFNldDxKdW1wVGFyZ2V0PiBicmVha0FjdGlvbjsKICBmaW5hbCBTZXQ8TGFiZWxEZWZpbml0aW9uPiBjb250aW51ZUFjdGlvbjsKICBmaW5hbCBTZXQ8SnVtcFRhcmdldD4gaW1wbGljaXRDb250aW51ZUFjdGlvbjsKICBmaW5hbCBMaXN0PGpzLlBhcmFtZXRlcj4gcGFyYW1ldGVyczsKCiAganMuQmxvY2sgY3VycmVudENvbnRhaW5lcjsKICBqcy5CbG9jayBnZXQgYm9keSA9PiBjdXJyZW50Q29udGFpbmVyOwogIExpc3Q8anMuRXhwcmVzc2lvbj4gZXhwcmVzc2lvblN0YWNrOwogIExpc3Q8anMuQmxvY2s+IG9sZENvbnRhaW5lclN0YWNrOwoKICAvLy8gQ29udGFpbnMgdGhlIG5hbWVzIG9mIHRoZSBpbnN0cnVjdGlvbnMsIGFzIHdlbGwgYXMgdGhlIHBhcmFsbGVsCiAgLy8vIGNvcGllcyB0byBwZXJmb3JtIG9uIGJsb2NrIHRyYW5zaXRpb25pbmcuCiAgVmFyaWFibGVOYW1lcyB2YXJpYWJsZU5hbWVzOwoKICAvLy8gYHRydWVgIHdoZW4gd2UgbmVlZCB0byBnZW5lcmF0ZSBhIGB2YXJgIGRlY2xhcmF0aW9uIGF0IGZ1bmN0aW9uIGVudHJ5LAogIC8vLyBgZmFsc2VgIGlmIHdlIGNhbiBnZW5lcmF0ZSBhIGB2YXJgIGRlY2xhcmF0aW9uIGF0IGZpcnN0IGFzc2lnbm1lbnQgaW4gdGhlCiAgLy8vIG1pZGRsZSBvZiB0aGUgZnVuY3Rpb24uCiAgYm9vbCBzaG91bGRHcm91cFZhckRlY2xhcmF0aW9ucyA9IGZhbHNlOwoKICAvLy8gV2hpbGUgZ2VuZXJhdGluZyBleHByZXNzaW9ucywgd2UgY2FuJ3QgaW5zZXJ0IHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KICAvLy8gSW5zdGVhZCB3ZSBkZWNsYXJlIHRoZW0gYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbi4gIFdoZW4gbWluaWZ5aW5nCiAgLy8vIHdlIGRvIHRoaXMgbW9zdCBvZiB0aGUgdGltZSwgYmVjYXVzZSBpdCByZWR1Y2VzIHRoZSBzaXplIHVubGVzcyB0aGVyZQogIC8vLyBpcyBvbmx5IG9uZSB2YXJpYWJsZS4KICBmaW5hbCBTZXQ8U3RyaW5nPiBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9uczsKCiAgLy8vIFNldCBvZiB2YXJpYWJsZXMgYW5kIHBhcmFtZXRlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkZWNsYXJlZC4KICBmaW5hbCBTZXQ8U3RyaW5nPiBkZWNsYXJlZExvY2FsczsKCiAgSEdyYXBoIGN1cnJlbnRHcmFwaDsKCiAgLy8gUmVjb3JkcyBhIGJsb2NrLWluZm9ybWF0aW9uIHRoYXQgaXMgYmVpbmcgaGFuZGxlZCBzcGVjaWFsbHkuCiAgLy8gVXNlZCB0byBicmVhayBiYWQgcmVjdXJzaW9uLgogIEhCbG9ja0luZm9ybWF0aW9uIGN1cnJlbnRCbG9ja0luZm9ybWF0aW9uOwogIC8vIFRoZSBzdWJncmFwaCBpcyB1c2VkIHRvIGRlbGltaXQgdHJhdmVyc2FsIGZvciBzb21lIGNvbnN0cnVjdGlvbnMsIGUuZy4sCiAgLy8gaWYgYnJhbmNoZXMuCiAgU3ViR3JhcGggc3ViR3JhcGg7CgogIC8vIFBlbmRpbmcgYmxvY2tzIHRoYW4gbmVlZCB0byBiZSB2aXNpdGVkIGFzIHBhcnQgb2YgY3VycmVudCBzdWJncmFwaC4KICBRdWV1ZTxIQmFzaWNCbG9jaz4gYmxvY2tRdWV1ZTsKCiAgU3NhQ29kZUdlbmVyYXRvcigKICAgICAgdGhpcy5fY29kZWdlblRhc2ssCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX2NoZWNrZWRNb2RlSGVscGVycywKICAgICAgdGhpcy5fcnRpU3Vic3RpdHV0aW9ucywKICAgICAgdGhpcy5fcnRpRW5jb2RlciwKICAgICAgdGhpcy5fcnRpUmVjaXBlRW5jb2RlciwKICAgICAgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX3RyYWNlciwKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX3JlZ2lzdHJ5LAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KQogICAgICA6IGRlY2xhcmVkTG9jYWxzID0gbmV3IFNldDxTdHJpbmc+KCksCiAgICAgICAgY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMgPSBuZXcgU2V0PFN0cmluZz4oKSwKICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCksCiAgICAgICAgcGFyYW1ldGVycyA9IDxqcy5QYXJhbWV0ZXI+W10sCiAgICAgICAgZXhwcmVzc2lvblN0YWNrID0gPGpzLkV4cHJlc3Npb24+W10sCiAgICAgICAgb2xkQ29udGFpbmVyU3RhY2sgPSA8anMuQmxvY2s+W10sCiAgICAgICAgZ2VuZXJhdGVBdFVzZVNpdGUgPSBuZXcgU2V0PEhJbnN0cnVjdGlvbj4oKSwKICAgICAgICBjb250cm9sRmxvd09wZXJhdG9ycyA9IG5ldyBTZXQ8SEluc3RydWN0aW9uPigpLAogICAgICAgIGJyZWFrQWN0aW9uID0gbmV3IFNldDxKdW1wVGFyZ2V0PigpLAogICAgICAgIGNvbnRpbnVlQWN0aW9uID0gbmV3IFNldDxMYWJlbERlZmluaXRpb24+KCksCiAgICAgICAgaW1wbGljaXRDb250aW51ZUFjdGlvbiA9IG5ldyBTZXQ8SnVtcFRhcmdldD4oKTsKCiAgSkNvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICBOYXRpdmVEYXRhIGdldCBfbmF0aXZlRGF0YSA9PiBfY2xvc2VkV29ybGQubmF0aXZlRGF0YTsKCiAgSW50ZXJjZXB0b3JEYXRhIGdldCBfaW50ZXJjZXB0b3JEYXRhID0+IF9jbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGE7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBib29sIGlzR2VuZXJhdGVBdFVzZVNpdGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgYm9vbCBoYXNOb25CaXRPcFVzZXIoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBTZXQ8SFBoaT4gcGhpU2V0KSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIGluc3RydWN0aW9uLnVzZWRCeSkgewogICAgICBpZiAodXNlciBpcyBIUGhpKSB7CiAgICAgICAgaWYgKCFwaGlTZXQuY29udGFpbnModXNlcikpIHsKICAgICAgICAgIHBoaVNldC5hZGQodXNlcik7CiAgICAgICAgICBpZiAoaGFzTm9uQml0T3BVc2VyKHVzZXIsIHBoaVNldCkpIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh1c2VyIGlzISBIQml0Tm90ICYmIHVzZXIgaXMhIEhCaW5hcnlCaXRPcCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBvY2N1cGllZCBieSB0aGUgdmFsdWUgY29tcHV0ZWQgYnkgW2luc3RydWN0aW9uXS4KICAvLyBSZXR1cm5zIGAzMmAgaWYgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlIG9yIGRvZXMgbm90IGZpdCBpbiBhIHNtYWxsZXIgbnVtYmVyCiAgLy8gb2YgYml0cy4KICBpbnQgYml0V2lkdGgoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBjb25zdCBpbnQgTUFYID0gMzI7CiAgICBpbnQgY29uc3RhbnQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ29uc3RhbnQgJiYgaW5zdHJ1Y3Rpb24uaXNDb25zdGFudEludGVnZXIoKSkgewogICAgICAgIEludENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBpbnN0cnVjdGlvbi5jb25zdGFudDsKICAgICAgICByZXR1cm4gY29uc3RhbnQuaW50VmFsdWUudG9JbnQoKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNDb25zdGFudEludGVnZXIoKSkgewogICAgICBpbnQgdmFsdWUgPSBjb25zdGFudChpbnN0cnVjdGlvbik7CiAgICAgIGlmICh2YWx1ZSA8IDApIHJldHVybiBNQVg7CiAgICAgIGlmICh2YWx1ZSA+ICgoMSA8PCAzMSkgLSAxKSkgcmV0dXJuIE1BWDsKICAgICAgcmV0dXJuIHZhbHVlLmJpdExlbmd0aDsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQml0QW5kKSB7CiAgICAgIHJldHVybiBtYXRoLm1pbihiaXRXaWR0aChpbnN0cnVjdGlvbi5sZWZ0KSwgYml0V2lkdGgoaW5zdHJ1Y3Rpb24ucmlnaHQpKTsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQml0T3IgfHwgaW5zdHJ1Y3Rpb24gaXMgSEJpdFhvcikgewogICAgICBIQmluYXJ5Qml0T3AgYml0T3AgPSBpbnN0cnVjdGlvbjsKICAgICAgaW50IGxlZnRXaWR0aCA9IGJpdFdpZHRoKGJpdE9wLmxlZnQpOwogICAgICBpZiAobGVmdFdpZHRoID09IE1BWCkgcmV0dXJuIE1BWDsKICAgICAgcmV0dXJuIG1hdGgubWF4KGxlZnRXaWR0aCwgYml0V2lkdGgoYml0T3AucmlnaHQpKTsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIU2hpZnRMZWZ0KSB7CiAgICAgIGludCBzaGlmdENvdW50ID0gY29uc3RhbnQoaW5zdHJ1Y3Rpb24ucmlnaHQpOwogICAgICBpZiAoc2hpZnRDb3VudCA9PSBudWxsIHx8IHNoaWZ0Q291bnQgPCAwIHx8IHNoaWZ0Q291bnQgPiAzMSkgcmV0dXJuIE1BWDsKICAgICAgaW50IGxlZnRXaWR0aCA9IGJpdFdpZHRoKGluc3RydWN0aW9uLmxlZnQpOwogICAgICBpbnQgd2lkdGggPSBsZWZ0V2lkdGggKyBzaGlmdENvdW50OwogICAgICByZXR1cm4gbWF0aC5taW4od2lkdGgsIE1BWCk7CiAgICB9CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFNoaWZ0UmlnaHQpIHsKICAgICAgaW50IHNoaWZ0Q291bnQgPSBjb25zdGFudChpbnN0cnVjdGlvbi5yaWdodCk7CiAgICAgIGlmIChzaGlmdENvdW50ID09IG51bGwgfHwgc2hpZnRDb3VudCA8IDAgfHwgc2hpZnRDb3VudCA+IDMxKSByZXR1cm4gTUFYOwogICAgICBpbnQgbGVmdFdpZHRoID0gYml0V2lkdGgoaW5zdHJ1Y3Rpb24ubGVmdCk7CiAgICAgIGlmIChsZWZ0V2lkdGggPj0gTUFYKSByZXR1cm4gTUFYOwogICAgICByZXR1cm4gbWF0aC5tYXgobGVmdFdpZHRoIC0gc2hpZnRDb3VudCwgMCk7CiAgICB9CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSEFkZCkgewogICAgICByZXR1cm4gbWF0aC5taW4oCiAgICAgICAgICAxICsgbWF0aC5tYXgoYml0V2lkdGgoaW5zdHJ1Y3Rpb24ubGVmdCksIGJpdFdpZHRoKGluc3RydWN0aW9uLnJpZ2h0KSksCiAgICAgICAgICBNQVgpOwogICAgfQogICAgcmV0dXJuIE1BWDsKICB9CgogIGJvb2wgcmVxdWlyZXNVaW50Q29udmVyc2lvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbi5pc1VJbnQzMShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoYml0V2lkdGgoaW5zdHJ1Y3Rpb24pIDw9IDMxKSByZXR1cm4gZmFsc2U7CiAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIGEgYml0LW9wZXJhdGlvbiBpcyBvbmx5IHVzZWQgYnkgb3RoZXIgYml0CiAgICAvLyBvcGVyYXRpb25zLCB3ZSBkbyBub3QgaGF2ZSB0byBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIGludGVnZXIuCiAgICByZXR1cm4gaGFzTm9uQml0T3BVc2VyKGluc3RydWN0aW9uLCBuZXcgU2V0PEhQaGk+KCkpOwogIH0KCiAgLy8vIElmIHRoZSBbaW5zdHJ1Y3Rpb25dIGlzIG5vdCBgbnVsbGAgaXQgd2lsbCBiZSB1c2VkIHRvIGF0dGFjaCB0aGUgcG9zaXRpb24KICAvLy8gdG8gdGhlIFtzdGF0ZW1lbnRdLgogIHZvaWQgcHVzaFN0YXRlbWVudChqcy5TdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBhc3NlcnQoZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkpOwogICAgY3VycmVudENvbnRhaW5lci5zdGF0ZW1lbnRzLmFkZChzdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCBpbnNlcnRTdGF0ZW1lbnRBdFN0YXJ0KGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIGN1cnJlbnRDb250YWluZXIuc3RhdGVtZW50cy5pbnNlcnQoMCwgc3RhdGVtZW50KTsKICB9CgogIC8vLyBJZiB0aGUgW2luc3RydWN0aW9uXSBpcyBub3QgYG51bGxgIGl0IHdpbGwgYmUgdXNlZCB0byBhdHRhY2ggdGhlIHBvc2l0aW9uCiAgLy8vIHRvIHRoZSBbZXhwcmVzc2lvbl0uCiAgcHVzaEV4cHJlc3Npb25Bc1N0YXRlbWVudCgKICAgICAganMuRXhwcmVzc2lvbiBleHByZXNzaW9uLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcHVzaFN0YXRlbWVudChuZXcganMuRXhwcmVzc2lvblN0YXRlbWVudChleHByZXNzaW9uKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIC8vLyBJZiB0aGUgW2luc3RydWN0aW9uXSBpcyBub3QgYG51bGxgIGl0IHdpbGwgYmUgdXNlZCB0byBhdHRhY2ggdGhlIHBvc2l0aW9uCiAgLy8vIHRvIHRoZSBbZXhwcmVzc2lvbl0uCiAgcHVzaChqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGV4cHJlc3Npb25TdGFjay5hZGQoZXhwcmVzc2lvbik7CiAgfQoKICBqcy5FeHByZXNzaW9uIHBvcCgpIHsKICAgIHJldHVybiBleHByZXNzaW9uU3RhY2sucmVtb3ZlTGFzdCgpOwogIH0KCiAgdm9pZCBwcmVHZW5lcmF0ZU1ldGhvZChIR3JhcGggZ3JhcGgpIHsKICAgIHZvaWQgcnVuUGhhc2UoQ29kZWdlblBoYXNlIHBoYXNlLCB7Ym9vbCB0cmFjZUdyYXBoID0gdHJ1ZX0pIHsKICAgICAgX2NvZGVnZW5UYXNrLm1lYXN1cmVTdWJ0YXNrKHBoYXNlLm5hbWUsICgpID0+IHBoYXNlLnZpc2l0R3JhcGgoZ3JhcGgpKTsKICAgICAgaWYgKHRyYWNlR3JhcGgpIHsKICAgICAgICBfdHJhY2VyLnRyYWNlR3JhcGgocGhhc2UubmFtZSwgZ3JhcGgpOwogICAgICB9CiAgICAgIGFzc2VydChncmFwaC5pc1ZhbGlkKCksICdHcmFwaCBub3QgdmFsaWQgYWZ0ZXIgJHtwaGFzZS5uYW1lfScpOwogICAgfQoKICAgIHJ1blBoYXNlKAogICAgICAgIG5ldyBTc2FJbnN0cnVjdGlvblNlbGVjdGlvbihfb3B0aW9ucywgX2Nsb3NlZFdvcmxkLCBfaW50ZXJjZXB0b3JEYXRhKSk7CiAgICBydW5QaGFzZShuZXcgU3NhVHlwZUtub3duUmVtb3ZlcigpKTsKICAgIHJ1blBoYXNlKG5ldyBTc2FUcnVzdGVkQ2hlY2tSZW1vdmVyKF9vcHRpb25zKSk7CiAgICBydW5QaGFzZShuZXcgU3NhQXNzaWdubWVudENoYWluaW5nKF9vcHRpb25zLCBfY2xvc2VkV29ybGQpKTsKICAgIHJ1blBoYXNlKG5ldyBTc2FJbnN0cnVjdGlvbk1lcmdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgZ2VuZXJhdGVBdFVzZVNpdGUpKTsKICAgIHJ1blBoYXNlKG5ldyBTc2FDb25kaXRpb25NZXJnZXIoZ2VuZXJhdGVBdFVzZVNpdGUsIGNvbnRyb2xGbG93T3BlcmF0b3JzKSk7CiAgICBydW5QaGFzZShuZXcgU3NhU2hhcmVSZWdpb25Db25zdGFudHMoX29wdGlvbnMpKTsKCiAgICBTc2FMaXZlSW50ZXJ2YWxCdWlsZGVyIGludGVydmFsQnVpbGRlciA9CiAgICAgICAgbmV3IFNzYUxpdmVJbnRlcnZhbEJ1aWxkZXIoZ2VuZXJhdGVBdFVzZVNpdGUsIGNvbnRyb2xGbG93T3BlcmF0b3JzKTsKICAgIHJ1blBoYXNlKGludGVydmFsQnVpbGRlciwgdHJhY2VHcmFwaDogZmFsc2UpOwogICAgU3NhVmFyaWFibGVBbGxvY2F0b3IgYWxsb2NhdG9yID0gbmV3IFNzYVZhcmlhYmxlQWxsb2NhdG9yKAogICAgICAgIF9uYW1lciwKICAgICAgICBpbnRlcnZhbEJ1aWxkZXIubGl2ZUluc3RydWN0aW9ucywKICAgICAgICBpbnRlcnZhbEJ1aWxkZXIubGl2ZUludGVydmFscywKICAgICAgICBnZW5lcmF0ZUF0VXNlU2l0ZSk7CiAgICBydW5QaGFzZShhbGxvY2F0b3IsIHRyYWNlR3JhcGg6IGZhbHNlKTsKICAgIHZhcmlhYmxlTmFtZXMgPSBhbGxvY2F0b3IubmFtZXM7CiAgICBzaG91bGRHcm91cFZhckRlY2xhcmF0aW9ucyA9IGFsbG9jYXRvci5uYW1lcy5udW1iZXJPZlZhcmlhYmxlcyA+IDE7CiAgfQoKICB2b2lkIGhhbmRsZURlbGF5ZWRWYXJpYWJsZURlY2xhcmF0aW9ucyhTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gQ3JlYXRlICd2YXInIGxpc3QgYXQgdGhlIHN0YXJ0IG9mIGZ1bmN0aW9uLiAgTW92ZSBhc3NpZ25tZW50IHN0YXRlbWVudHMKICAgIC8vIGZyb20gdGhlIHRvcCBvZiB0aGUgYm9keSBpbnRvIHRoZSB2YXJpYWJsZSBpbml0aWFsaXplcnMuCiAgICBpZiAoY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMuaXNFbXB0eSkgcmV0dXJuOwoKICAgIExpc3Q8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gZGVjbGFyYXRpb25zID0gW107CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IGN1cnJlbnRDb250YWluZXIuc3RhdGVtZW50czsKICAgIGludCBuZXh0U3RhdGVtZW50ID0gMDsKCiAgICB3aGlsZSAobmV4dFN0YXRlbWVudCA8IHN0YXRlbWVudHMubGVuZ3RoKSB7CiAgICAgIGlmIChjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5pc0VtcHR5KSBicmVhazsKICAgICAganMuU3RhdGVtZW50IHN0YXRlbWVudCA9IHN0YXRlbWVudHNbbmV4dFN0YXRlbWVudF07CiAgICAgIGlmIChzdGF0ZW1lbnQgaXMganMuRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHN0YXRlbWVudC5leHByZXNzaW9uOwogICAgICAgIGlmIChleHByZXNzaW9uIGlzIGpzLkFzc2lnbm1lbnQgJiYgIWV4cHJlc3Npb24uaXNDb21wb3VuZCkgewogICAgICAgICAganMuRXhwcmVzc2lvbiBsZWZ0ID0gZXhwcmVzc2lvbi5sZWZ0SGFuZFNpZGU7CiAgICAgICAgICBpZiAobGVmdCBpcyBqcy5WYXJpYWJsZVJlZmVyZW5jZSkgewogICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGxlZnQubmFtZTsKICAgICAgICAgICAganMuRXhwcmVzc2lvbiB2YWx1ZSA9IGV4cHJlc3Npb24udmFsdWU7CiAgICAgICAgICAgIGlmIChfc2FmZUluSW5pdGlhbGl6ZXIodmFsdWUpICYmCiAgICAgICAgICAgICAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5yZW1vdmUobmFtZSkpIHsKICAgICAgICAgICAgICB2YXIgaW5pdGlhbGl6YXRpb24gPSBuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbigKICAgICAgICAgICAgICAgICAgICAgIG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKG5hbWUpLCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMuYWRkKGluaXRpYWxpemF0aW9uKTsKICAgICAgICAgICAgICArK25leHRTdGF0ZW1lbnQ7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CgogICAgTGlzdDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiB1bmluaXRpYWxpemVkID0gW107CiAgICBmb3IgKFN0cmluZyBuYW1lIGluIGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zKSB7CiAgICAgIHVuaW5pdGlhbGl6ZWQuYWRkKG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKAogICAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24obmFtZSksIG51bGwpKTsKICAgIH0KICAgIHZhciBkZWNsYXJhdGlvbkxpc3QgPQogICAgICAgIG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh1bmluaXRpYWxpemVkICsgZGVjbGFyYXRpb25zKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHN0YXRlbWVudHMucmVwbGFjZVJhbmdlKAogICAgICAgIDAsIG5leHRTdGF0ZW1lbnQsIFtuZXcganMuRXhwcmVzc2lvblN0YXRlbWVudChkZWNsYXJhdGlvbkxpc3QpXSk7CiAgfQoKICAvLyBBbiBleHByZXNzaW9uIGlzIHNhZmUgdG8gYmUgcHVsbGVkIGludG8gYSAndmFyJyBpbml0aWFsaXplciBpZiBpdCBkb2VzIG5vdAogIC8vIGNvbnRhaW4gYXNzaWdubWVudHMgdG8gbG9jYWxzLiBXZSBkb24ndCBnZW5lcmF0ZSBhc3NpZ25tZW50cyB0byBsb2NhbHMKICAvLyBpbnNpZGUgZXhwcmVzc2lvbnMuCiAgYm9vbCBfc2FmZUluSW5pdGlhbGl6ZXIoanMuRXhwcmVzc2lvbiBub2RlKSA9PiB0cnVlOwoKICB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgcHJlR2VuZXJhdGVNZXRob2QoZ3JhcGgpOwogICAgY3VycmVudEdyYXBoID0gZ3JhcGg7CiAgICB2aXNpdFN1YkdyYXBoKG5ldyBTdWJHcmFwaChncmFwaC5lbnRyeSwgZ3JhcGguZXhpdCkpOwogICAgaGFuZGxlRGVsYXllZFZhcmlhYmxlRGVjbGFyYXRpb25zKGdyYXBoLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgdmlzaXRTdWJHcmFwaChTdWJHcmFwaCBuZXdTdWJHcmFwaCkgewogICAgU3ViR3JhcGggb2xkU3ViR3JhcGggPSBzdWJHcmFwaDsKICAgIFF1ZXVlPEhCYXNpY0Jsb2NrPiBvbGRCbG9ja1F1ZXVlID0gYmxvY2tRdWV1ZTsKICAgIHN1YkdyYXBoID0gbmV3U3ViR3JhcGg7CiAgICBibG9ja1F1ZXVlID0gbmV3IFF1ZXVlPEhCYXNpY0Jsb2NrPigpOwogICAgZW50ZXJTdWJHcmFwaChzdWJHcmFwaC5zdGFydCk7CiAgICBibG9ja1F1ZXVlID0gb2xkQmxvY2tRdWV1ZTsKICAgIHN1YkdyYXBoID0gb2xkU3ViR3JhcGg7CiAgfQoKICAvLy8gQ2hlY2sgd2hldGhlciBhIHN1Yi1ncmFwaCBjYW4gYmUgZ2VuZXJhdGVkIGFzIGFuIGV4cHJlc3Npb24sIG9yIGV2ZW4KICAvLy8gYXMgYSBkZWNsYXJhdGlvbiwgb3IgaWYgaXQgaGFzIHRvIGZhbGwgYmFjayB0byBiZWluZyBnZW5lcmF0ZWQgYXMKICAvLy8gYSBzdGF0ZW1lbnQuCiAgLy8vIEV4cHJlc3Npb25zIGFyZSBhbnl0aGluZyB0aGF0IGRvZXNuJ3QgZ2VuZXJhdGUgY29udHJvbCBmbG93IGNvbnN0cnVjdHMuCiAgLy8vIERlY2xhcmF0aW9ucyBtdXN0IG9ubHkgZ2VuZXJhdGUgYXNzaWdubWVudHMgb24gdGhlIGZvcm0gImlkID0gZXhwcmVzc2lvbiIsCiAgLy8vIGFuZCBub3QsIGUuZy4sIGV4cHJlc3Npb25zIHdoZXJlIHRoZSB2YWx1ZSBpc24ndCBhc3NpZ25lZCwgb3Igd2hlcmUgaXQncwogIC8vLyBhc3NpZ25lZCB0byBzb21ldGhpbmcgdGhhdCdzIG5vdCBhIHNpbXBsZSB2YXJpYWJsZS4KICBpbnQgZXhwcmVzc2lvblR5cGUoSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAvLyBUaGUgb25seSBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIHVzZWQgYXMgcGFydCBvZiBhIEhCbG9ja0luZm9ybWF0aW9uIGlzCiAgICAvLyBjdXJyZW50IEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiwgc28gaXQncyB0aGUgb25seSBvbmUgcmVhY2hpbmcKICAgIC8vIGhlcmUuIElmIHdlIHN0YXJ0IHVzaW5nIHRoZSBvdGhlciBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIHR5cGVzIHRvbywKICAgIC8vIHRoaXMgY29kZSBzaG91bGQgYmUgZ2VuZXJhbGl6ZWQuCiAgICBhc3NlcnQoaW5mbyBpcyBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24pOwogICAgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uIGV4cHJlc3Npb25JbmZvID0gaW5mbzsKICAgIFN1YkdyYXBoIGxpbWl0cyA9IGV4cHJlc3Npb25JbmZvLnN1YkV4cHJlc3Npb247CgogICAgLy8gU3RhcnQgYXNzdW1pbmcgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgZGVjbGFyYXRpb25zLiBJZiB3ZSBmaW5kIGEKICAgIC8vIGNvdW50ZXItZXhhbXBsZSwgd2UgZGVncmFkZSBvdXIgYXNzdW1wdGlvbiB0byBlaXRoZXIgZXhwcmVzc2lvbiBvcgogICAgLy8gc3RhdGVtZW50LCBhbmQgaW4gdGhlIGxhdHRlciBjYXNlLCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5IHNpbmNlCiAgICAvLyBpdCBjYW4ndCBnZXQgYW55IHdvcnNlLiBFLmcuLCBhIGZ1bmN0aW9uIGNhbGwgd2hlcmUgdGhlIHJldHVybiB2YWx1ZQogICAgLy8gaXNuJ3QgdXNlZCBjYW4ndCBiZSBpbiBhIGRlY2xhcmF0aW9uLgogICAgaW50IHJlc3VsdCA9IFRZUEVfREVDTEFSQVRJT047CiAgICBIQmFzaWNCbG9jayBiYXNpY0Jsb2NrID0gbGltaXRzLnN0YXJ0OwogICAgZG8gewogICAgICBISW5zdHJ1Y3Rpb24gY3VycmVudCA9IGJhc2ljQmxvY2suZmlyc3Q7CiAgICAgIHdoaWxlIChjdXJyZW50ICE9IGJhc2ljQmxvY2subGFzdCkgewogICAgICAgIC8vIEUuZywgYm91bmRzIGNoZWNrLgogICAgICAgIGlmIChjdXJyZW50LmlzQ29udHJvbEZsb3coKSkgewogICAgICAgICAgcmV0dXJuIFRZUEVfU1RBVEVNRU5UOwogICAgICAgIH0KICAgICAgICAvLyBIRmllbGRTZXQgZ2VuZXJhdGVzIGNvZGUgb24gdGhlIGZvcm0gIngueSA9IC4uLiIsIHdoaWNoIGlzbid0IHZhbGlkCiAgICAgICAgLy8gaW4gYSBkZWNsYXJhdGlvbi4KICAgICAgICBpZiAoY3VycmVudC51c2VkQnkuaXNFbXB0eSB8fCBjdXJyZW50IGlzIEhGaWVsZFNldCkgewogICAgICAgICAgcmVzdWx0ID0gVFlQRV9FWFBSRVNTSU9OOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgICB9CiAgICAgIGlmIChjdXJyZW50IGlzIEhHb3RvKSB7CiAgICAgICAgYmFzaWNCbG9jayA9IGJhc2ljQmxvY2suc3VjY2Vzc29yc1swXTsKICAgICAgfSBlbHNlIGlmIChjdXJyZW50IGlzIEhDb25kaXRpb25hbEJyYW5jaCkgewogICAgICAgIGlmIChnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhjdXJyZW50KSkgewogICAgICAgICAgLy8gU2hvcnQtY2lyY3VpdCBjb250cm9sIGZsb3cgb3BlcmF0b3IgdHJpY2tlcnkuCiAgICAgICAgICAvLyBDaGVjayB0aGUgc2Vjb25kIGhhbGYsIHdoaWNoIHdpbGwgY29udGludWUgaW50byB0aGUgam9pbi4KICAgICAgICAgIC8vIChUaGUgZmlyc3QgaGFsZiBpcyBbaW5wdXRzWzBdXSwgdGhlIHNlY29uZCBoYWxmIGlzIFtzdWNjZXNzb3JzWzBdXSwKICAgICAgICAgIC8vIGFuZCBbc3VjY2Vzc29yc1sxXV0gaXMgdGhlIGpvaW4tYmxvY2spLgogICAgICAgICAgYmFzaWNCbG9jayA9IGJhc2ljQmxvY2suc3VjY2Vzc29yc1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gV2UgYWxsb3cgYW4gZXhwcmVzc2lvbiB0byBlbmQgb24gYW4gSElmIChhIGNvbmRpdGlvbiBleHByZXNzaW9uKS4KICAgICAgICAgIHJldHVybiBpZGVudGljYWwoYmFzaWNCbG9jaywgbGltaXRzLmVuZCkgPyByZXN1bHQgOiBUWVBFX1NUQVRFTUVOVDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRXhwcmVzc2lvbi1pbmNvbXBhdGlibGUgY29udHJvbCBmbG93LgogICAgICAgIHJldHVybiBUWVBFX1NUQVRFTUVOVDsKICAgICAgfQogICAgfSB3aGlsZSAobGltaXRzLmNvbnRhaW5zKGJhc2ljQmxvY2spKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIGlzSlNFeHByZXNzaW9uKEhFeHByZXNzaW9uSW5mb3JtYXRpb24gaW5mbykgewogICAgcmV0dXJuICFpZGVudGljYWwoZXhwcmVzc2lvblR5cGUoaW5mbyksIFRZUEVfU1RBVEVNRU5UKTsKICB9CgogIGJvb2wgaXNKU0NvbmRpdGlvbihIRXhwcmVzc2lvbkluZm9ybWF0aW9uIGluZm8pIHsKICAgIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiBncmFwaCA9IGluZm87CiAgICBTdWJFeHByZXNzaW9uIGxpbWl0cyA9IGdyYXBoLnN1YkV4cHJlc3Npb247CiAgICByZXR1cm4gIWlkZW50aWNhbChleHByZXNzaW9uVHlwZShpbmZvKSwgVFlQRV9TVEFURU1FTlQpICYmCiAgICAgICAgKGxpbWl0cy5lbmQubGFzdCBpcyBIQ29uZGl0aW9uYWxCcmFuY2gpOwogIH0KCiAgLy8vIEdlbmVyYXRlIHN0YXRlbWVudHMgZnJvbSBibG9jayBpbmZvcm1hdGlvbi4KICAvLy8gSWYgdGhlIGJsb2NrIGluZm9ybWF0aW9uIGNvbnRhaW5zIGV4cHJlc3Npb25zLCBnZW5lcmF0ZSBvbmx5CiAgLy8vIGFzc2lnbm1lbnRzLCBhbmQgaWYgaXQgZW5kcyBpbiBhIGNvbmRpdGlvbmFsIGJyYW5jaCwgZG9uJ3QgZ2VuZXJhdGUKICAvLy8gdGhlIGNvbmRpdGlvbi4KICB2b2lkIGdlbmVyYXRlU3RhdGVtZW50cyhIQmxvY2tJbmZvcm1hdGlvbiBibG9jaykgewogICAgaWYgKGJsb2NrIGlzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbikgewogICAgICBibG9jay5hY2NlcHQodGhpcyk7CiAgICB9IGVsc2UgewogICAgICBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gZXhwcmVzc2lvbiA9IGJsb2NrOwogICAgICB2aXNpdFN1YkdyYXBoKGV4cHJlc3Npb24uc3ViRXhwcmVzc2lvbik7CiAgICB9CiAgfQoKICBqcy5CbG9jayBnZW5lcmF0ZVN0YXRlbWVudHNJbk5ld0Jsb2NrKEhCbG9ja0luZm9ybWF0aW9uIGJsb2NrKSB7CiAgICBqcy5CbG9jayByZXN1bHQgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICBjdXJyZW50Q29udGFpbmVyID0gcmVzdWx0OwogICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGJsb2NrKTsKICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIElmIHRoZSBbYmxvY2tdIG9ubHkgY29udGFpbnMgb25lIHN0YXRlbWVudCByZXR1cm5zIHRoYXQgc3RhdGVtZW50LiBJZiB0aGUKICAvLy8gdGhhdCBzdGF0ZW1lbnQgaXRzZWxmIGlzIGEgYmxvY2ssIHJlY3Vyc2l2ZWx5IGNhbGxzIHRoaXMgbWV0aG9kLgogIC8vLwogIC8vLyBJZiB0aGUgYmxvY2sgaXMgZW1wdHksIHJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgW2pzLk5PUF0uCiAganMuU3RhdGVtZW50IHVud3JhcFN0YXRlbWVudChqcy5CbG9jayBibG9jaykgewogICAgaW50IGxlbiA9IGJsb2NrLnN0YXRlbWVudHMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSByZXR1cm4gbmV3IGpzLkVtcHR5U3RhdGVtZW50KCk7CiAgICBpZiAobGVuID09IDEpIHsKICAgICAganMuU3RhdGVtZW50IHJlc3VsdCA9IGJsb2NrLnN0YXRlbWVudHNbMF07CiAgICAgIGlmIChyZXN1bHQgaXMganMuQmxvY2spIHJldHVybiB1bndyYXBTdGF0ZW1lbnQocmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBibG9jazsKICB9CgogIC8vLyBHZW5lcmF0ZSBleHByZXNzaW9ucyBmcm9tIGJsb2NrIGluZm9ybWF0aW9uLgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVFeHByZXNzaW9uKEhFeHByZXNzaW9uSW5mb3JtYXRpb24gZXhwcmVzc2lvbikgewogICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHN1Yi1leHByZXNzaW9uIGdyYXBocy4KICAgIGFzc2VydChleHByZXNzaW9uIGlzIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbik7CgogICAgYm9vbCBvbGRJc0dlbmVyYXRpbmdFeHByZXNzaW9uID0gaXNHZW5lcmF0aW5nRXhwcmVzc2lvbjsKICAgIGlzR2VuZXJhdGluZ0V4cHJlc3Npb24gPSB0cnVlOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBvbGRFeHByZXNzaW9uU3RhY2sgPSBleHByZXNzaW9uU3RhY2s7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IHNlcXVlbmNlRWxlbWVudHMgPSA8anMuRXhwcmVzc2lvbj5bXTsKICAgIGV4cHJlc3Npb25TdGFjayA9IHNlcXVlbmNlRWxlbWVudHM7CiAgICBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gZXhwcmVzc2lvblN1YkdyYXBoID0gZXhwcmVzc2lvbjsKICAgIHZpc2l0U3ViR3JhcGgoZXhwcmVzc2lvblN1YkdyYXBoLnN1YkV4cHJlc3Npb24pOwogICAgZXhwcmVzc2lvblN0YWNrID0gb2xkRXhwcmVzc2lvblN0YWNrOwogICAgaXNHZW5lcmF0aW5nRXhwcmVzc2lvbiA9IG9sZElzR2VuZXJhdGluZ0V4cHJlc3Npb247CiAgICBpZiAoc2VxdWVuY2VFbGVtZW50cy5pc0VtcHR5KSB7CiAgICAgIC8vIEhhcHBlbnMgd2hlbiB0aGUgaW5pdGlhbGl6ZXIsIGNvbmRpdGlvbiBvciB1cGRhdGUgb2YgYSBsb29wIGlzIGVtcHR5LgogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoc2VxdWVuY2VFbGVtZW50cy5sZW5ndGggPT0gMSkgewogICAgICByZXR1cm4gc2VxdWVuY2VFbGVtZW50c1swXTsKICAgIH0gZWxzZSB7CiAgICAgIGpzLkV4cHJlc3Npb24gcmVzdWx0ID0gc2VxdWVuY2VFbGVtZW50cy5yZW1vdmVMYXN0KCk7CiAgICAgIHdoaWxlIChzZXF1ZW5jZUVsZW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgICByZXN1bHQgPSBuZXcganMuQmluYXJ5KCcsJywgc2VxdWVuY2VFbGVtZW50cy5yZW1vdmVMYXN0KCksIHJlc3VsdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9CgogIC8vLyBPbmx5IHZpc2l0cyB0aGUgYXJndW1lbnRzIHN0YXJ0aW5nIGF0IGlucHV0c1tISW52b2tlLkFSR1VNRU5UU19PRkZTRVRdLgogIExpc3Q8anMuRXhwcmVzc2lvbj4gdmlzaXRBcmd1bWVudHMoTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAge2ludCBzdGFydDogSEludm9rZS5BUkdVTUVOVFNfT0ZGU0VUfSkgewogICAgYXNzZXJ0KGlucHV0cy5sZW5ndGggPj0gc3RhcnQpOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiByZXN1bHQgPSBuZXcgTGlzdDxqcy5FeHByZXNzaW9uPihpbnB1dHMubGVuZ3RoIC0gc3RhcnQpOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHVzZShpbnB1dHNbaV0pOwogICAgICByZXN1bHRbaSAtIHN0YXJ0XSA9IHBvcCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgaXNWYXJpYWJsZURlY2xhcmVkKFN0cmluZyB2YXJpYWJsZU5hbWUpIHsKICAgIHJldHVybiBkZWNsYXJlZExvY2Fscy5jb250YWlucyh2YXJpYWJsZU5hbWUpIHx8CiAgICAgICAgY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMuY29udGFpbnModmFyaWFibGVOYW1lKTsKICB9CgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVFeHByZXNzaW9uQXNzaWdubWVudChTdHJpbmcgdmFyaWFibGVOYW1lLAogICAgICBqcy5FeHByZXNzaW9uIHZhbHVlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW50cm9kdWNlIGEgRGVmZXJyZWRWYXJpYWJsZVVzZSB0byBoYW5kbGUgdGhpcwogICAgLy8gaW4gdGhlIFNTQSBjb2RlZ2VuIG9yIGxldCB0aGUgSlMgcHJpbnRlciBoYW5kbGUgaXQgZnVsbHkgYW5kIHJlbW92ZSBpdAogICAgLy8gaGVyZS4KICAgIGlmICh2YWx1ZSBpcyBqcy5CaW5hcnkpIHsKICAgICAganMuQmluYXJ5IGJpbmFyeSA9IHZhbHVlOwogICAgICBTdHJpbmcgb3AgPSBiaW5hcnkub3A7CiAgICAgIGlmIChvcCA9PSAnKycgfHwKICAgICAgICAgIG9wID09ICctJyB8fAogICAgICAgICAgb3AgPT0gJy8nIHx8CiAgICAgICAgICBvcCA9PSAnKicgfHwKICAgICAgICAgIG9wID09ICclJyB8fAogICAgICAgICAgb3AgPT0gJ14nIHx8CiAgICAgICAgICBvcCA9PSAnJicgfHwKICAgICAgICAgIG9wID09ICd8JykgewogICAgICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IGJpbmFyeS5sZWZ0OwogICAgICAgIGlmIChsZWZ0IGlzIGpzLlZhcmlhYmxlVXNlICYmIGxlZnQubmFtZSA9PSB2YXJpYWJsZU5hbWUpIHsKICAgICAgICAgIC8vIFdlIGtub3cgbm93LCB0aGF0IHdlIGNhbiBzaG9ydGVuIHggPSB4ICsgeSBpbnRvIHggKz0geS4KICAgICAgICAgIC8vIEFsc28gY2hlY2sgZm9yIHRoZSBzaG9ydGN1dCB3aGVyZSB5IGVxdWFscyAxOiB4KysgYW5kIHgtLS4KICAgICAgICAgIGpzLkV4cHJlc3Npb24gcmlnaHQgPSBiaW5hcnkucmlnaHQ7CiAgICAgICAgICBpZiAoKG9wID09ICcrJyB8fCBvcCA9PSAnLScpICYmCiAgICAgICAgICAgICAgcmlnaHQgaXMganMuTGl0ZXJhbE51bWJlciAmJgogICAgICAgICAgICAgIHJpZ2h0LnZhbHVlID09ICIxIikgewogICAgICAgICAgICByZXR1cm4gbmV3IGpzLlByZWZpeChvcCA9PSAnKycgPyAnKysnIDogJy0tJywgbGVmdCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbmV3IGpzLkFzc2lnbm1lbnQuY29tcG91bmQoYmluYXJ5LmxlZnQsIG9wLCBiaW5hcnkucmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBqcy5Bc3NpZ25tZW50KG5ldyBqcy5WYXJpYWJsZVVzZSh2YXJpYWJsZU5hbWUpLCB2YWx1ZSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHZhbHVlLnNvdXJjZUluZm9ybWF0aW9uID8/IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgYXNzaWduVmFyaWFibGUoU3RyaW5nIHZhcmlhYmxlTmFtZSwganMuRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChpc0dlbmVyYXRpbmdFeHByZXNzaW9uKSB7CiAgICAgIC8vIElmIHdlIGFyZSBpbiBhbiBleHByZXNzaW9uIHRoZW4gd2UgY2FuJ3QgZGVjbGFyZSB0aGUgdmFyaWFibGUgaGVyZS4KICAgICAgLy8gV2UgaGF2ZSBubyBjaG9pY2UsIGJ1dCB0byB1c2UgaXQgYW5kIHRoZW4gZGVjbGFyZSBpdCBzZXBhcmF0ZWx5LgogICAgICBpZiAoIWlzVmFyaWFibGVEZWNsYXJlZCh2YXJpYWJsZU5hbWUpKSB7CiAgICAgICAgY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMuYWRkKHZhcmlhYmxlTmFtZSk7CiAgICAgIH0KICAgICAgcHVzaCgKICAgICAgICAgIGdlbmVyYXRlRXhwcmVzc2lvbkFzc2lnbm1lbnQodmFyaWFibGVOYW1lLCB2YWx1ZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgLy8gT3RoZXJ3aXNlIGlmIHdlIGFyZSB0cnlpbmcgdG8gZGVjbGFyZSBpbmxpbmUgYW5kIHdlIGFyZSBpbiBhIHN0YXRlbWVudAogICAgICAvLyB0aGVuIHdlIGRlY2xhcmUgKHVubGVzcyBpdCB3YXMgYWxyZWFkeSBkZWNsYXJlZCkuCiAgICB9IGVsc2UgaWYgKCFzaG91bGRHcm91cFZhckRlY2xhcmF0aW9ucyAmJgogICAgICAgICFkZWNsYXJlZExvY2Fscy5jb250YWlucyh2YXJpYWJsZU5hbWUpKSB7CiAgICAgIC8vIEl0IG1heSBiZSBuZWNlc3NhcnkgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIG9uZXMgdG8gYmUgZGVjbGFyZWQgbGF0ZXIuCiAgICAgIGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zLnJlbW92ZSh2YXJpYWJsZU5hbWUpOwogICAgICBkZWNsYXJlZExvY2Fscy5hZGQodmFyaWFibGVOYW1lKTsKICAgICAganMuVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsID0gbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24odmFyaWFibGVOYW1lKTsKICAgICAganMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBpbml0aWFsaXphdGlvbiA9CiAgICAgICAgICBuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbihkZWNsLCB2YWx1ZSk7CgogICAgICBwdXNoRXhwcmVzc2lvbkFzU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KAogICAgICAgICAgICAgIDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPltpbml0aWFsaXphdGlvbl0pLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgLy8gT3RoZXJ3aXNlIHdlIGFyZSBqdXN0IGdvaW5nIHRvIHVzZSBpdC4gIElmIHdlIGhhdmUgbm90IGFscmVhZHkgZGVjbGFyZWQKICAgICAgLy8gaXQgdGhlbiB3ZSBtYWtlIHN1cmUgd2Ugd2lsbCBkZWNsYXJlIGl0IGxhdGVyLgogICAgICBpZiAoIWRlY2xhcmVkTG9jYWxzLmNvbnRhaW5zKHZhcmlhYmxlTmFtZSkpIHsKICAgICAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5hZGQodmFyaWFibGVOYW1lKTsKICAgICAgfQogICAgICBwdXNoRXhwcmVzc2lvbkFzU3RhdGVtZW50KAogICAgICAgICAgZ2VuZXJhdGVFeHByZXNzaW9uQXNzaWdubWVudCh2YXJpYWJsZU5hbWUsIHZhbHVlLCBzb3VyY2VJbmZvcm1hdGlvbiksCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGRlZmluZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIEZvciBzaW1wbGUgdHlwZSBjaGVja3MgbGlrZSBpID0gaW50VHlwZUNoZWNrKGkpLCB3ZSBkb24ndCBoYXZlIHRvCiAgICAvLyBlbWl0IGFuIGFzc2lnbm1lbnQsIGJlY2F1c2UgdGhlIGludFR5cGVDaGVjayBqdXN0IHJldHVybnMgaXRzCiAgICAvLyBhcmd1bWVudC4KICAgIGJvb2wgbmVlZHNBc3NpZ25tZW50ID0gdHJ1ZTsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ2hlY2spIHsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhUeXBlQ29udmVyc2lvbiB8fAogICAgICAgICAgaW5zdHJ1Y3Rpb24gaXMgSFByaW1pdGl2ZUNoZWNrIHx8CiAgICAgICAgICBpbnN0cnVjdGlvbiBpcyBIQXNDaGVjayB8fAogICAgICAgICAgaW5zdHJ1Y3Rpb24gaXMgSEFzQ2hlY2tTaW1wbGUgfHwKICAgICAgICAgIGluc3RydWN0aW9uIGlzIEhCb29sQ29udmVyc2lvbikgewogICAgICAgIFN0cmluZyBpbnB1dE5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUoaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0KTsKICAgICAgICBpZiAodmFyaWFibGVOYW1lcy5nZXROYW1lKGluc3RydWN0aW9uKSA9PSBpbnB1dE5hbWUpIHsKICAgICAgICAgIG5lZWRzQXNzaWdubWVudCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGluc3RydWN0aW9uIGlzIEhMb2NhbFZhbHVlKSB7CiAgICAgIG5lZWRzQXNzaWdubWVudCA9IGZhbHNlOwogICAgfQoKICAgIGlmIChuZWVkc0Fzc2lnbm1lbnQgJiYKICAgICAgICAhaW5zdHJ1Y3Rpb24uaXNDb250cm9sRmxvdygpICYmCiAgICAgICAgdmFyaWFibGVOYW1lcy5oYXNOYW1lKGluc3RydWN0aW9uKSkgewogICAgICB2aXNpdEV4cHJlc3Npb24oaW5zdHJ1Y3Rpb24pOwogICAgICBhc3NpZ25WYXJpYWJsZSh2YXJpYWJsZU5hbWVzLmdldE5hbWUoaW5zdHJ1Y3Rpb24pLCBwb3AoKSwKICAgICAgICAgIGluc3RydWN0aW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc0dlbmVyYXRpbmdFeHByZXNzaW9uKSB7CiAgICAgIHZpc2l0RXhwcmVzc2lvbihpbnN0cnVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICB2aXNpdFN0YXRlbWVudChpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIHVzZShISW5zdHJ1Y3Rpb24gYXJndW1lbnQpIHsKICAgIGlmIChpc0dlbmVyYXRlQXRVc2VTaXRlKGFyZ3VtZW50KSkgewogICAgICB2aXNpdEV4cHJlc3Npb24oYXJndW1lbnQpOwogICAgfSBlbHNlIGlmIChhcmd1bWVudCBpcyBIQ2hlY2sgJiYgIXZhcmlhYmxlTmFtZXMuaGFzTmFtZShhcmd1bWVudCkpIHsKICAgICAgSENoZWNrIGNoZWNrID0gYXJndW1lbnQ7CiAgICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBjaGVja2VkIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG5hbWUuCiAgICAgIGFzc2VydCghdmFyaWFibGVOYW1lcy5oYXNOYW1lKGNoZWNrLmNoZWNrZWRJbnB1dCkpOwogICAgICB1c2UoY2hlY2suY2hlY2tlZElucHV0KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCh2YXJpYWJsZU5hbWVzLmhhc05hbWUoYXJndW1lbnQpKTsKICAgICAgcHVzaChuZXcganMuVmFyaWFibGVVc2UodmFyaWFibGVOYW1lcy5nZXROYW1lKGFyZ3VtZW50KSkpOwogICAgfQogIH0KCiAgdmlzaXQoSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdmlzaXRFeHByZXNzaW9uKEhJbnN0cnVjdGlvbiBub2RlKSB7CiAgICBib29sIG9sZElzR2VuZXJhdGluZ0V4cHJlc3Npb24gPSBpc0dlbmVyYXRpbmdFeHByZXNzaW9uOwogICAgaXNHZW5lcmF0aW5nRXhwcmVzc2lvbiA9IHRydWU7CiAgICB2aXNpdChub2RlKTsKICAgIGlzR2VuZXJhdGluZ0V4cHJlc3Npb24gPSBvbGRJc0dlbmVyYXRpbmdFeHByZXNzaW9uOwogIH0KCiAgdmlzaXRTdGF0ZW1lbnQoSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIGFzc2VydCghaXNHZW5lcmF0aW5nRXhwcmVzc2lvbik7CiAgICB2aXNpdChub2RlKTsKICAgIGlmICghZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkpIHsKICAgICAgYXNzZXJ0KGV4cHJlc3Npb25TdGFjay5sZW5ndGggPT0gMSk7CiAgICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcCgpOwogICAgICBwdXNoRXhwcmVzc2lvbkFzU3RhdGVtZW50KGV4cHJlc3Npb24sIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgdm9pZCBjb250aW51ZUFzQnJlYWsoTGFiZWxEZWZpbml0aW9uIHRhcmdldCkgewogICAgcHVzaFN0YXRlbWVudChuZXcganMuQnJlYWsoX25hbWVyLmNvbnRpbnVlTGFiZWxOYW1lKHRhcmdldCkpKTsKICB9CgogIHZvaWQgaW1wbGljaXRDb250aW51ZUFzQnJlYWsoSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIHB1c2hTdGF0ZW1lbnQobmV3IGpzLkJyZWFrKF9uYW1lci5pbXBsaWNpdENvbnRpbnVlTGFiZWxOYW1lKHRhcmdldCkpKTsKICB9CgogIHZvaWQgaW1wbGljaXRCcmVha1dpdGhMYWJlbChKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgcHVzaFN0YXRlbWVudChuZXcganMuQnJlYWsoX25hbWVyLmltcGxpY2l0QnJlYWtMYWJlbE5hbWUodGFyZ2V0KSkpOwogIH0KCiAganMuU3RhdGVtZW50IHdyYXBJbnRvTGFiZWxzKAogICAgICBqcy5TdGF0ZW1lbnQgcmVzdWx0LCBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzKSB7CiAgICBmb3IgKExhYmVsRGVmaW5pdGlvbiBsYWJlbCBpbiBsYWJlbHMpIHsKICAgICAgaWYgKGxhYmVsLmlzVGFyZ2V0KSB7CiAgICAgICAgU3RyaW5nIGJyZWFrTGFiZWxTdHJpbmcgPSBfbmFtZXIuYnJlYWtMYWJlbE5hbWUobGFiZWwpOwogICAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGJyZWFrTGFiZWxTdHJpbmcsIHJlc3VsdCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBUaGUgcmVndWxhciBbdmlzaXRJZl0gbWV0aG9kIGltcGxlbWVudHMgdGhlIG5lZWRlZCBsb2dpYy4KICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SWZJbmZvKEhJZkJsb2NrSW5mb3JtYXRpb24gaW5mbykgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTd2l0Y2hJbmZvKEhTd2l0Y2hCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIGJvb2wgaXNFeHByZXNzaW9uID0gaXNKU0V4cHJlc3Npb24oaW5mby5leHByZXNzaW9uKTsKICAgIGlmICghaXNFeHByZXNzaW9uKSB7CiAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbmZvLmV4cHJlc3Npb24pOwogICAgfQoKICAgIGlmIChpc0V4cHJlc3Npb24pIHsKICAgICAgcHVzaChnZW5lcmF0ZUV4cHJlc3Npb24oaW5mby5leHByZXNzaW9uKSk7CiAgICB9IGVsc2UgewogICAgICB1c2UoaW5mby5leHByZXNzaW9uLmNvbmRpdGlvbkV4cHJlc3Npb24pOwogICAgfQogICAganMuRXhwcmVzc2lvbiBrZXkgPSBwb3AoKTsKICAgIGJvb2wgaGFuZGxlZERlZmF1bHQgPSBmYWxzZTsKICAgIExpc3Q8anMuU3dpdGNoQ2xhdXNlPiBjYXNlcyA9IDxqcy5Td2l0Y2hDbGF1c2U+W107CiAgICBIU3dpdGNoIHN3aXRjaEluc3RydWN0aW9uID0gaW5mby5leHByZXNzaW9uLmVuZC5sYXN0OwogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IHN3aXRjaEluc3RydWN0aW9uLmlucHV0czsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IHN1Y2Nlc3NvcnMgPSBzd2l0Y2hJbnN0cnVjdGlvbi5ibG9jay5zdWNjZXNzb3JzOwoKICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICBmb3IgKGludCBpbnB1dEluZGV4ID0gMSwgc3RhdGVtZW50SW5kZXggPSAwOwogICAgICAgIGlucHV0SW5kZXggPCBpbnB1dHMubGVuZ3RoOwogICAgICAgIHN0YXRlbWVudEluZGV4KyspIHsKICAgICAgSEJhc2ljQmxvY2sgc3VjY2Vzc29yID0gc3VjY2Vzc29yc1tpbnB1dEluZGV4IC0gMV07CiAgICAgIC8vIElmIGxpdmVuZXNzIGFuYWx5c2lzIGhhcyBmaWd1cmVkIG91dCB0aGF0IHRoaXMgY2FzZSBpcyBkZWFkLAogICAgICAvLyBvbWl0IHRoZSBjb2RlIGZvciBpdC4KICAgICAgaWYgKHN1Y2Nlc3Nvci5pc0xpdmUpIHsKICAgICAgICBkbyB7CiAgICAgICAgICB2aXNpdChpbnB1dHNbaW5wdXRJbmRleF0pOwogICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgICAgY2FzZXMuYWRkKG5ldyBqcy5DYXNlKHBvcCgpLCBjdXJyZW50Q29udGFpbmVyKSk7CiAgICAgICAgICBpbnB1dEluZGV4Kys7CiAgICAgICAgfSB3aGlsZSAoKHN1Y2Nlc3NvcnNbaW5wdXRJbmRleCAtIDFdID09IHN1Y2Nlc3NvcikgJiYKICAgICAgICAgICAgKGlucHV0SW5kZXggPCBpbnB1dHMubGVuZ3RoKSk7CgogICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGxhc3Qgc3RhdGVtZW50LCB0aGVuIHRoZXNlIGNhc2VzIGFsc28gYmVsb25nIHRvIHRoZQogICAgICAgIC8vIGRlZmF1bHQgYmxvY2suCiAgICAgICAgaWYgKHN0YXRlbWVudEluZGV4ID09IGluZm8uc3RhdGVtZW50cy5sZW5ndGggLSAxKSB7CiAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgICAgICBjYXNlcy5hZGQobmV3IGpzLkRlZmF1bHQoY3VycmVudENvbnRhaW5lcikpOwogICAgICAgICAgaGFuZGxlZERlZmF1bHQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8uc3RhdGVtZW50c1tzdGF0ZW1lbnRJbmRleF0pOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFNraXAgYWxsIHRoZSBjYXNlIHN0YXRlbWVudHMgdGhhdCBiZWxvbmcgdG8gdGhpcwogICAgICAgIC8vIGJsb2NrLgogICAgICAgIHdoaWxlICgoc3VjY2Vzc29yc1tpbnB1dEluZGV4IC0gMV0gPT0gc3VjY2Vzc29yKSAmJgogICAgICAgICAgICAoaW5wdXRJbmRleCA8IGlucHV0cy5sZW5ndGgpKSB7CiAgICAgICAgICArK2lucHV0SW5kZXg7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gSWYgdGhlIGRlZmF1bHQgY2FzZSBpcyBkZWFkLCB3ZSBvbWl0IGl0LiBMaWtld2lzZSwgaWYgaXQgaXMgYW4KICAgIC8vIGVtcHR5IGJsb2NrLCB3ZSBvbWl0IGl0LCB0b28uCiAgICBpZiAoaW5mby5zdGF0ZW1lbnRzLmxhc3Quc3RhcnQuaXNMaXZlICYmICFoYW5kbGVkRGVmYXVsdCkgewogICAgICBjdXJyZW50Q29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbmZvLnN0YXRlbWVudHMubGFzdCk7CiAgICAgIGlmIChjdXJyZW50Q29udGFpbmVyLnN0YXRlbWVudHMuaXNOb3RFbXB0eSkgewogICAgICAgIGNhc2VzLmFkZChuZXcganMuRGVmYXVsdChjdXJyZW50Q29udGFpbmVyKSk7CiAgICAgIH0KICAgIH0KCiAgICBjdXJyZW50Q29udGFpbmVyID0gb2xkQ29udGFpbmVyOwoKICAgIGpzLlN0YXRlbWVudCByZXN1bHQgPQogICAgICAgIG5ldyBqcy5Td2l0Y2goa2V5LCBjYXNlcykud2l0aFNvdXJjZUluZm9ybWF0aW9uKGluZm8uc291cmNlSW5mb3JtYXRpb24pOwogICAgcHVzaFN0YXRlbWVudCh3cmFwSW50b0xhYmVscyhyZXN1bHQsIGluZm8ubGFiZWxzKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTZXF1ZW5jZUluZm8oSFN0YXRlbWVudFNlcXVlbmNlSW5mb3JtYXRpb24gaW5mbykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFN1YkdyYXBoSW5mbyhIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIHZpc2l0U3ViR3JhcGgoaW5mby5zdWJHcmFwaCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTdWJFeHByZXNzaW9uSW5mbyhIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEFuZE9ySW5mbyhIQW5kT3JCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUcnlJbmZvKEhUcnlCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIGpzLkJsb2NrIGJvZHkgPSBnZW5lcmF0ZVN0YXRlbWVudHNJbk5ld0Jsb2NrKGluZm8uYm9keSk7CiAgICBqcy5DYXRjaCBjYXRjaFBhcnQgPSBudWxsOwogICAganMuQmxvY2sgZmluYWxseVBhcnQgPSBudWxsOwogICAgaWYgKGluZm8uY2F0Y2hCbG9jayAhPSBudWxsKSB7CiAgICAgIHZvaWQgcmVnaXN0ZXIoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50KSB7CiAgICAgICAgaWYgKGNsYXNzRWxlbWVudCAhPSBudWxsKSB7CiAgICAgICAgICBfcmVnaXN0cnkKICAgICAgICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgICAgICAgLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoY2xhc3NFbGVtZW50KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJlZ2lzdGVyKF9jb21tb25FbGVtZW50cy5qc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzKTsKICAgICAgcmVnaXN0ZXIoX2NvbW1vbkVsZW1lbnRzLmpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzcyk7CgogICAgICBITG9jYWxWYWx1ZSBleGNlcHRpb24gPSBpbmZvLmNhdGNoVmFyaWFibGU7CiAgICAgIFN0cmluZyBuYW1lID0gdmFyaWFibGVOYW1lcy5nZXROYW1lKGV4Y2VwdGlvbik7CiAgICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbCA9IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKG5hbWUpOwogICAgICBqcy5CbG9jayBjYXRjaEJsb2NrID0gZ2VuZXJhdGVTdGF0ZW1lbnRzSW5OZXdCbG9jayhpbmZvLmNhdGNoQmxvY2spOwogICAgICBjYXRjaFBhcnQgPSBuZXcganMuQ2F0Y2goZGVjbCwgY2F0Y2hCbG9jayk7CiAgICB9CiAgICBpZiAoaW5mby5maW5hbGx5QmxvY2sgIT0gbnVsbCkgewogICAgICBmaW5hbGx5UGFydCA9IGdlbmVyYXRlU3RhdGVtZW50c0luTmV3QmxvY2soaW5mby5maW5hbGx5QmxvY2spOwogICAgfQogICAgcHVzaFN0YXRlbWVudChuZXcganMuVHJ5KGJvZHksIGNhdGNoUGFydCwgZmluYWxseVBhcnQpKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCB2aXNpdEJvZHlJZ25vcmVMYWJlbHMoSExvb3BCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChpbmZvLmJvZHkuc3RhcnQuaXNMYWJlbGVkQmxvY2soKSkgewogICAgICBIQmxvY2tJbmZvcm1hdGlvbiBvbGRJbmZvID0gY3VycmVudEJsb2NrSW5mb3JtYXRpb247CiAgICAgIGN1cnJlbnRCbG9ja0luZm9ybWF0aW9uID0gaW5mby5ib2R5LnN0YXJ0LmJsb2NrRmxvdy5ib2R5OwogICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby5ib2R5KTsKICAgICAgY3VycmVudEJsb2NrSW5mb3JtYXRpb24gPSBvbGRJbmZvOwogICAgfSBlbHNlIHsKICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8uYm9keSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TG9vcEluZm8oSExvb3BCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gY29uZGl0aW9uID0gaW5mby5jb25kaXRpb247CiAgICBib29sIGlzQ29uZGl0aW9uRXhwcmVzc2lvbiA9IGlzSlNDb25kaXRpb24oY29uZGl0aW9uKTsKCiAgICBqcy5Mb29wIGxvb3A7CgogICAgc3dpdGNoIChpbmZvLmtpbmQpIHsKICAgICAgLy8gVHJlYXQgYWxsIHRocmVlICJ0ZXN0LWZpcnN0IiBsb29wcyB0aGUgc2FtZSB3YXkuCiAgICAgIGNhc2UgSExvb3BCbG9ja0luZm9ybWF0aW9uLkZPUl9MT09QOgogICAgICBjYXNlIEhMb29wQmxvY2tJbmZvcm1hdGlvbi5XSElMRV9MT09QOgogICAgICBjYXNlIEhMb29wQmxvY2tJbmZvcm1hdGlvbi5GT1JfSU5fTE9PUDoKICAgICAgY2FzZSBITG9vcEJsb2NrSW5mb3JtYXRpb24uU1dJVENIX0NPTlRJTlVFX0xPT1A6CiAgICAgICAgSEJsb2NrSW5mb3JtYXRpb24gaW5pdGlhbGl6YXRpb24gPSBpbmZvLmluaXRpYWxpemVyOwogICAgICAgIGludCBpbml0aWFsaXphdGlvblR5cGUgPSBUWVBFX1NUQVRFTUVOVDsKICAgICAgICBpZiAoaW5pdGlhbGl6YXRpb24gIT0gbnVsbCkgewogICAgICAgICAgaW5pdGlhbGl6YXRpb25UeXBlID0gZXhwcmVzc2lvblR5cGUoaW5pdGlhbGl6YXRpb24pOwogICAgICAgICAgaWYgKGluaXRpYWxpemF0aW9uVHlwZSA9PSBUWVBFX1NUQVRFTUVOVCkgewogICAgICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5pdGlhbGl6YXRpb24pOwogICAgICAgICAgICBpbml0aWFsaXphdGlvbiA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBXZSBpbnNlcnRlZCBhIGJhc2ljIGJsb2NrIHRvIGF2b2lkIGNyaXRpY2FsIGVkZ2VzLiBUaGlzIGJsb2NrIGlzCiAgICAgICAgLy8gcGFydCBvZiB0aGUgTG9vcEJsb2NrSW5mb3JtYXRpb24gYW5kIG11c3QgdGhlcmVmb3JlIGJlIGhhbmRsZWQgaGVyZS4KICAgICAgICBqcy5CbG9jayBvbGRDb250YWluZXIgPSBjdXJyZW50Q29udGFpbmVyOwogICAgICAgIGpzLkJsb2NrIGF2b2lkQ29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgICAgY3VycmVudENvbnRhaW5lciA9IGF2b2lkQ29udGFpbmVyOwogICAgICAgIGFzc2lnblBoaXNPZlN1Y2Nlc3NvcnMoY29uZGl0aW9uLmVuZC5zdWNjZXNzb3JzLmxhc3QpOwogICAgICAgIGJvb2wgaGFzUGhpVXBkYXRlcyA9ICFhdm9pZENvbnRhaW5lci5zdGF0ZW1lbnRzLmlzRW1wdHk7CiAgICAgICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKCiAgICAgICAgaWYgKGlzQ29uZGl0aW9uRXhwcmVzc2lvbiAmJgogICAgICAgICAgICAhaGFzUGhpVXBkYXRlcyAmJgogICAgICAgICAgICBpbmZvLnVwZGF0ZXMgIT0gbnVsbCAmJgogICAgICAgICAgICBpc0pTRXhwcmVzc2lvbihpbmZvLnVwZGF0ZXMpKSB7CiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIHVwZGF0ZXMgZ3JhcGgsIGFuZCBpdCdzIGV4cHJlc3NpYmxlIGFzIGFuCiAgICAgICAgICAvLyBleHByZXNzaW9uLCBnZW5lcmF0ZSBhIGZvci1sb29wLgogICAgICAgICAganMuRXhwcmVzc2lvbiBqc0luaXRpYWxpemF0aW9uID0gbnVsbDsKICAgICAgICAgIGlmIChpbml0aWFsaXphdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgIGludCBkZWxheWVkVmFyaWFibGVzQ291bnQgPSBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5sZW5ndGg7CiAgICAgICAgICAgIGpzSW5pdGlhbGl6YXRpb24gPSBnZW5lcmF0ZUV4cHJlc3Npb24oaW5pdGlhbGl6YXRpb24pOwogICAgICAgICAgICBpZiAoIXNob3VsZEdyb3VwVmFyRGVjbGFyYXRpb25zICYmCiAgICAgICAgICAgICAgICBkZWxheWVkVmFyaWFibGVzQ291bnQgPCBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5sZW5ndGgpIHsKICAgICAgICAgICAgICAvLyBXZSBqdXN0IGFkZGVkIGEgbmV3IGRlbGF5ZWQgdmFyaWFibGUtZGVjbGFyYXRpb24uIFNlZSBpZiB3ZSBjYW4KICAgICAgICAgICAgICAvLyBwdXQgaW4gYSAndmFyJyBpbiBmcm9udCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gdG8gbWFrZSBpdCBnbwogICAgICAgICAgICAgIC8vIGF3YXkuIFdlIHdhbGsgdGhlICd0cmVlJyBvZiBjb21tYS1vcGVyYXRvcnMgdG8gZmluZCB0aGUKICAgICAgICAgICAgICAvLyBleHByZXNzaW9ucyBhbmQgc2VlIGlmIHRoZXkgYXJlIGFsbCBhc3NpZ25tZW50cyB0aGF0IGNhbiBiZQogICAgICAgICAgICAgIC8vIGNvbnZlcnRlZCBpbnRvIGRlY2xhcmF0aW9ucy4KCiAgICAgICAgICAgICAgTGlzdDxqcy5Bc3NpZ25tZW50PiBhc3NpZ25tZW50czsKCiAgICAgICAgICAgICAgYm9vbCBhbGxTaW1wbGVBc3NpZ25tZW50cyhqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uIGlzIGpzLkFzc2lnbm1lbnQpIHsKICAgICAgICAgICAgICAgICAganMuQXNzaWdubWVudCBhc3NpZ25tZW50ID0gZXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnbm1lbnQubGVmdEhhbmRTaWRlIGlzIGpzLlZhcmlhYmxlVXNlICYmCiAgICAgICAgICAgICAgICAgICAgICAhYXNzaWdubWVudC5pc0NvbXBvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnbm1lbnRzID09IG51bGwpIGFzc2lnbm1lbnRzID0gPGpzLkFzc2lnbm1lbnQ+W107CiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHMuYWRkKGV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uaXNDb21tYU9wZXJhdG9yKSB7CiAgICAgICAgICAgICAgICAgIGpzLkJpbmFyeSBiaW5hcnkgPSBleHByZXNzaW9uOwogICAgICAgICAgICAgICAgICByZXR1cm4gYWxsU2ltcGxlQXNzaWdubWVudHMoYmluYXJ5LmxlZnQpICYmCiAgICAgICAgICAgICAgICAgICAgICBhbGxTaW1wbGVBc3NpZ25tZW50cyhiaW5hcnkucmlnaHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKGFsbFNpbXBsZUFzc2lnbm1lbnRzKGpzSW5pdGlhbGl6YXRpb24pKSB7CiAgICAgICAgICAgICAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IGluaXRzID0KICAgICAgICAgICAgICAgICAgICA8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj5bXTsKICAgICAgICAgICAgICAgIGZvciAoanMuQXNzaWdubWVudCBhc3NpZ25tZW50IGluIGFzc2lnbm1lbnRzKSB7CiAgICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IChhc3NpZ25tZW50LmxlZnRIYW5kU2lkZSBhcyBqcy5WYXJpYWJsZVVzZSkubmFtZTsKICAgICAgICAgICAgICAgICAganMuTm9kZSBkZWNsYXJhdGlvbiA9IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKGlkKTsKICAgICAgICAgICAgICAgICAgaW5pdHMuYWRkKG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24sIGFzc2lnbm1lbnQudmFsdWUpKTsKICAgICAgICAgICAgICAgICAgY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMucmVtb3ZlKGlkKTsKICAgICAgICAgICAgICAgICAgZGVjbGFyZWRMb2NhbHMuYWRkKGlkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGpzSW5pdGlhbGl6YXRpb24gPSBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoaW5pdHMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAganMuRXhwcmVzc2lvbiBqc0NvbmRpdGlvbiA9IGdlbmVyYXRlRXhwcmVzc2lvbihjb25kaXRpb24pOwogICAgICAgICAganMuRXhwcmVzc2lvbiBqc1VwZGF0ZXMgPSBnZW5lcmF0ZUV4cHJlc3Npb24oaW5mby51cGRhdGVzKTsKICAgICAgICAgIC8vIFRoZSBib2R5IG1pZ2h0IGJlIGxhYmVsZWQuIElnbm9yZSB0aGlzIHdoZW4gcmVjdXJzaW5nIG9uIHRoZQogICAgICAgICAgLy8gc3ViZ3JhcGguCiAgICAgICAgICAvLyBUT0RPKGxybik6IFJlbW92ZSB0aGlzIGV4dHJhIGxhYmVsaW5nIHdoZW4gaGFuZGxpbmcgYWxsIGxvb3BzCiAgICAgICAgICAvLyB1c2luZyBzdWJncmFwaHMuCiAgICAgICAgICBvbGRDb250YWluZXIgPSBjdXJyZW50Q29udGFpbmVyOwogICAgICAgICAganMuU3RhdGVtZW50IGJvZHkgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgICAgICAgdmlzaXRCb2R5SWdub3JlTGFiZWxzKGluZm8pOwogICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKICAgICAgICAgIGJvZHkgPSB1bndyYXBTdGF0ZW1lbnQoYm9keSk7CiAgICAgICAgICBsb29wID0gbmV3IGpzLkZvcihqc0luaXRpYWxpemF0aW9uLCBqc0NvbmRpdGlvbiwganNVcGRhdGVzLCBib2R5KQogICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFdlIGhhdmUgZWl0aGVyIG5vIHVwZGF0ZSBncmFwaCwgb3IgaXQncyB0b28gY29tcGxleCB0bwogICAgICAgICAgLy8gcHV0IGluIGFuIGV4cHJlc3Npb24uCiAgICAgICAgICBpZiAoaW5pdGlhbGl6YXRpb24gIT0gbnVsbCkgewogICAgICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5pdGlhbGl6YXRpb24pOwogICAgICAgICAgfQogICAgICAgICAganMuRXhwcmVzc2lvbiBqc0NvbmRpdGlvbjsKICAgICAgICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgICAgICBqcy5TdGF0ZW1lbnQgYm9keSA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgICAgaWYgKGlzQ29uZGl0aW9uRXhwcmVzc2lvbiAmJiAhaGFzUGhpVXBkYXRlcykgewogICAgICAgICAgICBqc0NvbmRpdGlvbiA9IGdlbmVyYXRlRXhwcmVzc2lvbihjb25kaXRpb24pOwogICAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gYm9keTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGpzQ29uZGl0aW9uID0gbmV3TGl0ZXJhbEJvb2wodHJ1ZSwgaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoY29uZGl0aW9uKTsKICAgICAgICAgICAgdXNlKGNvbmRpdGlvbi5jb25kaXRpb25FeHByZXNzaW9uKTsKICAgICAgICAgICAganMuRXhwcmVzc2lvbiBpZlRlc3QgPSBuZXcganMuUHJlZml4KCIhIiwgcG9wKCkpOwogICAgICAgICAgICBqcy5TdGF0ZW1lbnQganNCcmVhayA9IG5ldyBqcy5CcmVhayhudWxsKTsKICAgICAgICAgICAganMuU3RhdGVtZW50IGV4aXRMb29wOwogICAgICAgICAgICBpZiAoYXZvaWRDb250YWluZXIuc3RhdGVtZW50cy5pc0VtcHR5KSB7CiAgICAgICAgICAgICAgZXhpdExvb3AgPSBqc0JyZWFrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGF2b2lkQ29udGFpbmVyLnN0YXRlbWVudHMuYWRkKGpzQnJlYWspOwogICAgICAgICAgICAgIGV4aXRMb29wID0gYXZvaWRDb250YWluZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHVzaFN0YXRlbWVudChuZXcganMuSWYubm9FbHNlKGlmVGVzdCwgZXhpdExvb3ApKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpbmZvLnVwZGF0ZXMgIT0gbnVsbCkgewogICAgICAgICAgICB3cmFwTG9vcEJvZHlGb3JDb250aW51ZShpbmZvKTsKICAgICAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8udXBkYXRlcyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2aXNpdEJvZHlJZ25vcmVMYWJlbHMoaW5mbyk7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gb2xkQ29udGFpbmVyOwogICAgICAgICAgYm9keSA9IHVud3JhcFN0YXRlbWVudChib2R5KTsKICAgICAgICAgIGxvb3AgPSBuZXcganMuV2hpbGUoanNDb25kaXRpb24sIGJvZHkpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihpbmZvLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSExvb3BCbG9ja0luZm9ybWF0aW9uLkRPX1dISUxFX0xPT1A6CiAgICAgICAgaWYgKGluZm8uaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8uaW5pdGlhbGl6ZXIpOwogICAgICAgIH0KICAgICAgICAvLyBXZSBpbnNlcnRlZCBhIGJhc2ljIGJsb2NrIHRvIGF2b2lkIGNyaXRpY2FsIGVkZ2VzLiBUaGlzIGJsb2NrIGlzCiAgICAgICAgLy8gcGFydCBvZiB0aGUgTG9vcEJsb2NrSW5mb3JtYXRpb24gYW5kIG11c3QgdGhlcmVmb3JlIGJlIGhhbmRsZWQgaGVyZS4KICAgICAgICBqcy5CbG9jayBvbGRDb250YWluZXIgPSBjdXJyZW50Q29udGFpbmVyOwogICAgICAgIGpzLkJsb2NrIGV4aXRBdm9pZENvbnRhaW5lciA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBleGl0QXZvaWRDb250YWluZXI7CiAgICAgICAgYXNzaWduUGhpc09mU3VjY2Vzc29ycyhjb25kaXRpb24uZW5kLnN1Y2Nlc3NvcnMubGFzdCk7CiAgICAgICAgYm9vbCBoYXNFeGl0UGhpVXBkYXRlcyA9ICFleGl0QXZvaWRDb250YWluZXIuc3RhdGVtZW50cy5pc0VtcHR5OwogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CgogICAgICAgIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgICAganMuQmxvY2sgYm9keSA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgIC8vIElmIHRoZXJlIGFyZSBwaGkgY29waWVzIGluIHRoZSBibG9jayB0aGF0IGp1bXBzIHRvIHRoZQogICAgICAgIC8vIGxvb3AgZW50cnksIHdlIG11c3QgZW1pdCB0aGUgY29uZGl0aW9uIGxpa2UgdGhpczoKICAgICAgICAvLyBkbyB7CiAgICAgICAgLy8gICBib2R5OwogICAgICAgIC8vICAgaWYgKGNvbmRpdGlvbikgewogICAgICAgIC8vICAgICBwaGkgdXBkYXRlczsKICAgICAgICAvLyAgICAgY29udGludWU7CiAgICAgICAgLy8gICB9IGVsc2UgewogICAgICAgIC8vICAgICBicmVhazsKICAgICAgICAvLyAgIH0KICAgICAgICAvLyB9IHdoaWxlICh0cnVlKTsKICAgICAgICBIQmFzaWNCbG9jayBhdm9pZEVkZ2UgPSBpbmZvLmVuZC5zdWNjZXNzb3JzWzBdOwogICAgICAgIGpzLkJsb2NrIHVwZGF0ZUJvZHkgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gdXBkYXRlQm9keTsKICAgICAgICBhc3NpZ25QaGlzT2ZTdWNjZXNzb3JzKGF2b2lkRWRnZSk7CiAgICAgICAgYm9vbCBoYXNQaGlVcGRhdGVzID0gIXVwZGF0ZUJvZHkuc3RhdGVtZW50cy5pc0VtcHR5OwogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgICAgIHZpc2l0Qm9keUlnbm9yZUxhYmVscyhpbmZvKTsKICAgICAgICBpZiAoaW5mby51cGRhdGVzICE9IG51bGwpIHsKICAgICAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbmZvLnVwZGF0ZXMpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNDb25kaXRpb25FeHByZXNzaW9uKSB7CiAgICAgICAgICBwdXNoKGdlbmVyYXRlRXhwcmVzc2lvbihjb25kaXRpb24pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGNvbmRpdGlvbik7CiAgICAgICAgICB1c2UoY29uZGl0aW9uLmNvbmRpdGlvbkV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgICBqcy5FeHByZXNzaW9uIGpzQ29uZGl0aW9uID0gcG9wKCk7CiAgICAgICAgaWYgKGpzQ29uZGl0aW9uID09IG51bGwpIHsKICAgICAgICAgIC8vIElmIHRoZSBjb25kaXRpb24gaXMgZGVhZCBjb2RlLCB3ZSB0dXJuIHRoZSBkby13aGlsZSBpbnRvCiAgICAgICAgICAvLyBhIHNpbXBsZXIgd2hpbGUgYmVjYXVzZSB3ZSB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25kaXRpb24KICAgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYW55d2F5LgogICAgICAgICAgbG9vcCA9IG5ldyBqcy5XaGlsZShuZXdMaXRlcmFsQm9vbCh0cnVlLCBpbmZvLnNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICAgICAgICAgICAgdW53cmFwU3RhdGVtZW50KGJvZHkpKQogICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChoYXNQaGlVcGRhdGVzIHx8IGhhc0V4aXRQaGlVcGRhdGVzKSB7CiAgICAgICAgICAgIHVwZGF0ZUJvZHkuc3RhdGVtZW50cy5hZGQobmV3IGpzLkNvbnRpbnVlKG51bGwpKTsKICAgICAgICAgICAganMuU3RhdGVtZW50IGpzQnJlYWsgPSBuZXcganMuQnJlYWsobnVsbCk7CiAgICAgICAgICAgIGpzLlN0YXRlbWVudCBleGl0TG9vcDsKICAgICAgICAgICAgaWYgKGV4aXRBdm9pZENvbnRhaW5lci5zdGF0ZW1lbnRzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICBleGl0TG9vcCA9IGpzQnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZXhpdEF2b2lkQ29udGFpbmVyLnN0YXRlbWVudHMuYWRkKGpzQnJlYWspOwogICAgICAgICAgICAgIGV4aXRMb29wID0gZXhpdEF2b2lkQ29udGFpbmVyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJvZHkuc3RhdGVtZW50cy5hZGQobmV3IGpzLklmKGpzQ29uZGl0aW9uLCB1cGRhdGVCb2R5LCBleGl0TG9vcCkpOwogICAgICAgICAgICBqc0NvbmRpdGlvbiA9IG5ld0xpdGVyYWxCb29sKHRydWUsIGluZm8uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgfQogICAgICAgICAgbG9vcCA9IG5ldyBqcy5Ebyh1bndyYXBTdGF0ZW1lbnQoYm9keSksIGpzQ29uZGl0aW9uKQogICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgfQogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgZmFpbGVkQXQoY29uZGl0aW9uLmNvbmRpdGlvbkV4cHJlc3Npb24sCiAgICAgICAgICAgICdVbmV4cGVjdGVkIGxvb3Aga2luZDogJHtpbmZvLmtpbmR9LicpOwogICAgfQogICAganMuU3RhdGVtZW50IHJlc3VsdCA9IGxvb3A7CiAgICBpZiAoaW5mby5raW5kID09IEhMb29wQmxvY2tJbmZvcm1hdGlvbi5TV0lUQ0hfQ09OVElOVUVfTE9PUCkgewogICAgICBTdHJpbmcgY29udGludWVMYWJlbFN0cmluZyA9CiAgICAgICAgICBfbmFtZXIuaW1wbGljaXRDb250aW51ZUxhYmVsTmFtZShpbmZvLnRhcmdldCk7CiAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGNvbnRpbnVlTGFiZWxTdHJpbmcsIHJlc3VsdCk7CiAgICB9CiAgICBwdXNoU3RhdGVtZW50KHdyYXBJbnRvTGFiZWxzKHJlc3VsdCwgaW5mby5sYWJlbHMpKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExhYmVsZWRCbG9ja0luZm8oSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uIGxhYmVsZWRCbG9ja0luZm8pIHsKICAgIExpbms8RW50aXR5PiBjb250aW51ZU92ZXJyaWRlcyA9IGNvbnN0IExpbms8RW50aXR5PigpOwoKICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICBqcy5CbG9jayBib2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICBqcy5TdGF0ZW1lbnQgcmVzdWx0ID0gYm9keTsKCiAgICBjdXJyZW50Q29udGFpbmVyID0gYm9keTsKCiAgICAvLyBJZiBbbGFiZWxlZEJsb2NrSW5mby5pc0NvbnRpbnVlXSwgdGhlIGJsb2NrIGlzIGFuIGFydGlmaWNpYWwKICAgIC8vIGJsb2NrIGFyb3VuZCB0aGUgYm9keSBvZiBhIGxvb3Agd2l0aCBhbiB1cGRhdGUgYmxvY2ssIHNvIHRoYXQKICAgIC8vIGNvbnRpbnVlcyBvZiB0aGUgbG9vcCBjYW4gYmUgd3JpdHRlbiBhcyBicmVha3Mgb2YgdGhlIGJvZHkKICAgIC8vIGJsb2NrLgogICAgaWYgKGxhYmVsZWRCbG9ja0luZm8uaXNDb250aW51ZSkgewogICAgICBmb3IgKExhYmVsRGVmaW5pdGlvbiBsYWJlbCBpbiBsYWJlbGVkQmxvY2tJbmZvLmxhYmVscykgewogICAgICAgIGlmIChsYWJlbC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgICAgICBTdHJpbmcgbGFiZWxOYW1lID0gX25hbWVyLmNvbnRpbnVlTGFiZWxOYW1lKGxhYmVsKTsKICAgICAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGxhYmVsTmFtZSwgcmVzdWx0KTsKICAgICAgICAgIGNvbnRpbnVlQWN0aW9uLmFkZChsYWJlbCk7CiAgICAgICAgICBjb250aW51ZU92ZXJyaWRlcyA9IGNvbnRpbnVlT3ZlcnJpZGVzLnByZXBlbmQobGFiZWwpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBGb3IgaGFuZGxpbmcgdW5sYWJlbGVkIGNvbnRpbnVlcyBmcm9tIHRoZSBib2R5IG9mIGEgbG9vcC4KICAgICAgLy8gVE9ETyhscm4pOiBDb25zaWRlciByZWNvcmRpbmcgd2hldGhlciB0aGUgdGFyZ2V0IGlzIGluIGZhY3QKICAgICAgLy8gYSB0YXJnZXQgb2YgYW4gdW5sYWJlbGVkIGNvbnRpbnVlLCBhbmQgbm90IGdlbmVyYXRlIHRoaXMgaWYgaXQgaXNuJ3QuCiAgICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gbGFiZWxlZEJsb2NrSW5mby50YXJnZXQ7CiAgICAgIFN0cmluZyBsYWJlbE5hbWUgPSBfbmFtZXIuaW1wbGljaXRDb250aW51ZUxhYmVsTmFtZSh0YXJnZXQpOwogICAgICByZXN1bHQgPSBuZXcganMuTGFiZWxlZFN0YXRlbWVudChsYWJlbE5hbWUsIHJlc3VsdCk7CiAgICAgIGltcGxpY2l0Q29udGludWVBY3Rpb24uYWRkKHRhcmdldCk7CiAgICAgIGNvbnRpbnVlT3ZlcnJpZGVzID0gY29udGludWVPdmVycmlkZXMucHJlcGVuZCh0YXJnZXQpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChMYWJlbERlZmluaXRpb24gbGFiZWwgaW4gbGFiZWxlZEJsb2NrSW5mby5sYWJlbHMpIHsKICAgICAgICBpZiAobGFiZWwuaXNCcmVha1RhcmdldCkgewogICAgICAgICAgU3RyaW5nIGxhYmVsTmFtZSA9IF9uYW1lci5icmVha0xhYmVsTmFtZShsYWJlbCk7CiAgICAgICAgICByZXN1bHQgPSBuZXcganMuTGFiZWxlZFN0YXRlbWVudChsYWJlbE5hbWUsIHJlc3VsdCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IGxhYmVsZWRCbG9ja0luZm8udGFyZ2V0OwogICAgaWYgKHRhcmdldC5pc1N3aXRjaCkgewogICAgICAvLyBUaGlzIGlzIGFuIGV4dHJhIGJsb2NrIGFyb3VuZCBhIHN3aXRjaCB0aGF0IGlzIGdlbmVyYXRlZAogICAgICAvLyBhcyBhIG5lc3RlZCBpZi9lbHNlIGNoYWluLiBXZSBhZGQgYW4gZXh0cmEgYnJlYWsgdGFyZ2V0CiAgICAgIC8vIHNvIHRoYXQgY2FzZSBjb2RlIGNhbiBicmVhay4KICAgICAgU3RyaW5nIGxhYmVsTmFtZSA9IF9uYW1lci5pbXBsaWNpdEJyZWFrTGFiZWxOYW1lKHRhcmdldCk7CiAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGxhYmVsTmFtZSwgcmVzdWx0KTsKICAgICAgYnJlYWtBY3Rpb24uYWRkKHRhcmdldCk7CiAgICB9CgogICAgY3VycmVudENvbnRhaW5lciA9IGJvZHk7CiAgICBnZW5lcmF0ZVN0YXRlbWVudHMobGFiZWxlZEJsb2NrSW5mby5ib2R5KTsKCiAgICBpZiAobGFiZWxlZEJsb2NrSW5mby5pc0NvbnRpbnVlKSB7CiAgICAgIHdoaWxlICghY29udGludWVPdmVycmlkZXMuaXNFbXB0eSkgewogICAgICAgIGNvbnRpbnVlQWN0aW9uLnJlbW92ZShjb250aW51ZU92ZXJyaWRlcy5oZWFkKTsKICAgICAgICBpbXBsaWNpdENvbnRpbnVlQWN0aW9uLnJlbW92ZShjb250aW51ZU92ZXJyaWRlcy5oZWFkKTsKICAgICAgICBjb250aW51ZU92ZXJyaWRlcyA9IGNvbnRpbnVlT3ZlcnJpZGVzLnRhaWw7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJyZWFrQWN0aW9uLnJlbW92ZShsYWJlbGVkQmxvY2tJbmZvLnRhcmdldCk7CiAgICB9CgogICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKICAgIHB1c2hTdGF0ZW1lbnQocmVzdWx0KTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gV3JhcHMgYSBsb29wIGJvZHkgaW4gYSBibG9jayB0byBtYWtlIGNvbnRpbnVlcyBoYXZlIGEgdGFyZ2V0IHRvIGJyZWFrCiAgLy8gdG8gKGlmIG5lY2Vzc2FyeSkuCiAgdm9pZCB3cmFwTG9vcEJvZHlGb3JDb250aW51ZShITG9vcEJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBpbmZvLnRhcmdldDsKICAgIGlmICh0YXJnZXQgIT0gbnVsbCAmJiB0YXJnZXQuaXNDb250aW51ZVRhcmdldCkgewogICAgICBqcy5CbG9jayBvbGRDb250YWluZXIgPSBjdXJyZW50Q29udGFpbmVyOwogICAgICBqcy5CbG9jayBib2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgICBqcy5TdGF0ZW1lbnQgcmVzdWx0ID0gYm9keTsKICAgICAgZm9yIChMYWJlbERlZmluaXRpb24gbGFiZWwgaW4gaW5mby5sYWJlbHMpIHsKICAgICAgICBpZiAobGFiZWwuaXNDb250aW51ZVRhcmdldCkgewogICAgICAgICAgU3RyaW5nIGxhYmVsTmFtZSA9IF9uYW1lci5jb250aW51ZUxhYmVsTmFtZShsYWJlbCk7CiAgICAgICAgICByZXN1bHQgPSBuZXcganMuTGFiZWxlZFN0YXRlbWVudChsYWJlbE5hbWUsIHJlc3VsdCk7CiAgICAgICAgICBjb250aW51ZUFjdGlvbi5hZGQobGFiZWwpOwogICAgICAgIH0KICAgICAgfQogICAgICBTdHJpbmcgbGFiZWxOYW1lID0gX25hbWVyLmltcGxpY2l0Q29udGludWVMYWJlbE5hbWUodGFyZ2V0KTsKICAgICAgcmVzdWx0ID0gbmV3IGpzLkxhYmVsZWRTdGF0ZW1lbnQobGFiZWxOYW1lLCByZXN1bHQpOwogICAgICBpbXBsaWNpdENvbnRpbnVlQWN0aW9uLmFkZChpbmZvLnRhcmdldCk7CiAgICAgIHZpc2l0Qm9keUlnbm9yZUxhYmVscyhpbmZvKTsKICAgICAgaW1wbGljaXRDb250aW51ZUFjdGlvbi5yZW1vdmUoaW5mby50YXJnZXQpOwogICAgICBmb3IgKExhYmVsRGVmaW5pdGlvbiBsYWJlbCBpbiBpbmZvLmxhYmVscykgewogICAgICAgIGlmIChsYWJlbC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgICAgICBjb250aW51ZUFjdGlvbi5yZW1vdmUobGFiZWwpOwogICAgICAgIH0KICAgICAgfQogICAgICBjdXJyZW50Q29udGFpbmVyID0gb2xkQ29udGFpbmVyOwogICAgICBwdXNoU3RhdGVtZW50KHJlc3VsdCk7CiAgICB9IGVsc2UgewogICAgICAvLyBMb29wIGJvZHkgY29udGFpbnMgbm8gY29udGludWVzLCBzbyB3ZSBkb24ndCBuZWVkIGEgYnJlYWsgdGFyZ2V0LgogICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby5ib2R5KTsKICAgIH0KICB9CgogIGJvb2wgaGFuZGxlQmxvY2tGbG93KEhCbG9ja0Zsb3cgYmxvY2spIHsKICAgIEhCbG9ja0luZm9ybWF0aW9uIGluZm8gPSBibG9jay5ib2R5OwogICAgLy8gSWYgd2UgcmVhY2ggaGVyZSBhZ2FpbiB3aGlsZSBoYW5kbGluZyB0aGUgYXR0YWNoZWQgaW5mb3JtYXRpb24sCiAgICAvLyBlLmcuLCBiZWNhdXNlIHdlIGNhbGwgdmlzaXRTdWJHcmFwaCBvbiBhIHN1YmdyYXBoIHN0YXJ0aW5nIG9uCiAgICAvLyB0aGUgc2FtZSBibG9jaywgZG9uJ3QgaGFuZGxlIGl0IGFnYWluLgogICAgLy8gV2hlbiB0aGUgc3RydWN0dXJlIGdyYXBoIGlzIGNvbXBsZXRlLCB3ZSB3aWxsIGJlIGFibGUgdG8gaGF2ZQogICAgLy8gZGlmZmVyZW50IHN0cnVjdHVyZXMgc3RhcnRpbmcgb24gdGhlIHNhbWUgYmFzaWMgYmxvY2sgKGUuZy4sIGFuCiAgICAvLyAiaWYiIGFuZCBpdHMgY29uZGl0aW9uKS4KICAgIGlmIChpZGVudGljYWwoaW5mbywgY3VycmVudEJsb2NrSW5mb3JtYXRpb24pKSByZXR1cm4gZmFsc2U7CgogICAgSEJsb2NrSW5mb3JtYXRpb24gb2xkQmxvY2tJbmZvcm1hdGlvbiA9IGN1cnJlbnRCbG9ja0luZm9ybWF0aW9uOwogICAgY3VycmVudEJsb2NrSW5mb3JtYXRpb24gPSBpbmZvOwogICAgYm9vbCBzdWNjZXNzID0gaW5mby5hY2NlcHQodGhpcyk7CiAgICBjdXJyZW50QmxvY2tJbmZvcm1hdGlvbiA9IG9sZEJsb2NrSW5mb3JtYXRpb247CgogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgSEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gYmxvY2suY29udGludWF0aW9uOwogICAgICBpZiAoY29udGludWF0aW9uICE9IG51bGwpIHsKICAgICAgICBjb250aW51ZVN1YkdyYXBoKGNvbnRpbnVhdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdWNjZXNzOwogIH0KCiAgdm9pZCBlbnRlclN1YkdyYXBoKEhCYXNpY0Jsb2NrIG5vZGUpIHsKICAgIGFzc2VydChibG9ja1F1ZXVlLmlzRW1wdHkpOwogICAgYXNzZXJ0KG5vZGUgIT0gbnVsbCk7CiAgICBjb250aW51ZVN1YkdyYXBoKG5vZGUpOwogICAgd2hpbGUgKGJsb2NrUXVldWUuaXNOb3RFbXB0eSkgewogICAgICBub2RlID0gYmxvY2tRdWV1ZS5yZW1vdmVGaXJzdCgpOwogICAgICBhc3NlcnQobm9kZS5pc0xpdmUpOwogICAgICBhc3NlcnQoc3ViR3JhcGguY29udGFpbnMobm9kZSkpOwoKICAgICAgLy8gSWYgdGhpcyBub2RlIGhhcyBibG9jay1zdHJ1Y3R1cmUgYmFzZWQgaW5mb3JtYXRpb24gYXR0YWNoZWQsCiAgICAgIC8vIHRyeSB1c2luZyB0aGF0IHRvIHRyYXZlcnNlIGZyb20gaGVyZS4KICAgICAgaWYgKG5vZGUuYmxvY2tGbG93ICE9IG51bGwgJiYgaGFuZGxlQmxvY2tGbG93KG5vZGUuYmxvY2tGbG93KSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBpdGVyYXRlQmFzaWNCbG9jayhub2RlKTsKICAgIH0KICB9CgogIHZvaWQgY29udGludWVTdWJHcmFwaChIQmFzaWNCbG9jayBub2RlKSB7CiAgICBpZiAoIW5vZGUuaXNMaXZlKSByZXR1cm47CiAgICAvLyBEb24ndCBmb2xsb3cgZWRnZXMgb3V0IG9mIHRoZSBjdXJyZW50IHN1Yi1ncmFwaC4KICAgIGlmICghc3ViR3JhcGguY29udGFpbnMobm9kZSkpIHJldHVybjsKICAgIGJsb2NrUXVldWUuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCBlbWl0QXNzaWdubWVudCgKICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uLCBTdHJpbmcgc291cmNlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgYXNzaWduVmFyaWFibGUoZGVzdGluYXRpb24sIG5ldyBqcy5WYXJpYWJsZVVzZShzb3VyY2UpLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICAvLy8gU2VxdWVudGlhbGl6ZSBhIGxpc3Qgb2YgY29uY2VwdHVhbGx5IHBhcmFsbGVsIGNvcGllcy4gUGFyYWxsZWwKICAvLy8gY29waWVzIG1heSBjb250YWluIGN5Y2xlcywgdGhhdCB0aGlzIG1ldGhvZCBicmVha3MuCiAgdm9pZCBzZXF1ZW50aWFsaXplQ29waWVzKAogICAgICBJdGVyYWJsZTxDb3B5PEhJbnN0cnVjdGlvbj4+IGluc3RydWN0aW9uQ29waWVzLAogICAgICBTdHJpbmcgdGVtcE5hbWUsCiAgICAgIHZvaWQgZG9Bc3NpZ25tZW50KAogICAgICAgICAgU3RyaW5nIHRhcmdldCwgU3RyaW5nIHNvdXJjZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pKSB7CiAgICBNYXA8U3RyaW5nLCBTb3VyY2VJbmZvcm1hdGlvbj4gc291cmNlSW5mb3JtYXRpb25NYXAgPQogICAgICAgIDxTdHJpbmcsIFNvdXJjZUluZm9ybWF0aW9uPnt9OwoKICAgIC8vIE1hcCB0aGUgaW5zdHJ1Y3Rpb25zIHRvIHN0cmluZ3MuCiAgICBJdGVyYWJsZTxDb3B5PFN0cmluZz4+IGNvcGllcyA9CiAgICAgICAgaW5zdHJ1Y3Rpb25Db3BpZXMubWFwKChDb3B5PEhJbnN0cnVjdGlvbj4gY29weSkgewogICAgICBTdHJpbmcgc291cmNlTmFtZSA9IHZhcmlhYmxlTmFtZXMuZ2V0TmFtZShjb3B5LnNvdXJjZSk7CiAgICAgIHNvdXJjZUluZm9ybWF0aW9uTWFwW3NvdXJjZU5hbWVdID0gY29weS5zb3VyY2Uuc291cmNlSW5mb3JtYXRpb247CiAgICAgIFN0cmluZyBkZXN0aW5hdGlvbk5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUoY29weS5kZXN0aW5hdGlvbik7CiAgICAgIHNvdXJjZUluZm9ybWF0aW9uTWFwW3NvdXJjZU5hbWVdID0gY29weS5kZXN0aW5hdGlvbi5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgcmV0dXJuIG5ldyBDb3B5PFN0cmluZz4oc291cmNlTmFtZSwgZGVzdGluYXRpb25OYW1lKTsKICAgIH0pOwoKICAgIC8vIE1hcCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGxvY2F0aW9uIChpZSB0aGUgdmFyaWFibGUgdGhhdAogICAgLy8gaG9sZHMgdGhlIGluaXRpYWwgdmFsdWUpIG9mIGEgdmFyaWFibGUuCiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGN1cnJlbnRMb2NhdGlvbiA9IG5ldyBNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CgogICAgLy8gTWFwIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGluaXRpYWwgdmFsdWUgb2YgYSB2YXJpYWJsZS4KICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gaW5pdGlhbFZhbHVlID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKCiAgICAvLyBMaXN0IG9mIHZhcmlhYmxlcyB0byBhc3NpZ24gYSB2YWx1ZS4KICAgIExpc3Q8U3RyaW5nPiB3b3JrbGlzdCA9IDxTdHJpbmc+W107CgogICAgLy8gTGlzdCBvZiB2YXJpYWJsZXMgdGhhdCB3ZSBjYW4gYXNzaWduIGEgdmFsdWUgdG8gKGllIGFyZSBub3QKICAgIC8vIGJlaW5nIHVzZWQgYW55bW9yZSkuCiAgICBMaXN0PFN0cmluZz4gcmVhZHkgPSA8U3RyaW5nPltdOwoKICAgIC8vIFBydW5lIFtjb3BpZXNdIGJ5IHJlbW92aW5nIHNlbGYtY29waWVzLgogICAgTGlzdDxDb3B5PFN0cmluZz4+IHBydW5lZENvcGllcyA9IDxDb3B5PFN0cmluZz4+W107CiAgICBmb3IgKENvcHk8U3RyaW5nPiBjb3B5IGluIGNvcGllcykgewogICAgICBpZiAoY29weS5zb3VyY2UgIT0gY29weS5kZXN0aW5hdGlvbikgewogICAgICAgIHBydW5lZENvcGllcy5hZGQoY29weSk7CiAgICAgIH0KICAgIH0KICAgIGNvcGllcyA9IHBydW5lZENvcGllczsKCiAgICAvLyBGb3IgZWFjaCBjb3B5LCBzZXQgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhlIHNvdXJjZSB0bwogICAgLy8gaXRzZWxmLCBhbmQgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGRlc3RpbmF0aW9uIHRvIHRoZSBzb3VyY2UuCiAgICAvLyBBZGQgdGhlIGRlc3RpbmF0aW9uIHRvIHRoZSBsaXN0IG9mIGNvcGllcyB0byBtYWtlLgogICAgZm9yIChDb3B5PFN0cmluZz4gY29weSBpbiBjb3BpZXMpIHsKICAgICAgY3VycmVudExvY2F0aW9uW2NvcHkuc291cmNlXSA9IGNvcHkuc291cmNlOwogICAgICBpbml0aWFsVmFsdWVbY29weS5kZXN0aW5hdGlvbl0gPSBjb3B5LnNvdXJjZTsKICAgICAgd29ya2xpc3QuYWRkKGNvcHkuZGVzdGluYXRpb24pOwogICAgfQoKICAgIC8vIEZvciBlYWNoIGNvcHksIGlmIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBoYXZlIGEgY3VycmVudAogICAgLy8gbG9jYXRpb24sIHRoZW4gd2UgY2FuIHNhZmVseSBhc3NpZ24gdG8gaXQuCiAgICBmb3IgKENvcHk8U3RyaW5nPiBjb3B5IGluIGNvcGllcykgewogICAgICBpZiAoY3VycmVudExvY2F0aW9uW2NvcHkuZGVzdGluYXRpb25dID09IG51bGwpIHsKICAgICAgICByZWFkeS5hZGQoY29weS5kZXN0aW5hdGlvbik7CiAgICAgIH0KICAgIH0KCiAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkpIHsKICAgICAgd2hpbGUgKCFyZWFkeS5pc0VtcHR5KSB7CiAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gcmVhZHkucmVtb3ZlTGFzdCgpOwogICAgICAgIFN0cmluZyBzb3VyY2UgPSBpbml0aWFsVmFsdWVbZGVzdGluYXRpb25dOwogICAgICAgIC8vIFNpbmNlIFtzb3VyY2VdIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkLCB1c2UgdGhlIGN1cnJlbnQKICAgICAgICAvLyBsb2NhdGlvbiBvZiBbc291cmNlXQogICAgICAgIFN0cmluZyBjb3B5ID0gY3VycmVudExvY2F0aW9uW3NvdXJjZV07CiAgICAgICAgZG9Bc3NpZ25tZW50KGRlc3RpbmF0aW9uLCBjb3B5LAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbk1hcFtjb3B5XSA/PyBzb3VyY2VJbmZvcm1hdGlvbk1hcFtkZXN0aW5hdGlvbl0pOwogICAgICAgIC8vIE5vdyBbZGVzdGluYXRpb25dIGlzIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9mIFtzb3VyY2VdLgogICAgICAgIGN1cnJlbnRMb2NhdGlvbltzb3VyY2VdID0gZGVzdGluYXRpb247CiAgICAgICAgLy8gSWYgW3NvdXJjZV0gaGFzbid0IGJlZW4gdXBkYXRlZCBhbmQgbmVlZHMgdG8gaGF2ZSBhIHZhbHVlLAogICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZC4gQ29waWVzCiAgICAgICAgLy8gb2YgW3NvdXJjZV0gd2lsbCBub3cgdXNlIFtkZXN0aW5hdGlvbl0uCiAgICAgICAgaWYgKHNvdXJjZSA9PSBjb3B5ICYmIGluaXRpYWxWYWx1ZVtzb3VyY2VdICE9IG51bGwpIHsKICAgICAgICAgIHJlYWR5LmFkZChzb3VyY2UpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGN5Y2xlLgogICAgICBTdHJpbmcgY3VycmVudCA9IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgLy8gSWYgW2N1cnJlbnRdIGlzIHVzZWQgYXMgYSBzb3VyY2UsIGFuZCB0aGUgYXNzaWdubWVudCBoYXMgYmVlbgogICAgICAvLyBkb25lLCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdmFyaWFibGUuIE90aGVyd2lzZSB0aGVyZSBpcyBhCiAgICAgIC8vIGN5Y2xlIHRoYXQgd2UgYnJlYWsgYnkgdXNpbmcgYSB0ZW1wb3JhcnkgbmFtZS4KICAgICAgaWYgKGN1cnJlbnRMb2NhdGlvbltjdXJyZW50XSAhPSBudWxsICYmCiAgICAgICAgICBjdXJyZW50ICE9IGN1cnJlbnRMb2NhdGlvbltpbml0aWFsVmFsdWVbY3VycmVudF1dKSB7CiAgICAgICAgZG9Bc3NpZ25tZW50KHRlbXBOYW1lLCBjdXJyZW50LCBzb3VyY2VJbmZvcm1hdGlvbk1hcFtjdXJyZW50XSk7CiAgICAgICAgY3VycmVudExvY2F0aW9uW2N1cnJlbnRdID0gdGVtcE5hbWU7CiAgICAgICAgLy8gW2N1cnJlbnRdIGNhbiBub3cgYmUgc2FmZWx5IHVwZGF0ZWQuIENvcGllcyBvZiBbY3VycmVudF0KICAgICAgICAvLyB3aWxsIG5vdyB1c2UgW3RlbXBOYW1lXS4KICAgICAgICByZWFkeS5hZGQoY3VycmVudCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYXNzaWduUGhpc09mU3VjY2Vzc29ycyhIQmFzaWNCbG9jayBub2RlKSB7CiAgICBDb3B5SGFuZGxlciBoYW5kbGVyID0gdmFyaWFibGVOYW1lcy5nZXRDb3B5SGFuZGxlcihub2RlKTsKICAgIGlmIChoYW5kbGVyID09IG51bGwpIHJldHVybjsKCiAgICBzZXF1ZW50aWFsaXplQ29waWVzKAogICAgICAgIGhhbmRsZXIuY29waWVzLCB2YXJpYWJsZU5hbWVzLmdldFN3YXBUZW1wKCksIGVtaXRBc3NpZ25tZW50KTsKCiAgICBmb3IgKENvcHk8SEluc3RydWN0aW9uPiBjb3B5IGluIGhhbmRsZXIuYXNzaWdubWVudHMpIHsKICAgICAgU3RyaW5nIG5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUoY29weS5kZXN0aW5hdGlvbik7CiAgICAgIHVzZShjb3B5LnNvdXJjZSk7CiAgICAgIGFzc2lnblZhcmlhYmxlKG5hbWUsIHBvcCgpLAogICAgICAgICAgY29weS5zb3VyY2Uuc291cmNlSW5mb3JtYXRpb24gPz8gY29weS5kZXN0aW5hdGlvbi5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGl0ZXJhdGVCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IG5vZGUuZmlyc3Q7CiAgICB3aGlsZSAoIWlkZW50aWNhbChpbnN0cnVjdGlvbiwgbm9kZS5sYXN0KSkgewogICAgICBpZiAoIWlzR2VuZXJhdGVBdFVzZVNpdGUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgZGVmaW5lKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQ7CiAgICB9CiAgICBhc3NpZ25QaGlzT2ZTdWNjZXNzb3JzKG5vZGUpOwogICAgdmlzaXQoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgdm9pZCBoYW5kbGVJbnZva2VCaW5hcnkoCiAgICAgIEhJbnZva2VCaW5hcnkgbm9kZSwgU3RyaW5nIG9wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgdXNlKG5vZGUubGVmdCk7CiAgICBqcy5FeHByZXNzaW9uIGpzTGVmdCA9IHBvcCgpOwogICAgdXNlKG5vZGUucmlnaHQpOwogICAgcHVzaChuZXcganMuQmluYXJ5KG9wLCBqc0xlZnQsIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGF0ZVZhbHVlKEhMYXRlVmFsdWUgbm9kZSkgewogICAgdXNlKG5vZGUudGFyZ2V0KTsKICB9CgogIHZpc2l0SW52b2tlQmluYXJ5KEhJbnZva2VCaW5hcnkgbm9kZSwgU3RyaW5nIG9wKSB7CiAgICBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgb3AsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdmlzaXRSZWxhdGlvbmFsKEhSZWxhdGlvbmFsIG5vZGUsIFN0cmluZyBvcCkgewogICAgaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsIG9wLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIC8vIFdlIHdhbnQgdGhlIG91dGNvbWUgb2YgYml0LW9wZXJhdGlvbnMgdG8gYmUgcG9zaXRpdmUuIFdlIHVzZSB0aGUgdW5zaWduZWQKICAvLyBzaGlmdCBvcGVyYXRvciB0byBhY2hpZXZlIHRoaXMuCiAgdmlzaXRCaXRJbnZva2VCaW5hcnkoSEJpbmFyeUJpdE9wIG5vZGUsIFN0cmluZyBvcCkgewogICAgdmlzaXRJbnZva2VCaW5hcnkobm9kZSwgb3ApOwogICAgaWYgKG9wICE9ICc+Pj4nICYmIHJlcXVpcmVzVWludENvbnZlcnNpb24obm9kZSkpIHsKICAgICAgcHVzaChuZXcganMuQmluYXJ5KCI+Pj4iLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdW1iZXIoIjAiKSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgdmlzaXRJbnZva2VVbmFyeShISW52b2tlVW5hcnkgbm9kZSwgU3RyaW5nIG9wKSB7CiAgICB1c2Uobm9kZS5vcGVyYW5kKTsKICAgIHB1c2goCiAgICAgICAgbmV3IGpzLlByZWZpeChvcCwgcG9wKCkpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICAvLyBXZSB3YW50IHRoZSBvdXRjb21lIG9mIGJpdC1vcGVyYXRpb25zIHRvIGJlIHBvc2l0aXZlLiBXZSB1c2UgdGhlIHVuc2lnbmVkCiAgLy8gc2hpZnQgb3BlcmF0b3IgdG8gYWNoaWV2ZSB0aGlzLgogIHZpc2l0Qml0SW52b2tlVW5hcnkoSEludm9rZVVuYXJ5IG5vZGUsIFN0cmluZyBvcCkgewogICAgdmlzaXRJbnZva2VVbmFyeShub2RlLCBvcCk7CiAgICBpZiAocmVxdWlyZXNVaW50Q29udmVyc2lvbihub2RlKSkgewogICAgICBwdXNoKG5ldyBqcy5CaW5hcnkoIj4+PiIsIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bWJlcigiMCIpKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICB2b2lkIGVtaXRJZGVudGl0eUNvbXBhcmlzb24oCiAgICAgIEhJZGVudGl0eSBpbnN0cnVjdGlvbiwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIGludmVyc2U6IGZhbHNlfSkgewogICAgU3RyaW5nIG9wID0gaW5zdHJ1Y3Rpb24uc2luZ2xlQ29tcGFyaXNvbk9wOwogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24ucmlnaHQ7CiAgICBpZiAob3AgIT0gbnVsbCkgewogICAgICB1c2UobGVmdCk7CiAgICAgIGpzLkV4cHJlc3Npb24ganNMZWZ0ID0gcG9wKCk7CiAgICAgIHVzZShyaWdodCk7CiAgICAgIHB1c2gobmV3IGpzLkJpbmFyeShtYXBSZWxhdGlvbmFsT3BlcmF0b3Iob3AsIGludmVyc2UpLCBqc0xlZnQsIHBvcCgpKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KE51bGxDb25zdGFudFZhbHVlLkpzTnVsbCA9PSAnbnVsbCcpOwogICAgICB1c2UobGVmdCk7CiAgICAgIGpzLkJpbmFyeSBsZWZ0RXF1YWxzTnVsbCA9CiAgICAgICAgICBuZXcganMuQmluYXJ5KCI9PSIsIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bGwoKSk7CiAgICAgIHVzZShyaWdodCk7CiAgICAgIGpzLkJpbmFyeSByaWdodEVxdWFsc051bGwgPSBuZXcganMuQmluYXJ5KAogICAgICAgICAgbWFwUmVsYXRpb25hbE9wZXJhdG9yKCI9PSIsIGludmVyc2UpLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdWxsKCkpOwogICAgICB1c2UocmlnaHQpOwogICAgICB1c2UobGVmdCk7CiAgICAgIGpzLkJpbmFyeSB0cmlwbGVFcSA9CiAgICAgICAgICBuZXcganMuQmluYXJ5KG1hcFJlbGF0aW9uYWxPcGVyYXRvcigiPT09IiwgaW52ZXJzZSksIHBvcCgpLCBwb3AoKSk7CgogICAgICBwdXNoKG5ldyBqcy5Db25kaXRpb25hbChsZWZ0RXF1YWxzTnVsbCwgcmlnaHRFcXVhbHNOdWxsLCB0cmlwbGVFcSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpIHsKICAgIGVtaXRJZGVudGl0eUNvbXBhcmlzb24obm9kZSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwgaW52ZXJzZTogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBZGQoSEFkZCBub2RlKSA9PiB2aXNpdEludm9rZUJpbmFyeShub2RlLCAnKycpOwogIEBvdmVycmlkZQogIHZpc2l0RGl2aWRlKEhEaXZpZGUgbm9kZSkgPT4gdmlzaXRJbnZva2VCaW5hcnkobm9kZSwgJy8nKTsKICBAb3ZlcnJpZGUKICB2aXNpdE11bHRpcGx5KEhNdWx0aXBseSBub2RlKSA9PiB2aXNpdEludm9rZUJpbmFyeShub2RlLCAnKicpOwogIEBvdmVycmlkZQogIHZpc2l0U3VidHJhY3QoSFN1YnRyYWN0IG5vZGUpID0+IHZpc2l0SW52b2tlQmluYXJ5KG5vZGUsICctJyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXRBbmQoSEJpdEFuZCBub2RlKSA9PiB2aXNpdEJpdEludm9rZUJpbmFyeShub2RlLCAnJicpOwogIEBvdmVycmlkZQogIHZpc2l0Qml0Tm90KEhCaXROb3Qgbm9kZSkgPT4gdmlzaXRCaXRJbnZva2VVbmFyeShub2RlLCAnficpOwogIEBvdmVycmlkZQogIHZpc2l0Qml0T3IoSEJpdE9yIG5vZGUpID0+IHZpc2l0Qml0SW52b2tlQmluYXJ5KG5vZGUsICd8Jyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXRYb3IoSEJpdFhvciBub2RlKSA9PiB2aXNpdEJpdEludm9rZUJpbmFyeShub2RlLCAnXicpOwogIEBvdmVycmlkZQogIHZpc2l0U2hpZnRMZWZ0KEhTaGlmdExlZnQgbm9kZSkgPT4gdmlzaXRCaXRJbnZva2VCaW5hcnkobm9kZSwgJzw8Jyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTaGlmdFJpZ2h0KEhTaGlmdFJpZ2h0IG5vZGUpID0+IHZpc2l0Qml0SW52b2tlQmluYXJ5KG5vZGUsICc+Pj4nKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRUcnVuY2F0aW5nRGl2aWRlKEhUcnVuY2F0aW5nRGl2aWRlIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmlzVUludDMxKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKTsKICAgIC8vIFRPRE8oa2FybGtsb3NlKTogRW5hYmxlIHRoaXMgYXNzZXJ0aW9uIGFnYWluIHdoZW4gdHlwZSBwcm9wYWdhdGlvbiBpcwogICAgLy8gZml4ZWQuIElzc3VlIDIzNTU1LgovLyAgICBhc3NlcnQobm9kZS5sZWZ0LmlzVUludDMyKGNvbXBpbGVyKSk7CiAgICBhc3NlcnQobm9kZS5yaWdodC5pc1Bvc2l0aXZlSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSk7CiAgICB1c2Uobm9kZS5sZWZ0KTsKICAgIGpzLkV4cHJlc3Npb24ganNMZWZ0ID0gcG9wKCk7CiAgICB1c2Uobm9kZS5yaWdodCk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJy8nLCBqc0xlZnQsIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgcHVzaChuZXcganMuQmluYXJ5KCd8JywgcG9wKCksIG5ldyBqcy5MaXRlcmFsTnVtYmVyKCIwIikpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFJlbWFpbmRlcihIUmVtYWluZGVyIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdEludm9rZUJpbmFyeShub2RlLCAnJScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROZWdhdGUoSE5lZ2F0ZSBub2RlKSA9PiB2aXNpdEludm9rZVVuYXJ5KG5vZGUsICctJyk7CgogIEBvdmVycmlkZQogIHZpc2l0QWJzKEhBYnMgbm9kZSkgewogICAgdXNlKG5vZGUub3BlcmFuZCk7CiAgICBwdXNoKGpzCiAgICAgICAgLmpzKCdNYXRoLmFicygjKScsIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMZXNzKEhMZXNzIG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlLCAnPCcpOwogIEBvdmVycmlkZQogIHZpc2l0TGVzc0VxdWFsKEhMZXNzRXF1YWwgbm9kZSkgPT4gdmlzaXRSZWxhdGlvbmFsKG5vZGUsICc8PScpOwogIEBvdmVycmlkZQogIHZpc2l0R3JlYXRlcihIR3JlYXRlciBub2RlKSA9PiB2aXNpdFJlbGF0aW9uYWwobm9kZSwgJz4nKTsKICBAb3ZlcnJpZGUKICB2aXNpdEdyZWF0ZXJFcXVhbChIR3JlYXRlckVxdWFsIG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlLCAnPj0nKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRFeGl0KEhFeGl0IG5vZGUpIHsKICAgIC8vIERvbid0IGRvIGFueXRoaW5nLgogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRHb3RvKEhHb3RvIG5vZGUpIHsKICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gbm9kZS5ibG9jazsKICAgIGFzc2VydChibG9jay5zdWNjZXNzb3JzLmxlbmd0aCA9PSAxKTsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IGRvbWluYXRlZCA9IGJsb2NrLmRvbWluYXRlZEJsb2NrczsKICAgIC8vIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgZW50cnktbm9kZSB3aGljaCBkb21pbmF0ZXMgaXRzIHN1Y2Nlc3NvcgogICAgLy8gYW5kIHRoZSBleGl0IG5vZGUsIG5vIGJsb2NrIGZpbmlzaGluZyB3aXRoIGEgJ2dvdG8nIGNhbiBoYXZlIG1vcmUgdGhhbgogICAgLy8gb25lIGRvbWluYXRlZCBibG9jayAoc2luY2UgaXQgaGFzIG9ubHkgb25lIHN1Y2Nlc3NvcikuCiAgICAvLyBJZiB0aGUgc3VjY2Vzc29yIGlzIGRvbWluYXRlZCBieSBhbm90aGVyIGJsb2NrLCB0aGVuIHRoZSBvdGhlciBibG9jawogICAgLy8gaXMgcmVzcG9uc2libGUgZm9yIHZpc2l0aW5nIHRoZSBzdWNjZXNzb3IuCiAgICBpZiAoZG9taW5hdGVkLmlzRW1wdHkpIHJldHVybjsKICAgIGlmIChkb21pbmF0ZWQubGVuZ3RoID4gMikgewogICAgICBmYWlsZWRBdChub2RlLCAnZG9taW5hdGVkLmxlbmd0aCA9ICR7ZG9taW5hdGVkLmxlbmd0aH0nKTsKICAgIH0KICAgIGlmIChkb21pbmF0ZWQubGVuZ3RoID09IDIgJiYgYmxvY2sgIT0gY3VycmVudEdyYXBoLmVudHJ5KSB7CiAgICAgIGZhaWxlZEF0KG5vZGUsICdub2RlLmJsb2NrICE9IGN1cnJlbnRHcmFwaC5lbnRyeScpOwogICAgfQogICAgYXNzZXJ0KGRvbWluYXRlZFswXSA9PSBibG9jay5zdWNjZXNzb3JzWzBdKTsKICAgIGNvbnRpbnVlU3ViR3JhcGgoZG9taW5hdGVkLmZpcnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TG9vcEJyYW5jaChITG9vcEJyYW5jaCBub2RlKSB7CiAgICBhc3NlcnQobm9kZS5ibG9jayA9PSBzdWJHcmFwaC5lbmQpOwogICAgLy8gV2UgYXJlIGdlbmVyYXRpbmcgY29kZSBmb3IgYSBsb29wIGNvbmRpdGlvbi4KICAgIC8vIElmIHdlIGFyZSBnZW5lcmF0aW5nIHRoZSBzdWJncmFwaCBhcyBhbiBleHByZXNzaW9uLCB0aGUKICAgIC8vIGNvbmRpdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCBhcyB0aGUgZXhwcmVzc2lvbi4KICAgIC8vIE90aGVyd2lzZSwgd2UgZG9uJ3QgZ2VuZXJhdGUgdGhlIGV4cHJlc3Npb24sIGFuZCBsZWF2ZSB0aGF0CiAgICAvLyB0byB0aGUgY29kZSB0aGF0IGNhbGxlZCBbdmlzaXRTdWJHcmFwaF0uCiAgICBpZiAoaXNHZW5lcmF0aW5nRXhwcmVzc2lvbikgewogICAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCcmVhayhIQnJlYWsgbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggPT0gMSk7CiAgICBpZiAobm9kZS5sYWJlbCAhPSBudWxsKSB7CiAgICAgIExhYmVsRGVmaW5pdGlvbiBsYWJlbCA9IG5vZGUubGFiZWw7CiAgICAgIGlmIChicmVha0FjdGlvbi5jb250YWlucyhsYWJlbC50YXJnZXQpKSB7CiAgICAgICAgaW1wbGljaXRCcmVha1dpdGhMYWJlbChsYWJlbC50YXJnZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIHB1c2hTdGF0ZW1lbnQobmV3IGpzLkJyZWFrKF9uYW1lci5icmVha0xhYmVsTmFtZShsYWJlbCkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgICBpZiAoYnJlYWtBY3Rpb24uY29udGFpbnModGFyZ2V0KSkgewogICAgICAgIGltcGxpY2l0QnJlYWtXaXRoTGFiZWwodGFyZ2V0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAobm9kZS5icmVha1N3aXRjaENvbnRpbnVlTG9vcCkgewogICAgICAgICAgcHVzaFN0YXRlbWVudChuZXcganMuQnJlYWsoX25hbWVyLmltcGxpY2l0Q29udGludWVMYWJlbE5hbWUodGFyZ2V0KSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHVzaFN0YXRlbWVudCgKICAgICAgICAgICAgICBuZXcganMuQnJlYWsobnVsbCkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q29udGludWUoSENvbnRpbnVlIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoID09IDEpOwogICAgaWYgKG5vZGUubGFiZWwgIT0gbnVsbCkgewogICAgICBMYWJlbERlZmluaXRpb24gbGFiZWwgPSBub2RlLmxhYmVsOwogICAgICBpZiAoY29udGludWVBY3Rpb24uY29udGFpbnMobGFiZWwpKSB7CiAgICAgICAgY29udGludWVBc0JyZWFrKGxhYmVsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogc2hvdWxkIHRoaXMgcmVhbGx5IGJlIHRoZSBicmVha0xhYmVsTmFtZT8KICAgICAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5Db250aW51ZShfbmFtZXIuYnJlYWtMYWJlbE5hbWUobGFiZWwpKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgSnVtcFRhcmdldCB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgICAgaWYgKGltcGxpY2l0Q29udGludWVBY3Rpb24uY29udGFpbnModGFyZ2V0KSkgewogICAgICAgIGltcGxpY2l0Q29udGludWVBc0JyZWFrKHRhcmdldCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRhcmdldC5pc1N3aXRjaCkgewogICAgICAgICAgcHVzaFN0YXRlbWVudCgKICAgICAgICAgICAgICBuZXcganMuQ29udGludWUoX25hbWVyLmltcGxpY2l0Q29udGludWVMYWJlbE5hbWUodGFyZ2V0KSkKICAgICAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHB1c2hTdGF0ZW1lbnQobmV3IGpzLkNvbnRpbnVlKG51bGwpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEV4aXRUcnkoSEV4aXRUcnkgbm9kZSkgewogICAgLy8gQW4gW0hFeGl0VHJ5XSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY29udHJvbCBmbG93IGdyYXBoIG9mIGEKICAgIC8vIHRyeS9jYXRjaCBibG9jaywgaWUgdGhlIHRyeSBib2R5IGlzIGFsd2F5cyBhIHByZWRlY2Vzc29yCiAgICAvLyBvZiB0aGUgY2F0Y2ggYW5kIGZpbmFsbHkuIEhlcmUsIHdlIGNvbnRpbnVlIHZpc2l0aW5nIHRoZSB0cnkKICAgIC8vIGJvZHkgYnkgdmlzaXRpbmcgdGhlIGJsb2NrIHRoYXQgY29udGFpbnMgdGhlIHVzZXItbGV2ZWwgY29udHJvbAogICAgLy8gZmxvdyBpbnN0cnVjdGlvbi4KICAgIGNvbnRpbnVlU3ViR3JhcGgobm9kZS5ib2R5VHJ5U3VjY2Vzc29yKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHJ5KEhUcnkgbm9kZSkgewogICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLiBUcnkvY2F0Y2gvZmluYWxseSBpcyBhbHdheXMgaGFuZGxlZCB1c2luZyBibG9jawogICAgLy8gaW5mb3JtYXRpb24gaW4gW3Zpc2l0VHJ5SW5mb10uCiAgICBmYWlsZWRBdChub2RlLCAndmlzaXRUcnkgc2hvdWxkIG5vdCBiZSBjYWxsZWQuJyk7CiAgfQoKICBib29sIHRyeUNvbnRyb2xGbG93T3BlcmF0aW9uKEhJZiBub2RlKSB7CiAgICBpZiAoIWNvbnRyb2xGbG93T3BlcmF0b3JzLmNvbnRhaW5zKG5vZGUpKSByZXR1cm4gZmFsc2U7CiAgICBIUGhpIHBoaSA9IG5vZGUuam9pbkJsb2NrLnBoaXMuZmlyc3Q7CiAgICBib29sIGF0VXNlU2l0ZSA9IGlzR2VuZXJhdGVBdFVzZVNpdGUocGhpKTsKICAgIC8vIERvbid0IGdlbmVyYXRlIGEgY29uZGl0aW9uYWwgb3BlcmF0b3IgaW4gdGhpcyBzaXR1YXRpb246CiAgICAvLyBpID0gY29uZGl0aW9uID8gYmFyKCkgOiBpOwogICAgLy8gQnV0IGdlbmVyYXRlIHRoaXMgaW5zdGVhZDoKICAgIC8vIGlmIChjb25kaXRpb24pIGkgPSBiYXIoKTsKICAgIC8vIFVzdWFsbHksIHRoZSB2YXJpYWJsZSBuYW1lIGlzIGxvbmdlciB0aGFuICdpZicgYW5kIGl0IHRha2VzIHVwCiAgICAvLyBtb3JlIHNwYWNlIHRvIGR1cGxpY2F0ZSB0aGUgbmFtZS4KICAgIGlmICghYXRVc2VTaXRlICYmCiAgICAgICAgdmFyaWFibGVOYW1lcy5nZXROYW1lKHBoaSkgPT0gdmFyaWFibGVOYW1lcy5nZXROYW1lKHBoaS5pbnB1dHNbMV0pKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICghYXRVc2VTaXRlKSBkZWZpbmUocGhpKTsKICAgIGNvbnRpbnVlU3ViR3JhcGgobm9kZS5qb2luQmxvY2spOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIGdlbmVyYXRlSWYoSElmIG5vZGUsIEhJZkJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgSFN0YXRlbWVudEluZm9ybWF0aW9uIHRoZW5HcmFwaCA9IGluZm8udGhlbkdyYXBoOwogICAgSFN0YXRlbWVudEluZm9ybWF0aW9uIGVsc2VHcmFwaCA9IGluZm8uZWxzZUdyYXBoOwogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IG5vZGUuaW5wdXRzLnNpbmdsZTsKCiAgICBqcy5FeHByZXNzaW9uIHRlc3Q7CiAgICBqcy5TdGF0ZW1lbnQgdGhlblBhcnQ7CiAgICBqcy5TdGF0ZW1lbnQgZWxzZVBhcnQ7CgogICAgSEJhc2ljQmxvY2sgdGhlbkJsb2NrID0gbm9kZS5ibG9jay5zdWNjZXNzb3JzWzBdOwogICAgLy8gSWYgd2UgYmVsaWV2ZSB3ZSB3aWxsIGdlbmVyYXRlIFMxIGFzIGVtcHR5LCBpbnN0ZWFkIG9mCiAgICAvLwogICAgLy8gICAgIGlmIChlKSBTMTsgZWxzZSBTMjsKICAgIC8vCiAgICAvLyB0cnkgdG8gZ2VuZXJhdGUKICAgIC8vCiAgICAvLyAgICAgaWYgKCFlKSBTMjsgZWxzZSBTMTsKICAgIC8vCiAgICAvLyBJdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYCFlYCByYXRoZXIgdGhhbiB0cnkgYW5kIG5lZ2F0ZSBpdCBsYXRlci4KICAgIC8vIFJlY29nbml6ZSBhIHNpbmdsZSB0aGVuLWJsb2NrIHdpdGggbm8gY29kZSBhbmQgbm8gY29udHJvbGxlZCBwaGlzLgogICAgaWYgKGlzR2VuZXJhdGVBdFVzZVNpdGUoY29uZGl0aW9uKSAmJgogICAgICAgIHRoZW5CbG9jay5zdWNjZXNzb3JzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgdGhlbkJsb2NrLnN1Y2Nlc3NvcnMuc2luZ2xlID09IG5vZGUuam9pbkJsb2NrICYmCiAgICAgICAgbm9kZS5qb2luQmxvY2sucGhpcy5pc0VtcHR5ICYmCiAgICAgICAgdGhlbkJsb2NrLmZpcnN0IGlzIEhHb3RvKSB7CiAgICAgIGdlbmVyYXRlTm90KGNvbmRpdGlvbiwgY29uZGl0aW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgdGVzdCA9IHBvcCgpOwogICAgICAvLyBTd2FwIGJyYW5jaGVzIGJ1dCB2aXNpdCBpbiBzYW1lIG9yZGVyIGFzIHJlZ2lzdGVyIGFsbG9jYXRvci4KICAgICAgZWxzZVBhcnQgPSB1bndyYXBTdGF0ZW1lbnQoZ2VuZXJhdGVTdGF0ZW1lbnRzSW5OZXdCbG9jayh0aGVuR3JhcGgpKTsKICAgICAgdGhlblBhcnQgPSB1bndyYXBTdGF0ZW1lbnQoZ2VuZXJhdGVTdGF0ZW1lbnRzSW5OZXdCbG9jayhlbHNlR3JhcGgpKTsKICAgICAgYXNzZXJ0KGVsc2VQYXJ0IGlzIGpzLkVtcHR5U3RhdGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZShjb25kaXRpb24pOwogICAgICB0ZXN0ID0gcG9wKCk7CiAgICAgIHRoZW5QYXJ0ID0gdW53cmFwU3RhdGVtZW50KGdlbmVyYXRlU3RhdGVtZW50c0luTmV3QmxvY2sodGhlbkdyYXBoKSk7CiAgICAgIGVsc2VQYXJ0ID0gdW53cmFwU3RhdGVtZW50KGdlbmVyYXRlU3RhdGVtZW50c0luTmV3QmxvY2soZWxzZUdyYXBoKSk7CiAgICB9CgogICAganMuU3RhdGVtZW50IGNvZGUgPSBfYXNzZW1ibGVJZlRoZW5FbHNlKHRlc3QsIHRoZW5QYXJ0LCBlbHNlUGFydCk7CiAgICBwdXNoU3RhdGVtZW50KGNvZGUud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIGpzLlN0YXRlbWVudCBfYXNzZW1ibGVJZlRoZW5FbHNlKAogICAgICBqcy5FeHByZXNzaW9uIHRlc3QsIGpzLlN0YXRlbWVudCB0aGVuUGFydCwganMuU3RhdGVtZW50IGVsc2VQYXJ0KSB7CiAgICAvLyBQZWVwaG9sZSByZXdyaXRlczoKICAgIC8vCiAgICAvLyAgICAgaWYgKGUpOyBlbHNlIFM7ICAgLS0+ICAgaWYgKCFlKSBTOwogICAgLy8KICAgIC8vICAgICBpZiAoZSk7ICAgLS0+ICAgZTsKICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IFdlIG1pZ2h0IGJlIGFibGUgdG8gZG8gYmV0dGVyIHdpdGggcmVzaGFwaW5nIHRoZSBDRkcuCiAgICBpZiAodGhlblBhcnQgaXMganMuRW1wdHlTdGF0ZW1lbnQpIHsKICAgICAgaWYgKGVsc2VQYXJ0IGlzIGpzLkVtcHR5U3RhdGVtZW50KSB7CiAgICAgICAgcmV0dXJuIGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQodGVzdCk7CiAgICAgIH0KICAgICAgdGVzdCA9IGpzLlByZWZpeCgnIScsIHRlc3QpOwogICAgICB2YXIgdGVtcCA9IHRoZW5QYXJ0OwogICAgICB0aGVuUGFydCA9IGVsc2VQYXJ0OwogICAgICBlbHNlUGFydCA9IHRlbXA7CiAgICB9CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnRUb0Jvb2xlYW4pIHsKICAgICAgaWYgKGVsc2VQYXJ0IGlzIGpzLkVtcHR5U3RhdGVtZW50ICYmCiAgICAgICAgICB0aGVuUGFydCBpcyBqcy5FeHByZXNzaW9uU3RhdGVtZW50ICYmCiAgICAgICAgICB0aGVuUGFydC5leHByZXNzaW9uIGlzIGpzLkNhbGwpIHsKICAgICAgICByZXR1cm4ganMuRXhwcmVzc2lvblN0YXRlbWVudCgKICAgICAgICAgICAganMuQmluYXJ5KCcmJicsIHRlc3QsIHRoZW5QYXJ0LmV4cHJlc3Npb24pKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBqcy5JZih0ZXN0LCB0aGVuUGFydCwgZWxzZVBhcnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJZihISWYgbm9kZSkgewogICAgaWYgKHRyeUNvbnRyb2xGbG93T3BlcmF0aW9uKG5vZGUpKSByZXR1cm47CgogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IG5vZGUuaW5wdXRzWzBdOwogICAgSElmQmxvY2tJbmZvcm1hdGlvbiBpbmZvID0gbm9kZS5ibG9ja0luZm9ybWF0aW9uLmJvZHk7CgogICAgaWYgKGNvbmRpdGlvbi5pc0NvbnN0YW50KCkpIHsKICAgICAgSENvbnN0YW50IGNvbnN0YW50ID0gY29uZGl0aW9uOwogICAgICBpZiAoY29uc3RhbnQuY29uc3RhbnQuaXNUcnVlKSB7CiAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8udGhlbkdyYXBoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby5lbHNlR3JhcGgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBnZW5lcmF0ZUlmKG5vZGUsIGluZm8pOwogICAgfQoKICAgIEhCYXNpY0Jsb2NrIGpvaW5CbG9jayA9IG5vZGUuam9pbkJsb2NrOwogICAgaWYgKGpvaW5CbG9jayAhPSBudWxsICYmICFpZGVudGljYWwoam9pbkJsb2NrLmRvbWluYXRvciwgbm9kZS5ibG9jaykpIHsKICAgICAgLy8gVGhlIGpvaW4gYmxvY2sgaXMgZG9taW5hdGVkIGJ5IGEgYmxvY2sgaW4gb25lIG9mIHRoZSBicmFuY2hlcy4KICAgICAgLy8gVGhlIHN1YmdyYXBoIHRyYXZlcnNhbCBuZXZlciByZWFjaGVkIGl0LCBzbyB3ZSB2aXNpdCBpdCBoZXJlCiAgICAgIC8vIGluc3RlYWQuCiAgICAgIGNvbnRpbnVlU3ViR3JhcGgoam9pbkJsb2NrKTsKICAgIH0KCiAgICAvLyBWaXNpdCBhbGwgdGhlIGRvbWluYXRlZCBibG9ja3MgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIHRoZW4gb3IgZWxzZQogICAgLy8gYnJhbmNoZXMsIGFuZCBpcyBub3QgdGhlIGpvaW4gYmxvY2suCiAgICAvLyBEZXBlbmRpbmcgb24gaG93IHRoZSB0aGVuL2Vsc2UgYnJhbmNoZXMgdGVybWluYXRlCiAgICAvLyAoZS5nLiwgcmV0dXJuL3Rocm93L2JyZWFrKSB0aGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZS4KICAgIExpc3Q8SEJhc2ljQmxvY2s+IGRvbWluYXRlZCA9IG5vZGUuYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgZm9yIChpbnQgaSA9IDI7IGkgPCBkb21pbmF0ZWQubGVuZ3RoOyBpKyspIHsKICAgICAgY29udGludWVTdWJHcmFwaChkb21pbmF0ZWRbaV0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyY2VwdG9yKEhJbnRlcmNlcHRvciBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvcikgewogICAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDIpOwogICAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXJFeHByZXNzaW9uID0gcG9wKCk7CiAgICAgIHVzZShub2RlLmNvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvcik7CiAgICAgIGpzLkV4cHJlc3Npb24gY29uc3RhbnQgPSBwb3AoKTsKICAgICAgcHVzaChqcy5qcygnIyAmJiAjJywgW3JlY2VpdmVyRXhwcmVzc2lvbiwgY29uc3RhbnRdKSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpOwogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKG5vZGUuaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgICAganMuTmFtZSBuYW1lID0gX25hbWVyLm5hbWVGb3JHZXRJbnRlcmNlcHRvcihub2RlLmludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICAgIGpzLkV4cHJlc3Npb24gaXNvbGF0ZSA9IF9uYW1lcgogICAgICAgICAgLnJlYWRHbG9iYWxPYmplY3RGb3JMaWJyYXJ5KF9jb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5KTsKICAgICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IDxqcy5FeHByZXNzaW9uPltwb3AoKV07CiAgICAgIHB1c2goanMKICAgICAgICAgIC5wcm9wZXJ0eUNhbGwoaXNvbGF0ZSwgbmFtZSwgYXJndW1lbnRzKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclVzZUludGVyY2VwdG9yKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUR5bmFtaWNNZXRob2QoSEludm9rZUR5bmFtaWNNZXRob2Qgbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAganMuRXhwcmVzc2lvbiBvYmplY3QgPSBwb3AoKTsKICAgIFN0cmluZyBtZXRob2ROYW1lOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cyk7CiAgICBNZW1iZXJFbnRpdHkgdGFyZ2V0ID0gbm9kZS5lbGVtZW50OwoKICAgIC8vIFRPRE8oaGVyaHV0KTogVGhlIG5hbWVyIHNob3VsZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGJhY2tlbmRuYW1lIGhlcmUuCiAgICBpZiAodGFyZ2V0ICE9IG51bGwgJiYgIW5vZGUuaXNJbnRlcmNlcHRlZENhbGwpIHsKICAgICAgaWYgKHRhcmdldCA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheUFkZCkgewogICAgICAgIG1ldGhvZE5hbWUgPSAncHVzaCc7CiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IF9jb21tb25FbGVtZW50cy5qc0FycmF5UmVtb3ZlTGFzdCkgewogICAgICAgIG1ldGhvZE5hbWUgPSAncG9wJzsKICAgICAgfSBlbHNlIGlmIChfY29tbW9uRWxlbWVudHMuaXNKc1N0cmluZ1NwbGl0KHRhcmdldCkpIHsKICAgICAgICBtZXRob2ROYW1lID0gJ3NwbGl0JzsKICAgICAgICAvLyBTcGxpdCByZXR1cm5zIGEgTGlzdCwgc28gd2UgbWFrZSBzdXJlIHRoZSBiYWNrZW5kIGtub3dzIHRoZQogICAgICAgIC8vIGxpc3QgY2xhc3MgaXMgaW5zdGFudGlhdGVkLgogICAgICAgIF9yZWdpc3RyeQogICAgICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgICAgIC5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MpOwogICAgICB9IGVsc2UgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKHRhcmdldCkgJiYKICAgICAgICAgIHRhcmdldC5pc0Z1bmN0aW9uICYmCiAgICAgICAgICAhbm9kZS5pc0ludGVyY2VwdGVkQ2FsbCkgewogICAgICAgIC8vIEEgZGlyZWN0IChpLmUuIG5vbi1pbnRlcmNlcHRvcikgbmF0aXZlIGNhbGwgaXMgdGhlIHJlc3VsdCBvZgogICAgICAgIC8vIG9wdGltaXphdGlvbi4gIFRoZSBvcHRpbWl6YXRpb24gZW5zdXJlcyBhbnkgdHlwZSBjaGVja3Mgb3IKICAgICAgICAvLyBjb252ZXJzaW9ucyBoYXZlIGJlZW4gc2F0aXNmaWVkLgogICAgICAgIG1ldGhvZE5hbWUgPSBfbmF0aXZlRGF0YS5nZXRGaXhlZEJhY2tlbmROYW1lKHRhcmdldCk7CiAgICAgIH0KICAgIH0KCiAgICBqcy5OYW1lIG1ldGhvZExpdGVyYWw7CiAgICBpZiAobWV0aG9kTmFtZSA9PSBudWxsKSB7CiAgICAgIG1ldGhvZExpdGVyYWwgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUobm9kZS5zZWxlY3Rvcik7CiAgICAgIHJlZ2lzdGVyTWV0aG9kSW52b2tlKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgbWV0aG9kTGl0ZXJhbCA9IF9uYW1lci5hc05hbWUobWV0aG9kTmFtZSk7CiAgICB9CiAgICBwdXNoKGpzCiAgICAgICAgLnByb3BlcnR5Q2FsbChvYmplY3QsIG1ldGhvZExpdGVyYWwsIGFyZ3VtZW50cykKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnZva2VDb25zdHJ1Y3RvckJvZHkoSEludm9rZUNvbnN0cnVjdG9yQm9keSBub2RlKSB7CiAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAganMuRXhwcmVzc2lvbiBvYmplY3QgPSBwb3AoKTsKICAgIGpzLk5hbWUgbWV0aG9kTmFtZSA9IF9uYW1lci5pbnN0YW5jZU1ldGhvZE5hbWUobm9kZS5lbGVtZW50KTsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMpOwogICAgcHVzaChqcwogICAgICAgIC5wcm9wZXJ0eUNhbGwob2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5jb25zdHJ1Y3RvckJvZHlJbnZva2UoCiAgICAgICAgbm9kZS5lbGVtZW50LCBuZXcgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKGFyZ3VtZW50cy5sZW5ndGgpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52b2tlR2VuZXJhdG9yQm9keShISW52b2tlR2VuZXJhdG9yQm9keSBub2RlKSB7CiAgICBKR2VuZXJhdG9yQm9keSBlbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgaWYgKGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAgICBqcy5FeHByZXNzaW9uIG9iamVjdCA9IHBvcCgpOwogICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzKTsKICAgICAganMuTmFtZSBtZXRob2ROYW1lID0gX25hbWVyLmluc3RhbmNlTWV0aG9kTmFtZShlbGVtZW50KTsKICAgICAgcHVzaChqcwogICAgICAgICAgLnByb3BlcnR5Q2FsbChvYmplY3QsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cykKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhlbGVtZW50KSk7CiAgICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMsIHN0YXJ0OiAwKTsKICAgICAgcHVzaChuZXcganMuQ2FsbChwb3AoKSwgYXJndW1lbnRzLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KCiAgICBfcmVnaXN0cnkKICAgICAgICAucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5nZW5lcmF0b3JCb2R5SW52b2tlKG5vZGUuZWxlbWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpIHsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMpOwogICAganMuRXhwcmVzc2lvbiBpc29sYXRlID0KICAgICAgICBfbmFtZXIucmVhZEdsb2JhbE9iamVjdEZvckxpYnJhcnkoX2NvbW1vbkVsZW1lbnRzLmludGVyY2VwdG9yc0xpYnJhcnkpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBub2RlLnNlbGVjdG9yOwogICAgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzID0KICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLmdldEludGVyY2VwdGVkQ2xhc3Nlc09uKHNlbGVjdG9yLm5hbWUsIF9jbG9zZWRXb3JsZCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJPbmVTaG90SW50ZXJjZXB0b3Ioc2VsZWN0b3IpOwogICAganMuTmFtZSBtZXRob2ROYW1lID0gX25hbWVyLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3Ioc2VsZWN0b3IsIGNsYXNzZXMpOwogICAgcHVzaChqcwogICAgICAgIC5wcm9wZXJ0eUNhbGwoaXNvbGF0ZSwgbWV0aG9kTmFtZSwgYXJndW1lbnRzKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIHJlZ2lzdGVyR2V0dGVyKG5vZGUpOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICByZWdpc3RlclNldHRlcihub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlZ2lzdGVyTWV0aG9kSW52b2tlKG5vZGUpOwogICAgfQogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVXNlSW50ZXJjZXB0b3IoKTsKICB9CgogIEFic3RyYWN0VmFsdWUgZ2V0T3B0aW1pemVkU2VsZWN0b3JGb3IoCiAgICAgIEhJbnZva2VEeW5hbWljIG5vZGUsIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIGlmIChub2RlLmVsZW1lbnQgIT0gbnVsbCkgewogICAgICAvLyBDcmVhdGUgYW4gYXJ0aWZpY2lhbCB0eXBlIG1hc2sgdG8gbWFrZSBzdXJlIG9ubHkKICAgICAgLy8gW25vZGUuZWxlbWVudF0gd2lsbCBiZSBlbnF1ZXVlZC4gV2UncmUgbm90IHVzaW5nIHRoZSByZWNlaXZlcgogICAgICAvLyB0eXBlIGJlY2F1c2Ugb3VyIG9wdGltaXphdGlvbnMgbWlnaHQgZW5kIHVwIGluIGEgc3RhdGUgd2hlcmUgdGhlCiAgICAgIC8vIGludm9rZSBkeW5hbWljIGtub3dzIG1vcmUgdGhhbiB0aGUgcmVjZWl2ZXIuCiAgICAgIENsYXNzRW50aXR5IGVuY2xvc2luZyA9IG5vZGUuZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgaWYgKF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChlbmNsb3NpbmcpKSB7CiAgICAgICAgcmV0dXJuIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxFeGFjdChlbmNsb3NpbmcpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoZSBlbGVtZW50IGlzIG1peGVkIGluIHNvIGEgbm9uLW51bGwgc3VidHlwZSBtYXNrIGlzIHRoZSBtb3N0CiAgICAgICAgLy8gcHJlY2lzZSB3ZSBoYXZlLgogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oZW5jbG9zaW5nKSwKICAgICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAgICAgIkVsZW1lbnQgJHtub2RlLmVsZW1lbnR9IGZyb20gJGVuY2xvc2luZyBleHBlY3RlZCAiCiAgICAgICAgICAgICAgICAidG8gYmUgbWl4ZWQgaW4uIikpOwogICAgICAgIHJldHVybiBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShlbmNsb3NpbmcpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbWFzayA/PyBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICB9CgogIHZvaWQgcmVnaXN0ZXJNZXRob2RJbnZva2UoSEludm9rZUR5bmFtaWMgbm9kZSkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBub2RlLnNlbGVjdG9yOwoKICAgIC8vIElmIHdlIGRvbid0IGtub3cgd2hhdCB3ZSdyZSBjYWxsaW5nIG9yIGlmIHdlIGFyZSBjYWxsaW5nIGEgZ2V0dGVyLAogICAgLy8gd2UgbmVlZCB0byByZWdpc3RlciB0aGF0IGZhY3QgdGhhdCB3ZSBtYXkgYmUgY2FsbGluZyBhIGNsb3N1cmUKICAgIC8vIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLgogICAgTWVtYmVyRW50aXR5IHRhcmdldCA9IG5vZGUuZWxlbWVudDsKICAgIGlmICgodGFyZ2V0ID09IG51bGwgfHwgdGFyZ2V0LmlzR2V0dGVyKSAmJgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4ga2VybmVsIGFkZHMgYW4gYGlzRnVuY3Rpb25DYWxsYAogICAgICAgIC8vIGZsYWcgdG8gW2lyLk1ldGhvZEludm9jYXRpb25dLiBDdXJyZW50bHkgd2UgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZQogICAgICAgIC8vIGJldHdlZW4gYSBkeW5hbWljIGNhbGwgYW5kIGEgZnVuY3Rpb24gY2FsbCwgYnV0IHdlIGF0IGxlYXN0IGtub3cgdGhhdAogICAgICAgIC8vIHRvU3RyaW5nIGlzIG5vdCBhIGdldHRlciAoYSBwb3RlbnRpYWwgZnVuY3Rpb24gY2FsbCBzaG91bGQgb3RoZXJ3aXNlCiAgICAgICAgLy8gaGF2ZSBiZWVuIHJlZ2lzdGVyIGZvciBzdHJpbmcgY29uY2F0ZW5hdGlvbikuCiAgICAgICAgc2VsZWN0b3IgIT0gU2VsZWN0b3JzLnRvU3RyaW5nXykgewogICAgICAvLyBUT0RPKGthc3BlcmwpOiBJZiB3ZSBoYXZlIGEgdHlwZWQgc2VsZWN0b3IgZm9yIHRoZSBjYWxsLCB3ZQogICAgICAvLyBtYXkga25vdyBzb21ldGhpbmcgYWJvdXQgdGhlIHR5cGVzIG9mIGNsb3N1cmVzIHRoYXQgbmVlZAogICAgICAvLyB0aGUgc3BlY2lmaWMgY2xvc3VyZSBjYWxsIG1ldGhvZC4KICAgICAgU2VsZWN0b3IgY2FsbCA9IG5ldyBTZWxlY3Rvci5jYWxsQ2xvc3VyZUZyb20oc2VsZWN0b3IpOwogICAgICBfcmVnaXN0cnkKICAgICAgICAgIC5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2UoY2FsbCwgbnVsbCwgbm9kZS50eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKICAgICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgaW52b2NhdGlvbiB3aGljaCB3ZSBoYXZlIGZvdW5kIHRvIGhhdmUgYSBzaW5nbGUKICAgICAgLy8gdGFyZ2V0IGJ1dCBmb3Igc29tZSByZWFzb24gaGF2ZW4ndCBpbmxpbmVkLiBXZSBhcmUgX3N0aWxsXyBhY2Nlc3NpbmcKICAgICAgLy8gdGhlIHRhcmdldCBkeW5hbWljYWxseSBidXQgd2UgZG9uJ3QgbmVlZCB0byBlbnF1ZXVlIG1vcmUgdGhhbiB0YXJnZXQKICAgICAgLy8gZm9yIHRoaXMgdG8gd29yay4KICAgICAgYXNzZXJ0KHNlbGVjdG9yLmFwcGxpZXModGFyZ2V0KSwKICAgICAgICAgIGZhaWxlZEF0KG5vZGUsICckc2VsZWN0b3IgZG9lcyBub3QgYXBwbHkgdG8gJHRhcmdldCcpKTsKICAgICAgYXNzZXJ0KCFzZWxlY3Rvci5pc0dldHRlciAmJiAhc2VsZWN0b3IuaXNTZXR0ZXIsCiAgICAgICAgICAiVW5leHBlY3RlZCBkaXJlY3QgaW52b2NhdGlvbiBzZWxlY3RvcjogJHNlbGVjdG9yLiIpOwogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5kaXJlY3RJbnZva2UoCiAgICAgICAgICB0YXJnZXQsIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUsIG5vZGUudHlwZUFyZ3VtZW50cykpOwogICAgfSBlbHNlIHsKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0KICAgICAgICAgIGdldE9wdGltaXplZFNlbGVjdG9yRm9yKG5vZGUsIHNlbGVjdG9yLCBub2RlLnJlY2VpdmVyVHlwZSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgICBuZXcgRHluYW1pY1VzZShzZWxlY3RvciwgbWFzaywgbm9kZS50eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgfQoKICB2b2lkIHJlZ2lzdGVyU2V0dGVyKEhJbnZva2VEeW5hbWljIG5vZGUsIHtib29sIG5lZWRzQ2hlY2s6IGZhbHNlfSkgewogICAgaWYgKG5vZGUuZWxlbWVudCBpcyBGaWVsZEVudGl0eSAmJiAhbmVlZHNDaGVjaykgewogICAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyB1cGRhdGUgd2hpY2ggd2UgaGF2ZSBmb3VuZCB0byBoYXZlIGEgc2luZ2xlCiAgICAgIC8vIHRhcmdldCBidXQgZm9yIHNvbWUgcmVhc29uIGhhdmVuJ3QgaW5saW5lZC4gV2UgYXJlIF9zdGlsbF8gYWNjZXNzaW5nCiAgICAgIC8vIHRoZSB0YXJnZXQgZHluYW1pY2FsbHkgYnV0IHdlIGRvbid0IG5lZWQgdG8gZW5xdWV1ZSBtb3JlIHRoYW4gdGFyZ2V0CiAgICAgIC8vIGZvciB0aGlzIHRvIHdvcmsuCiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmRpcmVjdFNldChub2RlLmVsZW1lbnQpKTsKICAgIH0gZWxzZSB7CiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbm9kZS5zZWxlY3RvcjsKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0KICAgICAgICAgIGdldE9wdGltaXplZFNlbGVjdG9yRm9yKG5vZGUsIHNlbGVjdG9yLCBub2RlLnJlY2VpdmVyVHlwZSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgICBuZXcgRHluYW1pY1VzZShzZWxlY3RvciwgbWFzaywgbm9kZS50eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgfQoKICB2b2lkIHJlZ2lzdGVyR2V0dGVyKEhJbnZva2VEeW5hbWljIG5vZGUpIHsKICAgIGlmIChub2RlLmVsZW1lbnQgIT0gbnVsbCAmJgogICAgICAgIChub2RlLmVsZW1lbnQuaXNHZXR0ZXIgfHwgbm9kZS5lbGVtZW50LmlzRmllbGQpKSB7CiAgICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHJlYWQgd2hpY2ggd2UgaGF2ZSBmb3VuZCB0byBoYXZlIGEgc2luZ2xlIHRhcmdldCBidXQKICAgICAgLy8gZm9yIHNvbWUgcmVhc29uIGhhdmVuJ3QgaW5saW5lZC4gV2UgYXJlIF9zdGlsbF8gYWNjZXNzaW5nIHRoZSB0YXJnZXQKICAgICAgLy8gZHluYW1pY2FsbHkgYnV0IHdlIGRvbid0IG5lZWQgdG8gZW5xdWV1ZSBtb3JlIHRoYW4gdGFyZ2V0IGZvciB0aGlzIHRvCiAgICAgIC8vIHdvcmsuIFRoZSB0ZXN0IGFib3ZlIGV4Y2x1ZGVzIG5vbi1nZXR0ZXIgZnVuY3Rpb25zIHNpbmNlIHRoZSBlbGVtZW50CiAgICAgIC8vIHJlcHJlc2VudHMgdHdvIHRhcmdldHMgLSBhIHRlYXJvZmYgZ2V0dGVyIGFuZCB0aGUgdG9ybi1vZmYgbWV0aG9kLgogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5kaXJlY3RHZXQobm9kZS5lbGVtZW50KSk7CiAgICB9IGVsc2UgewogICAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5vZGUuc2VsZWN0b3I7CiAgICAgIEFic3RyYWN0VmFsdWUgbWFzayA9CiAgICAgICAgICBnZXRPcHRpbWl6ZWRTZWxlY3RvckZvcihub2RlLCBzZWxlY3Rvciwgbm9kZS5yZWNlaXZlclR5cGUpOwogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgICAgbmV3IER5bmFtaWNVc2Uoc2VsZWN0b3IsIG1hc2ssIG5vZGUudHlwZUFyZ3VtZW50cykpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VEeW5hbWljU2V0dGVyKEhJbnZva2VEeW5hbWljU2V0dGVyIG5vZGUpIHsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShub2RlLnNlbGVjdG9yKTsKICAgIHB1c2goanMKICAgICAgICAucHJvcGVydHlDYWxsKHBvcCgpLCBuYW1lLCB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cykpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICByZWdpc3RlclNldHRlcihub2RlLCBuZWVkc0NoZWNrOiBub2RlLm5lZWRzQ2hlY2spOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VEeW5hbWljR2V0dGVyKEhJbnZva2VEeW5hbWljR2V0dGVyIG5vZGUpIHsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShub2RlLnNlbGVjdG9yKTsKICAgIHB1c2goanMKICAgICAgICAucHJvcGVydHlDYWxsKHBvcCgpLCBuYW1lLCB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cykpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICByZWdpc3RlckdldHRlcihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlQ2xvc3VyZShISW52b2tlQ2xvc3VyZSBub2RlKSB7CiAgICBTZWxlY3RvciBjYWxsID0gbmV3IFNlbGVjdG9yLmNhbGxDbG9zdXJlRnJvbShub2RlLnNlbGVjdG9yKTsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIHB1c2goanMKICAgICAgICAucHJvcGVydHlDYWxsKAogICAgICAgICAgICBwb3AoKSwgX25hbWVyLmludm9jYXRpb25OYW1lKGNhbGwpLCB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cykpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAvLyBUT0RPKGthc3BlcmwpOiBJZiB3ZSBoYXZlIGEgdHlwZWQgc2VsZWN0b3IgZm9yIHRoZSBjYWxsLCB3ZQogICAgLy8gbWF5IGtub3cgc29tZXRoaW5nIGFib3V0IHRoZSB0eXBlcyBvZiBjbG9zdXJlcyB0aGF0IG5lZWQKICAgIC8vIHRoZSBzcGVjaWZpYyBjbG9zdXJlIGNhbGwgbWV0aG9kLgogICAgX3JlZ2lzdHJ5CiAgICAgICAgLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZShjYWxsLCBudWxsLCBub2RlLnR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlU3RhdGljKEhJbnZva2VTdGF0aWMgbm9kZSkgewogICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CiAgICBub2RlLmluc3RhbnRpYXRlZFR5cGVzPy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlckluc3RhbnRpYXRpb24pOwoKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMsIHN0YXJ0OiAwKTsKCiAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IpIHsKICAgICAgLy8gTWFudWFsbHkgaW5saW5lIHRoZSBbY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JdIGZ1bmN0aW9uLiAgVGhpcwogICAgICAvLyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIGEgZm9yLWxvb3AgdXBkYXRlLiAgSWRlYWxseSB3ZSB3b3VsZCBqdXN0CiAgICAgIC8vIGdlbmVyYXRlIHRoZSBjb25kaXRpb25hbGNvbnRyb2wgZmxvdyBpbiB0aGUgYnVpbGRlciBidXQgaXQgYWRkcyBiYXNpYwogICAgICAvLyBibG9ja3MgaW4gdGhlIGxvb3AgdXBkYXRlIHRoYXQgaW50ZXJmZXJlIHdpdGggb3RoZXIgb3B0aW1pemF0aW9ucyBhbmQKICAgICAgLy8gY29uZnVzZXMgbG9vcCByZWNvZ25pdGlvbi4KCiAgICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09IDIpOwogICAgICBGdW5jdGlvbkVudGl0eSB0aHJvd0Z1bmN0aW9uID0KICAgICAgICAgIF9jb21tb25FbGVtZW50cy50aHJvd0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcjsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UodGhyb3dGdW5jdGlvbiwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CgogICAgICAvLyBDYWxsaW5nIHVzaW5nIGAoMCwgIykoIylgIGluc3RlYWQgb2YgYCMoIylgIHNlcGFyYXRlcyB0aGUgcHJvcGVydHkgbG9hZAogICAgICAvLyBvZiB0aGUgc3RhdGljIGZ1bmN0aW9uIGFjY2VzcyBmcm9tIHRoZSBjYWxsLiAgRm9yIHNvbWUgcmVhc29uIHRoaXMKICAgICAgLy8gaGVscHMgVjggc2VlIHRoYXQgdGhlIGNhbGwgbmV2ZXIgaGFwcGVucyBzbyBWOCBtYWtlcyB0aGUgY2FsbCBhCiAgICAgIC8vIGRlb3B0aW1pemF0aW9uLiBUaGlzIHJlbW92ZXMgdGhlIGNhbGwgZnJvbSB0aGUgb3B0aW1pemVkIGxvb3AsIG1ha2luZwogICAgICAvLyBtb3JlIG9wdGltaXphdGlvbnMgYXZhaWxhYmxlIHRvIHRoZSBsb29wLiAgVGhpcyBmb3JtIGlzIDUwJSBmYXN0ZXIgb24KICAgICAgLy8gc29tZSBzbWFsbCBsb29wLCBhbG1vc3QgYXMgZmFzdCBhcyBsb29wcyB3aXRoIG5vIGNvbmN1cnJlbnQKICAgICAgLy8gbW9kaWZpY2F0aW9uIGNoZWNrLgoKICAgICAgLy8gQ3JlYXRlIFtyaWdodF0gYXMgYSBzZXBhcmF0ZSBKUyBub2RlIHRvIGdpdmUgdGhlIGNhbGwgYSBzb3VyY2UKICAgICAgLy8gbG9jYXRpb24uCiAgICAgIGpzLkV4cHJlc3Npb24gcmlnaHQgPSBqcy5qcygnKDAsICMpKCMpJywgWwogICAgICAgIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKHRocm93RnVuY3Rpb24pLAogICAgICAgIGFyZ3VtZW50c1sxXQogICAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHB1c2goanMuanMoJyMgfHwgIycsIFthcmd1bWVudHNbMF0sIHJpZ2h0XSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgU3RhdGljVXNlIHN0YXRpY1VzZTsKICAgICAgaWYgKGVsZW1lbnQuaXNDb25zdHJ1Y3RvcikgewogICAgICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQoCiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGgsIG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgICAgIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2UuY29uc3RydWN0b3JJbnZva2UoZWxlbWVudCwgY2FsbFN0cnVjdHVyZSk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0dldHRlcikgewogICAgICAgIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2Uuc3RhdGljR2V0KGVsZW1lbnQpOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgICBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLnN0YXRpY1NldChlbGVtZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoZWxlbWVudC5pc0Z1bmN0aW9uKTsKICAgICAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKAogICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoLCBub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgICAgICBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgICAgZWxlbWVudCwgY2FsbFN0cnVjdHVyZSwgbm9kZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2Uoc3RhdGljVXNlKTsKICAgICAgcHVzaChfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhlbGVtZW50KSk7CiAgICAgIHB1c2gobmV3IGpzLkNhbGwocG9wKCksIGFyZ3VtZW50cywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZVN1cGVyKEhJbnZva2VTdXBlciBub2RlKSB7CiAgICBNZW1iZXJFbnRpdHkgc3VwZXJFbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgQ2xhc3NFbnRpdHkgc3VwZXJDbGFzcyA9IHN1cGVyRWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbm9kZS5zZWxlY3RvcjsKICAgIGJvb2wgdXNlQWxpYXNlZFN1cGVyID0gY2FuVXNlQWxpYXNlZFN1cGVyTWVtYmVyKHN1cGVyRWxlbWVudCwgc2VsZWN0b3IpOwogICAgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIGlmIChzdXBlckVsZW1lbnQuaXNGaWVsZCB8fCBzdXBlckVsZW1lbnQuaXNHZXR0ZXIpIHsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckdldChzdXBlckVsZW1lbnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlclRlYXJPZmYobm9kZS5lbGVtZW50KSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgaWYgKHN1cGVyRWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJGaWVsZFNldChzdXBlckVsZW1lbnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoc3VwZXJFbGVtZW50LmlzU2V0dGVyKTsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlclNldHRlclNldChzdXBlckVsZW1lbnQpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKHVzZUFsaWFzZWRTdXBlcikgewogICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVySW52b2tlKAogICAgICAgICAgICBzdXBlckVsZW1lbnQsIG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQobm9kZS5pbnB1dHMubGVuZ3RoKSkpOwogICAgICB9IGVsc2UgewogICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVySW52b2tlKAogICAgICAgICAgICBzdXBlckVsZW1lbnQsIG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQobm9kZS5pbnB1dHMubGVuZ3RoIC0gMSkpKTsKICAgICAgfQogICAgfQoKICAgIGlmIChzdXBlckVsZW1lbnQuaXNGaWVsZCkgewogICAgICBqcy5OYW1lIGZpZWxkTmFtZSA9IF9uYW1lci5pbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKHN1cGVyRWxlbWVudCk7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICAgIGpzLlByb3BlcnR5QWNjZXNzIGFjY2VzcyA9IG5ldyBqcy5Qcm9wZXJ0eUFjY2Vzcyhwb3AoKSwgZmllbGROYW1lKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgaWYgKG5vZGUuaXNTZXR0ZXIpIHsKICAgICAgICB1c2Uobm9kZS52YWx1ZSk7CiAgICAgICAgcHVzaChuZXcganMuQXNzaWdubWVudChhY2Nlc3MsIHBvcCgpKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwdXNoKGFjY2Vzcyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmICghdXNlQWxpYXNlZFN1cGVyKSB7CiAgICAgICAganMuTmFtZSBtZXRob2ROYW1lOwogICAgICAgIGlmIChzZWxlY3Rvci5pc0dldHRlciAmJiAhc3VwZXJFbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgdGVhci1vZmYsIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgYSB0ZWFyLW9mZiBjbG9zdXJlCiAgICAgICAgICAvLyB3aWxsIGJlIGNyZWF0ZWQsIGFuZCB0aGF0IHRoaXMgdGVhci1vZmYgbXVzdCBieXBhc3Mgb3JkaW5hcnkKICAgICAgICAgIC8vIGRpc3BhdGNoIHRvIGVuc3VyZSB0aGUgc3VwZXIgbWV0aG9kIGlzIGludm9rZWQuCiAgICAgICAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXIgPSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUZyb21UZWFyT2ZmOwogICAgICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgICAgIGhlbHBlciwKICAgICAgICAgICAgICBuZXcgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKAogICAgICAgICAgICAgICAgICBub2RlLmlucHV0cy5sZW5ndGgsIG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpLAogICAgICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cykpOwogICAgICAgICAgbWV0aG9kTmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShzZWxlY3Rvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1ldGhvZE5hbWUgPSBfbmFtZXIuaW5zdGFuY2VNZXRob2ROYW1lKHN1cGVyRWxlbWVudCk7CiAgICAgICAgfQoKICAgICAgICBwdXNoKGpzLmpzKCcjLiMuY2FsbCgjKScsIFsKICAgICAgICAgIF9lbWl0dGVyLnByb3RvdHlwZUFjY2VzcyhzdXBlckNsYXNzLCBoYXNCZWVuSW5zdGFudGlhdGVkOiB0cnVlKSwKICAgICAgICAgIG1ldGhvZE5hbWUsCiAgICAgICAgICB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cywgc3RhcnQ6IDApCiAgICAgICAgXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICAgICAgcHVzaChqcy5qcygnIy4jKCMpJywgWwogICAgICAgICAgcG9wKCksCiAgICAgICAgICBfbmFtZXIuYWxpYXNlZFN1cGVyTWVtYmVyUHJvcGVydHlOYW1lKHN1cGVyRWxlbWVudCksCiAgICAgICAgICB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cywgc3RhcnQ6IDEpCiAgICAgICAgXSkgLy8gU2tpcCByZWNlaXZlciBhcmd1bWVudC4KICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RmllbGRHZXQoSEZpZWxkR2V0IG5vZGUpIHsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGlmIChub2RlLmlzTnVsbENoZWNrKSB7CiAgICAgIC8vIFdlIGFjY2VzcyBhIEphdmFTY3JpcHQgbWVtYmVyIHdlIGtub3cgYWxsIG9iamVjdHMgYmVzaWRlcwogICAgICAvLyBudWxsIGFuZCB1bmRlZmluZWQgaGF2ZTogVjggZG9lcyBub3QgbGlrZSBhY2Nlc3NpbmcgYSBtZW1iZXIKICAgICAgLy8gdGhhdCBkb2VzIG5vdCBleGlzdC4KICAgICAgcHVzaChuZXcganMuUHJvcGVydHlBY2Nlc3MuZmllbGQocG9wKCksICd0b1N0cmluZycpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIEZpZWxkRW50aXR5IGZpZWxkID0gbm9kZS5lbGVtZW50OwogICAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShmaWVsZCk7CiAgICAgIHB1c2gobmV3IGpzLlByb3BlcnR5QWNjZXNzKHBvcCgpLCBuYW1lKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmZpZWxkR2V0KGZpZWxkKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZpZWxkU2V0KEhGaWVsZFNldCBub2RlKSB7CiAgICBGaWVsZEVudGl0eSBlbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZmllbGRTZXQoZWxlbWVudCkpOwogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICBqcy5FeHByZXNzaW9uIHJlY2VpdmVyID0gcG9wKCk7CiAgICB1c2Uobm9kZS52YWx1ZSk7CiAgICBwdXNoKG5ldyBqcy5Bc3NpZ25tZW50KAogICAgICAgICAgICBuZXcganMuUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIG5hbWUpCiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pLAogICAgICAgICAgICBwb3AoKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAgcHVzaChuZXcganMuUHJvcGVydHlBY2Nlc3MuZmllbGQocG9wKCksICdsZW5ndGgnKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZWFkTW9kaWZ5V3JpdGUoSFJlYWRNb2RpZnlXcml0ZSBub2RlKSB7CiAgICBGaWVsZEVudGl0eSBlbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZmllbGRHZXQoZWxlbWVudCkpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZmllbGRTZXQoZWxlbWVudCkpOwogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICBqcy5FeHByZXNzaW9uIGZpZWxkUmVmZXJlbmNlID0gbmV3IGpzLlByb3BlcnR5QWNjZXNzKHBvcCgpLCBuYW1lKTsKICAgIGlmIChub2RlLmlzUHJlT3ApIHsKICAgICAgcHVzaChuZXcganMuUHJlZml4KG5vZGUuanNPcCwgZmllbGRSZWZlcmVuY2UpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSBpZiAobm9kZS5pc1Bvc3RPcCkgewogICAgICBwdXNoKG5ldyBqcy5Qb3N0Zml4KG5vZGUuanNPcCwgZmllbGRSZWZlcmVuY2UpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZShub2RlLnZhbHVlKTsKICAgICAgcHVzaChuZXcganMuQXNzaWdubWVudC5jb21wb3VuZChmaWVsZFJlZmVyZW5jZSwgbm9kZS5qc09wLCBwb3AoKSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMb2NhbEdldChITG9jYWxHZXQgbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMb2NhbFNldChITG9jYWxTZXQgbm9kZSkgewogICAgdXNlKG5vZGUudmFsdWUpOwogICAgYXNzaWduVmFyaWFibGUoCiAgICAgICAgdmFyaWFibGVOYW1lcy5nZXROYW1lKG5vZGUucmVjZWl2ZXIpLCBwb3AoKSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRm9yZWlnblR5cGVzKEhGb3JlaWduIG5vZGUpIHsKICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0gbm9kZS5uYXRpdmVCZWhhdmlvcjsKICAgIGlmIChuYXRpdmVCZWhhdmlvciA9PSBudWxsKSByZXR1cm47CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJOYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZvcmVpZ25Db2RlKEhGb3JlaWduQ29kZSBub2RlKSB7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gbm9kZS5pbnB1dHM7CiAgICBpZiAobm9kZS5pc0pzU3RhdGVtZW50KCkpIHsKICAgICAgTGlzdDxqcy5FeHByZXNzaW9uPiBpbnRlcnBvbGF0ZWRFeHByZXNzaW9ucyA9IDxqcy5FeHByZXNzaW9uPltdOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHVzZShpbnB1dHNbaV0pOwogICAgICAgIGludGVycG9sYXRlZEV4cHJlc3Npb25zLmFkZChwb3AoKSk7CiAgICAgIH0KICAgICAgcHVzaFN0YXRlbWVudChub2RlLmNvZGVUZW1wbGF0ZQogICAgICAgICAgLmluc3RhbnRpYXRlKGludGVycG9sYXRlZEV4cHJlc3Npb25zKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGludGVycG9sYXRlZEV4cHJlc3Npb25zID0gPGpzLkV4cHJlc3Npb24+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdXNlKGlucHV0c1tpXSk7CiAgICAgICAgaW50ZXJwb2xhdGVkRXhwcmVzc2lvbnMuYWRkKHBvcCgpKTsKICAgICAgfQogICAgICBwdXNoKG5vZGUuY29kZVRlbXBsYXRlCiAgICAgICAgICAuaW5zdGFudGlhdGUoaW50ZXJwb2xhdGVkRXhwcmVzc2lvbnMpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KCiAgICAvLyBUT0RPKHNyYSk6IFRlbGwgd29ybGQubmF0aXZlRW5xdWV1ZXIgYWJvdXQgdGhlIHR5cGVzIGNyZWF0ZWQgaGVyZS4KICAgIHJlZ2lzdGVyRm9yZWlnblR5cGVzKG5vZGUpOwoKICAgIGlmIChub2RlLmZvcmVpZ25GdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIF9yZWdpc3RyeT8ucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLmltcGxpY2l0SW52b2tlKG5vZGUuZm9yZWlnbkZ1bmN0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENyZWF0ZShIQ3JlYXRlIG5vZGUpIHsKICAgIGpzLkV4cHJlc3Npb24ganNDbGFzc1JlZmVyZW5jZSA9IF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKG5vZGUuZWxlbWVudCk7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzLCBzdGFydDogMCk7CiAgICBwdXNoKG5ldyBqcy5OZXcoanNDbGFzc1JlZmVyZW5jZSwgYXJndW1lbnRzKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgLy8gV2UgYWxzbyB1c2UgSENyZWF0ZSB0byBpbnN0YW50aWF0ZSBjbG9zdXJlIGNsYXNzZXMgdGhhdCBiZWxvbmcgdG8KICAgIC8vIGZ1bmN0aW9uIGV4cHJlc3Npb25zLiBXZSBoYXZlIHRvIHJlZ2lzdGVyIHRoZWlyIHVzZSBoZXJlLCBhcyBvdGhlcndpc2UKICAgIC8vIGNvZGUgZm9yIHRoZW0gbWlnaHQgbm90IGJlIGVtaXR0ZWQuCiAgICBpZiAobm9kZS5lbGVtZW50LmlzQ2xvc3VyZSkgewogICAgICBfcmVnaXN0cnkKICAgICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICAgIC5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKG5vZGUuZWxlbWVudCk7CiAgICB9CiAgICBub2RlLmluc3RhbnRpYXRlZFR5cGVzPy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlckluc3RhbnRpYXRpb24pOwogICAgaWYgKG5vZGUuY2FsbE1ldGhvZCAhPSBudWxsKSB7CiAgICAgIF9yZWdpc3RyeQogICAgICAgICAgPy5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmltcGxpY2l0SW52b2tlKG5vZGUuY2FsbE1ldGhvZCkpOwogICAgICBfcmVnaXN0cnk/LnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xvc3VyZShub2RlLmNhbGxNZXRob2QpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDcmVhdGVCb3goSENyZWF0ZUJveCBub2RlKSB7CiAgICBwdXNoKG5ldyBqcy5PYmplY3RJbml0aWFsaXplcig8anMuUHJvcGVydHk+W10pKTsKICB9CgogIGpzLkV4cHJlc3Npb24gbmV3TGl0ZXJhbEJvb2woCiAgICAgIGJvb2wgdmFsdWUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAoX29wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uKSB7CiAgICAgIC8vIFVzZSAhMCBmb3IgdHJ1ZSwgITEgZm9yIGZhbHNlLgogICAgICByZXR1cm4gbmV3IGpzLlByZWZpeCgiISIsIG5ldyBqcy5MaXRlcmFsTnVtYmVyKHZhbHVlID8gIjAiIDogIjEiKSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBqcy5MaXRlcmFsQm9vbCh2YWx1ZSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgZ2VuZXJhdGVDb25zdGFudCgKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IF9lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKGNvbnN0YW50KTsKICAgIGlmICghY29uc3RhbnQuaXNEdW1teSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHNvdXJjZSBpbmZvcm1hdGlvbiBvbiBzeW50aGV0aWMgY29uc3RhbnRzLgogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogICAgcHVzaChleHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IG5vZGUpIHsKICAgIGFzc2VydChpc0dlbmVyYXRlQXRVc2VTaXRlKG5vZGUpKTsKICAgIGdlbmVyYXRlQ29uc3RhbnQobm9kZS5jb25zdGFudCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CgogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyQ29uc3RhbnRVc2UobmV3IENvbnN0YW50VXNlLmxpdGVyYWwobm9kZS5jb25zdGFudCkpOwogICAgaWYgKG5vZGUuY29uc3RhbnQuaXNUeXBlKSB7CiAgICAgIFR5cGVDb25zdGFudFZhbHVlIHR5cGVDb25zdGFudCA9IG5vZGUuY29uc3RhbnQ7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgICBuZXcgVHlwZVVzZS5jb25zdFR5cGVMaXRlcmFsKHR5cGVDb25zdGFudC5yZXByZXNlbnRlZFR5cGUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0Tm90KEhOb3Qgbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAxKTsKICAgIGdlbmVyYXRlTm90KG5vZGUuaW5wdXRzWzBdLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgbWFwUmVsYXRpb25hbE9wZXJhdG9yKFN0cmluZyBvcCwgYm9vbCBpbnZlcnNlKSB7CiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGludmVyc2VPcGVyYXRvciA9IGNvbnN0IDxTdHJpbmcsIFN0cmluZz57CiAgICAgICI9PSI6ICIhPSIsCiAgICAgICIhPSI6ICI9PSIsCiAgICAgICI9PT0iOiAiIT09IiwKICAgICAgIiE9PSI6ICI9PT0iLAogICAgICAiPCI6ICI+PSIsCiAgICAgICI8PSI6ICI+IiwKICAgICAgIj4iOiAiPD0iLAogICAgICAiPj0iOiAiPCIKICAgIH07CiAgICByZXR1cm4gaW52ZXJzZSA/IGludmVyc2VPcGVyYXRvcltvcF0gOiBvcDsKICB9CgogIHZvaWQgZ2VuZXJhdGVOb3QoSEluc3RydWN0aW9uIGlucHV0LCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgYm9vbCBjYW5HZW5lcmF0ZU9wdGltaXplZENvbXBhcmlzb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyEgSFJlbGF0aW9uYWwpIHJldHVybiBmYWxzZTsKCiAgICAgIEhSZWxhdGlvbmFsIHJlbGF0aW9uYWwgPSBpbnN0cnVjdGlvbjsKCiAgICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gcmVsYXRpb25hbC5sZWZ0OwogICAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSByZWxhdGlvbmFsLnJpZ2h0OwogICAgICBpZiAobGVmdC5pc1N0cmluZ09yTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgcmlnaHQuaXNTdHJpbmdPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gZG9lc24ndCB3b3JrIGZvciBOYU4sIHNvIHdlIG9ubHkgZG8gaXQgaWYgdGhlCiAgICAgIC8vIHR5cGUgaXMga25vd24gdG8gYmUgYW4gaW50ZWdlci4KICAgICAgcmV0dXJuIGxlZnQuaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICByaWdodC5pc0ludGVnZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWU7CiAgICB9CgogICAgYm9vbCBoYW5kbGVkQnlTcGVjaWFsQ2FzZSA9IGZhbHNlOwogICAgaWYgKGlzR2VuZXJhdGVBdFVzZVNpdGUoaW5wdXQpKSB7CiAgICAgIGhhbmRsZWRCeVNwZWNpYWxDYXNlID0gdHJ1ZTsKICAgICAgaWYgKGlucHV0IGlzIEhJcykgewogICAgICAgIGVtaXRJcyhpbnB1dCwgJyE9PScsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIGlmIChpbnB1dCBpcyBISXNWaWFJbnRlcmNlcHRvcikgewogICAgICAgIGVtaXRJc1ZpYUludGVyY2VwdG9yKGlucHV0LCBzb3VyY2VJbmZvcm1hdGlvbiwgbmVnYXRpdmU6IHRydWUpOwogICAgICB9IGVsc2UgaWYgKGlucHV0IGlzIEhOb3QpIHsKICAgICAgICB1c2UoaW5wdXQuaW5wdXRzWzBdKTsKICAgICAgfSBlbHNlIGlmIChpbnB1dCBpcyBISWRlbnRpdHkpIHsKICAgICAgICBlbWl0SWRlbnRpdHlDb21wYXJpc29uKGlucHV0LCBzb3VyY2VJbmZvcm1hdGlvbiwgaW52ZXJzZTogdHJ1ZSk7CiAgICAgIH0gZWxzZSBpZiAoY2FuR2VuZXJhdGVPcHRpbWl6ZWRDb21wYXJpc29uKGlucHV0KSkgewogICAgICAgIEhSZWxhdGlvbmFsIHJlbGF0aW9uYWwgPSBpbnB1dDsKICAgICAgICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9IHJlbGF0aW9uYWwub3BlcmF0aW9uKCk7CiAgICAgICAgU3RyaW5nIG9wID0gbWFwUmVsYXRpb25hbE9wZXJhdG9yKG9wZXJhdGlvbi5uYW1lLCB0cnVlKTsKICAgICAgICBoYW5kbGVJbnZva2VCaW5hcnkoaW5wdXQsIG9wLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGxlZEJ5U3BlY2lhbENhc2UgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKCFoYW5kbGVkQnlTcGVjaWFsQ2FzZSkgewogICAgICB1c2UoaW5wdXQpOwogICAgICBwdXNoKG5ldyBqcy5QcmVmaXgoIiEiLCBwb3AoKSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFBhcmFtZXRlclZhbHVlKEhQYXJhbWV0ZXJWYWx1ZSBub2RlKSB7CiAgICBhc3NlcnQoIWlzR2VuZXJhdGVBdFVzZVNpdGUobm9kZSkpOwogICAgU3RyaW5nIG5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUobm9kZSk7CiAgICBwYXJhbWV0ZXJzLmFkZChuZXcganMuUGFyYW1ldGVyKG5hbWUpKTsKICAgIGRlY2xhcmVkTG9jYWxzLmFkZChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TG9jYWxWYWx1ZShITG9jYWxWYWx1ZSBub2RlKSB7CiAgICBhc3NlcnQoIWlzR2VuZXJhdGVBdFVzZVNpdGUobm9kZSkpOwogICAgU3RyaW5nIG5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUobm9kZSk7CiAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5hZGQobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFBoaShIUGhpIG5vZGUpIHsKICAgIC8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIGZvciBwaGlzIHRoYXQgYXJlIGdlbmVyYXRlZCBhdCB1c2UKICAgIC8vIHNpdGUuIEEgcGhpIGNhbiBiZSBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUgb25seSBpZiBpdCBpcyB0aGUKICAgIC8vIHJlc3VsdCBvZiBhIGNvbnRyb2wgZmxvdyBvcGVyYXRpb24uCiAgICBIQmFzaWNCbG9jayBpZkJsb2NrID0gbm9kZS5ibG9jay5kb21pbmF0b3I7CiAgICBhc3NlcnQoY29udHJvbEZsb3dPcGVyYXRvcnMuY29udGFpbnMoaWZCbG9jay5sYXN0KSk7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpZkJsb2NrLmxhc3QuaW5wdXRzWzBdOwogICAgaWYgKGlucHV0LmlzQ29uc3RhbnRGYWxzZSgpKSB7CiAgICAgIHVzZShub2RlLmlucHV0c1sxXSk7CiAgICB9IGVsc2UgaWYgKGlucHV0LmlzQ29uc3RhbnRUcnVlKCkpIHsKICAgICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgIH0gZWxzZSBpZiAobm9kZS5pbnB1dHNbMV0uaXNDb25zdGFudEJvb2xlYW4oKSkgewogICAgICBTdHJpbmcgb3BlcmF0aW9uID0gbm9kZS5pbnB1dHNbMV0uaXNDb25zdGFudEZhbHNlKCkgPyAnJiYnIDogJ3x8JzsKICAgICAgaWYgKG9wZXJhdGlvbiA9PSAnfHwnKSB7CiAgICAgICAgZ2VuZXJhdGVOb3QoaW5wdXQsIGlucHV0LnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB1c2UoaW5wdXQpOwogICAgICB9CiAgICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IHBvcCgpOwogICAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAgICBwdXNoKG5ldyBqcy5CaW5hcnkob3BlcmF0aW9uLCBsZWZ0LCBwb3AoKSkpOwogICAgfSBlbHNlIHsKICAgICAgdXNlKGlucHV0KTsKICAgICAganMuRXhwcmVzc2lvbiB0ZXN0ID0gcG9wKCk7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICAgIGpzLkV4cHJlc3Npb24gdGhlbiA9IHBvcCgpOwogICAgICB1c2Uobm9kZS5pbnB1dHNbMV0pOwogICAgICBwdXNoKG5ldyBqcy5Db25kaXRpb25hbCh0ZXN0LCB0aGVuLCBwb3AoKSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZXR1cm4oSFJldHVybiBub2RlKSB7CiAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gbm9kZS5pbnB1dHNbMF07CiAgICBpZiAoaW5wdXQuaXNDb25zdGFudE51bGwoKSkgewogICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlJldHVybigpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlJldHVybihwb3AoKSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VGhpcyhIVGhpcyBub2RlKSB7CiAgICBwdXNoKG5ldyBqcy5UaGlzKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUaHJvdyhIVGhyb3cgbm9kZSkgewogICAgaWYgKG5vZGUuaXNSZXRocm93KSB7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICAgIHB1c2hTdGF0ZW1lbnQoCiAgICAgICAgICBuZXcganMuVGhyb3cocG9wKCkpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBnZW5lcmF0ZVRocm93V2l0aEhlbHBlcigKICAgICAgICAgIF9jb21tb25FbGVtZW50cy53cmFwRXhjZXB0aW9uSGVscGVyLCBub2RlLmlucHV0c1swXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXdhaXQoSEF3YWl0IG5vZGUpIHsKICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICBwdXNoKG5ldyBqcy5Bd2FpdChwb3AoKSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0WWllbGQoSFlpZWxkIG5vZGUpIHsKICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5EYXJ0WWllbGQocG9wKCksIG5vZGUuaGFzU3RhcikKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UmFuZ2VDb252ZXJzaW9uKEhSYW5nZUNvbnZlcnNpb24gbm9kZSkgewogICAgLy8gUmFuZ2UgY29udmVyc2lvbiBpbnN0cnVjdGlvbnMgYXJlIHJlbW92ZWQgYnkgdGhlIHZhbHVlIHJhbmdlCiAgICAvLyBhbmFseXplci4KICAgIGFzc2VydChmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBub2RlKSB7CiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFNlcGFyYXRlIHRoZSB0d28gY2hlY2tzIG9mIHRoZSBib3VuZHMgY2hlY2ssIHNvLAogICAgLy8gZS5nLiwgdGhlIHplcm8gY2hlY2tzIGNhbiBiZSBzaGFyZWQgaWYgcG9zc2libGUuCgogICAgLy8gSWYgdGhlIGNoZWNrcyBhbHdheXMgc3VjY2VlZHMsIHdlIHdvdWxkIGhhdmUgcmVtb3ZlZCB0aGUgYm91bmRzIGNoZWNrCiAgICAvLyBjb21wbGV0ZWx5LgogICAgYXNzZXJ0KG5vZGUuc3RhdGljQ2hlY2tzICE9IEhCb3VuZHNDaGVjay5BTFdBWVNfVFJVRSk7CiAgICBpZiAobm9kZS5zdGF0aWNDaGVja3MgIT0gSEJvdW5kc0NoZWNrLkFMV0FZU19GQUxTRSkgewogICAgICBqcy5FeHByZXNzaW9uIHVuZGVyOwogICAgICBqcy5FeHByZXNzaW9uIG92ZXI7CiAgICAgIGlmIChub2RlLnN0YXRpY0NoZWNrcyAhPSBIQm91bmRzQ2hlY2suQUxXQVlTX0FCT1ZFX1pFUk8pIHsKICAgICAgICB1c2Uobm9kZS5pbmRleCk7CiAgICAgICAgaWYgKG5vZGUuaW5kZXguaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICB1bmRlciA9IGpzLmpzKCIjIDwgMCIsIHBvcCgpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAganMuRXhwcmVzc2lvbiBqc0luZGV4ID0gcG9wKCk7CiAgICAgICAgICB1bmRlciA9IGpzLmpzKCIjID4+PiAwICE9PSAjIiwgW2pzSW5kZXgsIGpzSW5kZXhdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobm9kZS5pbmRleAogICAgICAgICAgLmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgICBjaGVja0ludChub2RlLmluZGV4LCAnIT09Jyk7CiAgICAgICAgdW5kZXIgPSBwb3AoKTsKICAgICAgfQogICAgICBpZiAobm9kZS5zdGF0aWNDaGVja3MgIT0gSEJvdW5kc0NoZWNrLkFMV0FZU19CRUxPV19MRU5HVEgpIHsKICAgICAgICB2YXIgaW5kZXggPSBub2RlLmluZGV4OwogICAgICAgIHVzZShpbmRleCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBqc0luZGV4ID0gcG9wKCk7CiAgICAgICAgdXNlKG5vZGUubGVuZ3RoKTsKICAgICAgICBvdmVyID0gbmV3IGpzLkJpbmFyeSgiPj0iLCBqc0luZGV4LCBwb3AoKSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KG92ZXIgIT0gbnVsbCB8fCB1bmRlciAhPSBudWxsKTsKICAgICAganMuRXhwcmVzc2lvbiB1bmRlck92ZXIgPSB1bmRlciA9PSBudWxsCiAgICAgICAgICA/IG92ZXIKICAgICAgICAgIDogb3ZlciA9PSBudWxsID8gdW5kZXIgOiBuZXcganMuQmluYXJ5KCJ8fCIsIHVuZGVyLCBvdmVyKTsKICAgICAganMuU3RhdGVtZW50IHRoZW5Cb2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgIGN1cnJlbnRDb250YWluZXIgPSB0aGVuQm9keTsKICAgICAgZ2VuZXJhdGVUaHJvd1dpdGhIZWxwZXIoX2NvbW1vbkVsZW1lbnRzLnRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uLAogICAgICAgICAgW25vZGUuYXJyYXksIG5vZGUucmVwb3J0ZWRJbmRleF0sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICAgIHRoZW5Cb2R5ID0gdW53cmFwU3RhdGVtZW50KHRoZW5Cb2R5KTsKICAgICAgcHVzaFN0YXRlbWVudChuZXcganMuSWYubm9FbHNlKHVuZGVyT3ZlciwgdGhlbkJvZHkpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIGdlbmVyYXRlVGhyb3dXaXRoSGVscGVyKF9jb21tb25FbGVtZW50cy50aHJvd0luZGV4T3V0T2ZSYW5nZUV4Y2VwdGlvbiwKICAgICAgICAgIFtub2RlLmFycmF5LCBub2RlLmluZGV4XSk7CiAgICB9CiAgfQoKICB2b2lkIGdlbmVyYXRlVGhyb3dXaXRoSGVscGVyKEZ1bmN0aW9uRW50aXR5IGhlbHBlciwgYXJndW1lbnQsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGpzLkV4cHJlc3Npb24ganNIZWxwZXIgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhoZWxwZXIpOwogICAgTGlzdCBhcmd1bWVudHMgPSA8anMuRXhwcmVzc2lvbj5bXTsKICAgIGlmIChhcmd1bWVudCBpcyBMaXN0KSB7CiAgICAgIGFyZ3VtZW50LmZvckVhY2goKGluc3RydWN0aW9uKSB7CiAgICAgICAgdXNlKGluc3RydWN0aW9uKTsKICAgICAgICBhcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICB1c2UoYXJndW1lbnQpOwogICAgICBhcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgIH0KICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBoZWxwZXIsIG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQoYXJndW1lbnRzLmxlbmd0aCkpKTsKICAgIGpzLkNhbGwgdmFsdWUgPSBuZXcganMuQ2FsbChqc0hlbHBlciwgYXJndW1lbnRzLnRvTGlzdChncm93YWJsZTogZmFsc2UpLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAvLyBCVUcoNDkwNik6IFVzaW5nIHRocm93L3JldHVybiBoZXJlIGFkZHMgdG8gdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBjb2RlCiAgICAvLyBidXQgaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgZXhwbGljaXRseSB0ZWxsaW5nIHRoZSBKUyBlbmdpbmUgdGhhdAogICAgLy8gdGhpcyBjb2RlIHBhdGggd2lsbCB0ZXJtaW5hdGUgYWJydXB0bHkuIE5lZWRzIG1vcmUgd29yay4KICAgIGlmIChoZWxwZXIgPT0gX2NvbW1vbkVsZW1lbnRzLndyYXBFeGNlcHRpb25IZWxwZXIpIHsKICAgICAgcHVzaFN0YXRlbWVudCgKICAgICAgICAgIG5ldyBqcy5UaHJvdyh2YWx1ZSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlJldHVybih2YWx1ZSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRocm93RXhwcmVzc2lvbihIVGhyb3dFeHByZXNzaW9uIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzBdOwogICAgdXNlKGFyZ3VtZW50KTsKCiAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXIgPSBfY29tbW9uRWxlbWVudHMudGhyb3dFeHByZXNzaW9uSGVscGVyOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKGhlbHBlciwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CgogICAganMuRXhwcmVzc2lvbiBqc0hlbHBlciA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlcik7CiAgICBqcy5DYWxsIHZhbHVlID0gbmV3IGpzLkNhbGwoanNIZWxwZXIsIFtwb3AoKV0pCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHB1c2godmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaChIU3dpdGNoIG5vZGUpIHsKICAgIC8vIFN3aXRjaGVzIGFyZSBoYW5kbGVkIHVzaW5nIFt2aXNpdFN3aXRjaEluZm9dLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpYyhIU3RhdGljIG5vZGUpIHsKICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgYXNzZXJ0KGVsZW1lbnQuaXNGdW5jdGlvbiB8fCBlbGVtZW50LmlzRmllbGQpOwogICAgaWYgKGVsZW1lbnQuaXNGdW5jdGlvbikgewogICAgICBwdXNoKF9lbWl0dGVyCiAgICAgICAgICAuc3RhdGljQ2xvc3VyZUFjY2VzcyhlbGVtZW50KQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY1RlYXJPZmYoZWxlbWVudCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChfZW1pdHRlcgogICAgICAgICAgLnN0YXRpY0ZpZWxkQWNjZXNzKGVsZW1lbnQpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljR2V0KGVsZW1lbnQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMYXp5U3RhdGljKEhMYXp5U3RhdGljIG5vZGUpIHsKICAgIEZpZWxkRW50aXR5IGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbml0KGVsZW1lbnQpKTsKICAgIGpzLkV4cHJlc3Npb24gbGF6eUdldHRlciA9IF9lbWl0dGVyLmlzb2xhdGVMYXp5SW5pdGlhbGl6ZXJBY2Nlc3MoZWxlbWVudCk7CiAgICBqcy5DYWxsIGNhbGwgPSBuZXcganMuQ2FsbChsYXp5R2V0dGVyLCA8anMuRXhwcmVzc2lvbj5bXSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICBwdXNoKGNhbGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY1N0b3JlKEhTdGF0aWNTdG9yZSBub2RlKSB7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNTZXQobm9kZS5lbGVtZW50KSk7CiAgICBqcy5Ob2RlIHZhcmlhYmxlID0gX2VtaXR0ZXIuc3RhdGljRmllbGRBY2Nlc3Mobm9kZS5lbGVtZW50KTsKICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICBwdXNoKG5ldyBqcy5Bc3NpZ25tZW50KHZhcmlhYmxlLCBwb3AoKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBub2RlKSB7CiAgICB1c2Uobm9kZS5sZWZ0KTsKICAgIGpzLkV4cHJlc3Npb24ganNMZWZ0ID0gcG9wKCk7CiAgICB1c2Uobm9kZS5yaWdodCk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJysnLCBqc0xlZnQsIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ2lmeShIU3RyaW5naWZ5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IG5vZGUuaW5wdXRzLmZpcnN0OwogICAgaWYgKGlucHV0LmlzU3RyaW5nKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHVzZShpbnB1dCk7CiAgICB9IGVsc2UgaWYgKGlucHV0LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSB8fAogICAgICAgIGlucHV0LmlzQm9vbGVhbihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBKYXZhU2NyaXB0J3MgKyBvcGVyYXRvciB3aXRoIGEgc3RyaW5nIGZvciB0aGUgbGVmdCBvcGVyYW5kIHdpbGwgY29udmVydAogICAgICAvLyB0aGUgcmlnaHQgb3BlcmFuZCB0byBhIHN0cmluZywgYW5kIHRoZSBjb252ZXJzaW9uIHJlc3VsdCBpcyBjb3JyZWN0LgogICAgICB1c2UoaW5wdXQpOwogICAgICBpZiAobm9kZS51c2VkQnkubGVuZ3RoID09IDEgJiYKICAgICAgICAgIG5vZGUudXNlZEJ5WzBdIGlzIEhTdHJpbmdDb25jYXQgJiYKICAgICAgICAgIG5vZGUudXNlZEJ5WzBdLmlucHV0c1sxXSA9PSBub2RlKSB7CiAgICAgICAgLy8gVGhlIGNvbnRleHQgaXMgYWxyZWFkeSA8c3RyaW5nPiArIHZhbHVlLgogICAgICB9IGVsc2UgewogICAgICAgIC8vIEZvcmNlIGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIGZpcnN0IG9wZXJhbmQuCiAgICAgICAgcHVzaChuZXcganMuQmluYXJ5KCcrJywganMuc3RyaW5nKCIiKSwgcG9wKCkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBGdW5jdGlvbkVudGl0eSBjb252ZXJ0VG9TdHJpbmcgPQogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0ludGVycG9sYXRpb25IZWxwZXI7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKGNvbnZlcnRUb1N0cmluZywgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICAgIGpzLkV4cHJlc3Npb24ganNIZWxwZXIgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb252ZXJ0VG9TdHJpbmcpOwogICAgICB1c2UoaW5wdXQpOwogICAgICBwdXNoKG5ldyBqcy5DYWxsKGpzSGVscGVyLCA8anMuRXhwcmVzc2lvbj5bcG9wKCldLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsTGlzdChITGl0ZXJhbExpc3Qgbm9kZSkgewogICAgX3JlZ2lzdHJ5CiAgICAgICAgLy8gaWdub3JlOmRlcHJlY2F0ZWRfbWVtYmVyX3VzZV9mcm9tX3NhbWVfcGFja2FnZQogICAgICAgIC5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MpOwogICAgZ2VuZXJhdGVBcnJheUxpdGVyYWwobm9kZSk7CiAgfQoKICB2b2lkIGdlbmVyYXRlQXJyYXlMaXRlcmFsKEhMaXRlcmFsTGlzdCBub2RlKSB7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGVsZW1lbnRzID0gbm9kZS5pbnB1dHMubWFwKChISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgICAgdXNlKGlucHV0KTsKICAgICAgcmV0dXJuIHBvcCgpOwogICAgfSkudG9MaXN0KCk7CiAgICBwdXNoKG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGVsZW1lbnRzKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluZGV4KEhJbmRleCBub2RlKSB7CiAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICBqcy5FeHByZXNzaW9uIHJlY2VpdmVyID0gcG9wKCk7CiAgICB1c2Uobm9kZS5pbmRleCk7CiAgICBwdXNoKG5ldyBqcy5Qcm9wZXJ0eUFjY2VzcyhyZWNlaXZlciwgcG9wKCkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIG5vZGUpIHsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgIHVzZShub2RlLmluZGV4KTsKICAgIGpzLkV4cHJlc3Npb24gaW5kZXggPSBwb3AoKTsKICAgIHVzZShub2RlLnZhbHVlKTsKICAgIHB1c2gobmV3IGpzLkFzc2lnbm1lbnQobmV3IGpzLlByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBpbmRleCksIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgdm9pZCBjaGVja0ludChISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXApIHsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIGxlZnQgPSBwb3AoKTsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIG9yMCA9IG5ldyBqcy5CaW5hcnkoInwiLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdW1iZXIoIjAiKSk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoY21wLCBsZWZ0LCBvcjApKTsKICB9CgogIHZvaWQgY2hlY2tCaWdJbnQoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCwgU3RyaW5nIGNtcCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIGxlZnQgPSBwb3AoKTsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIHJpZ2h0ID0gcG9wKCk7CiAgICAvLyBUT0RPKDQ5ODQpOiBEZWFsIHdpdGggaW5maW5pdHkgYW5kIC0wLjAuCiAgICBqcy5FeHByZXNzaW9uIG1hdGhGbG9vckNhbGwgPSBqcy5qcygnTWF0aC5mbG9vcigjKScsCiAgICAgICAgPGpzLkV4cHJlc3Npb24+W2xlZnRdKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgcHVzaChqcy5qcygnIyAkY21wICMnLCA8anMuRXhwcmVzc2lvbj5bCiAgICAgIG1hdGhGbG9vckNhbGwsCiAgICAgIHJpZ2h0CiAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIHZvaWQgY2hlY2tUeXBlT2YoSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTdHJpbmcgdHlwZU5hbWUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICB1c2UoaW5wdXQpOwogICAganMuRXhwcmVzc2lvbiB0eXBlT2YgPSBuZXcganMuUHJlZml4KCJ0eXBlb2YiLCBwb3AoKSk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoY21wLCB0eXBlT2YsIGpzLnN0cmluZyh0eXBlTmFtZSkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgdm9pZCBjaGVja051bSgKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcmV0dXJuIGNoZWNrVHlwZU9mKGlucHV0LCBjbXAsICdudW1iZXInLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIGNoZWNrRG91YmxlKAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXAsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICByZXR1cm4gY2hlY2tOdW0oaW5wdXQsIGNtcCwgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdm9pZCBjaGVja1N0cmluZygKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcmV0dXJuIGNoZWNrVHlwZU9mKGlucHV0LCBjbXAsICdzdHJpbmcnLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIGNoZWNrQm9vbCgKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcmV0dXJuIGNoZWNrVHlwZU9mKGlucHV0LCBjbXAsICdib29sZWFuJywgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdm9pZCBjaGVja09iamVjdCgKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgYXNzZXJ0KE51bGxDb25zdGFudFZhbHVlLkpzTnVsbCA9PSAnbnVsbCcpOwogICAgaWYgKGNtcCA9PSAiPT09IikgewogICAgICBjaGVja1R5cGVPZihpbnB1dCwgJz09PScsICdvYmplY3QnLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IHBvcCgpOwogICAgICB1c2UoaW5wdXQpOwogICAgICBqcy5FeHByZXNzaW9uIG5vdE51bGwgPSBuZXcganMuQmluYXJ5KCIhPT0iLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdWxsKCkpOwogICAgICBwdXNoKG5ldyBqcy5CaW5hcnkoIiYmIiwgbGVmdCwgbm90TnVsbCkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChjbXAgPT0gIiE9PSIpOwogICAgICBjaGVja1R5cGVPZihpbnB1dCwgJyE9PScsICdvYmplY3QnLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IHBvcCgpOwogICAgICB1c2UoaW5wdXQpOwogICAgICBqcy5FeHByZXNzaW9uIGVxTnVsbCA9IG5ldyBqcy5CaW5hcnkoIj09PSIsIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bGwoKSk7CiAgICAgIHB1c2gobmV3IGpzLkJpbmFyeSgifHwiLCBsZWZ0LCBlcU51bGwpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQXJyYXkoSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wKSB7CiAgICB1c2UoaW5wdXQpOwogICAganMuUHJvcGVydHlBY2Nlc3MgY29uc3RydWN0b3IgPQogICAgICAgIG5ldyBqcy5Qcm9wZXJ0eUFjY2Vzcy5maWVsZChwb3AoKSwgJ2NvbnN0cnVjdG9yJyk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoY21wLCBjb25zdHJ1Y3RvciwgbmV3IGpzLlZhcmlhYmxlVXNlKCdBcnJheScpKSk7CiAgfQoKICB2b2lkIGNoZWNrRmllbGRFeGlzdHMoSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgZmllbGROYW1lKSB7CiAgICB1c2UoaW5wdXQpOwogICAganMuUHJvcGVydHlBY2Nlc3MgZmllbGQgPSBuZXcganMuUHJvcGVydHlBY2Nlc3MuZmllbGQocG9wKCksIGZpZWxkTmFtZSk7CiAgICAvLyBEb3VibGUgbmVnYXRlIHRvIGJvb2xpZnkgdGhlIHJlc3VsdC4KICAgIHB1c2gobmV3IGpzLlByZWZpeCgnIScsIG5ldyBqcy5QcmVmaXgoJyEnLCBmaWVsZCkpKTsKICB9CgogIHZvaWQgY2hlY2tGaWVsZERvZXNOb3RFeGlzdChISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBmaWVsZE5hbWUpIHsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5Qcm9wZXJ0eUFjY2VzcyBmaWVsZCA9IG5ldyBqcy5Qcm9wZXJ0eUFjY2Vzcy5maWVsZChwb3AoKSwgZmllbGROYW1lKTsKICAgIHB1c2gobmV3IGpzLlByZWZpeCgnIScsIGZpZWxkKSk7CiAgfQoKICB2b2lkIGNoZWNrSW1tdXRhYmxlQXJyYXkoSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICBjaGVja0ZpZWxkRXhpc3RzKGlucHV0LCAnaW1tdXRhYmxlXCRsaXN0Jyk7CiAgfQoKICB2b2lkIGNoZWNrTXV0YWJsZUFycmF5KEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgY2hlY2tGaWVsZERvZXNOb3RFeGlzdChpbnB1dCwgJ2ltbXV0YWJsZVwkbGlzdCcpOwogIH0KCiAgdm9pZCBjaGVja0V4dGVuZGFibGVBcnJheShISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIGNoZWNrRmllbGREb2VzTm90RXhpc3QoaW5wdXQsICdmaXhlZFwkbGVuZ3RoJyk7CiAgfQoKICB2b2lkIGNoZWNrRml4ZWRBcnJheShISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIGNoZWNrRmllbGRFeGlzdHMoaW5wdXQsICdmaXhlZFwkbGVuZ3RoJyk7CiAgfQoKICB2b2lkIGNoZWNrTnVsbChISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIHVzZShpbnB1dCk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJz09JywgcG9wKCksIG5ldyBqcy5MaXRlcmFsTnVsbCgpKSk7CiAgfQoKICB2b2lkIGNoZWNrTm9uTnVsbChISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIHVzZShpbnB1dCk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJyE9JywgcG9wKCksIG5ldyBqcy5MaXRlcmFsTnVsbCgpKSk7CiAgfQoKICB2b2lkIGNoZWNrVHlwZShISW5zdHJ1Y3Rpb24gaW5wdXQsIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciwgRGFydFR5cGUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIGlmICh0eXBlLmlzSW50ZXJmYWNlVHlwZSkgewogICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSB7CiAgICAgICAgY2hlY2tBcnJheShpbnB1dCwgbmVnYXRpdmUgPyAnIT09JyA6ICc9PT0nKTsKICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcykgewogICAgICAgIGlmIChuZWdhdGl2ZSkgewogICAgICAgICAgY2hlY2tJbW11dGFibGVBcnJheShpbnB1dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNoZWNrTXV0YWJsZUFycmF5KGlucHV0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MpIHsKICAgICAgICBpZiAobmVnYXRpdmUpIHsKICAgICAgICAgIGNoZWNrRml4ZWRBcnJheShpbnB1dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNoZWNrRXh0ZW5kYWJsZUFycmF5KGlucHV0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzKSB7CiAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CiAgICAgICAgICBjaGVja0V4dGVuZGFibGVBcnJheShpbnB1dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNoZWNrRml4ZWRBcnJheShpbnB1dCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MpIHsKICAgICAgICBpZiAobmVnYXRpdmUpIHsKICAgICAgICAgIGNoZWNrTXV0YWJsZUFycmF5KGlucHV0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2hlY2tJbW11dGFibGVBcnJheShpbnB1dCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgaWYgKGludGVyY2VwdG9yICE9IG51bGwpIHsKICAgICAgY2hlY2tUeXBlVmlhUHJvcGVydHkoaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNoZWNrVHlwZVZpYVByb3BlcnR5KGlucHV0LCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tUeXBlVmlhUHJvcGVydHkoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCwgRGFydFR5cGUgdHlwZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayh0eXBlKSk7CgogICAgdXNlKGlucHV0KTsKCiAgICBqcy5Qcm9wZXJ0eUFjY2VzcyBmaWVsZCA9CiAgICAgICAgbmV3IGpzLlByb3BlcnR5QWNjZXNzKHBvcCgpLCBfbmFtZXIub3BlcmF0b3JJc1R5cGUodHlwZSkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgLy8gV2UgYWx3YXlzIG5lZ2F0ZSBhdCBsZWFzdCBvbmNlIHNvIHRoYXQgdGhlIHJlc3VsdCBpcyBib29saWZpZWQuCiAgICBwdXNoKG5ldyBqcy5QcmVmaXgoJyEnLCBmaWVsZCkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIG5vdCBuZWdhdGVkLCBwdXQgYW5vdGhlciAnIScgaW4gZnJvbnQuCiAgICBpZiAoIW5lZ2F0aXZlKSB7CiAgICAgIHB1c2gobmV3IGpzLlByZWZpeCgnIScsIHBvcCgpKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tUeXBlVmlhSW5zdGFuY2VvZihISW5zdHJ1Y3Rpb24gaW5wdXQsIEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFuY2VDb25zdHJ1Y3Rvcih0eXBlKSk7CgogICAgdXNlKGlucHV0KTsKCiAgICBqcy5FeHByZXNzaW9uIGpzQ2xhc3NSZWZlcmVuY2UgPSBfZW1pdHRlci5jb25zdHJ1Y3RvckFjY2Vzcyh0eXBlLmVsZW1lbnQpOwogICAgcHVzaChqcy5qcygnIyBpbnN0YW5jZW9mICMnLAogICAgICAgIFtwb3AoKSwganNDbGFzc1JlZmVyZW5jZV0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgaWYgKG5lZ2F0aXZlKSB7CiAgICAgIHB1c2gobmV3IGpzLlByZWZpeCgnIScsIHBvcCgpKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIHZvaWQgaGFuZGxlTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGVDaGVjaygKICAgICAgSEluc3RydWN0aW9uIGlucHV0LAogICAgICBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3IsCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIGFzc2VydCghaWRlbnRpY2FsKHR5cGUuZWxlbWVudCwgX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcykgJiYKICAgICAgICAhX2NvbW1vbkVsZW1lbnRzLmlzTGlzdFN1cGVydHlwZSh0eXBlLmVsZW1lbnQpICYmCiAgICAgICAgIV9jb21tb25FbGVtZW50cy5pc1N0cmluZ09ubHlTdXBlcnR5cGUodHlwZS5lbGVtZW50KSk7CiAgICBTdHJpbmcgcmVsYXRpb24gPSBuZWdhdGl2ZSA/ICchPT0nIDogJz09PSc7CiAgICBjaGVja051bShpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gbnVtYmVyVGVzdCA9IHBvcCgpOwogICAgY2hlY2tTdHJpbmcoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIHN0cmluZ1Rlc3QgPSBwb3AoKTsKICAgIGNoZWNrT2JqZWN0KGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBvYmplY3RUZXN0ID0gcG9wKCk7CiAgICBjaGVja1R5cGUoaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgIFN0cmluZyBjb21iaW5lciA9IG5lZ2F0aXZlID8gJyYmJyA6ICd8fCc7CiAgICBTdHJpbmcgY29tYmluZXIyID0gbmVnYXRpdmUgPyAnfHwnIDogJyYmJzsKICAgIHB1c2gobmV3IGpzLkJpbmFyeSgKICAgICAgICAgICAgY29tYmluZXIsCiAgICAgICAgICAgIG5ldyBqcy5CaW5hcnkoY29tYmluZXIsIG51bWJlclRlc3QsIHN0cmluZ1Rlc3QpCiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICAgICAgbmV3IGpzLkJpbmFyeShjb21iaW5lcjIsIG9iamVjdFRlc3QsIHBvcCgpKQogICAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgdm9pZCBoYW5kbGVTdHJpbmdTdXBlcnR5cGVDaGVjayhISW5zdHJ1Y3Rpb24gaW5wdXQsIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciwKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgbmVnYXRpdmU6IGZhbHNlfSkgewogICAgYXNzZXJ0KCFpZGVudGljYWwodHlwZS5lbGVtZW50LCBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzKSAmJgogICAgICAgICFfY29tbW9uRWxlbWVudHMuaXNMaXN0U3VwZXJ0eXBlKHR5cGUuZWxlbWVudCkgJiYKICAgICAgICAhX2NvbW1vbkVsZW1lbnRzLmlzTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGUodHlwZS5lbGVtZW50KSk7CiAgICBTdHJpbmcgcmVsYXRpb24gPSBuZWdhdGl2ZSA/ICchPT0nIDogJz09PSc7CiAgICBjaGVja1N0cmluZyhpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gc3RyaW5nVGVzdCA9IHBvcCgpOwogICAgY2hlY2tPYmplY3QoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIG9iamVjdFRlc3QgPSBwb3AoKTsKICAgIGNoZWNrVHlwZShpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLCBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgU3RyaW5nIGNvbWJpbmVyID0gbmVnYXRpdmUgPyAnfHwnIDogJyYmJzsKICAgIHB1c2gobmV3IGpzLkJpbmFyeShuZWdhdGl2ZSA/ICcmJicgOiAnfHwnLCBzdHJpbmdUZXN0LAogICAgICAgIG5ldyBqcy5CaW5hcnkoY29tYmluZXIsIG9iamVjdFRlc3QsIHBvcCgpKSkpOwogIH0KCiAgdm9pZCBoYW5kbGVMaXN0T3JTdXBlcnR5cGVDaGVjayhISW5zdHJ1Y3Rpb24gaW5wdXQsIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciwKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgbmVnYXRpdmU6IGZhbHNlfSkgewogICAgYXNzZXJ0KCFpZGVudGljYWwodHlwZS5lbGVtZW50LCBfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpICYmCiAgICAgICAgIV9jb21tb25FbGVtZW50cy5pc1N0cmluZ09ubHlTdXBlcnR5cGUodHlwZS5lbGVtZW50KSAmJgogICAgICAgICFfY29tbW9uRWxlbWVudHMuaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZSh0eXBlLmVsZW1lbnQpKTsKICAgIFN0cmluZyByZWxhdGlvbiA9IG5lZ2F0aXZlID8gJyE9PScgOiAnPT09JzsKICAgIGNoZWNrT2JqZWN0KGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBvYmplY3RUZXN0ID0gcG9wKCk7CiAgICBjaGVja0FycmF5KGlucHV0LCByZWxhdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIGFycmF5VGVzdCA9IHBvcCgpOwogICAgY2hlY2tUeXBlKGlucHV0LCBpbnRlcmNlcHRvciwgdHlwZSwgc291cmNlSW5mb3JtYXRpb24sIG5lZ2F0aXZlOiBuZWdhdGl2ZSk7CiAgICBTdHJpbmcgY29tYmluZXIgPSBuZWdhdGl2ZSA/ICcmJicgOiAnfHwnOwogICAgcHVzaChuZXcganMuQmluYXJ5KG5lZ2F0aXZlID8gJ3x8JyA6ICcmJicsIG9iamVjdFRlc3QsCiAgICAgICAgICAgIG5ldyBqcy5CaW5hcnkoY29tYmluZXIsIGFycmF5VGVzdCwgcG9wKCkpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJcyhISXMgbm9kZSkgewogICAgZW1pdElzKG5vZGUsICI9PT0iLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJc1ZpYUludGVyY2VwdG9yKEhJc1ZpYUludGVyY2VwdG9yIG5vZGUpIHsKICAgIGVtaXRJc1ZpYUludGVyY2VwdG9yKG5vZGUsIG5vZGUuc291cmNlSW5mb3JtYXRpb24sIG5lZ2F0aXZlOiBmYWxzZSk7CiAgfQoKICB2b2lkIGVtaXRJcyhISXMgbm9kZSwgU3RyaW5nIHJlbGF0aW9uLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgRGFydFR5cGUgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb247CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2sodHlwZSkpOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gbm9kZS5leHByZXNzaW9uOwoKICAgIC8vIElmIHRoaXMgaXMgY2hhbmdlZCB0byBzaW5nbGUgPT0gdGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIGJlbG93IHRoYXQgbXVzdAogICAgLy8gYmUgY2hhbmdlZCB0byBtYXRjaC4KICAgIGFzc2VydChyZWxhdGlvbiA9PSAnPT09JyB8fCByZWxhdGlvbiA9PSAnIT09Jyk7CiAgICBib29sIG5lZ2F0aXZlID0gcmVsYXRpb24gPT0gJyE9PSc7CgogICAgaWYgKG5vZGUuaXNWYXJpYWJsZUNoZWNrIHx8IG5vZGUuaXNDb21wb3VuZENoZWNrKSB7CiAgICAgIHVzZShub2RlLmNoZWNrQ2FsbCk7CiAgICAgIGlmIChuZWdhdGl2ZSkgcHVzaChuZXcganMuUHJlZml4KCchJywgcG9wKCkpKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChub2RlLmlzUmF3Q2hlY2spOwogICAgICBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3IgPSBub2RlLmludGVyY2VwdG9yOwogICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMubnVsbENsYXNzKSB7CiAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CiAgICAgICAgICBjaGVja05vbk51bGwoaW5wdXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjaGVja051bGwoaW5wdXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09CiAgICAgICAgICBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MgLyogfHwgdHlwZS50cmVhdEFzRHluYW1pYyovKSB7CiAgICAgICAgLy8gVGhlIGNvbnN0YW50IGZvbGRlciBhbHNvIGRvZXMgdGhpcyBvcHRpbWl6YXRpb24sIGJ1dCB3ZSBtYWtlCiAgICAgICAgLy8gaXQgc2FmZSBieSBhc3N1bWluZyBpdCBtYXkgaGF2ZSBub3QgcnVuLgogICAgICAgIHB1c2gobmV3TGl0ZXJhbEJvb2woIW5lZ2F0aXZlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSB7CiAgICAgICAgY2hlY2tTdHJpbmcoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MpIHsKICAgICAgICBjaGVja0RvdWJsZShpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5udW1DbGFzcykgewogICAgICAgIGNoZWNrTnVtKGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcykgewogICAgICAgIGNoZWNrQm9vbChpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5pbnRDbGFzcykgewogICAgICAgIC8vIFRoZSBpcyBjaGVjayBpbiB0aGUgY29kZSB0ZWxscyB1cyB0aGF0IGl0IG1pZ2h0IG5vdCBiZSBhbgogICAgICAgIC8vIGludC4gU28gd2UgZG8gYSB0eXBlb2YgZmlyc3QgdG8gYXZvaWQgcG9zc2libGUKICAgICAgICAvLyBkZW9wdGltaXphdGlvbnMgb24gdGhlIEpTIGVuZ2luZSBkdWUgdG8gdGhlIE1hdGguZmxvb3IgY2hlY2suCiAgICAgICAgY2hlY2tOdW0oaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAganMuRXhwcmVzc2lvbiBudW1UZXN0ID0gcG9wKCk7CiAgICAgICAgY2hlY2tCaWdJbnQoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgcHVzaChuZXcganMuQmluYXJ5KG5lZ2F0aXZlID8gJ3x8JyA6ICcmJicsIG51bVRlc3QsIHBvcCgpKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0gZWxzZSBpZiAobm9kZS51c2VJbnN0YW5jZU9mKSB7CiAgICAgICAgYXNzZXJ0KGludGVyY2VwdG9yID09IG51bGwpOwogICAgICAgIGNoZWNrVHlwZVZpYUluc3RhbmNlb2YoaW5wdXQsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgICB9IGVsc2UgaWYgKF9jb21tb25FbGVtZW50cy5pc051bWJlck9yU3RyaW5nU3VwZXJ0eXBlKGVsZW1lbnQpKSB7CiAgICAgICAgaGFuZGxlTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGVDaGVjaygKICAgICAgICAgICAgaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgfSBlbHNlIGlmIChfY29tbW9uRWxlbWVudHMuaXNTdHJpbmdPbmx5U3VwZXJ0eXBlKGVsZW1lbnQpKSB7CiAgICAgICAgaGFuZGxlU3RyaW5nU3VwZXJ0eXBlQ2hlY2soaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MgfHwKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pc0xpc3RTdXBlcnR5cGUoZWxlbWVudCkpIHsKICAgICAgICBoYW5kbGVMaXN0T3JTdXBlcnR5cGVDaGVjayhpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgICB9IGVsc2UgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgICBjaGVja1R5cGUoaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgfSBlbHNlIGlmICgoaW5wdXQuaXNQcmltaXRpdmUoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlICYmCiAgICAgICAgICAgICAgaW5wdXQuaXNQcmltaXRpdmVBcnJheShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5RmFsc2UpIHx8CiAgICAgICAgICBpbnB1dC5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgY2hlY2tPYmplY3QoaW5wdXQsIHJlbGF0aW9uLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICBqcy5FeHByZXNzaW9uIG9iamVjdFRlc3QgPSBwb3AoKTsKICAgICAgICBjaGVja1R5cGUoaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgICBwdXNoKG5ldyBqcy5CaW5hcnkobmVnYXRpdmUgPyAnfHwnIDogJyYmJywgb2JqZWN0VGVzdCwgcG9wKCkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjaGVja1R5cGUoaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBlbWl0SXNWaWFJbnRlcmNlcHRvcigKICAgICAgSElzVmlhSW50ZXJjZXB0b3Igbm9kZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIGNoZWNrVHlwZVZpYVByb3BlcnR5KAogICAgICAgIG5vZGUuaW50ZXJjZXB0b3IsIG5vZGUudHlwZUV4cHJlc3Npb24sIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIG5lZ2F0aXZlOiBuZWdhdGl2ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmlzVHlwZUNoZWNrIHx8IG5vZGUuaXNDYXN0Q2hlY2spOwogICAgRGFydFR5cGUgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb247CiAgICBhc3NlcnQoIXR5cGUuaXNUeXBlZGVmKTsKICAgIGFzc2VydCghdHlwZS5pc0R5bmFtaWMpOwogICAgYXNzZXJ0KCF0eXBlLmlzVm9pZCk7CiAgICBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSkgewogICAgICAvLyBUT0RPKDUwMjIpOiBXZSBjdXJyZW50bHkgZ2VuZXJhdGUgJGlzRnVuY3Rpb24gY2hlY2tzIGZvcgogICAgICAvLyBmdW5jdGlvbiB0eXBlcy4KICAgICAgX3JlZ2lzdHJ5CiAgICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2soX2NvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uVHlwZSkpOwogICAgfQogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pc0NoZWNrKHR5cGUpKTsKCiAgICBDaGVja2VkTW9kZUhlbHBlciBoZWxwZXIgPSBfY2hlY2tlZE1vZGVIZWxwZXJzLmdldENoZWNrZWRNb2RlSGVscGVyKAogICAgICAgIHR5cGUsIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICB0eXBlQ2FzdDogbm9kZS5pc0Nhc3RDaGVjayk7CgogICAgU3RhdGljVXNlIHN0YXRpY1VzZSA9IGhlbHBlci5nZXRTdGF0aWNVc2UoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzKTsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UpOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anMuRXhwcmVzc2lvbj5bXTsKICAgIHVzZShub2RlLmNoZWNrZWRJbnB1dCk7CiAgICBhcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgIGhlbHBlci5nZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHModGhpcywgX25hbWVyLCBub2RlLCBhcmd1bWVudHMpOwogICAgcHVzaCgKICAgICAgICBuZXcganMuQ2FsbChfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhzdGF0aWNVc2UuZWxlbWVudCksIGFyZ3VtZW50cykKICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJpbWl0aXZlQ2hlY2soSFByaW1pdGl2ZUNoZWNrIG5vZGUpIHsKICAgIGpzLkV4cHJlc3Npb24gdGVzdCA9IF9nZW5lcmF0ZVJlY2VpdmVyT3JBcmd1bWVudFR5cGVUZXN0KG5vZGUpOwogICAganMuQmxvY2sgb2xkQ29udGFpbmVyID0gY3VycmVudENvbnRhaW5lcjsKICAgIGpzLlN0YXRlbWVudCBib2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICBjdXJyZW50Q29udGFpbmVyID0gYm9keTsKICAgIGlmIChub2RlLmlzQXJndW1lbnRUeXBlQ2hlY2spIHsKICAgICAgZ2VuZXJhdGVUaHJvd1dpdGhIZWxwZXIoCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24sIG5vZGUuY2hlY2tlZElucHV0LAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIGlmIChub2RlLmlzUmVjZWl2ZXJUeXBlQ2hlY2spIHsKICAgICAgdXNlKG5vZGUuY2hlY2tlZElucHV0KTsKICAgICAganMuTmFtZSBtZXRob2ROYW1lID0KICAgICAgICAgIF9uYW1lci5pbnZvY2F0aW9uTmFtZShub2RlLnJlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3IpOwogICAgICBqcy5FeHByZXNzaW9uIGNhbGwgPSBqcy5wcm9wZXJ0eUNhbGwoCiAgICAgICAgICBwb3AoKSwgbWV0aG9kTmFtZSwgW10pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcHVzaFN0YXRlbWVudCgKICAgICAgICAgIG5ldyBqcy5SZXR1cm4oY2FsbCkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICBib2R5ID0gdW53cmFwU3RhdGVtZW50KGJvZHkpOwogICAgcHVzaFN0YXRlbWVudChuZXcganMuSWYubm9FbHNlKHRlc3QsIGJvZHkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBqcy5FeHByZXNzaW9uIF9nZW5lcmF0ZVJlY2VpdmVyT3JBcmd1bWVudFR5cGVUZXN0KEhQcmltaXRpdmVDaGVjayBub2RlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gbm9kZS50eXBlRXhwcmVzc2lvbjsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IG5vZGUuY2hlY2tlZElucHV0OwogICAgQWJzdHJhY3RWYWx1ZSBjaGVja2VkVHlwZSA9IG5vZGUuY2hlY2tlZFR5cGU7CiAgICAvLyBUaGlzIHBhdGggaXMgbm8gbG9uZ2VyIHVzZWQgZm9yIGluZGV4YWJsZSBwcmltaXRpdmUgdHlwZXMuCiAgICBhc3NlcnQoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNKc0luZGV4YWJsZShjaGVja2VkVHlwZSkuaXNQb3RlbnRpYWxseUZhbHNlKTsKICAgIC8vIEZpZ3VyZSBvdXQgaWYgaXQgaXMgYmVuZWZpY2lhbCB0byB1c2UgYSBudWxsIGNoZWNrLiAgVjggZ2VuZXJhbGx5IHByZWZlcnMKICAgIC8vICd0eXBlb2YnIGNoZWNrcywgYnV0IGZvciBpbnRlZ2VycyB3ZSBjYW5ub3QgY29tcGlsZSB0aGlzIHRlc3QgaW50byBhCiAgICAvLyBzaW5nbGUgdHlwZW9mIGNoZWNrIHNvIHRoZSBudWxsIGNoZWNrIGlzIGNoZWFwZXIuCiAgICBpZiAodHlwZSA9PSBfY29tbW9uRWxlbWVudHMubnVtVHlwZSkgewogICAgICAvLyBpbnB1dCBpcyAhbnVtCiAgICAgIGNoZWNrTnVtKGlucHV0LCAnIT09JywgaW5wdXQuc291cmNlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm4gcG9wKCk7CiAgICB9CiAgICBpZiAodHlwZSA9PSBfY29tbW9uRWxlbWVudHMuYm9vbFR5cGUpIHsKICAgICAgLy8gaW5wdXQgaXMgIWJvb2wKICAgICAgY2hlY2tCb29sKGlucHV0LCAnIT09JywgaW5wdXQuc291cmNlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm4gcG9wKCk7CiAgICB9CiAgICB0aHJvdyBmYWlsZWRBdChpbnB1dCwgJ1VuZXhwZWN0ZWQgY2hlY2s6ICR0eXBlLicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xDb252ZXJzaW9uKEhCb29sQ29udmVyc2lvbiBub2RlKSB7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2soX2NvbW1vbkVsZW1lbnRzLmJvb2xUeXBlKSk7CiAgICBDaGVja2VkTW9kZUhlbHBlciBoZWxwZXIgPSBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignYm9vbENvbnZlcnNpb25DaGVjaycpOwogICAgU3RhdGljVXNlIHN0YXRpY1VzZSA9IGhlbHBlci5nZXRTdGF0aWNVc2UoX2NvbW1vbkVsZW1lbnRzKTsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UpOwogICAgdXNlKG5vZGUuY2hlY2tlZElucHV0KTsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gW3BvcCgpXTsKICAgIHB1c2goCiAgICAgICAgbmV3IGpzLkNhbGwoX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3Moc3RhdGljVXNlLmVsZW1lbnQpLCBhcmd1bWVudHMpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIG5vZGUpIHsKICAgIC8vIFtIVHlwZUtub3duXSBpbnN0cnVjdGlvbnMgYXJlIHJlbW92ZWQgYmVmb3JlIGdlbmVyYXRpbmcgY29kZS4KICAgIGFzc2VydChmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUluZm9SZWFkUmF3KEhUeXBlSW5mb1JlYWRSYXcgbm9kZSkgewogICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgIHB1c2goanMuanMocicjLiMnLCBbcmVjZWl2ZXIsIF9uYW1lci5ydGlGaWVsZEpzTmFtZV0pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlSW5mb1JlYWRWYXJpYWJsZShIVHlwZUluZm9SZWFkVmFyaWFibGUgbm9kZSkgewogICAgVHlwZVZhcmlhYmxlRW50aXR5IGVsZW1lbnQgPSBub2RlLnZhcmlhYmxlLmVsZW1lbnQ7CiAgICBpbnQgaW5kZXggPSBlbGVtZW50LmluZGV4OwoKICAgIGpzLkV4cHJlc3Npb24gaW50ZXJjZXB0b3I7CiAgICBpZiAobm9kZS5pc0ludGVyY2VwdGVkKSB7CiAgICAgIHVzZShub2RlLmludGVyY2VwdG9yKTsKICAgICAgaW50ZXJjZXB0b3IgPSBwb3AoKTsKICAgIH0KICAgIEhJbnN0cnVjdGlvbiBvYmplY3QgPSBub2RlLm9iamVjdDsKICAgIHVzZShvYmplY3QpOwogICAganMuRXhwcmVzc2lvbiByZWNlaXZlciA9IHBvcCgpOwoKICAgIGlmICh0eXBlVmFyaWFibGVBY2Nlc3NOZWVkc1N1YnN0aXR1dGlvbihlbGVtZW50LCBvYmplY3QuaW5zdHJ1Y3Rpb25UeXBlKSkgewogICAgICBqcy5FeHByZXNzaW9uIHR5cGVOYW1lID0KICAgICAgICAgIGpzLnF1b3RlTmFtZShfbmFtZXIucnVudGltZVR5cGVOYW1lKGVsZW1lbnQudHlwZURlY2xhcmF0aW9uKSk7CiAgICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWQpIHsKICAgICAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXJFbGVtZW50ID0KICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlQXJndW1lbnRJbnRlcmNlcHRlZDsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICAgIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKGhlbHBlckVsZW1lbnQsIENhbGxTdHJ1Y3R1cmUuRk9VUl9BUkdTKSk7CiAgICAgICAganMuRXhwcmVzc2lvbiBoZWxwZXIgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhoZWxwZXJFbGVtZW50KTsKICAgICAgICBwdXNoKGpzLmpzKHInIygjLCAjLCAjLCAjKScsIFsKICAgICAgICAgIGhlbHBlciwKICAgICAgICAgIGludGVyY2VwdG9yLAogICAgICAgICAgcmVjZWl2ZXIsCiAgICAgICAgICB0eXBlTmFtZSwKICAgICAgICAgIGpzLmpzLm51bWJlcihpbmRleCkKICAgICAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9IGVsc2UgewogICAgICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlckVsZW1lbnQgPSBfY29tbW9uRWxlbWVudHMuZ2V0UnVudGltZVR5cGVBcmd1bWVudDsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICAgIGhlbHBlckVsZW1lbnQsIENhbGxTdHJ1Y3R1cmUuVEhSRUVfQVJHUykpOwogICAgICAgIGpzLkV4cHJlc3Npb24gaGVscGVyID0gX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoaGVscGVyRWxlbWVudCk7CiAgICAgICAgcHVzaChqcy5qcyhyJyMoIywgIywgIyknLCBbCiAgICAgICAgICBoZWxwZXIsCiAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgIHR5cGVOYW1lLAogICAgICAgICAganMuanMubnVtYmVyKGluZGV4KQogICAgICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlckVsZW1lbnQgPSBfY29tbW9uRWxlbWVudHMuZ2V0VHlwZUFyZ3VtZW50QnlJbmRleDsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoaGVscGVyRWxlbWVudCwgQ2FsbFN0cnVjdHVyZS5UV09fQVJHUykpOwogICAgICBqcy5FeHByZXNzaW9uIGhlbHBlciA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlckVsZW1lbnQpOwogICAgICBwdXNoKGpzLmpzKHInIygjLCAjKScsIFsKICAgICAgICBoZWxwZXIsCiAgICAgICAgcmVjZWl2ZXIsCiAgICAgICAganMuanMubnVtYmVyKGluZGV4KQogICAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVJbmZvRXhwcmVzc2lvbihIVHlwZUluZm9FeHByZXNzaW9uIG5vZGUpIHsKICAgIERhcnRUeXBlIHR5cGUgPSBub2RlLmRhcnRUeXBlOwogICAgaWYgKG5vZGUuaXNUeXBlVmFyaWFibGVSZXBsYWNlbWVudCkgewogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLnR5cGVBcmd1bWVudCh0eXBlKSk7CiAgICB9CgogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anMuRXhwcmVzc2lvbj5bXTsKICAgIGZvciAoSEluc3RydWN0aW9uIGlucHV0IGluIG5vZGUuaW5wdXRzKSB7CiAgICAgIHVzZShpbnB1dCk7CiAgICAgIGFyZ3VtZW50cy5hZGQocG9wKCkpOwogICAgfQoKICAgIHN3aXRjaCAobm9kZS5raW5kKSB7CiAgICAgIGNhc2UgVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURToKICAgICAgICBpbnQgaW5kZXggPSAwOwogICAgICAgIGpzLkV4cHJlc3Npb24gcmVzdWx0ID0gX3J0aUVuY29kZXIuZ2V0VHlwZVJlcHJlc2VudGF0aW9uKAogICAgICAgICAgICBfZW1pdHRlciwgdHlwZSwgKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpID0+IGFyZ3VtZW50c1tpbmRleCsrXSk7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBpbmRleCA9PSBub2RlLmlucHV0cy5sZW5ndGgsCiAgICAgICAgICAgICJOb3QgYWxsIGlucHV0IGlzIHJlYWQgZm9yIHR5cGUgJHt0eXBlfTogIgogICAgICAgICAgICAiJGluZGV4IG9mICR7bm9kZS5pbnB1dHN9LiIpOwogICAgICAgIHB1c2gocmVzdWx0KTsKICAgICAgICByZXR1cm47CgogICAgICBjYXNlIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuSU5TVEFOQ0U6CiAgICAgICAgLy8gV2UgZXhwZWN0IG9ubHkgZmxhdCB0eXBlcyBmb3IgdGhlIElOU1RBTkNFIHJlcHJlc2VudGF0aW9uLgogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgKHR5cGUgYXMgSW50ZXJmYWNlVHlwZSkudHlwZUFyZ3VtZW50cy5sZW5ndGggPT0gYXJndW1lbnRzLmxlbmd0aCk7CiAgICAgICAgX3JlZ2lzdHJ5CiAgICAgICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICAgICAgLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyk7CiAgICAgICAgcHVzaChuZXcganMuQXJyYXlJbml0aWFsaXplcihhcmd1bWVudHMpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgYm9vbCB0eXBlVmFyaWFibGVBY2Nlc3NOZWVkc1N1YnN0aXR1dGlvbigKICAgICAgVHlwZVZhcmlhYmxlRW50aXR5IGVsZW1lbnQsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJNYXNrKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKCiAgICAvLyBTZWUgaWYgdGhlIHJlY2VpdmVyIHR5cGUgbmFycm93cyB0aGUgc2V0IG9mIGNsYXNzZXMgdG8gb25lcyB0aGF0IGNhbiBiZQogICAgLy8gaW5kZXhlZC4KICAgIC8vIFRPRE8oc3JhKTogQ3VycmVudGx5IHRoZSBvbmx5IGNvbnZlbmllbnQgcXVlcnkgaXMgW3NpbmdsZUNsYXNzXS4gV2UKICAgIC8vIHNob3VsZCBpdGVyYXRlIG92ZXIgYWxsIHRoZSBjb25jcmV0ZSBjbGFzc2VzIGluIFtyZWNlaXZlck1hc2tdLgogICAgQ2xhc3NFbnRpdHkgcmVjZWl2ZXJDbGFzcyA9CiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0RXhhY3RDbGFzcyhyZWNlaXZlck1hc2spOwogICAgaWYgKHJlY2VpdmVyQ2xhc3MgIT0gbnVsbCkgewogICAgICBpZiAoX3J0aVN1YnN0aXR1dGlvbnMuaXNUcml2aWFsU3Vic3RpdHV0aW9uKHJlY2VpdmVyQ2xhc3MsIGNscykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oY2xzKSkgcmV0dXJuIHRydWU7CgogICAgcmV0dXJuIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5hbnlTdHJpY3RTdWJjbGFzc09mKGNscywKICAgICAgICAoQ2xhc3NFbnRpdHkgc3ViY2xhc3MpIHsKICAgICAgcmV0dXJuICFfcnRpU3Vic3RpdHV0aW9ucy5pc1RyaXZpYWxTdWJzdGl0dXRpb24oc3ViY2xhc3MsIGNscyk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZWYoSFJlZiBub2RlKSB7CiAgICB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SXNUZXN0KEhJc1Rlc3Qgbm9kZSkgewogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pc0NoZWNrKG5vZGUuZGFydFR5cGUpKTsKCiAgICB1c2Uobm9kZS50eXBlSW5wdXQpOwogICAganMuRXhwcmVzc2lvbiBmaXJzdCA9IHBvcCgpOwogICAgdXNlKG5vZGUuY2hlY2tlZElucHV0KTsKICAgIGpzLkV4cHJlc3Npb24gc2Vjb25kID0gcG9wKCk7CgogICAgRmllbGRFbnRpdHkgZmllbGQgPSBfY29tbW9uRWxlbWVudHMucnRpSXNGaWVsZDsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5pbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKGZpZWxkKTsKCiAgICBwdXNoKGpzLmpzKCcjLiMoIyknLCBbZmlyc3QsIG5hbWUsIHNlY29uZF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFzQ2hlY2soSEFzQ2hlY2sgbm9kZSkgewogICAgdXNlKG5vZGUudHlwZUlucHV0KTsKICAgIGpzLkV4cHJlc3Npb24gZmlyc3QgPSBwb3AoKTsKICAgIHVzZShub2RlLmNoZWNrZWRJbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIHNlY29uZCA9IHBvcCgpOwoKICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UoVHlwZVVzZS5pc0NoZWNrKG5vZGUuY2hlY2tlZFR5cGVFeHByZXNzaW9uKSk7CgogICAgRmllbGRFbnRpdHkgZmllbGQgPSBub2RlLmlzVHlwZUVycm9yCiAgICAgICAgPyBfY29tbW9uRWxlbWVudHMucnRpQ2hlY2tGaWVsZAogICAgICAgIDogX2NvbW1vbkVsZW1lbnRzLnJ0aUFzRmllbGQ7CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShmaWVsZCk7CgogICAgcHVzaChqcy5qcygnIy4jKCMpJywgW2ZpcnN0LCBuYW1lLCBzZWNvbmRdKS53aXRoU291cmNlSW5mb3JtYXRpb24oCiAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBc0NoZWNrU2ltcGxlKEhBc0NoZWNrU2ltcGxlIG5vZGUpIHsKICAgIHVzZShub2RlLmNoZWNrZWRJbnB1dCk7CiAgICBNZW1iZXJFbnRpdHkgbWV0aG9kID0gbm9kZS5tZXRob2Q7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgU3RhdGljVXNlLnN0YXRpY0ludm9rZShtZXRob2QsIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAganMuRXhwcmVzc2lvbiBtZXRob2RBY2Nlc3MgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhtZXRob2QpOwogICAgcHVzaChqcy5qcyhyJyMoIyknLCBbbWV0aG9kQWNjZXNzLCBwb3AoKV0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN1YnR5cGVDaGVjayhIU3VidHlwZUNoZWNrIG5vZGUpIHsKICAgIHRocm93IFVuaW1wbGVtZW50ZWRFcnJvcignU3NhQ29kZUdlbmVyYXRvci52aXNpdFN1YnR5cGVDaGVjayAgJG5vZGUnKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TG9hZFR5cGUoSExvYWRUeXBlIG5vZGUpIHsKICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlckVsZW1lbnQgPSBfY29tbW9uRWxlbWVudHMuZmluZFR5cGU7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoaGVscGVyRWxlbWVudCwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICBqcy5FeHByZXNzaW9uIHJlY2lwZSA9IF9ydGlSZWNpcGVFbmNvZGVyLmVuY29kZUdyb3VuZFJlY2lwZSgKICAgICAgICBfZW1pdHRlciwgVHlwZUV4cHJlc3Npb25SZWNpcGUobm9kZS50eXBlRXhwcmVzc2lvbikpOwogICAganMuRXhwcmVzc2lvbiBoZWxwZXIgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhoZWxwZXJFbGVtZW50KTsKICAgIHB1c2goanMuanMocicjKCMpJywgW2hlbHBlciwgcmVjaXBlXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgIG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW5zdGFuY2VFbnZpcm9ubWVudChISW5zdGFuY2VFbnZpcm9ubWVudCBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBub2RlLmlucHV0cy5zaW5nbGU7CiAgICB1c2UoaW5wdXQpOwogICAganMuRXhwcmVzc2lvbiByZWNlaXZlciA9IHBvcCgpOwoKICAgIHZvaWQgdXNlUnRpRmllbGQoKSB7CiAgICAgIHB1c2goanMuanMocicjLiMnLCBbcmVjZWl2ZXIsIF9uYW1lci5ydGlGaWVsZEpzTmFtZV0pKTsKICAgIH0KCiAgICB2b2lkIHVzZUhlbHBlcihGdW5jdGlvbkVudGl0eSBoZWxwZXIpIHsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoaGVscGVyLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgICAganMuRXhwcmVzc2lvbiBoZWxwZXJBY2Nlc3MgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhoZWxwZXIpOwogICAgICBwdXNoKGpzLmpzKHInIygjKScsIFtoZWxwZXJBY2Nlc3MsIHJlY2VpdmVyXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQoKICAgIC8vIFRyeSB0byB1c2UgdGhlICdydGknIGZpZWxkLCBvciBhIHNwZWNpYWxpemF0aW9uIG9mICdpbnN0YW5jZVR5cGUnLgogICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlck1hc2sgPSBpbnB1dC5pbnN0cnVjdGlvblR5cGU7CgogICAgQWJzdHJhY3RCb29sIGlzQXJyYXkgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0luc3RhbmNlT2YoCiAgICAgICAgcmVjZWl2ZXJNYXNrLCBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKTsKCiAgICBpZiAoaXNBcnJheS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHVzZUhlbHBlcihfY29tbW9uRWxlbWVudHMuYXJyYXlJbnN0YW5jZVR5cGUpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGlzQXJyYXkuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgLy8gU2VlIGlmIHRoZSByZWNlaXZlciB0eXBlIG5hcnJvd3MgdGhlIHNldCBvZiBjbGFzc2VzIHRvIG9uZXMgdGhhdCBhbGwKICAgICAgLy8gaGF2ZSBhIHN0b3JlZCB0eXBlIGZpZWxkLgogICAgICAvLyBUT0RPKHNyYSk6IEN1cnJlbnRseSB0aGUgb25seSBjb252ZW5pZW50IHF1ZXJ5IGlzIFtnZXRFeGFjdENsYXNzXS4gV2UKICAgICAgLy8gc2hvdWxkIGhhdmUgYSAoY2FjaGVkKSBxdWVyeSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSBjb25jcmV0ZSBjbGFzc2VzCiAgICAgIC8vIGluIFtyZWNlaXZlck1hc2tdLgogICAgICAvLyBUT0RPKHNyYSk6IFN0b3JlIHRoZSBjb250ZXh0IGNsYXNzIG9uIHRoZSBISW5zdGFuY2VFbnZpcm9ubWVudC4gVGhpcwogICAgICAvLyB3b3VsZCBhbGxvdyB0aGUgc3VidHlwZSBjbGFzc2VzIHRvIGJlIGl0ZXJhdGVkLgogICAgICBDbGFzc0VudGl0eSByZWNlaXZlckNsYXNzID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmdldEV4YWN0Q2xhc3MocmVjZWl2ZXJNYXNrKTsKICAgICAgaWYgKHJlY2VpdmVyQ2xhc3MgIT0gbnVsbCkgewogICAgICAgIGlmIChfY2xvc2VkV29ybGQucnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhyZWNlaXZlckNsYXNzKSkgewogICAgICAgICAgdXNlUnRpRmllbGQoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIElmIHRoZSB0eXBlIGlzIG5vdCBpbnRlcmNlcHRlZCBhbmQgaXMgbm90IGEgY2xvc3VyZSwgdXNlIHRoZSAnc2ltcGxlJwogICAgICAvLyBoZWxwZXIuCiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0ludGVyY2VwdG9yKHJlY2VpdmVyTWFzaykuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgLmlzSW5zdGFuY2VPZihyZWNlaXZlck1hc2ssIF9jb21tb25FbGVtZW50cy5jbG9zdXJlQ2xhc3MpCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgdXNlSGVscGVyKF9jb21tb25FbGVtZW50cy5zaW1wbGVJbnN0YW5jZVR5cGUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHVzZUhlbHBlcihfY29tbW9uRWxlbWVudHMuaW5zdGFuY2VUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZUV2YWwoSFR5cGVFdmFsIG5vZGUpIHsKICAgIC8vIENhbGwgYGVudi5fZXZhbCgicmVjaXBlIilgLgogICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgIGpzLkV4cHJlc3Npb24gZW52aXJvbm1lbnQgPSBwb3AoKTsKICAgIFJlY2lwZUVuY29kaW5nIGVuY29kaW5nID0gX3J0aVJlY2lwZUVuY29kZXIuZW5jb2RlUmVjaXBlKAogICAgICAgIF9lbWl0dGVyLCBub2RlLmVudlN0cnVjdHVyZSwgbm9kZS50eXBlRXhwcmVzc2lvbik7CiAgICBqcy5FeHByZXNzaW9uIHJlY2lwZSA9IGVuY29kaW5nLnJlY2lwZTsKCiAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlIGluIGVuY29kaW5nLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBDb25zdHJhaW50IHRoZSB0eXBlIHZhcmlhYmxlIHRvIG9ubHkgYmUgZW1pdHRlZCBvbgogICAgICAvLyAoc3VidHlwZXMgb2YpIHRoZSBlbnZpcm9ubWVudCB0eXBlLgogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJUeXBlVXNlKFR5cGVVc2UubmFtZWRUeXBlVmFyaWFibGVOZXdSdGkodHlwZVZhcmlhYmxlKSk7CiAgICB9CgogICAgTWVtYmVyRW50aXR5IG1ldGhvZCA9IF9jb21tb25FbGVtZW50cy5ydGlFdmFsTWV0aG9kOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBTZWxlY3Rvci5mcm9tRWxlbWVudChtZXRob2QpOwogICAganMuTmFtZSBtZXRob2RMaXRlcmFsID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgIHB1c2goanMuanMoJyMuIygjKScsIFsKICAgICAgZW52aXJvbm1lbnQsCiAgICAgIG1ldGhvZExpdGVyYWwsCiAgICAgIHJlY2lwZQogICAgXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKCiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgbmV3IFN0YXRpY1VzZS5kaXJlY3RJbnZva2UobWV0aG9kLCBzZWxlY3Rvci5jYWxsU3RydWN0dXJlLCBudWxsKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVCaW5kKEhUeXBlQmluZCBub2RlKSB7CiAgICAvLyBDYWxsIGBlbnYxLl9iaW5kKGVudjIpYC4KICAgIGFzc2VydChub2RlLmlucHV0cy5sZW5ndGggPT0gMik7CiAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAganMuRXhwcmVzc2lvbiBlbnZpcm9ubWVudCA9IHBvcCgpOwogICAgdXNlKG5vZGUuaW5wdXRzWzFdKTsKICAgIGpzLkV4cHJlc3Npb24gZXh0ZW5zaW9ucyA9IHBvcCgpOwoKICAgIE1lbWJlckVudGl0eSBtZXRob2QgPSBfY29tbW9uRWxlbWVudHMucnRpQmluZE1ldGhvZDsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gU2VsZWN0b3IuZnJvbUVsZW1lbnQobWV0aG9kKTsKICAgIGpzLk5hbWUgbWV0aG9kTGl0ZXJhbCA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShzZWxlY3Rvcik7CiAgICBwdXNoKGpzLmpzKCcjLiMoIyknLCBbCiAgICAgIGVudmlyb25tZW50LAogICAgICBtZXRob2RMaXRlcmFsLAogICAgICBleHRlbnNpb25zCiAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwoKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICBuZXcgU3RhdGljVXNlLmRpcmVjdEludm9rZShtZXRob2QsIHNl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b3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9vcHRpbWl6ZS5kYXJ0wAImcy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JyBzaG93IENvZGVnZW5SZWdpc3RyeTsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBTZWxlY3RvcnM7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgTWVhc3VyZXIsIENvbXBpbGVyVGFzazsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JwogICAgc2hvdyBGaWVsZEFuYWx5c2lzRGF0YSwgSkZpZWxkQW5hbHlzaXM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnIHNob3cgQ29kZWdlbklucHV0czsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnIHNob3cgTmF0aXZlRGF0YTsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0JyBzaG93IFR5cGVSZWNpcGU7CmltcG9ydCAnLi4vanNfYmFja2VuZC9zcGVjaWFsaXplZF9jaGVja3MuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydCcgc2hvdyBTaWRlRWZmZWN0czsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBTdGF0aWNVc2U7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ2ludGVyY2VwdG9yX3NpbXBsaWZpZXIuZGFydCc7CmltcG9ydCAnbG9nZ2luZy5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlc19wcm9wYWdhdGlvbi5kYXJ0JzsKaW1wb3J0ICd2YWx1ZV9yYW5nZV9hbmFseXplci5kYXJ0JzsKaW1wb3J0ICd2YWx1ZV9zZXQuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgU3RyaW5nIGdldCBuYW1lOwogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpOwp9CgpjbGFzcyBTc2FPcHRpbWl6ZXJUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CgogIE1hcDxISW5zdHJ1Y3Rpb24sIFJhbmdlPiByYW5nZXMgPSA8SEluc3RydWN0aW9uLCBSYW5nZT57fTsKCiAgTWFwPE1lbWJlckVudGl0eSwgT3B0aW1pemF0aW9uVGVzdExvZz4gbG9nZ2Vyc0ZvclRlc3Rpbmc7CgogIFNzYU9wdGltaXplclRhc2soTWVhc3VyZXIgbWVhc3VyZXIsIHRoaXMuX29wdGlvbnMpIDogc3VwZXIobWVhc3VyZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ1NTQSBvcHRpbWl6ZXInOwoKICB2b2lkIG9wdGltaXplKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnkpIHsKICAgIHZvaWQgcnVuUGhhc2UoT3B0aW1pemF0aW9uUGhhc2UgcGhhc2UpIHsKICAgICAgbWVhc3VyZVN1YnRhc2socGhhc2UubmFtZSwgKCkgPT4gcGhhc2UudmlzaXRHcmFwaChncmFwaCkpOwogICAgICBjb2RlZ2VuLnRyYWNlci50cmFjZUdyYXBoKHBoYXNlLm5hbWUsIGdyYXBoKTsKICAgICAgYXNzZXJ0KGdyYXBoLmlzVmFsaWQoKSwgJ0dyYXBoIG5vdCB2YWxpZCBhZnRlciAke3BoYXNlLm5hbWV9Jyk7CiAgICB9CgogICAgYm9vbCB0cnVzdFByaW1pdGl2ZXMgPSBfb3B0aW9ucy50cnVzdFByaW1pdGl2ZXM7CiAgICBTZXQ8SEluc3RydWN0aW9uPiBib3VuZHNDaGVja2VkID0gbmV3IFNldDxISW5zdHJ1Y3Rpb24+KCk7CiAgICBTc2FDb2RlTW90aW9uIGNvZGVNb3Rpb247CiAgICBTc2FMb2FkRWxpbWluYXRpb24gbG9hZEVsaW1pbmF0aW9uOwoKICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nOwogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgIGxvZ2dlcnNGb3JUZXN0aW5nID8/PSB7fTsKICAgICAgbG9nZ2Vyc0ZvclRlc3RpbmdbbWVtYmVyXSA9IGxvZyA9IG5ldyBPcHRpbWl6YXRpb25UZXN0TG9nKCk7CiAgICB9CgogICAgbWVhc3VyZSgoKSB7CiAgICAgIExpc3Q8T3B0aW1pemF0aW9uUGhhc2U+IHBoYXNlcyA9IDxPcHRpbWl6YXRpb25QaGFzZT5bCiAgICAgICAgLy8gUnVuIHRyaXZpYWwgaW5zdHJ1Y3Rpb24gc2ltcGxpZmljYXRpb24gZmlyc3QgdG8gb3B0aW1pemUKICAgICAgICAvLyBzb21lIHBhdHRlcm5zIHVzZWZ1bCBmb3IgdHlwZSBjb252ZXJzaW9uLgogICAgICAgIG5ldyBTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgX29wdGlvbnMsCiAgICAgICAgICAgIGNvZGVnZW4ucnRpU3Vic3RpdHV0aW9ucywgY2xvc2VkV29ybGQsIHJlZ2lzdHJ5LCBsb2cpLAogICAgICAgIG5ldyBTc2FUeXBlQ29udmVyc2lvbkluc2VydGVyKGNsb3NlZFdvcmxkKSwKICAgICAgICBuZXcgU3NhUmVkdW5kYW50UGhpRWxpbWluYXRvcigpLAogICAgICAgIG5ldyBTc2FEZWFkUGhpRWxpbWluYXRvcigpLAogICAgICAgIG5ldyBTc2FUeXBlUHJvcGFnYXRvcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgY2xvc2VkV29ybGQsIGxvZyksCiAgICAgICAgLy8gQWZ0ZXIgdHlwZSBwcm9wYWdhdGlvbiwgbW9yZSBpbnN0cnVjdGlvbnMgY2FuIGJlCiAgICAgICAgLy8gc2ltcGxpZmllZC4KICAgICAgICBuZXcgU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIF9vcHRpb25zLAogICAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsIGNsb3NlZFdvcmxkLCByZWdpc3RyeSwgbG9nKSwKICAgICAgICBuZXcgU3NhQ2hlY2tJbnNlcnRlcih0cnVzdFByaW1pdGl2ZXMsIGNsb3NlZFdvcmxkLCBib3VuZHNDaGVja2VkKSwKICAgICAgICBuZXcgU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIF9vcHRpb25zLAogICAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsIGNsb3NlZFdvcmxkLCByZWdpc3RyeSwgbG9nKSwKICAgICAgICBuZXcgU3NhQ2hlY2tJbnNlcnRlcih0cnVzdFByaW1pdGl2ZXMsIGNsb3NlZFdvcmxkLCBib3VuZHNDaGVja2VkKSwKICAgICAgICBuZXcgU3NhVHlwZVByb3BhZ2F0b3IoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIGNsb3NlZFdvcmxkLCBsb2cpLAogICAgICAgIC8vIFJ1biBhIGRlYWQgY29kZSBlbGltaW5hdG9yIGJlZm9yZSBMSUNNIGJlY2F1c2UgZGVhZAogICAgICAgIC8vIGludGVyY2VwdG9ycyBhcmUgb2Z0ZW4gaW4gdGhlIHdheSBvZiBMSUNNJ2FibGUgaW5zdHJ1Y3Rpb25zLgogICAgICAgIG5ldyBTc2FEZWFkQ29kZUVsaW1pbmF0b3IoY2xvc2VkV29ybGQsIHRoaXMpLAogICAgICAgIG5ldyBTc2FHbG9iYWxWYWx1ZU51bWJlcmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLAogICAgICAgIC8vIEFmdGVyIEdWTiwgc29tZSBpbnN0cnVjdGlvbnMgbWlnaHQgbmVlZCB0aGVpciB0eXBlIHRvIGJlCiAgICAgICAgLy8gdXBkYXRlZCBiZWNhdXNlIHRoZXkgbm93IGhhdmUgZGlmZmVyZW50IGlucHV0cy4KICAgICAgICBuZXcgU3NhVHlwZVByb3BhZ2F0b3IoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIGNsb3NlZFdvcmxkLCBsb2cpLAogICAgICAgIGNvZGVNb3Rpb24gPSBuZXcgU3NhQ29kZU1vdGlvbihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKSwKICAgICAgICBsb2FkRWxpbWluYXRpb24gPSBuZXcgU3NhTG9hZEVsaW1pbmF0aW9uKGNsb3NlZFdvcmxkKSwKICAgICAgICBuZXcgU3NhUmVkdW5kYW50UGhpRWxpbWluYXRvcigpLAogICAgICAgIG5ldyBTc2FEZWFkUGhpRWxpbWluYXRvcigpLAogICAgICAgIC8vIEFmdGVyIEdWTiBhbmQgbG9hZCBlbGltaW5hdGlvbiB0aGUgc2FtZSB2YWx1ZSBtYXkgYmUgdXNlZCBpbiBjb2RlCiAgICAgICAgLy8gY29udHJvbGxlZCBieSBhIHRlc3Qgb24gdGhlIHZhbHVlLCBzbyByZWRvICdjb252ZXJzaW9uIGluc2VydGlvbicgdG8KICAgICAgICAvLyBsZWFybiBmcm9tIHRoZSByZWZpbmVkIHR5cGUuCiAgICAgICAgbmV3IFNzYVR5cGVDb252ZXJzaW9uSW5zZXJ0ZXIoY2xvc2VkV29ybGQpLAogICAgICAgIG5ldyBTc2FUeXBlUHJvcGFnYXRvcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgY2xvc2VkV29ybGQsIGxvZyksCiAgICAgICAgbmV3IFNzYVZhbHVlUmFuZ2VBbmFseXplcihjbG9zZWRXb3JsZCwgdGhpcyksCiAgICAgICAgLy8gUHJldmlvdXMgb3B0aW1pemF0aW9ucyBtYXkgaGF2ZSBnZW5lcmF0ZWQgbmV3CiAgICAgICAgLy8gb3Bwb3J0dW5pdGllcyBmb3IgaW5zdHJ1Y3Rpb24gc2ltcGxpZmljYXRpb24uCiAgICAgICAgbmV3IFNzYUluc3RydWN0aW9uU2ltcGxpZmllcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBfb3B0aW9ucywKICAgICAgICAgICAgY29kZWdlbi5ydGlTdWJzdGl0dXRpb25zLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIGxvZyksCiAgICAgICAgbmV3IFNzYUNoZWNrSW5zZXJ0ZXIodHJ1c3RQcmltaXRpdmVzLCBjbG9zZWRXb3JsZCwgYm91bmRzQ2hlY2tlZCksCiAgICAgIF07CiAgICAgIHBoYXNlcy5mb3JFYWNoKHJ1blBoYXNlKTsKCiAgICAgIC8vIFNpbXBsaWZ5aW5nIGludGVyY2VwdG9ycyBpcyBub3Qgc3RyaWN0bHkganVzdCBhbiBvcHRpbWl6YXRpb24sIGl0IGlzCiAgICAgIC8vIHJlcXVpcmVkIGZvciBpbXBsZW1lbnRhdGlvbiBjb3JyZWN0bmVzcyBiZWNhdXNlIHRoZSBjb2RlIGdlbmVyYXRvcgogICAgICAvLyBhc3N1bWVzIGl0IGlzIGFsd2F5cyBwZXJmb3JtZWQuCiAgICAgIHJ1blBoYXNlKG5ldyBTc2FTaW1wbGlmeUludGVyY2VwdG9ycyhjbG9zZWRXb3JsZCwgbWVtYmVyLmVuY2xvc2luZ0NsYXNzKSk7CgogICAgICBTc2FEZWFkQ29kZUVsaW1pbmF0b3IgZGNlID0gbmV3IFNzYURlYWRDb2RlRWxpbWluYXRvcihjbG9zZWRXb3JsZCwgdGhpcyk7CiAgICAgIHJ1blBoYXNlKGRjZSk7CiAgICAgIGlmIChjb2RlTW90aW9uLm1vdmVkQ29kZSB8fAogICAgICAgICAgZGNlLmVsaW1pbmF0ZWRTaWRlRWZmZWN0cyB8fAogICAgICAgICAgbG9hZEVsaW1pbmF0aW9uLm5ld0d2bkNhbmRpZGF0ZXMpIHsKICAgICAgICBwaGFzZXMgPSA8T3B0aW1pemF0aW9uUGhhc2U+WwogICAgICAgICAgbmV3IFNzYVR5cGVQcm9wYWdhdG9yKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIGNsb3NlZFdvcmxkLCBsb2cpLAogICAgICAgICAgbmV3IFNzYUdsb2JhbFZhbHVlTnVtYmVyZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbiksCiAgICAgICAgICBuZXcgU3NhQ29kZU1vdGlvbihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKSwKICAgICAgICAgIG5ldyBTc2FWYWx1ZVJhbmdlQW5hbHl6ZXIoY2xvc2VkV29ybGQsIHRoaXMpLAogICAgICAgICAgbmV3IFNzYUluc3RydWN0aW9uU2ltcGxpZmllcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBfb3B0aW9ucywKICAgICAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsIGNsb3NlZFdvcmxkLCByZWdpc3RyeSwgbG9nKSwKICAgICAgICAgIG5ldyBTc2FDaGVja0luc2VydGVyKHRydXN0UHJpbWl0aXZlcywgY2xvc2VkV29ybGQsIGJvdW5kc0NoZWNrZWQpLAogICAgICAgICAgbmV3IFNzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzKGNsb3NlZFdvcmxkLCBtZW1iZXIuZW5jbG9zaW5nQ2xhc3MpLAogICAgICAgICAgbmV3IFNzYURlYWRDb2RlRWxpbWluYXRvcihjbG9zZWRXb3JsZCwgdGhpcyksCiAgICAgICAgXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwaGFzZXMgPSA8T3B0aW1pemF0aW9uUGhhc2U+WwogICAgICAgICAgbmV3IFNzYVR5cGVQcm9wYWdhdG9yKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIGNsb3NlZFdvcmxkLCBsb2cpLAogICAgICAgICAgLy8gUnVuIHRoZSBzaW1wbGlmaWVyIHRvIHJlbW92ZSB1bm5lZWRlZCB0eXBlIGNoZWNrcyBpbnNlcnRlZCBieQogICAgICAgICAgLy8gdHlwZSBwcm9wYWdhdGlvbi4KICAgICAgICAgIG5ldyBTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgX29wdGlvbnMsCiAgICAgICAgICAgICAgY29kZWdlbi5ydGlTdWJzdGl0dXRpb25zLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIGxvZyksCiAgICAgICAgXTsKICAgICAgfQogICAgICBwaGFzZXMuZm9yRWFjaChydW5QaGFzZSk7CiAgICB9KTsKICB9Cn0KCi8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWFza10gcmVwcmVzZW50cyBvbmx5IHR5cGVzIHRoYXQgaGF2ZSBhIGxlbmd0aCB0aGF0Ci8vLyBjYW5ub3QgY2hhbmdlLiAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgY29uc2VydmF0aXZlIGZvciB0aGUgcHVycG9zZQovLy8gb2YgaWRlbnRpZnlpbmcgZ3ZuLWFibGUgbGVuZ3RocyBhbmQgbWlzLWlkZW50aWZpZXMgc29tZSB1bmlvbnMgb2YgZml4ZWQKLy8vIGxlbmd0aCBpbmRleGFibGVzIChzZWUgVE9ETykgYXMgbm90IGZpeGVkIGxlbmd0aC4KYm9vbCBpc0ZpeGVkTGVuZ3RoKEFic3RyYWN0VmFsdWUgbWFzaywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcihtYXNrKSAmJgogICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckxlbmd0aChtYXNrKSAhPSBudWxsKSB7CiAgICAvLyBBIGNvbnRhaW5lciBvbiB3aGljaCB3ZSBoYXZlIGluZmVycmVkIHRoZSBsZW5ndGguCiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgLy8gVE9ETyhzcmEpOiBSZWNvZ25pemUgYW55IGNvbWJpbmF0aW9uIG9mIGZpeGVkIGxlbmd0aCBpbmRleGFibGVzLgogIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzRml4ZWRBcnJheShtYXNrKS5pc0RlZmluaXRlbHlUcnVlIHx8CiAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaXNTdHJpbmdPck51bGwobWFzaykuaXNEZWZpbml0ZWx5VHJ1ZSB8fAogICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmlzVHlwZWRBcnJheShtYXNrKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CgovLy8gSWYgYm90aCBpbnB1dHMgdG8ga25vd24gb3BlcmF0aW9ucyBhcmUgYXZhaWxhYmxlIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbiBhdAovLy8gY29tcGlsZS10aW1lLgpjbGFzcyBTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IKICAgIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIC8vIFdlIGRvbid0IHByb2R1Y2UgY29uc3RhbnQtZm9sZGVkIHN0cmluZ3MgbG9uZ2VyIHRoYW4gdGhpcyB1bmxlc3MgdGhleSBoYXZlCiAgLy8gYSBzaW5nbGUgdXNlLiAgVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IGV4cG9uZW50aWFsbHkgbGFyZ2UgY29uc3RhbnQgZm9sZGVkCiAgLy8gc3RyaW5ncy4KICBzdGF0aWMgY29uc3QgTUFYX1NIQVJFRF9DT05TVEFOVF9GT0xERURfU1RSSU5HX0xFTkdUSCA9IDUxMjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyIjsKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBfcnRpU3Vic3RpdHV0aW9uczsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvZGVnZW5SZWdpc3RyeSBfcmVnaXN0cnk7CiAgZmluYWwgT3B0aW1pemF0aW9uVGVzdExvZyBfbG9nOwogIEhHcmFwaCBfZ3JhcGg7CgogIFNzYUluc3RydWN0aW9uU2ltcGxpZmllcih0aGlzLl9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9ydGlTdWJzdGl0dXRpb25zLCB0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5fcmVnaXN0cnksIHRoaXMuX2xvZyk7CgogIEpDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgTmF0aXZlRGF0YSBnZXQgX25hdGl2ZURhdGEgPT4gX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGE7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggdmlzaXRlZSkgewogICAgX2dyYXBoID0gdmlzaXRlZTsKICAgIHZpc2l0RG9taW5hdG9yVHJlZSh2aXNpdGVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgc2ltcGxpZnlQaGlzKGJsb2NrKTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQgPSBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBpbnN0cnVjdGlvbikgewogICAgICAgIGJsb2NrLnJld3JpdGUoaW5zdHJ1Y3Rpb24sIHJlcGxhY2VtZW50KTsKCiAgICAgICAgLy8gVGhlIGludGVyc2VjdGlvbiBvZiBkb3VibGUgYW5kIGludCByZXR1cm4gY29uZmxpY3RpbmcsIGFuZAogICAgICAgIC8vIGJlY2F1c2Ugb2Ygb3VyIG51bWJlciBpbXBsZW1lbnRhdGlvbiBmb3IgSmF2YVNjcmlwdCwgaXQKICAgICAgICAvLyBtaWdodCBiZSB0aGF0IGFuIG9wZXJhdGlvbiB0aG91Z2h0IHRvIHJldHVybiBkb3VibGUsIGNhbiBiZQogICAgICAgIC8vIHNpbXBsaWZpZWQgdG8gYW4gaW50LiBGb3IgZXhhbXBsZToKICAgICAgICAvLyBgMi41ICogMTBgLgogICAgICAgIGlmICghKHJlcGxhY2VtZW50CiAgICAgICAgICAgICAgICAuaXNOdW1iZXJPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgICBpbnN0cnVjdGlvbgogICAgICAgICAgICAgICAgLmlzTnVtYmVyT3JOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpKSB7CiAgICAgICAgICAvLyBJZiB3ZSBjYW4gcmVwbGFjZSBbaW5zdHJ1Y3Rpb25dIHdpdGggW3JlcGxhY2VtZW50XSwgdGhlbgogICAgICAgICAgLy8gW3JlcGxhY2VtZW50XSdzIHR5cGUgY2FuIGJlIG5hcnJvd2VkLgogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBuZXdUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKAogICAgICAgICAgICAgIHJlcGxhY2VtZW50Lmluc3RydWN0aW9uVHlwZSwgaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgICAgIHJlcGxhY2VtZW50Lmluc3RydWN0aW9uVHlwZSA9IG5ld1R5cGU7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGUgcmVwbGFjZW1lbnQgaW5zdHJ1Y3Rpb24gZG9lcyBub3Qga25vdyBpdHMKICAgICAgICAvLyBzb3VyY2UgZWxlbWVudCwgdXNlIHRoZSBzb3VyY2UgZWxlbWVudCBvZiB0aGUKICAgICAgICAvLyBpbnN0cnVjdGlvbi4KICAgICAgICByZXBsYWNlbWVudC5zb3VyY2VFbGVtZW50ID8/PSBpbnN0cnVjdGlvbi5zb3VyY2VFbGVtZW50OwogICAgICAgIHJlcGxhY2VtZW50LnNvdXJjZUluZm9ybWF0aW9uID8/PSBpbnN0cnVjdGlvbi5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBpZiAoIXJlcGxhY2VtZW50LmlzSW5CYXNpY0Jsb2NrKCkpIHsKICAgICAgICAgIC8vIFRoZSBjb25zdGFudCBmb2xkaW5nIGNhbiByZXR1cm4gYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbHJlYWR5CiAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBncmFwaCAobGlrZSBhbiBpbnB1dCksIHNvIHdlIG9ubHkgYWRkIHRoZSByZXBsYWNlbWVudAogICAgICAgICAgLy8gaWYgbmVjZXNzYXJ5LgogICAgICAgICAgYmxvY2suYWRkQWZ0ZXIoaW5zdHJ1Y3Rpb24sIHJlcGxhY2VtZW50KTsKICAgICAgICAgIC8vIFZpc2l0IHRoZSByZXBsYWNlbWVudCBhcyB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpbiBjYXNlIGl0CiAgICAgICAgICAvLyBjYW4gYWxzbyBiZSBjb25zdGFudCBmb2xkZWQgYXdheS4KICAgICAgICAgIG5leHQgPSByZXBsYWNlbWVudDsKICAgICAgICB9CiAgICAgICAgYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CiAgfQoKICAvLyBTaW1wbGlmeSBzb21lIENGRyBkaWFtb25kcyB0byBlcXVpdmFsZW50IGV4cHJlc3Npb25zLgogIHNpbXBsaWZ5UGhpcyhIQmFzaWNCbG9jayBibG9jaykgewogICAgLy8gSXMgW2Jsb2NrXSB0aGUgam9pbiBwb2ludCBmb3IgYSBzaW1wbGUgZGlhbW9uZCB0aGF0IGdlbmVyYXRlcyBhIHNpbmdsZQogICAgLy8gcGhpIG5vZGU/CiAgICBpZiAoYmxvY2sucGhpcy5pc0VtcHR5KSByZXR1cm47CiAgICBIUGhpIHBoaSA9IGJsb2NrLnBoaXMuZmlyc3Q7CiAgICBpZiAocGhpLm5leHQgIT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggIT0gMikgcmV0dXJuOwogICAgYXNzZXJ0KHBoaS5pbnB1dHMubGVuZ3RoID09IDIpOwogICAgSEJhc2ljQmxvY2sgYjEgPSBibG9jay5wcmVkZWNlc3NvcnNbMF07CiAgICBIQmFzaWNCbG9jayBiMiA9IGJsb2NrLnByZWRlY2Vzc29yc1sxXTsKICAgIEhCYXNpY0Jsb2NrIGRvbWluYXRvciA9IGJsb2NrLmRvbWluYXRvcjsKICAgIGlmICghKGIxLmRvbWluYXRvciA9PSBkb21pbmF0b3IgJiYgYjIuZG9taW5hdG9yID09IGRvbWluYXRvcikpIHJldHVybjsKCiAgICAvLyBFeHRyYWN0IHRoZSBjb250cm9sbGluZyBjb25kaXRpb24uCiAgICBISW5zdHJ1Y3Rpb24gY29udHJvbEZsb3cgPSBkb21pbmF0b3IubGFzdDsKICAgIGlmIChjb250cm9sRmxvdyBpcyEgSElmKSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gdGVzdCA9IGNvbnRyb2xGbG93LmlucHV0cy5zaW5nbGU7CiAgICBpZiAodGVzdC51c2VkQnkubGVuZ3RoID4gMSkgcmV0dXJuOwoKICAgIGJvb2wgbmVnYXRlZCA9IGZhbHNlOwogICAgd2hpbGUgKHRlc3QgaXMgSE5vdCkgewogICAgICB0ZXN0ID0gdGVzdC5pbnB1dHMuc2luZ2xlOwogICAgICBpZiAodGVzdC51c2VkQnkubGVuZ3RoID4gMSkgcmV0dXJuOwogICAgICBuZWdhdGVkID0gIW5lZ2F0ZWQ7CiAgICB9CgogICAgaWYgKHRlc3QgaXMhIEhJZGVudGl0eSkgcmV0dXJuOwogICAgSEluc3RydWN0aW9uIHRlc3RlZDsKICAgIGlmICh0ZXN0LmlucHV0c1swXS5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgdGVzdGVkID0gdGVzdC5pbnB1dHNbMV07CiAgICB9IGVsc2UgaWYgKHRlc3QuaW5wdXRzWzFdLmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICB0ZXN0ZWQgPSB0ZXN0LmlucHV0c1swXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gd2hlbk51bGxWYWx1ZSA9IHBoaS5pbnB1dHNbbmVnYXRlZCA/IDEgOiAwXTsKICAgIEhJbnN0cnVjdGlvbiB3aGVuTm90TnVsbFZhbHVlID0gcGhpLmlucHV0c1tuZWdhdGVkID8gMCA6IDFdOwogICAgSEJhc2ljQmxvY2sgd2hlbk51bGxCbG9jayA9IGJsb2NrLnByZWRlY2Vzc29yc1tuZWdhdGVkID8gMSA6IDBdOwogICAgSEJhc2ljQmxvY2sgd2hlbk5vdE51bGxCbG9jayA9IGJsb2NrLnByZWRlY2Vzc29yc1tuZWdhdGVkID8gMCA6IDFdOwoKICAgIC8vIElmICd4JyBpcyBudWxsYWJsZSBib29sZWFuLAogICAgLy8KICAgIC8vICAgICB4ID09IG51bGwgPyBmYWxzZSA6IHggIC0tLT4gIHggPT0gdHJ1ZQogICAgLy8KICAgIC8vIFRoaXMgb2ZlbiBjb21lcyBmcm9tIHRoZSBkYXJ0IGNvZGUgYHggPz8gZmFsc2VgLgogICAgaWYgKF9zYW1lT3JSZWZpbmVtZW50T2YodGVzdGVkLCB3aGVuTm90TnVsbFZhbHVlKSAmJgogICAgICAgIF9pc0Jvb2xDb25zdGFudCh3aGVuTnVsbFZhbHVlLCBmYWxzZSkgJiYKICAgICAgICB3aGVuTm90TnVsbFZhbHVlCiAgICAgICAgICAgIC5pc0Jvb2xlYW5Pck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgX21vc3RseUVtcHR5KHdoZW5OdWxsQmxvY2spICYmCiAgICAgICAgX21vc3RseUVtcHR5KHdoZW5Ob3ROdWxsQmxvY2spKSB7CiAgICAgIEhJbnN0cnVjdGlvbiB0cnVlQ29uc3RhbnQgPSBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9IG5ldyBISWRlbnRpdHkoCiAgICAgICAgICB0ZXN0ZWQsIHRydWVDb25zdGFudCwgbnVsbCwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpCiAgICAgICAgLi5zb3VyY2VFbGVtZW50ID0gcGhpLnNvdXJjZUVsZW1lbnQKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gcGhpLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICBibG9jay5yZXdyaXRlKHBoaSwgcmVwbGFjZW1lbnQpOwogICAgICBibG9jay5hZGRBdEVudHJ5KHJlcGxhY2VtZW50KTsKICAgICAgYmxvY2sucmVtb3ZlUGhpKHBoaSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIElmICd4J2lzIG51bGxhYmxlIGJvb2xlYW4sCiAgICAvLwogICAgLy8gICAgIHggPT0gbnVsbCA/IHRydWUgOiB4ICAtLS0+ICAhKHggPT0gZmFsc2UpCiAgICAvLwogICAgLy8gVGhpcyBvZmVuIGNvbWVzIGZyb20gdGhlIGRhcnQgY29kZSBgeCA/PyB0cnVlYC4KICAgIGlmIChfc2FtZU9yUmVmaW5lbWVudE9mKHRlc3RlZCwgd2hlbk5vdE51bGxWYWx1ZSkgJiYKICAgICAgICBfaXNCb29sQ29uc3RhbnQod2hlbk51bGxWYWx1ZSwgdHJ1ZSkgJiYKICAgICAgICB3aGVuTm90TnVsbFZhbHVlCiAgICAgICAgICAgIC5pc0Jvb2xlYW5Pck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgX21vc3RseUVtcHR5KHdoZW5OdWxsQmxvY2spICYmCiAgICAgICAgX21vc3RseUVtcHR5KHdoZW5Ob3ROdWxsQmxvY2spKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBmYWxzZUNvbnN0YW50ID0gX2dyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgSEluc3RydWN0aW9uIGNvbXBhcmUgPSBuZXcgSElkZW50aXR5KAogICAgICAgICAgdGVzdGVkLCBmYWxzZUNvbnN0YW50LCBudWxsLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgICAgIGJsb2NrLmFkZEF0RW50cnkoY29tcGFyZSk7CiAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9CiAgICAgICAgICBuZXcgSE5vdChjb21wYXJlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkKICAgICAgICAgICAgLi5zb3VyY2VFbGVtZW50ID0gcGhpLnNvdXJjZUVsZW1lbnQKICAgICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHBoaS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgYmxvY2sucmV3cml0ZShwaGksIHJlcGxhY2VtZW50KTsKICAgICAgYmxvY2suYWRkQWZ0ZXIoY29tcGFyZSwgcmVwbGFjZW1lbnQpOwogICAgICBibG9jay5yZW1vdmVQaGkocGhpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogQ29uc2lkZXIgb3RoZXIgc2ltcGxlIGRpYW1vbmRzLCBlLmcuIHdpdGggdGhlIGFkZGl0aW9uIG9mIGEgc3BlY2lhbCBpbnN0cnVjdGlvbiwKICAgIC8vCiAgICAvLyAgICAgcyA9PSBudWxsID8gIiIgOiBzICAtLS0+ICBzIHx8ICIiLgogICAgcmV0dXJuOwogIH0KCiAgYm9vbCBfaXNCb29sQ29uc3RhbnQoSEluc3RydWN0aW9uIG5vZGUsIGJvb2wgdmFsdWUpIHsKICAgIGlmIChub2RlIGlzIEhDb25zdGFudCkgewogICAgICBDb25zdGFudFZhbHVlIGMgPSBub2RlLmNvbnN0YW50OwogICAgICBpZiAoYyBpcyBCb29sQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIHJldHVybiBjLmJvb2xWYWx1ZSA9PSB2YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBfc2FtZU9yUmVmaW5lbWVudE9mKEhJbnN0cnVjdGlvbiBiYXNlLCBISW5zdHJ1Y3Rpb24gaW5zbikgewogICAgaWYgKGJhc2UgPT0gaW5zbikgcmV0dXJuIHRydWU7CiAgICBpZiAoaW5zbiBpcyBIVHlwZUtub3duKSByZXR1cm4gX3NhbWVPclJlZmluZW1lbnRPZihiYXNlLCBpbnNuLmNoZWNrZWRJbnB1dCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIF9tb3N0bHlFbXB0eShIQmFzaWNCbG9jayBibG9jaykgewogICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5zbiA9IGJsb2NrLmZpcnN0OyBpbnNuICE9IG51bGw7IGluc24gPSBpbnNuLm5leHQpIHsKICAgICAgaWYgKGluc24gaXMgSFR5cGVLbm93bikgY29udGludWU7CiAgICAgIGlmIChpbnNuIGlzIEhHb3RvKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBDb25zdGFudFZhbHVlIGdldENvbnN0YW50RnJvbVR5cGUoSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmlzVmFsdWUoX2Fic3RyYWN0VmFsdWVEb21haW4pICYmCiAgICAgICAgbm9kZS5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPQogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0UHJpbWl0aXZlVmFsdWUobm9kZS5pbnN0cnVjdGlvblR5cGUpOwogICAgICBpZiAodmFsdWUuaXNCb29sKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICAgIC8vIFRPRE8oaGV0KTogY29uc2lkZXIgc3VwcG9ydGluZyBvdGhlciB2YWx1ZXMgKHNob3J0IHN0cmluZ3M/KQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHByb3BhZ2F0ZUNvbnN0YW50VmFsdWVUb1VzZXMoSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLnVzZWRCeS5pc0VtcHR5KSByZXR1cm47CiAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnRGcm9tVHlwZShub2RlKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIEhDb25zdGFudCBjb25zdGFudCA9IF9ncmFwaC5hZGRDb25zdGFudCh2YWx1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBub2RlLnVzZWRCeS50b0xpc3QoKSkgewogICAgICAgIHVzZXIuY2hhbmdlVXNlKG5vZGUsIGNvbnN0YW50KTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0UGFyYW1ldGVyVmFsdWUoSFBhcmFtZXRlclZhbHVlIG5vZGUpIHsKICAgIC8vIFtIUGFyYW1ldGVyVmFsdWVdcyBhcmUgZWl0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIChpbiBmdWxseSBTU0EKICAgIC8vIGNvbnZlcnRlZCBjb2RlKSwgb3IgdGhlIG11dGFibGUgdmFyaWFibGUgY29udGFpbmluZyB0aGUgdmFsdWUgKGluCiAgICAvLyBpbmNvbXBsZXRlbHkgU1NBIGNvbnZlcnRlZCBjb2RlLCBlLmcuIG1ldGhvZHMgY29udGFpbmluZyBleGNlcHRpb25zKS4KICAgIC8vCiAgICAvLyBJZiB0aGUgcGFyYW1ldGVyIGlzIHVzZWQgYXMgYSBtdXRhYmxlIHZhcmlhYmxlIHdlIGNhbm5vdCByZXBsYWNlIHRoZQogICAgLy8gdmFyaWFibGUgd2l0aCBhIHZhbHVlLgogICAgLy8KICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaXMgdXNlZCBhcyBhIG11dGFibGUgdmFyaWFibGUgYnV0IG5ldmVyIHdyaXR0ZW4sIGZpcnN0CiAgICAvLyBjb252ZXJ0IHRvIGEgdmFsdWUgcGFyYW1ldGVyLgoKICAgIGlmIChub2RlLnVzZWRBc1ZhcmlhYmxlKCkpIHsKICAgICAgaWYgKCFub2RlLnVzZWRCeS5ldmVyeSgodXNlcikgPT4gdXNlciBpcyBITG9jYWxHZXQpKSByZXR1cm4gbm9kZTsKICAgICAgLy8gVHJpdmlhbCBTU0EtY29udmVyc2lvbi4gUmVwbGFjZSBhbGwgSExvY2FsR2V0IGluc3RydWN0aW9ucyB3aXRoIHRoZQogICAgICAvLyBwYXJhbWV0ZXIuCiAgICAgIGZvciAoSExvY2FsR2V0IHVzZXIgaW4gbm9kZS51c2VkQnkudG9MaXN0KCkpIHsKICAgICAgICB1c2VyLmJsb2NrLnJld3JpdGUodXNlciwgbm9kZSk7CiAgICAgICAgdXNlci5ibG9jay5yZW1vdmUodXNlcik7CiAgICAgIH0KICAgIH0KCiAgICBwcm9wYWdhdGVDb25zdGFudFZhbHVlVG9Vc2VzKG5vZGUpOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXROb3QoSE5vdCBub2RlKSB7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gbm9kZS5pbnB1dHM7CiAgICBhc3NlcnQoaW5wdXRzLmxlbmd0aCA9PSAxKTsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGlucHV0c1swXTsKICAgIGlmIChpbnB1dCBpcyBIQ29uc3RhbnQpIHsKICAgICAgSENvbnN0YW50IGNvbnN0YW50ID0gaW5wdXQ7CiAgICAgIGJvb2wgaXNUcnVlID0gY29uc3RhbnQuY29uc3RhbnQuaXNUcnVlOwogICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbCghaXNUcnVlLCBfY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIGlmIChpbnB1dCBpcyBITm90KSB7CiAgICAgIHJldHVybiBpbnB1dC5pbnB1dHNbMF07CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZVVuYXJ5KEhJbnZva2VVbmFyeSBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gZm9sZGVkID0gZm9sZFVuYXJ5KG5vZGUub3BlcmF0aW9uKCksIG5vZGUub3BlcmFuZCk7CiAgICByZXR1cm4gZm9sZGVkICE9IG51bGwgPyBmb2xkZWQgOiBub2RlOwogIH0KCiAgSEluc3RydWN0aW9uIGZvbGRVbmFyeSgKICAgICAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbiwgSEluc3RydWN0aW9uIG9wZXJhbmQpIHsKICAgIGlmIChvcGVyYW5kIGlzIEhDb25zdGFudCkgewogICAgICBIQ29uc3RhbnQgcmVjZWl2ZXIgPSBvcGVyYW5kOwogICAgICBDb25zdGFudFZhbHVlIGZvbGRlZCA9IG9wZXJhdGlvbi5mb2xkKHJlY2VpdmVyLmNvbnN0YW50KTsKICAgICAgaWYgKGZvbGRlZCAhPSBudWxsKSByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50KGZvbGRlZCwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgSEluc3RydWN0aW9uIHRyeU9wdGltaXplTGVuZ3RoSW50ZXJjZXB0ZWRHZXR0ZXIoSEludm9rZUR5bmFtaWMgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGFjdHVhbFJlY2VpdmVyID0gbm9kZS5pbnB1dHNbMV07CiAgICBpZiAoYWN0dWFsUmVjZWl2ZXIKICAgICAgICAuaXNJbmRleGFibGVQcmltaXRpdmUoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGFjdHVhbFJlY2VpdmVyLmlzQ29uc3RhbnRTdHJpbmcoKSkgewogICAgICAgIEhDb25zdGFudCBjb25zdGFudElucHV0ID0gYWN0dWFsUmVjZWl2ZXI7CiAgICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50SW5wdXQuY29uc3RhbnQ7CiAgICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEludChjb25zdGFudC5sZW5ndGgsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSBpZiAoYWN0dWFsUmVjZWl2ZXIuaXNDb25zdGFudExpc3QoKSkgewogICAgICAgIEhDb25zdGFudCBjb25zdGFudElucHV0ID0gYWN0dWFsUmVjZWl2ZXI7CiAgICAgICAgTGlzdENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBjb25zdGFudElucHV0LmNvbnN0YW50OwogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRJbnQoY29uc3RhbnQubGVuZ3RoLCBfY2xvc2VkV29ybGQpOwogICAgICB9CiAgICAgIGJvb2wgaXNGaXhlZCA9CiAgICAgICAgICBpc0ZpeGVkTGVuZ3RoKGFjdHVhbFJlY2VpdmVyLmluc3RydWN0aW9uVHlwZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgQWJzdHJhY3RWYWx1ZSBhY3R1YWxUeXBlID0gbm9kZS5pbnN0cnVjdGlvblR5cGU7CiAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZTsKICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGNvbXB1dGVkIGEgbW9yZSBzcGVjaWZpYyB0eXBlLCBrZWVwIHRoYXQgdHlwZS4KICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuaXNJbnN0YW5jZU9mT3JOdWxsKGFjdHVhbFR5cGUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJlc3VsdFR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzFUeXBlOwogICAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuaXNJbnN0YW5jZU9mT3JOdWxsKGFjdHVhbFR5cGUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJlc3VsdFR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzJUeXBlOwogICAgICB9CiAgICAgIEhHZXRMZW5ndGggcmVzdWx0ID0KICAgICAgICAgIG5ldyBIR2V0TGVuZ3RoKGFjdHVhbFJlY2VpdmVyLCByZXN1bHRUeXBlLCBpc0Fzc2lnbmFibGU6ICFpc0ZpeGVkKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSBpZiAoYWN0dWFsUmVjZWl2ZXIuaXNDb25zdGFudE1hcCgpKSB7CiAgICAgIEhDb25zdGFudCBjb25zdGFudElucHV0ID0gYWN0dWFsUmVjZWl2ZXI7CiAgICAgIE1hcENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBjb25zdGFudElucHV0LmNvbnN0YW50OwogICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50SW50KGNvbnN0YW50Lmxlbmd0aCwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgSEluc3RydWN0aW9uIGhhbmRsZUludGVyY2VwdGVkQ2FsbChISW52b2tlRHluYW1pYyBub2RlKSB7CiAgICAvLyBUcnkgY29uc3RhbnQgZm9sZGluZyB0aGUgaW5zdHJ1Y3Rpb24uCiAgICBjb25zdGFudF9zeXN0ZW0uT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG5vZGUuc3BlY2lhbGl6ZXIub3BlcmF0aW9uKCk7CiAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbm9kZS5pbnB1dHMubGVuZ3RoID09IDIKICAgICAgICAgID8gZm9sZFVuYXJ5KG9wZXJhdGlvbiwgbm9kZS5pbnB1dHNbMV0pCiAgICAgICAgICA6IGZvbGRCaW5hcnkob3BlcmF0aW9uLCBub2RlLmlucHV0c1sxXSwgbm9kZS5pbnB1dHNbMl0pOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgcmV0dXJuIGluc3RydWN0aW9uOwogICAgfQoKICAgIC8vIFRyeSBjb252ZXJ0aW5nIHRoZSBpbnN0cnVjdGlvbiB0byBhIGJ1aWx0aW4gaW5zdHJ1Y3Rpb24uCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBub2RlLnNwZWNpYWxpemVyLnRyeUNvbnZlcnRUb0J1aWx0aW4obm9kZSwKICAgICAgICBfZ3JhcGgsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBjb21tb25FbGVtZW50cywgX2Nsb3NlZFdvcmxkLCBfbG9nKTsKICAgIGlmIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICAgIH0KCiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5vZGUuc2VsZWN0b3I7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBub2RlLnJlY2VpdmVyVHlwZTsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IG5vZGUuaW5wdXRzWzFdOwoKICAgIGJvb2wgYXBwbGllcyhNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICByZXR1cm4gc2VsZWN0b3IuYXBwbGllcyhlbGVtZW50KSAmJgogICAgICAgICAgKG1hc2sgPT0gbnVsbCB8fAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgICAgIC5pc1RhcmdldGluZ01lbWJlcihtYXNrLCBlbGVtZW50LCBzZWxlY3Rvci5tZW1iZXJOYW1lKQogICAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpOwogICAgfQoKICAgIGlmIChzZWxlY3Rvci5pc0NhbGwgfHwgc2VsZWN0b3IuaXNPcGVyYXRvcikgewogICAgICBGdW5jdGlvbkVudGl0eSB0YXJnZXQ7CiAgICAgIGlmIChpbnB1dC5pc0V4dGVuZGFibGVBcnJheShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGlmIChhcHBsaWVzKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlSZW1vdmVMYXN0KSkgewogICAgICAgICAgdGFyZ2V0ID0gY29tbW9uRWxlbWVudHMuanNBcnJheVJlbW92ZUxhc3Q7CiAgICAgICAgfSBlbHNlIGlmIChhcHBsaWVzKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlBZGQpKSB7CiAgICAgICAgICAvLyBUaGUgY29kZWdlbiBzcGVjaWFsIGNhc2VzIGFycmF5IGNhbGxzLCBidXQgZG9lcyBub3QKICAgICAgICAgIC8vIGlubGluZSBhcmd1bWVudCB0eXBlIGNoZWNrcy4KICAgICAgICAgIGlmICghX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3koY29tbW9uRWxlbWVudHMuanNBcnJheUFkZCkKICAgICAgICAgICAgICAgICAgLmlzRW1pdHRlZCB8fAogICAgICAgICAgICAgIGlucHV0IGlzIEhMaXRlcmFsTGlzdCkgewogICAgICAgICAgICB0YXJnZXQgPSBjb21tb25FbGVtZW50cy5qc0FycmF5QWRkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpbnB1dC5pc1N0cmluZ09yTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGlmIChjb21tb25FbGVtZW50cy5hcHBsaWVzVG9Kc1N0cmluZ1NwbGl0KAogICAgICAgICAgICBzZWxlY3RvciwgbWFzaywgX2Fic3RyYWN0VmFsdWVEb21haW4pKSB7CiAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaW5nU3BsaXQobm9kZSk7CiAgICAgICAgfSBlbHNlIGlmIChhcHBsaWVzKGNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nT3BlcmF0b3JBZGQpKSB7CiAgICAgICAgICAvLyBgb3BlcmF0b3IrYCBpcyB0dXJuZWQgaW50byBhIEphdmFTY3JpcHQgJysnIHNvIHdlIG5lZWQgdG8KICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgcmVjZWl2ZXIgYW5kIHRoZSBhcmd1bWVudCBhcmUgbm90IG51bGwuCiAgICAgICAgICAvLyBUT0RPKHNyYSk6IERvIHRoaXMgdmlhIFtub2RlLnNwZWNpYWxpemVyXS4KICAgICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzJdOwogICAgICAgICAgaWYgKGFyZ3VtZW50LmlzU3RyaW5nKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICAgICAgaW5wdXQuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEhTdHJpbmdDb25jYXQoaW5wdXQsIGFyZ3VtZW50LCBub2RlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChhcHBsaWVzKGNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nVG9TdHJpbmcpICYmCiAgICAgICAgICAgIGlucHV0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICAgIHJldHVybiBpbnB1dDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7CiAgICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBUaGVyZSBpcyBhIHN0cm9uZyBkZXBlbmRlbmN5IGJldHdlZW4gY29kZWdlbgogICAgICAgIC8vIGFuZCB0aGlzIG9wdGltaXphdGlvbiB0aGF0IHRoZSBkeW5hbWljIGludm9rZSBkb2VzIG5vdCBuZWVkIGFuCiAgICAgICAgLy8gaW50ZXJjZXB0b3IuIFdlIGN1cnJlbnRseSBuZWVkIHRvIGtlZXAgYQogICAgICAgIC8vIEhJbnZva2VEeW5hbWljTWV0aG9kIGFuZCBub3QgY3JlYXRlIGEgSEZvcmVpZ24gYmVjYXVzZQogICAgICAgIC8vIEhGb3JlaWduIGlzIHRvbyBvcGFxdWUgZm9yIHRoZSBTc2FDaGVja0luc2VydGVyICh0aGF0IGFkZHMgYQogICAgICAgIC8vIGJvdW5kcyBjaGVjayBvbiByZW1vdmVMYXN0KS4gT25jZSB3ZSBzdGFydCBpbmxpbmluZywgdGhlCiAgICAgICAgLy8gYm91bmRzIGNoZWNrIHdpbGwgYmVjb21lIGV4cGxpY2l0LCBzbyB3ZSB3b24ndCBuZWVkIHRoaXMKICAgICAgICAvLyBvcHRpbWl6YXRpb24uCiAgICAgICAgSEludm9rZUR5bmFtaWNNZXRob2QgcmVzdWx0ID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICAgICAgICBub2RlLnNlbGVjdG9yLAogICAgICAgICAgICBub2RlLnJlY2VpdmVyVHlwZSwKICAgICAgICAgICAgbm9kZS5pbnB1dHMuc3VibGlzdCgxKSwgLy8gRHJvcCBpbnRlcmNlcHRvci4KICAgICAgICAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsCiAgICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgaXNJbnRlcmNlcHRlZDogZmFsc2UpOwogICAgICAgIHJlc3VsdC5lbGVtZW50ID0gdGFyZ2V0OwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgaWYgKGNvbW1vbkVsZW1lbnRzLmFwcGxpZXNUb0pzSW5kZXhhYmxlTGVuZ3RoKHNlbGVjdG9yKSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBvcHRpbWl6ZWQgPSB0cnlPcHRpbWl6ZUxlbmd0aEludGVyY2VwdGVkR2V0dGVyKG5vZGUpOwogICAgICAgIGlmIChvcHRpbWl6ZWQgIT0gbnVsbCkgcmV0dXJuIG9wdGltaXplZDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KCiAgSEluc3RydWN0aW9uIGhhbmRsZVN0cmluZ1NwbGl0KEhJbnZva2VEeW5hbWljIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzJdOwogICAgaWYgKCFhcmd1bWVudC5pc1N0cmluZyhfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICAvLyBSZXBsYWNlIGBzLnNwbGl0JDEocGF0dGVybilgIHdpdGgKICAgIC8vCiAgICAvLyAgICAgdDEgPSBzLnNwbGl0KHBhdHRlcm4pOwogICAgLy8gICAgIHQyID0gU3RyaW5nOwogICAgLy8gICAgIHQzID0gSlNBcnJheTx0Mj47CiAgICAvLyAgICAgdDQgPSBzZXRSdW50aW1lVHlwZUluZm8odDEsIHQzKTsKICAgIC8vCgogICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRNYXNrID0gX2Fic3RyYWN0VmFsdWVEb21haW4uZ3Jvd2FibGVMaXN0VHlwZTsKCiAgICBISW52b2tlRHluYW1pY01ldGhvZCBzcGxpdEluc3RydWN0aW9uID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICAgIG5vZGUuc2VsZWN0b3IsCiAgICAgICAgbm9kZS5yZWNlaXZlclR5cGUsCiAgICAgICAgbm9kZS5pbnB1dHMuc3VibGlzdCgxKSwgLy8gRHJvcCBpbnRlcmNlcHRvci4KICAgICAgICByZXN1bHRNYXNrLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIGlzSW50ZXJjZXB0ZWQ6IGZhbHNlKQogICAgICAuLmVsZW1lbnQgPSBjb21tb25FbGVtZW50cy5qc1N0cmluZ1NwbGl0CiAgICAgIC4uc2V0QWxsb2NhdGlvbih0cnVlKTsKCiAgICBpZiAoIV9jbG9zZWRXb3JsZC5ydGlOZWVkCiAgICAgICAgLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykpIHsKICAgICAgcmV0dXJuIHNwbGl0SW5zdHJ1Y3Rpb247CiAgICB9CgogICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgc3BsaXRJbnN0cnVjdGlvbik7CgogICAgSEluc3RydWN0aW9uIHR5cGVJbmZvOwogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgdHlwZUluZm8gPSBITG9hZFR5cGUoCiAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgICAgICAgICAgY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzLCBbY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZV0pLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICBub2RlLmJsb2NrLmFkZEJlZm9yZShub2RlLCB0eXBlSW5mbyk7CiAgICB9IGVsc2UgewogICAgICBISW5zdHJ1Y3Rpb24gc3RyaW5nVHlwZUluZm8gPSBuZXcgSFR5cGVJbmZvRXhwcmVzc2lvbigKICAgICAgICAgIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUsCiAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgICAgLmdldFRoaXNUeXBlKGNvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSwKICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgIG5vZGUuYmxvY2suYWRkQmVmb3JlKG5vZGUsIHN0cmluZ1R5cGVJbmZvKTsKCiAgICAgIHR5cGVJbmZvID0gbmV3IEhUeXBlSW5mb0V4cHJlc3Npb24oCiAgICAgICAgICBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLklOU1RBTkNFLAogICAgICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgICAgIC5nZXRUaGlzVHlwZShjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpLAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5bc3RyaW5nVHlwZUluZm9dLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICBub2RlLmJsb2NrLmFkZEJlZm9yZShub2RlLCB0eXBlSW5mbyk7CiAgICB9CgogICAgSEludm9rZVN0YXRpYyB0YWdJbnN0cnVjdGlvbiA9IG5ldyBISW52b2tlU3RhdGljKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgICA8SEluc3RydWN0aW9uPltzcGxpdEluc3RydWN0aW9uLCB0eXBlSW5mb10sCiAgICAgICAgcmVzdWx0TWFzaywKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10pOwogICAgLy8gJ0xpbmVhciB0eXBpbmcnIHRyaWNrOiBbdGFnSW5zdHJ1Y3Rpb25dIGlzIHRoZSBvbmx5IHVzZSBvZiB0aGUKICAgIC8vIFtzcGxpdEluc3RydWN0aW9uXSwgc28gaXQgYmVjb21lcyB0aGUgc29sZSBhbGlhcy4KICAgIC8vIFRPRE8oc3JhKTogQnVpbGQgdGhpcyBrbm93bGVkZ2UgaW50byBhbGlhcyBhbmFseXNpcy4KICAgIHRhZ0luc3RydWN0aW9uLnNldEFsbG9jYXRpb24odHJ1ZSk7CgogICAgcmV0dXJuIHRhZ0luc3RydWN0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKSB7CiAgICBwcm9wYWdhdGVDb25zdGFudFZhbHVlVG9Vc2VzKG5vZGUpOwogICAgaWYgKG5vZGUuaXNJbnRlcmNlcHRlZENhbGwpIHsKICAgICAgSEluc3RydWN0aW9uIGZvbGRlZCA9IGhhbmRsZUludGVyY2VwdGVkQ2FsbChub2RlKTsKICAgICAgaWYgKGZvbGRlZCAhPSBub2RlKSByZXR1cm4gZm9sZGVkOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IG5vZGUuZ2V0RGFydFJlY2VpdmVyKF9jbG9zZWRXb3JsZCk7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZTsKICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0KICAgICAgICBfY2xvc2VkV29ybGQubG9jYXRlU2luZ2xlTWVtYmVyKG5vZGUuc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSk7CiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IEFsc28gZm9sZCBpZiBpdCdzIGEgZ2V0dGVyIG9yIHZhcmlhYmxlLgogICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJgogICAgICAgIGVsZW1lbnQuaXNGdW5jdGlvbiAmJgogICAgICAgIC8vIElmIHdlIGZvdW5kIG91dCB0aGF0IHRoZSBvbmx5IHRhcmdldCBpcyBhbiBpbXBsaWNpdGx5IGNhbGxlZAogICAgICAgIC8vIFs6bm9TdWNoTWV0aG9kOl0gd2UganVzdCBpZ25vcmUgaXQuCiAgICAgICAgbm9kZS5zZWxlY3Rvci5hcHBsaWVzKGVsZW1lbnQpKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGVsZW1lbnQ7CgogICAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIobWV0aG9kKSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSB0cnlJbmxpbmVOYXRpdmVNZXRob2Qobm9kZSwgbWV0aG9kKTsKICAgICAgICBpZiAoZm9sZGVkICE9IG51bGwpIHJldHVybiBmb2xkZWQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBJZiB0aGUgbWV0aG9kIGhhcyBvcHRpb25hbCBwYXJhbWV0ZXJzLAogICAgICAgIC8vIHdlIHNob3VsZCBwYXNzIHRoZSBkZWZhdWx0IHZhbHVlcy4KICAgICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVycyA9IG1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgICAgICAgaWYgKHBhcmFtZXRlcnMudG90YWxQYXJhbWV0ZXJzID09IG5vZGUuc2VsZWN0b3IuYXJndW1lbnRDb3VudCAmJgogICAgICAgICAgICBwYXJhbWV0ZXJzLnR5cGVQYXJhbWV0ZXJzID09CiAgICAgICAgICAgICAgICBub2RlLnNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQpIHsKICAgICAgICAgIG5vZGUuZWxlbWVudCA9IG1ldGhvZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgLy8gUmVwbGFjZSBtZXRob2QgY2FsbHMgdGhyb3VnaCBmaWVsZHMgd2l0aCBhIGNsb3N1cmUgY2FsbCBvbiB0aGUgdmFsdWUgb2YKICAgIC8vIHRoZSBmaWVsZC4gVGhpcyB1c3VhbGx5IHJlbW92ZXMgdGhlIGRlbWFuZCBmb3IgdGhlIGNhbGwtdGhyb3VnaCBzdHViIGFuZAogICAgLy8gbWFrZXMgdGhlIGZpZWxkIGxvYWQgYXZhaWxhYmxlIHRvIGZ1cnRoZXIgb3B0aW1pemF0aW9uLCBlLmcuIExJQ00uCgogICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJgogICAgICAgIGVsZW1lbnQuaXNGaWVsZCAmJgogICAgICAgIGVsZW1lbnQubmFtZSA9PSBub2RlLnNlbGVjdG9yLm5hbWUpIHsKICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBlbGVtZW50OwogICAgICBpZiAoIV9uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKGZpZWxkKSAmJgogICAgICAgICAgIW5vZGUuaXNDYWxsT25JbnRlcmNlcHRvcihfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgLy8gSW5zZXJ0aW9uIHBvaW50IGZvciB0aGUgY2xvc3VyZSBjYWxsLgogICAgICAgIEhJbnN0cnVjdGlvbiBpbnNlcnRpb25Qb2ludCA9IG5vZGU7CiAgICAgICAgSEluc3RydWN0aW9uIGxvYWQ7CiAgICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0KICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKTsKICAgICAgICBpZiAoZmllbGREYXRhLmlzRWZmZWN0aXZlbHlDb25zdGFudCkgewogICAgICAgICAgLy8gVGhlIGZpZWxkIGlzIGVsaWRlZCBhbmQgcmVwbGFjZSBpdCB3aXRoIGl0cyBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwocmVjZWl2ZXJUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgICAgICAvLyBUaGUgcmVjZWl2ZXIgaXMgcG90ZW50aWFsbHkgYG51bGxgIHNvIHdlIGluc2VydCBhIG51bGwgcmVjZWl2ZXIKICAgICAgICAgICAgLy8gZ3VhcmQgdG8gdHJpZ2dlciBhIG51bGwgcG9pbnRlciBleGNlcHRpb24uCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgaW5zZXJ0ZWQgdW5jb25kaXRpb25hbGx5IGFuZCByZW1vdmVkIGJ5IGxhdGVyCiAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbnMgaWYgdW5uZWNlc3NhcnksIGJ1dCBwZXJmb3JtYW5jZSB3ZSBkbyBpdAogICAgICAgICAgICAvLyBjb25kaXRpb25hbGx5IGhlcmUuCiAgICAgICAgICAgIC8vIFRPRE8oMzU5OTYpOiBSZXBsYWNlIHdpdGggbnVsbCByZWNlaXZlciBndWFyZCBpbnN0cnVjdGlvbi4KICAgICAgICAgICAgSEluc3RydWN0aW9uIGR1bW15R2V0ID0gbmV3IEhGaWVsZEdldChudWxsLCByZWNlaXZlciwKICAgICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICAgICAgaXNBc3NpZ25hYmxlOiBmYWxzZSk7CiAgICAgICAgICAgIF9sb2c/LnJlZ2lzdGVyRmllbGRDYWxsKG5vZGUsIGR1bW15R2V0KTsKICAgICAgICAgICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgZHVtbXlHZXQpOwogICAgICAgICAgICBpbnNlcnRpb25Qb2ludCA9IGR1bW15R2V0OwogICAgICAgICAgfQogICAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGZpZWxkRGF0YS5jb25zdGFudFZhbHVlOwogICAgICAgICAgbG9hZCA9IF9ncmFwaC5hZGRDb25zdGFudCh2YWx1ZSwgX2Nsb3NlZFdvcmxkLAogICAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIF9sb2c/LnJlZ2lzdGVyQ29uc3RhbnRGaWVsZENhbGwobm9kZSwgZmllbGQsIGxvYWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPSBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgICAgICAgICAgZmllbGQsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgICAgICAgIGxvYWQgPSBuZXcgSEZpZWxkR2V0KGZpZWxkLCByZWNlaXZlciwgdHlwZSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgICBfbG9nPy5yZWdpc3RlckZpZWxkQ2FsbChub2RlLCBsb2FkKTsKICAgICAgICAgIG5vZGUuYmxvY2suYWRkQmVmb3JlKG5vZGUsIGxvYWQpOwogICAgICAgICAgaW5zZXJ0aW9uUG9pbnQgPSBsb2FkOwogICAgICAgIH0KICAgICAgICBTZWxlY3RvciBjYWxsU2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IuY2FsbENsb3N1cmVGcm9tKG5vZGUuc2VsZWN0b3IpOwogICAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltsb2FkXQogICAgICAgICAgLi5hZGRBbGwobm9kZS5pbnB1dHMuc2tpcChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsID8gMiA6IDEpKTsKICAgICAgICBEYXJ0VHlwZSBmaWVsZFR5cGUgPQogICAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldEZpZWxkVHlwZShmaWVsZCk7CiAgICAgICAgSEluc3RydWN0aW9uIGNsb3N1cmVDYWxsID0gbmV3IEhJbnZva2VDbG9zdXJlKAogICAgICAgICAgICBjYWxsU2VsZWN0b3IsCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgICAuY3JlYXRlRnJvbVN0YXRpY1R5cGUoZmllbGRUeXBlLCBudWxsYWJsZTogdHJ1ZSkKICAgICAgICAgICAgICAgIC5hYnN0cmFjdFZhbHVlLAogICAgICAgICAgICBpbnB1dHMsCiAgICAgICAgICAgIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLAogICAgICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMpCiAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBub2RlLmJsb2NrLmFkZEFmdGVyKGluc2VydGlvblBvaW50LCBjbG9zdXJlQ2FsbCk7CiAgICAgICAgcmV0dXJuIGNsb3N1cmVDYWxsOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ5SW5saW5lTmF0aXZlTWV0aG9kKAogICAgICBISW52b2tlRHluYW1pY01ldGhvZCBub2RlLCBGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIC8vIFdlIGNhbiByZXBsYWNlIHRoZSBjYWxsIHRvIHRoZSBuYXRpdmUgY2xhc3MgaW50ZXJjZXB0b3IgbWV0aG9kICh0YXJnZXQpCiAgICAvLyBpZiB0aGUgdGFyZ2V0IGRvZXMgbm8gY29udmVyc2lvbnMgb3IgdXNlZnVsIHR5cGUgY2hlY2tzLgogICAgaWYgKF9vcHRpb25zLmRpc2FibGVJbmxpbmluZykgcmV0dXJuIG51bGw7CiAgICBpZiAoX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5oYXNOb0lubGluZShtZXRob2QpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSByZXR1cm4gbnVsbDsKCiAgICBGdW5jdGlvblR5cGUgdHlwZSA9IF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKG1ldGhvZCk7CiAgICBpZiAodHlwZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgcmV0dXJuIG51bGw7CgogICAgLy8gVGhlIGNhbGwgc2l0ZSBtaWdodCBvbWl0IG9wdGlvbmFsIGFyZ3VtZW50cy4gVGhlIGlubGluZWQgY29kZSBtdXN0CiAgICAvLyBwcmVzZXJ2ZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgc28gY2hlY2sgb25seSB0aGUgYWN0dWFsIGFyZ3VtZW50cy4KCiAgICBib29sIGNhbklubGluZSA9IHRydWU7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gbm9kZS5pbnB1dHM7CiAgICBpbnQgaW5wdXRQb3NpdGlvbiA9IDI7IC8vIFNraXAgaW50ZXJjZXB0b3IgYW5kIHJlY2VpdmVyLgoKICAgIHZvaWQgY2hlY2tQYXJhbWV0ZXJUeXBlKERhcnRUeXBlIHBhcmFtZXRlclR5cGUpIHsKICAgICAgaWYgKCFjYW5JbmxpbmUpIHJldHVybjsKICAgICAgaWYgKGlucHV0UG9zaXRpb24gPj0gaW5wdXRzLmxlbmd0aCkgcmV0dXJuOwogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnB1dHNbaW5wdXRQb3NpdGlvbisrXTsKICAgICAgaWYgKHBhcmFtZXRlclR5cGUudW5hbGlhc2VkLmlzRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgLy8gTXVzdCBjYWxsIHRoZSB0YXJnZXQgc2luY2UgaXQgY29udGFpbnMgYSBmdW5jdGlvbiBjb252ZXJzaW9uLgogICAgICAgIGNhbklubGluZSA9IGZhbHNlOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgLy8gSWYgdGhlIHRhcmdldCBoYXMgbm8gY2hlY2tzIGRvbid0IGxldCBhIGJhZCB0eXBlIHN0b3AgdXMgaW5saW5pbmcuCiAgICAgIGlmICghX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG1ldGhvZCkKICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIEFic3RyYWN0VmFsdWUgcGFyYW1ldGVyQWJzdHJhY3RWYWx1ZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuZ2V0QWJzdHJhY3RWYWx1ZUZvck5hdGl2ZU1ldGhvZFBhcmFtZXRlclR5cGUocGFyYW1ldGVyVHlwZSk7CgogICAgICBpZiAocGFyYW1ldGVyQWJzdHJhY3RWYWx1ZSA9PSBudWxsIHx8CiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAgIC5pc0luKGlucHV0Lmluc3RydWN0aW9uVHlwZSwgcGFyYW1ldGVyQWJzdHJhY3RWYWx1ZSkKICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgICAgY2FuSW5saW5lID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgdHlwZS5wYXJhbWV0ZXJUeXBlcy5mb3JFYWNoKGNoZWNrUGFyYW1ldGVyVHlwZSk7CiAgICB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuZm9yRWFjaChjaGVja1BhcmFtZXRlclR5cGUpOwogICAgYXNzZXJ0KHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcy5pc0VtcHR5KTsKCiAgICBpZiAoIWNhbklubGluZSkgcmV0dXJuIG51bGw7CgogICAgLy8gU3RyZW5ndGhlbiBpbnN0cnVjdGlvbiB0eXBlIGZyb20gYW5ub3RhdGlvbnMgdG8gaGVscCBvcHRpbWl6ZQogICAgLy8gZGVwZW5kZW50IGluc3RydWN0aW9ucy4KICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0gX25hdGl2ZURhdGEuZ2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IobWV0aG9kKTsKICAgIEFic3RyYWN0VmFsdWUgcmV0dXJuVHlwZSA9CiAgICAgICAgQWJzdHJhY3RWYWx1ZUZhY3RvcnkuZnJvbU5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yLCBfY2xvc2VkV29ybGQpOwogICAgSEludm9rZUR5bmFtaWNNZXRob2QgcmVzdWx0ID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICAgIG5vZGUuc2VsZWN0b3IsCiAgICAgICAgbm9kZS5yZWNlaXZlclR5cGUsCiAgICAgICAgaW5wdXRzLnN1Ymxpc3QoMSksIC8vIERyb3AgaW50ZXJjZXB0b3IuCiAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMsCiAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICByZXN1bHQuZWxlbWVudCA9IG1ldGhvZDsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLm1ldGhvZElubGluaW5nKG1ldGhvZCwgbnVsbCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBub2RlLmluZGV4OwogICAgaWYgKGluZGV4LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICAgIGlmIChpbmRleC5pc0NvbnN0YW50KCkpIHsKICAgICAgSENvbnN0YW50IGNvbnN0YW50SW5zdHJ1Y3Rpb24gPSBpbmRleDsKICAgICAgYXNzZXJ0KCFjb25zdGFudEluc3RydWN0aW9uLmNvbnN0YW50LmlzSW50KTsKICAgICAgaWYgKCFjb25zdGFudF9zeXN0ZW0uaXNJbnQoY29uc3RhbnRJbnN0cnVjdGlvbi5jb25zdGFudCkpIHsKICAgICAgICAvLyAtMC4wIGlzIGEgZG91YmxlIGJ1dCB3aWxsIHBhc3MgdGhlIHJ1bnRpbWUgaW50ZWdlciBjaGVjay4KICAgICAgICBub2RlLnN0YXRpY0NoZWNrcyA9IEhCb3VuZHNDaGVjay5BTFdBWVNfRkFMU0U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgSEluc3RydWN0aW9uIGZvbGRCaW5hcnkoY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24sCiAgICAgIEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQpIHsKICAgIGlmIChsZWZ0IGlzIEhDb25zdGFudCAmJiByaWdodCBpcyBIQ29uc3RhbnQpIHsKICAgICAgSENvbnN0YW50IG9wMSA9IGxlZnQ7CiAgICAgIEhDb25zdGFudCBvcDIgPSByaWdodDsKICAgICAgQ29uc3RhbnRWYWx1ZSBmb2xkZWQgPSBvcGVyYXRpb24uZm9sZChvcDEuY29uc3RhbnQsIG9wMi5jb25zdGFudCk7CiAgICAgIGlmIChmb2xkZWQgIT0gbnVsbCkgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudChmb2xkZWQsIF9jbG9zZWRXb3JsZCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEFkZChIQWRkIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIC8vIFdlIGNhbiBvbmx5IHBlcmZvcm0gdGhpcyByZXdyaXRpbmcgb24gSW50ZWdlciwgYXMgaXQgaXMgbm90CiAgICAvLyB2YWxpZCBmb3IgLTAuMC4KICAgIGlmIChsZWZ0LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAobGVmdCBpcyBIQ29uc3RhbnQgJiYgbGVmdC5jb25zdGFudC5pc1plcm8pIHJldHVybiByaWdodDsKICAgICAgaWYgKHJpZ2h0IGlzIEhDb25zdGFudCAmJiByaWdodC5jb25zdGFudC5pc1plcm8pIHJldHVybiBsZWZ0OwogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0QWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0TXVsdGlwbHkoSE11bHRpcGx5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIGlmIChsZWZ0LmlzTnVtYmVyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGxlZnQgaXMgSENvbnN0YW50ICYmIGxlZnQuY29uc3RhbnQuaXNPbmUpIHJldHVybiByaWdodDsKICAgICAgaWYgKHJpZ2h0IGlzIEhDb25zdGFudCAmJiByaWdodC5jb25zdGFudC5pc09uZSkgcmV0dXJuIGxlZnQ7CiAgICB9CiAgICByZXR1cm4gc3VwZXIudmlzaXRNdWx0aXBseShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZUJpbmFyeShISW52b2tlQmluYXJ5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uID0gbm9kZS5vcGVyYXRpb24oKTsKICAgIEhDb25zdGFudCBmb2xkZWQgPSBmb2xkQmluYXJ5KG9wZXJhdGlvbiwgbGVmdCwgcmlnaHQpOwogICAgaWYgKGZvbGRlZCAhPSBudWxsKSByZXR1cm4gZm9sZGVkOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRSZWxhdGlvbmFsKEhSZWxhdGlvbmFsIG5vZGUpIHsKICAgIHJldHVybiBzdXBlci52aXNpdFJlbGF0aW9uYWwobm9kZSk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gaGFuZGxlSWRlbnRpdHlDaGVjayhIUmVsYXRpb25hbCBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IG5vZGUubGVmdDsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IG5vZGUucmlnaHQ7CiAgICBBYnN0cmFjdFZhbHVlIGxlZnRUeXBlID0gbGVmdC5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIHJpZ2h0VHlwZSA9IHJpZ2h0Lmluc3RydWN0aW9uVHlwZTsKCiAgICBISW5zdHJ1Y3Rpb24gbWFrZVRydWUoKSA9PiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICBISW5zdHJ1Y3Rpb24gbWFrZUZhbHNlKCkgPT4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgX2Nsb3NlZFdvcmxkKTsKCiAgICAvLyBJbnRlcnNlY3Rpb24gb2YgaW50IGFuZCBkb3VibGUgcmV0dXJuIGNvbmZsaWN0aW5nLCBzbwogICAgLy8gd2UgZG9uJ3Qgb3B0aW1pemUgb24gbnVtYmVycyB0byBwcmVzZXJ2ZSB0aGUgcnVudGltZSBzZW1hbnRpY3MuCiAgICBpZiAoIShsZWZ0LmlzTnVtYmVyT3JOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNOdW1iZXJPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpKSB7CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmFyZURpc2pvaW50KGxlZnRUeXBlLCByaWdodFR5cGUpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBtYWtlRmFsc2UoKTsKICAgICAgfQogICAgfQoKICAgIGlmIChsZWZ0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gbWFrZVRydWUoKTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gY29tcGFyZUNvbnN0YW50KEhDb25zdGFudCBjb25zdGFudCwgSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICAgIGlmIChjb25zdGFudC5jb25zdGFudC5pc1RydWUpIHsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBITm90KGlucHV0LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobGVmdC5pc0NvbnN0YW50Qm9vbGVhbigpICYmCiAgICAgICAgcmlnaHQuaXNCb29sZWFuKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjb21wYXJlQ29uc3RhbnQobGVmdCwgcmlnaHQpOwogICAgfQoKICAgIGlmIChyaWdodC5pc0NvbnN0YW50Qm9vbGVhbigpICYmCiAgICAgICAgbGVmdC5pc0Jvb2xlYW4oX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNvbXBhcmVDb25zdGFudChyaWdodCwgbGVmdCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChsZWZ0Lm5vbkNoZWNrKCksIHJpZ2h0Lm5vbkNoZWNrKCkpKSB7CiAgICAgIC8vIEF2b2lkIGNvbnN0YW50LWZvbGRpbmcgYGlkZW50aWNhbCh4LCB4KWAgd2hlbiBgeGAgbWlnaHQgYmUgZG91YmxlLiAgVGhlCiAgICAgIC8vIGRhcnQyanMgcnVudGltZSBoYXMgbm90IGFsd2F5cyBiZWVuIGNvbnNpc3RlbnQgd2l0aCB0aGUgRGFydAogICAgICAvLyBzcGVjaWZpY2F0aW9uIChzZWN0aW9uIDE2LjAuMSksIHdoaWNoIG1ha2VzIGRpc3RpbmN0aW9ucyBvbiBOYU5zIGFuZAogICAgICAvLyAtMC4wIHRoYXQgYXJlIGhhcmQgdG8gaW1wbGVtZW50IGVmZmljaWVudGx5LgogICAgICBpZiAobGVmdC5pc0ludGVnZXJPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gbWFrZVRydWUoKTsKICAgICAgfQogICAgICBpZiAobGVmdC5pc1ByaW1pdGl2ZU51bWJlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICByZXR1cm4gbWFrZVRydWUoKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBuZXdJbnN0cnVjdGlvbiA9IGhhbmRsZUlkZW50aXR5Q2hlY2sobm9kZSk7CiAgICByZXR1cm4gbmV3SW5zdHJ1Y3Rpb24gPT0gbnVsbCA/IHN1cGVyLnZpc2l0SWRlbnRpdHkobm9kZSkgOiBuZXdJbnN0cnVjdGlvbjsKICB9CgogIHZvaWQgc2ltcGxpZnlDb25kaXRpb24oCiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrLCBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uLCBib29sIHZhbHVlKSB7CiAgICAvLyBgZXhjbHVkZVBoaU91dEVkZ2VzOiB0cnVlYCBwcmV2ZW50cyByZXBsYWNpbmcgYSBwYXJ0aWFsbHkgZG9taW5hdGVkIHBoaQogICAgLy8gbm9kZSBpbnB1dCB3aXRoIGEgY29uc3RhbnQuIFRoaXMgdGVuZHMgdG8gYWRkIHVubmVjZXNzYXJ5IGFzc2lnbm1lbnRzLCBieQogICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBmb2xsb3dpbmcsIHdoaWNoIGhhcyBwaGkoZmFsc2UsIHgpLAogICAgLy8KICAgIC8vICAgIGlmICh4KSB7IGluaXQoKTsgeCA9IGZhbHNlOyB9CiAgICAvLwogICAgLy8gaW50byB0aGlzLCB3aGljaCBoYXMgcGhpKGZhbHNlLCBmYWxzZSkKICAgIC8vCiAgICAvLyAgICBpZiAoeCkgeyBpbml0KCk7IHggPSBmYWxzZTsgfSBlbHNlIHsgeCA9IGZhbHNlOyB9CiAgICAvLwogICAgLy8gd2hpY2ggaXMgZnVydGhlciBzaW1wbGlmaWVkIHRvOgogICAgLy8KICAgIC8vICAgIGlmICh4KSB7IGluaXQoKTsgfQogICAgLy8gICAgLi4uCiAgICAvLyAgICB4ID0gZmFsc2U7CiAgICAvLwogICAgLy8gVGhpcyBpcyBtb3N0bHkgaGFybWxlc3MgKGlmIGEgbGl0dGxlIGNvbmZ1c2luZykgYnV0IGRvZXMgY2F1c2UgYSBsb3Qgb2YKICAgIC8vIGB4ID0gZmFsc2U7YCBjb3BpZXMgdG8gYmUgaW5zZXJ0ZWQgd2hlbiBhIGxvb3AgYm9keSBoYXMgbWFueSBjb250aW51ZQogICAgLy8gc3RhdGVtZW50cyBvciBlbmRzIHdpdGggYSBzd2l0Y2guCiAgICBEb21pbmF0ZWRVc2VzIHVzZXMgPQogICAgICAgIERvbWluYXRlZFVzZXMub2YoY29uZGl0aW9uLCBibG9jay5maXJzdCwgZXhjbHVkZVBoaU91dEVkZ2VzOiB0cnVlKTsKICAgIGlmICh1c2VzLmlzRW1wdHkpIHJldHVybjsKICAgIHVzZXMucmVwbGFjZVdpdGgoX2dyYXBoLmFkZENvbnN0YW50Qm9vbCh2YWx1ZSwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJZihISWYgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IG5vZGUuY29uZGl0aW9uOwogICAgaWYgKGNvbmRpdGlvbi5pc0NvbnN0YW50KCkpIHJldHVybiBub2RlOwogICAgYm9vbCBpc05lZ2F0ZWQgPSBjb25kaXRpb24gaXMgSE5vdDsKCiAgICBpZiAoaXNOZWdhdGVkKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5pbnB1dHNbMF07CiAgICB9IGVsc2UgewogICAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgTElDTSB0byBtb3ZlIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZQogICAgICAvLyBjb25kaXRpb24gb3V0IG9mIHRoZSBsb29wIHdoZXJlIGl0IHVzZWQuIFdlIHN0aWxsIHdhbnQgdG8KICAgICAgLy8gc2ltcGxpZnkgdGhlIG5lc3RlZCB1c2Ugb2YgdGhlIGNvbmRpdGlvbiBpbiB0aGF0IGNhc2UsIHNvCiAgICAgIC8vIHdlIGxvb2sgZm9yIGFsbCBkb21pbmF0aW5nIG5lZ2F0ZWQgY29uZGl0aW9ucyBhbmQgcmVwbGFjZQogICAgICAvLyBuZXN0ZWQgdXNlcyBvZiB0aGVtIHdpdGggdHJ1ZSBvciBmYWxzZS4KICAgICAgSXRlcmFibGU8SEluc3RydWN0aW9uPiBkb21pbmF0aW5nID0gY29uZGl0aW9uLnVzZWRCeQogICAgICAgICAgLndoZXJlKCh1c2VyKSA9PiB1c2VyIGlzIEhOb3QgJiYgdXNlci5kb21pbmF0ZXMobm9kZSkpOwogICAgICBkb21pbmF0aW5nLmZvckVhY2goKGhvaXN0ZWQpIHsKICAgICAgICBzaW1wbGlmeUNvbmRpdGlvbihub2RlLnRoZW5CbG9jaywgaG9pc3RlZCwgZmFsc2UpOwogICAgICAgIHNpbXBsaWZ5Q29uZGl0aW9uKG5vZGUuZWxzZUJsb2NrLCBob2lzdGVkLCB0cnVlKTsKICAgICAgfSk7CiAgICB9CiAgICBzaW1wbGlmeUNvbmRpdGlvbihub2RlLnRoZW5CbG9jaywgY29uZGl0aW9uLCAhaXNOZWdhdGVkKTsKICAgIHNpbXBsaWZ5Q29uZGl0aW9uKG5vZGUuZWxzZUJsb2NrLCBjb25kaXRpb24sIGlzTmVnYXRlZCk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdElzKEhJcyBub2RlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gbm9kZS50eXBlRXhwcmVzc2lvbjsKCiAgICBpZiAoIW5vZGUuaXNSYXdDaGVjaykgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0gZWxzZSBpZiAodHlwZS5pc1R5cGVkZWYpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNGdXR1cmVPcikgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlIHx8IHR5cGUudHJlYXRBc0R5bmFtaWMpIHsKICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEJvb2wodHJ1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24gPSBub2RlLmV4cHJlc3Npb247CiAgICBpZiAoZXhwcmVzc2lvbi5pc0ludGVnZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubnVtQ2xhc3MgfHwKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmlzTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGUoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBfY2xvc2VkV29ybGQpOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MpIHsKICAgICAgICAvLyBXZSBsZXQgdGhlIEpTIHNlbWFudGljcyBkZWNpZGUgZm9yIHRoYXQgY2hlY2suIEN1cnJlbnRseQogICAgICAgIC8vIHRoZSBjb2RlIHdlIGVtaXQgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEJvb2woZmFsc2UsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pc0RvdWJsZShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5udW1DbGFzcyB8fAogICAgICAgICAgY29tbW9uRWxlbWVudHMuaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZShlbGVtZW50KSkgewogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5pbnRDbGFzcykgewogICAgICAgIC8vIFdlIGxldCB0aGUgSlMgc2VtYW50aWNzIGRlY2lkZSBmb3IgdGhhdCBjaGVjay4gQ3VycmVudGx5CiAgICAgICAgLy8gdGhlIGNvZGUgd2UgZW1pdCB3aWxsIHJldHVybiB0cnVlIGZvciBhIGRvdWJsZSB0aGF0IGNhbiBiZQogICAgICAgIC8vIHJlcHJlc2VudGVkIGFzIGEgMzEtYml0IGludGVnZXIgYW5kIGZvciAtMC4wLgogICAgICAgIHJldHVybiBub2RlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKGZhbHNlLCBfY2xvc2VkV29ybGQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubnVtQ2xhc3MpIHsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBfY2xvc2VkV29ybGQpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFdlIGNhbm5vdCBqdXN0IHJldHVybiBmYWxzZSwgYmVjYXVzZSB0aGUgZXhwcmVzc2lvbiBtYXkgYmUgb2YKICAgICAgICAvLyB0eXBlIGludCBvciBkb3VibGUuCiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbgogICAgICAgICAgICAuaXNQcmltaXRpdmVOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSAmJgogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaW50Q2xhc3MpIHsKICAgICAgLy8gV2UgbGV0IHRoZSBKUyBzZW1hbnRpY3MgZGVjaWRlIGZvciB0aGF0IGNoZWNrLgogICAgICByZXR1cm4gbm9kZTsKICAgICAgLy8gV2UgbmVlZCB0aGUgWzpoYXNUeXBlQXJndW1lbnRzOl0gY2hlY2sgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCiAgICAgIC8vIHRoZSBub3Rpb24gb2YgZ2VuZXJpY3MgaW4gdGhlIGJhY2tlbmQuIEZvciBleGFtcGxlLCBbOnRoaXM6XSBpbgogICAgICAvLyBhIGNsYXNzIFs6QTxUPjpdLCBpcyBjdXJyZW50bHkgYWx3YXlzIGNvbnNpZGVyZWQgdG8gaGF2ZSB0aGUKICAgICAgLy8gcmF3IHR5cGUuCiAgICB9IGVsc2UgaWYgKCFSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zLmhhc1R5cGVBcmd1bWVudHModHlwZSkpIHsKICAgICAgQWJzdHJhY3RWYWx1ZSBleHByZXNzaW9uTWFzayA9IGV4cHJlc3Npb24uaW5zdHJ1Y3Rpb25UeXBlOwogICAgICBBYnN0cmFjdEJvb2wgaXNJbnN0YW5jZU9mID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW5zdGFuY2VPZihleHByZXNzaW9uTWFzaywgZWxlbWVudCk7CiAgICAgIGlmIChpc0luc3RhbmNlT2YuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSBpZiAoaXNJbnN0YW5jZU9mLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEJvb2woZmFsc2UsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkpIHJldHVybiBub2RlLmNoZWNrZWRJbnB1dDsKCiAgICAvLyBTaW1wbGlmeSAnYXMgVCcgd2hlcmUgVCBpcyBhIHNpbXBsZSB0eXBlLgogICAgRGFydFR5cGUgY2hlY2tlZFR5cGUgPSBub2RlLnR5cGVFeHByZXNzaW9uOwogICAgaWYgKGNoZWNrZWRUeXBlIGlzIFR5cGVWYXJpYWJsZVR5cGUgJiYgbm9kZS5pbnB1dHMubGVuZ3RoID09IDIpIHsKICAgICAgSEluc3RydWN0aW9uIHJlcCA9IG5vZGUudHlwZVJlcHJlc2VudGF0aW9uOwogICAgICBpZiAocmVwIGlzIEhUeXBlSW5mb0V4cHJlc3Npb24gJiYKICAgICAgICAgIHJlcC5raW5kID09IFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUgJiYKICAgICAgICAgIHJlcC5pbnB1dHMuaXNFbXB0eSkgewogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZXAuZGFydFR5cGU7CiAgICAgICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlICYmIHR5cGUudHJlYXRBc1JhdykgewogICAgICAgICAgcmV0dXJuIG5vZGUuY2hlY2tlZElucHV0LmNvbnZlcnRUeXBlKF9jbG9zZWRXb3JsZCwgdHlwZSwgbm9kZS5raW5kKQogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEJvb2xDb252ZXJzaW9uKEhCb29sQ29udmVyc2lvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIG5vZGUpIHsKICAgIHJldHVybiBub2RlLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkgPyBub2RlLmNoZWNrZWRJbnB1dCA6IG5vZGU7CiAgfQoKICBGaWVsZEVudGl0eSBmaW5kQ29uY3JldGVGaWVsZEZvckR5bmFtaWNBY2Nlc3MoCiAgICAgIEhJbnZva2VEeW5hbWljRmllbGQgbm9kZSwgSEluc3RydWN0aW9uIHJlY2VpdmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZTsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBub2RlLmVsZW1lbnQgaXMgRmllbGRFbnRpdHkKICAgICAgICA/IG5vZGUuZWxlbWVudAogICAgICAgIDogX2Nsb3NlZFdvcmxkLmxvY2F0ZVNpbmdsZU1lbWJlcihub2RlLnNlbGVjdG9yLCByZWNlaXZlclR5cGUpOwogICAgcmV0dXJuIG1lbWJlciBpcyBGaWVsZEVudGl0eSA/IG1lbWJlciA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRGaWVsZEdldChIRmllbGRHZXQgbm9kZSkgewogICAgaWYgKG5vZGUuaXNOdWxsQ2hlY2spIHJldHVybiBub2RlOwogICAgdmFyIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKCiAgICAvLyBIRmllbGRHZXQgb2YgYSBjb25zdHJ1Y3RlZCBjb25zdGFudCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGUgY29uc3RhbnQncwogICAgLy8gZmllbGQuCiAgICBpZiAocmVjZWl2ZXIgaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSByZWNlaXZlci5jb25zdGFudDsKICAgICAgaWYgKGNvbnN0YW50LmlzQ29uc3RydWN0ZWRPYmplY3QpIHsKICAgICAgICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RydWN0ZWRDb25zdGFudCA9IGNvbnN0YW50OwogICAgICAgIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT4gZmllbGRzID0gY29uc3RydWN0ZWRDb25zdGFudC5maWVsZHM7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGZpZWxkc1tub2RlLmVsZW1lbnRdOwogICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50KHZhbHVlLCBfY2xvc2VkV29ybGQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSkgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgIGlmIChfZ3JhcGguYWxsb2NhdGVkRml4ZWRMaXN0cy5jb250YWlucyhyZWNlaXZlcikpIHsKICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBjaGVja2luZyBpZiB0aGUgc2Vjb25kIGlucHV0IGlzIGFuIGludGVnZXIKICAgICAgLy8gc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYnV0IGl0IGN1cnJlbnRseSBtYWtlcyBpdCBlYXNpZXIgZm9yCiAgICAgIC8vIG90aGVyIG9wdGltaXphdGlvbnMgdG8gcmVhc29uIGFib3V0IGEgZml4ZWQgbGVuZ3RoIGNvbnN0cnVjdG9yCiAgICAgIC8vIHRoYXQgd2Uga25vdyB0YWtlcyBhbiBpbnQuCiAgICAgIGlmIChyZWNlaXZlci5pbnB1dHNbMF0uaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIHJlY2VpdmVyLmlucHV0c1swXTsKICAgICAgfQogICAgfSBlbHNlIGlmIChyZWNlaXZlci5pc0NvbnN0YW50TGlzdCgpKSB7CiAgICAgIEhDb25zdGFudCBjb25zdGFudFJlY2VpdmVyID0gcmVjZWl2ZXI7CiAgICAgIExpc3RDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRSZWNlaXZlci5jb25zdGFudDsKICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEludChjb25zdGFudC5sZW5ndGgsIF9jbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgaWYgKHJlY2VpdmVyLmlzQ29uc3RhbnRTdHJpbmcoKSkgewogICAgICBIQ29uc3RhbnQgY29uc3RhbnRSZWNlaXZlciA9IHJlY2VpdmVyOwogICAgICBTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRSZWNlaXZlci5jb25zdGFudDsKICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEludChjb25zdGFudC5sZW5ndGgsIF9jbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgewogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPSByZWNlaXZlci5pbnN0cnVjdGlvblR5cGU7CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcih0eXBlKSAmJgogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyTGVuZ3RoKHR5cGUpICE9IG51bGwpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gY29uc3RhbnQgPSBfZ3JhcGguYWRkQ29uc3RhbnRJbnQoCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckxlbmd0aCh0eXBlKSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgICAvLyBJZiB0aGUgY29udGFpbmVyIGNhbiBiZSBudWxsLCB3ZSB1cGRhdGUgYWxsIHVzZXMgb2YgdGhlIGxlbmd0aAogICAgICAgICAgLy8gYWNjZXNzIHRvIHVzZSB0aGUgY29uc3RhbnQgaW5zdGVhZCwgYnV0IGtlZXAgdGhlIGxlbmd0aCBhY2Nlc3MgaW4KICAgICAgICAgIC8vIHRoZSBncmFwaCwgdG8gZW5zdXJlIHdlIHN0aWxsIGhhdmUgYSBudWxsIGNoZWNrLgogICAgICAgICAgbm9kZS5ibG9jay5yZXdyaXRlKG5vZGUsIGNvbnN0YW50KTsKICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKG5vZGUuaXNBc3NpZ25hYmxlICYmCiAgICAgICAgaXNGaXhlZExlbmd0aChyZWNlaXZlci5pbnN0cnVjdGlvblR5cGUsIF9jbG9zZWRXb3JsZCkpIHsKICAgICAgLy8gVGhlIGlucHV0IHR5cGUgaGFzIGNoYW5nZWQgdG8gZml4ZWQtbGVuZ3RoIHNvIGNoYW5nZSB0byBhbiB1bmFzc2lnbmFibGUKICAgICAgLy8gSEdldExlbmd0aCB0byBhbGxvdyBtb3JlIEdWTiBvcHRpbWl6YXRpb25zLgogICAgICByZXR1cm4gbmV3IEhHZXRMZW5ndGgocmVjZWl2ZXIsIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLAogICAgICAgICAgaXNBc3NpZ25hYmxlOiBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEluZGV4KEhJbmRleCBub2RlKSB7CiAgICBpZiAobm9kZS5yZWNlaXZlci5pc0NvbnN0YW50TGlzdCgpICYmIG5vZGUuaW5kZXguaXNDb25zdGFudEludGVnZXIoKSkgewogICAgICBIQ29uc3RhbnQgaW5zdHJ1Y3Rpb24gPSBub2RlLnJlY2VpdmVyOwogICAgICBMaXN0Q29uc3RhbnRWYWx1ZSBsaXN0ID0gaW5zdHJ1Y3Rpb24uY29uc3RhbnQ7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZW50cmllcyA9IGxpc3QuZW50cmllczsKICAgICAgSENvbnN0YW50IGluZGV4SW5zdHJ1Y3Rpb24gPSBub2RlLmluZGV4OwogICAgICBJbnRDb25zdGFudFZhbHVlIGluZGV4Q29uc3RhbnQgPSBpbmRleEluc3RydWN0aW9uLmNvbnN0YW50OwogICAgICBpbnQgaW5kZXggPSBpbmRleENvbnN0YW50LmludFZhbHVlLnRvSW50KCk7CiAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50KGVudHJpZXNbaW5kZXhdLCBfY2xvc2VkV29ybGQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZUR5bmFtaWNHZXR0ZXIoSEludm9rZUR5bmFtaWNHZXR0ZXIgbm9kZSkgewogICAgcHJvcGFnYXRlQ29uc3RhbnRWYWx1ZVRvVXNlcyhub2RlKTsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSBoYW5kbGVJbnRlcmNlcHRlZENhbGwobm9kZSk7CiAgICAgIGlmIChmb2xkZWQgIT0gbm9kZSkgcmV0dXJuIGZvbGRlZDsKICAgIH0KICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IG5vZGUuZ2V0RGFydFJlY2VpdmVyKF9jbG9zZWRXb3JsZCk7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZTsKICAgIEZpZWxkRW50aXR5IGZpZWxkID0gbm9kZS5lbGVtZW50IGlzIEZpZWxkRW50aXR5CiAgICAgICAgPyBub2RlLmVsZW1lbnQKICAgICAgICA6IGZpbmRDb25jcmV0ZUZpZWxkRm9yRHluYW1pY0FjY2Vzcyhub2RlLCByZWNlaXZlcik7CiAgICBpZiAoZmllbGQgIT0gbnVsbCkgewogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPQogICAgICAgICAgX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKTsKICAgICAgaWYgKGZpZWxkRGF0YS5pc0VmZmVjdGl2ZWx5Q29uc3RhbnQpIHsKICAgICAgICAvLyBUaGUgZmllbGQgaXMgZWxpZGVkIGFuZCByZXBsYWNlIGl0IHdpdGggaXRzIGNvbnN0YW50IHZhbHVlLgogICAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwocmVjZWl2ZXJUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgICAgLy8gVGhlIHJlY2VpdmVyIGlzIHBvdGVudGlhbGx5IGBudWxsYCBzbyB3ZSBpbnNlcnQgYSBudWxsIHJlY2VpdmVyCiAgICAgICAgICAvLyBndWFyZCB0byB0cmlnZ2VyIGEgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbi4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGluc2VydGVkIHVuY29uZGl0aW9uYWxseSBhbmQgcmVtb3ZlZCBieSBsYXRlcgogICAgICAgICAgLy8gb3B0aW1pemF0aW9ucyBpZiB1bm5lY2Vzc2FyeSwgYnV0IHBlcmZvcm1hbmNlIHdlIGRvIGl0CiAgICAgICAgICAvLyBjb25kaXRpb25hbGx5IGhlcmUuCiAgICAgICAgICAvLyBUT0RPKDM1OTk2KTogUmVwbGFjZSB3aXRoIG51bGwgcmVjZWl2ZXIgZ3VhcmQgaW5zdHJ1Y3Rpb24uCiAgICAgICAgICBISW5zdHJ1Y3Rpb24gZHVtbXlHZXQgPSBuZXcgSEZpZWxkR2V0KG51bGwsIHJlY2VpdmVyLAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICAgIGlzQXNzaWduYWJsZTogZmFsc2UpOwogICAgICAgICAgX2xvZz8ucmVnaXN0ZXJGaWVsZEdldChub2RlLCBkdW1teUdldCk7CiAgICAgICAgICBub2RlLmJsb2NrLmFkZEJlZm9yZShub2RlLCBkdW1teUdldCk7CiAgICAgICAgfQogICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBmaWVsZERhdGEuY29uc3RhbnRWYWx1ZTsKICAgICAgICBIQ29uc3RhbnQgcmVzdWx0ID0gX2dyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBfY2xvc2VkV29ybGQsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICBfbG9nPy5yZWdpc3RlckNvbnN0YW50RmllbGRHZXQobm9kZSwgZmllbGQsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBIRmllbGRHZXQgcmVzdWx0ID0gX2RpcmVjdEZpZWxkR2V0KHJlY2VpdmVyLCBmaWVsZCwgbm9kZSk7CiAgICAgICAgX2xvZz8ucmVnaXN0ZXJGaWVsZEdldChub2RlLCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAgICBub2RlLmVsZW1lbnQgPz89CiAgICAgICAgX2Nsb3NlZFdvcmxkLmxvY2F0ZVNpbmdsZU1lbWJlcihub2RlLnNlbGVjdG9yLCByZWNlaXZlclR5cGUpOwogICAgaWYgKG5vZGUuZWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgbm9kZS5lbGVtZW50Lm5hbWUgPT0gbm9kZS5zZWxlY3Rvci5uYW1lICYmCiAgICAgICAgbm9kZS5lbGVtZW50LmlzRnVuY3Rpb24pIHsKICAgICAgLy8gQSBwcm9wZXJ0eSBleHRyYWN0aW9uIGdldHRlciwgYWthIGEgdGVhci1vZmYuCiAgICAgIG5vZGUuc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgICAgbm9kZS5zaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICAgIG5vZGUuc2V0VXNlR3ZuKCk7IC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgaWRlbnRpdHkgb2YgdGVhci1vZmZzLgogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBISW5zdHJ1Y3Rpb24gX2RpcmVjdEZpZWxkR2V0KAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEZpZWxkRW50aXR5IGZpZWxkLCBISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgYm9vbCBpc0Fzc2lnbmFibGUgPSAhX2Nsb3NlZFdvcmxkLmZpZWxkTmV2ZXJDaGFuZ2VzKGZpZWxkKTsKCiAgICBBYnN0cmFjdFZhbHVlIHR5cGU7CiAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhmaWVsZC5lbmNsb3NpbmdDbGFzcykpIHsKICAgICAgdHlwZSA9IEFic3RyYWN0VmFsdWVGYWN0b3J5LmZyb21OYXRpdmVCZWhhdmlvcigKICAgICAgICAgIF9uYXRpdmVEYXRhLmdldE5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yKGZpZWxkKSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGUgcG90ZW50aWFsbHkgbW9yZSBwcmVjaXNlIHR5cGUgb2YgdGhlCiAgICAgIC8vIG5vZGUgKyBmaW5kIGEgdGVzdCB0aGF0IHNob3dzIGl0cyB1c2VmdWxuZXNzLgogICAgICAvLyB0eXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKAogICAgICAvLyAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsCiAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgIC8vICAgICAgICAgZmllbGQsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKSk7CiAgICAgIHR5cGUgPSBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgICAgICBmaWVsZCwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgfQoKICAgIHJldHVybiBuZXcgSEZpZWxkR2V0KGZpZWxkLCByZWNlaXZlciwgdHlwZSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICBpc0Fzc2lnbmFibGU6IGlzQXNzaWduYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnZva2VEeW5hbWljU2V0dGVyKEhJbnZva2VEeW5hbWljU2V0dGVyIG5vZGUpIHsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSBoYW5kbGVJbnRlcmNlcHRlZENhbGwobm9kZSk7CiAgICAgIGlmIChmb2xkZWQgIT0gbm9kZSkgcmV0dXJuIGZvbGRlZDsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBub2RlLmdldERhcnRSZWNlaXZlcihfY2xvc2VkV29ybGQpOwogICAgRmllbGRFbnRpdHkgZmllbGQgPSBmaW5kQ29uY3JldGVGaWVsZEZvckR5bmFtaWNBY2Nlc3Mobm9kZSwgcmVjZWl2ZXIpOwogICAgaWYgKGZpZWxkID09IG51bGwgfHwgIWZpZWxkLmlzQXNzaWduYWJsZSkgcmV0dXJuIG5vZGU7CiAgICAvLyBVc2UgYG5vZGUuaW5wdXRzLmxhc3RgIGluIGNhc2UgdGhlIGNhbGwgZm9sbG93cyB0aGUgaW50ZXJjZXB0b3IgY2FsbGluZwogICAgLy8gY29udmVudGlvbiwgYnV0IGlzIG5vdCBhIGNhbGwgb24gYW4gaW50ZXJjZXB0b3IuCiAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBub2RlLmlucHV0cy5sYXN0OwoKICAgIEhJbnN0cnVjdGlvbiBhc3NpZ25GaWVsZCgpIHsKICAgICAgaWYgKF9jbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCkuaXNFbGlkZWQpIHsKICAgICAgICBfbG9nPy5yZWdpc3RlckZpZWxkU2V0KG5vZGUpOwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBIRmllbGRTZXQgcmVzdWx0ID0KICAgICAgICAgICAgbmV3IEhGaWVsZFNldChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgZmllbGQsIHJlY2VpdmVyLCB2YWx1ZSkKICAgICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBfbG9nPy5yZWdpc3RlckZpZWxkU2V0KG5vZGUsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfQoKICAgIGlmICghX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShmaWVsZCkKICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgIHJldHVybiBhc3NpZ25GaWVsZCgpOwogICAgfQoKICAgIERhcnRUeXBlIGZpZWxkVHlwZSA9IF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RmllbGRUeXBlKGZpZWxkKTsKCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjaGVja2VkVHlwZSA9CiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVGcm9tU3RhdGljVHlwZShmaWVsZFR5cGUsIG51bGxhYmxlOiB0cnVlKTsKICAgICAgaWYgKGNoZWNrZWRUeXBlLmlzUHJlY2lzZSAmJgogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgICAuaXNJbih2YWx1ZS5pbnN0cnVjdGlvblR5cGUsIGNoZWNrZWRUeXBlLmFic3RyYWN0VmFsdWUpCiAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gYXNzaWduRmllbGQoKTsKICAgICAgfQogICAgICAvLyBUT0RPKHNyYSk6IEltcGxlbWVudCBpbmxpbmluZyBvZiBzZXR0ZXJzIHdpdGggY2hlY2tzIGZvciBuZXcgcnRpLiBUaGUKICAgICAgLy8gY2hlY2sgYW5kIGZpZWxkIGFzc2lnbm1lbnkgZm9yIHRoZSBzZXR0ZXIgc2hvdWxkIGlubGluZWQgaWYgdGhpcyBpcyB0aGUKICAgICAgLy8gb25seSBjYWxsIHRvIHRoZSBzZXR0ZXIsIG9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFscmVhZHkgY29tcHV0ZXMgdGhlCiAgICAgIC8vIHR5cGUgb2YgdGhlIGZpZWxkLgogICAgICBub2RlLm5lZWRzQ2hlY2sgPSB0cnVlOwogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBpZiAoIWZpZWxkVHlwZS50cmVhdEFzUmF3IHx8CiAgICAgICAgZmllbGRUeXBlLmlzVHlwZVZhcmlhYmxlIHx8CiAgICAgICAgZmllbGRUeXBlLnVuYWxpYXNlZC5pc0Z1bmN0aW9uVHlwZSB8fAogICAgICAgIGZpZWxkVHlwZS51bmFsaWFzZWQuaXNGdXR1cmVPcikgewogICAgICAvLyBXZSBjYW5ub3QgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgdHlwZSByZXByZXNlbnRhdGlvbiBoZXJlLCBzbyBkb24ndAogICAgICAvLyBpbmxpbmUgdGhpcyBhY2Nlc3MuCiAgICAgIC8vIFRPRE8oc3JhKTogSWYgdGhlIGlucHV0IGlzIHN1Y2ggdGhhdCB3ZSBkb24ndCBuZWVkIGEgdHlwZSBjaGVjaywgd2UKICAgICAgLy8gY2FuIHNraXAgdGhlIHRlc3QgYW4gZ2VuZXJhdGUgdGhlIEhGaWVsZFNldC4KICAgICAgbm9kZS5uZWVkc0NoZWNrID0gdHJ1ZTsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgICBISW5zdHJ1Y3Rpb24gb3RoZXIgPQogICAgICAgIHZhbHVlLmNvbnZlcnRUeXBlKF9jbG9zZWRXb3JsZCwgZmllbGRUeXBlLCBIVHlwZUNvbnZlcnNpb24uVFlQRV9DSEVDSyk7CiAgICBpZiAob3RoZXIgIT0gdmFsdWUpIHsKICAgICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgb3RoZXIpOwogICAgICB2YWx1ZSA9IG90aGVyOwogICAgfQoKICAgIHJldHVybiBhc3NpZ25GaWVsZCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SW52b2tlQ2xvc3VyZShISW52b2tlQ2xvc3VyZSBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gY2xvc3VyZSA9IG5vZGUuZ2V0RGFydFJlY2VpdmVyKF9jbG9zZWRXb3JsZCk7CgogICAgLy8gUmVwbGFjZSBpbmRpcmVjdCBjYWxsIHRvIHN0YXRpYyBtZXRob2QgdGVhci1vZmYgY2xvc3VyZSB3aXRoIGRpcmVjdCBjYWxsCiAgICAvLyB0byBzdGF0aWMgbWV0aG9kLgogICAgaWYgKGNsb3N1cmUgaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBjbG9zdXJlLmNvbnN0YW50OwogICAgICBpZiAoY29uc3RhbnQgaXMgRnVuY3Rpb25Db25zdGFudFZhbHVlKSB7CiAgICAgICAgRnVuY3Rpb25FbnRpdHkgdGFyZ2V0ID0gY29uc3RhbnQuZWxlbWVudDsKICAgICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gdGFyZ2V0LnBhcmFtZXRlclN0cnVjdHVyZTsKICAgICAgICBpZiAocGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmUgPT0gbm9kZS5zZWxlY3Rvci5jYWxsU3RydWN0dXJlKSB7CiAgICAgICAgICAvLyBUT0RPKHNyYSk6IEhhbmRsZSBhZGRpbmcgb3B0aW9uYWwgYXJndW1lbnRzIGRlZmF1bHQgdmFsdWVzLgogICAgICAgICAgYXNzZXJ0KCFub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKTsKICAgICAgICAgIHJldHVybiBuZXcgSEludm9rZVN0YXRpYyh0YXJnZXQsIG5vZGUuaW5wdXRzLnNraXAoMSkudG9MaXN0KCksCiAgICAgICAgICAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsIG5vZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IG5vZGUuc291cmNlSW5mb3JtYXRpb247CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZVN0YXRpYyhISW52b2tlU3RhdGljIG5vZGUpIHsKICAgIHByb3BhZ2F0ZUNvbnN0YW50VmFsdWVUb1VzZXMobm9kZSk7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IG5vZGUuZWxlbWVudDsKCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5pZGVudGljYWxGdW5jdGlvbikgewogICAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09IDIpIHsKICAgICAgICByZXR1cm4gbmV3IEhJZGVudGl0eSgKICAgICAgICAgICAgbm9kZS5pbnB1dHNbMF0sIG5vZGUuaW5wdXRzWzFdLCBudWxsLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBub2RlLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuc2V0UnVudGltZVR5cGVJbmZvKSB7CiAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggPT0gMikgewogICAgICAgIHJldHVybiBoYW5kbGVBcnJheVR5cGVJbmZvKG5vZGUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IpIHsKICAgICAgaWYgKG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGZpcnN0QXJndW1lbnQgPSBub2RlLmlucHV0c1swXTsKICAgICAgICBpZiAoZmlyc3RBcmd1bWVudCBpcyBIQ29uc3RhbnQpIHsKICAgICAgICAgIEhDb25zdGFudCBjb25zdGFudCA9IGZpcnN0QXJndW1lbnQ7CiAgICAgICAgICBpZiAoY29uc3RhbnQuY29uc3RhbnQuaXNUcnVlKSByZXR1cm4gY29uc3RhbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKGNvbW1vbkVsZW1lbnRzLmlzQ2hlY2tJbnQoZWxlbWVudCkpIHsKICAgICAgaWYgKG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gbm9kZS5pbnB1dHNbMF07CiAgICAgICAgaWYgKGFyZ3VtZW50LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgcmV0dXJuIGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChjb21tb25FbGVtZW50cy5pc0NoZWNrTnVtKGVsZW1lbnQpKSB7CiAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggPT0gMSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzBdOwogICAgICAgIGlmIChhcmd1bWVudC5pc051bWJlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgcmV0dXJuIGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChjb21tb25FbGVtZW50cy5pc0NoZWNrU3RyaW5nKGVsZW1lbnQpKSB7CiAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggPT0gMSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzBdOwogICAgICAgIGlmIChhcmd1bWVudC5pc1N0cmluZyhfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgcmV0dXJuIGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmFzc2VydEhlbHBlciB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuYXNzZXJ0VGVzdCkgewogICAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBub2RlLmlucHV0c1swXTsKICAgICAgICBpZiAoYXJndW1lbnQgaXMgSENvbnN0YW50KSB7CiAgICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gYXJndW1lbnQuY29uc3RhbnQ7CiAgICAgICAgICBpZiAoY29uc3RhbnQuaXNCb29sKSB7CiAgICAgICAgICAgIGJvb2wgdmFsdWUgPSBjb25zdGFudC5pc1RydWU7CiAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmFzc2VydFRlc3QpIHsKICAgICAgICAgICAgICAvLyBgYXNzZXJ0VGVzdChhcmd1bWVudClgIGVmZmVjdGl2ZWx5IG5lZ2F0ZXMgdGhlIGFyZ3VtZW50LgogICAgICAgICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKCF2YWx1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBgYXNzZXJ0SGVscGVyKHRydWUpYCBpcyBhIG5vLW9wLCBvdGhlciB2YWx1ZXMgdGhyb3cuCiAgICAgICAgICAgIGlmICh2YWx1ZSkgcmV0dXJuIGFyZ3VtZW50OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KCiAgSEluc3RydWN0aW9uIGhhbmRsZUFycmF5VHlwZUluZm8oSEludm9rZVN0YXRpYyBub2RlKSB7CiAgICAvLyBJZiB0eXBlIGluZm9ybWF0aW9uIGlzIG5vdCBuZWVkZWQsIHVzZSB0aGUgcmF3IEFycmF5LgogICAgSEluc3RydWN0aW9uIHNvdXJjZSA9IG5vZGUuaW5wdXRzWzBdOwogICAgaWYgKHNvdXJjZS51c2VkQnkubGVuZ3RoICE9IDEpIHJldHVybiBub2RlOwogICAgaWYgKHNvdXJjZS5pc0FycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIG5vZGUudXNlZEJ5KSB7CiAgICAgIGlmICh1c2VyIGlzIEhHZXRMZW5ndGgpIGNvbnRpbnVlOwogICAgICBpZiAodXNlciBpcyBISW5kZXgpIGNvbnRpbnVlOwogICAgICAvLyBCb3VuZHMgY2hlY2sgZXNjYXBlcyB0aGUgYXJyYXksIGJ1dCB3ZSBkb24ndCBjYXJlLgogICAgICBpZiAodXNlciBpcyBIQm91bmRzQ2hlY2spIGNvbnRpbnVlOwogICAgICAvLyBJbnRlcmNlcHRvciBvbmx5IGVzY2FwZXMgdGhlIEFycmF5IGlmIGFycmF5IHBhc3NlZCB0byBhbiBpbnRlcmNlcHRlZAogICAgICAvLyBtZXRob2QuCiAgICAgIGlmICh1c2VyIGlzIEhJbnRlcmNlcHRvcikgY29udGludWU7CiAgICAgIGlmICh1c2VyIGlzIEhJbnZva2VTdGF0aWMpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IHVzZXIuZWxlbWVudDsKICAgICAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5jaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcikgewogICAgICAgICAgLy8gQ01FIGNoZWNrIGVzY2FwZXMgdGhlIGFycmF5LCBidXQgd2UgZG9uJ3QgY2FyZS4KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodXNlciBpcyBISW52b2tlRHluYW1pY0dldHRlcikgewogICAgICAgIFN0cmluZyBuYW1lID0gdXNlci5zZWxlY3Rvci5uYW1lOwogICAgICAgIC8vIFRoZXNlIGdldHRlcnMgZG9uJ3QgdXNlIHRoZSBBcnJheSB0eXBlLgogICAgICAgIGlmIChuYW1lID09ICdsYXN0JykgY29udGludWU7CiAgICAgICAgaWYgKG5hbWUgPT0gJ2ZpcnN0JykgY29udGludWU7CiAgICAgIH0KICAgICAgLy8gVE9ETyhzcmEpOiBJbXBsZW1lbnQgYSBtb3JlIGdlbmVyYWwgYWxnb3JpdGhtIC0gbWFueSBtZXRob2RzIGRvbid0IHVzZQogICAgICAvLyB0aGUgZWxlbWVudCB0eXBlLgogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICAgIHJldHVybiBzb3VyY2U7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBub2RlKSB7CiAgICAvLyBTaW1wbGlmeSBzdHJpbmcgY29uY2F0OgogICAgLy8KICAgIC8vICAgICAiIiArIFIgICAgICAgICAgICAgICAgLT4gIFIKICAgIC8vICAgICBMICsgIiIgICAgICAgICAgICAgICAgLT4gIEwKICAgIC8vICAgICAiTCIgKyAiUiIgICAgICAgICAgICAgLT4gICJMUiIKICAgIC8vICAgICAocHJlZml4ICsgIkwiKSArICJSIiAgLT4gIHByZWZpeCArICJMUiIKICAgIC8vCiAgICBTdHJpbmdDb25zdGFudFZhbHVlIGdldFN0cmluZyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgaWYgKCFpbnN0cnVjdGlvbi5pc0NvbnN0YW50U3RyaW5nKCkpIHJldHVybiBudWxsOwogICAgICBIQ29uc3RhbnQgY29uc3RhbnQgPSBpbnN0cnVjdGlvbjsKICAgICAgcmV0dXJuIGNvbnN0YW50LmNvbnN0YW50OwogICAgfQoKICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgbGVmdFN0cmluZyA9IGdldFN0cmluZyhub2RlLmxlZnQpOwogICAgaWYgKGxlZnRTdHJpbmcgIT0gbnVsbCAmJiBsZWZ0U3RyaW5nLnN0cmluZ1ZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgIHJldHVybiBub2RlLnJpZ2h0OwogICAgfQoKICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgcmlnaHRTdHJpbmcgPSBnZXRTdHJpbmcobm9kZS5yaWdodCk7CiAgICBpZiAocmlnaHRTdHJpbmcgPT0gbnVsbCkgcmV0dXJuIG5vZGU7CiAgICBpZiAocmlnaHRTdHJpbmcuc3RyaW5nVmFsdWUubGVuZ3RoID09IDApIHJldHVybiBub2RlLmxlZnQ7CgogICAgSEluc3RydWN0aW9uIHByZWZpeCA9IG51bGw7CiAgICBpZiAobGVmdFN0cmluZyA9PSBudWxsKSB7CiAgICAgIGlmIChub2RlLmxlZnQgaXMhIEhTdHJpbmdDb25jYXQpIHJldHVybiBub2RlOwogICAgICBIU3RyaW5nQ29uY2F0IGxlZnRDb25jYXQgPSBub2RlLmxlZnQ7CiAgICAgIC8vIERvbid0IHVuZG8gQ1NFLgogICAgICBpZiAobGVmdENvbmNhdC51c2VkQnkubGVuZ3RoICE9IDEpIHJldHVybiBub2RlOwogICAgICBwcmVmaXggPSBsZWZ0Q29uY2F0LmxlZnQ7CiAgICAgIGxlZnRTdHJpbmcgPSBnZXRTdHJpbmcobGVmdENvbmNhdC5yaWdodCk7CiAgICAgIGlmIChsZWZ0U3RyaW5nID09IG51bGwpIHJldHVybiBub2RlOwogICAgfQoKICAgIGlmIChsZWZ0U3RyaW5nLnN0cmluZ1ZhbHVlLmxlbmd0aCArIHJpZ2h0U3RyaW5nLnN0cmluZ1ZhbHVlLmxlbmd0aCA+CiAgICAgICAgTUFYX1NIQVJFRF9DT05TVEFOVF9GT0xERURfU1RSSU5HX0xFTkdUSCkgewogICAgICBpZiAobm9kZS51c2VkQnkubGVuZ3RoID4gMSkgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgSEluc3RydWN0aW9uIGZvbGRlZCA9IF9ncmFwaC5hZGRDb25zdGFudCgKICAgICAgICBjb25zdGFudF9zeXN0ZW0KICAgICAgICAgICAgLmNyZWF0ZVN0cmluZyhsZWZ0U3RyaW5nLnN0cmluZ1ZhbHVlICsgcmlnaHRTdHJpbmcuc3RyaW5nVmFsdWUpLAogICAgICAgIF9jbG9zZWRXb3JsZCk7CiAgICBpZiAocHJlZml4ID09IG51bGwpIHJldHVybiBmb2xkZWQ7CiAgICByZXR1cm4gbmV3IEhTdHJpbmdDb25jYXQocHJlZml4LCBmb2xkZWQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLnN0cmluZ1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0U3RyaW5naWZ5KEhTdHJpbmdpZnkgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gbm9kZS5pbnB1dHNbMF07CiAgICBpZiAoaW5wdXQuaXNTdHJpbmcoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGlucHV0OwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBhc1N0cmluZyhTdHJpbmcgc3RyaW5nKSA9PgogICAgICAgIF9ncmFwaC5hZGRDb25zdGFudChjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKHN0cmluZyksIF9jbG9zZWRXb3JsZCk7CgogICAgSEluc3RydWN0aW9uIHRyeUNvbnN0YW50KCkgewogICAgICBpZiAoIWlucHV0LmlzQ29uc3RhbnQoKSkgcmV0dXJuIG51bGw7CiAgICAgIEhDb25zdGFudCBjb25zdGFudCA9IGlucHV0OwogICAgICBpZiAoIWNvbnN0YW50LmNvbnN0YW50LmlzUHJpbWl0aXZlKSByZXR1cm4gbnVsbDsKICAgICAgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGNvbnN0YW50LmNvbnN0YW50OwogICAgICBpZiAodmFsdWUgaXMgSW50Q29uc3RhbnRWYWx1ZSkgewogICAgICAgIC8vIE9ubHkgY29uc3RhbnQtZm9sZCBpbnQudG9TdHJpbmcoKSB3aGVuIERhcnQgYW5kIEpTIHJlc3VsdHMgdGhlIHNhbWUuCiAgICAgICAgLy8gVE9ETygxODEwMyk6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIHdvcmstYXJvdW5kIHdoZW4gaXNzdWUKICAgICAgICAvLyAxODEwMyBpcyByZXNvbHZlZCBieSBwcm92aWRpbmcgdGhlIGNvcnJlY3Qgc3RyaW5nLgogICAgICAgIGlmICghdmFsdWUuaXNVSW50MzIoKSkgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIGFzU3RyaW5nKCcke3ZhbHVlLmludFZhbHVlfScpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZSBpcyBCb29sQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIHJldHVybiBhc1N0cmluZyh2YWx1ZS5ib29sVmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnKTsKICAgICAgfQogICAgICBpZiAodmFsdWUgaXMgTnVsbENvbnN0YW50VmFsdWUpIHsKICAgICAgICByZXR1cm4gYXNTdHJpbmcoJ251bGwnKTsKICAgICAgfQogICAgICBpZiAodmFsdWUgaXMgRG91YmxlQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIC8vIFRPRE8oc3JhKTogSXQgc2VlbXMgdW5saWtlbHkgdGhhdCBhbGwgZGFydDJqcyBob3N0IGltcGxlbWVudGF0aW9ucwogICAgICAgIC8vIHByb2R1Y2UgZXhhY3RseSB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIGFsbCBKYXZhU2NyaXB0IHRhcmdldHMuCiAgICAgICAgcmV0dXJuIGFzU3RyaW5nKCcke3ZhbHVlLmRvdWJsZVZhbHVlfScpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiB0cnlUb1N0cmluZygpIHsKICAgICAgLy8gSWYgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgc3RyaW5nIHdlIGNhbiBjYWxsCiAgICAgIC8vIGl0IGRpcmVjdGx5LiBLZWVwIHRoZSBzdHJpbmdpZmllciBmb3IgcHJpbWl0aXZlcyAoc2luY2UgdGhleSBoYXZlIGZhc3QKICAgICAgLy8gcGF0aCBjb2RlIGluIHRoZSBzdHJpbmdpZmllcikgYW5kIGZvciBjbGFzc2VzIHJlcXVpcmluZyBpbnRlcmNlcHRvcnMKICAgICAgLy8gKHNpbmNlIFNzYUluc3RydWN0aW9uU2ltcGxpZmllciBydW5zIGFmdGVyIFNzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzKS4KICAgICAgaWYgKGlucHV0LmlzUHJpbWl0aXZlKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChpbnB1dC5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBTZWxlY3RvcnMudG9TdHJpbmdfOwogICAgICBBYnN0cmFjdFZhbHVlIHRvU3RyaW5nVHlwZSA9CiAgICAgICAgICBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFJlc3VsdFR5cGVGb3JTZWxlY3RvcigKICAgICAgICAgICAgICBzZWxlY3RvciwgaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlLCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmNvbnRhaW5zT25seVR5cGUoCiAgICAgICAgICAgICAgdG9TdHJpbmdUeXBlLCBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcykKICAgICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvLyBBbGwgaW50ZXJjZXB0ZWQgY2xhc3NlcyBleHRlbmQgYEludGVyY2VwdG9yYCwgc28gaWYgdGhlIHJlY2VpdmVyIGNhbid0CiAgICAgIC8vIGJlIGEgY2xhc3MgZXh0ZW5kaW5nIGBJbnRlcmNlcHRvcmAgdGhlbiBpdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5LgogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5pc0ludGVyY2VwdG9yKGlucHV0Lmluc3RydWN0aW9uVHlwZSkKICAgICAgICAgIC5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAgIHZhciBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltpbnB1dCwgaW5wdXRdOyAvLyBbaW50ZXJjZXB0b3IsIHJlY2VpdmVyXS4KICAgICAgICBISW5zdHJ1Y3Rpb24gcmVzdWx0ID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICAgICAgICBzZWxlY3RvciwKICAgICAgICAgICAgaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlLCAvLyByZWNlaXZlciB0eXBlLgogICAgICAgICAgICBpbnB1dHMsCiAgICAgICAgICAgIHRvU3RyaW5nVHlwZSwKICAgICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBpc0ludGVyY2VwdGVkOiB0cnVlKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiB0cnlDb25zdGFudCgpID8/IHRyeVRvU3RyaW5nKCkgPz8gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVJbnRlcmNlcHRlZENhbGwobm9kZSk7CiAgfQoKICBib29sIG5lZWRzU3Vic3RpdHV0aW9uRm9yVHlwZVZhcmlhYmxlQWNjZXNzKENsYXNzRW50aXR5IGNscykgewogICAgaWYgKF9jbG9zZWRXb3JsZC5pc1VzZWRBc01peGluKGNscykpIHJldHVybiB0cnVlOwoKICAgIHJldHVybiBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuYW55U3RyaWN0U3ViY2xhc3NPZihjbHMsCiAgICAgICAgKENsYXNzRW50aXR5IHN1YmNsYXNzKSB7CiAgICAgIHJldHVybiAhX3J0aVN1YnN0aXR1dGlvbnMuaXNUcml2aWFsU3Vic3RpdHV0aW9uKHN1YmNsYXNzLCBjbHMpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRUeXBlSW5mb0V4cHJlc3Npb24oSFR5cGVJbmZvRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBJZGVudGlmeSB0aGUgY2FzZSB3aGVyZSB0aGUgdHlwZSBpbmZvIGV4cHJlc3Npb24gd291bGQgYmUgb2YgdGhlIGZvcm06CiAgICAvLwogICAgLy8gIFtnZXRUeXBlQXJndW1lbnRCeUluZGV4KHRoaXMsIDApLCAuLiwgZ2V0VHlwZUFyZ3VtZW50QnlJbmRleCh0aGlzLCBrKV0KICAgIC8vCiAgICAvLyBhbmQgayBpcyB0aGUgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIG9mICd0aGlzJy4gIFdlIGNhbiBzaW1wbHkgY29weSB0aGUKICAgIC8vIGxpc3QgZnJvbSAndGhpcycuCiAgICBISW5zdHJ1Y3Rpb24gdHJ5Q29weUluZm8oKSB7CiAgICAgIGlmIChub2RlLmtpbmQgIT0gVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRSkgcmV0dXJuIG51bGw7CgogICAgICBISW5zdHJ1Y3Rpb24gc291cmNlOwogICAgICBpbnQgZXhwZWN0ZWRJbmRleCA9IDA7CgogICAgICBmb3IgKEhJbnN0cnVjdGlvbiBhcmd1bWVudCBpbiBub2RlLmlucHV0cykgewogICAgICAgIGlmIChhcmd1bWVudCBpcyBIVHlwZUluZm9SZWFkVmFyaWFibGUpIHsKICAgICAgICAgIENsYXNzRW50aXR5IGNvbnRleHQgPSBEYXJ0VHlwZXMuZ2V0Q2xhc3NDb250ZXh0KGFyZ3VtZW50LnZhcmlhYmxlKTsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBuZXh0U291cmNlID0gYXJndW1lbnQub2JqZWN0OwogICAgICAgICAgaWYgKG5leHRTb3VyY2UgaXMgSFJlZikgewogICAgICAgICAgICBIUmVmIHJlZiA9IG5leHRTb3VyY2U7CiAgICAgICAgICAgIG5leHRTb3VyY2UgPSByZWYudmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobmV4dFNvdXJjZSBpcyBIVGhpcykgewogICAgICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHsKICAgICAgICAgICAgICBzb3VyY2UgPSBuZXh0U291cmNlOwogICAgICAgICAgICAgIENsYXNzRW50aXR5IHRoaXNDbGFzcyA9IG5leHRTb3VyY2Uuc291cmNlRWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgICAgICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0KICAgICAgICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZSh0aGlzQ2xhc3MpOwogICAgICAgICAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggIT0gdGhpc1R5cGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobmVlZHNTdWJzdGl0dXRpb25Gb3JUeXBlVmFyaWFibGVBY2Nlc3ModGhpc0NsYXNzKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChjb250ZXh0ICE9IG51bGwgJiYKICAgICAgICAgICAgICAgICAgIV9ydGlTdWJzdGl0dXRpb25zLmlzVHJpdmlhbFN1YnN0aXR1dGlvbigKICAgICAgICAgICAgICAgICAgICAgIHRoaXNDbGFzcywgY29udGV4dCkpIHsKICAgICAgICAgICAgICAgIC8vIElmIGlubGluaW5nLCB0aGUgW2NvbnRleHRdIGlzIG5vdCB0aGUgc2FtZSBhcyBbdGhpc0NsYXNzXS4KICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZW4gdGhlIHN1YnN0aXR1dGlvbiBtdXN0IGJlIHRyaXZpYWwuCiAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGlzOgogICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgIC8vICAgIGNsYXNzIEEgewogICAgICAgICAgICAgICAgLy8gICAgICBmaW5hbCBPYmplY3QgdmFsdWU7CiAgICAgICAgICAgICAgICAvLyAgICAgIEEodGhpcy52YWx1ZSk7CiAgICAgICAgICAgICAgICAvLyAgICB9CiAgICAgICAgICAgICAgICAvLyAgICBjbGFzcyBCPFQ+IGV4dGVuZHMgQSB7CiAgICAgICAgICAgICAgICAvLyAgICAgIEIoVCB2YWx1ZSkgOiBzdXBlcih2YWx1ZSk7CiAgICAgICAgICAgICAgICAvLyAgICAgIFQgZ2V0IHZhbHVlID0+IHN1cGVyLnZhbHVlIGFzIFQ7CiAgICAgICAgICAgICAgICAvLyAgICB9CiAgICAgICAgICAgICAgICAvLyAgICBjbGFzcyBDPFM+IGV4dGVuZHMgQjxMaXN0PFM+PiB7CiAgICAgICAgICAgICAgICAvLyAgICAgIEMoTGlzdDxTPiB2YWx1ZSkgOiBzdXBlcih2YWx1ZSk7CiAgICAgICAgICAgICAgICAvLyAgICAgIFMgZ2V0IGZpcnN0ID0+IHZhbHVlLmZpcnN0OwogICAgICAgICAgICAgICAgLy8gICAgfQogICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgIC8vIElmIGBCLnZhbHVlYCBpcyBpbmxpbmVkIGludG8gYEMuZmlyc3RgIHRoZSB0eXBlIGluZm8KICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24gaXMgdGhlIGxpc3QgYFtCLlRdYCBvbiBhIGB0aGlzYCBvZiB0eXBlIGBDPFM+YC4KICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBzdWJzdGl0dXRpb24gZnJvbSBDIHRvIEIgaXMgbm90IHRyaXZpYWwKICAgICAgICAgICAgICAgIC8vIChTIC0+IExpc3Q8Uz4pIHRoaXMgdHlwZSBpbmZvIGV4cHJlc3Npb24gY2Fubm90IGJlIHJlcGxhY2VkCiAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSB0eXBlIGFyZ3VtZW50cyBgQzxTPmAgKGl0IHdvdWxkIHlpZWxkIFtTXSBpbnN0ZWFkIG9mCiAgICAgICAgICAgICAgICAvLyBbTGlzdDxTPl0pLgogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuZXh0U291cmNlICE9IHNvdXJjZSkgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGluZGV4IGlzIHRoZSBvbmUgd2UgZXhwZWN0LgogICAgICAgICAgICBpbnQgaW5kZXggPSBhcmd1bWVudC52YXJpYWJsZS5lbGVtZW50LmluZGV4OwogICAgICAgICAgICBpZiAoaW5kZXggIT0gZXhwZWN0ZWRJbmRleCsrKSByZXR1cm4gbnVsbDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFRPRE8oc3JhKTogSGFuZGxlIG5vbi10aGlzIGNhc2VzIChpLmUuIGlubGluZWQgY29kZSkuIFNvbWUKICAgICAgICAgICAgLy8gbm9uLXRoaXMgY2FzZXMgd2lsbCBoYXZlIGEgVHlwZU1hc2sgdGhhdCBkb2VzIG5vdCBuZWVkCiAgICAgICAgICAgIC8vIHN1YnN0aXR1dGlvbiwgZXZlbiB0aG91Z2ggdGhlIGdlbmVyYWwgY2FzZSBkb2VzLCBlLmcuIGlubGluaW5nIGEKICAgICAgICAgICAgLy8gbWV0aG9kIG9uIGFuIGV4YWN0IGNsYXNzLgogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gbmV3IEhUeXBlSW5mb1JlYWRSYXcoc291cmNlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBDb25zaWRlciBmdXNpbmcgdHlwZSBleHByZXNzaW9uIHRyZWVzIHdpdGggbm8gdHlwZSB2YXJpYWJsZXMsCiAgICAvLyBhcyB0aGVzZSBjb3VsZCBiZSByZXByZXNlbnRlZCBsaWtlIGNvbnN0YW50cy4KCiAgICByZXR1cm4gdHJ5Q29weUluZm8oKSA/PyBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0VHlwZUluZm9SZWFkVmFyaWFibGUoSFR5cGVJbmZvUmVhZFZhcmlhYmxlIG5vZGUpIHsKICAgIFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgQ2xhc3NFbnRpdHkgY29udGV4dENsYXNzID0gdmFyaWFibGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb247CiAgICBISW5zdHJ1Y3Rpb24gb2JqZWN0ID0gbm9kZS5vYmplY3Q7CgogICAgSEluc3RydWN0aW9uIGZpbmlzaEdyb3VuZFR5cGUoSW50ZXJmYWNlVHlwZSBncm91bmRUeXBlKSB7CiAgICAgIEludGVyZmFjZVR5cGUgdHlwZUF0VmFyaWFibGUgPQogICAgICAgICAgX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcy5hc0luc3RhbmNlT2YoZ3JvdW5kVHlwZSwgY29udGV4dENsYXNzKTsKICAgICAgaWYgKHR5cGVBdFZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgICBpbnQgaW5kZXggPSB2YXJpYWJsZS5lbGVtZW50LmluZGV4OwogICAgICAgIERhcnRUeXBlIHR5cGVBcmd1bWVudCA9IHR5cGVBdFZhcmlhYmxlLnR5cGVBcmd1bWVudHNbaW5kZXhdOwogICAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9IG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgICAgICBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLkNPTVBMRVRFLAogICAgICAgICAgICB0eXBlQXJndW1lbnQsCiAgICAgICAgICAgIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgICAgICBpc1R5cGVWYXJpYWJsZVJlcGxhY2VtZW50OiB0cnVlKTsKICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgLy8vIFJlYWQgdGhlIHR5cGUgdmFyaWFibGUgZnJvbSBhbiBhbGxvY2F0aW9uIG9mIHR5cGUgW2NyZWF0ZWRDbGFzc10sIHdoZXJlCiAgICAvLy8gW3NlbGVjdFR5cGVBcmd1bWVudEZyb21PYmplY3RDcmVhdGlvbl0gZXh0cmFjdHMgdGhlIHR5cGUgYXJndW1lbnQgZnJvbQogICAgLy8vIHRoZSBhbGxvY2F0aW9uIGZvciBmYWN0b3J5IGNvbnN0cnVjdG9yIGNhbGwuCiAgICBISW5zdHJ1Y3Rpb24gZmluaXNoU3Vic3RpdHV0ZWQoQ2xhc3NFbnRpdHkgY3JlYXRlZENsYXNzLAogICAgICAgIEhJbnN0cnVjdGlvbiBzZWxlY3RUeXBlQXJndW1lbnRGcm9tT2JqZWN0Q3JlYXRpb24oaW50IGluZGV4KSkgewogICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcy5nZXRUaGlzVHlwZShjcmVhdGVkQ2xhc3MpOwoKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uRm9yVHlwZVZhcmlhYmxlKFR5cGVWYXJpYWJsZVR5cGUgdHYpIHsKICAgICAgICByZXR1cm4gc2VsZWN0VHlwZUFyZ3VtZW50RnJvbU9iamVjdENyZWF0aW9uKAogICAgICAgICAgICB0aGlzVHlwZS50eXBlQXJndW1lbnRzLmluZGV4T2YodHYpKTsKICAgICAgfQoKICAgICAgRGFydFR5cGUgdHlwZSA9IF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMKICAgICAgICAgIC5hc0luc3RhbmNlT2YodGhpc1R5cGUsIGNvbnRleHRDbGFzcykKICAgICAgICAgIC50eXBlQXJndW1lbnRzW3ZhcmlhYmxlLmVsZW1lbnQuaW5kZXhdOwogICAgICBpZiAodHlwZSBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uRm9yVHlwZVZhcmlhYmxlKHR5cGUpOwogICAgICB9CiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgICB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKHYpIHsKICAgICAgICBhcmd1bWVudHMuYWRkKGluc3RydWN0aW9uRm9yVHlwZVZhcmlhYmxlKHYpKTsKICAgICAgfSk7CiAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9IG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURSwKICAgICAgICAgIHR5cGUsCiAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICAgIGlzVHlwZVZhcmlhYmxlUmVwbGFjZW1lbnQ6IHRydWUpOwogICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICB9CgogICAgLy8gVHlwZSB2YXJpYWJsZSBldmFsdWF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYSBjb25zdGFudCBjYW4gYmUgcmVwbGFjZWQgd2l0aAogICAgLy8gYSBncm91bmQgdGVybSB0eXBlLgogICAgaWYgKG9iamVjdCBpcyBIQ29uc3RhbnQpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IG9iamVjdC5jb25zdGFudDsKICAgICAgaWYgKHZhbHVlIGlzIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIHJldHVybiBmaW5pc2hHcm91bmRUeXBlKHZhbHVlLnR5cGUpOwogICAgICB9CiAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIC8vIExvb2sgZm9yIGFuIGFsbG9jYXRpb24gd2l0aCB0eXBlIGluZm9ybWF0aW9uIGFuZCByZS13cml0ZSB0eXBlIHZhcmlhYmxlCiAgICAvLyBhcyBhIGZ1bmN0aW9uIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGFsbG9jYXRpb24uICBUaGlzIGVmZmVjdGl2ZWx5CiAgICAvLyBzdG9yZS1mb3J3YXJkcyBhIHR5cGUgdmFyaWFibGUgcmVhZCB0aHJvdWdoIGFuIGFsbG9jYXRpb24uCgogICAgLy8gTWF0Y2g6CiAgICAvLwogICAgLy8gICAgIEhDcmVhdGUoQ2xhc3NFbGVtZW50LAogICAgLy8gICAgICAgW2FyZ19pLAogICAgLy8gICAgICAgIC4uLiwKICAgIC8vICAgICAgICBIVHlwZUluZm9FeHByZXNzaW9uKHRfMCwgdF8xLCB0XzIsIC4uLildKTsKICAgIC8vCiAgICAvLyBUaGUgYHRfaWAgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBDbGFzc0VsZW1lbnQuCgogICAgaWYgKG9iamVjdCBpcyBIQ3JlYXRlKSB7CiAgICAgIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0aW9ucygpIHsKICAgICAgICAvLyBGb3J3YXJkaW5nIHRoZSB0eXBlIHZhcmlhYmxlIHJlZmVyZW5jZXMgbWlnaHQgY2F1c2UgdGhlIEhDcmVhdGUgdG8KICAgICAgICAvLyBiZWNvbWUgZGVhZC4gVGhpcyBicmVha3MgdGhlIGFsZ29yaXRobSBmb3IgZ2VuZXJhdGluZyB0aGUgcGVyLXR5cGUKICAgICAgICAvLyBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24sIHNvIHdlIGluc3RhbnRpYXRlIHRoZW0gaGVyZSBpbiBjYXNlIHRoZQogICAgICAgIC8vIEhDcmVhdGUgYmVjb21lcyBkZWFkLgogICAgICAgIG9iamVjdC5pbnN0YW50aWF0ZWRUeXBlcz8uZm9yRWFjaChfcmVnaXN0cnkucmVnaXN0ZXJJbnN0YW50aWF0aW9uKTsKICAgICAgfQoKICAgICAgaWYgKG9iamVjdC5oYXNSdGlJbnB1dCkgewogICAgICAgIEhJbnN0cnVjdGlvbiB0eXBlSW5mbyA9IG9iamVjdC5ydGlJbnB1dDsKICAgICAgICBpZiAodHlwZUluZm8gaXMgSFR5cGVJbmZvRXhwcmVzc2lvbikgewogICAgICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9ucygpOwogICAgICAgICAgcmV0dXJuIGZpbmlzaFN1YnN0aXR1dGVkKAogICAgICAgICAgICAgIG9iamVjdC5lbGVtZW50LCAoaW50IGluZGV4KSA9PiB0eXBlSW5mby5pbnB1dHNbaW5kZXhdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTm9uLWdlbmVyaWMgdHlwZSAod2hpY2ggZXh0ZW5kcyBvciBtaXhlcyBpbiBhIGdlbmVyaWMgdHlwZSwgZm9yCiAgICAgICAgLy8gZXhhbXBsZSBDb2RlVW5pdHMgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxpbnQ+KS4gIEFsc28gdXNlZCBmb3IKICAgICAgICAvLyByYXctdHlwZSB3aGVuIHRoZSB0eXBlIHBhcmFtZXRlcnMgYXJlIGVsaWRlZC4KICAgICAgICByZWdpc3Rlckluc3RhbnRpYXRpb25zKCk7CiAgICAgICAgcmV0dXJuIGZpbmlzaFN1YnN0aXR1dGVkKAogICAgICAgICAgICBvYmplY3QuZWxlbWVudCwKICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHR5cGUgYXJndW1lbnRzLCBhbGwgdHlwZSBhcmd1bWVudHMgYXJlICdkeW5hbWljJy4KICAgICAgICAgICAgKGludCBpKSA9PiBfZ3JhcGguYWRkQ29uc3RhbnROdWxsKF9jbG9zZWRXb3JsZCkpOwogICAgICB9CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBGYWN0b3J5IGNvbnN0cnVjdG9ycyBwYXNzIHR5cGUgYXJndW1lbnRzIGFmdGVyIHRoZSB2YWx1ZQogICAgLy8gYXJndW1lbnRzLiBUaGUgW3NlbGVjdFR5cGVBcmd1bWVudEZyb21PYmplY3RDcmVhdGlvbl0gYXJndW1lbnQgb2YKICAgIC8vIFtmaW5pc2hTdWJzdGl0dXRlZF0gaW5kZXhlcyBpbnRvIHRoZXNlIHR5cGUgYXJndW1lbnRzLgoKICAgIC8vIFRyeSB0byByZW1vdmUgdGhlIGludGVyY2VwdG9yLiBUaGUgaW50ZXJjZXB0b3IgaXMgdXNlZCBmb3IgYWNjZXNzaW5nIHRoZQogICAgLy8gc3Vic3RpdHV0aW9uIG1ldGhvZHMuCiAgICBpZiAobm9kZS5pc0ludGVyY2VwdGVkKSB7CiAgICAgIC8vIElmIHdlIGRvbid0IG5lZWQgdGhlIHN1YnN0aXR1dGlvbiBtZXRob2RzIHRoZW4gd2UgZG9uJ3QgbmVlZCB0aGUKICAgICAgLy8gaW50ZXJjZXB0b3IgdG8gYWNjZXNzIHRoZW0uCiAgICAgIGlmICghbmVlZHNTdWJzdGl0dXRpb25Gb3JUeXBlVmFyaWFibGVBY2Nlc3MoY29udGV4dENsYXNzKSkgewogICAgICAgIHJldHVybiBuZXcgSFR5cGVJbmZvUmVhZFZhcmlhYmxlLm5vSW50ZXJjZXB0b3IoCiAgICAgICAgICAgIHZhcmlhYmxlLCBvYmplY3QsIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgfQogICAgICAvLyBBbGwgaW50ZXJjZXB0ZWQgY2xhc3NlcyBleHRlbmQgYEludGVyY2VwdG9yYCwgc28gaWYgdGhlIHJlY2VpdmVyIGNhbid0CiAgICAgIC8vIGJlIGEgY2xhc3MgZXh0ZW5kaW5nIGBJbnRlcmNlcHRvcmAgdGhlbiB0aGUgc3Vic3RpdHV0aW9uIG1ldGhvZHMgY2FuIGJlCiAgICAgIC8vIGNhbGxlZCBkaXJlY3RseS4gKFdlIGRvbid0IGNhcmUgYWJvdXQgTnVsbCBzaW5jZSBjb250ZXh0cyByZWFkaW5nIGNsYXNzCiAgICAgIC8vIHR5cGUgdmFyaWFibGVzIG9yaWdpbmF0ZSBmcm9tIGluc3RhbmNlIG1ldGhvZHMuKQogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5pc0ludGVyY2VwdG9yKG9iamVjdC5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICByZXR1cm4gbmV3IEhUeXBlSW5mb1JlYWRWYXJpYWJsZS5ub0ludGVyY2VwdG9yKAogICAgICAgICAgICB2YXJpYWJsZSwgb2JqZWN0LCBub2RlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFR5cGVFdmFsKEhUeXBlRXZhbCBub2RlKSB7CiAgICBpZiAoVHlwZVJlY2lwZS5pc0lkZW50aXR5KG5vZGUudHlwZUV4cHJlc3Npb24sIG5vZGUuZW52U3RydWN0dXJlKSkgewogICAgICByZXR1cm4gbm9kZS5pbnB1dHMuc2luZ2xlOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRBc0NoZWNrKEhBc0NoZWNrIG5vZGUpIHsKICAgIGlmIChub2RlLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkpIHJldHVybiBub2RlLmNoZWNrZWRJbnB1dDsKCiAgICAvLyBTZWUgaWYgdGhpcyBjaGVjayBjYW4gYmUgbG93ZXJlZCB0byBhIHNpbXBsZSBvbmUuCiAgICBISW5zdHJ1Y3Rpb24gdHlwZUlucHV0ID0gbm9kZS50eXBlSW5wdXQ7CiAgICBpZiAodHlwZUlucHV0IGlzIEhMb2FkVHlwZSkgewogICAgICBEYXJ0VHlwZSBkYXJ0VHlwZSA9IHR5cGVJbnB1dC50eXBlRXhwcmVzc2lvbjsKICAgICAgTWVtYmVyRW50aXR5IHNwZWNpYWxpemVkQ2hlY2sgPSBTcGVjaWFsaXplZENoZWNrcy5maW5kQXNDaGVjaygKICAgICAgICAgIGRhcnRUeXBlLCBub2RlLmlzVHlwZUVycm9yLCBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMpOwogICAgICBpZiAoc3BlY2lhbGl6ZWRDaGVjayAhPSBudWxsKSB7CiAgICAgICAgQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24gY2hlY2tlZFR5cGUgPQogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVGcm9tU3RhdGljVHlwZShkYXJ0VHlwZSwgbnVsbGFibGU6IHRydWUpOwogICAgICAgIHJldHVybiBIQXNDaGVja1NpbXBsZShub2RlLmNoZWNrZWRJbnB1dCwgZGFydFR5cGUsIGNoZWNrZWRUeXBlLAogICAgICAgICAgICBub2RlLmlzVHlwZUVycm9yLCBzcGVjaWFsaXplZENoZWNrLCBub2RlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0QXNDaGVja1NpbXBsZShIQXNDaGVja1NpbXBsZSBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdElzVGVzdChISXNUZXN0IG5vZGUpIHsKICAgIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNoZWNrZWRBYnN0cmFjdFZhbHVlID0gbm9kZS5jaGVja2VkQWJzdHJhY3RWYWx1ZTsKICAgIEhJbnN0cnVjdGlvbiBjaGVja2VkSW5wdXQgPSBub2RlLmNoZWNrZWRJbnB1dDsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gY2hlY2tlZElucHV0Lmluc3RydWN0aW9uVHlwZTsKCiAgICBBYnN0cmFjdEJvb2wgaXNJbiA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW4oCiAgICAgICAgaW5wdXRUeXBlLCBjaGVja2VkQWJzdHJhY3RWYWx1ZS5hYnN0cmFjdFZhbHVlKTsKCiAgICBpZiAoaXNJbi5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIGlmICghY2hlY2tlZEFic3RyYWN0VmFsdWUuaXNQcmVjaXNlKSByZXR1cm4gbm9kZTsKCiAgICBpZiAoaXNJbi5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnN0YW5jZUVudmlyb25tZW50KEhJbnN0YW5jZUVudmlyb25tZW50IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0YW5jZSA9IG5vZGUuaW5wdXRzLnNpbmdsZTsKCiAgICAvLyBTdG9yZS1mb3J3YXJkIGluc3RhbmNlIHR5cGVzIG9mIGNyZWF0ZWQgaW5zdGFuY2VzIGFuZCBjb25zdGFudCBpbnN0YW5jZXMuCiAgICAvLwogICAgLy8gRm9yd2FyZGluZyB0aGUgdHlwZSBtaWdodCBjYXVzZSB0aGUgaW5zdGFuY2UgKEhDcmVhdGUsIGNvbnN0YW50IGV0YykgdG8KICAgIC8vIGJlY29tZSBkZWFkLiBUaGlzIG1pZ2h0IGNhdXNlIHVzIHRvIGxvc2UgdHJhY2sgb2YgdGhhdCBmYWN0IHRoYXQgdGhlcmUKICAgIC8vIGFyZSB0eXBlIGV4cHJlc3Npb25zIGZyb20gd2l0aGluIHRoZSBpbnN0YW5jZSdzIGNsYXNzIHNjb3BlLCBzbyBicmVha2luZwogICAgLy8gdGhlIGFsZ29yaXRobSBmb3IgZ2VuZXJhdGluZyB0aGUgcGVyLXR5cGUgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uLiBUaGUKICAgIC8vIGZpeCBpcyB0byByZWdpc3RlciB0aGUgY2xhc3NlcyBhcyBjcmVhdGVkIGhlcmUgaW4gY2FzZSB0aGUgaW5zdGFuY2UKICAgIC8vIGJlY29tZXMgZGVhZC4KICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IEl0IHdvdWxkIGJlIGNsZWFuZXIgdG8gdHJhY2sgb24gSExvYWRUeXBlLCBIVHlwZUV2YWwsIGV0YwogICAgLy8gd2hpY2ggY2xhc3Mgc2NvcGUocykgdGhleSBvcmlnaW5hdGVkIGZyb20uIElmIHRoZSB0eXBlIGV4cHJlc3Npb25zIGJlY29tZQogICAgLy8gZGVhZCwgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIHNjb3BlIHR5cGUgdmFyaWFibGVzIGJlY29tZSBkZWFkLgoKICAgIGlmIChpbnN0YW5jZSBpcyBIQ3JlYXRlKSB7CiAgICAgIGlmIChpbnN0YW5jZS5oYXNSdGlJbnB1dCkgewogICAgICAgIGluc3RhbmNlLmluc3RhbnRpYXRlZFR5cGVzPy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlckluc3RhbnRpYXRpb24pOwogICAgICAgIHJldHVybiBpbnN0YW5jZS5pbnB1dHMubGFzdDsKICAgICAgfQogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBpZiAoaW5zdGFuY2UgaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSA9IGluc3RhbmNlLmNvbnN0YW50OwogICAgICBpZiAoY29uc3RhbnRWYWx1ZSBpcyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUpIHsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJJbnN0YW50aWF0aW9uKGNvbnN0YW50VmFsdWUudHlwZSk7CiAgICAgICAgcmV0dXJuIEhMb2FkVHlwZShjb25zdGFudFZhbHVlLnR5cGUsIGluc3RhbmNlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBTdG9yZS1mb3J3YXJkIGxpc3QgbGl0ZXJhbCB0eXBlcy4KCiAgICByZXR1cm4gbm9kZTsKICB9Cn0KCmNsYXNzIFNzYUNoZWNrSW5zZXJ0ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgZmluYWwgU2V0PEhJbnN0cnVjdGlvbj4gYm91bmRzQ2hlY2tlZDsKICBmaW5hbCBib29sIHRydXN0UHJpbWl0aXZlczsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhQ2hlY2tJbnNlcnRlciI7CiAgSEdyYXBoIGdyYXBoOwoKICBTc2FDaGVja0luc2VydGVyKHRoaXMudHJ1c3RQcmltaXRpdmVzLCB0aGlzLmNsb3NlZFdvcmxkLCB0aGlzLmJvdW5kc0NoZWNrZWQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB0aGlzLmdyYXBoID0gZ3JhcGg7CgogICAgLy8gSW4gLS10cnVzdC1wcmltaXRpdmVzIG1vZGUgd2UgZG9uJ3QgYWRkIGJvdW5kcyBjaGVja3MuICBUaGlzIGlzIGJldHRlcgogICAgLy8gdGhhbiB0cnlpbmcgdG8gcmVtb3ZlIHRoZW0gbGF0ZXIgYXMgdGhlIGxpbWl0IGV4cHJlc3Npb24gd291bGQgYmVjb21lCiAgICAvLyBkZWFkIGFuZCByZXF1aXJlIERDRS4KICAgIGlmICh0cnVzdFByaW1pdGl2ZXMpIHJldHVybjsKCiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgSEJvdW5kc0NoZWNrIGluc2VydEJvdW5kc0NoZWNrKAogICAgICBISW5zdHJ1Y3Rpb24gaW5kZXhOb2RlLCBISW5zdHJ1Y3Rpb24gYXJyYXksIEhJbnN0cnVjdGlvbiBpbmRleEFyZ3VtZW50KSB7CiAgICBIR2V0TGVuZ3RoIGxlbmd0aCA9IG5ldyBIR2V0TGVuZ3RoKAogICAgICAgIGFycmF5LCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZSwKICAgICAgICBpc0Fzc2lnbmFibGU6ICFpc0ZpeGVkTGVuZ3RoKGFycmF5Lmluc3RydWN0aW9uVHlwZSwgY2xvc2VkV29ybGQpKTsKICAgIGluZGV4Tm9kZS5ibG9jay5hZGRCZWZvcmUoaW5kZXhOb2RlLCBsZW5ndGgpOwoKICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9CiAgICAgICAgaW5kZXhBcmd1bWVudC5pc1Bvc2l0aXZlSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZQogICAgICAgICAgICA/IGluZGV4QXJndW1lbnQuaW5zdHJ1Y3Rpb25UeXBlCiAgICAgICAgICAgIDogY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGU7CiAgICBIQm91bmRzQ2hlY2sgY2hlY2sgPSBuZXcgSEJvdW5kc0NoZWNrKGluZGV4QXJndW1lbnQsIGxlbmd0aCwgYXJyYXksIHR5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBpbmRleE5vZGUuc291cmNlSW5mb3JtYXRpb247CiAgICBpbmRleE5vZGUuYmxvY2suYWRkQmVmb3JlKGluZGV4Tm9kZSwgY2hlY2spOwogICAgLy8gSWYgdGhlIGluZGV4IGlucHV0IHRvIHRoZSBib3VuZHMgY2hlY2sgd2FzIG5vdCBrbm93biB0byBiZSBhbiBpbnRlZ2VyCiAgICAvLyB0aGVuIHdlIHJlcGxhY2UgaXRzIHVzZXMgd2l0aCB0aGUgYm91bmRzIGNoZWNrLCB3aGljaCBpcyBrbm93biB0byBiZSBhbgogICAgLy8gaW50ZWdlci4gIEhvd2V2ZXIsIGlmIHRoZSBpbnB1dCB3YXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHdlIGRvbid0IGRvIHRoaXMKICAgIC8vIGJlY2F1c2UgcHV0dGluZyBpbiBhIGNoZWNrIGluc3RydWN0aW9uIG1pZ2h0IG9ic2N1cmUgdGhlIHJlYWwgbmF0dXJlIG9mCiAgICAvLyB0aGUgaW5kZXggZWcuIGlmIGl0IGlzIGEgY29uc3RhbnQuICBUaGUgcmFuZ2UgaW5mb3JtYXRpb24gZnJvbSB0aGUKICAgIC8vIEJvdW5kc0NoZWNrIGluc3RydWN0aW9uIGlzIGF0dGFjaGVkIHRvIHRoZSBpbnB1dCBkaXJlY3RseSBieQogICAgLy8gdmlzaXRCb3VuZHNDaGVjayBpbiB0aGUgU3NhVmFsdWVSYW5nZUFuYWx5emVyLgogICAgaWYgKGluZGV4QXJndW1lbnQuaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgaW5kZXhBcmd1bWVudC5yZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeShpbmRleE5vZGUsIGNoZWNrKTsKICAgIH0KICAgIGJvdW5kc0NoZWNrZWQuYWRkKGluZGV4Tm9kZSk7CiAgICByZXR1cm4gY2hlY2s7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXgoSEluZGV4IG5vZGUpIHsKICAgIGlmIChib3VuZHNDaGVja2VkLmNvbnRhaW5zKG5vZGUpKSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBub2RlLmluZGV4OwogICAgaW5kZXggPSBpbnNlcnRCb3VuZHNDaGVjayhub2RlLCBub2RlLnJlY2VpdmVyLCBpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIG5vZGUpIHsKICAgIGlmIChib3VuZHNDaGVja2VkLmNvbnRhaW5zKG5vZGUpKSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBub2RlLmluZGV4OwogICAgaW5kZXggPSBpbnNlcnRCb3VuZHNDaGVjayhub2RlLCBub2RlLnJlY2VpdmVyLCBpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKSB7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IG5vZGUuZWxlbWVudDsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSByZXR1cm47CiAgICBpZiAoZWxlbWVudCAhPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0FycmF5UmVtb3ZlTGFzdCkgcmV0dXJuOwogICAgaWYgKGJvdW5kc0NoZWNrZWQuY29udGFpbnMobm9kZSkpIHJldHVybjsKICAgIC8vIGAwYCBpcyB0aGUgaW5kZXggd2Ugd2FudCB0byBjaGVjaywgYnV0IHdlIHdhbnQgdG8gcmVwb3J0IGAtMWAsIGFzIGlmIHdlCiAgICAvLyBleGVjdXRlZCBgYVthLmxlbmd0aC0xXWAKICAgIEhCb3VuZHNDaGVjayBjaGVjayA9IGluc2VydEJvdW5kc0NoZWNrKAogICAgICAgIG5vZGUsIG5vZGUucmVjZWl2ZXIsIGdyYXBoLmFkZENvbnN0YW50SW50KDAsIGNsb3NlZFdvcmxkKSk7CiAgICBISW5zdHJ1Y3Rpb24gbWludXNPbmUgPSBncmFwaC5hZGRDb25zdGFudEludCgtMSwgY2xvc2VkV29ybGQpOwogICAgY2hlY2suaW5wdXRzLmFkZChtaW51c09uZSk7CiAgICBtaW51c09uZS51c2VkQnkuYWRkKGNoZWNrKTsKICB9Cn0KCmNsYXNzIFNzYURlYWRDb2RlRWxpbWluYXRvciBleHRlbmRzIEhHcmFwaFZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhRGVhZENvZGVFbGltaW5hdG9yIjsKCiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIFNzYU9wdGltaXplclRhc2sgb3B0aW1pemVyOwogIEhHcmFwaCBfZ3JhcGg7CiAgU3NhTGl2ZUJsb2NrQW5hbHl6ZXIgYW5hbHl6ZXI7CiAgTWFwPEhJbnN0cnVjdGlvbiwgYm9vbD4gdHJpdmlhbERlYWRTdG9yZVJlY2VpdmVycyA9CiAgICAgIG5ldyBNYXBsZXQ8SEluc3RydWN0aW9uLCBib29sPigpOwogIGJvb2wgZWxpbWluYXRlZFNpZGVFZmZlY3RzID0gZmFsc2U7CgogIFNzYURlYWRDb2RlRWxpbWluYXRvcih0aGlzLmNsb3NlZFdvcmxkLCB0aGlzLm9wdGltaXplcik7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEhJbnN0cnVjdGlvbiB6YXBJbnN0cnVjdGlvbkNhY2hlOwogIEhJbnN0cnVjdGlvbiBnZXQgemFwSW5zdHJ1Y3Rpb24gewogICAgaWYgKHphcEluc3RydWN0aW9uQ2FjaGUgPT0gbnVsbCkgewogICAgICAvLyBBIGNvbnN0YW50IHdpdGggbm8gdHlwZSBkb2VzIG5vdCBwb2xsdXRlIHR5cGVzIGF0IHBoaSBub2Rlcy4KICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGNvbnN0IFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSgpOwogICAgICB6YXBJbnN0cnVjdGlvbkNhY2hlID0gYW5hbHl6ZXIuZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiB6YXBJbnN0cnVjdGlvbkNhY2hlOwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBvZiBbZm9yZWlnbl0gd2lsbCB0aHJvdyBhbiBub1N1Y2hNZXRob2QgZXJyb3IgaWYKICAvLy8gcmVjZWl2ZXIgaXMgYG51bGxgIGJlZm9yZSBoYXZpbmcgYW55IG90aGVyIHNpZGUtZWZmZWN0cy4KICBib29sIHRlbXBsYXRlVGhyb3dzTlNNb25OdWxsKEhGb3JlaWduQ29kZSBmb3JlaWduLCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIpIHsKICAgIGlmIChmb3JlaWduLmlucHV0cy5sZW5ndGggPCAxKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZm9yZWlnbi5pbnB1dHMuZmlyc3QgIT0gcmVjZWl2ZXIpIHJldHVybiBmYWxzZTsKICAgIGlmIChmb3JlaWduLnRocm93QmVoYXZpb3IuaXNOdWxsTlNNR3VhcmQpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgbmV4dCB0aHJvd2luZyBpbnN0cnVjdGlvbiB0aGF0IG1heSBoYXZlIHNpZGUKICAvLy8gZWZmZWN0cyBhZnRlciBbaW5zdHJ1Y3Rpb25dLCB0aHJvd3MgW05vU3VjaE1ldGhvZEVycm9yXSBvbiB0aGUKICAvLy8gc2FtZSByZWNlaXZlciBvZiBbaW5zdHJ1Y3Rpb25dLgogIGJvb2wgaGFzRm9sbG93aW5nVGhyb3dpbmdOU00oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpOwogICAgSEluc3RydWN0aW9uIGN1cnJlbnQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgZG8gewogICAgICBpZiAoKGN1cnJlbnQuZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKSA9PSByZWNlaXZlcikgJiYKICAgICAgICAgIGN1cnJlbnQuY2FuVGhyb3coX2Fic3RyYWN0VmFsdWVEb21haW4pKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGN1cnJlbnQgaXMgSEZvcmVpZ25Db2RlICYmCiAgICAgICAgICB0ZW1wbGF0ZVRocm93c05TTW9uTnVsbChjdXJyZW50LCByZWNlaXZlcikpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoY3VycmVudC5jYW5UaHJvdyhfYWJzdHJhY3RWYWx1ZURvbWFpbikgfHwKICAgICAgICAgIGN1cnJlbnQuc2lkZUVmZmVjdHMuaGFzU2lkZUVmZmVjdHMoKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGN1cnJlbnQubmV4dDsKICAgICAgaWYgKG5leHQgPT0gbnVsbCkgewogICAgICAgIC8vIFdlIGRvIG5vdCBtZXJnZSBibG9ja3MgaW4gb3VyIFNTQSBncmFwaCwgc28gaWYgdGhpcyBibG9jayBqdXN0IGp1bXBzCiAgICAgICAgLy8gdG8gYSBzaW5nbGUgc3VjY2Vzc29yLCB2aXNpdCB0aGUgc3VjY2Vzc29yLCBhdm9pZGluZyBiYWNrLWVkZ2VzLgogICAgICAgIEhCYXNpY0Jsb2NrIHN1Y2Nlc3NvcjsKICAgICAgICBpZiAoY3VycmVudCBpcyBIR290bykgewogICAgICAgICAgc3VjY2Vzc29yID0gY3VycmVudC5ibG9jay5zdWNjZXNzb3JzLnNpbmdsZTsKICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgaXMgSElmKSB7CiAgICAgICAgICAvLyBXZSBhbHNvIGxlYXZlIEhJZiBub2RlcyBpbiBwbGFjZSB3aGVuIG9uZSBicmFuY2ggaXMgZGVhZC4KICAgICAgICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb24gPSBjdXJyZW50LmlucHV0cy5maXJzdDsKICAgICAgICAgIGlmIChjb25kaXRpb24gaXMgSENvbnN0YW50KSB7CiAgICAgICAgICAgIGJvb2wgaXNUcnVlID0gY29uZGl0aW9uLmNvbnN0YW50LmlzVHJ1ZTsKICAgICAgICAgICAgc3VjY2Vzc29yID0gaXNUcnVlID8gY3VycmVudC50aGVuQmxvY2sgOiBjdXJyZW50LmVsc2VCbG9jazsKICAgICAgICAgICAgYXNzZXJ0KCFhbmFseXplci5pc0RlYWRCbG9jayhzdWNjZXNzb3IpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN1Y2Nlc3NvciAhPSBudWxsICYmIHN1Y2Nlc3Nvci5pZCA+IGN1cnJlbnQuYmxvY2suaWQpIHsKICAgICAgICAgIG5leHQgPSBzdWNjZXNzb3IuZmlyc3Q7CiAgICAgICAgfQogICAgICB9CiAgICAgIGN1cnJlbnQgPSBuZXh0OwogICAgfSB3aGlsZSAoY3VycmVudCAhPSBudWxsKTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgaXNUcml2aWFsRGVhZFN0b3JlUmVjZWl2ZXIoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAvLyBGb3IgYW4gYWxsb2NhdGlvbiwgaWYgYWxsIHRoZSBsb2FkcyBhcmUgZGVhZCAoYXdhaXRpbmcgcmVtb3ZhbCBhZnRlcgogICAgLy8gU3NhTG9hZEVsaW1pbmF0aW9uKSBhbmQgdGhlIG9ubHkgb3RoZXIgdXNlcyBhcmUgc3RvcmVzLCB0aGVuIHRoZQogICAgLy8gYWxsb2NhdGlvbiBkb2VzIG5vdCBlc2NhcGUgd2hpY2ggbWFrZXMgYWxsIHRoZSBzdG9yZXMgZGVhZCB0b28uCiAgICBib29sIGlzRGVhZFVzZShISW5zdHJ1Y3Rpb24gdXNlKSB7CiAgICAgIGlmICh1c2UgaXMgSEZpZWxkU2V0KSB7CiAgICAgICAgLy8gVGhlIHVzZSBtdXN0IGJlIHRoZSByZWNlaXZlci4gIEV2ZW4gaWYgdGhlIHVzZSBpcyBhbHNvIHRoZSBhcmd1bWVudCwKICAgICAgICAvLyBpLmUuICBhLnggPSBhLCB0aGUgc3RvcmUgaXMgc3RpbGwgZGVhZCBpZiBhbGwgb3RoZXIgdXNlcyBhcmUgZGVhZC4KICAgICAgICBpZiAodXNlLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCkgPT0gaW5zdHJ1Y3Rpb24pIHJldHVybiB0cnVlOwogICAgICB9IGVsc2UgaWYgKHVzZSBpcyBIRmllbGRHZXQpIHsKICAgICAgICBhc3NlcnQodXNlLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCkgPT0gaW5zdHJ1Y3Rpb24pOwogICAgICAgIGlmIChpc0RlYWRDb2RlKHVzZSkpIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaXNBbGxvY2F0aW9uKF9hYnN0cmFjdFZhbHVlRG9tYWluKSAmJgogICAgICAgIGluc3RydWN0aW9uLmlzUHVyZShfYWJzdHJhY3RWYWx1ZURvbWFpbikgJiYKICAgICAgICB0cml2aWFsRGVhZFN0b3JlUmVjZWl2ZXJzLnB1dElmQWJzZW50KAogICAgICAgICAgICBpbnN0cnVjdGlvbiwgKCkgPT4gaW5zdHJ1Y3Rpb24udXNlZEJ5LmV2ZXJ5KGlzRGVhZFVzZSkpOwogIH0KCiAgYm9vbCBpc1RyaXZpYWxEZWFkU3RvcmUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gaXMgSEZpZWxkU2V0ICYmCiAgICAgICAgaXNUcml2aWFsRGVhZFN0b3JlUmVjZWl2ZXIoaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBib29sIGlzRGVhZENvZGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoIWluc3RydWN0aW9uLnVzZWRCeS5pc0VtcHR5KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNUcml2aWFsRGVhZFN0b3JlKGluc3RydWN0aW9uKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuaGFzU2lkZUVmZmVjdHMoKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGluc3RydWN0aW9uLmNhblRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluKSkgewogICAgICBpZiAoaW5zdHJ1Y3Rpb24ub25seVRocm93c05TTSgpICYmIGhhc0ZvbGxvd2luZ1Rocm93aW5nTlNNKGluc3RydWN0aW9uKSkgewogICAgICAgIC8vIFtpbnN0cnVjdGlvbl0gaXMgYSBudWxsIHJlY2lldmVyIGd1YXJkIHRoYXQgaXMgZm9sbG93ZWQgYnkgYW4KICAgICAgICAvLyBpbnN0cnVjdGlvbiB0aGF0IGZhaWxzIHRoZSBzYW1lIHdheSAoYnkgYWNjZXNzaW5nIGEgcHJvcGVydHkgb2YKICAgICAgICAvLyBgbnVsbGAgb3IgYHVuZGVmaW5lZGApLgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUGFyYW1ldGVyVmFsdWUpIHJldHVybiBmYWxzZTsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBITG9jYWxTZXQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgX2dyYXBoID0gZ3JhcGg7CiAgICBhbmFseXplciA9IG5ldyBTc2FMaXZlQmxvY2tBbmFseXplcihncmFwaCwgY2xvc2VkV29ybGQsIG9wdGltaXplcik7CiAgICBhbmFseXplci5hbmFseXplKCk7CiAgICB2aXNpdFBvc3REb21pbmF0b3JUcmVlKGdyYXBoKTsKICAgIGNsZWFuUGhpcygpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGJvb2wgaXNEZWFkQmxvY2sgPSBhbmFseXplci5pc0RlYWRCbG9jayhibG9jayk7CiAgICBibG9jay5pc0xpdmUgPSAhaXNEZWFkQmxvY2s7CiAgICBzaW1wbGlmeUNvbnRyb2xGbG93KGJsb2NrKTsKICAgIC8vIFN0YXJ0IGZyb20gdGhlIGxhc3Qgbm9uLWNvbnRyb2wgZmxvdyBpbnN0cnVjdGlvbiBpbiB0aGUgYmxvY2suCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5sYXN0LnByZXZpb3VzOwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgdmFyIHByZXZpb3VzID0gaW5zdHJ1Y3Rpb24ucHJldmlvdXM7CiAgICAgIGlmIChpc0RlYWRCbG9jaykgewogICAgICAgIGVsaW1pbmF0ZWRTaWRlRWZmZWN0cyA9CiAgICAgICAgICAgIGVsaW1pbmF0ZWRTaWRlRWZmZWN0cyB8fCBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5oYXNTaWRlRWZmZWN0cygpOwogICAgICAgIHJlbW92ZVVzZXJzKGluc3RydWN0aW9uKTsKICAgICAgICBibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgICB9IGVsc2UgaWYgKGlzRGVhZENvZGUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IHByZXZpb3VzOwogICAgfQogICAgYmxvY2suZm9yRWFjaFBoaShzaW1wbGlmeVBoaSk7CiAgICBldmFjdWF0ZVRha2VuQnJhbmNoKGJsb2NrKTsKICB9CgogIHZvaWQgc2ltcGxpZnlQaGkoSFBoaSBwaGkpIHsKICAgIC8vIElmIHRoZSBwaGkgaXMgb2YgdGhlIGZvcm0gYHBoaSh4LCBIVHlwZUtub3duKHgpKWAsIGl0IGRvZXMgbm90IHN0cmVuZ3RoZW4KICAgIC8vIGB4YC4gIFdlIGNhbiByZXBsYWNlIHRoZSBwaGkgd2l0aCBgeGAgdG8gcG90ZW50aWFsbHkgbWFrZSB0aGUgSFR5cGVLbm93bgogICAgLy8gcmVmaW5lbWVudCBub2RlIGRlYWQgYW5kIHBvdGVudGlhbGx5IG1ha2UgYSBISWYgY29udHJvbCBubyBIUGhpcy4KCiAgICAvLyBUT0RPKHNyYSk6IEltcGxlbWVudCB2ZXJzaW9uIG9mIHRoaXMgdGVzdCB0aGF0IHdvcmtzIGZvciBhIHN1YmdyYXBoIG9mCiAgICAvLyBIUGhpIG5vZGVzLgogICAgSEluc3RydWN0aW9uIGJhc2UgPSBudWxsOwogICAgYm9vbCBzZWVuVW5yZWZpbmVkQmFzZSA9IGZhbHNlOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5wdXQgaW4gcGhpLmlucHV0cykgewogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBpbnB1dDsKICAgICAgd2hpbGUgKHZhbHVlIGlzIEhUeXBlS25vd24pIHsKICAgICAgICBIVHlwZUtub3duIHJlZmluZW1lbnQgPSB2YWx1ZTsKICAgICAgICB2YWx1ZSA9IHJlZmluZW1lbnQuY2hlY2tlZElucHV0OwogICAgICB9CiAgICAgIGlmICh2YWx1ZSA9PSBpbnB1dCkgc2VlblVucmVmaW5lZEJhc2UgPSB0cnVlOwogICAgICBiYXNlID8/PSB2YWx1ZTsKICAgICAgaWYgKGJhc2UgIT0gdmFsdWUpIHJldHVybjsKICAgIH0KCiAgICBpZiAoc2VlblVucmVmaW5lZEJhc2UpIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBwaGkuYmxvY2s7CiAgICAgIGJsb2NrLnJld3JpdGUocGhpLCBiYXNlKTsKICAgICAgYmxvY2sucmVtb3ZlUGhpKHBoaSk7CiAgICB9CiAgfQoKICB2b2lkIHNpbXBsaWZ5Q29udHJvbEZsb3coSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhDb250cm9sRmxvdyBpbnN0cnVjdGlvbiA9IGJsb2NrLmxhc3Q7CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSElmKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb24gPSBpbnN0cnVjdGlvbi5jb25kaXRpb247CiAgICAgIGlmIChjb25kaXRpb24uaXNDb25zdGFudCgpKSByZXR1cm47CgogICAgICAvLyBXZSB3YW50IHRvIHJlbW92ZSBhbiBpZi10aGVuLWVsc2UgZGlhbW9uZCB3aGVuIHRoZSB0aGVuLSBhbmQgZWxzZS0KICAgICAgLy8gYnJhbmNoZXMgYXJlIGVtcHR5IGFuZCB0aGUgY29uZGl0aW9uIGRvZXMgbm90IGNvbnRyb2wgYSBIUGhpLiBXZSBjYW5ub3QKICAgICAgLy8gY2hhbmdlIHRoZSBDRkcgc3RydWN0dXJlIHNvIHdlIHJlcGxhY2UgdGhlIEhJZiBjb25kaXRpb24gd2l0aCBhCiAgICAgIC8vIGNvbnN0YW50LiBUaGlzIG1heSBsZWF2ZSB0aGUgb3JpZ2luYWwgY29uZGl0aW9uIHVudXNlZC4gaS5lLiBhCiAgICAgIC8vIGNhbmRpZGF0ZSBmb3IgYmVpbmcgZGVhZCBjb2RlLgoKICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gZG9taW5hdGVkID0gYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgICAvLyBEaWFtb25kLWxpa2UgY29udHJvbCBmbG93IGRvbWluYXRlcyB0aGUgdGhlbi0sIGVsc2UtIGFuZCBqb2luLSBibG9ja3MuCiAgICAgIGlmIChkb21pbmF0ZWQubGVuZ3RoICE9IDMpIHJldHVybjsKICAgICAgSEJhc2ljQmxvY2sgam9pbiA9IGRvbWluYXRlZC5sYXN0OwogICAgICBpZiAoIWpvaW4ucGhpcy5pc0VtcHR5KSByZXR1cm47IC8vIGNvbmRpdGlvbiBjb250cm9scyBhIHBoaS4KICAgICAgLy8gSWdub3JlIGV4aXQgYmxvY2sgLSB1c3VhbGx5IHRoZSBqb2luIGluIGBpZiAoLi4uKSByZXR1cm4gLi4uYAogICAgICBpZiAoam9pbi5pc0V4aXRCbG9jaygpKSByZXR1cm47CgogICAgICBpbnQgdGhlblNpemUgPSBtZWFzdXJlRW1wdHlJbnRlcnZhbChpbnN0cnVjdGlvbi50aGVuQmxvY2ssIGpvaW4pOwogICAgICBpZiAodGhlblNpemUgPT0gbnVsbCkgcmV0dXJuOwogICAgICBpbnQgZWxzZVNpemUgPSBtZWFzdXJlRW1wdHlJbnRlcnZhbChpbnN0cnVjdGlvbi5lbHNlQmxvY2ssIGpvaW4pOwogICAgICBpZiAoZWxzZVNpemUgPT0gbnVsbCkgcmV0dXJuOwoKICAgICAgLy8gUGljayB0aGUgJ2xpdmUnIGJyYW5jaCB0byBiZSB0aGUgc21hbGxlc3Qgc3ViZ3JhcGguCiAgICAgIGJvb2wgdmFsdWUgPSB0aGVuU2l6ZSA8PSBlbHNlU2l6ZTsKICAgICAgSEluc3RydWN0aW9uIG5ld0NvbmRpdGlvbiA9IF9ncmFwaC5hZGRDb25zdGFudEJvb2wodmFsdWUsIGNsb3NlZFdvcmxkKTsKICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzBdID0gbmV3Q29uZGl0aW9uOwogICAgICBjb25kaXRpb24udXNlZEJ5LnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICAgIG5ld0NvbmRpdGlvbi51c2VkQnkuYWRkKGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYmxvY2tzIGZyb20gW3N0YXJ0XSB1cCB0byBidXQgbm90IGluY2x1ZGluZyBbZW5kXS4KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgYW55IG9mIHRoZSBibG9ja3MgaXMgbm9uLWVtcHR5IChvdGhlciB0aGFuIGNvbnRyb2wKICAvLy8gZmxvdykuICBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBhbiBleGl0IGZyb20gdGhlIHJlZ2lvbiBvdGhlciB0aGFuCiAgLy8vIFtlbmRdIG9yIHZpYSBjb250cm9sIGZsb3cgb3RoZXIgdGhhbiBIR290byBhbmQgSElmLgogIGludCBtZWFzdXJlRW1wdHlJbnRlcnZhbChIQmFzaWNCbG9jayBzdGFydCwgSEJhc2ljQmxvY2sgZW5kKSB7CiAgICBpZiAoc3RhcnQuZmlyc3QgIT0gc3RhcnQubGFzdCkgcmV0dXJuIG51bGw7IC8vIHN0YXJ0IGlzIG5vdCBlbXB0eS4KICAgIC8vIERvIGEgc2ltcGxlIHNpbmdsZS1ibG9jayByZWdpb24gdGVzdCBmaXJzdC4KICAgIGlmIChzdGFydC5sYXN0IGlzIEhHb3RvICYmCiAgICAgICAgc3RhcnQuc3VjY2Vzc29ycy5sZW5ndGggPT0gMSAmJgogICAgICAgIHN0YXJ0LnN1Y2Nlc3NvcnMuc2luZ2xlID09IGVuZCkgewogICAgICByZXR1cm4gMTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IGZ1bGxlciB0ZXN0LgogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gSWYgW2Jsb2NrXSBpcyBhbiBhbHdheXMtdGFrZW4gYnJhbmNoLCBtb3ZlIHRoZSBjb2RlIGZyb20gdGhlIHRha2VuIGJyYW5jaAogIC8vLyBpbnRvIFtibG9ja10uIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgbWFraW5nIHRoZSBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIGZvcgogIC8vLyBmdXJ0aGVyIG9wdGltaXphdGlvbnMgYnkgbW92aW5nIHRoZW0gdG8gYSBwb3NpdGlvbiB0aGF0IGRvbWluYXRlcyB0aGUgam9pbgogIC8vLyBwb2ludCBvZiB0aGUgaWYtdGhlbi1lbHNlLgogIC8vIFRPRE8oMjk0NzUpOiBEZWxldGUgZGVhZCBibG9ja3MgaW5zdGVhZC4KICB2b2lkIGV2YWN1YXRlVGFrZW5CcmFuY2goSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmICghYmxvY2suaXNMaXZlKSByZXR1cm47CiAgICBIQ29udHJvbEZsb3cgYnJhbmNoID0gYmxvY2subGFzdDsKICAgIGlmIChicmFuY2ggaXMgSElmKSB7CiAgICAgIGlmIChicmFuY2gudGhlbkJsb2NrLmlzTGl2ZSA9PSBicmFuY2guZWxzZUJsb2NrLmlzTGl2ZSkgcmV0dXJuOwogICAgICBhc3NlcnQoYnJhbmNoLmNvbmRpdGlvbi5pc0NvbnN0YW50KCkpOwogICAgICBIQmFzaWNCbG9jayB0YXJnZXQgPQogICAgICAgICAgYnJhbmNoLnRoZW5CbG9jay5pc0xpdmUgPyBicmFuY2gudGhlbkJsb2NrIDogYnJhbmNoLmVsc2VCbG9jazsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gdGFyZ2V0LmZpcnN0OwogICAgICB3aGlsZSAoIWluc3RydWN0aW9uLmlzQ29udHJvbEZsb3coKSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFR5cGVLbm93biAmJiBpbnN0cnVjdGlvbi5pc1Bpbm5lZCkgYnJlYWs7CiAgICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2suZGV0YWNoKGluc3RydWN0aW9uKTsKICAgICAgICBibG9jay5tb3ZlQXRFeGl0KGluc3RydWN0aW9uKTsKICAgICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY2xlYW5QaGlzKCkgewogICAgTDoKICAgIGZvciAoSEJhc2ljQmxvY2sgYmxvY2sgaW4gX2dyYXBoLmJsb2NrcykgewogICAgICBMaXN0PEhCYXNpY0Jsb2NrPiBwcmVkZWNlc3NvcnMgPSBibG9jay5wcmVkZWNlc3NvcnM7CiAgICAgIC8vIFphcCBhbGwgaW5wdXRzIHRvIHBoaXMgdGhhdCBjb3JyZXNwb25kIHRvIGRlYWQgYmxvY2tzLgogICAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgaWYgKCFwcmVkZWNlc3NvcnNbaV0uaXNMaXZlICYmIHBoaS5pbnB1dHNbaV0gIT0gemFwSW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgcmVwbGFjZUlucHV0KGksIHBoaSwgemFwSW5zdHJ1Y3Rpb24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChwcmVkZWNlc3NvcnMubGVuZ3RoIDwgMikgY29udGludWUgTDsKICAgICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIHNpbmdsZSBsaXZlIHByZWRlY2Vzc29yIGlmIGl0IGV4aXN0cy4KICAgICAgaW50IGluZGV4T2ZMaXZlID0gLTE7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXS5pc0xpdmUpIHsKICAgICAgICAgIGlmIChpbmRleE9mTGl2ZSA+PSAwKSBjb250aW51ZSBMOwogICAgICAgICAgaW5kZXhPZkxpdmUgPSBpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBSdW4gdGhyb3VnaCB0aGUgcGhpcyBvZiB0aGUgYmxvY2sgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZWlyIGlucHV0CiAgICAgIC8vIHRoYXQgY29tZXMgZnJvbSB0aGUgb25seSBsaXZlIHByZWRlY2Vzc29yIGlmIHRoYXQgZG9taW5hdGVzIHRoZSBwaGkuCiAgICAgIC8vCiAgICAgIC8vIFRPRE8oc3JhKTogSWYgdGhlIGlucHV0IGlzIGRpcmVjdGx5IGluIHRoZSBvbmx5IGxpdmUgcHJlZGVjZXNzb3IsIGl0CiAgICAgIC8vIG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1vdmUgaXQgaW50byBbYmxvY2tdIChlLmcuIGFsbCBpdHMgaW5wdXRzIGFyZQogICAgICAvLyBkb21pbmF0aW5nLikKICAgICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQgPQogICAgICAgICAgICAoaW5kZXhPZkxpdmUgPj0gMCkgPyBwaGkuaW5wdXRzW2luZGV4T2ZMaXZlXSA6IHphcEluc3RydWN0aW9uOwogICAgICAgIGlmIChyZXBsYWNlbWVudC5kb21pbmF0ZXMocGhpKSkgewogICAgICAgICAgYmxvY2sucmV3cml0ZShwaGksIHJlcGxhY2VtZW50KTsKICAgICAgICAgIGJsb2NrLnJlbW92ZVBoaShwaGkpOwogICAgICAgICAgaWYgKHJlcGxhY2VtZW50LnNvdXJjZUVsZW1lbnQgPT0gbnVsbCAmJgogICAgICAgICAgICAgIHBoaS5zb3VyY2VFbGVtZW50ICE9IG51bGwgJiYKICAgICAgICAgICAgICByZXBsYWNlbWVudCBpcyEgSFRoaXMpIHsKICAgICAgICAgICAgcmVwbGFjZW1lbnQuc291cmNlRWxlbWVudCA9IHBoaS5zb3VyY2VFbGVtZW50OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIHJlcGxhY2VJbnB1dChpbnQgaSwgSEluc3RydWN0aW9uIGZyb20sIEhJbnN0cnVjdGlvbiBieSkgewogICAgZnJvbS5pbnB1dHNbaV0udXNlZEJ5LnJlbW92ZShmcm9tKTsKICAgIGZyb20uaW5wdXRzW2ldID0gYnk7CiAgICBieS51c2VkQnkuYWRkKGZyb20pOwogIH0KCiAgdm9pZCByZW1vdmVVc2VycyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGluc3RydWN0aW9uLnVzZWRCeS5mb3JFYWNoKCh1c2VyKSB7CiAgICAgIHJlbW92ZUlucHV0KHVzZXIsIGluc3RydWN0aW9uKTsKICAgIH0pOwogICAgaW5zdHJ1Y3Rpb24udXNlZEJ5LmNsZWFyKCk7CiAgfQoKICB2b2lkIHJlbW92ZUlucHV0KEhJbnN0cnVjdGlvbiB1c2VyLCBISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSB1c2VyLmlucHV0czsKICAgIGZvciAoaW50IGkgPSAwLCBsZW5ndGggPSBpbnB1dHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGlucHV0ID09IGlucHV0c1tpXSkgewogICAgICAgIHVzZXIuaW5wdXRzW2ldID0gemFwSW5zdHJ1Y3Rpb247CiAgICAgICAgemFwSW5zdHJ1Y3Rpb24udXNlZEJ5LmFkZCh1c2VyKTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgU3NhTGl2ZUJsb2NrQW5hbHl6ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IgewogIGZpbmFsIEhHcmFwaCBncmFwaDsKICBmaW5hbCBTZXQ8SEJhc2ljQmxvY2s+IGxpdmUgPSBuZXcgU2V0PEhCYXNpY0Jsb2NrPigpOwogIGZpbmFsIExpc3Q8SEJhc2ljQmxvY2s+IHdvcmtsaXN0ID0gPEhCYXNpY0Jsb2NrPltdOwogIGZpbmFsIFNzYU9wdGltaXplclRhc2sgb3B0aW1pemVyOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKCiAgU3NhTGl2ZUJsb2NrQW5hbHl6ZXIodGhpcy5ncmFwaCwgdGhpcy5jbG9zZWRXb3JsZCwgdGhpcy5vcHRpbWl6ZXIpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBNYXA8SEluc3RydWN0aW9uLCBSYW5nZT4gZ2V0IHJhbmdlcyA9PiBvcHRpbWl6ZXIucmFuZ2VzOwoKICBib29sIGlzRGVhZEJsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSA9PiAhbGl2ZS5jb250YWlucyhibG9jayk7CgogIHZvaWQgYW5hbHl6ZSgpIHsKICAgIG1hcmtCbG9ja0xpdmUoZ3JhcGguZW50cnkpOwogICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KSB7CiAgICAgIEhCYXNpY0Jsb2NrIGxpdmUgPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGxpdmUubGFzdC5hY2NlcHQodGhpcyk7CiAgICB9CiAgfQoKICB2b2lkIG1hcmtCbG9ja0xpdmUoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmICghbGl2ZS5jb250YWlucyhibG9jaykpIHsKICAgICAgd29ya2xpc3QuYWRkKGJsb2NrKTsKICAgICAgbGl2ZS5hZGQoYmxvY2spOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRyb2xGbG93KEhDb250cm9sRmxvdyBpbnN0cnVjdGlvbikgewogICAgaW5zdHJ1Y3Rpb24uYmxvY2suc3VjY2Vzc29ycy5mb3JFYWNoKG1hcmtCbG9ja0xpdmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElmKEhJZiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IGluc3RydWN0aW9uLmNvbmRpdGlvbjsKICAgIGlmIChjb25kaXRpb24uaXNDb25zdGFudCgpKSB7CiAgICAgIGlmIChjb25kaXRpb24uaXNDb25zdGFudFRydWUoKSkgewogICAgICAgIG1hcmtCbG9ja0xpdmUoaW5zdHJ1Y3Rpb24udGhlbkJsb2NrKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXJrQmxvY2tMaXZlKGluc3RydWN0aW9uLmVsc2VCbG9jayk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZpc2l0Q29udHJvbEZsb3coaW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaChIU3dpdGNoIG5vZGUpIHsKICAgIGlmIChub2RlLmV4cHJlc3Npb24uaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIFJhbmdlIHN3aXRjaFJhbmdlID0gcmFuZ2VzW25vZGUuZXhwcmVzc2lvbl07CiAgICAgIGlmIChzd2l0Y2hSYW5nZSAhPSBudWxsICYmCiAgICAgICAgICBzd2l0Y2hSYW5nZS5sb3dlciBpcyBJbnRWYWx1ZSAmJgogICAgICAgICAgc3dpdGNoUmFuZ2UudXBwZXIgaXMgSW50VmFsdWUpIHsKICAgICAgICBJbnRWYWx1ZSBsb3dlclZhbHVlID0gc3dpdGNoUmFuZ2UubG93ZXI7CiAgICAgICAgSW50VmFsdWUgdXBwZXJWYWx1ZSA9IHN3aXRjaFJhbmdlLnVwcGVyOwogICAgICAgIEJpZ0ludCBsb3dlciA9IGxvd2VyVmFsdWUudmFsdWU7CiAgICAgICAgQmlnSW50IHVwcGVyID0gdXBwZXJWYWx1ZS52YWx1ZTsKICAgICAgICBTZXQ8QmlnSW50PiBsaXZlTGFiZWxzID0gbmV3IFNldDxCaWdJbnQ+KCk7CiAgICAgICAgZm9yIChpbnQgcG9zID0gMTsgcG9zIDwgbm9kZS5pbnB1dHMubGVuZ3RoOyBwb3MrKykgewogICAgICAgICAgSENvbnN0YW50IGlucHV0ID0gbm9kZS5pbnB1dHNbcG9zXTsKICAgICAgICAgIGlmICghaW5wdXQuaXNDb25zdGFudEludGVnZXIoKSkgY29udGludWU7CiAgICAgICAgICBJbnRDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gaW5wdXQuY29uc3RhbnQ7CiAgICAgICAgICBCaWdJbnQgbGFiZWwgPSBjb25zdGFudC5pbnRWYWx1ZTsKICAgICAgICAgIGlmICghbGl2ZUxhYmVscy5jb250YWlucyhsYWJlbCkgJiYgbGFiZWwgPD0gdXBwZXIgJiYgbGFiZWwgPj0gbG93ZXIpIHsKICAgICAgICAgICAgbWFya0Jsb2NrTGl2ZShub2RlLmJsb2NrLnN1Y2Nlc3NvcnNbcG9zIC0gMV0pOwogICAgICAgICAgICBsaXZlTGFiZWxzLmFkZChsYWJlbCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChuZXcgQmlnSW50LmZyb20obGl2ZUxhYmVscy5sZW5ndGgpICE9IHVwcGVyIC0gbG93ZXIgKyBCaWdJbnQub25lKSB7CiAgICAgICAgICBtYXJrQmxvY2tMaXZlKG5vZGUuZGVmYXVsdFRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICB9Cn0KCmNsYXNzIFNzYURlYWRQaGlFbGltaW5hdG9yIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gIlNzYURlYWRQaGlFbGltaW5hdG9yIjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgZmluYWwgTGlzdDxIUGhpPiB3b3JrbGlzdCA9IDxIUGhpPltdOwogICAgLy8gQSBzZXQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbGl2ZSBwaGlzIHRoYXQgd2UgZm91bmQuCiAgICBmaW5hbCBTZXQ8SFBoaT4gbGl2ZVBoaXMgPSBuZXcgU2V0PEhQaGk+KCk7CgogICAgLy8gQWRkIHRvIHRoZSB3b3JrbGlzdCBhbGwgbGl2ZSBwaGlzOiBwaGlzIHJlZmVyZW5jZWQgYnkgbm9uLXBoaQogICAgLy8gaW5zdHJ1Y3Rpb25zLgogICAgZm9yIChmaW5hbCBibG9jayBpbiBncmFwaC5ibG9ja3MpIHsKICAgICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgICBmb3IgKGZpbmFsIHVzZXIgaW4gcGhpLnVzZWRCeSkgewogICAgICAgICAgaWYgKHVzZXIgaXMhIEhQaGkpIHsKICAgICAgICAgICAgd29ya2xpc3QuYWRkKHBoaSk7CiAgICAgICAgICAgIGxpdmVQaGlzLmFkZChwaGkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIC8vIFByb2Nlc3MgdGhlIHdvcmtsaXN0IGJ5IHByb3BhZ2F0aW5nIGxpdmVuZXNzIHRvIHBoaSBpbnB1dHMuCiAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkpIHsKICAgICAgSFBoaSBwaGkgPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGZvciAoZmluYWwgaW5wdXQgaW4gcGhpLmlucHV0cykgewogICAgICAgIGlmIChpbnB1dCBpcyBIUGhpICYmICFsaXZlUGhpcy5jb250YWlucyhpbnB1dCkpIHsKICAgICAgICAgIHdvcmtsaXN0LmFkZChpbnB1dCk7CiAgICAgICAgICBsaXZlUGhpcy5hZGQoaW5wdXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFJlbW92ZSBwaGlzIHRoYXQgYXJlIG5vdCBsaXZlLgogICAgLy8gVHJhdmVyc2UgaW4gcmV2ZXJzZSBvcmRlciB0byByZW1vdmUgcGhpcyB3aXRoIG5vIHVzZXMgYmVmb3JlIHRoZQogICAgLy8gcGhpcyB0aGF0IHRoZXkgbWlnaHQgdXNlLgogICAgLy8gTk9USUNFOiBEb2Vzbid0IGhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzLCBidXQgd2UgZG9uJ3QgY3VycmVudGx5CiAgICAvLyBjcmVhdGUgYW55LgogICAgTGlzdDxIQmFzaWNCbG9jaz4gYmxvY2tzID0gZ3JhcGguYmxvY2tzOwogICAgZm9yIChpbnQgaSA9IGJsb2Nrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGJsb2Nrc1tpXTsKICAgICAgSFBoaSBjdXJyZW50ID0gYmxvY2sucGhpcy5maXJzdDsKICAgICAgSFBoaSBuZXh0ID0gbnVsbDsKICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICAgIG5leHQgPSBjdXJyZW50Lm5leHQ7CiAgICAgICAgaWYgKCFsaXZlUGhpcy5jb250YWlucyhjdXJyZW50KQogICAgICAgICAgICAvLyBUT0RPKGFoZSk6IE5vdCBzdXJlIHRoZSBmb2xsb3dpbmcgaXMgY29ycmVjdC4KICAgICAgICAgICAgJiYKICAgICAgICAgICAgY3VycmVudC51c2VkQnkuaXNFbXB0eSkgewogICAgICAgICAgYmxvY2sucmVtb3ZlUGhpKGN1cnJlbnQpOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gbmV4dDsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgU3NhUmVkdW5kYW50UGhpRWxpbWluYXRvciBpbXBsZW1lbnRzIE9wdGltaXphdGlvblBoYXNlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICJTc2FSZWR1bmRhbnRQaGlFbGltaW5hdG9yIjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgZmluYWwgTGlzdDxIUGhpPiB3b3JrbGlzdCA9IDxIUGhpPltdOwoKICAgIC8vIEFkZCBhbGwgcGhpcyBpbiB0aGUgd29ya2xpc3QuCiAgICBmb3IgKGZpbmFsIGJsb2NrIGluIGdyYXBoLmJsb2NrcykgewogICAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgPT4gd29ya2xpc3QuYWRkKHBoaSkpOwogICAgfQoKICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSkgewogICAgICBIUGhpIHBoaSA9IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKCiAgICAgIC8vIElmIHRoZSBwaGkgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQsIGNvbnRpbnVlLgogICAgICBpZiAoIXBoaS5pc0luQmFzaWNCbG9jaygpKSBjb250aW51ZTsKCiAgICAgIC8vIEZpbmQgaWYgdGhlIGlucHV0cyBvZiB0aGUgcGhpIGFyZSB0aGUgc2FtZSBpbnN0cnVjdGlvbi4KICAgICAgLy8gVGhlIGJ1aWxkZXIgZW5zdXJlcyB0aGF0IHBoaS5pbnB1dHNbMF0gY2Fubm90IGJlIHRoZSBwaGkKICAgICAgLy8gaXRzZWxmLgogICAgICBhc3NlcnQoIWlkZW50aWNhbChwaGkuaW5wdXRzWzBdLCBwaGkpKTsKICAgICAgSEluc3RydWN0aW9uIGNhbmRpZGF0ZSA9IHBoaS5pbnB1dHNbMF07CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IHBoaS5pbnB1dHNbaV07CiAgICAgICAgLy8gSWYgdGhlIGlucHV0IGlzIHRoZSBwaGksIHRoZSBwaGkgaXMgc3RpbGwgY2FuZGlkYXRlIGZvcgogICAgICAgIC8vIGVsaW1pbmF0aW9uLgogICAgICAgIGlmICghaWRlbnRpY2FsKGlucHV0LCBjYW5kaWRhdGUpICYmICFpZGVudGljYWwoaW5wdXQsIHBoaSkpIHsKICAgICAgICAgIGNhbmRpZGF0ZSA9IG51bGw7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIElmIHRoZSBpbnB1dHMgYXJlIG5vdCB0aGUgc2FtZSwgY29udGludWUuCiAgICAgIGlmIChjYW5kaWRhdGUgPT0gbnVsbCkgY29udGludWU7CgogICAgICAvLyBCZWNhdXNlIHdlJ3JlIHVwZGF0aW5nIHRoZSB1c2VycyBvZiB0aGlzIHBoaSwgd2UgbWF5IGhhdmUgbmV3CiAgICAgIC8vIHBoaXMgY2FuZGlkYXRlIGZvciBlbGltaW5hdGlvbi4gQWRkIHBoaXMgdGhhdCB1c2VkIHRoaXMgcGhpCiAgICAgIC8vIHRvIHRoZSB3b3JrbGlzdC4KICAgICAgZm9yIChmaW5hbCB1c2VyIGluIHBoaS51c2VkQnkpIHsKICAgICAgICBpZiAodXNlciBpcyBIUGhpKSB3b3JrbGlzdC5hZGQodXNlcik7CiAgICAgIH0KICAgICAgcGhpLmJsb2NrLnJld3JpdGUocGhpLCBjYW5kaWRhdGUpOwogICAgICBwaGkuYmxvY2sucmVtb3ZlUGhpKHBoaSk7CiAgICAgIGlmIChjYW5kaWRhdGUuc291cmNlRWxlbWVudCA9PSBudWxsICYmCiAgICAgICAgICBwaGkuc291cmNlRWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgICBjYW5kaWRhdGUgaXMhIEhUaGlzKSB7CiAgICAgICAgY2FuZGlkYXRlLnNvdXJjZUVsZW1lbnQgPSBwaGkuc291cmNlRWxlbWVudDsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgR3ZuV29ya0l0ZW0gewogIGZpbmFsIEhCYXNpY0Jsb2NrIGJsb2NrOwogIGZpbmFsIFZhbHVlU2V0IHZhbHVlU2V0OwogIEd2bldvcmtJdGVtKHRoaXMuYmxvY2ssIHRoaXMudmFsdWVTZXQpOwp9CgpjbGFzcyBTc2FHbG9iYWxWYWx1ZU51bWJlcmVyIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIGZpbmFsIEFic3RyYWN0VmFsdWVEb21haW4gX2Fic3RyYWN0VmFsdWVEb21haW47CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhR2xvYmFsVmFsdWVOdW1iZXJlciI7CiAgZmluYWwgU2V0PGludD4gdmlzaXRlZDsKCiAgTGlzdDxpbnQ+IGJsb2NrQ2hhbmdlc0ZsYWdzOwogIExpc3Q8aW50PiBsb29wQ2hhbmdlc0ZsYWdzOwoKICBTc2FHbG9iYWxWYWx1ZU51bWJlcmVyKHRoaXMuX2Fic3RyYWN0VmFsdWVEb21haW4pIDogdmlzaXRlZCA9IG5ldyBTZXQ8aW50PigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICBjb21wdXRlQ2hhbmdlc0ZsYWdzKGdyYXBoKTsKICAgIG1vdmVMb29wSW52YXJpYW50Q29kZShncmFwaCk7CiAgICBMaXN0PEd2bldvcmtJdGVtPiB3b3JrUXVldWUgPSA8R3ZuV29ya0l0ZW0+WwogICAgICBuZXcgR3ZuV29ya0l0ZW0oZ3JhcGguZW50cnksIG5ldyBWYWx1ZVNldCgpKQogICAgXTsKICAgIGRvIHsKICAgICAgR3ZuV29ya0l0ZW0gaXRlbSA9IHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CiAgICAgIHZpc2l0QmFzaWNCbG9jayhpdGVtLmJsb2NrLCBpdGVtLnZhbHVlU2V0LCB3b3JrUXVldWUpOwogICAgfSB3aGlsZSAoIXdvcmtRdWV1ZS5pc0VtcHR5KTsKICB9CgogIHZvaWQgbW92ZUxvb3BJbnZhcmlhbnRDb2RlKEhHcmFwaCBncmFwaCkgewogICAgZm9yIChpbnQgaSA9IGdyYXBoLmJsb2Nrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGdyYXBoLmJsb2Nrc1tpXTsKICAgICAgaWYgKGJsb2NrLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgICAgaW50IGNoYW5nZXNGbGFncyA9IGxvb3BDaGFuZ2VzRmxhZ3NbYmxvY2suaWRdOwogICAgICAgIEhMb29wSW5mb3JtYXRpb24gaW5mbyA9IGJsb2NrLmxvb3BJbmZvcm1hdGlvbjsKICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGJsb2NrcyBvZiB0aGlzIGxvb3AuIE5vdGUgdGhhdCBibG9ja3MgaW4KICAgICAgICAvLyBpbm5lciBsb29wcyBhcmUgbm90IHZpc2l0ZWQgaGVyZSwgYnV0IHdlIGtub3cgdGhleQogICAgICAgIC8vIHdlcmUgdmlzaXRlZCBiZWZvcmUgYmVjYXVzZSB3ZSBhcmUgaXRlcmF0aW5nIGluIHBvc3Qtb3JkZXIuCiAgICAgICAgLy8gU28gaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIEdWTidlZCBpbiBhbiBpbm5lciBsb29wIGFyZSBpbiB0aGVpcgogICAgICAgIC8vIGxvb3AgZW50cnksIGFuZCBbaW5mby5ibG9ja3NdIGNvbnRhaW5zIHRoaXMgbG9vcCBlbnRyeS4KICAgICAgICBtb3ZlTG9vcEludmFyaWFudENvZGVGcm9tQmxvY2soYmxvY2ssIGJsb2NrLCBjaGFuZ2VzRmxhZ3MpOwogICAgICAgIGZvciAoSEJhc2ljQmxvY2sgb3RoZXIgaW4gaW5mby5ibG9ja3MpIHsKICAgICAgICAgIG1vdmVMb29wSW52YXJpYW50Q29kZUZyb21CbG9jayhvdGhlciwgYmxvY2ssIGNoYW5nZXNGbGFncyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIG1vdmVMb29wSW52YXJpYW50Q29kZUZyb21CbG9jaygKICAgICAgSEJhc2ljQmxvY2sgYmxvY2ssIEhCYXNpY0Jsb2NrIGxvb3BIZWFkZXIsIGludCBjaGFuZ2VzRmxhZ3MpIHsKICAgIGFzc2VydChibG9jay5wYXJlbnRMb29wSGVhZGVyID09IGxvb3BIZWFkZXIgfHwgYmxvY2sgPT0gbG9vcEhlYWRlcik7CiAgICBIQmFzaWNCbG9jayBwcmVoZWFkZXIgPSBsb29wSGVhZGVyLnByZWRlY2Vzc29yc1swXTsKICAgIGludCBkZXBlbmRzRmxhZ3MgPSBTaWRlRWZmZWN0cy5jb21wdXRlRGVwZW5kc09uRmxhZ3MoY2hhbmdlc0ZsYWdzKTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgYm9vbCBpc0xvb3BBbHdheXNUYWtlbigpIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbG9vcEhlYWRlci5sYXN0OwogICAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMgSEdvdG8gfHwgaW5zdHJ1Y3Rpb24gaXMgSExvb3BCcmFuY2gpOwogICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gaXMgSEdvdG8gfHwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzBdLmlzQ29uc3RhbnRUcnVlKCk7CiAgICB9CgogICAgYm9vbCBmaXJzdEluc3RydWN0aW9uSW5Mb29wID0gYmxvY2sgPT0gbG9vcEhlYWRlcgogICAgICAgIC8vIENvbXBlbnNhdGUgZm9yIGxhY2sgb2YgY29kZSBtb3Rpb24uCiAgICAgICAgfHwKICAgICAgICAoYmxvY2tDaGFuZ2VzRmxhZ3NbbG9vcEhlYWRlci5pZF0gPT0gMCAmJgogICAgICAgICAgICBpc0xvb3BBbHdheXNUYWtlbigpICYmCiAgICAgICAgICAgIGxvb3BIZWFkZXIuc3VjY2Vzc29yc1swXSA9PSBibG9jayk7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGlmIChpbnN0cnVjdGlvbi51c2VHdm4oKSAmJgogICAgICAgICAgaW5zdHJ1Y3Rpb24uaXNNb3ZhYmxlICYmCiAgICAgICAgICAoIWluc3RydWN0aW9uLmNhblRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluKSB8fAogICAgICAgICAgICAgIGZpcnN0SW5zdHJ1Y3Rpb25Jbkxvb3ApICYmCiAgICAgICAgICAhaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZGVwZW5kc09uKGRlcGVuZHNGbGFncykpIHsKICAgICAgICBib29sIGxvb3BJbnZhcmlhbnRJbnB1dHMgPSB0cnVlOwogICAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSBpbnN0cnVjdGlvbi5pbnB1dHM7CiAgICAgICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGlucHV0cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKGlzSW5wdXREZWZpbmVkQWZ0ZXJEb21pbmF0b3IoaW5wdXRzW2ldLCBwcmVoZWFkZXIpKSB7CiAgICAgICAgICAgIGxvb3BJbnZhcmlhbnRJbnB1dHMgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGUgaW5wdXRzIGFyZSBsb29wIGludmFyaWFudCwgd2UgY2FuIG1vdmUgdGhlCiAgICAgICAgLy8gaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgY3VycmVudCBibG9jayB0byB0aGUgcHJlLWhlYWRlciBibG9jay4KICAgICAgICBpZiAobG9vcEludmFyaWFudElucHV0cykgewogICAgICAgICAgYmxvY2suZGV0YWNoKGluc3RydWN0aW9uKTsKICAgICAgICAgIHByZWhlYWRlci5tb3ZlQXRFeGl0KGluc3RydWN0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmlyc3RJbnN0cnVjdGlvbkluTG9vcCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnQgb2xkQ2hhbmdlc0ZsYWdzID0gY2hhbmdlc0ZsYWdzOwogICAgICBjaGFuZ2VzRmxhZ3MgfD0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZ2V0Q2hhbmdlc0ZsYWdzKCk7CiAgICAgIGlmIChvbGRDaGFuZ2VzRmxhZ3MgIT0gY2hhbmdlc0ZsYWdzKSB7CiAgICAgICAgZGVwZW5kc0ZsYWdzID0gU2lkZUVmZmVjdHMuY29tcHV0ZURlcGVuZHNPbkZsYWdzKGNoYW5nZXNGbGFncyk7CiAgICAgIH0KICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgYm9vbCBpc0lucHV0RGVmaW5lZEFmdGVyRG9taW5hdG9yKEhJbnN0cnVjdGlvbiBpbnB1dCwgSEJhc2ljQmxvY2sgZG9taW5hdG9yKSB7CiAgICByZXR1cm4gaW5wdXQuYmxvY2suaWQgPiBkb21pbmF0b3IuaWQ7CiAgfQoKICB2b2lkIHZpc2l0QmFzaWNCbG9jaygKICAgICAgSEJhc2ljQmxvY2sgYmxvY2ssIFZhbHVlU2V0IHZhbHVlcywgTGlzdDxHdm5Xb3JrSXRlbT4gd29ya1F1ZXVlKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIGlmIChibG9jay5pc0xvb3BIZWFkZXIoKSkgewogICAgICBpbnQgZmxhZ3MgPSBsb29wQ2hhbmdlc0ZsYWdzW2Jsb2NrLmlkXTsKICAgICAgdmFsdWVzLmtpbGwoZmxhZ3MpOwogICAgfQogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnQgZmxhZ3MgPSBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5nZXRDaGFuZ2VzRmxhZ3MoKTsKICAgICAgYXNzZXJ0KGZsYWdzID09IDAgfHwgIWluc3RydWN0aW9uLnVzZUd2bigpKTsKICAgICAgdmFsdWVzLmtpbGwoZmxhZ3MpOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24udXNlR3ZuKCkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gb3RoZXIgPSB2YWx1ZXMubG9va3VwKGluc3RydWN0aW9uKTsKICAgICAgICBpZiAob3RoZXIgIT0gbnVsbCkgewogICAgICAgICAgYXNzZXJ0KG90aGVyLmd2bkVxdWFscyhpbnN0cnVjdGlvbikgJiYgaW5zdHJ1Y3Rpb24uZ3ZuRXF1YWxzKG90aGVyKSk7CiAgICAgICAgICBibG9jay5yZXdyaXRlV2l0aEJldHRlclVzZXIoaW5zdHJ1Y3Rpb24sIG90aGVyKTsKICAgICAgICAgIGJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbHVlcy5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CgogICAgTGlzdDxIQmFzaWNCbG9jaz4gZG9taW5hdGVkQmxvY2tzID0gYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGRvbWluYXRlZEJsb2Nrcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBIQmFzaWNCbG9jayBkb21pbmF0ZWQgPSBkb21pbmF0ZWRCbG9ja3NbaV07CiAgICAgIC8vIE5vIG5lZWQgdG8gY29weSB0aGUgdmFsdWUgc2V0IGZvciB0aGUgbGFzdCBjaGlsZC4KICAgICAgVmFsdWVTZXQgc3VjY2Vzc29yVmFsdWVzID0gKGkgPT0gbGVuZ3RoIC0gMSkgPyB2YWx1ZXMgOiB2YWx1ZXMuY29weSgpOwogICAgICAvLyBJZiB3ZSBoYXZlIG5vIHZhbHVlcyBpbiBvdXIgc2V0LCB3ZSBkbyBub3QgaGF2ZSB0byBraWxsCiAgICAgIC8vIGFueXRoaW5nLiBBbHNvLCBpZiB0aGUgcmFuZ2Ugb2YgYmxvY2sgaWRzIGZyb20gdGhlIGN1cnJlbnQKICAgICAgLy8gYmxvY2sgdG8gdGhlIGRvbWluYXRlZCBibG9jayBpcyBlbXB0eSwgdGhlcmUgaXMgbm8gYmxvY2tzIG9uCiAgICAgIC8vIGFueSBwYXRoIGZyb20gdGhlIGN1cnJlbnQgYmxvY2sgdG8gdGhlIGRvbWluYXRlZCBibG9jayBzbyB3ZQogICAgICAvLyBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGVpdGhlci4KICAgICAgYXNzZXJ0KGJsb2NrLmlkIDwgZG9taW5hdGVkLmlkKTsKICAgICAgaWYgKCFzdWNjZXNzb3JWYWx1ZXMuaXNFbXB0eSAmJiBibG9jay5pZCArIDEgPCBkb21pbmF0ZWQuaWQpIHsKICAgICAgICB2aXNpdGVkLmNsZWFyKCk7CiAgICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gd29ya1F1ZXVlID0gPEhCYXNpY0Jsb2NrPltkb21pbmF0ZWRdOwogICAgICAgIGludCBjaGFuZ2VzRmxhZ3MgPSAwOwogICAgICAgIGRvIHsKICAgICAgICAgIEhCYXNpY0Jsb2NrIGN1cnJlbnQgPSB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogICAgICAgICAgY2hhbmdlc0ZsYWdzIHw9CiAgICAgICAgICAgICAgZ2V0Q2hhbmdlc0ZsYWdzRm9yRG9taW5hdGVkQmxvY2soYmxvY2ssIGN1cnJlbnQsIHdvcmtRdWV1ZSk7CiAgICAgICAgfSB3aGlsZSAoIXdvcmtRdWV1ZS5pc0VtcHR5KTsKICAgICAgICBzdWNjZXNzb3JWYWx1ZXMua2lsbChjaGFuZ2VzRmxhZ3MpOwogICAgICB9CiAgICAgIHdvcmtRdWV1ZS5hZGQobmV3IEd2bldvcmtJdGVtKGRvbWluYXRlZCwgc3VjY2Vzc29yVmFsdWVzKSk7CiAgICB9CiAgfQoKICB2b2lkIGNvbXB1dGVDaGFuZ2VzRmxhZ3MoSEdyYXBoIGdyYXBoKSB7CiAgICAvLyBDcmVhdGUgdGhlIGNoYW5nZXMgZmxhZ3MgbGlzdHMuIE1ha2Ugc3VyZSB0byBpbml0aWFsaXplIHRoZQogICAgLy8gbG9vcCBjaGFuZ2VzIGZsYWdzIGxpc3QgdG8gemVybyBzbyB3ZSBjYW4gdXNlIGJpdHdpc2Ugb3Igd2hlbgogICAgLy8gcHJvcGFnYXRpbmcgbG9vcCBjaGFuZ2VzIHVwd2FyZHMuCiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gZ3JhcGguYmxvY2tzLmxlbmd0aDsKICAgIGJsb2NrQ2hhbmdlc0ZsYWdzID0gbmV3IExpc3Q8aW50PihsZW5ndGgpOwogICAgbG9vcENoYW5nZXNGbGFncyA9IG5ldyBMaXN0PGludD4obGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIGxvb3BDaGFuZ2VzRmxhZ3NbaV0gPSAwOwoKICAgIC8vIFJ1biB0aHJvdWdoIGFsbCB0aGUgYmFzaWMgYmxvY2tzIGluIHRoZSBncmFwaCBhbmQgZmlsbCBpbiB0aGUKICAgIC8vIGNoYW5nZXMgZmxhZ3MgbGlzdHMuCiAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgZmluYWwgSEJhc2ljQmxvY2sgYmxvY2sgPSBncmFwaC5ibG9ja3NbaV07CiAgICAgIGZpbmFsIGludCBpZCA9IGJsb2NrLmlkOwoKICAgICAgLy8gQ29tcHV0ZSBibG9jayBjaGFuZ2VzIGZsYWdzIGZvciB0aGUgYmxvY2suCiAgICAgIGludCBjaGFuZ2VzRmxhZ3MgPSAwOwogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgICBjaGFuZ2VzRmxhZ3MgfD0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZ2V0Q2hhbmdlc0ZsYWdzKCk7CiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICB9CiAgICAgIGFzc2VydChibG9ja0NoYW5nZXNGbGFnc1tpZF0gPT0gbnVsbCk7CiAgICAgIGJsb2NrQ2hhbmdlc0ZsYWdzW2lkXSA9IGNoYW5nZXNGbGFnczsKCiAgICAgIC8vIExvb3AgaGVhZGVycyBhcmUgcGFydCBvZiB0aGVpciBsb29wLCBzbyB1cGRhdGUgdGhlIGxvb3AKICAgICAgLy8gY2hhbmdlcyBmbGFncyBhY2NvcmRpbmdseS4KICAgICAgaWYgKGJsb2NrLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgICAgbG9vcENoYW5nZXNGbGFnc1tpZF0gfD0gY2hhbmdlc0ZsYWdzOwogICAgICB9CgogICAgICAvLyBQcm9wYWdhdGUgbG9vcCBjaGFuZ2VzIGZsYWdzIHVwd2FyZHMuCiAgICAgIEhCYXNpY0Jsb2NrIHBhcmVudExvb3BIZWFkZXIgPSBibG9jay5wYXJlbnRMb29wSGVhZGVyOwogICAgICBpZiAocGFyZW50TG9vcEhlYWRlciAhPSBudWxsKSB7CiAgICAgICAgbG9vcENoYW5nZXNGbGFnc1twYXJlbnRMb29wSGVhZGVyLmlkXSB8PQogICAgICAgICAgICAoYmxvY2suaXNMb29wSGVhZGVyKCkpID8gbG9vcENoYW5nZXNGbGFnc1tpZF0gOiBjaGFuZ2VzRmxhZ3M7CiAgICAgIH0KICAgIH0KICB9CgogIGludCBnZXRDaGFuZ2VzRmxhZ3NGb3JEb21pbmF0ZWRCbG9jayhIQmFzaWNCbG9jayBkb21pbmF0b3IsCiAgICAgIEhCYXNpY0Jsb2NrIGRvbWluYXRlZCwgTGlzdDxIQmFzaWNCbG9jaz4gd29ya1F1ZXVlKSB7CiAgICBpbnQgY2hhbmdlc0ZsYWdzID0gMDsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IHByZWRlY2Vzc29ycyA9IGRvbWluYXRlZC5wcmVkZWNlc3NvcnM7CiAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gcHJlZGVjZXNzb3JzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gcHJlZGVjZXNzb3JzW2ldOwogICAgICBpbnQgaWQgPSBibG9jay5pZDsKICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgcHJlZGVjZXNzb3IgYmxvY2sgaXMgb24gdGhlIHBhdGggZnJvbSB0aGUKICAgICAgLy8gZG9taW5hdG9yIHRvIHRoZSBkb21pbmF0ZWQsIGl0IG11c3QgaGF2ZSBhbiBpZCB0aGF0IGlzIGluIHRoZQogICAgICAvLyByYW5nZSBmcm9tIHRoZSBkb21pbmF0b3IgdG8gdGhlIGRvbWluYXRlZC4KICAgICAgaWYgKGRvbWluYXRvci5pZCA8IGlkICYmIGlkIDwgZG9taW5hdGVkLmlkICYmICF2aXNpdGVkLmNvbnRhaW5zKGlkKSkgewogICAgICAgIHZpc2l0ZWQuYWRkKGlkKTsKICAgICAgICBjaGFuZ2VzRmxhZ3MgfD0gYmxvY2tDaGFuZ2VzRmxhZ3NbaWRdOwogICAgICAgIC8vIExvb3AgYm9kaWVzIG1pZ2h0IG5vdCBiZSBvbiB0aGUgcGF0aCBmcm9tIGRvbWluYXRvciB0byBkb21pbmF0ZWQsCiAgICAgICAgLy8gYnV0IHRoZXkgY2FuIGludmFsaWRhdGUgdmFsdWVzLgogICAgICAgIGNoYW5nZXNGbGFncyB8PSBsb29wQ2hhbmdlc0ZsYWdzW2lkXTsKICAgICAgICB3b3JrUXVldWUuYWRkKGJsb2NrKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNoYW5nZXNGbGFnczsKICB9Cn0KCi8vIFRoaXMgcGhhc2UgbWVyZ2VzIGVxdWl2YWxlbnQgaW5zdHJ1Y3Rpb25zIG9uIGRpZmZlcmVudCBwYXRocyBpbnRvCi8vIG9uZSBpbnN0cnVjdGlvbiBpbiBhIGRvbWluYXRvciBibG9jay4gSXQgcnVucyB0aHJvdWdoIHRoZSBncmFwaAovLyBwb3N0IGRvbWluYXRvciBvcmRlciBhbmQgY29tcHV0ZXMgYSBWYWx1ZVNldCBmb3IgZWFjaCBibG9jayBvZgovLyBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gYmUgbW92ZWQgdG8gYSBkb21pbmF0b3IgYmxvY2suIFRoZXNlCi8vIGluc3RydWN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdDoKLy8gMSkgY2FuIGJlIHVzZWQgZm9yIEdWTiwgYW5kCi8vIDIpIGRvIG5vdCB1c2UgZGVmaW5pdGlvbnMgb2YgdGhlaXIgb3duIGJsb2NrLgovLwovLyBBIGJhc2ljIGJsb2NrIGxvb2tzIGF0IGl0cyBzdWNlc3NvcnMgYW5kIGZpbmRzIHRoZSBpbnRlcnNlY3Rpb24gb2YKLy8gdGhlc2UgY29tcHV0ZWQgVmFsdWVTZXQuIEl0IG1vdmVzIGFsbCBpbnN0cnVjdGlvbnMgb2YgdGhlCi8vIGludGVyc2VjdGlvbiBpbnRvIGl0cyBvd24gbGlzdCBvZiBpbnN0cnVjdGlvbnMuCmNsYXNzIFNzYUNvZGVNb3Rpb24gZXh0ZW5kcyBIQmFzZVZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZURvbWFpbiBfYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhQ29kZU1vdGlvbiI7CgogIGJvb2wgbW92ZWRDb2RlID0gZmFsc2U7CiAgTGlzdDxWYWx1ZVNldD4gdmFsdWVzOwoKICBTc2FDb2RlTW90aW9uKHRoaXMuX2Fic3RyYWN0VmFsdWVEb21haW4pOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2YWx1ZXMgPSBuZXcgTGlzdDxWYWx1ZVNldD4oZ3JhcGguYmxvY2tzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyYXBoLmJsb2Nrcy5sZW5ndGg7IGkrKykgewogICAgICB2YWx1ZXNbZ3JhcGguYmxvY2tzW2ldLmlkXSA9IG5ldyBWYWx1ZVNldCgpOwogICAgfQogICAgdmlzaXRQb3N0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgTGlzdDxIQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyA9IGJsb2NrLnN1Y2Nlc3NvcnM7CgogICAgLy8gUGhhc2UgMTogZ2V0IHRoZSBWYWx1ZVNldCBvZiBhbGwgc3VjY2Vzc29ycyAoaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUpLAogICAgLy8gY29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIGFuZCBtb3ZlIHRoZSBpbnN0cnVjdGlvbnMgb2YgdGhlIGludGVyc2VjdGlvbgogICAgLy8gaW50byB0aGlzIGJsb2NrLgogICAgaWYgKHN1Y2Nlc3NvcnMubGVuZ3RoID4gMSkgewogICAgICBWYWx1ZVNldCBpbnN0cnVjdGlvbnMgPSB2YWx1ZXNbc3VjY2Vzc29yc1swXS5pZF07CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc3VjY2Vzc29ycy5sZW5ndGg7IGkrKykgewogICAgICAgIFZhbHVlU2V0IG90aGVyID0gdmFsdWVzW3N1Y2Nlc3NvcnNbaV0uaWRdOwogICAgICAgIGluc3RydWN0aW9ucyA9IGluc3RydWN0aW9ucy5pbnRlcnNlY3Rpb24ob3RoZXIpOwogICAgICB9CgogICAgICBpZiAoIWluc3RydWN0aW9ucy5pc0VtcHR5KSB7CiAgICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGxpc3QgPSBpbnN0cnVjdGlvbnMudG9MaXN0KCk7CiAgICAgICAgLy8gU29ydCBieSBpbnN0cnVjdGlvbiAnaWQnIGZvciBtb3JlIHN0YWJsZSBvcmRlcmluZyB1bmRlciBjaGFuZ2VzIHRvCiAgICAgICAgLy8gdW5yZWxhdGVkIHNvdXJjZSBjb2RlLiAnaWQnIGlzIGEgZnVuY3Rpb24gb2YgdGhlIG9wZXJhdGlvbnMgb2YKICAgICAgICAvLyBjb21waWxpbmcgdGhlIGN1cnJlbnQgbWV0aG9kLCB3aGVyZWFzIHRoZSBWYWx1ZVNldCBvcmRlciBpcyBkZXBlbmRlbnQKICAgICAgICAvLyBoYXNoQ29kZXMgdGhhdCBhcmUgYSBmdW5jdGlvbiBvZiB0aGUgd2hvbGUgcHJvZ3JhbS4KICAgICAgICBsaXN0LnNvcnQoKGluc24xLCBpbnNuMikgPT4gaW5zbjEuaWQuY29tcGFyZVRvKGluc24yLmlkKSk7CiAgICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gaW4gbGlzdCkgewogICAgICAgICAgLy8gTW92ZSB0aGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIGN1cnJlbnQgYmxvY2suCiAgICAgICAgICBpbnN0cnVjdGlvbi5ibG9jay5kZXRhY2goaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgYmxvY2subW92ZUF0RXhpdChpbnN0cnVjdGlvbik7CiAgICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCBzdWNjZXNzb3JzIGFuZCByZXdyaXRlIHRoZWlyIGluc3RydWN0aW9uCiAgICAgICAgICAvLyB0byB0aGUgc2hhcmVkIG9uZS4KICAgICAgICAgIGZvciAoZmluYWwgc3VjY2Vzc29yIGluIHN1Y2Nlc3NvcnMpIHsKICAgICAgICAgICAgSEluc3RydWN0aW9uIHRvUmV3cml0ZSA9IHZhbHVlc1tzdWNjZXNzb3IuaWRdLmxvb2t1cChpbnN0cnVjdGlvbik7CiAgICAgICAgICAgIGlmICh0b1Jld3JpdGUgIT0gaW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgICBzdWNjZXNzb3IucmV3cml0ZVdpdGhCZXR0ZXJVc2VyKHRvUmV3cml0ZSwgaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgICAgIHN1Y2Nlc3Nvci5yZW1vdmUodG9SZXdyaXRlKTsKICAgICAgICAgICAgICBtb3ZlZENvZGUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFRPRE8oc3JhKTogVGhlcmUgYXJlIHNvbWUgbm9uLWd2bi1hYmxlIGluc3RydWN0aW9ucyB0aGF0IHdlIGNvdWxkIG1vdmUsCiAgICAgIC8vIGUuZy4gYWxsb2NhdGlvbnMuIFdlIHNob3VsZCBwcm9iYWJseSBub3QgbW92ZSBpbnN0cnVjdGlvbnMgdGhhdCBjYW4KICAgICAgLy8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdyBzaW5jZSB0aGUgcmVwb3J0ZWQgbG9jYXRpb24gbWlnaHQgYmUgaW4KICAgICAgLy8gdGhlICd3cm9uZycgYnJhbmNoLgogICAgfQoKICAgIC8vIERvbid0IHRyeSB0byBtZXJnZSBpbnN0cnVjdGlvbnMgdG8gYSBkb21pbmF0b3IgaWYgd2UgaGF2ZQogICAgLy8gbXVsdGlwbGUgcHJlZGVjZXNzb3JzLgogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggIT0gMSkgcmV0dXJuOwoKICAgIC8vIFBoYXNlIDI6IEdvIHRocm91Z2ggYWxsIGluc3RydWN0aW9ucyBvZiB0aGlzIGJsb2NrIGFuZCBmaW5kCiAgICAvLyB3aGljaCBpbnN0cnVjdGlvbnMgY2FuIGJlIG1vdmVkIHRvIGEgZG9taW5hdG9yIGJsb2NrLgogICAgVmFsdWVTZXQgc2V0XyA9IHZhbHVlc1tibG9jay5pZF07CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIGludCBmbGFncyA9IDA7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBpbnQgZGVwZW5kc0ZsYWdzID0gU2lkZUVmZmVjdHMuY29tcHV0ZURlcGVuZHNPbkZsYWdzKGZsYWdzKTsKICAgICAgZmxhZ3MgfD0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZ2V0Q2hhbmdlc0ZsYWdzKCk7CgogICAgICBISW5zdHJ1Y3Rpb24gY3VycmVudCA9IGluc3RydWN0aW9uOwogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGlmICghY3VycmVudC51c2VHdm4oKSB8fCAhY3VycmVudC5pc01vdmFibGUpIGNvbnRpbnVlOwogICAgICAvLyBUT0RPKHNyYSk6IFdlIGNvdWxkIG1vdmUgdGhyb3dpbmcgaW5zdHJ1Y3Rpb25zIHByb3ZpZGVkIHdlIGtlZXAgdGhlCiAgICAgIC8vIGV4Y2VwdGlvbnMgaW4gdGhlIHNhbWUgb3JkZXIuICBUaGlzIHJlcXVpcmVzIHRoZXkgYXJlIGluIHRoZSBzYW1lIG9yZGVyCiAgICAgIC8vIGluIGFsbCBzdWNjZXNzb3JzLCB3aGljaCBpcyBub3QgdHJhY2tlZCBieSB0aGUgVmFsdWVTZXQuCiAgICAgIGlmIChjdXJyZW50LmNhblRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluKSkgY29udGludWU7CiAgICAgIGlmIChjdXJyZW50LnNpZGVFZmZlY3RzLmRlcGVuZHNPbihkZXBlbmRzRmxhZ3MpKSBjb250aW51ZTsKCiAgICAgIGJvb2wgY2FuQmVNb3ZlZCA9IHRydWU7CiAgICAgIGZvciAoZmluYWwgSEluc3RydWN0aW9uIGlucHV0IGluIGN1cnJlbnQuaW5wdXRzKSB7CiAgICAgICAgaWYgKGlucHV0LmJsb2NrID09IGJsb2NrKSB7CiAgICAgICAgICBjYW5CZU1vdmVkID0gZmFsc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICAgIC8vIFRPRE8oc3JhKTogV2UgY291bGQgbW92ZSB0cmVlcyBvZiBpbnN0cnVjdGlvbnMgcHJvdmlkZWQgd2UgbW92ZSB0aGUKICAgICAgICAgIC8vIHJvb3RzIGJlZm9yZSB0aGUgbGVhdmVzLgogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWNhbkJlTW92ZWQpIGNvbnRpbnVlOwoKICAgICAgSEluc3RydWN0aW9uIGV4aXN0aW5nID0gc2V0Xy5sb29rdXAoY3VycmVudCk7CiAgICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7CiAgICAgICAgc2V0Xy5hZGQoY3VycmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2sucmV3cml0ZVdpdGhCZXR0ZXJVc2VyKGN1cnJlbnQsIGV4aXN0aW5nKTsKICAgICAgICBibG9jay5yZW1vdmUoY3VycmVudCk7CiAgICAgICAgbW92ZWRDb2RlID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgU3NhVHlwZUNvbnZlcnNpb25JbnNlcnRlciBleHRlbmRzIEhCYXNlVmlzaXRvcgogICAgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhVHlwZWNvbnZlcnNpb25JbnNlcnRlciI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwoKICBTc2FUeXBlQ29udmVyc2lvbkluc2VydGVyKHRoaXMuY2xvc2VkV29ybGQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgLy8gVXBkYXRlIHVzZXJzIG9mIFtpbnB1dF0gdGhhdCBhcmUgZG9taW5hdGVkIGJ5IFs6ZG9taW5hdG9yLmZpcnN0Ol0KICAvLyB0byB1c2UgW1R5cGVLbm93bl0gb2YgW2lucHV0XSBpbnN0ZWFkLiBBcyB0aGUgdHlwZSBpbmZvcm1hdGlvbiBkZXBlbmRzCiAgLy8gb24gdGhlIGNvbnRyb2wgZmxvdywgd2UgbWFyayB0aGUgaW5zZXJ0ZWQgW0hUeXBlS25vd25dIG5vZGVzIGFzCiAgLy8gbm9uLW1vdmFibGUuCiAgdm9pZCBpbnNlcnRUeXBlUHJvcGFnYXRpb25Gb3JEb21pbmF0ZWRVc2VycygKICAgICAgSEJhc2ljQmxvY2sgZG9taW5hdG9yLCBISW5zdHJ1Y3Rpb24gaW5wdXQsIEFic3RyYWN0VmFsdWUgY29udmVydGVkVHlwZSkgewogICAgRG9taW5hdGVkVXNlcyBkb21pbmF0ZWRVc2VzID0gRG9taW5hdGVkVXNlcy5vZihpbnB1dCwgZG9taW5hdG9yLmZpcnN0KTsKICAgIGlmIChkb21pbmF0ZWRVc2VzLmlzRW1wdHkpIHJldHVybjsKCiAgICAvLyBDaGVjayB0byBhdm9pZCBhZGRpbmcgYSBkdXBsaWNhdGUgSFR5cGVLbm93biBub2RlLgogICAgaWYgKGRvbWluYXRlZFVzZXMuaXNTaW5nbGV0b24pIHsKICAgICAgSEluc3RydWN0aW9uIHVzZXIgPSBkb21pbmF0ZWRVc2VzLnNpbmdsZTsKICAgICAgaWYgKHVzZXIgaXMgSFR5cGVLbm93biAmJgogICAgICAgICAgdXNlci5pc1Bpbm5lZCAmJgogICAgICAgICAgdXNlci5rbm93blR5cGUgPT0gY29udmVydGVkVHlwZSAmJgogICAgICAgICAgdXNlci5jaGVja2VkSW5wdXQgPT0gaW5wdXQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBIVHlwZUtub3duIG5ld0lucHV0ID0gbmV3IEhUeXBlS25vd24ucGlubmVkKGNvbnZlcnRlZFR5cGUsIGlucHV0KTsKICAgIGRvbWluYXRvci5hZGRCZWZvcmUoZG9taW5hdG9yLmZpcnN0LCBuZXdJbnB1dCk7CiAgICBkb21pbmF0ZWRVc2VzLnJlcGxhY2VXaXRoKG5ld0lucHV0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJcyhISXMgaW5zdHJ1Y3Rpb24pIHsKICAgIERhcnRUeXBlIHR5cGUgPSBpbnN0cnVjdGlvbi50eXBlRXhwcmVzc2lvbjsKICAgIGlmICghaW5zdHJ1Y3Rpb24uaXNSYXdDaGVjaykgewogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNUeXBlZGVmKSB7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAodHlwZS5pc0Z1dHVyZU9yKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CgogICAgTGlzdDxIQmFzaWNCbG9jaz4gdHJ1ZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CiAgICBMaXN0PEhCYXNpY0Jsb2NrPiBmYWxzZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CgogICAgY29sbGVjdFRhcmdldHMoaW5zdHJ1Y3Rpb24sIHRydWVUYXJnZXRzLCBmYWxzZVRhcmdldHMpOwoKICAgIGlmICh0cnVlVGFyZ2V0cy5pc0VtcHR5ICYmIGZhbHNlVGFyZ2V0cy5pc0VtcHR5KSByZXR1cm47CgogICAgQWJzdHJhY3RWYWx1ZSBjb252ZXJ0ZWRUeXBlID0KICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShjbHMpOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uZXhwcmVzc2lvbjsKCiAgICBmb3IgKEhCYXNpY0Jsb2NrIGJsb2NrIGluIHRydWVUYXJnZXRzKSB7CiAgICAgIGluc2VydFR5cGVQcm9wYWdhdGlvbkZvckRvbWluYXRlZFVzZXJzKGJsb2NrLCBpbnB1dCwgY29udmVydGVkVHlwZSk7CiAgICB9CiAgICAvLyBUT0RPKHNyYSk6IEFsc28gc3RyZW5ndGhlbiB1c2VzIGZvciB3aGVuIHRoZSBjb25kaXRpb24gaXMga25vd24KICAgIC8vIGZhbHNlLiBBdm9pZCBzdHJlbmd0aGVuaW5nIHRvIGBudWxsYC4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJc1Rlc3QoSElzVGVzdCBpbnN0cnVjdGlvbikgewogICAgTGlzdDxIQmFzaWNCbG9jaz4gdHJ1ZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CiAgICBMaXN0PEhCYXNpY0Jsb2NrPiBmYWxzZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CgogICAgY29sbGVjdFRhcmdldHMoaW5zdHJ1Y3Rpb24sIHRydWVUYXJnZXRzLCBmYWxzZVRhcmdldHMpOwoKICAgIGlmICh0cnVlVGFyZ2V0cy5pc0VtcHR5ICYmIGZhbHNlVGFyZ2V0cy5pc0VtcHR5KSByZXR1cm47CgogICAgQWJzdHJhY3RWYWx1ZSBjb252ZXJ0ZWRUeXBlID0KICAgICAgICBpbnN0cnVjdGlvbi5jaGVja2VkQWJzdHJhY3RWYWx1ZS5hYnN0cmFjdFZhbHVlOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0OwoKICAgIGZvciAoSEJhc2ljQmxvY2sgYmxvY2sgaW4gdHJ1ZVRhcmdldHMpIHsKICAgICAgaW5zZXJ0VHlwZVByb3BhZ2F0aW9uRm9yRG9taW5hdGVkVXNlcnMoYmxvY2ssIGlucHV0LCBjb252ZXJ0ZWRUeXBlKTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogQWxzbyBzdHJlbmd0aGVuIHVzZXMgZm9yIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBwcmVjaXNlIGFuZAogICAgLy8ga25vd24gZmFsc2UgKGUuZy4gaW50PyB4OyAuLi4gaWYgKHggaXMhIGludCkgdXNlKHgpKS4gQXZvaWQgc3RyZW5ndGhlbmluZwogICAgLy8gdG8gYG51bGxgLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElkZW50aXR5KEhJZGVudGl0eSBpbnN0cnVjdGlvbikgewogICAgLy8gQXQgSElmKEhJZGVudGl0eSh4LCBudWxsKSkgc3RyZW5ndGhlbnMgeCB0byBub24tbnVsbCBvbiBlbHNlIGJyYW5jaC4KICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24ubGVmdDsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLnJpZ2h0OwogICAgSEluc3RydWN0aW9uIGlucHV0OwoKICAgIGlmIChsZWZ0LmlzQ29uc3RhbnROdWxsKCkpIHsKICAgICAgaW5wdXQgPSByaWdodDsKICAgIH0gZWxzZSBpZiAocmlnaHQuaXNDb25zdGFudE51bGwoKSkgewogICAgICBpbnB1dCA9IGxlZnQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbChpbnB1dC5pbnN0cnVjdGlvblR5cGUpLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBMaXN0PEhCYXNpY0Jsb2NrPiB0cnVlVGFyZ2V0cyA9IDxIQmFzaWNCbG9jaz5bXTsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IGZhbHNlVGFyZ2V0cyA9IDxIQmFzaWNCbG9jaz5bXTsKCiAgICBjb2xsZWN0VGFyZ2V0cyhpbnN0cnVjdGlvbiwgdHJ1ZVRhcmdldHMsIGZhbHNlVGFyZ2V0cyk7CgogICAgaWYgKHRydWVUYXJnZXRzLmlzRW1wdHkgJiYgZmFsc2VUYXJnZXRzLmlzRW1wdHkpIHJldHVybjsKCiAgICBBYnN0cmFjdFZhbHVlIG5vbk51bGxUeXBlID0KICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChpbnB1dC5pbnN0cnVjdGlvblR5cGUpOwoKICAgIGZvciAoSEJhc2ljQmxvY2sgYmxvY2sgaW4gZmFsc2VUYXJnZXRzKSB7CiAgICAgIGluc2VydFR5cGVQcm9wYWdhdGlvbkZvckRvbWluYXRlZFVzZXJzKGJsb2NrLCBpbnB1dCwgbm9uTnVsbFR5cGUpOwogICAgfQogICAgLy8gV2UgZG9uJ3Qgc3RyZW5ndGhlbiB0aGUga25vd24tdHJ1ZSByZWZlcmVuY2VzLiBJdCBkb2Vzbid0IGhhcHBlbiBvZnRlbgogICAgLy8gYW5kIHdlIGRvbid0IHdhbnQgImlmICh4PT1udWxsKSByZXR1cm4geDsiIHRvIGNvbnZlcnQgYmV0d2VlbiBKYXZhU2NyaXB0CiAgICAvLyAnbnVsbCcgYW5kICd1bmRlZmluZWQnLgogIH0KCiAgY29sbGVjdFRhcmdldHMoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBMaXN0PEhCYXNpY0Jsb2NrPiB0cnVlVGFyZ2V0cywKICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gZmFsc2VUYXJnZXRzKSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIGluc3RydWN0aW9uLnVzZWRCeSkgewogICAgICBpZiAodXNlciBpcyBISWYpIHsKICAgICAgICB0cnVlVGFyZ2V0cz8uYWRkKHVzZXIudGhlbkJsb2NrKTsKICAgICAgICBmYWxzZVRhcmdldHM/LmFkZCh1c2VyLmVsc2VCbG9jayk7CiAgICAgIH0gZWxzZSBpZiAodXNlciBpcyBITG9vcEJyYW5jaCkgewogICAgICAgIHRydWVUYXJnZXRzPy5hZGQodXNlci5ibG9jay5zdWNjZXNzb3JzLmZpcnN0KTsKICAgICAgICAvLyBEb24ndCBpbnNlcnQgcmVmaW5lbWVudHMgb24gZWxzZS1icmFuY2ggLSBtYXkgYmUgYSBjcml0aWNhbCBlZGdlCiAgICAgICAgLy8gYmxvY2sgd2hpY2ggd2UgY3VycmVudGx5IG5lZWQgdG8ga2VlcCBlbXB0eSAoZXhjZXB0IGZvciBwaGlzKS4KICAgICAgfSBlbHNlIGlmICh1c2VyIGlzIEhOb3QpIHsKICAgICAgICBjb2xsZWN0VGFyZ2V0cyh1c2VyLCBmYWxzZVRhcmdldHMsIHRydWVUYXJnZXRzKTsKICAgICAgfSBlbHNlIGlmICh1c2VyIGlzIEhQaGkpIHsKICAgICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gdXNlci5pbnB1dHM7CiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT0gMikgewogICAgICAgICAgYXNzZXJ0KGlucHV0cy5jb250YWlucyhpbnN0cnVjdGlvbikpOwogICAgICAgICAgSEluc3RydWN0aW9uIG90aGVyID0gaW5wdXRzWyhpbnB1dHNbMF0gPT0gaW5zdHJ1Y3Rpb24pID8gMSA6IDBdOwogICAgICAgICAgaWYgKG90aGVyLmlzQ29uc3RhbnRUcnVlKCkpIHsKICAgICAgICAgICAgLy8gVGhlIGNvbmRpdGlvbiBmbG93cyB0byBhIEhQaGkodHJ1ZSwgdXNlciksIHdoaWNoIG1lYW5zIHRoYXQgYQogICAgICAgICAgICAvLyBkb3duc3RyZWFtIEhJZiBoYXMgdHJ1ZS1icmFuY2ggY29udHJvbCBmbG93IHRoYXQgZG9lcyBub3QgZGVwZW5kCiAgICAgICAgICAgIC8vIG9uIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiwgc28gc3RvcCBjb2xsZWN0aW5nIFt0cnVlVGFyZ2V0c10uCiAgICAgICAgICAgIGNvbGxlY3RUYXJnZXRzKHVzZXIsIG51bGwsIGZhbHNlVGFyZ2V0cyk7CiAgICAgICAgICB9IGVsc2UgaWYgKG90aGVyLmlzQ29uc3RhbnRGYWxzZSgpKSB7CiAgICAgICAgICAgIC8vIERpdHRvIGZvciBmYWxzZS4KICAgICAgICAgICAgY29sbGVjdFRhcmdldHModXNlciwgdHJ1ZVRhcmdldHMsIG51bGwpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKLy8vIE9wdGltaXphdGlvbiBwaGFzZSB0aGF0IHRyaWVzIHRvIGVsaW1pbmF0ZSBtZW1vcnkgbG9hZHMgKGZvciBleGFtcGxlCi8vLyBbSEZpZWxkR2V0XSksIHdoZW4gaXQga25vd3MgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGF0IG1lbW9yeSBsb2NhdGlvbiwgYW5kCi8vLyBzdG9yZXMgdGhhdCBvdmVyd3JpdGUgd2l0aCB0aGUgc2FtZSB2YWx1ZS4KY2xhc3MgU3NhTG9hZEVsaW1pbmF0aW9uIGV4dGVuZHMgSEJhc2VWaXNpdG9yIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgSkZpZWxkQW5hbHlzaXMgX2ZpZWxkQW5hbHlzaXM7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhTG9hZEVsaW1pbmF0aW9uIjsKICBNZW1vcnlTZXQgbWVtb3J5U2V0OwogIExpc3Q8TWVtb3J5U2V0PiBtZW1vcmllczsKICBib29sIG5ld0d2bkNhbmRpZGF0ZXMgPSBmYWxzZTsKICBIR3JhcGggX2dyYXBoOwoKICBTc2FMb2FkRWxpbWluYXRpb24odGhpcy5fY2xvc2VkV29ybGQpCiAgICAgIDogX2ZpZWxkQW5hbHlzaXMgPSBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpczsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIF9ncmFwaCA9IGdyYXBoOwogICAgbWVtb3JpZXMgPSBuZXcgTGlzdDxNZW1vcnlTZXQ+KGdyYXBoLmJsb2Nrcy5sZW5ndGgpOwogICAgTGlzdDxIQmFzaWNCbG9jaz4gYmxvY2tzID0gZ3JhcGguYmxvY2tzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja3MubGVuZ3RoOyBpKyspIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBibG9ja3NbaV07CiAgICAgIHZpc2l0QmFzaWNCbG9jayhibG9jayk7CiAgICAgIGlmIChibG9jay5zdWNjZXNzb3JzLmlzTm90RW1wdHkgJiYgYmxvY2suc3VjY2Vzc29yc1swXS5pc0xvb3BIZWFkZXIoKSkgewogICAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZGluZyBibG9jayBvZiBhIGxvb3AuIEl0ZXJhdGUgb3ZlciB0aGUKICAgICAgICAvLyBibG9ja3Mgb2YgdGhlIGxvb3AgYWdhaW4gdG8gdGFrZSB2YWx1ZXMgdGhhdCBmbG93IGZyb20gdGhhdAogICAgICAgIC8vIGVuZGluZyBibG9jayBpbnRvIGFjY291bnQuCiAgICAgICAgZm9yIChpbnQgaiA9IGJsb2NrLnN1Y2Nlc3NvcnNbMF0uaWQ7IGogPD0gYmxvY2suaWQ7IGorKykgewogICAgICAgICAgdmlzaXRCYXNpY0Jsb2NrKGJsb2Nrc1tqXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMCkgewogICAgICAvLyBFbnRyeSBibG9jay4KICAgICAgbWVtb3J5U2V0ID0gbmV3IE1lbW9yeVNldChfY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIGlmIChibG9jay5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDEgJiYKICAgICAgICBibG9jay5wcmVkZWNlc3NvcnNbMF0uc3VjY2Vzc29ycy5sZW5ndGggPT0gMSkgewogICAgICAvLyBObyBuZWVkIHRvIGNsb25lLCB0aGVyZSBpcyBubyBvdGhlciBzdWNjZXNzb3IgZm9yCiAgICAgIC8vIGBibG9jay5wcmVkZWNlc3NvcnNbMF1gLCBhbmQgdGhpcyBibG9jayBoYXMgb25seSBvbmUKICAgICAgLy8gcHJlZGVjZXNzb3IuIFNpbmNlIHdlIGFyZSBub3QgZ29pbmcgdG8gdmlzaXQKICAgICAgLy8gYGJsb2NrLnByZWRlY2Vzc29yc1swXWAgYWdhaW4sIHdlIGNhbiBqdXN0IHJlLXVzZSBpdHMKICAgICAgLy8gW21lbW9yeVNldF0uCiAgICAgIG1lbW9yeVNldCA9IG1lbW9yaWVzW2Jsb2NrLnByZWRlY2Vzc29yc1swXS5pZF07CiAgICB9IGVsc2UgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMSkgewogICAgICAvLyBDbG9uZSB0aGUgbWVtb3J5U2V0IG9mIHRoZSBwcmVkZWNlc3NvciwgYmVjYXVzZSBpdCBpcyBhbHNvIHVzZWQKICAgICAgLy8gYnkgb3RoZXIgc3VjY2Vzc29ycyBvZiBpdC4KICAgICAgbWVtb3J5U2V0ID0gbWVtb3JpZXNbYmxvY2sucHJlZGVjZXNzb3JzWzBdLmlkXS5jbG9uZSgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gQ29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIGFsbCBwcmVkZWNlc3NvcnMuCiAgICAgIG1lbW9yeVNldCA9IG1lbW9yaWVzW2Jsb2NrLnByZWRlY2Vzc29yc1swXS5pZF07CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYmxvY2sucHJlZGVjZXNzb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbWVtb3J5U2V0ID0gbWVtb3J5U2V0LmludGVyc2VjdGlvbkZvcigKICAgICAgICAgICAgbWVtb3JpZXNbYmxvY2sucHJlZGVjZXNzb3JzW2ldLmlkXSwgYmxvY2ssIGkpOwogICAgICB9CiAgICB9CgogICAgbWVtb3JpZXNbYmxvY2suaWRdID0gbWVtb3J5U2V0OwogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgdm9pZCBjaGVja05ld0d2bkNhbmRpZGF0ZXMoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24gZXhpc3RpbmcpIHsKICAgIGlmIChuZXdHdm5DYW5kaWRhdGVzKSByZXR1cm47CiAgICBib29sIGhhc1VzZUd2bihISW5zdHJ1Y3Rpb24gaW5zbikgPT4gaW5zbi5ub25DaGVjaygpLnVzZUd2bigpOwogICAgaWYgKGluc3RydWN0aW9uLnVzZWRCeS5hbnkoaGFzVXNlR3ZuKSAmJiBleGlzdGluZy51c2VkQnkuYW55KGhhc1VzZUd2bikpIHsKICAgICAgbmV3R3ZuQ2FuZGlkYXRlcyA9IHRydWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RmllbGRHZXQoSEZpZWxkR2V0IGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNOdWxsQ2hlY2spIHJldHVybjsKICAgIEZpZWxkRW50aXR5IGVsZW1lbnQgPSBpbnN0cnVjdGlvbi5lbGVtZW50OwogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0KICAgICAgICBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoX2Nsb3NlZFdvcmxkKS5ub25DaGVjaygpOwogICAgX3Zpc2l0RmllbGRHZXQoZWxlbWVudCwgcmVjZWl2ZXIsIGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHZXRMZW5ndGgoSEdldExlbmd0aCBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24ucmVjZWl2ZXIubm9uQ2hlY2soKTsKICAgIEhJbnN0cnVjdGlvbiBleGlzdGluZyA9CiAgICAgICAgbWVtb3J5U2V0Lmxvb2t1cEZpZWxkVmFsdWUoTWVtb3J5RmVhdHVyZS5sZW5ndGgsIHJlY2VpdmVyKTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIGNoZWNrTmV3R3ZuQ2FuZGlkYXRlcyhpbnN0cnVjdGlvbiwgZXhpc3RpbmcpOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZXdyaXRlV2l0aEJldHRlclVzZXIoaW5zdHJ1Y3Rpb24sIGV4aXN0aW5nKTsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIG1lbW9yeVNldC5yZWdpc3RlckZpZWxkVmFsdWUoTWVtb3J5RmVhdHVyZS5sZW5ndGgsIHJlY2VpdmVyLCBpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIF92aXNpdEZpZWxkR2V0KAogICAgICBGaWVsZEVudGl0eSBlbGVtZW50LCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGV4aXN0aW5nID0gbWVtb3J5U2V0Lmxvb2t1cEZpZWxkVmFsdWUoZWxlbWVudCwgcmVjZWl2ZXIpOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgY2hlY2tOZXdHdm5DYW5kaWRhdGVzKGluc3RydWN0aW9uLCBleGlzdGluZyk7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJld3JpdGVXaXRoQmV0dGVyVXNlcihpbnN0cnVjdGlvbiwgZXhpc3RpbmcpOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgbWVtb3J5U2V0LnJlZ2lzdGVyRmllbGRWYWx1ZShlbGVtZW50LCByZWNlaXZlciwgaW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZpZWxkU2V0KEhGaWVsZFNldCBpbnN0cnVjdGlvbikgewogICAgRmllbGRFbnRpdHkgZWxlbWVudCA9IGluc3RydWN0aW9uLmVsZW1lbnQ7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPQogICAgICAgIGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihfY2xvc2VkV29ybGQpLm5vbkNoZWNrKCk7CiAgICBpZiAobWVtb3J5U2V0LnJlZ2lzdGVyRmllbGRWYWx1ZVVwZGF0ZSgKICAgICAgICBlbGVtZW50LCByZWNlaXZlciwgaW5zdHJ1Y3Rpb24udmFsdWUpKSB7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q3JlYXRlKEhDcmVhdGUgaW5zdHJ1Y3Rpb24pIHsKICAgIG1lbW9yeVNldC5yZWdpc3RlckFsbG9jYXRpb24oaW5zdHJ1Y3Rpb24pOwogICAgaWYgKHNob3VsZFRyYWNrSW5pdGlhbFZhbHVlcyhpbnN0cnVjdGlvbikpIHsKICAgICAgaW50IGFyZ3VtZW50SW5kZXggPSAwOwogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbnN0YW5jZUZpZWxkKGluc3RydWN0aW9uLmVsZW1lbnQsCiAgICAgICAgICAoXywgRmllbGRFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKG1lbWJlcik7CiAgICAgICAgaWYgKGZpZWxkRGF0YS5pc0VsaWRlZCkgcmV0dXJuOwogICAgICAgIGlmIChmaWVsZERhdGEuaXNJbml0aWFsaXplZEluQWxsb2NhdG9yKSB7CiAgICAgICAgICAvLyBUT0RPKHNyYSk6IENhbiB3ZSBhdm9pZCBjYWxsaW5nIEhHcmFwaC5hZGRDb25zdGFudD8KICAgICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBmaWVsZERhdGEuaW5pdGlhbFZhbHVlOwogICAgICAgICAgSENvbnN0YW50IGNvbnN0YW50ID0gX2dyYXBoLmFkZENvbnN0YW50KHZhbHVlLCBfY2xvc2VkV29ybGQpOwogICAgICAgICAgbWVtb3J5U2V0LnJlZ2lzdGVyRmllbGRWYWx1ZShtZW1iZXIsIGluc3RydWN0aW9uLCBjb25zdGFudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lbW9yeVNldC5yZWdpc3RlckZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgbWVtYmVyLCBpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb24uaW5wdXRzW2FyZ3VtZW50SW5kZXgrK10pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICAvLyBJbiBjYXNlIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGFzIGlucHV0IG5vbi1lc2NhcGluZyBvYmplY3RzLCB3ZQogICAgLy8gbmVlZCB0byBtYXJrIHRoZXNlIG9iamVjdHMgYXMgZXNjYXBpbmcuCiAgICBtZW1vcnlTZXQua2lsbEFmZmVjdGVkQnkoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgYm9vbCBzaG91bGRUcmFja0luaXRpYWxWYWx1ZXMoSENyZWF0ZSBpbnN0cnVjdGlvbikgewogICAgLy8gRG9uJ3QgdHJhY2sgaW5pdGlhbCBmaWVsZCB2YWx1ZXMgb2YgYW4gYWxsb2NhdGlvbiB0aGF0IGFyZQogICAgLy8gdW5wcm9maXRhYmxlLiBXZSBzZWFyY2ggdGhlIGNoYWluIG9mIHNpbmdsZSB1c2VzIGluIGFsbG9jYXRpb25zIGZvciBhCiAgICAvLyBsaW1pdGVkIGRlcHRoLgoKICAgIGNvbnN0IE1BWF9IRUFQX0RFUFRIID0gNTsKCiAgICBib29sIGludGVyZXN0aW5nVXNlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW50IGhlYXBEZXB0aCkgewogICAgICAvLyBIZXVyaXN0aWM6IGlmIHRoZSBhbGxvY2F0aW9uIGlzIHRvbyBkZWVwIGluIGhlYXAgaXQgaXMgdW5saWtlbHkgd2Ugd2lsbAogICAgICAvLyByZWNvdmVyIGEgZmllbGQgYnkgbG9hZC1lbGltaW5hdGlvbi4KICAgICAgLy8gVE9ETyhzcmEpOiBXZSBjYW4gbWVhc3VyZSB0aGlzIGRlcHRoIGJ5IGxvb2tpbmcgYXQgbG9hZCBjaGFpbnMuCiAgICAgIGlmIChoZWFwRGVwdGggPT0gTUFYX0hFQVBfREVQVEgpIHJldHVybiBmYWxzZTsKICAgICAgLy8gVGhlcmUgYXJlIG11bHRpcGxlIHVzZXMgc28gZG8gdGhlIGZ1bGwgc3RvcmUgYW5hbHlzaXMuCiAgICAgIGlmIChpbnN0cnVjdGlvbi51c2VkQnkubGVuZ3RoICE9IDEpIHJldHVybiB0cnVlOwogICAgICBISW5zdHJ1Y3Rpb24gdXNlID0gaW5zdHJ1Y3Rpb24udXNlZEJ5LnNpbmdsZTsKICAgICAgLy8gV2hlbiB0aGUgb25seSB1c2UgaXMgYW4gYWxsb2NhdGlvbiwgdGhlIGFsbG9jYXRpb24gYmVjb21lcyB0aGUgb25seQogICAgICAvLyBoZWFwIGFsaWFzIGZvciB0aGUgY3VycmVudCBpbnN0cnVjdGlvbi4KICAgICAgaWYgKHVzZSBpcyBIQ3JlYXRlKSByZXR1cm4gaW50ZXJlc3RpbmdVc2UodXNlLCBoZWFwRGVwdGggKyAxKTsKICAgICAgaWYgKHVzZSBpcyBITGl0ZXJhbExpc3QpIHJldHVybiBpbnRlcmVzdGluZ1VzZSh1c2UsIGhlYXBEZXB0aCArIDEpOwogICAgICBpZiAodXNlIGlzIEhJbnZva2VTdGF0aWMpIHsKICAgICAgICAvLyBBc3N1bWUgdGhlIGFyZ3VtZW50IGVzY2FwZXMuIEFsbCB3ZSBkbyB3aXRoIG91ciBpbml0aWFsIGFsbG9jYXRpb24gaXMKICAgICAgICAvLyBoYXZlIGl0IGVzY2FwZSBvciBzdG9yZSBpdCBpbnRvIGFuIG9iamVjdCB0aGF0IGVzY2FwZXMuCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIC8vIFRPRE8oc3JhKTogSGFuZGxlIGxpYnJhcnkgZnVuY3Rpb25zIHRoYXQgd2Uga25vdyBkbyBub3QgbW9kaWZ5IG9yCiAgICAgICAgLy8gbGVhayB0aGUgaW5wdXRzLiBGb3IgZXhhbXBsZSBgc2V0UnVudGltZVR5cGVJbmZvYCBpcyB1c2VkIHRvIG1hcmsKICAgICAgICAvLyBsaXN0IGxpdGVyYWxzIHdpdGggdHlwZSBpbmZvcm1hdGlvbi4KICAgICAgfQogICAgICBpZiAodXNlIGlzIEhQaGkpIHsKICAgICAgICAvLyBUaGUgaW5pdGlhbCBhbGxvY2F0aW9uIChpdCdzIG9ubHkgYWxpYXMpIGdldHMgbWVyZ2VkIG91dCBvZiB0aGUgbW9kZWwKICAgICAgICAvLyBvZiB0aGUgaGVhcCBiZWZvcmUgbG9hZC4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGludGVyZXN0aW5nVXNlKGluc3RydWN0aW9uLCAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbi5pc0FsbG9jYXRpb24oX2Fic3RyYWN0VmFsdWVEb21haW4pKSB7CiAgICAgIG1lbW9yeVNldC5yZWdpc3RlckFsbG9jYXRpb24oaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgbWVtb3J5U2V0LmtpbGxBZmZlY3RlZEJ5KGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMYXp5U3RhdGljKEhMYXp5U3RhdGljIGluc3RydWN0aW9uKSB7CiAgICBGaWVsZEVudGl0eSBmaWVsZCA9IGluc3RydWN0aW9uLmVsZW1lbnQ7CiAgICBoYW5kbGVTdGF0aWNMb2FkKGZpZWxkLCBpbnN0cnVjdGlvbik7CiAgfQoKICB2b2lkIGhhbmRsZVN0YXRpY0xvYWQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGV4aXN0aW5nID0gbWVtb3J5U2V0Lmxvb2t1cEZpZWxkVmFsdWUoZWxlbWVudCwgbnVsbCk7CiAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICBjaGVja05ld0d2bkNhbmRpZGF0ZXMoaW5zdHJ1Y3Rpb24sIGV4aXN0aW5nKTsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmV3cml0ZVdpdGhCZXR0ZXJVc2VyKGluc3RydWN0aW9uLCBleGlzdGluZyk7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICBtZW1vcnlTZXQucmVnaXN0ZXJGaWVsZFZhbHVlKGVsZW1lbnQsIG51bGwsIGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWMoSFN0YXRpYyBpbnN0cnVjdGlvbikgewogICAgaGFuZGxlU3RhdGljTG9hZChpbnN0cnVjdGlvbi5lbGVtZW50LCBpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljU3RvcmUoSFN0YXRpY1N0b3JlIGluc3RydWN0aW9uKSB7CiAgICBpZiAobWVtb3J5U2V0LnJlZ2lzdGVyRmllbGRWYWx1ZVVwZGF0ZSgKICAgICAgICBpbnN0cnVjdGlvbi5lbGVtZW50LCBudWxsLCBpbnN0cnVjdGlvbi5pbnB1dHMubGFzdCkpIHsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsTGlzdChITGl0ZXJhbExpc3QgaW5zdHJ1Y3Rpb24pIHsKICAgIG1lbW9yeVNldC5yZWdpc3RlckFsbG9jYXRpb24oaW5zdHJ1Y3Rpb24pOwogICAgbWVtb3J5U2V0LmtpbGxBZmZlY3RlZEJ5KGluc3RydWN0aW9uKTsKICAgIC8vIFRPRE8oc3JhKTogU2V0IGluaXRpYWwga2V5ZWQgdmFsdWVzLgogICAgLy8gVE9ETyhzcmEpOiBTZXQgaW5pdGlhbCBsZW5ndGguCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXgoSEluZGV4IGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5yZWNlaXZlci5ub25DaGVjaygpOwogICAgSEluc3RydWN0aW9uIGV4aXN0aW5nID0KICAgICAgICBtZW1vcnlTZXQubG9va3VwS2V5ZWRWYWx1ZShyZWNlaXZlciwgaW5zdHJ1Y3Rpb24uaW5kZXgpOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgY2hlY2tOZXdHdm5DYW5kaWRhdGVzKGluc3RydWN0aW9uLCBleGlzdGluZyk7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJld3JpdGVXaXRoQmV0dGVyVXNlcihpbnN0cnVjdGlvbiwgZXhpc3RpbmcpOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgbWVtb3J5U2V0LnJlZ2lzdGVyS2V5ZWRWYWx1ZShyZWNlaXZlciwgaW5zdHJ1Y3Rpb24uaW5kZXgsIGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbmRleEFzc2lnbihISW5kZXhBc3NpZ24gaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLnJlY2VpdmVyLm5vbkNoZWNrKCk7CiAgICBtZW1vcnlTZXQucmVnaXN0ZXJLZXllZFZhbHVlVXBkYXRlKAogICAgICAgIHJlY2VpdmVyLCBpbnN0cnVjdGlvbi5pbmRleCwgaW5zdHJ1Y3Rpb24udmFsdWUpOwogIH0KCiAgLy8gUHVyZSBvcGVyYXRpb25zIHRoYXQgZG8gbm90IGVzY2FwZSB0aGVpciBpbnB1dHMuCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJpbmFyeUFyaXRobWV0aWMoSEJpbmFyeUFyaXRobWV0aWMgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZihISWYgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyY2VwdG9yKEhJbnRlcmNlcHRvciBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SXMoSElzIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJc1ZpYUludGVyY2VwdG9yKEhJc1ZpYUludGVyY2VwdG9yIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROb3QoSE5vdCBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGFyYW1ldGVyVmFsdWUoSFBhcmFtZXRlclZhbHVlIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZWxhdGlvbmFsKEhSZWxhdGlvbmFsIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUtub3duKEhUeXBlS25vd24gaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVJbmZvUmVhZFJhdyhIVHlwZUluZm9SZWFkUmF3IGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlSW5mb1JlYWRWYXJpYWJsZShIVHlwZUluZm9SZWFkVmFyaWFibGUgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVJbmZvRXhwcmVzc2lvbihIVHlwZUluZm9FeHByZXNzaW9uIGluc3RydWN0aW9uKSB7fQp9CgovLy8gQSBub24tZmllbGQgYmFzZWQgZmVhdHVyZSBvZiBhbiBvYmplY3QuCmVudW0gTWVtb3J5RmVhdHVyZSB7CiAgLy8gQWNjZXNzIHRvIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eSBvZiBhIGBKU0luZGV4YWJsZWAuCiAgbGVuZ3RoLAp9CgovLy8gSG9sZHMgdmFsdWVzIG9mIG1lbW9yeSBwbGFjZXMuCi8vLwovLy8gR2VuZXJhbGx5LCB2YWx1ZXMgdGhhdCBuYW1lIGEgcGxhY2UgKGEgcmVjZWl2ZXIpIGhhdmUgdHlwZSByZWZpbmVtZW50cyBhbmQKLy8vIG90aGVyIGNoZWNrcyByZW1vdmVkIHRvIGVuc3VyZSB0aGF0IGNoZWNrcyBhbmQgdHlwZSByZWZpbmVtZW50cyBkbyBub3QKLy8vIGNvbmZ1c2UgYWxpYXNpbmcuICBWYWx1ZXMgc3RvcmVkIGludG8gYSBtZW1vcnkgcGxhY2Uga2VlcCB0aGUgdHlwZQovLy8gcmVmaW5lbWVudHMgdG8gaGVscCBmdXJ0aGVyIG9wdGltaXphdGlvbnMuCmNsYXNzIE1lbW9yeVNldCB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwoKICAvLy8gTWFwcyBhIGZpZWxkIHRvIGEgbWFwIG9mIHJlY2VpdmVycyB0byB0aGVpciBjdXJyZW50IGZpZWxkIHZhbHVlcy4KICAvLy8KICAvLy8gVGhlIGZpZWxkIGlzIGVpdGhlciBhIFtGaWVsZEVudGl0eV0sIGEgW0Z1bmN0aW9uRW50aXR5XSBpbiBjYXNlIG9mCiAgLy8vIGluc3RhbmNlIG1ldGhvZHMsIG9yIGEgW01lbW9yeUZlYXR1cmVdIGZvciBgbGVuZ3RoYCBhY2Nlc3Mgb24KICAvLy8gYEpTSW5kZXhhYmxlYC4KICAvLy8KICAvLyBUT0RPKDI1NTQ0KTogU3BsaXQgbGVuZ3RoIGVmZmVjdHMgZnJvbSBvdGhlciBlZmZlY3RzIGFuZCBtb2RlbCBsZW5ndGhzCiAgLy8gc2VwYXJhdGVseS4KICBmaW5hbCBNYXA8T2JqZWN0IC8qTWVtYmVyRW50aXR5fE1lbW9yeUZlYXR1cmUqLywKICAgICAgICAgIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4+CiAgICAgIGZpZWxkVmFsdWVzID0gPE9iamVjdCwgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPj57fTsKCiAgLy8vIE1hcHMgYSByZWNlaXZlciB0byBhIG1hcCBvZiBrZXlzIHRvIHZhbHVlLgogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4+IGtleWVkVmFsdWVzID0KICAgICAgPEhJbnN0cnVjdGlvbiwgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPj57fTsKCiAgLy8vIFNldCBvZiBvYmplY3RzIHRoYXQgd2Uga25vdyBkb24ndCBlc2NhcGUgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCiAgZmluYWwgU2V0bGV0PEhJbnN0cnVjdGlvbj4gbm9uRXNjYXBpbmdSZWNlaXZlcnMgPSBuZXcgU2V0bGV0PEhJbnN0cnVjdGlvbj4oKTsKCiAgTWVtb3J5U2V0KHRoaXMuY2xvc2VkV29ybGQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtmaXJzdF0gYW5kIFtzZWNvbmRdIGFsd2F5cyBhbGlhcyB0byB0aGUgc2FtZSBvYmplY3QuCiAgYm9vbCBtdXN0QWxpYXMoSEluc3RydWN0aW9uIGZpcnN0LCBISW5zdHJ1Y3Rpb24gc2Vjb25kKSB7CiAgICByZXR1cm4gZmlyc3QgPT0gc2Vjb25kOwogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciBbZmlyc3RdIGFuZCBbc2Vjb25kXSBtYXkgYWxpYXMgdG8gdGhlIHNhbWUgb2JqZWN0LgogIGJvb2wgbWF5QWxpYXMoSEluc3RydWN0aW9uIGZpcnN0LCBISW5zdHJ1Y3Rpb24gc2Vjb25kKSB7CiAgICBpZiAobXVzdEFsaWFzKGZpcnN0LCBzZWNvbmQpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChpc0NvbmNyZXRlKGZpcnN0KSAmJiBpc0NvbmNyZXRlKHNlY29uZCkpIHJldHVybiBmYWxzZTsKICAgIGlmIChub25Fc2NhcGluZ1JlY2VpdmVycy5jb250YWlucyhmaXJzdCkpIHJldHVybiBmYWxzZTsKICAgIGlmIChub25Fc2NhcGluZ1JlY2VpdmVycy5jb250YWlucyhzZWNvbmQpKSByZXR1cm4gZmFsc2U7CiAgICAvLyBUeXBlZCBhcnJheXMgb2YgZGlmZmVyZW50IHR5cGVzIG1pZ2h0IGhhdmUgYSBzaGFyZWQgYnVmZmVyLgogICAgaWYgKGNvdWxkQmVUeXBlZEFycmF5KGZpcnN0KSAmJiBjb3VsZEJlVHlwZWRBcnJheShzZWNvbmQpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5hcmVEaXNqb2ludChmaXJzdC5pbnN0cnVjdGlvblR5cGUsIHNlY29uZC5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZTsKICB9CgogIGJvb2wgaXNGaW5hbChPYmplY3QgZWxlbWVudCkgewogICAgcmV0dXJuIGVsZW1lbnQgaXMgTWVtYmVyRW50aXR5ICYmIGNsb3NlZFdvcmxkLmZpZWxkTmV2ZXJDaGFuZ2VzKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBpc0NvbmNyZXRlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIGluc3RydWN0aW9uIGlzIEhDcmVhdGUgfHwKICAgICAgICBpbnN0cnVjdGlvbiBpcyBIQ29uc3RhbnQgfHwKICAgICAgICBpbnN0cnVjdGlvbiBpcyBITGl0ZXJhbExpc3Q7CiAgfQoKICBib29sIGNvdWxkQmVUeXBlZEFycmF5KEhJbnN0cnVjdGlvbiByZWNlaXZlcikgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY291bGRCZVR5cGVkQXJyYXkocmVjZWl2ZXIuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZTsKICB9CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW3JlY2VpdmVyXSBlc2NhcGVzIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgogIGJvb2wgZXNjYXBlcyhISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIpIHsKICAgIGFzc2VydChyZWNlaXZlciA9PSBudWxsIHx8IHJlY2VpdmVyID09IHJlY2VpdmVyLm5vbkNoZWNrKCkpOwogICAgcmV0dXJuICFub25Fc2NhcGluZ1JlY2VpdmVycy5jb250YWlucyhyZWNlaXZlcik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQWxsb2NhdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpbnN0cnVjdGlvbiA9PSBpbnN0cnVjdGlvbi5ub25DaGVjaygpKTsKICAgIG5vbkVzY2FwaW5nUmVjZWl2ZXJzLmFkZChpbnN0cnVjdGlvbik7CiAgfQoKICAvLy8gU2V0cyB0aGUgW2ZpZWxkXSBvbiBbcmVjZWl2ZXJdIHRvIGNvbnRhaW4gW3ZhbHVlXS4gS2lsbHMgYWxsIHBvdGVudGlhbAogIC8vLyBwbGFjZXMgdGhhdCBtYXkgYmUgYWZmZWN0ZWQgYnkgdGhpcyB1cGRhdGUuIFJldHVybnMgYHRydWVgIGlmIHRoZSB1cGRhdGUKICAvLy8gaXMgcmVkdW5kYW50LgogIGJvb2wgcmVnaXN0ZXJGaWVsZFZhbHVlVXBkYXRlKAogICAgICBPYmplY3QgZmllbGQsIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgSEluc3RydWN0aW9uIHZhbHVlKSB7CiAgICBhc3NlcnQoZmllbGQgaXMgTWVtYmVyRW50aXR5IHx8IGZpZWxkIGlzIE1lbW9yeUZlYXR1cmUsCiAgICAgICAgIlVuZXhwZWN0ZWQgbWVtYmVyL2ZlYXR1cmU6ICRmaWVsZCIpOwogICAgYXNzZXJ0KHJlY2VpdmVyID09IG51bGwgfHwgcmVjZWl2ZXIgPT0gcmVjZWl2ZXIubm9uQ2hlY2soKSk7CiAgICBpZiAoY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihmaWVsZCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUT0RPKDE0OTU1KTogUmVtb3ZlIHRoaXMgcmVzdHJpY3Rpb24/CiAgICB9CiAgICAvLyBbdmFsdWVdIGlzIGJlaW5nIHNldCBpbiBzb21lIHBsYWNlIGluIG1lbW9yeSwgd2UgcmVtb3ZlIGl0IGZyb20gdGhlCiAgICAvLyBub24tZXNjYXBpbmcgc2V0LgogICAgbm9uRXNjYXBpbmdSZWNlaXZlcnMucmVtb3ZlKHZhbHVlLm5vbkNoZWNrKCkpOwogICAgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPiBtYXAgPQogICAgICAgIGZpZWxkVmFsdWVzLnB1dElmQWJzZW50KGZpZWxkLCAoKSA9PiA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+e30pOwogICAgYm9vbCBpc1JlZHVuZGFudCA9IG1hcFtyZWNlaXZlcl0gPT0gdmFsdWU7CiAgICBtYXAuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBpZiAobWF5QWxpYXMocmVjZWl2ZXIsIGtleSkpIG1hcFtrZXldID0gbnVsbDsKICAgIH0pOwogICAgbWFwW3JlY2VpdmVyXSA9IHZhbHVlOwogICAgcmV0dXJuIGlzUmVkdW5kYW50OwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGF0IHRoZSBbZmllbGRdIG9uIFtyZWNlaXZlcl0gaXMgbm93IFt2YWx1ZV0uCiAgdm9pZCByZWdpc3RlckZpZWxkVmFsdWUoCiAgICAgIE9iamVjdCBmaWVsZCwgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBISW5zdHJ1Y3Rpb24gdmFsdWUpIHsKICAgIGFzc2VydChmaWVsZCBpcyBNZW1iZXJFbnRpdHkgfHwgZmllbGQgaXMgTWVtb3J5RmVhdHVyZSwKICAgICAgICAiVW5leHBlY3RlZCBtZW1iZXIvZmVhdHVyZTogJGZpZWxkIik7CiAgICBhc3NlcnQocmVjZWl2ZXIgPT0gbnVsbCB8fCByZWNlaXZlciA9PSByZWNlaXZlci5ub25DaGVjaygpKTsKICAgIGlmIChmaWVsZCBpcyBNZW1iZXJFbnRpdHkgJiYgY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihmaWVsZCkpIHsKICAgICAgcmV0dXJuOyAvLyBUT0RPKDE0OTU1KTogUmVtb3ZlIHRoaXMgcmVzdHJpY3Rpb24/CiAgICB9CiAgICBNYXA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+IG1hcCA9CiAgICAgICAgZmllbGRWYWx1ZXMucHV0SWZBYnNlbnQoZmllbGQsICgpID0+IDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj57fSk7CiAgICBtYXBbcmVjZWl2ZXJdID0gdmFsdWU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgc3RvcmVkIGZvciBbZmllbGRdIG9uIFtyZWNlaXZlcl0uIFJldHVybnMgYG51bGxgIGlmIHdlCiAgLy8vIGRvbid0IGtub3cuCiAgSEluc3RydWN0aW9uIGxvb2t1cEZpZWxkVmFsdWUoT2JqZWN0IGZpZWxkLCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIpIHsKICAgIGFzc2VydChmaWVsZCBpcyBNZW1iZXJFbnRpdHkgfHwgZmllbGQgaXMgTWVtb3J5RmVhdHVyZSwKICAgICAgICAiVW5leHBlY3RlZCBtZW1iZXIvZmVhdHVyZTogJGZpZWxkIik7CiAgICBhc3NlcnQocmVjZWl2ZXIgPT0gbnVsbCB8fCByZWNlaXZlciA9PSByZWNlaXZlci5ub25DaGVjaygpKTsKICAgIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4gbWFwID0gZmllbGRWYWx1ZXNbZmllbGRdOwogICAgcmV0dXJuIChtYXAgPT0gbnVsbCkgPyBudWxsIDogbWFwW3JlY2VpdmVyXTsKICB9CgogIC8vLyBLaWxsIGFsbCBwbGFjZXMgdGhhdCBtYXkgYmUgYWZmZWN0ZWQgYnkgdGhpcyBbaW5zdHJ1Y3Rpb25dLiBBbHNvIHVwZGF0ZQogIC8vLyB0aGUgc2V0IG9mIG5vbi1lc2NhcGluZyBvYmplY3RzIGluIGNhc2UgW2luc3RydWN0aW9uXSBoYXMgbm9uLWVzY2FwaW5nCiAgLy8vIG9iamVjdHMgaW4gaXRzIGlucHV0cy4KICB2b2lkIGtpbGxBZmZlY3RlZEJ5KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgLy8gRXZlbiBpZiBbaW5zdHJ1Y3Rpb25dIGRvZXMgbm90IGhhdmUgc2lkZSBlZmZlY3RzLCBpdCBtYXkgdXNlIG5vbi1lc2NhcGluZwogICAgLy8gb2JqZWN0cyBhbmQgc3RvcmUgdGhlbSBpbiBhIG5ldyBvYmplY3QsIHdoaWNoIG1ha2UgdGhlc2Ugb2JqZWN0cwogICAgLy8gZXNjYXBpbmcuCiAgICBpbnN0cnVjdGlvbi5pbnB1dHMuZm9yRWFjaCgoaW5wdXQpIHsKICAgICAgbm9uRXNjYXBpbmdSZWNlaXZlcnMucmVtb3ZlKGlucHV0Lm5vbkNoZWNrKCkpOwogICAgfSk7CgogICAgaWYgKGluc3RydWN0aW9uLnNpZGVFZmZlY3RzLmNoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCkgfHwKICAgICAgICBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5jaGFuZ2VzU3RhdGljUHJvcGVydHkoKSkgewogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gcmVjZWl2ZXJzVG9SZW1vdmUgPSA8SEluc3RydWN0aW9uPltdOwoKICAgICAgTGlzdDxPYmplY3Q+IGZpZWxkc1RvUmVtb3ZlOwogICAgICBmaWVsZFZhbHVlcy5mb3JFYWNoKChPYmplY3QgZWxlbWVudCwgbWFwKSB7CiAgICAgICAgaWYgKGlzRmluYWwoZWxlbWVudCkpIHJldHVybjsKICAgICAgICBtYXAuZm9yRWFjaCgocmVjZWl2ZXIsIHZhbHVlKSB7CiAgICAgICAgICBpZiAoZXNjYXBlcyhyZWNlaXZlcikpIHsKICAgICAgICAgICAgcmVjZWl2ZXJzVG9SZW1vdmUuYWRkKHJlY2VpdmVyKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAocmVjZWl2ZXJzVG9SZW1vdmUubGVuZ3RoID09IG1hcC5sZW5ndGgpIHsKICAgICAgICAgIC8vIFJlbW92ZSB0aGVtIGFsbCBieSByZW1vdmluZyB0aGUgZW50aXJlIG1hcC4KICAgICAgICAgIChmaWVsZHNUb1JlbW92ZSA/Pz0gPE9iamVjdD5bXSkuYWRkKGVsZW1lbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWNlaXZlcnNUb1JlbW92ZS5mb3JFYWNoKG1hcC5yZW1vdmUpOwogICAgICAgIH0KICAgICAgICByZWNlaXZlcnNUb1JlbW92ZS5jbGVhcigpOwogICAgICB9KTsKICAgICAgZmllbGRzVG9SZW1vdmU/LmZvckVhY2goZmllbGRWYWx1ZXMucmVtb3ZlKTsKICAgIH0KCiAgICBpZiAoaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuY2hhbmdlc0luZGV4KCkpIHsKICAgICAga2V5ZWRWYWx1ZXMuZm9yRWFjaCgocmVjZWl2ZXIsIG1hcCkgewogICAgICAgIGlmIChlc2NhcGVzKHJlY2VpdmVyKSkgewogICAgICAgICAgbWFwLmZvckVhY2goKGluZGV4LCB2YWx1ZSkgewogICAgICAgICAgICBtYXBbaW5kZXhdID0gbnVsbDsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgc3RvcmVkIGluIGByZWNlaXZlcltpbmRleF1gLiBSZXR1cm5zIG51bGwgaWYgd2UgZG9uJ3QKICAvLy8ga25vdy4KICBISW5zdHJ1Y3Rpb24gbG9va3VwS2V5ZWRWYWx1ZShISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBpbmRleCkgewogICAgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPiBtYXAgPSBrZXllZFZhbHVlc1tyZWNlaXZlcl07CiAgICByZXR1cm4gKG1hcCA9PSBudWxsKSA/IG51bGwgOiBtYXBbaW5kZXhdOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGF0IGByZWNlaXZlcltpbmRleF1gIGlzIG5vdyBbdmFsdWVdLgogIHZvaWQgcmVnaXN0ZXJLZXllZFZhbHVlKAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBpbmRleCwgSEluc3RydWN0aW9uIHZhbHVlKSB7CiAgICBNYXA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+IG1hcCA9CiAgICAgICAga2V5ZWRWYWx1ZXMucHV0SWZBYnNlbnQocmVjZWl2ZXIsICgpID0+IDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj57fSk7CiAgICBtYXBbaW5kZXhdID0gdmFsdWU7CiAgfQoKICAvLy8gU2V0cyBgcmVjZWl2ZXJbaW5kZXhdYCB0byBjb250YWluIFt2YWx1ZV0uIEtpbGxzIGFsbCBwb3RlbnRpYWwgcGxhY2VzIHRoYXQKICAvLy8gbWF5IGJlIGFmZmVjdGVkIGJ5IHRoaXMgdXBkYXRlLgogIHZvaWQgcmVnaXN0ZXJLZXllZFZhbHVlVXBkYXRlKAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBpbmRleCwgSEluc3RydWN0aW9uIHZhbHVlKSB7CiAgICBub25Fc2NhcGluZ1JlY2VpdmVycy5yZW1vdmUodmFsdWUubm9uQ2hlY2soKSk7CiAgICBrZXllZFZhbHVlcy5mb3JFYWNoKChrZXksIHZhbHVlcykgewogICAgICBpZiAobWF5QWxpYXMocmVjZWl2ZXIsIGtleSkpIHsKICAgICAgICAvLyBUeXBlZCBhcnJheXMgdGhhdCBhcmUgdmlld3Mgb2YgdGhlIHNhbWUgYnVmZmVyIG1heSBoYXZlIGRpZmZlcmVudAogICAgICAgIC8vIG9mZnNldHMgb3IgZWxlbWVudCBzaXplcywgdW5sZXNzIHRoZXkgYXJlIHRoZSBzYW1lIHR5cGVkIGFycmF5LgogICAgICAgIGJvb2wgd2Vha0luZGV4ID0gY291bGRCZVR5cGVkQXJyYXkoa2V5KSAmJiAhbXVzdEFsaWFzKHJlY2VpdmVyLCBrZXkpOwogICAgICAgIHZhbHVlcy5mb3JFYWNoKChvdGhlckluZGV4LCBvdGhlclZhbHVlKSB7CiAgICAgICAgICBpZiAod2Vha0luZGV4IHx8IG1heUFsaWFzKGluZGV4LCBvdGhlckluZGV4KSkgewogICAgICAgICAgICB2YWx1ZXNbb3RoZXJJbmRleF0gPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKCiAgICAvLyBUeXBlZCBhcnJheXMgbWF5IG5hcnJvdyBpbmNvbWluZyB2YWx1ZXMuCiAgICBpZiAoY291bGRCZVR5cGVkQXJyYXkocmVjZWl2ZXIpKSByZXR1cm47CgogICAgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPiBtYXAgPQogICAgICAgIGtleWVkVmFsdWVzLnB1dElmQWJzZW50KHJlY2VpdmVyLCAoKSA9PiA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+e30pOwogICAgbWFwW2luZGV4XSA9IHZhbHVlOwogIH0KCiAgLy8vIFJldHVybnMgYSBjb21tb24gaW5zdHJ1Y3Rpb24gZm9yIFtmaXJzdF0gYW5kIFtzZWNvbmRdLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiBlaXRoZXIgW2ZpcnN0XSBvciBbc2Vjb25kXSBpcyBudWxsLiBSZXR1cm5zIFtmaXJzdF0gaWYKICAvLy8gW2ZpcnN0XSBhbmQgW3NlY29uZF0gYXJlIGVxdWFsLiBPdGhlcndpc2UgY3JlYXRlcyBvciByZS11c2VzIGEgcGhpIGluCiAgLy8vIFtibG9ja10gdGhhdCBob2xkcyBbZmlyc3RdIGFuZCBbc2Vjb25kXS4KICBISW5zdHJ1Y3Rpb24gZmluZENvbW1vbkluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBmaXJzdCwgSEluc3RydWN0aW9uIHNlY29uZCwKICAgICAgSEJhc2ljQmxvY2sgYmxvY2ssIGludCBwcmVkZWNlc3NvckluZGV4KSB7CiAgICBpZiAoZmlyc3QgPT0gbnVsbCB8fCBzZWNvbmQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoZmlyc3QgPT0gc2Vjb25kKSByZXR1cm4gZmlyc3Q7CiAgICBpZiAoc2Vjb25kIGlzIEhHZXRMZW5ndGgpIHsKICAgICAgLy8gRG9uJ3QgYWx3YXlzIGNyZWF0ZSBwaGlzIGZvciBIR2V0TGVuZ3RoLiBUaGUgcGhpIGNvbmZ1c2VzIGFycmF5IGJvdW5kcwogICAgICAvLyBjaGVjayBlbGltaW5hdGlvbiBhbmQgdGhlIHJlc3VsdGluZyB2YXJpYWJsZS1oZWF2eSBjb2RlIHByb2JhYmx5IGlzCiAgICAgIC8vIGNvbmZ1c2luZyBmb3IgSmF2YVNjcmlwdCBWTXMuIEluIHByYWN0aWNlLCB0aGlzIG1vc3RseSBhZmZlY3RzIHRoZQogICAgICAvLyBleHBhbnNpb24gb2YgZm9yLWluIGxvb3BzIG9uIEFycmF5cywgc28gd2UgbWF0Y2ggdGhlIGV4cHJlc3Npb24KICAgICAgLy8KICAgICAgLy8gICAgIGNoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKGFycmF5Lmxlbmd0aCA9PSBfZW5kLCBhcnJheSkKICAgICAgLy8KICAgICAgLy8gc3RhcnRpbmcgd2l0aCB0aGUgSEdldExlbmd0aCBvZiB0aGUgYGFycmF5Lmxlbmd0aGAsIGluIHRoZSBjYXNlIHdoZXJlCiAgICAgIC8vIGBhcnJheS5sZW5ndGhgIGlzIG5vdCB1c2VkIGVsc2V3aGVyZSAoaS5lLiBub3QgYWxyZWFkeSBvcHRpbWl6ZWQgdG8gdXNlCiAgICAgIC8vIGEgcHJldmlvdXMgdXNlLCBpbiB0aGUgbG9vcCBjb25kaXRpb24pLgogICAgICAvLwogICAgICAvLyBUT0RPKHNyYSk6IEZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IGVuc3VyZSAnbmljZScgbG9vcCBjb2RlLgogICAgICAvLyBUT0RPKDIyNDA3KTogVGhlIHBoaSB3b3VsZCBub3QgYmUgc28gYmFkIGlmIGl0IGRpZCBub3QgY29uZnVzZSBib3VuZHMKICAgICAgLy8gY2hlY2sgZWxpbWluYXRpb24uCiAgICAgIC8vIFRPRE8oMjU0MzcpOiBXZSBjb3VsZCBhZGQgYSBwaGkgaWYgd2UgdW5kaWQgdGhlIGhhcm1mdWwgY2FzZXMuCiAgICAgIGlmIChzZWNvbmQudXNlZEJ5Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgdmFyIHVzZXIgPSBzZWNvbmQudXNlZEJ5LnNpbmdsZTsKICAgICAgICBpZiAodXNlciBpcyBISWRlbnRpdHkgJiYgdXNlci51c2VkQnkubGVuZ3RoID09IDEpIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiB1c2VyMiA9IHVzZXIudXNlZEJ5LnNpbmdsZTsKICAgICAgICAgIGlmICh1c2VyMiBpcyBISW52b2tlU3RhdGljICYmCiAgICAgICAgICAgICAgdXNlcjIuZWxlbWVudCA9PQogICAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5jaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcikgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIEFic3RyYWN0VmFsdWUgcGhpVHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLnVuaW9uKAogICAgICAgIHNlY29uZC5pbnN0cnVjdGlvblR5cGUsIGZpcnN0Lmluc3RydWN0aW9uVHlwZSk7CiAgICBpZiAoZmlyc3QgaXMgSFBoaSAmJiBmaXJzdC5ibG9jayA9PSBibG9jaykgewogICAgICBIUGhpIHBoaSA9IGZpcnN0OwogICAgICBwaGkuYWRkSW5wdXQoc2Vjb25kKTsKICAgICAgcGhpLmluc3RydWN0aW9uVHlwZSA9IHBoaVR5cGU7CiAgICAgIHJldHVybiBwaGk7CiAgICB9IGVsc2UgewogICAgICBIUGhpIHBoaSA9IG5ldyBIUGhpLm5vSW5wdXRzKG51bGwsIHBoaVR5cGUpOwogICAgICBibG9jay5hZGRQaGkocGhpKTsKICAgICAgLy8gUHJldmlvdXMgcHJlZGVjZXNzb3JzIGhhZCB0aGUgc2FtZSBpbnB1dC4gQSBwaGkgbXVzdCBoYXZlCiAgICAgIC8vIHRoZSBzYW1lIG51bWJlciBvZiBpbnB1dHMgYXMgaXRzIGJsb2NrIGhhcyBwcmVkZWNlc3NvcnMuCiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JJbmRleDsgaSsrKSB7CiAgICAgICAgcGhpLmFkZElucHV0KGZpcnN0KTsKICAgICAgfQogICAgICBwaGkuYWRkSW5wdXQoc2Vjb25kKTsKICAgICAgcmV0dXJuIHBoaTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiBbdGhpc10gYW5kIHRoZSBbb3RoZXJdIG1lbW9yeSBzZXQuCiAgTWVtb3J5U2V0IGludGVyc2VjdGlvbkZvcigKICAgICAgTWVtb3J5U2V0IG90aGVyLCBIQmFzaWNCbG9jayBibG9jaywgaW50IHByZWRlY2Vzc29ySW5kZXgpIHsKICAgIE1lbW9yeVNldCByZXN1bHQgPSBuZXcgTWVtb3J5U2V0KGNsb3NlZFdvcmxkKTsKICAgIGlmIChvdGhlciA9PSBudWxsKSB7CiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHZpc2l0IHRvIGEgbG9vcCBoZWFkZXIgKFtvdGhlcl0gaXMgYG51bGxgIGJlY2F1c2Ugd2UKICAgICAgLy8gaGF2ZSBub3QgdmlzaXRlZCB0aGUgYmFjayBlZGdlKS4gQ29weSB0aGUgbm9uRXNjYXBpbmdSZWNlaXZlcnMgdGhhdCBhcmUKICAgICAgLy8gZ3VhcmFudGVlZCB0byBzdXJ2aXZlIHRoZSBsb29wIGJlY2F1c2UgdGhleSBhcmUgbm90IGVzY2FwZWQgYmVmb3JlCiAgICAgIC8vIG1ldGhvZCBleGl0LgogICAgICAvLyBUT0RPKHNyYSk6IFdlIHNob3VsZCBkbyBhIHByb3BlciBkYXRhZmxvdyB0byBmaW5kIHRoZSBtYXhpbWFsCiAgICAgIC8vIG5vbkVzY2FwaW5nUmVjZWl2ZXJzIChhIHZhcmlhbnQgb2YgQXZhaWxhYmxlLUV4cHJlc3Npb25zKSwgd2hpY2ggbXVzdAogICAgICAvLyBjb252ZXJnZSBiZWZvcmUgd2UgZWRpdCB0aGUgcHJvZ3JhbSBpbiBbZmluZENvbW1vbkluc3RydWN0aW9uXS4KICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gaW4gbm9uRXNjYXBpbmdSZWNlaXZlcnMpIHsKICAgICAgICBib29sIGlzTm9uRXNjYXBpbmdVc2UoSEluc3RydWN0aW9uIHVzZSkgewogICAgICAgICAgaWYgKHVzZSBpcyBIUmV0dXJuKSByZXR1cm4gdHJ1ZTsgLy8gRXNjYXBlcywgYnV0IHNvIGRvZXMgY29udHJvbC4KICAgICAgICAgIGlmICh1c2UgaXMgSEZpZWxkR2V0KSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGlmICh1c2UgaXMgSEZpZWxkU2V0KSB7CiAgICAgICAgICAgIHJldHVybiB1c2UudmFsdWUubm9uQ2hlY2soKSAhPSBpbnN0cnVjdGlvbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1c2UgaXMgSFR5cGVJbmZvUmVhZFZhcmlhYmxlKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGlmICh1c2UgaXMgSEdldExlbmd0aCkgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhCb3VuZHNDaGVjaykgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhJbmRleCkgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhJbmRleEFzc2lnbikgewogICAgICAgICAgICByZXR1cm4gdXNlLnZhbHVlLm5vbkNoZWNrKCkgIT0gaW5zdHJ1Y3Rpb247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodXNlIGlzIEhJbnRlcmNlcHRvcikgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhJbnZva2VEeW5hbWljTWV0aG9kKSB7CiAgICAgICAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0gdXNlLmVsZW1lbnQ7CiAgICAgICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHsKICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0FycmF5QWRkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdXNlLmlucHV0cy5sYXN0ICE9IGluc3RydWN0aW9uOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHVzZSBpcyBISW52b2tlU3RhdGljKSB7CiAgICAgICAgICAgIGlmICh1c2UuZWxlbWVudCA9PQogICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGluc3RydWN0aW9uLnVzZWRCeS5ldmVyeShpc05vbkVzY2FwaW5nVXNlKSkgewogICAgICAgICAgcmVzdWx0Lm5vbkVzY2FwaW5nUmVjZWl2ZXJzLmFkZChpbnN0cnVjdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgZmllbGRWYWx1ZXMuZm9yRWFjaCgoZWxlbWVudCwgdmFsdWVzKSB7CiAgICAgIHZhciBvdGhlclZhbHVlcyA9IG90aGVyLmZpZWxkVmFsdWVzW2VsZW1lbnRdOwogICAgICBpZiAob3RoZXJWYWx1ZXMgPT0gbnVsbCkgcmV0dXJuOwogICAgICB2YWx1ZXMuZm9yRWFjaCgocmVjZWl2ZXIsIHZhbHVlKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gZmluZENvbW1vbkluc3RydWN0aW9uKAogICAgICAgICAgICB2YWx1ZSwgb3RoZXJWYWx1ZXNbcmVjZWl2ZXJdLCBibG9jaywgcHJlZGVjZXNzb3JJbmRleCk7CiAgICAgICAgaWYgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgICAgIHJlc3VsdC5yZWdpc3RlckZpZWxkVmFsdWUoZWxlbWVudCwgcmVjZWl2ZXIsIGluc3RydWN0aW9uKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAga2V5ZWRWYWx1ZXMuZm9yRWFjaCgocmVjZWl2ZXIsIHZhbHVlcykgewogICAgICB2YXIgb3RoZXJWYWx1ZXMgPSBvdGhlci5rZXllZFZhbHVlc1tyZWNlaXZlcl07CiAgICAgIGlmIChvdGhlclZhbHVlcyA9PSBudWxsKSByZXR1cm47CiAgICAgIHZhbHVlcy5mb3JFYWNoKChpbmRleCwgdmFsdWUpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBmaW5kQ29tbW9uSW5zdHJ1Y3Rpb24oCiAgICAgICAgICAgIHZhbHVlLCBvdGhlclZhbHVlc1tpbmRleF0sIGJsb2NrLCBwcmVkZWNlc3NvckluZGV4KTsKICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICAgICAgcmVzdWx0LnJlZ2lzdGVyS2V5ZWRWYWx1ZShyZWNlaXZlciwgaW5kZXgsIGluc3RydWN0aW9uKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgbm9uRXNjYXBpbmdSZWNlaXZlcnMuZm9yRWFjaCgocmVjZWl2ZXIpIHsKICAgICAgaWYgKG90aGVyLm5vbkVzY2FwaW5nUmVjZWl2ZXJzLmNvbnRhaW5zKHJlY2VpdmVyKSkgewogICAgICAgIHJlc3VsdC5ub25Fc2NhcGluZ1JlY2VpdmVy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Z2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19hc3Q7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBJdGVyYWJsZUJhc2U7CmltcG9ydCAnc3JjL3ByZWNlZGVuY2UuZGFydCc7CmltcG9ydCAnc3JjL2NoYXJhY3RlcnMuZGFydCcgYXMgY2hhckNvZGVzOwoKcGFydCAnc3JjL25vZGVzLmRhcnQnOwpwYXJ0ICdzcmMvYnVpbGRlci5kYXJ0JzsKcGFydCAnc3JjL3ByaW50ZXIuZGFydCc7CnBhcnQgJ3NyYy90ZW1wbGF0ZS5kYXJ0JzsKcGFydCAnc3JjL2VxdWl2YWxlbmNlX3Zpc2l0b3IuZGFydCc7ChEATk48ARABLB4rARcZGRolARpwYWNrYWdlOmpzX2FzdC9qc19hc3QuZGFydChzZGtyb290Oi9wa2cvanNfYXN0L2xpYi9zcmMvcHJpbnRlci5kYXJ0wAC6IS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGpzX2FzdDsKCnR5cGVkZWYgU3RyaW5nIFJlbmFtZXIoTmFtZSBuYW1lKTsKCmNsYXNzIEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMgewogIGZpbmFsIGJvb2wgc2hvdWxkQ29tcHJlc3NPdXRwdXQ7CiAgZmluYWwgYm9vbCBtaW5pZnlMb2NhbFZhcmlhYmxlczsKICBmaW5hbCBib29sIHByZWZlclNlbWljb2xvblRvTmV3bGluZUluTWluaWZpZWRPdXRwdXQ7CiAgZmluYWwgUmVuYW1lciByZW5hbWVyRm9yTmFtZXM7CgogIGNvbnN0IEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMoCiAgICAgIHt0aGlzLnNob3VsZENvbXByZXNzT3V0cHV0OiBmYWxzZSwKICAgICAgdGhpcy5taW5pZnlMb2NhbFZhcmlhYmxlczogZmFsc2UsCiAgICAgIHRoaXMucHJlZmVyU2VtaWNvbG9uVG9OZXdsaW5lSW5NaW5pZmllZE91dHB1dDogZmFsc2UsCiAgICAgIHRoaXMucmVuYW1lckZvck5hbWVzOiBpZGVudGl0eVJlbmFtZXJ9KTsKCiAgc3RhdGljIFN0cmluZyBpZGVudGl0eVJlbmFtZXIoTmFtZSBuYW1lKSA9PiBuYW1lLm5hbWU7Cn0KCi8vLyBBbiBlbnZpcm9ubWVudCBpbiB3aGljaCBKYXZhU2NyaXB0IHByaW50aW5nIGlzIGRvbmUuICBQcm92aWRlcyBlbWl0dGluZyBvZgovLy8gdGV4dCBhbmQgcHJlLSBhbmQgcG9zdC12aXNpdCBjYWxsYmFja3MuCmFic3RyYWN0IGNsYXNzIEphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgewogIC8vLyBTaWduYWxzIGFuIGVycm9yLiAgVGhpcyBzaG91bGQgaGFwcGVuIG9ubHkgZm9yIHNlcmlvdXMgaW50ZXJuYWwgZXJyb3JzLgogIHZvaWQgZXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKICAgIHRocm93IG1lc3NhZ2U7CiAgfQoKICAvLy8gQWRkcyBbc3RyaW5nXSB0byB0aGUgb3V0cHV0LgogIHZvaWQgZW1pdChTdHJpbmcgc3RyaW5nKTsKCiAgLy8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgcHJpbnRpbmcgb2YgW25vZGVdLiBbc3RhcnRQb3NpdGlvbl0gaXMgdGhlCiAgLy8vIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgb2YgW25vZGVdLgogIC8vLwogIC8vLyBbZW50ZXJOb2RlXSBpcyBjYWxsZWQgaW4gcHJlLXRyYXZlcnNhbCBvcmRlci4KICB2b2lkIGVudGVyTm9kZShOb2RlIG5vZGUsIGludCBzdGFydFBvc2l0aW9uKSB7fQoKICAvLy8gQ2FsbGJhY2sgZm9yIHRoZSBlbmQgb2YgcHJpbnRpbmcgb2YgW25vZGVdLiBbc3RhcnRQb3NpdGlvbl0gaXMgdGhlCiAgLy8vIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgb2YgW25vZGVdIChhbHNvIHByb3ZpZGVkCiAgLy8vIGluIHRoZSBbZW50ZXJOb2RlXSBjYWxsYmFjayksIFtlbmRQb3NpdGlvbl0gaXMgdGhlIHBvc2l0aW9uIGltbWVkaWF0ZWx5CiAgLy8vIGZvbGxvd2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgW25vZGVdLiBbY2xvc2luZ1Bvc2l0aW9uXSBpcyB0aGUKICAvLy8gcG9zaXRpb24gb2YgdGhlIGVuZGluZyBkZWxpbWl0ZXIgb2YgW25vZGVdLiBUaGlzIGlzIG9ubHkgcHJvdmlkZWQgZm9yCiAgLy8vIFtGdW5dIG5vZGVzIGFuZCBpcyBgbnVsbGAgb3RoZXJ3aXNlLgogIC8vLwogIC8vLyBbZW50ZXJOb2RlXSBpcyBjYWxsZWQgaW4gcG9zdC10cmF2ZXJzYWwgb3JkZXIuCiAgdm9pZCBleGl0Tm9kZSgKICAgICAgTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBpbnQgY2xvc2luZ1Bvc2l0aW9uKSB7fQp9CgovLy8gQSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgW0phdmFTY3JpcHRQcmludGluZ0NvbnRleHRdIHN1aXRhYmxlIGZvciB0ZXN0cy4KY2xhc3MgU2ltcGxlSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBleHRlbmRzIEphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgewogIGZpbmFsIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogIHZvaWQgZW1pdChTdHJpbmcgc3RyaW5nKSB7CiAgICBidWZmZXIud3JpdGUoc3RyaW5nKTsKICB9CgogIFN0cmluZyBnZXRUZXh0KCkgPT4gYnVmZmVyLnRvU3RyaW5nKCk7Cn0KClN0cmluZyBEZWJ1Z1ByaW50KE5vZGUgbm9kZSkgewogIEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMgb3B0aW9ucyA9IG5ldyBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zKCk7CiAgU2ltcGxlSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0ID0KICAgICAgbmV3IFNpbXBsZUphdmFTY3JpcHRQcmludGluZ0NvbnRleHQoKTsKICBQcmludGVyIHByaW50ZXIgPSBuZXcgUHJpbnRlcihvcHRpb25zLCBjb250ZXh0KTsKICBwcmludGVyLnZpc2l0KG5vZGUpOwogIHJldHVybiBjb250ZXh0LmdldFRleHQoKTsKfQoKY2xhc3MgUHJpbnRlciBpbXBsZW1lbnRzIE5vZGVWaXNpdG9yIHsKICBmaW5hbCBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zIG9wdGlvbnM7CiAgZmluYWwgSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0OwogIGZpbmFsIGJvb2wgc2hvdWxkQ29tcHJlc3NPdXRwdXQ7CiAgZmluYWwgRGFuZ2xpbmdFbHNlVmlzaXRvciBkYW5nbGluZ0Vsc2VWaXNpdG9yOwogIGZpbmFsIExvY2FsTmFtZXIgbG9jYWxOYW1lcjsKCiAgaW50IF9jaGFyQ291bnQgPSAwOwogIGJvb2wgaW5Gb3JJbml0ID0gZmFsc2U7CiAgYm9vbCBhdFN0YXRlbWVudEJlZ2luID0gZmFsc2U7CiAgYm9vbCBwZW5kaW5nU2VtaWNvbG9uID0gZmFsc2U7CiAgYm9vbCBwZW5kaW5nU3BhY2UgPSBmYWxzZTsKCiAgLy8gVGhlIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwuCiAgaW50IF9pbmRlbnRMZXZlbCA9IDA7CiAgLy8gQSBjYWNoZSBvZiBhbGwgaW5kZW50YXRpb24gc3RyaW5ncyB1c2VkIHNvIGZhci4KICBMaXN0PFN0cmluZz4gX2luZGVudExpc3QgPSA8U3RyaW5nPlsiIl07CgogIHN0YXRpYyBmaW5hbCBpZGVudGlmaWVyQ2hhcmFjdGVyUmVnRXhwID0gbmV3IFJlZ0V4cChyJ15bYS16QS1aXzAtOSRdJyk7CiAgc3RhdGljIGZpbmFsIGV4cHJlc3Npb25Db250aW51YXRpb25SZWdFeHAgPSBuZXcgUmVnRXhwKHInXlstKyhbXScpOwoKICBQcmludGVyKEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMgb3B0aW9ucywgSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0KQogICAgICA6IG9wdGlvbnMgPSBvcHRpb25zLAogICAgICAgIGNvbnRleHQgPSBjb250ZXh0LAogICAgICAgIHNob3VsZENvbXByZXNzT3V0cHV0ID0gb3B0aW9ucy5zaG91bGRDb21wcmVzc091dHB1dCwKICAgICAgICBkYW5nbGluZ0Vsc2VWaXNpdG9yID0gbmV3IERhbmdsaW5nRWxzZVZpc2l0b3IoY29udGV4dCksCiAgICAgICAgbG9jYWxOYW1lciA9IGRldGVybWluZVJlbmFtZXIoCiAgICAgICAgICAgIG9wdGlvbnMuc2hvdWxkQ29tcHJlc3NPdXRwdXQsIG9wdGlvbnMubWluaWZ5TG9jYWxWYXJpYWJsZXMpOwoKICBzdGF0aWMgTG9jYWxOYW1lciBkZXRlcm1pbmVSZW5hbWVyKAogICAgICBib29sIHNob3VsZENvbXByZXNzT3V0cHV0LCBib29sIGFsbG93VmFyaWFibGVNaW5pZmljYXRpb24pIHsKICAgIHJldHVybiAoc2hvdWxkQ29tcHJlc3NPdXRwdXQgJiYgYWxsb3dWYXJpYWJsZU1pbmlmaWNhdGlvbikKICAgICAgICA/IG5ldyBNaW5pZnlSZW5hbWVyKCkKICAgICAgICA6IG5ldyBJZGVudGl0eU5hbWVyKCk7CiAgfQoKICAvLyBUaGUgY3VycmVudCBpbmRlbnRhdGlvbiBzdHJpbmcuCiAgU3RyaW5nIGdldCBpbmRlbnRhdGlvbiB7CiAgICAvLyBMYXppbHkgYWRkIG5ldyBpbmRlbnRhdGlvbiBzdHJpbmdzIGFzIHJlcXVpcmVkLgogICAgd2hpbGUgKF9pbmRlbnRMaXN0Lmxlbmd0aCA8PSBfaW5kZW50TGV2ZWwpIHsKICAgICAgX2luZGVudExpc3QuYWRkKF9pbmRlbnRMaXN0Lmxhc3QgKyAiICAiKTsKICAgIH0KICAgIHJldHVybiBfaW5kZW50TGlzdFtfaW5kZW50TGV2ZWxdOwogIH0KCiAgdm9pZCBpbmRlbnRNb3JlKCkgewogICAgX2luZGVudExldmVsKys7CiAgfQoKICB2b2lkIGluZGVudExlc3MoKSB7CiAgICBfaW5kZW50TGV2ZWwtLTsKICB9CgogIC8vLyBBbHdheXMgZW1pdCBhIG5ld2xpbmUsIGV2ZW4gdW5kZXIgYGVuYWJsZU1pbmlmaWNhdGlvbmAuCiAgdm9pZCBmb3JjZUxpbmUoKSB7CiAgICBvdXQoIlxuIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICB9CgogIC8vLyBFbWl0cyBhIG5ld2xpbmUgZm9yIHJlYWRhYmlsaXR5LgogIHZvaWQgbGluZU91dCgpIHsKICAgIGlmICghc2hvdWxkQ29tcHJlc3NPdXRwdXQpIGZvcmNlTGluZSgpOwogIH0KCiAgdm9pZCBzcGFjZU91dCgpIHsKICAgIGlmICghc2hvdWxkQ29tcHJlc3NPdXRwdXQpIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgfQoKICBTdHJpbmcgbGFzdEFkZGVkU3RyaW5nID0gbnVsbDsKCiAgaW50IGdldCBsYXN0Q2hhckNvZGUgewogICAgaWYgKGxhc3RBZGRlZFN0cmluZyA9PSBudWxsKSByZXR1cm4gMDsKICAgIGFzc2VydChsYXN0QWRkZWRTdHJpbmcubGVuZ3RoICE9IDApOwogICAgcmV0dXJuIGxhc3RBZGRlZFN0cmluZy5jb2RlVW5pdEF0KGxhc3RBZGRlZFN0cmluZy5sZW5ndGggLSAxKTsKICB9CgogIHZvaWQgb3V0KFN0cmluZyBzdHIsIHtib29sIGlzV2hpdGVzcGFjZTogZmFsc2V9KSB7CiAgICBpZiAoc3RyICE9ICIiKSB7CiAgICAgIGlmIChwZW5kaW5nU2VtaWNvbG9uKSB7CiAgICAgICAgaWYgKCFzaG91bGRDb21wcmVzc091dHB1dCkgewogICAgICAgICAgX2VtaXQoIjsiKTsKICAgICAgICB9IGVsc2UgaWYgKHN0ciAhPSAifSIpIHsKICAgICAgICAgIC8vIFdlIHdhbnQgdG8gb3V0cHV0IG5ld2xpbmUgaW5zdGVhZCBvZiBzZW1pY29sb24gYmVjYXVzZSBpdCBtYWtlcwogICAgICAgICAgLy8gdGhlIHJhdyBzdGFjayB0cmFjZXMgbXVjaCBlYXNpZXIgdG8gcmVhZCBhbmQgaXQgYWxzbyBtYWtlcyBsaW5lLQogICAgICAgICAgLy8gYmFzZWQgdG9vbHMgbGlrZSBkaWZmIHdvcmsgbXVjaCBiZXR0ZXIuICBKYXZhU2NyaXB0IHdpbGwKICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgaW5zZXJ0IHRoZSBzZW1pY29sb24gYXQgdGhlIG5ld2xpbmUgaWYgaXQgbWVhbnMgYQogICAgICAgICAgLy8gcGFyc2luZyBlcnJvciBpcyBhdm9pZGVkLCBzbyB3ZSBjYW4gb25seSBkbyB0aGlzIHRyaWNrIGlmIHRoZQogICAgICAgICAgLy8gbmV4dCBsaW5lIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZ2x1ZWQgb250byBhIHZhbGlkCiAgICAgICAgICAvLyBleHByZXNzaW9uIHRvIG1ha2UgYSBuZXcgdmFsaWQgZXhwcmVzc2lvbi4KCiAgICAgICAgICAvLyBJZiB3ZSdyZSB1c2luZyB0aGUgbmV3IGVtaXR0ZXIgd2hlcmUgbW9zdCBwcmV0dHkgcHJpbnRlZCBjb2RlCiAgICAgICAgICAvLyBpcyBlc2NhcGVkIGluIHN0cmluZ3MsIGl0IGlzIGEgbG90IGVhc2llciB0byBkZWFsIHdpdGggc2VtaWNvbG9ucwogICAgICAgICAgLy8gdGhhbiBuZXdsaW5lcyBiZWNhdXNlIHRoZSBmb3JtZXIgZG9lc24ndCBuZWVkIGVzY2FwaW5nLgogICAgICAgICAgaWYgKG9wdGlvbnMucHJlZmVyU2VtaWNvbG9uVG9OZXdsaW5lSW5NaW5pZmllZE91dHB1dCB8fAogICAgICAgICAgICAgIGV4cHJlc3Npb25Db250aW51YXRpb25SZWdFeHAuaGFzTWF0Y2goc3RyKSkgewogICAgICAgICAgICBfZW1pdCgiOyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2VtaXQoIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChwZW5kaW5nU3BhY2UgJiYKICAgICAgICAgICghc2hvdWxkQ29tcHJlc3NPdXRwdXQgfHwgaWRlbnRpZmllckNoYXJhY3RlclJlZ0V4cC5oYXNNYXRjaChzdHIpKSkgewogICAgICAgIF9lbWl0KCIgIik7CiAgICAgIH0KICAgICAgcGVuZGluZ1NwYWNlID0gZmFsc2U7CiAgICAgIHBlbmRpbmdTZW1pY29sb24gPSBmYWxzZTsKICAgICAgaWYgKCFpc1doaXRlc3BhY2UpIHsKICAgICAgICBlbnRlck5vZGUoKTsKICAgICAgfQogICAgICBfZW1pdChzdHIpOwogICAgICBsYXN0QWRkZWRTdHJpbmcgPSBzdHI7CiAgICB9CiAgfQoKICB2b2lkIG91dExuKFN0cmluZyBzdHIpIHsKICAgIG91dChzdHIpOwogICAgbGluZU91dCgpOwogIH0KCiAgdm9pZCBvdXRTZW1pY29sb25MbigpIHsKICAgIGlmIChzaG91bGRDb21wcmVzc091dHB1dCkgewogICAgICBwZW5kaW5nU2VtaWNvbG9uID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIG91dCgiOyIpOwogICAgICBmb3JjZUxpbmUoKTsKICAgIH0KICB9CgogIHZvaWQgb3V0SW5kZW50KFN0cmluZyBzdHIpIHsKICAgIGluZGVudCgpOwogICAgb3V0KHN0cik7CiAgfQoKICB2b2lkIG91dEluZGVudExuKFN0cmluZyBzdHIpIHsKICAgIGluZGVudCgpOwogICAgb3V0TG4oc3RyKTsKICB9CgogIHZvaWQgaW5kZW50KCkgewogICAgaWYgKCFzaG91bGRDb21wcmVzc091dHB1dCkgewogICAgICBvdXQoaW5kZW50YXRpb24sIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICB9CiAgfQoKICBFbnRlckV4aXROb2RlIGN1cnJlbnROb2RlOwoKICB2b2lkIF9lbWl0KFN0cmluZyB0ZXh0KSB7CiAgICBjb250ZXh0LmVtaXQodGV4dCk7CiAgICBfY2hhckNvdW50ICs9IHRleHQubGVuZ3RoOwogIH0KCiAgdm9pZCBzdGFydE5vZGUoTm9kZSBub2RlKSB7CiAgICBjdXJyZW50Tm9kZSA9IG5ldyBFbnRlckV4aXROb2RlKGN1cnJlbnROb2RlLCBub2RlKTsKICAgIGlmIChub2RlIGlzIERlZmVycmVkRXhwcmVzc2lvbikgewogICAgICBzdGFydE5vZGUobm9kZS52YWx1ZSk7CiAgICB9CiAgfQoKICB2b2lkIGVudGVyTm9kZSgpIHsKICAgIGN1cnJlbnROb2RlLmFkZFRvTm9kZShjb250ZXh0LCBfY2hhckNvdW50KTsKICB9CgogIHZvaWQgZW5kTm9kZShOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIERlZmVycmVkRXhwcmVzc2lvbikgewogICAgICBlbmROb2RlKG5vZGUudmFsdWUpOwogICAgfQogICAgYXNzZXJ0KGN1cnJlbnROb2RlLm5vZGUgPT0gbm9kZSk7CiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmV4aXROb2RlKGNvbnRleHQsIF9jaGFyQ291bnQpOwogIH0KCiAgdm9pZCB2aXNpdChOb2RlIG5vZGUpIHsKICAgIHN0YXJ0Tm9kZShub2RlKTsKICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgZW5kTm9kZShub2RlKTsKICB9CgogIHZvaWQgdmlzaXRDb21tYVNlcGFyYXRlZChMaXN0PE5vZGU+IG5vZGVzLCBpbnQgaGFzUmVxdWlyZWRUeXBlLAogICAgICB7Ym9vbCBuZXdJbkZvckluaXQsIGJvb2wgbmV3QXRTdGF0ZW1lbnRCZWdpbn0pIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgIT0gMCkgewogICAgICAgIGF0U3RhdGVtZW50QmVnaW4gPSBmYWxzZTsKICAgICAgICBvdXQoIiwiKTsKICAgICAgICBzcGFjZU91dCgpOwogICAgICB9CiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2Rlc1tpXSwgaGFzUmVxdWlyZWRUeXBlLAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBuZXdJbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IG5ld0F0U3RhdGVtZW50QmVnaW4pOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdEFsbChMaXN0PE5vZGU+IG5vZGVzKSB7CiAgICBub2Rlcy5mb3JFYWNoKHZpc2l0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcm9ncmFtKFByb2dyYW0gcHJvZ3JhbSkgewogICAgaWYgKHByb2dyYW0uYm9keS5pc05vdEVtcHR5KSB7CiAgICAgIHZpc2l0QWxsKHByb2dyYW0uYm9keSk7CiAgICB9CiAgfQoKICBTdGF0ZW1lbnQgdW53cmFwQmxvY2tJZlNpbmdsZVN0YXRlbWVudChTdGF0ZW1lbnQgYm9keSkgewogICAgU3RhdGVtZW50IHJlc3VsdCA9IGJvZHk7CiAgICB3aGlsZSAocmVzdWx0IGlzIEJsb2NrKSB7CiAgICAgIEJsb2NrIGJsb2NrID0gcmVzdWx0OwogICAgICBpZiAoYmxvY2suc3RhdGVtZW50cy5sZW5ndGggIT0gMSkgYnJlYWs7CiAgICAgIHJlc3VsdCA9IGJsb2NrLnN0YXRlbWVudHMuc2luZ2xlOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgYmxvY2tCb2R5KFN0YXRlbWVudCBib2R5LCB7Ym9vbCBuZWVkc1NlcGFyYXRpb24sIGJvb2wgbmVlZHNOZXdsaW5lfSkgewogICAgaWYgKGJvZHkgaXMgQmxvY2spIHsKICAgICAgc3BhY2VPdXQoKTsKICAgICAgYmxvY2tPdXQoYm9keSwgc2hvdWxkSW5kZW50OiBmYWxzZSwgbmVlZHNOZXdsaW5lOiBuZWVkc05ld2xpbmUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChzaG91bGRDb21wcmVzc091dHB1dCAmJiBuZWVkc1NlcGFyYXRpb24pIHsKICAgICAgLy8gSWYgW3Nob3VsZENvbXByZXNzT3V0cHV0XSBpcyBmYWxzZSwgdGhlbiB0aGUgJ2xpbmVPdXQnIHdpbGwgaW5zZXJ0CiAgICAgIC8vIHRoZSBzZXBhcmF0aW9uLgogICAgICBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgbGluZU91dCgpOwogICAgfQogICAgaW5kZW50TW9yZSgpOwogICAgdmlzaXQoYm9keSk7CiAgICBpbmRlbnRMZXNzKCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIGJsb2NrT3V0V2l0aG91dEJyYWNlcyhOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIEJsb2NrKSB7CiAgICAgIHN0YXJ0Tm9kZShub2RlKTsKICAgICAgQmxvY2sgYmxvY2sgPSBub2RlOwogICAgICBibG9jay5zdGF0ZW1lbnRzLmZvckVhY2goYmxvY2tPdXRXaXRob3V0QnJhY2VzKTsKICAgICAgZW5kTm9kZShub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHZpc2l0KG5vZGUpOwogICAgfQogIH0KCiAgaW50IGJsb2NrT3V0KEJsb2NrIG5vZGUsIHtib29sIHNob3VsZEluZGVudCwgYm9vbCBuZWVkc05ld2xpbmV9KSB7CiAgICBpZiAoc2hvdWxkSW5kZW50KSBpbmRlbnQoKTsKICAgIHN0YXJ0Tm9kZShub2RlKTsKICAgIG91dCgieyIpOwogICAgbGluZU91dCgpOwogICAgaW5kZW50TW9yZSgpOwogICAgbm9kZS5zdGF0ZW1lbnRzLmZvckVhY2goYmxvY2tPdXRXaXRob3V0QnJhY2VzKTsKICAgIGluZGVudExlc3MoKTsKICAgIGluZGVudCgpOwogICAgb3V0KCJ9Iik7CiAgICBpbnQgY2xvc2luZ1Bvc2l0aW9uID0gX2NoYXJDb3VudCAtIDE7CiAgICBlbmROb2RlKG5vZGUpOwogICAgaWYgKG5lZWRzTmV3bGluZSkgbGluZU91dCgpOwogICAgcmV0dXJuIGNsb3NpbmdQb3NpdGlvbjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCbG9jayhCbG9jayBibG9jaykgewogICAgYmxvY2tPdXQoYmxvY2ssIHNob3VsZEluZGVudDogdHJ1ZSwgbmVlZHNOZXdsaW5lOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgaW5kZW50KCk7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IHRydWUpOwogICAgb3V0U2VtaWNvbG9uTG4oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICBvdXRJbmRlbnRMbigiOyIpOwogIH0KCiAgdm9pZCBpZk91dChJZiBub2RlLCBib29sIHNob3VsZEluZGVudCkgewogICAgU3RhdGVtZW50IHRoZW4gPSB1bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50KG5vZGUudGhlbik7CiAgICBTdGF0ZW1lbnQgZWxzZVBhcnQgPSBub2RlLm90aGVyd2lzZTsKICAgIGJvb2wgaGFzRWxzZSA9IG5vZGUuaGFzRWxzZTsKCiAgICAvLyBIYW5kbGUgZGFuZ2xpbmcgZWxzZXMgYW5kIGEgd29yay1hcm91bmQgZm9yIEFuZHJvaWQgNC4wIHN0b2NrIGJyb3dzZXIuCiAgICAvLyBBbmRyb2lkIDQuMCByZXF1aXJlcyBicmFjZXMgZm9yIGEgc2luZ2xlIGRvLXdoaWxlIGluIHRoZSBgdGhlbmAgYnJhbmNoLgogICAgLy8gU2VlIGlzc3VlIDEwOTIzLgogICAgaWYgKGhhc0Vsc2UpIHsKICAgICAgYm9vbCBuZWVkc0JyYWNlcyA9IHRoZW4uYWNjZXB0KGRhbmdsaW5nRWxzZVZpc2l0b3IpIHx8IHRoZW4gaXMgRG87CiAgICAgIGlmIChuZWVkc0JyYWNlcykgewogICAgICAgIHRoZW4gPSBuZXcgQmxvY2soPFN0YXRlbWVudD5bdGhlbl0pOwogICAgICB9CiAgICB9CiAgICBpZiAoc2hvdWxkSW5kZW50KSBpbmRlbnQoKTsKICAgIG91dCgiaWYiKTsKICAgIHNwYWNlT3V0KCk7CiAgICBvdXQoIigiKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbiwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIikiKTsKICAgIGJvb2wgdGhlbldhc0Jsb2NrID0KICAgICAgICBibG9ja0JvZHkodGhlbiwgbmVlZHNTZXBhcmF0aW9uOiBmYWxzZSwgbmVlZHNOZXdsaW5lOiAhaGFzRWxzZSk7CiAgICBpZiAoaGFzRWxzZSkgewogICAgICBpZiAodGhlbldhc0Jsb2NrKSB7CiAgICAgICAgc3BhY2VPdXQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbmRlbnQoKTsKICAgICAgfQogICAgICBvdXQoImVsc2UiKTsKICAgICAgaWYgKGVsc2VQYXJ0IGlzIElmKSB7CiAgICAgICAgcGVuZGluZ1NwYWNlID0gdHJ1ZTsKICAgICAgICBzdGFydE5vZGUoZWxzZVBhcnQpOwogICAgICAgIGlmT3V0KGVsc2VQYXJ0LCBmYWxzZSk7CiAgICAgICAgZW5kTm9kZShlbHNlUGFydCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2tCb2R5KHVud3JhcEJsb2NrSWZTaW5nbGVTdGF0ZW1lbnQoZWxzZVBhcnQpLAogICAgICAgICAgICBuZWVkc1NlcGFyYXRpb246IHRydWUsIG5lZWRzTmV3bGluZTogdHJ1ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZihJZiBub2RlKSB7CiAgICBpZk91dChub2RlLCB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3IoRm9yIGxvb3ApIHsKICAgIG91dEluZGVudCgiZm9yIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICBpZiAobG9vcC5pbml0ICE9IG51bGwpIHsKICAgICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGxvb3AuaW5pdCwgRVhQUkVTU0lPTiwKICAgICAgICAgIG5ld0luRm9ySW5pdDogdHJ1ZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfQogICAgb3V0KCI7Iik7CiAgICBpZiAobG9vcC5jb25kaXRpb24gIT0gbnVsbCkgewogICAgICBzcGFjZU91dCgpOwogICAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC5jb25kaXRpb24sIEVYUFJFU1NJT04sCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICB9CiAgICBvdXQoIjsiKTsKICAgIGlmIChsb29wLnVwZGF0ZSAhPSBudWxsKSB7CiAgICAgIHNwYWNlT3V0KCk7CiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihsb29wLnVwZGF0ZSwgRVhQUkVTU0lPTiwKICAgICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIH0KICAgIG91dCgiKSIpOwogICAgYmxvY2tCb2R5KHVud3JhcEJsb2NrSWZTaW5nbGVTdGF0ZW1lbnQobG9vcC5ib2R5KSwKICAgICAgICBuZWVkc1NlcGFyYXRpb246IGZhbHNlLCBuZWVkc05ld2xpbmU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvckluKEZvckluIGxvb3ApIHsKICAgIG91dEluZGVudCgiZm9yIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC5sZWZ0SGFuZFNpZGUsIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiB0cnVlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIiBpbiIpOwogICAgcGVuZGluZ1NwYWNlID0gdHJ1ZTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihsb29wLm9iamVjdCwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIikiKTsKICAgIGJsb2NrQm9keSh1bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50KGxvb3AuYm9keSksCiAgICAgICAgbmVlZHNTZXBhcmF0aW9uOiBmYWxzZSwgbmVlZHNOZXdsaW5lOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRXaGlsZShXaGlsZSBsb29wKSB7CiAgICBvdXRJbmRlbnQoIndoaWxlIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC5jb25kaXRpb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBibG9ja0JvZHkodW53cmFwQmxvY2tJZlNpbmdsZVN0YXRlbWVudChsb29wLmJvZHkpLAogICAgICAgIG5lZWRzU2VwYXJhdGlvbjogZmFsc2UsIG5lZWRzTmV3bGluZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG8oRG8gbG9vcCkgewogICAgb3V0SW5kZW50KCJkbyIpOwogICAgaWYgKGJsb2NrQm9keSh1bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50KGxvb3AuYm9keSksCiAgICAgICAgbmVlZHNTZXBhcmF0aW9uOiB0cnVlLCBuZWVkc05ld2xpbmU6IGZhbHNlKSkgewogICAgICBzcGFjZU91dCgpOwogICAgfSBlbHNlIHsKICAgICAgaW5kZW50KCk7CiAgICB9CiAgICBvdXQoIndoaWxlIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC5jb25kaXRpb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBvdXRTZW1pY29sb25MbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRpbnVlKENvbnRpbnVlIG5vZGUpIHsKICAgIGlmIChub2RlLnRhcmdldExhYmVsID09IG51bGwpIHsKICAgICAgb3V0SW5kZW50KCJjb250aW51ZSIpOwogICAgfSBlbHNlIHsKICAgICAgb3V0SW5kZW50KCJjb250aW51ZSAke25vZGUudGFyZ2V0TGFiZWx9Iik7CiAgICB9CiAgICBvdXRTZW1pY29sb25MbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJyZWFrKEJyZWFrIG5vZGUpIHsKICAgIGlmIChub2RlLnRhcmdldExhYmVsID09IG51bGwpIHsKICAgICAgb3V0SW5kZW50KCJicmVhayIpOwogICAgfSBlbHNlIHsKICAgICAgb3V0SW5kZW50KCJicmVhayAke25vZGUudGFyZ2V0TGFiZWx9Iik7CiAgICB9CiAgICBvdXRTZW1pY29sb25MbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJldHVybihSZXR1cm4gbm9kZSkgewogICAgaWYgKG5vZGUudmFsdWUgPT0gbnVsbCkgewogICAgICBvdXRJbmRlbnQoInJldHVybiIpOwogICAgfSBlbHNlIHsKICAgICAgb3V0SW5kZW50KCJyZXR1cm4iKTsKICAgICAgcGVuZGluZ1NwYWNlID0gdHJ1ZTsKICAgICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUudmFsdWUsIEVYUFJFU1NJT04sCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICB9CiAgICAvLyBTZXQgdGhlIGNsb3NpbmcgcG9zaXRpb24gdG8gYmUgYmVmb3JlIHRoZSBvcHRpb25hbCBzZW1pY29sb24uCiAgICBjdXJyZW50Tm9kZS5jbG9zaW5nUG9zaXRpb24gPSBfY2hhckNvdW50OwogICAgb3V0U2VtaWNvbG9uTG4oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREYXJ0WWllbGQoRGFydFlpZWxkIG5vZGUpIHsKICAgIGlmIChub2RlLmhhc1N0YXIpIHsKICAgICAgb3V0SW5kZW50KCJ5aWVsZCoiKTsKICAgIH0gZWxzZSB7CiAgICAgIG91dEluZGVudCgieWllbGQiKTsKICAgIH0KICAgIHBlbmRpbmdTcGFjZSA9IHRydWU7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dFNlbWljb2xvbkxuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhyb3coVGhyb3cgbm9kZSkgewogICAgb3V0SW5kZW50KCJ0aHJvdyIpOwogICAgcGVuZGluZ1NwYWNlID0gdHJ1ZTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0U2VtaWNvbG9uTG4oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUcnkoVHJ5IG5vZGUpIHsKICAgIG91dEluZGVudCgidHJ5Iik7CiAgICBibG9ja0JvZHkobm9kZS5ib2R5LCBuZWVkc1NlcGFyYXRpb246IHRydWUsIG5lZWRzTmV3bGluZTogZmFsc2UpOwogICAgaWYgKG5vZGUuY2F0Y2hQYXJ0ICE9IG51bGwpIHsKICAgICAgdmlzaXQobm9kZS5jYXRjaFBhcnQpOwogICAgfQogICAgaWYgKG5vZGUuZmluYWxseVBhcnQgIT0gbnVsbCkgewogICAgICBzcGFjZU91dCgpOwogICAgICBvdXQoImZpbmFsbHkiKTsKICAgICAgYmxvY2tCb2R5KG5vZGUuZmluYWxseVBhcnQsIG5lZWRzU2VwYXJhdGlvbjogdHJ1ZSwgbmVlZHNOZXdsaW5lOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpbmVPdXQoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYXRjaChDYXRjaCBub2RlKSB7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCJjYXRjaCIpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiKCIpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUuZGVjbGFyYXRpb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBibG9ja0JvZHkobm9kZS5ib2R5LCBuZWVkc1NlcGFyYXRpb246IGZhbHNlLCBuZWVkc05ld2xpbmU6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTd2l0Y2goU3dpdGNoIG5vZGUpIHsKICAgIG91dEluZGVudCgic3dpdGNoIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5rZXksIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0TG4oInsiKTsKICAgIGluZGVudE1vcmUoKTsKICAgIHZpc2l0QWxsKG5vZGUuY2FzZXMpOwogICAgaW5kZW50TGVzcygpOwogICAgb3V0SW5kZW50TG4oIn0iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYXNlKENhc2Ugbm9kZSkgewogICAgb3V0SW5kZW50KCJjYXNlIik7CiAgICBwZW5kaW5nU3BhY2UgPSB0cnVlOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXRMbigiOiIpOwogICAgaWYgKCFub2RlLmJvZHkuc3RhdGVtZW50cy5pc0VtcHR5KSB7CiAgICAgIGluZGVudE1vcmUoKTsKICAgICAgYmxvY2tPdXRXaXRob3V0QnJhY2VzKG5vZGUuYm9keSk7CiAgICAgIGluZGVudExlc3MoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREZWZhdWx0KERlZmF1bHQgbm9kZSkgewogICAgb3V0SW5kZW50TG4oImRlZmF1bHQ6Iik7CiAgICBpZiAoIW5vZGUuYm9keS5zdGF0ZW1lbnRzLmlzRW1wdHkpIHsKICAgICAgaW5kZW50TW9yZSgpOwogICAgICBibG9ja091dFdpdGhvdXRCcmFjZXMobm9kZS5ib2R5KTsKICAgICAgaW5kZW50TGVzcygpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHVud3JhcEJsb2NrSWZTaW5nbGVTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICAgIC8vIGBsYWJlbDogYnJlYWsgbGFiZWw7YAogICAgLy8gRG9lcyBub3Qgd29yayBvbiBJRS4gVGhlIHN0YXRlbWVudCBpcyBhIG5vcCwgc28gcmVwbGFjZSBpdCBieSBhbiBlbXB0eQogICAgLy8gc3RhdGVtZW50LgogICAgLy8gU2VlOgogICAgLy8gaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy84OTE4ODkvcGFyc2VyLWJ1Z3MKICAgIGlmIChib2R5IGlzIEJyZWFrICYmIGJvZHkudGFyZ2V0TGFiZWwgPT0gbm9kZS5sYWJlbCkgewogICAgICB2aXNpdChuZXcgRW1wdHlTdGF0ZW1lbnQoKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIG91dEluZGVudCgiJHtub2RlLmxhYmVsfToiKTsKICAgIGJsb2NrQm9keShib2R5LCBuZWVkc1NlcGFyYXRpb246IGZhbHNlLCBuZWVkc05ld2xpbmU6IHRydWUpOwogIH0KCiAgaW50IGZ1bmN0aW9uT3V0KEZ1biBmdW4sIE5vZGUgbmFtZSwgVmFyQ29sbGVjdG9yIHZhcnMpIHsKICAgIG91dCgiZnVuY3Rpb24iKTsKICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgb3V0KCIgIik7CiAgICAgIC8vIE5hbWUgbXVzdCBiZSBhIFtEZWNsXS4gVGhlcmVmb3JlIG9ubHkgdGVzdCBmb3IgcHJpbWFyeSBleHByZXNzaW9ucy4KICAgICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5hbWUsIFBSSU1BUlksCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICB9CiAgICBsb2NhbE5hbWVyLmVudGVyU2NvcGUodmFycyk7CiAgICBvdXQoIigiKTsKICAgIGlmIChmdW4ucGFyYW1zICE9IG51bGwpIHsKICAgICAgdmlzaXRDb21tYVNlcGFyYXRlZChmdW4ucGFyYW1zLCBQUklNQVJZLAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfQogICAgb3V0KCIpIik7CiAgICBzd2l0Y2ggKGZ1bi5hc3luY01vZGlmaWVyKSB7CiAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5zeW5jOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEFzeW5jTW9kaWZpZXIuYXN5bmM6CiAgICAgICAgb3V0KCcgJywgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgICBvdXQoJ2FzeW5jJyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5zeW5jU3RhcjoKICAgICAgICBvdXQoJyAnLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIG91dCgnc3luYyonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBBc3luY01vZGlmaWVyLmFzeW5jU3RhcjoKICAgICAgICBvdXQoJyAnLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIG91dCgnYXN5bmMqJyk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBzcGFjZU91dCgpOwogICAgaW50IGNsb3NpbmdQb3NpdGlvbiA9CiAgICAgICAgYmxvY2tPdXQoZnVuLmJvZHksIHNob3VsZEluZGVudDogZmFsc2UsIG5lZWRzTmV3bGluZTogZmFsc2UpOwogICAgbG9jYWxOYW1lci5sZWF2ZVNjb3BlKCk7CiAgICByZXR1cm4gY2xvc2luZ1Bvc2l0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gZGVjbGFyYXRpb24pIHsKICAgIFZhckNvbGxlY3RvciB2YXJzID0gbmV3IFZhckNvbGxlY3RvcigpOwogICAgdmFycy52aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pOwogICAgaW5kZW50KCk7CiAgICBzdGFydE5vZGUoZGVjbGFyYXRpb24uZnVuY3Rpb24pOwogICAgY3VycmVudE5vZGUuY2xvc2luZ1Bvc2l0aW9uID0KICAgICAgICBmdW5jdGlvbk91dChkZWNsYXJhdGlvbi5mdW5jdGlvbiwgZGVjbGFyYXRpb24ubmFtZSwgdmFycyk7CiAgICBlbmROb2RlKGRlY2xhcmF0aW9uLmZ1bmN0aW9uKTsKICAgIGxpbmVPdXQoKTsKICB9CgogIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUsIGludCByZXF1aXJlZFByZWNlZGVuY2UsCiAgICAgIHtib29sIG5ld0luRm9ySW5pdCwgYm9vbCBuZXdBdFN0YXRlbWVudEJlZ2lufSkgewogICAgYm9vbCBuZWVkc1BhcmVudGhlc2VzID0KICAgICAgICAvLyBhIC0gKGIgKyBjKS4KICAgICAgICAocmVxdWlyZWRQcmVjZWRlbmNlICE9IEVYUFJFU1NJT04gJiYKICAgICAgICAgICAgICAgIG5vZGUucHJlY2VkZW5jZUxldmVsIDwgcmVxdWlyZWRQcmVjZWRlbmNlKSB8fAogICAgICAgICAgICAvLyBmb3IgKGEgPSAoeCBpbiBvKTsgLi4uIDsgLi4uICkgeyAuLi4gfQogICAgICAgICAgICAobmV3SW5Gb3JJbml0ICYmIG5vZGUgaXMgQmluYXJ5ICYmIG5vZGUub3AgPT0gImluIikgfHwKICAgICAgICAgICAgLy8gKGZ1bmN0aW9uKCkgeyAuLi4gfSkoKS4KICAgICAgICAgICAgLy8gKHthOiAyLCBiOiAzfS50b1N0cmluZygpKS4KICAgICAgICAgICAgKG5ld0F0U3RhdGVtZW50QmVnaW4gJiYKICAgICAgICAgICAgICAgIChub2RlIGlzIE5hbWVkRnVuY3Rpb24gfHwKICAgICAgICAgICAgICAgICAgICBub2RlIGlzIEZ1biB8fAogICAgICAgICAgICAgICAgICAgIG5vZGUgaXMgT2JqZWN0SW5pdGlhbGl6ZXIpKTsKICAgIGlmIChuZWVkc1BhcmVudGhlc2VzKSB7CiAgICAgIGluRm9ySW5pdCA9IGZhbHNlOwogICAgICBhdFN0YXRlbWVudEJlZ2luID0gZmFsc2U7CiAgICAgIG91dCgiKCIpOwogICAgICB2aXNpdChub2RlKTsKICAgICAgb3V0KCIpIik7CiAgICB9IGVsc2UgewogICAgICBpbkZvckluaXQgPSBuZXdJbkZvckluaXQ7CiAgICAgIGF0U3RhdGVtZW50QmVnaW4gPSBuZXdBdFN0YXRlbWVudEJlZ2luOwogICAgICB2aXNpdChub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgbGlzdCkgewogICAgb3V0KCJ2YXIgIik7CiAgICBMaXN0PE5vZGU+IG5vZGVzID0gbGlzdC5kZWNsYXJhdGlvbnM7CiAgICBpZiAoaW5Gb3JJbml0KSB7CiAgICAgIHZpc2l0Q29tbWFTZXBhcmF0ZWQobm9kZXMsIEFTU0lHTk1FTlQsCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUHJpbnQgJ2JpZycgZGVjbGFyYXRpb25zIG9uIHRoZWlyIG93biBsaW5lLCB3aGlsZSBrZWVwaW5nIGFkamFjZW50CiAgICAgIC8vIHNtYWxsIGFuZCB1bmluaXRpYWxpemVkIGRlY2xhcmF0aW9ucyBvbiB0aGUgc2FtZSBsaW5lLgogICAgICBib29sIHVzZUluZGVudCA9IG5vZGVzLmxlbmd0aCA+IDEgJiYgbGlzdC5pbmRlbnRTcGxpdHM7CiAgICAgIGlmICh1c2VJbmRlbnQpIHsKICAgICAgICBpbmRlbnRNb3JlKCk7CiAgICAgIH0KICAgICAgYm9vbCBsYXN0V2FzQmlnID0gZmFsc2U7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBOb2RlIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgICBib29sIHRoaXNJc0JpZyA9ICFfaXNTbWFsbEluaXRpYWxpemF0aW9uKG5vZGUpOwogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgYXRTdGF0ZW1lbnRCZWdpbiA9IGZhbHNlOwogICAgICAgICAgb3V0KCIsIik7CiAgICAgICAgICBpZiAobGFzdFdhc0JpZyB8fCB0aGlzSXNCaWcpIHsKICAgICAgICAgICAgbGluZU91dCgpOwogICAgICAgICAgICBpbmRlbnQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNwYWNlT3V0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLCBBU1NJR05NRU5ULAogICAgICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgICAgIGxhc3RXYXNCaWcgPSB0aGlzSXNCaWc7CiAgICAgIH0KICAgICAgaWYgKHVzZUluZGVudCkgewogICAgICAgIGluZGVudExlc3MoKTsKICAgICAgfQogICAgfQogIH0KCiAgc3RhdGljIGJvb2wgX2lzU21hbGxJbml0aWFsaXphdGlvbihOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIFZhcmlhYmxlSW5pdGlhbGl6YXRpb24pIHsKICAgICAgTm9kZSB2YWx1ZSA9IHVuZGVmZXIobm9kZS52YWx1ZSk7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHZhbHVlIGlzIFRoaXMpIHJldHVybiB0cnVlOwogICAgICBpZiAodmFsdWUgaXMgTGl0ZXJhbE51bGwpIHJldHVybiB0cnVlOwogICAgICBpZiAodmFsdWUgaXMgTGl0ZXJhbE51bWJlcikgcmV0dXJuIHRydWU7CiAgICAgIGlmICh2YWx1ZSBpcyBMaXRlcmFsU3RyaW5nICYmIHZhbHVlLnZhbHVlLmxlbmd0aCA8PSA4KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHZhbHVlIGlzIE9iamVjdEluaXRpYWxpemVyICYmIHZhbHVlLnByb3BlcnRpZXMuaXNFbXB0eSkgcmV0dXJuIHRydWU7CiAgICAgIGlmICh2YWx1ZSBpcyBBcnJheUluaXRpYWxpemVyICYmIHZhbHVlLmVsZW1lbnRzLmlzRW1wdHkpIHJldHVybiB0cnVlOwogICAgICBpZiAodmFsdWUgaXMgTmFtZSAmJiB2YWx1ZS5uYW1lLmxlbmd0aCA8PSA4KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgX291dHB1dEluY0RlYyhTdHJpbmcgb3AsIEV4cHJlc3Npb24gdmFyaWFibGUsIFtFeHByZXNzaW9uIGFsaWFzXSkgewogICAgaWYgKG9wID09ICcrJykgewogICAgICBpZiAobGFzdENoYXJDb2RlID09IGNoYXJDb2Rlcy4kUExVUykgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgb3V0KCcrKycpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGxhc3RDaGFyQ29kZSA9PSBjaGFyQ29kZXMuJE1JTlVTKSBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICBvdXQoJy0tJyk7CiAgICB9CiAgICBpZiAoYWxpYXMgIT0gbnVsbCkgc3RhcnROb2RlKGFsaWFzKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbih2YXJpYWJsZSwgVU5BUlksCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIGlmIChhbGlhcyAhPSBudWxsKSBlbmROb2RlKGFsaWFzKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNzaWdubWVudChBc3NpZ25tZW50IGFzc2lnbm1lbnQpIHsKICAgIC8vLyBUbyBwcmludCBhc3NpZ25tZW50cyBsaWtlIGBhID0gYSArIDFgIGFuZCBgYSA9IGEgKyBiYCBjb21wYWN0bHkgYXMKICAgIC8vLyBgKythYCBhbmQgYGEgKz0gYmAgaW4gdGhlIGZhY2Ugb2YgW0RlZmVycmVkRXhwcmVzc2lvbl1zIHdlIGRldGVjdCB0aGUKICAgIC8vLyBwYXR0ZXJuIG9mIHRoZSB1bmRlZmVycmVkIGFzc2lnbm1lbnQuCiAgICBTdHJpbmcgb3AgPSBhc3NpZ25tZW50Lm9wOwogICAgTm9kZSBsZWZ0SGFuZFNpZGUgPSB1bmRlZmVyKGFzc2lnbm1lbnQubGVmdEhhbmRTaWRlKTsKICAgIE5vZGUgcmlnaHRIYW5kU2lkZSA9IHVuZGVmZXIoYXNzaWdubWVudC52YWx1ZSk7CiAgICBpZiAoKG9wID09ICcrJyB8fCBvcCA9PSAnLScpICYmCiAgICAgICAgbGVmdEhhbmRTaWRlIGlzIFZhcmlhYmxlVXNlICYmCiAgICAgICAgcmlnaHRIYW5kU2lkZSBpcyBMaXRlcmFsTnVtYmVyICYmCiAgICAgICAgcmlnaHRIYW5kU2lkZS52YWx1ZSA9PSAiMSIpIHsKICAgICAgLy8gT3V0cHV0ICdhICs9IDEnIGFzICcrK2EnIGFuZCAnYSAtPSAxJyBhcyAnLS1hJy4KICAgICAgX291dHB1dEluY0RlYyhvcCwgYXNzaWdubWVudC5sZWZ0SGFuZFNpZGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIWFzc2lnbm1lbnQuaXNDb21wb3VuZCAmJgogICAgICAgIGxlZnRIYW5kU2lkZSBpcyBWYXJpYWJsZVVzZSAmJgogICAgICAgIHJpZ2h0SGFuZFNpZGUgaXMgQmluYXJ5KSB7CiAgICAgIE5vZGUgckxlZnQgPSB1bmRlZmVyKHJpZ2h0SGFuZFNpZGUubGVmdCk7CiAgICAgIE5vZGUgclJpZ2h0ID0gdW5kZWZlcihyaWdodEhhbmRTaWRlLnJpZ2h0KTsKICAgICAgU3RyaW5nIG9wID0gcmlnaHRIYW5kU2lkZS5vcDsKICAgICAgaWYgKG9wID09ICcrJyB8fAogICAgICAgICAgb3AgPT0gJy0nIHx8CiAgICAgICAgICBvcCA9PSAnLycgfHwKICAgICAgICAgIG9wID09ICcqJyB8fAogICAgICAgICAgb3AgPT0gJyUnIHx8CiAgICAgICAgICBvcCA9PSAnXicgfHwKICAgICAgICAgIG9wID09ICcmJyB8fAogICAgICAgICAgb3AgPT0gJ3wnKSB7CiAgICAgICAgaWYgKHJMZWZ0IGlzIFZhcmlhYmxlVXNlICYmIHJMZWZ0Lm5hbWUgPT0gbGVmdEhhbmRTaWRlLm5hbWUpIHsKICAgICAgICAgIC8vIE91dHB1dCAnYSA9IGEgKyAxJyBhcyAnKythJyBhbmQgJ2EgPSBhIC0gMScgYXMgJy0tYScuCiAgICAgICAgICBpZiAoKG9wID09ICcrJyB8fCBvcCA9PSAnLScpICYmCiAgICAgICAgICAgICAgclJpZ2h0IGlzIExpdGVyYWxOdW1iZXIgJiYKICAgICAgICAgICAgICByUmlnaHQudmFsdWUgPT0gIjEiKSB7CiAgICAgICAgICAgIF9vdXRwdXRJbmNEZWMob3AsIGFzc2lnbm1lbnQubGVmdEhhbmRTaWRlLCByaWdodEhhbmRTaWRlLmxlZnQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICAvLyBPdXRwdXQgJ2EgPSBhICsgYicgYXMgJ2EgKz0gYicuCiAgICAgICAgICBzdGFydE5vZGUocmlnaHRIYW5kU2lkZS5sZWZ0KTsKICAgICAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihhc3NpZ25tZW50LmxlZnRIYW5kU2lkZSwgQ0FMTCwKICAgICAgICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CiAgICAgICAgICBlbmROb2RlKHJpZ2h0SGFuZFNpZGUubGVmdCk7CiAgICAgICAgICBzcGFjZU91dCgpOwogICAgICAgICAgb3V0KG9wKTsKICAgICAgICAgIG91dCgiPSIpOwogICAgICAgICAgc3BhY2VPdXQoKTsKICAgICAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihyUmlnaHQsIEFTU0lHTk1FTlQsCiAgICAgICAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihhc3NpZ25tZW50LmxlZnRIYW5kU2lkZSwgQ0FMTCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CiAgICBpZiAoYXNzaWdubWVudC52YWx1ZSAhPSBudWxsKSB7CiAgICAgIHNwYWNlT3V0KCk7CiAgICAgIGlmIChvcCAhPSBudWxsKSBvdXQob3ApOwogICAgICBvdXQoIj0iKTsKICAgICAgc3BhY2VPdXQoKTsKICAgICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGFzc2lnbm1lbnQudmFsdWUsIEFTU0lHTk1FTlQsCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRWYXJpYWJsZUluaXRpYWxpemF0aW9uKFZhcmlhYmxlSW5pdGlhbGl6YXRpb24gaW5pdGlhbGl6YXRpb24pIHsKICAgIHZpc2l0QXNzaWdubWVudChpbml0aWFsaXphdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENvbmRpdGlvbmFsKENvbmRpdGlvbmFsIGNvbmQpIHsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihjb25kLmNvbmRpdGlvbiwgTE9HSUNBTF9PUiwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCI/Iik7CiAgICBzcGFjZU91dCgpOwogICAgLy8gVGhlIHRoZW4gcGFydCBpcyBhbGxvd2VkIHRvIGhhdmUgYW4gJ2luJy4KICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihjb25kLnRoZW4sIEFTU0lHTk1FTlQsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiOiIpOwogICAgc3BhY2VPdXQoKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihjb25kLm90aGVyd2lzZSwgQVNTSUdOTUVOVCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROZXcoTmV3IG5vZGUpIHsKICAgIG91dCgibmV3ICIpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUudGFyZ2V0LCBMRUZUX0hBTkRfU0lERSwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdENvbW1hU2VwYXJhdGVkKG5vZGUuYXJndW1lbnRzLCBBU1NJR05NRU5ULAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dCgiKSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDYWxsKENhbGwgY2FsbCkgewogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGNhbGwudGFyZ2V0LCBDQUxMLAogICAgICAgIG5ld0luRm9ySW5pdDogaW5Gb3JJbml0LCBuZXdBdFN0YXRlbWVudEJlZ2luOiBhdFN0YXRlbWVudEJlZ2luKTsKICAgIG91dCgiKCIpOwogICAgdmlzaXRDb21tYVNlcGFyYXRlZChjYWxsLmFyZ3VtZW50cywgQVNTSUdOTUVOVCwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIikiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCaW5hcnkoQmluYXJ5IGJpbmFyeSkgewogICAgRXhwcmVzc2lvbiBsZWZ0ID0gYmluYXJ5LmxlZnQ7CiAgICBFeHByZXNzaW9uIHJpZ2h0ID0gYmluYXJ5LnJpZ2h0OwogICAgU3RyaW5nIG9wID0gYmluYXJ5Lm9wOwogICAgaW50IGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQ7CiAgICBpbnQgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQ7CiAgICBib29sIGxlZnRTcGFjZSA9IHRydWU7IC8vIGxlZnQ8SEVSRT5vcCByaWdodAogICAgc3dpdGNoIChvcCkgewogICAgICBjYXNlICcsJzoKICAgICAgICAvLyAgeCwgKHksIHopIDw9PiAoeCwgeSksIHouCiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEVYUFJFU1NJT047CiAgICAgICAgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBFWFBSRVNTSU9OOwogICAgICAgIGxlZnRTcGFjZSA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJ8fCI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IExPR0lDQUxfT1I7CiAgICAgICAgLy8geCB8fCAoeSB8fCB6KSA8PT4gKHggfHwgeSkgfHwgei4KICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IExPR0lDQUxfT1I7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIiYmIjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gTE9HSUNBTF9BTkQ7CiAgICAgICAgLy8geCAmJiAoeSAmJiB6KSA8PT4gKHggJiYgeSkgJiYgei4KICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IExPR0lDQUxfQU5EOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJ8IjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gQklUX09SOwogICAgICAgIC8vIHggfCAoeSB8IHopIDw9PiAoeCB8IHkpIHwgei4KICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEJJVF9PUjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiXiI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEJJVF9YT1I7CiAgICAgICAgLy8geCBeICh5IF4geikgPD0+ICh4IF4geSkgXiB6LgogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gQklUX1hPUjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiJiI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEJJVF9BTkQ7CiAgICAgICAgLy8geCAmICh5ICYgeikgPD0+ICh4ICYgeSkgJiB6LgogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gQklUX0FORDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiPT0iOgogICAgICBjYXNlICIhPSI6CiAgICAgIGNhc2UgIj09PSI6CiAgICAgIGNhc2UgIiE9PSI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEVRVUFMSVRZOwogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gUkVMQVRJT05BTDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiPCI6CiAgICAgIGNhc2UgIj4iOgogICAgICBjYXNlICI8PSI6CiAgICAgIGNhc2UgIj49IjoKICAgICAgY2FzZSAiaW5zdGFuY2VvZiI6CiAgICAgIGNhc2UgImluIjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gUkVMQVRJT05BTDsKICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IFNISUZUOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICI+PiI6CiAgICAgIGNhc2UgIjw8IjoKICAgICAgY2FzZSAiPj4+IjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gU0hJRlQ7CiAgICAgICAgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBBRERJVElWRTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiKyI6CiAgICAgIGNhc2UgIi0iOgogICAgICAgIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBBRERJVElWRTsKICAgICAgICAvLyBXZSBjYW5ub3QgcmVtb3ZlIHBhcmVudGhlc2lzIGZvciAiKyIgYmVjYXVzZQogICAgICAgIC8vICAgeCArICh5ICsgeikgPCE9PiAoeCArIHkpICsgejoKICAgICAgICAvLyBFeGFtcGxlOgogICAgICAgIC8vICAgImEiICsgKDEgKyAyKSA9PiAiYTMiOwogICAgICAgIC8vICAgKCJhIiArIDEpICsgMiA9PiAiYTEyIjsKICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IE1VTFRJUExJQ0FUSVZFOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICIqIjoKICAgICAgY2FzZSAiLyI6CiAgICAgIGNhc2UgIiUiOgogICAgICAgIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBNVUxUSVBMSUNBVElWRTsKICAgICAgICAvLyBXZSBjYW5ub3QgcmVtb3ZlIHBhcmVudGhlc2lzIGZvciAiKiIgYmVjYXVzZSBvZiBwcmVjaXNpb24gaXNzdWVzLgogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gVU5BUlk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgY29udGV4dC5lcnJvcigiRm9yZ290IG9wZXJhdG9yOiAkb3AiKTsKICAgIH0KCiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obGVmdCwgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CgogICAgaWYgKG9wID09ICJpbiIgfHwgb3AgPT0gImluc3RhbmNlb2YiKSB7CiAgICAgIC8vIFRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgc3BhY2UgaXMgbm90IHJlcXVpcmVkIGJ1dCB3aXRob3V0IGZ1cnRoZXIKICAgICAgLy8gYW5hbHlzaXMgd2UgY2Fubm90IGtub3cuCiAgICAgIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICAgIG91dChvcCk7CiAgICAgIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBpZiAobGVmdFNwYWNlKSBzcGFjZU91dCgpOwogICAgICBvdXQob3ApOwogICAgICBzcGFjZU91dCgpOwogICAgfQogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKHJpZ2h0LCByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByZWZpeChQcmVmaXggdW5hcnkpIHsKICAgIFN0cmluZyBvcCA9IHVuYXJ5Lm9wOwogICAgc3dpdGNoIChvcCkgewogICAgICBjYXNlICJkZWxldGUiOgogICAgICBjYXNlICJ2b2lkIjoKICAgICAgY2FzZSAidHlwZW9mIjoKICAgICAgICAvLyBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIHNwYWNlIGlzIG5vdCByZXF1aXJlZCBidXQgd2l0aG91dCBmdXJ0aGVyCiAgICAgICAgLy8gYW5hbHlzaXMgd2UgY2Fubm90IGtub3cuCiAgICAgICAgb3V0KG9wKTsKICAgICAgICBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICIrIjoKICAgICAgY2FzZSAiKysiOgogICAgICAgIGlmIChsYXN0Q2hhckNvZGUgPT0gY2hhckNvZGVzLiRQTFVTKSBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIG91dChvcCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIi0iOgogICAgICBjYXNlICItLSI6CiAgICAgICAgaWYgKGxhc3RDaGFyQ29kZSA9PSBjaGFyQ29kZXMuJE1JTlVTKSBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIG91dChvcCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgb3V0KG9wKTsKICAgIH0KICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbih1bmFyeS5hcmd1bWVudCwgVU5BUlksCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQb3N0Zml4KFBvc3RmaXggcG9zdGZpeCkgewogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKHBvc3RmaXguYXJndW1lbnQsIENBTEwsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGF0U3RhdGVtZW50QmVnaW4pOwogICAgb3V0KHBvc3RmaXgub3ApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlVXNlKFZhcmlhYmxlVXNlIHJlZikgewogICAgb3V0KGxvY2FsTmFtZXIuZ2V0TmFtZShyZWYubmFtZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRoaXMoVGhpcyBub2RlKSB7CiAgICBvdXQoInRoaXMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbCkgewogICAgb3V0KGxvY2FsTmFtZXIuZ2V0TmFtZShkZWNsLm5hbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtKSB7CiAgICBvdXQobG9jYWxOYW1lci5nZXROYW1lKHBhcmFtLm5hbWUpKTsKICB9CgogIGJvb2wgaXNEaWdpdChpbnQgY2hhckNvZGUpIHsKICAgIHJldHVybiBjaGFyQ29kZXMuJDAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gY2hhckNvZGVzLiQ5OwogIH0KCiAgYm9vbCBpc1ZhbGlkSmF2YVNjcmlwdElkKFN0cmluZyBmaWVsZCkgewogICAgaWYgKGZpZWxkLmxlbmd0aCA8IDMpIHJldHVybiBmYWxzZTsKICAgIC8vIElnbm9yZSB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3RyaW5nLWRlbGltaXRlci4KICAgIGZvciAoaW50IGkgPSAxOyBpIDwgZmllbGQubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBhbGxvdyBtb3JlIGNoYXJhY3RlcnMuCiAgICAgIGludCBjaGFyQ29kZSA9IGZpZWxkLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmICghKGNoYXJDb2Rlcy4kYSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBjaGFyQ29kZXMuJHogfHwKICAgICAgICAgIGNoYXJDb2Rlcy4kQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBjaGFyQ29kZXMuJFogfHwKICAgICAgICAgIGNoYXJDb2RlID09IGNoYXJDb2Rlcy4kJCB8fAogICAgICAgICAgY2hhckNvZGUgPT0gY2hhckNvZGVzLiRfIHx8CiAgICAgICAgICBpICE9IDEgJiYgaXNEaWdpdChjaGFyQ29kZSkpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogbm9ybWFsbHkgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUgZmllbGQgaXMgbm90IGEKICAgIC8vIHJlc2VydmVkIHdvcmQuICBXZSBkb24ndCBnZW5lcmF0ZSBmaWVsZHMgd2l0aCByZXNlcnZlZCB3b3JkIG5hbWVzIGV4Y2VwdAogICAgLy8gZm9yICdzdXBlcicuCiAgICBpZiAoZmllbGQgPT0gJyJzdXBlciInKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZmllbGQgPT0gJyJjYXRjaCInKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBY2Nlc3MoUHJvcGVydHlBY2Nlc3MgYWNjZXNzKSB7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oYWNjZXNzLnJlY2VpdmVyLCBDQUxMLAogICAgICAgIG5ld0luRm9ySW5pdDogaW5Gb3JJbml0LCBuZXdBdFN0YXRlbWVudEJlZ2luOiBhdFN0YXRlbWVudEJlZ2luKTsKICAgIE5vZGUgc2VsZWN0b3IgPSB1bmRlZmVyKGFjY2Vzcy5zZWxlY3Rvcik7CiAgICBpZiAoc2VsZWN0b3IgaXMgTGl0ZXJhbFN0cmluZykgewogICAgICBTdHJpbmcgZmllbGRXaXRoUXVvdGVzID0gc2VsZWN0b3IudmFsdWU7CiAgICAgIGlmIChpc1ZhbGlkSmF2YVNjcmlwdElkKGZpZWxkV2l0aFF1b3RlcykpIHsKICAgICAgICBpZiAoYWNjZXNzLnJlY2VpdmVyIGlzIExpdGVyYWxOdW1iZXIgJiYKICAgICAgICAgICAgbGFzdENoYXJDb2RlICE9IGNoYXJDb2Rlcy4kQ0xPU0VfUEFSRU4pIHsKICAgICAgICAgIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIG91dCgiLiIpOwogICAgICAgIHN0YXJ0Tm9kZShhY2Nlc3Muc2VsZWN0b3IpOwogICAgICAgIG91dChmaWVsZFdpdGhRdW90ZXMuc3Vic3RyaW5nKDEsIGZpZWxkV2l0aFF1b3Rlcy5sZW5ndGggLSAxKSk7CiAgICAgICAgZW5kTm9kZShhY2Nlc3Muc2VsZWN0b3IpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3RvciBpcyBOYW1lKSB7CiAgICAgIE5vZGUgcmVjZWl2ZXIgPSB1bmRlZmVyKGFjY2Vzcy5yZWNlaXZlcik7CiAgICAgIGlmIChyZWNlaXZlciBpcyBMaXRlcmFsTnVtYmVyICYmIGxhc3RDaGFyQ29kZSAhPSBjaGFyQ29kZXMuJENMT1NFX1BBUkVOKSB7CiAgICAgICAgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgfQogICAgICBvdXQoIi4iKTsKICAgICAgc3RhcnROb2RlKGFjY2Vzcy5zZWxlY3Rvcik7CiAgICAgIHNlbGVjdG9yLmFjY2VwdCh0aGlzKTsKICAgICAgZW5kTm9kZShhY2Nlc3Muc2VsZWN0b3IpOwogICAgICByZXR1cm47CiAgICB9CiAgICBvdXQoIlsiKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihhY2Nlc3Muc2VsZWN0b3IsIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCJdIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFtZWRGdW5jdGlvbihOYW1lZEZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24pIHsKICAgIFZhckNvbGxlY3RvciB2YXJzID0gbmV3IFZhckNvbGxlY3RvcigpOwogICAgdmFycy52aXNpdE5hbWVkRnVuY3Rpb24obmFtZWRGdW5jdGlvbik7CiAgICBzdGFydE5vZGUobmFtZWRGdW5jdGlvbi5mdW5jdGlvbik7CiAgICBpbnQgY2xvc2luZ1Bvc2l0aW9uID0gY3VycmVudE5vZGUuY2xvc2luZ1Bvc2l0aW9uID0KICAgICAgICBmdW5jdGlvbk91dChuYW1lZEZ1bmN0aW9uLmZ1bmN0aW9uLCBuYW1lZEZ1bmN0aW9uLm5hbWUsIHZhcnMpOwogICAgZW5kTm9kZShuYW1lZEZ1bmN0aW9uLmZ1bmN0aW9uKTsKICAgIC8vIFVzZSBjbG9zaW5nIHBvc2l0aW9uIG9mIGBuYW1lZEZ1bmN0aW9uLmZ1bmN0aW9uYCBhcyB0aGUgY2xvc2luZyBwb3NpdGlvbgogICAgLy8gb2YgdGhlIG5hbWVkIGZ1bmN0aW9uIGl0c2VsZi4KICAgIGN1cnJlbnROb2RlLmNsb3NpbmdQb3NpdGlvbiA9IGNsb3NpbmdQb3NpdGlvbjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW4oRnVuIGZ1bikgewogICAgVmFyQ29sbGVjdG9yIHZhcnMgPSBuZXcgVmFyQ29sbGVjdG9yKCk7CiAgICB2YXJzLnZpc2l0RnVuKGZ1bik7CiAgICBjdXJyZW50Tm9kZS5jbG9zaW5nUG9zaXRpb24gPSBmdW5jdGlvbk91dChmdW4sIG51bGwsIHZhcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREZWZlcnJlZEV4cHJlc3Npb24oRGVmZXJyZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIENvbnRpbnVlIHByaW50aW5nIHdpdGggdGhlIGV4cHJlc3Npb24gdmFsdWUuCiAgICBhc3NlcnQobm9kZS5wcmVjZWRlbmNlTGV2ZWwgPT0gbm9kZS52YWx1ZS5wcmVjZWRlbmNlTGV2ZWwpOwogICAgbm9kZS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgfQoKICBvdXRwdXROdW1iZXJXaXRoUmVxdWlyZWRXaGl0ZXNwYWNlKFN0cmluZyBudW1iZXIpIHsKICAgIGludCBjaGFyQ29kZSA9IG51bWJlci5jb2RlVW5pdEF0KDApOwogICAgaWYgKGNoYXJDb2RlID09IGNoYXJDb2Rlcy4kTUlOVVMgJiYgbGFzdENoYXJDb2RlID09IGNoYXJDb2Rlcy4kTUlOVVMpIHsKICAgICAgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgIH0KICAgIG91dChudW1iZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREZWZlcnJlZE51bWJlcihEZWZlcnJlZE51bWJlciBub2RlKSB7CiAgICBvdXRwdXROdW1iZXJXaXRoUmVxdWlyZWRXaGl0ZXNwYWNlKCIke25vZGUudmFsdWV9Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERlZmVycmVkU3RyaW5nKERlZmVycmVkU3RyaW5nIG5vZGUpIHsKICAgIG91dChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGl0ZXJhbEJvb2woTGl0ZXJhbEJvb2wgbm9kZSkgewogICAgb3V0KG5vZGUudmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSkgewogICAgb3V0KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROYW1lKE5hbWUgbm9kZSkgewogICAgb3V0KG9wdGlvbnMucmVuYW1lckZvck5hbWVzKG5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UGFyZW50aGVzZXMoUGFyZW50aGVzZXMgbm9kZSkgewogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5lbmNsb3NlZCwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIikiKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGl0ZXJhbE51bWJlcihMaXRlcmFsTnVtYmVyIG5vZGUpIHsKICAgIG91dHB1dE51bWJlcldpdGhSZXF1aXJlZFdoaXRlc3BhY2Uobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbE51bGwoTGl0ZXJhbE51bGwgbm9kZSkgewogICAgb3V0KCJudWxsIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXJyYXlJbml0aWFsaXplcihBcnJheUluaXRpYWxpemVyIG5vZGUpIHsKICAgIG91dCgiWyIpOwogICAgTGlzdDxFeHByZXNzaW9uPiBlbGVtZW50cyA9IG5vZGUuZWxlbWVudHM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEV4cHJlc3Npb24gZWxlbWVudCA9IGVsZW1lbnRzW2ldOwogICAgICBpZiAoZWxlbWVudCBpcyBBcnJheUhvbGUpIHsKICAgICAgICAvLyBOb3RlIHRoYXQgYXJyYXkgaG9sZXMgbXVzdCBoYXZlIGEgdHJhaWxpbmcgIiwiIGV2ZW4gaWYgdGhleSBhcmUKICAgICAgICAvLyBpbiBsYXN0IHBvc2l0aW9uLiBPdGhlcndpc2UgYFssXWAgKGhhdmluZyBsZW5ndGggMSkgd291bGQgYmVjb21lCiAgICAgICAgLy8gZXF1YWwgdG8gYFtdYCAodGhlIGVtcHR5IGFycmF5KQogICAgICAgIC8vIGFuZCBbMSwsXSAoYXJyYXkgd2l0aCAxIGFuZCBhIGhvbGUpIHdvdWxkIGJlY29tZSBbMSxdID0gWzFdLgogICAgICAgIHN0YXJ0Tm9kZShlbGVtZW50KTsKICAgICAgICBvdXQoIiwiKTsKICAgICAgICBlbmROb2RlKGVsZW1lbnQpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChpICE9IDApIHNwYWNlT3V0KCk7CiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihlbGVtZW50LCBBU1NJR05NRU5ULAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgICAvLyBXZSBjYW4gc2tpcCB0aGUgdHJhaWxpbmcgIiwiIGZvciB0aGUgbGFzdCBlbGVtZW50IChzaW5jZSBpdCdzIG5vdAogICAgICAvLyBhbiBhcnJheSBob2xlKS4KICAgICAgaWYgKGkgIT0gZWxlbWVudHMubGVuZ3RoIC0gMSkgb3V0KCIsIik7CiAgICB9CiAgICBvdXQoIl0iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBcnJheUhvbGUoQXJyYXlIb2xlIG5vZGUpIHsKICAgIGNvbnRleHQuZXJyb3IoIlVucmVhY2hhYmxlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgLy8gUHJpbnQgYWxsIHRoZSBwcm9wZXJ0aWVzIG9uIG9uZSBsaW5lIHVudGlsIHdlIHNlZSBhIGZ1bmN0aW9uLXZhbHVlZAogICAgLy8gcHJvcGVydHkuICBJZGVhbGx5LCB3ZSB3b3VsZCB1c2UgYSBwcm9wZXIgcHJldHR5LXByaW50ZXIgdG8gbWFrZSB0aGUKICAgIC8vIGRlY2lzaW9uIGJhc2VkIG9uIGxheW91dC4KICAgIGJvb2wgZXhpdE9uZUxpbmVyTW9kZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZSBpcyBGdW4gfHwKICAgICAgICAgIHZhbHVlIGlzIEFycmF5SW5pdGlhbGl6ZXIgJiYgdmFsdWUuZWxlbWVudHMuYW55KChlKSA9PiBlIGlzIEZ1bik7CiAgICB9CgogICAgYm9vbCBpc09uZUxpbmVyID0gbm9kZS5pc09uZUxpbmVyIHx8IHNob3VsZENvbXByZXNzT3V0cHV0OwogICAgTGlzdDxQcm9wZXJ0eT4gcHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllczsKICAgIG91dCgieyIpOwogICAgaW5kZW50TW9yZSgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIE5vZGUgdmFsdWUgPSBwcm9wZXJ0aWVzW2ldLnZhbHVlOwogICAgICBpZiAoaXNPbmVMaW5lciAmJiBleGl0T25lTGluZXJNb2RlKHZhbHVlKSkgaXNPbmVMaW5lciA9IGZhbHNlOwogICAgICBpZiAoaSAhPSAwKSB7CiAgICAgICAgb3V0KCIsIik7CiAgICAgICAgaWYgKGlzT25lTGluZXIpIHNwYWNlT3V0KCk7CiAgICAgIH0KICAgICAgaWYgKCFpc09uZUxpbmVyKSB7CiAgICAgICAgZm9yY2VMaW5lKCk7CiAgICAgICAgaW5kZW50KCk7CiAgICAgIH0KICAgICAgdmlzaXQocHJvcGVydGllc1tpXSk7CiAgICB9CiAgICBpbmRlbnRMZXNzKCk7CiAgICBpZiAoIWlzT25lTGluZXIgJiYgIXByb3BlcnRpZXMuaXNFbXB0eSkgewogICAgICBsaW5lT3V0KCk7CiAgICAgIGluZGVudCgpOwogICAgfQogICAgb3V0KCJ9Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHkoUHJvcGVydHkgbm9kZSkgewogICAgc3RhcnROb2RlKG5vZGUubmFtZSk7CiAgICBOb2RlIG5hbWUgPSB1bmRlZmVyKG5vZGUubmFtZSk7CiAgICBpZiAobmFtZSBpcyBMaXRlcmFsU3RyaW5nKSB7CiAgICAgIFN0cmluZyB0ZXh0ID0gbmFtZS52YWx1ZTsKICAgICAgaWYgKGlzVmFsaWRKYXZhU2NyaXB0SWQodGV4dCkpIHsKICAgICAgICBvdXQodGV4dC5zdWJzdHJpbmcoMSwgdGV4dC5sZW5ndGggLSAxKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0KHRleHQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG5hbWUgaXMgTmFtZSkgewogICAgICBub2RlLm5hbWUuYWNjZXB0KHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG5hbWUgaXMgTGl0ZXJhbE51bWJlcik7CiAgICAgIExpdGVyYWxOdW1iZXIgbmFtZU51bWJlciA9IG5vZGUubmFtZTsKICAgICAgb3V0KG5hbWVOdW1iZXIudmFsdWUpOwogICAgfQogICAgZW5kTm9kZShub2RlLm5hbWUpOwogICAgb3V0KCI6Iik7CiAgICBzcGFjZU91dCgpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUudmFsdWUsIEFTU0lHTk1FTlQsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJlZ0V4cExpdGVyYWwoUmVnRXhwTGl0ZXJhbCBub2RlKSB7CiAgICBvdXQobm9kZS5wYXR0ZXJuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBTdHJpbmcgdGVtcGxhdGUgPSBub2RlLnRlbXBsYXRlOwogICAgTGlzdDxFeHByZXNzaW9uPiBpbnB1dHMgPSBub2RlLmlucHV0czsKCiAgICBMaXN0PFN0cmluZz4gcGFydHMgPSB0ZW1wbGF0ZS5zcGxpdCgnIycpOwogICAgaW50IGlucHV0c0xlbmd0aCA9IGlucHV0cyA9PSBudWxsID8gMCA6IGlucHV0cy5sZW5ndGg7CiAgICBpZiAocGFydHMubGVuZ3RoICE9IGlucHV0c0xlbmd0aCArIDEpIHsKICAgICAgY29udGV4dC5lcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgSlM6ICR0ZW1wbGF0ZScpOwogICAgfQogICAgLy8gQ29kZSB0aGF0IHVzZXMgSlMgbXVzdCB0YWtlIGNhcmUgb2Ygb3BlcmF0b3IgcHJlY2VkZW5jZXMsIGFuZAogICAgLy8gcHV0IHBhcmVudGhlc2lzIGlmIG5lZWRlZC4KICAgIG91dChwYXJ0c1swXSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0c0xlbmd0aDsgaSsrKSB7CiAgICAgIHZpc2l0KGlucHV0c1tpXSk7CiAgICAgIG91dChwYXJ0c1tpICsgMV0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoTGl0ZXJhbFN0YXRlbWVudCBub2RlKSB7CiAgICBvdXRMbihub2RlLmNvZGUpOwogIH0KCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZE5vZGUoSW50ZXJwb2xhdGVkTm9kZSBub2RlKSB7CiAgICBvdXQoJyMke25vZGUubmFtZU9yUG9zaXRpb259Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlKSA9PgogICAgICB2aXNpdEludGVycG9sYXRlZE5vZGUobm9kZSk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIoSW50ZXJwb2xhdGVkUGFyYW1ldGVyIG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZFNlbGVjdG9yKEludGVycG9sYXRlZFNlbGVjdG9yIG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZFN0YXRlbWVudChJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgb3V0TG4oJyMke25vZGUubmFtZU9yUG9zaXRpb259Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbW1lbnQoQ29tbWVudCBub2RlKSB7CiAgICBpZiAoc2hvdWxkQ29tcHJlc3NPdXRwdXQpIHJldHVybjsKICAgIFN0cmluZyBjb21tZW50ID0gbm9kZS5jb21tZW50LnRyaW0oKTsKICAgIGlmIChjb21tZW50LmlzRW1wdHkpIHJldHVybjsKICAgIGZvciAodmFyIGxpbmUgaW4gY29tbWVudC5zcGxpdCgnXG4nKSkgewogICAgICBpZiAoY29tbWVudC5zdGFydHNXaXRoKCcvLycpKSB7CiAgICAgICAgb3V0SW5kZW50TG4obGluZS50cmltKCkpOwogICAgICB9IGVsc2UgewogICAgICAgIG91dEluZGVudExuKCcvLyAke2xpbmUudHJpbSgpfScpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXdhaXQoQXdhaXQgbm9kZSkgewogICAgb3V0KCJhd2FpdCAiKTsKICAgIHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgfQp9CgpjbGFzcyBPcmRlcmVkU2V0PFQ+IHsKICBmaW5hbCBTZXQ8VD4gc2V0OwogIGZpbmFsIExpc3Q8VD4gbGlzdDsKCiAgT3JkZXJlZFNldCgpCiAgICAgIDogc2V0ID0gbmV3IFNldDxUPigpLAogICAgICAgIGxpc3QgPSA8VD5bXTsKCiAgdm9pZCBhZGQoVCB4KSB7CiAgICBpZiAoc2V0LmFkZCh4KSkgewogICAgICAvLyBbU2V0LmFkZF0gcmV0dXJucyBgdHJ1ZWAgaWYgJ3gnIHdhcyBhZGRlZC4KICAgICAgbGlzdC5hZGQoeCk7CiAgICB9CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmdW4oVCB4KSkgewogICAgbGlzdC5mb3JFYWNoKGZ1bik7CiAgfQp9CgovLyBDb2xsZWN0cyBhbGwgdGhlIHZhciBkZWNsYXJhdGlvbnMgaW4gdGhlIGZ1bmN0aW9uLiAgV2UgbmVlZCB0byBkbyB0aGlzIGluIGEKLy8gc2VwYXJhdGUgcGFzcyBiZWNhdXNlIEpTIHZhcnMgYXJlIGxpZnRlZCB0byB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4KY2xhc3MgVmFyQ29sbGVjdG9yIGV4dGVuZHMgQmFzZVZpc2l0b3IgewogIGJvb2wgbmVzdGVkOwogIGJvb2wgZW5hYmxlUmVuYW1pbmcgPSB0cnVlOwogIGZpbmFsIE9yZGVyZWRTZXQ8U3RyaW5nPiB2YXJzOwogIGZpbmFsIE9yZGVyZWRTZXQ8U3RyaW5nPiBwYXJhbXM7CgogIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGlzYWJsZVZhcmlhYmxlTWluaWZpY2F0aW9uUGF0dGVybiA9ICI6Om5vcmVuYW1pbmc6OiI7CiAgc3RhdGljIGZpbmFsIFN0cmluZyBlbmFibGVWYXJpYWJsZU1pbmlmaWNhdGlvblBhdHRlcm4gPSAiOjpkb3JlbmFtaW5nOjoiOwoKICBWYXJDb2xsZWN0b3IoKQogICAgICA6IG5lc3RlZCA9IGZhbHNlLAogICAgICAgIHZhcnMgPSBuZXcgT3JkZXJlZFNldDxTdHJpbmc+KCksCiAgICAgICAgcGFyYW1zID0gbmV3IE9yZGVyZWRTZXQ8U3RyaW5nPigpOwoKICB2b2lkIGZvckVhY2hWYXIodm9pZCBmbihTdHJpbmcgdikpID0+IHZhcnMuZm9yRWFjaChmbik7CiAgdm9pZCBmb3JFYWNoUGFyYW0odm9pZCBmbihTdHJpbmcgcCkpID0+IHBhcmFtcy5mb3JFYWNoKGZuKTsKCiAgdm9pZCBjb2xsZWN0VmFyc0luRnVuY3Rpb24oRnVuIGZ1bikgewogICAgaWYgKCFuZXN0ZWQpIHsKICAgICAgbmVzdGVkID0gdHJ1ZTsKICAgICAgaWYgKGZ1bi5wYXJhbXMgIT0gbnVsbCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuLnBhcmFtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgcGFyYW1zLmFkZChmdW4ucGFyYW1zW2ldLm5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgICB2aXNpdEJsb2NrKGZ1bi5ib2R5KTsKICAgICAgbmVzdGVkID0gZmFsc2U7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgYm90aGVyIGNvbGxlY3RpbmcgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLgogICAgY29sbGVjdFZhcnNJbkZ1bmN0aW9uKGRlY2xhcmF0aW9uLmZ1bmN0aW9uKTsKICB9CgogIHZvaWQgdmlzaXROYW1lZEZ1bmN0aW9uKE5hbWVkRnVuY3Rpb24gbmFtZWRGdW5jdGlvbikgewogICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGJvdGhlciBjb2xsZWN0aW5nIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4KICAgIGNvbGxlY3RWYXJzSW5GdW5jdGlvbihuYW1lZEZ1bmN0aW9uLmZ1bmN0aW9uKTsKICB9CgogIHZvaWQgdmlzaXRGdW4oRnVuIGZ1bikgewogICAgY29sbGVjdFZhcnNJbkZ1bmN0aW9uKGZ1bik7CiAgfQoKICB2b2lkIHZpc2l0VGhpcyhUaGlzIG5vZGUpIHt9CgogIHZvaWQgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSkgewogICAgaWYgKG5vZGUuY29tbWVudC5jb250YWlucyhkaXNhYmxlVmFyaWFibGVNaW5pZmljYXRpb25QYXR0ZXJuKSkgewogICAgICBlbmFibGVSZW5hbWluZyA9IGZhbHNlOwogICAgfSBlbHNlIGlmIChub2RlLmNvbW1lbnQuY29udGFpbnMoZW5hYmxlVmFyaWFibGVNaW5pZmljYXRpb25QYXR0ZXJuKSkgewogICAgICBlbmFibGVSZW5hbWluZyA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2wpIHsKICAgIGlmIChlbmFibGVSZW5hbWluZyAmJiBkZWNsLmFsbG93UmVuYW1lKSB2YXJzLmFkZChkZWNsLm5hbWUpOwogIH0KfQoKLyoqCiAqIFJldHVybnMgdHJ1ZSwgaWYgdGhlIGdpdmVuIG5vZGUgbXVzdCBiZSB3cmFwcGVkIGludG8gYnJhY2VzIHdoZW4gdXNlZAogKiBhcyB0aGVuLXN0YXRlbWVudCBpbiBhbiBbSWZdIHRoYXQgaGFzIGFuIGVsc2UgYnJhbmNoLgogKi8KY2xhc3MgRGFuZ2xpbmdFbHNlVmlzaXRvciBleHRlbmRzIEJhc2VWaXNpdG9yPGJvb2w+IHsKICBKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IGNvbnRleHQ7CgogIERhbmdsaW5nRWxzZVZpc2l0b3IodGhpcy5jb250ZXh0KTsKCiAgYm9vbCB2aXNpdFByb2dyYW0oUHJvZ3JhbSBub2RlKSA9PiBmYWxzZTsKCiAgYm9vbCB2aXNpdE5vZGUoTm9kZSBub2RlKSB7CiAgICBjb250ZXh0LmVycm9yKCJGb3Jnb3Qgbm9kZTogJG5vZGUiKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgYm9vbCB2aXNpdEJsb2NrKEJsb2NrIG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRJZihJZiBub2RlKSB7CiAgICBpZiAoIW5vZGUuaGFzRWxzZSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gbm9kZS5vdGhlcndpc2UuYWNjZXB0KHRoaXMpOwogIH0KCiAgYm9vbCB2aXNpdEZvcihGb3Igbm9kZSkgPT4gbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICBib29sIHZpc2l0Rm9ySW4oRm9ySW4gbm9kZSkgPT4gbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICBib29sIHZpc2l0V2hpbGUoV2hpbGUgbm9kZSkgPT4gbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICBib29sIHZpc2l0RG8oRG8gbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdENvbnRpbnVlKENvbnRpbnVlIG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRCcmVhayhCcmVhayBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0UmV0dXJuKFJldHVybiBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0VGhyb3coVGhyb3cgbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdFRyeShUcnkgbm9kZSkgewogICAgaWYgKG5vZGUuZmluYWxseVBhcnQgIT0gbnVsbCkgewogICAgICByZXR1cm4gbm9kZS5maW5hbGx5UGFydC5hY2NlcHQodGhpcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbm9kZS5jYXRjaFBhcnQuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgYm9vbCB2aXNpdENhdGNoKENhdGNoIG5vZGUpID0+IG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgYm9vbCB2aXNpdFN3aXRjaChTd2l0Y2ggbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdENhc2UoQ2FzZSBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0RGVmYXVsdChEZWZhdWx0IG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlKSA9PiBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogIGJvb2wgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSkgPT4gdHJ1ZTsKCiAgYm9vbCB2aXNpdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSA9PiBmYWxzZTsKfQoKYWJzdHJhY3QgY2xhc3MgTG9jYWxOYW1lciB7CiAgU3RyaW5nIGdldE5hbWUoU3RyaW5nIG9sZE5hbWUpOwogIFN0cmluZyBkZWNsYXJlVmFyaWFibGUoU3RyaW5nIG9sZE5hbWUpOwogIFN0cmluZyBkZWNsYXJlUGFyYW1ldGVyKFN0cmluZyBvbGROYW1lKTsKICB2b2lkIGVudGVyU2NvcGUoVmFyQ29sbGVjdG9yIHZhcnMpOwogIHZvaWQgbGVhdmVTY29wZSgpOwp9CgpjbGFzcyBJZGVudGl0eU5hbWVyIGltcGxlbWVudHMgTG9jYWxOYW1lciB7CiAgU3RyaW5nIGdldE5hbWUoU3RyaW5nIG9sZE5hbWUpID0+IG9sZE5hbWU7CiAgU3RyaW5nIGRlY2xhcmVWYXJpYWJsZShTdHJpbmcgb2xkTmFtZSkgPT4gb2xkTmFtZTsKICBTdHJpbmcgZGVjbGFyZVBhcmFtZXRlcihTdHJpbmcgb2xkTmFtZSkgPT4gb2xkTmFtZTsKICB2b2lkIGVudGVyU2NvcGUoVmFyQ29sbGVjdG9yIHZhcnMpIHt9CiAgdm9pZCBsZWF2ZVNjb3BlKCkge30KfQoKY2xhc3MgTWluaWZ5UmVuYW1lciBpbXBsZW1lbnRzIExvY2FsTmFtZXIgewogIGZpbmFsIExpc3Q8TWFwPFN0cmluZywgU3RyaW5nPj4gbWFwcyA9IFtdOwogIGZpbmFsIExpc3Q8aW50PiBwYXJhbWV0ZXJOdW1iZXJTdGFjayA9IFtdOwogIGZpbmFsIExpc3Q8aW50PiB2YXJpYWJsZU51bWJlclN0YWNrID0gW107CiAgaW50IHBhcmFtZXRlck51bWJlciA9IDA7CiAgaW50IHZhcmlhYmxlTnVtYmVyID0gMDsKCiAgTWluaWZ5UmVuYW1lcigpOwoKICB2b2lkIGVudGVyU2NvcGUoVmFyQ29sbGVjdG9yIHZhcnMpIHsKICAgIG1hcHMuYWRkKG5ldyBNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOwogICAgdmFyaWFibGVOdW1iZXJTdGFjay5hZGQodmFyaWFibGVOdW1iZXIpOwogICAgcGFyYW1ldGVyTnVtYmVyU3RhY2suYWRkKHBhcmFtZXRlck51bWJlcik7CiAgICB2YXJzLmZvckVhY2hWYXIoZGVjbGFyZVZhcmlhYmxlKTsKICAgIHZhcnMuZm9yRWFjaFBhcmFtKGRlY2xhcmVQYXJhbWV0ZXIpOwogIH0KCiAgdm9pZCBsZWF2ZVNjb3BlKCkgewogICAgbWFwcy5yZW1vdmVMYXN0KCk7CiAgICB2YXJpYWJsZU51bWJlciA9IHZhcmlhYmxlTnVtYmVyU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgcGFyYW1ldGVyTnVtYmVyID0gcGFyYW1ldGVyTnVtYmVyU3RhY2sucmVtb3ZlTGFzdCgpOwogIH0KCiAgU3RyaW5nIGdldE5hbWUoU3RyaW5nIG9sZE5hbWUpIHsKICAgIC8vIEdvIGZyb20gaW5uZXIgc2NvcGUgdG8gb3V0ZXIgbG9va2luZyBmb3IgbWFwcGluZyBvZiBuYW1lLgogICAgZm9yIChpbnQgaSA9IG1hcHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgdmFyIG1hcCA9IG1hcHNbaV07CiAgICAgIHZhciByZXBsYWNlbWVudCA9IG1hcFtvbGROYW1lXTsKICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHJldHVybiByZXBsYWNlbWVudDsKICAgIH0KICAgIHJldHVybiBvbGROYW1lOwogIH0KCiAgc3RhdGljIGNvbnN0IExPV0VSX0NBU0VfTEVUVEVSUyA9IDI2OwogIHN0YXRpYyBjb25zdCBMRVRURVJTID0gTE9XRVJfQ0FTRV9MRVRURVJTOwogIHN0YXRpYyBjb25zdCBESUdJVFMgPSAxMDsKCiAgc3RhdGljIGludCBudGhMZXR0ZXIoaW50IG4pIHsKICAgIHJldHVybiAobiA8IExPV0VSX0NBU0VfTEVUVEVSUykKICAgICAgICA/IGNoYXJDb2Rlcy4kYSArIG4KICAgICAgICA6IGNoYXJDb2Rlcy4kQSArIG4gLSBMT1dFUl9DQVNFX0xFVFRFUlM7CiAgfQoKICAvLyBQYXJhbWV0ZXJzIGdvIGZyb20gYSB0byB6IGFuZCB2YXJpYWJsZXMgZ28gZnJvbSB6IHRvIGEuICBUaGlzIG1ha2VzIGVhY2gKICAvLyBhcmd1bWVudCBsaXN0IGFuZCBlYWNoIHRvcC1vZi1mdW5jdGlvbiB2YXIgZGVjbGFyYXRpb24gbG9vayBzaW1pbGFyIGFuZAogIC8vIGhlbHBzIGd6aXAgY29tcHJlc3MgdGhlIGZpbGUuICBJZiB3ZSBoYXZlIG1vcmUgdGhhbiAyNiBhcmd1bWVudHMgYW5kCiAgLy8gdmFyaWFibGVzIHRoZW4gd2UgbWVldCBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYWxwaGFiZXQuICBBZnRlcgogIC8vIHRoYXQgd2UgZ2l2ZSB1cCB0cnlpbmcgdG8gYmUgbmljZSB0byB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGFuZCBqdXN0CiAgLy8gdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSBmb3IgYXJndW1lbnRzIGFuZCB2YXJpYWJsZXMsIHN0YXJ0aW5nIHdpdGggQSwgYW5kCiAgLy8gbW92aW5nIG9uIHRvIGEwLCBhMSwgZXRjLgogIFN0cmluZyBkZWNsYXJlVmFyaWFibGUoU3RyaW5nIG9sZE5hbWUpIHsKICAgIGlmIChhdm9pZFJlbmFtaW5nKG9sZE5hbWUpKSByZXR1cm4gb2xkTmFtZTsKICAgIHZhciBuZXdOYW1lOwogICAgaWYgKHZhcmlhYmxlTnVtYmVyICsgcGFyYW1ldGVyTnVtYmVyIDwgTE9XRVJfQ0FTRV9MRVRURVJTKSB7CiAgICAgIC8vIFZhcmlhYmxlcyBzdGFydCBmcm9tIHogYW5kIGdvIGJhY2t3YXJkcywgZm9yIGJldHRlciBnemlwYWJpbGl0eS4KICAgICAgbmV3TmFtZSA9IGdldE5hbWVOdW1iZXIob2xkTmFtZSwgTE9XRVJfQ0FTRV9MRVRURVJTIC0gMSAtIHZhcmlhYmxlTnVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEFmdGVyIDI2IHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVycyB3ZSBhbGxvY2F0ZSB0aGVtIGluIHRoZSBzYW1lIG9yZGVyLgogICAgICBuZXdOYW1lID0gZ2V0TmFtZU51bWJlcihvbGROYW1lLCB2YXJpYWJsZU51bWJlciArIHBhcmFtZXRlck51bWJlcik7CiAgICB9CiAgICB2YXJpYWJsZU51bWJlcisrOwogICAgcmV0dXJuIG5ld05hbWU7CiAgfQoKICBTdHJpbmcgZGVjbGFyZVBhcmFtZXRlcihTdHJpbmcgb2xkTmFtZSkgewogICAgaWYgKGF2b2lkUmVuYW1pbmcob2xkTmFtZSkpIHJldHVybiBvbGROYW1lOwogICAgdmFyIG5ld05hbWU7CiAgICBpZiAodmFyaWFibGVOdW1iZXIgKyBwYXJhbWV0ZXJOdW1iZXIgPCBMT1dFUl9DQVNFX0xFVFRFUlMpIHsKICAgICAgbmV3TmFtZSA9IGdldE5hbWVOdW1iZXIob2xkTmFtZSwgcGFyYW1ldGVyTnVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld05hbWUgPSBnZXROYW1lTnVtYmVyKG9sZE5hbWUsIHZhcmlhYmxlTnVtYmVyICsgcGFyYW1ldGVyTnVtYmVyKTsKICAgIH0KICAgIHBhcmFtZXRlck51bWJlcisrOwogICAgcmV0dXJuIG5ld05hbWU7CiAgfQoKICBib29sIGF2b2lkUmVuYW1pbmcoU3RyaW5nIG9sZE5hbWUpIHsKICAgIC8vIFZhcmlhYmxlcyBvZiB0aGlzICRmb3JtJCBhcmUgdXNlZCBpbiBwYXR0ZXJuIG1hdGNoaW5nIHRoZSBtZXNzYWdlIG9mIEpTCiAgICAvLyBleGNlcHRpb25zLCBzbyBzaG91bGQgbm90IGJlIHJlbmFtZWQuCiAgICAvLyBUT0RPKHNyYSk6IEludHJvZHVjZSBhIHdheSBmb3IgaW5kaWNhdGluZyBpbiB0aGUgSlMgdGV4dCB3aGljaCB2YXJpYWJsZXMKICAgIC8vIHNob3VsZCBub3QgYmUgcmVuYW1lZC4KICAgIHJldHVybiBvbGROYW1lLnN0YXJ0c1dpdGgocickJykgJiYgb2xkTmFtZS5lbmRzV2l0aChyJyQnKTsKICB9CgogIFN0cmluZyBnZXROYW1lTnVtYmVyKFN0cmluZyBvbGROYW1lLCBpbnQgbikgewogICAgaWYgKG1hcHMuaXNFbXB0eSkgcmV0dXJuIG9sZE5hbWU7CgogICAgU3RyaW5nIG5ld05hbWU7CiAgICBpZiAobiA8IExFVFRFUlMpIHsKICAgICAgLy8gU3RhcnQgbmFtaW5nIHZhcmlhYmxlcyBhLCBiLCBjLCAuLi4sIHosIEEsIEIsIEMsIC4uLiwgWi4KICAgICAgbmV3TmFtZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbbnRoTGV0dGVyKG4pXSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGVuIG5hbWUgdmFyaWFibGVzIGEwLCBhMSwgYTIsIC4uLiwgYTksIGIwLCBiMSwgLi4uLCBaOSwgYWEwLCBhYTEsIC4uLgogICAgICAvLyBGb3IgYWxsIGZ1bmN0aW9ucyB3aXRoIGZld2VyIHRoYW4gNTAwIGxvY2FscyB0aGlzIGlzIGp1c3QgYXMgY29tcGFjdAogICAgICAvLyBhcyB1c2luZyBhYSwgYWIsIGV0Yy4gYnV0IGF2b2lkcyBjbGFzaGVzIHdpdGgga2V5d29yZHMuCiAgICAgIG4gLT0gTEVUVEVSUzsKICAgICAgaW50IGRpZ2l0ID0gbiAlIERJR0lUUzsKICAgICAgbiB+Lz0gRElHSVRTOwogICAgICBpbnQgYWxwaGFDaGFycyA9IDE7CiAgICAgIGludCBuYW1lU3BhY2VTaXplID0gTEVUVEVSUzsKICAgICAgLy8gRmluZCBvdXQgd2hldGhlciB3ZSBzaG91bGQgdXNlIHRoZSAxLWNoYXJhY3RlciBuYW1lc3BhY2UgKHNpemUgNTIpLCB0aGUKICAgICAgLy8gMi1jaGFyYWN0ZXIgbmFtZXNwYWNlIChzaXplIDUyKjUyKSwgZXRjLgogICAgICB3aGlsZSAobiA+PSBuYW1lU3BhY2VTaXplKSB7CiAgICAgICAgbiAtPSBuYW1lU3BhY2VTaXplOwogICAgICAgIGFscGhhQ2hhcnMrKzsKICAgICAgICBuYW1lU3BhY2VTaXplICo9IExFVFRFUlM7CiAgICAgIH0KICAgICAgdmFyIGNvZGVzID0gPGludD5bXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbHBoYUNoYXJzOyBpKyspIHsKICAgICAgICBuYW1lU3BhY2VTaXplIH4vPSBMRVRURVJTOwogICAgICAgIGNvZGVzLmFkZChudGhMZXR0ZXIoKG4gfi8gbmFtZVNwYWNlU2l6ZSkgJSBMRVRURVJTKSk7CiAgICAgIH0KICAgICAgY29kZXMuYWRkKGNoYXJDb2Rlcy4kMCArIGRpZ2l0KTsKICAgICAgbmV3TmFtZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2Rlcyk7CiAgICB9CiAgICBhc3NlcnQobmV3IFJlZ0V4cChyJ1thLXpBLVpdW2EtekEtWjAtOV0qJykuaGFzTWF0Y2gobmV3TmFtZSkpOwogICAgbWFwcy5sYXN0W29sZE5hbWVdID0gbmV3TmFtZTsKICAgIHJldHVybiBuZXdOYW1lOwogIH0KfQoKLy8vIEluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdGhlIGVudGVyIGFuZCBleGl0IGNhbGxiYWNrcyBmb3IgW25vZGVdLgpjbGFzcyBFbnRlckV4aXROb2RlIHsKICBmaW5hbCBFbnRlckV4aXROb2RlIHBhcmVudDsKICBmaW5hbCBOb2RlIG5vZGU7CgogIGludCBzdGFydFBvc2l0aW9uOwogIGludCBjbG9zaW5nUG9zaXRpb247CgogIEVudGVyRXhpdE5vZGUodGhpcy5wYXJlbnQsIHRoaXMubm9kZSk7CgogIHZvaWQgYWRkVG9Ob2RlKEphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgY29udGV4dCwgaW50IHBvc2l0aW9uKSB7CiAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBudWxsKSB7CiAgICAgIC8vIFtwb3NpdGlvbl0gaXMgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIFtub2RlXS4KICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7CiAgICAgICAgLy8gVGhpcyBtaWdo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ExUgNioKCBwWBgQBQ0YxBAE5RjMEARsgBAEfASRFHksdBgQBPEEEAgEESTkENiUBJQEsAR4pEQQBKEQ6GiQoBAE1OTkiLigqKBwkLA0qBgQBOSomLERPPQEyAgEcIiorJhUCASwtNTYoFwIBLC0tLBsaARMBJyktLyYpBAEWFzc5BAEjQTEZJjMGFAQBKC0cASAkGzEEAU5NSkxNTh8rMBFBSlENT0oGFhQEASwwEUE5DUoGFxQEASdPLVAePwQBMCYBFBdCOg1RTkEUHhQaI1EyIxwWIggbLSM+CCcxBkMiFAQCAUQWHhMBFRcBKQFEITUcQy0IICkGBAFMJiJGEwQCAR9wYWNrYWdlOmpzX2FzdC9zcmMvcHJpbnRlci5kYXJ0KXNka3Jvb3Q6L3BrZy9qc19hc3QvbGliL3NyYy90ZW1wbGF0ZS5kYXJ0wABlWi8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGpzX2FzdDsKCmNsYXNzIFRlbXBsYXRlTWFuYWdlciB7CiAgTWFwPFN0cmluZywgVGVtcGxhdGU+IGV4cHJlc3Npb25UZW1wbGF0ZXMgPSBuZXcgTWFwPFN0cmluZywgVGVtcGxhdGU+KCk7CiAgTWFwPFN0cmluZywgVGVtcGxhdGU+IHN0YXRlbWVudFRlbXBsYXRlcyA9IG5ldyBNYXA8U3RyaW5nLCBUZW1wbGF0ZT4oKTsKCiAgVGVtcGxhdGVNYW5hZ2VyKCk7CgogIFRlbXBsYXRlIGxvb2t1cEV4cHJlc3Npb25UZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICByZXR1cm4gZXhwcmVzc2lvblRlbXBsYXRlc1tzb3VyY2VdOwogIH0KCiAgVGVtcGxhdGUgZGVmaW5lRXhwcmVzc2lvblRlbXBsYXRlKFN0cmluZyBzb3VyY2UsIE5vZGUgYXN0KSB7CiAgICBUZW1wbGF0ZSB0ZW1wbGF0ZSA9CiAgICAgICAgbmV3IFRlbXBsYXRlKHNvdXJjZSwgYXN0LCBpc0V4cHJlc3Npb246IHRydWUsIGZvcmNlQ29weTogZmFsc2UpOwogICAgZXhwcmVzc2lvblRlbXBsYXRlc1tzb3VyY2VdID0gdGVtcGxhdGU7CiAgICByZXR1cm4gdGVtcGxhdGU7CiAgfQoKICBUZW1wbGF0ZSBsb29rdXBTdGF0ZW1lbnRUZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICByZXR1cm4gc3RhdGVtZW50VGVtcGxhdGVzW3NvdXJjZV07CiAgfQoKICBUZW1wbGF0ZSBkZWZpbmVTdGF0ZW1lbnRUZW1wbGF0ZShTdHJpbmcgc291cmNlLCBOb2RlIGFzdCkgewogICAgVGVtcGxhdGUgdGVtcGxhdGUgPQogICAgICAgIG5ldyBUZW1wbGF0ZShzb3VyY2UsIGFzdCwgaXNFeHByZXNzaW9uOiBmYWxzZSwgZm9yY2VDb3B5OiBmYWxzZSk7CiAgICBzdGF0ZW1lbnRUZW1wbGF0ZXNbc291cmNlXSA9IHRlbXBsYXRlOwogICAgcmV0dXJuIHRlbXBsYXRlOwogIH0KfQoKLyoqCiAqIEEgVGVtcGxhdGUgaXMgY3JlYXRlZCB3aXRoIEphdmFTY3JpcHQgQVNUIGNvbnRhaW5pbmcgcGxhY2Vob2xkZXJzIChpbnRlcmZhY2UKICogSW50ZXJwb2xhdGVkTm9kZSkuICBUaGUgW2luc3RhbnRpYXRlXSBtZXRob2QgY3JlYXRlcyBhbiBBU1QgdGhhdCBsb29rcyBsaWtlCiAqIHRoZSBvcmlnaW5hbCB3aXRoIHRoZSBwbGFjZWhvbGRlcnMgcmVwbGFjZWQgYnkgdGhlIGFyZ3VtZW50cyB0bwogKiBbaW5zdGFudGlhdGVdLgogKi8KY2xhc3MgVGVtcGxhdGUgewogIGZpbmFsIFN0cmluZyBzb3VyY2U7CiAgZmluYWwgYm9vbCBpc0V4cHJlc3Npb247CiAgZmluYWwgYm9vbCBmb3JjZUNvcHk7CiAgZmluYWwgTm9kZSBhc3Q7CgogIEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3I7CgogIGludCBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9IC0xOwoKICAvLyBOdWxsLCB1bmxlc3MgdGhlcmUgYXJlIG5hbWVkIGhvbGVzLgogIExpc3Q8U3RyaW5nPiBob2xlTmFtZXM7CiAgYm9vbCBnZXQgaXNQb3NpdGlvbmFsID0+IGhvbGVOYW1lcyA9PSBudWxsOwoKICBUZW1wbGF0ZSh0aGlzLnNvdXJjZSwgdGhpcy5hc3QsCiAgICAgIHt0aGlzLmlzRXhwcmVzc2lvbjogdHJ1ZSwgdGhpcy5mb3JjZUNvcHk6IGZhbHNlfSkgewogICAgYXNzZXJ0KHRoaXMuaXNFeHByZXNzaW9uID8gYXN0IGlzIEV4cHJlc3Npb24gOiBhc3QgaXMgU3RhdGVtZW50KTsKICAgIF9jb21waWxlKCk7CiAgfQoKICBUZW1wbGF0ZS53aXRoRXhwcmVzc2lvblJlc3VsdCh0aGlzLmFzdCkKICAgICAgOiBzb3VyY2UgPSBudWxsLAogICAgICAgIGlzRXhwcmVzc2lvbiA9IHRydWUsCiAgICAgICAgZm9yY2VDb3B5ID0gZmFsc2UgewogICAgYXNzZXJ0KGFzdCBpcyBFeHByZXNzaW9uKTsKICAgIGFzc2VydChfY2hlY2tOb1BsYWNlaG9sZGVycygpKTsKICAgIHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID0gMDsKICAgIGluc3RhbnRpYXRvciA9IChhcmd1bWVudHMpID0+IGFzdDsKICB9CgogIFRlbXBsYXRlLndpdGhTdGF0ZW1lbnRSZXN1bHQodGhpcy5hc3QpCiAgICAgIDogc291cmNlID0gbnVsbCwKICAgICAgICBpc0V4cHJlc3Npb24gPSBmYWxzZSwKICAgICAgICBmb3JjZUNvcHkgPSBmYWxzZSB7CiAgICBhc3NlcnQoYXN0IGlzIFN0YXRlbWVudCk7CiAgICBhc3NlcnQoX2NoZWNrTm9QbGFjZWhvbGRlcnMoKSk7CiAgICBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9IDA7CiAgICBpbnN0YW50aWF0b3IgPSAoYXJndW1lbnRzKSA9PiBhc3Q7CiAgfQoKICBib29sIF9jaGVja05vUGxhY2Vob2xkZXJzKCkgewogICAgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvciBnZW5lcmF0b3IgPQogICAgICAgIG5ldyBJbnN0YW50aWF0b3JHZW5lcmF0b3JWaXNpdG9yKGZhbHNlKTsKICAgIGdlbmVyYXRvci5jb21waWxlKGFzdCk7CiAgICByZXR1cm4gZ2VuZXJhdG9yLmFuYWx5c2lzLmNvdW50ID09IDA7CiAgfQoKICB2b2lkIF9jb21waWxlKCkgewogICAgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvciBnZW5lcmF0b3IgPQogICAgICAgIG5ldyBJbnN0YW50aWF0b3JHZW5lcmF0b3JWaXNpdG9yKGZvcmNlQ29weSk7CiAgICBpbnN0YW50aWF0b3IgPSBnZW5lcmF0b3IuY29tcGlsZShhc3QpOwogICAgcG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPSBnZW5lcmF0b3IuYW5hbHlzaXMuY291bnQ7CiAgICBTZXQ8U3RyaW5nPiBuYW1lcyA9IGdlbmVyYXRvci5hbmFseXNpcy5ob2xlTmFtZXM7CiAgICBob2xlTmFtZXMgPSBuYW1lcy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICB9CgogIC8vLyBJbnN0YW50aWF0ZXMgdGhlIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIFthcmd1bWVudHNdLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBmaWxscyBpbiB0aGUgaG9sZXMgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiBUaGUgW2FyZ3VtZW50c10KICAvLy8gbXVzdCBiZSBlaXRoZXIgYSBbTGlzdF0gb3IgYSBbTWFwXS4KICBOb2RlIGluc3RhbnRpYXRlKHZhciBhcmd1bWVudHMpIHsKICAgIGlmIChhcmd1bWVudHMgaXMgTGlzdCkgewogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCkgewogICAgICAgIHRocm93ICdXcm9uZyBudW1iZXIgb2YgdGVtcGxhdGUgYXJndW1lbnRzLCBnaXZlbiAke2FyZ3VtZW50cy5sZW5ndGh9LCAnCiAgICAgICAgICAgICdleHBlY3RlZCAkcG9zaXRpb25hbEFyZ3VtZW50Q291bnQnCiAgICAgICAgICAgICcsIHNvdXJjZTogIiRzb3VyY2UiJzsKICAgICAgfQogICAgICByZXR1cm4gaW5zdGFudGlhdG9yKGFyZ3VtZW50cyk7CiAgICB9CiAgICBhc3NlcnQoYXJndW1lbnRzIGlzIE1hcCk7CiAgICBpZiAoaG9sZU5hbWVzLmxlbmd0aCA8IGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgLy8gVGhpcyBzZWFyY2ggaXMgaW4gTyhuKSwgYnV0IHdlIG9ubHkgZG8gaXQgaW4gY2FzZSBvZiBhbiBlcnJvciwgYW5kIHRoZQogICAgICAvLyBudW1iZXIgb2YgaG9sZXMgc2hvdWxkIGJlIHF1aXRlIGxpbWl0ZWQuCiAgICAgIFN0cmluZyB1bnVzZWROYW1lcyA9CiAgICAgICAgICBhcmd1bWVudHMua2V5cy53aGVyZSgobmFtZSkgPT4gIWhvbGVOYW1lcy5jb250YWlucyhuYW1lKSkuam9pbigiLCAiKTsKICAgICAgdGhyb3cgIlRlbXBsYXRlIGFyZ3VtZW50cyBoYXMgdW51c2VkIG1hcHBpbmdzOiAkdW51c2VkTmFtZXMiOwogICAgfQogICAgaWYgKCFob2xlTmFtZXMuZXZlcnkoKFN0cmluZyBuYW1lKSA9PiBhcmd1bWVudHMuY29udGFpbnNLZXkobmFtZSkpKSB7CiAgICAgIFN0cmluZyBub3RGb3VuZCA9CiAgICAgICAgICBob2xlTmFtZXMud2hlcmUoKG5hbWUpID0+ICFhcmd1bWVudHMuY29udGFpbnNLZXkobmFtZSkpLmpvaW4oIiwgIik7CiAgICAgIHRocm93ICJUZW1wbGF0ZSBhcmd1bWVudHMgaXMgbWlzc2luZyBtYXBwaW5ncyBmb3I6ICRub3RGb3VuZCI7CiAgICB9CiAgICByZXR1cm4gaW5zdGFudGlhdG9yKGFyZ3VtZW50cyk7CiAgfQp9CgovKioKICogQW4gSW5zdGFudGlhdG9yIGlzIGEgRnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgYSBKUyBBU1QgdHJlZSBvciBMaXN0IG9mCiAqIHRyZWVzLiBbYXJndW1lbnRzXSBpcyBhIExpc3QgZm9yIHBvc2l0aW9uYWwgdGVtcGxhdGVzLCBvciBNYXAgZm9yCiAqIG5hbWVkIHRlbXBsYXRlcy4KICovCnR5cGVkZWYgLypOb2RlfEl0ZXJhYmxlPE5vZGU+Ki8gSW5zdGFudGlhdG9yKHZhciBhcmd1bWVudHMpOwoKLyoqCiAqIEluc3RhbnRpYXRvckdlbmVyYXRvclZpc2l0b3IgY29tcGlsZXMgYSB0ZW1wbGF0ZS4gIFRoaXMgY2xhc3MgY29tcGlsZXMgYSB0cmVlCiAqIGNvbnRhaW5pbmcgW0ludGVycG9sYXRlZE5vZGVdcyBpbnRvIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNyZWF0ZSBhIGNvcHkgb2YgdGhlCiAqIHRyZWUgd2l0aCB0aGUgaW50ZXJwb2xhdGVkIG5vZGVzIHN1YnN0aXR1dGVkIHdpdGggcHJvdmlkZWQgdmFsdWVzLgogKi8KY2xhc3MgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvciBpbXBsZW1lbnRzIE5vZGVWaXNpdG9yPEluc3RhbnRpYXRvcj4gewogIGZpbmFsIGJvb2wgZm9yY2VDb3B5OwoKICBJbnRlcnBvbGF0ZWROb2RlQW5hbHlzaXMgYW5hbHlzaXMgPSBuZXcgSW50ZXJwb2xhdGVkTm9kZUFuYWx5c2lzKCk7CgogIC8qKgogICAqIFRoZSBlbnRpcmUgdHJlZSBpcyBjbG9uZWQgaWYgW2ZvcmNlQ29weV0gaXMgdHJ1ZS4KICAgKi8KICBJbnN0YW50aWF0b3JHZW5lcmF0b3JWaXNpdG9yKHRoaXMuZm9yY2VDb3B5KTsKCiAgSW5zdGFudGlhdG9yIGNvbXBpbGUoTm9kZSBub2RlKSB7CiAgICBhbmFseXNpcy52aXNpdChub2RlKTsKICAgIEluc3RhbnRpYXRvciByZXN1bHQgPSB2aXNpdChub2RlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgZXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKICAgIHRocm93IG1lc3NhZ2U7CiAgfQoKICBzdGF0aWMgSW5zdGFudGlhdG9yIHNhbWUoTm9kZSBub2RlKSA9PiAoYXJndW1lbnRzKSA9PiBub2RlOwogIHN0YXRpYyBOb2RlIG1ha2VOdWxsKGFyZ3VtZW50cykgPT4gbnVsbDsKCiAgSW5zdGFudGlhdG9yIHZpc2l0KE5vZGUgbm9kZSkgewogICAgaWYgKGZvcmNlQ29weSB8fCBhbmFseXNpcy5jb250YWluc0ludGVycG9sYXRlZE5vZGVzKG5vZGUpKSB7CiAgICAgIHJldHVybiBub2RlLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIHJldHVybiBzYW1lKG5vZGUpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TnVsbGFibGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gbWFrZU51bGw7CiAgICByZXR1cm4gdmlzaXQobm9kZSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRTcGxheWFibGUoTm9kZSBub2RlKSB7CiAgICAvLyBUT0RPKHNyYSk6IFByb2Nlc3MgaW1tZWRpYXRlIFtJbnRlcnBvbGF0ZWROb2RlXXMsIHBlcm1pdHRpbmcgc3BsYXlpbmcuCiAgICByZXR1cm4gdmlzaXQobm9kZSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXROb2RlKE5vZGUgbm9kZSkgewogICAgdGhyb3cgJ1VuaW1wbGVtZW50ZWQgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvciBmb3IgJG5vZGUnOwogIH0KCiAgc3RhdGljIFJlZ0V4cCBpZGVudGlmaWVyUkUgPSBuZXcgUmVnRXhwKHInXltBLVphLXpfJF1bQS1aYS16XyQwLTldKiQnKTsKCiAgc3RhdGljIEV4cHJlc3Npb24gY29udmVydFN0cmluZ1RvVmFyaWFibGVVc2UoU3RyaW5nIHZhbHVlKSB7CiAgICBhc3NlcnQoaWRlbnRpZmllclJFLmhhc01hdGNoKHZhbHVlKSk7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlVXNlKHZhbHVlKTsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIGNvbnZlcnRTdHJpbmdUb1ZhcmlhYmxlRGVjbGFyYXRpb24oU3RyaW5nIHZhbHVlKSB7CiAgICBhc3NlcnQoaWRlbnRpZmllclJFLmhhc01hdGNoKHZhbHVlKSk7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24odmFsdWUpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IG5vZGUubmFtZU9yUG9zaXRpb247CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICBpZiAodmFsdWUgaXMgRXhwcmVzc2lvbikgcmV0dXJuIHZhbHVlOwogICAgICBpZiAodmFsdWUgaXMgU3RyaW5nKSByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFibGVVc2UodmFsdWUpOwogICAgICB0aHJvdyBlcnJvcigKICAgICAgICAgICdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiBpcyBub3QgYW4gRXhwcmVzc2lvbjogJHZhbHVlJyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgIGlmICh2YWx1ZSBpcyBEZWNsYXJhdGlvbikgcmV0dXJuIHZhbHVlOwogICAgICBpZiAodmFsdWUgaXMgU3RyaW5nKSByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFibGVEZWNsYXJhdGlvbih2YWx1ZSk7CiAgICAgIHRocm93IGVycm9yKAogICAgICAgICAgJ0ludGVycG9sYXRlZCB2YWx1ZSAjJG5hbWVPclBvc2l0aW9uIGlzIG5vdCBhIGRlY2xhcmF0aW9uOiAkdmFsdWUnKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRTcGxheWFibGVFeHByZXNzaW9uKE5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbikgewogICAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBub2RlLm5hbWVPclBvc2l0aW9uOwogICAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgICAgRXhwcmVzc2lvbiB0b0V4cHJlc3Npb24oaXRlbSkgewogICAgICAgICAgaWYgKGl0ZW0gaXMgRXhwcmVzc2lvbikgcmV0dXJuIGl0ZW07CiAgICAgICAgICBpZiAoaXRlbSBpcyBTdHJpbmcpIHJldHVybiBjb252ZXJ0U3RyaW5nVG9WYXJpYWJsZVVzZShpdGVtKTsKICAgICAgICAgIHRocm93IGVycm9yKCdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiBpcyBub3QgJwogICAgICAgICAgICAgICdhbiBFeHByZXNzaW9uIG9yIExpc3Qgb2YgRXhwcmVzc2lvbnM6ICR2YWx1ZScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHZhbHVlIGlzIEl0ZXJhYmxlKSByZXR1cm4gdmFsdWUubWFwKHRvRXhwcmVzc2lvbik7CiAgICAgICAgcmV0dXJuIHRvRXhwcmVzc2lvbih2YWx1ZSk7CiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gdmlzaXQobm9kZSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKEludGVycG9sYXRlZExpdGVyYWwgbm9kZSkgewogICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgIGlmICh2YWx1ZSBpcyBMaXRlcmFsIHx8IHZhbHVlIGlzIERlZmVycmVkRXhwcmVzc2lvbikgcmV0dXJuIHZhbHVlOwogICAgICBlcnJvcignSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90IGEgTGl0ZXJhbDogJHZhbHVlJyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKEludGVycG9sYXRlZFBhcmFtZXRlciBub2RlKSB7CiAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBub2RlLm5hbWVPclBvc2l0aW9uOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzW25hbWVPclBvc2l0aW9uXTsKCiAgICAgIFBhcmFtZXRlciB0b1BhcmFtZXRlcihpdGVtKSB7CiAgICAgICAgaWYgKGl0ZW0gaXMgUGFyYW1ldGVyKSByZXR1cm4gaXRlbTsKICAgICAgICBpZiAoaXRlbSBpcyBTdHJpbmcpIHJldHVybiBuZXcgUGFyYW1ldGVyKGl0ZW0pOwogICAgICAgIHRocm93IGVycm9yKCdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiBpcyBub3QgYSBQYXJhbWV0ZXIgb3InCiAgICAgICAgICAgICcgTGlzdCBvZiBQYXJhbWV0ZXJzOiAkdmFsdWUnKTsKICAgICAgfQoKICAgICAgaWYgKHZhbHVlIGlzIEl0ZXJhYmxlKSByZXR1cm4gdmFsdWUubWFwKHRvUGFyYW1ldGVyKTsKICAgICAgcmV0dXJuIHRvUGFyYW1ldGVyKHZhbHVlKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3RvcihJbnRlcnBvbGF0ZWRTZWxlY3RvciBub2RlKSB7CiAgICAvLyBBIHNlbGVjdG9yIGlzIGFuIGV4cHJlc3Npb24sIGFzIGluIGBhW3NlbGVjdG9yXWAuCiAgICAvLyBBIFN0cmluZyBhcmd1bWVudCBjb252ZXJ0ZWQgaW50byBhIExpdGVyYWxTdHJpbmcsIHNvIGBhLiNgIHdpdGggYXJndW1lbnQKICAgIC8vICdmb28nIGdlbmVyYXRlcyBgYVsiZm9vIl1gIHdoaWNoIHByaW50cyBhcyBgYS5mb29gLgogICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgIGlmICh2YWx1ZSBpcyBFeHByZXNzaW9uKSByZXR1cm4gdmFsdWU7CiAgICAgIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHJldHVybiBuZXcgTGl0ZXJhbFN0cmluZygnIiR2YWx1ZSInKTsKICAgICAgdGhyb3cgZXJyb3IoCiAgICAgICAgICAnSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90IGEgc2VsZWN0b3I6ICR2YWx1ZScpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEludGVycG9sYXRlZFN0YXRlbWVudChJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgIGlmICh2YWx1ZSBpcyBOb2RlKSByZXR1cm4gdmFsdWUudG9TdGF0ZW1lbnQoKTsKICAgICAgdGhyb3cgZXJyb3IoCiAgICAgICAgICAnSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90IGEgU3RhdGVtZW50OiAkdmFsdWUnKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRTcGxheWFibGVTdGF0ZW1lbnQoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQpIHsKICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICAgIFN0YXRlbWVudCB0b1N0YXRlbWVudChpdGVtKSB7CiAgICAgICAgICBpZiAoaXRlbSBpcyBTdGF0ZW1lbnQpIHJldHVybiBpdGVtOwogICAgICAgICAgaWYgKGl0ZW0gaXMgRXhwcmVzc2lvbikgcmV0dXJuIGl0ZW0udG9TdGF0ZW1lbnQoKTsKICAgICAgICAgIHRocm93IGVycm9yKCdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiBpcyBub3QgJwogICAgICAgICAgICAgICdhIFN0YXRlbWVudCBvciBMaXN0IG9mIFN0YXRlbWVudHM6ICR2YWx1ZScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHZhbHVlIGlzIEl0ZXJhYmxlKSByZXR1cm4gdmFsdWUubWFwKHRvU3RhdGVtZW50KTsKICAgICAgICByZXR1cm4gdG9TdGF0ZW1lbnQodmFsdWUpOwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHZpc2l0KG5vZGUpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUpIHsKICAgIExpc3Q8SW5zdGFudGlhdG9yPiBpbnN0YW50aWF0b3JzID0KICAgICAgICBub2RlLmJvZHkubWFwKHZpc2l0U3BsYXlhYmxlU3RhdGVtZW50KS50b0xpc3QoKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKICAgICAgdm9pZCBhZGQobm9kZSkgewogICAgICAgIGlmIChub2RlIGlzIEVtcHR5U3RhdGVtZW50KSByZXR1cm47CiAgICAgICAgaWYgKG5vZGUgaXMgSXRlcmFibGUpIHsKICAgICAgICAgIHN0YXRlbWVudHMuYWRkQWxsKG5vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZW1lbnRzLmFkZChub2RlLnRvU3RhdGVtZW50KCkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZm9yIChJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yIGluIGluc3RhbnRpYXRvcnMpIHsKICAgICAgICBhZGQoaW5zdGFudGlhdG9yKGFyZ3VtZW50cykpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgUHJvZ3JhbShzdGF0ZW1lbnRzKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRCbG9jayhCbG9jayBub2RlKSB7CiAgICBMaXN0PEluc3RhbnRpYXRvcj4gaW5zdGFudGlhdG9ycyA9CiAgICAgICAgbm9kZS5zdGF0ZW1lbnRzLm1hcCh2aXNpdFNwbGF5YWJsZVN0YXRlbWVudCkudG9MaXN0KCk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxTdGF0ZW1lbnQ+W107CiAgICAgIHZvaWQgYWRkKG5vZGUpIHsKICAgICAgICBpZiAobm9kZSBpcyBFbXB0eVN0YXRlbWVudCkgcmV0dXJuOwogICAgICAgIGlmIChub2RlIGlzIEl0ZXJhYmxlKSB7CiAgICAgICAgICBzdGF0ZW1lbnRzLmFkZEFsbChub2RlKTsKICAgICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgQmxvY2spIHsKICAgICAgICAgIHN0YXRlbWVudHMuYWRkQWxsKG5vZGUuc3RhdGVtZW50cyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0YXRlbWVudHMuYWRkKG5vZGUudG9TdGF0ZW1lbnQoKSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBmb3IgKEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3IgaW4gaW5zdGFudGlhdG9ycykgewogICAgICAgIGFkZChpbnN0YW50aWF0b3IoYXJndW1lbnRzKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBCbG9jayhzdGF0ZW1lbnRzKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIGJ1aWxkRXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uKGFyZ3VtZW50cykudG9TdGF0ZW1lbnQoKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgRW1wdHlTdGF0ZW1lbnQoKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0SWYoSWYgbm9kZSkgewogICAgaWYgKG5vZGUuY29uZGl0aW9uIGlzIEludGVycG9sYXRlZEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIHZpc2l0SWZDb25kaXRpb25hbENvbXBpbGF0aW9uKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHZpc2l0SWZOb3JtYWwobm9kZSk7CiAgICB9CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRJZkNvbmRpdGlvbmFsQ29tcGlsYXRpb24oSWYgbm9kZSkgewogICAgLy8gU3BlY2lhbCB2ZXJzaW9uIG9mIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbiB0aGF0IHBlcm1pdHMgYm9vbHMuCiAgICBjb21waWxlQ29uZGl0aW9uKEludGVycG9sYXRlZEV4cHJlc3Npb24gbm9kZSkgewogICAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBub2RlLm5hbWVPclBvc2l0aW9uOwogICAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgICAgaWYgKHZhbHVlIGlzIGJvb2wpIHJldHVybiB2YWx1ZTsKICAgICAgICBpZiAodmFsdWUgaXMgRXhwcmVzc2lvbikgcmV0dXJuIHZhbHVlOwogICAgICAgIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHJldHVybiBjb252ZXJ0U3RyaW5nVG9WYXJpYWJsZVVzZSh2YWx1ZSk7CiAgICAgICAgdGhyb3cgZXJyb3IoJ0ludGVycG9sYXRlZCB2YWx1ZSAjJG5hbWVPclBvc2l0aW9uICcKICAgICAgICAgICAgJ2lzIG5vdCBhbiBFeHByZXNzaW9uOiAkdmFsdWUnKTsKICAgICAgfTsKICAgIH0KCiAgICB2YXIgbWFrZUNvbmRpdGlvbiA9IGNvbXBpbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgSW5zdGFudGlhdG9yIG1ha2VUaGVuID0gdmlzaXQobm9kZS50aGVuKTsKICAgIEluc3RhbnRpYXRvciBtYWtlT3RoZXJ3aXNlID0gdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgdmFyIGNvbmRpdGlvbiA9IG1ha2VDb25kaXRpb24oYXJndW1lbnRzKTsKICAgICAgaWYgKGNvbmRpdGlvbiBpcyBib29sKSB7CiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PSB0cnVlKSB7CiAgICAgICAgICByZXR1cm4gbWFrZVRoZW4oYXJndW1lbnRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG1ha2VPdGhlcndpc2UoYXJndW1lbnRzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBJZihjb25kaXRpb24sIG1ha2VUaGVuKGFyZ3VtZW50cyksIG1ha2VPdGhlcndpc2UoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SWZOb3JtYWwoSWYgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VDb25kaXRpb24gPSB2aXNpdChub2RlLmNvbmRpdGlvbik7CiAgICBJbnN0YW50aWF0b3IgbWFrZVRoZW4gPSB2aXNpdChub2RlLnRoZW4pOwogICAgSW5zdGFudGlhdG9yIG1ha2VPdGhlcndpc2UgPSB2aXNpdChub2RlLm90aGVyd2lzZSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IElmKG1ha2VDb25kaXRpb24oYXJndW1lbnRzKSwgbWFrZVRoZW4oYXJndW1lbnRzKSwKICAgICAgICAgIG1ha2VPdGhlcndpc2UoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0Rm9yKEZvciBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUluaXQgPSB2aXNpdE51bGxhYmxlKG5vZGUuaW5pdCk7CiAgICBJbnN0YW50aWF0b3IgbWFrZUNvbmRpdGlvbiA9IHZpc2l0TnVsbGFibGUobm9kZS5jb25kaXRpb24pOwogICAgSW5zdGFudGlhdG9yIG1ha2VVcGRhdGUgPSB2aXNpdE51bGxhYmxlKG5vZGUudXBkYXRlKTsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IEZvcihtYWtlSW5pdChhcmd1bWVudHMpLCBtYWtlQ29uZGl0aW9uKGFyZ3VtZW50cyksCiAgICAgICAgICBtYWtlVXBkYXRlKGFyZ3VtZW50cyksIG1ha2VCb2R5KGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEZvckluKEZvckluIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlTGVmdEhhbmRTaWRlID0gdmlzaXQobm9kZS5sZWZ0SGFuZFNpZGUpOwogICAgSW5zdGFudGlhdG9yIG1ha2VPYmplY3QgPSB2aXNpdChub2RlLm9iamVjdCk7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBGb3JJbihtYWtlTGVmdEhhbmRTaWRlKGFyZ3VtZW50cyksIG1ha2VPYmplY3QoYXJndW1lbnRzKSwKICAgICAgICAgIG1ha2VCb2R5KGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIFRPRE8oU3RyaW5nIG5hbWUpIHsKICAgIHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoJyR0aGlzLiRuYW1lJyk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRXaGlsZShXaGlsZSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUNvbmRpdGlvbiA9IHZpc2l0KG5vZGUuY29uZGl0aW9uKTsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IFdoaWxlKG1ha2VDb25kaXRpb24oYXJndW1lbnRzKSwgbWFrZUJvZHkoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0RG8oRG8gbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VCb2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIEluc3RhbnRpYXRvciBtYWtlQ29uZGl0aW9uID0gdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBEbyhtYWtlQm9keShhcmd1bWVudHMpLCBtYWtlQ29uZGl0aW9uKGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdENvbnRpbnVlKENvbnRpbnVlIG5vZGUpID0+CiAgICAgIChhcmd1bWVudHMpID0+IG5ldyBDb250aW51ZShub2RlLnRhcmdldExhYmVsKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0QnJlYWsoQnJlYWsgbm9kZSkgPT4KICAgICAgKGFyZ3VtZW50cykgPT4gbmV3IEJyZWFrKG5vZGUudGFyZ2V0TGFiZWwpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRSZXR1cm4oUmV0dXJuIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRXhwcmVzc2lvbiA9IHZpc2l0TnVsbGFibGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4gbmV3IFJldHVybihtYWtlRXhwcmVzc2lvbihhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdERhcnRZaWVsZChEYXJ0WWllbGQgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VFeHByZXNzaW9uID0gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PgogICAgICAgIG5ldyBEYXJ0WWllbGQobWFrZUV4cHJlc3Npb24oYXJndW1lbnRzKSwgbm9kZS5oYXNTdGFyKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFRocm93KFRocm93IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4gbmV3IFRocm93KG1ha2VFeHByZXNzaW9uKGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0VHJ5KFRyeSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgSW5zdGFudGlhdG9yIG1ha2VDYXRjaCA9IHZpc2l0TnVsbGFibGUobm9kZS5jYXRjaFBhcnQpOwogICAgSW5zdGFudGlhdG9yIG1ha2VGaW5hbGx5ID0gdmlzaXROdWxsYWJsZShub2RlLmZpbmFsbHlQYXJ0KTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PiBuZXcgVHJ5KAogICAgICAgIG1ha2VCb2R5KGFyZ3VtZW50cyksIG1ha2VDYXRjaChhcmd1bWVudHMpLCBtYWtlRmluYWxseShhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdENhdGNoKENhdGNoIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRGVjbGFyYXRpb24gPSB2aXNpdChub2RlLmRlY2xhcmF0aW9uKTsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4KICAgICAgICBuZXcgQ2F0Y2gobWFrZURlY2xhcmF0aW9uKGFyZ3VtZW50cyksIG1ha2VCb2R5KGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0U3dpdGNoKFN3aXRjaCBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUtleSA9IHZpc2l0KG5vZGUua2V5KTsKICAgIEl0ZXJhYmxlPEluc3RhbnRpYXRvcj4gbWFrZUNhc2VzID0gbm9kZS5jYXNlcy5tYXAodmlzaXQpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBTd2l0Y2goCiAgICAgICAgICBtYWtlS2V5KGFyZ3VtZW50cyksCiAgICAgICAgICBtYWtlQ2FzZXMKICAgICAgICAgICAgICAubWFwPFN3aXRjaENsYXVzZT4oKEluc3RhbnRpYXRvciBtYWtlQ2FzZSkgPT4gbWFrZUNhc2UoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAudG9MaXN0KCkpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdENhc2UoQ2FzZSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUV4cHJlc3Npb24gPSB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgSW5zdGFudGlhdG9yIG1ha2VCb2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgQ2FzZShtYWtlRXhwcmVzc2lvbihhcmd1bWVudHMpLCBtYWtlQm9keShhcmd1bWVudHMpKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXREZWZhdWx0KERlZmF1bHQgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VCb2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgRGVmYXVsdChtYWtlQm9keShhcmd1bWVudHMpKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VOYW1lID0gdmlzaXQobm9kZS5uYW1lKTsKICAgIEluc3RhbnRpYXRvciBtYWtlRnVuY3Rpb24gPSB2aXNpdChub2RlLmZ1bmN0aW9uKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PgogICAgICAgIG5ldyBGdW5jdGlvbkRlY2xhcmF0aW9uKG1ha2VOYW1lKGFyZ3VtZW50cyksIG1ha2VGdW5jdGlvbihhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+IG5ldyBMYWJlbGVkU3RhdGVtZW50KG5vZGUubGFiZWwsIG1ha2VCb2R5KGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TGl0ZXJhbFN0YXRlbWVudChMaXRlcmFsU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIFRPRE8oJ3Zpc2l0TGl0ZXJhbFN0YXRlbWVudCcpOwogIEluc3RhbnRpYXRvciB2aXNpdExpdGVyYWxFeHByZXNzaW9uKExpdGVyYWxFeHByZXNzaW9uIG5vZGUpID0+CiAgICAgIFRPRE8oJ3Zpc2l0TGl0ZXJhbEV4cHJlc3Npb24nKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSkgewogICAgTGlzdDxJbnN0YW50aWF0b3I+IGRlY2xhcmF0aW9uTWFrZXJzID0KICAgICAgICBub2RlLmRlY2xhcmF0aW9ucy5tYXAodmlzaXQpLnRvTGlzdCgpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgTGlzdDxWYXJpYWJsZUluaXRpYWxpemF0aW9uPiBkZWNsYXJhdGlvbnMgPSA8VmFyaWFibGVJbml0aWFsaXphdGlvbj5bXTsKICAgICAgZm9yIChJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yIGluIGRlY2xhcmF0aW9uTWFrZXJzKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGluc3RhbnRpYXRvcihhcmd1bWVudHMpOwogICAgICAgIGRlY2xhcmF0aW9ucy5hZGQocmVzdWx0KTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGRlY2xhcmF0aW9ucyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0QXNzaWdubWVudChBc3NpZ25tZW50IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlTGVmdEhhbmRTaWRlID0gdmlzaXQobm9kZS5sZWZ0SGFuZFNpZGUpOwogICAgU3RyaW5nIG9wID0gbm9kZS5vcDsKICAgIEluc3RhbnRpYXRvciBtYWtlVmFsdWUgPSB2aXNpdE51bGxhYmxlKG5vZGUudmFsdWUpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50LmNvbXBvdW5kKAogICAgICAgICAgbWFrZUxlZnRIYW5kU2lkZShhcmd1bWVudHMpLCBvcCwgbWFrZVZhbHVlKGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZURlY2xhcmF0aW9uID0gdmlzaXQobm9kZS5kZWNsYXJhdGlvbik7CiAgICBJbnN0YW50aWF0b3IgbWFrZVZhbHVlID0gdmlzaXROdWxsYWJsZShub2RlLnZhbHVlKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgVmFyaWFibGVJbml0aWFsaXphdGlvbigKICAgICAgICAgIG1ha2VEZWNsYXJhdGlvbihhcmd1bWVudHMpLCBtYWtlVmFsdWUoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0Q29uZGl0aW9uYWwoQ29uZGl0aW9uYWwgY29uZCkgewogICAgSW5zdGFudGlhdG9yIG1ha2VDb25kaXRpb24gPSB2aXNpdChjb25kLmNvbmRpdGlvbik7CiAgICBJbnN0YW50aWF0b3IgbWFrZVRoZW4gPSB2aXNpdChjb25kLnRoZW4pOwogICAgSW5zdGFudGlhdG9yIG1ha2VPdGhlcndpc2UgPSB2aXNpdChjb25kLm90aGVyd2lzZSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4gbmV3IENvbmRpdGlvbmFsKG1ha2VDb25kaXRpb24oYXJndW1lbnRzKSwKICAgICAgICBtYWtlVGhlbihhcmd1bWVudHMpLCBtYWtlT3RoZXJ3aXNlKGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TmV3KE5ldyBub2RlKSA9PgogICAgICBoYW5kbGVDYWxsT3JOZXcobm9kZSwgKHRhcmdldCwgYXJndW1lbnRzKSA9PiBuZXcgTmV3KHRhcmdldCwgYXJndW1lbnRzKSk7CgogIEluc3RhbnRpYXRvciB2aXNpdENhbGwoQ2FsbCBub2RlKSA9PgogICAgICBoYW5kbGVDYWxsT3JOZXcobm9kZSwgKHRhcmdldCwgYXJndW1lbnRzKSA9PiBuZXcgQ2FsbCh0YXJnZXQsIGFyZ3VtZW50cykpOwoKICBJbnN0YW50aWF0b3IgaGFuZGxlQ2FsbE9yTmV3KENhbGwgbm9kZSwgZmluaXNoKHRhcmdldCwgYXJndW1lbnRzKSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VUYXJnZXQgPSB2aXNpdChub2RlLnRhcmdldCk7CiAgICBJdGVyYWJsZTxJbnN0YW50aWF0b3I+IGFyZ3VtZW50TWFrZXJzID0KICAgICAgICBub2RlLmFyZ3VtZW50cy5tYXAodmlzaXRTcGxheWFibGVFeHByZXNzaW9uKS50b0xpc3QoKTsKCiAgICAvLyBUT0RPKHNyYSk6IEF2b2lkIGNvcHlpbmcgY2FsbCBhcmd1bWVudHMgaWYgbm8gaW50ZXJwb2xhdGlvbiBvciBmb3JjZWQKICAgIC8vIGNvcHlpbmcuCiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBOb2RlIHRhcmdldCA9IG1ha2VUYXJnZXQoYXJndW1lbnRzKTsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBjYWxsQXJndW1lbnRzID0gPEV4cHJlc3Npb24+W107CiAgICAgIGZvciAoSW5zdGFudGlhdG9yIGluc3RhbnRpYXRvciBpbiBhcmd1bWVudE1ha2VycykgewogICAgICAgIHZhciByZXN1bHQgPSBpbnN0YW50aWF0b3IoYXJndW1lbnRzKTsKICAgICAgICBpZiAocmVzdWx0IGlzIEl0ZXJhYmxlKSB7CiAgICAgICAgICBjYWxsQXJndW1lbnRzLmFkZEFsbChyZXN1bHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjYWxsQXJndW1lbnRzLmFkZChyZXN1bHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmluaXNoKHRhcmdldCwgY2FsbEFyZ3VtZW50cy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0QmluYXJ5KEJpbmFyeSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUxlZnQgPSB2aXNpdChub2RlLmxlZnQpOwogICAgSW5zdGFudGlhdG9yIG1ha2VSaWdodCA9IHZpc2l0KG5vZGUucmlnaHQpOwogICAgU3RyaW5nIG9wID0gbm9kZS5vcDsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PgogICAgICAgIG5ldyBCaW5hcnkob3AsIG1ha2VMZWZ0KGFyZ3VtZW50cyksIG1ha2VSaWdodChhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFByZWZpeChQcmVmaXggbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VPcGVyYW5kID0gdmlzaXQobm9kZS5hcmd1bWVudCk7CiAgICBTdHJpbmcgb3AgPSBub2RlLm9wOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+IG5ldyBQcmVmaXgob3AsIG1ha2VPcGVyYW5kKGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0UG9zdGZpeChQb3N0Zml4IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlT3BlcmFuZCA9IHZpc2l0KG5vZGUuYXJndW1lbnQpOwogICAgU3RyaW5nIG9wID0gbm9kZS5vcDsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PiBuZXcgUG9zdGZpeChvcCwgbWFrZU9wZXJhbmQoYXJndW1lbnRzKSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRWYXJpYWJsZVVzZShWYXJpYWJsZVVzZSBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgVmFyaWFibGVVc2Uobm9kZS5uYW1lKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0VGhpcyhUaGlzIG5vZGUpID0+IChhcmd1bWVudHMpID0+IG5ldyBUaGlzKCk7CgogIEluc3RhbnRpYXRvciB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLm5hbWUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRQYXJhbWV0ZXIoUGFyYW1ldGVyIG5vZGUpID0+CiAgICAgIChhcmd1bWVudHMpID0+IG5ldyBQYXJhbWV0ZXIobm9kZS5uYW1lKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0QWNjZXNzKFByb3BlcnR5QWNjZXNzIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlUmVjZWl2ZXIgPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIEluc3RhbnRpYXRvciBtYWtlU2VsZWN0b3IgPSB2aXNpdChub2RlLnNlbGVjdG9yKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PgogICAgICAgIG5ldyBQcm9wZXJ0eUFjY2VzcyhtYWtlUmVjZWl2ZXIoYXJndW1lbnRzKSwgbWFrZVNlbGVjdG9yKGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TmFtZWRGdW5jdGlvbihOYW1lZEZ1bmN0aW9uIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRGVjbGFyYXRpb24gPSB2aXNpdChub2RlLm5hbWUpOwogICAgSW5zdGFudGlhdG9yIG1ha2VGdW5jdGlvbiA9IHZpc2l0KG5vZGUuZnVuY3Rpb24pOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+CiAgICAgICAgbmV3IE5hbWVkRnVuY3Rpb24obWFrZURlY2xhcmF0aW9uKGFyZ3VtZW50cyksIG1ha2VGdW5jdGlvbihhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEZ1bihGdW4gbm9kZSkgewogICAgTGlzdDxJbnN0YW50aWF0b3I+IHBhcmFtTWFrZXJzID0gbm9kZS5wYXJhbXMubWFwKHZpc2l0U3BsYXlhYmxlKS50b0xpc3QoKTsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICAvLyBUT0RPKHNyYSk6IEF2b2lkIGNvcHlpbmcgcGFyYW1zIGlmIG5vIGludGVycG9sYXRpb24gb3IgZm9yY2VkIGNvcHlpbmcuCiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBMaXN0PFBhcmFtZXRlcj4gcGFyYW1zID0gPFBhcmFtZXRlcj5bXTsKICAgICAgZm9yIChJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yIGluIHBhcmFtTWFrZXJzKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGluc3RhbnRpYXRvcihhcmd1bWVudHMpOwogICAgICAgIGlmIChyZXN1bHQgaXMgSXRlcmFibGUpIHsKICAgICAgICAgIHBhcmFtcy5hZGRBbGwocmVzdWx0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcGFyYW1zLmFkZChyZXN1bHQpOwogICAgICAgIH0KICAgICAgfQogICAgICBTdGF0ZW1lbnQgYm9keSA9IG1ha2VCb2R5KGFyZ3VtZW50cyk7CiAgICAgIHJldHVybiBuZXcgRnVuKHBhcmFtcywgYm9keSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKERlZmVycmVkRXhwcmVzc2lvbiBub2RlKSA9PiBzYW1lKG5vZGUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXREZWZlcnJlZE51bWJlcihEZWZlcnJlZE51bWJlciBub2RlKSA9PiBzYW1lKG5vZGUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXREZWZlcnJlZFN0cmluZyhEZWZlcnJlZFN0cmluZyBub2RlKSA9PiAoYXJndW1lbnRzKSA9PiBub2RlOwoKICBJbnN0YW50aWF0b3IgdmlzaXRMaXRlcmFsQm9vbChMaXRlcmFsQm9vbCBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgTGl0ZXJhbEJvb2wobm9kZS52YWx1ZSk7CgogIEluc3RhbnRpYXRvciB2aXNpdExpdGVyYWxTdHJpbmcoTGl0ZXJhbFN0cmluZyBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgTGl0ZXJhbFN0cmluZyhub2RlLnZhbHVlKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0TGl0ZXJhbE51bWJlcihMaXRlcmFsTnVtYmVyIG5vZGUpID0+CiAgICAgIChhcmd1bWVudHMpID0+IG5ldyBMaXRlcmFsTnVtYmVyKG5vZGUudmFsdWUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRMaXRlcmFsTnVsbChMaXRlcmFsTnVsbCBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgTGl0ZXJhbE51bGwoKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIExpc3Q8SW5zdGFudGlhdG9yPiBwYXJ0TWFrZXJzID0KICAgICAgICBub2RlLnBhcnRzLm1hcCh2aXNpdCkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBMaXN0PExpdGVyYWw+IHBhcnRzID0gcGFydE1ha2VycwogICAgICAgICAgLm1hcCgoSW5zdGFudGlhdG9yIGluc3RhbnRpYXRvcikgPT4gaW5zdGFudGlhdG9yKGFyZ3VtZW50cykpCiAgICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIHJldHVybiBuZXcgU3RyaW5nQ29uY2F0ZW5hdGlvbihwYXJ0cyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TmFtZShOYW1lIG5vZGUpID0+IHNhbWUobm9kZSk7CgogIEluc3RhbnRpYXRvciB2aXNpdFBhcmVudGhlc2VzKFBhcmVudGhlc2VzIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRW5jbG9zZWQgPSB2aXNpdChub2RlLmVuY2xvc2VkKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIEV4cHJlc3Npb24gZW5jbG9zZWQgPSBtYWtlRW5jbG9zZWQoYXJndW1lbnRzKTsKICAgICAgcmV0dXJuIFBhcmVudGhlc2VzKGVuY2xvc2VkKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRBcnJheUluaXRpYWxpemVyKEFycmF5SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgLy8gVE9ETyhzcmEpOiBJbXBsZW1lbnQgc3BsaWNpbmc/CiAgICBMaXN0PEluc3RhbnRpYXRvcj4gZWxlbWVudE1ha2VycyA9CiAgICAgICAgbm9kZS5lbGVtZW50cy5tYXAodmlzaXQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBlbGVtZW50cyA9IGVsZW1lbnRNYWtlcnMKICAgICAgICAgIC5tYXA8RXhwcmVzc2lvbj4oCiAgICAgICAgICAgICAgKEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3IpID0+IGluc3RhbnRpYXRvcihhcmd1bWVudHMpKQogICAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICByZXR1cm4gbmV3IEFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEFycmF5SG9sZShBcnJheUhvbGUgbm9kZSkgewogICAgcmV0dXJuIChhcmd1bWVudHMpID0+IG5ldyBBcnJheUhvbGUoKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdE9iamVjdEluaXRpYWxpemVyKE9iamVjdEluaXRpYWxpemVyIG5vZGUpIHsKICAgIExpc3Q8SW5zdGFudGlhdG9yPiBwcm9wZXJ0eU1ha2VycyA9CiAgICAgICAgbm9kZS5wcm9wZXJ0aWVzLm1hcCh2aXNpdFNwbGF5YWJsZSkudG9MaXN0KCk7CiAgICBib29sIGlzT25lTGluZXIgPSBub2RlLmlzT25lTGluZXI7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBMaXN0PFByb3BlcnR5PiBwcm9wZXJ0aWVzID0gPFByb3BlcnR5PltdOwogICAgICBmb3IgKEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3IgaW4gcHJvcGVydHlNYWtlcnMpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gaW5zdGFudGlhdG9yKGFyZ3VtZW50cyk7CiAgICAgICAgaWYgKHJlc3VsdCBpcyBJdGVyYWJsZSkgewogICAgICAgICAgcHJvcGVydGllcy5hZGRBbGwocmVzdWx0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJvcGVydGllcy5hZGQocmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBPYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzLCBpc09uZUxpbmVyOiBpc09uZUxpbmVyKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRQcm9wZXJ0eShQcm9wZXJ0eSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZU5hbWUgPSB2aXNpdChub2RlLm5hbWUpOwogICAgSW5zdGFudGlhdG9yIG1ha2VWYWx1ZSA9IHZpc2l0KG5vZGUudmFsdWUpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9wZXJ0eShtYWtlTmFtZShhcmd1bWVudHMpLCBtYWtlVmFsdWUoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0UmVnRXhwTGl0ZXJhbChSZWdFeHBMaXRlcmFsIG5vZGUpID0+CiAgICAgIChhcmd1bWVudHMpID0+IG5ldyBSZWdFeHBMaXRlcmFsKG5vZGUucGF0dGVybik7CgogIEluc3RhbnRpYXRvciB2aXNpdENvbW1lbnQoQ29tbWVudCBub2RlKSA9PiBUT0RPKCd2aXNpdENvbW1lbnQnKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0QXdhaXQoQXdhaXQgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VFeHByZXNzaW9uID0gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgQXdhaXQobWFrZUV4cHJlc3Npb24oYXJndW1lbnRzKSk7CiAgICB9OwogIH0KfQoKLyoqCiAqIEludGVycG9sYXRlZE5vZGVBbmFseXNpcyBkZXRlcm1pbmVzIHdoaWNoIEFTVCB0cmVlcyBjb250YWluCiAqIFtJbnRlcnBvbGF0ZWROb2RlXXMsIGFuZCB0aGUgbmFtZXMgb2YgdGhlIG5hbWVkIGludGVycG9sYXRlZCBub2Rlcy4KICovCmNsYXNzIEludGVycG9sYXRlZE5vZGVBbmFseXNpcyBleHRlbmRzIEJhc2VWaXNpdG9yIHsKICBmaW5hbCBTZXQ8Tm9kZT4gY29udGFpbnNJbnRlcnBvbGF0ZWROb2RlID0gbmV3IFNldDxOb2RlPigpOwogIGZpbmFsIFNldDxTdHJpbmc+IGhvbGVOYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwogIGludCBjb3VudCA9IDA7CgogIEludGVycG9sYXRlZE5vZGVBbmFseXNpcygpOwoKICBib29sIGNvbnRhaW5zSW50ZXJwb2xhdGVkTm9kZXMoTm9kZSBub2RlKSA9PgogICAgICBjb250YWluc0ludGVycG9sYXRlZE5vZGUuY29udGFpbnMobm9kZSk7CgogIHZvaWQgdmlzaXQoTm9kZSBub2RlKSB7CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgdmlzaXROb2RlKE5vZGUgbm9kZSkgewogICAgaW50IGJlZm9yZSA9IGNvdW50OwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgaWYgKGNvdW50ICE9IGJlZm9yZSkgY29udGFpbnNJbnRlcnBvbGF0ZWROb2RlLmFkZChub2RlKTsKICB9CgogIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShJbnRlcnBvbGF0ZWROb2RlIG5vZGUpIHsKICAgIGNvbnRhaW5zSW50ZXJwb2xhdGVkTm9kZS5hZGQobm9kZSk7CiAgICBpZiAobm9kZS5pc05hbWVkKSBob2xlTmFtZXMuYWRkKG5vZGUubmFtZU9yUG9zaXRpb24pOwogICAgKytjb3VudDsKICB9Cn0KgxQATk48ARABGEtKARUBNSgEAT8YSSwVBAE0JwQBPhhKKxUEAgEEUE9DEgQRFxsYEgEdASQBKRouASI6RhAEASoXHRwfJCEnBAEpFx4cHiQhJwQBIC0xHCoEARQtNSs4Ni8EATwGTyokHTlQMCMIJgYeL1AyG1BEBkoYTkUGJAQCAQRJRRQEPQEEUVFGBEoYAUYBBjcGMAEkGicTBAEhEwQBPisBIkEgBhcEASonGAQBK04YBAEmQgQBSgE/KiMEAUcqKwQBSi4ZLS1FE08HBAFMLhktLk0TTwcEATUqMBsvKC9HRD8KAT8kCQYYBAFELhktSU0HBAFILhktASQsOFAsCAE8IQcEAUY5UDsuGS0tQRNMBwQBSC4ZLTUTTQcEATQpMBsvJi49RDwKAT4jCQYYBAEsJzkZMhcsICMRLgoIATkmCCYHBAEoJz8ZMhcsICMkLhEuCggBOSYIJAcEAUQ7GTcHBAE7KwEiNDINIgYEAThKNDAbLykvRzstCQYBOi44GTAfISYRKwoITwcEASg4LjgZQyUHBAEkNkA6LhlENwcEASg+Mi4ZSyAHBAEWMQQBKDguGUcHBAEiLjgZRAcEAS81ASkyASo9QQQBMDoaQAQBKDpABAEkLjxAI0wEASg8LhpEBAEqLD4ZGR4UURoHBAEmOi4ZRwcEASwuGS8HBAFELjYaTwQBPi5RBAE/JUEmAUwrLxlOPS4iCDgHBAEyPhk4GSZCBwQBSjw4GSk9BwQBNDguOEQ4BAElUAEnUQFHMiw/AU0QGSs3Oi4iKBElCghEBwQBKi4wGRpDBAEqNRlCBAEsNRlDBAE1MQFCAUU5ATEvATI2NhpOBAE4NTYaUAQBJE8uThkuNy4iIREeCggsJAcEAU8BRwFQATUyATk0ATk0ATUoAUQkNxknRyQtBwQBMwE0Nhk1JAcEAT4mJzoZMBxGJC0HBAEwKwQBQCg2JxkwOi4iJREiCghIBwQBLi4wGUYHBAE5NgFDASg6GTMHBAIBBD9HBDU+MxEBHgEvLwEaFwQBHhgePQQBMSg6DQQCASBwYWNrYWdlOmpzX2FzdC9zcmMvdGVtcGxhdGUuZGFydChzZGtyb290Oi9wa2cvanNfYXN0L2xpYi9zcmMvYnVpbGRlci5kYXJ0wADJ2i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBVdGlsaXRpZXMgZm9yIGJ1aWxkaW5nIEpTIEFTVHMgYXQgcnVudGltZS4gIENvbnRhaW5zIGEgYnVpbGRlciBjbGFzcwovLyBhbmQgYSBwYXJzZXIgdGhhdCBwYXJzZXMgcGFydCBvZiB0aGUgbGFuZ3VhZ2UuCgpwYXJ0IG9mIGpzX2FzdDsKCi8qKgogKiBHbG9iYWwgdGVtcGxhdGUgbWFuYWdlci4gIFdlIHNob3VsZCBhaW0gdG8gaGF2ZSBhIGZpeGVkIG51bWJlciBvZgogKiB0ZW1wbGF0ZXMuIFRoaXMgaW1wbGllcyB0aGF0IHdlIGRvIG5vdCB1c2UganMoJ3h4eCcpIHRvIHBhcnNlIHRleHQgdGhhdCBpcwogKiBjb25zdHJ1Y3RlZCBmcm9tIHZhbHVlcyB0aGF0IGRlcGVuZCBvbiBuYW1lcyBpbiB0aGUgRGFydCBwcm9ncmFtLgogKgogKiBUT0RPKHNyYSk6IEZpbmQgdGhlIHJlbWFpbmluZyBwbGFjZXMgd2hlcmUganMoJ3h4eCcpIHVzZWQgdG8gcGFyc2UgYW4KICogdW5ib3VuZGVkIG51bWJlciBvZiBleHByZXNzaW9uLCBvciBpbnN0aXR1dGUgYSBjYWNoZSBwb2xpY3kuCiAqLwpUZW1wbGF0ZU1hbmFnZXIgdGVtcGxhdGVNYW5hZ2VyID0gbmV3IFRlbXBsYXRlTWFuYWdlcigpOwoKLyoqCgpbanNdIGlzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIEpzQnVpbGRlci4gIEpzQnVpbGRlciBpcyBhIHNldCBvZiBjb252ZW5pZW5jZXMKZm9yIGNvbnN0cnVjdGluZyBKYXZhU2NyaXB0IEFTVHMuCgpbc3RyaW5nXSBhbmQgW251bWJlcl0gYXJlIHVzZWQgdG8gY3JlYXRlIGxlYWYgQVNUIG5vZGVzOgoKICAgIHZhciBzID0ganMuc3RyaW5nKCdoZWxsbycpOyAgICAvLyAgcyA9IG5ldyBMaXRlcmFsU3RyaW5nKCciaGVsbG8iJykKICAgIHZhciBuID0ganMubnVtYmVyKDEyMyk7ICAgICAgICAvLyAgbiA9IG5ldyBMaXRlcmFsTnVtYmVyKDEyMykKCkluIHRoZSBsaW5lIGFib3ZlIGBhIC0tPiBiYCBtZWFucyBEYXJ0IGV4cHJlc3Npb24gYGFgIGV2YWx1YXRlcyB0byBhIEphdmFTY3JpcHQKQVNUIHRoYXQgd291bGQgcHJldHR5LXByaW50IGFzIGBiYC4KClRoZSBbY2FsbF0gbWV0aG9kIGNvbnN0cnVjdHMgYW4gRXhwcmVzc2lvbiBBU1QuCgpObyBhcmd1bWVudAoKICAgIGpzKCd3aW5kb3cuYWxlcnQoImhlbGxvIiknKSAgLS0+ICB3aW5kb3cuYWxlcnQoImhlbGxvIikKClRoZSBpbnB1dCB0ZXh0IGNhbiBjb250YWluIHBsYWNlaG9sZGVycyBgI2AgdGhhdCBhcmUgcmVwbGFjZWQgd2l0aCBwcm92aWRlZAphcmd1bWVudHMuICBBIHNpbmdsZSBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIGRpcmVjdGx5OgoKICAgIGpzKCd3aW5kb3cuYWxlcnQoIyknLCBzKSAgIC0tPiAgd2luZG93LmFsZXJ0KCJoZWxsbyIpCgpNdWx0aXBsZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBhcyBhIGxpc3Q6CgogICAganMoJyMgKyAjJywgW3MsIHNdKSAgLS0+ICAiaGVsbG8iICsgImhlbGxvIgoKVGhlIFtzdGF0ZW1lbnRdIG1ldGhvZCBjb25zdHJ1Y3RzIGEgU3RhdGVtZW50IEFTVCwgYnV0IGlzIG90aGVyd2lzZSBsaWtlIHRoZQpbY2FsbF0gbWV0aG9kLiAgVGhpcyBjb25zdHJ1Y3RzIGEgUmV0dXJuIEFTVDoKCiAgICB2YXIgcmV0ID0ganMuc3RhdGVtZW50KCdyZXR1cm4gIzsnLCBuKTsgIC0tPiAgcmV0dXJuIDEyMzsKCkEgcGxhY2Vob2xkZXIgaW4gYSBTdGF0ZW1lbnQgY29udGV4dCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uICc7Jy4gIFlvdQpjYW4gdGhpbmsgb2YgYSBzdGF0ZW1lbnQgcGxhY2Vob2xkZXIgYXMgYmVpbmcgYCM7YCB0byBleHBsYWluIHdoeSB0aGUgb3V0cHV0CnN0aWxsIGhhcyBvbmUgc2VtaWNvbG9uOgoKICAgIGpzLnN0YXRlbWVudCgnaWYgKGhhcHB5KSAjOycsIHJldCkKICAgIC0tPgogICAgaWYgKGhhcHB5KQogICAgICByZXR1cm4gMTIzOwoKSWYgdGhlIHBsYWNlaG9sZGVyIGlzIG5vdCBmb2xsb3dlZCBieSBhIHNlbWljb2xvbiwgaXQgaXMgcGFydCBvZiBhbiBleHByZXNzaW9uLgpIZXJlIHRoZSBwbGFjZWhvbGRlciBpcyBpbiB0aGUgcG9zaXRpb24gb2YgdGhlIGZ1bmN0aW9uIGluIGEgZnVuY3Rpb24gY2FsbDoKCiAgICB2YXIgdkZvbyA9IG5ldyBWYXJpYWJsZVVzZSgnZm9vJyk7CiAgICBqcy5zdGF0ZW1lbnQoJ2lmIChoYXBweSkgIygiSGFwcHkhIiknLCB2Rm9vKQogICAgLS0+CiAgICBpZiAoaGFwcHkpCiAgICAgIGZvbygiSGFwcHkhIik7CgpHZW5lcmFsbHksIGEgcGxhY2Vob2xkZXIgaW4gYW4gZXhwcmVzc2lvbiBwb3NpdGlvbiByZXF1aXJlcyBhbiBFeHByZXNzaW9uIEFTVCBhcwphbiBhcmd1bWVudCBhbmQgYSBwbGFjZWhvbGRlciBpbiBhIHN0YXRlbWVudCBwb3NpdGlvbiByZXF1aXJlcyBhIFN0YXRlbWVudCBBU1QuCkFuIGV4cHJlc3Npb24gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBTdGF0ZW1lbnQgaWYgbmVlZGVkIGJ5IGNyZWF0aW5nIGFuCkV4cHJlc3Npb25TdGF0ZW1lbnQuICBBIFN0cmluZyBhcmd1bWVudCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGEgVmFyaWFibGVVc2UgYW5kCnJlcXVpcmVzIHRoYXQgdGhlIHN0cmluZyBpcyBhIEphdmFTY3JpcHQgaWRlbnRpZmllci4KCiAgICBqcygnIyArIDEnLCB2Rm9vKSAgICAgICAtLT4gIGZvbyArIDEKICAgIGpzKCcjICsgMScsICdmb28nKSAgICAgIC0tPiAgZm9vICsgMQogICAganMoJyMgKyAxJywgJ2Zvby5iYXInKSAgLS0+ICBhc3NlcnRpb24gZmFpbHVyZQoKU29tZSBwbGFjZWhvbGRlciBwb3NpdGlvbnMgYXJlIF9zcGxpY2luZyBjb250ZXh0c18uICBBIGZ1bmN0aW9uIGFyZ3VtZW50IGxpc3QgaXMKYSBzcGxpY2luZyBleHByZXNzaW9uIGNvbnRleHQuICBBIHBsYWNlaG9sZGVyIGluIGEgc3BsaWNpbmcgZXhwcmVzc2lvbiBjb250ZXh0CmNhbiB0YWtlIGEgc2luZ2xlIEV4cHJlc3Npb24gKG9yIFN0cmluZywgY29udmVydGVkIHRvIFZhcmlhYmxlVXNlKSBvciBhbgpJdGVyYWJsZSBvZiBFeHByZXNzaW9ucyAoYW5kL29yIFN0cmluZ3MpLgoKICAgIC8vIG5vbi1zcGxpY2luZyBhcmd1bWVudDoKICAgIGpzKCcjKCMpJywgWydzYXknLCBzXSkgICAgICAgIC0tPiAgc2F5KCJoZWxsbyIpCiAgICAvLyBzcGxpY2luZyBhcmd1bWVudHM6CiAgICBqcygnIygjKScsIFsnc2F5JywgW11dKSAgICAgICAtLT4gIHNheSgpCiAgICBqcygnIygjKScsIFsnc2F5JywgW3NdXSkgICAgICAtLT4gIHNheSgiaGVsbG8iKQogICAganMoJyMoIyknLCBbJ3NheScsIFtzLCBuXV0pICAgLS0+ICBzYXkoImhlbGxvIiwgMTIzKQoKQSBzcGxpY2luZyBjb250ZXh0IGNhbiBiZSB1c2VkIHRvIGFwcGVuZCAnbGlzdHMnIGFuZCBhZGQgZXh0cmEgZWxlbWVudHM6CgogICAganMoJ2ZvbygjLCAjLCAxKScsIFsgWydhJywgbl0sIHNdKSAgICAgICAtLT4gIGZvbyhhLCAxMjMsICJoZWxsbyIsIDEpCiAgICBqcygnZm9vKCMsICMsIDEpJywgWyBbJ2EnLCBuXSwgW3MsIG5dXSkgIC0tPiAgZm9vKGEsIDEyMywgImhlbGxvIiwgMTIzLCAxKQogICAganMoJ2ZvbygjLCAjLCAxKScsIFsgW10sIFtzLCBuXV0pICAgICAgICAtLT4gIGZvbygiaGVsbG8iLCAxMjMsIDEpCiAgICBqcygnZm9vKCMsICMsIDEpJywgWyBbXSwgW10gXSkgICAgICAgICAgIC0tPiAgZm9vKDEpCgpUaGUgZ2VuZXJhdGlvbiBvZiBhIGNvbXBpbGUtdGltZSBvcHRpb25hbCBhcmd1bWVudCBleHByZXNzaW9uIGNhbiBiZSBjaG9zZW4gYnkKcHJvdmlkaW5nIGFuIGVtcHR5IG9yIHNpbmdsZXRvbiBsaXN0LgoKSW4gYWRkaXRpb24gdG8gRXhwcmVzc2lvbnMgYW5kIFN0YXRlbWVudHMsIHRoZXJlIGFyZSBQYXJhbWV0ZXJzLCB3aGljaCBvY2N1cgpvbmx5IGluIHRoZSBwYXJhbWV0ZXIgbGlzdCBvZiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3IgZGVjbGFyYXRpb24uClBsYWNlaG9sZGVycyBpbiBwYXJhbWV0ZXIgcG9zaXRpb25zIGJlaGF2ZSBsaWtlIHBsYWNlaG9sZGVycyBpbiBFeHByZXNzaW9uCnBvc2l0aW9ucywgZXhjZXB0IG9ubHkgUGFyYW1ldGVyIEFTVCBub2RlcyBhcmUgcGVybWl0dGVkLiAgU3RyaW5nIGFyZ3VtZW50cyBmb3IKcGFyYW1ldGVyIHBsYWNlaG9sZGVycyBhcmUgY29udmVydGVkIHRvIFBhcmFtZXRlciBBU1Qgbm9kZXMuCgogICAgdmFyIHBGb28gPSBuZXcgUGFyYW1ldGVyKCdmb28nKQogICAganMoJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuICM7IH0nLCBbcEZvbywgdkZvb10pCiAgICAtLT4KICAgIGZ1bmN0aW9uKGZvbykgeyByZXR1cm4gZm9vOyB9CgpFeHByZXNzaW9ucyBhbmQgUGFyYW1ldGVycyBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyJ3MgY29udGV4dDoKCiAgICBqcygnZnVuY3Rpb24oIykgeyByZXR1cm4gIzsgfScsIFt2Rm9vLCB2Rm9vXSkgLS0+IGVycm9yCiAgICBqcygnZnVuY3Rpb24oIykgeyByZXR1cm4gIzsgfScsIFtwRm9vLCBwRm9vXSkgLS0+IGVycm9yCgpUaGUgcGFyYW1ldGVyIGNvbnRleHQgaXMgYSBzcGxpY2luZyBjb250ZXh0LiAgV2hlbiBjb21iaW5lZCB3aXRoIHRoZQpjb250ZXh0LXNlbnNpdGl2ZSBjb252ZXJzaW9uIG9mIFN0cmluZ3MsIHRoaXMgc2ltcGxpZmllcyB0aGUgY29uc3RydWN0aW9uIG9mCnRyYW1wb2xpbmUtbGlrZSBmdW5jdGlvbnM6CgogICAgdmFyIGFyZ3MgPSBbJ2EnLCAnYiddOwogICAganMoJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuIGYodGhpcywgIyk7IH0nLCBbYXJncywgYXJnc10pCiAgICAtLT4KICAgIGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGYodGhpcywgYSwgYik7IH0KCkEgc3RhdGVtZW50IHBsYWNlaG9sZGVyIGluIGEgQmxvY2sgaXMgYWxzbyBpbiBhIHNwbGljaW5nIGNvbnRleHQuICBJbiBhZGRpdGlvbgp0byBzcGxpY2luZyBJdGVyYWJsZXMsIHN0YXRlbWVudCBwbGFjZWhvbGRlcnMgaW4gYSBCbG9jayB3aWxsIGFsc28gc3BsaWNlIGEKQmxvY2sgb3IgYW4gRW1wdHlTdGF0ZW1lbnQuICBUaGlzIGZsYXR0ZW5zIG5lc3RlZCBibG9ja3MgYW5kIGFsbG93cyBibG9ja3MgdG8gYmUKYXBwZW5kZWQuCgogICAgdmFyIGIxID0ganMuc3RhdGVtZW50KCd7IDE7IDI7IH0nKTsKICAgIHZhciBzRW1wdHkgPSBuZXcgRW1wdHlzdGF0ZW1lbnQoKTsKICAgIGpzLnN0YXRlbWVudCgneyAjOyAjOyAjOyAjOyB9JywgW3NFbXB0eSwgYjEsIGIxLCBzRW1wdHldKQogICAgLS0+CiAgICB7IDE7IDI7IDE7IDI7IH0KCkEgcGxhY2Vob2xkZXIgaW4gdGhlIGNvbnRleHQgb2YgYW4gaWYtc3RhdGVtZW50IGNvbmRpdGlvbiBhbHNvIGFjY2VwdHMgYSBEYXJ0CmJvb2wgYXJndW1lbnQsIHdoaWNoIHNlbGVjdHMgdGhlIHRoZW4tcGFydCBvciBlbHNlLXBhcnQgb2YgdGhlIGlmLXN0YXRlbWVudDoKCiAgICBqcy5zdGF0ZW1lbnQoJ2lmICgjKSByZXR1cm47JywgdkZvbykgICAtLT4gIGlmIChmb28pIHJldHVybjsKICAgIGpzLnN0YXRlbWVudCgnaWYgKCMpIHJldHVybjsnLCB0cnVlKSAgIC0tPiAgcmV0dXJuOwogICAganMuc3RhdGVtZW50KCdpZiAoIykgcmV0dXJuOycsIGZhbHNlKSAgLS0+ICA7ICAgLy8gZW1wdHkgc3RhdGVtZW50CiAgICB2YXIgZVRydWUgPSBuZXcgTGl0ZXJhbEJvb2wodHJ1ZSk7CiAgICBqcy5zdGF0ZW1lbnQoJ2lmICgjKSByZXR1cm47JywgZVRydWUpICAtLT4gIGlmICh0cnVlKSByZXR1cm47CgpDb21iaW5lZCB3aXRoIGJsb2NrIHNwbGljaW5nLCBpZi1zdGF0ZW1lbnQgY29uZGl0aW9uIGNvbnRleHQgcGxhY2Vob2xkZXJzIGFsbG93cwp0aGUgY3JlYXRpb24gb2YgdGVtcGxhdGVzIHRoYXQgc2VsZWN0IGNvZGUgZGVwZW5kaW5nIG9uIHZhcmlhYmxlcy4KCiAgICBqcy5zdGF0ZW1lbnQoJ3sgMTsgaWYgKCMpIDI7IGVsc2UgeyAzOyA0OyB9IDU7fScsIHRydWUpCiAgICAtLT4geyAxOyAyOyA1OyB9CgogICAganMuc3RhdGVtZW50KCd7IDE7IGlmICgjKSAyOyBlbHNlIHsgMzsgNDsgfSA1O30nLCBmYWxzZSkKICAgIC0tPiB7IDE7IDM7IDQ7IDU7IH0KCkEgcGxhY2Vob2xkZXIgZm9sbG93aW5nIGEgcGVyaW9kIGluIGEgcHJvcGVydHkgYWNjZXNzIGlzIGluIGEgcHJvcGVydHkgYWNjZXNzCmNvbnRleHQuICBUaGlzIGlzIGp1c3QgbGlrZSBhbiBleHByZXNzaW9uIGNvbnRleHQsIGV4Y2VwdCBTdHJpbmcgYXJndW1lbnRzIGFyZQpjb252ZXJ0ZWQgdG8gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Nlcy4gIEluIEphdmFTY3JpcHQsIGBhLmJgIGlzIHNob3J0LWhhbmQKZm9yIGBhWyJiIl1gOgoKICAgIGpzKCdhWyNdJywgdkZvbykgIC0tPiAgYVtmb29dCiAgICBqcygnYVsjXScsIHMpICAgICAtLT4gIGEuaGVsbG8gICAgKGkuZS4gYVsiaGVsbG8iXSkuCiAgICBqcygnYVsjXScsICd4JykgICAtLT4gIGFbeF0KCiAgICBqcygnYS4jJywgdkZvbykgICAtLT4gIGFbZm9vXQogICAganMoJ2EuIycsIHMpICAgICAgLS0+ICBhLmhlbGxvICAgIChpLmUuIGFbImhlbGxvIl0pCiAgICBqcygnYS4jJywgJ3gnKSAgICAtLT4gIGEueCAgICAgICAgKGkuZS4gYVsieCJdKQoKKFF1ZXN0aW9uIC0gc2hvdWxkIGAuI2AgYmUgcmVzdHJpY3RlZCB0byBwZXJtaXQgb25seSBTdHJpbmcgYXJndW1lbnRzPyBUaGUKdGVtcGxhdGUgc2hvdWxkIHByb2JhYmx5IGJlIHdyaXR0ZW4gd2l0aCBgW11gIGlmIG5vbi1zdHJpbmdzIGFyZSBhY2NlcHRlZC4pCgoKT2JqZWN0IGluaXRpYWxpemVycyBhbGxvdyBwbGFjZWhvbGRlcnMgaW4gdGhlIGtleSBwcm9wZXJ0eSBuYW1lIHBvc2l0aW9uOgoKICAgIGpzKCd7IzoxLCAjOjJ9JywgIFtzLCAnYnllJ10pICAgIC0tPiAge2hlbGxvOiAxLCBieWU6IDJ9CgoKV2hhdCBpcyBub3QgaW1wbGVtZW50ZWQ6CgogLSAgQXJyYXkgaW5pdGlhbGl6ZXJzIGFuZCBvYmplY3QgaW5pdGlhbGl6ZXJzIGNvdWxkIHN1cHBvcnQgc3BsaWNpbmcuICBJbiB0aGUKICAgIGFycmF5IGNhc2UsIHdlIHdvdWxkIG5lZWQgc29tZSB3YXkgdG8ga25vdyBpZiBhbiBBcnJheUluaXRpYWxpemVyIGFyZ3VtZW50CiAgICBzaG91bGQgYmUgc3BsaWNlIG9yIGlzIGludGVuZGVkIGFzIGEgc2luZ2xlIHZhbHVlLgoKKi8KY29uc3QgSnNCdWlsZGVyIGpzID0gY29uc3QgSnNCdWlsZGVyKCk7CgpjbGFzcyBKc0J1aWxkZXIgewogIGNvbnN0IEpzQnVpbGRlcigpOwoKICAvKioKICAgKiBQYXJzZXMgYSBiaXQgb2YgSmF2YVNjcmlwdCwgYW5kIHJldHVybnMgYW4gZXhwcmVzc2lvbi4KICAgKgogICAqIFNlZSB0aGUgTWluaUpzUGFyc2VyIGNsYXNzLgogICAqCiAgICogW2FyZ3VtZW50c10gY2FuIGJlIGEgc2luZ2xlIFtOb2RlXSAoZS5nLiBhbiBbRXhwcmVzc2lvbl0gb3IgW1N0YXRlbWVudF0pIG9yCiAgICogYSBsaXN0IG9mIFtOb2RlXXMsIHdoaWNoIHdpbGwgYmUgaW50ZXJwb2xhdGVkIGludG8gdGhlIHNvdXJjZSBhdCB0aGUgJyMnCiAgICogc2lnbnMuCiAgICovCiAgRXhwcmVzc2lvbiBjYWxsKFN0cmluZyBzb3VyY2UsIFt2YXIgYXJndW1lbnRzXSkgewogICAgVGVtcGxhdGUgdGVtcGxhdGUgPSBfZmluZEV4cHJlc3Npb25UZW1wbGF0ZShzb3VyY2UpOwogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsKSByZXR1cm4gdGVtcGxhdGUuaW5zdGFudGlhdGUoW10pOwogICAgLy8gV2UgYWxsb3cgYSBzaW5nbGUgYXJndW1lbnQgdG8gYmUgZ2l2ZW4gZGlyZWN0bHkuCiAgICBpZiAoYXJndW1lbnRzIGlzISBMaXN0ICYmIGFyZ3VtZW50cyBpcyEgTWFwKSBhcmd1bWVudHMgPSBbYXJndW1lbnRzXTsKICAgIHJldHVybiB0ZW1wbGF0ZS5pbnN0YW50aWF0ZShhcmd1bWVudHMpOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgSmF2YVNjcmlwdCBTdGF0ZW1lbnQsIG90aGVyd2lzZSBqdXN0IGxpa2UgW2NhbGxdLgogICAqLwogIFN0YXRlbWVudCBzdGF0ZW1lbnQoU3RyaW5nIHNvdXJjZSwgW3ZhciBhcmd1bWVudHNdKSB7CiAgICBUZW1wbGF0ZSB0ZW1wbGF0ZSA9IF9maW5kU3RhdGVtZW50VGVtcGxhdGUoc291cmNlKTsKICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgcmV0dXJuIHRlbXBsYXRlLmluc3RhbnRpYXRlKFtdKTsKICAgIC8vIFdlIGFsbG93IGEgc2luZ2xlIGFyZ3VtZW50IHRvIGJlIGdpdmVuIGRpcmVjdGx5LgogICAgaWYgKGFyZ3VtZW50cyBpcyEgTGlzdCAmJiBhcmd1bWVudHMgaXMhIE1hcCkgYXJndW1lbnRzID0gW2FyZ3VtZW50c107CiAgICByZXR1cm4gdGVtcGxhdGUuaW5zdGFudGlhdGUoYXJndW1lbnRzKTsKICB9CgogIC8qKgogICAqIFBhcnNlcyBKYXZhU2NyaXB0IHdyaXR0ZW4gaW4gdGhlIGBKU2AgZm9yZWlnbiBpbnN0cnVjdGlvbi4KICAgKgogICAqIFRoZSBbc291cmNlXSBtdXN0IGJlIGEgSmF2YVNjcmlwdCBleHByZXNzaW9uIG9yIGEgSmF2YVNjcmlwdCB0aHJvdwogICAqIHN0YXRlbWVudC4KICAgKi8KICBUZW1wbGF0ZSBwYXJzZUZvcmVpZ25KUyhTdHJpbmcgc291cmNlKSB7CiAgICAvLyBUT0RPKHNyYSk6IFBhcnNlIHdpdGggZXh0cmEgdmFsaWRhdGlvbiB0byBmb3JiaWQgYCNgIGludGVycG9sYXRpb24gaW4KICAgIC8vIGZ1bmN0aW9ucywgYXMgdGhpcyBsZWFkcyB0byB1bmFudGljaXBhdGVkIGNhcHR1cmUgb2YgdGVtcG9yYXJpZXMgdGhhdCBhcmUKICAgIC8vIHJldXNlZCBhZnRlciBjYXB0dXJlLgogICAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKCJ0aHJvdyAiKSkgewogICAgICByZXR1cm4gX2ZpbmRTdGF0ZW1lbnRUZW1wbGF0ZShzb3VyY2UpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9maW5kRXhwcmVzc2lvblRlbXBsYXRlKHNvdXJjZSk7CiAgICB9CiAgfQoKICBUZW1wbGF0ZSBfZmluZEV4cHJlc3Npb25UZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICBUZW1wbGF0ZSB0ZW1wbGF0ZSA9IHRlbXBsYXRlTWFuYWdlci5sb29rdXBFeHByZXNzaW9uVGVtcGxhdGUoc291cmNlKTsKICAgIGlmICh0ZW1wbGF0ZSA9PSBudWxsKSB7CiAgICAgIE1pbmlKc1BhcnNlciBwYXJzZXIgPSBuZXcgTWluaUpzUGFyc2VyKHNvdXJjZSk7CiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlci5leHByZXNzaW9uKCk7CiAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVNYW5hZ2VyLmRlZmluZUV4cHJlc3Npb25UZW1wbGF0ZShzb3VyY2UsIGV4cHJlc3Npb24pOwogICAgfQogICAgcmV0dXJuIHRlbXBsYXRlOwogIH0KCiAgVGVtcGxhdGUgX2ZpbmRTdGF0ZW1lbnRUZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICBUZW1wbGF0ZSB0ZW1wbGF0ZSA9IHRlbXBsYXRlTWFuYWdlci5sb29rdXBTdGF0ZW1lbnRUZW1wbGF0ZShzb3VyY2UpOwogICAgaWYgKHRlbXBsYXRlID09IG51bGwpIHsKICAgICAgTWluaUpzUGFyc2VyIHBhcnNlciA9IG5ldyBNaW5pSnNQYXJzZXIoc291cmNlKTsKICAgICAgU3RhdGVtZW50IHN0YXRlbWVudCA9IHBhcnNlci5zdGF0ZW1lbnQoKTsKICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZU1hbmFnZXIuZGVmaW5lU3RhdGVtZW50VGVtcGxhdGUoc291cmNlLCBzdGF0ZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHRlbXBsYXRlOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBFeHByZXNzaW9uIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gW3NvdXJjZV0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdGVtcGxhdGUgaXMgY2FjaGVkLgogICAqLwogIFRlbXBsYXRlIGV4cHJlc3Npb25UZW1wbGF0ZUZvcihTdHJpbmcgc291cmNlKSB7CiAgICByZXR1cm4gX2ZpbmRFeHByZXNzaW9uVGVtcGxhdGUoc291cmNlKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYW4gRXhwcmVzc2lvbiB0ZW1wbGF0ZSB3aXRob3V0IGNhY2hpbmcgdGhlIHJlc3VsdC4KICAgKi8KICBUZW1wbGF0ZSB1bmNhY2hlZEV4cHJlc3Npb25UZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICBNaW5pSnNQYXJzZXIgcGFyc2VyID0gbmV3IE1pbmlKc1BhcnNlcihzb3VyY2UpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VyLmV4cHJlc3Npb24oKTsKICAgIHJldHVybiBuZXcgVGVtcGxhdGUoc291cmNlLCBleHByZXNzaW9uLAogICAgICAgIGlzRXhwcmVzc2lvbjogdHJ1ZSwgZm9yY2VDb3B5OiBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgU3RhdGVtZW50IHRlbXBsYXRlIHdpdGhvdXQgY2FjaGluZyB0aGUgcmVzdWx0LgogICAqLwogIFRlbXBsYXRlIHVuY2FjaGVkU3RhdGVtZW50VGVtcGxhdGUoU3RyaW5nIHNvdXJjZSkgewogICAgTWluaUpzUGFyc2VyIHBhcnNlciA9IG5ldyBNaW5pSnNQYXJzZXIoc291cmNlKTsKICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZXIuc3RhdGVtZW50KCk7CiAgICByZXR1cm4gbmV3IFRlbXBsYXRlKHNvdXJjZSwgc3RhdGVtZW50LAogICAgICAgIGlzRXhwcmVzc2lvbjogZmFsc2UsIGZvcmNlQ29weTogZmFsc2UpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIGFuIEV4cHJlc3Npb24gdGVtcGxhdGUgd2hpY2ggaGFzIFthc3RdIGFzIHRoZSByZXN1bHQuICBUaGlzIGlzIHVzZWQKICAgKiB0byB3cmFwIGEgZ2VuZXJhdGVkIEFTVCBpbiBhIHplcm8tYXJndW1lbnQgVGVtcGxhdGUgc28gaXQgY2FuIGJlIHBhc3NlZCB0bwogICAqIGNvbnRleHQgdGhhdCBleHBlY3RzIGEgdGVtcGxhdGUuCiAgICovCiAgVGVtcGxhdGUgZXhwcmVzc2lvblRlbXBsYXRlWWllbGRpbmcoTm9kZSBhc3QpIHsKICAgIHJldHVybiBuZXcgVGVtcGxhdGUud2l0aEV4cHJlc3Npb25SZXN1bHQoYXN0KTsKICB9CgogIFRlbXBsYXRlIHN0YXRlbWVudFRlbXBsYXRlWWllbGRpbmcoTm9kZSBhc3QpIHsKICAgIHJldHVybiBuZXcgVGVtcGxhdGUud2l0aFN0YXRlbWVudFJlc3VsdChhc3QpOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBsaXRlcmFsIGpzIHN0cmluZyBmcm9tIFt2YWx1ZV0uCiAgTGl0ZXJhbFN0cmluZyBfbGVnYWN5RXNjYXBlZFN0cmluZyhTdHJpbmcgdmFsdWUpIHsKICAgIC8vIFN0YXJ0IGJ5IGVzY2FwaW5nIHRoZSBiYWNrc2xhc2hlcy4KICAgIFN0cmluZyBlc2NhcGVkID0gdmFsdWUucmVwbGFjZUFsbCgnXFwnLCAnXFxcXCcpOwogICAgLy8gRG8gbm90IGVzY2FwZSB1bmljb2RlIGNoYXJhY3RlcnMgYW5kICcgYmVjYXVzZSB0aGV5IGFyZSBhbGxvd2VkIGluIHRoZQogICAgLy8gc3RyaW5nIGxpdGVyYWwgYW55d2F5LgogICAgZXNjYXBlZCA9IGVzY2FwZWQucmVwbGFjZUFsbE1hcHBlZChuZXcgUmVnRXhwKCdcbnwifFxifFx0fFx2fFxyJyksIChtYXRjaCkgewogICAgICBzd2l0Y2ggKG1hdGNoLmdyb3VwKDApKSB7CiAgICAgICAgY2FzZSAiXG4iOgogICAgICAgICAgcmV0dXJuIHIiXG4iOwogICAgICAgIGNhc2UgIlwiIjoKICAgICAgICAgIHJldHVybiByJ1wiJzsKICAgICAgICBjYXNlICJcYiI6CiAgICAgICAgICByZXR1cm4gciJcYiI7CiAgICAgICAgY2FzZSAiXHQiOgogICAgICAgICAgcmV0dXJuIHIiXHQiOwogICAgICAgIGNhc2UgIlxmIjoKICAgICAgICAgIHJldHVybiByIlxmIjsKICAgICAgICBjYXNlICJcciI6CiAgICAgICAgICByZXR1cm4gciJcciI7CiAgICAgICAgY2FzZSAiXHYiOgogICAgICAgICAgcmV0dXJuIHIiXHYiOwogICAgICB9CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIG1hdGNoOiAke21hdGNoLmdyb3VwKDApfSIpOwogICAgfSk7CiAgICBMaXRlcmFsU3RyaW5nIHJlc3VsdCA9IHN0cmluZyhlc2NhcGVkKTsKICAgIC8vIFdlIGRvbid0IGVzY2FwZSAnIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHN0cmluZyBpcyB3cmFwcGVkCiAgICAvLyBpbnRvICIuIFZlcmlmeSB0aGF0IGFzc3VtcHRpb24uCiAgICBhc3NlcnQocmVzdWx0LnZhbHVlLmNvZGVVbml0QXQoMCkgPT0gJyInLmNvZGVVbml0QXQoMCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgbGl0ZXJhbCBqcyBzdHJpbmcgZnJvbSBbdmFsdWVdLgogIExpdGVyYWxTdHJpbmcgZXNjYXBlZFN0cmluZyhTdHJpbmcgdmFsdWUsCiAgICAgIHtib29sIHV0Zjg6IGZhbHNlLCBib29sIGFzY2lpOiBmYWxzZX0pIHsKICAgIGlmICh1dGY4ID09IGZhbHNlICYmIGFzY2lpID09IGZhbHNlKSByZXR1cm4gX2xlZ2FjeUVzY2FwZWRTdHJpbmcodmFsdWUpOwogICAgaWYgKHV0ZjggJiYgYXNjaWkpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdDYW5ub3QgYmUgYm90aCBVVEY4IGFuZCBBU0NJSScpOwoKICAgIGludCBzaW5nbGVRdW90ZXMgPSAwOwogICAgaW50IGRvdWJsZVF1b3RlcyA9IDA7CiAgICBpbnQgb3RoZXJFc2NhcGVzID0gMDsKICAgIGludCB1bnBhaXJlZFN1cnJvZ2F0ZXMgPSAwOwoKICAgIGZvciAoaW50IHJ1bmUgaW4gdmFsdWUucnVuZXMpIHsKICAgICAgaWYgKHJ1bmUgPT0gY2hhckNvZGVzLiRCQUNLU0xBU0gpIHsKICAgICAgICArK290aGVyRXNjYXBlczsKICAgICAgfSBlbHNlIGlmIChydW5lID09IGNoYXJDb2Rlcy4kU1EpIHsKICAgICAgICArK3NpbmdsZVF1b3RlczsKICAgICAgfSBlbHNlIGlmIChydW5lID09IGNoYXJDb2Rlcy4kRFEpIHsKICAgICAgICArK2RvdWJsZVF1b3RlczsKICAgICAgfSBlbHNlIGlmIChydW5lID09IGNoYXJDb2Rlcy4kTEYgfHwKICAgICAgICAgIHJ1bmUgPT0gY2hhckNvZGVzLiRDUiB8fAogICAgICAgICAgcnVuZSA9PSBjaGFyQ29kZXMuJExTIHx8CiAgICAgICAgICBydW5lID09IGNoYXJDb2Rlcy4kUFMpIHsKICAgICAgICAvLyBMaW5lIHRlcm1pbmF0b3JzLgogICAgICAgICsrb3RoZXJFc2NhcGVzOwogICAgICB9IGVsc2UgaWYgKHJ1bmUgPT0gY2hhckNvZGVzLiRCUyB8fAogICAgICAgICAgcnVuZSA9PSBjaGFyQ29kZXMuJFRBQiB8fAogICAgICAgICAgcnVuZSA9PSBjaGFyQ29kZXMuJFZUQUIgfHwKICAgICAgICAgIHJ1bmUgPT0gY2hhckNvZGVzLiRGRikgewogICAgICAgICsrb3RoZXJFc2NhcGVzOwogICAgICB9IGVsc2UgaWYgKF9pc1VucGFpcmVkU3Vycm9nYXRlKHJ1bmUpKSB7CiAgICAgICAgKyt1bnBhaXJlZFN1cnJvZ2F0ZXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGFzY2lpICYmIChydW5lIDwgY2hhckNvZGVzLiRTUEFDRSB8fCBydW5lID49IGNoYXJDb2Rlcy4kREVMKSkgewogICAgICAgICAgKytvdGhlckVzY2FwZXM7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTGl0ZXJhbFN0cmluZyBmaW5pc2goU3RyaW5nIHF1b3RlLCBTdHJpbmcgY29udGVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsU3RyaW5nKCckcXVvdGUkY29udGVudHMkcXVvdGUnKTsKICAgIH0KCiAgICBpZiAob3RoZXJFc2NhcGVzID09IDAgJiYgdW5wYWlyZWRTdXJyb2dhdGVzID09IDApIHsKICAgICAgaWYgKGRvdWJsZVF1b3RlcyA9PSAwKSByZXR1cm4gZmluaXNoKCciJywgdmFsdWUpOwogICAgICBpZiAoc2luZ2xlUXVvdGVzID09IDApIHJldHVybiBmaW5pc2goIiciLCB2YWx1ZSk7CiAgICB9CgogICAgYm9vbCB1c2VTaW5nbGVRdW90ZXMgPSBzaW5nbGVRdW90ZXMgPCBkb3VibGVRdW90ZXM7CgogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICAgIGZvciAoaW50IHJ1bmUgaW4gdmFsdWUucnVuZXMpIHsKICAgICAgU3RyaW5nIGVzY2FwZSA9IF9pcnJlZ3VsYXJFc2NhcGUocnVuZSwgdXNlU2luZ2xlUXVvdGVzKTsKICAgICAgaWYgKGVzY2FwZSAhPSBudWxsKSB7CiAgICAgICAgc2Iud3JpdGUoZXNjYXBlKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAocnVuZSA9PSBjaGFyQ29kZXMuJExTIHx8CiAgICAgICAgICBydW5lID09IGNoYXJDb2Rlcy4kUFMgfHwKICAgICAgICAgIF9pc1VucGFpcmVkU3Vycm9nYXRlKHJ1bmUpIHx8CiAgICAgICAgICBhc2NpaSAmJiAocnVuZSA8IGNoYXJDb2Rlcy4kU1BBQ0UgfHwgcnVuZSA+PSBjaGFyQ29kZXMuJERFTCkpIHsKICAgICAgICBpZiAocnVuZSA8IDB4MTAwKSB7CiAgICAgICAgICBzYi53cml0ZShyJ1x4Jyk7CiAgICAgICAgICBzYi53cml0ZShydW5lLnRvUmFkaXhTdHJpbmcoMTYpLnBhZExlZnQoMiwgJzAnKSk7CiAgICAgICAgfSBlbHNlIGlmIChydW5lIDwgMHgxMDAwMCkgewogICAgICAgICAgc2Iud3JpdGUocidcdScpOwogICAgICAgICAgc2Iud3JpdGUocnVuZS50b1JhZGl4U3RyaW5nKDE2KS5wYWRMZWZ0KDQsICcwJykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIGFjY2VwdCB0aGUgRVM2IFx1e3p6enp6en0gZW5jb2RpbmcsIHNvIGVtaXQgdHdvCiAgICAgICAgICAvLyBzdXJyb2dhdGUgcGFpcnMuCiAgICAgICAgICB2YXIgYml0cyA9IHJ1bmUgLSAweDEwMDAwOwogICAgICAgICAgdmFyIGxlYWRpbmcgPSAweEQ4MDAgfCAoYml0cyA+PiAxMCk7CiAgICAgICAgICB2YXIgdHJhaWxpbmcgPSAweERDMDAgfCAoYml0cyAmIDB4M2ZmKTsKICAgICAgICAgIHNiLndyaXRlKHInXHUnKTsKICAgICAgICAgIHNiLndyaXRlKGxlYWRpbmcudG9SYWRpeFN0cmluZygxNikpOwogICAgICAgICAgc2Iud3JpdGUocidcdScpOwogICAgICAgICAgc2Iud3JpdGUodHJhaWxpbmcudG9SYWRpeFN0cmluZygxNikpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzYi53cml0ZUNoYXJDb2RlKHJ1bmUpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGZpbmlzaCh1c2VTaW5nbGVRdW90ZXMgPyAiJyIgOiAnIicsIHNiLnRvU3RyaW5nKCkpOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzVW5wYWlyZWRTdXJyb2dhdGUoaW50IGNvZGUpID0+IChjb2RlICYgMHhGRkZGRjgwMCkgPT0gMHhEODAwOwoKICBzdGF0aWMgU3RyaW5nIF9pcnJlZ3VsYXJFc2NhcGUoaW50IGNvZGUsIGJvb2wgdXNlU2luZ2xlUXVvdGVzKSB7CiAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgY2FzZSBjaGFyQ29kZXMuJFNROgogICAgICAgIHJldHVybiB1c2VTaW5nbGVRdW90ZXMgPyByIlwnIiA6IHIiJyI7CiAgICAgIGNhc2UgY2hhckNvZGVzLiREUToKICAgICAgICByZXR1cm4gdXNlU2luZ2xlUXVvdGVzID8gciciJyA6IHInXCInOwogICAgICBjYXNlIGNoYXJDb2Rlcy4kQkFDS1NMQVNIOgogICAgICAgIHJldHVybiByJ1xcJzsKICAgICAgY2FzZSBjaGFyQ29kZXMuJEJTOgogICAgICAgIHJldHVybiByJ1xiJzsKICAgICAgY2FzZSBjaGFyQ29kZXMuJFRBQjoKICAgICAgICByZXR1cm4gcidcdCc7CiAgICAgIGNhc2UgY2hhckNvZGVzLiRMRjoKICAgICAgICByZXR1cm4gcidcbic7CiAgICAgIGNhc2UgY2hhckNvZGVzLiRWVEFCOgogICAgICAgIHJldHVybiByJ1x2JzsKICAgICAgY2FzZSBjaGFyQ29kZXMuJEZGOgogICAgICAgIHJldHVybiByJ1xmJzsKICAgICAgY2FzZSBjaGFyQ29kZXMuJENSOgogICAgICAgIHJldHVybiByJ1xyJzsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBsaXRlcmFsIGpzIHN0cmluZyBmcm9tIFt2YWx1ZV0uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgcHV0cyBxdW90ZXMgYXJvdW5kIFt2YWx1ZV0uIEl0IGRvZXMgbm90IGRvCiAgLy8vIGFueSBlc2NhcGluZywgc28gdXNlIG9ubHkgd2hlbiB5b3UgY2FuIGd1YXJhbnRlZSB0aGF0IFt2YWx1ZV0gZG9lcyBub3QKICAvLy8gY29udGFpbiBuZXdsaW5lcyBvciBiYWNrc2xhc2hlcy4gRm9yIGVzY2FwaW5nIHRoZSBzdHJpbmcgdXNlCiAgLy8vIFtlc2NhcGVkU3RyaW5nXS4KICBMaXRlcmFsU3RyaW5nIHN0cmluZyhTdHJpbmcgdmFsdWUpID0+IG5ldyBMaXRlcmFsU3RyaW5nKCciJHZhbHVlIicpOwoKICAvLy8gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBbTGl0ZXJhbFN0cmluZ10gZnJvbSBbdmFsdWVdLgogIC8vLwogIC8vLyBEb2VzIG5vdCBhZGQgcXVvdGVzIG9yIGRvIGFueSBlc2NhcGluZy4KICBMaXRlcmFsU3RyaW5nIHN0cmluZ1BhcnQoU3RyaW5nIHZhbHVlKSA9PiBuZXcgTGl0ZXJhbFN0cmluZyh2YWx1ZSk7CgogIFN0cmluZ0NvbmNhdGVuYXRpb24gY29uY2F0ZW5hdGVTdHJpbmdzKEl0ZXJhYmxlPExpdGVyYWw+IHBhcnRzLAogICAgICB7YWRkUXVvdGVzOiBmYWxzZX0pIHsKICAgIExpc3Q8TGl0ZXJhbD4gX3BhcnRzOwogICAgaWYgKGFkZFF1b3RlcykgewogICAgICBMaXRlcmFsIHF1b3RlID0gc3RyaW5nUGFydCgnIicpOwogICAgICBfcGFydHMgPSA8TGl0ZXJhbD5bcXVvdGVdCiAgICAgICAgLi5hZGRBbGwocGFydHMpCiAgICAgICAgLi5hZGQocXVvdGUpOwogICAgfSBlbHNlIHsKICAgICAgX3BhcnRzID0gbmV3IExpc3QuZnJvbShwYXJ0cywgZ3Jvd2FibGU6IGZhbHNlKTsKICAgIH0KICAgIHJldHVybiBuZXcgU3RyaW5nQ29uY2F0ZW5hdGlvbihfcGFydHMpOwogIH0KCiAgSXRlcmFibGU8TGl0ZXJhbD4gam9pbkxpdGVyYWxzKEl0ZXJhYmxlPExpdGVyYWw+IGxpc3QsIExpdGVyYWwgc2VwYXJhdG9yKSB7CiAgICByZXR1cm4gbmV3IF9JbnRlcmxlYXZlSXRlcmFibGU8TGl0ZXJhbD4obGlzdCwgc2VwYXJhdG9yKTsKICB9CgogIExpdGVyYWxTdHJpbmcgcXVvdGVOYW1lKE5hbWUgbmFtZSwge2FsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICByZXR1cm4gbmV3IExpdGVyYWxTdHJpbmcoJyIiJyk7CiAgICB9CiAgICByZXR1cm4gbmV3IExpdGVyYWxTdHJpbmdGcm9tTmFtZShuYW1lKTsKICB9CgogIExpdGVyYWxOdW1iZXIgbnVtYmVyKG51bSB2YWx1ZSkgPT4gbmV3IExpdGVyYWxOdW1iZXIoJyR2YWx1ZScpOwoKICBMaXRlcmFsQm9vbCBib29sZWFuKGJvb2wgdmFsdWUpID0+IG5ldyBMaXRlcmFsQm9vbCh2YWx1ZSk7CgogIEFycmF5SW5pdGlhbGl6ZXIgbnVtQXJyYXkoSXRlcmFibGU8aW50PiBsaXN0KSA9PgogICAgICBuZXcgQXJyYXlJbml0aWFsaXplcihsaXN0Lm1hcChudW1iZXIpLnRvTGlzdCgpKTsKCiAgQXJyYXlJbml0aWFsaXplciBzdHJpbmdBcnJheShJdGVyYWJsZTxTdHJpbmc+IGxpc3QpID0+CiAgICAgIG5ldyBBcnJheUluaXRpYWxpemVyKGxpc3QubWFwKHN0cmluZykudG9MaXN0KCkpOwoKICBDb21tZW50IGNvbW1lbnQoU3RyaW5nIHRleHQpID0+IG5ldyBDb21tZW50KHRleHQpOwoKICBDYWxsIHByb3BlcnR5Q2FsbCgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiBmaWVsZE5hbWUsIExpc3Q8RXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IENhbGwobmV3IFByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBmaWVsZE5hbWUpLCBhcmd1bWVudHMpOwogIH0KCiAgT2JqZWN0SW5pdGlhbGl6ZXIgb2JqZWN0TGl0ZXJhbChNYXA8U3RyaW5nLCBFeHByZXNzaW9uPiBtYXApIHsKICAgIExpc3Q8UHJvcGVydHk+IHByb3BlcnRpZXMgPSA8UHJvcGVydHk+W107CiAgICBtYXAuZm9yRWFjaCgobmFtZSwgdmFsdWUpIHsKICAgICAgcHJvcGVydGllcy5hZGQobmV3IFByb3BlcnR5KHN0cmluZyhuYW1lKSwgdmFsdWUpKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBPYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKTsKICB9Cn0KCkxpdGVyYWxTdHJpbmcgc3RyaW5nKFN0cmluZyB2YWx1ZSkgPT4ganMuc3RyaW5nKHZhbHVlKTsKTGl0ZXJhbFN0cmluZyBxdW90ZU5hbWUoTmFtZSBuYW1lLCB7YWxsb3dOdWxsOiBmYWxzZX0pIHsKICByZXR1cm4ganMucXVvdGVOYW1lKG5hbWUsIGFsbG93TnVsbDogYWxsb3dOdWxsKTsKfQoKTGl0ZXJhbFN0cmluZyBzdHJpbmdQYXJ0KFN0cmluZyB2YWx1ZSkgPT4ganMuc3RyaW5nUGFydCh2YWx1ZSk7Ckl0ZXJhYmxlPExpdGVyYWw+IGpvaW5MaXRlcmFscyhJdGVyYWJsZTxMaXRlcmFsPiBsaXN0LCBMaXRlcmFsIHNlcGFyYXRvcikgewogIHJldHVybiBqcy5qb2luTGl0ZXJhbHMobGlzdCwgc2VwYXJhdG9yKTsKfQoKU3RyaW5nQ29uY2F0ZW5hdGlvbiBjb25jYXRlbmF0ZVN0cmluZ3MoSXRlcmFibGU8TGl0ZXJhbD4gcGFydHMsCiAgICB7YWRkUXVvdGVzOiBmYWxzZX0pIHsKICByZXR1cm4ganMuY29uY2F0ZW5hdGVTdHJpbmdzKHBhcnRzLCBhZGRRdW90ZXM6IGFkZFF1b3Rlcyk7Cn0KCkxpdGVyYWxOdW1iZXIgbnVtYmVyKG51bSB2YWx1ZSkgPT4ganMubnVtYmVyKHZhbHVlKTsKQXJyYXlJbml0aWFsaXplciBudW1BcnJheShJdGVyYWJsZTxpbnQ+IGxpc3QpID0+IGpzLm51bUFycmF5KGxpc3QpOwpBcnJheUluaXRpYWxpemVyIHN0cmluZ0FycmF5KEl0ZXJhYmxlPFN0cmluZz4gbGlzdCkgPT4ganMuc3RyaW5nQXJyYXkobGlzdCk7CkNhbGwgcHJvcGVydHlDYWxsKAogICAgRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiBmaWVsZE5hbWUsIExpc3Q8RXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgcmV0dXJuIGpzLnByb3BlcnR5Q2FsbChyZWNlaXZlciwgZmllbGROYW1lLCBhcmd1bWVudHMpOwp9CgpPYmplY3RJbml0aWFsaXplciBvYmplY3RMaXRlcmFsKE1hcDxTdHJpbmcsIEV4cHJlc3Npb24+IG1hcCkgewogIHJldHVybiBqcy5vYmplY3RMaXRlcmFsKG1hcCk7Cn0KCmNsYXNzIE1pbmlKc1BhcnNlckVycm9yIHsKICBNaW5pSnNQYXJzZXJFcnJvcih0aGlzLnBhcnNlciwgdGhpcy5tZXNzYWdlKSB7fQoKICBmaW5hbCBNaW5pSnNQYXJzZXIgcGFyc2VyOwogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpbnQgcG9zID0gcGFyc2VyLmxhc3RQb3NpdGlvbjsKCiAgICAvLyBEaXNjYXJkIGxpbmVzIGZvbGxvd2luZyB0aGUgbGluZSBjb250YWluaW5nIGxhc3RQb3NpdGlvbi4KICAgIFN0cmluZyBzcmMgPSBwYXJzZXIuc3JjOwogICAgaW50IG5ld2xpbmVQb3MgPSBzcmMuaW5kZXhPZignXG4nLCBwb3MpOwogICAgaWYgKG5ld2xpbmVQb3MgPj0gcG9zKSBzcmMgPSBzcmMuc3Vic3RyaW5nKDAsIG5ld2xpbmVQb3MpOwoKICAgIC8vIEV4dHJhY3QgdGhlIHByZWZpeCBvZiB0aGUgZXJyb3IgbGluZSBiZWZvcmUgbGFzdFBvc2l0aW9uLgogICAgU3RyaW5nIGxpbmUgPSBzcmM7CiAgICBpbnQgbGFzdExpbmVTdGFydCA9IGxpbmUubGFzdEluZGV4T2YoJ1xuJyk7CiAgICBpZiAobGFzdExpbmVTdGFydCA+PSAwKSBsaW5lID0gbGluZS5zdWJzdHJpbmcobGFzdExpbmVTdGFydCArIDEpOwogICAgU3RyaW5nIHByZWZpeCA9IGxpbmUuc3Vic3RyaW5nKDAsIHBvcyAtIChzcmMubGVuZ3RoIC0gbGluZS5sZW5ndGgpKTsKCiAgICAvLyBSZXBsYWNlIG5vbi10YWJzIHdpdGggc3BhY2VzLCBnaXZpbmcgYSBwcmludCBpbmRlbnQgdGhhdCBtYXRjaGVzIHRoZSB0ZXh0CiAgICAvLyBmb3IgdGFiYmluZy4KICAgIFN0cmluZyBzcGFjZXMgPSBwcmVmaXgucmVwbGFjZUFsbChuZXcgUmVnRXhwKHInW15cdF0nKSwgJyAnKTsKICAgIHJldHVybiAnRXJyb3IgaW4gTWluaUpzUGFyc2VyOlxuJHtzcmN9XG4kc3BhY2VzXlxuJHNwYWNlcyRtZXNzYWdlXG4nOwogIH0KfQoKLy8vIE1pbmkgSmF2YVNjcmlwdCBwYXJzZXIgZm9yIHRpbnkgc25pcHBldHMgb2YgY29kZSB0aGF0IHdlIHdhbnQgdG8gbWFrZSBpbnRvCi8vLyBBU1Qgbm9kZXMuICBIYW5kbGVzOgovLy8gKiBpZGVudGlmaWVycy4KLy8vICogZG90IGFjY2Vzcy4KLy8vICogbWV0aG9kIGNhbGxzLgovLy8gKiBbXSBhY2Nlc3MuCi8vLyAqIGFycmF5LCBzdHJpbmcsIHJlZ2V4cCwgYm9vbGVhbiwgbnVsbCBhbmQgbnVtZXJpYyBsaXRlcmFscy4KLy8vICogbW9zdCBvcGVyYXRvcnMuCi8vLyAqIGJyYWNrZXRzLgovLy8gKiB2YXIgZGVjbGFyYXRpb25zLgovLy8gKiBvcGVyYXRvciBwcmVjZWRlbmNlLgovLy8gKiBhbm9ueW1vdXMgZnVuY3Rpb25zIGFuZCBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9ucyBhbmQgZGVjbGFyYXRpb25zLgovLy8gTm90YWJsZSB0aGluZ3MgaXQgY2FuJ3QgZG8geWV0IGluY2x1ZGU6Ci8vLyAqIHNvbWUgc3RhdGVtZW50cyBhcmUgc3RpbGwgbWlzc2luZyAoZG8td2hpbGUsIHdoaWxlLCBzd2l0Y2gpLgovLy8KLy8vIEl0J3MgYSBmYWlybHkgc3RhbmRhcmQgcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyLgovLy8KLy8vIExpdGVyYWwgc3RyaW5ncyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGZpbmFsIEpTIHNvdXJjZSBjb2RlIHVuY2hhbmdlZCwKLy8vIGluY2x1ZGluZyB0aGUgY2hvaWNlIG9mIHN1cnJvdW5kaW5nIHF1b3Rlcywgc28gaWYgeW91IHBhcnNlCi8vLyByJ3ZhciB4ID0gImZvb1xuXCJiYXJcIiInIHlvdSB3aWxsIGVuZCB1cCB3aXRoCi8vLyAgIHZhciB4ID0gImZvb1xuXCJiYXJcIiIgaW4gdGhlIGZpbmFsIHByb2dyYW0uICBceCBhbmQgXHUgZXNjYXBlcyBhcmUgbm90Ci8vLyBhbGxvd2VkIGluIHN0cmluZyBhbmQgcmVnZXhwIGxpdGVyYWxzIGJlY2F1c2UgdGhlIG1hY2hpbmVyeSBmb3IgY2hlY2tpbmcKLy8vIHRoZWlyIGNvcnJlY3RuZXNzIGlzIHJhdGhlciBpbnZvbHZlZC4KY2xhc3MgTWluaUpzUGFyc2VyIHsKICBNaW5pSnNQYXJzZXIodGhpcy5zcmMpCiAgICAgIDogbGFzdENhdGVnb3J5ID0gTk9ORSwKICAgICAgICBsYXN0VG9rZW4gPSBudWxsLAogICAgICAgIGxhc3RQb3NpdGlvbiA9IDAsCiAgICAgICAgcG9zaXRpb24gPSAwIHsKICAgIGdldFRva2VuKCk7CiAgfQoKICBpbnQgbGFzdENhdGVnb3J5ID0gTk9ORTsKICBTdHJpbmcgbGFzdFRva2VuID0gbnVsbDsKICBpbnQgbGFzdFBvc2l0aW9uID0gMDsKICBpbnQgcG9zaXRpb24gPSAwOwogIGJvb2wgc2tpcHBlZE5ld2xpbmUgPSBmYWxzZTsgLy8gc2tpcHBlZCBuZXdsaW5lIGluIGxhc3QgZ2V0VG9rZW4/CiAgZmluYWwgU3RyaW5nIHNyYzsKCiAgZmluYWwgTGlzdDxJbnRlcnBvbGF0ZWROb2RlPiBpbnRlcnBvbGF0ZWRWYWx1ZXMgPSA8SW50ZXJwb2xhdGVkTm9kZT5bXTsKICBib29sIGdldCBoYXNOYW1lZEhvbGVzID0+CiAgICAgIGludGVycG9sYXRlZFZhbHVlcy5pc05vdEVtcHR5ICYmIGludGVycG9sYXRlZFZhbHVlcy5maXJzdC5pc05hbWVkOwogIGJvb2wgZ2V0IGhhc1Bvc2l0aW9uYWxIb2xlcyA9PgogICAgICBpbnRlcnBvbGF0ZWRWYWx1ZXMuaXNOb3RFbXB0eSAmJiBpbnRlcnBvbGF0ZWRWYWx1ZXMuZmlyc3QuaXNQb3NpdGlvbmFsOwoKICBzdGF0aWMgY29uc3QgTk9ORSA9IC0xOwogIHN0YXRpYyBjb25zdCBBTFBIQSA9IDA7CiAgc3RhdGljIGNvbnN0IE5VTUVSSUMgPSAxOwogIHN0YXRpYyBjb25zdCBTVFJJTkcgPSAyOwogIHN0YXRpYyBjb25zdCBTWU1CT0wgPSAzOwogIHN0YXRpYyBjb25zdCBBU1NJR05NRU5UID0gNDsKICBzdGF0aWMgY29uc3QgRE9UID0gNTsKICBzdGF0aWMgY29uc3QgTFBBUkVOID0gNjsKICBzdGF0aWMgY29uc3QgUlBBUkVOID0gNzsKICBzdGF0aWMgY29uc3QgTEJSQUNFID0gODsKICBzdGF0aWMgY29uc3QgUkJSQUNFID0gOTsKICBzdGF0aWMgY29uc3QgTFNRVUFSRSA9IDEwOwogIHN0YXRpYyBjb25zdCBSU1FVQVJFID0gMTE7CiAgc3RhdGljIGNvbnN0IENPTU1BID0gMTI7CiAgc3RhdGljIGNvbnN0IFFVRVJZID0gMTM7CiAgc3RhdGljIGNvbnN0IENPTE9OID0gMTQ7CiAgc3RhdGljIGNvbnN0IFNFTUlDT0xPTiA9IDE1OwogIHN0YXRpYyBjb25zdCBIQVNIID0gMTY7CiAgc3RhdGljIGNvbnN0IFdISVRFU1BBQ0UgPSAxNzsKICBzdGF0aWMgY29uc3QgT1RIRVIgPSAxODsKCiAgLy8gTWFrZSBzdXJlIHRoYXQgXV0gaXMgdHdvIHN5bWJvbHMuCiAgYm9vbCBzaW5nbGVDaGFyQ2F0ZWdvcnkoaW50IGNhdGVnb3J5KSA9PiBjYXRlZ29yeSA+PSBET1Q7CgogIHN0YXRpYyBTdHJpbmcgY2F0ZWdvcnlUb1N0cmluZyhpbnQgY2F0KSB7CiAgICBzd2l0Y2ggKGNhdCkgewogICAgICBjYXNlIE5PTkU6CiAgICAgICAgcmV0dXJuICJOT05FIjsKICAgICAgY2FzZSBBTFBIQToKICAgICAgICByZXR1cm4gIkFMUEhBIjsKICAgICAgY2FzZSBOVU1FUklDOgogICAgICAgIHJldHVybiAiTlVNRVJJQyI7CiAgICAgIGNhc2UgU1lNQk9MOgogICAgICAgIHJldHVybiAiU1lNQk9MIjsKICAgICAgY2FzZSBBU1NJR05NRU5UOgogICAgICAgIHJldHVybiAiQVNTSUdOTUVOVCI7CiAgICAgIGNhc2UgRE9UOgogICAgICAgIHJldHVybiAiRE9UIjsKICAgICAgY2FzZSBMUEFSRU46CiAgICAgICAgcmV0dXJuICJMUEFSRU4iOwogICAgICBjYXNlIFJQQVJFTjoKICAgICAgICByZXR1cm4gIlJQQVJFTiI7CiAgICAgIGNhc2UgTEJSQUNFOgogICAgICAgIHJldHVybiAiTEJSQUNFIjsKICAgICAgY2FzZSBSQlJBQ0U6CiAgICAgICAgcmV0dXJuICJSQlJBQ0UiOwogICAgICBjYXNlIExTUVVBUkU6CiAgICAgICAgcmV0dXJuICJMU1FVQVJFIjsKICAgICAgY2FzZSBSU1FVQVJFOgogICAgICAgIHJldHVybiAiUlNRVUFSRSI7CiAgICAgIGNhc2UgU1RSSU5HOgogICAgICAgIHJldHVybiAiU1RSSU5HIjsKICAgICAgY2FzZSBDT01NQToKICAgICAgICByZXR1cm4gIkNPTU1BIjsKICAgICAgY2FzZSBRVUVSWToKICAgICAgICByZXR1cm4gIlFVRVJZIjsKICAgICAgY2FzZSBDT0xPTjoKICAgICAgICByZXR1cm4gIkNPTE9OIjsKICAgICAgY2FzZSBTRU1JQ09MT046CiAgICAgICAgcmV0dXJuICJTRU1JQ09MT04iOwogICAgICBjYXNlIEhBU0g6CiAgICAgICAgcmV0dXJuICJIQVNIIjsKICAgICAgY2FzZSBXSElURVNQQUNFOgogICAgICAgIHJldHVybiAiV0hJVEVTUEFDRSI7CiAgICAgIGNhc2UgT1RIRVI6CiAgICAgICAgcmV0dXJuICJPVEhFUiI7CiAgICB9CiAgICByZXR1cm4gIlVua25vd246ICRjYXQiOwogIH0KCiAgc3RhdGljIGNvbnN0IENBVEVHT1JJRVMgPSBjb25zdCA8aW50PlsKICAgIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgLy8gMC03CiAgICBPVEhFUiwgV0hJVEVTUEFDRSwgV0hJVEVTUEFDRSwgT1RIRVIsIE9USEVSLCBXSElURVNQQUNFLCAvLyA4LTEzCiAgICBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIC8vIDE0LTIxCiAgICBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIC8vIDIyLTI5CiAgICBPVEhFUiwgT1RIRVIsIFdISVRFU1BBQ0UsIC8vIDMwLTMyCiAgICBTWU1CT0wsIE9USEVSLCBIQVNILCBBTFBIQSwgU1lNQk9MLCBTWU1CT0wsIE9USEVSLCAvLyAhIiMkJSbCtAogICAgTFBBUkVOLCBSUEFSRU4sIFNZTUJPTCwgU1lNQk9MLCBDT01NQSwgU1lNQk9MLCBET1QsIFNZTUJPTCwgLy8gKCkqKywtLi8KICAgIE5VTUVSSUMsIE5VTUVSSUMsIE5VTUVSSUMsIE5VTUVSSUMsIE5VTUVSSUMsIC8vIDAxMjM0CiAgICBOVU1FUklDLCBOVU1FUklDLCBOVU1FUklDLCBOVU1FUklDLCBOVU1FUklDLCAvLyA1Njc4OQogICAgQ09MT04sIFNFTUlDT0xPTiwgU1lNQk9MLCBTWU1CT0wsIFNZTUJPTCwgUVVFUlksIE9USEVSLCAvLyA6Ozw9Pj9ACiAgICBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIC8vIEFCQ0RFRkdICiAgICBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIC8vIElKS0xNTk9QCiAgICBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIC8vIFFSU1RVVldYCiAgICBBTFBIQSwgQUxQSEEsIExTUVVBUkUsIE9USEVSLCBSU1FVQVJFLCBTWU1CT0wsIEFMUEhBLCBPVEhFUiwgLy8gWVpbXF1eXycKICAgIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgLy8gYWJjZGVmZ2gKICAgIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgLy8gaWprbG1ub3AKICAgIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgLy8gcXJzdHV2d3gKICAgIEFMUEhBLCBBTFBIQSwgTEJSQUNFLCBTWU1CT0wsIFJCUkFDRSwgU1lNQk9MCiAgXTsgLy8geXp7fH1+CgogIC8vIFRoaXMgbXVzdCBiZSBhID49IHRoZSBoaWdoZXN0IHByZWNlZGVuY2UgbnVtYmVyIGhhbmRsZWQgYnkgcGFyc2VCaW5hcnkuCiAgc3RhdGljIHZhciBISUdIRVNUX1BBUlNFX0JJTkFSWV9QUkVDRURFTkNFID0gMTY7CiAgc3RhdGljIGJvb2wgaXNBc3NpZ25tZW50KFN0cmluZyBzeW1ib2wpID0+IEJJTkFSWV9QUkVDRURFTkNFW3N5bWJvbF0gPT0gMTc7CgogIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMvT3BlcmF0b3JfUHJlY2VkZW5jZQogIHN0YXRpYyBmaW5hbCBCSU5BUllfUFJFQ0VERU5DRSA9IHsKICAgICcrPSc6IDE3LAogICAgJy09JzogMTcsCiAgICAnKj0nOiAxNywKICAgICcvPSc6IDE3LAogICAgJyU9JzogMTcsCiAgICAnXj0nOiAxNywKICAgICd8PSc6IDE3LAogICAgJyY9JzogMTcsCiAgICAnPDw9JzogMTcsCiAgICAnPj49JzogMTcsCiAgICAnPj4+PSc6IDE3LAogICAgJz0nOiAxNywKICAgICd8fCc6IDE0LAogICAgJyYmJzogMTMsCiAgICAnfCc6IDEyLAogICAgJ14nOiAxMSwKICAgICcmJzogMTAsCiAgICAnIT0nOiA5LAogICAgJz09JzogOSwKICAgICchPT0nOiA5LAogICAgJz09PSc6IDksCiAgICAnPCc6IDgsCiAgICAnPD0nOiA4LAogICAgJz49JzogOCwKICAgICc+JzogOCwKICAgICdpbic6IDgsCiAgICAnaW5zdGFuY2VvZic6IDgsCiAgICAnPDwnOiA3LAogICAgJz4+JzogNywKICAgICc+Pj4nOiA3LAogICAgJysnOiA2LAogICAgJy0nOiA2LAogICAgJyonOiA1LAogICAgJy8nOiA1LAogICAgJyUnOiA1CiAgfTsKICBzdGF0aWMgZmluYWwgVU5BUllfT1BFUkFUT1JTID0gWwogICAgJysrJywKICAgICctLScsCiAgICAnKycsCiAgICAnLScsCiAgICAnficsCiAgICAnIScsCiAgICAndHlwZW9mJywKICAgICd2b2lkJywKICAgICdkZWxldGUnLAogICAgJ2F3YWl0JwogIF0udG9TZXQoKTsKCiAgc3RhdGljIGZpbmFsIE9QRVJBVE9SU19USEFUX0xPT0tfTElLRV9JREVOVElGSUVSUyA9CiAgICAgIFsndHlwZW9mJywgJ3ZvaWQnLCAnZGVsZXRlJywgJ2luJywgJ2luc3RhbmNlb2YnLCAnYXdhaXQnXS50b1NldCgpOwoKICBzdGF0aWMgaW50IGNhdGVnb3J5KGludCBjb2RlKSB7CiAgICBpZiAoY29kZSA+PSBDQVRFR09SSUVTLmxlbmd0aCkgcmV0dXJuIE9USEVSOwogICAgcmV0dXJuIENBVEVHT1JJRVNbY29kZV07CiAgfQoKICBTdHJpbmcgZ2V0RGVsaW1pdGVkKGludCBzdGFydFBvc2l0aW9uKSB7CiAgICBwb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CiAgICBpbnQgZGVsaW1pdGVyID0gc3JjLmNvZGVVbml0QXQoc3RhcnRQb3NpdGlvbik7CiAgICBpbnQgY3VycmVudENvZGU7CiAgICBkbyB7CiAgICAgIHBvc2l0aW9uKys7CiAgICAgIGlmIChwb3NpdGlvbiA+PSBzcmMubGVuZ3RoKSBlcnJvcigiVW50ZXJtaW5hdGVkIGxpdGVyYWwiKTsKICAgICAgY3VycmVudENvZGUgPSBzcmMuY29kZVVuaXRBdChwb3NpdGlvbik7CiAgICAgIGlmIChjdXJyZW50Q29kZSA9PSBjaGFyQ29kZXMuJExGKSBlcnJvcigiVW50ZXJtaW5hdGVkIGxpdGVyYWwiKTsKICAgICAgaWYgKGN1cnJlbnRDb2RlID09IGNoYXJDb2Rlcy4kQkFDS1NMQVNIKSB7CiAgICAgICAgaWYgKCsrcG9zaXRpb24gPj0gc3JjLmxlbmd0aCkgZXJyb3IoIlVudGVybWluYXRlZCBsaXRlcmFsIik7CiAgICAgICAgaW50IGVzY2FwZWQgPSBzcmMuY29kZVVuaXRBdChwb3NpdGlvbik7CiAgICAgICAgaWYgKGVzY2FwZWQgPT0gY2hhckNvZGVzLiR4IHx8CiAgICAgICAgICAgIGVzY2FwZWQgPT0gY2hhckNvZGVzLiRYIHx8CiAgICAgICAgICAgIGVzY2FwZWQgPT0gY2hhckNvZGVzLiR1IHx8CiAgICAgICAgICAgIGVzY2FwZWQgPT0gY2hhckNvZGVzLiRVIHx8CiAgICAgICAgICAgIGNhdGVnb3J5KGVzY2FwZWQpID09IE5VTUVSSUMpIHsKICAgICAgICAgIGVycm9yKCdOdW1lcmljIGFuZCBoZXggZXNjYXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gbGl0ZXJhbHMnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gd2hpbGUgKGN1cnJlbnRDb2RlICE9IGRlbGltaXRlcik7CiAgICBwb3NpdGlvbisrOwogICAgcmV0dXJuIHNyYy5zdWJzdHJpbmcobGFzdFBvc2l0aW9uLCBwb3NpdGlvbik7CiAgfQoKICB2b2lkIGdldFRva2VuKCkgewogICAgc2tpcHBlZE5ld2xpbmUgPSBmYWxzZTsKICAgIGZvciAoOzspIHsKICAgICAgaWYgKHBvc2l0aW9uID49IHNyYy5sZW5ndGgpIGJyZWFrOwogICAgICBpbnQgY29kZSA9IHNyYy5jb2RlVW5pdEF0KHBvc2l0aW9uKTsKICAgICAgLy8gIFNraXAgJy8vJyBhbmQgJy8qJyBzdHlsZSBjb21tZW50cy4KICAgICAgaWYgKGNvZGUgPT0gY2hhckNvZGVzLiRTTEFTSCAmJiBwb3NpdGlvbiArIDEgPCBzcmMubGVuZ3RoKSB7CiAgICAgICAgaWYgKHNyYy5jb2RlVW5pdEF0KHBvc2l0aW9uICsgMSkgPT0gY2hhckNvZGVzLiRTTEFTSCkgewogICAgICAgICAgaW50IG5leHRQb3NpdGlvbiA9IHNyYy5pbmRleE9mKCdcbicsIHBvc2l0aW9uKTsKICAgICAgICAgIGlmIChuZXh0UG9zaXRpb24gPT0gLTEpIG5leHRQb3NpdGlvbiA9IHNyYy5sZW5ndGg7CiAgICAgICAgICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0gZWxzZSBpZiAoc3JjLmNvZGVVbml0QXQocG9zaXRpb24gKyAxKSA9PSBjaGFyQ29kZXMuJFNUQVIpIHsKICAgICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBzcmMuaW5kZXhPZignKi8nLCBwb3NpdGlvbiArIDIpOwogICAgICAgICAgaWYgKG5leHRQb3NpdGlvbiA9PSAtMSkgZXJyb3IoJ1VudGVybWluYXRlZCBjb21tZW50Jyk7CiAgICAgICAgICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbiArIDI7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNhdGVnb3J5KGNvZGUpICE9IFdISVRFU1BBQ0UpIGJyZWFrOwogICAgICBpZiAoY29kZSA9PSBjaGFyQ29kZXMuJExGKSBza2lwcGVkTmV3bGluZSA9IHRydWU7CiAgICAgICsrcG9zaXRpb247CiAgICB9CgogICAgaWYgKHBvc2l0aW9uID09IHNyYy5sZW5ndGgpIHsKICAgICAgbGFzdENhdGVnb3J5ID0gTk9ORTsKICAgICAgbGFzdFRva2VuID0gbnVsbDsKICAgICAgbGFzdFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBjb2RlID0gc3JjLmNvZGVVbml0QXQocG9zaXRpb24pOwogICAgbGFzdFBvc2l0aW9uID0gcG9zaXRpb247CiAgICBpZiAoY29kZSA9PSBjaGFyQ29kZXMuJFNRIHx8IGNvZGUgPT0gY2hhckNvZGVzLiREUSkgewogICAgICAvLyBTdHJpbmcgbGl0ZXJhbC4KICAgICAgbGFzdENhdGVnb3J5ID0gU1RSSU5HOwogICAgICBsYXN0VG9rZW4gPSBnZXREZWxpbWl0ZWQocG9zaXRpb24pOwogICAgfSBlbHNlIGlmIChjb2RlID09IGNoYXJDb2Rlcy4kMCAmJgogICAgICAgIHBvc2l0aW9uICsgMiA8IHNyYy5sZW5ndGggJiYKICAgICAgICBzcmMuY29kZVVuaXRBdChwb3NpdGlvbiArIDEpID09IGNoYXJDb2Rlcy4keCkgewogICAgICAvLyBIZXggbGl0ZXJhbC4KICAgICAgZm9yIChwb3NpdGlvbiArPSAyOyBwb3NpdGlvbiA8IHNyYy5sZW5ndGg7IHBvc2l0aW9uKyspIHsKICAgICAgICBpbnQgY2F0ID0gY2F0ZWdvcnkoc3JjLmNvZGVVbml0QXQocG9zaXRpb24pKTsKICAgICAgICBpZiAoY2F0ICE9IE5VTUVSSUMgJiYgY2F0ICE9IEFMUEhBKSBicmVhazsKICAgICAgfQogICAgICBsYXN0Q2F0ZWdvcnkgPSBOVU1FUklDOwogICAgICBsYXN0VG9rZW4gPSBzcmMuc3Vic3RyaW5nKGxhc3RQb3NpdGlvbiwgcG9zaXRpb24pOwogICAgICBpZiAoaW50LnRyeVBhcnNlKGxhc3RUb2tlbikgPT0gbnVsbCkgewogICAgICAgIGVycm9yKCJVbnBhcnNlYWJsZSBudW1iZXIiKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb2RlID09IGNoYXJDb2Rlcy4kU0xBU0gpIHsKICAgICAgLy8gVG9rZW5zIHRoYXQgc3RhcnQgd2l0aCAvIGFyZSBzcGVjaWFsIGR1ZSB0byByZWdleHAgbGl0ZXJhbHMuCiAgICAgIGxhc3RDYXRlZ29yeSA9IFNZTUJPTDsKICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uIDwgc3JjLmxlbmd0aCAmJiBzcmMuY29kZVVuaXRBdChwb3NpdGlvbikgPT0gY2hhckNvZGVzLiRFUSkgewogICAgICAgIHBvc2l0aW9uKys7CiAgICAgIH0KICAgICAgbGFzdFRva2VuID0gc3JjLnN1YnN0cmluZyhsYXN0UG9zaXRpb24sIHBvc2l0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEFsbCBvdGhlciB0b2tlbnMgaGFuZGxlZCBoZXJlLgogICAgICBpbnQgY2F0ID0gY2F0ZWdvcnkoc3JjLmNvZGVVbml0QXQocG9zaXRpb24pKTsKICAgICAgaW50IG5ld0NhdDsKICAgICAgZG8gewogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IHNyYy5sZW5ndGgpIGJyZWFrOwogICAgICAgIGludCBjb2RlID0gc3JjLmNvZGVVbml0QXQocG9zaXRpb24pOwogICAgICAgIC8vIFNwZWNpYWwgY29kZSB0byBkaXNhbGxvdyAhLCB+IGFuZCAvIGluIG5vbi1maXJzdCBwb3NpdGlvbiBpbiB0b2tlbiwKICAgICAgICAvLyBzbyB0aGF0ICEhIGFuZCB+fiBwYXJzZSBhcyB0d28gdG9rZW5zIGFuZCAhPSBwYXJzZXMgYXMgb25lLCB3aGlsZSA9LwogICAgICAgIC8vIHBhcnNlcyBhcyBhIGFuIGVxdWFscyB0b2tlbiBmb2xsb3dlZCBieSBhIHJlZ2V4cCBsaXRlcmFsIHN0YXJ0LgogICAgICAgIG5ld0NhdCA9IChjb2RlID09IGNoYXJDb2Rlcy4kQkFORyB8fAogICAgICAgICAgICAgICAgY29kZSA9PSBjaGFyQ29kZXMuJFNMQVNIIHx8CiAgICAgICAgICAgICAgICBjb2RlID09IGNoYXJDb2Rlcy4kVElMREUpCiAgICAgICAgICAgID8gTk9ORQogICAgICAgICAgICA6IGNhdGVnb3J5KGNvZGUpOwogICAgICB9IHdoaWxlICghc2luZ2xlQ2hhckNhdGVnb3J5KGNhdCkgJiYKICAgICAgICAgIChjYXQgPT0gbmV3Q2F0IHx8CiAgICAgICAgICAgICAgKGNhdCA9PSBBTFBIQSAmJiBuZXdDYXQgPT0gTlVNRVJJQykgfHwgLy8gZWcuIGxldmVsNDIuCiAgICAgICAgICAgICAgKGNhdCA9PSBOVU1FUklDICYmIG5ld0NhdCA9PSBET1QpKSk7IC8vIGVnLiAzLjE0MTUKICAgICAgbGFzdENhdGVnb3J5ID0gY2F0OwogICAgICBsYXN0VG9rZW4gPSBzcmMuc3Vic3RyaW5nKGxhc3RQb3NpdGlvbiwgcG9zaXRpb24pOwogICAgICBpZiAoY2F0ID09IE5VTUVSSUMpIHsKICAgICAgICBpZiAoZG91YmxlLnRyeVBhcnNlKGxhc3RUb2tlbikgPT0gbnVsbCkgewogICAgICAgICAgZXJyb3IoIlVucGFyc2VhYmxlIG51bWJlciIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjYXQgPT0gU1lNQk9MKSB7CiAgICAgICAgaW50IGJpbmFyeVByZWNlbmRlbmNlID0gQklOQVJZX1BSRUNFREVOQ0VbbGFzdFRva2VuXTsKICAgICAgICBpZiAoYmluYXJ5UHJlY2VuZGVuY2UgPT0gbnVsbCAmJiAhVU5BUllfT1BFUkFUT1JTLmNvbnRhaW5zKGxhc3RUb2tlbikpIHsKICAgICAgICAgIGVycm9yKCJVbmtub3duIG9wZXJhdG9yIik7CiAgICAgICAgfQogICAgICAgIGlmIChpc0Fzc2lnbm1lbnQobGFzdFRva2VuKSkgbGFzdENhdGVnb3J5ID0gQVNTSUdOTUVOVDsKICAgICAgfSBlbHNlIGlmIChjYXQgPT0gQUxQSEEpIHsKICAgICAgICBpZiAoT1BFUkFUT1JTX1RIQVRfTE9PS19MSUtFX0lERU5USUZJRVJTLmNvbnRhaW5zKGxhc3RUb2tlbikpIHsKICAgICAgICAgIGxhc3RDYXRlZ29yeSA9IFNZTUJPTDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgZXhwZWN0Q2F0ZWdvcnkoaW50IGNhdCkgewogICAgaWYgKGNhdCAhPSBsYXN0Q2F0ZWdvcnkpIGVycm9yKCJFeHBlY3RlZCAke2NhdGVnb3J5VG9TdHJpbmcoY2F0KX0iKTsKICAgIGdldFRva2VuKCk7CiAgfQoKICBib29sIGFjY2VwdENhdGVnb3J5KGludCBjYXQpIHsKICAgIGlmIChjYXQgPT0gbGFzdENhdGVnb3J5KSB7CiAgICAgIGdldFRva2VuKCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBleHBlY3RTZW1pY29sb24oKSB7CiAgICBpZiAoYWNjZXB0U2VtaWNvbG9uKCkpIHJldHVybjsKICAgIGVycm9yKCdFeHBlY3RlZCBTRU1JQ09MT04nKTsKICB9CgogIGJvb2wgYWNjZXB0U2VtaWNvbG9uKCkgewogICAgLy8gQWNjZXB0IHNlbWljb2xvbiBvciBhdXRvbWF0aWNhbGx5IGluc2VydGVkIHNlbWljb2xvbiBiZWZvcmUgY2xvc2UgYnJhY2UuCiAgICAvLyBNaW5pcGFyc2VyIGZvcmJpZHMgb3RoZXIga2luZHMgb2Ygc2VtaWNvbG9uIGluc2VydGlvbi4KICAgIGlmIChSQlJBQ0UgPT0gbGFzdENhdGVnb3J5KSByZXR1cm4gdHJ1ZTsKICAgIGlmIChOT05FID09IGxhc3RDYXRlZ29yeSkgcmV0dXJuIHRydWU7IC8vIGVuZCBvZiBpbnB1dAogICAgaWYgKHNraXBwZWROZXdsaW5lKSB7CiAgICAgIGVycm9yKCdObyBhdXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvbiBhdCBwcmVjZWRpbmcgbmV3bGluZScpOwogICAgfQogICAgcmV0dXJuIGFjY2VwdENhdGVnb3J5KFNFTUlDT0xPTik7CiAgfQoKICBib29sIGFjY2VwdFN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgICBpZiAobGFzdFRva2VuID09IHN0cmluZykgewogICAgICBnZXRUb2tlbigpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgZXJyb3IobWVzc2FnZSkgewogICAgdGhyb3cgbmV3IE1pbmlKc1BhcnNlckVycm9yKHRoaXMsIG1lc3NhZ2UpOwogIH0KCiAgLy8vIFJldHVybnMgZWl0aGVyIHRoZSBuYW1lIGZvciB0aGUgaG9sZSwgb3IgaXRzIGludGVnZXIgcG9zaXRpb24uCiAgcGFyc2VIYXNoKCkgewogICAgU3RyaW5nIGhvbGVOYW1lID0gbGFzdFRva2VuOwogICAgaWYgKGFjY2VwdENhdGVnb3J5KEFMUEhBKSkgewogICAgICAvLyBOYW1lZCBob2xlLiBFeGFtcGxlOiAnZnVuY3Rpb24gI2Z1bk5hbWUoKSB7IC4uLiB9JwogICAgICBpZiAoaGFzUG9zaXRpb25hbEhvbGVzKSB7CiAgICAgICAgZXJyb3IoJ0hvbGVzIG11c3QgYWxsIGJlIHBvc2l0aW9uYWwgb3IgbmFtZWQuICRob2xlTmFtZScpOwogICAgICB9CiAgICAgIHJldHVybiBob2xlTmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChoYXNOYW1lZEhvbGVzKSB7CiAgICAgICAgZXJyb3IoJ0hvbGVzIG11c3QgYWxsIGJlIHBvc2l0aW9uYWwgb3IgbmFtZWQuICRob2xlTmFtZScpOwogICAgICB9CiAgICAgIGludCBwb3NpdGlvbiA9IGludGVycG9sYXRlZFZhbHVlcy5sZW5ndGg7CiAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH0KICB9CgogIEV4cHJlc3Npb24gcGFyc2VQcmltYXJ5KCkgewogICAgU3RyaW5nIGxhc3QgPSBsYXN0VG9rZW47CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoQUxQSEEpKSB7CiAgICAgIGlmIChsYXN0ID09ICJ0cnVlIikgewogICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEJvb2wodHJ1ZSk7CiAgICAgIH0gZWxzZSBpZiAobGFzdCA9PSAiZmFsc2UiKSB7CiAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQm9vbChmYWxzZSk7CiAgICAgIH0gZWxzZSBpZiAobGFzdCA9PSAibnVsbCIpIHsKICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxOdWxsKCk7CiAgICAgIH0gZWxzZSBpZiAobGFzdCA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7CiAgICAgIH0gZWxzZSBpZiAobGFzdCA9PSAidGhpcyIpIHsKICAgICAgICByZXR1cm4gbmV3IFRoaXMoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlVXNlKGxhc3QpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGFjY2VwdENhdGVnb3J5KExQQVJFTikpIHsKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgIGV4cGVjdENhdGVnb3J5KFJQQVJFTik7CiAgICAgIHJldHVybiBleHByZXNzaW9uOwogICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShTVFJJTkcpKSB7CiAgICAgIHJldHVybiBuZXcgTGl0ZXJhbFN0cmluZyhsYXN0KTsKICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoTlVNRVJJQykpIHsKICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsTnVtYmVyKGxhc3QpOwogICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShMQlJBQ0UpKSB7CiAgICAgIHJldHVybiBwYXJzZU9iamVjdEluaXRpYWxpemVyKCk7CiAgICB9IGVsc2UgaWYgKGFjY2VwdENhdGVnb3J5KExTUVVBUkUpKSB7CiAgICAgIHZhciB2YWx1ZXMgPSA8RXhwcmVzc2lvbj5bXTsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KENPTU1BKSkgewogICAgICAgICAgdmFsdWVzLmFkZChuZXcgQXJyYXlIb2xlKCkpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShSU1FVQVJFKSkgYnJlYWs7CiAgICAgICAgdmFsdWVzLmFkZChwYXJzZUFzc2lnbm1lbnQoKSk7CiAgICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KFJTUVVBUkUpKSBicmVhazsKICAgICAgICBleHBlY3RDYXRlZ29yeShDT01NQSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBBcnJheUluaXRpYWxpemVyKHZhbHVlcyk7CiAgICB9IGVsc2UgaWYgKGxhc3QgIT0gbnVsbCAmJiBsYXN0LnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICBTdHJpbmcgcmVnZXhwID0gZ2V0RGVsaW1pdGVkKGxhc3RQb3NpdGlvbik7CiAgICAgIGdldFRva2VuKCk7CiAgICAgIFN0cmluZyBmbGFncyA9IGxhc3RUb2tlbjsKICAgICAgaWYgKCFhY2NlcHRDYXRlZ29yeShBTFBIQSkpIGZsYWdzID0gIiI7CiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG5ldyBSZWdFeHBMaXRlcmFsKHJlZ2V4cCArIGZsYWdzKTsKICAgICAgcmV0dXJuIGV4cHJlc3Npb247CiAgICB9IGVsc2UgaWYgKGFjY2VwdENhdGVnb3J5KEhBU0gpKSB7CiAgICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IHBhcnNlSGFzaCgpOwogICAgICBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIGV4cHJlc3Npb24gPQogICAgICAgICAgbmV3IEludGVycG9sYXRlZEV4cHJlc3Npb24obmFtZU9yUG9zaXRpb24pOwogICAgICBpbnRlcnBvbGF0ZWRWYWx1ZXMuYWRkKGV4cHJlc3Npb24pOwogICAgICByZXR1cm4gZXhwcmVzc2lvbjsKICAgIH0gZWxzZSB7CiAgICAgIGVycm9yKCJFeHBlY3RlZCBwcmltYXJ5IGV4cHJlc3Npb24iKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkgewogICAgaWYgKGxhc3RDYXRlZ29yeSA9PSBBTFBIQSB8fCBsYXN0Q2F0ZWdvcnkgPT0gSEFTSCkgewogICAgICBEZWNsYXJhdGlvbiBuYW1lID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICAgIHJldHVybiBuZXcgTmFtZWRGdW5jdGlvbihuYW1lLCBwYXJzZUZ1bigpKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUZ1bigpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUZ1bigpIHsKICAgIExpc3Q8UGFyYW1ldGVyPiBwYXJhbXMgPSA8UGFyYW1ldGVyPltdOwoKICAgIGV4cGVjdENhdGVnb3J5KExQQVJFTik7CiAgICBpZiAoIWFjY2VwdENhdGVnb3J5KFJQQVJFTikpIHsKICAgICAgZm9yICg7OykgewogICAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShIQVNIKSkgewogICAgICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gcGFyc2VIYXNoKCk7CiAgICAgICAgICBJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIgcGFyYW1ldGVyID0KICAgICAgICAgICAgICBuZXcgSW50ZXJwb2xhdGVkUGFyYW1ldGVyKG5hbWVPclBvc2l0aW9uKTsKICAgICAgICAgIGludGVycG9sYXRlZFZhbHVlcy5hZGQocGFyYW1ldGVyKTsKICAgICAgICAgIHBhcmFtcy5hZGQocGFyYW1ldGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgU3RyaW5nIGFyZ3VtZW50TmFtZSA9IGxhc3RUb2tlbjsKICAgICAgICAgIGV4cGVjdENhdGVnb3J5KEFMUEhBKTsKICAgICAgICAgIHBhcmFtcy5hZGQobmV3IFBhcmFtZXRlcihhcmd1bWVudE5hbWUpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KENPTU1BKSkgY29udGludWU7CiAgICAgICAgZXhwZWN0Q2F0ZWdvcnkoUlBBUkVOKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgQXN5bmNNb2RpZmllciBhc3luY01vZGlmaWVyOwogICAgaWYgKGFjY2VwdFN0cmluZygnYXN5bmMnKSkgewogICAgICBpZiAoYWNjZXB0U3RyaW5nKCcqJykpIHsKICAgICAgICBhc3luY01vZGlmaWVyID0gQXN5bmNNb2RpZmllci5hc3luY1N0YXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXN5bmNNb2RpZmllciA9IEFzeW5jTW9kaWZpZXIuYXN5bmM7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYWNjZXB0U3RyaW5nKCdzeW5jJykpIHsKICAgICAgaWYgKCFhY2NlcHRTdHJpbmcoJyonKSkgZXJyb3IoIk9ubHkgc3luYyogaXMgdmFsaWQgLSBzeW5jIGlzIGltcGxpZWQiKTsKICAgICAgYXN5bmNNb2RpZmllciA9IEFzeW5jTW9kaWZpZXIuc3luY1N0YXI7CiAgICB9IGVsc2UgewogICAgICBhc3luY01vZGlmaWVyID0gQXN5bmNNb2RpZmllci5zeW5jOwogICAgfQogICAgZXhwZWN0Q2F0ZWdvcnkoTEJSQUNFKTsKICAgIEJsb2NrIGJsb2NrID0gcGFyc2VCbG9jaygpOwogICAgcmV0dXJuIG5ldyBGdW4ocGFyYW1zLCBibG9jaywgYXN5bmNNb2RpZmllcjogYXN5bmNNb2RpZmllcik7CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKSB7CiAgICBMaXN0PFByb3BlcnR5PiBwcm9wZXJ0aWVzID0gPFByb3BlcnR5PltdOwogICAgZm9yICg7OykgewogICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoUkJSQUNFKSkgYnJlYWs7CiAgICAgIC8vIExpbWl0ZWQgc3Vic2V0OiBrZXlzIGFyZSBpZGVudGlmaWVycywgbm8gJ2dldCcgb3IgJ3NldCcgcHJvcGVydGllcy4KICAgICAgTGl0ZXJhbCBwcm9wZXJ0eU5hbWU7CiAgICAgIFN0cmluZyBpZGVudGlmaWVyID0gbGFzdFRva2VuOwogICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoQUxQSEEpKSB7CiAgICAgICAgcHJvcGVydHlOYW1lID0gbmV3IExpdGVyYWxTdHJpbmcoJyIkaWRlbnRpZmllciInKTsKICAgICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShTVFJJTkcpKSB7CiAgICAgICAgcHJvcGVydHlOYW1lID0gbmV3IExpdGVyYWxTdHJpbmcoaWRlbnRpZmllcik7CiAgICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoU1lNQk9MKSkgewogICAgICAgIC8vIGUuZy4gdm9pZAogICAgICAgIHByb3BlcnR5TmFtZSA9IG5ldyBMaXRlcmFsU3RyaW5nKCciJGlkZW50aWZpZXIiJyk7CiAgICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoSEFTSCkpIHsKICAgICAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBwYXJzZUhhc2goKTsKICAgICAgICBJbnRlcnBvbGF0ZWRMaXRlcmFsIGludGVycG9sYXRlZExpdGVyYWwgPQogICAgICAgICAgICBuZXcgSW50ZXJwb2xhdGVkTGl0ZXJhbChuYW1lT3JQb3NpdGlvbik7CiAgICAgICAgaW50ZXJwb2xhdGVkVmFsdWVzLmFkZChpbnRlcnBvbGF0ZWRMaXRlcmFsKTsKICAgICAgICBwcm9wZXJ0eU5hbWUgPSBpbnRlcnBvbGF0ZWRMaXRlcmFsOwogICAgICB9IGVsc2UgewogICAgICAgIGVycm9yKCdFeHBlY3RlZCBwcm9wZXJ0eSBuYW1lJyk7CiAgICAgIH0KICAgICAgZXhwZWN0Q2F0ZWdvcnkoQ09MT04pOwogICAgICBFeHByZXNzaW9uIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KCk7CiAgICAgIHByb3BlcnRpZXMuYWRkKG5ldyBQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKSk7CiAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShSQlJBQ0UpKSBicmVhazsKICAgICAgZXhwZWN0Q2F0ZWdvcnkoQ09NTUEpOwogICAgfQogICAgcmV0dXJuIG5ldyBPYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VNZW1iZXIoKSB7CiAgICBFeHByZXNzaW9uIHJlY2VpdmVyID0gcGFyc2VQcmltYXJ5KCk7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoRE9UKSkgewogICAgICAgIHJlY2VpdmVyID0gZ2V0RG90UmhzKHJlY2VpdmVyKTsKICAgICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShMU1FVQVJFKSkgewogICAgICAgIEV4cHJlc3Npb24gaW5CcmFjZXMgPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICBleHBlY3RDYXRlZ29yeShSU1FVQVJFKTsKICAgICAgICByZWNlaXZlciA9IG5ldyBQcm9wZXJ0eUFjY2VzcyhyZWNlaXZlciwgaW5CcmFjZXMpOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVjZWl2ZXI7CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlQ2FsbCgpIHsKICAgIGJvb2wgY29uc3RydWN0b3IgPSBhY2NlcHRTdHJpbmcoIm5ldyIpOwogICAgRXhwcmVzc2lvbiByZWNlaXZlciA9IHBhcnNlTWVtYmVyKCk7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoTFBBUkVOKSkgewogICAgICAgIGZpbmFsIGFyZ3VtZW50cyA9IDxFeHByZXNzaW9uPltdOwogICAgICAgIGlmICghYWNjZXB0Q2F0ZWdvcnkoUlBBUkVOKSkgewogICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgRXhwcmVzc2lvbiBhcmd1bWVudCA9IHBhcnNlQXNzaWdubWVudCgpOwogICAgICAgICAgICBhcmd1bWVudHMuYWRkKGFyZ3VtZW50KTsKICAgICAgICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KFJQQVJFTikpIGJyZWFrOwogICAgICAgICAgICBleHBlY3RDYXRlZ29yeShDT01NQSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlY2VpdmVyID0gY29uc3RydWN0b3IKICAgICAgICAgICAgPyBuZXcgTmV3KHJlY2VpdmVyLCBhcmd1bWVudHMpCiAgICAgICAgICAgIDogbmV3IENhbGwocmVjZWl2ZXIsIGFyZ3VtZW50cyk7CiAgICAgICAgY29uc3RydWN0b3IgPSBmYWxzZTsKICAgICAgfSBlbHNlIGlmICghY29uc3RydWN0b3IgJiYgYWNjZXB0Q2F0ZWdvcnkoTFNRVUFSRSkpIHsKICAgICAgICBFeHByZXNzaW9uIGluQnJhY2VzID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgZXhwZWN0Q2F0ZWdvcnkoUlNRVUFSRSk7CiAgICAgICAgcmVjZWl2ZXIgPSBuZXcgUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIGluQnJhY2VzKTsKICAgICAgfSBlbHNlIGlmICghY29uc3RydWN0b3IgJiYgYWNjZXB0Q2F0ZWdvcnkoRE9UKSkgewogICAgICAgIHJlY2VpdmVyID0gZ2V0RG90UmhzKHJlY2VpdmVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBKUyBhbGxvd3MgbmV3IHdpdGhvdXQgKCksIGJ1dCB3ZSBkb24ndC4KICAgICAgICBpZiAoY29uc3RydWN0b3IpIGVycm9yKCJQYXJlbnRoZXNlcyBhcmUgcmVxdWlyZWQgZm9yIG5ldyIpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVjZWl2ZXI7CiAgfQoKICBFeHByZXNzaW9uIGdldERvdFJocyhFeHByZXNzaW9uIHJlY2VpdmVyKSB7CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoSEFTSCkpIHsKICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gcGFyc2VIYXNoKCk7CiAgICAgIEludGVycG9sYXRlZFNlbGVjdG9yIHByb3BlcnR5ID0gbmV3IEludGVycG9sYXRlZFNlbGVjdG9yKG5hbWVPclBvc2l0aW9uKTsKICAgICAgaW50ZXJwb2xhdGVkVmFsdWVzLmFkZChwcm9wZXJ0eSk7CiAgICAgIHJldHVybiBuZXcgUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIHByb3BlcnR5KTsKICAgIH0KICAgIFN0cmluZyBpZGVudGlmaWVyID0gbGFzdFRva2VuOwogICAgLy8gSW4gRVM1IGtleXdvcmRzIGxpa2UgZGVsZXRlIGFuZCBjb250aW51ZSBhcmUgYWxsb3dlZCBhcyBwcm9wZXJ0eQogICAgLy8gbmFtZXMsIGFuZCB0aGUgSW5kZXhlZERCIEFQSSB1c2VzIHRoYXQsIHNvIHdlIG5lZWQgdG8gYWxsb3cgaXQgaGVyZS4KICAgIGlmIChhY2NlcHRDYXRlZ29yeShTWU1CT0wpKSB7CiAgICAgIGlmICghT1BFUkFUT1JTX1RIQVRfTE9PS19MSUtFX0lERU5USUZJRVJTLmNvbnRhaW5zKGlkZW50aWZpZXIpKSB7CiAgICAgICAgZXJyb3IoIkV4cGVjdGVkIGFscGhhbnVtZXJpYyBpZGVudGlmaWVyIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGV4cGVjdENhdGVnb3J5KEFMUEhBKTsKICAgIH0KICAgIHJldHVybiBuZXcgUHJvcGVydHlBY2Nlc3MuZmllbGQocmVjZWl2ZXIsIGlkZW50aWZpZXIpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZVBvc3RmaXgoKSB7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUNhbGwoKTsKICAgIFN0cmluZyBvcGVyYXRvciA9IGxhc3RUb2tlbjsKICAgIC8vIEphdmFTY3JpcHQgZ3JhbW1hciBpczoKICAgIC8vICAgICBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uIFtubyBMaW5lVGVybWluYXRvciBoZXJlXSArKwogICAgaWYgKGxhc3RDYXRlZ29yeSA9PSBTWU1CT0wgJiYKICAgICAgICAhc2tpcHBlZE5ld2xpbmUgJiYKICAgICAgICAoYWNjZXB0U3RyaW5nKCIrKyIpIHx8IGFjY2VwdFN0cmluZygiLS0iKSkpIHsKICAgICAgcmV0dXJuIG5ldyBQb3N0Zml4KG9wZXJhdG9yLCBleHByZXNzaW9uKTsKICAgIH0KICAgIC8vIElmIHdlIGRvbid0IGFjY2VwdCAnKysnIG9yICctLScgZHVlIHRvIHNraXBwZWROZXdsaW5lIGEgbmV3bGluZSwgbm8gb3RoZXIKICAgIC8vIHBhcnQgb2YgdGhlIHBhcnNlciB3aWxsIGFjY2VwdCB0aGUgdG9rZW4gYW5kIHdlIHdpbGwgZ2V0IGFuIGVycm9yIGF0IHRoZQogICAgLy8gd2hvbGUgZXhwcmVzc2lvbiBsZXZlbC4KICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZVVuYXJ5SGlnaCgpIHsKICAgIFN0cmluZyBvcGVyYXRvciA9IGxhc3RUb2tlbjsKICAgIGlmIChsYXN0Q2F0ZWdvcnkgPT0gU1lNQk9MICYmCiAgICAgICAgVU5BUllfT1BFUkFUT1JTLmNvbnRhaW5zKG9wZXJhdG9yKSAmJgogICAgICAgIChhY2NlcHRTdHJpbmcoIisrIikgfHwgYWNjZXB0U3RyaW5nKCItLSIpIHx8IGFjY2VwdFN0cmluZygnYXdhaXQnKSkpIHsKICAgICAgaWYgKG9wZXJhdG9yID09ICJhd2FpdCIpIHJldHVybiBuZXcgQXdhaXQocGFyc2VQb3N0Zml4KCkpOwogICAgICByZXR1cm4gbmV3IFByZWZpeChvcGVyYXRvciwgcGFyc2VQb3N0Zml4KCkpOwogICAgfQogICAgcmV0dXJuIHBhcnNlUG9zdGZpeCgpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZVVuYXJ5TG93KCkgewogICAgU3RyaW5nIG9wZXJhdG9yID0gbGFzdFRva2VuOwogICAgaWYgKGxhc3RDYXRlZ29yeSA9PSBTWU1CT0wgJiYKICAgICAgICBVTkFSWV9PUEVSQVRPUlMuY29udGFpbnMob3BlcmF0b3IpICYmCiAgICAgICAgb3BlcmF0b3IgIT0gIisrIiAmJgogICAgICAgIG9wZXJhdG9yICE9ICItLSIpIHsKICAgICAgZXhwZWN0Q2F0ZWdvcnkoU1lNQk9MKTsKICAgICAgaWYgKG9wZXJhdG9yID09ICJhd2FpdCIpIHJldHVybiBuZXcgQXdhaXQocGFyc2VQb3N0Zml4KCkpOwogICAgICByZXR1cm4gbmV3IFByZWZpeChvcGVyYXRvciwgcGFyc2VVbmFyeUxvdygpKTsKICAgIH0KICAgIHJldHVybiBwYXJzZVVuYXJ5SGlnaCgpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUJpbmFyeShpbnQgbWF4UHJlY2VkZW5jZSkgewogICAgRXhwcmVzc2lvbiBsaHMgPSBwYXJzZVVuYXJ5TG93KCk7CiAgICBpbnQgbWluUHJlY2VkZW5jZTsKICAgIFN0cmluZyBsYXN0U3ltYm9sOwogICAgRXhwcmVzc2lvbiByaHM7IC8vIFRoaXMgaXMgbnVsbCBmaXJzdCB0aW1lIGFyb3VuZC4KICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFN0cmluZyBzeW1ib2wgPSBsYXN0VG9rZW47CiAgICAgIGlmIChsYXN0Q2F0ZWdvcnkgIT0gU1lNQk9MIHx8CiAgICAgICAgICAhQklOQVJZX1BSRUNFREVOQ0UuY29udGFpbnNLZXkoc3ltYm9sKSB8fAogICAgICAgICAgQklOQVJZX1BSRUNFREVOQ0Vbc3ltYm9sXSA+IG1heFByZWNlZGVuY2UpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBleHBlY3RDYXRlZ29yeShTWU1CT0wpOwogICAgICBpZiAocmhzID09IG51bGwgfHwgQklOQVJZX1BSRUNFREVOQ0Vbc3ltYm9sXSA+PSBtaW5QcmVjZWRlbmNlKSB7CiAgICAgICAgaWYgKHJocyAhPSBudWxsKSBsaHMgPSBuZXcgQmluYXJ5KGxhc3RTeW1ib2wsIGxocywgcmhzKTsKICAgICAgICBtaW5QcmVjZWRlbmNlID0gQklOQVJZX1BSRUNFREVOQ0Vbc3ltYm9sXTsKICAgICAgICByaHMgPSBwYXJzZVVuYXJ5TG93KCk7CiAgICAgICAgbGFzdFN5bWJvbCA9IHN5bWJvbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBFeHByZXNzaW9uIGhpZ2hlciA9IHBhcnNlQmluYXJ5KEJJTkFSWV9QUkVDRURFTkNFW3N5bWJvbF0pOwogICAgICAgIHJocyA9IG5ldyBCaW5hcnkoc3ltYm9sLCByaHMsIGhpZ2hlcik7CiAgICAgIH0KICAgIH0KICAgIGlmIChyaHMgPT0gbnVsbCkgcmV0dXJuIGxoczsKICAgIHJldHVybiBuZXcgQmluYXJ5KGxhc3RTeW1ib2wsIGxocywgcmhzKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VDb25kaXRpb25hbCgpIHsKICAgIEV4cHJlc3Npb24gbGhzID0gcGFyc2VCaW5hcnkoSElHSEVTVF9QQVJTRV9CSU5BUllfUFJFQ0VERU5DRSk7CiAgICBpZiAoIWFjY2VwdENhdGVnb3J5KFFVRVJZKSkgcmV0dXJuIGxoczsKICAgIEV4cHJlc3Npb24gaWZUcnVlID0gcGFyc2VBc3NpZ25tZW50KCk7CiAgICBleHBlY3RDYXRlZ29yeShDT0xPTik7CiAgICBFeHByZXNzaW9uIGlmRmFsc2UgPSBwYXJzZUFzc2lnbm1lbnQoKTsKICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWwobGhzLCBpZlRydWUsIGlmRmFsc2UpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUFzc2lnbm1lbnQoKSB7CiAgICBFeHByZXNzaW9uIGxocyA9IHBhcnNlQ29uZGl0aW9uYWwoKTsKICAgIFN0cmluZyBhc3NpZ25tZW50T3BlcmF0b3IgPSBsYXN0VG9rZW47CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoQVNTSUdOTUVOVCkpIHsKICAgICAgRXhwcmVzc2lvbiByaHMgPSBwYXJzZUFzc2lnbm1lbnQoKTsKICAgICAgaWYgKGFzc2lnbm1lbnRPcGVyYXRvciA9PSAiPSIpIHsKICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnQobGhzLCByaHMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEhhbmRsZSArPSwgLT0sIGV0Yy4KICAgICAgICBTdHJpbmcgb3BlcmF0b3IgPQogICAgICAgICAgICBhc3NpZ25tZW50T3BlcmF0b3Iuc3Vic3RyaW5nKDAsIGFzc2lnbm1lbnRPcGVyYXRvci5sZW5ndGggLSAxKTsKICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnQuY29tcG91bmQobGhzLCBvcGVyYXRvciwgcmhzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGxoczsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VFeHByZXNzaW9uKCkgewogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VBc3NpZ25tZW50KCk7CiAgICB3aGlsZSAoYWNjZXB0Q2F0ZWdvcnkoQ09NTUEpKSB7CiAgICAgIEV4cHJlc3Npb24gcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnQoKTsKICAgICAgZXhwcmVzc2lvbiA9IG5ldyBCaW5hcnkoJywnLCBleHByZXNzaW9uLCByaWdodCk7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKSB7CiAgICBEZWNsYXJhdGlvbiBmaXJzdFZhcmlhYmxlID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICByZXR1cm4gZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoZmlyc3RWYXJpYWJsZSk7CiAgfQoKICBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBmaW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgKICAgICAgRGVjbGFyYXRpb24gZmlyc3RWYXJpYWJsZSkgewogICAgdmFyIGluaXRpYWxpemF0aW9uID0gPFZhcmlhYmxlSW5pdGlhbGl6YXRpb24+W107CgogICAgdm9pZCBkZWNsYXJlKERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSBudWxsOwogICAgICBpZiAoYWNjZXB0U3RyaW5nKCI9IikpIHsKICAgICAgICBpbml0aWFsaXplciA9IHBhcnNlQXNzaWdubWVudCgpOwogICAgICB9CiAgICAgIGluaXRpYWxpemF0aW9uLmFkZChuZXcgVmFyaWFibGVJbml0aWFsaXphdGlvbihkZWNsYXJhdGlvbiwgaW5pdGlhbGl6ZXIpKTsKICAgIH0KCiAgICBkZWNsYXJlKGZpcnN0VmFyaWFibGUpOwogICAgd2hpbGUgKGFjY2VwdENhdGVnb3J5KENPTU1BKSkgewogICAgICBEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgICBkZWNsYXJlKHZhcmlhYmxlKTsKICAgIH0KICAgIHJldHVybiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoaW5pdGlhbGl6YXRpb24pOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uT3JFeHByZXNzaW9uKCkgewogICAgaWYgKGFjY2VwdFN0cmluZygidmFyIikpIHsKICAgICAgcmV0dXJuIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb24oKTsKICAgIH0KICB9CgogIEV4cHJlc3Npb24gZXhwcmVzc2lvbigpIHsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlVmFyRGVjbGFyYXRpb25PckV4cHJlc3Npb24oKTsKICAgIGlmIChsYXN0Q2F0ZWdvcnkgIT0gTk9ORSB8fCBwb3NpdGlvbiAhPSBzcmMubGVuZ3RoKSB7CiAgICAgIGVycm9yKCJVbnBhcnNlZCBqdW5rOiAke2NhdGVnb3J5VG9TdHJpbmcobGFzdENhdGVnb3J5KX0iKTsKICAgIH0KICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgU3RhdGVtZW50IHN0YXRlbWVudCgpIHsKICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudCgpOwogICAgaWYgKGxhc3RDYXRlZ29yeSAhPSBOT05FIHx8IHBvc2l0aW9uICE9IHNyYy5sZW5ndGgpIHsKICAgICAgZXJyb3IoIlVucGFyc2VkIGp1bms6ICR7Y2F0ZWdvcnlUb1N0cmluZyhsYXN0Q2F0ZWdvcnkpfSIpOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBpbnRlcnBvbGF0ZWQgY2FwdHVyZSBoZXJlPwogICAgcmV0dXJuIHN0YXRlbWVudDsKICB9CgogIEJsb2NrIHBhcnNlQmxvY2soKSB7CiAgICBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxTdGF0ZW1lbnQ+W107CgogICAgd2hpbGUgKCFhY2NlcHRDYXRlZ29yeShSQlJBQ0UpKSB7CiAgICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudCgpOwogICAgICBzdGF0ZW1lbnRzLmFkZChzdGF0ZW1lbnQpOwogICAgfQogICAgcmV0dXJuIG5ldyBCbG9jayhzdGF0ZW1lbnRzKTsKICB9CgogIFN0YXRlbWVudCBwYXJzZVN0YXRlbWVudCgpIHsKICAgIGlmIChhY2NlcHRDYXRlZ29yeShMQlJBQ0UpKSByZXR1cm4gcGFyc2VCbG9jaygpOwoKICAgIGlmIChhY2NlcHRDYXRlZ29yeShTRU1JQ09MT04pKSByZXR1cm4gbmV3IEVtcHR5U3RhdGVtZW50KCk7CgogICAgaWYgKGxhc3RDYXRlZ29yeSA9PSBBTFBIQSkgewogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdyZXR1cm4nKSkgcmV0dXJuIHBhcnNlUmV0dXJuKCk7CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCd0aHJvdycpKSByZXR1cm4gcGFyc2VUaHJvdygpOwoKICAgICAgaWYgKGFjY2VwdFN0cmluZygnYnJlYWsnKSkgewogICAgICAgIHJldHVybiBwYXJzZUJyZWFrT3JDb250aW51ZSgobGFiZWwpID0+IG5ldyBCcmVhayhsYWJlbCkpOwogICAgICB9CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdjb250aW51ZScpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlQnJlYWtPckNvbnRpbnVlKChsYWJlbCkgPT4gbmV3IENvbnRpbnVlKGxhYmVsKSk7CiAgICAgIH0KCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ2lmJykpIHJldHVybiBwYXJzZUlmVGhlbkVsc2UoKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ2ZvcicpKSByZXR1cm4gcGFyc2VGb3IoKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ2Z1bmN0aW9uJykpIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ3RyeScpKSByZXR1cm4gcGFyc2VUcnkoKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ3ZhcicpKSB7CiAgICAgICAgRXhwcmVzc2lvbiBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CiAgICAgICAgZXhwZWN0U2VtaWNvbG9uKCk7CiAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KGRlY2xhcmF0aW9ucyk7CiAgICAgIH0KCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ3doaWxlJykpIHJldHVybiBwYXJzZVdoaWxlKCk7CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdkbycpKSByZXR1cm4gcGFyc2VEbygpOwoKICAgICAgaWYgKGFjY2VwdFN0cmluZygnc3dpdGNoJykpIHJldHVybiBwYXJzZVN3aXRjaCgpOwoKICAgICAgaWYgKGxhc3RUb2tlbiA9PSAnY2FzZScpIGVycm9yKCJDYXNlIG91dHNpZGUgc3dpdGNoLiIpOwoKICAgICAgaWYgKGxhc3RUb2tlbiA9PSAnZGVmYXVsdCcpIGVycm9yKCJEZWZhdWx0IG91dHNpZGUgc3dpdGNoLiIpOwoKICAgICAgaWYgKGxhc3RUb2tlbiA9PSAneWllbGQnKSByZXR1cm4gcGFyc2VZaWVsZCgpOwoKICAgICAgaWYgKGxhc3RUb2tlbiA9PSAnd2l0aCcpIHsKICAgICAgICBlcnJvcignTm90IGltcGxlbWVudGVkIGluIG1pbmkgcGFyc2VyJyk7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGNoZWNrRm9ySW50ZXJwb2xhdGVkU3RhdGVtZW50ID0gbGFzdENhdGVnb3J5ID09IEhBU0g7CgogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CgogICAgaWYgKGV4cHJlc3Npb24gaXMgVmFyaWFibGVVc2UgJiYgYWNjZXB0Q2F0ZWdvcnkoQ09MT04pKSB7CiAgICAgIHJldHVybiBuZXcgTGFiZWxlZFN0YXRlbWVudChleHByZXNzaW9uLm5hbWUsIHBhcnNlU3RhdGVtZW50KCkpOwogICAgfQoKICAgIGV4cGVjdFNlbWljb2xvbigpOwoKICAgIGlmIChjaGVja0ZvckludGVycG9sYXRlZFN0YXRlbWVudCkgewogICAgICAvLyAnUHJvbW90ZScgdGhlIGludGVycG9sYXRlZCBleHByZXNzaW9uIGAjO2AgdG8gYW4gaW50ZXJwb2xhdGVkCiAgICAgIC8vIHN0YXRlbWVudC4KICAgICAgaWYgKGV4cHJlc3Npb24gaXMgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbikgewogICAgICAgIGFzc2VydChpZGVudGljYWwoaW50ZXJwb2xhdGVkVmFsdWVzLmxhc3QsIGV4cHJlc3Npb24pKTsKICAgICAgICBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgc3RhdGVtZW50ID0KICAgICAgICAgICAgbmV3IEludGVycG9sYXRlZFN0YXRlbWVudChleHByZXNzaW9uLm5hbWVPclBvc2l0aW9uKTsKICAgICAgICBpbnRlcnBvbGF0ZWRWYWx1ZXNbaW50ZXJwb2xhdGVkVmFsdWVzLmxlbmd0aCAtIDFdID0gc3RhdGVtZW50OwogICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbik7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VSZXR1cm4oKSB7CiAgICBpZiAoYWNjZXB0U2VtaWNvbG9uKCkpIHJldHVybiBuZXcgUmV0dXJuKCk7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgIGV4cGVjdFNlbWljb2xvbigpOwogICAgcmV0dXJuIG5ldyBSZXR1cm4oZXhwcmVzc2lvbik7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VZaWVsZCgpIHsKICAgIGJvb2wgaGFzU3RhciA9IGFjY2VwdFN0cmluZygnKicpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RTZW1pY29sb24oKTsKICAgIHJldHVybiBuZXcgRGFydFlpZWxkKGV4cHJlc3Npb24sIGhhc1N0YXIpOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlVGhyb3coKSB7CiAgICBpZiAoc2tpcHBlZE5ld2xpbmUpIGVycm9yKCd0aHJvdyBleHByZXNzaW9uIG11c3QgYmUgb24gc2FtZSBsaW5lJyk7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgIGV4cGVjdFNlbWljb2xvbigpOwogICAgcmV0dXJuIG5ldyBUaHJvdyhleHByZXNzaW9uKTsKICB9CgogIFN0YXRlbWVudCBwYXJzZUJyZWFrT3JDb250aW51ZShjb25zdHJ1Y3RvcikgewogICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0VG9rZW47CiAgICBpZiAoIXNraXBwZWROZXdsaW5lICYmIGFjY2VwdENhdGVnb3J5KEFMUEhBKSkgewogICAgICBleHBlY3RTZW1pY29sb24oKTsKICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yKGlkZW50aWZpZXIpOwogICAgfQogICAgZXhwZWN0U2VtaWNvbG9uKCk7CiAgICByZXR1cm4gY29uc3RydWN0b3IobnVsbCk7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VJZlRoZW5FbHNlKCkgewogICAgZXhwZWN0Q2F0ZWdvcnkoTFBBUkVOKTsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RDYXRlZ29yeShSUEFSRU4pOwogICAgU3RhdGVtZW50IHRoZW5TdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudCgpOwogICAgaWYgKGFjY2VwdFN0cmluZygnZWxzZScpKSB7CiAgICAgIC8vIFJlc29sdmVzIGRhbmdsaW5nIGVsc2UgYnkgYmluZGluZyAnZWxzZScgdG8gY2xvc2VzdCAnaWYnLgogICAgICBTdGF0ZW1lbnQgZWxzZVN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KCk7CiAgICAgIHJldHVybiBuZXcgSWYoY29uZGl0aW9uLCB0aGVuU3RhdGVtZW50LCBlbHNlU3RhdGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgSWYubm9FbHNlKGNvbmRpdGlvbiwgdGhlblN0YXRlbWVudCk7CiAgICB9CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VGb3IoKSB7CiAgICAvLyBGb3ItaW5pdC1jb25kaXRpb24taW5jcmVtZW50IHN0eWxlIGxvb3BzIGFyZSBmdWxseSBzdXBwb3J0ZWQuCiAgICAvLwogICAgLy8gT25seSBvbmUgZm9yLWluIHZhcmlhbnQgaXMgY3VycmVudGx5IGltcGxlbWVudGVkOgogICAgLy8KICAgIC8vICAgICBmb3IgKHZhciB2YXJpYWJsZSBpbiBFeHByZXNzaW9uKSBTdGF0ZW1lbnQKICAgIC8vCiAgICBTdGF0ZW1lbnQgZmluaXNoRm9yKEV4cHJlc3Npb24gaW5pdCkgewogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IG51bGw7CiAgICAgIGlmICghYWNjZXB0Q2F0ZWdvcnkoU0VNSUNPTE9OKSkgewogICAgICAgIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgIGV4cGVjdENhdGVnb3J5KFNFTUlDT0xPTik7CiAgICAgIH0KICAgICAgRXhwcmVzc2lvbiB1cGRhdGUgPSBudWxsOwogICAgICBpZiAoIWFjY2VwdENhdGVnb3J5KFJQQVJFTikpIHsKICAgICAgICB1cGRhdGUgPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICBleHBlY3RDYXRlZ29yeShSUEFSRU4pOwogICAgICB9CiAgICAgIFN0YXRlbWVudCBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgcmV0dXJuIG5ldyBGb3IoaW5pdCwgY29uZGl0aW9uLCB1cGRhdGUsIGJvZHkpOwogICAgfQoKICAgIGV4cGVjdENhdGVnb3J5KExQQVJFTik7CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoU0VNSUNPTE9OKSkgewogICAgICByZXR1cm4gZmluaXNoRm9yKG51bGwpOwogICAgfQoKICAgIGlmIChhY2NlcHRTdHJpbmcoJ3ZhcicpKSB7CiAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ2luJykpIHsKICAgICAgICBFeHByZXNzaW9uIG9iamVjdEV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICBleHBlY3RDYXRlZ29yeShSUEFSRU4pOwogICAgICAgIFN0YXRlbWVudCBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgICByZXR1cm4gbmV3IEZvckluKAogICAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoCiAgICAgICAgICAgICAgICBbbmV3IFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oZGVjbGFyYXRpb24sIG51bGwpXSksCiAgICAgICAgICAgIG9iamVjdEV4cHJlc3Npb24sCiAgICAgICAgICAgIGJvZHkpOwogICAgICB9CiAgICAgIEV4cHJlc3Npb24gZGVjbGFyYXRpb25zID0gZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoZGVjbGFyYXRpb24pOwogICAgICBleHBlY3RDYXRlZ29yeShTRU1JQ09MT04pOwogICAgICByZXR1cm4gZmluaXNoRm9yKGRlY2xhcmF0aW9ucyk7CiAgICB9CgogICAgRXhwcmVzc2lvbiBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RDYXRlZ29yeShTRU1JQ09MT04pOwogICAgcmV0dXJuIGZpbmlzaEZvcihpbml0KTsKICB9CgogIERlY2xhcmF0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigpIHsKICAgIGlmIChhY2NlcHRDYXRlZ29yeShIQVNIKSkgewogICAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBwYXJzZUhhc2goKTsKICAgICAgSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPQogICAgICAgICAgbmV3IEludGVycG9sYXRlZERlY2xhcmF0aW9uKG5hbWVPclBvc2l0aW9uKTsKICAgICAgaW50ZXJwb2xhdGVkVmFsdWVzLmFkZChkZWNsYXJhdGlvbik7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyB0b2tlbiA9IGxhc3RUb2tlbjsKICAgICAgZXhwZWN0Q2F0ZWdvcnkoQUxQSEEpOwogICAgICByZXR1cm4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24odG9rZW4pOwogICAgfQogIH0KCiAgU3RhdGVtZW50IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIHsKICAgIERlY2xhcmF0aW9uIG5hbWUgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKTsKICAgIEV4cHJlc3Npb24gZnVuID0gcGFyc2VGdW4oKTsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25EZWNsYXJhdGlvbihuYW1lLCBmdW4pOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlVHJ5KCkgewogICAgZXhwZWN0Q2F0ZWdvcnkoTEJSQUNFKTsKICAgIEJsb2NrIGJvZHkgPSBwYXJzZUJsb2NrKCk7CiAgICBDYXRjaCBjYXRjaFBhcnQgPSBudWxsOwogICAgaWYgKGFjY2VwdFN0cmluZygnY2F0Y2gnKSkgY2F0Y2hQYXJ0ID0gcGFyc2VDYXRjaCgpOwogICAgQmxvY2sgZmluYWxseVBhcnQgPSBudWxsOwogICAgaWYgKGFjY2VwdFN0cmluZygnZmluYWxseScpKSB7CiAgICAgIGV4cGVjdENhdGVnb3J5KExCUkFDRSk7CiAgICAgIGZpbmFsbHlQYXJ0ID0gcGFyc2VCbG9jaygpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGNhdGNoUGFydCA9PSBudWxsKSBlcnJvcigiZXhwZWN0ZWQgJ2ZpbmFsbHknIik7CiAgICB9CiAgICByZXR1cm4gbmV3IFRyeShib2R5LCBjYXRjaFBhcnQsIGZpbmFsbHlQYXJ0KTsKICB9CgogIFN3aXRjaENsYXVzZSBwYXJzZVN3aXRjaENsYXVzZSgpIHsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG51bGw7CiAgICBpZiAoYWNjZXB0U3RyaW5nKCdjYXNlJykpIHsKICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICBleHBlY3RDYXRlZ29yeShDT0xPTik7CiAgICB9IGVsc2UgewogICAgICBpZiAoIWFjY2VwdFN0cmluZygnZGVmYXVsdCcpKSB7CiAgICAgICAgZXJyb3IoJ2V4cGVjdGVkIGNhc2Ugb3IgZGVmYXVsdCcpOwogICAgICB9CiAgICAgIGV4cGVjdENhdGVnb3J5KENPTE9OKTsKICAgIH0KICAgIExpc3Qgc3RhdGVtZW50cyA9IG5ldyBMaXN0PFN0YXRlbWVudD4oKTsKICAgIHdoaWxlIChsYXN0Q2F0ZWdvcnkgIT0gUkJSQUNFICYmCiAgICAgICAgbGFzdFRva2VuICE9ICdjYXNlJyAmJgogICAgICAgIGxhc3RUb2tlbiAhPSAnZGVmYXVsdCcpIHsKICAgICAgc3RhdGVtZW50cy5hZGQocGFyc2VTdGF0ZW1lbnQoKSk7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvbiA9PSBudWxsCiAgICAgICAgPyBuZXcgRGVmYXVsdChuZXcgQmxvY2soc3RhdGVtZW50cykpCiAgICAgICAgOiBuZXcgQ2FzZShleHByZXNzaW9uLCBuZXcgQmxvY2soc3RhdGVtZW50cykpOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlV2hpbGUoKSB7CiAgICBleHBlY3RDYXRlZ29yeShMUEFSRU4pOwogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgIGV4cGVjdENhdGVnb3J5KFJQQVJFTik7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CiAgICByZXR1cm4gbmV3IFdoaWxlKGNvbmRpdGlvbiwgYm9keSk7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VEbygpIHsKICAgIFN0YXRlbWVudCBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgIGlmIChsYXN0VG9rZW4gIT0gIndoaWxlIikgZXJyb3IoIk1pc3Npbmcgd2hpbGUgYWZ0ZXIgZG8gYm9keS4iKTsKICAgIGdldFRva2VuKCk7CiAgICBleHBlY3RDYXRlZ29yeShMUEFSRU4pOwogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgIGV4cGVjdENhdGVnb3J5KFJQQVJFTik7CiAgICBleHBlY3RTZW1pY29sb24oKTsKICAgIHJldHVybiBuZXcgRG8oYm9keSwgY29uZGl0aW9uKTsKICB9CgogIFN0YXRlbWVudCBwYXJzZVN3aXRjaCgpIHsKICAgIGV4cGVjdENhdGVnb3J5KExQQVJFTik7CiAgICBFeHByZXNzaW9uIGtleSA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgZXhwZWN0Q2F0ZWdvcnkoUlBBUkVOKTsKICAgIGV4cGVjdENhdGVnb3J5KExCUkFDRSk7CiAgICBMaXN0PFN3aXRjaENsYXVzZT4gY2xhdXNlcyA9IG5ldyBMaXN0PFN3aXRjaENsYXVzZT4oKTsKICAgIHdoaWxlIChsYXN0Q2F0ZWdvcnkgIT0gUkJSQUNFKSB7CiAgICAgIGNsYXVzZXMuYWRkKHBhcnNlU3dpdGNoQ2xhdXNlKCkpOwogICAgfQogICAgZXhwZWN0Q2F0ZWdvcnkoUkJSQUNFKTsKICAgIHJldHVybiBuZXcgU3dpdGNoKGtleSwgY2xhdXNlcyk7CiAgfQoKICBDYXRjaCBwYXJzZUNhdGNoKCkgewogICAgZXhwZWN0Q2F0ZWdvcnkoTFBBUkVOKTsKICAgIERlY2xhcmF0aW9uIGVycm9yTmFtZSA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgZXhwZWN0Q2F0ZWdvcnkoUlBBUkVOKTsKICAgIGV4cGVjdENhdGVnb3J5KExCUkFDRSk7CiAgICBCbG9jayBib2R5ID0gcGFyc2VCbG9jaygpOwogICAgcmV0dXJuIG5ldyBDYXRjaChlcnJvck5hbWUsIGJvZHkpOwogIH0KfQoKY2xhc3MgX0ludGVybGVhdmVJdGVyYXRvcjxUIGV4dGVuZHMgTm9kZT4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgSXRlcmF0b3I8VD4gc291cmNlOwogIFQgc2VwYXJhdG9yOwogIGJvb2wgaXNOZXh0U2VwYXJhdG9yID0gZmFsc2U7CiAgYm9vbCBpc0luaXRpYWxpemVkID0gZmFsc2U7CgogIF9JbnRlcmxlYXZlSXRlcmF0b3IodGhpcy5zb3VyY2UsIHRoaXMuc2VwYXJhdG9yKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmICghaXNJbml0aWFsaXplZCkgewogICAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgcmV0dXJuIHNvdXJjZS5tb3ZlTmV4dCgpOwogICAgfSBlbHNlIGlmIChpc05leHRTZXBhcmF0b3IpIHsKICAgICAgaXNOZXh0U2VwYXJhdG9yID0gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGlzTmV4dFNlcGFyYXRvciA9IHNvdXJjZS5tb3ZlTmV4dCgpOwogICAgfQogIH0KCiAgVCBnZXQgY3VycmVudCB7CiAgICBpZiAoaXNOZXh0U2VwYXJhdG9yKSByZXR1cm4gc2VwYXJhdG9yOwogICAgcmV0dXJuIHNvdXJjZS5jdXJyZW50OwogIH0KfQoKY2xhc3MgX0ludGVybGVhdmVJdGVyYWJsZTxUIGV4dGVuZHMgTm9kZT4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8VD4gewogIEl0ZXJhYmxlPFQ+IHNvdXJjZTsKICBUIHNlcGFyYXRvcjsKCiAgX0ludGVybGVhdmVJdGVyYWJsZSh0aGlzLnNvdXJjZSwgdGhpcy5zZXBhcmF0b3IpOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBfSW50ZXJsZWF2ZUl0ZXJhdG9yPFQ+KHNvdXJjZS5pdGVyYXRvciwgc2VwYXJhdG9yKTsKICB9Cn0Khk8ATk48AUgyARABBEVORQNJQAQ5AQQBTyIBOQFIQgFQJAEwAQwBPAFMNgE6ASkBMAFNLgE+AU9NGQEnCA8SAVBMAScxCA8VAVFQSFE1ASkpMwFRT0kqAR40Gy00OQFJAUpPRzkBTyYBTURLUD0BJDIIIgFJATw8AUVNGwEbOwgtAU9MUQoBKCc+CBQBTk0BQThHJ0IBUUMBPBUBPRgBTk9PDgEiOSABIjg0AUtMAQFKAT0BARkBT083AQMoARIVAQY8BSEFUU4MBjQ5PDhKLAQBBkAGODg8OEosBAEGQAVIEAYrTVEdJy0NLgYEATRKHDYzTwYVBAEzSRw2ME0GFQQBBjwFJgYyLAQBBkAGNzQxLC8EAQY+BjY0LiswBAEGUFAmBjIzBAExMgQBMDUqNU4eUSATGBMYExgTGBMYExgTGAhJCCxJJz0TBAEwLC9NUQEaGhogASQqGCoYKhgqIyMjHRgqJCUjGC8eD0waCggGATo5BgE4ODgGATgBKgEkPxwaEggjIyhKHBs8JRs8EU4eJS8yGy8bMAoPIAgGAT8EAU8BQxQaLxovIRYaFhsWGhYcFhoWGhYGEQQBMAZOTUMXRwE7Bi5GAUIcGhUnIBgWDTYGLAQBTj4EATsYGSYGLAQBQgE9ATM3ATk3ATUBFU9JBAFBLiA5CC4EAgE4OTMCAUBMKwIBQBo9AgE1RE0TTToCAT8gAgEaMgEdGAEWIwFBHS0/AUEXMEZJAVEUQkoEAgFPGRMSFBFBFhAYG0ssQwQ1BE5AM05NKhUZHRoaFxAEARsbGBREFAFKHEkhTgEaGhwbGx8YGxsbGx0dGxsbHxogGwEnPAEsExEXEhgUGhMZFx0QFhMZExkTGRMZFBoUGhMZEhgSGBIYFhwRFxcdEhgGHAQBKUNFRUUnQkw6OkdISEhNSEhIMQ8BTTNOAWYlDg4ODg4ODg4PDxANDg4NDQ0NDQ4ODA0NDA0VDQ0ODAwMDAsFIwoKCQkJCQ4MDgwNATZJASIxHQQBKx4zFQkSQS5HMUUwJycnJyxICggoEDIEARQcDykrLUNAOj0jFEY+QScUCggvOBIGASIbGB8OBikdOhkdKiclOBY/NjMIHjktJQgrRh0SUBQIOQ0oNBILFCstT1BLLSwqEx4rHEVBGjkcMicKIj5RJQpAIUghCggGBAEhSRAEASEfEhMGEgQBGyMhBAEbUD4tOxpGBiYEASUfEhMGEgQBGDAEAUUQISE8IEMIFw0bQwgwFwYEAR4dIRwmJCcjIicqIxsPJggpMR4ZKSYqJiknKiMBFSUnFAosJywfCCs3MhIgLkEZJygqNioZDSwTBgQBKTk1MgYXBAEaLAEcIxEkLCw5LSERKyEzCi0gDwgGISEfMQ8tCCdOLg0qBhwgQQQBKC4PKU0cJSM7KzYrFTspKjI1NSwPKQgdLDkpHQYuBAEdKhMhKCwxITsPDwgGFQQBGywpEyQqJxk1JS8jDAofKy0dPDEhOzgoDzNEDwgGFQQBLiAoUCg1BiNITCJIMwgNHQY7BAEeKSEePiIbNjAGUVAfFwQBICEiLk9BMwYbBAEfISIuHBweQTQGHQQBLiYXFzcTISQ0Nw8IHkdBMx8dD0QvCAYhLQQBIkMsKxssMgQBISkrJionKQ8fGkw8CAYQBAEhLyQsNwYXBAE7PDkEATkjNQEsJR8pCFAGARwkORkGOAQBMR8tDSAGBAEcPzpBBhcEARosOkEGLRYEARcwASYuIQYiBAEfNQFAASE4ATYBI0IIASZFCAE4ATIBRwEyASFCGzYIATYBMAE4AT4BRAE1ASExCAYBPwEvAT5GBgEXASlHFDJAKkJHGggGATAEARwwLxcjBAEbJi8XLwQBG0gvFyIEATAgNBkmBhceBAEgHC4cMCBDMj4NNgYEARlFBzkHNgcrIygnIwggJSQgCCk1BgEcJR4GAR88IDkgKxopQh4TCEwhJgYBKR8cBAErICgsNysaDSAdLQYEASkzIS8EARkcHxw5HiMeIg06BjIEASUiICYdDSYrCB0GLSUfIigGHi03BAEbHC4cJycEARgnRRAcLhwXJAQBHBwoHBw7JSgGHCUEARccOBwcHycEAgFDFg8gHgE0ARQaHCAiHxMNMgYEARIrGwQCAUQWDwE0AR1DBAIBH3BhY2thZ2U6anNfYXN0L3NyYy9idWlsZGVyLmRhcnQ0c2Rrcm9vdDovcGtnL2pzX2FzdC9saWIvc3JjL2VxdWl2YWxlbmNlX3Zpc2l0b3IuZGFydMAAQCEvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBqc19hc3Q7CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIHdoZXRoZXIgdHdvIFtOb2RlXXMgYXJlIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50LgpjbGFzcyBFcXVpdmFsZW5jZVZpc2l0b3IgaW1wbGVtZW50cyBOb2RlVmlzaXRvcjE8Ym9vbCwgTm9kZT4gewogIGNvbnN0IEVxdWl2YWxlbmNlVmlzaXRvcigpOwoKICAvLy8gQ2FsbGVkIHdoZW4gW25vZGUxXSBhbmQgW25vZGUyXSBhcmUgbm90IGVxdWl2YWxlbnQuCiAgLy8vCiAgLy8vIE92ZXJyaWRlIHRoaXMgdG8gY29sbGVjdCBvciByZXBvcnQgaW5mb3JtYXRpb24gb24gdGhlIGluZXF1aXZhbGVudCBub2Rlcy4KICBib29sIGZhaWxBdChOb2RlIG5vZGUxLCBOb2RlIG5vZGUyKSA9PiBmYWxzZTsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgbm9uLW5vZGUgdmFsdWVzIFt2YWx1ZTFdIGFuZCBbdmFsdWUyXSBhcmUgZXF1aXZhbGVudC4KICBib29sIHRlc3RWYWx1ZXMoTm9kZSBub2RlMSwgT2JqZWN0IHZhbHVlMSwgTm9kZSBub2RlMiwgT2JqZWN0IHZhbHVlMikgPT4KICAgICAgdmFsdWUxID09IHZhbHVlMjsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgbGFiZWxzIFtsYWJlbDFdIGFuZCBbbGFiZWwyXSBhcmUgZXF1aXZhbGVudC4KICBib29sIHRlc3RMYWJlbHMoTm9kZSBub2RlMSwgU3RyaW5nIGxhYmVsMSwgTm9kZSBub2RlMiwgU3RyaW5nIGxhYmVsMikgPT4KICAgICAgbGFiZWwxID09IGxhYmVsMjsKCiAgYm9vbCB0ZXN0Tm9kZXMoTm9kZSBub2RlMSwgTm9kZSBub2RlMikgewogICAgaWYgKGlkZW50aWNhbChub2RlMSwgbm9kZTIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChub2RlMSA9PSBudWxsIHx8IG5vZGUyID09IG51bGwpIHJldHVybiBmYWlsQXQobm9kZTEsIG5vZGUyKTsKICAgIHJldHVybiBub2RlMS5hY2NlcHQxKHRoaXMsIG5vZGUyKTsKICB9CgogIGJvb2wgdGVzdE5vZGVMaXN0cyhMaXN0PE5vZGU+IGxpc3QxLCBMaXN0PE5vZGU+IGxpc3QyKSB7CiAgICBpbnQgaW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgbGlzdDEubGVuZ3RoICYmIGluZGV4IDwgbGlzdDIubGVuZ3RoKSB7CiAgICAgIGlmICghdGVzdE5vZGVzKGxpc3QxW2luZGV4XSwgbGlzdDJbaW5kZXhdKSkgcmV0dXJuIGZhbHNlOwogICAgICBpbmRleCsrOwogICAgfQogICAgaWYgKGluZGV4IDwgbGlzdDEubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWlsQXQobGlzdDFbaW5kZXhdLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoaW5kZXggPCBsaXN0Mi5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhaWxBdChsaXN0MltpbmRleF0sIG51bGwpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBQcm9ncmFtKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBQcm9ncmFtIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2RlTGlzdHMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbihJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEludGVycG9sYXRlZERlY2xhcmF0aW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5uYW1lT3JQb3NpdGlvbiwgb3RoZXIsIG90aGVyLm5hbWVPclBvc2l0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQoSW50ZXJwb2xhdGVkU3RhdGVtZW50IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEludGVycG9sYXRlZFN0YXRlbWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUubmFtZU9yUG9zaXRpb24sIG90aGVyLCBvdGhlci5uYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3IoSW50ZXJwb2xhdGVkU2VsZWN0b3Igbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEludGVycG9sYXRlZFNlbGVjdG9yKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJbnRlcnBvbGF0ZWRTZWxlY3RvciBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUubmFtZU9yUG9zaXRpb24sIG90aGVyLCBvdGhlci5uYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKEludGVycG9sYXRlZFBhcmFtZXRlciBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgSW50ZXJwb2xhdGVkUGFyYW1ldGVyKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWVPclBvc2l0aW9uLCBvdGhlciwgb3RoZXIubmFtZU9yUG9zaXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgSW50ZXJwb2xhdGVkTGl0ZXJhbCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgSW50ZXJwb2xhdGVkTGl0ZXJhbCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUubmFtZU9yUG9zaXRpb24sIG90aGVyLCBvdGhlci5uYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5uYW1lT3JQb3NpdGlvbiwgb3RoZXIsIG90aGVyLm5hbWVPclBvc2l0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIENvbW1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENvbW1lbnQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLmNvbW1lbnQsIG90aGVyLCBvdGhlci5jb21tZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBd2FpdChBd2FpdCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQXdhaXQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEF3YWl0IG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmV4cHJlc3Npb24sIG90aGVyLmV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFJlZ0V4cExpdGVyYWwoUmVnRXhwTGl0ZXJhbCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUmVnRXhwTGl0ZXJhbCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgUmVnRXhwTGl0ZXJhbCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUucGF0dGVybiwgb3RoZXIsIG90aGVyLnBhdHRlcm4pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFByb3BlcnR5KFByb3BlcnR5IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBQcm9wZXJ0eSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgUHJvcGVydHkgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUubmFtZSwgb3RoZXIubmFtZSkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS52YWx1ZSwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE9iamVjdEluaXRpYWxpemVyKE9iamVjdEluaXRpYWxpemVyIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBPYmplY3RJbml0aWFsaXplcikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgT2JqZWN0SW5pdGlhbGl6ZXIgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVMaXN0cyhub2RlLnByb3BlcnRpZXMsIG90aGVyLnByb3BlcnRpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEFycmF5SG9sZShBcnJheUhvbGUgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEFycmF5SG9sZSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QXJyYXlJbml0aWFsaXplcihBcnJheUluaXRpYWxpemVyIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBBcnJheUluaXRpYWxpemVyKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBBcnJheUluaXRpYWxpemVyIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2RlTGlzdHMobm9kZS5lbGVtZW50cywgb3RoZXIuZWxlbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE5hbWUoTmFtZSBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTmFtZSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTmFtZSBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUua2V5LCBvdGhlciwgb3RoZXIua2V5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQYXJlbnRoZXNlcyhQYXJlbnRoZXNlcyBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUGFyZW50aGVzZXMpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFBhcmVudGhlc2VzIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5lbmNsb3NlZCwgb3RoZXIsIG90aGVyLmVuY2xvc2VkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFN0cmluZ0NvbmNhdGVuYXRpb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFN0cmluZ0NvbmNhdGVuYXRpb24gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVMaXN0cyhub2RlLnBhcnRzLCBvdGhlci5wYXJ0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbE51bGwoTGl0ZXJhbE51bGwgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExpdGVyYWxOdWxsKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsTnVtYmVyKExpdGVyYWxOdW1iZXIgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExpdGVyYWxOdW1iZXIpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIExpdGVyYWxOdW1iZXIgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLnZhbHVlLCBvdGhlciwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxTdHJpbmcoTGl0ZXJhbFN0cmluZyBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTGl0ZXJhbFN0cmluZykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTGl0ZXJhbFN0cmluZyBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUudmFsdWUsIG90aGVyLCBvdGhlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbEJvb2woTGl0ZXJhbEJvb2wgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExpdGVyYWxCb29sKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBMaXRlcmFsQm9vbCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUudmFsdWUsIG90aGVyLCBvdGhlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGVmZXJyZWRTdHJpbmcoRGVmZXJyZWRTdHJpbmcgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIERlZmVycmVkU3RyaW5nKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBEZWZlcnJlZFN0cmluZyBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUudmFsdWUsIG90aGVyLCBvdGhlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGVmZXJyZWROdW1iZXIoRGVmZXJyZWROdW1iZXIgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIERlZmVycmVkTnVtYmVyKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBEZWZlcnJlZE51bWJlciBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUudmFsdWUsIG90aGVyLCBvdGhlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKERlZmVycmVkRXhwcmVzc2lvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRGVmZXJyZWRFeHByZXNzaW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBEZWZlcnJlZEV4cHJlc3Npb24gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUudmFsdWUsIG90aGVyLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW4oRnVuIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBGdW4pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEZ1biBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZUxpc3RzKG5vZGUucGFyYW1zLCBvdGhlci5wYXJhbXMpICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSkgJiYKICAgICAgICB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUuYXN5bmNNb2RpZmllciwgb3RoZXIsIG90aGVyLmFzeW5jTW9kaWZpZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE5hbWVkRnVuY3Rpb24oTmFtZWRGdW5jdGlvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTmFtZWRGdW5jdGlvbikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTmFtZWRGdW5jdGlvbiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5uYW1lLCBvdGhlci5uYW1lKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmZ1bmN0aW9uLCBvdGhlci5mdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QWNjZXNzKFByb3BlcnR5QWNjZXNzIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBQcm9wZXJ0eUFjY2VzcykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgUHJvcGVydHlBY2Nlc3Mgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUucmVjZWl2ZXIsIG90aGVyLnJlY2VpdmVyKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLnNlbGVjdG9yLCBvdGhlci5zZWxlY3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UGFyYW1ldGVyKFBhcmFtZXRlciBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUGFyYW1ldGVyKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBQYXJhbWV0ZXIgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWUsIG90aGVyLCBvdGhlci5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFZhcmlhYmxlRGVjbGFyYXRpb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWUsIG90aGVyLCBvdGhlci5uYW1lKSAmJgogICAgICAgIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5hbGxvd1JlbmFtZSwgb3RoZXIsIG90aGVyLmFsbG93UmVuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUaGlzKFRoaXMgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFRoaXMpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZhcmlhYmxlVXNlKFZhcmlhYmxlVXNlIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBWYXJpYWJsZVVzZSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgVmFyaWFibGVVc2Ugb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWUsIG90aGVyLCBvdGhlci5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQb3N0Zml4KFBvc3RmaXggbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFBvc3RmaXgpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFBvc3RmaXggb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm9wLCBvdGhlciwgb3RoZXIub3ApICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYXJndW1lbnQsIG90aGVyLmFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQcmVmaXgoUHJlZml4IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBQcmVmaXgpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFByZWZpeCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUub3AsIG90aGVyLCBvdGhlci5vcCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5hcmd1bWVudCwgb3RoZXIuYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEJpbmFyeShCaW5hcnkgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEJpbmFyeSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQmluYXJ5IG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmxlZnQsIG90aGVyLmxlZnQpICYmCiAgICAgICAgdGVzdFZhbHVlcyhub2RlLCBub2RlLm9wLCBvdGhlciwgb3RoZXIub3ApICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUucmlnaHQsIG90aGVyLnJpZ2h0KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYWxsKENhbGwgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIENhbGwpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENhbGwgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUudGFyZ2V0LCBvdGhlci50YXJnZXQpICYmCiAgICAgICAgdGVzdE5vZGVMaXN0cyhub2RlLmFyZ3VtZW50cywgb3RoZXIuYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXROZXcoTmV3IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBOZXcpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIE5ldyBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS50YXJnZXQsIG90aGVyLnRhcmdldCkgJiYKICAgICAgICB0ZXN0Tm9kZUxpc3RzKG5vZGUuYXJndW1lbnRzLCBvdGhlci5hcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdENvbmRpdGlvbmFsKENvbmRpdGlvbmFsIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBDb25kaXRpb25hbCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQ29uZGl0aW9uYWwgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUudGhlbiwgb3RoZXIudGhlbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5vdGhlcndpc2UsIG90aGVyLm90aGVyd2lzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihWYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBWYXJpYWJsZUluaXRpYWxpemF0aW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBWYXJpYWJsZUluaXRpYWxpemF0aW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmRlY2xhcmF0aW9uLCBvdGhlci5kZWNsYXJhdGlvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5sZWZ0SGFuZFNpZGUsIG90aGVyLmxlZnRIYW5kU2lkZSkgJiYKICAgICAgICB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUub3AsIG90aGVyLCBvdGhlci5vcCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS52YWx1ZSwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEFzc2lnbm1lbnQoQXNzaWdubWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQXNzaWdubWVudCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQXNzaWdubWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5sZWZ0SGFuZFNpZGUsIG90aGVyLmxlZnRIYW5kU2lkZSkgJiYKICAgICAgICB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUub3AsIG90aGVyLCBvdGhlci5vcCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS52YWx1ZSwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVMaXN0cyhub2RlLmRlY2xhcmF0aW9ucywgb3RoZXIuZGVjbGFyYXRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTGl0ZXJhbEV4cHJlc3Npb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIExpdGVyYWxFeHByZXNzaW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS50ZW1wbGF0ZSwgb3RoZXIsIG90aGVyLnRlbXBsYXRlKSAmJgogICAgICAgIHRlc3ROb2RlTGlzdHMobm9kZS5pbnB1dHMsIG90aGVyLmlucHV0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGFydFlpZWxkKERhcnRZaWVsZCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRGFydFlpZWxkKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBEYXJ0WWllbGQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuZXhwcmVzc2lvbiwgb3RoZXIuZXhwcmVzc2lvbikgJiYKICAgICAgICB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUuaGFzU3Rhciwgb3RoZXIsIG90aGVyLmhhc1N0YXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoTGl0ZXJhbFN0YXRlbWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTGl0ZXJhbFN0YXRlbWVudCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTGl0ZXJhbFN0YXRlbWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUuY29kZSwgb3RoZXIsIG90aGVyLmNvZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTGFiZWxlZFN0YXRlbWVudCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTGFiZWxlZFN0YXRlbWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0TGFiZWxzKG5vZGUsIG5vZGUubGFiZWwsIG90aGVyLCBvdGhlci5sYWJlbCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEZ1bmN0aW9uRGVjbGFyYXRpb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUubmFtZSwgb3RoZXIubmFtZSkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5mdW5jdGlvbiwgb3RoZXIuZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERlZmF1bHQoRGVmYXVsdCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRGVmYXVsdCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRGVmYXVsdCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYXNlKENhc2Ugbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIENhc2UpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENhc2Ugb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuZXhwcmVzc2lvbiwgb3RoZXIuZXhwcmVzc2lvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTd2l0Y2goU3dpdGNoIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBTd2l0Y2gpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFN3aXRjaCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5rZXksIG90aGVyLmtleSkgJiYKICAgICAgICB0ZXN0Tm9kZUxpc3RzKG5vZGUuY2FzZXMsIG90aGVyLmNhc2VzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYXRjaChDYXRjaCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQ2F0Y2gpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENhdGNoIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmRlY2xhcmF0aW9uLCBvdGhlci5kZWNsYXJhdGlvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUcnkoVHJ5IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBUcnkpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFRyeSBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmNhdGNoUGFydCwgb3RoZXIuY2F0Y2hQYXJ0KSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmZpbmFsbHlQYXJ0LCBvdGhlci5maW5hbGx5UGFydCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VGhyb3coVGhyb3cgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFRocm93KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBUaHJvdyBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5leHByZXNzaW9uLCBvdGhlci5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRSZXR1cm4oUmV0dXJuIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBSZXR1cm4pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFJldHVybiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS52YWx1ZSwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEJyZWFrKEJyZWFrIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBCcmVhaykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQnJlYWsgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdExhYmVscyhub2RlLCBub2RlLnRhcmdldExhYmVsLCBvdGhlciwgb3RoZXIudGFyZ2V0TGFiZWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdENvbnRpbnVlKENvbnRpbnVlIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBDb250aW51ZSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQ29udGludWUgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdExhYmVscyhub2RlLCBub2RlLnRhcmdldExhYmVsLCBvdGhlciwgb3RoZXIudGFyZ2V0TGFiZWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERvKERvIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBEbykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRG8gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0V2hpbGUoV2hpbGUgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFdoaWxlKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBXaGlsZSBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5jb25kaXRpb24sIG90aGVyLmNvbmRpdGlvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGb3JJbihGb3JJbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRm9ySW4pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEZvckluIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmxlZnRIYW5kU2lkZSwgb3RoZXIubGVmdEhhbmRTaWRlKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLm9iamVjdCwgb3RoZXIub2JqZWN0KSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmJvZHksIG90aGVyLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZvcihGb3Igbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEZvcikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRm9yIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmluaXQsIG90aGVyLmluaXQpICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUudXBkYXRlLCBvdGhlci51cGRhdGUpICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SWYoSWYgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIElmKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJZiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5jb25kaXRpb24sIG90aGVyLmNvbmRpdGlvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS50aGVuLCBvdGhlci50aGVuKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLm90aGVyd2lzZSwgb3RoZXIub3RoZXJ3aXNlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRW1wdHlTdGF0ZW1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRXhwcmVzc2lvblN0YXRlbWVudCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRXhwcmVzc2lvblN0YXRlbWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5leHByZXNzaW9uLCBvdGhlci5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRCbG9jayhCbG9jayBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQmxvY2spIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEJsb2NrIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2RlTGlzdHMobm9kZS5zdGF0ZW1lbnRzLCBvdGhlci5zdGF0ZW1lbnRzKTsKICB9Cn0KggAATk48ARABSz8eAToGUDABUEsYAUdLGAErLkUnBAE7EztADwYgKScpBhEEAQwuMxkxBAEMTkMpTwQBDEpBJ08EAQxIQCZPBAEMSkEnTwQBDEY/JU8EAQxMQihPBAEMLjMZQQQBDCoxFzkEAQw6OR9BBAEMMDQaLywEAQxCPSM9BAEMMjURBAEMQDwiOQQBDCgwFjkEAQw2Nx1DBAEMRj8lMwQBDDY3EQQBDDo5Hz0EAQw6OR89BAEMNjcdPQQBDDw6ID0EAQw8OiA9BAEMRD4kLwQBDCYvFTcsSgQBDDo5Hy8yBAEMNDogNzIEAQwyNRs7BAEMRj8lPUYEAQwoMBEEAQw2Nx07BAEMLjMZOTIEAQwsMhg5MgQBDCwyGC82LAQBDCgwFjM4BAEMJi8VMzgEAQw2Nx05LDQEAQxMQig9PDYsBAEMNDYcPzYsBAEMTkMpQQQBDEI9I0UyBAEMMjUbOz4EAQxAPCI7BAEMQDwiPyoEAQxGPyUvMgQBDC4zGS0EAQwoMBY7KgQBDCwyGC0wBAEMKjEXPSoEAQwmLxUvNjgEAQwqMRc5BAEMLDIYLwQBDCoxF0kEAQwwNBpJBAEMJC4UOSoEAQwqMRc5KgQBDCoxFz8wKgQBDCYvFS82MCoEAQwkLhQ5LDQEAQw8OhEEAQxGPyU5BAEMKjEXPQQCAStwYWNrYWdlOmpzX2FzdC9zcmMvZXF1aXZhbGVuY2VfdmlzaXRvci5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzL2pzX2RlYnVnLmRhcnSISy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gSGVscGVyIGZvciBkZWJ1ZyBKUyBub2Rlcy4KCmxpYnJhcnkganMuZGVidWc7CgppbXBvcnQgJ3BhY2thZ2U6anNfYXN0L2pzX2FzdC5kYXJ0JzsKCmltcG9ydCAnLi4vaW8vY29kZV9vdXRwdXQuZGFydCcgc2hvdyBCdWZmZXJlZENvZGVPdXRwdXQ7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgSW5kZW50YXRpb24sIFRhZ2dpbmc7CgovLy8gVW5wYXJzZSB0aGUgSmF2YVNjcmlwdCBbbm9kZV0uClN0cmluZyBub2RlVG9TdHJpbmcoTm9kZSBub2RlLCB7Ym9vbCBwcmV0dHk6IGZhbHNlfSkgewogIEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMgb3B0aW9ucyA9IG5ldyBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zKAogICAgICBzaG91bGRDb21wcmVzc091dHB1dDogIXByZXR0eSwKICAgICAgcHJlZmVyU2VtaWNvbG9uVG9OZXdsaW5lSW5NaW5pZmllZE91dHB1dDogIXByZXR0eSk7CiAgTGVuaWVudFByaW50aW5nQ29udGV4dCBwcmludGluZ0NvbnRleHQgPSBuZXcgTGVuaWVudFByaW50aW5nQ29udGV4dCgpOwogIG5ldyBQcmludGVyKG9wdGlvbnMsIHByaW50aW5nQ29udGV4dCkudmlzaXQobm9kZSk7CiAgcmV0dXJuIHByaW50aW5nQ29udGV4dC5nZXRUZXh0KCk7Cn0KCi8vLyBWaXNpdG9yIHRoYXQgY3JlYXRlcyBhbiBYTUwtbGlrZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RydWN0dXJlIG9mIGEKLy8vIEphdmFTY3JpcHQgW05vZGVdLgpjbGFzcyBEZWJ1Z1ByaW50ZXIgZXh0ZW5kcyBCYXNlVmlzaXRvciB3aXRoIEluZGVudGF0aW9uLCBUYWdnaW5nPE5vZGU+IHsKICBAb3ZlcnJpZGUKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogIHZvaWQgdmlzaXROb2RlV2l0aENoaWxkcmVuKE5vZGUgbm9kZSwgU3RyaW5nIHR5cGUsIFtNYXAgcGFyYW1zXSkgewogICAgb3Blbk5vZGUobm9kZSwgdHlwZSwgcGFyYW1zKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIGNsb3NlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5vZGUoTm9kZSBub2RlKSB7CiAgICB2aXNpdE5vZGVXaXRoQ2hpbGRyZW4obm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROYW1lKE5hbWUgbm9kZSkgewogICAgb3BlbkFuZENsb3NlTm9kZShub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsnbmFtZSc6IG5vZGUubmFtZX0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJpbmFyeShCaW5hcnkgbm9kZSkgewogICAgdmlzaXROb2RlV2l0aENoaWxkcmVuKG5vZGUsICcke25vZGUucnVudGltZVR5cGV9JywgeydvcCc6IG5vZGUub3B9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSkgewogICAgb3BlbkFuZENsb3NlTm9kZShub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsndmFsdWUnOiBub2RlLnZhbHVlfSk7CiAgfQoKICAvLy8gUHJldHR5LXByaW50cyBnaXZlbiBub2RlIHRyZWUgaW50byBzdHJpbmcuCiAgc3RhdGljIFN0cmluZyBwcmV0dHlQcmludChOb2RlIG5vZGUpIHsKICAgIHZhciBwID0gbmV3IERlYnVnUHJpbnRlcigpOwogICAgbm9kZS5hY2NlcHQocCk7CiAgICByZXR1cm4gcC5zYi50b1N0cmluZygpOwogIH0KfQoKLy8vIFNpbXBsZSBwcmludGluZyBjb250ZXh0IHRoYXQgZG9lc24ndCB0aHJvdyBvbiBlcnJvcnMuCmNsYXNzIExlbmllbnRQcmludGluZ0NvbnRleHQgZXh0ZW5kcyBTaW1wbGVKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0CiAgICBpbXBsZW1lbnRzIEJ1ZmZlcmVkQ29kZU91dHB1dCB7CiAgQG92ZXJyaWRlCiAgdm9pZCBlcnJvcihTdHJpbmcgbWVzc2FnZSkgewogICAgYnVmZmVyLndyaXRlKCc+PiRtZXNzYWdlPDwnKTsKICB9Cn0KSQBOTjwBHwESASUBOTYBIzdFJTpJNSQCAUoXSQwoAUUiHhEEAQweOAQBDB5IBAEMIkkEAQwwSgQBMSkgFBwEAgE6RSQMHyIEAgElcGFja2FnZTpjb21waWxlci9zcmMvanMvanNfZGVidWcuZGFydERzZGtyb290Oi9zZGsvbGliL19pbnRlcm5hbC9qc19ydW50aW1lL2xpYi9zaGFyZWQvZW1iZWRkZWRfbmFtZXMuZGFydL5MLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBDb250YWlucyB0aGUgbmFtZXMgb2YgZ2xvYmFscyB0aGF0IGFyZSBlbWJlZGRlZCBpbnRvIHRoZSBvdXRwdXQgYnkgdGhlCi8vLyBjb21waWxlci4KLy8vCi8vLyBWYXJpYWJsZXMgZW1iZWRkZWQgdGhpcyB3YXkgc2hvdWxkIGJlIGFjY2VzcyB3aXRoIGBKU19FTUJFRERFRF9HTE9CQUxgIGZyb20KLy8vIHRoZSBgX2ZvcmVpZ25faGVscGVyYCBsaWJyYXJ5LgovLy8KLy8vIFRoaXMgbGlicmFyeSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgY29tcGlsZXIgYW5kIHRoZSBydW50aW1lIHN5c3RlbS4KbGlicmFyeSBkYXJ0MmpzLl9lbWJlZGRlZF9uYW1lczsKCi8vLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyB1c2VkIHRvIG1hcmsgYSB0eXBlIGFzIHR5cGVkZWYuCi8vLwovLy8gV2l0aG91dCByZWZsZWN0aW9uIHR5cGVkZWZzIGFyZSByZW1vdmVkIChleHBhbmRlZCB0byB0aGVpciBmdW5jdGlvbiB0eXBlKQovLy8gYnV0IHdpdGggcmVmbGVjdGlvbiBhbiBvYmplY3QgaXMgbmVlZGVkIHRvIGhhdmUgdGhlIHR5cGVkZWYncyBuYW1lLiBUaGUKLy8vIG9iamVjdCBpcyBtYXJrZWQgd2l0aCB0aGlzIHByb3BlcnR5LgovLy8KLy8vIFRoaXMgcHJvcGVydHkgbmFtZSBvbmx5IGxpdmVzIG9uIGludGVybmFsIHR5cGUtb2JqZWN0cyBhbmQgaXMgb25seSB1c2VkCi8vLyB3aGVuIHJlZmxlY3Rpb24gaXMgZW5hYmxlZC4KY29uc3QgVFlQRURFRl9QUkVESUNBVEVfUFJPUEVSVFlfTkFNRSA9IHIiJCRpc1R5cGVkZWYiOwoKLy8vIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGlzIHVzZWQgdG8gZmluZCB0aGUgZnVuY3Rpb24gdHlwZSBvZiBhCi8vLyB0eXBlZGVmLgovLy8KLy8vIFdpdGhvdXQgcmVmbGVjdGlvbiB0eXBlZGVmcyBhcmUgcmVtb3ZlZCAoZXhwYW5kZWQgdG8gdGhlaXIgZnVuY3Rpb24gdHlwZSkKLy8vIGJ1dCB3aXRoIHJlZmxlY3Rpb24gYW4gb2JqZWN0IGlzIG5lZWRlZCB0byBoYXZlIHRoZSB0eXBlZGVmJ3MgbmFtZS4KLy8vCi8vLyBUaGUgdHlwZWRlZidzIG9iamVjdCBjb250YWlucyBhIHBvaW50ZXIgdG8gaXRzIGZ1bmN0aW9uIHR5cGUgKGFzIGFuIGluZGV4Ci8vLyBpbnRvIHRoZSBlbWJlZGRlZCBnbG9iYWwgW1RZUEVTXSkgaW4gdGhpcyBwcm9wZXJ0eS4KLy8vCi8vLyBUaGlzIHByb3BlcnR5IG5hbWUgb25seSBsaXZlcyBvbiBpbnRlcm5hbCB0eXBlLW9iamVjdHMgYW5kIGlzIG9ubHkgdXNlZAovLy8gd2hlbiByZWZsZWN0aW9uIGlzIGVuYWJsZWQuCmNvbnN0IFRZUEVERUZfVFlQRV9QUk9QRVJUWV9OQU1FID0gciIkdHlwZWRlZlR5cGUiOwoKLy8vIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGlzIHVzZWQgdG8gZmluZCB0aGUgbmF0aXZlIHN1cGVyY2xhc3Mgb2YKLy8vIGFuIGV4dGVuZGVkIGNsYXNzLgovLy8KLy8vIEV2ZXJ5IGNsYXNzIHRoYXQgZXh0ZW5kcyBhIG5hdGl2ZSBjbGFzcyBoYXMgdGhpcyBwcm9wZXJ0eSBzZXQgb24gaXRzCi8vLyBuYXRpdmUgY2xhc3MuCmNvbnN0IE5BVElWRV9TVVBFUkNMQVNTX1RBR19OQU1FID0gciIkbmF0aXZlU3VwZXJjbGFzc1RhZyI7CgovLy8gVGhlIG5hbWUgb2YgdGhlIHN0YXRpYy1mdW5jdGlvbiBwcm9wZXJ0eSBuYW1lLgovLy8KLy8vIFRoaXMgcHJvcGVydHkgaXMgc2V0IGZvciBhbGwgdGVhci1vZmZzIG9mIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCBwcm92aWRlcwovLy8gdGhlIHN0YXRpYyBmdW5jdGlvbidzIHVuaXF1ZSAocG90ZW50aWFsbHkgbWluaWZpZWQpIG5hbWUuCmNvbnN0IFNUQVRJQ19GVU5DVElPTl9OQU1FX1BST1BFUlRZX05BTUUgPSByJyRzdGF0aWNfbmFtZSc7CgovLy8gVGhlIG5hbWUgb2YgdGhlIGVtYmVkZGVkIGdsb2JhbCBmb3IgbWV0YWRhdGEuCi8vLwovLy8gVXNlIFtKc0J1aWx0aW4uZ2V0TWV0YWRhdGFdIGluc3RlYWQgb2YgZGlyZWN0bHkgYWNjZXNzaW5nIHRoaXMgZW1iZWRkZWQKLy8vIGdsb2JhbC4KY29uc3QgTUVUQURBVEEgPSAnbWV0YWRhdGEnOwoKLy8vIEEgbGlzdCBvZiB0eXBlcyB1c2VkIGluIHRoZSBwcm9ncmFtIGUuZy4gZm9yIHJlZmxlY3Rpb24gb3IgZW5jb2Rpbmcgb2YKLy8vIGZ1bmN0aW9uIHR5cGVzLgovLy8KLy8vIFVzZSBbSnNCdWlsdGluLmdldFR5cGVdIGluc3RlYWQgb2YgZGlyZWN0bHkgYWNjZXNzaW5nIHRoaXMgZW1iZWRkZWQgZ2xvYmFsLgpjb25zdCBUWVBFUyA9ICd0eXBlcyc7CgovLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWFwcyBhIG5hbWUgb2YgYSBjbGFzcyB0byBpdHMgdHlwZS4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyB1c2VkIGJ5IHRoZSBydW50aW1lIHdoZW4gY29tcHV0aW5nIHRoZSBpbnRlcm5hbAovLy8gcnVudGltZS10eXBlLWluZm9ybWF0aW9uIChydGkpIG9iamVjdC4KY29uc3QgR0VUX1RZUEVfRlJPTV9OQU1FID0gJ2dldFR5cGVGcm9tTmFtZSc7CgovLy8gQSBKUyBtYXAgZnJvbSBtYW5nbGVkIGdsb2JhbCBuYW1lcyB0byB0aGVpciB1bm1hbmdsZWQgbmFtZXMuCi8vLwovLy8gSWYgdGhlIHByb2dyYW0gZG9lcyBub3QgdXNlIHJlZmxlY3Rpb24sIHRoaXMgZW1iZWRkZWQgZ2xvYmFsIG1heSBiZSBlbXB0eQovLy8gKGJ1dCBub3QgbnVsbCBvciB1bmRlZmluZWQpLgpjb25zdCBNQU5HTEVEX0dMT0JBTF9OQU1FUyA9ICdtYW5nbGVkR2xvYmFsTmFtZXMnOwoKLy8vIEEgSlMgbWFwIGZyb20gbWFuZ2xlZCBpbnN0YW5jZSBuYW1lcyB0byB0aGVpciB1bm1hbmdsZWQgbmFtZXMuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgbWFpbmx5IHVzZWQgZm9yIHJlZmxlY3Rpb24sIGJ1dCBpcyBhbHNvIHVzZWQgdG8KLy8vIG1hcCBjb25zdC1zeW1ib2xzIChgY29uc3QgU3ltYm9sKCd4JylgKSB0byB0aGUgbWFuZ2xlZCBpbnN0YW5jZSBuYW1lcy4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBtYXkgYmUgZW1wdHkgKGJ1dCBub3QgbnVsbCBvciB1bmRlZmluZWQpLgpjb25zdCBNQU5HTEVEX05BTUVTID0gJ21hbmdsZWROYW1lcyc7CgovLy8gQSBKUyBtYXAgZnJvbSBkaXNwYXRjaCB0YWdzICh1c3VhbGx5IGNvbnN0cnVjdG9yIG5hbWVzIG9mIERPTSBjbGFzc2VzKSB0bwovLy8gaW50ZXJjZXB0b3IgY2xhc3MuIFRoaXMgbWFwIGlzIHVzZWQgdG8gZmluZCB0aGUgY29ycmVjdCBpbnRlcmNlcHRvciBmb3IKLy8vIG5hdGl2ZSBjbGFzc2VzLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIHVzZWQgZm9yIG5hdGl2ZXMuCmNvbnN0IElOVEVSQ0VQVE9SU19CWV9UQUcgPSAnaW50ZXJjZXB0b3JzQnlUYWcnOwoKLy8vIEEgSlMgbWFwIGZyb20gZGlzcGF0Y2ggdGFncyAodXN1YWxseSBjb25zdHJ1Y3RvciBuYW1lcyBvZiBET00gY2xhc3NlcykgdG8KLy8vIGJvb2xlYW5zLiBFdmVyeSB0YWcgZW50cnkgb2YgW0lOVEVSQ0VQVE9SU19CWV9UQUddIGhhcyBhIGNvcnJlc3BvbmRpbmcKLy8vIGVudHJ5IGluIHRoZSBsZWFmLXRhZ3MgbWFwLgovLy8KLy8vIEEgdGFnLWVudHJ5IGlzIHRydWUsIHdoZW4gYSBjbGFzcyBjYW4gYmUgdHJlYXRlZCBhcyBsZWFmIGNsYXNzIGluIHRoZQovLy8gaGllcmFyY2h5LiBUaGF0IGlzLCBldmVuIHRob3VnaCBpdCBtaWdodCBoYXZlIHN1YmNsYXNzZXMsIGFsbCBzdWJjbGFzc2VzCi8vLyBoYXZlIHRoZSBzYW1lIGNvZGUgZm9yIHRoZSB1c2VkIG1ldGhvZHMuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgdXNlZCBmb3IgbmF0aXZlcy4KY29uc3QgTEVBRl9UQUdTID0gJ2xlYWZUYWdzJzsKCi8vLyBBIEpTIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaXNvbGF0ZSB0YWcgZm9yIGEgZ2l2ZW4gbmFtZS4KLy8vCi8vLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIFtJU09MQVRFX1RBR10gKGJlbG93KSB0byBjb25zdHJ1Y3QgYSBuYW1lIHRoYXQgaXMKLy8vIHVuaXF1ZSBwZXIgaXNvbGF0ZS4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyB1c2VkIGZvciBuYXRpdmVzLgovLyBUT0RPKGZsb2l0c2NoKTogc2hvdWxkIHdlIHJlbmFtZSB0aGlzIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoCi8vICAgIFtJTlRFUkNFUFRPUlNfQllfVEFHXSBhbmQgW0xFQUZfVEFHU10uCmNvbnN0IEdFVF9JU09MQVRFX1RBRyA9ICdnZXRJc29sYXRlVGFnJzsKCi8vLyBBIHN0cmluZyB0aGF0IGlzIGRpZmZlcmVudCBmb3IgZWFjaCBydW5uaW5nIGlzb2xhdGUuCi8vLwovLy8gV2hlbiB0aGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBpbml0aWFsaXplZCBhIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIHRvCi8vLyBlbnN1cmUgdGhhdCBubyBvdGhlciBydW5uaW5nIGlzb2xhdGUgdXNlcyB0aGUgc2FtZSBpc29sYXRlLXRhZyBzdHJpbmcuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgdXNlZCBmb3IgbmF0aXZlcy4KLy8gVE9ETyhmbG9pdHNjaCk6IHNob3VsZCB3ZSByZW5hbWUgdGhpcyB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpb24gd2l0aAovLyAgICBbSU5URVJDRVBUT1JTX0JZX1RBR10gYW5kIFtMRUFGX1RBR1NdLgpjb25zdCBJU09MQVRFX1RBRyA9ICdpc29sYXRlVGFnJzsKCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCAoYSBmdW5jdGlvbikgcmV0dXJucyB0aGUgaXNvbGF0ZS1zcGVjaWZpYyBkaXNwYXRjaC10YWcKLy8vIHRoYXQgaXMgdXNlZCB0byBhY2NlbGVyYXRlIGludGVyY2VwdG9yIGNhbGxzLgpjb25zdCBESVNQQVRDSF9QUk9QRVJUWV9OQU1FID0gImRpc3BhdGNoUHJvcGVydHlOYW1lIjsKCi8vLyBBbiBlbWJlZGRlZCBnbG9iYWwgdGhhdCBtYXBzIGEgW1R5cGVdIHRvIHRoZSBbSW50ZXJjZXB0b3JdIGFuZCBjb25zdHJ1Y3RvcnMKLy8vIGZvciB0aGF0IHR5cGUuCi8vLwovLy8gTW9yZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgaW50ZXJjZXB0b3JzIGxpYnJhcnkgKGNsb3NlIHRvIGl0cwovLy8gdXNlKS4KY29uc3QgVFlQRV9UT19JTlRFUkNFUFRPUl9NQVAgPSAidHlwZVRvSW50ZXJjZXB0b3JNYXAiOwoKLy8vIFRoZSBjdXJyZW50IHNjcmlwdCdzIFVSSSB3aGVuIHRoZSBwcm9ncmFtIHdhcyBsb2FkZWQuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgc2V0IGF0IHN0YXJ0dXAsIGp1c3QgYmVmb3JlIGludm9raW5nIGBtYWluYC4KY29uc3QgQ1VSUkVOVF9TQ1JJUFQgPSAnY3VycmVudFNjcmlwdCc7CgovLy8gQ29udGFpbnMgYSBtYXAgZnJvbSBsb2FkLWlkcyB0byBsaXN0cyBvZiBwYXJ0IGluZGV4ZXMuCi8vLwovLy8gVG8gbG9hZCB0aGUgZGVmZXJyZWQgbGlicmFyeSB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBsb2FkLWlkLCB0aGUgcnVudGltZQovLy8gbXVzdCBsb2FkIGFsbCBhc3NvY2lhdGVkIFVSSXMgKG5hbWVkIGluIERFRkVSUkVEX1BBUlRfVVJJUykgYW5kIGluaXRpYWxpemUKLy8vIGFsbCB0aGUgbG9hZGVkIGh1bmtzIChERUZFUlJFRF9QQVJUX0hBU0hFUykuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgpjb25zdCBERUZFUlJFRF9MSUJSQVJZX1BBUlRTID0gJ2RlZmVycmVkTGlicmFyeVBhcnRzJzsKCi8vLyBDb250YWlucyBhIGxpc3Qgb2YgVVJJcyAoU3RyaW5ncyksIGluZGV4ZWQgYnkgcGFydC4KLy8vCi8vLyBUaGUgbGlzdHMgaW4gdGhlIERFRkVSUkVEX0xJQlJBUllfUEFSVFMgbWFwIGNvbnRhaW4gaW5kZXhlcyBpbnRvIHRoaXMgbGlzdC4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgZm9yIGRlZmVycmVkIGxvYWRpbmcuCmNvbnN0IERFRkVSUkVEX1BBUlRfVVJJUyA9ICdkZWZlcnJlZFBhcnRVcmlzJzsKCi8vLyBDb250YWlucyBhIGxpc3Qgb2YgaGFzaGVzLCBpbmRleGVkIGJ5IHBhcnQuCi8vLwovLy8gVGhlIGxpc3RzIGluIHRoZSBERUZFUlJFRF9MSUJSQVJZX1BBUlRTIG1hcCBjb250YWluIGluZGV4ZXMgaW50byB0aGlzIGxpc3QuCi8vLwovLy8gVGhlIGhhc2hlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBVUklzIG9mIHRoZSBsb2FkLWlkcyAoc2VlCi8vLyBbREVGRVJSRURfUEFSVF9VUklTXSkuIFRoZXkgYXJlIFNIQTEgKG9yIHNpbWlsYXIpIGhhc2hlcyBvZiB0aGUgY29kZSB0aGF0Ci8vLyBtdXN0IGJlIGxvYWRlZC4gQnkgdXNpbmcgY3J5cHRvZ3JhcGhpYyBoYXNoZXMgd2UgY2FuICgxKSBoYW5kbGUgbG9hZGluZyBpbgovLy8gdGhlIHNhbWUgd2ViIHBhZ2UgdGhlIHBhcnRzIGZyb20gbXVsdGlwbGUgRGFydCBhcHBsaWNhdGlvbnMgKDIpIGF2b2lkCi8vLyBsb2FkaW5nIHNpbWlsYXIgY29kZSBtdWx0aXBsZSB0aW1lcy4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgZm9yIGRlZmVycmVkIGxvYWRpbmcuCmNvbnN0IERFRkVSUkVEX1BBUlRfSEFTSEVTID0gJ2RlZmVycmVkUGFydEhhc2hlcyc7CgovLy8gSW5pdGlhbGl6ZSBhIGxvYWRlZCBodW5rLgovLy8KLy8vIE9uY2UgYSBodW5rICh0aGUgY29kZSBmcm9tIGEgZGVmZXJyZWQgVVJJKSBoYXMgYmVlbiBsb2FkZWQgaXQgbXVzdCBiZQovLy8gaW5pdGlhbGl6ZWQuIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGhhc2ggKHNlZQovLy8gW0RFRkVSUkVEX0xJQlJBUllfSEFTSEVTXSkgaW5pdGlhbGl6ZXMgdGhlIGNvZGUuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgpjb25zdCBJTklUSUFMSVpFX0xPQURFRF9IVU5LID0gJ2luaXRpYWxpemVMb2FkZWRIdW5rJzsKCi8vLyBSZXR1cm5zLCB3aGV0aGVyIGEgaHVuayAoaWRlbnRpZmllZCBieSBpdHMgaGFzaCkgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgpjb25zdCBJU19IVU5LX0xPQURFRCA9ICdpc0h1bmtMb2FkZWQnOwoKLy8vIFJldHVybnMsIHdoZXRoZXIgYSBodW5rIChpZGVudGlmaWVkIGJ5IGl0cyBoYXNoKSBoYXMgYWxyZWFkeSBiZWVuCi8vLyBpbml0aWFsaXplZC4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgZm9yIGRlZmVycmVkIGxvYWRpbmcuCmNvbnN0IElTX0hVTktfSU5JVElBTElaRUQgPSAnaXNIdW5rSW5pdGlhbGl6ZWQnOwoKLy8vIEEgc2V0IChpbXBsZW1lbnRlZCBhcyBtYXAgdG8gYm9vbGVhbnMpIG9mIGh1bmtzIChpZGVudGlmaWVkIGJ5IGhhc2hlcykgdGhhdAovLy8gaGF2ZSBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgovLy8KLy8vIFRoaXMgZ2xvYmFsIGlzIGFuIGVtaXR0ZXItaW50ZXJuYWwgZW1iZWRkZWQgZ2xvYmFsLCBhbmQgbm90IHVzZWQgYnkgdGhlCi8vLyBydW50aW1lLiBUaGUgY29uc3RhbnQgcmVtYWlucyBpbiB0aGlzIGZpbGUgdG8gbWFrZSBzdXJlIHRoYXQgb3RoZXIgZW1iZWRkZWQKLy8vIGdsb2JhbHMgZG9uJ3QgY2xhc2ggd2l0aCBpdC4KY29uc3QgREVGRVJSRURfSU5JVElBTElaRUQgPSAnZGVmZXJyZWRJbml0aWFsaXplZCc7CgovLy8gQSAnVW5pdmVyc2UnIG9iamVjdCB1c2VkIGJ5ICdkYXJ0Ol9ydGknLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIHVzZWQgZm9yIC0tZXhwZXJpbWVudC1uZXctcnRpLgpjb25zdCBSVElfVU5JVkVSU0UgPSAndHlwZVVuaXZlcnNlJzsKCi8vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGFsbCBwcmVjb21waWxlZCBmdW5jdGlvbnMgKGluIHBhcnRpY3VsYXIKLy8vIGNvbnN0cnVjdG9ycykuCi8vLwovLy8gVGhhdCBpcywgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFycmF5IHRoYXQgdGhlIGZ1bGwgZW1pdHRlciB3b3VsZAovLy8gb3RoZXJ3aXNlIGJ1aWxkIGR5bmFtaWNhbGx5IHdoZW4gaXQgZmluaXNoZXMgYWxsIGNsYXNzZXMuCi8vLwovLy8gVGhpcyBjb25zdGFudCBpcyBvbmx5IHVzZWQgaW4gQ1NQIG1vZGUuCi8vLwovLy8gVGhpcyBnbG9iYWwgaXMgYW4gZW1pdHRlci1pbnRlcm5hbCBlbWJlZGRlZCBnbG9iYWwsIGFuZCBub3QgdXNlZCBieSB0aGUKLy8vIHJ1bnRpbWUuIFRoZSBjb25zdGFudCByZW1haW5zIGluIHRoaXMgZmlsZSB0byBtYWtlIHN1cmUgdGhhdCBvdGhlciBlbWJlZGRlZAovLy8gZ2xvYmFscyBkb24ndCBjbGFzaCB3aXRoIGl0Lgpjb25zdCBQUkVDT01QSUxFRCA9ICdwcmVjb21waWxlZCc7CgovLy8gQW4gZW1pdHRlci1pbnRlcm5hbCBlbWJlZGRlZCBnbG9iYWwuIFRoaXMgZ2xvYmFsIGlzIG5vdCB1c2VkIGJ5IHRoZSBydW50aW1lLgpjb25zdCBGSU5JU0hFRF9DTEFTU0VTID0gJ2ZpbmlzaGVkQ2xhc3Nlcyc7CgovLy8gQSBKYXZhU2NyaXB0IG9iamVjdCBsaXRlcmFsIHRoYXQgbWFwcyB0aGUgKG1pbmlmaWVkKSBKYXZhU2NyaXB0IGNvbnN0cnVjdG9yCi8vLyBuYW1lIChhcyBnaXZlbiBieSBbSnNCdWlsdGluLnJhd1J0aVRvSnNDb25zdHJ1Y3Rvck5hbWVdIHRvIHRoZQovLy8gSmF2YVNjcmlwdCBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgYnkgcmVmbGVjdGlvbi4KY29uc3QgQUxMX0NMQVNTRVMgPSAnYWxsQ2xhc3Nlcyc7CgovLy8gQSBtYXAgZnJvbSBlbGVtZW50IHRvIHR5cGUgaW5mb3JtYXRpb24uCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGJ5IHJlZmxlY3Rpb24uCmNvbnN0IFRZUEVfSU5GT1JNQVRJT04gPSAndHlwZUluZm9ybWF0aW9uJzsKCi8vLyBBIG1hcCBmcm9tIHN0YXRpY3MgdG8gdGhlaXIgZGVzY3JpcHRvcnMuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGJ5IHJlZmxlY3Rpb24uCmNvbnN0IFNUQVRJQ1MgPSAnc3RhdGljcyc7CgovLy8gQW4gYXJyYXkgb2YgbGlicmFyeSBkZXNjcmlwdG9ycy4KLy8vCi8vLyBUaGUgZGVzY3JpcHRvciBjb250YWlucyBpbmZvcm1hdGlvbiBzdWNoIGFzIG5hbWUsIHVyaSwgY2xhc3NlcywgLi4uCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGJ5IHJlZmxlY3Rpb24uCmNvbnN0IExJQlJBUklFUyA9ICdsaWJyYXJpZXMnOwoKLy8vIEEgbWFwIGZyb20gbGF6eSBzdGF0aWNzIHRvIHRoZWlyIGluaXRpYWxpemVycy4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgYnkgcmVmbGVjdGlvbi4KY29uc3QgTEFaSUVTID0gJ2xhemllcyc7CgovLy8gTmFtZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IFtKU19HRVRfTkFNRV0uCi8vIFRPRE8oaGVyaHV0KTogTWFrZSBlbnRyaWVzIGxvd2VyIGNhc2UgKGFzIGluIGZpZWxkcykgYW5kIGZpbmQgYSBiZXR0ZXIgbmFtZS4KZW51bSBKc0dldE5hbWUgewogIEdFVFRFUl9QUkVGSVgsCiAgU0VUVEVSX1BSRUZJWCwKICBDQUxMX1BSRUZJWCwKICBDQUxMX1BSRUZJWDAsCiAgQ0FMTF9QUkVGSVgxLAogIENBTExfUFJFRklYMiwKICBDQUxMX1BSRUZJWDMsCiAgQ0FMTF9QUkVGSVg0LAogIENBTExfUFJFRklYNSwKICBDQUxMX0NBVENIX0FMTCwKICBSRUZMRUNUQUJMRSwKICBDTEFTU19ERVNDUklQVE9SX1BST1BFUlRZLAogIFJFUVVJUkVEX1BBUkFNRVRFUl9QUk9QRVJUWSwKICBERUZBVUxUX1ZBTFVFU19QUk9QRVJUWSwKICBDQUxMX05BTUVfUFJPUEVSVFksCiAgREVGRVJSRURfQUNUSU9OX1BST1BFUlRZLAoKICAvLy8gUHJlZml4IHVzZWQgZm9yIGdlbmVyYXRlZCB0eXBlIGFyZ3VtZW50IHN1YnN0aXR1dGlvbnMgb24gY2xhc3Nlcy4KICBPUEVSQVRPUl9BU19QUkVGSVgsCgogIC8vLyBOYW1lIHVzZWQgZm9yIGdlbmVyYXRlZCBmdW5jdGlvbiB0eXBlcyBvbiBjbGFzc2VzIGFuZCBtZXRob2RzLgogIFNJR05BVFVSRV9OQU1FLAoKICAvLy8gTmFtZSBvZiBKYXZhU2NyaXB0IHByb3BlcnR5IHVzZWQgdG8gc3RvcmUgcnVudGltZS10eXBlIGluZm9ybWF0aW9uIG9uCiAgLy8vIGluc3RhbmNlcyBvZiBwYXJhbWV0ZXJpemVkIGNsYXNzZXMuCiAgUlRJX05BTUUsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIHR5cGVkZWZzLgogIFRZUEVERUZfVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyBhIGZ1bmN0aW9uIHR5cGUuCiAgRlVOQ1RJT05fVFlQRV9UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIGJvdW5kcyBvZiBhIGdlbmVyaWMgZnVuY3Rpb24gdHlwZS4gSWYgYm91bmRzIGFyZSBwcmVzZW50LAogIC8vLyB0aGUgcHJvcGVydHkgdmFsdWUgaXMgYW4gQXJyYXkgb2YgYm91bmRzICh0aGUgbGVuZ3RoIGdpdmVzIHRoZSBudW1iZXIgb2YKICAvLy8gdHlwZSBwYXJhbWV0ZXJzKS4gSWYgYWJzZW50LCB0aGUgdHlwZSBpcyBub3QgYSBnZW5lcmljIGZ1bmN0aW9uIHR5cGUuCiAgRlVOQ1RJT05fVFlQRV9HRU5FUklDX0JPVU5EU19UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIHZvaWQgcmV0dXJuIGluIGZ1bmN0aW9uIHR5cGUgcmVwcmVzZW50YXRpb25zIGluCiAgLy8vIEphdmFTY3JpcHQuCiAgRlVOQ1RJT05fVFlQRV9WT0lEX1JFVFVSTl9UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIHJldHVybiB0eXBlcyBpbiBmdW5jdGlvbiB0eXBlIHJlcHJlc2VudGF0aW9ucyBpbgogIC8vLyBKYXZhU2NyaXB0LgogIEZVTkNUSU9OX1RZUEVfUkVUVVJOX1RZUEVfVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyByZXF1aXJlZCBwYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIHR5cGUgcmVwcmVzZW50YXRpb25zCiAgLy8vIGluIEphdmFTY3JpcHQuCiAgRlVOQ1RJT05fVFlQRV9SRVFVSVJFRF9QQVJBTUVURVJTX1RBRywKCiAgLy8vIE5hbWUgdXNlZCB0byB0YWcgb3B0aW9uYWwgcGFyYW1ldGVycyBpbiBmdW5jdGlvbiB0eXBlIHJlcHJlc2VudGF0aW9ucwogIC8vLyBpbiBKYXZhU2NyaXB0LgogIEZVTkNUSU9OX1RZUEVfT1BUSU9OQUxfUEFSQU1FVEVSU19UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIG5hbWVkIHBhcmFtZXRlcnMgaW4gZnVuY3Rpb24gdHlwZSByZXByZXNlbnRhdGlvbnMgaW4KICAvLy8gSmF2YVNjcmlwdC4KICBGVU5DVElPTl9UWVBFX05BTUVEX1BBUkFNRVRFUlNfVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyBhIEZ1dHVyZU9yIHR5cGUuCiAgRlVUVVJFX09SX1RBRywKCiAgLy8vIE5hbWUgdXNlZCB0byB0YWcgdHlwZSBhcmd1bWVudHMgdHlwZXMgaW4gRnV0dXJlT3IgdHlwZSByZXByZXNlbnRhdGlvbnMgaW4KICAvLy8gSmF2YVNjcmlwdC4KICBGVVRVUkVfT1JfVFlQRV9BUkdVTUVOVF9UQUcsCgogIC8vLyBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgb2YgdGhlIEZ1dHVyZSBjbGFzcy4KICBGVVRVUkVfQ0xBU1NfVFlQRV9OQU1FLAoKICAvLy8gRmllbGQgbmFtZSB1c2VkIGZvciBkZXRlcm1pbmluZyBpZiBhbiBvYmplY3Qgb3IgaXRzIGludGVyY2VwdG9yIGhhcwogIC8vLyBKYXZhU2NyaXB0IGluZGV4aW5nIGJlaGF2aW9yLgogIElTX0lOREVYQUJMRV9GSUVMRF9OQU1FLAoKICAvLy8gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0eXBlIG9mIHRoZSBudWxsIGNsYXNzLgogIE5VTExfQ0xBU1NfVFlQRV9OQU1FLAoKICAvLy8gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgY2xhc3MuCiAgT0JKRUNUX0NMQVNTX1RZUEVfTkFNRSwKCiAgLy8vIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gY2xhc3MuCiAgRlVOQ1RJT05fQ0xBU1NfVFlQRV9OQU1FLAoKICAvLy8gU3RyaW5nIHJlY2lwZSBmb3IgdGhlIFtib29sXSB0eXBlLgogIEJPT0xfUkVDSVBFLAoKICAvLy8gU3RyaW5nIHJlY2lwZSBmb3IgdGhlIFtkb3VibGVdIHR5cGUuCiAgRE9VQkxFX1JFQ0lQRSwKCiAgLy8vIFN0cmluZyByZWNpcGUgZm9yIHRoZSBbaW50XSB0eXBlLgogIElOVF9SRUNJUEUsCgogIC8vLyBTdHJpbmcgcmVjaXBlIGZvciB0aGUgW251bV0gdHlwZS4KICBOVU1fUkVDSVBFLAoKICAvLy8gU3RyaW5nIHJlY2lwZSBmb3IgdGhlIFtTdHJpbmddIHR5cGUuCiAgU1RSSU5HX1JFQ0lQRSwKCiAgLy8vIFByb3BlcnR5IG5hbWUgZm9yIFJ0aS5faXMgZmllbGQuCiAgUlRJX0ZJRUxEX0lTLAp9CgplbnVtIEpzQnVpbHRpbiB7CiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIERhcnQncyBPYmplY3QgY2xhc3MuCiAgLy8vIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHR5cGUgdGVzdHMsIGFzIGluCiAgLy8vCiAgLy8vICAgICB2YXIgY29uc3RydWN0b3IgPSBKU19CVUlMVElOKCcnLCBKc0J1aWx0aW4uZGFydE9iamVjdENvbnN0cnVjdG9yKTsKICAvLy8gICAgIGlmIChKUygnYm9vbCcsICcjIGluc3RhbmNlb2YgIycsIG9iaiwgY29uc3RydWN0b3IpKQogIC8vLyAgICAgICAuLi4KICBkYXJ0T2JqZWN0Q29uc3RydWN0b3IsCgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcnVudGltZSdzIENsb3N1cmUKICAvLy8gY2xhc3MsIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBjbG9zdXJlIG9iamVjdHMuICBUaGlzIGNhbiBiZSB1c2VkIGZvciB0eXBlCiAgLy8vIHRlc3RzLCBhcyBpbgogIC8vLwogIC8vLyAgICAgdmFyIGNvbnN0cnVjdG9yID0gSlNfQlVJTFRJTignJywgSnNCdWlsdGluLmRhcnRDbG9zdXJlQ29uc3RydWN0b3IpOwogIC8vLyAgICAgaWYgKEpTKCdib29sJywgJyMgaW5zdGFuY2VvZiAjJywgb2JqLCBjb25zdHJ1Y3RvcikpCiAgLy8vICAgICAgIC4uLgogIGRhcnRDbG9zdXJlQ29uc3RydWN0b3IsCgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0LWNvbnN0cnVjdG9yIG5hbWUgZ2l2ZW4gYW4gW2lzQ2hlY2tQcm9wZXJ0eV0uCiAgLy8vCiAgLy8vIFRoaXMgcmVsaWVzIG9uIGEgZGV0ZXJtaW5pc3RpYyBlbmNvZGluZyBvZiBpcy1jaGVjayBwcm9wZXJ0aWVzIChmb3IKICAvLy8gZXhhbXBsZSBgJGlzRm9vYCBmb3IgYSBjbGFzcyBgRm9vYCkuIEluIG1pbmlmaWVkIGNvZGUgdGhlIHJldHVybmVkCiAgLy8vIGNsYXNzbmFtZSBpcyB0aGUgbWluaWZpZWQgbmFtZSBvZiB0aGUgY2xhc3MuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdyZXR1cm5zOlN0cmluZztkZXBlbmRzOm5vbmU7ZWZmZWN0czpub25lJywKICAvLy8gICAgICAgICAgICAgICAgSnNCdWlsdGluLmlzQ2hlY2tQcm9wZXJ0eVRvSnNDb25zdHJ1Y3Rvck5hbWUsCiAgLy8vICAgICAgICAgICAgICAgIGlzQ2hlY2tQcm9wZXJ0eSk7CiAgaXNDaGVja1Byb3BlcnR5VG9Kc0NvbnN0cnVjdG9yTmFtZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyBhIGZ1bmN0aW9uIHR5cGUuIFJldHVybnMgZmFsc2UgZm9yCiAgLy8vIHRoZSBvbmUgYEZ1bmN0aW9uYCB0eXBlIHNpbmdsZXRvbi4gKFNlZSBbaXNGdW5jdGlvblR5cGVTaW5nbGV0b25dKS4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ2Jvb2wnLCBKc0J1aWx0aW4uaXNGdW5jdGlvblR5cGUsIG8pCiAgaXNGdW5jdGlvblR5cGUsCgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHR5cGUgaXMgYSBGdXR1cmVPciB0eXBlLgogIC8vLwogIC8vLyAgICAgSlNfQlVJTFRJTignYm9vbCcsIEpzQnVpbHRpbi5pc0Z1dHVyZU9yVHlwZSwgbykKICBpc0Z1dHVyZU9yVHlwZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyB0aGUgYHZvaWRgIHR5cGUuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdib29sJywgSnNCdWlsdGluLmlzVm9pZFR5cGUsIG8pCiAgaXNWb2lkVHlwZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyB0aGUgYGR5bmFtaWNgIHR5cGUuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdib29sJywgSnNCdWlsdGluLmlzRHluYW1pY1R5cGUsIG8pCiAgaXNEeW5hbWljVHlwZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyBhIHR5cGUgYXJndW1lbnQgb2YgYSBqcy1pbnRlcm9wIGNsYXNzCiAgLy8vIG9yIGEgc3VwZXJ0eXBlIG9mIGEganMtaW50ZXJvcCBjbGFzcy4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ2Jvb2wnLCBKc0J1aWx0aW4uaXNKc0ludGVyb3BUeXBlQXJndW1lbnQsIG8pCiAgaXNKc0ludGVyb3BUeXBlQXJndW1lbnQsCgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0LWNvbnN0cnVjdG9yIG5hbWUgZ2l2ZW4gYW4gcnRpIGVuY29kaW5nLgogIC8vLwogIC8vLyAgICAgSlNfQlVJTFRJTignU3RyaW5nJywgSnNCdWlsdGluLnJhd1J0aVRvSnNDb25zdHJ1Y3Rvck5hbWUsIHJ0aSkKICByYXdSdGlUb0pzQ29uc3RydWN0b3JOYW1lLAoKICAvLy8gUmV0dXJucyB0aGUgcmF3IHJ1bnRpbWUgdHlwZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiBUaGUgZ2l2ZW4gYXJndW1lbnQKICAvLy8gW29dIHNob3VsZCBiZSB0aGUgaW50ZXJjZXB0b3IgKGZvciBub24tRGFydCBvYmplY3RzKS4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJycsIEpzQnVpbHRpbi5yYXdSdW50aW1lVHlwZSwgbykKICByYXdSdW50aW1lVHlwZSwKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBhIHN1YnR5cGUgb2Ygb3RoZXIuCiAgLy8vCiAgLy8vIFRoZSBhcmd1bWVudCBgb3RoZXJgIGlzIHRoZSBuYW1lIG9mIHRoZSBwb3RlbnRpYWwgc3VwZXJ0eXBlLiBJdCBpcwogIC8vLyBjb21wdXRlZCBieSBgcnVudGltZVR5cGVUb1N0cmluZ2A7CiAgLy8vCiAgLy8vICpUaGUgYG90aGVyYCBuYW1lIG11c3QgYmUgcGFzc2VkIGluIGJlZm9yZSB0aGUgYHR5cGVgLioKICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ3JldHVybnM6Ym9vbDtlZmZlY3RzOm5vbmU7ZGVwZW5kczpub25lJywKICAvLy8gICAgICAgICAgICAgICAgSnNCdWlsdGluLmlzU3VidHlwZSwgb3RoZXIsIHR5cGUpOwogIGlzU3VidHlwZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBlcXVhbHMgdGhlIHR5cGUgZ2l2ZW4gYXMgc2Vjb25kCiAgLy8vIGFyZ3VtZW50LiBVc2UgdGhlIEpTX0dFVF9OQU1FIGhlbHBlcnMgdG8gZ2V0IHRoZSB0eXBlIHJlcHJlc2VudGF0aW9uCiAgLy8vIGZvciB2YXJpb3VzIERhcnQgY2xhc3Nlcy4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ3JldHVybnM6Ym9vbDtlZmZlY3RzOm5vbmU7ZGVwZW5kczpub25lJywKICAvLy8gICAgICAgICAgICAgICAgSnNCdWlsdGluLmlzRnVuY3Rpb25UeXBlTGl0ZXJhbCwgdHlwZSwgbmFtZSk7CiAgaXNHaXZlblR5cGVSdGksCgogIC8vLyBSZXR1cm5zIHRoZSBtZXRhZGF0YSBvZiB0aGUgZ2l2ZW4gW2luZGV4XS4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ3JldHVybnM6dmFyO2VmZmVjdHM6bm9uZTtkZXBlbmRzOm5vbmUnLAogIC8vLyAgICAgICAgICAgICAgICBKc0J1aWx0aW4uZ2V0TWV0YWRhdGEsIGluZGV4KTsKICBnZXRNZXRhZGF0YSwKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGdpdmVuIFtpbmRleF0uCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdyZXR1cm5zOnZhcjtlZmZlY3RzOm5vbmU7ZGVwZW5kczpub25lJywKICAvLy8gICAgICAgICAgICAgICAgSnNCdWlsdGluLmdldFR5cGUsIGluZGV4KTsKICBnZXRUeXBlLAp9CgovLy8gTmFtZXMgb2YgZmllbGRzIG9mIHRoZSBSdGkgVW5pdmVyc2Ugb2JqZWN0LgpjbGFzcyBSdGlVbml2ZXJzZUZpZWxkTmFtZXMgewogIHN0YXRpYyBTdHJpbmcgZXZhbENhY2hlID0gJ2VDJzsKICBzdGF0aWMgU3RyaW5nIHR5cGVSdWxlcyA9ICd0Uic7CiAgc3RhdGljIFN0cmluZyBzaGFyZWRFbXB0eUFycmF5ID0gJ3NFQSc7Cn0KgcYATk48AUsOBFAjBEghAUUETkwpBEwgOAFJDQROSAROOARMIDQBSxcESRI8ATMETT48ATIETAwdAUsUBFAXAUAETCsuAUEETiEzAUMETEsEQyYBTkwUBC4xAU5LIARKTS0ELh4BQQRNGAQuSi0pATkESksELkotIgFQMjcBUBMETgo4AToESSgBOwRRTzEEPDcBOARQBDwvATAEUARBTk9KKQQ8MwEeBEpINQQ8NwFOBDwnAUYRBDwxAVAjBDwETFAhNAEtBDslAU0TBEg+BCwETFAhIwFRLAFQQxwENSIBLAQ1LAEtBDUbASUESAQ1HwEzBDUZAS9QERERDxAQEBAQEBIPHR8bFhwBSBYBRRIBTCoMASEPASgVAVFPTCQBRxIhAUgSIQFMFSkBTBUpAUwSJgEoEQFQEh8BPRoBSiQbATsYAT0aAT8cASkPASsRASgOASgOASsRAScQAgERSy0GTT4QGQFMTxMGTj4QGgFKBkpJMwZBQycmAUtKBjoSATkGOhIBOQY2DgE8BjkRAU4sBkMbAUUGSR0BSzwGNhIBPAZJKQY+Bj84DQFFSyAGP0MSATEGPjQPAS0GPjALAgEwHiIiKgIBLXBhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvZW1iZWRkZWRfbmFtZXMuZGFydCxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9uYXRpdmUvanMuZGFydKRtLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2lkZV9lZmZlY3RzLmRhcnQnIHNob3cgU2lkZUVmZmVjdHM7CmltcG9ydCAnYmVoYXZpb3IuZGFydCc7CgpjbGFzcyBIYXNDYXB0dXJlZFBsYWNlaG9sZGVycyBleHRlbmRzIGpzLkJhc2VWaXNpdG9yIHsKICBIYXNDYXB0dXJlZFBsYWNlaG9sZGVycy5fKCk7CgogIHN0YXRpYyBib29sIGNoZWNrKGpzLk5vZGUgbm9kZSkgewogICAgSGFzQ2FwdHVyZWRQbGFjZWhvbGRlcnMgdmlzaXRvciA9IG5ldyBIYXNDYXB0dXJlZFBsYWNlaG9sZGVycy5fKCk7CiAgICBub2RlLmFjY2VwdCh2aXNpdG9yKTsKICAgIHJldHVybiB2aXNpdG9yLmZvdW5kOwogIH0KCiAgaW50IGVuY2xvc2luZ0Z1bmN0aW9ucyA9IDA7CiAgYm9vbCBmb3VuZCA9IGZhbHNlOwoKICBAb3ZlcnJpZGUKICB2aXNpdEZ1bihqcy5GdW4gbm9kZSkgewogICAgKytlbmNsb3NpbmdGdW5jdGlvbnM7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICAtLWVuY2xvc2luZ0Z1bmN0aW9uczsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShqcy5JbnRlcnBvbGF0ZWROb2RlIG5vZGUpIHsKICAgIGlmIChlbmNsb3NpbmdGdW5jdGlvbnMgPiAwKSB7CiAgICAgIGZvdW5kID0gdHJ1ZTsKICAgIH0KICB9Cn0KCmNsYXNzIFNpZGVFZmZlY3RzVmlzaXRvciBleHRlbmRzIGpzLkJhc2VWaXNpdG9yIHsKICBmaW5hbCBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0czsKICBTaWRlRWZmZWN0c1Zpc2l0b3IodGhpcy5zaWRlRWZmZWN0cyk7CgogIHZvaWQgdmlzaXQoanMuTm9kZSBub2RlKSB7CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihqcy5MaXRlcmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbFN0YXRlbWVudChqcy5MaXRlcmFsU3RhdGVtZW50IG5vZGUpIHsKICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc3NpZ25tZW50KGpzLkFzc2lnbm1lbnQgbm9kZSkgewogICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCk7CiAgICBzaWRlRWZmZWN0cy5zZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpOwogICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luZGV4KCk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYWxsKGpzLkNhbGwgbm9kZSkgewogICAgc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJpbmFyeShqcy5CaW5hcnkgbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRocm93KGpzLlRocm93IG5vZGUpIHsKICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogSW5jb3Jwb3JhdGUgYSBtYXlUaHJvdyBmbGFnIGluIHRoZQogICAgLy8gW1NpZGVFZmZlY3RzXSBjbGFzcy4KICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmV3KGpzLk5ldyBub2RlKSB7CiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJlZml4KGpzLlByZWZpeCBub2RlKSB7CiAgICBpZiAobm9kZS5vcCA9PSAnZGVsZXRlJykgewogICAgICBzaWRlRWZmZWN0cy5zZXRDaGFuZ2VzU3RhdGljUHJvcGVydHkoKTsKICAgICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKTsKICAgICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luZGV4KCk7CiAgICB9CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVVc2UoanMuVmFyaWFibGVVc2Ugbm9kZSkgewogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBvc3RmaXgoanMuUG9zdGZpeCBub2RlKSB7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QWNjZXNzKGpzLlByb3BlcnR5QWNjZXNzIG5vZGUpIHsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluZGV4U3RvcmUoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KfQoKLy8vIFRocm93QmVoYXZpb3JWaXNpdG9yIGdlbmVyYXRlcyBhIE5hdGl2ZVRocm93QmVoYXZpb3IgZGVzY3JpYmluZyB0aGUKLy8vIGV4Y2VwdGlvbiBiZWhhdmlvciBvZiBhIEphdmFTY3JpcHQgZXhwcmVzc2lvbi4KLy8vCi8vLyBUaGUgcmVzdWx0IGlzIHNlbWktY29uc2VydmF0aXZlLCBnaXZpbmcgcmVhc29uYWJsZSByZXN1bHRzIGZvciBtYW55IHNpbXBsZQovLy8gSlMgZnJhZ21lbnRzLiBUaGUgbm9uLWNvbnNlcnZhdGl2ZSBwYXJ0IGlzIHRoZSBhc3N1bXB0aW9uIHRoYXQgYmluYXJ5Ci8vLyBvcGVyYXRvcnMgYXJlIHVzZWQgb24gJ2dvb2QnIG9wZXJhbmRzIHRoYXQgZG8gbm90IGZvcmNlIGFyYml0cmFyeSBjb2RlIHRvIGJlCi8vLyBleGVjdXRlZCB2aWEgY29udmVyc2lvbnMgKHZhbHVlT2YoKSBhbmQgdG9TdHJpbmcoKSBtZXRob2RzKS4KLy8vCi8vLyBJbiBtYW55IGNhc2VzIGEgSlMgZnJhZ21lbnQgaGFzIG1vcmUgcHJlY2lzZSBiZWhhdmlvci4gSW4gdGhlc2UgY2FzZXMgdGhlCi8vLyBiZWhhdmlvciBzaG91bGQgYmUgZGVzY3JpYmVkIGFzIGEgcHJvcGVydHkgb2YgdGhlIEpTIGZyYWdtZW50LiBGb3IgZXhhbXBsZSwKLy8vIE9iamVjdC5rZXlzKCMpIGhhcyBhIFR5cGVFcnJvciBvbiBudWxsIC8gdW5kZWZpbmVkLCB3aGljaCBjYW4gb25seSBiZSBrbm93bgovLy8gaW4gdGhlIGNhbGxpbmcgY29udGV4dC4KLy8vCmNsYXNzIFRocm93QmVoYXZpb3JWaXNpdG9yIGV4dGVuZHMganMuQmFzZVZpc2l0b3I8TmF0aXZlVGhyb3dCZWhhdmlvcj4gewogIFRocm93QmVoYXZpb3JWaXNpdG9yKCk7CgogIE5hdGl2ZVRocm93QmVoYXZpb3IgYW5hbHl6ZShqcy5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdChub2RlKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBjb21iaW5lZCBiZWhhdmlvciBvZiBzZXF1ZW50aWFsIGV4ZWN1dGlvbiBvZiBjb2RlIGhhdmluZwogIC8vLyBiZWhhdmlvciBbZmlyc3RdIGZvbGxvd2VkIGJ5IGNvZGUgaGF2aW5nIGJlaGF2aW9yIFtzZWNvbmRdLgogIHN0YXRpYyBOYXRpdmVUaHJvd0JlaGF2aW9yIHNlcXVlbmNlKAogICAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIGZpcnN0LCBOYXRpdmVUaHJvd0JlaGF2aW9yIHNlY29uZCkgewogICAgcmV0dXJuIGZpcnN0LnRoZW4oc2Vjb25kKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBjb21iaW5lZCBiZWhhdmlvciBvZiBhIGNob2ljZSBiZXR3ZWVuIHR3byBwYXRocyB3aXRoIGJlaGF2aW9ycwogIC8vLyBbZmlyc3RdIGFuZCBbc2Vjb25kXS4KICBzdGF0aWMgTmF0aXZlVGhyb3dCZWhhdmlvciBjaG9pY2UoCiAgICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgZmlyc3QsIE5hdGl2ZVRocm93QmVoYXZpb3Igc2Vjb25kKSB7CiAgICByZXR1cm4gZmlyc3Qub3Ioc2Vjb25kKTsKICB9CgogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXQoanMuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0Tm9kZShqcy5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRMaXRlcmFsKGpzLkxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVI7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihqcy5JbnRlcnBvbGF0ZWROb2RlIG5vZGUpIHsKICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdEludGVycG9sYXRlZFNlbGVjdG9yKGpzLkludGVycG9sYXRlZE5vZGUgbm9kZSkgewogICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVI7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0QXJyYXlJbml0aWFsaXplcihqcy5BcnJheUluaXRpYWxpemVyIG5vZGUpIHsKICAgIHJldHVybiBub2RlLmVsZW1lbnRzLm1hcCh2aXNpdCkuZm9sZChOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSLCBzZXF1ZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0QXJyYXlIb2xlKGpzLkFycmF5SG9sZSBub2RlKSB7CiAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUjsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRPYmplY3RJbml0aWFsaXplcihqcy5PYmplY3RJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5wcm9wZXJ0aWVzLm1hcCh2aXNpdCkuZm9sZChOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSLCBzZXF1ZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0UHJvcGVydHkoanMuUHJvcGVydHkgbm9kZSkgewogICAgcmV0dXJuIHNlcXVlbmNlKHZpc2l0KG5vZGUubmFtZSksIHZpc2l0KG5vZGUudmFsdWUpKTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRBc3NpZ25tZW50KGpzLkFzc2lnbm1lbnQgbm9kZSkgewogICAgLy8gVE9ETyhzcmEpOiBDYW4gd2UgbWFrZSAiIy5wID0gIyIgYmUgbnVsbCgxKT8KICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRDYWxsKGpzLkNhbGwgbm9kZSkgewogICAganMuRXhwcmVzc2lvbiB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGlmICh0YXJnZXQgaXMganMuUHJvcGVydHlBY2Nlc3MgJiYgX2lzRmlyc3RJbnRlcnBvbGF0ZWRQcm9wZXJ0eSh0YXJnZXQpKSB7CiAgICAgIC8vICMuZiguLi4pOiBFdmFsdWF0ZSBzZWxlY3RvciAnZicsIGRlcmVmZXJlbmNlLCBldmFsdWF0ZSBhcmd1bWVudHMsIGFuZAogICAgICAvLyBmaW5hbGx5IGNhbGwgdGFyZ2V0LgogICAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIHJlc3VsdCA9CiAgICAgICAgICBzZXF1ZW5jZSh2aXNpdCh0YXJnZXQuc2VsZWN0b3IpLCBOYXRpdmVUaHJvd0JlaGF2aW9yLk5VTExfTlNNKTsKICAgICAgZm9yIChqcy5FeHByZXNzaW9uIGFyZ3VtZW50IGluIG5vZGUuYXJndW1lbnRzKSB7CiAgICAgICAgcmVzdWx0ID0gc2VxdWVuY2UocmVzdWx0LCB2aXNpdChhcmd1bWVudCkpOwogICAgICB9CiAgICAgIHJldHVybiBzZXF1ZW5jZShyZXN1bHQsIE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZKTsgLy8gVGFyZ2V0IG1heSB0aHJvdy4KICAgIH0KICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXROZXcoanMuTmV3IG5vZGUpIHsKICAgIC8vIFRPRE8oc3JhKTogYG5ldyBBcnJheSh4KWAgd2hlcmUgYHhgIGlzIGEgc21hbGwgbnVtYmVyLgogICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdEJpbmFyeShqcy5CaW5hcnkgbm9kZSkgewogICAgTmF0aXZlVGhyb3dCZWhhdmlvciBsZWZ0ID0gdmlzaXQobm9kZS5sZWZ0KTsKICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgcmlnaHQgPSB2aXNpdChub2RlLnJpZ2h0KTsKICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgICAvLyBXZSBtYWtlIHRoZSBub24tY29uc2VydmF0aXZlIGFzc3VtcHRpb24gdGhhdCB0aGVzZSBvcGVyYXRpb25zIGFyZSBub3QKICAgICAgLy8gdXNlZCBpbiB3YXlzIHRoYXQgZm9yY2UgY2FsbGluZyBhcmJpdHJhcnkgY29kZSB2aWEgdmFsdWVPZiBvcgogICAgICAvLyB0b1N0cmluZygpLgogICAgICBjYXNlICIqIjoKICAgICAgY2FzZSAiLyI6CiAgICAgIGNhc2UgIiUiOgogICAgICBjYXNlICIrIjoKICAgICAgY2FzZSAiLSI6CiAgICAgIGNhc2UgIjw8IjoKICAgICAgY2FzZSAiPj4iOgogICAgICBjYXNlICI+Pj4iOgogICAgICBjYXNlICI8IjoKICAgICAgY2FzZSAiPiI6CiAgICAgIGNhc2UgIjw9IjoKICAgICAgY2FzZSAiPj0iOgogICAgICBjYXNlICI9PSI6CiAgICAgIGNhc2UgIj09PSI6CiAgICAgIGNhc2UgIiE9IjoKICAgICAgY2FzZSAiIT09IjoKICAgICAgY2FzZSAiJiI6CiAgICAgIGNhc2UgIl4iOgogICAgICBjYXNlICJ8IjoKICAgICAgICByZXR1cm4gc2VxdWVuY2UobGVmdCwgcmlnaHQpOwoKICAgICAgY2FzZSAnLCc6CiAgICAgICAgcmV0dXJuIHNlcXVlbmNlKGxlZnQsIHJpZ2h0KTsKCiAgICAgIGNhc2UgIiYmIjoKICAgICAgY2FzZSAifHwiOgogICAgICAgIHJldHVybiBjaG9pY2UobGVmdCwgc2VxdWVuY2UobGVmdCwgcmlnaHQpKTsKCiAgICAgIGNhc2UgImluc3RhbmNlb2YiOgogICAgICBjYXNlICJpbiI6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdFRocm93KGpzLlRocm93IG5vZGUpIHsKICAgIHJldHVybiBzZXF1ZW5jZSh2aXNpdChub2RlLmV4cHJlc3Npb24pLCBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0UHJlZml4KGpzLlByZWZpeCBub2RlKSB7CiAgICBpZiAobm9kZS5vcCA9PSAndHlwZW9mJyAmJiBub2RlLmFyZ3VtZW50IGlzIGpzLlZhcmlhYmxlVXNlKQogICAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUjsKICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgcmVzdWx0ID0gdmlzaXQobm9kZS5hcmd1bWVudCk7CiAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgY2FzZSAnKyc6CiAgICAgIGNhc2UgJy0nOgogICAgICBjYXNlICchJzoKICAgICAgY2FzZSAnfic6CiAgICAgIGNhc2UgJ3ZvaWQnOgogICAgICBjYXNlICd0eXBlb2YnOgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdFZhcmlhYmxlVXNlKGpzLlZhcmlhYmxlVXNlIG5vZGUpIHsKICAgIC8vIFdlIGNvdWxkIGdldCBhIFJlZmVyZW5jZUVycm9yIHVubGVzcyB0aGUgdmFyaWFibGUgaXMgaW4gc2NvcGUuIFRoZSBBU1QKICAgIC8vIGNvdWxkIGRpc3Rpbmd1aXNoIGluLXNjb3BlIGFuZCBvdXQtb2Ygc2NvcGUgcmVmZXJlbmNlcy4gRm9yIEpTIGZyYWdtZW50cywKICAgIC8vIHRoZSBvbmx5IHVzZSBvZiBWYXJpYWJsZVVzZSBzaG91bGQgYmUgZm9yIGdsb2JhbCByZWZlcmVuY2VzLiBDZXJ0YWluCiAgICAvLyBnbG9iYWwgbmFtZXMgYXJlIGFsbW9zdCBjZXJ0YWlubHkgbm90IHJlZmVyZW5jZSBlcnJvcnMsIGUuZyAnQXJyYXknLgogICAgc3dpdGNoIChub2RlLm5hbWUpIHsKICAgICAgY2FzZSAnQXJyYXknOgogICAgICBjYXNlICdNYXRoJzoKICAgICAgY2FzZSAnT2JqZWN0JzoKICAgICAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUjsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5NQVk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0QWNjZXNzKGpzLlByb3BlcnR5QWNjZXNzIG5vZGUpIHsKICAgIGpzLk5vZGUgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgTmF0aXZlVGhyb3dCZWhhdmlvciBmaXJzdCA9IHZpc2l0KHJlY2VpdmVyKTsKICAgIE5hdGl2ZVRocm93QmVoYXZpb3Igc2Vjb25kID0gdmlzaXQobm9kZS5zZWxlY3Rvcik7CgogICAgaWYgKF9pc0ZpcnN0SW50ZXJwb2xhdGVkUHJvcGVydHkobm9kZSkpIHsKICAgICAgZmlyc3QgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLk5VTExfTlNNOwogICAgfSBlbHNlIHsKICAgICAgZmlyc3QgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICAgIH0KCiAgICByZXR1cm4gc2VxdWVuY2UoZmlyc3QsIHNlY29uZCk7CiAgfQoKICBib29sIF9pc0ZpcnN0SW50ZXJwb2xhdGVkUHJvcGVydHkoanMuUHJvcGVydHlBY2Nlc3Mgbm9kZSkgewogICAganMuTm9kZSByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICBpZiAocmVjZWl2ZXIgaXMganMuSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiAmJgogICAgICAgIHJlY2VpdmVyLmlzUG9zaXRpb25hbCAmJgogICAgICAgIHJlY2VpdmVyLm5hbWVPclBvc2l0aW9uID09IDApIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CoFUAE5OPAEeORgBNx8BJEcaGgQBHhYBDBoaHhoEAQw0IhQGBAIBMiEoAR0XBAEMOyUpHgQBDDklKR4EAQwtLC4jHgQBDEUeBAEMISUpHgQBDCUeBAEMIzscJQQBDB8lKR4EAQwlHy4wJQYeBAEMLzMEAQwnHgQBDC0qNTMeBAIBSDMET0pRQQROUFAcBEkaAS4YBAFLQic/HwQBURwlPx0EASweBAEMMCQEAQw2JgQBDE4mBAEMTCYEAQxITwQBDDomBAEMSlEEAQw4OgQBDDw0JAQBDDAoT08eI0o3NAhNBiQEAQwuPiQEAQw0MTMXT0cVEBAQEBARERIQEBERERIREhAQECYBECYBERE0ARkRDygGBAEMMkYEAQw0QCg3FxAQEBATFRcPKAYEAQw+TlFMTBkUExUqDygGBAEMPCYxNwEuLA0nBgEkBAE+JjEhKBMGEgQCASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9uYXRpdmUvanMuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9ydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydLnOLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAndXRpbC5kYXJ0JzsKCi8vLyBFbnVtIGZvciByZWNvZ25pemVkIHVzZSBraW5kcyBvZiBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4KZW51bSBSdW50aW1lVHlwZVVzZUtpbmQgewogIC8vLyBVbmtub3duIHVzZSBvZiBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4gVGhpcyBpcyB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgdGhlCiAgLy8vIHVzYWdlIGRpZG4ndCBtYXRjaCBhbnkgb2YgdGhlIHJlY29nbml6ZWQgcGF0dGVybnMuCiAgdW5rbm93biwKCiAgLy8vIGBPYmplY3QucnVudGltZVR5cGVgIHVzZWQgaW4gYSBwYXR0ZXJuIGxpa2UKICAvLy8gYGEucnVudGltZVR5cGUgPT0gYi5ydW50aW1lVHlwZWAuCiAgZXF1YWxzLAoKICAvLy8gYE9iamVjdC5ydW50aW1lVHlwZWAgdXNlZCBpbiBhIHBhdHRlcm4gbGlrZSBgJyR7ZS5ydW50aW1lVHlwZX0nYCBvcgogIC8vLyBgZS5ydW50aW1lVHlwZS50b1N0cmluZygpYC4KICBzdHJpbmcsCn0KCi8vLyBEYXRhIG9iamVjdCB1c2UgZm9yIGNvbXB1dGluZyBzdGF0aWMgdHlwZSBpbmZvcm1hdGlvbiBvbiB1c2VzIG9mCi8vLyBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4KY2xhc3MgUnVudGltZVR5cGVVc2VEYXRhIHsKICAvLy8gVGhlIHVzZSBraW5kIG9mIGBPYmplY3QucnVudGltZVR5cGVgLgogIGZpbmFsIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kOwoKICAvLy8gVGhlIHByb3BlcnR5IGdldCBmb3IgdGhlIGxlZnQgKG9yIHNpbmdsZSkgb2NjdXJyZW5jZSBvZiBgLnJ1bnRpbWVUeXBlYC4KICBmaW5hbCBpci5Qcm9wZXJ0eUdldCBsZWZ0UnVudGltZVR5cGVFeHByZXNzaW9uOwoKICAvLy8gVGhlIHJlY2VpdmVyIGV4cHJlc3Npb24uCiAgZmluYWwgaXIuRXhwcmVzc2lvbiByZWNlaXZlcjsKCiAgLy8vIFRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgcmVjZWl2ZXIgZXhwcmVzc2lvbi4gVGhpcyBpcyBzZXQgaW4gdGhlIHN0YXRpYyB0eXBlCiAgLy8vIHZpc2l0b3IuCiAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwoKICAvLy8gVGhlIHByb3BlcnR5IGdldCBmb3IgdGhlIHJpZ2h0IG9jY3VycmVuY2Ugb2YgYC5ydW50aW1lVHlwZWAgd2hlbiBba2luZF0KICAvLy8gaXMgYFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHNgLgogIGZpbmFsIGlyLlByb3BlcnR5R2V0IHJpZ2h0UnVudGltZVR5cGVFeHByZXNzaW9uOwoKICAvLy8gVGhlIGFyZ3VtZW50IGV4cHJlc3Npb24gaWYgW2tpbmRdIGlzIGBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzYC4KICBmaW5hbCBpci5FeHByZXNzaW9uIGFyZ3VtZW50OwoKICAvLy8gVGhlIHN0YXRpYyB0eXBlIG9mIHRoZSBhcmd1bWVudCBleHByZXNzaW9uLiBUaGlzIGlzIHNldCBpbiB0aGUgc3RhdGljIHR5cGUKICAvLy8gdmlzaXRvci4KICBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGU7CgogIFJ1bnRpbWVUeXBlVXNlRGF0YSh0aGlzLmtpbmQsIHRoaXMubGVmdFJ1bnRpbWVUeXBlRXhwcmVzc2lvbiwgdGhpcy5yZWNlaXZlciwKICAgICAgdGhpcy5yaWdodFJ1bnRpbWVUeXBlRXhwcmVzc2lvbiwgdGhpcy5hcmd1bWVudCk7CgogIGJvb2wgZ2V0IGlzQ29tcGxldGUgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnVua25vd246CiAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzoKICAgICAgICByZXR1cm4gcmVjZWl2ZXJUeXBlICE9IG51bGw7CiAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczoKICAgICAgICByZXR1cm4gcmVjZWl2ZXJUeXBlICE9IG51bGwgJiYgYXJndW1lbnRUeXBlICE9IG51bGw7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBSdW50aW1lVHlwZVVzZUtpbmQgJGtpbmQuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIlJ1bnRpbWVUeXBlVXNlRGF0YShraW5kPSRraW5kLCIKICAgICAgICAicmVjZWl2ZXJHZXQ9JGxlZnRSdW50aW1lVHlwZUV4cHJlc3Npb24scmVjZWl2ZXI9JHJlY2VpdmVyLCIKICAgICAgICAicmVjZWl2ZXJUeXBlPSRyZWNlaXZlclR5cGUsYXJndW1lbnRHZXQ9JHJpZ2h0UnVudGltZVR5cGVFeHByZXNzaW9uLCIKICAgICAgICAiYXJndW1lbnQ9JGFyZ3VtZW50LGFyZ3VtZW50VHlwZT0kYXJndW1lbnRUeXBlKSI7CiAgfQp9CgovLy8gQ29tcHV0ZXMgdGhlIFtSdW50aW1lVHlwZVVzZURhdGFdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGBlLnJ1bnRpbWVUeXBlYAovLy8gW25vZGVdLgovLy8KLy8vIFtjYWNoZV0gaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBvbmx5IG9uZSBbUnVudGltZVR5cGVVc2VEYXRhXSBvYmplY3QgaXMKLy8vIGNyZWF0ZWQgcGVyIGNhc2UsIGV2ZW4gZm9yIHRoZSBgPT1gIGNhc2UuClJ1bnRpbWVUeXBlVXNlRGF0YSBjb21wdXRlUnVudGltZVR5cGVVc2UoCiAgICBNYXA8aXIuUHJvcGVydHlHZXQsIFJ1bnRpbWVUeXBlVXNlRGF0YT4gY2FjaGUsIGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICBSdW50aW1lVHlwZVVzZURhdGEgcmVjZWl2ZXJEYXRhID0gY2FjaGVbbm9kZV07CiAgaWYgKHJlY2VpdmVyRGF0YSAhPSBudWxsKSByZXR1cm4gcmVjZWl2ZXJEYXRhOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW25vZGVdIGlzIG9mIHRoZSBmb3JtIGBlLnJ1bnRpbWVUeXBlYC4KICBib29sIGlzR2V0UnVudGltZVR5cGUoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUgaXMgaXIuUHJvcGVydHlHZXQgJiYgbm9kZS5uYW1lLm5hbWUgPT0gSWRlbnRpZmllcnMucnVudGltZVR5cGVfOwogIH0KCiAgLy8vIFJldHVybnMgW25vZGVdIGlmIFtub2RlXSBpcyBvZiB0aGUgZm9ybSBgZS5ydW50aW1lVHlwZWAgYW5kIGBudWxsYAogIC8vLyBvdGhlcndpc2UuCiAgaXIuUHJvcGVydHlHZXQgYXNHZXRSdW50aW1lVHlwZShpci5UcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gaXNHZXRSdW50aW1lVHlwZShub2RlKSA/IG5vZGUgOiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtub2RlXSBpcyBvZiB0aGUgZm9ybSBgZS50b1N0cmluZygpYC4KICBib29sIGlzSW52b2tlVG9TdHJpbmcoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUgaXMgaXIuTWV0aG9kSW52b2NhdGlvbiAmJiBub2RlLm5hbWUubmFtZSA9PSAndG9TdHJpbmcnOwogIH0KCiAgYXNzZXJ0KGlzR2V0UnVudGltZVR5cGUobm9kZSkpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTcGVjaWFsLWNhc2UgYHRoaXMucnVudGltZVR5cGVgLgogIGlyLlByb3BlcnR5R2V0IHJlY2VpdmVyR2V0OwogIGlyLkV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgaXIuUHJvcGVydHlHZXQgYXJndW1lbnRHZXQ7CiAgaXIuRXhwcmVzc2lvbiBhcmd1bWVudDsKICBSdW50aW1lVHlwZVVzZUtpbmQga2luZDsKCiAgaWYgKG5vZGUucmVjZWl2ZXIgaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgbm9kZS5wYXJlbnQgaXMgaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uICYmCiAgICAgIG5vZGUucGFyZW50LnBhcmVudCBpcyBpci5MZXQpIHsKICAgIE51bGxBd2FyZUV4cHJlc3Npb24gbnVsbEF3YXJlID0gZ2V0TnVsbEF3YXJlRXhwcmVzc2lvbihub2RlLnBhcmVudC5wYXJlbnQpOwogICAgaWYgKG51bGxBd2FyZSAhPSBudWxsKSB7CiAgICAgIC8vIFRoZSBub2RlIGlzIG9mIHRoZSBmb3JtOgogICAgICAvLwogICAgICAvLyAgICAgbGV0ICN0MSA9IGUgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlCiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgoKICAgICAgaWYgKG51bGxBd2FyZS5wYXJlbnQgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiAmJgogICAgICAgICAgbnVsbEF3YXJlLnBhcmVudC5wYXJlbnQgaXMgaXIuTGV0KSB7CiAgICAgICAgTnVsbEF3YXJlRXhwcmVzc2lvbiBvdXRlciA9CiAgICAgICAgICAgIGdldE51bGxBd2FyZUV4cHJlc3Npb24obnVsbEF3YXJlLnBhcmVudC5wYXJlbnQpOwogICAgICAgIGlmIChvdXRlciAhPSBudWxsICYmCiAgICAgICAgICAgIG91dGVyLnJlY2VpdmVyID09IG51bGxBd2FyZS5sZXQgJiYKICAgICAgICAgICAgaXNJbnZva2VUb1N0cmluZyhvdXRlci5leHByZXNzaW9uKSkgewogICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgICAgZT8ucnVudGltZVR5cGU/LnRvU3RyaW5nKCkKICAgICAgICAgIC8vICAgICAgICBeCiAgICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICAgIGxldCAjdDIgPSAobGV0ICN0MSA9IGUgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgIC8vICAgICAgICBpbiAjdDIgPT0gbnVsbCA/IG51bGwgOiAjdDIudG9TdHJpbmcoKQogICAgICAgICAgLy8KICAgICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOwogICAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG51bGxBd2FyZS5wYXJlbnQgaXMgaXIuTWV0aG9kSW52b2NhdGlvbikgewogICAgICAgIGlyLk1ldGhvZEludm9jYXRpb24gbWV0aG9kSW52b2NhdGlvbiA9IG51bGxBd2FyZS5wYXJlbnQ7CiAgICAgICAgaWYgKG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIgPT0gbnVsbEF3YXJlLmxldCAmJgogICAgICAgICAgICBtZXRob2RJbnZvY2F0aW9uLm5hbWUubmFtZSA9PSAnPT0nKSB7CiAgICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgICAgLy8KICAgICAgICAgIC8vICBlMD8ucnVudGltZVR5cGUgPT0gb3RoZXIKICAgICAgICAgIGlyLlByb3BlcnR5R2V0IG90aGVyR2V0UnVudGltZVR5cGUgPQogICAgICAgICAgICAgIGFzR2V0UnVudGltZVR5cGUobWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCk7CiAgICAgICAgICBpZiAob3RoZXJHZXRSdW50aW1lVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vICAgICBlMD8ucnVudGltZVR5cGUgPT0gZTEucnVudGltZVR5cGUKICAgICAgICAgICAgLy8gICAgICAgICBeCiAgICAgICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIChsZXQgI3QxID0gZTAgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICAgICAvLyAgICAgICAgLj09KGUxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIHJlY2VpdmVyR2V0ID0gbm9kZTsKICAgICAgICAgICAgYXJndW1lbnQgPSBvdGhlckdldFJ1bnRpbWVUeXBlLnJlY2VpdmVyOwogICAgICAgICAgICBhcmd1bWVudEdldCA9IG1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3Q7CiAgICAgICAgICB9CgogICAgICAgICAgTnVsbEF3YXJlRXhwcmVzc2lvbiBvdGhlck51bGxBd2FyZSA9IGdldE51bGxBd2FyZUV4cHJlc3Npb24oCiAgICAgICAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCk7CiAgICAgICAgICBpZiAob3RoZXJOdWxsQXdhcmUgIT0gbnVsbCAmJgogICAgICAgICAgICAgIGlzR2V0UnVudGltZVR5cGUob3RoZXJOdWxsQXdhcmUuZXhwcmVzc2lvbikpIHsKICAgICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIGUwPy5ydW50aW1lVHlwZSA9PSBlMT8ucnVudGltZVR5cGUKICAgICAgICAgICAgLy8gICAgICAgICBeCiAgICAgICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIChsZXQgI3QxID0gZTAgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICAgICAvLyAgICAgICAgIC49PShsZXQgI3QyID0gZTEgaW4gI3QyID09IG51bGwgPyBudWxsIDogI3QyLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLwogICAgICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIHJlY2VpdmVyR2V0ID0gbm9kZTsKICAgICAgICAgICAgYXJndW1lbnQgPSBvdGhlck51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICAgICAgYXJndW1lbnRHZXQgPSBvdGhlck51bGxBd2FyZS5leHByZXNzaW9uOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNJbnZva2VUb1N0cmluZyhudWxsQXdhcmUucGFyZW50KSkgewogICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgICAgZT8ucnVudGltZVR5cGUudG9TdHJpbmcoKQogICAgICAgICAgLy8gICAgICAgIF4KICAgICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgICAgKGxldCAjdDEgPSBlIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICAgLy8gICAgICAgICAudG9TdHJpbmcoKQogICAgICAgICAgLy8KICAgICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOwogICAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG51bGxBd2FyZS5wYXJlbnQgaXMgaXIuQXJndW1lbnRzICYmCiAgICAgICAgICBudWxsQXdhcmUucGFyZW50LnBhcmVudCBpcyBpci5NZXRob2RJbnZvY2F0aW9uKSB7CiAgICAgICAgaXIuTWV0aG9kSW52b2NhdGlvbiBtZXRob2RJbnZvY2F0aW9uID0gbnVsbEF3YXJlLnBhcmVudC5wYXJlbnQ7CiAgICAgICAgaWYgKG1ldGhvZEludm9jYXRpb24ubmFtZS5uYW1lID09ICc9PScgJiYKICAgICAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCA9PSBudWxsQXdhcmUubGV0KSB7CiAgICAgICAgICAvLyBbbnVsbEF3YXJlXSBpcyB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mID09LgoKICAgICAgICAgIGlyLlByb3BlcnR5R2V0IG90aGVyR2V0UnVudGltZVR5cGUgPQogICAgICAgICAgICAgIGFzR2V0UnVudGltZVR5cGUobWV0aG9kSW52b2NhdGlvbi5yZWNlaXZlcik7CiAgICAgICAgICBOdWxsQXdhcmVFeHByZXNzaW9uIG90aGVyTnVsbEF3YXJlID0KICAgICAgICAgICAgICBnZXROdWxsQXdhcmVFeHByZXNzaW9uKG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIpOwoKICAgICAgICAgIGlmIChvdGhlckdldFJ1bnRpbWVUeXBlICE9IG51bGwpIHsKICAgICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlID09IGUxPy5ydW50aW1lVHlwZQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyAgICAgZTAucnVudGltZVR5cGUuPT0oCiAgICAgICAgICAgIC8vICAgICAgICAgbGV0ICN0MSA9IGUxIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM7CiAgICAgICAgICAgIHJlY2VpdmVyID0gb3RoZXJHZXRSdW50aW1lVHlwZS5yZWNlaXZlcjsKICAgICAgICAgICAgcmVjZWl2ZXJHZXQgPSBvdGhlckdldFJ1bnRpbWVUeXBlOwogICAgICAgICAgICBhcmd1bWVudCA9IG51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICAgICAgYXJndW1lbnRHZXQgPSBub2RlOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChvdGhlck51bGxBd2FyZSAhPSBudWxsICYmCiAgICAgICAgICAgICAgaXNHZXRSdW50aW1lVHlwZShvdGhlck51bGxBd2FyZS5leHByZXNzaW9uKSkgewogICAgICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyAgICAgZTA/LnJ1bnRpbWVUeXBlID09IGUxPy5ydW50aW1lVHlwZQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIChsZXQgI3QxID0gZTAgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLyAgICAgICAgIC49PShsZXQgI3QyID0gZTEgaW4gI3QyID09IG51bGwgPyBudWxsIDogI3QyLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM7CiAgICAgICAgICAgIHJlY2VpdmVyID0gb3RoZXJOdWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIHJlY2VpdmVyR2V0ID0gb3RoZXJOdWxsQXdhcmUuZXhwcmVzc2lvbjsKICAgICAgICAgICAgYXJndW1lbnQgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIGFyZ3VtZW50R2V0ID0gbm9kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobnVsbEF3YXJlLnBhcmVudCBpcyBpci5TdHJpbmdDb25jYXRlbmF0aW9uKSB7CiAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAvLwogICAgICAgIC8vICAgICAnJHtlPy5ydW50aW1lVHlwZX0nCiAgICAgICAgLy8gICAgICAgICAgIF4KICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgJyR7bGV0ICN0MSA9IGUgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlfScKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzsKICAgICAgICByZWNlaXZlciA9IG51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRGVmYXVsdCB0byB1bmtub3duCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgZT8ucnVudGltZVR5cGUKICAgICAgICAvLyAgICAgICAgXgogICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAvLwogICAgICAgIC8vICAgICBsZXQgI3QxID0gZSBpbiAjdDEgPT0gbnVsbCA/IG51bGwgOiAjdDEucnVudGltZVR5cGUKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQudW5rbm93bjsKICAgICAgICByZWNlaXZlciA9IG51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKG5vZGUucGFyZW50IGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gJiYKICAgICAgbm9kZS5wYXJlbnQucGFyZW50IGlzIGlyLkxldCkgewogICAgTnVsbEF3YXJlRXhwcmVzc2lvbiBudWxsQXdhcmUgPSBnZXROdWxsQXdhcmVFeHByZXNzaW9uKG5vZGUucGFyZW50LnBhcmVudCk7CiAgICBpZiAobnVsbEF3YXJlICE9IG51bGwgJiYgaXNJbnZva2VUb1N0cmluZyhudWxsQXdhcmUuZXhwcmVzc2lvbikpIHsKICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgLy8KICAgICAgLy8gICAgIGUucnVudGltZVR5cGU/LnRvU3RyaW5nKCkKICAgICAgLy8gICAgICAgXgogICAgICAvLyBlbmNvZGVkIGFzCiAgICAgIC8vCiAgICAgIC8vICAgICBsZXQgI3QxID0gZS5ydW50aW1lVHlwZSBpbiAjdDEgPT0gbnVsbCA/IG51bGwgOiAjdDEudG9TdHJpbmcoKQogICAgICAvLyAgICAgICAgICAgICAgICAgXgogICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzsKICAgICAgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICB9CiAgfSBlbHNlIGlmIChub2RlLnBhcmVudCBpcyBpci5NZXRob2RJbnZvY2F0aW9uKSB7CiAgICBpci5NZXRob2RJbnZvY2F0aW9uIG1ldGhvZEludm9jYXRpb24gPSBub2RlLnBhcmVudDsKICAgIGlmIChtZXRob2RJbnZvY2F0aW9uLm5hbWUubmFtZSA9PSAnPT0nICYmCiAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5yZWNlaXZlciA9PSBub2RlKSB7CiAgICAgIC8vIFtub2RlXSBpcyB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgPT0uCgogICAgICBpci5Qcm9wZXJ0eUdldCBvdGhlckdldFJ1bnRpbWVUeXBlID0KICAgICAgICAgIGFzR2V0UnVudGltZVR5cGUobWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCk7CiAgICAgIE51bGxBd2FyZUV4cHJlc3Npb24gbnVsbEF3YXJlID0KICAgICAgICAgIGdldE51bGxBd2FyZUV4cHJlc3Npb24obWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCk7CiAgICAgIGlmIChvdGhlckdldFJ1bnRpbWVUeXBlICE9IG51bGwpIHsKICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlID09IGUxLnJ1bnRpbWVUeXBlCiAgICAgICAgLy8gICAgICAgIF4KICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgZTAucnVudGltZVR5cGUuPT0oZTEucnVudGltZVR5cGUpCiAgICAgICAgLy8gICAgICAgIF4KICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgICAgIGFyZ3VtZW50ID0gb3RoZXJHZXRSdW50aW1lVHlwZS5yZWNlaXZlcjsKICAgICAgICBhcmd1bWVudEdldCA9IG90aGVyR2V0UnVudGltZVR5cGU7CiAgICAgIH0gZWxzZSBpZiAobnVsbEF3YXJlICE9IG51bGwgJiYgaXNHZXRSdW50aW1lVHlwZShudWxsQXdhcmUuZXhwcmVzc2lvbikpIHsKICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlID09IGUxPy5ydW50aW1lVHlwZQogICAgICAgIC8vICAgICAgICBeCiAgICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlLj09KAogICAgICAgIC8vICAgICAgICBeCiAgICAgICAgLy8gICAgICAgICBsZXQgI3QxID0gZTEgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOwogICAgICAgIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgICAgYXJndW1lbnQgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgYXJndW1lbnRHZXQgPSBudWxsQXdhcmUuZXhwcmVzc2lvbjsKICAgICAgfQogICAgfSBlbHNlIGlmIChpc0ludm9rZVRvU3RyaW5nKG5vZGUucGFyZW50KSkgewogICAgICAvLyBEZXRlY3RlZAogICAgICAvLwogICAgICAvLyAgICAgZS5ydW50aW1lVHlwZS50b1N0cmluZygpCiAgICAgIC8vICAgICAgIF4KICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc7CiAgICAgIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgfQogIH0gZWxzZSBpZiAobm9kZS5wYXJlbnQgaXMgaXIuQXJndW1lbnRzICYmCiAgICAgIG5vZGUucGFyZW50LnBhcmVudCBpcyBpci5NZXRob2RJbnZvY2F0aW9uKSB7CiAgICBpci5NZXRob2RJbnZvY2F0aW9uIG1ldGhvZEludm9jYXRpb24gPSBub2RlLnBhcmVudC5wYXJlbnQ7CiAgICBpZiAobWV0aG9kSW52b2NhdGlvbi5uYW1lLm5hbWUgPT0gJz09JyAmJgogICAgICAgIG1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QgPT0gbm9kZSkgewogICAgICAvLyBbbm9kZV0gaXMgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiA9PS4KICAgICAgaXIuUHJvcGVydHlHZXQgb3RoZXJHZXRSdW50aW1lVHlwZSA9CiAgICAgICAgICBhc0dldFJ1bnRpbWVUeXBlKG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIpOwogICAgICBOdWxsQXdhcmVFeHByZXNzaW9uIG51bGxBd2FyZSA9CiAgICAgICAgICBnZXROdWxsQXdhcmVFeHByZXNzaW9uKG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIpOwoKICAgICAgaWYgKG90aGVyR2V0UnVudGltZVR5cGUgIT0gbnVsbCkgewogICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgZTAucnVudGltZVR5cGUgPT0gZTEucnVudGltZVR5cGUKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAvLwogICAgICAgIC8vICAgICBlMC5ydW50aW1lVHlwZS49PShlMS5ydW50aW1lVHlwZSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOwogICAgICAgIHJlY2VpdmVyID0gb3RoZXJHZXRSdW50aW1lVHlwZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG90aGVyR2V0UnVudGltZVR5cGU7CiAgICAgICAgYXJndW1lbnQgPSBub2RlLnJlY2VpdmVyOwogICAgICAgIGFyZ3VtZW50R2V0ID0gbm9kZTsKICAgICAgfSBlbHNlIGlmIChudWxsQXdhcmUgIT0gbnVsbCAmJiBpc0dldFJ1bnRpbWVUeXBlKG51bGxBd2FyZS5leHByZXNzaW9uKSkgewogICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgZTA/LnJ1bnRpbWVUeXBlID09IGUxLnJ1bnRpbWVUeXBlCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAgIC8vCiAgICAgICAgLy8gICAgIChsZXQgI3QxID0gZTAgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgIC8vICAgICAgICAgLj09KGUxLnJ1bnRpbWVUeXBlKQogICAgICAgIC8vICAgICAgICAgICAgICAgIF4KICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICByZWNlaXZlciA9IG51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG51bGxBd2FyZS5leHByZXNzaW9uOwogICAgICAgIGFyZ3VtZW50ID0gbm9kZS5yZWNlaXZlcjsKICAgICAgICBhcmd1bWVudEdldCA9IG5vZGU7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKG5vZGUucGFyZW50IGlzIGlyLlN0cmluZ0NvbmNhdGVuYXRpb24pIHsKICAgIC8vIERldGVjdGVkCiAgICAvLwogICAgLy8gICAgICcke2UucnVudGltZVR5cGV9JwogICAgLy8gICAgICAgICAgXgogICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc7CiAgICByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgfQoKICBpZiAoa2luZCA9PSBudWxsKSB7CiAgICAvLyBEZWZhdWx0IHRvIHVua25vd24KICAgIC8vCiAgICAvLyAgICAgZS5ydW50aW1lVHlwZQogICAgLy8gICAgICAgXgogICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC51bmtub3duOwogICAgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogIH0KCiAgUnVudGltZVR5cGVVc2VEYXRhIGRhdGEgPSBuZXcgUnVudGltZVR5cGVVc2VEYXRhKAogICAgICBraW5kLCByZWNlaXZlckdldCwgcmVjZWl2ZXIsIGFyZ3VtZW50R2V0LCBhcmd1bWVudCk7CiAgY2FjaGVbcmVjZWl2ZXJHZXRdID0gZGF0YTsKICBpZiAoYXJndW1lbnRHZXQgIT0gbnVsbCkgewogICAgY2FjaGVbYXJndW1lbnRHZXRdID0gZGF0YTsKICB9CgogIGFzc2VydChyZWNlaXZlckdldCAhPSBudWxsLCAiTWlzc2luZyByZWNlaXZlckdldCBpbiAkZGF0YSBmb3IgJG5vZGUuIik7CiAgYXNzZXJ0KCEoYXJndW1lbnQgIT0gbnVsbCAmJiBhcmd1bWVudEdldCA9PSBudWxsKSwKICAgICAgIk1pc3NpbmcgYXJndW1lbnRHZXQgaW4gJGRhdGEgZm9yICRub2RlLiIpOwogIGFzc2VydCgKICAgICAgcmVjZWl2ZXJHZXQgIT0gYXJndW1lbnRHZXQsICJEdXBsaWNhdGUgcHJvcGVydHkgZ2V0IGluICRkYXRhIGZvciAkbm9kZS4iKTsKICByZXR1cm4gZGF0YTsKfQqBoQBOTjwBKAEfFAE7Gk05CwEyKAoBSiIKAgFFGhssIQFOMgEfIAFRDxwBTiYzAUggAVEPHAFPNwEYFCcmJSY9BkgEAQwWLEVOOgQCAUsMBEsuKkoxMQE/LFEEAUkRNjEEAT4sSAQBIgE7HhoeGhsBKTEmUB0iCUE3ATgvJD0dLzIWDSwWGA1RRjsNLCkeCjxBOjIWDScvTS0YDzUZGg9KPyouKyA1RwwBRzwoPRgPNhkaD0o/UQ8uKyAwNQw5Fg0rFhgNRzghDSwpHgo1PEgyTDcBLzsvQQEtGA81KxoPJk1CLjUvKyAMASg9GA82LBoPSlFGLjA1KyAMCj8UCyMXFgtIPConHA8eCx4UFgtDNSsnHAgGNiZQRxIJJxEUCUwbKCAaBjM4Li0tAStJJk8pFAswFBYLMRQqIhwxK1AUCzEUFgsiFEkqIhwnLAgwEgkmESggGgYsMz8uPy4rNyY9ASkUCzAmFgsxJioxKyIcUBQLMScWC0YnHConLCIcCAY2EAceEiYeGAQBFhoHGQ8nHhgEATQ7HR0fBAFKNTIKUQ8CATJwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9ydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydDdzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvY29sbGVjdGlvbi5kYXJ0gzovLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKZXhwb3J0ICJzcmMvYWxnb3JpdGhtcy5kYXJ0IjsKZXhwb3J0ICJzcmMvY2Fub25pY2FsaXplZF9tYXAuZGFydCI7CmV4cG9ydCAic3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX2l0ZXJhYmxlLmRhcnQiOwpleHBvcnQgInNyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9saXN0LmRhcnQiOwpleHBvcnQgInNyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9tYXAuZGFydCI7CmV4cG9ydCAic3JjL2NvbXBhcmF0b3JzLmRhcnQiOwpleHBvcnQgInNyYy9lcXVhbGl0eS5kYXJ0IjsKZXhwb3J0ICJzcmMvZXF1YWxpdHlfbWFwLmRhcnQiOwpleHBvcnQgInNyYy9lcXVhbGl0eV9zZXQuZGFydCI7CmV4cG9ydCAic3JjL2Z1bmN0aW9ucy5kYXJ0IjsKZXhwb3J0ICJzcmMvaXRlcmFibGVfemlwLmRhcnQiOwpleHBvcnQgInNyYy9wcmlvcml0eV9xdWV1ZS5kYXJ0IjsKZXhwb3J0ICJzcmMvcXVldWVfbGlzdC5kYXJ0IjsKZXhwb3J0ICJzcmMvdW5pb25fc2V0LmRhcnQiOwpleHBvcnQgInNyYy91bmlvbl9zZXRfY29udHJvbGxlci5kYXJ0IjsKZXhwb3J0ICJzcmMvdW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnQiOwpleHBvcnQgInNyYy93cmFwcGVycy5kYXJ0IjsKFwBOTjwBHiU3MzIfHCAgHSAiHh0oKRwBInBhY2thZ2U6Y29sbGVjdGlvbi9jb2xsZWN0aW9uLmRhcnQ3c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2RhcnQyanNfaW5mby9saWIvc3JjL3V0aWwuZGFydIytLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqc19pbmZvLnNyYy51dGlsOwoKaW1wb3J0ICdwYWNrYWdlOmRhcnQyanNfaW5mby9pbmZvLmRhcnQnOwoKaW1wb3J0ICdncmFwaC5kYXJ0JzsKCi8vLyBDb21wdXRlcyBhIGdyYXBoIG9mIGRlcGVuZGVuY2llcyBmcm9tIFtpbmZvXS4KR3JhcGg8SW5mbz4gZ3JhcGhGcm9tSW5mbyhBbGxJbmZvIGluZm8pIHsKICBwcmludCgnICBpbmZvOiBkZXBlbmRlbmN5IGdyYXBoIGluZm9ybWF0aW9uIGlzIHdvcmsgaW4gcHJvZ3Jlc3MgYW5kJwogICAgICAnIG1pZ2h0IGJlIGluY29tcGxldGUnKTsKICAvLyBOb3RlOiB3ZSBhcmUgY29tYmluaW5nIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gdGhhdCBpcyBjb21wdXRlZCBpbiB0d28gd2F5cwogIC8vIChmdW5jdGlvbkluZm8udXNlcyB2cyBhbGxJbmZvLmRlcGVuZGVuY2llcykuCiAgLy8gVE9ETyhzaWdtdW5kKTogZml4IGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZXNlIHR3byB3YXlzLCBzdGljayB3aXRoIG9uZQogIC8vIG9mIHRoZW0uCiAgLy8gVE9ETyhzaWdtdW5kKTogY3JlYXRlIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5mb0dyYXBoLCBpbnN0ZWFkIG9mCiAgLy8gdXNpbmcgdGhlIEVkZ2VMaXN0R3JhcGguCiAgdmFyIGdyYXBoID0gbmV3IEVkZ2VMaXN0R3JhcGg8SW5mbz4oKTsKICBmb3IgKHZhciBmIGluIGluZm8uZnVuY3Rpb25zKSB7CiAgICBncmFwaC5hZGROb2RlKGYpOwogICAgZm9yICh2YXIgZyBpbiBmLnVzZXMpIHsKICAgICAgZ3JhcGguYWRkRWRnZShmLCBnLnRhcmdldCk7CiAgICB9CiAgICBpZiAoaW5mby5kZXBlbmRlbmNpZXNbZl0gIT0gbnVsbCkgewogICAgICBmb3IgKHZhciBnIGluIGluZm8uZGVwZW5kZW5jaWVzW2ZdKSB7CiAgICAgICAgZ3JhcGguYWRkRWRnZShmLCBnKTsKICAgICAgfQogICAgfQogIH0KCiAgZm9yICh2YXIgZiBpbiBpbmZvLmZpZWxkcykgewogICAgZ3JhcGguYWRkTm9kZShmKTsKICAgIGZvciAodmFyIGcgaW4gZi51c2VzKSB7CiAgICAgIGdyYXBoLmFkZEVkZ2UoZiwgZy50YXJnZXQpOwogICAgfQogICAgaWYgKGluZm8uZGVwZW5kZW5jaWVzW2ZdICE9IG51bGwpIHsKICAgICAgZm9yICh2YXIgZyBpbiBpbmZvLmRlcGVuZGVuY2llc1tmXSkgewogICAgICAgIGdyYXBoLmFkZEVkZ2UoZiwgZyk7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiBncmFwaDsKfQoKLy8vIFByb3ZpZGUgYSB1bmlxdWUgbG9uZyBuYW1lIGFzc29jaWF0ZWQgd2l0aCBbaW5mb10uCi8vIFRPRE8oc2lnbXVuZCk6IGd1YXJhbnRlZSB0aGF0IHRoZSBuYW1lIGlzIGFjdHVhbGx5IHVuaXF1ZS4KU3RyaW5nIGxvbmdOYW1lKEluZm8gaW5mbywge2Jvb2wgdXNlTGlicmFyeVVyaTogZmFsc2UsIGJvb2wgZm9ySWQ6IGZhbHNlfSkgewogIHZhciBpbmZvUGF0aCA9IFtdOwogIHdoaWxlIChpbmZvICE9IG51bGwpIHsKICAgIGluZm9QYXRoLmFkZChpbmZvKTsKICAgIGluZm8gPSBpbmZvLnBhcmVudDsKICB9CiAgdmFyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIHZhciBmaXJzdCA9IHRydWU7CiAgZm9yICh2YXIgc2VnbWVudCBpbiBpbmZvUGF0aC5yZXZlcnNlZCkgewogICAgaWYgKCFmaXJzdCkgc2Iud3JpdGUoJy4nKTsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IGVuc3VyZSB0aGF0IHRoZSBmaXJzdCBzZWdtZW50IGlzIGEgTGlicmFyeUluZm8uCiAgICAvLyBhc3NlcnQoIWZpcnN0IHx8IHNlZ21lbnQgaXMgTGlicmFyeUluZm8pOwogICAgLy8gKHRvZGF5IG1pZ2h0IG5vdCBiZSB0cnVlIGZvciBmb3IgY2xvc3VyZSBjbGFzc2VzKS4KICAgIGlmIChzZWdtZW50IGlzIExpYnJhcnlJbmZvKSB7CiAgICAgIC8vIFRPRE8oa2V2bW9vKTogUmVtb3ZlIHRoaXMgd2hlbiBkYXJ0MmpzIGNhbiBiZSBpbnZva2VkIHdpdGggYW4gYXBwLXJvb3QKICAgICAgLy8gY3VzdG9tIFVSSQogICAgICBpZiAodXNlTGlicmFyeVVyaSAmJiBmb3JJZCAmJiBzZWdtZW50LnVyaS5pc1NjaGVtZSgnZmlsZScpKSB7CiAgICAgICAgYXNzZXJ0KFVyaS5iYXNlLmlzU2NoZW1lKCdmaWxlJykpOwogICAgICAgIHZhciBjdXJyZW50QmFzZSA9IFVyaS5iYXNlLnBhdGg7CiAgICAgICAgdmFyIHNlZ21lbnRTdHJpbmcgPSBzZWdtZW50LnVyaS5wYXRoOwoKICAgICAgICAvLyBJZiBsb25nTmFtZSBpcyBiZWluZyBjYWxsZWQgdG8gY2FsY3VsYXRlIGFuIGVsZW1lbnQgSUQgKGZvcklkID0gdHJ1ZSkKICAgICAgICAvLyB0aGVuIHVzZSBhIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBsb25nTmFtZSBjYWxjdWxhdGlvbgogICAgICAgIC8vIFRoaXMgYWxsb3dzIGEgbW9yZSBzdGFibGUgSUQgZm9yIGNhc2VzIHdoZW4gZmlsZXMgYXJlIGdlbmVyYXRlZCBpbnRvCiAgICAgICAgLy8gdGVtcCBkaXJlY3RvcmllcyDigJMgZS5nLiB3aXRoIHBrZzpidWlsZF93ZWJfY29tcGlsZXJzCiAgICAgICAgaWYgKHNlZ21lbnRTdHJpbmcuc3RhcnRzV2l0aChjdXJyZW50QmFzZSkpIHsKICAgICAgICAgIHNlZ21lbnRTdHJpbmcgPSBzZWdtZW50U3RyaW5nLnN1YnN0cmluZyhjdXJyZW50QmFzZS5sZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgc2Iud3JpdGUoc2VnbWVudFN0cmluZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2Iud3JpdGUodXNlTGlicmFyeVVyaSA/IHNlZ21lbnQudXJpIDogc2VnbWVudC5uYW1lKTsKICAgICAgfQogICAgICBzYi53cml0ZSgnOjonKTsKICAgIH0gZWxzZSB7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIHNiLndyaXRlKHNlZ21lbnQubmFtZSk7CiAgICB9CiAgfQogIHJldHVybiBzYi50b1N0cmluZygpOwp9CgovLy8gUHJvZHVjZSBhIHN0cmluZyBjb250YWluaW5nIFt2YWx1ZV0gcGFkZGVkIHdpdGggd2hpdGUgc3BhY2UgdXAgdG8gW25dIGNoYXJzLgpwYWQodmFsdWUsIG4sIHtib29sIHJpZ2h0OiBmYWxzZX0pIHsKICB2YXIgcyA9ICckdmFsdWUnOwogIGlmIChzLmxlbmd0aCA+PSBuKSByZXR1cm4gczsKICB2YXIgcGFkID0gJyAnICogKG4gLSBzLmxlbmd0aCk7CiAgcmV0dXJuIHJpZ2h0ID8gJyRzJHBhZCcgOiAnJHBhZCRzJzsKfQplAE5OPAEfASkBFQEyKkcfUDJPDk4eKSIWHCIGKCwdCAYEAR8WHCIGKCwdCAYEARACATc+TRUZGBgEHxQrH0YxOiJQFEQrKS4BUUFQQDVHCgEhDz4IFg0VHgYEGAIBUSUUHyImAgEicGFja2FnZTpkYXJ0MmpzX2luZm8vc3JjL3V0aWwuZGFydD5zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvZGFydDJqc19pbmZvL2xpYi9zcmMvYmluYXJ5L3NpbmsuZGFydKwpLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKLy8vIEludGVyZmFjZSBmb3Igc2VyaWFsaXphdGlvbi4KLy8gVE9ETyhzaWdtdW5kKTogc2hhcmUgdGhpcyB3aXRoIHBrZzpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi8qCmFic3RyYWN0IGNsYXNzIERhdGFTaW5rIHsKICAvLy8gVGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoZSB1bml0cyBpcyBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZSBmb3IgdGhpcyBkYXRhIHNpbmsuCiAgaW50IGdldCBsZW5ndGg7CgogIC8vLyBGbHVzaGVzIGFueSBwZW5kaW5nIGRhdGEgYW5kIGNsb3NlcyB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhlIGRhdGEgc2luayBjYW4gbm8gbG9uZ2VyIGJlIHdyaXR0ZW4gdG8gYWZ0ZXIgY2xvc2luZy4KICB2b2lkIGNsb3NlKCk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW3ZhbHVlXSBoYXMgbm90IHlldAogIC8vLyBiZWVuIHNlcmlhbGl6ZWQsIFtmXSBpcyBjYWxsZWQgdG8gc2VyaWFsaXplIHRoZSB2YWx1ZSBpdHNlbGYuCiAgdm9pZCB3cml0ZUNhY2hlZDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW3ZhbHVlXSBpcwogIC8vLyBub24tbnVsbCBbZl0gaXMgY2FsbGVkIHRvIHdyaXRlIHRoZSBub24tbnVsbCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVmFsdWVPck51bGxdLgogIHZvaWQgd3JpdGVWYWx1ZU9yTnVsbDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpOwoKICAvLy8gV3JpdGVzIHRoZSBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luayBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvCiAgLy8vIHRoZSBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRMaXN0XS4KICB2b2lkIHdyaXRlTGlzdDxFPihJdGVyYWJsZTxFPiB2YWx1ZXMsIHZvaWQgZihFIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBib29sZWFuIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUJvb2woYm9vbCB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUludChpbnQgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgbm9uLW5lZ2F0aXZlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRJbnRPck51bGxdLgogIHZvaWQgd3JpdGVJbnRPck51bGwoaW50IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgc3RyaW5nIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVN0cmluZyhTdHJpbmcgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgc3RyaW5nIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRTdHJpbmdPck51bGxdLgogIHZvaWQgd3JpdGVTdHJpbmdPck51bGwoU3RyaW5nIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgc3RyaW5nIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsCiAgLy8vIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkU3RyaW5nc10uCiAgdm9pZCB3cml0ZVN0cmluZ3MoSXRlcmFibGU8U3RyaW5nPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSBzdHJpbmcgdG8gW1ZdIHZhbHVlcyB0byB0aGlzIGRhdGEgc2luaywgY2FsbGluZyBbZl0KICAvLy8gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFttYXBdIGlzCiAgLy8vIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkU3RyaW5nTWFwXS4KICB2b2lkIHdyaXRlU3RyaW5nTWFwPFY+KE1hcDxTdHJpbmcsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIGVudW0gdmFsdWUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgdGhlIHNpZ25hdHVyZSB0bwogIC8vIGB2b2lkIHdyaXRlRW51bTxFIGV4dGVuZHMgRW51bTxFPj4oRSB2YWx1ZSk7YCB3aGVuIGFuIGludGVyZmFjZSBmb3IgZW51bXMKICAvLyBpcyBhZGRlZCB0byB0aGUgbGFuZ3VhZ2UuCiAgdm9pZCB3cml0ZUVudW0oZHluYW1pYyB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIFVSSSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVVcmkoVXJpIHZhbHVlKTsKfQoKLy8vIE1peGluIHRoYXQgaW1wbGVtZW50cyBhbGwgY29udmVuaWVuY2UgbWV0aG9kcyBvZiBbRGF0YVNpbmtdLgphYnN0cmFjdCBjbGFzcyBEYXRhU2lua01peGluIGltcGxlbWVudHMgRGF0YVNpbmsgewogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVJbnRPck51bGwoaW50IHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZUludCh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlU3RyaW5nT3JOdWxsKFN0cmluZyB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVTdHJpbmcodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZ3MoSXRlcmFibGU8U3RyaW5nPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoU3RyaW5nIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlU3RyaW5nKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZ01hcDxWPihNYXA8U3RyaW5nLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKFN0cmluZyBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZVN0cmluZyhrZXkpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMaXN0PEU+KEl0ZXJhYmxlPEU+IHZhbHVlcywgdm9pZCBmKEUgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICB2YWx1ZXMuZm9yRWFjaChmKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVWYWx1ZU9yTnVsbDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIGYodmFsdWUpOwogICAgfQogIH0KfQoKLy8vIERhdGEgc2luayBoZWxwZXIgdGhhdCBjYW5vbmljYWxpemVzIFtFXSB2YWx1ZXMgdXNpbmcgaW5kaWNlcy4KY2xhc3MgSW5kZXhlZFNpbms8RT4gewogIGZpbmFsIHZvaWQgRnVuY3Rpb24oaW50KSBfd3JpdGVJbnQ7CiAgZmluYWwgTWFwPEUsIGludD4gX2NhY2hlID0ge307CgogIEluZGV4ZWRTaW5rKHRoaXMuX3dyaXRlSW50KTsKCiAgLy8vIFdyaXRlIGEgcmVmZXJlbmNlIHRvIFt2YWx1ZV0gdG8gdGhlIGRhdGEgc2luay4KICAvLy8KICAvLy8gSWYgW3ZhbHVlXSBoYXMgbm90IGJlZW4gY2Fub25pY2FsaXplZCB5ZXQsIFt3cml0ZVZhbHVlXSBpcyBjYWxsZWQgdG8KICAvLy8gc2VyaWFsaXplIHRoZSBbdmFsdWVdIGl0c2VsZi4KICB2b2lkIHdyaXRlKEUgdmFsdWUsIHZvaWQgd3JpdGVWYWx1ZShFIHZhbHVlKSkgewogICAgaW50IGluZGV4ID0gX2NhY2hlW3ZhbHVlXTsKICAgIGlmIChpbmRleCA9PSBudWxsKSB7CiAgICAgIGluZGV4ID0gX2NhY2hlLmxlbmd0aDsKICAgICAgX2NhY2hlW3ZhbHVlXSA9IGluZGV4OwogICAgICBfd3JpdGVJbnQoaW5kZXgpOwogICAgICB3cml0ZVZhbHVlKHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIF93cml0ZUludChpbmRleCk7CiAgICB9CiAgfQp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBbRGF0YVNpbmtdIHVzaW5nIFtEYXRhU2lua01peGluXSB0byBpbXBsZW1lbnQKLy8vIGNvbnZlbmllbmNlIG1ldGhvZHMuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGF0YVNpbmsgZXh0ZW5kcyBEYXRhU2lua01peGluIGltcGxlbWVudHMgRGF0YVNpbmsgewogIEluZGV4ZWRTaW5rPFN0cmluZz4gX3N0cmluZ0luZGV4OwogIEluZGV4ZWRTaW5rPFVyaT4gX3VyaUluZGV4OwogIE1hcDxUeXBlLCBJbmRleGVkU2luaz4gX2dlbmVyYWxDYWNoZXMgPSB7fTsKCiAgQWJzdHJhY3REYXRhU2luaygpIHsKICAgIF9zdHJpbmdJbmRleCA9IG5ldyBJbmRleGVkU2luazxTdHJpbmc+KF93cml0ZUludEludGVybmFsKTsKICAgIF91cmlJbmRleCA9IG5ldyBJbmRleGVkU2luazxVcmk+KF93cml0ZUludEludGVybmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDYWNoZWQ8RT4oRSB2YWx1ZSwgdm9pZCBmKEUgdmFsdWUpKSB7CiAgICBJbmRleGVkU2luayBzaW5rID0KICAgICAgICBfZ2VuZXJhbENhY2hlc1tFXSA/Pz0gbmV3IEluZGV4ZWRTaW5rPEU+KF93cml0ZUludEludGVybmFsKTsKICAgIHNpbmsud3JpdGUodmFsdWUsICh2KSA9PiBmKHYpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVFbnVtKGR5bmFtaWMgdmFsdWUpIHsKICAgIF93cml0ZUVudW1JbnRlcm5hbCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQm9vbChib29sIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZSA/IDEgOiAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVVcmkoVXJpIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfd3JpdGVVcmkodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZyhTdHJpbmcgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIF93cml0ZVN0cmluZyh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlSW50KGludCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgYXNzZXJ0KHZhbHVlID49IDAgJiYgdmFsdWUgPj4gMzAgPT0gMCk7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZSk7CiAgfQoKICB2b2lkIF93cml0ZVN0cmluZyhTdHJpbmcgdmFsdWUpIHsKICAgIF9zdHJpbmdJbmRleC53cml0ZSh2YWx1ZSwgX3dyaXRlU3RyaW5nSW50ZXJuYWwpOwogIH0KCiAgdm9pZCBfd3JpdGVVcmkoVXJpIHZhbHVlKSB7CiAgICBfdXJpSW5kZXgud3JpdGUodmFsdWUsIF93cml0ZVVyaUludGVybmFsKTsKICB9CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIFVSSSB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF93cml0ZVVyaUludGVybmFsKFVyaSB2YWx1ZSk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIFN0cmluZyB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF93cml0ZVN0cmluZ0ludGVybmFsKFN0cmluZyB2YWx1ZSk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlLCBpbXBsZW1lbnRlZCBieQogIC8vLyBzdWJjbGFzc2VzLgogIHZvaWQgX3dyaXRlSW50SW50ZXJuYWwoaW50IHZhbHVlKTsKCiAgLy8vIEFjdHVhbCBzZXJpYWxpemF0aW9uIG9mIGFuIGVudW0gdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfd3JpdGVFbnVtSW50ZXJuYWwoZHluYW1pYyB2YWx1ZSk7Cn0KCi8vLyBbRGF0YVNpbmtdIHRoYXQgd3JpdGVzIGRhdGEgYXMgYSBzZXF1ZW5jZSBvZiBieXRlcy4KLy8vCi8vLyBUaGlzIGRhdGEgc2luayB3b3JrcyB0b2dldGhlciB3aXRoIFtCaW5hcnlTb3VyY2VdLgpjbGFzcyBCaW5hcnlTaW5rIGV4dGVuZHMgQWJzdHJhY3REYXRhU2luayB7CiAgZmluYWwgU2luazxMaXN0PGludD4+IHNpbms7CiAgQnVmZmVyZWRTaW5rIF9idWZmZXJlZFNpbms7CiAgaW50IF9sZW5ndGggPSAwOwoKICBCaW5hcnlTaW5rKHRoaXMuc2luaykgOiBfYnVmZmVyZWRTaW5rID0gbmV3IEJ1ZmZlcmVkU2luayhzaW5rKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVVcmlJbnRlcm5hbChVcmkgdmFsdWUpIHsKICAgIF93cml0ZVN0cmluZyh2YWx1ZS50b1N0cmluZygpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlU3RyaW5nSW50ZXJuYWwoU3RyaW5nIHZhbHVlKSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSB1dGY4LmVuY29kZSh2YWx1ZSk7CiAgICBfd3JpdGVJbnRJbnRlcm5hbChieXRlcy5sZW5ndGgpOwogICAgX2J1ZmZlcmVkU2luay5hZGRCeXRlcyhieXRlcyk7CiAgICBfbGVuZ3RoICs9IGJ5dGVzLmxlbmd0aDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlSW50SW50ZXJuYWwoaW50IHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgPj0gMCAmJiB2YWx1ZSA+PiAzMCA9PSAwKTsKICAgIGlmICh2YWx1ZSA8IDB4ODApIHsKICAgICAgX2J1ZmZlcmVkU2luay5hZGRCeXRlKHZhbHVlKTsKICAgICAgX2xlbmd0aCArPSAxOwogICAgfSBlbHNlIGlmICh2YWx1ZSA8IDB4NDAwMCkgewogICAgICBfYnVmZmVyZWRTaW5rLmFkZEJ5dGUyKCh2YWx1ZSA+PiA4KSB8IDB4ODAsIHZhbHVlICYgMHhGRik7CiAgICAgIF9sZW5ndGggKz0gMjsKICAgIH0gZWxzZSB7CiAgICAgIF9idWZmZXJlZFNpbmsuYWRkQnl0ZTQoKHZhbHVlID4+IDI0KSB8IDB4QzAsICh2YWx1ZSA+PiAxNikgJiAweEZGLAogICAgICAgICAgKHZhbHVlID4+IDgpICYgMHhGRiwgdmFsdWUgJiAweEZGKTsKICAgICAgX2xlbmd0aCArPSA0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVFbnVtSW50ZXJuYWwoZHluYW1pYyB2YWx1ZSkgewogICAgX3dyaXRlSW50SW50ZXJuYWwodmFsdWUuaW5kZXgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9idWZmZXJlZFNpbmsuZmx1c2hBbmREZXN0cm95KCk7CiAgICBfYnVmZmVyZWRTaW5rID0gbnVsbDsKICAgIHNpbmsuY2xvc2UoKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGlzIGRhdGEgc2luay4KICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoOwp9CgovLy8gUHV0cyBhIGJ1ZmZlciBpbiBmcm9udCBvZiBhIFtTaW5rPExpc3Q8aW50Pj5dLgovLyBUT0RPKHNpZ211bmQpOiBzaGFyZSB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBpbgovLyBwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0CmNsYXNzIEJ1ZmZlcmVkU2luayB7CiAgc3RhdGljIGNvbnN0IGludCBTSVpFID0gMTAwMDAwOwogIHN0YXRpYyBjb25zdCBpbnQgU0FGRV9TSVpFID0gU0laRSAtIDU7CiAgc3RhdGljIGNvbnN0IGludCBTTUFMTCA9IDEwMDAwOwogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBfc2luazsKICBVaW50OExpc3QgX2J1ZmZlciA9IG5ldyBVaW50OExpc3QoU0laRSk7CiAgaW50IGxlbmd0aCA9IDA7CiAgaW50IGZsdXNoZWRMZW5ndGggPSAwOwoKICBGbG9hdDY0TGlzdCBfZG91YmxlQnVmZmVyID0gbmV3IEZsb2F0NjRMaXN0KDEpOwogIFVpbnQ4TGlzdCBfZG91YmxlQnVmZmVyVWludDg7CgogIGludCBnZXQgb2Zmc2V0ID0+IGxlbmd0aCArIGZsdXNoZWRMZW5ndGg7CgogIEJ1ZmZlcmVkU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGREb3VibGUoZG91YmxlIGQpIHsKICAgIF9kb3VibGVCdWZmZXJVaW50OCA/Pz0gX2RvdWJsZUJ1ZmZlci5idWZmZXIuYXNVaW50OExpc3QoKTsKICAgIF9kb3VibGVCdWZmZXJbMF0gPSBkOwogICAgYWRkQnl0ZTQoX2RvdWJsZUJ1ZmZlclVpbnQ4WzBdLCBfZG91YmxlQnVmZmVyVWludDhbMV0sCiAgICAgICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzJdLCBfZG91YmxlQnVmZmVyVWludDhbM10pOwogICAgYWRkQnl0ZTQoX2RvdWJsZUJ1ZmZlclVpbnQ4WzRdLCBfZG91YmxlQnVmZmVyVWludDhbNV0sCiAgICAgICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzZdLCBfZG91YmxlQnVmZmVyVWludDhbN10pOwogIH0KCiAgdm9pZCBhZGRCeXRlKGludCBieXRlKSB7CiAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGU7CiAgICBpZiAobGVuZ3RoID09IFNJWkUpIHsKICAgICAgX3NpbmsuYWRkKF9idWZmZXIpOwogICAgICBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChTSVpFKTsKICAgICAgbGVuZ3RoID0gMDsKICAgICAgZmx1c2hlZExlbmd0aCArPSBTSVpFOwogICAgfQogIH0KCiAgdm9pZCBhZGRCeXRlMihpbnQgYnl0ZTEsIGludCBieXRlMikgewogICAgaWYgKGxlbmd0aCA8IFNBRkVfU0laRSkgewogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUxOwogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUyOwogICAgfSBlbHNlIHsKICAgICAgYWRkQnl0ZShieXRlMSk7CiAgICAgIGFkZEJ5dGUoYnl0ZTIpOwogICAgfQogIH0KCiAgdm9pZCBhZGRCeXRlNChpbnQgYnl0ZTEsIGludCBieXRlMiwgaW50IGJ5dGUzLCBpbnQgYnl0ZTQpIHsKICAgIGlmIChsZW5ndGggPCBTQUZFX1NJWkUpIHsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMTsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMjsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMzsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlNDsKICAgIH0gZWxzZSB7CiAgICAgIGFkZEJ5dGUoYnl0ZTEpOwogICAgICBhZGRCeXRlKGJ5dGUyKTsKICAgICAgYWRkQnl0ZShieXRlMyk7CiAgICAgIGFkZEJ5dGUoYnl0ZTQpOwogICAgfQogIH0KCiAgdm9pZCBhZGRCeXRlcyhMaXN0PGludD4gYnl0ZXMpIHsKICAgIC8vIEF2b2lkIGNvcHlpbmcgYSBsYXJnZSBidWZmZXIgaW50byB0aGUgYW5vdGhlciBsYXJnZSBidWZmZXIuIEFsc28sIGlmCiAgICAvLyB0aGUgYnl0ZXMgYnVmZmVyIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gb3VyIG93biBidWZmZXIsIGp1c3QgZW1pdCBib3RoLgogICAgaWYgKGxlbmd0aCArIGJ5dGVzLmxlbmd0aCA8IFNJWkUgJiYKICAgICAgICAoYnl0ZXMubGVuZ3RoIDwgU01BTEwgfHwgbGVuZ3RoIDwgU01BTEwpKSB7CiAgICAgIF9idWZmZXIuc2V0UmFuZ2UobGVuZ3RoLCBsZW5ndGggKyBieXRlcy5sZW5ndGgsIGJ5dGVzKTsKICAgICAgbGVuZ3RoICs9IGJ5dGVzLmxlbmd0aDsKICAgIH0gZWxzZSBpZiAoYnl0ZXMubGVuZ3RoIDwgU01BTEwpIHsKICAgICAgLy8gRmx1c2ggYXMgbXVjaCBhcyB3ZSBjYW4gaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgogICAgICBfYnVmZmVyLnNldFJhbmdlKGxlbmd0aCwgU0laRSwgYnl0ZXMpOwogICAgICBfc2luay5hZGQoX2J1ZmZlcik7CiAgICAgIC8vIENvcHkgb3ZlciB0aGUgcmVtYWluZGVyIGludG8gYSBuZXcgYnVmZmVyLiBJdCBpcyBndWFyYW50ZWVkIHRvIGZpdAogICAgICAvLyBiZWNhdXNlIHRoZSBpbnB1dCBieXRlIGFycmF5IGlzIHNtYWxsLgogICAgICBpbnQgYWxyZWFkeUVtaXR0ZWQgPSBTSVpFIC0gbGVuZ3RoOwogICAgICBpbnQgcmVtYWluZGVyID0gYnl0ZXMubGVuZ3RoIC0gYWxyZWFkeUVtaXR0ZWQ7CiAgICAgIF9idWZmZXIgPSBuZXcgVWludDhMaXN0KFNJWkUpOwogICAgICBfYnVmZmVyLnNldFJhbmdlKDAsIHJlbWFpbmRlciwgYnl0ZXMsIGFscmVhZHlFbWl0dGVkKTsKICAgICAgbGVuZ3RoID0gcmVtYWluZGVyOwogICAgICBmbHVzaGVkTGVuZ3RoICs9IFNJWkU7CiAgICB9IGVsc2UgewogICAgICBmbHVzaCgpOwogICAgICBfc2luay5hZGQoYnl0ZXMpOwogICAgICBmbHVzaGVkTGVuZ3RoICs9IGJ5dGVzLmxlbmd0aDsKICAgIH0KICB9CgogIHZvaWQgZmx1c2goKSB7CiAgICBfc2luay5hZGQoX2J1ZmZlci5zdWJsaXN0KDAsIGxlbmd0aCkpOwogICAgX2J1ZmZlciA9IG5ldyBVaW50OExpc3QoU0laRSk7CiAgICBmbHVzaGVkTGVuZ3RoICs9IGxlbmd0aDsKICAgIGxlbmd0aCA9IDA7CiAgfQoKICB2b2lkIGZsdXNoQW5kRGVzdHJveSgpIHsKICAgIF9zaW5rLmFkZChfYnVmZmVyLnN1Ymxpc3QoMCwgbGVuZ3RoKSk7CiAgfQp9CoGTAE5OPAEXGgEhQxo0Bk4SAToGPxABTkQxAU1LBjwkNgFPUQY8HTkgATQeAUEcAUwGPCIiATMiAUYGPCUoAU4oBjwgRwFQTxwGPCI+IAE3Mk8fIQEwHAIBQTMMIx4ZFwYEAQwpHhkaBgQBDEgaGRMNHyUcCAYEAQw+IRcZEw0cKhoSCgYEAQw5IRoZEw0fGQYEAQw3HhkQBgQCAUIXJiEBHwE1BkskMh8ZHR0YGQ0YBgQCAUkZTCQeLgEXPzkEAQwyF0UkBAEMIh8EAQwfGyYEAQwdGxYEAQwjGxkEAQwdGyweBAEkNQQBHi8EAUYlAUkrAUsSJQFIKgIBOAQ3LB4eEwFCAQwmJAQBDCwqJSMdBAEMJiwYJBQhQRQNSS4UBgQBDCskBAERJRoSBAE9HQIBMzMsFSIpIh8rEhkBMiABLAEcAR0/Gjs3OzcEARseGholEh0GBAEoHiEhDRYWBgQBPh4hISEhDRYWFhYGBAEjTE8oND4eJzgtGkwwKjUlPRodDQ8YJQYEARErIx0QBAEbKwQCASlwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvYmluYXJ5L3NpbmsuZGFydEBzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvZGFydDJqc19pbmZvL2xpYi9zcmMvYmluYXJ5L3NvdXJjZS5kYXJ0n3IvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgovLy8gSW50ZXJmYWNlIGZvciBkZXNlcmlhbGl6YXRpb24uCi8vIFRPRE8oc2lnbXVuZCk6IHNoYXJlIHRoaXMgd2l0aCBwa2c6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vKgphYnN0cmFjdCBjbGFzcyBEYXRhU291cmNlIHsKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gW0VdIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgdGhlIHZhbHVlIGhhcwogIC8vLyBub3QgeWV0IGJlZW4gZGVzZXJpYWxpemVkLCBbZl0gaXMgY2FsbGVkIHRvIGRlc2VyaWFsaXplIHRoZSB2YWx1ZSBpdHNlbGYuCiAgRSByZWFkQ2FjaGVkPEU+KEUgZigpKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIFtFXSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsIGNhbGxpbmcgW2ZdIHRvCiAgLy8vIHJlYWQgdGhlIG5vbi1udWxsIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVWYWx1ZU9yTnVsbF0uCiAgRSByZWFkVmFsdWVPck51bGw8RT4oRSBmKCkpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIFtFXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlTGlzdF0uCiAgTGlzdDxFPiByZWFkTGlzdDxFPihFIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIGJvb2xlYW4gdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGJvb2wgcmVhZEJvb2woKTsKCiAgLy8vIFJlYWRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGludCByZWFkSW50KCk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSBmcm9tIHRoaXMgZGF0YQogIC8vLyBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUludE9yTnVsbF0uCiAgaW50IHJlYWRJbnRPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgc3RyaW5nIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBTdHJpbmcgcmVhZFN0cmluZygpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAgc3RyaW5nIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlU3RyaW5nT3JOdWxsXS4KICBTdHJpbmcgcmVhZFN0cmluZ09yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHN0cmluZyB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlU3RyaW5nc10uCiAgTGlzdDxTdHJpbmc+IHJlYWRTdHJpbmdzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBzdHJpbmcgdmFsdWVzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLAogIC8vLyBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVN0cmluZ01hcF0uCiAgTWFwPFN0cmluZywgVj4gcmVhZFN0cmluZ01hcDxWPihWIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhbiBlbnVtIHZhbHVlIGZyb20gdGhlIGxpc3Qgb2YgZW51bSBbdmFsdWVzXSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoZSBbdmFsdWVzXSBhcmd1bWVudCBpcyBpbnRlbmRlZCB0byBiZSB0aGUgc3RhdGljIGAudmFsdWVzYCBmaWVsZCBvbgogIC8vLyBlbnVtIGNsYXNzZXMsIGZvciBpbnN0YW5jZToKICAvLy8KICAvLy8gICAgZW51bSBGb28geyBiYXIsIGJheiB9CiAgLy8vICAgIC4uLgogIC8vLyAgICBGb28gZm9vID0gc291cmNlLnJlYWRFbnVtKEZvby52YWx1ZXMpOwogIC8vLwogIEUgcmVhZEVudW08RT4oTGlzdDxFPiB2YWx1ZXMpOwoKICAvLy8gUmVhZHMgYSBVUkkgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIFVyaSByZWFkVXJpKCk7Cn0KCi8vLyBNaXhpbiB0aGF0IGltcGxlbWVudHMgYWxsIGNvbnZlbmllbmNlIG1ldGhvZHMgb2YgW0RhdGFTb3VyY2VdLgphYnN0cmFjdCBjbGFzcyBEYXRhU291cmNlTWl4aW4gaW1wbGVtZW50cyBEYXRhU291cmNlIHsKICBAb3ZlcnJpZGUKICBFIHJlYWRWYWx1ZU9yTnVsbDxFPihFIGYoKSkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIGYoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiByZWFkTGlzdDxFPihFIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSBmKCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIGludCByZWFkSW50T3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRJbnQoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHJlYWRTdHJpbmdPck51bGwoKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gcmVhZFN0cmluZygpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PFN0cmluZz4gcmVhZFN0cmluZ3Moe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgTGlzdDxTdHJpbmc+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBsaXN0W2ldID0gcmVhZFN0cmluZygpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBWPiByZWFkU3RyaW5nTWFwPFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8U3RyaW5nLCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBTdHJpbmcga2V5ID0gcmVhZFN0cmluZygpOwogICAgICBWIHZhbHVlID0gZigpOwogICAgICBtYXBba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9Cn0KCi8vLyBEYXRhIHNvdXJjZSBoZWxwZXIgcmVhZHMgY2Fub25pY2FsaXplZCBbRV0gdmFsdWVzIHRocm91Z2ggaW5kaWNlcy4KY2xhc3MgSW5kZXhlZFNvdXJjZTxFPiB7CiAgZmluYWwgaW50IEZ1bmN0aW9uKCkgX3JlYWRJbnQ7CiAgZmluYWwgTGlzdDxFPiBfY2FjaGUgPSBbXTsKICBmaW5hbCBTZXQ8aW50PiBfcGVuZGluZyA9IG5ldyBTZXQoKTsKCiAgSW5kZXhlZFNvdXJjZSh0aGlzLl9yZWFkSW50KTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIFtFXSB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gSWYgdGhlIHZhbHVlIGhhc24ndCB5ZXQgYmVlbiByZWFkLCBbcmVhZFZhbHVlXSBpcyBjYWxsZWQgdG8gZGVzZXJpYWxpemUKICAvLy8gdGhlIHZhbHVlIGl0c2VsZi4KICBFIHJlYWQoRSByZWFkVmFsdWUoKSkgewogICAgaW50IGluZGV4ID0gX3JlYWRJbnQoKTsKICAgIGlmIChfcGVuZGluZy5jb250YWlucyhpbmRleCkpIHRocm93ICJzZXJpYWxpemF0aW9uIGN5Y2xlcyBub3Qgc3VwcG9ydGVkIjsKICAgIGlmIChpbmRleCA+PSBfY2FjaGUubGVuZ3RoKSB7CiAgICAgIF9wZW5kaW5nLmFkZChpbmRleCk7CiAgICAgIF9jYWNoZS5hZGQobnVsbCk7CiAgICAgIEUgdmFsdWUgPSByZWFkVmFsdWUoKTsKICAgICAgX3BlbmRpbmcucmVtb3ZlKGluZGV4KTsKICAgICAgX2NhY2hlW2luZGV4XSA9IHZhbHVlOwogICAgICByZXR1cm4gdmFsdWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2NhY2hlW2luZGV4XTsKICAgIH0KICB9Cn0KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIG9mIFtEYXRhU291cmNlXSB1c2luZyBbRGF0YVNvdXJjZU1peGluXSB0byBpbXBsZW1lbnQKLy8vIGNvbnZlbmllbmNlIG1ldGhvZHMuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGF0YVNvdXJjZSBleHRlbmRzIERhdGFTb3VyY2VNaXhpbgogICAgaW1wbGVtZW50cyBEYXRhU291cmNlIHsKICBJbmRleGVkU291cmNlPFN0cmluZz4gX3N0cmluZ0luZGV4OwogIEluZGV4ZWRTb3VyY2U8VXJpPiBfdXJpSW5kZXg7CiAgTWFwPFR5cGUsIEluZGV4ZWRTb3VyY2U+IF9nZW5lcmFsQ2FjaGVzID0ge307CgogIEFic3RyYWN0RGF0YVNvdXJjZSgpIHsKICAgIF9zdHJpbmdJbmRleCA9IG5ldyBJbmRleGVkU291cmNlPFN0cmluZz4oX3JlYWRJbnRJbnRlcm5hbCk7CiAgICBfdXJpSW5kZXggPSBuZXcgSW5kZXhlZFNvdXJjZTxVcmk+KF9yZWFkSW50SW50ZXJuYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSByZWFkQ2FjaGVkPEU+KEUgZigpKSB7CiAgICBJbmRleGVkU291cmNlIHNvdXJjZSA9CiAgICAgICAgX2dlbmVyYWxDYWNoZXNbRV0gPz89IG5ldyBJbmRleGVkU291cmNlPEU+KF9yZWFkSW50SW50ZXJuYWwpOwogICAgcmV0dXJuIHNvdXJjZS5yZWFkKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSByZWFkRW51bTxFPihMaXN0PEU+IHZhbHVlcykgewogICAgcmV0dXJuIF9yZWFkRW51bUludGVybmFsKHZhbHVlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBVcmkgcmVhZFVyaSgpIHsKICAgIHJldHVybiBfcmVhZFVyaSgpOwogIH0KCiAgVXJpIF9yZWFkVXJpKCkgewogICAgcmV0dXJuIF91cmlJbmRleC5yZWFkKF9yZWFkVXJpSW50ZXJuYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZWFkQm9vbCgpIHsKICAgIGludCB2YWx1ZSA9IF9yZWFkSW50SW50ZXJuYWwoKTsKICAgIGFzc2VydCh2YWx1ZSA9PSAwIHx8IHZhbHVlID09IDEpOwogICAgcmV0dXJuIHZhbHVlID09IDE7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVhZFN0cmluZygpIHsKICAgIHJldHVybiBfcmVhZFN0cmluZygpOwogIH0KCiAgU3RyaW5nIF9yZWFkU3RyaW5nKCkgewogICAgcmV0dXJuIF9zdHJpbmdJbmRleC5yZWFkKF9yZWFkU3RyaW5nSW50ZXJuYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHJlYWRJbnQoKSB7CiAgICByZXR1cm4gX3JlYWRJbnRJbnRlcm5hbCgpOwogIH0KCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBzdHJpbmcgdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgU3RyaW5nIF9yZWFkU3RyaW5nSW50ZXJuYWwoKTsKCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkKICAvLy8gc3ViY2xhc3Nlcy4KICBpbnQgX3JlYWRJbnRJbnRlcm5hbCgpOwoKICAvLy8gQWN0dWFsIGRlc2VyaWFsaXphdGlvbiBvZiBhIFVSSSB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICBVcmkgX3JlYWRVcmlJbnRlcm5hbCgpOwoKICAvLy8gQWN0dWFsIGRlc2VyaWFsaXphdGlvbiBvZiBhbiBlbnVtIHZhbHVlIGluIFt2YWx1ZXNdLCBpbXBsZW1lbnRlZCBieQogIC8vLyBzdWJjbGFzc2VzLgogIEUgX3JlYWRFbnVtSW50ZXJuYWw8RT4oTGlzdDxFPiB2YWx1ZXMpOwp9CgovLy8gW0RhdGFTb3VyY2VdIHRoYXQgcmVhZHMgZGF0YSBmcm9tIGEgc2VxdWVuY2Ugb2YgYnl0ZXMuCi8vLwovLy8gVGhpcyBkYXRhIHNvdXJjZSB3b3JrcyB0b2dldGhlciB3aXRoIFtCaW5hcnlTaW5rXS4KY2xhc3MgQmluYXJ5U291cmNlIGV4dGVuZHMgQWJzdHJhY3REYXRhU291cmNlIHsKICBpbnQgX2J5dGVPZmZzZXQgPSAwOwogIGZpbmFsIExpc3Q8aW50PiBfYnl0ZXM7CgogIEJpbmFyeVNvdXJjZSh0aGlzLl9ieXRlcyk7CiAgaW50IF9yZWFkQnl0ZSgpID0+IF9ieXRlc1tfYnl0ZU9mZnNldCsrXTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIF9yZWFkU3RyaW5nSW50ZXJuYWwoKSB7CiAgICBpbnQgbGVuZ3RoID0gX3JlYWRJbnRJbnRlcm5hbCgpOwogICAgTGlzdDxpbnQ+IGJ5dGVzID0gbmV3IFVpbnQ4TGlzdChsZW5ndGgpOwogICAgYnl0ZXMuc2V0UmFuZ2UoMCwgYnl0ZXMubGVuZ3RoLCBfYnl0ZXMsIF9ieXRlT2Zmc2V0KTsKICAgIF9ieXRlT2Zmc2V0ICs9IGJ5dGVzLmxlbmd0aDsKICAgIHJldHVybiB1dGY4LmRlY29kZShieXRlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX3JlYWRJbnRJbnRlcm5hbCgpIHsKICAgIHZhciBieXRlID0gX3JlYWRCeXRlKCk7CiAgICBpZiAoYnl0ZSAmIDB4ODAgPT0gMCkgewogICAgICAvLyAweHh4eHh4eAogICAgICByZXR1cm4gYnl0ZTsKICAgIH0gZWxzZSBpZiAoYnl0ZSAmIDB4NDAgPT0gMCkgewogICAgICAvLyAxMHh4eHh4eAogICAgICByZXR1cm4gKChieXRlICYgMHgzRikgPDwgOCkgfCBfcmVhZEJ5dGUoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIDExeHh4eHh4CiAgICAgIHJldHVybiAoKGJ5dGUgJiAweDNGKSA8PCAyNCkgfAogICAgICAgICAgKF9yZWFkQnl0ZSgpIDw8IDE2KSB8CiAgICAgICAgICAoX3JlYWRCeXRlKCkgPDwgOCkgfAogICAgICAgICAgX3JlYWRCeXRlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBVcmkgX3JlYWRVcmlJbnRlcm5hbCgpIHsKICAgIFN0cmluZyB0ZXh0ID0gX3JlYWRTdHJpbmcoKTsKICAgIHJldHVybiBVcmkucGFyc2UodGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFIF9yZWFkRW51bUludGVybmFsPEU+KExpc3Q8RT4gdmFsdWVzKSB7CiAgICBpbnQgaW5kZXggPSBfcmVhZEludEludGVybmFsKCk7CiAgICBhc3NlcnQoCiAgICAgICAgMCA8PSBpbmRleCAmJiBpbmRleCA8IHZhbHVlcy5sZW5ndGgsCiAgICAgICAgIkludmFsaWQgZGF0YSBraW5kIGluZGV4LiAiCiAgICAgICAgIkV4cGVjdGVkIG9uZSBvZiAkdmFsdWVzLCBmb3VuZCBpbmRleCAkaW5kZXguIik7CiAgICByZXR1cm4gdmFsdWVzW2luZGV4XTsKICB9Cn0KgSoATk48ARoXASNDHFBQGgFRNAY8Ix8BTDsGPBw5ATMTAUARAUsOBjwhFwEyFwFFBjwkHQFPOwY8HzcBSk86BjwhRQFQBkwiBh8NMAYhAS8RAgFDNwwgIBQSBhEEAQw6GzAnJhUGEQQBDBggFBgGEQQBDB4gFBsGEQQBDDgbMDEmHgYRBAEMRhswHSYhFRgGEAQCAUcZIR0nASABPgZOGBocTiIbGB0eHRQNHAYEAgFNGTocJiAwARlAOgQBDBsbRhsEAQwiJgQBDBIXBAETLQQBDBQkJhcEAQwYGgQBGTMEAQwSHwQBSyABTRIaAUgaAUoSKgIBOwQ3MBcaAR0sAQwhJS06IR8EAQwbHBwSEyMSMQ0SJSAfFwYEAQwbIRwEAQwrJAwtJDkaBAIBK3BhY2thZ2U6ZGFydDJqc19pbmZvL3NyYy9iaW5hcnkvc291cmNlLmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvc2NvcGVfdmlzaXRvci5kYXJ0wACeWS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9jb25zdGFudF9ldmFsdWF0b3IuZGFydCcgYXMgaXI7CgppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnc2NvcGUuZGFydCc7CgovLy8gVGhpcyBidWlsZGVyIHdhbGtzIHRoZSBjb2RlIHRvIGRldGVybWluZSB3aGF0IHZhcmlhYmxlcyBhcmUKLy8vIGFzc2lnbmVkL2NhcHR1cmVkL2ZyZWUgYXQgdmFyaW91cyBwb2ludHMgdG8gYnVpbGQgYSBbQ2xvc3VyZVNjb3BlTW9kZWxdIGFuZAovLy8gYSBbVmFyaWFibGVTY29wZU1vZGVsXSB0aGF0IGNhbiByZXNwb25kIHRvIHF1ZXJpZXMgYWJvdXQgaG93IGEgcGFydGljdWxhcgovLy8gdmFyaWFibGUgaXMgYmVpbmcgdXNlZCBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvZGUuCmNsYXNzIFNjb3BlTW9kZWxCdWlsZGVyIGV4dGVuZHMgaXIuVmlzaXRvcjxJbml0aWFsaXplckNvbXBsZXhpdHk+CiAgICB3aXRoIFZhcmlhYmxlQ29sbGVjdG9yTWl4aW4gewogIGZpbmFsIGlyLkNvbnN0YW50RXZhbHVhdG9yIF9jb25zdGFudEV2YWx1YXRvcjsKCiAgZmluYWwgQ2xvc3VyZVNjb3BlTW9kZWwgX21vZGVsID0gbmV3IENsb3N1cmVTY29wZU1vZGVsKCk7CgogIC8vLyBBIG1hcCBvZiBlYWNoIHZpc2l0ZWQgY2FsbCBub2RlIHdpdGggdGhlIGFzc29jaWF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdAogIC8vLyB2YXJpYWJsZXMgYXJlIGNhcHR1cmVkL3VzZWQuIEVhY2ggaXIuTm9kZSBrZXkgY29ycmVzcG9uZHMgdG8gYSBzY29wZSB0aGF0CiAgLy8vIHdhcyBlbmNvdW50ZXJlZCB3aGlsZSB2aXNpdGluZyBhIGNsb3N1cmUgKGluaXRpYWxseSBjYWxsZWQgdGhyb3VnaAogIC8vLyBbdHJhbnNsYXRlTGF6eUluaXRpYWxpemVyXSBvciBbdHJhbnNsYXRlQ29uc3RydWN0b3JPclByb2NlZHVyZV0pLgogIE1hcDxpci5Ob2RlLCBLZXJuZWxDYXB0dXJlZFNjb3BlPiBnZXQgX3Njb3Blc0NhcHR1cmVkSW5DbG9zdXJlTWFwID0+CiAgICAgIF9tb2RlbC5jYXB0dXJlZFNjb3Blc01hcDsKCiAgLy8vIEEgbWFwIG9mIHRoZSBub2RlcyB0aGF0IHdlIGhhdmUgZmxhZ2dlZCBhcyBuZWNlc3NhcnkgdG8gZ2VuZXJhdGUgY2xvc3VyZQogIC8vLyBjbGFzc2VzIGZvciBpbiBhIGxhdGVyIHN0YWdlLiBXZSBtYXAgdGhhdCBub2RlIHRvIGluZm9ybWF0aW9uIGFzY2VydGFpbmVkCiAgLy8vIGFib3V0IHZhcmlhYmxlIHVzYWdlIGluIHRoZSBzdXJyb3VuZGluZyBzY29wZS4KICBNYXA8aXIuVHJlZU5vZGUsIEtlcm5lbFNjb3BlSW5mbz4gZ2V0IF9jbG9zdXJlc1RvR2VuZXJhdGUgPT4KICAgICAgX21vZGVsLmNsb3N1cmVzVG9HZW5lcmF0ZTsKCiAgLy8vIFRoZSBsb2NhbCB2YXJpYWJsZXMgdGhhdCBoYXZlIGJlZW4gZGVjbGFyZWQgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCiAgTGlzdDxpci5Ob2RlIC8qIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gfCBUeXBlUGFyYW1ldGVyVHlwZVdpdGhDb250ZXh0ICovID4KICAgICAgX3Njb3BlVmFyaWFibGVzOwoKICAvLy8gUG9pbnRlciB0byB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGNsb3N1cmUgaXMgZXhlY3V0ZWQuCiAgLy8vIEZvciBleGFtcGxlLCBpbiB0aGUgZXhwcmVzc2lvbiBgdmFyIGZvbyA9ICgpID0+IDMgKyBpO2AsIHRoZSBleGVjdXRhYmxlCiAgLy8vIGNvbnRleHQgYXMgd2Ugd2FsayB0aGUgbm9kZXMgaW4gdGhhdCBleHByZXNzaW9uIGlzIHRoZSBpci5GaWVsZCBgZm9vYC4KICBpci5UcmVlTm9kZSBfZXhlY3V0YWJsZUNvbnRleHQ7CgogIC8vLyBBIGZsYWcgdG8gaW5kaWNhdGUgaWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYSBjbG9zdXJlLgogIGJvb2wgX2lzSW5zaWRlQ2xvc3VyZSA9IGZhbHNlOwoKICAvLy8gUG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbm9kZSB3aGVyZSB0aGlzIGNsb3N1cmUgYnVpbGRlciBzdGFydGVkLgogIGlyLk5vZGUgX291dGVybW9zdE5vZGU7CgogIC8vLyBLZWVwIHRyYWNrIG9mIHRoZSBtdXRhdGVkIGxvY2FsIHZhcmlhYmxlcyBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gYm94CiAgLy8vIG5vbi1tdXRhdGVkIHZhcmlhYmxlcy4gV2Uga25vdyB0aGVzZSBhcmUgb25seSBWYXJpYWJsZURlY2xhcmF0aW9ucyBiZWNhdXNlCiAgLy8vIHR5cGUgdmFyaWFibGUgdHlwZXMgYW5kIGB0aGlzYCB0eXBlcyBjYW4ndCBiZSBtdXRhdGVkIQogIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBfbXV0YXRlZFZhcmlhYmxlcyA9CiAgICAgIG5ldyBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4oKTsKCiAgLy8vIFRoZSBzZXQgb2YgdmFyaWFibGVzIHRoYXQgYXJlIGFjY2Vzc2VkIGluIHNvbWUgZm9ybSwgd2hldGhlciB0aGV5IGFyZQogIC8vLyBtdXRhdGVkIG9yIG5vdC4KICBTZXQ8aXIuTm9kZSAvKiBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHwgVHlwZVBhcmFtZXRlclR5cGVXaXRoQ29udGV4dCAqLyA+CiAgICAgIF9jYXB0dXJlZFZhcmlhYmxlcyA9IG5ldyBTZXQ8aXIuTm9kZT4oKTsKCiAgLy8vIElmIHRydWUsIHRoZSB2aXNpdG9yIGlzIGN1cnJlbnRseSB0cmF2ZXJzaW5nIHNvbWUgbm9kZXMgdGhhdCBhcmUgaW5zaWRlIGEKICAvLy8gdHJ5IGJsb2NrLgogIGJvb2wgX2luVHJ5ID0gZmFsc2U7CgogIC8vLyBUaGUgY3VycmVudCBzY29wZSB3ZSBhcmUgaW4uCiAgS2VybmVsU2NvcGVJbmZvIF9jdXJyZW50U2NvcGVJbmZvOwoKICBib29sIF9oYXNUaGlzTG9jYWw7CgogIC8vLyBLZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGJveGVzIHRoYXQgd2UndmUgY3JlYXRlZCBzbyB0aGF0IHRoZXkgZWFjaAogIC8vLyBoYXZlIHVuaXF1ZSBuYW1lcy4KICBpbnQgX2JveENvdW50ZXIgPSAwOwoKICAvLy8gVGhlIGN1cnJlbnQgdXNhZ2Ugb2YgYSB0eXBlIGFubm90YXRpb24uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXBkYXRlZCBpbiB0aGUgdmlzaXRvciB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuY29uZGl0aW9uYWwKICAvLy8gdHlwZSB2YXJpYWJsZSB1c2FnZSwgc3VjaCBhcyB0eXBlIGxpdGVyYWxzIGFuZCBpcyB0ZXN0cywgYW5kIGNvbmRpdGlvbmFsCiAgLy8vIHR5cGUgdmFyaWFibGUgdXNhZ2UsIHN1Y2ggYXMgdHlwZSBhcmd1bWVudCBpbiBtZXRob2QgaW52b2NhdGlvbnMuCiAgVmFyaWFibGVVc2UgX2N1cnJlbnRUeXBlVXNhZ2U7CgogIFNjb3BlTW9kZWxCdWlsZGVyKHRoaXMuX2NvbnN0YW50RXZhbHVhdG9yKTsKCiAgU2NvcGVNb2RlbCBjb21wdXRlTW9kZWwoaXIuTWVtYmVyIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQWJzdHJhY3QgJiYgIW5vZGUuaXNFeHRlcm5hbCkgewogICAgICByZXR1cm4gY29uc3QgU2NvcGVNb2RlbCgKICAgICAgICAgIGluaXRpYWxpemVyQ29tcGxleGl0eTogY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKSk7CiAgICB9CgogICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgX2hhc1RoaXNMb2NhbCA9IHRydWU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlICYmIG5vZGUua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgX2hhc1RoaXNMb2NhbCA9IGZhbHNlOwogICAgfSBlbHNlIGlmIChub2RlLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgX2hhc1RoaXNMb2NhbCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICBfaGFzVGhpc0xvY2FsID0gZmFsc2U7CiAgICB9CgogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGluaXRpYWxpemVyQ29tcGxleGl0eSA9CiAgICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICAgIGlmIChub2RlIGlzIGlyLkZpZWxkKSB7CiAgICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICBpbml0aWFsaXplckNvbXBsZXhpdHkgPSBub2RlLmFjY2VwdCh0aGlzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0aWFsaXplckNvbXBsZXhpdHkgPSBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICAgICAgICBfbW9kZWwuc2NvcGVJbmZvID0gbmV3IEtlcm5lbFNjb3BlSW5mbyhfaGFzVGhpc0xvY2FsKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG5vZGUgaXMgaXIuUHJvY2VkdXJlIHx8IG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpOwogICAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIHJldHVybiBuZXcgU2NvcGVNb2RlbCgKICAgICAgICBjbG9zdXJlU2NvcGVNb2RlbDogX21vZGVsLAogICAgICAgIHZhcmlhYmxlU2NvcGVNb2RlbDogdmFyaWFibGVTY29wZU1vZGVsLAogICAgICAgIGluaXRpYWxpemVyQ29tcGxleGl0eTogaW5pdGlhbGl6ZXJDb21wbGV4aXR5KTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpID0+CiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoJ1VuaGFuZGxlZCBub2RlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KScpOwoKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXROb2RlKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGU/LmFjY2VwdCh0aGlzKTsKICB9CgogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE5vZGVzKExpc3Q8aXIuTm9kZT4gbm9kZXMpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CiAgICBmb3IgKGlyLk5vZGUgbm9kZSBpbiBub2RlcykgewogICAgICBjb21wbGV4aXR5ID0gY29tcGxleGl0eS5jb21iaW5lKHZpc2l0Tm9kZShub2RlKSk7CiAgICB9CiAgICByZXR1cm4gY29tcGxleGl0eTsKICB9CgogIC8vLyBVcGRhdGUgdGhlIFtDYXB0dXJlZFNjb3BlXSBvYmplY3QgY29ycmVzcG9uZGluZyB0bwogIC8vLyB0aGlzIG5vZGUgaWYgYW55IHZhcmlhYmxlcyBhcmUgY2FwdHVyZWQuCiAgdm9pZCBhdHRhY2hDYXB0dXJlZFNjb3BlVmFyaWFibGVzKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBjYXB0dXJlZFZhcmlhYmxlc0ZvclNjb3BlID0KICAgICAgICBuZXcgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+KCk7CgogICAgZm9yIChpci5Ob2RlIHZhcmlhYmxlIGluIF9zY29wZVZhcmlhYmxlcykgewogICAgICAvLyBObyBuZWVkIHRvIGJveCBub24tYXNzaWduYWJsZSBlbGVtZW50cy4KICAgICAgaWYgKHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgICBpZiAodmFyaWFibGUuaXNGaW5hbCB8fCB2YXJpYWJsZS5pc0NvbnN0KSBjb250aW51ZTsKICAgICAgICBpZiAoIV9tdXRhdGVkVmFyaWFibGVzLmNvbnRhaW5zKHZhcmlhYmxlKSkgY29udGludWU7CiAgICAgICAgaWYgKF9jYXB0dXJlZFZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpIHsKICAgICAgICAgIGNhcHR1cmVkVmFyaWFibGVzRm9yU2NvcGUuYWRkKHZhcmlhYmxlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICghY2FwdHVyZWRWYXJpYWJsZXNGb3JTY29wZS5pc0VtcHR5KSB7CiAgICAgIGFzc2VydChfbW9kZWwuc2NvcGVJbmZvICE9IG51bGwpOwogICAgICBLZXJuZWxTY29wZUluZm8gZnJvbSA9IF9tb2RlbC5zY29wZUluZm87CgogICAgICBLZXJuZWxDYXB0dXJlZFNjb3BlIGNhcHR1cmVkU2NvcGU7CiAgICAgIHZhciBub2RlQm94ID0gbmV3IE5vZGVCb3goZ2V0Qm94TmFtZSgpLCBfZXhlY3V0YWJsZUNvbnRleHQpOwogICAgICBpZiAobm9kZSBpcyBpci5Gb3JTdGF0ZW1lbnQgfHwKICAgICAgICAgIG5vZGUgaXMgaXIuRm9ySW5TdGF0ZW1lbnQgfHwKICAgICAgICAgIG5vZGUgaXMgaXIuV2hpbGVTdGF0ZW1lbnQgfHwKICAgICAgICAgIG5vZGUgaXMgaXIuRG9TdGF0ZW1lbnQpIHsKICAgICAgICBjYXB0dXJlZFNjb3BlID0gbmV3IEtlcm5lbENhcHR1cmVkTG9vcFNjb3BlKAogICAgICAgICAgICBjYXB0dXJlZFZhcmlhYmxlc0ZvclNjb3BlLAogICAgICAgICAgICBub2RlQm94LAogICAgICAgICAgICBbXSwKICAgICAgICAgICAgZnJvbS5sb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgICAgICAgIGZyb20uZnJlZVZhcmlhYmxlcywKICAgICAgICAgICAgZnJvbS5mcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICAgICAgICBmcm9tLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgICAgICAgIGZyb20udGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgICAgICAgIF9oYXNUaGlzTG9jYWwpOwogICAgICB9IGVsc2UgewogICAgICAgIGNhcHR1cmVkU2NvcGUgPSBuZXcgS2VybmVsQ2FwdHVyZWRTY29wZSgKICAgICAgICAgICAgY2FwdHVyZWRWYXJpYWJsZXNGb3JTY29wZSwKICAgICAgICAgICAgbm9kZUJveCwKICAgICAgICAgICAgZnJvbS5sb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgICAgICAgIGZyb20uZnJlZVZhcmlhYmxlcywKICAgICAgICAgICAgZnJvbS5mcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICAgICAgICBmcm9tLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgICAgICAgIGZyb20udGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgICAgICAgIF9oYXNUaGlzTG9jYWwpOwogICAgICB9CiAgICAgIF9tb2RlbC5zY29wZUluZm8gPSBfc2NvcGVzQ2FwdHVyZWRJbkNsb3N1cmVNYXBbbm9kZV0gPSBjYXB0dXJlZFNjb3BlOwogICAgfQogIH0KCiAgLy8vIEdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgZm9yIHRoZSBbX2JveENvdW50ZXJddGggYm94IGZpZWxkLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgW05vZGVCb3hdcyBhbmQgW0JveExvY2FsXXMsIGFuZCBtdXN0CiAgLy8vIHRoZXJlZm9yZSBiZSB1bmlxdWUgdG8gYXZvaWQgYnJlYWtpbmcgYW4gaW52YXJpYW50IGluIHRoZSBlbGVtZW50IG1vZGVsCiAgLy8vIChjbGFzc2VzIGNhbm5vdCBkZWNsYXJlIG11bHRpcGxlIGZpZWxkcyB3aXRoIHRoZSBzYW1lIG5hbWUpLgogIC8vLwogIC8vLyBBbHNvLCB0aGUgbmFtZXMgc2hvdWxkIGJlIGRpc3RpbmN0IGZyb20gcmVhbCBmaWVsZCBuYW1lcyB0byBwcmV2ZW50CiAgLy8vIGNsYXNoZXMgd2l0aCBzZWxlY3RvcnMgZm9yIHRob3NlIGZpZWxkcy4KICAvLy8KICAvLy8gVGhlc2UgbmFtZXMgYXJlIG5vdCB1c2VkIGluIGdlbmVyYXRlZCBjb2RlLCBqdXN0IGFzIGVsZW1lbnQgbmFtZS4KICBTdHJpbmcgZ2V0Qm94TmFtZSgpIHsKICAgIHJldHVybiAiX2JveF8ke19ib3hDb3VudGVyKyt9IjsKICB9CgogIC8vLyBQZXJmb3JtIGJvb2sta2VlcGluZyB3aXRoIHRoZSBjdXJyZW50IHNldCBvZiBsb2NhbCB2YXJpYWJsZXMgdGhhdCBoYXZlCiAgLy8vIGJlZW4gc2VlbiB0aHVzIGZhciBiZWZvcmUgZW50ZXJpbmcgdGhpcyBuZXcgc2NvcGUuCiAgdm9pZCBlbnRlck5ld1Njb3BlKGlyLk5vZGUgbm9kZSwgdm9pZCB2aXNpdE5ld1Njb3BlKCkpIHsKICAgIExpc3Q8aXIuTm9kZT4gb2xkU2NvcGVWYXJpYWJsZXMgPSBfc2NvcGVWYXJpYWJsZXM7CiAgICBfc2NvcGVWYXJpYWJsZXMgPSA8aXIuTm9kZT5bXTsKICAgIHZpc2l0TmV3U2NvcGUoKTsKICAgIGF0dGFjaENhcHR1cmVkU2NvcGVWYXJpYWJsZXMobm9kZSk7CiAgICBfbXV0YXRlZFZhcmlhYmxlcy5yZW1vdmVBbGwoX3Njb3BlVmFyaWFibGVzKTsKICAgIF9zY29wZVZhcmlhYmxlcyA9IG9sZFNjb3BlVmFyaWFibGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0TmFtZWRFeHByZXNzaW9uKGlyLk5hbWVkRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHJ5Q2F0Y2goaXIuVHJ5Q2F0Y2ggbm9kZSkgewogICAgYm9vbCBvbGRJblRyeSA9IF9pblRyeTsKICAgIF9pblRyeSA9IHRydWU7CiAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgfSk7CiAgICB2aXNpdE5vZGVzKG5vZGUuY2F0Y2hlcyk7CiAgICBfaW5UcnkgPSBvbGRJblRyeTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHJ5RmluYWxseShpci5UcnlGaW5hbGx5IG5vZGUpIHsKICAgIGJvb2wgb2xkSW5UcnkgPSBfaW5Ucnk7CiAgICBfaW5UcnkgPSB0cnVlOwogICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIH0pOwogICAgdmlzaXROb2RlKG5vZGUuZmluYWxpemVyKTsKICAgIF9pblRyeSA9IG9sZEluVHJ5OwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRWYXJpYWJsZUdldChpci5WYXJpYWJsZUdldCBub2RlKSB7CiAgICBfbWFya1ZhcmlhYmxlQXNVc2VkKG5vZGUudmFyaWFibGUsIFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIC8vIERvbid0IHZpc2l0IGBub2RlLnByb21vdGVkVHlwZWAuCiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFZhcmlhYmxlU2V0KGlyLlZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIF9tdXRhdGVkVmFyaWFibGVzLmFkZChub2RlLnZhcmlhYmxlKTsKICAgIF9tYXJrVmFyaWFibGVBc1VzZWQobm9kZS52YXJpYWJsZSwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgdmlzaXRJbkNvbnRleHQobm9kZS52YXJpYWJsZS50eXBlLCBWYXJpYWJsZVVzZS5sb2NhbFR5cGUpOwogICAgdmlzaXROb2RlKG5vZGUudmFsdWUpOwogICAgcmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlKG5vZGUudmFyaWFibGUpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICB2b2lkIF9oYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uKAogICAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIFZhcmlhYmxlVXNlIHVzYWdlKSB7CiAgICBpZiAoIW5vZGUuaXNGaWVsZEZvcm1hbCkgewogICAgICBfc2NvcGVWYXJpYWJsZXMuYWRkKG5vZGUpOwogICAgfQoKICAgIHZpc2l0SW5Db250ZXh0KG5vZGUudHlwZSwgdXNhZ2UpOwogICAgdmlzaXROb2RlKG5vZGUuaW5pdGlhbGl6ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIF9oYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUsIFZhcmlhYmxlVXNlLmxvY2FsVHlwZSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIC8vLyBBZGQgdGhpcyB2YXJpYWJsZSB0byB0aGUgc2V0IG9mIGZyZWUgdmFyaWFibGVzIGlmIGFwcHJvcHJpYXRlIGFuZCBhZGQgdG8KICAvLy8gdGhlIHRhbGx5IG9mIHZhcmlhYmxlcyB1c2VkIGluIHRyeSBvciBzeW5jIGJsb2Nrcy4KICAvLy8gSWYgW29ubHlGb3JSdGlDaGVja3NdIGlzIHRydWUsIGFkZCB0byB0aGUgZnJlZVZhcmlhYmxlc0ZvclJ0aSBzZXQgaW5zdGVhZAogIC8vLyBvZiBmcmVlVmFyaWFibGVzIGFzIHdlIHdpbGwgb25seSB1c2UgaXQgaWYgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIGlzCiAgLy8vIGNoZWNrZWQuCiAgdm9pZCBfbWFya1ZhcmlhYmxlQXNVc2VkKAogICAgICBpci5Ob2RlIC8qIFZhcmlhYmxlRGVjbGFyYXRpb24gfCBUeXBlUGFyYW1ldGVyVHlwZVdpdGhDb250ZXh0ICovIHZhcmlhYmxlLAogICAgICBWYXJpYWJsZVVzZSB1c2FnZSkgewogICAgYXNzZXJ0KHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gfHwKICAgICAgICB2YXJpYWJsZSBpcyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQpOwogICAgYXNzZXJ0KHVzYWdlICE9IG51bGwpOwogICAgaWYgKF9pc0luc2lkZUNsb3N1cmUgJiYgIV9pbkN1cnJlbnRDb250ZXh0KHZhcmlhYmxlKSkgewogICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgZGVjbGFyZWQgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gYW5kIHRoZSBlbGVtZW50CiAgICAgIC8vIGlzIG5vdCB0aGUgY2xvc3VyZSBpdHNlbGYgd2UgbmVlZCB0byBtYXJrIHRoZSBlbGVtZW50IGFzIGZyZWUgdmFyaWFibGUuCiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgY2hlY2sgb24gW2luc2lkZUNsb3N1cmVdIGlzIG5vdCBqdXN0IGFuCiAgICAgIC8vIG9wdGltaXphdGlvbjogZmFjdG9yaWVzIGhhdmUgdHlwZSBwYXJhbWV0ZXJzIGFzIGZ1bmN0aW9uCiAgICAgIC8vIHBhcmFtZXRlcnMsIGFuZCB0eXBlIHBhcmFtZXRlcnMgYXJlIGRlY2xhcmVkIGluIHRoZSBjbGFzcywgbm90CiAgICAgIC8vIHRoZSBmYWN0b3J5LgogICAgICBpZiAodXNhZ2UgPT0gVmFyaWFibGVVc2UuZXhwbGljaXQpIHsKICAgICAgICBfY3VycmVudFNjb3BlSW5mby5mcmVlVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2N1cnJlbnRTY29wZUluZm8uZnJlZVZhcmlhYmxlc0ZvclJ0aQogICAgICAgICAgICAucHV0SWZBYnNlbnQodmFyaWFibGUsICgpID0+IG5ldyBTZXQ8VmFyaWFibGVVc2U+KCkpCiAgICAgICAgICAgIC5hZGQodXNhZ2UpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2luVHJ5ICYmIHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgX2N1cnJlbnRTY29wZUluZm8ubG9jYWxzVXNlZEluVHJ5T3JTeW5jLmFkZCh2YXJpYWJsZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRUaGlzRXhwcmVzc2lvbihpci5UaGlzRXhwcmVzc2lvbiB0aGlzRXhwcmVzc2lvbikgewogICAgaWYgKF9oYXNUaGlzTG9jYWwpIHsKICAgICAgX3JlZ2lzdGVyTmVlZHNUaGlzKFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIH0KICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHlwZVBhcmFtZXRlcihpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIpIHsKICAgIGlyLlRyZWVOb2RlIGNvbnRleHQgPSBfZXhlY3V0YWJsZUNvbnRleHQ7CiAgICBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgdHlwZVZhcmlhYmxlID0gbmV3IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCgKICAgICAgICBuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlciksCiAgICAgICAgLy8gSWYgdGhpcyB0eXBlUGFyYW1ldGVyIGlzIHBhcnQgb2YgYSB0eXBlZGVmIHRoZW4gaXRzIHBhcmVudCBpcwogICAgICAgIC8vIG51bGwgYmVjYXVzZSBpdCBoYXMgbm8gY29udGV4dC4gSnVzdCBwYXNzIGluIG51bGwgZm9yIHRoZQogICAgICAgIC8vIGNvbnRleHQgaW4gdGhhdCBjYXNlLgogICAgICAgIHR5cGVQYXJhbWV0ZXIucGFyZW50ICE9IG51bGwgPyB0eXBlUGFyYW1ldGVyLnBhcmVudC5wYXJlbnQgOiBudWxsKTsKICAgIGlmIChfaXNJbnNpZGVDbG9zdXJlICYmIGNvbnRleHQgaXMgaXIuUHJvY2VkdXJlICYmIGNvbnRleHQuaXNGYWN0b3J5KSB7CiAgICAgIC8vIFRoaXMgaXMgYSBjbG9zdXJlIGluIGEgZmFjdG9yeSBjb25zdHJ1Y3Rvci4gIFNpbmNlIHRoZXJlIGlzIG5vCiAgICAgIC8vIFs6dGhpczpdLCB3ZSBoYXZlIHRvIG1hcmsgdGhlIHR5cGUgYXJndW1lbnRzIGFzIGZyZWUgdmFyaWFibGVzIHRvCiAgICAgIC8vIGNhcHR1cmUgdGhlbSBpbiB0aGUgY2xvc3VyZS4KICAgICAgX3VzZVR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlLCBfY3VycmVudFR5cGVVc2FnZSk7CiAgICB9CgogICAgaWYgKF9leGVjdXRhYmxlQ29udGV4dCBpcyBpci5NZW1iZXIgJiYgX2V4ZWN1dGFibGVDb250ZXh0IGlzISBpci5GaWVsZCkgewogICAgICAvLyBJbiBjaGVja2VkIG1vZGUsIHVzaW5nIGEgdHlwZSB2YXJpYWJsZSBpbiBhIHR5cGUgYW5ub3RhdGlvbiBtYXkgbGVhZAogICAgICAvLyB0byBhIHJ1bnRpbWUgdHlwZSBjaGVjayB0aGF0IG5lZWRzIHRvIGFjY2VzcyB0aGUgdHlwZSBhcmd1bWVudCBhbmQKICAgICAgLy8gdGhlcmVmb3JlIHRoZSBjbG9zdXJlIG5lZWRzIGEgdGhpcy1lbGVtZW50LCBpZiBpdCBpcyBub3QgaW4gYSBmaWVsZAogICAgICAvLyBpbml0aWFsaXplcjsgZmllbGQgaW5pdGlhbGl6ZXJzIGFyZSBldmFsdWF0ZWQgaW4gYSBjb250ZXh0IHdoZXJlCiAgICAgIC8vIHRoZSB0eXBlIGFyZ3VtZW50cyBhcmUgYXZhaWxhYmxlIGluIGxvY2Fscy4KCiAgICAgIGlmIChfaGFzVGhpc0xvY2FsKSB7CiAgICAgICAgX3JlZ2lzdGVyTmVlZHNUaGlzKF9jdXJyZW50VHlwZVVzYWdlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfdXNlVHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUsIF9jdXJyZW50VHlwZVVzYWdlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwogIH0KCiAgLy8vIEFkZCBgdGhpc2AgYXMgYSB2YXJpYWJsZSB0aGF0IG5lZWRzIHRvIGJlIGFjY2Vzc2VkIChhbmQgdGh1cyBtYXkgYmVjb21lIGEKICAvLy8gZnJlZS9jYXB0dXJlZCB2YXJpYWJsZS4KICAvLy8gSWYgW29ubHlJZk5lZWRzUnRpXSBpcyB0cnVlLCBzZXQgdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGkgdG8gdHJ1ZQogIC8vLyBpbnN0ZWFkIG9mIHRoaXNVc2VkQXNGcmVlVmFyaWFibGUgYXMgd2Ugd2lsbCBvbmx5IHVzZSBgdGhpc2AgaWYgcnVudGltZQogIC8vLyB0eXBlIGluZm9ybWF0aW9uIGlzIGNoZWNrZWQuCiAgdm9pZCBfcmVnaXN0ZXJOZWVkc1RoaXMoVmFyaWFibGVVc2UgdXNhZ2UpIHsKICAgIGlmIChfaXNJbnNpZGVDbG9zdXJlKSB7CiAgICAgIGlmICh1c2FnZSA9PSBWYXJpYWJsZVVzZS5leHBsaWNpdCkgewogICAgICAgIF9jdXJyZW50U2NvcGVJbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIF9jdXJyZW50U2NvcGVJbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLmFkZCh1c2FnZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZvckluU3RhdGVtZW50KGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIC8vIFdlIG5lZWQgdG8gc2V0IGBpblRyeWAgdG8gdHJ1ZSBpZiB0aGlzIGlzIGFuIGFzeW5jIGZvci1pbiBiZWNhdXNlIHdlCiAgICAvLyBkZXN1Z2FyIGl0IGludG8gYSB0cnktZmluYWxseSBpbiB0aGUgU1NBIHBoYXNlLgogICAgYm9vbCBvbGRJblRyeSA9IF9pblRyeTsKICAgIGlmIChub2RlLmlzQXN5bmMpIHsKICAgICAgX2luVHJ5ID0gdHJ1ZTsKICAgIH0KICAgIGVudGVyTmV3U2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS52YXJpYWJsZSk7CiAgICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgICB2aXNpdE5vZGUobm9kZS5pdGVyYWJsZSk7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICAgIH0pOwogICAgfSk7CiAgICBpZiAobm9kZS5pc0FzeW5jKSB7CiAgICAgIF9pblRyeSA9IG9sZEluVHJ5OwogICAgfQogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRXaGlsZVN0YXRlbWVudChpci5XaGlsZVN0YXRlbWVudCBub2RlKSB7CiAgICBlbnRlck5ld1Njb3BlKG5vZGUsICgpIHsKICAgICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICAgIHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IG5vZGUpIHsKICAgIGVudGVyTmV3U2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Rm9yU3RhdGVtZW50KGlyLkZvclN0YXRlbWVudCBub2RlKSB7CiAgICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGJveGVkTG9vcFZhcmlhYmxlcyA9CiAgICAgICAgPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgICBlbnRlck5ld1Njb3BlKG5vZGUsICgpIHsKICAgICAgLy8gRmlyc3QgdmlzaXQgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFuZCB1cGRhdGUgc3RlcHMgc28gd2UgY2FuIGVhc2lseQogICAgICAvLyBjaGVjayBpZiBhIGxvb3AgdmFyaWFibGUgd2FzIGNhcHR1cmVkIGluIG9uZSBvZiB0aGVzZSBzdWJleHByZXNzaW9ucy4KICAgICAgdmlzaXROb2Rlcyhub2RlLnZhcmlhYmxlcyk7CiAgICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgICB2aXNpdE5vZGVzKG5vZGUudXBkYXRlcyk7CiAgICAgIH0pOwoKICAgICAgLy8gTG9vcCB2YXJpYWJsZXMgdGhhdCBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIHlldCBjYW4gc2FmZWx5IGJlIGZsYWdnZWQgYXMKICAgICAgLy8gbm9uLW11dGF0ZWQsIGJlY2F1c2Ugbm8gbmVzdGVkIGZ1bmN0aW9uIGNhbiBvYnNlcnZlIHRoZSBtdXRhdGlvbi4KICAgICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIG5vZGUudmFyaWFibGVzKSB7CiAgICAgICAgaWYgKCFfY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpKSB7CiAgICAgICAgICBfbXV0YXRlZFZhcmlhYmxlcy5yZW1vdmUodmFyaWFibGUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gVmlzaXQgY29uZGl0aW9uIGFuZCBib2R5LgogICAgICAvLyBUaGlzIG11c3QgaGFwcGVuIGFmdGVyIHRoZSBhYm92ZSwgc28gYW55IGxvb3AgdmFyaWFibGVzIG11dGF0ZWQgaW4gdGhlCiAgICAgIC8vIGNvbmRpdGlvbiBvciBib2R5IGFyZSBpbmRlZWQgZmxhZ2dlZCBhcyBtdXRhdGVkLgogICAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgICAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgICAgfSk7CgogICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBkZWNsYXJlZCBsb29wIHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgYm94ZWQuCiAgICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBub2RlLnZhcmlhYmxlcykgewogICAgICAgIC8vIE5vbi1tdXRhdGVkIHZhcmlhYmxlcyBzaG91bGQgbm90IGJlIGJveGVkLiAgVGhlIF9tdXRhdGVkVmFyaWFibGVzIHNldAogICAgICAgIC8vIGdldHMgY2xlYXJlZCB3aGVuIGBlbnRlck5ld1Njb3BlYCByZXR1cm5zLCBzbyBjaGVjayBpdCBoZXJlLgogICAgICAgIGlmIChfY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpICYmCiAgICAgICAgICAgIF9tdXRhdGVkVmFyaWFibGVzLmNvbnRhaW5zKHZhcmlhYmxlKSkgewogICAgICAgICAgYm94ZWRMb29wVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIEtlcm5lbENhcHR1cmVkU2NvcGUgc2NvcGUgPSBfc2NvcGVzQ2FwdHVyZWRJbkNsb3N1cmVNYXBbbm9kZV07CiAgICBpZiAoc2NvcGUgIT0gbnVsbCkgewogICAgICBfc2NvcGVzQ2FwdHVyZWRJbkNsb3N1cmVNYXBbbm9kZV0gPSBuZXcgS2VybmVsQ2FwdHVyZWRMb29wU2NvcGUoCiAgICAgICAgICBzY29wZS5ib3hlZFZhcmlhYmxlcywKICAgICAgICAgIHNjb3BlLmNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3IsCiAgICAgICAgICBib3hlZExvb3BWYXJpYWJsZXMsCiAgICAgICAgICBzY29wZS5sb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgICAgICBzY29wZS5mcmVlVmFyaWFibGVzLAogICAgICAgICAgc2NvcGUuZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgICAgIHNjb3BlLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgICAgICBzY29wZS50aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSwKICAgICAgICAgIHNjb3BlLmhhc1RoaXNMb2NhbCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChfaGFzVGhpc0xvY2FsKSB7CiAgICAgIF9yZWdpc3Rlck5lZWRzVGhpcyhWYXJpYWJsZVVzZS5leHBsaWNpdCk7CiAgICB9CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICB2aXNpdE5vZGVzSW5Db250ZXh0KG5vZGUuYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgbmV3IFZhcmlhYmxlVXNlLnN0YXRpY1R5cGVBcmd1bWVudChub2RlLmludGVyZmFjZVRhcmdldCkpOwogICAgfQogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMubmFtZWQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTdXBlclByb3BlcnR5U2V0KGlyLlN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgaWYgKF9oYXNUaGlzTG9jYWwpIHsKICAgICAgX3JlZ2lzdGVyTmVlZHNUaGlzKFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIH0KICAgIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3VwZXJQcm9wZXJ0eUdldChpci5TdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIGlmIChfaGFzVGhpc0xvY2FsKSB7CiAgICAgIF9yZWdpc3Rlck5lZWRzVGhpcyhWYXJpYWJsZVVzZS5leHBsaWNpdCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIHZvaWQgdmlzaXRJbnZva2FibGUoaXIuVHJlZU5vZGUgbm9kZSwgdm9pZCBmKCkpIHsKICAgIGFzc2VydChub2RlIGlzIGlyLk1lbWJlciB8fCBub2RlIGlzIGlyLkxvY2FsRnVuY3Rpb24pOwogICAgYm9vbCBvbGRJc0luc2lkZUNsb3N1cmUgPSBfaXNJbnNpZGVDbG9zdXJlOwogICAgaXIuVHJlZU5vZGUgb2xkRXhlY3V0YWJsZUNvbnRleHQgPSBfZXhlY3V0YWJsZUNvbnRleHQ7CiAgICBLZXJuZWxTY29wZUluZm8gb2xkU2NvcGVJbmZvID0gX2N1cnJlbnRTY29wZUluZm87CgogICAgLy8gX291dGVybW9zdE5vZGUgaXMgb25seSBudWxsIHRoZSBmaXJzdCB0aW1lIHdlIGVudGVyIHRoZSBib2R5IG9mIHRoZQogICAgLy8gZmllbGQsIGNvbnN0cnVjdG9yLCBvciBtZXRob2QgdGhhdCBpcyBiZWluZyBhbmFseXplZC4KICAgIF9pc0luc2lkZUNsb3N1cmUgPSBfb3V0ZXJtb3N0Tm9kZSAhPSBudWxsOwogICAgX2V4ZWN1dGFibGVDb250ZXh0ID0gbm9kZTsKCiAgICBfY3VycmVudFNjb3BlSW5mbyA9IG5ldyBLZXJuZWxTY29wZUluZm8oX2hhc1RoaXNMb2NhbCk7CgogICAgaWYgKF9pc0luc2lkZUNsb3N1cmUpIHsKICAgICAgX2Nsb3N1cmVzVG9HZW5lcmF0ZVtub2RlXSA9IF9jdXJyZW50U2NvcGVJbmZvOwogICAgfSBlbHNlIHsKICAgICAgX291dGVybW9zdE5vZGUgPSBub2RlOwogICAgICBfbW9kZWwuc2NvcGVJbmZvID0gX2N1cnJlbnRTY29wZUluZm87CiAgICB9CgogICAgZW50ZXJOZXdTY29wZShub2RlLCBmKTsKCiAgICBLZXJuZWxTY29wZUluZm8gc2F2ZWRTY29wZUluZm8gPSBfY3VycmVudFNjb3BlSW5mbzsKICAgIGJvb2wgc2F2ZWRJc0luc2lkZUNsb3N1cmUgPSBfaXNJbnNpZGVDbG9zdXJlOwoKICAgIC8vIFJlc3RvcmUgb2xkIHZhbHVlcy4KICAgIF9pc0luc2lkZUNsb3N1cmUgPSBvbGRJc0luc2lkZUNsb3N1cmU7CiAgICBfY3VycmVudFNjb3BlSW5mbyA9IG9sZFNjb3BlSW5mbzsKICAgIF9leGVjdXRhYmxlQ29udGV4dCA9IG9sZEV4ZWN1dGFibGVDb250ZXh0OwoKICAgIC8vIE1hcmsgYWxsIGZyZWUgdmFyaWFibGVzIGFzIGNhcHR1cmVkIGFuZCBleHBlY3QgdG8gZW5jb3VudGVyIHRoZW0gaW4gdGhlCiAgICAvLyBvdXRlciBmdW5jdGlvbi4KICAgIEl0ZXJhYmxlPGlyLk5vZGU+IGZyZWVWYXJpYWJsZXMgPSBzYXZlZFNjb3BlSW5mby5mcmVlVmFyaWFibGVzOwogICAgYXNzZXJ0KGZyZWVWYXJpYWJsZXMuaXNFbXB0eSB8fCBzYXZlZElzSW5zaWRlQ2xvc3VyZSk7CiAgICBmb3IgKGlyLk5vZGUgZnJlZVZhcmlhYmxlIGluIGZyZWVWYXJpYWJsZXMpIHsKICAgICAgX2NhcHR1cmVkVmFyaWFibGVzLmFkZChmcmVlVmFyaWFibGUpOwogICAgICBfbWFya1ZhcmlhYmxlQXNVc2VkKGZyZWVWYXJpYWJsZSwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgfQogICAgc2F2ZWRTY29wZUluZm8uZnJlZVZhcmlhYmxlc0ZvclJ0aS5mb3JFYWNoKAogICAgICAgIChUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgZnJlZVZhcmlhYmxlRm9yUnRpLAogICAgICAgICAgICBTZXQ8VmFyaWFibGVVc2U+IHVzZVNldCkgewogICAgICBmb3IgKFZhcmlhYmxlVXNlIHVzYWdlIGluIHVzZVNldCkgewogICAgICAgIF9tYXJrVmFyaWFibGVBc1VzZWQoZnJlZVZhcmlhYmxlRm9yUnRpLCB1c2FnZSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKF9pc0luc2lkZUNsb3N1cmUgJiYgc2F2ZWRTY29wZUluZm8udGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSkgewogICAgICBfY3VycmVudFNjb3BlSW5mby50aGlzVXNlZEFzRnJlZVZhcmlhYmxlID0gdHJ1ZTsKICAgIH0KICAgIGlmIChfaXNJbnNpZGVDbG9zdXJlKSB7CiAgICAgIF9jdXJyZW50U2NvcGVJbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpCiAgICAgICAgICAuYWRkQWxsKHNhdmVkU2NvcGVJbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm4gdHJ1ZSBpZiBbdmFyaWFibGVdJ3MgY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBleGVjdXRhYmxlCiAgLy8vIGNvbnRleHQuCiAgYm9vbCBfaW5DdXJyZW50Q29udGV4dChpci5Ob2RlIHZhcmlhYmxlKSB7CiAgICBhc3NlcnQodmFyaWFibGUgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB8fAogICAgICAgIHZhcmlhYmxlIGlzIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCk7CiAgICBpZiAodmFyaWFibGUgaXMgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0KSB7CiAgICAgIHJldHVybiB2YXJpYWJsZS5jb250ZXh0ID09IF9leGVjdXRhYmxlQ29udGV4dDsKICAgIH0KICAgIGlyLlRyZWVOb2RlIG5vZGUgPSB2YXJpYWJsZTsKICAgIHdoaWxlIChub2RlICE9IF9vdXRlcm1vc3ROb2RlICYmIG5vZGUgIT0gX2V4ZWN1dGFibGVDb250ZXh0KSB7CiAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgIH0KICAgIHJldHVybiBub2RlID09IF9leGVjdXRhYmxlQ29udGV4dDsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZpZWxkKGlyLkZpZWxkIG5vZGUpIHsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gVmFyaWFibGVVc2UuZmllbGRUeXBlOwogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHk7CiAgICB2aXNpdEludm9rYWJsZShub2RlLCAoKSB7CiAgICAgIGNvbXBsZXhpdHkgPSB2aXNpdE5vZGUobm9kZS5pbml0aWFsaXplcik7CiAgICB9KTsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gbnVsbDsKICAgIHJldHVybiBjb21wbGV4aXR5OwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q29uc3RydWN0b3IoaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgdmlzaXRJbnZva2FibGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGVzKG5vZGUuaW5pdGlhbGl6ZXJzKTsKICAgICAgdmlzaXROb2RlKG5vZGUuZnVuY3Rpb24pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFByb2NlZHVyZShpci5Qcm9jZWR1cmUgbm9kZSkgewogICAgdmlzaXRJbnZva2FibGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS5mdW5jdGlvbik7CiAgICB9KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKGlyLkZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdEludm9rYWJsZShub2RlLCAoKSB7CiAgICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgICB2aXNpdE5vZGUobm9kZS5mdW5jdGlvbik7CiAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICB2aXNpdEludm9rYWJsZShub2RlLCAoKSB7CiAgICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgICB2aXNpdE5vZGUobm9kZS5mdW5jdGlvbik7CiAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdER5bmFtaWNUeXBlKGlyLkR5bmFtaWNUeXBlIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRCb3R0b21UeXBlKGlyLkJvdHRvbVR5cGUgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0SW52YWxpZFR5cGUoaXIuSW52YWxpZFR5cGUgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Vm9pZFR5cGUoaXIuVm9pZFR5cGUgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEludGVyZmFjZVR5cGUoaXIuSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2Rlcyhub2RlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0RnVuY3Rpb25UeXBlKGlyLkZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9IHZpc2l0Tm9kZShub2RlLnJldHVyblR5cGUpOwogICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGVzKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpKTsKICAgIGNvbXBsZXhpdHkgPSBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2Rlcyhub2RlLm5hbWVkUGFyYW1ldGVycykpOwogICAgcmV0dXJuIGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGVzKG5vZGUudHlwZVBhcmFtZXRlcnMpKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE5hbWVkVHlwZShpci5OYW1lZFR5cGUgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoaXIuVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgX2FuYWx5emVUeXBlVmFyaWFibGUobm9kZSwgX2N1cnJlbnRUeXBlVXNhZ2UpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRJbkNvbnRleHQoaXIuTm9kZSBub2RlLCBWYXJpYWJsZVVzZSB1c2UpIHsKICAgIFZhcmlhYmxlVXNlIG9sZEN1cnJlbnRUeXBlVXNhZ2UgPSBfY3VycmVudFR5cGVVc2FnZTsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gdXNlOwogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSB2aXNpdE5vZGUobm9kZSk7CiAgICBfY3VycmVudFR5cGVVc2FnZSA9IG9sZEN1cnJlbnRUeXBlVXNhZ2U7CiAgICByZXR1cm4gY29tcGxleGl0eTsKICB9CgogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE5vZGVzSW5Db250ZXh0KAogICAgICBMaXN0PGlyLk5vZGU+IG5vZGVzLCBWYXJpYWJsZVVzZSB1c2UpIHsKICAgIFZhcmlhYmxlVXNlIG9sZEN1cnJlbnRUeXBlVXNhZ2UgPSBfY3VycmVudFR5cGVVc2FnZTsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gdXNlOwogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSB2aXNpdE5vZGVzKG5vZGVzKTsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gb2xkQ3VycmVudFR5cGVVc2FnZTsKICAgIHJldHVybiBjb21wbGV4aXR5OwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0SW5Db250ZXh0KG5vZGUudHlwZSwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0SXNFeHByZXNzaW9uKGlyLklzRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5vcGVyYW5kKTsKICAgIHZpc2l0SW5Db250ZXh0KG5vZGUudHlwZSwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRBc0V4cHJlc3Npb24oaXIuQXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLm9wZXJhbmQpOwogICAgdmlzaXRJbkNvbnRleHQobm9kZS50eXBlLAogICAgICAgIG5vZGUuaXNUeXBlRXJyb3IgPyBWYXJpYWJsZVVzZS5pbXBsaWNpdENhc3QgOiBWYXJpYWJsZVVzZS5leHBsaWNpdCk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEF3YWl0RXhwcmVzc2lvbihpci5Bd2FpdEV4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUub3BlcmFuZCk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFlpZWxkU3RhdGVtZW50KGlyLllpZWxkU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRMb2FkTGlicmFyeShpci5Mb2FkTGlicmFyeSBub2RlKSB7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKAogICAgICBpci5DaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlKSB7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZ1bmN0aW9uTm9kZShpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgVmFyaWFibGVVc2UgcGFyYW1ldGVyVXNhZ2UgPSBub2RlLnBhcmVudCBpcyBpci5NZW1iZXIKICAgICAgICA/IG5ldyBWYXJpYWJsZVVzZS5tZW1iZXJQYXJhbWV0ZXIobm9kZS5wYXJlbnQpCiAgICAgICAgOiBuZXcgVmFyaWFibGVVc2UubG9jYWxQYXJhbWV0ZXIobm9kZS5wYXJlbnQpOwogICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLnR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJVc2FnZSk7CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gaW4gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBfaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgcGFyYW1ldGVyVXNhZ2UpOwogICAgfQogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIF9oYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBwYXJhbWV0ZXJVc2FnZSk7CiAgICB9CiAgICB2aXNpdEluQ29udGV4dCgKICAgICAgICBub2RlLnJldHVyblR5cGUsCiAgICAgICAgbm9kZS5wYXJlbnQgaXMgaXIuTWVtYmVyCiAgICAgICAgICAgID8gbmV3IFZhcmlhYmxlVXNlLm1lbWJlclJldHVyblR5cGUobm9kZS5wYXJlbnQpCiAgICAgICAgICAgIDogbmV3IFZhcmlhYmxlVXNlLmxvY2FsUmV0dXJuVHlwZShub2RlLnBhcmVudCkpOwogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdExpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIG5vZGUpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0KICAgICAgICB2aXNpdEluQ29udGV4dChub2RlLnR5cGVBcmd1bWVudCwgVmFyaWFibGVVc2UubGlzdExpdGVyYWwpOwogICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGVzKG5vZGUuZXhwcmVzc2lvbnMpKTsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbXBsZXhpdHkubWFrZUVhZ2VyKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTZXRMaXRlcmFsKGlyLlNldExpdGVyYWwgbm9kZSkgewogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPQogICAgICAgIHZpc2l0SW5Db250ZXh0KG5vZGUudHlwZUFyZ3VtZW50LCBWYXJpYWJsZVVzZS5zZXRMaXRlcmFsKTsKICAgIGNvbXBsZXhpdHkgPSBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2Rlcyhub2RlLmV4cHJlc3Npb25zKSk7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjb21wbGV4aXR5Lm1ha2VFYWdlcigpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0TWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0KICAgICAgICB2aXNpdEluQ29udGV4dChub2RlLmtleVR5cGUsIFZhcmlhYmxlVXNlLm1hcExpdGVyYWwpOwogICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkKICAgICAgICAuY29tYmluZSh2aXNpdEluQ29udGV4dChub2RlLnZhbHVlVHlwZSwgVmFyaWFibGVVc2UubWFwTGl0ZXJhbCkpOwogICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGVzKG5vZGUuZW50cmllcykpOwogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29tcGxleGl0eS5tYWtlRWFnZXIoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE1hcEVudHJ5KGlyLk1hcEVudHJ5IG5vZGUpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0gdmlzaXROb2RlKG5vZGUua2V5KTsKICAgIHJldHVybiBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2RlKG5vZGUudmFsdWUpKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE51bGxMaXRlcmFsKGlyLk51bGxMaXRlcmFsIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEludExpdGVyYWwoaXIuSW50TGl0ZXJhbCBub2RlKSA9PgogICAgICBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0RG91YmxlTGl0ZXJhbChpci5Eb3VibGVMaXRlcmFsIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEJvb2xMaXRlcmFsKGlyLkJvb2xMaXRlcmFsIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKGlyLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgdmlzaXROb2Rlcyhub2RlLmV4cHJlc3Npb25zKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3RhdGljR2V0KGlyLlN0YXRpY0dldCBub2RlKSB7CiAgICBpci5NZW1iZXIgdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICBpZiAodGFyZ2V0IGlzIGlyLkZpZWxkKSB7CiAgICAgIHJldHVybiB0YXJnZXQuaXNDb25zdAogICAgICAgICAgPyBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKQogICAgICAgICAgOiBuZXcgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmVhZ2VyKGZpZWxkczogPGlyLkZpZWxkPnt0YXJnZXR9KTsKICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIGlyLlByb2NlZHVyZSAmJgogICAgICAgIHRhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICAgIH0KICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3RhdGljU2V0KGlyLlN0YXRpY1NldCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICBWYXJpYWJsZVVzZSB1c2FnZTsKICAgICAgaWYgKG5vZGUudGFyZ2V0LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgICAgdXNhZ2UgPSBuZXcgVmFyaWFibGVVc2UuY29uc3RydWN0b3JUeXBlQXJndW1lbnQobm9kZS50YXJnZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIHVzYWdlID0gbmV3IFZhcmlhYmxlVXNlLnN0YXRpY1R5cGVBcmd1bWVudChub2RlLnRhcmdldCk7CiAgICAgIH0KCiAgICAgIHZpc2l0Tm9kZXNJbkNvbnRleHQobm9kZS5hcmd1bWVudHMudHlwZXMsIHVzYWdlKTsKICAgIH0KICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbCk7CiAgICB2aXNpdE5vZGVzKG5vZGUuYXJndW1lbnRzLm5hbWVkKTsKICAgIHJldHVybiBub2RlLmlzQ29uc3QKICAgICAgICA/IGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpCiAgICAgICAgOiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICBpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgIG5ldyBWYXJpYWJsZVVzZS5jb25zdHJ1Y3RvclR5cGVBcmd1bWVudChub2RlLnRhcmdldCkpOwogICAgfQogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMubmFtZWQpOwogICAgcmV0dXJuIG5vZGUuaXNDb25zdAogICAgICAgID8gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCkKICAgICAgICA6IGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgIGlyLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9IHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICBjb21wbGV4aXR5ID0gY29tcGxleGl0eS5jb21iaW5lKHZpc2l0Tm9kZShub2RlLnRoZW4pKTsKICAgIHJldHVybiBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2RlKG5vZGUub3RoZXJ3aXNlKSk7CiAgICAvLyBEb24ndCB2aXNpdCBgbm9kZS5zdGF0aWNUeXBlYC4KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE1ldGhvZEludm9jYXRpb24oaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICBpci5UcmVlTm9kZSByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICB2aXNpdE5vZGUocmVjZWl2ZXIpOwogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgVmFyaWFibGVVc2UgdXNhZ2U7CiAgICAgIGlmIChyZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCAmJgogICAgICAgICAgKHJlY2VpdmVyLnZhcmlhYmxlLnBhcmVudCBpcyBpci5Mb2NhbEZ1bmN0aW9uKSkgewogICAgICAgIHVzYWdlID0KICAgICAgICAgICAgbmV3IFZhcmlhYmxlVXNlLmxvY2FsVHlwZUFyZ3VtZW50KHJlY2VpdmVyLnZhcmlhYmxlLnBhcmVudCwgbm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdXNhZ2UgPSBuZXcgVmFyaWFibGVVc2UuaW5zdGFuY2VUeXBlQXJndW1lbnQobm9kZSk7CiAgICAgIH0KICAgICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLmFyZ3VtZW50cy50eXBlcywgdXNhZ2UpOwogICAgfQogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMubmFtZWQpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVjb2duaXplIGNvbnN0YW50IG9wZXJhdGlvbnMuCiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0UHJvcGVydHlTZXQoaXIuUHJvcGVydHlTZXQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgdmlzaXROb2RlKG5vZGUudmFsdWUpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5yZWNlaXZlcik7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdERpcmVjdFByb3BlcnR5U2V0KGlyLkRpcmVjdFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Tm90KGlyLk5vdCBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUub3BlcmFuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihpci5Mb2dpY2FsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9IHZpc2l0Tm9kZShub2RlLmxlZnQpOwogICAgcmV0dXJuIGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGUobm9kZS5yaWdodCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0TGV0KGlyLkxldCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YXJpYWJsZSk7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0QmxvY2tFeHByZXNzaW9uKGlyLkJsb2NrRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q2F0Y2goaXIuQ2F0Y2ggbm9kZSkgewogICAgdmlzaXRJbkNvbnRleHQobm9kZS5ndWFyZCwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgdmlzaXROb2RlKG5vZGUuZXhjZXB0aW9uKTsKICAgIHZpc2l0Tm9kZShub2RlLnN0YWNrVHJhY2UpOwogICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIH0pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSkgewogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSB2aXNpdE5vZGVzSW5Db250ZXh0KAogICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cywgbmV3IFZhcmlhYmxlVXNlLmluc3RhbnRpYXRpb25UeXBlQXJndW1lbnQobm9kZSkpOwogICAgcmV0dXJuIGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0UmV0aHJvdyhpci5SZXRocm93IG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEJsb2NrKGlyLkJsb2NrIG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5zdGF0ZW1lbnRzKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0QXNzZXJ0U3RhdGVtZW50KGlyLkFzc2VydFN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgIHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICAgIHZpc2l0Tm9kZShub2RlLm1lc3NhZ2UpOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFJldHVyblN0YXRlbWVudChpci5SZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEVtcHR5U3RhdGVtZW50KGlyLkVtcHR5U3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChpci5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGVzKG5vZGUuY2FzZXMpOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQoCiAgICAgIGlyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyQ29udGludWVTd2l0Y2goKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0QnJlYWtTdGF0ZW1lbnQoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGlyLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZpZWxkSW5pdGlhbGl6ZXIoaXIuRmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdExvY2FsSW5pdGlhbGl6ZXIoaXIuTG9jYWxJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YXJpYWJsZS5pbml0aWFsaXplcik7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN1cGVySW5pdGlhbGl6ZXIoaXIuU3VwZXJJbml0aWFsaXplciBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICB2aXNpdE5vZGVzSW5Db250ZXh0KG5vZGUuYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgbmV3IFZhcmlhYmxlVXNlLmNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50KG5vZGUudGFyZ2V0KSk7CiAgICB9CiAgICB2aXNpdE5vZGVzKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwpOwogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5uYW1lZCk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgIGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgIG5ldyBWYXJpYWJsZVVzZS5jb25zdHJ1Y3RvclR5cGVBcmd1bWVudChub2RlLnRhcmdldCkpOwogICAgfQogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMubmFtZWQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRBc3NlcnRJbml0aWFsaXplcihpci5Bc3NlcnRJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5zdGF0ZW1lbnQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRJZlN0YXRlbWVudChpci5JZlN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5jb25kaXRpb24pOwogICAgdmlzaXROb2RlKG5vZGUudGhlbik7CiAgICB2aXNpdE5vZGUobm9kZS5vdGhlcndpc2UpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmNvbnN0YW50IGlzIGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgbm9kZS5jb25zdGFudCA9IF9jb25zdGFudEV2YWx1YXRvci5ldmFsdWF0ZShub2RlKTsKICAgIH0KICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIG5vZGUgaXMgYSBmaWVsZCwgb3IgYSBjb25zdHJ1Y3RvciAoZmFjdG9yeSBvcgogIC8vLyBnZW5lcmF0aXZlKS4KICBib29sIF9pc0ZpZWxkT3JDb25zdHJ1Y3Rvcihpci5Ob2RlIG5vZGUpID0+CiAgICAgIG5vZGUgaXMgaXIuQ29uc3RydWN0b3IgfHwKICAgICAgbm9kZSBpcyBpci5GaWVsZCB8fAogICAgICAobm9kZSBpcyBpci5Qcm9jZWR1cmUgJiYgbm9kZS5pc0ZhY3RvcnkpOwoKICB2b2lkIF9hbmFseXplVHlwZVZhcmlhYmxlKGlyLlR5cGVQYXJhbWV0ZXJUeXBlIHR5cGUsIFZhcmlhYmxlVXNlIHVzYWdlKSB7CiAgICBhc3NlcnQodXNhZ2UgIT0gbnVsbCk7CiAgICBpZiAoX291dGVybW9zdE5vZGUgaXMgaXIuTWVtYmVyKSB7CiAgICAgIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCB0eXBlVmFyaWFibGUgPQogICAgICAgICAgbmV3IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCh0eXBlLCBfb3V0ZXJtb3N0Tm9kZSk7CiAgICAgIHN3aXRjaCAodHlwZVZhcmlhYmxlLmtpbmQpIHsKICAgICAgICBjYXNlIFR5cGVWYXJpYWJsZUtpbmQuY2xzOgogICAgICAgICAgaWYgKF9pc0ZpZWxkT3JDb25zdHJ1Y3Rvcihfb3V0ZXJtb3N0Tm9kZSkpIHsKICAgICAgICAgICAgLy8gQ2xhc3MgdHlwZSB2YXJpYWJsZSB1c2VkIGluIGEgZmllbGQgb3IgY29uc3RydWN0b3IuCiAgICAgICAgICAgIF91c2VUeXBlVmFyaWFibGVBc0xvY2FsKHR5cGVWYXJpYWJsZSwgdXNhZ2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQ2xhc3MgdHlwZSB2YXJpYWJsZSB1c2VkIGluIGEgbWV0aG9kLgogICAgICAgICAgICBfcmVnaXN0ZXJOZWVkc1RoaXModXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVmFyaWFibGVLaW5kLm1ldGhvZDoKICAgICAgICBjYXNlIFR5cGVWYXJpYWJsZUtpbmQubG9jYWw6CiAgICAgICAgICBfdXNlVHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUsIHVzYWdlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVZhcmlhYmxlS2luZC5mdW5jdGlvbjoKICAgICAgICAvLyBUaGUgdHlwZSB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGUsIGxpa2UgYFRgIGluCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgTGlzdDx2b2lkIEZ1bmN0aW9uPFQ+KFQpPiBsaXN0OwogICAgICAgIC8vCiAgICAgICAgLy8gd2hpY2ggZG9lc24ndCBjb3JyZXNwb25kIHRvIGEgY2FwdHVyZWQgbG9jYWwgdmFyaWFibGUuCiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBJZiBbb25seUZvclJ0aUNoZWNrc10gaXMgdHJ1ZSwgdGhlIHZhcmlhYmxlIHdpbGwgYmUgYWRkZWQgdG8gYSBsaXN0CiAgLy8vIGluZGljYXRpbmcgaXQgKm1heSogYmUgdXNlZCBvbmx5IGlmIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiBpcyBjaGVja2VkLgogIHZvaWQgX3VzZVR5cGVWYXJpYWJsZUFzTG9jYWwoCiAgICAgIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCB0eXBlVmFyaWFibGUsIFZhcmlhYmxlVXNlIHVzYWdlKSB7CiAgICBfbWFya1ZhcmlhYmxlQXNVc2VkKHR5cGVWYXJpYWJsZSwgdXNhZ2UpOwogIH0KfQoKZW51bSBDb21wbGV4aXR5TGV2ZWwgewogIGNvbnN0YW50LAogIHBvdGVudGlhbGx5RWFnZXIsCiAgZGVmaW5pdGVseUxhenksCn0KCmNsYXNzIEluaXRpYWxpemVyQ29tcGxleGl0eSB7CiAgZmluYWwgQ29tcGxleGl0eUxldmVsIGxldmVsOwogIGZpbmFsIFNldDxpci5GaWVsZD4gZmllbGRzOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZCBob2xkIHRoZSBjb25zdGFudCBsaXRlcmFsIGZyb20gQ0ZFIHdoZW4KICAvLyBwcm92aWRlZC4KICBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKQogICAgICA6IGxldmVsID0gQ29tcGxleGl0eUxldmVsLmNvbnN0YW50LAogICAgICAgIGZpZWxkcyA9IG51bGw7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGlzIHRvIGNvbGxlY3QgZGF0YSBvbiB0aGUgc2l6ZSBvZiB0aGUKICAvLyAgaW5pdGlhbGl6ZXIuCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmVhZ2VyKHt0aGlzLmZpZWxkc30pCiAgICAgIDogbGV2ZWwgPSBDb21wbGV4aXR5TGV2ZWwucG90ZW50aWFsbHlFYWdlcjsKCiAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKQogICAgICA6IGxldmVsID0gQ29tcGxleGl0eUxldmVsLmRlZmluaXRlbHlMYXp5LAogICAgICAgIGZpZWxkcyA9IG51bGw7CgogIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21iaW5lKEluaXRpYWxpemVyQ29tcGxleGl0eSBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKGlzTGF6eSB8fCBvdGhlci5pc0xhenkpIHsKICAgICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgICB9IGVsc2UgaWYgKGlzRWFnZXIgfHwgb3RoZXIuaXNFYWdlcikgewogICAgICBpZiAoZmllbGRzICE9IG51bGwgJiYgb3RoZXIuZmllbGRzICE9IG51bGwpIHsKICAgICAgICBmaWVsZHMuYWRkQWxsKG90aGVyLmZpZWxkcyk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0gZWxzZSBpZiAoZmllbGRzICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gb3RoZXI7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNDb25zdGFudCAmJiBvdGhlci5pc0NvbnN0YW50KSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgaXMgY2FzZSBkb2Vzbid0IHdvcmsgaWYgSW5pdGlhbGl6ZXJDb21wbGV4aXR5CiAgICAgIC8vIG9iamVjdHMgb2YgY29uc3RhbnQgY29tcGxleGl0eSBob2xkIHRoZSBjb25zdGFudCBsaXRlcmFsLgogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSBpZiAoaXNFYWdlcikgewogICAgICBhc3NlcnQob3RoZXIuaXNDb25zdGFudCk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGlzQ29uc3RhbnQpOwogICAgICBhc3NlcnQob3RoZXIuaXNFYWdlcik7CiAgICAgIHJldHVybiBvdGhlcjsKICAgIH0KICB9CgogIEluaXRpYWxpemVyQ29tcGxleGl0eSBtYWtlRWFnZXIoKSB7CiAgICBpZiAoaXNMYXp5IHx8IGlzRWFnZXIpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEluaXRpYWxpemVyQ29tcGxleGl0eS5lYWdlcigpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNDb25zdGFudCA9PiBsZXZlbCA9PSBDb21wbGV4aXR5TGV2ZWwuY29uc3RhbnQ7CgogIGJvb2wgZ2V0IGlzRWFnZXIgPT4gbGV2ZWwgPT0gQ29tcGxleGl0eUxldmVsLnBvdGVudGlhbGx5RWFnZXI7CgogIGJvb2wgZ2V0IGlzTGF6eSA9PiBsZXZlbCA9PSBDb21wbGV4aXR5TGV2ZWwuZGVmaW5pdGVseUxhenk7CgogIC8vLyBSZXR1cm5zIGEgc2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2VkIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICAgY2FzZSBDb21wbGV4aXR5TGV2ZWwuY29uc3RhbnQ6CiAgICAgICAgc2Iud3JpdGUoJ2NvbnN0YW50Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29tcGxleGl0eUxldmVsLnBvdGVudGlhbGx5RWFn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dmlzaXRvci5kYXJ0KnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL3V0aWwuZGFydJrlLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKCi8vLyBSZXR1cm5zIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBbbm9kZV0gdGhhdCBpbmNsdWRlIHRoZSBydW50aW1lIHR5cGUgYW5kCi8vLyBoYXNoIGNvZGUgb2YgdGhlIG5vZGUgYW5kIGEgb25lIGxpbmUgcHJlZml4IG9mIHRoZSBub2RlIHRvU3RyaW5nIHRleHQuClN0cmluZyBub2RlVG9EZWJ1Z1N0cmluZyhpci5Ob2RlIG5vZGUsIFtpbnQgdGV4dExlbmd0aCA9IDQwXSkgewogIFN0cmluZyBibG9ja1RleHQgPSBub2RlLnRvU3RyaW5nKCkucmVwbGFjZUFsbCgnXG4nLCAnICcpOwogIGlmIChibG9ja1RleHQubGVuZ3RoID4gdGV4dExlbmd0aCkgewogICAgYmxvY2tUZXh0ID0gYmxvY2tUZXh0LnN1YnN0cmluZygwLCB0ZXh0TGVuZ3RoIC0gMykgKyAnLi4uJzsKICB9CiAgcmV0dXJuICcoJHtub2RlLnJ1bnRpbWVUeXBlfToke25vZGUuaGFzaENvZGV9KSR7YmxvY2tUZXh0fSc7Cn0KCi8vLyBDb21wYXJhdG9yIGZvciB0aGUgY2Fub25pY2FsIG9yZGVyIG9yIG5hbWVkIHBhcmFtZXRlcnMuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gbmFtZWQgcGFyYW1ldGVycyBhcmUgc29ydGVkIGluIGRpbGwuCmludCBuYW1lZE9yZGVyaW5nKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gYSwgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBiKSB7CiAgcmV0dXJuIGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKfQoKLy8vIENvbXBhcmF0b3IgZm9yIHRoZSBkZWNsYXJhdGlvbiBvcmRlciBvZiBwYXJhbWV0ZXJzLgppbnQgbmF0aXZlT3JkZXJpbmcoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBhLCBpci5WYXJpYWJsZURlY2xhcmF0aW9uIGIpIHsKICByZXR1cm4gYS5maWxlT2Zmc2V0LmNvbXBhcmVUbyhiLmZpbGVPZmZzZXQpOwp9CgpTb3VyY2VTcGFuIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgW2lyLkxvY2F0aW9uXSBkaXJlY3RseSBhcyBhIFtTb3VyY2VTcGFuXS4KICBVcmkgdXJpOwogIGludCBvZmZzZXQ7CiAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgewogICAgaWYgKG5vZGUuZmlsZU9mZnNldCAhPSBpci5UcmVlTm9kZS5ub09mZnNldCkgewogICAgICBvZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQ7CiAgICAgIC8vIEBwYXRjaCBhbm5vdGF0aW9ucyBoYXZlIG5vIGxvY2F0aW9uLgogICAgICB1cmkgPSBub2RlLmxvY2F0aW9uPy5maWxlOwogICAgICBicmVhazsKICAgIH0KICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICB9CiAgaWYgKHVyaSAhPSBudWxsKSB7CiAgICByZXR1cm4gbmV3IFNvdXJjZVNwYW4odXJpLCBvZmZzZXQsIG9mZnNldCArIDEpOwogIH0KICByZXR1cm4gbnVsbDsKfQoKLy8vIFJldHVybnMgdGhlIGBBc3luY01hcmtlcmAgY29ycmVzcG9uZGluZyB0byBgbm9kZS5hc3luY01hcmtlcmAuCkFzeW5jTWFya2VyIGdldEFzeW5jTWFya2VyKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgc3dpdGNoIChub2RlLmFzeW5jTWFya2VyKSB7CiAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jOgogICAgICByZXR1cm4gQXN5bmNNYXJrZXIuQVNZTkM7CiAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jU3RhcjoKICAgICAgcmV0dXJuIEFzeW5jTWFya2VyLkFTWU5DX1NUQVI7CiAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmM6CiAgICAgIHJldHVybiBBc3luY01hcmtlci5TWU5DOwogICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jU3RhcjoKICAgICAgcmV0dXJuIEFzeW5jTWFya2VyLlNZTkNfU1RBUjsKICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuU3luY1lpZWxkaW5nOgogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiQXN5bmMgbWFya2VyICR7bm9kZS5hc3luY01hcmtlcn0gaXMgbm90IHN1cHBvcnRlZC4iKTsKICB9Cn0KCi8vLyBLZXJuZWwgZW5jb2RlcyBhIG51bGwtYXdhcmUgZXhwcmVzc2lvbiBgYT8uYmAgYXMKLy8vCi8vLyAgICAgbGV0IGZpbmFsICMxID0gYSBpbiAjMSA9PSBudWxsID8gbnVsbCA6ICMxLmIKLy8vCi8vLyBbZ2V0TnVsbEF3YXJlRXhwcmVzc2lvbl0gcmVjb2duaXplcyBzdWNoIGV4cHJlc3Npb25zIHN0b3JpbmcgdGhlIHJlc3VsdCBpbgovLy8gYSBbTnVsbEF3YXJlRXhwcmVzc2lvbl0gb2JqZWN0LgovLy8KLy8vIFtzeW50aGV0aWNWYXJpYWJsZV0gaG9sZHMgdGhlIHN5bnRoZXNpemVkIGAjMWAgdmFyaWFibGUuIFtleHByZXNzaW9uXSBob2xkcwovLy8gdGhlIGAjMS5iYCBleHByZXNzaW9uLiBbcmVjZWl2ZXJdIHJldHVybnMgYGFgIGV4cHJlc3Npb24uIFtwYXJlbnRdIHJldHVybnMKLy8vIHRoZSBwYXJlbnQgb2YgdGhlIGxldCBub2RlLCBpLmUuIHRoZSBwYXJlbnQgbm9kZSBvZiB0aGUgb3JpZ2luYWwgbnVsbC1hd2FyZQovLy8gZXhwcmVzc2lvbi4gW2xldF0gcmV0dXJucyB0aGUgbGV0IG5vZGUgY3JlYXRlZCBmb3IgdGhlIGVuY29kaW5nLgpjbGFzcyBOdWxsQXdhcmVFeHByZXNzaW9uIHsKICBmaW5hbCBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHN5bnRoZXRpY1ZhcmlhYmxlOwogIGZpbmFsIGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgTnVsbEF3YXJlRXhwcmVzc2lvbih0aGlzLnN5bnRoZXRpY1ZhcmlhYmxlLCB0aGlzLmV4cHJlc3Npb24pOwoKICBpci5FeHByZXNzaW9uIGdldCByZWNlaXZlciA9PiBzeW50aGV0aWNWYXJpYWJsZS5pbml0aWFsaXplcjsKCiAgaXIuVHJlZU5vZGUgZ2V0IHBhcmVudCA9PiBzeW50aGV0aWNWYXJpYWJsZS5wYXJlbnQucGFyZW50OwoKICBpci5MZXQgZ2V0IGxldCA9PiBzeW50aGV0aWNWYXJpYWJsZS5wYXJlbnQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGxldC50b1N0cmluZygpOwp9CgpOdWxsQXdhcmVFeHByZXNzaW9uIGdldE51bGxBd2FyZUV4cHJlc3Npb24oaXIuVHJlZU5vZGUgbm9kZSkgewogIGlmIChub2RlIGlzIGlyLkxldCkgewogICAgaXIuRXhwcmVzc2lvbiBib2R5ID0gbm9kZS5ib2R5OwogICAgaWYgKG5vZGUudmFyaWFibGUubmFtZSA9PSBudWxsICYmCiAgICAgICAgbm9kZS52YXJpYWJsZS5pc0ZpbmFsICYmCiAgICAgICAgYm9keSBpcyBpci5Db25kaXRpb25hbEV4cHJlc3Npb24gJiYKICAgICAgICBib2R5LmNvbmRpdGlvbiBpcyBpci5NZXRob2RJbnZvY2F0aW9uICYmCiAgICAgICAgYm9keS50aGVuIGlzIGlyLk51bGxMaXRlcmFsKSB7CiAgICAgIGlyLk1ldGhvZEludm9jYXRpb24gaW52b2NhdGlvbiA9IGJvZHkuY29uZGl0aW9uOwogICAgICBpci5FeHByZXNzaW9uIHJlY2VpdmVyID0gaW52b2NhdGlvbi5yZWNlaXZlcjsKICAgICAgaWYgKGludm9jYXRpb24ubmFtZS5uYW1lID09ICc9PScgJiYKICAgICAgICAgIHJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0ICYmCiAgICAgICAgICByZWNlaXZlci52YXJpYWJsZSA9PSBub2RlLnZhcmlhYmxlICYmCiAgICAgICAgICBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLnNpbmdsZSBpcyBpci5OdWxsTGl0ZXJhbCkgewogICAgICAgIC8vIFdlIGhhdmUKICAgICAgICAvLyAgIGxldCAjdDEgPSBlMCBpbiAjdDEgPT0gbnVsbCA/IG51bGwgOiBlMQogICAgICAgIHJldHVybiBuZXcgTnVsbEF3YXJlRXhwcmVzc2lvbihub2RlLnZhcmlhYmxlLCBib2R5Lm90aGVyd2lzZSk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCi8vLyBDaGVjayB3aGV0aGVyIFtub2RlXSBpcyBpbW1lZGlhdGVseSBndWFyZGVkIGJ5IGEKLy8vIFtpci5DaGVja0xpYnJhcnlJc0xvYWRlZF0sIGFuZCBoZW5jZSB0aGUgbm9kZSBpcyBhIGRlZmVycmVkIGFjY2Vzcy4KaXIuTGlicmFyeURlcGVuZGVuY3kgZ2V0RGVmZXJyZWRJbXBvcnQoaXIuVHJlZU5vZGUgbm9kZSkgewogIC8vIE5vdGU6IHRoaXMgY29kZSByZWxpZXMgb24gdGhlIENGRSBnZW5lcmF0aW5nIHRoZSBjb2RlIGFzIHdlIGV4cGVjdCBpdCBoZXJlLgogIC8vIElmIG9uZSBkYXkgd2Ugb3B0aW1pemUgYXdheSByZWR1bmRhbnQgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgaW5zdHJ1Y3Rpb25zLAogIC8vIHdlJ2QgbmVlZCB0byBkZXJpdmUgdGhpcyBpbmZvcm1hdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBDRkUgKFNlZSAjMzUwMDUpLAogIGlyLlRyZWVOb2RlIHBhcmVudCA9IG5vZGUucGFyZW50OwoKICAvLyBUT0RPKHNpZ211bmQpOiByZW1vdmUgd2hlbiBDRkUgZ2VuZXJhdGVzIHRoZSBjb3JyZWN0IHRyZWUgKCMzNTMyMCkuIEZvcgogIC8vIGluc3RhbmNlLCBpdCBjdXJyZW50bHkgZ2VuZXJhdGVzCiAgLy8KICAvLyAgIGxldCBfID0gY2hlY2socHJlZml4KSBpbiAocHJlZml4OjpmaWVsZC5wcm9wZXJ0eSkKICAvLwogIC8vIGluc3RlYWQgb2Y6CiAgLy8KICAvLyAgIChsZXQgXyA9IGNoZWNrKHByZWZpeCkgaW4gcHJlZml4OjpmaWVsZCkucHJvcGVydHkKICBpZiAobm9kZSBpcyBpci5TdGF0aWNHZXQgfHwgbm9kZSBpcyBpci5Db25zdGFudEV4cHJlc3Npb24pIHsKICAgIHdoaWxlIChwYXJlbnQgaXMgaXIuUHJvcGVydHlHZXQgfHwgcGFyZW50IGlzIGlyLk1ldGhvZEludm9jYXRpb24pIHsKICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgIH0KICB9CgogIGlmIChwYXJlbnQgaXMgaXIuTGV0KSB7CiAgICB2YXIgaW5pdGlhbGl6ZXIgPSBwYXJlbnQudmFyaWFibGUuaW5pdGlhbGl6ZXI7CiAgICBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuQ2hlY2tMaWJyYXJ5SXNMb2FkZWQpIHsKICAgICAgcmV0dXJuIGluaXRpYWxpemVyLmltcG9ydDsKICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCmNsYXNzIF9GcmVlVmFyaWFibGVWaXNpdG9yIGltcGxlbWVudHMgaXIuRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBjb25zdCBfRnJlZVZhcmlhYmxlVmlzaXRvcigpOwoKICBib29sIHZpc2l0KGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlICE9IG51bGwpIHJldHVybiB0eXBlLmFjY2VwdCh0aGlzKTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgdmlzaXRMaXN0KExpc3Q8aXIuRGFydFR5cGU+IHR5cGVzKSB7CiAgICBmb3IgKGlyLkRhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgaWYgKHZpc2l0KHR5cGUpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShpci5UeXBlZGVmVHlwZSBub2RlKSB7CiAgICByZXR1cm4gdmlzaXRMaXN0KG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoaXIuVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuY3Rpb25UeXBlKGlyLkZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBpZiAodmlzaXQobm9kZS5yZXR1cm5UeXBlKSkgcmV0dXJuIHRydWU7CiAgICBpZiAodmlzaXRMaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpKSByZXR1cm4gdHJ1ZTsKICAgIGZvciAoaXIuTmFtZWRUeXBlIG5hbWVkVHlwZSBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBpZiAodmlzaXQobmFtZWRUeXBlLnR5cGUpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKGlyLkludGVyZmFjZVR5cGUgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0TGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEJvdHRvbVR5cGUoaXIuQm90dG9tVHlwZSBub2RlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZvaWRUeXBlKGlyLlZvaWRUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RHluYW1pY1R5cGUoaXIuRHluYW1pY1R5cGUgbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShpci5JbnZhbGlkVHlwZSBub2RlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkZWZhdWx0RGFydFR5cGUoaXIuRGFydFR5cGUgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkZyZWVWYXJpYWJsZVZpc2l0b3IuZGVmYXVsdFR5cGVOb2RlIik7CiAgfQp9CgovLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3R5cGVdIGNvbnRhaW5zIGEgdHlwZSB2YXJpYWJsZS4KLy8vCi8vLyBBbGwgdHlwZSB2YXJpYWJsZXMgKGNsYXNzIHR5cGUgdmFyaWFibGVzLCBnZW5lcmljIG1ldGhvZCB0eXBlIHZhcmlhYmxlcywKLy8vIGFuZCBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlcykgYXJlIGNvbnNpZGVyZWQuCmJvb2wgY29udGFpbnNGcmVlVmFyaWFibGVzKGlyLkRhcnRUeXBlIHR5cGUpID0+CiAgICB0eXBlLmFjY2VwdChjb25zdCBfRnJlZVZhcmlhYmxlVmlzaXRvcigpKTsKgNkATk48ASg0LzUBGSQBUUtAPCdABD8CATxOSCMCAThJLwIBPUgLDhkzIC4hDQYYBBU0BA8CAUMzHh8gIyUeHyIkJg0iQQQCATUENQRPJARQT1BFHDIiAUABPwE9AS4BDCcCAT8YJCYhLDEnNzQqKDBGEzVHCAYEDwIBNUg7UU5OJAFNJgU5BREFOT9IHgYEARozMiEGBA8CAUEgASEwEgQBLCYkBhIEAQwvKgQBDDsRBAEMMS07Oy4GEgQBDDMqBAEMNQEMMQEMNwEMNwEMK0cEAgE3BE0xMC8BIXBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3V0aWwuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9zdGF0aWNfdHlwZV9jYWNoZS5kYXJ0h34vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKCmNsYXNzIFN0YXRpY1R5cGVDYWNoZSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc3RhdGljLXR5cGUtY2FjaGUnOwoKICBmaW5hbCBNYXA8aXIuRXhwcmVzc2lvbiwgaXIuRGFydFR5cGU+IF9leHByZXNzaW9uVHlwZXM7CiAgZmluYWwgTWFwPGlyLkZvckluU3RhdGVtZW50LCBpci5EYXJ0VHlwZT4gX2ZvckluSXRlcmF0b3JUeXBlczsKCiAgY29uc3QgU3RhdGljVHlwZUNhY2hlKAogICAgICBbdGhpcy5fZXhwcmVzc2lvblR5cGVzID0gY29uc3Qge30sIHRoaXMuX2ZvckluSXRlcmF0b3JUeXBlc10pOwoKICBmYWN0b3J5IFN0YXRpY1R5cGVDYWNoZS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBpci5NZW1iZXIgY29udGV4dCkgewogICAgcmV0dXJuIHNvdXJjZS5pbk1lbWJlckNvbnRleHQoY29udGV4dCwgKCkgewogICAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgICAgTWFwPGlyLkV4cHJlc3Npb24sIGlyLkRhcnRUeXBlPiBleHByZXNzaW9uVHlwZXMgPQogICAgICAgICAgc291cmNlLnJlYWRUcmVlTm9kZU1hcEluQ29udGV4dChzb3VyY2UucmVhZERhcnRUeXBlTm9kZSk7CiAgICAgIE1hcDxpci5Gb3JJblN0YXRlbWVudCwgaXIuRGFydFR5cGU+IGZvckluSXRlcmF0b3JUeXBlcyA9IHNvdXJjZQogICAgICAgICAgLnJlYWRUcmVlTm9kZU1hcEluQ29udGV4dChzb3VyY2UucmVhZERhcnRUeXBlTm9kZSwgZW1wdHlBc051bGw6IHRydWUpOwogICAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICAgIHJldHVybiBuZXcgU3RhdGljVHlwZUNhY2hlKGV4cHJlc3Npb25UeXBlcywgZm9ySW5JdGVyYXRvclR5cGVzKTsKICAgIH0pOwogIH0KCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgaXIuTWVtYmVyIGNvbnRleHQpIHsKICAgIHNpbmsuaW5NZW1iZXJDb250ZXh0KGNvbnRleHQsICgpIHsKICAgICAgc2luay5iZWdpbih0YWcpOwogICAgICBzaW5rLndyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHQoX2V4cHJlc3Npb25UeXBlcywgc2luay53cml0ZURhcnRUeXBlTm9kZSk7CiAgICAgIHNpbmsud3JpdGVUcmVlTm9kZU1hcEluQ29udGV4dCgKICAgICAgICAgIF9mb3JJbkl0ZXJhdG9yVHlwZXMsIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUsCiAgICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgICBzaW5rLmVuZCh0YWcpOwogICAgfSk7CiAgfQoKICBpci5EYXJ0VHlwZSBvcGVyYXRvciBbXShpci5FeHByZXNzaW9uIG5vZGUpID0+IF9leHByZXNzaW9uVHlwZXNbbm9kZV07CgogIGlyLkRhcnRUeXBlIGdldEZvckluSXRlcmF0b3JUeXBlKGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBfZm9ySW5JdGVyYXRvclR5cGVzICE9IG51bGwgPyBfZm9ySW5JdGVyYXRvclR5cGVzW25vZGVdIDogbnVsbDsKICB9Cn0KNQBOTjwBKDQvMTUBLgEYMQE6QQEZRQEuLjAZOERGURdHCAQBOycXUCY3HBUIBAFJAT1LBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3N0YXRpY190eXBlX2NhY2hlLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZV9ncmFwaF9ub2Rlcy5kYXJ0wAEUgC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbXBpbGVyLnNyYy5pbmZlcnJlci50eXBlX2dyYXBoX25vZGVzOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgSXRlcmFibGVCYXNlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBJbW11dGFibGVFbXB0eVNldCwgU2V0bGV0OwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdkZWJ1Zy5kYXJ0JyBhcyBkZWJ1ZzsKaW1wb3J0ICdsb2NhbHNfaGFuZGxlci5kYXJ0JyBzaG93IEFyZ3VtZW50c1R5cGVzOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICd0eXBlX3N5c3RlbS5kYXJ0JzsKCi8vLyBDb21tb24gY2xhc3MgZm9yIGFsbCBub2RlcyBpbiB0aGUgZ3JhcGguIFRoZSBjdXJyZW50IG5vZGVzIGFyZToKLy8vCi8vLyAtIENvbmNyZXRlIHR5cGVzCi8vLyAtIEVsZW1lbnRzCi8vLyAtIENhbGwgc2l0ZXMKLy8vIC0gTmFycm93aW5nIGluc3RydWN0aW9ucwovLy8gLSBQaGkgaW5zdHJ1Y3Rpb25zCi8vLyAtIENvbnRhaW5lcnMgKGZvciBsaXN0cykKLy8vIC0gVHlwZSBvZiB0aGUgZWxlbWVudCBpbiBhIGNvbnRhaW5lcgovLy8KLy8vIEEgbm9kZSBoYXMgYSBzZXQgb2YgYXNzaWdubWVudHMgYW5kIHVzZXJzLiBBc3NpZ25tZW50cyBhcmUgdXNlZCB0bwovLy8gY29tcHV0ZSB0aGUgdHlwZSBvZiB0aGUgbm9kZSAoW1R5cGVJbmZvcm1hdGlvbi5jb21wdXRlVHlwZV0pLiBVc2VycyBhcmUKLy8vIGFkZGVkIHRvIHRoZSBpbmZlcnJlcidzIHdvcmsgcXVldWUgd2hlbiB0aGUgdHlwZSBvZiB0aGUgbm9kZQovLy8gY2hhbmdlcy4KYWJzdHJhY3QgY2xhc3MgVHlwZUluZm9ybWF0aW9uIHsKICBTZXQ8VHlwZUluZm9ybWF0aW9uPiB1c2VyczsKICB2YXIgLyogTGlzdHxQYXJhbWV0ZXJBc3NpZ25tZW50cyAqLyBfYXNzaWdubWVudHM7CgogIC8vLyBUaGUgdHlwZSB0aGUgaW5mZXJyZXIgaGFzIGZvdW5kIGZvciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dLgogIC8vLyBJbml0aWFsbHkgZW1wdHkuCiAgQWJzdHJhY3RWYWx1ZSB0eXBlOwoKICAvLy8gVGhlIGdyYXBoIG5vZGUgb2YgdGhlIG1lbWJlciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIG5vZGUgYmVsb25ncyB0by4KICBmaW5hbCBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dDsKCiAgLy8vIFRoZSBlbGVtZW50IHRoaXMgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZSBiZWxvbmdzIHRvLgogIE1lbWJlckVudGl0eSBnZXQgY29udGV4dE1lbWJlciA9PiBjb250ZXh0ID09IG51bGwgPyBudWxsIDogY29udGV4dC5tZW1iZXI7CgogIEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGFzc2lnbm1lbnRzID0+IF9hc3NpZ25tZW50czsKCiAgLy8vIFdlIGFiYW5kb24gaW5mZXJlbmNlIGluIGNlcnRhaW4gY2FzZXMgKGNvbXBsZXggY3ljbGljIGZsb3csIG5hdGl2ZQogIC8vLyBiZWhhdmlvdXJzLCBldGMuKS4gSW4gc29tZSBjYXNlLCB3ZSBtaWdodCByZXN1bWUgaW5mZXJlbmNlIGluIHRoZQogIC8vLyBjbG9zdXJlIHRyYWNlciwgd2hpY2ggaXMgaGFuZGxlZCBieSBjaGVja2luZyB3aGV0aGVyIFthc3NpZ25tZW50c10gaGFzCiAgLy8vIGJlZW4gc2V0IHRvIFtTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUl0uCiAgYm9vbCBhYmFuZG9uSW5mZXJlbmNpbmcgPSBmYWxzZTsKICBib29sIGdldCBtaWdodFJlc3VtZSA9PgogICAgICAhaWRlbnRpY2FsKGFzc2lnbm1lbnRzLCBTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUik7CgogIC8vLyBOdW1iZXIgb2YgdGltZXMgdGhpcyBbVHlwZUluZm9ybWF0aW9uXSBoYXMgY2hhbmdlZCB0eXBlLgogIGludCByZWZpbmVDb3VudCA9IDA7CgogIC8vLyBXaGV0aGVyIHRoaXMgW1R5cGVJbmZvcm1hdGlvbl0gaXMgY3VycmVudGx5IGluIHRoZSBpbmZlcnJlcidzCiAgLy8vIHdvcmsgcXVldWUuCiAgYm9vbCBpblF1ZXVlID0gZmFsc2U7CgogIC8vLyBVc2VkIHRvIGRpc2FibGUgZW5xdWV1ZWluZyBvZiB0eXBlIGluZm9ybWF0aW9ucyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlaXIKICAvLy8gdHlwZSB3aWxsIG5vdCBjaGFuZ2UgZm9yIG90aGVyIHJlYXNvbnMgdGhhbiBiZWluZyBzdGFibGUuIEZvciBleGFtcGxlLAogIC8vLyBpZiBpbmZlcmVuY2UgaXMgZGlzYWJsZWQgZm9yIGEgdHlwZSBhbmQgaXQgaXMgaGFyZHdpcmVkIHRvIGR5bmFtaWMsIHRoaXMKICAvLy8gaXMgc2V0IHRvIHRydWUgdG8gc3BhcmUgcmVjb21wdXRpbmcgZHluYW1pYyBhZ2FpbiBhbmQgYWdhaW4uIENoYW5naW5nIHRoaXMKICAvLy8gdG8gZmFsc2Ugc2hvdWxkIG5ldmVyIGNoYW5nZSBpbmZlcmVuY2Ugb3V0Y29tZSwganVzdCBtYWtlIGlzIHNsb3dlci4KICBib29sIGRvTm90RW5xdWV1ZSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIGhhcyBhIHN0YWJsZSBbdHlwZV0gdGhhdCB3aWxsIG5vdAogIC8vLyBjaGFuZ2UuCiAgYm9vbCBpc1N0YWJsZSA9IGZhbHNlOwoKICAvLyBUeXBlSW5mb3JtYXRpb25zIGFyZSB1bmlxdWUuIFN0b3JlIGFuIGFyYml0cmFyeSBpZGVudGl0eSBoYXNoIGNvZGUuCiAgc3RhdGljIGludCBfc3RhdGljSGFzaENvZGUgPSAwOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZSA9IF9zdGF0aWNIYXNoQ29kZSA9IChfc3RhdGljSGFzaENvZGUgKyAxKS50b1Vuc2lnbmVkKDMwKTsKCiAgYm9vbCBnZXQgaXNDb25jcmV0ZSA9PiBmYWxzZTsKCiAgVHlwZUluZm9ybWF0aW9uKHRoaXMudHlwZSwgdGhpcy5jb250ZXh0KQogICAgICA6IF9hc3NpZ25tZW50cyA9IDxUeXBlSW5mb3JtYXRpb24+W10sCiAgICAgICAgdXNlcnMgPSBuZXcgU2V0bGV0PFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgVHlwZUluZm9ybWF0aW9uLm5vQXNzaWdubWVudHModGhpcy50eXBlLCB0aGlzLmNvbnRleHQpCiAgICAgIDogX2Fzc2lnbm1lbnRzID0gY29uc3QgPFR5cGVJbmZvcm1hdGlvbj5bXSwKICAgICAgICB1c2VycyA9IG5ldyBTZXRsZXQ8VHlwZUluZm9ybWF0aW9uPigpOwoKICBUeXBlSW5mb3JtYXRpb24udW50cmFja2VkKHRoaXMudHlwZSkKICAgICAgOiBfYXNzaWdubWVudHMgPSBjb25zdCA8VHlwZUluZm9ybWF0aW9uPltdLAogICAgICAgIHVzZXJzID0gY29uc3QgSW1tdXRhYmxlRW1wdHlTZXQoKSwKICAgICAgICBjb250ZXh0ID0gbnVsbDsKCiAgVHlwZUluZm9ybWF0aW9uLndpdGhBc3NpZ25tZW50cyh0aGlzLnR5cGUsIHRoaXMuY29udGV4dCwgdGhpcy5fYXNzaWdubWVudHMpCiAgICAgIDogdXNlcnMgPSBuZXcgU2V0bGV0PFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgdm9pZCBhZGRVc2VyKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7CiAgICBhc3NlcnQoIXVzZXIuaXNDb25jcmV0ZSk7CiAgICB1c2Vycy5hZGQodXNlcik7CiAgfQoKICB2b2lkIGFkZFVzZXJzT2YoVHlwZUluZm9ybWF0aW9uIG90aGVyKSB7CiAgICB1c2Vycy5hZGRBbGwob3RoZXIudXNlcnMpOwogIH0KCiAgdm9pZCByZW1vdmVVc2VyKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7CiAgICBhc3NlcnQoIXVzZXIuaXNDb25jcmV0ZSk7CiAgICB1c2Vycy5yZW1vdmUodXNlcik7CiAgfQoKICAvLyBUaGUgYmVsb3cgaXMgbm90IGEgY29tcGlsZSB0aW1lIGNvbnN0YW50IHRvIG1ha2UgaXQgZGlmZmVyZW50aWFibGUKICAvLyBmcm9tIG90aGVyIGVtcHR5IGxpc3RzIG9mIFtUeXBlSW5mb3JtYXRpb25dLgogIHN0YXRpYyBmaW5hbCBTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUiA9IG5ldyBMaXN0PFR5cGVJbmZvcm1hdGlvbj4oMCk7CgogIGJvb2wgYXJlQXNzaWdubWVudHNUcmFja2VkKCkgewogICAgcmV0dXJuIGFzc2lnbm1lbnRzICE9IFNUT1BfVFJBQ0tJTkdfQVNTSUdOTUVOVFNfTUFSS0VSOwogIH0KCiAgdm9pZCBhZGRBc3NpZ25tZW50KFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50KSB7CiAgICAvLyBDaGVhcCBvbmUtbGV2ZWwgY3ljbGUgZGV0ZWN0aW9uLgogICAgaWYgKGFzc2lnbm1lbnQgPT0gdGhpcykgcmV0dXJuOwogICAgaWYgKGFyZUFzc2lnbm1lbnRzVHJhY2tlZCgpKSB7CiAgICAgIF9hc3NpZ25tZW50cy5hZGQoYXNzaWdubWVudCk7CiAgICB9CiAgICAvLyBFdmVuIGlmIHdlIGFiYW5kb24gaW5mZXJlbmNpbmcgb24gdGhpcyBbVHlwZUluZm9ybWF0aW9uXSB3ZQogICAgLy8gbmVlZCB0byBjb2xsZWN0IHRoZSB1c2Vycywgc28gdGhhdCBwaGFzZXMgdGhhdCB0cmFjayB3aGVyZQogICAgLy8gZWxlbWVudHMgZmxvdyBpbiBzdGlsbCB3b3JrLgogICAgYXNzaWdubWVudC5hZGRVc2VyKHRoaXMpOwogIH0KCiAgdm9pZCByZW1vdmVBc3NpZ25tZW50KFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50KSB7CiAgICBpZiAoIWFiYW5kb25JbmZlcmVuY2luZyB8fCBtaWdodFJlc3VtZSkgewogICAgICBfYXNzaWdubWVudHMucmVtb3ZlKGFzc2lnbm1lbnQpOwogICAgfQogICAgLy8gV2UgY2FuIGhhdmUgbXVsdGlwbGUgYXNzaWdubWVudHMgb2YgdGhlIHNhbWUgW1R5cGVJbmZvcm1hdGlvbl0uCiAgICBpZiAoIWFzc2lnbm1lbnRzLmNvbnRhaW5zKGFzc2lnbm1lbnQpKSB7CiAgICAgIGFzc2lnbm1lbnQucmVtb3ZlVXNlcih0aGlzKTsKICAgIH0KICB9CgogIEFic3RyYWN0VmFsdWUgcmVmaW5lKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gYWJhbmRvbkluZmVyZW5jaW5nID8gc2FmZVR5cGUoaW5mZXJyZXIpIDogY29tcHV0ZVR5cGUoaW5mZXJyZXIpOwogIH0KCiAgLy8vIENvbXB1dGVzIGEgbmV3IHR5cGUgZm9yIHRoaXMgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZSBkZXBlbmRpbmcgb24gaXRzCiAgLy8vIHBvdGVudGlhbGx5IHVwZGF0ZWQgaW5wdXRzLgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpOwoKICAvLy8gUmV0dXJucyBhbiBhcHByb3hpbWF0aW9uIGZvciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIG5vZGUgdGhhdCBpcyBhbHdheXMKICAvLy8gc2FmZSB0byB1c2UuIFVzZWQgd2hlbiBhYmFuZG9uaW5nIGluZmVyZW5jZSBvbiBhIG5vZGUuCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmR5bmFtaWNUeXBlLnR5cGU7CiAgfQoKICB2b2lkIGdpdmVVcChJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwge2Jvb2wgY2xlYXJBc3NpZ25tZW50czogdHJ1ZX0pIHsKICAgIGFiYW5kb25JbmZlcmVuY2luZyA9IHRydWU7CiAgICAvLyBEbyBub3QgcmVtb3ZlIFt0aGlzXSBhcyBhIHVzZXIgb2Ygbm9kZXMgaW4gW2Fzc2lnbm1lbnRzXSwKICAgIC8vIGJlY2F1c2Ugb3VyIHRyYWNpbmcgYW5hbHlzaXMgY291bGQgYmUgaW50ZXJlc3RlZCBpbiB0cmFjaW5nCiAgICAvLyB0aGlzIG5vZGUuCiAgICBpZiAoY2xlYXJBc3NpZ25tZW50cykgX2Fzc2lnbm1lbnRzID0gU1RPUF9UUkFDS0lOR19BU1NJR05NRU5UU19NQVJLRVI7CiAgICAvLyBEbyBub3QgcmVtb3ZlIHVzZXJzIGJlY2F1c2Ugb3VyIHRyYWNpbmcgYW5hbHlzaXMgY291bGQgYmUKICAgIC8vIGludGVyZXN0ZWQgaW4gdHJhY2luZyB0aGUgdXNlcnMgb2YgdGhpcyBub2RlLgogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9hc3NpZ25tZW50cyA9IFNUT1BfVFJBQ0tJTkdfQVNTSUdOTUVOVFNfTUFSS0VSOwogICAgdXNlcnMgPSBjb25zdCBJbW11dGFibGVFbXB0eVNldCgpOwogIH0KCiAgLy8vIFJlc2V0IHRoZSBhbmFseXNpcyBvZiB0aGlzIG5vZGUgYnkgbWFraW5nIGl0cyB0eXBlIGVtcHR5LgoKICBib29sIHJlc2V0KEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBpZiAoYWJhbmRvbkluZmVyZW5jaW5nKSByZXR1cm4gZmFsc2U7CiAgICB0eXBlID0gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGU7CiAgICByZWZpbmVDb3VudCA9IDA7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpOwoKICAvLy8gVGhlIFtFbGVtZW50XSB3aGVyZSB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIHdhcyBjcmVhdGVkLiBNYXkgYmUgYG51bGxgCiAgLy8vIGZvciBzb21lIFtUeXBlSW5mb3JtYXRpb25dIG5vZGVzLCB3aGVyZSB3ZSBkbyBub3QgbmVlZCB0byBzdG9yZQogIC8vLyB0aGUgaW5mb3JtYXRpb24uCiAgTWVtYmVyRW50aXR5IGdldCBvd25lciA9PiAoY29udGV4dCAhPSBudWxsKSA/IGNvbnRleHQubWVtYmVyIDogbnVsbDsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgdHlwZSBjYW5ub3QgY2hhbmdlIGFmdGVyIGl0IGhhcyBiZWVuCiAgLy8vIGluZmVycmVkLgogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuICFtaWdodFJlc3VtZSAmJiBhc3NpZ25tZW50cy5ldmVyeSgoZSkgPT4gZS5pc1N0YWJsZSk7CiAgfQoKICB2b2lkIHJlbW92ZUFuZENsZWFyUmVmZXJlbmNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgYXNzaWdubWVudHMuZm9yRWFjaCgoaW5mbykgewogICAgICBpbmZvLnJlbW92ZVVzZXIodGhpcyk7CiAgICB9KTsKICB9CgogIHZvaWQgc3RhYmlsaXplKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZW1vdmVBbmRDbGVhclJlZmVyZW5jZXMoaW5mZXJyZXIpOwogICAgLy8gRG8gbm90IHJlbW92ZSB1c2VycyBiZWNhdXNlIHRoZSB0cmFjaW5nIGFuYWx5c2lzIGNvdWxkIGJlIGludGVyZXN0ZWQKICAgIC8vIGluIHRyYWNpbmcgdGhlIHVzZXJzIG9mIHRoaXMgbm9kZS4KICAgIF9hc3NpZ25tZW50cyA9IFNUT1BfVFJBQ0tJTkdfQVNTSUdOTUVOVFNfTUFSS0VSOwogICAgYWJhbmRvbkluZmVyZW5jaW5nID0gdHJ1ZTsKICAgIGlzU3RhYmxlID0gdHJ1ZTsKICB9CgogIHZvaWQgbWF5YmVSZXN1bWUoKSB7CiAgICBpZiAoIW1pZ2h0UmVzdW1lKSByZXR1cm47CiAgICBhYmFuZG9uSW5mZXJlbmNpbmcgPSBmYWxzZTsKICAgIGRvTm90RW5xdWV1ZSA9IGZhbHNlOwogIH0KCiAgLy8vIERlc3Ryb3lzIGluZm9ybWF0aW9uIG5vdCBuZWVkZWQgYWZ0ZXIgdHlwZSBpbmZlcmVuY2UuCiAgdm9pZCBjbGVhbnVwKCkgewogICAgdXNlcnMgPSBudWxsOwogICAgX2Fzc2lnbm1lbnRzID0gbnVsbDsKICB9CgogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KFN0cmluZyBpbmRlbnQpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF90b1N0cnVjdHVyZWRUZXh0KHNiLCBpbmRlbnQsIG5ldyBTZXQ8VHlwZUluZm9ybWF0aW9uPigpKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgdm9pZCBfdG9TdHJ1Y3R1cmVkVGV4dCgKICAgICAgU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmcgaW5kZW50LCBTZXQ8VHlwZUluZm9ybWF0aW9uPiBzZWVuKSB7CiAgICBzYi53cml0ZSh0b1N0cmluZygpKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgYm9vbCBtaWdodEJlUGFzc2VkVG9GdW5jdGlvbkFwcGx5ID0gZmFsc2U7Cn0KCi8vLyBNYXJrZXIgbm9kZSB1c2VkIG9ubHkgZHVyaW5nIHRyZWUgY29uc3RydWN0aW9uIGJ1dCBub3QgZHVyaW5nIGFjdHVhbCB0eXBlCi8vLyByZWZpbmVtZW50LgovLy8KLy8vIEN1cnJlbnRseSwgdGhpcyBpcyB1c2VkIHRvIGdpdmUgYSB0eXBlIHRvIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBldmVuIGJlZm9yZQovLy8gdGhlIGNvcnJlc3BvbmRpbmcgZGVmYXVsdCBleHByZXNzaW9uIGhhcyBiZWVuIGFuYWx5emVkLiBTZWUKLy8vIFtnZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyXSBhbmQgW3NldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXJdIGZvciBkZXRhaWxzLgpjbGFzcyBQbGFjZWhvbGRlclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgUGxhY2Vob2xkZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGUsIGNvbnRleHQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgdmlzaXQgcGxhY2Vob2xkZXIiKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVmaW5lIHBsYWNlaG9sZGVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICJQbGFjZWhvbGRlciBbJGhhc2hDb2RlXSI7Cn0KCi8vLyBQYXJhbWV0ZXJzIG9mIGluc3RhbmNlIGZ1bmN0aW9ucyBiZWhhdmUgZGlmZmVyZW50bHkgdGhhbiBvdGhlcgovLy8gZWxlbWVudHMgYmVjYXVzZSB0aGUgaW5mZXJyZXIgbWF5IHJlbW92ZSBhc3NpZ25tZW50cy4gVGhpcyBoYXBwZW5zCi8vLyB3aGVuIHRoZSByZWNlaXZlciBvZiBhIGR5bmFtaWMgY2FsbCBzaXRlIGNhbiBiZSByZWZpbmVkCi8vLyB0byBhIHR5cGUgd2hlcmUgd2Uga25vdyBtb3JlIGFib3V0IHdoaWNoIGluc3RhbmNlIG1ldGhvZCBpcyBiZWluZwovLy8gY2FsbGVkLgpjbGFzcyBQYXJhbWV0ZXJBc3NpZ25tZW50cyBleHRlbmRzIEl0ZXJhYmxlQmFzZTxUeXBlSW5mb3JtYXRpb24+IHsKICBmaW5hbCBNYXA8VHlwZUluZm9ybWF0aW9uLCBpbnQ+IGFzc2lnbm1lbnRzID0gbmV3IE1hcDxUeXBlSW5mb3JtYXRpb24sIGludD4oKTsKCiAgdm9pZCByZW1vdmUoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGludCBleGlzdGluZyA9IGFzc2lnbm1lbnRzW2luZm9dOwogICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHJldHVybjsKICAgIGlmIChleGlzdGluZyA9PSAxKSB7CiAgICAgIGFzc2lnbm1lbnRzLnJlbW92ZShpbmZvKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2lnbm1lbnRzW2luZm9dID0gZXhpc3RpbmcgLSAxOwogICAgfQogIH0KCiAgdm9pZCBhZGQoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGludCBleGlzdGluZyA9IGFzc2lnbm1lbnRzW2luZm9dOwogICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHsKICAgICAgYXNzaWdubWVudHNbaW5mb10gPSAxOwogICAgfSBlbHNlIHsKICAgICAgYXNzaWdubWVudHNbaW5mb10gPSBleGlzdGluZyArIDE7CiAgICB9CiAgfQoKICB2b2lkIHJlcGxhY2UoVHlwZUluZm9ybWF0aW9uIG9sZCwgVHlwZUluZm9ybWF0aW9uIHJlcGxhY2VtZW50KSB7CiAgICBpbnQgZXhpc3RpbmcgPSBhc3NpZ25tZW50c1tvbGRdOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgaW50IG90aGVyID0gYXNzaWdubWVudHNbcmVwbGFjZW1lbnRdOwogICAgICBpZiAob3RoZXIgIT0gbnVsbCkgZXhpc3RpbmcgKz0gb3RoZXI7CiAgICAgIGFzc2lnbm1lbnRzW3JlcGxhY2VtZW50XSA9IGV4aXN0aW5nOwogICAgICBhc3NpZ25tZW50cy5yZW1vdmUob2xkKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGl0ZXJhdG9yID0+IGFzc2lnbm1lbnRzLmtleXMuaXRlcmF0b3I7CiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8VHlwZUluZm9ybWF0aW9uPiB3aGVyZShGdW5jdGlvbiBmKSA9PiBhc3NpZ25tZW50cy5rZXlzLndoZXJlKGYpOwoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKE9iamVjdCBpbmZvKSA9PiBhc3NpZ25tZW50cy5jb250YWluc0tleShpbmZvKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gYXNzaWdubWVudHMua2V5cy50b0xpc3QoKS50b1N0cmluZygpOwp9CgovLy8gQSBub2RlIHJlcHJlc2VudGluZyBhIHJlc29sdmVkIGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudC4gVGhlIGtpbmQgb2YKLy8vIGVsZW1lbnRzIHRoYXQgbmVlZCBhbiBbRWxlbWVudFR5cGVJbmZvcm1hdGlvbl0gYXJlOgovLy8KLy8vIC0gRnVuY3Rpb25zIChpbmNsdWRpbmcgZ2V0dGVycyBhbmQgc2V0dGVycykKLy8vIC0gQ29uc3RydWN0b3JzIChmYWN0b3J5IG9yIGdlbmVyYXRpdmUpCi8vLyAtIEZpZWxkcwovLy8gLSBQYXJhbWV0ZXJzCi8vLyAtIExvY2FsIHZhcmlhYmxlcyBtdXRhdGVkIGluIGNsb3N1cmVzCi8vLwovLy8gVGhlIFtFbGVtZW50VHlwZUluZm9ybWF0aW9uXSBvZiBhIGZ1bmN0aW9uIGFuZCBhIGNvbnN0cnVjdG9yIGlzIGl0cwovLy8gcmV0dXJuIHR5cGUuCi8vLwovLy8gTm90ZSB0aGF0IGEgZmV3IGVsZW1lbnRzIG9mIHRoZXNlIGtpbmRzIG11c3QgYmUgdHJlYXRlZCBzcGVjaWFsbHksCi8vLyBhbmQgdGhleSBhcmUgZGVhbHQgaW4gW0VsZW1lbnRUeXBlSW5mb3JtYXRpb24uaGFuZGxlU3BlY2lhbENhc2VzXToKLy8vCi8vLyAtIFBhcmFtZXRlcnMgb2YgY2xvc3VyZXMsIGBub1N1Y2hNZXRob2RgIGFuZCBgY2FsbGAgaW5zdGFuY2UKLy8vICAgbWV0aG9kczogd2UgY3VycmVudGx5IGRvIG5vdCBpbmZlciB0eXBlcyBmb3IgdGhvc2UuCi8vLwovLy8gLSBGaWVsZHMgYW5kIHBhcmFtZXRlcnMgYmVpbmcgYXNzaWduZWQgYnkgc3ludGhlc2l6ZWQgY2FsbHMgZG9uZSBieQovLy8gICB0aGUgYmFja2VuZDogd2UgZG8gbm90IGtub3cgd2hhdCB0eXBlcyB0aGUgYmFja2VuZCB3aWxsIHVzZS4KLy8vCi8vLyAtIE5hdGl2ZSBmdW5jdGlvbnMgYW5kIGZpZWxkczogYmVjYXVzZSBuYXRpdmUgbWV0aG9kcyBjb250YWluIG5vIERhcnQKLy8vICAgY29kZSwgYW5kIG5hdGl2ZSBmaWVsZHMgZG8gbm90IGhhdmUgRGFydCBhc3NpZ25tZW50cywgd2UganVzdAovLy8gICB0cnVzdCB0aGVpciB0eXBlIGFubm90YXRpb24uCi8vLwphYnN0cmFjdCBjbGFzcyBFbGVtZW50VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHsKICAvLy8gTWFya2VyIHRvIGRpc2FibGUgaW5mZXJlbmNlIGZvciBjbG9zdXJlcyBpbiBbaGFuZGxlU3BlY2lhbENhc2VzXS4KICBib29sIGRpc2FibGVJbmZlcmVuY2VGb3JDbG9zdXJlcyA9IHRydWU7CgogIEVsZW1lbnRUeXBlSW5mb3JtYXRpb24uX2ludGVybmFsKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0KQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KTsKICBFbGVtZW50VHlwZUluZm9ybWF0aW9uLl93aXRoQXNzaWdubWVudHMoCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsCiAgICAgIFBhcmFtZXRlckFzc2lnbm1lbnRzIGFzc2lnbm1lbnRzKQogICAgICA6IHN1cGVyLndpdGhBc3NpZ25tZW50cygKICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGUsIGNvbnRleHQsIGFzc2lnbm1lbnRzKTsKCiAgU3RyaW5nIGdldEluZmVycmVkU2lnbmF0dXJlKFR5cGVTeXN0ZW0gdHlwZXMpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZTsKfQoKLy8vIEEgbm9kZSByZXByZXNlbnRpbmcgbWVtYmVycyBpbiB0aGUgYnJvYWRlc3Qgc2Vuc2U6Ci8vLwovLy8gLSBGdW5jdGlvbnMKLy8vIC0gQ29uc3RydWN0b3JzCi8vLyAtIEZpZWxkcyAoYWxzbyBzeW50aGV0aWMgb25lcyBkdWUgdG8gY2xvc3VyZXMpCi8vLyAtIExvY2FsIGZ1bmN0aW9ucyAoY2xvc3VyZXMpCi8vLwovLy8gVGhlc2Ugc2hvdWxkIG5ldmVyIGJlIGNyZWF0ZWQgZGlyZWN0bHkgYnV0IGluc3RlYWQgYXJlIGNvbnN0cnVjdGVkIGJ5Ci8vLyB0aGUgW0VsZW1lbnRUeXBlSW5mb3JtYXRpb25dIGZhY3RvcnkuCmFic3RyYWN0IGNsYXNzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIEVsZW1lbnRUeXBlSW5mb3JtYXRpb24KICAgIHdpdGggQXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBNZW1iZXJFbnRpdHkgX21lbWJlcjsKCiAgLy8vIElmIFtlbGVtZW50XSBpcyBhIGZ1bmN0aW9uLCBbY2xvc3VyaXplZENvdW50XSBpcyB0aGUgbnVtYmVyIG9mCiAgLy8vIHRpbWVzIGl0IGlzIGNsb3N1cml6ZWQuIFRoZSB2YWx1ZSBnZXRzIHVwZGF0ZWQgd2hpbGUgaW5mZXJyaW5nLgogIGludCBjbG9zdXJpemVkQ291bnQgPSAwOwoKICAvLyBTdHJpY3QgYGJvb2xgIHZhbHVlIGlzIGNvbXB1dGVkIGluIGNsZWFudXAoKS4gQWxzbyB1c2VkIGFzIGEgZmxhZyB0byBzZWUgaWYKICAvLyBjbGVhbnVwIGhhcyBiZWVuIGNhbGxlZC4KICBib29sIF9pc0NhbGxlZE9uY2UgPSBudWxsOwoKICAvLy8gVGhpcyBtYXAgY29udGFpbnMgdGhlIGNhbGxlcnMgb2YgW2VsZW1lbnRdLiBJdCBzdG9yZXMgYWxsIHVuaXF1ZSBjYWxsCiAgLy8vIHNpdGVzIHRvIGVuYWJsZSBjb3VudGluZyB0aGUgZ2xvYmFsIG51bWJlciBvZiBjYWxsIHNpdGVzIG9mIFtlbGVtZW50XS4KICAvLy8KICAvLy8gQSBjYWxsIHNpdGUgaXMgZWl0aGVyIGFuIEFTVCBbYXN0Lk5vZGVdLCBhbiBbRWxlbWVudF0gKHNlZSB1c2VzIG9mCiAgLy8vIFtzeW50aGVzaXplRm9yd2FyZGluZ0NhbGxdIGluIFtTaW1wbGVUeXBlSW5mZXJyZXJWaXNpdG9yXSkgb3IgYW4gSVIKICAvLy8gW2lyLk5vZGVdLgogIC8vLwogIC8vLyBUaGUgZ2xvYmFsIGluZm9ybWF0aW9uIGlzIHN1bW1hcml6ZWQgaW4gW2NsZWFudXBdLCBhZnRlciB3aGljaCBbX2NhbGxlcnNdCiAgLy8vIGlzIHNldCB0byBgbnVsbGAuCiAgTWFwPE1lbWJlckVudGl0eSwgU2V0bGV0PE9iamVjdD4+IF9jYWxsZXJzOwoKICBNZW1iZXJUeXBlSW5mb3JtYXRpb24uX2ludGVybmFsKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIHRoaXMuX21lbWJlcikKICAgICAgOiBzdXBlci5faW50ZXJuYWwoYWJzdHJhY3RWYWx1ZURvbWFpbiwgbnVsbCk7CgogIE1lbWJlckVudGl0eSBnZXQgbWVtYmVyID0+IF9tZW1iZXI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICckbWVtYmVyJzsKCiAgdm9pZCBhZGRDYWxsKE1lbWJlckVudGl0eSBjYWxsZXIsIE9iamVjdCBub2RlKSB7CiAgICBfY2FsbGVycyA/Pz0gPE1lbWJlckVudGl0eSwgU2V0bGV0PE9iamVjdD4+e307CiAgICBfY2FsbGVycy5wdXRJZkFic2VudChjYWxsZXIsICgpID0+IG5ldyBTZXRsZXQoKSkuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCByZW1vdmVDYWxsKE1lbWJlckVudGl0eSBjYWxsZXIsIE9iamVjdCBub2RlKSB7CiAgICBpZiAoX2NhbGxlcnMgPT0gbnVsbCkgcmV0dXJuOwogICAgU2V0bGV0IGNhbGxzID0gX2NhbGxlcnNbY2FsbGVyXTsKICAgIGlmIChjYWxscyA9PSBudWxsKSByZXR1cm47CiAgICBjYWxscy5yZW1vdmUobm9kZSk7CiAgICBpZiAoY2FsbHMuaXNFbXB0eSkgewogICAgICBfY2FsbGVycy5yZW1vdmUoY2FsbGVyKTsKICAgIH0KICB9CgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGNhbGxlcnNGb3JUZXN0aW5nIHsKICAgIHJldHVybiBfY2FsbGVycz8ua2V5czsKICB9CgogIGJvb2wgaXNDYWxsZWRPbmNlKCkgewogICAgLy8gSWYgdGhpcyBhc3NlcnQgZmlyZXMgaXQgbWVhbnMgdGhhdCB0aGlzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBmb3IgdGhlCiAgICAvLyBlbGVtZW50IHdhcyBub3QgcGFydCBvZiB0eXBlIGluZmVyZW5jZS4gVGhpcyBoYXBwZW5zIGZvcgogICAgLy8gQ29uc3RydWN0b3JCb2R5RWxlbWVudHMsIHNvIGd1YXJkIHRoZSBjYWxsIHdpdGggYSB0ZXN0IGZvcgogICAgLy8gQ29uc3RydWN0b3JCb2R5RWxlbWVudC4gRm9yIG90aGVyIGVsZW1lbnRzLCBpbnZlc3RpZ2F0ZSB3aHkgdGhlIGVsZW1lbnQKICAgIC8vIHdhcyBub3QgcHJlc2VudCBmb3IgdHlwZSBpbmZlcmVuY2UuCiAgICBhc3NlcnQoX2lzQ2FsbGVkT25jZSAhPSBudWxsKTsKICAgIHJldHVybiBfaXNDYWxsZWRPbmNlID8/IGZhbHNlOwogIH0KCiAgYm9vbCBfY29tcHV0ZUlzQ2FsbGVkT25jZSgpIHsKICAgIGlmIChfY2FsbGVycyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpbnQgY291bnQgPSAwOwogICAgZm9yICh2YXIgc2V0IGluIF9jYWxsZXJzLnZhbHVlcykgewogICAgICBjb3VudCArPSBzZXQubGVuZ3RoOwogICAgICBpZiAoY291bnQgPiAxKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gY291bnQgPT0gMTsKICB9CgogIHZvaWQgY29tcHV0ZUlzQ2FsbGVkT25jZSgpIHsKICAgIGFzc2VydChfaXNDYWxsZWRPbmNlID09IG51bGwsICJpc0NhbGxlZE9uY2UgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZC4iKTsKICAgIF9pc0NhbGxlZE9uY2UgPSBfY29tcHV0ZUlzQ2FsbGVkT25jZSgpOwogIH0KCiAgYm9vbCBnZXQgaXNDbG9zdXJpemVkID0+IGNsb3N1cml6ZWRDb3VudCA+IDA7CgogIC8vIENsb3N1cml6ZWQgbWV0aG9kcyBuZXZlciBiZWNvbWUgc3RhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpbgogIC8vIFt1c2Vyc10gaXMgYWNjdXJhdGUuIFRoZSBpbmZlcmVuY2Ugc3RvcHMgdHJhY2tpbmcgdXNlcnMgZm9yIHN0YWJsZSB0eXBlcy4KICAvLyBOb3RlIHRoYXQgd2Ugb25seSBvdmVycmlkZSB0aGUgZ2V0dGVyLCB0aGUgc2V0dGVyIHdpbGwgc3RpbGwgbW9kaWZ5IHRoZQogIC8vIHN0YXRlIG9mIHRoZSBbaXNTdGFibGVdIGZpZWxkIGluaGVyaXRlZCBmcm9tIFtUeXBlSW5mb3JtYXRpb25dLgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RhYmxlID0+IHN1cGVyLmlzU3RhYmxlICYmICFpc0Nsb3N1cml6ZWQ7CgogIEFic3RyYWN0VmFsdWUgaGFuZGxlU3BlY2lhbENhc2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKTsKCiAgQWJzdHJhY3RWYWx1ZSBfaGFuZGxlRnVuY3Rpb25DYXNlKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGlmIChpbmZlcnJlci5jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKGZ1bmN0aW9uKSkgewogICAgICAvLyBVc2UgdGhlIHR5cGUgYW5ub3RhdGlvbiBhcyB0aGUgdHlwZSBmb3IgbmF0aXZlIGVsZW1lbnRzLiBXZQogICAgICAvLyBhbHNvIGdpdmUgdXAgb24gaW5mZXJyaW5nIHRvIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQgbmV2ZXIKICAgICAgLy8gZ29lcyBpbiB0aGUgd29yayBxdWV1ZS4KICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgcmV0dXJuIGluZmVycmVyCiAgICAgICAgICAudHlwZU9mTmF0aXZlQmVoYXZpb3IoCiAgICAgICAgICAgICAgaW5mZXJyZXIuY2xvc2VkV29ybGQubmF0aXZlRGF0YS5nZXROYXRpdmVNZXRob2RCZWhhdmlvcihmdW5jdGlvbikpCiAgICAgICAgICAudHlwZTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBwb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBfcG90ZW50aWFsbHlOYXJyb3dUeXBlKG1hc2ssIGluZmVycmVyKTsKICB9CgogIEFic3RyYWN0VmFsdWUgX3BvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcik7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWUgc3BlY2lhbCA9IGhhbmRsZVNwZWNpYWxDYXNlcyhpbmZlcnJlcik7CiAgICBpZiAoc3BlY2lhbCAhPSBudWxsKSByZXR1cm4gcG90ZW50aWFsbHlOYXJyb3dUeXBlKHNwZWNpYWwsIGluZmVycmVyKTsKICAgIHJldHVybiBwb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgICAgaW5mZXJyZXIudHlwZXMuY29tcHV0ZVR5cGVNYXNrKGFzc2lnbm1lbnRzKSwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIHBvdGVudGlhbGx5TmFycm93VHlwZShzdXBlci5zYWZlVHlwZShpbmZlcnJlciksIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdNZW1iZXIgJF9tZW1iZXIgJHR5cGUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdE1lbWJlclR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYW51cCgpIHsKICAgIF9jYWxsZXJzID0gbnVsbDsKICAgIHN1cGVyLmNsZWFudXAoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRJbmZlcnJlZFNpZ25hdHVyZShUeXBlU3lzdGVtIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuZ2V0SW5mZXJyZWRTaWduYXR1cmVPZk1ldGhvZChfbWVtYmVyKTsKICB9Cn0KCmNsYXNzIEZpZWxkVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHsKICBGaWVsZEVudGl0eSBnZXQgX2ZpZWxkID0+IF9tZW1iZXI7CiAgZmluYWwgRGFydFR5cGUgX3R5cGU7CgogIEZpZWxkVHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIEZpZWxkRW50aXR5IGVsZW1lbnQsIHRoaXMuX3R5cGUpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgaWYgKCFpbmZlcnJlci5jYW5GaWVsZEJlVXNlZEZvckdsb2JhbE9wdGltaXphdGlvbnMoX2ZpZWxkKSB8fAogICAgICAgIGluZmVycmVyLmFzc3VtZUR5bmFtaWMoX2ZpZWxkKSkgewogICAgICAvLyBEbyBub3QgaW5mZXIgdHlwZXMgZm9yIGZpZWxkcyB0aGF0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGFubm90YXRpb24gb3IKICAgICAgLy8gYXJlIGFzc2lnbmVkIGJ5IHN5bnRoZXNpemVkIGNhbGxzCgogICAgICBnaXZlVXAoaW5mZXJyZXIpOwogICAgICByZXR1cm4gc2FmZVR5cGUoaW5mZXJyZXIpOwogICAgfQogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIoX2ZpZWxkKSkgewogICAgICAvLyBVc2UgdGhlIHR5cGUgYW5ub3RhdGlvbiBhcyB0aGUgdHlwZSBmb3IgbmF0aXZlIGVsZW1lbnRzLiBXZQogICAgICAvLyBhbHNvIGdpdmUgdXAgb24gaW5mZXJyaW5nIHRvIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQgbmV2ZXIKICAgICAgLy8gZ29lcyBpbiB0aGUgd29yayBxdWV1ZS4KICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgcmV0dXJuIGluZmVycmVyCiAgICAgICAgICAudHlwZU9mTmF0aXZlQmVoYXZpb3IoaW5mZXJyZXIuY2xvc2VkV29ybGQubmF0aXZlRGF0YQogICAgICAgICAgICAgIC5nZXROYXRpdmVGaWVsZExvYWRCZWhhdmlvcihfZmllbGQpKQogICAgICAgICAgLnR5cGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgX3BvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9uYXJyb3dUeXBlKGluZmVycmVyLmNsb3NlZFdvcmxkLCBtYXNrLCBfdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIC8vIFRoZSBudW1iZXIgb2YgYXNzaWdubWVudHMgb2Ygbm9uLWZpbmFsIGZpZWxkcyBpcwogICAgLy8gbm90IHN0YWJsZS4gVGhlcmVmb3JlIHN1Y2ggYSBmaWVsZCBjYW5ub3QgYmUgc3RhYmxlLgogICAgaWYgKCFfZmllbGQuaXNBc3NpZ25hYmxlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5oYXNTdGFibGVUeXBlKGluZmVycmVyKTsKICB9Cn0KCmNsYXNzIEdldHRlclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IF9nZXR0ZXIgPT4gX21lbWJlcjsKICBmaW5hbCBGdW5jdGlvblR5cGUgX3R5cGU7CgogIEdldHRlclR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIHRoaXMuX3R5cGUpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9oYW5kbGVGdW5jdGlvbkNhc2UoX2dldHRlciwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBfcG90ZW50aWFsbHlOYXJyb3dUeXBlKAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX25hcnJvd1R5cGUoaW5mZXJyZXIuY2xvc2VkV29ybGQsIG1hc2ssIF90eXBlLnJldHVyblR5cGUpOwogIH0KfQoKY2xhc3MgU2V0dGVyVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHsKICBGdW5jdGlvbkVudGl0eSBnZXQgX3NldHRlciA9PiBfbWVtYmVyOwoKICBTZXR0ZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkKICAgICAgOiBzdXBlci5faW50ZXJuYWwoYWJzdHJhY3RWYWx1ZURvbWFpbiwgZWxlbWVudCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgaGFuZGxlU3BlY2lhbENhc2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX2hhbmRsZUZ1bmN0aW9uQ2FzZShfc2V0dGVyLCBpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIF9wb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBtYXNrOwogIH0KfQoKY2xhc3MgTWV0aG9kVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHsKICBGdW5jdGlvbkVudGl0eSBnZXQgX21ldGhvZCA9PiBfbWVtYmVyOwogIGZpbmFsIEZ1bmN0aW9uVHlwZSBfdHlwZTsKCiAgTWV0aG9kVHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgdGhpcy5fdHlwZSkKICAgICAgOiBzdXBlci5faW50ZXJuYWwoYWJzdHJhY3RWYWx1ZURvbWFpbiwgZWxlbWVudCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgaGFuZGxlU3BlY2lhbENhc2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX2hhbmRsZUZ1bmN0aW9uQ2FzZShfbWV0aG9kLCBpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIF9wb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBfbmFycm93VHlwZShpbmZlcnJlci5jbG9zZWRXb3JsZCwgbWFzaywgX3R5cGUucmV0dXJuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IGZhbHNlOwp9CgpjbGFzcyBGYWN0b3J5Q29uc3RydWN0b3JUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBNZW1iZXJUeXBlSW5mb3JtYXRpb24gewogIENvbnN0cnVjdG9yRW50aXR5IGdldCBfY29uc3RydWN0b3IgPT4gX21lbWJlcjsKICBmaW5hbCBGdW5jdGlvblR5cGUgX3R5cGU7CgogIEZhY3RvcnlDb25zdHJ1Y3RvclR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQsIHRoaXMuX3R5cGUpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIGlmIChfY29uc3RydWN0b3IuaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcikgewogICAgICBpZiAoX2NvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzID09IGluZmVycmVyLmNvbW1vbkVsZW1lbnRzLmludENsYXNzKSB7CiAgICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbmNsdWRlTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGUpOwogICAgICB9IGVsc2UgaWYgKF9jb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcyA9PQogICAgICAgICAgaW5mZXJyZXIuY29tbW9uRWxlbWVudHMuYm9vbENsYXNzKSB7CiAgICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbmNsdWRlTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICAgICAgfSBlbHNlIGlmIChfY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3MgPT0KICAgICAgICAgIGluZmVycmVyLmNvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSB7CiAgICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbmNsdWRlTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluLnN0cmluZ1R5cGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2hhbmRsZUZ1bmN0aW9uQ2FzZShfY29uc3RydWN0b3IsIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgX3BvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9uYXJyb3dUeXBlKGluZmVycmVyLmNsb3NlZFdvcmxkLCBtYXNrLCBfdHlwZS5yZXR1cm5UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KfQoKY2xhc3MgR2VuZXJhdGl2ZUNvbnN0cnVjdG9yVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHsKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgX2NvbnN0cnVjdG9yID0+IF9tZW1iZXI7CgogIEdlbmVyYXRpdmVDb25zdHJ1Y3RvclR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KQogICAgICA6IHN1cGVyLl9pbnRlcm5hbChhYnN0cmFjdFZhbHVlRG9tYWluLCBlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBoYW5kbGVTcGVjaWFsQ2FzZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBfaGFuZGxlRnVuY3Rpb25DYXNlKF9jb25zdHJ1Y3RvciwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBfcG90ZW50aWFsbHlOYXJyb3dUeXBlKAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gbWFzazsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KfQoKLy8vIEEgbm9kZSByZXByZXNlbnRpbmcgcGFyYW1ldGVyczoKLy8vCi8vLyAtIFBhcmFtZXRlcnMKLy8vIC0gSW5pdGlhbGl6aW5nIGZvcm1hbHMKLy8vCi8vLyBUaGVzZSBzaG91bGQgbmV2ZXIgYmUgY3JlYXRlZCBkaXJlY3RseSBidXQgaW5zdGVhZCBhcmUgY29uc3RydWN0ZWQgYnkKLy8vIHRoZSBbRWxlbWVudFR5cGVJbmZvcm1hdGlvbl0gZmFjdG9yeS4KY2xhc3MgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgRWxlbWVudFR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgTG9jYWwgX3BhcmFtZXRlcjsKICBmaW5hbCBEYXJ0VHlwZSBfdHlwZTsKICBmaW5hbCBGdW5jdGlvbkVudGl0eSBfbWV0aG9kOwogIGZpbmFsIGJvb2wgX2lzSW5zdGFuY2VNZW1iZXJQYXJhbWV0ZXI7CiAgZmluYWwgYm9vbCBfaXNDbG9zdXJlUGFyYW1ldGVyOwogIGZpbmFsIGJvb2wgX2lzSW5pdGlhbGl6aW5nRm9ybWFsOwogIGJvb2wgX2lzVGVhck9mZkNsb3N1cmVQYXJhbWV0ZXIgPSBmYWxzZTsKCiAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLmxvY2FsRnVuY3Rpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsCiAgICAgIHRoaXMuX3BhcmFtZXRlciwKICAgICAgdGhpcy5fdHlwZSwKICAgICAgdGhpcy5fbWV0aG9kKQogICAgICA6IF9pc0luc3RhbmNlTWVtYmVyUGFyYW1ldGVyID0gZmFsc2UsCiAgICAgICAgX2lzQ2xvc3VyZVBhcmFtZXRlciA9IHRydWUsCiAgICAgICAgX2lzSW5pdGlhbGl6aW5nRm9ybWFsID0gZmFsc2UsCiAgICAgICAgc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGNvbnRleHQpOwoKICBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24uc3RhdGljKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMuX3BhcmFtZXRlciwgdGhpcy5fdHlwZSwgdGhpcy5fbWV0aG9kLAogICAgICB7Ym9vbCBpc0luaXRpYWxpemluZ0Zvcm1hbDogZmFsc2V9KQogICAgICA6IF9pc0luc3RhbmNlTWVtYmVyUGFyYW1ldGVyID0gZmFsc2UsCiAgICAgICAgX2lzQ2xvc3VyZVBhcmFtZXRlciA9IGZhbHNlLAogICAgICAgIF9pc0luaXRpYWxpemluZ0Zvcm1hbCA9IGlzSW5pdGlhbGl6aW5nRm9ybWFsLAogICAgICAgIHN1cGVyLl9pbnRlcm5hbChhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0KTsKCiAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLmluc3RhbmNlTWVtYmVyKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LAogICAgICB0aGlzLl9wYXJhbWV0ZXIsCiAgICAgIHRoaXMuX3R5cGUsCiAgICAgIHRoaXMuX21ldGhvZCwKICAgICAgUGFyYW1ldGVyQXNzaWdubWVudHMgYXNzaWdubWVudHMpCiAgICAgIDogX2lzSW5zdGFuY2VNZW1iZXJQYXJhbWV0ZXIgPSB0cnVlLAogICAgICAgIF9pc0Nsb3N1cmVQYXJhbWV0ZXIgPSBmYWxzZSwKICAgICAgICBfaXNJbml0aWFsaXppbmdGb3JtYWwgPSBmYWxzZSwKICAgICAgICBzdXBlci5fd2l0aEFzc2lnbm1lbnRzKGFic3RyYWN0VmFsdWVEb21haW4sIGNvbnRleHQsIGFzc2lnbm1lbnRzKTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG1ldGhvZCA9PiBfbWV0aG9kOwoKICBMb2NhbCBnZXQgcGFyYW1ldGVyID0+IF9wYXJhbWV0ZXI7CgogIGJvb2wgZ2V0IGlzUmVndWxhclBhcmFtZXRlciA9PiAhX2lzSW5pdGlhbGl6aW5nRm9ybWFsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAnJHBhcmFtZXRlcic7CgogIHZvaWQgdGFnQXNUZWFyT2ZmQ2xvc3VyZVBhcmFtZXRlcihJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgYXNzZXJ0KCFfaXNJbml0aWFsaXppbmdGb3JtYWwpOwogICAgX2lzVGVhck9mZkNsb3N1cmVQYXJhbWV0ZXIgPSB0cnVlOwogICAgLy8gV2UgaGF2ZSB0byBhZGQgYSBmbG93LWVkZ2UgZm9yIHRoZSBkZWZhdWx0IHZhbHVlIChpZiBpdCBleGlzdHMpLCBhcyB3ZQogICAgLy8gbWlnaHQgbm90IHNlZSBhbGwgY2FsbC1zaXRlcyBhbmQgdGh1cyBtaXNzIHRoZSB1c2Ugb2YgaXQuCiAgICBUeXBlSW5mb3JtYXRpb24gZGVmYXVsdFR5cGUgPQogICAgICAgIGluZmVycmVyLmdldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIoX3BhcmFtZXRlcik7CiAgICBpZiAoZGVmYXVsdFR5cGUgIT0gbnVsbCkgZGVmYXVsdFR5cGUuYWRkVXNlcih0aGlzKTsKICB9CgogIC8vIFRPRE8oaGVyaHV0KTogQ2xlYW51cCBpbnRvIG9uZSBjb25kaXRpb25hbC4KICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgaWYgKCFpbmZlcnJlci5jYW5GdW5jdGlvblBhcmFtZXRlcnNCZVVzZWRGb3JHbG9iYWxPcHRpbWl6YXRpb25zKF9tZXRob2QpIHx8CiAgICAgICAgaW5mZXJyZXIuYXNzdW1lRHluYW1pYyhfbWV0aG9kKSkgewogICAgICAvLyBEbyBub3QgaW5mZXIgdHlwZXMgZm9yIHBhcmFtZXRlcnMgdGhhdCBoYXZlIGEgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9uCiAgICAgIC8vIG9yIHRoYXQgYXJlIGFzc2lnbmVkIGJ5IHN5bnRoZXNpemVkIGNhbGxzLgogICAgICBnaXZlVXAoaW5mZXJyZXIpOwogICAgICByZXR1cm4gc2FmZVR5cGUoaW5mZXJyZXIpOwogICAgfQoKICAgIC8vIFRoZSBiZWxvdyBkbyBub3QgYXBwbHkgdG8gcGFyYW1ldGVycyBvZiBjb25zdHJ1Y3RvcnMsIHNvIHNraXAKICAgIC8vIGluaXRpYWxpemluZyBmb3JtYWxzLgogICAgaWYgKF9pc0luaXRpYWxpemluZ0Zvcm1hbCkgcmV0dXJuIG51bGw7CgogICAgaWYgKChfaXNUZWFyT2ZmQ2xvc3VyZVBhcmFtZXRlciB8fCBfaXNDbG9zdXJlUGFyYW1ldGVyKSAmJgogICAgICAgIGRpc2FibGVJbmZlcmVuY2VGb3JDbG9zdXJlcykgewogICAgICAvLyBEbyBub3QgaW5mZXIgdHlwZXMgZm9yIHBhcmFtZXRlcnMgb2YgY2xvc3VyZXMuIFdlIGRvIG5vdAogICAgICAvLyBjbGVhciB0aGUgYXNzaWdubWVudHMgaW4gY2FzZSB0aGUgY2xvc3VyZSBpcyBzdWNjZXNzZnVsbHkKICAgICAgLy8gdHJhY2VkLgogICAgICBnaXZlVXAoaW5mZXJyZXIsIGNsZWFyQXNzaWdubWVudHM6IGZhbHNlKTsKICAgICAgcmV0dXJuIHNhZmVUeXBlKGluZmVycmVyKTsKICAgIH0KICAgIGlmIChfaXNJbnN0YW5jZU1lbWJlclBhcmFtZXRlciAmJgogICAgICAgIChfbWV0aG9kLm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyB8fAogICAgICAgICAgICAoX21ldGhvZC5uYW1lID09IElkZW50aWZpZXJzLmNhbGwgJiYKICAgICAgICAgICAgICAgIGRpc2FibGVJbmZlcmVuY2VGb3JDbG9zdXJlcykpKSB7CiAgICAgIC8vIERvIG5vdCBpbmZlciB0eXBlcyBmb3IgcGFyYW1ldGVycyBvZiBbbm9TdWNoTWV0aG9kXSBhbmQgW2NhbGxdIGluc3RhbmNlCiAgICAgIC8vIG1ldGhvZHMuCiAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgIHJldHVybiBzYWZlVHlwZShpbmZlcnJlcik7CiAgICB9CiAgICBpZiAoaW5mZXJyZXIuaW5mZXJyZWREYXRhQnVpbGRlcgogICAgICAgIC5nZXRDdXJyZW50bHlLbm93bk1pZ2h0QmVQYXNzZWRUb0FwcGx5KF9tZXRob2QpKSB7CiAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgIHJldHVybiBzYWZlVHlwZShpbmZlcnJlcik7CiAgICB9CiAgICBpZiAoX21ldGhvZCA9PSBpbmZlcnJlci5tYWluRWxlbWVudCkgewogICAgICAvLyBUaGUgaW1wbGljaXQgY2FsbCB0byBtYWluIGlzIG5vdCBzZWVuIGJ5IHRoZSBpbmZlcnJlciwKICAgICAgLy8gdGhlcmVmb3JlIHdlIGV4cGxpY2l0bHkgc2V0IHRoZSB0eXBlIG9mIGl0cyBwYXJhbWV0ZXJzIGFzCiAgICAgIC8vIGR5bmFtaWMuCiAgICAgIC8vIFRPRE8oMTQ1NjYpOiBzeW50aGVzaXplIGEgY2FsbCBpbnN0ZWFkIHRvIGdldCB0aGUgZXhhY3QKICAgICAgLy8gdHlwZXMuCiAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgIHJldHVybiBzYWZlVHlwZShpbmZlcnJlcik7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBBYnN0cmFjdFZhbHVlIHBvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZXRob2QpCiAgICAgICAgLmlzVHJ1c3RlZCkgewogICAgICAvLyBJbiBjaGVja2VkIG9yIHN0cm9uZyBtb2RlIHdlIGRvbid0IHRydXN0IHRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzCiAgICAgIC8vIHBhc3NlZCB0byBhIHBhcmFtZXRlci4gVGhlIG1lYW5zIHRoYXQgdGhlIGNoZWNraW5nIG9mIGEgcGFyYW1ldGVyIGlzCiAgICAgIC8vIGJhc2VkIG9uIHRoZSBhY3R1YWwgYXJndW1lbnRzLgogICAgICAvLwogICAgICAvLyBXaXRoIC0tdHJ1c3QtdHlwZS1hbm5vdGF0aW9ucyBvciAtLW9taXQtaW1wbGljaXQtY2hlY2tzIHdlIF9kb18gdHJ1c3QKICAgICAgLy8gdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYSBwYXJhbWV0ZXIgLSBhbmQgd2UgbmV2ZXIgY2hlY2sgdGhlbS4KICAgICAgLy8KICAgICAgLy8gSW4gYWxsIHRoZXNlIGNhc2VzIHdlIF9kb18gdHJ1c3QgdGhlIHN0YXRpYyB0eXBlIG9mIGEgcGFyYW1ldGVyIHdpdGhpbgogICAgICAvLyB0aGUgbWV0aG9kIGl0c2VsZi4gRm9yIGluc3RhbmNlOgogICAgICAvLwogICAgICAvLyAgICAgbWV0aG9kKGludCBpKSA9PiBpOwogICAgICAvLyAgICAgbWFpbigpIHsKICAgICAgLy8gICAgICAgZHluYW1pYyBmID0gbWV0aG9kOwogICAgICAvLyAgICAgICBmKDApOyAvLyB2YWxpZCBjYWxsCiAgICAgIC8vICAgICAgIGYoJycpOyAvLyBpbnZhbGlkIGNhbGwKICAgICAgLy8gICAgIH0KICAgICAgLy8KICAgICAgLy8gSGVyZSwgaW4gYWxsIGNhc2VzLCB3ZSBpbmZlciB0aGUgcmV0dXJuZWQgdmFsdWUgb2YgYG1ldGhvZGAgdG8gYmUgYW4KICAgICAgLy8gYGludGAuIEluIGNoZWNrZWQgYW5kIHN0cm9uZyBtb2RlIHdlIGluZmVyIHRoZSBwYXJhbWV0ZXIgb2YgYG1ldGhvZGAgdG8KICAgICAgLy8gYmUgZWl0aGVyIGBpbnRgIG9yIGBTdHJpbmdgIGFuZCB0aGVyZWZvcmUgaW5zZXJ0IGEgY2hlY2sgYXQgdGhlIGVudHJ5CiAgICAgIC8vIG9mICdtZXRob2QnLiBXaXRoIC0tdHJ1c3QtdHlwZS1hbm5vdGF0aW9ucyBvciAtLW9taXQtaW1wbGljaXQtY2hlY2tzIHdlCiAgICAgIC8vICh1bnNvdW5kbHkpIGluZmVyIHRoZSBwYXJhbWV0ZXIgdG8gYmUgYGludGAgYW5kIGxlYXZlIHRoZSBwYXJhbWV0ZXIKICAgICAgLy8gdW5jaGVja2VkLCBhbmQgYG1ldGhvZGAgd2lsbCBhdCBydW50aW1lIGFjdHVhbGx5IHJldHVybiBhIGBTdHJpbmdgIGZyb20KICAgICAgLy8gdGhlIHNlY29uZCBpbnZvY2F0aW9uLgogICAgICAvLwogICAgICAvLyBUaGUgdHJ1c3Rpbmcgb2YgdGhlIHBhcmFtZXRlciB0eXBlcyB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIG1ldGhvZCBpcwogICAgICAvLyBpcyBkb25lIHRocm91Z2ggYExvY2Fsc0hhbmRsZXIudXBkYXRlYCBjYWxsZWQgaW4KICAgICAgLy8gYEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIuaGFuZGxlUGFyYW1ldGVyYC4KICAgICAgcmV0dXJuIF9uYXJyb3dUeXBlKGluZmVycmVyLmNsb3NlZFdvcmxkLCBtYXNrLCBfdHlwZSk7CiAgICB9CiAgICByZXR1cm4gbWFzazsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWUgc3BlY2lhbCA9IGhhbmRsZVNwZWNpYWxDYXNlcyhpbmZlcnJlcik7CiAgICBpZiAoc3BlY2lhbCAhPSBudWxsKSByZXR1cm4gc3BlY2lhbDsKICAgIHJldHVybiBwb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgICAgaW5mZXJyZXIudHlwZXMuY29tcHV0ZVR5cGVNYXNrKGFzc2lnbm1lbnRzKSwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIHBvdGVudGlhbGx5TmFycm93VHlwZShzdXBlci5zYWZlVHlwZShpbmZlcnJlciksIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgLy8gVGhlIG51bWJlciBvZiBhc3NpZ25tZW50cyBvZiBwYXJhbWV0ZXJzIG9mIGluc3RhbmNlIG1ldGhvZHMgaXMKICAgIC8vIG5vdCBzdGFibGUuIFRoZXJlZm9yZSBzdWNoIGEgcGFyYW1ldGVyIGNhbm5vdCBiZSBzdGFibGUuCiAgICBpZiAoX2lzSW5zdGFuY2VNZW1iZXJQYXJhbWV0ZXIpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnUGFyYW1ldGVyICRfcGFyYW1ldGVyICR0eXBlJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldEluZmVycmVkU2lnbmF0dXJlKFR5cGVTeXN0ZW0gdHlwZXMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24uZ2V0SW5mZXJyZWRTaWduYXR1cmUnKTsKICB9Cn0KCmVudW0gQ2FsbFR5cGUgewogIGFjY2VzcywKICBmb3JJbiwKfQoKYm9vbCB2YWxpZENhbGxUeXBlKENhbGxUeXBlIGNhbGxUeXBlLCBPYmplY3QgY2FsbCkgewogIHN3aXRjaCAoY2FsbFR5cGUpIHsKICAgIGNhc2UgQ2FsbFR5cGUuYWNjZXNzOgogICAgICByZXR1cm4gY2FsbCBpcyBpci5Ob2RlOwogICAgY2FzZSBDYWxsVHlwZS5mb3JJbjoKICAgICAgcmV0dXJuIGNhbGwgaXMgaXIuRm9ySW5TdGF0ZW1lbnQ7CiAgfQogIHRocm93IG5ldyBTdGF0ZUVycm9yKCdVbmV4cGVjdGVkIGNhbGwgdHlwZSAkY2FsbFR5cGUuJyk7Cn0KCi8vLyBBIFtDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbl0gaXMgYSBjYWxsIGZvdW5kIGluIHRoZSBBU1QsIG9yIGEKLy8vIHN5bnRoZXNpemVkIGNhbGwgZm9yIGltcGxpY2l0IGNhbGxzIGluIERhcnQgKHN1Y2ggYXMgZm9yd2FyZGluZwovLy8gZmFjdG9yaWVzKS4gVGhlIFtfY2FsbF0gZmllbGQgaXMgYSBbYXN0Lk5vZGVdIGZvciB0aGUgZm9ybWVyLCBhbmQgYW4KLy8vIFtFbGVtZW50XSBmb3IgdGhlIGxhdHRlci4KLy8vCi8vLyBJbiB0aGUgaW5mZXJyZXIgZ3JhcGgsIFtDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbl0gbm9kZXMgZG8gbm90IGhhdmUKLy8vIGFueSBhc3NpZ25tZW50LiBUaGV5IHJlbHkgb24gdGhlIFtjYWxsZXJdIGZpZWxkIGZvciBzdGF0aWMgY2FsbHMsCi8vLyBhbmQgW3NlbGVjdG9yXSBhbmQgW3JlY2VpdmVyXSBmaWVsZHMgZm9yIGR5bmFtaWMgY2FsbHMuCmFic3RyYWN0IGNsYXNzIENhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uCiAgICB3aXRoIEFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgT2JqZWN0IF9jYWxsOwogIGZpbmFsIE1lbWJlckVudGl0eSBjYWxsZXI7CiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBtYXNrOwogIGZpbmFsIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50czsKICBmaW5hbCBib29sIGluTG9vcDsKCiAgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsCiAgICAgIHRoaXMuX2NhbGwsCiAgICAgIHRoaXMuY2FsbGVyLAogICAgICB0aGlzLnNlbGVjdG9yLAogICAgICB0aGlzLm1hc2ssCiAgICAgIHRoaXMuYXJndW1lbnRzLAogICAgICB0aGlzLmluTG9vcCkKICAgICAgOiBzdXBlci5ub0Fzc2lnbm1lbnRzKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KSB7CiAgICBhc3NlcnQoX2NhbGwgaXMgaXIuTm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2FsbCBzaXRlICRkZWJ1Z05hbWUgJHR5cGUnOwoKICAvLy8gQWRkIFt0aGlzXSB0byB0aGUgZ3JhcGggYmVpbmcgY29tcHV0ZWQgYnkgW2VuZ2luZV0uCiAgdm9pZCBhZGRUb0dyYXBoKEluZmVycmVyRW5naW5lIGVuZ2luZSk7CgogIC8vLyBSZXR1cm4gYW4gaXRlcmFibGUgb3ZlciB0aGUgdGFyZ2V0cyBvZiB0aGlzIGNhbGwuCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgY2FsbGVlczsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gJyRfY2FsbCc7Cn0KCmNsYXNzIFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIE1lbWJlckVudGl0eSBjYWxsZWRFbGVtZW50OwoKICBTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwKICAgICAgT2JqZWN0IGNhbGwsCiAgICAgIE1lbWJlckVudGl0eSBlbmNsb3NpbmcsCiAgICAgIHRoaXMuY2FsbGVkRWxlbWVudCwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBib29sIGluTG9vcCkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBjYWxsLCBlbmNsb3NpbmcsIHNlbGVjdG9yLCBtYXNrLAogICAgICAgICAgICBhcmd1bWVudHMsIGluTG9vcCk7CgogIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBfZ2V0Q2FsbGVkVHlwZUluZm8oSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihjYWxsZWRFbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkVG9HcmFwaChJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNhbGxlZSA9IF9nZXRDYWxsZWRUeXBlSW5mbyhpbmZlcnJlcik7CiAgICBjYWxsZWUuYWRkQ2FsbChjYWxsZXIsIF9jYWxsKTsKICAgIGNhbGxlZS5hZGRVc2VyKHRoaXMpOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50cy5mb3JFYWNoKChpbmZvKSA9PiBpbmZvLmFkZFVzZXIodGhpcykpOwogICAgfQogICAgaW5mZXJyZXIudXBkYXRlUGFyYW1ldGVyQXNzaWdubWVudHMoCiAgICAgICAgdGhpcywgY2FsbGVkRWxlbWVudCwgYXJndW1lbnRzLCBzZWxlY3RvciwgbWFzaywKICAgICAgICByZW1vdmU6IGZhbHNlLCBhZGRUb1F1ZXVlOiBmYWxzZSk7CiAgfQoKICBib29sIGdldCBpc1N5bnRoZXNpemVkIHsKICAgIC8vIFNvbWUgY2FsbHMgZG8gbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIHNlbGVjdG9yLCBmb3IgZXhhbXBsZQogICAgLy8gZm9yd2FyZGluZyBmYWN0b3J5IGNvbnN0cnVjdG9ycywgb3Igc3ludGhlc2l6ZWQgc3VwZXIKICAgIC8vIGNvbnN0cnVjdG9yIGNhbGxzLiBXZSBzeW50aGVzaXplIHRoZXNlIGNhbGxzIGJ1dCBkbwogICAgLy8gbm90IGNyZWF0ZSBhIHNlbGVjdG9yIGZvciB0aGVtLgogICAgcmV0dXJuIHNlbGVjdG9yID09IG51bGw7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gX2dldENhbGxlZFR5cGVJbmZvV2l0aFNlbGVjdG9yKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIudHlwZU9mTWVtYmVyV2l0aFNlbGVjdG9yKGNhbGxlZEVsZW1lbnQsIHNlbGVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGlmIChpc1N5bnRoZXNpemVkKSB7CiAgICAgIGFzc2VydChhcmd1bWVudHMgIT0gbnVsbCk7CiAgICAgIHJldHVybiBfZ2V0Q2FsbGVkVHlwZUluZm8oaW5mZXJyZXIpLnR5cGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2dldENhbGxlZFR5cGVJbmZvV2l0aFNlbGVjdG9yKGluZmVycmVyKS50eXBlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgY2FsbGVlcyA9PiBbY2FsbGVkRWxlbWVudF07CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGJvb2wgaXNTdGFibGUgPSBfZ2V0Q2FsbGVkVHlwZUluZm8oaW5mZXJyZXIpLmlzU3RhYmxlOwogICAgcmV0dXJuIGlzU3RhYmxlICYmCiAgICAgICAgKGFyZ3VtZW50cyA9PSBudWxsIHx8IGFyZ3VtZW50cy5ldmVyeSgoaW5mbykgPT4gaW5mby5pc1N0YWJsZSkpICYmCiAgICAgICAgc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZUFuZENsZWFyUmVmZXJlbmNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBjYWxsZWUgPSBfZ2V0Q2FsbGVkVHlwZUluZm8oaW5mZXJyZXIpOwogICAgY2FsbGVlLnJlbW92ZVVzZXIodGhpcyk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzLmZvckVhY2goKGluZm8pID0+IGluZm8ucmVtb3ZlVXNlcih0aGlzKSk7CiAgICB9CiAgICBzdXBlci5yZW1vdmVBbmRDbGVhclJlZmVyZW5jZXMoaW5mZXJyZXIpOwogIH0KfQoKY2xhc3MgRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uPFQ+IGV4dGVuZHMgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIENhbGxUeXBlIF9jYWxsVHlwZTsKICBmaW5hbCBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXI7CiAgZmluYWwgYm9vbCBpc0NvbmRpdGlvbmFsOwogIGJvb2wgX2hhc0Nsb3N1cmVDYWxsVGFyZ2V0czsKCiAgLy8vIENhY2hlZCBjb25jcmV0ZSB0YXJnZXRzIG9mIHRoaXMgY2FsbC4KICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IF9jb25jcmV0ZVRhcmdldHM7CgogIER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwKICAgICAgdGhpcy5fY2FsbFR5cGUsCiAgICAgIFQgY2FsbCwKICAgICAgTWVtYmVyRW50aXR5IGVuY2xvc2luZywKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgdGhpcy5yZWNlaXZlciwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBib29sIGluTG9vcCwKICAgICAgdGhpcy5pc0NvbmRpdGlvbmFsKQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4sIGNvbnRleHQsIGNhbGwsIGVuY2xvc2luZywgc2VsZWN0b3IsIG1hc2ssCiAgICAgICAgICAgIGFyZ3VtZW50cywgaW5Mb29wKSB7CiAgICBhc3NlcnQodmFsaWRDYWxsVHlwZShfY2FsbFR5cGUsIF9jYWxsKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFRvR3JhcGgoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGFzc2VydChyZWNlaXZlciAhPSBudWxsKTsKICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2sgPSBjb21wdXRlVHlwZWRTZWxlY3RvcihpbmZlcnJlcik7CiAgICBfaGFzQ2xvc3VyZUNhbGxUYXJnZXRzID0KICAgICAgICBpbmZlcnJlci5jbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCB0eXBlTWFzayk7CiAgICBfY29uY3JldGVUYXJnZXRzID0gaW5mZXJyZXIuY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgdHlwZU1hc2spOwogICAgcmVjZWl2ZXIuYWRkVXNlcih0aGlzKTsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMuZm9yRWFjaCgoaW5mbykgPT4gaW5mby5hZGRVc2VyKHRoaXMpKTsKICAgIH0KICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gX2NvbmNyZXRlVGFyZ2V0cykgewogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY2FsbGVlID0KICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgICBjYWxsZWUuYWRkQ2FsbChjYWxsZXIsIF9jYWxsKTsKICAgICAgY2FsbGVlLmFkZFVzZXIodGhpcyk7CiAgICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgICAgdGhpcywgZWxlbWVudCwgYXJndW1lbnRzLCBzZWxlY3RvciwgdHlwZU1hc2ssCiAgICAgICAgICByZW1vdmU6IGZhbHNlLCBhZGRUb1F1ZXVlOiBmYWxzZSk7CiAgICB9CiAgfQoKICAvLy8gYHRydWVgIGlmIHRoaXMgaW52b2NhdGlvbiBjYW4gaGl0IGEgJ2NhbGwnIG1ldGhvZCBvbiBhIGNsb3N1cmUuCiAgYm9vbCBnZXQgaGFzQ2xvc3VyZUNhbGxUYXJnZXRzID0+IF9oYXNDbG9zdXJlQ2FsbFRhcmdldHM7CgogIC8vLyBBbGwgY29uY3JldGUgdGFyZ2V0cyBvZiB0aGlzIGludm9jYXRpb24uIElmIFtoYXNDbG9zdXJlQ2FsbFRhcmdldHNdIGlzCiAgLy8vIGB0cnVlYCB0aGUgaW52b2NhdGlvbiBjYW4gYWRkaXRpb25hbCB0YXJnZXQgYW4gdW5rbm93biBzZXQgb2YgJ2NhbGwnCiAgLy8vIG1ldGhvZHMgb24gY2xvc3VyZXMuCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgY29uY3JldGVUYXJnZXRzID0+IF9jb25jcmV0ZVRhcmdldHM7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGNhbGxlZXMgPT4gX2NvbmNyZXRlVGFyZ2V0czsKCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZWRTZWxlY3RvcihJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPSByZWNlaXZlci50eXBlOwoKICAgIGlmIChtYXNrICE9IHJlY2VpdmVyVHlwZSkgewogICAgICByZXR1cm4gcmVjZWl2ZXJUeXBlID09IGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUKICAgICAgICAgID8gbnVsbAogICAgICAgICAgOiByZWNlaXZlclR5cGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbWFzazsKICAgIH0KICB9CgogIGJvb2wgdGFyZ2V0c0luY2x1ZGVDb21wbGV4Tm9TdWNoTWV0aG9kKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX2NvbmNyZXRlVGFyZ2V0cy5hbnkoKE1lbWJlckVudGl0eSBlKSB7CiAgICAgIHJldHVybiBlLmlzRnVuY3Rpb24gJiYKICAgICAgICAgIGUuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgZS5uYW1lID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8gJiYKICAgICAgICAgIGluZmVycmVyLm5vU3VjaE1ldGhvZERhdGEuaXNDb21wbGV4KGUpOwogICAgfSk7CiAgfQoKICAvLy8gV2Ugb3B0aW1pemUgY2VydGFpbiBvcGVyYXRpb25zIG9uIHRoZSBbaW50XSBjbGFzcyBiZWNhdXNlIHdlIGtub3cgbW9yZQogIC8vLyBhYm91dCB0aGVpciByZXR1cm4gdHlwZSB0aGFuIHRoZSBhY3R1YWwgRGFydCBjb2RlLiBGb3IgZXhhbXBsZSwgd2Uga25vdwogIC8vLyBpbnQgKyBpbnQgcmV0dXJucyBhbiBpbnQuIFRoZSBEYXJ0IGxpYnJhcnkgY29kZSBmb3IgW2ludC5vcGVyYXRvcitdIG9ubHkKICAvLy8gc2F5cyBpdCByZXR1cm5zIGEgW251bV0uCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIG1vcmUgcHJlY2lzZSBUeXBlSW5mb3JtYXRpb24sIG9yIGBudWxsYCB0byBkZWZlciB0byB0aGUKICAvLy8gbGlicmFyeSBjb2RlLgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVJbnRyaXNpZmllZFNlbGVjdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gaW5mZXJyZXIuY2xvc2VkV29ybGQ7CiAgICBpZiAobWFzayA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW50ZWdlck9yTnVsbChtYXNrKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoIXNlbGVjdG9yLmlzQ2FsbCAmJiAhc2VsZWN0b3IuaXNPcGVyYXRvcikgcmV0dXJuIG51bGw7CiAgICBpZiAoIWFyZ3VtZW50cy5uYW1lZC5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgIGlmIChhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPiAxKSByZXR1cm4gbnVsbDsKCiAgICBDbGFzc0VudGl0eSB1aW50MzFJbXBsZW1lbnRhdGlvbiA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3M7CiAgICBib29sIGlzSW50KGluZm8pID0+IGluZm8udHlwZS5jb250YWluc09ubHlJbnQoY2xvc2VkV29ybGQpOwogICAgYm9vbCBpc0VtcHR5KGluZm8pID0+IGluZm8udHlwZS5pc0VtcHR5OwogICAgYm9vbCBpc1VJbnQzMShpbmZvKSB7CiAgICAgIHJldHVybiBpbmZvLnR5cGUuc2F0aXNmaWVzKHVpbnQzMUltcGxlbWVudGF0aW9uLCBjbG9zZWRXb3JsZCk7CiAgICB9CgogICAgYm9vbCBpc1Bvc2l0aXZlSW50KGluZm8pIHsKICAgICAgcmV0dXJuIGluZm8udHlwZS5zYXRpc2ZpZXMoCiAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MsIGNsb3NlZFdvcmxkKTsKICAgIH0KCiAgICBUeXBlSW5mb3JtYXRpb24gdHJ5TGF0ZXIoKSA9PiBpbmZlcnJlci50eXBlcy5ub25OdWxsRW1wdHlUeXBlOwoKICAgIFR5cGVJbmZvcm1hdGlvbiBhcmd1bWVudCA9CiAgICAgICAgYXJndW1lbnRzLmlzRW1wdHkgPyBudWxsIDogYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3Q7CgogICAgU3RyaW5nIG5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgLy8gVGhlc2UgYXJlIHR5cGUgaW5mZXJlbmNlIHJ1bGVzIG9ubHkgZm9yIHVzZWZ1bCBjYXNlcyB0aGF0IGFyZSBub3QKICAgIC8vIGV4cHJlc3NlZCBpbiB0aGUgbGlicmFyeSBjb2RlLCBmb3IgZXhhbXBsZToKICAgIC8vCiAgICAvLyAgICAgaW50ICsgaW50ICAgICAgICAtPiAgaW50CiAgICAvLyAgICAgdWludDMxIHwgdWludDMxICAtPiAgdWludDMxCiAgICAvLwogICAgc3dpdGNoIChuYW1lKSB7CiAgICAgIGNhc2UgJyonOgogICAgICBjYXNlICcrJzoKICAgICAgY2FzZSAnJSc6CiAgICAgIGNhc2UgJ3JlbWFpbmRlcic6CiAgICAgIGNhc2UgJ34vJzoKICAgICAgICBpZiAoaXNFbXB0eShhcmd1bWVudCkpIHJldHVybiB0cnlMYXRlcigpOwogICAgICAgIGlmIChpc1Bvc2l0aXZlSW50KHJlY2VpdmVyKSAmJiBpc1Bvc2l0aXZlSW50KGFyZ3VtZW50KSkgewogICAgICAgICAgLy8gdWludDMxICsgdWludDMxIC0+IHVpbnQzMgogICAgICAgICAgaWYgKG5hbWUgPT0gJysnICYmIGlzVUludDMxKHJlY2VpdmVyKSAmJiBpc1VJbnQzMShhcmd1bWVudCkpIHsKICAgICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLnVpbnQzMlR5cGU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMucG9zaXRpdmVJbnRUeXBlOwogICAgICAgIH0KICAgICAgICBpZiAoaXNJbnQoYXJndW1lbnQpKSB7CiAgICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuaW50VHlwZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICBjYXNlICd8JzoKICAgICAgY2FzZSAnXic6CiAgICAgICAgaWYgKGlzRW1wdHkoYXJndW1lbnQpKSByZXR1cm4gdHJ5TGF0ZXIoKTsKICAgICAgICBpZiAoaXNVSW50MzEocmVjZWl2ZXIpICYmIGlzVUludDMxKGFyZ3VtZW50KSkgewogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLnVpbnQzMVR5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwoKICAgICAgY2FzZSAnPj4nOgogICAgICAgIGlmIChpc0VtcHR5KGFyZ3VtZW50KSkgcmV0dXJuIHRyeUxhdGVyKCk7CiAgICAgICAgaWYgKGlzVUludDMxKHJlY2VpdmVyKSkgewogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLnVpbnQzMVR5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwoKICAgICAgY2FzZSAnJic6CiAgICAgICAgaWYgKGlzRW1wdHkoYXJndW1lbnQpKSByZXR1cm4gdHJ5TGF0ZXIoKTsKICAgICAgICBpZiAoaXNVSW50MzEocmVjZWl2ZXIpIHx8IGlzVUludDMxKGFyZ3VtZW50KSkgewogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLnVpbnQzMVR5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwoKICAgICAgY2FzZSAnLSc6CiAgICAgICAgaWYgKGlzRW1wdHkoYXJndW1lbnQpKSByZXR1cm4gdHJ5TGF0ZXIoKTsKICAgICAgICBpZiAoaXNJbnQoYXJndW1lbnQpKSB7CiAgICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuaW50VHlwZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICBjYXNlICd1bmFyeS0nOgogICAgICAgIC8vIFRoZSByZWNlaXZlciBiZWluZyBhbiBpbnQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGFuIGludC4KICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuaW50VHlwZTsKCiAgICAgIGNhc2UgJ2Ficyc6CiAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5oYXNOb0FyZ3VtZW50cygpCiAgICAgICAgICAgID8gaW5mZXJyZXIudHlwZXMucG9zaXRpdmVJbnRUeXBlCiAgICAgICAgICAgIDogbnVsbDsKCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBpbmZlcnJlci5jbG9zZWRXb3JsZDsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG9sZFRhcmdldHMgPSBfY29uY3JldGVUYXJnZXRzOwogICAgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzayA9IGNvbXB1dGVUeXBlZFNlbGVjdG9yKGluZmVycmVyKTsKICAgIGluZmVycmVyLnVwZGF0ZVNlbGVjdG9ySW5NZW1iZXIoCiAgICAgICAgY2FsbGVyLCBfY2FsbFR5cGUsIF9jYWxsLCBzZWxlY3RvciwgdHlwZU1hc2spOwoKICAgIF9oYXNDbG9zdXJlQ2FsbFRhcmdldHMgPQogICAgICAgIGNsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIHR5cGVNYXNrKTsKICAgIF9jb25jcmV0ZVRhcmdldHMgPSBjbG9zZWRXb3JsZC5sb2NhdGVNZW1iZXJzKHNlbGVjdG9yLCB0eXBlTWFzayk7CgogICAgLy8gVXBkYXRlIHRoZSBjYWxsIGdyYXBoIGlmIHRoZSB0YXJnZXRzIGNvdWxkIGhhdmUgY2hhbmdlZC4KICAgIGlmICghaWRlbnRpY2FsKF9jb25jcmV0ZVRhcmdldHMsIG9sZFRhcmdldHMpKSB7CiAgICAgIC8vIEFkZCBjYWxscyB0byBuZXcgdGFyZ2V0cyB0byB0aGUgZ3JhcGguCiAgICAgIF9jb25jcmV0ZVRhcmdldHMKICAgICAgICAgIC53aGVyZSgodGFyZ2V0KSA9PiAhb2xkVGFyZ2V0cy5jb250YWlucyh0YXJnZXQpKQogICAgICAgICAgLmZvckVhY2goKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNhbGxlZSA9CiAgICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgICAgIGNhbGxlZS5hZGRDYWxsKGNhbGxlciwgX2NhbGwpOwogICAgICAgIGNhbGxlZS5hZGRVc2VyKHRoaXMpOwogICAgICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgICAgICB0aGlzLCBlbGVtZW50LCBhcmd1bWVudHMsIHNlbGVjdG9yLCB0eXBlTWFzaywKICAgICAgICAgICAgcmVtb3ZlOiBmYWxzZSwgYWRkVG9RdWV1ZTogdHJ1ZSk7CiAgICAgIH0pOwoKICAgICAgLy8gV2FsayBvdmVyIHRoZSBvbGQgdGFyZ2V0cywgYW5kIHJlbW92ZSBjYWxscyB0aGF0IGNhbm5vdCBoYXBwZW4gYW55bW9yZS4KICAgICAgb2xkVGFyZ2V0cwogICAgICAgICAgLndoZXJlKCh0YXJnZXQpID0+ICFfY29uY3JldGVUYXJnZXRzLmNvbnRhaW5zKHRhcmdldCkpCiAgICAgICAgICAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY2FsbGVlID0KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgICAgICAgY2FsbGVlLnJlbW92ZUNhbGwoY2FsbGVyLCBfY2FsbCk7CiAgICAgICAgY2FsbGVlLnJlbW92ZVVzZXIodGhpcyk7CiAgICAgICAgaW5mZXJyZXIudXBkYXRlUGFyYW1ldGVyQXNzaWdubWVudHMoCiAgICAgICAgICAgIHRoaXMsIGVsZW1lbnQsIGFyZ3VtZW50cywgc2VsZWN0b3IsIHR5cGVNYXNrLAogICAgICAgICAgICByZW1vdmU6IHRydWUsIGFkZFRvUXVldWU6IHRydWUpOwogICAgICB9KTsKICAgIH0KCiAgICAvLyBXYWxrIG92ZXIgdGhlIGZvdW5kIHRhcmdldHMsIGFuZCBjb21wdXRlIHRoZSBqb2luZWQgdW5pb24gdHlwZSBtYXNrCiAgICAvLyBmb3IgYWxsIHRoZXNlIHRhcmdldHMuCiAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKICAgIGlmIChfaGFzQ2xvc3VyZUNhbGxUYXJnZXRzKSB7CiAgICAgIHJlc3VsdCA9IGFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBpbmZlcnJlci50eXBlcwogICAgICAgICAgLmpvaW5UeXBlTWFza3MoX2NvbmNyZXRlVGFyZ2V0cy5tYXAoKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgaWYgKGluZmVycmVyLnJldHVybnNMaXN0RWxlbWVudFR5cGUoc2VsZWN0b3IsIHR5cGVNYXNrKSkgewogICAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyRWxlbWVudFR5cGUocmVjZWl2ZXIudHlwZSk7CiAgICAgICAgfSBlbHNlIGlmIChpbmZlcnJlci5yZXR1cm5zTWFwVmFsdWVUeXBlKHNlbGVjdG9yLCB0eXBlTWFzaykpIHsKICAgICAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzRGljdGlvbmFyeSh0eXBlTWFzaykpIHsKICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBhcmcgPSBhcmd1bWVudHMucG9zaXRpb25hbFswXS50eXBlOwogICAgICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRQcmltaXRpdmVWYWx1ZShhcmcpOwogICAgICAgICAgICBpZiAodmFsdWUgaXMgU3RyaW5nQ29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgICAgIFN0cmluZyBrZXkgPSB2YWx1ZS5zdHJpbmdWYWx1ZTsKICAgICAgICAgICAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0RpY3Rpb25hcnlLZXkodHlwZU1hc2ssIGtleSkpIHsKICAgICAgICAgICAgICAgIGlmIChkZWJ1Zy5WRVJCT1NFKSB7CiAgICAgICAgICAgICAgICAgIHByaW50KCJEaWN0aW9uYXJ5IGxvb2t1cCBmb3IgJGtleSB5aWVsZHMgIgogICAgICAgICAgICAgICAgICAgICAgIiR7YWJzdHJhY3RWYWx1ZURvbWFpbi5nZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXkodHlwZU1hc2ssIGtleSl9LiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0RGljdGlvbmFyeVZhbHVlRm9yS2V5KAogICAgICAgICAgICAgICAgICAgIHR5cGVNYXNrLCBrZXkpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgdHlwZU1hcCBpcyBwcmVjaXNlLCBzbyBpZiB3ZSBkbyBub3QgZmluZCB0aGUga2V5LCB0aGUKICAgICAgICAgICAgICAgIC8vIGxvb2t1cCB3aWxsIGJlIFtudWxsXSBhdCBydW50aW1lLgogICAgICAgICAgICAgICAgaWYgKGRlYnVnLlZFUkJPU0UpIHsKICAgICAgICAgICAgICAgICAgcHJpbnQoIkRpY3Rpb25hcnkgbG9va3VwIGZvciAka2V5IHlpZWxkcyBbbnVsbF0uIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMubnVsbFR5cGUudHlwZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGFzc2VydChhYnN0cmFjdFZhbHVlRG9tYWluLmlzTWFwKHR5cGVNYXNrKSk7CiAgICAgICAgICBpZiAoZGVidWcuVkVSQk9TRSkgewogICAgICAgICAgICBwcmludCgiTWFwIGxvb2t1cCBmb3IgJHNlbGVjdG9yIHlpZWxkcyAiCiAgICAgICAgICAgICAgICAiJHthYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcFZhbHVlVHlwZSh0eXBlTWFzayl9LiIpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0TWFwVmFsdWVUeXBlKHR5cGVNYXNrKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgVHlwZUluZm9ybWF0aW9uIGluZm8gPQogICAgICAgICAgICAgIGhhbmRsZUludHJpc2lmaWVkU2VsZWN0b3Ioc2VsZWN0b3IsIHR5cGVNYXNrLCBpbmZlcnJlcik7CiAgICAgICAgICBpZiAoaW5mbyAhPSBudWxsKSByZXR1cm4gaW5mby50eXBlOwogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVPZk1lbWJlcldpdGhTZWxlY3RvcihlbGVtZW50LCBzZWxlY3RvcikudHlwZTsKICAgICAgICB9CiAgICAgIH0pKTsKICAgIH0KICAgIGlmIChpc0NvbmRpdGlvbmFsICYmCiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwocmVjZWl2ZXIudHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgLy8gQ29uZGl0aW9uYWwgY2FsbCBzaXRlcyAoZS5nLiBgYT8uYmApIG1heSBiZSBudWxsIGlmIHRoZSByZWNlaXZlciBpcwogICAgICAvLyBudWxsLgogICAgICByZXN1bHQgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmluY2x1ZGVOdWxsKHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBnaXZlVXAoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIHtib29sIGNsZWFyQXNzaWdubWVudHM6IHRydWV9KSB7CiAgICBpZiAoIWFiYW5kb25JbmZlcmVuY2luZykgewogICAgICBpbmZlcnJlci51cGRhdGVTZWxlY3RvckluTWVtYmVyKGNhbGxlciwgX2NhbGxUeXBlLCBfY2FsbCwgc2VsZWN0b3IsIG1hc2spOwogICAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG9sZFRhcmdldHMgPSBfY29uY3JldGVUYXJnZXRzOwogICAgICBfaGFzQ2xvc3VyZUNhbGxUYXJnZXRzID0KICAgICAgICAgIGluZmVycmVyLmNsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIG1hc2spOwogICAgICBfY29uY3JldGVUYXJnZXRzID0gaW5mZXJyZXIuY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgbWFzayk7CiAgICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gX2NvbmNyZXRlVGFyZ2V0cykgewogICAgICAgIGlmICghb2xkVGFyZ2V0cy5jb250YWlucyhlbGVtZW50KSkgewogICAgICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNhbGxlZSA9CiAgICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgICAgICAgICBjYWxsZWUuYWRkQ2FsbChjYWxsZXIsIF9jYWxsKTsKICAgICAgICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgICAgICAgIHRoaXMsIGVsZW1lbnQsIGFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssCiAgICAgICAgICAgICAgcmVtb3ZlOiBmYWxzZSwgYWRkVG9RdWV1ZTogdHJ1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzdXBlci5naXZlVXAoaW5mZXJyZXIsIGNsZWFyQXNzaWdubWVudHM6IGNsZWFyQXNzaWdubWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBbmRDbGVhclJlZmVyZW5jZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gX2NvbmNyZXRlVGFyZ2V0cykgewogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY2FsbGVlID0KICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgICBjYWxsZWUucmVtb3ZlVXNlcih0aGlzKTsKICAgIH0KICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMuZm9yRWFjaCgoaW5mbykgPT4gaW5mby5yZW1vdmVVc2VyKHRoaXMpKTsKICAgIH0KICAgIHN1cGVyLnJlbW92ZUFuZENsZWFyUmVmZXJlbmNlcyhpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2FsbCBzaXRlICRkZWJ1Z05hbWUgb24gJHtyZWNlaXZlci50eXBlfSAkdHlwZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gcmVjZWl2ZXIuaXNTdGFibGUgJiYKICAgICAgICBfY29uY3JldGVUYXJnZXRzLmV2ZXJ5KChNZW1iZXJFbnRpdHkgZWxlbWVudCkgPT4KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCkuaXNTdGFibGUpICYmCiAgICAgICAgKGFyZ3VtZW50cyA9PSBudWxsIHx8IGFyZ3VtZW50cy5ldmVyeSgoaW5mbykgPT4gaW5mby5pc1N0YWJsZSkpICYmCiAgICAgICAgc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQp9CgpjbGFzcyBDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgVHlwZUluZm9ybWF0aW9uIGNsb3N1cmU7CgogIENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwKICAgICAgT2JqZWN0IGNhbGwsCiAgICAgIE1lbWJlckVudGl0eSBlbmNsb3NpbmcsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIHRoaXMuY2xvc3VyZSwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBib29sIGluTG9vcCkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBjYWxsLCBlbmNsb3NpbmcsIHNlbGVjdG9yLCBtYXNrLAogICAgICAgICAgICBhcmd1bWVudHMsIGluTG9vcCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkVG9HcmFwaChJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgYXJndW1lbnRzLmZvckVhY2goKGluZm8pID0+IGluZm8uYWRkVXNlcih0aGlzKSk7CiAgICBjbG9zdXJlLmFkZFVzZXIodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSA9PiBzYWZlVHlwZShpbmZlcnJlcik7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGNhbGxlZXMgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjb21wdXRlIGNhbGxlZXMgb2YgYSBjbG9zdXJlIGNhbGwuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2xvc3VyZSBjYWxsICRkZWJ1Z05hbWUgb24gJGNsb3N1cmUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlQW5kQ2xlYXJSZWZlcmVuY2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICAvLyBUaGlzIG1ldGhvZCBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgZm9sbG93aW5nIGNvbW1lbnQ6CiAgICAvLyBXZSBzaG91bGQgbWFpbnRhaW4gdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIGNsb3N1cmUgaXMgYSB1c2VyCiAgICAvLyBvZiBpdHMgYXJndW1lbnRzIGJlY2F1c2Ugd2UgZG8gbm90IGNoZWNrIHRoYXQgdGhlIGFyZ3VtZW50cwogICAgLy8gaGF2ZSBhIHN0YWJsZSB0eXBlIGZvciBhIGNsb3N1cmUgY2FsbCB0byBiZSBzdGFibGU7IG91ciB0cmFjaW5nCiAgICAvLyBhbmFseXNpcyB3YW50IHRvIGtub3cgd2hldGhlciBhbiAobm9uLXN0YWJsZSkgYXJndW1lbnQgaXMKICAgIC8vIHBhc3NlZCB0byBhIGNsb3N1cmUuCiAgICByZXR1cm4gc3VwZXIucmVtb3ZlQW5kQ2xlYXJSZWZlcmVuY2VzKGluZmVycmVyKTsKICB9Cn0KCi8vLyBBIFtDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbl0gcmVwcmVzZW50cyBhIHR5cGUgdGhhdCBuZWVkZWQKLy8vIHRvIGJlIG1hdGVyaWFsaXplZCBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRoZSBncmFwaC4gRm9yIGV4YW1wbGUsCi8vLyBsaXRlcmFscywgWzp0aGlzOl0gb3IgWzpzdXBlcjpdIG5lZWQgYSBbQ29uY3JldGVUeXBlSW5mb3JtYXRpb25dLgovLy8KLy8vIFtDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbl0gbm9kZXMgaGF2ZSBubyBhc3NpZ25tZW50LiBBbHNvLCB0byBzYXZlCi8vLyBvbiBtZW1vcnksIHdlIGRvIG5vdCBhZGQgdXNlcnMgdG8gW0NvbmNyZXRlVHlwZUluZm9ybWF0aW9uXSBub2RlcywKLy8vIGJlY2F1c2Ugd2Uga25vdyBzdWNoIG5vZGUgd2lsbCBuZXZlciBiZSByZWZpbmVkIHRvIGEgZGlmZmVyZW50Ci8vLyB0eXBlLgpjbGFzcyBDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZSB0eXBlKSA6IHN1cGVyLnVudHJhY2tlZCh0eXBlKSB7CiAgICB0aGlzLmlzU3RhYmxlID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29uY3JldGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRVc2VyKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7CiAgICAvLyBOb3RoaW5nIHRvIGRvLCBhIGNvbmNyZXRlIHR5cGUgZG9lcyBub3QgZ2V0IHVwZGF0ZWQgc28gbmV2ZXIKICAgIC8vIG5lZWRzIHRvIG5vdGlmeSBpdHMgdXNlcnMuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFVzZXJzT2YoVHlwZUluZm9ybWF0aW9uIG90aGVyKSB7CiAgICAvLyBOb3RoaW5nIHRvIGRvLCBhIGNvbmNyZXRlIHR5cGUgZG9lcyBub3QgZ2V0IHVwZGF0ZWQgc28gbmV2ZXIKICAgIC8vIG5lZWRzIHRvIG5vdGlmeSBpdHMgdXNlcnMuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZVVzZXIoVHlwZUluZm9ybWF0aW9uIHVzZXIpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQXNzaWdubWVudChUeXBlSW5mb3JtYXRpb24gYXNzaWdubWVudCkgewogICAgdGhyb3cgIk5vdCBzdXBwb3J0ZWQiOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBc3NpZ25tZW50KFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50KSB7CiAgICB0aHJvdyAiTm90IHN1cHBvcnRlZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSA9PiB0eXBlOwoKICBAb3ZlcnJpZGUKICBib29sIHJlc2V0KEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICB0aHJvdyAiTm90IHN1cHBvcnRlZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVHlwZSAkdHlwZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29uY3JldGVUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IHRydWU7Cn0KCmNsYXNzIFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgU3RyaW5nIHZhbHVlOwoKICBTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIHRoaXMudmFsdWUsIEFic3RyYWN0VmFsdWUgbWFzaykKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZVByaW1pdGl2ZVZhbHVlKAogICAgICAgICAgICBtYXNrLCBuZXcgU3RyaW5nQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpKTsKCiAgU3RyaW5nIGFzU3RyaW5nKCkgPT4gdmFsdWU7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1R5cGUgJHR5cGUgdmFsdWUgJHt2YWx1ZX0nOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgpjbGFzcyBCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIENvbmNyZXRlVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBib29sIHZhbHVlOwoKICBCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCB0aGlzLnZhbHVlLCBBYnN0cmFjdFZhbHVlIG1hc2spCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVQcmltaXRpdmVWYWx1ZSgKICAgICAgICAgICAgbWFzaywgdmFsdWUgPyBuZXcgVHJ1ZUNvbnN0YW50VmFsdWUoKSA6IG5ldyBGYWxzZUNvbnN0YW50VmFsdWUoKSkpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVHlwZSAkdHlwZSB2YWx1ZSAke3ZhbHVlfSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Qm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgovLy8gQSBbTmFycm93VHlwZUluZm9ybWF0aW9uXSBuYXJyb3dzIGEgW1R5cGVJbmZvcm1hdGlvbl0gdG8gYSB0eXBlLAovLy8gcmVwcmVzZW50ZWQgaW4gW3R5cGVBbm5vdGF0aW9uXS4KLy8vCi8vLyBBIFtOYXJyb3dUeXBlSW5mb3JtYXRpb25dIG5vZGUgaGFzIG9ubHkgb25lIGFzc2lnbm1lbnQ6IHRoZQovLy8gW1R5cGVJbmZvcm1hdGlvbl0gaXQgbmFycm93cy4KLy8vCi8vLyBbTmFycm93VHlwZUluZm9ybWF0aW9uXSBub2RlcyBhcmUgY3JlYXRlZCBmb3I6Ci8vLwovLy8gLSBDb2RlIGFmdGVyIGBpc2AgYW5kIGBhc2AgY2hlY2tzLCB3aGVyZSB3ZSBoYXZlIG1vcmUgaW5mb3JtYXRpb24KLy8vICAgb24gdGhlIHR5cGUgb2YgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgZXhwcmVzc2lvbi4KLy8vCi8vLyAtIENvZGUgYWZ0ZXIgYSBkeW5hbWljIGNhbGwsIHdoZXJlIHdlIGhhdmUgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKLy8vICAgdHlwZSBvZiB0aGUgcmVjZWl2ZXI6IGl0IGNhbiBvbmx5IGJlIG9mIGEgY2xhc3MgdGhhdCBob2xkcyBhCi8vLyAgIHBvdGVudGlhbCB0YXJnZXQgb2YgdGhpcyBkeW5hbWljIGNhbGwuCi8vLwovLy8gLSBJbiBjaGVja2VkIG1vZGUsIGFmdGVyIGEgdHlwZSBhbm5vdGF0aW9uLCB3ZSBoYXZlIG1vcmUKLy8vICAgaW5mb3JtYXRpb24gb24gdGhlIHR5cGUgb2YgYSBsb2NhbC4KY2xhc3MgTmFycm93VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIHR5cGVBbm5vdGF0aW9uOwoKICBOYXJyb3dUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBUeXBlSW5mb3JtYXRpb24gbmFycm93ZWRUeXBlLCB0aGlzLnR5cGVBbm5vdGF0aW9uKQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBuYXJyb3dlZFR5cGUuY29udGV4dCkgewogICAgYWRkQXNzaWdubWVudChuYXJyb3dlZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWRkQXNzaWdubWVudChUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIuYWRkQXNzaWdubWVudChpbmZvKTsKICAgIGFzc2VydChhc3NpZ25tZW50cy5sZW5ndGggPT0gMSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dCA9IGFzc2lnbm1lbnRzLmZpcnN0LnR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIGludGVyc2VjdGlvbiA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oaW5wdXQsIHR5cGVBbm5vdGF0aW9uKTsKICAgIGlmIChkZWJ1Zy5BTk9NQUxZX1dBUk4pIHsKICAgICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnMoaW5wdXQsIGludGVyc2VjdGlvbikuaXNEZWZpbml0ZWx5RmFsc2UgfHwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgICAuY29udGFpbnModHlwZUFubm90YXRpb24sIGludGVyc2VjdGlvbikKICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICBwcmludCgiQU5PTUFMWSBXQVJOSU5HOiBuYXJyb3dlZCAkaW5wdXQgdG8gJGludGVyc2VjdGlvbiB2aWEgIgogICAgICAgICAgICAiJHR5cGVBbm5vdGF0aW9uIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbnRlcnNlY3Rpb247CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ05hcnJvdyB0byAkdHlwZUFubm90YXRpb24gJHR5cGUnOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXROYXJyb3dUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgovLy8gQW4gW0luZmVycmVkVHlwZUluZm9ybWF0aW9uXSBpcyBhIFtUeXBlSW5mb3JtYXRpb25dIHRoYXQKLy8vIGRlZmF1bHRzIHRvIHRoZSBkeW5hbWljIHR5cGUgdW50aWwgaXQgaXMgbWFya2VkIGFzIGJlaW5nCi8vLyBpbmZlcnJlZCwgYXQgd2hpY2ggcG9pbnQgaXQgY29tcHV0ZXMgaXRzIHR5cGUgYmFzZWQgb24KLy8vIGl0cyBhc3NpZ25tZW50cy4KYWJzdHJhY3QgY2xhc3MgSW5mZXJyZWRUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gewogIC8vLyBXaGV0aGVyIHRoZSBlbGVtZW50IHR5cGUgaW4gdGhhdCBjb250YWluZXIgaGFzIGJlZW4gaW5mZXJyZWQuCiAgYm9vbCBpbmZlcnJlZCA9IGZhbHNlOwoKICBJbmZlcnJlZFR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCBUeXBlSW5mb3JtYXRpb24gcGFyZW50VHlwZSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSwgY29udGV4dCkgewogICAgaWYgKHBhcmVudFR5cGUgIT0gbnVsbCkgYWRkQXNzaWdubWVudChwYXJlbnRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGlmICghaW5mZXJyZWQpIHJldHVybiBzYWZlVHlwZShpbmZlcnJlcik7CiAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuY29tcHV0ZVR5cGVNYXNrKGFzc2lnbm1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVkICYmIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KfQoKLy8vIEEgW0xpc3RUeXBlSW5mb3JtYXRpb25dIGlzIGEgW1R5cGVJbmZvcm1hdGlvbl0gY3JlYXRlZAovLy8gZm9yIGVhY2ggYExpc3RgIGluc3RhbnRpYXRpb25zLgpjbGFzcyBMaXN0VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHdpdGggVHJhY2VkVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGU7CgogIC8vLyBUaGUgY29udGFpbmVyIHR5cGUgYmVmb3JlIGl0IGlzIGluZmVycmVkLgogIGZpbmFsIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxUeXBlOwoKICAvLy8gVGhlIGxlbmd0aCBhdCB0aGUgYWxsb2NhdGlvbiBzaXRlLgogIGZpbmFsIGludCBvcmlnaW5hbExlbmd0aDsKCiAgLy8vIFRoZSBsZW5ndGggYWZ0ZXIgdGhlIGNvbnRhaW5lciBoYXMgYmVlbiB0cmFjZWQuCiAgaW50IGluZmVycmVkTGVuZ3RoOwoKICAvLy8gV2hldGhlciB0aGlzIGxpc3QgZ29lcyB0aHJvdWdoIGEgZ3Jvd2FibGUgY2hlY2suCiAgLy8vIFdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBpdCBkb2VzLgogIGJvb2wgY2hlY2tzR3Jvd2FibGUgPSB0cnVlOwoKICBMaXN0VHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LAogICAgICB0aGlzLm9yaWdpbmFsVHlwZSwKICAgICAgdGhpcy5lbGVtZW50VHlwZSwKICAgICAgdGhpcy5vcmlnaW5hbExlbmd0aCkKICAgICAgOiBzdXBlcihvcmlnaW5hbFR5cGUsIGNvbnRleHQpIHsKICAgIGluZmVycmVkTGVuZ3RoID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRDb250YWluZXJMZW5ndGgob3JpZ2luYWxUeXBlKTsKICAgIGVsZW1lbnRUeXBlLmFkZFVzZXIodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnTGlzdCB0eXBlICR0eXBlJzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMaXN0VHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gZWxlbWVudFR5cGUuaXNTdGFibGUgJiYgc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gdHlwZTsKICAgIGlmICghYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcih0eXBlKSB8fAogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyRWxlbWVudFR5cGUodHlwZSkgIT0gZWxlbWVudFR5cGUudHlwZSB8fAogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyTGVuZ3RoKHR5cGUpICE9IGluZmVycmVkTGVuZ3RoKSB7CiAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZUNvbnRhaW5lclZhbHVlKAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRHZW5lcmFsaXphdGlvbihvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uTm9kZShvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uRWxlbWVudChvcmlnaW5hbFR5cGUpLAogICAgICAgICAgZWxlbWVudFR5cGUudHlwZSwKICAgICAgICAgIGluZmVycmVkTGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBtYXNrOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gb3JpZ2luYWxUeXBlOwoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFudXAoKSB7CiAgICBzdXBlci5jbGVhbnVwKCk7CiAgICBlbGVtZW50VHlwZS5jbGVhbnVwKCk7CiAgICBfZmxvd3NJbnRvID0gbnVsbDsKICB9Cn0KCi8vLyBBbiBbRWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uXSBob2xkcyB0aGUgY29tbW9uIHR5cGUgb2YgdGhlCi8vLyBlbGVtZW50cyBpbiBhIFtMaXN0VHlwZUluZm9ybWF0aW9uXS4KY2xhc3MgRWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgSW5mZXJyZWRUeXBlSW5mb3JtYXRpb24gewogIEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCBlbGVtZW50VHlwZSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBlbGVtZW50VHlwZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdFbGVtZW50IGluIGNvbnRhaW5lciAkdHlwZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KfQoKLy8vIEEgW1NldFR5cGVJbmZvcm1hdGlvbl0gaXMgYSBbVHlwZUluZm9ybWF0aW9uXSBjcmVhdGVkIGZvciBzZXRzLgpjbGFzcyBTZXRUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gd2l0aCBUcmFjZWRUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBlbGVtZW50VHlwZTsKCiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFR5cGU7CgogIFNldFR5cGVJbmZvcm1hdGlvbigKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMub3JpZ2luYWxUeXBlLCB0aGlzLmVsZW1lbnRUeXBlKQogICAgICA6IHN1cGVyKG9yaWdpbmFsVHlwZSwgY29udGV4dCkgewogICAgZWxlbWVudFR5cGUuYWRkVXNlcih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTZXQgdHlwZSAkdHlwZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2V0VHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IHR5cGU7CiAgICBpZiAoIWFic3RyYWN0VmFsdWVEb21haW4uaXNTZXQodHlwZSkgfHwKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldFNldEVsZW1lbnRUeXBlKHR5cGUpICE9IGVsZW1lbnRUeXBlLnR5cGUpIHsKICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlU2V0VmFsdWUoCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldEdlbmVyYWxpemF0aW9uKG9yaWdpbmFsVHlwZSksCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25Ob2RlKG9yaWdpbmFsVHlwZSksCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25FbGVtZW50KG9yaWdpbmFsVHlwZSksCiAgICAgICAgICBlbGVtZW50VHlwZS50eXBlKTsKICAgIH0KICAgIHJldHVybiBtYXNrOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gb3JpZ2luYWxUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBlbGVtZW50VHlwZS5pc1N0YWJsZSAmJiBzdXBlci5oYXNTdGFibGVUeXBlKGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYW51cCgpIHsKICAgIHN1cGVyLmNsZWFudXAoKTsKICAgIGVsZW1lbnRUeXBlLmNsZWFudXAoKTsKICAgIF9mbG93c0ludG8gPSBudWxsOwogIH0KfQoKLy8vIEFuIFtFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb25dIGhvbGRzIHRoZSBjb21tb24gdHlwZSBvZiB0aGUgZWxlbWVudHMgaW4gYQovLy8gW1NldFR5cGVJbmZvcm1hdGlvbl0uCmNsYXNzIEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIEluZmVycmVkVHlwZUluZm9ybWF0aW9uIHsKICBFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgZWxlbWVudFR5cGUpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwgZWxlbWVudFR5cGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRWxlbWVudCBpbiBzZXQgJHR5cGUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9Cn0KCi8vLyBBIFtNYXBUeXBlSW5mb3JtYXRpb25dIGlzIGEgW1R5cGVJbmZvcm1hdGlvbl0gY3JlYXRlZAovLy8gZm9yIG1hcHMuCmNsYXNzIE1hcFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB3aXRoIFRyYWNlZFR5cGVJbmZvcm1hdGlvbiB7CiAgLy8gV2hlbiBpbiBEaWN0aW9uYXJ5IG1vZGUsIHRoaXMgbWFwIHRyYWNrcyB0aGUgdHlwZSBvZiB0aGUgdmFsdWVzIHRoYXQKICAvLyBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYSBzcGVjaWZpYyBbU3RyaW5nXSBrZXkuCiAgZmluYWwgTWFwPFN0cmluZywgVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbj4gdHlwZUluZm9NYXAgPSB7fTsKICAvLyBUaGVzZSBmaWVsZHMgdHJhY2sgdGhlIG92ZXJhbGwgdHlwZSBvZiB0aGUga2V5cy92YWx1ZXMgaW4gdGhlIG1hcC4KICBmaW5hbCBLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbiBrZXlUeXBlOwogIGZpbmFsIFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24gdmFsdWVUeXBlOwogIGZpbmFsIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxUeXBlOwoKICAvLyBTZXQgdG8gZmFsc2UgaWYgYSBzdGF0aWNhbGx5IHVua25vd24ga2V5IGZsb3dzIGludG8gdGhpcyBtYXAuCiAgYm9vbCBfYWxsS2V5c0FyZVN0cmluZ3MgPSB0cnVlOwoKICBib29sIGdldCBpbkRpY3Rpb25hcnlNb2RlID0+ICFiYWlsZWRPdXQgJiYgX2FsbEtleXNBcmVTdHJpbmdzOwoKICBNYXBUeXBlSW5mb3JtYXRpb24oTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMub3JpZ2luYWxUeXBlLAogICAgICB0aGlzLmtleVR5cGUsIHRoaXMudmFsdWVUeXBlKQogICAgICA6IHN1cGVyKG9yaWdpbmFsVHlwZSwgY29udGV4dCkgewogICAga2V5VHlwZS5hZGRVc2VyKHRoaXMpOwogICAgdmFsdWVUeXBlLmFkZFVzZXIodGhpcyk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYWRkRW50cnlBc3NpZ25tZW50KEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgVHlwZUluZm9ybWF0aW9uIGtleSwgVHlwZUluZm9ybWF0aW9uIHZhbHVlLAogICAgICBbYm9vbCBub25OdWxsID0gZmFsc2VdKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gbmV3SW5mbyA9IG51bGw7CiAgICBpZiAoX2FsbEtleXNBcmVTdHJpbmdzICYmIGtleSBpcyBTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgIFN0cmluZyBrZXlTdHJpbmcgPSBrZXkuYXNTdHJpbmcoKTsKICAgICAgdHlwZUluZm9NYXAucHV0SWZBYnNlbnQoa2V5U3RyaW5nLCAoKSB7CiAgICAgICAgbmV3SW5mbyA9IG5ldyBWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uKAogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBudWxsLCBub25OdWxsKTsKICAgICAgICByZXR1cm4gbmV3SW5mbzsKICAgICAgfSk7CiAgICAgIHR5cGVJbmZvTWFwW2tleVN0cmluZ10uYWRkQXNzaWdubWVudCh2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBfYWxsS2V5c0FyZVN0cmluZ3MgPSBmYWxzZTsKICAgICAgdHlwZUluZm9NYXAuY2xlYXIoKTsKICAgIH0KICAgIGtleVR5cGUuYWRkQXNzaWdubWVudChrZXkpOwogICAgdmFsdWVUeXBlLmFkZEFzc2lnbm1lbnQodmFsdWUpOwogICAgaWYgKG5ld0luZm8gIT0gbnVsbCkgbmV3SW5mby5hZGRVc2VyKHRoaXMpOwoKICAgIHJldHVybiBuZXdJbmZvOwogIH0KCiAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IGFkZE1hcEFzc2lnbm1lbnQoCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgTWFwVHlwZUluZm9ybWF0aW9uIG90aGVyKSB7CiAgICBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gbmV3SW5mb3MgPSA8VHlwZUluZm9ybWF0aW9uPltdOwogICAgaWYgKF9hbGxLZXlzQXJlU3RyaW5ncyAmJiBvdGhlci5pbkRpY3Rpb25hcnlNb2RlKSB7CiAgICAgIG90aGVyLnR5cGVJbmZvTWFwLmZvckVhY2goKGtleVN0cmluZywgdmFsdWUpIHsKICAgICAgICB0eXBlSW5mb01hcC5wdXRJZkFic2VudChrZXlTdHJpbmcsICgpIHsKICAgICAgICAgIFR5cGVJbmZvcm1hdGlvbiBuZXdJbmZvID0gbmV3IFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwgbnVsbCwgZmFsc2UpOwogICAgICAgICAgbmV3SW5mb3MuYWRkKG5ld0luZm8pOwogICAgICAgICAgcmV0dXJuIG5ld0luZm87CiAgICAgICAgfSk7CiAgICAgICAgdHlwZUluZm9NYXBba2V5U3RyaW5nXS5hZGRBc3NpZ25tZW50KHZhbHVlKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBfYWxsS2V5c0FyZVN0cmluZ3MgPSBmYWxzZTsKICAgICAgdHlwZUluZm9NYXAuY2xlYXIoKTsKICAgIH0KICAgIGtleVR5cGUuYWRkQXNzaWdubWVudChvdGhlci5rZXlUeXBlKTsKICAgIHZhbHVlVHlwZS5hZGRBc3NpZ25tZW50KG90aGVyLnZhbHVlVHlwZSk7CgogICAgcmV0dXJuIG5ld0luZm9zOwogIH0KCiAgbWFya0FzSW5mZXJyZWQoKSB7CiAgICBrZXlUeXBlLmluZmVycmVkID0gdmFsdWVUeXBlLmluZmVycmVkID0gdHJ1ZTsKICAgIHR5cGVJbmZvTWFwLnZhbHVlcy5mb3JFYWNoKCh2KSA9PiB2LmluZmVycmVkID0gdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBhZGRBc3NpZ25tZW50KFR5cGVJbmZvcm1hdGlvbiBvdGhlcikgewogICAgdGhyb3cgIm5vdCBzdXBwb3J0ZWQiOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRNYXBUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBBYnN0cmFjdFZhbHVlIHRvVHlwZU1hc2soSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBpZiAoaW5EaWN0aW9uYXJ5TW9kZSkgewogICAgICBNYXA8U3RyaW5nLCBBYnN0cmFjdFZhbHVlPiBtYXBwaW5ncyA9IG5ldyBNYXA8U3RyaW5nLCBBYnN0cmFjdFZhbHVlPigpOwogICAgICBmb3IgKHZhciBrZXkgaW4gdHlwZUluZm9NYXAua2V5cykgewogICAgICAgIG1hcHBpbmdzW2tleV0gPSB0eXBlSW5mb01hcFtrZXldLnR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlRGljdGlvbmFyeVZhbHVlKAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRHZW5lcmFsaXphdGlvbihvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uTm9kZShvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uRWxlbWVudChvcmlnaW5hbFR5cGUpLAogICAgICAgICAga2V5VHlwZS50eXBlLAogICAgICAgICAgdmFsdWVUeXBlLnR5cGUsCiAgICAgICAgICBtYXBwaW5ncyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVNYXBWYWx1ZSgKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0R2VuZXJhbGl6YXRpb24ob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbk5vZGUob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbkVsZW1lbnQob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGtleVR5cGUudHlwZSwKICAgICAgICAgIHZhbHVlVHlwZS50eXBlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0RpY3Rpb25hcnkodHlwZSkgIT0gaW5EaWN0aW9uYXJ5TW9kZSkgewogICAgICByZXR1cm4gdG9UeXBlTWFzayhpbmZlcnJlcik7CiAgICB9IGVsc2UgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNEaWN0aW9uYXJ5KHR5cGUpKSB7CiAgICAgIGFzc2VydChpbkRpY3Rpb25hcnlNb2RlKTsKICAgICAgZm9yIChTdHJpbmcga2V5IGluIHR5cGVJbmZvTWFwLmtleXMpIHsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gdmFsdWUgPSB0eXBlSW5mb01hcFtrZXldOwogICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0RpY3Rpb25hcnlLZXkodHlwZSwga2V5KSAmJgogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKHZhbHVlLnR5cGUpLmlzRGVmaW5pdGVseUZhbHNlICYmCiAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHZhbHVlLnR5cGUpLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgICByZXR1cm4gdG9UeXBlTWFzayhpbmZlcnJlcik7CiAgICAgICAgfQogICAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmdldERpY3Rpb25hcnlWYWx1ZUZvcktleSh0eXBlLCBrZXkpICE9CiAgICAgICAgICAgIHR5cGVJbmZvTWFwW2tleV0udHlwZSkgewogICAgICAgICAgcmV0dXJuIHRvVHlwZU1hc2soaW5mZXJyZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzTWFwKHR5cGUpKSB7CiAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcEtleVR5cGUodHlwZSkgIT0ga2V5VHlwZS50eXBlIHx8CiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcFZhbHVlVHlwZSh0eXBlKSAhPSB2YWx1ZVR5cGUudHlwZSkgewogICAgICAgIHJldHVybiB0b1R5cGVNYXNrKGluZmVycmVyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHRvVHlwZU1hc2soaW5mZXJyZXIpOwogICAgfQoKICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gb3JpZ2luYWxUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBrZXlUeXBlLmlzU3RhYmxlICYmCiAgICAgICAgdmFsdWVUeXBlLmlzU3RhYmxlICYmCiAgICAgICAgc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFudXAoKSB7CiAgICBzdXBlci5jbGVhbnVwKCk7CiAgICBrZXlUeXBlLmNsZWFudXAoKTsKICAgIHZhbHVlVHlwZS5jbGVhbnVwKCk7CiAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBpbmZvIGluIHR5cGVJbmZvTWFwLnZhbHVlcykgewogICAgICBpbmZvLmNsZWFudXAoKTsKICAgIH0KICAgIF9mbG93c0ludG8gPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdNYXAgJHR5cGUgKEs6JGtleVR5cGUsIFY6JHZhbHVlVHlwZSkgY29udGVudHMgJHR5cGVJbmZvTWFwJzsKICB9Cn0KCi8vLyBBIFtLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbl0gaG9sZHMgdGhlIGNvbW1vbiB0eXBlCi8vLyBmb3IgdGhlIGtleXMgaW4gYSBbTWFwVHlwZUluZm9ybWF0aW9uXQpjbGFzcyBLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIEluZmVycmVkVHlwZUluZm9ybWF0aW9uIHsKICBLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCBUeXBlSW5mb3JtYXRpb24ga2V5VHlwZSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBrZXlUeXBlKTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdLZXkgaW4gTWFwICR0eXBlJzsKfQoKLy8vIEEgW1ZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb25dIGhvbGRzIHRoZSBjb21tb24gdHlwZQovLy8gZm9yIHRoZSB2YWx1ZXMgaW4gYSBbTWFwVHlwZUluZm9ybWF0aW9uXQpjbGFzcyBWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgSW5mZXJyZWRUeXBlSW5mb3JtYXRpb24gewogIC8vIFtub25OdWxsXSBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGlzIHZhbHVlIGlzIGtub3duIHRvIGJlIHBhcnQgb2YgdGhlIG1hcC4KICAvLyBOb3RlIHRoYXQgb25seSB2YWx1ZXMgYXNzaWduZWQgdG8gYSBzcGVjaWZpYyBrZXkgdmFsdWUgaW4gZGljdGlvbmFyeQogIC8vIG1vZGUgY2FuIGV2ZXIgYmUgbWFya2VkIGFzIFtub25OdWxsXS4KICBmaW5hbCBib29sIG5vbk51bGw7CgogIFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgVHlwZUluZm9ybWF0aW9uIHZhbHVlVHlwZSwKICAgICAgW3RoaXMubm9uTnVsbCA9IGZhbHNlXSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCB2YWx1ZVR5cGUpOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gbm9uTnVsbAogICAgICAgID8gc3VwZXIuY29tcHV0ZVR5cGUoaW5mZXJyZXIpCiAgICAgICAgOiBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmluY2x1ZGVOdWxsKHN1cGVyLmNvbXB1dGVUeXBlKGluZmVycmVyKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVmFsdWUgaW4gTWFwICR0eXBlJzsKfQoKLy8vIEEgW1BoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb25dIGlzIGFuIHVuaW9uIG9mCi8vLyBbRWxlbWVudFR5cGVJbmZvcm1hdGlvbl0sIHRoYXQgaXMgbG9jYWwgdG8gYSBtZXRob2QuCmNsYXNzIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIGlyLk5vZGUgYnJhbmNoTm9kZTsKICBmaW5hbCBMb2NhbCB2YXJpYWJsZTsKICBmaW5hbCBib29sIGlzVHJ5OwoKICBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMuYnJhbmNoTm9kZSwgdGhpcy52YXJpYWJsZSwKICAgICAge3RoaXMuaXNUcnl9KQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmNvbXB1dGVUeXBlTWFzayhhc3NpZ25tZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnUGhpKCRoYXNoQ29kZSkgJHZhcmlhYmxlICR0eXBlJzsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfdG9TdHJ1Y3R1cmVkVGV4dCgKICAgICAgU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmcgaW5kZW50LCBTZXQ8VHlwZUluZm9ybWF0aW9uPiBzZWVuKSB7CiAgICBpZiAoc2Vlbi5hZGQodGhpcykpIHsKICAgICAgc2Iud3JpdGUoJyR7dG9TdHJpbmcoKX0gWycpOwogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50IGluIGFzc2lnbm1lbnRzKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuJGluZGVudCAgJyk7CiAgICAgICAgYXNzaWdubWVudC5fdG9TdHJ1Y3R1cmVkVGV4dChzYiwgJyRpbmRlbnQgICcsIHNlZW4pOwogICAgICB9CiAgICAgIHNiLndyaXRlKCcgXScpOwogICAgfSBlbHNlIHsKICAgICAgc2Iud3JpdGUoJyR7dG9TdHJpbmcoKX0gWyAuLi4gXScpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KfQoKY2xhc3MgQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbgogICAgd2l0aCBBcHBseWFibGVUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IF9lbGVtZW50OwoKICBDbG9zdXJlVHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMuX2VsZW1lbnQpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGUsIGNvbnRleHQpOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY2xvc3VyZSA9PiBfZWxlbWVudDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gc2FmZVR5cGUoaW5mZXJyZXIpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHNhZmVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuZnVuY3Rpb25UeXBlLnR5cGU7CiAgfQoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAnJGNsb3N1cmUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2xvc3VyZSAkX2VsZW1lbnQnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENsb3N1cmVUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIFN0cmluZyBnZXRJbmZlcnJlZFNpZ25hdHVyZShUeXBlU3lzdGVtIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuZ2V0SW5mZXJyZWRTaWduYXR1cmVPZk1ldGhvZChfZWxlbWVudCk7CiAgfQp9CgovLy8gTWl4aW4gZm9yIFtUeXBlSW5mb3JtYXRpb25dIG5vZGVzIHRoYXQgY2FuIGJhaWwgb3V0IGR1cmluZyB0cmFjaW5nLgphYnN0cmFjdCBjbGFzcyBUcmFjZWRUeXBlSW5mb3JtYXRpb24gaW1wbGVtZW50cyBUeXBlSW5mb3JtYXRpb24gewogIC8vLyBTZXQgdG8gZmFsc2Ugb25jZSBhbmFseXNpcyBoYXMgc3VjY2VlZGVkLgogIGJvb2wgYmFpbGVkT3V0ID0gdHJ1ZTsKCiAgLy8vIFNldCB0byB0cnVlIG9uY2UgYW5hbHlzaXMgaXMgY29tcGxldGVkLgogIGJvb2wgYW5hbHl6ZWQgPSBmYWxzZTsKCiAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gX2Zsb3dzSW50bzsKCiAgLy8vIFRoZSBzZXQgb2YgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZXMgd2hlcmUgdmFsdWVzIGZyb20gdGhlIHRyYWNlZCBub2RlIGNvdWxkCiAgLy8vIGZsb3cgaW4uCiAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGZsb3dzSW50byB7CiAgICByZXR1cm4gKF9mbG93c0ludG8gPT0gbnVsbCkKICAgICAgICA/IGNvbnN0IEltbXV0YWJsZUVtcHR5U2V0PFR5cGVJbmZvcm1hdGlvbj4oKQogICAgICAgIDogX2Zsb3dzSW50bzsKICB9CgogIC8vLyBBZGRzIFtub2Rlc10gdG8gdGhlIHNldHMgb2YgdmFsdWVzIHRoaXMgW1RyYWNlZFR5cGVJbmZvcm1hdGlvbl0gZmxvd3MKICAvLy8gaW50by4KICB2b2lkIGFkZEZsb3dzSW50b1RhcmdldHMoSXRlcmFibGU8VHlwZUluZm9ybWF0aW9uPiBub2RlcykgewogICAgaWYgKF9mbG93c0ludG8gPT0gbnVsbCkgewogICAgICBfZmxvd3NJbnRvID0gbm9kZXMudG9TZXQoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9mbG93c0ludG8uYWRkQWxsKG5vZGVzKTsKICAgIH0KICB9Cn0KCmNsYXNzIEF3YWl0VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBpci5Ob2RlIF9ub2RlOwoKICBBd2FpdFR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCB0aGlzLl9ub2RlKQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KTsKCiAgLy8gVE9ETygyMjg5NCk6IENvbXB1dGUgYSBiZXR0ZXIgdHlwZSBoZXJlLgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IHNhZmVUeXBlKGluZmVycmVyKTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gJyRfbm9kZSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdBd2FpdCc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QXdhaXRUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgpjbGFzcyBZaWVsZFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgaXIuTm9kZSBfbm9kZTsKCiAgWWllbGRUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgdGhpcy5fbm9kZSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSwgY29udGV4dCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IHNhZmVUeXBlKGluZmVycmVyKTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gJyRfbm9kZSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdZaWVsZCc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0WWllbGRUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBUeXBlSW5mb3JtYXRpb25WaXNpdG9yPFQ+IHsKICBUIHZpc2l0TmFycm93VHlwZUluZm9ybWF0aW9uKE5hcnJvd1R5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0UGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbihQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0RWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uKEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0S2V5SW5NYXBUeXBlSW5mb3JtYXRpb24oS2V5SW5NYXBUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24oVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0TGlzdFR5cGVJbmZvcm1hdGlvbihMaXN0VHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRTZXRUeXBlSW5mb3JtYXRpb24oU2V0VHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRNYXBUeXBlSW5mb3JtYXRpb24oTWFwVHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbihDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0U3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbihTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbihCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdE1lbWJlclR5cGVJbmZvcm1hdGlvbihNZW1iZXJUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbihQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdENsb3N1cmVUeXBlSW5mb3JtYXRpb24oQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0QXdhaXRUeXBlSW5mb3JtYXRpb24oQXdhaXRUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdFlpZWxkVHlwZUluZm9ybWF0aW9uKFlpZWxkVHlwZUluZm9ybWF0aW9uIGluZm8pOwp9CgpBYnN0cmFjdFZhbHVlIF9uYXJyb3dUeXBlKAogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBBYnN0cmFjdFZhbHVlIHR5cGUsIERhcnRUeXBlIGFubm90YXRpb24sCiAgICB7Ym9vbCBpc051bGxhYmxlOiB0cnVlfSkgewogIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgQWJzdHJhY3RWYWx1ZSBvdGhlclR5cGU7CiAgaWYgKGFubm90YXRpb24udHJlYXRBc0R5bmFtaWMpIHsKICAgIHJldHVybiB0eXBlOwogIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5pc0ludGVyZmFjZVR5cGUpIHsKICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IGFubm90YXRpb247CiAgICBpZiAoaW50ZXJmYWNlVHlwZS5lbGVtZW50ID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQogICAgb3RoZXJUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShpbnRlcmZhY2VUeXBlLmVsZW1lbnQpOwogIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5pc1ZvaWQpIHsKICAgIHJldHVybiB0eXBlOwogIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5pc1R5cGVkZWYgfHwgYW5ub3RhdGlvbi5pc0Z1bmN0aW9uVHlwZSkgewogICAgb3RoZXJUeXBlID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5mdW5jdGlvblR5cGU7CiAgfSBlbHNlIGlmIChhbm5vdGF0aW9uLmlzRnV0dXJlT3IpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE5hcnJvdyBGdXR1cmVPciB0eXBlcy4KICAgIHJldHVybiB0eXBlOwogIH0gZWxzZSB7CiAgICBhc3NlcnQoYW5ub3RhdGlvbi5pc1R5cGVWYXJpYWJsZSB8fCBhbm5vdGF0aW9uLmlzRnVuY3Rpb25UeXBlVmFyaWFibGUpOwogICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBOYXJyb3cgdG8gYm91bmQuCiAgICByZXR1cm4gdHlwZTsKICB9CiAgaWYgKGlzTnVsbGFibGUpIHsKICAgIG90aGVyVHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uaW5jbHVkZU51bGwob3RoZXJUeXBlKTsKICB9CiAgaWYgKHR5cGUgPT0gbnVsbCkgewogICAgcmV0dXJuIG90aGVyVHlwZTsKICB9CiAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9u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cnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgovLy8gSW50ZXJmYWNlIGZvciBhY2Nlc3Npbmcgc3RhdGljIHR5cGVzIG9uIGV4cHJlc3Npb25zLgphYnN0cmFjdCBjbGFzcyBTdGF0aWNUeXBlUHJvdmlkZXIgewogIGlyLkRhcnRUeXBlIGdldFN0YXRpY1R5cGUoaXIuRXhwcmVzc2lvbiBub2RlKTsKICBpci5EYXJ0VHlwZSBnZXRGb3JJbkl0ZXJhdG9yVHlwZShpci5Gb3JJblN0YXRlbWVudCBub2RlKTsKfQoRAE5OPAEoNC8xNQE5JDE8AgExcGFja2FnZTpjb21waWxlci9zcmMvaXIvc3RhdGljX3R5cGVfcHJvdmlkZXIuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvdHlwZV9idWlsZGVyLmRhcnTAAE6NLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnYnVpbGRlcl9rZXJuZWwuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IFR5cGVVc2U7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CgovLy8gRW51bSB0aGF0IGRlZmluZXMgaG93IGEgbWVtYmVyIGhhcyBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgdHlwZSB2YXJpYWJsZXMuCmVudW0gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgewogIC8vLyBUaGUgbWVtYmVyIGhhcyBubyBhY2Nlc3MgdG8gdHlwZSB2YXJpYWJsZXMuCiAgbm9uZSwKCiAgLy8vIFR5cGUgdmFyaWFibGVzIGFyZSBhY2Nlc3NpYmxlIGFzIGEgcHJvcGVydHkgb24gYHRoaXNgLgogIHByb3BlcnR5LAoKICAvLy8gVHlwZSB2YXJpYWJsZXMgYXJlIGFjY2Vzc2libGUgYXMgcGFyYW1ldGVycyBpbiB0aGUgY3VycmVudCBjb250ZXh0LgogIHBhcmFtZXRlciwKCiAgLy8vIElmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgYSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLCB0eXBlIHZhcmlhYmxlcyBhcmUKICAvLy8gYWNjZXNzaWJsZSBhcyBwYXJhbWV0ZXJzLCBvdGhlcndpc2UgdHlwZSB2YXJpYWJsZXMgYXJlIGFjY2Vzc2libGUgYXMKICAvLy8gYSBwcm9wZXJ0eSBvbiBgdGhpc2AuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgaW5zdGFuY2UgZmllbGRzIHdob3NlIGluaXRpYWxpemVycyBhcmUgZXhlY3V0ZWQgaW4gdGhlCiAgLy8vIGNvbnN0cnVjdG9ycy4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGUgbmVlZCBmb3IgdGhpcyBieSBhZGRpbmcgYSBmaWVsZC1zZXR0ZXIKICAvLyB0byB0aGUgSi1tb2RlbC4KICBpbnN0YW5jZUZpZWxkLAp9CgovLy8gRnVuY3Rpb25zIHRvIGluc2VydCB0eXBlIGNoZWNraW5nLCBjb2VyY2lvbiwgYW5kIGluc3RydWN0aW9uIGluc2VydGlvbgovLy8gZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudCBmb3IgZGFydCBjb2RlLgphYnN0cmFjdCBjbGFzcyBUeXBlQnVpbGRlciB7CiAgZmluYWwgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGJ1aWxkZXI7CgogIFR5cGVCdWlsZGVyKHRoaXMuYnVpbGRlcik7CgogIEpDbG9zZWRXb3JsZCBnZXQgX2Nsb3NlZFdvcmxkID0+IGJ1aWxkZXIuY2xvc2VkV29ybGQ7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICAvLy8gQ3JlYXRlIGEgdHlwZSBtYXNrIGZvciAndHJ1c3RpbmcnIGEgRGFydFR5cGUuIFJldHVybnMgYG51bGxgIGlmIHRoZXJlIGlzCiAgLy8vIG5vIGFwcHJveGltYXRpbmcgdHlwZSBtYXNrIChpLmUuIHRoZSB0eXBlIG1hc2sgd291bGQgYmUgYGR5bmFtaWNgKS4KICBBYnN0cmFjdFZhbHVlIHRydXN0VHlwZU1hc2soRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB0eXBlID0gYnVpbGRlci5sb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KHR5cGUpOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwogICAgaWYgKHR5cGUuaXNEeW5hbWljKSByZXR1cm4gbnVsbDsKICAgIGlmICghdHlwZS5pc0ludGVyZmFjZVR5cGUpIHJldHVybiBudWxsOwogICAgaWYgKHR5cGUgPT0gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpIHJldHVybiBudWxsOwogICAgLy8gVGhlIHR5cGUgZWxlbWVudCBpcyBlaXRoZXIgYSBjbGFzcyBvciB0aGUgdm9pZCBlbGVtZW50LgogICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9ICh0eXBlIGFzIEludGVyZmFjZVR5cGUpLmVsZW1lbnQ7CiAgICByZXR1cm4gX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTnVsbGFibGVTdWJ0eXBlKGVsZW1lbnQpOwogIH0KCiAgLy8vIENyZWF0ZSBhbiBpbnN0cnVjdGlvbiB0byBzaW1wbHkgdHJ1c3QgdGhlIHByb3ZpZGVkIHR5cGUuCiAgSEluc3RydWN0aW9uIF90cnVzdFR5cGUoSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IHRydXN0VHlwZU1hc2sodHlwZSk7CiAgICBpZiAobWFzayA9PSBudWxsKSByZXR1cm4gb3JpZ2luYWw7CiAgICByZXR1cm4gbmV3IEhUeXBlS25vd24ucGlubmVkKG1hc2ssIG9yaWdpbmFsKTsKICB9CgogIC8vLyBQcm9kdWNlcyBjb2RlIHRoYXQgY2hlY2tzIHRoZSBydW50aW1lIHR5cGUgaXMgYWN0dWFsbHkgdGhlIHR5cGUgc3BlY2lmaWVkCiAgLy8vIGJ5IGF0dGVtcHRpbmcgYSB0eXBlIGNvbnZlcnNpb24uCiAgSEluc3RydWN0aW9uIF9jaGVja1R5cGUoSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsKTsKICAgIHR5cGUgPSBidWlsZGVyLmxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQodHlwZSk7CiAgICBISW5zdHJ1Y3Rpb24gb3RoZXIgPQogICAgICAgIGJ1aWxkVHlwZUNvbnZlcnNpb24ob3JpZ2luYWwsIHR5cGUsIEhUeXBlQ29udmVyc2lvbi5UWVBFX0NIRUNLKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgb3BlcmF0aW9uIG9uIGByZWdpc3RyeWAgbWF5IGJlIGluY29uc2lzdGVudC4KICAgIC8vIElmIGl0IGlzIG5lZWRlZCB0aGVuIGl0IHNlZW1zIGxpa2VseSB0aGF0IHNpbWlsYXIgaW52b2NhdGlvbnMgb2YKICAgIC8vIGBidWlsZFR5cGVDb252ZXJzaW9uYCBpbiBgU3NhQnVpbGRlci52aXNpdEFzYCBzaG91bGQgYWxzbyBiZSBmb2xsb3dlZCBieQogICAgLy8gYSBzaW1pbGFyIG9wZXJhdGlvbiBvbiBgcmVnaXN0cnlgOyBvdGhlcndpc2UsIHRoaXMgb25lIG1pZ2h0IG5vdCBiZQogICAgLy8gbmVlZGVkLgogICAgYnVpbGRlci5yZWdpc3RyeT8ucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2sodHlwZSkpOwogICAgaWYgKG90aGVyIGlzIEhUeXBlQ29udmVyc2lvbiAmJiBvdGhlci5pc1JlZHVuZGFudChidWlsZGVyLmNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gb3JpZ2luYWw7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgSEFzQ2hlY2sgJiYgb3RoZXIuaXNSZWR1bmRhbnQoYnVpbGRlci5jbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIG9yaWdpbmFsOwogICAgfQogICAgcmV0dXJuIG90aGVyOwogIH0KCiAgLy8vIFByb2R1Y2VzIGNvZGUgdGhhdCBjaGVja3MgdGhlIHJ1bnRpbWUgdHlwZSBpcyBhY3R1YWxseSB0aGUgdHlwZSBzcGVjaWZpZWQKICAvLy8gYnkgYXR0ZW1wdGluZyBhIHR5cGUgY29udmVyc2lvbi4KICBISW5zdHJ1Y3Rpb24gX2NoZWNrQm9vbENvbnZlcmlvbihISW5zdHJ1Y3Rpb24gb3JpZ2luYWwpIHsKICAgIHZhciBjaGVja0luc3RydWN0aW9uID0KICAgICAgICBIQm9vbENvbnZlcnNpb24ob3JpZ2luYWwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICAgIGlmIChjaGVja0luc3RydWN0aW9uLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIG9yaWdpbmFsOwogICAgfQogICAgRGFydFR5cGUgYm9vbFR5cGUgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7CiAgICBidWlsZGVyLnJlZ2lzdHJ5Py5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayhib29sVHlwZSkpOwogICAgcmV0dXJuIGNoZWNrSW5zdHJ1Y3Rpb247CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ1c3RUeXBlT2ZQYXJhbWV0ZXIoSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gb3JpZ2luYWw7CiAgICBISW5zdHJ1Y3Rpb24gdHJ1c3RlZCA9IF90cnVzdFR5cGUob3JpZ2luYWwsIHR5cGUpOwogICAgaWYgKHRydXN0ZWQgPT0gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDsKICAgIGlmICh0cnVzdGVkIGlzIEhUeXBlS25vd24gJiYgdHJ1c3RlZC5pc1JlZHVuZGFudChidWlsZGVyLmNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gb3JpZ2luYWw7CiAgICB9CiAgICBidWlsZGVyLmFkZCh0cnVzdGVkKTsKICAgIHJldHVybiB0cnVzdGVkOwogIH0KCiAgSEluc3RydWN0aW9uIHBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mUGFyYW1ldGVyKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dCwgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gb3JpZ2luYWw7CiAgICBISW5zdHJ1Y3Rpb24gY2hlY2tlZE9yVHJ1c3RlZCA9IG9yaWdpbmFsOwogICAgQ2hlY2tQb2xpY3kgcGFyYW1ldGVyQ2hlY2tQb2xpY3kgPSBidWlsZGVyLmNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZW1iZXJDb250ZXh0KTsKICAgIGlmIChwYXJhbWV0ZXJDaGVja1BvbGljeS5pc1RydXN0ZWQpIHsKICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90cnVzdFR5cGUob3JpZ2luYWwsIHR5cGUpOwogICAgfSBlbHNlIGlmIChwYXJhbWV0ZXJDaGVja1BvbGljeS5pc0VtaXR0ZWQpIHsKICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF9jaGVja1R5cGUob3JpZ2luYWwsIHR5cGUpOwogICAgfQogICAgaWYgKGNoZWNrZWRPclRydXN0ZWQgPT0gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDsKICAgIGJ1aWxkZXIuYWRkKGNoZWNrZWRPclRydXN0ZWQpOwogICAgcmV0dXJuIGNoZWNrZWRPclRydXN0ZWQ7CiAgfQoKICAvLy8gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGFuZCB0aGUgbW9kZSwgd3JhcCB0aGUgZ2l2ZW4gdHlwZSBpbiBhbgogIC8vLyBpbnN0cnVjdGlvbiB0aGF0IGNoZWNrcyB0aGUgdHlwZSBpcyB3aGF0IHdlIGV4cGVjdCBvciBhdXRvbWF0aWNhbGx5CiAgLy8vIHRydXN0cyB0aGUgd3JpdHRlbiB0eXBlLgogIEhJbnN0cnVjdGlvbiBwb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnQoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0LCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybiBvcmlnaW5hbDsKICAgIEhJbnN0cnVjdGlvbiBjaGVja2VkT3JUcnVzdGVkID0gX3RydXN0VHlwZShvcmlnaW5hbCwgdHlwZSk7CiAgICBpZiAoY2hlY2tlZE9yVHJ1c3RlZCA9PSBvcmlnaW5hbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgYnVpbGRlci5hZGQoY2hlY2tlZE9yVHJ1c3RlZCk7CiAgICByZXR1cm4gY2hlY2tlZE9yVHJ1c3RlZDsKICB9CgogIEhJbnN0cnVjdGlvbiBwb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkNvbmRpdGlvbigKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQsIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCkgewogICAgRGFydFR5cGUgYm9vbFR5cGUgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7CiAgICBISW5zdHJ1Y3Rpb24gY2hlY2tlZE9yVHJ1c3RlZCA9IG9yaWdpbmFsOwogICAgQ2hlY2tQb2xpY3kgY29uZGl0aW9uQ2hlY2tQb2xpY3kgPSBidWlsZGVyLmNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRDb25kaXRpb25DaGVja1BvbGljeShtZW1iZXJDb250ZXh0KTsKICAgIGlmIChjb25kaXRpb25DaGVja1BvbGljeS5pc1RydXN0ZWQpIHsKICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90cnVzdFR5cGUob3JpZ2luYWwsIGJvb2xUeXBlKTsKICAgIH0gZWxzZSBpZiAoY29uZGl0aW9uQ2hlY2tQb2xpY3kuaXNFbWl0dGVkKSB7CiAgICAgIGNoZWNrZWRPclRydXN0ZWQgPSBfY2hlY2tCb29sQ29udmVyaW9uKG9yaWdpbmFsKTsKICAgIH0KICAgIGlmIChjaGVja2VkT3JUcnVzdGVkID09IG9yaWdpbmFsKSByZXR1cm4gb3JpZ2luYWw7CiAgICBidWlsZGVyLmFkZChjaGVja2VkT3JUcnVzdGVkKTsKICAgIHJldHVybiBjaGVja2VkT3JUcnVzdGVkOwogIH0KCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgY29tcHV0ZVR5cGVWYXJpYWJsZUFjY2VzcyhNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIEhlbHBlciB0byBjcmVhdGUgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBnZXRzIHRoZSB2YWx1ZSBvZiBhIHR5cGUgdmFyaWFibGUuCiAgSEluc3RydWN0aW9uIGFkZFR5cGVWYXJpYWJsZVJlZmVyZW5jZSgKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBMb2NhbCB0eXBlVmFyaWFibGVMb2NhbCA9CiAgICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZSk7CgogICAgLy8vIFJlYWQgW3R5cGVWYXJpYWJsZV0gYXMgYSBwcm9wZXJ0eSBvZiBvbiBgdGhpc2AuCiAgICBISW5zdHJ1Y3Rpb24gcmVhZEFzUHJvcGVydHkoKSB7CiAgICAgIHJldHVybiByZWFkVHlwZVZhcmlhYmxlKHR5cGUsIG1lbWJlciwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAgLy8vIFJlYWQgW3R5cGVWYXJpYWJsZV0gYXMgYSBwYXJhbWV0ZXIuCiAgICBISW5zdHJ1Y3Rpb24gcmVhZEFzUGFyYW1ldGVyKCkgewogICAgICByZXR1cm4gYnVpbGRlci5sb2NhbHNIYW5kbGVyCiAgICAgICAgICAucmVhZExvY2FsKHR5cGVWYXJpYWJsZUxvY2FsLCBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIHR5cGVWYXJpYWJsZUFjY2VzczsKICAgIGlmICh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgIHR5cGVWYXJpYWJsZUFjY2VzcyA9IGNvbXB1dGVUeXBlVmFyaWFibGVBY2Nlc3MobWVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHR5cGVWYXJpYWJsZUFjY2VzcyA9IENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjsKICAgIH0KICAgIHN3aXRjaCAodHlwZVZhcmlhYmxlQWNjZXNzKSB7CiAgICAgIGNhc2UgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucGFyYW1ldGVyOgogICAgICAgIHJldHVybiByZWFkQXNQYXJhbWV0ZXIoKTsKICAgICAgY2FzZSBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5pbnN0YW5jZUZpZWxkOgogICAgICAgIGlmIChtZW1iZXIgIT0gYnVpbGRlci50YXJnZXRFbGVtZW50KSB7CiAgICAgICAgICAvLyBXaGVuIFttZW1iZXJdIGlzIGEgZmllbGQsIHdlIGNhbiBlaXRoZXIgYmUgZ2VuZXJhdGluZyBhIGNoZWNrZWQKICAgICAgICAgIC8vIHNldHRlciBvciBpbmxpbmluZyBpdHMgaW5pdGlhbGl6ZXIgaW4gYSBjb25zdHJ1Y3Rvci4gQW4gaW5pdGlhbGl6ZXIKICAgICAgICAgIC8vIGlzIG5ldmVyIGJ1aWx0IHN0YW5kYWxvbmUsIHNvIGluIHRoYXQgY2FzZSBbdGFyZ2V0XSBpcyBub3QgdGhlCiAgICAgICAgICAvLyBbbWVtYmVyXSBpdHNlbGYuCiAgICAgICAgICByZXR1cm4gcmVhZEFzUGFyYW1ldGVyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZWFkQXNQcm9wZXJ0eSgpOwogICAgICBjYXNlIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnByb3BlcnR5OgogICAgICAgIHJldHVybiByZWFkQXNQcm9wZXJ0eSgpOwogICAgICBjYXNlIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLm5vbmU6CiAgICAgICAgYnVpbGRlci5yZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICB0eXBlLmVsZW1lbnQsICdVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgaW4gc3RhdGljIGNvbnRleHQuJyk7CiAgICB9CiAgICBidWlsZGVyLnJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgdHlwZS5lbGVtZW50LCAnVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlIGFjY2VzczogJHR5cGVWYXJpYWJsZUFjY2Vzcy4nKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIEdlbmVyYXRlIGNvZGUgdG8gZXh0cmFjdCB0aGUgdHlwZSBhcmd1bWVudCBmcm9tIHRoZSBvYmplY3QuCiAgSEluc3RydWN0aW9uIHJlYWRUeXBlVmFyaWFibGUoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSwgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgYXNzZXJ0KG1lbWJlci5pc0luc3RhbmNlTWVtYmVyKTsKICAgIGFzc2VydCh2YXJpYWJsZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbiBpcyBDbGFzc0VudGl0eSk7CiAgICBISW5zdHJ1Y3Rpb24gdGFyZ2V0ID0KICAgICAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIucmVhZFRoaXMoc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciA9CiAgICAgICAgbmV3IEhJbnRlcmNlcHRvcih0YXJnZXQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKQogICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgYnVpbGRlci5hZGQoaW50ZXJjZXB0b3IpOwogICAgYnVpbGRlci5wdXNoKG5ldyBIVHlwZUluZm9SZWFkVmFyaWFibGUuaW50ZXJjZXB0ZWQoCiAgICAgICAgdmFyaWFibGUsIGludGVyY2VwdG9yLCB0YXJnZXQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24pOwogICAgcmV0dXJuIGJ1aWxkZXIucG9wKCk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gYnVpbGRUeXBlQXJndW1lbnRSZXByZXNlbnRhdGlvbnMoCiAgICAgIERhcnRUeXBlIHR5cGUsIE1lbWJlckVudGl0eSBzb3VyY2VFbGVtZW50LAogICAgICBbU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb25dKSB7CiAgICBhc3NlcnQoIXR5cGUuaXNUeXBlVmFyaWFibGUpOwogICAgLy8gQ29tcHV0ZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgYXJndW1lbnRzLCBpbmNsdWRpbmcgYWNjZXNzCiAgICAvLyB0byB0aGUgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIGZvciB0eXBlIHZhcmlhYmxlcyBhcyBpbnN0cnVjdGlvbnMuCiAgICBhc3NlcnQodHlwZS5pc0ludGVyZmFjZVR5cGUpOwogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2UgPSB0eXBlOwogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIGludGVyZmFjZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlucHV0cy5hZGQoYW5hbHl6ZVR5cGVBcmd1bWVudChhcmd1bWVudCwgc291cmNlRWxlbWVudCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogICAgSEluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9uID0gbmV3IEhUeXBlSW5mb0V4cHJlc3Npb24oCiAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRSwKICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGludGVyZmFjZS5lbGVtZW50KSwKICAgICAgICBpbnB1dHMsCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIHJldHVybiByZXByZXNlbnRhdGlvbjsKICB9CgogIEhJbnN0cnVjdGlvbiBhbmFseXplVHlwZUFyZ3VtZW50KAogICAgICBEYXJ0VHlwZSBhcmd1bWVudCwgTWVtYmVyRW50aXR5IHNvdXJjZUVsZW1lbnQsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGlmIChidWlsZGVyLm9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICByZXR1cm4gYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aShhcmd1bWVudCwgc291cmNlRWxlbWVudCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBhcmd1bWVudCA9IGFyZ3VtZW50LnVuYWxpYXNlZDsKICAgIGlmIChhcmd1bWVudC50cmVhdEFzRHluYW1pYykgewogICAgICAvLyBSZXByZXNlbnQgW2R5bmFtaWNdIGFzIFtudWxsXS4KICAgICAgcmV0dXJuIGJ1aWxkZXIuZ3JhcGguYWRkQ29uc3RhbnROdWxsKF9jbG9zZWRXb3JsZCk7CiAgICB9CgogICAgaWYgKGFyZ3VtZW50LmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgIHJldHVybiBhZGRUeXBlVmFyaWFibGVSZWZlcmVuY2UoYXJndW1lbnQsIHNvdXJjZUVsZW1lbnQsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgYXJndW1lbnQuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBbHNvIG1ha2UgdGhpcyBjb25kaXRpb25hbCBvbiB3aGV0aGVyIHdlIGhhdmUKICAgICAgLy8gY2FsY3VsYXRlZCB3ZSBuZWVkIHRoYXQgcGFydGljdWxhciBtZXRob2Qgc2lnbmF0dXJlLgogICAgICBpbnB1dHMuYWRkKGFuYWx5emVUeXBlQXJndW1lbnQodmFyaWFibGUsIHNvdXJjZUVsZW1lbnQpKTsKICAgIH0pOwogICAgSEluc3RydWN0aW9uIHJlc3VsdCA9IG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUsCiAgICAgICAgYXJndW1lbnQsCiAgICAgICAgaW5wdXRzLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBidWlsZGVyLmFkZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEhJbnN0cnVjdGlvbiBhbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpKAogICAgICBEYXJ0VHlwZSBhcmd1bWVudCwgTWVtYmVyRW50aXR5IHNvdXJjZUVsZW1lbnQsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGFyZ3VtZW50ID0gYXJndW1lbnQudW5hbGlhc2VkOwoKICAgIGlmICghYXJndW1lbnQuY29udGFpbnNUeXBlVmFyaWFibGVzKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBydGkgPSBITG9hZFR5cGUoYXJndW1lbnQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgYnVpbGRlci5hZGQocnRpKTsKICAgICAgcmV0dXJuIHJ0aTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogTG9jYXRlIHR5cGUgZW52aXJvbm1lbnQuCiAgICBfRW52aXJvbm1lbnRFeHByZXNzaW9uQW5kU3RydWN0dXJlIGVudmlyb25tZW50QWNjZXNzID0KICAgICAgICBfYnVpbGRFbnZpcm9ubWVudEZvclR5cGUoYXJndW1lbnQsIHNvdXJjZUVsZW1lbnQsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgSEluc3RydWN0aW9uIHJ0aSA9IEhUeXBlRXZhbCgKICAgICAgICBlbnZpcm9ubWVudEFjY2Vzcy5leHByZXNzaW9uLAogICAgICAgIGVudmlyb25tZW50QWNjZXNzLnN0cnVjdHVyZSwKICAgICAgICBUeXBlRXhwcmVzc2lvblJlY2lwZShhcmd1bWVudCksCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIGJ1aWxkZXIuYWRkKHJ0aSk7CiAgICByZXR1cm4gcnRpOwogIH0KCiAgX0Vudmlyb25tZW50RXhwcmVzc2lvbkFuZFN0cnVjdHVyZSBfYnVpbGRFbnZpcm9ubWVudEZvclR5cGUoCiAgICAgIERhcnRUeXBlIHR5cGUsIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGFzc2VydCh0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyk7CiAgICAvLyBCdWlsZCB0aGUgZW52aXJvbm1lbnQgZm9yIGVhY2ggYWNjZXNzLCBhbmQgaG9wZSBHVk4gcmVkdWNlcyB0aGUgbGFyZ2VyCiAgICAvLyBudW1iZXIgb2YgZXhwcmVzc2lvbnMuIEFub3RoZXIgb3B0aW9uIGlzIHRvIHByZWNvbXB1dGUgdGhlIGVudmlyb25tZW50IGF0CiAgICAvLyBwcm9jZWR1cmUgZW50cnkgYW5kIG9wdGltaXplIGVhcmx5LWV4aXRzIGJ5IHNpbmtpbmcgdGhlIHByZWNvbXB1dGVkCiAgICAvLyBlbnZpcm9ubWVudC4KCiAgICAvLyBTcGxpdCB0aGUgdHlwZSB2YXJpYWJsZXMgaW50byBjbGFzcy1zY29wZSBhbmQgZnVuY3Rpb24tc2NvcGUocykuCiAgICBib29sIHVzZXNJbnN0YW5jZVBhcmFtZXRlcnMgPSBmYWxzZTsKICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZTsKICAgIFNldDxUeXBlVmFyaWFibGVUeXBlPiBwYXJhbWV0ZXJzID0gU2V0KCk7CgogICAgdm9pZCBwcm9jZXNzVHlwZVZhcmlhYmxlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgewogICAgICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyB0eXBlVmFyaWFibGVBY2Nlc3M7CiAgICAgIGlmICh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgICAgdHlwZVZhcmlhYmxlQWNjZXNzID0gY29tcHV0ZVR5cGVWYXJpYWJsZUFjY2VzcyhtZW1iZXIpOwogICAgICAgIGludGVyZmFjZVR5cGUgPSBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRUaGlzVHlwZSh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlVmFyaWFibGVBY2Nlc3MgPSBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5wYXJhbWV0ZXI7CiAgICAgIH0KICAgICAgc3dpdGNoICh0eXBlVmFyaWFibGVBY2Nlc3MpIHsKICAgICAgICBjYXNlIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjoKICAgICAgICAgIHBhcmFtZXRlcnMuYWRkKHR5cGUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MuaW5zdGFuY2VGaWVsZDoKICAgICAgICAgIGlmIChtZW1iZXIgIT0gYnVpbGRlci50YXJnZXRFbGVtZW50KSB7CiAgICAgICAgICAgIC8vIFdoZW4gW21lbWJlcl0gaXMgYSBmaWVsZCwgd2UgY2FuIGVpdGhlciBiZSBnZW5lcmF0aW5nIGEgY2hlY2tlZAogICAgICAgICAgICAvLyBzZXR0ZXIgb3IgaW5saW5pbmcgaXRzIGluaXRpYWxpemVyIGluIGEgY29uc3RydWN0b3IuIEFuCiAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIG5ldmVyIGJ1aWx0IHN0YW5kYWxvbmUsIHNvIGluIHRoYXQgY2FzZSBbdGFyZ2V0XQogICAgICAgICAgICAvLyBpcyBub3QgdGhlIFttZW1iZXJdIGl0c2VsZi4KICAgICAgICAgICAgcGFyYW1ldGVycy5hZGQodHlwZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHVzZXNJbnN0YW5jZVBhcmFtZXRlcnMgPSB0cnVlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucHJvcGVydHk6CiAgICAgICAgICB1c2VzSW5zdGFuY2VQYXJhbWV0ZXJzID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnVpbGRlci5yZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICAgIHR5cGUuZWxlbWVudCwgJ1VuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZSBpbiBzdGF0aWMgY29udGV4dC4nKTsKICAgICAgfQogICAgfQoKICAgIHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZShwcm9jZXNzVHlwZVZhcmlhYmxlKTsKCiAgICBISW5zdHJ1Y3Rpb24gZW52aXJvbm1lbnQ7CiAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgc3RydWN0dXJlOwoKICAgIGlmICh1c2VzSW5zdGFuY2VQYXJhbWV0ZXJzKSB7CiAgICAgIEhJbnN0cnVjdGlvbiB0YXJnZXQgPQogICAgICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLnJlYWRUaGlzKHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIC8vIFRPRE8oc3JhKTogSEluc3RhbmNlRW52aXJvbm1lbnQgc2hvdWxkIHByb2JhYmx5IHRha2UgYW4gaW50ZXJjZXB0b3IgdG8KICAgICAgLy8gYWxsb3cgdGhlIGdldEludGVyY2VwdG9yIGNhbGwgdG8gYmUgcmV1c2VkLgogICAgICBlbnZpcm9ubWVudCA9CiAgICAgICAgICBISW5zdGFuY2VFbnZpcm9ubWVudCh0YXJnZXQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIGJ1aWxkZXIuYWRkKGVudmlyb25tZW50KTsKICAgICAgc3RydWN0dXJlID0gRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZShjbGFzc1R5cGU6IGludGVyZmFjZVR5cGUpOwogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogVmlzaXQgcGFyYW1ldGVycyBpbiBzb3VyY2Utb3JkZXIuCiAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgcGFyYW1ldGVyIGluIHBhcmFtZXRlcnMpIHsKICAgICAgTG9jYWwgdHlwZVZhcmlhYmxlTG9jYWwgPQogICAgICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwocGFyYW1ldGVyKTsKICAgICAgSEluc3RydWN0aW9uIGFjY2VzcyA9IGJ1aWxkZXIubG9jYWxzSGFuZGxlcgogICAgICAgICAgLnJlYWRMb2NhbCh0eXBlVmFyaWFibGVMb2NhbCwgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAgIGlmIChlbnZpcm9ubWVudCA9PSBudWxsKSB7CiAgICAgICAgZW52aXJvbm1lbnQgPSBhY2Nlc3M7CiAgICAgICAgc3RydWN0dXJlID0gU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKHBhcmFtZXRlcik7CiAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlIGlzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSkgewogICAgICAgIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBzaW5nbGV0b25TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgLy8gQ29udmVydCBhIHNpbmdsZXRvbiBlbnZpcm9ubWVudCBpbnRvIGEgc2luZ2xldG9uIHR1cGxlIGFuZCBleHRlbmQgaXQKICAgICAgICAvLyB2aWEgJ2JpbmQnLiBpLmUuIGdlbmVyYXRlIGBlbnYxLl9ldmFsKCJAPDA+IikuX2JpbmQoZW52MilgIFRPRE8oc3JhKToKICAgICAgICAvLyBIYXZlIGEgYmluZDEgaW5zdHJ1Y3Rpb24uCiAgICAgICAgLy8gVE9ETyhzcmEpOiBBZGQgYSAnUnRpLl9iaW5kMScgbWV0aG9kIHRvIHNob3J0ZW4gYW5kIGFjY2VsZXJhdGUgdGhpcwogICAgICAgIC8vIGNvbW1vbiBjYXNlLgogICAgICAgIEhJbnN0cnVjdGlvbiBzaW5nbGV0b25UdXBsZSA9IEhUeXBlRXZhbCgKICAgICAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgICAgIHN0cnVjdHVyZSwKICAgICAgICAgICAgRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZSh0eXBlczogW3NpbmdsZXRvblN0cnVjdHVyZS52YXJpYWJsZV0pLAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBidWlsZGVyLmFkZChzaW5nbGV0b25UdXBsZSk7CiAgICAgICAgZW52aXJvbm1lbnQgPQogICAgICAgICAgICBIVHlwZUJpbmQoc2luZ2xldG9uVHVwbGUsIGFjY2VzcywgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgIGJ1aWxkZXIuYWRkKGVudmlyb25tZW50KTsKICAgICAgICBzdHJ1Y3R1cmUgPSBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKAogICAgICAgICAgICBiaW5kaW5nczogW3NpbmdsZXRvblN0cnVjdHVyZS52YXJpYWJsZSwgcGFyYW1ldGVyXSk7CiAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlIGlzIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgICBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGZ1bGxTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgZW52aXJvbm1lbnQgPQogICAgICAgICAgICBIVHlwZUJpbmQoZW52aXJvbm1lbnQsIGFjY2VzcywgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgIGJ1aWxkZXIuYWRkKGVudmlyb25tZW50KTsKICAgICAgICBzdHJ1Y3R1cmUgPSBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKAogICAgICAgICAgICBjbGFzc1R5cGU6IGZ1bGxTdHJ1Y3R1cmUuY2xhc3NUeXBlLAogICAgICAgICAgICBiaW5kaW5nczogWy4uLmZ1bGxTdHJ1Y3R1cmUuYmluZGluZ3MsIHBhcmFtZXRlcl0pOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1aWxkZXIucmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihwYXJhbWV0ZXIuZWxlbWVudCwgJ1VuZXhwZWN0ZWQnKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBfRW52aXJvbm1lbnRFeHByZXNzaW9uQW5kU3RydWN0dXJlKGVudmlyb25tZW50LCBzdHJ1Y3R1cmUpOwogIH0KCiAgLy8vIEJ1aWxkIGEgW0hUeXBlQ29udmVyc2lvbl0gZm9yIGNvbnZlcnRpbmcgW29yaWdpbmFsXSB0byB0eXBlIFt0eXBlXS4KICAvLy8KICAvLy8gSW52YXJpYW50OiBbdHlwZV0gbXVzdCBiZSB2YWxpZCBpbiB0aGUgY29udGV4dC4KICAvLy8gU2VlIFtMb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0XS4KICBISW5zdHJ1Y3Rpb24gYnVpbGRUeXBlQ29udmVyc2lvbigKICAgICAgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlLCBpbnQga2luZCwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgaWYgKGJ1aWxkZXIub3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIHJldHVybiBidWlsZEFzQ2hlY2sob3JpZ2luYWwsIHR5cGUsCiAgICAgICAgICBpc1R5cGVFcnJvcjoga2luZCA9PSBIVHlwZUNvbnZlcnNpb24uVFlQRV9DSEVDSywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwogICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlICYmICF0eXBlLnRyZWF0QXNSYXcpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgICAgQWJzdHJhY3RWYWx1ZSBzdWJ0eXBlID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU51bGxhYmxlU3VidHlwZShpbnRlcmZhY2VUeXBlLmVsZW1lbnQpOwogICAgICBISW5zdHJ1Y3Rpb24gcmVwcmVzZW50YXRpb25zID0gYnVpbGRUeXBlQXJndW1lbnRSZXByZXNlbnRhdGlvbnMoCiAgICAgICAgICB0eXBlLCBidWlsZGVyLnNvdXJjZUVsZW1lbnQsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYnVpbGRlci5hZGQocmVwcmVzZW50YXRpb25zKTsKICAgICAgcmV0dXJuIG5ldyBIVHlwZUNvbnZlcnNpb24ud2l0aFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgICAgIHR5cGUsIGtpbmQsIHN1YnR5cGUsIG9yaWdpbmFsLCByZXByZXNlbnRhdGlvbnMpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgfSBlbHNlIGlmICh0eXBlLmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgIEFic3RyYWN0VmFsdWUgc3VidHlwZSA9IG9yaWdpbmFsLmluc3RydWN0aW9uVHlwZTsKICAgICAgSEluc3RydWN0aW9uIHR5cGVWYXJpYWJsZSA9CiAgICAgICAgICBhZGRUeXBlVmFyaWFibGVSZWZlcmVuY2UodHlwZSwgYnVpbGRlci5zb3VyY2VFbGVtZW50KTsKICAgICAgcmV0dXJuIG5ldyBIVHlwZUNvbnZlcnNpb24ud2l0aFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgICAgIHR5cGUsIGtpbmQsIHN1YnR5cGUsIG9yaWdpbmFsLCB0eXBlVmFyaWFibGUpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgfSBlbHNlIGlmICh0eXBlLmlzRnVuY3Rpb25UeXBlIHx8IHR5cGUuaXNGdXR1cmVPcikgewogICAgICBISW5zdHJ1Y3Rpb24gcmVpZmllZFR5cGUgPQogICAgICAgICAgYW5hbHl6ZVR5cGVBcmd1bWVudCh0eXBlLCBidWlsZGVyLnNvdXJjZUVsZW1lbnQpOwogICAgICAvLyBUeXBlTWFza3MgZG9uJ3QgZW5jb2RlIGZ1bmN0aW9uIHR5cGVzIG9yIEZ1dHVyZU9yIHR5cGVzLgogICAgICBBYnN0cmFjdFZhbHVlIHJlZmluZWRNYXNrID0gb3JpZ2luYWwuaW5zdHJ1Y3Rpb25UeXBlOwogICAgICByZXR1cm4gbmV3IEhUeXBlQ29udmVyc2lvbi53aXRoVHlwZVJlcHJlc2VudGF0aW9uKAogICAgICAgICAgdHlwZSwga2luZCwgcmVmaW5lZE1hc2ssIG9yaWdpbmFsLCByZWlmaWVkVHlwZSkKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gb3JpZ2luYWwuY29udmVydFR5cGUoX2Nsb3NlZFdvcmxkLCB0eXBlLCBraW5kKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIH0KICB9CgogIC8vLyBCdWlsZCBhIFtIQXNDaGVja10gZm9yIGNvbnZlcnRpbmcgW29yaWdpbmFsXSB0byB0eXBlIFt0eXBlXS4KICAvLy8KICAvLy8gSW52YXJpYW50OiBbdHlwZV0gbXVzdCBiZSB2YWxpZCBpbiB0aGUgY29udGV4dC4KICAvLy8gU2VlIFtMb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0XS4KICBISW5zdHJ1Y3Rpb24gYnVpbGRBc0NoZWNrKEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgRGFydFR5cGUgdHlwZSwKICAgICAge2Jvb2wgaXNUeXBlRXJyb3IsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwoKICAgIGlmICh0eXBlLmlzRHluYW1pYykgcmV0dXJuIG9yaWdpbmFsOwogICAgaWYgKHR5cGUuaXNWb2lkKSByZXR1cm4gb3JpZ2luYWw7CiAgICBpZiAodHlwZSA9PSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSkgcmV0dXJuIG9yaWdpbmFsOwoKICAgIEhJbnN0cnVjdGlvbiByZWlmaWVkVHlwZSA9IGFuYWx5emVUeXBlQXJndW1lbnROZXdSdGkoCiAgICAgICAgdHlwZSwgYnVpbGRlci5zb3VyY2VFbGVtZW50LAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjaGVja2VkVHlwZSA9CiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlRnJvbVN0YXRpY1R5cGUodHlwZSwgbnVsbGFibGU6IHRydWUpOwogICAgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oCiAgICAgICAgb3JpZ2luYWwuaW5zdHJ1Y3Rpb25UeXBlLCBjaGVja2VkVHlwZS5hYnN0cmFjdFZhbHVlKTsKICAgIHJldHVybiBIQXNDaGVjaygKICAgICAgICBvcmlnaW5hbCwgcmVpZmllZFR5cGUsIGNoZWNrZWRUeXBlLCB0eXBlLCBpc1R5cGVFcnJvciwgaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQp9CgpjbGFzcyBfRW52aXJvbm1lbnRFeHByZXNzaW9uQW5kU3RydWN0dXJlIHsKICBmaW5hbCBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbjsKICBmaW5hbCBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgc3RydWN0dXJlOwogIF9FbnZpcm9ubWVudEV4cHJlc3Npb25BbmRTdHJ1Y3R1cmUodGhpcy5leHByZXNzaW9uLCB0aGlzLnN0cnVjdHVyZSk7Cn0KgfIATk48AR4VJCExJygaLBgBTR8yCAE9DAFKDQFNSxwGThRLFRECAUswHScBHQE4ATIoAU9KLyM3GyUsRT87QAQBP0IaLicyBAFQJ0IaNxlJTkhQSw9CThcGRxcGEgQBUCc8G0I2FwY+Rh0EAUwnNy5NFwYaFAQBN0onLksxKjUxNQY3Ix0EAUdKHzhKJ0A3Ix0EATc7Pi5LMSo5MTgGNyMdBAFKAU4pMi8ePAE4JCwxBgEsJSNPBgEwNz4NPgYiLiIyL01RTB4kCiEtISkoSgYkUBEEAUJQLyU9Gk4fQzMeOEkwGgQBMTEvIkpLIiQyOT4yBjspSBAqLxsEASQ1LyxAMQYjIyg6BgEjPzEGATI/TD5ACDMpEhAqLxkTBAEqNS8jAStPMRgSBis7OjMBIiYlKCovFhAEAT8qLyhOUUsUAUgpIS4BNjI5QDg4D0AIJDAgEjQxT0dPKyIUDCkSLykSESpMCAYBMwEeKAEiHFBQNRRJNSBKBgE0NSBDMk8BIR5CQ0pQUSVPGDEZF00uMyUWUSIyQT5AFk4iMjA/D0kIBgFHBAFKBjYqJDYvLCo7MQYBJxs0Kh5NRzskOToxJjgiQTk3MTkhPEI8OToxDTwxBgQBQwY2KkJBJxsBKSZJATolLy1JRz4VUC8EAgErISxHAgEqcGFja2FnZTpjb21waWxlci9zcmMvc3NhL3R5cGVfYnVpbGRlci5kYXJ0OnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL2J1aWxkZXJfa2VybmVsLmRhcnTAATJmLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9qdW1wcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX3Byb3ZpZGVyLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9sb2NhbHMuZGFydCcgc2hvdyBKdW1wVmlzaXRvcjsKaW1wb3J0ICcuLi9qc19tb2RlbC9qc193b3JsZC5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICdsb2NhbHNfaGFuZGxlci5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwppbXBvcnQgJ3R5cGVfc3lzdGVtLmRhcnQnOwoKLy8vIFtLZXJuZWxUeXBlR3JhcGhCdWlsZGVyXSBjb25zdHJ1Y3RzIGEgdHlwZS1pbmZlcmVuY2UgZ3JhcGggZm9yIGEgcGFydGljdWxhcgovLy8gZWxlbWVudC4KLy8vCi8vLyBDYWxsaW5nIFtydW5dIHdpbGwgc3RhcnQgdGhlIHdvcmsgb2YgdmlzaXRpbmcgdGhlIGJvZHkgb2YgdGhlIGNvZGUgdG8KLy8vIGNvbnN0cnVjdCBhIHNldCBvZiBpbmZlcmVuY2Utbm9kZXMgdGhhdCBhYnN0cmFjdGx5IHJlcHJlc2VudCB3aGF0IHRoZSBjb2RlCi8vLyBpcyBkb2luZy4KY2xhc3MgS2VybmVsVHlwZUdyYXBoQnVpbGRlciBleHRlbmRzIGlyLlZpc2l0b3I8VHlwZUluZm9ybWF0aW9uPiB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEpzQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIEluZmVycmVyRW5naW5lIF9pbmZlcnJlcjsKICBmaW5hbCBUeXBlU3lzdGVtIF90eXBlczsKICBmaW5hbCBNZW1iZXJFbnRpdHkgX2FuYWx5emVkTWVtYmVyOwogIGZpbmFsIGlyLk5vZGUgX2FuYWx5emVkTm9kZTsKICBmaW5hbCBLZXJuZWxUb0xvY2Fsc01hcCBfbG9jYWxzTWFwOwogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBfbWVtYmVyRGF0YTsKICBmaW5hbCBib29sIF9pbkdlbmVyYXRpdmVDb25zdHJ1Y3RvcjsKCiAgTG9jYWxTdGF0ZSBfc3RhdGVJbnRlcm5hbDsKICBMb2NhbFN0YXRlIF9zdGF0ZUFmdGVyV2hlblRydWVJbnRlcm5hbDsKICBMb2NhbFN0YXRlIF9zdGF0ZUFmdGVyV2hlbkZhbHNlSW50ZXJuYWw7CgogIC8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IGxvY2FsIHN0YXRlIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBtb3N0CiAgLy8vIHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBub3QgdGFrZW4gaW50byBhY2NvdW50CiAgTG9jYWxTdGF0ZSBnZXQgX3N0YXRlIHsKICAgIHJldHVybiBfc3RhdGVJbnRlcm5hbDsKICB9CgogIC8vLyBTZXRzIHRoZSBjdXJyZW50IGxvY2FsIHN0YXRlIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBtb3N0CiAgLy8vIHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBub3QgdGFrZW4gaW50byBhY2NvdW50CiAgLy8vCiAgLy8vIFRoaXMgdXNlZCBmb3Igd2hlbiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUgaXMgbm90IGEgYm9vbGVhbgogIC8vLyBleHByZXNzaW9uIGFuZCB0aGVyZSBmb3IgYWxzbyByZXNldHMgW19zdGF0ZUFmdGVyV2hlblRydWVdIGFuZAogIC8vLyBbX3N0YXRlQWZ0ZXJXaGVuRmFsc2VdIHRvIHRoZSBzYW1lIHZhbHVlLgogIHZvaWQgc2V0IF9zdGF0ZShMb2NhbFN0YXRlIHZhbHVlKSB7CiAgICBfc3RhdGVJbnRlcm5hbCA9IHZhbHVlOwogICAgX3N0YXRlQWZ0ZXJXaGVuVHJ1ZUludGVybmFsID0gX3N0YXRlQWZ0ZXJXaGVuRmFsc2VJbnRlcm5hbCA9IG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgY3VycmVudCBsb2NhbCBzdGF0ZSBmb3Igd2hlbiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUKICAvLy8gaGFzIGV2YWx1YXRlZCB0byBgdHJ1ZWAuCiAgLy8vCiAgLy8vIElmIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBub3QgYSBib29sZWFuIGV4cHJlc3Npb24gdGhlbiB0aGlzIGlzCiAgLy8vIHRoZSBzYW1lIGFzIFtfc3RhdGVdLgogIExvY2FsU3RhdGUgZ2V0IF9zdGF0ZUFmdGVyV2hlblRydWUgPT4KICAgICAgX3N0YXRlQWZ0ZXJXaGVuVHJ1ZUludGVybmFsID8/IF9zdGF0ZUludGVybmFsOwoKICAvLy8gUmV0dXJucyB0aGUgY3VycmVudCBsb2NhbCBzdGF0ZSBmb3Igd2hlbiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUKICAvLy8gaGFzIGV2YWx1YXRlZCB0byBgZmFsc2VgLgogIC8vLwogIC8vLyBJZiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUgaXMgbm90IGEgYm9vbGVhbiBleHByZXNzaW9uIHRoZW4gdGhpcyBpcwogIC8vLyB0aGUgc2FtZSBhcyBbX3N0YXRlXS4KICBMb2NhbFN0YXRlIGdldCBfc3RhdGVBZnRlcldoZW5GYWxzZSA9PgogICAgICBfc3RhdGVBZnRlcldoZW5GYWxzZUludGVybmFsID8/IF9zdGF0ZUludGVybmFsOwoKICAvLy8gU2V0cyB0aGUgY3VycmVudCBsb2NhbCBzdGF0ZS4gW2Jhc2VdIGlzIHRoZSBsb2NhbCBzdGF0ZSBmb3Igd2hlbiB0aGUKICAvLy8gYm9vbGVhbiB2YWx1ZSBvZiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUgaXMgbm90IHRha2VuIGludG8gYWNjb3VudC4KICAvLy8gW3doZW5UcnVlXSBhbmQgW3doZW5GYWxzZV0gYXJlIHRoZSBsb2NhbCBzdGF0ZSBmb3Igd2hlbiB0aGUgYm9vbGVhbiB2YWx1ZQogIC8vLyBvZiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUgaXMgYHRydWVgIG9yIGBmYWxzZWAsIHJlc3BlY3RpdmVseS4KICB2b2lkIF9zZXRTdGF0ZUFmdGVyKAogICAgICBMb2NhbFN0YXRlIGJhc2UsIExvY2FsU3RhdGUgd2hlblRydWUsIExvY2FsU3RhdGUgd2hlbkZhbHNlKSB7CiAgICBfc3RhdGVJbnRlcm5hbCA9IGJhc2U7CiAgICBfc3RhdGVBZnRlcldoZW5UcnVlSW50ZXJuYWwgPSB3aGVuVHJ1ZTsKICAgIF9zdGF0ZUFmdGVyV2hlbkZhbHNlSW50ZXJuYWwgPSB3aGVuRmFsc2U7CiAgfQoKICBmaW5hbCBTaWRlRWZmZWN0c0J1aWxkZXIgX3NpZGVFZmZlY3RzQnVpbGRlcjsKICBmaW5hbCBNYXA8SnVtcFRhcmdldCwgTGlzdDxMb2NhbFN0YXRlPj4gX2JyZWFrc0ZvciA9CiAgICAgIDxKdW1wVGFyZ2V0LCBMaXN0PExvY2FsU3RhdGU+Pnt9OwogIGZpbmFsIE1hcDxKdW1wVGFyZ2V0LCBMaXN0PExvY2FsU3RhdGU+PiBfY29udGludWVzRm9yID0KICAgICAgPEp1bXBUYXJnZXQsIExpc3Q8TG9jYWxTdGF0ZT4+e307CiAgVHlwZUluZm9ybWF0aW9uIF9yZXR1cm5UeXBlOwogIGZpbmFsIFNldDxMb2NhbD4gX2NhcHR1cmVkVmFyaWFibGVzID0gbmV3IFNldDxMb2NhbD4oKTsKICBmaW5hbCBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PiBfY2FwdHVyZWRBbmRCb3hlZDsKCiAgZmluYWwgU3RhdGljVHlwZVByb3ZpZGVyIF9zdGF0aWNUeXBlUHJvdmlkZXI7CgogIC8vLyBXaGV0aGVyIHdlIGN1cnJlbnRseSB0YWtlbiB0aGUgYm9vbGVhbiByZXN1bHQgb2YgaXMtY2hlY2tzIG9yIG51bGwtY2hlY2tzCiAgLy8vIGludG8gYWNjb3VudCBpbiB0aGUgbG9jYWwgc3RhdGUuCiAgYm9vbCBfYWNjdW11bGF0ZUlzQ2hlY2tzID0gZmFsc2U7CgogIEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIoCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9pbmZlcnJlciwKICAgICAgdGhpcy5fYW5hbHl6ZWRNZW1iZXIsCiAgICAgIHRoaXMuX2FuYWx5emVkTm9kZSwKICAgICAgdGhpcy5fbG9jYWxzTWFwLAogICAgICB0aGlzLl9zdGF0aWNUeXBlUHJvdmlkZXIsCiAgICAgIFt0aGlzLl9zdGF0ZUludGVybmFsLAogICAgICBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PiBjYXB0dXJlZEFuZEJveGVkXSkKICAgICAgOiB0aGlzLl90eXBlcyA9IF9pbmZlcnJlci50eXBlcywKICAgICAgICB0aGlzLl9tZW1iZXJEYXRhID0gX2luZmVycmVyLmRhdGFPZk1lbWJlcihfYW5hbHl6ZWRNZW1iZXIpLAogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCBzaWRlIGVmZmVjdHMgYWxzbyBiZSB0cmFja2VkIGZvciBmaWVsZAogICAgICAgIC8vIGluaXRpYWxpemVycz8KICAgICAgICB0aGlzLl9zaWRlRWZmZWN0c0J1aWxkZXIgPSBfYW5hbHl6ZWRNZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkKICAgICAgICAgICAgPyBfaW5mZXJyZXIuaW5mZXJyZWREYXRhQnVpbGRlcgogICAgICAgICAgICAgICAgLmdldFNpZGVFZmZlY3RzQnVpbGRlcihfYW5hbHl6ZWRNZW1iZXIpCiAgICAgICAgICAgIDogbmV3IFNpZGVFZmZlY3RzQnVpbGRlci5mcmVlKF9hbmFseXplZE1lbWJlciksCiAgICAgICAgdGhpcy5faW5HZW5lcmF0aXZlQ29uc3RydWN0b3IgPSBfYW5hbHl6ZWROb2RlIGlzIGlyLkNvbnN0cnVjdG9yLAogICAgICAgIHRoaXMuX2NhcHR1cmVkQW5kQm94ZWQgPSBjYXB0dXJlZEFuZEJveGVkICE9IG51bGwKICAgICAgICAgICAgPyBuZXcgTWFwPExvY2FsLCBGaWVsZEVudGl0eT4uZnJvbShjYXB0dXJlZEFuZEJveGVkKQogICAgICAgICAgICA6IDxMb2NhbCwgRmllbGRFbnRpdHk+e30gewogICAgaWYgKF9zdGF0ZSAhPSBudWxsKSByZXR1cm47CgogICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuaW5pdGlhbCgKICAgICAgICBpbkdlbmVyYXRpdmVDb25zdHJ1Y3RvcjogX2luR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKTsKICB9CgogIEpzVG9FbGVtZW50TWFwIGdldCBfZWxlbWVudE1hcCA9PiBfY2xvc2VkV29ybGQuZWxlbWVudE1hcDsKCiAgQ2xvc3VyZURhdGEgZ2V0IF9jbG9zdXJlRGF0YUxvb2t1cCA9PiBfY2xvc2VkV29ybGQuY2xvc3VyZURhdGFMb29rdXA7CgogIERhcnRUeXBlIF9nZXRTdGF0aWNUeXBlKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldERhcnRUeXBlKF9zdGF0aWNUeXBlUHJvdmlkZXIuZ2V0U3RhdGljVHlwZShub2RlKSk7CiAgfQoKICBpbnQgX2xvb3BMZXZlbCA9IDA7CgogIGJvb2wgZ2V0IGluTG9vcCA9PiBfbG9vcExldmVsID4gMDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGlzIGRlZmluZWQgaW4gYSBzdWJjbGFzcyBvZiB0aGUgY3VycmVudCB0aGlzCiAgLy8vIHR5cGUuCiAgYm9vbCBfaXNJbkNsYXNzT3JTdWJjbGFzcyhNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJUaGlzVHlwZShfYW5hbHl6ZWRNZW1iZXIpPy5lbGVtZW50OwogICAgaWYgKGNscyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihtZW1iZXIuZW5jbG9zaW5nQ2xhc3MsIGNscyk7CiAgfQoKICAvLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGFjY2VzcyBvciB1cGRhdGUgb2YgW3NlbGVjdG9yXSBvbiBbbWFza10gcG90ZW50aWFsbHkKICAvLy8gZXhwb3NlcyBgdGhpc2AuCiAgLy8vCiAgLy8vIElmIGFsbCBtYXRjaGluZyBtZW1iZXJzIGFyZSBpbnN0YW5jZSBmaWVsZHMgb24gdGhlIGN1cnJlbnQgYHRoaXNgCiAgLy8vIGNsYXNzIG9yIHN1YmNsYXNzZXMsIGB0aGlzYCBpcyBub3QgY29uc2lkZXJlZCB0byBiZSBleHBvc2VkLgogIC8vLwogIC8vLyBJZiBhbiBpbnN0YW5jZSBmaWVsZCBtYXRjaGVkIHdpdGggYSBbc2VsZWN0b3JdIHRoYXQgaXMgX25vdF8gYSBzZXR0ZXIsIHRoZQogIC8vLyBmaWVsZCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgYmVlbiByZWFkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGZpZWxkCiAgLy8vIGlzIGFzc3VtZWQgdG8gYmUgcG90ZW50aWFsbHkgYG51bGxgLgogIHZvaWQgX2NoZWNrSWZFeHBvc2VzVGhpcyhTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICBpZiAoX3N0YXRlLmlzVGhpc0V4cG9zZWQpIHsKICAgICAgLy8gV2UgYWxyZWFkeSBjb25zaWRlciBgdGhpc2AgdG8gaGF2ZSBiZWVuIGV4cG9zZWQuCiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfaW5mZXJyZXIuY2xvc2VkV29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbChzZWxlY3RvciwgbWFzaykpIHsKICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBpZiB3ZSBrbmV3IHdoYXQgd2UKICAgICAgLy8gYXJlIGNhbGxpbmcgZG9lcyBub3QgZXhwb3NlIHRoaXMuCiAgICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwogICAgfSBlbHNlIHsKICAgICAgX2luZmVycmVyLmZvckVhY2hFbGVtZW50TWF0Y2hpbmcoc2VsZWN0b3IsIG1hc2ssIChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgICAgICBGaWVsZEVudGl0eSBmaWVsZCA9IGVsZW1lbnQ7CiAgICAgICAgICBpZiAoIXNlbGVjdG9yLmlzU2V0dGVyICYmCiAgICAgICAgICAgICAgX2lzSW5DbGFzc09yU3ViY2xhc3MoZmllbGQpICYmCiAgICAgICAgICAgICAgZmllbGQuaXNBc3NpZ25hYmxlICYmCiAgICAgICAgICAgICAgX3N0YXRlLnJlYWRGaWVsZChmaWVsZCkgPT0gbnVsbCAmJgogICAgICAgICAgICAgIGdldEZpZWxkSW5pdGlhbGl6ZXIoX2VsZW1lbnRNYXAsIGZpZWxkKSA9PSBudWxsKSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBmaWVsZCBpcyBiZWluZyB1c2VkIGJlZm9yZSB0aGlzIGNvbnN0cnVjdG9yCiAgICAgICAgICAgIC8vIGFjdHVhbGx5IGhhZCBhIGNoYW5jZSB0byBpbml0aWFsaXplIGl0LCBzYXkgaXQgY2FuIGJlCiAgICAgICAgICAgIC8vIG51bGwuCiAgICAgICAgICAgIF9pbmZlcnJlci5yZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgX3R5cGVzLm51bGxUeXBlKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIEFjY2Vzc2luZyBhIGZpZWxkIGRvZXMgbm90IGV4cG9zZSBgdGhpc2AuCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBpZiB3ZSBrbmV3IHdoYXQgd2UKICAgICAgICAvLyBhcmUgY2FsbGluZyBkb2VzIG5vdCBleHBvc2UgdGhpcy4KICAgICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0pOwogICAgfQogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHJ1bigpIHsKICAgIGlmIChfYW5hbHl6ZWRNZW1iZXIuaXNGaWVsZCkgewogICAgICBpZiAoX2FuYWx5emVkTm9kZSA9PSBudWxsIHx8IF9hbmFseXplZE5vZGUgaXMgaXIuTnVsbExpdGVyYWwpIHsKICAgICAgICAvLyBFYWdlcmx5IGJhaWxvdXQsIGJlY2F1c2UgY29tcHV0aW5nIHRoZSBjbG9zdXJlIGRhdGEgb25seQogICAgICAgIC8vIHdvcmtzIGZvciBmdW5jdGlvbnMgYW5kIGZpZWxkIGFzc2lnbm1lbnRzLgogICAgICAgIHJldHVybiBfdHlwZXMubnVsbFR5cGU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBVcGRhdGUgdGhlIGxvY2FscyB0aGF0IGFyZSBib3hlZCBpbiBbbG9jYWxzXS4gVGhlc2UgbG9jYWxzIHdpbGwKICAgIC8vIGJlIGhhbmRsZWQgc3BlY2lhbGx5LCBpbiB0aGF0IHdlIGFyZSBjb21wdXRpbmcgdGhlaXIgTFVCIGF0CiAgICAvLyBlYWNoIHVwZGF0ZSwgYW5kIHJlYWRpbmcgdGhlbSB5aWVsZHMgdGhlIHR5cGUgdGhhdCB3YXMgZm91bmQgaW4gYQogICAgLy8gcHJldmlvdXMgYW5hbHlzaXMgb2YgW291dGVybW9zdEVsZW1lbnRdLgogICAgU2NvcGVJbmZvIHNjb3BlSW5mbyA9IF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRTY29wZUluZm8oX2FuYWx5emVkTWVtYmVyKTsKICAgIHNjb3BlSW5mby5mb3JFYWNoQm94ZWRWYXJpYWJsZSgodmFyaWFibGUsIGZpZWxkKSB7CiAgICAgIF9jYXB0dXJlZEFuZEJveGVkW3ZhcmlhYmxlXSA9IGZpZWxkOwogICAgfSk7CgogICAgcmV0dXJuIHZpc2l0KF9hbmFseXplZE5vZGUpOwogIH0KCiAgYm9vbCBpc0luY29tcGF0aWJsZUludm9rZShGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzKSB7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlOwoKICAgIHJldHVybiBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPAogICAgICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmUucmVxdWlyZWRQYXJhbWV0ZXJzIHx8CiAgICAgICAgYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID4gcGFyYW1ldGVyU3RydWN0dXJlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzIHx8CiAgICAgICAgYXJndW1lbnRzLm5hbWVkLmtleXMKICAgICAgICAgICAgLmFueSgobmFtZSkgPT4gIXBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuY29udGFpbnMobmFtZSkpOwogIH0KCiAgdm9pZCByZWNvcmRSZXR1cm5UeXBlKFR5cGVJbmZvcm1hdGlvbiB0eXBlKSB7CiAgICBGdW5jdGlvbkVudGl0eSBhbmFseXplZE1ldGhvZCA9IF9hbmFseXplZE1lbWJlcjsKICAgIF9yZXR1cm5UeXBlID0KICAgICAgICBfaW5mZXJyZXIuYWRkUmV0dXJuVHlwZUZvck1ldGhvZChhbmFseXplZE1ldGhvZCwgX3JldHVyblR5cGUsIHR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIF90aGlzVHlwZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IHRoaXNUeXBlIHsKICAgIGlmIChfdGhpc1R5cGUgIT0gbnVsbCkgcmV0dXJuIF90aGlzVHlwZTsKICAgIENsYXNzRW50aXR5IGNscyA9IF9lbGVtZW50TWFwLmdldE1lbWJlclRoaXNUeXBlKF9hbmFseXplZE1lbWJlcik/LmVsZW1lbnQ7CiAgICBpZiAoX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oY2xzKSkgewogICAgICByZXR1cm4gX3RoaXNUeXBlID0gX3R5cGVzLm5vbk51bGxTdWJ0eXBlKGNscyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3RoaXNUeXBlID0gX3R5cGVzLm5vbk51bGxTdWJjbGFzcyhjbHMpOwogICAgfQogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0KGlyLk5vZGUgbm9kZSwge2Jvb2wgY29uZGl0aW9uQ29udGV4dDogZmFsc2V9KSB7CiAgICB2YXIgb2xkQWNjdW11bGF0ZUlzQ2hlY2tzID0gX2FjY3VtdWxhdGVJc0NoZWNrczsKICAgIF9hY2N1bXVsYXRlSXNDaGVja3MgPSBjb25kaXRpb25Db250ZXh0OwogICAgdmFyIHJlc3VsdCA9IG5vZGU/LmFjY2VwdCh0aGlzKTsKICAgIF9hY2N1bXVsYXRlSXNDaGVja3MgPSBvbGRBY2N1bXVsYXRlSXNDaGVja3M7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCB2aXNpdExpc3QoTGlzdDxpci5Ob2RlPiBub2RlcykgewogICAgaWYgKG5vZGVzID09IG51bGwpIHJldHVybjsKICAgIG5vZGVzLmZvckVhY2godmlzaXQpOwogIH0KCiAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLCB7Ym9vbCBpc09wdGlvbmFsfSkgewogICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZSk7CiAgICBEYXJ0VHlwZSB0eXBlID0gX2xvY2Fsc01hcC5nZXRMb2NhbFR5cGUoX2VsZW1lbnRNYXAsIGxvY2FsKTsKICAgIF9zdGF0ZS51cGRhdGVMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwKICAgICAgICBfaW5mZXJyZXIudHlwZU9mUGFyYW1ldGVyKGxvY2FsKSwgbm9kZSwgdHlwZSk7CiAgICBpZiAoaXNPcHRpb25hbCkgewogICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZTsKICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIHR5cGUgPSB2aXNpdChub2RlLmluaXRpYWxpemVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlID0gX3R5cGVzLm51bGxUeXBlOwogICAgICB9CiAgICAgIF9pbmZlcnJlci5zZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyKGxvY2FsLCB0eXBlLAogICAgICAgICAgaXNJbnN0YW5jZU1lbWJlcjogX2FuYWx5emVkTWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Q29uc3RydWN0b3IoaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgaGFuZGxlUGFyYW1ldGVycyhub2RlLmZ1bmN0aW9uKTsKICAgIG5vZGUuaW5pdGlhbGl6ZXJzLmZvckVhY2godmlzaXQpOwogICAgdmlzaXQobm9kZS5mdW5jdGlvbi5ib2R5KTsKCiAgICBDbGFzc0VudGl0eSBjbHMgPSBfYW5hbHl6ZWRNZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAoIShub2RlLmluaXRpYWxpemVycy5pc05vdEVtcHR5ICYmCiAgICAgICAgbm9kZS5pbml0aWFsaXplcnMuZmlyc3QgaXMgaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplcikpIHsKICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBpbnN0YW5jZSBmaWVsZHMsIGFuZCBnaXZlIGEgbnVsbCB0eXBlIHRvCiAgICAgIC8vIGZpZWxkcyB0aGF0IHdlIGhhdmVuJ3QgaW5pdGlhbGl6ZWQgZm9yIHN1cmUuCiAgICAgIF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbHMsCiAgICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCAmJiBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciAmJiBtZW1iZXIuaXNBc3NpZ25hYmxlKSB7CiAgICAgICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9IF9zdGF0ZS5yZWFkRmllbGQobWVtYmVyKTsKICAgICAgICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24obWVtYmVyKTsKICAgICAgICAgIGFzc2VydChkZWZpbml0aW9uLmtpbmQgPT0gTWVtYmVyS2luZC5yZWd1bGFyKTsKICAgICAgICAgIGlyLkZpZWxkIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgICBpZiAodHlwZSA9PSBudWxsICYmCiAgICAgICAgICAgICAgKG5vZGUuaW5pdGlhbGl6ZXIgPT0gbnVsbCB8fAogICAgICAgICAgICAgICAgICBub2RlLmluaXRpYWxpemVyIGlzIGlyLk51bGxMaXRlcmFsKSkgewogICAgICAgICAgICBfaW5mZXJyZXIucmVjb3JkVHlwZU9mRmllbGQobWVtYmVyLCBfdHlwZXMubnVsbFR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBfaW5mZXJyZXIucmVjb3JkRXhwb3Nlc1RoaXMoX2FuYWx5emVkTWVtYmVyLCBfc3RhdGUuaXNUaGlzRXhwb3NlZCk7CgogICAgaWYgKGNscy5pc0Fic3RyYWN0KSB7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoY2xzKSkgewogICAgICAgIF9yZXR1cm5UeXBlID0gX3R5cGVzLm5vbk51bGxTdWJjbGFzcyhjbHMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIGFuYWx5emluZyBbX2FuYWx5emVkTWVtYmVyXSBpbiB0aGlzCiAgICAgICAgLy8gY2FzZTsgaXQncyBuZXZlciBjYWxsZWQuCiAgICAgICAgX3JldHVyblR5cGUgPSBfdHlwZXMubm9uTnVsbEVtcHR5KCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIF9yZXR1cm5UeXBlID0gX3R5cGVzLm5vbk51bGxFeGFjdChjbHMpOwogICAgfQogICAgYXNzZXJ0KF9icmVha3NGb3IuaXNFbXB0eSk7CiAgICBhc3NlcnQoX2NvbnRpbnVlc0Zvci5pc0VtcHR5KTsKICAgIHJldHVybiBfcmV0dXJuVHlwZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RmllbGRJbml0aWFsaXplcihpci5GaWVsZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByaHNUeXBlID0gdmlzaXQobm9kZS52YWx1ZSk7CiAgICBGaWVsZEVudGl0eSBmaWVsZCA9IF9lbGVtZW50TWFwLmdldEZpZWxkKG5vZGUuZmllbGQpOwogICAgX3N0YXRlLnVwZGF0ZUZpZWxkKGZpZWxkLCByaHNUeXBlKTsKICAgIF9pbmZlcnJlci5yZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgcmhzVHlwZSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3VwZXJJbml0aWFsaXplcihpci5TdXBlckluaXRpYWxpemVyIG5vZGUpIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3Iobm9kZS50YXJnZXQpOwogICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzID0gYW5hbHl6ZUFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuQ0FMTCwgY29uc3RydWN0b3IubWVtYmVyTmFtZSwKICAgICAgICBfZWxlbWVudE1hcC5nZXRDYWxsU3RydWN0dXJlKG5vZGUuYXJndW1lbnRzKSk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwogICAgaGFuZGxlQ29uc3RydWN0b3JJbnZva2UoCiAgICAgICAgbm9kZSwgbm9kZS5hcmd1bWVudHMsIHNlbGVjdG9yLCBtYXNrLCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzKTsKCiAgICBfaW5mZXJyZXIuYW5hbHl6ZShjb25zdHJ1Y3Rvcik7CiAgICBpZiAoX2luZmVycmVyLmNoZWNrSWZFeHBvc2VzVGhpcyhjb25zdHJ1Y3RvcikpIHsKICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UmVkaXJlY3RpbmdJbml0aWFsaXplcihpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyIG5vZGUpIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3Iobm9kZS50YXJnZXQpOwogICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzID0gYW5hbHl6ZUFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuQ0FMTCwgY29uc3RydWN0b3IubWVtYmVyTmFtZSwKICAgICAgICBfZWxlbWVudE1hcC5nZXRDYWxsU3RydWN0dXJlKG5vZGUuYXJndW1lbnRzKSk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwogICAgaGFuZGxlQ29uc3RydWN0b3JJbnZva2UoCiAgICAgICAgbm9kZSwgbm9kZS5hcmd1bWVudHMsIHNlbGVjdG9yLCBtYXNrLCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzKTsKCiAgICBfaW5mZXJyZXIuYW5hbHl6ZShjb25zdHJ1Y3Rvcik7CiAgICBpZiAoX2luZmVycmVyLmNoZWNrSWZFeHBvc2VzVGhpcyhjb25zdHJ1Y3RvcikpIHsKICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TG9jYWxJbml0aWFsaXplcihpci5Mb2NhbEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUudmFyaWFibGUpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIGhhbmRsZVBhcmFtZXRlcnMoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGludCBwb3NpdGlvbiA9IDA7CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgaGFuZGxlUGFyYW1ldGVyKHBhcmFtZXRlciwKICAgICAgICAgIGlzT3B0aW9uYWw6IHBvc2l0aW9uID49IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICAgIHBvc2l0aW9uKys7CiAgICB9CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIGhhbmRsZVBhcmFtZXRlcihwYXJhbWV0ZXIsIGlzT3B0aW9uYWw6IHRydWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0RnVuY3Rpb25Ob2RlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBoYW5kbGVQYXJhbWV0ZXJzKG5vZGUpOwoKICAgIGlmIChfY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihfYW5hbHl6ZWRNZW1iZXIpKSB7CiAgICAgIC8vIE5hdGl2ZSBtZXRob2RzIGRvIG5vdCBoYXZlIGEgYm9keSwgYW5kIHdlIGN1cnJlbnRseSBqdXN0IHNheQogICAgICAvLyB0aGV5IHJldHVybiBkeW5hbWljLgogICAgICByZXR1cm4gX3R5cGVzLmR5bmFtaWNUeXBlOwogICAgfQoKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICBzd2l0Y2ggKG5vZGUuYXN5bmNNYXJrZXIpIHsKICAgICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jOgogICAgICAgIGlmIChfcmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgICAgICAvLyBObyByZXR1cm4gaW4gdGhlIGJvZHkuCiAgICAgICAgICBfcmV0dXJuVHlwZSA9IF9zdGF0ZS5zZWVuUmV0dXJuT3JUaHJvdwogICAgICAgICAgICAgID8gX3R5cGVzLm5vbk51bGxFbXB0eSgpIC8vIEJvZHkgYWx3YXlzIHRocm93cy4KICAgICAgICAgICAgICA6IF90eXBlcy5udWxsVHlwZTsKICAgICAgICB9IGVsc2UgaWYgKCFfc3RhdGUuc2VlblJldHVybk9yVGhyb3cpIHsKICAgICAgICAgIC8vIFdlIGhhdmVuJ1R5cGVJbmZvcm1hdGlvbiBzZWVuIHJldHVybnMgb24gYWxsIGJyYW5jaGVzLiBTbyB0aGUKICAgICAgICAgIC8vIG1ldGhvZCBtYXkgYWxzbyByZXR1cm4gbnVsbC4KICAgICAgICAgIHJlY29yZFJldHVyblR5cGUoX3R5cGVzLm51bGxUeXBlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmNTdGFyOgogICAgICAgIC8vIFRPRE8oYXNnZXJmKTogTWF5YmUgbWFrZSBhIENvbnRhaW5lclR5cGVNYXNrIGZvciB0aGVzZT8gVGhlIHR5cGUKICAgICAgICAvLyAgICAgICAgICAgICAgIGNvbnRhaW5lZCBpcyB0aGUgbWV0aG9kIGJvZHkncyByZXR1cm4gdHlwZS4KICAgICAgICByZWNvcmRSZXR1cm5UeXBlKF90eXBlcy5zeW5jU3Rhckl0ZXJhYmxlVHlwZSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jOgogICAgICAgIHJlY29yZFJldHVyblR5cGUoX3R5cGVzLmFzeW5jRnV0dXJlVHlwZSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jU3RhcjoKICAgICAgICByZWNvcmRSZXR1cm5UeXBlKF90eXBlcy5hc3luY1N0YXJTdHJlYW1UeXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jWWllbGRpbmc6CiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIF9hbmFseXplZE1lbWJlciwgIlVuZXhwZWN0ZWQgYXN5bmMgbWFya2VyOiAke25vZGUuYXN5bmNNYXJrZXJ9Iik7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBhc3NlcnQoX2JyZWFrc0Zvci5pc0VtcHR5KTsKICAgIGFzc2VydChfY29udGludWVzRm9yLmlzRW1wdHkpOwogICAgcmV0dXJuIF9yZXR1cm5UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SW5zdGFudGlhdGlvbihpci5JbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVJbnN0YW50aWF0aW9uVHlwZUluZm9ybWF0aW9uKHZpc2l0KG5vZGUuZXhwcmVzc2lvbikpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNyZWF0ZUluc3RhbnRpYXRpb25UeXBlSW5mb3JtYXRpb24oCiAgICAgIFR5cGVJbmZvcm1hdGlvbiBleHByZXNzaW9uVHlwZSkgewogICAgLy8gVE9ETyhzcmEpOiBBZGQgYSBUeXBlSW5mb3JtYXRpb24gZm9yIEluc3RhbnRpYXRpb25zLiAgSW5zdGFudGlhdGVkCiAgICAvLyBnZW5lcmljIG1ldGhvZHMgd2lsbCBuZWVkIHRvIGJlIHRyYWNlZCBzZXBhcmF0ZWx5LCBhbmQgaGF2ZSB0aGUKICAgIC8vIGluZm9ybWF0aW9uIGdhdGhlcmVkIGluIHRyYWNpbmcgcmVmbGVjdGVkIGJhY2sgdG8gdGhlIGdlbmVyaWMgbWV0aG9kLiBGb3IKICAgIC8vIG5vdywgcGFzcyBhbG9uZyB0aGUgdW5pbnN0YW50aWF0ZWQgbWV0aG9kLgogICAgcmV0dXJuIGV4cHJlc3Npb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIGRlZmF1bHRFeHByZXNzaW9uKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAnVW5oYW5kbGVkIGV4cHJlc3Npb246ICR7bm9kZX0gKCR7bm9kZS5ydW50aW1lVHlwZX0pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBkZWZhdWx0U3RhdGVtZW50KGlyLlN0YXRlbWVudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKAogICAgICAgICdVbmhhbmRsZWQgc3RhdGVtZW50OiAke25vZGV9ICgke25vZGUucnVudGltZVR5cGV9KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TnVsbExpdGVyYWwoaXIuTnVsbExpdGVyYWwgbGl0ZXJhbCkgewogICAgcmV0dXJuIGNyZWF0ZU51bGxUeXBlSW5mb3JtYXRpb24oKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVOdWxsVHlwZUluZm9ybWF0aW9uKCkgewogICAgcmV0dXJuIF90eXBlcy5udWxsVHlwZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmxvY2soaXIuQmxvY2sgYmxvY2spIHsKICAgIGZvciAoaXIuU3RhdGVtZW50IHN0YXRlbWVudCBpbiBibG9jay5zdGF0ZW1lbnRzKSB7CiAgICAgIHZpc2l0KHN0YXRlbWVudCk7CiAgICAgIGlmIChfc3RhdGUuYWJvcnRzKSBicmVhazsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KGlyLkV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRFbXB0eVN0YXRlbWVudChpci5FbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICAvLyBOb3RoaW5nIHRvIGRvLgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFzc2VydFN0YXRlbWVudChpci5Bc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgLy8gQXZvaWQgcG9sbHV0aW9uIGZyb20gYXNzZXJ0IHN0YXRlbWVudCB1bmxlc3MgZW5hYmxlZC4KICAgIGlmICghX29wdGlvbnMuZW5hYmxlVXNlckFzc2VydGlvbnMpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgYXNzZXJ0IGJlIHVzZWQgd2l0aCAtLXRydXN0LXR5cGUtYW5ub3RhdGlvbnM/CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUcmFjayByZWFjaGFibGUgZm9yIGFzc2VydGlvbnMga25vd24gdG8gZmFpbC4KICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICBoYW5kbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgTG9jYWxTdGF0ZSBhZnRlckNvbmRpdGlvbldoZW5UcnVlID0gX3N0YXRlQWZ0ZXJXaGVuVHJ1ZTsKICAgIExvY2FsU3RhdGUgYWZ0ZXJDb25kaXRpb25XaGVuRmFsc2UgPSBfc3RhdGVBZnRlcldoZW5GYWxzZTsKICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChhZnRlckNvbmRpdGlvbldoZW5GYWxzZSk7CiAgICB2aXNpdChub2RlLm1lc3NhZ2UpOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyTWVzc2FnZSA9IF9zdGF0ZTsKICAgIHN0YXRlQWZ0ZXJNZXNzYWdlLnNlZW5SZXR1cm5PclRocm93ID0gdHJ1ZTsKICAgIF9zdGF0ZSA9IHN0YXRlQmVmb3JlLm1lcmdlRGlhbW9uZEZsb3coCiAgICAgICAgX2luZmVycmVyLCBhZnRlckNvbmRpdGlvbldoZW5UcnVlLCBzdGF0ZUFmdGVyTWVzc2FnZSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QnJlYWtTdGF0ZW1lbnQoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JCcmVhayhub2RlKTsKICAgIF9zdGF0ZS5zZWVuQnJlYWtPckNvbnRpbnVlID0gdHJ1ZTsKICAgIC8vIERvIGEgZGVlcC1jb3B5IG9mIHRoZSBsb2NhbHMsIGJlY2F1c2UgdGhlIGNvZGUgZm9sbG93aW5nIHRoZQogICAgLy8gYnJlYWsgd2lsbCBjaGFuZ2UgdGhlbS4KICAgIGlmIChfbG9jYWxzTWFwLmdlbmVyYXRlQ29udGludWVGb3JCcmVhayhub2RlKSkgewogICAgICBfY29udGludWVzRm9yW3RhcmdldF0uYWRkKG5ldyBMb2NhbFN0YXRlLmRlZXBDb3B5T2YoX3N0YXRlKSk7CiAgICB9IGVsc2UgewogICAgICBfYnJlYWtzRm9yW3RhcmdldF0uYWRkKG5ldyBMb2NhbFN0YXRlLmRlZXBDb3B5T2YoX3N0YXRlKSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGFiZWxlZFN0YXRlbWVudChpci5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIGlyLlN0YXRlbWVudCBib2R5ID0gbm9kZS5ib2R5OwogICAgaWYgKEp1bXBWaXNpdG9yLmNhbkJlQnJlYWtUYXJnZXQoYm9keSkpIHsKICAgICAgLy8gTG9vcHMgYW5kIHN3aXRjaGVzIGhhbmRsZSB0aGVpciBvd24gbGFiZWxzLgogICAgICB2aXNpdChib2R5KTsKICAgIH0gZWxzZSB7CiAgICAgIEp1bXBUYXJnZXQganVtcFRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckxhYmVsKG5vZGUpOwogICAgICBfc2V0dXBCcmVha3NBbmRDb250aW51ZXMoanVtcFRhcmdldCk7CiAgICAgIHZpc2l0KGJvZHkpOwogICAgICBfc3RhdGUubWVyZ2VBZnRlckJyZWFrcyhfaW5mZXJyZXIsIF9nZXRCcmVha3MoanVtcFRhcmdldCkpOwogICAgICBfY2xlYXJCcmVha3NBbmRDb250aW51ZXMoanVtcFRhcmdldCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3dpdGNoU3RhdGVtZW50KGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwoKICAgIEp1bXBUYXJnZXQganVtcFRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvclN3aXRjaChub2RlKTsKICAgIF9zZXR1cEJyZWFrc0FuZENvbnRpbnVlcyhqdW1wVGFyZ2V0KTsKCiAgICBMaXN0PEp1bXBUYXJnZXQ+IGNvbnRpbnVlVGFyZ2V0cyA9IDxKdW1wVGFyZ2V0PltdOwogICAgZm9yIChpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gbm9kZS5jYXNlcykgewogICAgICBKdW1wVGFyZ2V0IGNvbnRpbnVlVGFyZ2V0ID0KICAgICAgICAgIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvclN3aXRjaENhc2Uoc3dpdGNoQ2FzZSk7CiAgICAgIGlmIChjb250aW51ZVRhcmdldCAhPSBudWxsKSB7CiAgICAgICAgY29udGludWVUYXJnZXRzLmFkZChjb250aW51ZVRhcmdldCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb250aW51ZVRhcmdldHMuaXNOb3RFbXB0eSkgewogICAgICBjb250aW51ZVRhcmdldHMuZm9yRWFjaChfc2V0dXBCcmVha3NBbmRDb250aW51ZXMpOwoKICAgICAgLy8gSWYgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaGFzIGEgY29udGludWUsIHdlIGNvbnNlcnZhdGl2ZWx5CiAgICAgIC8vIHZpc2l0IGFsbCBjYXNlcyBhbmQgdXBkYXRlIFtsb2NhbHNdIHVudGlsIHdlIGhhdmUgcmVhY2hlZCBhCiAgICAgIC8vIGZpeGVkIHBvaW50LgogICAgICBib29sIGNoYW5nZWQ7CiAgICAgIF9zdGF0ZS5zdGFydExvb3AoX2luZmVycmVyLCBub2RlKTsKICAgICAgZG8gewogICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICBmb3IgKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBub2RlLmNhc2VzKSB7CiAgICAgICAgICBMb2NhbFN0YXRlIHN0YXRlQmVmb3JlQ2FzZSA9IF9zdGF0ZTsKICAgICAgICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUJlZm9yZUNhc2UpOwogICAgICAgICAgdmlzaXQoc3dpdGNoQ2FzZSk7CiAgICAgICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJDYXNlID0gX3N0YXRlOwogICAgICAgICAgY2hhbmdlZCA9CiAgICAgICAgICAgICAgc3RhdGVCZWZvcmVDYXNlLm1lcmdlQWxsKF9pbmZlcnJlciwgW3N0YXRlQWZ0ZXJDYXNlXSkgfHwgY2hhbmdlZDsKICAgICAgICAgIF9zdGF0ZSA9IHN0YXRlQmVmb3JlQ2FzZTsKICAgICAgICB9CiAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwogICAgICBfc3RhdGUuZW5kTG9vcChfaW5mZXJyZXIsIG5vZGUpOwoKICAgICAgY29udGludWVUYXJnZXRzLmZvckVhY2goX2NsZWFyQnJlYWtzQW5kQ29udGludWVzKTsKICAgIH0gZWxzZSB7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmVDYXNlID0gX3N0YXRlOwogICAgICBMaXN0PExvY2FsU3RhdGU+IHN0YXRlc1RvTWVyZ2UgPSA8TG9jYWxTdGF0ZT5bXTsKICAgICAgYm9vbCBoYXNEZWZhdWx0Q2FzZSA9IGZhbHNlOwoKICAgICAgZm9yIChpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gbm9kZS5jYXNlcykgewogICAgICAgIGlmIChzd2l0Y2hDYXNlLmlzRGVmYXVsdCkgewogICAgICAgICAgaGFzRGVmYXVsdENhc2UgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVCZWZvcmVDYXNlKTsKICAgICAgICB2aXNpdChzd2l0Y2hDYXNlKTsKICAgICAgICBzdGF0ZXNUb01lcmdlLmFkZChfc3RhdGUpOwogICAgICB9CiAgICAgIHN0YXRlQmVmb3JlQ2FzZS5tZXJnZUFmdGVyQnJlYWtzKF9pbmZlcnJlciwgc3RhdGVzVG9NZXJnZSwKICAgICAgICAgIGtlZXBPd25Mb2NhbHM6ICFoYXNEZWZhdWx0Q2FzZSk7CiAgICAgIF9zdGF0ZSA9IHN0YXRlQmVmb3JlQ2FzZTsKICAgIH0KICAgIF9jbGVhckJyZWFrc0FuZENvbnRpbnVlcyhqdW1wVGFyZ2V0KTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugbm9kZSkgewogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckNvbnRpbnVlU3dpdGNoKG5vZGUpOwogICAgX3N0YXRlLnNlZW5CcmVha09yQ29udGludWUgPSB0cnVlOwogICAgLy8gRG8gYSBkZWVwLWNvcHkgb2YgdGhlIGxvY2FscywgYmVjYXVzZSB0aGUgY29kZSBmb2xsb3dpbmcgdGhlCiAgICAvLyBicmVhayB3aWxsIGNoYW5nZSB0aGVtLgogICAgX2NvbnRpbnVlc0Zvclt0YXJnZXRdLmFkZChuZXcgTG9jYWxTdGF0ZS5kZWVwQ29weU9mKF9zdGF0ZSkpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY3JlYXRlTGlzdFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBub2RlLCBub2RlLmV4cHJlc3Npb25zLm1hcCgoZSkgPT4gdmlzaXQoZSkpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlTGlzdFR5cGVJbmZvcm1hdGlvbigKICAgICAgaXIuVHJlZU5vZGUgbm9kZSwgSXRlcmFibGU8VHlwZUluZm9ybWF0aW9uPiBlbGVtZW50VHlwZXMsCiAgICAgIHtib29sIGlzQ29uc3R9KSB7CiAgICAvLyBXZSBvbmx5IHNldCB0aGUgdHlwZSBvbmNlLiBXZSBkb24ndCBuZWVkIHRvIHJlLXZpc2l0IHRoZSBjaGlsZHJlbgogICAgLy8gd2hlbiByZS1hbmFseXppbmcgdGhlIG5vZGUuCiAgICByZXR1cm4gX2luZmVycmVyLmNvbmNyZXRlVHlwZXMucHV0SWZBYnNlbnQobm9kZSwgKCkgewogICAgICBUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGU7CiAgICAgIGludCBsZW5ndGggPSAwOwogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiB0eXBlIGluIGVsZW1lbnRUeXBlcykgewogICAgICAgIGVsZW1lbnRUeXBlID0gZWxlbWVudFR5cGUgPT0gbnVsbAogICAgICAgICAgICA/IF90eXBlcy5hbGxvY2F0ZVBoaShudWxsLCBudWxsLCB0eXBlLCBpc1RyeTogZmFsc2UpCiAgICAgICAgICAgIDogX3R5cGVzLmFkZFBoaUlucHV0KG51bGwsIGVsZW1lbnRUeXBlLCB0eXBlKTsKICAgICAgICBsZW5ndGgrKzsKICAgICAgfQogICAgICBlbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlID09IG51bGwKICAgICAgICAgID8gX3R5cGVzLm5vbk51bGxFbXB0eSgpCiAgICAgICAgICA6IF90eXBlcy5zaW1wbGlmeVBoaShudWxsLCBudWxsLCBlbGVtZW50VHlwZSk7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBjb250YWluZXJUeXBlID0KICAgICAgICAgIGlzQ29uc3QgPyBfdHlwZXMuY29uc3RMaXN0VHlwZSA6IF90eXBlcy5ncm93YWJsZUxpc3RUeXBlOwogICAgICByZXR1cm4gX3R5cGVzLmFsbG9jYXRlTGlzdCgKICAgICAgICAgIGNvbnRhaW5lclR5cGUsIG5vZGUsIF9hbmFseXplZE1lbWJlciwgZWxlbWVudFR5cGUsIGxlbmd0aCk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFNldExpdGVyYWwoaXIuU2V0TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY3JlYXRlU2V0VHlwZUluZm9ybWF0aW9uKG5vZGUsIG5vZGUuZXhwcmVzc2lvbnMubWFwKChlKSA9PiB2aXNpdChlKSksCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVTZXRUeXBlSW5mb3JtYXRpb24oCiAgICAgIGlyLlRyZWVOb2RlIG5vZGUsIEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gZWxlbWVudFR5cGVzLAogICAgICB7Ym9vbCBpc0NvbnN0fSkgewogICAgcmV0dXJuIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KG5vZGUsICgpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIGVsZW1lbnRUeXBlOwogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiB0eXBlIGluIGVsZW1lbnRUeXBlcykgewogICAgICAgIGVsZW1lbnRUeXBlID0gZWxlbWVudFR5cGUgPT0gbnVsbAogICAgICAgICAgICA/IF90eXBlcy5hbGxvY2F0ZVBoaShudWxsLCBudWxsLCB0eXBlLCBpc1RyeTogZmFsc2UpCiAgICAgICAgICAgIDogX3R5cGVzLmFkZFBoaUlucHV0KG51bGwsIGVsZW1lbnRUeXBlLCB0eXBlKTsKICAgICAgfQogICAgICBlbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlID09IG51bGwKICAgICAgICAgID8gX3R5cGVzLm5vbk51bGxFbXB0eSgpCiAgICAgICAgICA6IF90eXBlcy5zaW1wbGlmeVBoaShudWxsLCBudWxsLCBlbGVtZW50VHlwZSk7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBjb250YWluZXJUeXBlID0KICAgICAgICAgIGlzQ29uc3QgPyBfdHlwZXMuY29uc3RTZXRUeXBlIDogX3R5cGVzLnNldFR5cGU7CiAgICAgIHJldHVybiBfdHlwZXMuYWxsb2NhdGVTZXQoCiAgICAgICAgICBjb250YWluZXJUeXBlLCBub2RlLCBfYW5hbHl6ZWRNZW1iZXIsIGVsZW1lbnRUeXBlKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVNYXBUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgbm9kZSwgbm9kZS5lbnRyaWVzLm1hcCgoZSkgPT4gbmV3IFBhaXIodmlzaXQoZS5rZXkpLCB2aXNpdChlLnZhbHVlKSkpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlTWFwVHlwZUluZm9ybWF0aW9uKGlyLlRyZWVOb2RlIG5vZGUsCiAgICAgIEl0ZXJhYmxlPFBhaXI8VHlwZUluZm9ybWF0aW9uLCBUeXBlSW5mb3JtYXRpb24+PiBlbnRyeVR5cGVzLAogICAgICB7Ym9vbCBpc0NvbnN0fSkgewogICAgcmV0dXJuIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KG5vZGUsICgpIHsKICAgICAgTGlzdCBrZXlUeXBlcyA9IDxUeXBlSW5mb3JtYXRpb24+W107CiAgICAgIExpc3QgdmFsdWVUeXBlcyA9IDxUeXBlSW5mb3JtYXRpb24+W107CgogICAgICBmb3IgKFBhaXI8VHlwZUluZm9ybWF0aW9uLCBUeXBlSW5mb3JtYXRpb24+IGVudHJ5VHlwZSBpbiBlbnRyeVR5cGVzKSB7CiAgICAgICAga2V5VHlwZXMuYWRkKGVudHJ5VHlwZS5hKTsKICAgICAgICB2YWx1ZVR5cGVzLmFkZChlbnRyeVR5cGUuYik7CiAgICAgIH0KCiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0gaXNDb25zdCA/IF90eXBlcy5jb25zdE1hcFR5cGUgOiBfdHlwZXMubWFwVHlwZTsKICAgICAgcmV0dXJuIF90eXBlcy5hbGxvY2F0ZU1hcCgKICAgICAgICAgIHR5cGUsIG5vZGUsIF9hbmFseXplZE1lbWJlciwga2V5VHlwZXMsIHZhbHVlVHlwZXMpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRSZXR1cm5TdGF0ZW1lbnQoaXIuUmV0dXJuU3RhdGVtZW50IG5vZGUpIHsKICAgIGlyLk5vZGUgZXhwcmVzc2lvbiA9IG5vZGUuZXhwcmVzc2lvbjsKICAgIHJlY29yZFJldHVyblR5cGUoZXhwcmVzc2lvbiA9PSBudWxsID8gX3R5cGVzLm51bGxUeXBlIDogdmlzaXQoZXhwcmVzc2lvbikpOwogICAgX3N0YXRlLnNlZW5SZXR1cm5PclRocm93ID0gdHJ1ZTsKICAgIF9zdGF0ZS5tYXJrSW5pdGlhbGl6YXRpb25Bc0luZGVmaW5pdGUoKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Qm9vbExpdGVyYWwoaXIuQm9vbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZUJvb2xUeXBlSW5mb3JtYXRpb24obm9kZS52YWx1ZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlQm9vbFR5cGVJbmZvcm1hdGlvbihib29sIHZhbHVlKSB7CiAgICByZXR1cm4gX3R5cGVzLmJvb2xMaXRlcmFsVHlwZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRJbnRMaXRlcmFsKGlyLkludExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZUludFR5cGVJbmZvcm1hdGlvbihub2RlLnZhbHVlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVJbnRUeXBlSW5mb3JtYXRpb24oaW50IHZhbHVlKSB7CiAgICAvLyBUaGUgSmF2YVNjcmlwdCBiYWNrZW5kIG1heSB0dXJuIHRoaXMgbGl0ZXJhbCBpbnRvIGEgZG91YmxlIGF0CiAgICAvLyBydW50aW1lLgogICAgcmV0dXJuIF90eXBlcy5nZXRDb25jcmV0ZVR5cGVGb3IoX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudCgKICAgICAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludEZyb21JbnQodmFsdWUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXREb3VibGVMaXRlcmFsKGlyLkRvdWJsZUxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZURvdWJsZVR5cGVJbmZvcm1hdGlvbihub2RlLnZhbHVlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVEb3VibGVUeXBlSW5mb3JtYXRpb24oZG91YmxlIHZhbHVlKSB7CiAgICAvLyBUaGUgSmF2YVNjcmlwdCBiYWNrZW5kIG1heSB0dXJuIHRoaXMgbGl0ZXJhbCBpbnRvIGEgZG91YmxlIGF0CiAgICAvLyBydW50aW1lLgogICAgcmV0dXJuIF90eXBlcy5nZXRDb25jcmV0ZVR5cGVGb3IoX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudChjb25zdGFudF9zeXN0ZW0uY3JlYXRlRG91YmxlKHZhbHVlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVTdHJpbmdUeXBlSW5mb3JtYXRpb24obm9kZS52YWx1ZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlU3RyaW5nVHlwZUluZm9ybWF0aW9uKFN0cmluZyB2YWx1ZSkgewogICAgcmV0dXJuIF90eXBlcy5zdHJpbmdMaXRlcmFsVHlwZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKGlyLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgLy8gSW50ZXJwb2xhdGlvbiBjb3VsZCBoYXZlIGFueSBlZmZlY3RzIHNpbmNlIGl0IGNvdWxkIGNhbGwgYW55IHRvU3RyaW5nKCkKICAgIC8vIG1ldGhvZC4KICAgIC8vIFRPRE8oc3JhKTogVGhpcyBjb3VsZCBiZSBtb2RlbGxlZCBieSBhIGNhbGwgdG8gdG9TdHJpbmcoKSBidXQgd2l0aCBhCiAgICAvLyBndWFyYW50ZWVkIFN0cmluZyByZXR1cm4gdHlwZS4gIEludGVycG9sYXRpb24gb2Yga25vd24gdHlwZXMgd291bGQgZ2V0CiAgICAvLyBzcGVjaWFsaXplZCBlZmZlY3RzLiAgVGhpcyB3b3VsZCBub3QgY3VycmVudGx5IGJlIGVmZmVjdGl2ZSBzaW5jZSB0aGUgSlMKICAgIC8vIGNvZGUgaW4gdGhlIHRvU3RyaW5nIG1ldGhvZHMgZm9yIGludGVyY2VwdGVkIHByaW1pdGl2ZSB0eXBlcyBpcyBhc3N1bWVkCiAgICAvLyB0byBoYXZlIGFsbCBlZmZlY3RzLiAgRWZmZWN0IGFubm90YXRpb25zIG9uIEpTIGNvZGUgd291bGQgYmUgbmVlZGVkIHRvCiAgICAvLyBnZXQgdGhlIGJlbmVmaXQuCiAgICBfc2lkZUVmZmVjdHNCdWlsZGVyLnNldEFsbFNpZGVFZmZlY3RzKCk7CgogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgcmV0dXJuIF90eXBlcy5zdHJpbmdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3ltYm9sTGl0ZXJhbChpci5TeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVTeW1ib2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uKCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlU3ltYm9sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigpIHsKICAgIHJldHVybiBfdHlwZXMKICAgICAgICAubm9uTnVsbFN1YnR5cGUoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLnN5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZVR5cGVMaXRlcmFsSW5mb3JtYXRpb24oKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVUeXBlTGl0ZXJhbEluZm9ybWF0aW9uKCkgewogICAgcmV0dXJuIF90eXBlcy50eXBlVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgbm9kZS5wYXJlbnQgaXMhIGlyLkZ1bmN0aW9uTm9kZSwgIlVuZXhwZWN0ZWQgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLiIpOwogICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZSk7CiAgICBEYXJ0VHlwZSB0eXBlID0gX2xvY2Fsc01hcC5nZXRMb2NhbFR5cGUoX2VsZW1lbnRNYXAsIGxvY2FsKTsKICAgIGlmIChub2RlLmluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgX3N0YXRlLnVwZGF0ZUxvY2FsKAogICAgICAgICAgX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsIF90eXBlcy5udWxsVHlwZSwgbm9kZSwgdHlwZSk7CiAgICB9IGVsc2UgewogICAgICBfc3RhdGUudXBkYXRlTG9jYWwoX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsCiAgICAgICAgICB2aXNpdChub2RlLmluaXRpYWxpemVyKSwgbm9kZSwgdHlwZSk7CiAgICB9CiAgICBpZiAobm9kZS5pbml0aWFsaXplciBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VmFyaWFibGVHZXQoaXIuVmFyaWFibGVHZXQgbm9kZSkgewogICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZS52YXJpYWJsZSk7CiAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9CiAgICAgICAgX3N0YXRlLnJlYWRMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCk7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsLCAiTWlzc2luZyB0eXBlIGluZm9ybWF0aW9uIGZvciAkbG9jYWwuIik7CiAgICByZXR1cm4gdHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFZhcmlhYmxlU2V0KGlyLlZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByaHNUeXBlID0gdmlzaXQobm9kZS52YWx1ZSk7CiAgICBpZiAobm9kZS52YWx1ZSBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUudmFyaWFibGUpOwogICAgRGFydFR5cGUgdHlwZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxUeXBlKF9lbGVtZW50TWFwLCBsb2NhbCk7CiAgICBfc3RhdGUudXBkYXRlTG9jYWwoCiAgICAgICAgX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsIHJoc1R5cGUsIG5vZGUsIHR5cGUpOwogICAgcmV0dXJuIHJoc1R5cGU7CiAgfQoKICBBcmd1bWVudHNUeXBlcyBhbmFseXplQXJndW1lbnRzKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIExpc3Q8VHlwZUluZm9ybWF0aW9uPiBwb3NpdGlvbmFsID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKICAgIE1hcDxTdHJpbmcsIFR5cGVJbmZvcm1hdGlvbj4gbmFtZWQ7CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gYXJndW1lbnQgaW4gYXJndW1lbnRzLnBvc2l0aW9uYWwpIHsKICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBpZiB3ZSBrbmV3IHdoYXQgd2UKICAgICAgLy8gYXJlIGNhbGxpbmcgZG9lcyBub3QgZXhwb3NlIHRoaXMuCiAgICAgIGlmIChhcmd1bWVudCBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwogICAgICB9CiAgICAgIHBvc2l0aW9uYWwuYWRkKHZpc2l0KGFyZ3VtZW50KSk7CiAgICB9CiAgICBmb3IgKGlyLk5hbWVkRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgbmFtZWQgPz89IDxTdHJpbmcsIFR5cGVJbmZvcm1hdGlvbj57fTsKICAgICAgaXIuRXhwcmVzc2lvbiB2YWx1ZSA9IGFyZ3VtZW50LnZhbHVlOwogICAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlIGlmIHdlIGtuZXcgd2hhdCB3ZQogICAgICAvLyBhcmUgY2FsbGluZyBkb2VzIG5vdCBleHBvc2UgdGhpcy4KICAgICAgaWYgKHZhbHVlIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICAgIH0KICAgICAgbmFtZWRbYXJndW1lbnQubmFtZV0gPSB2aXNpdCh2YWx1ZSk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBBcmd1bWVudHNUeXBlcyhwb3NpdGlvbmFsLCBuYW1lZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRNZXRob2RJbnZvY2F0aW9uKGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CgogICAgaXIuVHJlZU5vZGUgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgaWYgKHJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0ICYmCiAgICAgICAgcmVjZWl2ZXIudmFyaWFibGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgLy8gVGhpcyBpcyBhbiBpbnZvY2F0aW9uIG9mIGEgbmFtZWQgbG9jYWwgZnVuY3Rpb24uCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cyA9IGFuYWx5emVBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGluZm8gPQogICAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwLmdldENsb3N1cmVJbmZvKHJlY2VpdmVyLnZhcmlhYmxlLnBhcmVudCk7CiAgICAgIGlmIChpc0luY29tcGF0aWJsZUludm9rZShpbmZvLmNhbGxNZXRob2QsIGFyZ3VtZW50cykpIHsKICAgICAgICByZXR1cm4gX3R5cGVzLmR5bmFtaWNUeXBlOwogICAgICB9CgogICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9CiAgICAgICAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGluZm8uY2FsbE1ldGhvZCwgYXJndW1lbnRzKTsKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgICBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGluZm8uY2FsbE1ldGhvZCk7CiAgICAgIGlmIChmdW5jdGlvblR5cGUucmV0dXJuVHlwZS5jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgLy8gVGhlIHJldHVybiB0eXBlIHZhcmllcyB3aXRoIHRoZSBjYWxsIHNpdGUgc28gd2UgbmFycm93IHRoZSBzdGF0aWMKICAgICAgICAvLyByZXR1cm4gdHlwZS4KICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICB9CiAgICAgIHJldHVybiB0eXBlOwogICAgfQoKICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUgPSB2aXNpdChyZWNlaXZlcik7CiAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMgPSBhbmFseXplQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIGlmIChzZWxlY3Rvci5uYW1lID09ICc9PScpIHsKICAgICAgaWYgKF90eXBlcy5pc051bGwocmVjZWl2ZXJUeXBlKSkgewogICAgICAgIC8vIG51bGwgPT0gbwogICAgICAgIF9wb3RlbnRpYWxseUFkZE51bGxDaGVjayhub2RlLCBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0KTsKICAgICAgICByZXR1cm4gX3R5cGVzLmJvb2xUeXBlOwogICAgICB9IGVsc2UgaWYgKF90eXBlcy5pc051bGwoYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pKSB7CiAgICAgICAgLy8gbyA9PSBudWxsCiAgICAgICAgX3BvdGVudGlhbGx5QWRkTnVsbENoZWNrKG5vZGUsIG5vZGUucmVjZWl2ZXIpOwogICAgICAgIHJldHVybiBfdHlwZXMuYm9vbFR5cGU7CiAgICAgIH0KICAgIH0KICAgIGlmIChub2RlLnJlY2VpdmVyIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgIF9jaGVja0lmRXhwb3Nlc1RoaXMoCiAgICAgICAgICBzZWxlY3RvciwgX3R5cGVzLm5ld1R5cGVkU2VsZWN0b3IocmVjZWl2ZXJUeXBlLCBtYXNrKSk7CiAgICB9CiAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9IGhhbmRsZUR5bmFtaWNJbnZva2UoCiAgICAgICAgQ2FsbFR5cGUuYWNjZXNzLCBub2RlLCBzZWxlY3RvciwgbWFzaywgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudHMpOwogICAgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCA9IG5vZGUuaW50ZXJmYWNlVGFyZ2V0OwogICAgaWYgKGludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgaXMgaXIuUHJvY2VkdXJlICYmCiAgICAgICAgICAoaW50ZXJmYWNlVGFyZ2V0LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5NZXRob2QgfHwKICAgICAgICAgICAgICBpbnRlcmZhY2VUYXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk9wZXJhdG9yKSkgewogICAgICAgIC8vIFB1bGwgdGhlIHR5cGUgZnJvbSBrZXJuZWwgKGluc3RlYWQgb2YgZnJvbSB0aGUgSi1tb2RlbCkgYmVjYXVzZSB0aGUKICAgICAgICAvLyBpbnRlcmZhY2UgdGFyZ2V0IG1pZ2h0IGJlIGFic3RyYWN0IGFuZCB0aGVyZWZvcmUgbm90IHBhcnQgb2YgdGhlCiAgICAgICAgLy8gSi1tb2RlbC4KICAgICAgICBpci5EYXJ0VHlwZSByZXR1cm5UeXBlID0gaW50ZXJmYWNlVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgICAgLy8gVGhlIHJldHVybiB0eXBlIHZhcmllcyB3aXRoIHRoZSBjYWxsIHNpdGUgc28gd2UgbmFycm93IHRoZSBzdGF0aWMKICAgICAgICAvLyByZXR1cm4gdHlwZS4KICAgICAgICBpZiAoY29udGFpbnNGcmVlVmFyaWFibGVzKHJldHVyblR5cGUpKSB7CiAgICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgaXMgdGhyb3duIGF3YXkgd2hlbiB1c2luZyBbVHlwZU1hc2tdczsgbmFycm93IHRvIHRoZQogICAgICAgIC8vIHN0YXRpYyByZXR1cm4gdHlwZS4KICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBXZSBkb24ndCBoYXZlIGEga25vd24gdGFyZ2V0IGJ1dCB0aGUgc3RhdGljIHR5cGUgaG9sZCBzb21lIGluZm9ybWF0aW9uCiAgICAgIC8vIGlmIGl0IGlzIGEgZnVuY3Rpb24gdHlwZS4KICAgICAgdHlwZSA9IF90eXBlcy5uYXJyb3dUeXBlKHR5cGUsIF9nZXRTdGF0aWNUeXBlKG5vZGUpKTsKICAgIH0KICAgIHJldHVybiB0eXBlOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIF9oYW5kbGVEeW5hbWljKAogICAgICBDYWxsVHlwZSBjYWxsVHlwZSwKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXJUeXBlLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMpIHsKICAgIGFzc2VydChyZWNlaXZlclR5cGUgIT0gbnVsbCk7CiAgICBpZiAoX3R5cGVzLnNlbGVjdG9yTmVlZHNVcGRhdGUocmVjZWl2ZXJUeXBlLCBtYXNrKSkgewogICAgICBtYXNrID0gcmVjZWl2ZXJUeXBlID09IF90eXBlcy5keW5hbWljVHlwZQogICAgICAgICAgPyBudWxsCiAgICAgICAgICA6IF90eXBlcy5uZXdUeXBlZFNlbGVjdG9yKHJlY2VpdmVyVHlwZSwgbWFzayk7CiAgICAgIF9pbmZlcnJlci51cGRhdGVTZWxlY3RvckluTWVtYmVyKAogICAgICAgICAgX2FuYWx5emVkTWVtYmVyLCBjYWxsVHlwZSwgbm9kZSwgc2VsZWN0b3IsIG1hc2spOwogICAgfQoKICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7CiAgICBpZiAobm9kZSBpcyBpci5NZXRob2RJbnZvY2F0aW9uICYmIG5vZGUucmVjZWl2ZXIgaXMgaXIuVmFyaWFibGVHZXQpIHsKICAgICAgaXIuVmFyaWFibGVHZXQgZ2V0ID0gbm9kZS5yZWNlaXZlcjsKICAgICAgdmFyaWFibGUgPSBnZXQudmFyaWFibGU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvcGVydHlHZXQgJiYgbm9kZS5yZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICBpci5WYXJpYWJsZUdldCBnZXQgPSBub2RlLnJlY2VpdmVyOwogICAgICB2YXJpYWJsZSA9IGdldC52YXJpYWJsZTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Qcm9wZXJ0eVNldCAmJiBub2RlLnJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0KSB7CiAgICAgIGlyLlZhcmlhYmxlR2V0IGdldCA9IG5vZGUucmVjZWl2ZXI7CiAgICAgIHZhcmlhYmxlID0gZ2V0LnZhcmlhYmxlOwogICAgfQoKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgaWYgKCFfY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnMobG9jYWwpKSB7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxUeXBlKF9lbGVtZW50TWFwLCBsb2NhbCk7CiAgICAgICAgX3N0YXRlLnVwZGF0ZUxvY2FsKAogICAgICAgICAgICBfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwgcmVjZWl2ZXJUeXBlLCBub2RlLCB0eXBlLAogICAgICAgICAgICBpc051bGxhYmxlOiBzZWxlY3Rvci5hcHBsaWVzVG9OdWxsV2l0aG91dFRocm93KCkpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIF9pbmZlcnJlci5yZWdpc3RlckNhbGxlZFNlbGVjdG9yKGNhbGxUeXBlLCBub2RlLCBzZWxlY3RvciwgbWFzaywKICAgICAgICByZWNlaXZlclR5cGUsIF9hbmFseXplZE1lbWJlciwgYXJndW1lbnRzLCBfc2lkZUVmZmVjdHNCdWlsZGVyLAogICAgICAgIGluTG9vcDogaW5Mb29wLCBpc0NvbmRpdGlvbmFsOiBmYWxzZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlRHluYW1pY0dldChpci5Ob2RlIG5vZGUsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUpIHsKICAgIHJldHVybiBfaGFuZGxlRHluYW1pYygKICAgICAgICBDYWxsVHlwZS5hY2Nlc3MsIG5vZGUsIHNlbGVjdG9yLCBtYXNrLCByZWNlaXZlclR5cGUsIG51bGwpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUR5bmFtaWNTZXQoCiAgICAgIGlyLk5vZGUgbm9kZSwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSwKICAgICAgVHlwZUluZm9ybWF0aW9uIHJoc1R5cGUpIHsKICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cyA9IG5ldyBBcmd1bWVudHNUeXBlcyhbcmhzVHlwZV0sIG51bGwpOwogICAgcmV0dXJuIF9oYW5kbGVEeW5hbWljKAogICAgICAgIENhbGxUeXBlLmFjY2Vzcywgbm9kZSwgc2VsZWN0b3IsIG1hc2ssIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRzKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVEeW5hbWljSW52b2tlKAogICAgICBDYWxsVHlwZSBjYWxsVHlwZSwKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXJUeXBlLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGFuZGxlRHluYW1pYygKICAgICAgICBjYWxsVHlwZSwgbm9kZSwgc2VsZWN0b3IsIG1hc2ssIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdExldChpci5MZXQgbm9kZSkgewogICAgdmlzaXQobm9kZS52YXJpYWJsZSk7CiAgICByZXR1cm4gdmlzaXQobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEJsb2NrRXhwcmVzc2lvbihpci5CbG9ja0V4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEZvckluU3RhdGVtZW50KGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChub2RlLml0ZXJhYmxlIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgIC8vIEFueSByZWFzb25hYmxlIGltcGxlbWVudGF0aW9uIG9mIGFuIGl0ZXJhdG9yIHdvdWxkIGV4cG9zZQogICAgICAvLyB0aGlzLCBzbyB3ZSBwbGF5IGl0IHNhZmUgYW5kIGFzc3VtZSBpdCB3aWxsLgogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KCiAgICBBYnN0cmFjdFZhbHVlIGN1cnJlbnRNYXNrOwogICAgQWJzdHJhY3RWYWx1ZSBtb3ZlTmV4dE1hc2s7CiAgICBUeXBlSW5mb3JtYXRpb24gaXRlcmF0b3JUeXBlOwogICAgaWYgKG5vZGUuaXNBc3luYykgewogICAgICBUeXBlSW5mb3JtYXRpb24gZXhwcmVzc2lvblR5cGUgPSB2aXNpdChub2RlLml0ZXJhYmxlKTsKCiAgICAgIGN1cnJlbnRNYXNrID0gX21lbWJlckRhdGEudHlwZU9mSXRlcmF0b3JDdXJyZW50KG5vZGUpOwogICAgICBtb3ZlTmV4dE1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZJdGVyYXRvck1vdmVOZXh0KG5vZGUpOwoKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPQogICAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLnN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3I7CgogICAgICAvLy8gU3ludGhlc2l6ZSBhIGNhbGwgdG8gdGhlIFtTdHJlYW1JdGVyYXRvcl0gY29uc3RydWN0b3IuCiAgICAgIGl0ZXJhdG9yVHlwZSA9IGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBudWxsLCBudWxsLCBjb25zdHJ1Y3RvciwKICAgICAgICAgIG5ldyBBcmd1bWVudHNUeXBlcyhbZXhwcmVzc2lvblR5cGVdLCBudWxsKSk7CiAgICB9IGVsc2UgewogICAgICBUeXBlSW5mb3JtYXRpb24gZXhwcmVzc2lvblR5cGUgPSB2aXNpdChub2RlLml0ZXJhYmxlKTsKICAgICAgU2VsZWN0b3IgaXRlcmF0b3JTZWxlY3RvciA9IFNlbGVjdG9ycy5pdGVyYXRvcjsKICAgICAgQWJzdHJhY3RWYWx1ZSBpdGVyYXRvck1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZJdGVyYXRvcihub2RlKTsKICAgICAgY3VycmVudE1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZJdGVyYXRvckN1cnJlbnQobm9kZSk7CiAgICAgIG1vdmVOZXh0TWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZkl0ZXJhdG9yTW92ZU5leHQobm9kZSk7CgogICAgICBpdGVyYXRvclR5cGUgPSBoYW5kbGVEeW5hbWljSW52b2tlKENhbGxUeXBlLmZvckluLCBub2RlLCBpdGVyYXRvclNlbGVjdG9yLAogICAgICAgICAgaXRlcmF0b3JNYXNrLCBleHByZXNzaW9uVHlwZSwgbmV3IEFyZ3VtZW50c1R5cGVzLmVtcHR5KCkpOwogICAgfQoKICAgIGhhbmRsZUR5bmFtaWNJbnZva2UoQ2FsbFR5cGUuZm9ySW4sIG5vZGUsIFNlbGVjdG9ycy5tb3ZlTmV4dCwgbW92ZU5leHRNYXNrLAogICAgICAgIGl0ZXJhdG9yVHlwZSwgbmV3IEFyZ3VtZW50c1R5cGVzLmVtcHR5KCkpOwogICAgVHlwZUluZm9ybWF0aW9uIGN1cnJlbnRUeXBlID0gaGFuZGxlRHluYW1pY0ludm9rZSgKICAgICAgICBDYWxsVHlwZS5mb3JJbiwKICAgICAgICBub2RlLAogICAgICAgIFNlbGVjdG9ycy5jdXJyZW50LAogICAgICAgIGN1cnJlbnRNYXNrLAogICAgICAgIGl0ZXJhdG9yVHlwZSwKICAgICAgICBuZXcgQXJndW1lbnRzVHlwZXMuZW1wdHkoKSk7CgogICAgTG9jYWwgdmFyaWFibGUgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZS52YXJpYWJsZSk7CiAgICBEYXJ0VHlwZSB2YXJpYWJsZVR5cGUgPSBfbG9jYWxzTWFwLmdldExvY2FsVHlwZShfZWxlbWVudE1hcCwgdmFyaWFibGUpOwogICAgX3N0YXRlLnVwZGF0ZUxvY2FsKF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIHZhcmlhYmxlLCBjdXJyZW50VHlwZSwKICAgICAgICBub2RlLnZhcmlhYmxlLCB2YXJpYWJsZVR5cGUpOwoKICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yRm9ySW4obm9kZSk7CiAgICByZXR1cm4gaGFuZGxlTG9vcChub2RlLCB0YXJnZXQsICgpIHsKICAgICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIH0pOwogIH0KCiAgdm9pZCBfc2V0dXBCcmVha3NBbmRDb250aW51ZXMoSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKHRhcmdldC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgIF9jb250aW51ZXNGb3JbdGFyZ2V0XSA9IDxMb2NhbFN0YXRlPltdOwogICAgfQogICAgaWYgKHRhcmdldC5pc0JyZWFrVGFyZ2V0KSB7CiAgICAgIF9icmVha3NGb3JbdGFyZ2V0XSA9IDxMb2NhbFN0YXRlPltdOwogICAgfQogIH0KCiAgdm9pZCBfY2xlYXJCcmVha3NBbmRDb250aW51ZXMoSnVtcFRhcmdldCBlbGVtZW50KSB7CiAgICBfY29udGludWVzRm9yLnJlbW92ZShlbGVtZW50KTsKICAgIF9icmVha3NGb3IucmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgTGlzdDxMb2NhbFN0YXRlPiBfZ2V0QnJlYWtzKEp1bXBUYXJnZXQgdGFyZ2V0KSB7CiAgICBMaXN0PExvY2FsU3RhdGU+IGxpc3QgPSA8TG9jYWxTdGF0ZT5bX3N0YXRlXTsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgcmV0dXJuIGxpc3Q7CiAgICBpZiAoIXRhcmdldC5pc0JyZWFrVGFyZ2V0KSByZXR1cm4gbGlzdDsKICAgIHJldHVybiBsaXN0Li5hZGRBbGwoX2JyZWFrc0Zvclt0YXJnZXRdKTsKICB9CgogIExpc3Q8TG9jYWxTdGF0ZT4gX2dldExvb3BCYWNrRWRnZXMoSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIExpc3Q8TG9jYWxTdGF0ZT4gbGlzdCA9IDxMb2NhbFN0YXRlPltfc3RhdGVdOwogICAgaWYgKHRhcmdldCA9PSBudWxsKSByZXR1cm4gbGlzdDsKICAgIGlmICghdGFyZ2V0LmlzQ29udGludWVUYXJnZXQpIHJldHVybiBsaXN0OwogICAgcmV0dXJuIGxpc3QuLmFkZEFsbChfY29udGludWVzRm9yW3RhcmdldF0pOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUxvb3AoaXIuTm9kZSBub2RlLCBKdW1wVGFyZ2V0IHRhcmdldCwgdm9pZCBsb2dpYygpKSB7CiAgICBfbG9vcExldmVsKys7CiAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICBzdGF0ZUJlZm9yZS5zdGFydExvb3AoX2luZmVycmVyLCBub2RlKTsKICAgIGRvIHsKICAgICAgLy8gU2V0dXAgKGFuZCBjbGVhciBpbiBjYXNlIG9mIG11bHRpcGxlIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3ApCiAgICAgIC8vIHRoZSBsaXN0cyBvZiBicmVha3MgYW5kIGNvbnRpbnVlcyBzZWVuIGluIHRoZSBsb29wLgogICAgICBfc2V0dXBCcmVha3NBbmRDb250aW51ZXModGFyZ2V0KTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQmVmb3JlKTsKICAgICAgbG9naWMoKTsKICAgICAgY2hhbmdlZCA9IHN0YXRlQmVmb3JlLm1lcmdlQWxsKF9pbmZlcnJlciwgX2dldExvb3BCYWNrRWRnZXModGFyZ2V0KSk7CiAgICB9IHdoaWxlIChjaGFuZ2VkKTsKICAgIF9sb29wTGV2ZWwtLTsKICAgIHN0YXRlQmVmb3JlLmVuZExvb3AoX2luZmVycmVyLCBub2RlKTsKICAgIGJvb2wga2VlcE93bkxvY2FscyA9IG5vZGUgaXMhIGlyLkRvU3RhdGVtZW50OwogICAgX3N0YXRlID0gc3RhdGVCZWZvcmUubWVyZ2VBZnRlckJyZWFrcyhfaW5mZXJyZXIsIF9nZXRCcmVha3ModGFyZ2V0KSwKICAgICAgICBrZWVwT3duTG9jYWxzOiBrZWVwT3duTG9jYWxzKTsKICAgIF9jbGVhckJyZWFrc0FuZENvbnRpbnVlcyh0YXJnZXQpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3Iobm9kZS50YXJnZXQpOwogICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzID0gYW5hbHl6ZUFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gX21lbWJlckRhdGEudHlwZU9mU2VuZChub2RlKTsKICAgIHJldHVybiBoYW5kbGVDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgICBub2RlLCBub2RlLmFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMpOwogIH0KCiAgLy8vIFRyeSB0byBmaW5kIHRoZSBsZW5ndGggZ2l2ZW4gdG8gYSBmaXhlZCBhcnJheSBjb25zdHJ1Y3RvciBjYWxsLgogIGludCBfZmluZExlbmd0aChpci5Bcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICBpbnQgZmluaXNoKGludCBsZW5ndGgpIHsKICAgICAgLy8gRmlsdGVyIG91dCBsZW5ndGhzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmFja2VkLgogICAgICBpZiAobGVuZ3RoIDwgMCkgcmV0dXJuIG51bGw7CiAgICAgIC8vIFNlcmlhbGl6YXRpb24gbGltaXQuCiAgICAgIGlmIChsZW5ndGggPj0gKDEgPDwgMzApKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIGxlbmd0aDsKICAgIH0KCiAgICBpci5FeHByZXNzaW9uIGZpcnN0QXJndW1lbnQgPSBhcmd1bWVudHMucG9zaXRpb25hbC5maXJzdDsKICAgIGlmIChmaXJzdEFyZ3VtZW50IGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbiAmJgogICAgICAgIGZpcnN0QXJndW1lbnQuY29uc3RhbnQgaXMgaXIuRG91YmxlQ29uc3RhbnQpIHsKICAgICAgaXIuRG91YmxlQ29uc3RhbnQgY29uc3RhbnQgPSBmaXJzdEFyZ3VtZW50LmNvbnN0YW50OwogICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBjb25zdGFudC52YWx1ZTsKICAgICAgaW50IHRydW5jYXRlZFZhbHVlID0gZG91YmxlVmFsdWUudHJ1bmNhdGUoKTsKICAgICAgaWYgKGRvdWJsZVZhbHVlID09IHRydW5jYXRlZFZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGZpbmlzaCh0cnVuY2F0ZWRWYWx1ZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZmlyc3RBcmd1bWVudCBpcyBpci5JbnRMaXRlcmFsKSB7CiAgICAgIHJldHVybiBmaW5pc2goZmlyc3RBcmd1bWVudC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGZpcnN0QXJndW1lbnQgaXMgaXIuU3RhdGljR2V0KSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIoZmlyc3RBcmd1bWVudC50YXJnZXQpOwogICAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPQogICAgICAgICAgICBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEobWVtYmVyKTsKICAgICAgICBpZiAoZmllbGREYXRhLmlzRWZmZWN0aXZlbHlDb25zdGFudCAmJiBmaWVsZERhdGEuY29uc3RhbnRWYWx1ZS5pc0ludCkgewogICAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRWYWx1ZSA9IGZpZWxkRGF0YS5jb25zdGFudFZhbHVlOwogICAgICAgICAgaWYgKGludFZhbHVlLmludFZhbHVlLmlzVmFsaWRJbnQpIHsKICAgICAgICAgICAgcmV0dXJuIGZpbmlzaChpbnRWYWx1ZS5pbnRWYWx1ZS50b0ludCgpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmCiAgYm9vbCBfaXNDb25zdHJ1Y3Rvck9mVHlwZWRBcnJheVN1YmNsYXNzKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKICAgIHJldHVybiBjbHMubGlicmFyeS5jYW5vbmljYWxVcmkgPT0gVXJpcy5kYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSAmJgogICAgICAgIF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSAmJgogICAgICAgIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeQogICAgICAgICAgICAuaXNTdWJ0eXBlT2YoY2xzLCBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMudHlwZWREYXRhQ2xhc3MpICYmCiAgICAgICAgX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgICAgIC5pc1N1YnR5cGVPZihjbHMsIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5saXN0Q2xhc3MpICYmCiAgICAgICAgY29uc3RydWN0b3IubmFtZSA9PSAnJzsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBpci5Bcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzVHlwZXMpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByZXR1cm5UeXBlID0KICAgICAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGNvbnN0cnVjdG9yLCBhcmd1bWVudHNUeXBlcyk7CiAgICBpZiAoX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMuaXNVbm5hbWVkTGlzdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSkgewogICAgICAvLyBXZSBoYXZlIGBuZXcgTGlzdCguLi4pYC4KICAgICAgaWYgKGFyZ3VtZW50cy5wb3NpdGlvbmFsLmlzRW1wdHkgJiYgYXJndW1lbnRzLm5hbWVkLmlzRW1wdHkpIHsKICAgICAgICAvLyBXZSBoYXZlIGBuZXcgTGlzdCgpYC4KICAgICAgICByZXR1cm4gX2luZmVycmVyLmNvbmNyZXRlVHlwZXMucHV0SWZBYnNlbnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICgpID0+IF90eXBlcy5hbGxvY2F0ZUxpc3QoX3R5cGVzLmdyb3dhYmxlTGlzdFR5cGUsIG5vZGUsCiAgICAgICAgICAgICAgICBfYW5hbHl6ZWRNZW1iZXIsIF90eXBlcy5ub25OdWxsRW1wdHkoKSwgMCkpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFdlIGhhdmUgYG5ldyBMaXN0KGxlbilgLgogICAgICAgIGludCBsZW5ndGggPSBfZmluZExlbmd0aChhcmd1bWVudHMpOwogICAgICAgIHJldHVybiBfaW5mZXJyZXIuY29uY3JldGVUeXBlcy5wdXRJZkFic2VudCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgKCkgPT4gX3R5cGVzLmFsbG9jYXRlTGlzdChfdHlwZXMuZml4ZWRMaXN0VHlwZSwgbm9kZSwKICAgICAgICAgICAgICAgIF9hbmFseXplZE1lbWJlciwgX3R5cGVzLm51bGxUeXBlLCBsZW5ndGgpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cwogICAgICAgIC5pc0ZpbGxlZExpc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikpIHsKICAgICAgLy8gV2UgaGF2ZSBgbmV3IFVpbnQzMkxpc3QobGVuLCBmaWxsKWAuCiAgICAgIGludCBsZW5ndGggPSBfZmluZExlbmd0aChhcmd1bWVudHMpOwogICAgICBUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGUgPSBhcmd1bWVudHNUeXBlcy5wb3NpdGlvbmFsWzFdOwoKICAgICAgcmV0dXJuIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KAogICAgICAgICAgbm9kZSwKICAgICAgICAgICgpID0+IF90eXBlcy5hbGxvY2F0ZUxpc3QoX3R5cGVzLmZpeGVkTGlzdFR5cGUsIG5vZGUsIF9hbmFseXplZE1lbWJlciwKICAgICAgICAgICAgICBlbGVtZW50VHlwZSwgbGVuZ3RoKSk7CiAgICB9IGVsc2UgaWYgKF9pc0NvbnN0cnVjdG9yT2ZUeXBlZEFycmF5U3ViY2xhc3MoY29uc3RydWN0b3IpKSB7CiAgICAgIC8vIFdlIGhhdmUgc29tZXRoaW5nIGxpa2UgYG5ldyBMaXN0LmZpbGxlZChsZW4sIGZpbGwpYC4KICAgICAgaW50IGxlbmd0aCA9IF9maW5kTGVuZ3RoKGFyZ3VtZW50cyk7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgIC5sb29rdXBDbGFzc01lbWJlcihjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcywgJ1tdJyk7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBlbGVtZW50VHlwZSA9IF9pbmZlcnJlci5yZXR1cm5UeXBlT2ZNZW1iZXIobWVtYmVyKTsKICAgICAgcmV0dXJuIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KAogICAgICAgICAgbm9kZSwKICAgICAgICAgICgpID0+IF90eXBlcy5hbGxvY2F0ZUxpc3QoCiAgICAgICAgICAgICAgX3R5cGVzLm5vbk51bGxFeGFjdChjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcyksCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICBfYW5hbHl6ZWRNZW1iZXIsCiAgICAgICAgICAgICAgZWxlbWVudFR5cGUsCiAgICAgICAgICAgICAgbGVuZ3RoKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcmV0dXJuVHlwZTsKICAgIH0KICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVTdGF0aWNJbnZva2UoaXIuTm9kZSBub2RlLCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBNZW1iZXJFbnRpdHkgZWxlbWVudCwgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2luZmVycmVyLnJlZ2lzdGVyQ2FsbGVkTWVtYmVyKG5vZGUsIHNlbGVjdG9yLCBtYXNrLCBfYW5hbHl6ZWRNZW1iZXIsCiAgICAgICAgZWxlbWVudCwgYXJndW1lbnRzLCBfc2lkZUVmZmVjdHNCdWlsZGVyLCBpbkxvb3ApOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUNsb3N1cmVDYWxsKGlyLk5vZGUgbm9kZSwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgTWVtYmVyRW50aXR5IG1lbWJlciwgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2luZmVycmVyLnJlZ2lzdGVyQ2FsbGVkQ2xvc3VyZSgKICAgICAgICBub2RlLAogICAgICAgIHNlbGVjdG9yLAogICAgICAgIG1hc2ssCiAgICAgICAgX2luZmVycmVyLnR5cGVPZk1lbWJlcihtZW1iZXIpLAogICAgICAgIF9hbmFseXplZE1lbWJlciwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgX3NpZGVFZmZlY3RzQnVpbGRlciwKICAgICAgICBpbkxvb3A6IGluTG9vcCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlRm9yZWlnbkludm9rZSgKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBub2RlLAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICBTdHJpbmcgbmFtZSA9IGZ1bmN0aW9uLm5hbWU7CiAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGZ1bmN0aW9uLCBhcmd1bWVudHMpOwogICAgaWYgKG5hbWUgPT0gSWRlbnRpZmllcnMuSlMpIHsKICAgICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IgPQogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0NhbGwobm9kZSk7CiAgICAgIF9zaWRlRWZmZWN0c0J1aWxkZXIuYWRkKG5hdGl2ZUJlaGF2aW9yLnNpZGVFZmZlY3RzKTsKICAgICAgcmV0dXJuIF9pbmZlcnJlci50eXBlT2ZOYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvcik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gSWRlbnRpZmllcnMuSlNfRU1CRURERURfR0xPQkFMKSB7CiAgICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0KICAgICAgICAgIF9lbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGwobm9kZSk7CiAgICAgIF9zaWRlRWZmZWN0c0J1aWxkZXIuYWRkKG5hdGl2ZUJlaGF2aW9yLnNpZGVFZmZlY3RzKTsKICAgICAgcmV0dXJuIF9pbmZlcnJlci50eXBlT2ZOYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvcik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gSWRlbnRpZmllcnMuSlNfQlVJTFRJTikgewogICAgICBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciA9CiAgICAgICAgICBfZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckpzQnVpbHRpbkNhbGwobm9kZSk7CiAgICAgIF9zaWRlRWZmZWN0c0J1aWxkZXIuYWRkKG5hdGl2ZUJlaGF2aW9yLnNpZGVFZmZlY3RzKTsKICAgICAgcmV0dXJuIF9pbmZlcnJlci50eXBlT2ZOYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvcik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gSWRlbnRpZmllcnMuSlNfU1RSSU5HX0NPTkNBVCkgewogICAgICByZXR1cm4gX3R5cGVzLnN0cmluZ1R5cGU7CiAgICB9IGVsc2UgewogICAgICBfc2lkZUVmZmVjdHNCdWlsZGVyLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICAgIHJldHVybiBfdHlwZXMuZHluYW1pY1R5cGU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlLnRhcmdldCk7CiAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMgPSBhbmFseXplQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwogICAgaWYgKF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pc0ZvcmVpZ24obWVtYmVyKSkgewogICAgICByZXR1cm4gaGFuZGxlRm9yZWlnbkludm9rZShub2RlLCBtZW1iZXIsIGFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2spOwogICAgfSBlbHNlIGlmIChtZW1iZXIuaXNDb25zdHJ1Y3RvcikgewogICAgICByZXR1cm4gaGFuZGxlQ29uc3RydWN0b3JJbnZva2UoCiAgICAgICAgICBub2RlLCBub2RlLmFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssIG1lbWJlciwgYXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChtZW1iZXIuaXNGdW5jdGlvbiwgIlVuZXhwZWN0ZWQgc3RhdGljIGludm9jYXRpb24gdGFyZ2V0OiAkbWVtYmVyIik7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0KICAgICAgICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgbWVtYmVyLCBhcmd1bWVudHMpOwogICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICAgIF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUobWVtYmVyKTsKICAgICAgaWYgKGZ1bmN0aW9uVHlwZS5yZXR1cm5UeXBlLmNvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgdmFyaWVzIHdpdGggdGhlIGNhbGwgc2l0ZSBzbyB3ZSBuYXJyb3cgdGhlIHN0YXRpYwogICAgICAgIC8vIHJldHVybiB0eXBlLgogICAgICAgIHR5cGUgPSBfdHlwZXMubmFycm93VHlwZSh0eXBlLCBfZ2V0U3RhdGljVHlwZShub2RlKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRMb2FkTGlicmFyeShpci5Mb2FkTGlicmFyeSBub2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHRoaXMgYnkgcmV0dXJuaW5nIGEgRnV0dXJlIHR5cGUgaW5zdGVhZC4KICAgIHJldHVybiBfdHlwZXMuZHluYW1pY1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUpIHsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBhc3NlcnQobWFzayA9PSBudWxsKTsKICAgIHJldHVybiBjcmVhdGVTdGF0aWNHZXRUeXBlSW5mb3JtYXRpb24obm9kZSwgbm9kZS50YXJnZXQsIG1hc2s6IG1hc2spOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNyZWF0ZVN0YXRpY0dldFR5cGVJbmZvcm1hdGlvbihpci5Ob2RlIG5vZGUsIGlyLk1lbWJlciB0YXJnZXQsCiAgICAgIHtBYnN0cmFjdFZhbHVlIG1hc2t9KSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKHRhcmdldCk7CiAgICByZXR1cm4gaGFuZGxlU3RhdGljSW52b2tlKAogICAgICAgIG5vZGUsIG5ldyBTZWxlY3Rvci5nZXR0ZXIobWVtYmVyLm1lbWJlck5hbWUpLCBtYXNrLCBtZW1iZXIsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3RhdGljU2V0KGlyLlN0YXRpY1NldCBub2RlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gcmhzVHlwZSA9IHZpc2l0KG5vZGUudmFsdWUpOwogICAgaWYgKG5vZGUudmFsdWUgaXMgaXIuVGhpc0V4cHJlc3Npb24pIHsKICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICB9CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUudGFyZ2V0KTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgbmV3IFNlbGVjdG9yLnNldHRlcihtZW1iZXIubWVtYmVyTmFtZSksIG1hc2ssCiAgICAgICAgbWVtYmVyLCBuZXcgQXJndW1lbnRzVHlwZXMoW3Joc1R5cGVdLCBudWxsKSk7CiAgICByZXR1cm4gcmhzVHlwZTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVQcm9wZXJ0eUdldCgKICAgICAgaXIuVHJlZU5vZGUgbm9kZSwgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSwgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCwKICAgICAge2Jvb2wgaXNUaGlzfSkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBpZiAoaXNUaGlzKSB7CiAgICAgIF9jaGVja0lmRXhwb3Nlc1RoaXMoCiAgICAgICAgICBzZWxlY3RvciwgX3R5cGVzLm5ld1R5cGVkU2VsZWN0b3IocmVjZWl2ZXJUeXBlLCBtYXNrKSk7CiAgICB9CiAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9IGhhbmRsZUR5bmFtaWNHZXQobm9kZSwgc2VsZWN0b3IsIG1hc2ssIHJlY2VpdmVyVHlwZSk7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgLy8gUHVsbCB0aGUgdHlwZSBmcm9tIGtlcm5lbCAoaW5zdGVhZCBvZiBmcm9tIHRoZSBKLW1vZGVsKSBiZWNhdXNlIHRoZQogICAgICAvLyBpbnRlcmZhY2UgdGFyZ2V0IG1pZ2h0IGJlIGFic3RyYWN0IGFuZCB0aGVyZWZvcmUgbm90IHBhcnQgb2YgdGhlCiAgICAgIC8vIEotbW9kZWwuCiAgICAgIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUgPSBpbnRlcmZhY2VUYXJnZXQuZ2V0dGVyVHlwZTsKICAgICAgLy8gVGhlIHJlc3VsdCB0eXBlIHZhcmllcyB3aXRoIHRoZSBjYWxsIHNpdGUgc28gd2UgbmFycm93IHRoZSBzdGF0aWMKICAgICAgLy8gcmVzdWx0IHR5cGUuCiAgICAgIGlmIChjb250YWluc0ZyZWVWYXJpYWJsZXMocmVzdWx0VHlwZSkpIHsKICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUgPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIHJldHVybiBoYW5kbGVQcm9wZXJ0eUdldChub2RlLCByZWNlaXZlclR5cGUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0LAogICAgICAgIGlzVGhpczogbm9kZS5yZWNlaXZlciBpcyBpci5UaGlzRXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXREaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXJUeXBlID0gdGhpc1R5cGU7CiAgICByZXR1cm4gaGFuZGxlUHJvcGVydHlHZXQobm9kZSwgcmVjZWl2ZXJUeXBlLCBub2RlLnRhcmdldCwgaXNUaGlzOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFByb3BlcnR5U2V0KGlyLlByb3BlcnR5U2V0IG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUgPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwoKICAgIFR5cGVJbmZvcm1hdGlvbiByaHNUeXBlID0gdmlzaXQobm9kZS52YWx1ZSk7CiAgICBpZiAobm9kZS52YWx1ZSBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KCiAgICBpZiAoX2luR2VuZXJhdGl2ZUNvbnN0cnVjdG9yICYmIG5vZGUucmVjZWl2ZXIgaXMgaXIuVGhpc0V4cHJlc3Npb24pIHsKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlZE1hc2sgPSBfdHlwZXMubmV3VHlwZWRTZWxlY3RvcihyZWNlaXZlclR5cGUsIG1hc2spOwogICAgICBpZiAoIV9jbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCB0eXBlZE1hc2spKSB7CiAgICAgICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiB0YXJnZXRzID0KICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoc2VsZWN0b3IsIHR5cGVkTWFzayk7CiAgICAgICAgLy8gV2UganVzdCByZWNvZ25pemVkIGEgZmllbGQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZvcm06CiAgICAgICAgLy8gYHRoaXMuZm9vID0gNDJgLiBJZiB0aGVyZSBpcyBvbmx5IG9uZSB0YXJnZXQsIHdlIGNhbiB1cGRhdGUKICAgICAgICAvLyBpdHMgdHlwZS4KICAgICAgICBpZiAodGFyZ2V0cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgTWVtYmVyRW50aXR5IHNpbmdsZSA9IHRhcmdldHMuZmlyc3Q7CiAgICAgICAgICBpZiAoc2luZ2xlLmlzRmllbGQpIHsKICAgICAgICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBzaW5nbGU7CiAgICAgICAgICAgIF9zdGF0ZS51cGRhdGVGaWVsZChmaWVsZCwgcmhzVHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAobm9kZS5yZWNlaXZlciBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBfY2hlY2tJZkV4cG9zZXNUaGlzKAogICAgICAgICAgc2VsZWN0b3IsIF90eXBlcy5uZXdUeXBlZFNlbGVjdG9yKHJlY2VpdmVyVHlwZSwgbWFzaykpOwogICAgfQogICAgaGFuZGxlRHluYW1pY1NldChub2RlLCBzZWxlY3RvciwgbWFzaywgcmVjZWl2ZXJUeXBlLCByaHNUeXBlKTsKICAgIHJldHVybiByaHNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VGhpc0V4cHJlc3Npb24oaXIuVGhpc0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHRoaXNUeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVDb25kaXRpb24oaXIuTm9kZSBub2RlKSB7CiAgICBib29sIG9sZEFjY3VtdWxhdGVJc0NoZWNrcyA9IF9hY2N1bXVsYXRlSXNDaGVja3M7CiAgICBfYWNjdW11bGF0ZUlzQ2hlY2tzID0gdHJ1ZTsKICAgIHZpc2l0KG5vZGUsIGNvbmRpdGlvbkNvbnRleHQ6IHRydWUpOwogICAgX2FjY3VtdWxhdGVJc0NoZWNrcyA9IG9sZEFjY3VtdWxhdGVJc0NoZWNrczsKICB9CgogIHZvaWQgX3BvdGVudGlhbGx5QWRkSXNDaGVjayhpci5Jc0V4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKCFfYWNjdW11bGF0ZUlzQ2hlY2tzKSByZXR1cm47CiAgICBpci5FeHByZXNzaW9uIG9wZXJhbmQgPSBub2RlLm9wZXJhbmQ7CiAgICBpZiAob3BlcmFuZCBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShvcGVyYW5kLnZhcmlhYmxlKTsKICAgICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckNoZWNrV2hlblRydWUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlKTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ2hlY2tXaGVuRmFsc2UgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlKTsKICAgICAgc3RhdGVBZnRlckNoZWNrV2hlblRydWUubmFycm93TG9jYWwoCiAgICAgICAgICBfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwgdHlwZSwgbm9kZSk7CiAgICAgIF9zZXRTdGF0ZUFmdGVyKF9zdGF0ZSwgc3RhdGVBZnRlckNoZWNrV2hlblRydWUsIHN0YXRlQWZ0ZXJDaGVja1doZW5GYWxzZSk7CiAgICB9CiAgfQoKICB2b2lkIF9wb3RlbnRpYWxseUFkZE51bGxDaGVjaygKICAgICAgaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlLCBpci5FeHByZXNzaW9uIHJlY2VpdmVyKSB7CiAgICBpZiAoIV9hY2N1bXVsYXRlSXNDaGVja3MpIHJldHVybjsKICAgIGlmIChyZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShyZWNlaXZlci52YXJpYWJsZSk7CiAgICAgIERhcnRUeXBlIGxvY2FsVHlwZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxUeXBlKF9lbGVtZW50TWFwLCBsb2NhbCk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckNoZWNrV2hlblRydWUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlKTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ2hlY2tXaGVuRmFsc2UgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlKTsKICAgICAgc3RhdGVBZnRlckNoZWNrV2hlblRydWUudXBkYXRlTG9jYWwoX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsCiAgICAgICAgICBfdHlwZXMubnVsbFR5cGUsIG5vZGUsIGxvY2FsVHlwZSk7CiAgICAgIHN0YXRlQWZ0ZXJDaGVja1doZW5GYWxzZS5uYXJyb3dMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwKICAgICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RUeXBlLCBub2RlKTsKICAgICAgX3NldFN0YXRlQWZ0ZXIoX3N0YXRlLCBzdGF0ZUFmdGVyQ2hlY2tXaGVuVHJ1ZSwgc3RhdGVBZnRlckNoZWNrV2hlbkZhbHNlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdElmU3RhdGVtZW50KGlyLklmU3RhdGVtZW50IG5vZGUpIHsKICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICBoYW5kbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ29uZGl0aW9uV2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ29uZGl0aW9uV2hlbkZhbHNlID0gX3N0YXRlQWZ0ZXJXaGVuRmFsc2U7CiAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVBZnRlckNvbmRpdGlvbldoZW5UcnVlKTsKICAgIHZpc2l0KG5vZGUudGhlbik7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJUaGVuID0gX3N0YXRlOwogICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQWZ0ZXJDb25kaXRpb25XaGVuRmFsc2UpOwogICAgdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyRWxzZSA9IF9zdGF0ZTsKICAgIF9zdGF0ZSA9CiAgICAgICAgc3RhdGVCZWZvcmUubWVyZ2VEaWFtb25kRmxvdyhfaW5mZXJyZXIsIHN0YXRlQWZ0ZXJUaGVuLCBzdGF0ZUFmdGVyRWxzZSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdElzRXhwcmVzc2lvbihpci5Jc0V4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXQobm9kZS5vcGVyYW5kKTsKICAgIF9wb3RlbnRpYWxseUFkZElzQ2hlY2sobm9kZSk7CiAgICByZXR1cm4gX3R5cGVzLmJvb2xUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Tm90KGlyLk5vdCBub2RlKSB7CiAgICB2aXNpdChub2RlLm9wZXJhbmQsIGNvbmRpdGlvbkNvbnRleHQ6IF9hY2N1bXVsYXRlSXNDaGVja3MpOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyT3BlcmFuZFdoZW5UcnVlID0gX3N0YXRlQWZ0ZXJXaGVuVHJ1ZTsKICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlck9wZXJhbmRXaGVuRmFsc2UgPSBfc3RhdGVBZnRlcldoZW5GYWxzZTsKICAgIF9zZXRTdGF0ZUFmdGVyKAogICAgICAgIF9zdGF0ZSwgc3RhdGVBZnRlck9wZXJhbmRXaGVuRmFsc2UsIHN0YXRlQWZ0ZXJPcGVyYW5kV2hlblRydWUpOwogICAgcmV0dXJuIF90eXBlcy5ib29sVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKGlyLkxvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlLm9wZXJhdG9yID09ICcmJicpIHsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZSA9IF9zdGF0ZTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQmVmb3JlKTsKICAgICAgaGFuZGxlQ29uZGl0aW9uKG5vZGUubGVmdCk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckxlZnRXaGVuVHJ1ZSA9IF9zdGF0ZUFmdGVyV2hlblRydWU7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckxlZnRXaGVuRmFsc2UgPSBfc3RhdGVBZnRlcldoZW5GYWxzZTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQWZ0ZXJMZWZ0V2hlblRydWUpOwogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5yaWdodCk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlclJpZ2h0V2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJSaWdodFdoZW5GYWxzZSA9IF9zdGF0ZUFmdGVyV2hlbkZhbHNlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSA9IHN0YXRlQWZ0ZXJSaWdodFdoZW5UcnVlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuRmFsc2UgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVCZWZvcmUpCiAgICAgICAgICAubWVyZ2VEaWFtb25kRmxvdygKICAgICAgICAgICAgICBfaW5mZXJyZXIsIHN0YXRlQWZ0ZXJMZWZ0V2hlbkZhbHNlLCBzdGF0ZUFmdGVyUmlnaHRXaGVuRmFsc2UpOwogICAgICBMb2NhbFN0YXRlIGFmdGVyID0gc3RhdGVCZWZvcmUubWVyZ2VEaWFtb25kRmxvdygKICAgICAgICAgIF9pbmZlcnJlciwgc3RhdGVBZnRlcldoZW5UcnVlLCBzdGF0ZUFmdGVyV2hlbkZhbHNlKTsKICAgICAgX3NldFN0YXRlQWZ0ZXIoYWZ0ZXIsIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSwgc3RhdGVBZnRlcldoZW5GYWxzZSk7CiAgICAgIHJldHVybiBfdHlwZXMuYm9vbFR5cGU7CiAgICB9IGVsc2UgaWYgKG5vZGUub3BlcmF0b3IgPT0gJ3x8JykgewogICAgICBMb2NhbFN0YXRlIHN0YXRlQmVmb3JlID0gX3N0YXRlOwogICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVCZWZvcmUpOwogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5sZWZ0KTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyTGVmdFdoZW5UcnVlID0gX3N0YXRlQWZ0ZXJXaGVuVHJ1ZTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyTGVmdFdoZW5GYWxzZSA9IF9zdGF0ZUFmdGVyV2hlbkZhbHNlOwogICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVBZnRlckxlZnRXaGVuRmFsc2UpOwogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5yaWdodCk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlclJpZ2h0V2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJSaWdodFdoZW5GYWxzZSA9IF9zdGF0ZUFmdGVyV2hlbkZhbHNlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUJlZm9yZSkKICAgICAgICAgIC5tZXJnZURpYW1vbmRGbG93KAogICAgICAgICAgICAgIF9pbmZlcnJlciwgc3RhdGVBZnRlckxlZnRXaGVuVHJ1ZSwgc3RhdGVBZnRlclJpZ2h0V2hlblRydWUpOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuRmFsc2UgPSBzdGF0ZUFmdGVyUmlnaHRXaGVuRmFsc2U7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlciA9IHN0YXRlQmVmb3JlLm1lcmdlRGlhbW9uZEZsb3coCiAgICAgICAgICBfaW5mZXJyZXIsIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSwgc3RhdGVBZnRlcldoZW5GYWxzZSk7CiAgICAgIF9zZXRTdGF0ZUFmdGVyKHN0YXRlQWZ0ZXIsIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSwgc3RhdGVBZnRlcldoZW5GYWxzZSk7CiAgICAgIHJldHVybiBfdHlwZXMuYm9vbFR5cGU7CiAgICB9CiAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICJVbmV4cGVjdGVkIGxvZ2ljYWwgb3BlcmF0b3IgJyR7bm9kZS5vcGVyYXRvcn0nLiIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICBoYW5kbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyV2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyV2hlbkZhbHNlID0gX3N0YXRlQWZ0ZXJXaGVuRmFsc2U7CiAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVBZnRlcldoZW5UcnVlKTsKICAgIFR5cGVJbmZvcm1hdGlvbiBmaXJzdFR5cGUgPSB2aXNpdChub2RlLnRoZW4pOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyVGhlbiA9IF9zdGF0ZTsKICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUFmdGVyV2hlbkZhbHNlKTsKICAgIFR5cGVJbmZvcm1hdGlvbiBzZWNvbmRUeXBlID0gdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyRWxzZSA9IF9zdGF0ZTsKICAgIF9zdGF0ZSA9CiAgICAgICAgc3RhdGVCZWZvcmUubWVyZ2VEaWFtb25kRmxvdyhfaW5mZXJyZXIsIHN0YXRlQWZ0ZXJUaGVuLCBzdGF0ZUFmdGVyRWxzZSk7CiAgICByZXR1cm4gX3R5cGVzLmFsbG9jYXRlRGlhbW9uZFBoaShmaXJzdFR5cGUsIHNlY29uZFR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUxvY2FsRnVuY3Rpb24oCiAgICAgIGlyLlRyZWVOb2RlIG5vZGUsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUsCiAgICAgIFtpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlXSkgewogICAgLy8gV2UgbG9vc2UgdHJhY2sgb2YgW3RoaXNdIGluIGNsb3N1cmVzIChzZWUgaXNzdWUgMjA4NDApLiBUbyBiZSBvbgogICAgLy8gdGhlIHNhZmUgc2lkZSwgd2UgbWFyayBbdGhpc10gYXMgZXhwb3NlZCBoZXJlLiBXZSBjb3VsZCBkbyBiZXR0ZXIgYnkKICAgIC8vIGFuYWx5emluZyB0aGUgY2xvc3VyZS4KICAgIC8vIFRPRE8oaGVyaHV0KTogQW5hbHl6ZSB3aGV0aGVyIGNsb3N1cmUgZXhwb3NlcyB0aGlzLiBQb3NzaWJseSB1c2luZwogICAgLy8gd2hldGhlciB0aGUgY3JlYXRlZCBjbG9zdXJlIGFzIGEgYHRoaXNMb2NhbGAuCiAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKCiAgICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGluZm8gPSBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2xvc3VyZUluZm8obm9kZSk7CgogICAgLy8gUmVjb3JkIHRoZSB0eXBlcyBvZiBjYXB0dXJlZCBub24tYm94ZWQgdmFyaWFibGVzLiBUeXBlcyBvZgogICAgLy8gdGhlc2UgdmFyaWFibGVzIG1heSBhbHJlYWR5IGJlIHRoZXJlLCBiZWNhdXNlIG9mIGFuIGFuYWx5c2lzIG9mCiAgICAvLyBhIHByZXZpb3VzIGNsb3N1cmUuCiAgICBpbmZvLmZvckVhY2hGcmVlVmFyaWFibGUoKExvY2FsIHZhcmlhYmxlLCBGaWVsZEVudGl0eSBmaWVsZCkgewogICAgICBpZiAoIWluZm8uaXNCb3hlZFZhcmlhYmxlKHZhcmlhYmxlKSkgewogICAgICAgIGlmICh2YXJpYWJsZSA9PSBpbmZvLnRoaXNMb2NhbCkgewogICAgICAgICAgX2luZmVycmVyLnJlY29yZFR5cGVPZkZpZWxkKGZpZWxkLCB0aGlzVHlwZSk7CiAgICAgICAgfQogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBsb2NhbFR5cGUgPQogICAgICAgICAgICBfc3RhdGUucmVhZExvY2FsKF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIHZhcmlhYmxlKTsKICAgICAgICAvLyBUaGUgdHlwZSBpcyBudWxsIGZvciB0eXBlIHBhcmFtZXRlcnMuCiAgICAgICAgaWYgKGxvY2FsVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBfaW5mZXJyZXIucmVjb3JkVHlwZU9mRmllbGQoZmllbGQsIGxvY2FsVHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9jYXB0dXJlZFZhcmlhYmxlcy5hZGQodmFyaWFibGUpOwogICAgfSk7CgogICAgVHlwZUluZm9ybWF0aW9uIGxvY2FsRnVuY3Rpb25UeXBlID0KICAgICAgICBfaW5mZXJyZXIuY29uY3JldGVUeXBlcy5wdXRJZkFic2VudChub2RlLCAoKSB7CiAgICAgIHJldHVybiBfdHlwZXMuYWxsb2NhdGVDbG9zdXJlKGluZm8uY2FsbE1ldGhvZCk7CiAgICB9KTsKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgRGFydFR5cGUgdHlwZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxUeXBlKF9lbGVtZW50TWFwLCBsb2NhbCk7CiAgICAgIF9zdGF0ZS51cGRhdGVMb2NhbCgKICAgICAgICAgIF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIGxvY2FsLCBsb2NhbEZ1bmN0aW9uVHlwZSwgbm9kZSwgdHlwZSwKICAgICAgICAgIGlzTnVsbGFibGU6IGZhbHNlKTsKICAgIH0KCiAgICAvLyBXZSBkb24ndCBwdXQgdGhlIGNsb3N1cmUgaW4gdGhlIHdvcmsgcXVldWUgb2YgdGhlCiAgICAvLyBpbmZlcnJlciwgYmVjYXVzZSBpdCB3aWxsIHNoYXJlIGluZm9ybWF0aW9uIHdpdGggaXRzIGVuY2xvc2luZwogICAgLy8gbWV0aG9kLCBsaWtlIGZvciBleGFtcGxlIHRoZSB0eXBlcyBvZiBsb2NhbCB2YXJpYWJsZXMuCiAgICBMb2NhbFN0YXRlIGNsb3N1cmVTdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNsb3N1cmUoX3N0YXRlKTsKICAgIEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIgdmlzaXRvciA9IG5ldyBLZXJuZWxUeXBlR3JhcGhCdWlsZGVyKAogICAgICAgIF9vcHRpb25zLAogICAgICAgIF9jbG9zZWRXb3JsZCwKICAgICAgICBfaW5mZXJyZXIsCiAgICAgICAgaW5mby5jYWxsTWV0aG9kLAogICAgICAgIGZ1bmN0aW9uTm9kZSwKICAgICAgICBfbG9jYWxzTWFwLAogICAgICAgIF9zdGF0aWNUeXBlUHJvdmlkZXIsCiAgICAgICAgY2xvc3VyZVN0YXRlLAogICAgICAgIF9jYXB0dXJlZEFuZEJveGVkKTsKICAgIHZpc2l0b3IucnVuKCk7CiAgICBfaW5mZXJyZXIucmVjb3JkUmV0dXJuVHlwZShpbmZvLmNhbGxNZXRob2QsIHZpc2l0b3IuX3JldHVyblR5cGUpOwoKICAgIHJldHVybiBsb2NhbEZ1bmN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlTG9jYWxGdW5jdGlvbihub2RlLCBub2RlLmZ1bmN0aW9uLCBub2RlLnZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIGhhbmRsZUxvY2FsRnVuY3Rpb24obm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFdoaWxlU3RhdGVtZW50KGlyLldoaWxlU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVMb29wKG5vZGUsIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvcldoaWxlKG5vZGUpLCAoKSB7CiAgICAgIGhhbmRsZUNvbmRpdGlvbihub2RlLmNvbmRpdGlvbik7CiAgICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChfc3RhdGVBZnRlcldoZW5UcnVlKTsKICAgICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREb1N0YXRlbWVudChpci5Eb1N0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlTG9vcChub2RlLCBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JEbyhub2RlKSwgKCkgewogICAgICB2aXNpdChub2RlLmJvZHkpOwogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgICAvLyBUT0RPKDI5MzA5KTogVGhpcyBjb25kaXRpb24gYXBwZWFycyB0byBzdHJlbmd0aGVuIGJvdGggdGhlIGJhY2stZWRnZQogICAgICAvLyBhbmQgZXhpdC1lZGdlLiBGb3Igbm93LCBhdm9pZCBzdHJlbmd0aGVuaW5nIG9uIHRoZSBjb25kaXRpb24gdW50aWwgdGhlCiAgICAgIC8vIHByb3BlciBmaXggaXMgZm91bmQuCiAgICAgIC8vCiAgICAgIC8vICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlQWZ0ZXJXaGVuVHJ1ZSwgbm9kZS5ib2R5KTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGb3JTdGF0ZW1lbnQoaXIuRm9yU3RhdGVtZW50IG5vZGUpIHsKICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBub2RlLnZhcmlhYmxlcykgewogICAgICB2aXNpdCh2YXJpYWJsZSk7CiAgICB9CiAgICByZXR1cm4gaGFuZGxlTG9vcChub2RlLCBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JGb3Iobm9kZSksICgpIHsKICAgICAgaGFuZGxlQ29uZGl0aW9uKG5vZGUuY29uZGl0aW9uKTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKF9zdGF0ZUFmdGVyV2hlblRydWUpOwogICAgICB2aXNpdChub2RlLmJvZHkpOwogICAgICBmb3IgKGlyLkV4cHJlc3Npb24gdXBkYXRlIGluIG5vZGUudXBkYXRlcykgewogICAgICAgIHZpc2l0KHVwZGF0ZSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUcnlDYXRjaChpci5UcnlDYXRjaCBub2RlKSB7CiAgICBMb2NhbFN0YXRlIHN0YXRlQmVmb3JlID0gX3N0YXRlOwogICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUudHJ5QmxvY2soc3RhdGVCZWZvcmUsIG5vZGUpOwogICAgX3N0YXRlLm1hcmtJbml0aWFsaXphdGlvbkFzSW5kZWZpbml0ZSgpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckJvZHkgPSBfc3RhdGU7CiAgICBfc3RhdGUgPSBzdGF0ZUJlZm9yZS5tZXJnZUZsb3coX2luZmVycmVyLCBzdGF0ZUFmdGVyQm9keSk7CiAgICBmb3IgKGlyLkNhdGNoIGNhdGNoQmxvY2sgaW4gbm9kZS5jYXRjaGVzKSB7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmVDYXRjaCA9IF9zdGF0ZTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQmVmb3JlQ2F0Y2gpOwogICAgICB2aXNpdChjYXRjaEJsb2NrKTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ2F0Y2ggPSBfc3RhdGU7CiAgICAgIF9zdGF0ZSA9IHN0YXRlQmVmb3JlQ2F0Y2gubWVyZ2VGbG93KF9pbmZlcnJlciwgc3RhdGVBZnRlckNhdGNoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUcnlGaW5hbGx5KGlyLlRyeUZpbmFsbHkgbm9kZSkgewogICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZSA9IF9zdGF0ZTsKICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLnRyeUJsb2NrKHN0YXRlQmVmb3JlLCBub2RlKTsKICAgIF9zdGF0ZS5tYXJrSW5pdGlhbGl6YXRpb25Bc0luZGVmaW5pdGUoKTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJCb2R5ID0gX3N0YXRlOwogICAgX3N0YXRlID0gc3RhdGVCZWZvcmUubWVyZ2VGbG93KF9pbmZlcnJlciwgc3RhdGVBZnRlckJvZHkpOwogICAgdmlzaXQobm9kZS5maW5hbGl6ZXIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENhdGNoKGlyLkNhdGNoIG5vZGUpIHsKICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gZXhjZXB0aW9uID0gbm9kZS5leGNlcHRpb247CiAgICBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG1hc2s7CiAgICAgIERhcnRUeXBlIHR5cGUgPSBub2RlLmd1YXJkICE9IG51bGwKICAgICAgICAgID8gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS5ndWFyZCkKICAgICAgICAgIDogY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgICAgICBtYXNrID0gX3R5cGVzLm5vbk51bGxTdWJ0eXBlKGludGVyZmFjZVR5cGUuZWxlbWVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWFzayA9IF90eXBlcy5keW5hbWljVHlwZTsKICAgICAgfQogICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShleGNlcHRpb24pOwogICAgICBfc3RhdGUudXBkYXRlTG9jYWwoCiAgICAgICAgICBfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwgbWFzaywgbm9kZSwgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgICAgIGlzTnVsbGFibGU6IGZhbHNlIC8qIGB0aHJvdyBudWxsYCBwcm9kdWNlcyBhIE51bGxUaHJvd25FcnJvciAqLyk7CiAgICB9CiAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHN0YWNrVHJhY2UgPSBub2RlLnN0YWNrVHJhY2U7CiAgICBpZiAoc3RhY2tUcmFjZSAhPSBudWxsKSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHN0YWNrVHJhY2UpOwogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgYSBtYXNrIGJhc2VkIG9uIFtTdGFja1RyYWNlXS4KICAgICAgLy8gTm90ZTogc3RhY2sgdHJhY2UgbWF5IGJlIG51bGwgaWYgdXNlcnMgb21pdCBhIHN0YWNrIGluCiAgICAgIC8vIGBjb21wbGV0ZXIuY29tcGxldGVFcnJvcmAuCiAgICAgIF9zdGF0ZS51cGRhdGVMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwKICAgICAgICAgIF90eXBlcy5keW5hbWljVHlwZSwgbm9kZSwgY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICB9CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgX3N0YXRlLnNlZW5SZXR1cm5PclRocm93ID0gdHJ1ZTsKICAgIHJldHVybiBfdHlwZXMubm9uTnVsbEVtcHR5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRSZXRocm93KGlyLlJldGhyb3cgbm9kZSkgewogICAgX3N0YXRlLnNlZW5SZXR1cm5PclRocm93ID0gdHJ1ZTsKICAgIHJldHVybiBfdHlwZXMubm9uTnVsbEVtcHR5KCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlU3VwZXJOb1N1Y2hNZXRob2QoaXIuTm9kZSBub2RlLCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMpIHsKICAgIC8vIEVuc3VyZSB3ZSBjcmVhdGUgYSBub2RlLCB0byBtYWtlIGV4cGxpY2l0IHRoZSBjYWxsIHRvIHRoZQogICAgLy8gYG5vU3VjaE1ldGhvZGAgaGFuZGxlci4KICAgIEZ1bmN0aW9uRW50aXR5IG5vU3VjaE1ldGhvZCA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3VwZXJOb1N1Y2hNZXRob2QoX2FuYWx5emVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzKTsKICAgIHJldHVybiBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIG5vU3VjaE1ldGhvZCwgYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFN1cGVyUHJvcGVydHlHZXQoaXIuU3VwZXJQcm9wZXJ0eUdldCBub2RlKSB7CiAgICAvLyBUT0RPKGhlcmh1dCk6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlIGlmIHdlIGtuZXcgd2hhdCB3ZQogICAgLy8gYXJlIGNhbGxpbmcgZG9lcyBub3QgZXhwb3NlIHRoaXMuCiAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKCiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRTdXBlck1lbWJlcihfYW5hbHl6ZWRNZW1iZXIsIG5vZGUubmFtZSk7CiAgICBhc3NlcnQobWVtYmVyICE9IG51bGwsICJObyBtZW1iZXIgZm91bmQgZm9yIHN1cGVyIHByb3BlcnR5IGdldDogJG5vZGUiKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5nZXR0ZXIoX2VsZW1lbnRNYXAuZ2V0TmFtZShub2RlLm5hbWUpKTsKICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0KICAgICAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIG1lbWJlciwgbnVsbCk7CiAgICBpZiAobWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgICAgX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShtZW1iZXIpOwogICAgICBpZiAoZnVuY3Rpb25UeXBlLnJldHVyblR5cGUuY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcykgewogICAgICAgIC8vIFRoZSByZXN1bHQgdHlwZSB2YXJpZXMgd2l0aCB0aGUgY2FsbCBzaXRlIHNvIHdlIG5hcnJvdyB0aGUgc3RhdGljCiAgICAgICAgLy8gcmVzdWx0IHR5cGUuCiAgICAgICAgdHlwZSA9IF90eXBlcy5uYXJyb3dUeXBlKHR5cGUsIF9nZXRTdGF0aWNUeXBlKG5vZGUpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICBEYXJ0VHlwZSBmaWVsZFR5cGUgPSBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RmllbGRUeXBlKG1lbWJlcik7CiAgICAgIGlmIChmaWVsZFR5cGUuY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcykgewogICAgICAgIC8vIFRoZSByZXN1bHQgdHlwZSB2YXJpZXMgd2l0aCB0aGUgY2FsbCBzaXRlIHNvIHdlIG5hcnJvdyB0aGUgc3RhdGljCiAgICAgICAgLy8gcmVzdWx0IHR5cGUuCiAgICAgICAgdHlwZSA9IF90eXBlcy5uYXJyb3dUeXBlKHR5cGUsIF9nZXRTdGF0aWNUeXBlKG5vZGUpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdXBlclByb3BlcnR5U2V0KGlyLlN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgLy8gVE9ETyhoZXJodXQpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBpZiB3ZSBrbmV3IHdoYXQgd2UKICAgIC8vIGFyZSBjYWxsaW5nIGRvZXMgbm90IGV4cG9zZSB0aGlzLgogICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CgogICAgVHlwZUluZm9ybWF0aW9uIHJoc1R5cGUgPSB2aXNpdChub2RlLnZhbHVlKTsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIF9lbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKF9hbmFseXplZE1lbWJlciwgbm9kZS5uYW1lLCBzZXR0ZXI6IHRydWUpOwogICAgYXNzZXJ0KG1lbWJlciAhPSBudWxsLCAiTm8gbWVtYmVyIGZvdW5kIGZvciBzdXBlciBwcm9wZXJ0eSBzZXQ6ICRub2RlIik7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3Iuc2V0dGVyKF9lbGVtZW50TWFwLmdldE5hbWUobm9kZS5uYW1lKSk7CiAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMgPSBuZXcgQXJndW1lbnRzVHlwZXMoW3Joc1R5cGVdLCBudWxsKTsKICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgbWVtYmVyLCBhcmd1bWVudHMpOwogICAgcmV0dXJuIHJoc1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oaGVyaHV0KTogV2UgY291bGQgZG8gYmV0dGVyIGhlcmUgaWYgd2Uga25ldyB3aGF0IHdlCiAgICAvLyBhcmUgY2FsbGluZyBkb2VzIG5vdCBleHBvc2UgdGhpcy4KICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwoKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIF9lbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKF9hbmFseXplZE1lbWJlciwgbm9kZS5uYW1lKTsKICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cyA9IGFuYWx5emVBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LgogICAgICByZXR1cm4gaGFuZGxlU3VwZXJOb1N1Y2hNZXRob2Qobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGFyZ3VtZW50cyk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobWVtYmVyLmlzRnVuY3Rpb24sICJVbmV4cGVjdGVkIHN1cGVyIGludm9jYXRpb24gdGFyZ2V0OiAkbWVtYmVyIik7CiAgICAgIGlmIChpc0luY29tcGF0aWJsZUludm9rZShtZW1iZXIsIGFyZ3VtZW50cykpIHsKICAgICAgICByZXR1cm4gaGFuZGxlU3VwZXJOb1N1Y2hNZXRob2Qobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGFyZ3VtZW50cyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUgPQogICAgICAgICAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIG1lbWJlciwgYXJndW1lbnRzKTsKICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICAgICAgX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShtZW1iZXIpOwogICAgICAgIGlmIChmdW5jdGlvblR5cGUucmV0dXJuVHlwZS5jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgdmFyaWVzIHdpdGggdGhlIGNhbGwgc2l0ZSBzbyB3ZSBuYXJyb3cgdGhlIHN0YXRpYwogICAgICAgICAgLy8gcmV0dXJuIHR5cGUuCiAgICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHlwZTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0QXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gb3BlcmFuZFR5cGUgPSB2aXNpdChub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuIF90eXBlcy5uYXJyb3dUeXBlKG9wZXJhbmRUeXBlLCBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEF3YWl0RXhwcmVzc2lvbihpci5Bd2FpdEV4cHJlc3Npb24gbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIGZ1dHVyZVR5cGUgPSB2aXNpdChub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuIF9pbmZlcnJlci5yZWdpc3RlckF3YWl0KG5vZGUsIGZ1dHVyZVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0WWllbGRTdGF0ZW1lbnQoaXIuWWllbGRTdGF0ZW1lbnQgbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIG9wZXJhbmRUeXBlID0gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBfaW5mZXJyZXIucmVnaXN0ZXJZaWVsZChub2RlLCBvcGVyYW5kVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChpci5DaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlKSB7CiAgICByZXR1cm4gX3R5cGVzLm5vbk51bGxFbXB0eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SW52YWxpZEV4cHJlc3Npb24oaXIuSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdGhpcyBzaG91bGQgYmUgW2VtcHR5XSBpbnN0ZWFkPwogICAgcmV0dXJuIF90eXBlcy5keW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBUeXBlSW5mb3JtYXRpb25Db25zdGFudFZpc2l0b3IodGhpcywgbm9kZSkKICAgICAgICAudmlzaXRDb25zdGFudChub2RlLmNvbnN0YW50KTsKICB9Cn0KCmNsYXNzIFR5cGVJbmZvcm1hdGlvbkNvbnN0YW50VmlzaXRvcgogICAgZXh0ZW5kcyBpci5Db21wdXRlT25jZUNvbnN0YW50VmlzaXRvcjxUeXBlSW5mb3JtYXRpb24+IHsKICBmaW5hbCBLZXJuZWxUeXBlR3JhcGhCdWlsZGVyIGJ1aWxkZXI7CiAgZmluYWwgaXIuQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIFR5cGVJbmZvcm1hdGlvbkNvbnN0YW50VmlzaXRvcih0aGlzLmJ1aWxkZXIsIHRoaXMuZXhwcmVzc2lvbik7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiBkZWZhdWx0Q29uc3RhbnQoaXIuQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgY29uc3RhbnQ6ICIKICAgICAgICAiJHtub2RlfSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkiKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdE51bGxDb25zdGFudChpci5OdWxsQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlTnVsbFR5cGVJbmZvcm1hdGlvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Qm9vbENvbnN0YW50KGlyLkJvb2xDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVCb29sVHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SW50Q29uc3RhbnQoaXIuSW50Q29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlSW50VHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0RG91YmxlQ29uc3RhbnQoaXIuRG91YmxlQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlRG91YmxlVHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3RyaW5nQ29uc3RhbnQoaXIuU3RyaW5nQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlU3RyaW5nVHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3ltYm9sQ29uc3RhbnQoaXIuU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlU3ltYm9sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TWFwQ29uc3RhbnQoaXIuTWFwQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlTWFwVHlwZUluZm9ybWF0aW9uKAogICAgICAgIG5ldyBDb25zdGFudFJlZmVyZW5jZShleHByZXNzaW9uLCBub2RlKSwKICAgICAgICBub2RlLmVudHJpZXMKICAgICAgICAgICAgLm1hcCgoZSkgPT4gbmV3IFBhaXIodmlzaXRDb25zdGFudChlLmtleSksIHZpc2l0Q29uc3RhbnQoZS52YWx1ZSkpKSwKICAgICAgICBpc0NvbnN0OiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdExpc3RDb25zdGFudChpci5MaXN0Q29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlTGlzdFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBuZXcgQ29uc3RhbnRSZWZlcmVuY2UoZXhwcmVzc2lvbiwgbm9kZSksCiAgICAgICAgbm9kZS5lbnRyaWVzLm1hcCgoZSkgPT4gdmlzaXRDb25zdGFudChlKSksCiAgICAgICAgaXNDb25zdDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTZXRDb25zdGFudChpci5TZXRDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVTZXRUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgbmV3IENvbnN0YW50UmVmZXJlbmNlKGV4cHJlc3Npb24sIG5vZGUpLAogICAgICAgIG5vZGUuZW50cmllcy5tYXAoKGUpID0+IHZpc2l0Q29uc3RhbnQoZSkpLAogICAgICAgIGlzQ29uc3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SW5zdGFuY2VDb25zdGFudChpci5JbnN0YW5jZUNvbnN0YW50IG5vZGUpIHsKICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoaXIuUmVmZXJlbmNlIHJlZmVyZW5jZSwgaXIuQ29uc3RhbnQgdmFsdWUpIHsKICAgICAgYnVpbGRlci5faW5mZXJyZXIucmVjb3JkVHlwZU9mRmllbGQoCiAgICAgICAgICBidWlsZGVyLl9lbGVtZW50TWFwLmdldEZpZWxkKHJlZmVyZW5jZS5hc0ZpZWxkKSwKICAgICAgICAgIHZpc2l0Q29uc3RhbnQodmFsdWUpKTsKICAgIH0pOwogICAgcmV0dXJuIGJ1aWxkZXIuX3R5cGVzLmdldENvbmNyZXRlVHlwZUZvcihidWlsZGVyCiAgICAgICAgLl9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmNyZWF0ZU5vbk51bGxFeGFjdChidWlsZGVyLl9lbGVtZW50TWFwLmdldENsYXNzKG5vZGUuY2xhc3NOb2RlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCgKICAgICAgaXIuUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVJbnN0YW50aWF0aW9uVHlwZUluZm9ybWF0aW9uKAogICAgICAgIHZpc2l0Q29uc3RhbnQobm9kZS50ZWFyT2ZmQ29uc3RhbnQpKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFRlYXJPZmZDb25zdGFudChpci5UZWFyT2ZmQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlU3RhdGljR2V0VHlwZUluZm9ybWF0aW9uKG5vZGUsIG5vZGUucHJvY2VkdXJlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoaXIuVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVUeXBlTGl0ZXJhbEluZm9ybWF0aW9uKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgewogICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCB1bmV2YWx1YXRlZCBjb25zdGFudDogJG5vZGUiKTsKICAgIHJldHVybiBidWlsZGVyLl90eXBlcy5keW5hbWljVHlwZTsKICB9Cn0KCmNsYXNzIFJlZmluZW1lbnQgewogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIGZpbmFsIEFic3RyYWN0VmFsdWUgbWFzazsKCiAgUmVmaW5lbWVudCh0aGlzLnNlbGVjdG9yLCB0aGlzLm1hc2spOwp9CgpjbGFzcyBMb2NhbFN0YXRlIHsKICBmaW5hbCBMb2NhbHNIYW5kbGVyIF9sb2NhbHM7CiAgZmluYWwgRmllbGRJbml0aWFsaXphdGlvblNjb3BlIF9maWVsZHM7CiAgYm9vbCBzZWVuUmV0dXJuT3JUaHJvdyA9IGZhbHNlOwogIGJvb2wgc2VlbkJyZWFrT3JDb250aW51ZSA9IGZhbHNlOwogIExvY2Fsc0hhbmRsZXIgX3RyeUJsb2NrOwoKICBMb2NhbFN0YXRlLmluaXRpYWwoe2Jvb2wgaW5HZW5lcmF0aXZlQ29uc3RydWN0b3J9KQogICAgICA6IHRoaXMuaW50ZXJuYWwoCiAgICAgICAgICAgIG5ldyBMb2NhbHNIYW5kbGVyKCksCiAgICAgICAgICAgIGluR2VuZXJhdGl2ZUNvbnN0cnVjdG9yID8gbmV3IEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSgpIDogbnVsbCwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgc2VlblJldHVybk9yVGhyb3c6IGZhbHNlLAogICAgICAgICAgICBzZWVuQnJlYWtPckNvbnRpbnVlOiBmYWxzZSk7CgogIExvY2FsU3RhdGUuY2hpbGRQYXRoKExvY2FsU3RhdGUgb3RoZXIpCiAgICAgIDogdGhpcy5pbnRlcm5hbChuZXcgTG9jYWxzSGFuZGxlci5mcm9tKG90aGVyLl9sb2NhbHMpLAogICAgICAgICAgICBuZXcgRmllbGRJbml0aWFsaXphdGlvblNjb3BlLmZyb20ob3RoZXIuX2ZpZWxkcyksIG90aGVyLl90cnlCbG9jaywKICAgICAgICAgICAgc2VlblJldHVybk9yVGhyb3c6IGZhbHNlLCBzZWVuQnJlYWtPckNvbnRpbnVlOiBmYWxzZSk7CgogIExvY2FsU3RhdGUuY2xvc3VyZShMb2NhbFN0YXRlIG90aGVyKQogICAgICA6IHRoaXMuaW50ZXJuYWwobmV3IExvY2Fsc0hhbmRsZXIuZnJvbShvdGhlci5fbG9jYWxzKSwKICAgICAgICAgICAgbmV3IEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZS5mcm9tKG90aGVyLl9maWVsZHMpLCBudWxsLAogICAgICAgICAgICBzZWVuUmV0dXJuT3JUaHJvdzogZmFsc2UsIHNlZW5CcmVha09yQ29udGludWU6IGZhbHNlKTsKCiAgZmFjdG9yeSBMb2NhbFN0YXRlLnRyeUJsb2NrKExvY2FsU3RhdGUgb3RoZXIsIGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIudHJ5QmxvY2sob3RoZXIuX2xvY2Fscywgbm9kZSk7CiAgICBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgZmllbGRTY29wZSA9CiAgICAgICAgbmV3IEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZS5mcm9tKG90aGVyLl9maWVsZHMpOwogICAgTG9jYWxzSGFuZGxlciB0cnlCbG9jayA9IGxvY2FsczsKICAgIHJldHVybiBuZXcgTG9jYWxTdGF0ZS5pbnRlcm5hbChsb2NhbHMsIGZpZWxkU2NvcGUsIHRyeUJsb2NrLAogICAgICAgIHNlZW5SZXR1cm5PclRocm93OiBmYWxzZSwgc2VlbkJyZWFrT3JDb250aW51ZTogZmFsc2UpOwogIH0KCiAgTG9jYWxTdGF0ZS5kZWVwQ29weU9mKExvY2FsU3RhdGUgb3RoZXIpCiAgICAgIDogX2xvY2FscyA9IG5ldyBMb2NhbHNIYW5kbGVyLmRlZXBDb3B5T2Yob3RoZXIuX2xvY2FscyksCiAgICAgICAgX3RyeUJsb2NrID0gb3RoZXIuX3RyeUJsb2NrLAogICAgICAgIF9maWVsZHMgPSBvdGhlci5fZmllbGRzOwoKICBMb2NhbFN0YXRlLmludGVybmFsKHRoaXMuX2xvY2FscywgdGhpcy5fZmllbGRzLCB0aGlzLl90cnlCbG9jaywKICAgICAge3RoaXMuc2VlblJldHVybk9yVGhyb3csIHRoaXMuc2VlbkJyZWFrT3JDb250aW51ZX0pOwoKICBib29sIGdldCBhYm9ydHMgewogICAgcmV0dXJuIHNlZW5SZXR1cm5PclRocm93IHx8IHNlZW5CcmVha09yQ29udGludWU7CiAgfQoKICBib29sIGdldCBpc1RoaXNFeHBvc2VkIHsKICAgIHJldHVybiBfZmllbGRzID09IG51bGwgfHwgX2ZpZWxkcy5pc1RoaXNFeHBvc2VkOwogIH0KCiAgdm9pZCBtYXJrVGhpc0FzRXhwb3NlZCgpIHsKICAgIF9maWVsZHM/LmlzVGhpc0V4cG9zZWQgPSB0cnVlOwogIH0KCiAgdm9pZCBtYXJrSW5pdGlhbGl6YXRpb25Bc0luZGVmaW5pdGUoKSB7CiAgICBfZmllbGRzPy5pc0luZGVmaW5pdGUgPSB0cnVlOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHJlYWRGaWVsZChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIF9maWVsZHMucmVhZEZpZWxkKGZpZWxkKTsKICB9CgogIHZvaWQgdXBkYXRlRmllbGQoRmllbGRFbnRpdHkgZmllbGQsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSB7CiAgICBfZmllbGRzLnVwZGF0ZUZpZWxkKGZpZWxkLCB0eXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiByZWFkTG9jYWwoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsCiAgICAgIE1hcDxMb2NhbCwgRmllbGRFbnRpdHk+IGNhcHR1cmVkQW5kQm94ZWQsIExvY2FsIGxvY2FsKSB7CiAgICBGaWVsZEVudGl0eSBmaWVsZCA9IGNhcHR1cmVkQW5kQm94ZWRbbG9jYWxdOwogICAgaWYgKGZpZWxkICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVPZk1lbWJlcihmaWVsZCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2xvY2Fscy51c2UoaW5mZXJyZXIsIGxvY2FsKTsKICAgIH0KICB9CgogIHZvaWQgdXBkYXRlTG9jYWwoCiAgICAgIEluZmVycmVyRW5naW5lIGluZmVycmVyLAogICAgICBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PiBjYXB0dXJlZEFuZEJveGVkLAogICAgICBMb2NhbCBsb2NhbCwKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUsCiAgICAgIGlyLk5vZGUgbm9kZSwKICAgICAgRGFydFR5cGUgc3RhdGljVHlwZSwKICAgICAge2lzTnVsbGFibGU6IHRydWV9KSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsKTsKICAgIHR5cGUgPSBpbmZlcnJlci50eXBlcy5uYXJyb3dUeXBlKHR5cGUsIHN0YXRpY1R5cGUsIGlzTnVsbGFibGU6IGlzTnVsbGFibGUpOwoKICAgIEZpZWxkRW50aXR5IGZpZWxkID0gY2FwdHVyZWRBbmRCb3hlZFtsb2NhbF07CiAgICBpZiAoZmllbGQgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5yZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgdHlwZSk7CiAgICB9IGVsc2UgewogICAgICBfbG9jYWxzLnVwZGF0ZShpbmZlcnJlciwgbG9jYWwsIHR5cGUsIG5vZGUsIHN0YXRpY1R5cGUsIF90cnlCbG9jayk7CiAgICB9CiAgfQoKICB2b2lkIG5hcnJvd0xvY2FsKAogICAgICBJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwKICAgICAgTWFwPExvY2FsLCBGaWVsZEVudGl0eT4gY2FwdHVyZWRBbmRCb3hlZCwKICAgICAgTG9jYWwgbG9jYWwsCiAgICAgIERhcnRUeXBlIHR5cGUsCiAgICAgIGlyLk5vZGUgbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIGN1cnJlbnRUeXBlID0gcmVhZExvY2FsKGluZmVycmVyLCBjYXB0dXJlZEFuZEJveGVkLCBsb2NhbCk7CiAgICB1cGRhdGVMb2NhbChpbmZlcnJlciwgY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsIGN1cnJlbnRUeXBlLCBub2RlLCB0eXBlLAogICAgICAgIGlzTnVsbGFibGU6IGZhbHNlKTsKICB9CgogIExvY2FsU3RhdGUgbWVyZ2VGbG93KEluZmVycmVyRW5naW5lIGluZmVycmVyLCBMb2NhbFN0YXRlIG90aGVyKSB7CiAgICBzZWVuUmV0dXJuT3JUaHJvdyA9IGZhbHNlOwogICAgc2VlbkJyZWFrT3JDb250aW51ZSA9IGZhbHNlOwoKICAgIGlmIChvdGhlci5hYm9ydHMpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBMb2NhbHNIYW5kbGVyIGxvY2FscyA9IF9sb2NhbHMubWVyZ2VGbG93KGluZmVycmVyLCBvdGhlci5fbG9jYWxzKTsKICAgIHJldHVybiBuZXcgTG9jYWxTdGF0ZS5pbnRlcm5hbChsb2NhbHMsIF9maWVsZHMsIF90cnlCbG9jaywKICAgICAgICBzZWVuUmV0dXJuT3JUaHJvdzogc2VlblJldHVybk9yVGhyb3csCiAgICAgICAgc2VlbkJyZWFrT3JDb250aW51ZTogc2VlbkJyZWFrT3JDb250aW51ZSk7CiAgfQoKICBMb2NhbFN0YXRlIG1lcmdlRGlhbW9uZEZsb3coCiAgICAgIEluZmVycmVyRW5naW5lIGluZmVycmVyLCBMb2NhbFN0YXRlIHRoZW5CcmFuY2gsIExvY2FsU3RhdGUgZWxzZUJyYW5jaCkgewogICAgc2VlblJldHVybk9yVGhyb3cgPQogICAgICAgIHRoZW5CcmFuY2guc2VlblJldHVybk9yVGhyb3cgJiYgZWxzZUJyYW5jaC5zZWVuUmV0dXJuT3JUaHJvdzsKICAgIHNlZW5CcmVha09yQ29udGludWUgPQogICAgICAgIHRoZW5CcmFuY2guc2VlbkJyZWFrT3JDb250aW51ZSAmJiBlbHNlQnJhbmNoLnNlZW5CcmVha09yQ29udGludWU7CgogICAgTG9jYWxzSGFuZGxlciBsb2NhbHM7CiAgICBpZiAoYWJvcnRzKSB7CiAgICAgIGxvY2FscyA9IF9sb2NhbHM7CiAgICB9IGVsc2UgaWYgKHRoZW5CcmFuY2guYWJvcnRzKSB7CiAgICAgIGxvY2FscyA9IF9sb2NhbHMubWVyZ2VGbG93KGluZmVycmVyLCBlbHNlQnJhbmNoLl9sb2NhbHMsIGluUGxhY2U6IHRydWUpOwogICAgfSBlbHNlIGlmIChlbHNlQnJhbmNoLmFib3J0cykgewogICAgICBsb2NhbHMgPSBfbG9jYWxzLm1lcmdlRmxvdyhpbmZlcnJlciwgdGhlbkJyYW5jaC5fbG9jYWxzLCBpblBsYWNlOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGxvY2FscyA9IF9sb2NhbHMubWVyZ2VEaWFtb25kRmxvdygKICAgICAgICAgIGluZmVycmVyLCB0aGVuQnJhbmNoLl9sb2NhbHMsIGVsc2VCcmFuY2guX2xvY2Fscyk7CiAgICB9CgogICAgRmllbGRJbml0aWFsaXphdGlvblNjb3BlIGZpZWxkU2NvcGUgPSBfZmllbGRzPy5tZXJnZURpYW1vbmRGbG93KAogICAgICAgIGluZmVycmVyLCB0aGVuQnJhbmNoLl9maWVsZHMsIGVsc2VCcmFuY2guX2ZpZWxkcyk7CiAgICByZXR1cm4gbmV3IExvY2FsU3RhdGUuaW50ZXJuYWwobG9jYWxzLCBmaWVsZFNjb3BlLCBfdHJ5QmxvY2ssCiAgICAgICAgc2VlblJldHVybk9yVGhyb3c6IHNlZW5SZXR1cm5PclRocm93LAogICAgICAgIHNlZW5CcmVha09yQ29udGludWU6IHNlZW5CcmVha09yQ29udGludWUpOwogIH0KCiAgTG9jYWxTdGF0ZSBtZXJnZUFmdGVyQnJlYWtzKEluZmVycmVyRW5naW5lIGluZmVycmVyLCBMaXN0PExvY2FsU3RhdGU+IHN0YXRlcywKICAgICAge2Jvb2wga2VlcE93bkxvY2FsczogdHJ1ZX0pIHsKICAgIGJvb2wgYWxsQnJhbmNoZXNBYm9ydCA9IHRydWU7CiAgICBmb3IgKExvY2FsU3RhdGUgc3RhdGUgaW4gc3RhdGVzKSB7CiAgICAgIGFsbEJyYW5jaGVzQWJvcnQgPSBhbGxCcmFuY2hlc0Fib3J0ICYmIHN0YXRlLnNlZW5SZXR1cm5PclRocm93OwogICAgfQoKICAgIGtlZXBPd25Mb2NhbHMgPSBrZWVwT3duTG9jYWxzICYmICFzZWVuUmV0dXJuT3JUaHJvdzsKCiAgICBMb2NhbHNIYW5kbGVyIGxvY2FscyA9IF9sb2NhbHMubWVyZ2VBZnRlckJyZWFrcygKICAgICAgICBpbmZlcnJlciwKICAgICAgICBzdGF0ZXMKICAgICAgICAgICAgLndoZXJlKChMb2NhbFN0YXRlIHN0YXRlKSA9PiAhc3RhdGUuc2VlblJldHVybk9yVGhyb3cpCiAgICAgICAgICAgIC5tYXAoKExvY2FsU3RhdGUgc3RhdGUpID0+IHN0YXRlLl9sb2NhbHMpLAogICAgICAgIGtlZXBPd25Mb2NhbHM6IGtlZXBPd25Mb2NhbHMpOwogICAgc2VlblJldHVybk9yVGhyb3cgPSBhbGxCcmFuY2hlc0Fib3J0ICYmICFrZWVwT3duTG9jYWxzOwogICAgcmV0dXJuIG5ldyBMb2NhbFN0YXRlLmludGVybmFsKGxvY2FscywgX2ZpZWxkcywgX3RyeUJsb2NrLAogICAgICAgIHNlZW5SZXR1cm5PclRocm93OiBzZWVuUmV0dXJuT3JUaHJvdywKICAgICAgICBzZWVuQnJlYWtPckNvbnRpbnVlOiBzZWVuQnJlYWtPckNvbnRpbnVlKTsKICB9CgogIGJvb2wgbWVyZ2VBbGwoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIExpc3Q8TG9jYWxTdGF0ZT4gc3RhdGVzKSB7CiAgICBhc3NlcnQoIXNlZW5SZXR1cm5PclRocm93KTsKICAgIHJldHVybiBfbG9jYWxzLm1lcmdlQWxsKAogICAgICAgIGluZmVycmVyLAogICAgICAgIHN0YXRlcwogICAgICAgICAgICAud2hlcmUoKExvY2FsU3RhdGUgc3RhdGUpID0+ICFzdGF0ZS5zZWVuUmV0dXJuT3JUaHJvdykKICAgICAgICAgICAgLm1hcCgoTG9jYWxTdGF0ZSBzdGF0ZSkgPT4gc3RhdGUuX2xvY2FscykpOwogIH0KCiAgdm9pZCBzdGFydExvb3AoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIGlyLk5vZGUgbG9vcCkgewogICAgX2xvY2Fscy5zdGFydExvb3AoaW5mZXJyZXIsIGxvb3ApOwogIH0KCiAgdm9pZCBlbmRMb29wKEluZmVycmVyRW5naW5lIGluZmVycmVyLCBpci5Ob2RlIGxvb3ApIHsKICAgIF9sb2NhbHMuZW5kTG9vcChpbmZlcnJlciwgbG9vcCk7CiAgfQoKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dChTdHJpbmcgaW5kZW50KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdG9TdHJ1Y3R1cmVkVGV4dChzYiwgaW5kZW50KTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgdm9pZCBfdG9TdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IsIFN0cmluZyBpbmRlbnQpIHsKICAgIHNiLndyaXRlKCdMb2NhbFN0YXRlKCRoYXNoQ29kZSkgWycp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FiodIRskBh0mBh8oBhMaBAIBMXBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2J1aWxkZXJfa2VybmVsLmRhcnQ6c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvY2xvc3VyZV90cmFjZXIuZGFydJRILy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29tcGlsZXIuc3JjLmluZmVycmVyLmNsb3N1cmVfdHJhY2VyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVycywgTmFtZXM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICdhYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnZGVidWcuZGFydCcgYXMgZGVidWc7CmltcG9ydCAnaW5mZXJyZXJfZW5naW5lLmRhcnQnOwppbXBvcnQgJ25vZGVfdHJhY2VyLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfbm9kZXMuZGFydCc7CgpjbGFzcyBDbG9zdXJlVHJhY2VyVmlzaXRvciBleHRlbmRzIFRyYWNlclZpc2l0b3IgewogIGZpbmFsIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiB0cmFjZWRFbGVtZW50czsKICBmaW5hbCBMaXN0PENhbGxTaXRlVHlwZUluZm9ybWF0aW9uPiBfY2FsbHNUb0FuYWx5emUgPQogICAgICBuZXcgTGlzdDxDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgQ2xvc3VyZVRyYWNlclZpc2l0b3IodGhpcy50cmFjZWRFbGVtZW50cywgQXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uIHRyYWNlZFR5cGUsCiAgICAgIEluZmVycmVyRW5naW5lIGluZmVycmVyKQogICAgICA6IHN1cGVyKHRyYWNlZFR5cGUsIGluZmVycmVyKSB7CiAgICBhc3NlcnQoCiAgICAgICAgdHJhY2VkRWxlbWVudHMuZXZlcnkoKGYpID0+ICFmLmlzQWJzdHJhY3QpLAogICAgICAgICJUcmFjaW5nIGFic3RyYWN0IG1ldGhvZHM6ICIKICAgICAgICAiJHt0cmFjZWRFbGVtZW50cy53aGVyZSgoZikgPT4gZi5pc0Fic3RyYWN0KX0iKTsKICB9CgogIEBvdmVycmlkZQogIEFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbiBnZXQgdHJhY2VkVHlwZSA9PiBzdXBlci50cmFjZWRUeXBlOwoKICB2b2lkIHJ1bigpIHsKICAgIGFuYWx5emUoKTsKICAgIGlmICghY29udGludWVBbmFseXppbmcpIHJldHVybjsKICAgIF9jYWxsc1RvQW5hbHl6ZS5mb3JFYWNoKF9hbmFseXplQ2FsbCk7CiAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQgaW4gdHJhY2VkRWxlbWVudHMpIHsKICAgICAgaW5mZXJyZXIudHlwZXMuc3RyYXRlZ3kuZm9yRWFjaFBhcmFtZXRlcihlbGVtZW50LCAoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICAgICAgRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBpbmZvID0KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXIocGFyYW1ldGVyKTsKICAgICAgICBpbmZvLmRpc2FibGVJbmZlcmVuY2VGb3JDbG9zdXJlcyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0KICB9CgogIHZvaWQgX3RhZ0FzRnVuY3Rpb25BcHBseVRhcmdldChbU3RyaW5nIHJlYXNvbl0pIHsKICAgIHRyYWNlZFR5cGUubWlnaHRCZVBhc3NlZFRvRnVuY3Rpb25BcHBseSA9IHRydWU7CiAgICBpZiAoZGVidWcuVkVSQk9TRSkgewogICAgICBwcmludCgiQ2xvc3VyZSAkdHJhY2VkVHlwZSBtaWdodCBiZSBwYXNzZWQgdG8gYXBwbHk6ICRyZWFzb24iKTsKICAgIH0KICB9CgogIHZvaWQgX3JlZ2lzdGVyQ2FsbEZvckxhdGVyQW5hbHlzaXMoQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgX2NhbGxzVG9BbmFseXplLmFkZChpbmZvKTsKICB9CgogIHZvaWQgX2FuYWx5emVDYWxsKENhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gaW5mby5zZWxlY3RvcjsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IGluZm8ubWFzazsKICAgIHRyYWNlZEVsZW1lbnRzLmZvckVhY2goKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uRWxlbWVudCkgewogICAgICBpZiAoIXNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUKICAgICAgICAgIC5zaWduYXR1cmVBcHBsaWVzKGZ1bmN0aW9uRWxlbWVudC5wYXJhbWV0ZXJTdHJ1Y3R1cmUpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgICAgaW5mbywgZnVuY3Rpb25FbGVtZW50LCBpbmZvLmFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssCiAgICAgICAgICByZW1vdmU6IGZhbHNlLCBhZGRUb1F1ZXVlOiBmYWxzZSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIGlmIChpbmZvLmNsb3N1cmUgPT0gY3VycmVudFVzZXIpIHsKICAgICAgX3JlZ2lzdGVyQ2FsbEZvckxhdGVyQW5hbHlzaXMoaW5mbyk7CiAgICB9IGVsc2UgewogICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLnZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBNZW1iZXJFbnRpdHkgY2FsbGVkID0gaW5mby5jYWxsZWRFbGVtZW50OwogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbihjYWxsZWQpKSB7CiAgICAgIFN0cmluZyBuYW1lID0gY2FsbGVkLm5hbWU7CiAgICAgIGlmIChuYW1lID09IElkZW50aWZpZXJzLkpTIHx8IG5hbWUgPT0gSWRlbnRpZmllcnMuREFSVF9DTE9TVVJFX1RPX0pTKSB7CiAgICAgICAgYmFpbG91dCgnVXNlZCBpbiBKUyAke2luZm8uZGVidWdOYW1lfScpOwogICAgICB9CiAgICB9CiAgICBpZiAoY2FsbGVkLmlzR2V0dGVyICYmCiAgICAgICAgaW5mby5zZWxlY3RvciAhPSBudWxsICYmCiAgICAgICAgaW5mby5zZWxlY3Rvci5pc0NhbGwgJiYKICAgICAgICBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihjYWxsZWQpID09IGN1cnJlbnRVc2VyKSB7CiAgICAgIC8vIFRoaXMgbm9kZSBjYW4gYmUgYSBjbG9zdXJlIGNhbGwgYXMgd2VsbC4gRm9yIGV4YW1wbGUsIGBmb28oKWAKICAgICAgLy8gd2hlcmUgYGZvb2AgaXMgYSBnZXR0ZXIuCiAgICAgIF9yZWdpc3RlckNhbGxGb3JMYXRlckFuYWx5c2lzKGluZm8pOwogICAgfQogICAgaWYgKF9jaGVja0lmRnVuY3Rpb25BcHBseShjYWxsZWQpICYmCiAgICAgICAgaW5mby5hcmd1bWVudHMgIT0gbnVsbCAmJgogICAgICAgIGluZm8uYXJndW1lbnRzLmNvbnRhaW5zKGN1cnJlbnRVc2VyKSkgewogICAgICBfdGFnQXNGdW5jdGlvbkFwcGx5VGFyZ2V0KCJzdGF0aWMgY2FsbCIpOwogICAgfQogIH0KCiAgYm9vbCBfY2hlY2tJZkN1cnJlbnRVc2VyKE1lbWJlckVudGl0eSBlbGVtZW50KSA9PgogICAgICBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KSA9PSBjdXJyZW50VXNlcjsKCiAgYm9vbCBfY2hlY2tJZkZ1bmN0aW9uQXBwbHkoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBpbmZlcnJlci5jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pc0Z1bmN0aW9uQXBwbHlNZXRob2QoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBpZiAoaW5mby5zZWxlY3Rvci5pc0NhbGwpIHsKICAgICAgaWYgKGluZm8uYXJndW1lbnRzLmNvbnRhaW5zKGN1cnJlbnRVc2VyKSkgewogICAgICAgIGlmIChpbmZvLmhhc0Nsb3N1cmVDYWxsVGFyZ2V0cyB8fAogICAgICAgICAgICBpbmZvLmNvbmNyZXRlVGFyZ2V0cy5hbnkoKGVsZW1lbnQpID0+ICFlbGVtZW50LmlzRnVuY3Rpb24pKSB7CiAgICAgICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgICAgICAgfQogICAgICAgIGlmIChpbmZvLmNvbmNyZXRlVGFyZ2V0cy5hbnkoX2NoZWNrSWZGdW5jdGlvbkFwcGx5KSkgewogICAgICAgICAgX3RhZ0FzRnVuY3Rpb25BcHBseVRhcmdldCgiZHluYW1pYyBjYWxsIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGluZm8uY29uY3JldGVUYXJnZXRzLmFueShfY2hlY2tJZkN1cnJlbnRVc2VyKSkgewogICAgICAgIF9yZWdpc3RlckNhbGxGb3JMYXRlckFuYWx5c2lzKGluZm8pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGluZm8uc2VsZWN0b3IuaXNHZXR0ZXIgJiYKICAgICAgICBpbmZvLnNlbGVjdG9yLm1lbWJlck5hbWUgPT0gTmFtZXMuY2FsbCkgewogICAgICAvLyBXZSBhcmUgcG90ZW50aWFsbHkgdGVhcmluZyBvZmYgb3Vyc2VsZiBoZXJlCiAgICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogICAgfQogIH0KfQoKY2xhc3MgU3RhdGljVGVhck9mZkNsb3N1cmVUcmFjZXJWaXNpdG9yIGV4dGVuZHMgQ2xvc3VyZVRyYWNlclZpc2l0b3IgewogIFN0YXRpY1RlYXJPZmZDbG9zdXJlVHJhY2VyVmlzaXRvcigKICAgICAgRnVuY3Rpb25FbnRpdHkgdHJhY2VkRWxlbWVudCwgdHJhY2VkVHlwZSwgaW5mZXJyZXIpCiAgICAgIDogc3VwZXIoW3RyYWNlZEVsZW1lbnRdLCB0cmFjZWRUeXBlLCBpbmZlcnJlcik7CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIGlmIChpbmZvLmNhbGxlZEVsZW1lbnQgPT0gdHJhY2VkRWxlbWVudHMuZmlyc3QgJiYKICAgICAgICBpbmZvLnNlbGVjdG9yICE9IG51bGwgJiYKICAgICAgICBpbmZvLnNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogICAgfQogIH0KfQqAmABOTjwBLgE3JDIlHh8bIAEzMTgrAVEfJgw0JTkEAQw/AQ8PJCs1TCZCMgoGBAE0NBlGBgQBRR8EATQnJD4iQxAIK0EtCAQBDE01JysNJgYEAQxLNC5BIU4xCAYbISBJRyIrBikiMDAGBAE0RgE1TwQBDE01IDIqSioKPzUKQi0IKTI1JQYEAgFHJTo2AQxLNDYhIiUGBAIBMXBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2Nsb3N1cmVfdHJhY2VyLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvZGVidWcuZGFydIHpLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBWYWx1ZXMgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcgdHlwZSBpbmZlcmVuY2UuCmxpYnJhcnkgY29tcGlsZXIuc3JjLmluZmVycmVyLmRlYnVnOwoKY29uc3QgYm9vbCBWRVJCT1NFID0gZmFsc2U7CmNvbnN0IGJvb2wgUFJJTlRfU1VNTUFSWSA9IGZhbHNlOwpjb25zdCBib29sIEFOT01BTFlfV0FSTiA9IGZhbHNlOwpib29sIFBSSU5UX0dSQVBIID0gZmFsc2U7CmJvb2wgUFJJTlRfR1JBUEhfQUxMX05PREVTID0gZmFsc2U7IC8vIEluY2x1ZGUgdXNlbGVzcyBub2Rlcz8KDgBOTjwBMyUBHCIhGj4BKHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2RlYnVnLmRhcnQ6c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvbG9jYWxzX2hhbmRsZXIuZGFydMAAUY4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBsb2NhbHNfaGFuZGxlcjsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IEl0ZXJhYmxlTWl4aW47CmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwoKLy8vIEEgdmFyaWFibGUgc2NvcGUgaG9sZHMgdHlwZXMgZm9yIHZhcmlhYmxlcy4gSXQgaGFzIGEgbGluayB0byBhCi8vLyBwYXJlbnQgc2NvcGUsIGJ1dCBuZXZlciBjaGFuZ2VzIHRoZSB0eXBlcyBpbiB0aGF0IHBhcmVudC4gSW5zdGVhZCwKLy8vIHVwZGF0ZXMgdG8gbG9jYWxzIG9mIGEgcGFyZW50IHNjb3BlIGFyZSBwdXQgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCi8vLyBUaGUgaW5mZXJyZXIgbWFrZXMgc3VyZSB1cGRhdGVzIGdldCBtZXJnZWQgaW50byB0aGUgcGFyZW50IHNjb3BlLAovLy8gb25jZSB0aGUgY29udHJvbCBmbG93IGJsb2NrIGhhcyBiZWVuIHZpc2l0ZWQuCmNsYXNzIFZhcmlhYmxlU2NvcGUgewogIC8vLyBUaGUgbnVtYmVyIG9mIHBhcmVudCBzY29wZXMgb2YgdGhpcyBzY29wZS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBjb21wdXRpbmcgY29tbW9uIHBhcmVudHMgZWZmaWNpZW50bHkuCiAgZmluYWwgaW50IF9sZXZlbDsKCiAgTWFwPExvY2FsLCBUeXBlSW5mb3JtYXRpb24+IHZhcmlhYmxlczsKCiAgLy8vIFRoZSBwYXJlbnQgb2YgdGhpcyBzY29wZS4gTnVsbCBmb3IgdGhlIHJvb3Qgc2NvcGUuCiAgZmluYWwgVmFyaWFibGVTY29wZSBwYXJlbnQ7CgogIC8vLyBUaGUgW2lyLk5vZGVdIHRoYXQgY3JlYXRlZCB0aGlzIHNjb3BlLgogIGZpbmFsIGlyLk5vZGUgdHJ5QmxvY2s7CgogIGZpbmFsIFZhcmlhYmxlU2NvcGUgY29weU9mOwoKICBWYXJpYWJsZVNjb3BlKHt0aGlzLnBhcmVudH0pCiAgICAgIDogdGhpcy52YXJpYWJsZXMgPSBudWxsLAogICAgICAgIHRoaXMuY29weU9mID0gbnVsbCwKICAgICAgICB0aGlzLnRyeUJsb2NrID0gbnVsbCwKICAgICAgICBfbGV2ZWwgPSAocGFyZW50Py5fbGV2ZWwgPz8gLTEpICsgMTsKCiAgVmFyaWFibGVTY29wZS50cnlCbG9jayh0aGlzLnRyeUJsb2NrLCB7dGhpcy5wYXJlbnR9KQogICAgICA6IHRoaXMudmFyaWFibGVzID0gbnVsbCwKICAgICAgICB0aGlzLmNvcHlPZiA9IG51bGwsCiAgICAgICAgX2xldmVsID0gKHBhcmVudD8uX2xldmVsID8/IC0xKSArIDEgewogICAgYXNzZXJ0KHRyeUJsb2NrIGlzIGlyLlRyeUNhdGNoIHx8IHRyeUJsb2NrIGlzIGlyLlRyeUZpbmFsbHksCiAgICAgICAgIlVuZXhwZWN0ZWQgYmxvY2sgJHRyeUJsb2NrIGZvciBWYXJpYWJsZVNjb3BlLnRyeUJsb2NrIik7CiAgfQoKICBWYXJpYWJsZVNjb3BlLmRlZXBDb3B5T2YoVmFyaWFibGVTY29wZSBvdGhlcikKICAgICAgOiB2YXJpYWJsZXMgPSBvdGhlci52YXJpYWJsZXMgPT0gbnVsbAogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgOiBuZXcgTWFwPExvY2FsLCBUeXBlSW5mb3JtYXRpb24+LmZyb20ob3RoZXIudmFyaWFibGVzKSwKICAgICAgICB0cnlCbG9jayA9IG90aGVyLnRyeUJsb2NrLAogICAgICAgIGNvcHlPZiA9IG90aGVyLmNvcHlPZiA/PyBvdGhlciwKICAgICAgICBfbGV2ZWwgPSBvdGhlci5fbGV2ZWwsCiAgICAgICAgcGFyZW50ID0gb3RoZXIucGFyZW50ID09IG51bGwKICAgICAgICAgICAgPyBudWxsCiAgICAgICAgICAgIDogbmV3IFZhcmlhYmxlU2NvcGUuZGVlcENvcHlPZihvdGhlci5wYXJlbnQpOwoKICAvLy8gYHRydWVgIGlmIHRoaXMgc2NvcGUgaXMgZm9yIGEgdHJ5IGJsb2NrLgogIGJvb2wgZ2V0IGlzVHJ5ID0+IHRyeUJsb2NrICE9IG51bGw7CgogIC8vLyBSZXR1cm5zIHRoZSBbVmFyaWFibGVTY29wZV0gdGhhdCBkZWZpbmVzIHRoZSBpZGVudGl0eSBvZiB0aGlzIHNjb3BlLgogIC8vLwogIC8vLyBJZiB0aGlzIHNjb3BlIGlzIGEgY29weSBvZiBhbm90aGVyIHNjb3BlLCB0aGUgaWRlbnRpdHkgaXMgdGhlIGlkZW50aXR5CiAgLy8vIG9mIHRoZSBvdGhlciBzY29wZSwgb3RoZXJ3aXNlIHRoZSBpZGVudGl0eSBpcyB0aGUgc2NvcGUgaXRzZWxmLgogIFZhcmlhYmxlU2NvcGUgZ2V0IGlkZW50aXR5ID0+IGNvcHlPZiA/PyB0aGlzOwoKICAvLy8gUmV0dXJucyB0aGUgY29tbW9uIHBhcmVudCBiZXR3ZWVuIHRoaXMgYW5kIFtvdGhlcl0gYmFzZWQgb24gW2lkZW50aXR5XS4KICBWYXJpYWJsZVNjb3BlIGNvbW1vblBhcmVudChWYXJpYWJsZVNjb3BlIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpdHkgPT0gb3RoZXIuaWRlbnRpdHkpIHsKICAgICAgcmV0dXJuIGlkZW50aXR5OwogICAgfSBlbHNlIGlmIChfbGV2ZWwgPiBvdGhlci5fbGV2ZWwpIHsKICAgICAgcmV0dXJuIHBhcmVudC5jb21tb25QYXJlbnQob3RoZXIpOwogICAgfSBlbHNlIGlmIChfbGV2ZWwgPCBvdGhlci5fbGV2ZWwpIHsKICAgICAgcmV0dXJuIGNvbW1vblBhcmVudChvdGhlci5wYXJlbnQpOwogICAgfSBlbHNlIGlmIChfbGV2ZWwgPiAwKSB7CiAgICAgIHJldHVybiBwYXJlbnQuY29tbW9uUGFyZW50KG90aGVyLnBhcmVudCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIFR5cGVJbmZvcm1hdGlvbiBvcGVyYXRvciBbXShMb2NhbCB2YXJpYWJsZSkgewogICAgVHlwZUluZm9ybWF0aW9uIHJlc3VsdDsKICAgIGlmICh2YXJpYWJsZXMgPT0gbnVsbCB8fCAocmVzdWx0ID0gdmFyaWFibGVzW3ZhcmlhYmxlXSkgPT0gbnVsbCkgewogICAgICByZXR1cm4gcGFyZW50ID09IG51bGwgPyBudWxsIDogcGFyZW50W3ZhcmlhYmxlXTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIG1hc2spIHsKICAgIGFzc2VydChtYXNrICE9IG51bGwpOwogICAgaWYgKHZhcmlhYmxlcyA9PSBudWxsKSB7CiAgICAgIHZhcmlhYmxlcyA9IG5ldyBNYXA8TG9jYWwsIFR5cGVJbmZvcm1hdGlvbj4oKTsKICAgIH0KICAgIHZhcmlhYmxlc1t2YXJpYWJsZV0gPSBtYXNrOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgYWxsIHZhcmlhYmxlcyBpbiB0aGlzIGFuZCBwYXJlbnQgc2NvcGVzIHVudGlsIGFuZCBpbmNsdWRpbmcKICAvLy8gW3Njb3BlXS4gW2ZdIGlzIGNhbGxlZCBhdCBtb3N0IG9uY2UgZm9yIGVhY2ggdmFyaWFibGUuCiAgdm9pZCBmb3JFYWNoTG9jYWxVbnRpbFNjb3BlKAogICAgICBWYXJpYWJsZVNjb3BlIHNjb3BlLCB2b2lkIGYoTG9jYWwgdmFyaWFibGUsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSkgewogICAgX2ZvckVhY2hMb2NhbFVudGlsU2NvcGUoc2NvcGUsIGYsIG5ldyBTZXRsZXQ8TG9jYWw+KCksIHRoaXMpOwogIH0KCiAgdm9pZCBfZm9yRWFjaExvY2FsVW50aWxTY29wZSgKICAgICAgVmFyaWFibGVTY29wZSBzY29wZSwKICAgICAgdm9pZCBmKExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gdHlwZSksCiAgICAgIFNldGxldDxMb2NhbD4gc2VlbkxvY2FscywKICAgICAgVmFyaWFibGVTY29wZSBvcmlnaW4pIHsKICAgIGlmICh2YXJpYWJsZXMgIT0gbnVsbCkgewogICAgICB2YXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGUsIHR5cGUpIHsKICAgICAgICBpZiAoc2VlbkxvY2Fscy5jb250YWlucyh2YXJpYWJsZSkpIHJldHVybjsKICAgICAgICBzZWVuTG9jYWxzLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgZih2YXJpYWJsZSwgdHlwZSk7CiAgICAgIH0pOwogICAgfQogICAgaWYgKHNjb3BlPy5pZGVudGl0eSA9PSBpZGVudGl0eSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocGFyZW50ICE9IG51bGwpIHsKICAgICAgcGFyZW50Ll9mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKHNjb3BlLCBmLCBzZWVuTG9jYWxzLCBvcmlnaW4pOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KAogICAgICAgICAgc2NvcGUgPT0gbnVsbCwKICAgICAgICAgICJTY29wZSBub3QgZm91bmQ6IFxuIgogICAgICAgICAgIm9yaWdpbj0ke29yaWdpbi50b1N0cnVjdHVyZWRUZXh0KCcnKX1cbiIKICAgICAgICAgICJzY29wZT0ke3Njb3BlLnRvU3RydWN0dXJlZFRleHQoJycpfSIpOwogICAgfQogIH0KCiAgdm9pZCBmb3JFYWNoTG9jYWwodm9pZCBmKExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkpIHsKICAgIGZvckVhY2hMb2NhbFVudGlsU2NvcGUobnVsbCwgZik7CiAgfQoKICBib29sIHVwZGF0ZXMoTG9jYWwgdmFyaWFibGUpIHsKICAgIGlmICh2YXJpYWJsZXMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHZhcmlhYmxlcy5jb250YWluc0tleSh2YXJpYWJsZSk7CiAgfQoKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dChTdHJpbmcgaW5kZW50KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdG9TdHJ1Y3R1cmVkVGV4dChzYiwgaW5kZW50KTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgdm9pZCBfdG9TdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IsIFN0cmluZyBpbmRlbnQpIHsKICAgIHNiLndyaXRlKCdWYXJpYWJsZVNjb3BlKCRoYXNoQ29kZSkgWycpOwogICAgc2Iud3JpdGUoJ1xuJHtpbmRlbnR9ICBsZXZlbDokX2xldmVsJyk7CiAgICBpZiAoY29weU9mICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuJHtpbmRlbnR9ICBjb3B5T2Y6VmFyaWFibGVTY29wZSgke2NvcHlPZi5oYXNoQ29kZX0pJyk7CiAgICB9CiAgICBpZiAodHJ5QmxvY2sgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIHRyeUJsb2NrOiAke25vZGVUb0RlYnVnU3RyaW5nKHRyeUJsb2NrKX0nKTsKICAgIH0KICAgIGlmICh2YXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIHZhcmlhYmxlczonKTsKICAgICAgdmFyaWFibGVzLmZvckVhY2goKExvY2FsIGxvY2FsLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgICAgIHNiLndyaXRlKCdcbiR7aW5kZW50fSAgICAkbG9jYWw6ICcpOwogICAgICAgIHNiLndyaXRlKHR5cGUudG9TdHJ1Y3R1cmVkVGV4dCgnJHtpbmRlbnR9ICAgICAgJykpOwogICAgICB9KTsKICAgIH0KICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIHBhcmVudDonKTsKICAgICAgcGFyZW50Ll90b1N0cnVjdHVyZWRUZXh0KHNiLCAnJHtpbmRlbnR9ICAgICAnKTsKICAgIH0KICAgIHNiLndyaXRlKCddJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgcmVzdCA9IHBhcmVudCA9PSBudWxsID8gIm51bGwiIDogcGFyZW50LnRvU3RyaW5nKCk7CiAgICByZXR1cm4gJ3skdmFyaWFibGVzfSAkcmVzdCc7CiAgfQp9CgovLy8gVHJhY2tzIGluaXRpYWxpemVycyB2aWEgaW5pdGlhbGl6YXRpb25zIGFuZCBhc3NpZ25tZW50cy4KY2xhc3MgRmllbGRJbml0aWFsaXphdGlvblNjb3BlIHsKICBNYXA8RmllbGRFbnRpdHksIFR5cGVJbmZvcm1hdGlvbj4gZmllbGRzOwogIGJvb2wgaXNUaGlzRXhwb3NlZDsKCiAgLy8vIGB0cnVlYCB3aGVuIGNvbnRyb2wgZmxvdyBwcmV2ZW50cyBhY2N1bXVsYXRpbmcgZGVmaW5pdGUgYXNzaWdubWVudHMsCiAgLy8vIGUuZy4gYW4gZWFybHkgcmV0dXJuIG9yIGNhdWdodCBleGNlcHRpb24uCiAgYm9vbCBpc0luZGVmaW5pdGU7CgogIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSgpCiAgICAgIDogaXNUaGlzRXhwb3NlZCA9IGZhbHNlLAogICAgICAgIGlzSW5kZWZpbml0ZSA9IGZhbHNlOwoKICBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUuaW50ZXJuYWxGcm9tKEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSBvdGhlcikKICAgICAgOiBpc1RoaXNFeHBvc2VkID0gb3RoZXIuaXNUaGlzRXhwb3NlZCwKICAgICAgICBpc0luZGVmaW5pdGUgPSBvdGhlci5pc0luZGVmaW5pdGU7CgogIGZhY3RvcnkgRmllbGRJbml0aWFsaXphdGlvblNjb3BlLmZyb20oRmllbGRJbml0aWFsaXphdGlvblNjb3BlIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZS5pbnRlcm5hbEZyb20ob3RoZXIpOwogIH0KCiAgdm9pZCB1cGRhdGVGaWVsZChGaWVsZEVudGl0eSBmaWVsZCwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgIGlmIChpc1RoaXNFeHBvc2VkKSByZXR1cm47CiAgICBpZiAoaXNJbmRlZmluaXRlKSByZXR1cm47CiAgICBmaWVsZHMgPz89IG5ldyBNYXA8RmllbGRFbnRpdHksIFR5cGVJbmZvcm1hdGlvbj4oKTsKICAgIGZpZWxkc1tmaWVsZF0gPSB0eXBlOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHJlYWRGaWVsZChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIGZpZWxkcyA9PSBudWxsID8gbnVsbCA6IGZpZWxkc1tmaWVsZF07CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEZpZWxkRW50aXR5IGVsZW1lbnQsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSkgewogICAgZmllbGRzPy5mb3JFYWNoKGYpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGpvaW4gYmV0d2VlbiBbdGhlblNjb3BlXSBhbmQgW2Vsc2VTY29wZV0gd2hpY2ggbW9kZWxzIHRoZQogIC8vLyBmbG93IHRocm91Z2ggZWl0aGVyIFt0aGVuU2NvcGVdIG9yIFtlbHNlU2NvcGVdLgogIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSBtZXJnZURpYW1vbmRGbG93KEluZmVycmVyRW5naW5lIGluZmVycmVyLAogICAgICBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgdGhlblNjb3BlLCBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgZWxzZVNjb3BlKSB7CiAgICBhc3NlcnQoZWxzZVNjb3BlICE9IG51bGwpOwoKICAgIC8vIFF1aWNrIGJhaWxvdXQgY2hlY2suIElmIFtpc1RoaXNFeHBvc2VkXSBvciBbaXNJbmRlZmluaXRlXSBpcyB0cnVlLCB3ZQogICAgLy8ga25vdyB0aGUgY29kZSBmb2xsb3dpbmcgd29uJ1R5cGVJbmZvcm1hdGlvbiBkbyBhbnl0aGluZy4KICAgIGlmIChpc1RoaXNFeHBvc2VkKSByZXR1cm4gdGhpczsKICAgIGlmIChpc0luZGVmaW5pdGUpIHJldHVybiB0aGlzOwoKICAgIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSBvdGhlclNjb3BlID0KICAgICAgICBlbHNlU2NvcGUuZmllbGRzID09IG51bGwgPyB0aGlzIDogZWxzZVNjb3BlOwoKICAgIHRoZW5TY29wZS5mb3JFYWNoKChGaWVsZEVudGl0eSBmaWVsZCwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG90aGVyVHlwZSA9IG90aGVyU2NvcGUucmVhZEZpZWxkKGZpZWxkKTsKICAgICAgaWYgKG90aGVyVHlwZSA9PSBudWxsKSByZXR1cm47CiAgICAgIHVwZGF0ZUZpZWxkKGZpZWxkLCBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZURpYW1vbmRQaGkodHlwZSwgb3RoZXJUeXBlKSk7CiAgICB9KTsKCiAgICBpc1RoaXNFeHBvc2VkID0gdGhlblNjb3BlLmlzVGhpc0V4cG9zZWQgfHwgZWxzZVNjb3BlLmlzVGhpc0V4cG9zZWQ7CiAgICBpc0luZGVmaW5pdGUgPSB0aGVuU2NvcGUuaXNJbmRlZmluaXRlIHx8IGVsc2VTY29wZS5pc0luZGVmaW5pdGU7CiAgICByZXR1cm4gdGhpczsKICB9Cn0KCi8vLyBQbGFjZWhvbGRlciBmb3IgaW5mZXJyZWQgYXJndW1lbnRzIHR5cGVzIG9uIHNlbmRzLgpjbGFzcyBBcmd1bWVudHNUeXBlcyBleHRlbmRzIEl0ZXJhYmxlTWl4aW48VHlwZUluZm9ybWF0aW9uPiB7CiAgZmluYWwgTGlzdDxUeXBlSW5mb3JtYXRpb24+IHBvc2l0aW9uYWw7CiAgZmluYWwgTWFwPFN0cmluZywgVHlwZUluZm9ybWF0aW9uPiBuYW1lZDsKICBBcmd1bWVudHNUeXBlcyh0aGlzLnBvc2l0aW9uYWwsIG5hbWVkKQogICAgICA6IHRoaXMubmFtZWQgPSAobmFtZWQgPT0gbnVsbCB8fCBuYW1lZC5pc0VtcHR5KSA/IGNvbnN0IHt9IDogbmFtZWQgewogICAgYXNzZXJ0KHRoaXMucG9zaXRpb25hbC5ldmVyeSgoVHlwZUluZm9ybWF0aW9uIHR5cGUpID0+IHR5cGUgIT0gbnVsbCkpOwogICAgYXNzZXJ0KHRoaXMubmFtZWQudmFsdWVzLmV2ZXJ5KChUeXBlSW5mb3JtYXRpb24gdHlwZSkgPT4gdHlwZSAhPSBudWxsKSk7CiAgfQoKICBBcmd1bWVudHNUeXBlcy5lbXB0eSgpCiAgICAgIDogcG9zaXRpb25hbCA9IGNvbnN0IFtdLAogICAgICAgIG5hbWVkID0gY29uc3Qge307CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IHBvc2l0aW9uYWwubGVuZ3RoICsgbmFtZWQubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxUeXBlSW5mb3JtYXRpb24+IGdldCBpdGVyYXRvciA9PiBuZXcgQXJndW1lbnRzVHlwZXNJdGVyYXRvcih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gInsgcG9zaXRpb25hbCA9ICRwb3NpdGlvbmFsLCBuYW1lZCA9ICRuYW1lZCB9IjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKHBvc2l0aW9uYWwubGVuZ3RoICE9IG90aGVyLnBvc2l0aW9uYWwubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobmFtZWQubGVuZ3RoICE9IG90aGVyLm5hbWVkLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3NpdGlvbmFsLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChwb3NpdGlvbmFsW2ldICE9IG90aGVyLnBvc2l0aW9uYWxbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciByZXN1bHQgPSB0cnVlOwogICAgbmFtZWQuZm9yRWFjaCgobmFtZSwgdHlwZSkgewogICAgICBpZiAob3RoZXIubmFtZWRbbmFtZV0gIT0gdHlwZSkgcmVzdWx0ID0gZmFsc2U7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdBcmd1bWVudHNUeXBlcy5oYXNoQ29kZScpOwoKICBib29sIGhhc05vQXJndW1lbnRzKCkgPT4gcG9zaXRpb25hbC5pc0VtcHR5ICYmIG5hbWVkLmlzRW1wdHk7CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGYoVHlwZUluZm9ybWF0aW9uIHR5cGUpKSB7CiAgICBwb3NpdGlvbmFsLmZvckVhY2goZik7CiAgICBuYW1lZC52YWx1ZXMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZXZlcnkoYm9vbCBmKFR5cGVJbmZvcm1hdGlvbiB0eXBlKSkgewogICAgcmV0dXJuIHBvc2l0aW9uYWwuZXZlcnkoZikgJiYgbmFtZWQudmFsdWVzLmV2ZXJ5KGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhPYmplY3QgdHlwZSkgewogICAgcmV0dXJuIHBvc2l0aW9uYWwuY29udGFpbnModHlwZSkgfHwgbmFtZWQuY29udGFpbnNWYWx1ZSh0eXBlKTsKICB9Cn0KCmNsYXNzIEFyZ3VtZW50c1R5cGVzSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxUeXBlSW5mb3JtYXRpb24+IHsKICBmaW5hbCBJdGVyYXRvcjxUeXBlSW5mb3JtYXRpb24+IHBvc2l0aW9uYWw7CiAgZmluYWwgSXRlcmF0b3I8VHlwZUluZm9ybWF0aW9uPiBuYW1lZDsKICBib29sIF9pdGVyYXRlUG9zaXRpb25hbCA9IHRydWU7CgogIEFyZ3VtZW50c1R5cGVzSXRlcmF0b3IoQXJndW1lbnRzVHlwZXMgaXRlcmF0ZWUpCiAgICAgIDogcG9zaXRpb25hbCA9IGl0ZXJhdGVlLnBvc2l0aW9uYWwuaXRlcmF0b3IsCiAgICAgICAgbmFtZWQgPSBpdGVyYXRlZS5uYW1lZC52YWx1ZXMuaXRlcmF0b3I7CgogIEl0ZXJhdG9yPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IF9jdXJyZW50SXRlcmF0b3IgPT4KICAgICAgX2l0ZXJhdGVQb3NpdGlvbmFsID8gcG9zaXRpb25hbCA6IG5hbWVkOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnRJdGVyYXRvci5jdXJyZW50OwoKICBAb3ZlcnJpZGUKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9pdGVyYXRlUG9zaXRpb25hbCAmJiBwb3NpdGlvbmFsLm1vdmVOZXh0KCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfaXRlcmF0ZVBvc2l0aW9uYWwgPSBmYWxzZTsKICAgIHJldHVybiBuYW1lZC5tb3ZlTmV4dCgpOwogIH0KfQoKLy8vIFBsYWNlaG9sZGVyIGZvciBpbmZlcnJlZCB0eXBlcyBvZiBsb2NhbCB2YXJpYWJsZXMuCmNsYXNzIExvY2Fsc0hhbmRsZXIgewogIGZpbmFsIFZhcmlhYmxlU2NvcGUgX2xvY2FsczsKCiAgTG9jYWxzSGFuZGxlcigpIDogX2xvY2FscyA9IG5ldyBWYXJpYWJsZVNjb3BlKCk7CgogIExvY2Fsc0hhbmRsZXIuZnJvbShMb2NhbHNIYW5kbGVyIG90aGVyKQogICAgICA6IF9sb2NhbHMgPSBuZXcgVmFyaWFibGVTY29wZShwYXJlbnQ6IG90aGVyLl9sb2NhbHMpOwoKICBMb2NhbHNIYW5kbGVyLnRyeUJsb2NrKExvY2Fsc0hhbmRsZXIgb3RoZXIsIGlyLlRyZWVOb2RlIGJsb2NrKQogICAgICA6IF9sb2NhbHMgPSBuZXcgVmFyaWFibGVTY29wZS50cnlCbG9jayhibG9jaywgcGFyZW50OiBvdGhlci5fbG9jYWxzKTsKCiAgTG9jYWxzSGFuZGxlci5kZWVwQ29weU9mKExvY2Fsc0hhbmRsZXIgb3RoZXIpCiAgICAgIDogX2xvY2FscyA9IG5ldyBWYXJpYWJsZVNjb3BlLmRlZXBDb3B5T2Yob3RoZXIuX2xvY2Fscyk7CgogIFR5cGVJbmZvcm1hdGlvbiB1c2UoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIExvY2FsIGxvY2FsKSB7CiAgICByZXR1cm4gX2xvY2Fsc1tsb2NhbF07CiAgfQoKICB2b2lkIHVwZGF0ZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgTG9jYWwgbG9jYWwsIFR5cGVJbmZvcm1hdGlvbiB0eXBlLAogICAgICBpci5Ob2RlIG5vZGUsIERhcnRUeXBlIHN0YXRpY1R5cGUsIExvY2Fsc0hhbmRsZXIgdHJ5QmxvY2spIHsKICAgIGlmICh0cnlCbG9jayAhPSBudWxsKSB7CiAgICAgIC8vIFdlIGRvbid0IGtub3cgaWYgYW4gYXNzaWdubWVudCBpbiBhIHRyeSBibG9jawogICAgICAvLyB3aWxsIGJlIGV4ZWN1dGVkLCBzbyBhbGwgYXNzaWdubWVudHMgaW4gdGhhdCBibG9jayBhcmUKICAgICAgLy8gcG90ZW50aWFsIHR5cGVzIGFmdGVyIHdlIGhhdmUgbGVmdCBpdC4gV2UgdXBkYXRlIHRoZSBwYXJlbnQKICAgICAgLy8gb2YgdGhlIHRyeSBibG9jayBzbyB0aGF0LCBhdCBleGl0IG9mIHRoZSB0cnkgYmxvY2ssIHdlIGdldAogICAgICAvLyB0aGUgcmlnaHQgcGhpIGZvciBpdC4KICAgICAgVHlwZUluZm9ybWF0aW9uIGV4aXN0aW5nID0gdHJ5QmxvY2suX2xvY2Fscy5wYXJlbnRbbG9jYWxdOwogICAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBwaGlUeXBlID0gaW5mZXJyZXIudHlwZXMuYWxsb2NhdGVQaGkoCiAgICAgICAgICAgIHRyeUJsb2NrLl9sb2NhbHMudHJ5QmxvY2ssIGxvY2FsLCBleGlzdGluZywKICAgICAgICAgICAgaXNUcnk6IHRyeUJsb2NrLl9sb2NhbHMuaXNUcnkpOwogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBpbnB1dFR5cGUgPQogICAgICAgICAgICBpbmZlcnJlci50eXBlcy5hZGRQaGlJbnB1dChsb2NhbCwgcGhpVHlwZSwgdHlwZSk7CiAgICAgICAgdHJ5QmxvY2suX2xvY2Fscy5wYXJlbnRbbG9jYWxdID0gaW5wdXRUeXBlOwogICAgICB9CiAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBoYW5kbGVyIHVuY29uZGl0aW9uYWxseSB3aXRoIHRoZSBuZXcKICAgICAgLy8gdHlwZS4KICAgICAgX2xvY2Fsc1tsb2NhbF0gPSB0eXBlOwogICAgfSBlbHNlIHsKICAgICAgX2xvY2Fsc1tsb2NhbF0gPSB0eXBlOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIGpvaW4gYmV0d2VlbiB0aGlzIGxvY2FscyBoYW5kbGVyIGFuZCBbb3RoZXJdIHdoaWNoIG1vZGVscyB0aGUKICAvLy8gZmxvdyB0aHJvdWdoIGVpdGhlciB0aGlzIG9yIFtvdGhlcl0uCiAgLy8vCiAgLy8vIElmIFtpblBsYWNlXSBpcyBgdHJ1ZWAsIHRoZSB2YXJpYWJsZSB0eXBlcyBpbiB0aGlzIGxvY2FscyBoYW5kbGVyIGFyZQogIC8vLyByZXBsYWNlZCBieSB0aGUgdmFyaWFibGVzIHR5cGVzIGluIFtvdGhlcl0uIE90aGVyd2lzZSB0aGUgdmFyaWFibGUgdHlwZXMKICAvLy8gZnJvbSBib3RoIGFyZSBtZXJnZWQgd2l0aCBhIHBoaSB0eXBlLgogIExvY2Fsc0hhbmRsZXIgbWVyZ2VGbG93KEluZmVycmVyRW5naW5lIGluZmVycmVyLCBMb2NhbHNIYW5kbGVyIG90aGVyLAogICAgICB7Ym9vbCBpblBsYWNlOiBmYWxzZX0pIHsKICAgIFZhcmlhYmxlU2NvcGUgY29tbW9uID0gX2xvY2Fscy5jb21tb25QYXJlbnQob3RoZXIuX2xvY2Fscyk7CiAgICBhc3NlcnQoCiAgICAgICAgY29tbW9uICE9IG51bGwsCiAgICAgICAgIk5vIGNvbW1vbiBwYXJlbnQgZm9yXG4iCiAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgIjI6JHtvdGhlci5fbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9Iik7CiAgICBhc3NlcnQoCiAgICAgICAgY29tbW9uID09IF9sb2NhbHMgfHwgX2xvY2Fscy52YXJpYWJsZXMgPT0gbnVsbCwKICAgICAgICAiTm9uLWVtcHR5IGNvbW1vbiBwYXJlbnQgZm9yXG4iCiAgICAgICAgIjE6JHtjb21tb24udG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAiMjoke19sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgIG90aGVyLl9sb2NhbHMuZm9yRWFjaExvY2FsVW50aWxTY29wZShjb21tb24sCiAgICAgICAgKExvY2FsIGxvY2FsLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbXlUeXBlID0gX2xvY2Fsc1tsb2NhbF07CiAgICAgIGlmIChteVR5cGUgPT0gbnVsbCkgcmV0dXJuOyAvLyBWYXJpYWJsZSBpcyBvbmx5IGRlZmluZWQgaW4gW290aGVyXS4KICAgICAgaWYgKHR5cGUgPT0gbXlUeXBlKSByZXR1cm47CiAgICAgIF9sb2NhbHNbbG9jYWxdID0KICAgICAgICAgIGluUGxhY2UgPyB0eXBlIDogaW5mZXJyZXIudHlwZXMuYWxsb2NhdGVEaWFtb25kUGhpKG15VHlwZSwgdHlwZSk7CiAgICB9KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGpvaW4gYmV0d2VlbiBbdGhlbkJyYW5jaF0gYW5kIFtlbHNlQnJhbmNoXSB3aGljaCBtb2RlbHMgdGhlCiAgLy8vIGZsb3cgdGhyb3VnaCBlaXRoZXIgW3RoZW5CcmFuY2hdIG9yIFtlbHNlQnJhbmNoXS4KICBMb2NhbHNIYW5kbGVyIG1lcmdlRGlhbW9uZEZsb3coSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsCiAgICAgIExvY2Fsc0hhbmRsZXIgdGhlbkJyYW5jaCwgTG9jYWxzSGFuZGxlciBlbHNlQnJhbmNoKSB7CiAgICBhc3NlcnQoZWxzZUJyYW5jaCAhPSBudWxsKTsKCiAgICB2b2lkIG1lcmdlTG9jYWwoTG9jYWwgbG9jYWwpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG15VHlwZSA9IF9sb2NhbHNbbG9jYWxdOwogICAgICBpZiAobXlUeXBlID09IG51bGwpIHJldHVybjsKICAgICAgVHlwZUluZm9ybWF0aW9uIGVsc2VUeXBlID0gZWxzZUJyYW5jaC5fbG9jYWxzW2xvY2FsXTsKICAgICAgVHlwZUluZm9ybWF0aW9uIHRoZW5UeXBlID0gdGhlbkJyYW5jaC5fbG9jYWxzW2xvY2FsXTsKICAgICAgaWYgKHRoZW5UeXBlID09IGVsc2VUeXBlKSB7CiAgICAgICAgX2xvY2Fsc1tsb2NhbF0gPSB0aGVuVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfbG9jYWxzW2xvY2FsXSA9IGluZmVycmVyLnR5cGVzLmFsbG9jYXRlRGlhbW9uZFBoaSh0aGVuVHlwZSwgZWxzZVR5cGUpOwogICAgICB9CiAgICB9CgogICAgVmFyaWFibGVTY29wZSBjb21tb24gPSBfbG9jYWxzLmNvbW1vblBhcmVudCh0aGVuQnJhbmNoLl9sb2NhbHMpOwogICAgYXNzZXJ0KAogICAgICAgIGNvbW1vbiAhPSBudWxsLAogICAgICAgICJObyBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICIxOiR7X2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuIgogICAgICAgICIyOiR7dGhlbkJyYW5jaC5fbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9Iik7CiAgICBhc3NlcnQoCiAgICAgICAgX2xvY2Fscy5jb21tb25QYXJlbnQoZWxzZUJyYW5jaC5fbG9jYWxzKSA9PSBjb21tb24sCiAgICAgICAgIkRpZmYgY29tbW9uIHBhcmVudCBmb3JcbiIKICAgICAgICAiMToke2NvbW1vbi50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuMjoiCiAgICAgICAgIiR7X2xvY2Fscy5jb21tb25QYXJlbnQoZWxzZUJyYW5jaC5fbG9jYWxzKT8udG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgIGFzc2VydCgKICAgICAgICBjb21tb24gPT0gX2xvY2FscyB8fCBfbG9jYWxzLnZhcmlhYmxlcyA9PSBudWxsLAogICAgICAgICJOb24tZW1wdHkgY29tbW9uIHBhcmVudCBmb3JcbiIKICAgICAgICAiY29tbW9uOiR7Y29tbW9uLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgIjI6JHt0aGVuQnJhbmNoLl9sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgIHRoZW5CcmFuY2guX2xvY2Fscy5mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKGNvbW1vbiwgKExvY2FsIGxvY2FsLCBfKSB7CiAgICAgIG1lcmdlTG9jYWwobG9jYWwpOwogICAgfSk7CiAgICBlbHNlQnJhbmNoLl9sb2NhbHMuZm9yRWFjaExvY2FsVW50aWxTY29wZShjb21tb24sIChMb2NhbCBsb2NhbCwgXykgewogICAgICAvLyBEaXNjYXJkIGxvY2FscyB3ZSBhbHJlYWR5IHByb2Nlc3NlZCB3aGVuIGl0ZXJhdGluZyBvdmVyCiAgICAgIC8vIFt0aGVuQnJhbmNoXSdzIGxvY2Fscy4KICAgICAgaWYgKCF0aGVuQnJhbmNoLl9sb2NhbHMudXBkYXRlcyhsb2NhbCkpIG1lcmdlTG9jYWwobG9jYWwpOwogICAgfSk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vLyBNZXJnZSBhbGwgW0xvY2Fsc0hhbmRsZXJdIGluIFtoYW5kbGVyc10gaW50byBbOnRoaXM6XS4KICAvLy8KICAvLy8gSWYgW2tlZXBPd25Mb2NhbHNdIGlzIHRydWUsIHRoZSB0eXBlcyBvZiBsb2NhbHMgaW4gdGhpcwogIC8vLyBbTG9jYWxzSGFuZGxlcl0gYXJlIGJlaW5nIHVzZWQgaW4gdGhlIG1lcmdlLiBba2VlcE93bkxvY2Fsc10KICAvLy8gc2hvdWxkIGJlIHRydWUgaWYgdGhpcyBbTG9jYWxzSGFuZGxlcl0sIHRoZSBkb21pbmF0b3Igb2YKICAvLy8gYWxsIFtoYW5kbGVyc10sIGFsc28gZGlyZWN0bHkgZmxvd3MgaW50byB0aGUgam9pbiBwb2ludCwKICAvLy8gdGhhdCBpcyB0aGUgY29kZSBhZnRlciBhbGwgW2hhbmRsZXJzXS4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyOgogIC8vLwogIC8vLyBbOiBzd2l0Y2ggKC4uLikgewogIC8vLyAgICAgIGNhc2UgMTogLi4uOyBicmVhazsKICAvLy8gICAgfQogIC8vLyA6XQogIC8vLwogIC8vLyBUaGUgW0xvY2Fsc0hhbmRsZXJdIGF0IGVudHJ5IG9mIHRoZSBzd2l0Y2ggYWxzbyBmbG93cyBpbnRvIHRoZQogIC8vLyBleGl0IG9mIHRoZSBzd2l0Y2gsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZGVmYXVsdCBjYXNlLiBTbyB0aGUKICAvLy8gdHlwZXMgb2YgbG9jYWxzIGF0IGVudHJ5IG9mIHRoZSBzd2l0Y2ggaGF2ZSB0byB0YWtlIHBhcnQgdG8gdGhlCiAgLy8vIG1lcmdlLgogIC8vLwogIC8vLyBUaGUgYWJvdmUgc2l0dWF0aW9uIGlzIGFsc28gdHJ1ZSBmb3IgbGFiZWxlZCBzdGF0ZW1lbnRzIGxpa2UKICAvLy8KICAvLy8gWzogTDogewogIC8vLyAgICAgIGlmICguLi4pIGJyZWFrOwogIC8vLyAgICAgIC4uLgogIC8vLyAgICB9CiAgLy8vIDpdCiAgLy8vCiAgLy8vIHdoZXJlIFs6dGhpczpdIGlzIHRoZSBbTG9jYWxzSGFuZGxlcl0gZm9yIHRoZSBwYXRocyB0aHJvdWdoIHRoZQogIC8vLyBsYWJlbGVkIHN0YXRlbWVudCB0aGF0IGRvIG5vdCBicmVhayBvdXQuCiAgTG9jYWxzSGFuZGxlciBtZXJnZUFmdGVyQnJlYWtzKAogICAgICBJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgSXRlcmFibGU8TG9jYWxzSGFuZGxlcj4gaGFuZGxlcnMsCiAgICAgIHtib29sIGtlZXBPd25Mb2NhbHM6IHRydWV9KSB7CiAgICBpci5Ob2RlIHRyeUJsb2NrID0gX2xvY2Fscy50cnlCbG9jazsKICAgIC8vIFVzZSBhIHNlcGFyYXRlIGxvY2FscyBoYW5kbGVyIHRvIHBlcmZvcm0gdGhlIG1lcmdlIGluLCBzbyB0aGF0IFBoaQogICAgLy8gY3JlYXRpb24gZG9lcyBub3QgaW52YWxpZGF0ZSBwcmV2aW91cyB0eXBlIGtub3dsZWRnZSB3aGlsZSB3ZSBtaWdodAogICAgLy8gc3RpbGwgbG9vayBpdCB1cC4KICAgIFZhcmlhYmxlU2NvcGUgbWVyZ2VkID0gdHJ5QmxvY2sgIT0gbnVsbAogICAgICAgID8gbmV3IFZhcmlhYmxlU2NvcGUudHJ5QmxvY2sodHJ5QmxvY2ssIHBhcmVudDogX2xvY2FscykKICAgICAgICA6IG5ldyBWYXJpYWJsZVNjb3BlKHBhcmVudDogX2xvY2Fscyk7CiAgICBTZXQ8TG9jYWw+IHNlZW5Mb2NhbHMgPSBuZXcgU2V0bGV0PExvY2FsPigpOwogICAgLy8gTWVyZ2UgYWxsIG90aGVyIGhhbmRsZXJzLgogICAgZm9yIChMb2NhbHNIYW5kbGVyIGhhbmRsZXIgaW4gaGFuZGxlcnMpIHsKICAgICAgVmFyaWFibGVTY29wZSBjb21tb24gPSBfbG9jYWxzLmNvbW1vblBhcmVudChoYW5kbGVyLl9sb2NhbHMpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBjb21tb24gIT0gbnVsbCwKICAgICAgICAgICJObyBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgICAiMjoke2hhbmRsZXIuX2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfSIpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBjb21tb24gPT0gX2xvY2FscyB8fCBfbG9jYWxzLnZhcmlhYmxlcyA9PSBudWxsLAogICAgICAgICAgIk5vbi1lbXB0eSBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICAgImNvbW1vbjoke2NvbW1vbi50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuIgogICAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgICAiMjoke2hhbmRsZXIuX2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfSIpOwogICAgICBoYW5kbGVyLl9sb2NhbHMuZm9yRWFjaExvY2FsVW50aWxTY29wZShjb21tb24sIChsb2NhbCwgb3RoZXJUeXBlKSB7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIG15VHlwZSA9IG1lcmdlZFtsb2NhbF07CiAgICAgICAgaWYgKG15VHlwZSA9PSBudWxsKSByZXR1cm47CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGU7CiAgICAgICAgaWYgKCFzZWVuTG9jYWxzLmNvbnRhaW5zKGxvY2FsKSkgewogICAgICAgICAgbmV3VHlwZSA9IGluZmVycmVyLnR5cGVzLmFsbG9jYXRlUGhpKAogICAgICAgICAgICAgIG1lcmdlZC50cnlCbG9jaywgbG9jYWwsIG90aGVyVHlwZSwKICAgICAgICAgICAgICBpc1RyeTogbWVyZ2VkLmlzVHJ5KTsKICAgICAgICAgIHNlZW5Mb2NhbHMuYWRkKGxvY2FsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV3VHlwZSA9IGluZmVycmVyLnR5cGVzLmFkZFBoaUlucHV0KGxvY2FsLCBteVR5cGUsIG90aGVyVHlwZSk7CiAgICAgICAgfQogICAgICAgIGlmIChuZXdUeXBlICE9IG15VHlwZSkgewogICAgICAgICAgbWVyZ2VkW2xvY2FsXSA9IG5ld1R5cGU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIC8vIElmIHdlIHdhbnQgdG8ga2VlcCBvd24gbG9jYWxzLCB3ZSBtZXJnZSBbc2VlbkxvY2Fsc10gZnJvbSBbdGhpc10gaW50bwogICAgLy8gW21lcmdlZF0gdG8gdXBkYXRlIHRoZSBQaGkgbm9kZXMgd2l0aCBvcmlnaW5hbCB2YWx1ZXMuCiAgICBpZiAoa2VlcE93bkxvY2FscykgewogICAgICBmb3IgKExvY2FsIHZhcmlhYmxlIGluIHNlZW5Mb2NhbHMpIHsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gb3JpZ2luYWxUeXBlID0gX2xvY2Fsc1t2YXJpYWJsZV07CiAgICAgICAgaWYgKG9yaWdpbmFsVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBtZXJnZWRbdmFyaWFibGVdID0gaW5mZXJyZXIudHlwZXMKICAgICAgICAgICAgICAuYWRkUGhpSW5wdXQodmFyaWFibGUsIG1lcmdlZFt2YXJpYWJsZV0sIG9yaWdpbmFsVHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBDbGVhbiB1cCBQaGkgbm9kZXMgd2l0aCBzaW5nbGUgaW5wdXQgYW5kIHN0b3JlIGJhY2sgcmVzdWx0IGludG8KICAgIC8vIGFjdHVhbCBsb2NhbHMgaGFuZGxlci4KICAgIG1lcmdlZC5mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKG1lcmdlZCwKICAgICAgICAoTG9jYWwgdmFyaWFibGUsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSB7CiAgICAgIF9sb2NhbHNbdmFyaWFibGVdID0gaW5mZXJyZXIudHlwZXMuc2ltcGxpZnlQaGkodHJ5QmxvY2ssIHZhcmlhYmxlLCB0eXBlKTsKICAgIH0pOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLy8gTWVyZ2UgYWxsIFtMb2NhbHNIYW5kbGVyXSBpbiBbaGFuZGxlcnNdIGludG8gdGhpcyBoYW5kbGVyLgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgYSBsb2NhbCBpbiB0aGlzIGhhbmRsZXIgaGFzIGNoYW5nZWQuCiAgYm9vbCBtZXJnZUFsbChJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgSXRlcmFibGU8TG9jYWxzSGFuZGxlcj4gaGFuZGxlcnMpIHsKICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgaGFuZGxlcnMuZm9yRWFjaCgoTG9jYWxzSGFuZGxlciBvdGhlcikgewogICAgICBWYXJpYWJsZVNjb3BlIGNvbW1vbiA9IF9sb2NhbHMuY29tbW9uUGFyZW50KG90aGVyLl9sb2NhbHMpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBjb21tb24gIT0gbnVsbCwKICAgICAgICAgICJObyBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgICAiMjoke290aGVyLl9sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgY29tbW9uID09IF9sb2NhbHMgfHwgX2xvY2Fscy52YXJpYWJsZXMgPT0gbnVsbCwKICAgICAgICAgICJOb24tZW1wdHkgY29tbW9uIHBhcmVudCBmb3JcbiIKICAgICAgICAgICJjb21tb246JHtjb21tb24udG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAgICIxOiR7X2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuIgogICAgICAgICAgIjI6JHtvdGhlci5fbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9Iik7CiAgICAgIG90aGVyLl9sb2NhbHMuZm9yRWFjaExvY2FsVW50aWxTY29wZShjb21tb24sIChsb2NhbCwgb3RoZXJUeXBlKSB7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIG15VHlwZSA9IF9sb2NhbHNbbG9jYWxdOwogICAgICAgIGlmIChteVR5cGUgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBuZXdUeXBlID0KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuYWRkUGhpSW5wdXQobG9jYWwsIG15VHlwZSwgb3RoZXJUeXBlKTsKICAgICAgICBpZiAobmV3VHlwZSAhPSBteVR5cGUpIHsKICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgX2xvY2Fsc1tsb2NhbF0gPSBuZXdUeXBlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiBjaGFuZ2VkOwogIH0KCiAgdm9pZCBzdGFydExvb3AoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIGlyLk5vZGUgbG9vcCkgewogICAgX2xvY2Fscy5mb3JFYWNoTG9jYWwoKExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSA9CiAgICAgICAgICBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZUxvb3BQaGkobG9vcCwgdmFyaWFibGUsIHR5cGUsIGlzVHJ5OiBmYWxzZSk7CiAgICAgIGlmIChuZXdUeXBlICE9IHR5cGUpIHsKICAgICAgICBfbG9jYWxzW3ZhcmlhYmxlXSA9IG5ld1R5cGU7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBlbmRMb29wKEluZmVycmVyRW5naW5lIGluZmVycmVyLCBpci5Ob2RlIGxvb3ApIHsKICAgIF9sb2NhbHMuZm9yRWFjaExvY2FsKChMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGUgPQogICAgICAgICAgaW5mZXJyZXIudHlwZXMuc2ltcGxpZnlQaGkobG9vcCwgdmFyaWFibGUsIHR5cGUpOwogICAgICBpZiAobmV3VHlwZSAhPSB0eXBlKSB7CiAgICAgICAgX2xvY2Fsc1t2YXJpYWJsZV0gPSBuZXdUeXBlOwogICAgICB9CiAgICB9KTsKICB9CgogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KFN0cmluZyBpbmRlbnQpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF90b1N0cnVjdHVyZWRUZXh0KHNiLCBpbmRlbnQpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIF90b1N0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGluZGVudCkgewogICAgc2Iud3JpdGUoJ0xvY2Fsc0hhbmRsZXIoJGhhc2hDb2RlKSBbJyk7CiAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIGxvY2FsczonKTsKICAgIF9sb2NhbHMuX3RvU3RydWN0dXJlZFRleHQoc2IsICcke2luZGVudH0gICAgJyk7CiAgICBzYi53cml0ZSgnXG5dJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnTG9jYWxzSGFuZGxlcignKTsKICAgIHNiLndyaXRlKCdsb2NhbHM9JF9sb2NhbHMnKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KgmMATk48ARgBLSgkIRocHyABQ0dGRjIWMQY9FAEpATkeAS0aAR4BHx8cHi0BNx8cLkFCBAEwLBNFIygfJhM6AS8mAUsGTUYwAU40JhcoKSgpHTANEwYEATAcRzcGEwQBPBodNQYgBAFQPR9LQgQBIBs0IB4dKzMiGwoGJw4GGkQNDhkgNDIGBAFEJQQBISksBAErKiMaBAE7LCwaSQYcSQYdKz4tPAoGGig2BhMEAQwWPyEEAgE9ISwWAUswFQEdHx4BSC0rAUokPQQBPh8eOBoEATEyBAFEGAQBTDZFUB8BTUAkIwEqNQFCPyVOCAFIRREEAgE3PiosKUtLTQQBGR8aAQw2AQxOAQxHAQwcRDoyPgYXITUIEwQBDE0BQAEMLxsdBAEMLTkEAQwfQwQCAUQuKSIBMjMwATQvAQw7AQwUNxMGIB0EAgE3Fh8BMwEqPAFBTAEwPwE+GwQBSkMcN0BFRB9BHj44LCQ+NAhBDx0NHQYEAVArBkxPLEgfQAwYITA2DDgoLzAxLi9KIhdMCBEEAU44OjwgASMvIjw8IiMPUAgGAUUMGCEwOww8IzFQDDgoNDA7SRkISUEgQQgRBAE9Bj5DPz9EBhgfCwkGRUNGDQZDBg4bDwsJBkYvIkEkKUpLGSxALjEhLkQOGiMyOg46KjYyOkowJCErMDEkIRFKCiEjCgoGTT4ZKzokLEYKCAZHHioxUAgRBAFBO00aLUIOGiMyOA46KjYyOEgxJCJCIRokCgoIFAQBOkIgTh0lCAgEAThCIDwdJQgIBAErKiMaBAE7LCY0FQQBDBYqICETGgQCATFwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9sb2NhbHNfaGFuZGxlci5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL2xpc3RfdHJhY2VyLmRhcnST7C8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbXBpbGVyLnNyYy5pbmZlcnJlci5saXN0X3RyYWNlcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwppbXBvcnQgJ25vZGVfdHJhY2VyLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfbm9kZXMuZGFydCc7CgovLy8gQSBzZXQgb2Ygc2VsZWN0b3IgbmFtZXMgdGhhdCBbTGlzdF0gaW1wbGVtZW50cywgdGhhdCB3ZSBrbm93IGRvIG5vdAovLy8gY2hhbmdlIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIGxpc3QsIG9yIGxldCB0aGUgbGlzdCBlc2NhcGUgdG8gY29kZQovLy8gdGhhdCBtaWdodCBjaGFuZ2UgdGhlIGVsZW1lbnQgdHlwZS4KU2V0PFN0cmluZz4gb2tMaXN0U2VsZWN0b3JzU2V0ID0gbmV3IFNldDxTdHJpbmc+LmZyb20oY29uc3QgPFN0cmluZz5bCiAgLy8gRnJvbSBPYmplY3QuCiAgJz09JywKICAnaGFzaENvZGUnLAogICd0b1N0cmluZycsCiAgJ25vU3VjaE1ldGhvZCcsCiAgJ3J1bnRpbWVUeXBlJywKCiAgLy8gRnJvbSBJdGVyYWJsZS4KICAnaXRlcmF0b3InLAogICdtYXAnLAogICd3aGVyZScsCiAgJ2V4cGFuZCcsCiAgJ2NvbnRhaW5zJywKICAnZm9yRWFjaCcsCiAgJ3JlZHVjZScsCiAgJ2ZvbGQnLAogICdldmVyeScsCiAgJ2pvaW4nLAogICdhbnknLAogICd0b0xpc3QnLAogICd0b1NldCcsCiAgJ2xlbmd0aCcsCiAgJ2lzRW1wdHknLAogICdpc05vdEVtcHR5JywKICAndGFrZScsCiAgJ3Rha2VXaGlsZScsCiAgJ3NraXAnLAogICdza2lwV2hpbGUnLAogICdmaXJzdCcsCiAgJ2xhc3QnLAogICdzaW5nbGUnLAogICdmaXJzdFdoZXJlJywKICAnbGFzdFdoZXJlJywKICAnc2luZ2xlV2hlcmUnLAogICdlbGVtZW50QXQnLAoKICAvLyBGcm9tIExpc3QuCiAgJ1tdJywKICAnbGVuZ3RoJywKICAncmV2ZXJzZWQnLAogICdzb3J0JywKICAnaW5kZXhPZicsCiAgJ2xhc3RJbmRleE9mJywKICAnY2xlYXInLAogICdyZW1vdmUnLAogICdyZW1vdmVBdCcsCiAgJ3JlbW92ZUxhc3QnLAogICdyZW1vdmVXaGVyZScsCiAgJ3JldGFpbldoZXJlJywKICAnc3VibGlzdCcsCiAgJ2dldFJhbmdlJywKICAncmVtb3ZlUmFuZ2UnLAogICdhc01hcCcsCgogIC8vIEZyb20gSlNBcnJheS4KICAnY2hlY2tNdXRhYmxlJywKICAnY2hlY2tHcm93YWJsZScsCl0pOwoKU2V0PFN0cmluZz4gZG9Ob3RDaGFuZ2VMZW5ndGhTZWxlY3RvcnNTZXQgPSBuZXcgU2V0PFN0cmluZz4uZnJvbShjb25zdCA8U3RyaW5nPlsKICAvLyBGcm9tIE9iamVjdC4KICAnPT0nLAogICdoYXNoQ29kZScsCiAgJ3RvU3RyaW5nJywKICAnbm9TdWNoTWV0aG9kJywKICAncnVudGltZVR5cGUnLAoKICAvLyBGcm9tIEl0ZXJhYmxlLgogICdpdGVyYXRvcicsCiAgJ21hcCcsCiAgJ3doZXJlJywKICAnZXhwYW5kJywKICAnY29udGFpbnMnLAogICdmb3JFYWNoJywKICAncmVkdWNlJywKICAnZm9sZCcsCiAgJ2V2ZXJ5JywKICAnam9pbicsCiAgJ2FueScsCiAgJ3RvTGlzdCcsCiAgJ3RvU2V0JywKICAnbGVuZ3RoJywKICAnaXNFbXB0eScsCiAgJ2lzTm90RW1wdHknLAogICd0YWtlJywKICAndGFrZVdoaWxlJywKICAnc2tpcCcsCiAgJ3NraXBXaGlsZScsCiAgJ2ZpcnN0JywKICAnbGFzdCcsCiAgJ3NpbmdsZScsCiAgJ2ZpcnN0V2hlcmUnLAogICdsYXN0V2hlcmUnLAogICdzaW5nbGVXaGVyZScsCiAgJ2VsZW1lbnRBdCcsCgogIC8vIEZyb20gTGlzdC4KICAnW10nLAogICdbXT0nLAogICdsZW5ndGgnLAogICdyZXZlcnNlZCcsCiAgJ3NvcnQnLAogICdpbmRleE9mJywKICAnbGFzdEluZGV4T2YnLAogICdzdWJsaXN0JywKICAnZ2V0UmFuZ2UnLAogICdhc01hcCcsCgogIC8vIEZyb20gSlNBcnJheS4KICAnY2hlY2tNdXRhYmxlJywKICAnY2hlY2tHcm93YWJsZScsCl0pOwoKY2xhc3MgTGlzdFRyYWNlclZpc2l0b3IgZXh0ZW5kcyBUcmFjZXJWaXNpdG9yIHsKICAvLyBUaGUgW1NldF0gb2YgZm91bmQgYXNzaWdubWVudHMgdG8gdGhlIGxpc3QuCiAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gYXNzaWdubWVudHMgPSBuZXcgU2V0bGV0PFR5cGVJbmZvcm1hdGlvbj4oKTsKICBib29sIGNhbGxzR3Jvd2FibGVNZXRob2QgPSBmYWxzZTsKCiAgTGlzdFRyYWNlclZpc2l0b3IodHJhY2VkVHlwZSwgaW5mZXJyZXIpIDogc3VwZXIodHJhY2VkVHlwZSwgaW5mZXJyZXIpOwoKICAvLy8gUmV0dXJucyBbdHJ1ZV0gaWYgdGhlIGFuYWx5c2lzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIFtmYWxzZV0gaWYgaXQKICAvLy8gYmFpbGVkIG91dC4gSW4gdGhlIGZvcm1lciBjYXNlLCBbYXNzaWdubWVudHNdIGhvbGRzIGEgbGlzdCBvZgogIC8vLyBbVHlwZUluZm9ybWF0aW9uXSBub2RlcyB0aGF0IGZsb3cgaW50byB0aGUgZWxlbWVudCB0eXBlIG9mIHRoaXMgbGlzdC4KICBib29sIHJ1bigpIHsKICAgIGFuYWx5emUoKTsKICAgIExpc3RUeXBlSW5mb3JtYXRpb24gbGlzdCA9IHRyYWNlZFR5cGU7CiAgICBpZiAoY29udGludWVBbmFseXppbmcpIHsKICAgICAgaWYgKCFjYWxsc0dyb3dhYmxlTWV0aG9kICYmIGxpc3QuaW5mZXJyZWRMZW5ndGggPT0gbnVsbCkgewogICAgICAgIGxpc3QuaW5mZXJyZWRMZW5ndGggPSBsaXN0Lm9yaWdpbmFsTGVuZ3RoOwogICAgICB9CiAgICAgIGxpc3QuYWRkRmxvd3NJbnRvVGFyZ2V0cyhmbG93c0ludG8pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGNhbGxzR3Jvd2FibGVNZXRob2QgPSB0cnVlOwogICAgICBhc3NpZ25tZW50cyA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLnZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBNZW1iZXJFbnRpdHkgY2FsbGVkID0gaW5mby5jYWxsZWRFbGVtZW50OwogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbihjYWxsZWQpICYmCiAgICAgICAgY2FsbGVkLm5hbWUgPT0gSWRlbnRpZmllcnMuSlMpIHsKICAgICAgYmFpbG91dCgnVXNlZCBpbiBKUyAke2luZm8uZGVidWdOYW1lfScpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLnZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKGluZm8pOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBpbmZvLnNlbGVjdG9yOwogICAgU3RyaW5nIHNlbGVjdG9yTmFtZSA9IHNlbGVjdG9yLm5hbWU7CiAgICBpZiAoY3VycmVudFVzZXIgPT0gaW5mby5yZWNlaXZlcikgewogICAgICBpZiAoIW9rTGlzdFNlbGVjdG9yc1NldC5jb250YWlucyhzZWxlY3Rvck5hbWUpKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzQ2FsbCkgewogICAgICAgICAgaW50IHBvc2l0aW9uYWxMZW5ndGggPSBpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsKICAgICAgICAgIGlmIChzZWxlY3Rvck5hbWUgPT0gJ2FkZCcpIHsKICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxMZW5ndGggPT0gMSkgewogICAgICAgICAgICAgIGFzc2lnbm1lbnRzLmFkZChpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzBdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvck5hbWUgPT0gJ2luc2VydCcpIHsKICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxMZW5ndGggPT0gMikgewogICAgICAgICAgICAgIGFzc2lnbm1lbnRzLmFkZChpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzFdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmFpbG91dCgnVXNlZCBpbiBhIG5vdC1vayBzZWxlY3RvcicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0luZGV4U2V0KSB7CiAgICAgICAgICBhc3NpZ25tZW50cy5hZGQoaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFsxXSk7CiAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0b3IuaXNJbmRleCkgewogICAgICAgICAgYmFpbG91dCgnVXNlZCBpbiBhIG5vdC1vayBzZWxlY3RvcicpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWRvTm90Q2hhbmdlTGVuZ3RoU2VsZWN0b3JzU2V0LmNvbnRhaW5zKHNlbGVjdG9yTmFtZSkpIHsKICAgICAgICBjYWxsc0dyb3dhYmxlTWV0aG9kID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoc2VsZWN0b3JOYW1lID09ICdsZW5ndGgnICYmIHNlbGVjdG9yLmlzU2V0dGVyKSB7CiAgICAgICAgY2FsbHNHcm93YWJsZU1ldGhvZCA9IHRydWU7CiAgICAgICAgYXNzaWdubWVudHMuYWRkKGluZmVycmVyLnR5cGVzLm51bGxUeXBlKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0NhbGwgJiYKICAgICAgICAoaW5mby5oYXNDbG9zdXJlQ2FsbFRhcmdldHMgfHwKICAgICAgICAgICAgaW5mby5jb25jcmV0ZVRhcmdldHMuYW55KChlbGVtZW50KSA9PiAhZWxlbWVudC5pc0Z1bmN0aW9uKSkpIHsKICAgICAgYmFpbG91dCgnUGFzc2VkIHRvIGEgY2xvc3VyZScpOwogICAgICByZXR1cm47CiAgICB9CiAgfQp9CoDYAE5OPAErAR8kMigbIAFISChGEggODhIRARQOCQsMDg0MCgsKCQwLDA0QCg8KDwsKDBAPEQ8BEAgMDgoNEQsMDhAREQ0OEQsBExITBAFREggODhIRARQOCQsMDg0MCgsKCQwLDA0QCg8KDwsKDBAPEQ8BEAgJDA4KDRENDgsBExITBAEwMUQkAUkBS0RMDw8rHUEzCCsTDSIaFAYEAQxNJAQBDEs0LkEpLwYEAQxNNScpKDgfQycpPQ4xKT0OEzIUDCo5KDASCghDJAg7JDIIIidLJg4GBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2xpc3RfdHJhY2VyLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvbWFwX3RyYWNlci5kYXJ0kx4vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb21waWxlci5zcmMuaW5mZXJyZXIubWFwX3RyYWNlcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnbm9kZV90cmFjZXIuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKClNldDxTdHJpbmc+IG9rTWFwU2VsZWN0b3JzU2V0ID0gbmV3IFNldC5mcm9tKGNvbnN0IDxTdHJpbmc+WwogIC8vIEZyb20gT2JqZWN0LgogICI9PSIsCiAgImhhc2hDb2RlIiwKICAidG9TdHJpbmciLAogICJub1N1Y2hNZXRob2QiLAogICJydW50aW1lVHlwZSIsCiAgLy8gRnJvbSBNYXAKICAiW10iLAogICJpc0VtcHR5IiwKICAiaXNOb3RFbXB0eSIsCiAgImtleXMiLAogICJsZW5ndGgiLAogICJ2YWx1ZXMiLAogICJjbGVhciIsCiAgImNvbnRhaW5zS2V5IiwKICAiY29udGFpbnNWYWx1ZSIsCiAgImZvckVhY2giLAogICJyZW1vdmUiCl0pOwoKY2xhc3MgTWFwVHJhY2VyVmlzaXRvciBleHRlbmRzIFRyYWNlclZpc2l0b3IgewogIC8vIFRoZXNlIGxpc3RzIGFyZSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgbmV3bHkgZGlzY292ZXJlZCBhc3NpZ25tZW50cyB0bwogIC8vIHRoZSBtYXAuIE5vdGUgdGhhdCBlbGVtZW50cyBhdCBjb3JyZXNwb25kaW5nIGluZGljZXMgYXJlIGV4cGVjdGVkIHRvCiAgLy8gYmVsb25nIHRvIHRoZSBzYW1lIGFzc2lnbm1lbnQgb3BlcmF0aW9uLgogIExpc3Q8VHlwZUluZm9ybWF0aW9uPiBrZXlBc3NpZ25tZW50cyA9IDxUeXBlSW5mb3JtYXRpb24+W107CiAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IHZhbHVlQXNzaWdubWVudHMgPSA8VHlwZUluZm9ybWF0aW9uPltdOwogIC8vIFRoaXMgbGlzdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgYXNzaWdubWVudHMgb2YgZW50aXJlIG1hcHMgdG8KICAvLyB0aGlzIG1hcC4KICBMaXN0PE1hcFR5cGVJbmZvcm1hdGlvbj4gbWFwQXNzaWdubWVudHMgPSA8TWFwVHlwZUluZm9ybWF0aW9uPltdOwoKICBNYXBUcmFjZXJWaXNpdG9yKHRyYWNlZFR5cGUsIGluZmVycmVyKSA6IHN1cGVyKHRyYWNlZFR5cGUsIGluZmVycmVyKTsKCiAgLy8vIFJldHVybnMgW3RydWVdIGlmIHRoZSBhbmFseXNpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBbZmFsc2VdCiAgLy8vIGlmIGl0IGJhaWxlZCBvdXQuIEluIHRoZSBmb3JtZXIgY2FzZSwgW2tleUFzc2lnbm1lbnRzXSBhbmQKICAvLy8gW3ZhbHVlQXNzaWdubWVudHNdIGhvbGQgYSBsaXN0IG9mIFtUeXBlSW5mb3JtYXRpb25dIG5vZGVzIHRoYXQKICAvLy8gZmxvdyBpbnRvIHRoZSBrZXkgYW5kIHZhbHVlIHR5cGVzIG9mIHRoaXMgbWFwLgogIGJvb2wgcnVuKCkgewogICAgYW5hbHl6ZSgpOwogICAgTWFwVHlwZUluZm9ybWF0aW9uIG1hcCA9IHRyYWNlZFR5cGU7CiAgICBpZiAoY29udGludWVBbmFseXppbmcpIHsKICAgICAgbWFwLmFkZEZsb3dzSW50b1RhcmdldHMoZmxvd3NJbnRvKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBrZXlBc3NpZ25tZW50cyA9IHZhbHVlQXNzaWdubWVudHMgPSBtYXBBc3NpZ25tZW50cyA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYmFpbG91dCgnUGFzc2VkIHRvIGEgY2xvc3VyZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKGluZm8pOwogICAgTWVtYmVyRW50aXR5IGNhbGxlZCA9IGluZm8uY2FsbGVkRWxlbWVudDsKICAgIGlmIChpbmZlcnJlci5jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pc0ZvcmVpZ24oY2FsbGVkKSAmJgogICAgICAgIGNhbGxlZC5uYW1lID09IElkZW50aWZpZXJzLkpTKSB7CiAgICAgIGJhaWxvdXQoJ1VzZWQgaW4gSlMgJHtpbmZvLmRlYnVnTmFtZX0nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gaW5mby5zZWxlY3RvcjsKICAgIFN0cmluZyBzZWxlY3Rvck5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgaWYgKGN1cnJlbnRVc2VyID09IGluZm8ucmVjZWl2ZXIpIHsKICAgICAgaWYgKCFva01hcFNlbGVjdG9yc1NldC5jb250YWlucyhzZWxlY3Rvck5hbWUpKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzQ2FsbCkgewogICAgICAgICAgaWYgKHNlbGVjdG9yTmFtZSA9PSAnYWRkQWxsJykgewogICAgICAgICAgICAvLyBBbGwga2V5cyBhbmQgdmFsdWVzIGZyb20gdGhlIGFyZ3VtZW50IGZsb3cgaW50bwogICAgICAgICAgICAvLyB0aGUgbWFwLgogICAgICAgICAgICBUeXBlSW5mb3JtYXRpb24gbWFwID0gaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFswXTsKICAgICAgICAgICAgaWYgKG1hcCBpcyBNYXBUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICAgICAgICBpbmZlcnJlci5hbmFseXplTWFwQW5kRW5xdWV1ZShtYXApOwogICAgICAgICAgICAgIG1hcEFzc2lnbm1lbnRzLmFkZChtYXApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIElmIHdlIGNvdWxkIHNlbGVjdCBhIGNvbXBvbmVudCBmcm9tIGEgW1R5cGVJbmZvcm1hdGlvbl0sCiAgICAgICAgICAgICAgLy8gbGlrZSB0aGUga2V5dHlwZSBvciB2YWx1ZXR5cGUgaW4gdGhpcyBjYXNlLCB3ZSBjb3VsZAogICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSBtb3JlIGhlcmUuCiAgICAgICAgICAgICAgLy8gVE9ETyhoZXJodXQpOiBpbXBsZW1lbnQgc2VsZWN0aW9uIG9uIFtUeXBlSW5mb3JtYXRpb25dLgogICAgICAgICAgICAgIGJhaWxvdXQoJ0FkZGluZyBtYXAgd2l0aCB1bmtub3duIHR5cGVpbmZvIHRvIGN1cnJlbnQgbWFwJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3JOYW1lID09ICdwdXRJZkFic2VudCcpIHsKICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgbmV3IGtleSwgdGhlIHJlc3VsdCB0eXBlIG9mCiAgICAgICAgICAgIC8vIHRoZSBzZWNvbmQgYXJndW1lbnQgYmVjb21lcyBhIG5ldyB2YWx1ZS4KICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgdGhlIHR5cGUgaW5mb3JtYXRpb24gZG9lcyBub3QKICAgICAgICAgICAgLy8gZXhwbGljaXRseSB0cmFjayB0aGUgcmV0dXJuIHR5cGUsIHlldCwgc28gd2UgaGF2ZQogICAgICAgICAgICAvLyB0byBnbyB0byBkeW5hbWljLgogICAgICAgICAgICAvLyBUT0RPKGhlcmh1dCwxNjUwNyk6IFVzZSByZXR1cm4gdHlwZSBvZiBjbG9zdXJlIGluCiAgICAgICAgICAgIC8vIE1hcC5wdXRJZkFic2VudC4KICAgICAgICAgICAga2V5QXNzaWdubWVudHMuYWRkKGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pOwogICAgICAgICAgICB2YWx1ZUFzc2lnbm1lbnRzLmFkZChpbmZlcnJlci50eXBlcy5keW5hbWljVHlwZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBbTWFwLmtleXNdIGFuZCBbTWFwLnZhbHVlc10sIHRvby4KICAgICAgICAgICAgLy8gSG93ZXZlciwgY3VycmVudGx5IHRob3NlIGNhbGxzIGRvIG5vdCB0cmlnZ2VyIHRoZSBjcmVhdGlvbgogICAgICAgICAgICAvLyBvZiBhIFtMaXN0VHlwZUluZm9ybWF0aW9uXSwgc28gSSBoYXZlIG5vd2hlcmUgdG8gcHJvcGFnYXRlCiAgICAgICAgICAgIC8vIHRoYXQgaW5mb3JtYXRpb24uCiAgICAgICAgICAgIC8vIFRPRE8oaGVyaHV0KTogYWRkIHN1cHBvcnQgZm9yIE1hcC5rZXlzIGFuZCBNYXAudmFsdWVzLgogICAgICAgICAgICBiYWlsb3V0KCdNYXAgdXNlZCBpbiBhIG5vdC1vayBzZWxlY3RvciBbJHNlbGVjdG9yTmFtZV0nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNJbmRleFNldCkgewogICAgICAgICAga2V5QXNzaWdubWVudHMuYWRkKGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pOwogICAgICAgICAgdmFsdWVBc3NpZ25tZW50cy5hZGQoaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFsxXSk7CiAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0b3IuaXNJbmRleCkgewogICAgICAgICAgYmFpbG91dCgnTWFwIHVzZWQgaW4gYSBub3Qtb2sgc2VsZWN0b3IgWyRzZWxlY3Rvck5hbWVdJyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzQ2FsbCAmJgogICAgICAgIChpbmZvLmhhc0Nsb3N1cmVDYWxsVGFyZ2V0cyB8fAogICAgICAgICAgICBpbmZvLmNvbmNyZXRlVGFyZ2V0cy5hbnkoKGVsZW1lbnQpID0+ICFlbGVtZW50LmlzRnVuY3Rpb24pKSkgewogICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgICAgIHJldHVybjsKICAgIH0KICB9Cn0KgIYATk48ASoBHyQyGyABPRIIDg4SEQ4IDRAKDAwLERMNCwQBL0tKLj5ARg9EAUgBRUFFNQ8PKR0qEwY/EgQBDE0kBAEMSzQuQSkvBgQBDE01JykoNx8qPxhALTInFUpGJklKDjZDODxBIUEgPj4TTEpKIUZGFAwqPD4oRBIKCCInSyYOBgQCAS1wYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9tYXBfdHJhY2VyLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvc2V0X3RyYWNlci5kYXJ0jZEvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb21waWxlci5zcmMuaW5mZXJyZXIuc2V0X3RyYWNlcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnbm9kZV90cmFjZXIuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKCi8vLyBBIHNldCBvZiBzZWxlY3RvciBuYW1lcyB0aGF0IFtTZXRdIGltcGxlbWVudHMgYW5kIHdoaWNoIHdlIGtub3cgZG8gbm90Ci8vLyBjaGFuZ2UgdGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgc2V0IG9yIGxldCB0aGUgc2V0IGVzY2FwZSB0byBjb2RlIHRoYXQgbWlnaHQKLy8vIGNoYW5nZSB0aGUgZWxlbWVudCB0eXBlLgpTZXQ8U3RyaW5nPiBva1NldFNlbGVjdG9yU2V0ID0gbmV3IFNldDxTdHJpbmc+LmZyb20oY29uc3QgPFN0cmluZz5bCiAgLy8gRnJvbSBPYmplY3QuCiAgJz09JywKICAnaGFzaENvZGUnLAogICd0b1N0cmluZycsCiAgJ25vU3VjaE1ldGhvZCcsCiAgJ3J1bnRpbWVUeXBlJywKCiAgLy8gRnJvbSBJdGVyYWJsZS4KICAnaXRlcmF0b3InLAogICdtYXAnLAogICd3aGVyZScsCiAgJ2V4cGFuZCcsCiAgJ2NvbnRhaW5zJywKICAnZm9yRWFjaCcsCiAgJ3JlZHVjZScsCiAgJ2ZvbGQnLAogICdldmVyeScsCiAgJ2pvaW4nLAogICdhbnknLAogICd0b0xpc3QnLAogICd0b1NldCcsCiAgJ2xlbmd0aCcsCiAgJ2lzRW1wdHknLAogICdpc05vdEVtcHR5JywKICAndGFrZScsCiAgJ3Rha2VXaGlsZScsCiAgJ3NraXAnLAogICdza2lwV2hpbGUnLAogICdmaXJzdCcsCiAgJ2xhc3QnLAogICdzaW5nbGUnLAogICdmaXJzdFdoZXJlJywKICAnbGFzdFdoZXJlJywKICAnc2luZ2xlV2hlcmUnLAogICdlbGVtZW50QXQnLAoKICAvLyBGcm9tIFNldC4KICAnY2xlYXInLAogICdjb250YWluc0FsbCcsCiAgJ2RpZmZlcmVuY2UnLAogICdpbnRlcnNlY3Rpb24nLAogICdsb29rdXAnLAogICdyZW1vdmUnLAogICdyZW1vdmVBbGwnLAogICdyZW1vdmVXaGVyZScsCiAgJ3JldGFpbkFsbCcsCiAgJ3JldGFpbldoZXJlJywKICAndW5pb24nLApdKTsKCmNsYXNzIFNldFRyYWNlclZpc2l0b3IgZXh0ZW5kcyBUcmFjZXJWaXNpdG9yIHsKICBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gYXNzaWdubWVudHMgPSA8VHlwZUluZm9ybWF0aW9uPltdOwoKICBTZXRUcmFjZXJWaXNpdG9yKHRyYWNlZFR5cGUsIGluZmVycmVyKSA6IHN1cGVyKHRyYWNlZFR5cGUsIGluZmVycmVyKTsKCiAgLy8vIFJldHVybnMgW3RydWVdIGlmIHRoZSBhbmFseXNpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBbZmFsc2VdIGlmIGl0CiAgLy8vIGJhaWxlZCBvdXQuIEluIHRoZSBmb3JtZXIgY2FzZSwgW2Fzc2lnbm1lbnRzXSBob2xkcyBhIGxpc3Qgb2YKICAvLy8gW1R5cGVJbmZvcm1hdGlvbl0gbm9kZXMgdGhhdCBmbG93IGludG8gdGhlIGVsZW1lbnQgdHlwZSBvZiB0aGlzIHNldC4KICBib29sIHJ1bigpIHsKICAgIGFuYWx5emUoKTsKICAgIFNldFR5cGVJbmZvcm1hdGlvbiBzZXQgPSB0cmFjZWRUeXBlOwogICAgaWYgKGNvbnRpbnVlQW5hbHl6aW5nKSB7CiAgICAgIHNldC5hZGRGbG93c0ludG9UYXJnZXRzKGZsb3dzSW50byk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgYXNzaWdubWVudHMgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oQ2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGJhaWxvdXQoJ1Bhc3NlZCB0byBhIGNsb3N1cmUnKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIE1lbWJlckVudGl0eSBjYWxsZWQgPSBpbmZvLmNhbGxlZEVsZW1lbnQ7CiAgICBpZiAoaW5mZXJyZXIuY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuaXNGb3JlaWduKGNhbGxlZCkgJiYKICAgICAgICBjYWxsZWQubmFtZSA9PSBJZGVudGlmaWVycy5KUykgewogICAgICBiYWlsb3V0KCdVc2VkIGluIEpTICR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGluZm8uc2VsZWN0b3I7CiAgICBTdHJpbmcgc2VsZWN0b3JOYW1lID0gc2VsZWN0b3IubmFtZTsKICAgIGlmIChjdXJyZW50VXNlciA9PSBpbmZvLnJlY2VpdmVyKSB7CiAgICAgIGlmICghb2tTZXRTZWxlY3RvclNldC5jb250YWlucyhzZWxlY3Rvck5hbWUpKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzQ2FsbCkgewogICAgICAgICAgc3dpdGNoIChzZWxlY3Rvck5hbWUpIHsKICAgICAgICAgICAgY2FzZSAnYWRkJzoKICAgICAgICAgICAgICBhc3NpZ25tZW50cy5hZGQoaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFswXSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2FkZEFsbCc6CiAgICAgICAgICAgICAgLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBFeHRyYWN0IHR5cGUgYXJndW1lbnQgZnJvbSB0eXBlCiAgICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgYmFpbG91dCgnQWRkaW5nIGl0ZXJhYmxlIHdpdGggdW5rbm93biB0eXBlaW5mbyB0byBjdXJyZW50IHNldCcpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIGJhaWxvdXQoJ1NldCB1c2VkIGluIGEgbm90LW9rIHNlbGVjdG9yIFskc2VsZWN0b3JOYW1lXScpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0NhbGwgJiYKICAgICAgICAoaW5mby5oYXNDbG9zdXJlQ2FsbFRhcmdldHMgfHwKICAgICAgICAgICAgaW5mby5jb25jcmV0ZVRhcmdldHMuYW55KChlbGVtZW50KSA9PiAhZWxlbWVudC5pc0Z1bmN0aW9uKSkpIHsKICAgICAgYmFpbG91dCgnUGFzc2VkIHRvIGEgY2xvc3VyZScpOwogICAgICByZXR1cm47CiAgICB9CiAgfQp9CoCFAE5OPAEqAR8kMhsgAUtQHUQSCA4OEhEBFA4JCwwODQwKCwoJDAsMDRAKDwoPCwoMEA8RDwEPCxEQEgwMDxEPEQsEAS87AUgBS0RLDw8pHSoTBhgSBAEMTSQEAQxLNC5BKS8GBAEMTTUnKSg2HyIYPRUbRR5PFRVIDBIKCCInSyYOBgQCAS1wYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9zZXRfdHJhY2VyLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZV9ncmFwaF9kdW1wLmRhcnS6ry8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkgZGFydDJqcy5pbmZlcnJlci50eXBlX2dyYXBoX2R1bXA7CgppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdHlfdXRpbHMuZGFydCcgYXMgdXRpbHM7CmltcG9ydCAnYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwppbXBvcnQgJ2RlYnVnLmRhcnQnOwoKLy8vIER1bXBzIHRoZSB0eXBlIGluZmVyZW5jZSBncmFwaCBpbiBHcmFwaHZpeiBEb3QgZm9ybWF0IGludG8gdGhlIGB0eXBlZ3JhcGhgCi8vLyBzdWJmb2xkZXIgb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIEVhY2ggZnVuY3Rpb24gYm9keSBpcyBkdW1wZWQgaW4KLy8vIGEgc2VwYXJhdGUgZmlsZS4KLy8vCi8vLyBUaGUgcmVzdWx0aW5nIC5kb3QgZmlsZXMgbXVzdCBiZSBwcm9jZXNzZWQgdXNpbmcgdGhlIEdyYXBodml6IGBkb3RgIGNvbW1hbmQsCi8vLyB3aGljaCBjYW4gYmUgb2J0YWluZWQgZnJvbSBgaHR0cDovL3d3dy5ncmFwaHZpei5vcmdgLCBvciBpbnN0YWxsZWQgdXNpbmcKLy8vIG1vc3QgcGFja2FnZSBtYW5hZ2VycyAoc2VhcmNoIGZvciBgZ3JhcGh2aXpgIG9yIGBkb3RgKS4KLy8vCi8vLyBFeGFtcGxlIGNvbW1hbmRzOgovLy8KLy8vICAgICBkb3QgLVRwbmcgLU8gdHlwZWdyYXBoL21haW4uZG90Ci8vLyAgICAgb3BlbiB0eXBlZ3JhcGgvbWFpbi5kb3QucG5nCi8vLwovLy8gICAgIGRvdCAtVHBuZyAtTyB0eXBlZ3JhcGgvZGFydC5faW50ZXJuYWwuU29ydC5fZHVhbFBpdm90UXVpY2tzb3J0LmRvdAovLy8gICAgIG9wZW4gdHlwZWdyYXBoL2RhcnQuX2ludGVybmFsLlNvcnQuX2R1YWxQaXZvdFF1aWNrc29ydC5kb3QucG5nCi8vLwpjbGFzcyBUeXBlR3JhcGhEdW1wIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG91dHB1dERpciA9ICd0eXBlZ3JhcGgnOwoKICBmaW5hbCBDb21waWxlck91dHB1dCBjb21waWxlck91dHB1dDsKICBmaW5hbCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcjsKICBmaW5hbCBNYXA8VHlwZUluZm9ybWF0aW9uLCBTZXQ8VHlwZUluZm9ybWF0aW9uPj4gYXNzaWdubWVudHNCZWZvcmVBbmFseXNpcyA9CiAgICAgIDxUeXBlSW5mb3JtYXRpb24sIFNldDxUeXBlSW5mb3JtYXRpb24+Pnt9OwogIGZpbmFsIE1hcDxUeXBlSW5mb3JtYXRpb24sIFNldDxUeXBlSW5mb3JtYXRpb24+PiBhc3NpZ25tZW50c0JlZm9yZVRyYWNpbmcgPQogICAgICA8VHlwZUluZm9ybWF0aW9uLCBTZXQ8VHlwZUluZm9ybWF0aW9uPj57fTsKICBmaW5hbCBTZXQ8U3RyaW5nPiB1c2VkRmlsZW5hbWVzID0gbmV3IFNldDxTdHJpbmc+KCk7CgogIFR5cGVHcmFwaER1bXAodGhpcy5jb21waWxlck91dHB1dCwgdGhpcy5pbmZlcnJlcik7CgogIC8vLyBUYWtlIGEgY29weSBvZiB0aGUgYXNzaWdubWVudCBzZXQgZm9yIGVhY2ggbm9kZSwgc2luY2UgdGhhdCBtYXkgY2hhbmdlCiAgLy8vIGR1cmluZyB0aGUgYW5hbHlzaXMuCiAgdm9pZCBiZWZvcmVBbmFseXNpcygpIHsKICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIG5vZGUgaW4gaW5mZXJyZXIudHlwZXMuYWxsVHlwZXMpIHsKICAgICAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gY29weSA9IG5vZGUuYXNzaWdubWVudHMudG9TZXQoKTsKICAgICAgaWYgKCFjb3B5LmlzRW1wdHkpIHsKICAgICAgICBhc3NpZ25tZW50c0JlZm9yZUFuYWx5c2lzW25vZGVdID0gY29weTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIExpa2UgW2JlZm9yZUFuYWx5c2lzXSwgdGFrZXMgYSBjb3B5IG9mIHRoZSBhc3NpZ25tZW50IHNldHMuCiAgdm9pZCBiZWZvcmVUcmFjaW5nKCkgewogICAgZm9yIChUeXBlSW5mb3JtYXRpb24gbm9kZSBpbiBpbmZlcnJlci50eXBlcy5hbGxUeXBlcykgewogICAgICBTZXQ8VHlwZUluZm9ybWF0aW9uPiBjb3B5ID0gbm9kZS5hc3NpZ25tZW50cy50b1NldCgpOwogICAgICBpZiAoIWNvcHkuaXNFbXB0eSkgewogICAgICAgIGFzc2lnbm1lbnRzQmVmb3JlVHJhY2luZ1tub2RlXSA9IGNvcHk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBEdW1wcyB0aGUgZW50aXJlIGdyYXBoLgogIHZvaWQgYWZ0ZXJBbmFseXNpcygpIHsKICAgIC8vIEdyb3VwIGFsbCB0aGUgdHlwZSBub2RlcyBieSB0aGVpciBjb250ZXh0IG1lbWJlci4KICAgIE1hcDxNZW1iZXJFbnRpdHksIExpc3Q8VHlwZUluZm9ybWF0aW9uPj4gbm9kZXMgPQogICAgICAgIDxNZW1iZXJFbnRpdHksIExpc3Q8VHlwZUluZm9ybWF0aW9uPj57fTsKICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIG5vZGUgaW4gaW5mZXJyZXIudHlwZXMuYWxsVHlwZXMpIHsKICAgICAgaWYgKG5vZGUuY29udGV4dE1lbWJlciAhPSBudWxsKSB7CiAgICAgICAgbm9kZXMKICAgICAgICAgICAgLnB1dElmQWJzZW50KG5vZGUuY29udGV4dE1lbWJlciwgKCkgPT4gPFR5cGVJbmZvcm1hdGlvbj5bXSkKICAgICAgICAgICAgLmFkZChub2RlKTsKICAgICAgfQogICAgfQogICAgLy8gUHJpbnQgZXZlcnkgZ3JvdXAgc2VwYXJhdGVseS4KICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gbm9kZXMua2V5cykgewogICAgICBPdXRwdXRTaW5rIG91dHB1dDsKICAgICAgdHJ5IHsKICAgICAgICBTdHJpbmcgbmFtZSA9IGZpbGVuYW1lRnJvbUVsZW1lbnQoZWxlbWVudCk7CiAgICAgICAgb3V0cHV0ID0gY29tcGlsZXJPdXRwdXQuY3JlYXRlT3V0cHV0U2luaygKICAgICAgICAgICAgJyRvdXRwdXREaXIvJG5hbWUnLCAnZG90JywgT3V0cHV0VHlwZS5kZWJ1Zyk7CiAgICAgICAgX0dyYXBoR2VuZXJhdG9yIHZpc2l0b3IgPSBuZXcgX0dyYXBoR2VuZXJhdG9yKAogICAgICAgICAgICB0aGlzLCBlbGVtZW50LCBvdXRwdXQsIGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29tcGFjdFRleHQpOwogICAgICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIG5vZGUgaW4gbm9kZXNbZWxlbWVudF0pIHsKICAgICAgICAgIHZpc2l0b3IudmlzaXQobm9kZSk7CiAgICAgICAgfQogICAgICAgIHZpc2l0b3IuYWRkTWlzc2luZ05vZGVzKCk7CiAgICAgICAgdmlzaXRvci5maW5pc2goKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpIHsKICAgICAgICAgIG91dHB1dC5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIGZpbGVuYW1lICh3aXRob3V0IGV4dGVuc2lvbikgaW4gd2hpY2ggdG8gZHVtcCB0aGUgdHlwZQogIC8vLyBncmFwaCBmb3IgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBXaWxsIG5ldmVyIHJldHVybiB0aGUgYSBnaXZlbiBmaWxlbmFtZSBtb3JlIHRoYW4gb25jZSwgZXZlbiBpZiBjYWxsZWQgd2l0aAogIC8vLyB0aGUgc2FtZSBlbGVtZW50LgogIFN0cmluZyBmaWxlbmFtZUZyb21FbGVtZW50KE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBUaGUgdG9TdHJpbmcgbWV0aG9kIG9mIGVsZW1lbnRzIGluY2x1ZGUgY2hhcmFjdGVycyB0aGF0IGFyZSB1bnN1aXRhYmxlCiAgICAvLyBmb3IgVVJJcyBhbmQgZmlsZSBzeXN0ZW1zLgogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gPFN0cmluZz5bXTsKICAgIHBhcnRzLmFkZChlbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpLnBhdGhTZWdtZW50cy5sYXN0KTsKICAgIHBhcnRzLmFkZChlbGVtZW50LmVuY2xvc2luZ0NsYXNzPy5uYW1lKTsKICAgIGlmIChlbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgIHBhcnRzLmFkZCgnZ2V0LSR7ZWxlbWVudC5uYW1lfScpOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzU2V0dGVyKSB7CiAgICAgIHBhcnRzLmFkZCgnc2V0LSR7ZWxlbWVudC5uYW1lfScpOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzQ29uc3RydWN0b3IpIHsKICAgICAgaWYgKGVsZW1lbnQubmFtZS5pc0VtcHR5KSB7CiAgICAgICAgcGFydHMuYWRkKCctY29uc3RydWN0b3InKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwYXJ0cy5hZGQoZWxlbWVudC5uYW1lKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcGFydHMuYWRkKAogICAgICAgICAgdXRpbHMub3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyKGVsZW1lbnQubmFtZSkucmVwbGFjZUFsbChyJyQnLCAnLScpKTsKICAgIH0KICAgIFN0cmluZyBmaWxlbmFtZSA9IHBhcnRzLndoZXJlKCh4KSA9PiB4ICE9IG51bGwgJiYgeCAhPSAnJykuam9pbignLicpOwogICAgaWYgKHVzZWRGaWxlbmFtZXMuYWRkKGZpbGVuYW1lKSkgcmV0dXJuIGZpbGVuYW1lOwogICAgLy8gVGhlIGZpbGVuYW1lIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIG1ldGhvZC4gQXBwZW5kIGEgc2VyaWFsCiAgICAvLyBudW1iZXIgdG8gZW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBpdC4KICAgIGludCBzZXJpYWxOdW1iZXIgPSAyOwogICAgd2hpbGUgKCF1c2VkRmlsZW5hbWVzLmFkZCgnJGZpbGVuYW1lLSRzZXJpYWxOdW1iZXInKSkgewogICAgICArK3NlcmlhbE51bWJlcjsKICAgIH0KICAgIHJldHVybiAnJGZpbGVuYW1lLSRzZXJpYWxOdW1iZXInOwogIH0KfQoKLy8vIEJ1aWxkcyB0aGUgR3JhcGh2aXogRG90IGZpbGUgZm9yIG9uZSBmdW5jdGlvbiBib2R5LgpjbGFzcyBfR3JhcGhHZW5lcmF0b3IgZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHsKICBmaW5hbCBUeXBlR3JhcGhEdW1wIGdsb2JhbDsKICBmaW5hbCBTZXQ8VHlwZUluZm9ybWF0aW9uPiBzZWVuID0gbmV3IFNldDxUeXBlSW5mb3JtYXRpb24+KCk7CiAgZmluYWwgTGlzdDxUeXBlSW5mb3JtYXRpb24+IHdvcmtsaXN0ID0gbmV3IExpc3Q8VHlwZUluZm9ybWF0aW9uPigpOwogIGZpbmFsIE1hcDxUeXBlSW5mb3JtYXRpb24sIGludD4gbm9kZUlkID0gPFR5cGVJbmZvcm1hdGlvbiwgaW50Pnt9OwogIGZpbmFsIFN0cmluZyBGdW5jdGlvbihBYnN0cmFjdFZhbHVlKSBmb3JtYXRUeXBlOwogIGludCB1c2VkSWRzID0gMDsKICBmaW5hbCBPdXRwdXRTaW5rIG91dHB1dDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgZWxlbWVudDsKICBUeXBlSW5mb3JtYXRpb24gcmV0dXJuVmFsdWU7CgogIF9HcmFwaEdlbmVyYXRvcih0aGlzLmdsb2JhbCwgdGhpcy5lbGVtZW50LCB0aGlzLm91dHB1dCwgdGhpcy5mb3JtYXRUeXBlKSB7CiAgICByZXR1cm5WYWx1ZSA9IGdsb2JhbC5pbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgIGdldE5vZGUocmV0dXJuVmFsdWUpOyAvLyBFbnN1cmUgcmV0dXJuIHZhbHVlIGlzIHBhcnQgb2YgZ3JhcGguCiAgICBhcHBlbmQoJ2RpZ3JhcGggeycpOwogIH0KCiAgdm9pZCBmaW5pc2goKSB7CiAgICBhcHBlbmQoJ30nKTsKICB9CgogIC8vLyBFbnN1cmVzIHRoYXQgYWxsIG5vZGVzIHdoaWNoIGhhdmUgYmVlbiByZWZlcmVuY2VkIGFyZSBnZW5lcmF0ZWQuCiAgLy8vCiAgLy8vIFNvbWV0aW1lcyBhbiBpbnB1dCB0byBhIFR5cGVJbmZvcm1hdGlvbiBub2RlIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc2FtZQogIC8vLyBmdW5jdGlvbiBib2R5LCBhbmQgdGhlIGdyYXBoIGxvb2tzIGNvbmZ1c2luZyBpZiB0aGV5IGFyZSBtaXNzaW5nLgogIHZvaWQgYWRkTWlzc2luZ05vZGVzKCkgewogICAgd2hpbGUgKHdvcmtsaXN0LmlzTm90RW1wdHkpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG5vZGUgPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGFzc2VydChub2RlSWQuY29udGFpbnNLZXkobm9kZSkpOwogICAgICB2aXNpdChub2RlKTsKICAgIH0KICB9CgogIHZvaWQgdmlzaXQoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChzZWVuLmNvbnRhaW5zKGluZm8pKSByZXR1cm47CiAgICBpbmZvLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgYXBwZW5kKFN0cmluZyBzdHJpbmcpIHsKICAgIG91dHB1dC4uYWRkKHN0cmluZykuLmFkZCgnXG4nKTsKICB9CgogIFN0cmluZyBzaG9ydGVuKFN0cmluZyB0ZXh0KSB7CiAgICBpZiAodGV4dC5sZW5ndGggPiA0MCkgewogICAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMCwgMTkpICsgJy4uLicgKyB0ZXh0LnN1YnN0cmluZyh0ZXh0Lmxlbmd0aCAtIDE4KTsKICAgIH0KICAgIHJldHVybiB0ZXh0OwogIH0KCiAgaW50IGdldEZyZXNoSWQoKSA9PiArK3VzZWRJZHM7CgogIC8vLyBPYnRhaW5zIGEgdW5pcXVlIElEIGZvciB0aGUgbm9kZSByZXByZXNlbnRpbmcgW2luZm9dLgogIFN0cmluZyBnZXROb2RlKFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpbnQgaWQgPSBub2RlSWQucHV0SWZBYnNlbnQoaW5mbywgKCkgewogICAgICB3b3JrbGlzdC5hZGQoaW5mbyk7IC8vIEVuc3VyZSB0aGF0IHRoZSByZWZlcmVuY2VkIG5vZGUgaXMgZ2VuZXJhdGVkLgogICAgICByZXR1cm4gZ2V0RnJlc2hJZCgpOwogICAgfSk7CiAgICByZXR1cm4gJyRpZCc7CiAgfQoKICBmaW5hbCBSZWdFeHAgZXNjYXBlUmVnZXhwID0gbmV3IFJlZ0V4cCgnWyJ7fTw+fF0nKTsKCiAgLy8vIEVzY2FwZXMgY2hhcmFjdGVycyBpbiBbdGV4dF0gc28gaXQgY2FuIGJlIHVzZWQgYXMgcGFydCBvZiBhIGxhYmVsLgogIFN0cmluZyBlc2NhcGVMYWJlbChTdHJpbmcgdGV4dCkgewogICAgcmV0dXJuIHRleHQucmVwbGFjZUFsbE1hcHBlZChlc2NhcGVSZWdleHAsIChtKSA9PiAnXFwke20uZ3JvdXAoMCl9Jyk7CiAgfQoKICAvLy8gQ3JlYXRlcyBhbiBlZGdlIGZyb20gW3NyY10gdG8gW2RzdF0uCiAgLy8vCiAgLy8vIElmIFtkc3RdIGlzIGEgcmVjb3JkIHR5cGUgbm9kZSwgW3BvcnRdIG1heSByZWZlciB0byBvbmUgb2YgdGhlIGZpZWxkcwogIC8vLyBkZWZpbmVkIGluIHRoYXQgcmVjb3JkIChlLmcuIGBvYmpgLCBgYXJnMGAsIGBhcmcxYCwgZXRjKQogIHZvaWQgYWRkRWRnZShUeXBlSW5mb3JtYXRpb24gc3JjLCBUeXBlSW5mb3JtYXRpb24gZHN0LAogICAgICB7U3RyaW5nIHBvcnQsIFN0cmluZyBjb2xvcjogJ2JsYWNrJ30pIHsKICAgIGlmIChpc0V4dGVybmFsKHNyYykgJiYgaXNFeHRlcm5hbChkc3QpKSB7CiAgICAgIHJldHVybjsgLy8gRG8gbm90IGFkZCBlZGdlcyBiZXR3ZWVuIGV4dGVybmFsIG5vZGVzLgogICAgfQogICAgU3RyaW5nIGRzdFRleHQgPSBnZXROb2RlKGRzdCk7CiAgICBpZiAocG9ydCAhPSBudWxsKSB7CiAgICAgIGRzdFRleHQgKz0gJzokcG9ydCc7CiAgICB9CiAgICBpZiAoc3JjIGlzIENvbmNyZXRlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgIC8vIENvbmNyZXRlIHR5cGVzIGNhbiBoYXZlIGEgaHVnZSBudW1iZXIgb2YgdXNlcyB3aGljaCB3aWxsIGZsb29kIHRoZQogICAgICAvLyBncmFwaCB3aXRoIHZlcnkgbG9uZyBoYXJkLXRvLWZvbGxvdyBlZGdlcy4gQ29weSB0aGUgY29uY3JldGUgbm9kZXMKICAgICAgLy8gZm9yIGV2ZXJ5IHVzZSB0byBlbmhhbmNlIHJlYWRhYmlsaXR5LgogICAgICBpbnQgaWQgPSBnZXRGcmVzaElkKCk7CiAgICAgIFN0cmluZyB0eXBlID0gZXNjYXBlTGFiZWwoJyR7Zm9ybWF0VHlwZShzcmMudHlwZSl9Jyk7CiAgICAgIFN0cmluZyB0ZXh0ID0gJ0NvbmNyZXRlJzsKICAgICAgU3RyaW5nIGxhYmVsID0gJ3skdGV4dHw8cmV0dXJuVHlwZT4gJHR5cGV9JzsKICAgICAgYXBwZW5kKCckaWQgW3NoYXBlPXJlY29yZCxzdHlsZT1kb3R0ZWQsbGFiZWw9IiRsYWJlbCJdJyk7CiAgICAgIGFwcGVuZCgnJGlkIC0+ICRkc3RUZXh0IFtjb2xvcj0iJGNvbG9yIl0nKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZCgnJHtnZXROb2RlKHNyYyl9OnJldHVyblR5cGUgLT4gJGRzdFRleHQgW2NvbG9yPSIkY29sb3IiXScpOwogICAgfQogIH0KCiAgLy8gU29tZSBncmFwaHMgYXJlIGZsb29kZWQgYnkgYSBodWdlIG51bWJlciBvZiBwaGkgYW5kIG5hcnJvdyBub2Rlcy4KICAvLyBXZSBjb2xvciB0aGUgbm9kZXMgc28gdGhlICJpbnRlcmVzdGluZyIgbm9kZXMgc3RhbmQgb3V0IG1vcmUuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBkZWZhdWx0Tm9kZUNvbG9yID0gJyNlZWZmZWUnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcGhpQ29sb3IgPSAnI2VlZmZmZic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBuYXJyb3dDb2xvciA9IHBoaUNvbG9yOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY2FsbENvbG9yID0gJyNmZmZmZWUnOwoKICAvLyBDb2xvcnMgZm9yIGVkZ2VzIGJhc2VkIG9uIHdoZXRoZXIgdGhleSB3ZXJlIGFkZGVkIG9yIHJlbW92ZWQgZHVyaW5nIHRoZQogIC8vIGFuYWx5c2lzLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdW5jaGFuZ2VkRWRnZSA9ICdibGFjayc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhZGRlZEVkZ2UgPSAnZ3JlZW40JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHJlbW92ZWRFZGdlID0gJ3JlZDMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGVtcG9yYXJ5RWRnZSA9ICdvcmFuZ2UnOyAvLyBBZGRlZCBhbmQgdGhlbiByZW1vdmVkIGFnYWluLgoKICBib29sIGlzRXh0ZXJuYWwoVHlwZUluZm9ybWF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBub2RlICE9IHJldHVyblZhbHVlICYmIG5vZGUuY29udGV4dE1lbWJlciAhPSBlbGVtZW50OwogIH0KCiAgU3RyaW5nIGdldFN0eWxlRm9yTm9kZShUeXBlSW5mb3JtYXRpb24gbm9kZSwgU3RyaW5nIGNvbG9yKSB7CiAgICByZXR1cm4gaXNFeHRlcm5hbChub2RlKQogICAgICAgID8gJ3N0eWxlPWRvdHRlZCcKICAgICAgICA6ICdzdHlsZT1maWxsZWQsZmlsbGNvbG9yPSIkY29sb3IiJzsKICB9CgogIC8vLyBBZGRzIGRldGFpbHMgdGhhdCBhcmUgbm90IHNwZWNpZmljIHRvIGEgc3ViY2xhc3Mgb2YgW1R5cGVJbmZvcm1hdGlvbl0uCiAgU3RyaW5nIGFwcGVuZERldGFpbHMoVHlwZUluZm9ybWF0aW9uIG5vZGUsIFN0cmluZyB0ZXh0KSB7CiAgICBpZiAobm9kZSA9PSByZXR1cm5WYWx1ZSkgewogICAgICByZXR1cm4gJyR0ZXh0XG4ocmV0dXJuIHZhbHVlKSc7CiAgICB9CiAgICBpZiAobm9kZS5jb250ZXh0TWVtYmVyICE9IG51bGwgJiYgbm9kZS5jb250ZXh0TWVtYmVyICE9IGVsZW1lbnQpIHsKICAgICAgcmV0dXJuICckdGV4dFxuKGZyb20gJHtub2RlLmNvbnRleHRNZW1iZXJ9KSc7CiAgICB9CiAgICByZXR1cm4gdGV4dDsKICB9CgogIC8vLyBDcmVhdGVzIGEgbm9kZSBmb3IgW25vZGVdIGRpc3BsYXlpbmcgdGhlIGdpdmVuIFt0ZXh0XSBpbiBpdHMgYm94LgogIC8vLwogIC8vLyBbaW5wdXRzXSBzcGVjaWZ5IG5hbWVkIGlucHV0cyB0byB0aGUgbm9kZS4gSWYgb21pdHRlZCwgZWRnZXMgd2lsbCBiZQogIC8vLyBiYXNlZCBvbiBbbm9kZS5hc3NpZ25tZW50c10uCiAgdm9pZCBhZGROb2RlKFR5cGVJbmZvcm1hdGlvbiBub2RlLCBTdHJpbmcgdGV4dCwKICAgICAge1N0cmluZyBjb2xvcjogZGVmYXVsdE5vZGVDb2xvciwgTWFwPFN0cmluZywgVHlwZUluZm9ybWF0aW9uPiBpbnB1dHN9KSB7CiAgICBzZWVuLmFkZChub2RlKTsKICAgIFN0cmluZyBzdHlsZSA9IGdldFN0eWxlRm9yTm9kZShub2RlLCBjb2xvcik7CiAgICB0ZXh0ID0gYXBwZW5kRGV0YWlscyhub2RlLCB0ZXh0KTsKICAgIHRleHQgPSBlc2NhcGVMYWJlbCh0ZXh0KTsKICAgIFN0cmluZyBpZCA9IGdldE5vZGUobm9kZSk7CiAgICBTdHJpbmcgcmV0dXJuVHlwZSA9IGVzY2FwZUxhYmVsKGZvcm1hdFR5cGUobm9kZS50eXBlKSk7CiAgICBpZiAoaW5wdXRzICE9IG51bGwpIHsKICAgICAgSXRlcmFibGU8U3RyaW5nPiBrZXlzID0gaW5wdXRzLmtleXMud2hlcmUoKGtleSkgPT4gaW5wdXRzW2tleV0gIT0gbnVsbCk7CiAgICAgIFN0cmluZyBoZWFkZXIgPSBrZXlzLm1hcCgoa2V5KSA9PiAnPGEka2V5PiAka2V5Jykuam9pbignfCcpOwogICAgICBTdHJpbmcgbGFiZWwgPSAne3skaGVhZGVyfXwkdGV4dHw8cmV0dXJuVHlwZT4gJHJldHVyblR5cGV9JzsKICAgICAgYXBwZW5kKCckaWQgW3NoYXBlPXJlY29yZCxsYWJlbD0iJGxhYmVsIiwkc3R5bGVdJyk7CiAgICAgIGZvciAoU3RyaW5nIGtleSBpbiBrZXlzKSB7CiAgICAgICAgYWRkRWRnZShpbnB1dHNba2V5XSwgbm9kZSwgcG9ydDogJ2Eka2V5Jyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyBsYWJlbCA9ICd7JHRleHR8PHJldHVyblR5cGU+ICRyZXR1cm5UeXBlfSc7CiAgICAgIGFwcGVuZCgnJGlkIFtzaGFwZT1yZWNvcmQsbGFiZWw9IiRsYWJlbCIsJHN0eWxlXScpOwogICAgICAvLyBBZGQgYXNzaWdubWVudCBlZGdlcy4gQ29sb3IgdGhlIGVkZ2VzIGJhc2VkIG9uIHdoZXRoZXIgdGhleSB3ZXJlCiAgICAgIC8vIGFkZGVkLCByZW1vdmVkLCB0ZW1wb3JhcnksIG9yIHVuY2hhbmdlZC4KICAgICAgZHluYW1pYyBvcmlnaW5hbFNldCA9IGdsb2JhbC5hc3NpZ25tZW50c0JlZm9yZUFuYWx5c2lzW25vZGVdID8/IGNvbnN0IFtdOwogICAgICB2YXIgdHJhY2VyU2V0ID0gZ2xvYmFsLmFzc2lnbm1lbnRzQmVmb3JlVHJhY2luZ1tub2RlXSA/PyBjb25zdCBbXTsKICAgICAgdmFyIGN1cnJlbnRTZXQgPSBub2RlLmFzc2lnbm1lbnRzLnRvU2V0KCk7CiAgICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIGFzc2lnbm1lbnQgaW4gY3VycmVudFNldCkgewogICAgICAgIFN0cmluZyBjb2xvciA9CiAgICAgICAgICAgIG9yaWdpbmFsU2V0LmNvbnRhaW5zKGFzc2lnbm1lbnQpID8gdW5jaGFuZ2VkRWRnZSA6IGFkZGVkRWRnZTsKICAgICAgICBhZGRFZGdlKGFzc2lnbm1lbnQsIG5vZGUsIGNvbG9yOiBjb2xvcik7CiAgICAgIH0KICAgICAgZm9yIChUeXBlSW5mb3JtYXRpb24gYXNzaWdubWVudCBpbiBvcmlnaW5hbFNldCkgewogICAgICAgIGlmICghY3VycmVudFNldC5jb250YWlucyhhc3NpZ25tZW50KSkgewogICAgICAgICAgYWRkRWRnZShhc3NpZ25tZW50LCBub2RlLCBjb2xvcjogcmVtb3ZlZEVkZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50IGluIHRyYWNlclNldCkgewogICAgICAgIGlmICghY3VycmVudFNldC5jb250YWlucyhhc3NpZ25tZW50KSAmJgogICAgICAgICAgICAhb3JpZ2luYWxTZXQuY29udGFpbnMoYXNzaWdubWVudCkpIHsKICAgICAgICAgIGFkZEVkZ2UoYXNzaWdubWVudCwgbm9kZSwgY29sb3I6IHRlbXBvcmFyeUVkZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKFBSSU5UX0dSQVBIX0FMTF9OT0RFUykgewogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiB1c2VyIGluIG5vZGUudXNlcnMpIHsKICAgICAgICBpZiAoIWlzRXh0ZXJuYWwodXNlcikpIHsKICAgICAgICAgIHZpc2l0KHVzZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hcnJvd1R5cGVJbmZvcm1hdGlvbihOYXJyb3dUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgLy8gT21pdCB1bnVzZWQgTmFycm93cy4KICAgIGlmICghUFJJTlRfR1JBUEhfQUxMX05PREVTICYmIGluZm8udXNlcnMuaXNFbXB0eSkgcmV0dXJuOwogICAgYWRkTm9kZShpbmZvLCAnTmFycm93XG4ke2Zvcm1hdFR5cGUoaW5mby50eXBlQW5ub3RhdGlvbil9JywKICAgICAgICBjb2xvcjogbmFycm93Q29sb3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24oUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAvLyBPbWl0IHVudXNlZCBQaGlzLgogICAgaWYgKCFQUklOVF9HUkFQSF9BTExfTk9ERVMgJiYgaW5mby51c2Vycy5pc0VtcHR5KSByZXR1cm47CiAgICBhZGROb2RlKGluZm8sICdQaGkgJHtpbmZvLnZhcmlhYmxlPy5uYW1lID8/ICcnfScsIGNvbG9yOiBwaGlDb2xvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uKAogICAgICBFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTm9kZShpbmZvLCAnRWxlbWVudEluQ29udGFpbmVyJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uKEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdFbGVtZW50SW5TZXQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbihLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdLZXlJbk1hcCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24oVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdWYWx1ZUluTWFwJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdFR5cGVJbmZvcm1hdGlvbihMaXN0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ0xpc3QnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRUeXBlSW5mb3JtYXRpb24oU2V0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ1NldCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcFR5cGVJbmZvcm1hdGlvbihNYXBUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTm9kZShpbmZvLCAnTWFwJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uY3JldGVUeXBlSW5mb3JtYXRpb24oQ29uY3JldGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTm9kZShpbmZvLCAnQ29uY3JldGUnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uKFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgU3RyaW5nIHRleHQgPSBzaG9ydGVuKGluZm8udmFsdWUpLnJlcGxhY2VBbGwoJ1xuJywgJ1xcbicpOwogICAgYWRkTm9kZShpbmZvLCAnU3RyaW5nTGl0ZXJhbFxuIiR0ZXh0IicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uKEJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ0Jvb2xMaXRlcmFsXG4ke2luZm8udmFsdWV9Jyk7CiAgfQoKICB2b2lkIGhhbmRsZUNhbGwoQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbywgU3RyaW5nIHRleHQsCiAgICAgIE1hcDxTdHJpbmcsIFR5cGVJbmZvcm1hdGlvbj4gaW5wdXRzKSB7CiAgICBTdHJpbmcgc291cmNlQ29kZSA9IHNob3J0ZW4oJyR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICB0ZXh0ID0gJyR0ZXh0XG4kc291cmNlQ29kZSc7CiAgICBpZiAoaW5mby5hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoOyArK2kpIHsKICAgICAgICBpbnB1dHNbJ2FyZyRpJ10gPSBpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsW2ldOwogICAgICB9CiAgICAgIGZvciAoU3RyaW5nIGFyZ05hbWUgaW4gaW5mby5hcmd1bWVudHMubmFtZWQua2V5cykgewogICAgICAgIGlucHV0c1thcmdOYW1lXSA9IGluZm8uYXJndW1lbnRzLm5hbWVkW2FyZ05hbWVdOwogICAgICB9CiAgICB9CiAgICBhZGROb2RlKGluZm8sIHRleHQsIGNvbG9yOiBjYWxsQ29sb3IsIGlucHV0czogaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBoYW5kbGVDYWxsKGluZm8sICdDbG9zdXJlQ2FsbFNpdGUnLCB7fSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaGFuZGxlQ2FsbChpbmZvLCAnU3RhdGljQ2FsbFNpdGUnLCB7fSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKAogICAgICBEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaGFuZGxlQ2FsbChpbmZvLCAnRHluYW1pY0NhbGxTaXRlJywgeydvYmonOiBpbmZvLnJlY2VpdmVyfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWVtYmVyVHlwZUluZm9ybWF0aW9uKE1lbWJlclR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdNZW1iZXJcbiR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uKFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdQYXJhbWV0ZXIgJHtpbmZvLmRlYnVnTmFtZX0nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDbG9zdXJlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgU3RyaW5nIHRleHQgPSBzaG9ydGVuKCcke2luZm8uZGVidWdOYW1lfScpOwogICAgYWRkTm9kZShpbmZvLCAnQ2xvc3VyZVxuJHRleHQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBd2FpdFR5cGVJbmZvcm1hdGlvbihBd2FpdFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBTdHJpbmcgdGV4dCA9IHNob3J0ZW4oJyR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICBhZGROb2RlKGluZm8sICdBd2FpdFxuJHRleHQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRZaWVsZFR5cGVJbmZvcm1hdGlvbihZaWVsZFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBTdHJpbmcgdGV4dCA9IHNob3J0ZW4oJyR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICBhZGROb2RlKGluZm8sICdZaWVsZFxuJHRleHQnKTsKICB9Cn0KgcAATk48KgEiJDElHyAVAU9QFQRRTTwEFgQoJARLRwQWLwEnIU8xTjE3ATUBTRsaPDwbMAgGBAFCGTw8Gy8IBgQBHhk5NTE8KA5IGAgGJS8ZDDQyOjdRNx8KIxoSHhoKCAYEAUkbBlEYNU4iJT8tHCgjKCgiIw8hCA0RTwZKNk0vGjwWBiYEAgE4Nx5ARkUzExseHwFNSkMZBAESEQQBRwZPSBsiNCgTBgQBJSUXBAEfJAQBIBxPBhEEASEBPCkrSxsIEgQBNgFJJEoEASsGTD85Li46BiMYGwYqTEwvHTwgM0AyDUkGBAFHQzQsLi0BTQ8vLCxRASpBBAE/HBktBAFNPB8mBkc0BhEEAUgGSyMyTxQxJh4fPBpPQ0M6ITMIDTk6SjJQSTE3F0oxCDgwOQoINjAxOwoIBiExIRcKCAYEAQxAHD5AHQQBDEgZPkgEAQwvMCkEAQxMIwQBDEQfBAEMSCEEAQw8GwQBDDoaBAEMOhoEAQxEHwQBDE4/LQQBDEoxBAE9LTYhIkM4CDo5CAY7BAEMLC0tBAEMUCwEAQwsLUEEAQxAMAQBDEYyBAEMQjAlBAEMPjAjBAEMPjAjBAIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfZHVtcC5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVfc3lzdGVtLmRhcnTAAGHgLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdhYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKCi8vLyBTdHJhdGVneSBmb3IgY3JlYXRpbmcgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIG1lbWJlcnMgYW5kIHBhcmFtZXRlcnMgYW5kIHR5cGUKLy8vIGluZm9ybWF0aW9uIGZvciBub2Rlcy4KYWJzdHJhY3QgY2xhc3MgVHlwZVN5c3RlbVN0cmF0ZWd5IHsKICAvLy8gQ3JlYXRlcyBbTWVtYmVyVHlwZUluZm9ybWF0aW9uXSBmb3IgW21lbWJlcl0uCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNyZWF0ZU1lbWJlclR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCBNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIENyZWF0ZXMgW1BhcmFtZXRlclR5cGVJbmZvcm1hdGlvbl0gZm9yIFtwYXJhbWV0ZXJdLgogIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBjcmVhdGVQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTG9jYWwgcGFyYW1ldGVyLAogICAgICBUeXBlU3lzdGVtIHR5cGVzKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBwYXJhbWV0ZXIgaW4gW2Z1bmN0aW9uXS4KICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIHZvaWQgZihMb2NhbCBwYXJhbWV0ZXIpKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbbm9kZV0gaXMgdmFsaWQgYXMgYSBnZW5lcmFsIHBoaSBub2RlLgogIGJvb2wgY2hlY2tQaGlOb2RlKGlyLk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW25vZGVdIGlzIHZhbGlkIGFzIGEgbG9vcCBwaGkgbm9kZS4KICBib29sIGNoZWNrTG9vcFBoaU5vZGUoaXIuTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbbm9kZV0gaXMgdmFsaWQgYXMgYSBsaXN0IGFsbG9jYXRpb24gbm9kZS4KICBib29sIGNoZWNrTGlzdE5vZGUoaXIuTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbbm9kZV0gaXMgdmFsaWQgYXMgYSBzZXQgYWxsb2NhdGlvbiBub2RlLgogIGJvb2wgY2hlY2tTZXROb2RlKGlyLk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW25vZGVdIGlzIHZhbGlkIGFzIGEgbWFwIGFsbG9jYXRpb24gbm9kZS4KICBib29sIGNoZWNrTWFwTm9kZShpci5Ob2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtjbHNdIGlzIHZhbGlkIGFzIGEgdHlwZSBtYXNrIGJhc2UgY2xhc3MuCiAgYm9vbCBjaGVja0NsYXNzRW50aXR5KENsYXNzRW50aXR5IGNscyk7Cn0KCi8vLyBUaGUgY2xhc3MgW1NpbXBsZUluZmVycmVyVmlzaXRvcl0gd2lsbCB1c2Ugd2hlbiB3b3JraW5nIG9uIHR5cGVzLgpjbGFzcyBUeXBlU3lzdGVtIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIFR5cGVTeXN0ZW1TdHJhdGVneSBzdHJhdGVneTsKCiAgLy8vIFtwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zXSBhbmQgW21lbWJlclR5cGVJbmZvcm1hdGlvbnNdIG9yZGVyZWQgYnkKICAvLy8gY3JlYXRpb24gdGltZS4gVGhpcyBpcyB1c2VkIGFzIHRoZSBpbmZlcmVuY2UgZW5xdWV1ZWluZyBvcmRlci4KICBmaW5hbCBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gX29yZGVyZWRUeXBlSW5mb3JtYXRpb25zID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgLy8vIFtQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25dcyBmb3IgcGFyYW1ldGVycy4KICBmaW5hbCBNYXA8TG9jYWwsIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbj4gcGFyYW1ldGVyVHlwZUluZm9ybWF0aW9ucyA9CiAgICAgIG5ldyBNYXA8TG9jYWwsIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgLy8vIFtNZW1iZXJUeXBlSW5mb3JtYXRpb25dcyBmb3IgbWVtYmVycy4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJUeXBlSW5mb3JtYXRpb24+IG1lbWJlclR5cGVJbmZvcm1hdGlvbnMgPQogICAgICBuZXcgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVHlwZUluZm9ybWF0aW9uPigpOwoKICAvLy8gW0xpc3RUeXBlSW5mb3JtYXRpb25dIGZvciBhbGxvY2F0ZWQgbGlzdHMuCiAgZmluYWwgTWFwPGlyLlRyZWVOb2RlLCBMaXN0VHlwZUluZm9ybWF0aW9uPiBhbGxvY2F0ZWRMaXN0cyA9CiAgICAgIG5ldyBNYXA8aXIuVHJlZU5vZGUsIExpc3RUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vLyBbU2V0VHlwZUluZm9ybWF0aW9uXSBmb3IgYWxsb2NhdGVkIFNldHMuCiAgZmluYWwgTWFwPGlyLlRyZWVOb2RlLCBTZXRUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZFNldHMgPQogICAgICBuZXcgTWFwPGlyLlRyZWVOb2RlLCBTZXRUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vLyBbTWFwVHlwZUluZm9ybWF0aW9uXSBmb3IgYWxsb2NhdGVkIE1hcHMuCiAgZmluYWwgTWFwPGlyLlRyZWVOb2RlLCBUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZE1hcHMgPQogICAgICBuZXcgTWFwPGlyLlRyZWVOb2RlLCBUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vLyBDbG9zdXJlcyBmb3VuZCBkdXJpbmcgdGhlIGFuYWx5c2lzLgogIGZpbmFsIFNldDxUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZENsb3N1cmVzID0gbmV3IFNldDxUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vLyBDYWNoZSBvZiBbQ29uY3JldGVUeXBlSW5mb3JtYXRpb25dLgogIGZpbmFsIE1hcDxBYnN0cmFjdFZhbHVlLCBUeXBlSW5mb3JtYXRpb24+IGNvbmNyZXRlVHlwZXMgPQogICAgICBuZXcgTWFwPEFic3RyYWN0VmFsdWUsIFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgLy8vIExpc3Qgb2YgW1R5cGVJbmZvcm1hdGlvbl1zIGZvciBjYWxscyBpbnNpZGUgbWV0aG9kIGJvZGllcy4KICBmaW5hbCBMaXN0PENhbGxTaXRlVHlwZUluZm9ybWF0aW9uPiBhbGxvY2F0ZWRDYWxscyA9CiAgICAgIDxDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgLy8vIExpc3Qgb2YgW1R5cGVJbmZvcm1hdGlvbl1zIGFsbG9jYXRlZCBpbnNpZGUgbWV0aG9kIGJvZGllcyAobmFycm93aW5nLAogIC8vLyBwaGlzLCBhbmQgY29udGFpbmVycykuCiAgZmluYWwgTGlzdDxUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZFR5cGVzID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgLy8vIFtwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zXSBhbmQgW21lbWJlclR5cGVJbmZvcm1hdGlvbnNdIG9yZGVyZWQgYnkKICAvLy8gY3JlYXRpb24gdGltZS4gVGhpcyBpcyB1c2VkIGFzIHRoZSBpbmZlcmVuY2UgZW5xdWV1ZWluZyBvcmRlci4KICBJdGVyYWJsZTxUeXBlSW5mb3JtYXRpb24+IGdldCBvcmRlcmVkVHlwZUluZm9ybWF0aW9ucyA9PgogICAgICBfb3JkZXJlZFR5cGVJbmZvcm1hdGlvbnM7CgogIEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGFsbFR5cGVzID0+IFsKICAgICAgICBwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zLnZhbHVlcywKICAgICAgICBtZW1iZXJUeXBlSW5mb3JtYXRpb25zLnZhbHVlcywKICAgICAgICBhbGxvY2F0ZWRMaXN0cy52YWx1ZXMsCiAgICAgICAgYWxsb2NhdGVkU2V0cy52YWx1ZXMsCiAgICAgICAgYWxsb2NhdGVkTWFwcy52YWx1ZXMsCiAgICAgICAgYWxsb2NhdGVkQ2xvc3VyZXMsCiAgICAgICAgY29uY3JldGVUeXBlcy52YWx1ZXMsCiAgICAgICAgYWxsb2NhdGVkQ2FsbHMsCiAgICAgICAgYWxsb2NhdGVkVHlwZXMKICAgICAgXS5leHBhbmQoKHgpID0+IHgpOwoKICBUeXBlU3lzdGVtKHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLnN0cmF0ZWd5KSB7CiAgICBub25OdWxsRW1wdHlUeXBlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSk7CiAgfQoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgLy8vIFVzZWQgdG8gZ3JvdXAgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZXMgYnkgdGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlaXIKICAvLy8gY3JlYXRpb24uCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIF9jdXJyZW50TWVtYmVyID0gbnVsbDsKICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gZ2V0IGN1cnJlbnRNZW1iZXIgPT4gX2N1cnJlbnRNZW1iZXI7CgogIHZvaWQgd2l0aE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCwgdm9pZCBhY3Rpb24oKSkgewogICAgYXNzZXJ0KF9jdXJyZW50TWVtYmVyID09IG51bGwsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIkFscmVhZHkgY29uc3RydWN0aW5nIGdyYXBoIGZvciAkX2N1cnJlbnRNZW1iZXIuIikpOwogICAgX2N1cnJlbnRNZW1iZXIgPSBnZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgIGFjdGlvbigpOwogICAgX2N1cnJlbnRNZW1iZXIgPSBudWxsOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIG51bGxUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBudWxsVHlwZSB7CiAgICBpZiAobnVsbFR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gbnVsbFR5cGVDYWNoZTsKICAgIHJldHVybiBudWxsVHlwZUNhY2hlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLm51bGxUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBpbnRUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBpbnRUeXBlIHsKICAgIGlmIChpbnRUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGludFR5cGVDYWNoZTsKICAgIHJldHVybiBpbnRUeXBlQ2FjaGUgPSBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gdWludDMyVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgdWludDMyVHlwZSB7CiAgICBpZiAodWludDMyVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiB1aW50MzJUeXBlQ2FjaGU7CiAgICByZXR1cm4gdWludDMyVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4udWludDMyVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gdWludDMxVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgdWludDMxVHlwZSB7CiAgICBpZiAodWludDMxVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiB1aW50MzFUeXBlQ2FjaGU7CiAgICByZXR1cm4gdWludDMxVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4udWludDMxVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gcG9zaXRpdmVJbnRUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBwb3NpdGl2ZUludFR5cGUgewogICAgaWYgKHBvc2l0aXZlSW50VHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBwb3NpdGl2ZUludFR5cGVDYWNoZTsKICAgIHJldHVybiBwb3NpdGl2ZUludFR5cGVDYWNoZSA9CiAgICAgICAgZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gZG91YmxlVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgZG91YmxlVHlwZSB7CiAgICBpZiAoZG91YmxlVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBkb3VibGVUeXBlQ2FjaGU7CiAgICByZXR1cm4gZG91YmxlVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gbnVtVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgbnVtVHlwZSB7CiAgICBpZiAobnVtVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBudW1UeXBlQ2FjaGU7CiAgICByZXR1cm4gbnVtVHlwZUNhY2hlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLm51bVR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGJvb2xUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBib29sVHlwZSB7CiAgICBpZiAoYm9vbFR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gYm9vbFR5cGVDYWNoZTsKICAgIHJldHVybiBib29sVHlwZUNhY2hlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBmdW5jdGlvblR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGZ1bmN0aW9uVHlwZSB7CiAgICBpZiAoZnVuY3Rpb25UeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGZ1bmN0aW9uVHlwZUNhY2hlOwogICAgcmV0dXJuIGZ1bmN0aW9uVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZnVuY3Rpb25UeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBsaXN0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgbGlzdFR5cGUgewogICAgaWYgKGxpc3RUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGxpc3RUeXBlQ2FjaGU7CiAgICByZXR1cm4gbGlzdFR5cGVDYWNoZSA9IGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5saXN0VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY29uc3RMaXN0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgY29uc3RMaXN0VHlwZSB7CiAgICBpZiAoY29uc3RMaXN0VHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBjb25zdExpc3RUeXBlQ2FjaGU7CiAgICByZXR1cm4gY29uc3RMaXN0VHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY29uc3RMaXN0VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gZml4ZWRMaXN0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgZml4ZWRMaXN0VHlwZSB7CiAgICBpZiAoZml4ZWRMaXN0VHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBmaXhlZExpc3RUeXBlQ2FjaGU7CiAgICByZXR1cm4gZml4ZWRMaXN0VHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZml4ZWRMaXN0VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gZ3Jvd2FibGVMaXN0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgZ3Jvd2FibGVMaXN0VHlwZSB7CiAgICBpZiAoZ3Jvd2FibGVMaXN0VHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBncm93YWJsZUxpc3RUeXBlQ2FjaGU7CiAgICByZXR1cm4gZ3Jvd2FibGVMaXN0VHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZ3Jvd2FibGVMaXN0VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gc2V0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgc2V0VHlwZSA9PgogICAgICBzZXRUeXBlQ2FjaGUgPz89IGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5zZXRUeXBlKTsKCiAgVHlwZUluZm9ybWF0aW9uIGNvbnN0U2V0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgY29uc3RTZXRUeXBlID0+IGNvbnN0U2V0VHlwZUNhY2hlID8/PQogICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY29uc3RTZXRUeXBlKTsKCiAgVHlwZUluZm9ybWF0aW9uIG1hcFR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IG1hcFR5cGUgewogICAgaWYgKG1hcFR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gbWFwVHlwZUNhY2hlOwogICAgcmV0dXJuIG1hcFR5cGVDYWNoZSA9IGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5tYXBUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjb25zdE1hcFR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGNvbnN0TWFwVHlwZSB7CiAgICBpZiAoY29uc3RNYXBUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGNvbnN0TWFwVHlwZUNhY2hlOwogICAgcmV0dXJuIGNvbnN0TWFwVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY29uc3RNYXBUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBzdHJpbmdUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBzdHJpbmdUeXBlIHsKICAgIGlmIChzdHJpbmdUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIHN0cmluZ1R5cGVDYWNoZTsKICAgIHJldHVybiBzdHJpbmdUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiB0eXBlVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgdHlwZVR5cGUgewogICAgaWYgKHR5cGVUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIHR5cGVUeXBlQ2FjaGU7CiAgICByZXR1cm4gdHlwZVR5cGVDYWNoZSA9IGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi50eXBlVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gZHluYW1pY1R5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGR5bmFtaWNUeXBlIHsKICAgIGlmIChkeW5hbWljVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBkeW5hbWljVHlwZUNhY2hlOwogICAgcmV0dXJuIGR5bmFtaWNUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYXN5bmNGdXR1cmVUeXBlQ2FjaGU7CiAgLy8gU3VidHlwZSBvZiBGdXR1cmUgcmV0dXJuZWQgYnkgYXN5bmMgbWV0aG9kcy4KICBUeXBlSW5mb3JtYXRpb24gZ2V0IGFzeW5jRnV0dXJlVHlwZSB7CiAgICBpZiAoYXN5bmNGdXR1cmVUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGFzeW5jRnV0dXJlVHlwZUNhY2hlOwogICAgcmV0dXJuIGFzeW5jRnV0dXJlVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uYXN5bmNGdXR1cmVUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBzeW5jU3Rhckl0ZXJhYmxlVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgc3luY1N0YXJJdGVyYWJsZVR5cGUgewogICAgaWYgKHN5bmNTdGFySXRlcmFibGVUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIHN5bmNTdGFySXRlcmFibGVUeXBlQ2FjaGU7CiAgICByZXR1cm4gc3luY1N0YXJJdGVyYWJsZVR5cGVDYWNoZSA9CiAgICAgICAgZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLnN5bmNTdGFySXRlcmFibGVUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBhc3luY1N0YXJTdHJlYW1UeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBhc3luY1N0YXJTdHJlYW1UeXBlIHsKICAgIGlmIChhc3luY1N0YXJTdHJlYW1UeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGFzeW5jU3RhclN0cmVhbVR5cGVDYWNoZTsKICAgIHJldHVybiBhc3luY1N0YXJTdHJlYW1UeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5hc3luY1N0YXJTdHJlYW1UeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBub25OdWxsRW1wdHlUeXBlOwoKICBUeXBlSW5mb3JtYXRpb24gc3RyaW5nTGl0ZXJhbFR5cGUoU3RyaW5nIHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sIHZhbHVlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBib29sTGl0ZXJhbFR5cGUoYm9vbCB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdmFsdWUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCBiZXR3ZWVuIFtmaXJzdFR5cGVdIGFuZAogIC8vLyBbc2Vjb25kVHlwZV0uCiAgVHlwZUluZm9ybWF0aW9uIGNvbXB1dGVMVUIoCiAgICAgIFR5cGVJbmZvcm1hdGlvbiBmaXJzdFR5cGUsIFR5cGVJbmZvcm1hdGlvbiBzZWNvbmRUeXBlKSB7CiAgICBpZiAoZmlyc3RUeXBlID09IG51bGwpIHJldHVybiBzZWNvbmRUeXBlOwogICAgaWYgKGZpcnN0VHlwZSA9PSBzZWNvbmRUeXBlKSByZXR1cm4gZmlyc3RUeXBlOwogICAgaWYgKGZpcnN0VHlwZSA9PSBub25OdWxsRW1wdHlUeXBlKSByZXR1cm4gc2Vjb25kVHlwZTsKICAgIGlmIChzZWNvbmRUeXBlID09IG5vbk51bGxFbXB0eVR5cGUpIHJldHVybiBmaXJzdFR5cGU7CiAgICBpZiAoZmlyc3RUeXBlID09IGR5bmFtaWNUeXBlIHx8IHNlY29uZFR5cGUgPT0gZHluYW1pY1R5cGUpIHsKICAgICAgcmV0dXJuIGR5bmFtaWNUeXBlOwogICAgfQogICAgcmV0dXJuIGdldENvbmNyZXRlVHlwZUZvcigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi51bmlvbihmaXJzdFR5cGUudHlwZSwgc2Vjb25kVHlwZS50eXBlKSk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYHNlbGVjdG9yYCBzaG91bGQgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBuZXcKICAvLy8gYHJlY2VpdmVyVHlwZWAuCiAgYm9vbCBzZWxlY3Rvck5lZWRzVXBkYXRlKFR5cGVJbmZvcm1hdGlvbiBpbmZvLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIHJldHVybiBpbmZvLnR5cGUgIT0gbWFzazsKICB9CgogIGJvb2wgX2lzTm9uTnVsbE5hcnJvdyhUeXBlSW5mb3JtYXRpb24gdHlwZSkgPT4KICAgICAgdHlwZSBpcyBOYXJyb3dUeXBlSW5mb3JtYXRpb24gJiYKICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHR5cGUudHlwZUFubm90YXRpb24pLmlzRGVmaW5pdGVseUZhbHNlOwoKICAvLy8gUmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gW3R5cGVdIGFuZCBbYW5ub3RhdGlvbl0uCiAgLy8vIFtpc051bGxhYmxlXSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYW5ub3RhdGlvbiBpbXBsaWVzIGEgbnVsbAogIC8vLyB0eXBlLgogIFR5cGVJbmZvcm1hdGlvbiBuYXJyb3dUeXBlKFR5cGVJbmZvcm1hdGlvbiB0eXBlLCBEYXJ0VHlwZSBhbm5vdGF0aW9uLAogICAgICB7Ym9vbCBpc051bGxhYmxlOiB0cnVlfSkgewogICAgQWJzdHJhY3RWYWx1ZSBvdGhlclR5cGU7CiAgICBpZiAoYW5ub3RhdGlvbi5pc1ZvaWQpIHJldHVybiB0eXBlOwogICAgaWYgKGFubm90YXRpb24udHJlYXRBc0R5bmFtaWMpIHsKICAgICAgaWYgKGlzTnVsbGFibGUpIHJldHVybiB0eXBlOwogICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgYWxyZWFkeSBuYXJyb3dlZCB0byBiZSBub3QtbnVsbCwgdGhlcmUgaXMgbm8gdmFsdWUKICAgICAgLy8gaW4gYWRkaW5nIGFub3RoZXIgbmFycm93aW5nIG5vZGUuCiAgICAgIGlmIChfaXNOb25OdWxsTmFycm93KHR5cGUpKSByZXR1cm4gdHlwZTsKICAgICAgb3RoZXJUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwoZHluYW1pY1R5cGUudHlwZSk7CiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlID0gYW5ub3RhdGlvbjsKICAgICAgaWYgKGludGVyZmFjZS5lbGVtZW50ID09IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICAgIGlmIChpc051bGxhYmxlKSByZXR1cm4gdHlwZTsKICAgICAgICBpZiAoX2lzTm9uTnVsbE5hcnJvdyh0eXBlKSkgcmV0dXJuIHR5cGU7CiAgICAgICAgb3RoZXJUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwoZHluYW1pY1R5cGUudHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3RoZXJUeXBlID0KICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YnR5cGUoaW50ZXJmYWNlLmVsZW1lbnQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaXNUeXBlZGVmIHx8IGFubm90YXRpb24uaXNGdW5jdGlvblR5cGUpIHsKICAgICAgb3RoZXJUeXBlID0gZnVuY3Rpb25UeXBlLnR5cGU7CiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaXNGdXR1cmVPcikgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IG5hcnJvd2luZyBvZiBGdXR1cmVPci4KICAgICAgcmV0dXJuIHR5cGU7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoYW5ub3RhdGlvbi5pc1R5cGVWYXJpYWJsZSk7CiAgICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogTmFycm93IHRvIGJvdW5kLgogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIGlmIChpc051bGxhYmxlKSB7CiAgICAgIG90aGVyVHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmluY2x1ZGVOdWxsKG90aGVyVHlwZSk7CiAgICB9CiAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNFeGFjdCh0eXBlLnR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHJldHVybiB0eXBlOwogICAgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGUgPQogICAgICAgIG5ldyBOYXJyb3dUeXBlSW5mb3JtYXRpb24oX2Fic3RyYWN0VmFsdWVEb21haW4sIHR5cGUsIG90aGVyVHlwZSk7CiAgICBhbGxvY2F0ZWRUeXBlcy5hZGQobmV3VHlwZSk7CiAgICByZXR1cm4gbmV3VHlwZTsKICB9CgogIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBnZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihMb2NhbCBwYXJhbWV0ZXIpIHsKICAgIHJldHVybiBwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zLnB1dElmQWJzZW50KHBhcmFtZXRlciwgKCkgewogICAgICBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uID0KICAgICAgICAgIHN0cmF0ZWd5LmNyZWF0ZVBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbigKICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgcGFyYW1ldGVyLCB0aGlzKTsKICAgICAgX29yZGVyZWRUeXBlSW5mb3JtYXRpb25zLmFkZCh0eXBlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm4gdHlwZUluZm9ybWF0aW9uOwogICAgfSk7CiAgfQoKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXJUeXBlKAogICAgICB2b2lkIGYoTG9jYWwgcGFyYW1ldGVyLCBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uKSkgewogICAgcGFyYW1ldGVyVHlwZUluZm9ybWF0aW9ucy5mb3JFYWNoKGYpOwogIH0KCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGdldEluZmVycmVkVHlwZU9mTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGFzc2VydCghbWVtYmVyLmlzQWJzdHJhY3QsCiAgICAgICAgZmFpbGVkQXQobWVtYmVyLCAiVW5leHBlY3RlZCBhYnN0cmFjdCBtZW1iZXIgJG1lbWJlci4iKSk7CiAgICByZXR1cm4gbWVtYmVyVHlwZUluZm9ybWF0aW9uc1ttZW1iZXJdID8/PSBfZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIobWVtYmVyKTsKICB9CgogIHZvaWQgZm9yRWFjaE1lbWJlclR5cGUoCiAgICAgIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uKSkgewogICAgbWVtYmVyVHlwZUluZm9ybWF0aW9ucy5mb3JFYWNoKGYpOwogIH0KCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIF9nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uID0KICAgICAgICBzdHJhdGVneS5jcmVhdGVNZW1iZXJUeXBlSW5mb3JtYXRpb24oX2Fic3RyYWN0VmFsdWVEb21haW4sIG1lbWJlcik7CiAgICBfb3JkZXJlZFR5cGVJbmZvcm1hdGlvbnMuYWRkKHR5cGVJbmZvcm1hdGlvbik7CiAgICByZXR1cm4gdHlwZUluZm9ybWF0aW9uOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGludGVybmFsIGluZmVycmVyIHJlcHJlc2VudGF0aW9uIGZvciBbbWFza10uCiAgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24gZ2V0Q29uY3JldGVUeXBlRm9yKEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgYXNzZXJ0KG1hc2sgIT0gbnVsbCk7CiAgICByZXR1cm4gY29uY3JldGVUeXBlcy5wdXRJZkFic2VudChtYXNrLCAoKSB7CiAgICAgIHJldHVybiBuZXcgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24obWFzayk7CiAgICB9KTsKICB9CgogIFN0cmluZyBnZXRJbmZlcnJlZFNpZ25hdHVyZU9mTWV0aG9kKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICBFbGVtZW50VHlwZUluZm9ybWF0aW9uIGluZm8gPSBnZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihmdW5jdGlvbik7CiAgICB2YXIgcmVzID0gIiI7CiAgICBzdHJhdGVneS5mb3JFYWNoUGFyYW1ldGVyKGZ1bmN0aW9uLCAoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0gZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXIocGFyYW1ldGVyKTsKICAgICAgcmVzICs9ICIke3Jlcy5pc0VtcHR5ID8gJygnIDogJywgJ30ke3R5cGUudHlwZX0gJHtwYXJhbWV0ZXIubmFtZX0iOwogICAgfSk7CiAgICByZXMgKz0gIikgLT4gJHtpbmZvLnR5cGV9IjsKICAgIHJldHVybiByZXM7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gbm9uTnVsbFN1YnR5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tDbGFzc0VudGl0eShjbHMpKTsKICAgIHJldHVybiBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YnR5cGUoY2xzKSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gbm9uTnVsbFN1YmNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgYXNzZXJ0KHN0cmF0ZWd5LmNoZWNrQ2xhc3NFbnRpdHkoY2xzKSk7CiAgICByZXR1cm4gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxTdWJjbGFzcyhjbHMpKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBub25OdWxsRXhhY3QoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tDbGFzc0VudGl0eShjbHMpKTsKICAgIHJldHVybiBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbEV4YWN0KGNscykpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIG5vbk51bGxFbXB0eSgpIHsKICAgIHJldHVybiBub25OdWxsRW1wdHlUeXBlOwogIH0KCiAgYm9vbCBpc051bGwoVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgIHJldHVybiB0eXBlID09IG51bGxUeXBlOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGFsbG9jYXRlTGlzdCgKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUsIGlyLlRyZWVOb2RlIG5vZGUsIE1lbWJlckVudGl0eSBlbmNsb3NpbmcsCiAgICAgIFtUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGUsIGludCBsZW5ndGhdKSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tMaXN0Tm9kZShub2RlKSk7CiAgICBDbGFzc0VudGl0eSB0eXBlZERhdGFDbGFzcyA9IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy50eXBlZERhdGFDbGFzczsKICAgIGJvb2wgaXNUeXBlZEFycmF5ID0gdHlwZWREYXRhQ2xhc3MgIT0gbnVsbCAmJgogICAgICAgIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZCh0eXBlZERhdGFDbGFzcykgJiYKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAuaXNJbnN0YW5jZU9mT3JOdWxsKHR5cGUudHlwZSwgdHlwZWREYXRhQ2xhc3MpCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlOwogICAgYm9vbCBpc0NvbnN0ID0gKHR5cGUudHlwZSA9PSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jb25zdExpc3RUeXBlKTsKICAgIGJvb2wgaXNGaXhlZCA9ICh0eXBlLnR5cGUgPT0gX2Fic3RyYWN0VmFsdWVEb21haW4uZml4ZWRMaXN0VHlwZSkgfHwKICAgICAgICBpc0NvbnN0IHx8CiAgICAgICAgaXNUeXBlZEFycmF5OwogICAgYm9vbCBpc0VsZW1lbnRJbmZlcnJlZCA9IGlzQ29uc3QgfHwgaXNUeXBlZEFycmF5OwoKICAgIGludCBpbmZlcnJlZExlbmd0aCA9IGlzRml4ZWQgPyBsZW5ndGggOiBudWxsOwogICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZU1hc2sgPQogICAgICAgIGlzRWxlbWVudEluZmVycmVkID8gZWxlbWVudFR5cGUudHlwZSA6IGR5bmFtaWNUeXBlLnR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVDb250YWluZXJWYWx1ZSgKICAgICAgICB0eXBlLnR5cGUsIG5vZGUsIGVuY2xvc2luZywgZWxlbWVudFR5cGVNYXNrLCBpbmZlcnJlZExlbmd0aCk7CiAgICBFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24gZWxlbWVudCA9CiAgICAgICAgbmV3IEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbigKICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sIGN1cnJlbnRNZW1iZXIsIGVsZW1lbnRUeXBlKTsKICAgIGVsZW1lbnQuaW5mZXJyZWQgPSBpc0VsZW1lbnRJbmZlcnJlZDsKCiAgICBhbGxvY2F0ZWRUeXBlcy5hZGQoZWxlbWVudCk7CiAgICByZXR1cm4gYWxsb2NhdGVkTGlzdHNbbm9kZV0gPSBuZXcgTGlzdFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgbWFzaywgZWxlbWVudCwgbGVuZ3RoKTsKICB9CgogIC8vLyBDcmVhdGVzIGEgW1R5cGVJbmZvcm1hdGlvbl0gb2JqZWN0IGVpdGhlciBmb3IgdGhlIGNsb3N1cml6YXRpb24gb2YgYQogIC8vLyBzdGF0aWMgb3IgdG9wLWxldmVsIG1ldGhvZCBbZWxlbWVudF0gdXNlZCBhcyBhIGZ1bmN0aW9uIGNvbnN0YW50IG9yIGZvcgogIC8vLyB0aGUgc3ludGhlc2l6ZWQgJ2NhbGwnIG1ldGhvZCBbZWxlbWVudF0gY3JlYXRlZCBmb3IgYSBsb2NhbCBmdW5jdGlvbi4KICBUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVDbG9zdXJlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByZXN1bHQgPSBuZXcgQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgZWxlbWVudCk7CiAgICBhbGxvY2F0ZWRDbG9zdXJlcy5hZGQocmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVTZXQoCiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlLCBpci5UcmVlTm9kZSBub2RlLCBNZW1iZXJFbnRpdHkgZW5jbG9zaW5nLAogICAgICBbVHlwZUluZm9ybWF0aW9uIGVsZW1lbnRUeXBlXSkgewogICAgYXNzZXJ0KHN0cmF0ZWd5LmNoZWNrU2V0Tm9kZShub2RlKSk7CiAgICBib29sIGlzQ29uc3QgPSB0eXBlLnR5cGUgPT0gX2Fic3RyYWN0VmFsdWVEb21haW4uY29uc3RTZXRUeXBlOwoKICAgIEFic3RyYWN0VmFsdWUgZWxlbWVudFR5cGVNYXNrID0KICAgICAgICBpc0NvbnN0ID8gZWxlbWVudFR5cGUudHlwZSA6IGR5bmFtaWNUeXBlLnR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVTZXRWYWx1ZSgKICAgICAgICB0eXBlLnR5cGUsIG5vZGUsIGVuY2xvc2luZywgZWxlbWVudFR5cGVNYXNrKTsKICAgIEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBlbGVtZW50ID0gbmV3IEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgZWxlbWVudFR5cGUpOwogICAgZWxlbWVudC5pbmZlcnJlZCA9IGlzQ29uc3Q7CgogICAgYWxsb2NhdGVkVHlwZXMuYWRkKGVsZW1lbnQpOwogICAgcmV0dXJuIGFsbG9jYXRlZFNldHNbbm9kZV0gPQogICAgICAgIG5ldyBTZXRUeXBlSW5mb3JtYXRpb24oY3VycmVudE1lbWJlciwgbWFzaywgZWxlbWVudCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVNYXAoCiAgICAgIENvbmNyZXRlVHlwZUluZm9ybWF0aW9uIHR5cGUsIGlyLlRyZWVOb2RlIG5vZGUsIE1lbWJlckVudGl0eSBlbGVtZW50LAogICAgICBbTGlzdDxUeXBlSW5mb3JtYXRpb24+IGtleVR5cGVzLCBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gdmFsdWVUeXBlc10pIHsKICAgIGFzc2VydChzdHJhdGVneS5jaGVja01hcE5vZGUobm9kZSkpOwogICAgYXNzZXJ0KGtleVR5cGVzLmxlbmd0aCA9PSB2YWx1ZVR5cGVzLmxlbmd0aCk7CiAgICBib29sIGlzRml4ZWQgPSAodHlwZS50eXBlID09IF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnN0TWFwVHlwZSk7CgogICAgVHlwZUluZm9ybWF0aW9uIGtleVR5cGUsIHZhbHVlVHlwZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2V5VHlwZXMubGVuZ3RoOyArK2kpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUgPSBrZXlUeXBlc1tpXTsKICAgICAga2V5VHlwZSA9IGtleVR5cGUgPT0gbnVsbAogICAgICAgICAgPyBhbGxvY2F0ZVBoaShudWxsLCBudWxsLCB0eXBlLCBpc1RyeTogZmFsc2UpCiAgICAgICAgICA6IGFkZFBoaUlucHV0KG51bGwsIGtleVR5cGUsIHR5cGUpOwoKICAgICAgdHlwZSA9IHZhbHVlVHlwZXNbaV07CiAgICAgIHZhbHVlVHlwZSA9IHZhbHVlVHlwZSA9PSBudWxsCiAgICAgICAgICA/IGFsbG9jYXRlUGhpKG51bGwsIG51bGwsIHR5cGUsIGlzVHJ5OiBmYWxzZSkKICAgICAgICAgIDogYWRkUGhpSW5wdXQobnVsbCwgdmFsdWVUeXBlLCB0eXBlKTsKICAgIH0KCiAgICBrZXlUeXBlID0KICAgICAgICBrZXlUeXBlID09IG51bGwgPyBub25OdWxsRW1wdHkoKSA6IHNpbXBsaWZ5UGhpKG51bGwsIG51bGwsIGtleVR5cGUpOwogICAgdmFsdWVUeXBlID0KICAgICAgICB2YWx1ZVR5cGUgPT0gbnVsbCA/IG5vbk51bGxFbXB0eSgpIDogc2ltcGxpZnlQaGkobnVsbCwgbnVsbCwgdmFsdWVUeXBlKTsKCiAgICBBYnN0cmFjdFZhbHVlIGtleVR5cGVNYXNrLCB2YWx1ZVR5cGVNYXNrOwogICAgaWYgKGlzRml4ZWQpIHsKICAgICAga2V5VHlwZU1hc2sgPSBrZXlUeXBlLnR5cGU7CiAgICAgIHZhbHVlVHlwZU1hc2sgPSB2YWx1ZVR5cGUudHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIGtleVR5cGVNYXNrID0gdmFsdWVUeXBlTWFzayA9IGR5bmFtaWNUeXBlLnR5cGU7CiAgICB9CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVNYXBWYWx1ZSgKICAgICAgICB0eXBlLnR5cGUsIG5vZGUsIGVsZW1lbnQsIGtleVR5cGVNYXNrLCB2YWx1ZVR5cGVNYXNrKTsKCiAgICBUeXBlSW5mb3JtYXRpb24ga2V5VHlwZUluZm8gPSBuZXcgS2V5SW5NYXBUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sIGN1cnJlbnRNZW1iZXIsIGtleVR5cGUpOwogICAgVHlwZUluZm9ybWF0aW9uIHZhbHVlVHlwZUluZm8gPSBuZXcgVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgdmFsdWVUeXBlKTsKICAgIGFsbG9jYXRlZFR5cGVzLmFkZChrZXlUeXBlSW5mbyk7CiAgICBhbGxvY2F0ZWRUeXBlcy5hZGQodmFsdWVUeXBlSW5mbyk7CgogICAgTWFwVHlwZUluZm9ybWF0aW9uIG1hcCA9CiAgICAgICAgbmV3IE1hcFR5cGVJbmZvcm1hdGlvbihjdXJyZW50TWVtYmVyLCBtYXNrLCBrZXlUeXBlSW5mbywgdmFsdWVUeXBlSW5mbyk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlUeXBlcy5sZW5ndGg7ICsraSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSA9IG1hcC5hZGRFbnRyeUFzc2lnbm1lbnQoCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwga2V5VHlwZXNbaV0sIHZhbHVlVHlwZXNbaV0sIHRydWUpOwogICAgICBpZiAobmV3VHlwZSAhPSBudWxsKSBhbGxvY2F0ZWRUeXBlcy5hZGQobmV3VHlwZSk7CiAgICB9CgogICAgLy8gU2hvcnRjdXQ6IElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpcnN0IGFwcHJveGltYXRpb24gb2YgdGhlIGtleS92YWx1ZSB0eXBlLAogICAgLy8gc3RhcnQgcHJvcGFnYXRpbmcgaXQgZWFybHkuCiAgICBpZiAoaXNGaXhlZCkgbWFwLm1hcmtBc0luZmVycmVkKCk7CgogICAgYWxsb2NhdGVkTWFwc1tub2RlXSA9IG1hcDsKICAgIHJldHVybiBtYXA7CiAgfQoKICBBYnN0cmFjdFZhbHVlIG5ld1R5cGVkU2VsZWN0b3IoVHlwZUluZm9ybWF0aW9uIGluZm8sIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgLy8gT25seSB0eXBlIHRoZSBzZWxlY3RvciBpZiBbaW5mb10gaXMgY29uY3JldGUsIGJlY2F1c2UgdGhlIG90aGVyCiAgICAvLyBraW5kcyBvZiBbVHlwZUluZm9ybWF0aW9uXSBoYXZlIHRoZSBlbXB0eSB0eXBlIGF0IHRoaXMgcG9pbnQgb2YKICAgIC8vIGFuYWx5c2lzLgogICAgcmV0dXJuIGluZm8uaXNDb25jcmV0ZSA/IGluZm8udHlwZSA6IG1hc2s7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyB0eXBlIHRoYXQgdW5pb25zIFtmaXJzdElucHV0XSBhbmQgW3NlY29uZElucHV0XS4KICBUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVEaWFtb25kUGhpKAogICAgICBUeXBlSW5mb3JtYXRpb24gZmlyc3RJbnB1dCwgVHlwZUluZm9ybWF0aW9uIHNlY29uZElucHV0KSB7CiAgICBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIHJlc3VsdCA9IG5ldyBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uKAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjdXJyZW50TWVtYmVyLCBudWxsLCBudWxsLAogICAgICAgIGlzVHJ5OiBmYWxzZSk7CiAgICByZXN1bHQuYWRkQXNzaWdubWVudChmaXJzdElucHV0KTsKICAgIHJlc3VsdC5hZGRBc3NpZ25tZW50KHNlY29uZElucHV0KTsKICAgIGFsbG9jYXRlZFR5cGVzLmFkZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gX2FkZFBoaSgKICAgICAgaXIuTm9kZSBub2RlLCBMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIGlucHV0VHlwZSwgYm9vbCBpc1RyeSkgewogICAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiByZXN1bHQgPSBuZXcgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgbm9kZSwgdmFyaWFibGUsCiAgICAgICAgaXNUcnk6IGlzVHJ5KTsKICAgIGFsbG9jYXRlZFR5cGVzLmFkZChyZXN1bHQpOwogICAgcmVzdWx0LmFkZEFzc2lnbm1lbnQoaW5wdXRUeXBlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyB0eXBlIGZvciBob2xkaW5nIHRoZSBwb3RlbnRpYWwgdHlwZXMgb2YgW2VsZW1lbnRdLgogIC8vLyBbaW5wdXRUeXBlXSBpcyB0aGUgZmlyc3QgaW5jb21pbmcgdHlwZSBvZiB0aGUgcGhpLgogIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVQaGkoCiAgICAgIGlyLk5vZGUgbm9kZSwgTG9jYWwgdmFyaWFibGUsIFR5cGVJbmZvcm1hdGlvbiBpbnB1dFR5cGUsCiAgICAgIHtib29sIGlzVHJ5fSkgewogICAgYXNzZXJ0KHN0cmF0ZWd5LmNoZWNrUGhpTm9kZShub2RlKSk7CiAgICAvLyBDaGVjayBpZiBbaW5wdXRUeXBlXSBpcyBhIHBoaSBmb3IgYSBsb2NhbCB1cGRhdGVkIGluCiAgICAvLyB0aGUgdHJ5L2NhdGNoIGJsb2NrIFtub2RlXS4gSWYgaXQgaXMsIG5vIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcKICAgIC8vIHBoaS4KICAgIGlmIChpbnB1dFR5cGUgaXMgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiAmJgogICAgICAgIGlucHV0VHlwZS5icmFuY2hOb2RlID09IG5vZGUgJiYKICAgICAgICBpbnB1dFR5cGUuaXNUcnkpIHsKICAgICAgcmV0dXJuIGlucHV0VHlwZTsKICAgIH0KICAgIHJldHVybiBfYWRkUGhpKG5vZGUsIHZhcmlhYmxlLCBpbnB1dFR5cGUsIGlzVHJ5KTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHR5cGUgZm9yIGhvbGRpbmcgdGhlIHBvdGVudGlhbCB0eXBlcyBvZiBbZWxlbWVudF0uCiAgLy8vIFtpbnB1dFR5cGVdIGlzIHRoZSBmaXJzdCBpbmNvbWluZyB0eXBlIG9mIHRoZSBwaGkuIFthbGxvY2F0ZUxvb3BQaGldCiAgLy8vIG9ubHkgZGlmZmVycyBmcm9tIFthbGxvY2F0ZVBoaV0gaW4gdGhhdCBpdCBhbGxvd3MgdGhlIHVuZGVybHlpbmcKICAvLy8gaW1wbGVtZW50YXRpb24gb2YgW1R5cGVTeXN0ZW1dIHRvIGRpZmZlcmVudGlhdGUgUGhpIG5vZGVzIGR1ZSB0byBsb29wcwogIC8vLyBmcm9tIG90aGVyIG1lcmdpbmcgdXNlcy4KICBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIGFsbG9jYXRlTG9vcFBoaSgKICAgICAgaXIuTm9kZSBub2RlLCBMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIGlucHV0VHlwZSwKICAgICAge2Jvb2wgaXNUcnl9KSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tMb29wUGhpTm9kZShub2RlKSk7CiAgICByZXR1cm4gX2FkZFBoaShub2RlLCB2YXJpYWJsZSwgaW5wdXRUeXBlLCBpc1RyeSk7CiAgfQoKICAvLy8gU2ltcGxpZXMgdGhlIHBoaSByZXByZXNlbnRpbmcgW2VsZW1lbnRdIGFuZCBvZiB0aGUgdHlwZQogIC8vLyBbcGhpVHlwZV0uIEZvciBleGFtcGxlLCBpZiB0aGlzIHBoaSBoYXMgb25lIGluY29taW5nIGlucHV0LCBhbgogIC8vLyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBjb3VsZCBqdXN0IHJldHVybiB0aGF0IGluY29taW5nCiAgLy8vIGlucHV0IHR5cGUuCiAgVHlwZUluZm9ybWF0aW9uIHNpbXBsaWZ5UGhpKAogICAgICBpci5Ob2RlIG5vZGUsIExvY2FsIHZhcmlhYmxlLCBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIHBoaVR5cGUpIHsKICAgIGFzc2VydChwaGlUeXBlLmJyYW5jaE5vZGUgPT0gbm9kZSk7CiAgICBpZiAocGhpVHlwZS5hc3NpZ25tZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuIHBoaVR5cGUuYXNzaWdubWVudHMuZmlyc3Q7CiAgICByZXR1cm4gcGhpVHlwZTsKICB9CgogIC8vLyBBZGRzIFtuZXdUeXBlXSBhcyBhbiBpbnB1dCBvZiBbcGhpVHlwZV0uCiAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBhZGRQaGlJbnB1dChMb2NhbCB2YXJpYWJsZSwKICAgICAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBwaGlUeXBlLCBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSkgewogICAgcGhpVHlwZS5hZGRBc3NpZ25tZW50KG5ld1R5cGUpOwogICAgcmV0dXJuIHBoaVR5cGU7CiAgfQoKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlTWFzayhJdGVyYWJsZTxUeXBlSW5mb3JtYXRpb24+IGFzc2lnbm1lbnRzKSB7CiAgICByZXR1cm4gam9pblR5cGVNYXNrcyhhc3NpZ25tZW50cy5tYXAoKGUpID0+IGUudHlwZSkpOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBqb2luVHlwZU1hc2tzKEl0ZXJhYmxlPEFic3RyYWN0VmFsdWU+IG1hc2tzKSB7CiAgICB2YXIgZHluYW1pY1R5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgIC8vIE9wdGltaXphdGlvbjogd2UgYXJlIGl0ZXJhdGluZyBvdmVyIG1hc2tzIHR3aWNlLCBidXQgYmVjYXVzZSBgbWFza3NgIGlzIGEKICAgIC8vIG1hcHBlZCBpdGVyYWJsZSwgd2Ugc2F2ZSB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgdG8gYXZvaWQgY29tcHV0aW5nIHRoZW0KICAgIC8vIGFnYWluLgogICAgdmFyIGxpc3QgPSBbXTsKICAgIGJvb2wgaXNEeW5hbWljSW5nb3JpbmdOdWxsID0gZmFsc2U7CiAgICBib29sIG1heUJlTnVsbCA9IGZhbHNlOwogICAgZm9yIChBYnN0cmFjdFZhbHVlIG1hc2sgaW4gbWFza3MpIHsKICAgICAgLy8gRG9uJ3QgZG8gYW55IHdvcmsgb24gY29tcHV0aW5nIHVuaW9ucyBpZiB3ZSBrbm93IHRoYXQgYWZ0ZXIgYWxsIHRoYXQKICAgICAgLy8gd29yayB0aGUgcmVzdWx0IHdpbGwgYmUgYGR5bmFtaWNgLgogICAgICAvLyBUT0RPKHNpZ211bmQpOiBjaGFuZ2UgdG8gYG1hc2sgPT0gZHluYW1pY1R5cGVgIHNvIHdlIGNhbiBjb250aW51ZSB0bwogICAgICAvLyB0cmFjayB0aGUgbm9uLW51bGxhYmxlIGJpdC4KICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKG1hc2spLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgaXNEeW5hbWljSW5nb3JpbmdOdWxsID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKG1hc2spLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgbWF5QmVOdWxsID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoaXNEeW5hbWljSW5nb3JpbmdOdWxsICYmIG1heUJlTnVsbCkgcmV0dXJuIGR5bmFtaWNUeXBlOwogICAgICBsaXN0LmFkZChtYXNrKTsKICAgIH0KCiAgICBBYnN0cmFjdFZhbHVlIG5ld1R5cGUgPSBudWxsOwogICAgZm9yIChBYnN0cmFjdFZhbHVlIG1hc2sgaW4gbGlzdCkgewogICAgICBuZXdUeXBlID0KICAgICAgICAgIG5ld1R5cGUgPT0gbnVsbCA/IG1hc2sgOiBfYWJzdHJhY3RWYWx1ZURvbWFpbi51bmlvbihuZXdUeXBlLCBtYXNrKTsKICAgICAgLy8gTGlrZXdpc2UgLSBzdG9wIGVhcmx5IGlmIHdlIGFscmVhZHkgcmVhY2ggZHluYW1pYy4KICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKG5ld1R5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgaXNEeW5hbWljSW5nb3JpbmdOdWxsID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKG5ld1R5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgbWF5QmVOdWxsID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoaXNEeW5hbWljSW5nb3JpbmdOdWxsICYmIG1heUJlTnVsbCkgcmV0dXJuIGR5bmFtaWNUeXBlOwogICAgfQoKICAgIHJldHVybiBuZXdUeXBlID8/IF9hYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZTsKICB9Cn0KgqEATk48ASgZJCEYJSABUBskNDVFATo7LxcZATJLAT0jATonAUEkAUAjAUAjAUAqAgFGEyMlAUpFTgEySTIBLEo2ATE/MwEvPTIBLzovASpNASo8MQFBNyMBTB1EAUpFOyABLionHx4eGx4YFxoBMUsEATIoAVAQLz0BOSNPNw4bBAEhITVOBAEgIDNMBAEjIzkdPQQBIyM5HT0EASgoQyJCBAEjIzkdPQQBICAzTAQBISE1TgQBJSU9Hz8EASEhNU4EASYmPyBABAEmJj8gQAQBKSlFI0MEASAhSQElPD0BICAzTAQBJSU9Hz8EASMjOR09BAEhITVOBAEkJDsePgQBKDIoQyJCBAEtLU0nRwQBLCxLJkYEASQBNC1HBAEwK0UEATwUHj8uMzo6QRoGH0YEAUgWRx4EATEnSgFAQwxIIR0oJSNMKy9GLSxKJTFIDxRKCEQlKD0TDSkrEwYWPwZPHkohFAQBSUExMzY1HggEAR1LKgQBRx9CUAQBGkwnBAFILEwzHAQBP0MaMDAIBAFBRRI8REoIIBAEATQsTwQBNSxQBAEyLE0EASMdBAEmHQQBIEYzKk0yRh07H0ZIExY2ATIkQURGMC8/KgEhO0UEAUtOTDw5NyMTBAEfRicpQwEkNz42SzsgASEhPgQBH0xMKTJFASgwKiA4LgEcJDgwBgEOTRBRAS4TIiYNNgY+PwE/N0M5JScBHVEBMDhDOAYBUSMnAR8QBAFNR0cRLwQBRSZBRjkXJicgEwQBJU1GPRcgJRMEAUc5KT8WKTxHDDIoGxgGNgQBR0tHTR8tPxYtNgQBPkVEEh9JKEsUBAEvOEQkFAQBSToEAT84UVEOEygcKE4sTiVGJghBGghCFgYBIicQTjxJJghEGghCBgE2BAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfc3lzdGVtLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL3NzYV90cmFjZXIuZGFydMAAVTEvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBzc2EudHJhY2VyOwoKaW1wb3J0ICcuLi8uLi9jb21waWxlcl9uZXcuZGFydCcgc2hvdyBPdXRwdXRTaW5rOwppbXBvcnQgJy4uL2RpYWdub3N0aWNzL2ludmFyaWFudC5kYXJ0JyBzaG93IERFQlVHX01PREU7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBzdWZmaXhGb3JHZXRJbnRlcmNlcHRvcjsKaW1wb3J0ICcuLi90cmFjZXIuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnbm9kZXMuZGFydCc7CgovLy8gT3V0cHV0cyBTU0EgY29kZSBpbiBhIGZvcm1hdCByZWFkYWJsZSBieSBIeWRyYSBJUi4KLy8vIFRyYWNpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgc2VlIC4uL3RyYWNlci5kYXJ0IGZvciBob3cKLy8vIHRvIGVuYWJsZSBpdC4KY2xhc3MgSFRyYWNlciBleHRlbmRzIEhHcmFwaFZpc2l0b3Igd2l0aCBUcmFjZXJVdGlsIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgT3V0cHV0U2luayBvdXRwdXQ7CgogIEhUcmFjZXIodGhpcy5vdXRwdXQsIHRoaXMuY2xvc2VkV29ybGQpOwoKICB2b2lkIHRyYWNlR3JhcGgoU3RyaW5nIG5hbWUsIEhHcmFwaCBncmFwaCkgewogICAgREVCVUdfTU9ERSA9IHRydWU7CiAgICB0YWcoImNmZyIsICgpIHsKICAgICAgcHJpbnRQcm9wZXJ0eSgibmFtZSIsIG5hbWUpOwogICAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogICAgfSk7CiAgfQoKICB2b2lkIGFkZFByZWRlY2Vzc29ycyhIQmFzaWNCbG9jayBibG9jaykgewogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5pc0VtcHR5KSB7CiAgICAgIHByaW50RW1wdHlQcm9wZXJ0eSgicHJlZGVjZXNzb3JzIik7CiAgICB9IGVsc2UgewogICAgICBhZGRJbmRlbnQoKTsKICAgICAgYWRkKCJwcmVkZWNlc3NvcnMiKTsKICAgICAgZm9yIChIQmFzaWNCbG9jayBwcmVkZWNlc3NvciBpbiBibG9jay5wcmVkZWNlc3NvcnMpIHsKICAgICAgICBhZGQoJyAiQiR7cHJlZGVjZXNzb3IuaWR9IicpOwogICAgICB9CiAgICAgIGFkZCgiXG4iKTsKICAgIH0KICB9CgogIHZvaWQgYWRkU3VjY2Vzc29ycyhIQmFzaWNCbG9jayBibG9jaykgewogICAgaWYgKGJsb2NrLnN1Y2Nlc3NvcnMuaXNFbXB0eSkgewogICAgICBwcmludEVtcHR5UHJvcGVydHkoInN1Y2Nlc3NvcnMiKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZEluZGVudCgpOwogICAgICBhZGQoInN1Y2Nlc3NvcnMiKTsKICAgICAgZm9yIChIQmFzaWNCbG9jayBzdWNjZXNzb3IgaW4gYmxvY2suc3VjY2Vzc29ycykgewogICAgICAgIGFkZCgnICJCJHtzdWNjZXNzb3IuaWR9IicpOwogICAgICB9CiAgICAgIGFkZCgiXG4iKTsKICAgIH0KICB9CgogIHZvaWQgYWRkSW5zdHJ1Y3Rpb25zKAogICAgICBISW5zdHJ1Y3Rpb25TdHJpbmdpZmllciBzdHJpbmdpZmllciwgSEluc3RydWN0aW9uTGlzdCBsaXN0KSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGxpc3QuZmlyc3Q7CiAgICAgICAgaW5zdHJ1Y3Rpb24gIT0gbnVsbDsKICAgICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQpIHsKICAgICAgaW50IGJjaSA9IDA7CiAgICAgIGludCB1c2VzID0gaW5zdHJ1Y3Rpb24udXNlZEJ5Lmxlbmd0aDsKICAgICAgU3RyaW5nIGNoYW5nZXMgPSBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5oYXNTaWRlRWZmZWN0cygpID8gJyEnIDogJyAnOwogICAgICBTdHJpbmcgZGVwZW5kcyA9IGluc3RydWN0aW9uLnNpZGVFZmZlY3RzLmRlcGVuZHNPblNvbWV0aGluZygpID8gJz8nIDogJyc7CiAgICAgIGFkZEluZGVudCgpOwogICAgICBTdHJpbmcgdGVtcG9yYXJ5SWQgPSBzdHJpbmdpZmllci50ZW1wb3JhcnlJZChpbnN0cnVjdGlvbik7CiAgICAgIFN0cmluZyBpbnN0cnVjdGlvblN0cmluZyA9IHN0cmluZ2lmaWVyLnZpc2l0KGluc3RydWN0aW9uKTsKICAgICAgYWRkKCIkYmNpICR1c2VzICR0ZW1wb3JhcnlJZCAkaW5zdHJ1Y3Rpb25TdHJpbmcgJGNoYW5nZXMgJGRlcGVuZHMgPHxAXG4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBISW5zdHJ1Y3Rpb25TdHJpbmdpZmllciBzdHJpbmdpZmllciA9CiAgICAgICAgbmV3IEhJbnN0cnVjdGlvblN0cmluZ2lmaWVyKGJsb2NrLCBjbG9zZWRXb3JsZCk7CiAgICBhc3NlcnQoYmxvY2suaWQgIT0gbnVsbCk7CiAgICB0YWcoImJsb2NrIiwgKCkgewogICAgICBwcmludFByb3BlcnR5KCJuYW1lIiwgIkIke2Jsb2NrLmlkfSIpOwogICAgICBwcmludFByb3BlcnR5KCJmcm9tX2JjaSIsIC0xKTsKICAgICAgcHJpbnRQcm9wZXJ0eSgidG9fYmNpIiwgLTEpOwogICAgICBhZGRQcmVkZWNlc3NvcnMoYmxvY2spOwogICAgICBhZGRTdWNjZXNzb3JzKGJsb2NrKTsKICAgICAgcHJpbnRFbXB0eVByb3BlcnR5KCJ4aGFuZGxlcnMiKTsKICAgICAgcHJpbnRFbXB0eVByb3BlcnR5KCJmbGFncyIpOwogICAgICBpZiAoYmxvY2suZG9taW5hdG9yICE9IG51bGwpIHsKICAgICAgICBwcmludFByb3BlcnR5KCJkb21pbmF0b3IiLCAiQiR7YmxvY2suZG9taW5hdG9yLmlkfSIpOwogICAgICB9CiAgICAgIHRhZygic3RhdGVzIiwgKCkgewogICAgICAgIHRhZygibG9jYWxzIiwgKCkgewogICAgICAgICAgcHJpbnRQcm9wZXJ0eSgic2l6ZSIsIDApOwogICAgICAgICAgcHJpbnRQcm9wZXJ0eSgibWV0aG9kIiwgIk5vbmUiKTsKICAgICAgICAgIGJsb2NrLmZvckVhY2hQaGkoKHBoaSkgewogICAgICAgICAgICBTdHJpbmcgcGhpSWQgPSBzdHJpbmdpZmllci50ZW1wb3JhcnlJZChwaGkpOwogICAgICAgICAgICBTdHJpbmdCdWZmZXIgaW5wdXRJZHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGlucHV0SWRzLndyaXRlKHN0cmluZ2lmaWVyLnRlbXBvcmFyeUlkKHBoaS5pbnB1dHNbaV0pKTsKICAgICAgICAgICAgICBpbnB1dElkcy53cml0ZSgiICIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByaW50bG4oIiR7cGhpLmlkfSAkcGhpSWQgWyAkaW5wdXRJZHNdIik7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHRhZygiSElSIiwgKCkgewogICAgICAgIGFkZEluc3RydWN0aW9ucyhzdHJpbmdpZmllciwgYmxvY2sucGhpcyk7CiAgICAgICAgYWRkSW5zdHJ1Y3Rpb25zKHN0cmluZ2lmaWVyLCBibG9jayk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9CgpjbGFzcyBISW5zdHJ1Y3Rpb25TdHJpbmdpZmllciBpbXBsZW1lbnRzIEhWaXNpdG9yPFN0cmluZz4gewogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBIQmFzaWNCbG9jayBjdXJyZW50QmxvY2s7CgogIEhJbnN0cnVjdGlvblN0cmluZ2lmaWVyKHRoaXMuY3VycmVudEJsb2NrLCB0aGlzLmNsb3NlZFdvcmxkKTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgdmlzaXQoSEluc3RydWN0aW9uIG5vZGUpID0+ICcke25vZGUuYWNjZXB0KHRoaXMpfSAke25vZGUuaW5zdHJ1Y3Rpb25UeXBlfSc7CgogIFN0cmluZyB0ZW1wb3JhcnlJZChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIFN0cmluZyBwcmVmaXg7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICd1JzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNDb25mbGljdGluZyhfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAnYyc7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uCiAgICAgICAgLmlzRXh0ZW5kYWJsZUFycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdlJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNGaXhlZEFycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdmJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNNdXRhYmxlQXJyYXkoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ20nOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi5pc0FycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdhJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24uaXNTdHJpbmcoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ3MnOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbgogICAgICAgIC5pc0luZGV4YWJsZVByaW1pdGl2ZShfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAncic7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLmlzQm9vbGVhbihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAnYic7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAnaSc7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLmlzRG91YmxlKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdkJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24uaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ24nOwogICAgfSBlbHNlIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5jb250YWluc0FsbChpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICd2JzsKICAgIH0gZWxzZSB7CiAgICAgIHByZWZpeCA9ICdVJzsKICAgIH0KICAgIHJldHVybiAiJHByZWZpeCR7aW5zdHJ1Y3Rpb24uaWR9IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExhdGVWYWx1ZShITGF0ZVZhbHVlIG5vZGUpIHsKICAgIHJldHVybiAiTGF0ZVZhbHVlOiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0iOwogIH0KCiAgU3RyaW5nIGhhbmRsZUludm9rZUJpbmFyeShISW52b2tlQmluYXJ5IG5vZGUsIFN0cmluZyBvcGNvZGUpIHsKICAgIFN0cmluZyBsZWZ0ID0gdGVtcG9yYXJ5SWQobm9kZS5sZWZ0KTsKICAgIFN0cmluZyByaWdodCA9IHRlbXBvcmFyeUlkKG5vZGUucmlnaHQpOwogICAgcmV0dXJuICckb3Bjb2RlOiAkbGVmdCAkcmlnaHQnOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0QWJzKEhBYnMgbm9kZSkgewogICAgU3RyaW5nIG9wZXJhbmQgPSB0ZW1wb3JhcnlJZChub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuICJBYnM6ICRvcGVyYW5kIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEFkZChIQWRkIG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnQWRkJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEJpdEFuZChIQml0QW5kIG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnQml0QW5kJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEJpdE5vdChIQml0Tm90IG5vZGUpIHsKICAgIFN0cmluZyBvcGVyYW5kID0gdGVtcG9yYXJ5SWQobm9kZS5vcGVyYW5kKTsKICAgIHJldHVybiAiQml0Tm90OiAkb3BlcmFuZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRCaXRPcihIQml0T3Igbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdCaXRPcicpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRCaXRYb3IoSEJpdFhvciBub2RlKSA9PiBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgJ0JpdFhvcicpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRCb3VuZHNDaGVjayhIQm91bmRzQ2hlY2sgbm9kZSkgewogICAgU3RyaW5nIGxlbmd0aElkID0gdGVtcG9yYXJ5SWQobm9kZS5sZW5ndGgpOwogICAgU3RyaW5nIGluZGV4SWQgPSB0ZW1wb3JhcnlJZChub2RlLmluZGV4KTsKICAgIHJldHVybiAiQm91bmRzQ2hlY2s6IGxlbmd0aCA9ICRsZW5ndGhJZCwgaW5kZXggPSAkaW5kZXhJZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRCcmVhayhIQnJlYWsgbm9kZSkgewogICAgSEJhc2ljQmxvY2sgdGFyZ2V0ID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICBpZiAobm9kZS5sYWJlbCAhPSBudWxsKSB7CiAgICAgIHJldHVybiAiQnJlYWsgJHtub2RlLmxhYmVsLmxhYmVsTmFtZX06IChCJHt0YXJnZXQuaWR9KSI7CiAgICB9CiAgICByZXR1cm4gIkJyZWFrOiAoQiR7dGFyZ2V0LmlkfSkiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IGNvbnN0YW50KSA9PiAiQ29uc3RhbnQ6ICR7Y29uc3RhbnQuY29uc3RhbnR9IjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Q29udGludWUoSENvbnRpbnVlIG5vZGUpIHsKICAgIEhCYXNpY0Jsb2NrIHRhcmdldCA9IGN1cnJlbnRCbG9jay5zdWNjZXNzb3JzWzBdOwogICAgaWYgKG5vZGUubGFiZWwgIT0gbnVsbCkgewogICAgICByZXR1cm4gIkNvbnRpbnVlICR7bm9kZS5sYWJlbC5sYWJlbE5hbWV9OiAoQiR7dGFyZ2V0LmlkfSkiOwogICAgfQogICAgcmV0dXJuICJDb250aW51ZTogKEIke3RhcmdldC5pZH0pIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdENyZWF0ZShIQ3JlYXRlIG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVHZW5lcmljSW52b2tlKCJDcmVhdGUiLCAiJHtub2RlLmVsZW1lbnQubmFtZX0iLCBub2RlLmlucHV0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRDcmVhdGVCb3goSENyZWF0ZUJveCBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlR2VuZXJpY0ludm9rZSgiQ3JlYXRlQm94IiwgIiIsIG5vZGUuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdERpdmlkZShIRGl2aWRlIG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnRGl2aWRlJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEV4aXQoSEV4aXQgbm9kZSkgPT4gIkV4aXQiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRGaWVsZEdldChIRmllbGRHZXQgbm9kZSkgewogICAgaWYgKG5vZGUuaXNOdWxsQ2hlY2spIHsKICAgICAgcmV0dXJuICdGaWVsZEdldDogTnVsbENoZWNrICR7dGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcil9JzsKICAgIH0KICAgIFN0cmluZyBmaWVsZE5hbWUgPSBub2RlLmVsZW1lbnQubmFtZTsKICAgIHJldHVybiAnRmllbGRHZXQ6ICR7dGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcil9LiRmaWVsZE5hbWUnOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0RmllbGRTZXQoSEZpZWxkU2V0IG5vZGUpIHsKICAgIFN0cmluZyB2YWx1ZUlkID0gdGVtcG9yYXJ5SWQobm9kZS52YWx1ZSk7CiAgICBTdHJpbmcgZmllbGROYW1lID0gbm9kZS5lbGVtZW50Lm5hbWU7CiAgICByZXR1cm4gJ0ZpZWxkU2V0OiAke3RlbXBvcmFyeUlkKG5vZGUucmVjZWl2ZXIpfS4kZmllbGROYW1lIHRvICR2YWx1ZUlkJzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFJlYWRNb2RpZnlXcml0ZShIUmVhZE1vZGlmeVdyaXRlIG5vZGUpIHsKICAgIFN0cmluZyBmaWVsZE5hbWUgPSBub2RlLmVsZW1lbnQubmFtZTsKICAgIFN0cmluZyByZWNlaXZlcklkID0gdGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcik7CiAgICBTdHJpbmcgb3AgPSBub2RlLmpzT3A7CiAgICBpZiAobm9kZS5pc0Fzc2lnbk9wKSB7CiAgICAgIFN0cmluZyB2YWx1ZUlkID0gdGVtcG9yYXJ5SWQobm9kZS52YWx1ZSk7CiAgICAgIHJldHVybiAnUmVhZE1vZGlmeVdyaXRlOiAkcmVjZWl2ZXJJZC4kZmllbGROYW1lICRvcD0gJHZhbHVlSWQnOwogICAgfSBlbHNlIGlmIChub2RlLmlzUHJlT3ApIHsKICAgICAgcmV0dXJuICdSZWFkTW9kaWZ5V3JpdGU6ICRvcCRyZWNlaXZlcklkLiRmaWVsZE5hbWUnOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICdSZWFkTW9kaWZ5V3JpdGU6ICRyZWNlaXZlcklkLiRmaWVsZE5hbWUkb3AnOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSkgewogICAgcmV0dXJuICdHZXRMZW5ndGg6ICR7dGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcil9JzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExvY2FsR2V0KEhMb2NhbEdldCBub2RlKSB7CiAgICBTdHJpbmcgbG9jYWxOYW1lID0gbm9kZS52YXJpYWJsZS5uYW1lOwogICAgcmV0dXJuICdMb2NhbEdldDogJHt0ZW1wb3JhcnlJZChub2RlLmxvY2FsKX0uJGxvY2FsTmFtZSc7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMb2NhbFNldChITG9jYWxTZXQgbm9kZSkgewogICAgU3RyaW5nIHZhbHVlSWQgPSB0ZW1wb3JhcnlJZChub2RlLnZhbHVlKTsKICAgIFN0cmluZyBsb2NhbE5hbWUgPSBub2RlLnZhcmlhYmxlLm5hbWU7CiAgICByZXR1cm4gJ0xvY2FsU2V0OiAke3RlbXBvcmFyeUlkKG5vZGUubG9jYWwpfS4kbG9jYWxOYW1lIHRvICR2YWx1ZUlkJzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEdvdG8oSEdvdG8gbm9kZSkgewogICAgSEJhc2ljQmxvY2sgdGFyZ2V0ID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICByZXR1cm4gIkdvdG86IChCJHt0YXJnZXQuaWR9KSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRHcmVhdGVyKEhHcmVhdGVyIG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnR3JlYXRlcicpOwogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEdyZWF0ZXJFcXVhbChIR3JlYXRlckVxdWFsIG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgJ0dyZWF0ZXJFcXVhbCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnSWRlbnRpdHknKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SWYoSElmIG5vZGUpIHsKICAgIEhCYXNpY0Jsb2NrIHRoZW5CbG9jayA9IGN1cnJlbnRCbG9jay5zdWNjZXNzb3JzWzBdOwogICAgSEJhc2ljQmxvY2sgZWxzZUJsb2NrID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMV07CiAgICBTdHJpbmcgY29uZGl0aW9uSWQgPSB0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSk7CiAgICByZXR1cm4gIklmICgkY29uZGl0aW9uSWQpOiAoQiR7dGhlbkJsb2NrLmlkfSkgZWxzZSAoQiR7ZWxzZUJsb2NrLmlkfSkiOwogIH0KCiAgU3RyaW5nIGhhbmRsZUdlbmVyaWNJbnZva2UoCiAgICAgIFN0cmluZyBpbnZva2VUeXBlLCBTdHJpbmcgZnVuY3Rpb25OYW1lLCBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzKSB7CiAgICBTdHJpbmdCdWZmZXIgYXJndW1lbnRzU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgIT0gMCkgYXJndW1lbnRzU3RyaW5nLndyaXRlKCIsICIpOwogICAgICBhcmd1bWVudHNTdHJpbmcud3JpdGUodGVtcG9yYXJ5SWQoYXJndW1lbnRzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gIiRpbnZva2VUeXBlOiAkZnVuY3Rpb25OYW1lKCRhcmd1bWVudHNTdHJpbmcpIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEluZGV4KEhJbmRleCBub2RlKSB7CiAgICBTdHJpbmcgcmVjZWl2ZXIgPSB0ZW1wb3JhcnlJZChub2RlLnJlY2VpdmVyKTsKICAgIFN0cmluZyBpbmRleCA9IHRlbXBvcmFyeUlkKG5vZGUuaW5kZXgpOwogICAgcmV0dXJuICJJbmRleDogJHJlY2VpdmVyWyRpbmRleF0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIG5vZGUpIHsKICAgIFN0cmluZyByZWNlaXZlciA9IHRlbXBvcmFyeUlkKG5vZGUucmVjZWl2ZXIpOwogICAgU3RyaW5nIGluZGV4ID0gdGVtcG9yYXJ5SWQobm9kZS5pbmRleCk7CiAgICBTdHJpbmcgdmFsdWUgPSB0ZW1wb3JhcnlJZChub2RlLnZhbHVlKTsKICAgIHJldHVybiAiSW5kZXhBc3NpZ246ICRyZWNlaXZlclskaW5kZXhdID0gJHZhbHVlIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludGVyY2VwdG9yKEhJbnRlcmNlcHRvciBub2RlKSB7CiAgICBTdHJpbmcgdmFsdWUgPSB0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSk7CiAgICBpZiAobm9kZS5pbnRlcmNlcHRlZENsYXNzZXMgIT0gbnVsbCkgewogICAgICBTdHJpbmcgY2xzID0gc3VmZml4Rm9yR2V0SW50ZXJjZXB0b3IoY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgICBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLCBub2RlLmludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICAgIHJldHVybiAiSW50ZXJjZXB0b3IgKCR7Y2xzfSk6ICR2YWx1ZSI7CiAgICB9CiAgICByZXR1cm4gIkludGVyY2VwdG9yOiAkdmFsdWUiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlQ2xvc3VyZShISW52b2tlQ2xvc3VyZSBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VEeW5hbWljKG5vZGUsICJJbnZva2VDbG9zdXJlIik7CgogIFN0cmluZyBoYW5kbGVJbnZva2VEeW5hbWljKEhJbnZva2VEeW5hbWljIGludm9rZSwgU3RyaW5nIGtpbmQpIHsKICAgIFN0cmluZyByZWNlaXZlciA9IHRlbXBvcmFyeUlkKGludm9rZS5yZWNlaXZlcik7CiAgICBTdHJpbmcgbmFtZSA9IGludm9rZS5zZWxlY3Rvci5uYW1lOwogICAgU3RyaW5nIHRhcmdldCA9ICIkcmVjZWl2ZXIuJG5hbWUiOwogICAgaW50IG9mZnNldCA9IEhJbnZva2UuQVJHVU1FTlRTX09GRlNFVDsKICAgIExpc3QgYXJndW1lbnRzID0gaW52b2tlLmlucHV0cy5zdWJsaXN0KG9mZnNldCk7CiAgICByZXR1cm4gaGFuZGxlR2VuZXJpY0ludm9rZShraW5kLCB0YXJnZXQsIGFyZ3VtZW50cykgKwogICAgICAgICIoJHtpbnZva2UucmVjZWl2ZXJUeXBlfSkiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VEeW5hbWljKG5vZGUsICJJbnZva2VEeW5hbWljTWV0aG9kIik7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlRHluYW1pY0dldHRlcihISW52b2tlRHluYW1pY0dldHRlciBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VEeW5hbWljKG5vZGUsICJJbnZva2VEeW5hbWljR2V0dGVyIik7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlRHluYW1pY1NldHRlcihISW52b2tlRHluYW1pY1NldHRlciBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VEeW5hbWljKG5vZGUsICJJbnZva2VEeW5hbWljU2V0dGVyIik7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludm9rZVN0YXRpYyhISW52b2tlU3RhdGljIGludm9rZSkgewogICAgU3RyaW5nIHRhcmdldCA9IGludm9rZS5lbGVtZW50Lm5hbWU7CiAgICByZXR1cm4gaGFuZGxlR2VuZXJpY0ludm9rZSgiSW52b2tlU3RhdGljIiwgdGFyZ2V0LCBpbnZva2UuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludm9rZVN1cGVyKEhJbnZva2VTdXBlciBpbnZva2UpIHsKICAgIFN0cmluZyB0YXJnZXQgPSBpbnZva2UuZWxlbWVudC5uYW1lOwogICAgcmV0dXJuIGhhbmRsZUdlbmVyaWNJbnZva2UoIkludm9rZVN1cGVyIiwgdGFyZ2V0LCBpbnZva2UuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludm9rZUNvbnN0cnVjdG9yQm9keShISW52b2tlQ29uc3RydWN0b3JCb2R5IGludm9rZSkgewogICAgU3RyaW5nIHRhcmdldCA9IGludm9rZS5lbGVtZW50Lm5hbWU7CiAgICByZXR1cm4gaGFuZGxlR2VuZXJpY0ludm9rZSgiSW52b2tlQ29uc3RydWN0b3JCb2R5IiwgdGFyZ2V0LCBpbnZva2UuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludm9rZUdlbmVyYXRvckJvZHkoSEludm9rZUdlbmVyYXRvckJvZHkgaW52b2tlKSB7CiAgICBTdHJpbmcgdGFyZ2V0ID0gaW52b2tlLmVsZW1lbnQubmFtZTsKICAgIHJldHVybiBoYW5kbGVHZW5lcmljSW52b2tlKCJJbnZva2VHZW5lcmF0b3JCb2R5IiwgdGFyZ2V0LCBpbnZva2UuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEZvcmVpZ25Db2RlKEhGb3JlaWduQ29kZSBub2RlKSB7CiAgICB2YXIgdGVtcGxhdGUgPSBub2RlLmNvZGVUZW1wbGF0ZTsKICAgIFN0cmluZyBjb2RlID0gJyR7dGVtcGxhdGUuYXN0fSc7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJGb3JlaWduQ29kZTogJGNvZGUgKCRpbnB1dHMpIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExlc3MoSExlc3Mgbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdMZXNzJyk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TGVzc0VxdWFsKEhMZXNzRXF1YWwgbm9kZSkgPT4KICAgICAgaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdMZXNzRXF1YWwnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TGl0ZXJhbExpc3QoSExpdGVyYWxMaXN0IG5vZGUpIHsKICAgIFN0cmluZ0J1ZmZlciBlbGVtZW50c1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5pbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgIT0gMCkgZWxlbWVudHNTdHJpbmcud3JpdGUoIiwgIik7CiAgICAgIGVsZW1lbnRzU3RyaW5nLndyaXRlKHRlbXBvcmFyeUlkKG5vZGUuaW5wdXRzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gIkxpdGVyYWxMaXN0OiBbJGVsZW1lbnRzU3RyaW5nXSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMb29wQnJhbmNoKEhMb29wQnJhbmNoIGJyYW5jaCkgewogICAgSEJhc2ljQmxvY2sgYm9keUJsb2NrID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICBIQmFzaWNCbG9jayBleGl0QmxvY2sgPSBjdXJyZW50QmxvY2suc3VjY2Vzc29yc1sxXTsKICAgIFN0cmluZyBjb25kaXRpb25JZCA9IHRlbXBvcmFyeUlkKGJyYW5jaC5pbnB1dHNbMF0pOwogICAgcmV0dXJuICJMb29wQnJhbmNoICgkY29uZGl0aW9uSWQpOiAoQiR7Ym9keUJsb2NrLmlkfSkgdGhlbiAoQiR7ZXhpdEJsb2NrLmlkfSkiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TXVsdGlwbHkoSE11bHRpcGx5IG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnTXVsdGlwbHknKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TmVnYXRlKEhOZWdhdGUgbm9kZSkgewogICAgU3RyaW5nIG9wZXJhbmQgPSB0ZW1wb3JhcnlJZChub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuICJOZWdhdGU6ICRvcGVyYW5kIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdE5vdChITm90IG5vZGUpID0+ICJOb3Q6ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFBhcmFtZXRlclZhbHVlKEhQYXJhbWV0ZXJWYWx1ZSBub2RlKSB7CiAgICByZXR1cm4gIlBhcmFtZXRlclZhbHVlOiAke25vZGUuc291cmNlRWxlbWVudC5uYW1lfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMb2NhbFZhbHVlKEhMb2NhbFZhbHVlIG5vZGUpIHsKICAgIHJldHVybiAiTG9jYWxWYWx1ZTogJHtub2RlLnNvdXJjZUVsZW1lbnQubmFtZX0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UGhpKEhQaGkgcGhpKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlKCJQaGk6ICIpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaGkuaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChpID4gMCkgYnVmZmVyLndyaXRlKCIsICIpOwogICAgICBidWZmZXIud3JpdGUodGVtcG9yYXJ5SWQocGhpLmlucHV0c1tpXSkpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UmVmKEhSZWYgbm9kZSkgewogICAgcmV0dXJuICdSZWY6ICR7dGVtcG9yYXJ5SWQobm9kZS52YWx1ZSl9JzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFJldHVybihIUmV0dXJuIG5vZGUpID0+ICJSZXR1cm46ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFNoaWZ0TGVmdChIU2hpZnRMZWZ0IG5vZGUpID0+CiAgICAgIGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnU2hpZnRMZWZ0Jyk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U2hpZnRSaWdodChIU2hpZnRSaWdodCBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgJ1NoaWZ0UmlnaHQnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3RhdGljKEhTdGF0aWMgbm9kZSkgPT4gIlN0YXRpYzogJHtub2RlLmVsZW1lbnQubmFtZX0iOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMYXp5U3RhdGljKEhMYXp5U3RhdGljIG5vZGUpID0+CiAgICAgICJMYXp5U3RhdGljOiAke25vZGUuZWxlbWVudC5uYW1lfSI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpID0+CiAgICAgIGhhbmRsZUludm9rZUR5bmFtaWMobm9kZSwgIk9uZVNob3RJbnRlcmNlcHRvciIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTdGF0aWNTdG9yZShIU3RhdGljU3RvcmUgbm9kZSkgewogICAgU3RyaW5nIGxocyA9IG5vZGUuZWxlbWVudC5uYW1lOwogICAgcmV0dXJuICJTdGF0aWNTdG9yZTogJGxocyA9ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBub2RlKSB7CiAgICB2YXIgbGVmdElkID0gdGVtcG9yYXJ5SWQobm9kZS5sZWZ0KTsKICAgIHZhciByaWdodElkID0gdGVtcG9yYXJ5SWQobm9kZS5yaWdodCk7CiAgICByZXR1cm4gIlN0cmluZ0NvbmNhdDogJGxlZnRJZCArICRyaWdodElkIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFN0cmluZ2lmeShIU3RyaW5naWZ5IG5vZGUpIHsKICAgIHJldHVybiAiU3RyaW5naWZ5OiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3VidHJhY3QoSFN1YnRyYWN0IG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnU3VidHJhY3QnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3dpdGNoKEhTd2l0Y2ggbm9kZSkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1Zi53cml0ZSgiU3dpdGNoOiAoIik7CiAgICBidWYud3JpdGUodGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pKTsKICAgIGJ1Zi53cml0ZSgiKSAiKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbm9kZS5pbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgYnVmLndyaXRlKHRlbXBvcmFyeUlkKG5vZGUuaW5wdXRzW2ldKSk7CiAgICAgIGJ1Zi53cml0ZSgiOiBCIik7CiAgICAgIGJ1Zi53cml0ZShub2RlLmJsb2NrLnN1Y2Nlc3NvcnNbaSAtIDFdLmlkKTsKICAgICAgYnVmLndyaXRlKCIsICIpOwogICAgfQogICAgYnVmLndyaXRlKCJkZWZhdWx0OiBCIik7CiAgICBidWYud3JpdGUobm9kZS5kZWZhdWx0VGFyZ2V0LmlkKTsKICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFRoaXMoSFRoaXMgbm9kZSkgPT4gIlRoaXMiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUaHJvdyhIVGhyb3cgbm9kZSkgPT4gIlRocm93OiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0iOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUaHJvd0V4cHJlc3Npb24oSFRocm93RXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gIlRocm93RXhwcmVzc2lvbjogJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSl9IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFRydW5jYXRpbmdEaXZpZGUoSFRydW5jYXRpbmdEaXZpZGUgbm9kZSkgewogICAgcmV0dXJuIGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnVHJ1bmNhdGluZ0RpdmlkZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UmVtYWluZGVyKEhSZW1haW5kZXIgbm9kZSkgewogICAgcmV0dXJuIGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnUmVtYWluZGVyJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRFeGl0VHJ5KEhFeGl0VHJ5IG5vZGUpIHsKICAgIHJldHVybiAiRXhpdFRyeSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUcnkoSFRyeSBub2RlKSB7CiAgICBMaXN0PEhCYXNpY0Jsb2NrPiBzdWNjZXNzb3JzID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnM7CiAgICBTdHJpbmcgdHJ5QmxvY2sgPSAnQiR7c3VjY2Vzc29yc1swXS5pZH0nOwogICAgU3RyaW5nIGNhdGNoQmxvY2sgPSAnbm9uZSc7CiAgICBpZiAobm9kZS5jYXRjaEJsb2NrICE9IG51bGwpIHsKICAgICAgY2F0Y2hCbG9jayA9ICdCJHtzdWNjZXNzb3JzWzFdLmlkfSc7CiAgICB9CgogICAgU3RyaW5nIGZpbmFsbHlCbG9jayA9ICdub25lJzsKICAgIGlmIChub2RlLmZpbmFsbHlCbG9jayAhPSBudWxsKSB7CiAgICAgIGZpbmFsbHlCbG9jayA9ICdCJHtub2RlLmZpbmFsbHlCbG9jay5pZH0nOwogICAgfQoKICAgIHJldHVybiAiVHJ5OiAkdHJ5QmxvY2ssIENhdGNoOiAkY2F0Y2hCbG9jaywgRmluYWxseTogJGZpbmFsbHlCbG9jaywgIgogICAgICAgICJKb2luOiBCJHtzdWNjZXNzb3JzLmxhc3QuaWR9IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdElzKEhJcyBub2RlKSB7CiAgICBTdHJpbmcgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb24udG9TdHJpbmcoKTsKICAgIHJldHVybiAiSXM6ICR7dGVtcG9yYXJ5SWQobm9kZS5leHByZXNzaW9uKX0gaXMgJHR5cGUiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SXNWaWFJbnRlcmNlcHRvcihISXNWaWFJbnRlcmNlcHRvciBub2RlKSB7CiAgICBTdHJpbmcgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb24udG9TdHJpbmcoKTsKICAgIHJldHVybiAiSXNWaWFJbnRlcmNlcHRvcjogJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSl9IGlzICR0eXBlIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVDb252ZXJzaW9uKEhUeXBlQ29udmVyc2lvbiBub2RlKSB7CiAgICBTdHJpbmcgY2hlY2tlZElucHV0ID0gdGVtcG9yYXJ5SWQobm9kZS5jaGVja2VkSW5wdXQpOwogICAgU3RyaW5nIHJlc3Q7CiAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09IDIpIHsKICAgICAgcmVzdCA9ICIgJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0cy5sYXN0KX0iOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAxKTsKICAgICAgcmVzdCA9ICIiOwogICAgfQogICAgU3RyaW5nIGtpbmQgPSBfdHlwZUNvbnZlcnNpb25LaW5kKG5vZGUpOwogICAgcmV0dXJuICJUeXBlQ29udmVyc2lvbjogJGtpbmQgJGNoZWNrZWRJbnB1dCB0byAke25vZGUuaW5zdHJ1Y3Rpb25UeXBlfSRyZXN0IjsKICB9CgogIFN0cmluZyBfdHlwZUNvbnZlcnNpb25LaW5kKEhUeXBlQ29udmVyc2lvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pc1R5cGVDaGVjaykgcmV0dXJuICdUWVBFX0NIRUNLJzsKICAgIGlmIChub2RlLmlzQ2FzdENoZWNrKSByZXR1cm4gJ0NBU1RfQ0hFQ0snOwogICAgcmV0dXJuICc/JzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBub2RlKSB7CiAgICBTdHJpbmcgY2hlY2tlZElucHV0ID0gdGVtcG9yYXJ5SWQobm9kZS5jaGVja2VkSW5wdXQpOwogICAgYXNzZXJ0KG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAxKTsKICAgIFN0cmluZyBraW5kID0gX3ByaW1pdGl2ZUNoZWNrS2luZChub2RlKTsKICAgIHJldHVybiAiUHJpbWl0aXZlQ2hlY2s6ICRraW5kICRjaGVja2VkSW5wdXQgdG8gJHtub2RlLmluc3RydWN0aW9uVHlwZX0iOwogIH0KCiAgU3RyaW5nIF9wcmltaXRpdmVDaGVja0tpbmQoSFByaW1pdGl2ZUNoZWNrIG5vZGUpIHsKICAgIGlmIChub2RlLmlzUmVjZWl2ZXJUeXBlQ2hlY2spIHJldHVybiAnUkVDRUlWRVInOwogICAgaWYgKG5vZGUuaXNBcmd1bWVudFR5cGVDaGVjaykgcmV0dXJuICdBUkdVTUVOVCc7CiAgICByZXR1cm4gJz8nOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Qm9vbENvbnZlcnNpb24oSEJvb2xDb252ZXJzaW9uIG5vZGUpIHsKICAgIFN0cmluZyBjaGVja2VkSW5wdXQgPSB0ZW1wb3JhcnlJZChub2RlLmNoZWNrZWRJbnB1dCk7CiAgICByZXR1cm4gIkJvb2xDb252ZXJzaW9uOiAkY2hlY2tlZElucHV0IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmlucHV0cy5sZW5ndGggPD0gMik7CiAgICBTdHJpbmcgcmVzdWx0ID0KICAgICAgICAiVHlwZUtub3duOiAke3RlbXBvcmFyeUlkKG5vZGUuY2hlY2tlZElucHV0KX0gaXMgJHtub2RlLmtub3duVHlwZX0iOwogICAgaWYgKG5vZGUud2l0bmVzcyAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCArPSAiIHdpdG5lc3NlZCBieSAke3RlbXBvcmFyeUlkKG5vZGUud2l0bmVzcyl9IjsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRSYW5nZUNvbnZlcnNpb24oSFJhbmdlQ29udmVyc2lvbiBub2RlKSB7CiAgICByZXR1cm4gIlJhbmdlQ29udmVyc2lvbjogJHtub2RlLmNoZWNrZWRJbnB1dH0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0VHlwZUluZm9SZWFkUmF3KEhUeXBlSW5mb1JlYWRSYXcgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIHJldHVybiAiVHlwZUluZm9SZWFkUmF3OiAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVJbmZvUmVhZFZhcmlhYmxlKEhUeXBlSW5mb1JlYWRWYXJpYWJsZSBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJUeXBlSW5mb1JlYWRWYXJpYWJsZTogJHtub2RlLnZhcmlhYmxlfSAgJGlucHV0cyI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUeXBlSW5mb0V4cHJlc3Npb24oSFR5cGVJbmZvRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJUeXBlSW5mb0V4cHJlc3Npb246ICR7bm9kZS5raW5kQXNTdHJpbmd9ICR7bm9kZS5kYXJ0VHlwZX0iCiAgICAgICAgIiAoJGlucHV0cykiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0QXdhaXQoSEF3YWl0IG5vZGUpIHsKICAgIHJldHVybiAiQXdhaXQ6ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRZaWVsZChIWWllbGQgbm9kZSkgewogICAgcmV0dXJuICJZaWVsZCR7bm9kZS5oYXNTdGFyID8gIioiIDogIiJ9OiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SXNUZXN0KEhJc1Rlc3Qgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIHJldHVybiAiSXNUZXN0OiAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEFzQ2hlY2soSEFzQ2hlY2sgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIFN0cmluZyBlcnJvciA9IG5vZGUuaXNUeXBlRXJyb3IgPyAnVHlwZUVycm9yJyA6ICdDYXN0RXJyb3InOwogICAgcmV0dXJuICJBc0NoZWNrOiAkZXJyb3IgJGlucHV0cyI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRBc0NoZWNrU2ltcGxlKEhBc0NoZWNrU2ltcGxlIG5vZGUpIHsKICAgIHZhciBpbnB1dHMgPSBub2RlLmlucHV0cy5tYXAodGVtcG9yYXJ5SWQpLmpvaW4oJywgJyk7CiAgICBTdHJpbmcgZXJyb3IgPSBub2RlLmlzVHlwZUVycm9yID8gJ1R5cGVFcnJvcicgOiAnQ2FzdEVycm9yJzsKICAgIHJldHVybiAiQXNDaGVja1NpbXBsZTogJGVycm9yICR7bm9kZS5kYXJ0VHlwZX0gJGlucHV0cyI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTdWJ0eXBlQ2hlY2soSFN1YnR5cGVDaGVjayBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJTdWJ0eXBlQ2hlY2s6ICRpbnB1dHMiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TG9hZFR5cGUoSExvYWRUeXBlIG5vZGUpIHsKICAgIHZhciBpbnB1dHMgPSBub2RlLmlucHV0cy5tYXAodGVtcG9yYXJ5SWQpLmpvaW4oJywgJyk7CiAgICByZXR1cm4gIkxvYWRUeXBlOiAke25vZGUudHlwZUV4cHJlc3Npb259ICAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEluc3RhbmNlRW52aXJvbm1lbnQoSEluc3RhbmNlRW52aXJvbm1lbnQgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIHJldHVybiAiSW5zdGFuY2VFbnZpcm9ubWVudDogJGlucHV0cyI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUeXBlRXZhbChIVHlwZUV2YWwgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIHJldHVybiAiVHlwZUV2YWw6ICR7bm9kZS50eXBlRXhwcmVzc2lvbn0gICR7bm9kZS5lbnZTdHJ1Y3R1cmV9ICAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVCaW5kKEhUeXBlQmluZCBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJUeXBlQmluZDogJGlucHV0cyI7CiAgfQp9CoLYAE5OPAEUATI4MUAZKhUBNz8SNiIMGwEqAS8XFCMhCAQBLCYqDRMbPCYIEQYEASokKA0TGTgkCBEGBAEYRDAdKhMsTVATQUFRBgQBDCwqOR4WLSUjHhwnIyU+CBkbJCsjOTg6RiMONg4MChYyLQoIBAIBPCIiAUABMicBTgExE0UUGy0dFBsxHRQbLB0UGy4dFE0UThQbNB0UTxRPFE4UThQkMh4UDRQGJwQBDCs4BAFBKiwkBAEMHzAcBAEMQQEMSgEMJTAfBAEMRwEMSgEMLzAuQAQBDCM1Hj8GJQQBDFABDCk1HkIGKAQBDCVPBAEMKz4EAQxKAQwqAQwpHEIGKkEEAQwpLipNBAEMNyo0GxswRh87DTsGBAEMKzcEAQwpKz4EAQwpLitKBAEMITUkBAEMTQwxNQQBDFABDB04ODZMBAEeTjcxLzgGOwQBDCMyLCcEAQwvMiwsNgQBDC8wK0c8LQYiBAEMNDIBQzQoJys0OiQEAQxAOAxAOAxAOAEMMylHBAEMMSlGBAEMRSlQBAEMQSlOBAEMLyYlOisEAQxEDCwtAQwvNjMuOQYtBAEMLzg4OFQEAQxQAQwlMB8EAQxHAQw1OQQBDC01BAEMHi4bMiUwBh4EAQwfLgQBDFABDCwtDC4uAQxGAQwuKgEMPjcBDC8kQQQBDDEpKy8EAQwrOAQBDFABDCUrHCwVMy4YMhcGHSYbBAEMKgEMTQEMNz4EAQw5OQQBDCsyBAEMJxYEAQwfPC4gIysGASIlMQYBSigEAQwdMjsEAQw5MkgEAQw1OhEjMg0nEQYtUgQBNS8vEAQBDDU6JS1NBAE1NTUQBAEMNTosBAEMKyUUTSA+BhMEAQw3NAQBDDc6JwQBDEE6PgQBDD06RxYEAQwjNAQBDCNOBAEMJToeBAEMJzpBJgQBDDM6QT0EAQwxOiQEAQwpOjgEAQw/OisEAQwpOk4EAQwpOiAEAgEocGFja2FnZTpjb21waWxlci9zcmMvc3NhL3NzYV90cmFjZXIuZGFydENzZGtyb290Oi9zZGsvbGliL19pbnRlcm5hbC9qc19ydW50aW1lL2xpYi9zaGFyZWQvcmVjaXBlX3N5bnRheC5kYXJ0pNQvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIENvbnN0YW50cyBhbmQgcHJlZGljYXRlcyB1c2VkIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdHlwZSByZWNpcGVzLgovLy8KLy8vIFRoaXMgbGlicmFyeSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgY29tcGlsZXIgYW5kIHRoZSBydW50aW1lIHN5c3RlbS4KbGlicmFyeSBkYXJ0MmpzLl9yZWNpcGVfc3ludGF4OwoKYWJzdHJhY3QgY2xhc3MgUmVjaXBlIHsKICBSZWNpcGUuXygpOwoKICAvLyBPcGVyYXRvcnMuCgogIHN0YXRpYyBjb25zdCBpbnQgc2VwYXJhdG9yID0gX2NvbW1hOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc2VwYXJhdG9yU3RyaW5nID0gX2NvbW1hU3RyaW5nOwoKICBzdGF0aWMgY29uc3QgaW50IHRvVHlwZSA9IF9zZW1pY29sb247CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0b1R5cGVTdHJpbmcgPSBfc2VtaWNvbG9uU3RyaW5nOwoKICBzdGF0aWMgY29uc3QgaW50IHB1c2hEeW5hbWljID0gX2F0OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcHVzaER5bmFtaWNTdHJpbmcgPSBfYXRTdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCBwdXNoVm9pZCA9IF90aWxkZTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHB1c2hWb2lkU3RyaW5nID0gX3RpbGRlU3RyaW5nOwoKICBzdGF0aWMgY29uc3QgaW50IHdyYXBTdGFyID0gX2FzdGVyaXNrOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgd3JhcFN0YXJTdHJpbmcgPSBfYXN0ZXJpc2tTdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCB3cmFwUXVlc3Rpb24gPSBfcXVlc3Rpb247CiAgc3RhdGljIGNvbnN0IFN0cmluZyB3cmFwUXVlc3Rpb25TdHJpbmcgPSBfcXVlc3Rpb25TdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCB3cmFwRnV0dXJlT3IgPSBfc2xhc2g7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB3cmFwRnV0dXJlT3JTdHJpbmcgPSBfc2xhc2hTdHJpbmc7CgogIHN0YXRpYyBjb25zdCBpbnQgc3RhcnRUeXBlQXJndW1lbnRzID0gX2xlc3NUaGFuOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3RhcnRUeXBlQXJndW1lbnRzU3RyaW5nID0gX2xlc3NUaGFuU3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgZW5kVHlwZUFyZ3VtZW50cyA9IF9ncmVhdGVyVGhhbjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuZFR5cGVBcmd1bWVudHNTdHJpbmcgPSBfZ3JlYXRlclRoYW5TdHJpbmc7CgogIHN0YXRpYyBjb25zdCBpbnQgc3RhcnRGdW5jdGlvbkFyZ3VtZW50cyA9IF9sZWZ0UGFyZW47CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdGFydEZ1bmN0aW9uQXJndW1lbnRzU3RyaW5nID0gX2xlZnRQYXJlblN0cmluZzsKICBzdGF0aWMgY29uc3QgaW50IGVuZEZ1bmN0aW9uQXJndW1lbnRzID0gX3JpZ2h0UGFyZW47CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmRGdW5jdGlvbkFyZ3VtZW50c1N0cmluZyA9IF9yaWdodFBhcmVuU3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgc3RhcnRPcHRpb25hbEdyb3VwID0gX2xlZnRCcmFja2V0OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3RhcnRPcHRpb25hbEdyb3VwU3RyaW5nID0gX2xlZnRCcmFja2V0U3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgZW5kT3B0aW9uYWxHcm91cCA9IF9yaWdodEJyYWNrZXQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmRPcHRpb25hbEdyb3VwU3RyaW5nID0gX3JpZ2h0QnJhY2tldFN0cmluZzsKICBzdGF0aWMgY29uc3QgaW50IHN0YXJ0TmFtZWRHcm91cCA9IF9sZWZ0QnJhY2U7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdGFydE5hbWVkR3JvdXBTdHJpbmcgPSBfbGVmdEJyYWNlU3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgZW5kTmFtZWRHcm91cCA9IF9yaWdodEJyYWNlOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZW5kTmFtZWRHcm91cFN0cmluZyA9IF9yaWdodEJyYWNlU3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgbmFtZVNlcGFyYXRvciA9IF9jb2xvbjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5hbWVTZXBhcmF0b3JTdHJpbmcgPSBfY29sb25TdHJpbmc7CgogIHN0YXRpYyBjb25zdCBpbnQgZ2VuZXJpY0Z1bmN0aW9uVHlwZVBhcmFtZXRlckluZGV4ID0gX2NpcmN1bWZsZXg7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXhTdHJpbmcgPQogICAgICBfY2lyY3VtZmxleFN0cmluZzsKCiAgc3RhdGljIGNvbnN0IGludCBleHRlbnNpb25PcCA9IF9hbXBlcnNhbmQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBleHRlbnNpb25PcFN0cmluZyA9IF9hbXBlcnNhbmRTdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCBwdXNoTmV2ZXJFeHRlbnNpb24gPSAwOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcHVzaE5ldmVyRXh0ZW5zaW9uU3RyaW5nID0gJyRwdXNoTmV2ZXJFeHRlbnNpb24nOwogIHN0YXRpYyBjb25zdCBpbnQgcHVzaEFueUV4dGVuc2lvbiA9IDE7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwdXNoQW55RXh0ZW5zaW9uU3RyaW5nID0gJyRwdXNoQW55RXh0ZW5zaW9uJzsKCiAgLy8gTnVtYmVyIGFuZCBuYW1lIGNvbXBvbmVudHMuCgogIHN0YXRpYyBib29sIGlzRGlnaXQoaW50IGNvZGUpID0+IGNvZGUgPj0gX2RpZ2l0MCAmJiBjb2RlIDw9IF9kaWdpdDk7CiAgc3RhdGljIGludCBkaWdpdFZhbHVlKGludCBjb2RlKSA9PiBjb2RlIC0gX2RpZ2l0MDsKCiAgc3RhdGljIGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoaW50IGNoKSA9PgogICAgICAoKChjaCB8IDMyKSAtIF9sb3dlcmNhc2VBKSAmIDB4ZmZmZikgPCAyNiB8fAogICAgICAoY2ggPT0gX3VuZGVyc2NvcmUpIHx8CiAgICAgIChjaCA9PSBfZG9sbGFyKTsKCiAgc3RhdGljIGNvbnN0IGludCBwZXJpb2QgPSBfcGVyaW9kOwoKICAvLyBQcml2YXRlIG5hbWVzLgoKICBzdGF0aWMgY29uc3QgaW50IF9mb3JtZmVlZCA9IDB4MEM7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfZm9ybWZlZWRTdHJpbmcgPSAnXGYnOwoKICBzdGF0aWMgY29uc3QgaW50IF9zcGFjZSA9IDB4MjA7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfc3BhY2VTdHJpbmcgPSAnICc7CiAgc3RhdGljIGNvbnN0IGludCBfZXhjbGFtYXRpb24gPSAweDIxOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2V4Y2xhbWF0aW9uU3RyaW5nID0gJyEnOwogIHN0YXRpYyBjb25zdCBpbnQgX2hhc2ggPSAweDIzOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2hhc2hTdHJpbmcgPSAnIyc7CiAgc3RhdGljIGNvbnN0IGludCBfZG9sbGFyID0gMHgyNDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9kb2xsYXJTdHJpbmcgPSByJyQnOwogIHN0YXRpYyBjb25zdCBpbnQgX3BlcmNlbnQgPSAweDI1OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3BlcmNlbnRTdHJpbmcgPSAnJSc7CiAgc3RhdGljIGNvbnN0IGludCBfYW1wZXJzYW5kID0gMHgyNjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9hbXBlcnNhbmRTdHJpbmcgPSAnJic7CiAgc3RhdGljIGNvbnN0IGludCBfYXBvc3Ryb3BoZSA9IDB4Mjc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfYXBvc3Ryb3BoZVN0cmluZyA9ICInIjsKICBzdGF0aWMgY29uc3QgaW50IF9sZWZ0UGFyZW4gPSAweDI4OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2xlZnRQYXJlblN0cmluZyA9ICcoJzsKICBzdGF0aWMgY29uc3QgaW50IF9yaWdodFBhcmVuID0gMHgyOTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9yaWdodFBhcmVuU3RyaW5nID0gJyknOwogIHN0YXRpYyBjb25zdCBpbnQgX2FzdGVyaXNrID0gMHgyQTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9hc3Rlcmlza1N0cmluZyA9ICcqJzsKICBzdGF0aWMgY29uc3QgaW50IF9wbHVzID0gMHgyQjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9wbHVzU3RyaW5nID0gJysnOwogIHN0YXRpYyBjb25zdCBpbnQgX2NvbW1hID0gMHgyQzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9jb21tYVN0cmluZyA9ICcsJzsKICBzdGF0aWMgY29uc3QgaW50IF9taW51cyA9IDB4MkQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfbWludXNTdHJpbmcgPSAnLSc7CiAgc3RhdGljIGNvbnN0IGludCBfcGVyaW9kID0gMHgyRTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9wZXJpb2RTdHJpbmcgPSAnLic7CiAgc3RhdGljIGNvbnN0IGludCBfc2xhc2ggPSAweDJGOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3NsYXNoU3RyaW5nID0gJy8nOwoKICBzdGF0aWMgY29uc3QgaW50IF9kaWdpdDAgPSAweDMwOwogIHN0YXRpYyBjb25zdCBpbnQgX2RpZ2l0OSA9IDB4Mzk7CgogIHN0YXRpYyBjb25zdCBpbnQgX2NvbG9uID0gMHgzQTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9jb2xvblN0cmluZyA9ICc6JzsKICBzdGF0aWMgY29uc3QgaW50IF9zZW1pY29sb24gPSAweDNCOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3NlbWljb2xvblN0cmluZyA9ICc7JzsKICBzdGF0aWMgY29uc3QgaW50IF9sZXNzVGhhbiA9IDB4M0M7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfbGVzc1RoYW5TdHJpbmcgPSAnPCc7CiAgc3RhdGljIGNvbnN0IGludCBfZXF1YWxzID0gMHgzRDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9lcXVhbHNTdHJpbmcgPSAnPSc7CiAgc3RhdGljIGNvbnN0IGludCBfZ3JlYXRlclRoYW4gPSAweDNFOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2dyZWF0ZXJUaGFuU3RyaW5nID0gJz4nOwogIHN0YXRpYyBjb25zdCBpbnQgX3F1ZXN0aW9uID0gMHgzRjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9xdWVzdGlvblN0cmluZyA9ICc/JzsKICBzdGF0aWMgY29uc3QgaW50IF9hdCA9IDB4NDA7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfYXRTdHJpbmcgPSAnQCc7CgogIHN0YXRpYyBjb25zdCBpbnQgX3VwcGVyY2FzZUEgPSAweDQxOwogIHN0YXRpYyBjb25zdCBpbnQgX3VwcGVyY2FzZVogPSAweDVBOwoKICBzdGF0aWMgY29uc3QgaW50IF9sZWZ0QnJhY2tldCA9IDB4NUI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfbGVmdEJyYWNrZXRTdHJpbmcgPSAnWyc7CiAgc3RhdGljIGNvbnN0IGludCBfYmFja3NsYXNoID0gMHg1QzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9iYWNrc2xhc2hTdHJpbmcgPSByJ1wnOwogIHN0YXRpYyBjb25zdCBpbnQgX3JpZ2h0QnJhY2tldCA9IDB4NUQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfcmlnaHRCcmFja2V0U3RyaW5nID0gJ10nOwogIHN0YXRpYyBjb25zdCBpbnQgX2NpcmN1bWZsZXggPSAweDVFOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2NpcmN1bWZsZXhTdHJpbmcgPSAnXic7CiAgc3RhdGljIGNvbnN0IGludCBfdW5kZXJzY29yZSA9IDB4NUY7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdW5kZXJzY29yZVN0cmluZyA9ICdfJzsKICBzdGF0aWMgY29uc3QgaW50IF9iYWNrdGljayA9IDB4NjA7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfYmFja3RpY2tTdHJpbmcgPSAnYCc7CgogIHN0YXRpYyBjb25zdCBpbnQgX2xvd2VyY2FzZUEgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgX2xvd2VyY2FzZVogPSAweDdBOwoKICBzdGF0aWMgY29uc3QgaW50IF9sZWZ0QnJhY2UgPSAweDdCOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2xlZnRCcmFjZVN0cmluZyA9ICd7JzsKICBzdGF0aWMgY29uc3QgaW50IF92ZXJ0aWNhbCA9IDB4N0M7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdmVydGljYWxTdHJpbmcgPSAnfCc7CiAgc3RhdGljIGNvbnN0IGludCBfcmlnaHRCcmFjZSA9IDB4N0Q7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfcmlnaHRCcmFjZVN0cmluZyA9ICd9JzsKICBzdGF0aWMgY29uc3QgaW50IF90aWxkZSA9IDB4N0U7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdGlsZGVTdHJpbmcgPSAnfic7CgogIHN0YXRpYyB2b2lkIHRlc3RFcXVpdmFsZW5jZSgpIHsKICAgIHZvaWQgdGVzdChTdHJpbmcgbGFiZWwsIGludCBjaGFyQ29kZSwgU3RyaW5nIHN0cikgewogICAgICBpZiAoU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkgIT0gc3RyKSB7CiAgICAgICAgdGhyb3cgU3RhdGVFcnJvcigiJGxhYmVsOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCRjaGFyQ29kZSkgIT0gJHN0ciIpOwogICAgICB9CiAgICB9CgogICAgdm9pZCB0ZXN0RXh0ZW5zaW9uKFN0cmluZyBsYWJlbCwgaW50IG9wLCBTdHJpbmcgc3RyKSB7CiAgICAgIGlmICgnJG9wJyAhPSBzdHIpIHsKICAgICAgICB0aHJvdyBTdGF0ZUVycm9yKCIkbGFiZWw6ICRvcC50b1N0cmluZygpICE9ICRzdHIiKTsKICAgICAgfQogICAgfQoKICAgIHRlc3QoInNlcGFyYXRvciIsIHNlcGFyYXRvciwgc2VwYXJhdG9yU3RyaW5nKTsKICAgIHRlc3QoInRvVHlwZSIsIHRvVHlwZSwgdG9UeXBlU3RyaW5nKTsKICAgIHRlc3QoInB1c2hEeW5hbWljIiwgcHVzaER5bmFtaWMsIHB1c2hEeW5hbWljU3RyaW5nKTsKICAgIHRlc3QoInB1c2hWb2lkIiwgcHVzaFZvaWQsIHB1c2hWb2lkU3RyaW5nKTsKICAgIHRlc3QoIndyYXBTdGFyIiwgd3JhcFN0YXIsIHdyYXBTdGFyU3RyaW5nKTsKICAgIHRlc3QoIndyYXBRdWVzdGlvbiIsIHdyYXBRdWVzdGlvbiwgd3JhcFF1ZXN0aW9uU3RyaW5nKTsKICAgIHRlc3QoIndyYXBGdXR1cmVPciIsIHdyYXBGdXR1cmVPciwgd3JhcEZ1dHVyZU9yU3RyaW5nKTsKICAgIHRlc3QoInN0YXJ0VHlwZUFyZ3VtZW50cyIsIHN0YXJ0VHlwZUFyZ3VtZW50cywgc3RhcnRUeXBlQXJndW1lbnRzU3RyaW5nKTsKICAgIHRlc3QoImVuZFR5cGVBcmd1bWVudHMiLCBlbmRUeXBlQXJndW1lbnRzLCBlbmRUeXBlQXJndW1lbnRzU3RyaW5nKTsKICAgIHRlc3QoInN0YXJ0RnVuY3Rpb25Bcmd1bWVudHMiLCBzdGFydEZ1bmN0aW9uQXJndW1lbnRzLAogICAgICAgIHN0YXJ0RnVuY3Rpb25Bcmd1bWVudHNTdHJpbmcpOwogICAgdGVzdCgiZW5kRnVuY3Rpb25Bcmd1bWVudHMiLCBlbmRGdW5jdGlvbkFyZ3VtZW50cywKICAgICAgICBlbmRGdW5jdGlvbkFyZ3VtZW50c1N0cmluZyk7CiAgICB0ZXN0KCJzdGFydE9wdGlvbmFsR3JvdXAiLCBzdGFydE9wdGlvbmFsR3JvdXAsIHN0YXJ0T3B0aW9uYWxHcm91cFN0cmluZyk7CiAgICB0ZXN0KCJlbmRPcHRpb25hbEdyb3VwIiwgZW5kT3B0aW9uYWxHcm91cCwgZW5kT3B0aW9uYWxHcm91cFN0cmluZyk7CiAgICB0ZXN0KCJzdGFydE5hbWVkR3JvdXAiLCBzdGFydE5hbWVkR3JvdXAsIHN0YXJ0TmFtZWRHcm91cFN0cmluZyk7CiAgICB0ZXN0KCJlbmROYW1lZEdyb3VwIiwgZW5kTmFtZWRHcm91cCwgZW5kTmFtZWRHcm91cFN0cmluZyk7CiAgICB0ZXN0KCJuYW1lU2VwYXJhdG9yIiwgbmFtZVNlcGFyYXRvciwgbmFtZVNlcGFyYXRvclN0cmluZyk7CiAgICB0ZXN0KCJnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXgiLCBnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXgsCiAgICAgICAgZ2VuZXJpY0Z1bmN0aW9uVHlwZVBhcmFtZXRlckluZGV4U3RyaW5nKTsKICAgIHRlc3QoImV4dGVuc2lvbk9wIiwgZXh0ZW5zaW9uT3AsIGV4dGVuc2lvbk9wU3RyaW5nKTsKICAgIHRlc3RFeHRlbnNpb24oCiAgICAgICAgInB1c2hOZXZlckV4dGVuc2lvbiIsIHB1c2hOZXZlckV4dGVuc2lvbiwgcHVzaE5ldmVyRXh0ZW5zaW9uU3RyaW5nKTsKICAgIHRlc3RFeHRlbnNpb24oInB1c2hBbnlFeHRlbnNpb24iLCBwdXNoQW55RXh0ZW5zaW9uLCBwdXNoQW55RXh0ZW5zaW9uU3RyaW5nKTsKCiAgICB0ZXN0KCJfZm9ybWZlZWQiLCBfZm9ybWZlZWQsIF9mb3JtZmVlZFN0cmluZyk7CiAgICB0ZXN0KCJfc3BhY2UiLCBfc3BhY2UsIF9zcGFjZVN0cmluZyk7CiAgICB0ZXN0KCJfZXhjbGFtYXRpb24iLCBfZXhjbGFtYXRpb24sIF9leGNsYW1hdGlvblN0cmluZyk7CiAgICB0ZXN0KCJfaGFzaCIsIF9oYXNoLCBfaGFzaFN0cmluZyk7CiAgICB0ZXN0KCJfZG9sbGFyIiwgX2RvbGxhciwgX2RvbGxhclN0cmluZyk7CiAgICB0ZXN0KCJfcGVyY2VudCIsIF9wZXJjZW50LCBfcGVyY2VudFN0cmluZyk7CiAgICB0ZXN0KCJfYW1wZXJzYW5kIiwgX2FtcGVyc2FuZCwgX2FtcGVyc2FuZFN0cmluZyk7CiAgICB0ZXN0KCJfYXBvc3Ryb3BoZSIsIF9hcG9zdHJvcGhlLCBfYXBvc3Ryb3BoZVN0cmluZyk7CiAgICB0ZXN0KCJfbGVmdFBhcmVuIiwgX2xlZnRQYXJlbiwgX2xlZnRQYXJlblN0cmluZyk7CiAgICB0ZXN0KCJfcmlnaHRQYXJlbiIsIF9yaWdodFBhcmVuLCBfcmlnaHRQYXJlblN0cmluZyk7CiAgICB0ZXN0KCJfYXN0ZXJpc2siLCBfYXN0ZXJpc2ssIF9hc3Rlcmlza1N0cmluZyk7CiAgICB0ZXN0KCJfcGx1cyIsIF9wbHVzLCBfcGx1c1N0cmluZyk7CiAgICB0ZXN0KCJfY29tbWEiLCBfY29tbWEsIF9jb21tYVN0cmluZyk7CiAgICB0ZXN0KCJfbWludXMiLCBfbWludXMsIF9taW51c1N0cmluZyk7CiAgICB0ZXN0KCJfcGVyaW9kIiwgX3BlcmlvZCwgX3BlcmlvZFN0cmluZyk7CiAgICB0ZXN0KCJfc2xhc2giLCBfc2xhc2gsIF9zbGFzaFN0cmluZyk7CiAgICB0ZXN0KCJfY29sb24iLCBfY29sb24sIF9jb2xvblN0cmluZyk7CiAgICB0ZXN0KCJfc2VtaWNvbG9uIiwgX3NlbWljb2xvbiwgX3NlbWljb2xvblN0cmluZyk7CiAgICB0ZXN0KCJfbGVzc1RoYW4iLCBfbGVzc1RoYW4sIF9sZXNzVGhhblN0cmluZyk7CiAgICB0ZXN0KCJfZXF1YWxzIiwgX2VxdWFscywgX2VxdWFsc1N0cmluZyk7CiAgICB0ZXN0KCJfZ3JlYXRlclRoYW4iLCBfZ3JlYXRlclRoYW4sIF9ncmVhdGVyVGhhblN0cmluZyk7CiAgICB0ZXN0KCJfcXVlc3Rpb24iLCBfcXVlc3Rpb24sIF9xdWVzdGlvblN0cmluZyk7CiAgICB0ZXN0KCJfYXQiLCBfYXQsIF9hdFN0cmluZyk7CiAgICB0ZXN0KCJfbGVmdEJyYWNrZXQiLCBfbGVmdEJyYWNrZXQsIF9sZWZ0QnJhY2tldFN0cmluZyk7CiAgICB0ZXN0KCJfYmFja3NsYXNoIiwgX2JhY2tzbGFzaCwgX2JhY2tzbGFzaFN0cmluZyk7CiAgICB0ZXN0KCJfcmlnaHRCcmFja2V0IiwgX3JpZ2h0QnJhY2tldCwgX3JpZ2h0QnJhY2tldFN0cmluZyk7CiAgICB0ZXN0KCJfY2lyY3VtZmxleCIsIF9jaXJjdW1mbGV4LCBfY2lyY3VtZmxleFN0cmluZyk7CiAgICB0ZXN0KCJfdW5kZXJzY29yZSIsIF91bmRlcnNjb3JlLCBfdW5kZXJzY29yZVN0cmluZyk7CiAgICB0ZXN0KCJfYmFja3RpY2siLCBfYmFja3RpY2ssIF9iYWNrdGlja1N0cmluZyk7CiAgICB0ZXN0KCJfbGVmdEJyYWNlIiwgX2xlZnRCcmFjZSwgX2xlZnRCcmFjZVN0cmluZyk7CiAgICB0ZXN0KCJfdmVydGljYWwiLCBfdmVydGljYWwsIF92ZXJ0aWNhbFN0cmluZyk7CiAgICB0ZXN0KCJfcmlnaHRCcmFjZSIsIF9yaWdodEJyYWNlLCBfcmlnaHRCcmFjZVN0cmluZyk7CiAgICB0ZXN0KCJfdGlsZGUiLCBfdGlsZGUsIF90aWxkZVN0cmluZyk7CiAgfQp9CoDoAE5OPAFKBEggARgOARABJzYBKDcBJjUmNQEpOC08KjkBM0I0QwE4RzdGNkU1RDFAMD8rOgFEQBkBLTwrSClEASEBRzUBKzMdFwElARQBJS4BIiooMCEpIywkLCYuJy8mLicvJS0hKSIqIiojKyIqASMjASIqJi4lLSMrKDAlLR8nAScnASgwJi8pMScvJy8lLQEnJwEmLiUtJy8iKgEiODJMCAYBOxo8CAYBMyo5MDA8PE5IOyc3JU5IRT8/UTI5E01RATMqPCctMDY5NjkzJyoqLSoqNjMtPDMhPDY/OTkzNjM5KgQCASxwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL3JlY2lwZV9zeW50YXguZGFydEJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL2NsYXNzX3N0dWJfZ2VuZXJhdG9yLmRhcnS5UC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5jbGFzc19zdHViX2dlbmVyYXRvcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnMsIFNlbGVjdG9yczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JyBzaG93IE5hbWVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JyBzaG93IEludGVyY2VwdG9yRGF0YTsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCcgc2hvdyBTZWxlY3RvckNvbnN0cmFpbnRzOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JzsKaW1wb3J0ICdtb2RlbC5kYXJ0JzsKCmNsYXNzIENsYXNzU3R1YkdlbmVyYXRvciB7CiAgZmluYWwgTmFtZXIgX25hbWVyOwogIGZpbmFsIENvZGVnZW5Xb3JsZCBfY29kZWdlbldvcmxkOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgYm9vbCBlbmFibGVNaW5pZmljYXRpb247CiAgZmluYWwgRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CgogIENsYXNzU3R1YkdlbmVyYXRvcih0aGlzLl9lbWl0dGVyLCB0aGlzLl9jb21tb25FbGVtZW50cywgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHt0aGlzLmVuYWJsZU1pbmlmaWNhdGlvbn0pOwoKICBJbnRlcmNlcHRvckRhdGEgZ2V0IF9pbnRlcmNlcHRvckRhdGEgPT4gX2Nsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YTsKCiAganNBc3QuRXhwcmVzc2lvbiBnZW5lcmF0ZUNsYXNzQ29uc3RydWN0b3IoCiAgICAgIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCwgTGlzdDxqc0FzdC5OYW1lPiBmaWVsZHMsIGJvb2wgaGFzUnRpRmllbGQpIHsKICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IHBsYWNlaG9sZGVycyBpbiBWYXJpYWJsZURlY2xhcmF0aW9uIHBvc2l0aW9uOgogICAgLy8KICAgIC8vICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lID0gbmFtZXIuZ2V0TmFtZU9mQ2xhc3MoY2xhc3NFbGVtZW50KTsKICAgIC8vICAgICByZXR1cm4ganMuc3RhdGVtZW50KCdmdW5jdGlvbiAjKCMpIHsgIzsgfScsCiAgICAvLyAgICAgICAgWyBjb25zdHJ1Y3Rvck5hbWUsIGZpZWxkcywKICAgIC8vICAgICAgICAgICAgZmllbGRzLm1hcCgKICAgIC8vICAgICAgICAgICAgICAgIChuYW1lKSA9PiBqcygndGhpcy4jID0gIycsIFtuYW1lLCBuYW1lXSkpXSkpOwogICAgZHluYW1pYyB0eXBlUGFyYW1ldGVycyA9IGNvbnN0IDxqc0FzdC5QYXJhbWV0ZXI+W107CiAgICBkeW5hbWljIHR5cGVJbml0cyA9IGNvbnN0IDxqc0FzdC5FeHByZXNzaW9uPltdOwogICAgaWYgKGhhc1J0aUZpZWxkKSB7CiAgICAgIGR5bmFtaWMgcnRpTmFtZSA9IF9uYW1lci5ydGlGaWVsZEpzTmFtZTsKICAgICAgdHlwZVBhcmFtZXRlcnMgPSBydGlOYW1lOwogICAgICB0eXBlSW5pdHMgPSBqcygndGhpcy4jID0gIycsIFtydGlOYW1lLCBydGlOYW1lXSk7CiAgICB9CiAgICBMaXN0PGpzQXN0LlBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5ldyBMaXN0PGpzQXN0LlBhcmFtZXRlcj4uZ2VuZXJhdGUoCiAgICAgICAgZmllbGRzLmxlbmd0aCwgKGkpID0+IG5ldyBqc0FzdC5QYXJhbWV0ZXIoJ3QkaScpKTsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZmllbGRJbml0aWFsaXplcnMgPQogICAgICAgIG5ldyBMaXN0PGpzQXN0LkV4cHJlc3Npb24+LmdlbmVyYXRlKGZpZWxkcy5sZW5ndGgsIChpKSB7CiAgICAgIHJldHVybiBqcygndGhpcy4jID0gIycsIFtmaWVsZHNbaV0sIHBhcmFtZXRlcnNbaV1dKTsKICAgIH0pOwogICAgcmV0dXJuIGpzKCdmdW5jdGlvbigjLCAjKSB7ICM7ICM7IHRoaXMuIygpO30nLCBbCiAgICAgIHBhcmFtZXRlcnMsCiAgICAgIHR5cGVQYXJhbWV0ZXJzLAogICAgICBmaWVsZEluaXRpYWxpemVycywKICAgICAgdHlwZUluaXRzLAogICAgICBfbmFtZXIuZml4ZWROYW1lcy5kZWZlcnJlZEFjdGlvbgogICAgXSk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlR2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIsIGpzQXN0Lk5hbWUgZmllbGROYW1lKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICBTdHJpbmcgcmVjZWl2ZXIgPQogICAgICAgIF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKGNscykgPyAncmVjZWl2ZXInIDogJ3RoaXMnOwogICAgTGlzdDxTdHJpbmc+IGFyZ3MgPQogICAgICAgIF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE1ldGhvZChtZW1iZXIpID8gWydyZWNlaXZlciddIDogW107CiAgICByZXR1cm4ganMoJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuICMuIyB9JywgW2FyZ3MsIHJlY2VpdmVyLCBmaWVsZE5hbWVdKTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gZ2VuZXJhdGVTZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlciwganNBc3QuTmFtZSBmaWVsZE5hbWUpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgIFN0cmluZyByZWNlaXZlciA9CiAgICAgICAgX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkQ2xhc3MoY2xzKSA/ICdyZWNlaXZlcicgOiAndGhpcyc7CiAgICBMaXN0PFN0cmluZz4gYXJncyA9CiAgICAgICAgX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkTWV0aG9kKG1lbWJlcikgPyBbJ3JlY2VpdmVyJ10gOiBbXTsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiByZW1vdmUgJ3JldHVybic/CiAgICByZXR1cm4ganMoCiAgICAgICAgJ2Z1bmN0aW9uKCMsIHYpIHsgcmV0dXJuICMuIyA9IHY7IH0nLCBbYXJncywgcmVjZWl2ZXIsIGZpZWxkTmFtZV0pOwogIH0KCiAgLy8vIERvY3VtZW50YXRpb24gd2FudGVkIC0tIGpvaG5uaXdpbnRoZXIKICAvLy8KICAvLy8gSW52YXJpYW50OiBbbWVtYmVyXSBtdXN0IGJlIGEgZGVjbGFyYXRpb24gZWxlbWVudC4KICBNYXA8anNBc3QuTmFtZSwganNBc3QuRXhwcmVzc2lvbj4gZ2VuZXJhdGVDYWxsU3R1YnNGb3JHZXR0ZXIoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSB7CiAgICAvLyBJZiB0aGUgbWV0aG9kIGlzIGludGVyY2VwdGVkLCB0aGUgc3R1YiBnZXRzIHRoZQogICAgLy8gcmVjZWl2ZXIgZXhwbGljaXRseSBhbmQgd2UgbmVlZCB0byBwYXNzIGl0IHRvIHRoZSBnZXR0ZXIgY2FsbC4KICAgIGJvb2wgaXNJbnRlcmNlcHRlZE1ldGhvZCA9IF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE1ldGhvZChtZW1iZXIpOwogICAgYm9vbCBpc0ludGVyY2VwdGVkQ2xhc3MgPQogICAgICAgIF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKG1lbWJlci5lbmNsb3NpbmdDbGFzcyk7CgogICAgY29uc3QgU3RyaW5nIHJlY2VpdmVyQXJndW1lbnROYW1lID0gcickcmVjZWl2ZXInOwoKICAgIGpzQXN0LkV4cHJlc3Npb24gYnVpbGRHZXR0ZXIoKSB7CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gcmVjZWl2ZXIgPQogICAgICAgICAganMoaXNJbnRlcmNlcHRlZENsYXNzID8gcmVjZWl2ZXJBcmd1bWVudE5hbWUgOiAndGhpcycpOwogICAgICBpZiAobWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgICAganNBc3QuTmFtZSBnZXR0ZXJOYW1lID0gX25hbWVyLmdldHRlckZvckVsZW1lbnQobWVtYmVyKTsKICAgICAgICBpZiAoaXNJbnRlcmNlcHRlZE1ldGhvZCkgewogICAgICAgICAgcmV0dXJuIGpzKCd0aGlzLiMoIyknLCBbZ2V0dGVyTmFtZSwgcmVjZWl2ZXJdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGpzKCcjLiMoKScsIFtyZWNlaXZlciwgZ2V0dGVyTmFtZV0pOwogICAgICB9IGVsc2UgewogICAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9CiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShtZW1iZXIpOwogICAgICAgIGlmIChmaWVsZERhdGEuaXNFZmZlY3RpdmVseUNvbnN0YW50KSB7CiAgICAgICAgICByZXR1cm4gX2VtaXR0ZXIuY29uc3RhbnRSZWZlcmVuY2UoZmllbGREYXRhLmNvbnN0YW50VmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBqc0FzdC5OYW1lIGZpZWxkTmFtZSA9IF9uYW1lci5pbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKG1lbWJlcik7CiAgICAgICAgICByZXR1cm4ganMoJyMuIycsIFtyZWNlaXZlciwgZmllbGROYW1lXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTWFwPGpzQXN0Lk5hbWUsIGpzQXN0LkV4cHJlc3Npb24+IGdlbmVyYXRlZFN0dWJzID0KICAgICAgICA8anNBc3QuTmFtZSwganNBc3QuRXhwcmVzc2lvbj57fTsKCiAgICAvLyBUd28gc2VsZWN0b3JzIG1heSBtYXRjaCBidXQgZGlmZmVyIG9ubHkgaW4gdHlwZS4gIFRvIGF2b2lkIGdlbmVyYXRpbmcKICAgIC8vIGlkZW50aWNhbCBzdHVicyBmb3IgZWFjaCB3ZSB0cmFjayB1bnR5cGVkIHNlbGVjdG9ycyB3aGljaCBhbHJlYWR5IGhhdmUKICAgIC8vIHN0dWJzLgogICAgU2V0PFNlbGVjdG9yPiBnZW5lcmF0ZWRTZWxlY3RvcnMgPSBuZXcgU2V0PFNlbGVjdG9yPigpOwogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICBpZiAoZ2VuZXJhdGVkU2VsZWN0b3JzLmNvbnRhaW5zKHNlbGVjdG9yKSkgY29udGludWU7CiAgICAgIGlmICghc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSkgY29udGludWU7CiAgICAgIGlmIChzZWxlY3RvcnNbc2VsZWN0b3JdCiAgICAgICAgICAuY2FuSGl0KG1lbWJlciwgc2VsZWN0b3IubWVtYmVyTmFtZSwgX2Nsb3NlZFdvcmxkKSkgewogICAgICAgIGdlbmVyYXRlZFNlbGVjdG9ycy5hZGQoc2VsZWN0b3IpOwoKICAgICAgICBqc0FzdC5OYW1lIGludm9jYXRpb25OYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgICAgICBTZWxlY3RvciBjYWxsU2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IuY2FsbENsb3N1cmVGcm9tKHNlbGVjdG9yKTsKICAgICAgICBqc0FzdC5OYW1lIGNsb3N1cmVDYWxsTmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShjYWxsU2VsZWN0b3IpOwoKICAgICAgICBMaXN0PGpzQXN0LlBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IDxqc0FzdC5QYXJhbWV0ZXI+W107CiAgICAgICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKICAgICAgICBpZiAoaXNJbnRlcmNlcHRlZE1ldGhvZCkgewogICAgICAgICAgcGFyYW1ldGVycy5hZGQobmV3IGpzQXN0LlBhcmFtZXRlcihyZWNlaXZlckFyZ3VtZW50TmFtZSkpOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxlY3Rvci5hcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgICAgIFN0cmluZyBuYW1lID0gJ2FyZyRpJzsKICAgICAgICAgIHBhcmFtZXRlcnMuYWRkKG5ldyBqc0FzdC5QYXJhbWV0ZXIobmFtZSkpOwogICAgICAgICAgYXJndW1lbnRzLmFkZChqcygnIycsIG5hbWUpKTsKICAgICAgICB9CgogICAgICAgIGpzQXN0LkZ1biBmdW5jdGlvbiA9IGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiAjLiMoIyk7IH0nLAogICAgICAgICAgICBbcGFyYW1ldGVycywgYnVpbGRHZXR0ZXIoKSwgY2xvc3VyZUNhbGxOYW1lLCBhcmd1bWVudHNdKTsKCiAgICAgICAgZ2VuZXJhdGVkU3R1YnNbaW52b2NhdGlvbk5hbWVdID0gZnVuY3Rpb247CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZ2VuZXJhdGVkU3R1YnM7CiAgfQoKICBNYXA8anNBc3QuTmFtZSwgU2VsZWN0b3I+IGNvbXB1dGVTZWxlY3RvcnNGb3JOc21IYW5kbGVycygpIHsKICAgIE1hcDxqc0FzdC5OYW1lLCBTZWxlY3Rvcj4ganNOYW1lcyA9IDxqc0FzdC5OYW1lLCBTZWxlY3Rvcj57fTsKCiAgICAvLyBEbyBub3QgZ2VuZXJhdGUgbm8gc3VjaCBtZXRob2QgaGFuZGxlcnMgaWYgdGhlcmUgaXMgbm8gY2xhc3MuCiAgICBpZiAoX2NvZGVnZW5Xb3JsZC5kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXMuaXNFbXB0eSkgewogICAgICByZXR1cm4ganNOYW1lczsKICAgIH0KCiAgICB2b2lkIGFkZE5vU3VjaE1ldGhvZEhhbmRsZXJzKAogICAgICAgIFN0cmluZyBpZ25vcmUsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSB7CiAgICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzLmtleXMpIHsKICAgICAgICBpZiAoc2VsZWN0b3IgPT0gU2VsZWN0b3JzLnJ1bnRpbWVUeXBlXyB8fAogICAgICAgICAgICBzZWxlY3RvciA9PSBTZWxlY3RvcnMuZXF1YWxzIHx8CiAgICAgICAgICAgIHNlbGVjdG9yID09IFNlbGVjdG9ycy50b1N0cmluZ18gfHwKICAgICAgICAgICAgc2VsZWN0b3IgPT0gU2VsZWN0b3JzLmhhc2hDb2RlXyB8fAogICAgICAgICAgICBzZWxlY3RvciA9PSBTZWxlY3RvcnMubm9TdWNoTWV0aG9kXykgewogICAgICAgICAgLy8gU2tpcCBPYmplY3QgbWV0aG9kcyBzaW5jZSB0aGVzZSBuZWVkIG5vIG5vU3VjaE1ldGhvZCBoYW5kbGluZwogICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgcHJlY2lzaW9uIG9mIHRoZSBzZWxlY3RvciBjb25zdHJhaW50cy4KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgU2VsZWN0b3JDb25zdHJhaW50cyBtYXNrU2V0ID0gc2VsZWN0b3JzW3NlbGVjdG9yXTsKICAgICAgICBpZiAobWFza1NldC5uZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKHNlbGVjdG9yLCBfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgICBqc0FzdC5OYW1lIGpzTmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTWlycm9ySW50ZXJuYWxOYW1lKHNlbGVjdG9yKTsKICAgICAgICAgIGpzTmFtZXNbanNOYW1lXSA9IHNlbGVjdG9yOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIF9jb2RlZ2VuV29ybGQuZm9yRWFjaEludm9rZWROYW1lKGFkZE5vU3VjaE1ldGhvZEhhbmRsZXJzKTsKICAgIF9jb2RlZ2VuV29ybGQuZm9yRWFjaEludm9rZWRHZXR0ZXIoYWRkTm9TdWNoTWV0aG9kSGFuZGxlcnMpOwogICAgX2NvZGVnZW5Xb3JsZC5mb3JFYWNoSW52b2tlZFNldHRlcihhZGROb1N1Y2hNZXRob2RIYW5kbGVycyk7CiAgICByZXR1cm4ganNOYW1lczsKICB9CgogIFN0dWJNZXRob2QgZ2VuZXJhdGVTdHViRm9yTm9TdWNoTWV0aG9kKGpzQXN0Lk5hbWUgbmFtZSwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIC8vIFZhbHVlcyBtYXRjaCBKU0ludm9jYXRpb25NaXJyb3IgaW4ganMtaGVscGVyIGxpYnJhcnkuCiAgICBpbnQgdHlwZSA9IHNlbGVjdG9yLmludm9jYXRpb25NaXJyb3JLaW5kOwogICAgTGlzdDxTdHJpbmc+IHBhcmFtZXRlck5hbWVzID0KICAgICAgICBuZXcgTGlzdC5nZW5lcmF0ZShzZWxlY3Rvci5hcmd1bWVudENvdW50LCAoaSkgPT4gJ1wkJGknKSArCiAgICAgICAgICAgIG5ldyBMaXN0LmdlbmVyYXRlKHNlbGVjdG9yLnR5cGVBcmd1bWVudENvdW50LCAoaSkgPT4gJ1wkVCR7aSArIDF9Jyk7CgogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmdOYW1lcyA9IHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUKICAgICAgICAuZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCkKICAgICAgICAubWFwKChTdHJpbmcgbmFtZSkgPT4ganMuc3RyaW5nKG5hbWUpKQogICAgICAgIC50b0xpc3QoKTsKCiAgICBqc0FzdC5OYW1lIG1ldGhvZE5hbWUgPSBfbmFtZXIuYXNOYW1lKHNlbGVjdG9yLmludm9jYXRpb25NaXJyb3JNZW1iZXJOYW1lKTsKICAgIGpzQXN0Lk5hbWUgaW50ZXJuYWxOYW1lID0gX25hbWVyLmludm9jYXRpb25NaXJyb3JJbnRlcm5hbE5hbWUoc2VsZWN0b3IpOwoKICAgIGFzc2VydChfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWROYW1lKElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8pKTsKICAgIGJvb2wgaXNJbnRlcmNlcHRlZCA9IF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE5hbWUoc2VsZWN0b3IubmFtZSk7CiAgICBqc0FzdC5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSBqcygnJyd0aGlzLiNub1N1Y2hNZXRob2ROYW1lKCNyZWNlaXZlciwKICAgICAgICAgICAgICAgICAgICAjY3JlYXRlSW52b2NhdGlvbk1pcnJvcigjbWV0aG9kTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW50ZXJuYWxOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25hbWVkQXJndW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0eXBlQXJndW1lbnRDb3VudCkpJycnLCB7CiAgICAgICdyZWNlaXZlcic6IGlzSW50ZXJjZXB0ZWQgPyByJyRyZWNlaXZlcicgOiAndGhpcycsCiAgICAgICdub1N1Y2hNZXRob2ROYW1lJzogX25hbWVyLm5vU3VjaE1ldGhvZE5hbWUsCiAgICAgICdjcmVhdGVJbnZvY2F0aW9uTWlycm9yJzoKICAgICAgICAgIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKF9jb21tb25FbGVtZW50cy5jcmVhdGVJbnZvY2F0aW9uTWlycm9yKSwKICAgICAgJ21ldGhvZE5hbWUnOgogICAgICAgICAganMucXVvdGVOYW1lKGVuYWJsZU1pbmlmaWNhdGlvbiA/IGludGVybmFsTmFtZSA6IG1ldGhvZE5hbWUpLAogICAgICAnaW50ZXJuYWxOYW1lJzoganMucXVvdGVOYW1lKGludGVybmFsTmFtZSksCiAgICAgICd0eXBlJzoganMubnVtYmVyKHR5cGUpLAogICAgICAnYXJndW1lbnRzJzogbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoCiAgICAgICAgICBwYXJhbWV0ZXJOYW1lcy5tYXA8anNBc3QuRXhwcmVzc2lvbj4oanMpLnRvTGlzdCgpKSwKICAgICAgJ25hbWVkQXJndW1lbnRzJzogbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoYXJnTmFtZXMpLAogICAgICAndHlwZUFyZ3VtZW50Q291bnQnOiBqcy5udW1iZXIoc2VsZWN0b3IudHlwZUFyZ3VtZW50Q291bnQpCiAgICB9KTsKCiAgICBqc0FzdC5FeHByZXNzaW9uIGZ1bmN0aW9uOwogICAgaWYgKGlzSW50ZXJjZXB0ZWQpIHsKICAgICAgZnVuY3Rpb24gPSBqcygKICAgICAgICAgIHInZnVuY3Rpb24oJHJlY2VpdmVyLCAjKSB7IHJldHVybiAjIH0nLCBbcGFyYW1ldGVyTmFtZXMsIGV4cHJlc3Npb25dKTsKICAgIH0gZWxzZSB7CiAgICAgIGZ1bmN0aW9uID0ganMocidmdW5jdGlvbigjKSB7IHJldHVybiAjIH0nLCBbcGFyYW1ldGVyTmFtZXMsIGV4cHJlc3Npb25dKTsKICAgIH0KICAgIHJldHVybiBuZXcgU3R1Yk1ldGhvZChuYW1lLCBmdW5jdGlvbik7CiAgfQp9CgovLy8gQ3JlYXRlcyB0d28gSmF2YVNjcmlwdCBmdW5jdGlvbnM6IGB0ZWFyT2ZmR2V0dGVyYCBhbmQgYHRlYXJPZmZgLgovLy8KLy8vIGB0ZWFyT2ZmR2V0dGVyYCBpcyBpbnRlcm5hbCBhbmQgb25seSB1c2VkIGJ5IGB0ZWFyT2ZmYC4KLy8vCi8vLyBgdGVhck9mZmAgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6Ci8vLyAgICogYGZ1bmNzYDogYSBsaXN0IG9mIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgcmVwcmVzZW50aW5nIHRoZQovLy8gICAgIG1lbWJlciB0aGF0IGlzIHRvcm4gb2ZmLiBUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSwgc2luY2UgYSBtZW1iZXIKLy8vICAgICBjYW4gaGF2ZSBzZXZlcmFsIHN0dWJzLgovLy8gICAgIEVhY2ggZnVuY3Rpb24gbXVzdCBoYXZlIHRoZSBgJGNhbGxOYW1lYCBwcm9wZXJ0eSBzZXQuCi8vLyAgICogYGFwcGx5VHJhbXBvbGluZUluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIHN0dWIgdG8gYmUgdXNlZCBmb3IKLy8vICAgICBGdW5jdGlvbi5hcHBseQovLy8gICAqIGByZWZsZWN0aW9uSW5mb2A6IGNvbnRhaW5zIHJlZmxlY3RpdmUgaW5mb3JtYXRpb24sIGFuZCB0aGUgZnVuY3Rpb24KLy8vICAgICB0eXBlLiBUT0RPKGZsb2l0c2NoKTogcG9pbnQgdG8gd2hlcmUgdGhpcyBpcyBzcGVjaWZpZWQuCi8vLyAgICogYGlzU3RhdGljYC4KLy8vICAgKiBgbmFtZWAuCi8vLyAgICogYGlzSW50ZXJjZXB0ZWQuCkxpc3Q8anNBc3QuU3RhdGVtZW50PiBidWlsZFRlYXJPZmZDb2RlKENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLCBFbWl0dGVyIGVtaXR0ZXIsCiAgICBOYW1lciBuYW1lciwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpIHsKICBGdW5jdGlvbkVudGl0eSBjbG9zdXJlRnJvbVRlYXJPZmYgPSBjb21tb25FbGVtZW50cy5jbG9zdXJlRnJvbVRlYXJPZmY7CiAganNBc3QuRXhwcmVzc2lvbiB0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbjsKICBqc0FzdC5FeHByZXNzaW9uIHRlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmc7CiAganNBc3QuRXhwcmVzc2lvbiB0ZWFyT2ZmR2xvYmFsT2JqZWN0OwogIGlmIChjbG9zdXJlRnJvbVRlYXJPZmYgIT0gbnVsbCkgewogICAgdGVhck9mZkFjY2Vzc0V4cHJlc3Npb24gPSBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNsb3N1cmVGcm9tVGVhck9mZik7CiAgICB0ZWFyT2ZmR2xvYmFsT2JqZWN0ID0KICAgICAgICBqcy5zdHJpbmdQYXJ0KG5hbWVyLmdsb2JhbE9iamVjdEZvck1lbWJlcihjbG9zdXJlRnJvbVRlYXJPZmYpKTsKICAgIHRlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcgPQogICAgICAgIGpzLnN0cmluZyhuYW1lci5nbG9iYWxPYmplY3RGb3JNZW1iZXIoY2xvc3VyZUZyb21UZWFyT2ZmKSk7CiAgfSBlbHNlIHsKICAgIC8vIERlZmF1bHQgdmFsdWVzIGZvciBtb2NrZWQtdXAgdGVzdCBsaWJyYXJpZXMuCiAgICB0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbiA9CiAgICAgICAganMocicnJ2Z1bmN0aW9uKCkgeyB0aHJvdyAiSGVscGVyICdjbG9zdXJlRnJvbVRlYXJPZmYnIG1pc3NpbmcuIiB9JycnKTsKICAgIHRlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcgPSBqcy5zdHJpbmcoJ01pc3NpbmdIZWxwZXJGdW5jdGlvbicpOwogICAgdGVhck9mZkdsb2JhbE9iamVjdCA9IGpzKAogICAgICAgIHInJycoZnVuY3Rpb24oKSB7IHRocm93ICJIZWxwZXIgJ2Nsb3N1cmVGcm9tVGVhck9mZicgbWlzc2luZy4iIH0pKCknJycpOwogIH0KCiAganNBc3QuU3RhdGVtZW50IHRlYXJPZmZHZXR0ZXI7CiAgaWYgKCFvcHRpb25zLnVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAganNBc3QuRXhwcmVzc2lvbiB0ZWFyT2ZmQWNjZXNzVGV4dCA9IG5ldyBqc0FzdC5VbnBhcnNlZE5vZGUoCiAgICAgICAgdGVhck9mZkFjY2Vzc0V4cHJlc3Npb24sIG9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uLCBmYWxzZSk7CiAgICB0ZWFyT2ZmR2V0dGVyID0ganMuc3RhdGVtZW50KCcnJwpmdW5jdGlvbiB0ZWFyT2ZmR2V0dGVyKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIG5hbWUsIGlzSW50ZXJjZXB0ZWQpIHsKICByZXR1cm4gaXNJbnRlcmNlcHRlZAogICAgICA/IG5ldyBGdW5jdGlvbigiZnVuY3MiLCAiYXBwbHlUcmFtcG9saW5lSW5kZXgiLCAicmVmbGVjdGlvbkluZm8iLCAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICN0ZWFyT2ZmR2xvYmFsT2JqZWN0U3RyaW5nLCAiYyIsCiAgICAgICAgICAicmV0dXJuIGZ1bmN0aW9uIHRlYXJPZmZfIiArIG5hbWUgKyAoZnVuY3Rpb25Db3VudGVyKyspICsgIihyZWNlaXZlcikgeyIgKwogICAgICAgICAgICAiaWYgKGMgPT09IG51bGwpIGMgPSAiICsgI3RlYXJPZmZBY2Nlc3NUZXh0ICsgIigiICsKICAgICAgICAgICAgICAgICJ0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgdHJ1ZSwgbmFtZSk7IiArCiAgICAgICAgICAgICAgICAicmV0dXJuIG5ldyBjKHRoaXMsIGZ1bmNzWzBdLCByZWNlaXZlciwgbmFtZSk7IiArCiAgICAgICAgICAgIn0iKShmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCAjdGVhck9mZkdsb2JhbE9iamVjdCwgbnVsbCkKICAgICAgOiBuZXcgRnVuY3Rpb24oImZ1bmNzIiwgImFwcGx5VHJhbXBvbGluZUluZGV4IiwgInJlZmxlY3Rpb25JbmZvIiwgIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAjdGVhck9mZkdsb2JhbE9iamVjdFN0cmluZywgImMiLAogICAgICAgICAgInJldHVybiBmdW5jdGlvbiB0ZWFyT2ZmXyIgKyBuYW1lICsgKGZ1bmN0aW9uQ291bnRlcisrKSsgIigpIHsiICsKICAgICAgICAgICAgImlmIChjID09PSBudWxsKSBjID0gIiArICN0ZWFyT2ZmQWNjZXNzVGV4dCArICIoIiArCiAgICAgICAgICAgICAgICAidGhpcywgZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgZmFsc2UsIGZhbHNlLCBuYW1lKTsiICsKICAgICAgICAgICAgICAgICJyZXR1cm4gbmV3IGModGhpcywgZnVuY3NbMF0sIG51bGwsIG5hbWUpOyIgKwogICAgICAgICAgICAgIn0iKShmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCAjdGVhck9mZkdsb2JhbE9iamVjdCwgbnVsbCk7Cn0nJycsIHsKICAgICAgJ3RlYXJPZmZBY2Nlc3NUZXh0JzogdGVhck9mZkFjY2Vzc1RleHQsCiAgICAgICd0ZWFyT2ZmR2xvYmFsT2JqZWN0JzogdGVhck9mZkdsb2JhbE9iamVjdCwKICAgICAgJ3RlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcnOiB0ZWFyT2ZmR2xvYmFsT2JqZWN0U3RyaW5nCiAgICB9KTsKICB9IGVsc2UgewogICAgdGVhck9mZkdldHRlciA9IGpzLnN0YXRlbWVudCgnJycKICAgICAgZnVuY3Rpb24gdGVhck9mZkdldHRlcihmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCBpc0ludGVyY2VwdGVkKSB7CiAgICAgICAgdmFyIGNhY2hlID0gbnVsbDsKICAgICAgICByZXR1cm4gaXNJbnRlcmNlcHRlZAogICAgICAgICAgICA/IGZ1bmN0aW9uKHJlY2VpdmVyKSB7CiAgICAgICAgICAgICAgICBpZiAoY2FjaGUgPT09IG51bGwpIGNhY2hlID0gIygKICAgICAgICAgICAgICAgICAgICB0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgdHJ1ZSwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGNhY2hlKHRoaXMsIGZ1bmNzWzBdLCByZWNlaXZlciwgbmFtZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGNhY2hlID09PSBudWxsKSBjYWNoZSA9ICMoCiAgICAgICAgICAgICAgICAgICAgdGhpcywgZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgZmFsc2UsIGZhbHNlLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgY2FjaGUodGhpcywgZnVuY3NbMF0sIG51bGwsIG5hbWUpOwogICAgICAgICAgICAgIH07CiAgICAgIH0nJycsIFt0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbiwgdGVhck9mZkFjY2Vzc0V4cHJlc3Npb25dKTsKICB9CgogIGpzQXN0LlN0YXRlbWVudCB0ZWFyT2ZmID0ganMuc3RhdGVtZW50KCcnJwogICAgICBmdW5jdGlvbiB0ZWFyT2ZmKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwKICAgICAgICAgIHJlZmxlY3Rpb25JbmZvLCBpc1N0YXRpYywgbmFtZSwgaXNJbnRlcmNlcHRlZCkgewogICAgICB2YXIgY2FjaGUgPSBudWxsOwogICAgICByZXR1cm4gaXNTdGF0aWMKICAgICAgICAgID8gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKGNhY2hlID09PSBudWxsKSBjYWNoZSA9ICN0ZWFyT2ZmKAogICAgICAgICAgICAgICAgICB0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsCiAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb25JbmZvLCB0cnVlLCBmYWxzZSwgbmFtZSkucHJvdG90eXBlOwogICAgICAgICAgICAgIHJldHVybiBjYWNoZTsKICAgICAgICAgICAgfQogICAgICAgICAgOiB0ZWFyT2ZmR2V0dGVyKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwKICAgICAgICAgICAgICByZWZsZWN0aW9uSW5mbywgbmFtZSwgaXNJbnRlcmNlcHRlZCk7CiAgICB9JycnLCB7J3RlYXJPZmYnOiB0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbn0pOwoKICByZXR1cm4gPGpzQXN0LlN0YXRlbWVudD5bdGVhck9mZkdldHRlciwgdGVhck9mZl07Cn0KgVoATk48ATEBOzYkISAsLkMaMTJCKgEhFQEbFiQjIRooAUctIgFIAS1NSgdINykeRDg0Fy8gOAZLOy9BOwg1EhYZEScIBAFPLRZIGEpKBAFPLRZIGEooD0wEASwGOUBLN0ZNHkQBNgElIkIdQSM6CjQPJj0vRhFLMwoIBgE3KgFNTg48MDs2HkAqAUVISgFAQSNFCgE7ITUoCgFCRgEzCAYBGwQBP0IBRT0WBgEiRzIyLC8vM0tGFAoBO0lNJgoIBgE/QUEUBAFPPS4iQ1EBPSQvEwFQTQFLTEo5OzM4PUc5MyBRFEgyHy8+PkEIAR8ZFVENUAYrBAIBRQQ8BC1PTCA+RxdMQBQQGFEySSwuKCRQGkggRAs0HlBEHlEEASErQUUlWxdQNlVAW0JfUDZMQFw+YgguMj0ICyVhGh0jL1tCEBsvXD4RQQQBLTQ7GBYZNDVAHA43NDEBNAIBOXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvY2xhc3Nfc3R1Yl9nZW5lcmF0b3IuZGFydEpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL2luc3RhbnRpYXRpb25fc3R1Yl9nZW5lcmF0b3IuZGFydKFGLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLmluc3RhbnRpYXRpb25fc3R1Yl9nZW5lcmF0b3I7CgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTmFtZXI7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JyBzaG93IFNlbGVjdG9yQ29uc3RyYWludHM7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ21vZGVsLmRhcnQnOwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzaywgRW1pdHRlcjsKCi8vIEdlbmVyYXRvciBvZiBzdHVicyByZXF1aXJlZCBmb3IgSW5zdGFudGlhdGlvbiBjbGFzc2VzLgpjbGFzcyBJbnN0YW50aWF0aW9uU3R1YkdlbmVyYXRvciB7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIF9lbWl0dGVyVGFzazsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgQ29kZWdlbldvcmxkIF9jb2RlZ2VuV29ybGQ7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICAvLyBpZ25vcmU6IFVOVVNFRF9GSUVMRAogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CgogIEluc3RhbnRpYXRpb25TdHViR2VuZXJhdG9yKHRoaXMuX2VtaXR0ZXJUYXNrLCB0aGlzLl9uYW1lciwgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwgdGhpcy5fc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSk7CgogIEVtaXR0ZXIgZ2V0IF9lbWl0dGVyID0+IF9lbWl0dGVyVGFzay5lbWl0dGVyOwoKICBKQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwoKICBDb21waWxlck9wdGlvbnMgZ2V0IF9vcHRpb25zID0+IF9lbWl0dGVyVGFzay5vcHRpb25zOwoKICAvLy8gR2VuZXJhdGVzIGEgc3R1YiB0byBmb3J3YXJkIGEgY2FsbCBzZWxlY3RvciB3aXRoIG5vIHR5cGUgYXJndW1lbnRzIHRvIGEKICAvLy8gY2FsbCBzZWxlY3RvciB3aXRoIHN0b3JlZCB0eXBlcy4KICAvLy8KICAvLy8gW2luc3RhbnRpYXRpb25DbGFzc10gaXMgdGhlIGNsYXNzIGNvbnRhaW5pbmcgdGhlIGNhcHR1cmVkIHR5cGUgYXJndW1lbnRzLgogIC8vLyBbY2FsbFNlbGVjdG9yXSBpcyB0aGUgc2VsZWN0b3Igd2l0aCBubyB0eXBlIGFyZ3VtZW50cy4gW3RhcmdldFNlbGVjdG9yXSBpcwogIC8vLyB0aGUgc2VsZWN0b3IgYWNjZXB0aW5nIHRoZSB0eXBlIGFyZ3VtZW50cy4KICBQYXJhbWV0ZXJTdHViTWV0aG9kIF9nZW5lcmF0ZVN0dWIoCiAgICAgIENsYXNzRW50aXR5IGluc3RhbnRpYXRpb25DbGFzcywKICAgICAgRmllbGRFbnRpdHkgZnVuY3Rpb25GaWVsZCwKICAgICAgU2VsZWN0b3IgY2FsbFNlbGVjdG9yLAogICAgICBTZWxlY3RvciB0YXJnZXRTZWxlY3RvcikgewogICAgLy8gVE9ETyhzcmEpOiBHZW5lcmF0ZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIHN0dWIgdGhhdCBoYXMgbm8gbWVtYmVyLgogICAgLy8KICAgIC8vU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIHNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciA9CiAgICAvLyAgICBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChtZW1iZXIpOwogICAgLy9Tb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAvLyAgICBzb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRTdHViKG1lbWJlciwgY2FsbFN0cnVjdHVyZSk7CgogICAgYXNzZXJ0KGNhbGxTZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudCA9PSAwKTsKICAgIGludCB0eXBlQXJndW1lbnRDb3VudCA9IHRhcmdldFNlbGVjdG9yLnR5cGVBcmd1bWVudENvdW50OwogICAgYXNzZXJ0KHR5cGVBcmd1bWVudENvdW50ID4gMCk7CgogICAgLy8gVGhlIGZvcndhcmRpbmcgc3R1YiBmb3IgdGhyZWUgYXJndW1lbnRzIG9mIGFuIGluc3RhbnRpYXRpb24gd2l0aCB0d28gdHlwZQogICAgLy8gYXJndW1lbnRzIGxvb2tzIGxpa2UgdGhpczoKICAgIC8vCiAgICAvLyBgYGAKICAgIC8vIGNhbGwkMzogZnVuY3Rpb24oYTAsIGExLCBhMikgewogICAgLy8gICByZXR1cm4gdGhpcy5fZi5jYWxsJDIkMyhhMCwgYTEsIGEyLCB0aGlzLiR0aVswXSwgdGhpcy4kdGlbMV0pOwogICAgLy8gfQogICAgLy8gYGBgCgogICAgTGlzdDxqc0FzdC5QYXJhbWV0ZXI+IHBhcmFtZXRlcnMgPSA8anNBc3QuUGFyYW1ldGVyPltdOwogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbGxTZWxlY3Rvci5hcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgU3RyaW5nIGpzTmFtZSA9ICdhJGknOwogICAgICBhcmd1bWVudHMuYWRkKGpzKCcjJywganNOYW1lKSk7CiAgICAgIHBhcmFtZXRlcnMuYWRkKG5ldyBqc0FzdC5QYXJhbWV0ZXIoanNOYW1lKSk7CiAgICB9CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXJnZXRTZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudDsgaSsrKSB7CiAgICAgICAgYXJndW1lbnRzLmFkZChqcygndGhpcy4jLiNbI10nLCBbCiAgICAgICAgICBfbmFtZXIucnRpRmllbGRKc05hbWUsCiAgICAgICAgICBfbmFtZXIuZmllbGRQcm9wZXJ0eU5hbWUoX2NvbW1vbkVsZW1lbnRzLnJ0aVJlc3RGaWVsZCksCiAgICAgICAgICBqcy5udW1iZXIoaSkKICAgICAgICBdKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFyZ2V0U2VsZWN0b3IudHlwZUFyZ3VtZW50Q291bnQ7IGkrKykgewogICAgICAgIGFyZ3VtZW50cy5hZGQoanMoJ3RoaXMuI1sjXScsIFtfbmFtZXIucnRpRmllbGRKc05hbWUsIGpzLm51bWJlcihpKV0pKTsKICAgICAgfQogICAgfQoKICAgIGpzQXN0LkZ1biBmdW5jdGlvbiA9IGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiB0aGlzLiMuIygjKTsgfScsIFsKICAgICAgcGFyYW1ldGVycywKICAgICAgX25hbWVyLmZpZWxkUHJvcGVydHlOYW1lKGZ1bmN0aW9uRmllbGQpLAogICAgICBfbmFtZXIuaW52b2NhdGlvbk5hbWUodGFyZ2V0U2VsZWN0b3IpLAogICAgICBhcmd1bWVudHMsCiAgICBdKTsKICAgIC8vIFRPRE8oc3JhKTogLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CgogICAganNBc3QuTmFtZSBuYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKGNhbGxTZWxlY3Rvcik7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclN0dWJNZXRob2QobmFtZSwgbnVsbCwgZnVuY3Rpb24pOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBhIHN0dWIgZm9yIGEgJ3NpZ25hdHVyZScgc2VsZWN0b3IuIFRoZSBzdHViIGNhbGxzIHRoZSB1bmRlcmx5aW5nCiAgLy8vIGZ1bmN0aW9uJ3MgJ3NpZ25hdHVyZScgbWV0aG9kIGFuZCBjYWxscyBhIGhlbHBlciB0byBzdWJzaXR1dGUgdGhlIHR5cGUKICAvLy8gcGFyYW1ldGVycyBpbiB0aGUgdHlwZSB0ZXJtLiBUaGUgc3R1YiBsb29rcyBsaWtlIHRoaXM6CiAgLy8vCiAgLy8vIGBgYAogIC8vLyAkc2lnbmF0dXJlOjogZnVuY3Rpb24oKSB7CiAgLy8vICAgcmV0dXJuIEguaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZSgKICAvLy8gICAgICAgSC5leHRyYWN0RnVuY3Rpb25UeXBlT2JqZWN0RnJvbUludGVybmFsKHRoaXMuX2dlbmVyaWNDbG9zdXJlKSwKICAvLy8gICAgICAgdGhpcy4kdGkpOwogIC8vLyB9CiAgLy8vIGBgYAogIFBhcmFtZXRlclN0dWJNZXRob2QgX2dlbmVyYXRlU2lnbmF0dXJlU3R1YihGaWVsZEVudGl0eSBmdW5jdGlvbkZpZWxkKSB7CiAgICBqc0FzdC5OYW1lIG9wZXJhdG9yU2lnbmF0dXJlID0KICAgICAgICBfbmFtZXIuYXNOYW1lKF9uYW1lci5maXhlZE5hbWVzLm9wZXJhdG9yU2lnbmF0dXJlKTsKCiAgICBqc0FzdC5GdW4gZnVuY3Rpb24gPSBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgICAgPyBfZ2VuZXJhdGVTaWduYXR1cmVOZXdSdGkoZnVuY3Rpb25GaWVsZCkKICAgICAgICA6IF9nZW5lcmF0ZVNpZ25hdHVyZUxlZ2FjeShmdW5jdGlvbkZpZWxkKTsKCiAgICAvLyBUT0RPKHNyYSk6IEdlbmVyYXRlIHNvdXJjZSBpbmZvcm1hdGlvbiBmb3Igc3R1YiB0aGF0IGhhcyBubyBtZW1iZXIuCiAgICAvLyBUT0RPKHNyYSk6IC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwoKICAgIHJldHVybiBuZXcgUGFyYW1ldGVyU3R1Yk1ldGhvZChvcGVyYXRvclNpZ25hdHVyZSwgbnVsbCwgZnVuY3Rpb24pOwogIH0KCiAganNBc3QuRnVuIF9nZW5lcmF0ZVNpZ25hdHVyZUxlZ2FjeShGaWVsZEVudGl0eSBmdW5jdGlvbkZpZWxkKSA9PgogICAgICBqcygnZnVuY3Rpb24oKSB7IHJldHVybiAjKCModGhpcy4jKSwgdGhpcy4jKTsgfScsIFsKICAgICAgICBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcygKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmluc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGUpLAogICAgICAgIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuZXh0cmFjdEZ1bmN0aW9uVHlwZU9iamVjdEZyb21JbnRlcm5hbCksCiAgICAgICAgX25hbWVyLmZpZWxkUHJvcGVydHlOYW1lKGZ1bmN0aW9uRmllbGQpLAogICAgICAgIF9uYW1lci5ydGlGaWVsZEpzTmFtZSwKICAgICAgXSk7CgogIGpzQXN0LkZ1biBfZ2VuZXJhdGVTaWduYXR1cmVOZXdSdGkoRmllbGRFbnRpdHkgZnVuY3Rpb25GaWVsZCkgPT4KICAgICAganMoJ2Z1bmN0aW9uKCkgeyByZXR1cm4gIygjKHRoaXMuIyksIHRoaXMuIyk7IH0nLCBbCiAgICAgICAgX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoCiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlTmV3UnRpKSwKICAgICAgICBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhfY29tbW9uRWxlbWVudHMuY2xvc3VyZUZ1bmN0aW9uVHlwZSksCiAgICAgICAgX25hbWVyLmZpZWxkUHJvcGVydHlOYW1lKGZ1bmN0aW9uRmllbGQpLAogICAgICAgIF9uYW1lci5ydGlGaWVsZEpzTmFtZSwKICAgICAgXSk7CgogIC8vIFJldHVybnMgYWxsIHN0dWJzIGZvciBhbiBpbnN0YW50aWF0aW9uIGNsYXNzLgogIC8vCiAgTGlzdDxTdHViTWV0aG9kPiBnZW5lcmF0ZVN0dWJzKAogICAgICBDbGFzc0VudGl0eSBpbnN0YW50aWF0aW9uQ2xhc3MsIEZ1bmN0aW9uRW50aXR5IG1lbWJlcikgewogICAgLy8gMS4gRmluZCB0aGUgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycyBpbiBbaW5zdGFudGlhdGlvbkNsYXNzXS4KICAgIGludCB0eXBlQXJndW1lbnRDb3VudCA9IF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMKICAgICAgICAuZ2V0VGhpc1R5cGUoaW5zdGFudGlhdGlvbkNsYXNzKQogICAgICAgIC50eXBlQXJndW1lbnRzCiAgICAgICAgLmxlbmd0aDsKICAgIGFzc2VydCh0eXBlQXJndW1lbnRDb3VudCA+IDApOwoKICAgIC8vIDIuIEZpbmQgdGhlIGZ1bmN0aW9uIGZpZWxkIGFjY2VzcyBwYXRoLgogICAgRmllbGRFbnRpdHkgZnVuY3Rpb25GaWVsZDsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaEluc3RhbmNlRmllbGQoaW5zdGFudGlhdGlvbkNsYXNzLAogICAgICAgIChDbGFzc0VudGl0eSBlbmNsb3NpbmcsIEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzRWxpZGVkKSByZXR1cm47CiAgICAgIGlmIChmaWVsZC5uYW1lID09ICdfZ2VuZXJpY0Nsb3N1cmUnKSBmdW5jdGlvbkZpZWxkID0gZmllbGQ7CiAgICB9KTsKICAgIGFzc2VydChmdW5jdGlvbkZpZWxkICE9IG51bGwsCiAgICAgICAgIkNhbid0IGZpbmQgQ2xvc3VyZSBmaWVsZCBvZiAkaW5zdGFudGlhdGlvbkNsYXNzIik7CgogICAgU3RyaW5nIGNhbGwgPSBfbmFtZXIuY2xvc3VyZUludm9jYXRpb25TZWxlY3Rvck5hbWU7CiAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IGNhbGxTZWxlY3RvcnMgPQogICAgICAgIF9jb2RlZ2VuV29ybGQuaW52b2NhdGlvbnNCeU5hbWUoY2FsbCk7CgogICAgU2V0PFBhcmFtZXRlclN0cnVjdHVyZT4gY29tcHV0ZUxpdmVQYXJhbWV0ZXJTdHJ1Y3R1cmVzKCkgewogICAgICBTZXQ8UGFyYW1ldGVyU3RydWN0dXJlPiBwYXJhbWV0ZXJTdHJ1Y3R1cmVzID0KICAgICAgICAgIG5ldyBTZXQ8UGFyYW1ldGVyU3RydWN0dXJlPigpOwoKICAgICAgdm9pZCBwcm9jZXNzKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICAgICAgaWYgKGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyA9PSB0eXBlQXJndW1lbnRDb3VudCkgewogICAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlcy5hZGQoZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIF9jb2RlZ2VuV29ybGQuY2xvc3VyaXplZFN0YXRpY3MuZm9yRWFjaChwcm9jZXNzKTsKICAgICAgX2NvZGVnZW5Xb3JsZC5jbG9zdXJpemVkTWVtYmVycy5mb3JFYWNoKHByb2Nlc3MpOwogICAgICBfY29kZWdlbldvcmxkLmZvckVhY2hHZW5lcmljQ2xvc3VyZUNhbGxNZXRob2QocHJvY2Vzcyk7CgogICAgICByZXR1cm4gcGFyYW1ldGVyU3RydWN0dXJlczsKICAgIH0KCiAgICBMaXN0PFN0dWJNZXRob2Q+IHN0dWJzID0gPFN0dWJNZXRob2Q+W107CgogICAgLy8gRm9yIGV2ZXJ5IGNhbGwtc2VsZWN0b3IgZ2VuZXJhdGUgYSBzdHViIHRvIHRoZSBjb3JyZXNwb25kaW5nIHNlbGVjdG9yCiAgICAvLyB3aXRoIGZpbGxlZC1pbiB0eXBlIGFyZ3VtZW50cy4KCiAgICBpZiAoY2FsbFNlbGVjdG9ycyAhPSBudWxsKSB7CiAgICAgIFNldDxQYXJhbWV0ZXJTdHJ1Y3R1cmU+IHBhcmFtZXRlclN0cnVjdHVyZXM7CiAgICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gY2FsbFNlbGVjdG9ycy5rZXlzKSB7CiAgICAgICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gc2VsZWN0b3IuY2FsbFN0cnVjdHVyZTsKICAgICAgICBpZiAoY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCAhPSAwKSBjb250aW51ZTsKICAgICAgICBDYWxsU3RydWN0dXJlIGdlbmVyaWNDYWxsU3RydWN0dXJlID0KICAgICAgICAgICAgY2FsbFN0cnVjdHVyZS53aXRoVHlwZUFyZ3VtZW50Q291bnQodHlwZUFyZ3VtZW50Q291bnQpOwogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZXMgPz89IGNvbXB1dGVMaXZlUGFyYW1ldGVyU3RydWN0dXJlcygpOwogICAgICAgIGZvciAoUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSBpbiBwYXJhbWV0ZXJTdHJ1Y3R1cmVzKSB7CiAgICAgICAgICBpZiAoZ2VuZXJpY0NhbGxTdHJ1Y3R1cmUuc2lnbmF0dXJlQXBwbGllcyhwYXJhbWV0ZXJTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgIFNlbGVjdG9yIGdlbmVyaWNTZWxlY3RvciA9CiAgICAgICAgICAgICAgICBuZXcgU2VsZWN0b3IuY2FsbChzZWxlY3Rvci5tZW1iZXJOYW1lLCBnZW5lcmljQ2FsbFN0cnVjdHVyZSk7CiAgICAgICAgICAgIHN0dWJzLmFkZChfZ2VuZXJhdGVTdHViKAogICAgICAgICAgICAgICAgaW5zdGFudGlhdGlvbkNsYXNzLCBmdW5jdGlvbkZpZWxkLCBzZWxlY3RvciwgZ2VuZXJpY1NlbGVjdG9yKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHN0dWJzLmFkZChfZ2VuZXJhdGVTaWduYXR1cmVTdHViKGZ1bmN0aW9uRmllbGQpKTsKCiAgICByZXR1cm4gc3R1YnM7CiAgfQp9CoDjAE5OPAE5AUwkKCEgLho9MTJCKgEVAT8BOiMmFiQjGj4BUDwBMAFGMScBOAFOJwZQUTElJiEdIUsHOkYsRQExPiMBUSIHCyZICQsBPD0BOx0mMwYBJUMqIUIXDQgNQ08IBgFFEi8tEQg9ATs6BAFRTT0GCiAySxcICkojPAEzMjMBSz0BRwQBQzonPidEMR8KAUM6J0RMMR8KATMFIj9GMykXESMBLx9BNUtCCCI8ATg3LwE/NCkBLk9ACggBODg+ASIGAS0BTSYBITM2PjwtREJNSydOJVATDAoIBgE2ARIEAgFBcGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9pbnN0YW50aWF0aW9uX3N0dWJfZ2VuZXJhdG9yLmRhcnRIc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9pbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvci5kYXJ0wABDAC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5pbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvcjsKCmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9lbWJlZGRlZF9uYW1lcy5kYXJ0JyBhcyBlbWJlZGRlZE5hbWVzOwoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JyBzaG93IEludGVyZmFjZVR5cGU7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTmFtZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9jdXN0b21fZWxlbWVudHNfYW5hbHlzaXMuZGFydCcKICAgIHNob3cgQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ2NvZGVfZW1pdHRlcl90YXNrLmRhcnQnIHNob3cgRW1pdHRlcjsKCmNsYXNzIEludGVyY2VwdG9yU3R1YkdlbmVyYXRvciB7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwogIGZpbmFsIEVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgTmF0aXZlQ29kZWdlbkVucXVldWVyIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXI7CiAgZmluYWwgTmFtZXIgX25hbWVyOwogIGZpbmFsIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpczsKICBmaW5hbCBDb2RlZ2VuV29ybGQgX2NvZGVnZW5Xb3JsZDsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwoKICBJbnRlcmNlcHRvclN0dWJHZW5lcmF0b3IoCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLl9lbWl0dGVyLAogICAgICB0aGlzLl9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIsCiAgICAgIHRoaXMuX25hbWVyLAogICAgICB0aGlzLl9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcywKICAgICAgdGhpcy5fY29kZWdlbldvcmxkLAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCk7CgogIE5hdGl2ZURhdGEgZ2V0IF9uYXRpdmVEYXRhID0+IF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhOwoKICBJbnRlcmNlcHRvckRhdGEgZ2V0IF9pbnRlcmNlcHRvckRhdGEgPT4gX2Nsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YTsKCiAganNBc3QuRXhwcmVzc2lvbiBnZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kKAogICAgICBTcGVjaWFsaXplZEdldEludGVyY2VwdG9yIGludGVyY2VwdG9yKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSBpbnRlcmNlcHRvci5jbGFzc2VzOwoKICAgIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJjZXB0b3JGb3IoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIHJldHVybiBfZW1pdHRlci5pbnRlcmNlcHRvclByb3RvdHlwZUFjY2VzcyhjbHMpOwogICAgfQoKICAgIC8vLyBCdWlsZCBhIEphdmFTY3JpcHQgQVNUIG5vZGUgZm9yIGRvaW5nIGEgdHlwZSBjaGVjayBvbgogICAgLy8vIFtjbHNdLiBbY2xzXSBtdXN0IGJlIGEgbm9uLW5hdGl2ZSBpbnRlcmNlcHRvciBjbGFzcy4KICAgIGpzQXN0LlN0YXRlbWVudCBidWlsZEludGVyY2VwdG9yQ2hlY2soQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gY29uZGl0aW9uOwogICAgICBhc3NlcnQoX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkQ2xhc3MoY2xzKSk7CiAgICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKSB7CiAgICAgICAgY29uZGl0aW9uID0ganMoJyh0eXBlb2YgcmVjZWl2ZXIpID09ICJib29sZWFuIicpOwogICAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyB8fAogICAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpIHsKICAgICAgICB0aHJvdyAnaW50ZXJuYWwgZXJyb3InOwogICAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcykgewogICAgICAgIGNvbmRpdGlvbiA9IGpzKCdyZWNlaXZlci5jb25zdHJ1Y3RvciA9PSBBcnJheScpOwogICAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcykgewogICAgICAgIGNvbmRpdGlvbiA9IGpzKCcodHlwZW9mIHJlY2VpdmVyKSA9PSAic3RyaW5nIicpOwogICAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpIHsKICAgICAgICBjb25kaXRpb24gPSBqcygncmVjZWl2ZXIgPT0gbnVsbCcpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93ICdpbnRlcm5hbCBlcnJvcic7CiAgICAgIH0KICAgICAgcmV0dXJuIGpzLnN0YXRlbWVudCgnaWYgKCMpIHJldHVybiAjJywgW2NvbmRpdGlvbiwgaW50ZXJjZXB0b3JGb3IoY2xzKV0pOwogICAgfQoKICAgIGJvb2wgaGFzQXJyYXkgPSBmYWxzZTsKICAgIGJvb2wgaGFzQm9vbCA9IGZhbHNlOwogICAgYm9vbCBoYXNEb3VibGUgPSBmYWxzZTsKICAgIGJvb2wgaGFzSW50ID0gZmFsc2U7CiAgICBib29sIGhhc051bGwgPSBmYWxzZTsKICAgIGJvb2wgaGFzTnVtYmVyID0gZmFsc2U7CiAgICBib29sIGhhc1N0cmluZyA9IGZhbHNlOwogICAgYm9vbCBoYXNOYXRpdmUgPSBmYWxzZTsKICAgIGJvb2wgYW55TmF0aXZlQ2xhc3NlcyA9IF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIuaGFzSW5zdGFudGlhdGVkTmF0aXZlQ2xhc3NlczsKCiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBjbGFzc2VzKSB7CiAgICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyB8fAogICAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc011dGFibGVBcnJheUNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MpCiAgICAgICAgaGFzQXJyYXkgPSB0cnVlOwogICAgICBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKQogICAgICAgIGhhc0Jvb2wgPSB0cnVlOwogICAgICBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpCiAgICAgICAgaGFzRG91YmxlID0gdHJ1ZTsKICAgICAgZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKQogICAgICAgIGhhc0ludCA9IHRydWU7CiAgICAgIGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpCiAgICAgICAgaGFzTnVsbCA9IHRydWU7CiAgICAgIGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykKICAgICAgICBoYXNOdW1iZXIgPSB0cnVlOwogICAgICBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpCiAgICAgICAgaGFzU3RyaW5nID0gdHJ1ZTsKICAgICAgZWxzZSB7CiAgICAgICAgLy8gVGhlIHNldCBvZiBjbGFzc2VzIGluY2x1ZGVzIGNsYXNzZXMgbWl4ZWQtaW4gdG8gaW50ZXJjZXB0b3IgY2xhc3NlcwogICAgICAgIC8vIGFuZCB1c2VyIGV4dGVuc2lvbnMgb2YgbmF0aXZlIGNsYXNzZXMuCiAgICAgICAgLy8KICAgICAgICAvLyBUaGUgc2V0IG9mIGNsYXNzZXMgYWxzbyBpbmNsdWRlcyB0aGUgJ3ByaW1pdGl2ZScgaW50ZXJjZXB0b3IKICAgICAgICAvLyBQbGFpbkphdmFTY3JpcHRPYmplY3QgZXZlbiB3aGVuIGl0IGhhcyBub3QgYmVlbiByZXNvbHZlZCwgc2luY2UgaXQgaXMKICAgICAgICAvLyBvbmx5IHJlc29sdmVkIHRocm91Z2ggdGhlIHJlZmVyZW5jZSBpbiBnZXROYXRpdmVJbnRlcmNlcHRvciB3aGVuCiAgICAgICAgLy8gZ2V0TmF0aXZlSW50ZXJjZXB0b3IgaXMgbWFya2VkIGFzIHVzZWQuICBHdWFyZCBhZ2FpbnN0IHByb2JpbmcKICAgICAgICAvLyB1bnJlc29sdmVkIFBsYWluSmF2YVNjcmlwdE9iamVjdCBieSB0ZXN0aW5nIGZvciBhbnlOYXRpdmVDbGFzc2VzLgoKICAgICAgICBpZiAoYW55TmF0aXZlQ2xhc3NlcykgewogICAgICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykpIGhhc05hdGl2ZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaGFzRG91YmxlKSB7CiAgICAgIGhhc051bWJlciA9IHRydWU7CiAgICB9CiAgICBpZiAoaGFzSW50KSBoYXNOdW1iZXIgPSB0cnVlOwoKICAgIGlmIChjbGFzc2VzLmNvbnRhaW5zQWxsKF9pbnRlcmNlcHRvckRhdGEuaW50ZXJjZXB0ZWRDbGFzc2VzKSkgewogICAgICAvLyBJLmUuIHRoaXMgaXMgdGhlIGdlbmVyYWwgaW50ZXJjZXB0b3IuCiAgICAgIGhhc05hdGl2ZSA9IGFueU5hdGl2ZUNsYXNzZXM7CiAgICB9CgogICAgTGlzdDxqc0FzdC5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSA8anNBc3QuU3RhdGVtZW50PltdOwoKICAgIGlmIChoYXNOdW1iZXIpIHsKICAgICAganNBc3QuU3RhdGVtZW50IHdoZW5OdW1iZXI7CgogICAgICAvLy8gTm90ZTogdGhlcmUgYXJlIHR3byBudW1iZXIgY2xhc3NlcyBpbiBwbGF5OiBEYXJ0J3MgW251bV0sCiAgICAgIC8vLyBhbmQgSmF2YVNjcmlwdCdzIE51bWJlciAodHlwZW9mIHJlY2VpdmVyID09ICdudW1iZXInKS4gIFRoaXMKICAgICAgLy8vIGlzIHRoZSBmYWxsYmFjayB1c2VkIHdoZW4gd2UgaGF2ZSBkZXRlcm1pbmVkIHRoYXQgcmVjZWl2ZXIKICAgICAgLy8vIGlzIGEgSmF2YVNjcmlwdCBOdW1iZXIuCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJjZXB0b3JGb3JOdW1iZXIgPSBpbnRlcmNlcHRvckZvcihoYXNEb3VibGUKICAgICAgICAgID8gX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MKICAgICAgICAgIDogX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpOwoKICAgICAgaWYgKGhhc0ludCkgewogICAgICAgIHdoZW5OdW1iZXIgPSBqcy5zdGF0ZW1lbnQoJycnewogICAgICAgICAgICBpZiAoTWF0aC5mbG9vcihyZWNlaXZlcikgPT0gcmVjZWl2ZXIpIHJldHVybiAjOwogICAgICAgICAgICByZXR1cm4gIzsKICAgICAgICB9JycnLAogICAgICAgICAgICBbaW50ZXJjZXB0b3JGb3IoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpLCBpbnRlcmNlcHRvckZvck51bWJlcl0pOwogICAgICB9IGVsc2UgewogICAgICAgIHdoZW5OdW1iZXIgPSBqcy5zdGF0ZW1lbnQoJ3JldHVybiAjJywgaW50ZXJjZXB0b3JGb3JOdW1iZXIpOwogICAgICB9CiAgICAgIHN0YXRlbWVudHMKICAgICAgICAgIC5hZGQoanMuc3RhdGVtZW50KCdpZiAodHlwZW9mIHJlY2VpdmVyID09ICJudW1iZXIiKSAjOycsIHdoZW5OdW1iZXIpKTsKICAgIH0KCiAgICBpZiAoaGFzU3RyaW5nKSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKGJ1aWxkSW50ZXJjZXB0b3JDaGVjayhfY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcykpOwogICAgfQogICAgaWYgKGhhc051bGwpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoYnVpbGRJbnRlcmNlcHRvckNoZWNrKF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcykpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUmV0dXJuaW5nICJ1bmRlZmluZWQiIG9yICJudWxsIiBoZXJlIHdpbGwgcHJvdm9rZSBhIEphdmFTY3JpcHQKICAgICAgLy8gVHlwZUVycm9yIHdoaWNoIGlzIGxhdGVyIGlkZW50aWZpZWQgYXMgYSBudWxsLWVycm9yIGJ5CiAgICAgIC8vIFt1bndyYXBFeGNlcHRpb25dIGluIGpzX2hlbHBlci5kYXJ0LgogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5zdGF0ZW1lbnQoJ2lmIChyZWNlaXZlciA9PSBudWxsKSByZXR1cm4gcmVjZWl2ZXInKSk7CiAgICB9CiAgICBpZiAoaGFzQm9vbCkgewogICAgICBzdGF0ZW1lbnRzLmFkZChidWlsZEludGVyY2VwdG9yQ2hlY2soX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKSk7CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IEl0IG1pZ2h0IGJlIGZhc3RlciB0byBjaGVjayBmb3IgQXJyYXkgYmVmb3JlCiAgICAvLyBmdW5jdGlvbiBhbmQgYm9vbC4KICAgIGlmIChoYXNBcnJheSkgewogICAgICBzdGF0ZW1lbnRzLmFkZChidWlsZEludGVyY2VwdG9yQ2hlY2soX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykpOwogICAgfQoKICAgIGlmIChoYXNOYXRpdmUpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuc3RhdGVtZW50KHInJyd7CiAgICAgICAgICBpZiAodHlwZW9mIHJlY2VpdmVyICE9ICJvYmplY3QiKSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciA9PSAiZnVuY3Rpb24iICkgcmV0dXJuICM7CiAgICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHJlY2VpdmVyIGluc3RhbmNlb2YgIykgcmV0dXJuIHJlY2VpdmVyOwogICAgICAgICAgcmV0dXJuICMocmVjZWl2ZXIpOwogICAgICB9JycnLCBbCiAgICAgICAgaW50ZXJjZXB0b3JGb3IoX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3MpLAogICAgICAgIF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyksCiAgICAgICAgX2VtaXR0ZXIKICAgICAgICAgICAgLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKF9jb21tb25FbGVtZW50cy5nZXROYXRpdmVJbnRlcmNlcHRvck1ldGhvZCkKICAgICAgXSkpOwogICAgfSBlbHNlIHsKICAgICAgQ2xhc3NFbnRpdHkganNVbmtub3duID0gX2NvbW1vbkVsZW1lbnRzLmpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzczsKICAgICAgaWYgKF9jb2RlZ2VuV29ybGQuZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzLmNvbnRhaW5zKGpzVW5rbm93bikpIHsKICAgICAgICBzdGF0ZW1lbnRzLmFkZChqcy5zdGF0ZW1lbnQoJ2lmICghKHJlY2VpdmVyIGluc3RhbmNlb2YgIykpIHJldHVybiAjOycsIFsKICAgICAgICAgIF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyksCiAgICAgICAgICBpbnRlcmNlcHRvckZvcihqc1Vua25vd24pCiAgICAgICAgXSkpOwogICAgICB9CgogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5zdGF0ZW1lbnQoJ3JldHVybiByZWNlaXZlcicpKTsKICAgIH0KCiAgICByZXR1cm4ganMoJycnZnVuY3Rpb24ocmVjZWl2ZXIpIHsgIzsgfScnJywgbmV3IGpzQXN0LkJsb2NrKHN0YXRlbWVudHMpKTsKICB9CgogIGpzQXN0LkNhbGwgX2dlbmVyYXRlSXNKc0luZGV4YWJsZUNhbGwoCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gdXNlMSwganNBc3QuRXhwcmVzc2lvbiB1c2UyKSB7CiAgICBTdHJpbmcgZGlzcGF0Y2hQcm9wZXJ0eU5hbWUgPSBlbWJlZGRlZE5hbWVzLkRJU1BBVENIX1BST1BFUlRZX05BTUU7CiAgICBqc0FzdC5FeHByZXNzaW9uIGRpc3BhdGNoUHJvcGVydHkgPQogICAgICAgIF9lbWl0dGVyLmdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoZGlzcGF0Y2hQcm9wZXJ0eU5hbWUpOwoKICAgIC8vIFdlIHBhc3MgdGhlIGRpc3BhdGNoIHByb3BlcnR5IHJlY29yZCB0byB0aGUgaXNKc0luZGV4YWJsZQogICAgLy8gaGVscGVyIHJhdGhlciB0aGFuIHJlYWRpbmcgaXQgaW5zaWRlIHRoZSBoZWxwZXIgdG8gaW5jcmVhc2UgdGhlCiAgICAvLyBjaGFuY2Ugb2YgbWFraW5nIHRoZSBkaXNwYXRjaCByZWNvcmQgYWNjZXNzIG1vbm9tb3JwaGljLgogICAganNBc3QuUHJvcGVydHlBY2Nlc3MgcmVjb3JkID0KICAgICAgICBuZXcganNBc3QuUHJvcGVydHlBY2Nlc3ModXNlMiwgZGlzcGF0Y2hQcm9wZXJ0eSk7CgogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bdXNlMSwgcmVjb3JkXTsKICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlciA9IF9jb21tb25FbGVtZW50cy5pc0pzSW5kZXhhYmxlOwogICAganNBc3QuRXhwcmVzc2lvbiBoZWxwZXJFeHByZXNzaW9uID0gX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoaGVscGVyKTsKICAgIHJldHVybiBuZXcganNBc3QuQ2FsbChoZWxwZXJFeHByZXNzaW9uLCBhcmd1bWVudHMpOwogIH0KCiAgLy8gUmV0dXJucyBhIHN0YXRlbWVudCB0aGF0IHRha2VzIGNhcmUgb2YgcGVyZm9ybWFuY2UgY3JpdGljYWwKICAvLyBjb21tb24gY2FzZSBmb3IgYSBvbmUtc2hvdCBpbnRlcmNlcHRvciwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubwogIC8vIGZhc3QgcGF0aC4KICBqc0FzdC5TdGF0ZW1lbnQgX2Zhc3RQYXRoRm9yT25lU2hvdEludGVyY2VwdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICBpZiAoc2VsZWN0b3IuaXNPcGVyYXRvcikgewogICAgICBTdHJpbmcgbmFtZSA9IHNlbGVjdG9yLm5hbWU7CiAgICAgIGlmIChuYW1lID09ICc9PScpIHsKICAgICAgICByZXR1cm4ganMuc3RhdGVtZW50KCcnJ3sKICAgICAgICAgIGlmIChyZWNlaXZlciA9PSBudWxsKSByZXR1cm4gYTAgPT0gbnVsbDsKICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgIT0gIm9iamVjdCIpCiAgICAgICAgICAgIHJldHVybiBhMCAhPSBudWxsICYmIHJlY2VpdmVyID09PSBhMDsKICAgICAgICB9JycnKTsKICAgICAgfQogICAgICBpZiAoIWNsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpICYmCiAgICAgICAgICAhY2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykgJiYKICAgICAgICAgICFjbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChzZWxlY3Rvci5hcmd1bWVudENvdW50ID09IDEpIHsKICAgICAgICAvLyBUaGUgZm9sbG93aW5nIG9wZXJhdG9ycyBkbyBub3QgbWFwIHRvIGEgSmF2YVNjcmlwdCBvcGVyYXRvci4KICAgICAgICBpZiAobmFtZSA9PSAnfi8nIHx8IG5hbWUgPT0gJzw8JyB8fCBuYW1lID09ICclJyB8fCBuYW1lID09ICc+PicpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBqc0FzdC5FeHByZXNzaW9uIHJlc3VsdCA9IGpzKCdyZWNlaXZlciAkbmFtZSBhMCcpOwogICAgICAgIGlmIChuYW1lID09ICcmJyB8fCBuYW1lID09ICd8JyB8fCBuYW1lID09ICdeJykgewogICAgICAgICAgcmVzdWx0ID0ganMoJyMgPj4+IDAnLCByZXN1bHQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4ganMuc3RhdGVtZW50KAogICAgICAgICAgICAnaWYgKHR5cGVvZiByZWNlaXZlciA9PSAibnVtYmVyIiAmJiB0eXBlb2YgYTAgPT0gIm51bWJlciIpJwogICAgICAgICAgICAnICByZXR1cm4gIzsnLAogICAgICAgICAgICByZXN1bHQpOwogICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ3VuYXJ5LScpIHsKICAgICAgICByZXR1cm4ganMKICAgICAgICAgICAgLnN0YXRlbWVudCgnaWYgKHR5cGVvZiByZWNlaXZlciA9PSAibnVtYmVyIikgcmV0dXJuIC1yZWNlaXZlcicpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChuYW1lID09ICd+Jyk7CiAgICAgICAgcmV0dXJuIGpzLnN0YXRlbWVudCgnJycKICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgPT0gIm51bWJlciIgJiYgTWF0aC5mbG9vcihyZWNlaXZlcikgPT0gcmVjZWl2ZXIpCiAgICAgICAgICAgIHJldHVybiAofnJlY2VpdmVyKSA+Pj4gMDsKICAgICAgICAgICcnJyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNJbmRleCB8fCBzZWxlY3Rvci5pc0luZGV4U2V0KSB7CiAgICAgIC8vIEZvciBhbiBpbmRleCBvcGVyYXRpb24sIHRoaXMgY29kZSBnZW5lcmF0ZXM6CiAgICAgIC8vCiAgICAgIC8vICAgIGlmICh0eXBlb2YgYTAgPT09ICJudW1iZXIiKSB7CiAgICAgIC8vICAgICAgaWYgKHJlY2VpdmVyLmNvbnN0cnVjdG9yID09IEFycmF5IHx8CiAgICAgIC8vICAgICAgICAgIHR5cGVvZiByZWNlaXZlciA9PSAic3RyaW5nIikgewogICAgICAvLyAgICAgICAgaWYgKGEwID4+PiAwID09PSBhMCAmJiBhMCA8IHJlY2VpdmVyLmxlbmd0aCkgewogICAgICAvLyAgICAgICAgICByZXR1cm4gcmVjZWl2ZXJbYTBdOwogICAgICAvLyAgICAgICAgfQogICAgICAvLyAgICAgIH0KICAgICAgLy8gICAgfQogICAgICAvLwogICAgICAvLyBGb3IgYW4gaW5kZXggc2V0IG9wZXJhdGlvbiwgdGhpcyBjb2RlIGdlbmVyYXRlczoKICAgICAgLy8KICAgICAgLy8gICAgaWYgKHR5cGVvZiBhMCA9PT0gIm51bWJlciIpIHsKICAgICAgLy8gICAgICBpZiAocmVjZWl2ZXIuY29uc3RydWN0b3IgPT0gQXJyYXkgJiYgIXJlY2VpdmVyLmltbXV0YWJsZSRsaXN0KSB7CiAgICAgIC8vICAgICAgICBpZiAoYTAgPj4+IDAgPT09IGEwICYmIGEwIDwgcmVjZWl2ZXIubGVuZ3RoKSB7CiAgICAgIC8vICAgICAgICAgIHJldHVybiByZWNlaXZlclthMF0gPSBhMTsKICAgICAgLy8gICAgICAgIH0KICAgICAgLy8gICAgICB9CiAgICAgIC8vICAgIH0KICAgICAgYm9vbCBjb250YWluc0FycmF5ID0gY2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKTsKICAgICAgYm9vbCBjb250YWluc1N0cmluZyA9IGNsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpOwogICAgICBib29sIGNvbnRhaW5zSnNJbmRleGFibGUgPSBfY2xvc2VkV29ybGQKICAgICAgICAgICAgICAuaXNJbXBsZW1lbnRlZChfY29tbW9uRWxlbWVudHMuanNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlKSAmJgogICAgICAgICAgY2xhc3Nlcy5hbnkoKGNscykgewogICAgICAgICAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgICAgICAgICAuaXNTdWJ0eXBlT2YoY2xzLCBfY29tbW9uRWxlbWVudHMuanNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlKTsKICAgICAgICAgIH0pOwogICAgICAvLyBUaGUgaW5kZXggc2V0IG9wZXJhdG9yIHJlcXVpcmVzIGEgY2hlY2sgb24gaXRzIHNldCB2YWx1ZSBpbgogICAgICAvLyBjaGVja2VkIG1vZGUsIHNvIHdlIGRvbid0IG9wdGltaXplIHRoZSBpbnRlcmNlcHRvciBpZiB0aGUKICAgICAgLy8gX2NvbXBpbGVyIGhhcyB0eXBlIGFzc2VydGlvbnMgZW5hYmxlZC4KICAgICAgaWYgKHNlbGVjdG9yLmlzSW5kZXhTZXQgJiYKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgYW5ub3RhdGlvbnMgb24gdGhlIHBvc3NpYmxlIHRhcmdldHMKICAgICAgICAgIC8vIGFuZCB1c2VkIHRoZWlyIHBhcmFtZXRlciBjaGVjayBwb2xpY3kgaGVyZS4KICAgICAgICAgIChfY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShudWxsKQogICAgICAgICAgICAgICAgICAuaXNFbWl0dGVkIHx8CiAgICAgICAgICAgICAgIWNvbnRhaW5zQXJyYXkpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKCFjb250YWluc0FycmF5ICYmICFjb250YWluc1N0cmluZykgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gYXJyYXlDaGVjayA9IGpzKCdyZWNlaXZlci5jb25zdHJ1Y3RvciA9PSBBcnJheScpOwoKICAgICAgLy8gTGF6eSBnZW5lcmF0aW9uIG9mIHRoZSBpbmRleGFibGUgY2hlY2suIElmIGluZGV4YWJsZSBiZWhhdmlvciBpc24ndAogICAgICAvLyB1c2VkLCB0aGUgaXNKc0luZGV4YWJsZSBmdW5jdGlvbiBpc24ndCBwYXJ0IG9mIHRoZSBjbG9zZWQgd29ybGQuCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gZ2VuZXJpY0luZGV4YWJsZUNoZWNrKCkgPT4KICAgICAgICAgIF9nZW5lcmF0ZUlzSnNJbmRleGFibGVDYWxsKGpzKCdyZWNlaXZlcicpLCBqcygncmVjZWl2ZXInKSk7CgogICAgICBqc0FzdC5FeHByZXNzaW9uIG9yRXhwKGxlZnQsIHJpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGxlZnQgPT0gbnVsbCA/IHJpZ2h0IDoganMoJyMgfHwgIycsIFtsZWZ0LCByaWdodF0pOwogICAgICB9CgogICAgICBpZiAoc2VsZWN0b3IuaXNJbmRleCkgewogICAgICAgIGpzQXN0LkV4cHJlc3Npb24gdHlwZUNoZWNrOwogICAgICAgIGlmIChjb250YWluc0FycmF5KSB7CiAgICAgICAgICB0eXBlQ2hlY2sgPSBhcnJheUNoZWNrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbnRhaW5zU3RyaW5nKSB7CiAgICAgICAgICB0eXBlQ2hlY2sgPSBvckV4cCh0eXBlQ2hlY2ssIGpzKCd0eXBlb2YgcmVjZWl2ZXIgPT0gInN0cmluZyInKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29udGFpbnNKc0luZGV4YWJsZSkgewogICAgICAgICAgdHlwZUNoZWNrID0gb3JFeHAodHlwZUNoZWNrLCBnZW5lcmljSW5kZXhhYmxlQ2hlY2soKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4ganMuc3RhdGVtZW50KCcnJwogICAgICAgICAgaWYgKHR5cGVvZiBhMCA9PT0gIm51bWJlciIpCiAgICAgICAgICAgIGlmICgjKQogICAgICAgICAgICAgIGlmICgoYTAgPj4+IDApID09PSBhMCAmJiBhMCA8IHJlY2VpdmVyLmxlbmd0aCkKICAgICAgICAgICAgICAgIHJldHVybiByZWNlaXZlclthMF07CiAgICAgICAgICAnJycsIHR5cGVDaGVjayk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiB0eXBlQ2hlY2s7CiAgICAgICAgaWYgKGNvbnRhaW5zQXJyYXkpIHsKICAgICAgICAgIHR5cGVDaGVjayA9IGFycmF5Q2hlY2s7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29udGFpbnNKc0luZGV4YWJsZSkgewogICAgICAgICAgdHlwZUNoZWNrID0gb3JFeHAodHlwZUNoZWNrLCBnZW5lcmljSW5kZXhhYmxlQ2hlY2soKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4ganMuc3RhdGVtZW50KHInJycKICAgICAgICAgIGlmICh0eXBlb2YgYTAgPT09ICJudW1iZXIiKQogICAgICAgICAgICBpZiAoIyAmJiAhcmVjZWl2ZXIuaW1tdXRhYmxlJGxpc3QgJiYKICAgICAgICAgICAgICAgIChhMCA+Pj4gMCkgPT09IGEwICYmIGEwIDwgcmVjZWl2ZXIubGVuZ3RoKQogICAgICAgICAgICAgIHJldHVybiByZWNlaXZlclthMF0gPSBhMTsKICAgICAgICAgICcnJywgdHlwZUNoZWNrKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0NhbGwpIHsKICAgICAgaWYgKHNlbGVjdG9yLm5hbWUgPT0gJ2FicycgJiYgc2VsZWN0b3IuYXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgICAgcmV0dXJuIGpzLnN0YXRlbWVudChyJycnCiAgICAgICAgICBpZiAodHlwZW9mIHJlY2VpdmVyID09PSAibnVtYmVyIikgcmV0dXJuIE1hdGguYWJzKHJlY2VpdmVyKTsKICAgICAgICAnJycpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIGlmIChzZWxlY3Rvci5uYW1lID09ICdzaWduJykgewogICAgICAgIHJldHVybiBqcy5zdGF0ZW1lbnQocicnJwogICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciA9PT0gIm51bWJlciIpCiAgICAgICAgICAgICByZXR1cm4gcmVjZWl2ZXIgPiAwID8gMSA6IHJlY2VpdmVyIDwgMCA/IC0xIDogcmVjZWl2ZXI7CiAgICAgICAgJycnKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlT25lU2hvdEludGVyY2VwdG9yKE9uZVNob3RJbnRlcmNlcHRvciBpbnRlcmNlcHRvcikgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBpbnRlcmNlcHRvci5zZWxlY3RvcjsKICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IGludGVyY2VwdG9yLmNsYXNzZXM7CiAgICBqc0FzdC5OYW1lIGdldEludGVyY2VwdG9yTmFtZSA9IF9uYW1lci5uYW1lRm9yR2V0SW50ZXJjZXB0b3IoY2xhc3Nlcyk7CgogICAgTGlzdDxTdHJpbmc+IHBhcmFtZXRlck5hbWVzID0gPFN0cmluZz5bXTsKICAgIHBhcmFtZXRlck5hbWVzLmFkZCgncmVjZWl2ZXInKTsKCiAgICBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgcGFyYW1ldGVyTmFtZXMuYWRkKCd2YWx1ZScpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxlY3Rvci5hcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgICBwYXJhbWV0ZXJOYW1lcy5hZGQoJ2EkaScpOwogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHNlbGVjdG9yLnR5cGVBcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgICBwYXJhbWV0ZXJOYW1lcy5hZGQoJ1wkVCRpJyk7CiAgICAgIH0KICAgIH0KCiAgICBqc0FzdC5OYW1lIGludm9jYXRpb25OYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgIFN0cmluZyBnbG9iYWxPYmplY3QgPQogICAgICAgIF9uYW1lci5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5KF9jb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5KTsKCiAgICBqc0FzdC5TdGF0ZW1lbnQgb3B0aW1pemVkUGF0aCA9CiAgICAgICAgX2Zhc3RQYXRoRm9yT25lU2hvdEludGVyY2VwdG9yKHNlbGVjdG9yLCBjbGFzc2VzKTsKICAgIGlmIChvcHRpbWl6ZWRQYXRoID09IG51bGwpIG9wdGltaXplZFBhdGggPSBqcy5zdGF0ZW1lbnQoJzsnKTsKCiAgICByZXR1cm4ganMoJ2Z1bmN0aW9uKCMpIHsgIzsgcmV0dXJuICMuIyhyZWNlaXZlcikuIygjKSB9JywgWwogICAgICBwYXJhbWV0ZXJOYW1lcywKICAgICAgb3B0aW1pemVkUGF0aCwKICAgICAgZ2xvYmFsT2JqZWN0LAogICAgICBnZXRJbnRlcmNlcHRvck5hbWUsCiAgICAgIGludm9jYXRpb25OYW1lLAogICAgICBwYXJhbWV0ZXJOYW1lcwogICAgXSk7CiAgfQoKICBqc0FzdC5BcnJheUluaXRpYWxpemVyIGdlbmVyYXRlVHlwZVRvSW50ZXJjZXB0b3JNYXAoKSB7CiAgICAvLyBUT0RPKHNyYSk6IFBlcmhhcHMgaW5qZWN0IGEgY29uc3RhbnQgaW5zdGVhZD8KICAgIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIGFuYWx5c2lzID0gX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzOwogICAgaWYgKCFhbmFseXNpcy5uZWVkc1RhYmxlKSByZXR1cm4gbnVsbDsKCiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGVsZW1lbnRzID0gPGpzQXN0LkV4cHJlc3Npb24+W107CiAgICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBjb25zdGFudHMgPQogICAgICAgIF9jb2RlZ2VuV29ybGQuZ2V0Q29uc3RhbnRzRm9yRW1pc3Npb24oX2VtaXR0ZXIuY29tcGFyZUNvbnN0YW50cyk7CiAgICBmb3IgKENvbnN0YW50VmFsdWUgY29uc3RhbnQgaW4gY29uc3RhbnRzKSB7CiAgICAgIGlmIChjb25zdGFudCBpcyBUeXBlQ29uc3RhbnRWYWx1ZSAmJgogICAgICAgICAgY29uc3RhbnQucmVwcmVzZW50ZWRUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBjb25zdGFudC5yZXByZXNlbnRlZFR5cGU7CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gdHlwZS5lbGVtZW50OwogICAgICAgIGlmICghYW5hbHlzaXMubmVlZHNDbGFzcyhjbGFzc0VsZW1lbnQpKSBjb250aW51ZTsKCiAgICAgICAgZWxlbWVudHMuYWRkKF9lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKGNvbnN0YW50KSk7CiAgICAgICAgZWxlbWVudHMuYWRkKF9lbWl0dGVyLmludGVyY2VwdG9yQ2xhc3NBY2Nlc3MoY2xhc3NFbGVtZW50KSk7CgogICAgICAgIC8vIENyZWF0ZSBKYXZhU2NyaXB0IE9iamVjdCBtYXAgZm9yIGJ5LW5hbWUgbG9va3VwIG9mIGdlbmVyYXRpdmUKICAgICAgICAvLyBjb25zdHJ1Y3RvcnMuICBGb3IgZXhhbXBsZSwgdGhlIGNsYXNzIEEgaGFzIHRocmVlIGdlbmVyYXRpdmUKICAgICAgICAvLyBjb25zdHJ1Y3RvcnMKICAgICAgICAvLwogICAgICAgIC8vICAgICBjbGFzcyBBIHsKICAgICAgICAvLyAgICAgICBBKCkge30KICAgICAgICAvLyAgICAgICBBLmZvbygpIHt9CiAgICAgICAgLy8gICAgICAgQS5iYXIoKSB7fQogICAgICAgIC8vICAgICB9CiAgICAgICAgLy8KICAgICAgICAvLyBXaGljaCBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBtYXAKICAgICAgICAvLwogICAgICAgIC8vICAgICB7IiI6IEEuQSQsICJmb28iOiBBLkEkZm9vLCAiYmFyIjogQS5BJGJhcn0KICAgICAgICAvLwogICAgICAgIC8vIFdlIGV4cGVjdCBtb3N0IG9mIHRoZSB0aW1lIHRoZSBtYXAgd2lsbCBiZSBhIHNpbmdsZXRvbi4KICAgICAgICB2YXIgcHJvcGVydGllcyA9IDxqc0FzdC5Qcm9wZXJ0eT5bXTsKICAgICAgICBmb3IgKENvbnN0cnVjdG9yRW50aXR5IG1lbWJlciBpbiBhbmFseXNpcy5jb25zdHJ1Y3RvcnMoY2xhc3NFbGVtZW50KSkgewogICAgICAgICAgcHJvcGVydGllcy5hZGQobmV3IGpzQXN0LlByb3BlcnR5KAogICAgICAgICAgICAgIGpzLnN0cmluZyhtZW1iZXIubmFtZSksIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKG1lbWJlcikpKTsKICAgICAgICB9CgogICAgICAgIHZhciBtYXAgPSBuZXcganNBc3QuT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcyk7CiAgICAgICAgZWxlbWVudHMuYWRkKG1hcCk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogIH0KfQqB0QBOTjwBNwFJASIjJDQhIC41KCkuITEyKgEuASEoGjYWRiQjARwcFSMTKxoaATkBSAExLzQBNzcGAT49PSI4MDo2MjIgODg2Ozk5OTcsDyAIUAYBGxocGRocHBxRAScxODY5GTMYNRoyFzMYNRo1Gg1PMgtIUUxKTQEgSgoIBhUYBiIBRC8kBgE8ARUiAURHRSJHKiwBFCc8Fg5RD0UIEVEGARVMBhNKDUhALk0GE0oGPxoUSwYBFSgtPB8MNh4OQ0ERTgsNTktRQyQNCAE3BgFNBAEpNkgoRQFBR0AiOgFJO084BAFBRBAyNR8jGiEzKzIPCDs+PhUIKUhLFwo7OSoKHUgbFSUSTQ8dIE8mEAg6NgkqMzE/JxIQDgk6CSpPPywSEA5LTS5NHi9QDkVDMCFOOSgxICEVCC8VCEkBTUoyRgEsQwgBHiQdIgoBHksKASNBCgEgJhM9JRsPJB0iCgEjQQoBISYxOygbCCJDIUcOCCQlISxFDggGEQQBUC40SwEuJAEdIw05Iwg+JQgGAUEaTAEkO0IBQBYVFBoWFQgEATo1TSsBPChKMCs3NzE6ATxFAUlIGAsZGBwcEQsqCzoLQy1QLU8KATsbCAYBMQQCAT9wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2ludGVyY2VwdG9yX3N0dWJfZ2VuZXJhdG9yLmRhcnRGc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9tYWluX2NhbGxfc3R1Yl9nZW5lcmF0b3IuZGFydIizLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLm1haW5fY2FsbF9zdHViX2dlbmVyYXRvcjsKCmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9lbWJlZGRlZF9uYW1lcy5kYXJ0JyBhcyBlbWJlZGRlZE5hbWVzOwoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IEVtaXR0ZXI7CgpjbGFzcyBNYWluQ2FsbFN0dWJHZW5lcmF0b3IgewogIHN0YXRpYyBqc0FzdC5TdGF0ZW1lbnQgZ2VuZXJhdGVJbnZva2VNYWluKAogICAgICBFbWl0dGVyIGVtaXR0ZXIsIEZ1bmN0aW9uRW50aXR5IG1haW4pIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gbWFpbkNhbGxDbG9zdXJlID0gZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhtYWluKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gY3VycmVudFNjcmlwdEFjY2VzcyA9CiAgICAgICAgZW1pdHRlci5nZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKGVtYmVkZGVkTmFtZXMuQ1VSUkVOVF9TQ1JJUFQpOwoKICAgIC8vIFRoaXMgY29kZSBmaW5kcyB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBzY3JpcHQgYnkgbGlzdGVuaW5nIHRvIHRoZQogICAgLy8gb25sb2FkIGV2ZW50IG9mIGFsbCBzY3JpcHQgdGFncyBhbmQgZ2V0dGluZyB0aGUgZmlyc3Qgc2NyaXB0IHdoaWNoCiAgICAvLyBmaW5pc2hlcy4gU2luY2Ugb25sb2FkIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBleGVjdXRpb24gdGhpcyBzaG91bGQKICAgIC8vIG5vdCBzdWJzdGFudGlhbGx5IGNoYW5nZSBleGVjdXRpb24gb3JkZXIuCiAgICByZXR1cm4ganMuc3RhdGVtZW50KCcnJwogICAgICAoZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBXaGVuIHJ1bm5pbmcgYXMgYSBjb250ZW50LXNjcmlwdCBvZiBhIGNocm9tZS1leHRlbnNpb24gdGhlCiAgICAgICAgLy8gJ2N1cnJlbnRTY3JpcHQnIGlzIGBudWxsYCAoYnV0IG5vdCB1bmRlZmluZWQpLgogICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuY3VycmVudFNjcmlwdCAhPSAndW5kZWZpbmVkJykgewogICAgICAgICAgY2FsbGJhY2soZG9jdW1lbnQuY3VycmVudFNjcmlwdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LnNjcmlwdHM7CiAgICAgICAgZnVuY3Rpb24gb25Mb2FkKGV2ZW50KSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgc2NyaXB0c1tpXS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIiwgb25Mb2FkLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgICBjYWxsYmFjayhldmVudC50YXJnZXQpOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHNjcmlwdHNbaV0uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIG9uTG9hZCwgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSkoZnVuY3Rpb24oY3VycmVudFNjcmlwdCkgewogICAgICAgICNjdXJyZW50U2NyaXB0ID0gY3VycmVudFNjcmlwdDsKCiAgICAgICAgaWYgKHR5cGVvZiBkYXJ0TWFpblJ1bm5lciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgZGFydE1haW5SdW5uZXIoI21haW5DYWxsQ2xvc3VyZSwgW10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAjbWFpbkNhbGxDbG9zdXJlKFtdKTsKICAgICAgICB9CiAgICAgIH0pJycnLCB7CiAgICAgICdjdXJyZW50U2NyaXB0JzogY3VycmVudFNjcmlwdEFjY2VzcywKICAgICAgJ21haW5DYWxsQ2xvc3VyZSc6IG1haW5DYWxsQ2xvc3VyZQogICAgfSk7CiAgfQp9CkAATk48ATUBSQEkISABLgEeLS5LK0wBSkpQMRwdLxoSCkY6PCwSCgEoITVDDCIKMz4KIygBNDARIAoPLCkIBAIBPXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbWFpbl9jYWxsX3N0dWJfZ2VuZXJhdG9yLmRhcnQ+c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9uYXRpdmVfZ2VuZXJhdG9yLmRhcnShIS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5uYXRpdmVfZ2VuZXJhdG9yOwoKaW1wb3J0ICdwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnQnIGFzIGVtYmVkZGVkTmFtZXM7CgppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnIHNob3cgQmFja2VuZFVzYWdlOwoKaW1wb3J0ICdtb2RlbC5kYXJ0JzsKCmNsYXNzIE5hdGl2ZUdlbmVyYXRvciB7CiAgc3RhdGljIGJvb2wgbmVlZHNJc29sYXRlQWZmaW5pdHlUYWdJbml0aWFsaXphdGlvbihCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlKSB7CiAgICByZXR1cm4gYmFja2VuZFVzYWdlLm5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWc7CiAgfQoKICAvLy8gR2VuZXJhdGVzIHRoZSBjb2RlIGZvciBpc29sYXRlIGFmZmluaXR5IHRhZ3MuCiAgLy8vCiAgLy8vIEluZGVwZW5kZW50bHkgRGFydCBwcm9ncmFtcyBvbiB0aGUgc2FtZSBwYWdlIG11c3Qgbm90IGludGVyZmVyZSBhbmQKICAvLy8gdGhpcyBjb2RlIHNldHMgdXAgdGhlIHZhcmlhYmxlcyBuZWVkZWQgdG8gZ3VhcmFudGVlIHRoYXQgYmVoYXZpb3IuCiAgc3RhdGljIGpzQXN0LlN0YXRlbWVudCBnZW5lcmF0ZUlzb2xhdGVBZmZpbml0eVRhZ0luaXRpYWxpemF0aW9uKAogICAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlLAogICAgICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoU3RyaW5nIGdsb2JhbCksCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJuU3RyaW5nRnVuY3Rpb24pIHsKICAgIGFzc2VydChiYWNrZW5kVXNhZ2UubmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZyk7CgogICAganNBc3QuRXhwcmVzc2lvbiBnZXRJc29sYXRlVGFnQWNjZXNzID0KICAgICAgICBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKGVtYmVkZGVkTmFtZXMuR0VUX0lTT0xBVEVfVEFHKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gaXNvbGF0ZVRhZ0FjY2VzcyA9CiAgICAgICAgZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhlbWJlZGRlZE5hbWVzLklTT0xBVEVfVEFHKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gZGlzcGF0Y2hQcm9wZXJ0eU5hbWVBY2Nlc3MgPQogICAgICAgIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoZW1iZWRkZWROYW1lcy5ESVNQQVRDSF9QUk9QRVJUWV9OQU1FKTsKCiAgICByZXR1cm4ganMuc3RhdGVtZW50KCcnJwogICAgICAhZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGludGVybiA9ICNpbnRlcm5TdHJpbmdGdW5jdGlvbjsKCiAgICAgICAgI2dldElzb2xhdGVUYWcgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICByZXR1cm4gaW50ZXJuKCJfX19kYXJ0XyIgKyBuYW1lICsgI2lzb2xhdGVUYWcpOwogICAgICAgIH07CgogICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IGRpZmZlcmVudCBwcm9ncmFtcyBsb2FkZWQgaW50byB0aGUgc2FtZSBjb250ZXh0IChwYWdlKQogICAgICAgIC8vIHVzZSBkaXN0aW5jdCBkaXNwYXRjaCBwcm9wZXJpZXMsIHdlIHBsYWNlIGFuIG9iamVjdCBvbiBgT2JqZWN0YCB0bwogICAgICAgIC8vIGNvbnRhaW4gdGhlIG5hbWVzIGFscmVhZHkgaW4gdXNlLgogICAgICAgIHZhciB0YWJsZVByb3BlcnR5ID0gIl9fX2RhcnRfaXNvbGF0ZV90YWdzXyI7CiAgICAgICAgdmFyIHVzZWRQcm9wZXJ0aWVzID0gT2JqZWN0W3RhYmxlUHJvcGVydHldIHx8CiAgICAgICAgICAgIChPYmplY3RbdGFibGVQcm9wZXJ0eV0gPSBPYmplY3QuY3JlYXRlKG51bGwpKTsKCiAgICAgICAgdmFyIHJvb3RQcm9wZXJ0eSA9ICJfJHtnZW5lcmF0ZUlzb2xhdGVUYWdSb290KCl9IjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgOyBpKyspIHsKICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGludGVybihyb290UHJvcGVydHkgKyAiXyIgKyBpICsgIl8iKTsKICAgICAgICAgIGlmICghKHByb3BlcnR5IGluIHVzZWRQcm9wZXJ0aWVzKSkgewogICAgICAgICAgICB1c2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSAxOwogICAgICAgICAgICAjaXNvbGF0ZVRhZyA9IHByb3BlcnR5OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCNpbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSkgewogICAgICAgICAgI2Rpc3BhdGNoUHJvcGVydHlOYW1lID0gI2dldElzb2xhdGVUYWcoImRpc3BhdGNoX3JlY29yZCIpOwogICAgICAgIH0KICAgICAgfSgpOwogICAgJycnLCB7CiAgICAgICdpbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSc6CiAgICAgICAgICBiYWNrZW5kVXNhZ2UubmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCiAgICAgICdpbnRlcm5TdHJpbmdGdW5jdGlvbic6IGludGVyblN0cmluZ0Z1bmN0aW9uLAogICAgICAnZ2V0SXNvbGF0ZVRhZyc6IGdldElzb2xhdGVUYWdBY2Nlc3MsCiAgICAgICdpc29sYXRlVGFnJzogaXNvbGF0ZVRhZ0FjY2VzcywKICAgICAgJ2Rpc3BhdGNoUHJvcGVydHlOYW1lJzogZGlzcGF0Y2hQcm9wZXJ0eU5hbWVBY2Nlc3MKICAgIH0pOwogIH0KCiAgc3RhdGljIFN0cmluZyBnZW5lcmF0ZUlzb2xhdGVUYWdSb290KCkgewogICAgLy8gVE9ETyhzcmEpOiBNRDUgb2YgY29udHJpYnV0aW5nIHNvdXJjZSBjb2RlIG9yIFVSSXM/CiAgICByZXR1cm4gJ1p4WXhYJzsKICB9CgogIC8vLyBFbmNvZGVzIHRoZSBjb2xsZWN0ZWQgbmF0aXZlIGluZm9ybWF0aW9uIHNvIHRoYXQgaXQgY2FuIGJlIHRyZWF0ZWQgYnkKICAvLy8gdGhlIG5hdGl2ZSBpbmZvLWhhbmRsZXIgYmVsb3cuCiAgLy8vCiAgLy8vIFRoZSBlbmNvZGVkIGluZm9ybWF0aW9uIGhhcyB0aGUgZm9ybToKICAvLy8KICAvLyAgICAiJSI6ICJsZWFmVGFnMXxsZWFmVGFnMnwuLi47bm9ubGVhZlRhZzF8Li4uO0NsYXNzMXxDbGFzczJ8Li4uIiwKICAvLwogIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgZm9sbG93aW5nIGEgc2VtaWNvbG9uLCB0aGUgc2VtaWNvbG9uIGNhbiBiZSBvbWl0dGVkLgogIHN0YXRpYyBqc0FzdC5FeHByZXNzaW9uIGVuY29kZU5hdGl2ZUluZm8oQ2xhc3MgY2xzKSB7CiAgICBMaXN0PFN0cmluZz4gbGVhZlRhZ3MgPSBjbHMubmF0aXZlTGVhZlRhZ3M7CiAgICBMaXN0PFN0cmluZz4gbm9uTGVhZlRhZ3MgPSBjbHMubmF0aXZlTm9uTGVhZlRhZ3M7CiAgICBMaXN0PENsYXNzPiBleHRlbnNpb25zID0gY2xzLm5hdGl2ZUV4dGVuc2lvbnM7CgogICAgU3RyaW5nIGZvcm1hdFRhZ3MoSXRlcmFibGU8U3RyaW5nPiB0YWdzKSB7CiAgICAgIGlmICh0YWdzID09IG51bGwpIHJldHVybiAnJzsKICAgICAgcmV0dXJuICh0YWdzLnRvTGlzdCgpLi5zb3J0KCkpLmpvaW4oJ3wnKTsKICAgIH0KCiAgICBTdHJpbmcgbGVhZlN0ciA9IGZvcm1hdFRhZ3MobGVhZlRhZ3MpOwogICAgU3RyaW5nIG5vbkxlYWZTdHIgPSBmb3JtYXRUYWdzKG5vbkxlYWZUYWdzKTsKCiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGxlYWZTdHIpOwogICAgaWYgKG5vbkxlYWZTdHIgIT0gJycpIHsKICAgICAgc2IuLndyaXRlKCc7JykuLndyaXRlKG5vbkxlYWZTdHIpOwogICAgfQoKICAgIFN0cmluZyBlbmNvZGluZyA9IHNiLnRvU3RyaW5nKCk7CgogICAgaWYgKGNscy5pc05hdGl2ZSB8fCBlbmNvZGluZyAhPSAnJyB8fCBleHRlbnNpb25zICE9IG51bGwpIHsKICAgICAgTGlzdDxqc0FzdC5MaXRlcmFsPiBwYXJ0cyA9IDxqc0FzdC5MaXRlcmFsPltqcy5zdHJpbmdQYXJ0KGVuY29kaW5nKV07CiAgICAgIGlmIChleHRlbnNpb25zICE9IG51bGwpIHsKICAgICAgICBwYXJ0cwogICAgICAgICAgLi5hZGQoanMuc3RyaW5nUGFydCgnOycpKQogICAgICAgICAgLi5hZGRBbGwoanMuam9pbkxpdGVyYWxzKAogICAgICAgICAgICAgIGV4dGVuc2lvbnMubWFwKChDbGFzcyBjbHMpID0+IGNscy5uYW1lKSwganMuc3RyaW5nUGFydCgnfCcpKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGpzQXN0LmNvbmNhdGVuYXRlU3RyaW5ncyhwYXJ0cywgYWRkUXVvdGVzOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgYSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRoYXQgZmlsbHMgdGhlIGVtYmVkZGVkIGdsb2JhbHMgcmVmZXJlbmNlZAogIC8vLyBieSBbaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3NdIGFuZCBbbGVhZlRhZ3NBY2Nlc3NdLgogIC8vLwogIC8vLyBUaGlzIGNvZGUgbXVzdCBiZSBpbnZva2VkIGZvciBldmVyeSBjbGFzcyB0aGF0IGhhcyBhIG5hdGl2ZSBpbmZvIGJlZm9yZQogIC8vLyB0aGUgcHJvZ3JhbSBzdGFydHMuCiAgLy8vCiAgLy8vIFRoZSBbaW5mb0FjY2Vzc10gcGFyYW1ldGVyIG11c3QgZXZhbHVhdGUgdG8gYW4gZXhwcmVzc2lvbiB0aGF0IGNvbnRhaW5zCiAgLy8vIHRoZSBpbmZvIChhcyBhIEphdmFTY3JpcHQgc3RyaW5nKS4KICAvLy8KICAvLy8gVGhlIFtjb25zdHJ1Y3RvckFjY2Vzc10gcGFyYW1ldGVyIG11c3QgZXZhbHVhdGUgdG8gYW4gZXhwcmVzc2lvbiB0aGF0CiAgLy8vIGNvbnRhaW5zIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MuIFRoZSBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSBtdXN0CiAgLy8vIGJlIHNldCB1cC4KICAvLy8KICAvLy8gVGhlIFtzdWJjbGFzc1JlYWRHZW5lcmF0b3JdIGZ1bmN0aW9uIG11c3QgZXZhbHVhdGUgdG8gYSBKUyBleHByZXNzaW9uCiAgLy8vIHRoYXQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29uc3RydWN0b3IgKHdpdGggZXZhbHVhdGVkIHByb3RvdHlwZSkKICAvLy8gb2YgdGhlIGdpdmVuIEpTIGV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIFRoZSBbaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3NdIG11c3QgcG9pbnQgdG8gdGhlIGVtYmVkZGVkIGdsb2JhbAogIC8vLyBbZW1iZWRkZWROYW1lcy5JTlRFUkNFUFRPUlNfQllfVEFHXSBhbmQgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5CiAgLy8vIEpTIE9iamVjdCAodXNlZCBhcyBhIG1hcCkuCiAgLy8vCiAgLy8vIFNpbWlsYXJseSwgdGhlIFtsZWFmVGFnc0FjY2Vzc10gbXVzdCBwb2ludCB0byB0aGUgZW1iZWRkZWQgZ2xvYmFsCiAgLy8vIFtlbWJlZGRlZE5hbWVzLkxFQUZfVEFHU10gYW5kIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSBKUyBPYmplY3QKICAvLy8gKHVzZWQgYXMgYSBtYXApLgogIC8vLwogIC8vLyBCb3RoIHZhcmlhYmxlcyBhcmUgcGFzc2VkIGluIChpbnN0ZWFkIG9mIGNyZWF0aW5nIHRoZSBhY2Nlc3MgaGVyZSkgdG8KICAvLy8gbWFrZSBzdXJlIHRoZSBjYWxsZXIgaXMgYXdhcmUgb2YgdGhlc2UgZ2xvYmFscy4KICBzdGF0aWMganNBc3QuU3RhdGVtZW50IGJ1aWxkTmF0aXZlSW5mb0hhbmRsZXIoCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gaW5mb0FjY2VzcywKICAgICAganNBc3QuRXhwcmVzc2lvbiBjb25zdHJ1Y3RvckFjY2VzcywKICAgICAganNBc3QuRXhwcmVzc2lvbiBzdWJjbGFzc1JlYWRHZW5lcmF0b3IoanNBc3QuRXhwcmVzc2lvbiBzdWJjbGFzcyksCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3MsCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gbGVhZlRhZ3NBY2Nlc3MpIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gc3ViY2xhc3NSZWFkID0KICAgICAgICBzdWJjbGFzc1JlYWRHZW5lcmF0b3IoanMoJ3N1YmNsYXNzZXNbaV0nLCBbXSkpOwogICAgcmV0dXJuIGpzLnN0YXRlbWVudCgnJycKICAgICAgICAgIC8vIFRoZSBuYXRpdmUgaW5mbyBsb29rcyBsaWtlIHRoaXM6CiAgICAgICAgICAvLwogICAgICAgICAgLy8gSHRtbEVsZW1lbnQ6IHsKICAgICAgICAgIC8vICAgICAiJSI6ICJIVE1MRGl2RWxlbWVudHxIVE1MQW5jaG9yRWxlbWVudDtIVE1MRWxlbWVudDtGYW5jeUJ1dHRvbiIKICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgZmlyc3QgdHdvIHNlbWljb2xvbi1zZXBhcmF0ZWQgcGFydHMgY29udGFpbiBkaXNwYXRjaCB0YWdzLCB0aGUKICAgICAgICAgIC8vIHRoaXJkIGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IG5hbWVzIGZvciBjbGFzc2VzLgogICAgICAgICAgLy8KICAgICAgICAgIC8vIFRoZSB0YWdzIGluZGljYXRlIHRoYXQgSmF2YVNjcmlwdCBvYmplY3RzIHdpdGggdGhlIGRpc3BhdGNoIHRhZ3MKICAgICAgICAgIC8vICh1c3VhbGx5IGNvbnN0cnVjdG9yIG5hbWVzKSBIVE1MRGl2RWxlbWVudCwgSFRNTEFuY2hvckVsZW1lbnQgYW5kCiAgICAgICAgICAvLyBIVE1MRWxlbWVudCBhbGwgbWFwIHRvIHRoZSBEYXJ0IG5hdGl2ZSBjbGFzcyBuYW1lZCBIdG1sRWxlbWVudC4KICAgICAgICAgIC8vIFRoZSBmaXJzdCBzZXQgaXMgZm9yIGVmZmVjdGl2ZSBsZWFmIG5vZGVzIGluIHRoZSBoaWVyYXJjaHksIHRoZQogICAgICAgICAgLy8gc2Vjb25kIHNldCBpcyBub24tbGVhZiBub2Rlcy4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgdGhpcmQgcGFydCBjb250YWlucyB0aGUgSmF2YVNjcmlwdCBuYW1lcyBvZiBEYXJ0IGNsYXNzZXMgdGhhdAogICAgICAgICAgLy8gZXh0ZW5kIHRoZSBuYXRpdmUgY2xhc3MuIEhlcmUsIEZhbmN5QnV0dG9uIGV4dGVuZHMgSHRtbEVsZW1lbnQsIHNvCiAgICAgICAgICAvLyB0aGUgcnVudGltZSBuZWVkcyB0byBrbm93IHRoYXQgd2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSBpcyB0aGUKICAgICAgICAgIC8vIHByb3RvdHlwZSB0aGF0IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGluIGNyZWF0aW5nIHRoZSBjdXN0b20gZWxlbWVudC4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBidWlsZCB0YWJsZXMgcmVmZXJlbmNlZCBieQogICAgICAgICAgLy8gZ2V0TmF0aXZlSW50ZXJjZXB0b3IgYW5kIGN1c3RvbSBlbGVtZW50IHN1cHBvcnQuCiAgICAgICAgICB7CiAgICAgICAgICAgIHZhciBuYXRpdmVTcGVjID0gI2luZm8uc3BsaXQoIjsiKTsKICAgICAgICAgICAgaWYgKG5hdGl2ZVNwZWNbMF0pIHsKICAgICAgICAgICAgICB2YXIgdGFncyA9IG5hdGl2ZVNwZWNbMF0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICNpbnRlcmNlcHRvcnNCeVRhZ0FjY2Vzc1t0YWdzW2ldXSA9ICNjb25zdHJ1Y3RvcjsKICAgICAgICAgICAgICAgICNsZWFmVGFnc0FjY2Vzc1t0YWdzW2ldXSA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuYXRpdmVTcGVjWzFdKSB7CiAgICAgICAgICAgICAgdGFncyA9IG5hdGl2ZVNwZWNbMV0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICBpZiAoI2FsbG93TmF0aXZlc1N1YmNsYXNzaW5nKSB7CiAgICAgICAgICAgICAgICBpZiAobmF0aXZlU3BlY1syXSkgewogICAgICAgICAgICAgICAgICB2YXIgc3ViY2xhc3NlcyA9IG5hdGl2ZVNwZWNbMl0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YmNsYXNzID0gI3N1YmNsYXNzUmVhZDsKICAgICAgICAgICAgICAgICAgICBzdWJjbGFzcy4jbmF0aXZlU3VwZXJjbGFzc1RhZ05hbWUgPSB0YWdzWzBdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAjaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3NbdGFnc1tpXV0gPSAjY29uc3RydWN0b3I7CiAgICAgICAgICAgICAgICAgICNsZWFmVGFnc0FjY2Vzc1t0YWdzW2ldXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgJycnLCB7CiAgICAgICdpbmZvJzogaW5mb0FjY2VzcywKICAgICAgJ2NvbnN0cnVjdG9yJzogY29uc3RydWN0b3JBY2Nlc3MsCiAgICAgICdzdWJjbGFzc1JlYWQnOiBzdWJjbGFzc1JlYWQsCiAgICAgICdpbnRlcmNlcHRvcnNCeVRhZ0FjY2Vzcyc6IGludGVyY2VwdG9yc0J5VGFnQWNjZXNzLAogICAgICAnbGVhZlRhZ3NBY2Nlc3MnOiBsZWFmVGFnc0FjY2VzcywKICAgICAgJ25hdGl2ZVN1cGVyY2xhc3NUYWdOYW1lJzogZW1iZWRkZWROYW1lcy5OQVRJVkVfU1VQRVJDTEFTU19UQUdfTkFNRSwKICAgICAgJ2FsbG93TmF0aXZlc1N1YmNsYXNzaW5nJzogdHJ1ZQogICAgfSk7CiAgfQp9CoDYAE5OPAEtAUkBISA9ARUBGFE8BAE0BkpJQyFELz0BK0UoQTJMARwULAEqOgsBUU4tNTY7ATshPy8qJBMMCitFCgsLJDk0LCY5CAQBKzsUBAFMJQYsBkgFTjgwNjMBLyMwBgErMQExHCkGASUBQEwgDiQkTQg/BhEEAU85Bk4aBk4pBkxOEQZMTSIGRlAhBkhQFwZMNjEjKkkwKSQ4HC4NHFENUD4NTk9NTSsNT1BQUQ1DPgwvITM2QjEQDiEvLiU9QDJBFBI0RDQSEA4MCxooJDooSyYIBAIBNXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbmF0aXZlX2dlbmVyYXRvci5kYXJ0RnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvcGFyYW1ldGVyX3N0dWJfZ2VuZXJhdG9yLmRhcnTAAEOALy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnBhcmFtZXRlcl9zdHViX2dlbmVyYXRvcjsKCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBOYW1lcjsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX25ldy5kYXJ0JyBzaG93IFJlY2lwZUVuY29kZXI7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCcgc2hvdyBTZWxlY3RvckNvbnN0cmFpbnRzOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKaW1wb3J0ICdtb2RlbC5kYXJ0JzsKCmltcG9ydCAnY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBFbWl0dGVyOwppbXBvcnQgJ25hdGl2ZV9lbWl0dGVyLmRhcnQnOwoKY2xhc3MgUGFyYW1ldGVyU3R1YkdlbmVyYXRvciB7CiAgc3RhdGljIGZpbmFsIFNldDxTZWxlY3Rvcj4gZW1wdHlTZWxlY3RvclNldCA9IG5ldyBTZXQ8U2VsZWN0b3I+KCk7CgogIGZpbmFsIEVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgTmF0aXZlRW1pdHRlciBfbmF0aXZlRW1pdHRlcjsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgUnVudGltZVR5cGVzRW5jb2RlciBfcnRpRW5jb2RlcjsKICBmaW5hbCBSZWNpcGVFbmNvZGVyIF9ydGlSZWNpcGVFbmNvZGVyOyAvLyBgbnVsbGAgaWYgbm90IGV4cGVyaW1lbnROZXdSdGkuCiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgX2ludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBDb2RlZ2VuV29ybGQgX2NvZGVnZW5Xb3JsZDsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CgogIFBhcmFtZXRlclN0dWJHZW5lcmF0b3IoCiAgICAgIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX25hdGl2ZUVtaXR0ZXIsCiAgICAgIHRoaXMuX25hbWVyLAogICAgICB0aGlzLl9ydGlFbmNvZGVyLAogICAgICB0aGlzLl9ydGlSZWNpcGVFbmNvZGVyLAogICAgICB0aGlzLl9uYXRpdmVEYXRhLAogICAgICB0aGlzLl9pbnRlcmNlcHRvckRhdGEsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpOwoKICBKRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+CiAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CgogIGJvb2wgbmVlZHNTdXBlckdldHRlcihGdW5jdGlvbkVudGl0eSBlbGVtZW50KSA9PgogICAgICBfY29kZWdlbldvcmxkLm1ldGhvZHNOZWVkc1N1cGVyR2V0dGVyKGVsZW1lbnQpOwoKICAvLy8gR2VuZXJhdGVzIHN0dWJzIHRvIGZpbGwgaW4gbWlzc2luZyBvcHRpb25hbCBuYW1lZCBvciBwb3NpdGlvbmFsIGFyZ3VtZW50cwogIC8vLyBhbmQgbWlzc2luZyB0eXBlIGFyZ3VtZW50cy4gIFJldHVybnMgYG51bGxgIGlmIG5vIHN0dWIgaXMgbmVlZGVkLgogIC8vLwogIC8vLyBNZXRob2RzIGxpa2UgYGZvbyhbeF0pYCBhbmQgYGJhcih7eH0pYCBtYXkgYmUgaW52b2tlZCBieSB0aGUgZm9sbG93aW5nCiAgLy8vIGNhbGxzOiBgZm9vKCksIGZvbygxKSwgYmFyKCksIGJhcih4OiAxKWAuIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgc3R1YgogIC8vLyBmb3IgdGhlIGdpdmVuIFtzZWxlY3Rvcl0gYW5kIHJldHVybnMgdGhlIGdlbmVyYXRlZCBbUGFyYW1ldGVyU3R1Yk1ldGhvZF0uCiAgLy8vCiAgLy8vIE1lbWJlcnMgbWF5IGJlIGludm9rZWQgaW4gdHdvIHdheXM6IGRpcmVjdGx5LCBvciB0aHJvdWdoIGEgY2xvc3VyZS4gSW4gdGhlCiAgLy8vIGxhdHRlciBjYXNlIHRoZSBjYWxsZXIgaW52b2tlcyB0aGUgdGVhci1vZmYgY2xvc3VyZSdzIGBjYWxsYCBtZXRob2QuIFRoaXMKICAvLy8gbWV0aG9kIFtnZW5lcmF0ZVBhcmFtZXRlclN0dWJdIGFjY2VwdHMgdHdvIHNlbGVjdG9ycy4gVGhlIHJldHVybmVkIHN0dWIKICAvLy8gbWV0aG9kIGhhcyB0aGUgY29ycmVzcG9uZGluZyBuYW1lIFtQYXJhbWV0ZXJTdHViTWV0aG9kLm5hbWVdIGFuZAogIC8vLyBbUGFyYW1ldGVyU3R1Yk1ldGhvZC5jYWxsTmFtZV0gc2V0IGlmIHRoZSBpbnB1dCBzZWxlY3RvciBpcyBub24tbnVsbCAoYW5kCiAgLy8vIHRoZSBtZW1iZXIgbmVlZHMgYSBzdHViKS4KICBQYXJhbWV0ZXJTdHViTWV0aG9kIGdlbmVyYXRlUGFyYW1ldGVyU3R1YigKICAgICAgRnVuY3Rpb25FbnRpdHkgbWVtYmVyLCBTZWxlY3RvciBzZWxlY3RvciwgU2VsZWN0b3IgY2FsbFNlbGVjdG9yKSB7CiAgICAvLyBUaGUgbmFtaW5nIGhlcmUgY2FuIGJlIGEgYml0IGNvbmZ1c2luZy4gVGhlcmUgaXMgYSBjYWxsIHNpdGUgc29tZXdoZXJlCiAgICAvLyB0aGF0IGNhbGxzIHRoZSBzdHViIHZpYSB0aGUgW3NlbGVjdG9yXSwgd2hpY2ggaGFzIGEgW0NhbGxTdHJ1Y3R1cmVdLCBzbwogICAgLy8gdGhlICpDYWxsKlN0cnVjdHVyZSBkZXRlcm1pbmVzIHRoZSAqcGFyYW1ldGVycyogb2YgdGhlIHN0dWIuIFRoZSBib2R5IG9mCiAgICAvLyB0aGUgc3R1YiBjYWxscyB0aGUgbWVtYmVyIHdoaWNoIGhhcyBhIFtQYXJhbWV0ZXJTdHJ1Y3R1cmVdLCBzbyB0aGUKICAgIC8vICpQYXJhbWV0ZXIqU3RydWN0dXJlIGRldGVybWluZXMgdGhlICphcmd1bWVudHMqIG9mIHRoZSBmb3J3YXJkaW5nIGNhbGwuCgogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gc2VsZWN0b3IuY2FsbFN0cnVjdHVyZTsKICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPSBtZW1iZXIucGFyYW1ldGVyU3RydWN0dXJlOwogICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID0gY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRDb3VudDsKICAgIGFzc2VydChjYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09IDAgfHwKICAgICAgICBjYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09IHBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyk7CgogICAgLy8gV2UgZG9uJ3QgbmVlZCBhIHN0dWIgaWYgdGhlIGFyZ3VtZW50cyBtYXRjaCB0aGUgdGFyZ2V0IHBhcmFtZXRlcnMsCiAgICAvLyBpLmUuIHRoZXJlIGFyZSBubyBtaXNzaW5nIG9wdGlvbmFsIGFyZ3VtZW50cyBvciB0eXBlcy4gVGhlIHNlbGVjdG9yCiAgICAvLyBhcHBsaWVzIHRvIHRoZSBtZW1iZXIsIHNvIHdlIGNhbiBjaGVjayB1c2luZyBjb3VudHMuCiAgICBpZiAoY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSBwYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgaWYgKHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID09IHBhcmFtZXRlclN0cnVjdHVyZS50b3RhbFBhcmFtZXRlcnMpIHsKICAgICAgICAvLyBQb3NpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgYWxsIHByb3ZpZGVkLgogICAgICAgIGFzc2VydChjYWxsU3RydWN0dXJlLmlzVW5uYW1lZCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKHBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSAmJgogICAgICAgICAgY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50Q291bnQgPT0KICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgIC8vIE5hbWVkIG9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgYWxsIHByb3ZpZGVkLgogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CgogICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gY2FsbFN0cnVjdHVyZS5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKTsKCiAgICBib29sIGlzSW50ZXJjZXB0ZWRNZXRob2QgPSBfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRNZXRob2QobWVtYmVyKTsKCiAgICAvLyBJZiB0aGUgbWV0aG9kIGlzIGludGVyY2VwdGVkLCB3ZSBuZWVkIHRvIGFsc28gcGFzcyB0aGUgYWN0dWFsIHJlY2VpdmVyLgogICAgaW50IGV4dHJhQXJndW1lbnRDb3VudCA9IGlzSW50ZXJjZXB0ZWRNZXRob2QgPyAxIDogMDsKICAgIC8vIFVzZSAnJHJlY2VpdmVyJyB0byBhdm9pZCBjbGFzaGVzIHdpdGggb3RoZXIgcGFyYW1ldGVyIG5hbWVzLiBVc2luZwogICAgLy8gJyRyZWNlaXZlcicgd29ya3MgYmVjYXVzZSBuYW1lci5zYWZlVmFyaWFibGVOYW1lIHVzZWQgZm9yIGdldHRpbmcKICAgIC8vIHBhcmFtZXRlciBuYW1lcyBuZXZlciByZXR1cm5zIGEgbmFtZSBiZWdpbm5pbmcgd2l0aCBhIHNpbmdsZSAnJCcuCiAgICBTdHJpbmcgcmVjZWl2ZXJBcmd1bWVudE5hbWUgPSByJyRyZWNlaXZlcic7CgogICAgLy8gVGhlIHBhcmFtZXRlcnMgdGhhdCB0aGlzIHN0dWIgdGFrZXMuCiAgICBMaXN0PGpzQXN0LlBhcmFtZXRlcj4gc3R1YlBhcmFtZXRlcnMgPSBuZXcgTGlzdDxqc0FzdC5QYXJhbWV0ZXI+KAogICAgICAgIGV4dHJhQXJndW1lbnRDb3VudCArCiAgICAgICAgICAgIHNlbGVjdG9yLmFyZ3VtZW50Q291bnQgKwogICAgICAgICAgICBzZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudCk7CiAgICAvLyBUaGUgYXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHJlYWwgbWV0aG9kLgogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiB0YXJnZXRBcmd1bWVudHMgPSBuZXcgTGlzdDxqc0FzdC5FeHByZXNzaW9uPigKICAgICAgICBleHRyYUFyZ3VtZW50Q291bnQgKwogICAgICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmUudG90YWxQYXJhbWV0ZXJzICsKICAgICAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzKTsKCiAgICBpbnQgY291bnQgPSAwOwogICAgaWYgKGlzSW50ZXJjZXB0ZWRNZXRob2QpIHsKICAgICAgY291bnQrKzsKICAgICAgc3R1YlBhcmFtZXRlcnNbMF0gPSBuZXcganNBc3QuUGFyYW1ldGVyKHJlY2VpdmVyQXJndW1lbnROYW1lKTsKICAgICAgdGFyZ2V0QXJndW1lbnRzWzBdID0ganMoJyMnLCByZWNlaXZlckFyZ3VtZW50TmFtZSk7CiAgICB9CgogICAgaW50IG9wdGlvbmFsUGFyYW1ldGVyU3RhcnQgPSBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCArIGV4dHJhQXJndW1lbnRDb3VudDsKICAgIC8vIEluY2x1ZGVzIGV4dHJhIHJlY2VpdmVyIGFyZ3VtZW50IHdoZW4gdXNpbmcgaW50ZXJjZXB0b3IgY29udmVudGlvbgogICAgaW50IGluZGV4T2ZMYXN0T3B0aW9uYWxBcmd1bWVudEluUGFyYW1ldGVycyA9IG9wdGlvbmFsUGFyYW1ldGVyU3RhcnQgLSAxOwoKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFBhcmFtZXRlcihtZW1iZXIsCiAgICAgICAgKF8sIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICAgIFN0cmluZyBqc05hbWUgPSBfbmFtZXIuc2FmZVZhcmlhYmxlTmFtZShuYW1lKTsKICAgICAgYXNzZXJ0KGpzTmFtZSAhPSByZWNlaXZlckFyZ3VtZW50TmFtZSk7CiAgICAgIGlmIChjb3VudCA8IG9wdGlvbmFsUGFyYW1ldGVyU3RhcnQpIHsKICAgICAgICBzdHViUGFyYW1ldGVyc1tjb3VudF0gPSBuZXcganNBc3QuUGFyYW1ldGVyKGpzTmFtZSk7CiAgICAgICAgdGFyZ2V0QXJndW1lbnRzW2NvdW50XSA9IGpzKCcjJywganNOYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnQgaW5kZXggPSBuYW1lcy5pbmRleE9mKG5hbWUpOwogICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgaW5kZXhPZkxhc3RPcHRpb25hbEFyZ3VtZW50SW5QYXJhbWV0ZXJzID0gY291bnQ7CiAgICAgICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIG5hbWVkIGFyZ3VtZW50cyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlCiAgICAgICAgICAvLyBvbmUgaW4gdGhlIHJlYWwgbWV0aG9kICh3aGljaCBpcyBpbiBEYXJ0IHNvdXJjZSBvcmRlcikuCiAgICAgICAgICB0YXJnZXRBcmd1bWVudHNbY291bnRdID0ganMoJyMnLCBqc05hbWUpOwogICAgICAgICAgc3R1YlBhcmFtZXRlcnNbb3B0aW9uYWxQYXJhbWV0ZXJTdGFydCArIGluZGV4XSA9CiAgICAgICAgICAgICAgbmV3IGpzQXN0LlBhcmFtZXRlcihqc05hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgICB0YXJnZXRBcmd1bWVudHNbY291bnRdID0KICAgICAgICAgICAgICAgIF9lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKG5ldyBOdWxsQ29uc3RhbnRWYWx1ZSgpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKSB7CiAgICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIHRoZSBudWxsIGNvbnN0YW50LCB3ZSBzaG91bGQgbm90IHBhc3MgaXQKICAgICAgICAgICAgICAvLyBkb3duIHRvIHRoZSBuYXRpdmUgbWV0aG9kLgogICAgICAgICAgICAgIGluZGV4T2ZMYXN0T3B0aW9uYWxBcmd1bWVudEluUGFyYW1ldGVycyA9IGNvdW50OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhcmdldEFyZ3VtZW50c1tjb3VudF0gPSBfZW1pdHRlci5jb25zdGFudFJlZmVyZW5jZSh2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvdW50Kys7CiAgICB9KTsKCiAgICBpZiAocGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzID4gMCkgewogICAgICBpbnQgcGFyYW1ldGVySW5kZXggPQogICAgICAgICAgc3R1YlBhcmFtZXRlcnMubGVuZ3RoIC0gcGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzOwogICAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlCiAgICAgICAgICBpbiBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZW1iZXIpKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLnR5cGVBcmd1bWVudENvdW50ID09IDApIHsKICAgICAgICAgIERhcnRUeXBlIGRlZmF1bHRUeXBlID0gX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgICAgIC5nZXRUeXBlVmFyaWFibGVEZWZhdWx0VHlwZSh0eXBlVmFyaWFibGUuZWxlbWVudCk7CiAgICAgICAgICBpZiAoX3J0aVJlY2lwZUVuY29kZXIgIT0gbnVsbCkgewogICAgICAgICAgICBqc0FzdC5FeHByZXNzaW9uIHR5cGVSdGkgPSBfcnRpUmVjaXBlRW5jb2Rlci5ldmFsdWF0ZVJlY2lwZSgKICAgICAgICAgICAgICAgIF9lbWl0dGVyLAogICAgICAgICAgICAgICAgX3J0aVJlY2lwZUVuY29kZXIuZW5jb2RlUmVjaXBlV2l0aFZhcmlhYmxlc1JlcGxhY2VCeUFueSgKICAgICAgICAgICAgICAgICAgICBfZW1pdHRlciwgZGVmYXVsdFR5cGUpKTsKICAgICAgICAgICAgdGFyZ2V0QXJndW1lbnRzW2NvdW50KytdID0gdHlwZVJ0aTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRhcmdldEFyZ3VtZW50c1tjb3VudCsrXSA9IF9ydGlFbmNvZGVyLmdldFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgICAgICAgICAgIF9lbWl0dGVyLCBkZWZhdWx0VHlwZSwgKF8pID0+IF9lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKAogICAgICAgICAgICAgICAgICAgIC8vIFRPRE8oMzM0MjIpOiBTdXBwb3J0IHR5cGUgdmFyaWFibGVzIGluIGRlZmF1bHQKICAgICAgICAgICAgICAgICAgICAvLyB0eXBlcy4gVGVtcG9yYXJpbHkgdXNpbmcgdGhlICJhbnkiIHR5cGUgKGVuY29kZWQgYXMgLTIpIHRvCiAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgZmFpbGluZyBvbiBib3VuZHMgY2hlY2tzLgogICAgICAgICAgICAgICAgICAgIG5ldyBJbnRDb25zdGFudFZhbHVlKG5ldyBCaWdJbnQuZnJvbSgtMikpKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFN0cmluZyBqc05hbWUgPSAnXCQke3R5cGVWYXJpYWJsZS5lbGVtZW50Lm5hbWV9JzsKICAgICAgICAgIHN0dWJQYXJhbWV0ZXJzW3BhcmFtZXRlckluZGV4KytdID0gbmV3IGpzQXN0LlBhcmFtZXRlcihqc05hbWUpOwogICAgICAgICAgdGFyZ2V0QXJndW1lbnRzW2NvdW50KytdID0ganMoJyMnLCBqc05hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZhciBib2R5OyAvLyBMaXN0IG9yIGpzQXN0LlN0YXRlbWVudC4KICAgIGlmIChfbmF0aXZlRGF0YS5oYXNGaXhlZEJhY2tlbmROYW1lKG1lbWJlcikpIHsKICAgICAgYm9keSA9IF9uYXRpdmVFbWl0dGVyLmdlbmVyYXRlUGFyYW1ldGVyU3R1YlN0YXRlbWVudHMoCiAgICAgICAgICBtZW1iZXIsCiAgICAgICAgICBpc0ludGVyY2VwdGVkTWV0aG9kLAogICAgICAgICAgX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKSwKICAgICAgICAgIHN0dWJQYXJhbWV0ZXJzLAogICAgICAgICAgdGFyZ2V0QXJndW1lbnRzLAogICAgICAgICAgaW5kZXhPZkxhc3RPcHRpb25hbEFyZ3VtZW50SW5QYXJhbWV0ZXJzKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgaWYgKG5lZWRzU3VwZXJHZXR0ZXIobWVtYmVyKSkgewogICAgICAgIENsYXNzRW50aXR5IHN1cGVyQ2xhc3MgPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAganNBc3QuTmFtZSBtZXRob2ROYW1lID0gX25hbWVyLmluc3RhbmNlTWV0aG9kTmFtZShtZW1iZXIpOwogICAgICAgIC8vIFdoZW4gcmVkaXJlY3RpbmcsIHdlIG11c3QgZW5zdXJlIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIGluIGEgc3ViY2xhc3MuCiAgICAgICAgLy8gV2UgdGh1cyBjYW4ndCBqdXN0IGludm9rZSBgdGhpcy5mb28kMS5jYWxsKGZpbGxlZEluQXJndW1lbnRzKWAuCiAgICAgICAgLy8gSW5zdGVhZCB3ZSBuZWVkIHRvIGNhbGwgdGhlIHN0YXRpY2FsbHkgcmVzb2x2ZWQgdGFyZ2V0LgogICAgICAgIC8vICAgYDxjbGFzcz4ucHJvdG90eXBlLmJhciQxLmNhbGwodGhpcywgYXJndW1lbnQwLCAuLi4pYC4KICAgICAgICBib2R5ID0ganMuc3RhdGVtZW50KCdyZXR1cm4gIy4jLmNhbGwodGhpcywgIyk7JywgWwogICAgICAgICAgX2VtaXR0ZXIucHJvdG90eXBlQWNjZXNzKHN1cGVyQ2xhc3MsIGhhc0JlZW5JbnN0YW50aWF0ZWQ6IHRydWUpLAogICAgICAgICAgbWV0aG9kTmFtZSwKICAgICAgICAgIHRhcmdldEFyZ3VtZW50cwogICAgICAgIF0pOwogICAgICB9IGVsc2UgewogICAgICAgIGJvZHkgPSBqcy5zdGF0ZW1lbnQoJ3JldHVybiB0aGlzLiMoIyk7JywKICAgICAgICAgICAgW19uYW1lci5pbnN0YW5jZU1ldGhvZE5hbWUobWVtYmVyKSwgdGFyZ2V0QXJndW1lbnRzXSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJvZHkgPSBqcy5zdGF0ZW1lbnQoJ3JldHVybiAjKCMpJywKICAgICAgICAgIFtfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhtZW1iZXIpLCB0YXJnZXRBcmd1bWVudHNdKTsKICAgIH0KCiAgICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgc291cmNlSW5mb3JtYXRpb25CdWlsZGVyID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChtZW1iZXIpOwogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFN0dWIobWVtYmVyLCBjYWxsU3RydWN0dXJlKTsKCiAgICBqc0FzdC5GdW4gZnVuY3Rpb24gPSBqcygnZnVuY3Rpb24oIykgeyAjOyB9JywgW3N0dWJQYXJhbWV0ZXJzLCBib2R5XSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICBqc0FzdC5OYW1lIG5hbWUgPSBtZW1iZXIuaXNTdGF0aWMgPyBudWxsIDogX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgIGpzQXN0Lk5hbWUgY2FsbE5hbWUgPQogICAgICAgIChjYWxsU2VsZWN0b3IgIT0gbnVsbCkgPyBfbmFtZXIuaW52b2NhdGlvbk5hbWUoY2FsbFNlbGVjdG9yKSA6IG51bGw7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclN0dWJNZXRob2QobmFtZSwgY2FsbE5hbWUsIGZ1bmN0aW9uLCBlbGVtZW50OiBtZW1iZXIpOwogIH0KCiAgLy8gV2UgZmlsbCB0aGUgbGlzdHMgZGVwZW5kaW5nIG9uIHBvc3NpYmxlL2ludm9rZWQgc2VsZWN0b3JzLiBGb3IgZXhhbXBsZSwKICAvLyB0YWtlIG1ldGhvZCBmb286CiAgLy8gICAgZm9vKGEsIGIsIHtjLCBkfSk7CiAgLy8KICAvLyBXZSBtYXkgaGF2ZSBtdWx0aXBsZSB3YXlzIG9mIGNhbGxpbmcgZm9vOgogIC8vICgxKSBmb28oMSwgMik7CiAgLy8gKDIpIGZvbygxLCAyLCBjOiAzKTsKICAvLyAoMykgZm9vKDEsIDIsIGQ6IDQpOwogIC8vICg0KSBmb28oMSwgMiwgYzogMywgZDogNCk7CiAgLy8gKDUpIGZvbygxLCAyLCBkOiA0LCBjOiAzKTsKICAvLwogIC8vIFdoYXQgd2UgZ2VuZXJhdGUgYXQgdGhlIGNhbGwgc2l0ZXMgYXJlOgogIC8vICgxKSBmb28kMigxLCAyKTsKICAvLyAoMikgZm9vJDMkYygxLCAyLCAzKTsKICAvLyAoMykgZm9vJDMkZCgxLCAyLCA0KTsKICAvLyAoNCkgZm9vJDQkYyRkKDEsIDIsIDMsIDQpOwogIC8vICg1KSBmb28kNCRjJGQoMSwgMiwgMywgNCk7CiAgLy8KICAvLyBUaGUgc3R1YnMgd2UgZ2VuZXJhdGUgYXJlIChleHByZXNzZWQgaW4gRGFydCk6CiAgLy8gKDEpIGZvbyQyKGEsIGIpID0+IGZvbyQ0JGMkZChhLCBiLCBudWxsLCBudWxsKQogIC8vICgyKSBmb28kMyRjKGEsIGIsIGMpID0+IGZvbyQ0JGMkZChhLCBiLCBjLCBudWxsKTsKICAvLyAoMykgZm9vJDMkZChhLCBiLCBkKSA9PiBmb28kNCRjJGQoYSwgYiwgbnVsbCwgZCk7CiAgLy8gKDQpIE5vIHN0dWIgZ2VuZXJhdGVkLCBjYWxsIGlzIGRpcmVjdC4KICAvLyAoNSkgTm8gc3R1YiBnZW5lcmF0ZWQsIGNhbGwgaXMgZGlyZWN0LgogIC8vCiAgLy8gV2UgbmVlZCB0byBwYXkgYXR0ZW50aW9uIGlmIHRoaXMgc3R1YiBpcyBmb3IgYSBmdW5jdGlvbiB0aGF0IGhhcyBiZWVuCiAgLy8gaW52b2tlZCBmcm9tIGEgc3ViY2xhc3MuIFRoZW4gd2UgY2Fubm90IGp1c3QgcmVkaXJlY3QsIHNpbmNlIHRoYXQKICAvLyB3b3VsZCBpbnZva2UgdGhlIG1ldGhvZHMgb2YgdGhlIHN1YmNsYXNzLiBXZSBoYXZlIHRvIGNvbXBpbGUgdG86CiAgLy8gKDEpIGZvbyQyKGEsIGIpID0+IE15Q2xhc3MuZm9vJDQkYyRkLmNhbGwodGhpcywgYSwgYiwgbnVsbCwgbnVsbCkKICAvLyAoMikgZm9vJDMkYyhhLCBiLCBjKSA9PiBNeUNsYXNzLmZvbyQ0JGMkZCh0aGlzLCBhLCBiLCBjLCBudWxsKTsKICAvLyAoMykgZm9vJDMkZChhLCBiLCBkKSA9PiBNeUNsYXNzLmZvbyQ0JGMkZCh0aGlzLCBhLCBiLCBudWxsLCBkKTsKICBMaXN0PFBhcmFtZXRlclN0dWJNZXRob2Q+IGdlbmVyYXRlUGFyYW1ldGVyU3R1YnMoRnVuY3Rpb25FbnRpdHkgbWVtYmVyLAogICAgICB7Ym9vbCBjYW5UZWFyT2ZmLCBib29sIGNhbkJlQXBwbGllZH0pIHsKICAgIGFzc2VydChjYW5UZWFyT2ZmICE9IG51bGwpOwogICAgYXNzZXJ0KGNhbkJlQXBwbGllZCAhPSBudWxsKTsKICAgIC8vIFRoZSBzZXQgb2Ygc2VsZWN0b3JzIHRoYXQgYXBwbHkgdG8gYG1lbWJlcmAuIEZvciBleGFtcGxlLCBmb3IKICAgIC8vIGEgbWVtYmVyIGBmb28oeCwgW3ldKWAgdGhlIGZvbGxvd2luZyBzZWxlY3RvcnMgbWF5IGFwcGx5OgogICAgLy8gYGZvbyh4KWAsIGFuZCBgZm9vKHgsIHkpYC4KICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gbGl2ZVNlbGVjdG9yczsKICAgIC8vIFRoZSBzZXQgb2Ygc2VsZWN0b3JzIHRoYXQgYXBwbHkgdG8gYG1lbWJlcmAgaWYgaXQncyBuYW1lIHdhcyBgY2FsbGAuCiAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBhIG1lbWJlciBpcyB0b3JuIG9mZi4gSW4gdGhhdCBjYXNlIGNhbGxzIHRvIHRoZQogICAgLy8gZnVuY3Rpb24gdXNlIHRoZSBuYW1lIGBjYWxsYCwgYW5kIHdlIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgZXZlcnkKICAgIC8vIGBjYWxsYCBpbnZvY2F0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgc2lnbmF0dXJlLiBGb3IgZXhhbXBsZSwgZm9yCiAgICAvLyBhIG1lbWJlciBgZm9vKHgsIFt5XSlgIHRoZSBmb2xsb3dpbmcgc2VsZWN0b3JzIHdvdWxkIGJlIHBvc3NpYmxlCiAgICAvLyBjYWxsLXNlbGVjdG9yczogYGNhbGwoeClgLCBhbmQgYGNhbGwoeCwgeSlgLgogICAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBjYWxsU2VsZWN0b3JzOwoKICAgIGludCBtZW1iZXJUeXBlUGFyYW1ldGVycyA9IG1lbWJlci5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnM7CgogICAgLy8gT25seSBpbnN0YW5jZSBtZW1iZXJzIChub3Qgc3RhdGljIG1ldGhvZHMpIG5lZWQgc3R1YnMuCiAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgbGl2ZVNlbGVjdG9ycyA9IF9jb2RlZ2VuV29ybGQuaW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgfQoKICAgIGlmIChjYW5UZWFyT2ZmKSB7CiAgICAgIFN0cmluZyBjYWxsID0gX25hbWVyLmNsb3N1cmVJbnZvY2F0aW9uU2VsZWN0b3JOYW1lOwogICAgICBjYWxsU2VsZWN0b3JzID0gX2NvZGVnZW5Xb3JsZC5pbnZvY2F0aW9uc0J5TmFtZShjYWxsKTsKICAgIH0KCiAgICBhc3NlcnQoZW1wdHlTZWxlY3RvclNldC5pc0VtcHR5KTsKICAgIGxpdmVTZWxlY3RvcnMgPz89IGNvbnN0IDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz57fTsKICAgIGNhbGxTZWxlY3RvcnMgPz89IGNvbnN0IDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz57fTsKCiAgICBMaXN0PFBhcmFtZXRlclN0dWJNZXRob2Q+IHN0dWJzID0gPFBhcmFtZXRlclN0dWJNZXRob2Q+W107CgogICAgaWYgKGxpdmVTZWxlY3RvcnMuaXNFbXB0eSAmJgogICAgICAgIGNhbGxTZWxlY3RvcnMuaXNFbXB0eSAmJgogICAgICAgIC8vIEZ1bmN0aW9uLmFwcGx5IG1pZ2h0IG5lZWQgYSBzdHViIHRvIGRlZmF1bHQgdGhlIHR5cGUgcGFyYW1ldGVyLgogICAgICAgICEoY2FuQmVBcHBsaWVkICYmIG1lbWJlclR5cGVQYXJhbWV0ZXJzID4gMCkpIHsKICAgICAgcmV0dXJuIHN0dWJzOwogICAgfQoKICAgIC8vIEZvciBldmVyeSBjYWxsLXNlbGVjdG9yIHRoZSBjb3JyZXNwb25kaW5nIHNlbGVjdG9yIHdpdGggdGhlIG5hbWUgb2YgdGhlCiAgICAvLyBtZW1iZXIuCiAgICAvLwogICAgLy8gRm9yIGV4YW1wbGUsIGZvciB0aGUgY2FsbC1zZWxlY3RvciBgY2FsbCh4LCB5KWAgdGhlIHJlbmFtZWQgc2VsZWN0b3IKICAgIC8vIGZvciBtZW1iZXIgYGZvb2Agd291bGQgYmUgYGZvbyh4LCB5KWAuCiAgICBTZXQ8U2VsZWN0b3I+IHJlbmFtZWRDYWxsU2VsZWN0b3JzID0gbmV3IFNldDxTZWxlY3Rvcj4oKTsKCiAgICBTZXQ8U2VsZWN0b3I+IHN0dWJTZWxlY3RvcnMgPSBuZXcgU2V0PFNlbGVjdG9yPigpOwoKICAgIC8vIFN0YXJ0IHdpdGggY2xvc3VyZS1jYWxsIHNlbGVjdG9ycywgc2luY2Ugc2luY2UgdGhleSBpbXBseSB0aGUgZ2VuZXJhdGlvbgogICAgLy8gb2YgdGhlIG5vbi1jYWxsIHZlcnNpb24uCiAgICBpZiAoY2FuQmVBcHBsaWVkICYmIG1lbWJlclR5cGVQYXJhbWV0ZXJzID4gMCkgewogICAgICAvLyBGdW5jdGlvbi5hcHBseSBjYWxscyB0aGUgZnVuY3Rpb24gd2l0aCBubyB0eXBlIGFyZ3VtZW50cywgc28gZ2VuZXJpYwogICAgICAvLyBtZXRob2RzIG5lZWQgdGhlIHN0dWIgdG8gZGVmYXVsdCB0aGUgdHlwZSBhcmd1bWVudHMuCiAgICAgIC8vIFRoaXMgaGFzIHRvIGJlIHRoZSBmaXJzdCBzdHViLgogICAgICBTZWxlY3RvciBuYW1lZFNlbGVjdG9yID0gbmV3IFNlbGVjdG9yLmZyb21FbGVtZW50KG1lbWJlcikudG9Ob25HZW5lcmljKCk7CiAgICAgIFNlbGVjdG9yIGNsb3N1cmVTZWxlY3RvciA9CiAgICAgICAgICBuYW1lZFNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwgPyBudWxsIDogbmFtZWRTZWxlY3Rvci50b0NhbGxTZWxlY3RvcigpOwoKICAgICAgcmVuYW1lZENhbGxTZWxlY3RvcnMuYWRkKG5hbWVkU2VsZWN0b3IpOwogICAgICBzdHViU2VsZWN0b3JzLmFkZChuYW1lZFNlbGVjdG9yKTsKICAgICAgUGFyYW1ldGVyU3R1Yk1ldGhvZCBzdHViID0KICAgICAgICAgIGdlbmVyYXRlUGFyYW1ldGVyU3R1YihtZW1iZXIsIG5hbWVkU2VsZWN0b3IsIGNsb3N1cmVTZWxlY3Rvcik7CiAgICAgIGFzc2VydChzdHViICE9IG51bGwpOwogICAgICBzdHVicy5hZGQoc3R1Yik7CiAgICB9CgogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBjYWxsU2VsZWN0b3JzLmtleXMpIHsKICAgICAgU2VsZWN0b3IgcmVuYW1lZFNlbGVjdG9yID0KICAgICAgICAgIG5ldyBTZWxlY3Rvci5jYWxsKG1lbWJlci5tZW1iZXJOYW1lLCBzZWxlY3Rvci5jYWxsU3RydWN0dXJlKTsKICAgICAgcmVuYW1lZENhbGxTZWxlY3RvcnMuYWRkKHJlbmFtZWRTZWxlY3Rvcik7CgogICAgICBpZiAoIXJlbmFtZWRTZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGlmIChzdHViU2VsZWN0b3JzLmFkZChyZW5hbWVkU2VsZWN0b3IpKSB7CiAgICAgICAgUGFyYW1ldGVyU3R1Yk1ldGhvZCBzdHViID0KICAgICAgICAgICAgZ2VuZXJhdGVQYXJhbWV0ZXJTdHViKG1lbWJlciwgcmVuYW1lZFNlbGVjdG9yLCBzZWxlY3Rvcik7CiAgICAgICAgaWYgKHN0dWIgIT0gbnVsbCkgewogICAgICAgICAgc3R1YnMuYWRkKHN0dWIpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQSBnZW5lcmljIG1ldGhvZCBtaWdodCBuZWVkIHRvIHN1cHBvcnQgYGNhbGw8VD4oeClgIGZvciBhIGdlbmVyaWMKICAgICAgLy8gaW5zdGFudGlhdGlvbiBzdHViIHdpdGhvdXQgYGNhbGw8VD4oeClgIGJlaW5nIGluIFtjYWxsU2VsZWN0b3JzXS4KICAgICAgLy8gW3NlbGVjdG9yXSB3aWxsIGJlIGBjYWxsKHgpYCAodGhhdCBhbHJlYWR5IHBhc3NlcyB0aGUgYXBwbGllc1VubmFtZWQKICAgICAgLy8gY2hlY2sgYnkgZGVmYXVsdGluZyB0eXBlIGFyZ3VtZW50cyksIGFuZCB0aGUgbWV0aG9kIHdpbGwgYmUgZ2VuZXJpYy4KICAgICAgLy8KICAgICAgLy8gVGhpcyBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgbG9naWMgYXMgYWJvdmUsIGJ1dCB3aXRoIHR5cGUgYXJndW1lbnRzLgogICAgICBpZiAoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgICAgaWYgKG1lbWJlclR5cGVQYXJhbWV0ZXJzID4gMCkgewogICAgICAgICAgU2VsZWN0b3IgcmVuYW1lZFNlbGVjdG9yV2l0aFR5cGVBcmd1bWVudHMgPSBuZXcgU2VsZWN0b3IuY2FsbCgKICAgICAgICAgICAgICBtZW1iZXIubWVtYmVyTmFtZSwKICAgICAgICAgICAgICBzZWxlY3Rvci5jYWxsU3RydWN0dXJlCiAgICAgICAgICAgICAgICAgIC53aXRoVHlwZUFyZ3VtZW50Q291bnQobWVtYmVyVHlwZVBhcmFtZXRlcnMpKTsKICAgICAgICAgIHJlbmFtZWRDYWxsU2VsZWN0b3JzLmFkZChyZW5hbWVkU2VsZWN0b3JXaXRoVHlwZUFyZ3VtZW50cyk7CgogICAgICAgICAgaWYgKHN0dWJTZWxlY3RvcnMuYWRkKHJlbmFtZWRTZWxlY3RvcldpdGhUeXBlQXJndW1lbnRzKSkgewogICAgICAgICAgICBTZWxlY3RvciBjbG9zdXJlU2VsZWN0b3IgPQogICAgICAgICAgICAgICAgbmV3IFNlbGVjdG9yLmNhbGxDbG9zdXJlRnJvbShyZW5hbWVkU2VsZWN0b3JXaXRoVHlwZUFyZ3VtZW50cyk7CiAgICAgICAgICAgIFBhcmFtZXRlclN0dWJNZXRob2Qgc3R1YiA9IGdlbmVyYXRlUGFyYW1ldGVyU3R1YigKICAgICAgICAgICAgICAgIG1lbWJlciwgcmVuYW1lZFNlbGVjdG9yV2l0aFR5cGVBcmd1bWVudHMsIGNsb3N1cmVTZWxlY3Rvcik7CiAgICAgICAgICAgIGlmIChzdHViICE9IG51bGwpIHsKICAgICAgICAgICAgICBzdHVicy5hZGQoc3R1Yik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBOb3cgcnVuIHRocm91Z2ggdGhlIGFjdHVhbCBtZW1iZXIgc2VsZWN0b3JzIChlZy4gYGZvbyQyKHgsIHkpYCBhbmQgbm90CiAgICAvLyBgY2FsbCQyKHgsIHkpYCkuIFNvbWUgb2YgdGhlbSBoYXZlIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQgYmVjYXVzZSBvZiB0aGUKICAgIC8vIGNhbGwtc2VsZWN0b3JzIGFuZCB0aGV5IGFyZSBpbiB0aGUgcmVuYW1lZENhbGxTZWxlY3RvcnMgc2V0LgogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBsaXZlU2VsZWN0b3JzLmtleXMpIHsKICAgICAgaWYgKHJlbmFtZWRDYWxsU2VsZWN0b3JzLmNvbnRhaW5zKHNlbGVjdG9yKSkgY29udGludWU7CiAgICAgIGlmICghc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSkgY29udGludWU7CiAgICAgIGlmICghbGl2ZVNlbGVjdG9yc1tzZWxlY3Rvcl0KICAgICAgICAgIC5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCBfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGlmIChzdHViU2VsZWN0b3JzLmFkZChzZWxlY3RvcikpIHsKICAgICAgICBQYXJhbWV0ZXJTdHViTWV0aG9kIHN0dWIgPQogICAgICAgICAgICBnZW5lcmF0ZVBhcmFtZXRlclN0dWIobWVtYmVyLCBzZWxlY3RvciwgbnVsbCk7CiAgICAgICAgaWYgKHN0dWIgIT0gbnVsbCkgewogICAgICAgICAgc3R1YnMuYWRkKHN0dWIpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBzdHViczsKICB9Cn0KgZ4ATk48ATUBOyMkISghIC4pLitCPTEyQioBFQEuHgEfRQEaJhYpTCAqJCM+ARoVGxMYHhgdGhkoATEnATM2AVBIBk1PUAZRUE5HUCAtSU5PUEpPATpHSTNPAUpLPFBLOykVCDsuOzYVCAYBQwFNAU86SklJMAEsRh0lKT1JHTEwARMfD0U6BgFPSk4BMTA1Liw9Mg8pGztFRTQ7KxEfJUUTIUosPw5IDAoIDwgBMRtFKVEvQUErSRpJLTATSkpGUjdBDBE8SjYKCAYBKjM9Eh8rGhs0KiY4Q1BLQ0M7SxYaDA8xQwgNKUUGAThEKkMBSjMBUBpNTwQBTRYbBS8UGhogIAUtFhsbICAFNDQ3NywsBUtHRkdFRUouICJFQSI2TElJRkg0NgFJAT4jRAYBFjo9BgEmPz8BPwEhIUs3FAYBTw8HTC4+ATcBUCA0Tj4oUCFPAS8oIUkcFwYBNCFIMQE1EggBMCNGHBsKCAFLS05OCU07KEkhJUFGAUUnUD5MIB8ODAoIBgFOUEQ0PTYjQBIIASkjOxwbCggGARIEAgE9cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9wYXJhbWV0ZXJfc3R1Yl9nZW5lcmF0b3IuZGFydERzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3J1bnRpbWVfdHlwZV9nZW5lcmF0b3IuZGFydLc0Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnJ1bnRpbWVfdHlwZV9nZW5lcmF0b3I7CgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0LCBPdXRwdXRVbml0RGF0YTsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvanNfaW50ZXJvcF9hbmFseXNpcy5kYXJ0JyBhcyBqc0ludGVyb3BBbmFseXNpczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTmFtZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnCiAgICBzaG93IFJ1bnRpbWVUeXBlc0NoZWNrcywgUnVudGltZVR5cGVzRW5jb2RlciwgT25WYXJpYWJsZUNhbGxiYWNrOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnCiAgICBzaG93IENsYXNzQ2hlY2tzLCBDbGFzc0Z1bmN0aW9uVHlwZSwgU3Vic3RpdHV0aW9uLCBUeXBlQ2hlY2s7CmltcG9ydCAnLi4vanNfZW1pdHRlci9zb3J0ZXIuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzaywgRW1pdHRlcjsKCi8vIEZ1bmN0aW9uIHNpZ25hdHVyZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24uCnR5cGVkZWYgdm9pZCBGdW5jdGlvblR5cGVTaWduYXR1cmVFbWl0dGVyKENsYXNzRnVuY3Rpb25UeXBlIGNsYXNzRnVuY3Rpb25UeXBlKTsKCmNsYXNzIFR5cGVUZXN0IHsKICBmaW5hbCBqc0FzdC5OYW1lIG5hbWU7CiAgZmluYWwganNBc3QuTm9kZSBleHByZXNzaW9uOwoKICBUeXBlVGVzdCh0aGlzLm5hbWUsIHRoaXMuZXhwcmVzc2lvbik7Cn0KCmNsYXNzIFR5cGVUZXN0cyB7CiAgVHlwZVRlc3QgaXNUZXN0OwogIFR5cGVUZXN0IHN1YnN0aXR1dGlvbjsKICBUeXBlVGVzdCBzaWduYXR1cmU7Cn0KCmNsYXNzIFR5cGVUZXN0UHJvcGVydGllcyB7CiAgLy8vIFRoZSBpbmRleCBvZiB0aGUgZnVuY3Rpb24gdHlwZSBpbnRvIHRoZSBtZXRhZGF0YS4KICAvLy8KICAvLy8gSWYgdGhlIGNsYXNzIGRvZXNuJ3QgaGF2ZSBhIGZ1bmN0aW9uIHR5cGUgdGhpcyBmaWVsZCBpcyBgbnVsbGAuCiAgLy8vCiAgLy8vIElmIHRoZSBpcyB0ZXN0cyB3ZXJlIGdlbmVyYXRlZCB3aXRoIGBzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGFgIHNldCB0bwogIC8vLyBgZmFsc2VgLCB0aGlzIGZpZWxkIGlzIGBudWxsYCwgYW5kIHRoZSBbcHJvcGVydGllc10gY29udGFpbiBhIHByb3BlcnR5CiAgLy8vIHRoYXQgZW5jb2RlcyB0aGUgZnVuY3Rpb24gdHlwZS4KICBqc0FzdC5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZUluZGV4OwoKICAvLy8gVGhlIHByb3BlcnRpZXMgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgcHJvdG90eXBlIG9mIHRoZQogIC8vLyBKUyBjb25zdHJ1Y3RvciBvZiB0aGUgW0NsYXNzRW50aXR5XSBmb3Igd2hpY2ggdGhlIGlzIGNoZWNrcyB3ZXJlCiAgLy8vIGdlbmVyYXRlZC4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFR5cGVUZXN0cz4gX3Byb3BlcnRpZXMgPSA8Q2xhc3NFbnRpdHksIFR5cGVUZXN0cz57fTsKCiAgdm9pZCBhZGRJc1Rlc3QoQ2xhc3NFbnRpdHkgY2xzLCBqc0FzdC5OYW1lIG5hbWUsIGpzQXN0Lk5vZGUgZXhwcmVzc2lvbikgewogICAgVHlwZVRlc3RzIHR5cGVUZXN0cyA9IF9wcm9wZXJ0aWVzLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IFR5cGVUZXN0cygpKTsKICAgIHR5cGVUZXN0cy5pc1Rlc3QgPSBuZXcgVHlwZVRlc3QobmFtZSwgZXhwcmVzc2lvbik7CiAgfQoKICB2b2lkIGFkZFN1YnN0aXR1dGlvbigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBqc0FzdC5OYW1lIG5hbWUsIGpzQXN0Lk5vZGUgZXhwcmVzc2lvbikgewogICAgVHlwZVRlc3RzIHR5cGVUZXN0cyA9IF9wcm9wZXJ0aWVzLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IFR5cGVUZXN0cygpKTsKICAgIHR5cGVUZXN0cy5zdWJzdGl0dXRpb24gPSBuZXcgVHlwZVRlc3QobmFtZSwgZXhwcmVzc2lvbik7CiAgfQoKICB2b2lkIGFkZFNpZ25hdHVyZShDbGFzc0VudGl0eSBjbHMsIGpzQXN0Lk5hbWUgbmFtZSwganNBc3QuTm9kZSBleHByZXNzaW9uKSB7CiAgICBUeXBlVGVzdHMgdHlwZVRlc3RzID0gX3Byb3BlcnRpZXMucHV0SWZBYnNlbnQoY2xzLCAoKSA9PiBuZXcgVHlwZVRlc3RzKCkpOwogICAgdHlwZVRlc3RzLnNpZ25hdHVyZSA9IG5ldyBUeXBlVGVzdChuYW1lLCBleHByZXNzaW9uKTsKICB9CgogIHZvaWQgZm9yRWFjaFByb3BlcnR5KAogICAgICBTb3J0ZXIgc29ydGVyLCB2b2lkIGYoanNBc3QuTmFtZSBuYW1lLCBqc0FzdC5Ob2RlIGV4cHJlc3Npb24pKSB7CiAgICB2b2lkIGhhbmRsZVR5cGVUZXN0KFR5cGVUZXN0IHR5cGVUZXN0KSB7CiAgICAgIGlmICh0eXBlVGVzdCA9PSBudWxsKSByZXR1cm47CiAgICAgIGYodHlwZVRlc3QubmFtZSwgdHlwZVRlc3QuZXhwcmVzc2lvbik7CiAgICB9CgogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gc29ydGVyLnNvcnRDbGFzc2VzKF9wcm9wZXJ0aWVzLmtleXMpKSB7CiAgICAgIFR5cGVUZXN0cyB0eXBlVGVzdHMgPSBfcHJvcGVydGllc1tjbHNdOwogICAgICBoYW5kbGVUeXBlVGVzdCh0eXBlVGVzdHMuaXNUZXN0KTsKICAgICAgaGFuZGxlVHlwZVRlc3QodHlwZVRlc3RzLnN1YnN0aXR1dGlvbik7CiAgICAgIGhhbmRsZVR5cGVUZXN0KHR5cGVUZXN0cy5zaWduYXR1cmUpOwogICAgfQogIH0KfQoKY2xhc3MgUnVudGltZVR5cGVHZW5lcmF0b3IgewogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBPdXRwdXRVbml0RGF0YSBfb3V0cHV0VW5pdERhdGE7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIGVtaXR0ZXJUYXNrOwogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBSdW50aW1lVHlwZXNDaGVja3MgX3J0aUNoZWNrczsKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIF9ydGlFbmNvZGVyOwogIGZpbmFsIF9UeXBlQ29udGFpbmVkSW5PdXRwdXRVbml0VmlzaXRvciBfb3V0cHV0VW5pdFZpc2l0b3I7CgogIFJ1bnRpbWVUeXBlR2VuZXJhdG9yKHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9vdXRwdXRVbml0RGF0YSwKICAgICAgdGhpcy5lbWl0dGVyVGFzaywgdGhpcy5fbmFtZXIsIHRoaXMuX3J0aUNoZWNrcywgdGhpcy5fcnRpRW5jb2RlcikKICAgICAgOiBfb3V0cHV0VW5pdFZpc2l0b3IgPSBuZXcgX1R5cGVDb250YWluZWRJbk91dHB1dFVuaXRWaXNpdG9yKAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMsIF9vdXRwdXRVbml0RGF0YSk7CgogIC8vLyBHZW5lcmF0ZSAiaXMgdGVzdHMiIGZvciBbY2xzXSBpdHNlbGYsIGFuZCB0aGUgImlzIHRlc3RzIiBmb3IgdGhlCiAgLy8vIGNsYXNzZXMgaXQgaW1wbGVtZW50cyBhbmQgdHlwZSBhcmd1bWVudCBzdWJzdGl0dXRpb24gZnVuY3Rpb25zIGZvciB0aGVzZQogIC8vLyB0ZXN0cy4gICBXZSBkb24ndCBuZWVkIHRvIGFkZCB0aGUgImlzIHRlc3RzIiBvZiB0aGUgc3VwZXIgY2xhc3MgYmVjYXVzZQogIC8vLyB0aGV5IHdpbGwgYmUgaW5oZXJpdGVkIGF0IHJ1bnRpbWUsIGJ1dCB3ZSBtYXkgbmVlZCB0byBnZW5lcmF0ZSB0aGUKICAvLy8gc3Vic3RpdHV0aW9ucywgYmVjYXVzZSB0aGV5IG1heSBoYXZlIGNoYW5nZWQuCgogIC8vLyBHZW5lcmF0ZXMgYWxsIHByb3BlcnRpZXMgbmVjZXNzYXJ5IGZvciBpcy1jaGVja3Mgb24gdGhlIFtjbGFzc0VsZW1lbnRdLgogIC8vLwogIC8vLyBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFtUeXBlVGVzdFByb3BlcnRpZXNdIHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMKICAvLy8gdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgcHJvdG90eXBlIG9mIHRoZSBKUyBjb25zdHJ1Y3RvciBvZiB0aGUKICAvLy8gW2NsYXNzRWxlbWVudF0uCiAgLy8vCiAgLy8vIElmIFtzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGFdIGlzIGB0cnVlYCwgc3RvcmVzIHRoZSByZWlmaWVkIGZ1bmN0aW9uCiAgLy8vIHR5cGUgKGlmIGNsYXNzIGhhcyBvbmUpIGluIHRoZSBtZXRhZGF0YSBvYmplY3QgYW5kIHN0b3JlcyBpdHMgaW5kZXggaW4KICAvLy8gdGhlIHJlc3VsdC4gVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGZvciBmdW5jdGlvbiB0eXBlcyB0aGF0IGRvIG5vdCBjb250YWluCiAgLy8vIHR5cGUgdmFyaWFibGVzLgogIFR5cGVUZXN0UHJvcGVydGllcyBnZW5lcmF0ZUlzVGVzdHMoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50LAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBqc0FzdC5FeHByZXNzaW9uPiBnZW5lcmF0ZWRDb2RlLAogICAgICB7Ym9vbCBzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGE6IHRydWV9KSB7CiAgICBUeXBlVGVzdFByb3BlcnRpZXMgcmVzdWx0ID0gbmV3IFR5cGVUZXN0UHJvcGVydGllcygpOwoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluY2x1ZGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBpbiBbQ2xhc3NDaGVja3NdLgogICAgdm9pZCBnZW5lcmF0ZUZ1bmN0aW9uVHlwZVNpZ25hdHVyZShDbGFzc0Z1bmN0aW9uVHlwZSBjbGFzc0Z1bmN0aW9uVHlwZSkgewogICAgICBGdW5jdGlvbkVudGl0eSBtZXRob2QgPSBjbGFzc0Z1bmN0aW9uVHlwZS5jYWxsRnVuY3Rpb247CiAgICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gY2xhc3NGdW5jdGlvblR5cGUuY2FsbFR5cGU7CgogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB1bm5lZWRlZCBmdW5jdGlvbiB0eXBlIGluZGljZXMgb3IKICAgICAgLy8gc2lnbmF0dXJlcy4gV2UgZWl0aGVyIG5lZWQgdGhlbSBmb3IgbWlycm9ycyBvciBiZWNhdXNlIFt0eXBlXSBpcwogICAgICAvLyBwb3RlbnRpYWxseSBhIHN1YnR5cGUgb2YgYSBjaGVja2VkIGZ1bmN0aW9uLiBDdXJyZW50bHkgd2UgZWFnZXJseQogICAgICAvLyBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHR5cGUgaW5kZXggb3Igc2lnbmF0dXJlIGZvciBhbGwgY2FsbGFibGUgY2xhc3Nlcy4KICAgICAganNBc3QuRXhwcmVzc2lvbiBmdW5jdGlvblR5cGVJbmRleDsKICAgICAgYm9vbCBpc0RlZmVycmVkID0gZmFsc2U7CiAgICAgIGlmICghdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgICAvLyBUT0RPKHNpZ211bmQpOiB1c2Ugb3V0cHV0IHVuaXQgb2YgW21ldGhvZF0gd2hlbiB0aGUgY2xhc3NlcyBtZW50aW9uZWQKICAgICAgICAvLyBpbiBbdHlwZV0gYXJlbid0IGluIHRoZSBtYWluIG91dHB1dCB1bml0LiAoSXNzdWUgIzMxMDMyKQogICAgICAgIE91dHB1dFVuaXQgbWFpbk91dHB1dFVuaXQgPSBfb3V0cHV0VW5pdERhdGEubWFpbk91dHB1dFVuaXQ7CiAgICAgICAgaWYgKF9vdXRwdXRVbml0VmlzaXRvci5pc1R5cGVDb250YWluZWRJbih0eXBlLCBtYWluT3V0cHV0VW5pdCkpIHsKICAgICAgICAgIGZ1bmN0aW9uVHlwZUluZGV4ID0KICAgICAgICAgICAgICBlbWl0dGVyVGFzay5tZXRhZGF0YUNvbGxlY3Rvci5yZWlmeVR5cGUodHlwZSwgbWFpbk91dHB1dFVuaXQpOwogICAgICAgIH0gZWxzZSBpZiAoIXN0b3JlRnVuY3Rpb25UeXBlSW5NZXRhZGF0YSkgewogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBzaGFyaW5nIGRlZmVycmVkIHNpZ25hdHVyZXMgd2l0aCB0aGUKICAgICAgICAgIC8vIGZ1bGwgZW1pdHRlci4KICAgICAgICAgIGlzRGVmZXJyZWQgPSB0cnVlOwogICAgICAgICAgZnVuY3Rpb25UeXBlSW5kZXggPSBlbWl0dGVyVGFzay5tZXRhZGF0YUNvbGxlY3RvcgogICAgICAgICAgICAgIC5yZWlmeVR5cGUodHlwZSwgX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIobWV0aG9kKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGEgJiYgZnVuY3Rpb25UeXBlSW5kZXggIT0gbnVsbCkgewogICAgICAgIHJlc3VsdC5mdW5jdGlvblR5cGVJbmRleCA9IGZ1bmN0aW9uVHlwZUluZGV4OwogICAgICB9IGVsc2UgewogICAgICAgIGpzQXN0LkV4cHJlc3Npb24gZW5jb2RpbmcgPQogICAgICAgICAgICBnZW5lcmF0ZWRDb2RlW2NsYXNzRnVuY3Rpb25UeXBlLnNpZ25hdHVyZUZ1bmN0aW9uXTsKICAgICAgICBpZiAoY2xhc3NGdW5jdGlvblR5cGUuc2lnbmF0dXJlRnVuY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgLy8gVGhlIHNpZ25hdHVyZSBmdW5jdGlvbiBpc24ndCBsaXZlLgogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZnVuY3Rpb25UeXBlSW5kZXggIT0gbnVsbCkgewogICAgICAgICAgaWYgKGlzRGVmZXJyZWQpIHsKICAgICAgICAgICAgLy8gVGhlIGZ1bmN0aW9uIHR5cGUgaW5kZXggbXVzdCBiZSBvZmZzZXQgYnkgdGhlIG51bWJlciBvZiB0eXBlcwogICAgICAgICAgICAvLyBhbHJlYWR5IGxvYWRlZC4KICAgICAgICAgICAgZW5jb2RpbmcgPSBuZXcganNBc3QuQmluYXJ5KAogICAgICAgICAgICAgICAgJysnLAogICAgICAgICAgICAgICAgbmV3IGpzQXN0LlZhcmlhYmxlVXNlKF9uYW1lci50eXBlc09mZnNldE5hbWUpLAogICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlSW5kZXgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBmdW5jdGlvblR5cGVJbmRleDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpIHsKICAgICAgICAgIGpzQXN0Lk5hbWUgb3BlcmF0b3JTaWduYXR1cmUgPQogICAgICAgICAgICAgIF9uYW1lci5hc05hbWUoX25hbWVyLmZpeGVkTmFtZXMub3BlcmF0b3JTaWduYXR1cmUpOwogICAgICAgICAgcmVzdWx0LmFkZFNpZ25hdHVyZShjbGFzc0VsZW1lbnQsIG9wZXJhdG9yU2lnbmF0dXJlLCBlbmNvZGluZyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdm9pZCBnZW5lcmF0ZVR5cGVDaGVjayhUeXBlQ2hlY2sgY2hlY2spIHsKICAgICAgQ2xhc3NFbnRpdHkgY2hlY2tlZENsYXNzID0gY2hlY2suY2xzOwogICAgICBpZiAoY2hlY2submVlZHNJcykgewogICAgICAgIHJlc3VsdC5hZGRJc1Rlc3QoCiAgICAgICAgICAgIGNoZWNrZWRDbGFzcywgX25hbWVyLm9wZXJhdG9ySXMoY2hlY2tlZENsYXNzKSwganMoJzEnKSk7CiAgICAgIH0KICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IGNoZWNrLnN1YnN0aXR1dGlvbjsKICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiBib2R5ID0KICAgICAgICAgICAgX2dldFN1YnN0aXR1dGlvbkNvZGUoZW1pdHRlclRhc2suZW1pdHRlciwgc3Vic3RpdHV0aW9uKTsKICAgICAgICByZXN1bHQuYWRkU3Vic3RpdHV0aW9uKAogICAgICAgICAgICBjaGVja2VkQ2xhc3MsIF9uYW1lci5zdWJzdGl0dXRpb25OYW1lKGNoZWNrZWRDbGFzcyksIGJvZHkpOwogICAgICB9CiAgICB9CgogICAgX2dlbmVyYXRlSXNUZXN0c09uKAogICAgICAgIGNsYXNzRWxlbWVudCwgZ2VuZXJhdGVGdW5jdGlvblR5cGVTaWduYXR1cmUsIGdlbmVyYXRlVHlwZUNoZWNrKTsKCiAgICBpZiAoY2xhc3NFbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzKSB7CiAgICAgIHZhciB0eXBlID0ganNJbnRlcm9wQW5hbHlzaXMuYnVpbGRKc0Z1bmN0aW9uVHlwZSgpOwogICAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiB0aGlzQWNjZXNzID0gbmV3IGpzQXN0LlRoaXMoKTsKICAgICAgICBqc0FzdC5FeHByZXNzaW9uIGVuY29kaW5nID0gX3J0aUVuY29kZXIuZ2V0U2lnbmF0dXJlRW5jb2RpbmcoCiAgICAgICAgICAgIF9uYW1lciwgZW1pdHRlclRhc2suZW1pdHRlciwgdHlwZSwgdGhpc0FjY2Vzcyk7CiAgICAgICAganNBc3QuTmFtZSBvcGVyYXRvclNpZ25hdHVyZSA9CiAgICAgICAgICAgIF9uYW1lci5hc05hbWUoX25hbWVyLmZpeGVkTmFtZXMub3BlcmF0b3JTaWduYXR1cmUpOwogICAgICAgIHJlc3VsdC5hZGRTaWduYXR1cmUoY2xhc3NFbGVtZW50LCBvcGVyYXRvclNpZ25hdHVyZSwgZW5jb2RpbmcpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENvbXB1dGUgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCBkZXNjcmliZXMgdGhlIG5lY2Vzc2FyeSBzdWJzdGl0dXRpb24KICAvLy8gZm9yIHR5cGUgYXJndW1lbnRzIGluIGEgc3VidHlwZSB0ZXN0LgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGNhbiBiZToKICAvLy8gIDEpIGBudWxsYCwgaWYgbm8gc3Vic3RpdHV0ZWQgY2hlY2sgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIHRoZSB0eXBlCiAgLy8vICAgICB2YXJpYWJsZXMgYXJlIHRoZSBzYW1lIG9yIHRoZXJlIGFyZSBubyB0eXBlIHZhcmlhYmxlcyBpbiB0aGUgY2xhc3MKICAvLy8gICAgIHRoYXQgaXMgY2hlY2tlZCBmb3IuCiAgLy8vICAyKSBBIGxpc3QgZXhwcmVzc2lvbiBkZXNjcmliaW5nIHRoZSB0eXBlIGFyZ3VtZW50cyB0byBiZSB1c2VkIGluIHRoZQogIC8vLyAgICAgc3VidHlwZSBjaGVjaywgaWYgdGhlIHR5cGUgYXJndW1lbnRzIHRvIGJlIHVzZWQgaW4gdGhlIGNoZWNrIGRvIG5vdAogIC8vLyAgICAgZGVwZW5kIG9uIHRoZSB0eXBlIGFyZ3VtZW50cyBvZiB0aGUgb2JqZWN0LgogIC8vLyAgMykgQSBmdW5jdGlvbiBtYXBwaW5nIHRoZSB0eXBlIHZhcmlhYmxlcyBvZiB0aGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQgdG8KICAvLy8gICAgIGEgbGlzdCBleHByZXNzaW9uLgogIGpzQXN0LkV4cHJlc3Npb24gX2dldFN1YnN0aXR1dGlvbkNvZGUoCiAgICAgIEVtaXR0ZXIgZW1pdHRlciwgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbikgewogICAgaWYgKHN1YnN0aXR1dGlvbi5pc1RyaXZpYWwpIHsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsTnVsbCgpOwogICAgfQoKICAgIGlmIChzdWJzdGl0dXRpb24uaXNKc0ludGVyb3ApIHsKICAgICAgcmV0dXJuIGpzKCdmdW5jdGlvbigpIHsgcmV0dXJuICMgfScsCiAgICAgICAgICBfcnRpRW5jb2Rlci5nZXRKc0ludGVyb3BUeXBlQXJndW1lbnRzKHN1YnN0aXR1dGlvbi5sZW5ndGgpKTsKICAgIH0KCiAgICBqc0FzdC5FeHByZXNzaW9uIGRlY2xhcmF0aW9uKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpIHsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5QYXJhbWV0ZXIoX2dldFZhcmlhYmxlTmFtZSh2YXJpYWJsZS5lbGVtZW50Lm5hbWUpKTsKICAgIH0KCiAgICBqc0FzdC5FeHByZXNzaW9uIHVzZShUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSB7CiAgICAgIHJldHVybiBuZXcganNBc3QuVmFyaWFibGVVc2UoX2dldFZhcmlhYmxlTmFtZSh2YXJpYWJsZS5lbGVtZW50Lm5hbWUpKTsKICAgIH0KCiAgICBpZiAoc3Vic3RpdHV0aW9uLmFyZ3VtZW50cy5ldmVyeSgoRGFydFR5cGUgdHlwZSkgPT4gdHlwZS5pc0R5bmFtaWMpKSB7CiAgICAgIHJldHVybiBlbWl0dGVyLmdlbmVyYXRlRnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKTsKICAgIH0gZWxzZSB7CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gdmFsdWUgPQogICAgICAgICAgX2dldFN1YnN0aXR1dGlvblJlcHJlc2VudGF0aW9uKGVtaXR0ZXIsIHN1YnN0aXR1dGlvbi5hcmd1bWVudHMsIHVzZSk7CiAgICAgIGlmIChzdWJzdGl0dXRpb24uaXNGdW5jdGlvbikgewogICAgICAgIEl0ZXJhYmxlPGpzQXN0LkV4cHJlc3Npb24+IGZvcm1hbHMgPQogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBQYXNzIFtkZWNsYXJhdGlvbl0gZGlyZWN0bHkgdG8gYG1hcGAgd2hlbgogICAgICAgICAgICAvLyBgc3Vic3RpdHV0aW9uLnBhcmFtZXRlcnNgIGNhbiBubyBsb25nZXIgYmUgYQogICAgICAgICAgICAvLyBgTGlzdDxSZXNvbHV0aW9uRGFydFR5cGU+YC4KICAgICAgICAgICAgc3Vic3RpdHV0aW9uLnBhcmFtZXRlcnMubWFwKCh0eXBlKSA9PiBkZWNsYXJhdGlvbih0eXBlKSk7CiAgICAgICAgcmV0dXJuIGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiAjIH0nLCBbZm9ybWFscywgdmFsdWVdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4ganMoJ2Z1bmN0aW9uKCkgeyByZXR1cm4gIyB9JywgdmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIF9nZXRTdWJzdGl0dXRpb25SZXByZXNlbnRhdGlvbigKICAgICAgRW1pdHRlciBlbWl0dGVyLCBMaXN0PERhcnRUeXBlPiB0eXBlcywgT25WYXJpYWJsZUNhbGxiYWNrIG9uVmFyaWFibGUpIHsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZWxlbWVudHMgPSB0eXBlcwogICAgICAgIC5tYXAoKERhcnRUeXBlIHR5cGUpID0+CiAgICAgICAgICAgIF9ydGlFbmNvZGVyLmdldFR5cGVSZXByZXNlbnRhdGlvbihlbWl0dGVyLCB0eXBlLCBvblZhcmlhYmxlKSkKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogIH0KCiAgU3RyaW5nIF9nZXRWYXJpYWJsZU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIC8vIEtlcm5lbCB0eXBlIHZhcmlhYmxlIG5hbWVzIGZvciBhbm9ueW1vdXMgbWl4aW4gYXBwbGljYXRpb25zIGhhdmUgbmFtZXMKICAgIC8vIGNhbm9uaWNhbGl6ZWQgdG8gYSBub24taWRlbnRpZmllZCwgZS5nLiAnI1UwJy4KICAgIG5hbWUgPSBuYW1lLnJlcGxhY2VBbGwoJyMnLCAnXycpOwogICAgcmV0dXJuIF9uYW1lci5zYWZlVmFyaWFibGVOYW1lKG5hbWUpOwogIH0KCiAgdm9pZCBfZ2VuZXJhdGVJc1Rlc3RzT24oCiAgICAgIENsYXNzRW50aXR5IGNscywKICAgICAgRnVuY3Rpb25UeXBlU2lnbmF0dXJlRW1pdHRlciBnZW5lcmF0ZUZ1bmN0aW9uVHlwZVNpZ25hdHVyZSwKICAgICAgdm9pZCBlbWl0VHlwZUNoZWNrKFR5cGVDaGVjayBjaGVjaykpIHsKICAgIFNldGxldDxDbGFzc0VudGl0eT4gZ2VuZXJhdGVkID0gbmV3IFNldGxldDxDbGFzc0VudGl0eT4oKTsKCiAgICAvLyBQcmVjb21wdXRlZCBpcyBjaGVja3MuCiAgICBDbGFzc0NoZWNrcyBjbGFzc0NoZWNrcyA9IF9ydGlDaGVja3MucmVxdWlyZWRDaGVja3NbY2xzXTsKICAgIEl0ZXJhYmxlPFR5cGVDaGVjaz4gdHlwZUNoZWNrcyA9IGNsYXNzQ2hlY2tzLmNoZWNrczsKICAgIGlmICh0eXBlQ2hlY2tzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlQ2hlY2sgdHlwZUNoZWNrIGluIHR5cGVDaGVja3MpIHsKICAgICAgICBpZiAoIWdlbmVyYXRlZC5jb250YWlucyh0eXBlQ2hlY2suY2xzKSkgewogICAgICAgICAgZW1pdFR5cGVDaGVjayh0eXBlQ2hlY2spOwogICAgICAgICAgZ2VuZXJhdGVkLmFkZCh0eXBlQ2hlY2suY2xzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoY2xhc3NDaGVja3MuZnVuY3Rpb25UeXBlICE9IG51bGwpIHsKICAgICAgZ2VuZXJhdGVGdW5jdGlvblR5cGVTaWduYXR1cmUoY2xhc3NDaGVja3MuZnVuY3Rpb25UeXBlKTsKICAgIH0KICB9Cn0KCi8vLyBWaXNpdG9yIHRoYXQgY2hlY2tzIHdoZXRoZXIgYSB0eXBlIGlzIGNvbnRhaW5lZCB3aXRoaW4gb25lIG91dHB1dCB1bml0LgpjbGFzcyBfVHlwZUNvbnRhaW5lZEluT3V0cHV0VW5pdFZpc2l0b3IKICAgIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPGJvb2wsIE91dHB1dFVuaXQ+IHsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgT3V0cHV0VW5pdERhdGEgX291dHB1dFVuaXREYXRhOwoKICBfVHlwZUNvbnRhaW5lZEluT3V0cHV0VW5pdFZpc2l0b3IodGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX291dHB1dFVuaXREYXRhKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFsbCBjbGFzc2VzIG1lbnRpb25lZCBpbiBbdHlwZV0gYXJlIGluIFtvdXRwdXRVbml0XS4KICBib29sIGlzVHlwZUNvbnRhaW5lZEluKERhcnRUeXBlIHR5cGUsIE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgPT4KICAgICAgdmlzaXQodHlwZSwgb3V0cHV0VW5pdCk7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXQoRGFydFR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgPT4gdHlwZS5hY2NlcHQodGhpcywgYXJndW1lbnQpOwoKICBib29sIHZpc2l0TGlzdChMaXN0PERhcnRUeXBlPiB0eXBlcywgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIGlmICghdmlzaXQodHlwZSwgYXJndW1lbnQpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdXR1cmVPclR5cGUoRnV0dXJlT3JUeXBlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpIHsKICAgIGlmIChfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvckNsYXNzKF9jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzKSAhPQogICAgICAgIGFyZ3VtZW50KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB2aXNpdCh0eXBlLnR5cGVBcmd1bWVudCwgYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBPdXRwdXRVbml0IGFyZ3VtZW50KSB7CiAgICByZXR1cm4gdmlzaXQodHlwZS51bmFsaWFzZWQsIGFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgaWYgKF9vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yQ2xhc3ModHlwZS5lbGVtZW50KSAhPSBhcmd1bWVudCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdmlzaXRMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgYm9vbCByZXN1bHQgPSB2aXNpdCh0eXBlLnJldHVyblR5cGUsIGFyZ3VtZW50KSAmJgogICAgICAgIHZpc2l0TGlzdCh0eXBlLnBhcmFtZXRlclR5cGVzLCBhcmd1bWVudCkgJiYKICAgICAgICB2aXNpdExpc3QodHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBhcmd1bWVudCkgJiYKICAgICAgICB2aXNpdExpc3QodHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBhcmd1bWVudCk7CiAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgIGlmICghdmlzaXQodHlwZVZhcmlhYmxlLmJvdW5kLCBhcmd1bWVudCkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKAogICAgICBGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlLCBPdXRwdXRVbml0IGFyZ3VtZW50KSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlVmFyaWFibGVUeXBlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQqBewBOTjwBMwE2QCQhISBGLipGMkIkKAE/AUtQAREZHwEoAgESExkWAgEbOAZGBk9NJiYBREcRTgFMTzcEARhBTz0EAU9POgQBGEctJC0GAUQuKC4rBgQCAR0oKCUWJyk+AUNIRC8BR09OSTQBTgZPSxYGTk1PFj85MjoBSk4+NgFGSktPKh8pUURESh5NM08bHTxNCghGNg8kQDswEgopHE0fKRU/JBMqDAogKUJKCggGAS4sGxpFCDYiIEUgSAgGARhJAUU6GjhGPCdASAgGEwQBUCwGGUlNH0xONk8dKTQiJgYBJCtHBgE+SwYBNk0GAUs4DR9QJS1OPCtGQQ81CAYEATNOLCBKIjEEASlONiYqBAEbF0ItPwEePjkeMDIkKAoIBgEsPwYEAgFMKDMoKAFRAU1CHwEMUQE+IyQWCAYRBAEMQ00UFAYvBAEMSAEMQSwEAQxFSBQGNAQBDEM2NDw3H0QyFggGEQQBDCI4EQQBDEsSBAEMOxEEAgE7cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9ydW50aW1lX3R5cGVfZ2VuZXJhdG9yLmRhcnQ5c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2UvdGFyZ2V0X2NoZWNrcy5kYXJ0iFcvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnRhcmdldF9jaGVja3M7CgovLy8gQSBzdW1tYXJ5IG9mIHRoZSBjaGVja3MgcmVxdWlyZWQgd2hlbiBlbnRlcmluZyBhIHRhcmdldCBtZXRob2QuCi8vLwovLy8gVGhlIHRhcmdldCBjaGVja3MgYXJlIHVzZWQgdG8gYW5ub3RhdGUgY2FsbCBzaXRlcyB3aXRoIHRoZSBjaGVja2luZyByZXF1aXJlZAovLy8gZnJvbSB0aGF0IGNhbGwgc2l0ZS4KLy8vCi8vLyBUaGUgdGFyZ2V0IGNhbiBlaXRoZXIgcGVyZm9ybSB3b3JzdC1jYXNlIGNoZWNrcyBvdmVyIGFsbCBjYWxsIHNpdGVzLCBvciBjYW4KLy8vIGJlIGdlbmVyYXRlZCBhcyBtdWx0aXBsZSBlbnRyeSBwb2ludHMgZm9yIGRpZmZlcmVudCBUYXJnZXRDaGVja3MuCi8vLwovLy8gVGhlIFRhcmdldENoZWNrcyBhdCBhIGNhbGwgc2l0ZSBjYW4gYmUgcmVmaW5lZCBieSBhbmFseXNpcy4gIEZvciBleGFtcGxlLAovLy8gdGhlIGdlbmVyaWMgY292YXJpYW50IGNoZWNrIGZvciB3cml0aW5nIGludG8gYSBMaXN0IG1pZ2h0IG5vdCBiZSByZXF1aXJlZAovLy8gd2hlbiBjb3B5aW5nIHZhbHVlcyBmcm9tIGEgTGlzdCBhbGxvY2F0ZWQgd2l0aCB0aGUgc2FtZSB0eXBlIHZhcmlhYmxlIHZhbHVlLgovLy8KLy8vIFRoZSBUYXJnZXRDaGVja3MgYXQgYSBjYWxsIHNpdGUgY2FuIGJlIHVzZWQgdG8gaW5mb3JtIG9wdGltaXphdGlvbnMsIGZvcgovLy8gZXhhbXBsZSwgb25seSBsb3dlcmluZyB0byBzaW1wbGVyIGluc3RydWN0aW9ucyB3aGVuIGdlbmVyaWMgY292YXJpYW50IGNoZWNrCi8vLyBpcyByZXF1aXJlZC4KLy8vCi8vLyBVbnNvdW5kIG1vZGVzIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiBhIHNjb3BlZCBtYW5uZXIgYnkgdXNpbmcgYSBUYXJnZXRDaGVja3MKLy8vIHRoYXQgaGFzIGZld2VyIGNoZWNrcyB0aGFuIHJlcXVpcmVkIChvciBubyBjaGVja3MpIGluIHRoZSB1bnNvdW5kIHJlZ2lvbi4KY2xhc3MgVGFyZ2V0Q2hlY2tzIHsKICAvLyBUeXBpY2FsIG9mIGRpcmVjdCBzdGF0aWMgY2FsbCBzaXRlcy4KICAvLyBUeXBpY2FsIG9mIHN0YXRpYyBtZXRob2QgdGFyZ2V0cyB3aXRoIG5vIHRlYXItb2Zmcy4KICBzdGF0aWMgZmluYWwgVGFyZ2V0Q2hlY2tzIG5vbmUgPSBjb25zdCBUYXJnZXRDaGVja3MuXyhmYWxzZSwgZmFsc2UsIGZhbHNlKTsKCiAgLy8gVHlwaWNhbCBvZiBjbG9zdXJlIGNhbGxzIGFuZCBkeW5hbWljIGNhbGxzLgogIHN0YXRpYyBmaW5hbCBUYXJnZXRDaGVja3MgZHluYW1pY0NoZWNrcyA9CiAgICAgIGNvbnN0IFRhcmdldENoZWNrcy5fKHRydWUsIHRydWUsIHRydWUpOwoKICAvLyBUeXBpY2FsIG9mIG1ldGhvZCBjYWxscy4KICBzdGF0aWMgZmluYWwgVGFyZ2V0Q2hlY2tzIGNvdmFyaWFudENoZWNrcyA9CiAgICAgIGNvbnN0IFRhcmdldENoZWNrcy5fKGZhbHNlLCB0cnVlLCBmYWxzZSk7CgogIC8vIFRPRE8oc3JhKTogVGhpcyBjYW4gYmUgbW9yZSBmaW5lLWdyYWluZWQsIHRhbGtpbmcgYWJvdXQgaW5kaXZpZHVhbAogIC8vIHBhcmFtZXRlcnMuCiAgZmluYWwgYm9vbCBfY2hlY2tPdGhlclBhcmFtZXRlcnM7CiAgZmluYWwgYm9vbCBfY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzOwogIGZpbmFsIGJvb2wgX2NoZWNrVHlwZVBhcmFtZXRlcnM7CiAgY29uc3QgVGFyZ2V0Q2hlY2tzLl8oCiAgICB0aGlzLl9jaGVja090aGVyUGFyYW1ldGVycywKICAgIHRoaXMuX2NoZWNrQ292YXJpYW50UGFyYW1ldGVycywKICAgIHRoaXMuX2NoZWNrVHlwZVBhcmFtZXRlcnMsCiAgKTsKCiAgYm9vbCBnZXQgY2hlY2tUeXBlUGFyYW1ldGVycyA9PiBfY2hlY2tUeXBlUGFyYW1ldGVyczsKICBib29sIGdldCBjaGVja0NvdmFyaWFudFBhcmFtZXRlcnMgPT4gX2NoZWNrQ292YXJpYW50UGFyYW1ldGVyczsKICBib29sIGdldCBjaGVja0FsbFBhcmFtZXRlcnMgPT4gX2NoZWNrT3RoZXJQYXJhbWV0ZXJzOwp9CjYATk48AR8BRARRGQRQRgROTlEETVARBFBOFSo5TgExLC4BHi4wAUgRJCgjGCAkHwUBOEI4AgEwcGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvdGFyZ2V0X2NoZWNrcy5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9qdW1wX2hhbmRsZXIuZGFydJ+gLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2p1bXBzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CgppbXBvcnQgJ2J1aWxkZXJfa2VybmVsLmRhcnQnOwppbXBvcnQgJ2xvY2Fsc19oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwoKLy8vIEEgc2luZ2xlIGJyZWFrL2NvbnRpbnVlIGluc3RydWN0aW9uLgpjbGFzcyBfSnVtcEhhbmRsZXJFbnRyeSB7CiAgZmluYWwgSEp1bXAganVtcEluc3RydWN0aW9uOwogIGZpbmFsIExvY2Fsc0hhbmRsZXIgbG9jYWxzOwogIGJvb2wgaXNCcmVhaygpID0+IGp1bXBJbnN0cnVjdGlvbiBpcyBIQnJlYWs7CiAgYm9vbCBpc0NvbnRpbnVlKCkgPT4ganVtcEluc3RydWN0aW9uIGlzIEhDb250aW51ZTsKICBfSnVtcEhhbmRsZXJFbnRyeSh0aGlzLmp1bXBJbnN0cnVjdGlvbiwgdGhpcy5sb2NhbHMpOwp9CgphYnN0cmFjdCBjbGFzcyBKdW1wSGFuZGxlciB7CiAgZmFjdG9yeSBKdW1wSGFuZGxlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlciwgSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIHJldHVybiBuZXcgVGFyZ2V0SnVtcEhhbmRsZXIoYnVpbGRlciwgdGFyZ2V0KTsKICB9CiAgdm9pZCBnZW5lcmF0ZUJyZWFrKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSk7CiAgdm9pZCBnZW5lcmF0ZUNvbnRpbnVlKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSk7CiAgdm9pZCBmb3JFYWNoQnJlYWsodm9pZCBhY3Rpb24oSEJyZWFrIGluc3RydWN0aW9uLCBMb2NhbHNIYW5kbGVyIGxvY2FscykpOwogIHZvaWQgZm9yRWFjaENvbnRpbnVlKAogICAgICB2b2lkIGFjdGlvbihIQ29udGludWUgaW5zdHJ1Y3Rpb24sIExvY2Fsc0hhbmRsZXIgbG9jYWxzKSk7CiAgYm9vbCBoYXNBbnlDb250aW51ZSgpOwogIGJvb2wgaGFzQW55QnJlYWsoKTsKICB2b2lkIGNsb3NlKCk7CiAgZmluYWwgSnVtcFRhcmdldCB0YXJnZXQ7CiAgTGlzdDxMYWJlbERlZmluaXRpb24+IGdldCBsYWJlbHM7Cn0KCi8vLyBKdW1wIGhhbmRsZXIgdXNlZCB0byBhdm9pZCBudWxsIGNoZWNrcyB3aGVuIGEgdGFyZ2V0IGlzbid0IHVzZWQgYXMgdGhlCi8vLyB0YXJnZXQgb2YgYSBicmVhaywgYW5kIHRoZXJlZm9yZSBkb2Vzbid0IG5lZWQgYSBicmVhayBoYW5kbGVyIGFzc29jaWF0ZWQKLy8vIHdpdGggaXQuCmNsYXNzIE51bGxKdW1wSGFuZGxlciBpbXBsZW1lbnRzIEp1bXBIYW5kbGVyIHsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CgogIE51bGxKdW1wSGFuZGxlcih0aGlzLnJlcG9ydGVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUJyZWFrKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSkgewogICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICdOdWxsSnVtcEhhbmRsZXIuZ2VuZXJhdGVCcmVhayBzaG91bGQgbm90IGJlIGNhbGxlZC4nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZ2VuZXJhdGVDb250aW51ZShTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgW0xhYmVsRGVmaW5pdGlvbiBsYWJlbF0pIHsKICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAnTnVsbEp1bXBIYW5kbGVyLmdlbmVyYXRlQ29udGludWUgc2hvdWxkIG5vdCBiZSBjYWxsZWQuJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hCcmVhayhGdW5jdGlvbiBpZ25vcmVkKSB7fQogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnRpbnVlKEZ1bmN0aW9uIGlnbm9yZWQpIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHt9CiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNBbnlDb250aW51ZSgpID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgaGFzQW55QnJlYWsoKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxMYWJlbERlZmluaXRpb24+IGdldCBsYWJlbHMgPT4gY29uc3QgPExhYmVsRGVmaW5pdGlvbj5bXTsKICBAb3ZlcnJpZGUKICBKdW1wVGFyZ2V0IGdldCB0YXJnZXQgPT4gbnVsbDsKfQoKLy8vIEp1bXAgaGFuZGxlciB0aGF0IHJlY29yZHMgYnJlYWtzIHVudGlsIGEgdGFyZ2V0IGJsb2NrIGlzIGF2YWlsYWJsZS4KLy8vCi8vLyBCcmVha3MgYXJlIGFsd2F5cyBmb3J3YXJkIGp1bXBzLiBDb250aW51ZXMgaW4gbG9vcHMgYXJlIGltcGxlbWVudGVkIGFzCi8vLyBicmVha3Mgb2YgdGhlIGJvZHkuIENvbnRpbnVlcyBpbiBzd2l0Y2hlcyBpcyBjdXJyZW50bHkgbm90IGhhbmRsZWQuCmNsYXNzIFRhcmdldEp1bXBIYW5kbGVyIGltcGxlbWVudHMgSnVtcEhhbmRsZXIgewogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyOwogIEBvdmVycmlkZQogIGZpbmFsIEp1bXBUYXJnZXQgdGFyZ2V0OwogIGZpbmFsIExpc3Q8X0p1bXBIYW5kbGVyRW50cnk+IGp1bXBzOwoKICBUYXJnZXRKdW1wSGFuZGxlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlciwgdGhpcy50YXJnZXQpCiAgICAgIDogdGhpcy5idWlsZGVyID0gYnVpbGRlciwKICAgICAgICBqdW1wcyA9IDxfSnVtcEhhbmRsZXJFbnRyeT5bXSB7CiAgICBhc3NlcnQoYnVpbGRlci5qdW1wVGFyZ2V0c1t0YXJnZXRdID09IG51bGwpOwogICAgYnVpbGRlci5qdW1wVGFyZ2V0c1t0YXJnZXRdID0gdGhpczsKICB9CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGJ1aWxkZXIuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUJyZWFrKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSkgewogICAgSEluc3RydWN0aW9uIGJyZWFrSW5zdHJ1Y3Rpb247CiAgICBpZiAobGFiZWwgPT0gbnVsbCkgewogICAgICBicmVha0luc3RydWN0aW9uID0KICAgICAgICAgIG5ldyBIQnJlYWsoX2Fic3RyYWN0VmFsdWVEb21haW4sIHRhcmdldCwgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgYnJlYWtJbnN0cnVjdGlvbiA9CiAgICAgICAgICBuZXcgSEJyZWFrLnRvTGFiZWwoX2Fic3RyYWN0VmFsdWVEb21haW4sIGxhYmVsLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBMb2NhbHNIYW5kbGVyIGxvY2FscyA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20oYnVpbGRlci5sb2NhbHNIYW5kbGVyKTsKICAgIGJ1aWxkZXIuY2xvc2UoYnJlYWtJbnN0cnVjdGlvbik7CiAgICBqdW1wcy5hZGQobmV3IF9KdW1wSGFuZGxlckVudHJ5KGJyZWFrSW5zdHJ1Y3Rpb24sIGxvY2FscykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUNvbnRpbnVlKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSkgewogICAgSEluc3RydWN0aW9uIGNvbnRpbnVlSW5zdHJ1Y3Rpb247CiAgICBpZiAobGFiZWwgPT0gbnVsbCkgewogICAgICBjb250aW51ZUluc3RydWN0aW9uID0KICAgICAgICAgIG5ldyBIQ29udGludWUoX2Fic3RyYWN0VmFsdWVEb21haW4sIHRhcmdldCwgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgY29udGludWVJbnN0cnVjdGlvbiA9CiAgICAgICAgICBuZXcgSENvbnRpbnVlLnRvTGFiZWwoX2Fic3RyYWN0VmFsdWVEb21haW4sIGxhYmVsLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIC8vIFN3aXRjaCBjYXNlIGNvbnRpbnVlIHN0YXRlbWVudHMgbXVzdCBiZSBoYW5kbGVkIGJ5IHRoZQogICAgICAvLyBbU3dpdGNoQ2FzZUp1bXBIYW5kbGVyXS4KICAgICAgYXNzZXJ0KCFsYWJlbC50YXJnZXQuaXNTd2l0Y2hDYXNlKTsKICAgIH0KICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShidWlsZGVyLmxvY2Fsc0hhbmRsZXIpOwogICAgYnVpbGRlci5jbG9zZShjb250aW51ZUluc3RydWN0aW9uKTsKICAgIGp1bXBzLmFkZChuZXcgX0p1bXBIYW5kbGVyRW50cnkoY29udGludWVJbnN0cnVjdGlvbiwgbG9jYWxzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hCcmVhayhGdW5jdGlvbiBhY3Rpb24pIHsKICAgIGZvciAoX0p1bXBIYW5kbGVyRW50cnkgZW50cnkgaW4ganVtcHMpIHsKICAgICAgaWYgKGVudHJ5LmlzQnJlYWsoKSkgYWN0aW9uKGVudHJ5Lmp1bXBJbnN0cnVjdGlvbiwgZW50cnkubG9jYWxzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnRpbnVlKEZ1bmN0aW9uIGFjdGlvbikgewogICAgZm9yIChfSnVtcEhhbmRsZXJFbnRyeSBlbnRyeSBpbiBqdW1wcykgewogICAgICBpZiAoZW50cnkuaXNDb250aW51ZSgpKSBhY3Rpb24oZW50cnkuanVtcEluc3RydWN0aW9uLCBlbnRyeS5sb2NhbHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNBbnlDb250aW51ZSgpIHsKICAgIGZvciAoX0p1bXBIYW5kbGVyRW50cnkgZW50cnkgaW4ganVtcHMpIHsKICAgICAgaWYgKGVudHJ5LmlzQ29udGludWUoKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FueUJyZWFrKCkgewogICAgZm9yIChfSnVtcEhhbmRsZXJFbnRyeSBlbnRyeSBpbiBqdW1wcykgewogICAgICBpZiAoZW50cnkuaXNCcmVhaygpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICAvLyBUaGUgbWFwcGluZyBmcm9tIFRhcmdldEVsZW1lbnQgdG8gSnVtcEhhbmRsZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KICAgIGJ1aWxkZXIuanVtcFRhcmdldHMucmVtb3ZlKHRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gZ2V0IGxhYmVscyB7CiAgICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gcmVzdWx0ID0gbnVsbDsKICAgIGZvciAoTGFiZWxEZWZpbml0aW9uIGVsZW1lbnQgaW4gdGFyZ2V0LmxhYmVscykgewogICAgICByZXN1bHQgPz89IDxMYWJlbERlZmluaXRpb24+W107CiAgICAgIHJlc3VsdC5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0ID8/IGNvbnN0IDxMYWJlbERlZmluaXRpb24+W107CiAgfQp9CgovLy8gU3BlY2lhbCBbSnVtcEhhbmRsZXJdIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gaGFuZGxlIGNvbnRpbnVlIHN0YXRlbWVudHMKLy8vIHRhcmdldGluZyBzd2l0Y2ggY2FzZXMuCmFic3RyYWN0IGNsYXNzIFN3aXRjaENhc2VKdW1wSGFuZGxlciBleHRlbmRzIFRhcmdldEp1bXBIYW5kbGVyIHsKICAvLy8gTWFwIGZyb20gc3dpdGNoIGNhc2UgdGFyZ2V0cyB0byBpbmRpY2VzIHVzZWQgdG8gZW5jb2RlIHRoZSBmbG93IG9mIHRoZQogIC8vLyBzd2l0Y2ggY2FzZSBsb29wLgogIGZpbmFsIE1hcDxKdW1wVGFyZ2V0LCBpbnQ+IHRhcmdldEluZGV4TWFwID0gbmV3IE1hcDxKdW1wVGFyZ2V0LCBpbnQ+KCk7CgogIFN3aXRjaENhc2VKdW1wSGFuZGxlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlciwgSnVtcFRhcmdldCB0YXJnZXQpCiAgICAgIDogc3VwZXIoYnVpbGRlciwgdGFyZ2V0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUJyZWFrKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSkgewogICAgaWYgKGxhYmVsID09IG51bGwpIHsKICAgICAgLy8gQ3JlYXRlcyBhIHNwZWNpYWwgYnJlYWsgaW5zdHJ1Y3Rpb24gZm9yIHRoZSBzeW50aGV0aWMgbG9vcCBnZW5lcmF0ZWQKICAgICAgLy8gZm9yIGEgc3dpdGNoIHN0YXRlbWVudCB3aXRoIGNvbnRpbnVlIHN0YXRlbWVudHMuIFNlZQogICAgICAvLyBbU3NhRnJvbUFzdE1peGluLmJ1aWxkQ29tcGxleFN3aXRjaFN0YXRlbWVudF0gZm9yIGRldGFpbC4KCiAgICAgIEhJbnN0cnVjdGlvbiBicmVha0luc3RydWN0aW9uID0gbmV3IEhCcmVhaygKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCB0YXJnZXQsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgYnJlYWtTd2l0Y2hDb250aW51ZUxvb3A6IHRydWUpOwogICAgICBMb2NhbHNIYW5kbGVyIGxvY2FscyA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20oYnVpbGRlci5sb2NhbHNIYW5kbGVyKTsKICAgICAgYnVpbGRlci5jbG9zZShicmVha0luc3RydWN0aW9uKTsKICAgICAganVtcHMuYWRkKG5ldyBfSnVtcEhhbmRsZXJFbnRyeShicmVha0luc3RydWN0aW9uLCBsb2NhbHMpKTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLmdlbmVyYXRlQnJlYWsoc291cmNlSW5mb3JtYXRpb24sIGxhYmVsKTsKICAgIH0KICB9CgogIGJvb2wgaXNDb250aW51ZVRvU3dpdGNoQ2FzZShMYWJlbERlZmluaXRpb24gbGFiZWwpIHsKICAgIHJldHVybiBsYWJlbCAhPSBudWxsICYmIHRhcmdldEluZGV4TWFwLmNvbnRhaW5zS2V5KGxhYmVsLnRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQ29udGludWUoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIFtMYWJlbERlZmluaXRpb24gbGFiZWxdKSB7CiAgICBpZiAoaXNDb250aW51ZVRvU3dpdGNoQ2FzZShsYWJlbCkpIHsKICAgICAgLy8gQ3JlYXRlcyB0aGUgc3BlY2lhbCBpbnN0cnVjdGlvbnMgJ2xhYmVsID0gaTsgY29udGludWUgbDsnIHVzZWQgaW4KICAgICAgLy8gc3dpdGNoIHN0YXRlbWVudHMgd2l0aCBjb250aW51ZSBzdGF0ZW1lbnRzLiBTZWUKICAgICAgLy8gW1NzYUZyb21Bc3RNaXhpbi5idWlsZENvbXBsZXhTd2l0Y2hTdGF0ZW1lbnRdIGZvciBkZXRhaWwuCgogICAgICBhc3NlcnQobGFiZWwgIT0gbnVsbCk7CiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IGJ1aWxkZXIuZ3JhcGgKICAgICAgICAgIC5hZGRDb25zdGFudEludCh0YXJnZXRJbmRleE1hcFtsYWJlbC50YXJnZXRdLCBidWlsZGVyLmNsb3NlZFdvcmxkKTsKICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKHRhcmdldCwgdmFsdWUpOwoKICAgICAgYXNzZXJ0KGxhYmVsLnRhcmdldC5sYWJlbHMuY29udGFpbnMobGFiZWwpKTsKICAgICAgSEluc3RydWN0aW9uIGNvbnRpbnVlSW5zdHJ1Y3Rpb24gPQogICAgICAgICAgbmV3IEhDb250aW51ZShfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdGFyZ2V0LCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShidWlsZGVyLmxvY2Fsc0hhbmRsZXIpOwogICAgICBidWlsZGVyLmNsb3NlKGNvbnRpbnVlSW5zdHJ1Y3Rpb24pOwogICAgICBqdW1wcy5hZGQobmV3IF9KdW1wSGFuZGxlckVudHJ5KGNvbnRpbnVlSW5zdHJ1Y3Rpb24sIGxvY2FscykpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIuZ2VuZXJhdGVDb250aW51ZShzb3VyY2VJbmZvcm1hdGlvbiwgbGFiZWwpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIC8vIFRoZSBtYXBwaW5nIGZyb20gVGFyZ2V0RWxlbWVudCB0byBKdW1wSGFuZGxlciBpcyBubyBsb25nZXIgbmVlZGVkLgogICAgZm9yIChKdW1wVGFyZ2V0IHRhcmdldCBpbiB0YXJnZXRJbmRleE1hcC5rZXlzKSB7CiAgICAgIGJ1aWxkZXIuanVtcFRhcmdldHMucmVtb3ZlKHRhcmdldCk7CiAgICB9CiAgICBzdXBlci5jbG9zZSgpOwogIH0KfQqA+QBOTjwBGSExKAEeHhUBKRofHi81OAIBHUozBDogPSBMGEEZFhAbJAIBS00NLyUBIgEMOiE2QAQBDD0hNkMEAQwpDCwMEgwiDB8BDEEMIQIBSARLSDEnDBsnAUAgKDEoBAEyLwEMOiEjGRlHDRlOBkolQAQBDD0hJhkcSg0cUUAiKgZKKEMEAQwnLUgGBAEMKi1LBgQBDBotKwYSBAEMFy0oBhIEAQwRSigEAQwlKTUmGwYwBAIBTBxBTRhKAUogAQw6IRlOPkMBMjsqTCdCDTUGBAE3RgQBDD0hKUs5QwEdKU44ATMpSkwqRQ04BgQBDBFKNSoGEwQCASpwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvanVtcF9oYW5kbGVyLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL2tlcm5lbF9zdHJpbmdfYnVpbGRlci5kYXJ0ieEvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnYnVpbGRlcl9rZXJuZWwuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CgovLy8gVmlzaXRzIGFuZCBjb25jYXRlbmF0ZXMgdGhlIGV4cHJlc3Npb25zIGluIGEgc3RyaW5nIGNvbmNhdGVuYXRpb24uCmNsYXNzIEtlcm5lbFN0cmluZ0J1aWxkZXIgZXh0ZW5kcyBpci5WaXNpdG9yIHsKICBmaW5hbCBLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlcjsKCiAgLy8vIFRoZSBzdHJpbmcgdmFsdWUgZ2VuZXJhdGVkIHNvIGZhci4KICBISW5zdHJ1Y3Rpb24gcmVzdWx0ID0gbnVsbDsKCiAgS2VybmVsU3RyaW5nQnVpbGRlcih0aGlzLmJ1aWxkZXIpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBidWlsZGVyLmNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdE5vZGUoaXIuTm9kZSBub2RlKSB7CiAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAnVW5leHBlY3RlZCBub2RlOiAkbm9kZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0RXhwcmVzc2lvbihpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIG5vZGUuYWNjZXB0KGJ1aWxkZXIpOwogICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24gPSBidWlsZGVyLnBvcCgpOwoKICAgIC8vIFdlIHdhbnQgdG8gdXNlIEhTdHJpbmdpZnkgd2hlbjoKICAgIC8vICAgMS4gVGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGEgcHJpbWl0aXZlIHR5cGUsIGJlY2F1c2UgaXQgbWlnaHQgZ2V0CiAgICAvLyAgICAgIGNvbnN0YW50LWZvbGRlZCBhbmQgY29kZWdlbiBoYXMgc29tZSB0cmlja3Mgd2l0aCBKYXZhU2NyaXB0CiAgICAvLyAgICAgIGNvbnZlcnNpb25zLgogICAgLy8gICAyLiBUaGUgdmFsdWUgY2FuIGJlIHByaW1pdGl2ZSwgYmVjYXVzZSB0aGUgbGlicmFyeSBzdHJpbmdpZmllciBoYXMKICAgIC8vICAgICAgZmFzdC1wYXRoIGNvZGUgZm9yIG1vc3QgcHJpbWl0aXZlcy4KICAgIGlmIChleHByZXNzaW9uLmlzUHJpbWl0aXZlKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICBhcHBlbmQoc3RyaW5naWZ5KGV4cHJlc3Npb24pKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBJZiB3ZSBkZWNpZGUgdG8gZG8gaW5saW5pbmcgYmVmb3JlIGZpbmlzaGluZyBjb25zdHJ1Y3RpbmcKICAgIC8vIHRoZSBjb250cm9sIGZsb3cgZ3JhcGgsIHdlJ2Qgd2FudCB0byBkbyB0aGUgb3B0aW1pemF0aW9uIG9mCiAgICAvLyBjYWxsaW5nIHRvU3RyaW5nIGhlcmUgaWYgdGhlIHR5cGUgaXMgcHJvdmFibHkgYSBzdHJpbmcgcmF0aGVyIHRoYW4gaW4gdGhlCiAgICAvLyBvcHRpbWl6YXRpb24gcGhhc2UgKHdoaWNoIGlzIHdoZXJlIHdlIGN1cnJlbnRseSBkbyBpdCkuCgogICAgYXBwZW5kKHN0cmluZ2lmeShleHByZXNzaW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIHZvaWQgYXBwZW5kKEhJbnN0cnVjdGlvbiBleHByZXNzaW9uKSB7CiAgICByZXN1bHQgPSAocmVzdWx0ID09IG51bGwpID8gZXhwcmVzc2lvbiA6IGNvbmNhdChyZXN1bHQsIGV4cHJlc3Npb24pOwogIH0KCiAgSEluc3RydWN0aW9uIGNvbmNhdChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0KSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPQogICAgICAgIG5ldyBIU3RyaW5nQ29uY2F0KGxlZnQsIHJpZ2h0LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKTsKICAgIGJ1aWxkZXIuYWRkKGluc3RydWN0aW9uKTsKICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICB9CgogIEhJbnN0cnVjdGlvbiBzdHJpbmdpZnkoSEluc3RydWN0aW9uIGV4cHJlc3Npb24pIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9CiAgICAgICAgbmV3IEhTdHJpbmdpZnkoZXhwcmVzc2lvbiwgX2Fic3RyYWN0VmFsdWVEb21haW4uc3RyaW5nVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uOwogICAgYnVpbGRlci5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgcmV0dXJuIGluc3RydWN0aW9uOwogIH0KfQpOAE5OPAEoARkxHhUBRy8nASkeASUBMi8BDCNDBAEMLxotASdMSBlMMEolDgYBUUNRPwEjBAEMPx4EASlJBAE/H0keGAQBNB9EPh4YBAIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9rZXJuZWxfc3RyaW5nX2J1aWxkZXIuZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvbG9jYWxzX2hhbmRsZXIuZGFydMAAcccvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2Nsb3N1cmUuZGFydCcgc2hvdyBKUmVjb3JkRmllbGQsIEpDbG9zdXJlRmllbGQ7CmltcG9ydCAnLi4vanNfbW9kZWwvbG9jYWxzLmRhcnQnIHNob3cgSkxvY2FsOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKaW1wb3J0ICdidWlsZGVyX2tlcm5lbC5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlcy5kYXJ0JzsKCi8vLyBLZWVwcyB0cmFjayBvZiBsb2NhbHMgKGluY2x1ZGluZyBwYXJhbWV0ZXJzIGFuZCBwaGlzKSB3aGVuIGJ1aWxkaW5nLiBUaGUKLy8vICd0aGlzJyByZWZlcmVuY2UgaXMgdHJlYXRlZCBhcyBwYXJhbWV0ZXIgYW5kIGhlbmNlIGhhbmRsZWQgYnkgdGhpcyBjbGFzcywKLy8vIHRvby4KY2xhc3MgTG9jYWxzSGFuZGxlciB7CiAgLy8vIFRoZSB2YWx1ZXMgb2YgbG9jYWxzIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGFjY2Vzc2VkICh3aXRob3V0IHJlZGlyZWN0aW9ucwogIC8vLyB0byBib3hlcyBvciBjbG9zdXJlLWZpZWxkcykuCiAgLy8vCiAgLy8vIFtkaXJlY3RMb2NhbHNdIGlzIGl0ZXJhdGVkLCBzbyBpdCBpcyAiaW5zZXJ0aW9uIG9yZGVyZWQiIHRvIG1ha2UgdGhlCiAgLy8vIGl0ZXJhdGlvbiBvcmRlciBhIGZ1bmN0aW9uIG9ubHkgb2YgaW5zZXJ0aW9ucyBhbmQgbm90IGEgZnVuY3Rpb24gb2YKICAvLy8gZS5nLiBFbGVtZW50IGhhc2ggY29kZXMuICBJJ2QgcHJlZmVyIHRvIHVzZSBhIFNvcnRlZE1hcCBidXQgc29tZSBlbGVtZW50cwogIC8vLyBkb24ndCBoYXZlIHNvdXJjZSBsb2NhdGlvbnMgZm9yIFtFbGVtZW50cy5jb21wYXJlQnlQb3NpdGlvbl0uCiAgTWFwPExvY2FsLCBISW5zdHJ1Y3Rpb24+IGRpcmVjdExvY2FscyA9IG5ldyBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4oKTsKICBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PiByZWRpcmVjdGlvbk1hcHBpbmcgPSBuZXcgTWFwPExvY2FsLCBGaWVsZEVudGl0eT4oKTsKICBmaW5hbCBLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlcjsKICBTY29wZUluZm8gc2NvcGVJbmZvOwogIE1hcDxUeXBlVmFyaWFibGVUeXBlLCBUeXBlVmFyaWFibGVMb2NhbD4gdHlwZVZhcmlhYmxlTG9jYWxzID0KICAgICAgbmV3IE1hcDxUeXBlVmFyaWFibGVUeXBlLCBUeXBlVmFyaWFibGVMb2NhbD4oKTsKICBmaW5hbCBFbnRpdHkgZXhlY3V0YWJsZUNvbnRleHQ7CiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQ7CgogIC8vLyBUaGUgdHlwZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZS4gYG51bGxgIGlmIGluIGEgc3RhdGljIGNvbnRleHQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdGhlIHR5cGUgb2YgYHRoaXNgIGlzIHRoZSBjdXJyZW50IGNvbnRleHQsIGFuZCBpcyBvZnRlbiB0aGUKICAvLy8gJ3RoaXMgdHlwZScgb2YgdGhlIGVuY2xvc2luZyBjbGFzcyBvZiBhIG1lbWJlci4KICAvLy8KICAvLy8gSWYgdGhlIGN1cnJlbnQgaW5zdGFuY2UgaXMgY29uY3JldGUsIHdlIGNhbiBoYW5kbGUgZml4ZWQgdHlwZSBhcmd1bWVudCBpbgogIC8vLyBjYXNlIG9mIGlubGluaW5nLiBGb3IgaW5zdGFuY2UsIGNoZWNraW5nIGAnZm9vJ2AgYWdhaW5zdCBgU3RyaW5nYCBpbnN0ZWFkCiAgLy8vIG9mIGBUYCBpbiBgbWFpbmA6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBGb288VD4gewogIC8vLyAgICAgICBUIGZpZWxkOwogIC8vLyAgICAgICBGb28odGhpcy5maWVsZCk7CiAgLy8vICAgICB9CiAgLy8vICAgICBtYWluKCkgewogIC8vLyAgICAgICBuZXcgRm9vPFN0cmluZz4oJ2ZvbycpOwogIC8vLyAgICAgfQogIC8vLwogIGZpbmFsIEludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlOwoKICBmaW5hbCBOYXRpdmVEYXRhIF9uYXRpdmVEYXRhOwoKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgX2ludGVyY2VwdG9yRGF0YTsKCiAgTG9jYWxzSGFuZGxlcih0aGlzLmJ1aWxkZXIsIHRoaXMuZXhlY3V0YWJsZUNvbnRleHQsIHRoaXMubWVtYmVyQ29udGV4dCwKICAgICAgdGhpcy5pbnN0YW5jZVR5cGUsIHRoaXMuX25hdGl2ZURhdGEsIHRoaXMuX2ludGVyY2VwdG9yRGF0YSk7CgogIEpDbG9zZWRXb3JsZCBnZXQgX2Nsb3NlZFdvcmxkID0+IGJ1aWxkZXIuY2xvc2VkV29ybGQ7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnZXQgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMgPT4KICAgICAgYnVpbGRlci5nbG9iYWxJbmZlcmVuY2VSZXN1bHRzOwoKICAvLy8gU3Vic3RpdHV0ZWQgdHlwZSB2YXJpYWJsZXMgb2NjdXJyaW5nIGluIFt0eXBlXSBpbnRvIHRoZSBjb250ZXh0IG9mCiAgLy8vIFtjb250ZXh0Q2xhc3NdLgogIERhcnRUeXBlIHN1YnN0SW5Db250ZXh0KERhcnRUeXBlIHR5cGUpIHsKICAgIERhcnRUeXBlIG5ld1R5cGUgPSB0eXBlOwogICAgaWYgKGluc3RhbmNlVHlwZSAhPSBudWxsKSB7CiAgICAgIENsYXNzRW50aXR5IHR5cGVDb250ZXh0ID0gRGFydFR5cGVzLmdldENsYXNzQ29udGV4dChuZXdUeXBlKTsKICAgICAgaWYgKHR5cGVDb250ZXh0ICE9IG51bGwpIHsKICAgICAgICBuZXdUeXBlID0gX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcy5zdWJzdEJ5Q29udGV4dCgKICAgICAgICAgICAgbmV3VHlwZSwKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcy5hc0luc3RhbmNlT2YoCiAgICAgICAgICAgICAgICBfY2xvc2VkV29ybGQuZGFydFR5cGVzLmdldFRoaXNUeXBlKGluc3RhbmNlVHlwZS5lbGVtZW50KSwKICAgICAgICAgICAgICAgIHR5cGVDb250ZXh0KSk7CiAgICAgIH0KICAgICAgaWYgKCFpbnN0YW5jZVR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgbmV3VHlwZSA9IF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMuc3Vic3RCeUNvbnRleHQobmV3VHlwZSwgaW5zdGFuY2VUeXBlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ld1R5cGU7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIG5ldyBbTG9jYWxzSGFuZGxlcl0gYmFzZWQgb24gW290aGVyXS4gV2Ugb25seSBuZWVkIHRvCiAgLy8vIGNvcHkgdGhlIFtkaXJlY3RMb2NhbHNdLCBzaW5jZSB0aGUgb3RoZXIgZmllbGRzIGNhbiBiZSBzaGFyZWQKICAvLy8gdGhyb3VnaG91dCB0aGUgQVNUIHZpc2l0LgogIExvY2Fsc0hhbmRsZXIuZnJvbShMb2NhbHNIYW5kbGVyIG90aGVyKQogICAgICA6IGRpcmVjdExvY2FscyA9IG5ldyBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4uZnJvbShvdGhlci5kaXJlY3RMb2NhbHMpLAogICAgICAgIHJlZGlyZWN0aW9uTWFwcGluZyA9IG90aGVyLnJlZGlyZWN0aW9uTWFwcGluZywKICAgICAgICBleGVjdXRhYmxlQ29udGV4dCA9IG90aGVyLmV4ZWN1dGFibGVDb250ZXh0LAogICAgICAgIG1lbWJlckNvbnRleHQgPSBvdGhlci5tZW1iZXJDb250ZXh0LAogICAgICAgIGluc3RhbmNlVHlwZSA9IG90aGVyLmluc3RhbmNlVHlwZSwKICAgICAgICBidWlsZGVyID0gb3RoZXIuYnVpbGRlciwKICAgICAgICBzY29wZUluZm8gPSBvdGhlci5zY29wZUluZm8sCiAgICAgICAgX25hdGl2ZURhdGEgPSBvdGhlci5fbmF0aXZlRGF0YSwKICAgICAgICBfaW50ZXJjZXB0b3JEYXRhID0gb3RoZXIuX2ludGVyY2VwdG9yRGF0YSwKICAgICAgICBhY3RpdmF0aW9uVmFyaWFibGVzID0gb3RoZXIuYWN0aXZhdGlvblZhcmlhYmxlcywKICAgICAgICBjYWNoZWRUeXBlT2ZUaGlzID0gb3RoZXIuY2FjaGVkVHlwZU9mVGhpcywKICAgICAgICBjYWNoZWRUeXBlc09mQ2FwdHVyZWRWYXJpYWJsZXMgPSBvdGhlci5jYWNoZWRUeXBlc09mQ2FwdHVyZWRWYXJpYWJsZXM7CgogIC8vLyBSZWRpcmVjdHMgYWNjZXNzZXMgZnJvbSBlbGVtZW50IFtmcm9tXSB0byBlbGVtZW50IFt0b10uIFRoZSBbdG9dIGVsZW1lbnQKICAvLy8gbXVzdCBiZSBhIGJveGVkIHZhcmlhYmxlIG9yIGEgdmFyaWFibGUgdGhhdCBpcyBzdG9yZWQgaW4gYSBjbG9zdXJlLWZpZWxkLgogIHZvaWQgcmVkaXJlY3RFbGVtZW50KExvY2FsIGZyb20sIEZpZWxkRW50aXR5IHRvKSB7CiAgICBhc3NlcnQocmVkaXJlY3Rpb25NYXBwaW5nW2Zyb21dID09IG51bGwpOwogICAgcmVkaXJlY3Rpb25NYXBwaW5nW2Zyb21dID0gdG87CiAgICBhc3NlcnQoaXNTdG9yZWRJbkNsb3N1cmVGaWVsZChmcm9tKSB8fCBpc0JveGVkKGZyb20pKTsKICB9CgogIEhJbnN0cnVjdGlvbiBjcmVhdGVCb3goU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBib3ggPSBuZXcgSENyZWF0ZUJveChfYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSkKICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgYnVpbGRlci5hZGQoYm94KTsKICAgIHJldHVybiBib3g7CiAgfQoKICAvLy8gSWYgdGhlIHNjb3BlIChmdW5jdGlvbiBvciBsb29wKSBbbm9kZV0gaGFzIGNhcHR1cmVkIHZhcmlhYmxlcyB0aGVuIHRoaXMKICAvLy8gbWV0aG9kIGNyZWF0ZXMgYSBib3ggYW5kIHNldHMgdXAgdGhlIHJlZGlyZWN0aW9ucy4KICB2b2lkIGVudGVyU2NvcGUoCiAgICAgIENhcHR1cmVkU2NvcGUgY2xvc3VyZUluZm8sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7Ym9vbCBmb3JHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5OiBmYWxzZSwgSEluc3RydWN0aW9uIGlubGluZWRCb3h9KSB7CiAgICAvLyBTZWUgaWYgYW55IHZhcmlhYmxlIGluIHRoZSB0b3Atc2NvcGUgb2YgdGhlIGZ1bmN0aW9uIGlzIGNhcHR1cmVkLiBJZiB5ZXMKICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgYm94LW9iamVjdC4KICAgIGlmICghY2xvc3VyZUluZm8ucmVxdWlyZXNDb250ZXh0Qm94KSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gYm94OwogICAgLy8gVGhlIHNjb3BlIGhhcyBjYXB0dXJlZCB2YXJpYWJsZXMuCiAgICBpZiAoZm9yR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keSkgewogICAgICAvLyBUaGUgYm94IGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlciB0byBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgYm9keS4KICAgICAgYm94ID0gaW5saW5lZEJveCA/PwogICAgICAgICAgYnVpbGRlci5hZGRQYXJhbWV0ZXIoCiAgICAgICAgICAgICAgY2xvc3VyZUluZm8uY29udGV4dCwgX2Fic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgYm94ID0gY3JlYXRlQm94KHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICAgIC8vIEFkZCB0aGUgYm94IHRvIHRoZSBrbm93biBsb2NhbHMuCiAgICBkaXJlY3RMb2NhbHNbY2xvc3VyZUluZm8uY29udGV4dF0gPSBib3g7CiAgICAvLyBNYWtlIHN1cmUgdGhhdCBhY2Nlc3NlcyB0byB0aGUgYm94ZWQgbG9jYWxzIGdvIGludG8gdGhlIGJveC4gV2UgYWxzbwogICAgLy8gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXJzIGFyZSBjb3BpZWQgaW50byB0aGUgYm94IGlmIG5lY2Vzc2FyeS4KICAgIGNsb3N1cmVJbmZvLmZvckVhY2hCb3hlZFZhcmlhYmxlKChMb2NhbCBmcm9tLCBGaWVsZEVudGl0eSB0bykgewogICAgICAvLyBUaGUgW2Zyb21dIGNhbiBvbmx5IGJlIGEgcGFyYW1ldGVyIGZvciBmdW5jdGlvbi1zY29wZXMgYW5kIG5vdAogICAgICAvLyBsb29wIHNjb3Blcy4KICAgICAgSkxvY2FsIGpGcm9tID0gZnJvbTsKICAgICAgYm9vbCBpc1BhcmFtZXRlciA9IGpGcm9tLmlzUmVndWxhclBhcmFtZXRlcjsKICAgICAgYXNzZXJ0KGlzUGFyYW1ldGVyICE9IG51bGwpOwogICAgICBpZiAoaXNQYXJhbWV0ZXIgJiYgIWZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHkpIHsKICAgICAgICAvLyBOb3cgdGhhdCB0aGUgcmVkaXJlY3Rpb24gaXMgc2V0IHVwLCB0aGUgdXBkYXRlIHRvIHRoZSBsb2NhbCB3aWxsCiAgICAgICAgLy8gd3JpdGUgdGhlIHBhcmFtZXRlciB2YWx1ZSBpbnRvIHRoZSBib3guCiAgICAgICAgLy8gU3RvcmUgdGhlIGNhcHR1cmVkIHBhcmFtZXRlciBpbiB0aGUgYm94LiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUKICAgICAgICAvLyBiZWZvcmUgd2UgcHV0IHRoZSByZWRpcmVjdGlvbiBpbiBwbGFjZS4KICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG9jYWwgZm9yIGEgZ2VuZXJhdGl2ZQogICAgICAgIC8vIGNvbnN0cnVjdG9yIGJvZHksIGJlY2F1c2UgaXQgcmVjZWl2ZXMgYSBib3ggdGhhdCBhbHJlYWR5CiAgICAgICAgLy8gY29udGFpbnMgdGhlIHVwZGF0ZXMgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLgogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHJlYWRMb2NhbChmcm9tKTsKICAgICAgICByZWRpcmVjdEVsZW1lbnQoZnJvbSwgdG8pOwogICAgICAgIHVwZGF0ZUxvY2FsKGZyb20sIGluc3RydWN0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZWRpcmVjdEVsZW1lbnQoZnJvbSwgdG8pOwogICAgICB9CiAgICB9KTsKICB9CgogIC8vLyBSZXBsYWNlcyB0aGUgY3VycmVudCBib3ggd2l0aCBhIG5ldyBib3ggYW5kIGNvcGllcyBvdmVyIHRoZSBnaXZlbiBsaXN0CiAgLy8vIG9mIGVsZW1lbnRzIGZyb20gdGhlIG9sZCBib3ggaW50byB0aGUgbmV3IGJveC4KICB2b2lkIHVwZGF0ZUNhcHR1cmVCb3goTG9jYWwgY3VycmVudEJveCwgTGlzdDxMb2NhbD4gdG9CZUNvcGllZEVsZW1lbnRzLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gQ3JlYXRlIGEgbmV3IGJveCBhbmQgY29weSBvdmVyIHRoZSB2YWx1ZXMgZnJvbSB0aGUgb2xkIGJveCBpbnRvIHRoZQogICAgLy8gbmV3IG9uZS4KICAgIEhJbnN0cnVjdGlvbiBvbGRCb3ggPSByZWFkTG9jYWwoY3VycmVudEJveCk7CiAgICBISW5zdHJ1Y3Rpb24gbmV3Qm94ID0gY3JlYXRlQm94KHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGZvciAoTG9jYWwgYm94ZWRWYXJpYWJsZSBpbiB0b0JlQ29waWVkRWxlbWVudHMpIHsKICAgICAgLy8gW3JlYWRMb2NhbF0gdXNlcyB0aGUgW2N1cnJlbnRCb3hdIHRvIGZpbmQgaXRzIGJveC4gQnkgcmVwbGFjaW5nIGl0CiAgICAgIC8vIGJlaGluZCBpdHMgYmFjayB3ZSBjYW4gc3RpbGwgZ2V0IHRvIHRoZSBvbGQgdmFsdWVzLgogICAgICB1cGRhdGVMb2NhbChjdXJyZW50Qm94LCBvbGRCb3gpOwogICAgICBISW5zdHJ1Y3Rpb24gb2xkVmFsdWUgPSByZWFkTG9jYWwoYm94ZWRWYXJpYWJsZSk7CiAgICAgIHVwZGF0ZUxvY2FsKGN1cnJlbnRCb3gsIG5ld0JveCk7CiAgICAgIHVwZGF0ZUxvY2FsKGJveGVkVmFyaWFibGUsIG9sZFZhbHVlKTsKICAgIH0KICAgIHVwZGF0ZUxvY2FsKGN1cnJlbnRCb3gsIG5ld0JveCk7CiAgfQoKICAvLy8gRG9jdW1lbnRhdGlvbiB3YW50ZWQgLS0gam9obm5pd2ludGhlcgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IFtmdW5jdGlvbl0gbXVzdCBiZSBhbiBpbXBsZW1lbnRhdGlvbiBlbGVtZW50LgogIHZvaWQgc3RhcnRGdW5jdGlvbigKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIFNjb3BlSW5mbyBzY29wZUluZm8sCiAgICAgIENhcHR1cmVkU2NvcGUgc2NvcGVEYXRhLAogICAgICBNYXA8TG9jYWwsIEFic3RyYWN0VmFsdWU+IHBhcmFtZXRlcnMsCiAgICAgIFNldDxMb2NhbD4gZWxpZGVkUGFyYW1ldGVycywKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keX0pIHsKICAgIHRoaXMuc2NvcGVJbmZvID0gc2NvcGVJbmZvOwoKICAgIHBhcmFtZXRlcnMuZm9yRWFjaCgoTG9jYWwgbG9jYWwsIEFic3RyYWN0VmFsdWUgdHlwZU1hc2spIHsKICAgICAgaWYgKGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keSkgewogICAgICAgIGlmIChzY29wZURhdGEuaXNCb3hlZFZhcmlhYmxlKGxvY2FsKSkgewogICAgICAgICAgLy8gVGhlIHBhcmFtZXRlciB3aWxsIGJlIGEgZmllbGQgaW4gdGhlIGJveCBwYXNzZWQgYXMgdGhlCiAgICAgICAgICAvLyBsYXN0IHBhcmFtZXRlci4gU28gbm8gbmVlZCB0byBoYXZlIGl0LgogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBISW5zdHJ1Y3Rpb24gcGFyYW1ldGVyID0gYnVpbGRlci5hZGRQYXJhbWV0ZXIobG9jYWwsIHR5cGVNYXNrLAogICAgICAgICAgaXNFbGlkZWQ6IGVsaWRlZFBhcmFtZXRlcnMuY29udGFpbnMobG9jYWwpKTsKICAgICAgYnVpbGRlci5wYXJhbWV0ZXJzW2xvY2FsXSA9IHBhcmFtZXRlcjsKICAgICAgZGlyZWN0TG9jYWxzW2xvY2FsXSA9IHBhcmFtZXRlcjsKICAgIH0pOwogICAgYnVpbGRlci5lbGlkZWRQYXJhbWV0ZXJzID0gZWxpZGVkUGFyYW1ldGVyczsKCiAgICBlbnRlclNjb3BlKHNjb3BlRGF0YSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgZm9yR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keTogaXNHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5KTsKCiAgICAvLyBXaGVuIHdlIHJlbW92ZSB0aGUgZWxlbWVudCBtb2RlbCwgd2UgY2FuIGp1c3QgdXNlIHRoZSBmaXJzdCBjaGVjawogICAgLy8gKGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgZWxlbWVudHMgd29uJ3QgYWxsIGJlICpib3RoKiBTY29wZUluZm9zIGFuZAogICAgLy8gQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mb3MpLgogICAgaWYgKHNjb3BlSW5mbyBpcyBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvICYmIHNjb3BlSW5mby5pc0Nsb3N1cmUpIHsKICAgICAgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBjbG9zdXJlRGF0YSA9IHNjb3BlSW5mbzsKICAgICAgLy8gSWYgdGhlIGZyZWVWYXJpYWJsZU1hcHBpbmcgaXMgbm90IGVtcHR5LCB0aGVuIHRoaXMgZnVuY3Rpb24gd2FzIGEKICAgICAgLy8gbmVzdGVkIGNsb3N1cmUgdGhhdCBjYXB0dXJlcyB2YXJpYWJsZXMuIFJlZGlyZWN0IHRoZSBjYXB0dXJlZAogICAgICAvLyB2YXJpYWJsZXMgdG8gZmllbGRzIGluIHRoZSBjbG9zdXJlLgogICAgICBjbG9zdXJlRGF0YS5mb3JFYWNoRnJlZVZhcmlhYmxlKChMb2NhbCBmcm9tLCBGaWVsZEVudGl0eSB0bykgewogICAgICAgIHJlZGlyZWN0RWxlbWVudChmcm9tLCB0byk7CiAgICAgIH0pOwogICAgICAvLyBJbnNpZGUgY2xvc3VyZSByZWRpcmVjdCByZWZlcmVuY2VzIHRvIGl0c2VsZiB0byBbOnRoaXM6XS4KICAgICAgSFRoaXMgdGhpc0luc3RydWN0aW9uID0KICAgICAgICAgIG5ldyBIVGhpcyhjbG9zdXJlRGF0YS50aGlzTG9jYWwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKTsKICAgICAgYnVpbGRlci5ncmFwaC50aGlzSW5zdHJ1Y3Rpb24gPSB0aGlzSW5zdHJ1Y3Rpb247CiAgICAgIGJ1aWxkZXIuZ3JhcGguZW50cnkuYWRkQXRFbnRyeSh0aGlzSW5zdHJ1Y3Rpb24pOwogICAgICB1cGRhdGVMb2NhbChjbG9zdXJlRGF0YS5jbG9zdXJlRW50aXR5LCB0aGlzSW5zdHJ1Y3Rpb24pOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgLy8gT25jZSBjbG9zdXJlcyBoYXZlIGJlZW4gbWFwcGVkIHRvIGNsYXNzZXMgdGhlaXIgaW5zdGFuY2UgbWVtYmVycyBtaWdodAogICAgICAvLyBub3QgaGF2ZSBhbnkgdGhpc0VsZW1lbnQgaWYgdGhlIGNsb3N1cmUgd2FzIGNyZWF0ZWQgaW5zaWRlIGEgc3RhdGljCiAgICAgIC8vIGNvbnRleHQuCiAgICAgIEhUaGlzIHRoaXNJbnN0cnVjdGlvbiA9IG5ldyBIVGhpcyhzY29wZUluZm8udGhpc0xvY2FsLCBnZXRUeXBlT2ZUaGlzKCkpOwogICAgICBidWlsZGVyLmdyYXBoLnRoaXNJbnN0cnVjdGlvbiA9IHRoaXNJbnN0cnVjdGlvbjsKICAgICAgYnVpbGRlci5ncmFwaC5lbnRyeS5hZGRBdEVudHJ5KHRoaXNJbnN0cnVjdGlvbik7CiAgICAgIGRpcmVjdExvY2Fsc1tzY29wZUluZm8udGhpc0xvY2FsXSA9IHRoaXNJbnN0cnVjdGlvbjsKICAgIH0KCiAgICAvLyBJZiB0aGlzIG1ldGhvZCBpcyBhbiBpbnRlcmNlcHRlZCBtZXRob2QsIGFkZCB0aGUgZXh0cmEKICAgIC8vIHBhcmFtZXRlciB0byBpdCwgdGhhdCBpcyB0aGUgYWN0dWFsIHJlY2VpdmVyIGZvciBpbnRlcmNlcHRlZAogICAgLy8gY2xhc3Nlcywgb3IgdGhlIHNhbWUgYXMgWzp0aGlzOl0gZm9yIG5vbi1pbnRlcmNlcHRlZCBjbGFzc2VzLgogICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKCiAgICAvLyBXaGVuIHRoZSBjbGFzcyBleHRlbmRzIGEgbmF0aXZlIGNsYXNzLCB0aGUgaW5zdGFuY2UgaXMgcHJlLWNvbnN0cnVjdGVkCiAgICAvLyBhbmQgcGFzc2VkIHRvIHRoZSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIGZhY3RvcnkgZnVuY3Rpb24gYXMgYSBwYXJhbWV0ZXIuCiAgICAvLyBJbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyB0aGUgb2JqZWN0LCB0aGUgY29uc3RydWN0b3IKICAgIC8vICd1cGdyYWRlcycgdGhlIG5hdGl2ZSBzdWJjbGFzcyBvYmplY3QgYnkgaW5pdGlhbGl6aW5nIHRoZSBEYXJ0IGZpZWxkcy4KICAgIGJvb2wgaXNOYXRpdmVVcGdyYWRlRmFjdG9yeSA9IGVsZW1lbnQgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYKICAgICAgICBlbGVtZW50LmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yICYmCiAgICAgICAgX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKTsKICAgIGlmIChfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRNZXRob2QoZWxlbWVudCkpIHsKICAgICAgYm9vbCBpc0ludGVyY2VwdGVkQ2xhc3MgPSBfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRDbGFzcyhjbHMpOwogICAgICBTdHJpbmcgbmFtZSA9IGlzSW50ZXJjZXB0ZWRDbGFzcyA/ICdyZWNlaXZlcicgOiAnXyc7CiAgICAgIFN5bnRoZXRpY0xvY2FsIHBhcmFtZXRlciA9IGNyZWF0ZUxvY2FsKG5hbWUpOwogICAgICBIUGFyYW1ldGVyVmFsdWUgdmFsdWUgPSBuZXcgSFBhcmFtZXRlclZhbHVlKHBhcmFtZXRlciwgZ2V0VHlwZU9mVGhpcygpKTsKICAgICAgYnVpbGRlci5ncmFwaC5leHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyID0gdmFsdWU7CiAgICAgIGJ1aWxkZXIuZ3JhcGguZW50cnkuYWRkQWZ0ZXIoZGlyZWN0TG9jYWxzW3Njb3BlSW5mby50aGlzTG9jYWxdLCB2YWx1ZSk7CiAgICAgIGlmIChidWlsZGVyLmxhc3RBZGRlZFBhcmFtZXRlciA9PSBudWxsKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIGluc2VydGVkLCBtYWtlIHN1cmUgaXQgc3RheXMgZmlyc3QuCiAgICAgICAgYnVpbGRlci5sYXN0QWRkZWRQYXJhbWV0ZXIgPSB2YWx1ZTsKICAgICAgfQogICAgICBpZiAoaXNJbnRlcmNlcHRlZENsYXNzKSB7CiAgICAgICAgLy8gT25seSB1c2UgdGhlIGV4dHJhIHBhcmFtZXRlciBpbiBpbnRlcmNlcHRlZCBjbGFzc2VzLgogICAgICAgIGRpcmVjdExvY2Fsc1tzY29wZUluZm8udGhpc0xvY2FsXSA9IHZhbHVlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzTmF0aXZlVXBncmFkZUZhY3RvcnkpIHsKICAgICAgU3ludGhldGljTG9jYWwgcGFyYW1ldGVyID0gY3JlYXRlTG9jYWwoJ3JlY2VpdmVyJyk7CiAgICAgIC8vIFVubGlrZSBgdGhpc2AsIHJlY2VpdmVyIGlzIG51bGxhYmxlIHNpbmNlIGRpcmVjdCBjYWxscyB0byBnZW5lcmF0aXZlCiAgICAgIC8vIGNvbnN0cnVjdG9yIGNhbGwgdGhlIGNvbnN0cnVjdG9yIHdpdGggYG51bGxgLgogICAgICBIUGFyYW1ldGVyVmFsdWUgdmFsdWUgPSBuZXcgSFBhcmFtZXRlclZhbHVlKAogICAgICAgICAgcGFyYW1ldGVyLCBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOdWxsYWJsZUV4YWN0KGNscykpOwogICAgICBidWlsZGVyLmdyYXBoLmV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXIgPSB2YWx1ZTsKICAgICAgYnVpbGRlci5ncmFwaC5lbnRyeS5hZGRBdEVudHJ5KHZhbHVlKTsKICAgICAgaWYgKGJ1aWxkZXIubGFzdEFkZGVkUGFyYW1ldGVyID09IG51bGwpIHsKICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaW5zZXJ0ZWQsIG1ha2Ugc3VyZSBpdCBzdGF5cyBmaXJzdC4KICAgICAgICBidWlsZGVyLmxhc3RBZGRlZFBhcmFtZXRlciA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBsb2NhbCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkuIEJveGVkIHZhcmlhYmxlcyBvcgogIC8vLyBjYXB0dXJlZCB2YXJpYWJsZXMgdGhhdCBhcmUgc3RvcmVkIGluIHRoZSBjbG9zdXJlLWZpZWxkIHJldHVybiBbOmZhbHNlOl0uCiAgYm9vbCBpc0FjY2Vzc2VkRGlyZWN0bHkoTG9jYWwgbG9jYWwpIHsKICAgIGFzc2VydChsb2NhbCAhPSBudWxsKTsKICAgIHJldHVybiAhcmVkaXJlY3Rpb25NYXBwaW5nLmNvbnRhaW5zS2V5KGxvY2FsKSAmJgogICAgICAgICFzY29wZUluZm8ubG9jYWxJc1VzZWRJblRyeU9yU3luYyhsb2NhbCk7CiAgfQoKICBib29sIGlzU3RvcmVkSW5DbG9zdXJlRmllbGQoTG9jYWwgbG9jYWwpIHsKICAgIGFzc2VydChsb2NhbCAhPSBudWxsKTsKICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoc2NvcGVJbmZvIGlzISBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvKSByZXR1cm4gZmFsc2U7CiAgICBGaWVsZEVudGl0eSByZWRpcmVjdFRhcmdldCA9IHJlZGlyZWN0aW9uTWFwcGluZ1tsb2NhbF07CiAgICBpZiAocmVkaXJlY3RUYXJnZXQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHJlZGlyZWN0VGFyZ2V0IGlzIEpDbG9zdXJlRmllbGQ7CiAgfQoKICBib29sIGlzQm94ZWQoTG9jYWwgbG9jYWwpIHsKICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNTdG9yZWRJbkNsb3N1cmVGaWVsZChsb2NhbCkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiByZWRpcmVjdGlvbk1hcHBpbmcuY29udGFpbnNLZXkobG9jYWwpOwogIH0KCiAgYm9vbCBfaXNVc2VkSW5UcnlPckdlbmVyYXRvcihMb2NhbCBsb2NhbCkgewogICAgcmV0dXJuIHNjb3BlSW5mby5sb2NhbElzVXNlZEluVHJ5T3JTeW5jKGxvY2FsKTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtISW5zdHJ1Y3Rpb25dIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC4gSWYgdGhlIGVsZW1lbnQgaXMKICAvLy8gYm94ZWQgb3Igc3RvcmVkIGluIGEgY2xvc3VyZSB0aGVuIHRoZSBtZXRob2QgZ2VuZXJhdGVzIGNvZGUgdG8gcmV0cmlldmUKICAvLy8gdGhlIHZhbHVlLgogIEhJbnN0cnVjdGlvbiByZWFkTG9jYWwoTG9jYWwgbG9jYWwsIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSB7CiAgICAgIGlmIChkaXJlY3RMb2NhbHNbbG9jYWxdID09IG51bGwpIHsKICAgICAgICBpZiAobG9jYWwgaXMgVHlwZVZhcmlhYmxlTG9jYWwpIHsKICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgIlJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlIGZvciAkbG9jYWwgIgogICAgICAgICAgICAgICJpbiAke2RpcmVjdExvY2Fscy5rZXlzfSBmb3IgJGV4ZWN1dGFibGVDb250ZXh0LiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICBsb2NhbCwKICAgICAgICAgICAgICAiQ2Fubm90IGZpbmQgdmFsdWUgJGxvY2FsIGluICR7ZGlyZWN0TG9jYWxzLmtleXN9IGZvciAiCiAgICAgICAgICAgICAgIiRleGVjdXRhYmxlQ29udGV4dC4iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gZGlyZWN0TG9jYWxzW2xvY2FsXTsKICAgICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uICE9IG51bGwpIHsKICAgICAgICB2YWx1ZSA9IG5ldyBIUmVmKHZhbHVlLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgYnVpbGRlci5hZGQodmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0gZWxzZSBpZiAoaXNTdG9yZWRJbkNsb3N1cmVGaWVsZChsb2NhbCkpIHsKICAgICAgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBjbG9zdXJlRGF0YSA9IHNjb3BlSW5mbzsKICAgICAgRmllbGRFbnRpdHkgcmVkaXJlY3QgPSByZWRpcmVjdGlvbk1hcHBpbmdbbG9jYWxdOwogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSByZWFkTG9jYWwoY2xvc3VyZURhdGEuY2xvc3VyZUVudGl0eSk7CiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9IGxvY2FsIGlzIEJveExvY2FsCiAgICAgICAgICA/IF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlCiAgICAgICAgICA6IGdldFR5cGVPZkNhcHR1cmVkVmFyaWFibGUocmVkaXJlY3QpOwogICAgICBISW5zdHJ1Y3Rpb24gZmllbGRHZXQgPQogICAgICAgICAgbmV3IEhGaWVsZEdldChyZWRpcmVjdCwgcmVjZWl2ZXIsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYnVpbGRlci5hZGQoZmllbGRHZXQpOwogICAgICByZXR1cm4gZmllbGRHZXQ7CiAgICB9IGVsc2UgaWYgKGlzQm94ZWQobG9jYWwpKSB7CiAgICAgIEZpZWxkRW50aXR5IHJlZGlyZWN0ID0gcmVkaXJlY3Rpb25NYXBwaW5nW2xvY2FsXTsKICAgICAgQm94TG9jYWwgbG9jYWxCb3g7CiAgICAgIC8vIEluIHRoZSBmdW5jdGlvbiB0aGF0IGRlY2xhcmVzIHRoZSBjYXB0dXJlZCB2YXJpYWJsZSB0aGUgYm94IGlzCiAgICAgIC8vIGFjY2Vzc2VkIGFzIGRpcmVjdCBsb2NhbC4gSW5zaWRlIHRoZSBuZXN0ZWQgY2xvc3VyZSB0aGUgYm94IGlzCiAgICAgIC8vIGFjY2Vzc2VkIHRocm91Z2ggYSBjbG9zdXJlLWZpZWxkLgogICAgICAvLyBDYWxsaW5nIFtyZWFkTG9jYWxdIG1ha2VzIHN1cmUgd2UgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgY29kZSB0byBnZXQKICAgICAgLy8gdGhlIGJveC4KICAgICAgaWYgKHJlZGlyZWN0IGlzIEpSZWNvcmRGaWVsZCkgewogICAgICAgIGxvY2FsQm94ID0gcmVkaXJlY3QuYm94OwogICAgICB9CiAgICAgIGFzc2VydChsb2NhbEJveCAhPSBudWxsKTsKCiAgICAgIEhJbnN0cnVjdGlvbiBib3ggPSByZWFkTG9jYWwobG9jYWxCb3gpOwogICAgICBISW5zdHJ1Y3Rpb24gbG9va3VwID0gbmV3IEhGaWVsZEdldChyZWRpcmVjdCwgYm94LAogICAgICAgICAgZ2V0VHlwZU9mQ2FwdHVyZWRWYXJpYWJsZShyZWRpcmVjdCksIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYnVpbGRlci5hZGQobG9va3VwKTsKICAgICAgcmV0dXJuIGxvb2t1cDsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfaXNVc2VkSW5UcnlPckdlbmVyYXRvcihsb2NhbCkpOwogICAgICBITG9jYWxWYWx1ZSBsb2NhbFZhbHVlID0gZ2V0TG9jYWwobG9jYWwpOwogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBuZXcgSExvY2FsR2V0KGxvY2FsLCBsb2NhbFZhbHVlLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYnVpbGRlci5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247CiAgICB9CiAgfQoKICBISW5zdHJ1Y3Rpb24gcmVhZFRoaXMoe1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgSEluc3RydWN0aW9uIHJlcyA9CiAgICAgICAgcmVhZExvY2FsKHNjb3BlSW5mby50aGlzTG9jYWwsIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBpZiAocmVzLmluc3RydWN0aW9uVHlwZSA9PSBudWxsKSB7CiAgICAgIHJlcy5pbnN0cnVjdGlvblR5cGUgPSBnZXRUeXBlT2ZUaGlzKCk7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KCiAgSExvY2FsVmFsdWUgZ2V0TG9jYWwoTG9jYWwgbG9jYWwsIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGEgcGFyYW1ldGVyLCB3ZSBhbHJlYWR5IGhhdmUgYQogICAgLy8gSFBhcmFtZXRlclZhbHVlIGZvciBpdC4gV2UgY2Fubm90IGNyZWF0ZSBhbm90aGVyIG9uZSBiZWNhdXNlCiAgICAvLyBpdCBjb3VsZCB0aGVuIGhhdmUgYW5vdGhlciBuYW1lIHRoYW4gdGhlIHJlYWwgcGFyYW1ldGVyLiBBbmQKICAgIC8vIHRoZSBvdGhlciBvbmUgd291bGQgbm90IGtub3cgaXQgaXMganVzdCBhIGNvcHkgb2YgdGhlIHJlYWwKICAgIC8vIHBhcmFtZXRlci4KICAgIGlmIChidWlsZGVyLnBhcmFtZXRlcnMuY29udGFpbnNLZXkobG9jYWwpKSB7CiAgICAgIHJldHVybiBidWlsZGVyLnBhcmFtZXRlcnNbbG9jYWxdOwogICAgfQoKICAgIHJldHVybiBhY3RpdmF0aW9uVmFyaWFibGVzLnB1dElmQWJzZW50KGxvY2FsLCAoKSB7CiAgICAgIEhMb2NhbFZhbHVlIGxvY2FsVmFsdWUgPQogICAgICAgICAgbmV3IEhMb2NhbFZhbHVlKGxvY2FsLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSkKICAgICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgICBidWlsZGVyLmdyYXBoLmVudHJ5LmFkZEF0RXhpdChsb2NhbFZhbHVlKTsKICAgICAgcmV0dXJuIGxvY2FsVmFsdWU7CiAgICB9KTsKICB9CgogIExvY2FsIGdldFR5cGVWYXJpYWJsZUFzTG9jYWwoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlTG9jYWxzLnB1dElmQWJzZW50KHR5cGUsICgpIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGVMb2NhbCh0eXBlKTsKICAgIH0pOwogIH0KCiAgLy8vIFNldHMgdGhlIFtlbGVtZW50XSB0byBbdmFsdWVdLiBJZiB0aGUgZWxlbWVudCBpcyBib3hlZCBvciBzdG9yZWQgaW4gYQogIC8vLyBjbG9zdXJlIHRoZW4gdGhlIG1ldGhvZCBnZW5lcmF0ZXMgY29kZSB0byBzZXQgdGhlIHZhbHVlLgogIHZvaWQgdXBkYXRlTG9jYWwoTG9jYWwgbG9jYWwsIEhJbnN0cnVjdGlvbiB2YWx1ZSwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgaWYgKHZhbHVlIGlzIEhSZWYpIHsKICAgICAgSFJlZiByZWYgPSB2YWx1ZTsKICAgICAgdmFsdWUgPSByZWYudmFsdWU7CiAgICB9CiAgICBhc3NlcnQoIWlzU3RvcmVkSW5DbG9zdXJlRmllbGQobG9jYWwpLAogICAgICAgICJMb2NhbCAkbG9jYWwgaXMgc3RvcmVkIGluIGEgY2xvc3VyZSBmaWVsZC4iKTsKICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSB7CiAgICAgIGRpcmVjdExvY2Fsc1tsb2NhbF0gPSB2YWx1ZTsKICAgIH0gZWxzZSBpZiAoaXNCb3hlZChsb2NhbCkpIHsKICAgICAgRmllbGRFbnRpdHkgcmVkaXJlY3QgPSByZWRpcmVjdGlvbk1hcHBpbmdbbG9jYWxdOwogICAgICBhc3NlcnQocmVkaXJlY3QgIT0gbnVsbCk7CiAgICAgIEJveExvY2FsIGxvY2FsQm94OwogICAgICBpZiAocmVkaXJlY3QgaXMgSlJlY29yZEZpZWxkKSB7CiAgICAgICAgbG9jYWxCb3ggPSByZWRpcmVjdC5ib3g7CiAgICAgIH0KICAgICAgYXNzZXJ0KGxvY2FsQm94ICE9IG51bGwpOwoKICAgICAgLy8gVGhlIGJveCBpdHNlbGYgY291bGQgYmUgY2FwdHVyZWQsIG9yIGJlIGxvY2FsLiBBIGxvY2FsIHZhcmlhYmxlIHRoYXQKICAgICAgLy8gaXMgY2FwdHVyZWQgd2lsbCBiZSBib3hlZCwgYnV0IHRoZSBib3ggaXRzZWxmIHdpbGwgYmUgYSBsb2NhbC4KICAgICAgLy8gSW5zaWRlIHRoZSBjbG9zdXJlIHRoZSBib3ggaXMgc3RvcmVkIGluIGEgY2xvc3VyZS1maWVsZCBhbmQgY2Fubm90CiAgICAgIC8vIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICBISW5zdHJ1Y3Rpb24gYm94ID0gcmVhZExvY2FsKGxvY2FsQm94KTsKICAgICAgYnVpbGRlci5hZGQobmV3IEhGaWVsZFNldChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgcmVkaXJlY3QsIGJveCwgdmFsdWUpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfaXNVc2VkSW5UcnlPckdlbmVyYXRvcihsb2NhbCkpOwogICAgICBITG9jYWxWYWx1ZSBsb2NhbFZhbHVlID0gZ2V0TG9jYWwobG9jYWwpOwogICAgICBidWlsZGVyLmFkZChuZXcgSExvY2FsU2V0KF9hYnN0cmFjdFZhbHVlRG9tYWluLCBsb2NhbCwgbG9jYWxWYWx1ZSwgdmFsdWUpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIC8vLyBUaGlzIGZ1bmN0aW9uLCBzdGFydExvb3AsIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB2aXNpdGluZyBhbnkgY2hpbGRyZW4gb2YKICAvLy8gdGhlIGxvb3AuIEluIHBhcnRpY3VsYXIgaXQgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlCiAgLy8vIGluaXRpYWxpemVycy4KICAvLy8KICAvLy8gVGhlIFtMb2NhbHNIYW5kbGVyXSB3aWxsIG1ha2UgdGhlIGJveGVzIGFuZCB1cGRhdGVzIGF0IHRoZSByaWdodCBtb21lbnQuCiAgLy8vIFRoZSBidWlsZGVyIGp1c3QgbmVlZHMgdG8gY2FsbCBbZW50ZXJMb29wQm9keV0gYW5kIFtlbnRlckxvb3BVcGRhdGVzXQogIC8vLyAoZm9yIFthc3QuRm9yXSBsb29wcykgYXQgdGhlIGNvcnJlY3QgcGxhY2VzLiBGb3IgcGhpLWhhbmRsaW5nCiAgLy8vIFtiZWdpbkxvb3BIZWFkZXJdIGFuZCBbZW5kTG9vcF0gbXVzdCBhbHNvIGJlIGNhbGxlZC4KICAvLy8KICAvLy8gVGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRoZSBib3ggZGVwZW5kcyBvbiB0aGUgZ2l2ZW4gbG9vcC4gSW4gbW9zdCBjYXNlcwogIC8vLyB0aGUgYm94IHdpbGwgYmUgY3JlYXRlZCB3aGVuIGVudGVyaW5nIHRoZSBsb29wLWJvZHk6IHdoaWxlLCBkby13aGlsZSwgYW5kCiAgLy8vIGZvci1pbiAoYXNzdW1pbmcgdGhlIGNhbGwgdG8gWzpuZXh0Ol0gaXMgaW5zaWRlIHRoZSBib2R5KSBjYW4gYWx3YXlzIGJlCiAgLy8vIGNvbnN0cnVjdGVkIHRoaXMgd2F5LgogIC8vLwogIC8vLyBUaGluZ3MgYXJlIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgZm9yIFthc3QuRm9yXSBsb29wcy4gSWYgbm8gZGVjbGFyZWQKICAvLy8gbG9vcCB2YXJpYWJsZSBpcyBib3hlZCB0aGVuIHRoZSBsb29wLWJvZHkgYXBwcm9hY2ggd29ya3MgaGVyZSB0b28uIElmIGEKICAvLy8gbG9vcC12YXJpYWJsZSBpcyBib3hlZCB3ZSBuZWVkIHRvIGludHJvZHVjZSBhIG5ldyBib3ggZm9yIHRoZQogIC8vLyBsb29wLXZhcmlhYmxlIGJlZm9yZSB3ZSBlbnRlciB0aGUgaW5pdGlhbGl6ZXIgc28gdGhhdCB0aGUgaW5pdGlhbGl6ZXIKICAvLy8gd3JpdGVzIHRoZSB2YWx1ZXMgaW50byB0aGUgYm94LiBJbiBhbnkgY2FzZSB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYm94CiAgLy8vIGJlZm9yZSB0aGUgY29uZGl0aW9uIHNpbmNlIHRoZSBjb25kaXRpb24gY291bGQgYm94IHRoZSB2YXJpYWJsZS4KICAvLy8gU2luY2UgdGhlIGZpcnN0IGJveCBpcyBjcmVhdGVkIG91dHNpZGUgdGhlIGFjdHVhbCBsb29wIHdlIGhhdmUgYSBzZWNvbmQKICAvLy8gbG9jYXRpb24gd2hlcmUgYSBib3ggaXMgY3JlYXRlZDoganVzdCBiZWZvcmUgdGhlIHVwZGF0ZXMuIFRoaXMgaXMKICAvLy8gbmVjZXNzYXJ5IHNpbmNlIHVwZGF0ZXMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZiB0aGUgbmV4dCBpdGVyYXRpb24KICAvLy8gKGFuZCBjYW4gYWdhaW4gY2FwdHVyZSB2YXJpYWJsZXMpLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIERhcnQgY29kZSBwcmludHMgMSAzIC0tIDMgNC4KICAvLy8KICAvLy8gICAgIHZhciBmcyA9IFtdOwogIC8vLyAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyAoZigpIHsgZnMuYWRkKGYpOyBwcmludChpKTsgaSsrOyB9KSgpKSB7CiAgLy8vICAgICAgIGkrKzsKICAvLy8gICAgIH0KICAvLy8gICAgIHByaW50KCItLSIpOwogIC8vLyAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIGZzW2ldKCk7CiAgLy8vCiAgLy8vIFdlIHNvbHZlIHRoaXMgYnkgZW1pdHRpbmcgdGhlIGZvbGxvd2luZyBjb2RlIChvbmx5IGZvciBbYXN0LkZvcl0gbG9vcHMpOgogIC8vLyAgPENyZWF0ZSBib3g+ICAgIDw9PSBtb3ZlIHRoZSBmaXJzdCBib3ggY3JlYXRpb24gb3V0c2lkZSB0aGUgbG9vcC4KICAvLy8gIDxpbml0aWFsaXplcj47CiAgLy8vICBsb29wLWVudHJ5OgogIC8vLyAgICBpZiAoITxjb25kaXRpb24+KSBnb3RvIGxvb3AtZXhpdDsKICAvLy8gICAgPGJvZHk+CiAgLy8vICAgIDx1cGRhdGUgYm94PiAgLy8gY3JlYXRlIGEgbmV3IGJveCBhbmQgY29weSB0aGUgY2FwdHVyZWQgbG9vcC12YXJpYWJsZXMuCiAgLy8vICAgIDx1cGRhdGVzPgogIC8vLyAgICBnb3RvIGxvb3AtZW50cnk7CiAgLy8vICBsb29wLWV4aXQ6CiAgdm9pZCBzdGFydExvb3AoCiAgICAgIENhcHR1cmVkTG9vcFNjb3BlIGxvb3BJbmZvLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKGxvb3BJbmZvLmhhc0JveGVkTG9vcFZhcmlhYmxlcykgewogICAgICAvLyBJZiB0aGVyZSBhcmUgYm94ZWQgbG9vcCB2YXJpYWJsZXMgdGhlbiB3ZSBzZXQgdXAgdGhlIGJveCBhbmQKICAgICAgLy8gcmVkaXJlY3Rpb25zIGFscmVhZHkgbm93LiBUaGlzIHdheSB0aGUgaW5pdGlhbGl6ZXIgY2FuIHdyaXRlIGl0cwogICAgICAvLyB2YWx1ZXMgaW50byB0aGUgYm94LgogICAgICAvLyBGb3Igb3RoZXIgbG9vcHMgdGhlIGJveCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keS4KICAgICAgZW50ZXJTY29wZShsb29wSW5mbywgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgLy8vIENyZWF0ZSBwaGlzIGF0IHRoZSBsb29wIGVudHJ5IGZvciBsb2NhbCB2YXJpYWJsZXMgKHJlYWR5IGZvciB0aGUgdmFsdWVzCiAgLy8vIGZyb20gdGhlIGJhY2sgZWRnZSkuICBQb3B1bGF0ZSB0aGUgcGhpcyB3aXRoIHRoZSBjdXJyZW50IHZhbHVlcy4KICB2b2lkIGJlZ2luTG9vcEhlYWRlcihIQmFzaWNCbG9jayBsb29wRW50cnkpIHsKICAgIC8vIENyZWF0ZSBhIGNvcHkgYmVjYXVzZSB3ZSBtb2RpZnkgdGhlIG1hcCB3aGlsZSBpdGVyYXRpbmcgb3ZlciBpdC4KICAgIE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPiBzYXZlZERpcmVjdExvY2FscyA9CiAgICAgICAgbmV3IE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPi5mcm9tKGRpcmVjdExvY2Fscyk7CgogICAgLy8gQ3JlYXRlIHBoaXMgZm9yIGFsbCBlbGVtZW50cyBpbiB0aGUgZGVmaW5pdGlvbnMgZW52aXJvbm1lbnQuCiAgICBzYXZlZERpcmVjdExvY2Fscy5mb3JFYWNoKChMb2NhbCBsb2NhbCwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSB7CiAgICAgICAgLy8gV2Uga25vdyAndGhpcycgY2Fubm90IGJlIG1vZGlmaWVkLgogICAgICAgIGlmIChsb2NhbCAhPSBzY29wZUluZm8udGhpc0xvY2FsKSB7CiAgICAgICAgICBIUGhpIHBoaSA9IG5ldyBIUGhpLnNpbmdsZUlucHV0KAogICAgICAgICAgICAgIGxvY2FsLCBpbnN0cnVjdGlvbiwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgICAgbG9vcEVudHJ5LmFkZFBoaShwaGkpOwogICAgICAgICAgZGlyZWN0TG9jYWxzW2xvY2FsXSA9IHBoaTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGlyZWN0TG9jYWxzW2xvY2FsXSA9IGluc3RydWN0aW9uOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIGVudGVyTG9vcEJvZHkoCiAgICAgIENhcHR1cmVkTG9vcFNjb3BlIGxvb3BJbmZvLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gSWYgdGhlcmUgYXJlIG5vIGRlY2xhcmVkIGJveGVkIGxvb3AgdmFyaWFibGVzIHRoZW4gd2UgZGlkIG5vdCBjcmVhdGUgdGhlCiAgICAvLyBib3ggYmVmb3JlIHRoZSBpbml0aWFsaXplciBhbmQgd2UgaGF2ZSB0byBjcmVhdGUgdGhlIGJveCBub3cuCiAgICBpZiAoIWxvb3BJbmZvLmhhc0JveGVkTG9vcFZhcmlhYmxlcykgewogICAgICBlbnRlclNjb3BlKGxvb3BJbmZvLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGVudGVyTG9vcFVwZGF0ZXMoCiAgICAgIENhcHR1cmVkTG9vcFNjb3BlIGxvb3BJbmZvLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gSWYgdGhlcmUgYXJlIGRlY2xhcmVkIGJveGVkIGxvb3AgdmFyaWFibGVzIHRoZW4gdGhlIHVwZGF0ZXMgbWlnaHQgaGF2ZQogICAgLy8gYWNjZXNzIHRvIHRoZSBib3ggYW5kIHdlIG11c3Qgc3dpdGNoIHRvIGEgbmV3IGJveCBiZWZvcmUgZXhlY3V0aW5nIHRoZQogICAgLy8gdXBkYXRlcy4KICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcyBhIG5ldyBib3ggd2lsbCBiZSBjcmVhdGVkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YKICAgIC8vIHRoZSBuZXh0IGl0ZXJhdGlvbi4KICAgIGlmIChsb29wSW5mby5oYXNCb3hlZExvb3BWYXJpYWJsZXMpIHsKICAgICAgdXBkYXRlQ2FwdHVyZUJveCgKICAgICAgICAgIGxvb3BJbmZvLmNvbnRleHQsIGxvb3BJbmZvLmJveGVkTG9vcFZhcmlhYmxlcywgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgLy8vIEdvZXMgdGhyb3VnaCB0aGUgcGhpcyBjcmVhdGVkIGluIGJlZ2luTG9vcEhlYWRlciBlbnRyeSBhbmQgYWRkcyB0aGUKICAvLy8gaW5wdXQgZnJvbSB0aGUgYmFjayBlZGdlIChmcm9tIHRoZSBjdXJyZW50IHZhbHVlIG9mIGRpcmVjdExvY2FscykgdG8gdGhlbS4KICB2b2lkIGVuZExvb3AoSEJhc2ljQmxvY2sgbG9vcEVudHJ5KSB7CiAgICAvLyBJZiB0aGUgbG9vcCBoYXMgYW4gYWJvcnRpbmcgYm9keSwgd2UgZG9uJ3QgdXBkYXRlIHRoZSBsb29wCiAgICAvLyBwaGlzLgogICAgaWYgKGxvb3BFbnRyeS5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDEpIHJldHVybjsKICAgIGxvb3BFbnRyeS5mb3JFYWNoUGhpKChIUGhpIHBoaSkgewogICAgICBMb2NhbCBlbGVtZW50ID0gcGhpLnNvdXJjZUVsZW1lbnQ7CiAgICAgIEhJbnN0cnVjdGlvbiBwb3N0TG9vcERlZmluaXRpb24gPSBkaXJlY3RMb2NhbHNbZWxlbWVudF07CiAgICAgIHBoaS5hZGRJbnB1dChwb3N0TG9vcERlZmluaXRpb24pOwogICAgfSk7CiAgfQoKICAvLy8gTWVyZ2UgW290aGVyTG9jYWxzXSBpbnRvIHRoaXMgbG9jYWxzIGhhbmRsZXIsIGNyZWF0aW5nIHBoaS1ub2RlcyB3aGVuCiAgLy8vIHRoZXJlIGlzIGEgY29uZmxpY3QuCiAgLy8vIElmIGEgcGhpIG5vZGUgaXMgbmVjZXNzYXJ5LCBpdCB3aWxsIHVzZSB0aGlzIGhhbmRsZXIncyBpbnN0cnVjdGlvbiBhcyB0aGUKICAvLy8gZmlyc3QgaW5wdXQsIGFuZCB0aGUgb3RoZXJMb2NhbHMgaW5zdHJ1Y3Rpb24gYXMgdGhlIHNlY29uZC4KICB2b2lkIG1lcmdlV2l0aChMb2NhbHNIYW5kbGVyIG90aGVyTG9jYWxzLCBIQmFzaWNCbG9jayBqb2luQmxvY2spIHsKICAgIC8vIElmIGFuIGVsZW1lbnQgaXMgaW4gb25lIG1hcCBidXQgbm90IHRoZSBvdGhlciB3ZSBjYW4gc2FmZWx5CiAgICAvLyBpZ25vcmUgaXQuIEl0IG1lYW5zIHRoYXQgYSB2YXJpYWJsZSB3YXMgZGVjbGFyZWQgaW4gdGhlCiAgICAvLyBibG9jay4gU2luY2UgdmFyaWFibGUgZGVjbGFyYXRpb25zIGFyZSBzY29wZWQgdGhlIGRlY2xhcmVkCiAgICAvLyB2YXJpYWJsZSBjYW5ub3QgYmUgYWxpdmUgb3V0c2lkZSB0aGUgYmxvY2suIE5vdGU6IHRoaXMgaXMgb25seQogICAgLy8gdHJ1ZSBmb3Igbm9kZXMgd2hlcmUgd2UgZG8gam9pbnMuCiAgICBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4gam9pbmVkTG9jYWxzID0gbmV3IE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPigpOwogICAgb3RoZXJMb2NhbHMuZGlyZWN0TG9jYWxzLmZvckVhY2goKExvY2FsIGxvY2FsLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgLy8gV2Uga25vdyAndGhpcycgY2Fubm90IGJlIG1vZGlmaWVkLgogICAgICBpZiAobG9jYWwgPT0gc2NvcGVJbmZvLnRoaXNMb2NhbCkgewogICAgICAgIGFzc2VydChkaXJlY3RMb2NhbHNbbG9jYWxdID09IGluc3RydWN0aW9uKTsKICAgICAgICBqb2luZWRMb2NhbHNbbG9jYWxdID0gaW5zdHJ1Y3Rpb247CiAgICAgIH0gZWxzZSB7CiAgICAgICAgSEluc3RydWN0aW9uIG1pbmUgPSBkaXJlY3RMb2NhbHNbbG9jYWxdOwogICAgICAgIGlmIChtaW5lID09IG51bGwpIHJldHVybjsKICAgICAgICBpZiAoaWRlbnRpY2FsKGluc3RydWN0aW9uLCBtaW5lKSkgewogICAgICAgICAgam9pbmVkTG9jYWxzW2xvY2FsXSA9IGluc3RydWN0aW9uOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gcGhpID0gbmV3IEhQaGkubWFueUlucHV0cygKICAgICAgICAgICAgICBsb2NhbCwKICAgICAgICAgICAgICA8SEluc3RydWN0aW9uPlttaW5lLCBpbnN0cnVjdGlvbl0sCiAgICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgICAgam9pbkJsb2NrLmFkZFBoaShwaGkpOwogICAgICAgICAgam9pbmVkTG9jYWxzW2xvY2FsXSA9IHBoaTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgZGlyZWN0TG9jYWxzID0gam9pbmVkTG9jYWxzOwogIH0KCiAgLy8vIFdoZW4gY29udHJvbCBmbG93IG1lcmdlcywgdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gbWVyZ2Ugc2V2ZXJhbAogIC8vLyBsb2NhbHNIYW5kbGVycyBpbnRvIGEgbmV3IG9uZSB1c2luZyBwaGlzLiAgVGhlIG5ldyBsb2NhbHNIYW5kbGVyIGlzCiAgLy8vIHJldHVybmVkLiAgVW5sZXNzIGl0IGlzIGFsc28gaW4gdGhlIGxpc3QsIHRoZSBjdXJyZW50IGxvY2Fsc0hhbmRsZXIgaXMgbm90CiAgLy8vIHVzZWQgZm9yIGl0cyB2YWx1ZXMsIG9ubHkgZm9yIGl0cyBkZWNsYXJlZCB2YXJpYWJsZXMuIFRoaXMgaXMgYSB3YXkgdG8KICAvLy8gZXhjbHVkZSBsb2NhbCB2YWx1ZXMgZnJvbSB0aGUgcmVzdWx0IHdoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIGluIHNjb3BlLgogIExvY2Fsc0hhbmRsZXIgbWVyZ2VNdWx0aXBsZSgKICAgICAgTGlzdDxMb2NhbHNIYW5kbGVyPiBsb2NhbHNIYW5kbGVycywgSEJhc2ljQmxvY2sgam9pbkJsb2NrKSB7CiAgICBhc3NlcnQobG9jYWxzSGFuZGxlcnMubGVuZ3RoID4gMCk7CiAgICBpZiAobG9jYWxzSGFuZGxlcnMubGVuZ3RoID09IDEpIHJldHVybiBsb2NhbHNIYW5kbGVycy5zaW5nbGU7CiAgICBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4gam9pbmVkTG9jYWxzID0gbmV3IE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPigpOwogICAgSEluc3RydWN0aW9uIHRoaXNWYWx1ZSA9IG51bGw7CiAgICBkaXJlY3RMb2NhbHMuZm9yRWFjaCgoTG9jYWwgbG9jYWwsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICBpZiAobG9jYWwgIT0gc2NvcGVJbmZvLnRoaXNMb2NhbCkgewogICAgICAgIEhQaGkgcGhpID0gbmV3IEhQaGkubm9JbnB1dHMobG9jYWwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICAgICAgICBqb2luZWRMb2NhbHNbbG9jYWxdID0gcGhpOwogICAgICAgIGpvaW5CbG9jay5hZGRQaGkocGhpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBXZSBrbm93IHRoYXQgInRoaXMiIG5ldmVyIGNoYW5nZXMsIGlmIGl0J3MgdGhlcmUuCiAgICAgICAgLy8gU2F2ZSBpdCBmb3IgbGF0ZXIuIFdoaWxlIG1lcmdpbmcsIHRoZXJlIGlzIG5vIHBoaSBmb3IgInRoaXMiLAogICAgICAgIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gc3BlY2lhbCBjYXNlIGl0IGluIHRoZSBtZXJnZSBsb29wLgogICAgICAgIHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uOwogICAgICB9CiAgICB9KTsKICAgIGZvciAoTG9jYWxzSGFuZGxlciBoYW5kbGVyIGluIGxvY2Fsc0hhbmRsZXJzKSB7CiAgICAgIGhhbmRsZXIuZGlyZWN0TG9jYWxzLmZvckVhY2goKExvY2FsIGxvY2FsLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgICBIUGhpIHBoaSA9IGpvaW5lZExvY2Fsc1tsb2NhbF07CiAgICAgICAgaWYgKHBoaSAhPSBudWxsKSB7CiAgICAgICAgICBwaGkuYWRkSW5wdXQoaW5zdHJ1Y3Rpb24pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBpZiAodGhpc1ZhbHVlICE9IG51bGwpIHsKICAgICAgLy8gSWYgdGhlcmUgd2FzIGEgInRoaXMiIGZvciB0aGUgc2NvcGUsIGFkZCBpdCB0byB0aGUgbmV3IGxvY2Fscy4KICAgICAgam9pbmVkTG9jYWxzW3Njb3BlSW5mby50aGlzTG9jYWxdID0gdGhpc1ZhbHVlOwogICAgfQoKICAgIC8vIFJlbW92ZSBsb2NhbHMgdGhhdCBhcmUgbm90IGluIGFsbCBoYW5kbGVycy4KICAgIGRpcmVjdExvY2FscyA9IG5ldyBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4oKTsKICAgIGpvaW5lZExvY2Fscy5mb3JFYWNoKChMb2NhbCBsb2NhbCwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChsb2NhbCAhPSBzY29wZUluZm8udGhpc0xvY2FsICYmCiAgICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHMubGVuZ3RoICE9IGxvY2Fsc0hhbmRsZXJzLmxlbmd0aCkgewogICAgICAgIGpvaW5CbG9jay5yZW1vdmVQaGkoaW5zdHJ1Y3Rpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIGRpcmVjdExvY2Fsc1tsb2NhbF0gPSBpbnN0cnVjdGlvbjsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIEFic3RyYWN0VmFsdWUgY2FjaGVkVHlwZU9mVGhpczsKCiAgQWJzdHJhY3RWYWx1ZSBnZXRUeXBlT2ZUaGlzKCkgewogICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQgPSBjYWNoZWRUeXBlT2ZUaGlzOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIFRoaXNMb2NhbCBsb2NhbCA9IHNjb3BlSW5mby50aGlzTG9jYWw7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IGxvY2FsLmVuY2xvc2luZ0NsYXNzOwogICAgICBpZiAoX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oY2xzKSkgewogICAgICAgIC8vIElmIHRoZSBlbmNsb3NpbmcgY2xhc3MgaXMgdXNlZCBhcyBhIG1peGluLCBbOnRoaXM6XSBjYW4gYmUKICAgICAgICAvLyBvZiB0aGUgY2xhc3MgdGhhdCBtaXhpbnMgdGhlIGVuY2xvc2luZyBjbGFzcy4gVGhlc2UgdHdvCiAgICAgICAgLy8gY2xhc3NlcyBkbyBub3QgaGF2ZSBhIHN1YmNsYXNzIHJlbGF0aW9uc2hpcCwgc28sIGZvcgogICAgICAgIC8vIHNpbXBsaWNpdHksIHdlIG1hcmsgdGhlIHR5cGUgYXMgYW4gaW50ZXJmYWNlIHR5cGUuCiAgICAgICAgcmVzdWx0ID0gX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YnR5cGUoY2xzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3ViY2xhc3MoY2xzKTsKICAgICAgfQogICAgICBjYWNoZWRUeXBlT2ZUaGlzID0gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIE1hcDxGaWVsZEVudGl0eSwgQWJzdHJhY3RWYWx1ZT4gY2FjaGVkVHlwZXNPZkNhcHR1cmVkVmFyaWFibGVzID0KICAgICAgbmV3IE1hcDxGaWVsZEVudGl0eSwgQWJzdHJhY3RWYWx1ZT4oKTsKCiAgQWJzdHJhY3RWYWx1ZSBnZXRUeXBlT2ZDYXB0dXJlZFZhcmlhYmxlKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBjYWNoZWRUeXBlc09mQ2FwdHVyZWRWYXJpYWJsZXMucHV0SWZBYnNlbnQoZWxlbWVudCwgKCkgewogICAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRUeXBlRm9yTWVtYmVyKAogICAgICAgICAgZWxlbWVudCwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgfSk7CiAgfQoKICAvLy8gVmFyaWFibGVzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBhY3RpdmF0aW9uLiBUaGVzZSB2YXJpYWJsZXMgYXJlCiAgLy8vIGJlaW5nIHVwZGF0ZWQgaW4gdHJ5L2NhdGNoIGJsb2NrcywgYW5kIHNob3VsZCBiZQogIC8vLyBhY2Nlc3NlZCBpbmRpcmVjdGx5IHRocm91Z2ggW0hMb2NhbEdldF0gYW5kIFtITG9jYWxTZXRdLgogIE1hcDxMb2NhbCwgSExvY2FsVmFsdWU+IGFjdGl2YXRpb25WYXJpYWJsZXMgPSA8TG9jYWwsIEhMb2NhbFZhbHVlPnt9OwoKICBTeW50aGV0aWNMb2NhbCBjcmVhdGVMb2NhbChTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIG5ldyBTeW50aGV0aWNMb2NhbChuYW1lLCBleGVjdXRhYmxlQ29udGV4dCwgbWVtYmVyQ29udGV4dCk7CiAgfQp9CgovLy8gQSBzeW50aGV0aWMgbG9jYWwgdmFyaWFibGUgb25seSB1c2VkIHdpdGggdGhlIFNTQSBncmFwaC4KLy8vCi8vLyBGb3IgaW5zdGFuY2UgdXNlZCBmb3IgaG9sZGluZyByZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb24gb3IgdGhlIGV4Y2VwdGlvbiBvZiBhCi8vLyB0cnktY2F0Y2ggc3RhdGVtZW50LgpjbGFzcyBTeW50aGV0aWNMb2NhbCBleHRlbmRzIExvY2FsIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBFbnRpdHkgZXhlY3V0YWJsZUNvbnRleHQ7CiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQ7CgogIC8vIEF2b2lkIHNsb3cgT2JqZWN0Lmhhc2hDb2RlLgogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZSA9IF9uZXh0SGFzaENvZGUgPSAoX25leHRIYXNoQ29kZSArIDEpLnRvVW5zaWduZWQoMzApOwogIHN0YXRpYyBpbnQgX25leHRIYXNoQ29kZSA9IDA7CgogIFN5bnRoZXRpY0xvY2FsKHRoaXMubmFtZSwgdGhpcy5leGVjdXRhYmxlQ29udGV4dCwgdGhpcy5tZW1iZXJDb250ZXh0KTsKCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnU3ludGhldGljTG9jYWwoJG5hbWUpJzsKfQqCxgBOTjwBGhkkITEhKCkuRC4qAR4VFQFNTgkWTyMGS0pQREpOJxdANiIkAUcGSjYGUFAYBhkVHQwTJAwGJAEgASoBSkMBOAEyKAE8JgFJFisdIEQhORUxSh8IMVAIBhQEAUZEICpONzUtKyElKTM5M08BT1A1LiM7BAFASC8WEAQBTjkTRk1QJzEWKShMGiBGDSoGKC1MT0RIFhszIzpMM0ozPkQ3NCMoDyMICAQBTTVKLUsQMTg2TD0nOCcsBiUEASwGPxYcGx8sIyssIAE/KTBENBIKCEU3LScIMQEtRAFJSyRJOUtHLUUjCkMeTjc3PytQTRJPNzc7BgE+REUuAU5RSk5CKzI5Sjs0TzdOME4sCCBAMwgpOk43M1E3LTBOLAgGBAFNUCkbNTIEAS0bMT88LiwEAR4xNTIEAS40BAFJThFPJSkqFClDQhEUFUYmCggwJzQcCBQwOThELS0xHkYdFyE4GUhIK0wSJiEIIAEuOUMbFQ0uMEJAIBoGBAFBF04nLQYQBAFNOEREQhIxKAYBNx9DNTEZCAQBODUqCAQBTD80LxkYGQYrNyUjITggGSYhCCABTkhMHy5MMg0uMFAyBgQBT0kUBk9MRDsGTVBOHAZPTkRMTEdOSE4pBj0GF0oRDBcvBk9JFhMrEFETGhISSSpGSh5JLwYEAU5HMEgxOQFESCcuLCtFISURLQoICAQBFklQRSsvBgQBGUlOThBOGyoYTQYEAUpRKEINNCYpPygIBAFMG1BCRUM/QkYpTE8sKjQrDzEiLC0RMhUxMSElCggIIQQBSUpRTU0fQydCTCNDKk8jHw89SUIhCAg0TSgbJQoKBh1INQYBMzNDKkAqDysICBEEASIBIi0aLS4tRkNAPkEPQgghBhMEAUMtAUFEOS0IBAFGNz9IASxHBAIBPQRRGSUMFSIkASEMSyABSQEMKQIBLHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9sb2NhbHNfaGFuZGxlci5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9sb29wX2hhbmRsZXIuZGFydLTxLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnIHNob3cgQ2FwdHVyZWRMb29wU2NvcGU7CmltcG9ydCAnLi4vZWxlbWVudHMvanVtcHMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKCmltcG9ydCAnYnVpbGRlcl9rZXJuZWwuZGFydCc7CmltcG9ydCAnanVtcF9oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ2xvY2Fsc19oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwoKLy8vIEJ1aWxkcyB0aGUgU1NBIGdyYXBoIGZvciBsb29wIG5vZGVzLgphYnN0cmFjdCBjbGFzcyBMb29wSGFuZGxlciB7CiAgZmluYWwgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGJ1aWxkZXI7CgogIExvb3BIYW5kbGVyKHRoaXMuYnVpbGRlcik7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGJ1aWxkZXIuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgLy8vIEJ1aWxkcyBhIGdyYXBoIGZvciB0aGUgZ2l2ZW4gW2xvb3BdIG5vZGUuCiAgLy8vCiAgLy8vIEZvciB3aGlsZSBsb29wcywgW2luaXRpYWxpemVdIGFuZCBbdXBkYXRlXSBhcmUgbnVsbC4KICAvLy8gVGhlIFtjb25kaXRpb25dIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbiByZXN1bHQuCiAgLy8vIE5vbmUgb2YgdGhlIGZ1bmN0aW9ucyBtdXN0IGxlYXZlIGFueXRoaW5nIG9uIHRoZSBzdGFjay4KICB2b2lkIGhhbmRsZUxvb3AoCiAgICAgIGlyLk5vZGUgbG9vcCwKICAgICAgQ2FwdHVyZWRMb29wU2NvcGUgbG9vcENsb3N1cmVJbmZvLAogICAgICBKdW1wVGFyZ2V0IGp1bXBUYXJnZXQsCiAgICAgIHZvaWQgaW5pdGlhbGl6ZSgpLAogICAgICBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uKCksCiAgICAgIHZvaWQgdXBkYXRlKCksCiAgICAgIHZvaWQgYm9keSgpLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gR2VuZXJhdGU6CiAgICAvLyAgPGluaXRpYWxpemVyPgogICAgLy8gIGxvb3AtZW50cnk6CiAgICAvLyAgICBpZiAoITxjb25kaXRpb24+KSBnb3RvIGxvb3AtZXhpdDsKICAgIC8vICAgIDxib2R5PgogICAgLy8gICAgPHVwZGF0ZXM+CiAgICAvLyAgICBnb3RvIGxvb3AtZW50cnk7CiAgICAvLyAgbG9vcC1leGl0OgoKICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlci5zdGFydExvb3AobG9vcENsb3N1cmVJbmZvLCBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgLy8gVGhlIGluaXRpYWxpemVyLgogICAgU3ViRXhwcmVzc2lvbiBpbml0aWFsaXplckdyYXBoID0gbnVsbDsKICAgIEhCYXNpY0Jsb2NrIHN0YXJ0QmxvY2s7CiAgICBpZiAoaW5pdGlhbGl6ZSAhPSBudWxsKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGluaXRpYWxpemVyQmxvY2sgPSBidWlsZGVyLm9wZW5OZXdCbG9jaygpOwogICAgICBzdGFydEJsb2NrID0gaW5pdGlhbGl6ZXJCbG9jazsKICAgICAgaW5pdGlhbGl6ZSgpOwogICAgICBhc3NlcnQoIWJ1aWxkZXIuaXNBYm9ydGVkKCkpOwogICAgICBpbml0aWFsaXplckdyYXBoID0gbmV3IFN1YkV4cHJlc3Npb24oaW5pdGlhbGl6ZXJCbG9jaywgYnVpbGRlci5jdXJyZW50KTsKICAgIH0KCiAgICBidWlsZGVyLmxvb3BEZXB0aCsrOwogICAgSnVtcEhhbmRsZXIganVtcEhhbmRsZXIgPSBiZWdpbkxvb3BIZWFkZXIobG9vcCwganVtcFRhcmdldCk7CiAgICBITG9vcEluZm9ybWF0aW9uIGxvb3BJbmZvID0gYnVpbGRlci5jdXJyZW50Lmxvb3BJbmZvcm1hdGlvbjsKICAgIEhCYXNpY0Jsb2NrIGNvbmRpdGlvbkJsb2NrID0gYnVpbGRlci5jdXJyZW50OwogICAgaWYgKHN0YXJ0QmxvY2sgPT0gbnVsbCkgc3RhcnRCbG9jayA9IGNvbmRpdGlvbkJsb2NrOwoKICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb25JbnN0cnVjdGlvbiA9IGNvbmRpdGlvbigpOwogICAgSEJhc2ljQmxvY2sgY29uZGl0aW9uRW5kQmxvY2sgPSBidWlsZGVyCiAgICAgICAgLmNsb3NlKG5ldyBITG9vcEJyYW5jaChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29uZGl0aW9uSW5zdHJ1Y3Rpb24pKTsKICAgIFN1YkV4cHJlc3Npb24gY29uZGl0aW9uRXhwcmVzc2lvbiA9CiAgICAgICAgbmV3IFN1YkV4cHJlc3Npb24oY29uZGl0aW9uQmxvY2ssIGNvbmRpdGlvbkVuZEJsb2NrKTsKCiAgICAvLyBTYXZlIHRoZSB2YWx1ZXMgb2YgdGhlIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgZW5kIG9mIHRoZSBjb25kaXRpb24KICAgIC8vIGJsb2NrLiAgVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdGhhdCB3aWxsIGZsb3cgdG8gdGhlIGxvb3AgZXhpdCBpZiB0aGUKICAgIC8vIGNvbmRpdGlvbiBmYWlscy4KICAgIExvY2Fsc0hhbmRsZXIgc2F2ZWRMb2NhbHMgPSBuZXcgTG9jYWxzSGFuZGxlci5mcm9tKGJ1aWxkZXIubG9jYWxzSGFuZGxlcik7CgogICAgLy8gVGhlIGJvZHkuCiAgICBIQmFzaWNCbG9jayBiZWdpbkJvZHlCbG9jayA9IGJ1aWxkZXIuYWRkTmV3QmxvY2soKTsKICAgIGNvbmRpdGlvbkVuZEJsb2NrLmFkZFN1Y2Nlc3NvcihiZWdpbkJvZHlCbG9jayk7CiAgICBidWlsZGVyLm9wZW4oYmVnaW5Cb2R5QmxvY2spOwoKICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlci5lbnRlckxvb3BCb2R5KGxvb3BDbG9zdXJlSW5mbywgc291cmNlSW5mb3JtYXRpb24pOwogICAgYm9keSgpOwoKICAgIFN1YkdyYXBoIGJvZHlHcmFwaCA9IG5ldyBTdWJHcmFwaChiZWdpbkJvZHlCbG9jaywgYnVpbGRlci5sYXN0T3BlbmVkQmxvY2spOwogICAgSEJhc2ljQmxvY2sgYm9keUJsb2NrID0gYnVpbGRlci5jdXJyZW50OwogICAgaWYgKGJ1aWxkZXIuY3VycmVudCAhPSBudWxsKSBidWlsZGVyLmNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwoKICAgIFN1YkV4cHJlc3Npb24gdXBkYXRlR3JhcGg7CgogICAgYm9vbCBsb29wSXNEZWdlbmVyYXRlID0gIWp1bXBIYW5kbGVyLmhhc0FueUNvbnRpbnVlKCkgJiYgYm9keUJsb2NrID09IG51bGw7CiAgICBpZiAoIWxvb3BJc0RlZ2VuZXJhdGUpIHsKICAgICAgLy8gVXBkYXRlLgogICAgICAvLyBXZSBjcmVhdGUgYW4gdXBkYXRlIGJsb2NrLCBldmVuIHdoZW4gd2UgYXJlIGluIGEgd2hpbGUgbG9vcC4gVGhlcmUgdGhlCiAgICAgIC8vIHVwZGF0ZSBibG9jayBpcyB0aGUganVtcC10YXJnZXQgZm9yIGNvbnRpbnVlIHN0YXRlbWVudHMuIFdlIGNvdWxkIGF2b2lkCiAgICAgIC8vIHRoZSBjcmVhdGlvbiBpZiB0aGVyZSBpcyBubyBjb250aW51ZSwgYnV0IGZvciBub3cgd2UgYWx3YXlzIGNyZWF0ZSBpdC4KICAgICAgSEJhc2ljQmxvY2sgdXBkYXRlQmxvY2sgPSBidWlsZGVyLmFkZE5ld0Jsb2NrKCk7CgogICAgICBMaXN0PExvY2Fsc0hhbmRsZXI+IGNvbnRpbnVlSGFuZGxlcnMgPSA8TG9jYWxzSGFuZGxlcj5bXTsKICAgICAganVtcEhhbmRsZXIKICAgICAgICAgIC5mb3JFYWNoQ29udGludWUoKEhDb250aW51ZSBpbnN0cnVjdGlvbiwgTG9jYWxzSGFuZGxlciBsb2NhbHMpIHsKICAgICAgICBpbnN0cnVjdGlvbi5ibG9jay5hZGRTdWNjZXNzb3IodXBkYXRlQmxvY2spOwogICAgICAgIGNvbnRpbnVlSGFuZGxlcnMuYWRkKGxvY2Fscyk7CiAgICAgIH0pOwoKICAgICAgaWYgKGJvZHlCbG9jayAhPSBudWxsKSB7CiAgICAgICAgY29udGludWVIYW5kbGVycy5hZGQoYnVpbGRlci5sb2NhbHNIYW5kbGVyKTsKICAgICAgICBib2R5QmxvY2suYWRkU3VjY2Vzc29yKHVwZGF0ZUJsb2NrKTsKICAgICAgfQoKICAgICAgYnVpbGRlci5vcGVuKHVwZGF0ZUJsb2NrKTsKICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyID0KICAgICAgICAgIGNvbnRpbnVlSGFuZGxlcnNbMF0ubWVyZ2VNdWx0aXBsZShjb250aW51ZUhhbmRsZXJzLCB1cGRhdGVCbG9jayk7CgogICAgICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzID0ganVtcEhhbmRsZXIubGFiZWxzOwogICAgICBpZiAobGFiZWxzLmlzTm90RW1wdHkpIHsKICAgICAgICBiZWdpbkJvZHlCbG9jay5zZXRCbG9ja0Zsb3coCiAgICAgICAgICAgIG5ldyBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24oCiAgICAgICAgICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihib2R5R3JhcGgpLCBqdW1wSGFuZGxlci5sYWJlbHMsCiAgICAgICAgICAgICAgICBpc0NvbnRpbnVlOiB0cnVlKSwKICAgICAgICAgICAgdXBkYXRlQmxvY2spOwogICAgICB9IGVsc2UgaWYgKGp1bXBUYXJnZXQgIT0gbnVsbCAmJiBqdW1wVGFyZ2V0LmlzQ29udGludWVUYXJnZXQpIHsKICAgICAgICBiZWdpbkJvZHlCbG9jay5zZXRCbG9ja0Zsb3coCiAgICAgICAgICAgIG5ldyBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24uaW1wbGljaXQoCiAgICAgICAgICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihib2R5R3JhcGgpLCBqdW1wVGFyZ2V0LAogICAgICAgICAgICAgICAgaXNDb250aW51ZTogdHJ1ZSksCiAgICAgICAgICAgIHVwZGF0ZUJsb2NrKTsKICAgICAgfQoKICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyCiAgICAgICAgICAuZW50ZXJMb29wVXBkYXRlcyhsb29wQ2xvc3VyZUluZm8sIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAgIHVwZGF0ZSgpOwoKICAgICAgSEJhc2ljQmxvY2sgdXBkYXRlRW5kQmxvY2sgPQogICAgICAgICAgYnVpbGRlci5jbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgICAgLy8gVGhlIGJhY2stZWRnZSBjb21wbGV0aW5nIHRoZSBjeWNsZS4KICAgICAgdXBkYXRlRW5kQmxvY2suYWRkU3VjY2Vzc29yKGNvbmRpdGlvbkJsb2NrKTsKICAgICAgdXBkYXRlR3JhcGggPSBuZXcgU3ViRXhwcmVzc2lvbih1cGRhdGVCbG9jaywgdXBkYXRlRW5kQmxvY2spOwoKICAgICAgLy8gQXZvaWQgYSBjcml0aWNhbCBlZGdlIGZyb20gdGhlIGNvbmRpdGlvbiB0byB0aGUgbG9vcC1leGl0IGJvZHkuCiAgICAgIEhCYXNpY0Jsb2NrIGNvbmRpdGlvbkV4aXRCbG9jayA9IGJ1aWxkZXIuYWRkTmV3QmxvY2soKTsKICAgICAgYnVpbGRlci5vcGVuKGNvbmRpdGlvbkV4aXRCbG9jayk7CiAgICAgIGJ1aWxkZXIuY2xvc2UobmV3IEhHb3RvKF9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICAgIGNvbmRpdGlvbkVuZEJsb2NrLmFkZFN1Y2Nlc3Nvcihjb25kaXRpb25FeGl0QmxvY2spOwoKICAgICAgZW5kTG9vcChjb25kaXRpb25CbG9jaywgY29uZGl0aW9uRXhpdEJsb2NrLCBqdW1wSGFuZGxlciwgc2F2ZWRMb2NhbHMpOwoKICAgICAgY29uZGl0aW9uQmxvY2sucG9zdFByb2Nlc3NMb29wSGVhZGVyKCk7CiAgICAgIEhMb29wQmxvY2tJbmZvcm1hdGlvbiBpbmZvID0gbmV3IEhMb29wQmxvY2tJbmZvcm1hdGlvbigKICAgICAgICAgIGxvb3BLaW5kKGxvb3ApLAogICAgICAgICAgYnVpbGRlci53cmFwRXhwcmVzc2lvbkdyYXBoKGluaXRpYWxpemVyR3JhcGgpLAogICAgICAgICAgYnVpbGRlci53cmFwRXhwcmVzc2lvbkdyYXBoKGNvbmRpdGlvbkV4cHJlc3Npb24pLAogICAgICAgICAgYnVpbGRlci53cmFwU3RhdGVtZW50R3JhcGgoYm9keUdyYXBoKSwKICAgICAgICAgIGJ1aWxkZXIud3JhcEV4cHJlc3Npb25HcmFwaCh1cGRhdGVHcmFwaCksCiAgICAgICAgICBjb25kaXRpb25CbG9jay5sb29wSW5mb3JtYXRpb24udGFyZ2V0LAogICAgICAgICAgY29uZGl0aW9uQmxvY2subG9vcEluZm9ybWF0aW9uLmxhYmVscywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAgIHN0YXJ0QmxvY2suc2V0QmxvY2tGbG93KGluZm8sIGJ1aWxkZXIuY3VycmVudCk7CiAgICAgIGxvb3BJbmZvLmxvb3BCbG9ja0luZm9ybWF0aW9uID0gaW5mbzsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoZSBib2R5IG9mIHRoZSBmb3Ivd2hpbGUgbG9vcCBhbHdheXMgYWJvcnRzLCBzbyB0aGVyZSBpcyBubyBiYWNrIGVkZ2UuCiAgICAgIC8vIFdlIHR1cm4gdGhlIGNvZGUgaW50bzoKICAgICAgLy8gaWYgKGNvbmRpdGlvbikgewogICAgICAvLyAgIGJvZHk7CiAgICAgIC8vIH0gZWxzZSB7CiAgICAgIC8vICAgLy8gV2UgYWx3YXlzIGNyZWF0ZSBhbiBlbXB0eSBlbHNlIGJsb2NrIHRvIGF2b2lkIGNyaXRpY2FsIGVkZ2VzLgogICAgICAvLyB9CiAgICAgIC8vCiAgICAgIC8vIElmIHRoZXJlIGlzIGFueSBicmVhayBpbiB0aGUgYm9keSwgd2UgYXR0YWNoIGEgc3ludGhldGljCiAgICAgIC8vIGxhYmVsIHRvIHRoZSBpZi4KICAgICAgSEJhc2ljQmxvY2sgZWxzZUJsb2NrID0gYnVpbGRlci5hZGROZXdCbG9jaygpOwogICAgICBidWlsZGVyLm9wZW4oZWxzZUJsb2NrKTsKICAgICAgYnVpbGRlci5jbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgICAgLy8gUGFzcyB0aGUgZWxzZUJsb2NrIGFzIHRoZSBicmFuY2hCbG9jaywgYmVjYXVzZSB0aGF0J3MgdGhlIGJsb2NrIHdlIGdvCiAgICAgIC8vIHRvIGp1c3QgYmVmb3JlIGxlYXZpbmcgdGhlICdsb29wJy4KICAgICAgZW5kTG9vcChjb25kaXRpb25CbG9jaywgZWxzZUJsb2NrLCBqdW1wSGFuZGxlciwgc2F2ZWRMb2NhbHMpOwoKICAgICAgU3ViR3JhcGggZWxzZUdyYXBoID0gbmV3IFN1YkdyYXBoKGVsc2VCbG9jaywgZWxzZUJsb2NrKTsKICAgICAgLy8gUmVtb3ZlIHRoZSBsb29wIGluZm9ybWF0aW9uIGF0dGFjaGVkIHRvIHRoZSBoZWFkZXIuCiAgICAgIGNvbmRpdGlvbkJsb2NrLmxvb3BJbmZvcm1hdGlvbiA9IG51bGw7CgogICAgICAvLyBSZW1vdmUgdGhlIFtITG9vcEJyYW5jaF0gaW5zdHJ1Y3Rpb24gYW5kIHJlcGxhY2UgaXQgd2l0aAogICAgICAvLyBbSElmXS4KICAgICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IGNvbmRpdGlvbkVuZEJsb2NrLmxhc3QuaW5wdXRzWzBdOwogICAgICBjb25kaXRpb25FbmRCbG9jay5hZGRBdEV4aXQobmV3IEhJZihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29uZGl0aW9uKSk7CiAgICAgIGNvbmRpdGlvbkVuZEJsb2NrLmFkZFN1Y2Nlc3NvcihlbHNlQmxvY2spOwogICAgICBjb25kaXRpb25FbmRCbG9jay5yZW1vdmUoY29uZGl0aW9uRW5kQmxvY2subGFzdCk7CiAgICAgIEhJZkJsb2NrSW5mb3JtYXRpb24gaW5mbyA9IG5ldyBISWZCbG9ja0luZm9ybWF0aW9uKAogICAgICAgICAgYnVpbGRlci53cmFwRXhwcmVzc2lvbkdyYXBoKGNvbmRpdGlvbkV4cHJlc3Npb24pLAogICAgICAgICAgYnVpbGRlci53cmFwU3RhdGVtZW50R3JhcGgoYm9keUdyYXBoKSwKICAgICAgICAgIGJ1aWxkZXIud3JhcFN0YXRlbWVudEdyYXBoKGVsc2VHcmFwaCkpOwoKICAgICAgY29uZGl0aW9uRW5kQmxvY2suc2V0QmxvY2tGbG93KGluZm8sIGJ1aWxkZXIuY3VycmVudCk7CiAgICAgIEhJZiBpZkJsb2NrID0gY29uZGl0aW9uRW5kQmxvY2subGFzdDsKICAgICAgaWZCbG9jay5ibG9ja0luZm9ybWF0aW9uID0gY29uZGl0aW9uRW5kQmxvY2suYmxvY2tGbG93OwoKICAgICAgLy8gSWYgdGhlIGJvZHkgaGFzIGFueSBicmVhaywgYXR0YWNoIGEgc3ludGhlc2l6ZWQgbGFiZWwgdG8gdGhlCiAgICAgIC8vIGlmIGJsb2NrLgogICAgICBpZiAoanVtcEhhbmRsZXIuaGFzQW55QnJlYWsoKSkgewogICAgICAgIExhYmVsRGVmaW5pdGlvbiBsYWJlbCA9CiAgICAgICAgICAgIGp1bXBUYXJnZXQuYWRkTGFiZWwoJ2xvb3AnLCBpc0JyZWFrVGFyZ2V0OiB0cnVlKTsKICAgICAgICBTdWJHcmFwaCBsYWJlbEdyYXBoID0gbmV3IFN1YkdyYXBoKGNvbmRpdGlvbkJsb2NrLCBidWlsZGVyLmN1cnJlbnQpOwogICAgICAgIEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbiBsYWJlbEluZm8gPSBuZXcgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uKAogICAgICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihsYWJlbEdyYXBoKSwKICAgICAgICAgICAgPExhYmVsRGVmaW5pdGlvbj5bbGFiZWxdKTsKCiAgICAgICAgY29uZGl0aW9uQmxvY2suc2V0QmxvY2tGbG93KGxhYmVsSW5mbywgYnVpbGRlci5jdXJyZW50KTsKCiAgICAgICAganVtcEhhbmRsZXIuZm9yRWFjaEJyZWFrKChIQnJlYWsgYnJlYWtJbnN0cnVjdGlvbiwgXykgewogICAgICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBicmVha0luc3RydWN0aW9uLmJsb2NrOwogICAgICAgICAgYmxvY2suYWRkQXRFeGl0KG5ldyBIQnJlYWsudG9MYWJlbCgKICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgbGFiZWwsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgICBibG9jay5yZW1vdmUoYnJlYWtJbnN0cnVjdGlvbik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGp1bXBIYW5kbGVyLmNsb3NlKCk7CiAgICBidWlsZGVyLmxvb3BEZXB0aC0tOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBuZXcgbG9vcC1oZWFkZXIgYmxvY2suIFRoZSBwcmV2aW91cyBbY3VycmVudF0gYmxvY2sKICAvLy8gaXMgY2xvc2VkIHdpdGggYW4gW0hHb3RvXSBhbmQgcmVwbGFjZWQgYnkgdGhlIG5ld2x5IGNyZWF0ZWQgYmxvY2suCiAgLy8vIEFsc28gbm90aWZpZXMgdGhlIGxvY2FscyBoYW5kbGVyIHRoYXQgd2UncmUgZW50ZXJpbmcgYSBsb29wLgogIEp1bXBIYW5kbGVyIGJlZ2luTG9vcEhlYWRlcihpci5UcmVlTm9kZSBub2RlLCBKdW1wVGFyZ2V0IGp1bXBUYXJnZXQpIHsKICAgIGFzc2VydCghYnVpbGRlci5pc0Fib3J0ZWQoKSk7CiAgICBIQmFzaWNCbG9jayBwcmV2aW91c0Jsb2NrID0gYnVpbGRlci5jbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKCiAgICBKdW1wSGFuZGxlciBqdW1wSGFuZGxlciA9CiAgICAgICAgY3JlYXRlSnVtcEhhbmRsZXIobm9kZSwganVtcFRhcmdldCwgaXNMb29wSnVtcDogdHJ1ZSk7CiAgICBIQmFzaWNCbG9jayBsb29wRW50cnkgPSBidWlsZGVyLmdyYXBoCiAgICAgICAgLmFkZE5ld0xvb3BIZWFkZXJCbG9jayhqdW1wSGFuZGxlci50YXJnZXQsIGp1bXBIYW5kbGVyLmxhYmVscyk7CiAgICBwcmV2aW91c0Jsb2NrLmFkZFN1Y2Nlc3Nvcihsb29wRW50cnkpOwogICAgYnVpbGRlci5vcGVuKGxvb3BFbnRyeSk7CgogICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLmJlZ2luTG9vcEhlYWRlcihsb29wRW50cnkpOwogICAgcmV0dXJuIGp1bXBIYW5kbGVyOwogIH0KCiAgLy8vIEVuZHMgdGhlIGxvb3AuCiAgLy8vCiAgLy8vIEl0IGRvZXMgdGhpcyBieToKICAvLy8gLSBjcmVhdGluZyBhIG5ldyBibG9jayBhbmQgYWRkaW5nIGl0IGFzIHN1Y2Nlc3NvciB0byB0aGUgW2JyYW5jaEV4aXRCbG9ja10KICAvLy8gICBhbmQgYW55IGJsb2NrcyB0aGF0IGVuZCBpbiBicmVhay4KICAvLy8gLSBvcGVuaW5nIHRoZSBuZXcgYmxvY2sgKHNldHRpbmcgYXMgW2N1cnJlbnRdKS4KICAvLy8gLSBub3RpZnlpbmcgdGhlIGxvY2FscyBoYW5kbGVyIHRoYXQgd2UncmUgZXhpdGluZyBhIGxvb3AuCiAgLy8vCiAgLy8vIFtzYXZlZExvY2Fsc10gYXJlIHRoZSBsb2NhbHMgZnJvbSB0aGUgZW5kIG9mIHRoZSBsb29wIGNvbmRpdGlvbi4KICAvLy8KICAvLy8gW2JyYW5jaEV4aXRCbG9ja10gaXMgdGhlIGV4aXQgKGJyYW5jaGluZykgYmxvY2sgb2YgdGhlIGNvbmRpdGlvbi4KICAvLy8gR2VuZXJhbGx5IHRoaXMgaXMgbm90IHRoZSB0b3Agb2YgdGhlIGxvb3AsIHNpbmNlIHRoaXMgd291bGQgbGVhZCB0bwogIC8vLyBjcml0aWNhbCBlZGdlcy4gSXQgaXMgbnVsbCBmb3IgZGVnZW5lcmF0ZSBkby13aGlsZSBsb29wcyB0aGF0IGhhdmUgbm8gYmFjawogIC8vLyBlZGdlIGJlY2F1c2UgdGhleSBhYm9ydCAodGhyb3cvcmV0dXJuL2JyZWFrIGluIHRoZSBib2R5IGFuZCBoYXZlIG5vCiAgLy8vIGNvbnRpbnVlcykuCiAgdm9pZCBlbmRMb29wKEhCYXNpY0Jsb2NrIGxvb3BFbnRyeSwgSEJhc2ljQmxvY2sgYnJhbmNoRXhpdEJsb2NrLAogICAgICBKdW1wSGFuZGxlciBqdW1wSGFuZGxlciwgTG9jYWxzSGFuZGxlciBzYXZlZExvY2FscykgewogICAgSEJhc2ljQmxvY2sgbG9vcEV4aXRCbG9jayA9IGJ1aWxkZXIuYWRkTmV3QmxvY2soKTsKCiAgICBMaXN0PExvY2Fsc0hhbmRsZXI+IGJyZWFrSGFuZGxlcnMgPSA8TG9jYWxzSGFuZGxlcj5bXTsKICAgIC8vIENvbGxlY3QgZGF0YSBmb3IgdGhlIHN1Y2Nlc3NvcnMgYW5kIHRoZSBwaGlzIGF0IGVhY2ggYnJlYWsuCiAgICBqdW1wSGFuZGxlci5mb3JFYWNoQnJlYWsoKEhCcmVhayBicmVha0luc3RydWN0aW9uLCBMb2NhbHNIYW5kbGVyIGxvY2FscykgewogICAgICBicmVha0luc3RydWN0aW9uLmJsb2NrLmFkZFN1Y2Nlc3Nvcihsb29wRXhpdEJsb2NrKTsKICAgICAgYnJlYWtIYW5kbGVycy5hZGQobG9jYWxzKTsKICAgIH0pOwoKICAgIC8vIFRoZSBleGl0IGJsb2NrIGlzIGEgc3VjY2Vzc29yIG9mIHRoZSBsb29wIGNvbmRpdGlvbiBpZiBpdCBpcyByZWFjaGVkLgogICAgLy8gV2UgZG9uJ3QgYWRkIHRoZSBzdWNjZXNzb3IgaW4gdGhlIGNhc2Ugb2YgYSB3aGlsZS9mb3IgbG9vcCB0aGF0IGFib3J0cwogICAgLy8gYmVjYXVzZSB0aGUgY2FsbGVyIG9mIGVuZExvb3Agd2lsbCBiZSB3aXJpbmcgdXAgYSBzcGVjaWFsIGVtcHR5IGVsc2UKICAgIC8vIGJsb2NrIGluc3RlYWQuCiAgICBpZiAoYnJhbmNoRXhpdEJsb2NrICE9IG51bGwpIHsKICAgICAgYnJhbmNoRXhpdEJsb2NrLmFkZFN1Y2Nlc3Nvcihsb29wRXhpdEJsb2NrKTsKICAgIH0KICAgIC8vIFVwZGF0ZSB0aGUgcGhpcyBhdCB0aGUgbG9vcCBlbnRyeSB3aXRoIHRoZSBjdXJyZW50IHZhbHVlcyBvZiBsb2NhbHMuCiAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIuZW5kTG9vcChsb29wRW50cnkpOwoKICAgIC8vIFN0YXJ0IGdlbmVyYXRpbmcgY29kZSBmb3IgdGhlIGV4aXQgYmxvY2suCiAgICBidWlsZGVyLm9wZW4obG9vcEV4aXRCbG9jayk7CgogICAgLy8gQ3JlYXRlIGEgbmV3IGxvY2Fsc0hhbmRsZXIgZm9yIHRoZSBsb29wRXhpdEJsb2NrIHdpdGggdGhlIGNvcnJlY3QgcGhpcy4KICAgIGlmICghYnJlYWtIYW5kbGVycy5pc0VtcHR5KSB7CiAgICAgIGlmIChicmFuY2hFeGl0QmxvY2sgIT0gbnVsbCkgewogICAgICAgIC8vIEFkZCB0aGUgdmFsdWVzIG9mIHRoZSBsb2NhbHMgYXQgdGhlIGVuZCBvZiB0aGUgY29uZGl0aW9uIGJsb2NrIHRvCiAgICAgICAgLy8gdGhlIHBoaXMuICBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IGZsb3cgdG8gdGhlIGV4aXQgaWYgdGhlCiAgICAgICAgLy8gY29uZGl0aW9uIGZhaWxzLgogICAgICAgIGJyZWFrSGFuZGxlcnMuYWRkKHNhdmVkTG9jYWxzKTsKICAgICAgfQogICAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIgPQogICAgICAgICAgc2F2ZWRMb2NhbHMubWVyZ2VNdWx0aXBsZShicmVha0hhbmRsZXJzLCBsb29wRXhpdEJsb2NrKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlciA9IHNhdmVkTG9jYWxzOwogICAgfQogIH0KCiAgLy8vIERldGVybWluZSB3aGF0IGtpbmQgb2YgbG9vcCBbbm9kZV0gcmVwcmVzZW50cy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBpcyBvbmUgb2YgdGhlIGtpbmRzIGRlZmluZWQgaW4gW0hMb29wQmxvY2tJbmZvcm1hdGlvbl0uCiAgaW50IGxvb3BLaW5kKGlyLlRyZWVOb2RlIG5vZGUpOwoKICAvLy8gQ3JlYXRlcyBhIFtKdW1wSGFuZGxlcl0gZm9yIGEgc3RhdGVtZW50LiBUaGUgbm9kZSBtdXN0IGJlIGEganVtcAogIC8vLyB0YXJnZXQuIElmIHRoZXJlIGFyZSBubyBicmVha3Mgb3IgY29udGludWVzIHRhcmdldGluZyB0aGUgc3RhdGVtZW50LAogIC8vLyBhIHNwZWNpYWwgIm51bGwgaGFuZGxlciIgaXMgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIFtpc0xvb3BKdW1wXSBpcyBbOnRydWU6XSB3aGVuIHRoZSBqdW1wIGhhbmRsZXIgaXMgZm9yIGEgbG9vcC4gVGhpcyBpcyB1c2VkCiAgLy8vIHRvIGRpc3Rpbmd1aXNoIHRoZSBzeW50aGVzaXplZCBsb29wIGNyZWF0ZWQgZm9yIGEgc3dpdGNoIHN0YXRlbWVudCB3aXRoCiAgLy8vIGNvbnRpbnVlIHN0YXRlbWVudHMgZnJvbSBzaW1wbGUgc3dpdGNoIHN0YXRlbWVudHMuCiAgSnVtcEhhbmRsZXIgY3JlYXRlSnVtcEhhbmRsZXIoaXIuVHJlZU5vZGUgbm9kZSwgSnVtcFRhcmdldCBqdW1wVGFyZ2V0LAogICAgICB7Ym9vbCBpc0xvb3BKdW1wfSk7Cn0KCi8vIFRPRE8oaGV0KTogU2luY2Uga2VybmVsIHNpbXBsaWZpZXMgbG9vcCBicmVha3MgYW5kIGNvbnRpbnVlcywgd2Ugc2hvdWxkCi8vIHJld3JpdGUgdGhlIGxvb3AgaGFuZGxlciBmcm9tIHNjcmF0Y2ggdG8gYWNjb3VudCBmb3IgdGhlIHNpbXBsaWZpZWQgc3RydWN0dXJlCmNsYXNzIEtlcm5lbExvb3BIYW5kbGVyIGV4dGVuZHMgTG9vcEhhbmRsZXIgewogIEBvdmVycmlkZQogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyOwoKICBLZXJuZWxMb29wSGFuZGxlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlcikKICAgICAgOiB0aGlzLmJ1aWxkZXIgPSBidWlsZGVyLAogICAgICAgIHN1cGVyKGJ1aWxkZXIpOwoKICBAb3ZlcnJpZGUKICBKdW1wSGFuZGxlciBjcmVhdGVKdW1wSGFuZGxlcihpci5UcmVlTm9kZSBub2RlLCBKdW1wVGFyZ2V0IGp1bXBUYXJnZXQsCiAgICAgICAgICB7Ym9vbCBpc0xvb3BKdW1wfSkgPT4KICAgICAgYnVpbGRlci5jcmVhdGVKdW1wSGFuZGxlcihub2RlLCBqdW1wVGFyZ2V0LCBpc0xvb3BKdW1wOiBpc0xvb3BKdW1wKTsKCiAgQG92ZXJyaWRlCiAgaW50IGxvb3BLaW5kKGlyLlRyZWVOb2RlIG5vZGUpID0+IG5vZGUuYWNjZXB0KG5ldyBfS2VybmVsTG9vcFR5cGVWaXNpdG9yKCkpOwp9CgpjbGFzcyBfS2VybmVsTG9vcFR5cGVWaXNpdG9yIGV4dGVuZHMgaXIuVmlzaXRvcjxpbnQ+IHsKICBAb3ZlcnJpZGUKICBpbnQgZGVmYXVsdE5vZGUoaXIuTm9kZSBub2RlKSA9PiBITG9vcEJsb2NrSW5mb3JtYXRpb24uTk9UX0FfTE9PUDsKCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0V2hpbGVTdGF0ZW1lbnQoaXIuV2hpbGVTdGF0ZW1lbnQgbm9kZSkgPT4KICAgICAgSExvb3BCbG9ja0luZm9ybWF0aW9uLldISUxFX0xPT1A7CgogIEBvdmVycmlkZQogIGludCB2aXNpdEZvclN0YXRlbWVudChpci5Gb3JTdGF0ZW1lbnQgbm9kZSkgPT4gSExvb3BCbG9ja0luZm9ybWF0aW9uLkZPUl9MT09QOwoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXREb1N0YXRlbWVudChpci5Eb1N0YXRlbWVudCBub2RlKSA9PgogICAgICBITG9vcEJsb2NrSW5mb3JtYXRpb24uRE9fV0hJTEVfTE9PUDsKCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Rm9ySW5TdGF0ZW1lbnQoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgPT4KICAgICAgSExvb3BCbG9ja0luZm9ybWF0aW9uLkZPUl9JTl9MT09QOwoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIEhMb29wQmxvY2tJbmZvcm1hdGlvbi5TV0lUQ0hfQ09OVElOVUVfTE9PUDsKfQqBZABOTjwBKAExITEoAR4cHhUBKR0nAR0BMi8BMAY7PT4TFCkdGSAVEy0RFhQsERQbEwFJARgrHB49JRQkTwYBGUFBMjkBNSxNKD4BSksYTwERODQiAU0MAVAtUQEfAVAdEVBRUDcBQBJLNSYKAR81LQgBIR5MATkfJSpOIxpGJTNGIxoIARxBARABIzotM0QBST4oNjoBTQEuPho5PDE0MTEeATYsDVEgGhESTAsJQho1HzZPLEQBPz0tAUIQQU0xODo8MTIBPSw+AUYTJyA+TUs3JwFBAUA2LkAqDAgGGRkEAURJQ0kiUAEePypIKx0BNhgEARUGF1EqNkAGRwZISlFKEkM8NwE7Q086IQgBTU5MFiMzBkwuATEhAU8iJU1IHCgIHkMNKwYEATUGSSIBR0ssBlFOOUkaAgFLUS4MJwEzIBgBDEkgSwEMTwIBNwxFAQw1KAEMUQEMLysBDDUpAQw3MgIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9sb29wX2hhbmRsZXIuZGFydDlzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2Evc3NhX2JyYW5jaF9idWlsZGVyLmRhcnSepS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwoKaW1wb3J0ICdidWlsZGVyX2tlcm5lbC5kYXJ0JzsKaW1wb3J0ICdsb2NhbHNfaGFuZGxlci5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKCmNsYXNzIFNzYUJyYW5jaCB7CiAgZmluYWwgU3NhQnJhbmNoQnVpbGRlciBicmFuY2hCdWlsZGVyOwogIGZpbmFsIEhCYXNpY0Jsb2NrIGJsb2NrOwogIExvY2Fsc0hhbmRsZXIgc3RhcnRMb2NhbHM7CiAgTG9jYWxzSGFuZGxlciBleGl0TG9jYWxzOwogIFN1YkdyYXBoIGdyYXBoOwoKICBTc2FCcmFuY2godGhpcy5icmFuY2hCdWlsZGVyKSA6IGJsb2NrID0gbmV3IEhCYXNpY0Jsb2NrKCk7Cn0KCmNsYXNzIFNzYUJyYW5jaEJ1aWxkZXIgewogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyOwogIGZpbmFsIFNwYW5uYWJsZSBkaWFnbm9zdGljTm9kZTsKCiAgU3NhQnJhbmNoQnVpbGRlcih0aGlzLmJ1aWxkZXIsIFt0aGlzLmRpYWdub3N0aWNOb2RlXSk7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGJ1aWxkZXIuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgdm9pZCBjaGVja05vdEFib3J0ZWQoKSB7CiAgICBpZiAoYnVpbGRlci5pc0Fib3J0ZWQoKSkgewogICAgICBmYWlsZWRBdChkaWFnbm9zdGljTm9kZSwgImFib3J0ZWQgY29udHJvbCBmbG93Iik7CiAgICB9CiAgfQoKICB2b2lkIGJ1aWxkQ29uZGl0aW9uKAogICAgICB2b2lkIHZpc2l0Q29uZGl0aW9uKCksCiAgICAgIFNzYUJyYW5jaCBjb25kaXRpb25CcmFuY2gsCiAgICAgIFNzYUJyYW5jaCB0aGVuQnJhbmNoLAogICAgICBTc2FCcmFuY2ggZWxzZUJyYW5jaCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHN0YXJ0QnJhbmNoKGNvbmRpdGlvbkJyYW5jaCk7CiAgICB2aXNpdENvbmRpdGlvbigpOwogICAgY2hlY2tOb3RBYm9ydGVkKCk7CiAgICBhc3NlcnQoaWRlbnRpY2FsKGJ1aWxkZXIuY3VycmVudCwgYnVpbGRlci5sYXN0T3BlbmVkQmxvY2spKTsKICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb25WYWx1ZSA9IGJ1aWxkZXIucG9wQm9vbGlmaWVkKCk7CiAgICBISWYgYnJhbmNoID0gbmV3IEhJZihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29uZGl0aW9uVmFsdWUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIEhCYXNpY0Jsb2NrIGNvbmRpdGlvbkV4aXRCbG9jayA9IGJ1aWxkZXIuY3VycmVudDsKICAgIGJ1aWxkZXIuY2xvc2UoYnJhbmNoKTsKICAgIGNvbmRpdGlvbkJyYW5jaC5leGl0TG9jYWxzID0gYnVpbGRlci5sb2NhbHNIYW5kbGVyOwogICAgY29uZGl0aW9uRXhpdEJsb2NrLmFkZFN1Y2Nlc3Nvcih0aGVuQnJhbmNoLmJsb2NrKTsKICAgIGNvbmRpdGlvbkV4aXRCbG9jay5hZGRTdWNjZXNzb3IoZWxzZUJyYW5jaC5ibG9jayk7CiAgICBib29sIGNvbmRpdGlvbkJyYW5jaExvY2Fsc0NhbkJlUmV1c2VkID0KICAgICAgICBtZXJnZUxvY2Fscyhjb25kaXRpb25CcmFuY2gsIHRoZW5CcmFuY2gsIG1heVJldXNlRnJvbUxvY2FsczogdHJ1ZSk7CiAgICBtZXJnZUxvY2Fscyhjb25kaXRpb25CcmFuY2gsIGVsc2VCcmFuY2gsCiAgICAgICAgbWF5UmV1c2VGcm9tTG9jYWxzOiBjb25kaXRpb25CcmFuY2hMb2NhbHNDYW5CZVJldXNlZCk7CgogICAgY29uZGl0aW9uQnJhbmNoLmdyYXBoID0KICAgICAgICBuZXcgU3ViRXhwcmVzc2lvbihjb25kaXRpb25CcmFuY2guYmxvY2ssIGNvbmRpdGlvbkV4aXRCbG9jayk7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBsb2NhbHMgb2YgdGhlIFtmcm9tQnJhbmNoXSBtYXkgYmUgcmV1c2VkLiBBIFs6dHJ1ZTpdCiAgLy8vIHJldHVybiB2YWx1ZSBpbXBsaWVzIHRoYXQgW21heVJldXNlRnJvbUxvY2Fsc10gd2FzIHNldCB0byBbOnRydWU6XS4KICBib29sIG1lcmdlTG9jYWxzKFNzYUJyYW5jaCBmcm9tQnJhbmNoLCBTc2FCcmFuY2ggdG9CcmFuY2gsCiAgICAgIHtib29sIG1heVJldXNlRnJvbUxvY2Fsc30pIHsKICAgIExvY2Fsc0hhbmRsZXIgZnJvbUxvY2FscyA9IGZyb21CcmFuY2guZXhpdExvY2FsczsKICAgIGlmICh0b0JyYW5jaC5zdGFydExvY2FscyA9PSBudWxsKSB7CiAgICAgIGlmIChtYXlSZXVzZUZyb21Mb2NhbHMpIHsKICAgICAgICB0b0JyYW5jaC5zdGFydExvY2FscyA9IGZyb21Mb2NhbHM7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHRvQnJhbmNoLnN0YXJ0TG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShmcm9tTG9jYWxzKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdG9CcmFuY2guc3RhcnRMb2NhbHMubWVyZ2VXaXRoKGZyb21Mb2NhbHMsIHRvQnJhbmNoLmJsb2NrKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHN0YXJ0QnJhbmNoKFNzYUJyYW5jaCBicmFuY2gpIHsKICAgIGJ1aWxkZXIuZ3JhcGguYWRkQmxvY2soYnJhbmNoLmJsb2NrKTsKICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlciA9IGJyYW5jaC5zdGFydExvY2FsczsKICAgIGJ1aWxkZXIub3BlbihicmFuY2guYmxvY2spOwogIH0KCiAgSEluc3RydWN0aW9uIGJ1aWxkQnJhbmNoKFNzYUJyYW5jaCBicmFuY2gsIHZvaWQgdmlzaXRCcmFuY2goKSwKICAgICAgU3NhQnJhbmNoIGpvaW5CcmFuY2gsIGJvb2wgaXNFeHByZXNzaW9uKSB7CiAgICBzdGFydEJyYW5jaChicmFuY2gpOwogICAgdmlzaXRCcmFuY2goKTsKICAgIGJyYW5jaC5ncmFwaCA9IG5ldyBTdWJHcmFwaChicmFuY2guYmxvY2ssIGJ1aWxkZXIubGFzdE9wZW5lZEJsb2NrKTsKICAgIGJyYW5jaC5leGl0TG9jYWxzID0gYnVpbGRlci5sb2NhbHNIYW5kbGVyOwogICAgaWYgKCFidWlsZGVyLmlzQWJvcnRlZCgpKSB7CiAgICAgIGJ1aWxkZXIuZ290byhidWlsZGVyLmN1cnJlbnQsIGpvaW5CcmFuY2guYmxvY2spOwogICAgICBtZXJnZUxvY2FscyhicmFuY2gsIGpvaW5CcmFuY2gsIG1heVJldXNlRnJvbUxvY2FsczogdHJ1ZSk7CiAgICB9CiAgICBpZiAoaXNFeHByZXNzaW9uKSB7CiAgICAgIGNoZWNrTm90QWJvcnRlZCgpOwogICAgICByZXR1cm4gYnVpbGRlci5wb3AoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgaGFuZGxlSWYodm9pZCB2aXNpdENvbmRpdGlvbigpLCB2b2lkIHZpc2l0VGhlbigpLCB2b2lkIHZpc2l0RWxzZSgpLAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBpZiAodmlzaXRFbHNlID09IG51bGwpIHsKICAgICAgLy8gTWFrZSBzdXJlIHRvIGhhdmUgYW4gZWxzZSBwYXJ0IHRvIGF2b2lkIGEgY3JpdGljYWwgZWRnZS4gQQogICAgICAvLyBjcml0aWNhbCBlZGdlIGlzIGFuIGVkZ2UgdGhhdCBjb25uZWN0cyBhIGJsb2NrIHdpdGggbXVsdGlwbGUKICAgICAgLy8gc3VjY2Vzc29ycyB0byBhIGJsb2NrIHdpdGggbXVsdGlwbGUgcHJlZGVjZXNzb3JzLiBXZSBhdm9pZAogICAgICAvLyBzdWNoIGVkZ2VzIGJlY2F1c2UgdGhleSBwcmV2ZW50IGluc2VydGluZyBjb3BpZXMgZHVyaW5nIGNvZGUKICAgICAgLy8gZ2VuZXJhdGlvbiBvZiBwaGkgaW5zdHJ1Y3Rpb25zLgogICAgICB2aXNpdEVsc2UgPSAoKSB7fTsKICAgIH0KCiAgICBfaGFuZGxlRGlhbW9uZEJyYW5jaCh2aXNpdENvbmRpdGlvbiwgdmlzaXRUaGVuLCB2aXNpdEVsc2UsCiAgICAgICAgaXNFeHByZXNzaW9uOiBmYWxzZSwgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIGhhbmRsZUNvbmRpdGlvbmFsKHZvaWQgdmlzaXRDb25kaXRpb24oKSwgdm9pZCB2aXNpdFRoZW4oKSwgdm9pZCB2aXNpdEVsc2UoKSkgewogICAgYXNzZXJ0KHZpc2l0RWxzZSAhPSBudWxsKTsKICAgIF9oYW5kbGVEaWFtb25kQnJhbmNoKHZpc2l0Q29uZGl0aW9uLCB2aXNpdFRoZW4sIHZpc2l0RWxzZSwKICAgICAgICBpc0V4cHJlc3Npb246IHRydWUpOwogIH0KCiAgaGFuZGxlSWZOdWxsKHZvaWQgbGVmdCgpLCB2b2lkIHJpZ2h0KCkpIHsKICAgIC8vIHggPz8geSBpcyB0cmFuc2Zvcm1lZCBpbnRvOiB4ID09IG51bGwgPyB5IDogeAogICAgSEluc3RydWN0aW9uIGxlZnRFeHByZXNzaW9uOwogICAgaGFuZGxlQ29uZGl0aW9uYWwoKCkgewogICAgICBsZWZ0KCk7CiAgICAgIGxlZnRFeHByZXNzaW9uID0gYnVpbGRlci5wb3AoKTsKICAgICAgYnVpbGRlci5wdXNoQ2hlY2tOdWxsKGxlZnRFeHByZXNzaW9uKTsKICAgIH0sIHJpZ2h0LCAoKSA9PiBidWlsZGVyLnN0YWNrLmFkZChsZWZ0RXhwcmVzc2lvbikpOwogIH0KCiAgLy8vIENyZWF0ZXMgdGhlIGdyYXBoIGZvciAnJiYnIG9yICd8fCcgb3BlcmF0b3JzLgogIC8vLwogIC8vLyB4ICYmIHkgaXMgdHJhbnNmb3JtZWQgaW50bzoKICAvLy8KICAvLy8gICAgIHQwID0gYm9vbGlmeSh4KTsKICAvLy8gICAgIGlmICh0MCkgewogIC8vLyAgICAgICB0MSA9IGJvb2xpZnkoeSk7CiAgLy8vICAgICB9CiAgLy8vICAgICByZXN1bHQgPSBwaGkodDEsIGZhbHNlKTsKICAvLy8KICAvLy8geCB8fCB5IGlzIHRyYW5zZm9ybWVkIGludG86CiAgLy8vCiAgLy8vICAgICB0MCA9IGJvb2xpZnkoeCk7CiAgLy8vICAgICBpZiAobm90KHQwKSkgewogIC8vLyAgICAgICB0MSA9IGJvb2xpZnkoeSk7CiAgLy8vICAgICB9CiAgLy8vICAgICByZXN1bHQgPSBwaGkodDEsIHRydWUpOwogIHZvaWQgaGFuZGxlTG9naWNhbEJpbmFyeSgKICAgICAgdm9pZCBsZWZ0KCksIHZvaWQgcmlnaHQoKSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIGlzQW5kfSkgewogICAgSEluc3RydWN0aW9uIGJvb2xpZmllZExlZnQ7CiAgICBISW5zdHJ1Y3Rpb24gYm9vbGlmaWVkUmlnaHQ7CgogICAgdm9pZCB2aXNpdENvbmRpdGlvbigpIHsKICAgICAgbGVmdCgpOwogICAgICBib29saWZpZWRMZWZ0ID0gYnVpbGRlci5wb3BCb29saWZpZWQoKTsKICAgICAgYnVpbGRlci5zdGFjay5hZGQoYm9vbGlmaWVkTGVmdCk7CiAgICAgIGlmICghaXNBbmQpIHsKICAgICAgICBidWlsZGVyLnB1c2gobmV3IEhOb3QoYnVpbGRlci5wb3AoKSwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpCiAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9CiAgICB9CgogICAgdm9pZCB2aXNpdFRoZW4oKSB7CiAgICAgIHJpZ2h0KCk7CiAgICAgIGJvb2xpZmllZFJpZ2h0ID0gYnVpbGRlci5wb3BCb29saWZpZWQoKTsKICAgIH0KCiAgICBoYW5kbGVJZih2aXNpdENvbmRpdGlvbiwgdmlzaXRUaGVuLCBudWxsLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBIQ29uc3RhbnQgbm90SXNBbmQgPQogICAgICAgIGJ1aWxkZXIuZ3JhcGguYWRkQ29uc3RhbnRCb29sKCFpc0FuZCwgYnVpbGRlci5jbG9zZWRXb3JsZCk7CiAgICBIUGhpIHJlc3VsdCA9IG5ldyBIUGhpLm1hbnlJbnB1dHMoCiAgICAgICAgbnVsbCwKICAgICAgICA8SEluc3RydWN0aW9uPltib29saWZpZWRSaWdodCwgbm90SXNBbmRdLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBidWlsZGVyLmN1cnJlbnQuYWRkUGhpKHJlc3VsdCk7CiAgICBidWlsZGVyLnN0YWNrLmFkZChyZXN1bHQpOwogIH0KCiAgdm9pZCBfaGFuZGxlRGlhbW9uZEJyYW5jaCgKICAgICAgdm9pZCB2aXNpdENvbmRpdGlvbigpLCB2b2lkIHZpc2l0VGhlbigpLCB2b2lkIHZpc2l0RWxzZSgpLAogICAgICB7Ym9vbCBpc0V4cHJlc3Npb24sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgU3NhQnJhbmNoIGNvbmRpdGlvbkJyYW5jaCA9IG5ldyBTc2FCcmFuY2godGhpcyk7CiAgICBTc2FCcmFuY2ggdGhlbkJyYW5jaCA9IG5ldyBTc2FCcmFuY2godGhpcyk7CiAgICBTc2FCcmFuY2ggZWxzZUJyYW5jaCA9IG5ldyBTc2FCcmFuY2godGhpcyk7CiAgICBTc2FCcmFuY2ggam9pbkJyYW5jaCA9IG5ldyBTc2FCcmFuY2godGhpcyk7CgogICAgY29uZGl0aW9uQnJhbmNoLnN0YXJ0TG9jYWxzID0gYnVpbGRlci5sb2NhbHNIYW5kbGVyOwogICAgYnVpbGRlci5nb3RvKGJ1aWxkZXIuY3VycmVudCwgY29uZGl0aW9uQnJhbmNoLmJsb2NrKTsKCiAgICBidWlsZENvbmRpdGlvbih2aXNpdENvbmRpdGlvbiwgY29uZGl0aW9uQnJhbmNoLCB0aGVuQnJhbmNoLCBlbHNlQnJhbmNoLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIEhJbnN0cnVjdGlvbiB0aGVuVmFsdWUgPQogICAgICAgIGJ1aWxkQnJhbmNoKHRoZW5CcmFuY2gsIHZpc2l0VGhlbiwgam9pbkJyYW5jaCwgaXNFeHByZXNzaW9uKTsKICAgIEhJbnN0cnVjdGlvbiBlbHNlVmFsdWUgPQogICAgICAgIGJ1aWxkQnJhbmNoKGVsc2VCcmFuY2gsIHZpc2l0RWxzZSwgam9pbkJyYW5jaCwgaXNFeHByZXNzaW9uKTsKCiAgICBpZiAoaXNFeHByZXNzaW9uKSB7CiAgICAgIGFzc2VydCh0aGVuVmFsdWUgIT0gbnVsbCAmJiBlbHNlVmFsdWUgIT0gbnVsbCk7CiAgICAgIEhQaGkgcGhpID0gbmV3IEhQaGkubWFueUlucHV0cyhudWxsLCA8SEluc3RydWN0aW9uPlt0aGVuVmFsdWUsIGVsc2VWYWx1ZV0sCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgIGpvaW5CcmFuY2guYmxvY2suYWRkUGhpKHBoaSk7CiAgICAgIGJ1aWxkZXIuc3RhY2suYWRkKHBoaSk7CiAgICB9CgogICAgSEJhc2ljQmxvY2sgam9pbkJsb2NrOwogICAgLy8gSWYgYXQgbGVhc3Qgb25lIGJyYW5jaCBkaWQgbm90IGFib3J0LCBvcGVuIHRoZSBqb2luQnJhbmNoLgogICAgaWYgKCFqb2luQnJhbmNoLmJsb2NrLnByZWRlY2Vzc29ycy5pc0VtcHR5KSB7CiAgICAgIHN0YXJ0QnJhbmNoKGpvaW5CcmFuY2gpOwogICAgICBqb2luQmxvY2sgPSBqb2luQnJhbmNoLmJsb2NrOwogICAgfQoKICAgIEhJZkJsb2NrSW5mb3JtYXRpb24gaW5mbyA9IG5ldyBISWZCbG9ja0luZm9ybWF0aW9uKAogICAgICAgIG5ldyBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24oY29uZGl0aW9uQnJhbmNoLmdyYXBoKSwKICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbih0aGVuQnJhbmNoLmdyYXBoKSwKICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihlbHNlQnJhbmNoLmdyYXBoKSk7CgogICAgSEJhc2ljQmxvY2sgY29uZGl0aW9uU3RhcnRCbG9jayA9IGNvbmRpdGlvbkJyYW5jaC5ibG9jazsKICAgIGNvbmRpdGlvblN0YXJ0QmxvY2suc2V0QmxvY2tGbG93KGluZm8sIGpvaW5CbG9jayk7CiAgICBTdWJHcmFwaCBjb25kaXRpb25HcmFwaCA9IGNvbmRpdGlvbkJyYW5jaC5ncmFwaDsKICAgIEhJZiBicmFuY2ggPSBjb25kaXRpb25HcmFwaC5lbmQubGFzdDsKICAgIGFzc2VydChicmFuY2ggaXMgSElmKTsKICAgIGJyYW5jaC5ibG9ja0luZm9ybWF0aW9uID0gY29uZGl0aW9uU3RhcnRCbG9jay5ibG9ja0Zsb3c7CiAgfQp9CoDsAE5OPAEZMSgBHh4VARIoGx0cEgE9AgEZJyIBOQEyLwEbHzgGBAEXHSEcHC0iFhdBOj8vNhs4NzcsTC0/ARxGBAFPSj0jNiggKxYPQxUIDUITBgQBJyowIAQBQTEZE0gvIDdBBhgZHAYRBAFGLx1ERkRGKRkGAT9EBAFRHz8dBAEsNSEbDiYtOAQBNAYiBhsUHQwjBiIGGxkdDCIcRhYgIQEcDi4oFEw0CAYBFw8vBgEuLxlEJw4yKi8kHwQBHUFCNTAwMAE5OgFMHB1GHUYBGDZRLSQeBgEbQjIfJAYBOEM5OgE9NzUqGz0EAgEwcGFja2FnZTpjb21waWxlci9zcmMvc3NhL3NzYV9icmFuY2hfYnVpbGRlci5kYXJ0P3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9zd2l0Y2hfY29udGludWVfYW5hbHlzaXMuZGFydI4yLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKLy8vIEhlbHBlciBjbGFzcyB0aGF0IHRyYXZlcnNlcyBhIGtlcm5lbCBBU1Qgc3VidHJlZSB0byBzZWUgaWYgaXQgaGFzIGFueQovLy8gY29udGludWUgc3RhdGVtZW50cyBpbiB0aGUgYm9keSBvZiBhbnkgc3dpdGNoIGNhc2VzIChoYXZpbmcgY29udGludWUKLy8vIHN0YXRlbWVudHMgcmVzdWx0cyBpbiBhIG1vcmUgY29tcGxleCBnZW5lcmF0ZWQgY29kZSkuCmNsYXNzIFN3aXRjaENvbnRpbnVlQW5hbHlzaXMgZXh0ZW5kcyBpci5WaXNpdG9yPGJvb2w+IHsKICBTd2l0Y2hDb250aW51ZUFuYWx5c2lzLl8oKTsKCiAgc3RhdGljIGJvb2wgY29udGFpbnNDb250aW51ZShpci5TdGF0ZW1lbnQgc3dpdGNoQ2FzZUJvZHkpIHsKICAgIHJldHVybiBzd2l0Y2hDYXNlQm9keS5hY2NlcHQobmV3IFN3aXRjaENvbnRpbnVlQW5hbHlzaXMuXygpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudCBjb250aW51ZVN0bXQpIHsKICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBDaGVjayB3aGF0IHRoZSB0YXJnZXQgb2YgdGhpcyBjb250aW51ZSBzdGF0ZW1lbnQgYWN0dWFsbHkKICAgIC8vIElTLCBiZWNhdXNlIGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgbGFiZWwgcG9pbnRzIGlmIHdlIGhhdmUgYSBuZXN0ZWQKICAgIC8vIHN3aXRjaCBzdGF0ZW1lbnQgd2UgbWlnaHQgYmUgYWJsZSB0byBvdXRwdXQgc2ltcGxlciBjb2RlIChub3QgdGhlIGNvbXBsZXgKICAgIC8vIHN3aXRjaCBzdGF0ZW1lbnQpLgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QmxvY2soaXIuQmxvY2sgYmxvY2spIHsKICAgIGZvciAoaXIuU3RhdGVtZW50IHN0YXRlbWVudCBpbiBibG9jay5zdGF0ZW1lbnRzKSB7CiAgICAgIGlmIChzdGF0ZW1lbnQuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGlyLkxhYmVsZWRTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICByZXR1cm4gc3RhdGVtZW50LmJvZHkuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IGRvU3RhdGVtZW50KSB7CiAgICByZXR1cm4gZG9TdGF0ZW1lbnQuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Rm9yU3RhdGVtZW50KGlyLkZvclN0YXRlbWVudCBmb3JTdGF0ZW1lbnQpIHsKICAgIHJldHVybiBmb3JTdGF0ZW1lbnQuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoaXIuRm9ySW5TdGF0ZW1lbnQgZm9ySW5TdGF0ZW1lbnQpIHsKICAgIHJldHVybiBmb3JJblN0YXRlbWVudC5ib2R5LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IHN3aXRjaFN0YXRlbWVudCkgewogICAgZm9yICh2YXIgc3dpdGNoQ2FzZSBpbiBzd2l0Y2hTdGF0ZW1lbnQuY2FzZXMpIHsKICAgICAgaWYgKHN3aXRjaENhc2UuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSkgewogICAgcmV0dXJuIHN3aXRjaENhc2UuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SWZTdGF0ZW1lbnQoaXIuSWZTdGF0ZW1lbnQgaWZTdGF0ZW1lbnQpIHsKICAgIHJldHVybiBpZlN0YXRlbWVudC50aGVuLmFjY2VwdCh0aGlzKSB8fAogICAgICAgIChpZlN0YXRlbWVudC5vdGhlcndpc2UgIT0gbnVsbCAmJiBpZlN0YXRlbWVudC5vdGhlcndpc2UuYWNjZXB0KHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUcnlDYXRjaChpci5UcnlDYXRjaCB0cnlDYXRjaCkgewogICAgaWYgKHRyeUNhdGNoLmJvZHkuYWNjZXB0KHRoaXMpKSB7CiAgICAgIGZvciAodmFyIGNhdGNoU3RhdGVtZW50IGluIHRyeUNhdGNoLmNhdGNoZXMpIHsKICAgICAgICBpZiAoY2F0Y2hTdGF0ZW1lbnQuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRXaGlsZVN0YXRlbWVudChpci5XaGlsZVN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIHJldHVybiBzdGF0ZW1lbnQuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Q2F0Y2goaXIuQ2F0Y2ggY2F0Y2hTdGF0ZW1lbnQpIHsKICAgIHJldHVybiBjYXRjaFN0YXRlbWVudC5ib2R5LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUcnlGaW5hbGx5KGlyLlRyeUZpbmFsbHkgdHJ5RmluYWxseSkgewogICAgcmV0dXJuIHRyeUZpbmFsbHkuYm9keS5hY2NlcHQodGhpcykgJiYgdHJ5RmluYWxseS5maW5hbGl6ZXIuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogICAgcmV0dXJuIGRlY2xhcmF0aW9uLmZ1bmN0aW9uLmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvbk5vZGUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBkZWZhdWx0U3RhdGVtZW50KGlyLlN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBpci5FeHByZXNzaW9uU3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5FbXB0eVN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuQnJlYWtTdGF0ZW1lbnQgfHwKICAgICAgICBub2RlIGlzIGlyLlJldHVyblN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuQXNzZXJ0U3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5ZaWVsZFN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB0aHJvdyAnU3RhdGVtZW50IHR5cGUgJHtub2RlLnJ1bnRpbWVUeXBlfSBub3QgaGFuZGxlZCBpbiAnCiAgICAgICAgJ1N3aXRjaENvbnRpbnVlQW5hbHlzaXMnOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpID0+IGZhbHNlOwp9CoCFAE5OPAEoAUpJOjgeAT5CBAEMT1FLURoRBAEMJDckFQgGEgQBDD4oBAEMNioEAQw5KwQBDD8tBAEMQjQlFQgGEgQBDDMpBAEMNixPBAEMLSY1KxcKCAYSBAEMOigEAQwtLQQBDDNOBAEMRi4EAQwxIwQBDC0qJSUmJiUqFAY/IgQBDCsCATZwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3dpdGNoX2NvbnRpbnVlX2FuYWx5c2lzLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvZWxlbWVudF9tYXAuZGFydIsoLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvaW5kZXhlZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9vcmRlcmVkX3R5cGVzZXQuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CgovLy8gSW50ZXJmYWNlIHRoYXQgdHJhbnNsYXRlcyBiZXR3ZWVuIEtlcm5lbCBJUiBub2RlcyBhbmQgZW50aXRpZXMuCi8vLwovLy8gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGltcGxlbWVudCBbS2VybmVsVG9FbGVtZW50TWFwXSBpbiB0aGUKLy8vIGZyb250ZW5kIGFuZCBbSnNUb0VsZW1lbnRNYXBdIGluIHRoZSBiYWNrZW5kLgphYnN0cmFjdCBjbGFzcyBJclRvRWxlbWVudE1hcCB7CiAgLy8vIFJldHVybnMgdGhlIFtEYXJ0VHlwZV0gY29ycmVzcG9uZGluZyB0byBbdHlwZV0uCiAgRGFydFR5cGUgZ2V0RGFydFR5cGUoaXIuRGFydFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTWVtYmVyRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtZW1iZXIgW25vZGVdLgogIE1lbWJlckVudGl0eSBnZXRNZW1iZXIoaXIuTWVtYmVyIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0Z1bmN0aW9uRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9jZWR1cmUgW25vZGVdLgogIEZ1bmN0aW9uRW50aXR5IGdldE1ldGhvZChpci5Qcm9jZWR1cmUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ29uc3RydWN0b3JFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdlbmVyYXRpdmUgb3IgZmFjdG9yeQogIC8vLyBjb25zdHJ1Y3RvciBbbm9kZV0uCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0Q29uc3RydWN0b3IoaXIuTWVtYmVyIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0ZpZWxkRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaWVsZCBbbm9kZV0uCiAgRmllbGRFbnRpdHkgZ2V0RmllbGQoaXIuRmllbGQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ2xhc3NFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNsYXNzIFtub2RlXS4KICBDbGFzc0VudGl0eSBnZXRDbGFzcyhpci5DbGFzcyBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtGdW5jdGlvblR5cGVdIG9mIHRoZSBbbm9kZV0uCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShpci5GdW5jdGlvbk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbVHlwZWRlZlR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gcmF3IHR5cGUgb2YgdGhlIHR5cGVkZWYgW25vZGVdLgogIFR5cGVkZWZUeXBlIGdldFR5cGVkZWZUeXBlKGlyLlR5cGVkZWYgbm9kZSk7CgogIC8vLyBSZXR1cm4gdGhlIFtJbnRlcmZhY2VUeXBlXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBbY2xzXSB3aXRoIHRoZSBnaXZlbgogIC8vLyBbdHlwZUFyZ3VtZW50c10uCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBpci5DbGFzcyBjbHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NhbGxTdHJ1Y3R1cmVdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFthcmd1bWVudHNdLgogIENhbGxTdHJ1Y3R1cmUgZ2V0Q2FsbFN0cnVjdHVyZShpci5Bcmd1bWVudHMgYXJndW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlVmFyaWFibGVFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgcGFyYW1ldGVyCiAgLy8vIFtub2RlXS4KICBUeXBlVmFyaWFibGVFbnRpdHkgZ2V0VHlwZVZhcmlhYmxlKGlyLlR5cGVQYXJhbWV0ZXIgbm9kZSk7CgogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKICBEaWFnbm9zdGljUmVwb3J0ZXIgZ2V0IHJlcG9ydGVyOwogIEludGVyZmFjZVR5cGUgZ2V0VGhpc1R5cGUoSW5kZXhlZENsYXNzIGNscyk7CiAgSW50ZXJmYWNlVHlwZSBnZXRTdXBlclR5cGUoSW5kZXhlZENsYXNzIGNscyk7CiAgT3JkZXJlZFR5cGVTZXQgZ2V0T3JkZXJlZFR5cGVTZXQoSW5kZXhlZENsYXNzIGNscyk7CiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0SW50ZXJmYWNlcyhJbmRleGVkQ2xhc3MgY2xzKTsKICBJbnRlcmZhY2VUeXBlIGFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzRW50aXR5IGNscyk7CiAgRGFydFR5cGUgc3Vic3RCeUNvbnRleHQoRGFydFR5cGUgdHlwZSwgSW50ZXJmYWNlVHlwZSBjb250ZXh0KTsKICBEYXJ0VHlwZSBnZXRDYWxsVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUpOwogIGludCBnZXRIaWVyYXJjaHlEZXB0aChJbmRleGVkQ2xhc3MgY2xzKTsKICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChJbmRleGVkVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSk7Cn0KSQBOTjwBKDQvNQEZIiQjISIqAUQETzIgNioBRSoBSi8BURo0AUMnAUMnATA2AVEvAUsXJTYBRDoBSw49ASUjLzA2O0NBLCtDAgEocGFja2FnZTpjb21waWxlci9zcmMvaXIvZWxlbWVudF9tYXAuZGFydDJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9vcmRlcmVkX3R5cGVzZXQuZGFydKd+Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgb3JkZXJlZF90eXBlc2V0OwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcKICAgIHNob3cgTGluaywgTGlua0J1aWxkZXIsIExpbmtFbnRyeTsKCmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBBbiBvcmRlcmVkIHNldCBvZiB0aGUgc3VwZXJ0eXBlcyBvZiBhIGNsYXNzLiBUaGUgc3VwZXJ0eXBlcyBvZiBhIGNsYXNzIGFyZQovLy8gb3JkZXJlZCBieSBkZWNyZWFzaW5nIGhpZXJhcmNoeSBkZXB0aCBhbmQgYnkgdGhlIG9yZGVyIHRoZXkgYXJlIGV4dGVuZGVkLAovLy8gbWl4ZWQgaW4sIG9yIGltcGxlbWVudGVkLgovLy8KLy8vIEZvciB0aGVzZSBjbGFzc2VzCi8vLwovLy8gICAgIGNsYXNzIEEge30gLy8gRGVwdGggPSAxLgovLy8gICAgIGNsYXNzIEIge30gLy8gRGVwdGggPSAxLgovLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBCIGltcGxlbWVudHMgQSB7fSAvLyBEZXB0aCAyLgovLy8KLy8vIHRoZSBvcmRlcmVkIHN1cGVydHlwZXMgYXJlCi8vLwovLy8gICAgIEE6IFtBLCBPYmplY3RdCi8vLyAgICAgQjogW0IsIE9iamVjdF0KLy8vICAgICBDOiBbQywgQiwgQSwgT2JqZWN0XQpjbGFzcyBPcmRlcmVkVHlwZVNldCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtPcmRlcmVkVHlwZVNldF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdvcmRlcmVkLXR5cGUtc2V0JzsKCiAgZmluYWwgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PiBfbGV2ZWxzOwogIGZpbmFsIExpbms8SW50ZXJmYWNlVHlwZT4gdHlwZXM7CgogIE9yZGVyZWRUeXBlU2V0LmludGVybmFsKHRoaXMuX2xldmVscywgdGhpcy50eXBlcyk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbT3JkZXJlZFR5cGVTZXRdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgT3JkZXJlZFR5cGVTZXQucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYWtlIHRoZSBkZXNlcmlhbGl6ZWQgdHlwZSBzZXRzIHNoYXJlIHRoZWlyCiAgICAvLyBpbnRlcm5hbCBsaW5rcyBsaWtlIHRoZSBvcmlnaW5hbCB0eXBlIHNldHMgZG8/CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGludCB0eXBlc0NvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIExpbmtCdWlsZGVyPEludGVyZmFjZVR5cGU+IHR5cGVMaW5rQnVpbGRlciA9CiAgICAgICAgbmV3IExpbmtCdWlsZGVyPEludGVyZmFjZVR5cGU+KCk7CiAgICBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+IGxpbmtzID0gW107CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzQ291bnQ7IGkrKykgewogICAgICBsaW5rcy5hZGQodHlwZUxpbmtCdWlsZGVyLmFkZExhc3Qoc291cmNlLnJlYWREYXJ0VHlwZSgpKSk7CiAgICB9CiAgICBMaW5rPEludGVyZmFjZVR5cGU+IHR5cGVzID0KICAgICAgICB0eXBlTGlua0J1aWxkZXIudG9MaW5rKGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKSk7CiAgICBsaW5rcy5hZGQoY29uc3QgTGluazxJbnRlcmZhY2VUeXBlPigpKTsKCiAgICBpbnQgbGV2ZWxDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+IGxldmVscyA9CiAgICAgICAgbmV3IExpc3Q8TGluazxJbnRlcmZhY2VUeXBlPj4obGV2ZWxDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsQ291bnQ7IGkrKykgewogICAgICBsZXZlbHNbaV0gPSBsaW5rc1tzb3VyY2UucmVhZEludCgpXTsKICAgIH0KICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwobGV2ZWxzLCB0eXBlcyk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtPcmRlcmVkVHlwZVNldF0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIExpc3Q8SW50ZXJmYWNlVHlwZT4gdHlwZUxpc3QgPSB0eXBlcy50b0xpc3QoKTsKICAgIHNpbmsud3JpdGVJbnQodHlwZUxpc3QubGVuZ3RoKTsKICAgIGZvciAoSW50ZXJmYWNlVHlwZSB0eXBlIGluIHR5cGVMaXN0KSB7CiAgICAgIHNpbmsud3JpdGVEYXJ0VHlwZSh0eXBlKTsKICAgIH0KICAgIExpc3Q8aW50PiBsZXZlbExpc3QgPSBbXTsKICAgIExpbms8SW50ZXJmYWNlVHlwZT4gbGluayA9IHR5cGVzOwogICAgd2hpbGUgKGxpbmsgIT0gbnVsbCkgewogICAgICBpbnQgaW5kZXggPSBfbGV2ZWxzLmluZGV4T2YobGluayk7CiAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgIGxldmVsTGlzdC5hZGQoaW5kZXgpOwogICAgICB9CiAgICAgIGxpbmsgPSBsaW5rLnRhaWw7CiAgICB9CiAgICBzaW5rLndyaXRlSW50KGxldmVsTGlzdC5sZW5ndGgpOwogICAgZm9yIChpbnQgbGV2ZWwgaW4gbGV2ZWxMaXN0KSB7CiAgICAgIHNpbmsud3JpdGVJbnQobGV2ZWwpOwogICAgfQogICAgc2luay5lbmQodGFnKTsKICB9CgogIGZhY3RvcnkgT3JkZXJlZFR5cGVTZXQuc2luZ2xldG9uKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgTGluazxJbnRlcmZhY2VUeXBlPiB0eXBlcyA9CiAgICAgICAgbmV3IExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPih0eXBlLCBjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCkpOwogICAgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PiBsaXN0ID0gbmV3IExpc3Q8TGluazxJbnRlcmZhY2VUeXBlPj4oMSk7CiAgICBsaXN0WzBdID0gdHlwZXM7CiAgICByZXR1cm4gbmV3IE9yZGVyZWRUeXBlU2V0LmludGVybmFsKGxpc3QsIHR5cGVzKTsKICB9CgogIC8vLyBDcmVhdGVzIGEgbmV3IFtPcmRlcmVkVHlwZVNldF0gZm9yIFt0eXBlXSB3aGVuIGl0IGRpcmVjdGx5IGV4dGVuZHMgdGhlCiAgLy8vIGNsYXNzIHdoaWNoIHRoaXMgc2V0IHJlcHJlc2VudHMuIFRoaXMgaXMgZm9yIGluc3RhbmNlIHVzZWQgdG8gY3JlYXRlIHRoZQogIC8vLyB0eXBlIHNldCBmb3IgW0Nsb3N1cmVDbGFzc0VsZW1lbnRdIHdoaWNoIGV4dGVuZHMgW0Nsb3N1cmVdLgogIE9yZGVyZWRUeXBlU2V0IGV4dGVuZENsYXNzKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgYXNzZXJ0KAogICAgICAgIHR5cGVzLmhlYWQudHJlYXRBc1JhdywKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgdHlwZS5lbGVtZW50LAogICAgICAgICAgICAnQ2Fubm90IGV4dGVuZCBnZW5lcmljIGNsYXNzICR7dHlwZXMuaGVhZH0gdXNpbmcgJwogICAgICAgICAgICAnT3JkZXJlZFR5cGVTZXQuZXh0ZW5kQ2xhc3MnKSk7CiAgICBMaW5rPEludGVyZmFjZVR5cGU+IGV4dGVuZGVkVHlwZXMgPQogICAgICAgIG5ldyBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4odHlwZSwgdHlwZXMpOwogICAgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PiBsaXN0ID0gbmV3IExpc3Q8TGluazxJbnRlcmZhY2VUeXBlPj4obGV2ZWxzICsgMSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSBfbGV2ZWxzW2ldOwogICAgfQogICAgbGlzdFtsZXZlbHNdID0gZXh0ZW5kZWRUeXBlczsKICAgIHJldHVybiBuZXcgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwobGlzdCwgZXh0ZW5kZWRUeXBlcyk7CiAgfQoKICBMaW5rPEludGVyZmFjZVR5cGU+IGdldCBzdXBlcnR5cGVzID0+IHR5cGVzLnRhaWw7CgogIGludCBnZXQgbGV2ZWxzID0+IF9sZXZlbHMubGVuZ3RoOwoKICBpbnQgZ2V0IG1heERlcHRoID0+IGxldmVscyAtIDE7CgogIExpbms8SW50ZXJmYWNlVHlwZT4gb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCBsZXZlbHMpIHsKICAgICAgcmV0dXJuIF9sZXZlbHNbaW5kZXhdOwogICAgfQogICAgcmV0dXJuIGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBvZmZzZXRzIGludG8gW3R5cGVzXSBhdCB3aGljaCBlYWNoIGxldmVsIGJlZ2lucy4KICBMaXN0PGludD4gZ2V0IGxldmVsT2Zmc2V0cyB7CiAgICBMaXN0PGludD4gb2Zmc2V0cyA9IG5ldyBMaXN0LmZpbGxlZChsZXZlbHMsIC0xKTsKICAgIGludCBvZmZzZXQgPSAwOwogICAgTGluazxJbnRlcmZhY2VUeXBlPiBwb2ludGVyID0gdHlwZXM7CiAgICBmb3IgKGludCBkZXB0aCA9IG1heERlcHRoOyBkZXB0aCA+PSAwOyBkZXB0aC0tKSB7CiAgICAgIHdoaWxlICghaWRlbnRpY2FsKHBvaW50ZXIsIF9sZXZlbHNbZGVwdGhdKSkgewogICAgICAgIHBvaW50ZXIgPSBwb2ludGVyLnRhaWw7CiAgICAgICAgb2Zmc2V0Kys7CiAgICAgIH0KICAgICAgb2Zmc2V0c1tkZXB0aF0gPSBvZmZzZXQ7CiAgICB9CiAgICByZXR1cm4gb2Zmc2V0czsKICB9CgogIHZvaWQgZm9yRWFjaChpbnQgbGV2ZWwsIHZvaWQgZihJbnRlcmZhY2VUeXBlIHR5cGUpKSB7CiAgICBpZiAobGV2ZWwgPCBsZXZlbHMpIHsKICAgICAgTGluazxJbnRlcmZhY2VUeXBlPiBwb2ludGVyID0gX2xldmVsc1tsZXZlbF07CiAgICAgIExpbms8SW50ZXJmYWNlVHlwZT4gZW5kID0KICAgICAgICAgIGxldmVsID4gMCA/IF9sZXZlbHNbbGV2ZWwgLSAxXSA6IGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKTsKICAgICAgLy8gVE9ETyhoZXQpOiBjaGVja2luZyBgaXNOb3RFbXB0eWAgc2hvdWxkIGJlIHVubmVjZXNzYXJ5LCByZW1vdmUgd2hlbgogICAgICAvLyBjb25zdGFudHMgYXJlIHByb3Blcmx5IGNhbm9uaWNhbGl6ZWQKICAgICAgd2hpbGUgKHBvaW50ZXIuaXNOb3RFbXB0eSAmJiAhaWRlbnRpY2FsKHBvaW50ZXIsIGVuZCkpIHsKICAgICAgICBmKHBvaW50ZXIuaGVhZCk7CiAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIudGFpbDsKICAgICAgfQogICAgfQogIH0KCiAgSW50ZXJmYWNlVHlwZSBhc0luc3RhbmNlT2YoQ2xhc3NFbnRpdHkgY2xzLCBpbnQgaGllcmFyY2h5RGVwdGgpIHsKICAgIGludCBsZXZlbCA9IGhpZXJhcmNoeURlcHRoOwogICAgaWYgKGxldmVsIDwgbGV2ZWxzKSB7CiAgICAgIExpbms8SW50ZXJmYWNlVHlwZT4gcG9pbnRlciA9IF9sZXZlbHNbbGV2ZWxdOwogICAgICBMaW5rPEludGVyZmFjZVR5cGU+IGVuZCA9CiAgICAgICAgICBsZXZlbCA+IDAgPyBfbGV2ZWxzW2xldmVsIC0gMV0gOiBjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCk7CiAgICAgIC8vIFRPRE8oaGV0KTogY2hlY2tpbmcgYGlzTm90RW1wdHlgIHNob3VsZCBiZSB1bm5lY2Vzc2FyeSwgcmVtb3ZlIHdoZW4KICAgICAgLy8gY29uc3RhbnRzIGFyZSBwcm9wZXJseSBjYW5vbmljYWxpemVkCiAgICAgIHdoaWxlIChwb2ludGVyLmlzTm90RW1wdHkgJiYgIWlkZW50aWNhbChwb2ludGVyLCBlbmQpKSB7CiAgICAgICAgaWYgKGNscyA9PSBwb2ludGVyLmhlYWQuZWxlbWVudCkgewogICAgICAgICAgcmV0dXJuIHBvaW50ZXIuaGVhZDsKICAgICAgICB9CiAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIudGFpbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiB0eXBlcy50b1N0cmluZygpOwp9CgovLy8gQnVpbGRlciBmb3IgY3JlYXRpb24gYW4gb3JkZXJlZCBzZXQgb2YgdGhlIHN1cGVydHlwZXMgb2YgYSBjbGFzcy4gVGhlCi8vLyBzdXBlcnR5cGVzIGFyZSBvcmRlcmVkIGJ5IGRlY3JlYXNpbmcgaGllcmFyY2h5IGRlcHRoIGFuZCBieSB0aGUgb3JkZXIgdGhleQovLy8gYXJlIGV4dGVuZGVkLCBtaXhlZCBpbiwgb3IgaW1wbGVtZW50ZWQuCi8vLwovLy8gRm9yIHRoZXNlIGNsYXNzZXMKLy8vCi8vLyAgICAgY2xhc3MgQSB7fSAvLyBEZXB0aCA9IDEuCi8vLyAgICAgY2xhc3MgQiB7fSAvLyBEZXB0aCA9IDEuCi8vLyAgICAgY2xhc3MgQyBleHRlbmRzIEIgaW1wbGVtZW50cyBBIHt9IC8vIERlcHRoIDIuCi8vLwovLy8gdGhlIG9yZGVyZWQgc3VwZXJ0eXBlcyBhcmUKLy8vCi8vLyAgICAgQTogW0EsIE9iamVjdF0KLy8vICAgICBCOiBbQiwgT2JqZWN0XQovLy8gICAgIEM6IFtDLCBCLCBBLCBPYmplY3RdCmFic3RyYWN0IGNsYXNzIE9yZGVyZWRUeXBlU2V0QnVpbGRlciB7CiAgT3JkZXJlZFR5cGVTZXQgY3JlYXRlT3JkZXJlZFR5cGVTZXQoCiAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlLCBMaW5rPERhcnRUeXBlPiBpbnRlcmZhY2VzKTsKfQoKYWJzdHJhY3QgY2xhc3MgT3JkZXJlZFR5cGVTZXRCdWlsZGVyQmFzZSBpbXBsZW1lbnRzIE9yZGVyZWRUeXBlU2V0QnVpbGRlciB7CiAgTWFwPGludCwgTGlua0VudHJ5PEludGVyZmFjZVR5cGU+PiBtYXAgPQogICAgICBuZXcgTWFwPGludCwgTGlua0VudHJ5PEludGVyZmFjZVR5cGU+PigpOwogIGludCBtYXhEZXB0aCA9IC0xOwoKICBmaW5hbCBDbGFzc0VudGl0eSBjbHM7CgogIE9yZGVyZWRUeXBlU2V0QnVpbGRlckJhc2UodGhpcy5jbHMpOwoKICBJbnRlcmZhY2VUeXBlIGdldFRoaXNUeXBlKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwogIEludGVyZmFjZVR5cGUgc3Vic3RCeUNvbnRleHQoCiAgICAgIGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsIGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIGNvbnRleHQpOwogIGludCBnZXRIaWVyYXJjaHlEZXB0aChjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKICBPcmRlcmVkVHlwZVNldCBnZXRPcmRlcmVkVHlwZVNldChjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgQG92ZXJyaWRlCiAgT3JkZXJlZFR5cGVTZXQgY3JlYXRlT3JkZXJlZFR5cGVTZXQoCiAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlLCBMaW5rPERhcnRUeXBlPiBpbnRlcmZhY2VzKSB7CiAgICAvLyBUT0RPKDE1Mjk2KTogQ29sbGFwc2UgdGhlc2UgaXRlcmF0aW9ucyB0byBvbmUgd2hlbiB0aGUgb3JkZXIgaXMgbm90CiAgICAvLyBuZWVkZWQuCiAgICBhZGQoc3VwZXJ0eXBlKTsKICAgIGZvciAoTGluazxEYXJ0VHlwZT4gbGluayA9IGludGVyZmFjZXM7ICFsaW5rLmlzRW1wdHk7IGxpbmsgPSBsaW5rLnRhaWwpIHsKICAgICAgYWRkKGxpbmsuaGVhZCk7CiAgICB9CgogICAgX2FkZEFsbFN1cGVydHlwZXMoc3VwZXJ0eXBlKTsKICAgIGZvciAoTGluazxEYXJ0VHlwZT4gbGluayA9IGludGVyZmFjZXM7ICFsaW5rLmlzRW1wdHk7IGxpbmsgPSBsaW5rLnRhaWwpIHsKICAgICAgX2FkZEFsbFN1cGVydHlwZXMobGluay5oZWFkKTsKICAgIH0KICAgIGFkZChnZXRUaGlzVHlwZShjbHMpKTsKICAgIHJldHVybiB0b1R5cGVTZXQoKTsKICB9CgogIC8vLyBBZGRzIFt0eXBlXSBhbmQgYWxsIHN1cGVydHlwZXMgb2YgW3R5cGVdIHRvIFthbGxTdXBlcnR5cGVzXSB3aGlsZQogIC8vLyBzdWJzdGl0dXRpbmcgdHlwZSB2YXJpYWJsZXMuCiAgdm9pZCBfYWRkQWxsU3VwZXJ0eXBlcyhJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCA9IHR5cGUuZWxlbWVudDsKICAgIExpbms8SW50ZXJmYWNlVHlwZT4gc3VwZXJ0eXBlcyA9IGdldE9yZGVyZWRUeXBlU2V0KGNsYXNzRWxlbWVudCkuc3VwZXJ0eXBlczsKICAgIGFzc2VydCgKICAgICAgICBzdXBlcnR5cGVzICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgIlN1cGVydHlwZXMgbm90IGNvbXB1dGVkIG9uICRjbGFzc0VsZW1lbnQgIgogICAgICAgICAgICAiZHVyaW5nIHJlc29sdXRpb24gb2YgJGNscyIpKTsKICAgIHdoaWxlICghc3VwZXJ0eXBlcy5pc0VtcHR5KSB7CiAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0gc3VwZXJ0eXBlcy5oZWFkOwogICAgICBhZGQoc3Vic3RCeUNvbnRleHQoc3VwZXJ0eXBlLCB0eXBlKSk7CiAgICAgIHN1cGVydHlwZXMgPSBzdXBlcnR5cGVzLnRhaWw7CiAgICB9CiAgfQoKICB2b2lkIGFkZChJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlLmVsZW1lbnQgPT0gY2xzKSB7CiAgICAgIF9hZGRBdERlcHRoKHR5cGUsIG1heERlcHRoICsgMSk7CiAgICB9IGVsc2UgewogICAgICBfYWRkQXREZXB0aCh0eXBlLCBnZXRIaWVyYXJjaHlEZXB0aCh0eXBlLmVsZW1lbnQpKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEF0RGVwdGgoSW50ZXJmYWNlVHlwZSB0eXBlLCBpbnQgZGVwdGgpIHsKICAgIExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPiBwcmV2ID0gbnVsbDsKICAgIExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPiBsaW5rID0gbWFwW2RlcHRoXTsKICAgIHdoaWxlIChsaW5rICE9IG51bGwpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBleGlzdGluZ1R5cGUgPSBsaW5rLmhlYWQ7CiAgICAgIGlmIChleGlzdGluZ1R5cGUgPT0gdHlwZSkgcmV0dXJuOwogICAgICBpZiAoZXhpc3RpbmdUeXBlLmVsZW1lbnQgPT0gdHlwZS5lbGVtZW50KSB7CiAgICAgICAgYXNzZXJ0KGZhbHNlLCBmYWlsZWRBdChjbHMsICdJbnZhbGlkIG9yZGVyZWQgdHlwZXNldCBmb3IgJGNscycpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgcHJldiA9IGxpbms7CiAgICAgIGxpbmsgPSBsaW5rLnRhaWw7CiAgICB9CiAgICBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4gbmV4dCA9IG5ldyBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4odHlwZSk7CiAgICBuZXh0LnRhaWwgPSBudWxsOwogICAgaWYgKHByZXYgPT0gbnVsbCkgewogICAgICBtYXBbZGVwdGhdID0gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHByZXYudGFpbCA9IG5leHQ7CiAgICB9CiAgICBpZiAoZGVwdGggPiBtYXhEZXB0aCkgewogICAgICBtYXhEZXB0aCA9IGRlcHRoOwogICAgfQogIH0KCiAgT3JkZXJlZFR5cGVTZXQgdG9UeXBlU2V0KCkgewogICAgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PiBsZXZlbHMgPQogICAgICAgIG5ldyBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+KG1heERlcHRoICsgMSk7CiAgICBpZiAobWF4RGVwdGggPCAwKSB7CiAgICAgIHJldHVybiBuZXcgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwobGV2ZWxzLCBjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCkpOwogICAgfQogICAgTGluazxJbnRlcmZhY2VUeXBlPiBuZXh0ID0gY29uc3QgTGluazxJbnRlcmZhY2VUeXBlPigpOwogICAgZm9yIChpbnQgZGVwdGggPSAwOyBkZXB0aCA8PSBtYXhEZXB0aDsgZGVwdGgrKykgewogICAgICBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4gZmlyc3QgPSBtYXBbZGVwdGhdOwogICAgICBpZiAoZmlyc3QgPT0gbnVsbCkgewogICAgICAgIGxldmVsc1tkZXB0aF0gPSBuZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIGxldmVsc1tkZXB0aF0gPSBmaXJzdDsKICAgICAgICBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4gbGFzdCA9IGZpcnN0OwogICAgICAgIHdoaWxlIChsYXN0LnRhaWwgIT0gbnVsbCkgewogICAgICAgICAgbGFzdCA9IGxhc3QudGFpbDsKICAgICAgICB9CiAgICAgICAgbGFzdC50YWlsID0gbmV4dDsKICAgICAgICBuZXh0ID0gZmlyc3Q7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwobGV2ZWxzLCBsZXZlbHMubGFzdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGludCBkZXB0aCA9IDA7IGRlcHRoIDw9IG1heERlcHRoOyBkZXB0aCsrKSB7CiAgICAgIHNiLndyaXRlKCckZGVwdGg6ICcpOwogICAgICBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4gZmlyc3QgPSBtYXBbZGVwdGhdOwogICAgICBmaXJzdC5wcmludE9uKHNiLCAiLCAiKTsKICAgICAgc2Iud3JpdGUoJ1xuJyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KgUMATk48ARkBOScBFiEeKwFPTh4EFgQhITYEHwQXFx0XSB0wASsjATUBPEFINhcnMSoqK0EGID0sAScnMysrBhU3BAEyKBUzJCsgBh4mGykZHggYBiUjHAYTBAE5IElHFTUEAU1PQjMMHxIaPywoM1AnHAYiPQQBNAEkASIBLxodBigEAUMfNRQpNjQgEggfBhQEATgaNCBITS4/GSAIBgQBRCAaNCBITS4/Kx8KIAgGEQQBDCkCAUpPLAQWBCEhNgQfBBcXHScnOwIBTCswFQEZAScBOCBGND8BDCc8Sw8UThYGASJOJAYbGAQBSCMvLVEMHBIROCsiMSwkBgQBIR8nDToGBAE0KjAbLigyShAIExgGSBYYGQ0YBhwYBgQBHyc1GE8GPDYzGx4PHy8kHAoaFggGPQQBDBYqNhwzHxYGGgQCASlwYWNrYWdlOmNvbXBpbGVyL3NyYy9vcmRlcmVkX3R5cGVzZXQuZGFydDlzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21waWxlX3RpbWVfY29uc3RhbnRzLmRhcnSENC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29tcGlsZV90aW1lX2NvbnN0YW50X2V2YWx1YXRvcjsKCmltcG9ydCAnY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrLCBNZWFzdXJlcjsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKCi8vLyBBIFtDb25zdGFudEVudmlyb25tZW50XSBwcm92aWRlcyBhY2Nlc3MgZm9yIGNvbnN0YW50cyBjb21waWxlZCBmb3IgdmFyaWFibGUKLy8vIGluaXRpYWxpemVycy4KYWJzdHJhY3QgY2xhc3MgQ29uc3RhbnRFbnZpcm9ubWVudCB7fQoKLy8vIEEgW0JhY2tlbmRDb25zdGFudEVudmlyb25tZW50XSBwcm92aWRlcyBhY2Nlc3MgdG8gY29uc3RhbnRzIG5lZWRlZCBmb3IKLy8vIGJhY2tlbmQgaW1wbGVtZW50YXRpb24uCmFic3RyYWN0IGNsYXNzIEJhY2tlbmRDb25zdGFudEVudmlyb25tZW50IGV4dGVuZHMgQ29uc3RhbnRFbnZpcm9ubWVudCB7CiAgLy8vIFJlZ2lzdGVyIHRoYXQgW2VsZW1lbnRdIG5lZWRzIGxhenkgaW5pdGlhbGl6YXRpb24uCiAgdm9pZCByZWdpc3RlckxhenlTdGF0aWMoRmllbGRFbnRpdHkgZWxlbWVudCk7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHRoZSB0YXNrIHRoYXQgY29tcGlsZXMgdGhlIGNvbnN0YW50IGVudmlyb25tZW50cyBmb3IgdGhlCi8vLyBmcm9udGVuZCBhbmQgYmFja2VuZCBpbnRlcnByZXRhdGlvbiBvZiBjb21waWxlLXRpbWUgY29uc3RhbnRzLgphYnN0cmFjdCBjbGFzcyBDb25zdGFudENvbXBpbGVyVGFzayBleHRlbmRzIENvbXBpbGVyVGFzawogICAgaW1wbGVtZW50cyBDb25zdGFudEVudmlyb25tZW50IHsKICBDb25zdGFudENvbXBpbGVyVGFzayhNZWFzdXJlciBtZWFzdXJlcikgOiBzdXBlcihtZWFzdXJlcik7Cn0KHABOTjwBMQE4IQFQEiYBSxxIOTACAUtDOSU9AgEwcGFja2FnZTpjb21waWxlci9zcmMvY29tcGlsZV90aW1lX2NvbnN0YW50cy5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL2NhY2hlZF9zdGF0aWNfdHlwZS5kYXJ0ilMvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CmltcG9ydCAnc3RhdGljX3R5cGVfYmFzZS5kYXJ0JzsKaW1wb3J0ICdzdGF0aWNfdHlwZV9jYWNoZS5kYXJ0JzsKaW1wb3J0ICdzdGF0aWNfdHlwZV9wcm92aWRlci5kYXJ0JzsKCi8vLyBDbGFzcyB0aGF0IHByb3ZpZGVzIHRoZSBzdGF0aWMgdHlwZSBvZiBleHByZXNzaW9uIHVzaW5nIHRoZSB2aXNpdG9yIHBhdHRlcm4KLy8vIGFuZCBhIHByZWNvbXB1dGVkIGNhY2hlIGZvciBjb21wbGV4IGV4cHJlc3Npb24gdHlwZS4KY2xhc3MgQ2FjaGVkU3RhdGljVHlwZSBleHRlbmRzIFN0YXRpY1R5cGVCYXNlIGltcGxlbWVudHMgU3RhdGljVHlwZVByb3ZpZGVyIHsKICBmaW5hbCBTdGF0aWNUeXBlQ2FjaGUgX2NhY2hlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBUaGlzSW50ZXJmYWNlVHlwZSB0aGlzVHlwZTsKCiAgQ2FjaGVkU3RhdGljVHlwZSgKICAgICAgaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgdGhpcy5fY2FjaGUsIHRoaXMudGhpc1R5cGUpCiAgICAgIDogc3VwZXIodHlwZUVudmlyb25tZW50KTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgZ2V0U3RhdGljVHlwZShpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIGlyLkRhcnRUeXBlIHR5cGUgPSBub2RlLmFjY2VwdCh0aGlzKTsKICAgIGFzc2VydCh0eXBlICE9IG51bGwsICJObyBzdGF0aWMgdHlwZSBmb3VuZCBmb3IgJHtub2RlLnJ1bnRpbWVUeXBlfS4iKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgZ2V0Rm9ySW5JdGVyYXRvclR5cGUoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgaXIuRGFydFR5cGUgdHlwZSA9IF9jYWNoZS5nZXRGb3JJbkl0ZXJhdG9yVHlwZShub2RlKTsKICAgIGFzc2VydCh0eXBlICE9IG51bGwsICJObyBmb3ItaW4gaXRlcmF0b3IgdHlwZSBmb3VuZCBmb3IgJHtub2RlfS4iKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgaXIuRGFydFR5cGUgX2dldFN0YXRpY1R5cGUoaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSB0eXBlID0gX2NhY2hlW25vZGVdOwogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCwgIk5vIHN0YXRpYyB0eXBlIGNhY2hlZCBmb3IgJHtub2RlLnJ1bnRpbWVUeXBlfS4iKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRWYXJpYWJsZUdldChpci5WYXJpYWJsZUdldCBub2RlKSA9PiBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRQcm9wZXJ0eUdldChpci5Qcm9wZXJ0eUdldCBub2RlKSA9PiBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlKSA9PgogICAgICBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdXBlclByb3BlcnR5R2V0KGlyLlN1cGVyUHJvcGVydHlHZXQgbm9kZSkgPT4KICAgICAgX2dldFN0YXRpY1R5cGUobm9kZSk7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TWV0aG9kSW52b2NhdGlvbihpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oaXIuRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PgogICAgICBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgPT4KICAgICAgX2dldFN0YXRpY1R5cGUobm9kZSk7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKGlyLlN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PgogICAgICBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEluc3RhbnRpYXRpb24oaXIuSW5zdGFudGlhdGlvbiBub2RlKSA9PiBfZ2V0U3RhdGljVHlwZShub2RlKTsKfQpUAE5OPAEoNC8xNSAhJAFQOU4gAQwkARRGIAEMMipLEQQBDD06SBEEATMlTBEEAQxNAQxNAQxDHAEMQRwBDEEcAQxNHAEMQRwBDEscAQxLHAEMUQIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2NhY2hlZF9zdGF0aWNfdHlwZS5kYXJ0K3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL2RlYnVnLmRhcnSIMS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gSGVscGVyIGZvciBkZWJ1ZyBLZXJuZWwgbm9kZXMuCgpsaWJyYXJ5IGtlcm5lbC5kZWJ1ZzsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3Zpc2l0b3IuZGFydCc7CgppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IEluZGVudGF0aW9uLCBUYWdnaW5nOwoKY2xhc3MgRGVidWdQcmludGVyIGV4dGVuZHMgVmlzaXRvciB3aXRoIEluZGVudGF0aW9uLCBUYWdnaW5nPE5vZGU+IHsKICBAb3ZlcnJpZGUKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogIHZvaWQgdmlzaXROb2RlV2l0aENoaWxkcmVuKE5vZGUgbm9kZSwgU3RyaW5nIHR5cGUsIFtNYXAgcGFyYW1zXSkgewogICAgb3Blbk5vZGUobm9kZSwgdHlwZSwgcGFyYW1zKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIGNsb3NlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0Tm9kZShOb2RlIG5vZGUpIHsKICAgIHZpc2l0Tm9kZVdpdGhDaGlsZHJlbihub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWUoTmFtZSBub2RlKSB7CiAgICBvcGVuQW5kQ2xvc2VOb2RlKG5vZGUsICcke25vZGUucnVudGltZVR5cGV9JywKICAgICAgICB7J25hbWUnOiBub2RlLm5hbWUsICdsaWJyYXJ5Jzogbm9kZS5saWJyYXJ5Py5uYW1lfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUpIHsKICAgIG9wZW5BbmRDbG9zZU5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7J3ZhbHVlJzogJyR7bm9kZS52YWx1ZX0nfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVHZXQoVmFyaWFibGVHZXQgbm9kZSkgewogICAgb3BlbkFuZENsb3NlTm9kZSgKICAgICAgICBub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsndmFyaWFibGUnOiAnJHtub2RlLnZhcmlhYmxlfSd9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpIHsKICAgIG9wZW5BbmRDbG9zZU5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7J3RhcmdldCc6ICcke25vZGUudGFyZ2V0fSd9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgb3Blbk5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7CiAgICAgICduYW1lJzogJyR7bm9kZS5uYW1lID8/ICctLXVubmFtZWQtLSd9JywKICAgICAgJ2lzRmluYWwnOiAnJHtub2RlLmlzRmluYWx9JywKICAgICAgJ2lzQ29uc3QnOiAnJHtub2RlLmlzQ29uc3R9JywKICAgICAgJ2lzRmllbGRGb3JtYWwnOiAnJHtub2RlLmlzRmllbGRGb3JtYWx9JwogICAgfSk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBjbG9zZU5vZGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgb3Blbk5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7CiAgICAgICduYW1lJzogJyR7bm9kZS5jbGFzc05vZGUubmFtZX0nLAogICAgfSk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBjbG9zZU5vZGUoKTsKICB9CgogIC8vLyBQcmV0dHktcHJpbnRzIGdpdmVuIG5vZGUgdHJlZSBpbnRvIHN0cmluZy4KICBzdGF0aWMgU3RyaW5nIHByZXR0eVByaW50KE5vZGUgbm9kZSkgewogICAgdmFyIHAgPSBuZXcgRGVidWdQcmludGVyKCk7CiAgICBub2RlLmFjY2VwdChwKTsKICAgIHJldHVybiBwLnNiLnRvU3RyaW5nKCk7CiAgfQp9ClAATk48ASMBFgEiJgE2AUUMKAFFIh4RBAEMIDgEAQweMj0EAQwqTwQBDCwWSAQBDChRBAEMPCwvJCQvCB4RBAEMMCwoCB4RBAExKSAUHAQCASJwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9kZWJ1Zy5kYXJ0K3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL3R5cGVzLmRhcnSSDS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9vcmRlcmVkX3R5cGVzZXQuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CgovLy8gU3VwcG9ydCBmb3Igc3VidHlwZSBjaGVja3Mgb2Yga2VybmVsIGJhc2VkIFtEYXJ0VHlwZV1zLgpjbGFzcyBLZXJuZWxEYXJ0VHlwZXMgZXh0ZW5kcyBEYXJ0VHlwZXMgewogIGZpbmFsIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CiAgZmluYWwgU3VidHlwZVZpc2l0b3I8RGFydFR5cGU+IHN1YnR5cGVWaXNpdG9yOwogIGZpbmFsIFBvdGVudGlhbFN1YnR5cGVWaXNpdG9yPERhcnRUeXBlPiBwb3RlbnRpYWxTdWJ0eXBlVmlzaXRvcjsKCiAgS2VybmVsRGFydFR5cGVzKHRoaXMuZWxlbWVudE1hcCkKICAgICAgOiB0aGlzLnN1YnR5cGVWaXNpdG9yID0gbmV3IEtlcm5lbFN1YnR5cGVWaXNpdG9yKGVsZW1lbnRNYXApLAogICAgICAgIHRoaXMucG90ZW50aWFsU3VidHlwZVZpc2l0b3IgPQogICAgICAgICAgICBuZXcgX0tlcm5lbFBvdGVudGlhbFN1YnR5cGVWaXNpdG9yKGVsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBib29sIGlzUG90ZW50aWFsU3VidHlwZShEYXJ0VHlwZSB0LCBEYXJ0VHlwZSBzLAogICAgICB7Ym9vbCBhc3N1bWVJbnN0YW50aWF0aW9uczogdHJ1ZX0pIHsKICAgIHJldHVybiBwb3RlbnRpYWxTdWJ0eXBlVmlzaXRvci5pc1BvdGVudGlhbFN1YnR5cGUodCwgcywKICAgICAgICBhc3N1bWVJbnN0YW50aWF0aW9uczogYXNzdW1lSW5zdGFudGlhdGlvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Fzc2lnbmFibGUoRGFydFR5cGUgdCwgRGFydFR5cGUgcykgewogICAgcmV0dXJuIGlzU3VidHlwZSh0LCBzKSB8fCBpc1N1YnR5cGUocywgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU3VidHlwZShEYXJ0VHlwZSB0LCBEYXJ0VHlwZSBzKSB7CiAgICByZXR1cm4gc3VidHlwZVZpc2l0b3IuaXNTdWJ0eXBlKHQsIHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFRoaXNUeXBlKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFN1cGVydHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFN1cGVyVHlwZShjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0U3VwZXJ0eXBlcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldE9yZGVyZWRUeXBlU2V0KGNscykuc3VwZXJ0eXBlczsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldEludGVyZmFjZXMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRJbnRlcmZhY2VzKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuYXNJbnN0YW5jZU9mKHR5cGUsIGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdEJ5Q29udGV4dChEYXJ0VHlwZSBiYXNlLCBJbnRlcmZhY2VUeXBlIGNvbnRleHQpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLnN1YnN0QnlDb250ZXh0KGJhc2UsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldENhbGxUeXBlKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgRGFydFR5cGUgY2FsbFR5cGUgPSBlbGVtZW50TWFwLmdldENhbGxUeXBlKHR5cGUpOwogICAgcmV0dXJuIGNhbGxUeXBlIGlzIEZ1bmN0aW9uVHlwZSA/IGNhbGxUeXBlIDogbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2hlY2tUeXBlVmFyaWFibGVCb3VuZHM8VD4oCiAgICAgIFQgY29udGV4dCwKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZVZhcmlhYmxlcywKICAgICAgdm9pZCBjaGVja1R5cGVWYXJpYWJsZUJvdW5kKFQgY29udGV4dCwgRGFydFR5cGUgdHlwZUFyZ3VtZW50LAogICAgICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUsIERhcnRUeXBlIGJvdW5kKSkgewogICAgYXNzZXJ0KHR5cGVWYXJpYWJsZXMubGVuZ3RoID09IHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQgPSB0eXBlQXJndW1lbnRzW2luZGV4XTsKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUgPSB0eXBlVmFyaWFibGVzW2luZGV4XTsKICAgICAgRGFydFR5cGUgYm91bmQgPSBlbGVtZW50TWFwCiAgICAgICAgICAuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlLmVsZW1lbnQpCiAgICAgICAgICAuc3Vic3QodHlwZUFyZ3VtZW50cywgdHlwZVZhcmlhYmxlcyk7CiAgICAgIGNoZWNrVHlwZVZhcmlhYmxlQm91bmQoY29udGV4dCwgdHlwZUFyZ3VtZW50LCB0eXBlVmFyaWFibGUsIGJvdW5kKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwp9CgpjbGFzcyBLZXJuZWxPcmRlcmVkVHlwZVNldEJ1aWxkZXIgZXh0ZW5kcyBPcmRlcmVkVHlwZVNldEJ1aWxkZXJCYXNlIHsKICBmaW5hbCBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwoKICBLZXJuZWxPcmRlcmVkVHlwZVNldEJ1aWxkZXIodGhpcy5lbGVtZW50TWFwLCBDbGFzc0VudGl0eSBjbHMpIDogc3VwZXIoY2xzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFRoaXNUeXBlKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHN1YnN0QnlDb250ZXh0KEludGVyZmFjZVR5cGUgdHlwZSwgSW50ZXJmYWNlVHlwZSBjb250ZXh0KSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5zdWJzdEJ5Q29udGV4dCh0eXBlLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXRIaWVyYXJjaHlEZXB0aChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldEhpZXJhcmNoeURlcHRoKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBPcmRlcmVkVHlwZVNldCBnZXRPcmRlcmVkVHlwZVNldChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldE9yZGVyZWRUeXBlU2V0KGNscyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFR5cGVSZWxhdGlvbk1peGluCiAgICBpbXBsZW1lbnRzIEFic3RyYWN0VHlwZVJlbGF0aW9uPERhcnRUeXBlPiB7CiAgSXJUb0VsZW1lbnRNYXAgZ2V0IGVsZW1lbnRNYXA7CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0VHlwZVZhcmlhYmxlQm91bmQoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0Q2FsbFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRDYWxsVHlwZSh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgYXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5hc0luc3RhbmNlT2YodHlwZSwgY2xzKTsKICB9Cn0KCmNsYXNzIEtlcm5lbFN1YnR5cGVWaXNpdG9yIGV4dGVuZHMgU3VidHlwZVZpc2l0b3I8RGFydFR5cGU+CiAgICB3aXRoIEFic3RyYWN0VHlwZVJlbGF0aW9uTWl4aW4gewogIEBvdmVycmlkZQogIGZpbmFsIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CgogIEtlcm5lbFN1YnR5cGVWaXNpdG9yKHRoaXMuZWxlbWVudE1hcCk7Cn0KCmNsYXNzIF9LZXJuZWxQb3RlbnRpYWxTdWJ0eXBlVmlzaXRvciBleHRlbmRzIFBvdGVudGlhbFN1YnR5cGVWaXNpdG9yPERhcnRUeXBlPgogICAgd2l0aCBBYnN0cmFjdFR5cGVSZWxhdGlvbk1peGluIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwoKICBfS2VybmVsUG90ZW50aWFsU3VidHlwZVZpc2l0b3IodGhpcy5lbGVtZW50TWFwKTsKfQqAogBOTjwBIiQhIhsBPCojMUMBI0QnPAEMMis8NQQBDC4vBAEMKysEAQwvKAQBDDApBAEMOzkEAQw7KgQBDEQvBAEMQjUEAQwxNjcEAQwjESQkRDw6QTQ8IjYwSgYEAQxCAgFGIwFOAQwvKAQBDEw1BAEMKy4EAQw2LgQCASkwIQEMQgEMPjUEAQwxKQQBDEQvBAIBPCUMIwEpAgFPJQwjATMCASJwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci90eXBlcy5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL3Zpc2l0b3JzLmRhcnTAAG9gLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvb3BlcmF0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CgovLy8gVmlzaXRvciB0aGF0IGNvbnZlcnRzIHN0cmluZyBsaXRlcmFscyBhbmQgY29uY2F0ZW5hdGlvbnMgb2Ygc3RyaW5nIGxpdGVyYWxzCi8vLyBpbnRvIHRoZSBzdHJpbmcgdmFsdWUuCmNsYXNzIFN0cmluZ2lmaWVyIGV4dGVuZHMgaXIuRXhwcmVzc2lvblZpc2l0b3I8U3RyaW5nPiB7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpID0+IG5vZGUudmFsdWU7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgIFN0cmluZyB2YWx1ZSA9IGV4cHJlc3Npb24uYWNjZXB0KHRoaXMpOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHNiLndyaXRlKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICBpci5Db25zdGFudCBjb25zdGFudCA9IG5vZGUuY29uc3RhbnQ7CiAgICBpZiAoY29uc3RhbnQgaXMgaXIuU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIGNvbnN0YW50LnZhbHVlOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IGNvbnZlcnRzIGEga2VybmVsIGNvbnN0YW50IGV4cHJlc3Npb24gaW50byBhCi8vLyBbQ29uc3RhbnRFeHByZXNzaW9uXS4KY2xhc3MgQ29uc3RhbnRpZmllciBleHRlbmRzIGlyLkV4cHJlc3Npb25WaXNpdG9yPENvbnN0YW50RXhwcmVzc2lvbj4gewogIGZpbmFsIGJvb2wgcmVxdWlyZUNvbnN0YW50OwogIGZpbmFsIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CiAgaXIuVHJlZU5vZGUgZmFpbE5vZGU7CiAgZmluYWwgTWFwPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIENvbnN0YW50RXhwcmVzc2lvbj4gX2luaXRpYWxpemVyTG9jYWxzID0KICAgICAgPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIENvbnN0YW50RXhwcmVzc2lvbj57fTsKCiAgQ29uc3RhbnRpZmllcih0aGlzLmVsZW1lbnRNYXAsIHt0aGlzLnJlcXVpcmVDb25zdGFudDogdHJ1ZX0pOwoKICBDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzID0+IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdChpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCA9IG5vZGUuYWNjZXB0KHRoaXMpOwogICAgaWYgKGNvbnN0YW50ID09IG51bGwgJiYgcmVxdWlyZUNvbnN0YW50KSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgY29udGV4dHVhbCBlcnJvciBtZXNzYWdlcy4KICAgICAgZWxlbWVudE1hcC5yZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShmYWlsTm9kZSA/PyBub2RlKSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLk5PVF9BX0NPTVBJTEVfVElNRV9DT05TVEFOVCk7CiAgICAgIHJldHVybiBuZXcgRXJyb25lb3VzQ29uc3RhbnRFeHByZXNzaW9uKCk7CiAgICB9CiAgICByZXR1cm4gY29uc3RhbnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZGVmYXVsdEV4cHJlc3Npb24oaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAocmVxdWlyZUNvbnN0YW50KSB7CiAgICAgIGZhaWxOb2RlID8/PSBub2RlOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gX2NvbXB1dGVMaXN0KExpc3Q8aXIuRXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMpIHsKICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBsaXN0ID0gPENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCA9IHZpc2l0KGV4cHJlc3Npb24pOwogICAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGxpc3QuYWRkKGNvbnN0YW50KTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IF9jb21wdXRlQXJndW1lbnRzKGlyLkFyZ3VtZW50cyBub2RlKSB7CiAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gYXJndW1lbnRzID0gPENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBub2RlLnBvc2l0aW9uYWwpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50ID0gdmlzaXQoYXJndW1lbnQpOwogICAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGFyZ3VtZW50cy5hZGQoY29uc3RhbnQpOwogICAgfQogICAgZm9yIChpci5OYW1lZEV4cHJlc3Npb24gYXJndW1lbnQgaW4gbm9kZS5uYW1lZCkgewogICAgICBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgPSB2aXNpdChhcmd1bWVudC52YWx1ZSk7CiAgICAgIGlmIChjb25zdGFudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgYXJndW1lbnRzLmFkZChjb25zdGFudCk7CiAgICB9CiAgICByZXR1cm4gYXJndW1lbnRzOwogIH0KCiAgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gX2NvbXB1dGVDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIGlyLkNvbnN0cnVjdG9yIHRhcmdldCwKICAgICAgaXIuQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBjb3JyZWN0IHR5cGUgYXJndW1lbnRzIGFyZSBwYXNzZWQKICAgICAgLy8gdGhyb3VnaCBbYXJndW1lbnRzXS4gQ3VycmVudCBbaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplcl0gZG9lc24ndCBoYXZlCiAgICAgIC8vIGFueSB0eXBlIGFyZ3VtZW50cy4KICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZXMpIHsKICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBleHByZXNzaW9ucyA9IF9jb21wdXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICBpZiAoZXhwcmVzc2lvbnMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIGVsZW1lbnRNYXAuY3JlYXRlSW50ZXJmYWNlVHlwZSh0YXJnZXQuZW5jbG9zaW5nQ2xhc3MsIHR5cGVzKSwKICAgICAgICBlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKHRhcmdldCksCiAgICAgICAgZWxlbWVudE1hcC5nZXRDYWxsU3RydWN0dXJlKGFyZ3VtZW50cyksCiAgICAgICAgZXhwcmVzc2lvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAoIW5vZGUuaXNDb25zdCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2NvbXB1dGVDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgbm9kZS50YXJnZXQsIG5vZGUuYXJndW1lbnRzLCBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRWYXJpYWJsZUdldChpci5WYXJpYWJsZUdldCBub2RlKSB7CiAgICBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgPSBfaW5pdGlhbGl6ZXJMb2NhbHNbbm9kZS52YXJpYWJsZV07CiAgICBpZiAoY29uc3RhbnQgIT0gbnVsbCkgewogICAgICByZXR1cm4gY29uc3RhbnQ7CiAgICB9CiAgICBpZiAobm9kZS52YXJpYWJsZS5wYXJlbnQgaXMgaXIuRnVuY3Rpb25Ob2RlKSB7CiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IG5vZGUudmFyaWFibGUucGFyZW50OwogICAgICBpbnQgaW5kZXggPSBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5pbmRleE9mKG5vZGUudmFyaWFibGUpOwogICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICByZXR1cm4gbmV3IFBvc2l0aW9uYWxBcmd1bWVudFJlZmVyZW5jZShpbmRleCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5jb250YWlucyhub2RlLnZhcmlhYmxlKSk7CiAgICAgICAgcmV0dXJuIG5ldyBOYW1lZEFyZ3VtZW50UmVmZXJlbmNlKG5vZGUudmFyaWFibGUubmFtZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobm9kZS52YXJpYWJsZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiB2aXNpdChub2RlLnZhcmlhYmxlLmluaXRpYWxpemVyKTsKICAgIH0KICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdFN0YXRpY0dldChpci5TdGF0aWNHZXQgbm9kZSkgewogICAgaXIuTWVtYmVyIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgaWYgKHRhcmdldCBpcyBpci5GaWVsZCAmJiB0YXJnZXQuaXNDb25zdCkgewogICAgICByZXR1cm4gbmV3IEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKGVsZW1lbnRNYXAuZ2V0RmllbGQobm9kZS50YXJnZXQpKTsKICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIGlyLlByb2NlZHVyZSAmJgogICAgICAgIHRhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gZWxlbWVudE1hcC5nZXRNZXRob2Qobm9kZS50YXJnZXQpOwogICAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5nZXRGdW5jdGlvblR5cGUobm9kZS50YXJnZXQuZnVuY3Rpb24pOwogICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQ29uc3RhbnRFeHByZXNzaW9uKGZ1bmN0aW9uLCB0eXBlKTsKICAgIH0KICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdE51bGxMaXRlcmFsKGlyLk51bGxMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTnVsbENvbnN0YW50RXhwcmVzc2lvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0Qm9vbExpdGVyYWwoaXIuQm9vbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBCb29sQ29uc3RhbnRFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0SW50TGl0ZXJhbChpci5JbnRMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgSW50Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIG5ldyBCaWdJbnQuZnJvbShub2RlLnZhbHVlKS50b1Vuc2lnbmVkKDY0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXREb3VibGVMaXRlcmFsKGlyLkRvdWJsZUxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBEb3VibGVDb25zdGFudEV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdHJpbmdDb25zdGFudEV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTeW1ib2xDb25zdGFudEV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKGlyLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGV4cHJlc3Npb25zID0gX2NvbXB1dGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMpOwogICAgaWYgKGV4cHJlc3Npb25zID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBDb25jYXRlbmF0ZUNvbnN0YW50RXhwcmVzc2lvbihleHByZXNzaW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRNYXBMaXRlcmFsKGlyLk1hcExpdGVyYWwgbm9kZSkgewogICAgaWYgKCFub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogICAgfQogICAgRGFydFR5cGUga2V5VHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS5rZXlUeXBlKTsKICAgIERhcnRUeXBlIHZhbHVlVHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS52YWx1ZVR5cGUpOwogICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGtleXMgPSA8Q29uc3RhbnRFeHByZXNzaW9uPltdOwogICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IHZhbHVlcyA9IDxDb25zdGFudEV4cHJlc3Npb24+W107CiAgICBmb3IgKGlyLk1hcEVudHJ5IGVudHJ5IGluIG5vZGUuZW50cmllcykgewogICAgICBDb25zdGFudEV4cHJlc3Npb24ga2V5ID0gdmlzaXQoZW50cnkua2V5KTsKICAgICAgaWYgKGtleSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAga2V5cy5hZGQoa2V5KTsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlID0gdmlzaXQoZW50cnkudmFsdWUpOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHZhbHVlcy5hZGQodmFsdWUpOwogICAgfQogICAgcmV0dXJuIG5ldyBNYXBDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLm1hcFR5cGUoa2V5VHlwZSwgdmFsdWVUeXBlKSwga2V5cywgdmFsdWVzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdFNldExpdGVyYWwoaXIuU2V0TGl0ZXJhbCBub2RlKSB7CiAgICBpZiAoIW5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgICB9CiAgICBEYXJ0VHlwZSBlbGVtZW50VHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlQXJndW1lbnQpOwogICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IHZhbHVlcyA9IDxDb25zdGFudEV4cHJlc3Npb24+W107CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSA9IHZpc2l0KGV4cHJlc3Npb24pOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHZhbHVlcy5hZGQodmFsdWUpOwogICAgfQogICAgcmV0dXJuIG5ldyBTZXRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldFR5cGUoZWxlbWVudFR5cGUpLCB2YWx1ZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0TGlzdExpdGVyYWwoaXIuTGlzdExpdGVyYWwgbm9kZSkgewogICAgaWYgKCFub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogICAgfQogICAgRGFydFR5cGUgZWxlbWVudFR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KTsKICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiB2YWx1ZXMgPSA8Q29uc3RhbnRFeHByZXNzaW9uPltdOwogICAgZm9yIChpci5FeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gbm9kZS5leHByZXNzaW9ucykgewogICAgICBDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgPSB2aXNpdChleHByZXNzaW9uKTsKICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICB2YWx1ZXMuYWRkKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBuZXcgTGlzdENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICBfY29tbW9uRWxlbWVudHMubGlzdFR5cGUoZWxlbWVudFR5cGUpLCB2YWx1ZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0VHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkgewogICAgU3RyaW5nIG5hbWU7CiAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpOwogICAgaWYgKHR5cGUuaXNEeW5hbWljKSB7CiAgICAgIG5hbWUgPSAnZHluYW1pYyc7CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBuYW1lID0gdHlwZS5lbGVtZW50Lm5hbWU7CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNUeXBlZGVmKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENvbXB1dGUgYSBuYW1lIGZvciB0aGUgdHlwZSBsaXRlcmFsPyBJdCBpcyBvbmx5CiAgICAgIC8vIHVzZWQgaW4gZXJyb3IgbWVzc2FnZXMgaW4gdGhlIG9sZCBTU0EgYnVpbGRlci4KICAgICAgbmFtZSA9ICc/JzsKICAgIH0gZWxzZSBpZiAobm9kZS50eXBlIGlzIGlyLkZ1bmN0aW9uVHlwZSkgewogICAgICBpci5GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gbm9kZS50eXBlOwogICAgICBhc3NlcnQoZnVuY3Rpb25UeXBlLnR5cGVkZWYgIT0gbnVsbCk7CiAgICAgIHR5cGUgPSBlbGVtZW50TWFwLmdldFR5cGVkZWZUeXBlKGZ1bmN0aW9uVHlwZS50eXBlZGVmKTsKICAgICAgbmFtZSA9IGZ1bmN0aW9uVHlwZS50eXBlZGVmLm5hbWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVDb25zdGFudEV4cHJlc3Npb24odHlwZSwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRBc0V4cHJlc3Npb24oaXIuQXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uID0gdmlzaXQobm9kZS5vcGVyYW5kKTsKICAgIGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlKTsKICAgIHJldHVybiBuZXcgQXNDb25zdGFudEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSkgewogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgbm9kZS50eXBlQXJndW1lbnRzLm1hcChlbGVtZW50TWFwLmdldERhcnRUeXBlKS50b0xpc3QoKTsKICAgIGZvciAoRGFydFR5cGUgdHlwZUFyZ3VtZW50IGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgaWYgKHR5cGVBcmd1bWVudC5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IEluc3RhbnRpYXRpb25Db25zdGFudEV4cHJlc3Npb24odHlwZUFyZ3VtZW50cywgZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXROb3QoaXIuTm90IG5vZGUpIHsKICAgIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uID0gdmlzaXQobm9kZS5vcGVyYW5kKTsKICAgIGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBVbmFyeUNvbnN0YW50RXhwcmVzc2lvbihVbmFyeU9wZXJhdG9yLk5PVCwgZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25kaXRpb24gPSB2aXNpdChub2RlLmNvbmRpdGlvbik7CiAgICBpZiAoY29uZGl0aW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgQ29uc3RhbnRFeHByZXNzaW9uIHRydWVFeHAgPSB2aXNpdChub2RlLnRoZW4pOwogICAgaWYgKHRydWVFeHAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBDb25zdGFudEV4cHJlc3Npb24gZmFsc2VFeHAgPSB2aXNpdChub2RlLm90aGVyd2lzZSk7CiAgICBpZiAoZmFsc2VFeHAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsQ29uc3RhbnRFeHByZXNzaW9uKGNvbmRpdGlvbiwgdHJ1ZUV4cCwgZmFsc2VFeHApOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0UHJvcGVydHlHZXQoaXIuUHJvcGVydHlHZXQgbm9kZSkgewogICAgaWYgKG5vZGUubmFtZS5uYW1lICE9ICdsZW5ndGgnKSB7CiAgICAgIGZhaWxOb2RlID8/PSBub2RlOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIENvbnN0YW50RXhwcmVzc2lvbiByZWNlaXZlciA9IHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgaWYgKHJlY2VpdmVyID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBTdHJpbmdMZW5ndGhDb25zdGFudEV4cHJlc3Npb24ocmVjZWl2ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0TWV0aG9kSW52b2NhdGlvbihpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIC8vIE1ldGhvZCBpbnZvY2F0aW9ucyBhcmUgZ2VuZXJhbGx5IG5vdCBjb25zdGFudCBleHByZXNzaW9ucyBidXQgdW5hcnkKICAgIC8vIGFuZCBiaW5hcnkgZXhwcmVzc2lvbnMgYXJlIGVuY29kZWQgYXMgbWV0aG9kIGludm9jYXRpb25zIGluIGtlcm5lbC4KICAgIGlmIChub2RlLmFyZ3VtZW50cy5uYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICAgIH0KICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA9PSAwKSB7CiAgICAgIFVuYXJ5T3BlcmF0b3Igb3BlcmF0b3I7CiAgICAgIGlmIChub2RlLm5hbWUubmFtZSA9PSBVbmFyeU9wZXJhdG9yLk5FR0FURS5zZWxlY3Rvck5hbWUpIHsKICAgICAgICBvcGVyYXRvciA9IFVuYXJ5T3BlcmF0b3IuTkVHQVRFOwogICAgICB9IGVsc2UgewogICAgICAgIG9wZXJhdG9yID0gVW5hcnlPcGVyYXRvci5wYXJzZShub2RlLm5hbWUubmFtZSk7CiAgICAgIH0KICAgICAgaWYgKG9wZXJhdG9yICE9IG51bGwpIHsKICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgICAgIGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiBuZXcgVW5hcnlDb25zdGFudEV4cHJlc3Npb24ob3BlcmF0b3IsIGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPT0gMSkgewogICAgICBCaW5hcnlPcGVyYXRvciBvcGVyYXRvciA9IEJpbmFyeU9wZXJhdG9yLnBhcnNlKG5vZGUubmFtZS5uYW1lKTsKICAgICAgaWYgKG9wZXJhdG9yICE9IG51bGwpIHsKICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gbGVmdCA9IHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgICAgIGlmIChsZWZ0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiByaWdodCA9IHZpc2l0KG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuc2luZ2xlKTsKICAgICAgICBpZiAocmlnaHQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlDb25zdGFudEV4cHJlc3Npb24obGVmdCwgb3BlcmF0b3IsIHJpZ2h0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0U3RhdGljSW52b2NhdGlvbihpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlLnRhcmdldCk7CiAgICBpZiAobWVtYmVyID09IF9jb21tb25FbGVtZW50cy5pZGVudGljYWxGdW5jdGlvbikgewogICAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPT0gMiAmJgogICAgICAgICAgbm9kZS5hcmd1bWVudHMubmFtZWQuaXNFbXB0eSkgewogICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBsZWZ0ID0gdmlzaXQobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbFswXSk7CiAgICAgICAgaWYgKGxlZnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIHJpZ2h0ID0gdmlzaXQobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbFsxXSk7CiAgICAgICAgaWYgKHJpZ2h0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiBuZXcgSWRlbnRpY2FsQ29uc3RhbnRFeHByZXNzaW9uKGxlZnQsIHJpZ2h0KTsKICAgICAgfQogICAgfSBlbHNlIGlmIChtZW1iZXIubmFtZSA9PSAnZnJvbUVudmlyb25tZW50JyAmJgogICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID09IDEpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIG5hbWUgPSB2aXNpdChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLnNpbmdsZSk7CiAgICAgIGlmIChuYW1lID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBDb25zdGFudEV4cHJlc3Npb24gZGVmYXVsdFZhbHVlOwogICAgICBpZiAobm9kZS5hcmd1bWVudHMubmFtZWQubGVuZ3RoID09IDEpIHsKICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMubmFtZWQuc2luZ2xlLm5hbWUgIT0gJ2RlZmF1bHRWYWx1ZScpIHsKICAgICAgICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICAgICAgICB9CiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmlzaXQobm9kZS5hcmd1bWVudHMubmFtZWQuc2luZ2xlLnZhbHVlKTsKICAgICAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChtZW1iZXIuZW5jbG9zaW5nQ2xhc3MgPT0gX2NvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcykgewogICAgICAgIHJldHVybiBuZXcgQm9vbEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbihuYW1lLCBkZWZhdWx0VmFsdWUpOwogICAgICB9IGVsc2UgaWYgKG1lbWJlci5lbmNsb3NpbmdDbGFzcyA9PSBfY29tbW9uRWxlbWVudHMuaW50Q2xhc3MpIHsKICAgICAgICByZXR1cm4gbmV3IEludEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbihuYW1lLCBkZWZhdWx0VmFsdWUpOwogICAgICB9IGVsc2UgaWYgKG1lbWJlci5lbmNsb3NpbmdDbGFzcyA9PSBfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpIHsKICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0Zyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbihuYW1lLCBkZWZhdWx0VmFsdWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihpci5Mb2dpY2FsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBCaW5hcnlPcGVyYXRvciBvcGVyYXRvciA9IEJpbmFyeU9wZXJhdG9yLnBhcnNlKG5vZGUub3BlcmF0b3IpOwogICAgaWYgKG9wZXJhdG9yICE9IG51bGwgJiYKICAgICAgICBCaW5hcnlDb25zdGFudEV4cHJlc3Npb24ucG90ZW50aWFsT3BlcmF0b3Iob3BlcmF0b3IpKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBsZWZ0ID0gdmlzaXQobm9kZS5sZWZ0KTsKICAgICAgaWYgKGxlZnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiByaWdodCA9IHZpc2l0KG5vZGUucmlnaHQpOwogICAgICBpZiAocmlnaHQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBuZXcgQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uKGxlZnQsIG9wZXJhdG9yLCByaWdodCk7CiAgICB9CiAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRMZXQoaXIuTGV0IG5vZGUpIHsKICAgIGlyLkV4cHJlc3Npb24gYm9keSA9IG5vZGUuYm9keTsKICAgIGlmIChib2R5IGlzIGlyLkNvbmRpdGlvbmFsRXhwcmVzc2lvbikgewogICAgICBpci5FeHByZXNzaW9uIGNvbmRpdGlvbiA9IGJvZHkuY29uZGl0aW9uOwogICAgICBpZiAoY29uZGl0aW9uIGlzIGlyLk1ldGhvZEludm9jYXRpb24pIHsKICAgICAgICBpci5FeHByZXNzaW9uIHJlY2VpdmVyID0gY29uZGl0aW9uLnJlY2VpdmVyOwogICAgICAgIGlyLkV4cHJlc3Npb24gb3RoZXJ3aXNlID0gYm9keS5vdGhlcndpc2U7CiAgICAgICAgaWYgKGNvbmRpdGlvbi5uYW1lLm5hbWUgPT0gQmluYXJ5T3BlcmF0b3IuRVEubmFtZSAmJgogICAgICAgICAgICByZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCAmJgogICAgICAgICAgICBjb25kaXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuc2luZ2xlIGlzIGlyLk51bGxMaXRlcmFsICYmCiAgICAgICAgICAgIG90aGVyd2lzZSBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICAgICAgaWYgKHJlY2VpdmVyLnZhcmlhYmxlID09IG5vZGUudmFyaWFibGUgJiYKICAgICAgICAgICAgICBvdGhlcndpc2UudmFyaWFibGUgPT0gbm9kZS52YXJpYWJsZSkgewogICAgICAgICAgICAvLyBXZSBoYXZlIDxsZWZ0PiA/PyA8cmlnaHQ+IGVuY29kZWQgYXM6CiAgICAgICAgICAgIC8vICAgIGxldCAjMSA9IDxsZWZ0PiBpbiAjMSA9PSBudWxsID8gPHJpZ2h0PiA6ICMxCiAgICAgICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBsZWZ0ID0gdmlzaXQobm9kZS52YXJpYWJsZS5pbml0aWFsaXplcik7CiAgICAgICAgICAgIGlmIChsZWZ0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gcmlnaHQgPSB2aXNpdChib2R5LnRoZW4pOwogICAgICAgICAgICBpZiAocmlnaHQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSBbSUZfTlVMTF0gYmluYXJ5IGNvbnN0YW50IGV4cHJlc3Npb24KICAgICAgICAgICAgLy8gd2hlbiB0aGUgcmVzb2x2ZXIgaXMgcmVtb3ZlZDsgdGhlbiB3ZSBubyBsb25nZXIgbmVlZCB0aGUKICAgICAgICAgICAgLy8gZXhwcmVzc2lvbnMgdG8gYmUgc3RydWN0dXJhbGx5IGVxdWl2YWxlbmNlIGZvciBlcXVpdmFsZW5jZQogICAgICAgICAgICAvLyB0ZXN0aW5nLgogICAgICAgICAgICByZXR1cm4gbmV3IEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICAgICAgICAgIGxlZnQsIEJpbmFyeU9wZXJhdG9yLklGX05VTEwsIHJpZ2h0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdEJsb2NrRXhwcmVzc2lvbihpci5CbG9ja0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgLy8vIENvbXB1dGUgdGhlIFtDb25zdGFudENvbnN0cnVjdG9yXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb25zdCBjb25zdHJ1Y3RvcgogIC8vLyBbbm9kZV0uCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBjb21wdXRlQ29uc3RhbnRDb25zdHJ1Y3Rvcihpci5Db25zdHJ1Y3RvciBub2RlKSB7CiAgICBhc3NlcnQobm9kZS5pc0NvbnN0KTsKICAgIGlyLkNsYXNzIGNscyA9IG5vZGUuZW5jbG9zaW5nQ2xhc3M7CiAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmdldFRoaXNUeXBlKGVsZW1lbnRNYXAuZ2V0Q2xhc3MoY2xzKSk7CgogICAgTWFwPGR5bmFtaWMsIENvbnN0YW50RXhwcmVzc2lvbj4gZGVmYXVsdFZhbHVlcyA9CiAgICAgICAgPGR5bmFtaWMsIENvbnN0YW50RXhwcmVzc2lvbj57fTsKICAgIGludCBwYXJhbWV0ZXJJbmRleCA9IDA7CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyCiAgICAgICAgaW4gbm9kZS5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBpZiAocGFyYW1ldGVySW5kZXggPj0gbm9kZS5mdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGRlZmF1bHRWYWx1ZTsKICAgICAgICBpZiAocGFyYW1ldGVyLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZpc2l0KHBhcmFtZXRlci5pbml0aWFsaXplcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG5ldyBOdWxsQ29uc3RhbnRFeHByZXNzaW9uKCk7CiAgICAgICAgfQogICAgICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgZGVmYXVsdFZhbHVlc1twYXJhbWV0ZXJJbmRleF0gPSBkZWZhdWx0VmFsdWU7CiAgICAgIH0KICAgICAgcGFyYW1ldGVySW5kZXgrKzsKICAgIH0KICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgaW4gbm9kZS5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGRlZmF1bHRWYWx1ZSA9IHZpc2l0KHBhcmFtZXRlci5pbml0aWFsaXplcik7CiAgICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGRlZmF1bHRWYWx1ZXNbcGFyYW1ldGVyLm5hbWVdID0gZGVmYXVsdFZhbHVlOwogICAgfQoKICAgIGJvb2wgaXNSZWRpcmVjdGluZyA9IG5vZGUuaW5pdGlhbGl6ZXJzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgbm9kZS5pbml0aWFsaXplcnMuc2luZ2xlIGlzIGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXI7CgogICAgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudEV4cHJlc3Npb24+IGZpZWxkTWFwID0KICAgICAgICA8RmllbGRFbnRpdHksIENvbnN0YW50RXhwcmVzc2lvbj57fTsKCiAgICB2b2lkIHJlZ2lzdGVyRmllbGQoaXIuRmllbGQgZmllbGQsIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCkgewogICAgICBmaWVsZE1hcFtlbGVtZW50TWFwLmdldEZpZWxkKGZpZWxkKV0gPSBjb25zdGFudDsKICAgIH0KCiAgICBpZiAoIWlzUmVkaXJlY3RpbmcpIHsKICAgICAgZm9yIChpci5GaWVsZCBmaWVsZCBpbiBjbHMuZmllbGRzKSB7CiAgICAgICAgaWYgKGZpZWxkLmlzU3RhdGljKSBjb250aW51ZTsKICAgICAgICBpZiAoZmllbGQuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgcmVnaXN0ZXJGaWVsZChmaWVsZCwgdmlzaXQoZmllbGQuaW5pdGlhbGl6ZXIpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiBzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbjsKICAgIExpc3Q8QXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uPiBhc3NlcnRpb25zID0gPEFzc2VydENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICAgIGZvciAoaXIuSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgaW4gbm9kZS5pbml0aWFsaXplcnMpIHsKICAgICAgaWYgKGluaXRpYWxpemVyIGlzIGlyLkZpZWxkSW5pdGlhbGl6ZXIpIHsKICAgICAgICByZWdpc3RlckZpZWxkKGluaXRpYWxpemVyLmZpZWxkLCB2aXNpdChpbml0aWFsaXplci52YWx1ZSkpOwogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLlN1cGVySW5pdGlhbGl6ZXIpIHsKICAgICAgICBzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbiA9IF9jb21wdXRlQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICBpbml0aWFsaXplci50YXJnZXQsCiAgICAgICAgICAgIGluaXRpYWxpemVyLmFyZ3VtZW50cywKICAgICAgICAgICAgaW5pdGlhbGl6ZXIuYXJndW1lbnRzLnR5cGVzKTsKICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyKSB7CiAgICAgICAgc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24gPSBfY29tcHV0ZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgaW5pdGlhbGl6ZXIudGFyZ2V0LAogICAgICAgICAgICBpbml0aWFsaXplci5hcmd1bWVudHMsCiAgICAgICAgICAgIG5vZGUuZW5jbG9zaW5nQ2xhc3MudGhpc1R5cGUudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuQXNzZXJ0SW5pdGlhbGl6ZXIpIHsKICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gY29uZGl0aW9uID0gdmlzaXQoaW5pdGlhbGl6ZXIuc3RhdGVtZW50LmNvbmRpdGlvbik7CiAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIG1lc3NhZ2UgPSBpbml0aWFsaXplci5zdGF0ZW1lbnQubWVzc2FnZSAhPSBudWxsCiAgICAgICAgICAgID8gdmlzaXQoaW5pdGlhbGl6ZXIuc3RhdGVtZW50Lm1lc3NhZ2UpCiAgICAgICAgICAgIDogbnVsbDsKICAgICAgICBhc3NlcnRpb25zLmFkZChuZXcgQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uKGNvbmRpdGlvbiwgbWVzc2FnZSkpOwogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLkludmFsaWRJbml0aWFsaXplcikgewogICAgICAgIFN0cmluZyBjb25zdHJ1Y3Rvck5hbWUgPSAnJHtjbHMubmFtZX0uJHtub2RlLm5hbWV9JzsKICAgICAgICBlbGVtZW50TWFwLnJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoaW5pdGlhbGl6ZXIpLAogICAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTlNUUlVDVE9SLAogICAgICAgICAgICB7J2NvbnN0cnVjdG9yTmFtZSc6IGNvbnN0cnVjdG9yTmFtZX0pOwogICAgICAgIHJldHVybiBuZXcgRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3RvcigpOwogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLkxvY2FsSW5pdGlhbGl6ZXIpIHsKICAgICAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gaW5pdGlhbGl6ZXIudmFyaWFibGU7CiAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50ID0gdmlzaXQodmFyaWFibGUuaW5pdGlhbGl6ZXIpOwogICAgICAgIGlmIChjb25zdGFudCAhPSBudWxsKSB7CiAgICAgICAgICBfaW5pdGlhbGl6ZXJMb2NhbHNbdmFyaWFibGVdID0gY29uc3RhbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBbX0Vycm9uZW91c0luaXRpYWxpemVyVmlzaXRvcl0gaW4KICAgICAgICAgIC8vIGBzc2EvYnVpbGRlcl9rZXJuZWwuZGFydGAgdG8gaWRlbnRpZnkgZXJyb25lb3VzIGluaXRpYWxpemVyLgogICAgICAgICAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZSA9ICcke2Nscy5uYW1lfS4ke25vZGUubmFtZX0nOwogICAgICAgICAgZWxlbWVudE1hcC5yZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoaW5pdGlhbGl6ZXIpLAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1IsCiAgICAgICAgICAgICAgeydjb25zdHJ1Y3Rvck5hbWUnOiBjb25zdHJ1Y3Rvck5hbWV9KTsKICAgICAgICAgIHJldHVybiBuZXcgRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3RvcigpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgaW5pdGlhbGl6ZXIgJGluaXRpYWxpemVyICgke2luaXRpYWxpemVyLnJ1bnRpbWVUeXBlfSknKTsKICAgICAgfQogICAgfQogICAgaWYgKGlzUmVkaXJlY3RpbmcpIHsKICAgICAgcmV0dXJuIG5ldyBSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yKAogICAgICAgICAgZGVmYXVsdFZhbHVlcywgc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3Rvcih0eXBlLCBkZWZhdWx0VmFsdWVzLCBmaWVsZE1hcCwKICAgICAgICAgIGFzc2VydGlvbnMsIHN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uKTsKICAgIH0KICB9Cn0KCi8vLyBWaXNpdG9yIHRoYXQgY29udmVydHMga2VybmVsIGRhcnQgdHlwZXMgaW50byBbRGFydFR5cGVdLgpjbGFzcyBEYXJ0VHlwZUNvbnZlcnRlciBleHRlbmRzIGlyLkRhcnRUeXBlVmlzaXRvcjxEYXJ0VHlwZT4gewogIGZpbmFsIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CiAgZmluYWwgTWFwPGlyLlR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBjdXJyZW50RnVuY3Rpb25UeXBlUGFyYW1ldGVycyA9CiAgICAgIDxpci5UeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICBib29sIHRvcExldmVsID0gdHJ1ZTsKCiAgRGFydFR5cGVDb252ZXJ0ZXIodGhpcy5lbGVtZW50TWFwKTsKCiAgRGFydFR5cGUgY29udmVydChpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICB0b3BMZXZlbCA9IHRydWU7CiAgICByZXR1cm4gdHlwZS5hY2NlcHQodGhpcyk7CiAgfQoKICAvLy8gVmlzaXQgYSBpbm5lciB0eXBlLgogIERhcnRUeXBlIHZpc2l0VHlwZShpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICB0b3BMZXZlbCA9IGZhbHNlOwogICAgcmV0dXJuIHR5cGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgSW50ZXJmYWNlVHlwZSB2aXNpdFN1cGVydHlwZShpci5TdXBlcnR5cGUgbm9kZSkgewogICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudE1hcC5nZXRDbGFzcyhub2RlLmNsYXNzTm9kZSk7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY2xzLCB2aXNpdFR5cGVzKG5vZGUudHlwZUFyZ3VtZW50cykpOwogIH0KCiAgTGlzdDxEYXJ0VHlwZT4gdmlzaXRUeXBlcyhMaXN0PGlyLkRhcnRUeXBlPiB0eXBlcykgewogICAgdG9wTGV2ZWwgPSBmYWxzZTsKICAgIHJldHVybiBuZXcgTGlzdC5nZW5lcmF0ZSgKICAgICAgICB0eXBlcy5sZW5ndGgsIChpbnQgaW5kZXgpID0+IHR5cGVzW2luZGV4XS5hY2NlcHQodGhpcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShpci5UeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICBEYXJ0VHlwZSB0eXBlUGFyYW1ldGVyID0gY3VycmVudEZ1bmN0aW9uVHlwZVBhcmFtZXRlcnNbbm9kZS5wYXJhbWV0ZXJdOwogICAgaWYgKHR5cGVQYXJhbWV0ZXIgIT0gbnVsbCkgewogICAgICByZXR1cm4gdHlwZVBhcmFtZXRlcjsKICAgIH0KICAgIGlmIChub2RlLnBhcmFtZXRlci5wYXJlbnQgaXMgaXIuVHlwZWRlZikgewogICAgICAvLyBUeXBlZGVmcyBhcmUgb25seSB1c2VkIGluIHR5cGUgbGl0ZXJhbHMgc28gd2UgbmV2ZXIgbmVlZCB0aGVpciB0eXBlCiAgICAgIC8vIHZhcmlhYmxlcy4KICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZVR5cGUoZWxlbWVudE1hcC5nZXRUeXBlVmFyaWFibGUobm9kZS5wYXJhbWV0ZXIpKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RnVuY3Rpb25UeXBlKGlyLkZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBpbnQgaW5kZXggPSAwOwogICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gdHlwZVZhcmlhYmxlczsKICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlID0gbmV3IEZ1bmN0aW9uVHlwZVZhcmlhYmxlKGluZGV4KTsKICAgICAgY3VycmVudEZ1bmN0aW9uVHlwZVBhcmFtZXRlcnNbdHlwZVBhcmFtZXRlcl0gPSB0eXBlVmFyaWFibGU7CiAgICAgIHR5cGVWYXJpYWJsZXMgPz89IDxGdW5jdGlvblR5cGVWYXJpYWJsZT5bXTsKICAgICAgdHlwZVZhcmlhYmxlcy5hZGQodHlwZVZhcmlhYmxlKTsKICAgICAgaW5kZXgrKzsKICAgIH0KICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgdHlwZVZhcmlhYmxlc1tpbmRleF0uYm91bmQgPQogICAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzW2luZGV4XS5ib3VuZC5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0KCiAgICBGdW5jdGlvblR5cGUgdHlwZSA9IG5ldyBGdW5jdGlvblR5cGUoCiAgICAgICAgdmlzaXRUeXBlKG5vZGUucmV0dXJuVHlwZSksCiAgICAgICAgdmlzaXRUeXBlcyhub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzCiAgICAgICAgICAgIC50YWtlKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkKICAgICAgICAgICAgLnRvTGlzdCgpKSwKICAgICAgICB2aXNpdFR5cGVzKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMKICAgICAgICAgICAgLnNraXAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KQogICAgICAgICAgICAudG9MaXN0KCkpLAogICAgICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLm1hcCgobikgPT4gbi5uYW1lKS50b0xpc3QoKSwKICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVycy5tYXAoKG4pID0+IHZpc2l0VHlwZShuLnR5cGUpKS50b0xpc3QoKSwKICAgICAgICB0eXBlVmFyaWFibGVzID8/IGNvbnN0IDxGdW5jdGlvblR5cGVWYXJpYWJsZT5bXSk7CiAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGVQYXJhbWV0ZXJzLnJlbW92ZSh0eXBlUGFyYW1ldGVyKTsKICAgIH0KICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRJbnRlcmZhY2VUeXBlKGlyLkludGVyZmFjZVR5cGUgbm9kZSkgewogICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudE1hcC5nZXRDbGFzcyhub2RlLmNsYXNzTm9kZSk7CiAgICBpZiAoY2xzLm5hbWUgPT0gJ0Z1dHVyZU9yJyAmJgogICAgICAgIGNscy5saWJyYXJ5ID09IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMuYXN5bmNMaWJyYXJ5KSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlT3JUeXBlKHZpc2l0VHlwZXMobm9kZS50eXBlQXJndW1lbnRzKS5zaW5nbGUpOwogICAgfQogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNscywgdmlzaXRUeXBlcyhub2RlLnR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0Vm9pZFR5cGUoaXIuVm9pZFR5cGUgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0IFZvaWRUeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdER5bmFtaWNUeXBlKGlyLkR5bmFtaWNUeXBlIG5vZGUpIHsKICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRJbnZhbGlkVHlwZShpci5JbnZhbGlkVHlwZSBub2RlKSB7CiAgICAvLyBSb290IHVzZXMgc3VjaCBhIGBvIGlzIFVucmVzb2x2ZWRgIGFuZCBgbyBhcyBVbnJlc29sdmVkYCBtdXN0IGJlIHNwZWNpYWwKICAgIC8vIGNhc2VkIGluIHRoZSBidWlsZGVyLCBuZXN0ZWQgaW52YWxpZCB0eXBlcyBhcmUgdHJlYXRlZCBhcyBgZHluYW1pY2AuCiAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0Qm90dG9tVHlwZShpci5Cb3R0b21UeXBlIG5vZGUpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLm51bGxUeXBlOwogIH0KfQoKY2xhc3MgQ29uc3RhbnRWYWx1ZWZpZXIgZXh0ZW5kcyBpci5Db21wdXRlT25jZUNvbnN0YW50VmlzaXRvcjxDb25zdGFudFZhbHVlPiB7CiAgZmluYWwgSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKCiAgQ29uc3RhbnRWYWx1ZWZpZXIodGhpcy5lbGVtZW50TWFwKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0Q29uc3RhbnQoaXIuQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlVuZXhwZWN0ZWQgY29uc3RhbnQgJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoaXIuVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCB1bmV2YWx1YXRlZCBjb25zdGFudCAkbm9kZS4iKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KGlyLlR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVUeXBlKAogICAgICAgIGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMsIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0VGVhck9mZkNvbnN0YW50KGlyLlRlYXJPZmZDb25zdGFudCBub2RlKSB7CiAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IGVsZW1lbnRNYXAuZ2V0TWV0aG9kKG5vZGUucHJvY2VkdXJlKTsKICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmdldEZ1bmN0aW9uVHlwZShub2RlLnByb2NlZHVyZS5mdW5jdGlvbik7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZShmdW5jdGlvbiwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCgKICAgICAgaXIuUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gW107CiAgICBmb3IgKGlyLkRhcnRUeXBlIHR5cGUgaW4gbm9kZS50eXBlcykgewogICAgICB0eXBlQXJndW1lbnRzLmFkZChlbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpKTsKICAgIH0KICAgIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBmdW5jdGlvbiA9IHZpc2l0Q29uc3RhbnQobm9kZS50ZWFyT2ZmQ29uc3RhbnQpOwogICAgcmV0dXJuIG5ldyBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSh0eXBlQXJndW1lbnRzLCBmdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0SW5zdGFuY2VDb25zdGFudChpci5JbnN0YW5jZUNvbnN0YW50IG5vZGUpIHsKICAgIEludGVyZmFjZVR5cGUgdHlwZSA9CiAgICAgICAgZWxlbWVudE1hcC5jcmVhdGVJbnRlcmZhY2VUeXBlKG5vZGUuY2xhc3NOb2RlLCBub2RlLnR5cGVBcmd1bWVudHMpOwogICAgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPiBmaWVsZHMgPSB7fTsKICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoaXIuUmVmZXJlbmNlIHJlZmVyZW5jZSwgaXIuQ29uc3RhbnQgdmFsdWUpIHsKICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBlbGVtZW50TWFwLmdldEZpZWxkKHJlZmVyZW5jZS5hc0ZpZWxkKTsKICAgICAgZmllbGRzW2ZpZWxkXSA9IHZpc2l0Q29uc3RhbnQodmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSh0eXBlLCBmaWVsZHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdExpc3RDb25zdGFudChpci5MaXN0Q29uc3RhbnQgbm9kZSkgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiBlbGVtZW50cyA9IFtdOwogICAgZm9yIChpci5Db25zdGFudCBlbGVtZW50IGluIG5vZGUuZW50cmllcykgewogICAgICBlbGVtZW50cy5hZGQodmlzaXRDb25zdGFudChlbGVtZW50KSk7CiAgICB9CiAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50cwogICAgICAgIC5saXN0VHlwZShlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KSk7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUxpc3QodHlwZSwgZWxlbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdFNldENvbnN0YW50KGlyLlNldENvbnN0YW50IG5vZGUpIHsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZWxlbWVudHMgPSBbXTsKICAgIGZvciAoaXIuQ29uc3RhbnQgZWxlbWVudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgZWxlbWVudHMuYWRkKHZpc2l0Q29uc3RhbnQoZWxlbWVudCkpOwogICAgfQogICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMKICAgICAgICAuc2V0VHlwZShlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KSk7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVNldChlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLCB0eXBlLCBlbGVtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0TWFwQ29uc3RhbnQoaXIuTWFwQ29uc3RhbnQgbm9kZSkgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiBrZXlzID0gW107CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcyA9IFtdOwogICAgZm9yIChpci5Db25zdGFudE1hcEVudHJ5IGVsZW1lbnQgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIGtleXMuYWRkKHZpc2l0Q29uc3RhbnQoZWxlbWVudC5rZXkpKTsKICAgICAgdmFsdWVzLmFkZCh2aXNpdENvbnN0YW50KGVsZW1lbnQudmFsdWUpKTsKICAgIH0KICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLm1hcFR5cGUoCiAgICAgICAgZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLmtleVR5cGUpLAogICAgICAgIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS52YWx1ZVR5cGUpKTsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlTWFwKAogICAgICAgIGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMsIHR5cGUsIGtleXMsIHZhbHVlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0U3ltYm9sQ29uc3RhbnQoaXIuU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTeW1ib2woZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgbm9kZS5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRTdHJpbmdDb25zdGFudChpci5TdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN0cmluZyhub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXREb3VibGVDb25zdGFudChpci5Eb3VibGVDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZURvdWJsZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRJbnRDb25zdGFudChpci5JbnRDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludEZyb21JbnQobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0Qm9vbENvbnN0YW50KGlyLkJvb2xDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUJvb2wobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0TnVsbENvbnN0YW50KGlyLk51bGxDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZU51bGwoKTsKICB9Cn0KgxcATk48ASg0LzE1ARk/KSgjIiQlISEaAVAbOQxCAQxBKjkuJhcGGgQBDD8qKR0GEQQCAT4aRx4jGE02AUABQwExNS9BLjs0MAYVBAEMPRsZBhEEAUs8NDcpGgYRBAFCQTY1KR8GNjspHwYWBAE/HR5RTx0hSSouRiswFgQBDFEkKjwEAQw9RRwXBjM3SBk3D0I/CCgvBiQEAQw5JDBMKTJDSD0GJAQBDD0pBAEMPTMEAQw7JjUEAQxBNQQBDEE1BAEMQTUEAQxNSyo7BAEMOxkmBj1BPD4uMSQVNSYZBiZEBAEMOxkmBkY+OTQmGQYmNwQBDD0ZJgZGPjk0JhkGJzgEAQw9ETcaGCggIU44Ei8wLD4oDSYGMwQBDD85KTc3BAEMQSNBMzAVCAY8KUsEAQwtOSlHBAEMUTooMyY5J0wEAQw9JhkTBjgnOQQBDEdLSysmBjEeQSkPOAgePi1CCAYxRh44J0woRAgGJAQBDEc9NzMqRydIKD0IMzFJJScuQioKQS8IQE5GTUlQCAYkBAEMSUMcQDIlNCZCBiQEAQwtJCwwLjUyPSpHKzQ1NT9IKzksUEhKGDE2DAoIBiQEAQxFJAQBTw5IGihLATUpHCoxRCktNxE3Ci82CBgGTkYtNAYBOj8BNC0BRjcGARorJik6CggGAT5OPDBEN0QgIyo9RCAjOThPSzMUSjk9MDg2MzM3QEMgMxFISj8yOjg1NQoPJFEIBhk7Ng1OMwYEAgE9PyNIJhgBJgEnFR4EARopFh4EATQ7QwQBNxYeQQQBDD9MIRwGL00UIgZNBAEMNRMuQktDMicPBiFDJTsIBgEqJC0vGC0vGDpFOkI7BhEEAQw3OyJBRgZDBAEMLR0EAQwzIAQBDDNQTCAEAQwxLwQCAU8jASYBDDQgPQQBDEhKBAEMSCdHBAEMQERJNgQBDDMuJys3BkpEBAEMQhlMMUtCLAg3BAEMOicwLAYuPjcEAQw4JzAsBi49UQQBDDgjJTgsMAY3LjEmOAQBDD5PBAEMPjUEAQw+NQQBDDg5BAEMOjMEAQw6KQQCASVwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci92aXNpdG9ycy5kYXJ0LXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9lbnYuZGFydMAAcrsvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmtlcm5lbC5lbnY7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JwogICAgc2hvdyBpc1JlZGlyZWN0aW5nRmFjdG9yeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2Nsb25lLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmNvbGxlY3Rpb24vY29sbGVjdGlvbi5kYXJ0JyBzaG93IG1lcmdlU29ydDsgLy8gYSBzdGFibGUgc29ydC4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdHJ1Y3RvcnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfY2FjaGUuZGFydCc7CmltcG9ydCAnLi4vaXIvdmlzaXRvcnMuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbnYuZGFydCc7CmltcG9ydCAnLi4vb3JkZXJlZF90eXBlc2V0LmRhcnQnOwppbXBvcnQgJy4uL3NzYS90eXBlX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwX2ltcGwuZGFydCc7CgovLy8gRW52aXJvbm1lbnQgZm9yIGZhc3QgbG9va3VwIG9mIGNvbXBvbmVudCBsaWJyYXJpZXMuCmNsYXNzIEtQcm9ncmFtRW52IHsKICBmaW5hbCBTZXQ8aXIuQ29tcG9uZW50PiBfY29tcG9uZW50cyA9IG5ldyBTZXQ8aXIuQ29tcG9uZW50PigpOwoKICBNYXA8VXJpLCBLTGlicmFyeUVudj4gX2xpYnJhcnlNYXA7CgogIC8vLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBIYW5kbGUgYXJiaXRyYXJ5IGxvYWQgb3JkZXIgaWYgbmVlZGVkLgogIGlyLk1lbWJlciBnZXQgbWFpbk1ldGhvZCA9PiBfY29tcG9uZW50cy5maXJzdD8ubWFpbk1ldGhvZDsKCiAgaXIuQ29tcG9uZW50IGdldCBtYWluQ29tcG9uZW50ID0+IF9jb21wb25lbnRzLmZpcnN0OwoKICB2b2lkIGFkZENvbXBvbmVudChpci5Db21wb25lbnQgY29tcG9uZW50KSB7CiAgICBpZiAoX2NvbXBvbmVudHMuYWRkKGNvbXBvbmVudCkpIHsKICAgICAgaWYgKF9saWJyYXJ5TWFwICE9IG51bGwpIHsKICAgICAgICBfYWRkTGlicmFyaWVzKGNvbXBvbmVudCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX2FkZExpYnJhcmllcyhpci5Db21wb25lbnQgY29tcG9uZW50KSB7CiAgICBmb3IgKGlyLkxpYnJhcnkgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgIF9saWJyYXJ5TWFwW2xpYnJhcnkuaW1wb3J0VXJpXSA9IG5ldyBLTGlicmFyeUVudihsaWJyYXJ5KTsKICAgIH0KICB9CgogIHZvaWQgX2Vuc3VyZUxpYnJhcnlNYXAoKSB7CiAgICBpZiAoX2xpYnJhcnlNYXAgPT0gbnVsbCkgewogICAgICBfbGlicmFyeU1hcCA9IDxVcmksIEtMaWJyYXJ5RW52Pnt9OwogICAgICBmb3IgKGlyLkNvbXBvbmVudCBjb21wb25lbnQgaW4gX2NvbXBvbmVudHMpIHsKICAgICAgICBfYWRkTGlicmFyaWVzKGNvbXBvbmVudCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm4gdGhlIFtLTGlicmFyeUVudl0gZm9yIHRoZSBsaWJyYXJ5IHdpdGggdGhlIGNhbm9uaWNhbCBbdXJpXS4KICBLTGlicmFyeUVudiBsb29rdXBMaWJyYXJ5KFVyaSB1cmkpIHsKICAgIF9lbnN1cmVMaWJyYXJ5TWFwKCk7CiAgICByZXR1cm4gX2xpYnJhcnlNYXBbdXJpXTsKICB9CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggbGlicmFyeSBpbiB0aGlzIGVudmlyb25tZW50LgogIHZvaWQgZm9yRWFjaExpYnJhcnkodm9pZCBmKEtMaWJyYXJ5RW52IGxpYnJhcnkpKSB7CiAgICBfZW5zdXJlTGlicmFyeU1hcCgpOwogICAgX2xpYnJhcnlNYXAudmFsdWVzLmZvckVhY2goZik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpYnJhcmllcyBpbiB0aGlzIGVudmlyb25tZW50LgogIGludCBnZXQgbGVuZ3RoIHsKICAgIF9lbnN1cmVMaWJyYXJ5TWFwKCk7CiAgICByZXR1cm4gX2xpYnJhcnlNYXAubGVuZ3RoOwogIH0KCiAgLy8vIENvbnZlcnQgdGhpcyBbS1Byb2dyYW1FbnZdIHRvIHRoZSBjb3JyZXNwb25kaW5nIFtKUHJvZ3JhbUVudl0uCiAgSlByb2dyYW1FbnYgY29udmVydCgpID0+IG5ldyBKUHJvZ3JhbUVudihfY29tcG9uZW50cyk7Cn0KCi8vLyBFbnZpcm9ubWVudCBmb3IgZmFzdCBsb29rdXAgb2YgbGlicmFyeSBjbGFzc2VzIGFuZCBtZW1iZXJzLgpjbGFzcyBLTGlicmFyeUVudiB7CiAgZmluYWwgaXIuTGlicmFyeSBsaWJyYXJ5OwoKICBNYXA8U3RyaW5nLCBLQ2xhc3NFbnY+IF9jbGFzc01hcDsKICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IF9tZW1iZXJNYXA7CiAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfc2V0dGVyTWFwOwoKICBLTGlicmFyeUVudih0aGlzLmxpYnJhcnkpOwoKICB2b2lkIF9lbnN1cmVDbGFzc01hcCgpIHsKICAgIGlmIChfY2xhc3NNYXAgPT0gbnVsbCkgewogICAgICBfY2xhc3NNYXAgPSA8U3RyaW5nLCBLQ2xhc3NFbnY+e307CiAgICAgIGZvciAoaXIuQ2xhc3MgY2xzIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIF9jbGFzc01hcFtjbHMubmFtZV0gPSBuZXcgS0NsYXNzRW52SW1wbChjbHMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBbS0NsYXNzRW52XSBmb3IgdGhlIGNsYXNzIFtuYW1lXSBpbiBbbGlicmFyeV0uCiAgS0NsYXNzRW52IGxvb2t1cENsYXNzKFN0cmluZyBuYW1lKSB7CiAgICBfZW5zdXJlQ2xhc3NNYXAoKTsKICAgIHJldHVybiBfY2xhc3NNYXBbbmFtZV07CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNsYXNzIGluIHRoaXMgbGlicmFyeS4KICB2b2lkIGZvckVhY2hDbGFzcyh2b2lkIGYoS0NsYXNzRW52IGNscykpIHsKICAgIF9lbnN1cmVDbGFzc01hcCgpOwogICAgX2NsYXNzTWFwLnZhbHVlcy5mb3JFYWNoKGYpOwogIH0KCiAgdm9pZCBfZW5zdXJlTWVtYmVyTWFwcygpIHsKICAgIGlmIChfbWVtYmVyTWFwID09IG51bGwpIHsKICAgICAgX21lbWJlck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgICAgX3NldHRlck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIGxpYnJhcnkubWVtYmVycykgewogICAgICAgIGlmIChtZW1iZXIubmFtZS5uYW1lLmNvbnRhaW5zKCcjJykpIHsKICAgICAgICAgIC8vIFNraXAgc3ludGhldGljIC5kaWxsIG1lbWJlcnMuCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKG1lbWJlciBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICAgIGlmIChtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLlNldHRlcikgewogICAgICAgICAgICBfc2V0dGVyTWFwW21lbWJlci5uYW1lLm5hbWVdID0gbWVtYmVyOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX21lbWJlck1hcFttZW1iZXIubmFtZS5uYW1lXSA9IG1lbWJlcjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBpci5GaWVsZCkgewogICAgICAgICAgX21lbWJlck1hcFttZW1iZXIubmFtZS5uYW1lXSA9IG1lbWJlcjsKICAgICAgICAgIGlmIChtZW1iZXIuaXNNdXRhYmxlKSB7CiAgICAgICAgICAgIF9zZXR0ZXJNYXBbbWVtYmVyLm5hbWUubmFtZV0gPSBtZW1iZXI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgbGlicmFyeSBtZW1iZXIgbm9kZTogJG1lbWJlciIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybiB0aGUgW2lyLk1lbWJlcl0gZm9yIHRoZSBtZW1iZXIgW25hbWVdIGluIFtsaWJyYXJ5XS4KICBpci5NZW1iZXIgbG9va3VwTWVtYmVyKFN0cmluZyBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgX2Vuc3VyZU1lbWJlck1hcHMoKTsKICAgIHJldHVybiBzZXR0ZXIgPyBfc2V0dGVyTWFwW25hbWVdIDogX21lbWJlck1hcFtuYW1lXTsKICB9CgogIHZvaWQgZm9yRWFjaE1lbWJlcih2b2lkIGYoaXIuTWVtYmVyIG1lbWJlcikpIHsKICAgIF9lbnN1cmVNZW1iZXJNYXBzKCk7CiAgICBfbWVtYmVyTWFwLnZhbHVlcy5mb3JFYWNoKGYpOwogICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIF9zZXR0ZXJNYXAudmFsdWVzKSB7CiAgICAgIGlmIChtZW1iZXIgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFNraXAgZmllbGRzOyB0aGVzZSBhcmUgYWxzbyBpbiBfbWVtYmVyTWFwLgogICAgICB9CiAgICB9CiAgfQoKICAvLy8gQ29udmVydCB0aGlzIFtLTGlicmFyeUVudl0gdG8gYSBjb3JyZXNwb25kaW5nIFtKTGlicmFyeUVudl0gY29udGFpbmluZwogIC8vLyBvbmx5IHRoZSBtZW1iZXJzIGluIFtsaXZlTWVtYmVyc10uCiAgSkxpYnJhcnlFbnYgY29udmVydChJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gbGl2ZU1lbWJlclVzYWdlKSB7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IG1lbWJlck1hcDsKICAgIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gc2V0dGVyTWFwOwogICAgaWYgKF9tZW1iZXJNYXAgPT0gbnVsbCkgewogICAgICBtZW1iZXJNYXAgPSBjb25zdCA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICB9IGVsc2UgewogICAgICBtZW1iZXJNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICAgIF9tZW1iZXJNYXAuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIGlyLk1lbWJlciBub2RlKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICAgIGlmIChsaXZlTWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKSkgewogICAgICAgICAgbWVtYmVyTWFwW25hbWVdID0gbm9kZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKF9zZXR0ZXJNYXAgPT0gbnVsbCkgewogICAgICBzZXR0ZXJNYXAgPSBjb25zdCA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICB9IGVsc2UgewogICAgICBzZXR0ZXJNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICAgIF9zZXR0ZXJNYXAuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIGlyLk1lbWJlciBub2RlKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICAgIGlmIChsaXZlTWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKSkgewogICAgICAgICAgc2V0dGVyTWFwW25hbWVdID0gbm9kZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIG5ldyBKTGlicmFyeUVudihsaWJyYXJ5LCBtZW1iZXJNYXAsIHNldHRlck1hcCk7CiAgfQp9CgpjbGFzcyBLTGlicmFyeURhdGEgewogIGZpbmFsIGlyLkxpYnJhcnkgbGlicmFyeTsKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBfbWV0YWRhdGE7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgZGlyZWN0IGFjY2VzcyB0byBbaW1wb3J0c10uCiAgTWFwPGlyLkxpYnJhcnlEZXBlbmRlbmN5LCBJbXBvcnRFbnRpdHk+IGltcG9ydHM7CgogIEtMaWJyYXJ5RGF0YSh0aGlzLmxpYnJhcnkpOwoKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRNZXRhZGF0YShLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBfbWV0YWRhdGEgPz89IGVsZW1lbnRNYXAuZ2V0TWV0YWRhdGEobGlicmFyeS5hbm5vdGF0aW9ucyk7CiAgfQoKICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IGdldEltcG9ydHMoS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7CiAgICAgIExpc3Q8aXIuTGlicmFyeURlcGVuZGVuY3k+IGRlcGVuZGVuY2llcyA9IGxpYnJhcnkuZGVwZW5kZW5jaWVzOwogICAgICBpZiAoZGVwZW5kZW5jaWVzLmlzRW1wdHkpIHsKICAgICAgICBpbXBvcnRzID0gY29uc3QgPGlyLkxpYnJhcnlEZXBlbmRlbmN5LCBJbXBvcnRFbnRpdHk+e307CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW1wb3J0cyA9IDxpci5MaWJyYXJ5RGVwZW5kZW5jeSwgSW1wb3J0RW50aXR5Pnt9OwogICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKChpci5MaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICAgICAgICBpZiAobm9kZS5pc0V4cG9ydCkgcmV0dXJuOwogICAgICAgICAgaW1wb3J0c1tub2RlXSA9IG5ldyBJbXBvcnRFbnRpdHkoCiAgICAgICAgICAgICAgbm9kZS5pc0RlZmVycmVkLAogICAgICAgICAgICAgIG5vZGUubmFtZSwKICAgICAgICAgICAgICBub2RlLnRhcmdldExpYnJhcnkuaW1wb3J0VXJpLAogICAgICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0TGlicmFyeShub2RlLmVuY2xvc2luZ0xpYnJhcnkpLmNhbm9uaWNhbFVyaSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbXBvcnRzLnZhbHVlczsKICB9CgogIC8vLyBDb252ZXJ0IHRoaXMgW0tMaWJyYXJ5RGF0YV0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgW0pMaWJyYXJ5RGF0YV0uCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogV2h5IGlzbid0IFtpbXBvcnRzXSBlbnN1cmVkIHRvIGJlIG5vbi1udWxsIGhlcmU/CiAgSkxpYnJhcnlEYXRhIGNvbnZlcnQoKSB7CiAgICByZXR1cm4gbmV3IEpMaWJyYXJ5RGF0YShsaWJyYXJ5LCBpbXBvcnRzKTsKICB9Cn0KCi8vLyBNZW1iZXIgZGF0YSBmb3IgYSBjbGFzcy4KYWJzdHJhY3QgY2xhc3MgS0NsYXNzRW52IHsKICAvLy8gVGhlIFtpci5DbGFzc10gdGhhdCBkZWZpbmVkIHRoZSBjbGFzcywgaWYgYW55LgogIGlyLkNsYXNzIGdldCBjbHM7CgogIC8vLyBXaGV0aGVyIHRoZSBjbGFzcyBpcyBhbiB1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uLgogIGJvb2wgZ2V0IGlzVW5uYW1lZE1peGluQXBwbGljYXRpb247CgogIC8vLyBXaGV0aGVyIHRoZSBjbGFzcyBpcyBhIG1peGluIGFwcGxpY2F0aW9uIHRoYXQgbWl4ZXMgaW4gbWV0aG9kcyB3aXRoIHN1cGVyCiAgLy8vIGNhbGxzLgogIGJvb2wgZ2V0IGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uOwoKICAvLy8gRW5zdXJlcyB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgYmVlbiBjb21wdXRlZCBmb3IgW2Nsc10uCiAgdm9pZCBlbnN1cmVNZW1iZXJzKEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCk7CgogIC8vLyBSZXR1cm4gdGhlIFtNZW1iZXJFbnRpdHldIGZvciB0aGUgbWVtYmVyIFtuYW1lXSBpbiB0aGUgY2xhc3MuIElmIFtzZXR0ZXJdCiAgLy8vIGlzIGB0cnVlYCwgdGhlIHNldHRlciBvciBhc3NpZ25hYmxlIGZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gW25hbWVdIGlzCiAgLy8vIHJldHVybmVkLgogIE1lbWJlckVudGl0eSBsb29rdXBNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBtZW1iZXIgb2YgW2Nsc10uCiAgdm9pZCBmb3JFYWNoTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSk7CgogIC8vLyBSZXR1cm4gdGhlIFtDb25zdHJ1Y3RvckVudGl0eV0gZm9yIHRoZSBjb25zdHJ1Y3RvciBbbmFtZV0gaW4gW2Nsc10uCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNvbnN0cnVjdG9yIG9mIFtjbHNdLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjb25zdHJ1Y3RvciBib2R5IGZvciB0aGUgbGl2ZSBjb25zdHJ1Y3RvcnMgaW4gdGhlCiAgLy8vIGNsYXNzLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yQm9keSh2b2lkIGYoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yKSk7CgogIC8vLyBDb252ZXJ0IHRoaXMgW0tDbGFzc0Vudl0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgW0pDbGFzc0Vudl0gY29udGFpbmluZyBvbmx5CiAgLy8vIHRoZSBtZW1iZXJzIGluIFtsaXZlTWVtYmVyc10uCiAgSkNsYXNzRW52IGNvbnZlcnQoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+IGxpdmVNZW1iZXJVc2FnZSk7Cn0KCmludCBvcmRlckJ5RmlsZU9mZnNldChpci5UcmVlTm9kZSBhLCBpci5UcmVlTm9kZSBiKSB7CiAgdmFyIGFMb2MgPSBhLmxvY2F0aW9uOwogIHZhciBiTG9jID0gYi5sb2NhdGlvbjsKICB2YXIgYVVyaSA9ICcke2FMb2MuZmlsZX0nOwogIHZhciBiVXJpID0gJyR7YkxvYy5maWxlfSc7CiAgdmFyIHVyaUNvbXBhcmUgPSBhVXJpLmNvbXBhcmVUbyhiVXJpKTsKICBpZiAodXJpQ29tcGFyZSAhPSAwKSByZXR1cm4gdXJpQ29tcGFyZTsKICByZXR1cm4gYS5maWxlT2Zmc2V0LmNvbXBhcmVUbyhiLmZpbGVPZmZzZXQpOwp9CgovLy8gRW52aXJvbm1lbnQgZm9yIGZhc3QgbG9va3VwIG9mIGNsYXNzIG1lbWJlcnMuCmNsYXNzIEtDbGFzc0VudkltcGwgaW1wbGVtZW50cyBLQ2xhc3NFbnYgewogIEBvdmVycmlkZQogIGZpbmFsIGlyLkNsYXNzIGNsczsKCiAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfY29uc3RydWN0b3JNYXA7CiAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfbWVtYmVyTWFwOwogIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX3NldHRlck1hcDsKICBMaXN0PGlyLk1lbWJlcj4gX21lbWJlcnM7IC8vIGluIGRlY2xhcmF0aW9uIG9yZGVyLgogIGJvb2wgX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uOwoKICAvLy8gQ29uc3RydWN0b3IgYm9kaWVzIGNyZWF0ZWQgZm9yIHRoaXMgY2xhc3MuCiAgTGlzdDxDb25zdHJ1Y3RvckJvZHlFbnRpdHk+IF9jb25zdHJ1Y3RvckJvZHlMaXN0OwoKICBLQ2xhc3NFbnZJbXBsKHRoaXMuY2xzKTsKCiAgS0NsYXNzRW52SW1wbC5pbnRlcm5hbCh0aGlzLmNscywgdGhpcy5fY29uc3RydWN0b3JNYXAsIHRoaXMuX21lbWJlck1hcCwKICAgICAgdGhpcy5fc2V0dGVyTWFwLCB0aGlzLl9tZW1iZXJzLCB0aGlzLl9pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbik7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVW5uYW1lZE1peGluQXBwbGljYXRpb24gPT4gY2xzLmlzQW5vbnltb3VzTWl4aW47CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uIHsKICAgIGFzc2VydChfaXNTdXBlck1peGluQXBwbGljYXRpb24gIT0gbnVsbCk7CiAgICByZXR1cm4gX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uOwogIH0KCiAgLy8vIENvcGllZCBmcm9tICdwYWNrYWdlOmtlcm5lbC90cmFuc2Zvcm1hdGlvbnMvbWl4aW5fZnVsbF9yZXNvbHV0aW9uLmRhcnQnLgogIGlyLkNvbnN0cnVjdG9yIF9idWlsZEZvcndhcmRpbmdDb25zdHJ1Y3RvcigKICAgICAgQ2xvbmVWaXNpdG9yIGNsb25lciwgaXIuQ29uc3RydWN0b3Igc3VwZXJjbGFzc0NvbnN0cnVjdG9yKSB7CiAgICB2YXIgc3VwZXJGdW5jdGlvbiA9IHN1cGVyY2xhc3NDb25zdHJ1Y3Rvci5mdW5jdGlvbjsKCiAgICAvLyBXZSBrZWVwIHR5cGVzIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgYnV0IGFsd2F5cyBtYXJrIHRoZQogICAgLy8gcGFyYW1ldGVycyBhcyBmaW5hbCAoc2luY2Ugd2UganVzdCBmb3J3YXJkIHRoZW0gdG8gdGhlIHN1cGVyCiAgICAvLyBjb25zdHJ1Y3RvcikuCiAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIGNsb25lVmFyaWFibGUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIGNsb25lID0gY2xvbmVyLmNsb25lKHZhcmlhYmxlKTsKICAgICAgY2xvbmUuaXNGaW5hbCA9IHRydWU7CiAgICAgIHJldHVybiBjbG9uZTsKICAgIH0KCiAgICAvLyBCdWlsZCBhIFtGdW5jdGlvbk5vZGVdIHdoaWNoIGhhcyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBvbmUgaW4gdGhlCiAgICAvLyBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yLgogICAgdmFyIHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0KICAgICAgICBzdXBlckZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLm1hcChjbG9uZVZhcmlhYmxlKS50b0xpc3QoKTsKICAgIHZhciBuYW1lZFBhcmFtZXRlcnMgPQogICAgICAgIHN1cGVyRnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLm1hcChjbG9uZVZhcmlhYmxlKS50b0xpc3QoKTsKICAgIHZhciBmdW5jdGlvbiA9IG5ldyBpci5GdW5jdGlvbk5vZGUobmV3IGlyLkVtcHR5U3RhdGVtZW50KCksCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHN1cGVyRnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICByZXR1cm5UeXBlOiBjb25zdCBpci5Wb2lkVHlwZSgpKTsKCiAgICAvLyBCdWlsZCBhIFtTdXBlckluaXRpYWxpemVyXSB3aGljaCB0YWtlcyBhbGwgcG9zaXRpb25hbC9uYW1lZCBwYXJhbWV0ZXJzCiAgICAvLyBhbmQgZm9yd2FyZCB0aGVtIHRvIHRoZSBzdXBlciBjbGFzcyBjb25zdHJ1Y3Rvci4KICAgIHZhciBwb3NpdGlvbmFsQXJndW1lbnRzID0gPGlyLkV4cHJlc3Npb24+W107CiAgICBmb3IgKHZhciB2YXJpYWJsZSBpbiBwb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBwb3NpdGlvbmFsQXJndW1lbnRzLmFkZChuZXcgaXIuVmFyaWFibGVHZXQodmFyaWFibGUpKTsKICAgIH0KICAgIHZhciBuYW1lZEFyZ3VtZW50cyA9IDxpci5OYW1lZEV4cHJlc3Npb24+W107CiAgICBmb3IgKHZhciB2YXJpYWJsZSBpbiBuYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgbmFtZWRBcmd1bWVudHMuYWRkKAogICAgICAgICAgbmV3IGlyLk5hbWVkRXhwcmVzc2lvbih2YXJpYWJsZS5uYW1lLCBuZXcgaXIuVmFyaWFibGVHZXQodmFyaWFibGUpKSk7CiAgICB9CiAgICB2YXIgc3VwZXJJbml0aWFsaXplciA9IG5ldyBpci5TdXBlckluaXRpYWxpemVyKHN1cGVyY2xhc3NDb25zdHJ1Y3RvciwKICAgICAgICBuZXcgaXIuQXJndW1lbnRzKHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkOiBuYW1lZEFyZ3VtZW50cykpOwoKICAgIC8vIEFzc2VtYmxlIHRoZSBjb25zdHJ1Y3Rvci4KICAgIHJldHVybiBuZXcgaXIuQ29uc3RydWN0b3IoZnVuY3Rpb24sCiAgICAgICAgbmFtZTogc3VwZXJjbGFzc0NvbnN0cnVjdG9yLm5hbWUsCiAgICAgICAgaW5pdGlhbGl6ZXJzOiA8aXIuSW5pdGlhbGl6ZXI+W3N1cGVySW5pdGlhbGl6ZXJdKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5zdXJlTWVtYmVycyhLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIF9lbnN1cmVNYXBzKGVsZW1lbnRNYXApOwogIH0KCiAgdm9pZCBfZW5zdXJlTWFwcyhLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIGlmIChfbWVtYmVyTWFwICE9IG51bGwpIHJldHVybjsKCiAgICBfbWVtYmVyTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgX3NldHRlck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgIF9jb25zdHJ1Y3Rvck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgIHZhciBtZW1iZXJzID0gPGlyLk1lbWJlcj5bXTsKICAgIF9pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiA9IGZhbHNlOwoKICAgIHZvaWQgYWRkRmllbGQoaXIuRmllbGQgbWVtYmVyLCB7Ym9vbCBpbmNsdWRlU3RhdGljfSkgewogICAgICBpZiAoIWluY2x1ZGVTdGF0aWMgJiYgbWVtYmVyLmlzU3RhdGljKSByZXR1cm47CiAgICAgIHZhciBuYW1lID0gbWVtYmVyLm5hbWUubmFtZTsKICAgICAgaWYgKG5hbWUuY29udGFpbnMoJyMnKSkgewogICAgICAgIC8vIFNraXAgc3ludGhldGljIC5kaWxsIG1lbWJlcnMuCiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9tZW1iZXJNYXBbbmFtZV0gPSBtZW1iZXI7CiAgICAgIGlmIChtZW1iZXIuaXNNdXRhYmxlKSB7CiAgICAgICAgX3NldHRlck1hcFtuYW1lXSA9IG1lbWJlcjsKICAgICAgfQogICAgICBtZW1iZXJzLmFkZChtZW1iZXIpOwogICAgfQoKICAgIHZvaWQgYWRkUHJvY2VkdXJlKGlyLlByb2NlZHVyZSBtZW1iZXIsCiAgICAgICAge2Jvb2wgaW5jbHVkZVN0YXRpYywgYm9vbCBpbmNsdWRlTm9TdWNoTWV0aG9kRm9yd2FyZGVyc30pIHsKICAgICAgaWYgKG1lbWJlci5pc0ZvcndhcmRpbmdTdHViICYmIG1lbWJlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgLy8gU2tpcCBhYnN0cmFjdCBmb3J3YXJkaW5nIHN0dWJzLiBUaGVzZSBhcmUgbmV2ZXIgZW1pdHRlZCBidXQgdGhleQogICAgICAgIC8vIG1pZ2h0IHNoYWRvdyB0aGUgaW5jbHVzaW9uIG9mIGEgbWl4ZWQgaW4gbWV0aG9kIGluIGNvZGUgbGlrZToKICAgICAgICAvLwogICAgICAgIC8vICAgICBjbGFzcyBTdXBlciB7fQogICAgICAgIC8vICAgICBjbGFzcyBNaXhpbjxUPiB7CiAgICAgICAgLy8gICAgICAgdm9pZCBtZXRob2QoVCB0KSB7fQogICAgICAgIC8vICAgICB9CiAgICAgICAgLy8gICAgIGNsYXNzIENsYXNzIGV4dGVuZHMgU3VwZXIgd2l0aCBNaXhpbjxpbnQ+IHt9CiAgICAgICAgLy8gICAgIG1haW4oKSA9PiBuZXcgQ2xhc3MoKS5tZXRob2QoKTsKICAgICAgICAvLwogICAgICAgIC8vIEhlcmUgYSBzdHViIGlzIGNyZWF0ZWQgZm9yIGBTdXBlciZNaXhpbi5tZXRob2RgIGhpZGluZyB0aGF0CiAgICAgICAgLy8gYE1peGluLm1ldGhvZGAgaXMgaW5oZXJpdGVkIGJ5IGBDbGFzc2AuCiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChtZW1iZXIuaXNGb3J3YXJkaW5nU3R1YiAmJiBjbHMuaXNBbm9ueW1vdXNNaXhpbikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoIWluY2x1ZGVTdGF0aWMgJiYgbWVtYmVyLmlzU3RhdGljKSByZXR1cm47CiAgICAgIGlmIChtZW1iZXIuaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXIpIHsKICAgICAgICAvLyBUT0RPKHNpZ211bmQpOiByZW1vdmUgb25jZSAjMzM3MzIgaXMgZml4ZWQuCiAgICAgICAgaWYgKCFpbmNsdWRlTm9TdWNoTWV0aG9kRm9yd2FyZGVycyB8fAogICAgICAgICAgICBtZW1iZXIubmFtZS5pc1ByaXZhdGUgJiYKICAgICAgICAgICAgICAgIG1lbWJlci5uYW1lLmxpYnJhcnlOYW1lICE9IG1lbWJlci5lbmNsb3NpbmdMaWJyYXJ5LnJlZmVyZW5jZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgbmFtZSA9IG1lbWJlci5uYW1lLm5hbWU7CiAgICAgIGFzc2VydCghbmFtZS5jb250YWlucygnIycpKTsKICAgICAgaWYgKG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkgewogICAgICAgIGlmIChpc1JlZGlyZWN0aW5nRmFjdG9yeShtZW1iZXIpKSB7CiAgICAgICAgICAvLyBEb24ndCBpbmNsdWRlIHJlZGlyZWN0aW5nIGZhY3Rvcmllcy4KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX2NvbnN0cnVjdG9yTWFwW25hbWVdID0gbWVtYmVyOwogICAgICB9IGVsc2UgaWYgKG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuU2V0dGVyKSB7CiAgICAgICAgX3NldHRlck1hcFtuYW1lXSA9IG1lbWJlcjsKICAgICAgICBtZW1iZXJzLmFkZChtZW1iZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk1ldGhvZCB8fAogICAgICAgICAgICBtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkdldHRlciB8fAogICAgICAgICAgICBtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk9wZXJhdG9yKTsKICAgICAgICBfbWVtYmVyTWFwW25hbWVdID0gbWVtYmVyOwogICAgICAgIG1lbWJlcnMuYWRkKG1lbWJlcik7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFkZENvbnN0cnVjdG9ycyhpci5DbGFzcyBjKSB7CiAgICAgIGZvciAoaXIuQ29uc3RydWN0b3IgbWVtYmVyIGluIGMuY29uc3RydWN0b3JzKSB7CiAgICAgICAgdmFyIG5hbWUgPSBtZW1iZXIubmFtZS5uYW1lOwogICAgICAgIGFzc2VydCghbmFtZS5jb250YWlucygnIycpKTsKICAgICAgICBfY29uc3RydWN0b3JNYXBbbmFtZV0gPSBtZW1iZXI7CiAgICAgIH0KICAgIH0KCiAgICBpbnQgbWl4aW5NZW1iZXJDb3VudCA9IDA7CgogICAgaWYgKGNscy5taXhlZEluQ2xhc3MgIT0gbnVsbCkgewogICAgICBDbG9uZVZpc2l0b3IgY2xvbmVWaXNpdG9yOwogICAgICBmb3IgKGlyLkZpZWxkIGZpZWxkIGluIGNscy5taXhlZEluQ2xhc3MubWl4aW4uZmllbGRzKSB7CiAgICAgICAgaWYgKGZpZWxkLmNvbnRhaW5zU3VwZXJDYWxscykgewogICAgICAgICAgX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID0gdHJ1ZTsKICAgICAgICAgIGNsb25lVmlzaXRvciA/Pz0gbmV3IENsb25lVmlzaXRvcigKICAgICAgICAgICAgICB0eXBlU3Vic3RpdHV0aW9uOiBnZXRTdWJzdGl0dXRpb25NYXAoY2xzLm1peGVkSW5UeXBlKSk7CiAgICAgICAgICBjbHMuYWRkTWVtYmVyKGNsb25lVmlzaXRvci5jbG9uZShmaWVsZCkpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGFkZEZpZWxkKGZpZWxkLCBpbmNsdWRlU3RhdGljOiBmYWxzZSk7CiAgICAgIH0KICAgICAgZm9yIChpci5Qcm9jZWR1cmUgcHJvY2VkdXJlIGluIGNscy5taXhlZEluQ2xhc3MubWl4aW4ucHJvY2VkdXJlcykgewogICAgICAgIGlmIChwcm9jZWR1cmUuY29udGFpbnNTdXBlckNhbGxzKSB7CiAgICAgICAgICBfaXNTdXBlck1peGluQXBwbGljYXRpb24gPSB0cnVlOwogICAgICAgICAgY2xvbmVWaXNpdG9yID8/PSBuZXcgQ2xvbmVWaXNpdG9yKAogICAgICAgICAgICAgIHR5cGVTdWJzdGl0dXRpb246IGdldFN1YnN0aXR1dGlvbk1hcChjbHMubWl4ZWRJblR5cGUpKTsKICAgICAgICAgIGNscy5hZGRNZW1iZXIoY2xvbmVWaXNpdG9yLmNsb25lKHByb2NlZHVyZSkpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGFkZFByb2NlZHVyZShwcm9jZWR1cmUsCiAgICAgICAgICAgIGluY2x1ZGVTdGF0aWM6IGZhbHNlLCBpbmNsdWRlTm9TdWNoTWV0aG9kRm9yd2FyZGVyczogZmFsc2UpOwogICAgICB9CiAgICAgIG1lcmdlU29ydChtZW1iZXJzLCBjb21wYXJlOiBvcmRlckJ5RmlsZU9mZnNldCk7CiAgICAgIG1peGluTWVtYmVyQ291bnQgPSBtZW1iZXJzLmxlbmd0aDsKICAgIH0KCiAgICBmb3IgKGlyLkZpZWxkIG1lbWJlciBpbiBjbHMuZmllbGRzKSB7CiAgICAgIGFkZEZpZWxkKG1lbWJlciwgaW5jbHVkZVN0YXRpYzogdHJ1ZSk7CiAgICB9CiAgICBhZGRDb25zdHJ1Y3RvcnMoY2xzKTsKICAgIGZvciAoaXIuUHJvY2VkdXJlIG1lbWJlciBpbiBjbHMucHJvY2VkdXJlcykgewogICAgICBhZGRQcm9jZWR1cmUobWVtYmVyLAogICAgICAgICAgaW5jbHVkZVN0YXRpYzogdHJ1ZSwgaW5jbHVkZU5vU3VjaE1ldGhvZEZvcndhcmRlcnM6IHRydWUpOwogICAgfQoKICAgIGlmIChpc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uICYmIF9jb25zdHJ1Y3Rvck1hcC5pc0VtcHR5KSB7CiAgICAgIC8vIEVuc3VyZSB0aGF0IGNvbnN0cnVjdG9ycyBhcmUgY3JlYXRlZCBmb3IgdGhlIHN1cGVyY2xhc3MgaW4gY2FzZSBpdAogICAgICAvLyBpcyBhbHNvIGFuIHVubmFtZWQgbWl4aW4gYXBwbGljYXRpb24uCiAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBlbGVtZW50TWFwLmdldENsYXNzKGNscy5zdXBlcmNsYXNzKTsKICAgICAgZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQubG9va3VwQ29uc3RydWN0b3Ioc3VwZXJjbGFzcywgJycpOwoKICAgICAgLy8gVW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbnMgaGF2ZSBubyBjb25zdHJ1Y3RvcnMgd2hlbiByZWFkIGZyb20gLmRpbGwuCiAgICAgIC8vIEZvciBlYWNoIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgaW4gdGhlIHN1cGVyY2xhc3Mgd2UgbWFrZSBhCiAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZm9yd2FyZGluZyBjb25zdHJ1Y3RvciBpbiB0aGUgc3ViY2xhc3MuCiAgICAgIC8vCiAgICAgIC8vIFRoaXMgY29kZSBpcyBjb3BpZWQgZnJvbQogICAgICAvLyAncGFja2FnZTprZXJuZWwvdHJhbnNmb3JtYXRpb25zL21peGluX2Z1bGxfcmVzb2x1dGlvbi5kYXJ0JwogICAgICB2YXIgc3VwZXJjbGFzc1N1YnN0aXR1dGlvbiA9IGdldFN1YnN0aXR1dGlvbk1hcChjbHMuc3VwZXJ0eXBlKTsKICAgICAgdmFyIHN1cGVyY2xhc3NDbG9uZXIgPQogICAgICAgICAgbmV3IENsb25lVmlzaXRvcih0eXBlU3Vic3RpdHV0aW9uOiBzdXBlcmNsYXNzU3Vic3RpdHV0aW9uKTsKCiAgICAgIGZvciAodmFyIHN1cGVyY2xhc3NDb25zdHJ1Y3RvciBpbiBjbHMuc3VwZXJjbGFzcy5jb25zdHJ1Y3RvcnMpIHsKICAgICAgICB2YXIgZm9yd2FyZGluZ0NvbnN0cnVjdG9yID0gX2J1aWxkRm9yd2FyZGluZ0NvbnN0cnVjdG9yKAogICAgICAgICAgICBzdXBlcmNsYXNzQ2xvbmVyLCBzdXBlcmNsYXNzQ29uc3RydWN0b3IpOwogICAgICAgIGNscy5hZGRNZW1iZXIoZm9yd2FyZGluZ0NvbnN0cnVjdG9yKTsKICAgICAgICBfY29uc3RydWN0b3JNYXBbZm9yd2FyZGluZ0NvbnN0cnVjdG9yLm5hbWUubmFtZV0gPQogICAgICAgICAgICBmb3J3YXJkaW5nQ29uc3RydWN0b3I7CiAgICAgIH0KICAgIH0KCiAgICBtZXJnZVNvcnQobWVtYmVycywgc3RhcnQ6IG1peGluTWVtYmVyQ291bnQsIGNvbXBhcmU6IG9yZGVyQnlGaWxlT2Zmc2V0KTsKICAgIF9tZW1iZXJzID0gbWVtYmVyczsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb29rdXBNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICBfZW5zdXJlTWFwcyhlbGVtZW50TWFwKTsKICAgIGlyLk1lbWJlciBtZW1iZXIgPSBzZXR0ZXIgPyBfc2V0dGVyTWFwW25hbWVdIDogX21lbWJlck1hcFtuYW1lXTsKICAgIHJldHVybiBtZW1iZXIgIT0gbnVsbCA/IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG1lbWJlcikgOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgX2Vuc3VyZU1hcHMoZWxlbWVudE1hcCk7CiAgICBfbWVtYmVycy5mb3JFYWNoKChpci5NZW1iZXIgbWVtYmVyKSB7CiAgICAgIGYoZWxlbWVudE1hcC5nZXRNZW1iZXIobWVtYmVyKSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIFN0cmluZyBuYW1lKSB7CiAgICBfZW5zdXJlTWFwcyhlbGVtZW50TWFwKTsKICAgIGlyLk1lbWJlciBjb25zdHJ1Y3RvciA9IF9jb25zdHJ1Y3Rvck1hcFtuYW1lXTsKICAgIHJldHVybiBjb25zdHJ1Y3RvciAhPSBudWxsID8gZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikgOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3IoCiAgICAgIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikpIHsKICAgIF9lbnN1cmVNYXBzKGVsZW1lbnRNYXApOwogICAgX2NvbnN0cnVjdG9yTWFwLnZhbHVlcy5mb3JFYWNoKChpci5NZW1iZXIgY29uc3RydWN0b3IpIHsKICAgICAgZihlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSk7CiAgICB9KTsKICB9CgogIHZvaWQgYWRkQ29uc3RydWN0b3JCb2R5KENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvckJvZHkpIHsKICAgIF9jb25zdHJ1Y3RvckJvZHlMaXN0ID8/PSA8Q29uc3RydWN0b3JCb2R5RW50aXR5PltdOwogICAgX2NvbnN0cnVjdG9yQm9keUxpc3QuYWRkKGNvbnN0cnVjdG9yQm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvckJvZHkodm9pZCBmKENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvcikpIHsKICAgIF9jb25zdHJ1Y3RvckJvZHlMaXN0Py5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgSkNsYXNzRW52IGNvbnZlcnQoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+IGxpdmVNZW1iZXJVc2FnZSkgewogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBjb25zdHJ1Y3Rvck1hcDsKICAgIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gbWVtYmVyTWFwOwogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBzZXR0ZXJNYXA7CiAgICBMaXN0PGlyLk1lbWJlcj4gbWVtYmVyczsKICAgIGlmIChfY29uc3RydWN0b3JNYXAgPT0gbnVsbCkgewogICAgICBjb25zdHJ1Y3Rvck1hcCA9IGNvbnN0IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0cnVjdG9yTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgICBfY29uc3RydWN0b3JNYXAuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIGlyLk1lbWJlciBub2RlKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICAgIGlmIChsaXZlTWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKSkgewogICAgICAgICAgY29uc3RydWN0b3JNYXBbbmFtZV0gPSBub2RlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBpZiAoX21lbWJlck1hcCA9PSBudWxsKSB7CiAgICAgIG1lbWJlck1hcCA9IGNvbnN0IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgIH0gZWxzZSB7CiAgICAgIG1lbWJlck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgICAgX21lbWJlck1hcC5mb3JFYWNoKChTdHJpbmcgbmFtZSwgaXIuTWVtYmVyIG5vZGUpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgICAgaWYgKGxpdmVNZW1iZXJVc2FnZS5jb250YWluc0tleShtZW1iZXIpKSB7CiAgICAgICAgICBtZW1iZXJNYXBbbmFtZV0gPSBub2RlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBpZiAoX3NldHRlck1hcCA9PSBudWxsKSB7CiAgICAgIHNldHRlck1hcCA9IGNvbnN0IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgIH0gZWxzZSB7CiAgICAgIHNldHRlck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgICAgX3NldHRlck1hcC5mb3JFYWNoKChTdHJpbmcgbmFtZSwgaXIuTWVtYmVyIG5vZGUpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgICAgaWYgKGxpdmVNZW1iZXJVc2FnZS5jb250YWluc0tleShtZW1iZXIpKSB7CiAgICAgICAgICBzZXR0ZXJNYXBbbmFtZV0gPSBub2RlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBpZiAoX21lbWJlcnMgPT0gbnVsbCkgewogICAgICBtZW1iZXJzID0gY29uc3QgPGlyLk1lbWJlcj5bXTsKICAgIH0gZWxzZSB7CiAgICAgIG1lbWJlcnMgPSA8aXIuTWVtYmVyPltdOwogICAgICBfbWVtYmVycy5mb3JFYWNoKChpci5NZW1iZXIgbm9kZSkgewogICAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgICBpZiAobGl2ZU1lbWJlclVzYWdlLmNvbnRhaW5zS2V5KG1lbWJlcikpIHsKICAgICAgICAgIG1lbWJlcnMuYWRkKG5vZGUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEpDbGFzc0VudkltcGwoY2xzLCBjb25zdHJ1Y3Rvck1hcCwgbWVtYmVyTWFwLCBzZXR0ZXJNYXAsIG1lbWJlcnMsCiAgICAgICAgX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID8/IGZhbHNlKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEtDbGFzc0RhdGEgewogIGlyLkNsYXNzIGdldCBub2RlOwoKICBJbnRlcmZhY2VUeXBlIGdldCB0aGlzVHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCByYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHN1cGVydHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBtaXhlZEluVHlwZTsKICBMaXN0PEludGVyZmFjZVR5cGU+IGdldCBpbnRlcmZhY2VzOwogIE9yZGVyZWRUeXBlU2V0IGdldCBvcmRlcmVkVHlwZVNldDsKICBEYXJ0VHlwZSBnZXQgY2FsbFR5cGU7CgogIGJvb2wgZ2V0IGlzRW51bUNsYXNzOwogIGJvb2wgZ2V0IGlzTWl4aW5BcHBsaWNhdGlvbjsKCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TWV0YWRhdGEoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIC8vLyBDb252ZXJ0IHRoaXMgW0tDbGFzc0RhdGFdIHRvIHRoZSBjb3JyZXNwb25kaW5nIFtKQ2xhc3NEYXRhXS4KICBKQ2xhc3NEYXRhIGNvbnZlcnQoKTsKfQoKY2xhc3MgS0NsYXNzRGF0YUltcGwgaW1wbGVtZW50cyBLQ2xhc3NEYXRhIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5DbGFzcyBub2RlOwogIEBvdmVycmlkZQogIGJvb2wgaXNNaXhpbkFwcGxpY2F0aW9uOwogIGJvb2wgaXNDYWxsVHlwZUNvbXB1dGVkID0gZmFsc2U7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgdGhpc1R5cGU7CiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSByYXdUeXBlOwogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlOwogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgbWl4ZWRJblR5cGU7CiAgQG92ZXJyaWRlCiAgTGlzdDxJbnRlcmZhY2VUeXBlPiBpbnRlcmZhY2VzOwogIEBvdmVycmlkZQogIE9yZGVyZWRUeXBlU2V0IG9yZGVyZWRUeXBlU2V0OwoKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBfbWV0YWRhdGE7CgogIEtDbGFzc0RhdGFJbXBsKHRoaXMubm9kZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW51bUNsYXNzID0+IG5vZGUuaXNFbnVtOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXQgY2FsbFR5cGUgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TWV0YWRhdGEoCiAgICAgIGNvdmFyaWFudCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBfbWV0YWRhdGEgPz89IGVsZW1lbnRNYXAuZ2V0TWV0YWRhdGEobm9kZS5hbm5vdGF0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBKQ2xhc3NEYXRhIGNvbnZlcnQoKSB7CiAgICByZXR1cm4gbmV3IEpDbGFzc0RhdGFJbXBsKG5vZGUsIG5ldyBSZWd1bGFyQ2xhc3NEZWZpbml0aW9uKG5vZGUpKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEtNZW1iZXJEYXRhIHsKICBpci5NZW1iZXIgZ2V0IG5vZGU7CgogIFN0YXRpY1R5cGVDYWNoZSBzdGF0aWNUeXBlczsKCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TWV0YWRhdGEoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzczsKCiAgLy8vIENvbnZlcnQgdGhpcyBbS01lbWJlckRhdGFdIHRvIHRoZSBjb3JyZXNwb25kaW5nIFtKTWVtYmVyRGF0YV0uCiAgSk1lbWJlckRhdGEgY29udmVydCgpOwp9CgphYnN0cmFjdCBjbGFzcyBLTWVtYmVyRGF0YUltcGwgaW1wbGVtZW50cyBLTWVtYmVyRGF0YSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuTWVtYmVyIG5vZGU7CgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IF9tZXRhZGF0YTsKCiAgQG92ZXJyaWRlCiAgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzOwoKICBLTWVtYmVyRGF0YUltcGwodGhpcy5ub2RlKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TWV0YWRhdGEoCiAgICAgIGNvdmFyaWFudCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBfbWV0YWRhdGEgPz89IGVsZW1lbnRNYXAuZ2V0TWV0YWRhdGEobm9kZS5hbm5vdGF0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldE1lbWJlclRoaXNUeXBlKEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgIGlmIChjbHMgIT0gbnVsbCkgewogICAgICByZXR1cm4gZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgS0Z1bmN0aW9uRGF0YSBpbXBsZW1lbnRzIEtNZW1iZXJEYXRhIHsKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgdm9pZCBmb3JFYWNoUGFyYW1ldGVyKEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIHZvaWQgZihEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpKTsKfQoKYWJzdHJhY3QgY2xhc3MgS0Z1bmN0aW9uRGF0YU1peGluIGltcGxlbWVudHMgS0Z1bmN0aW9uRGF0YSB7CiAgaXIuRnVuY3Rpb25Ob2RlIGdldCBmdW5jdGlvbk5vZGU7CiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBfdHlwZVZhcmlhYmxlczsKCiAgQG92ZXJyaWRlCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoCiAgICAgIGNvdmFyaWFudCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIGlmIChfdHlwZVZhcmlhYmxlcyA9PSBudWxsKSB7CiAgICAgIGlmIChmdW5jdGlvbk5vZGUudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAgIF90eXBlVmFyaWFibGVzID0gY29uc3QgPFR5cGVWYXJpYWJsZVR5cGU+W107CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaXIuVHJlZU5vZGUgcGFyZW50ID0gZnVuY3Rpb25Ob2RlLnBhcmVudDsKICAgICAgICBpZiAocGFyZW50IGlzIGlyLkNvbnN0cnVjdG9yIHx8CiAgICAgICAgICAgIChwYXJlbnQgaXMgaXIuUHJvY2VkdXJlICYmCiAgICAgICAgICAgICAgICBwYXJlbnQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpKSB7CiAgICAgICAgICBfdHlwZVZhcmlhYmxlcyA9IGNvbnN0IDxUeXBlVmFyaWFibGVUeXBlPltdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdHlwZVZhcmlhYmxlcyA9IGZ1bmN0aW9uTm9kZS50eXBlUGFyYW1ldGVycwogICAgICAgICAgICAgIC5tYXA8VHlwZVZhcmlhYmxlVHlwZT4oKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlcikgewogICAgICAgICAgICByZXR1cm4gZWxlbWVudE1hcAogICAgICAgICAgICAgICAgLmdldERhcnRUeXBlKG5ldyBpci5UeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyKSk7CiAgICAgICAgICB9KS50b0xpc3QoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfdHlwZVZhcmlhYmxlczsKICB9Cn0KCmNsYXNzIEtGdW5jdGlvbkRhdGFJbXBsIGV4dGVuZHMgS01lbWJlckRhdGFJbXBsCiAgICB3aXRoIEtGdW5jdGlvbkRhdGFNaXhpbgogICAgaW1wbGVtZW50cyBLRnVuY3Rpb25EYXRhIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlOwogIEZ1bmN0aW9uVHlwZSBfdHlwZTsKCiAgS0Z1bmN0aW9uRGF0YUltcGwoaXIuTWVtYmVyIG5vZGUsIHRoaXMuZnVuY3Rpb25Ob2RlKSA6IHN1cGVyKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBfdHlwZSA/Pz0gZWxlbWVudE1hcC5nZXRGdW5jdGlvblR5cGUoZnVuY3Rpb25Ob2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFBhcmFtZXRlcihKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICB2b2lkIGYoRGFydFR5cGUgdHlwZSwgU3RyaW5nIG5hbWUsIENvbnN0YW50VmFsdWUgZGVmYXVsdFZhbHVlKSkgewogICAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLCB7Ym9vbCBpc09wdGlvbmFsOiB0cnVlfSkgewogICAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpOwogICAgICBTdHJpbmcgbmFtZSA9IG5vZGUubmFtZTsKICAgICAgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWU7CiAgICAgIGlmIChpc09wdGlvbmFsKSB7CiAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBuZXcgTnVsbENvbnN0YW50VmFsdWUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZih0eXBlLCBuYW1lLCBkZWZhdWx0VmFsdWUpOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb25Ob2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGhhbmRsZVBhcmFtZXRlcihmdW5jdGlvbk5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0sCiAgICAgICAgICBpc09wdGlvbmFsOiBpID49IGZ1bmN0aW9uTm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgIH0KICAgIGZ1bmN0aW9uTm9kZS5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KCkKICAgICAgLi5zb3J0KG5hbWVkT3JkZXJpbmcpCiAgICAgIC4uZm9yRWFjaChoYW5kbGVQYXJhbWV0ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25EYXRhIGNvbnZlcnQoKSB7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRGF0YUltcGwoCiAgICAgICAgbm9kZSwgZnVuY3Rpb25Ob2RlLCBuZXcgUmVndWxhck1lbWJlckRlZmluaXRpb24obm9kZSksIHN0YXRpY1R5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyB7CiAgICBpZiAobm9kZS5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm4gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucHJvcGVydHk7CiAgICByZXR1cm4gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3Mubm9uZTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEtDb25zdHJ1Y3RvckRhdGEgZXh0ZW5kcyBLRnVuY3Rpb25EYXRhIHsKICBDb25zdGFudENvbnN0cnVjdG9yIGdldENvbnN0cnVjdG9yQ29uc3RhbnQoCiAgICAgIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCwgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpOwp9CgpjbGFzcyBLQ29uc3RydWN0b3JEYXRhSW1wbCBleHRlbmRzIEtGdW5jdGlvbkRhdGFJbXBsCiAgICBpbXBsZW1lbnRzIEtDb25zdHJ1Y3RvckRhdGEgewogIENvbnN0YW50Q29uc3RydWN0b3IgX2NvbnN0YW50Q29uc3RydWN0b3I7CiAgQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yQm9keTsKCiAgS0NvbnN0cnVjdG9yRGF0YUltcGwoaXIuTWVtYmVyIG5vZGUsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUpCiAgICAgIDogc3VwZXIobm9kZSwgZnVuY3Rpb25Ob2RlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBnZXRDb25zdHJ1Y3RvckNvbnN0YW50KAogICAgICBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXAsIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSB7CiAgICBpZiAoX2NvbnN0YW50Q29uc3RydWN0b3IgPT0gbnVsbCkgewogICAgICBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvciAmJiBjb25zdHJ1Y3Rvci5pc0NvbnN0KSB7CiAgICAgICAgX2NvbnN0YW50Q29uc3RydWN0b3IgPQogICAgICAgICAgICBuZXcgQ29uc3RhbnRpZmllcihlbGVtZW50TWFwKS5jb21wdXRlQ29uc3RhbnRDb25zdHJ1Y3Rvcihub2RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgY29uc3RydWN0b3IsCiAgICAgICAgICAgICJVbmV4cGVjdGVkIGNvbnN0cnVjdG9yICRjb25zdHJ1Y3RvciBpbiAiCiAgICAgICAgICAgICJDb25zdHJ1Y3RvckRhdGFJbXBsLl9nZXRDb25zdHJ1Y3RvckNvbnN0YW50Iik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfY29uc3RhbnRDb25zdHJ1Y3RvcjsKICB9CgogIEBvdmVycmlkZQogIEpDb25zdHJ1Y3RvckRhdGEgY29udmVydCgpIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbjsKICAgIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIGRlZmluaXRpb24gPSBuZXcgU3BlY2lhbE1lbWJlckRlZmluaXRpb24obm9kZSwgTWVtYmVyS2luZC5jb25zdHJ1Y3Rvcik7CiAgICB9IGVsc2UgewogICAgICBkZWZpbml0aW9uID0gbmV3IFJlZ3VsYXJNZW1iZXJEZWZpbml0aW9uKG5vZGUpOwogICAgfQogICAgcmV0dXJuIG5ldyBKQ29uc3RydWN0b3JEYXRhSW1wbCgKICAgICAgICBub2RlLCBmdW5jdGlvbk5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyA9PgogICAgICBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5wYXJhbWV0ZXI7Cn0KCmFic3RyYWN0IGNsYXNzIEtGaWVsZERhdGEgZXh0ZW5kcyBLTWVtYmVyRGF0YSB7CiAgRGFydFR5cGUgZ2V0RmllbGRUeXBlKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCk7Cn0KCmNsYXNzIEtGaWVsZERhdGFJbXBsIGV4dGVuZHMgS01lbWJlckRhdGFJbXBsIGltcGxlbWVudHMgS0ZpZWxkRGF0YSB7CiAgRGFydFR5cGUgX3R5cGU7CiAgQ29uc3RhbnRFeHByZXNzaW9uIF9jb25zdGFudEV4cHJlc3Npb247CgogIEtGaWVsZERhdGFJbXBsKGlyLkZpZWxkIG5vZGUpIDogc3VwZXIobm9kZSk7CgogIEBvdmVycmlkZQogIGlyLkZpZWxkIGdldCBub2RlID0+IHN1cGVyLm5vZGU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEZpZWxkVHlwZShjb3ZhcmlhbnQgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX3R5cGUgPz89IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICBpZiAoX2NvbnN0YW50RXhwcmVzc2lvbiA9PSBudWxsKSB7CiAgICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgICBfY29uc3RhbnRFeHByZXNzaW9uID0KICAgICAgICAgICAgbmV3IENvbnN0YW50aWZpZXIoZWxlbWVudE1hcCkudmlzaXQobm9kZS5pbml0aWFsaXplcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLAogICAgICAgICAgICAiVW5leHBlY3RlZCBmaWVsZCAke25vZGV9IGluICIKICAgICAgICAgICAgIkZpZWxkRGF0YUltcGwuZ2V0RmllbGRDb25zdGFudCIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2NvbnN0YW50RXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyB7CiAgICBpZiAobm9kZS5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm4gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MuaW5zdGFuY2VGaWVsZDsKICAgIHJldHVybiBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5ub25lOwogIH0KCiAgQG92ZXJyaWRlCiAgSkZpZWxkRGF0YSBjb252ZXJ0KCkgewogICAgcmV0dXJuIG5ldyBKRmllbGREYXRhSW1wbCgKICAgICAgICBub2RlLCBuZXcgUmVndWxhck1lbWJlckRlZmluaXRpb24obm9kZSksIHN0YXRpY1R5cGVzKTsKICB9Cn0KCmNsYXNzIEtUeXBlZGVmRGF0YSB7CiAgZmluYWwgaXIuVHlwZWRlZiBub2RlOwogIGZpbmFsIFR5cGVkZWZFbnRpdHkgZWxlbWVudDsKICBmaW5hbCBUeXBlZGVmVHlwZSByYXdUeXBlOwoKICBLVHlwZWRlZkRhdGEodGhpcy5ub2RlLCB0aGlzLmVsZW1lbnQsIHRoaXMucmF3VHlwZSk7Cn0KCmNsYXNzIEtUeXBlVmFyaWFibGVEYXRhIHsKICBmaW5hbCBpci5UeXBlUGFyYW1ldGVyIG5vZGU7CiAgRGFydFR5cGUgX2JvdW5kOwogIERhcnRUeXBlIF9kZWZhdWx0VHlwZTsKCiAgS1R5cGVWYXJpYWJsZURhdGEodGhpcy5ub2RlKTsKCiAgRGFydFR5cGUgZ2V0Qm91bmQoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF9ib3VuZCA/Pz0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLmJvdW5kKTsKICB9CgogIERhcnRUeXBlIGdldERlZmF1bHRUeXBlKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIC8vIFRPRE8oMzQ1MjIpOiBSZW1vdmUgYD8/IGNvbnN0IGlyLkR5bmFtaWNUeXBlKClgIHdoZW4gaXNzdWUgMzQ1MjIgaXMKICAgIC8vIGZpeGVkLgogICAgcmV0dXJuIF9kZWZhdWx0VHlwZSA/Pz0KICAgICAgICBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUuZGVmYXVsdFR5cGUgPz8gY29uc3QgaXIuRHluYW1pY1R5cGUoKSk7CiAgfQoKICBKVHlwZVZhcmlhYmxlRGF0YSBjb3B5KCkgewogICAgcmV0dXJuIG5ldyBKVHlwZVZhcmlhYmxlRGF0YShub2RlKTsKICB9Cn0Kg6gATk48ARwBOR8BKCQrTgEZKSgjJCEhJx4aJx8iIyggATgUQQElAUI9ATcBLiYhIggGBAEvNkEGBAEdHyo0IggGBAFJJxkdBAE2NRkjBAE7ExkfBAFFOQIBQBQcASQlJQEdARsdKS42CAYEAUAnFxwEATAtFyEEAR0eKioyLisUCiY4MxMzDCkxIjMMERRRCggGBAFBPhk5BAExGSIyJBMPNggGBAFNKTE4JiYeLw0pOTozIgoKBh4vDSk5OjMiCgoGOwQCARUcJTwzAR4BS0YEAUkbRiJADzo7JSwfGSxKDAgGGwQBR0sbLwQCAR0bNRQBOSYBUA0kAT05AVBLEEQdASpOAUpPAS8bSQFLDUoBUCQvNwIBNhkZHR0pKi8CATIrDBYBKiUlNSEBMTQBGwFKRgEMPgEMJS4lBAFPLkM4AU9EFUw9HBQGAU4fH0gaQ0A0KkYqAU44MTE9BjEsGlAGSkcBISgqOwQBDDodBAE4JAEoKC0hJgE7NSMgKRAIIR4jCBsGAStEOkxJCx4gJRE8LwtHMxAIPRAINSw3LiVQEgoIIyM1LDISCig7Ix0POTY3Ix0IBgEnNiUlKAgGAR4BJCE+KCstRjQUCi8ISiwrLUY4FAogSQg2KQYBKi0GGjIbRQYBQEwvREcBT0U/CSJFRh1GAUdBNi47IwgGAU0YBAEMRB4dRUEEAQxPHSonCAQBDFAdM1AEAQwbSh09MQgEAUM4LwQBDEsmBAEMLzgrJiYdIzQNLj46MycKCgYeLw0pOTozIgoKBh4vDSk5OjMiCgoGHCUNHyo6Mx0KCgZRLAQCARwVAR4dHyEmJRkBGB8BQgFDGAIBLQwXDBsjAQwaDBkMGwwdDCIMIQElAR0BDCcBDCEBDCc1QwQBDBlHBAIBHRYBHwFCAT4BNwFFGQIBOAwYASUBDB8BHgEMJzVDBAEMPzYtFz0GEQQCATY7AU4BM0cCAT0kKQEMMzUiMTUPMignPDcRN0geRxcKCAYbBAIBMBwfDCYWAUYBDE4/BAEMM0hROR8iGChIETIKCCMGAUk8QQYqHCIEAQwbIU0EAQw4SCkEAgE4LkkCATUiLCkBRSMBDC5KKDsfTA8SGTY8CAYhBAEMHyEiTg02BiU2BAEMOSkCATA0ATEqAgFFEioBLwEMIwEMRzgEAQwxKycaHkMPEjErLwgGIAQBDDhNKQQBDBkfPwQCARUZHx0BNwIBGh8TGQEgATE6BAE3Sw4cTAQBHSgEAgEkcGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2Vudi5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3VuaXZlcnNlL2Z1bmN0aW9uX3NldC5kYXJ0p20vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSB1bml2ZXJzZS5mdW5jdGlvbl9zZXQ7CgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzLCBTZWxlY3RvcnM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IEhhc2hpbmcsIFNldGxldDsKaW1wb3J0ICdzZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwoKLy8gVE9ETyhrYXNwZXJsKTogVGhpcyBhY3R1YWxseSBob2xkcyBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGp1c3QgZmluZQovLyB0b28gYW5kIHN0cmljbHkgdGhleSBhcmVuJ3QgZnVuY3Rpb25zLiBNYXliZSB0aGlzIG5lZWRzIGEgYmV0dGVyCi8vIG5hbWUgLS0gc29tZXRoaW5nIGxpa2UgRWxlbWVudFNldCBzZWVtcyBhIGJpdCB0b28gZ2VuZXJpYy4KY2xhc3MgRnVuY3Rpb25TZXQgewogIGZpbmFsIE1hcDxTdHJpbmcsIEZ1bmN0aW9uU2V0Tm9kZT4gX25vZGVzOwoKICBmYWN0b3J5IEZ1bmN0aW9uU2V0KEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gbGl2ZUluc3RhbmNlTWVtYmVycykgewogICAgTWFwPFN0cmluZywgRnVuY3Rpb25TZXROb2RlPiBub2RlcyA9IG5ldyBNYXA8U3RyaW5nLCBGdW5jdGlvblNldE5vZGU+KCk7CiAgICBmb3IgKE1lbWJlckVudGl0eSBtZW1iZXIgaW4gbGl2ZUluc3RhbmNlTWVtYmVycykgewogICAgICBTdHJpbmcgbmFtZSA9IG1lbWJlci5uYW1lOwogICAgICAobm9kZXNbbmFtZV0gPz89IG5ldyBGdW5jdGlvblNldE5vZGUobmFtZSkpLmFkZChtZW1iZXIpOwogICAgfQogICAgcmV0dXJuIG5ldyBGdW5jdGlvblNldC5pbnRlcm5hbChub2Rlcyk7CiAgfQoKICBGdW5jdGlvblNldC5pbnRlcm5hbCh0aGlzLl9ub2Rlcyk7CgogIGJvb2wgY29udGFpbnMoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpOwogICAgYXNzZXJ0KCFlbGVtZW50LmlzQWJzdHJhY3QpOwogICAgU3RyaW5nIG5hbWUgPSBlbGVtZW50Lm5hbWU7CiAgICBGdW5jdGlvblNldE5vZGUgbm9kZSA9IF9ub2Rlc1tuYW1lXTsKICAgIHJldHVybiAobm9kZSAhPSBudWxsKSA/IG5vZGUuY29udGFpbnMoZWxlbWVudCkgOiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgbWF5IGJlIGludm9rZWQgd2l0aCB0aGUgW3NlbGVjdG9yXSBvbiBhCiAgLy8vIHJlY2VpdmVyIHdpdGggdGhlIGdpdmVuIFtjb25zdHJhaW50XS4gVGhlIHJldHVybmVkIGVsZW1lbnRzIG1heSBpbmNsdWRlCiAgLy8vIG5vU3VjaE1ldGhvZCBoYW5kbGVycyB0aGF0IGFyZSBwb3RlbnRpYWwgdGFyZ2V0cyBpbmRpcmVjdGx5IHRocm91Z2ggdGhlCiAgLy8vIG5vU3VjaE1ldGhvZCBtZWNoYW5pc20uCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBmaWx0ZXIoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgcmV0dXJuIHF1ZXJ5KHNlbGVjdG9yLCByZWNlaXZlciwgZG9tYWluKS5mdW5jdGlvbnM7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbWFzayBmb3IgdGhlIHBvdGVudGlhbCByZWNlaXZlcnMgb2YgYSBkeW5hbWljIGNhbGwgdG8KICAvLy8gW3NlbGVjdG9yXSBvbiBbY29uc3RyYWludF0uCiAgLy8vCiAgLy8vIFRoaXMgd2lsbCBuYXJyb3cgdGhlIGNvbnN0cmFpbnRzIG9mIFtjb25zdHJhaW50XSB0byBhIFtUeXBlTWFza10gb2YgdGhlCiAgLy8vIHNldCBvZiBjbGFzc2VzIHRoYXQgYWN0dWFsbHkgaW1wbGVtZW50IHRoZSBzZWxlY3RlZCBtZW1iZXIgb3IgaW1wbGVtZW50CiAgLy8vIHRoZSBoYW5kbGluZyAnbm9TdWNoTWV0aG9kJyB3aGVyZSB0aGUgc2VsZWN0ZWQgbWVtYmVyIGlzIHVuaW1wbGVtZW50ZWQuCiAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgcmV0dXJuIHF1ZXJ5KHNlbGVjdG9yLCByZWNlaXZlciwgZG9tYWluKS5jb21wdXRlTWFzayhkb21haW4pOwogIH0KCiAgU2VsZWN0b3JNYXNrIF9jcmVhdGVTZWxlY3Rvck1hc2soCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgcmV0dXJuIHJlY2VpdmVyICE9IG51bGwKICAgICAgICA/IG5ldyBTZWxlY3Rvck1hc2soc2VsZWN0b3IsIHJlY2VpdmVyKQogICAgICAgIDogbmV3IFNlbGVjdG9yTWFzayhzZWxlY3RvciwgZG9tYWluLmR5bmFtaWNUeXBlKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRoZSB0YXJnZXQgb2YgYSBjYWxsIHRvCiAgLy8vIFtzZWxlY3Rvcl0gb24gYSByZWNlaXZlciBjb25zdHJhaW5lZCBieSBbY29uc3RyYWludF0gaW5jbHVkaW5nCiAgLy8vICdub1N1Y2hNZXRob2QnIG1ldGhvZHMgd2hlcmUgYXBwbGljYWJsZS4KICBGdW5jdGlvblNldFF1ZXJ5IHF1ZXJ5KAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIFN0cmluZyBuYW1lID0gc2VsZWN0b3IubmFtZTsKICAgIFNlbGVjdG9yTWFzayBzZWxlY3Rvck1hc2sgPSBfY3JlYXRlU2VsZWN0b3JNYXNrKHNlbGVjdG9yLCByZWNlaXZlciwgZG9tYWluKTsKICAgIFNlbGVjdG9yTWFzayBub1N1Y2hNZXRob2RNYXNrID0KICAgICAgICBuZXcgU2VsZWN0b3JNYXNrKFNlbGVjdG9ycy5ub1N1Y2hNZXRob2RfLCBzZWxlY3Rvck1hc2sucmVjZWl2ZXIpOwogICAgRnVuY3Rpb25TZXROb2RlIG5vZGUgPSBfbm9kZXNbbmFtZV07CiAgICBGdW5jdGlvblNldE5vZGUgbm9TdWNoTWV0aG9kcyA9IF9ub2Rlc1tJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfXTsKICAgIGlmIChub2RlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIG5vZGUucXVlcnkoc2VsZWN0b3JNYXNrLCBkb21haW4sIG5vU3VjaE1ldGhvZHMsIG5vU3VjaE1ldGhvZE1hc2spOwogICAgfQogICAgLy8gSWYgdGhlcmUgaXMgbm8gbWV0aG9kIHRoYXQgbWF0Y2hlcyBbc2VsZWN0b3JdIHdlIGtub3cgd2UgY2FuCiAgICAvLyBvbmx5IGhpdCBbOm5vU3VjaE1ldGhvZDpdLgogICAgaWYgKG5vU3VjaE1ldGhvZHMgPT0gbnVsbCkgewogICAgICByZXR1cm4gY29uc3QgRW1wdHlGdW5jdGlvblNldFF1ZXJ5KCk7CiAgICB9CiAgICByZXR1cm4gbm9TdWNoTWV0aG9kcy5xdWVyeShub1N1Y2hNZXRob2RNYXNrLCBkb21haW4pOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBfbm9kZXMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEZ1bmN0aW9uU2V0Tm9kZSBub2RlKSB7CiAgICAgIG5vZGUuZm9yRWFjaChhY3Rpb24pOwogICAgfSk7CiAgfQp9CgovLy8gQSBzZWxlY3Rvci9jb25zdHJhaW50IHBhaXIgcmVwcmVzZW50aW5nIHRoZSBkeW5hbWljIGludm9jYXRpb24gb2YgW3NlbGVjdG9yXQovLy8gb24gYSByZWNlaXZlciBjb25zdHJhaW5lZCBieSBbY29uc3RyYWludF0uCmNsYXNzIFNlbGVjdG9yTWFzayB7CiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CgogIFNlbGVjdG9yTWFzayh0aGlzLnNlbGVjdG9yLCB0aGlzLnJlY2VpdmVyKQogICAgICA6IHRoaXMuaGFzaENvZGUgPQogICAgICAgICAgICBIYXNoaW5nLm1peEhhc2hDb2RlQml0cyhzZWxlY3Rvci5oYXNoQ29kZSwgcmVjZWl2ZXIuaGFzaENvZGUpIHsKICAgIGFzc2VydChyZWNlaXZlciAhPSBudWxsKTsKICB9CgogIFN0cmluZyBnZXQgbmFtZSA9PiBzZWxlY3Rvci5uYW1lOwoKICBib29sIGFwcGxpZXMoTWVtYmVyRW50aXR5IGVsZW1lbnQsIEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICBpZiAoIXNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZG9tYWluCiAgICAgICAgLmlzVGFyZ2V0aW5nTWVtYmVyKHJlY2VpdmVyLCBlbGVtZW50LCBzZWxlY3Rvci5tZW1iZXJOYW1lKQogICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZTsKICB9CgogIGJvb2wgbmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgcmV0dXJuIGRvbWFpbgogICAgICAgIC5uZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKHJlY2VpdmVyLCBzZWxlY3RvcikKICAgICAgICAuaXNQb3RlbnRpYWxseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gc2VsZWN0b3IgPT0gb3RoZXIuc2VsZWN0b3IgJiYgcmVjZWl2ZXIgPT0gb3RoZXIucmVjZWl2ZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnKCRzZWxlY3RvciwkcmVjZWl2ZXIpJzsKfQoKLy8vIEEgbm9kZSBpbiB0aGUgW0Z1bmN0aW9uU2V0XSBjYWNoaW5nIGFsbCBbRnVuY3Rpb25TZXRRdWVyeV0gb2JqZWN0IGZvcgovLy8gc2VsZWN0b3JzIHdpdGggdGhlIHNhbWUgW25hbWVdLgpjbGFzcyBGdW5jdGlvblNldE5vZGUgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIE1hcDxTZWxlY3Rvck1hc2ssIEZ1bmN0aW9uU2V0UXVlcnk+IGNhY2hlID0KICAgICAgPFNlbGVjdG9yTWFzaywgRnVuY3Rpb25TZXRRdWVyeT57fTsKCiAgLy8gSW5pdGlhbGx5LCB3ZSBrZWVwIHRoZSBlbGVtZW50cyBpbiBhIGxpc3QgYmVjYXVzZSBpdCBpcyBtb3JlCiAgLy8gY29tcGFjdCB0aGFuIGEgaGFzaCBzZXQuIE9uY2Ugd2UgZ2V0IGVub3VnaCBlbGVtZW50cywgd2UgY2hhbmdlCiAgLy8gdGhlIHJlcHJlc2VudGF0aW9uIHRvIGJlIGEgc2V0IHRvIGdldCBmYXN0ZXIgY29udGFpbnMgY2hlY2tzLgogIHN0YXRpYyBjb25zdCBpbnQgTUFYX0VMRU1FTlRTX0lOX0xJU1QgPSA4OwogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZWxlbWVudHMgPSA8TWVtYmVyRW50aXR5PltdOwogIGJvb2wgaXNMaXN0ID0gdHJ1ZTsKCiAgRnVuY3Rpb25TZXROb2RlKHRoaXMubmFtZSk7CgogIHZvaWQgYWRkKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5uYW1lID09IG5hbWUpOwogICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNsZWFyaW5nIHRoZSBjYWNoZSB1bmxlc3Mgd2UgaGF2ZSB0by4gRm9yIHRoYXQKICAgIC8vIHJlYXNvbiB3ZSBrZWVwIHRoZSBleHBsaWNpdCBjb250YWlucyBjaGVjayBldmVuIHRob3VnaCB0aGUgYWRkCiAgICAvLyBtZXRob2QgZW5kcyB1cCBkb2luZyB0aGUgd29yayBhZ2FpbiAoZm9yIHNldHMpLgogICAgaWYgKCFlbGVtZW50cy5jb250YWlucyhlbGVtZW50KSkgewogICAgICBpZiAoaXNMaXN0ICYmIGVsZW1lbnRzLmxlbmd0aCA+PSBNQVhfRUxFTUVOVFNfSU5fTElTVCkgewogICAgICAgIGVsZW1lbnRzID0gZWxlbWVudHMudG9TZXQoKTsKICAgICAgICBpc0xpc3QgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAoaXNMaXN0KSB7CiAgICAgICAgTGlzdDxNZW1iZXJFbnRpdHk+IGxpc3QgPSBlbGVtZW50czsKICAgICAgICBsaXN0LmFkZChlbGVtZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBTZXQ8TWVtYmVyRW50aXR5PiBzZXQgPSBlbGVtZW50czsKICAgICAgICBzZXQuYWRkKGVsZW1lbnQpOwogICAgICB9CiAgICAgIGlmICghY2FjaGUuaXNFbXB0eSkgY2FjaGUuY2xlYXIoKTsKICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5uYW1lID09IG5hbWUpOwogICAgaWYgKGlzTGlzdCkgewogICAgICBMaXN0PE1lbWJlckVudGl0eT4gbGlzdCA9IGVsZW1lbnRzOwogICAgICBpbnQgaW5kZXggPSBsaXN0LmluZGV4T2YoZWxlbWVudCk7CiAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjsKICAgICAgTWVtYmVyRW50aXR5IGxhc3QgPSBsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgaWYgKGluZGV4ICE9IGxpc3QubGVuZ3RoKSB7CiAgICAgICAgbGlzdFtpbmRleF0gPSBsYXN0OwogICAgICB9CiAgICAgIGlmICghY2FjaGUuaXNFbXB0eSkgY2FjaGUuY2xlYXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIFNldDxNZW1iZXJFbnRpdHk+IHNldCA9IGVsZW1lbnRzOwogICAgICBpZiAoc2V0LnJlbW92ZShlbGVtZW50KSkgewogICAgICAgIC8vIFRvIGF2b2lkIHdvYmJsaW5nIGJldHdlZW4gdGhlIHR3byByZXByZXNlbnRhdGlvbnMsIHdlIGRvCiAgICAgICAgLy8gbm90IHRyYW5zaXRpb24gYmFjayB0byB0aGUgbGlzdCByZXByZXNlbnRhdGlvbiBldmVuIGlmIHdlCiAgICAgICAgLy8gZW5kIHVwIHdpdGggZmV3IGVub3VnaCBlbGVtZW50cyBhdCB0aGlzIHBvaW50LgogICAgICAgIGlmICghY2FjaGUuaXNFbXB0eSkgY2FjaGUuY2xlYXIoKTsKICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBjb250YWlucyhNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQubmFtZSA9PSBuYW1lKTsKICAgIHJldHVybiBlbGVtZW50cy5jb250YWlucyhlbGVtZW50KTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgZWxlbWVudHMuZm9yRWFjaChhY3Rpb24pOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdGhlIHRhcmdldCBvZiBbc2VsZWN0b3JNYXNrXQogIC8vLyBpbmNsdWRpbmcgbm8gc3VjaCBtZXRob2QgaGFuZGxpbmcgd2hlcmUgYXBwbGljYWJsZS4KICBGdW5jdGlvblNldFF1ZXJ5IHF1ZXJ5KFNlbGVjdG9yTWFzayBzZWxlY3Rvck1hc2ssIEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLAogICAgICBbRnVuY3Rpb25TZXROb2RlIG5vU3VjaE1ldGhvZHMsIFNlbGVjdG9yTWFzayBub1N1Y2hNZXRob2RNYXNrXSkgewogICAgYXNzZXJ0KHNlbGVjdG9yTWFzay5uYW1lID09IG5hbWUpOwogICAgRnVuY3Rpb25TZXRRdWVyeSByZXN1bHQgPSBjYWNoZVtzZWxlY3Rvck1hc2tdOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwoKICAgIFNldGxldDxNZW1iZXJFbnRpdHk+IGZ1bmN0aW9uczsKICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaWYgKHNlbGVjdG9yTWFzay5hcHBsaWVzKGVsZW1lbnQsIGRvbWFpbikpIHsKICAgICAgICBpZiAoZnVuY3Rpb25zID09IG51bGwpIHsKICAgICAgICAgIC8vIERlZmVyIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBmdW5jdGlvbnMgc2V0IHVudGlsIHdlIGFyZQogICAgICAgICAgLy8gc3VyZSB3ZSBuZWVkIGl0LiBUaGlzIGFsbG93cyB1cyB0byByZXR1cm4gaW1tdXRhYmxlIGVtcHR5CiAgICAgICAgICAvLyBsaXN0cyB3aGVuIHRoZSBmaWx0ZXJpbmcgcHJvZHVjZWQgbm8gcmVzdWx0cy4KICAgICAgICAgIGZ1bmN0aW9ucyA9IG5ldyBTZXRsZXQ8TWVtYmVyRW50aXR5PigpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbnMuYWRkKGVsZW1lbnQpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgd2UgY2Fubm90IGVuc3VyZSBhIG1ldGhvZCB3aWxsIGJlIGZvdW5kIGF0IHJ1bnRpbWUsIHdlIGFsc28KICAgIC8vIGFkZCBbbm9TdWNoTWV0aG9kXSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcHBseSB0byBbbWFza10gYXMKICAgIC8vIHBvdGVudGlhbCB0YXJnZXRzLgogICAgaWYgKG5vU3VjaE1ldGhvZHMgIT0gbnVsbCAmJgogICAgICAgIHNlbGVjdG9yTWFzay5uZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKGRvbWFpbikpIHsKICAgICAgRnVuY3Rpb25TZXRRdWVyeSBub1N1Y2hNZXRob2RRdWVyeSA9CiAgICAgICAgICBub1N1Y2hNZXRob2RzLnF1ZXJ5KG5vU3VjaE1ldGhvZE1hc2ssIGRvbWFpbik7CiAgICAgIGlmICghbm9TdWNoTWV0aG9kUXVlcnkuZnVuY3Rpb25zLmlzRW1wdHkpIHsKICAgICAgICBpZiAoZnVuY3Rpb25zID09IG51bGwpIHsKICAgICAgICAgIGZ1bmN0aW9ucyA9CiAgICAgICAgICAgICAgbmV3IFNldGxldDxNZW1iZXJFbnRpdHk+LmZyb20obm9TdWNoTWV0aG9kUXVlcnkuZnVuY3Rpb25zKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZnVuY3Rpb25zLmFkZEFsbChub1N1Y2hNZXRob2RRdWVyeS5mdW5jdGlvbnMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgY2FjaGVbc2VsZWN0b3JNYXNrXSA9IHJlc3VsdCA9IChmdW5jdGlvbnMgIT0gbnVsbCkKICAgICAgICA/IG5ldyBGdWxsRnVuY3Rpb25TZXRRdWVyeShmdW5jdGlvbnMpCiAgICAgICAgOiBjb25zdCBFbXB0eUZ1bmN0aW9uU2V0UXVlcnkoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnRnVuY3Rpb25TZXROb2RlKCcpOwogICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICBjYWNoZS5mb3JFYWNoKChtYXNrLCBxdWVyeSkgewogICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgIHNiLndyaXRlKCckbWFzaz0kcXVlcnknKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9KTsKICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBBIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgdGhlIHBvdGVudGlhbCB0YXJnZXRzIG9mIGFsbCBjYWxsIHNpdGVzIHNoYXJpbmcKLy8vIHRoZSBzYW1lIHJlY2VpdmVyIG1hc2sgYW5kIHNlbGVjdG9yLgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvblNldFF1ZXJ5IHsKICBjb25zdCBGdW5jdGlvblNldFF1ZXJ5KCk7CgogIC8vLyBDb21wdXRlIHRoZSB0eXBlIG9mIGFsbCBwb3RlbnRpYWwgcmVjZWl2ZXJzIG9mIHRoaXMgZnVuY3Rpb24gc2V0LgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZU1hc2soQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pOwoKICAvLy8gUmV0dXJucyBhbGwgcG90ZW50aWFsIHRhcmdldHMgb2YgdGhpcyBmdW5jdGlvbiBzZXQuCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgZnVuY3Rpb25zOwp9CgpjbGFzcyBFbXB0eUZ1bmN0aW9uU2V0UXVlcnkgaW1wbGVtZW50cyBGdW5jdGlvblNldFF1ZXJ5IHsKICBjb25zdCBFbXB0eUZ1bmN0aW9uU2V0UXVlcnkoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlTWFzayhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gZG9tYWluLmVtcHR5VHlwZTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgZnVuY3Rpb25zID0+IGNvbnN0IDxNZW1iZXJFbnRpdHk+W107CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICc8ZW1wdHk+JzsKfQoKY2xhc3MgRnVsbEZ1bmN0aW9uU2V0UXVlcnkgaW1wbGVtZW50cyBGdW5jdGlvblNldFF1ZXJ5IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGZ1bmN0aW9uczsKCiAgQWJzdHJhY3RWYWx1ZSBfcmVjZWl2ZXI7CgogIEZ1bGxGdW5jdGlvblNldFF1ZXJ5KHRoaXMuZnVuY3Rpb25zKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlTWFzayhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgcmV0dXJuIF9yZWNlaXZlciA/Pz0gZG9tYWluLmNvbXB1dGVSZWNlaXZlcihmdW5jdGlvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRfcmVjZWl2ZXI6JGZ1bmN0aW9ucyc7Cn0KgS0ATk48AR8BOyQxMSYBREQ+FC0BRE03IT8GLAQBJQEoJiEgKTwEAU1OTh4hTzgEAUgiBk5OTh5PQgQBJE8cLzoEAUdFLxpPIVEkSilHGFAGRCIhLAY6BAEzORwIBAIBUS8VGyAMFgEtGEweBAEkAUM5EkMcBAE/EjccBAEMHC1FBAEMMAIBSiQYFTQqAUJFQy02FgEeASMiRkY3Jz8lGAgULBsPKhoIKQYEASYiEiopHS0iHAgpDSghREU6KwgGBAEoIicEATMeBAFMOlBIJzMnASQtMyFERzsyCiAIBgFGQhohOis5MiEWShE5CggGNy4pEwQBDBYqIhciFyATCBMaBAIBUCkiHAFIOQE6KAIBOiEBDE0BDEIBDCICATkMKgEbASgBDDo8BAEMMAIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2Z1bmN0aW9uX3NldC5kYXJ0RHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfcHJvdG90eXBlL2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0gf4vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQuY29uc3RhbnRfZXZhbHVhdG9yOwoKZXhwb3J0ICcuLi9mYXN0YS9rZXJuZWwvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29uc3RhbnRFdmFsdWF0b3IsCiAgICAgICAgQ29uc3RhbnRzVHJhbnNmb3JtZXIsCiAgICAgICAgRXJyb3JSZXBvcnRlciwKICAgICAgICBFdmFsdWF0aW9uRW52aXJvbm1lbnQsCiAgICAgICAgU2ltcGxlRXJyb3JSZXBvcnRlciwKICAgICAgICB0cmFuc2Zvcm1Db21wb25lbnQsCiAgICAgICAgdHJhbnNmb3JtTGlicmFyaWVzOwoRAE5OPAEmATEJGx4XHx0cHAE7cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2tlcm5lbF9pbXBhY3QuZGFydMAAgagvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICcuLi9pci9pbXBhY3RfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9ydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vaXIvc2NvcGUuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi9pci92aXNpdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vcmVzb2x1dGlvbi9yZWdpc3RyeS5kYXJ0JyBzaG93IFJlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXI7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKCi8vLyBWaXNpdG9yIHRoYXQgY29tcHV0ZXMgdGhlIHdvcmxkIGltcGFjdCBvZiBhIG1lbWJlci4KY2xhc3MgS2VybmVsSW1wYWN0QnVpbGRlciBleHRlbmRzIEltcGFjdEJ1aWxkZXJCYXNlCiAgICB3aXRoIEtlcm5lbEltcGFjdFJlZ2lzdHJ5TWl4aW4gewogIEBvdmVycmlkZQogIGZpbmFsIFJlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKICBAb3ZlcnJpZGUKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckVudGl0eSBjdXJyZW50TWVtYmVyOwogIGZpbmFsIFNldDxQcmFnbWFBbm5vdGF0aW9uPiBfYW5ub3RhdGlvbnM7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ29uc3RhbnRWYWx1ZWZpZXIgX2NvbnN0YW50VmFsdWVmaWVyOwoKICBLZXJuZWxJbXBhY3RCdWlsZGVyKAogICAgICB0aGlzLmVsZW1lbnRNYXAsCiAgICAgIHRoaXMuY3VycmVudE1lbWJlciwKICAgICAgdGhpcy5yZXBvcnRlciwKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgVmFyaWFibGVTY29wZU1vZGVsIHZhcmlhYmxlU2NvcGVNb2RlbCwKICAgICAgdGhpcy5fYW5ub3RhdGlvbnMsCiAgICAgIHRoaXMuX2NvbnN0YW50VmFsdWVmaWVyKQogICAgICA6IHRoaXMuaW1wYWN0QnVpbGRlciA9IG5ldyBSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyKGN1cnJlbnRNZW1iZXIpLAogICAgICAgIHN1cGVyKGVsZW1lbnRNYXAudHlwZUVudmlyb25tZW50LCBlbGVtZW50TWFwLmNsYXNzSGllcmFyY2h5LAogICAgICAgICAgICB2YXJpYWJsZVNjb3BlTW9kZWwpOwoKICBAb3ZlcnJpZGUKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmFzaWNEYXRhIGdldCBfbmF0aXZlQmFzaWNEYXRhID0+IGVsZW1lbnRNYXAubmF0aXZlQmFzaWNEYXRhOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCB1c2VBc3NlcnRzID0+IF9vcHRpb25zLmVuYWJsZVVzZXJBc3NlcnRpb25zOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpbmZlckVmZmVjdGl2ZWx5RmluYWxWYXJpYWJsZVR5cGVzID0+CiAgICAgICFfYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi5kaXNhYmxlRmluYWwpOwp9CgovLy8gQ29udmVydHMgYSBbSW1wYWN0RGF0YV0gb2JqZWN0IGJhc2VkIG9uIGtlcm5lbCB0byB0aGUgY29ycmVzcG9uZGluZwovLy8gW1Jlc29sdXRpb25JbXBhY3RdIGJhc2VkIG9uIHRoZSBLIG1vZGVsLgpjbGFzcyBLZXJuZWxJbXBhY3RDb252ZXJ0ZXIgZXh0ZW5kcyBLZXJuZWxJbXBhY3RSZWdpc3RyeU1peGluIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CiAgQG92ZXJyaWRlCiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyOwogIEBvdmVycmlkZQogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJFbnRpdHkgY3VycmVudE1lbWJlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBDb25zdGFudFZhbHVlZmllciBfY29uc3RhbnRWYWx1ZWZpZXI7CgogIEtlcm5lbEltcGFjdENvbnZlcnRlcih0aGlzLmVsZW1lbnRNYXAsIHRoaXMuY3VycmVudE1lbWJlciwgdGhpcy5yZXBvcnRlciwKICAgICAgdGhpcy5fb3B0aW9ucywgdGhpcy5fY29uc3RhbnRWYWx1ZWZpZXIpCiAgICAgIDogdGhpcy5pbXBhY3RCdWlsZGVyID0gbmV3IFJlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIoY3VycmVudE1lbWJlcik7CgogIEBvdmVycmlkZQogIGlyLlR5cGVFbnZpcm9ubWVudCBnZXQgdHlwZUVudmlyb25tZW50ID0+IGVsZW1lbnRNYXAudHlwZUVudmlyb25tZW50OwoKICBAb3ZlcnJpZGUKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmFzaWNEYXRhIGdldCBfbmF0aXZlQmFzaWNEYXRhID0+IGVsZW1lbnRNYXAubmF0aXZlQmFzaWNEYXRhOwoKICAvLy8gQ29udmVydHMgYSBbSW1wYWN0RGF0YV0gb2JqZWN0IGJhc2VkIG9uIGtlcm5lbCB0byB0aGUgY29ycmVzcG9uZGluZwogIC8vLyBbUmVzb2x1dGlvbkltcGFjdF0gYmFzZWQgb24gdGhlIEsgbW9kZWwuCiAgUmVzb2x1dGlvbkltcGFjdCBjb252ZXJ0KEltcGFjdERhdGEgaW1wYWN0RGF0YSkgewogICAgaW1wYWN0RGF0YS5hcHBseSh0aGlzKTsKICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KfQoKLy8vIFtJbXBhY3RSZWdpc3RyeV0gdGhhdCBjb252ZXJ0cyBrZXJuZWwgYmFzZWQgaW1wYWN0IGRhdGEgdG8gd29ybGQgaW1wYWN0Ci8vLyBvYmplY3QgYmFzZWQgb24gdGhlIEsgbW9kZWwuCmFic3RyYWN0IGNsYXNzIEtlcm5lbEltcGFjdFJlZ2lzdHJ5TWl4aW4gaW1wbGVtZW50cyBJbXBhY3RSZWdpc3RyeSB7CiAgQ29tcGlsZXJPcHRpb25zIGdldCBfb3B0aW9uczsKICBEaWFnbm9zdGljUmVwb3J0ZXIgZ2V0IHJlcG9ydGVyOwogIEtlcm5lbFRvRWxlbWVudE1hcCBnZXQgZWxlbWVudE1hcDsKICBNZW1iZXJFbnRpdHkgZ2V0IGN1cnJlbnRNZW1iZXI7CiAgUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlciBnZXQgaW1wYWN0QnVpbGRlcjsKICBpci5UeXBlRW52aXJvbm1lbnQgZ2V0IHR5cGVFbnZpcm9ubWVudDsKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CiAgTmF0aXZlQmFzaWNEYXRhIGdldCBfbmF0aXZlQmFzaWNEYXRhOwogIENvbnN0YW50VmFsdWVmaWVyIGdldCBfY29uc3RhbnRWYWx1ZWZpZXI7CgogIE9iamVjdCBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uKSB7CiAgICBpZiAocmVjZWl2ZXJUeXBlIGlzIGlyLkludGVyZmFjZVR5cGUpIHsKICAgICAgaWYgKHJlY2VpdmVyVHlwZS5jbGFzc05vZGUgPT0gdHlwZUVudmlyb25tZW50LmZ1dHVyZU9yQ2xhc3MpIHsKICAgICAgICAvLyBDRkUgZW5jb2RlcyBGdXR1cmVPciBhcyBhbiBpbnRlcmZhY2UgdHlwZSEKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFN0cm9uZ01vZGVDb25zdHJhaW50KGNvbW1vbkVsZW1lbnRzLCBfbmF0aXZlQmFzaWNEYXRhLAogICAgICAgICAgZWxlbWVudE1hcC5nZXRDbGFzcyhyZWNlaXZlclR5cGUuY2xhc3NOb2RlKSwgcmVsYXRpb24pOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2soaXIuRGFydFR5cGUgaXJUeXBlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShpclR5cGUpOwogICAgaWYgKCF0eXBlLmlzRHluYW1pYykgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5wYXJhbWV0ZXJDaGVjayh0eXBlKSk7CiAgICB9CiAgfQoKICBMaXN0PERhcnRUeXBlPiBfZ2V0VHlwZUFyZ3VtZW50cyhMaXN0PGlyLkRhcnRUeXBlPiB0eXBlcykgewogICAgaWYgKHR5cGVzLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHR5cGVzLm1hcChlbGVtZW50TWFwLmdldERhcnRUeXBlKS50b0xpc3QoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMYXp5RmllbGQoKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLkxBWllfRklFTEQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckZpZWxkTm9kZShpci5GaWVsZCBmaWVsZCkgewogICAgaWYgKGZpZWxkLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICBfbmF0aXZlQmFzaWNEYXRhCiAgICAgICAgICAgIC5pc05hdGl2ZUNsYXNzKGVsZW1lbnRNYXAuZ2V0Q2xhc3MoZmllbGQuZW5jbG9zaW5nQ2xhc3MpKSkgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIoZmllbGQpOwogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBOYXRpdmVEYXRhQnVpbGRlciBhbHJlYWR5IGhhcyB0aGUgbmF0aXZlIGJlaGF2aW9yCiAgICAgIC8vIGF0IHRoaXMgcG9pbnQuIFVzZSB0aGF0IGluc3RlYWQuCiAgICAgIGJvb2wgaXNKc0ludGVyb3AgPSBfbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKG1lbWJlcik7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGEgPQogICAgICAgICAgZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEobWVtYmVyKTsKICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMgPQogICAgICAgICAgZ2V0Q3JlYXRlc0Fubm90YXRpb25zKHJlcG9ydGVyLCBjb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucyA9CiAgICAgICAgICBnZXRSZXR1cm5zQW5ub3RhdGlvbnMocmVwb3J0ZXIsIGNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJOYXRpdmVEYXRhKGVsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZExvYWQoCiAgICAgICAgICBmaWVsZCwgY3JlYXRlc0Fubm90YXRpb25zLCByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApKTsKICAgICAgaW1wYWN0QnVpbGRlcgogICAgICAgICAgLnJlZ2lzdGVyTmF0aXZlRGF0YShlbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRTdG9yZShmaWVsZCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0cnVjdG9yTm9kZShpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKGNvbnN0cnVjdG9yKTsKICAgIGlmIChjb25zdHJ1Y3Rvci5pc0V4dGVybmFsICYmICFjb21tb25FbGVtZW50cy5pc0ZvcmVpZ25IZWxwZXIobWVtYmVyKSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBOYXRpdmVEYXRhQnVpbGRlciBhbHJlYWR5IGhhcyB0aGUgbmF0aXZlIGJlaGF2aW9yCiAgICAgIC8vIGF0IHRoaXMgcG9pbnQuIFVzZSB0aGF0IGluc3RlYWQuCiAgICAgIGJvb2wgaXNKc0ludGVyb3AgPSBfbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKG1lbWJlcik7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGEgPQogICAgICAgICAgZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEobWVtYmVyKTsKICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMgPQogICAgICAgICAgZ2V0Q3JlYXRlc0Fubm90YXRpb25zKHJlcG9ydGVyLCBjb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucyA9CiAgICAgICAgICBnZXRSZXR1cm5zQW5ub3RhdGlvbnMocmVwb3J0ZXIsIGNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJOYXRpdmVEYXRhKGVsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JNZXRob2QoCiAgICAgICAgICBjb25zdHJ1Y3RvciwgY3JlYXRlc0Fubm90YXRpb25zLCByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTeW5jU3Rhcihpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5TWU5DX1NUQVIpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBjb21tb25FbGVtZW50cy5zeW5jU3Rhckl0ZXJhYmxlRmFjdG9yeSwKICAgICAgICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMSwgMSksCiAgICAgICAgPERhcnRUeXBlPltlbGVtZW50TWFwLmdldERhcnRUeXBlKGVsZW1lbnRUeXBlKV0pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc3luYyhpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5BU1lOQyk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLmFzeW5jQXdhaXRDb21wbGV0ZXJGYWN0b3J5LAogICAgICAgIGNvbnN0IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCgwLCAxKSwKICAgICAgICA8RGFydFR5cGU+W2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUoZWxlbWVudFR5cGUpXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzeW5jU3Rhcihpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5BU1lOQ19TVEFSKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMuYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckZhY3RvcnksCiAgICAgICAgY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDEsIDEpLAogICAgICAgIDxEYXJ0VHlwZT5bZWxlbWVudE1hcC5nZXREYXJ0VHlwZShlbGVtZW50VHlwZSldKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUHJvY2VkdXJlTm9kZShpci5Qcm9jZWR1cmUgcHJvY2VkdXJlKSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIocHJvY2VkdXJlKTsKICAgIGlmIChwcm9jZWR1cmUuaXNFeHRlcm5hbCAmJiAhY29tbW9uRWxlbWVudHMuaXNGb3JlaWduSGVscGVyKG1lbWJlcikpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTmF0aXZlRGF0YUJ1aWxkZXIgYWxyZWFkeSBoYXMgdGhlIG5hdGl2ZSBiZWhhdmlvcgogICAgICAvLyBhdCB0aGlzIHBvaW50LiBVc2UgdGhhdCBpbnN0ZWFkLgogICAgICBib29sIGlzSnNJbnRlcm9wID0gX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihtZW1iZXIpOwogICAgICBMaXN0PENvbnN0YW50VmFsdWU+IG1ldGFkYXRhID0KICAgICAgICAgIGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKG1lbWJlcik7CiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zID0KICAgICAgICAgIGdldENyZWF0ZXNBbm5vdGF0aW9ucyhyZXBvcnRlciwgY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMgPQogICAgICAgICAgZ2V0UmV0dXJuc0Fubm90YXRpb25zKHJlcG9ydGVyLCBjb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyTmF0aXZlRGF0YShlbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yTWV0aG9kKAogICAgICAgICAgcHJvY2VkdXJlLCBjcmVhdGVzQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywKICAgICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckludExpdGVyYWwoaW50IHZhbHVlKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyQ29uc3RhbnRMaXRlcmFsKAogICAgICAgIG5ldyBJbnRDb25zdGFudEV4cHJlc3Npb24obmV3IEJpZ0ludC5mcm9tKHZhbHVlKS50b1Vuc2lnbmVkKDY0KSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckRvdWJsZUxpdGVyYWwoZG91YmxlIHZhbHVlKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyQ29uc3RhbnRMaXRlcmFsKG5ldyBEb3VibGVDb25zdGFudEV4cHJlc3Npb24odmFsdWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJCb29sTGl0ZXJhbChib29sIHZhbHVlKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyQ29uc3RhbnRMaXRlcmFsKG5ldyBCb29sQ29uc3RhbnRFeHByZXNzaW9uKHZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RyaW5nTGl0ZXJhbChTdHJpbmcgdmFsdWUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudExpdGVyYWwobmV3IFN0cmluZ0NvbnN0YW50RXhwcmVzc2lvbih2YWx1ZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN5bWJvbExpdGVyYWwoU3RyaW5nIHZhbHVlKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyQ29uc3RTeW1ib2xOYW1lKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJOdWxsTGl0ZXJhbCgpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudExpdGVyYWwobmV3IE51bGxDb25zdGFudEV4cHJlc3Npb24oKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTGlzdExpdGVyYWwoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNFbXB0eX0pIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJMaXN0TGl0ZXJhbChuZXcgTGlzdExpdGVyYWxVc2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMubGlzdFR5cGUoZWxlbWVudE1hcC5nZXREYXJ0VHlwZShlbGVtZW50VHlwZSkpLAogICAgICAgIGlzQ29uc3RhbnQ6IGlzQ29uc3QsCiAgICAgICAgaXNFbXB0eTogaXNFbXB0eSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclNldExpdGVyYWwoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNFbXB0eX0pIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTZXRMaXRlcmFsKG5ldyBTZXRMaXRlcmFsVXNlKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLnNldFR5cGUoZWxlbWVudE1hcC5nZXREYXJ0VHlwZShlbGVtZW50VHlwZSkpLAogICAgICAgIGlzQ29uc3RhbnQ6IGlzQ29uc3QsCiAgICAgICAgaXNFbXB0eTogaXNFbXB0eSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck1hcExpdGVyYWwoaXIuRGFydFR5cGUga2V5VHlwZSwgaXIuRGFydFR5cGUgdmFsdWVUeXBlLAogICAgICB7Ym9vbCBpc0NvbnN0LCBib29sIGlzRW1wdHl9KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyTWFwTGl0ZXJhbChuZXcgTWFwTGl0ZXJhbFVzZSgKICAgICAgICBjb21tb25FbGVtZW50cy5tYXBUeXBlKAogICAgICAgICAgICBlbGVtZW50TWFwLmdldERhcnRUeXBlKGtleVR5cGUpLCBlbGVtZW50TWFwLmdldERhcnRUeXBlKHZhbHVlVHlwZSkpLAogICAgICAgIGlzQ29uc3RhbnQ6IGlzQ29uc3QsCiAgICAgICAgaXNFbXB0eTogaXNFbXB0eSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck5ldygKICAgICAgaXIuTWVtYmVyIHRhcmdldCwKICAgICAgaXIuSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQsCiAgICAgIHtib29sIGlzQ29uc3R9KSB7CiAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IGVsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IodGFyZ2V0KTsKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlKAogICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMgKyBuYW1lZEFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgbmFtZWRBcmd1bWVudHMsCiAgICAgICAgdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0ID0gZWxlbWVudE1hcC5nZXRJbXBvcnQoaW1wb3J0KTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UoaXNDb25zdAogICAgICAgID8gbmV3IFN0YXRpY1VzZS5jb25zdENvbnN0cnVjdG9ySW52b2tlKGNvbnN0cnVjdG9yLCBjYWxsU3RydWN0dXJlLAogICAgICAgICAgICBlbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpLCBkZWZlcnJlZEltcG9ydCkKICAgICAgICA6IG5ldyBTdGF0aWNVc2UudHlwZWRDb25zdHJ1Y3Rvckludm9rZShjb25zdHJ1Y3RvciwgY2FsbFN0cnVjdHVyZSwKICAgICAgICAgICAgZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSwgZGVmZXJyZWRJbXBvcnQpKTsKICAgIGlmICh0eXBlLnR5cGVBcmd1bWVudHMuYW55KChpci5EYXJ0VHlwZSB0eXBlKSA9PiB0eXBlIGlzISBpci5EeW5hbWljVHlwZSkpIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5UWVBFX1ZBUklBQkxFX0JPVU5EU19DSEVDSyk7CiAgICB9CgogICAgaWYgKGNvbW1vbkVsZW1lbnRzLmlzU3ltYm9sQ29uc3RydWN0b3IoY29uc3RydWN0b3IpKSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuU1lNQk9MX0NPTlNUUlVDVE9SKTsKICAgIH0KCiAgICBpZiAodGFyZ2V0LmlzRXh0ZXJuYWwgJiYKICAgICAgICBjb25zdHJ1Y3Rvci5pc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yICYmCiAgICAgICAgIWlzQ29uc3QpIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5USFJPV19VTlNVUFBPUlRFRF9FUlJPUik7CiAgICAgIC8vIFdlIG5lZWQgdG8gcmVnaXN0ZXIgdGhlIGV4dGVybmFsIGNvbnN0cnVjdG9yIGFzIGxpdmUgYmVsb3csIHNvIGRvbid0CiAgICAgIC8vIHJldHVybiBoZXJlLgogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0SW5zdGFudGlhdGlvbihpci5DbGFzcyBjbHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0ID0gZWxlbWVudE1hcC5nZXRJbXBvcnQoaW1wb3J0KTsKICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuY3JlYXRlSW50ZXJmYWNlVHlwZShjbHMsIHR5cGVBcmd1bWVudHMpOwogICAgaW1wYWN0QnVpbGRlcgogICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuY29uc3RJbnN0YW50aWF0aW9uKHR5cGUsIGRlZmVycmVkSW1wb3J0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICBhc3NlcnQobm9kZS5pc0NvbnN0KTsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihub2RlLnRhcmdldCk7CiAgICBpZiAoY29tbW9uRWxlbWVudHMuaXNTeW1ib2xDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9CiAgICAgICAgICBlbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCk7CiAgICAgIGlmICghdmFsdWUuaXNTdHJpbmcpIHsKICAgICAgICAvLyBUT0RPKGhldCk6IEdldCB0aGUgYWN0dWFsIHNwYW4gZm9yIHRoZSBTeW1ib2wgY29uc3RydWN0b3IgYXJndW1lbnQKICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgIE1lc3NhZ2VLaW5kLlNUUklOR19FWFBFQ1RFRCwKICAgICAgICAgICAgeyd0eXBlJzogdmFsdWUuZ2V0VHlwZShlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzKX0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBTdHJpbmdDb25zdGFudFZhbHVlIHN0cmluZ1ZhbHVlID0gdmFsdWU7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJDb25zdFN5bWJvbE5hbWUoc3RyaW5nVmFsdWUuc3RyaW5nVmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN1cGVySW5pdGlhbGl6ZXIoCiAgICAgIGlyLkNvbnN0cnVjdG9yIHNvdXJjZSwKICAgICAgaXIuQ29uc3RydWN0b3IgdGFyZ2V0LAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSByZXdyaXRlIGBub2RlLnRhcmdldGAgdG8gcG9pbnQgdG8gYQogICAgLy8gc3ludGhlc2l6ZWQgdW5uYW1lZCBtaXhpbiBjb25zdHJ1Y3RvciB3aGVuIG5lZWRlZC4gVGhpcyB3b3VsZCByZXF1aXJlIHVzCiAgICAvLyB0byBjb25zaWRlciBpbXBhY3QgYnVpbGRpbmcgYSByZXF1aXJlZCBwcmUtc3RlcCBmb3IgaW5mZXJlbmNlIGFuZAogICAgLy8gc3NhLWJ1aWxkaW5nLgogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPQogICAgICAgIGVsZW1lbnRNYXAuZ2V0U3VwZXJDb25zdHJ1Y3Rvcihzb3VyY2UsIHRhcmdldCk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgICBjb25zdHJ1Y3RvciwKICAgICAgICBuZXcgQ2FsbFN0cnVjdHVyZShwb3NpdGlvbmFsQXJndW1lbnRzICsgbmFtZWRBcmd1bWVudHMubGVuZ3RoLAogICAgICAgICAgICBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cy5sZW5ndGgpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbigKICAgICAgaXIuUHJvY2VkdXJlIHByb2NlZHVyZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBGdW5jdGlvbkVudGl0eSB0YXJnZXQgPSBlbGVtZW50TWFwLmdldE1ldGhvZChwcm9jZWR1cmUpOwogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IENhbGxTdHJ1Y3R1cmUoCiAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cyArIG5hbWVkQXJndW1lbnRzLmxlbmd0aCwKICAgICAgICBuYW1lZEFyZ3VtZW50cywKICAgICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBMaXN0PERhcnRUeXBlPiBkYXJ0VHlwZUFyZ3VtZW50cyA9IF9nZXRUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpOwogICAgaWYgKGNvbW1vbkVsZW1lbnRzLmlzRXh0cmFjdFR5cGVBcmd1bWVudHModGFyZ2V0KSkgewogICAgICBfaGFuZGxlRXh0cmFjdFR5cGVBcmd1bWVudHModGFyZ2V0LCBkYXJ0VHlwZUFyZ3VtZW50cywgY2FsbFN0cnVjdHVyZSk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSB7CiAgICAgIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCA9IGVsZW1lbnRNYXAuZ2V0SW1wb3J0KGltcG9ydCk7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICB0YXJnZXQsIGNhbGxTdHJ1Y3R1cmUsIGRhcnRUeXBlQXJndW1lbnRzLCBkZWZlcnJlZEltcG9ydCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY0ludm9jYXRpb25Ob2RlKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgc3dpdGNoIChlbGVtZW50TWFwLmdldEZvcmVpZ25LaW5kKG5vZGUpKSB7CiAgICAgIGNhc2UgRm9yZWlnbktpbmQuSlM6CiAgICAgICAgaW1wYWN0QnVpbGRlcgogICAgICAgICAgICAucmVnaXN0ZXJOYXRpdmVEYXRhKGVsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0NhbGwobm9kZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEZvcmVpZ25LaW5kLkpTX0JVSUxUSU46CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3Rlck5hdGl2ZURhdGEoCiAgICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0J1aWx0aW5DYWxsKG5vZGUpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBGb3JlaWduS2luZC5KU19FTUJFRERFRF9HTE9CQUw6CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3Rlck5hdGl2ZURhdGEoCiAgICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0VtYmVkZGVkR2xvYmFsQ2FsbChub2RlKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRm9yZWlnbktpbmQuSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQ6CiAgICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlID0KICAgICAgICAgICAgZWxlbWVudE1hcC5nZXRJbnRlcmZhY2VUeXBlRm9ySnNJbnRlcmNlcHRvckNhbGwobm9kZSk7CiAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbih0eXBlKSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEZvcmVpZ25LaW5kLk5PTkU6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVFeHRyYWN0VHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSB0YXJnZXQsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgLy8gZXh0cmFjdFR5cGVBcmd1bWVudHM8TWFwPihvYmosIGZuKSBoYXMgYWRkaXRpb25hbCBpbXBhY3RzOgogICAgLy8KICAgIC8vICAgMS4gQWxsIGNsYXNzZXMgaW1wbGVtZW50aW5nIE1hcCBuZWVkIHRvIGNhcnJ5IHR5cGUgYXJndW1lbnRzIChzaW1pbGFyCiAgICAvLyAgICAgIHRvIGNoZWNraW5nIGBvIGlzIE1hcDxLLCBWPmApLgogICAgLy8KICAgIC8vICAgMi4gVGhlcmUgaXMgYW4gaW52b2NhdGlvbiBvZiBmbiB3aXRoIHNvbWUgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzLgogICAgLy8KICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UodGFyZ2V0LCBjYWxsU3RydWN0dXJlLCB0eXBlQXJndW1lbnRzKSk7CgogICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IDEpIHJldHVybjsKICAgIERhcnRUeXBlIG1hdGNoZWRUeXBlID0gdHlwZUFyZ3VtZW50cy5maXJzdDsKCiAgICBpZiAobWF0Y2hlZFR5cGUgaXMhIEludGVyZmFjZVR5cGUpIHJldHVybjsKICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IG1hdGNoZWRUeXBlOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CgogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayh0aGlzVHlwZSkpOwoKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yLmNhbGxDbG9zdXJlKAogICAgICAgIDAsIGNvbnN0IDxTdHJpbmc+W10sIHRoaXNUeXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgIG5ldyBEeW5hbWljVXNlKHNlbGVjdG9yLCBudWxsLCB0aGlzVHlwZS50eXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljVGVhck9mZigKICAgICAgaXIuUHJvY2VkdXJlIHByb2NlZHVyZSwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljVGVhck9mZigKICAgICAgICBlbGVtZW50TWFwLmdldE1ldGhvZChwcm9jZWR1cmUpLCBlbGVtZW50TWFwLmdldEltcG9ydChpbXBvcnQpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljR2V0KGlyLk1lbWJlciBtZW1iZXIsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0dldCgKICAgICAgICBlbGVtZW50TWFwLmdldE1lbWJlcihtZW1iZXIpLCBlbGVtZW50TWFwLmdldEltcG9ydChpbXBvcnQpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljU2V0KGlyLk1lbWJlciBtZW1iZXIsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY1NldCgKICAgICAgICBlbGVtZW50TWFwLmdldE1lbWJlcihtZW1iZXIpLCBlbGVtZW50TWFwLmdldEltcG9ydChpbXBvcnQpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3VwZXJJbnZvY2F0aW9uKGlyLk5hbWUgbmFtZSwgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgRnVuY3Rpb25FbnRpdHkgbWV0aG9kID0KICAgICAgICBlbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKGN1cnJlbnRNZW1iZXIsIG5hbWUsIHNldHRlcjogZmFsc2UpOwogICAgTGlzdDxEYXJ0VHlwZT4gZGFydFR5cGVBcmd1bWVudHMgPSBfZ2V0VHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzKTsKICAgIGlmIChtZXRob2QgIT0gbnVsbCkgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJJbnZva2UoCiAgICAgICAgICBtZXRob2QsCiAgICAgICAgICBuZXcgQ2FsbFN0cnVjdHVyZShwb3NpdGlvbmFsQXJndW1lbnRzICsgbmFtZWRBcmd1bWVudHMubGVuZ3RoLAogICAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzLmxlbmd0aCksCiAgICAgICAgICBkYXJ0VHlwZUFyZ3VtZW50cykpOwogICAgfSBlbHNlIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVySW52b2tlKAogICAgICAgICAgZWxlbWVudE1hcC5nZXRTdXBlck5vU3VjaE1ldGhvZChjdXJyZW50TWVtYmVyLmVuY2xvc2luZ0NsYXNzKSwKICAgICAgICAgIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlNVUEVSX05PX1NVQ0hfTUVUSE9EKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdXBlckdldChpci5OYW1lIG5hbWUpIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIGVsZW1lbnRNYXAuZ2V0U3VwZXJNZW1iZXIoY3VycmVudE1lbWJlciwgbmFtZSwgc2V0dGVyOiBmYWxzZSk7CiAgICBpZiAobWVtYmVyICE9IG51bGwpIHsKICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVyVGVhck9mZihtZW1iZXIpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJHZXQobWVtYmVyKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckludm9rZSgKICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0U3VwZXJOb1N1Y2hNZXRob2QoY3VycmVudE1lbWJlci5lbmNsb3NpbmdDbGFzcyksCiAgICAgICAgICBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5TVVBFUl9OT19TVUNIX01FVEhPRCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3VwZXJTZXQoaXIuTmFtZSBuYW1lKSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBlbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKGN1cnJlbnRNZW1iZXIsIG5hbWUsIHNldHRlcjogdHJ1ZSk7CiAgICBpZiAobWVtYmVyICE9IG51bGwpIHsKICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVyRmllbGRTZXQobWVtYmVyKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVyU2V0dGVyU2V0KG1lbWJlcikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJJbnZva2UoCiAgICAgICAgICBlbGVtZW50TWFwLmdldFN1cGVyTm9TdWNoTWV0aG9kKGN1cnJlbnRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MpLAogICAgICAgICAgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuU1VQRVJfTk9fU1VDSF9NRVRIT0QpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvY2FsRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICBpci5GdW5jdGlvbkRlY2xhcmF0aW9uIGxvY2FsRnVuY3Rpb24sCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlKAogICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMgKyBuYW1lZEFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgbmFtZWRBcmd1bWVudHMsCiAgICAgICAgdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgTGlzdDxEYXJ0VHlwZT4gZGFydFR5cGVBcmd1bWVudHMgPSBfZ2V0VHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzKTsKICAgIC8vIEludm9jYXRpb24gb2YgYSBsb2NhbCBmdW5jdGlvbi4gTm8gbmVlZCBmb3IgZHluYW1pYyB1c2UsIGJ1dAogICAgLy8gd2UgbmVlZCB0byB0cmFjayB0aGUgdHlwZSBhcmd1bWVudHMuCiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuY2xvc3VyZUNhbGwoCiAgICAgICAgZWxlbWVudE1hcC5nZXRMb2NhbEZ1bmN0aW9uKGxvY2FsRnVuY3Rpb24pLAogICAgICAgIGNhbGxTdHJ1Y3R1cmUsCiAgICAgICAgZGFydFR5cGVBcmd1bWVudHMpKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFlldCwgYWxhcywgd2UgbmVlZCB0aGUgZHluYW1pYyB1c2UgZm9yIG5vdy4gUmVtb3ZlCiAgICAvLyB0aGlzIHdoZW4ga2VybmVsIGFkZHMgYW4gYGlzRnVuY3Rpb25DYWxsYCBmbGFnIHRvCiAgICAvLyBbaXIuTWV0aG9kSW52b2NhdGlvbl0uCiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICBuZXcgRHluYW1pY1VzZShjYWxsU3RydWN0dXJlLmNhbGxTZWxlY3RvciwgbnVsbCwgZGFydFR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLAogICAgICBpci5OYW1lIG5hbWUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZWxlbWVudE1hcC5nZXRJbnZvY2F0aW9uU2VsZWN0b3IoCiAgICAgICAgbmFtZSwgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIExpc3Q8RGFydFR5cGU+IGRhcnRUeXBlQXJndW1lbnRzID0gX2dldFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cyk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZShzZWxlY3RvciwKICAgICAgICBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludChyZWNlaXZlclR5cGUsIHJlbGF0aW9uKSwgZGFydFR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJGdW5jdGlvbkludm9jYXRpb24oCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IENhbGxTdHJ1Y3R1cmUoCiAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cyArIG5hbWVkQXJndW1lbnRzLmxlbmd0aCwKICAgICAgICBuYW1lZEFyZ3VtZW50cywKICAgICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBMaXN0PERhcnRUeXBlPiBkYXJ0VHlwZUFyZ3VtZW50cyA9IF9nZXRUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2UoCiAgICAgICAgY2FsbFN0cnVjdHVyZS5jYWxsU2VsZWN0b3IsCiAgICAgICAgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQocmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uLnN1YnR5cGUpLAogICAgICAgIGRhcnRUeXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW5zdGFuY2VJbnZvY2F0aW9uKAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24sCiAgICAgIGlyLk1lbWJlciB0YXJnZXQsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIExpc3Q8RGFydFR5cGU+IGRhcnRUeXBlQXJndW1lbnRzID0gX2dldFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cyk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZSgKICAgICAgICBlbGVtZW50TWFwLmdldEludm9jYXRpb25TZWxlY3Rvcih0YXJnZXQubmFtZSwgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMubGVuZ3RoKSwKICAgICAgICBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludChyZWNlaXZlclR5cGUsIHJlbGF0aW9uKSwKICAgICAgICBkYXJ0VHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNHZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTmFtZSBuYW1lKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZSgKICAgICAgICBuZXcgU2VsZWN0b3IuZ2V0dGVyKGVsZW1lbnRNYXAuZ2V0TmFtZShuYW1lKSksCiAgICAgICAgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiksCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW5zdGFuY2VHZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTWVtYmVyIHRhcmdldCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2UoCiAgICAgICAgbmV3IFNlbGVjdG9yLmdldHRlcihlbGVtZW50TWFwLmdldE5hbWUodGFyZ2V0Lm5hbWUpKSwKICAgICAgICBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludChyZWNlaXZlclR5cGUsIHJlbGF0aW9uKSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEeW5hbWljU2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk5hbWUgbmFtZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2UoCiAgICAgICAgbmV3IFNlbGVjdG9yLnNldHRlcihlbGVtZW50TWFwLmdldE5hbWUobmFtZSkpLAogICAgICAgIF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24pLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckluc3RhbmNlU2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk1lbWJlciB0YXJnZXQpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKG5ldyBEeW5hbWljVXNlKAogICAgICAgIG5ldyBTZWxlY3Rvci5zZXR0ZXIoZWxlbWVudE1hcC5nZXROYW1lKHRhcmdldC5uYW1lKSksCiAgICAgICAgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiksCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUnVudGltZVR5cGVVc2UoaXIuUHJvcGVydHlHZXQgbm9kZSwgUnVudGltZVR5cGVVc2VLaW5kIGtpbmQsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlKSB7CiAgICBEYXJ0VHlwZSByZWNlaXZlckRhcnRUeXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShyZWNlaXZlclR5cGUpOwogICAgRGFydFR5cGUgYXJndW1lbnREYXJ0VHlwZSA9CiAgICAgICAgYXJndW1lbnRUeXBlID09IG51bGwgPyBudWxsIDogZWxlbWVudE1hcC5nZXREYXJ0VHlwZShhcmd1bWVudFR5cGUpOwoKICAgIGlmIChfb3B0aW9ucy5vbWl0SW1wbGljaXRDaGVja3MpIHsKICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOgogICAgICAgICAgaWYgKCFfb3B0aW9ucy5sYXhSdW50aW1lVHlwZVRvU3RyaW5nKSB7CiAgICAgICAgICAgIGlmIChyZWNlaXZlckRhcnRUeXBlID09IGNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpIHsKICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnRIaW50TWVzc2FnZShjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwKICAgICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuUlVOVElNRV9UWVBFX1RPX1NUUklOR19PQkpFQ1QpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEhpbnRNZXNzYWdlKAogICAgICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwKICAgICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuUlVOVElNRV9UWVBFX1RPX1NUUklOR19TVUJUWVBFLAogICAgICAgICAgICAgICAgICB7J3JlY2VpdmVyVHlwZSc6ICcke3JlY2VpdmVyRGFydFR5cGV9Lid9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOgogICAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnVua25vd246CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclJ1bnRpbWVUeXBlVXNlKAogICAgICAgIG5ldyBSdW50aW1lVHlwZVVzZShraW5kLCByZWNlaXZlckRhcnRUeXBlLCBhcmd1bWVudERhcnRUeXBlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXNzZXJ0KHtib29sIHdpdGhNZXNzYWdlfSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoCiAgICAgICAgd2l0aE1lc3NhZ2UgPyBGZWF0dXJlLkFTU0VSVF9XSVRIX01FU1NBR0UgOiBGZWF0dXJlLkFTU0VSVCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oCiAgICAgIGlyLkZ1bmN0aW9uVHlwZSBleHByZXNzaW9uVHlwZSwgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVHJhY2sgd2hpY2ggYXJpdGllcyBhcmUgdXNlZCBpbiBpbnN0YW50aWF0aW9uLgogICAgaW1wYWN0QnVpbGRlci5yZWdpc3Rlckluc3RhbnRpYXRpb24obmV3IEdlbmVyaWNJbnN0YW50aWF0aW9uKAogICAgICAgIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUoZXhwcmVzc2lvblR5cGUpLAogICAgICAgIHR5cGVBcmd1bWVudHMubWFwKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUpLnRvTGlzdCgpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RyaW5nQ29uY2F0ZW5hdGlvbigpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuU1RSSU5HX0lOVEVSUE9MQVRJT04pOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5TVFJJTkdfSlVYVEFQT1NJVElPTik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9jYWxGdW5jdGlvbihpci5UcmVlTm9kZSBub2RlKSB7CiAgICBMb2NhbCBmdW5jdGlvbiA9IGVsZW1lbnRNYXAuZ2V0TG9jYWxGdW5jdGlvbihub2RlKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5jbG9zdXJlKGZ1bmN0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9jYWxXaXRob3V0SW5pdGlhbGl6ZXIoKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLkxPQ0FMX1dJVEhPVVRfSU5JVElBTElaRVIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlcklzQ2hlY2soaXIuRGFydFR5cGUgdHlwZSkgewogICAgaW1wYWN0QnVpbGRlcgogICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayhlbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW1wbGljaXRDYXN0KGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKAogICAgICAgIG5ldyBUeXBlVXNlLmltcGxpY2l0Q2FzdChlbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXNDYXN0KGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmFzQ2FzdChlbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVGhyb3coKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlRIUk9XX0VYUFJFU1NJT04pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN5bmNGb3JJbihpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUsIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiBpdGVyYXRvckNsYXNzUmVsYXRpb24pIHsKICAgIE9iamVjdCByZWNlaXZlckNvbnN0cmFpbnQgPQogICAgICAgIF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KGl0ZXJhdG9yVHlwZSwgaXRlcmF0b3JDbGFzc1JlbGF0aW9uKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuU1lOQ19GT1JfSU4pOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgbmV3IER5bmFtaWNVc2UoU2VsZWN0b3JzLml0ZXJhdG9yLCByZWNlaXZlckNvbnN0cmFpbnQsIGNvbnN0IFtdKSk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICBuZXcgRHluYW1pY1VzZShTZWxlY3RvcnMuY3VycmVudCwgcmVjZWl2ZXJDb25zdHJhaW50LCBjb25zdCBbXSkpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgbmV3IER5bmFtaWNVc2UoU2VsZWN0b3JzLm1vdmVOZXh0LCByZWNlaXZlckNvbnN0cmFpbnQsIGNvbnN0IFtdKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXN5bmNGb3JJbihpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUsIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiBpdGVyYXRvckNsYXNzUmVsYXRpb24pIHsKICAgIE9iamVjdCByZWNlaXZlckNvbnN0cmFpbnQgPQogICAgICAgIF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KGl0ZXJhdG9yVHlwZSwgaXRlcmF0b3JDbGFzc1JlbGF0aW9uKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuQVNZTkNfRk9SX0lOKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgIG5ldyBEeW5hbWljVXNlKFNlbGVjdG9ycy5jYW5jZWwsIHJlY2VpdmVyQ29uc3RyYWludCwgY29uc3QgW10pKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgIG5ldyBEeW5hbWljVXNlKFNlbGVjdG9ycy5jdXJyZW50LCByZWNlaXZlckNvbnN0cmFpbnQsIGNvbnN0IFtdKSk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICBuZXcgRHluYW1pY1VzZShTZWxlY3RvcnMubW92ZU5leHQsIHJlY2VpdmVyQ29uc3RyYWludCwgY29uc3QgW10pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDYXRjaCgpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuQ0FUQ0hfU1RBVEVNRU5UKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGFja1RyYWNlKCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5TVEFDS19UUkFDRV9JTl9DQVRDSCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2F0Y2hUeXBlKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmNhdGNoVHlwZShlbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVHlwZUxpdGVyYWwoaXIuRGFydFR5cGUgdHlwZSwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgPSBlbGVtZW50TWFwLmdldEltcG9ydChpbXBvcnQpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgbmV3IFR5cGVVc2UudHlwZUxpdGVyYWwoZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSwgZGVmZXJyZWRJbXBvcnQpKTsKICAgIGlmICh0eXBlIGlzIGlyLkZ1bmN0aW9uVHlwZSkgewogICAgICBhc3NlcnQodHlwZS50eXBlZGVmICE9IG51bGwpOwogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYW4gd2UgYXZvaWQgdGhlIHR5cGVkZWYgdHlwZSBhbHRvZ2V0aGVyPwogICAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSB0eXBlZGVmIGlzIGxpdmUuCiAgICAgIGVsZW1lbnRNYXAuZ2V0VHlwZWRlZlR5cGUodHlwZS50eXBlZGVmKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJGaWVsZEluaXRpYWxpemF0aW9uKGlyLkZpZWxkIG5vZGUpIHsKICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5maWVsZEluaXQoZWxlbWVudE1hcC5nZXRGaWVsZChub2RlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckZpZWxkQ29uc3RhbnRJbml0aWFsaXphdGlvbigKICAgICAgaXIuRmllbGQgbm9kZSwgQ29uc3RhbnRSZWZlcmVuY2UgY29uc3RhbnQpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5maWVsZENvbnN0YW50SW5pdCgKICAgICAgICBlbGVtZW50TWFwLmdldEZpZWxkKG5vZGUpLAogICAgICAgIF9jb25zdGFudFZhbHVlZmllci52aXNpdENvbnN0YW50KGNvbnN0YW50LmNvbnN0YW50KSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBDb25zdHJ1Y3RvckVudGl0eSB0YXJnZXQgPSBlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckNvbnN0cnVjdG9ySW52b2tlKAogICAgICAgIHRhcmdldCwKICAgICAgICBuZXcgQ2FsbFN0cnVjdHVyZShwb3NpdGlvbmFsQXJndW1lbnRzICsgbmFtZWRBcmd1bWVudHMubGVuZ3RoLAogICAgICAgICAgICBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cy5sZW5ndGgpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9hZExpYnJhcnkoKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLmxvYWREZWZlcnJlZExpYnJhcnksIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5MT0FEX0xJQlJBUlkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN3aXRjaFN0YXRlbWVudE5vZGUoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIC8vIFRPRE8oMzI1NTcpOiBSZW1vdmUgdGhpcyB3aGVuIGlzc3VlIDMyNTU3IGlzIGZpeGVkLgogICAgaXIuVHJlZU5vZGUgZmlyc3RDYXNlOwogICAgRGFydFR5cGUgZmlyc3RDYXNlVHlwZTsKICAgIERpYWdub3N0aWNNZXNzYWdlIGVycm9yOwogICAgTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSA8RGlhZ25vc3RpY01lc3NhZ2U+W107CgogICAgYm9vbCBvdmVycmlkZXNFcXVhbHMoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IGNvbW1vbkVsZW1lbnRzLnN5bWJvbEltcGxlbWVudGF0aW9uVHlwZSkgewogICAgICAgIC8vIFRyZWF0IHN5bWJvbCBjb25zdGFudHMgYXMgaWYgU3ltYm9sIGRvZXNuJ3Qgb3ZlcnJpZGUgYD09YC4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gdHlwZS5lbGVtZW50OwogICAgICB3aGlsZSAoY2xzICE9IG51bGwpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICAgICAgZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQubG9va3VwQ2xhc3NNZW1iZXIoY2xzLCAnPT0nKTsKICAgICAgICBpZiAobWVtYmVyLmlzQWJzdHJhY3QpIHsKICAgICAgICAgIGNscyA9IGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG1lbWJlci5lbmNsb3NpbmdDbGFzcyAhPSBjb21tb25FbGVtZW50cy5vYmplY3RDbGFzczsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGZvciAoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlIGluIG5vZGUuY2FzZXMpIHsKICAgICAgZm9yIChpci5FeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gc3dpdGNoQ2FzZS5leHByZXNzaW9ucykgewogICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBlbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUoZXhwcmVzc2lvbik7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IHZhbHVlLmdldFR5cGUoZWxlbWVudE1hcC5jb21tb25FbGVtZW50cyk7CiAgICAgICAgaWYgKGZpcnN0Q2FzZVR5cGUgPT0gbnVsbCkgewogICAgICAgICAgZmlyc3RDYXNlID0gZXhwcmVzc2lvbjsKICAgICAgICAgIGZpcnN0Q2FzZVR5cGUgPSB0eXBlOwoKICAgICAgICAgIC8vIFdlIG9ubHkgcmVwb3J0IHRoZSBiYWQgdHlwZSBvbiB0aGUgZmlyc3QgY2xhc3MgZWxlbWVudC4gQWxsIG90aGVycwogICAgICAgICAgLy8gZ2V0IGEgInR5cGUgZGlmZmVycyIgZXJyb3IuCiAgICAgICAgICBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlKSB7CiAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGV4cHJlc3Npb24pLAogICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVkFMVUVfT1ZFUlJJREVTX0VRVUFMUywKICAgICAgICAgICAgICAgIHsndHlwZSc6ICJkb3VibGUifSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gY29tbW9uRWxlbWVudHMuZnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZShjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwKICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX0ZPUkJJRERFTiwgeyd0eXBlJzogIkZ1bmN0aW9uIn0pOwogICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc09iamVjdCAmJgogICAgICAgICAgICAgIHR5cGUgIT0gY29tbW9uRWxlbWVudHMudHlwZUxpdGVyYWxUeXBlICYmCiAgICAgICAgICAgICAgb3ZlcnJpZGVzRXF1YWxzKHR5cGUpKSB7CiAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGZpcnN0Q2FzZSksCiAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9WQUxVRV9PVkVSUklERVNfRVFVQUxTLAogICAgICAgICAgICAgICAgeyd0eXBlJzogdHlwZX0pOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAodHlwZSAhPSBmaXJzdENhc2VUeXBlKSB7CiAgICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSByZXBvcnRlci5jcmVhdGVNZXNzYWdlKAogICAgICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwKICAgICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMLAogICAgICAgICAgICAgICAgICB7J3R5cGUnOiBmaXJzdENhc2VUeXBlfSk7CiAgICAgICAgICAgICAgaW5mb3MuYWRkKHJlcG9ydGVyLmNyZWF0ZU1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGZpcnN0Q2FzZSksCiAgICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTF9DQVNFLAogICAgICAgICAgICAgICAgICB7J3R5cGUnOiBmaXJzdENhc2VUeXBlfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGluZm9zLmFkZChyZXBvcnRlci5jcmVhdGVNZXNzYWdlKAogICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoZXhwcmVzc2lvbiksCiAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUxfQ0FTRSwKICAgICAgICAgICAgICAgIHsndHlwZSc6IHR5cGV9KSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoZXJyb3IgIT0gbnVsbCkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvcihlcnJvciwgaW5mb3MpOwogICAgfQogIH0KfQqDjABOTjwBKDUBGR8kIigjJCEfHCErGyEaHikpIhpIKiMkHykbATg0JQw0DCcMJQwiDCQsDC4BFxcaFRUtGR9ORSEBDEIBDEYBDDgBDDE9AgFILUAMNAwnDCUMIgwkDC4BTC5OAQxIAQxCAQxGAUovNBwaBAIBTCFFICMlIjIqJSgsASU6LEU2FQhIQgYRBAEMNDQbRwYEAT4kNwQBDB03BAEMKyIZSTlQKkUlQyxFLEVROSYUUQYEAQw9PU1QKkUlQyxFLEVOPyYGBAEMMzZAMCs7BAEMMDJAMys7BAEMNDdAOSs7BAEMNztLUCpFJUMsRSxFTj0mBgQBDCcrSwQBDC1QBAEMKU4EAQwtUAQBDC0yBAEMH0kEAQw0JjpGHRwEAQwzJjhFHRwEAQxGJjggUR0cBAEMFBgdHyMnIxhHNTUYH0AsSzpLPFFJBgE7QQYBHTQURk4WBgQBDFElQE0SUAQBDE8aTDscSB1OJScpQRAIL0YGBAEMIR0dHyMpRlBJFSQ4ShVHNQQBDCEeHyMnJT01NRgfSTlNDg1CQkYGBAEMQC8bFk4PIypBDysqSA8wHUMcSgoPHQ8GBAE6Q0IHTysHTQclSwErMAEvLy1NAUIBMj0mQQQBDB49QUkEAQxKPUYEAQxKPUYEAQxGRhxHSRpBEkk1Hw1BSSNDBgQBDCgaRxofTQ9JCA1BSSNDBgQBDCgaRhocTg9PCA1BSSNDBgQBDCgsHyMpNTUYH0lELD80Fx1POR4mTgQBDCIgHhQfIyk6Skk+UQQBDCMgHyMpNTUYH0k1JEkdBAEMIyAeGB8jKUk1SzM8HQQBDBtINTc8HgQBDBxMNT48HgQBDBtINTc8HgQBDBxMNT48HgQBDEw8RiBMAScWKDJBTj4VKjc+PQ4MESgpEQgGKkcEAQwsI0UEAQwlSUtCMD4EAQwnQUEEAQwxOEYEAQwrRgQBDCsSTQQBDDAjQQQBDCoSTAQBDBk9BAEMTS0gSTgmSyZKJksEAQxOLSBJOSZJJkomSwQBDBk8BAEMHkEEAQwtEk8EAQxMQCNQIyRINS8GBAEMNBJQBAEMLDNFIz8EAQwnIh8jKUdKEEc1BAEMH0BFOQQBDD47GxwdOwEvPUYWCCYcHkghQhFGCggUBgEzQUdCJSIgAVApMyk7QCU8TUonOCcpOkAhDBEnIS43OywwPEAtDi47PiIMCggGGSoGBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9rZXJuZWxfaW1wYWN0LmRhcnQuc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL2xvZ2dpbmcuZGFydKDSLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvZmVhdHVyZXMuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CgovLy8gTG9nIHVzZWQgZm9yIHVuaXQgdGVzdGluZyBvcHRpbWl6YXRpb25zLgpjbGFzcyBPcHRpbWl6YXRpb25UZXN0TG9nIHsKICBMaXN0PE9wdGltaXphdGlvbkxvZ0VudHJ5PiBlbnRyaWVzID0gW107CgogIE1hcDxTdHJpbmcsIFNldDxISW5zdHJ1Y3Rpb24+PiBfdW5jb252ZXJ0ZWQ7CgogIEZlYXR1cmVzIF9yZWdpc3RlcihTdHJpbmcgdGFnLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQsCiAgICAgIHZvaWQgZihGZWF0dXJlcyBmZWF0dXJlcykpIHsKICAgIGlmIChjb252ZXJ0ZWQgPT0gbnVsbCkgewogICAgICBfdW5jb252ZXJ0ZWQgPz89IHt9OwogICAgICBTZXQ8SEluc3RydWN0aW9uPiBzZXQgPSBfdW5jb252ZXJ0ZWRbdGFnXSA/Pz0gbmV3IFNldDxISW5zdHJ1Y3Rpb24+KCk7CiAgICAgIGlmICghc2V0LmFkZChvcmlnaW5hbCkpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGYoZmVhdHVyZXMpOwogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KHRhZywgZmVhdHVyZXMpKTsKICAgIHJldHVybiBmZWF0dXJlczsKICB9CgogIHZvaWQgcmVnaXN0ZXJGaWVsZEdldChISW52b2tlRHluYW1pY0dldHRlciBvcmlnaW5hbCwgSEZpZWxkR2V0IGNvbnZlcnRlZCkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGlmIChjb252ZXJ0ZWQuZWxlbWVudCAhPSBudWxsKSB7CiAgICAgIGZlYXR1cmVzWyduYW1lJ10gPQogICAgICAgICAgJyR7Y29udmVydGVkLmVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZX0uJHtjb252ZXJ0ZWQuZWxlbWVudC5uYW1lfSc7CiAgICB9IGVsc2UgewogICAgICBmZWF0dXJlc1snbmFtZSddID0gJzxudWxsLWd1YXJkPic7CiAgICB9CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ0ZpZWxkR2V0JywgZmVhdHVyZXMpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJGaWVsZFNldChISW52b2tlRHluYW1pY1NldHRlciBvcmlnaW5hbCwgW0hGaWVsZFNldCBjb252ZXJ0ZWRdKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgaWYgKGNvbnZlcnRlZCAhPSBudWxsKSB7CiAgICAgIGZlYXR1cmVzWyduYW1lJ10gPQogICAgICAgICAgJyR7Y29udmVydGVkLmVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZX0uJHtjb252ZXJ0ZWQuZWxlbWVudC5uYW1lfSc7CiAgICB9IGVsc2UgewogICAgICBmZWF0dXJlc1sncmVtb3ZlZCddID0gb3JpZ2luYWwuc2VsZWN0b3IubmFtZTsKICAgIH0KICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnRmllbGRTZXQnLCBmZWF0dXJlcykpOwogIH0KCiAgdm9pZCByZWdpc3RlckZpZWxkQ2FsbChISW52b2tlRHluYW1pY01ldGhvZCBvcmlnaW5hbCwgSEZpZWxkR2V0IGNvbnZlcnRlZCkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGlmIChjb252ZXJ0ZWQuZWxlbWVudCAhPSBudWxsKSB7CiAgICAgIGZlYXR1cmVzWyduYW1lJ10gPQogICAgICAgICAgJyR7Y29udmVydGVkLmVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZX0uJHtjb252ZXJ0ZWQuZWxlbWVudC5uYW1lfSc7CiAgICB9IGVsc2UgewogICAgICBmZWF0dXJlc1snbmFtZSddID0gJzxudWxsLWd1YXJkPic7CiAgICB9CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ0ZpZWxkQ2FsbCcsIGZlYXR1cmVzKSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRGaWVsZEdldCgKICAgICAgSEludm9rZUR5bmFtaWNHZXR0ZXIgb3JpZ2luYWwsIEZpZWxkRW50aXR5IGZpZWxkLCBIQ29uc3RhbnQgY29udmVydGVkKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgZmVhdHVyZXNbJ25hbWUnXSA9ICcke2ZpZWxkLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7ZmllbGQubmFtZX0nOwogICAgZmVhdHVyZXNbJ3ZhbHVlJ10gPSBjb252ZXJ0ZWQuY29uc3RhbnQudG9TdHJ1Y3R1cmVkVGV4dCgpOwogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdDb25zdGFudEZpZWxkR2V0JywgZmVhdHVyZXMpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdGFudEZpZWxkQ2FsbCgKICAgICAgSEludm9rZUR5bmFtaWNNZXRob2Qgb3JpZ2luYWwsIEZpZWxkRW50aXR5IGZpZWxkLCBIQ29uc3RhbnQgY29udmVydGVkKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgZmVhdHVyZXNbJ25hbWUnXSA9ICcke2ZpZWxkLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7ZmllbGQubmFtZX0nOwogICAgZmVhdHVyZXNbJ3ZhbHVlJ10gPSBjb252ZXJ0ZWQuY29uc3RhbnQudG9TdHJ1Y3R1cmVkVGV4dCgpOwogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdDb25zdGFudEZpZWxkQ2FsbCcsIGZlYXR1cmVzKSk7CiAgfQoKICBGZWF0dXJlcyBfcmVnaXN0ZXJTcGVjaWFsaXplcigKICAgICAgSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQsIFN0cmluZyBuYW1lLAogICAgICBbU3RyaW5nIHVuY29udmVydGVkTmFtZV0pIHsKICAgIGFzc2VydCghKGNvbnZlcnRlZCA9PSBudWxsICYmIHVuY29udmVydGVkTmFtZSA9PSBudWxsKSk7CiAgICByZXR1cm4gX3JlZ2lzdGVyKCdTcGVjaWFsaXplcicsIG9yaWdpbmFsLCBjb252ZXJ0ZWQsIChGZWF0dXJlcyBmZWF0dXJlcykgewogICAgICBpZiAoY29udmVydGVkICE9IG51bGwpIHsKICAgICAgICBmZWF0dXJlcy5hZGQobmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmVhdHVyZXMuYWRkKHVuY29udmVydGVkTmFtZSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCByZWdpc3RlckluZGV4QXNzaWduKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBISW5kZXhBc3NpZ24gY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnSW5kZXhBc3NpZ24nKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJJbmRleChISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEluZGV4IGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0luZGV4Jyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQml0Tm90KEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIQml0Tm90IGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0JpdE5vdCcpOwogIH0KCiAgdm9pZCByZWdpc3RlclVuYXJ5TmVnYXRlKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBITmVnYXRlIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ05lZ2F0ZScpOwogIH0KCiAgdm9pZCByZWdpc3RlckFicyhISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEFicyBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdBYnMnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJBZGQoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhBZGQgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnQWRkJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRGl2aWRlKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIRGl2aWRlIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0RpdmlkZScpOwogIH0KCiAgdm9pZCByZWdpc3Rlck1vZHVsbyhISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgW0hSZW1haW5kZXIgY29udmVydGVkXSkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ01vZHVsbycsICdEeW5hbWljTW9kdWxvJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyUmVtYWluZGVyKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIUmVtYWluZGVyIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ1JlbWFpbmRlcicpOwogIH0KCiAgdm9pZCByZWdpc3Rlck11bHRpcGx5KEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBITXVsdGlwbHkgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnTXVsdGlwbHknKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTdWJ0cmFjdChISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSFN1YnRyYWN0IGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ1N1YnRyYWN0Jyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyVHJ1bmNhdGluZ0RpdmlkZSgKICAgICAgSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhUcnVuY2F0aW5nRGl2aWRlIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ1RydW5jYXRpbmdEaXZpZGUnLAogICAgICAgICdUcnVuY2F0aW5nRGl2aWRlLiR7b3JpZ2luYWwuc2VsZWN0b3IubmFtZX0nKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTaGlmdExlZnQoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhTaGlmdExlZnQgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnU2hpZnRMZWZ0JywKICAgICAgICAnU2hpZnRMZWZ0LiR7b3JpZ2luYWwuc2VsZWN0b3IubmFtZX0nKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTaGlmdFJpZ2h0KEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIU2hpZnRSaWdodCBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdTaGlmdFJpZ2h0JywKICAgICAgICAnU2hpZnRSaWdodC4ke29yaWdpbmFsLnNlbGVjdG9yLm5hbWV9Jyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQml0T3IoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhCaXRPciBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdCaXRPcicpOwogIH0KCiAgdm9pZCByZWdpc3RlckJpdEFuZChISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEJpdEFuZCBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdCaXRBbmQnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJCaXRYb3IoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhCaXRYb3IgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnQml0WG9yJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRXF1YWxzKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBISWRlbnRpdHkgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnRXF1YWxzJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTGVzcyhISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSExlc3MgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnTGVzcycpOwogIH0KCiAgdm9pZCByZWdpc3RlckdyZWF0ZXIoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhHcmVhdGVyIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0dyZWF0ZXInKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJMZXNzRXF1YWwoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhMZXNzRXF1YWwgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnTGVzc0VxdWFscycpOwogIH0KCiAgdm9pZCByZWdpc3RlckdyZWF0ZXJFcXVhbChISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEdyZWF0ZXJFcXVhbCBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdHcmVhdGVyRXF1YWxzJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29kZVVuaXRBdChISW52b2tlRHluYW1pYyBvcmlnaW5hbCkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGZlYXR1cmVzWyduYW1lJ10gPSBvcmlnaW5hbC5zZWxlY3Rvci5uYW1lOwogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdDb2RlVW5pdEF0JywgZmVhdHVyZXMpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb21wYXJlVG8oSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIFtIQ29uc3RhbnQgY29udmVydGVkXSkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGlmIChjb252ZXJ0ZWQgIT0gbnVsbCkgewogICAgICBmZWF0dXJlc1snY29uc3RhbnQnXSA9IGNvbnZlcnRlZC5jb25zdGFudC50b0RhcnRUZXh0KCk7CiAgICB9CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ0NvbXBhcmVUbycsIGZlYXR1cmVzKSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3Vic3RyaW5nKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdTdWJzdHJpbmcnLCBmZWF0dXJlcykpOwogIH0KCiAgdm9pZCByZWdpc3RlclRyaW0oSEludm9rZUR5bmFtaWMgb3JpZ2luYWwpIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ1RyaW0nLCBmZWF0dXJlcykpOwogIH0KCiAgdm9pZCByZWdpc3RlclBhdHRlcm5NYXRjaChISW52b2tlRHluYW1pYyBvcmlnaW5hbCkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnUGF0dGVybk1hdGNoJywgZmVhdHVyZXMpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJSb3VuZChISW52b2tlRHluYW1pYyBvcmlnaW5hbCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIG51bGwsIG51bGwsICdSb3VuZCcpOwogIH0KCiAgdm9pZCByZWdpc3RlclByaW1pdGl2ZUNoZWNrKEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSFByaW1pdGl2ZUNoZWNrIGNoZWNrKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwoKICAgIGlmIChjaGVjay5pc1JlY2VpdmVyVHlwZUNoZWNrKSB7CiAgICAgIGZlYXR1cmVzWydraW5kJ10gPSAncmVjZWl2ZXInOwogICAgfSBlbHNlIGlmIChjaGVjay5pc0FyZ3VtZW50VHlwZUNoZWNrKSB7CiAgICAgIGZlYXR1cmVzWydraW5kJ10gPSAnYXJndW1lbnQnOwogICAgfQogICAgaWYgKGNoZWNrLnR5cGVFeHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgZmVhdHVyZXNbJ3R5cGUnXSA9ICcke2NoZWNrLnR5cGVFeHByZXNzaW9ufSc7CiAgICB9CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ1ByaW1pdGl2ZUNoZWNrJywgZmVhdHVyZXMpKTsKICB9CgogIFN0cmluZyBnZXRUZXh0KCkgewogICAgcmV0dXJuIGVudHJpZXMuam9pbignLFxuJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnT3B0aW1pemF0aW9uTG9nKCR7Z2V0VGV4dCgpfSknOwp9CgovLy8gQSByZWdpc3RlcmVkIG9wdGltaXphdGlvbi4KY2xhc3MgT3B0aW1pemF0aW9uTG9nRW50cnkgewogIC8vLyBTdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBvcHRpbWl6YXRpb24ga2luZC4KICBmaW5hbCBTdHJpbmcgdGFnOwoKICAvLy8gQWRkaXRpb25hbCBkYXRhIGZvciB0aGlzIG9wdGltaXphdGlvbi4KICBmaW5hbCBGZWF0dXJlcyBmZWF0dXJlczsKCiAgT3B0aW1pemF0aW9uTG9nRW50cnkodGhpcy50YWcsIHRoaXMuZmVhdHVyZXMpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHRhZygke2ZlYXR1cmVzLmdldFRleHQoKX0pJzsKfQqA/QBOTjwBJDYVAS0cKwEvAVAjHRtNIBUIBigROhUEAU4oJRlQDSkGQQQBUCgdGVANNAZBBAFPKCUZUA0pBkIEASFPKEU/SQQBIk8oRT9KBAEhRCI9Tx8cDycICAQBTj4EAUI4BAFEOQQBSTkEAT42BAE+NgQBRDkEAUlKBAFKPAQBSDsEAUg7BAEhPkI3BAFKOzAEAUw8MQQBQjgEAUQ5BAFEOQQBRjkEAUA3BAFGOgQBSj0EAVBABAE1KC9DBAFLKB0+BkIEATQoQgQBLyg9BAE3KEUEATA5BAFOKAElJSwlBig0BkcEARUgBAEMOAIBHx09FAEtGwExAQw2AgElcGFja2FnZTpjb21waWxlci9zcmMvc3NhL2xvZ2dpbmcuZGFydEhzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2xpdGVyYWxfZW50cnlfaW5mb19pbXBsLmRhcnSfyS8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JzsKaW1wb3J0ICdsaXRlcmFsX2VudHJ5X2luZm8uZGFydCc7CmltcG9ydCAncGFyc2VyLmRhcnQnOwppbXBvcnQgJ3V0aWwuZGFydCc7CgovLy8gW2lmQ29uZGl0aW9uXSBpcyB0aGUgZmlyc3Qgc3RlcCBmb3IgcGFyc2luZyBhIGxpdGVyYWwgZW50cnkKLy8vIHN0YXJ0aW5nIHdpdGggYGlmYCBjb250cm9sIGZsb3cuCmNvbnN0IExpdGVyYWxFbnRyeUluZm8gaWZDb25kaXRpb24gPSBjb25zdCBJZkNvbmRpdGlvbigpOwoKLy8vIFtzcHJlYWRPcGVyYXRvcl0gaXMgdGhlIGZpcnN0IHN0ZXAgZm9yIHBhcnNpbmcgYSBsaXRlcmFsIGVudHJ5Ci8vLyBwcmVjZWRlZCBieSBhICcuLi4nIHNwcmVhZCBvcGVyYXRvci4KY29uc3QgTGl0ZXJhbEVudHJ5SW5mbyBzcHJlYWRPcGVyYXRvciA9IGNvbnN0IFNwcmVhZE9wZXJhdG9yKCk7CgovLy8gVGhlIGZpcnN0IHN0ZXAgd2hlbiBwcm9jZXNzaW5nIGEgYGZvcmAgY29udHJvbCBmbG93IGNvbGxlY3Rpb24gZW50cnkuCmNsYXNzIEZvckNvbmRpdGlvbiBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGJvb2wgaW5TdHlsZTsKCiAgRm9yQ29uZGl0aW9uKCkgOiBzdXBlcihmYWxzZSwgMCk7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIFRva2VuIGF3YWl0VG9rZW47CiAgICBpZiAob3B0aW9uYWwoJ2F3YWl0JywgbmV4dCkpIHsKICAgICAgYXdhaXRUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgICBmaW5hbCBmb3JUb2tlbiA9IG5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2ZvcicsIGZvclRva2VuKSk7CiAgICBwYXJzZXIubGlzdGVuZXIuYmVnaW5Gb3JDb250cm9sRmxvdyhhd2FpdFRva2VuLCBmb3JUb2tlbik7CgogICAgdG9rZW4gPSBwYXJzZXIucGFyc2VGb3JMb29wUGFydHNTdGFydChhd2FpdFRva2VuLCBmb3JUb2tlbik7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRm9yTG9vcFBhcnRzTWlkKHRva2VuLCBhd2FpdFRva2VuLCBmb3JUb2tlbik7CgogICAgaWYgKG9wdGlvbmFsKCdpbicsIHRva2VuLm5leHQpIHx8IG9wdGlvbmFsKCc6JywgdG9rZW4ubmV4dCkpIHsKICAgICAgLy8gUHJvY2VzcyBgZm9yICggLi4uIGluIC4uLiApYAogICAgICBpblN0eWxlID0gdHJ1ZTsKICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VGb3JJbkxvb3BQYXJ0c1Jlc3QoCiAgICAgICAgICB0b2tlbiwgYXdhaXRUb2tlbiwgZm9yVG9rZW4sIGlkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUHJvY2VzcyBgZm9yICggLi4uIDsgLi4uIDsgLi4uIClgCiAgICAgIGluU3R5bGUgPSBmYWxzZTsKICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VGb3JMb29wUGFydHNSZXN0KHRva2VuLCBmb3JUb2tlbiwgYXdhaXRUb2tlbik7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnZm9yJywgbmV4dCkgfHwKICAgICAgICAob3B0aW9uYWwoJ2F3YWl0JywgbmV4dCkgJiYgb3B0aW9uYWwoJ2ZvcicsIG5leHQubmV4dCkpKSB7CiAgICAgIHJldHVybiBuZXcgTmVzdGVkKAogICAgICAgIG5ldyBGb3JDb25kaXRpb24oKSwKICAgICAgICBpblN0eWxlID8gY29uc3QgRm9ySW5Db21wbGV0ZSgpIDogY29uc3QgRm9yQ29tcGxldGUoKSwKICAgICAgKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2lmJywgbmV4dCkpIHsKICAgICAgcmV0dXJuIG5ldyBOZXN0ZWQoCiAgICAgICAgaWZDb25kaXRpb24sCiAgICAgICAgaW5TdHlsZSA/IGNvbnN0IEZvckluQ29tcGxldGUoKSA6IGNvbnN0IEZvckNvbXBsZXRlKCksCiAgICAgICk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCcuLi4nLCBuZXh0KSB8fCBvcHRpb25hbCgnLi4uPycsIG5leHQpKSB7CiAgICAgIHJldHVybiBpblN0eWxlID8gY29uc3QgRm9ySW5TcHJlYWQoKSA6IGNvbnN0IEZvclNwcmVhZCgpOwogICAgfQogICAgcmV0dXJuIGluU3R5bGUgPyBjb25zdCBGb3JJbkVudHJ5KCkgOiBjb25zdCBGb3JFbnRyeSgpOwogIH0KfQoKLy8vIEEgc3RlcCBmb3IgcGFyc2luZyBhIHNwcmVhZCBjb2xsZWN0aW9uCi8vLyBhcyB0aGUgImZvciIgY29udHJvbCBmbG93J3MgZXhwcmVzc2lvbi4KY2xhc3MgRm9yU3ByZWFkIGV4dGVuZHMgU3ByZWFkT3BlcmF0b3IgewogIGNvbnN0IEZvclNwcmVhZCgpOwoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gY29uc3QgRm9yQ29tcGxldGUoKTsKICB9Cn0KCi8vLyBBIHN0ZXAgZm9yIHBhcnNpbmcgYSBzcHJlYWQgY29sbGVjdGlvbgovLy8gYXMgdGhlICJmb3ItaW4iIGNvbnRyb2wgZmxvdydzIGV4cHJlc3Npb24uCmNsYXNzIEZvckluU3ByZWFkIGV4dGVuZHMgU3ByZWFkT3BlcmF0b3IgewogIGNvbnN0IEZvckluU3ByZWFkKCk7CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBjb25zdCBGb3JJbkNvbXBsZXRlKCk7CiAgfQp9CgovLy8gQSBzdGVwIGZvciBwYXJzaW5nIGEgbGl0ZXJhbCBsaXN0LCBzZXQsIG9yIG1hcCBlbnRyeQovLy8gYXMgdGhlICJmb3IiIGNvbnRyb2wgZmxvdydzIGV4cHJlc3Npb24uCmNsYXNzIEZvckVudHJ5IGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgRm9yRW50cnkoKSA6IHN1cGVyKHRydWUsIDApOwoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gY29uc3QgRm9yQ29tcGxldGUoKTsKICB9Cn0KCi8vLyBBIHN0ZXAgZm9yIHBhcnNpbmcgYSBsaXRlcmFsIGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5Ci8vLyBhcyB0aGUgImZvci1pbiIgY29udHJvbCBmbG93J3MgZXhwcmVzc2lvbi4KY2xhc3MgRm9ySW5FbnRyeSBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IEZvckluRW50cnkoKSA6IHN1cGVyKHRydWUsIDApOwoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gY29uc3QgRm9ySW5Db21wbGV0ZSgpOwogIH0KfQoKY2xhc3MgRm9yQ29tcGxldGUgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBGb3JDb21wbGV0ZSgpIDogc3VwZXIoZmFsc2UsIDApOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgcGFyc2VyLmxpc3RlbmVyLmVuZEZvckNvbnRyb2xGbG93KHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9Cn0KCmNsYXNzIEZvckluQ29tcGxldGUgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBGb3JJbkNvbXBsZXRlKCkgOiBzdXBlcihmYWxzZSwgMCk7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBwYXJzZXIubGlzdGVuZXIuZW5kRm9ySW5Db250cm9sRmxvdyh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQp9CgovLy8gVGhlIGZpcnN0IHN0ZXAgd2hlbiBwcm9jZXNzaW5nIGFuIGBpZmAgY29udHJvbCBmbG93IGNvbGxlY3Rpb24gZW50cnkuCmNsYXNzIElmQ29uZGl0aW9uIGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgSWZDb25kaXRpb24oKSA6IHN1cGVyKGZhbHNlLCAxKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIGZpbmFsIGlmVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdpZicsIGlmVG9rZW4pKTsKICAgIHBhcnNlci5saXN0ZW5lci5iZWdpbklmQ29udHJvbEZsb3coaWZUb2tlbik7CiAgICBUb2tlbiByZXN1bHQgPSBwYXJzZXIuZW5zdXJlUGFyZW50aGVzaXplZENvbmRpdGlvbihpZlRva2VuKTsKICAgIHBhcnNlci5saXN0ZW5lci5iZWdpblRoZW5Db250cm9sRmxvdyhyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCdmb3InLCBuZXh0KSB8fAogICAgICAgIChvcHRpb25hbCgnYXdhaXQnLCBuZXh0KSAmJiBvcHRpb25hbCgnZm9yJywgbmV4dC5uZXh0KSkpIHsKICAgICAgcmV0dXJuIG5ldyBOZXN0ZWQobmV3IEZvckNvbmRpdGlvbigpLCBjb25zdCBJZkNvbXBsZXRlKCkpOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnaWYnLCBuZXh0KSkgewogICAgICByZXR1cm4gbmV3IE5lc3RlZChpZkNvbmRpdGlvbiwgY29uc3QgSWZDb21wbGV0ZSgpKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJy4uLicsIG5leHQpIHx8IG9wdGlvbmFsKCcuLi4/JywgbmV4dCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IElmU3ByZWFkKCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSWZFbnRyeSgpOwogIH0KfQoKLy8vIEEgc3RlcCBmb3IgcGFyc2luZyBhIHNwcmVhZCBjb2xsZWN0aW9uCi8vLyBhcyB0aGUgYGlmYCBjb250cm9sIGZsb3cncyB0aGVuLWV4cHJlc3Npb24uCmNsYXNzIElmU3ByZWFkIGV4dGVuZHMgU3ByZWFkT3BlcmF0b3IgewogIGNvbnN0IElmU3ByZWFkKCk7CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pID0+IGNvbnN0IElmQ29tcGxldGUoKTsKfQoKLy8vIEEgc3RlcCBmb3IgcGFyc2luZyBhIGxpdGVyYWwgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkKLy8vIGFzIHRoZSBgaWZgIGNvbnRyb2wgZmxvdydzIHRoZW4tZXhwcmVzc2lvbi4KY2xhc3MgSWZFbnRyeSBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IElmRW50cnkoKSA6IHN1cGVyKHRydWUsIDApOwoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSA9PiBjb25zdCBJZkNvbXBsZXRlKCk7Cn0KCmNsYXNzIElmQ29tcGxldGUgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBJZkNvbXBsZXRlKCkgOiBzdXBlcihmYWxzZSwgMCk7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBpZiAoIW9wdGlvbmFsKCdlbHNlJywgdG9rZW4ubmV4dCkpIHsKICAgICAgcGFyc2VyLmxpc3RlbmVyLmVuZElmQ29udHJvbEZsb3codG9rZW4pOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG9wdGlvbmFsKCdlbHNlJywgdG9rZW4ubmV4dCkgPyBjb25zdCBJZkVsc2UoKSA6IG51bGw7CiAgfQp9CgovLy8gQSBzdGVwIGZvciBwYXJzaW5nIHRoZSBgZWxzZWAgcG9ydGlvbiBvZiBhbiBgaWZgIGNvbnRyb2wgZmxvdy4KY2xhc3MgSWZFbHNlIGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgSWZFbHNlKCkgOiBzdXBlcihmYWxzZSwgLTEpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gZWxzZVRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZWxzZScsIGVsc2VUb2tlbikpOwogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZUVsc2VDb250cm9sRmxvdyhlbHNlVG9rZW4pOwogICAgcmV0dXJuIGVsc2VUb2tlbjsKICB9CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChvcHRpb25hbCgnZWxzZScsIHRva2VuKSk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnZm9yJywgbmV4dCkgfHwKICAgICAgICAob3B0aW9uYWwoJ2F3YWl0JywgbmV4dCkgJiYgb3B0aW9uYWwoJ2ZvcicsIG5leHQubmV4dCkpKSB7CiAgICAgIHJldHVybiBuZXcgTmVzdGVkKG5ldyBGb3JDb25kaXRpb24oKSwgY29uc3QgSWZFbHNlQ29tcGxldGUoKSk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdpZicsIG5leHQpKSB7CiAgICAgIHJldHVybiBuZXcgTmVzdGVkKGlmQ29uZGl0aW9uLCBjb25zdCBJZkVsc2VDb21wbGV0ZSgpKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJy4uLicsIG5leHQpIHx8IG9wdGlvbmFsKCcuLi4/JywgbmV4dCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IEVsc2VTcHJlYWQoKTsKICAgIH0KICAgIHJldHVybiBjb25zdCBFbHNlRW50cnkoKTsKICB9Cn0KCmNsYXNzIEVsc2VTcHJlYWQgZXh0ZW5kcyBTcHJlYWRPcGVyYXRvciB7CiAgY29uc3QgRWxzZVNwcmVhZCgpOwoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gY29uc3QgSWZFbHNlQ29tcGxldGUoKTsKICB9Cn0KCmNsYXNzIEVsc2VFbnRyeSBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IEVsc2VFbnRyeSgpIDogc3VwZXIodHJ1ZSwgMCk7CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBjb25zdCBJZkVsc2VDb21wbGV0ZSgpOwogIH0KfQoKY2xhc3MgSWZFbHNlQ29tcGxldGUgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBJZkVsc2VDb21wbGV0ZSgpIDogc3VwZXIoZmFsc2UsIDApOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgcGFyc2VyLmxpc3RlbmVyLmVuZElmRWxzZUNvbnRyb2xGbG93KHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9Cn0KCi8vLyBUaGUgZmlyc3Qgc3RlcCB3aGVuIHByb2Nlc3NpbmcgYSBzcHJlYWQgZW50cnkuCmNsYXNzIFNwcmVhZE9wZXJhdG9yIGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgU3ByZWFkT3BlcmF0b3IoKSA6IHN1cGVyKGZhbHNlLCAwKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIGZpbmFsIG9wZXJhdG9yID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnLi4uJywgb3BlcmF0b3IpIHx8IG9wdGlvbmFsKCcuLi4/Jywgb3BlcmF0b3IpKTsKICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihvcGVyYXRvcik7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlU3ByZWFkRXhwcmVzc2lvbihvcGVyYXRvcik7CiAgICByZXR1cm4gdG9rZW47CiAgfQp9CgpjbGFzcyBOZXN0ZWQgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBMaXRlcmFsRW50cnlJbmZvIG5lc3RlZFN0ZXA7CiAgZmluYWwgTGl0ZXJhbEVudHJ5SW5mbyBsYXN0U3RlcDsKCiAgTmVzdGVkKHRoaXMubmVzdGVkU3RlcCwgdGhpcy5sYXN0U3RlcCkgOiBzdXBlcihmYWxzZSwgMCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGhhc0VudHJ5ID0+IG5lc3RlZFN0ZXAuaGFzRW50cnk7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PiBuZXN0ZWRTdGVwLnBhcnNlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICBuZXN0ZWRTdGVwID0gbmVzdGVkU3RlcC5jb21wdXRlTmV4dCh0b2tlbik7CiAgICByZXR1cm4gbmVzdGVkU3RlcCAhPSBudWxsID8gdGhpcyA6IGxhc3RTdGVwOwogIH0KfQqBIwBNTjwBIyIWFAFAJToBQylAAUouEAEkAQwsHRYjIRkGGyc/AUEjRgFDJhYuNA0rF0kGEgQBDC4dIUMZHD8JJxkVPwlCQAY8BAIBKywpFQEMLiAEAgErLysXAQwuIgQCATksKiUBDC4gBAIBOS8sJwEMLiIEAgEtKQEMLC4SBAIBLysBDCwwEgQCAUotKQEMLCAlMUEyEwQBDC4dIUNBJzpCHwYcBAIBKzAoFAEMQwIBOTApJAEMQwIBLCgBDCwpLwYSBAEMLkEEAgFDKCUBDCwiKTYWBAEMLiUdIUNFJz5CIQYeBAIBKhYBDC4jBAIBKyYBDC4jBAIBMCwBDCwxEgQCATMwLAEMLCFFLjYSBAIBKB8jATwBDCwBDE4BDC4wMQQCAT9wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2xpdGVyYWxfZW50cnlfaW5mb19pbXBsLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci90eXBlX2luZm9faW1wbC5kYXJ0wACNjy8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci50eXBlX2luZm9faW1wbDsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFN5bnRoZXRpY1Rva2VuLCBUb2tlbiwgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBhcyBmYXN0YTsKCmltcG9ydCAnLi4vc2Nhbm5lci90b2tlbl9jb25zdGFudHMuZGFydCcgc2hvdyBJREVOVElGSUVSX1RPS0VOOwoKaW1wb3J0ICcuLi91dGlsL2xpbmsuZGFydCcgc2hvdyBMaW5rOwoKaW1wb3J0ICdmb3J3YXJkaW5nX2xpc3RlbmVyLmRhcnQnIHNob3cgRm9yd2FyZGluZ0xpc3RlbmVyOwoKaW1wb3J0ICdpZGVudGlmaWVyX2NvbnRleHQuZGFydCcgc2hvdyBJZGVudGlmaWVyQ29udGV4dDsKCmltcG9ydCAnbWVtYmVyX2tpbmQuZGFydCcgc2hvdyBNZW1iZXJLaW5kOwoKaW1wb3J0ICdsaXN0ZW5lci5kYXJ0JyBzaG93IExpc3RlbmVyOwoKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgppbXBvcnQgJ3R5cGVfaW5mby5kYXJ0JzsKCmltcG9ydCAndXRpbC5kYXJ0JwogICAgc2hvdwogICAgICAgIG9wdGlvbmFsLAogICAgICAgIHNraXBNZXRhZGF0YSwKICAgICAgICBzcGxpdEd0RXEsCiAgICAgICAgc3BsaXRHdEZyb21HdEd0RXEsCiAgICAgICAgc3BsaXRHdEZyb21HdEd0R3QsCiAgICAgICAgc3BsaXRHdEZyb21HdEd0R3RFcSwKICAgICAgICBzcGxpdEd0R3QsCiAgICAgICAgc3ludGhldGljR3Q7CgovLy8gW1NpbXBsZVR5cGVdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVJbmZvXSByZXR1cm5lZCBieSBbY29tcHV0ZVR5cGVdCi8vLyB3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIGlkZW50aWZpZXIgYXMgdGhlIHR5cGUgcmVmZXJlbmNlLgpjb25zdCBUeXBlSW5mbyBzaW1wbGVUeXBlID0gY29uc3QgU2ltcGxlVHlwZSgpOwoKLy8vIFtTaW1wbGVOdWxsYWJsZVR5cGVdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVJbmZvXSByZXR1cm5lZCBieSBbY29tcHV0ZVR5cGVdCi8vLyB3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgYD9gIGFzIHRoZSB0eXBlIHJlZmVyZW5jZS4KY29uc3QgVHlwZUluZm8gc2ltcGxlTnVsbGFibGVUeXBlID0gY29uc3QgU2ltcGxlTnVsbGFibGVUeXBlKCk7CgovLy8gW1ByZWZpeGVkVHlwZV0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZUluZm9dIHJldHVybmVkIGJ5IFtjb21wdXRlVHlwZV0KLy8vIHdoZW4gdGhlIHR5cGUgcmVmZXJlbmNlIGlzIG9mIHRoZSBmb3JtOiBpZGVudGlmaWVyIGAuYCBpZGVudGlmaWVyLgpjb25zdCBUeXBlSW5mbyBwcmVmaXhlZFR5cGUgPSBjb25zdCBQcmVmaXhlZFR5cGUoKTsKCi8vLyBbU2ltcGxlVHlwZVdpdGgxQXJndW1lbnRdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVJbmZvXSByZXR1cm5lZCBieQovLy8gW2NvbXB1dGVUeXBlXSB3aGVuIHRoZSB0eXBlIHJlZmVyZW5jZSBpcyBvZiB0aGUgZm9ybToKLy8vIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYD5gLgpjb25zdCBUeXBlSW5mbyBzaW1wbGVUeXBlV2l0aDFBcmd1bWVudCA9CiAgICBjb25zdCBTaW1wbGVUeXBlV2l0aDFBcmd1bWVudChzaW1wbGVUeXBlQXJndW1lbnQxKTsKCi8vLyBbU2ltcGxlVHlwZVdpdGgxQXJndW1lbnRdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVJbmZvXSByZXR1cm5lZCBieQovLy8gW2NvbXB1dGVUeXBlXSB3aGVuIHRoZSB0eXBlIHJlZmVyZW5jZSBpcyBvZiB0aGUgZm9ybToKLy8vIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYD49YC4KY29uc3QgVHlwZUluZm8gc2ltcGxlVHlwZVdpdGgxQXJndW1lbnRHdEVxID0KICAgIGNvbnN0IFNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50KHNpbXBsZVR5cGVBcmd1bWVudDFHdEVxKTsKCi8vLyBbU2ltcGxlVHlwZVdpdGgxQXJndW1lbnRdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVJbmZvXSByZXR1cm5lZCBieQovLy8gW2NvbXB1dGVUeXBlXSB3aGVuIHRoZSB0eXBlIHJlZmVyZW5jZSBpcyBvZiB0aGUgZm9ybToKLy8vIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYD4+YC4KY29uc3QgVHlwZUluZm8gc2ltcGxlVHlwZVdpdGgxQXJndW1lbnRHdEd0ID0KICAgIGNvbnN0IFNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50KHNpbXBsZVR5cGVBcmd1bWVudDFHdEd0KTsKCi8vLyBbU2ltcGxlTnVsbGFibGVUeXBlV2l0aDFBcmd1bWVudF0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZUluZm9dIHJldHVybmVkIGJ5Ci8vLyBbY29tcHV0ZVR5cGVdIHdoZW4gdGhlIHR5cGUgcmVmZXJlbmNlIGlzIG9mIHRoZSBmb3JtOgovLy8gaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBgPmAgYD9gLgpjb25zdCBUeXBlSW5mbyBzaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50ID0KICAgIGNvbnN0IFNpbXBsZU51bGxhYmxlVHlwZVdpdGgxQXJndW1lbnQoKTsKCi8vLyBbU2ltcGxlVHlwZUFyZ3VtZW50MV0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZVBhcmFtT3JBcmdJbmZvXSByZXR1cm5lZCBieQovLy8gW2NvbXB1dGVUeXBlUGFyYW1PckFyZ10gd2hlbiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgb2YgdGhlIGZvcm06Ci8vLyBgPGAgaWRlbnRpZmllciBgPmAuCmNvbnN0IFR5cGVQYXJhbU9yQXJnSW5mbyBzaW1wbGVUeXBlQXJndW1lbnQxID0gY29uc3QgU2ltcGxlVHlwZUFyZ3VtZW50MSgpOwoKLy8vIFtTaW1wbGVUeXBlQXJndW1lbnQxXSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlUGFyYW1PckFyZ0luZm9dIHJldHVybmVkIGJ5Ci8vLyBbY29tcHV0ZVR5cGVQYXJhbU9yQXJnXSB3aGVuIHRoZSB0eXBlIHJlZmVyZW5jZSBpcyBvZiB0aGUgZm9ybToKLy8vIGA8YCBpZGVudGlmaWVyIGA+PWAuCmNvbnN0IFR5cGVQYXJhbU9yQXJnSW5mbyBzaW1wbGVUeXBlQXJndW1lbnQxR3RFcSA9CiAgICBjb25zdCBTaW1wbGVUeXBlQXJndW1lbnQxR3RFcSgpOwoKLy8vIFtTaW1wbGVUeXBlQXJndW1lbnQxXSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlUGFyYW1PckFyZ0luZm9dIHJldHVybmVkIGJ5Ci8vLyBbY29tcHV0ZVR5cGVQYXJhbU9yQXJnXSB3aGVuIHRoZSB0eXBlIHJlZmVyZW5jZSBpcyBvZiB0aGUgZm9ybToKLy8vIGA8YCBpZGVudGlmaWVyIGA+PmAuCmNvbnN0IFR5cGVQYXJhbU9yQXJnSW5mbyBzaW1wbGVUeXBlQXJndW1lbnQxR3RHdCA9CiAgICBjb25zdCBTaW1wbGVUeXBlQXJndW1lbnQxR3RHdCgpOwoKLy8vIFNlZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBbbm9UeXBlXSBjb25zdC4KY2xhc3MgTm9UeXBlIGltcGxlbWVudHMgVHlwZUluZm8gewogIGNvbnN0IE5vVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgYXNOb25OdWxsYWJsZSA9PiB0aGlzOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb3VsZEJlRXhwcmVzc2lvbiA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgIHRva2VuLm5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUeXBlKTsKICAgIHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICAgIHJldHVybiBzaW1wbGVUeXBlLnBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVPclZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIGVuc3VyZVR5cGVOb3RWb2lkKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZU5vVHlwZSh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwVHlwZShUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIHRva2VuOwogIH0KfQoKLy8vIFNlZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBbcHJlZml4ZWRUeXBlXSBjb25zdC4KY2xhc3MgUHJlZml4ZWRUeXBlIGltcGxlbWVudHMgVHlwZUluZm8gewogIGNvbnN0IFByZWZpeGVkVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgYXNOb25OdWxsYWJsZSA9PiB0aGlzOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb3VsZEJlRXhwcmVzc2lvbiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlT3JWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBzdGFydCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydCh0b2tlbi5pc0tleXdvcmRPcklkZW50aWZpZXIpOwogICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBwYXJzZXIubGlzdGVuZXI7CiAgICBsaXN0ZW5lci5oYW5kbGVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5wcmVmaXhlZFR5cGVSZWZlcmVuY2UpOwoKICAgIFRva2VuIHBlcmlvZCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnLicsIHRva2VuKSk7CgogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KHRva2VuLmlzS2V5d29yZE9ySWRlbnRpZmllcik7CiAgICBsaXN0ZW5lci5oYW5kbGVJZGVudGlmaWVyKAogICAgICAgIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlUmVmZXJlbmNlQ29udGludWF0aW9uKTsKICAgIGxpc3RlbmVyLmhhbmRsZVF1YWxpZmllZChwZXJpb2QpOwoKICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50cyh0b2tlbi5uZXh0KTsKICAgIGxpc3RlbmVyLmhhbmRsZVR5cGUoc3RhcnQsIG51bGwpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcFR5cGUoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiB0b2tlbi5uZXh0Lm5leHQubmV4dDsKICB9Cn0KCi8vLyBTZWUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgW3NpbXBsZU51bGxhYmxlVHlwZVdpdGgxQXJndW1lbnRdIGNvbnN0LgpjbGFzcyBTaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50IGV4dGVuZHMgU2ltcGxlVHlwZVdpdGgxQXJndW1lbnQgewogIGNvbnN0IFNpbXBsZU51bGxhYmxlVHlwZVdpdGgxQXJndW1lbnQoKSA6IHN1cGVyKHNpbXBsZVR5cGVBcmd1bWVudDEpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgYXNOb25OdWxsYWJsZSA9PiBzaW1wbGVUeXBlV2l0aDFBcmd1bWVudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGVSZXN0KFRva2VuIHN0YXJ0LCBUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc/JywgdG9rZW4pKTsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVUeXBlKHN0YXJ0LCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwVHlwZShUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSBzdXBlci5za2lwVHlwZSh0b2tlbikubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPycsIHRva2VuKSk7CiAgICByZXR1cm4gdG9rZW47CiAgfQp9CgovLy8gU2VlIGRvY3VtZW50YXRpb24gb24gdGhlIFtzaW1wbGVUeXBlV2l0aDFBcmd1bWVudF0gY29uc3QuCmNsYXNzIFNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50IGltcGxlbWVudHMgVHlwZUluZm8gewogIGZpbmFsIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlQXJnOwoKICBjb25zdCBTaW1wbGVUeXBlV2l0aDFBcmd1bWVudCh0aGlzLnR5cGVBcmcpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgYXNOb25OdWxsYWJsZSA9PiB0aGlzOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb3VsZEJlRXhwcmVzc2lvbiA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU9yVm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gc3RhcnQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQodG9rZW4uaXNLZXl3b3JkT3JJZGVudGlmaWVyKTsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlUmVmZXJlbmNlKTsKICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgcGFyc2VyKTsKICAgIHJldHVybiBwYXJzZVR5cGVSZXN0KHN0YXJ0LCB0b2tlbiwgcGFyc2VyKTsKICB9CgogIFRva2VuIHBhcnNlVHlwZVJlc3QoVG9rZW4gc3RhcnQsIFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlVHlwZShzdGFydCwgbnVsbCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwVHlwZShUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KHRva2VuLmlzS2V5d29yZE9ySWRlbnRpZmllcik7CiAgICByZXR1cm4gdHlwZUFyZy5za2lwKHRva2VuKTsKICB9Cn0KCi8vLyBTZWUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgW3NpbXBsZU51bGxhYmxlVHlwZV0gY29uc3QuCmNsYXNzIFNpbXBsZU51bGxhYmxlVHlwZSBleHRlbmRzIFNpbXBsZVR5cGUgewogIGNvbnN0IFNpbXBsZU51bGxhYmxlVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgYXNOb25OdWxsYWJsZSA9PiBzaW1wbGVUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IHRydWU7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZVJlc3QoVG9rZW4gc3RhcnQsIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIHRva2VuID0gc3RhcnQubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPycsIHRva2VuKSk7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlVHlwZShzdGFydCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcFR5cGUoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiB0b2tlbi5uZXh0Lm5leHQ7CiAgfQp9CgovLy8gU2VlIGRvY3VtZW50YXRpb24gb24gdGhlIFtzaW1wbGVUeXBlXSBjb25zdC4KY2xhc3MgU2ltcGxlVHlwZSBpbXBsZW1lbnRzIFR5cGVJbmZvIHsKICBjb25zdCBTaW1wbGVUeXBlKCk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCBhc05vbk51bGxhYmxlID0+IHRoaXM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvdWxkQmVFeHByZXNzaW9uID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVPclZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGUoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpc1ZhbGlkVHlwZVJlZmVyZW5jZSh0b2tlbikpOwogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnR5cGVSZWZlcmVuY2UpOwogICAgdG9rZW4gPSBub1R5cGVQYXJhbU9yQXJnLnBhcnNlQXJndW1lbnRzKHRva2VuLCBwYXJzZXIpOwogICAgcmV0dXJuIHBhcnNlVHlwZVJlc3QodG9rZW4sIHBhcnNlcik7CiAgfQoKICBUb2tlbiBwYXJzZVR5cGVSZXN0KFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlVHlwZSh0b2tlbiwgbnVsbCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwVHlwZShUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIHRva2VuLm5leHQ7CiAgfQp9CgovLy8gU2VlIGRvY3VtZW50YXRpb24gb24gdGhlIFt2b2lkVHlwZV0gY29uc3QuCmNsYXNzIFZvaWRUeXBlIGltcGxlbWVudHMgVHlwZUluZm8gewogIGNvbnN0IFZvaWRUeXBlKCk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCBhc05vbk51bGxhYmxlID0+IHRoaXM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvdWxkQmVFeHByZXNzaW9uID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgLy8gUmVwb3J0IGFuIGVycm9yLCB0aGVuIHBhcnNlIGB2b2lkYCBhcyBpZiBpdCB3ZXJlIGEgdHlwZSBuYW1lLgogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4ubmV4dCwgZmFzdGEubWVzc2FnZUludmFsaWRWb2lkKTsKICAgIHJldHVybiBzaW1wbGVUeXBlLnBhcnNlVHlwZU5vdFZvaWQodG9rZW4sIHBhcnNlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlT3JWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIGVuc3VyZVR5cGVOb3RWb2lkKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGUoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVWb2lkS2V5d29yZCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwVHlwZShUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIHRva2VuLm5leHQ7CiAgfQp9Cgpib29sIGxvb2tzTGlrZU5hbWUoVG9rZW4gdG9rZW4pID0+CiAgICB0b2tlbi5raW5kID09IElERU5USUZJRVJfVE9LRU4gfHwKICAgIG9wdGlvbmFsKCd0aGlzJywgdG9rZW4pIHx8CiAgICAodG9rZW4uaXNJZGVudGlmaWVyICYmCiAgICAgICAgLy8gQWx0aG91Z2ggYHR5cGVkZWZgIGlzIGEgbGVnYWwgaWRlbnRpZmllciwKICAgICAgICAvLyB0eXBlIGB0eXBlZGVmYCBpZGVudGlmaWVyIGlzIG5vdCBsZWdhbCBhbmQgaW4gdGhpcyBzaXR1YXRpb24KICAgICAgICAvLyBgdHlwZWRlZmAgaXMgcHJvYmFibHkgYSBzZXBhcmF0ZSBkZWNsYXJhdGlvbi4KICAgICAgICAoIW9wdGlvbmFsKCd0eXBlZGVmJywgdG9rZW4pIHx8ICF0b2tlbi5uZXh0LmlzSWRlbnRpZmllcikpOwoKLy8vIFdoZW4gbWlzc2luZyBhIGNvbW1hLCBkZXRlcm1pbmUgaWYgdGhlIGdpdmVuIHRva2VuIGxvb2tzIGxpa2UgaXQgc2hvdWxkCi8vLyBiZSBwYXJ0IG9mIGEgY29sbGVjdGlvbiBvZiB0eXBlIHBhcmFtZXRlcnMgb3IgYXJndW1lbnRzLgpib29sIGxvb2tzTGlrZVR5cGVQYXJhbU9yQXJnKGJvb2wgaW5EZWNsYXJhdGlvbiwgVG9rZW4gdG9rZW4pIHsKICBpZiAoaW5EZWNsYXJhdGlvbiAmJiB0b2tlbi5raW5kID09IElERU5USUZJRVJfVE9LRU4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5leHQua2luZCA9PSBJREVOVElGSUVSX1RPS0VOIHx8CiAgICAgICAgb3B0aW9uYWwoJywnLCBuZXh0KSB8fAogICAgICAgIGlzQ2xvc2VyKG5leHQpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KCi8vLyBJbnN0YW5jZXMgb2YgW0NvbXBsZXhUeXBlSW5mb10gYXJlIHJldHVybmVkIGJ5IFtjb21wdXRlVHlwZV0gdG8gcmVwcmVzZW50Ci8vLyB0eXBlIHJlZmVyZW5jZXMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgdGhlIGNvbnN0YW50cyBhYm92ZS4KY2xhc3MgQ29tcGxleFR5cGVJbmZvIGltcGxlbWVudHMgVHlwZUluZm8gewogIC8vLyBUaGUgZmlyc3QgdG9rZW4gaW4gdGhlIHR5cGUgcmVmZXJlbmNlLgogIFRva2VuIHN0YXJ0OwoKICAvLy8gVHlwZSBhcmd1bWVudHMgd2VyZSBzZWVuIGR1cmluZyBhbmFseXNpcy4KICBmaW5hbCBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZ3VtZW50czsKCiAgLy8vIFRoZSB0b2tlbiBiZWZvcmUgdGhlIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmsgb3IgYG51bGxgIGlmIGVpdGhlcgogIC8vLyAxKSB0aGVyZSBpcyBubyB0cmFpbGluZyBxdWVzdGlvbiBtYXJrLCBvcgogIC8vLyAyKSB0aGUgdHJhaWxpbmcgcXVlc3Rpb24gbWFyayBpcyBub3QgcGFydCBvZiB0aGUgdHlwZSByZWZlcmVuY2UuCiAgVG9rZW4gYmVmb3JlUXVlc3Rpb25NYXJrOwoKICAvLy8gVGhlIGxhc3QgdG9rZW4gaW4gdGhlIHR5cGUgcmVmZXJlbmNlLgogIFRva2VuIGVuZDsKCiAgLy8vIFRoZSBgRnVuY3Rpb25gIHRva2VucyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHR5cGUgdmFyaWFibGVzIG9mIGZ1bmN0aW9uIHR5cGVzCiAgLy8vIGFzIHNlZW4gZHVyaW5nIGFuYWx5c2lzLgogIExpbms8VG9rZW4+IHR5cGVWYXJpYWJsZVN0YXJ0ZXJzID0gY29uc3QgTGluazxUb2tlbj4oKTsKCiAgLy8vIElmIHRoZSByZWNlaXZlciByZXByZXNlbnRzIGEgZ2VuZXJhbGl6ZWQgZnVuY3Rpb24gdHlwZSB0aGVuIHRoaXMgaW5kaWNhdGVzCiAgLy8vIHdoZXRoZXIgaXQgaGFzIGEgcmV0dXJuIHR5cGUsIG90aGVyd2lzZSB0aGlzIGlzIGBudWxsYC4KICBib29sIGdmdEhhc1JldHVyblR5cGU7CgogIENvbXBsZXhUeXBlSW5mbyhUb2tlbiBiZWZvcmVTdGFydCwgdGhpcy50eXBlQXJndW1lbnRzKQogICAgICA6IHRoaXMuc3RhcnQgPSBiZWZvcmVTdGFydC5uZXh0IHsKICAgIGFzc2VydCh0eXBlQXJndW1lbnRzICE9IG51bGwpOwogIH0KCiAgQ29tcGxleFR5cGVJbmZvLl9ub25OdWxsYWJsZSh0aGlzLnN0YXJ0LCB0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMuZW5kLAogICAgICB0aGlzLnR5cGVWYXJpYWJsZVN0YXJ0ZXJzLCB0aGlzLmdmdEhhc1JldHVyblR5cGUpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgYXNOb25OdWxsYWJsZSB7CiAgICByZXR1cm4gYmVmb3JlUXVlc3Rpb25NYXJrID09IG51bGwKICAgICAgICA/IHRoaXMKICAgICAgICA6IG5ldyBDb21wbGV4VHlwZUluZm8uX25vbk51bGxhYmxlKHN0YXJ0LCB0eXBlQXJndW1lbnRzLAogICAgICAgICAgICBiZWZvcmVRdWVzdGlvbk1hcmssIHR5cGVWYXJpYWJsZVN0YXJ0ZXJzLCBnZnRIYXNSZXR1cm5UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvdWxkQmVFeHByZXNzaW9uID0+CiAgICAgIHR5cGVBcmd1bWVudHMgPT0gbm9UeXBlUGFyYW1PckFyZyAmJiB0eXBlVmFyaWFibGVTdGFydGVycy5pc0VtcHR5OwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IGJlZm9yZVF1ZXN0aW9uTWFyayAhPSBudWxsOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlT3JWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHRva2VuLm5leHQsIHN0YXJ0KSk7CgogICAgaWYgKG9wdGlvbmFsKCcuJywgc3RhcnQpKSB7CiAgICAgIC8vIFJlY292ZXJ5OiBJbnNlcnQgbWlzc2luZyBpZGVudGlmaWVyIHdpdGhvdXQgc2VuZGluZyBldmVudHMKICAgICAgc3RhcnQgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICAgIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5wcmVmaXhlZFR5cGVSZWZlcmVuY2UpOwogICAgfQoKICAgIGZpbmFsIHR5cGVWYXJpYWJsZUVuZEdyb3VwcyA9IDxUb2tlbj5bXTsKICAgIGZvciAoTGluazxUb2tlbj4gdCA9IHR5cGVWYXJpYWJsZVN0YXJ0ZXJzOyB0LmlzTm90RW1wdHk7IHQgPSB0LnRhaWwpIHsKICAgICAgdHlwZVZhcmlhYmxlRW5kR3JvdXBzLmFkZCgKICAgICAgICAgIGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0LmhlYWQsIHRydWUpLnBhcnNlVmFyaWFibGVzKHQuaGVhZCwgcGFyc2VyKSk7CiAgICAgIHBhcnNlci5saXN0ZW5lci5iZWdpbkZ1bmN0aW9uVHlwZShzdGFydCk7CiAgICB9CgogICAgaWYgKGdmdEhhc1JldHVyblR5cGUgPT0gZmFsc2UpIHsKICAgICAgLy8gQSBmdW5jdGlvbiB0eXBlIHdpdGhvdXQgcmV0dXJuIHR5cGUuCiAgICAgIC8vIFB1c2ggdGhlIG5vbi1leGlzdGluZyByZXR1cm4gdHlwZSBmaXJzdC4gVGhlIGxvb3AgYmVsb3cgd2lsbAogICAgICAvLyBnZW5lcmF0ZSB0aGUgZnVsbCB0eXBlLgogICAgICBub1R5cGUucGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwogICAgfSBlbHNlIHsKICAgICAgVG9rZW4gdHlwZVJlZk9yUHJlZml4ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCd2b2lkJywgdHlwZVJlZk9yUHJlZml4KSkgewogICAgICAgIHRva2VuID0gdm9pZFR5cGUucGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghb3B0aW9uYWwoJy4nLCB0eXBlUmVmT3JQcmVmaXgpICYmCiAgICAgICAgICAgICFvcHRpb25hbCgnLicsIHR5cGVSZWZPclByZWZpeC5uZXh0KSkgewogICAgICAgICAgdG9rZW4gPQogICAgICAgICAgICAgIHBhcnNlci5lbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlUmVmZXJlbmNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdG9rZW4gPSBwYXJzZXIuZW5zdXJlSWRlbnRpZmllcigKICAgICAgICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQucHJlZml4ZWRUeXBlUmVmZXJlbmNlKTsKICAgICAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlUXVhbGlmaWVkUmVzdCgKICAgICAgICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQudHlwZVJlZmVyZW5jZUNvbnRpbnVhdGlvbik7CiAgICAgICAgICBpZiAodG9rZW4uaXNTeW50aGV0aWMgJiYgZW5kID09IHR5cGVSZWZPclByZWZpeC5uZXh0KSB7CiAgICAgICAgICAgIC8vIFJlY292ZXJ5OiBVcGRhdGUgYGVuZGAgaWYgYSBzeW50aGV0aWMgaWRlbnRpZmllciB3YXMgaW5zZXJ0ZWQuCiAgICAgICAgICAgIGVuZCA9IHRva2VuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0b2tlbiA9IHR5cGVBcmd1bWVudHMucGFyc2VBcmd1bWVudHModG9rZW4sIHBhcnNlcik7CgogICAgICAgIC8vIE9ubHkgY29uc3VtZSB0aGUgYD9gIGlmIGl0IGlzIHBhcnQgb2YgdGhlIGNvbXBsZXggdHlwZQogICAgICAgIFRva2VuIHF1ZXN0aW9uTWFyayA9IHRva2VuLm5leHQ7CiAgICAgICAgaWYgKG9wdGlvbmFsKCc/JywgcXVlc3Rpb25NYXJrKSAmJgogICAgICAgICAgICAodHlwZVZhcmlhYmxlRW5kR3JvdXBzLmlzTm90RW1wdHkgfHwgYmVmb3JlUXVlc3Rpb25NYXJrICE9IG51bGwpKSB7CiAgICAgICAgICB0b2tlbiA9IHF1ZXN0aW9uTWFyazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcXVlc3Rpb25NYXJrID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVUeXBlKHR5cGVSZWZPclByZWZpeCwgcXVlc3Rpb25NYXJrKTsKICAgICAgfQogICAgfQoKICAgIGludCBlbmRHcm91cEluZGV4ID0gdHlwZVZhcmlhYmxlRW5kR3JvdXBzLmxlbmd0aCAtIDE7CiAgICBmb3IgKExpbms8VG9rZW4+IHQgPSB0eXBlVmFyaWFibGVTdGFydGVyczsgdC5pc05vdEVtcHR5OyB0ID0gdC50YWlsKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgYXNzZXJ0KG9wdGlvbmFsKCdGdW5jdGlvbicsIHRva2VuKSk7CiAgICAgIFRva2VuIGZ1bmN0aW9uVG9rZW4gPSB0b2tlbjsKCiAgICAgIGlmIChvcHRpb25hbCgiPCIsIHRva2VuLm5leHQpKSB7CiAgICAgICAgLy8gU2tpcCB0eXBlIHBhcmFtZXRlcnMsIHRoZXkgd2VyZSBwYXJzZWQgYWJvdmUuCiAgICAgICAgdG9rZW4gPSB0eXBlVmFyaWFibGVFbmRHcm91cHNbZW5kR3JvdXBJbmRleF07CiAgICAgICAgYXNzZXJ0KG9wdGlvbmFsKCc+JywgdG9rZW4pKTsKICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXF1aXJlZE9wdCgKICAgICAgICAgIHRva2VuLCBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlKTsKCiAgICAgIC8vIE9ubHkgY29uc3VtZSB0aGUgYD9gIGlmIGl0IGlzIHBhcnQgb2YgdGhlIGNvbXBsZXggdHlwZQogICAgICBUb2tlbiBxdWVzdGlvbk1hcmsgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJz8nLCBxdWVzdGlvbk1hcmspICYmCiAgICAgICAgICAoZW5kR3JvdXBJbmRleCA+IDAgfHwgYmVmb3JlUXVlc3Rpb25NYXJrICE9IG51bGwpKSB7CiAgICAgICAgdG9rZW4gPSBxdWVzdGlvbk1hcms7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcXVlc3Rpb25NYXJrID0gbnVsbDsKICAgICAgfQoKICAgICAgLS1lbmRHcm91cEluZGV4OwogICAgICBwYXJzZXIubGlzdGVuZXIuZW5kRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVG9rZW4sIHF1ZXN0aW9uTWFyayk7CiAgICB9CgogICAgLy8gVGhlcmUgYXJlIHR3byBzaXR1YXRpb25zIGluIHdoaWNoIHRoZSBbdG9rZW5dICE9IFtlbmRdOgogICAgLy8gVmFsaWQgY29kZTogICAgaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBgPj5gCiAgICAvLyAgICB3aGVyZSBgPj5gIGlzIHJlcGxhY2VkIGJ5IHR3byB0b2tlbnMuCiAgICAvLyBJbnZhbGlkIGNvZGU6ICBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGlkZW50aWZpZXIgYD5gCiAgICAvLyAgICB3aGVyZSBhIHN5bnRoZXRpYyBgPmAgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgaWRlbnRpZmllcnMuCiAgICBhc3NlcnQoaWRlbnRpY2FsKHRva2VuLCBlbmQpIHx8IG9wdGlvbmFsKCc+JywgdG9rZW4pKTsKCiAgICAvLyBEdXJpbmcgcmVjb3ZlcnksIFt0b2tlbl0gbWF5IGJlIGEgc3ludGhldGljIHRoYXQgd2FzIGluc2VydGVkIGluIHRoZQogICAgLy8gbWlkZGxlIG9mIHRoZSB0eXBlIHJlZmVyZW5jZS4KICAgIGVuZCA9IHRva2VuOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcFR5cGUoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBlbmQ7CiAgfQoKICAvLy8gR2l2ZW4gYEZ1bmN0aW9uYCBub24taWRlbnRpZmllciwgY29tcHV0ZSB0aGUgdHlwZQogIC8vLyBhbmQgcmV0dXJuIHRoZSByZWNlaXZlciBvciBvbmUgb2YgdGhlIFtUeXBlSW5mb10gY29uc3RhbnRzLgogIFR5cGVJbmZvIGNvbXB1dGVOb1R5cGVHRlQoVG9rZW4gYmVmb3JlU3RhcnQsIGJvb2wgcmVxdWlyZWQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnRnVuY3Rpb24nLCBzdGFydCkpOwogICAgYXNzZXJ0KGJlZm9yZVN0YXJ0Lm5leHQgPT0gc3RhcnQpOwoKICAgIGNvbXB1dGVSZXN0KGJlZm9yZVN0YXJ0LCByZXF1aXJlZCk7CiAgICBpZiAoZ2Z0SGFzUmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiByZXF1aXJlZCA/IHNpbXBsZVR5cGUgOiBub1R5cGU7CiAgICB9CiAgICBhc3NlcnQoZW5kICE9IG51bGwpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLy8gR2l2ZW4gdm9pZCBgRnVuY3Rpb25gIG5vbi1pZGVudGlmaWVyLCBjb21wdXRlIHRoZSB0eXBlCiAgLy8vIGFuZCByZXR1cm4gdGhlIHJlY2VpdmVyIG9yIG9uZSBvZiB0aGUgW1R5cGVJbmZvXSBjb25zdGFudHMuCiAgVHlwZUluZm8gY29tcHV0ZVZvaWRHRlQoYm9vbCByZXF1aXJlZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCd2b2lkJywgc3RhcnQpKTsKICAgIGFzc2VydChvcHRpb25hbCgnRnVuY3Rpb24nLCBzdGFydC5uZXh0KSk7CgogICAgY29tcHV0ZVJlc3Qoc3RhcnQsIHJlcXVpcmVkKTsKICAgIGlmIChnZnRIYXNSZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIHZvaWRUeXBlOwogICAgfQogICAgYXNzZXJ0KGVuZCAhPSBudWxsKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLy8vIEdpdmVuIGlkZW50aWZpZXIgYEZ1bmN0aW9uYCBub24taWRlbnRpZmllciwgY29tcHV0ZSB0aGUgdHlwZQogIC8vLyBhbmQgcmV0dXJuIHRoZSByZWNlaXZlciBvciBvbmUgb2YgdGhlIFtUeXBlSW5mb10gY29uc3RhbnRzLgogIFR5cGVJbmZvIGNvbXB1dGVJZGVudGlmaWVyR0ZUKGJvb2wgcmVxdWlyZWQpIHsKICAgIGFzc2VydChpc1ZhbGlkVHlwZVJlZmVyZW5jZShzdGFydCkpOwogICAgYXNzZXJ0KG9wdGlvbmFsKCdGdW5jdGlvbicsIHN0YXJ0Lm5leHQpKTsKCiAgICBjb21wdXRlUmVzdChzdGFydCwgcmVxdWlyZWQpOwogICAgaWYgKGdmdEhhc1JldHVyblR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gc2ltcGxlVHlwZTsKICAgIH0KICAgIGFzc2VydChlbmQgIT0gbnVsbCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vLyBHaXZlbiBpZGVudGlmaWVyIGA/YCBgRnVuY3Rpb25gIG5vbi1pZGVudGlmaWVyLCBjb21wdXRlIHRoZSB0eXBlCiAgLy8vIGFuZCByZXR1cm4gdGhlIHJlY2VpdmVyIG9yIG9uZSBvZiB0aGUgW1R5cGVJbmZvXSBjb25zdGFudHMuCiAgVHlwZUluZm8gY29tcHV0ZUlkZW50aWZpZXJRdWVzdGlvbkdGVChib29sIHJlcXVpcmVkKSB7CiAgICBhc3NlcnQoaXNWYWxpZFR5cGVSZWZlcmVuY2Uoc3RhcnQpKTsKICAgIGFzc2VydChvcHRpb25hbCgnPycsIHN0YXJ0Lm5leHQpKTsKICAgIGFzc2VydChvcHRpb25hbCgnRnVuY3Rpb24nLCBzdGFydC5uZXh0Lm5leHQpKTsKCiAgICBjb21wdXRlUmVzdChzdGFydCwgcmVxdWlyZWQpOwogICAgaWYgKGdmdEhhc1JldHVyblR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gc2ltcGxlTnVsbGFibGVUeXBlOwogICAgfQogICAgYXNzZXJ0KGVuZCAhPSBudWxsKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLy8vIEdpdmVuIGEgYnVpbHRpbiwgcmV0dXJuIHRoZSByZWNlaXZlciBzbyB0aGF0IHBhcnNlVHlwZSB3aWxsIHJlcG9ydAogIC8vLyBhbiBlcnJvciBmb3IgdGhlIGJ1aWx0aW4gdXNlZCBhcyBhIHR5cGUuCiAgVHlwZUluZm8gY29tcHV0ZUJ1aWx0aW5PclZhckFzVHlwZShib29sIHJlcXVpcmVkKSB7CiAgICBhc3NlcnQoc3RhcnQudHlwZS5pc0J1aWx0SW4gfHwgb3B0aW9uYWwoJ3ZhcicsIHN0YXJ0KSk7CgogICAgZW5kID0gdHlwZUFyZ3VtZW50cy5za2lwKHN0YXJ0KTsKICAgIGNvbXB1dGVSZXN0KGVuZCwgcmVxdWlyZWQpOwogICAgYXNzZXJ0KGVuZCAhPSBudWxsKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLy8vIEdpdmVuIGlkZW50aWZpZXIgYDxgIC4uLiBgPmAsIGNvbXB1dGUgdGhlIHR5cGUKICAvLy8gYW5kIHJldHVybiB0aGUgcmVjZWl2ZXIgb3Igb25lIG9mIHRoZSBbVHlwZUluZm9dIGNvbnN0YW50cy4KICBUeXBlSW5mbyBjb21wdXRlU2ltcGxlV2l0aFR5cGVBcmd1bWVudHMoYm9vbCByZXF1aXJlZCkgewogICAgYXNzZXJ0KGlzVmFsaWRUeXBlUmVmZXJlbmNlKHN0YXJ0KSk7CiAgICBhc3NlcnQob3B0aW9uYWwoJzwnLCBzdGFydC5uZXh0KSk7CiAgICBhc3NlcnQodHlwZUFyZ3VtZW50cyAhPSBub1R5cGVQYXJhbU9yQXJnKTsKCiAgICBlbmQgPSB0eXBlQXJndW1lbnRzLnNraXAoc3RhcnQpOwogICAgY29tcHV0ZVJlc3QoZW5kLCByZXF1aXJlZCk7CgogICAgaWYgKCFyZXF1aXJlZCAmJiAhbG9va3NMaWtlTmFtZShlbmQubmV4dCkgJiYgZ2Z0SGFzUmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBub1R5cGU7CiAgICB9CiAgICBhc3NlcnQoZW5kICE9IG51bGwpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLy8gR2l2ZW4gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllciAob3IgYC5gIGlkZW50aWZpZXIgb3IgaWRlbnRpZmllciBgLmAKICAvLy8gZm9yIHJlY292ZXJ5KSwgY29tcHV0ZSB0aGUgdHlwZSBhbmQgcmV0dXJuIHRoZSByZWNlaXZlciBvciBvbmUgb2YgdGhlCiAgLy8vIFtUeXBlSW5mb10gY29uc3RhbnRzLgogIFR5cGVJbmZvIGNvbXB1dGVQcmVmaXhlZFR5cGUoYm9vbCByZXF1aXJlZCkgewogICAgVG9rZW4gdG9rZW4gPSBzdGFydDsKICAgIGlmICghb3B0aW9uYWwoJy4nLCB0b2tlbikpIHsKICAgICAgYXNzZXJ0KHRva2VuLmlzS2V5d29yZE9ySWRlbnRpZmllcik7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIGFzc2VydChvcHRpb25hbCgnLicsIHRva2VuKSk7CiAgICBpZiAodG9rZW4ubmV4dC5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQoKICAgIGVuZCA9IHR5cGVBcmd1bWVudHMuc2tpcCh0b2tlbik7CiAgICBjb21wdXRlUmVzdChlbmQsIHJlcXVpcmVkKTsKICAgIGlmICghcmVxdWlyZWQgJiYgIWxvb2tzTGlrZU5hbWUoZW5kLm5leHQpICYmIGdmdEhhc1JldHVyblR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gbm9UeXBlOwogICAgfQogICAgYXNzZXJ0KGVuZCAhPSBudWxsKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgdm9pZCBjb21wdXRlUmVzdChUb2tlbiB0b2tlbiwgYm9vbCByZXF1aXJlZCkgewogICAgaWYgKG9wdGlvbmFsKCc/JywgdG9rZW4ubmV4dCkpIHsKICAgICAgYmVmb3JlUXVlc3Rpb25NYXJrID0gdG9rZW47CiAgICAgIGVuZCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIHdoaWxlIChvcHRpb25hbCgnRnVuY3Rpb24nLCB0b2tlbikpIHsKICAgICAgVG9rZW4gdHlwZVZhcmlhYmxlU3RhcnQgPSB0b2tlbjsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGNhY2hpbmcgVHlwZVBhcmFtT3JBcmdJbmZvCiAgICAgIHRva2VuID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuLCB0cnVlKS5za2lwKHRva2VuKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBpZiAoIW9wdGlvbmFsKCcoJywgdG9rZW4pKSB7CiAgICAgICAgYnJlYWs7IC8vIE5vdCBhIGZ1bmN0aW9uIHR5cGUuCiAgICAgIH0KICAgICAgdG9rZW4gPSB0b2tlbi5lbmRHcm91cDsKICAgICAgaWYgKHRva2VuID09IG51bGwpIHsKICAgICAgICBicmVhazsgLy8gTm90IGEgZnVuY3Rpb24gdHlwZS4KICAgICAgfQogICAgICBpZiAoIXJlcXVpcmVkKSB7CiAgICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgaWYgKG9wdGlvbmFsKCc/JywgbmV4dCkpIHsKICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgICAgfQogICAgICAgIGlmICghKG5leHQuaXNJZGVudGlmaWVyIHx8IG9wdGlvbmFsKCd0aGlzJywgbmV4dCkpKSB7CiAgICAgICAgICBicmVhazsgLy8gYEZ1bmN0aW9uYCB1c2VkIGFzIHRoZSBuYW1lIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24uCiAgICAgICAgfQogICAgICB9CiAgICAgIGFzc2VydChvcHRpb25hbCgnKScsIHRva2VuKSk7CiAgICAgIGdmdEhhc1JldHVyblR5cGUgPz89IHR5cGVWYXJpYWJsZVN0YXJ0ICE9IHN0YXJ0OwogICAgICB0eXBlVmFyaWFibGVTdGFydGVycyA9IHR5cGVWYXJpYWJsZVN0YXJ0ZXJzLnByZXBlbmQodHlwZVZhcmlhYmxlU3RhcnQpOwoKICAgICAgYmVmb3JlUXVlc3Rpb25NYXJrID0gbnVsbDsKICAgICAgZW5kID0gdG9rZW47CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKCiAgICAgIGlmIChvcHRpb25hbCgnPycsIHRva2VuKSkgewogICAgICAgIGJlZm9yZVF1ZXN0aW9uTWFyayA9IGVuZDsKICAgICAgICBlbmQgPSB0b2tlbjsKICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vLyBTZWUgW25vVHlwZVBhcmFtT3JBcmddLgpjbGFzcyBOb1R5cGVQYXJhbU9yQXJnIGV4dGVuZHMgVHlwZVBhcmFtT3JBcmdJbmZvIHsKICBjb25zdCBOb1R5cGVQYXJhbU9yQXJnKCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgdHlwZUFyZ3VtZW50Q291bnQgPT4gMDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VBcmd1bWVudHMoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHModG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVZhcmlhYmxlcyhUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZU5vVHlwZVZhcmlhYmxlcyh0b2tlbi5uZXh0KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXAoVG9rZW4gdG9rZW4pID0+IHRva2VuOwp9CgpjbGFzcyBTaW1wbGVUeXBlQXJndW1lbnQxIGV4dGVuZHMgVHlwZVBhcmFtT3JBcmdJbmZvIHsKICBjb25zdCBTaW1wbGVUeXBlQXJndW1lbnQxKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2ltcGxlVHlwZUFyZ3VtZW50ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGludCBnZXQgdHlwZUFyZ3VtZW50Q291bnQgPT4gMTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IHR5cGVJbmZvID0+IHNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50OwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZUFyZ3VtZW50cyhUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gYmVnaW5Hcm91cCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJzwnLCBiZWdpbkdyb3VwKSk7CiAgICBUb2tlbiBlbmRHcm91cCA9IHBhcnNlRW5kR3JvdXAoYmVnaW5Hcm91cCwgYmVnaW5Hcm91cC5uZXh0KTsKICAgIExpc3RlbmVyIGxpc3RlbmVyID0gcGFyc2VyLmxpc3RlbmVyOwogICAgbGlzdGVuZXIuYmVnaW5UeXBlQXJndW1lbnRzKGJlZ2luR3JvdXApOwogICAgc2ltcGxlVHlwZS5wYXJzZVR5cGUoYmVnaW5Hcm91cCwgcGFyc2VyKTsKICAgIHBhcnNlci5saXN0ZW5lci5lbmRUeXBlQXJndW1lbnRzKDEsIGJlZ2luR3JvdXAsIGVuZEdyb3VwKTsKICAgIHJldHVybiBlbmRHcm91cDsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVmFyaWFibGVzKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBiZWdpbkdyb3VwID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPCcsIGJlZ2luR3JvdXApKTsKICAgIHRva2VuID0gYmVnaW5Hcm91cC5uZXh0OwogICAgVG9rZW4gZW5kR3JvdXAgPSBwYXJzZUVuZEdyb3VwKGJlZ2luR3JvdXAsIHRva2VuKTsKICAgIExpc3RlbmVyIGxpc3RlbmVyID0gcGFyc2VyLmxpc3RlbmVyOwogICAgbGlzdGVuZXIuYmVnaW5UeXBlVmFyaWFibGVzKGJlZ2luR3JvdXApOwogICAgbGlzdGVuZXIuYmVnaW5NZXRhZGF0YVN0YXIodG9rZW4pOwogICAgbGlzdGVuZXIuZW5kTWV0YWRhdGFTdGFyKDApOwogICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQudHlwZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgbGlzdGVuZXIuYmVnaW5UeXBlVmFyaWFibGUodG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlVHlwZVZhcmlhYmxlc0RlZmluZWQodG9rZW4sIDEpOwogICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZFR5cGVWYXJpYWJsZShlbmRHcm91cCwgMCwgbnVsbCk7CiAgICBsaXN0ZW5lci5lbmRUeXBlVmFyaWFibGVzKGJlZ2luR3JvdXAsIGVuZEdyb3VwKTsKICAgIHJldHVybiBlbmRHcm91cDsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXAoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPCcsIHRva2VuKSk7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQodG9rZW4uaXNLZXl3b3JkT3JJZGVudGlmaWVyKTsKICAgIHJldHVybiBza2lwRW5kR3JvdXAodG9rZW4pOwogIH0KCiAgVG9rZW4gc2tpcEVuZEdyb3VwKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz4nLCB0b2tlbikpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VFbmRHcm91cChUb2tlbiBiZWdpbkdyb3VwLCBUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc+JywgdG9rZW4pKTsKICAgIHJldHVybiB0b2tlbjsKICB9Cn0KCmNsYXNzIFNpbXBsZVR5cGVBcmd1bWVudDFHdEVxIGV4dGVuZHMgU2ltcGxlVHlwZUFyZ3VtZW50MSB7CiAgY29uc3QgU2ltcGxlVHlwZUFyZ3VtZW50MUd0RXEoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IHR5cGVJbmZvID0+IHNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50R3RFcTsKCiAgVG9rZW4gc2tpcEVuZEdyb3VwKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz49JywgdG9rZW4pKTsKICAgIHJldHVybiBzcGxpdEd0RXEodG9rZW4pOwogIH0KCiAgVG9rZW4gcGFyc2VFbmRHcm91cChUb2tlbiBiZWdpbkdyb3VwLCBUb2tlbiBiZWZvcmVFbmRHcm91cCkgewogICAgVG9rZW4gZW5kR3JvdXAgPSBiZWZvcmVFbmRHcm91cC5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnPicsIGVuZEdyb3VwKSkgewogICAgICBlbmRHcm91cCA9IHNwbGl0R3RFcShlbmRHcm91cCk7CiAgICAgIGVuZEdyb3VwLm5leHQuc2V0TmV4dChlbmRHcm91cC5uZXh0Lm5leHQpOwogICAgfQogICAgYmVmb3JlRW5kR3JvdXAuc2V0TmV4dChlbmRHcm91cCk7CiAgICByZXR1cm4gZW5kR3JvdXA7CiAgfQp9CgpjbGFzcyBTaW1wbGVUeXBlQXJndW1lbnQxR3RHdCBleHRlbmRzIFNpbXBsZVR5cGVBcmd1bWVudDEgewogIGNvbnN0IFNpbXBsZVR5cGVBcmd1bWVudDFHdEd0KCk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCB0eXBlSW5mbyA9PiBzaW1wbGVUeXBlV2l0aDFBcmd1bWVudEd0R3Q7CgogIFRva2VuIHNraXBFbmRHcm91cChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc+PicsIHRva2VuKSk7CiAgICByZXR1cm4gc3BsaXRHdEd0KHRva2VuKTsKICB9CgogIFRva2VuIHBhcnNlRW5kR3JvdXAoVG9rZW4gYmVnaW5Hcm91cCwgVG9rZW4gYmVmb3JlRW5kR3JvdXApIHsKICAgIFRva2VuIGVuZEdyb3VwID0gYmVmb3JlRW5kR3JvdXAubmV4dDsKICAgIGlmICghb3B0aW9uYWwoJz4nLCBlbmRHcm91cCkpIHsKICAgICAgZW5kR3JvdXAgPSBzcGxpdEd0R3QoZW5kR3JvdXApOwogICAgICBlbmRHcm91cC5uZXh0LnNldE5leHQoZW5kR3JvdXAubmV4dC5uZXh0KTsKICAgIH0KICAgIGJlZm9yZUVuZEdyb3VwLnNldE5leHQoZW5kR3JvdXApOwogICAgcmV0dXJuIGVuZEdyb3VwOwogIH0KfQoKY2xhc3MgQ29tcGxleFR5cGVQYXJhbU9yQXJnSW5mbyBleHRlbmRzIFR5cGVQYXJhbU9yQXJnSW5mbyB7CiAgLy8vIFRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgdHlwZSB2YXIuCiAgZmluYWwgVG9rZW4gc3RhcnQ7CgogIC8vLyBJZiBbaW5EZWNsYXJhdGlvbl0gaXMgYHRydWVgLCB0aGVuIHRoaXMgd2lsbCBtb3JlIGFnZ3Jlc3NpdmVseSByZWNvdmVyCiAgLy8vIGdpdmVuIHVuYmFsYW5jZWQgYDxgIGA+YCBhbmQgaW52YWxpZCBwYXJhbWV0ZXJzIG9yIGFyZ3VtZW50cy4KICBmaW5hbCBib29sIGluRGVjbGFyYXRpb247CgogIEBvdmVycmlkZQogIGludCB0eXBlQXJndW1lbnRDb3VudDsKCiAgLy8vIFRoZSBgPmAgdG9rZW4gd2hpY2ggZW5kcyB0aGUgdHlwZSBwYXJhbWV0ZXIgb3IgYXJndW1lbnQuCiAgLy8vIFRoaXMgY2xvc2VyIG1heSBiZSBzeW50aGV0aWMsIHBvaW50cyB0byB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgc3RyZWFtLAogIC8vLyBpcyBvbmx5IHVzZWQgd2hlbiBza2lwcGluZyBvdmVyIHRoZSB0eXBlIHBhcmFtZXRlcnMgb3IgYXJndW1lbnRzLAogIC8vLyBhbmQgbWF5IG5vdCBiZSBwYXJ0IG9mIHRoZSB0b2tlbiBzdHJlYW0uCiAgVG9rZW4gc2tpcEVuZDsKCiAgQ29tcGxleFR5cGVQYXJhbU9yQXJnSW5mbyhUb2tlbiB0b2tlbiwgdGhpcy5pbkRlY2xhcmF0aW9uKQogICAgICA6IGFzc2VydChvcHRpb25hbCgnPCcsIHRva2VuLm5leHQpKSwKICAgICAgICBhc3NlcnQoaW5EZWNsYXJhdGlvbiAhPSBudWxsKSwKICAgICAgICBzdGFydCA9IHRva2VuLm5leHQ7CgogIC8vLyBQYXJzZSB0aGUgdG9rZW5zIGFuZCByZXR1cm4gdGhlIHJlY2VpdmVyIG9yIFtub1R5cGVQYXJhbU9yQXJnXSBpZiB0aGVyZQogIC8vLyBhcmUgbm8gdHlwZSBwYXJhbWV0ZXJzIG9yIGFyZ3VtZW50cy4gVGhpcyBkb2VzIG5vdCBtb2RpZnkgdGhlIHRva2VuCiAgLy8vIHN0cmVhbS4KICBUeXBlUGFyYW1PckFyZ0luZm8gY29tcHV0ZSgpIHsKICAgIFRva2VuIHRva2VuOwogICAgVG9rZW4gbmV4dCA9IHN0YXJ0OwogICAgdHlwZUFyZ3VtZW50Q291bnQgPSAwOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZShuZXh0LCB0cnVlLCBpbkRlY2xhcmF0aW9uKTsKICAgICAgaWYgKHR5cGVJbmZvID09IG5vVHlwZSkgewogICAgICAgIHdoaWxlICh0eXBlSW5mbyA9PSBub1R5cGUgJiYgb3B0aW9uYWwoJ0AnLCBuZXh0Lm5leHQpKSB7CiAgICAgICAgICBuZXh0ID0gc2tpcE1ldGFkYXRhKG5leHQpOwogICAgICAgICAgdHlwZUluZm8gPSBjb21wdXRlVHlwZShuZXh0LCB0cnVlLCBpbkRlY2xhcmF0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVJbmZvID09IG5vVHlwZSkgewogICAgICAgICAgaWYgKG5leHQgPT0gc3RhcnQgJiYgIWluRGVjbGFyYXRpb24gJiYgIWlzQ2xvc2VyKG5leHQubmV4dCkpIHsKICAgICAgICAgICAgcmV0dXJuIG5vVHlwZVBhcmFtT3JBcmc7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIW9wdGlvbmFsKCcsJywgbmV4dC5uZXh0KSkgewogICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXNzZXJ0KHR5cGVJbmZvICE9IG5vVHlwZSB8fCBvcHRpb25hbCgnLCcsIG5leHQubmV4dCkpOwogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBwcm9jZXNzIHR5cGUgKGlmIGFueSkgYW5kIGNvbnN1bWUgYCxgCiAgICAgIH0KICAgICAgKyt0eXBlQXJndW1lbnRDb3VudDsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZShuZXh0KTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnZXh0ZW5kcycsIG5leHQpKSB7CiAgICAgICAgdG9rZW4gPSBjb21wdXRlVHlwZShuZXh0LCB0cnVlLCBpbkRlY2xhcmF0aW9uKS5za2lwVHlwZShuZXh0KTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBpZiAoIW9wdGlvbmFsKCcsJywgbmV4dCkpIHsKICAgICAgICBza2lwRW5kID0gc3BsaXRDbG9zZXIobmV4dCk7CiAgICAgICAgaWYgKHNraXBFbmQgIT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIGlmICghaW5EZWNsYXJhdGlvbikgewogICAgICAgICAgcmV0dXJuIG5vVHlwZVBhcmFtT3JBcmc7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIGlmICghbG9va3NMaWtlVHlwZVBhcmFtT3JBcmcoaW5EZWNsYXJhdGlvbiwgbmV4dCkpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBMb29rcyBsaWtlIG1pc3NpbmcgY29tbWEuIENvbnRpbnVlIGxvb3BpbmcuCiAgICAgICAgbmV4dCA9IHRva2VuOwogICAgICB9CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIHNraXBFbmQgPSBzcGxpdENsb3NlcihuZXh0KTsKICAgIGlmIChza2lwRW5kID09IG51bGwpIHsKICAgICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgICB0b2tlbiA9IG5leHQuZW5kR3JvdXA7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgc2tpcEVuZCA9IHNwbGl0Q2xvc2VyKG5leHQpOwogICAgICBpZiAoc2tpcEVuZCA9PSBudWxsKSB7CiAgICAgICAgc2tpcEVuZCA9IHNwbGl0Q2xvc2VyKG5leHQubmV4dCk7CiAgICAgIH0KICAgICAgaWYgKHNraXBFbmQgPT0gbnVsbCkgewogICAgICAgIHNraXBFbmQgPSBzeW50aGV0aWNHdChuZXh0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZUFyZ3VtZW50cyhUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgYXNzZXJ0KGlkZW50aWNhbCh0b2tlbi5uZXh0LCBzdGFydCkpOwogICAgVG9rZW4gbmV4dCA9IHN0YXJ0OwogICAgcGFyc2VyLmxpc3RlbmVyLmJlZ2luVHlwZUFyZ3VtZW50cyhzdGFydCk7CiAgICBpbnQgY291bnQgPSAwOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZShuZXh0LCB0cnVlLCBpbkRlY2xhcmF0aW9uKTsKICAgICAgaWYgKHR5cGVJbmZvID09IG5vVHlwZSkgewogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgd2hpbGUgKHR5cGVJbmZvID09IG5vVHlwZSAmJiBvcHRpb25hbCgnQCcsIG5leHQubmV4dCkpIHsKICAgICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICAgIG5leHQubmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICAgICAgbmV4dCA9IHNraXBNZXRhZGF0YShuZXh0KTsKICAgICAgICAgIHR5cGVJbmZvID0gY29tcHV0ZVR5cGUobmV4dCwgdHJ1ZSwgaW5EZWNsYXJhdGlvbik7CiAgICAgICAgfQogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBwcm9jZXNzIHR5cGUgKGlmIGFueSkgYW5kIGNvbnN1bWUgYCxgCiAgICAgIH0KICAgICAgdG9rZW4gPSB0eXBlSW5mby5lbnN1cmVUeXBlT3JWb2lkKG5leHQsIHBhcnNlcik7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICArK2NvdW50OwogICAgICBpZiAoIW9wdGlvbmFsKCcsJywgbmV4dCkpIHsKICAgICAgICBpZiAocGFyc2VDbG9zZXIodG9rZW4pKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgaWYgKCFsb29rc0xpa2VUeXBlUGFyYW1PckFyZyhpbkRlY2xhcmF0aW9uLCBuZXh0KSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZVVuZXhwZWN0ZWRFbmQodG9rZW4sIHRydWUsIHBhcnNlcik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gTWlzc2luZyBjb21tYS4gUmVwb3J0IGVycm9yLCBpbnNlcnQgY29tbWEsIGFuZCBjb250aW51ZSBsb29waW5nLgogICAgICAgIG5leHQgPSBwYXJzZU1pc3NpbmdDb21tYSh0b2tlbiwgcGFyc2VyKTsKICAgICAgfQogICAgfQogICAgVG9rZW4gZW5kR3JvdXAgPSB0b2tlbi5uZXh0OwogICAgcGFyc2VyLmxpc3RlbmVyLmVuZFR5cGVBcmd1bWVudHMoY291bnQsIHN0YXJ0LCBlbmRHcm91cCk7CiAgICByZXR1cm4gZW5kR3JvdXA7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVZhcmlhYmxlcyhUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgYXNzZXJ0KGlkZW50aWNhbCh0b2tlbi5uZXh0LCBzdGFydCkpOwogICAgVG9rZW4gbmV4dCA9IHN0YXJ0OwogICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBwYXJzZXIubGlzdGVuZXI7CiAgICBsaXN0ZW5lci5iZWdpblR5cGVWYXJpYWJsZXMoc3RhcnQpOwogICAgaW50IGNvdW50ID0gMDsKCiAgICBMaW5rPFRva2VuPiB0eXBlU3RhcnRzID0gY29uc3QgTGluazxUb2tlbj4oKTsKICAgIExpbms8VHlwZUluZm8+IHN1cGVyVHlwZUluZm9zID0gY29uc3QgTGluazxUeXBlSW5mbz4oKTsKCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZU1ldGFkYXRhU3RhcihuZXh0KTsKICAgICAgbmV4dCA9IHBhcnNlci5lbnN1cmVJZGVudGlmaWVyKAogICAgICAgICAgdG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnR5cGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgICAgdG9rZW4gPSBuZXh0OwogICAgICBsaXN0ZW5lci5iZWdpblR5cGVWYXJpYWJsZSh0b2tlbik7CiAgICAgIHR5cGVTdGFydHMgPSB0eXBlU3RhcnRzLnByZXBlbmQodG9rZW4pOwoKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnZXh0ZW5kcycsIG5leHQpKSB7CiAgICAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZShuZXh0LCB0cnVlLCBpbkRlY2xhcmF0aW9uKTsKICAgICAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKG5leHQpOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIHN1cGVyVHlwZUluZm9zID0gc3VwZXJUeXBlSW5mb3MucHJlcGVuZCh0eXBlSW5mbyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3VwZXJUeXBlSW5mb3MgPSBzdXBlclR5cGVJbmZvcy5wcmVwZW5kKG51bGwpOwogICAgICB9CgogICAgICArK2NvdW50OwogICAgICBpZiAoIW9wdGlvbmFsKCcsJywgbmV4dCkpIHsKICAgICAgICBpZiAoaXNDbG9zZXIodG9rZW4pKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgaWYgKCFsb29rc0xpa2VUeXBlUGFyYW1PckFyZyhpbkRlY2xhcmF0aW9uLCBuZXh0KSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vIE1pc3NpbmcgY29tbWEuIFJlcG9ydCBlcnJvciwgaW5zZXJ0IGNvbW1hLCBhbmQgY29udGludWUgbG9vcGluZy4KICAgICAgICBuZXh0ID0gcGFyc2VNaXNzaW5nQ29tbWEodG9rZW4sIHBhcnNlcik7CiAgICAgIH0KICAgIH0KCiAgICBhc3NlcnQoY291bnQgPiAwKTsKICAgIGFzc2VydCh0eXBlU3RhcnRzLnNsb3dMZW5ndGgoKSA9PSBjb3VudCk7CiAgICBhc3NlcnQoc3VwZXJUeXBlSW5mb3Muc2xvd0xlbmd0aCgpID09IGNvdW50KTsKICAgIGxpc3RlbmVyLmhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkKHRva2VuLCBjb3VudCk7CgogICAgdG9rZW4gPSBudWxsOwogICAgd2hpbGUgKHR5cGVTdGFydHMuaXNOb3RFbXB0eSkgewogICAgICBUb2tlbiB0b2tlbjIgPSB0eXBlU3RhcnRzLmhlYWQ7CiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gc3VwZXJUeXBlSW5mb3MuaGVhZDsKCiAgICAgIFRva2VuIGV4dGVuZHNPclN1cGVyID0gbnVsbDsKICAgICAgVG9rZW4gbmV4dDIgPSB0b2tlbjIubmV4dDsKICAgICAgaWYgKHR5cGVJbmZvICE9IG51bGwpIHsKICAgICAgICBhc3NlcnQob3B0aW9uYWwoJ2V4dGVuZHMnLCBuZXh0MikpOwogICAgICAgIGV4dGVuZHNPclN1cGVyID0gbmV4dDI7CiAgICAgICAgdG9rZW4yID0gdHlwZUluZm8uZW5zdXJlVHlwZU5vdFZvaWQobmV4dDIsIHBhcnNlcik7CiAgICAgICAgbmV4dDIgPSB0b2tlbjIubmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoIW9wdGlvbmFsKCdleHRlbmRzJywgbmV4dDIpKTsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGUodG9rZW4yKTsKICAgICAgfQogICAgICAvLyBUeXBlIHZhcmlhYmxlcyBhcmUgImNvbXBsZXRlZCIgaW4gcmV2ZXJzZSBvcmRlciwgc28gY2FwdHVyZSB0aGUgbGFzdAogICAgICAvLyBjb25zdW1lZCB0b2tlbiBmcm9tIHRoZSBmaXJzdCAiY29tcGxldGVkIiB0eXBlIHZhcmlhYmxlLgogICAgICB0b2tlbiA/Pz0gdG9rZW4yOwogICAgICBsaXN0ZW5lci5lbmRUeXBlVmFyaWFibGUobmV4dDIsIC0tY291bnQsIGV4dGVuZHNPclN1cGVyKTsKCiAgICAgIHR5cGVTdGFydHMgPSB0eXBlU3RhcnRzLnRhaWw7CiAgICAgIHN1cGVyVHlwZUluZm9zID0gc3VwZXJUeXBlSW5mb3MudGFpbDsKICAgIH0KCiAgICBpZiAoIXBhcnNlQ2xvc2VyKHRva2VuKSkgewogICAgICB0b2tlbiA9IHBhcnNlVW5leHBlY3RlZEVuZCh0b2tlbiwgZmFsc2UsIHBhcnNlcik7CiAgICB9CiAgICBUb2tlbiBlbmRHcm91cCA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5lbmRUeXBlVmFyaWFibGVzKHN0YXJ0LCBlbmRHcm91cCk7CiAgICByZXR1cm4gZW5kR3JvdXA7CiAgfQoKICBUb2tlbiBwYXJzZU1pc3NpbmdDb21tYShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKSk7CiAgICByZXR1cm4gcGFyc2VyLnJld3JpdGVyLmluc2VydFRva2VuKAogICAgICAgIHRva2VuLCBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNPTU1BLCBuZXh0LmNoYXJPZmZzZXQpKTsKICB9CgogIFRva2VuIHBhcnNlVW5leHBlY3RlZEVuZChUb2tlbiB0b2tlbiwgYm9vbCBpc0FyZ3VtZW50cywgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBib29sIGVycm9yUmVwb3J0ZWQgPSB0b2tlbi5pc1N5bnRoZXRpYyB8fCAobmV4dC5pc1N5bnRoZXRpYyAmJiAhbmV4dC5pc0VvZik7CgogICAgYm9vbCB0eXBlRm9sbG93c0V4dGVuZHMgPSBmYWxzZTsKICAgIGlmIChvcHRpb25hbCgnZXh0ZW5kcycsIG5leHQpKSB7CiAgICAgIGlmICghZXJyb3JSZXBvcnRlZCkgewogICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJz4nKSk7CiAgICAgICAgZXJyb3JSZXBvcnRlZCA9IHRydWU7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgdHlwZUZvbGxvd3NFeHRlbmRzID0gaXNWYWxpZFR5cGVSZWZlcmVuY2UobmV4dCk7CgogICAgICBpZiAocGFyc2VDbG9zZXIodG9rZW4pKSB7CiAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICB9CiAgICB9CgogICAgaWYgKHR5cGVGb2xsb3dzRXh0ZW5kcyB8fAogICAgICAgIG9wdGlvbmFsKCdkeW5hbWljJywgbmV4dCkgfHwKICAgICAgICBvcHRpb25hbCgndm9pZCcsIG5leHQpIHx8CiAgICAgICAgb3B0aW9uYWwoJ0Z1bmN0aW9uJywgbmV4dCkpIHsKICAgICAgVHlwZUluZm8gaW52YWxpZFR5cGUgPSBjb21wdXRlVHlwZSh0b2tlbiwgdHJ1ZSk7CiAgICAgIGlmIChpbnZhbGlkVHlwZSAhPSBub1R5cGUpIHsKICAgICAgICBpZiAoIWVycm9yUmVwb3J0ZWQpIHsKICAgICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnPicpKTsKICAgICAgICAgIGVycm9yUmVwb3J0ZWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gUGFyc2UgdGhlIHR5cGUgc28gdGhhdCB0aGUgdG9rZW4gc3RyZWFtIGlzIHByb3Blcmx5IG1vZGlmaWVkLAogICAgICAgIC8vIGJ1dCBlbnN1cmUgdGhhdCBwYXJzZXIgZXZlbnRzIGFyZSBpZ25vcmVkIGJ5IHJlcGxhY2luZyB0aGUgbGlzdGVuZXIuCiAgICAgICAgZmluYWwgb3JpZ2luYWxMaXN0ZW5lciA9IHBhcnNlci5saXN0ZW5lcjsKICAgICAgICBwYXJzZXIubGlzdGVuZXIgPSBuZXcgRm9yd2FyZGluZ0xpc3RlbmVyKCk7CiAgICAgICAgdG9rZW4gPSBpbnZhbGlkVHlwZS5wYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgcGFyc2VyLmxpc3RlbmVyID0gb3JpZ2luYWxMaXN0ZW5lcjsKCiAgICAgICAgaWYgKHBhcnNlQ2xvc2VyKHRva2VuKSkgewogICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIFR5cGVQYXJhbU9yQXJnSW5mbyBpbnZhbGlkVHlwZVZhciA9CiAgICAgICAgY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuLCBpbkRlY2xhcmF0aW9uKTsKICAgIGlmIChpbnZhbGlkVHlwZVZhciAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgIGlmICghZXJyb3JSZXBvcnRlZCkgewogICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJz4nKSk7CiAgICAgICAgZXJyb3JSZXBvcnRlZCA9IHRydWU7CiAgICAgIH0KCiAgICAgIC8vIFBhcnNlIHRoZSB0eXBlIHNvIHRoYXQgdGhlIHRva2VuIHN0cmVhbSBpcyBwcm9wZXJseSBtb2RpZmllZCwKICAgICAgLy8gYnV0IGVuc3VyZSB0aGF0IHBhcnNlciBldmVudHMgYXJlIGlnbm9yZWQgYnkgcmVwbGFjaW5nIHRoZSBsaXN0ZW5lci4KICAgICAgZmluYWwgb3JpZ2luYWxMaXN0ZW5lciA9IHBhcnNlci5saXN0ZW5lcjsKICAgICAgcGFyc2VyLmxpc3RlbmVyID0gbmV3IEZvcndhcmRpbmdMaXN0ZW5lcigpOwogICAgICB0b2tlbiA9IGlzQXJndW1lbnRzCiAgICAgICAgICA/IGludmFsaWRUeXBlVmFyLnBhcnNlQXJndW1lbnRzKHRva2VuLCBwYXJzZXIpCiAgICAgICAgICA6IGludmFsaWRUeXBlVmFyLnBhcnNlVmFyaWFibGVzKHRva2VuLCBwYXJzZXIpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgcGFyc2VyLmxpc3RlbmVyID0gb3JpZ2luYWxMaXN0ZW5lcjsKCiAgICAgIGlmIChwYXJzZUNsb3Nlcih0b2tlbikpIHsKICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgIH0KICAgIH0KCiAgICBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSAmJiBuZXh0LmVuZEdyb3VwICE9IG51bGwpIHsKICAgICAgaWYgKCFlcnJvclJlcG9ydGVkKSB7CiAgICAgICAgLy8gT25seSByZXBvcnQgYW4gZXJyb3IgaWYgb25lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLgogICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJz4nKSk7CiAgICAgICAgZXJyb3JSZXBvcnRlZCA9IHRydWU7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICAgIGlmIChwYXJzZUNsb3Nlcih0b2tlbikpIHsKICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgIH0KICAgIH0KCiAgICBpZiAoIWVycm9yUmVwb3J0ZWQpIHsKICAgICAgLy8gT25seSByZXBvcnQgYW4gZXJyb3IgaWYgb25lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLgogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnPicpKTsKICAgIH0KICAgIGlmIChwYXJzZUNsb3NlcihuZXh0KSkgewogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICAgIFRva2VuIGVuZEdyb3VwID0gc3ludGhldGljR3QobmV4dCk7CiAgICBlbmRHcm91cC5zZXROZXh0KG5leHQpOwogICAgdG9rZW4uc2V0TmV4dChlbmRHcm91cCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwKFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQoc2tpcEVuZCAhPSBudWxsKTsKICAgIHJldHVybiBza2lwRW5kOwogIH0KfQoKLy8vIFJldHVybiBgdHJ1ZWAgaWYgW3Rva2VuXSBpcyBvbmUgb2YgYD5gLCBgPj5gLCBgPj4+YCwgYD49YCwgYD4+PWAsIG9yIGA+Pj49YC4KYm9vbCBpc0Nsb3NlcihUb2tlbiB0b2tlbikgewogIGZpbmFsIHZhbHVlID0gdG9rZW4uc3RyaW5nVmFsdWU7CiAgcmV0dXJuIGlkZW50aWNhbCh2YWx1ZSwgJz4nKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICc+PicpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz49JykgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPj4+JykgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPj49JykgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPj4+PScpOwp9CgovLy8gSWYgW2JlZm9yZUNsb3Nlcl0ubmV4dCBpcyBvbmUgb2YgYD5gLCBgPj5gLCBgPj4+YCwgYD49YCwgYD4+PWAsIG9yIGA+Pj49YAovLy8gdGhlbiB1cGRhdGUgdGhlIHRva2VuIHN0cmVhbSBhbmQgcmV0dXJuIGB0cnVlYC4KYm9vbCBwYXJzZUNsb3NlcihUb2tlbiBiZWZvcmVDbG9zZXIpIHsKICBUb2tlbiB1bnNwbGl0ID0gYmVmb3JlQ2xvc2VyLm5leHQ7CiAgVG9rZW4gc3BsaXQgPSBzcGxpdENsb3Nlcih1bnNwbGl0KTsKICBpZiAoc3BsaXQgPT0gdW5zcGxpdCkgewogICAgcmV0dXJuIHRydWU7CiAgfSBlbHNlIGlmIChzcGxpdCA9PSBudWxsKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHNwbGl0Lm5leHQuc2V0TmV4dCh1bnNwbGl0Lm5leHQpOwogIGJlZm9yZUNsb3Nlci5zZXROZXh0KHNwbGl0KTsKICByZXR1cm4gdHJ1ZTsKfQoKLy8vIElmIFtj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HzgGITAVBAE4HSNAKEYEAUsdUQElJRwnSh4IFBk3ASAWCAYBHiUiJjcjHilMIAoBSVAyNDYbLAEiGAoIBgEoNS4cJ0oeCAFHTjAyGjk6GSoBIBYIBgE4HEYnSh4IHRkBIBYIBgEaRCVIBh0TBigcHRIEAQwcHRQEAgFRHSMiICAhISACAU40JyUmGhEeEgQkHw8CASdKTDgiJR8TJx4nHigmKCYpKAQPAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci90eXBlX2luZm9faW1wbC5kYXJ0PnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvY29uc3RhbnRfZW1pdHRlci5kYXJ0wABI/y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pby9jb2RlX291dHB1dC5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0JyBzaG93IFR5cGVFeHByZXNzaW9uUmVjaXBlOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnZmllbGRfYW5hbHlzaXMuZGFydCcgc2hvdyBKRmllbGRBbmFseXNpczsKaW1wb3J0ICdydW50aW1lX3R5cGVzLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQnIHNob3cgUmVjaXBlRW5jb2RlcjsKaW1wb3J0ICdydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCc7Cgp0eXBlZGVmIGpzQXN0LkV4cHJlc3Npb24gX0NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKENvbnN0YW50VmFsdWUgY29uc3RhbnQpOwoKdHlwZWRlZiBqc0FzdC5FeHByZXNzaW9uIF9Db25zdGFudExpc3RHZW5lcmF0b3IoanNBc3QuRXhwcmVzc2lvbiBhcnJheSk7CgovLy8gVmlzaXRvciB0aGF0IGNyZWF0ZXMgW2pzQXN0LkV4cHJlc3Npb25dcyBmb3IgY29uc3RhbnRzIHRoYXQgYXJlIGlubGluZWQKLy8vIGFuZCB0aGVyZWZvcmUgY2FuIGJlIGNyZWF0ZWQgZHVyaW5nIG1vZHVsYXIgY29kZSBnZW5lcmF0aW9uLgpjbGFzcyBNb2R1bGFyQ29uc3RhbnRFbWl0dGVyCiAgICBpbXBsZW1lbnRzIENvbnN0YW50VmFsdWVWaXNpdG9yPGpzQXN0LkV4cHJlc3Npb24sIE51bGw+IHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CgogIE1vZHVsYXJDb25zdGFudEVtaXR0ZXIodGhpcy5fb3B0aW9ucyk7CgogIC8vLyBDb25zdHJ1Y3RzIGEgbGl0ZXJhbCBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIHRoZSBjb25zdGFudC4gVXNlcyBhCiAgLy8vIGNhbm9uaWNhbCBuYW1lIHVubGVzcyB0aGUgY29uc3RhbnQgY2FuIGJlIGVtaXR0ZWQgbXVsdGlwbGUgdGltZXMgKGFzIGZvcgogIC8vLyBudW1iZXJzIGFuZCBzdHJpbmdzKS4KICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIHJldHVybiBfdmlzaXQoY29uc3RhbnQpOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBfdmlzaXQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgcmV0dXJuIGNvbnN0YW50LmFjY2VwdCh0aGlzLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRGdW5jdGlvbihGdW5jdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgdGhyb3cgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICJUaGUgZnVuY3Rpb24gY29uc3RhbnQgZG9lcyBub3QgbmVlZCBzcGVjaWZpYyBKUyBjb2RlLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdE51bGwoTnVsbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsTnVsbCgpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdE5vbkNvbnN0YW50KE5vbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsTnVsbCgpOwogIH0KCiAgc3RhdGljIGZpbmFsIF9leHBvbmVudGlhbFJFID0gbmV3IFJlZ0V4cCgnXicKICAgICAgJ1woWy0rXT9cKScgLy8gMTogc2lnbgogICAgICAnXChbMC05XStcKScgLy8gMjogbGVhZGluZyBkaWdpdChzKQogICAgICAnXChcLlwoWzAtOV0qXClcKT8nIC8vIDQ6IGZyYWN0aW9uIGRpZ2l0cwogICAgICAnZVwoWy0rXT9bMC05XStcKScgLy8gNTogZXhwb25lbnQgd2l0aCBzaWduCiAgICAgIHInJCcpOwoKICAvLy8gUmVkdWNlcyB0aGUgc2l6ZSBvZiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbnMgd2hlbiBtaW5pZmljYXRpb24gaXMKICAvLy8gZW5hYmxlZC4KICAvLy8KICAvLy8gUmVtb3ZlcyB0aGUgIisiIGFmdGVyIHRoZSBleHBvbmVudGlhbCBzaWduLCBhbmQgcmVtb3ZlcyB0aGUgIi4iIGJlZm9yZSB0aGUKICAvLy8gImUiLiBGb3IgZXhhbXBsZSBgMS4yM2UrNWAgaXMgY2hhbmdlZCB0byBgMTIzZTNgLgogIFN0cmluZyBfc2hvcnRlbkV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oU3RyaW5nIG51bWJlclN0cmluZykgewogICAgTWF0Y2ggbWF0Y2ggPSBfZXhwb25lbnRpYWxSRS5maXJzdE1hdGNoKG51bWJlclN0cmluZyk7CiAgICBpZiAobWF0Y2ggPT0gbnVsbCkgcmV0dXJuIG51bWJlclN0cmluZzsKICAgIFN0cmluZyBzaWduID0gbWF0Y2hbMV07CiAgICBTdHJpbmcgbGVhZGluZ0RpZ2l0cyA9IG1hdGNoWzJdOwogICAgU3RyaW5nIGZyYWN0aW9uRGlnaXRzID0gbWF0Y2hbNF07CiAgICBpbnQgZXhwb25lbnQgPSBpbnQucGFyc2UobWF0Y2hbNV0pOwogICAgaWYgKGZyYWN0aW9uRGlnaXRzID09IG51bGwpIGZyYWN0aW9uRGlnaXRzID0gJyc7CiAgICBleHBvbmVudCAtPSBmcmFjdGlvbkRpZ2l0cy5sZW5ndGg7CiAgICBTdHJpbmcgcmVzdWx0ID0gJyR7c2lnbn0ke2xlYWRpbmdEaWdpdHN9JHtmcmFjdGlvbkRpZ2l0c31lJHtleHBvbmVudH0nOwogICAgYXNzZXJ0KGRvdWJsZS5wYXJzZShyZXN1bHQpID09IGRvdWJsZS5wYXJzZShudW1iZXJTdHJpbmcpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0SW50KEludENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgQmlnSW50IHZhbHVlID0gY29uc3RhbnQuaW50VmFsdWU7CiAgICAvLyBTaW5jZSB3ZSBhcmUgaW4gSmF2YVNjcmlwdCB3ZSBjYW4gc2hvcnRlbiBsb25nIGludGVnZXJzIHRvIHRoZWlyIHNob3J0ZXIKICAgIC8vIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLCBmb3IgZXhhbXBsZTogIjFlNCIgaXMgc2hvcnRlciB0aGFuICIxMDAwMCIuCiAgICAvLwogICAgLy8gTm90ZSB0aGF0IHRoaXMgc2hvcnRlbmluZyBhcHBhcmVudGx5IGxvc2VzIHByZWNpc2lvbiBmb3IgYmlnIG51bWJlcnMKICAgIC8vIChsaWtlIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUgd2hpY2ggYmVjb21lcyAxMjM0NTY3ODkwMTIzNDU2OGU4KS4KICAgIC8vIEhvd2V2ZXIsIHNpbmNlIEphdmFTY3JpcHQgZW5naW5lcyByZXByZXNlbnQgYWxsIG51bWJlcnMgYXMgZG91YmxlcywgdGhlc2UKICAgIC8vIGRpZ2l0cyBhcmUgbG9zdCBhbnl3YXkuCiAgICBTdHJpbmcgcmVwcmVzZW50YXRpb24gPSB2YWx1ZS50b1N0cmluZygpOwogICAgU3RyaW5nIGFsdGVybmF0aXZlID0gbnVsbDsKICAgIGludCBjdXRvZmYgPSBfb3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24gPyAxMDAwMCA6IDFlMTAudG9JbnQoKTsKICAgIGlmICh2YWx1ZS5hYnMoKSA+PSBuZXcgQmlnSW50LmZyb20oY3V0b2ZmKSkgewogICAgICBhbHRlcm5hdGl2ZSA9IF9zaG9ydGVuRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbigKICAgICAgICAgIHZhbHVlLnRvRG91YmxlKCkudG9TdHJpbmdBc0V4cG9uZW50aWFsKCkpOwogICAgfQogICAgaWYgKGFsdGVybmF0aXZlICE9IG51bGwgJiYgYWx0ZXJuYXRpdmUubGVuZ3RoIDwgcmVwcmVzZW50YXRpb24ubGVuZ3RoKSB7CiAgICAgIHJlcHJlc2VudGF0aW9uID0gYWx0ZXJuYXRpdmU7CiAgICB9CiAgICByZXR1cm4gbmV3IGpzQXN0LkxpdGVyYWxOdW1iZXIocmVwcmVzZW50YXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdERvdWJsZShEb3VibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGRvdWJsZSB2YWx1ZSA9IGNvbnN0YW50LmRvdWJsZVZhbHVlOwogICAgaWYgKHZhbHVlLmlzTmFOKSB7CiAgICAgIHJldHVybiBqcygiMC8wIik7CiAgICB9IGVsc2UgaWYgKHZhbHVlID09IGRvdWJsZS5pbmZpbml0eSkgewogICAgICByZXR1cm4ganMoIjEvMCIpOwogICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAtZG91YmxlLmluZmluaXR5KSB7CiAgICAgIHJldHVybiBqcygiLTEvMCIpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIHNob3J0ZW5lZCA9IF9zaG9ydGVuRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbigiJHZhbHVlIik7CiAgICAgIHJldHVybiBuZXcganNBc3QuTGl0ZXJhbE51bWJlcihzaG9ydGVuZWQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEJvb2woQm9vbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgaWYgKF9vcHRpb25zLmVuYWJsZU1pbmlmaWNhdGlvbikgewogICAgICBpZiAoY29uc3RhbnQuaXNUcnVlKSB7CiAgICAgICAgLy8gVXNlICEwIGZvciB0cnVlLgogICAgICAgIHJldHVybiBqcygiITAiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBVc2UgITEgZm9yIGZhbHNlLgogICAgICAgIHJldHVybiBqcygiITEiKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbnN0YW50LmlzVHJ1ZSA/IGpzKCd0cnVlJykgOiBqcygnZmFsc2UnKTsKICAgIH0KICB9CgogIC8vLyBXcml0ZSB0aGUgY29udGVudHMgb2YgdGhlIHF1b3RlZCBzdHJpbmcgdG8gYSBbQ29kZUJ1ZmZlcl0gaW4KICAvLy8gYSBmb3JtIHRoYXQgaXMgdmFsaWQgYXMgSmF2YVNjcmlwdCBzdHJpbmcgbGl0ZXJhbCBjb250ZW50LgogIC8vLyBUaGUgc3RyaW5nIGlzIGFzc3VtZWQgcXVvdGVkIGJ5IGRvdWJsZSBxdW90ZSBjaGFyYWN0ZXJzLgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRTdHJpbmcoU3RyaW5nQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4ganMuZXNjYXBlZFN0cmluZyhjb25zdGFudC5zdHJpbmdWYWx1ZSwgYXNjaWk6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdER1bW15SW50ZXJjZXB0b3IoRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgIFtfXSkgewogICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsTnVtYmVyKCcwJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0VW5yZWFjaGFibGUoVW5yZWFjaGFibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHJldHVybiBuZXcganNBc3QuTGl0ZXJhbE51bWJlcignMCcpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEpzTmFtZShKc05hbWVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHJldHVybiBjb25zdGFudC5uYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgICAgICBbX10pID0+CiAgICAgIG51bGw7CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXREZWZlcnJlZEdsb2JhbChEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgICAgICBbX10pID0+CiAgICAgIG51bGw7CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRJbnRlcmNlcHRvcihJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgPT4KICAgICAgbnVsbDsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFR5cGUoVHlwZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdENvbnN0cnVjdGVkKENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSA9PgogICAgICBudWxsOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0TWFwKE1hcENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFNldChTZXRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pID0+IG51bGw7CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRMaXN0KExpc3RDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pID0+IG51bGw7Cn0KCi8vLyBHZW5lcmF0ZXMgdGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbnMgZm9yIGNvbnN0YW50cy4KLy8vCi8vLyBJdCB1c2VzIGEgZ2l2ZW4gW19jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcl0gdG8gcmVmZXJlbmNlIG5lc3RlZCBjb25zdGFudHMKLy8vIChpZiB0aGVyZSBhcmUgc29tZSkuIEl0IGlzIGhlbmNlIHVwIHRvIHRoYXQgZnVuY3Rpb24gdG8gZGVjaWRlIHdoaWNoCi8vLyBjb25zdGFudHMgc2hvdWxkIGJlIGlubGluZWQgb3Igbm90LgpjbGFzcyBDb25zdGFudEVtaXR0ZXIgZXh0ZW5kcyBNb2R1bGFyQ29uc3RhbnRFbWl0dGVyIHsKICAvLyBNYXRjaGVzIGJsYW5rIGxpbmVzLCBjb21tZW50IGxpbmVzIGFuZCB0cmFpbGluZyBjb21tZW50cyB0aGF0IGNhbid0IGJlIHBhcnQKICAvLyBvZiBhIHN0cmluZy4KICBzdGF0aWMgZmluYWwgUmVnRXhwIENPTU1FTlRfUkUgPQogICAgICBuZXcgUmVnRXhwKHInJydeICooLy8uKik/XG58ICAqLy9bXicnIlxuXSokJycnLCBtdWx0aUxpbmU6IHRydWUpOwoKICBmaW5hbCBKQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwogIGZpbmFsIEpFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBSdW50aW1lVHlwZXNOZWVkIF9ydGlOZWVkOwogIGZpbmFsIFJ1bnRpbWVUeXBlc0VuY29kZXIgX3J0aUVuY29kZXI7CiAgZmluYWwgUmVjaXBlRW5jb2RlciBfcnRpUmVjaXBlRW5jb2RlcjsKICBmaW5hbCBKRmllbGRBbmFseXNpcyBfZmllbGRBbmFseXNpczsKICBmaW5hbCBFbWl0dGVyIF9lbWl0dGVyOwogIGZpbmFsIF9Db25zdGFudFJlZmVyZW5jZUdlbmVyYXRvciBfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3I7CiAgZmluYWwgX0NvbnN0YW50TGlzdEdlbmVyYXRvciBfbWFrZUNvbnN0YW50TGlzdDsKCiAgLy8vIFRoZSBnaXZlbiBbX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yXSBmdW5jdGlvbiBtdXN0LCB3aGVuIGludm9rZWQgd2l0aCBhCiAgLy8vIGNvbnN0YW50LCBlaXRoZXIgcmV0dXJuIGEgcmVmZXJlbmNlIG9yIHJldHVybiBpdHMgbGl0ZXJhbCBleHByZXNzaW9uIGlmIGl0CiAgLy8vIGNhbiBiZSBpbmxpbmVkLgogIENvbnN0YW50RW1pdHRlcigKICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuX3J0aU5lZWQsCiAgICAgIHRoaXMuX3J0aUVuY29kZXIsCiAgICAgIHRoaXMuX3J0aVJlY2lwZUVuY29kZXIsCiAgICAgIHRoaXMuX2ZpZWxkQW5hbHlzaXMsCiAgICAgIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yLAogICAgICB0aGlzLl9tYWtlQ29uc3RhbnRMaXN0KQogICAgICA6IHN1cGVyKG9wdGlvbnMpOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0TGlzdChMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGVsZW1lbnRzID0gY29uc3RhbnQuZW50cmllcwogICAgICAgIC5tYXAoX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKQogICAgICAgIC50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgIGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIgYXJyYXkgPSBuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcihlbGVtZW50cyk7CiAgICBqc0FzdC5FeHByZXNzaW9uIHZhbHVlID0gX21ha2VDb25zdGFudExpc3QoYXJyYXkpOwogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgcmV0dXJuIG1heWJlQWRkTGlzdFR5cGVBcmd1bWVudHNOZXdSdGkoY29uc3RhbnQsIGNvbnN0YW50LnR5cGUsIHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBtYXliZUFkZFR5cGVBcmd1bWVudHMoY29uc3RhbnQsIGNvbnN0YW50LnR5cGUsIHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRTZXQoY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRTZXRDb25zdGFudCBjb25zdGFudCwKICAgICAgW19dKSB7CiAgICBJbnRlcmZhY2VUeXBlIHNvdXJjZVR5cGUgPSBjb25zdGFudC50eXBlOwogICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gc291cmNlVHlwZS5lbGVtZW50OwogICAgU3RyaW5nIGNsYXNzTmFtZSA9IGNsYXNzRWxlbWVudC5uYW1lOwogICAgaWYgKCFpZGVudGljYWwoY2xhc3NFbGVtZW50LCBfY29tbW9uRWxlbWVudHMuY29uc3RTZXRMaXRlcmFsQ2xhc3MpKSB7CiAgICAgIGZhaWxlZEF0KAogICAgICAgICAgY2xhc3NFbGVtZW50LCAiQ29tcGlsZXIgZW5jb3V0ZXJlZCB1bmV4cGVjdGVkIHNldCBjbGFzcyAkY2xhc3NOYW1lIik7CiAgICB9CgogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bCiAgICAgIF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihjb25zdGFudC5lbnRyaWVzKSwKICAgIF07CgogICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNsYXNzRWxlbWVudCkpIHsKICAgICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgICBhcmd1bWVudHMuYWRkKF9yZWlmaWVkVHlwZU5ld1J0aShzb3VyY2VUeXBlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXJndW1lbnRzCiAgICAgICAgICAgIC5hZGQoX3JlaWZpZWRUeXBlQXJndW1lbnRzKGNvbnN0YW50LCBzb3VyY2VUeXBlLnR5cGVBcmd1bWVudHMpKTsKICAgICAgfQogICAgfQoKICAgIGpzQXN0LkV4cHJlc3Npb24gY29uc3RydWN0b3IgPSBfZW1pdHRlci5jb25zdHJ1Y3RvckFjY2VzcyhjbGFzc0VsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBqc0FzdC5OZXcoY29uc3RydWN0b3IsIGFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0TWFwKGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQgY29uc3RhbnQsCiAgICAgIFtfXSkgewogICAganNBc3QuRXhwcmVzc2lvbiBqc01hcCgpIHsKICAgICAgTGlzdDxqc0FzdC5Qcm9wZXJ0eT4gcHJvcGVydGllcyA9IDxqc0FzdC5Qcm9wZXJ0eT5bXTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25zdGFudC5sZW5ndGg7IGkrKykgewogICAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUga2V5ID0gY29uc3RhbnQua2V5c1tpXTsKICAgICAgICBpZiAoa2V5LnN0cmluZ1ZhbHVlID09CiAgICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuUFJPVE9fUFJPUEVSVFkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gS2V5cyBpbiBsaXRlcmFsIG1hcHMgbXVzdCBiZSBlbWl0dGVkIGluIHBsYWNlLgogICAgICAgIGpzQXN0LkxpdGVyYWwga2V5RXhwcmVzc2lvbiA9IF92aXNpdChrZXkpOwogICAgICAgIGpzQXN0LkV4cHJlc3Npb24gdmFsdWVFeHByZXNzaW9uID0KICAgICAgICAgICAgX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKGNvbnN0YW50LnZhbHVlc1tpXSk7CiAgICAgICAgcHJvcGVydGllcy5hZGQobmV3IGpzQXN0LlByb3BlcnR5KGtleUV4cHJlc3Npb24sIHZhbHVlRXhwcmVzc2lvbikpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcganNBc3QuT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcyk7CiAgICB9CgogICAganNBc3QuRXhwcmVzc2lvbiBqc0dlbmVyYWxNYXAoKSB7CiAgICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZGF0YSA9IDxqc0FzdC5FeHByZXNzaW9uPltdOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnN0YW50LmtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBqc0FzdC5FeHByZXNzaW9uIGtleUV4cHJlc3Npb24gPQogICAgICAgICAgICBfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoY29uc3RhbnQua2V5c1tpXSk7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiB2YWx1ZUV4cHJlc3Npb24gPQogICAgICAgICAgICBfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoY29uc3RhbnQudmFsdWVzW2ldKTsKICAgICAgICBkYXRhLmFkZChrZXlFeHByZXNzaW9uKTsKICAgICAgICBkYXRhLmFkZCh2YWx1ZUV4cHJlc3Npb24pOwogICAgICB9CiAgICAgIHJldHVybiBuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcihkYXRhKTsKICAgIH0KCiAgICBDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQgPSBjb25zdGFudC50eXBlLmVsZW1lbnQ7CiAgICBTdHJpbmcgY2xhc3NOYW1lID0gY2xhc3NFbGVtZW50Lm5hbWU7CgogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKCiAgICAvLyBUaGUgYXJndW1lbnRzIG9mIHRoZSBKYXZhU2NyaXB0IGNvbnN0cnVjdG9yIGZvciBhbnkgZ2l2ZW4gRGFydCBjbGFzcwogICAgLy8gYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBtZW1iZXJzIG9mIHRoZSBjbGFzcyBlbGVtZW50LgogICAgaW50IGVtaXR0ZWRBcmd1bWVudENvdW50ID0gMDsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaEluc3RhbmNlRmllbGQoY2xhc3NFbGVtZW50LAogICAgICAgIChDbGFzc0VudGl0eSBlbmNsb3NpbmcsIEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzRWxpZGVkKSByZXR1cm47CiAgICAgIGlmIChmaWVsZC5uYW1lID09IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuTEVOR1RIX05BTUUpIHsKICAgICAgICBhcmd1bWVudHMKICAgICAgICAgICAgLmFkZChuZXcganNBc3QuTGl0ZXJhbE51bWJlcignJHtjb25zdGFudC5rZXlMaXN0LmVudHJpZXMubGVuZ3RofScpKTsKICAgICAgfSBlbHNlIGlmIChmaWVsZC5uYW1lID09CiAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkpTX09CSkVDVF9OQU1FKSB7CiAgICAgICAgYXJndW1lbnRzLmFkZChqc01hcCgpKTsKICAgICAgfSBlbHNlIGlmIChmaWVsZC5uYW1lID09CiAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LktFWVNfTkFNRSkgewogICAgICAgIGFyZ3VtZW50cy5hZGQoX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKGNvbnN0YW50LmtleUxpc3QpKTsKICAgICAgfSBlbHNlIGlmIChmaWVsZC5uYW1lID09CiAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LlBST1RPX1ZBTFVFKSB7CiAgICAgICAgYXNzZXJ0KGNvbnN0YW50LnByb3RvVmFsdWUgIT0gbnVsbCk7CiAgICAgICAgYXJndW1lbnRzLmFkZChfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoY29uc3RhbnQucHJvdG9WYWx1ZSkpOwogICAgICB9IGVsc2UgaWYgKGZpZWxkLm5hbWUgPT0KICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuSlNfREFUQV9OQU1FKSB7CiAgICAgICAgYXJndW1lbnRzLmFkZChqc0dlbmVyYWxNYXAoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmFpbGVkQXQoZmllbGQsCiAgICAgICAgICAgICJDb21waWxlciBoYXMgdW5leHBlY3RlZCBmaWVsZCAke2ZpZWxkLm5hbWV9IGZvciAke2NsYXNzTmFtZX0uIik7CiAgICAgIH0KICAgICAgZW1pdHRlZEFyZ3VtZW50Q291bnQrKzsKICAgIH0pOwogICAgaWYgKChjbGFzc05hbWUgPT0gY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5EQVJUX1NUUklOR19DTEFTUyAmJgogICAgICAgICAgICBlbWl0dGVkQXJndW1lbnRDb3VudCAhPSAzKSB8fAogICAgICAgIChjbGFzc05hbWUgPT0gY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5EQVJUX1BST1RPX0NMQVNTICYmCiAgICAgICAgICAgIGVtaXR0ZWRBcmd1bWVudENvdW50ICE9IDQpIHx8CiAgICAgICAgKGNsYXNzTmFtZSA9PQogICAgICAgICAgICAgICAgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5EQVJUX0dFTkVSQUxfQ0xBU1MgJiYKICAgICAgICAgICAgZW1pdHRlZEFyZ3VtZW50Q291bnQgIT0gMSkpIHsKICAgICAgZmFpbGVkQXQoY2xhc3NFbGVtZW50LAogICAgICAgICAgIkNvbXBpbGVyIGFuZCAke2NsYXNzTmFtZX0gZGlzYWdyZWUgb24gbnVtYmVyIG9mIGZpZWxkcy4iKTsKICAgIH0KCiAgICBpZiAoX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY2xhc3NFbGVtZW50KSkgewogICAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgIGFyZ3VtZW50cy5hZGQoX3JlaWZpZWRUeXBlTmV3UnRpKGNvbnN0YW50LnR5cGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcmd1bWVudHMKICAgICAgICAgICAgLmFkZChfcmVpZmllZFR5cGVBcmd1bWVudHMoY29uc3RhbnQsIGNvbnN0YW50LnR5cGUudHlwZUFyZ3VtZW50cykpOwogICAgICB9CiAgICB9CgogICAganNBc3QuRXhwcmVzc2lvbiBjb25zdHJ1Y3RvciA9IF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKGNsYXNzRWxlbWVudCk7CiAgICBqc0FzdC5FeHByZXNzaW9uIHZhbHVlID0gbmV3IGpzQXN0Lk5ldyhjb25zdHJ1Y3RvciwgYXJndW1lbnRzKTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIGpzQXN0LlByb3BlcnR5QWNjZXNzIGdldEhlbHBlclByb3BlcnR5KEZ1bmN0aW9uRW50aXR5IGhlbHBlcikgewogICAgcmV0dXJuIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0VHlwZShUeXBlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gY29uc3RhbnQucmVwcmVzZW50ZWRUeXBlLnVuYWxpYXNlZDsKCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICBhc3NlcnQoIXR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKTsKCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gcmVjaXBlID0gX3J0aVJlY2lwZUVuY29kZXIuZW5jb2RlR3JvdW5kUmVjaXBlKAogICAgICAgICAgX2VtaXR0ZXIsIFR5cGVFeHByZXNzaW9uUmVjaXBlKHR5cGUpKTsKCiAgICAgIC8vIEdlbmVyYXRlICBgdHlwZUxpdGVyYWwocmVjaXBlKWAuCgogICAgICAvLyBUT0RPKHNyYSk6IGB0eXBlTGl0ZXJhbChyKWAgY2FsbHMgYGNyZWF0ZVJ1bnRpbWVUeXBlKGZpbmRUeXBlKHIpKWAuCiAgICAgIC8vIEZpbmQgYSB3YXkgdG8gc2hhcmUgdGhlIGBmaW5kVHlwZWAgY2FsbCB3aXRoIG1ldGhvZHMgdGhhdCBhbHNvIHVzZSB0aGUKICAgICAgLy8gdHlwZS4KICAgICAgcmV0dXJuIGpzKCcjKCMpJywKICAgICAgICAgIFtnZXRIZWxwZXJQcm9wZXJ0eShfY29tbW9uRWxlbWVudHMudHlwZUxpdGVyYWxNYWtlciksIHJlY2lwZV0pOwogICAgfSBlbHNlIHsKICAgICAganNBc3QuRXhwcmVzc2lvbiB1bmV4cGVjdGVkKFR5cGVWYXJpYWJsZVR5cGUgX3ZhcmlhYmxlKSB7CiAgICAgICAgVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSA9IF92YXJpYWJsZTsKICAgICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAiVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlICcke3ZhcmlhYmxlfSciCiAgICAgICAgICAgICIgaW4gY29uc3RhbnQgJyR7Y29uc3RhbnQudG9EYXJ0VGV4dCgpfSciKTsKICAgICAgfQoKICAgICAganNBc3QuRXhwcmVzc2lvbiBydGkgPQogICAgICAgICAgX3J0aUVuY29kZXIuZ2V0VHlwZVJlcHJlc2VudGF0aW9uKF9lbWl0dGVyLCB0eXBlLCB1bmV4cGVjdGVkKTsKCiAgICAgIHJldHVybiBuZXcganNBc3QuQ2FsbCgKICAgICAgICAgIGdldEhlbHBlclByb3BlcnR5KF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZSksIFtydGldKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRJbnRlcmNlcHRvcihJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgQ2xhc3NFbnRpdHkgaW50ZXJjZXB0b3JDbGFzcyA9IGNvbnN0YW50LmNsczsKICAgIHJldHVybiBfZW1pdHRlci5pbnRlcmNlcHRvclByb3RvdHlwZUFjY2VzcyhpbnRlcmNlcHRvckNsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRDb25zdHJ1Y3RlZChDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IGNvbnN0YW50LnR5cGUuZWxlbWVudDsKICAgIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0NvbnN0Q2xhc3MpIHsKICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBzdHIgPSBjb25zdGFudC5maWVsZHMudmFsdWVzLnNpbmdsZTsKICAgICAgU3RyaW5nIHZhbHVlID0gc3RyLnN0cmluZ1ZhbHVlOwogICAgICByZXR1cm4gbmV3IGpzQXN0LkxpdGVyYWxFeHByZXNzaW9uKHN0cmlwQ29tbWVudHModmFsdWUpKTsKICAgIH0KICAgIGpzQXN0LkV4cHJlc3Npb24gY29uc3RydWN0b3IgPQogICAgICAgIF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKGNvbnN0YW50LnR5cGUuZWxlbWVudCk7CiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGZpZWxkcyA9IDxqc0FzdC5FeHByZXNzaW9uPltdOwogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoSW5zdGFuY2VGaWVsZChlbGVtZW50LCAoXywgRmllbGRFbnRpdHkgZmllbGQpIHsKICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKTsKICAgICAgaWYgKGZpZWxkRGF0YS5pc0VsaWRlZCkgcmV0dXJuOwogICAgICBpZiAoIWZpZWxkRGF0YS5pc0luaXRpYWxpemVkSW5BbGxvY2F0b3IpIHsKICAgICAgICBmaWVsZHMuYWRkKF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihjb25zdGFudC5maWVsZHNbZmllbGRdKSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNvbnN0YW50LnR5cGUuZWxlbWVudCkpIHsKICAgICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgICBmaWVsZHMuYWRkKF9yZWlmaWVkVHlwZU5ld1J0aShjb25zdGFudC50eXBlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmllbGRzCiAgICAgICAgICAgIC5hZGQoX3JlaWZpZWRUeXBlQXJndW1lbnRzKGNvbnN0YW50LCBjb25zdGFudC50eXBlLnR5cGVBcmd1bWVudHMpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBqc0FzdC5OZXcoY29uc3RydWN0b3IsIGZpZWxkcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwKICAgICAgW19dKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPQogICAgICAgIF9jb21tb25FbGVtZW50cy5nZXRJbnN0YW50aWF0aW9uQ2xhc3MoY29uc3RhbnQudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBmaWVsZHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bCiAgICAgIF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihjb25zdGFudC5mdW5jdGlvbikKICAgIF07CiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICBmaWVsZHMKICAgICAgICAgIC5hZGQoX3JlaWZpZWRUeXBlTmV3UnRpKEludGVyZmFjZVR5cGUoY2xzLCBjb25zdGFudC50eXBlQXJndW1lbnRzKSkpOwogICAgfSBlbHNlIHsKICAgICAgZmllbGRzLmFkZChfcmVpZmllZFR5cGVBcmd1bWVudHMoY29uc3RhbnQsIGNvbnN0YW50LnR5cGVBcmd1bWVudHMpKTsKICAgIH0KICAgIGpzQXN0LkV4cHJlc3Npb24gY29uc3RydWN0b3IgPSBfZW1pdHRlci5jb25zdHJ1Y3RvckFjY2VzcyhjbHMpOwogICAgcmV0dXJuIG5ldyBqc0FzdC5OZXcoY29uc3RydWN0b3IsIGZpZWxkcyk7CiAgfQoKICBTdHJpbmcgc3RyaXBDb21tZW50cyhTdHJpbmcgcmF3SmF2YVNjcmlwdCkgewogICAgcmV0dXJuIHJhd0phdmFTY3JpcHQucmVwbGFjZUFsbChDT01NRU5UX1JFLCAnJyk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIG1heWJlQWRkVHlwZUFyZ3VtZW50cygKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSW50ZXJmYWNlVHlwZSB0eXBlLCBqc0FzdC5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgIXR5cGUudHJlYXRBc1JhdyAmJgogICAgICAgIF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKHR5cGUuZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5DYWxsKAogICAgICAgICAgZ2V0SGVscGVyUHJvcGVydHkoX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbyksCiAgICAgICAgICBbdmFsdWUsIF9yZWlmaWVkVHlwZUFyZ3VtZW50cyhjb25zdGFudCwgdHlwZS50eXBlQXJndW1lbnRzKV0pOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBtYXliZUFkZExpc3RUeXBlQXJndW1lbnRzTmV3UnRpKAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBJbnRlcmZhY2VUeXBlIHR5cGUsIGpzQXN0LkV4cHJlc3Npb24gdmFsdWUpIHsKICAgIC8vIExpc3Q8VD4gLS0+IEpTQXJyYXk8VD4KICAgIGlmICh0eXBlLmVsZW1lbnQgIT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykgewogICAgICB0eXBlID0gSW50ZXJmYWNlVHlwZShfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzLCB0eXBlLnR5cGVBcmd1bWVudHMpOwogICAgfQogICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKHR5cGUuZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5DYWxsKAogICAgICAgICAgZ2V0SGVscGVyUHJvcGVydHkoX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbyksCiAgICAgICAgICBbdmFsdWUsIF9yZWlmaWVkVHlwZU5ld1J0aSh0eXBlKV0pOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBfcmVpZmllZFR5cGVBcmd1bWVudHMoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gdW5leHBlY3RlZChUeXBlVmFyaWFibGVUeXBlIF92YXJpYWJsZSkgewogICAgICBUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlID0gX3ZhcmlhYmxlOwogICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICJVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgJyR7dmFyaWFibGV9JyIKICAgICAgICAgICIgaW4gY29uc3RhbnQgJyR7Y29uc3RhbnQudG9EYXJ0VGV4dCgpfSciKTsKICAgIH0KCiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IDxqc0FzdC5FeHByZXNzaW9uPltdOwogICAgZm9yIChEYXJ0VHlwZSBhcmd1bWVudCBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGFyZ3VtZW50cy5hZGQoCiAgICAgICAgICBfcnRpRW5jb2Rlci5nZXRUeXBlUmVwcmVzZW50YXRpb24oX2VtaXR0ZXIsIGFyZ3VtZW50LCB1bmV4cGVjdGVkKSk7CiAgICB9CiAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoYXJndW1lbnRzKTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gX3JlaWZpZWRUeXBlTmV3UnRpKERhcnRUeXBlIHR5cGUpIHsKICAgIGFzc2VydChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKTsKICAgIGFzc2VydCghdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpOwogICAganNBc3QuRXhwcmVzc2lvbiByZWNpcGUgPSBfcnRpUmVjaXBlRW5jb2Rlci5lbmNvZGVHcm91bmRSZWNpcGUoCiAgICAgICAgX2VtaXR0ZXIsIFR5cGVFeHByZXNzaW9uUmVjaXBlKHR5cGUpKTsKICAgIHJldHVybiBqcyhyJyMoIyknLCBbZ2V0SGVscGVyUHJvcGVydHkoX2NvbW1vbkVsZW1lbnRzLmZpbmRUeXBlKSwgcmVjaXBlXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0RGVmZXJyZWRHbG9iYWwoRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICBbX10pIHsKICAgIHJldHVybiBfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoY29uc3RhbnQucmVmZXJlbmNlZCk7CiAgfQp9CoIJAE5OPAEZIj8jJCEhISAsL0EaMh00KAFOAUkBTEEdPiIBKQFNTxw2HQQBNCgEAQxIKkIEAQxAJAQBDEYkBAEvHSowMg0BSw8GUThCOywcJSYoNSdMQBMEAQw+JlBPB0xLUR8uH0UyNzUGTSQGNAQBDEQpFxgrGCwZDUYxBgQBDEAnHRwZDx0ZCA05BgQBQ0E/DERABAEMUQ0pBAEMTikEAQxEGgQBDEsSDAEMTRIMAQxPDAEMRwEMTwwBDEUBDEUBDEcCATgEUEkoN1ESI0gBKTEjKSknGkEyAVFRFhMfHCAVGB4bFSgeGAEMQDcqIkk3JU4NRAYEAQxMDS4zKkoQUAYBOzUHATonNw8STQgGAU0yBAEMTA0fPDI0H0QUCgE6Mys9TAg2BgEmOjcpOys9ISMILwYBNioBPQFMQiI7NT9NElEfQiAfPUYfPy1JH0AnDxhOCB4IUSpQKhZMKh1GBgE6JzoPElAIBgFNRBIEAUIyBAEMQDgBJSsBRjEBKgFNUA8YSg1ALxgjNTgIAR1JAR1IBgQBDE4xQgQBDE4xMz8mQAYjOzpPSCYxSQgIQyc3Dw9QCAYvBAEMSw0WTjg1ByUNUA1LBkQvBAEvNQQBKkwhHDodQUkGEgQBNEweOE4GOh1BLgYSBAEqPj4tFiEzNgYBPS8VTgYyBAE3JylEL08EAQxNDT0EAgE1cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9jb25zdGFudF9lbWl0dGVyLmRhcnRLc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9zdGFydHVwX2VtaXR0ZXIvbW9kZWxfZW1pdHRlci5kYXJ0vtcvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuc3RhcnR1cF9lbWl0dGVyLm1vZGVsX2VtaXR0ZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBKc29uRW5jb2RlcjsKaW1wb3J0ICdkYXJ0Om1hdGgnIHNob3cgUmFuZG9tOwoKaW1wb3J0ICdwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgREVGRVJSRURfSU5JVElBTElaRUQsCiAgICAgICAgREVGRVJSRURfTElCUkFSWV9QQVJUUywKICAgICAgICBERUZFUlJFRF9QQVJUX1VSSVMsCiAgICAgICAgREVGRVJSRURfUEFSVF9IQVNIRVMsCiAgICAgICAgR0VUX1RZUEVfRlJPTV9OQU1FLAogICAgICAgIElOSVRJQUxJWkVfTE9BREVEX0hVTkssCiAgICAgICAgSU5URVJDRVBUT1JTX0JZX1RBRywKICAgICAgICBJU19IVU5LX0lOSVRJQUxJWkVELAogICAgICAgIElTX0hVTktfTE9BREVELAogICAgICAgIEpzR2V0TmFtZSwKICAgICAgICBMRUFGX1RBR1MsCiAgICAgICAgTUFOR0xFRF9HTE9CQUxfTkFNRVMsCiAgICAgICAgTUFOR0xFRF9OQU1FUywKICAgICAgICBNRVRBREFUQSwKICAgICAgICBOQVRJVkVfU1VQRVJDTEFTU19UQUdfTkFNRSwKICAgICAgICBSVElfVU5JVkVSU0UsCiAgICAgICAgUnRpVW5pdmVyc2VGaWVsZE5hbWVzLAogICAgICAgIFRZUEVfVE9fSU5URVJDRVBUT1JfTUFQLAogICAgICAgIFRZUEVTOwoKaW1wb3J0ICdwYWNrYWdlOmpzX2FzdC9zcmMvcHJlY2VkZW5jZS5kYXJ0JyBhcyBqc19wcmVjZWRlbmNlOwoKaW1wb3J0ICcuLi8uLi8uLi9jb21waWxlcl9uZXcuZGFydCc7CmltcG9ydCAnLi4vLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uLy4uL2NvbW1vbi90YXNrcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnCiAgICBzaG93IENvbnN0YW50VmFsdWUsIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSwgTnVsbENvbnN0YW50VmFsdWU7CmltcG9ydCAnLi4vLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHMsIEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vLi4vZHVtcF9pbmZvLmRhcnQnOwppbXBvcnQgJy4uLy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2hhc2gvc2hhMS5kYXJ0JyBzaG93IEhhc2hlcjsKaW1wb3J0ICcuLi8uLi9pby9jb2RlX291dHB1dC5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9pby9sb2NhdGlvbl9wcm92aWRlci5kYXJ0JyBzaG93IExvY2F0aW9uQ29sbGVjdG9yOwppbXBvcnQgJy4uLy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9pby9zb3VyY2VfbWFwX2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VNYXBCdWlsZGVyOwppbXBvcnQgJy4uLy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvanNfYmFja2VuZC5kYXJ0JwogICAgc2hvdyBOYW1lciwgQ29uc3RhbnRFbWl0dGVyLCBTdHJpbmdCYWNrZWROYW1lOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvanNfaW50ZXJvcF9hbmFseXNpcy5kYXJ0JyBhcyBqc0ludGVyb3BBbmFseXNpczsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCc7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX25ldy5kYXJ0JwogICAgc2hvdyBSZWNpcGVFbmNvZGVyLCBSZWNpcGVFbmNvZGVySW1wbCwgUnVsZXNldCwgUnVsZXNldEVuY29kZXI7CmltcG9ydCAnLi4vLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCcgc2hvdyBDb2RlZ2VuV29ybGQ7CmltcG9ydCAnLi4vLi4vd29ybGQuZGFydCc7CmltcG9ydCAnLi4vY29kZV9lbWl0dGVyX3Rhc2suZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRfb3JkZXJpbmcuZGFydCcgc2hvdyBDb25zdGFudE9yZGVyaW5nOwppbXBvcnQgJy4uL2hlYWRlcnMuZGFydCc7CmltcG9ydCAnLi4vanNfZW1pdHRlci5kYXJ0JyBzaG93IGJ1aWxkVGVhck9mZkNvZGUsIE5hdGl2ZUdlbmVyYXRvcjsKaW1wb3J0ICcuLi9tb2RlbC5kYXJ0JzsKCnBhcnQgJ2ZyYWdtZW50X2VtaXR0ZXIuZGFydCc7CgpjbGFzcyBNb2RlbEVtaXR0ZXIgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgX3JlcG9ydGVyOwogIGZpbmFsIENvbXBpbGVyT3V0cHV0IF9vdXRwdXRQcm92aWRlcjsKICBmaW5hbCBEdW1wSW5mb1Rhc2sgX2R1bXBJbmZvVGFzazsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgQ29tcGlsZXJUYXNrIF90YXNrOwogIGZpbmFsIEVtaXR0ZXIgX2VtaXR0ZXI7CiAgQ29uc3RhbnRFbWl0dGVyIF9jb25zdGFudEVtaXR0ZXI7CiAgZmluYWwgYm9vbCBfc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXA7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBDb25zdGFudE9yZGVyaW5nIF9jb25zdGFudE9yZGVyaW5nOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CgogIC8vIFRoZSBmdWxsIGNvZGUgdGhhdCBpcyB3cml0dGVuIHRvIGVhY2ggaHVuayBwYXJ0LWZpbGUuCiAgZmluYWwgTWFwPEZyYWdtZW50LCBDb2RlT3V0cHV0PiBvdXRwdXRCdWZmZXJzID0ge307CgogIFNldDxGcmFnbWVudD4gb21pdHRlZEZyYWdtZW50cyA9IFNldCgpOwoKICAvLy8gRm9yIGRlZmVycmVkIGxvYWRpbmcgd2UgY29tbXVuaWNhdGUgdGhlIGluaXRpYWxpemVycyB2aWEgdGhpcyBnbG9iYWwgdmFyLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWwgPQogICAgICByIiRfX2RhcnRfZGVmZXJyZWRfaW5pdGlhbGl6ZXJzX18iOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIHBhcnRFeHRlbnNpb24gPSAicGFydCI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkZWZlcnJlZEV4dGVuc2lvbiA9ICJwYXJ0LmpzIjsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0eXBlTmFtZVByb3BlcnR5ID0gciJidWlsdGluJGNscyI7CgogIE1vZGVsRW1pdHRlcigKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgdGhpcy5fcmVwb3J0ZXIsCiAgICAgIHRoaXMuX291dHB1dFByb3ZpZGVyLAogICAgICB0aGlzLl9kdW1wSW5mb1Rhc2ssCiAgICAgIHRoaXMuX25hbWVyLAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fdGFzaywKICAgICAgdGhpcy5fZW1pdHRlciwKICAgICAgdGhpcy5fc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgICAgUnVudGltZVR5cGVzRW5jb2RlciBydGlFbmNvZGVyLAogICAgICBSZWNpcGVFbmNvZGVyIHJ0aVJlY2lwZUVuY29kZXIsCiAgICAgIHRoaXMuX3Nob3VsZEdlbmVyYXRlU291cmNlTWFwKQogICAgICA6IF9jb25zdGFudE9yZGVyaW5nID0gbmV3IENvbnN0YW50T3JkZXJpbmcoX2Nsb3NlZFdvcmxkLnNvcnRlcikgewogICAgdGhpcy5fY29uc3RhbnRFbWl0dGVyID0gbmV3IENvbnN0YW50RW1pdHRlcigKICAgICAgICBfb3B0aW9ucywKICAgICAgICBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBfY2xvc2VkV29ybGQucnRpTmVlZCwKICAgICAgICBydGlFbmNvZGVyLAogICAgICAgIHJ0aVJlY2lwZUVuY29kZXIsCiAgICAgICAgX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMsCiAgICAgICAgX2VtaXR0ZXIsCiAgICAgICAgdGhpcy5nZW5lcmF0ZUNvbnN0YW50UmVmZXJlbmNlLAogICAgICAgIGNvbnN0YW50TGlzdEdlbmVyYXRvcik7CiAgfQoKICBqcy5FeHByZXNzaW9uIGNvbnN0YW50TGlzdEdlbmVyYXRvcihqcy5FeHByZXNzaW9uIGFycmF5KSB7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogcmVtb3ZlIGhhcmQtY29kZWQgbmFtZS4KICAgIHJldHVybiBqcy5qcygnbWFrZUNvbnN0TGlzdCgjKScsIFthcnJheV0pOwogIH0KCiAgYm9vbCBpc0NvbnN0YW50SW5saW5lZE9yQWxyZWFkeUVtaXR0ZWQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgaWYgKGNvbnN0YW50LmlzRnVuY3Rpb24pIHJldHVybiB0cnVlOyAvLyBBbHJlYWR5IGVtaXR0ZWQuCiAgICBpZiAoY29uc3RhbnQuaXNQcmltaXRpdmUpIHJldHVybiB0cnVlOyAvLyBJbmxpbmVkLgogICAgaWYgKGNvbnN0YW50LmlzRHVtbXkpIHJldHVybiB0cnVlOyAvLyBJbmxpbmVkLgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gVE9ETyhmbG9pdHNjaCk6IGNvcGllZCBmcm9tIE9sZEVtaXR0ZXIuIEFkanVzdCBvciBzaGFyZS4KICBpbnQgY29tcGFyZUNvbnN0YW50cyhDb25zdGFudFZhbHVlIGEsIENvbnN0YW50VmFsdWUgYikgewogICAgLy8gSW5saW5lZCBjb25zdGFudHMgZG9uJ3QgYWZmZWN0IHRoZSBvcmRlciBhbmQgc29tZXRpbWVzIGRvbid0IGV2ZW4gaGF2ZQogICAgLy8gbmFtZXMuCiAgICBpbnQgY21wMSA9IGlzQ29uc3RhbnRJbmxpbmVkT3JBbHJlYWR5RW1pdHRlZChhKSA/IDAgOiAxOwogICAgaW50IGNtcDIgPSBpc0NvbnN0YW50SW5saW5lZE9yQWxyZWFkeUVtaXR0ZWQoYikgPyAwIDogMTsKICAgIGlmIChjbXAxICsgY21wMiA8IDIpIHJldHVybiBjbXAxIC0gY21wMjsKCiAgICAvLyBFbWl0IGNvbnN0YW50IGludGVyY2VwdG9ycyBmaXJzdC4gQ29uc3RhbnQgaW50ZXJjZXB0b3JzIGZvciBwcmltaXRpdmVzCiAgICAvLyBtaWdodCBiZSB1c2VkIGJ5IGNvZGUgdGhhdCBidWlsZHMgb3RoZXIgY29uc3RhbnRzLiAgU2VlIElzc3VlIDE4MTczLgogICAgaWYgKGEuaXNJbnRlcmNlcHRvciAhPSBiLmlzSW50ZXJjZXB0b3IpIHsKICAgICAgcmV0dXJuIGEuaXNJbnRlcmNlcHRvciA/IC0xIDogMTsKICAgIH0KCiAgICAvLyBTb3J0aW5nIGJ5IHRoZSBsb25nIG5hbWUgY2x1c3RlcnMgY29uc3RhbnRzIHdpdGggdGhlIHNhbWUgY29uc3RydWN0b3IKICAgIC8vIHdoaWNoIGNvbXByZXNzZXMgYSB0aW55IGJpdCBiZXR0ZXIuCiAgICBpbnQgciA9IF9uYW1lci5jb25zdGFudExvbmdOYW1lKGEpLmNvbXBhcmVUbyhfbmFtZXIuY29uc3RhbnRMb25nTmFtZShiKSk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKCiAgICAvLyBSZXNvbHZlIGNvbGxpc2lvbnMgaW4gdGhlIGxvbmcgbmFtZSBieSB1c2luZyBhIHN0cnVjdHVyYWwgb3JkZXIuCiAgICByZXR1cm4gX2NvbnN0YW50T3JkZXJpbmcuY29tcGFyZShhLCBiKTsKICB9CgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZShDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUuaXNGdW5jdGlvbikgewogICAgICBGdW5jdGlvbkNvbnN0YW50VmFsdWUgZnVuY3Rpb25Db25zdGFudCA9IHZhbHVlOwogICAgICByZXR1cm4gX2VtaXR0ZXIuc3RhdGljQ2xvc3VyZUFjY2VzcyhmdW5jdGlvbkNvbnN0YW50LmVsZW1lbnQpOwogICAgfQoKICAgIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlICJpc0lubGluZWQiIHBhcnQsIGJ1dCBpdCBkb2VzIG5vdCBodXJ0IHRvCiAgICAvLyB0ZXN0IGZvciB0aGUgb3RoZXIgcHJlZGljYXRlcy4KICAgIGlmIChpc0NvbnN0YW50SW5saW5lZE9yQWxyZWFkeUVtaXR0ZWQodmFsdWUpKSB7CiAgICAgIHJldHVybiBfY29uc3RhbnRFbWl0dGVyLmdlbmVyYXRlKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBqcy5qcygnIy4jJywKICAgICAgICBbX25hbWVyLmdsb2JhbE9iamVjdEZvckNvbnN0YW50KHZhbHVlKSwgX25hbWVyLmNvbnN0YW50TmFtZSh2YWx1ZSldKTsKICB9CgogIGludCBlbWl0UHJvZ3JhbShQcm9ncmFtIHByb2dyYW0sIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQpIHsKICAgIE1haW5GcmFnbWVudCBtYWluRnJhZ21lbnQgPSBwcm9ncmFtLmZyYWdtZW50cy5maXJzdDsKICAgIExpc3Q8RGVmZXJyZWRGcmFnbWVudD4gZGVmZXJyZWRGcmFnbWVudHMgPQogICAgICAgIG5ldyBMaXN0PERlZmVycmVkRnJhZ21lbnQ+LmZyb20ocHJvZ3JhbS5kZWZlcnJlZEZyYWdtZW50cyk7CgogICAgRnJhZ21lbnRFbWl0dGVyIGZyYWdtZW50RW1pdHRlciA9IG5ldyBGcmFnbWVudEVtaXR0ZXIoCiAgICAgICAgX29wdGlvbnMsCiAgICAgICAgX2R1bXBJbmZvVGFzaywKICAgICAgICBfbmFtZXIsCiAgICAgICAgX2VtaXR0ZXIsCiAgICAgICAgX2NvbnN0YW50RW1pdHRlciwKICAgICAgICB0aGlzLAogICAgICAgIF9jbG9zZWRXb3JsZCwKICAgICAgICBjb2RlZ2VuV29ybGQpOwoKICAgIHZhciBkZWZlcnJlZExvYWRpbmdTdGF0ZSA9IG5ldyBEZWZlcnJlZExvYWRpbmdTdGF0ZSgpOwogICAganMuU3RhdGVtZW50IG1haW5Db2RlID0KICAgICAgICBmcmFnbWVudEVtaXR0ZXIuZW1pdE1haW5GcmFnbWVudChwcm9ncmFtLCBkZWZlcnJlZExvYWRpbmdTdGF0ZSk7CgogICAgTWFwPERlZmVycmVkRnJhZ21lbnQsIGpzLkV4cHJlc3Npb24+IGRlZmVycmVkRnJhZ21lbnRzQ29kZSA9IHt9OwoKICAgIGZvciAoRGVmZXJyZWRGcmFnbWVudCBmcmFnbWVudCBpbiBkZWZlcnJlZEZyYWdtZW50cykgewogICAgICBqcy5FeHByZXNzaW9uIHR5cGVzID0KICAgICAgICAgIHByb2dyYW0ubWV0YWRhdGFUeXBlc0Zvck91dHB1dFVuaXQoZnJhZ21lbnQub3V0cHV0VW5pdCk7CiAgICAgIGpzLkV4cHJlc3Npb24gZnJhZ21lbnRDb2RlID0gZnJhZ21lbnRFbWl0dGVyLmVtaXREZWZlcnJlZEZyYWdtZW50KAogICAgICAgICAgZnJhZ21lbnQsIHR5cGVzLCBwcm9ncmFtLmhvbGRlcnMpOwogICAgICBpZiAoZnJhZ21lbnRDb2RlICE9IG51bGwpIHsKICAgICAgICBkZWZlcnJlZEZyYWdtZW50c0NvZGVbZnJhZ21lbnRdID0gZnJhZ21lbnRDb2RlOwogICAgICB9IGVsc2UgewogICAgICAgIG9taXR0ZWRGcmFnbWVudHMuYWRkKGZyYWdtZW50KTsKICAgICAgfQogICAgfQoKICAgIGpzLlRva2VuQ291bnRlciBjb3VudGVyID0gbmV3IGpzLlRva2VuQ291bnRlcigpOwogICAgZGVmZXJyZWRGcmFnbWVudHNDb2RlLnZhbHVlcy5mb3JFYWNoKGNvdW50ZXIuY291bnRUb2tlbnMpOwogICAgY291bnRlci5jb3VudFRva2VucyhtYWluQ29kZSk7CgogICAgcHJvZ3JhbS5maW5hbGl6ZXJzLmZvckVhY2goKGpzLlRva2VuRmluYWxpemVyIGYpID0+IGYuZmluYWxpemVUb2tlbnMoKSk7CgogICAgLy8gVE9ETyhzcmEpOiBUaGlzIGlzIHdoZXJlIHdlIGtub3cgaWYgdGhlIHR5cGVzIChhbmQgcG90ZW50aWFsbHkgb3RoZXIKICAgIC8vIGRlZmVycmVkIEFTVHMgaW5zaWRlIHRoZSBwYXJ0cykgaGF2ZSBhbnkgY29udGVudHMuIFdlIHNob3VsZCB3YWl0IHVudGlsCiAgICAvLyB0aGlzIHBvaW50IHRvIGRlY2lkZSBpZiBhIHBhcnQgaXMgZW1wdHkuCgogICAgTWFwPERlZmVycmVkRnJhZ21lbnQsIFN0cmluZz4gaHVua0hhc2hlcyA9CiAgICAgICAgX3Rhc2subWVhc3VyZVN1YnRhc2soJ3dyaXRlIGZyYWdtZW50cycsICgpIHsKICAgICAgcmV0dXJuIHdyaXRlRGVmZXJyZWRGcmFnbWVudHMoZGVmZXJyZWRGcmFnbWVudHNDb2RlKTsKICAgIH0pOwoKICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgd3JpdHRlbiB0aGUgZGVmZXJyZWQgaHVua3MsIHdlIGNhbiBjcmVhdGUgdGhlIGRlZmVycmVkCiAgICAvLyBsb2FkaW5nIGRhdGEuCiAgICBmcmFnbWVudEVtaXR0ZXIuZmluYWxpemVEZWZlcnJlZExvYWRpbmdEYXRhKAogICAgICAgIHByb2dyYW0ubG9hZE1hcCwgaHVua0hhc2hlcywgZGVmZXJyZWRMb2FkaW5nU3RhdGUpOwoKICAgIF90YXNrLm1lYXN1cmVTdWJ0YXNrKCd3cml0ZSBmcmFnbWVudHMnLCAoKSB7CiAgICAgIHdyaXRlTWFpbkZyYWdtZW50KG1haW5GcmFnbWVudCwgbWFpbkNvZGUsCiAgICAgICAgICBpc1NwbGl0OiBwcm9ncmFtLmRlZmVycmVkRnJhZ21lbnRzLmlzTm90RW1wdHkgfHwKICAgICAgICAgICAgICBwcm9ncmFtLmhhc1NvZnREZWZlcnJlZENsYXNzZXMgfHwKICAgICAgICAgICAgICBfb3B0aW9ucy5leHBlcmltZW50YWxUcmFja0FsbG9jYXRpb25zKTsKICAgIH0pOwoKICAgIGlmIChfY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLnJlcXVpcmVzUHJlYW1ibGUgJiYKICAgICAgICAhX2Nsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZS5pc0h0bWxMb2FkZWQpIHsKICAgICAgX3JlcG9ydGVyLnJlcG9ydEhpbnRNZXNzYWdlKE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgTWVzc2FnZUtpbmQuUFJFQU1CTEUpOwogICAgfQoKICAgIGlmIChfb3B0aW9ucy5kZWZlcnJlZE1hcFVyaSAhPSBudWxsKSB7CiAgICAgIHdyaXRlRGVmZXJyZWRNYXAoKTsKICAgIH0KCiAgICAvLyBSZXR1cm4gdGhlIHRvdGFsIHByb2dyYW0gc2l6ZS4KICAgIHJldHVybiBvdXRwdXRCdWZmZXJzLnZhbHVlcy5mb2xkKDAsIChhLCBiKSA9PiBhICsgYi5sZW5ndGgpOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBhIHNpbXBsZSBoZWFkZXIgdGhhdCBwcm92aWRlcyB0aGUgY29tcGlsZXIncyBidWlsZCBpZC4KICBqcy5Db21tZW50IGJ1aWxkR2VuZXJhdGVkQnkoKSB7CiAgICBTdHJpbmdCdWZmZXIgZmxhdm9yID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZmxhdm9yLndyaXRlKCdmYXN0IHN0YXJ0dXAgZW1pdHRlcicpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgZmxhdm9yLgogICAgZmxhdm9yLndyaXRlKCcsIHN0cm9uZycpOwogICAgaWYgKF9vcHRpb25zLnRydXN0UHJpbWl0aXZlcykgZmxhdm9yLndyaXRlKCcsIHRydXN0IHByaW1pdGl2ZXMnKTsKICAgIGlmIChfb3B0aW9ucy5vbWl0SW1wbGljaXRDaGVja3MpIGZsYXZvci53cml0ZSgnLCBvbWl0IGNoZWNrcycpOwogICAgaWYgKF9vcHRpb25zLmxheFJ1bnRpbWVUeXBlVG9TdHJpbmcpIHsKICAgICAgZmxhdm9yLndyaXRlKCcsIGxheCBydW50aW1lIHR5cGUnKTsKICAgIH0KICAgIGlmIChfb3B0aW9ucy51c2VDb250ZW50U2VjdXJpdHlQb2xpY3kpIGZsYXZvci53cml0ZSgnLCBDU1AnKTsKICAgIHJldHVybiBuZXcganMuQ29tbWVudChnZW5lcmF0ZWRCeShfb3B0aW9ucywgZmxhdm9yOiAnJGZsYXZvcicpKTsKICB9CgogIC8vLyBXcml0ZXMgYWxsIGRlZmVycmVkIGZyYWdtZW50J3MgY29kZSBpbnRvIGZpbGVzLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgbWFwIGZyb20gZnJhZ21lbnQgdG8gaXRzIGhhc2hjb2RlIChhcyB1c2VkIGZvciB0aGUgZGVmZXJyZWQKICAvLy8gbGlicmFyeSBjb2RlKS4KICAvLy8KICAvLy8gVXBkYXRlcyB0aGUgc2hhcmVkIFtvdXRwdXRCdWZmZXJzXSBmaWVsZCB3aXRoIHRoZSBvdXRwdXQuCiAgTWFwPERlZmVycmVkRnJhZ21lbnQsIFN0cmluZz4gd3JpdGVEZWZlcnJlZEZyYWdtZW50cygKICAgICAgTWFwPERlZmVycmVkRnJhZ21lbnQsIGpzLkV4cHJlc3Npb24+IGZyYWdtZW50c0NvZGUpIHsKICAgIE1hcDxEZWZlcnJlZEZyYWdtZW50LCBTdHJpbmc+IGh1bmtIYXNoZXMgPSB7fTsKCiAgICBmcmFnbWVudHNDb2RlLmZvckVhY2goKERlZmVycmVkRnJhZ21lbnQgZnJhZ21lbnQsIGpzLkV4cHJlc3Npb24gY29kZSkgewogICAgICBodW5rSGFzaGVzW2ZyYWdtZW50XSA9IHdyaXRlRGVmZXJyZWRGcmFnbWVudChmcmFnbWVudCwgY29kZSk7CiAgICB9KTsKCiAgICByZXR1cm4gaHVua0hhc2hlczsKICB9CgogIGpzLlN0YXRlbWVudCBidWlsZERlZmVycmVkSW5pdGlhbGl6ZXJHbG9iYWwoKSB7CiAgICByZXR1cm4ganMuanMuc3RhdGVtZW50KAogICAgICAgICdzZWxmLiNkZWZlcnJlZEluaXRpYWxpemVycyA9ICcKICAgICAgICAnc2VsZi4jZGVmZXJyZWRJbml0aWFsaXplcnMgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTsnLAogICAgICAgIHsnZGVmZXJyZWRJbml0aWFsaXplcnMnOiBkZWZlcnJlZEluaXRpYWxpemVyc0dsb2JhbH0pOwogIH0KCiAgLy8gV3JpdGVzIHRoZSBnaXZlbiBbZnJhZ21lbnRdJ3MgW2NvZGVdIGludG8gYSBmaWxlLgogIC8vCiAgLy8gVXBkYXRlcyB0aGUgc2hhcmVkIFtvdXRwdXRCdWZmZXJzXSBmaWVsZCB3aXRoIHRoZSBvdXRwdXQuCiAgdm9pZCB3cml0ZU1haW5GcmFnbWVudChNYWluRnJhZ21lbnQgZnJhZ21lbnQsIGpzLlN0YXRlbWVudCBjb2RlLAogICAgICB7Ym9vbCBpc1NwbGl0fSkgewogICAgTG9jYXRpb25Db2xsZWN0b3IgbG9jYXRpb25Db2xsZWN0b3I7CiAgICBMaXN0PENvZGVPdXRwdXRMaXN0ZW5lcj4gY29kZU91dHB1dExpc3RlbmVyczsKICAgIGlmIChfc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXApIHsKICAgICAgX3Rhc2subWVhc3VyZVN1YnRhc2soJ3NvdXJjZS1tYXBzJywgKCkgewogICAgICAgIGxvY2F0aW9uQ29sbGVjdG9yID0gbmV3IExvY2F0aW9uQ29sbGVjdG9yKCk7CiAgICAgICAgY29kZU91dHB1dExpc3RlbmVycyA9IDxDb2RlT3V0cHV0TGlzdGVuZXI+W2xvY2F0aW9uQ29sbGVjdG9yXTsKICAgICAgfSk7CiAgICB9CgogICAgQ29kZU91dHB1dCBtYWluT3V0cHV0ID0gbmV3IFN0cmVhbUNvZGVPdXRwdXQoCiAgICAgICAgX291dHB1dFByb3ZpZGVyLmNyZWF0ZU91dHB1dFNpbmsoJycsICdqcycsIE91dHB1dFR5cGUuanMpLAogICAgICAgIGNvZGVPdXRwdXRMaXN0ZW5lcnMpOwogICAgb3V0cHV0QnVmZmVyc1tmcmFnbWVudF0gPSBtYWluT3V0cHV0OwoKICAgIGpzLlByb2dyYW0gcHJvZ3JhbSA9IG5ldyBqcy5Qcm9ncmFtKFsKICAgICAgYnVpbGRHZW5lcmF0ZWRCeSgpLAogICAgICBuZXcganMuQ29tbWVudChIT09LU19BUElfVVNBR0UpLAogICAgICBpc1NwbGl0ID8gYnVpbGREZWZlcnJlZEluaXRpYWxpemVyR2xvYmFsKCkgOiBuZXcganMuQmxvY2suZW1wdHkoKSwKICAgICAgY29kZQogICAgXSk7CgogICAgQ29kZUJ1ZmZlciBidWZmZXIgPSBqcy5jcmVhdGVDb2RlQnVmZmVyKAogICAgICAgIHByb2dyYW0sIF9vcHRpb25zLCBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgICAgICBtb25pdG9yOiBfZHVtcEluZm9UYXNrKTsKICAgIF90YXNrLm1lYXN1cmVTdWJ0YXNrKCdlbWl0IGJ1ZmZlcnMnLCAoKSB7CiAgICAgIG1haW5PdXRwdXQuYWRkQnVmZmVyKGJ1ZmZlcik7CiAgICB9KTsKCiAgICBpZiAoX3Nob3VsZEdlbmVyYXRlU291cmNlTWFwKSB7CiAgICAgIF90YXNrLm1lYXN1cmVTdWJ0YXNrKCdzb3VyY2UtbWFwcycsICgpIHsKICAgICAgICBtYWluT3V0cHV0LmFkZChTb3VyY2VNYXBCdWlsZGVyLmdlbmVyYXRlU291cmNlTWFwVGFnKAogICAgICAgICAgICBfb3B0aW9ucy5zb3VyY2VNYXBVcmksIF9vcHRpb25zLm91dHB1dFVyaSkpOwogICAgICB9KTsKICAgIH0KCiAgICBtYWluT3V0cHV0LmNsb3NlKCk7CgogICAgaWYgKF9zaG91bGRHZW5lcmF0ZVNvdXJjZU1hcCkgewogICAgICBfdGFzay5tZWFzdXJlU3VidGFzaygnc291cmNlLW1hcHMnLCAoKSB7CiAgICAgICAgU291cmNlTWFwQnVpbGRlci5vdXRwdXRTb3VyY2VNYXAoCiAgICAgICAgICAgIG1haW5PdXRwdXQsCiAgICAgICAgICAgIGxvY2F0aW9uQ29sbGVjdG9yLAogICAgICAgICAgICBfbmFtZXIuY3JlYXRlTWluaWZpZWRHbG9iYWxOYW1lTWFwKCksCiAgICAgICAgICAgIF9uYW1lci5jcmVhdGVNaW5pZmllZEluc3RhbmNlTmFtZU1hcCgpLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgX29wdGlvbnMuc291cmNlTWFwVXJpLAogICAgICAgICAgICBfb3B0aW9ucy5vdXRwdXRVcmksCiAgICAgICAgICAgIF9vdXRwdXRQcm92aWRlcik7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gV3JpdGVzIHRoZSBnaXZlbiBbZnJhZ21lbnRdJ3MgW2NvZGVdIGludG8gYSBmaWxlLgogIC8vCiAgLy8gUmV0dXJucyB0aGUgZGVmZXJyZWQgZnJhZ21lbnQncyBoYXNoLgogIC8vCiAgLy8gVXBkYXRlcyB0aGUgc2hhcmVkIFtvdXRwdXRCdWZmZXJzXSBmaWVsZCB3aXRoIHRoZSBvdXRwdXQuCiAgU3RyaW5nIHdyaXRlRGVmZXJyZWRGcmFnbWVudChEZWZlcnJlZEZyYWdtZW50IGZyYWdtZW50LCBqcy5FeHByZXNzaW9uIGNvZGUpIHsKICAgIExpc3Q8Q29kZU91dHB1dExpc3RlbmVyPiBvdXRwdXRMaXN0ZW5lcnMgPSBbXTsKICAgIEhhc2hlciBoYXNoZXIgPSBuZXcgSGFzaGVyKCk7CiAgICBvdXRwdXRMaXN0ZW5lcnMuYWRkKGhhc2hlcik7CgogICAgTG9jYXRpb25Db2xsZWN0b3IgbG9jYXRpb25Db2xsZWN0b3I7CiAgICBpZiAoX3Nob3VsZEdlbmVyYXRlU291cmNlTWFwKSB7CiAgICAgIF90YXNrLm1lYXN1cmVTdWJ0YXNrKCdzb3VyY2UtbWFwcycsICgpIHsKICAgICAgICBsb2NhdGlvbkNvbGxlY3RvciA9IG5ldyBMb2NhdGlvbkNvbGxlY3RvcigpOwogICAgICAgIG91dHB1dExpc3RlbmVycy5hZGQobG9jYXRpb25Db2xsZWN0b3IpOwogICAgICB9KTsKICAgIH0KCiAgICBTdHJpbmcgaHVua1ByZWZpeCA9IGZyYWdtZW50Lm91dHB1dEZpbGVOYW1lOwoKICAgIENvZGVPdXRwdXQgb3V0cHV0ID0gbmV3IFN0cmVhbUNvZGVPdXRwdXQoCiAgICAgICAgX291dHB1dFByb3ZpZGVyLmNyZWF0ZU91dHB1dFNpbmsoCiAgICAgICAgICAgIGh1bmtQcmVmaXgsIGRlZmVycmVkRXh0ZW5zaW9uLCBPdXRwdXRUeXBlLmpzUGFydCksCiAgICAgICAgb3V0cHV0TGlzdGVuZXJzKTsKCiAgICBvdXRwdXRCdWZmZXJzW2ZyYWdtZW50XSA9IG91dHB1dDsKCiAgICAvLyBUaGUgW2NvZGVdIGNvbnRhaW5zIHRoZSBmdW5jdGlvbiB0aGF0IG11c3QgYmUgaW52b2tlZCB3aGVuIHRoZSBkZWZlcnJlZAogICAgLy8gaHVuayBpcyBsb2FkZWQuCiAgICAvLyBUaGF0IGZ1bmN0aW9uIG11c3QgYmUgaW4gYSBtYXAgZnJvbSBpdHMgaGFzaGNvZGUgdG8gdGhlIGZ1bmN0aW9uLiBTaW5jZQogICAgLy8gd2UgZG9uJ3Qga25vdyB0aGUgaGFzaCBiZWZvcmUgd2UgYWN0dWFsbHkgZW1pdCB0aGUgY29kZSB3ZSBzdG9yZSB0aGUKICAgIC8vIGZ1bmN0aW9uIGluIGEgdGVtcG9yYXJ5IGZpZWxkIGZpcnN0OgogICAgLy8KICAgIC8vICAgZGVmZXJyZWRJbml0aWFsaXplci5jdXJyZW50ID0gPHByZXR0eS1wcmludGVkIGNvZGU+OwogICAgLy8gICBkZWZlcnJlZEluaXRpYWxpemVyWzxoYXNoPl0gPSBkZWZlcnJlZEluaXRpYWxpemVyLmN1cnJlbnQ7CgogICAganMuUHJvZ3JhbSBwcm9ncmFtID0gbmV3IGpzLlByb2dyYW0oWwogICAgICBidWlsZEdlbmVyYXRlZEJ5KCksCiAgICAgIGJ1aWxkRGVmZXJyZWRJbml0aWFsaXplckdsb2JhbCgpLAogICAgICBqcy5qcy5zdGF0ZW1lbnQoJyRkZWZlcnJlZEluaXRpYWxpemVyc0dsb2JhbC5jdXJyZW50ID0gIycsIGNvZGUpCiAgICBdKTsKCiAgICBDb2RlQnVmZmVyIGJ1ZmZlciA9IGpzLmNyZWF0ZUNvZGVCdWZmZXIoCiAgICAgICAgcHJvZ3JhbSwgX29wdGlvbnMsIF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LAogICAgICAgIG1vbml0b3I6IF9kdW1wSW5mb1Rhc2spOwogICAgX3Rhc2subWVhc3VyZVN1YnRhc2soJ2VtaXQgYnVmZmVycycsICgpIHsKICAgICAgb3V0cHV0LmFkZEJ1ZmZlcihidWZmZXIpOwogICAgfSk7CgogICAgLy8gTWFrZSBhIHVuaXF1ZSBoYXNoIG9mIHRoZSBjb2RlIChiZWZvcmUgdGhlIHNvdXJjZW1hcHMgYXJlIGFkZGVkKQogICAgLy8gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIGluaXRpYWxpemluZyBmdW5jdGlvbiBmcm9tIHRoZSBnbG9iYWwKICAgIC8vIHZhcmlhYmxlLgogICAgU3RyaW5nIGhhc2ggPSBoYXNoZXIuZ2V0SGFzaCgpOwoKICAgIC8vIE5vdyB3ZSBjb3B5IHRoZSBkZWZlcnJlZEluaXRpYWxpemVyLmN1cnJlbnQgaW50byBpdHMgY29ycmVjdCBoYXNoLgogICAgb3V0cHV0LmFkZCgnXG4ke2RlZmVycmVkSW5pdGlhbGl6ZXJzR2xvYmFsfVsiJGhhc2giXSA9ICcKICAgICAgICAnJHtkZWZlcnJlZEluaXRpYWxpemVyc0dsb2JhbH0uY3VycmVudCcpOwoKICAgIGlmIChfc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXApIHsKICAgICAgX3Rhc2subWVhc3VyZVN1YnRhc2soJ3NvdXJjZS1tYXBzJywgKCkgewogICAgICAgIFVyaSBtYXBVcmksIHBhcnRVcmk7CiAgICAgICAgVXJpIHNvdXJjZU1hcFVyaSA9IF9vcHRpb25zLnNvdXJjZU1hcFVyaTsKICAgICAgICBVcmkgb3V0cHV0VXJpID0gX29wdGlvbnMub3V0cHV0VXJpOwogICAgICAgIFN0cmluZyBwYXJ0TmFtZSA9ICIkaHVua1ByZWZpeC4kcGFydEV4dGVuc2lvbiI7CiAgICAgICAgU3RyaW5nIGh1bmtGaWxlTmFtZSA9ICIkaHVua1ByZWZpeC4kZGVmZXJyZWRFeHRlbnNpb24iOwoKICAgICAgICBpZiAoc291cmNlTWFwVXJpICE9IG51bGwpIHsKICAgICAgICAgIFN0cmluZyBtYXBGaWxlTmFtZSA9IGh1bmtGaWxlTmFtZSArICIubWFwIjsKICAgICAgICAgIExpc3Q8U3RyaW5nPiBtYXBTZWdtZW50cyA9IHNvdXJjZU1hcFVyaS5wYXRoU2VnbWVudHMudG9MaXN0KCk7CiAgICAgICAgICBtYXBTZWdtZW50c1ttYXBTZWdtZW50cy5sZW5ndGggLSAxXSA9IG1hcEZpbGVOYW1lOwogICAgICAgICAgbWFwVXJpID0gX29wdGlvbnMuc291cmNlTWFwVXJpLnJlcGxhY2UocGF0aFNlZ21lbnRzOiBtYXBTZWdtZW50cyk7CiAgICAgICAgfQoKICAgICAgICBpZiAob3V0cHV0VXJpICE9IG51bGwpIHsKICAgICAgICAgIExpc3Q8U3RyaW5nPiBwYXJ0U2VnbWVudHMgPSBvdXRwdXRVcmkucGF0aFNlZ21lbnRzLnRvTGlzdCgpOwogICAgICAgICAgcGFydFNlZ21lbnRzW3BhcnRTZWdtZW50cy5sZW5ndGggLSAxXSA9IGh1bmtGaWxlTmFtZTsKICAgICAgICAgIHBhcnRVcmkgPSBfb3B0aW9ucy5vdXRwdXRVcmkucmVwbGFjZShwYXRoU2VnbWVudHM6IHBhcnRTZWdtZW50cyk7CiAgICAgICAgfQoKICAgICAgICBvdXRwdXQuYWRkKFNvdXJjZU1hcEJ1aWxkZXIuZ2VuZXJhdGVTb3VyY2VNYXBUYWcobWFwVXJpLCBwYXJ0VXJpKSk7CiAgICAgICAgb3V0cHV0LmNsb3NlKCk7CiAgICAgICAgU291cmNlTWFwQnVpbGRlci5vdXRwdXRTb3VyY2VNYXAob3V0cHV0LCBsb2NhdGlvbkNvbGxlY3Rvciwge30sIHt9LAogICAgICAgICAgICBwYXJ0TmFtZSwgbWFwVXJpLCBwYXJ0VXJpLCBfb3V0cHV0UHJvdmlkZXIpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIG91dHB1dC5jbG9zZSgpOwogICAgfQoKICAgIHJldHVybiBoYXNoOwogIH0KCiAgLy8vIFdyaXRlcyBhIG1hcHBpbmcgZnJvbSBsaWJyYXJ5LW5hbWUgdG8gaHVuayBmaWxlcy4KICAvLy8KICAvLy8gVGhlIG91dHB1dCBpcyB3cml0dGVuIGludG8gYSBzZXBhcmF0ZSBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgYnkgb3V0c2lkZQogIC8vLyB0b29scy4KICB2b2lkIHdyaXRlRGVmZXJyZWRNYXAoKSB7CiAgICBNYXA8U3RyaW5nLCBkeW5hbWljPiBtYXBwaW5nID0ge307CiAgICAvLyBKc29uIGRvZXMgbm90IHN1cHBvcnQgY29tbWVudHMsIHNvIHdlIGVtYmVkIHRoZSBleHBsYW5hdGlvbiBpbiB0aGUKICAgIC8vIGRhdGEuCiAgICBtYXBwaW5nWyJfY29tbWVudCJdID0gIlRoaXMgbWFwcGluZyBzaG93cyB3aGljaCBjb21waWxlZCBgLmpzYCBmaWxlcyBhcmUgIgogICAgICAgICJuZWVkZWQgZm9yIGEgZ2l2ZW4gZGVmZXJyZWQgbGlicmFyeSBpbXBvcnQuIjsKICAgIG1hcHBpbmcuYWRkQWxsKF9jbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5jb21wdXRlRGVmZXJyZWRNYXAoCiAgICAgICAgX29wdGlvbnMsIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgb21pdHRlZFVuaXRzOgogICAgICAgICAgICBvbWl0dGVkRnJhZ21lbnRzLm1hcCgoZnJhZ21lbnQpID0+IGZyYWdtZW50Lm91dHB1dFVuaXQpLnRvU2V0KCkpKTsKICAgIF9vdXRwdXRQcm92aWRlci5jcmVhdGVPdXRwdXRTaW5rKAogICAgICAgIF9vcHRpb25zLmRlZmVycmVkTWFwVXJpLnBhdGgsICcnLCBPdXRwdXRUeXBlLmRlZmVycmVkTWFwKQogICAgICAuLmFkZChjb25zdCBKc29uRW5jb2Rlci53aXRoSW5kZW50KCIgICIpLmNvbnZlcnQobWFwcGluZykpCiAgICAgIC4uY2xvc2UoKTsKICB9Cn0KgcUATk48AToBKCABNwkeIBweHCAdHRgTEx4XEiQWHyEPAT4BJRwiJUJOHyckKyRBK0EhKjNJLjYxRB1GGyQ6GkQYAR4BFSImKCQWHBokJyMsPgE7NgEqAVAzKgEuNQE5ARAVFhwaExkSFScmJiVIMRIlKR4UGiQSKCAEAT0vLwQBQz43MxIEAT47Tg49PS0BTkwuJwYBTStOGgFILAQBQRw2RQYBTyY0LwYYTgQBQDkvRAE7EhcQEhoOFhcBOxxJAUUBOxxDSS0iOA8oCAYBNT8jAU0BTE8wAS81PAgBTxUxPAExMDswNggBNjNQBgErGgYBJkEEAUciLiowHkZEKyoGQkUEATYGTBUGQDg8MwFMRAgBFwQBMhwoPj8EATcFP0MYKTIkLzVHCgYBMkMeKgEqGidJCwgBLTchLiQIASQvPjkKBgEYASQvKhgfMjQQIyAeCgYEATcFKwU/UDMiIQEpJC81MAoGATEBLio/GgEmAU8XT0wsBz5EASoaKEcIAS03IS4gCAFITxEkAUo9MgEkLx0yLDhAASQ2ST1NCgEhR0BMCgFMGEw5Cg0WBgERBAE4Bk0NHCdKDU83QzMWTyZCQREEAgFCcGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9zdGFydHVwX2VtaXR0ZXIvbW9kZWxfZW1pdHRlci5kYXJ0TnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvc3RhcnR1cF9lbWl0dGVyL2ZyYWdtZW50X2VtaXR0ZXIuZGFydMABOAMvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0MmpzLmpzX2VtaXR0ZXIuc3RhcnR1cF9lbWl0dGVyLm1vZGVsX2VtaXR0ZXI7CgovLy8gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc3RvcmVzIHRoZSB0ZWFyLW9mZiBnZXR0ZXIgb24gYSBzdGF0aWMKLy8vIGZ1bmN0aW9uLgovLy8KLy8vIFRoaXMgcHJvcGVydHkgaXMgb25seSB1c2VkIHdoZW4gaXNvbGF0ZXMgYXJlIHVzZWQuCi8vLwovLy8gV2hlbiBzZXJpYWxpemluZyBzdGF0aWMgZnVuY3Rpb25zIHdlIHRyYW5zbWl0IHRoZQovLy8gbmFtZSBvZiB0aGUgc3RhdGljIGZ1bmN0aW9uLCBidXQgbm90IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbidzIGdldHRlci4gV2UKLy8vIHN0b3JlIHRoZSBnZXR0ZXItZnVuY3Rpb24gb24gdGhlIHN0YXRpYyBmdW5jdGlvbiBpdHNlbGYsIHdoaWNoIGFsbG93cyB1cyB0bwovLy8gZmluZCBpdCBlYXNpbHkuCmNvbnN0IFN0cmluZyB0ZWFyT2ZmUHJvcGVydHlOYW1lID0gcickdGVhck9mZic7CgovLy8gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc3RvcmVzIHRoZSBsaXN0IG9mIGZpZWxkcyBvbiBhIGNvbnN0cnVjdG9yLgovLy8KLy8vIFRoaXMgcHJvcGVydHkgaXMgb25seSB1c2VkIHdoZW4gaXNvbGF0ZXMgYXJlIHVzZWQuCi8vLwovLy8gV2hlbiBzZXJpYWxpemluZyBvYmplY3RzIHdlIGV4dHJhY3QgYWxsIGZpZWxkcyBmcm9tIGFueSBnaXZlbiBvYmplY3QuCi8vLyBXZSBleHRyYWN0IHRoZSBuYW1lcyBvZiBhbGwgZmllbGRzIGZyb20gYSBmcmVzaCBlbXB0eSBvYmplY3QuIFRoaXMgbGlzdAovLy8gaXMgY2FjaGVkIG9uIHRoZSBjb25zdHJ1Y3RvciBpbiB0aGlzIHByb3BlcnR5IHRvIHRvIGF2b2lkIHRvbyBtYW55Ci8vLyBhbGxvY2F0aW9ucy4KY29uc3QgU3RyaW5nIGNhY2hlZENsYXNzRmllbGROYW1lcyA9IHInJGNhY2hlZEZpZWxkTmFtZXMnOwoKLy8vIFRoZSBmYXN0IHN0YXJ0dXAgZW1pdHRlcidzIGdvYWwgaXMgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiB3b3JrIHRoYXQgdGhlCi8vLyBKYXZhU2NyaXB0IGVuZ2luZSBoYXMgdG8gZG8gYmVmb3JlIGl0IGNhbiBzdGFydCBydW5uaW5nIHVzZXIgY29kZS4KLy8vCi8vLyBXaGVuZXZlciBwb3NzaWJsZSwgdGhlIGVtaXR0ZXIgdXNlcyBvYmplY3QgbGl0ZXJhbHMgaW5zdGVhZCBvZiB1cGRhdGluZwovLy8gb2JqZWN0cy4KLy8vCi8vLyBFeGFtcGxlOgovLy8KLy8vICAgICAvLyBIb2xkZXJzIGFyZSBpbml0aWFsaXplZCBkaXJlY3RseSB3aXRoIHRoZSBjbGFzc2VzIGFuZCBzdGF0aWMKLy8vICAgICAvLyBmdW5jdGlvbnMuCi8vLyAgICAgdmFyIEEgPSB7IFBvaW50OiBmdW5jdGlvbiBQb2ludCh4LCB5KSB7IHRoaXMueCA9IHg7IHRoaXMueSA9IHkgfSwKLy8vICAgICAgICAgICAgICAgc29tZVN0YXRpY0Z1bmN0aW9uOiBmdW5jdGlvbiBzb21lU3RhdGljRnVuY3Rpb24oKSB7IC4uLiB9IH07Ci8vLwovLy8gICAgIC8vIENsYXNzLWJlaGF2aW9yIGlzIGVtaXR0ZWQgaW4gYSBwcm90b3R5cGUgb2JqZWN0IHRoYXQgaXMgZGlyZWN0bHkKLy8vICAgICAvLyBhc3NpZ25lZDoKLy8vICAgICBBLlBvaW50LnByb3RvdHlwZSA9IHsgZGlzdGFuY2VUbzogZnVuY3Rpb24ob3RoZXIpIHsgLi4uIH0gfTsKLy8vCi8vLyAgICAgLy8gSW5oZXJpdGFuY2UgaXMgYWNoaWV2ZWQgYnkgdXBkYXRpbmcgdGhlIHByb3RvdHlwZSBvYmplY3RzIChoaWRkZW4gaW4KLy8vICAgICAvLyBhIGhlbHBlciBmdW5jdGlvbik6Ci8vLyAgICAgQS5Qb2ludC5wcm90b3R5cGUuX19wcm90b19fID0gSC5PYmplY3QucHJvdG90eXBlOwovLy8KLy8vIFRoZSBlbWl0dGVyIGRvZXNuJ3QgdHJ5IHRvIGJlIGNsZXZlciBhbmQgZW1pdHMgZXZlcnl0aGluZyBiZWZvcmVoYW5kLiBUaGlzCi8vLyBpbmNyZWFzZXMgdGhlIG91dHB1dCBzaXplLCBidXQgaW1wcm92ZXMgcGVyZm9ybWFuY2UuCi8vLwovLyBUaGUgY29kZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBhbGwgRGFydCBjb2RlIGlzIGluc2lkZSBob2xkZXJzLiBBcyBzdWNoCi8vIHdlIGNhbiB1c2UgImdsb2JhbCIgbmFtZXMgaG93ZXZlciB3ZSB3YW50LiBBcyBsb25nIGFzIHdlIGRvbid0IHNoYWRvdwovLyBKYXZhU2NyaXB0IHZhcmlhYmxlcyAobGlrZSBgQXJyYXlgKSB3ZSBhcmUgZnJlZSB0byBjaG9zZSB3aGF0ZXZlciB2YXJpYWJsZQovLyBuYW1lcyB3ZSB3YW50LiBGdXJ0aGVybW9yZSwgdGhlIHByZXR0eS1wcmludGVyIG1pbmlmaWVzIGxvY2FsIHZhcmlhYmxlcywgdGh1cwovLyByZWR1Y2luZyB0aGVpciBzaXplLgpjb25zdCBTdHJpbmcgbWFpbkJvaWxlcnBsYXRlID0gJycnCihmdW5jdGlvbiBkYXJ0UHJvZ3JhbSgpIHsKLy8gQ29waWVzIHRoZSBvd24gcHJvcGVydGllcyBmcm9tIFtmcm9tXSB0byBbdG9dLgpmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhmcm9tLCB0bykgewogIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJvbSk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIga2V5ID0ga2V5c1tpXTsKICAgIHRvW2tleV0gPSBmcm9tW2tleV07CiAgfQp9CgovLyBPbmx5IHVzZSBkaXJlY3QgcHJvdG8gYWNjZXNzIHRvIGNvbnN0cnVjdCB0aGUgcHJvdG90eXBlIGNoYWluIChpbnN0ZWFkIG9mCi8vIGNvcHlpbmcgcHJvcGVydGllcykgb24gcGxhdGZvcm1zIHdoZXJlIHdlIGtub3cgaXQgd29ya3Mgd2VsbCAoQ2hyb21lIC8gZDgpLgp2YXIgc3VwcG9ydHNEaXJlY3RQcm90b0FjY2VzcyA9ICNkaXJlY3RBY2Nlc3NUZXN0RXhwcmVzc2lvbjsKCi8vIFNldHMgdGhlIG5hbWUgcHJvcGVydHkgb2YgZnVuY3Rpb25zLCBpZiB0aGUgSlMgZW5naW5lIGRvZXNuJ3Qgc2V0IHRoZSBuYW1lCi8vIGl0c2VsZi4KLy8gQXMgb2YgMjAxOCBvbmx5IElFMTEgZG9lc24ndCBzZXQgdGhlIG5hbWUuCmZ1bmN0aW9uIHNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeShob2xkZXJzKSB7CiAgZnVuY3Rpb24gdCgpe307CiAgaWYgKHR5cGVvZiB0Lm5hbWUgPT0gInN0cmluZyIpIHJldHVybjsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob2xkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgaG9sZGVyID0gaG9sZGVyc1tpXTsKICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoaG9sZGVyKTsKICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7IGorKykgewogICAgICB2YXIga2V5ID0ga2V5c1tqXTsKICAgICAgdmFyIGYgPSBob2xkZXJba2V5XTsKICAgICAgaWYgKHR5cGVvZiBmID09ICdmdW5jdGlvbicpIGYubmFtZSA9IGtleTsKICAgIH0KICB9Cn0KCi8vIE1ha2VzIFtjbHNdIGluaGVyaXQgZnJvbSBbc3VwXS4KLy8gT24gQ2hyb21lLCBGaXJlZm94IGFuZCByZWNlbnQgSUVzIHRoaXMgaGFwcGVucyBieSB1cGRhdGluZyB0aGUgaW50ZXJuYWwKLy8gcHJvdG8tcHJvcGVydHkgb2YgdGhlIGNsYXNzZXMgJ3Byb3RvdHlwZScgZmllbGQuCi8vIE9sZGVyIElFcyB1c2UgYE9iamVjdC5jcmVhdGVgIGFuZCBjb3B5IG92ZXIgdGhlIHByb3BlcnRpZXMuCmZ1bmN0aW9uIGluaGVyaXQoY2xzLCBzdXApIHsKICAvLyBOb3RlIHRoYXQgUlRJIG5lZWRzIGNscy5uYW1lLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBzZXQgaXQgYW55bW9yZS4KICBjbHMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY2xzOwogIGNscy5wcm90b3R5cGVbI29wZXJhdG9ySXNQcmVmaXggKyBjbHMubmFtZV0gPSBjbHM7CgogIC8vIFRoZSBzdXBlcmNsYXNzIGlzIG9ubHkgbnVsbCBmb3IgdGhlIERhcnQgT2JqZWN0LgogIGlmIChzdXAgIT0gbnVsbCkgewogICAgaWYgKHN1cHBvcnRzRGlyZWN0UHJvdG9BY2Nlc3MpIHsKICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IGxpa2UgdG8gdXBkYXRlIHRoZSBwcm90b3R5cGVzLCBidXQgd2hlbiBzZXR0aW5nIHVwCiAgICAgIC8vIHRoZSBoaWVyYXJjaHkgY2hhaW4gaXQncyBvay4KICAgICAgY2xzLnByb3RvdHlwZS5fX3Byb3RvX18gPSBzdXAucHJvdG90eXBlOwogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgY2xzUHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXAucHJvdG90eXBlKTsKICAgIGNvcHlQcm9wZXJ0aWVzKGNscy5wcm90b3R5cGUsIGNsc1Byb3RvdHlwZSk7CiAgICBjbHMucHJvdG90eXBlID0gY2xzUHJvdG90eXBlOwogIH0KfQoKLy8gQmF0Y2hlZCB2ZXJzaW9uIG9mIFtpbmhlcml0XSBmb3IgbXVsdGlwbGUgY2xhc3NlcyBmcm9tIG9uZSBzdXBlcmNsYXNzLgpmdW5jdGlvbiBpbmhlcml0TWFueShzdXAsIGNsYXNzZXMpIHsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGluaGVyaXQoY2xhc3Nlc1tpXSwgc3VwKTsKICB9Cn0KCi8vIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIFttaXhpbl0gaW50byBbY2xzXS4KZnVuY3Rpb24gbWl4aW4oY2xzLCBtaXhpbikgewogIGNvcHlQcm9wZXJ0aWVzKG1peGluLnByb3RvdHlwZSwgY2xzLnByb3RvdHlwZSk7CiAgY2xzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNsczsKfQoKLy8gQ3JlYXRlcyBhIGxhenkgZmllbGQuCi8vCi8vIEEgbGF6eSBmaWVsZCBoYXMgYSBzdG9yYWdlIGVudHJ5LCBbbmFtZV0sIHdoaWNoIGhvbGRzIHRoZSB2YWx1ZSwgYW5kIGEKLy8gZ2V0dGVyIChbZ2V0dGVyTmFtZV0pIHRvIGFjY2VzcyB0aGUgZmllbGQuIElmIHRoZSBmaWVsZCB3YXNuJ3Qgc2V0IGJlZm9yZQovLyB0aGUgZmlyc3QgYWNjZXNzLCBpdCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBbaW5pdGlhbGl6ZXJdLgpmdW5jdGlvbiBsYXp5KGhvbGRlciwgbmFtZSwgZ2V0dGVyTmFtZSwgaW5pdGlhbGl6ZXIpIHsKICB2YXIgdW5pbml0aWFsaXplZFNlbnRpbmVsID0gaG9sZGVyOwogIGhvbGRlcltuYW1lXSA9IHVuaW5pdGlhbGl6ZWRTZW50aW5lbDsKICBob2xkZXJbZ2V0dGVyTmFtZV0gPSBmdW5jdGlvbigpIHsKICAgIGhvbGRlcltnZXR0ZXJOYW1lXSA9IGZ1bmN0aW9uKCkgeyAjY3ljbGljVGhyb3cobmFtZSkgfTsKICAgIHZhciByZXN1bHQ7CiAgICB2YXIgc2VudGluZWxJblByb2dyZXNzID0gaW5pdGlhbGl6ZXI7CiAgICB0cnkgewogICAgICBpZiAoaG9sZGVyW25hbWVdID09PSB1bmluaXRpYWxpemVkU2VudGluZWwpIHsKICAgICAgICByZXN1bHQgPSBob2xkZXJbbmFtZV0gPSBzZW50aW5lbEluUHJvZ3Jlc3M7CiAgICAgICAgcmVzdWx0ID0gaG9sZGVyW25hbWVdID0gaW5pdGlhbGl6ZXIoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgPSBob2xkZXJbbmFtZV07CiAgICAgIH0KICAgIH0gZmluYWxseSB7CiAgICAgIC8vIFVzZSB0cnktZmluYWxseSwgbm90IHRyeS1jYXRjaC90aHJvdyBhcyBpdCBkZXN0cm95cyB0aGUgc3RhY2sKICAgICAgLy8gdHJhY2UuCiAgICAgIGlmIChyZXN1bHQgPT09IHNlbnRpbmVsSW5Qcm9ncmVzcykgewogICAgICAgIC8vIFRoZSBsYXp5IHN0YXRpYyAoaG9sZGVyW25hbWVdKSBtaWdodCBoYXZlIGJlZW4gc2V0IHRvIGEgZGlmZmVyZW50CiAgICAgICAgLy8gdmFsdWUuIEFjY29yZGluZyB0byBzcGVjIHdlIHN0aWxsIGhhdmUgdG8gcmVzZXQgaXQgdG8gbnVsbCwgaWYKICAgICAgICAvLyB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgogICAgICAgIGhvbGRlcltuYW1lXSA9IG51bGw7CiAgICAgIH0KICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHRoZSBmdW5jdGlvbiBzaG91bGQgcHJvYmFibHkKICAgICAgLy8gYmUgdW5pcXVlIGZvciBlYWNoIHN0YXRpYy4KICAgICAgaG9sZGVyW2dldHRlck5hbWVdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzW25hbWVdOyB9OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Owp9CgovLyBHaXZlbiBhIGxpc3QsIG1hcmtzIGl0IGFzIGNvbnN0YW50LgovLwovLyBUaGUgcnVudGltZSBlbnN1cmVzIHRoYXQgY29uc3QtbGlzdHMgY2Fubm90IGJlIG1vZGlmaWVkLgpmdW5jdGlvbiBtYWtlQ29uc3RMaXN0KGxpc3QpIHsKICAvLyBCeSBhc3NpZ25pbmcgYSBmdW5jdGlvbiB0byB0aGUgcHJvcGVydGllcyB0aGV5IGJlY29tZSBwYXJ0IG9mIHRoZQogIC8vIGhpZGRlbiBjbGFzcy4gVGhlIGFjdHVhbCB2YWx1ZXMgb2YgdGhlIGZpZWxkcyBkb24ndCBtYXR0ZXIsIHNpbmNlIHdlCiAgLy8gb25seSBjaGVjayBpZiB0aGV5IGV4aXN0LgogIGxpc3QuaW1tdXRhYmxlXCRsaXN0ID0gQXJyYXk7CiAgbGlzdC5maXhlZFwkbGVuZ3RoID0gQXJyYXk7CiAgcmV0dXJuIGxpc3Q7Cn0KCmZ1bmN0aW9uIGNvbnZlcnRUb0Zhc3RPYmplY3QocHJvcGVydGllcykgewogIC8vIENyZWF0ZSBhbiBpbnN0YW5jZSB0aGF0IHVzZXMgJ3Byb3BlcnRpZXMnIGFzIHByb3RvdHlwZS4gVGhpcyBzaG91bGQKICAvLyBtYWtlICdwcm9wZXJ0aWVzJyBhIGZhc3Qgb2JqZWN0LgogIGZ1bmN0aW9uIHQoKSB7fQogIHQucHJvdG90eXBlID0gcHJvcGVydGllczsKICBuZXcgdCgpOwogIHJldHVybiBwcm9wZXJ0aWVzOwp9CgpmdW5jdGlvbiBjb252ZXJ0QWxsVG9GYXN0T2JqZWN0KGFycmF5T2ZPYmplY3RzKSB7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mT2JqZWN0cy5sZW5ndGg7ICsraSkgewogICAgY29udmVydFRvRmFzdE9iamVjdChhcnJheU9mT2JqZWN0c1tpXSk7CiAgfQp9CgovLyBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgdGhlIHRlYXJPZmZDb2RlIHRvIGd1YXJhbnRlZSB1bmlxdWUgZnVuY3Rpb25zIHBlcgovLyB0ZWFyLW9mZnMuCnZhciBmdW5jdGlvbkNvdW50ZXIgPSAwOwojdGVhck9mZkNvZGU7CgovLyBFYWNoIGRlZmVycmVkIGh1bmsgY29tZXMgd2l0aCBpdHMgb3duIHR5cGVzIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUgZW5kCi8vIG9mIHRoZSB0eXBlcy1hcnJheS4KLy8gVGhlIGBmdW5UeXBlc2AgcGFzc2VkIHRvIHRoZSBgaW5zdGFsbFRlYXJPZmZgIGZ1bmN0aW9uIGJlbG93IGlzIHJlbGF0aXZlIHRvCi8vIHRoZSBodW5rIHRoZSBmdW5jdGlvbiBjb21lcyBmcm9tLiBUaGUgYHR5cGVzT2Zmc2V0YCB2YXJpYWJsZSBlbmNvZGVzIHRoZQovLyBvZmZzZXQgYXQgd2hpY2ggdGhlIG5ldyB0eXBlcyB3aWxsIGJlIGFkZGVkLgp2YXIgdHlwZXNPZmZzZXQgPSAwOwoKLy8gQWRhcHRzIHRoZSBzdG9yZWQgZGF0YSwgc28gaXQncyBzdWl0YWJsZSBmb3IgYSB0ZWFyT2ZmIGNhbGwuCi8vCi8vIFN0b3JlcyB0aGUgdGVhci1vZmYgZ2V0dGVyLWZ1bmN0aW9uIGluIHRoZSBbY29udGFpbmVyXSdzIFtnZXR0ZXJOYW1lXQovLyBwcm9wZXJ0eS4KLy8KLy8gVGhlIFtjb250YWluZXJdIGlzIGVpdGhlciBhIGNsYXNzICh0aGF0IGlzLCBpdHMgcHJvdG90eXBlKSwgb3IgdGhlIGhvbGRlciBmb3IKLy8gc3RhdGljIGZ1bmN0aW9ucy4KLy8KLy8gVGhlIGFyZ3VtZW50IFtmdW5zT3JOYW1lc10gaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBmdW5jdGlvbnMuIElmIGl0IGlzIGEKLy8gbmFtZSwgdGhlbiB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGZldGNoZWQgZnJvbSB0aGUgY29udGFpbmVyLiBUaGUgZmlyc3QKLy8gZW50cnkgaW4gdGhhdCBhcnJheSAqbXVzdCogYmUgYSBzdHJpbmcuCi8vCi8vIFRPRE8oZmxvaXRzY2gpOiBDaGFuZ2UgdGVhck9mZkNvZGUgdG8gYWNjZXB0IHRoZSBkYXRhIGRpcmVjdGx5LCBvciBjcmVhdGUgYQovLyBkaWZmZXJlbnQgdGVhck9mZkNvZGU/CmZ1bmN0aW9uIGluc3RhbGxUZWFyT2ZmKAogICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBpc1N0YXRpYywgaXNJbnRlcmNlcHRlZCwgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCkgewogIC8vIEEgZnVuY3Rpb24gY2FuIGhhdmUgc2V2ZXJhbCBzdHVicyAoZm9yIGV4YW1wbGUgdG8gZmlsbCBpbiBvcHRpb25hbAogIC8vIGFyZ3VtZW50cykuIFdlIGNvbGxlY3QgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBgZnVuc2AgYXJyYXkuCiAgdmFyIGZ1bnMgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bnNPck5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgZnVuID0gZnVuc09yTmFtZXNbaV07CiAgICBpZiAoKHR5cGVvZiBmdW4pID09ICdzdHJpbmcnKSBmdW4gPSBjb250YWluZXJbZnVuXTsKICAgIGZ1bi4jY2FsbE5hbWUgPSBjYWxsTmFtZXNbaV07CiAgICBmdW5zLnB1c2goZnVuKTsKICB9CgogIC8vIFRoZSBtYWluIGZ1bmN0aW9uIHRvIHdoaWNoIGFsbCBzdHVicyByZWRpcmVjdC4KICB2YXIgZnVuID0gZnVuc1swXTsKCiAgZnVuWyNhcmd1bWVudENvdW50XSA9IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgZnVuWyNkZWZhdWx0QXJndW1lbnRWYWx1ZXNdID0gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOwogIHZhciByZWZsZWN0aW9uSW5mbyA9IGZ1blR5cGU7CiAgaWYgKHR5cGVvZiByZWZsZWN0aW9uSW5mbyA9PSAibnVtYmVyIikgewogICAgLy8gVGhlIHJlZmxlY3Rpb25JbmZvIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiwgb3IgYSBwb2ludGVyIGludG8gdGhlIHR5cGVzCiAgICAvLyB0YWJsZS4gSWYgaXQgcG9pbnRzIGludG8gdGhlIHR5cGVzLXRhYmxlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBpbmRleCwKICAgIC8vIGluIGNhc2UgdGhlIHRlYXItb2ZmIGlzIHBhcnQgb2YgYSBkZWZlcnJlZCBodW5rLgogICAgcmVmbGVjdGlvbkluZm8gPSByZWZsZWN0aW9uSW5mbyArIHR5cGVzT2Zmc2V0OwogIH0KICB2YXIgbmFtZSA9IGZ1bnNPck5hbWVzWzBdOwogIGZ1bi4jc3R1Yk5hbWUgPSBuYW1lOwogIHZhciBnZXR0ZXJGdW5jdGlvbiA9CiAgICAgIHRlYXJPZmYoZnVucywgYXBwbHlJbmRleCB8fCAwLCByZWZsZWN0aW9uSW5mbywgaXNTdGF0aWMsIG5hbWUsIGlzSW50ZXJjZXB0ZWQpOwogIGNvbnRhaW5lcltnZXR0ZXJOYW1lXSA9IGdldHRlckZ1bmN0aW9uOwogIGlmIChpc1N0YXRpYykgewogICAgZnVuLiR0ZWFyT2ZmUHJvcGVydHlOYW1lID0gZ2V0dGVyRnVuY3Rpb247CiAgfQp9CgpmdW5jdGlvbiBpbnN0YWxsU3RhdGljVGVhck9mZigKICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwKICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgIGNhbGxOYW1lcywgZnVuc09yTmFtZXMsIGZ1blR5cGUsIGFwcGx5SW5kZXgpIHsKICAvLyBUT0RPKHNyYSk6IFNwZWNpYWxpemUgaW5zdGFsbFRlYXJPZmYgZm9yIHN0YXRpYyBtZXRob2RzLiBJdCBtaWdodCBiZQogIC8vIHBvc3NpYmxlIHRvIGhhbmRsZSBzb21lIHZlcnkgY29tbW9uIHNpbXBsZSBjYXNlcyBkaXJlY3RseS4KICByZXR1cm4gaW5zdGFsbFRlYXJPZmYoCiAgICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgdHJ1ZSwgZmFsc2UsCiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCk7Cn0KCmZ1bmN0aW9uIGluc3RhbGxJbnN0YW5jZVRlYXJPZmYoCiAgICBjb250YWluZXIsIGdldHRlck5hbWUsIGlzSW50ZXJjZXB0ZWQsCiAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KSB7CiAgLy8gVE9ETyhzcmEpOiBTcGVjaWFsaXplIGluc3RhbGxUZWFyT2ZmIGZvciBpbnN0YW5jZSBtZXRob2RzLgogIHJldHVybiBpbnN0YWxsVGVhck9mZigKICAgICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBmYWxzZSwgaXNJbnRlcmNlcHRlZCwKICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KTsKfQoKLy8gSW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBpbnRlcmNlcHRvciB0YWdzIGRpcmVjdGx5IHdlIHVzZSB0aGlzIHVwZGF0ZQovLyBmdW5jdGlvbi4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGRlZmVycmVkIGZyYWdtZW50cyB0byBjb250cmlidXRlIHRvIHRoZQovLyBlbWJlZGRlZCBnbG9iYWwuCmZ1bmN0aW9uIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcobmV3VGFncykgewogIHZhciB0YWdzID0gI2VtYmVkZGVkSW50ZXJjZXB0b3JUYWdzOwogIGlmICghdGFncykgewogICAgI2VtYmVkZGVkSW50ZXJjZXB0b3JUYWdzID0gbmV3VGFnczsKICAgIHJldHVybjsKICB9CiAgY29weVByb3BlcnRpZXMobmV3VGFncywgdGFncyk7Cn0KCi8vIEluc3RlYWQgb2Ygc2V0dGluZyB0aGUgbGVhZiB0YWdzIGRpcmVjdGx5IHdlIHVzZSB0aGlzIHVwZGF0ZQovLyBmdW5jdGlvbi4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGRlZmVycmVkIGZyYWdtZW50cyB0byBjb250cmlidXRlIHRvIHRoZQovLyBlbWJlZGRlZCBnbG9iYWwuCmZ1bmN0aW9uIHNldE9yVXBkYXRlTGVhZlRhZ3MobmV3VGFncykgewogIHZhciB0YWdzID0gI2VtYmVkZGVkTGVhZlRhZ3M7CiAgaWYgKCF0YWdzKSB7CiAgICAjZW1iZWRkZWRMZWFmVGFncyA9IG5ld1RhZ3M7CiAgICByZXR1cm47CiAgfQogIGNvcHlQcm9wZXJ0aWVzKG5ld1RhZ3MsIHRhZ3MpOwp9CgovLyBVcGRhdGVzIHRoZSB0eXBlcyBlbWJlZGRlZCBnbG9iYWwuCmZ1bmN0aW9uIHVwZGF0ZVR5cGVzKG5ld1R5cGVzKSB7CiAgdmFyIHR5cGVzID0gI2VtYmVkZGVkVHlwZXM7CiAgdmFyIGxlbmd0aCA9IHR5cGVzLmxlbmd0aDsKICAvLyBUaGUgdGVhci1vZmYgZnVuY3Rpb24gdXNlcyBhbm90aGVyICd0eXBlc09mZnNldCcgdmFsdWUgY2FjaGVkIGluCiAgLy8gW2luaXRpYWxpemVEZWZlcnJlZEh1bmtdIHNvIFt1cGRhdGVUeXBlc10gY2FuIGJlIGNhbGxlZCBlaXRoZXIgYmVmb3JlIG9yCiAgLy8gYWZ0ZXIgdGhlIHRlYXJvZmZzIGhhdmUgYmVlbiBpbnN0YWxsZWQuCiAgdHlwZXMucHVzaC5hcHBseSh0eXBlcywgbmV3VHlwZXMpOwogIHJldHVybiBsZW5ndGg7Cn0KCi8vIFVwZGF0ZXMgdGhlIGdpdmVuIGhvbGRlciB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBbbmV3SG9sZGVyXS4KLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gYSBkZWZlcnJlZCBmcmFnbWVudCBpcyBpbml0aWFsaXplZC4KZnVuY3Rpb24gdXBkYXRlSG9sZGVyKGhvbGRlciwgbmV3SG9sZGVyKSB7CiAgY29weVByb3BlcnRpZXMobmV3SG9sZGVyLCBob2xkZXIpOwogIHJldHVybiBob2xkZXI7Cn0KCnZhciAjaHVua0hlbHBlcnMgPSAoZnVuY3Rpb24oKXsKICB2YXIgbWtJbnN0YW5jZSA9IGZ1bmN0aW9uKAogICAgICBpc0ludGVyY2VwdGVkLCByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGNhbGxOYW1lcywgYXBwbHlJbmRleCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgbmFtZSwgZnVuVHlwZSkgewogICAgICByZXR1cm4gaW5zdGFsbEluc3RhbmNlVGVhck9mZigKICAgICAgICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgaXNJbnRlcmNlcHRlZCwKICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgIGNhbGxOYW1lcywgW25hbWVdLCBmdW5UeXBlLCBhcHBseUluZGV4KTsKICAgIH0KICB9LAoKICBta1N0YXRpYyA9IGZ1bmN0aW9uKAogICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGNhbGxOYW1lcywgYXBwbHlJbmRleCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgbmFtZSwgZnVuVHlwZSkgewogICAgICByZXR1cm4gaW5zdGFsbFN0YXRpY1RlYXJPZmYoCiAgICAgICAgICBjb250YWluZXIsIGdldHRlck5hbWUsCiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICBjYWxsTmFtZXMsIFtuYW1lXSwgZnVuVHlwZSwgYXBwbHlJbmRleCk7CiAgICB9CiAgfTsKCiAgLy8gVE9ETyhzcmEpOiBNaW5pZnkgcHJvcGVydGllcyBvZiAnaHVua0hlbHBlcnMnLgogIHJldHVybiB7CiAgICBpbmhlcml0OiBpbmhlcml0LAogICAgaW5oZXJpdE1hbnk6IGluaGVyaXRNYW55LAogICAgbWl4aW46IG1peGluLAogICAgaW5zdGFsbFN0YXRpY1RlYXJPZmY6IGluc3RhbGxTdGF0aWNUZWFyT2ZmLAogICAgaW5zdGFsbEluc3RhbmNlVGVhck9mZjogaW5zdGFsbEluc3RhbmNlVGVhck9mZiwKCiAgICAgICAgLy8gVW5pbnRlcmNlcHRlZCBtZXRob2RzLgogICAgX2luc3RhbmNlXzB1OiBta0luc3RhbmNlKDAsIDAsIG51bGwsIFsjY2FsbDBzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzF1OiBta0luc3RhbmNlKDAsIDEsIG51bGwsIFsjY2FsbDFzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzJ1OiBta0luc3RhbmNlKDAsIDIsIG51bGwsIFsjY2FsbDJzZWxlY3Rvcl0sIDApLAoKICAgICAgICAvLyBJbnRlcmNlcHRlZCBtZXRob2RzLgogICAgX2luc3RhbmNlXzBpOiBta0luc3RhbmNlKDEsIDAsIG51bGwsIFsjY2FsbDBzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzFpOiBta0luc3RhbmNlKDEsIDEsIG51bGwsIFsjY2FsbDFzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzJpOiBta0luc3RhbmNlKDEsIDIsIG51bGwsIFsjY2FsbDJzZWxlY3Rvcl0sIDApLAoKICAgICAgICAvLyBTdGF0aWMgbWV0aG9kcy4KICAgIF9zdGF0aWNfMDogbWtTdGF0aWMoMCwgbnVsbCwgWyNjYWxsMHNlbGVjdG9yXSwgMCksCiAgICBfc3RhdGljXzE6IG1rU3RhdGljKDEsIG51bGwsIFsjY2FsbDFzZWxlY3Rvcl0sIDApLAogICAgX3N0YXRpY18yOiBta1N0YXRpYygyLCBudWxsLCBbI2NhbGwyc2VsZWN0b3JdLCAwKSwKCiAgICBtYWtlQ29uc3RMaXN0OiBtYWtlQ29uc3RMaXN0LAogICAgbGF6eTogbGF6eSwKICAgIHVwZGF0ZUhvbGRlcjogdXBkYXRlSG9sZGVyLAogICAgY29udmVydFRvRmFzdE9iamVjdDogY29udmVydFRvRmFzdE9iamVjdCwKICAgIHNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeTogc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5LAogICAgdXBkYXRlVHlwZXM6IHVwZGF0ZVR5cGVzLAogICAgc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZzogc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZywKICAgIHNldE9yVXBkYXRlTGVhZlRhZ3M6IHNldE9yVXBkYXRlTGVhZlRhZ3MsCiAgfTsKfSkoKTsKCi8vIEV2ZXJ5IGRlZmVycmVkIGh1bmsgKGkuZS4gZnJhZ21lbnQpIGlzIGEgZnVuY3Rpb24gdGhhdCB3ZSBjYW4gaW52b2tlIHRvCi8vIGluaXRpYWxpemUgaXQuIEF0IHRoaXMgbW9tZW50IGl0IGNvbnRyaWJ1dGVzIGl0cyBkYXRhIHRvIHRoZSBtYWluIGh1bmsuCmZ1bmN0aW9uIGluaXRpYWxpemVEZWZlcnJlZEh1bmsoaHVuaykgewogIC8vIFVwZGF0ZSB0aGUgdHlwZXNPZmZzZXQgZm9yIHRoZSBuZXh0IGRlZmVycmVkIGxpYnJhcnkuCiAgdHlwZXNPZmZzZXQgPSAjZW1iZWRkZWRUeXBlcy5sZW5ndGg7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiBleHRlbmQgbmF0aXZlcy4KICBodW5rKGh1bmtIZWxwZXJzLCAjZW1iZWRkZWRHbG9iYWxzT2JqZWN0LCBob2xkZXJzLCAjc3RhdGljU3RhdGUpOwp9CgovLyBSZXR1cm5zIHRoZSBnbG9iYWwgd2l0aCB0aGUgZ2l2ZW4gW25hbWVdLgpmdW5jdGlvbiBnZXRHbG9iYWxGcm9tTmFtZShuYW1lKSB7CiAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIGFyZSBydW5uaW5nIHRocm91Z2ggYWxsIGhvbGRlcnMuIFNpbmNlIG5lZ2F0aXZlCiAgLy8gbG9va3VwcyBhcmUgZXhwZW5zaXZlIHdlIG1pZ2h0IG5lZWQgdG8gaW1wcm92ZSB0aGlzLgogIC8vIFJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGFsbCBuYW1lcyBhcmUgdW5pcXVlIGFjcm9zcyBhbGwgaG9sZGVycy4KICBmb3IgKHZhciBpID0gMDsgaSA8IGhvbGRlcnMubGVuZ3RoOyBpKyspIHsKICAgIC8vIFRoZSBjb25zdGFudCBob2xkZXIgcmV1c2VzIHRoZSBzYW1lIG5hbWVzLiBUaGVyZWZvcmUgd2UgbXVzdCBza2lwIGl0LgogICAgaWYgKGhvbGRlcnNbaV0gPT0gI2NvbnN0YW50SG9sZGVyUmVmZXJlbmNlKSBjb250aW51ZTsKICAgIC8vIFJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGFsbCB2YXJpYWJsZXMgYXJlIHVuaXF1ZS4KICAgIGlmIChob2xkZXJzW2ldW25hbWVdKSByZXR1cm4gaG9sZGVyc1tpXVtuYW1lXTsKICB9Cn0KCmlmICgjaGFzU29mdERlZmVycmVkQ2xhc3NlcykgewogIC8vIExvYWRzIHRoZSBzb2Z0LWRlZmVycmVkIGNsYXNzZXMgYW5kIGluaXRpYWxpemVzIHRoZW0uCiAgLy8gVXBkYXRlcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBnaXZlbiBvYmplY3QuCiAgZnVuY3Rpb24gc29mdERlZihvKSB7CiAgICBzb2Z0RGVmID0gZnVuY3Rpb24obykge307ICAvLyBSZXBsYWNlIG91cnNlbHZlcy4KICAgICNkZWZlcnJlZEdsb2JhbFsjc29mdElkXSgKICAgICAgICBob2xkZXJzLCAjZW1iZWRkZWRHbG9iYWxzT2JqZWN0LCAjc3RhdGljU3RhdGUsCiAgICAgICAgaHVua0hlbHBlcnMpOwogICAgaWYgKG8gIT0gbnVsbCkgewogICAgICAvLyBUT0RPKDI5NTc0KTogc2hvdWxkIHdlIGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZm9yIEZpcmVmb3g/CiAgICAgIC8vIElmIHdlIHJlY29tbWVuZCB0aGF0IHRoZSBwcm9ncmFtIHRyaWdnZXJzIHRoZSBsb2FkIGJ5IGl0c2VsZiBiZWZvcmUKICAgICAgLy8gY2xhc3NlcyBhcmUgbmVlZGVkLCB0aGVuIHRoaXMgbGluZSBzaG91bGQgcmFyZWx5IGJlIGhpdC4KICAgICAgLy8gQWxzbywgaXQgaXMgb25seSBoaXQgYXQgbW9zdCBvbmNlIChwZXIgc29mdC1kZWZlcnJlZCBjaHVuaykuCiAgICAgIG8uX19wcm90b19fID0gby5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiAgICB9CiAgfQp9CgppZiAoI2lzVHJhY2tpbmdBbGxvY2F0aW9ucykgewogIHZhciBhbGxvY2F0aW9ucyA9ICNkZWZlcnJlZEdsb2JhbFsnYWxsb2NhdGlvbnMnXSA9IHt9Owp9CgovLyBDcmVhdGVzIHRoZSBob2xkZXJzLgojaG9sZGVyczsKCi8vIElmIHRoZSBuYW1lIGlzIG5vdCBzZXQgb24gdGhlIGZ1bmN0aW9ucywgZG8gaXQgbm93LgpodW5rSGVscGVycy5zZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3NhcnkoaG9sZGVycyk7CgovLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkIGJ1aWxkIHRoaXMgb2JqZWN0IGFzIGEgbGl0ZXJhbC4KdmFyICNzdGF0aWNTdGF0ZURlY2xhcmF0aW9uID0ge307CgovLyBTZXRzIHRoZSBwcm90b3R5cGVzIG9mIGNsYXNzZXMuCiNwcm90b3R5cGVzOwovLyBTZXRzIGFsaWFzZXMgb2YgbWV0aG9kcyAob24gdGhlIHByb3RvdHlwZXMgb2YgY2xhc3NlcykuCiNhbGlhc2VzOwovLyBJbnN0YWxscyB0aGUgdGVhci1vZmZzIG9mIGZ1bmN0aW9ucy4KI3RlYXJPZmZzOwovLyBCdWlsZHMgdGhlIGluaGVyaXRhbmNlIHN0cnVjdHVyZS4KI2luaGVyaXRhbmNlOwoKLy8gRW1pdHMgdGhlIGVtYmVkZGVkIGdsb2JhbHMuIFRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIGNvbnN0YW50cyBzbyB0aGUgZW1iZWRkZWQKLy8gZ2xvYmFsIHR5cGUgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgZm9yIGdlbmVyYXRpbmcgY29uc3RhbnRzLgojZW1iZWRkZWRHbG9iYWxzUGFydDE7CgovLyBBZGRzIHRoZSBzdWJ0eXBlIHJ1bGVzIGZvciB0aGUgbmV3IFJUSS4KI3R5cGVSdWxlczsKCi8vIEluc3RhbnRpYXRlcyBhbGwgY29uc3RhbnRzLgojY29uc3RhbnRzOwoKLy8gQWRkcyB0byB0aGUgZW1iZWRkZWQgZ2xvYmFscy4gQSBmZXcgZ2xvYmFscyByZWZlciB0byBjb25zdGFudHMuCiNlbWJlZGRlZEdsb2JhbHNQYXJ0MjsgCgovLyBJbml0aWFsaXplcyB0aGUgc3RhdGljIG5vbi1maW5hbCBmaWVsZHMgKHdpdGggdGhlaXIgY29uc3RhbnQgdmFsdWVzKS4KI3N0YXRpY05vbkZpbmFsRmllbGRzOwovLyBDcmVhdGVzIGxhenkgZ2V0dGVycyBmb3Igc3RhdGljcyB0aGF0IG11c3QgcnVuIGluaXRpYWxpemVycyBvbiBmaXJzdCBhY2Nlc3MuCiNsYXp5U3RhdGljczsKCi8vIFNldHMgdXAgdGhlIG5hdGl2ZSBzdXBwb3J0LgovLyBOYXRpdmUtc3VwcG9ydCB1c2VzIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcgYW5kIHNldE9yVXBkYXRlTGVhZlRhZ3MuCiNuYXRpdmVTdXBwb3J0OwoKLy8gU2V0cyB1cCB0aGUganMtaW50ZXJvcCBzdXBwb3J0LgojanNJbnRlcm9wU3VwcG9ydDsKCi8vIEVuc3VyZSBob2xkZXJzIGFyZSBpbiBmYXN0IG1vZGUsIG5vdyB3ZSBoYXZlIGZpbmlzaGVkIGFkZGluZyB0aGluZ3MuCmNvbnZlcnRBbGxUb0Zhc3RPYmplY3QoaG9sZGVycyk7CmNvbnZlcnRUb0Zhc3RPYmplY3QoI3N0YXRpY1N0YXRlKTsKCi8vIEludm9rZXMgbWFpbiAobWFraW5nIHN1cmUgdGhhdCBpdCByZWNvcmRzIHRoZSAnY3VycmVudC1zY3JpcHQnIHZhbHVlKS4KI2ludm9rZU1haW47Cn0pKCkKJycnOwoKLy8vIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIGB0cnVlYCBpZiBgX19wcm90b19fYCBjYW4gYmUgYXNzaWduZWQgdG8gc3RpdGNoCi8vLyB0b2dldGhlciBhIHByb3RvdHlwZSBjaGFpbiwgYW5kIHRoZSBwZXJmb3JtYW5jZSBpcyBnb29kLgpjb25zdCBTdHJpbmcgZGlyZWN0QWNjZXNzVGVzdEV4cHJlc3Npb24gPSByJycnCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBjbHMgPSBmdW5jdGlvbiAoKSB7fTsKICAgIGNscy5wcm90b3R5cGUgPSB7J3AnOiB7fX07CiAgICB2YXIgb2JqZWN0ID0gbmV3IGNscygpOwogICAgaWYgKCEob2JqZWN0Ll9fcHJvdG9fXyAmJiBvYmplY3QuX19wcm90b19fLnAgPT09IGNscy5wcm90b3R5cGUucCkpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICB0cnkgewogICAgICAvLyBBcmUgd2UgcnVubmluZyBvbiBhIHBsYXRmb3JtIHdoZXJlIHRoZSBwZXJmb3JtYW5jZSBpcyBnb29kPwogICAgICAvLyAoaS5lLiBDaHJvbWUgb3IgZDgpLgoKICAgICAgLy8gQ2hyb21lIHVzZXJBZ2VudD8KICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT0gInVuZGVmaW5lZCIgJiYKICAgICAgICAgIHR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50ID09ICJzdHJpbmciICYmCiAgICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZS8iKSA+PSAwKSByZXR1cm4gdHJ1ZTsKICAgICAgLy8gZDggdmVyc2lvbigpIGxvb2tzIGxpa2UgIk4uTi5OLk4iLCBqc3NoZWxsIHZlcnNpb24oKSBsaWtlICJOIi4KICAgICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09ICJmdW5jdGlvbiIgJiYKICAgICAgICAgIHZlcnNpb24ubGVuZ3RoID09IDApIHsKICAgICAgICB2YXIgdiA9IHZlcnNpb24oKTsKICAgICAgICBpZiAoL15cZCtcLlxkK1wuXGQrXC5cZCskLy50ZXN0KHYpKSByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSBjYXRjaChfKSB7fQoKICAgIHJldHVybiBmYWxzZTsKICB9KSgpCicnJzsKCi8vLyBTb2Z0LWRlZmVycmVkIGZyYWdtZW50cyBhcmUgYnVpbHQgc2ltaWxhcmx5IHRvIHRoZSBtYWluIGZyYWdtZW50LgoKLy8vIERlZmVycmVkIGZyYWdtZW50cyAoYWthICdodW5rcycpIGFyZSBidWlsdCBzaW1pbGFybHkgdG8gdGhlIG1haW4gZnJhZ21lbnQuCi8vLwovLy8gSG93ZXZlciwgYXQgc3BlY2lmaWMgbW9tZW50cyB0aGV5IG5lZWQgdG8gY29udHJpYnV0ZSB0aGVpciBkYXRhLgovLy8gRm9yIGV4YW1wbGUsIG9uY2UgdGhlIGhvbGRlcnMgaGF2ZSBiZWVuIGNyZWF0ZWQsIHRoZXkgYXJlIGluY2x1ZGVkIGludG8KLy8vIHRoZSBtYWluIGhvbGRlcnMuCi8vLwovLy8gVGhpcyB0ZW1wbGF0ZSBpcyB1c2VkIGZvciBEYXJ0IDIuCmNvbnN0IFN0cmluZyBkZWZlcnJlZEJvaWxlcnBsYXRlRGFydDIgPSAnJycKZnVuY3Rpb24oaHVua0hlbHBlcnMsICNlbWJlZGRlZEdsb2JhbHNPYmplY3QsIGhvbGRlcnNMaXN0LCAjc3RhdGljU3RhdGUpIHsKCi8vIEJ1aWxkcyB0aGUgaG9sZGVycy4gVGhleSBvbmx5IGNvbnRhaW4gdGhlIGRhdGEgZm9yIG5ldyBob2xkZXJzLgojaG9sZGVyczsKCi8vIElmIHRoZSBuYW1lIGlzIG5vdCBzZXQgb24gdGhlIGZ1bmN0aW9ucywgZG8gaXQgbm93LgpodW5rSGVscGVycy5zZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3NhcnkoI2RlZmVycmVkSG9sZGVyc0xpc3QpOwoKLy8gVXBkYXRlcyB0aGUgaG9sZGVycyBvZiB0aGUgbWFpbi1mcmFnbWVudC4gVXNlcyB0aGUgcHJvdmlkZWQgaG9sZGVyc0xpc3QgdG8KLy8gYWNjZXNzIHRoZSBtYWluIGhvbGRlcnMuCi8vIFRoZSBsb2NhbCBob2xkZXJzIGFyZSByZXBsYWNlZCBieSB0aGUgY29tYmluZWQgaG9sZGVycy4gVGhpcyBpcyBuZWNlc3NhcnkKLy8gZm9yIHRoZSBpbmhlcml0YW5jZSBzZXR1cCBiZWxvdy4KI3VwZGF0ZUhvbGRlcnM7Ci8vIFNldHMgdGhlIHByb3RvdHlwZXMgb2YgdGhlIG5ldyBjbGFzc2VzLgojcHJvdG90eXBlczsKLy8gQWRkIHNpZ25hdHVyZSBmdW5jdGlvbiB0eXBlcyBhbmQgY29tcHV0ZSB0aGUgdHlwZXMgb2Zmc2V0IGluIGBpbml0LnR5cGVzYC4KLy8gVGhlc2UgY2FuIG9ubHkgcmVmZXIgdG8gcmVndWxhciBjbGFzc2VzIGFuZCBpbiBEYXJ0IDIgb25seSBjbG9zdXJlcyBoYXZlCi8vIGZ1bmN0aW9uIHR5cGVzIHNvIHRoZSBgdHlwZXNPZmZzZXRgIGhhcyBiZWVuIHNhZmVseSBjb21wdXRlZCBiZWZvcmUgaXQncwovLyByZWZlcnJlZCBpbiB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgYGNsb3N1cmVzYCBiZWxvdy4KdmFyICN0eXBlc09mZnNldCA9IGh1bmtIZWxwZXJzLnVwZGF0ZVR5cGVzKCN0eXBlcyk7CiNjbG9zdXJlczsKLy8gU2V0cyBhbGlhc2VzIG9mIG1ldGhvZHMgKG9uIHRoZSBwcm90b3R5cGVzIG9mIGNsYXNzZXMpLgojYWxpYXNlczsKLy8gSW5zdGFsbHMgdGhlIHRlYXItb2ZmcyBvZiBmdW5jdGlvbnMuCiN0ZWFyT2ZmczsKLy8gQnVpbGRzIHRoZSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUuCiNpbmhlcml0YW5jZTsKCi8vIEFkZHMgdGhlIHN1YnR5cGUgcnVsZXMgZm9yIHRoZSBuZXcgUlRJLgojdHlwZVJ1bGVzOwoKLy8gSW5zdGFudGlhdGVzIGFsbCBjb25zdGFudHMgb2YgdGhpcyBkZWZlcnJlZCBmcmFnbWVudC4KLy8gTm90ZSB0aGF0IHRoZSBjb25zdGFudC1ob2xkZXIgaGFzIGJlZW4gdXBkYXRlZCBlYXJsaWVyIGFuZCBzdG9yaW5nIHRoZQovLyBjb25zdGFudCB2YWx1ZXMgaW4gdGhlIGNvbnN0YW50LWhvbGRlciBtYWtlcyB0aGVtIGF2YWlsYWJsZSBnbG9iYWxseS4KI2NvbnN0YW50czsKLy8gSW5pdGlhbGl6ZXMgdGhlIHN0YXRpYyBub24tZmluYWwgZmllbGRzICh3aXRoIHRoZWlyIGNvbnN0YW50IHZhbHVlcykuCiNzdGF0aWNOb25GaW5hbEZpZWxkczsKLy8gQ3JlYXRlcyBsYXp5IGdldHRlcnMgZm9yIHN0YXRpY3MgdGhhdCBtdXN0IHJ1biBpbml0aWFsaXplcnMgb24gZmlyc3QgYWNjZXNzLgojbGF6eVN0YXRpY3M7CgovLyBOYXRpdmUtc3VwcG9ydCB1c2VzIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcgYW5kIHNldE9yVXBkYXRlTGVhZlRhZ3MuCiNuYXRpdmVTdXBwb3J0Owp9JycnOwoKLy8vCi8vLyBIb3dldmVyLCB0aGV5IGRvbid0IGNvbnRyaWJ1dGUgYW55dGhpbmcgdG8gZ2xvYmFsIG5hbWVzcGFjZSwgYnV0IGp1c3QKLy8vIGluaXRpYWxpemUgZXhpc3RpbmcgY2xhc3Nlcy4gRm9yIGV4YW1wbGUsIHRoZXkgdXBkYXRlIHRoZSBpbmhlcml0YW5jZQovLy8gaGllcmFyY2h5LCBhbmQgYWRkIG1ldGhvZHMgdGhlIHByb3RvdHlwZXMuCmNvbnN0IFN0cmluZyBzb2Z0RGVmZXJyZWRCb2lsZXJwbGF0ZSA9ICcnJwojZGVmZXJyZWRHbG9iYWxbI3NvZnRJZF0gPQogIGZ1bmN0aW9uKGhvbGRlcnNMaXN0LCAjZW1iZWRkZWRHbG9iYWxzT2JqZWN0LCAjc3RhdGljU3RhdGUsCiAgICAgICAgICAgaHVua0hlbHBlcnMpIHsKCi8vIEluc3RhbGxzIHRoZSBob2xkZXJzIGFzIGxvY2FsIHZhcmlhYmxlcy4KI2luc3RhbGxIb2xkZXJzQXNMb2NhbHM7Ci8vIFNldHMgdGhlIHByb3RvdHlwZXMgb2YgdGhlIG5ldyBjbGFzc2VzLgojcHJvdG90eXBlczsKLy8gU2V0cyBhbGlhc2VzIG9mIG1ldGhvZHMgKG9uIHRoZSBwcm90b3R5cGVzIG9mIGNsYXNzZXMpLgojYWxpYXNlczsKLy8gSW5zdGFsbHMgdGhlIHRlYXItb2ZmcyBvZiBmdW5jdGlvbnMuCiN0ZWFyT2ZmczsKLy8gQnVpbGRzIHRoZSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUuCiNpbmhlcml0YW5jZTsKfScnJzsKCi8vLyBUaGlzIGNsYXNzIGJ1aWxkcyBhIEphdmFTY3JpcHQgdHJlZSBmb3IgYSBnaXZlbiBmcmFnbWVudC4KLy8vCi8vLyBBIGZyYWdtZW50IGlzIGdlbmVyYWxseSB3cml0dGVuIGludG8gYSBzZXBhcmF0ZSBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlCi8vLyBsb2FkZWQgZHluYW1pY2FsbHkgd2hlbiBhIGRlZmVycmVkIGxpYnJhcnkgaXMgbG9hZGVkLgovLy8KLy8vIFRoaXMgY2xhc3MgaXMgc3RhdGVsZXNzIGFuZCBjYW4gYmUgcmV1c2VkIGZvciBkaWZmZXJlbnQgZnJhZ21lbnRzLgpjbGFzcyBGcmFnbWVudEVtaXR0ZXIgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBEdW1wSW5mb1Rhc2sgX2R1bXBJbmZvVGFzazsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBDb25zdGFudEVtaXR0ZXIgX2NvbnN0YW50RW1pdHRlcjsKICBmaW5hbCBNb2RlbEVtaXR0ZXIgX21vZGVsRW1pdHRlcjsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvZGVnZW5Xb3JsZCBfY29kZWdlbldvcmxkOwogIFJlY2lwZUVuY29kZXIgX3JlY2lwZUVuY29kZXI7CiAgUnVsZXNldEVuY29kZXIgX3J1bGVzZXRFbmNvZGVyOwoKICBEYXJ0VHlwZXMgZ2V0IF9kYXJ0VHlwZXMgPT4gX2Nsb3NlZFdvcmxkLmRhcnRUeXBlczsKICBKRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+CiAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CgogIGpzLk5hbWUgX2NhbGwwTmFtZSwgX2NhbGwxTmFtZSwgX2NhbGwyTmFtZTsKICBqcy5OYW1lIGdldCBjYWxsME5hbWUgPT4KICAgICAgX2NhbGwwTmFtZSA/Pz0gX25hbWVyLmdldE5hbWVGb3JKc0dldE5hbWUobnVsbCwgSnNHZXROYW1lLkNBTExfUFJFRklYMCk7CiAganMuTmFtZSBnZXQgY2FsbDFOYW1lID0+CiAgICAgIF9jYWxsMU5hbWUgPz89IF9uYW1lci5nZXROYW1lRm9ySnNHZXROYW1lKG51bGwsIEpzR2V0TmFtZS5DQUxMX1BSRUZJWDEpOwogIGpzLk5hbWUgZ2V0IGNhbGwyTmFtZSA9PgogICAgICBfY2FsbDJOYW1lID8/PSBfbmFtZXIuZ2V0TmFtZUZvckpzR2V0TmFtZShudWxsLCBKc0dldE5hbWUuQ0FMTF9QUkVGSVgyKTsKCiAgRnJhZ21lbnRFbWl0dGVyKAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9kdW1wSW5mb1Rhc2ssCiAgICAgIHRoaXMuX25hbWVyLAogICAgICB0aGlzLl9lbWl0dGVyLAogICAgICB0aGlzLl9jb25zdGFudEVtaXR0ZXIsCiAgICAgIHRoaXMuX21vZGVsRW1pdHRlciwKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCkgewogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgX3JlY2lwZUVuY29kZXIgPSBSZWNpcGVFbmNvZGVySW1wbCgKICAgICAgICAgIF9jbG9zZWRXb3JsZCwKICAgICAgICAgIF9vcHRpb25zLmRpc2FibGVSdGlPcHRpbWl6YXRpb24KICAgICAgICAgICAgICA/IFRyaXZpYWxSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zKF9jbG9zZWRXb3JsZCkKICAgICAgICAgICAgICA6IFJ1bnRpbWVUeXBlc0ltcGwoX2Nsb3NlZFdvcmxkKSwKICAgICAgICAgIF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLAogICAgICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICAgIF9jbG9zZWRXb3JsZC5ydGlOZWVkKTsKICAgICAgX3J1bGVzZXRFbmNvZGVyID0KICAgICAgICAgIFJ1bGVzZXRFbmNvZGVyKF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMsIF9lbWl0dGVyLCBfcmVjaXBlRW5jb2Rlcik7CiAgICB9CiAgfQoKICBqcy5FeHByZXNzaW9uIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoU3RyaW5nIGdsb2JhbCkgPT4KICAgICAgX2VtaXR0ZXIuZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhnbG9iYWwpOwoKICBqcy5FeHByZXNzaW9uIGdlbmVyYXRlQ29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgPT4KICAgICAgX21vZGVsRW1pdHRlci5nZW5lcmF0ZUNvbnN0YW50UmVmZXJlbmNlKHZhbHVlKTsKCiAganMuRXhwcmVzc2lvbiBjbGFzc1JlZmVyZW5jZShDbGFzcyBjbHMpIHsKICAgIHJldHVybiBqcy5qcygnIy4jJywgW2Nscy5ob2xkZXIubmFtZSwgY2xzLm5hbWVdKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJFbnRpdHlBc3QoRW50aXR5IGVudGl0eSwganMuTm9kZSBjb2RlLCB7TGlicmFyeUVudGl0eSBsaWJyYXJ5fSkgewogICAgX2R1bXBJbmZvVGFzay5yZWdpc3RlckVudGl0eUFzdChlbnRpdHksIGNvZGUpOwogICAgLy8gVE9ETyhzaWdtdW5kKTogc3RvcCByZWNvZGluZyBhc3NvY2lhdGlvbnMgdHdpY2UsIGR1bXAtaW5mbyBhbHJlYWR5CiAgICAvLyBoYXMgbGlicmFyeSB0byBlbGVtZW50IGRlcGVuZGVuY2llcyB0byByZWNvdmVyIHRoaXMgZGF0YS4KICAgIGlmIChsaWJyYXJ5ICE9IG51bGwpIF9kdW1wSW5mb1Rhc2sucmVnaXN0ZXJFbnRpdHlBc3QobGlicmFyeSwgY29kZSk7CiAgfQoKICBqcy5TdGF0ZW1lbnQgZW1pdE1haW5GcmFnbWVudCgKICAgICAgUHJvZ3JhbSBwcm9ncmFtLCBEZWZlcnJlZExvYWRpbmdTdGF0ZSBkZWZlcnJlZExvYWRpbmdTdGF0ZSkgewogICAgTWFpbkZyYWdtZW50IGZyYWdtZW50ID0gcHJvZ3JhbS5mcmFnbWVudHMuZmlyc3Q7CgogICAgSXRlcmFibGU8SG9sZGVyPiBub25TdGF0aWNTdGF0ZUhvbGRlcnMgPQogICAgICAgIHByb2dyYW0uaG9sZGVycy53aGVyZSgoSG9sZGVyIGhvbGRlcikgPT4gIWhvbGRlci5pc1N0YXRpY1N0YXRlSG9sZGVyKTsKCiAgICBTdHJpbmcgc29mdERlZmVycmVkSWQgPSAic29mdERlZmVycmVkJHtuZXcgUmFuZG9tKCkubmV4dEludCgweDdGRkZGRkZGKX0iOwoKICAgIEhvbGRlckNvZGUgaG9sZGVyQ29kZSA9CiAgICAgICAgZW1pdEhvbGRlcnMocHJvZ3JhbS5ob2xkZXJzLCBmcmFnbWVudCwgaW5pdGlhbGl6ZUVtcHR5SG9sZGVyczogdHJ1ZSk7CgogICAganMuU3RhdGVtZW50IG1haW5Db2RlID0ganMuanMuc3RhdGVtZW50KG1haW5Cb2lsZXJwbGF0ZSwgewogICAgICAvLyBUT0RPKDI5NDU1KTogJ2h1bmtIZWxwZXJzJyBkaXNwbGFjZXMgb3RoZXIgbmFtZXMsIHNvIGRvbid0IG1pbmlmeSBpdC4KICAgICAgJ2h1bmtIZWxwZXJzJzoganMuVmFyaWFibGVEZWNsYXJhdGlvbignaHVua0hlbHBlcnMnLCBhbGxvd1JlbmFtZTogZmFsc2UpLAogICAgICAnZGlyZWN0QWNjZXNzVGVzdEV4cHJlc3Npb24nOiBqcy5qcyhkaXJlY3RBY2Nlc3NUZXN0RXhwcmVzc2lvbiksCiAgICAgICdjeWNsaWNUaHJvdyc6IF9lbWl0dGVyCiAgICAgICAgICAuc3RhdGljRnVuY3Rpb25BY2Nlc3MoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmN5Y2xpY1Rocm93SGVscGVyKSwKICAgICAgJ29wZXJhdG9ySXNQcmVmaXgnOiBqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMub3BlcmF0b3JJc1ByZWZpeCksCiAgICAgICd0ZWFyT2ZmQ29kZSc6IG5ldyBqcy5CbG9jayhidWlsZFRlYXJPZmZDb2RlKAogICAgICAgICAgX29wdGlvbnMsIF9lbWl0dGVyLCBfbmFtZXIsIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cykpLAogICAgICAnZW1iZWRkZWRUeXBlcyc6IGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoVFlQRVMpLAogICAgICAnZW1iZWRkZWRJbnRlcmNlcHRvclRhZ3MnOgogICAgICAgICAgZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhJTlRFUkNFUFRPUlNfQllfVEFHKSwKICAgICAgJ2VtYmVkZGVkTGVhZlRhZ3MnOiBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKExFQUZfVEFHUyksCiAgICAgICdlbWJlZGRlZEdsb2JhbHNPYmplY3QnOiBqcy5qcygiaW5pdCIpLAogICAgICAnc3RhdGljU3RhdGVEZWNsYXJhdGlvbic6IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKAogICAgICAgICAgX25hbWVyLnN0YXRpY1N0YXRlSG9sZGVyLAogICAgICAgICAgYWxsb3dSZW5hbWU6IGZhbHNlKSwKICAgICAgJ3N0YXRpY1N0YXRlJzoganMuanMoJyMnLCBfbmFtZXIuc3RhdGljU3RhdGVIb2xkZXIpLAogICAgICAnY29uc3RhbnRIb2xkZXJSZWZlcmVuY2UnOiBidWlsZENvbnN0YW50SG9sZGVyUmVmZXJlbmNlKHByb2dyYW0pLAogICAgICAnaG9sZGVycyc6IGhvbGRlckNvZGUuc3RhdGVtZW50cywKICAgICAgJ2NhbGxOYW1lJzoganMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLmNhbGxOYW1lRmllbGQpLAogICAgICAnc3R1Yk5hbWUnOiBqcy5zdHJpbmcoX25hbWVyLnN0dWJOYW1lRmllbGQpLAogICAgICAnYXJndW1lbnRDb3VudCc6IGpzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5yZXF1aXJlZFBhcmFtZXRlckZpZWxkKSwKICAgICAgJ2RlZmF1bHRBcmd1bWVudFZhbHVlcyc6IGpzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5kZWZhdWx0VmFsdWVzRmllbGQpLAogICAgICAnZGVmZXJyZWRHbG9iYWwnOiBNb2RlbEVtaXR0ZXIuZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWwsCiAgICAgICdoYXNTb2Z0RGVmZXJyZWRDbGFzc2VzJzogcHJvZ3JhbS5oYXNTb2Z0RGVmZXJyZWRDbGFzc2VzLAogICAgICAnc29mdElkJzoganMuc3RyaW5nKHNvZnREZWZlcnJlZElkKSwKICAgICAgJ2lzVHJhY2tpbmdBbGxvY2F0aW9ucyc6IF9vcHRpb25zLmV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMsCiAgICAgICdwcm90b3R5cGVzJzogZW1pdFByb3RvdHlwZXMoZnJhZ21lbnQpLAogICAgICAnaW5oZXJpdGFuY2UnOiBlbWl0SW5oZXJpdGFuY2UoZnJhZ21lbnQpLAogICAgICAnYWxpYXNlcyc6IGVtaXRJbnN0YW5jZU1ldGhvZEFsaWFzZXMoZnJhZ21lbnQpLAogICAgICAndGVhck9mZnMnOiBlbWl0SW5zdGFsbFRlYXJPZmZzKGZyYWdtZW50KSwKICAgICAgJ2NvbnN0YW50cyc6IGVtaXRDb25zdGFudHMoZnJhZ21lbnQpLAogICAgICAnc3RhdGljTm9uRmluYWxGaWVsZHMnOiBlbWl0U3RhdGljTm9uRmluYWxGaWVsZHMoZnJhZ21lbnQpLAogICAgICAnbGF6eVN0YXRpY3MnOiBlbWl0TGF6aWx5SW5pdGlhbGl6ZWRTdGF0aWNzKGZyYWdtZW50KSwKICAgICAgJ2VtYmVkZGVkR2xvYmFsc1BhcnQxJzoKICAgICAgICAgIGVtaXRFbWJlZGRlZEdsb2JhbHNQYXJ0MShwcm9ncmFtLCBkZWZlcnJlZExvYWRpbmdTdGF0ZSksCiAgICAgICdlbWJlZGRlZEdsb2JhbHNQYXJ0Mic6CiAgICAgICAgICBlbWl0RW1iZWRkZWRHbG9iYWxzUGFydDIocHJvZ3JhbSwgZGVmZXJyZWRMb2FkaW5nU3RhdGUpLAogICAgICAndHlwZVJ1bGVzJzogZW1pdFR5cGVSdWxlcyhmcmFnbWVudCksCiAgICAgICduYXRpdmVTdXBwb3J0JzogcHJvZ3JhbS5uZWVkc05hdGl2ZVN1cHBvcnQKICAgICAgICAgID8gZW1pdE5hdGl2ZVN1cHBvcnQoZnJhZ21lbnQpCiAgICAgICAgICA6IG5ldyBqcy5FbXB0eVN0YXRlbWVudCgpLAogICAgICAnanNJbnRlcm9wU3VwcG9ydCc6IGpzSW50ZXJvcEFuYWx5c2lzLmJ1aWxkSnNJbnRlcm9wQm9vdHN0cmFwKAogICAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQsIF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLCBfbmFtZXIpID8/CiAgICAgICAgICBuZXcganMuRW1wdHlTdGF0ZW1lbnQoKSwKICAgICAgJ2ludm9rZU1haW4nOiBmcmFnbWVudC5pbnZva2VNYWluLAoKICAgICAgJ2NhbGwwc2VsZWN0b3InOiBqcy5xdW90ZU5hbWUoY2FsbDBOYW1lKSwKICAgICAgJ2NhbGwxc2VsZWN0b3InOiBqcy5xdW90ZU5hbWUoY2FsbDFOYW1lKSwKICAgICAgJ2NhbGwyc2VsZWN0b3InOiBqcy5xdW90ZU5hbWUoY2FsbDJOYW1lKSwKICAgIH0pOwogICAgaWYgKHByb2dyYW0uaGFzU29mdERlZmVycmVkQ2xhc3NlcykgewogICAgICByZXR1cm4gbmV3IGpzLkJsb2NrKFsKICAgICAgICBqcy5qcy5zdGF0ZW1lbnQoc29mdERlZmVycmVkQm9pbGVycGxhdGUsIHsKICAgICAgICAgICdkZWZlcnJlZEdsb2JhbCc6IE1vZGVsRW1pdHRlci5kZWZlcnJlZEluaXRpYWxpemVyc0dsb2JhbCwKICAgICAgICAgICdzb2Z0SWQnOiBqcy5zdHJpbmcoc29mdERlZmVycmVkSWQpLAogICAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IGRvbid0IGp1c3QgcmVmZXJlbmNlICdpbml0Jy4KICAgICAgICAgICdlbWJlZGRlZEdsb2JhbHNPYmplY3QnOiBuZXcganMuUGFyYW1ldGVyKCdpbml0JyksCiAgICAgICAgICAnc3RhdGljU3RhdGUnOiBuZXcganMuUGFyYW1ldGVyKF9uYW1lci5zdGF0aWNTdGF0ZUhvbGRlciksCiAgICAgICAgICAnaW5zdGFsbEhvbGRlcnNBc0xvY2Fscyc6CiAgICAgICAgICAgICAgZW1pdEluc3RhbGxIb2xkZXJzQXNMb2NhbHMobm9uU3RhdGljU3RhdGVIb2xkZXJzKSwKICAgICAgICAgICdwcm90b3R5cGVzJzogZW1pdFByb3RvdHlwZXMoZnJhZ21lbnQsIHNvZnREZWZlcnJlZDogdHJ1ZSksCiAgICAgICAgICAnYWxpYXNlcyc6IGVtaXRJbnN0YW5jZU1ldGhvZEFsaWFzZXMoZnJhZ21lbnQsIHNvZnREZWZlcnJlZDogdHJ1ZSksCiAgICAgICAgICAndGVhck9mZnMnOiBlbWl0SW5zdGFsbFRlYXJPZmZzKGZyYWdtZW50LCBzb2Z0RGVmZXJyZWQ6IHRydWUpLAogICAgICAgICAgJ2luaGVyaXRhbmNlJzogZW1pdEluaGVyaXRhbmNlKGZyYWdtZW50LCBzb2Z0RGVmZXJyZWQ6IHRydWUpLAogICAgICAgIH0pLAogICAgICAgIG1haW5Db2RlCiAgICAgIF0pOwogICAgfQogICAgcmV0dXJuIG1haW5Db2RlOwogIH0KCiAganMuU3RhdGVtZW50IGVtaXRJbnN0YWxsSG9sZGVyc0FzTG9jYWxzKEl0ZXJhYmxlPEhvbGRlcj4gaG9sZGVycykgewogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IGhvbGRlckluaXRzID0gW107CiAgICBpbnQgY291bnRlciA9IDA7CiAgICBmb3IgKEhvbGRlciBob2xkZXIgaW4gaG9sZGVycykgewogICAgICBob2xkZXJJbml0cy5hZGQobmV3IGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQobmV3IGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24oCiAgICAgICAgICBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbihob2xkZXIubmFtZSwgYWxsb3dSZW5hbWU6IGZhbHNlKSwKICAgICAgICAgIGpzLmpzKCJob2xkZXJzTGlzdFsjXSIsIGpzLm51bWJlcihjb3VudGVyKyspKSkpKTsKICAgIH0KICAgIHJldHVybiBuZXcganMuQmxvY2soaG9sZGVySW5pdHMpOwogIH0KCiAganMuRXhwcmVzc2lvbiBlbWl0RGVmZXJyZWRGcmFnbWVudChEZWZlcnJlZEZyYWdtZW50IGZyYWdtZW50LAogICAgICBqcy5FeHByZXNzaW9uIGRlZmVycmVkVHlwZXMsIExpc3Q8SG9sZGVyPiBob2xkZXJzKSB7CiAgICBIb2xkZXJDb2RlIGhvbGRlckNvZGUgPQogICAgICAgIGVtaXRIb2xkZXJzKGhvbGRlcnMsIGZyYWdtZW50LCBpbml0aWFsaXplRW1wdHlIb2xkZXJzOiBmYWxzZSk7CgogICAgTGlzdDxIb2xkZXI+IG5vblN0YXRpY1N0YXRlSG9sZGVycyA9IGhvbGRlcnMKICAgICAgICAud2hlcmUoKEhvbGRlciBob2xkZXIpID0+ICFob2xkZXIuaXNTdGF0aWNTdGF0ZUhvbGRlcikKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHVwZGF0ZUhvbGRlckFzc2lnbm1lbnRzID0gW107CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vblN0YXRpY1N0YXRlSG9sZGVycy5sZW5ndGg7IGkrKykgewogICAgICBIb2xkZXIgaG9sZGVyID0gbm9uU3RhdGljU3RhdGVIb2xkZXJzW2ldOwogICAgICBpZiAoaG9sZGVyQ29kZS5hY3RpdmVIb2xkZXJzLmNvbnRhaW5zKGhvbGRlcikpIHsKICAgICAgICB1cGRhdGVIb2xkZXJBc3NpZ25tZW50cy5hZGQoanMuanMuc3RhdGVtZW50KAogICAgICAgICAgICAnI2hvbGRlciA9IGh1bmtIZWxwZXJzLnVwZGF0ZUhvbGRlcihob2xkZXJzTGlzdFsjaW5kZXhdLCAjaG9sZGVyKScsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAnaW5kZXgnOiBqcy5udW1iZXIoaSksCiAgICAgICAgICAgICAgJ2hvbGRlcic6IG5ldyBqcy5WYXJpYWJsZVVzZShob2xkZXIubmFtZSkKICAgICAgICAgICAgfSkpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oc3JhKTogQ2hhbmdlIGRlY2xhcmF0aW9uIGZvbGxvd2VkIGJ5IGFzc2lnbm1lbnRzIHRvIGRlY2xhcmF0aW9ucwogICAgICAgIC8vIHdpdGggaW5pdGlhbGl6YXRpb24uCiAgICAgICAgdXBkYXRlSG9sZGVyQXNzaWdubWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAgICAgJyNob2xkZXIgPSBob2xkZXJzTGlzdFsjaW5kZXhdJywgewogICAgICAgICAgJ2luZGV4JzoganMubnVtYmVyKGkpLAogICAgICAgICAgJ2hvbGRlcic6IG5ldyBqcy5WYXJpYWJsZVVzZShob2xkZXIubmFtZSkKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgY2xhc3NQcm90b3R5cGVzID0gZW1pdFByb3RvdHlwZXMoZnJhZ21lbnQsIGluY2x1ZGVDbG9zdXJlczogZmFsc2UpOwogICAgdmFyIGNsb3N1cmVQcm90b3R5cGVzID0gZW1pdFByb3RvdHlwZXMoZnJhZ21lbnQsIGluY2x1ZGVDbG9zdXJlczogdHJ1ZSk7CiAgICB2YXIgaW5oZXJpdGFuY2UgPSBlbWl0SW5oZXJpdGFuY2UoZnJhZ21lbnQpOwogICAgdmFyIG1ldGhvZEFsaWFzZXMgPSBlbWl0SW5zdGFuY2VNZXRob2RBbGlhc2VzKGZyYWdtZW50KTsKICAgIHZhciB0ZWFyT2ZmcyA9IGVtaXRJbnN0YWxsVGVhck9mZnMoZnJhZ21lbnQpOwogICAgdmFyIGNvbnN0YW50cyA9IGVtaXRDb25zdGFudHMoZnJhZ21lbnQpOwogICAgdmFyIHR5cGVSdWxlcyA9IGVtaXRUeXBlUnVsZXMoZnJhZ21lbnQpOwogICAgdmFyIHN0YXRpY05vbkZpbmFsRmllbGRzID0gZW1pdFN0YXRpY05vbkZpbmFsRmllbGRzKGZyYWdtZW50KTsKICAgIHZhciBsYXp5SW5pdGlhbGl6ZXJzID0gZW1pdExhemlseUluaXRpYWxpemVkU3RhdGljcyhmcmFnbWVudCk7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogb25seSBjYWxsIGVtaXROYXRpdmVTdXBwb3J0IGlmIHdlIG5lZWQgbmF0aXZlLgogICAgdmFyIG5hdGl2ZVN1cHBvcnQgPSBlbWl0TmF0aXZlU3VwcG9ydChmcmFnbWVudCk7CgogICAgLy8gVE9ETyhzcmEpOiBIb3cgZG8gd2UgdGVsbCBpZiBbZGVmZXJyZWRUeXBlc10gaXMgZW1wdHk/IEl0IGlzIGZpbGxlZC1pbgogICAgLy8gbGF0ZXIgdmlhIHRoZSBwcm9ncmFtIGZpbmFsaXplcnMuIFNvIHdlIHNob3VsZCBkZWZlciB0aGUgZGVjaXNpb24gb24gdGhlCiAgICAvLyBlbXB0aW5lc3Mgb2YgdGhlIGZyYWdtZW50IHVudGlsIHRoZSBmaW5hbGl6ZXJzIGhhdmUgcnVuLiAgRm9yIG5vdyB3ZSBzZWVtCiAgICAvLyB0byBnZXQgYXdheSB3aXRoIHRoZSBmYWN0IHRoYXQgdHlwZSBpbmRleGVzIGFyZSBlaXRoZXIgKDEpIG1haW4gdW5pdCBvcgogICAgLy8gKDIpIGxvY2FsIHRvIHRoZSBlbWl0dGVkIHVuaXQsIHNvIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgYSB0eXBlIGluIGEKICAgIC8vIGRlZmVycmVkIHVuaXQgdGhhdCBpcyByZWZlcmVuY2VkIGZyb20gYW5vdGhlciBkZWZlcnJlZCB1bml0LiAgSWYgd2UgZGlkCiAgICAvLyBub3QgZW1pdCBhbnkgZnVuY3Rpb25zLCB0aGVuIHdlIHByb2JhYmx5IGRpZCBub3QgdXNlIHRoZSBzaWduYXR1cmUgdHlwZXMKICAgIC8vIGluIHRoZSBPdXRwdXRVbml0J3MgdHlwZXMsIGxlYXZpbmcgdGhlbSB1bnVzZWQgYW5kIHRyZWUtc2hha2VuLgoKICAgIGlmIChob2xkZXJDb2RlLmFjdGl2ZUhvbGRlcnMuaXNFbXB0eSAmJgogICAgICAgIGlzRW1wdHlTdGF0ZW1lbnQoY2xhc3NQcm90b3R5cGVzKSAmJgogICAgICAgIGlzRW1wdHlTdGF0ZW1lbnQoY2xvc3VyZVByb3RvdHlwZXMpICYmCiAgICAgICAgaXNFbXB0eVN0YXRlbWVudChpbmhlcml0YW5jZSkgJiYKICAgICAgICBpc0VtcHR5U3RhdGVtZW50KG1ldGhvZEFsaWFzZXMpICYmCiAgICAgICAgaXNFbXB0eVN0YXRlbWVudCh0ZWFyT2ZmcykgJiYKICAgICAgICBpc0VtcHR5U3RhdGVtZW50KGNvbnN0YW50cykgJiYKICAgICAgICBpc0VtcHR5U3RhdGVtZW50KHN0YXRpY05vbkZpbmFsRmllbGRzKSAmJgogICAgICAgIGlzRW1wdHlTdGF0ZW1lbnQobGF6eUluaXRpYWxpemVycykgJiYKICAgICAgICBpc0VtcHR5U3RhdGVtZW50KG5hdGl2ZVN1cHBvcnQpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGpzLkV4cHJlc3Npb24gY29kZSA9IGpzLmpzKGRlZmVycmVkQm9pbGVycGxhdGVEYXJ0MiwgewogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZG9uJ3QganVzdCByZWZlcmVuY2UgJ2luaXQnLgogICAgICAnZW1iZWRkZWRHbG9iYWxzT2JqZWN0JzogbmV3IGpzLlBhcmFtZXRlcignaW5pdCcpLAogICAgICAnc3RhdGljU3RhdGUnOiBuZXcganMuUGFyYW1ldGVyKF9uYW1lci5zdGF0aWNTdGF0ZUhvbGRlciksCiAgICAgICdob2xkZXJzJzogaG9sZGVyQ29kZS5zdGF0ZW1lbnRzLAogICAgICAnZGVmZXJyZWRIb2xkZXJzTGlzdCc6IG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGhvbGRlckNvZGUuYWN0aXZlSG9sZGVycwogICAgICAgICAgLm1hcCgoaG9sZGVyKSA9PiBqcy5qcygiIyIsIGhvbGRlci5uYW1lKSkKICAgICAgICAgIC50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKSksCiAgICAgICd1cGRhdGVIb2xkZXJzJzogbmV3IGpzLkJsb2NrKHVwZGF0ZUhvbGRlckFzc2lnbm1lbnRzKSwKICAgICAgJ3Byb3RvdHlwZXMnOiBjbGFzc1Byb3RvdHlwZXMsCiAgICAgICdjbG9zdXJlcyc6IGNsb3N1cmVQcm90b3R5cGVzLAogICAgICAnaW5oZXJpdGFuY2UnOiBpbmhlcml0YW5jZSwKICAgICAgJ2FsaWFzZXMnOiBtZXRob2RBbGlhc2VzLAogICAgICAndGVhck9mZnMnOiB0ZWFyT2ZmcywKICAgICAgJ3R5cGVSdWxlcyc6IHR5cGVSdWxlcywKICAgICAgJ2NvbnN0YW50cyc6IGNvbnN0YW50cywKICAgICAgJ3N0YXRpY05vbkZpbmFsRmllbGRzJzogc3RhdGljTm9uRmluYWxGaWVsZHMsCiAgICAgICdsYXp5U3RhdGljcyc6IGxhenlJbml0aWFsaXplcnMsCiAgICAgICd0eXBlcyc6IGRlZmVycmVkVHlwZXMsCiAgICAgICduYXRpdmVTdXBwb3J0JzogbmF0aXZlU3VwcG9ydCwKICAgICAgJ3R5cGVzT2Zmc2V0JzogX25hbWVyLnR5cGVzT2Zmc2V0TmFtZSwKICAgIH0pOwoKICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50U3RhcnR1cEZ1bmN0aW9ucykgewogICAgICBjb2RlID0ganMuUGFyZW50aGVzZXMoY29kZSk7CiAgICB9CiAgICByZXR1cm4gY29kZTsKICB9CgogIC8vLyBFbWl0cyBhbGwgaG9sZGVycywgZXhjZXB0IGZvciB0aGUgc3RhdGljLXN0YXRlIGhvbGRlci4KICAvLy8KICAvLy8gVGhlIGVtaXR0ZWQgaG9sZGVycyBjb250YWluIGNsYXNzZXMgKG9ubHkgdGhlIGNvbnN0cnVjdG9ycykgYW5kIGFsbAogIC8vLyBzdGF0aWMgZnVuY3Rpb25zLgogIEhvbGRlckNvZGUgZW1pdEhvbGRlcnMoTGlzdDxIb2xkZXI+IGhvbGRlcnMsIEZyYWdtZW50IGZyYWdtZW50LAogICAgICB7Ym9vbCBpbml0aWFsaXplRW1wdHlIb2xkZXJzfSkgewogICAgYXNzZXJ0KGluaXRpYWxpemVFbXB0eUhvbGRlcnMgIT0gbnVsbCk7CiAgICAvLyBTa2lwIHRoZSBzdGF0aWMtc3RhdGUgaG9sZGVyIGluIHRoaXMgZnVuY3Rpb24uCiAgICBob2xkZXJzID0gaG9sZGVycwogICAgICAgIC53aGVyZSgoSG9sZGVyIGhvbGRlcikgPT4gIWhvbGRlci5pc1N0YXRpY1N0YXRlSG9sZGVyKQogICAgICAgIC50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKCiAgICBNYXA8SG9sZGVyLCBMaXN0PGpzLlByb3BlcnR5Pj4gaG9sZGVyQ29kZSA9IHt9OwoKICAgIGZvciAoSG9sZGVyIGhvbGRlciBpbiBob2xkZXJzKSB7CiAgICAgIGhvbGRlckNvZGVbaG9sZGVyXSA9IDxqcy5Qcm9wZXJ0eT5bXTsKICAgIH0KCiAgICBmb3IgKExpYnJhcnkgbGlicmFyeSBpbiBmcmFnbWVudC5saWJyYXJpZXMpIHsKICAgICAgZm9yIChTdGF0aWNNZXRob2QgbWV0aG9kIGluIGxpYnJhcnkuc3RhdGljcykgewogICAgICAgIGFzc2VydCghbWV0aG9kLmhvbGRlci5pc1N0YXRpY1N0YXRlSG9sZGVyKTsKICAgICAgICBNYXA8anMuTmFtZSwganMuRXhwcmVzc2lvbj4gcHJvcGVydHlNYXAgPSBlbWl0U3RhdGljTWV0aG9kKG1ldGhvZCk7CiAgICAgICAgcHJvcGVydHlNYXAuZm9yRWFjaCgoanMuTmFtZSBrZXksIGpzLkV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IG5ldyBqcy5Qcm9wZXJ0eShqcy5xdW90ZU5hbWUoa2V5KSwgdmFsdWUpOwogICAgICAgICAgaG9sZGVyQ29kZVttZXRob2QuaG9sZGVyXS5hZGQocHJvcGVydHkpOwogICAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QobWV0aG9kLmVsZW1lbnQsIHByb3BlcnR5LCBsaWJyYXJ5OiBsaWJyYXJ5LmVsZW1lbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZvciAoQ2xhc3MgY2xzIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIGFzc2VydCghY2xzLmhvbGRlci5pc1N0YXRpY1N0YXRlSG9sZGVyKTsKICAgICAgICBqcy5FeHByZXNzaW9uIGNvbnN0cnVjdG9yID0gZW1pdENvbnN0cnVjdG9yKGNscyk7CiAgICAgICAgdmFyIHByb3BlcnR5ID0gbmV3IGpzLlByb3BlcnR5KGpzLnF1b3RlTmFtZShjbHMubmFtZSksIGNvbnN0cnVjdG9yKTsKICAgICAgICByZWdpc3RlckVudGl0eUFzdChjbHMuZWxlbWVudCwgcHJvcGVydHksIGxpYnJhcnk6IGxpYnJhcnkuZWxlbWVudCk7CiAgICAgICAgaG9sZGVyQ29kZVtjbHMuaG9sZGVyXS5hZGQocHJvcGVydHkpOwogICAgICB9CiAgICB9CgogICAgTGlzdDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiBob2xkZXJJbml0aWFsaXphdGlvbnMgPSBbXTsKICAgIExpc3Q8SG9sZGVyPiBhY3RpdmVIb2xkZXJzID0gW107CgogICAgZm9yIChIb2xkZXIgaG9sZGVyIGluIGhvbGRlcnMpIHsKICAgICAgTGlzdDxqcy5Qcm9wZXJ0eT4gcHJvcGVydGllcyA9IGhvbGRlckNvZGVbaG9sZGVyXTsKICAgICAgaWYgKHByb3BlcnRpZXMuaXNFbXB0eSkgewogICAgICAgIGhvbGRlckluaXRpYWxpemF0aW9ucy5hZGQobmV3IGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24oCiAgICAgICAgICAgIG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKGhvbGRlci5uYW1lLCBhbGxvd1JlbmFtZTogZmFsc2UpLAogICAgICAgICAgICBpbml0aWFsaXplRW1wdHlIb2xkZXJzCiAgICAgICAgICAgICAgICA/IG5ldyBqcy5PYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKQogICAgICAgICAgICAgICAgOiBudWxsKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWN0aXZlSG9sZGVycy5hZGQoaG9sZGVyKTsKICAgICAgICBob2xkZXJJbml0aWFsaXphdGlvbnMuYWRkKG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKAogICAgICAgICAgICBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbihob2xkZXIubmFtZSwgYWxsb3dSZW5hbWU6IGZhbHNlKSwKICAgICAgICAgICAgbmV3IGpzLk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMpKSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUaGUgZ2VuZXJhdGVkIGNvZGUgbG9va3MgbGlrZSB0aGlzOgogICAgLy8KICAgIC8vICAgIHsKICAgIC8vICAgICAgdmFyIEggPSB7Li4ufSwgLi4uLCBHID0gey4uLn07CiAgICAvLyAgICAgIHZhciBob2xkZXJzID0gWyBILCAuLi4sIEcgXTsgLy8gTWFpbiB1bml0IG9ubHkuCiAgICAvLyAgICB9CgogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSBbXTsKICAgIHN0YXRlbWVudHMuYWRkKG5ldyBqcy5FeHByZXNzaW9uU3RhdGVtZW50KG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgKICAgICAgICBob2xkZXJJbml0aWFsaXphdGlvbnMsCiAgICAgICAgaW5kZW50U3BsaXRzOiBmYWxzZSkpKTsKICAgIGlmIChpbml0aWFsaXplRW1wdHlIb2xkZXJzKSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAgICd2YXIgaG9sZGVycyA9ICMnLAogICAgICAgICAgbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoaG9sZGVycwogICAgICAgICAgICAgIC5tYXAoKGhvbGRlcikgPT4gbmV3IGpzLlZhcmlhYmxlVXNlKGhvbGRlci5uYW1lKSkKICAgICAgICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSkpKSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEhvbGRlckNvZGUoCiAgICAgIGFjdGl2ZUhvbGRlcnM6IGFjdGl2ZUhvbGRlcnMsCiAgICAgIHN0YXRlbWVudHM6IG5ldyBqcy5CbG9jayhzdGF0ZW1lbnRzKSwKICAgICk7CiAgfQoKICAvLy8gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29uc3RhbnQgaG9sZGVyLCBvciB0aGUgSlMtbGl0ZXJhbCBgbnVsbGAuCiAganMuRXhwcmVzc2lvbiBidWlsZENvbnN0YW50SG9sZGVyUmVmZXJlbmNlKFByb2dyYW0gcHJvZ3JhbSkgewogICAgSG9sZGVyIGNvbnN0YW50SG9sZGVyID0gcHJvZ3JhbS5ob2xkZXJzLmZpcnN0V2hlcmUoCiAgICAgICAgKEhvbGRlciBob2xkZXIpID0+IGhvbGRlci5pc0NvbnN0YW50c0hvbGRlciwKICAgICAgICBvckVsc2U6ICgpID0+IG51bGwpOwogICAgaWYgKGNvbnN0YW50SG9sZGVyID09IG51bGwpIHJldHVybiBuZXcganMuTGl0ZXJhbE51bGwoKTsKICAgIHJldHVybiBuZXcganMuVmFyaWFibGVVc2UoY29uc3RhbnRIb2xkZXIubmFtZSk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIGdpdmVuIFttZXRob2RdLgogIC8vLwogIC8vLyBBIERhcnQgbWV0aG9kIG1pZ2h0IHJlc3VsdCBpbiBzZXZlcmFsIEphdmFTY3JpcHQgZnVuY3Rpb25zLCBpZiBpdAogIC8vLyByZXF1aXJlcyBzdHVicy4gVGhlIHJldHVybmVkIG1hcCBjb250YWlucyB0aGUgb3JpZ2luYWwgbWV0aG9kIGFuZCBhbGwKICAvLy8gdGhlIHN0dWJzIGl0IG5lZWRzLgogIE1hcDxqcy5OYW1lLCBqcy5FeHByZXNzaW9uPiBlbWl0U3RhdGljTWV0aG9kKFN0YXRpY01ldGhvZCBtZXRob2QpIHsKICAgIE1hcDxqcy5OYW1lLCBqcy5FeHByZXNzaW9uPiBqc01ldGhvZHMgPSB7fTsKCiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGluc3RhbGwgc3R1Yi1tZXRob2RzLiBUaGV5IGNhbiBvbmx5IGJlIHVzZWQgd2hlbiB0aGVyZQogICAgLy8gYXJlIHRlYXItb2ZmcywgaW4gd2hpY2ggY2FzZSB0aGV5IGFyZSBlbWl0dGVkIHRoZXJlLgogICAgYXNzZXJ0KCgpIHsKICAgICAgaWYgKG1ldGhvZCBpcyBTdGF0aWNEYXJ0TWV0aG9kKSB7CiAgICAgICAgcmV0dXJuIG1ldGhvZC5uZWVkc1RlYXJPZmYgfHwgbWV0aG9kLnBhcmFtZXRlclN0dWJzLmlzRW1wdHk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogICAganNNZXRob2RzW21ldGhvZC5uYW1lXSA9IG1ldGhvZC5jb2RlOwoKICAgIHJldHVybiBqc01ldGhvZHM7CiAgfQoKICAvLy8gRW1pdHMgYSBjb25zdHJ1Y3RvciBmb3IgdGhlIGdpdmVuIGNsYXNzIFtjbHNdLgogIC8vLwogIC8vLyBUaGUgY29uc3RydWN0b3IgaXMgc3RhdGljYWxseSBidWlsdC4KICBqcy5FeHByZXNzaW9uIGVtaXRDb25zdHJ1Y3RvcihDbGFzcyBjbHMpIHsKICAgIGpzLk5hbWUgbmFtZSA9IGNscy5uYW1lOwogICAgLy8gSWYgdGhlIGNsYXNzIGlzIG5vdCBkaXJlY3RseSBpbnN0YW50aWF0ZWQgd2Ugb25seSBuZWVkIGl0IGZvciBpbmhlcml0YW5jZQogICAgLy8gb3IgUlRJLiBJbiBlaXRoZXIgY2FzZSB3ZSBkb24ndCBuZWVkIGl0cyBmaWVsZHMuCiAgICBpZiAoY2xzLmlzTmF0aXZlIHx8ICFjbHMuaXNEaXJlY3RseUluc3RhbnRpYXRlZCkgewogICAgICByZXR1cm4ganMuanMoJ2Z1bmN0aW9uICMoKSB7IH0nLCBuYW1lKTsKICAgIH0KCiAgICB2YXIgc3RhdGVtZW50cyA9IDxqcy5TdGF0ZW1lbnQ+W107CiAgICB2YXIgcGFyYW1ldGVycyA9IDxqcy5QYXJhbWV0ZXI+W107CiAgICB2YXIgdGhpc1JlZjsKCiAgICBpZiAoY2xzLmlzU29mdERlZmVycmVkKSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgnc29mdERlZih0aGlzKScpKTsKICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuZXhwZXJpbWVudGFsVHJhY2tBbGxvY2F0aW9ucykgewogICAgICBTdHJpbmcgcXVhbGlmaWVkTmFtZSA9CiAgICAgICAgICAiJHtjbHMuZWxlbWVudC5saWJyYXJ5LmNhbm9uaWNhbFVyaX06JHtjbHMuZWxlbWVudC5uYW1lfSI7CiAgICAgIHN0YXRlbWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgnYWxsb2NhdGlvbnNbIiRxdWFsaWZpZWROYW1lIl0gPSB0cnVlJykpOwogICAgfQoKICAgIExpc3Q8RmllbGQ+IGVtaXR0ZWRGaWVsZHMgPSBjbHMuZmllbGRzLndoZXJlKChmKSA9PiAhZi5pc0VsaWRlZCkudG9MaXN0KCk7CgogICAgLy8gSWYgdGhlcmUgYXJlIG1hbnkgcmVmZXJlbmNlcyB0byBgdGhpc2AsIGNhY2hlIGl0IGluIGEgbG9jYWwuCiAgICBpZiAoZW1pdHRlZEZpZWxkcy5sZW5ndGggKyAoY2xzLmhhc1J0aUZpZWxkID8gMSA6IDApID49IDQpIHsKICAgICAgLy8gUGFyYW1ldGVycyBhcmUgbmFtZWQgdDAsIHQxLCBldGMsIHNvICdfJyB3aWxsIG5vdCBjb25mbGljdC4gRm9yY2luZyAnXycKICAgICAgLy8gaW4gbWluaWZpZWQgbW9kZSB3b3JrcyBiZWNhdXNlIG5vIHBhcmFtZXRlciBvciBsb2NhbCBhbHNvIG1pbmlmaWVzIHRvCiAgICAgIC8vICdfJyAodGhlIG1pbmlmaWVyIGRvZXNuJ3Qga25vdyAnXycgaXMgYXZhaWxhYmxlKS4KICAgICAganMuTmFtZSB1bmRlcnNjb3JlID0gbmV3IFN0cmluZ0JhY2tlZE5hbWUoJ18nKTsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KCd2YXIgIyA9IHRoaXM7JywgdW5kZXJzY29yZSkpOwogICAgICB0aGlzUmVmID0gdW5kZXJzY29yZTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXNSZWYgPSBqcy5qcygndGhpcycpOwogICAgfQoKICAgIC8vIENoYWluIGFzc2lnbm1lbnRzIG9mIHRoZSBzYW1lIHZhbHVlLCBlLmcuIGB0aGlzLmIgPSB0aGlzLmEgPSBudWxsYC4KICAgIC8vIExpbWl0IGNoYWluIGxlbmd0aCBzbyB0aGF0IHRoZSBKYXZhU2NyaXB0IHBhcnNlciBoYXMgYm91bmRlZCByZWN1cnNpb24uCiAgICBjb25zdCBpbnQgbWF4Q2hhaW5MZW5ndGggPSAzMDsKICAgIGpzLkV4cHJlc3Npb24gYXNzaWdubWVudCA9IG51bGw7CiAgICBpbnQgY2hhaW5MZW5ndGggPSAwOwogICAgQ29uc3RhbnRWYWx1ZSBwcmV2aW91c0NvbnN0YW50ID0gbnVsbDsKICAgIHZvaWQgZmx1c2hBc3NpZ25tZW50KCkgewogICAgICBpZiAoYXNzaWdubWVudCAhPSBudWxsKSB7CiAgICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KCcjOycsIGFzc2lnbm1lbnQpKTsKICAgICAgICBhc3NpZ25tZW50ID0gbnVsbDsKICAgICAgICBjaGFpbkxlbmd0aCA9IDA7CiAgICAgICAgcHJldmlvdXNDb25zdGFudCA9IG51bGw7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKEZpZWxkIGZpZWxkIGluIGVtaXR0ZWRGaWVsZHMpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGZpZWxkLmluaXRpYWxpemVySW5BbGxvY2F0b3I7CiAgICAgIGlmIChjb25zdGFudCAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNvbnN0YW50ID09IHByZXZpb3VzQ29uc3RhbnQgJiYgY2hhaW5MZW5ndGggPCBtYXhDaGFpbkxlbmd0aCkgewogICAgICAgICAgYXNzaWdubWVudCA9IGpzLmpzKCcjLiMgPSAjJywgW3RoaXNSZWYsIGZpZWxkLm5hbWUsIGFzc2lnbm1lbnRdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmx1c2hBc3NpZ25tZW50KCk7CiAgICAgICAgICBhc3NpZ25tZW50ID0ganMuanMoJyMuIyA9ICMnLCBbCiAgICAgICAgICAgIHRoaXNSZWYsCiAgICAgICAgICAgIGZpZWxkLm5hbWUsCiAgICAgICAgICAgIF9jb25zdGFudEVtaXR0ZXIuZ2VuZXJhdGUoY29uc3RhbnQpLAogICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICAgICsrY2hhaW5MZW5ndGg7CiAgICAgICAgcHJldmlvdXNDb25zdGFudCA9IGNvbnN0YW50OwogICAgICB9IGVsc2UgewogICAgICAgIGZsdXNoQXNzaWdubWVudCgpOwogICAgICAgIGpzLlBhcmFtZXRlciBwYXJhbWV0ZXIgPSBuZXcganMuUGFyYW1ldGVyKCd0JHtwYXJhbWV0ZXJzLmxlbmd0aH0nKTsKICAgICAgICBwYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwogICAgICAgIHN0YXRlbWVudHMuYWRkKAogICAgICAgICAgICBqcy5qcy5zdGF0ZW1lbnQoJyMuIyA9ICMnLCBbdGhpc1JlZiwgZmllbGQubmFtZSwgcGFyYW1ldGVyLm5hbWVdKSk7CiAgICAgIH0KICAgIH0KICAgIGZsdXNoQXNzaWdubWVudCgpOwoKICAgIGlmIChjbHMuaGFzUnRpRmllbGQpIHsKICAgICAganMuUGFyYW1ldGVyIHBhcmFtZXRlciA9IG5ldyBqcy5QYXJhbWV0ZXIoJ3Qke3BhcmFtZXRlcnMubGVuZ3RofScpOwogICAgICBwYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoCiAgICAgICAgICAnIy4jID0gIycsIFt0aGlzUmVmLCBfbmFtZXIucnRpRmllbGRKc05hbWUsIHBhcmFtZXRlci5uYW1lXSkpOwogICAgfQoKICAgIHJldHVybiBqcy5qcygnZnVuY3Rpb24gIygjKSB7ICMgfScsIFtuYW1lLCBwYXJhbWV0ZXJzLCBzdGF0ZW1lbnRzXSk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIHByb3RvdHlwZS1zZWN0aW9uIG9mIHRoZSBmcmFnbWVudC4KICAvLy8KICAvLy8gVGhpcyBzZWN0aW9uIHVwZGF0ZXMgdGhlIHByb3RvdHlwZS1wcm9wZXJ0eSBvZiBhbGwgY29uc3RydWN0b3JzIGluIHRoZQogIC8vLyBnbG9iYWwgaG9sZGVycy4KICAvLy8KICAvLy8gW3NvZnREZWZlcnJlZF0gZGV0ZXJtaW5lIHdoZXRoZXIgcHJvdG90eXBlcyBmb3Igc29mdCBkZWZlcnJlZCBjbGFzc2VzIGFyZQogIC8vLyBnZW5lcmF0ZWQuCiAgLy8vCiAgLy8vIElmIFtpbmNsdWRlQ2xvc3VyZXNdIGlzIGB0cnVlYCBvbmx5IHByb3RvdHlwZXMgZm9yIGNsb3N1cmUgY2xhc3NlcyBhcmUKICAvLy8gZ2VuZXJhdGVkLCBpZiBbaW5jbHVkZUNsb3N1cmVzXSBpcyBgZmFsc2VgIG9ubHkgcHJvdG90eXBlcyBmb3Igbm9uLWNsb3N1cmUKICAvLy8gY2xhc3NlcyBhcmUgZ2VuZXJhdGVkLiBPdGhlcndpc2UgcHJvdG90eXBlcyBmb3IgYWxsIGNsYXNzZXMgYXJlIGdlbmVyYXRlZC4KICBqcy5TdGF0ZW1lbnQgZW1pdFByb3RvdHlwZXMoRnJhZ21lbnQgZnJhZ21lbnQsCiAgICAgIHtib29sIHNvZnREZWZlcnJlZCA9IGZhbHNlLCBib29sIGluY2x1ZGVDbG9zdXJlc30pIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBhc3NpZ25tZW50cyA9IGZyYWdtZW50LmxpYnJhcmllcwogICAgICAgIC5leHBhbmQoKExpYnJhcnkgbGlicmFyeSkgPT4gbGlicmFyeS5jbGFzc2VzKQogICAgICAgIC53aGVyZSgoQ2xhc3MgY2xzKSB7CiAgICAgIGlmIChpbmNsdWRlQ2xvc3VyZXMgIT0gbnVsbCkgewogICAgICAgIGlmIChjbHMuZWxlbWVudC5pc0Nsb3N1cmUgIT0gaW5jbHVkZUNsb3N1cmVzKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBjbHMuaXNTb2Z0RGVmZXJyZWQgPT0gc29mdERlZmVycmVkOwogICAgfSkubWFwKChDbGFzcyBjbHMpIHsKICAgICAgdmFyIHByb3RvID0ganMuanMuc3RhdGVtZW50KAogICAgICAgICAgJyMucHJvdG90eXBlID0gIzsnLCBbY2xhc3NSZWZlcmVuY2UoY2xzKSwgZW1pdFByb3RvdHlwZShjbHMpXSk7CiAgICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSBjbHMuZWxlbWVudDsKICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QoZWxlbWVudCwgcHJvdG8sIGxpYnJhcnk6IGVsZW1lbnQubGlicmFyeSk7CiAgICAgIHJldHVybiBwcm90bzsKICAgIH0pLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwoKICAgIHJldHVybiBuZXcganMuQmxvY2soYXNzaWdubWVudHMpOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBwcm90b3R5cGUgb2YgdGhlIGdpdmVuIGNsYXNzIFtjbHNdLgogIC8vLwogIC8vLyBUaGUgcHJvdG90eXBlIGlzIGdlbmVyYXRlZCBhcyBvYmplY3QgbGl0ZXJhbC4gSW5oZXJpdGFuY2UgaXMgaWdub3JlZC4KICAvLy8KICAvLy8gVGhlIHByb3RvdHlwZSBhbHNvIGluY2x1ZGVzIHRoZSBgaXMtcHJvcGVydHlgIHRoYXQgZXZlcnkgY2xhc3MgbXVzdCBoYXZlLgogIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBjb3VsZCBhdm9pZCB0aGF0IHByb3BlcnR5IGlmIHdlIGtuZXcgdGhhdCBpdCB3YXNuJ3QKICAvLyAgICBuZWVkZWQuCiAganMuRXhwcmVzc2lvbiBlbWl0UHJvdG90eXBlKENsYXNzIGNscykgewogICAgSXRlcmFibGU8TWV0aG9kPiBtZXRob2RzID0gY2xzLm1ldGhvZHM7CiAgICBJdGVyYWJsZTxNZXRob2Q+IGNoZWNrZWRTZXR0ZXJzID0gY2xzLmNoZWNrZWRTZXR0ZXJzOwogICAgSXRlcmFibGU8TWV0aG9kPiBpc0NoZWNrcyA9IGNscy5pc0NoZWNrczsKICAgIEl0ZXJhYmxlPE1ldGhvZD4gY2FsbFN0dWJzID0gY2xzLmNhbGxTdHViczsKICAgIEl0ZXJhYmxlPE1ldGhvZD4gbm9TdWNoTWV0aG9kU3R1YnMgPSBjbHMubm9TdWNoTWV0aG9kU3R1YnM7CiAgICBJdGVyYWJsZTxNZXRob2Q+IGdldHRlcnNTZXR0ZXJzID0gZ2VuZXJhdGVHZXR0ZXJzU2V0dGVycyhjbHMpOwogICAgSXRlcmFibGU8TWV0aG9kPiBhbGxNZXRob2RzID0gWwogICAgICBtZXRob2RzLAogICAgICBjaGVja2VkU2V0dGVycywKICAgICAgaXNDaGVja3MsCiAgICAgIGNhbGxTdHVicywKICAgICAgbm9TdWNoTWV0aG9kU3R1YnMsCiAgICAgIGdldHRlcnNTZXR0ZXJzCiAgICBdLmV4cGFuZCgoeCkgPT4geCk7CgogICAgTGlzdDxqcy5Qcm9wZXJ0eT4gcHJvcGVydGllcyA9IFtdOwoKICAgIGlmIChjbHMuc3VwZXJjbGFzcyA9PSBudWxsKSB7CiAgICAgIC8vIFRPRE8oc3JhKTogV2hhdCBpcyB0aGlzIGRvaW5nPyBEb2N1bWVudCBvciByZW1vdmUuCiAgICAgIHByb3BlcnRpZXMKICAgICAgICAgIC5hZGQoanMuUHJvcGVydHkoanMuc3RyaW5nKCJjb25zdHJ1Y3RvciIpLCBjbGFzc1JlZmVyZW5jZShjbHMpKSk7CiAgICAgIHByb3BlcnRpZXMuYWRkKGpzLlByb3BlcnR5KF9uYW1lci5vcGVyYXRvcklzKGNscy5lbGVtZW50KSwganMubnVtYmVyKDEpKSk7CiAgICB9CgogICAgYWxsTWV0aG9kcy5mb3JFYWNoKChNZXRob2QgbWV0aG9kKSB7CiAgICAgIGVtaXRJbnN0YW5jZU1ldGhvZChtZXRob2QpCiAgICAgICAgICAuZm9yRWFjaCgoanMuRXhwcmVzc2lvbiBuYW1lLCBqcy5FeHByZXNzaW9uIGNvZGUpIHsKICAgICAgICB2YXIgcHJvcCA9IGpzLlByb3BlcnR5KG5hbWUsIGNvZGUpOwogICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KG1ldGhvZC5lbGVtZW50LCBwcm9wKTsKICAgICAgICBwcm9wZXJ0aWVzLmFkZChwcm9wKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICBpZiAoY2xzLmlzQ2xvc3VyZUJhc2VDbGFzcykgewogICAgICAvLyBDbG9zdXJlcyBleHRlbmQgYSBjb21tb24gYmFzZSBjbGFzcywgc28gd2UgY2FuIHB1dCBwcm9wZXJ0aWVzIG9uIHRoZQogICAgICAvLyBwcm90b3R5cGUgZm9yIGNvbW1vbiB2YWx1ZXMuCgogICAgICAvLyBDbG9zdXJlcyB0YWtpbmcgZXhhY3RseSBvbmUgYXJndW1lbnQgYXJlIGNvbW1vbi4KICAgICAgcHJvcGVydGllcy5hZGQoanMuUHJvcGVydHkoanMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLmNhbGxDYXRjaEFsbE5hbWUpLAogICAgICAgICAganMucXVvdGVOYW1lKGNhbGwxTmFtZSkpKTsKICAgICAgcHJvcGVydGllcy5hZGQoanMuUHJvcGVydHkoCiAgICAgICAgICBqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMucmVxdWlyZWRQYXJhbWV0ZXJGaWVsZCksIGpzLm51bWJlcigxKSkpOwoKICAgICAgLy8gTW9zdCBjbG9zdXJlcyBoYXZlIG5vIG9wdGlvbmFsIGFyZ3VtZW50cy4KICAgICAgcHJvcGVydGllcy5hZGQoanMuUHJvcGVydHkoCiAgICAgICAgICBqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMuZGVmYXVsdFZhbHVlc0ZpZWxkKSwKICAgICAgICAgIG5ldyBqcy5MaXRlcmFsTnVsbCgpKSk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBqcy5PYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKTsKICB9CgogIC8vLyBHZW5lcmF0ZXMgYSBnZXR0ZXIgZm9yIHRoZSBnaXZlbiBbZmllbGRdLgogIE1ldGhvZCBnZW5lcmF0ZUdldHRlcihGaWVsZCBmaWVsZCkgewogICAgYXNzZXJ0KGZpZWxkLm5lZWRzR2V0dGVyKTsKCiAgICBqcy5FeHByZXNzaW9uIGNvZGU7CiAgICBpZiAoZmllbGQuaXNFbGlkZWQpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudFZhbHVlID0gZmllbGQuY29uc3RhbnRWYWx1ZTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgY29uc3RhbnRWYWx1ZSAhPSBudWxsLCAiTm8gY29uc3RhbnQgdmFsdWUgZm9yIGVsaWRlZCBmaWVsZDogJGZpZWxkIik7CiAgICAgIGlmIChjb25zdGFudFZhbHVlID09IG51bGwpIHsKICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBvY2N1ciBiZWNhdXNlIGNvZGVnZW4gbWVtYmVyIHVzYWdlIGlzIG5vdyBsaW1pdGVkCiAgICAgICAgLy8gYnkgY2xvc2VkIHdvcmxkIG1lbWJlciB1c2FnZS4gSW4gdGhlIGNhc2Ugd2UndmUgbWlzc2VkIGEgc3BvdCB3ZQogICAgICAgIC8vIGNhdXRpb3VzbHkgZ2VuZXJhdGUgYSBudWxsIGNvbnN0YW50LgogICAgICAgIGNvbnN0YW50VmFsdWUgPSBuZXcgTnVsbENvbnN0YW50VmFsdWUoKTsKICAgICAgfQogICAgICBjb2RlID0ganMuanMoCiAgICAgICAgICAiZnVuY3Rpb24oKSB7IHJldHVybiAjOyB9IiwgZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZShjb25zdGFudFZhbHVlKSk7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgdGVtcGxhdGU7CiAgICAgIGlmIChmaWVsZC5uZWVkc0ludGVyY2VwdGVkR2V0dGVyT25SZWNlaXZlcikgewogICAgICAgIHRlbXBsYXRlID0gImZ1bmN0aW9uKHJlY2VpdmVyKSB7IHJldHVybiByZWNlaXZlclsjXTsgfSI7CiAgICAgIH0gZWxzZSBpZiAoZmllbGQubmVlZHNJbnRlcmNlcHRlZEdldHRlck9uVGhpcykgewogICAgICAgIHRlbXBsYXRlID0gImZ1bmN0aW9uKHJlY2VpdmVyKSB7IHJldHVybiB0aGlzWyNdOyB9IjsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoIWZpZWxkLm5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXIpOwogICAgICAgIHRlbXBsYXRlID0gImZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpc1sjXTsgfSI7CiAgICAgIH0KICAgICAganMuRXhwcmVzc2lvbiBmaWVsZE5hbWUgPSBqcy5xdW90ZU5hbWUoZmllbGQubmFtZSk7CiAgICAgIGNvZGUgPSBqcy5qcyh0ZW1wbGF0ZSwgZmllbGROYW1lKTsKICAgIH0KICAgIGpzLk5hbWUgZ2V0dGVyTmFtZSA9IF9uYW1lci5kZXJpdmVHZXR0ZXJOYW1lKGZpZWxkLmFjY2Vzc29yTmFtZSk7CiAgICByZXR1cm4gbmV3IFN0dWJNZXRob2QoZ2V0dGVyTmFtZSwgY29kZSk7CiAgfQoKICAvLy8gR2VuZXJhdGVzIGEgc2V0dGVyIGZvciB0aGUgZ2l2ZW4gW2ZpZWxkXS4KICBNZXRob2QgZ2VuZXJhdGVTZXR0ZXIoRmllbGQgZmllbGQpIHsKICAgIGFzc2VydChmaWVsZC5uZWVkc1VuY2hlY2tlZFNldHRlcik7CgogICAgU3RyaW5nIHRlbXBsYXRlOwogICAganMuRXhwcmVzc2lvbiBjb2RlOwogICAgaWYgKGZpZWxkLmlzRWxpZGVkKSB7CiAgICAgIGNvZGUgPSBqcy5qcygiZnVuY3Rpb24oKSB7IH0iKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChmaWVsZC5uZWVkc0ludGVyY2VwdGVkU2V0dGVyT25SZWNlaXZlcikgewogICAgICAgIHRlbXBsYXRlID0gImZ1bmN0aW9uKHJlY2VpdmVyLCB2YWwpIHsgcmV0dXJuIHJlY2VpdmVyWyNdID0gdmFsOyB9IjsKICAgICAgfSBlbHNlIGlmIChmaWVsZC5uZWVkc0ludGVyY2VwdGVkU2V0dGVyT25UaGlzKSB7CiAgICAgICAgdGVtcGxhdGUgPSAiZnVuY3Rpb24ocmVjZWl2ZXIsIHZhbCkgeyByZXR1cm4gdGhpc1sjXSA9IHZhbDsgfSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KCFmaWVsZC5uZWVkc0ludGVyY2VwdGVkU2V0dGVyKTsKICAgICAgICB0ZW1wbGF0ZSA9ICJmdW5jdGlvbih2YWwpIHsgcmV0dXJuIHRoaXNbI10gPSB2YWw7IH0iOwogICAgICB9CiAgICAgIGpzLkV4cHJlc3Npb24gZmllbGROYW1lID0ganMucXVvdGVOYW1lKGZpZWxkLm5hbWUpOwogICAgICBjb2RlID0ganMuanModGVtcGxhdGUsIGZpZWxkTmFtZSk7CiAgICB9CgogICAganMuTmFtZSBzZXR0ZXJOYW1lID0gX25hbWVyLmRlcml2ZVNldHRlck5hbWUoZmllbGQuYWNjZXNzb3JOYW1lKTsKICAgIHJldHVybiBuZXcgU3R1Yk1ldGhvZChzZXR0ZXJOYW1lLCBjb2RlKTsKICB9CgogIC8vLyBHZW5lcmF0ZXMgYWxsIGdldHRlcnMgYW5kIHNldHRlcnMgdGhlIGdpdmVuIGNsYXNzIFtjbHNdIG5lZWRzLgogIEl0ZXJhYmxlPE1ldGhvZD4gZ2VuZXJhdGVHZXR0ZXJzU2V0dGVycyhDbGFzcyBjbHMpIHsKICAgIEl0ZXJhYmxlPE1ldGhvZD4gZ2V0dGVycyA9IGNscy5maWVsZHMKICAgICAgICAud2hlcmUoKEZpZWxkIGZpZWxkKSA9PiBmaWVsZC5uZWVkc0dldHRlcikKICAgICAgICAubWFwKGdlbmVyYXRlR2V0dGVyKTsKCiAgICBJdGVyYWJsZTxNZXRob2Q+IHNldHRlcnMgPSBjbHMuZmllbGRzCiAgICAgICAgLndoZXJlKChGaWVsZCBmaWVsZCkgPT4gZmllbGQubmVlZHNVbmNoZWNrZWRTZXR0ZXIpCiAgICAgICAgLm1hcChnZW5lcmF0ZVNldHRlcik7CgogICAgcmV0dXJuIFtnZXR0ZXJzLCBzZXR0ZXJzXS5leHBhbmQoKHgpID0+IHgpOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBnaXZlbiBpbnN0YW5jZSBbbWV0aG9kXS4KICAvLy8KICAvLy8gVGhlIGdpdmVuIG1ldGhvZCBtYXkgYmUgYSBzdHViLW1ldGhvZCAoZm9yIGV4YW1wbGUgZm9yIGlzLWNoZWNrcykuCiAgLy8vCiAgLy8vIElmIGl0IGlzIGEgRGFydC1tZXRob2QsIGFsbCBuZWNlc3Nhcnkgc3R1Yi1tZXRob2RzIGFyZSBlbWl0dGVkLCB0b28uIEluCiAgLy8vIHRoYXQgY2FzZSB0aGUgcmV0dXJuZWQgbWFwIGNvbnRhaW5zIG1vcmUgdGhhbiBqdXN0IG9uZSBlbnRyeS4KICAvLy8KICAvLy8gSWYgdGhlIG1ldGhvZCBpcyBhIGNsb3N1cmUgY2FsbC1tZXRob2QsIGFsc28gcmV0dXJucyB0aGUgbmVjZXNzYXJ5CiAgLy8vIHByb3BlcnRpZXMgaW4gY2FzZSB0aGUgY2xvc3VyZSBjYW4gYmUgYXBwbGllZC4KICBNYXA8anMuRXhwcmVzc2lvbiwganMuRXhwcmVzc2lvbj4gZW1pdEluc3RhbmNlTWV0aG9kKE1ldGhvZCBtZXRob2QpIHsKICAgIHZhciBwcm9wZXJ0aWVzID0gPGpzLkV4cHJlc3Npb24sIGpzLkV4cHJlc3Npb24+e307CgogICAgcHJvcGVydGllc1ttZXRob2QubmFtZV0gPSBtZXRob2QuY29kZTsKICAgIGlmIChtZXRob2QgaXMgSW5zdGFuY2VNZXRob2QpIHsKICAgICAgZm9yIChQYXJhbWV0ZXJTdHViTWV0aG9kIHN0dWJNZXRob2QgaW4gbWV0aG9kLnBhcmFtZXRlclN0dWJzKSB7CiAgICAgICAgcHJvcGVydGllc1tzdHViTWV0aG9kLm5hbWVdID0gc3R1Yk1ldGhvZC5jb2RlOwogICAgICB9CgogICAgICBpZiAobWV0aG9kLmlzQ2xvc3VyZUNhbGxNZXRob2QgJiYgbWV0aG9kLmNhbkJlQXBwbGllZCkgewogICAgICAgIC8vIFRPRE8oc3JhKTogV2Ugc2hvdWxkIGFsc28gYWRkIHRoZXNlIHByb3BlcnRpZXMgZm9yIHRoZSB1c2VyLWRlZmluZWQKICAgICAgICAvLyBgY2FsbGAgbWV0aG9kIG9uIGNsYXNzZXMuIEZ1bmN0aW9uLmFwcGx5IGlzIGN1cnJlbnRseSBicm9rZW4gZm9yCiAgICAgICAgLy8gY29tcGxleCBjYXNlcy4gW2ZvcmNlQWRkXSBtaWdodCBiZSB0cnVlIHdoZW4gdGhpcyBpcyBmaXhlZC4KICAgICAgICBib29sIGZvcmNlQWRkID0gIW1ldGhvZC5pc0Nsb3N1cmVDYWxsTWV0aG9kOwoKICAgICAgICAvLyBDb21tb24gY2FzZSBvZiAiY2FsbCoiOiAiY2FsbCQxIiBpcyBzdG9yZWQgb24gdGhlIENsb3N1cmUgY2xhc3MuCiAgICAgICAgaWYgKG1ldGhvZC5hcHBseUluZGV4ICE9IDAgfHwKICAgICAgICAgICAgbWV0aG9kLnBhcmFtZXRlclN0dWJzLmlzTm90RW1wdHkgfHwKICAgICAgICAgICAgbWV0aG9kLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgIT0gMSB8fAogICAgICAgICAgICBmb3JjZUFkZCkgewogICAgICAgICAganMuTmFtZSBhcHBseU5hbWUgPSBtZXRob2QuYXBwbHlJbmRleCA9PSAwCiAgICAgICAgICAgICAgPyBtZXRob2QubmFtZQogICAgICAgICAgICAgIDogbWV0aG9kLnBhcmFtZXRlclN0dWJzW21ldGhvZC5hcHBseUluZGV4IC0gMV0ubmFtZTsKICAgICAgICAgIHByb3BlcnRpZXNbanMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLmNhbGxDYXRjaEFsbE5hbWUpXSA9CiAgICAgICAgICAgICAganMucXVvdGVOYW1lKGFwcGx5TmFtZSk7CiAgICAgICAgfQogICAgICAgIC8vIENvbW1vbiBjYXNlIG9mICcxJyBpcyBzdG9yZWQgb24gdGhlIENsb3N1cmUgY2xhc3MuCiAgICAgICAgaWYgKG1ldGhvZC5yZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9IDEgfHwgZm9yY2VBZGQpIHsKICAgICAgICAgIHByb3BlcnRpZXNbanMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLnJlcXVpcmVkUGFyYW1ldGVyRmllbGQpXSA9CiAgICAgICAgICAgICAganMubnVtYmVyKG1ldGhvZC5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgICAgICB9CgogICAgICAgIGpzLkV4cHJlc3Npb24gZGVmYXVsdFZhbHVlcyA9CiAgICAgICAgICAgIF9lbmNvZGVPcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMobWV0aG9kKTsKICAgICAgICAvLyBEZWZhdWx0IHZhbHVlcyBwcm9wZXJ0eSBvZiBgbnVsbGAgaXMgc3RvcmVkIG9uIHRoZSBjb21tb24gSlMKICAgICAgICAvLyBzdXBlcmNsYXNzLgogICAgICAgIGlmIChkZWZhdWx0VmFsdWVzIGlzISBqcy5MaXRlcmFsTnVsbCB8fCBmb3JjZUFkZCkgewogICAgICAgICAgcHJvcGVydGllc1tqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMuZGVmYXVsdFZhbHVlc0ZpZWxkKV0gPQogICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZXM7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHByb3BlcnRpZXM7CiAgfQoKICAvLy8gRW1pdHMgdGhlIGluaGVyaXRhbmNlIGJsb2NrIG9mIHRoZSBmcmFnbWVudC4KICAvLy8KICAvLy8gSW4gdGhpcyBzZWN0aW9uIHByb3RvdHlwZSBjaGFpbnMgYXJlIHVwZGF0ZWQgYW5kIG1peGluIGZ1bmN0aW9ucyBhcmUKICAvLy8gY29waWVkLgogIGpzLlN0YXRlbWVudCBlbWl0SW5oZXJpdGFuY2UoRnJhZ21lbnQgZnJhZ21lbnQsIHtib29sIHNvZnREZWZlcnJlZCA9IGZhbHNlfSkgewogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IGluaGVyaXRDYWxscyA9IFtdOwogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IG1peGluQ2FsbHMgPSBbXTsKICAgIC8vIGxvY2FsIGNhY2hlcyBvZiBmdW5jdGlvbnMgdG8gYWxsb3cgbWluaWZhY3Rpb24gb2YgZnVuY3Rpb24gbmFtZSBpbiBjYWxsLgogICAgTG9jYWxBbGlhc2VzIGxvY2FscyA9IExvY2FsQWxpYXNlcygpOwoKICAgIFNldDxDbGFzcz4gY2xhc3Nlc0luRnJhZ21lbnQgPSBTZXQoKTsKICAgIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGZyYWdtZW50LmxpYnJhcmllcykgewogICAgICBjbGFzc2VzSW5GcmFnbWVudC5hZGRBbGwobGlicmFyeS5jbGFzc2VzCiAgICAgICAgICAud2hlcmUoKChDbGFzcyBjbHMpID0+IGNscy5pc1NvZnREZWZlcnJlZCA9PSBzb2Z0RGVmZXJyZWQpKSk7CiAgICB9CgogICAgTWFwPENsYXNzLCBMaXN0PENsYXNzPj4gc3ViY2xhc3NlcyA9IHt9OwogICAgU2V0PENsYXNzPiBzZWVuID0gU2V0KCk7CgogICAgdm9pZCBjb2xsZWN0KGNscykgewogICAgICBpZiAoY2xzID09IG51bGwgfHwgc2Vlbi5jb250YWlucyhjbHMpKSByZXR1cm47CgogICAgICBDbGFzcyBzdXBlcmNsYXNzID0gY2xzLnN1cGVyY2xhc3M7CiAgICAgIGlmIChjbGFzc2VzSW5GcmFnbWVudC5jb250YWlucyhzdXBlcmNsYXNzKSkgewogICAgICAgIGNvbGxlY3Qoc3VwZXJjbGFzcyk7CiAgICAgIH0KCiAgICAgIHN1YmNsYXNzZXMucHV0SWZBYnNlbnQoc3VwZXJjbGFzcywgKCkgPT4gPENsYXNzPltdKS5hZGQoY2xzKTsKCiAgICAgIHNlZW4uYWRkKGNscyk7CiAgICB9CgogICAgZm9yIChMaWJyYXJ5IGxpYnJhcnkgaW4gZnJhZ21lbnQubGlicmFyaWVzKSB7CiAgICAgIGZvciAoQ2xhc3MgY2xzIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIGlmIChjbHMuaXNTb2Z0RGVmZXJyZWQgIT0gc29mdERlZmVycmVkKSBjb250aW51ZTsKICAgICAgICBjb2xsZWN0KGNscyk7CiAgICAgICAgaWYgKGNscy5taXhpbkNsYXNzICE9IG51bGwpIHsKICAgICAgICAgIGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgPSBqcy5qcy5zdGF0ZW1lbnQoJyMoIywgIyknLCBbCiAgICAgICAgICAgIGxvY2Fscy5maW5kKCdfbWl4aW4nLCAnaHVua0hlbHBlcnMubWl4aW4nKSwKICAgICAgICAgICAgY2xhc3NSZWZlcmVuY2UoY2xzKSwKICAgICAgICAgICAgY2xhc3NSZWZlcmVuY2UoY2xzLm1peGluQ2xhc3MpLAogICAgICAgICAgXSk7CiAgICAgICAgICByZWdpc3RlckVudGl0eUFzdChjbHMuZWxlbWVudCwgc3RhdGVtZW50LCBsaWJyYXJ5OiBsaWJyYXJ5LmVsZW1lbnQpOwogICAgICAgICAgbWl4aW5DYWxscy5hZGQoc3RhdGVtZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKENsYXNzIHN1cGVyY2xhc3MgaW4gc3ViY2xhc3Nlcy5rZXlzKSB7CiAgICAgIExpc3Q8Q2xhc3M+IGxpc3QgPSBzdWJjbGFzc2VzW3N1cGVyY2xhc3NdOwogICAgICBqcy5FeHByZXNzaW9uIHN1cGVyY2xhc3NSZWZlcmVuY2UgPSAoc3VwZXJjbGFzcyA9PSBudWxsKQogICAgICAgICAgPyBuZXcganMuTGl0ZXJhbE51bGwoKQogICAgICAgICAgOiBjbGFzc1JlZmVyZW5jZShzdXBlcmNsYXNzKTsKICAgICAgaWYgKGxpc3QubGVuZ3RoID09IDEpIHsKICAgICAgICBDbGFzcyBjbHMgPSBsaXN0LnNpbmdsZTsKICAgICAgICB2YXIgc3RhdGVtZW50ID0ganMuanMuc3RhdGVtZW50KCcjKCMsICMpJywgWwogICAgICAgICAgbG9jYWxzLmZpbmQoJ19pbmhlcml0JywgJ2h1bmtIZWxwZXJzLmluaGVyaXQnKSwKICAgICAgICAgIGNsYXNzUmVmZXJlbmNlKGNscyksCiAgICAgICAgICBzdXBlcmNsYXNzUmVmZXJlbmNlCiAgICAgICAgXSk7CiAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QoY2xzLmVsZW1lbnQsIHN0YXRlbWVudCwgbGlicmFyeTogY2xzLmVsZW1lbnQubGlicmFyeSk7CiAgICAgICAgaW5oZXJpdENhbGxzLmFkZChzdGF0ZW1lbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gbGlzdEVsZW1lbnRzID0gW107CiAgICAgICAgLy8gU2luY2UgaW5oZXJpdE1hbnkgc2hhcmVzIHRoZSBzdXBlcmNsYXNzIHJlZmVyZW5jZSwgd2UgYXR0cmlidXRlIGl0CiAgICAgICAgLy8gb25seSB0byB0aGUgZmlyc3Qgc3ViY2xhc3MuCiAgICAgICAgQ2xhc3NFbnRpdHkgZmlyc3RDbGFzcyA9IGxpc3QuZmlyc3QuZWxlbWVudDsKICAgICAgICByZWdpc3RlckVudGl0eUFzdChmaXJzdENsYXNzLCBzdXBlcmNsYXNzUmVmZXJlbmNlLAogICAgICAgICAgICBsaWJyYXJ5OiBmaXJzdENsYXNzLmxpYnJhcnkpOwogICAgICAgIGZvciAoQ2xhc3MgY2xzIGluIGxpc3QpIHsKICAgICAgICAgIGpzLkV4cHJlc3Npb24gcmVmZXJlbmNlID0gY2xhc3NSZWZlcmVuY2UoY2xzKTsKICAgICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KGNscy5lbGVtZW50LCByZWZlcmVuY2UsCiAgICAgICAgICAgICAgbGlicmFyeTogY2xzLmVsZW1lbnQubGlicmFyeSk7CiAgICAgICAgICBsaXN0RWxlbWVudHMuYWRkKHJlZmVyZW5jZSk7CiAgICAgICAgfQogICAgICAgIGluaGVyaXRDYWxscy5hZGQoanMuanMuc3RhdGVtZW50KCcjKCMsICMpJywgWwogICAgICAgICAgbG9jYWxzLmZpbmQoJ19pbmhlcml0TWFueScsICdodW5rSGVscGVycy5pbmhlcml0TWFueScpLAogICAgICAgICAgc3VwZXJjbGFzc1JlZmVyZW5jZSwKICAgICAgICAgIGpzLkFycmF5SW5pdGlhbGl6ZXIobGlzdEVsZW1lbnRzKQogICAgICAgIF0pKTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gW107CiAgICBpZiAobG9jYWxzLmlzTm90RW1wdHkpIHsKICAgICAgc3RhdGVtZW50cy5hZGQobG9jYWxzLnRvU3RhdGVtZW50KCkpOwogICAgfQogICAgc3RhdGVtZW50cy5hZGRBbGwoaW5oZXJpdENhbGxzKTsKICAgIHN0YXRlbWVudHMuYWRkQWxsKG1peGluQ2FsbHMpOwogICAgcmV0dXJuIHdyYXBQaGFzZSgnaW5oZXJpdGFuY2UnLCBzdGF0ZW1lbnRzKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgc2V0dXAgb2YgbWV0aG9kIGFsaWFzZXMuCiAgLy8vCiAgLy8vIFRoaXMgc3RlcCBjb25zaXN0cyBvZiBzaW1wbHkgY29weWluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB0byB0aGVpcgogIC8vLyBhbGlhc2VkIG5hbWVzIHNvIHRoZXkgcG9pbnQgdG8gdGhlIHNhbWUgZnVuY3Rpb24uCiAganMuU3RhdGVtZW50IGVtaXRJbnN0YW5jZU1ldGhvZEFsaWFzZXMoRnJhZ21lbnQgZnJhZ21lbnQsCiAgICAgIHtib29sIHNvZnREZWZlcnJlZCA9IGZhbHNlfSkgewogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IGFzc2lnbm1lbnRzID0gW107CgogICAgZm9yIChMaWJyYXJ5IGxpYnJhcnkgaW4gZnJhZ21lbnQubGlicmFyaWVzKSB7CiAgICAgIGZvciAoQ2xhc3MgY2xzIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIGlmIChjbHMuaXNTb2Z0RGVmZXJyZWQgIT0gc29mdERlZmVycmVkKSBjb250aW51ZTsKICAgICAgICBib29sIGZpcnN0QWxpYXMgPSB0cnVlOwogICAgICAgIGZvciAoSW5zdGFuY2VNZXRob2QgbWV0aG9kIGluIGNscy5tZXRob2RzKSB7CiAgICAgICAgICBpZiAobWV0aG9kLmFsaWFzTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgIGlmIChmaXJzdEFsaWFzKSB7CiAgICAgICAgICAgICAgZmlyc3RBbGlhcyA9IGZhbHNlOwogICAgICAgICAgICAgIGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgPSBqcy5qcy5zdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzLmlzRW1wdHkKICAgICAgICAgICAgICAgICAgICAgID8gJ3ZhciBfID0gIy5wcm90b3R5cGU7JwogICAgICAgICAgICAgICAgICAgICAgOiAnXyA9ICMucHJvdG90eXBlJywKICAgICAgICAgICAgICAgICAgY2xhc3NSZWZlcmVuY2UoY2xzKSk7CiAgICAgICAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QobWV0aG9kLmVsZW1lbnQsIHN0YXRlbWVudCk7CiAgICAgICAgICAgICAgYXNzaWdubWVudHMuYWRkKHN0YXRlbWVudCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAganMuU3RhdGVtZW50IHN0YXRlbWVudCA9IGpzLmpzLnN0YXRlbWVudCgnXy4jID0gXy4jJywKICAgICAgICAgICAgICAgIFtqcy5xdW90ZU5hbWUobWV0aG9kLmFsaWFzTmFtZSksIGpzLnF1b3RlTmFtZShtZXRob2QubmFtZSldKTsKICAgICAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QobWV0aG9kLmVsZW1lbnQsIHN0YXRlbWVudCk7CiAgICAgICAgICAgIGFzc2lnbm1lbnRzLmFkZChzdGF0ZW1lbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHdyYXBQaGFzZSgnYWxpYXNlcycsIGFzc2lnbm1lbnRzKTsKICB9CgogIC8vLyBFbmNvZGVzIHRoZSBvcHRpb25hbCBkZWZhdWx0IHZhbHVlcyBzbyB0aGF0IHRoZSBydW50aW1lIEZ1bmN0aW9uLmFwcGx5CiAgLy8vIGNhbiB1c2UgdGhlbS4KICBqcy5FeHByZXNzaW9uIF9lbmNvZGVPcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMoRGFydE1ldGhvZCBtZXRob2QpIHsKICAgIC8vIFRPRE8oaGVyaHV0KTogUmVwbGFjZSBbanMuTGl0ZXJhbE51bGxdIHdpdGggW2pzLkFycmF5SG9sZV0uCiAgICBpZiAobWV0aG9kLm9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyBpcyBMaXN0KSB7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZGVmYXVsdFZhbHVlcyA9IG1ldGhvZC5vcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM7CiAgICAgIGlmIChkZWZhdWx0VmFsdWVzLmlzRW1wdHkpIHsKICAgICAgICByZXR1cm4gbmV3IGpzLkxpdGVyYWxOdWxsKCk7CiAgICAgIH0KICAgICAgSXRlcmFibGU8anMuRXhwcmVzc2lvbj4gZWxlbWVudHMgPQogICAgICAgICAgZGVmYXVsdFZhbHVlcy5tYXAoZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZSk7CiAgICAgIHJldHVybiBqcy5qcygnZnVuY3Rpb24oKSB7IHJldHVybiAjOyB9JywKICAgICAgICAgIG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGVsZW1lbnRzLnRvTGlzdCgpKSk7CiAgICB9IGVsc2UgewogICAgICBNYXA8U3RyaW5nLCBDb25zdGFudFZhbHVlPiBkZWZhdWx0VmFsdWVzID0KICAgICAgICAgIG1ldGhvZC5vcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM7CiAgICAgIExpc3Q8anMuUHJvcGVydHk+IHByb3BlcnRpZXMgPSBbXTsKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gZGVmYXVsdFZhbHVlcy5rZXlzLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICAvLyBTb3J0IHRoZSBuYW1lcyB0aGUgc2FtZSB3YXkgd2Ugc29ydCB0aGVtIGZvciB0aGUgbmFtZWQtYXJndW1lbnQgY2FsbGluZwogICAgICAvLyBjb252ZW50aW9uLgogICAgICBuYW1lcy5zb3J0KCk7CgogICAgICBmb3IgKFN0cmluZyBuYW1lIGluIG5hbWVzKSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGRlZmF1bHRWYWx1ZXNbbmFtZV07CiAgICAgICAgcHJvcGVydGllcy5hZGQoCiAgICAgICAgICAgIG5ldyBqcy5Qcm9wZXJ0eShqcy5zdHJpbmcobmFtZSksIGdlbmVyYXRlQ29uc3RhbnRSZWZlcmVuY2UodmFsdWUpKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGpzLmpzKAogICAgICAgICAgJ2Z1bmN0aW9uKCkgeyByZXR1cm4gIzsgfScsIG5ldyBqcy5PYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKSk7CiAgICB9CiAgfQoKICAvLy8gV3JhcHMgdGhlIHN0YXRlbWVudCBpbiBhIG5hbWVkIGZ1bmN0aW9uIHRvIHRoYXQgaXQgc2hvd3MgdXAgYXMgYSB1bml0IGluCiAgLy8vIHByb2ZpbGVzLgogIC8vIFRPRE8oc3JhKTogU2hvdWxkIHRoaXMgYmUgY29uZGl0aW9uYWw/CiAganMuU3RhdGVtZW50IHdyYXBQaGFzZShTdHJpbmcgbmFtZSwgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMpIHsKICAgIGpzLkJsb2NrIGJsb2NrID0gbmV3IGpzLkJsb2NrKHN0YXRlbWVudHMpOwogICAgaWYgKHN0YXRlbWVudHMuaXNFbXB0eSkgcmV0dXJuIGJsb2NrOwogICAgcmV0dXJuIGpzLmpzLnN0YXRlbWVudCgnKGZ1bmN0aW9uICMoKXsjfSkoKTsnLCBbbmFtZSwgYmxvY2tdKTsKICB9CgogIGJvb2wgaXNFbXB0eVN0YXRlbWVudChqcy5TdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBpZiAoc3RhdGVtZW50IGlzIGpzLkJsb2NrKSB7CiAgICAgIHJldHVybiBzdGF0ZW1lbnQuc3RhdGVtZW50cy5pc0VtcHR5OwogICAgfQogICAgcmV0dXJuIHN0YXRlbWVudCBpcyBqcy5FbXB0eVN0YXRlbWVudDsKICB9CgogIC8vLyBFbWl0cyB0aGUgc2VjdGlvbiB0aGF0IGluc3RhbGxzIHRlYXItb2ZmIGdldHRlcnMuCiAganMuU3RhdGVtZW50IGVtaXRJbnN0YWxsVGVhck9mZnMoRnJhZ21lbnQgZnJhZ21lbnQsCiAgICAgIHtib29sIHNvZnREZWZlcnJlZCA9IGZhbHNlfSkgewogICAgTG9jYWxBbGlhc2VzIGxvY2FscyA9IExvY2FsQWxpYXNlcygpOwoKICAgIC8vLyBFbWl0cyB0aGUgc3RhdGVtZW50IHRoYXQgaW5zdGFsbHMgYSB0ZWFyIG9mZiBmb3IgYSBtZXRob2QuCiAgICAvLy8KICAgIC8vLyBUZWFyLW9mZnMgbWlnaHQgYmUgcGFzc2VkIHRvIGBGdW5jdGlvbi5hcHBseWAgd2hpY2ggbWVhbnMgdGhhdCBhbGwKICAgIC8vLyBjYWxsaW5nLWNvbnZlbnRpb25zICh3aXRoIG9yIHdpdGhvdXQgb3B0aW9uYWwgcG9zaXRpb25hbC9uYW1lZAogICAgLy8vIGFyZ3VtZW50cykgYXJlIHBvc3NpYmxlLiBBcyBzdWNoLCB0aGUgdGVhci1vZmYgbmVlZHMgZW5vdWdoIGluZm9ybWF0aW9uCiAgICAvLy8gdG8gZmlsbCBpbiBtaXNzaW5nIHBhcmFtZXRlcnMuCiAgICBqcy5TdGF0ZW1lbnQgZW1pdEluc3RhbGxUZWFyT2ZmKAogICAgICAgIGpzLkV4cHJlc3Npb24gY29udGFpbmVyLCBEYXJ0TWV0aG9kIG1ldGhvZCkgewogICAgICBMaXN0PGpzLk5hbWU+IGNhbGxOYW1lcyA9IFtdOwogICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGZ1bnNPck5hbWVzID0gW107CgogICAgICAvLy8gQWRkcyB0aGUgc3R1Yi1tZXRob2QncyBjb2RlIG9yIG5hbWUgdG8gdGhlIFtmdW5zT3JOYW1lc10gYXJyYXkuCiAgICAgIC8vLwogICAgICAvLy8gU3RhdGljIG1ldGhvZHMgZG9uJ3QgbmVlZCBzdHViLW1ldGhvZHMgZXhjZXB0IGZvciB0ZWFyLW9mZnMuIEFzIHN1Y2gsCiAgICAgIC8vLyB0aGV5IGFyZSBub3QgZW1pdHRlZCBpbiB0aGUgcHJvdG90eXBlLCBidXQgZGlyZWN0bHkgcGFzc2VkIGhlcmUuCiAgICAgIC8vLwogICAgICAvLy8gSW5zdGFuY2UtbWV0aG9kcyBpbnN0YWxsIHRoZSBzdHViLW1ldGhvZHMgaW4gdGhlaXIgcHJvdG90eXBlLCBhbmQgd2UKICAgICAgLy8vIHVzZSBzdHJpbmctYmFzZWQgcmVkaXJlY3Rpb25zIHRvIGZpbmQgdGhlbSB0aGVyZS4KICAgICAgdm9pZCBhZGRGdW5Pck5hbWUoU3R1Yk1ldGhvZCBzdHViTWV0aG9kKSB7CiAgICAgICAgaWYgKG1ldGhvZC5pc1N0YXRpYykgewogICAgICAgICAgZnVuc09yTmFtZXMuYWRkKHN0dWJNZXRob2QuY29kZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZ1bnNPck5hbWVzLmFkZChqcy5xdW90ZU5hbWUoc3R1Yk1ldGhvZC5uYW1lKSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBjYWxsTmFtZXMuYWRkKG1ldGhvZC5jYWxsTmFtZSk7CiAgICAgIC8vIFRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgZnVuc09yTmFtZXMtYXJyYXkgbXVzdCBiZSBhIHN0cmluZy4KICAgICAgZnVuc09yTmFtZXMuYWRkKGpzLnF1b3RlTmFtZShtZXRob2QubmFtZSkpOwogICAgICBmb3IgKFBhcmFtZXRlclN0dWJNZXRob2Qgc3R1Yk1ldGhvZCBpbiBtZXRob2QucGFyYW1ldGVyU3R1YnMpIHsKICAgICAgICBjYWxsTmFtZXMuYWRkKHN0dWJNZXRob2QuY2FsbE5hbWUpOwogICAgICAgIGFkZEZ1bk9yTmFtZShzdHViTWV0aG9kKTsKICAgICAgfQoKICAgICAganMuQXJyYXlJbml0aWFsaXplciBjYWxsTmFtZUFycmF5ID0KICAgICAgICAgIG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGNhbGxOYW1lcy5tYXAoanMucXVvdGVOYW1lKS50b0xpc3QoKSk7CiAgICAgIGpzLkFycmF5SW5pdGlhbGl6ZXIgZnVuc09yTmFtZXNBcnJheSA9CiAgICAgICAgICBuZXcganMuQXJyYXlJbml0aWFsaXplcihmdW5zT3JOYW1lcyk7CgogICAgICBib29sIGlzSW50ZXJjZXB0ZWQgPSBmYWxzZTsKICAgICAgaWYgKG1ldGhvZCBpcyBJbnN0YW5jZU1ldGhvZCkgewogICAgICAgIGlzSW50ZXJjZXB0ZWQgPSBtZXRob2QuaXNJbnRlcmNlcHRlZDsKICAgICAgfQoKICAgICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSBtZXRob2QucmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICAgICAganMuRXhwcmVzc2lvbiBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMgPSBuZXcganMuTGl0ZXJhbE51bGwoKTsKICAgICAgaWYgKG1ldGhvZC5jYW5CZUFwcGxpZWQpIHsKICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMgPQogICAgICAgICAgICBfZW5jb2RlT3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKG1ldGhvZCk7CiAgICAgIH0KCiAgICAgIHZhciBhcHBseUluZGV4ID0ganMubnVtYmVyKG1ldGhvZC5hcHBseUluZGV4KTsKCiAgICAgIGlmIChtZXRob2QuaXNTdGF0aWMpIHsKICAgICAgICBpZiAocmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA8PSAyICYmCiAgICAgICAgICAgIGNhbGxOYW1lcy5sZW5ndGggPT0gMSAmJgogICAgICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMgaXMganMuTGl0ZXJhbE51bGwgJiYKICAgICAgICAgICAgbWV0aG9kLmFwcGx5SW5kZXggPT0gMCkgewogICAgICAgICAganMuU3RhdGVtZW50IGZpbmlzaChpbnQgYXJpdHkpIHsKICAgICAgICAgICAgLy8gU2hvcnQgZm9ybSBmb3IgZXhhY3RseSAwLzEvMiBhcmd1bWVudHMuCiAgICAgICAgICAgIHZhciBpbnN0YWxsID0KICAgICAgICAgICAgICAgIGxvY2Fscy5maW5kKCdfc3RhdGljXyR7YXJpdHl9JywgJ2h1bmtIZWxwZXJzLl9zdGF0aWNfJHthcml0eX0nKTsKICAgICAgICAgICAgcmV0dXJuIGpzLmpzLnN0YXRlbWVudCgnJycKICAgICAgICAgICAgICAgICNpbnN0YWxsKCNjb250YWluZXIsICNnZXR0ZXJOYW1lLCAjbmFtZSwgI2Z1blR5cGUpJycnLCB7CiAgICAgICAgICAgICAgImluc3RhbGwiOiBpbnN0YWxsLAogICAgICAgICAgICAgICJjb250YWluZXIiOiBjb250YWluZXIsCiAgICAgICAgICAgICAgImdldHRlck5hbWUiOiBqcy5xdW90ZU5hbWUobWV0aG9kLnRlYXJPZmZOYW1lKSwKICAgICAgICAgICAgICAibmFtZSI6IGZ1bnNPck5hbWVzLnNpbmdsZSwKICAgICAgICAgICAgICAiZnVuVHlwZSI6IG1ldGhvZC5mdW5jdGlvblR5cGUsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBpbnN0YWxsZWROYW1lID0gY2FsbE5hbWVzLnNpbmdsZTsKICAgICAgICAgIGlmIChpbnN0YWxsZWROYW1lID09IGNhbGwwTmFtZSkgcmV0dXJuIGZpbmlzaCgwKTsKICAgICAgICAgIGlmIChpbnN0YWxsZWROYW1lID09IGNhbGwxTmFtZSkgcmV0dXJuIGZpbmlzaCgxKTsKICAgICAgICAgIGlmIChpbnN0YWxsZWROYW1lID09IGNhbGwyTmFtZSkgcmV0dXJuIGZpbmlzaCgyKTsKICAgICAgICB9CgogICAgICAgIHZhciBpbnN0YWxsID0KICAgICAgICAgICAgbG9jYWxzLmZpbmQoJ19zdGF0aWMnLCAnaHVua0hlbHBlcnMuaW5zdGFsbFN0YXRpY1RlYXJPZmYnKTsKICAgICAgICByZXR1cm4ganMuanMuc3RhdGVtZW50KCcnJwogICAgICAgICAgICAjaW5zdGFsbCgjY29udGFpbmVyLCAjZ2V0dGVyTmFtZSwKICAgICAgICAgICAgICAgICAgICAgI3JlcXVpcmVkUGFyYW1ldGVyQ291bnQsICNvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAjY2FsbE5hbWVzLCAjZnVuc09yTmFtZXMsICNmdW5UeXBlLCAjYXBwbHlJbmRleCknJycsIHsKICAgICAgICAgICJpbnN0YWxsIjogaW5zdGFsbCwKICAgICAgICAgICJjb250YWluZXIiOiBjb250YWluZXIsCiAgICAgICAgICAiZ2V0dGVyTmFtZSI6IGpzLnF1b3RlTmFtZShtZXRob2QudGVhck9mZk5hbWUpLAogICAgICAgICAgInJlcXVpcmVkUGFyYW1ldGVyQ291bnQiOiBqcy5udW1iZXIocmVxdWlyZWRQYXJhbWV0ZXJDb3VudCksCiAgICAgICAgICAib3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzIjogb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgImNhbGxOYW1lcyI6IGNhbGxOYW1lQXJyYXksCiAgICAgICAgICAiZnVuc09yTmFtZXMiOiBmdW5zT3JOYW1lc0FycmF5LAogICAgICAgICAgImZ1blR5cGUiOiBtZXRob2QuZnVuY3Rpb25UeXBlLAogICAgICAgICAgImFwcGx5SW5kZXgiOiBhcHBseUluZGV4LAogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChyZXF1aXJlZFBhcmFtZXRlckNvdW50IDw9IDIgJiYKICAgICAgICAgICAgY2FsbE5hbWVzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyBpcyBqcy5MaXRlcmFsTnVsbCAmJgogICAgICAgICAgICBtZXRob2QuYXBwbHlJbmRleCA9PSAwKSB7CiAgICAgICAgICBqcy5TdGF0ZW1lbnQgZmluaXNoKGludCBhcml0eSkgewogICAgICAgICAgICAvLyBTaG9ydCBmb3JtIGZvciBleGFjdGx5IDAvMS8yIGFyZ3VtZW50cy4KICAgICAgICAgICAgU3RyaW5nIGlzSW50ZXJjZXB0ZWRUYWcgPSBpc0ludGVyY2VwdGVkID8gJ2knIDogJ3UnOwogICAgICAgICAgICB2YXIgaW5zdGFsbCA9IGxvY2Fscy5maW5kKCdfaW5zdGFuY2VfJHthcml0eX1fJHtpc0ludGVyY2VwdGVkVGFnfScsCiAgICAgICAgICAgICAgICAnaHVua0hlbHBlcnMuX2luc3RhbmNlXyR7YXJpdHl9JHtpc0ludGVyY2VwdGVkVGFnfScpOwogICAgICAgICAgICByZXR1cm4ganMuanMuc3RhdGVtZW50KCcnJwogICAgICAgICAgICAgICAgI2luc3RhbGwoI2NvbnRhaW5lciwgI2dldHRlck5hbWUsICNuYW1lLCAjZnVuVHlwZSknJycsIHsKICAgICAgICAgICAgICAiaW5zdGFsbCI6IGluc3RhbGwsCiAgICAgICAgICAgICAgImNvbnRhaW5lciI6IGNvbnRhaW5lciwKICAgICAgICAgICAgICAiZ2V0dGVyTmFtZSI6IGpzLnF1b3RlTmFtZShtZXRob2QudGVhck9mZk5hbWUpLAogICAgICAgICAgICAgICJuYW1lIjogZnVuc09yTmFtZXMuc2luZ2xlLAogICAgICAgICAgICAgICJmdW5UeXBlIjogbWV0aG9kLmZ1bmN0aW9uVHlwZSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIGluc3RhbGxlZE5hbWUgPSBjYWxsTmFtZXMuc2luZ2xlOwogICAgICAgICAgaWYgKGluc3RhbGxlZE5hbWUgPT0gY2FsbDBOYW1lKSByZXR1cm4gZmluaXNoKDApOwogICAgICAgICAgaWYgKGluc3RhbGxlZE5hbWUgPT0gY2FsbDFOYW1lKSByZXR1cm4gZmluaXNoKDEpOwogICAgICAgICAgaWYgKGluc3RhbGxlZE5hbWUgPT0gY2FsbDJOYW1lKSByZXR1cm4gZmluaXNoKDIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGluc3RhbGwgPQogICAgICAgICAgICBsb2NhbHMuZmluZCgnX2luc3RhbmNlJywgJ2h1bmtIZWxwZXJzLmluc3RhbGxJbnN0YW5jZVRlYXJPZmYnKTsKICAgICAgICByZXR1cm4ganMuanMuc3RhdGVtZW50KCcnJwogICAgICAgICAgICAjaW5zdGFsbCgjY29udGFpbmVyLCAjZ2V0dGVyTmFtZSwgI2lzSW50ZXJjZXB0ZWQsCiAgICAgICAgICAgICAgICAgICAgICNyZXF1aXJlZFBhcmFtZXRlckNvdW50LCAjb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAjY2FsbE5hbWVzLCAjZnVuc09yTmFtZXMsICNmdW5UeXBlLCAjYXBwbHlJbmRleCknJycsIHsKICAgICAgICAgICJpbnN0YWxsIjogaW5zdGFsbCwKICAgICAgICAgICJjb250YWluZXIiOiBjb250YWluZXIsCiAgICAgICAgICAiZ2V0dGVyTmFtZSI6IGpzLnF1b3RlTmFtZShtZXRob2QudGVhck9mZk5hbWUpLAogICAgICAgICAgLy8gJ1RydXRoeScgdmFsdWVzIGFyZSBvayBmb3IgYGlzSW50ZXJjZXB0ZWRgLgogICAgICAgICAgImlzSW50ZXJjZXB0ZWQiOiBqcy5udW1iZXIoaXNJbnRlcmNlcHRlZCA/IDEgOiAwKSwKICAgICAgICAgICJyZXF1aXJlZFBhcmFtZXRlckNvdW50IjoganMubnVtYmVyKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQpLAogICAgICAgICAgIm9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyI6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgICJjYWxsTmFtZXMiOiBjYWxsTmFtZUFycmF5LAogICAgICAgICAgImZ1bnNPck5hbWVzIjogZnVuc09yTmFtZXNBcnJheSwKICAgICAgICAgICJmdW5UeXBlIjogbWV0aG9kLmZ1bmN0aW9uVHlwZSwKICAgICAgICAgICJhcHBseUluZGV4IjogYXBwbHlJbmRleCwKICAgICAgICB9KTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8anMuU3RhdGVtZW50PiBpbml0cyA9IFtdOwogICAganMuRXhwcmVzc2lvbiB0ZW1wOwoKICAgIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGZyYWdtZW50LmxpYnJhcmllcykgewogICAgICBmb3IgKFN0YXRpY01ldGhvZCBtZXRob2QgaW4gbGlicmFyeS5zdGF0aWNzKSB7CiAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IGNhbiB0aGVyZSBiZSBhbnl0aGluZyBlbHNlIHRoYW4gYSBTdGF0aWNEYXJ0TWV0aG9kPwogICAgICAgIGlmIChtZXRob2QgaXMgU3RhdGljRGFydE1ldGhvZCkgewogICAgICAgICAgaWYgKG1ldGhvZC5uZWVkc1RlYXJPZmYpIHsKICAgICAgICAgICAgSG9sZGVyIGhvbGRlciA9IG1ldGhvZC5ob2xkZXI7CiAgICAgICAgICAgIGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgPQogICAgICAgICAgICAgICAgZW1pdEluc3RhbGxUZWFyT2ZmKG5ldyBqcy5WYXJpYWJsZVVzZShob2xkZXIubmFtZSksIG1ldGhvZCk7CiAgICAgICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KG1ldGhvZC5lbGVtZW50LCBzdGF0ZW1lbnQsCiAgICAgICAgICAgICAgICBsaWJyYXJ5OiBsaWJyYXJ5LmVsZW1lbnQpOwogICAgICAgICAgICBpbml0cy5hZGQoc3RhdGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChDbGFzcyBjbHMgaW4gbGlicmFyeS5jbGFzc2VzKSB7CiAgICAgICAgaWYgKGNscy5pc1NvZnREZWZlcnJlZCAhPSBzb2Z0RGVmZXJyZWQpIGNvbnRpbnVlOwogICAgICAgIHZhciBtZXRob2RzID0gY2xzLm1ldGhvZHMud2hlcmUoKGR5bmFtaWMgbSkgPT4gbS5uZWVkc1RlYXJPZmYpLnRvTGlzdCgpOwogICAgICAgIGpzLkV4cHJlc3Npb24gY29udGFpbmVyID0ganMuanMoIiMucHJvdG90eXBlIiwgY2xhc3NSZWZlcmVuY2UoY2xzKSk7CiAgICAgICAganMuRXhwcmVzc2lvbiByZWZlcmVuY2UgPSBjb250YWluZXI7CiAgICAgICAgaWYgKG1ldGhvZHMubGVuZ3RoID4gMSkgewogICAgICAgICAgaWYgKHRlbXAgPT0gbnVsbCkgewogICAgICAgICAgICBpbml0cy5hZGQoanMuanMuc3RhdGVtZW50KCd2YXIgXzsnKSk7CiAgICAgICAgICAgIHRlbXAgPSBqcy5qcygnXycpOwogICAgICAgICAgfQogICAgICAgICAgLy8gRmlyc3QgY2FsbCB1c2VzIGFzc2lnbm1lbnQgdG8gdGVtcCB0byBjYWNoZSB0aGUgY29udGFpbmVyLgogICAgICAgICAgcmVmZXJlbmNlID0ganMuanMoJyMgPSAjJywgW3RlbXAsIGNvbnRhaW5lcl0pOwogICAgICAgIH0KICAgICAgICBmb3IgKEluc3RhbmNlTWV0aG9kIG1ldGhvZCBpbiBtZXRob2RzKSB7CiAgICAgICAgICBqcy5TdGF0ZW1lbnQgc3RhdGVtZW50ID0gZW1pdEluc3RhbGxUZWFyT2ZmKHJlZmVyZW5jZSwgbWV0aG9kKTsKICAgICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KG1ldGhvZC5lbGVtZW50LCBzdGF0ZW1lbnQpOwogICAgICAgICAgaW5pdHMuYWRkKHN0YXRlbWVudCk7CiAgICAgICAgICByZWZlcmVuY2UgPSB0ZW1wOyAvLyBTZWNvbmQgYW5kIHN1YnNlcXVlbnQgY2FsbHMgdXNlIHRlbXAuCiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKGxvY2Fscy5pc05vdEVtcHR5KSB7CiAgICAgIGluaXRzLmluc2VydCgwLCBsb2NhbHMudG9TdGF0ZW1lbnQoKSk7CiAgICB9CgogICAgcmV0dXJuIHdyYXBQaGFzZSgnaW5zdGFsbFRlYXJPZmZzJywgaW5pdHMpOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBjb25zdGFudHMgc2VjdGlvbi4KICBqcy5TdGF0ZW1lbnQgZW1pdENvbnN0YW50cyhGcmFnbWVudCBmcmFnbWVudCkgewogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IGFzc2lnbm1lbnRzID0gW107CiAgICBib29sIGhhc0xpc3QgPSBmYWxzZTsKICAgIGZvciAoQ29uc3RhbnQgY29uc3RhbnQgaW4gZnJhZ21lbnQuY29uc3RhbnRzKSB7CiAgICAgIC8vIFRPRE8oMjUyMzApOiBXZSBvbmx5IG5lZWQgdG8gbmFtZSBjb25zdGFudHMgdGhhdCBhcmUgdXNlZCBmcm9tIGZ1bmN0aW9uCiAgICAgIC8vIGJvZGllcyBvciBmcm9tIG90aGVyIGNvbnN0YW50cyBpbiBhIGRpZmZlcmVudCBwYXJ0LgogICAgICB2YXIgYXNzaWdubWVudCA9IGpzLmpzLnN0YXRlbWVudCgnIy4jID0gIycsIFsKICAgICAgICBjb25zdGFudC5ob2xkZXIubmFtZSwKICAgICAgICBjb25zdGFudC5uYW1lLAogICAgICAgIF9jb25zdGFudEVtaXR0ZXIuZ2VuZXJhdGUoY29uc3RhbnQudmFsdWUpCiAgICAgIF0pOwogICAgICBfZHVtcEluZm9UYXNrLnJlZ2lzdGVyQ29uc3RhbnRBc3QoY29uc3RhbnQudmFsdWUsIGFzc2lnbm1lbnQpOwogICAgICBhc3NpZ25tZW50cy5hZGQoYXNzaWdubWVudCk7CiAgICAgIGlmIChjb25zdGFudC52YWx1ZS5pc0xpc3QpIGhhc0xpc3QgPSB0cnVlOwogICAgfQogICAgaWYgKGhhc0xpc3QpIHsKICAgICAgYXNzaWdubWVudHMuaW5zZXJ0KAogICAgICAgICAgMCwganMuanMuc3RhdGVtZW50KCd2YXIgbWFrZUNvbnN0TGlzdCA9IGh1bmtIZWxwZXJzLm1ha2VDb25zdExpc3Q7JykpOwogICAgfQogICAgcmV0dXJuIHdyYXBQaGFzZSgnY29uc3RhbnRzJywgYXNzaWdubWVudHMpOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBzdGF0aWMgbm9uLWZpbmFsIGZpZWxkcyBzZWN0aW9uLgogIC8vLwogIC8vLyBUaGlzIHNlY3Rpb24gaW5pdGlhbGl6ZXMgYWxsIHN0YXRpYyBub24tZmluYWwgZmllbGRzIHRoYXQgZG9uJ3QgcmVxdWlyZQogIC8vLyBhbiBpbml0aWFsaXplci4KICBqcy5TdGF0ZW1lbnQgZW1pdFN0YXRpY05vbkZpbmFsRmllbGRzKEZyYWdtZW50IGZyYWdtZW50KSB7CiAgICBMaXN0PFN0YXRpY0ZpZWxkPiBmaWVsZHMgPSBmcmFnbWVudC5zdGF0aWNOb25GaW5hbEZpZWxkczsKICAgIC8vIFRPRE8oc3JhKTogQ2hhaW4gYXNzaWdubWVudHMgdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlLCBpLmUuCiAgICAvLwogICAgLy8gICAgJC54ID0gbnVsbDsgJC55ID0gbnVsbDsgJC56ID0gbnVsbDsKICAgIC8vIC0tPgogICAgLy8gICAgJC56ID0gJC55ID0gJC54ID0gbnVsbDsKICAgIC8vCiAgICBJdGVyYWJsZTxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSBmaWVsZHMubWFwKChTdGF0aWNGaWVsZCBmaWVsZCkgewogICAgICBhc3NlcnQoZmllbGQuaG9sZGVyLmlzU3RhdGljU3RhdGVIb2xkZXIpOwogICAgICBqcy5TdGF0ZW1lbnQgc3RhdGVtZW50OwogICAgICBpZiAoZmllbGQuaXNJbml0aWFsaXplZEJ5Q29uc3RhbnQpIHsKICAgICAgICBzdGF0ZW1lbnQgPSBqcy5qcwogICAgICAgICAgICAuc3RhdGVtZW50KCIjLiMgPSAjOyIsIFtmaWVsZC5ob2xkZXIubmFtZSwgZmllbGQubmFtZSwgZmllbGQuY29kZV0pOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBGaWVsZCBpbml0aWFsaXplcnMgYXJlIGdlbmVyYXRlZCBhcyBhCiAgICAgICAgLy8gZnVuY3Rpb24gZW5kaW5nIHdpdGggYSByZXR1cm4gc3RhdGVtZW50LiBXZSByZXBsYWNlIHRoZSBmdW5jdGlvbgogICAgICAgIC8vIHdpdGggdGhlIGJvZHkgYmxvY2sgYW5kIHJlcGxhY2UgdGhlIHJldHVybiBzdGF0ZW1lbnQgd2l0aCBhbgogICAgICAgIC8vIGFzc2lnbm1lbnQgdG8gdGhlIGZpZWxkLgogICAgICAgIC8vCiAgICAgICAgLy8gU2luY2UgdW5uZWVkZWQgYmxvY2tzIGFyZSBub3QgZ2VuZXJhdGVkIGluIHRoZSBvdXRwdXQsCiAgICAgICAgLy8gdGhlIHN0YXRlbWVudChzKSBvZiB0aGUgaW5pdGlhbGl6ZXMgYXJlIGlubGluZWQgaW4gdGhlIGVtaXR0ZWQgY29kZS4KICAgICAgICAvLwogICAgICAgIC8vIFRoaXMgaXMgYSBjaGVhcCB3YXkgb2Ygc3VwcG9ydGluZyBlYWdlciBmaWVsZHMgKGFzIG9wcG9zZWQgdG8KICAgICAgICAvLyBnZW5lcmF0aW5nIG9uZSBTU0EgZ3JhcGggZm9yIGFsbCBlYWdlciBmaWVsZHMpIHRob3VnaCBpdCBkb2VzIG5vdAogICAgICAgIC8vIGF2b2lkIHJlZHVuZGFudCBkZWNsYXJhdGlvbiBvZiBsb2NhbCB2YXJpYWJsZSwgZm9yIGluc3RhbmNlIGZvcgogICAgICAgIC8vIHR5cGUgYXJndW1lbnRzLgogICAgICAgIGpzLkZ1biBjb2RlID0gZmllbGQuY29kZTsKICAgICAgICBhc3NlcnQoY29kZSAhPSBudWxsLCAiTm8gY29kZSBmb3IgJGZpZWxkIik7CiAgICAgICAgaWYgKGNvZGUucGFyYW1zLmlzRW1wdHkgJiYKICAgICAgICAgICAgY29kZS5ib2R5LnN0YXRlbWVudHMubGVuZ3RoID09IDEgJiYKICAgICAgICAgICAgY29kZS5ib2R5LnN0YXRlbWVudHMubGFzdCBpcyBqcy5SZXR1cm4pIHsKICAgICAgICAgIC8vIEZvciBub3cgd2Ugb25seSBzdXBwb3J0IGluaXRpYWxpemVycyBvZiB0aGUgZm9ybQogICAgICAgICAgLy8KICAgICAgICAgIC8vICAgZnVuY3Rpb24oKSB7IHJldHVybiBlOyB9CiAgICAgICAgICAvLwogICAgICAgICAgLy8gVG8gYXZvaWQgdW5mb3Jlc2VlbiBjb25zZXF1ZW5jZXMgb2YgaGF2aW5nIHBhcmFtZXRlcnMgYW5kIGxvY2FscwogICAgICAgICAgLy8gaW4gdGhlIGluaXRpYWxpemVyIGNvZGUuCiAgICAgICAgICBqcy5SZXR1cm4gbGFzdCA9IGNvZGUuYm9keS5zdGF0ZW1lbnRzLmxhc3Q7CiAgICAgICAgICBzdGF0ZW1lbnQgPSBqcy5qcy5zdGF0ZW1lbnQoCiAgICAgICAgICAgICAgIiMuIyA9ICM7IiwgW2ZpZWxkLmhvbGRlci5uYW1lLCBmaWVsZC5uYW1lLCBsYXN0LnZhbHVlXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFNhZmUgZmFsbGJhY2sgaW4gdGhlIGV2ZW50IG9mIGEgZmllbGQgaW5pdGlhbGl6ZXIgd2l0aCBubyByZXR1cm4KICAgICAgICAgIC8vIHN0YXRlbWVudCBhcyB0aGUgbGFzdCBzdGF0ZW1lbnQuCiAgICAgICAgICBzdGF0ZW1lbnQgPSBqcy5qcwogICAgICAgICAgICAgIC5zdGF0ZW1lbnQoIiMuIyA9ICMoKTsiLCBbZmllbGQuaG9sZGVyLm5hbWUsIGZpZWxkLm5hbWUsIGNvZGVdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QoZmllbGQuZWxlbWVudCwgc3RhdGVtZW50LAogICAgICAgICAgbGlicmFyeTogZmllbGQuZWxlbWVudC5saWJyYXJ5KTsKICAgICAgcmV0dXJuIHN0YXRlbWVudDsKICAgIH0pOwogICAgcmV0dXJuIHdyYXBQaGFzZSgnc3RhdGljRmllbGRzJywgc3RhdGVtZW50cy50b0xpc3QoKSk7CiAgfQoKICAvLy8gRW1pdHMgbGF6eSBmaWVsZHMuCiAgLy8vCiAgLy8vIFRoaXMgc2VjdGlvbiBpbml0aWFsaXplcyBhbGwgc3RhdGljIChmaW5hbCBhbmQgbm9uLWZpbmFsKSBmaWVsZHMgdGhhdAogIC8vLyByZXF1aXJlIGFuIGluaXRpYWxpemVyLgogIGpzLlN0YXRlbWVudCBlbWl0TGF6aWx5SW5pdGlhbGl6ZWRTdGF0aWNzKEZyYWdtZW50IGZyYWdtZW50KSB7CiAgICBMaXN0PFN0YXRpY0ZpZWxkPiBmaWVsZHMgPSBmcmFnbWVudC5zdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkczsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gW107CiAgICBMb2NhbEFsaWFzZXMgbG9jYWxzID0gTG9jYWxBbGlhc2VzKCk7CiAgICBmb3IgKFN0YXRpY0ZpZWxkIGZpZWxkIGluIGZpZWxkcykgewogICAgICBhc3NlcnQoZmllbGQuaG9sZGVyLmlzU3RhdGljU3RhdGVIb2xkZXIpOwogICAgICBqcy5TdGF0ZW1lbnQgc3RhdGVtZW50ID0ganMuanMuc3RhdGVtZW50KCIjKCMsICMsICMsICMpOyIsIFsKICAgICAgICBsb2NhbHMuZmluZCgnX2xhenknLCAnaHVua0hlbHBlcnMubGF6eScpLAogICAgICAgIGZpZWxkLmhvbGRlci5uYW1lLAogICAgICAgIGpzLnF1b3RlTmFtZShmaWVsZC5uYW1lKSwKICAgICAgICBqcy5xdW90ZU5hbWUoZmllbGQuZ2V0dGVyTmFtZSksCiAgICAgICAgZmllbGQuY29kZQogICAgICBdKTsKCiAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KGZpZWxkLmVsZW1lbnQsIHN0YXRlbWVudCwKICAgICAgICAgIGxpYnJhcnk6IGZpZWxkLmVsZW1lbnQubGlicmFyeSk7CiAgICAgIHN0YXRlbWVudHMuYWRkKHN0YXRlbWVudCk7CiAgICB9CgogICAgaWYgKGxvY2Fscy5pc05vdEVtcHR5KSB7CiAgICAgIHN0YXRlbWVudHMuaW5zZXJ0KDAsIGxvY2Fscy50b1N0YXRlbWVudCgpKTsKICAgIH0KCiAgICByZXR1cm4gd3JhcFBoYXNlKCdsYXp5SW5pdGlhbGl6ZXJzJywgc3RhdGVtZW50cyk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIGVtYmVkZGVkIGdsb2JhbHMgdGhhdCBhcmUgbmVlZGVkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgogIC8vLwogIC8vLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgaW52b2tlZCBmb3IgdGhlIG1haW4gZnJhZ21lbnQuCiAgLy8vCiAgLy8vIFRoZSBbbG9hZE1hcF0gY29udGFpbnMgYSBtYXAgZnJvbSBsb2FkLWlkcyAoZm9yIGVhY2ggZGVmZXJyZWQgbGlicmFyeSkKICAvLy8gdG8gdGhlIGxpc3Qgb2YgZ2VuZXJhdGVkIGZyYWdtZW50cyB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIHdoZW4gdGhlCiAgLy8vIGRlZmVycmVkIGxpYnJhcnkgaXMgbG9hZGVkLgogIEl0ZXJhYmxlPGpzLlByb3BlcnR5PiBlbWl0RW1iZWRkZWRHbG9iYWxzRm9yRGVmZXJyZWRMb2FkaW5nKAogICAgICBEZWZlcnJlZExvYWRpbmdTdGF0ZSBkZWZlcnJlZExvYWRpbmdTdGF0ZSkgewogICAgTGlzdDxqcy5Qcm9wZXJ0eT4gZ2xvYmFscyA9IFtdOwoKICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eSgKICAgICAgICBqcy5zdHJpbmcoREVGRVJSRURfSU5JVElBTElaRUQpLCBqcy5qcygiT2JqZWN0LmNyZWF0ZShudWxsKSIpKSk7CgogICAgU3RyaW5nIGRlZmVycmVkR2xvYmFsID0gTW9kZWxFbWl0dGVyLmRlZmVycmVkSW5pdGlhbGl6ZXJzR2xvYmFsOwogICAganMuRXhwcmVzc2lvbiBpc0h1bmtMb2FkZWRGdW5jdGlvbiA9CiAgICAgICAganMuanMoImZ1bmN0aW9uKGhhc2gpIHsgcmV0dXJuICEhJGRlZmVycmVkR2xvYmFsW2hhc2hdOyB9Iik7CiAgICBnbG9iYWxzCiAgICAgICAgLmFkZChuZXcganMuUHJvcGVydHkoanMuc3RyaW5nKElTX0hVTktfTE9BREVEKSwgaXNIdW5rTG9hZGVkRnVuY3Rpb24pKTsKCiAgICBqcy5FeHByZXNzaW9uIGlzSHVua0luaXRpYWxpemVkRnVuY3Rpb24gPSBqcy5qcygKICAgICAgICAiZnVuY3Rpb24oaGFzaCkgeyByZXR1cm4gISEjZGVmZXJyZWRJbml0aWFsaXplZFtoYXNoXTsgfSIsIHsKICAgICAgJ2RlZmVycmVkSW5pdGlhbGl6ZWQnOiBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKERFRkVSUkVEX0lOSVRJQUxJWkVEKQogICAgfSk7CiAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoCiAgICAgICAganMuc3RyaW5nKElTX0hVTktfSU5JVElBTElaRUQpLCBpc0h1bmtJbml0aWFsaXplZEZ1bmN0aW9uKSk7CgogICAgLy8vIFNlZSBbZmluYWxpemVEZWZlcnJlZExvYWRpbmdEYXRhXSBmb3IgdGhlIGZvcm1hdCBvZiB0aGUgZGVmZXJyZWQgaHVuay4KICAgIGpzLkV4cHJlc3Npb24gaW5pdGlhbGl6ZUxvYWRlZEh1bmtGdW5jdGlvbiA9IGpzLmpzKCIiIgogICAgICAgICAgICBmdW5jdGlvbihoYXNoKSB7CiAgICAgICAgICAgICAgdmFyIGh1bmsgPSAkZGVmZXJyZWRHbG9iYWxbaGFzaF07CiAgICAgICAgICAgICAgaWYgKGh1bmsgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3cgIkRlZmVycmVkTG9hZGluZyBzdGF0ZSBlcnJvcjogY29kZSB3aXRoIGhhc2ggJyIgKwogICAgICAgICAgICAgICAgICAgIGhhc2ggKyAiJyB3YXMgbm90IGxvYWRlZCI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGluaXRpYWxpemVEZWZlcnJlZEh1bmsoaHVuayk7CiAgICAgICAgICAgICAgI2RlZmVycmVkSW5pdGlhbGl6ZWRbaGFzaF0gPSB0cnVlOwogICAgICAgICAgICB9IiIiLCB7CiAgICAgICdkZWZlcnJlZEluaXRpYWxpemVkJzogZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhERUZFUlJFRF9JTklUSUFMSVpFRCkKICAgIH0pOwoKICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eSgKICAgICAgICBqcy5zdHJpbmcoSU5JVElBTElaRV9MT0FERURfSFVOSyksIGluaXRpYWxpemVMb2FkZWRIdW5rRnVuY3Rpb24pKTsKCiAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoanMuc3RyaW5nKERFRkVSUkVEX0xJQlJBUllfUEFSVFMpLAogICAgICAgIGRlZmVycmVkTG9hZGluZ1N0YXRlLmRlZmVycmVkTGlicmFyeVBhcnRzKSk7CiAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoCiAgICAgICAganMuc3RyaW5nKERFRkVSUkVEX1BBUlRfVVJJUyksIGRlZmVycmVkTG9hZGluZ1N0YXRlLmRlZmVycmVkUGFydFVyaXMpKTsKICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eShqcy5zdHJpbmcoREVGRVJSRURfUEFSVF9IQVNIRVMpLAogICAgICAgIGRlZmVycmVkTG9hZGluZ1N0YXRlLmRlZmVycmVkUGFydEhhc2hlcykpOwoKICAgIHJldHVybiBnbG9iYWxzOwogIH0KCiAgLy8gQ3JlYXRlIGRhdGEgdXNlZCBmb3IgbG9hZGluZyBhbmQgaW5pdGlhbGl6aW5nIHRoZSBodW5rcyBmb3IgYSBkZWZlcnJlZAogIC8vIGltcG9ydC4gVGhlcmUgYXJlIHRocmVlIHBhcnRzOiBhIG1hcCBmcm9tIGxvYWRJZCB0byBsaXN0IG9mIHBhcnRzLCB3aGVyZQogIC8vIHBhcnRzIGFyZSByZXByZXNlbnRlZCBhcyBhbiBpbmRleDsgYW4gYXJyYXkgb2YgdXJpcyBpbmRleGVkIGJ5IHBhcnQ7IGFuZCBhbgogIC8vIGFycmF5IG9mIGhhc2hlcyBpbmRleGVkIGJ5IHBhcnQuCiAgLy8gW2RlZmVycmVkTG9hZEhhc2hlc10gbWF5IGhhdmUgbWlzc2luZyBlbnRyaWVzIHRvIGluZGljYXRlIGVtcHR5IHBhcnRzLgogIHZvaWQgZmluYWxpemVEZWZlcnJlZExvYWRpbmdEYXRhKAogICAgICBNYXA8U3RyaW5nLCBMaXN0PEZyYWdtZW50Pj4gbG9hZE1hcCwKICAgICAgTWFwPERlZmVycmVkRnJhZ21lbnQsIFN0cmluZz4gZGVmZXJyZWRMb2FkSGFzaGVzLAogICAgICBEZWZlcnJlZExvYWRpbmdTdGF0ZSBkZWZlcnJlZExvYWRpbmdTdGF0ZSkgewogICAgaWYgKGxvYWRNYXAuaXNFbXB0eSkgcmV0dXJuOwoKICAgIE1hcDxGcmFnbWVudCwgaW50PiBmcmFnbWVudEluZGV4ZXMgPSB7fTsKICAgIExpc3Q8U3RyaW5nPiBmcmFnbWVudFVyaXMgPSBbXTsKICAgIExpc3Q8U3RyaW5nPiBmcmFnbWVudEhhc2hlcyA9IFtdOwoKICAgIExpc3Q8anMuUHJvcGVydHk+IGxpYnJhcnlQYXJ0c01hcEVudHJpZXMgPSBbXTsKCiAgICBsb2FkTWFwLmZvckVhY2goKFN0cmluZyBsb2FkSWQsIExpc3Q8RnJhZ21lbnQ+IGZyYWdtZW50TGlzdCkgewogICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGluZGV4ZXMgPSBbXTsKICAgICAgZm9yIChGcmFnbWVudCBmcmFnbWVudCBpbiBmcmFnbWVudExpc3QpIHsKICAgICAgICBTdHJpbmcgZnJhZ21lbnRIYXNoID0gZGVmZXJyZWRMb2FkSGFzaGVzW2ZyYWdtZW50XTsKICAgICAgICBpZiAoZnJhZ21lbnRIYXNoID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGludCBpbmRleCA9IGZyYWdtZW50SW5kZXhlc1tmcmFnbWVudF07CiAgICAgICAgaWYgKGluZGV4ID09IG51bGwpIHsKICAgICAgICAgIGluZGV4ID0gZnJhZ21lbnRJbmRleGVzW2ZyYWdtZW50XSA9IGZyYWdtZW50SW5kZXhlcy5sZW5ndGg7CiAgICAgICAgICBmcmFnbWVudFVyaXMuYWRkKAogICAgICAgICAgICAgICIke2ZyYWdtZW50Lm91dHB1dEZpbGVOYW1lfS4ke01vZGVsRW1pdHRlci5kZWZlcnJlZEV4dGVuc2lvbn0iKTsKICAgICAgICAgIGZyYWdtZW50SGFzaGVzLmFkZChmcmFnbWVudEhhc2gpOwogICAgICAgIH0KICAgICAgICBpbmRleGVzLmFkZChqcy5udW1iZXIoaW5kZXgpKTsKICAgICAgfQogICAgICBsaWJyYXJ5UGFydHNNYXBFbnRyaWVzLmFkZCgKICAgICAgICAgIG5ldyBqcy5Qcm9wZXJ0eShqcy5zdHJpbmcobG9hZElkKSwgbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoaW5kZXhlcykpKTsKICAgIH0pOwoKICAgIGRlZmVycmVkTG9hZGluZ1N0YXRlLmRlZmVycmVkTGlicmFyeVBhcnRzCiAgICAgICAgLnNldFZhbHVlKG5ldyBqcy5PYmplY3RJbml0aWFsaXplcihsaWJyYXJ5UGFydHNNYXBFbnRyaWVzKSk7CiAgICBkZWZlcnJlZExvYWRpbmdTdGF0ZS5kZWZlcnJlZFBhcnRVcmlzCiAgICAgICAgLnNldFZhbHVlKGpzLnN0cmluZ0FycmF5KGZyYWdtZW50VXJpcykpOwogICAgZGVmZXJyZWRMb2FkaW5nU3RhdGUuZGVmZXJyZWRQYXJ0SGFzaGVzCiAgICAgICAgLnNldFZhbHVlKGpzLnN0cmluZ0FycmF5KGZyYWdtZW50SGFzaGVzKSk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIFtNQU5HTEVEX0dMT0JBTF9OQU1FU10gZW1iZWRkZWQgZ2xvYmFsLgogIC8vLwogIC8vLyBUaGlzIGdsb2JhbCBtYXBzIG1pbmlmaWVkIG5hbWVzIGZvciBzZWxlY3RlZCBjbGFzc2VzIChzb21lIGltcG9ydGFudAogIC8vLyBjb3JlIGNsYXNzZXMsIGFuZCBzb21lIG5hdGl2ZSBjbGFzc2VzKSB0byB0aGVpciB1bm1pbmlmaWVkIG5hbWVzLgogIGpzLlByb3BlcnR5IGVtaXRNYW5nbGVkR2xvYmFsTmFtZXMoKSB7CiAgICBMaXN0PGpzLlByb3BlcnR5PiBuYW1lcyA9IFtdOwoKICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwogICAgLy8gV2Ugd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCBuYW1lcyBmb3IgdGhlIG1vc3QgY29tbW9uIGNvcmUgY2xhc3NlcyB3aGVuCiAgICAvLyBjYWxsaW5nIHRvU3RyaW5nIG9uIHRoZW0uCiAgICBMaXN0PENsYXNzRW50aXR5PiBuYXRpdmVDbGFzc2VzTmVlZGluZ1VubWFuZ2xlZE5hbWUgPSBbCiAgICAgIGNvbW1vbkVsZW1lbnRzLmludENsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5kb3VibGVDbGFzcywKICAgICAgY29tbW9uRWxlbWVudHMubnVtQ2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5ib29sQ2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLm51bGxDbGFzcywKICAgICAgY29tbW9uRWxlbWVudHMubGlzdENsYXNzCiAgICBdOwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIG9uIGEgcGVyLWZyYWdtZW50IGJhc2lzLgogICAgbmF0aXZlQ2xhc3Nlc05lZWRpbmdVbm1hbmdsZWROYW1lLmZvckVhY2goKGVsZW1lbnQpIHsKICAgICAgbmFtZXMuYWRkKG5ldyBqcy5Qcm9wZXJ0eSgKICAgICAgICAgIGpzLnF1b3RlTmFtZShfbmFtZXIuY2xhc3NOYW1lKGVsZW1lbnQpKSwganMuc3RyaW5nKGVsZW1lbnQubmFtZSkpKTsKICAgIH0pOwoKICAgIHJldHVybiBuZXcganMuUHJvcGVydHkoCiAgICAgICAganMuc3RyaW5nKE1BTkdMRURfR0xPQkFMX05BTUVTKSwgbmV3IGpzLk9iamVjdEluaXRpYWxpemVyKG5hbWVzKSk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIFtHRVRfVFlQRV9GUk9NX05BTUVdIGVtYmVkZGVkIGdsb2JhbC4KICAvLy8KICAvLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgcHJvdmlkZXMgYSB3YXkgdG8gZ28gZnJvbSBhIGNsYXNzIG5hbWUgKHdoaWNoIGlzCiAgLy8vIGFsc28gdGhlIGNvbnN0cnVjdG9yJ3MgbmFtZSkgdG8gdGhlIGNvbnN0cnVjdG9yIGl0c2VsZi4KICBqcy5Qcm9wZXJ0eSBlbWl0R2V0VHlwZUZyb21OYW1lKCkgewogICAganMuRXhwcmVzc2lvbiBmdW5jdGlvbiA9IGpzLmpzKCJnZXRHbG9iYWxGcm9tTmFtZSIpOwogICAgcmV0dXJuIG5ldyBqcy5Qcm9wZXJ0eShqcy5zdHJpbmcoR0VUX1RZUEVfRlJPTV9OQU1FKSwgZnVuY3Rpb24pOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBbTUVUQURBVEFdIGVtYmVkZGVkIGdsb2JhbC4KICAvLy8KICAvLy8gVGhlIG1ldGFkYXRhIGl0c2VsZiBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkIGVhcmxpZXIgYW5kIGlzIHN0b3JlZCBpbgogIC8vLyB0aGUgW3Byb2dyYW1dLgogIExpc3Q8anMuUHJvcGVydHk+IGVtaXRNZXRhZGF0YShQcm9ncmFtIHByb2dyYW0pIHsKICAgIExpc3Q8anMuUHJvcGVydHk+IG1ldGFkYXRhR2xvYmFscyA9IFtdOwoKICAgIGpzLlByb3BlcnR5IGNyZWF0ZUdsb2JhbChqcy5FeHByZXNzaW9uIG1ldGFkYXRhLCBTdHJpbmcgZ2xvYmFsKSB7CiAgICAgIHJldHVybiBuZXcganMuUHJvcGVydHkoanMuc3RyaW5nKGdsb2JhbCksIG1ldGFkYXRhKTsKICAgIH0KCiAgICB2YXIgbWFpblVuaXQgPSBwcm9ncmFtLm1haW5GcmFnbWVudC5vdXRwdXRVbml0OwogICAganMuRXhwcmVzc2lvbiBtZXRhZGF0YSA9IHByb2dyYW0ubWV0YWRhdGFGb3JPdXRwdXRVbml0KG1haW5Vbml0KTsKICAgIG1ldGFkYXRhR2xvYmFscy5hZGQoY3JlYXRlR2xvYmFsKG1ldGFkYXRhLCBNRVRBREFUQSkpOwogICAganMuRXhwcmVzc2lvbiB0eXBlcyA9IHByb2dyYW0ubWV0YWRhdGFUeXBlc0Zvck91dHB1dFVuaXQobWFpblVuaXQpOwogICAgbWV0YWRhdGFHbG9iYWxzLmFkZChjcmVhdGVHbG9iYWwodHlwZXMsIFRZUEVTKSk7CgogICAgcmV0dXJuIG1ldGFkYXRhR2xvYmFsczsKICB9CgogIC8vLyBFbWl0cyBhbGwgZW1iZWRkZWQgZ2xvYmFscy4KICBqcy5TdGF0ZW1lbnQgZW1pdEVtYmVkZGVkR2xvYmFsc1BhcnQxKAogICAgICBQcm9ncmFtIHByb2dyYW0sIERlZmVycmVkTG9hZGluZ1N0YXRlIGRlZmVycmVkTG9hZGluZ1N0YXRlKSB7CiAgICBMaXN0PGpzLlByb3BlcnR5PiBnbG9iYWxzID0gW107CgogICAgaWYgKHByb2dyYW0ubG9hZE1hcC5pc05vdEVtcHR5KSB7CiAgICAgIGdsb2JhbHMKICAgICAgICAgIC5hZGRBbGwoZW1pdEVtYmVkZGVkR2xvYmFsc0ZvckRlZmVycmVkTG9hZGluZyhkZWZlcnJlZExvYWRpbmdTdGF0ZSkpOwogICAgfQoKICAgIGlmIChwcm9ncmFtLnR5cGVUb0ludGVyY2VwdG9yTWFwICE9IG51bGwpIHsKICAgICAgLy8gVGhpcyBwcm9wZXJ0eSBpcyBhc3NpZ25lZCBsYXRlci4KICAgICAgLy8gSW5pdGlhbGl6ZSBwcm9wZXJ0eSB0byBhdm9pZCBtYXAgdHJhbnNpdGlvbnMuCiAgICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eSgKICAgICAgICAgIGpzLnN0cmluZyhUWVBFX1RPX0lOVEVSQ0VQVE9SX01BUCksIGpzLkxpdGVyYWxOdWxsKCkpKTsKICAgIH0KCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICBnbG9iYWxzLmFkZChqcy5Qcm9wZXJ0eShqcy5zdHJpbmcoUlRJX1VOSVZFUlNFKSwgY3JlYXRlUnRpVW5pdmVyc2UoKSkpOwogICAgfQoKICAgIGdsb2JhbHMuYWRkKGVtaXRNYW5nbGVkR2xvYmFsTmFtZXMoKSk7CgogICAgLy8gVGhlIFtNQU5HTEVEX05BTUVTXSB0YWJsZSBtdXN0IGNvbnRhaW4gdGhlIG1hcHBpbmcgZm9yIGNvbnN0IHN5bWJvbHMuCiAgICAvLyBXaXRob3V0IGNvbnN0IHN5bWJvbHMsIHRoZSB0YWJsZSBpcyBvbmx5IHJlbGV2YW50IGZvciByZWZsZWN0aW9uIGFuZAogICAgLy8gdGhlcmVmb3JlIHVudXNlZCBpbiB0aGlzIGVtaXR0ZXIuCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlIG5lZWQgZm9yIGFkZGluZyBhbiBlbXB0eSBsaXN0IG9mCiAgICAvLyBtYW5nbGVkIG5hbWVzLgogICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KAogICAgICAgIGpzLnN0cmluZyhNQU5HTEVEX05BTUVTKSwgbmV3IGpzLk9iamVjdEluaXRpYWxpemVyKDxqcy5Qcm9wZXJ0eT5bXSkpKTsKCiAgICBnbG9iYWxzLmFkZChlbWl0R2V0VHlwZUZyb21OYW1lKCkpOwoKICAgIGdsb2JhbHMuYWRkQWxsKGVtaXRNZXRhZGF0YShwcm9ncmFtKSk7CgogICAgaWYgKHByb2dyYW0ubmVlZHNOYXRpdmVTdXBwb3J0KSB7CiAgICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eSgKICAgICAgICAgIGpzLnN0cmluZyhJTlRFUkNFUFRPUlNfQllfVEFHKSwgbmV3IGpzLkxpdGVyYWxOdWxsKCkpKTsKICAgICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KGpzLnN0cmluZyhMRUFGX1RBR1MpLCBuZXcganMuTGl0ZXJhbE51bGwoKSkpOwogICAgfQoKICAgIGpzLk9iamVjdEluaXRpYWxpemVyIGdsb2JhbHNPYmplY3QgPSBuZXcganMuT2JqZWN0SW5pdGlhbGl6ZXIoZ2xvYmFscyk7CgogICAgcmV0dXJuIGpzLmpzLnN0YXRlbWVudCgndmFyIGluaXQgPSAjOycsIGdsb2JhbHNPYmplY3QpOwogIH0KCiAgLy8vIEZpbmlzaCBzZXR0aW5nIHVwIGVtYmVkZGVkIGdsb2JhbHMuCiAganMuU3RhdGVtZW50IGVtaXRFbWJlZGRlZEdsb2JhbHNQYXJ0MigKICAgICAgUHJvZ3JhbSBwcm9ncmFtLCBEZWZlcnJlZExvYWRpbmdTdGF0ZSBkZWZlcnJlZExvYWRpbmdTdGF0ZSkgewogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSBbXTsKICAgIGlmIChwcm9ncmFtLnR5cGVUb0ludGVyY2VwdG9yTWFwICE9IG51bGwpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KCdpbml0LiMgPSAjOycsCiAgICAgICAgICBbanMuc3RyaW5nKFRZUEVfVE9fSU5URVJDRVBUT1JfTUFQKSwgcHJvZ3JhbS50eXBlVG9JbnRlcmNlcHRvck1hcF0pKTsKICAgIH0KICAgIHJldHVybiBqcy5CbG9jayhzdGF0ZW1lbnRzKTsKICB9CgogIGpzLlN0YXRlbWVudCBlbWl0VHlwZVJ1bGVzKEZyYWdtZW50IGZyYWdtZW50KSB7CiAgICBpZiAoIV9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHJldHVybiBqcy5FbXB0eVN0YXRlbWVudCgpOwoKICAgIFJ1bGVzZXQgcnVsZXNldCA9IFJ1bGVzZXQuZW1wdHkoKTsKICAgIEl0ZXJhYmxlPENsYXNzPiBjbGFzc2VzID0KICAgICAgICBmcmFnbWVudC5saWJyYXJpZXMuZXhwYW5kKChMaWJyYXJ5IGxpYnJhcnkpID0+IGxpYnJhcnkuY2xhc3Nlcyk7CiAgICBjbGFzc2VzLmZvckVhY2goKENsYXNzIGNscykgewogICAgICBpZiAoY2xzLmNsYXNzQ2hlY2tzTmV3UnRpID09IG51bGwpIHJldHVybjsKICAgICAgSW50ZXJmYWNlVHlwZSB0YXJnZXRUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMuZWxlbWVudCk7CiAgICAgIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IHN1cGVydHlwZXMgPSBjbHMuY2xhc3NDaGVja3NOZXdSdGkuY2hlY2tzLm1hcCgKICAgICAgICAgIChUeXBlQ2hlY2sgY2hlY2spID0+IF9kYXJ0VHlwZXMuYXNJbnN0YW5jZU9mKHRhcmdldFR5cGUsIGNoZWNrLmNscykpOwogICAgICBNYXA8VHlwZVZhcmlhYmxlVHlwZSwgRGFydFR5cGU+IHR5cGVWYXJpYWJsZXMgPSB7fTsKICAgICAgZm9yIChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSBpbiBjbHMubmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpKSB7CiAgICAgICAgVHlwZVZhcmlhYmxlRW50aXR5IGVsZW1lbnQgPSB0eXBlVmFyaWFibGUuZWxlbWVudDsKICAgICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9CiAgICAgICAgICAgIF9kYXJ0VHlwZXMuYXNJbnN0YW5jZU9mKHRhcmdldFR5cGUsIGVsZW1lbnQudHlwZURlY2xhcmF0aW9uKTsKICAgICAgICBMaXN0PERhcnRUeXBlPiBzdXBlcnR5cGVBcmd1bWVudHMgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50czsKICAgICAgICB0eXBlVmFyaWFibGVzW3R5cGVWYXJpYWJsZV0gPSBzdXBlcnR5cGVBcmd1bWVudHNbZWxlbWVudC5pbmRleF07CiAgICAgIH0KICAgICAgcnVsZXNldC5hZGQodGFyZ2V0VHlwZSwgc3VwZXJ0eXBlcywgdHlwZVZhcmlhYmxlcyk7CiAgICB9KTsKCiAgICBGdW5jdGlvbkVudGl0eSBtZXRob2QgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMucnRpQWRkUnVsZXNNZXRob2Q7CiAgICByZXR1cm4ganMuanMuc3RhdGVtZW50KCcjKGluaXQuIyxKU09OLnBhcnNlKCMpKTsnLCBbCiAgICAgIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKG1ldGhvZCksCiAgICAgIFJUSV9VTklWRVJTRSwKICAgICAgX3J1bGVzZXRFbmNvZGVyLmVuY29kZVJ1bGVzZXQocnVsZXNldCksCiAgICBdKTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIGV4cHJlc3Npb24gdGhhdCBjcmVhdGVzIHRoZSBpbml0aWFsIFJ0aSBVbml2ZXJzZS4KICAvLy8KICAvLy8gVGhpcyBuZWVkcyB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCBgX1VuaXZlcnNlLmNyZWF0ZWAgaW4gYGRhcnQ6X3J0aWAuCiAganMuRXhwcmVzc2lvbiBjcmVhdGVSdGlVbml2ZXJzZSgpIHsKICAgIExpc3Q8anMuUHJvcGVydHk+IHVuaXZlcnNlRmllbGRzID0gW107CiAgICB2b2lkIGluaXRGaWVsZChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7CiAgICAgIHVuaXZlcnNlRmllbGRzLmFkZChqcy5Qcm9wZXJ0eShqcy5zdHJpbmcobmFtZSksIGpzLmpzKHZhbHVlKSkpOwogICAgfQoKICAgIGluaXRGaWVsZChSdGlVbml2ZXJzZUZpZWxkTmFtZXMuZXZhbENhY2hlLCAnbmV3IE1hcCgpJyk7CiAgICBpbml0RmllbGQoUnRpVW5pdmVyc2VGaWVsZE5hbWVzLnR5cGVSdWxlcywgJ3t9Jyk7CiAgICBpbml0RmllbGQoUnRpVW5pdmVyc2VGaWVsZE5hbWVzLnNoYXJlZEVtcHR5QXJyYXksICdbXScpOwoKICAgIHJldHVybiBqcy5PYmplY3RJbml0aWFsaXplcih1bml2ZXJzZUZpZWxkcyk7CiAgfQoKICAvLy8gRW1pdHMgZGF0YSBuZWVkZWQgZm9yIG5hdGl2ZSBjbGFzc2VzLgogIC8vLwogIC8vLyBXZSBkb24ndCB0cnkgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBuYXRpdmUgZGF0YSwgYnV0IHJhdGhlciBidWlsZAogIC8vLyBKYXZhU2NyaXB0IG9iamVjdCBsaXRlcmFscyB0aGF0IGNvbnRhaW4gYWxsIHRoZSBpbmZvcm1hdGlvbiBkaXJlY3RseS4KICAvLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvdXRwdXQgc2l6ZSBpcyBiaWdnZXIsIGJ1dCB0aGF0IHRoZSBzdGFydHVwIGlzIGZhc3Rlci4KICAvLy8KICAvLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgc3RhdGljIGVxdWl2YWxlbnQgb2YKICAvLy8gW05hdGl2ZUdlbmVyYXRvci5idWlsZE5hdGl2ZUluZm9IYW5kbGVyXS4KICBqcy5TdGF0ZW1lbnQgZW1pdE5hdGl2ZVN1cHBvcnQoRnJhZ21lbnQgZnJhZ21lbnQpIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gW107CgogICAgLy8gVGhlIGlzb2xhdGUtYWZmaW5pdHkgdGFnIG11c3Qgb25seSBiZSBpbml0aWFsaXplZCBvbmNlIHBlciBwcm9ncmFtLgogICAgaWYgKGZyYWdtZW50LmlzTWFpbkZyYWdtZW50ICYmCiAgICAgICAgTmF0aXZlR2VuZXJhdG9yLm5lZWRzSXNvbGF0ZUFmZmluaXR5VGFnSW5pdGlhbGl6YXRpb24oCiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UpKSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKE5hdGl2ZUdlbmVyYXRvci5nZW5lcmF0ZUlzb2xhdGVBZmZpbml0eVRhZ0luaXRpYWxpemF0aW9uKAogICAgICAgICAgX2Nsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZSwgZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcywganMuanMoIiIiCiAgICAgICAgLy8gT24gVjgsIHRoZSAnaW50ZXJuJyBmdW5jdGlvbiBjb252ZXJ0cyBhIHN0cmluZyB0byBhIHN5bWJvbCwgd2hpY2gKICAgICAgICAvLyBtYWtlcyBwcm9wZXJ0eSBhY2Nlc3MgbXVjaCBmYXN0ZXIuCiAgICAgICAgLy8gVE9ETyhzcmEpOiBVc2UgU3ltYm9sIG9uIG5vbi1JRTExIGJyb3dzZXJzLgogICAgICAgIGZ1bmN0aW9uIChzKSB7CiAgICAgICAgICB2YXIgbyA9IHt9OwogICAgICAgICAgb1tzXSA9IDE7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoaHVua0hlbHBlcnMuY29udmVydFRvRmFzdE9iamVjdChvKSlbMF07CiAgICAgICAgfSIiIiwgW10pKSk7CiAgICB9CgogICAgTWFwPFN0cmluZywganMuRXhwcmVzc2lvbj4gaW50ZXJjZXB0b3JzQnlUYWcgPSB7fTsKICAgIE1hcDxTdHJpbmcsIGpzLkV4cHJlc3Npb24+IGxlYWZUYWdzID0ge307CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gc3ViY2xhc3NBc3NpZ25tZW50cyA9IFtdOwoKICAgIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGZyYWdtZW50LmxpYnJhcmllcykgewogICAgICBmb3IgKENsYXNzIGNscyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgICBpZiAoY2xzLm5hdGl2ZUxlYWZUYWdzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoU3RyaW5nIHRhZyBpbiBjbHMubmF0aXZlTGVhZlRhZ3MpIHsKICAgICAgICAgICAgaW50ZXJjZXB0b3JzQnlUYWdbdGFnXSA9IGNsYXNzUmVmZXJlbmNlKGNscyk7CiAgICAgICAgICAgIGxlYWZUYWdzW3RhZ10gPSBuZXcganMuTGl0ZXJhbEJvb2wodHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjbHMubmF0aXZlTm9uTGVhZlRhZ3MgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChTdHJpbmcgdGFnIGluIGNscy5uYXRpdmVOb25MZWFmVGFncykgewogICAgICAgICAgICBpbnRlcmNlcHRvcnNCeVRhZ1t0YWddID0gY2xhc3NSZWZlcmVuY2UoY2xzKTsKICAgICAgICAgICAgbGVhZlRhZ3NbdGFnXSA9IG5ldyBqcy5MaXRlcmFsQm9vbChmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2xzLm5hdGl2ZUV4dGVuc2lvbnMgIT0gbnVsbCkgewogICAgICAgICAgICBMaXN0PENsYXNzPiBzdWJjbGFzc2VzID0gY2xzLm5hdGl2ZUV4dGVuc2lvbnM7CiAgICAgICAgICAgIGpzLkV4cHJlc3Npb24gYmFzZSA9IGpzLnN0cmluZyhjbHMubmF0aXZlTm9uTGVhZlRhZ3NbMF0pOwoKICAgICAgICAgICAgZm9yIChDbGFzcyBzdWJjbGFzcyBpbiBzdWJjbGFzc2VzKSB7CiAgICAgICAgICAgICAgc3ViY2xhc3NBc3NpZ25tZW50cy5hZGQoanMuanMuc3RhdGVtZW50KCcjLiMgPSAjOycsIFsKICAgICAgICAgICAgICAgIGNsYXNzUmVmZXJlbmNlKHN1YmNsYXNzKSwKICAgICAgICAgICAgICAgIE5BVElWRV9TVVBFUkNMQVNTX1RBR19OQU1FLAogICAgICAgICAgICAgICAgYmFzZQogICAgICAgICAgICAgIF0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChpbnRlcmNlcHRvcnNCeVRhZy5pc05vdEVtcHR5KSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAgICJodW5rSGVscGVycy5zZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnKCMpOyIsCiAgICAgICAgICBqcy5vYmplY3RMaXRlcmFsKGludGVyY2VwdG9yc0J5VGFnKSkpOwogICAgfQogICAgaWYgKGxlYWZUYWdzLmlzTm90RW1wdHkpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KAogICAgICAgICAgImh1bmtIZWxwZXJzLnNldE9yVXBkYXRlTGVhZlRhZ3MoIyk7IiwganMub2JqZWN0TGl0ZXJhbChsZWFmVGFncykpKTsKICAgIH0KICAgIHN0YXRlbWVudHMuYWRkQWxsKHN1YmNsYXNzQXNzaWdubWVudHMpOwoKICAgIHJldHVybiB3cmFwUGhhc2UoJ25hdGl2ZVN1cHBvcnQnLCBzdGF0ZW1lbnRzKTsKICB9Cn0KCmNsYXNzIExvY2FsQWxpYXNlcyB7CiAgZmluYWwgTWFwPFN0cmluZywganMuRXhwcmVzc2lvbj4gX2xvY2FscyA9IHt9OwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9sb2NhbHMuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBTdHJpbmcgZmluZChTdHJpbmcgYWxpYXMsIFN0cmluZyBleHByZXNzaW9uKSB7CiAgICBfbG9jYWxzW2FsaWFzXSA/Pz0ganMuanMoZXhwcmVzc2lvbik7CiAgICByZXR1cm4gYWxpYXM7CiAgfQoKICBqcy5TdGF0ZW1lbnQgdG9TdGF0ZW1lbnQoKSB7CiAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IGluaXRpYWxpemF0aW9ucyA9IFtdOwogICAgX2xvY2Fscy5mb3JFYWNoKChsb2NhbCwgdmFsdWUpIHsKICAgICAgaW5pdGlhbGl6YXRpb25zCiAgICAgICAgICAuYWRkKGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24oanMuVmFyaWFibGVEZWNsYXJhdGlvbihsb2NhbCksIHZhbHVlKSk7CiAgICB9KTsKICAgIHJldHVybiBqcy5FeHByZXNzaW9uU3RhdGVtZW50KGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGluaXRpYWxpemF0aW9ucykpOwogIH0KfQoKLy8vIENvZGUgdG8gaW5pdGlhbGl6ZSBob2xkZXIgd2l0aCBhbmNpbGxhcnkgaW5mb3JtYXRpb24uCmNsYXNzIEhvbGRlckNvZGUgewogIGZpbmFsIExpc3Q8SG9sZGVyPiBhY3RpdmVIb2xkZXJzOwogIGpzLlN0YXRlbWVudCBzdGF0ZW1lbnRzOwogIEhvbGRlckNvZGUoe3RoaXMuYWN0aXZlSG9sZGVycywgdGhpcy5zdGF0ZW1lbnRzfSk7Cn0KCmNsYXNzIERlZmVycmVkTG9hZGluZ1N0YXRlIHsKICBmaW5hbCBkZWZlcnJlZExpYnJhcnlQYXJ0cyA9IG5ldyBEZWZlcnJlZFByaW1hcnlFeHByZXNzaW9uKCk7CiAgZmluYWwgZGVmZXJyZWRQYXJ0VXJpcyA9IG5ldyBEZWZlcnJlZFByaW1hcnlFeHByZXNzaW9uKCk7CiAgZmluYWwgZGVmZXJyZWRQYXJ0SGFzaGVzID0gbmV3IERlZmVycmVkUHJpbWFyeUV4cHJlc3Npb24oKTsKfQoKY2xhc3MgRGVmZXJyZWRQcmltYXJ5RXhwcmVzc2lvbiBleHRlbmRzIGpzLkRlZmVycmVkRXhwcmVzc2lvbiB7CiAganMuRXhwcmVzc2lvbiBfdmFsdWU7CgogIHZvaWQgc2V0VmFsdWUoanMuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgYXNzZXJ0KF92YWx1ZSA9PSBudWxsKTsKICAgIGFzc2VydCh2YWx1ZS5wcmVjZWRlbmNlTGV2ZWwgPT0gdGhpcy5wcmVjZWRlbmNlTGV2ZWwpOwogICAgX3ZhbHVlID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIGdldCB2YWx1ZSB7CiAgICBhc3NlcnQoX3ZhbHVl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CmNvbnN0IGludCBTVUNDRVNTID0gMDsKY29uc3QgaW50IEVSUk9SID0gMTsKY29uc3QgaW50IFNUUkVBTV9XQVNfQ0FOQ0VMRUQgPSAyOwoMAE5OPAFIKgEXFSMBNnBhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvYXN5bmNfYXdhaXRfZXJyb3JfY29kZXMuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvY29kZWdlbl9oZWxwZXJzLmRhcnTAALNVLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdjb2RlZ2VuLmRhcnQnIHNob3cgQ29kZWdlblBoYXNlOwppbXBvcnQgJ25vZGVzLmRhcnQnOwoKLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnZvY2F0aW9uIG9mIFtzZWxlY3Rvcl0gb24gW21lbWJlcl0gY2FuIHVzZSBhbgovLy8gYWxpYXNlZCBtZW1iZXIuCi8vLwovLy8gSW52b2tpbmcgYSBzdXBlciBnZXR0ZXIgaXNuJ3Qgc3VwcG9ydGVkLCB0aGlzIHdvdWxkIHJlcXVpcmUgY2hhbmdlcyB0bwovLy8gY29tcGFjdCBmaWVsZCBkZXNjcmlwdG9ycyBpbiB0aGUgZW1pdHRlci4KYm9vbCBjYW5Vc2VBbGlhc2VkU3VwZXJNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlciwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICByZXR1cm4gIXNlbGVjdG9yLmlzR2V0dGVyOwp9CgovLy8gUmVwbGFjZXMgc29tZSBpbnN0cnVjdGlvbnMgd2l0aCBzcGVjaWFsaXplZCB2ZXJzaW9ucyB0byBtYWtlIGNvZGVnZW4gZWFzaWVyLgovLy8gQ2FjaGVzIGNvZGVnZW4gaW5mb3JtYXRpb24gb24gbm9kZXMuCmNsYXNzIFNzYUluc3RydWN0aW9uU2VsZWN0aW9uIGV4dGVuZHMgSEJhc2VWaXNpdG9yIHdpdGggQ29kZWdlblBoYXNlIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIEludGVyY2VwdG9yRGF0YSBfaW50ZXJjZXB0b3JEYXRhOwogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBIR3JhcGggZ3JhcGg7CgogIFNzYUluc3RydWN0aW9uU2VsZWN0aW9uKAogICAgICB0aGlzLl9vcHRpb25zLCB0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5faW50ZXJjZXB0b3JEYXRhKTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIHRoaXMuZ3JhcGggPSBncmFwaDsKICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQgPSBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBpbnN0cnVjdGlvbiAmJiByZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgICAgYmxvY2sucmV3cml0ZShpbnN0cnVjdGlvbiwgcmVwbGFjZW1lbnQpOwoKICAgICAgICAvLyBJZiB0aGUgcmVwbGFjZW1lbnQgaW5zdHJ1Y3Rpb24gZG9lcyBub3Qga25vdyBpdHMgc291cmNlIGVsZW1lbnQsIHVzZQogICAgICAgIC8vIHRoZSBzb3VyY2UgZWxlbWVudCBvZiB0aGUgaW5zdHJ1Y3Rpb24uCiAgICAgICAgaWYgKHJlcGxhY2VtZW50LnNvdXJjZUVsZW1lbnQgPT0gbnVsbCkgewogICAgICAgICAgcmVwbGFjZW1lbnQuc291cmNlRWxlbWVudCA9IGluc3RydWN0aW9uLnNvdXJjZUVsZW1lbnQ7CiAgICAgICAgfQogICAgICAgIGlmIChyZXBsYWNlbWVudC5zb3VyY2VJbmZvcm1hdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICByZXBsYWNlbWVudC5zb3VyY2VJbmZvcm1hdGlvbiA9IGluc3RydWN0aW9uLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICAgIH0KICAgICAgICBpZiAoIXJlcGxhY2VtZW50LmlzSW5CYXNpY0Jsb2NrKCkpIHsKICAgICAgICAgIC8vIFRoZSBjb25zdGFudCBmb2xkaW5nIGNhbiByZXR1cm4gYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbHJlYWR5CiAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBncmFwaCAobGlrZSBhbiBpbnB1dCksIHNvIHdlIG9ubHkgYWRkIHRoZSByZXBsYWNlbWVudAogICAgICAgICAgLy8gaWYgbmVjZXNzYXJ5LgogICAgICAgICAgYmxvY2suYWRkQWZ0ZXIoaW5zdHJ1Y3Rpb24sIHJlcGxhY2VtZW50KTsKICAgICAgICAgIC8vIFZpc2l0IHRoZSByZXBsYWNlbWVudCBhcyB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpbiBjYXNlIGl0IGNhbiBhbHNvCiAgICAgICAgICAvLyBiZSBjb25zdGFudCBmb2xkZWQgYXdheS4KICAgICAgICAgIG5leHQgPSByZXBsYWNlbWVudDsKICAgICAgICB9CiAgICAgICAgYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJcyhISXMgbm9kZSkgewogICAgaWYgKG5vZGUua2luZCA9PSBISXMuUkFXX0NIRUNLKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciA9IG5vZGUuaW50ZXJjZXB0b3I7CiAgICAgIGlmIChpbnRlcmNlcHRvciAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG5ldyBISXNWaWFJbnRlcmNlcHRvcigKICAgICAgICAgICAgbm9kZS50eXBlRXhwcmVzc2lvbiwgaW50ZXJjZXB0b3IsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJZGVudGl0eShISWRlbnRpdHkgbm9kZSkgewogICAgbm9kZS5zaW5nbGVDb21wYXJpc29uT3AgPSBzaW1wbGVPcChub2RlLmxlZnQsIG5vZGUucmlnaHQpOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc2luZ2xlIEphdmFTY3JpcHQgY29tcGFyaXNvbiAoYD09YCBvciBgPT09YCkgaWYgdGhhdAogIC8vLyBpbXBsZW1lbnRzIGBpZGVudGljYWwobGVmdCwgcmlnaHQpYCwgb3IgcmV0dXJucyBgbnVsbGAgaWYgdGhlIG1vcmUgY29tcGxleAogIC8vLyB0ZXJuYXJ5IGBsZWZ0ID09IG51bGwgPyByaWdodCA9PSBudWxsIDogbGVmdCA9PT0gcmlnaHRgIGlzIHJlcXVpcmVkLgogIFN0cmluZyBzaW1wbGVPcChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0KSB7CiAgICBBYnN0cmFjdFZhbHVlIGxlZnRUeXBlID0gbGVmdC5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIHJpZ2h0VHlwZSA9IHJpZ2h0Lmluc3RydWN0aW9uVHlwZTsKICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwobGVmdFR5cGUpLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgIHJldHVybiAnPT09JzsKICAgIH0KICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwocmlnaHRUeXBlKS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICByZXR1cm4gJz09PSc7CiAgICB9CgogICAgLy8gRGFydCBgbnVsbGAgaXMgaW1wbGVtZW50ZWQgYnkgSmF2YVNjcmlwdCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIHdoaWNoIGFyZQogICAgLy8gbm90IHN0cmljdC1lcXVhbHMsIHNvIHdlIGNhbid0IHVzZSBgPT09YC4gV2Ugd291bGQgbGlrZSB0byB1c2UgYD09YCBidXQKICAgIC8vIG5lZWQgdG8gYXZvaWQgYW55IGNhc2VzIGZyb20gRVM2IDcuMi4xNCB0aGF0IGludm9sdmUgY29udmVyc2lvbnMuCiAgICBpZiAobGVmdC5pc0NvbnN0YW50TnVsbCgpIHx8IHJpZ2h0LmlzQ29uc3RhbnROdWxsKCkpIHsKICAgICAgcmV0dXJuICc9PSc7CiAgICB9CgogICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVtYmVyT3JOdWxsKGxlZnRUeXBlKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdW1iZXJPck51bGwocmlnaHRUeXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiAnPT0nOwogICAgfQogICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzU3RyaW5nT3JOdWxsKGxlZnRUeXBlKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uaXNTdHJpbmdPck51bGwocmlnaHRUeXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiAnPT0nOwogICAgfQogICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzQm9vbGVhbk9yTnVsbChsZWZ0VHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzQm9vbGVhbk9yTnVsbChyaWdodFR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuICc9PSc7CiAgICB9CgogICAgaWYgKF9pbnRlcmNlcHRlZChsZWZ0VHlwZSkpIHJldHVybiBudWxsOwogICAgaWYgKF9pbnRlcmNlcHRlZChyaWdodFR5cGUpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiAnPT0nOwogIH0KCiAgLy8gVG9QcmltaXRpdmUgY29udmVyc2lvbnMgb2YgYW4gb2JqZWN0IG9jY3VyIHdoZW4gdGhlIG90aGVyIG9wZXJhbmQgaXMgYQogIC8vIHByaW1pdGl2ZSAoTnVtYmVyLCBTdHJpbmcsIFN5bWJvbCBhbmQsIGluZGlyZWN0bHksIEJvb2xlYW4pLiBXZSB1c2UKICAvLyAnaW50ZXJjZXB0ZWQnIHR5cGVzIGFzIGEgcHJveHkgZm9yIGFsbCB0aGUgcHJpbWl0aXZlIHR5cGVzLgogIGJvb2wgX2ludGVyY2VwdGVkKEFic3RyYWN0VmFsdWUgdHlwZSkgPT4gX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgLmlzSW50ZXJjZXB0b3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwodHlwZSkpCiAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SW52b2tlRHluYW1pYyhISW52b2tlRHluYW1pYyBub2RlKSB7CiAgICB0cnlSZXBsYWNlRXhwbGljaXRSZWNlaXZlcldpdGhEdW1teSgKICAgICAgICBub2RlLCBub2RlLnNlbGVjdG9yLCBub2RlLmVsZW1lbnQsIG5vZGUucmVjZWl2ZXJUeXBlKTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SW52b2tlU3VwZXIoSEludm9rZVN1cGVyIG5vZGUpIHsKICAgIHRyeVJlcGxhY2VFeHBsaWNpdFJlY2VpdmVyV2l0aER1bW15KAogICAgICAgIG5vZGUsIG5vZGUuc2VsZWN0b3IsIG5vZGUuZWxlbWVudCwgbnVsbCk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpIHsKICAgIC8vIFRoZSByZWNlaXZlciBwYXJhbWV0ZXIgc2hvdWxkIG5ldmVyIGJlIHJlcGxhY2VkIHdpdGggYSBkdW1teSBjb25zdGFudC4KICAgIHJldHVybiBub2RlOwogIH0KCiAgdm9pZCB0cnlSZXBsYWNlRXhwbGljaXRSZWNlaXZlcldpdGhEdW1teShISW52b2tlIG5vZGUsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBNZW1iZXJFbnRpdHkgdGFyZ2V0LCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIC8vIENhbGxzIG9mIHRoZSBmb3JtCiAgICAvLwogICAgLy8gICAgIGEuZm9vJDEoYSwgeCkKICAgIC8vCiAgICAvLyB3aGVyZSB0aGUgaW50ZXJjZXB0b3IgY2FsbGluZyBjb252ZW50aW9uIGlzIHVzZWQgY29tZSBmcm9tIHJlY29nbml6aW5nCiAgICAvLyB0aGF0ICdhJyBpcyBhICdzZWxmLWludGVyY2VwdG9yJy4gIElmIHRoZSBzZWxlY3RvciBtYXRjaGVzIG9ubHkgbWV0aG9kcwogICAgLy8gdGhhdCBpZ25vcmUgdGhlIGV4cGxpY2l0IHJlY2VpdmVyIHBhcmFtZXRlciwgcmVwbGFjZSBvY2N1cnJlbmNlcyBvZiB0aGUKICAgIC8vIHJlY2VpdmVyIGFyZ3VtZW50IHdpdGggYSBkdW1teSByZWNlaXZlciAnMCc6CiAgICAvLwogICAgLy8gICAgIGEuZm9vJDEoYSwgeCkgICAtLS0+ICAgYS5mb28kMSgwLCB4KQogICAgLy8KICAgIC8vIFRoaXMgb2Z0ZW4gcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMgdG8gJ2EnIHRvIG9uZSwgYWxsb3dpbmcgJ2EnCiAgICAvLyB0byBiZSBnZW5lcmF0ZWQgYXQgdXNlIHRvIGF2b2lkIGEgdGVtcG9yYXJ5LCBlLmcuCiAgICAvLwogICAgLy8gICAgIHQxID0gYi5nZXQkdGhpbmcoKTsKICAgIC8vICAgICB0MS5mb28kMSh0MSwgeCkKICAgIC8vIC0tLT4KICAgIC8vICAgICBiLmdldCR0aGluZygpLmZvbyQxKDAsIHgpCiAgICAvLwogICAgYXNzZXJ0KHRhcmdldCAhPSBudWxsIHx8IG1hc2sgIT0gbnVsbCk7CgogICAgaWYgKCFub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSByZXR1cm47CgogICAgLy8gVE9ETygxNTkzMyk6IE1ha2UgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgcHJvcGVydHkgZXh0cmFjdGlvbiBjbG9zdXJlcwogICAgLy8gd29yayB3aXRoIHRoZSBkdW1teSByZWNlaXZlciBvcHRpbWl6YXRpb24uCiAgICBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHJldHVybjsKCiAgICAvLyBUaGlzIGFzc2lnbm1lbnQgb2YgaW5wdXRzIGlzIHVuaWZvcm0gZm9yIEhJbnZva2VEeW5hbWljIGFuZCBISW52b2tlU3VwZXIuCiAgICBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3IgPSBub2RlLmlucHV0c1swXTsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlckFyZ3VtZW50ID0gbm9kZS5pbnB1dHNbMV07CgogICAgLy8gQSAnc2VsZi1pbnRlcmNlcHRvcic/CiAgICBpZiAoaW50ZXJjZXB0b3Iubm9uQ2hlY2soKSAhPSByZWNlaXZlckFyZ3VtZW50Lm5vbkNoZWNrKCkpIHJldHVybjsKCiAgICAvLyBUT0RPKHNyYSk6IFNob3VsZCB0aGlzIGJlIGFuIGFzc2VydD8KICAgIGlmICghX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkU2VsZWN0b3Ioc2VsZWN0b3IpKSByZXR1cm47CgogICAgaWYgKHRhcmdldCAhPSBudWxsKSB7CiAgICAgIC8vIEEgY2FsbCB0aGF0IHJlc29sdmVzIHRvIGEgc2luZ2xlIGluc3RhbmNlIG1ldGhvZCAoZWxlbWVudCkgcmVxdWlyZXMgdGhlCiAgICAgIC8vIGNhbGxpbmcgY29udmVudGlvbiBjb25zaXN0ZW50IHdpdGggdGhlIG1ldGhvZC4KICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgICBhc3NlcnQoX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkTWV0aG9kKHRhcmdldCkpOwogICAgICBpZiAoX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkQ2xhc3MoY2xzKSkgcmV0dXJuOwogICAgfSBlbHNlIGlmIChfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRNaXhpblNlbGVjdG9yKAogICAgICAgIHNlbGVjdG9yLCBtYXNrLCBfY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0KICAgICAgICBEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZShyZWNlaXZlckFyZ3VtZW50Lmluc3RydWN0aW9uVHlwZSk7CiAgICBIQ29uc3RhbnQgZHVtbXkgPSBncmFwaC5hZGRDb25zdGFudChjb25zdGFudCwgX2Nsb3NlZFdvcmxkKTsKICAgIHJlY2VpdmVyQXJndW1lbnQudXNlZEJ5LnJlbW92ZShub2RlKTsKICAgIG5vZGUuaW5wdXRzWzFdID0gZHVtbXk7CiAgICBkdW1teS51c2VkQnkuYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0RmllbGRTZXQoSEZpZWxkU2V0IHNldHRlcikgewogICAgLy8gUGF0dGVybiBtYXRjaAogICAgLy8gICAgIHQxID0geC5mOyB0MiA9IHQxICsgMTsgeC5mID0gdDI7IHVzZSh0MikgICAtLT4gICsreC5mCiAgICAvLyAgICAgdDEgPSB4LmY7IHQyID0gdDEgb3AgeTsgeC5mID0gdDI7IHVzZSh0MikgIC0tPiAgeC5mIG9wPSB5CiAgICAvLyAgICAgdDEgPSB4LmY7IHQyID0gdDEgKyAxOyB4LmYgPSB0MjsgdXNlKHQxKSAgIC0tPiAgeC5mKysKICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gc2V0dGVyLmJsb2NrOwogICAgSEluc3RydWN0aW9uIG9wID0gc2V0dGVyLnZhbHVlOwogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gc2V0dGVyLnJlY2VpdmVyOwoKICAgIGJvb2wgaXNNYXRjaGluZ1JlYWQoSEluc3RydWN0aW9uIGNhbmRpZGF0ZSkgewogICAgICBpZiAoY2FuZGlkYXRlIGlzIEhGaWVsZEdldCkgewogICAgICAgIGlmIChjYW5kaWRhdGUuZWxlbWVudCAhPSBzZXR0ZXIuZWxlbWVudCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChjYW5kaWRhdGUucmVjZWl2ZXIgIT0gc2V0dGVyLnJlY2VpdmVyKSByZXR1cm4gZmFsc2U7CiAgICAgICAgLy8gUmVjb2duaXplIG9ubHkgdGhyZWUgaW5zdHJ1Y3Rpb25zIGluIHNlcXVlbmNlIGluIHRoZSBzYW1lIGJsb2NrLiBUaGlzCiAgICAgICAgLy8gY291bGQgYmUgYnJvYWRlbmVkIHRvIGFsbG93IG5vbi1pbnRlcmZlcmluZyBpbnRlcmxlYXZlZCBpbnN0cnVjdGlvbnMuCiAgICAgICAgaWYgKG9wLmJsb2NrICE9IGJsb2NrKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKGNhbmRpZGF0ZS5ibG9jayAhPSBibG9jaykgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChzZXR0ZXIucHJldmlvdXMgIT0gb3ApIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAob3AucHJldmlvdXMgIT0gY2FuZGlkYXRlKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBub01hdGNoaW5nUmVhZCgpIHsKICAgICAgLy8gSWYgd2UgaGF2ZSBvdGhlciBIRmllbGRTZXQgb3B0aW1pemF0aW9ucywgdGhleSBnbyBoZXJlLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gcmVwbGFjZU9wKEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCwgSEluc3RydWN0aW9uIGdldHRlcikgewogICAgICBibG9jay5hZGRCZWZvcmUoc2V0dGVyLCByZXBsYWNlbWVudCk7CiAgICAgIGJsb2NrLnJlbW92ZShzZXR0ZXIpOwogICAgICBibG9jay5yZXdyaXRlKG9wLCByZXBsYWNlbWVudCk7CiAgICAgIGJsb2NrLnJlbW92ZShvcCk7CiAgICAgIGJsb2NrLnJlbW92ZShnZXR0ZXIpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gcGx1c09yTWludXMoU3RyaW5nIGFzc2lnbk9wLCBTdHJpbmcgaW5jcmVtZW50T3ApIHsKICAgICAgSEludm9rZUJpbmFyeSBiaW5hcnkgPSBvcDsKICAgICAgSEluc3RydWN0aW9uIGxlZnQgPSBiaW5hcnkubGVmdDsKICAgICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gYmluYXJ5LnJpZ2h0OwogICAgICBpZiAoaXNNYXRjaGluZ1JlYWQobGVmdCkpIHsKICAgICAgICBpZiAobGVmdC51c2VkQnkubGVuZ3RoID09IDEpIHsKICAgICAgICAgIGlmIChyaWdodCBpcyBIQ29uc3RhbnQgJiYgcmlnaHQuY29uc3RhbnQuaXNPbmUpIHsKICAgICAgICAgICAgSEluc3RydWN0aW9uIHJtdyA9IG5ldyBIUmVhZE1vZGlmeVdyaXRlLnByZU9wKAogICAgICAgICAgICAgICAgc2V0dGVyLmVsZW1lbnQsIGluY3JlbWVudE9wLCByZWNlaXZlciwgb3AuaW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VPcChybXcsIGxlZnQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgSEluc3RydWN0aW9uIHJtdyA9IG5ldyBIUmVhZE1vZGlmeVdyaXRlLmFzc2lnbk9wKAogICAgICAgICAgICAgICAgc2V0dGVyLmVsZW1lbnQsIGFzc2lnbk9wLCByZWNlaXZlciwgcmlnaHQsIG9wLmluc3RydWN0aW9uVHlwZSk7CiAgICAgICAgICAgIHJldHVybiByZXBsYWNlT3Aocm13LCBsZWZ0KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG9wLnVzZWRCeS5sZW5ndGggPT0gMSAmJgogICAgICAgICAgICByaWdodCBpcyBIQ29uc3RhbnQgJiYKICAgICAgICAgICAgcmlnaHQuY29uc3RhbnQuaXNPbmUpIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBybXcgPSBuZXcgSFJlYWRNb2RpZnlXcml0ZS5wb3N0T3AoCiAgICAgICAgICAgICAgc2V0dGVyLmVsZW1lbnQsIGluY3JlbWVudE9wLCByZWNlaXZlciwgb3AuaW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgICAgIGJsb2NrLmFkZEFmdGVyKGxlZnQsIHJtdyk7CiAgICAgICAgICBibG9jay5yZW1vdmUoc2V0dGVyKTsKICAgICAgICAgIGJsb2NrLnJlbW92ZShvcCk7CiAgICAgICAgICBibG9jay5yZXdyaXRlKGxlZnQsIHJtdyk7CiAgICAgICAgICBibG9jay5yZW1vdmUobGVmdCk7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vTWF0Y2hpbmdSZWFkKCk7CiAgICB9CgogICAgSEluc3RydWN0aW9uIHNpbXBsZSgKICAgICAgICBTdHJpbmcgYXNzaWduT3AsIEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQpIHsKICAgICAgaWYgKGlzTWF0Y2hpbmdSZWFkKGxlZnQpKSB7CiAgICAgICAgaWYgKGxlZnQudXNlZEJ5Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gcm13ID0gbmV3IEhSZWFkTW9kaWZ5V3JpdGUuYXNzaWduT3AoCiAgICAgICAgICAgICAgc2V0dGVyLmVsZW1lbnQsIGFzc2lnbk9wLCByZWNlaXZlciwgcmlnaHQsIG9wLmluc3RydWN0aW9uVHlwZSk7CiAgICAgICAgICByZXR1cm4gcmVwbGFjZU9wKHJtdywgbGVmdCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBub01hdGNoaW5nUmVhZCgpOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBzaW1wbGVCaW5hcnkoU3RyaW5nIGFzc2lnbk9wKSB7CiAgICAgIEhJbnZva2VCaW5hcnkgYmluYXJ5ID0gb3A7CiAgICAgIHJldHVybiBzaW1wbGUoYXNzaWduT3AsIGJpbmFyeS5sZWZ0LCBiaW5hcnkucmlnaHQpOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBiaXRvcChTdHJpbmcgYXNzaWduT3ApIHsKICAgICAgLy8gSEJpdEFuZCwgSEJpdE9yIGV0Yy4gYXJlIG1vcmUgZGlmZmljdWx0IGJlY2F1c2UgSEJpdEFuZChhLngsIHkpCiAgICAgIC8vIHNvbWV0aW1lcyBuZWVkcyB0byBiZSBmb3JjZWQgdG8gdW5zaWduZWQ6IGEueCA9IChhLnggJiB5KSA+Pj4gMC4KICAgICAgaWYgKG9wLmlzVUludDMxKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIHNpbXBsZUJpbmFyeShhc3NpZ25PcCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vTWF0Y2hpbmdSZWFkKCk7CiAgICB9CgogICAgaWYgKG9wIGlzIEhBZGQpIHJldHVybiBwbHVzT3JNaW51cygnKycsICcrKycpOwogICAgaWYgKG9wIGlzIEhTdWJ0cmFjdCkgcmV0dXJuIHBsdXNPck1pbnVzKCctJywgJy0tJyk7CgogICAgaWYgKG9wIGlzIEhTdHJpbmdDb25jYXQpIHJldHVybiBzaW1wbGUoJysnLCBvcC5sZWZ0LCBvcC5yaWdodCk7CgogICAgaWYgKG9wIGlzIEhNdWx0aXBseSkgcmV0dXJuIHNpbXBsZUJpbmFyeSgnKicpOwogICAgaWYgKG9wIGlzIEhEaXZpZGUpIHJldHVybiBzaW1wbGVCaW5hcnkoJy8nKTsKCiAgICBpZiAob3AgaXMgSEJpdEFuZCkgcmV0dXJuIGJpdG9wKCcmJyk7CiAgICBpZiAob3AgaXMgSEJpdE9yKSByZXR1cm4gYml0b3AoJ3wnKTsKICAgIGlmIChvcCBpcyBIQml0WG9yKSByZXR1cm4gYml0b3AoJ14nKTsKCiAgICByZXR1cm4gbm9NYXRjaGluZ1JlYWQoKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SWYoSElmIG5vZGUpIHsKICAgIGlmICghX29wdGlvbnMuZXhwZXJpbWVudFRvQm9vbGVhbikgcmV0dXJuIG5vZGU7CiAgICBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uID0gbm9kZS5pbnB1dHMuc2luZ2xlOwogICAgLy8gaWYgKHggIT0gbnVsbCkgLS0+IGlmICh4KQogICAgaWYgKGNvbmRpdGlvbiBpcyBITm90KSB7CiAgICAgIEhJbnN0cnVjdGlvbiB0ZXN0ID0gY29uZGl0aW9uLmlucHV0cy5zaW5nbGU7CiAgICAgIGlmICh0ZXN0IGlzIEhJZGVudGl0eSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBvcGVyYW5kMSA9IHRlc3QuaW5wdXRzWzBdOwogICAgICAgIEhJbnN0cnVjdGlvbiBvcGVyYW5kMiA9IHRlc3QuaW5wdXRzWzFdOwogICAgICAgIGlmIChvcGVyYW5kMi5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgICAgIV9pbnRlcmNlcHRlZChvcGVyYW5kMS5pbnN0cnVjdGlvblR5cGUpKSB7CiAgICAgICAgICBpZiAodGVzdC51c2VkQnkubGVuZ3RoID09IDEgJiYgY29uZGl0aW9uLnVzZWRCeS5sZW5ndGggPT0gMSkgewogICAgICAgICAgICBub2RlLmNoYW5nZVVzZShjb25kaXRpb24sIG9wZXJhbmQxKTsKICAgICAgICAgICAgY29uZGl0aW9uLmJsb2NrLnJlbW92ZShjb25kaXRpb24pOwogICAgICAgICAgICB0ZXN0LmJsb2NrLnJlbW92ZSh0ZXN0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIGlmICh4ID09IG51bGwpID0+IGlmICgheCkKICAgIGlmIChjb25kaXRpb24gaXMgSElkZW50aXR5ICYmIGNvbmRpdGlvbi51c2VkQnkubGVuZ3RoID09IDEpIHsKICAgICAgSEluc3RydWN0aW9uIG9wZXJhbmQxID0gY29uZGl0aW9uLmlucHV0c1swXTsKICAgICAgSEluc3RydWN0aW9uIG9wZXJhbmQyID0gY29uZGl0aW9uLmlucHV0c1sxXTsKICAgICAgaWYgKG9wZXJhbmQyLmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgIV9pbnRlcmNlcHRlZChvcGVyYW5kMS5pbnN0cnVjdGlvblR5cGUpKSB7CiAgICAgICAgdmFyIG5vdCA9IEhOb3Qob3BlcmFuZDEsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICAgICAgICBub2RlLmJsb2NrLmFkZEJlZm9yZShub2RlLCBub3QpOwogICAgICAgIG5vZGUuY2hhbmdlVXNlKGNvbmRpdGlvbiwgbm90KTsKICAgICAgICBjb25kaXRpb24uYmxvY2sucmVtb3ZlKGNvbmRpdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KfQoKLy8vIFJlbW92ZSBbSFR5cGVLbm93bl0gaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGdyYXBoLCB0byBtYWtlIGNvZGVnZW4KLy8vIGFuYWx5c2lzIGVhc2llci4KY2xhc3MgU3NhVHlwZUtub3duUmVtb3ZlciBleHRlbmRzIEhCYXNlVmlzaXRvciB3aXRoIENvZGVnZW5QaGFzZSB7CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgdmlzaXREb21pbmF0b3JUcmVlKGdyYXBoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUtub3duKEhUeXBlS25vd24gaW5zdHJ1Y3Rpb24pIHsKICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gaW5zdHJ1Y3Rpb24udXNlZEJ5KSB7CiAgICAgIGlmICh1c2VyIGlzIEhUeXBlQ29udmVyc2lvbikgewogICAgICAgIHVzZXIuaW5wdXRUeXBlID0gaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlOwogICAgICB9IGVsc2UgaWYgKHVzZXIgaXMgSFByaW1pdGl2ZUNoZWNrKSB7CiAgICAgICAgdXNlci5pbnB1dFR5cGUgPSBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGU7CiAgICAgIH0KICAgIH0KICAgIGluc3RydWN0aW9uLmJsb2NrLnJld3JpdGUoaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uLmNoZWNrZWRJbnB1dCk7CiAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogIH0KfQoKLy8vIFJlbW92ZSBbSFByaW1pdGl2ZUNoZWNrXSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgZ3JhcGggaW4gJy0tdHJ1c3QtcHJpbWl0aXZlcycKLy8vIG1vZGUuCmNsYXNzIFNzYVRydXN0ZWRDaGVja1JlbW92ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3Igd2l0aCBDb2RlZ2VuUGhhc2UgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKCiAgU3NhVHJ1c3RlZENoZWNrUmVtb3Zlcih0aGlzLl9vcHRpb25zKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgaWYgKCFfb3B0aW9ucy50cnVzdFByaW1pdGl2ZXMpIHJldHVybjsKICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBpbnN0cnVjdGlvbikgewogICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmV3cml0ZShpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0KTsKICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbENvbnZlcnNpb24oSEJvb2xDb252ZXJzaW9uIGluc3RydWN0aW9uKSB7CiAgICBpbnN0cnVjdGlvbi5ibG9jay5yZXdyaXRlKGluc3RydWN0aW9uLCBpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXQpOwogICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICB9Cn0KCi8vLyBVc2UgdGhlIHJlc3VsdCBvZiBzdGF0aWMgYW5kIGZpZWxkIGFzc2lnbm1lbnRzIHdoZXJlIGl0IGlzIHByb2ZpdGFibGUgdG8gdXNlCi8vLyB0aGUgcmVzdWx0IG9mIHRoZSBhc3NpZ25tZW50IGluc3RlYWQgb2YgdGhlIHZhbHVlLgovLy8KLy8vICAgICBhLnggPSB2OwovLy8gICAgIGIueSA9IHY7Ci8vLyAtLT4KLy8vICAgICBiLnkgPSBhLnggPSB2OwpjbGFzcyBTc2FBc3NpZ25tZW50Q2hhaW5pbmcgZXh0ZW5kcyBIQmFzZVZpc2l0b3Igd2l0aCBDb2RlZ2VuUGhhc2UgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIC8vSEdyYXBoIGdyYXBoOwoKICBTc2FBc3NpZ25tZW50Q2hhaW5pbmcodGhpcy5fb3B0aW9ucywgdGhpcy5fY2xvc2VkV29ybGQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgLy90aGlzLmdyYXBoID0gZ3JhcGg7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGUubmV4dDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEZpZWxkU2V0KEhGaWVsZFNldCBzZXR0ZXIpIHsKICAgIHJldHVybiB0cnlDaGFpbkFzc2lnbm1lbnQoc2V0dGVyLCBzZXR0ZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0U3RhdGljU3RvcmUoSFN0YXRpY1N0b3JlIHN0b3JlKSB7CiAgICByZXR1cm4gdHJ5Q2hhaW5Bc3NpZ25tZW50KHN0b3JlLCBzdG9yZS5pbnB1dHMuc2luZ2xlKTsKICB9CgogIEhJbnN0cnVjdGlvbiB0cnlDaGFpbkFzc2lnbm1lbnQoSEluc3RydWN0aW9uIHNldHRlciwgSEluc3RydWN0aW9uIHZhbHVlKSB7CiAgICAvLyBUcnkgdG8gdXNlIHJlc3VsdCBvZiBmaWVsZCBvciBzdGF0aWMgYXNzaWdubWVudAogICAgLy8KICAgIC8vICAgICB0MSA9IHY7ICB4LmYgPSB0MTsgIC4uLiB0MSAuLi4KICAgIC8vIC0tPgogICAgLy8gICAgIHQxID0geC5mID0gdjsgIC4uLiB0MSAuLi4KICAgIC8vCgogICAgLy8gU2luZ2xlIHVzZSBpcyB0aGlzIHNldHRlciBzbyB0aGVyZSB3aWxsIGJlIG5vIG90aGVyIHVzZXMgdG8gY2hhaW4gdG8uCiAgICBpZiAodmFsdWUudXNlZEJ5Lmxlbmd0aCA8PSAxKSByZXR1cm4gc2V0dGVyLm5leHQ7CgogICAgLy8gSXQgaXMgYWx3YXlzIHdvcnRod2hpbGUgY2hhaW5pbmcgaW50byBhbm90aGVyIHNldHRlciwgc2luY2UgaXQgcmVkdWNlcwogICAgLy8gdGhlIG51bWJlciBvZiByZWZlcmVuY2VzIHRvIFt2YWx1ZV0uCiAgICBISW5zdHJ1Y3Rpb24gY2hhaW4gPSBzZXR0ZXI7CiAgICBzZXR0ZXIuaW5zdHJ1Y3Rpb25UeXBlID0gdmFsdWUuaW5zdHJ1Y3Rpb25UeXBlOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gY3VycmVudCA9IHNldHRlci5uZXh0OzspIHsKICAgICAgaWYgKGN1cnJlbnQgaXMgSEZpZWxkU2V0KSB7CiAgICAgICAgSEZpZWxkU2V0IG5leHRTZXR0ZXIgPSBjdXJyZW50OwogICAgICAgIGlmIChuZXh0U2V0dGVyLnZhbHVlID09IHZhbHVlICYmIG5leHRTZXR0ZXIucmVjZWl2ZXIgIT0gdmFsdWUpIHsKICAgICAgICAgIG5leHRTZXR0ZXIuY2hhbmdlVXNlKHZhbHVlLCBjaGFpbik7CiAgICAgICAgICBuZXh0U2V0dGVyLmluc3RydWN0aW9uVHlwZSA9IHZhbHVlLmluc3RydWN0aW9uVHlwZTsKICAgICAgICAgIGNoYWluID0gbmV4dFNldHRlcjsKICAgICAgICAgIGN1cnJlbnQgPSBuZXh0U2V0dGVyLm5leHQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY3VycmVudCBpcyBIU3RhdGljU3RvcmUpIHsKICAgICAgICBIU3RhdGljU3RvcmUgbmV4dFN0b3JlID0gY3VycmVudDsKICAgICAgICBpZiAobmV4dFN0b3JlLnZhbHVlID09IHZhbHVlKSB7CiAgICAgICAgICBuZXh0U3RvcmUuY2hhbmdlVXNlKHZhbHVlLCBjaGFpbik7CiAgICAgICAgICBuZXh0U3RvcmUuaW5zdHJ1Y3Rpb25UeXBlID0gdmFsdWUuaW5zdHJ1Y3Rpb25UeXBlOwogICAgICAgICAgY2hhaW4gPSBuZXh0U3RvcmU7CiAgICAgICAgICBjdXJyZW50ID0gbmV4dFN0b3JlLm5leHQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY3VycmVudCBpcyBIUmV0dXJuKSB7CiAgICAgICAgaWYgKGN1cnJlbnQuaW5wdXRzLnNpbmdsZSA9PSB2YWx1ZSkgewogICAgICAgICAgY3VycmVudC5jaGFuZ2VVc2UodmFsdWUsIGNoYWluKTsKICAgICAgICAgIHJldHVybiBjdXJyZW50Lm5leHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGZpbmFsIEhJbnN0cnVjdGlvbiBuZXh0ID0gY2hhaW4ubmV4dDsKCiAgICBpZiAodmFsdWUudXNlZEJ5Lmxlbmd0aCA8PSAxKSByZXR1cm4gbmV4dDsgLy8gc2V0dGVyIGlzIG9ubHkgcmVtYWluaW5nIHVzZS4KCiAgICAvLyBDaGFpbiB0byBvdGhlciBwbGFjZXMuCiAgICB2YXIgdXNlcyA9IERvbWluYXRlZFVzZXMub2YodmFsdWUsIGNoYWluLCBleGNsdWRlRG9taW5hdG9yOiB0cnVlKTsKCiAgICBpZiAodXNlcy5pc0VtcHR5KSByZXR1cm4gbmV4dDsKCiAgICBib29sIHNpbXBsZVNvdXJjZSA9IHZhbHVlIGlzIEhDb25zdGFudCB8fCB2YWx1ZSBpcyBIUGFyYW1ldGVyVmFsdWU7CgogICAgaWYgKHVzZXMuaXNTaW5nbGV0b24pIHsKICAgICAgdmFyIHVzZSA9IHVzZXMuc2luZ2xlOwogICAgICBpZiAodXNlIGlzIEhQaGkpIHsKICAgICAgICAvLyBGaWx0ZXIgb3V0IGJhY2stZWRnZXMgLSB0aGF0IGNhdXNlcyBwcm9ibGVtcyBmb3IgdmFyaWFibGUKICAgICAgICAvLyBhc3NpZ25tZW50LgogICAgICAgIC8vIFRPRE8oc3JhKTogQmV0dGVyIGFuYWx5c2lzIHRvIHBlcm1pdCBwaGlzIHRoYXQgYXJlIHBhcnQgb2YgYQogICAgICAgIC8vIGZvcndhcmRzLW9ubHkgdHJlZS4KICAgICAgICBpZiAodXNlLmJsb2NrLmlkIDwgY2hhaW4uYmxvY2suaWQpIHJldHVybiBuZXh0OwogICAgICAgIGlmICh1c2UudXNlZEJ5LmFueSgobm9kZSkgPT4gbm9kZSBpcyBIUGhpKSkgcmV0dXJuIG5leHQ7CgogICAgICAgIC8vIEEgZm9yd2FyZCBwaGkgb2Z0ZW4gaGFzIGEgbmV3IG5hbWUuIFdlIHdhbnQgdG8gYXZvaWQgW3ZhbHVlXSBoYXZpbmcgYQogICAgICAgIC8vIG5hbWUgYXQgdGhlIHNhbWUgdGltZSwgc28gY2hhaW4gaW50byB0aGUgcGhpIG9ubHkgaWYgW3ZhbHVlXSAoMSkgd2lsbAogICAgICAgIC8vIG5ldmVyIGhhdmUgYSBuYW1lIChsaWtlIGEgY29uc3RhbnQpICgyKSB1bmF2b2lkYWJseSBoYXMgYSBuYW1lCiAgICAgICAgLy8gKGUuZy4gYSBwYXJhbWV0ZXIpIG9yICgzKSBjaGFpbmluZyB3aWxsIHJlc3VsdCBpbiBhIHNpbmdsZSB1c2UgdGhhdAogICAgICAgIC8vIHZhcmlhYmxlIGFsbG9jYXRvciBjYW4gdHJ5IHRvIG5hbWUgY29uc2lzdGVudGx5IHdpdGggdGhlIG90aGVyIHBoaQogICAgICAgIC8vIGlucHV0cy4KICAgICAgICBpZiAoc2ltcGxlU291cmNlIHx8IHZhbHVlLnVzZWRCeS5sZW5ndGggPD0gMikgewogICAgICAgICAgaWYgKHZhbHVlLmlzUHVyZShfYWJzdHJhY3RWYWx1ZURvbWFpbikgfHwKICAgICAgICAgICAgICBzZXR0ZXIucHJldmlvdXMgPT0gdmFsdWUgfHwKICAgICAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nIHRlc3RzIGZvciBpbW1lZGlhdGVseSBwcmV2aW91cyBwaGkuCiAgICAgICAgICAgICAgKHNldHRlci5wcmV2aW91cyA9PSBudWxsICYmIHZhbHVlLmJsb2NrID09IHNldHRlci5ibG9jaykpIHsKICAgICAgICAgICAgdXNlcy5yZXBsYWNlV2l0aChjaGFpbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICAgIC8vIFRPRE8oc3JhKTogQ2hhaW5zIHdpdGggb25lIHJlbWFpbmluZyBwb3RlbnRpYWwgdXNlIGhhdmUgdGhlIHBvdGVudGlhbAogICAgICAvLyB0byBnZW5lcmF0ZSBodWdlIGV4cHJlc3Npb24gY29udGFpbmluZyBtYW55IG5lc3RlZCBhc3NpZ25tZW50cy4gVGhpcwogICAgICAvLyB3aWxsIGJlIHNtYWxsZXIgYnV0IG5lYXJseSBpbXBvc3NpYmxlIHRvIHJlYWQuIEFyZSB0aGVyZSBpbnRlcmlvcgogICAgICAvLyBwb3NpdGlvbnMgdGhhdCB3ZSBzaG91bGQgY2hhaW4gaW50byBiZWNhdXNlIHRoZXkgYXJlIG5vdCB0b28gZGlmZmljdWx0CiAgICAgIC8vIHRvIHJlYWQ/CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIGlmIChzaW1wbGVTb3VyY2UpIHJldHVybiBuZXh0OwoKICAgIC8vIElmIHRoZXJlIGFyZSBtYW55IHJlbWFpbmluZyB1c2VzLCBidXQgdGhleSBhcmUgYWxsIGRvbWluYXRlZCBieSBbY2hhaW5dLAogICAgLy8gdGhlIHZhcmlhYmxlIGFsbG9jYXRvciB3aWxsIHRyeSB0byBnaXZlIHRoZW0gYWxsIHRoZSBzYW1lIG5hbWUuCiAgICBpZiAodXNlcy5sZW5ndGggPj0gMiAmJgogICAgICAgIHZhbHVlLnVzZWRCeS5sZW5ndGggLSB1c2VzLmxlbmd0aCA8PSAxICYmCiAgICAgICAgdmFsdWUgPT0gdmFsdWUubm9uQ2hlY2soKSkgewogICAgICAvLyBJZiBbdmFsdWVdIGlzIGEgcGhpLCBpdCBtaWdodCBoYXZlIGEgbmFtZS4gRXhjZXB0aW9ucyBhcmUgcGhpcyB0aGF0IGNhbgogICAgICAvLyBiZSBjb21waWxlZCBpbnRvIGV4cHJlc3Npb25zIGxpa2UgYGE/YjpjYCBhbmQgYGEmJmJgLiBXZSBjYW4ndCB0ZWxsCiAgICAgIC8vIGhlcmUgaWYgdGhlIHBoaSBpcyBhbiBleHByZXNzaW9uLCB3aGljaCB3ZSBjb3VsZCBjaGFpbiwgb3IgYW4KICAgICAgLy8gaWYtdGhlbi1lbHNlIHdpdGggYXNzaWdubWVudHMgdG8gYSB2YXJpYWJsZS4gSWYgd2UgdHJ5IHRvIGNoYWluIGFuCiAgICAgIC8vIGlmLXRoZW4tZWxzZSBwaGkgd2Ugd2lsbCBlbmQgdXAgZ2VuZXJhdGluZyBjb2RlIGxpa2UKICAgICAgLy8KICAgICAgLy8gICAgIHQyID0gdGhpcy54ID0gdDE7ICAvLyB0MSBpcyB0aGUgcGhpLCB0MiBpcyB0aGUgY2hhaW5lZCBuYW1lCiAgICAgIC8vCiAgICAgIGlmICh2YWx1ZSBpcyBIUGhpKSByZXR1cm4gbmV4dDsKCiAgICAgIC8vIFdlIG5lZWQgW3ZhbHVlXSB0byBiZSBnZW5lcmF0ZS1hdC11c2UgaW4gdGhlIHNldHRlciB0byBhdm9pZCBpdCBoYXZpbmcKICAgICAgLy8gYSBuYW1lLiBBcyBhIHF1aWNrIGNoZWNrIGZvciBnZW5lcmF0ZS1hdC11c2UsIGFjY2VwdCBwdXJlIGFuZAogICAgICAvLyBpbW1lZGlhdGVseSBwcmVjZWRpbmcgaW5zdHJ1Y3Rpb25zLgogICAgICBpZiAodmFsdWUuaXNQdXJlKF9hYnN0cmFjdFZhbHVlRG9tYWluKSB8fCBzZXR0ZXIucHJldmlvdXMgPT0gdmFsdWUpIHsKICAgICAgICAvLyBUT0RPKHNyYSk6IFdlIGNhbiB0b2xlcmF0ZSBhIGZldyBub24tdGhyb3dpbmcgbG9hZHMgYmV0d2VlbiBzZXR0ZXIKICAgICAgICAvLyBhbmQgdmFsdWUuCiAgICAgICAgdXNlcy5yZXBsYWNlV2l0aChjaGFpbik7CiAgICAgICAgY2hhaW4uc291cmNlRWxlbWVudCA/Pz0gdmFsdWUuc291cmNlRWxlbWVudDsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICByZXR1cm4gbmV4dDsKICB9Cn0KCi8vLyBJbnN0ZWFkIG9mIGVtaXR0aW5nIGVhY2ggU1NBIGluc3RydWN0aW9uIHdpdGggYSB0ZW1wb3JhcnkgdmFyaWFibGUKLy8vIG1hcmsgaW5zdHJ1Y3Rpb25zIHRoYXQgY2FuIGJlIGVtaXR0ZWQgYXQgdGhlaXIgdXNlLXNpdGUuCi8vLyBGb3IgZXhhbXBsZSwgaW46Ci8vLyAgIHQwID0gNDsKLy8vICAgdDEgPSAzOwovLy8gICB0MiA9IGFkZCh0MCwgdDEpOwovLy8gdDAgYW5kIHQxIHdvdWxkIGJlIG1hcmtlZCBhbmQgdGhlIHJlc3VsdGluZyBjb2RlIHdvdWxkIHRoZW4gYmU6Ci8vLyAgIHQyID0gYWRkKDQsIDMpOwpjbGFzcyBTc2FJbnN0cnVjdGlvbk1lcmdlciBleHRlbmRzIEhCYXNlVmlzaXRvciB3aXRoIENvZGVnZW5QaGFzZSB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZURvbWFpbiBfYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgLy8vIExpc3Qgb2YgW0hJbnN0cnVjdGlvbl0gdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gbWVyZ2VyIGV4cGVjdHMgaW4KICAvLy8gb3JkZXIgd2hlbiB2aXNpdGluZyB0aGUgaW5wdXRzIG9mIGFuIGluc3RydWN0aW9uLgogIExpc3Q8SEluc3RydWN0aW9uPiBleHBlY3RlZElucHV0czsKCiAgLy8vIFNldCBvZiBwdXJlIFtISW5zdHJ1Y3Rpb25dIHRoYXQgdGhlIGluc3RydWN0aW9uIG1lcmdlciBleHBlY3RzIHRvCiAgLy8vIGZpbmQuIFRoZSBvcmRlciBvZiBwdXJlIGluc3RydWN0aW9ucyBkbyBub3QgbWF0dGVyLCBhcyB0aGV5IHdpbGwKICAvLy8gbm90IGJlIGFmZmVjdGVkIGJ5IHNpZGUgZWZmZWN0cy4KICBTZXQ8SEluc3RydWN0aW9uPiBwdXJlSW5wdXRzOwogIFNldDxISW5zdHJ1Y3Rpb24+IGdlbmVyYXRlQXRVc2VTaXRlOwoKICB2b2lkIG1hcmtBc0dlbmVyYXRlQXRVc2VTaXRlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KCFpbnN0cnVjdGlvbi5pc0pzU3RhdGVtZW50KCkpOwogICAgZ2VuZXJhdGVBdFVzZVNpdGUuYWRkKGluc3RydWN0aW9uKTsKICB9CgogIFNzYUluc3RydWN0aW9uTWVyZ2VyKHRoaXMuX2Fic3RyYWN0VmFsdWVEb21haW4sIHRoaXMuZ2VuZXJhdGVBdFVzZVNpdGUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgdm9pZCBhbmFseXplSW5wdXRzKEhJbnN0cnVjdGlvbiB1c2VyLCBpbnQgc3RhcnQpIHsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSB1c2VyLmlucHV0czsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnB1dHNbaV07CiAgICAgIGlmICghZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoaW5wdXQpICYmCiAgICAgICAgICAhaW5wdXQuaXNDb2RlTW90aW9uSW52YXJpYW50KCkgJiYKICAgICAgICAgIGlucHV0LnVzZWRCeS5sZW5ndGggPT0gMSAmJgogICAgICAgICAgaW5wdXQgaXMhIEhQaGkgJiYKICAgICAgICAgIGlucHV0IGlzISBITG9jYWxWYWx1ZSAmJgogICAgICAgICAgIWlucHV0LmlzSnNTdGF0ZW1lbnQoKSkgewogICAgICAgIGlmIChpc0VmZmVjdGl2ZWx5UHVyZShpbnB1dCkpIHsKICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgYSBwdXJlIGlucHV0IGlmIGl0IGlzIGluIHRoZSBzYW1lIGxvb3AuCiAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIG1pZ2h0IG1vdmUgR1ZOJ2VkIGluc3RydWN0aW9uIGJhY2sgaW50byB0aGUKICAgICAgICAgIC8vIGxvb3AuCiAgICAgICAgICBpZiAodXNlci5oYXNTYW1lTG9vcEhlYWRlckFzKGlucHV0KSkgewogICAgICAgICAgICAvLyBNb3ZlIGl0IGNsb3NlciB0byBbdXNlcl0sIHNvIHRoYXQgaW5zdHJ1Y3Rpb25zIGluCiAgICAgICAgICAgIC8vIGJldHdlZW4gZG8gbm90IHByZXZlbnQgbWFraW5nIGl0IGdlbmVyYXRlIGF0IHVzZSBzaXRlLgogICAgICAgICAgICBpbnB1dC5tb3ZlQmVmb3JlKHVzZXIpOwogICAgICAgICAgICBwdXJlSW5wdXRzLmFkZChpbnB1dCk7CiAgICAgICAgICAgIC8vIFByZXZpb3VzIGNvbXB1dGF0aW9ucyBkb25lIG9uIFtpbnB1dF0gYXJlIG5vdyBpbnZhbGlkCiAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2UgbW92ZWQgW2lucHV0XSB0byBhbm90aGVyIHBsYWNlLiBTbyBhbGwKICAgICAgICAgICAgLy8gbm9uIGNvZGUgbW90aW9uIGludmFyaWFudCBpbnN0cnVjdGlvbnMgbmVlZAogICAgICAgICAgICAvLyB0byBiZSByZW1vdmVkIGZyb20gdGhlIFtnZW5lcmF0ZUF0VXNlU2l0ZV0gc2V0LgogICAgICAgICAgICBpbnB1dC5pbnB1dHMuZm9yRWFjaCgoaW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgICBpZiAoIWluc3RydWN0aW9uLmlzQ29kZU1vdGlvbkludmFyaWFudCgpKSB7CiAgICAgICAgICAgICAgICBnZW5lcmF0ZUF0VXNlU2l0ZS5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIFZpc2l0IHRoZSBwdXJlIGlucHV0IG5vdyBzbyB0aGF0IHRoZSBleHBlY3RlZCBpbnB1dHMKICAgICAgICAgICAgLy8gYXJlIGFmdGVyIHRoZSBleHBlY3RlZCBpbnB1dHMgb2YgW3VzZXJdLgogICAgICAgICAgICBpbnB1dC5hY2NlcHQodGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGV4cGVjdGVkSW5wdXRzLmFkZChpbnB1dCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLyBTb21lIG5vbi1wdXJlIGluc3RydWN0aW9ucyBtYXkgYmUgdHJlYXRlZCBhcyBwdXJlLiBITG9jYWxHZXQgZGVwZW5kcyBvbgogIC8vIGFzc2lnbm1lbnRzLCBidXQgd2UgY2FuIGlnbm9yZSB0aGUgaW5pdGlhbGl6aW5nIGFzc2lnbm1lbnQgc2luY2UgaXQgd2lsbCBieQogIC8vIGNvbnN0cnVjdGlvbiBhbHdheXMgcHJlY2VkZSBhIHVzZS4KICBib29sIGlzRWZmZWN0aXZlbHlQdXJlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uIGlzIEhMb2NhbEdldCkgcmV0dXJuICFpc0Fzc2lnbmVkTG9jYWwoaW5zdHJ1Y3Rpb24ubG9jYWwpOwogICAgcmV0dXJuIGluc3RydWN0aW9uLmlzUHVyZShfYWJzdHJhY3RWYWx1ZURvbWFpbik7CiAgfQoKICBib29sIGlzQXNzaWduZWRMb2NhbChITG9jYWxWYWx1ZSBsb2NhbCkgewogICAgLy8gW0hMb2NhbFZhbHVlXXMgaGF2ZSBhbiBpbml0aWFsaXppbmcgYXNzaWdubWVudCB3aGljaCBpcyBndWFyYW50ZWVkIHRvCiAgICAvLyBwcmVjZWRlIHRoZSB1c2UsIGV4Y2VwdCBmb3IgW0hQYXJhbWV0ZXJWYWx1ZV1zIHdoaWNoIGFyZSAnYXNzaWduZWQnIGF0CiAgICAvLyBlbnRyeS4KICAgIGludCBpbml0aWFsaXppbmdBc3NpZ25tZW50Q291bnQgPSAobG9jYWwgaXMgSFBhcmFtZXRlclZhbHVlKSA/IDAgOiAxOwogICAgcmV0dXJuIGxvY2FsLnVzZWRCeQogICAgICAgIC53aGVyZSgodXNlcikgPT4gdXNlciBpcyBITG9jYWxTZXQpCiAgICAgICAgLnNraXAoaW5pdGlhbGl6aW5nQXNzaWdubWVudENvdW50KQogICAgICAgIC5pc05vdEVtcHR5OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgLy8gQSBjb2RlIG1vdGlvbiBpbnZhcmlhbnQgaW5zdHJ1Y3Rpb24gaXMgZGVhbHQgYmVmb3JlIHZpc2l0aW5nIGl0LgogICAgYXNzZXJ0KCFpbnN0cnVjdGlvbi5pc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSk7CiAgICBhbmFseXplSW5wdXRzKGluc3RydWN0aW9uLCAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnZva2VTdXBlcihISW52b2tlU3VwZXIgaW5zdHJ1Y3Rpb24pIHsKICAgIE1lbWJlckVudGl0eSBzdXBlck1ldGhvZCA9IGluc3RydWN0aW9uLmVsZW1lbnQ7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGluc3RydWN0aW9uLnNlbGVjdG9yOwogICAgLy8gSWYgYWxpYXNlZCBzdXBlciBtZW1iZXJzIGNhbm5vdCBiZSB1c2VkLCB3ZSB3aWxsIGdlbmVyYXRlIGNvZGUgbGlrZQogICAgLy8KICAgIC8vICAgICBDLnByb3RvdHlwZS5tZXRob2QuY2FsbChpbnN0YW5jZSkKICAgIC8vCiAgICAvLyB3aGVyZSBpbnN0YW5jZSBpcyB0aGUgW3RoaXNdIG9iamVjdCBmb3IgdGhlIG1ldGhvZC4gSW4gc3VjaCBhIGNhc2UsIHRoZQogICAgLy8gZ2V0IG9mIHByb3RvdHlwZSBtaWdodCBiZSBldmFsdWF0ZWQgYmVmb3JlIGluc3RhbmNlIGlzIGNyZWF0ZWQgaWYgd2UKICAgIC8vIGdlbmVyYXRlIGluc3RhbmNlIGF0IHVzZSBzaXRlLCB3aGljaCBpbiB0dXJuIG1pZ2h0IHVwZGF0ZSB0aGUgcHJvdG90eXBlCiAgICAvLyBhZnRlciBmaXJzdCBhY2Nlc3MgaWYgd2UgdXNlIGxhenkgaW5pdGlhbGl6YXRpb24uCiAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIHRoZXJlZm9yZSBkb24ndCBhbGxvdyB0aGUgcmVjZWl2ZXIgKHRoZSBmaXJzdCBhcmd1bWVudCkKICAgIC8vIHRvIGJlIGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZSwgYW5kIG9ubHkgYW5hbHl6ZSBhbGwgb3RoZXIgYXJndW1lbnRzLgogICAgaWYgKCFjYW5Vc2VBbGlhc2VkU3VwZXJNZW1iZXIoc3VwZXJNZXRob2QsIHNlbGVjdG9yKSkgewogICAgICBhbmFseXplSW5wdXRzKGluc3RydWN0aW9uLCAxKTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnZpc2l0SW52b2tlU3VwZXIoaW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElzKEhJcyBpbnN0cnVjdGlvbikgewogICAgLy8gSW4gdGhlIGdlbmVyYWwgY2FzZSB0aGUgaW5wdXQgbWlnaHQgYmUgdXNlZCBtdWx0cGxlIG11bHRpcGxlIHRpbWVzLCBzbyBpdAogICAgLy8gbXVzdCBub3QgYmUgc2V0IGdlbmVyYXRlIGF0IHVzZSBzaXRlLgoKICAgIC8vIElmIHRoZSBjb2RlIHdpbGwgZ2VuZXJhdGUgJ2luc3RhbmNlb2YnIHRoZW4gd2UgY2FuIGdlbmVyYXRlIGF0IHVzZSBzaXRlLgogICAgaWYgKGluc3RydWN0aW9uLnVzZUluc3RhbmNlT2YpIHsKICAgICAgYW5hbHl6ZUlucHV0cyhpbnN0cnVjdGlvbiwgMCk7CiAgICB9CgogICAgLy8gQ29tcG91bmQgYW5kIHZhcmlhYmxlIGNoZWNrcyB1c2UgYSBzZXBhcmF0ZSBpbnN0cnVjdGlvbiB0byBjb21wdXRlIHRoZQogICAgLy8gcmVzdWx0LgogICAgaWYgKGluc3RydWN0aW9uLmlzQ29tcG91bmRDaGVjayB8fCBpbnN0cnVjdGlvbi5pc1ZhcmlhYmxlQ2hlY2spIHsKICAgICAgYW5hbHl6ZUlucHV0cyhpbnN0cnVjdGlvbiwgMCk7CiAgICB9CiAgfQoKICAvLyBBIGJvdW5kcyBjaGVjayBtZXRob2QgbXVzdCBub3QgaGF2ZSBpdHMgZmlyc3QgaW5wdXQgZ2VuZXJhdGVkIGF0IHVzZSBzaXRlLAogIC8vIGJlY2F1c2UgaXQncyB1c2luZyBpdCB0d2ljZS4KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm91bmRzQ2hlY2soSEJvdW5kc0NoZWNrIGluc3RydWN0aW9uKSB7CiAgICBhbmFseXplSW5wdXRzKGluc3RydWN0aW9uLCAxKTsKICB9CgogIC8vIEFuIGlkZW50aXR5IG9wZXJhdGlvbiBtdXN0IG9ubHkgaGF2ZSBpdHMgaW5wdXRzIGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZSBpZgogIC8vIGRvZXMgbm90IHJlcXVpcmUgYW4gZXhwcmVzc2lvbiB3aXRoIG11bHRpcGxlIHVzZXMgKGJlY2F1c2Ugb2YgbnVsbCAvCiAgLy8gdW5kZWZpbmVkKS4KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uc2luZ2xlQ29tcGFyaXNvbk9wICE9IG51bGwpIHsKICAgICAgc3VwZXIudmlzaXRJZGVudGl0eShpbnN0cnVjdGlvbik7CiAgICB9CiAgICAvLyBEbyBub3RoaW5nLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVDb252ZXJzaW9uKEhUeXBlQ29udmVyc2lvbiBpbnN0cnVjdGlvbikgewogICAgLy8gVHlwZSBjaGVja3MgYW5kIGNhc3QgY2hlY2tzIGNvbXBpbGUgdG8gY29kZSB0aGF0IG9ubHkgdXNlIHRoZWlyIGlucHV0CiAgICAvLyBvbmNlLCBzbyB3ZSBjYW4gc2FmZWx5IHZpc2l0IHRoZW0gYW5kIHRyeSB0byBtZXJnZSB0aGUgaW5wdXQuCiAgICB2aXNpdEluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc0NoZWNrKEhBc0NoZWNrIGluc3RydWN0aW9uKSB7CiAgICAvLyBUeXBlIGNoZWNrcyBhbmQgY2FzdCBjaGVja3MgY29tcGlsZSB0byBjb2RlIHRoYXQgb25seSB1c2UgdGhlaXIgaW5wdXQKICAgIC8vIG9uY2UsIHNvIHdlIGNhbiBzYWZlbHkgdmlzaXQgdGhlbSBhbmQgdHJ5IHRvIG1lcmdlIHRoZSBpbnB1dC4KICAgIHZpc2l0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzQ2hlY2tTaW1wbGUoSEFzQ2hlY2tTaW1wbGUgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIFR5cGUgY2hlY2tzIGFuZCBjYXN0IGNoZWNrcyBjb21waWxlIHRvIGNvZGUgdGhhdCBvbmx5IHVzZSB0aGVpciBpbnB1dAogICAgLy8gb25jZSwgc28gd2UgY2FuIHNhZmVseSB2aXNpdCB0aGVtIGFuZCB0cnkgdG8gbWVyZ2UgdGhlIGlucHV0LgogICAgdmlzaXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUV2YWwoSFR5cGVFdmFsIGluc3RydWN0aW9uKSB7CiAgICAvLyBUeXBlIGV4cHJlc3Npb25zIGNvbXBpbGUgdG8gY29kZSB0aGF0IG9ubHkgdXNlIHRoZWlyIGlucHV0IG9uY2UsIHNvIHdlCiAgICAvLyBjYW4gc2FmZWx5IHZpc2l0IHRoZW0gYW5kIHRyeSB0byBtZXJnZSB0aGUgaW5wdXQuCiAgICB2aXNpdEluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcmltaXRpdmVDaGVjayhIUHJpbWl0aXZlQ2hlY2sgaW5zdHJ1Y3Rpb24pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlS25vd24oSFR5cGVLbm93biBpbnN0cnVjdGlvbikgewogICAgLy8gW0hUeXBlS25vd25dIGluc3RydWN0aW9ucyBhcmUgcmVtb3ZlZCBiZWZvcmUgY29kZSBnZW5lcmF0aW9uLgogICAgYXNzZXJ0KGZhbHNlKTsKICB9CgogIHZvaWQgdHJ5R2VuZXJhdGVBdFVzZVNpdGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNDb250cm9sRmxvdygpKSByZXR1cm47CiAgICBtYXJrQXNHZW5lcmF0ZUF0VXNlU2l0ZShpbnN0cnVjdGlvbik7CiAgfQoKICBib29sIGlzQmxvY2tTaW5nbGVQcmVkZWNlc3NvcihIQmFzaWNCbG9jayBibG9jaykgewogICAgcmV0dXJuIGJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoID09IDEgJiYKICAgICAgICBibG9jay5zdWNjZXNzb3JzWzBdLnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICAvLyBDb21wZW5zYXRlIGZyb20gbm90IG1lcmdpbmcgYmxvY2tzOiBpZiB0aGUgYmxvY2sgaXMgdGhlCiAgICAvLyBzaW5nbGUgcHJlZGVjZXNzb3Igb2YgaXRzIHNpbmdsZSBzdWNjZXNzb3IsIGxldCB0aGUgc3VjY2Vzc29yCiAgICAvLyB2aXNpdCBpdC4KICAgIGlmIChpc0Jsb2NrU2luZ2xlUHJlZGVjZXNzb3IoYmxvY2spKSByZXR1cm47CgogICAgdHJ5TWVyZ2luZ0V4cHJlc3Npb25zKGJsb2NrKTsKICB9CgogIHZvaWQgdHJ5TWVyZ2luZ0V4cHJlc3Npb25zKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICAvLyBWaXNpdCBlYWNoIGluc3RydWN0aW9uIG9mIHRoZSBiYXNpYyBibG9jayBpbiBsYXN0LXRvLWZpcnN0IG9yZGVyLgogICAgLy8gS2VlcCBhIGxpc3Qgb2YgZXhwZWN0ZWQgaW5wdXRzIG9mIHRoZSBjdXJyZW50ICJleHByZXNzaW9uIiBiZWluZwogICAgLy8gbWVyZ2VkLiBJZiBpbnN0cnVjdGlvbnMgb2NjdXIgaW4gdGhlIGV4cGVjdGVkIG9yZGVyLCB0aGV5IGFyZQogICAgLy8gaW5jbHVkZWQgaW4gdGhlIGV4cHJlc3Npb24uCgogICAgLy8gVGhlIGV4cGVjdGVkSW5wdXRzIGxpc3QgaG9sZHMgbm9uLXRyaXZpYWwgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5CiAgICAvLyBiZSBnZW5lcmF0ZWQgYXQgdGhlaXIgdXNlIHNpdGUsIGlmIHRoZXkgb2NjdXIgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCiAgICBpZiAoZXhwZWN0ZWRJbnB1dHMgPT0gbnVsbCkgZXhwZWN0ZWRJbnB1dHMgPSBuZXcgTGlzdDxISW5zdHJ1Y3Rpb24+KCk7CiAgICBpZiAocHVyZUlucHV0cyA9PSBudWxsKSBwdXJlSW5wdXRzID0gbmV3IFNldDxISW5zdHJ1Y3Rpb24+KCk7CgogICAgLy8gUG9wIGluc3RydWN0aW9ucyBmcm9tIGV4cGVjdGVkSW5wdXRzIHVudGlsIGluc3RydWN0aW9uIGlzIGZvdW5kLgogICAgLy8gUmV0dXJuIHRydWUgaWYgaXQgaXMgZm91bmQsIG9yIGZhbHNlIGlmIG5vdC4KICAgIGJvb2wgZmluZEluSW5wdXRzQW5kUG9wTm9uTWF0Y2hpbmcoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGFzc2VydCghaXNFZmZlY3RpdmVseVB1cmUoaW5zdHJ1Y3Rpb24pKTsKICAgICAgd2hpbGUgKCFleHBlY3RlZElucHV0cy5pc0VtcHR5KSB7CiAgICAgICAgSEluc3RydWN0aW9uIG5leHRJbnB1dCA9IGV4cGVjdGVkSW5wdXRzLnJlbW92ZUxhc3QoKTsKICAgICAgICBhc3NlcnQoIWdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKG5leHRJbnB1dCkpOwogICAgICAgIGFzc2VydChuZXh0SW5wdXQudXNlZEJ5Lmxlbmd0aCA9PSAxKTsKICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHRJbnB1dCwgaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGJsb2NrLmxhc3QuYWNjZXB0KHRoaXMpOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5sYXN0LnByZXZpb3VzOwogICAgICAgIGluc3RydWN0aW9uICE9IG51bGw7CiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5wcmV2aW91cykgewogICAgICBpZiAoZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGluc3RydWN0aW9uLmlzQ29kZU1vdGlvbkludmFyaWFudCgpKSB7CiAgICAgICAgbWFya0FzR2VuZXJhdGVBdFVzZVNpdGUoaW5zdHJ1Y3Rpb24pOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChpc0VmZmVjdGl2ZWx5UHVyZShpbnN0cnVjdGlvbikpIHsKICAgICAgICBpZiAocHVyZUlucHV0cy5jb250YWlucyhpbnN0cnVjdGlvbikpIHsKICAgICAgICAgIHRyeUdlbmVyYXRlQXRVc2VTaXRlKGluc3RydWN0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gSWYgdGhlIGlucHV0IGlzIG5vdCBpbiB0aGUgW3B1cmVJbnB1dHNdIHNldCwgaXQgaGFzIG5vdAogICAgICAgICAgLy8gYmVlbiB2aXNpdGVkIG9yIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkIGF0IHVzZS1zaXRlLiBUaGUgbW9zdAogICAgICAgICAgLy8gbGlrZWx5IHJlYXNvbiBmb3IgdGhlIGxhdHRlciwgaXMgdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdXNlZAogICAgICAgICAgLy8gaW4gbW9yZSB0aGFuIG9uZSBsb2NhdGlvbi4KICAgICAgICAgIC8vIFdlIG11c3QgZWl0aGVyIGNsZWFyIHRoZSBleHBlY3RlZElucHV0cywgb3IgbW92ZSB0aGUgcHVyZQogICAgICAgICAgLy8gaW5zdHJ1Y3Rpb24ncyBpbnB1dHMgaW4gZnJvbnQgb2YgdGhlIGV4aXN0aW5nIG9uZXMuCiAgICAgICAgICAvLyBFeGFtcGxlOgogICAgICAgICAgLy8gICB0MSA9IGZvbygpOyAgLy8gc2lkZS1lZmZlY3QuCiAgICAgICAgICAvLyAgIHQyID0gYmFyKCk7ICAvLyBzaWRlLWVmZmVjdC4KICAgICAgICAgIC8vICAgdDMgPSBwdXJlKHQyKTsgICAgLy8gdXNlZCBtb3JlIHRoYW4gb25jZS4KICAgICAgICAgIC8vICAgZih0MSwgdDMpOyAgIC8vIGV4cGVjdGVkIGlucHV0cyBvZiAnZic6IHQxLgogICAgICAgICAgLy8gICB1c2UodDMpOwogICAgICAgICAgLy8KICAgICAgICAgIC8vIElmIHdlIGRvbid0IGNsZWFyIHRoZSBleHBlY3RlZCBpbnB1dHMgd2UgZW5kIHVwIGluIGEgc2l0dWF0aW9uCiAgICAgICAgICAvLyB3aGVyZSBwdXJlIHB1c2hlcyAidDIiIG9uIHRvcCBvZiAidDEiIGxlYWRpbmcgdG86CiAgICAgICAgICAvLyAgIHQzID0gcHVyZShiYXIoKSk7CiAgICAgICAgICAvLyAgIGYoZm9vKCksIHQzKTsKICAgICAgICAgIC8vICAgdXNlKHQzKTsKICAgICAgICAgIC8vCiAgICAgICAgICAvLyBJZiB3ZSBjbGVhciB0aGUgZXhwZWN0ZWQtaW5wdXRzIGxpc3Qgd2UgaGF2ZSB0aGUgY29ycmVjdAogICAgICAgICAgLy8gb3V0cHV0OgogICAgICAgICAgLy8gICB0MSA9IGZvbygpOwogICAgICAgICAgLy8gICB0MyA9IHB1cmUoYmFyKCkpOwogICAgICAgICAgLy8gICBmKHQxLCB0Myk7CiAgICAgICAgICAvLyAgIHVzZSh0Myk7CiAgICAgICAgICAvLwogICAgICAgICAgLy8gQ2xlYXJpbmcgaXMsIGhvd2V2ZXIsIG5vdCBvcHRpbWFsLgogICAgICAgICAgLy8gRXhhbXBsZToKICAgICAgICAgIC8vICAgdDEgPSBmb28oKTsgIC8vIHQxIGlzIG5vdyB1c2VkIGJ5IGBwdXJlYC4KICAgICAgICAgIC8vICAgdDIgPSBiYXIoKTsgIC8vIHQyIGlzIG5vdyB1c2VkIGJ5IGBmYC4KICAgICAgICAgIC8vICAgdDMgPSBwdXJlKHQxKTsKICAgICAgICAgIC8vICAgZih0MiwgdDMpOwogICAgICAgICAgLy8gICB1c2UodDMpOwogICAgICAgICAgLy8KICAgICAgICAgIC8vIElmIHdlIGNsZWFyIHRoZSBleHBlY3RlZC1pbnB1dHMgd2UgY2FuJ3QgZ2VuZXJhdGUtYXQtdXNlIGFueSBvZgogICAgICAgICAgLy8gdGhlIGluc3RydWN0aW9ucy4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgb3B0aW1hbCBzb2x1dGlvbiBpcyB0byBtb3ZlIHRoZSBpbnB1dHMgb2YgJ3B1cmUnIGluCiAgICAgICAgICAvLyBmcm9udCBvZiB0aGUgZXhwZWN0ZWRJbnB1dHMgbGlzdC4gVGhpcyBtYWtlcyBzZW5zZSwgc2luY2Ugd2UKICAgICAgICAgIC8vIHB1c2ggZXhwZWN0ZWQtaW5wdXRzIGZyb20gbGVmdC10byByaWdodCwgYW5kIHRoZSBgcHVyZWAgZnVuY3Rpb24KICAgICAgICAgIC8vIGludm9jYXRpb24gaXMgIm1vcmUgbGVmdCIgKGkuZS4gYmVmb3JlKSB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYGZgLgogICAgICAgICAgLy8gV2l0aCB0aGF0IGFwcHJvYWNoIHdlIGVuZCB1cCB3aXRoOgogICAgICAgICAgLy8gICB0MyA9IHB1cmUoZm9vKCkpOwogICAgICAgICAgLy8gICBmKGJhcigpLCB0Myk7CiAgICAgICAgICAvLyAgIHVzZSh0Myk7CiAgICAgICAgICAvLwogICAgICAgICAgaW50IG9sZExlbmd0aCA9IGV4cGVjdGVkSW5wdXRzLmxlbmd0aDsKICAgICAgICAgIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgICAgIGlmIChvbGRMZW5ndGggIT0gMCAmJiBvbGRMZW5ndGggIT0gZXhwZWN0ZWRJbnB1dHMubGVuZ3RoKSB7CiAgICAgICAgICAgIC8vIE1vdmUgdGhlIHB1cmUgaW5zdHJ1Y3Rpb24ncyBpbnB1dHMgdG8gdGhlIGZyb250LgogICAgICAgICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gbmV3SW5wdXRzID0gZXhwZWN0ZWRJbnB1dHMuc3VibGlzdChvbGRMZW5ndGgpOwogICAgICAgICAgICBpbnQgbmV3Q291bnQgPSBuZXdJbnB1dHMubGVuZ3RoOwogICAgICAgICAgICBleHBlY3RlZElucHV0cy5zZXRSYW5nZSgKICAgICAgICAgICAgICAgIG5ld0NvdW50LCBuZXdDb3VudCArIG9sZExlbmd0aCwgZXhwZWN0ZWRJbnB1dHMpOwogICAgICAgICAgICBleHBlY3RlZElucHV0cy5zZXRSYW5nZSgwLCBuZXdDb3VudCwgbmV3SW5wdXRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGZpbmRJbklucHV0c0FuZFBvcE5vbk1hdGNoaW5nKGluc3RydWN0aW9uKSkgewogICAgICAgICAgLy8gVGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gaXMgdGhlIG5leHQgbm9uLXRyaXZpYWwKICAgICAgICAgIC8vIGV4cGVjdGVkIGlucHV0LgogICAgICAgICAgdHJ5R2VuZXJhdGVBdFVzZVNpdGUoaW5zdHJ1Y3Rpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQoZXhwZWN0ZWRJbnB1dHMuaXNFbXB0eSk7CiAgICAgICAgfQogICAgICAgIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgfQogICAgfQoKICAgIGlmIChibG9jay5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDEgJiYKICAgICAgICBpc0Jsb2NrU2luZ2xlUHJlZGVjZXNzb3IoYmxvY2sucHJlZGVjZXNzb3JzWzBdKSkgewogICAgICBhc3NlcnQoYmxvY2sucGhpcy5pc0VtcHR5KTsKICAgICAgdHJ5TWVyZ2luZ0V4cHJlc3Npb25zKGJsb2NrLnByZWRlY2Vzc29yc1swXSk7CiAgICB9IGVsc2UgewogICAgICBleHBlY3RlZElucHV0cyA9IG51bGw7CiAgICAgIHB1cmVJbnB1dHMgPSBudWxsOwogICAgfQogIH0KfQoKLy8vICBEZXRlY3QgY29udHJvbCBmbG93IGFyaXNpbmcgZnJvbSBzaG9ydC1jaXJjdWl0IGxvZ2ljYWwgYW5kCi8vLyAgY29uZGl0aW9uYWwgb3BlcmF0b3JzLCBhbmQgcHJlcGFyZSB0aGUgcHJvZ3JhbSB0byBiZSBnZW5lcmF0ZWQKLy8vICB1c2luZyB0aGVzZSBvcGVyYXRvcnMgaW5zdGVhZCBvZiBuZXN0ZWQgaWZzIGFuZCBib29sZWFuIHZhcmlhYmxlcy4KY2xhc3MgU3NhQ29uZGl0aW9uTWVyZ2VyIGV4dGVuZHMgSEdyYXBoVmlzaXRvciB3aXRoIENvZGVnZW5QaGFzZSB7CiAgU2V0PEhJbnN0cnVjdGlvbj4gZ2VuZXJhdGVBdFVzZVNpdGU7CiAgU2V0PEhJbnN0cnVjdGlvbj4gY29udHJvbEZsb3dPcGVyYXRvcnM7CgogIHZvaWQgbWFya0FzR2VuZXJhdGVBdFVzZVNpdGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoIWluc3RydWN0aW9uLmlzSnNTdGF0ZW1lbnQoKSk7CiAgICBnZW5lcmF0ZUF0VXNlU2l0ZS5hZGQoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgU3NhQ29uZGl0aW9uTWVyZ2VyKHRoaXMuZ2VuZXJhdGVBdFVzZVNpdGUsIHRoaXMuY29udHJvbEZsb3dPcGVyYXRvcnMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2aXNpdFBvc3REb21pbmF0b3JUcmVlKGdyYXBoKTsKICB9CgogIC8vLyBDaGVjayBpZiBhIGJsb2NrIGhhcyBhdCBsZWFzdCBvbmUgc3RhdGVtZW50IG90aGVyIHRoYW4KICAvLy8gW2luc3RydWN0aW9uXS4KICBib29sIGhhc0FueVN0YXRlbWVudChIQmFzaWNCbG9jayBibG9jaywgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAvLyBJZiBbaW5zdHJ1Y3Rpb25dIGlzIG5vdCBpbiBbYmxvY2tdLCB0aGVuIGlmIHRoZSBibG9jayBpcyBub3QKICAgIC8vIGVtcHR5LCB3ZSBrbm93IHRoZXJlIHdpbGwgYmUgYSBzdGF0ZW1lbnQgdG8gZW1pdC4KICAgIGlmICghaWRlbnRpY2FsKGluc3RydWN0aW9uLmJsb2NrLCBibG9jaykpIHsKICAgICAgcmV0dXJuICFpZGVudGljYWwoYmxvY2subGFzdCwgYmxvY2suZmlyc3QpOwogICAgfQoKICAgIC8vIElmIFtpbnN0cnVjdGlvbl0gaXMgbm90IHRoZSBsYXN0IGluc3RydWN0aW9uIG9mIHRoZSBibG9jawogICAgLy8gYmVmb3JlIHRoZSBjb250cm9sIGZsb3cgaW5zdHJ1Y3Rpb24sIG9yIHRoZSBsYXN0IGluc3RydWN0aW9uLAogICAgLy8gdGhlbiB3ZSB3aWxsIGhhdmUgdG8gZW1pdCBhIHN0YXRlbWVudCBmb3IgdGhhdCBsYXN0IGluc3RydWN0aW9uLgogICAgaWYgKGluc3RydWN0aW9uICE9IGJsb2NrLmxhc3QgJiYKICAgICAgICAhaWRlbnRpY2FsKGluc3RydWN0aW9uLCBibG9jay5sYXN0LnByZXZpb3VzKSkgcmV0dXJuIHRydWU7CgogICAgLy8gSWYgb25lIG9mIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGJsb2NrIHVudGlsIFtpbnN0cnVjdGlvbl0gaXMKICAgIC8vIG5vdCBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUsIHRoZW4gd2Ugd2lsbCBoYXZlIHRvIGVtaXQgYQogICAgLy8gc3RhdGVtZW50IGZvciBpdC4KICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogd2UgY291bGQgZ2VuZXJhdGUgYSBjb21tYSBzZXBhcmF0ZWQKICAgIC8vIGxpc3Qgb2YgZXhwcmVzc2lvbnMuCiAgICBmb3IgKEhJbnN0cnVjdGlvbiB0ZW1wID0gYmxvY2suZmlyc3Q7CiAgICAgICAgIWlkZW50aWNhbCh0ZW1wLCBpbnN0cnVjdGlvbik7CiAgICAgICAgdGVtcCA9IHRlbXAubmV4dCkgewogICAgICBpZiAoIWdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKHRlbXApKSByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIGlzU2FmZVRvR2VuZXJhdGVBdFVzZVNpdGUoSEluc3RydWN0aW9uIHVzZXIsIEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgLy8gSENyZWF0ZSBldmFsdWF0ZXMgYXJndW1lbnRzIGluIG9yZGVyIGFuZCBwYXNzZXMgdGhlbSB0byBhIGNvbnN0cnVjdG9yLgogICAgaWYgKHVzZXIgaXMgSENyZWF0ZSkgcmV0dXJuIHRydWU7CiAgICAvLyBBIFtIRm9yZWlnbl0gaW5zdHJ1Y3Rpb24gdXNlcyBvcGVyYXRvcnMgYW5kIGlmIHdlIGdlbmVyYXRlIFtpbnB1dF0gYXQgdXNlCiAgICAvLyBzaXRlLCB0aGUgcHJlY2VkZW5jZSBvciBldmFsdWF0aW9uIG9yZGVyIG1pZ2h0IGJlIHdyb25nLgogICAgaWYgKHVzZXIgaXMgSEZvcmVpZ24pIHJldHVybiBmYWxzZTsKICAgIC8vIEEgW0hDaGVja10gaW5zdHJ1Y3Rpb24gd2l0aCBjb250cm9sIGZsb3cgdXNlcyBpdHMgaW5wdXQKICAgIC8vIG11bHRpcGxlIHRpbWVzLCBzbyB3ZSBhdm9pZCBnZW5lcmF0aW5nIGl0IGF0IHVzZSBzaXRlLgogICAgaWYgKHVzZXIgaXMgSENoZWNrICYmIHVzZXIuaXNDb250cm9sRmxvdygpKSByZXR1cm4gZmFsc2U7CiAgICAvLyBBIFtISXNdIGluc3RydWN0aW9uIHVzZXMgaXRzIGlucHV0IG11bHRpcGxlIHRpbWVzLCBzbyB3ZQogICAgLy8gYXZvaWQgZ2VuZXJhdGluZyBpdCBhdCB1c2Ugc2l0ZS4KICAgIGlmICh1c2VyIGlzIEhJcykgcmV0dXJuIGZhbHNlOwogICAgLy8gQXZvaWQgY29kZSBtb3Rpb24gaW50byBhIGxvb3AuCiAgICByZXR1cm4gdXNlci5oYXNTYW1lTG9vcEhlYWRlckFzKGlucHV0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBpZiAoYmxvY2subGFzdCBpcyEgSElmKSByZXR1cm47CiAgICBISWYgc3RhcnRJZiA9IGJsb2NrLmxhc3Q7CiAgICBIQmFzaWNCbG9jayBlbmQgPSBzdGFydElmLmpvaW5CbG9jazsKCiAgICAvLyBXZSBjaGVjayB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgdGhlIGZvbGxvd2luZzoKICAgIC8vICAgICAgICAgSWYKICAgIC8vICAgICAgIC8gICAgXAogICAgLy8gICAgICAvICAgICAgXAogICAgLy8gICAxIGV4cHIgICAgZ290bwogICAgLy8gICAgZ290byAgICAgLwogICAgLy8gICAgICBcICAgICAvCiAgICAvLyAgICAgICBcICAgLwogICAgLy8gcGhpKGV4cHIsIHRydWV8ZmFsc2UpCiAgICAvLwogICAgLy8gYW5kIHRoZSBzYW1lIGZvciBuZXN0ZWQgbm9kZXM6CiAgICAvLwogICAgLy8gICAgICAgICAgICBJZgogICAgLy8gICAgICAgICAgLyAgICBcCiAgICAvLyAgICAgICAgIC8gICAgICBcCiAgICAvLyAgICAgIDEgZXhwcjEgICAgXAogICAgLy8gICAgICAgSWYgICAgICAgICBcCiAgICAvLyAgICAgIC8gIFwgICAgICAgICBcCiAgICAvLyAgICAgLyAgICBcICAgICAgICAgZ290bwogICAgLy8gIDEgZXhwcjIgICAgICAgICAgICB8CiAgICAvLyAgICBnb3RvICAgIGdvdG8gICAgIHwKICAgIC8vICAgICAgXCAgICAgLyAgICAgICAgfAogICAgLy8gICAgICAgXCAgIC8gICAgICAgICB8CiAgICAvLyAgIHBoaTEoZXhwcjIsIHRydWV8ZmFsc2UpCiAgICAvLyAgICAgICAgICBcICAgICAgICAgIHwKICAgIC8vICAgICAgICAgICBcICAgICAgICAgfAogICAgLy8gICAgICAgICAgICAgcGhpKHBoaTEsIHRydWV8ZmFsc2UpCgogICAgaWYgKGVuZCA9PSBudWxsKSByZXR1cm47CiAgICBpZiAoZW5kLnBoaXMuaXNFbXB0eSkgcmV0dXJuOwogICAgaWYgKCFpZGVudGljYWwoZW5kLnBoaXMuZmlyc3QsIGVuZC5waGlzLmxhc3QpKSByZXR1cm47CiAgICBIQmFzaWNCbG9jayBlbHNlQmxvY2sgPSBzdGFydElmLmVsc2VCbG9jazsKCiAgICBpZiAoIWlkZW50aWNhbChlbmQucHJlZGVjZXNzb3JzWzFdLCBlbHNlQmxvY2spKSByZXR1cm47CiAgICBIUGhpIHBoaSA9IGVuZC5waGlzLmZpcnN0OwogICAgSEluc3RydWN0aW9uIHRoZW5JbnB1dCA9IHBoaS5pbnB1dHNbMF07CiAgICBISW5zdHJ1Y3Rpb24gZWxzZUlucHV0ID0gcGhpLmlucHV0c1sxXTsKICAgIGlmICh0aGVuSW5wdXQuaXNKc1N0YXRlbWVudCgpIHx8IGVsc2VJbnB1dC5pc0pzU3RhdGVtZW50KCkpIHJldHVybjsKCiAgICBpZiAoaGFzQW55U3RhdGVtZW50KGVsc2VCbG9jaywgZWxzZUlucHV0KSkgcmV0dXJuOwogICAgYXNzZXJ0KGVsc2VCbG9jay5zdWNjZXNzb3JzLmxlbmd0aCA9PSAxKTsKICAgIGFzc2VydChlbmQucHJlZGVjZXNzb3JzLmxlbmd0aCA9PSAyKTsKCiAgICBIQmFzaWNCbG9jayB0aGVuQmxvY2sgPSBzdGFydElmLnRoZW5CbG9jazsKICAgIC8vIFNraXAgdHJpdmlhbCBnb3RvIGJsb2Nrcy4KICAgIHdoaWxlICh0aGVuQmxvY2suc3VjY2Vzc29yc1swXSAhPSBlbmQgJiYgdGhlbkJsb2NrLmZpcnN0IGlzIEhHb3RvKSB7CiAgICAgIHRoZW5CbG9jayA9IHRoZW5CbG9jay5zdWNjZXNzb3JzWzBdOwogICAgfQoKICAgIC8vIElmIHRoZSBbdGhlbkJsb2NrXSBpcyBhbHJlYWR5IGEgY29udHJvbCBmbG93IG9wZXJhdGlvbiwgYW5kIGRvZXMgbm90CiAgICAvLyBoYXZlIGFueSBzdGF0ZW1lbnQgYW5kIGl0cyBqb2luIGJsb2NrIGlzIFtlbmRdLCB3ZSBjYW4gZW1pdCBhCiAgICAvLyBzZXF1ZW5jZSBvZiBjb250cm9sIGZsb3cgb3BlcmF0aW9uLgogICAgaWYgKGNvbnRyb2xGbG93T3BlcmF0b3JzLmNvbnRhaW5zKHRoZW5CbG9jay5sYXN0KSkgewogICAgICBISWYgb3RoZXJJZiA9IHRoZW5CbG9jay5sYXN0OwogICAgICBpZiAoIWlkZW50aWNhbChvdGhlcklmLmpvaW5CbG9jaywgZW5kKSkgewogICAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBqb2luIGJsb2NrIHRoYXQganVzdCBmZWVkcyBpbnRvIG91ciBqb2luIGJsb2NrLgogICAgICAgIEhCYXNpY0Jsb2NrIG90aGVySm9pbiA9IG90aGVySWYuam9pbkJsb2NrOwogICAgICAgIGlmIChvdGhlckpvaW4uZmlyc3QgIT0gb3RoZXJKb2luLmxhc3QpIHJldHVybjsKICAgICAgICBpZiAob3RoZXJKb2luLnN1Y2Nlc3NvcnMubGVuZ3RoICE9IDEpIHJldHVybjsKICAgICAgICBpZiAob3RoZXJKb2luLnN1Y2Nlc3NvcnNbMF0gIT0gZW5kKSByZXR1cm47CiAgICAgICAgaWYgKG90aGVySm9pbi5waGlzLmlzRW1wdHkpIHJldHVybjsKICAgICAgICBpZiAoIWlkZW50aWNhbChvdGhlckpvaW4ucGhpcy5maXJzdCwgb3RoZXJKb2luLnBoaXMubGFzdCkpIHJldHVybjsKICAgICAgICBIUGhpIG90aGVyUGhpID0gb3RoZXJKb2luLnBoaXMuZmlyc3Q7CiAgICAgICAgaWYgKHRoZW5JbnB1dCAhPSBvdGhlclBoaSkgcmV0dXJuOwogICAgICAgIGlmIChlbHNlSW5wdXQgIT0gb3RoZXJQaGkuaW5wdXRzWzFdKSByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGhhc0FueVN0YXRlbWVudCh0aGVuQmxvY2ssIG90aGVySWYpKSByZXR1cm47CiAgICB9IGVsc2UgewogICAgICBpZiAoIWlkZW50aWNhbChlbmQucHJlZGVjZXNzb3JzWzBdLCB0aGVuQmxvY2spKSByZXR1cm47CiAgICAgIGlmIChoYXNBbnlTdGF0ZW1lbnQodGhlbkJsb2NrLCB0aGVuSW5wdXQpKSByZXR1cm47CiAgICAgIGFzc2VydCh0aGVuQmxvY2suc3VjY2Vzc29ycy5sZW5ndGggPT0gMSk7CiAgICB9CgogICAgLy8gRnJvbSBub3cgb24sIHdlIGhhdmUgcmVjb2duaXplZCBhIGNvbnRyb2wgZmxvdyBvcGVyYXRpb24gYnVpbHQgZnJvbQogICAgLy8gdGhlIGJ1aWxkZXIuIE1hcmsgdGhlIGlmIGluc3RydWN0aW9uIGFzIHN1Y2guCiAgICBjb250cm9sRmxvd09wZXJhdG9ycy5hZGQoc3RhcnRJZik7CgogICAgLy8gRmluZCB0aGUgbmV4dCBub24tSEdvdG8gaW5zdHJ1Y3Rpb24gZm9sbG93aW5nIHRoZSBwaGkuCiAgICBISW5zdHJ1Y3Rpb24gbmV4dEluc3RydWN0aW9uID0gcGhpLmJsb2NrLmZpcnN0OwogICAgd2hpbGUgKG5leHRJbnN0cnVjdGlvbiBpcyBIR290bykgewogICAgICBuZXh0SW5zdHJ1Y3Rpb24gPSBuZXh0SW5zdHJ1Y3Rpb24uYmxvY2suc3VjY2Vzc29yc1swXS5maXJzdDsKICAgIH0KCiAgICAvLyBJZiB0aGUgb3BlcmF0aW9uIGlzIG9ubHkgdXNlZCBieSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24KICAgIC8vIG9mIGl0cyBibG9jayBhbmQgaXMgc2FmZSB0byBiZSBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUsIG1hcmsgaXQKICAgIC8vIHNvLgogICAgaWYgKHBoaS51c2VkQnkubGVuZ3RoID09IDEgJiYKICAgICAgICBwaGkudXNlZEJ5WzBdID09IG5leHRJbnN0cnVjdGlvbiAmJgogICAgICAgIGlzU2FmZVRvR2VuZXJhdGVBdFVzZVNpdGUocGhpLnVzZWRCeVswXSwgcGhpKSkgewogICAgICBtYXJrQXNHZW5lcmF0ZUF0VXNlU2l0ZShwaGkpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwoZWxzZUlucHV0LmJsb2NrLCBlbHNlQmxvY2spKSB7CiAgICAgIGFzc2VydChlbHNlSW5wdXQudXNlZEJ5Lmxlbmd0aCA9PSAxKTsKICAgICAgbWFya0FzR2VuZXJhdGVBdFVzZVNpdGUoZWxzZUlucHV0KTsKICAgIH0KCiAgICAvLyBJZiBbdGhlbklucHV0XSBpcyBkZWZpbmVkIGluIHRoZSBmaXJzdCBwcmVkZWNlc3NvciwgdGhlbiBpdCBpcyBvbmx5IHVzZWQKICAgIC8vIGJ5IFtwaGldIGFuZCBjYW4gYmUgZ2VuZXJhdGVkIGF0IHVzZSBzaXRlLgogICAgaWYgKGlkZW50aWNhbCh0aGVuSW5wdXQuYmxvY2ssIGVuZC5wcmVkZWNlc3NvcnNbMF0pKSB7CiAgICAgIGFzc2VydCh0aGVuSW5wdXQudXNlZEJ5Lmxlbmd0aCA9PSAxKTsKICAgICAgbWFya0FzR2VuZXJhdGVBdFVzZVNpdGUodGhlbklucHV0KTsKICAgIH0KICB9Cn0KCi8vLyBJbnNlcnQgJ2NhY2hlcycgZm9yIHdob2xlLWZ1bmN0aW9uIHJlZ2lvbi1jb25zdGFudHMgd2hlbiB0aGUgbG9jYWwgbWluaWZpZWQKLy8vIG5hbWUgd291bGQgYmUgc2hvcnRlciB0aGFuIHJlcGVhdGVkIHJlZmVyZW5jZXMuICBUaGVzZSBhcmUgY2FjaGVzIGZvciAndGhpcycKLy8vIGFuZCBjb25zdGFudCB2YWx1ZXMuCmNsYXNzIFNzYVNoYXJlUmVnaW9uQ29uc3RhbnRzIGV4dGVuZHMgSEJhc2VWaXNpdG9yIHdpdGggQ29kZWdlblBoYXNlIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CgogIFNzYVNoYXJlUmVnaW9uQ29uc3RhbnRzKHRoaXMuX29wdGlvbnMpOwoKICBAb3ZlcnJpZGUKICB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgLy8gV2UgbmVlZCB0aGUgYXN5bmMgcmV3cml0ZSB0byBiZSBzbWFydGVyIGFib3V0IGhvaXN0aW5nIHJlZ2lvbiBjb25zdGFudHMKICAgIC8vIGJlZm9yZSBpdCBpcyB3b3J0aC13aGlsZS4KICAgIGlmIChncmFwaC5uZWVkc0FzeW5jUmV3cml0ZSkgcmV0dXJuOwoKICAgIC8vICdIVGhpcycgYW5kIGNvbnN0YW50cyBhcmUgaW4gdGhlIGVudHJ5IGJsb2NrLiBObyBuZWVkIHRvIHdhbGsgdGhlIHJlc3Qgb2YKICAgIC8vIHRoZSBncmFwaC4KICAgIHZpc2l0QmFzaWNCbG9jayhncmFwaC5lbnRyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIGluc3RydWN0aW9uID0gbmV4dDsKICAgIH0KICB9CgogIC8vIE5vdCBhbGwgb2NjdXJyZW5jZXMgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSBsb2NhbCB2YXJpYWJsZSBjYWNoZSwgc28gd2UKICAvLyBmaWx0ZXIgdGhlIHVzZXMuCiAgaW50IF9jb3VudENhY2hlYWJsZVVzZXMoCiAgICAgIEhJbnN0cnVjdGlvbiBub2RlLCBib29sIEZ1bmN0aW9uKEhJbnN0cnVjdGlvbikgY2FjaGVhYmxlKSB7CiAgICByZXR1cm4gbm9kZS51c2VkQnkud2hlcmUoY2FjaGVhYmxlKS5sZW5ndGg7CiAgfQoKICAvLyBSZXBsYWNlIGNhY2hlYWJsZSB1c2VzIHdpdGggYSByZWZlcmVuY2UgdG8gYSBITGF0ZVZhbHVlIG5vZGUuCiAgX2NhY2hlKAogICAgICBISW5zdHJ1Y3Rpb24gbm9kZSwgYm9vbCBGdW5jdGlvbihISW5zdHJ1Y3Rpb24pIGNhY2hlYWJsZSwgU3RyaW5nIG5hbWUpIHsKICAgIHZhciB1c2VycyA9IG5vZGUudXNlZEJ5LnRvTGlzdCgpOwogICAgdmFyIHJlZmVyZW5jZSA9IG5ldyBITGF0ZVZhbHVlKG5vZGUpOwogICAgLy8gVE9ETyhzcmEpOiBUaGUgc291cmNlSW5mb3JtYXRpb24gc2hvdWxkIHJlYWxseSBiZSBmcm9tIHRoZSBmdW5jdGlvbgogICAgLy8gZW50cnksIG5vdCB0aGUgdXNlIG9mIGB0aGlzYC4KICAgIHJlZmVyZW5jZS5zb3VyY2VJbmZvcm1hdGlvbiA9IG5vZGUuc291cmNlSW5mb3JtYXRpb247CiAgICByZWZlcmVuY2Uuc291cmNlRWxlbWVudCA9IF9FeHByZXNzaW9uTmFtZShuYW1lKTsKICAgIG5vZGUuYmxvY2suYWRkQWZ0ZXIobm9kZSwgcmVmZXJlbmNlKTsKICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gdXNlcnMpIHsKICAgICAgaWYgKGNhY2hlYWJsZSh1c2VyKSkgewogICAgICAgIHVzZXIuY2hhbmdlVXNlKG5vZGUsIHJlZmVyZW5jZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaGlzKEhUaGlzIG5vZGUpIHsKICAgIGludCBzaXplID0gNDsKICAgIC8vIENvbXBhcmUgdGhlIHNpemUgb2YgdGhlIHVuY2hhbmdlZCBtaW5pZmllZCB3aXRoIHRoZSBzaXplIG9mIHRoZSBtaW5pZmllZAogICAgLy8gY29kZSB3aGVyZSAndGhpcycgaXMgYXNzaWduZWQgdG8gYSB2YXJpYWJsZS4gV2UgYXNzdW1lIHRoZSB2YXJpYWJsZSBoYXMKICAgIC8vIG1pbmlmaWVkIHNpemUgMS4KICAgIC8vCiAgICAvLyBUaGUgc2l6ZSBvdmVyaGVhZCBvZiBpbnRyb2R1Y2luZyBhIHZhcmlhYmxlIGluIHRoZSB3b3JzdCBjYXNlIGluY2x1ZGVzCiAgICAvLyAndmFyICc6CiAgICAvLwogICAgLy8gICAgICAgICAgIDEyMzQgICAvLyBzaXplCiAgICAvLyAgICAgdmFyIHg9dGhpczsgIC8vIChtaW5pZmllZCAnOycgY2FuIGJlIGVuZC1vZi1saW5lKQogICAgLy8gICAgIDEyMzQ1NiAgICA3ICAvLyBhZGRpdGlvbmFsIG92ZXJoZWFkCiAgICAvLwogICAgLy8gVE9ETyhzcmEpOiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmFsdWVzIHRoYXQgY2FuIHBvdGVudGlhbGx5IGJlIGNhY2hlZCwKICAgIC8vIHRoZXkgY2FuIHNoYXJlIHRoZSAndmFyICcgY29zdCwgZXZlbiBpZiBub25lIG9mIHRoZW0gYXJlIGJlbmVmaWNpYWwKICAgIC8vIGluZGl2aWR1YWxseS4KICAgIGludCB1c2VDb3VudCA9IG5vZGUudXNlZEJ5Lmxlbmd0aDsKICAgIGlmICh1c2VDb3VudCAqIHNpemUgPD0gNyArIHNpemUgKyB1c2VDb3VudCAqIDEpIHJldHVybjsKICAgIF9jYWNoZShub2RlLCAoXykgPT4gdHJ1ZSwgJ190aGlzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IG5vZGUpIHsKICAgIGlmIChub2RlLnVzZWRCeS5sZW5ndGggPD0gMSkgcmV0dXJuOwogICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IG5vZGUuY29uc3RhbnQ7CgogICAgaWYgKGNvbnN0YW50LmlzTnVsbCkgewogICAgICBfaGFuZGxlTnVsbChub2RlKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChjb25zdGFudC5pc0ludCkgewogICAgICBfaGFuZGxlSW50KG5vZGUsIGNvbnN0YW50KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChjb25zdGFudC5pc1N0cmluZykgewogICAgICBfaGFuZGxlU3RyaW5nKG5vZGUsIGNvbnN0YW50KTsKICAgICAgcmV0dXJuOwogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlTnVsbChIQ29uc3RhbnQgbm9kZSkgewogICAgaW50IHNpemUgPSA0OwoKICAgIGJvb2wgX2lzQ2FjaGVhYmxlVXNlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICAvLyBPbmUtc2hvdCBpbnRlcmNlcHRvcnMgaGF2ZSBgbnVsbGAgYXMgYSBkdW1teSBpbnRlcmNlcHRvci4KICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhPbmVTaG90SW50ZXJjZXB0b3IpIHJldHVybiBmYWxzZTsKCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBISW52b2tlKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhDcmVhdGUpIHJldHVybiB0cnVlOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFBoaSkgcmV0dXJuIHRydWU7CgogICAgICAvLyBXZSByZXR1cm4gYG51bGxgIGJ5IHJlbW92aW5nIHRoZSByZXR1cm4gZXhwcmVzc2lvbiBvciBzdGF0ZW1lbnQuCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUmV0dXJuKSByZXR1cm4gZmFsc2U7CgogICAgICAvLyBKYXZhU2NyaXB0IGB4ID09IG51bGxgIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYHggPT0gX251bGxgLgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSElkZW50aXR5KSByZXR1cm4gZmFsc2U7CgogICAgICAvLyBUT0RPKHNyYSk6IERldGVybWluZSBpZiBvdGhlciB1c2VzIHJlc3VsdCBpbiBmYXN0ZXIgSmF2YVNjcmlwdCBjb2RlLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaW50IHVzZUNvdW50ID0gX2NvdW50Q2FjaGVhYmxlVXNlcyhub2RlLCBfaXNDYWNoZWFibGVVc2UpOwogICAgaWYgKHVzZUNvdW50ICogc2l6ZSA8PSA3ICsgc2l6ZSArIHVzZUNvdW50ICogMSkgcmV0dXJuOwogICAgX2NhY2hlKG5vZGUsIF9pc0NhY2hlYWJsZVVzZSwgJ19udWxsJyk7CiAgICByZXR1cm47CiAgfQoKICB2b2lkIF9oYW5kbGVJbnQoSENvbnN0YW50IG5vZGUsIEludENvbnN0YW50VmFsdWUgaW50Q29uc3RhbnQpIHsKICAgIEJpZ0ludCB2YWx1ZSA9IGludENvbnN0YW50LmludFZhbHVlOwogICAgU3RyaW5nIHRleHQgPSB2YWx1ZS50b1N0cmluZygpOwogICAgaW50IHNpemUgPSB0ZXh0Lmxlbmd0aDsKICAgIGlmIChzaXplIDw9IDMpIHJldHVybjsKCiAgICBib29sIF9pc0NhY2hlYWJsZVVzZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhJbnZva2UpIHJldHVybiB0cnVlOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSENyZWF0ZSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUmV0dXJuKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhQaGkpIHJldHVybiB0cnVlOwoKICAgICAgLy8gSmF2YVNjcmlwdCBgeCA9PT0gNWAgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBgeCA9PT0gXzVgLgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSElkZW50aXR5KSByZXR1cm4gZmFsc2U7CgogICAgICAvLyBGb3JlaWduIGNvZGUgdGVtcGxhdGVzIG1heSB1c2UgbGl0ZXJhbHMgaW4gd2F5cyB0aGF0IGFyZSBiZW5lZmljaWFsLgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSEZvcmVpZ25Db2RlKSByZXR1cm4gZmFsc2U7CgogICAgICAvLyBUT0RPKHNyYSk6IERldGVybWluZSBpZiBvdGhlciB1c2VzIHJlc3VsdCBpbiBmYXN0ZXIgSmF2YVNjcmlwdCBjb2RlLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaW50IHVzZUNvdW50ID0gX2NvdW50Q2FjaGVhYmxlVXNlcyhub2RlLCBfaXNDYWNoZWFibGVVc2UpOwogICAgaWYgKHVzZUNvdW50ICogc2l6ZSA8PSA3ICsgc2l6ZSArIHVzZUNvdW50ICogMSkgcmV0dXJuOwogICAgX2NhY2hlKG5vZGUsIF9pc0NhY2hlYWJsZVVzZSwgJ18ke3RleHQucmVwbGFjZUZpcnN0KCItIiwgIl8iKX0nKTsKICB9CgogIHZvaWQgX2hhbmRsZVN0cmluZyhIQ29uc3RhbnQgbm9kZSwgU3RyaW5nQ29uc3RhbnRWYWx1ZSBzdHJpbmdDb25zdGFudCkgewogICAgU3RyaW5nIHZhbHVlID0gc3RyaW5nQ29uc3RhbnQuc3RyaW5nVmFsdWU7CiAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOwogICAgaW50IHNpemUgPSBsZW5ndGggKyAyOyAvLyBJbmNsdWRlIHF1b3Rlcy4KICAgIGlmIChzaXplIDw9IDIpIHJldHVybjsKCiAgICBib29sIF9pc0NhY2hlYWJsZVVzZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgLy8gRm9yZWlnbiBjb2RlIHRlbXBsYXRlcyBtYXkgdXNlIGxpdGVyYWxzIGluIHdheXMgdGhhdCBhcmUgYmVuZWZpY2lhbC4KICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhGb3JlaWduQ29kZSkgcmV0dXJuIGZhbHNlOwoKICAgICAgLy8gQ2FjaGUgbGFyZ2VyIHN0cmluZ3MgZXZlbiBpZiB1bmZvcnR1bmF0ZS4KICAgICAgaWYgKGxlbmd0aCA+PSAxNikgcmV0dXJuIHRydWU7CgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSEludm9rZSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ3JlYXRlKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhSZXR1cm4pIHJldHVybiB0cnVlOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFBoaSkgcmV0dXJuIHRydWU7CgogICAgICAvLyBUT0RPKHNyYSk6IENoZWNrIGlmIGEueD0icyIgY2FuIGF2b2lkIG9yIHNwZWNpYWxpemUgYSB3cml0ZSBiYXJyaWVyLgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSEZpZWxkU2V0KSByZXR1cm4gdHJ1ZTsKCiAgICAgIC8vIFRPRE8oc3JhKTogRGV0ZXJtaW5lIGlmIG90aGVyIHVzZXMgcmVzdWx0IGluIGZhc3RlciBKYXZhU2NyaXB0IGNvZGUuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpbnQgdXNlQ291bnQgPSBfY291bnRDYWNoZWFibGVVc2VzKG5vZGUsIF9pc0NhY2hlYWJsZVVzZSk7CiAgICBpZiAodXNlQ291bnQgKiBzaXplIDw9IDcgKyBzaXplICsgdXNlQ291bnQgKiAxKSByZXR1cm47CiAgICBfY2FjaGUobm9kZSwgX2lzQ2FjaGVhYmxlVXNlLCAnX3Mke2xlbmd0aH1f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ZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JyBzaG93IE1vZHVsYXJOYW1lcjsKaW1wb3J0ICdjb2RlZ2VuLmRhcnQnIHNob3cgQ29kZWdlblBoYXNlOwppbXBvcnQgJ25vZGVzLmRhcnQnOwoKLy8vIFRoZSBbTGl2ZVJhbmdlXSBjbGFzcyBjb3ZlcnMgYSByYW5nZSB3aGVyZSBhbiBpbnN0cnVjdGlvbiBpcyBsaXZlLgpjbGFzcyBMaXZlUmFuZ2UgewogIGZpbmFsIGludCBzdGFydDsKICAvLyBbZW5kXSBpcyBub3QgZmluYWwgYmVjYXVzZSBpdCBjYW4gYmUgdXBkYXRlZCBkdWUgdG8gbG9vcHMuCiAgaW50IGVuZDsKICBMaXZlUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5lbmQpIHsKICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1skc3RhcnQgJGVuZFsnOwp9CgovLy8gVGhlIFtMaXZlSW50ZXJ2YWxdIGNsYXNzIGNvbnRhaW5zIHRoZSBsaXN0IG9mIHJhbmdlcyB3aGVyZSBhbgovLy8gaW5zdHJ1Y3Rpb24gaXMgbGl2ZS4KY2xhc3MgTGl2ZUludGVydmFsIHsKICAvLy8gVGhlIGlkIHdoZXJlIHRoZSBpbnN0cnVjdGlvbiBpcyBkZWZpbmVkLgogIGludCBzdGFydDsKICBmaW5hbCBMaXN0PExpdmVSYW5nZT4gcmFuZ2VzOwogIExpdmVJbnRlcnZhbCgpIDogcmFuZ2VzID0gPExpdmVSYW5nZT5bXTsKCiAgLy8gV2Ugd2FudCBbSENoZWNrXSBpbnN0cnVjdGlvbnMgdG8gaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZQogIC8vIGluc3RydWN0aW9uIGl0IGNoZWNrcywgc28gYm90aCBpbnN0cnVjdGlvbnMgc2hvdWxkIHNoYXJlIHRoZSBzYW1lCiAgLy8gbGl2ZSByYW5nZXMuCiAgTGl2ZUludGVydmFsLmZvckNoZWNrKHRoaXMuc3RhcnQsIExpdmVJbnRlcnZhbCBjaGVja2VkSW50ZXJ2YWwpCiAgICAgIDogcmFuZ2VzID0gY2hlY2tlZEludGVydmFsLnJhbmdlczsKCiAgLy8vIFVwZGF0ZSBhbGwgcmFuZ2VzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiBbZnJvbSwgdG9bIHRvCiAgLy8vIGRpZSBhdCBbdG9dLgogIHZvaWQgbG9vcFVwZGF0ZShpbnQgZnJvbSwgaW50IHRvKSB7CiAgICBmb3IgKExpdmVSYW5nZSByYW5nZSBpbiByYW5nZXMpIHsKICAgICAgaWYgKGZyb20gPD0gcmFuZ2Uuc3RhcnQgJiYgcmFuZ2UuZW5kIDwgdG8pIHsKICAgICAgICByYW5nZS5lbmQgPSB0bzsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIEFkZCBhIG5ldyByYW5nZSB0byB0aGlzIGludGVydmFsLgogIHZvaWQgYWRkKExpdmVSYW5nZSBpbnRlcnZhbCkgewogICAgcmFuZ2VzLmFkZChpbnRlcnZhbCk7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIG9uZSBvZiB0aGUgcmFuZ2VzIG9mIHRoaXMgaW50ZXJ2YWwgZGllcyBhdCBbYXRdLgogIGJvb2wgZGllc0F0KGludCBhdCkgewogICAgZm9yIChMaXZlUmFuZ2UgcmFuZ2UgaW4gcmFuZ2VzKSB7CiAgICAgIGlmIChyYW5nZS5lbmQgPT0gYXQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgTGlzdDxTdHJpbmc+IHJlcyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICAgIGZvciAoZmluYWwgaW50ZXJ2YWwgaW4gcmFuZ2VzKSByZXMuYWRkKGludGVydmFsLnRvU3RyaW5nKCkpOwogICAgcmV0dXJuICcoJHtyZXMuam9pbigiLCAiKX0pJzsKICB9Cn0KCi8vLyBUaGUgW0xpdmVFbnZpcm9ubWVudF0gY2xhc3MgY29udGFpbnMgdGhlIGxpdmVJbiBzZXQgb2YgYSBiYXNpYwovLy8gYmxvY2suIEEgbGl2ZUluIHNldCBvZiBhIGJsb2NrIGNvbnRhaW5zIHRoZSBpbnN0cnVjdGlvbnMgdGhhdCBhcmUKLy8vIGxpdmUgd2hlbiBlbnRlcmluZyB0aGF0IGJsb2NrLgpjbGFzcyBMaXZlRW52aXJvbm1lbnQgewogIC8vLyBUaGUgaW5zdHJ1Y3Rpb24gaWQgd2hlcmUgdGhlIGJhc2ljIGJsb2NrIHN0YXJ0cy4gU2VlCiAgLy8vIFtTc2FMaXZlSW50ZXJ2YWxCdWlsZGVyLmluc3RydWN0aW9uSWRdLgogIGludCBzdGFydElkOwoKICAvLy8gVGhlIGluc3RydWN0aW9uIGlkIHdoZXJlIHRoZSBiYXNpYyBibG9jayBlbmRzLgogIGZpbmFsIGludCBlbmRJZDsKCiAgLy8vIExvb3AgbWFya2VycyB0aGF0IHdpbGwgYmUgdXBkYXRlZCBvbmNlIHRoZSBsb29wIGhlYWRlciBpcwogIC8vLyB2aXNpdGVkLiBUaGUgbGl2ZUluIHNldCBvZiB0aGUgbG9vcCBoZWFkZXIgd2lsbCBiZSBtZXJnZWQgaW50byB0aGlzCiAgLy8vIGVudmlyb25tZW50LiBbbG9vcE1hcmtlcnNdIGlzIGEgbWFwcGluZyBmcm9tIGJsb2NrIGhlYWRlciB0byB0aGUKICAvLy8gZW5kIGluc3RydWN0aW9uIGlkIG9mIHRoZSBsb29wIGV4aXQgYmxvY2suCiAgZmluYWwgTWFwPEhCYXNpY0Jsb2NrLCBpbnQ+IGxvb3BNYXJrZXJzOwoKICAvLy8gVGhlIGluc3RydWN0aW9ucyB0aGF0IGFyZSBsaXZlIGluIHRoaXMgYmFzaWMgYmxvY2suIFRoZSB2YWx1ZXMgb2YKICAvLy8gdGhlIG1hcCBjb250YWluIHRoZSBpbnN0cnVjdGlvbiBpZHMgd2hlcmUgdGhlIGluc3RydWN0aW9ucyBkaWUuCiAgLy8vIEl0IHdpbGwgYmUgdXNlZCB3aGVuIGFkZGluZyBhIHJhbmdlIHRvIHRoZSBsaXZlIGludGVydmFsIG9mIGFuCiAgLy8vIGluc3RydWN0aW9uLgogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIGludD4gbGl2ZUluc3RydWN0aW9uczsKCiAgLy8vIE1hcCBjb250YWluaW5nIHRoZSBsaXZlIGludGVydmFscyBvZiBpbnN0cnVjdGlvbnMuCiAgZmluYWwgTWFwPEhJbnN0cnVjdGlvbiwgTGl2ZUludGVydmFsPiBsaXZlSW50ZXJ2YWxzOwoKICBMaXZlRW52aXJvbm1lbnQodGhpcy5saXZlSW50ZXJ2YWxzLCB0aGlzLmVuZElkKQogICAgICA6IGxpdmVJbnN0cnVjdGlvbnMgPSBuZXcgTWFwPEhJbnN0cnVjdGlvbiwgaW50PigpLAogICAgICAgIGxvb3BNYXJrZXJzID0gbmV3IE1hcDxIQmFzaWNCbG9jaywgaW50PigpOwoKICAvLy8gUmVtb3ZlIGFuIGluc3RydWN0aW9uIGZyb20gdGhlIGxpdmVJbiBzZXQuIFRoaXMgbWV0aG9kIGFsc28KICAvLy8gdXBkYXRlcyB0aGUgbGl2ZSBpbnRlcnZhbCBvZiBbaW5zdHJ1Y3Rpb25dIHRvIGNvbnRhaW4gdGhlIG5ldwogIC8vLyByYW5nZTogW2lkLCAvIGlkIGNvbnRhaW5lZCBpbiBbbGl2ZUluc3RydWN0aW9uc10gL10uCiAgdm9pZCByZW1vdmUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBpbnQgaWQpIHsKICAgIExpdmVJbnRlcnZhbCBpbnRlcnZhbCA9CiAgICAgICAgbGl2ZUludGVydmFscy5wdXRJZkFic2VudChpbnN0cnVjdGlvbiwgKCkgPT4gbmV3IExpdmVJbnRlcnZhbCgpKTsKICAgIGludCBsYXN0SWQgPSBsaXZlSW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uXTsKICAgIC8vIElmIFtsYXN0SWRdIGlzIG51bGwsIHRoZW4gdGhpcyBpbnN0cnVjdGlvbiBpcyBub3QgYmVpbmcgdXNlZC4KICAgIGludGVydmFsLmFkZChuZXcgTGl2ZVJhbmdlKGlkLCBsYXN0SWQgPT0gbnVsbCA/IGlkIDogbGFzdElkKSk7CiAgICAvLyBUaGUgaW5zdHJ1Y3Rpb24gaXMgZGVmaW5lZCBhdCBbaWRdLgogICAgaW50ZXJ2YWwuc3RhcnQgPSBpZDsKICAgIGxpdmVJbnN0cnVjdGlvbnMucmVtb3ZlKGluc3RydWN0aW9uKTsKICB9CgogIC8vLyBBZGQgW2luc3RydWN0aW9uXSB0byB0aGUgbGl2ZUluIHNldC4gSWYgdGhlIGluc3RydWN0aW9uIGlzIG5vdAogIC8vLyBhbHJlYWR5IGluIHRoZSBzZXQsIHdlIHNhdmUgdGhlIGlkIHdoZXJlIGl0IGRpZXMuCiAgdm9pZCBhZGQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBpbnQgdXNlcklkKSB7CiAgICAvLyBOb3RlIHRoYXQgd2UgYXJlIHZpc2l0aW5nIHRoZSBncmFwaCBpbiBwb3N0LWRvbWluYXRvciBvcmRlciwgc28KICAgIC8vIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBhIHZhcmlhYmxlIGlzIHdoZW4gaXQgZGllcy4KICAgIGxpdmVJbnN0cnVjdGlvbnMucHV0SWZBYnNlbnQoaW5zdHJ1Y3Rpb24sICgpID0+IHVzZXJJZCk7CiAgfQoKICAvLy8gTWVyZ2UgdGhpcyBlbnZpcm9ubWVudCB3aXRoIFtvdGhlcl0uIFVwZGF0ZSB0aGUgZW5kIGlkIG9mCiAgLy8vIGluc3RydWN0aW9ucyBpbiBjYXNlIHRoZXkgYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHRoaXMgYW5kIFtvdGhlcl0uCiAgdm9pZCBtZXJnZVdpdGgoTGl2ZUVudmlyb25tZW50IG90aGVyKSB7CiAgICBvdGhlci5saXZlSW5zdHJ1Y3Rpb25zLmZvckVhY2goKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW50IGV4aXN0aW5nSWQpIHsKICAgICAgLy8gSWYgYm90aCBlbnZpcm9ubWVudHMgaGF2ZSB0aGUgc2FtZSBpbnN0cnVjdGlvbiBpZCBvZiB3aGVyZQogICAgICAvLyBbaW5zdHJ1Y3Rpb25dIGRpZXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBsaXZlCiAgICAgIC8vIGludGVydmFsIG9mIFtpbnN0cnVjdGlvbl0uIEZvciBleGFtcGxlIHRoZSBpZiBibG9jayBhbmQgdGhlCiAgICAgIC8vIGVsc2UgYmxvY2sgaGF2ZSB0aGUgc2FtZSBlbmQgaWQgZm9yIGFuIGluc3RydWN0aW9uIHRoYXQgaXMKICAgICAgLy8gYmVpbmcgdXNlZCBpbiB0aGUgam9pbiBibG9jayBhbmQgZGVmaW5lZCBiZWZvcmUgdGhlIGlmL2Vsc2UuCiAgICAgIGlmIChleGlzdGluZ0lkID09IGVuZElkKSByZXR1cm47CiAgICAgIExpdmVJbnRlcnZhbCByYW5nZSA9CiAgICAgICAgICBsaXZlSW50ZXJ2YWxzLnB1dElmQWJzZW50KGluc3RydWN0aW9uLCAoKSA9PiBuZXcgTGl2ZUludGVydmFsKCkpOwogICAgICByYW5nZS5hZGQobmV3IExpdmVSYW5nZShvdGhlci5zdGFydElkLCBleGlzdGluZ0lkKSk7CiAgICAgIGxpdmVJbnN0cnVjdGlvbnNbaW5zdHJ1Y3Rpb25dID0gZW5kSWQ7CiAgICB9KTsKICAgIG90aGVyLmxvb3BNYXJrZXJzLmZvckVhY2goKGssIHYpIHsKICAgICAgbG9vcE1hcmtlcnNba10gPSB2OwogICAgfSk7CiAgfQoKICB2b2lkIGFkZExvb3BNYXJrZXIoSEJhc2ljQmxvY2sgaGVhZGVyLCBpbnQgaWQpIHsKICAgIGFzc2VydCghbG9vcE1hcmtlcnMuY29udGFpbnNLZXkoaGVhZGVyKSk7CiAgICBsb29wTWFya2Vyc1toZWFkZXJdID0gaWQ7CiAgfQoKICB2b2lkIHJlbW92ZUxvb3BNYXJrZXIoSEJhc2ljQmxvY2sgaGVhZGVyKSB7CiAgICBhc3NlcnQobG9vcE1hcmtlcnMuY29udGFpbnNLZXkoaGVhZGVyKSk7CiAgICBsb29wTWFya2Vycy5yZW1vdmUoaGVhZGVyKTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGl2ZUluc3RydWN0aW9ucy5pc0VtcHR5ICYmIGxvb3BNYXJrZXJzLmlzRW1wdHk7CiAgYm9vbCBjb250YWlucyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pID0+CiAgICAgIGxpdmVJbnN0cnVjdGlvbnMuY29udGFpbnNLZXkoaW5zdHJ1Y3Rpb24pOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGxpdmVJbnN0cnVjdGlvbnMudG9TdHJpbmcoKTsKfQoKLy8vIEJ1aWxkcyB0aGUgbGl2ZSBpbnRlcnZhbHMgb2YgZWFjaCBpbnN0cnVjdGlvbi4gVGhlIGFsZ29yaXRobSB2aXNpdHMKLy8vIHRoZSBncmFwaCBwb3N0LWRvbWluYXRvciB0cmVlIHRvIGZpbmQgdGhlIGxhc3QgdXNlcyBvZiBhbgovLy8gaW5zdHJ1Y3Rpb24sIGFuZCBjb21wdXRlcyB0aGUgbGl2ZUlucyBvZiBlYWNoIGJhc2ljIGJsb2NrLgpjbGFzcyBTc2FMaXZlSW50ZXJ2YWxCdWlsZGVyIGV4dGVuZHMgSEJhc2VWaXNpdG9yIHdpdGggQ29kZWdlblBoYXNlIHsKICBmaW5hbCBTZXQ8SEluc3RydWN0aW9uPiBnZW5lcmF0ZUF0VXNlU2l0ZTsKICBmaW5hbCBTZXQ8SEluc3RydWN0aW9uPiBjb250cm9sRmxvd09wZXJhdG9yczsKCiAgLy8vIEEgY291bnRlciB0byBhc3NpZ24gc3RhcnQgYW5kIGVuZCBpZHMgdG8gbGl2ZSByYW5nZXMuIFRoZSBpbml0aWFsCiAgLy8vIHZhbHVlIGlzIG5vdCByZWxldmFudC4gTm90ZSB0aGF0IGluc3RydWN0aW9uSWQgZ29lcyBkb3dud2FyZCB0byBlYXNlCiAgLy8vIHJlYXNvbmluZyBhYm91dCBsaXZlIHJhbmdlcyAodGhlIGZpcnN0IGluc3RydWN0aW9uIG9mIGEgZ3JhcGggaGFzCiAgLy8vIHRoZSBsb3dlc3QgaWQpLgogIGludCBpbnN0cnVjdGlvbklkID0gMDsKCiAgLy8vIFRoZSBsaXZlSW5zIG9mIGJhc2ljIGJsb2Nrcy4KICBmaW5hbCBNYXA8SEJhc2ljQmxvY2ssIExpdmVFbnZpcm9ubWVudD4gbGl2ZUluc3RydWN0aW9uczsKCiAgLy8vIFRoZSBsaXZlIGludGVydmFscyBvZiBpbnN0cnVjdGlvbnMuCiAgZmluYWwgTWFwPEhJbnN0cnVjdGlvbiwgTGl2ZUludGVydmFsPiBsaXZlSW50ZXJ2YWxzOwoKICBTc2FMaXZlSW50ZXJ2YWxCdWlsZGVyKHRoaXMuZ2VuZXJhdGVBdFVzZVNpdGUsIHRoaXMuY29udHJvbEZsb3dPcGVyYXRvcnMpCiAgICAgIDogbGl2ZUluc3RydWN0aW9ucyA9IG5ldyBNYXA8SEJhc2ljQmxvY2ssIExpdmVFbnZpcm9ubWVudD4oKSwKICAgICAgICBsaXZlSW50ZXJ2YWxzID0gbmV3IE1hcDxISW5zdHJ1Y3Rpb24sIExpdmVJbnRlcnZhbD4oKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgdmlzaXRQb3N0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgICBpZiAoIWxpdmVJbnN0cnVjdGlvbnNbZ3JhcGguZW50cnldLmlzRW1wdHkpIHsKICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgJ0xpdmVJbnRlcnZhbEJ1aWxkZXIuJyk7CiAgICB9CiAgfQoKICB2b2lkIG1hcmtJbnB1dHNBc0xpdmVJbkVudmlyb25tZW50KAogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIExpdmVFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgZm9yIChpbnQgaSA9IDAsIGxlbiA9IGluc3RydWN0aW9uLmlucHV0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICBtYXJrQXNMaXZlSW5FbnZpcm9ubWVudChpbnN0cnVjdGlvbi5pbnB1dHNbaV0sIGVudmlyb25tZW50KTsKICAgIH0KICB9CgogIC8vIFJldHVybnMgdGhlIG5vbi1IQ2hlY2sgaW5zdHJ1Y3Rpb24sIG9yIHRoZSBsYXN0IFtIQ2hlY2tdIGluIHRoZQogIC8vIGNoZWNrIGNoYWluIHRoYXQgaXMgbm90IGdlbmVyYXRlIGF0IHVzZSBzaXRlLgogIC8vCiAgLy8gRm9yIGV4YW1wbGU6CiAgLy8KICAvLyAgICAgdDEgPSBHZW5lcmF0ZWRBdFVzZVNpdGUgaW5zdHJ1Y3Rpb24KICAvLyAgICAgdDIgPSBjaGVjayh0MSkKICAvLyAgICAgdDMgPSBjaGVjayh0MikKICAvLyAgICAgdDQgPSB1c2UodDMpCiAgLy8gICAgIHQ1ID0gdXNlKHQzKQogIC8vICAgICB0NiA9IHVzZSh0MikKICAvLwogIC8vIFRoZSB0MSBpcyBnZW5lcmF0ZS1hdC11c2Ugc2l0ZSwgYW5kIHRoZSBsaXZlLXJhbmdlIG11c3QgdGh1cyBiZSBvbiB0MiBhbmQKICAvLyBub3Qgb24gdGhlIGNoZWNrZWQgaW5zdHJ1Y3Rpb24gdDEuCiAgLy8gV2hlbiBsb29raW5nIGZvciB0aGUgY2hlY2tlZEluc3RydWN0aW9uT3JOb25HZW5lcmF0ZUF0VXNlU2l0ZSBvZiB0MyB3ZSBtdXN0CiAgLy8gcmV0dXJuIHQyLgogIEhJbnN0cnVjdGlvbiBjaGVja2VkSW5zdHJ1Y3Rpb25Pck5vbkdlbmVyYXRlQXRVc2VTaXRlKEhDaGVjayBjaGVjaykgewogICAgZHluYW1pYyBjaGVja2VkID0gY2hlY2suY2hlY2tlZElucHV0OwogICAgd2hpbGUgKGNoZWNrZWQgaXMgSENoZWNrKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gY2hlY2tlZC5jaGVja2VkSW5wdXQ7CiAgICAgIGlmIChnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhuZXh0KSkgYnJlYWs7CiAgICAgIGNoZWNrZWQgPSBuZXh0OwogICAgfQogICAgcmV0dXJuIGNoZWNrZWQ7CiAgfQoKICB2b2lkIG1hcmtBc0xpdmVJbkVudmlyb25tZW50KAogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIExpdmVFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgaWYgKGdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGluc3RydWN0aW9uKSkgewogICAgICBtYXJrSW5wdXRzQXNMaXZlSW5FbnZpcm9ubWVudChpbnN0cnVjdGlvbiwgZW52aXJvbm1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgZW52aXJvbm1lbnQuYWRkKGluc3RydWN0aW9uLCBpbnN0cnVjdGlvbklkKTsKICAgICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBIQ2hlY2sgaW5zdHJ1Y3Rpb24gdG8gbWFyayB0aGUgYWN0dWFsCiAgICAgIC8vIGNoZWNrZWQgaW5zdHJ1Y3Rpb24gbGl2ZS4gVGhlIGNoZWNrZWQgaW5zdHJ1Y3Rpb24gYW5kIHRoZQogICAgICAvLyBbSENoZWNrXSB3aWxsIHNoYXJlIHRoZSBzYW1lIGxpdmUgcmFuZ2VzLgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSENoZWNrKSB7CiAgICAgICAgSENoZWNrIGNoZWNrID0gaW5zdHJ1Y3Rpb247CiAgICAgICAgSEluc3RydWN0aW9uIGNoZWNrZWQgPSBjaGVja2VkSW5zdHJ1Y3Rpb25Pck5vbkdlbmVyYXRlQXRVc2VTaXRlKGNoZWNrKTsKICAgICAgICBpZiAoIWdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGNoZWNrZWQpKSB7CiAgICAgICAgICBlbnZpcm9ubWVudC5hZGQoY2hlY2tlZCwgaW5zdHJ1Y3Rpb25JZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZUZyb21FbnZpcm9ubWVudCgKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBMaXZlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIGVudmlyb25tZW50LnJlbW92ZShpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb25JZCk7CiAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIEhDaGVjayBpbnN0cnVjdGlvbiB0byBoYXZlIHRoZSBzYW1lIGxpdmUKICAgIC8vIGludGVydmFsIGFzIHRoZSBpbnN0cnVjdGlvbiBpdCBpcyBjaGVja2luZy4KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ2hlY2spIHsKICAgICAgSENoZWNrIGNoZWNrID0gaW5zdHJ1Y3Rpb247CiAgICAgIEhJbnN0cnVjdGlvbiBjaGVja2VkID0gY2hlY2tlZEluc3RydWN0aW9uT3JOb25HZW5lcmF0ZUF0VXNlU2l0ZShjaGVjayk7CiAgICAgIGlmICghZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoY2hlY2tlZCkpIHsKICAgICAgICBsaXZlSW50ZXJ2YWxzLnB1dElmQWJzZW50KGNoZWNrZWQsICgpID0+IG5ldyBMaXZlSW50ZXJ2YWwoKSk7CiAgICAgICAgLy8gVW5jb25kaXRpb25hbGx5IGZvcmNlIHRoZSBsaXZlIHJhbmdlcyBvZiB0aGUgSENoZWNrIHRvCiAgICAgICAgLy8gYmUgdGhlIGxpdmUgcmFuZ2VzIG9mIHRoZSBpbnN0cnVjdGlvbiBpdCBpcyBjaGVja2luZy4KICAgICAgICBsaXZlSW50ZXJ2YWxzW2luc3RydWN0aW9uXSA9CiAgICAgICAgICAgIG5ldyBMaXZlSW50ZXJ2YWwuZm9yQ2hlY2soaW5zdHJ1Y3Rpb25JZCwgbGl2ZUludGVydmFsc1tjaGVja2VkXSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBMaXZlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQgPQogICAgICAgIG5ldyBMaXZlRW52aXJvbm1lbnQobGl2ZUludGVydmFscywgaW5zdHJ1Y3Rpb25JZCk7CgogICAgLy8gSWYgdGhlIGNvbnRyb2wgZmxvdyBpbnN0cnVjdGlvbiBpbiB0aGlzIGJsb2NrIHdpbGwgYWN0dWFsbHkgYmUKICAgIC8vIGlubGluZWQgaW4gdGhlIGNvZGVnZW4gaW4gdGhlIGpvaW4gYmxvY2ssIHdlIG5lZWQgdG8gbWFrZQogICAgLy8gd2hhdGV2ZXIgaXMgdXNlZCBieSB0aGF0IGNvbnRyb2wgZmxvdyBpbnN0cnVjdGlvbiBhcyBsaXZlIGluCiAgICAvLyB0aGUgam9pbiBibG9jay4KICAgIGlmIChjb250cm9sRmxvd09wZXJhdG9ycy5jb250YWlucyhibG9jay5sYXN0KSkgewogICAgICBISWYgaWZJbnN0cnVjdGlvbiA9IGJsb2NrLmxhc3Q7CiAgICAgIEhCYXNpY0Jsb2NrIGpvaW5CbG9jayA9IGlmSW5zdHJ1Y3Rpb24uam9pbkJsb2NrOwogICAgICBpZiAoZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoam9pbkJsb2NrLnBoaXMuZmlyc3QpKSB7CiAgICAgICAgbWFya0lucHV0c0FzTGl2ZUluRW52aXJvbm1lbnQoCiAgICAgICAgICAgIGlmSW5zdHJ1Y3Rpb24sIGxpdmVJbnN0cnVjdGlvbnNbam9pbkJsb2NrXSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBBZGQgdG8gdGhlIGVudmlyb25tZW50IHRoZSBsaXZlSW4gb2YgaXRzIHN1Y2Nlc3NvciwgYXMgd2VsbCBhcwogICAgLy8gdGhlIGlucHV0cyBvZiB0aGUgcGhpcyBvZiB0aGUgc3VjY2Vzc29yIHRoYXQgZmxvdyBmcm9tIHRoaXMgYmxvY2suCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgSEJhc2ljQmxvY2sgc3VjY2Vzc29yID0gYmxvY2suc3VjY2Vzc29yc1tpXTsKICAgICAgTGl2ZUVudmlyb25tZW50IHN1Y2Nlc3NvckVudiA9IGxpdmVJbnN0cnVjdGlvbnNbc3VjY2Vzc29yXTsKICAgICAgaWYgKHN1Y2Nlc3NvckVudiAhPSBudWxsKSB7CiAgICAgICAgZW52aXJvbm1lbnQubWVyZ2VXaXRoKHN1Y2Nlc3NvckVudik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW52aXJvbm1lbnQuYWRkTG9vcE1hcmtlcihzdWNjZXNzb3IsIGluc3RydWN0aW9uSWQpOwogICAgICB9CgogICAgICBpbnQgaW5kZXggPSBzdWNjZXNzb3IucHJlZGVjZXNzb3JzLmluZGV4T2YoYmxvY2spOwogICAgICBmb3IgKEhQaGkgcGhpID0gc3VjY2Vzc29yLnBoaXMuZmlyc3Q7IHBoaSAhPSBudWxsOyBwaGkgPSBwaGkubmV4dCkgewogICAgICAgIG1hcmtBc0xpdmVJbkVudmlyb25tZW50KHBoaS5pbnB1dHNbaW5kZXhdLCBlbnZpcm9ubWVudCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGluc3RydWN0aW9ucyB0byByZW1vdmUgYW4gaW5zdHJ1Y3Rpb24gZnJvbSB0aGUKICAgIC8vIGVudmlyb25tZW50IGFuZCBhZGQgaXRzIGlucHV0cy4KICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmxhc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBpZiAoIWdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGluc3RydWN0aW9uKSkgewogICAgICAgIHJlbW92ZUZyb21FbnZpcm9ubWVudChpbnN0cnVjdGlvbiwgZW52aXJvbm1lbnQpOwogICAgICAgIG1hcmtJbnB1dHNBc0xpdmVJbkVudmlyb25tZW50KGluc3RydWN0aW9uLCBlbnZpcm9ubWVudCk7CiAgICAgIH0KICAgICAgaW5zdHJ1Y3Rpb25JZC0tOwogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLnByZXZpb3VzOwogICAgfQoKICAgIC8vIFdlIGp1c3QgcmVtb3ZlIHRoZSBwaGlzIGZyb20gdGhlIGVudmlyb25tZW50LiBUaGUgaW5wdXRzIG9mIHRoZQogICAgLy8gcGhpcyB3aWxsIGJlIHB1dCBpbiB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIHByZWRlY2Vzc29ycy4KICAgIGZvciAoSFBoaSBwaGkgPSBibG9jay5waGlzLmZpcnN0OyBwaGkgIT0gbnVsbDsgcGhpID0gcGhpLm5leHQpIHsKICAgICAgaWYgKCFnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhwaGkpKSB7CiAgICAgICAgZW52aXJvbm1lbnQucmVtb3ZlKHBoaSwgaW5zdHJ1Y3Rpb25JZCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBTYXZlIHRoZSBsaXZlSW5zdHJ1Y3Rpb25zIG9mIHRoYXQgYmxvY2suCiAgICBlbnZpcm9ubWVudC5zdGFydElkID0gaW5zdHJ1Y3Rpb25JZCArIDE7CiAgICBsaXZlSW5zdHJ1Y3Rpb25zW2Jsb2NrXSA9IGVudmlyb25tZW50OwoKICAgIC8vIElmIHRoZSBibG9jayBpcyBhIGxvb3AgaGVhZGVyLCB3ZSBjYW4gcmVtb3ZlIHRoZSBsb29wIG1hcmtlciwKICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBqdXN0IHJlY29tcHV0ZSB0aGUgbG9vcCBwaGlzLgogICAgLy8gV2UgYWxzbyBjaGVjayBpZiB0aGlzIGxvb3AgaGVhZGVyIGhhcyBhbnkgYmFjayBlZGdlcy4gSWYgbm90LAogICAgLy8gd2Uga25vdyB0aGVyZSBpcyBubyBsb29wIG1hcmtlciBmb3IgaXQuCiAgICBpZiAoYmxvY2suaXNMb29wSGVhZGVyKCkgJiYgYmxvY2sucHJlZGVjZXNzb3JzLmxlbmd0aCA+IDEpIHsKICAgICAgdXBkYXRlTG9vcE1hcmtlcihibG9jayk7CiAgICB9CiAgfQoKICB2b2lkIHVwZGF0ZUxvb3BNYXJrZXIoSEJhc2ljQmxvY2sgaGVhZGVyKSB7CiAgICBMaXZlRW52aXJvbm1lbnQgZW52ID0gbGl2ZUluc3RydWN0aW9uc1toZWFkZXJdOwogICAgaW50IGxhc3RJZCA9IGVudi5sb29wTWFya2Vyc1toZWFkZXJdOwogICAgLy8gVXBkYXRlIGFsbCBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgbGl2ZUlucyBpbiBbaGVhZGVyXSB0byBoYXZlIGEKICAgIC8vIHJhbmdlIHRoYXQgY292ZXJzIHRoZSBsb29wLgogICAgZW52LmxpdmVJbnN0cnVjdGlvbnMuZm9yRWFjaCgoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBpbnQgaWQpIHsKICAgICAgTGl2ZUludGVydmFsIHJhbmdlID0KICAgICAgICAgIGVudi5saXZlSW50ZXJ2YWxzLnB1dElmQWJzZW50KGluc3RydWN0aW9uLCAoKSA9PiBuZXcgTGl2ZUludGVydmFsKCkpOwogICAgICByYW5nZS5sb29wVXBkYXRlKGVudi5zdGFydElkLCBsYXN0SWQpOwogICAgICBlbnYubGl2ZUluc3RydWN0aW9uc1tpbnN0cnVjdGlvbl0gPSBsYXN0SWQ7CiAgICB9KTsKCiAgICBlbnYucmVtb3ZlTG9vcE1hcmtlcihoZWFkZXIpOwoKICAgIC8vIFVwZGF0ZSBhbGwgbGl2ZUlucyBzZXQgdG8gY29udGFpbiB0aGUgbGl2ZUlucyBvZiBbaGVhZGVyXS4KICAgIGxpdmVJbnN0cnVjdGlvbnMuZm9yRWFjaCgoSEJhc2ljQmxvY2sgYmxvY2ssIExpdmVFbnZpcm9ubWVudCBvdGhlcikgewogICAgICBpZiAob3RoZXIubG9vcE1hcmtlcnMuY29udGFpbnNLZXkoaGVhZGVyKSkgewogICAgICAgIGVudi5saXZlSW5zdHJ1Y3Rpb25zLmZvckVhY2goKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW50IGlkKSB7CiAgICAgICAgICBvdGhlci5saXZlSW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uXSA9IGlkOwogICAgICAgIH0pOwogICAgICAgIG90aGVyLnJlbW92ZUxvb3BNYXJrZXIoaGVhZGVyKTsKICAgICAgICBlbnYubG9vcE1hcmtlcnMuZm9yRWFjaCgoaywgdikgewogICAgICAgICAgb3RoZXIubG9vcE1hcmtlcnNba10gPSB2OwogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICB9Cn0KCi8vLyBSZXByZXNlbnRzIGEgY29weSBmcm9tIG9uZSBpbnN0cnVjdGlvbiB0byBhbm90aGVyLiBUaGUgY29kZWdlbgovLy8gYWxzbyB1c2VzIHRoaXMgY2xhc3MgdG8gcmVwcmVzZW50IGEgY29weSBmcm9tIG9uZSB2YXJpYWJsZSB0bwovLy8gYW5vdGhlci4KY2xhc3MgQ29weTxUPiB7CiAgZmluYWwgVCBzb3VyY2U7CiAgZmluYWwgVCBkZXN0aW5hdGlvbjsKCiAgQ29weSh0aGlzLnNvdXJjZSwgdGhpcy5kZXN0aW5hdGlvbik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICckZGVzdGluYXRpb24gPC0gJHNvdXJjZSc7Cn0KCi8vLyBBIGNvcHkgaGFuZGxlciBjb250YWlucyB0aGUgY29waWVzIHRoYXQgYSBiYXNpYyBibG9jayBuZWVkcyB0byBkbwovLy8gYWZ0ZXIgZXhlY3V0aW5nIGFsbCBpdHMgaW5zdHJ1Y3Rpb25zLgpjbGFzcyBDb3B5SGFuZGxlciB7CiAgLy8vIFRoZSBjb3BpZXMgZnJvbSBhbiBpbnN0cnVjdGlvbiB0byBhIHBoaSBvZiB0aGUgc3VjY2Vzc29yLgogIGZpbmFsIExpc3Q8Q29weTxISW5zdHJ1Y3Rpb24+PiBjb3BpZXM7CgogIC8vLyBBc3NpZ25tZW50cyBmcm9tIGFuIGluc3RydWN0aW9uIHRoYXQgZG9lcyBub3QgbmVlZCBhIG5hbWUgKGUuZy4gYQogIC8vLyBjb25zdGFudCkgdG8gdGhlIHBoaSBvZiBhIHN1Y2Nlc3Nvci4KICBmaW5hbCBMaXN0PENvcHk8SEluc3RydWN0aW9uPj4gYXNzaWdubWVudHM7CgogIENvcHlIYW5kbGVyKCkKICAgICAgOiBjb3BpZXMgPSBuZXcgTGlzdDxDb3B5PEhJbnN0cnVjdGlvbj4+KCksCiAgICAgICAgYXNzaWdubWVudHMgPSBuZXcgTGlzdDxDb3B5PEhJbnN0cnVjdGlvbj4+KCk7CgogIHZvaWQgYWRkQ29weShISW5zdHJ1Y3Rpb24gc291cmNlLCBISW5zdHJ1Y3Rpb24gZGVzdGluYXRpb24pIHsKICAgIGNvcGllcy5hZGQobmV3IENvcHk8SEluc3RydWN0aW9uPihzb3VyY2UsIGRlc3RpbmF0aW9uKSk7CiAgfQoKICB2b2lkIGFkZEFzc2lnbm1lbnQoSEluc3RydWN0aW9uIHNvdXJjZSwgSEluc3RydWN0aW9uIGRlc3RpbmF0aW9uKSB7CiAgICBhc3NpZ25tZW50cy5hZGQobmV3IENvcHk8SEluc3RydWN0aW9uPihzb3VyY2UsIGRlc3RpbmF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ29waWVzOiAkY29waWVzLCBhc3NpZ25tZW50czogJGFzc2lnbm1lbnRzJzsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBjb3BpZXMuaXNFbXB0eSAmJiBhc3NpZ25tZW50cy5pc0VtcHR5Owp9CgovLy8gQ29udGFpbnMgdGhlIG1hcHBpbmcgYmV0d2VlbiBpbnN0cnVjdGlvbnMgYW5kIHRoZWlyIG5hbWVzIGZvciBjb2RlCi8vLyBnZW5lcmF0aW9uLCBhcyB3ZWxsIGFzIHRoZSBbQ29weUhhbmRsZXJdIGZvciBlYWNoIGJhc2ljIGJsb2NrLgpjbGFzcyBWYXJpYWJsZU5hbWVzIHsKICBmaW5hbCBNYXA8SEluc3RydWN0aW9uLCBTdHJpbmc+IG93bk5hbWU7CiAgZmluYWwgTWFwPEhCYXNpY0Jsb2NrLCBDb3B5SGFuZGxlcj4gY29weUhhbmRsZXJzOwoKICAvLyBVc2VkIHRvIGNvbnRyb2wgaGV1cmlzdGljIHRoYXQgZGV0ZXJtaW5lcyBob3cgbG9jYWwgdmFyaWFibGVzIGFyZSBkZWNsYXJlZC4KICBmaW5hbCBTZXQ8U3RyaW5nPiBhbGxVc2VkTmFtZXM7CgogIC8vLyBOYW1lIHRoYXQgaXMgdXNlZCBhcyBhIHRlbXBvcmFyeSB0byBicmVhayBjeWNsZXMgaW4KICAvLy8gcGFyYWxsZWwgY29waWVzLiBXZSBtYWtlIHN1cmUgdGhpcyBuYW1lIGlzIG5vdCBiZWluZyB1c2VkCiAgLy8vIGFueXdoZXJlIGJ5IHJlc2VydmluZyBpdCB3aGVuIHdlIGFsbG9jYXRlIG5hbWVzIGZvciBpbnN0cnVjdGlvbnMuCiAgZmluYWwgU3RyaW5nIHN3YXBUZW1wOwoKICBTdHJpbmcgZ2V0U3dhcFRlbXAoKSB7CiAgICBhbGxVc2VkTmFtZXMuYWRkKHN3YXBUZW1wKTsKICAgIHJldHVybiBzd2FwVGVtcDsKICB9CgogIFZhcmlhYmxlTmFtZXMoKQogICAgICA6IG93bk5hbWUgPSBuZXcgTWFwPEhJbnN0cnVjdGlvbiwgU3RyaW5nPigpLAogICAgICAgIGNvcHlIYW5kbGVycyA9IG5ldyBNYXA8SEJhc2ljQmxvY2ssIENvcHlIYW5kbGVyPigpLAogICAgICAgIGFsbFVzZWROYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpLAogICAgICAgIHN3YXBUZW1wID0gJ3QwJzsKCiAgaW50IGdldCBudW1iZXJPZlZhcmlhYmxlcyA9PiBhbGxVc2VkTmFtZXMubGVuZ3RoOwoKICBTdHJpbmcgZ2V0TmFtZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiBvd25OYW1lW2luc3RydWN0aW9uXTsKICB9CgogIENvcHlIYW5kbGVyIGdldENvcHlIYW5kbGVyKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICByZXR1cm4gY29weUhhbmRsZXJzW2Jsb2NrXTsKICB9CgogIHZvaWQgYWRkTmFtZVVzZWQoU3RyaW5nIG5hbWUpIHsKICAgIGFsbFVzZWROYW1lcy5hZGQobmFtZSk7CiAgfQoKICBib29sIGhhc05hbWUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSA9PiBvd25OYW1lLmNvbnRhaW5zS2V5KGluc3RydWN0aW9uKTsKCiAgdm9pZCBhZGRDb3B5KEhCYXNpY0Jsb2NrIGJsb2NrLCBISW5zdHJ1Y3Rpb24gc291cmNlLCBIUGhpIGRlc3RpbmF0aW9uKSB7CiAgICBDb3B5SGFuZGxlciBoYW5kbGVyID0KICAgICAgICBjb3B5SGFuZGxlcnMucHV0SWZBYnNlbnQoYmxvY2ssICgpID0+IG5ldyBDb3B5SGFuZGxlcigpKTsKICAgIGhhbmRsZXIuYWRkQ29weShzb3VyY2UsIGRlc3RpbmF0aW9uKTsKICB9CgogIHZvaWQgYWRkQXNzaWdubWVudChIQmFzaWNCbG9jayBibG9jaywgSEluc3RydWN0aW9uIHNvdXJjZSwgSFBoaSBkZXN0aW5hdGlvbikgewogICAgQ29weUhhbmRsZXIgaGFuZGxlciA9CiAgICAgICAgY29weUhhbmRsZXJzLnB1dElmQWJzZW50KGJsb2NrLCAoKSA9PiBuZXcgQ29weUhhbmRsZXIoKSk7CiAgICBoYW5kbGVyLmFkZEFzc2lnbm1lbnQoc291cmNlLCBkZXN0aW5hdGlvbik7CiAgfQp9CgovLy8gQWxsb2NhdGVzIHZhcmlhYmxlIG5hbWVzIGZvciBpbnN0cnVjdGlvbnMsIG1ha2luZyBzdXJlIHRoZXkgZG9uJ3QgY29sbGlkZS4KY2xhc3MgVmFyaWFibGVOYW1lciB7CiAgZmluYWwgVmFyaWFibGVOYW1lcyBuYW1lczsKICBmaW5hbCBNb2R1bGFyTmFtZXIgX25hbWVyOwogIGZpbmFsIFNldDxTdHJpbmc+IHVzZWROYW1lczsKICBmaW5hbCBMaXN0PFN0cmluZz4gZnJlZVRlbXBvcmFyeU5hbWVzOwogIGludCB0ZW1wb3JhcnlJbmRleCA9IDA7CiAgc3RhdGljIGZpbmFsIFJlZ0V4cCByZWdleHAgPSBuZXcgUmVnRXhwKCd0WzAtOV0rJyk7CgogIFZhcmlhYmxlTmFtZXIoTGl2ZUVudmlyb25tZW50IGVudmlyb25tZW50LCB0aGlzLm5hbWVzLCB0aGlzLl9uYW1lcikKICAgICAgOiB1c2VkTmFtZXMgPSBuZXcgU2V0PFN0cmluZz4oKSwKICAgICAgICBmcmVlVGVtcG9yYXJ5TmFtZXMgPSBuZXcgTGlzdDxTdHJpbmc+KCkgewogICAgLy8gW1ZhcmlhYmxlTmFtZXMuc3dhcFRlbXBdIGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBhIGN5Y2xlIGluIGEgY29weSBoYW5kbGVyLgogICAgLy8gVGhlcmVmb3JlIHdlIG1ha2Ugc3VyZSBubyBvbmUgdXNlcyBpdC4KICAgIHVzZWROYW1lcy5hZGQobmFtZXMuc3dhcFRlbXApOwoKICAgIC8vIEFsbCBsaXZlSW5zIGluc3RydWN0aW9ucyBtdXN0IGhhdmUgYSBuYW1lIGF0IHRoaXMgcG9pbnQsIHNvIHdlCiAgICAvLyBhZGQgdGhlbSB0byB0aGUgbGlzdCBvZiB1c2VkIG5hbWVzLgogICAgZW52aXJvbm1lbnQubGl2ZUluc3RydWN0aW9ucy5mb3JFYWNoKChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGludCBpbmRleCkgewogICAgICBTdHJpbmcgbmFtZSA9IG5hbWVzLmdldE5hbWUoaW5zdHJ1Y3Rpb24pOwogICAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgdXNlZE5hbWVzLmFkZChuYW1lKTsKICAgICAgICBuYW1lcy5hZGROYW1lVXNlZChuYW1lKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBTdHJpbmcgYWxsb2NhdGVXaXRoSGludChTdHJpbmcgb3JpZ2luYWxOYW1lKSB7CiAgICBpbnQgaSA9IDA7CiAgICBTdHJpbmcgbmFtZSA9IF9uYW1lci5zYWZlVmFyaWFibGVOYW1lKG9yaWdpbmFsTmFtZSk7CiAgICB3aGlsZSAodXNlZE5hbWVzLmNvbnRhaW5zKG5hbWUpKSB7CiAgICAgIG5hbWUgPSBfbmFtZXIuc2FmZVZhcmlhYmxlTmFtZSgnJG9yaWdpbmFsTmFtZSR7aSsrfScpOwogICAgfQogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBTdHJpbmcgYWxsb2NhdGVUZW1wb3JhcnkoKSB7CiAgICB3aGlsZSAoIWZyZWVUZW1wb3JhcnlOYW1lcy5pc0VtcHR5KSB7CiAgICAgIFN0cmluZyBuYW1lID0gZnJlZVRlbXBvcmFyeU5hbWVzLnJlbW92ZUxhc3QoKTsKICAgICAgaWYgKCF1c2VkTmFtZXMuY29udGFpbnMobmFtZSkpIHJldHVybiBuYW1lOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSAndCR7dGVtcG9yYXJ5SW5kZXgrK30nOwogICAgd2hpbGUgKHVzZWROYW1lcy5jb250YWlucyhuYW1lKSkgbmFtZSA9ICd0JHt0ZW1wb3JhcnlJbmRleCsrfSc7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEhQaGkgZmlyc3RQaGlVc2VyV2l0aEVsZW1lbnQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIGluc3RydWN0aW9uLnVzZWRCeSkgewogICAgICBpZiAodXNlciBpcyBIUGhpICYmIHVzZXIuc291cmNlRWxlbWVudCAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHVzZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgU3RyaW5nIGFsbG9jYXRlTmFtZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIFN0cmluZyBuYW1lOwogICAgaWYgKGluc3RydWN0aW9uIGlzIEhDaGVjaykgewogICAgICAvLyBTcGVjaWFsIGNhc2UgdGhpcyBpbnN0cnVjdGlvbiB0byB1c2UgdGhlIG5hbWUgb2YgaXRzCiAgICAgIC8vIGlucHV0IGlmIGl0IGhhcyBvbmUuCiAgICAgIEhJbnN0cnVjdGlvbiB0ZW1wID0gaW5zdHJ1Y3Rpb247CiAgICAgIGRvIHsKICAgICAgICB0ZW1wID0gKHRlbXAgYXMgSENoZWNrKS5jaGVja2VkSW5wdXQ7CiAgICAgICAgbmFtZSA9IG5hbWVzLm93bk5hbWVbdGVtcF07CiAgICAgIH0gd2hpbGUgKG5hbWUgPT0gbnVsbCAmJiB0ZW1wIGlzIEhDaGVjayk7CiAgICAgIGlmIChuYW1lICE9IG51bGwpIHJldHVybiBhZGRBbGxvY2F0ZWROYW1lKGluc3RydWN0aW9uLCBuYW1lKTsKICAgIH0KCiAgICBpZiAoaW5zdHJ1Y3Rpb24uc291cmNlRWxlbWVudCAhPSBudWxsKSB7CiAgICAgIGlmIChpbnN0cnVjdGlvbi5zb3VyY2VFbGVtZW50Lm5hbWUgIT0gbnVsbCkgewogICAgICAgIG5hbWUgPSBhbGxvY2F0ZVdpdGhIaW50KGluc3RydWN0aW9uLnNvdXJjZUVsZW1lbnQubmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU291cmNlIGVsZW1lbnQgaXMgc3ludGhlc2l6ZWQgYW5kIGhhcyBubyBuYW1lLgogICAgICAgIG5hbWUgPSBhbGxvY2F0ZVRlbXBvcmFyeSgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBXZSBjb3VsZCBub3QgZmluZCBhbiBlbGVtZW50IGZvciB0aGUgaW5zdHJ1Y3Rpb24uIElmIHRoZQogICAgICAvLyBpbnN0cnVjdGlvbiBpcyB1c2VkIGJ5IGEgcGhpLCB0cnkgdG8gdXNlIHRoZSBuYW1lIG9mIHRoZSBwaGkuCiAgICAgIC8vIE90aGVyd2lzZSwganVzdCBhbGxvY2F0ZSBhIHRlbXBvcmFyeSBuYW1lLgogICAgICBIUGhpIHBoaSA9IGZpcnN0UGhpVXNlcldpdGhFbGVtZW50KGluc3RydWN0aW9uKTsKICAgICAgaWYgKHBoaSAhPSBudWxsKSB7CiAgICAgICAgbmFtZSA9IGFsbG9jYXRlV2l0aEhpbnQocGhpLnNvdXJjZUVsZW1lbnQubmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmFtZSA9IGFsbG9jYXRlVGVtcG9yYXJ5KCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBhZGRBbGxvY2F0ZWROYW1lKGluc3RydWN0aW9uLCBuYW1lKTsKICB9CgogIFN0cmluZyBhZGRBbGxvY2F0ZWROYW1lKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgU3RyaW5nIG5hbWUpIHsKICAgIHVzZWROYW1lcy5hZGQobmFtZSk7CiAgICBuYW1lcy5hZGROYW1lVXNlZChuYW1lKTsKICAgIG5hbWVzLm93bk5hbWVbaW5zdHJ1Y3Rpb25dID0gbmFtZTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgLy8vIEZyZWVzIFtpbnN0cnVjdGlvbl0ncyBuYW1lIHNvIGl0IGNhbiBiZSB1c2VkIGZvciBvdGhlciBpbnN0cnVjdGlvbnMuCiAgdm9pZCBmcmVlTmFtZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIFN0cmluZyBvd25OYW1lID0gbmFtZXMub3duTmFtZVtpbnN0cnVjdGlvbl07CiAgICBpZiAob3duTmFtZSAhPSBudWxsKSB7CiAgICAgIC8vIFdlIGNoZWNrIGlmIHdlIGhhdmUgYWxyZWFkeSBsb29rZWQgZm9yIHRlbXBvcmFyeSBuYW1lcwogICAgICAvLyBiZWNhdXNlIGlmIHdlIGhhdmVuJ3QsIGNoYW5jZXMgYXJlIHRoZSB0ZW1wb3Jhcnkgd2UgYWxsb2NhdGUKICAgICAgLy8gaW4gdGhpcyBibG9jayBjYW4gbWF0Y2ggYSBwaGkgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZQogICAgICAvLyBzdWNjZXNzb3IgYmxvY2suCiAgICAgIGlmICh0ZW1wb3JhcnlJbmRleCAhPSAwICYmIHJlZ2V4cC5oYXNNYXRjaChvd25OYW1lKSkgewogICAgICAgIGZyZWVUZW1wb3JhcnlOYW1lcy5hZGQob3duTmFtZSk7CiAgICAgIH0KICAgICAgdXNlZE5hbWVzLnJlbW92ZShvd25OYW1lKTsKICAgIH0KICB9Cn0KCi8vLyBWaXNpdHMgYWxsIGJsb2NrcyBpbiB0aGUgZ3JhcGgsIHNldHMgbmFtZXMgdG8gaW5zdHJ1Y3Rpb25zLCBhbmQKLy8vIGNyZWF0ZXMgdGhlIFtDb3B5SGFuZGxlcl0gZm9yIGVhY2ggYmxvY2suIFRoaXMgY2xhc3MgbmVlZHMgdG8gaGF2ZQovLy8gdGhlIGxpdmVJbnMgc2V0IGFzIHdlbGwgYXMgYWxsIHRoZSBsaXZlIGludGVydmFscyBvZiBpbnN0cnVjdGlvbnMuCi8vLyBJdCB2aXNpdHMgdGhlIGdyYXBoIGluIGRvbWluYXRvciBvcmRlciwgc28gdGhhdCBhdCBlYWNoIGVudHJ5IG9mIGEKLy8vIGJsb2NrLCB0aGUgaW5zdHJ1Y3Rpb25zIGluIGl0cyBsaXZlSW5zIHNldCBoYXZlIG5hbWVzLgovLy8KLy8vIFdoZW4gdmlzaXRpbmcgYSBibG9jaywgaXQgZ29lcyB0aHJvdWdoIGFsbCBpbnN0cnVjdGlvbnMuIEZvciBlYWNoCi8vLyBpbnN0cnVjdGlvbiwgaXQgZnJlZXMgdGhlIG5hbWVzIG9mIHRoZSBpbnB1dHMgdGhhdCBkaWUgYXQgdGhhdAovLy8gaW5zdHJ1Y3Rpb24sIGFuZCBhbGxvY2F0ZXMgYSBuYW1lIHRvIHRoZSBpbnN0cnVjdGlvbi4gRm9yIGVhY2ggcGhpLAovLy8gaXQgYWRkcyBhIGNvcHkgdG8gdGhlIENvcHlIYW5kbGVyIG9mIHRoZSBjb3JyZXNwb25kaW5nIHByZWRlY2Vzc29yLgpjbGFzcyBTc2FWYXJpYWJsZUFsbG9jYXRvciBleHRlbmRzIEhCYXNlVmlzaXRvciB3aXRoIENvZGVnZW5QaGFzZSB7CiAgZmluYWwgTW9kdWxhck5hbWVyIF9uYW1lcjsKICBmaW5hbCBNYXA8SEJhc2ljQmxvY2ssIExpdmVFbnZpcm9ubWVudD4gbGl2ZUluc3RydWN0aW9uczsKICBmaW5hbCBNYXA8SEluc3RydWN0aW9uLCBMaXZlSW50ZXJ2YWw+IGxpdmVJbnRlcnZhbHM7CiAgZmluYWwgU2V0PEhJbnN0cnVjdGlvbj4gZ2VuZXJhdGVBdFVzZVNpdGU7CgogIGZpbmFsIFZhcmlhYmxlTmFtZXMgbmFtZXM7CgogIFNzYVZhcmlhYmxlQWxsb2NhdG9yKHRoaXMuX25hbWVyLCB0aGlzLmxpdmVJbnN0cnVjdGlvbnMsIHRoaXMubGl2ZUludGVydmFscywKICAgICAgdGhpcy5nZW5lcmF0ZUF0VXNlU2l0ZSkKICAgICAgOiB0aGlzLm5hbWVzID0gbmV3IFZhcmlhYmxlTmFtZXMoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgdmlzaXREb21pbmF0b3JUcmVlKGdyYXBoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBWYXJpYWJsZU5hbWVyIHZhcmlhYmxlTmFtZXIgPQogICAgICAgIG5ldyBWYXJpYWJsZU5hbWVyKGxpdmVJbnN0cnVjdGlvbnNbYmxvY2tdLCBuYW1lcywgX25hbWVyKTsKCiAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgewogICAgICBoYW5kbGVQaGkocGhpLCB2YXJpYWJsZU5hbWVyKTsKICAgIH0pOwoKICAgIGJsb2NrLmZvckVhY2hJbnN0cnVjdGlvbigoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGhhbmRsZUluc3RydWN0aW9uKGluc3RydWN0aW9uLCB2YXJpYWJsZU5hbWVyKTsKICAgIH0pOwogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciBbaW5zdHJ1Y3Rpb25dIG5lZWRzIGEgbmFtZS4gSW5zdHJ1Y3Rpb25zIHRoYXQKICAvLy8gaGF2ZSBubyB1c2VycyBvciB0aGF0IGFyZSBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUgZG8gbm90IG5lZWQgYSBuYW1lLgogIGJvb2wgbmVlZHNOYW1lKGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFRoaXMpIHJldHVybiBmYWxzZTsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUGFyYW1ldGVyVmFsdWUpIHJldHVybiB0cnVlOwogICAgaWYgKGluc3RydWN0aW9uLnVzZWRCeS5pc0VtcHR5KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gIWluc3RydWN0aW9uLm5vbkNoZWNrKCkuaXNDb2RlTW90aW9uSW52YXJpYW50KCk7CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtpbnN0cnVjdGlvbl0gZGllcyBhdCB0aGUgaW5zdHJ1Y3Rpb24gW2F0XS4KICBib29sIGRpZXNBdChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbiBhdCkgewogICAgTGl2ZUludGVydmFsIGF0SW50ZXJ2YWwgPSBsaXZlSW50ZXJ2YWxzW2F0XTsKICAgIExpdmVJbnRlcnZhbCBpbnN0cnVjdGlvbkludGVydmFsID0gbGl2ZUludGVydmFsc1tpbnN0cnVjdGlvbl07CiAgICBpbnQgc3RhcnQgPSBhdEludGVydmFsLnN0YXJ0OwogICAgcmV0dXJuIGluc3RydWN0aW9uSW50ZXJ2YWwuZGllc0F0KHN0YXJ0KTsKICB9CgogIHZvaWQgZnJlZVVzZWROYW1lc0F0KAogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbiBhdCwgVmFyaWFibGVOYW1lciBuYW1lcikgewogICAgaWYgKG5lZWRzTmFtZShpbnN0cnVjdGlvbikpIHsKICAgICAgaWYgKGRpZXNBdChpbnN0cnVjdGlvbiwgYXQpKSB7CiAgICAgICAgbmFtZXIuZnJlZU5hbWUoaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGluc3RydWN0aW9uKSkgewogICAgICAvLyBJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgZ2VuZXJhdGVkIGF0IHVzZSBzaXRlLCB0aGVuIGFsbCBpdHMKICAgICAgLy8gaW5wdXRzIG1heSBhbHNvIGRpZSBhdCBbYXRdLgogICAgICBmb3IgKGludCBpID0gMCwgbGVuID0gaW5zdHJ1Y3Rpb24uaW5wdXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzW2ldOwogICAgICAgIGZyZWVVc2VkTmFtZXNBdChpbnB1dCwgYXQsIG5hbWVyKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBoYW5kbGVJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIFZhcmlhYmxlTmFtZXIgbmFtZXIpIHsKICAgIGlmIChnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhpbnN0cnVjdGlvbikpIHsKICAgICAgYXNzZXJ0KCFsaXZlSW50ZXJ2YWxzLmNvbnRhaW5zS2V5KGluc3RydWN0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMCwgbGVuID0gaW5zdHJ1Y3Rpb24uaW5wdXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmlucHV0c1tpXTsKICAgICAgZnJlZVVzZWROYW1lc0F0KGlucHV0LCBpbnN0cnVjdGlvbiwgbmFtZXIpOwogICAgfQoKICAgIGlmIChuZWVkc05hbWUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgIG5hbWVyLmFsbG9jYXRlTmFtZShpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGhhbmRsZVBoaShIUGhpIHBoaSwgVmFyaWFibGVOYW1lciBuYW1lcikgewogICAgaWYgKCFuZWVkc05hbWUocGhpKSkgcmV0dXJuOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBwaGkuaW5wdXRzW2ldOwogICAgICBIQmFzaWNCbG9jayBwcmVkZWNlc3NvciA9IHBoaS5ibG9jay5wcmVkZWNlc3NvcnNbaV07CiAgICAgIC8vIEEgW0hUeXBlS25vd25dIGluc3RydWN0aW9uIG5ldmVyIGhhcyBhIG5hbWUsIGJ1dCBpdHMgY2hlY2tlZAogICAgICAvLyBpbnB1dCBtaWdodCwgdGhlcmVmb3JlIHdlIG5lZWQgdG8gZG8gYSBjb3B5IGluc3RlYWQgb2YgYW4KICAgICAgLy8gYXNzaWdubWVudC4KICAgICAgd2hpbGUgKGlucHV0IGlzIEhUeXBlS25vd24pIGlucHV0ID0gaW5wdXQuaW5wdXRzWzBdOwogICAgICBpZiAoIW5lZWRzTmFtZShpbnB1dCkpIHsKICAgICAgICBuYW1lcy5hZGRBc3NpZ25tZW50KHByZWRlY2Vzc29yLCBpbnB1dCwgcGhpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lcy5hZGRDb3B5KHByZWRlY2Vzc29yLCBpbnB1dCwgcGhpKTsKICAgICAgfQogICAgfQoKICAgIG5hbWVyLmFsbG9jYXRlTmFtZShwaGkpOwogIH0KfQqCogBOTjwBGTUpFQFHEhNACyQaBAEMKAIBQhkVLw0gKwFARxJCKQE8EyYmMxgIBgQBKCEaBAFHGCYoBhIEAQwWK0EiBAIBQ0YjGDsuDwE1EwFASkcxKwFIRkUTMQE5NwEyOTMBQkQ7MhxKMEVDKxkqBAFFODNHOT0EAUBIKlBEQUVERicbTDstCCcaCAQBMy4eBAEuLSAEAUctMQw0AgFIPj9GLTABSEtIFhkBIzwBKjcBTEQ/AQwiIzJDBgQBJj9FQwYEAUUzBRIFLRgYFhYWBU8oURBIKiAwMxYGFAQBID8zPw0zQEMzIyRQNDMKCAYEAR4/NEEzISJOMkZCQSVOCAYEAQwsIjsBRkFEFzUmNz4nOQgGAUZKODNCIi0PPQgBOUtBCAYBRycrIjY5QQgXKgYBR0BFLjAIBgEwLSsBRTVFL0EfBgQBLjQqRiNGG1AtMggBIgFCSjNKNAwoKSQMCAgEAgFDQg0QEhcBJwEMMgIBRioUQCkBSCsuARAxNgFAPQQBRkIEAQxFAT0CAUdDFis0AVEiATpASBkBGSAVBAESMzwqGQE0AS0hBAEyIAQBIhwEAU4BSxpCKgQBURpCMAQCAU8WHR0fKRo2AUYnMlEuIwFGK1EwGh0hCAgEATEPOSc9BhEEAR8qNTIGKkQRBAE7NDgVCAYRBAEyESE+HicLLiQwRAYBLTRBDzokCA1CRzQ3GTkPJAgGMAQBQxkdJxEEAUssMRtARkEaPSkIIQYEAgFER0dHOwRGQ0hIRB08Ny0BHQFPHioBDCIfBAEMLCJDASIlCAE6NQgEAURKICw1Mj88BAFCOzFDIi4EARhIIiUlCDpDJkc0KwgGBAFKMzcOBgFFMjIGASInBgQBMiEBMio7RkMVOx82DzAIBgEdBAIBMHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS92YXJpYWJsZV9hbGxvY2F0b3IuZGFydEBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL3NwZWNpYWxpemVkX2NoZWNrcy5kYXJ0id0vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBKQ29tbW9uRWxlbWVudHM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CgpjbGFzcyBTcGVjaWFsaXplZENoZWNrcyB7CiAgc3RhdGljIE1lbWJlckVudGl0eSBmaW5kQXNDaGVjaygKICAgICAgRGFydFR5cGUgZGFydFR5cGUsIGJvb2wgaXNUeXBlRXJyb3IsIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgaWYgKGRhcnRUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgaWYgKGRhcnRUeXBlLnR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eSkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBfZmluZEFzQ2hlY2soZGFydFR5cGUuZWxlbWVudCwgY29tbW9uRWxlbWVudHMsCiAgICAgICAgICBpc1R5cGVFcnJvcjogaXNUeXBlRXJyb3IsIGlzTnVsbGFibGU6IHRydWUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgTWVtYmVyRW50aXR5IF9maW5kQXNDaGVjaygKICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCwgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICB7Ym9vbCBpc1R5cGVFcnJvciwgYm9vbCBpc051bGxhYmxlfSkgewogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpIHsKICAgICAgaWYgKGlzTnVsbGFibGUpIHsKICAgICAgICByZXR1cm4gaXNUeXBlRXJyb3IKICAgICAgICAgICAgPyBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrU3RyaW5nTnVsbGFibGUKICAgICAgICAgICAgOiBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZEFzU3RyaW5nTnVsbGFibGU7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcykgewogICAgICBpZiAoaXNOdWxsYWJsZSkgewogICAgICAgIHJldHVybiBpc1R5cGVFcnJvcgogICAgICAgICAgICA/IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tCb29sTnVsbGFibGUKICAgICAgICAgICAgOiBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZEFzQm9vbE51bGxhYmxlOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmRvdWJsZUNsYXNzKSB7CiAgICAgIGlmIChpc051bGxhYmxlKSB7CiAgICAgICAgcmV0dXJuIGlzVHlwZUVycm9yCiAgICAgICAgICAgID8gY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRDaGVja0RvdWJsZU51bGxhYmxlCiAgICAgICAgICAgIDogY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc0RvdWJsZU51bGxhYmxlOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLm51bUNsYXNzKSB7CiAgICAgIGlmIChpc051bGxhYmxlKSB7CiAgICAgICAgcmV0dXJuIGlzVHlwZUVycm9yCiAgICAgICAgICAgID8gY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRDaGVja051bU51bGxhYmxlCiAgICAgICAgICAgIDogY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc051bU51bGxhYmxlOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmludENsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MpIHsKICAgICAgaWYgKGlzTnVsbGFibGUpIHsKICAgICAgICByZXR1cm4gaXNUeXBlRXJyb3IKICAgICAgICAgICAgPyBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrSW50TnVsbGFibGUKICAgICAgICAgICAgOiBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZEFzSW50TnVsbGFibGU7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQp9ClAATk48ATckIQEaI00lOjw3BhEEASQ7LTMxGBs8OggTBgExLxgbOjgIEwYBMzEYGzw6CBMGATMuGBs5NwgTBgEwLjMzOBgbOTcIEwYBEQQCATdwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL3NwZWNpYWxpemVkX2NoZWNrcy5kYXJ0PXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9pbnRlcmNlcHRvcl9zaW1wbGlmaWVyLmRhcnTAAEsSLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHM7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAnb3B0aW1pemUuZGFydCc7CgovLy8gVGhpcyBwaGFzZSBzaW1wbGlmaWVzIGludGVyY2VwdG9ycyBpbiBtdWx0aXBsZSB3YXlzOgovLy8KLy8vIDEpIElmIHRoZSBpbnRlcmNlcHRvciBpcyBmb3IgYW4gb2JqZWN0IHdob3NlIHR5cGUgaXMga25vd24sIGl0Ci8vLyB0cmllcyB0byB1c2UgYSBjb25zdGFudCBpbnRlcmNlcHRvciBpbnN0ZWFkLgovLy8KLy8vIDIpIEludGVyY2VwdG9ycyBhcmUgc3BlY2lhbGl6ZWQgYmFzZWQgb24gdGhlIHNlbGVjdG9yIGl0IGlzIHVzZWQgd2l0aC4KLy8vCi8vLyAzKSBJZiB3ZSBrbm93IHRoZSBvYmplY3QgaXMgbm90IGludGVyY2VwdGVkLCB3ZSBqdXN0IHVzZSB0aGUgb2JqZWN0Ci8vLyBpbnN0ZWFkLgovLy8KLy8vIDQpIFNpbmdsZSB1c2UgaW50ZXJjZXB0b3JzIGF0IGR5bmFtaWMgaW52b2tlIHNpdGVzIGFyZSByZXBsYWNlZCB3aXRoICdvbmUKLy8vIHNob3QgaW50ZXJjZXB0b3JzJyB3aGljaCBhcmUgc3ludGhlc2l6ZWQgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBmZXRjaAovLy8gdGhlIGludGVyY2VwdG9yIGFuZCB0aGVuIGNhbGwgdGhlIG1ldGhvZC4gIFRoaXMgc2F2ZXMgY29kZSBzaXplIGFuZCBtYWtlcyB0aGUKLy8vIHJlY2VpdmVyIG9mIGFuIGludGVyY2VwdGVkIGNhbGwgYSBjYW5kaWRhdGUgZm9yIGJlaW5nIGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZS4KLy8vCi8vLyA1KSBTb21lIEhJcyBvcGVyYXRpb25zIG9uIGFuIGludGVyY2VwdG9yIGFyZSByZXBsYWNlZCB3aXRoIGEgSElzIHZlcnNpb24gdGhhdAovLy8gdXNlcyAnaW5zdGFuY2VvZicgcmF0aGVyIHRoYW4gdGVzdGluZyBhIHR5cGUgZmxhZy4KLy8vCmNsYXNzIFNzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzIGV4dGVuZHMgSEJhc2VWaXNpdG9yCiAgICBpbXBsZW1lbnRzIE9wdGltaXphdGlvblBoYXNlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICJTc2FTaW1wbGlmeUludGVyY2VwdG9ycyI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBDbGFzc0VudGl0eSBfZW5jbG9zaW5nQ2xhc3M7CiAgSEdyYXBoIF9ncmFwaDsKCiAgU3NhU2ltcGxpZnlJbnRlcmNlcHRvcnModGhpcy5fY2xvc2VkV29ybGQsIHRoaXMuX2VuY2xvc2luZ0NsYXNzKTsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CgogIEludGVyY2VwdG9yRGF0YSBnZXQgX2ludGVyY2VwdG9yRGF0YSA9PiBfY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgdGhpcy5fZ3JhcGggPSBncmFwaDsKICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBub2RlKSB7CiAgICBjdXJyZW50QmxvY2sgPSBub2RlOwoKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IG5vZGUuZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBib29sIHNob3VsZFJlbW92ZSA9IGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpZiAoc2hvdWxkUmVtb3ZlKSB7CiAgICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludm9rZShISW52b2tlIGludm9rZSkgewogICAgaWYgKCFpbnZva2UuaXNJbnRlcmNlcHRlZENhbGwpIHJldHVybiBmYWxzZTsKICAgIGR5bmFtaWMgaW50ZXJjZXB0b3IgPSBpbnZva2UuaW5wdXRzWzBdOwogICAgaWYgKGludGVyY2VwdG9yIGlzISBISW50ZXJjZXB0b3IpIHJldHVybiBmYWxzZTsKCiAgICAvLyBUT0RPKHNyYSk6IE1vdmUgdGhpcyBwZXItY2FsbCBjb2RlIHRvIHZpc2l0SW50ZXJjZXB0b3IuCiAgICAvLwogICAgLy8gVGhlIGludGVyY2VwdG9yIGlzIHZpc2l0ZWQgZmlyc3QsIHNvIHdlIGdldCBoZXJlIG9ubHkgd2hlbiB0aGUKICAgIC8vIGludGVyY2VwdG9yIHdhcyBub3QgcmV3cml0dGVuIHRvIGEgc2luZ2xlIHNoYXJlZCByZXBsYWNlbWVudC4gIEknbSBub3QKICAgIC8vIHN1cmUgd2Ugc2hvdWxkIHN1YnN0aXR1dGUgYSBjb25zdGFudCBpbnRlcmNlcHRvciBvbiBhIHBlci1jYWxsIGJhc2lzIGlmCiAgICAvLyB0aGUgaW50ZXJjZXB0b3IgaXMgYWxyZWFkeSBhdmFpbGFibGUgaW4gYSBsb2NhbCB2YXJpYWJsZSwgYnV0IGl0IGlzCiAgICAvLyBwb3NzaWJsZSB0aGF0IGFsbCB1c2VzIGNhbiBiZSByZXdyaXR0ZW4gdG8gdXNlIGRpZmZlcmVudCBjb25zdGFudHMuCgogICAgSEluc3RydWN0aW9uIGNvbnN0YW50ID0gdHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3IoCiAgICAgICAgaW52b2tlLmlucHV0c1sxXSwgaW50ZXJjZXB0b3IuaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgIGlmIChjb25zdGFudCAhPSBudWxsKSB7CiAgICAgIGludm9rZS5jaGFuZ2VVc2UoaW50ZXJjZXB0b3IsIGNvbnN0YW50KTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgY2FuVXNlU2VsZkZvckludGVyY2VwdG9yKEhJbnN0cnVjdGlvbiByZWNlaXZlciwKICAgICAge1NldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0ZWRDbGFzc2VzfSkgewogICAgaWYgKHJlY2VpdmVyLmlzUHJpbWl0aXZlKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAvLyBQcmltaXRpdmVzIGFsd2F5cyBuZWVkIGludGVyY2VwdG9ycy4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHJlY2VpdmVyLmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgaWYgKGludGVyY2VwdGVkQ2xhc3NlcyA9PSBudWxsIHx8CiAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzKSkgewogICAgICAgIC8vIE5lZWQgdGhlIEpTTnVsbCBpbnRlcmNlcHRvci4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICAvLyBBbGwgaW50ZXJjZXB0ZWQgY2xhc3NlcyBleHRlbmQgYEludGVyY2VwdG9yYCwgc28gaWYgdGhlIHJlY2VpdmVyIGNhbid0IGJlCiAgICAvLyBhIGNsYXNzIGV4dGVuZGluZyBgSW50ZXJjZXB0b3JgIHRoZW4gaXQgY2FuIGJlIGNhbGxlZCBkaXJlY3RseS4KICAgIHJldHVybiBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5pc0ludGVyY2VwdG9yKHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZSkKICAgICAgICAuaXNEZWZpbml0ZWx5RmFsc2U7CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3IoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCwgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRlZENsYXNzZXMpIHsKICAgIENsYXNzRW50aXR5IGNvbnN0YW50SW50ZXJjZXB0b3IgPSB0cnlDb21wdXRlQ29uc3RhbnRJbnRlcmNlcHRvckZyb21UeXBlKAogICAgICAgIGlucHV0Lmluc3RydWN0aW9uVHlwZSwgaW50ZXJjZXB0ZWRDbGFzc2VzKTsKCiAgICBpZiAoY29uc3RhbnRJbnRlcmNlcHRvciA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICAvLyBJZiB3ZSBqdXN0IGhhcHBlbiB0byBiZSBpbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2YgdGhlIGNvbnN0YW50CiAgICAvLyBpbnRlcmNlcHRvciwgYHRoaXNgIGlzIGEgc2hvcnRlciBhbGlhcy4KICAgIGlmIChjb25zdGFudEludGVyY2VwdG9yID09IF9lbmNsb3NpbmdDbGFzcyAmJgogICAgICAgIF9ncmFwaC50aGlzSW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gX2dyYXBoLnRoaXNJbnN0cnVjdGlvbjsKICAgIH0KCiAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gbmV3IEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZShjb25zdGFudEludGVyY2VwdG9yKTsKICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBDbGFzc0VudGl0eSB0cnlDb21wdXRlQ29uc3RhbnRJbnRlcmNlcHRvckZyb21UeXBlKAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0ZWRDbGFzc2VzKSB7CiAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3M7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNJbnRlZ2VyT3JOdWxsKHR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzOwogICAgfSBlbHNlIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0RvdWJsZU9yTnVsbCh0eXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzczsKICAgIH0gZWxzZSBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNCb29sZWFuT3JOdWxsKHR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIF9jb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzczsKICAgIH0gZWxzZSBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNTdHJpbmdPck51bGwodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3M7CiAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzQXJyYXkodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzczsKICAgIH0gZWxzZSBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdW1iZXJPck51bGwodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICFpbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpICYmCiAgICAgICAgIWludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcykpIHsKICAgICAgLy8gSWYgdGhlIG1ldGhvZCBiZWluZyBpbnRlcmNlcHRlZCBpcyBub3QgZGVmaW5lZCBpbiBbaW50XSBvciBbZG91YmxlXSB3ZQogICAgICAvLyBjYW4gc2FmZWx5IHVzZSB0aGUgbnVtYmVyIGludGVyY2VwdG9yLiAgVGhpcyBpcyBiZWNhdXNlIG5vbmUgb2YgdGhlCiAgICAgIC8vIFtpbnRdIG9yIFtkb3VibGVdIG1ldGhvZHMgYXJlIGNhbGxlZCBmcm9tIGEgbWV0aG9kIGRlZmluZWQgb24gW251bV0uCiAgICAgIHJldHVybiBfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzczsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRyeSB0byBmaW5kIGNvbnN0YW50IGludGVyY2VwdG9yIGZvciBhIG5hdGl2ZSBjbGFzcy4gIElmIHRoZSByZWNlaXZlcgogICAgICAvLyBpcyBjb25zdHJhaW5lZCB0byBhIGxlYWYgbmF0aXZlIGNsYXNzLCB3ZSBjYW4gdXNlIHRoZSBjbGFzcydzCiAgICAgIC8vIGludGVyY2VwdG9yIGRpcmVjdGx5LgoKICAgICAgLy8gVE9ETyhzcmEpOiBLZXkgRE9NIGNsYXNzZXMgbGlrZSBOb2RlLCBFbGVtZW50IGFuZCBFdmVudCBhcmUgbm90IGxlYWYKICAgICAgLy8gY2xhc3Nlcy4gIFdoZW4gdGhlIHJlY2VpdmVyIHR5cGUgaXMgbm90IGEgbGVhZiBjbGFzcywgd2UgbWlnaHQgc3RpbGwgYmUKICAgICAgLy8gYWJsZSB0byB1c2UgdGhlIHJlY2VpdmVyIGNsYXNzIGFzIGEgY29uc3RhbnQgaW50ZXJjZXB0b3IuICBJdCBpcwogICAgICAvLyB1c3VhbGx5IHRoZSBjYXNlIHRoYXQgbWV0aG9kcyBkZWZpbmVkIG9uIGEgbm9uLWxlYWYgY2xhc3MgZG9uJ3QgdGVzdAogICAgICAvLyBmb3IgYSBzdWJjbGFzcyBvciBjYWxsIG1ldGhvZHMgZGVmaW5lZCBvbiBhIHN1YmNsYXNzLiAgUHJvdmlkZWQgdGhlCiAgICAgIC8vIGNvZGUgaXMgY29tcGxldGVseSBpbnNlbnNpdGl2ZSB0byB0aGUgc3BlY2lmaWMgaW5zdGFuY2Ugc3ViY2xhc3Nlcywgd2UKICAgICAgLy8gY2FuIHVzZSB0aGUgbm9uLWxlYWYgY2xhc3MgZGlyZWN0bHkuCiAgICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRFeGFjdENsYXNzKHR5cGUpOwogICAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmIF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgSEluc3RydWN0aW9uIGZpbmREb21pbmF0b3IoSXRlcmFibGU8SEluc3RydWN0aW9uPiBpbnN0cnVjdGlvbnMpIHsKICAgIEhJbnN0cnVjdGlvbiByZXN1bHQ7CiAgICBMMToKICAgIGZvciAoSEluc3RydWN0aW9uIGNhbmRpZGF0ZSBpbiBpbnN0cnVjdGlvbnMpIHsKICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gY3VycmVudCBpbiBpbnN0cnVjdGlvbnMpIHsKICAgICAgICBpZiAoY3VycmVudCAhPSBjYW5kaWRhdGUgJiYgIWNhbmRpZGF0ZS5kb21pbmF0ZXMoY3VycmVudCkpIGNvbnRpbnVlIEwxOwogICAgICB9CiAgICAgIHJlc3VsdCA9IGNhbmRpZGF0ZTsKICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGludCB1c2VDb3VudChISW5zdHJ1Y3Rpb24gdXNlciwgSEluc3RydWN0aW9uIHVzZWQpID0+CiAgICAgIHVzZXIuaW5wdXRzLndoZXJlKChpbnB1dCkgPT4gaW5wdXQgPT0gdXNlZCkubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJjZXB0b3IoSEludGVyY2VwdG9yIG5vZGUpIHsKICAgIGlmIChub2RlLnJlY2VpdmVyLm5vbkNoZWNrKCkgPT0gX2dyYXBoLmV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXIpIHsKICAgICAgLy8gSWYgYGV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXJgIGlzIHNldCBpdCBtZWFucyB0aGUgY3VycmVudCBtZXRob2QgaXMgYW4KICAgICAgLy8gaW50ZXJjZXB0b3IgbWV0aG9kLCBhbmQgYHRoaXNgIGlzIHRoZSBpbnRlcmNlcHRvci4gIFRoZSBjYWxsZXIganVzdCBkaWQKICAgICAgLy8gYGdldEludGVyY2VwdG9yKGZvbykuY3VycmVudE1ldGhvZChmb28pYCB0byBlbnRlciB0aGUgY3VycmVudCBtZXRob2QuCiAgICAgIG5vZGUuYmxvY2sucmV3cml0ZShub2RlLCBfZ3JhcGgudGhpc0luc3RydWN0aW9uKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV3cml0ZVNlbGZJbnRlcmNlcHRvclVzZXMobm9kZSk7CgogICAgaWYgKG5vZGUudXNlZEJ5LmlzRW1wdHkpIHJldHVybiB0cnVlOwoKICAgIC8vIFNwZWNpYWxpemUgdGhlIGludGVyY2VwdG9yIHdpdGggc2V0IG9mIGNsYXNzZXMgaXQgaW50ZXJjZXB0cywgY29uc2lkZXJpbmcKICAgIC8vIGFsbCB1c2VzLiAgKFRoZSBzcGVjaWFsaXplZCBpbnRlcmNlcHRvciBoYXMgYSBzaG9ydGVyIGRpc3BhdGNoIGNoYWluKS4KICAgIC8vIFRoaXMgb3BlcmF0aW9uIGFwcGxpZXMgb25seSB3aGVyZSB0aGUgaW50ZXJjZXB0b3IgaXMgdXNlZCB0byBkaXNwYXRjaCBhCiAgICAvLyBtZXRob2QuICBPdGhlciB1c2VzLCBlLmcuIGFzIGFuIG9yZGluYXJ5IGFyZ3VtZW50IG9yIGEgSElzIGNoZWNrIHVzZSB0aGUKICAgIC8vIG1vc3QgZ2VuZXJhbCBpbnRlcmNlcHRvci4KICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IFRha2UgaW50byBhY2NvdW50IHRoZSByZWNlaXZlciB0eXBlIGF0IGVhY2ggY2FsbC4gIGUuZzoKICAgIC8vCiAgICAvLyAgICAgKGEpID0+IGEubGVuZ3RoICsgYS5oYXNoQ29kZQogICAgLy8KICAgIC8vIEN1cnJlbnRseSB3ZSB1c2UgdGhlIG1vc3QgZ2VuZXJhbCBpbnRlcmNlcHRvciBzaW5jZSBhbGwgaW50ZXJjZXB0ZWQgdHlwZXMKICAgIC8vIGltcGxlbWVudCBgaGFzaENvZGVgLiBCdXQgaW4gdGhpcyBleGFtcGxlLCBgYS5oYXNoQ29kZWAgaXMgb25seSByZWFjaGVkCiAgICAvLyBpZiBgYS5sZW5ndGhgIHN1Y2NlZWRzLCB3aGljaCBpcyBpbmRpY2F0ZWQgYnkgdGhlIGhhc2hDb2RlIHJlY2VpdmVyIGJlaW5nCiAgICAvLyBhIEhUeXBlS25vd24gaW5zdHJ1Y3Rpb24uCgogICAgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRlZENsYXNzZXM7CiAgICBISW5zdHJ1Y3Rpb24gZG9taW5hdG9yID0gZmluZERvbWluYXRvcihub2RlLnVzZWRCeSk7CiAgICAvLyBJZiB0aGVyZSBpcyBhIGNhbGwgdGhhdCBkb21pbmF0ZXMgYWxsIG90aGVyIHVzZXMsIHdlIGNhbiB1c2UganVzdCB0aGUKICAgIC8vIHNlbGVjdG9yIG9mIHRoYXQgaW5zdHJ1Y3Rpb24uCiAgICBpZiAoZG9taW5hdG9yIGlzIEhJbnZva2VEeW5hbWljICYmCiAgICAgICAgZG9taW5hdG9yLmlzQ2FsbE9uSW50ZXJjZXB0b3IoX2Nsb3NlZFdvcmxkKSAmJgogICAgICAgIG5vZGUgPT0gZG9taW5hdG9yLnJlY2VpdmVyICYmCiAgICAgICAgdXNlQ291bnQoZG9taW5hdG9yLCBub2RlKSA9PSAxKSB7CiAgICAgIGludGVyY2VwdGVkQ2xhc3NlcyA9IF9pbnRlcmNlcHRvckRhdGEuZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT24oCiAgICAgICAgICBkb21pbmF0b3Iuc2VsZWN0b3IubmFtZSwgX2Nsb3NlZFdvcmxkKTsKCiAgICAgIC8vIElmIHdlIGZvdW5kIHRoYXQgd2UgbmVlZCBudW1iZXIsIHdlIG11c3Qgc3RpbGwgZ28gdGhyb3VnaCBhbGwKICAgICAgLy8gdXNlcyB0byBjaGVjayBpZiB0aGV5IHJlcXVpcmUgaW50LCBvciBkb3VibGUuCiAgICAgIGlmIChpbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpICYmCiAgICAgICAgICAhKGludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcykgfHwKICAgICAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpKSkgewogICAgICAgIFNldDxDbGFzc0VudGl0eT4gcmVxdWlyZWQ7CiAgICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBub2RlLnVzZWRCeSkgewogICAgICAgICAgaWYgKHVzZXIgaXMhIEhJbnZva2UpIGNvbnRpbnVlOwogICAgICAgICAgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRlZCA9IF9pbnRlcmNlcHRvckRhdGEKICAgICAgICAgICAgICAuZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT24odXNlci5zZWxlY3Rvci5uYW1lLCBfY2xvc2VkV29ybGQpOwogICAgICAgICAgaWYgKGludGVyY2VwdGVkLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKSkgewogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdHlwZSBhcmd1bWVudCB3aGVuIGFsbCB1c2VzIG9mCiAgICAgICAgICAgIC8vIGludGVyY2VwdGVkIGNsYXNzZXMgZXhwZWN0IGVudGl0aWVzIGluc3RlYWQgb2YgZWxlbWVudHMuCiAgICAgICAgICAgIHJlcXVpcmVkID8/PSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgICAgICAgICByZXF1aXJlZC5hZGQoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGludGVyY2VwdGVkLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKSkgewogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdHlwZSBhcmd1bWVudCB3aGVuIGFsbCB1c2VzIG9mCiAgICAgICAgICAgIC8vIGludGVyY2VwdGVkIGNsYXNzZXMgZXhwZWN0IGVudGl0aWVzIGluc3RlYWQgb2YgZWxlbWVudHMuCiAgICAgICAgICAgIHJlcXVpcmVkID8/PSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgICAgICAgICByZXF1aXJlZC5hZGQoX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBEb24ndCBtb2RpZnkgdGhlIHJlc3VsdCBvZgogICAgICAgIC8vIFtfaW50ZXJjZXB0b3JEYXRhLmdldEludGVyY2VwdGVkQ2xhc3Nlc09uXS4KICAgICAgICBpZiAocmVxdWlyZWQgIT0gbnVsbCkgewogICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzID0gaW50ZXJjZXB0ZWRDbGFzc2VzLnVuaW9uKHJlcXVpcmVkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0eXBlIGFyZ3VtZW50IHdoZW4gYWxsIHVzZXMgb2YgaW50ZXJjZXB0ZWQKICAgICAgLy8gY2xhc3NlcyBleHBlY3QgZW50aXRpZXMgaW5zdGVhZCBvZiBlbGVtZW50cy4KICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBub2RlLnVzZWRCeSkgewogICAgICAgIGlmICh1c2VyIGlzIEhJbnZva2VEeW5hbWljICYmCiAgICAgICAgICAgIHVzZXIuaXNDYWxsT25JbnRlcmNlcHRvcihfY2xvc2VkV29ybGQpICYmCiAgICAgICAgICAgIG5vZGUgPT0gdXNlci5yZWNlaXZlciAmJgogICAgICAgICAgICB1c2VDb3VudCh1c2VyLCBub2RlKSA9PSAxKSB7CiAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMuYWRkQWxsKF9pbnRlcmNlcHRvckRhdGEuZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT24oCiAgICAgICAgICAgICAgdXNlci5zZWxlY3Rvci5uYW1lLCBfY2xvc2VkV29ybGQpKTsKICAgICAgICB9IGVsc2UgaWYgKHVzZXIgaXMgSEludm9rZVN1cGVyICYmCiAgICAgICAgICAgIHVzZXIuaXNDYWxsT25JbnRlcmNlcHRvcihfY2xvc2VkV29ybGQpICYmCiAgICAgICAgICAgIG5vZGUgPT0gdXNlci5yZWNlaXZlciAmJgogICAgICAgICAgICB1c2VDb3VudCh1c2VyLCBub2RlKSA9PSAxKSB7CiAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMuYWRkQWxsKF9pbnRlcmNlcHRvckRhdGEuZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT24oCiAgICAgICAgICAgICAgdXNlci5zZWxlY3Rvci5uYW1lLCBfY2xvc2VkV29ybGQpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gVXNlIGEgbW9zdCBnZW5lcmFsIGludGVyY2VwdG9yIGZvciBvdGhlciBpbnN0cnVjdGlvbnMsIGV4YW1wbGUsCiAgICAgICAgICAvLyBpcy1jaGVja3MgYW5kIGVzY2FwaW5nIGludGVyY2VwdG9ycy4KICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3Nlcy5hZGRBbGwoX2ludGVyY2VwdG9yRGF0YS5pbnRlcmNlcHRlZENsYXNzZXMpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgbm9kZS5pbnRlcmNlcHRlZENsYXNzZXMgPSBpbnRlcmNlcHRlZENsYXNzZXM7CgogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKCiAgICAvLyBUcnkgY29tcHV0aW5nIGEgY29uc3RhbnQgaW50ZXJjZXB0b3IuCiAgICBISW5zdHJ1Y3Rpb24gY29uc3RhbnRJbnRlcmNlcHRvciA9CiAgICAgICAgdHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3IocmVjZWl2ZXIsIGludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICBpZiAoY29uc3RhbnRJbnRlcmNlcHRvciAhPSBudWxsKSB7CiAgICAgIG5vZGUuYmxvY2sucmV3cml0ZShub2RlLCBjb25zdGFudEludGVyY2VwdG9yKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIElmIGl0IGlzIGEgY29uZGl0aW9uYWwgY29uc3RhbnQgaW50ZXJjZXB0b3IgYW5kIHdhcyBub3Qgc3RyZW5ndGhlbmVkIHRvIGEKICAgIC8vIGNvbnN0YW50IGludGVyY2VwdG9yIHRoZW4gdGhlcmUgaXMgbm90aGluZyBtb3JlIHdlIGNhbiBkby4KICAgIGlmIChub2RlLmlzQ29uZGl0aW9uYWxDb25zdGFudEludGVyY2VwdG9yKSByZXR1cm4gZmFsc2U7CgogICAgLy8gRG8gd2UgaGF2ZSBhbiAnYWxtb3N0IGNvbnN0YW50JyBpbnRlcmNlcHRvcj8gIFRoZSByZWNlaXZlciBjb3VsZCBiZQogICAgLy8gYG51bGxgIGJ1dCBub3QgYW55IG90aGVyIEphdmFTY3JpcHQgZmFsc3kgdmFsdWUsIGBudWxsYCB2YWx1ZXMgY2F1c2UKICAgIC8vIGBOb1N1Y2hNZXRob2RFcnJvcmBzLCBhbmQgaWYgdGhlIHJlY2VpdmVyIHdhcyBub3QgbnVsbCB3ZSB3b3VsZCBoYXZlIGEKICAgIC8vIGNvbnN0YW50IGludGVyY2VwdG9yIGBDYC4gIFRoZW4gd2UgY2FuIHVzZSBgKHJlY2VpdmVyICYmIEMpYCBmb3IgdGhlCiAgICAvLyBpbnRlcmNlcHRvci4KICAgIGlmIChyZWNlaXZlci5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIGlmICghaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcykpIHsKICAgICAgICAvLyBDYW4gdXNlIGAocmVjZWl2ZXIgJiYgQylgIG9ubHkgaWYgcmVjZWl2ZXIgaXMgZWl0aGVyIG51bGwgb3IgdHJ1dGh5LgogICAgICAgIGlmICghKHJlY2VpdmVyCiAgICAgICAgICAgICAgICAuaXNQcmltaXRpdmVOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUgfHwKICAgICAgICAgICAgcmVjZWl2ZXIKICAgICAgICAgICAgICAgIC5pc1ByaW1pdGl2ZUJvb2xlYW4oX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUgfHwKICAgICAgICAgICAgcmVjZWl2ZXIKICAgICAgICAgICAgICAgIC5pc1ByaW1pdGl2ZVN0cmluZyhfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSkpIHsKICAgICAgICAgIENsYXNzRW50aXR5IGludGVyY2VwdG9yQ2xhc3MgPSB0cnlDb21wdXRlQ29uc3RhbnRJbnRlcmNlcHRvckZyb21UeXBlKAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmV4Y2x1ZGVOdWxsKHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZSksCiAgICAgICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgICAgICAgIGlmIChpbnRlcmNlcHRvckNsYXNzICE9IG51bGwpIHsKICAgICAgICAgICAgSEluc3RydWN0aW9uIGNvbnN0YW50SW5zdHJ1Y3Rpb24gPSBfZ3JhcGguYWRkQ29uc3RhbnQoCiAgICAgICAgICAgICAgICBuZXcgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKGludGVyY2VwdG9yQ2xhc3MpLCBfY2xvc2VkV29ybGQpOwogICAgICAgICAgICBub2RlLmNvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvciA9IGNvbnN0YW50SW5zdHJ1Y3Rpb247CiAgICAgICAgICAgIGNvbnN0YW50SW5zdHJ1Y3Rpb24udXNlZEJ5LmFkZChub2RlKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFRyeSBjcmVhdGluZyBhIG9uZS1zaG90IGludGVyY2VwdG9yIG9yIG9wdGltaXplZCBpcy1jaGVjawogICAgaWYgKG5vZGUudXNlZEJ5Lmxlbmd0aCAhPSAxKSByZXR1cm4gZmFsc2U7CiAgICBISW5zdHJ1Y3Rpb24gdXNlciA9IG5vZGUudXNlZEJ5LnNpbmdsZTsKCiAgICAvLyBJZiB0aGUgaW50ZXJjZXB0b3IgW25vZGVdIHdhcyBsb29wIGhvaXN0ZWQsIHdlIGtlZXAgdGhlIGludGVyY2VwdG9yLgogICAgaWYgKCF1c2VyLmhhc1NhbWVMb29wSGVhZGVyQXMobm9kZSkpIHJldHVybiBmYWxzZTsKCiAgICBib29sIHJlcGxhY2VVc2VyV2l0aChISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQpIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSB1c2VyLmJsb2NrOwogICAgICBibG9jay5hZGRBZnRlcih1c2VyLCByZXBsYWNlbWVudCk7CiAgICAgIGJsb2NrLnJld3JpdGUodXNlciwgcmVwbGFjZW1lbnQpOwogICAgICBibG9jay5yZW1vdmUodXNlcik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAodXNlciBpcyBISXMpIHsKICAgICAgLy8gU2VlIGlmIHdlIGNhbiByZXdyaXRlIHRoZSBpcy1jaGVjayB0byB1c2UgJ2luc3RhbmNlb2YnLCBpLmUuIHJld3JpdGUKICAgICAgLy8gImdldEludGVyY2VwdG9yKHgpLiRpc1QiIHRvICJ4IGluc3RhbmNlb2YgVCIuCiAgICAgIGlmIChub2RlID09IHVzZXIuaW50ZXJjZXB0b3IpIHsKICAgICAgICBpZiAoX2ludGVyY2VwdG9yRGF0YS5tYXlHZW5lcmF0ZUluc3RhbmNlb2ZDaGVjaygKICAgICAgICAgICAgdXNlci50eXBlRXhwcmVzc2lvbiwgX2Nsb3NlZFdvcmxkKSkgewogICAgICAgICAgSEluc3RydWN0aW9uIGluc3RhbmNlb2ZDaGVjayA9IG5ldyBISXMuaW5zdGFuY2VPZih1c2VyLnR5cGVFeHByZXNzaW9uLAogICAgICAgICAgICAgIHVzZXIuZXhwcmVzc2lvbiwgdXNlci5pbnN0cnVjdGlvblR5cGUsIHVzZXIuc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgaW5zdGFuY2VvZkNoZWNrLnNvdXJjZUVsZW1lbnQgPSB1c2VyLnNvdXJjZUVsZW1lbnQ7CiAgICAgICAgICByZXR1cm4gcmVwbGFjZVVzZXJXaXRoKGluc3RhbmNlb2ZDaGVjayk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHVzZXIgaXMgSEludm9rZUR5bmFtaWMpIHsKICAgICAgaWYgKG5vZGUgPT0gdXNlci5pbnB1dHNbMF0pIHsKICAgICAgICAvLyBSZXBsYWNlIHRoZSB1c2VyIHdpdGggYSBbSE9uZVNob3RJbnRlcmNlcHRvcl0uCiAgICAgICAgSENvbnN0YW50IG51bGxDb25zdGFudCA9IF9ncmFwaC5hZGRDb25zdGFudE51bGwoX2Nsb3NlZFdvcmxkKTsKICAgICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gbmV3IExpc3Q8SEluc3RydWN0aW9uPi5mcm9tKHVzZXIuaW5wdXRzKTsKICAgICAgICBpbnB1dHNbMF0gPSBudWxsQ29uc3RhbnQ7CiAgICAgICAgSE9uZVNob3RJbnRlcmNlcHRvciBvbmVTaG90SW50ZXJjZXB0b3IgPSBuZXcgSE9uZVNob3RJbnRlcmNlcHRvcigKICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sCiAgICAgICAgICAgIHVzZXIuc2VsZWN0b3IsCiAgICAgICAgICAgIHVzZXIucmVjZWl2ZXJUeXBlLAogICAgICAgICAgICBpbnB1dHMsCiAgICAgICAgICAgIHVzZXIuaW5zdHJ1Y3Rpb25UeXBlLAogICAgICAgICAgICB1c2VyLnR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICAgICAgb25lU2hvdEludGVyY2VwdG9yLnNvdXJjZUluZm9ybWF0aW9uID0gdXNlci5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBvbmVTaG90SW50ZXJjZXB0b3Iuc291cmNlRWxlbWVudCA9IHVzZXIuc291cmNlRWxlbWVudDsKICAgICAgICByZXR1cm4gcmVwbGFjZVVzZXJXaXRoKG9uZVNob3RJbnRlcmNlcHRvcik7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIHJld3JpdGVTZWxmSW50ZXJjZXB0b3JVc2VzKEhJbnRlcmNlcHRvciBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwoKICAgIC8vIEF0IGluc3RydWN0aW9ucyB0aGF0IHVzZSB0aGUgaW50ZXJjZXB0b3IgYW5kIGl0cyByZWNlaXZlciwgdGhlIHJlY2VpdmVyCiAgICAvLyBtaWdodCBiZSByZWZpbmVkIGF0IHRoZSB1c2Ugc2l0ZS4KCiAgICAvLyAgICAgZHluYW1pYyB4ID0gLi4uCiAgICAvLyAgICAgaWYgKHggaXMgTXVtYmxlKSB7CiAgICAvLyAgICAgICBwcmludCh4Lmxlbmd0aCk7ICAvLyBTZWxmLWludGVyY2VwdG9yIGhlcmUuCiAgICAvLyAgICAgfSBlbHNlIHsKICAgIC8vICAgICAgIHByaW50KHgubGVuZ3RoKTsgIC8vCiAgICAvLyAgICAgfQoKICAgIGZpbmlzaEludm9rZShISW52b2tlIGludm9rZSwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgICAgSEluc3RydWN0aW9uIGNhbGxSZWNlaXZlciA9IGludm9rZS5nZXREYXJ0UmVjZWl2ZXIoX2Nsb3NlZFdvcmxkKTsKICAgICAgaWYgKHJlY2VpdmVyLm5vbkNoZWNrKCkgPT0gY2FsbFJlY2VpdmVyLm5vbkNoZWNrKCkpIHsKICAgICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkQ2xhc3NlcyA9IF9pbnRlcmNlcHRvckRhdGEKICAgICAgICAgICAgLmdldEludGVyY2VwdGVkQ2xhc3Nlc09uKHNlbGVjdG9yLm5hbWUsIF9jbG9zZWRXb3JsZCk7CgogICAgICAgIGlmIChjYW5Vc2VTZWxmRm9ySW50ZXJjZXB0b3IoY2FsbFJlY2VpdmVyLAogICAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXM6IGludGVyY2VwdGVkQ2xhc3NlcykpIHsKICAgICAgICAgIGludm9rZS5jaGFuZ2VVc2Uobm9kZSwgY2FsbFJlY2VpdmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIG5vZGUudXNlZEJ5LnRvTGlzdCgpKSB7CiAgICAgIGlmICh1c2VyIGlzIEhJcykgewogICAgICAgIGlmICh1c2VyLmludGVyY2VwdG9yID09IG5vZGUpIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uID0gdXNlci5leHByZXNzaW9uOwogICAgICAgICAgaWYgKGNhblVzZVNlbGZGb3JJbnRlcmNlcHRvcihleHByZXNzaW9uKSkgewogICAgICAgICAgICB1c2VyLmNoYW5nZVVzZShub2RlLCBleHByZXNzaW9uKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodXNlciBpcyBISW52b2tlRHluYW1pYykgewogICAgICAgIGlmICh1c2VyLmlzQ2FsbE9uSW50ZXJjZXB0b3IoX2Nsb3NlZFdvcmxkKSAmJgogICAgICAgICAgICBub2RlID09IHVzZXIuaW5wdXRzWzBdICYmCiAgICAgICAgICAgIHVzZUNvdW50KHVzZXIsIG5vZGUpID09IDEpIHsKICAgICAgICAgIGZpbmlzaEludm9rZSh1c2VyLCB1c2VyLnNlbGVjdG9yKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodXNlciBpcyBISW52b2tlU3VwZXIpIHsKICAgICAgICBpZiAodXNlci5pc0NhbGxPbkludGVyY2VwdG9yKF9jbG9zZWRXb3JsZCkgJiYKICAgICAgICAgICAgbm9kZSA9PSB1c2VyLmlucHV0c1swXSAmJgogICAgICAgICAgICB1c2VDb3VudCh1c2VyLCBub2RlKSA9PSAxKSB7CiAgICAgICAgICBmaW5pc2hJbnZva2UodXNlciwgdXNlci5zZWxlY3Rvcik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oc3JhKTogQXJlIHRoZXJlIG90aGVyIHBhaXJlZCB1c2VzIG9mIHRoZSByZWNlaXZlciBhbmQKICAgICAgICAvLyBpbnRlcmNlcHRvciB3aGVyZSB3ZSBjYW4gbWFrZSB1c2Ugb2YgYSBzdHJlbmd0aGVuZWQgcmVjZWl2ZXI/CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRPbmVTaG90SW50ZXJjZXB0b3IoSE9uZVNob3RJbnRlcmNlcHRvciBub2RlKSB7CiAgICAvLyAnVW5kbycgdGhlIG9uZS1zaG90IHRyYW5zZm9ybWF0aW9uIGlmIHRoZSByZWNlaXZlciBoYXMgYSBjb25zdGFudAogICAgLy8gaW50ZXJjZXB0b3IuCiAgICBISW5zdHJ1Y3Rpb24gY29uc3RhbnQgPQogICAgICAgIHRyeUNvbXB1dGVDb25zdGFudEludGVyY2VwdG9yKG5vZGUuaW5wdXRzWzFdLCBub2RlLmludGVyY2VwdGVkQ2xhc3Nlcyk7CgogICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHJldHVybiBmYWxzZTsKCiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5vZGUuc2VsZWN0b3I7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IG5vZGUucmVjZWl2ZXJUeXBlOwogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uOwogICAgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIGluc3RydWN0aW9uID0gbmV3IEhJbnZva2VEeW5hbWljR2V0dGVyKAogICAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgICByZWNlaXZlclR5cGUsCiAgICAgICAgICBub2RlLmVsZW1lbnQsCiAgICAgICAgICA8SEluc3RydWN0aW9uPltjb25zdGFudCwgbm9kZS5pbnB1dHNbMV1dLAogICAgICAgICAgdHJ1ZSwKICAgICAgICAgIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLAogICAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzU2V0dGVyKSB7CiAgICAgIGluc3RydWN0aW9uID0gbmV3IEhJbnZva2VEeW5hbWljU2V0dGVyKAogICAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgICByZWNlaXZlclR5cGUsCiAgICAgICAgICBub2RlLmVsZW1lbnQsCiAgICAgICAgICA8SEluc3RydWN0aW9uPltjb25zdGFudCwgbm9kZS5pbnB1dHNbMV0sIG5vZGUuaW5wdXRzWzJdXSwKICAgICAgICAgIHRydWUsCiAgICAgICAgICBub2RlLmluc3RydWN0aW9uVHlwZSwKICAgICAgICAgIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4uZnJvbShub2RlLmlucHV0cyk7CiAgICAgIGlucHV0c1swXSA9IGNvbnN0YW50OwogICAgICBpbnN0cnVjdGlvbiA9IG5ldyBISW52b2tlRHluYW1pY01ldGhvZChzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBpbnB1dHMsCiAgICAgICAgICBub2RlLmluc3RydWN0aW9uVHlwZSwgbm9kZS50eXBlQXJndW1lbnRzLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgaXNJbnRlcmNlcHRlZDogdHJ1ZSk7CiAgICB9CgogICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBub2RlLmJsb2NrOwogICAgYmxvY2suYWRkQWZ0ZXIobm9kZSwgaW5zdHJ1Y3Rpb24pOwogICAgYmxvY2sucmV3cml0ZShub2RlLCBpbnN0cnVjdGlvbik7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KgeUATk48ATYjJDEuMioVGAE5BEMxBEsESA0ETlBSUQRSNwQzIwwxIyURAUQBRQFIATIoAQwiGR8EAQwrGQErIjQsGi8IGgYEAQw8AQwlMSw0AT8HRk5PS0sBOzscLwYSBAE3L0guFAZDKEYoFggGAVFHIDEcBAEuQU00ATIBRS8yKiUGAVA3BAE1QT9ALAhOKU0sTipNLEYrTURHUE1OLA1PRx8BTlFKTk1QLkZPGAgGAREEAUQZCDMzUAgaDQYTBAE/OgEMLUhRUU84EwYBJgEqAVFOT1AhB0oHKAdRT1EhASk5TSUnNyYqRTIBRzdISkojMSo6SkJHSDE2DEVHSDE5DAomNyBDCggNTTYzLyY2JSlOMis2JSlOMhFNMkoRCggGATIBKwEtJ0UnNRQGAVFCPQFLTE5MFENHUBc5JhU6JhU5J1BKIypDT0cyGgwKCAYBQS8sAUw3ATUmKSgaFAYBF043JjkyUU4+MwoIKSQ6R04iSiIbHxQiICFHPzQIBgESBAE3KwFPKQEbHjkUIg0BNkg8P0MBMzcwCggGATYZKDU2LgwKKzYmKS0KKTYmKS0KD0ZJCAYEAQw7SRQcUAEoASc0Hh0uFBgYNBAgIyQuFBgYRBAgIw1MHE1MIAYBJCcmEQQCATRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvaW50ZXJjZXB0b3Jfc2ltcGxpZmllci5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS90eXBlc19wcm9wYWdhdGlvbi5kYXJ0wABQpy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ2xvZ2dpbmcuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAnb3B0aW1pemUuZGFydCc7CgovLy8gVHlwZSBwcm9wYWdhdGlvbiBhbmQgY29uZGl0aW9uaW5nIGNoZWNrIGluc2VydGlvbi4KLy8vCi8vLyAxLiBUeXBlIHByb3BhZ2F0aW9uIChkYXRhZmxvdykgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlcyBvZiBhbGwgbm9kZXMuCi8vLwovLy8gMi4gSFR5cGVLbm93biBub2RlIGluc2VydGlvbiBjYXB0dXJlcyB0eXBlIHN0cmVuZ3RoZW5pbmcuCi8vLwovLy8gMy4gQ29uZGl0aW9uaW5nIGNoZWNrIGluc2VydGlvbiBpbnNlcnRzIHJlY2VpdmVyIGFuZCBhcmd1bWVudCBjaGVja3Mgb24KLy8vICAgIGNhbGxzIHdoZXJlIHRoYXQgY2FsbCBpcyBleHBlY3RlZCB0byBiZSByZXBsYWNlZCB3aXRoIGFuIGluc3RydWN0aW9uIHdpdGgKLy8vICAgIGEgbmFycm93ZXIgZG9tYWluLiBGb3IgZXhhbXBsZSBge051bGwsaW50fSArIHtpbnR9YCB3b3VsZCBpbnNlcnQgYW4KLy8vICAgIHJlY2VpdmVyIGNoZWNrIHRvIHN0cmVuZ3RoZW4gdGhlIHR5cGVzIHRvIGB7aW50fSArIHtpbnR9YCB0byBhbGxvdyB0aGUKLy8vICAgIGNhbGwgb2YgYG9wZXJhdG9yK2AgdG8gYmUgcmVwbGFjZWQgd2l0aCBhIEhBZGQgaW5zdHJ1Y3Rpb24uCi8vLwovLy8gQW5hbHlzaXMgYW5kIG5vZGUgaW5zZXJ0aW9uIGFyZSBkb25lIHRvZ2V0aGVyLCBzaW5jZSBpbnNlcnRpb24gaW1wcm92ZXMgdGhlCi8vLyB0eXBlIHByb3BhZ2F0aW9uIHJlc3VsdHMuCi8vIFRPRE8oc3JhKTogVGhlIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciBzaG91bGQgYmUgY29uc3VsdGVkIGZvciBiZXR0ZXIKLy8gdGFyZ2V0ZWQgY29uZGl0aW9uaW5nIGNoZWNrcy4KY2xhc3MgU3NhVHlwZVByb3BhZ2F0b3IgZXh0ZW5kcyBIQmFzZVZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgZmluYWwgTWFwPGludCwgSEluc3RydWN0aW9uPiB3b3JrbWFwID0gbmV3IE1hcDxpbnQsIEhJbnN0cnVjdGlvbj4oKTsKICBmaW5hbCBMaXN0PGludD4gd29ya2xpc3QgPSBuZXcgTGlzdDxpbnQ+KCk7CiAgZmluYWwgTWFwPEhJbnN0cnVjdGlvbiwgRnVuY3Rpb24+IHBlbmRpbmdPcHRpbWl6YXRpb25zID0KICAgICAgbmV3IE1hcDxISW5zdHJ1Y3Rpb24sIEZ1bmN0aW9uPigpOwoKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzOwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBPcHRpbWl6YXRpb25UZXN0TG9nIF9sb2c7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+ICdTc2FUeXBlUHJvcGFnYXRvcic7CgogIFNzYVR5cGVQcm9wYWdhdG9yKAogICAgICB0aGlzLnJlc3VsdHMsIHRoaXMuY29tbW9uRWxlbWVudHMsIHRoaXMuY2xvc2VkV29ybGQsIHRoaXMuX2xvZyk7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IGFic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgfQoKICAvLyBSZS1jb21wdXRlIGFuZCB1cGRhdGUgdGhlIHR5cGUgb2YgdGhlIGluc3RydWN0aW9uLiBSZXR1cm5zCiAgLy8gd2hldGhlciBvciBub3QgdGhlIHR5cGUgd2FzIGNoYW5nZWQuCiAgYm9vbCB1cGRhdGVUeXBlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgLy8gQ29tcHV0ZSBvbGQgYW5kIG5ldyB0eXBlcy4KICAgIEFic3RyYWN0VmFsdWUgb2xkVHlwZSA9IGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZTsKICAgIEFic3RyYWN0VmFsdWUgbmV3VHlwZSA9IGNvbXB1dGVUeXBlKGluc3RydWN0aW9uKTsKICAgIGFzc2VydChuZXdUeXBlICE9IG51bGwpOwogICAgLy8gV2UgdW5jb25kaXRpb25hbGx5IHJlcGxhY2UgdGhlIHByb3BhZ2F0ZWQgdHlwZSB3aXRoIHRoZSBuZXcgdHlwZS4gVGhlCiAgICAvLyBjb21wdXRlVHlwZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHdlIGV2ZW50dWFsbHkgcmVhY2ggYSBzdGFibGUgc3RhdGUuCiAgICBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGUgPSBuZXdUeXBlOwogICAgcmV0dXJuIG9sZFR5cGUgIT0gbmV3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgICBwcm9jZXNzV29ya2xpc3QoKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgaWYgKGJsb2NrLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgIGJsb2NrLmZvckVhY2hQaGkoKEhQaGkgcGhpKSB7CiAgICAgICAgLy8gU2V0IHRoZSBpbml0aWFsIHR5cGUgZm9yIHRoZSBwaGkuIFdlJ3JlIG5vdCB1c2luZyB0aGUgdHlwZQogICAgICAgIC8vIHRoZSBwaGkgdGhpbmtzIGl0IGhhcyBiZWNhdXNlIG5ldyBvcHRpbWl6YXRpb25zIG1heSBpbXBseQogICAgICAgIC8vIGNoYW5naW5nIGl0LgogICAgICAgIC8vIEluIHRoZW9yeSB3ZSB3b3VsZCBuZWVkIHRvIG1hcmsKICAgICAgICAvLyB0aGUgdHlwZSBvZiBhbGwgb3RoZXIgaW5jb21pbmcgZWRnZXMgYXMgInVuaW5pdGlhbGl6ZWQiIGFuZCB0YWtlIHRoaXMKICAgICAgICAvLyBpbnRvIGFjY291bnQgd2hlbiBkb2luZyB0aGUgcHJvcGFnYXRpb24gaW5zaWRlIHRoZSBwaGlzLiBKdXN0CiAgICAgICAgLy8gc2V0dGluZyB0aGUgcHJvcGFnYXRlZCB0eXBlIGlzIGhvd2V2ZXIgZWFzaWVyLgogICAgICAgIHBoaS5pbnN0cnVjdGlvblR5cGUgPSBwaGkuaW5wdXRzWzBdLmluc3RydWN0aW9uVHlwZTsKICAgICAgICBhZGRUb1dvcmtMaXN0KHBoaSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgICBpZiAodXBkYXRlVHlwZShwaGkpKSB7CiAgICAgICAgICBhZGREZXBlbmRlbnRJbnN0cnVjdGlvbnNUb1dvcmtMaXN0KHBoaSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIGlmICh1cGRhdGVUeXBlKGluc3RydWN0aW9uKSkgewogICAgICAgIGFkZERlcGVuZGVudEluc3RydWN0aW9uc1RvV29ya0xpc3QoaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgIH0KICB9CgogIHZvaWQgcHJvY2Vzc1dvcmtsaXN0KCkgewogICAgZG8gewogICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkpIHsKICAgICAgICBpbnQgaWQgPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gd29ya21hcFtpZF07CiAgICAgICAgYXNzZXJ0KGluc3RydWN0aW9uICE9IG51bGwpOwogICAgICAgIHdvcmttYXAucmVtb3ZlKGlkKTsKICAgICAgICBpZiAodXBkYXRlVHlwZShpbnN0cnVjdGlvbikpIHsKICAgICAgICAgIGFkZERlcGVuZGVudEluc3RydWN0aW9uc1RvV29ya0xpc3QoaW5zdHJ1Y3Rpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBXaGlsZSBwcm9jZXNzaW5nIHRoZSBvcHRpbWl6YWJsZSBhcml0aG1ldGljIGluc3RydWN0aW9ucywgd2UKICAgICAgLy8gbWF5IGRpc2NvdmVyIGJldHRlciB0eXBlIGluZm9ybWF0aW9uIGZvciBkb21pbmF0ZWQgdXNlcnMgb2YKICAgICAgLy8gcmVwbGFjZWQgb3BlcmFuZHMsIHNvIHdlIG1heSBuZWVkIHRvIHRha2UgYW5vdGhlciBzdGFiIGF0CiAgICAgIC8vIGVtcHR5aW5nIHRoZSB3b3JrbGlzdCBhZnRlcndhcmRzLgogICAgICBwcm9jZXNzUGVuZGluZ09wdGltaXphdGlvbnMoKTsKICAgIH0gd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KTsKICB9CgogIHZvaWQgYWRkVG9Xb3JrTGlzdChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGZpbmFsIGludCBpZCA9IGluc3RydWN0aW9uLmlkOwoKICAgIGlmICghd29ya21hcC5jb250YWluc0tleShpZCkpIHsKICAgICAgd29ya2xpc3QuYWRkKGlkKTsKICAgICAgd29ya21hcFtpZF0gPSBpbnN0cnVjdGlvbjsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRCaW5hcnlBcml0aG1ldGljKEhCaW5hcnlBcml0aG1ldGljIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmxlZnQ7CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5yaWdodDsKICAgIGlmIChsZWZ0LmlzSW50ZWdlcihhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNJbnRlZ2VyKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZTsKICAgIH0KICAgIGlmIChsZWZ0LmlzRG91YmxlKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZTsKICAgIH0KICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLm51bVR5cGU7CiAgfQoKICBBYnN0cmFjdFZhbHVlIGNoZWNrUG9zaXRpdmVJbnRlZ2VyKEhCaW5hcnlBcml0aG1ldGljIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmxlZnQ7CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5yaWdodDsKICAgIGlmIChsZWZ0LmlzUG9zaXRpdmVJbnRlZ2VyKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodC5pc1Bvc2l0aXZlSW50ZWdlcihhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZTsKICAgIH0KICAgIHJldHVybiB2aXNpdEJpbmFyeUFyaXRobWV0aWMoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdE11bHRpcGx5KEhNdWx0aXBseSBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIGNoZWNrUG9zaXRpdmVJbnRlZ2VyKGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRBZGQoSEFkZCBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIGNoZWNrUG9zaXRpdmVJbnRlZ2VyKGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXREaXZpZGUoSERpdmlkZSBpbnN0cnVjdGlvbikgewogICAgLy8gQWx3YXlzIGRvdWJsZSwgYXMgaW5pdGlhbGl6ZWQuCiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdFRydW5jYXRpbmdEaXZpZGUoSFRydW5jYXRpbmdEaXZpZGUgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIEFsd2F5cyBhcyBpbml0aWFsaXplZC4KICAgIHJldHVybiBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0UmVtYWluZGVyKEhSZW1haW5kZXIgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIEFsd2F5cyBhcyBpbml0aWFsaXplZC4KICAgIHJldHVybiBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0TmVnYXRlKEhOZWdhdGUgaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBvcGVyYW5kID0gaW5zdHJ1Y3Rpb24ub3BlcmFuZDsKICAgIC8vIFdlIGhhdmUgaW50ZWdlciBzdWJjbGFzc2VzIHRoYXQgcmVwcmVzZW50IHJhbmdlcywgc28gd2lkZW4gYW55IGludAogICAgLy8gc3ViY2xhc3MgdG8gZnVsbCBpbnRlZ2VyLgogICAgaWYgKG9wZXJhbmQuaXNJbnRlZ2VyKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZTsKICAgIH0KICAgIHJldHVybiBpbnN0cnVjdGlvbi5vcGVyYW5kLmluc3RydWN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRBYnMoSEFicyBpbnN0cnVjdGlvbikgewogICAgLy8gVE9ETyhzcmEpOiBDYW4gbmFycm93IHRvIG5vbi1uZWdhdGl2ZSB0eXBlIGZvciBpbnRlZ2Vycy4KICAgIHJldHVybiBpbnN0cnVjdGlvbi5vcGVyYW5kLmluc3RydWN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGUgIT0gbnVsbCk7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdFBoaShIUGhpIHBoaSkgewogICAgQWJzdHJhY3RWYWx1ZSBjYW5kaWRhdGVUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGU7CiAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gcGhpLmlucHV0cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSA9IHBoaS5pbnB1dHNbaV0uaW5zdHJ1Y3Rpb25UeXBlOwogICAgICBjYW5kaWRhdGVUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi51bmlvbihjYW5kaWRhdGVUeXBlLCBpbnB1dFR5cGUpOwogICAgfQogICAgcmV0dXJuIGNhbmRpZGF0ZVR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXQ7CiAgICBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSA9IGlucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIEFic3RyYWN0VmFsdWUgY2hlY2tlZFR5cGUgPSBpbnN0cnVjdGlvbi5jaGVja2VkVHlwZTsKICAgIEFic3RyYWN0VmFsdWUgb3V0cHV0VHlwZSA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oY2hlY2tlZFR5cGUsIGlucHV0VHlwZSk7CiAgICBvdXRwdXRUeXBlID0gX251bWVyaWNGaXh1cChvdXRwdXRUeXBlLCBpbnB1dFR5cGUsIGNoZWNrZWRUeXBlKTsKICAgIGlmIChpbnB1dFR5cGUgIT0gb3V0cHV0VHlwZSkgewogICAgICAvLyBSZXBsYWNlIGRvbWluYXRlZCB1c2VzIG9mIGlucHV0IHdpdGggdXNlcyBvZiB0aGlzIEhUeXBlQ29udmVyc2lvbiBzbwogICAgICAvLyB0aGUgdXNlcyBiZW5lZml0IGZyb20gdGhlIHN0cm9uZ2VyIHR5cGUuCiAgICAgIC8vCiAgICAgIC8vIFRoZSBkZXBlbmRlbmN5IG9uIHRoZSBjaGVja2VkIHZhbHVlIGFsc28gaW1wcm92ZXMgdGhlIGdlbmVyYXRlZAogICAgICAvLyBKYXZhU2NyaXB0LiBNYW55IGNoZWNrcyBhcmUgY29tcGlsZWQgdG8gYSBmdW5jdGlvbiBjYWxsIGV4cHJlc3Npb24gdGhhdAogICAgICAvLyByZXR1cm5zIHRoZSBjaGVja2VkIHJlc3VsdCwgc28gdGhlIGNoZWNrIGNhbiBiZSBnZW5lcmF0ZWQgYXMgYQogICAgICAvLyBzdWJleHByZXNzaW9uIHJhdGhlciB0aGFuIGEgc2VwYXJhdGUgc3RhdGVtZW50LgogICAgICAvLwogICAgICAvLyBEbyBub3QgcmVwbGFjZSBsb2NhbCBhY2Nlc3Nlcywgc2luY2UgdGhlIGxvY2FsIG11c3QgYmUgYSBITG9jYWxWYWx1ZSwKICAgICAgLy8gbm90IGEgSFR5cGVDb252ZXJzaW9uLgogICAgICBpZiAoIShpbnB1dCBpcyBIUGFyYW1ldGVyVmFsdWUgJiYgaW5wdXQudXNlZEFzVmFyaWFibGUoKSkpIHsKICAgICAgICBpbnB1dC5yZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeShpbnN0cnVjdGlvbi5uZXh0LCBpbnN0cnVjdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXRwdXRUeXBlOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBfbnVtZXJpY0ZpeHVwKEFic3RyYWN0VmFsdWUgb3V0cHV0VHlwZSwgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUsCiAgICAgIEFic3RyYWN0VmFsdWUgY2hlY2tlZFR5cGUpIHsKICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzRW1wdHkob3V0cHV0VHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBJbnRlcnNlY3Rpb24gb2YgZG91YmxlIGFuZCBpbnRlZ2VyIGNvbmZsaWN0cyAoaXMgZW1wdHkpLCBidXQgSlMgbnVtYmVycwogICAgICAvLyBjYW4gYmUgYm90aCBpbnQgYW5kIGRvdWJsZSBhdCB0aGUgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGUsIHRoZSBpbnB1dAogICAgICAvLyBjYW4gYmUgYSBsaXRlcmFsIGRvdWJsZSAnOC4wJyB0aGF0IGlzIG1hcmtlZCBhcyBhbiBpbnRlZ2VyIChiZWNhdXNlICdpcwogICAgICAvLyBpbnQnIHdpbGwgcmV0dXJuICd0cnVlJykuICBXaGF0IHdlIHJlYWxseSBuZWVkIHRvIGRvIGlzIG1ha2UgdGhlCiAgICAgIC8vIG92ZXJsYXAgYmV0d2VlbiBpbnQgYW5kIGRvdWJsZSB2YWx1ZXMgZXhwbGljaXQgaW4gdGhlIFR5cGVNYXNrIHN5c3RlbS4KICAgICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNJbnRlZ2VyT3JOdWxsKGlucHV0VHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0RvdWJsZU9yTnVsbChjaGVja2VkVHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbChpbnB1dFR5cGUpLmlzUG90ZW50aWFsbHlUcnVlICYmCiAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKGNoZWNrZWRUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgICAgb3V0cHV0VHlwZSA9CiAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pbmNsdWRlTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluLmRvdWJsZVR5cGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvdXRwdXRUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5kb3VibGVUeXBlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG91dHB1dFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0UHJpbWl0aXZlQ2hlY2soSFByaW1pdGl2ZUNoZWNrIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXQ7CiAgICBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSA9IGlucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIEFic3RyYWN0VmFsdWUgY2hlY2tlZFR5cGUgPSBpbnN0cnVjdGlvbi5jaGVja2VkVHlwZTsKCiAgICAvLyBXZSBtdXN0IG1ha2Ugc3VyZSBhIHJlY2VpdmVyIG9yIGFyZ3VtZW50IGNoZWNrIGRvZXMgbm90IHRyeSB0byBkbyBhbiBpbnQKICAgIC8vIGNoZWNrLCBiZWNhdXNlIGFuIGludCBjaGVjayBpcyBub3QgZW5vdWdoLiAgV2Ugb25seSBkbyBhbiBpbnQgY2hlY2sgaWYKICAgIC8vIHRoZSBpbnB1dCBpcyBpbnRlZ2VyIG9yIG51bGwuCiAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bWJlck9yTnVsbChjaGVja2VkVHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaXNEb3VibGVPck51bGwoY2hlY2tlZFR5cGUpLmlzRGVmaW5pdGVseUZhbHNlICYmCiAgICAgICAgaW5wdXQuaXNJbnRlZ2VyT3JOdWxsKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaW5zdHJ1Y3Rpb24uY2hlY2tlZFR5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGU7CiAgICB9IGVsc2UgaWYgKGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgLmlzSW50ZWdlck9yTnVsbChjaGVja2VkVHlwZSkKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICBpbnB1dC5pc0ludGVnZXJPck51bGwoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIGluc3RydWN0aW9uLmNoZWNrZWRUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5udW1UeXBlOwogICAgfQoKICAgIEFic3RyYWN0VmFsdWUgb3V0cHV0VHlwZSA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oY2hlY2tlZFR5cGUsIGlucHV0VHlwZSk7CiAgICBvdXRwdXRUeXBlID0gX251bWVyaWNGaXh1cChvdXRwdXRUeXBlLCBpbnB1dFR5cGUsIGNoZWNrZWRUeXBlKTsKICAgIGlmIChpbnB1dFR5cGUgIT0gb3V0cHV0VHlwZSkgewogICAgICAvLyBSZXBsYWNlIGRvbWluYXRlZCB1c2VzIG9mIGlucHV0IHdpdGggdXNlcyBvZiB0aGlzIEhQcmltaXRpdmVDaGVjayBzbwogICAgICAvLyB0aGUgdXNlcyBiZW5lZml0IGZyb20gdGhlIHN0cm9uZ2VyIHR5cGUuCiAgICAgIC8vCiAgICAgIC8vIERvIG5vdCByZXBsYWNlIGxvY2FsIHZhcmlhYmxlIGFjY2Vzc2VzLCBzaW5jZSB0aGUgbG9jYWwgbXVzdCBiZSBhCiAgICAgIC8vIEhMb2NhbFZhbHVlLCBub3QgYW5vdGhlciBraW5kIG9mIGluc3RydWN0aW9uLgogICAgICBpZiAoIShpbnB1dCBpcyBIUGFyYW1ldGVyVmFsdWUgJiYgaW5wdXQudXNlZEFzVmFyaWFibGUoKSkpIHsKICAgICAgICBpbnB1dC5yZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeShpbnN0cnVjdGlvbi5uZXh0LCBpbnN0cnVjdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXRwdXRUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXQ7CiAgICBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSA9IGlucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIEFic3RyYWN0VmFsdWUgb3V0cHV0VHlwZSA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oaW5zdHJ1Y3Rpb24ua25vd25UeXBlLCBpbnB1dFR5cGUpOwogICAgaWYgKGlucHV0VHlwZSAhPSBvdXRwdXRUeXBlKSB7CiAgICAgIGlucHV0LnJlcGxhY2VBbGxVc2Vyc0RvbWluYXRlZEJ5KGluc3RydWN0aW9uLm5leHQsIGluc3RydWN0aW9uKTsKICAgIH0KICAgIHJldHVybiBvdXRwdXRUeXBlOwogIH0KCiAgdm9pZCBjb252ZXJ0SW5wdXQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbiBpbnB1dCwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLCBpbnQga2luZCwgRGFydFR5cGUgdHlwZUV4cHJlc3Npb24pIHsKICAgIGFzc2VydChraW5kID09IEhQcmltaXRpdmVDaGVjay5SRUNFSVZFUl9UWVBFX0NIRUNLIHx8CiAgICAgICAga2luZCA9PSBIUHJpbWl0aXZlQ2hlY2suQVJHVU1FTlRfVFlQRV9DSEVDSyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IChraW5kID09IEhQcmltaXRpdmVDaGVjay5SRUNFSVZFUl9UWVBFX0NIRUNLKQogICAgICAgID8gaW5zdHJ1Y3Rpb24uc2VsZWN0b3IKICAgICAgICA6IG51bGw7CiAgICBIUHJpbWl0aXZlQ2hlY2sgY29udmVydGVkID0gbmV3IEhQcmltaXRpdmVDaGVjaygKICAgICAgICB0eXBlRXhwcmVzc2lvbiwga2luZCwgdHlwZSwgaW5wdXQsIGluc3RydWN0aW9uLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIHJlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3I6IHNlbGVjdG9yKTsKICAgIGluc3RydWN0aW9uLmJsb2NrLmFkZEJlZm9yZShpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgIGlucHV0LnJlcGxhY2VBbGxVc2Vyc0RvbWluYXRlZEJ5KGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgX2xvZz8ucmVnaXN0ZXJQcmltaXRpdmVDaGVjayhpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICB9CgogIGJvb2wgaXNDaGVja0Vub3VnaEZvck5zbU9yQWUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBBYnN0cmFjdFZhbHVlIHR5cGUpIHsKICAgIC8vIEluIHNvbWUgY2FzZXMsIHdlIHdhbnQgdGhlIHJlY2VpdmVyIHRvIGJlIGFuIGludGVnZXIsCiAgICAvLyBidXQgdGhhdCBkb2VzIG5vdCBtZWFuIHdlIHdpbGwgZ2V0IGEgTm9TdWNoTWV0aG9kRXJyb3IKICAgIC8vIGlmIGl0J3Mgbm90OiB0aGUgcmVjZWl2ZXIgY291bGQgYmUgYSBkb3VibGUuCiAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0ludGVnZXJPck51bGwodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBJZiB0aGUgaW5zdHJ1Y3Rpb24ncyB0eXBlIGlzIGludGVnZXIgb3IgbnVsbCwgdGhlIGNvZGVnZW4KICAgICAgLy8gd2lsbCBlbWl0IGEgbnVsbCBjaGVjaywgd2hpY2ggaXMgZW5vdWdoIHRvIGtub3cgaWYgaXQgd2lsbAogICAgICAvLyBoaXQgYSBub1N1Y2hNZXRob2QuCiAgICAgIHJldHVybiBpbnN0cnVjdGlvbi5pc0ludGVnZXJPck51bGwoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gQWRkIGEgcmVjZWl2ZXIgdHlwZSBjaGVjayB3aGVuIHRoZSBjYWxsIGNhbiBvbmx5IGhpdAogIC8vIFtub1N1Y2hNZXRob2RdIGlmIHRoZSByZWNlaXZlciBpcyBub3Qgb2YgYSBzcGVjaWZpYyB0eXBlLgogIC8vIFJldHVybiB0cnVlIGlmIHRoZSByZWNlaXZlciB0eXBlIGNoZWNrIHdhcyBhZGRlZC4KICBib29sIGNoZWNrUmVjZWl2ZXIoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpbnN0cnVjdGlvbi5pc0ludGVyY2VwdGVkQ2FsbCk7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBpZiAocmVjZWl2ZXIuaXNOdW1iZXIoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAocmVjZWl2ZXIuaXNOdW1iZXJPck51bGwoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBjb252ZXJ0SW5wdXQoCiAgICAgICAgICBpbnN0cnVjdGlvbiwKICAgICAgICAgIHJlY2VpdmVyLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChyZWNlaXZlci5pbnN0cnVjdGlvblR5cGUpLAogICAgICAgICAgSFByaW1pdGl2ZUNoZWNrLlJFQ0VJVkVSX1RZUEVfQ0hFQ0ssCiAgICAgICAgICBjb21tb25FbGVtZW50cy5udW1UeXBlKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLmVsZW1lbnQgPT0gbnVsbCkgewogICAgICBpZiAoY2xvc2VkV29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbCgKICAgICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBpbnN0cnVjdGlvbi5yZWNlaXZlclR5cGUpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gdGFyZ2V0cyA9IGNsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoCiAgICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgaW5zdHJ1Y3Rpb24ucmVjZWl2ZXJUeXBlKTsKICAgICAgaWYgKHRhcmdldHMubGVuZ3RoID09IDEpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgdGFyZ2V0ID0gdGFyZ2V0cy5maXJzdDsKICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3ViY2xhc3MoY2xzKTsKICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBvcHRpbWl6ZSBvbiBzb21lIHByaW1pdGl2ZSB0eXBlcy4KICAgICAgICBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbjsKICAgICAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bWJlck9yTnVsbCh0eXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICB0eXBlRXhwcmVzc2lvbiA9IGNvbW1vbkVsZW1lbnRzLm51bVR5cGU7CiAgICAgICAgfSBlbHNlIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzQm9vbGVhbk9yTnVsbCh0eXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICB0eXBlRXhwcmVzc2lvbiA9IGNvbW1vbkVsZW1lbnRzLmJvb2xUeXBlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNDaGVja0Vub3VnaEZvck5zbU9yQWUocmVjZWl2ZXIsIHR5cGUpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaW5zdHJ1Y3Rpb24uZWxlbWVudCA9IHRhcmdldDsKICAgICAgICBjb252ZXJ0SW5wdXQoaW5zdHJ1Y3Rpb24sIHJlY2VpdmVyLCB0eXBlLAogICAgICAgICAgICBIUHJpbWl0aXZlQ2hlY2suUkVDRUlWRVJfVFlQRV9DSEVDSywgdHlwZUV4cHJlc3Npb24pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBBZGQgYW4gYXJndW1lbnQgdHlwZSBjaGVjayBpZiB0aGUgYXJndW1lbnQgaXMgbm90IG9mIGEgdHlwZQogIC8vIGV4cGVjdGVkIGJ5IHRoZSBjYWxsLgogIC8vIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCB0eXBlIGNoZWNrIHdhcyBhZGRlZC4KICBib29sIGNoZWNrQXJndW1lbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwoKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gaW5zdHJ1Y3Rpb24uc2VsZWN0b3I7CiAgICBpZiAoc2VsZWN0b3IuaXNPcGVyYXRvciAmJgogICAgICAgIGxlZnQuaXNOdW1iZXIoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAocmlnaHQuaXNOdW1iZXIoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPQogICAgICAgICAgcmlnaHQuaXNJbnRlZ2VyT3JOdWxsKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUKICAgICAgICAgICAgICA/IGFic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwocmlnaHQuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgICAgICAgIDogYWJzdHJhY3RWYWx1ZURvbWFpbi5udW1UeXBlOwogICAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFNvbWUgbnVtYmVyIG9wZXJhdGlvbnMgZG9uJ3QgaGF2ZSBhIGJ1aWx0aW4KICAgICAgLy8gdmFyaWFudCBhbmQgd2lsbCBkbyB0aGUgY2hlY2sgaW4gdGhlaXIgbWV0aG9kIGFueXdheS4gV2UKICAgICAgLy8gc3RpbGwgYWRkIGEgY2hlY2sgYmVjYXVzZSBpdCBhbGxvd3MgdG8gR1ZOIHRoZXNlIG9wZXJhdGlvbnMsCiAgICAgIC8vIGJ1dCB3ZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkuCiAgICAgIGNvbnZlcnRJbnB1dChpbnN0cnVjdGlvbiwgcmlnaHQsIHR5cGUsCiAgICAgICAgICBIUHJpbWl0aXZlQ2hlY2suQVJHVU1FTlRfVFlQRV9DSEVDSywgY29tbW9uRWxlbWVudHMubnVtVHlwZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBwcm9jZXNzUGVuZGluZ09wdGltaXphdGlvbnMoKSB7CiAgICBwZW5kaW5nT3B0aW1pemF0aW9ucy5mb3JFYWNoKChpbnN0cnVjdGlvbiwgYWN0aW9uKSA9PiBhY3Rpb24oKSk7CiAgICBwZW5kaW5nT3B0aW1pemF0aW9ucy5jbGVhcigpOwogIH0KCiAgdm9pZCBhZGREZXBlbmRlbnRJbnN0cnVjdGlvbnNUb1dvcmtMaXN0KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGluc3RydWN0aW9uLnVzZWRCeS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAvLyBUaGUgdHlwZSBwcm9wYWdhdG9yIG9ubHkgcHJvcGFnYXRlcyB0eXBlcyBmb3J3YXJkLiBXZQogICAgICAvLyB0aHVzIG9ubHkgbmVlZCB0byBhZGQgdGhlIHVzZXJzIG9mIHRoZSBbaW5zdHJ1Y3Rpb25dIHRvIHRoZSBsaXN0LgogICAgICBhZGRUb1dvcmtMaXN0KGluc3RydWN0aW9uLnVzZWRCeVtpXSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZEFsbFVzZXJzQnV0KEhJbnZva2VEeW5hbWljIGludm9rZSwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpbnN0cnVjdGlvbi51c2VkQnkuZm9yRWFjaCgoSEluc3RydWN0aW9uIHVzZXIpIHsKICAgICAgaWYgKHVzZXIgIT0gaW52b2tlKSBhZGRUb1dvcmtMaXN0KHVzZXIpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0SW52b2tlRHluYW1pYyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uLmlzSW50ZXJjZXB0ZWRDYWxsKSB7CiAgICAgIC8vIFdlIGNhbm5vdCBkbyB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbiBub3csIGJlY2F1c2Ugd2UgaGF2ZSB0byB3YWl0CiAgICAgIC8vIGZvciB0aGUgdHlwZSBwcm9wYWdhdGlvbiB0byBiZSBzdGFibGUuIFRoZSByZWNlaXZlciBvZiBbaW5zdHJ1Y3Rpb25dCiAgICAgIC8vIG1pZ2h0IG1vdmUgZnJvbSBudW1iZXIgdG8gZHluYW1pYy4KICAgICAgdm9pZCBjaGVja0lucHV0cygpIHsKICAgICAgICBTZWxlY3RvciBzZWxlY3RvciA9IGluc3RydWN0aW9uLnNlbGVjdG9yOwogICAgICAgIGlmIChzZWxlY3Rvci5pc09wZXJhdG9yICYmIHNlbGVjdG9yLm5hbWUgIT0gJz09JykgewogICAgICAgICAgaWYgKGNoZWNrUmVjZWl2ZXIoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgICAgIGFkZEFsbFVzZXJzQnV0KGluc3RydWN0aW9uLCBpbnN0cnVjdGlvbi5pbnB1dHNbMV0pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFzZWxlY3Rvci5pc1VuYXJ5T3BlcmF0b3IgJiYgY2hlY2tBcmd1bWVudChpbnN0cnVjdGlvbikpIHsKICAgICAgICAgICAgYWRkQWxsVXNlcnNCdXQoaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uLmlucHV0c1syXSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0NhbGwpIHsKICAgICAgICAgIGlmIChzZWxlY3Rvci5uYW1lID09ICdhYnMnICYmIHNlbGVjdG9yLmFyZ3VtZW50Q291bnQgPT0gMCkgewogICAgICAgICAgICBpZiAoY2hlY2tSZWNlaXZlcihpbnN0cnVjdGlvbikpIHsKICAgICAgICAgICAgICBhZGRBbGxVc2Vyc0J1dChpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgcGVuZGluZ09wdGltaXphdGlvbnMucHV0SWZBYnNlbnQoaW5zdHJ1Y3Rpb24sICgpID0+IGNoZWNrSW5wdXRzKTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpOwogICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPSByZWNlaXZlci5pbnN0cnVjdGlvblR5cGU7CiAgICBpbnN0cnVjdGlvbi51cGRhdGVSZWNlaXZlclR5cGUoYWJzdHJhY3RWYWx1ZURvbWFpbiwgcmVjZWl2ZXJUeXBlKTsKCiAgICAvLyBUcnkgdG8gcmVmaW5lIHRoYXQgdGhlIHJlY2VpdmVyIGlzIG5vdCBudWxsIGFmdGVyIHRoaXMgY2FsbCBieSBpbnNlcnRpbmcKICAgIC8vIGEgcmVmaW5lbWVudCBub2RlIChIVHlwZUtub3duKS4KICAgIHZhciBzZWxlY3RvciA9IGluc3RydWN0aW9uLnNlbGVjdG9yOwogICAgaWYgKCFzZWxlY3Rvci5pc0Nsb3N1cmVDYWxsICYmICFzZWxlY3Rvci5hcHBsaWVzVG9OdWxsV2l0aG91dFRocm93KCkpIHsKICAgICAgdmFyIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpZiAobmV4dCBpcyBIVHlwZUtub3duICYmIG5leHQuY2hlY2tlZElucHV0ID09IHJlY2VpdmVyKSB7CiAgICAgICAgLy8gT24gYSBwcmV2aW91cyBwYXNzIG9yIGl0ZXJhdGlvbiB3ZSBhbHJlYWR5IHJlZmluZWQgW3JlY2VpdmVyXSBieQogICAgICAgIC8vIGluc2VydGluZyBhIFtIVHlwZUtub3duXSBpbnN0cnVjdGlvbi4gVGhhdCByZXBsYWNlZCBzZXZlcmFsIGRvbWluYXRlZAogICAgICAgIC8vIHVzZXMgd2l0aCB0aGUgcmVmaW5lbWVudC4gV2UgdXBkYXRlIHRoZSB0eXBlIG9mIHRoZSBbSFR5cGVLbm93bl0KICAgICAgICAvLyBpbnN0cnVjdGlvbiBiZWNhdXNlIGl0IG1heSBoYXZlIGJlZW4gcmVmaW5lZCB3aXRoIGEgY29ycmVjdCB0eXBlIGF0CiAgICAgICAgLy8gdGhlIHRpbWUsIGJ1dCBpbmNvcnJlY3Qgbm93LgogICAgICAgIEFic3RyYWN0VmFsdWUgbmV3VHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwocmVjZWl2ZXJUeXBlKTsKICAgICAgICBpZiAobmV4dC5pbnN0cnVjdGlvblR5cGUgIT0gbmV3VHlwZSkgewogICAgICAgICAgbmV4dC5rbm93blR5cGUgPSBuZXh0Lmluc3RydWN0aW9uVHlwZSA9IG5ld1R5cGU7CiAgICAgICAgICBhZGREZXBlbmRlbnRJbnN0cnVjdGlvbnNUb1dvcmtMaXN0KG5leHQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbChyZWNlaXZlclR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgRG9taW5hdGVkVXNlcyB1c2VzID0KICAgICAgICAgICAgRG9taW5hdGVkVXNlcy5vZihyZWNlaXZlciwgaW5zdHJ1Y3Rpb24sIGV4Y2x1ZGVEb21pbmF0b3I6IHRydWUpOwogICAgICAgIGlmICh1c2VzLmlzTm90RW1wdHkpIHsKICAgICAgICAgIC8vIEluc2VydCBhIHJlZmluZW1lbnQgbm9kZSBhZnRlciB0aGUgY2FsbCBhbmQgdXBkYXRlIGFsbCB1c2VycwogICAgICAgICAgLy8gZG9taW5hdGVkIGJ5IHRoZSBjYWxsIHRvIHVzZSB0aGF0IG5vZGUgaW5zdGVhZCBvZiBbcmVjZWl2ZXJdLgogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBuZXdUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChyZWNlaXZlclR5cGUpOwogICAgICAgICAgSFR5cGVLbm93biBjb252ZXJ0ZWQgPQogICAgICAgICAgICAgIG5ldyBIVHlwZUtub3duLndpdG5lc3NlZChuZXdUeXBlLCByZWNlaXZlciwgaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2suYWRkQmVmb3JlKGluc3RydWN0aW9uLm5leHQsIGNvbnZlcnRlZCk7CiAgICAgICAgICB1c2VzLnJlcGxhY2VXaXRoKGNvbnZlcnRlZCk7CiAgICAgICAgICBhZGREZXBlbmRlbnRJbnN0cnVjdGlvbnNUb1dvcmtMaXN0KGNvbnZlcnRlZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGluc3RydWN0aW9uLnNwZWNpYWxpemVyCiAgICAgICAgLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRBc0NoZWNrKEhBc0NoZWNrIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXQ7CiAgICBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSA9IGlucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIEFic3RyYWN0VmFsdWUgY2hlY2tlZFR5cGUgPSBpbnN0cnVjdGlvbi5jaGVja2VkVHlwZS5hYnN0cmFjdFZhbHVlOwogICAgQWJzdHJhY3RWYWx1ZSBvdXRwdXRUeXBlID0KICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmludGVyc2VjdGlvbihjaGVja2VkVHlwZSwgaW5wdXRUeXBlKTsKICAgIG91dHB1dFR5cGUgPSBfbnVtZXJpY0ZpeHVwKG91dHB1dFR5cGUsIGlucHV0VHlwZSwgY2hlY2tlZFR5cGUpOwogICAgaWYgKGlucHV0VHlwZSAhPSBvdXRwdXRUeXBlKSB7CiAgICAgIC8vIFJlcGxhY2UgZG9taW5hdGVkIHVzZXMgb2YgaW5wdXQgd2l0aCB1c2VzIG9mIHRoaXMgSFR5cGVDb252ZXJzaW9uIHNvCiAgICAgIC8vIHRoZSB1c2VzIGJlbmVmaXQgZnJvbSB0aGUgc3Ryb25nZXIgdHlwZS4KICAgICAgLy8KICAgICAgLy8gRG8gbm90IHJlcGxhY2UgbG9jYWwgYWNjZXNzZXMsIHNpbmNlIHRoZSBsb2NhbCBtdXN0IGJlIGEgSExvY2FsVmFsdWUsCiAgICAgIC8vIG5vdCBhIEhBc0NoZWNrLgogICAgICBpZiAoIShpbnB1dCBpcyBIUGFyYW1ldGVyVmFsdWUgJiYgaW5wdXQudXNlZEFzVmFyaWFibGUoKSkpIHsKICAgICAgICBpbnB1dC5yZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeShpbnN0cnVjdGlvbi5uZXh0LCBpbnN0cnVjdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXRwdXRUeXBlOwogIH0KfQqCDQBOTjwBNiQhMSEyKhcVGAE3BEgEPgRMUUtOQwRQHkohTEcuOykBLCciIgwqARVHATEnATglBAFAKi4iOTYdTUsrHwQBDCIfFwQBDCcgJEZFGCtRSTo9HAoNJB8zCgoGASwiJTkIJgYEARsJIigwJRwnOwoIRkVDKyUhBAExIwEkGCEGBAEMRyosQEEqBj8tBigEAUYqLEhJMgYvBAEMNy4EAQwtLgQBDDMmKAQBDEceKAQBDDkeKAQBDDMwSiFDKgYwBAEMLUAwBAEMPTEoBAEMJUFDP0sGGgQBDEMzNTkfQkQjTjIJSVFIOQlPIENJCAYXBAFRI0RRTlFKUE1OR0kXTxE3CggGFwQBDEMzNTkBUE4lTE1HPSMqIUk9BgEfQkQjTjIJSzdDSQgGFwQBDDkzNR9MI0cGFwQBRD86NkYfEDVKLjk+OgQBTz0+NEZDRB1QBhEEATo/NzMrM0MUBkkUFxRFLyMTLis9FghCOyEtMU0/IUkzUTQRGApEJjJCFQgGEgQBQRs3My8wAS4fP0IWCBtGRy1GQkYqLUgTBhIEASdFIgQBRks/SywGBAFJNS8IBAEMQSlOTiwbMjwsQAxJQAwmRy5CDgwKCAFIBgFGO0cBUCcpTCNBTFFMTyhPLzs0Ck8dTR9KS1EhSEQnOQoIBgEjRwQBDDUzNUcfQkQjTjIJTxlDSQgGFwQCAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdHlwZXNfcHJvcGFnYXRpb24uZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvdmFsdWVfcmFuZ2VfYW5hbHl6ZXIuZGFydMAAnAUvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ29wdGltaXplLmRhcnQnOwoKY2xhc3MgVmFsdWVSYW5nZUluZm8gewogIEludFZhbHVlIGludFplcm87CiAgSW50VmFsdWUgaW50T25lOwoKICBWYWx1ZVJhbmdlSW5mbygpIHsKICAgIGludFplcm8gPSBuZXdJbnRWYWx1ZShCaWdJbnQuemVybyk7CiAgICBpbnRPbmUgPSBuZXdJbnRWYWx1ZShCaWdJbnQub25lKTsKICB9CgogIFZhbHVlIG5ld0ludFZhbHVlKEJpZ0ludCB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBJbnRWYWx1ZSh2YWx1ZSwgdGhpcyk7CiAgfQoKICBWYWx1ZSBuZXdJbnN0cnVjdGlvblZhbHVlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIG5ldyBJbnN0cnVjdGlvblZhbHVlKGluc3RydWN0aW9uLCB0aGlzKTsKICB9CgogIFZhbHVlIG5ld1Bvc2l0aXZlVmFsdWUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gbmV3IFBvc2l0aXZlVmFsdWUoaW5zdHJ1Y3Rpb24sIHRoaXMpOwogIH0KCiAgVmFsdWUgbmV3QWRkVmFsdWUoVmFsdWUgbGVmdCwgVmFsdWUgcmlnaHQpIHsKICAgIHJldHVybiBuZXcgQWRkVmFsdWUobGVmdCwgcmlnaHQsIHRoaXMpOwogIH0KCiAgVmFsdWUgbmV3U3VidHJhY3RWYWx1ZShWYWx1ZSBsZWZ0LCBWYWx1ZSByaWdodCkgewogICAgcmV0dXJuIG5ldyBTdWJ0cmFjdFZhbHVlKGxlZnQsIHJpZ2h0LCB0aGlzKTsKICB9CgogIFZhbHVlIG5ld05lZ2F0ZVZhbHVlKFZhbHVlIHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IE5lZ2F0ZVZhbHVlKHZhbHVlLCB0aGlzKTsKICB9CgogIFJhbmdlIG5ld1VuYm91bmRSYW5nZSgpIHsKICAgIHJldHVybiBuZXcgUmFuZ2UudW5ib3VuZCh0aGlzKTsKICB9CgogIFJhbmdlIG5ld05vcm1hbGl6ZWRSYW5nZShWYWx1ZSBsb3csIFZhbHVlIHVwKSB7CiAgICByZXR1cm4gbmV3IFJhbmdlLm5vcm1hbGl6ZShsb3csIHVwLCB0aGlzKTsKICB9CgogIFJhbmdlIG5ld01hcmtlclJhbmdlKCkgewogICAgcmV0dXJuIG5ldyBSYW5nZSgKICAgICAgICBuZXcgTWFya2VyVmFsdWUoZmFsc2UsIHRoaXMpLCBuZXcgTWFya2VyVmFsdWUodHJ1ZSwgdGhpcyksIHRoaXMpOwogIH0KfQoKLy8vIEEgW1ZhbHVlXSByZXByZXNlbnRzIGJvdGggc3ltYm9saWMgdmFsdWVzIGxpa2UgdGhlIHZhbHVlIG9mIGEKLy8vIHBhcmFtZXRlciwgb3IgdGhlIGxlbmd0aCBvZiBhbiBhcnJheSwgYW5kIGNvbmNyZXRlIHZhbHVlcywgbGlrZQovLy8gY29uc3RhbnRzLgphYnN0cmFjdCBjbGFzcyBWYWx1ZSB7CiAgZmluYWwgVmFsdWVSYW5nZUluZm8gaW5mbzsKICBjb25zdCBWYWx1ZSh0aGlzLmluZm8pOwoKICBWYWx1ZSBvcGVyYXRvciArKFZhbHVlIG90aGVyKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKICBWYWx1ZSBvcGVyYXRvciAtKFZhbHVlIG90aGVyKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKICBWYWx1ZSBvcGVyYXRvciAtKCkgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgVmFsdWUgb3BlcmF0b3IgJihWYWx1ZSBvdGhlcikgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CgogIFZhbHVlIG1pbihWYWx1ZSBvdGhlcikgewogICAgaWYgKHRoaXMgPT0gb3RoZXIpIHJldHVybiB0aGlzOwogICAgaWYgKG90aGVyID09IGNvbnN0IE1pbkludFZhbHVlKCkpIHJldHVybiBvdGhlcjsKICAgIGlmIChvdGhlciA9PSBjb25zdCBNYXhJbnRWYWx1ZSgpKSByZXR1cm4gdGhpczsKICAgIFZhbHVlIHZhbHVlID0gdGhpcyAtIG90aGVyOwogICAgaWYgKHZhbHVlLmlzUG9zaXRpdmUpIHJldHVybiBvdGhlcjsKICAgIGlmICh2YWx1ZS5pc05lZ2F0aXZlKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICB9CgogIFZhbHVlIG1heChWYWx1ZSBvdGhlcikgewogICAgaWYgKHRoaXMgPT0gb3RoZXIpIHJldHVybiB0aGlzOwogICAgaWYgKG90aGVyID09IGNvbnN0IE1pbkludFZhbHVlKCkpIHJldHVybiB0aGlzOwogICAgaWYgKG90aGVyID09IGNvbnN0IE1heEludFZhbHVlKCkpIHJldHVybiBvdGhlcjsKICAgIFZhbHVlIHZhbHVlID0gdGhpcyAtIG90aGVyOwogICAgaWYgKHZhbHVlLmlzUG9zaXRpdmUpIHJldHVybiB0aGlzOwogICAgaWYgKHZhbHVlLmlzTmVnYXRpdmUpIHJldHVybiBvdGhlcjsKICAgIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICB9CgogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiBmYWxzZTsKICBib29sIGdldCBpc1plcm8gPT4gZmFsc2U7Cn0KCi8vLyBUaGUgW01hcmtlclZhbHVlXSBjbGFzcyBpcyB1c2VkIHRvIHJlY29nbml6ZSByYW5nZXMgb2YgbG9vcAovLy8gdXBkYXRlcy4KY2xhc3MgTWFya2VyVmFsdWUgZXh0ZW5kcyBWYWx1ZSB7CiAgLy8vIElmIFtwb3NpdGl2ZV0gaXMgdHJ1ZSAocmVzcGVjdGl2ZWx5IGZhbHNlKSwgdGhlIG1hcmtlciBnb2VzCiAgLy8vIHRvIFtNYXhJbnRWYWx1ZV0gKHJlc3BlY3RpdmVseSBbTWluSW50VmFsdWVdKSB3aGVuIGJlaW5nIGFkZGVkCiAgLy8vIHRvIGEgcG9zaXRpdmUgKHJlc3BlY3RpdmVseSBuZWdhdGl2ZSkgdmFsdWUuCiAgZmluYWwgYm9vbCBwb3NpdGl2ZTsKCiAgY29uc3QgTWFya2VyVmFsdWUodGhpcy5wb3NpdGl2ZSwgaW5mbykgOiBzdXBlcihpbmZvKTsKCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgKyhWYWx1ZSBvdGhlcikgewogICAgaWYgKG90aGVyLmlzUG9zaXRpdmUgJiYgcG9zaXRpdmUpIHJldHVybiBjb25zdCBNYXhJbnRWYWx1ZSgpOwogICAgaWYgKG90aGVyLmlzTmVnYXRpdmUgJiYgIXBvc2l0aXZlKSByZXR1cm4gY29uc3QgTWluSW50VmFsdWUoKTsKICAgIGlmIChvdGhlciBpcyBJbnRWYWx1ZSkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKFZhbHVlIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNQb3NpdGl2ZSAmJiAhcG9zaXRpdmUpIHJldHVybiBjb25zdCBNaW5JbnRWYWx1ZSgpOwogICAgaWYgKG90aGVyLmlzTmVnYXRpdmUgJiYgcG9zaXRpdmUpIHJldHVybiBjb25zdCBNYXhJbnRWYWx1ZSgpOwogICAgaWYgKG90aGVyIGlzIEludFZhbHVlKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICB9Cn0KCi8vLyBBbiBbSW50VmFsdWVdIGNvbnRhaW5zIGEgY29uc3RhbnQgaW50ZWdlciB2YWx1ZS4KY2xhc3MgSW50VmFsdWUgZXh0ZW5kcyBWYWx1ZSB7CiAgZmluYWwgQmlnSW50IHZhbHVlOwoKICBjb25zdCBJbnRWYWx1ZSh0aGlzLnZhbHVlLCBpbmZvKSA6IHN1cGVyKGluZm8pOwoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciArKGR5bmFtaWMgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgaWYgKG90aGVyIGlzISBJbnRWYWx1ZSkgcmV0dXJuIG90aGVyICsgdGhpczsKICAgIGR5bmFtaWMgY29uc3RhbnQgPSBjb25zdGFudF9zeXN0ZW0uYWRkLmZvbGQoCiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludCh2YWx1ZSksCiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludChvdGhlci52YWx1ZSkpOwogICAgaWYgKCFjb25zdGFudC5pc0ludCkgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogICAgcmV0dXJuIGluZm8ubmV3SW50VmFsdWUoY29uc3RhbnQuaW50VmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLShkeW5hbWljIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGlmIChvdGhlciBpcyEgSW50VmFsdWUpIHJldHVybiAtb3RoZXIgKyB0aGlzOwogICAgZHluYW1pYyBjb25zdGFudCA9IGNvbnN0YW50X3N5c3RlbS5zdWJ0cmFjdC5mb2xkKAogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQodmFsdWUpLAogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQob3RoZXIudmFsdWUpKTsKICAgIGlmICghY29uc3RhbnQuaXNJbnQpIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICAgIHJldHVybiBpbmZvLm5ld0ludFZhbHVlKGNvbnN0YW50LmludFZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oKSB7CiAgICBpZiAoaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGR5bmFtaWMgY29uc3RhbnQgPQogICAgICAgIGNvbnN0YW50X3N5c3RlbS5uZWdhdGUuZm9sZChjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KHZhbHVlKSk7CiAgICBpZiAoIWNvbnN0YW50LmlzSW50KSByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgICByZXR1cm4gaW5mby5uZXdJbnRWYWx1ZShjb25zdGFudC5pbnRWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAmKGR5bmFtaWMgb3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgSW50VmFsdWUpIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICAgIGR5bmFtaWMgY29uc3RhbnQgPSBjb25zdGFudF9zeXN0ZW0uYml0QW5kLmZvbGQoCiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludCh2YWx1ZSksCiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludChvdGhlci52YWx1ZSkpOwogICAgcmV0dXJuIGluZm8ubmV3SW50VmFsdWUoY29uc3RhbnQuaW50VmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgbWluKGR5bmFtaWMgb3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgSW50VmFsdWUpIHJldHVybiBvdGhlci5taW4odGhpcyk7CiAgICByZXR1cm4gdGhpcy52YWx1ZSA8IG90aGVyLnZhbHVlID8gdGhpcyA6IG90aGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgbWF4KGR5bmFtaWMgb3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgSW50VmFsdWUpIHJldHVybiBvdGhlci5tYXgodGhpcyk7CiAgICByZXR1cm4gdGhpcy52YWx1ZSA8IG90aGVyLnZhbHVlID8gb3RoZXIgOiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBJbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRoaXMudmFsdWUgPT0gb3RoZXIudmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdJbnRWYWx1ZS5oYXNoQ29kZScpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSW50VmFsdWUgJHZhbHVlJzsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05lZ2F0aXZlID0+IHZhbHVlIDwgQmlnSW50Lnplcm87CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiB2YWx1ZSA+PSBCaWdJbnQuemVybzsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1plcm8gPT4gdmFsdWUgPT0gQmlnSW50Lnplcm87Cn0KCi8vLyBUaGUgW01heEludFZhbHVlXSByZXByZXNlbnRzIHRoZSBtYXhpbXVtIHZhbHVlIGFuIGludGVnZXIgY2FuIGhhdmUsCi8vLyB3aGljaCBpcyBjdXJyZW50bHkgK2luZmluaXR5LgpjbGFzcyBNYXhJbnRWYWx1ZSBleHRlbmRzIFZhbHVlIHsKICBjb25zdCBNYXhJbnRWYWx1ZSgpIDogc3VwZXIobnVsbCk7CiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgKyhWYWx1ZSBvdGhlcikgPT4gdGhpczsKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKFZhbHVlIG90aGVyKSA9PiB0aGlzOwogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oKSA9PiBjb25zdCBNaW5JbnRWYWx1ZSgpOwogIEBvdmVycmlkZQogIFZhbHVlIG1pbihWYWx1ZSBvdGhlcikgPT4gb3RoZXI7CiAgQG92ZXJyaWRlCiAgVmFsdWUgbWF4KFZhbHVlIG90aGVyKSA9PiB0aGlzOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdNYXgnOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiB0cnVlOwp9CgovLy8gVGhlIFtNaW5JbnRWYWx1ZV0gcmVwcmVzZW50cyB0aGUgbWluaW11bSB2YWx1ZSBhbiBpbnRlZ2VyIGNhbiBoYXZlLAovLy8gd2hpY2ggaXMgY3VycmVudGx5IC1pbmZpbml0eS4KY2xhc3MgTWluSW50VmFsdWUgZXh0ZW5kcyBWYWx1ZSB7CiAgY29uc3QgTWluSW50VmFsdWUoKSA6IHN1cGVyKG51bGwpOwogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICsoVmFsdWUgb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLShWYWx1ZSBvdGhlcikgPT4gdGhpczsKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKCkgPT4gY29uc3QgTWF4SW50VmFsdWUoKTsKICBAb3ZlcnJpZGUKICBWYWx1ZSBtaW4oVmFsdWUgb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgVmFsdWUgbWF4KFZhbHVlIG90aGVyKSA9PiBvdGhlcjsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnTWluJzsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05lZ2F0aXZlID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiBmYWxzZTsKfQoKLy8vIFRoZSBbVW5rbm93blZhbHVlXSBpcyB0aGUgc2VudGluZWwgaW4gb3VyIGFuYWx5c2lzIHRvIG1hcmsgYW4KLy8vIG9wZXJhdGlvbiB0aGF0IGNvdWxkIG5vdCBiZSBkb25lIGJlY2F1c2Ugb2YgdG9vIG11Y2ggY29tcGxleGl0eS4KY2xhc3MgVW5rbm93blZhbHVlIGV4dGVuZHMgVmFsdWUgewogIGNvbnN0IFVua25vd25WYWx1ZSgpIDogc3VwZXIobnVsbCk7CiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgKyhWYWx1ZSBvdGhlcikgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLShWYWx1ZSBvdGhlcikgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLSgpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwogIEBvdmVycmlkZQogIFZhbHVlIG1pbihWYWx1ZSBvdGhlcikgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgQG92ZXJyaWRlCiAgVmFsdWUgbWF4KFZhbHVlIG90aGVyKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05lZ2F0aXZlID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1Vua25vd24nOwp9CgovLy8gQSBzeW1ib2xpYyB2YWx1ZSByZXByZXNlbnRpbmcgYW4gW0hJbnN0cnVjdGlvbl0uCmNsYXNzIEluc3RydWN0aW9uVmFsdWUgZXh0ZW5kcyBWYWx1ZSB7CiAgZmluYWwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uOwogIEluc3RydWN0aW9uVmFsdWUodGhpcy5pbnN0cnVjdGlvbiwgaW5mbykgOiBzdXBlcihpbmZvKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBJbnN0cnVjdGlvblZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbiA9PSBvdGhlci5pbnN0cnVjdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0luc3RydWN0aW9uVmFsdWUuaGFzaENvZGUnKTsKCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgKyhWYWx1ZSBvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAob3RoZXIgaXMgSW50VmFsdWUpIHsKICAgICAgaWYgKG90aGVyLmlzTmVnYXRpdmUpIHsKICAgICAgICByZXR1cm4gaW5mby5uZXdTdWJ0cmFjdFZhbHVlKHRoaXMsIC1vdGhlcik7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZm8ubmV3QWRkVmFsdWUodGhpcywgb3RoZXIpOwogICAgfQogICAgaWYgKG90aGVyIGlzIEluc3RydWN0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3QWRkVmFsdWUodGhpcywgb3RoZXIpOwogICAgfQogICAgcmV0dXJuIG90aGVyICsgdGhpczsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oVmFsdWUgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgaWYgKHRoaXMgPT0gb3RoZXIpIHJldHVybiBpbmZvLmludFplcm87CiAgICBpZiAob3RoZXIgaXMgSW50VmFsdWUpIHsKICAgICAgaWYgKG90aGVyLmlzTmVnYXRpdmUpIHsKICAgICAgICByZXR1cm4gaW5mby5uZXdBZGRWYWx1ZSh0aGlzLCAtb3RoZXIpOwogICAgICB9CiAgICAgIHJldHVybiBpbmZvLm5ld1N1YnRyYWN0VmFsdWUodGhpcywgb3RoZXIpOwogICAgfQogICAgaWYgKG90aGVyIGlzIEluc3RydWN0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3U3VidHJhY3RWYWx1ZSh0aGlzLCBvdGhlcik7CiAgICB9CiAgICByZXR1cm4gLW90aGVyICsgdGhpczsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oKSB7CiAgICByZXR1cm4gaW5mby5uZXdOZWdhdGVWYWx1ZSh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0luc3RydWN0aW9uOiAkaW5zdHJ1Y3Rpb24nOwp9CgovLy8gU3BlY2lhbCB2YWx1ZSBmb3IgaW5zdHJ1Y3Rpb25zIHdob3NlIHR5cGUgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyLgpjbGFzcyBQb3NpdGl2ZVZhbHVlIGV4dGVuZHMgSW5zdHJ1Y3Rpb25WYWx1ZSB7CiAgUG9zaXRpdmVWYWx1ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGluZm8pIDogc3VwZXIoaW5zdHJ1Y3Rpb24sIGluZm8pOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gdHJ1ZTsKfQoKLy8vIFJlcHJlc2VudHMgYSBiaW5hcnkgb3BlcmF0aW9uIG9uIHR3byBbVmFsdWVdLCB3aGVyZSB0aGUgb3BlcmF0aW9uCi8vLyBkaWQgbm90IHlpZWxkIGEgY2Fub25pY2FsIHZhbHVlLgpjbGFzcyBCaW5hcnlPcGVyYXRpb25WYWx1ZSBleHRlbmRzIFZhbHVlIHsKICBmaW5hbCBWYWx1ZSBsZWZ0OwogIGZpbmFsIFZhbHVlIHJpZ2h0OwogIEJpbmFyeU9wZXJhdGlvblZhbHVlKHRoaXMubGVmdCwgdGhpcy5yaWdodCwgaW5mbykgOiBzdXBlcihpbmZvKTsKfQoKY2xhc3MgQWRkVmFsdWUgZXh0ZW5kcyBCaW5hcnlPcGVyYXRpb25WYWx1ZSB7CiAgQWRkVmFsdWUobGVmdCwgcmlnaHQsIGluZm8pIDogc3VwZXIobGVmdCwgcmlnaHQsIGluZm8pOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIEFkZFZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gKGxlZnQgPT0gb3RoZXIubGVmdCAmJiByaWdodCA9PSBvdGhlci5yaWdodCkgfHwKICAgICAgICAobGVmdCA9PSBvdGhlci5yaWdodCAmJiByaWdodCA9PSBvdGhlci5sZWZ0KTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0FkZFZhbHVlLmhhc2hDb2RlJyk7CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oKSA9PiAtbGVmdCAtIHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciArKFZhbHVlIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIFZhbHVlIHZhbHVlID0gbGVmdCArIG90aGVyOwogICAgaWYgKHZhbHVlICE9IGNvbnN0IFVua25vd25WYWx1ZSgpICYmIHZhbHVlIGlzISBCaW5hcnlPcGVyYXRpb25WYWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgKyByaWdodDsKICAgIH0KICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IHNpbXBsZSBlbm91Z2gsIHdlIHRyeSB0aGUgc2FtZSBhcHByb2FjaAogICAgLy8gd2l0aCBbcmlnaHRdLgogICAgdmFsdWUgPSByaWdodCArIG90aGVyOwogICAgaWYgKHZhbHVlICE9IGNvbnN0IFVua25vd25WYWx1ZSgpICYmIHZhbHVlIGlzISBCaW5hcnlPcGVyYXRpb25WYWx1ZSkgewogICAgICByZXR1cm4gbGVmdCArIHZhbHVlOwogICAgfQogICAgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLShWYWx1ZSBvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBWYWx1ZSB2YWx1ZSA9IGxlZnQgLSBvdGhlcjsKICAgIGlmICh2YWx1ZSAhPSBjb25zdCBVbmtub3duVmFsdWUoKSAmJiB2YWx1ZSBpcyEgQmluYXJ5T3BlcmF0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlICsgcmlnaHQ7CiAgICB9CiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIG5vdCBzaW1wbGUgZW5vdWdoLCB3ZSB0cnkgdGhlIHNhbWUgYXBwcm9hY2gKICAgIC8vIHdpdGggW3JpZ2h0XS4KICAgIHZhbHVlID0gcmlnaHQgLSBvdGhlcjsKICAgIGlmICh2YWx1ZSAhPSBjb25zdCBVbmtub3duVmFsdWUoKSAmJiB2YWx1ZSBpcyEgQmluYXJ5T3BlcmF0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIGxlZnQgKyB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gbGVmdC5pc05lZ2F0aXZlICYmIHJpZ2h0LmlzTmVnYXRpdmU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiBsZWZ0LmlzUG9zaXRpdmUgJiYgcmlnaHQuaXNQb3NpdGl2ZTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGxlZnQgKyAkcmlnaHQnOwp9CgpjbGFzcyBTdWJ0cmFjdFZhbHVlIGV4dGVuZHMgQmluYXJ5T3BlcmF0aW9uVmFsdWUgewogIFN1YnRyYWN0VmFsdWUobGVmdCwgcmlnaHQsIGluZm8pIDogc3VwZXIobGVmdCwgcmlnaHQsIGluZm8pOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIFN1YnRyYWN0VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBsZWZ0ID09IG90aGVyLmxlZnQgJiYgcmlnaHQgPT0gb3RoZXIucmlnaHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdTdWJ0cmFjdFZhbHVlLmhhc2hDb2RlJyk7CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oKSA9PiByaWdodCAtIGxlZnQ7CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICsoVmFsdWUgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgVmFsdWUgdmFsdWUgPSBsZWZ0ICsgb3RoZXI7CiAgICBpZiAodmFsdWUgIT0gY29uc3QgVW5rbm93blZhbHVlKCkgJiYgdmFsdWUgaXMhIEJpbmFyeU9wZXJhdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZSAtIHJpZ2h0OwogICAgfQogICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBub3Qgc2ltcGxlIGVub3VnaCwgd2UgdHJ5IHRoZSBzYW1lIGFwcHJvYWNoCiAgICAvLyB3aXRoIFtyaWdodF0uCiAgICB2YWx1ZSA9IG90aGVyIC0gcmlnaHQ7CiAgICBpZiAodmFsdWUgIT0gY29uc3QgVW5rbm93blZhbHVlKCkgJiYgdmFsdWUgaXMhIEJpbmFyeU9wZXJhdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiBsZWZ0ICsgdmFsdWU7CiAgICB9CiAgICByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKFZhbHVlIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIFZhbHVlIHZhbHVlID0gbGVmdCAtIG90aGVyOwogICAgaWYgKHZhbHVlICE9IGNvbnN0IFVua25vd25WYWx1ZSgpICYmIHZhbHVlIGlzISBCaW5hcnlPcGVyYXRpb25WYWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgLSByaWdodDsKICAgIH0KICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IHNpbXBsZSBlbm91Z2gsIHdlIHRyeSB0aGUgc2FtZSBhcHByb2FjaAogICAgLy8gd2l0aCBbcmlnaHRdLgogICAgdmFsdWUgPSByaWdodCArIG90aGVyOwogICAgaWYgKHZhbHVlICE9IGNvbnN0IFVua25vd25WYWx1ZSgpICYmIHZhbHVlIGlzISBCaW5hcnlPcGVyYXRpb25WYWx1ZSkgewogICAgICByZXR1cm4gbGVmdCAtIHZhbHVlOwogICAgfQogICAgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBsZWZ0LmlzTmVnYXRpdmUgJiYgcmlnaHQuaXNQb3NpdGl2ZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IGxlZnQuaXNQb3NpdGl2ZSAmJiByaWdodC5pc05lZ2F0aXZlOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICckbGVmdCAtICRyaWdodCc7Cn0KCmNsYXNzIE5lZ2F0ZVZhbHVlIGV4dGVuZHMgVmFsdWUgewogIGZpbmFsIFZhbHVlIHZhbHVlOwogIE5lZ2F0ZVZhbHVlKHRoaXMudmFsdWUsIGluZm8pIDogc3VwZXIoaW5mbyk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgTmVnYXRlVmFsdWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ05lZ2F0ZS5oYXNoQ29kZScpOwoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciArKG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGlmIChvdGhlciA9PSB2YWx1ZSkgcmV0dXJuIGluZm8uaW50WmVybzsKICAgIGlmIChvdGhlciBpcyBOZWdhdGVWYWx1ZSkgcmV0dXJuIHRoaXMgLSBvdGhlci52YWx1ZTsKICAgIGlmIChvdGhlciBpcyBJbnRWYWx1ZSkgewogICAgICBpZiAob3RoZXIuaXNOZWdhdGl2ZSkgewogICAgICAgIHJldHVybiBpbmZvLm5ld1N1YnRyYWN0VmFsdWUodGhpcywgLW90aGVyKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mby5uZXdTdWJ0cmFjdFZhbHVlKG90aGVyLCB2YWx1ZSk7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgSW5zdHJ1Y3Rpb25WYWx1ZSkgewogICAgICByZXR1cm4gaW5mby5uZXdTdWJ0cmFjdFZhbHVlKG90aGVyLCB2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gb3RoZXIgLSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICYoVmFsdWUgb3RoZXIpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGlmIChvdGhlciBpcyBJbnRWYWx1ZSkgewogICAgICBpZiAob3RoZXIuaXNOZWdhdGl2ZSkgewogICAgICAgIHJldHVybiBpbmZvLm5ld1N1YnRyYWN0VmFsdWUoLW90aGVyLCB2YWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZm8ubmV3U3VidHJhY3RWYWx1ZSh0aGlzLCBvdGhlcik7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgSW5zdHJ1Y3Rpb25WYWx1ZSkgewogICAgICByZXR1cm4gaW5mby5uZXdTdWJ0cmFjdFZhbHVlKHRoaXMsIG90aGVyKTsKICAgIH0KICAgIGlmIChvdGhlciBpcyBOZWdhdGVWYWx1ZSkgcmV0dXJuIHRoaXMgKyBvdGhlci52YWx1ZTsKICAgIHJldHVybiAtb3RoZXIgLSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oKSA9PiB2YWx1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiB2YWx1ZS5pc1Bvc2l0aXZlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gdmFsdWUuaXNOZWdhdGl2ZTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnLSR2YWx1ZSc7Cn0KCi8vLyBBIFtSYW5nZV0gcmVwcmVzZW50cyB0aGUgcG9zc2libGUgaW50ZWdlciB2YWx1ZXMgYW4gaW5zdHJ1Y3Rpb24KLy8vIGNhbiBoYXZlLCBmcm9tIGl0cyBbbG93ZXJdIGJvdW5kIHRvIGl0cyBbdXBwZXJdIGJvdW5kLCBib3RoCi8vLyBpbmNsdWRlZC4KY2xhc3MgUmFuZ2UgewogIGZpbmFsIFZhbHVlIGxvd2VyOwogIGZpbmFsIFZhbHVlIHVwcGVyOwogIGZpbmFsIFZhbHVlUmFuZ2VJbmZvIGluZm87CiAgUmFuZ2UodGhpcy5sb3dlciwgdGhpcy51cHBlciwgdGhpcy5pbmZvKSB7CiAgICBhc3NlcnQobG93ZXIgIT0gY29uc3QgVW5rbm93blZhbHVlKCkpOwogICAgYXNzZXJ0KHVwcGVyICE9IGNvbnN0IFVua25vd25WYWx1ZSgpKTsKICB9CgogIFJhbmdlLnVuYm91bmQoaW5mbykgOiB0aGlzKGNvbnN0IE1pbkludFZhbHVlKCksIGNvbnN0IE1heEludFZhbHVlKCksIGluZm8pOwoKICAvLy8gQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZXMgYXJlIHVua25vd24sIGFuZCBjcmVhdGVzIGEKICAvLy8gcmFuZ2UgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSB1bmtub3duIHZhbHVlcy4KICBSYW5nZS5ub3JtYWxpemUoVmFsdWUgbG93LCBWYWx1ZSB1cCwgaW5mbykKICAgICAgOiB0aGlzKGxvdyA9PSBjb25zdCBVbmtub3duVmFsdWUoKSA/IGNvbnN0IE1pbkludFZhbHVlKCkgOiBsb3csCiAgICAgICAgICAgIHVwID09IGNvbnN0IFVua25vd25WYWx1ZSgpID8gY29uc3QgTWF4SW50VmFsdWUoKSA6IHVwLCBpbmZvKTsKCiAgUmFuZ2UgdW5pb24oUmFuZ2Ugb3RoZXIpIHsKICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSgKICAgICAgICBsb3dlci5taW4ob3RoZXIubG93ZXIpLCB1cHBlci5tYXgob3RoZXIudXBwZXIpKTsKICB9CgogIFJhbmdlIGludGVyc2VjdGlvbihSYW5nZSBvdGhlcikgewogICAgVmFsdWUgbG93ID0gbG93ZXIubWF4KG90aGVyLmxvd2VyKTsKICAgIFZhbHVlIHVwID0gdXBwZXIubWluKG90aGVyLnVwcGVyKTsKICAgIC8vIElmIHdlIGNvdWxkIG5vdCBjb21wdXRlIG1heCBvciBtaW4sIHBpY2sgYSB2YWx1ZSBpbiB0aGUgdHdvCiAgICAvLyByYW5nZXMsIHdpdGggcHJpb3JpdHkgdG8gW0ludFZhbHVlXXMgYmVjYXVzZSB0aGV5IGFyZSBzaW1wbGVyLgogICAgaWYgKGxvdyA9PSBjb25zdCBVbmtub3duVmFsdWUoKSkgewogICAgICBpZiAobG93ZXIgaXMgSW50VmFsdWUpCiAgICAgICAgbG93ID0gbG93ZXI7CiAgICAgIGVsc2UgaWYgKG90aGVyLmxvd2VyIGlzIEludFZhbHVlKQogICAgICAgIGxvdyA9IG90aGVyLmxvd2VyOwogICAgICBlbHNlCiAgICAgICAgbG93ID0gbG93ZXI7CiAgICB9CiAgICBpZiAodXAgPT0gY29uc3QgVW5rbm93blZhbHVlKCkpIHsKICAgICAgaWYgKHVwcGVyIGlzIEludFZhbHVlKQogICAgICAgIHVwID0gdXBwZXI7CiAgICAgIGVsc2UgaWYgKG90aGVyLnVwcGVyIGlzIEludFZhbHVlKQogICAgICAgIHVwID0gb3RoZXIudXBwZXI7CiAgICAgIGVsc2UKICAgICAgICB1cCA9IHVwcGVyOwogICAgfQogICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGxvdywgdXApOwogIH0KCiAgUmFuZ2Ugb3BlcmF0b3IgKyhSYW5nZSBvdGhlcikgewogICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGxvd2VyICsgb3RoZXIubG93ZXIsIHVwcGVyICsgb3RoZXIudXBwZXIpOwogIH0KCiAgUmFuZ2Ugb3BlcmF0b3IgLShSYW5nZSBvdGhlcikgewogICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGxvd2VyIC0gb3RoZXIudXBwZXIsIHVwcGVyIC0gb3RoZXIubG93ZXIpOwogIH0KCiAgUmFuZ2Ugb3BlcmF0b3IgLSgpIHsKICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSgtdXBwZXIsIC1sb3dlcik7CiAgfQoKICBSYW5nZSBvcGVyYXRvciAmKFJhbmdlIG90aGVyKSB7CiAgICBpZiAoaXNTaW5nbGVWYWx1ZSAmJgogICAgICAgIG90aGVyLmlzU2luZ2xlVmFsdWUgJiYKICAgICAgICBsb3dlciBpcyBJbnRWYWx1ZSAmJgogICAgICAgIG90aGVyLmxvd2VyIGlzIEludFZhbHVlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShsb3dlciAmIG90aGVyLmxvd2VyLCB1cHBlciAmIG90aGVyLnVwcGVyKTsKICAgIH0KICAgIGlmIChpc1Bvc2l0aXZlICYmIG90aGVyLmlzUG9zaXRpdmUpIHsKICAgICAgVmFsdWUgdXAgPSB1cHBlci5taW4ob3RoZXIudXBwZXIpOwogICAgICBpZiAodXAgPT0gY29uc3QgVW5rbm93blZhbHVlKCkpIHsKICAgICAgICAvLyBJZiB3ZSBjb3VsZCBub3QgZmluZCBhIHRyaXZpYWwgYm91bmQsIGp1c3QgdHJ5IHRvIHVzZSB0aGUKICAgICAgICAvLyBvbmUgdGhhdCBpcyBhbiBpbnQuCiAgICAgICAgdXAgPSB1cHBlciBpcyBJbnRWYWx1ZSA/IHVwcGVyIDogb3RoZXIudXBwZXI7CiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGdldCB0aGUgc2FtZSB1cHBlciBib3VuZCwgd2hldGhlciBpdCdzIGEgJiBiCiAgICAgICAgLy8gb3IgYiAmIGEuCiAgICAgICAgaWYgKHVwIGlzISBJbnRWYWx1ZSAmJiB1cHBlciAhPSBvdGhlci51cHBlcikgdXAgPSBjb25zdCBNYXhJbnRWYWx1ZSgpOwogICAgICB9CiAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShpbmZvLmludFplcm8sIHVwKTsKICAgIH0gZWxzZSBpZiAoaXNQb3NpdGl2ZSkgewogICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoaW5mby5pbnRaZXJvLCB1cHBlcik7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzUG9zaXRpdmUpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGluZm8uaW50WmVybywgb3RoZXIudXBwZXIpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIFJhbmdlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3RoZXIubG93ZXIgPT0gbG93ZXIgJiYgb3RoZXIudXBwZXIgPT0gdXBwZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdSYW5nZS5oYXNoQ29kZScpOwoKICBib29sIG9wZXJhdG9yIDwoUmFuZ2Ugb3RoZXIpIHsKICAgIHJldHVybiB1cHBlciAhPSBvdGhlci5sb3dlciAmJiB1cHBlci5taW4ob3RoZXIubG93ZXIpID09IHVwcGVyOwogIH0KCiAgYm9vbCBvcGVyYXRvciA+KFJhbmdlIG90aGVyKSB7CiAgICByZXR1cm4gbG93ZXIgIT0gb3RoZXIudXBwZXIgJiYgbG93ZXIubWF4KG90aGVyLnVwcGVyKSA9PSBsb3dlcjsKICB9CgogIGJvb2wgb3BlcmF0b3IgPD0oUmFuZ2Ugb3RoZXIpIHsKICAgIHJldHVybiB1cHBlci5taW4ob3RoZXIubG93ZXIpID09IHVwcGVyOwogIH0KCiAgYm9vbCBvcGVyYXRvciA+PShSYW5nZSBvdGhlcikgewogICAgcmV0dXJuIGxvd2VyLm1heChvdGhlci51cHBlcikgPT0gbG93ZXI7CiAgfQoKICBib29sIGdldCBpc05lZ2F0aXZlID0+IHVwcGVyLmlzTmVnYXRpdmU7CiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiBsb3dlci5pc1Bvc2l0aXZlOwogIGJvb2wgZ2V0IGlzU2luZ2xlVmFsdWUgPT4gbG93ZXIgPT0gdXBwZXI7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdbJGxvd2VyLCAkdXBwZXJdJzsKfQoKLy8vIFZpc2l0cyB0aGUgZ3JhcGggaW4gZG9taW5hdG9yIG9yZGVyLCBhbmQgY29tcHV0ZXMgdmFsdWUgcmFuZ2VzIGZvcgovLy8gaW50ZWdlciBpbnN0cnVjdGlvbnMuIFdoaWxlIHZpc2l0aW5nIHRoZSBncmFwaCwgdGhpcyBwaGFzZSBhbHNvCi8vLyByZW1vdmVzIHVubmVjZXNzYXJ5IGJvdW5kcyBjaGVja3MsIGFuZCBjb21wYXJpc29ucyB0aGF0IGFyZSBwcm92ZW4KLy8vIHRvIGJlIHRydWUgb3IgZmFsc2UuCmNsYXNzIFNzYVZhbHVlUmFuZ2VBbmFseXplciBleHRlbmRzIEhCYXNlVmlzaXRvciBpbXBsZW1lbnRzIE9wdGltaXphdGlvblBoYXNlIHsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ1NTQSB2YWx1ZSByYW5nZSBidWlsZGVyJzsKCiAgLy8vIExpc3Qgb2YgW0hSYW5nZUNvbnZlcnNpb25dIGluc3RydWN0aW9ucyBjcmVhdGVkIGJ5IHRoZSBwaGFzZS4gV2UKICAvLy8gc2F2ZSB0aGVtIGhlcmUgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZW0gb25jZSB0aGUgcGhhc2UgaXMgZG9uZS4KICBmaW5hbCBMaXN0PEhSYW5nZUNvbnZlcnNpb24+IGNvbnZlcnNpb25zID0gPEhSYW5nZUNvbnZlcnNpb24+W107CgogIC8vLyBWYWx1ZSByYW5nZXMgZm9yIGludGVnZXIgaW5zdHJ1Y3Rpb25zLiBUaGlzIG1hcCBnZXRzIHBvcHVsYXRlZCBieQogIC8vLyB0aGUgZG9taW5hdG9yIHRyZWUgdmlzaXQuCiAgZmluYWwgTWFwPEhJbnN0cnVjdGlvbiwgUmFuZ2U+IHJhbmdlcyA9IG5ldyBNYXA8SEluc3RydWN0aW9uLCBSYW5nZT4oKTsKCiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIFZhbHVlUmFuZ2VJbmZvIGluZm87CiAgZmluYWwgU3NhT3B0aW1pemVyVGFzayBvcHRpbWl6ZXI7CgogIEhHcmFwaCBncmFwaDsKCiAgU3NhVmFsdWVSYW5nZUFuYWx5emVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgdGhpcy5vcHRpbWl6ZXIpCiAgICAgIDogaW5mbyA9IG5ldyBWYWx1ZVJhbmdlSW5mbygpLAogICAgICAgIHRoaXMuY2xvc2VkV29ybGQgPSBjbG9zZWRXb3JsZDsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgdGhpcy5ncmFwaCA9IGdyYXBoOwogICAgdmlzaXREb21pbmF0b3JUcmVlKGdyYXBoKTsKICAgIC8vIFdlIHJlbW92ZSB0aGUgcmFuZ2UgY29udmVyc2lvbnMgYWZ0ZXIgdmlzaXRpbmcgdGhlIGdyYXBoIHNvCiAgICAvLyB0aGF0IHRoZSBncmFwaCBkb2VzIG5vdCBnZXQgcG9sbHV0ZWQgd2l0aCB0aGVzZSBpbnN0cnVjdGlvbnMKICAgIC8vIG9ubHkgbmVjZXNzYXJ5IGZvciB0aGlzIHBoYXNlLgogICAgcmVtb3ZlUmFuZ2VDb252ZXJzaW9uKCk7CiAgICAvLyBUT0RPKGhlcmh1dCk6IEZpbmQgYSBjbGVhbmVyIHdheSB0byBwYXNzIGFyb3VuZCByYW5nZXMuCiAgICBvcHRpbWl6ZXIucmFuZ2VzID0gcmFuZ2VzOwogIH0KCiAgdm9pZCByZW1vdmVSYW5nZUNvbnZlcnNpb24oKSB7CiAgICBjb252ZXJzaW9ucy5mb3JFYWNoKChIUmFuZ2VDb252ZXJzaW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJld3JpdGUoaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uLmlucHV0c1swXSk7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICB2b2lkIHZpc2l0KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICBSYW5nZSByYW5nZSA9IGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaWYgKGluc3RydWN0aW9uCiAgICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGFzc2VydChyYW5nZSAhPSBudWxsKTsKICAgICAgICByYW5nZXNbaW5zdHJ1Y3Rpb25dID0gcmFuZ2U7CiAgICAgIH0KICAgIH0KCiAgICBibG9jay5mb3JFYWNoUGhpKHZpc2l0KTsKICAgIGJsb2NrLmZvckVhY2hJbnN0cnVjdGlvbih2aXNpdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uCiAgICAgICAgLmlzUG9zaXRpdmVJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKAogICAgICAgICAgaW5mby5pbnRaZXJvLCBpbmZvLm5ld1Bvc2l0aXZlVmFsdWUoaW5zdHJ1Y3Rpb24pKTsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgSW5zdHJ1Y3Rpb25WYWx1ZSB2YWx1ZSA9IGluZm8ubmV3SW5zdHJ1Y3Rpb25WYWx1ZShpbnN0cnVjdGlvbik7CiAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSh2YWx1ZSwgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdFBoaShIUGhpIHBoaSkgewogICAgaWYgKHBoaS5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKQogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIC8vIFNvbWUgcGhhc2VzIG1heSByZXBsYWNlIGluc3RydWN0aW9ucyB0aGF0IGNoYW5nZSB0aGUgaW5wdXRzIG9mCiAgICAvLyB0aGlzIHBoaS4gT25seSB0aGUgW1NzYVR5cGVzUHJvcGFnYXRpb25dIHBoYXNlIHdpbGwgdXBkYXRlIHRoZQogICAgLy8gcGhpIHR5cGUuIFBsYXkgaXQgc2FmZSBieSBhc3N1bWluZyB0aGUgW1NzYVR5cGVzUHJvcGFnYXRpb25dCiAgICAvLyBwaGFzZSBpcyBub3QgbmVjZXNzYXJpbHkgcnVuIGJlZm9yZSB0aGUgW1ZhbHVlUmFuZ2VBbmFseXplcl0uCiAgICBpZiAocGhpLmlucHV0cy5hbnkoKGkpID0+CiAgICAgICAgaS5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKSkgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICAgIGlmIChwaGkuYmxvY2suaXNMb29wSGVhZGVyKCkpIHsKICAgICAgUmFuZ2UgcmFuZ2UgPQogICAgICAgICAgbmV3IExvb3BVcGRhdGVSZWNvZ25pemVyKGNsb3NlZFdvcmxkLCByYW5nZXMsIGluZm8pLnJ1bihwaGkpOwogICAgICBpZiAocmFuZ2UgPT0gbnVsbCkgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICAgIHJldHVybiByYW5nZTsKICAgIH0KCiAgICBSYW5nZSByYW5nZSA9IHJhbmdlc1twaGkuaW5wdXRzWzBdXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICByYW5nZSA9IHJhbmdlLnVuaW9uKHJhbmdlc1twaGkuaW5wdXRzW2ldXSk7CiAgICB9CiAgICByZXR1cm4gcmFuZ2U7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdENvbnN0YW50KEhDb25zdGFudCBoQ29uc3RhbnQpIHsKICAgIGlmIChoQ29uc3RhbnQKICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBoQ29uc3RhbnQuY29uc3RhbnQ7CiAgICBOdW1Db25zdGFudFZhbHVlIGNvbnN0YW50TnVtOwogICAgaWYgKGNvbnN0YW50IGlzIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSkgewogICAgICBjb25zdGFudE51bSA9IGNvbnN0YW50LnJlZmVyZW5jZWQ7CiAgICB9IGVsc2UgewogICAgICBjb25zdGFudE51bSA9IGNvbnN0YW50OwogICAgfQogICAgaWYgKGNvbnN0YW50TnVtLmlzUG9zaXRpdmVJbmZpbml0eSB8fCBjb25zdGFudE51bS5pc05lZ2F0aXZlSW5maW5pdHkpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgICBpZiAoY29uc3RhbnROdW0uaXNNaW51c1plcm8pIHsKICAgICAgY29uc3RhbnROdW0gPSBuZXcgSW50Q29uc3RhbnRWYWx1ZShCaWdJbnQuemVybyk7CiAgICB9CgogICAgQmlnSW50IGludFZhbHVlID0gY29uc3RhbnROdW0gaXMgSW50Q29uc3RhbnRWYWx1ZQogICAgICAgID8gY29uc3RhbnROdW0uaW50VmFsdWUKICAgICAgICA6IG5ldyBCaWdJbnQuZnJvbShjb25zdGFudE51bS5kb3VibGVWYWx1ZS50b0ludCgpKTsKICAgIFZhbHVlIHZhbHVlID0gaW5mby5uZXdJbnRWYWx1ZShpbnRWYWx1ZSk7CiAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UodmFsdWUsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0RmllbGRHZXQoSEZpZWxkR2V0IGZpZWxkR2V0KSB7CiAgICByZXR1cm4gdmlzaXRJbnN0cnVjdGlvbihmaWVsZEdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdEdldExlbmd0aChIR2V0TGVuZ3RoIG5vZGUpIHsKICAgIFBvc2l0aXZlVmFsdWUgdmFsdWUgPSBpbmZvLm5ld1Bvc2l0aXZlVmFsdWUobm9kZSk7CiAgICAvLyBXZSBrbm93IHRoaXMgcmFuZ2UgaXMgYWJvdmUgemVyby4gVG8gc2ltcGxpZnkgdGhlIGFuYWx5c2lzLCB3ZQogICAgLy8gcHV0IHRoZSB6ZXJvIHZhbHVlIGFzIHRoZSBsb3dlciBib3VuZCBvZiB0aGlzIHJhbmdlLiBUaGlzCiAgICAvLyBhbGxvd3MgdG8gZWFzaWx5IHJlbW92ZSB0aGUgc2Vjb25kIGJvdW5kIGNoZWNrIGluIHRoZSBmb2xsb3dpbmcKICAgIC8vIGV4cHJlc3Npb246IGFbMV0gKyBhWzBdLgogICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGluZm8uaW50WmVybywgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRCb3VuZHNDaGVjayhIQm91bmRzQ2hlY2sgY2hlY2spIHsKICAgIC8vIFNhdmUgdGhlIG5leHQgaW5zdHJ1Y3Rpb24sIGluIGNhc2UgdGhlIGNoZWNrIGdldHMgcmVtb3ZlZC4KICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gY2hlY2submV4dDsKICAgIFJhbmdlIGluZGV4UmFuZ2UgPSByYW5nZXNbY2hlY2suaW5kZXhdOwogICAgUmFuZ2UgbGVuZ3RoUmFuZ2UgPSByYW5nZXNbY2hlY2subGVuZ3RoXTsKICAgIGlmIChpbmRleFJhbmdlID09IG51bGwpIHsKICAgICAgaW5kZXhSYW5nZSA9IGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICAgIGFzc2VydChjaGVjay5pbmRleAogICAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZSk7CiAgICB9CiAgICBpZiAobGVuZ3RoUmFuZ2UgPT0gbnVsbCkgewogICAgICAvLyBXZSBtaWdodCBoYXZlIGxvc3QgdGhlIGxlbmd0aCByYW5nZSBkdWUgdG8gYSB0eXBlIGNvbnZlcnNpb24gdGhhdAogICAgICAvLyBhc3NlcnRzIGEgbm9uLWludGVnZXIgdHlwZS4gSW4gc3VjaCBhIGNhc2UsIHRoZSBwcm9ncmFtIHdpbGwgbmV2ZXIKICAgICAgLy8gZ2V0IHRvIHRoaXMgcG9pbnQgYW55d2F5LCBzbyBubyBuZWVkIHRvIHRyeSBhbmQgcmVmaW5lIHJhbmdlcy4KICAgICAgcmV0dXJuIGluZGV4UmFuZ2U7CiAgICB9CiAgICBhc3NlcnQoY2hlY2subGVuZ3RoCiAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKTsKCiAgICAvLyBDaGVjayBpZiB0aGUgaW5kZXggaXMgc3RyaWN0bHkgYmVsb3cgdGhlIHVwcGVyIGJvdW5kIG9mIHRoZSBsZW5ndGgKICAgIC8vIHJhbmdlLgogICAgVmFsdWUgbWF4SW5kZXggPSBsZW5ndGhSYW5nZS51cHBlciAtIGluZm8uaW50T25lOwogICAgYm9vbCBiZWxvd0xlbmd0aCA9IG1heEluZGV4ICE9IGNvbnN0IE1heEludFZhbHVlKCkgJiYKICAgICAgICBpbmRleFJhbmdlLnVwcGVyLm1pbihtYXhJbmRleCkgPT0gaW5kZXhSYW5nZS51cHBlcjsKCiAgICAvLyBDaGVjayBpZiB0aGUgaW5kZXggaXMgc3RyaWN0bHkgYmVsb3cgdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBsZW5ndGgKICAgIC8vIHJhbmdlLgogICAgYmVsb3dMZW5ndGggPSBiZWxvd0xlbmd0aCB8fAogICAgICAgIChpbmRleFJhbmdlLnVwcGVyICE9IGxlbmd0aFJhbmdlLmxvd2VyICYmCiAgICAgICAgICAgIGluZGV4UmFuZ2UudXBwZXIubWluKGxlbmd0aFJhbmdlLmxvd2VyKSA9PSBpbmRleFJhbmdlLnVwcGVyKTsKICAgIGlmIChpbmRleFJhbmdlLmlzUG9zaXRpdmUgJiYgYmVsb3dMZW5ndGgpIHsKICAgICAgY2hlY2suYmxvY2sucmV3cml0ZShjaGVjaywgY2hlY2suaW5kZXgpOwogICAgICBjaGVjay5ibG9jay5yZW1vdmUoY2hlY2spOwogICAgfSBlbHNlIGlmIChpbmRleFJhbmdlLmlzTmVnYXRpdmUgfHwgbGVuZ3RoUmFuZ2UgPCBpbmRleFJhbmdlKSB7CiAgICAgIGNoZWNrLnN0YXRpY0NoZWNrcyA9IEhCb3VuZHNDaGVjay5BTFdBWVNfRkFMU0U7CiAgICAgIC8vIFRoZSBjaGVjayBpcyBhbHdheXMgZmFsc2UsIGFuZCB3aGF0ZXZlciBpbnN0cnVjdGlvbiBpdAogICAgICAvLyBkb21pbmF0ZXMgaXMgZGVhZCBjb2RlLgogICAgICByZXR1cm4gaW5kZXhSYW5nZTsKICAgIH0gZWxzZSBpZiAoaW5kZXhSYW5nZS5pc1Bvc2l0aXZlKSB7CiAgICAgIGNoZWNrLnN0YXRpY0NoZWNrcyA9IEhCb3VuZHNDaGVjay5BTFdBWVNfQUJPVkVfWkVSTzsKICAgIH0gZWxzZSBpZiAoYmVsb3dMZW5ndGgpIHsKICAgICAgY2hlY2suc3RhdGljQ2hlY2tzID0gSEJvdW5kc0NoZWNrLkFMV0FZU19CRUxPV19MRU5HVEg7CiAgICB9CgogICAgaWYgKGluZGV4UmFuZ2UuaXNQb3NpdGl2ZSkgewogICAgICAvLyBJZiB0aGUgdGVzdCBwYXNzZXMsIHdlIGtub3cgdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBsZW5ndGggaXMKICAgICAgLy8gZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgaW5kZXguCiAgICAgIFZhbHVlIGxvdyA9IGxlbmd0aFJhbmdlLmxvd2VyLm1heChpbmRleFJhbmdlLmxvd2VyKTsKICAgICAgaWYgKGxvdyAhPSBjb25zdCBVbmtub3duVmFsdWUoKSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGNyZWF0ZVJhbmdlQ29udmVyc2lvbihuZXh0LCBjaGVjay5sZW5ndGgpOwogICAgICAgIHJhbmdlc1tpbnN0cnVjdGlvbl0gPSBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShsb3csIGxlbmd0aFJhbmdlLnVwcGVyKTsKICAgICAgfQogICAgfQoKICAgIC8vIFVwZGF0ZSB0aGUgcmFuZ2Ugb2YgdGhlIGluZGV4IGlmIHVzaW5nIHRoZSBtYXhpbXVtIGluZGV4CiAgICAvLyBuYXJyb3dzIGl0LiBVc2UgdGhhdCBuZXcgcmFuZ2UgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24gYXMgd2VsbC4KICAgIFJhbmdlIG5ld0luZGV4UmFuZ2UgPSBpbmRleFJhbmdlCiAgICAgICAgLmludGVyc2VjdGlvbihpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShpbmZvLmludFplcm8sIG1heEluZGV4KSk7CiAgICBpZiAoaW5kZXhSYW5nZSA9PSBuZXdJbmRleFJhbmdlKSByZXR1cm4gaW5kZXhSYW5nZTsKICAgIC8vIEV4cGxpY2l0bHkgYXR0YWNoIHRoZSByYW5nZSBpbmZvcm1hdGlvbiB0byB0aGUgaW5kZXggaW5zdHJ1Y3Rpb24sCiAgICAvLyB3aGljaCBtYXkgYmUgdXNlZCBieSBvdGhlciBpbnN0cnVjdGlvbnMuICBSZXR1cm5pbmcgdGhlIG5ldyByYW5nZSB3aWxsCiAgICAvLyBhdHRhY2ggaXQgdG8gdGhpcyBpbnN0cnVjdGlvbi4KICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGNyZWF0ZVJhbmdlQ29udmVyc2lvbihuZXh0LCBjaGVjay5pbmRleCk7CiAgICByYW5nZXNbaW5zdHJ1Y3Rpb25dID0gbmV3SW5kZXhSYW5nZTsKICAgIHJldHVybiBuZXdJbmRleFJhbmdlOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRSZWxhdGlvbmFsKEhSZWxhdGlvbmFsIHJlbGF0aW9uYWwpIHsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IHJlbGF0aW9uYWwucmlnaHQ7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IHJlbGF0aW9uYWwubGVmdDsKICAgIGlmIChsZWZ0LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgICBpZiAocmlnaHQuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICAgIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uID0gcmVsYXRpb25hbC5vcGVyYXRpb24oKTsKICAgIFJhbmdlIHJpZ2h0UmFuZ2UgPSByYW5nZXNbcmVsYXRpb25hbC5yaWdodF07CiAgICBSYW5nZSBsZWZ0UmFuZ2UgPSByYW5nZXNbcmVsYXRpb25hbC5sZWZ0XTsKCiAgICBpZiAocmVsYXRpb25hbCBpcyBISWRlbnRpdHkpIHsKICAgICAgaGFuZGxlRXF1YWxpdHlDaGVjayhyZWxhdGlvbmFsKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uLmFwcGx5KGxlZnRSYW5nZSwgcmlnaHRSYW5nZSkpIHsKICAgICAgcmVsYXRpb25hbC5ibG9jawogICAgICAgICAgLnJld3JpdGUocmVsYXRpb25hbCwgZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIGNsb3NlZFdvcmxkKSk7CiAgICAgIHJlbGF0aW9uYWwuYmxvY2sucmVtb3ZlKHJlbGF0aW9uYWwpOwogICAgfSBlbHNlIGlmIChuZWdhdGVPcGVyYXRpb24ob3BlcmF0aW9uKS5hcHBseShsZWZ0UmFuZ2UsIHJpZ2h0UmFuZ2UpKSB7CiAgICAgIHJlbGF0aW9uYWwuYmxvY2sKICAgICAgICAgIC5yZXdyaXRlKHJlbGF0aW9uYWwsIGdyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgY2xvc2VkV29ybGQpKTsKICAgICAgcmVsYXRpb25hbC5ibG9jay5yZW1vdmUocmVsYXRpb25hbCk7CiAgICB9CiAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICB9CgogIHZvaWQgaGFuZGxlRXF1YWxpdHlDaGVjayhIUmVsYXRpb25hbCBub2RlKSB7CiAgICBSYW5nZSByaWdodCA9IHJhbmdlc1tub2RlLnJpZ2h0XTsKICAgIFJhbmdlIGxlZnQgPSByYW5nZXNbbm9kZS5sZWZ0XTsKICAgIGlmIChsZWZ0LmlzU2luZ2xlVmFsdWUgJiYgcmlnaHQuaXNTaW5nbGVWYWx1ZSAmJiBsZWZ0ID09IHJpZ2h0KSB7CiAgICAgIG5vZGUuYmxvY2sucmV3cml0ZShub2RlLCBncmFwaC5hZGRDb25zdGFudEJvb2wodHJ1ZSwgY2xvc2VkV29ybGQpKTsKICAgICAgbm9kZS5ibG9jay5yZW1vdmUobm9kZSk7CiAgICB9CiAgfQoKICBSYW5nZSBoYW5kbGVJbnZva2VNb2R1bG8oSEludm9rZUR5bmFtaWNNZXRob2QgaW52b2tlKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGludm9rZS5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnZva2UuaW5wdXRzWzJdOwogICAgUmFuZ2UgZGl2aXNvciA9IHJhbmdlc1tyaWdodF07CiAgICBpZiAoZGl2aXNvciAhPSBudWxsKSB7CiAgICAgIC8vIEZvciBJbnRlZ2VyIHZhbHVlcyB3ZSBjYW4gYmUgcHJlY2lzZSBpbiB0aGUgdXBwZXIgYm91bmQsIHNvIHNwZWNpYWwKICAgICAgLy8gY2FzZSB0aG9zZS4KICAgICAgaWYgKGxlZnQuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgIHJpZ2h0LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgaWYgKGRpdmlzb3IuaXNQb3NpdGl2ZSkgewogICAgICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKAogICAgICAgICAgICAgIGluZm8uaW50WmVybywgZGl2aXNvci51cHBlciAtIGluZm8uaW50T25lKTsKICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSkgewogICAgICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKAogICAgICAgICAgICAgIGluZm8uaW50WmVybywgaW5mby5uZXdOZWdhdGVWYWx1ZShkaXZpc29yLmxvd2VyKSAtIGluZm8uaW50T25lKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobGVmdAogICAgICAgICAgICAgIC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICByaWdodC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgaWYgKGRpdmlzb3IuaXNQb3NpdGl2ZSkgewogICAgICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGluZm8uaW50WmVybywgZGl2aXNvci51cHBlcik7CiAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUpIHsKICAgICAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSgKICAgICAgICAgICAgICBpbmZvLmludFplcm8sIGluZm8ubmV3TmVnYXRlVmFsdWUoZGl2aXNvci5sb3dlcikpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdFJlbWFpbmRlcihIUmVtYWluZGVyIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1swXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIFJhbmdlIGRpdmlkZW5kID0gcmFuZ2VzW2xlZnRdOwogICAgLy8gSWYgYm90aCBvcGVyYW5kcyBhcmUgPj0wLCB0aGUgcmVzdWx0IGlzID49IDAgYW5kIGJvdW5kZWQgYnkgdGhlIGRpdmlzb3IuCiAgICBpZiAoKGRpdmlkZW5kICE9IG51bGwgJiYgZGl2aWRlbmQuaXNQb3NpdGl2ZSkgfHwKICAgICAgICBsZWZ0CiAgICAgICAgICAgIC5pc1Bvc2l0aXZlSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBSYW5nZSBkaXZpc29yID0gcmFuZ2VzW3JpZ2h0XTsKICAgICAgaWYgKGRpdmlzb3IgIT0gbnVsbCkgewogICAgICAgIGlmIChkaXZpc29yLmlzUG9zaXRpdmUpIHsKICAgICAgICAgIC8vIEZvciBJbnRlZ2VyIHZhbHVlcyB3ZSBjYW4gYmUgcHJlY2lzZSBpbiB0aGUgdXBwZXIgYm91bmQuCiAgICAgICAgICBpZiAobGVmdAogICAgICAgICAgICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICAgICAgcmlnaHQKICAgICAgICAgICAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoCiAgICAgICAgICAgICAgICBpbmZvLmludFplcm8sIGRpdmlzb3IudXBwZXIgLSBpbmZvLmludE9uZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobGVmdC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICAgICAgcmlnaHQKICAgICAgICAgICAgICAgICAgLmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShpbmZvLmludFplcm8sIGRpdmlzb3IudXBwZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdEludm9rZUR5bmFtaWNNZXRob2QoSEludm9rZUR5bmFtaWNNZXRob2QgaW52b2tlKSB7CiAgICBpZiAoKGludm9rZS5pbnB1dHMubGVuZ3RoID09IDMpICYmIChpbnZva2Uuc2VsZWN0b3IubmFtZSA9PSAiJSIpKQogICAgICByZXR1cm4gaGFuZGxlSW52b2tlTW9kdWxvKGludm9rZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRJbnZva2VEeW5hbWljTWV0aG9kKGludm9rZSk7CiAgfQoKICBSYW5nZSBoYW5kbGVCaW5hcnlPcGVyYXRpb24oSEJpbmFyeUFyaXRobWV0aWMgaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbgogICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogICAgcmV0dXJuIGluc3RydWN0aW9uCiAgICAgICAgLm9wZXJhdGlvbigpCiAgICAgICAgLmFwcGx5KHJhbmdlc1tpbnN0cnVjdGlvbi5sZWZ0XSwgcmFuZ2VzW2luc3RydWN0aW9uLnJpZ2h0XSk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdEFkZChIQWRkIGFkZCkgewogICAgcmV0dXJuIGhhbmRsZUJpbmFyeU9wZXJhdGlvbihhZGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRTdWJ0cmFjdChIU3VidHJhY3Qgc3ViKSB7CiAgICByZXR1cm4gaGFuZGxlQmluYXJ5T3BlcmF0aW9uKHN1Yik7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdEJpdEFuZChIQml0QW5kIG5vZGUpIHsKICAgIGlmIChub2RlLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBub2RlLnJpZ2h0OwogICAgSEluc3RydWN0aW9uIGxlZnQgPSBub2RlLmxlZnQ7CiAgICBpZiAobGVmdC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiByYW5nZXNbbGVmdF0gJiByYW5nZXNbcmlnaHRdOwogICAgfQoKICAgIFJhbmdlIHRyeUNvbXB1dGVSYW5nZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgUmFuZ2UgcmFuZ2UgPSByYW5nZXNbaW5zdHJ1Y3Rpb25dOwogICAgICBpZiAocmFuZ2UuaXNQb3NpdGl2ZSkgewogICAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShpbmZvLmludFplcm8sIHJhbmdlLnVwcGVyKTsKICAgICAgfSBlbHNlIGlmIChyYW5nZS5pc05lZ2F0aXZlKSB7CiAgICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKHJhbmdlLmxvd2VyLCBpbmZvLmludFplcm8pOwogICAgICB9CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQoKICAgIGlmIChsZWZ0LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiB0cnlDb21wdXRlUmFuZ2UobGVmdCk7CiAgICB9IGVsc2UgaWYgKHJpZ2h0CiAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiB0cnlDb21wdXRlUmFuZ2UocmlnaHQpOwogICAgfQogICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdENoZWNrKEhDaGVjayBpbnN0cnVjdGlvbikgewogICAgaWYgKHJhbmdlc1tpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXRdID09IG51bGwpIHsKICAgICAgcmV0dXJuIHZpc2l0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgcmV0dXJuIHJhbmdlc1tpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXRdOwogIH0KCiAgSEluc3RydWN0aW9uIGNyZWF0ZVJhbmdlQ29udmVyc2lvbigKICAgICAgSEluc3RydWN0aW9uIGN1cnNvciwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBIUmFuZ2VDb252ZXJzaW9uIG5ld0luc3RydWN0aW9uID0gbmV3IEhSYW5nZUNvbnZlcnNpb24oCiAgICAgICAgaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZSk7CiAgICBjb252ZXJzaW9ucy5hZGQobmV3SW5zdHJ1Y3Rpb24pOwogICAgY3Vyc29yLmJsb2NrLmFkZEJlZm9yZShjdXJzb3IsIG5ld0luc3RydWN0aW9uKTsKICAgIC8vIFVwZGF0ZSB0aGUgdXNlcnMgb2YgdGhlIGluc3RydWN0aW9uIGRvbWluYXRlZCBieSBbY3Vyc29yXSB0bwogICAgLy8gdXNlIHRoZSBuZXcgaW5zdHJ1Y3Rpb24sIHRoYXQgaGFzIGFuIG5hcnJvd2VyIHJhbmdlLgogICAgaW5zdHJ1Y3Rpb24ucmVwbGFjZUFsbFVzZXJzRG9taW5hdGVkQnkoY3Vyc29yLCBuZXdJbnN0cnVjdGlvbik7CiAgICByZXR1cm4gbmV3SW5zdHJ1Y3Rpb247CiAgfQoKICBzdGF0aWMgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBuZWdhdGVPcGVyYXRpb24oCiAgICAgIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKSB7CiAgICBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzT3BlcmF0aW9uKCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyRXF1YWxPcGVyYXRpb24oKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzRXF1YWxPcGVyYXRpb24oKSkgewogICAgICByZXR1cm4gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJPcGVyYXRpb24oKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyT3BlcmF0aW9uKCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzRXF1YWxPcGVyYXRpb24oKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyRXF1YWxPcGVyYXRpb24oKSkgewogICAgICByZXR1cm4gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NPcGVyYXRpb24oKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgc3RhdGljIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gZmxpcE9wZXJhdGlvbigKICAgICAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24pIHsKICAgIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NPcGVyYXRpb24oKSkgewogICAgICByZXR1cm4gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJPcGVyYXRpb24oKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzRXF1YWxPcGVyYXRpb24oKSkgewogICAgICByZXR1cm4gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJFcXVhbE9wZXJhdGlvbigpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJPcGVyYXRpb24oKSkgewogICAgICByZXR1cm4gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NPcGVyYXRpb24oKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyRXF1YWxPcGVyYXRpb24oKSkgewogICAgICByZXR1cm4gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NFcXVhbE9wZXJhdGlvbigpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBSYW5nZSBjb21wdXRlQ29uc3RyYWluZWRSYW5nZShjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbiwKICAgICAgUmFuZ2UgbGVmdFJhbmdlLCBSYW5nZSByaWdodFJhbmdlKSB7CiAgICBSYW5nZSByYW5nZTsKICAgIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NPcGVyYXRpb24oKSkgewogICAgICByYW5nZSA9IGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKAogICAgICAgICAgY29uc3QgTWluSW50VmFsdWUoKSwgcmlnaHRSYW5nZS51cHBlciAtIGluZm8uaW50T25lKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzRXF1YWxPcGVyYXRpb24oKSkgewogICAgICByYW5nZSA9IGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGNvbnN0IE1pbkludFZhbHVlKCksIHJpZ2h0UmFuZ2UudXBwZXIpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJPcGVyYXRpb24oKSkgewogICAgICByYW5nZSA9IGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKAogICAgICAgICAgcmlnaHRSYW5nZS5sb3dlciArIGluZm8uaW50T25lLCBjb25zdCBNYXhJbnRWYWx1ZSgpKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyRXF1YWxPcGVyYXRpb24oKSkgewogICAgICByYW5nZSA9IGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKHJpZ2h0UmFuZ2UubG93ZXIsIGNvbnN0IE1heEludFZhbHVlKCkpOwogICAgfSBlbHNlIHsKICAgICAgcmFuZ2UgPSBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogICAgcmV0dXJuIHJhbmdlLmludGVyc2VjdGlvbihsZWZ0UmFuZ2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRDb25kaXRpb25hbEJyYW5jaChIQ29uZGl0aW9uYWxCcmFuY2ggYnJhbmNoKSB7CiAgICBkeW5hbWljIGNvbmRpdGlvbiA9IGJyYW5jaC5jb25kaXRpb247CiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IEhhbmRsZSBjb21wbGV4IGNvbmRpdGlvbnMuCiAgICBpZiAoY29uZGl0aW9uIGlzISBIUmVsYXRpb25hbCkgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICBpZiAoY29uZGl0aW9uIGlzIEhJZGVudGl0eSkgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBjb25kaXRpb24ucmlnaHQ7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGNvbmRpdGlvbi5sZWZ0OwogICAgaWYgKGxlZnQuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICAgIGlmIChyaWdodC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQoKICAgIFJhbmdlIHJpZ2h0UmFuZ2UgPSByYW5nZXNbcmlnaHRdOwogICAgUmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VzW2xlZnRdOwogICAgY29uc3RhbnRfc3lzdGVtLk9wZXJhdGlvbiBvcGVyYXRpb24gPSBjb25kaXRpb24ub3BlcmF0aW9uKCk7CiAgICBjb25zdGFudF9zeXN0ZW0uT3BlcmF0aW9uIG1pcnJvck9wID0gZmxpcE9wZXJhdGlvbihvcGVyYXRpb24pOwogICAgLy8gT25seSB1cGRhdGUgdGhlIHRydWUgYnJhbmNoIGlmIHRoaXMgYmxvY2sgaXMgdGhlIG9ubHkKICAgIC8vIHByZWRlY2Vzc29yLgogICAgaWYgKGJyYW5jaC50cnVlQnJhbmNoLnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMSkgewogICAgICBhc3NlcnQoYnJhbmNoLnRydWVCcmFuY2gucHJlZGVjZXNzb3JzWzBdID09IGJyYW5jaC5ibG9jayk7CiAgICAgIC8vIFVwZGF0ZSB0aGUgdHJ1ZSBicmFuY2ggdG8gdXNlIG5hcnJvd2VyIHJhbmdlcyBmb3IgW2xlZnRdIGFuZAogICAgICAvLyBbcmlnaHRdLgogICAgICBSYW5nZSByYW5nZSA9IGNvbXB1dGVDb25zdHJhaW5lZFJhbmdlKG9wZXJhdGlvbiwgbGVmdFJhbmdlLCByaWdodFJhbmdlKTsKICAgICAgaWYgKGxlZnRSYW5nZSAhPSByYW5nZSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9CiAgICAgICAgICAgIGNyZWF0ZVJhbmdlQ29udmVyc2lvbihicmFuY2gudHJ1ZUJyYW5jaC5maXJzdCwgbGVmdCk7CiAgICAgICAgcmFuZ2VzW2luc3RydWN0aW9uXSA9IHJhbmdlOwogICAgICB9CgogICAgICByYW5nZSA9IGNvbXB1dGVDb25zdHJhaW5lZFJhbmdlKG1pcnJvck9wLCByaWdodFJhbmdlLCBsZWZ0UmFuZ2UpOwogICAgICBpZiAocmlnaHRSYW5nZSAhPSByYW5nZSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9CiAgICAgICAgICAgIGNyZWF0ZVJhbmdlQ29udmVyc2lvbihicmFuY2gudHJ1ZUJyYW5jaC5maXJzdCwgcmlnaHQpOwogICAgICAgIHJhbmdlc1tpbnN0cnVjdGlvbl0gPSByYW5nZTsKICAgICAgfQogICAgfQoKICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBmYWxzZSBicmFuY2ggaWYgdGhpcyBibG9jayBpcyB0aGUgb25seQogICAgLy8gcHJlZGVjZXNzb3IuCiAgICBpZiAoYnJhbmNoLmZhbHNlQnJhbmNoLnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMSkgewogICAgICBhc3NlcnQoYnJhbmNoLmZhbHNlQnJhbmNoLnByZWRlY2Vzc29yc1swXSA9PSBicmFuY2guYmxvY2spOwogICAgICBjb25zdGFudF9zeXN0ZW0uT3BlcmF0aW9uIHJldmVyc2UgPSBuZWdhdGVPcGVyYXRpb24ob3BlcmF0aW9uKTsKICAgICAgY29uc3RhbnRfc3lzdGVtLk9wZXJhdGlvbiByZXZlcnNlZE1pcnJvciA9IGZsaXBPcGVyYXRpb24ocmV2ZXJzZSk7CiAgICAgIC8vIFVwZGF0ZSB0aGUgZmFsc2UgYnJhbmNoIHRvIHVzZSBuYXJyb3dlciByYW5nZXMgZm9yIFtsZWZ0XSBhbmQKICAgICAgLy8gW3JpZ2h0XS4KICAgICAgUmFuZ2UgcmFuZ2UgPSBjb21wdXRlQ29uc3RyYWluZWRSYW5nZShyZXZlcnNlLCBsZWZ0UmFuZ2UsIHJpZ2h0UmFuZ2UpOwogICAgICBpZiAobGVmdFJhbmdlICE9IHJhbmdlKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0KICAgICAgICAgICAgY3JlYXRlUmFuZ2VDb252ZXJzaW9uKGJyYW5jaC5mYWxzZUJyYW5jaC5maXJzdCwgbGVmdCk7CiAgICAgICAgcmFuZ2VzW2luc3RydWN0aW9uXSA9IHJhbmdlOwogICAgICB9CgogICAgICByYW5nZSA9IGNvbXB1dGVDb25zdHJhaW5lZFJhbmdlKHJldmVyc2VkTWlycm9yLCByaWdodFJhbmdlLCBsZWZ0UmFuZ2UpOwogICAgICBpZiAocmlnaHRSYW5nZSAhPSByYW5nZSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9CiAgICAgICAgICAgIGNyZWF0ZVJhbmdlQ29udmVyc2lvbihicmFuY2guZmFsc2VCcmFuY2guZmlyc3QsIHJpZ2h0KTsKICAgICAgICByYW5nZXNbaW5zdHJ1Y3Rpb25dID0gcmFuZ2U7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0UmFuZ2VDb252ZXJzaW9uKEhSYW5nZUNvbnZlcnNpb24gY29udmVyc2lvbikgewogICAgcmV0dXJuIHJhbmdlc1tjb252ZXJzaW9uXTsKICB9Cn0KCi8vLyBUcmllcyB0byBmaW5kIGEgcmFuZ2UgZm9yIHRoZSB1cGRhdGUgaW5zdHJ1Y3Rpb24gb2YgYSBsb29wIHBoaS4KY2xhc3MgTG9vcFVwZGF0ZVJlY29nbml6ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBNYXA8SEluc3RydWN0aW9uLCBSYW5nZT4gcmFuZ2VzOwogIGZpbmFsIFZhbHVlUmFuZ2VJbmZvIGluZm87CiAgTG9vcFVwZGF0ZVJlY29nbml6ZXIodGhpcy5jbG9zZWRXb3JsZCwgdGhpcy5yYW5nZXMsIHRoaXMuaW5mbyk7CgogIFJhbmdlIHJ1bihIUGhpIGxvb3BQaGkpIHsKICAgIC8vIENyZWF0ZSBhIG1hcmtlciByYW5nZSBmb3IgdGhlIGxvb3AgcGhpLCBzbyB0aGF0IGlmIHRoZSB1cGRhdGUKICAgIC8vIHVzZXMgdGhlIGxvb3AgcGhpLCBpdCBoYXMgYSByYW5nZSB0byB1c2UuCiAgICByYW5nZXNbbG9vcFBoaV0gPSBpbmZvLm5ld01hcmtlclJhbmdlKCk7CiAgICBSYW5nZSB1cGRhdGVSYW5nZSA9IHZpc2l0KGxvb3BQaGkuaW5wdXRzWzFdKTsKICAgIHJhbmdlc1tsb29wUGhpXSA9IG51bGw7CiAgICBpZiAodXBkYXRlUmFuZ2UgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBSYW5nZSBzdGFydFJhbmdlID0gcmFuZ2VzW2xvb3BQaGkuaW5wdXRzWzBdXTsKICAgIC8vIElmIHRoZSBsb3dlciAocmVzcGVjdGl2ZWx5IHVwcGVyKSB2YWx1ZSBpcyB0aGUgbWFya2VyLCB3ZSBrbm93CiAgICAvLyB0aGUgbG9vcCBkb2VzIG5vdCBjaGFuZ2UgaXQsIHNvIHdlIGNhbiBqdXN0IHVzZSB0aGUKICAgIC8vIFtzdGFydFJhbmdlXSdzIGxvd2VyICh1cHBlcikgdmFsdWUuIE90aGVyd2lzZSB0aGUgbG93ZXIgKHVwcGVyKSB2YWx1ZQogICAgLy8gaXMgdGhlIG1pbmltdW0gb2YgdGhlIFtzdGFydFJhbmdlXSdzIGxvd2VyICh1cHBlcikgYW5kIHRoZQogICAgLy8gW3VwZGF0ZVJhbmdlXSdzIGxvd2VyICh1cHBlcikuCiAgICBWYWx1ZSBsb3cgPSB1cGRhdGVSYW5nZS5sb3dlciBpcyBNYXJrZXJWYWx1ZQogICAgICAgID8gc3RhcnRSYW5nZS5sb3dlcgogICAgICAgIDogdXBkYXRlUmFuZ2UubG93ZXIubWluKHN0YXJ0UmFuZ2UubG93ZXIpOwogICAgVmFsdWUgdXAgPSB1cGRhdGVSYW5nZS51cHBlciBpcyBNYXJrZXJWYWx1ZQogICAgICAgID8gc3RhcnRSYW5nZS51cHBlcgogICAgICAgIDogdXBkYXRlUmFuZ2UudXBwZXIubWF4KHN0YXJ0UmFuZ2UudXBwZXIpOwogICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGxvdywgdXApOwogIH0KCiAgUmFuZ2UgdmlzaXQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChyYW5nZXNbaW5zdHJ1Y3Rpb25dICE9IG51bGwpIHJldHVybiByYW5nZXNbaW5zdHJ1Y3Rpb25dOwogICAgcmV0dXJuIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0UGhpKEhQaGkgcGhpKSB7CiAgICAvLyBJZiB0aGUgdXBkYXRlIG9mIGEgbG9vcCBwaGkgaW52b2x2ZXMgYW5vdGhlciBsb29wIHBoaSwgd2UgZ2l2ZQogICAgLy8gdXAuCiAgICBpZiAocGhpLmJsb2NrLmlzTG9vcEhlYWRlcigpKSByZXR1cm4gbnVsbDsKICAgIFJhbmdlIHBoaVJhbmdlOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5wdXQgaW4gcGhpLmlucHV0cykgewogICAgICBSYW5nZSBpbnB1dFJhbmdlID0gdmlzaXQoaW5wdXQpOwogICAgICBpZiAoaW5wdXRSYW5nZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgaWYgKHBoaVJhbmdlID09IG51bGwpIHsKICAgICAgICBwaGlSYW5nZSA9IGlucHV0UmFuZ2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGhpUmFuZ2UgPSBwaGlSYW5nZS51bmlvbihpbnB1dFJhbmdlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHBoaVJhbmdlOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRDaGVjayhIQ2hlY2sgaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiB2aXNpdChpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRBZGQoSEFkZCBvcGVyYXRpb24pIHsKICAgIHJldHVybiBoYW5kbGVCaW5hcnlPcGVyYXRpb24ob3BlcmF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0U3VidHJhY3QoSFN1YnRyYWN0IG9wZXJhdGlvbikgewogICAgcmV0dXJuIGhhbmRsZUJpbmFyeU9wZXJhdGlvbihvcGVyYXRpb24pOwogIH0KCiAgUmFuZ2UgaGFuZGxlQmluYXJ5T3BlcmF0aW9uKEhCaW5hcnlBcml0aG1ldGljIGluc3RydWN0aW9uKSB7CiAgICBSYW5nZSBsZWZ0UmFuZ2UgPSB2aXNpdChpbnN0cnVjdGlvbi5sZWZ0KTsKICAgIFJhbmdlIHJpZ2h0UmFuZ2UgPSB2aXNpdChpbnN0cnVjdGlvbi5yaWdodCk7CiAgICBpZiAobGVmdFJhbmdlID09IG51bGwgfHwgcmlnaHRSYW5nZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3Bl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Y29sbGlzaW9uczsKICBWYWx1ZVNldCgpIDogdGFibGUgPSBuZXcgTGlzdDxISW5zdHJ1Y3Rpb24+KDgpOwoKICBib29sIGdldCBpc0VtcHR5ID0+IHNpemUgPT0gMDsKICBpbnQgZ2V0IGxlbmd0aCA9PiBzaXplOwoKICB2b2lkIGFkZChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChsb29rdXAoaW5zdHJ1Y3Rpb24pID09IG51bGwpOwogICAgaW50IGhhc2hDb2RlID0gaW5zdHJ1Y3Rpb24uZ3ZuSGFzaENvZGUoKTsKICAgIGludCBjYXBhY2l0eSA9IHRhYmxlLmxlbmd0aDsKICAgIC8vIFJlc2l6ZSB3aGVuIGhhbGYgb2YgdGhlIGhhc2ggdGFibGUgaXMgaW4gdXNlLgogICAgaWYgKHNpemUgPj0gY2FwYWNpdHkgPj4gMSkgewogICAgICBjYXBhY2l0eSA9IGNhcGFjaXR5IDw8IDE7CiAgICAgIHJlc2l6ZShjYXBhY2l0eSk7CiAgICB9CiAgICAvLyBUcnkgdG8gaW5zZXJ0IGluIHRoZSBoYXNoIHRhYmxlIGZpcnN0LgogICAgaW50IGluZGV4ID0gaGFzaENvZGUgJSBjYXBhY2l0eTsKICAgIGlmICh0YWJsZVtpbmRleF0gPT0gbnVsbCkgewogICAgICB0YWJsZVtpbmRleF0gPSBpbnN0cnVjdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbGxpc2lvbnMgPSBuZXcgVmFsdWVTZXROb2RlKGluc3RydWN0aW9uLCBoYXNoQ29kZSwgY29sbGlzaW9ucyk7CiAgICB9CiAgICBzaXplKys7CiAgfQoKICBISW5zdHJ1Y3Rpb24gbG9va3VwKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaW50IGhhc2hDb2RlID0gaW5zdHJ1Y3Rpb24uZ3ZuSGFzaENvZGUoKTsKICAgIGludCBpbmRleCA9IGhhc2hDb2RlICUgdGFibGUubGVuZ3RoOwogICAgLy8gTG9vayBpbiB0aGUgaGFzaCB0YWJsZS4KICAgIEhJbnN0cnVjdGlvbiBwcm9iZSA9IHRhYmxlW2luZGV4XTsKICAgIGlmIChwcm9iZSAhPSBudWxsICYmIHByb2JlLmd2bkVxdWFscyhpbnN0cnVjdGlvbikpIHJldHVybiBwcm9iZTsKICAgIC8vIExvb2sgaW4gdGhlIGNvbGxpc2lvbnMgbGlzdC4KICAgIGZvciAoVmFsdWVTZXROb2RlIG5vZGUgPSBjb2xsaXNpb25zOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLm5leHQpIHsKICAgICAgaWYgKG5vZGUuaGFzaENvZGUgPT0gaGFzaENvZGUpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gY2FjaGVkID0gbm9kZS52YWx1ZTsKICAgICAgICBpZiAoY2FjaGVkLmd2bkVxdWFscyhpbnN0cnVjdGlvbikpIHJldHVybiBjYWNoZWQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBraWxsKGludCBmbGFncykgewogICAgaWYgKGZsYWdzID09IDApIHJldHVybjsKICAgIGludCBkZXBlbmRzID0gU2lkZUVmZmVjdHMuY29tcHV0ZURlcGVuZHNPbkZsYWdzKGZsYWdzKTsKICAgIC8vIEtpbGwgaW4gdGhlIGhhc2ggdGFibGUuCiAgICBmb3IgKGludCBpbmRleCA9IDAsIGxlbmd0aCA9IHRhYmxlLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gdGFibGVbaW5kZXhdOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCAmJiBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5kZXBlbmRzT24oZGVwZW5kcykpIHsKICAgICAgICB0YWJsZVtpbmRleF0gPSBudWxsOwogICAgICAgIHNpemUtLTsKICAgICAgfQogICAgfQogICAgLy8gS2lsbCBpbiB0aGUgY29sbGlzaW9ucyBsaXN0LgogICAgVmFsdWVTZXROb2RlIHByZXZpb3VzID0gbnVsbDsKICAgIFZhbHVlU2V0Tm9kZSBjdXJyZW50ID0gY29sbGlzaW9uczsKICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgVmFsdWVTZXROb2RlIG5leHQgPSBjdXJyZW50Lm5leHQ7CiAgICAgIEhJbnN0cnVjdGlvbiBjYWNoZWQgPSBjdXJyZW50LnZhbHVlOwogICAgICBpZiAoY2FjaGVkLnNpZGVFZmZlY3RzLmRlcGVuZHNPbihkZXBlbmRzKSkgewogICAgICAgIGlmIChwcmV2aW91cyA9PSBudWxsKSB7CiAgICAgICAgICBjb2xsaXNpb25zID0gbmV4dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJldmlvdXMubmV4dCA9IG5leHQ7CiAgICAgICAgfQogICAgICAgIHNpemUtLTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CiAgICAgIH0KICAgICAgY3VycmVudCA9IG5leHQ7CiAgICB9CiAgfQoKICBWYWx1ZVNldCBjb3B5KCkgewogICAgcmV0dXJuIGNvcHlUbyhuZXcgVmFsdWVTZXQoKSwgdGFibGUsIGNvbGxpc2lvbnMpOwogIH0KCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IHRvTGlzdCgpIHsKICAgIHJldHVybiBjb3B5VG8oPEhJbnN0cnVjdGlvbj5bXSwgdGFibGUsIGNvbGxpc2lvbnMpOwogIH0KCiAgLy8gQ29weSB0aGUgaW5zdHJ1Y3Rpb25zIGluIHZhbHVlIHNldCBkZWZpbmVkIGJ5IFt0YWJsZV0gYW5kCiAgLy8gW2NvbGxpc2lvbnNdIGludG8gW290aGVyXSBhbmQgcmV0dXJucyBbb3RoZXJdLiBUaGUgY29weSBpcyBkb25lCiAgLy8gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGhhc2ggdGFibGUgYW5kIHRoZSBjb2xsaXNpb25zIGxpc3QgYW5kCiAgLy8gY2FsbGluZyBbOm90aGVyLmFkZDpdLgogIHN0YXRpYyBjb3B5VG8odmFyIG90aGVyLCBMaXN0PEhJbnN0cnVjdGlvbj4gdGFibGUsIFZhbHVlU2V0Tm9kZSBjb2xsaXNpb25zKSB7CiAgICAvLyBDb3B5IGVsZW1lbnRzIGZyb20gdGhlIGhhc2ggdGFibGUuCiAgICBmb3IgKGludCBpbmRleCA9IDAsIGxlbmd0aCA9IHRhYmxlLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gdGFibGVbaW5kZXhdOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgb3RoZXIuYWRkKGluc3RydWN0aW9uKTsKICAgIH0KICAgIC8vIENvcHkgZWxlbWVudHMgZnJvbSB0aGUgY29sbGlzaW9uIGxpc3QuCiAgICBWYWx1ZVNldE5vZGUgY3VycmVudCA9IGNvbGxpc2lvbnM7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIC8vIFRPRE8oa2FzcGVybCk6IE1heWJlIGZpbmQgYSB3YXkgb2YgcmV1c2luZyB0aGUgaGFzaCBjb2RlCiAgICAgIC8vIHJhdGhlciB0aGFuIHJlY29tcHV0aW5nIGl0IGV2ZXJ5IHRpbWUuCiAgICAgIG90aGVyLmFkZChjdXJyZW50LnZhbHVlKTsKICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDsKICAgIH0KICAgIHJldHVybiBvdGhlcjsKICB9CgogIFZhbHVlU2V0IGludGVyc2VjdGlvbihWYWx1ZVNldCBvdGhlcikgewogICAgaWYgKHNpemUgPiBvdGhlci5zaXplKSByZXR1cm4gb3RoZXIuaW50ZXJzZWN0aW9uKHRoaXMpOwogICAgVmFsdWVTZXQgcmVzdWx0ID0gbmV3IFZhbHVlU2V0KCk7CiAgICAvLyBMb29rIGluIHRoZSBoYXNoIHRhYmxlLgogICAgZm9yIChpbnQgaW5kZXggPSAwLCBsZW5ndGggPSB0YWJsZS5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHRhYmxlW2luZGV4XTsKICAgICAgaWYgKGluc3RydWN0aW9uICE9IG51bGwgJiYgb3RoZXIubG9va3VwKGluc3RydWN0aW9uKSAhPSBudWxsKSB7CiAgICAgICAgcmVzdWx0LmFkZChpbnN0cnVjdGlvbik7CiAgICAgIH0KICAgIH0KICAgIC8vIExvb2sgaW4gdGhlIGNvbGxpc2lvbiBsaXN0LgogICAgVmFsdWVTZXROb2RlIGN1cnJlbnQgPSBjb2xsaXNpb25zOwogICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBjdXJyZW50LnZhbHVlOwogICAgICBpZiAob3RoZXIubG9va3VwKHZhbHVlKSAhPSBudWxsKSB7CiAgICAgICAgcmVzdWx0LmFkZCh2YWx1ZSk7CiAgICAgIH0KICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIHJlc2l6ZShpbnQgY2FwYWNpdHkpIHsKICAgIHZhciBvbGRTaXplID0gc2l6ZTsKICAgIHZhciBvbGRUYWJsZSA9IHRhYmxlOwogICAgdmFyIG9sZENvbGxpc2lvbnMgPSBjb2xsaXNpb25zOwogICAgLy8gUmVzZXQgdGhlIHRhYmxlIHdpdGggYSBiaWdnZXIgY2FwYWNpdHkuCiAgICBhc3NlcnQoY2FwYWNpdHkgPiB0YWJsZS5sZW5ndGgpOwogICAgc2l6ZSA9IDA7CiAgICB0YWJsZSA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4oY2FwYWNpdHkpOwogICAgY29sbGlzaW9ucyA9IG51bGw7CiAgICAvLyBBZGQgdGhlIG9sZCBpbnN0cnVjdGlvbnMgdG8gdGhlIG5ldyB0YWJsZS4KICAgIGNvcHlUbyh0aGlzLCBvbGRUYWJsZSwgb2xkQ29sbGlzaW9ucyk7CiAgICAvLyBNYWtlIHN1cmUgd2UgcHJlc2VydmVkIGFsbCBlbGVtZW50cyBhbmQgdGhhdCBubyByZXNpemluZwogICAgLy8gaGFwcGVuZWQgYXMgcGFydCBvZiB0aGlzIHJlc2l6aW5nLgogICAgYXNzZXJ0KHNpemUgPT0gb2xkU2l6ZSk7CiAgICBhc3NlcnQodGFibGUubGVuZ3RoID09IGNhcGFjaXR5KTsKICB9Cn0KCmNsYXNzIFZhbHVlU2V0Tm9kZSB7CiAgZmluYWwgSEluc3RydWN0aW9uIHZhbHVlOwogIGZpbmFsIGludCBoYXNoOwogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaGFzaDsKICBWYWx1ZVNldE5vZGUgbmV4dDsKICBWYWx1ZVNldE5vZGUodGhpcy52YWx1ZSwgdGhpcy5oYXNoLCB0aGlzLm5leHQpOwp9CoChAE5OPAE5FQEREBwbMgEhGgEnKS4hNSEgGAYuJSAiDUgGDAQBMi4pHydFJEsnKjoIBhEEARkcPB9KL08dEAgGJCInHigrMyAdESAKEA8cCBYGBAEUNgQBIDgEAT9FRRxQKkovNwYuJx5CMCAeBhIEASo8Jh9KL0YhCAYjJx4qKRsIHgYTBAEeGBokLyUOLhcyK0AqHSYEAgEVHBIMHBUyAgEncGFja2FnZTpjb21waWxlci9zcmMvc3NhL3ZhbHVlX3NldC5kYXJ0K3Nka3Jvb3Q6L3BrZy9qc19hc3QvbGliL3NyYy9jaGFyYWN0ZXJzLmRhcnSKSS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzX2NoYXJhY3Rlcl9jb2RlczsKCmNvbnN0IGludCAkRU9GID0gMDsKY29uc3QgaW50ICRTVFggPSAyOwpjb25zdCBpbnQgJEJTID0gODsKY29uc3QgaW50ICRUQUIgPSA5Owpjb25zdCBpbnQgJExGID0gMTA7CmNvbnN0IGludCAkVlRBQiA9IDExOwpjb25zdCBpbnQgJEZGID0gMTI7CmNvbnN0IGludCAkQ1IgPSAxMzsKY29uc3QgaW50ICRTUEFDRSA9IDMyOwpjb25zdCBpbnQgJEJBTkcgPSAzMzsKY29uc3QgaW50ICREUSA9IDM0Owpjb25zdCBpbnQgJEhBU0ggPSAzNTsKY29uc3QgaW50ICQkID0gMzY7CmNvbnN0IGludCAkUEVSQ0VOVCA9IDM3Owpjb25zdCBpbnQgJEFNUEVSU0FORCA9IDM4Owpjb25zdCBpbnQgJFNRID0gMzk7CmNvbnN0IGludCAkT1BFTl9QQVJFTiA9IDQwOwpjb25zdCBpbnQgJENMT1NFX1BBUkVOID0gNDE7CmNvbnN0IGludCAkU1RBUiA9IDQyOwpjb25zdCBpbnQgJFBMVVMgPSA0MzsKY29uc3QgaW50ICRDT01NQSA9IDQ0Owpjb25zdCBpbnQgJE1JTlVTID0gNDU7CmNvbnN0IGludCAkUEVSSU9EID0gNDY7CmNvbnN0IGludCAkU0xBU0ggPSA0NzsKY29uc3QgaW50ICQwID0gNDg7CmNvbnN0IGludCAkMSA9IDQ5Owpjb25zdCBpbnQgJDIgPSA1MDsKY29uc3QgaW50ICQzID0gNTE7CmNvbnN0IGludCAkNCA9IDUyOwpjb25zdCBpbnQgJDUgPSA1MzsKY29uc3QgaW50ICQ2ID0gNTQ7CmNvbnN0IGludCAkNyA9IDU1Owpjb25zdCBpbnQgJDggPSA1NjsKY29uc3QgaW50ICQ5ID0gNTc7CmNvbnN0IGludCAkQ09MT04gPSA1ODsKY29uc3QgaW50ICRTRU1JQ09MT04gPSA1OTsKY29uc3QgaW50ICRMVCA9IDYwOwpjb25zdCBpbnQgJEVRID0gNjE7CmNvbnN0IGludCAkR1QgPSA2MjsKY29uc3QgaW50ICRRVUVTVElPTiA9IDYzOwpjb25zdCBpbnQgJEFUID0gNjQ7CmNvbnN0IGludCAkQSA9IDY1Owpjb25zdCBpbnQgJEIgPSA2NjsKY29uc3QgaW50ICRDID0gNjc7CmNvbnN0IGludCAkRCA9IDY4Owpjb25zdCBpbnQgJEUgPSA2OTsKY29uc3QgaW50ICRGID0gNzA7CmNvbnN0IGludCAkRyA9IDcxOwpjb25zdCBpbnQgJEggPSA3MjsKY29uc3QgaW50ICRJID0gNzM7CmNvbnN0IGludCAkSiA9IDc0Owpjb25zdCBpbnQgJEsgPSA3NTsKY29uc3QgaW50ICRMID0gNzY7CmNvbnN0IGludCAkTSA9IDc3Owpjb25zdCBpbnQgJE4gPSA3ODsKY29uc3QgaW50ICRPID0gNzk7CmNvbnN0IGludCAkUCA9IDgwOwpjb25zdCBpbnQgJFEgPSA4MTsKY29uc3QgaW50ICRSID0gODI7CmNvbnN0IGludCAkUyA9IDgzOwpjb25zdCBpbnQgJFQgPSA4NDsKY29uc3QgaW50ICRVID0gODU7CmNvbnN0IGludCAkViA9IDg2Owpjb25zdCBpbnQgJFcgPSA4NzsKY29uc3QgaW50ICRYID0gODg7CmNvbnN0IGludCAkWSA9IDg5Owpjb25zdCBpbnQgJFogPSA5MDsKY29uc3QgaW50ICRPUEVOX1NRVUFSRV9CUkFDS0VUID0gOTE7CmNvbnN0IGludCAkQkFDS1NMQVNIID0gOTI7CmNvbnN0IGludCAkQ0xPU0VfU1FVQVJFX0JSQUNLRVQgPSA5MzsKY29uc3QgaW50ICRDQVJFVCA9IDk0Owpjb25zdCBpbnQgJF8gPSA5NTsKY29uc3QgaW50ICRCQUNLUElORyA9IDk2Owpjb25zdCBpbnQgJGEgPSA5NzsKY29uc3QgaW50ICRiID0gOTg7CmNvbnN0IGludCAkYyA9IDk5Owpjb25zdCBpbnQgJGQgPSAxMDA7CmNvbnN0IGludCAkZSA9IDEwMTsKY29uc3QgaW50ICRmID0gMTAyOwpjb25zdCBpbnQgJGcgPSAxMDM7CmNvbnN0IGludCAkaCA9IDEwNDsKY29uc3QgaW50ICRpID0gMTA1Owpjb25zdCBpbnQgJGogPSAxMDY7CmNvbnN0IGludCAkayA9IDEwNzsKY29uc3QgaW50ICRsID0gMTA4Owpjb25zdCBpbnQgJG0gPSAxMDk7CmNvbnN0IGludCAkbiA9IDExMDsKY29uc3QgaW50ICRvID0gMTExOwpjb25zdCBpbnQgJHAgPSAxMTI7CmNvbnN0IGludCAkcSA9IDExMzsKY29uc3QgaW50ICRyID0gMTE0Owpjb25zdCBpbnQgJHMgPSAxMTU7CmNvbnN0IGludCAkdCA9IDExNjsKY29uc3QgaW50ICR1ID0gMTE3Owpjb25zdCBpbnQgJHYgPSAxMTg7CmNvbnN0IGludCAkdyA9IDExOTsKY29uc3QgaW50ICR4ID0gMTIwOwpjb25zdCBpbnQgJHkgPSAxMjE7CmNvbnN0IGludCAkeiA9IDEyMjsKY29uc3QgaW50ICRPUEVOX0NVUkxZX0JSQUNLRVQgPSAxMjM7CmNvbnN0IGludCAkQkFSID0gMTI0Owpjb25zdCBpbnQgJENMT1NFX0NVUkxZX0JSQUNLRVQgPSAxMjU7CmNvbnN0IGludCAkVElMREUgPSAxMjY7CmNvbnN0IGludCAkREVMID0gMTI3Owpjb25zdCBpbnQgJE5CU1AgPSAxNjA7CmNvbnN0IGludCAkTFMgPSAweDIwMjg7CmNvbnN0IGludCAkUFMgPSAweDIwMjk7Cgpjb25zdCBpbnQgJEZJUlNUX1NVUlJPR0FURSA9IDB4ZDgwMDsKY29uc3QgaW50ICRMQVNUX1NVUlJPR0FURSA9IDB4ZGZmZjsKY29uc3QgaW50ICRMQVNUX0NPREVfUE9JTlQgPSAweDEwZmZmZjsKdwBOTjwBHAEUFBMUFBYUFBcWFBYTGRsUHB0WFhcXGBcTExMTExMTExMTFxsUFBQaFBMTExMTExMTExMTExMTExMTExMTExMTExMTJRsmFxMaExMTFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFiYYFhcYGAElJCcBInBhY2thZ2U6anNfYXN0L3NyYy9jaGFyYWN0ZXJzLmRhcnQ7c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9hbGdvcml0aG1zLmRhcnSmHy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgImRhcnQ6bWF0aCIgYXMgbWF0aDsKCmltcG9ydCAidXRpbHMuZGFydCI7CgovLy8gUmV0dXJucyBhIHBvc2l0aW9uIG9mIHRoZSBbdmFsdWVdIGluIFtzb3J0ZWRMaXN0XSwgaWYgaXQgaXMgdGhlcmUuCi8vLwovLy8gSWYgdGhlIGxpc3QgaXNuJ3Qgc29ydGVkIGFjY29yZGluZyB0byB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uLCB0aGUgcmVzdWx0Ci8vLyBpcyB1bnByZWRpY3RhYmxlLgovLy8KLy8vIElmIFtjb21wYXJlXSBpcyBvbWl0dGVkLCB0aGlzIGRlZmF1bHRzIHRvIGNhbGxpbmcgW0NvbXBhcmFibGUuY29tcGFyZVRvXSBvbgovLy8gdGhlIG9iamVjdHMuIElmIGFueSBvYmplY3QgaXMgbm90IFtDb21wYXJhYmxlXSwgdGhpcyB0aHJvd3MgYSBbQ2FzdEVycm9yXS4KLy8vCi8vLyBSZXR1cm5zIC0xIGlmIFt2YWx1ZV0gaXMgbm90IGluIHRoZSBsaXN0IGJ5IGRlZmF1bHQuCmludCBiaW5hcnlTZWFyY2g8VD4oTGlzdDxUPiBzb3J0ZWRMaXN0LCBUIHZhbHVlLCB7aW50IGNvbXBhcmUoVCBhLCBUIGIpfSkgewogIGNvbXBhcmUgPz89IGRlZmF1bHRDb21wYXJlPFQ+KCk7CiAgaW50IG1pbiA9IDA7CiAgaW50IG1heCA9IHNvcnRlZExpc3QubGVuZ3RoOwogIHdoaWxlIChtaW4gPCBtYXgpIHsKICAgIGludCBtaWQgPSBtaW4gKyAoKG1heCAtIG1pbikgPj4gMSk7CiAgICB2YXIgZWxlbWVudCA9IHNvcnRlZExpc3RbbWlkXTsKICAgIGludCBjb21wID0gY29tcGFyZShlbGVtZW50LCB2YWx1ZSk7CiAgICBpZiAoY29tcCA9PSAwKSByZXR1cm4gbWlkOwogICAgaWYgKGNvbXAgPCAwKSB7CiAgICAgIG1pbiA9IG1pZCArIDE7CiAgICB9IGVsc2UgewogICAgICBtYXggPSBtaWQ7CiAgICB9CiAgfQogIHJldHVybiAtMTsKfQoKLy8vIFJldHVybnMgdGhlIGZpcnN0IHBvc2l0aW9uIGluIFtzb3J0ZWRMaXN0XSB0aGF0IGRvZXMgbm90IGNvbXBhcmUgbGVzcyB0aGFuCi8vLyBbdmFsdWVdLgovLy8KLy8vIElmIHRoZSBsaXN0IGlzbid0IHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIFtjb21wYXJlXSBmdW5jdGlvbiwgdGhlIHJlc3VsdAovLy8gaXMgdW5wcmVkaWN0YWJsZS4KLy8vCi8vLyBJZiBbY29tcGFyZV0gaXMgb21pdHRlZCwgdGhpcyBkZWZhdWx0cyB0byBjYWxsaW5nIFtDb21wYXJhYmxlLmNvbXBhcmVUb10gb24KLy8vIHRoZSBvYmplY3RzLiBJZiBhbnkgb2JqZWN0IGlzIG5vdCBbQ29tcGFyYWJsZV0sIHRoaXMgdGhyb3dzIGEgW0Nhc3RFcnJvcl0uCi8vLwovLy8gUmV0dXJucyBbc29ydGVkTGlzdC5sZW5ndGhdIGlmIGFsbCB0aGUgaXRlbXMgaW4gW3NvcnRlZExpc3RdIGNvbXBhcmUgbGVzcwovLy8gdGhhbiBbdmFsdWVdLgppbnQgbG93ZXJCb3VuZDxUPihMaXN0PFQ+IHNvcnRlZExpc3QsIFQgdmFsdWUsIHtpbnQgY29tcGFyZShUIGEsIFQgYil9KSB7CiAgY29tcGFyZSA/Pz0gZGVmYXVsdENvbXBhcmU8VD4oKTsKICBpbnQgbWluID0gMDsKICBpbnQgbWF4ID0gc29ydGVkTGlzdC5sZW5ndGg7CiAgd2hpbGUgKG1pbiA8IG1heCkgewogICAgaW50IG1pZCA9IG1pbiArICgobWF4IC0gbWluKSA+PiAxKTsKICAgIHZhciBlbGVtZW50ID0gc29ydGVkTGlzdFttaWRdOwogICAgaW50IGNvbXAgPSBjb21wYXJlKGVsZW1lbnQsIHZhbHVlKTsKICAgIGlmIChjb21wIDwgMCkgewogICAgICBtaW4gPSBtaWQgKyAxOwogICAgfSBlbHNlIHsKICAgICAgbWF4ID0gbWlkOwogICAgfQogIH0KICByZXR1cm4gbWluOwp9CgovLy8gU2h1ZmZsZXMgYSBsaXN0IHJhbmRvbWx5LgovLy8KLy8vIEEgc3ViLXJhbmdlIG9mIGEgbGlzdCBjYW4gYmUgc2h1ZmZsZWQgYnkgcHJvdmlkaW5nIFtzdGFydF0gYW5kIFtlbmRdLgp2b2lkIHNodWZmbGUoTGlzdCBsaXN0LCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICB2YXIgcmFuZG9tID0gbmV3IG1hdGguUmFuZG9tKCk7CiAgaWYgKGVuZCA9PSBudWxsKSBlbmQgPSBsaXN0Lmxlbmd0aDsKICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgd2hpbGUgKGxlbmd0aCA+IDEpIHsKICAgIGludCBwb3MgPSByYW5kb20ubmV4dEludChsZW5ndGgpOwogICAgbGVuZ3RoLS07CiAgICB2YXIgdG1wMSA9IGxpc3Rbc3RhcnQgKyBwb3NdOwogICAgbGlzdFtzdGFydCArIHBvc10gPSBsaXN0W3N0YXJ0ICsgbGVuZ3RoXTsKICAgIGxpc3Rbc3RhcnQgKyBsZW5ndGhdID0gdG1wMTsKICB9Cn0KCi8vLyBSZXZlcnNlcyBhIGxpc3QsIG9yIGEgcGFydCBvZiBhIGxpc3QsIGluLXBsYWNlLgp2b2lkIHJldmVyc2UoTGlzdCBsaXN0LCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICBpZiAoZW5kID09IG51bGwpIGVuZCA9IGxpc3QubGVuZ3RoOwogIF9yZXZlcnNlKGxpc3QsIHN0YXJ0LCBlbmQpOwp9CgovLy8gSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHRoYXQgYXNzdW1lcyB2YWxpZCBhcmd1bWVudHMuCnZvaWQgX3JldmVyc2UoTGlzdCBsaXN0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICBmb3IgKGludCBpID0gc3RhcnQsIGogPSBlbmQgLSAxOyBpIDwgajsgaSsrLCBqLS0pIHsKICAgIHZhciB0bXAgPSBsaXN0W2ldOwogICAgbGlzdFtpXSA9IGxpc3Rbal07CiAgICBsaXN0W2pdID0gdG1wOwogIH0KfQoKLy8vIFNvcnQgYSBsaXN0IGJldHdlZW4gW3N0YXJ0XSAoaW5jbHVzaXZlKSBhbmQgW2VuZF0gKGV4Y2x1c2l2ZSkgdXNpbmcKLy8vIGluc2VydGlvbiBzb3J0LgovLy8KLy8vIElmIFtjb21wYXJlXSBpcyBvbWl0dGVkLCB0aGlzIGRlZmF1bHRzIHRvIGNhbGxpbmcgW0NvbXBhcmFibGUuY29tcGFyZVRvXSBvbgovLy8gdGhlIG9iamVjdHMuIElmIGFueSBvYmplY3QgaXMgbm90IFtDb21wYXJhYmxlXSwgdGhpcyB0aHJvd3MgYSBbQ2FzdEVycm9yXS4KLy8vCi8vLyBJbnNlcnRpb24gc29ydCBpcyBhIHNpbXBsZSBzb3J0aW5nIGFsZ29yaXRobS4gRm9yIGBuYCBlbGVtZW50cyBpdCBkb2VzIG9uCi8vLyB0aGUgb3JkZXIgb2YgYG4gKiBsb2cobilgIGNvbXBhcmlzb25zIGJ1dCB1cCB0byBgbmAgc3F1YXJlZCBtb3Zlcy4gVGhlCi8vLyBzb3J0aW5nIGlzIHBlcmZvcm1lZCBpbi1wbGFjZSwgd2l0aG91dCB1c2luZyBleHRyYSBtZW1vcnkuCi8vLwovLy8gRm9yIHNob3J0IGxpc3RzIHRoZSBtYW55IG1vdmVzIGhhdmUgbGVzcyBpbXBhY3QgdGhhbiB0aGUgc2ltcGxlIGFsZ29yaXRobSwKLy8vIGFuZCBpdCBpcyBvZnRlbiB0aGUgZmF2b3JlZCBzb3J0aW5nIGFsZ29yaXRobSBmb3Igc2hvcnQgbGlzdHMuCi8vLwovLy8gVGhpcyBpbnNlcnRpb24gc29ydCBpcyBzdGFibGU6IEVxdWFsIGVsZW1lbnRzIGVuZCB1cCBpbiB0aGUgc2FtZSBvcmRlcgovLy8gYXMgdGhleSBzdGFydGVkIGluLgp2b2lkIGluc2VydGlvblNvcnQ8VD4oTGlzdDxUPiBsaXN0LAogICAge2ludCBjb21wYXJlKFQgYSwgVCBiKSwgaW50IHN0YXJ0OiAwLCBpbnQgZW5kfSkgewogIC8vIElmIHRoZSBzYW1lIG1ldGhvZCBjb3VsZCBoYXZlIGJvdGggcG9zaXRpb25hbCBhbmQgbmFtZWQgb3B0aW9uYWwKICAvLyBwYXJhbWV0ZXJzLCB0aGlzIHNob3VsZCBiZSAobGlzdCwgW3N0YXJ0LCBlbmRdLCB7Y29tcGFyZX0pLgogIGNvbXBhcmUgPz89IGRlZmF1bHRDb21wYXJlPFQ+KCk7CiAgZW5kID8/PSBsaXN0Lmxlbmd0aDsKCiAgZm9yIChpbnQgcG9zID0gc3RhcnQgKyAxOyBwb3MgPCBlbmQ7IHBvcysrKSB7CiAgICBpbnQgbWluID0gc3RhcnQ7CiAgICBpbnQgbWF4ID0gcG9zOwogICAgdmFyIGVsZW1lbnQgPSBsaXN0W3Bvc107CiAgICB3aGlsZSAobWluIDwgbWF4KSB7CiAgICAgIGludCBtaWQgPSBtaW4gKyAoKG1heCAtIG1pbikgPj4gMSk7CiAgICAgIGludCBjb21wYXJpc29uID0gY29tcGFyZShlbGVtZW50LCBsaXN0W21pZF0pOwogICAgICBpZiAoY29tcGFyaXNvbiA8IDApIHsKICAgICAgICBtYXggPSBtaWQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWluID0gbWlkICsgMTsKICAgICAgfQogICAgfQogICAgbGlzdC5zZXRSYW5nZShtaW4gKyAxLCBwb3MgKyAxLCBsaXN0LCBtaW4pOwogICAgbGlzdFttaW5dID0gZWxlbWVudDsKICB9Cn0KCi8vLyBMaW1pdCBiZWxvdyB3aGljaCBtZXJnZSBzb3J0IGRlZmF1bHRzIHRvIGluc2VydGlvbiBzb3J0Lgpjb25zdCBpbnQgX01FUkdFX1NPUlRfTElNSVQgPSAzMjsKCi8vLyBTb3J0cyBhIGxpc3QgYmV0d2VlbiBbc3RhcnRdIChpbmNsdXNpdmUpIGFuZCBbZW5kXSAoZXhjbHVzaXZlKSB1c2luZyB0aGUKLy8vIG1lcmdlIHNvcnQgYWxnb3JpdGhtLgovLy8KLy8vIElmIFtjb21wYXJlXSBpcyBvbWl0dGVkLCB0aGlzIGRlZmF1bHRzIHRvIGNhbGxpbmcgW0NvbXBhcmFibGUuY29tcGFyZVRvXSBvbgovLy8gdGhlIG9iamVjdHMuIElmIGFueSBvYmplY3QgaXMgbm90IFtDb21wYXJhYmxlXSwgdGhpcyB0aHJvd3MgYSBbQ2FzdEVycm9yXS4KLy8vCi8vLyBNZXJnZS1zb3J0aW5nIHdvcmtzIGJ5IHNwbGl0dGluZyB0aGUgam9iIGludG8gdHdvIHBhcnRzLCBzb3J0aW5nIGVhY2gKLy8vIHJlY3Vyc2l2ZWx5LCBhbmQgdGhlbiBtZXJnaW5nIHRoZSB0d28gc29ydGVkIHBhcnRzLgovLy8KLy8vIFRoaXMgdGFrZXMgb24gdGhlIG9yZGVyIG9mIGBuICogbG9nKG4pYCBjb21wYXJpc29ucyBhbmQgbW92ZXMgdG8gc29ydAovLy8gYG5gIGVsZW1lbnRzLCBidXQgcmVxdWlyZXMgZXh0cmEgc3BhY2Ugb2YgYWJvdXQgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgbGlzdAovLy8gYmVpbmcgc29ydGVkLgovLy8KLy8vIFRoaXMgbWVyZ2Ugc29ydCBpcyBzdGFibGU6IEVxdWFsIGVsZW1lbnRzIGVuZCB1cCBpbiB0aGUgc2FtZSBvcmRlcgovLy8gYXMgdGhleSBzdGFydGVkIGluLgp2b2lkIG1lcmdlU29ydDxUPihMaXN0PFQ+IGxpc3QsCiAgICB7aW50IHN0YXJ0OiAwLCBpbnQgZW5kLCBpbnQgY29tcGFyZShUIGEsIFQgYil9KSB7CiAgZW5kID8/PSBsaXN0Lmxlbmd0aDsKICBjb21wYXJlID8/PSBkZWZhdWx0Q29tcGFyZTxUPigpOwoKICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgaWYgKGxlbmd0aCA8IDIpIHJldHVybjsKICBpZiAobGVuZ3RoIDwgX01FUkdFX1NPUlRfTElNSVQpIHsKICAgIGluc2VydGlvblNvcnQobGlzdCwgY29tcGFyZTogY29tcGFyZSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCk7CiAgICByZXR1cm47CiAgfQogIC8vIFNwZWNpYWwgY2FzZSB0aGUgZmlyc3Qgc3BsaXQgaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nCiAgLy8gX21lcmdlU29ydCwgYmVjYXVzZSB0aGUgX21lcmdlU29ydCByZXF1aXJlcyBpdHMgdGFyZ2V0IHRvCiAgLy8gYmUgZGlmZmVyZW50IGZyb20gaXRzIHNvdXJjZSwgYW5kIGl0IHJlcXVpcmVzIGV4dHJhIHNwYWNlCiAgLy8gb2YgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgbGlzdCB0byBzb3J0LgogIC8vIFRoaXMgc3BsaXQgYWxsb3dzIHVzIHRvIGhhdmUgb25seSBoYWxmIGFzIG11Y2ggZXh0cmEgc3BhY2UsCiAgLy8gYW5kIGl0IGVuZHMgdXAgaW4gdGhlIG9yaWdpbmFsIHBsYWNlLgogIGludCBtaWRkbGUgPSBzdGFydCArICgoZW5kIC0gc3RhcnQpID4+IDEpOwogIGludCBmaXJzdExlbmd0aCA9IG1pZGRsZSAtIHN0YXJ0OwogIGludCBzZWNvbmRMZW5ndGggPSBlbmQgLSBtaWRkbGU7CiAgLy8gc2Vjb25kTGVuZ3RoIGlzIGFsd2F5cyB0aGUgc2FtZSBhcyBmaXJzdExlbmd0aCwgb3Igb25lIGdyZWF0ZXIuCiAgdmFyIHNjcmF0Y2hTcGFjZSA9IG5ldyBMaXN0PFQ+KHNlY29uZExlbmd0aCk7CiAgX21lcmdlU29ydChsaXN0LCBjb21wYXJlLCBtaWRkbGUsIGVuZCwgc2NyYXRjaFNwYWNlLCAwKTsKICBpbnQgZmlyc3RUYXJnZXQgPSBlbmQgLSBmaXJzdExlbmd0aDsKICBfbWVyZ2VTb3J0KGxpc3QsIGNvbXBhcmUsIHN0YXJ0LCBtaWRkbGUsIGxpc3QsIGZpcnN0VGFyZ2V0KTsKICBfbWVyZ2UoY29tcGFyZSwgbGlzdCwgZmlyc3RUYXJnZXQsIGVuZCwgc2NyYXRjaFNwYWNlLCAwLCBzZWNvbmRMZW5ndGgsIGxpc3QsCiAgICAgIHN0YXJ0KTsKfQoKLy8vIFBlcmZvcm1zIGFuIGluc2VydGlvbiBzb3J0IGludG8gYSBwb3RlbnRpYWxseSBkaWZmZXJlbnQgbGlzdCB0aGFuIHRoZQovLy8gb25lIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHZhbHVlcy4KLy8vCi8vLyBJdCB3aWxsIHdvcmsgaW4tcGxhY2UgYXMgd2VsbC4Kdm9pZCBfbW92aW5nSW5zZXJ0aW9uU29ydDxUPihMaXN0PFQ+IGxpc3QsIGludCBjb21wYXJlKFQgYSwgVCBiKSwgaW50IHN0YXJ0LAogICAgaW50IGVuZCwgTGlzdDxUPiB0YXJnZXQsIGludCB0YXJnZXRPZmZzZXQpIHsKICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47CiAgdGFyZ2V0W3RhcmdldE9mZnNldF0gPSBsaXN0W3N0YXJ0XTsKICBmb3IgKGludCBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICB2YXIgZWxlbWVudCA9IGxpc3Rbc3RhcnQgKyBpXTsKICAgIGludCBtaW4gPSB0YXJnZXRPZmZzZXQ7CiAgICBpbnQgbWF4ID0gdGFyZ2V0T2Zmc2V0ICsgaTsKICAgIHdoaWxlIChtaW4gPCBtYXgpIHsKICAgICAgaW50IG1pZCA9IG1pbiArICgobWF4IC0gbWluKSA+PiAxKTsKICAgICAgaWYgKGNvbXBhcmUoZWxlbWVudCwgdGFyZ2V0W21pZF0pIDwgMCkgewogICAgICAgIG1heCA9IG1pZDsKICAgICAgfSBlbHNlIHsKICAgICAgICBtaW4gPSBtaWQgKyAxOwogICAgICB9CiAgICB9CiAgICB0YXJnZXQuc2V0UmFuZ2UobWluICsgMSwgdGFyZ2V0T2Zmc2V0ICsgaSArIDEsIHRhcmdldCwgbWluKTsKICAgIHRhcmdldFttaW5dID0gZWxlbWVudDsKICB9Cn0KCi8vLyBTb3J0cyBbbGlzdF0gZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGludG8gW3RhcmdldF0gYXQgW3RhcmdldE9mZnNldF0uCi8vLwovLy8gVGhlIGB0YXJnZXRgIGxpc3QgbXVzdCBiZSBhYmxlIHRvIGNvbnRhaW4gdGhlIHJhbmdlIGZyb20gYHN0YXJ0YCB0byBgZW5kYAovLy8gYWZ0ZXIgYHRhcmdldE9mZnNldGAuCi8vLwovLy8gQWxsb3dzIHRhcmdldCB0byBiZSB0aGUgc2FtZSBsaXN0IGFzIFtsaXN0XSwgYXMgbG9uZyBhcyBpdCdzIG5vdAovLy8gb3ZlcmxhcHBpbmcgdGhlIGBzdGFydC4uZW5kYCByYW5nZS4Kdm9pZCBfbWVyZ2VTb3J0PFQ+KExpc3Q8VD4gbGlzdCwgaW50IGNvbXBhcmUoVCBhLCBUIGIpLCBpbnQgc3RhcnQsIGludCBlbmQsCiAgICBMaXN0PFQ+IHRhcmdldCwgaW50IHRhcmdldE9mZnNldCkgewogIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICBpZiAobGVuZ3RoIDwgX01FUkdFX1NPUlRfTElNSVQpIHsKICAgIF9tb3ZpbmdJbnNlcnRpb25Tb3J0KGxpc3QsIGNvbXBhcmUsIHN0YXJ0LCBlbmQsIHRhcmdldCwgdGFyZ2V0T2Zmc2V0KTsKICAgIHJldHVybjsKICB9CiAgaW50IG1pZGRsZSA9IHN0YXJ0ICsgKGxlbmd0aCA+PiAxKTsKICBpbnQgZmlyc3RMZW5ndGggPSBtaWRkbGUgLSBzdGFydDsKICBpbnQgc2Vjb25kTGVuZ3RoID0gZW5kIC0gbWlkZGxlOwogIC8vIEhlcmUgc2Vjb25kTGVuZ3RoID49IGZpcnN0TGVuZ3RoIChkaWZmZXJzIGJ5IGF0IG1vc3Qgb25lKS4KICBpbnQgdGFyZ2V0TWlkZGxlID0gdGFyZ2V0T2Zmc2V0ICsgZmlyc3RMZW5ndGg7CiAgLy8gU29ydCB0aGUgc2Vjb25kIGhhbGYgaW50byB0aGUgZW5kIG9mIHRoZSB0YXJnZXQgYXJlYS4KICBfbWVyZ2VTb3J0KGxpc3QsIGNvbXBhcmUsIG1pZGRsZSwgZW5kLCB0YXJnZXQsIHRhcmdldE1pZGRsZSk7CiAgLy8gU29ydCB0aGUgZmlyc3QgaGFsZiBpbnRvIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBhcmVhLgogIF9tZXJnZVNvcnQobGlzdCwgY29tcGFyZSwgc3RhcnQsIG1pZGRsZSwgbGlzdCwgbWlkZGxlKTsKICAvLyBNZXJnZSB0aGUgdHdvIHBhcnRzIGludG8gdGhlIHRhcmdldCBhcmVhLgogIF9tZXJnZShjb21wYXJlLCBsaXN0LCBtaWRkbGUsIG1pZGRsZSArIGZpcnN0TGVuZ3RoLCB0YXJnZXQsIHRhcmdldE1pZGRsZSwKICAgICAgdGFyZ2V0TWlkZGxlICsgc2Vjb25kTGVuZ3RoLCB0YXJnZXQsIHRhcmdldE9mZnNldCk7Cn0KCi8vLyBNZXJnZXMgdHdvIGxpc3RzIGludG8gYSB0YXJnZXQgbGlzdC4KLy8vCi8vLyBPbmUgb2YgdGhlIGlucHV0IGxpc3RzIG1heSBiZSBwb3NpdGlvbmVkIGF0IHRoZSBlbmQgb2YgdGhlIHRhcmdldAovLy8gbGlzdC4KLy8vCi8vLyBGb3IgZXF1YWwgb2JqZWN0LCBlbGVtZW50cyBmcm9tIFtmaXJzdExpc3RdIGFyZSBhbHdheXMgcHJlZmVycmVkLgovLy8gVGhpcyBhbGxvd3MgdGhlIG1lcmdlIHRvIGJlIHN0YWJsZSBpZiB0aGUgZmlyc3QgbGlzdCBjb250YWlucyBlbGVtZW50cwovLy8gdGhhdCBzdGFydGVkIG91dCBlYXJsaWVyIHRoYW4gdGhlIG9uZXMgaW4gW3NlY29uZExpc3RdCnZvaWQgX21lcmdlPFQ+KAogICAgaW50IGNvbXBhcmUoVCBhLCBUIGIpLAogICAgTGlzdDxUPiBmaXJzdExpc3QsCiAgICBpbnQgZmlyc3RTdGFydCwKICAgIGludCBmaXJzdEVuZCwKICAgIExpc3Q8VD4gc2Vjb25kTGlzdCwKICAgIGludCBzZWNvbmRTdGFydCwKICAgIGludCBzZWNvbmRFbmQsCiAgICBMaXN0PFQ+IHRhcmdldCwKICAgIGludCB0YXJnZXRPZmZzZXQpIHsKICAvLyBObyBlbXB0eSBsaXN0cyByZWFjaGVzIGhlcmUuCiAgYXNzZXJ0KGZpcnN0U3RhcnQgPCBmaXJzdEVuZCk7CiAgYXNzZXJ0KHNlY29uZFN0YXJ0IDwgc2Vjb25kRW5kKTsKICBpbnQgY3Vyc29yMSA9IGZpcnN0U3RhcnQ7CiAgaW50IGN1cnNvcjIgPSBzZWNvbmRTdGFydDsKICB2YXIgZmlyc3RFbGVtZW50ID0gZmlyc3RMaXN0W2N1cnNvcjErK107CiAgdmFyIHNlY29uZEVsZW1lbnQgPSBzZWNvbmRMaXN0W2N1cnNvcjIrK107CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChjb21wYXJlKGZpcnN0RWxlbWVudCwgc2Vjb25kRWxlbWVudCkgPD0gMCkgewogICAgICB0YXJnZXRbdGFyZ2V0T2Zmc2V0KytdID0gZmlyc3RFbGVtZW50OwogICAgICBpZiAoY3Vyc29yMSA9PSBmaXJzdEVuZCkgYnJlYWs7IC8vIEZsdXNoaW5nIHNlY29uZCBsaXN0IGFmdGVyIGxvb3AuCiAgICAgIGZpcnN0RWxlbWVudCA9IGZpcnN0TGlzdFtjdXJzb3IxKytdOwogICAgfSBlbHNlIHsKICAgICAgdGFyZ2V0W3RhcmdldE9mZnNldCsrXSA9IHNlY29uZEVsZW1lbnQ7CiAgICAgIGlmIChjdXJzb3IyICE9IHNlY29uZEVuZCkgewogICAgICAgIHNlY29uZEVsZW1lbnQgPSBzZWNvbmRMaXN0W2N1cnNvcjIrK107CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgLy8gU2Vjb25kIGxpc3QgZW1wdGllcyBmaXJzdC4gRmx1c2hpbmcgZmlyc3QgbGlzdCBoZXJlLgogICAgICB0YXJnZXRbdGFyZ2V0T2Zmc2V0KytdID0gZmlyc3RFbGVtZW50OwogICAgICB0YXJnZXQuc2V0UmFuZ2UodGFyZ2V0T2Zmc2V0LCB0YXJnZXRPZmZzZXQgKyAoZmlyc3RFbmQgLSBjdXJzb3IxKSwKICAgICAgICAgIGZpcnN0TGlzdCwgY3Vyc29yMSk7CiAgICAgIHJldHVybjsKICAgIH0KICB9CiAgLy8gRmlyc3QgbGlzdCBlbXB0aWVzIGZpcnN0LiBSZWFjaGVkIGJ5IGJyZWFrIGFib3ZlLgogIHRhcmdldFt0YXJnZXRPZmZzZXQrK10gPSBzZWNvbmRFbGVtZW50OwogIHRhcmdldC5zZXRSYW5nZSgKICAgICAgdGFyZ2V0T2Zmc2V0LCB0YXJnZXRPZmZzZXQgKyAoc2Vjb25kRW5kIC0gY3Vyc29yMiksIHNlY29uZExpc3QsIGN1cnNvcjIpOwp9CoEdAE5OPAEcARUBRwRNFgRQTwQ5TCMPHxYoIygfFBUNEQYEDQIBTw0ETRYEUE8EThJKIw8fFigjKBQVDREGBA4CAR4ESjQiJhwXJg4iLiEEAgE0NCYeAgE7LzYXFxMEAgFIFARQTwROSz8ET0MESxgkNkZBIxcBMBUTHRgqNBwTDxcIBjAZBAIBPSIBTRoEUE8ESjgESk4SBEcYIDYXIwEcGiRDDAQ+Pz8rQSstJCNFMDsnP08OAgFKKAQjTTEcGyYlIxwgGCovEw8XCAZBGwQCAUgEThoERShMKBwkSwwEJiQjQDE7QDo6L0w6AgEpBEYKBEZLOxAbFxQSGBUTFBgiISMcHSstETUtSisNLiIvEgg+LUkfDgYENyoTUAIBJnBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvYWxnb3JpdGhtcy5kYXJ0QnNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvY2Fub25pY2FsaXplZF9tYXAuZGFydJVZLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAndXRpbHMuZGFydCc7Cgp0eXBlZGVmIEMgX0Nhbm9uaWNhbGl6ZTxDLCBLPihLIGtleSk7Cgp0eXBlZGVmIGJvb2wgX0lzVmFsaWRLZXkoT2JqZWN0IGtleSk7CgovLy8gQSBtYXAgd2hvc2Uga2V5cyBhcmUgY29udmVydGVkIHRvIGNhbm9uaWNhbCB2YWx1ZXMgb2YgdHlwZSBgQ2AuCi8vLwovLy8gVGhpcyBpcyB1c2VmdWwgZm9yIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgU3RyaW5nIGtleXMsIGZvciBleGFtcGxlLiBJdCdzCi8vLyBtb3JlIGVmZmljaWVudCB0aGFuIGEgW0xpbmtlZEhhc2hNYXBdIHdpdGggYSBjdXN0b20gZXF1YWxpdHkgb3BlcmF0b3IKLy8vIGJlY2F1c2UgaXQgb25seSBjYW5vbmljYWxpemVzIGVhY2gga2V5IG9uY2UsIHJhdGhlciB0aGFuIGRvaW5nIHNvIGZvciBlYWNoCi8vLyBjb21wYXJpc29uLgovLy8KLy8vIEJ5IGRlZmF1bHQsIGBudWxsYCBpcyBhbGxvd2VkIGFzIGEga2V5LiBJdCBjYW4gYmUgZm9yYmlkZGVuIHZpYSB0aGUKLy8vIGBpc1ZhbGlkS2V5YCBwYXJhbWV0ZXIuCmNsYXNzIENhbm9uaWNhbGl6ZWRNYXA8QywgSywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIGZpbmFsIF9DYW5vbmljYWxpemU8QywgSz4gX2Nhbm9uaWNhbGl6ZTsKCiAgZmluYWwgX0lzVmFsaWRLZXkgX2lzVmFsaWRLZXlGbjsKCiAgZmluYWwgX2Jhc2UgPSBuZXcgTWFwPEMsIFBhaXI8SywgVj4+KCk7CgogIC8vLyBDcmVhdGVzIGFuIGVtcHR5IGNhbm9uaWNhbGl6ZWQgbWFwLgogIC8vLwogIC8vLyBUaGUgW2Nhbm9uaWNhbGl6ZV0gZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgY2Fub25pY2FsIHZhbHVlIGZvciB0aGUKICAvLy8gZ2l2ZW4ga2V5LiBLZXlzIHdpdGggdGhlIHNhbWUgY2Fub25pY2FsIHZhbHVlIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQuCiAgLy8vCiAgLy8vIFRoZSBbaXNWYWxpZEtleV0gZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIFtjYW5vbmljYWxpemVdIGZvcgogIC8vLyBtZXRob2RzIHRoYXQgdGFrZSBhcmJpdHJhcnkgb2JqZWN0cy4gSXQgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIG91dCBrZXlzCiAgLy8vIHRoYXQgY2FuJ3QgYmUgY2Fub25pY2FsaXplZC4KICBDYW5vbmljYWxpemVkTWFwKEMgY2Fub25pY2FsaXplKEsga2V5KSwge2Jvb2wgaXNWYWxpZEtleShPYmplY3Qga2V5KX0pCiAgICAgIDogX2Nhbm9uaWNhbGl6ZSA9IGNhbm9uaWNhbGl6ZSwKICAgICAgICBfaXNWYWxpZEtleUZuID0gaXNWYWxpZEtleTsKCiAgLy8vIENyZWF0ZXMgYSBjYW5vbmljYWxpemVkIG1hcCB0aGF0IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGtleS92YWx1ZSBwYWlycwogIC8vLyBvZiBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGUgW2Nhbm9uaWNhbGl6ZV0gZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgY2Fub25pY2FsIHZhbHVlIGZvciB0aGUKICAvLy8gZ2l2ZW4ga2V5LiBLZXlzIHdpdGggdGhlIHNhbWUgY2Fub25pY2FsIHZhbHVlIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQuCiAgLy8vCiAgLy8vIFRoZSBbaXNWYWxpZEtleV0gZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIFtjYW5vbmljYWxpemVdIGZvcgogIC8vLyBtZXRob2RzIHRoYXQgdGFrZSBhcmJpdHJhcnkgb2JqZWN0cy4gSXQgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIG91dCBrZXlzCiAgLy8vIHRoYXQgY2FuJ3QgYmUgY2Fub25pY2FsaXplZC4KICBDYW5vbmljYWxpemVkTWFwLmZyb20oTWFwPEssIFY+IG90aGVyLCBDIGNhbm9uaWNhbGl6ZShLIGtleSksCiAgICAgIHtib29sIGlzVmFsaWRLZXkoT2JqZWN0IGtleSl9KQogICAgICA6IF9jYW5vbmljYWxpemUgPSBjYW5vbmljYWxpemUsCiAgICAgICAgX2lzVmFsaWRLZXlGbiA9IGlzVmFsaWRLZXkgewogICAgYWRkQWxsKG90aGVyKTsKICB9CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgaWYgKCFfaXNWYWxpZEtleShrZXkpKSByZXR1cm4gbnVsbDsKICAgIHZhciBwYWlyID0gX2Jhc2VbX2Nhbm9uaWNhbGl6ZShrZXkgYXMgSyldOwogICAgcmV0dXJuIHBhaXIgPT0gbnVsbCA/IG51bGwgOiBwYWlyLmxhc3Q7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgaWYgKCFfaXNWYWxpZEtleShrZXkpKSByZXR1cm47CiAgICBfYmFzZVtfY2Fub25pY2FsaXplKGtleSldID0gbmV3IFBhaXIoa2V5LCB2YWx1ZSk7CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIG90aGVyLmZvckVhY2goKGtleSwgdmFsdWUpID0+IHRoaXNba2V5XSA9IHZhbHVlKTsKICB9CgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgPT4KICAgICAgX2Jhc2UuYWRkRW50cmllcyhlbnRyaWVzLm1hcCgKICAgICAgICAgIChlKSA9PiBuZXcgTWFwRW50cnkoX2Nhbm9uaWNhbGl6ZShlLmtleSksIG5ldyBQYWlyKGUua2V5LCBlLnZhbHVlKSkpKTsKCiAgTWFwPEsyLCBWMj4gY2FzdDxLMiwgVjI+KCkgPT4gX2Jhc2UuY2FzdDxLMiwgVjI+KCk7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfYmFzZS5jbGVhcigpOwogIH0KCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSB7CiAgICBpZiAoIV9pc1ZhbGlkS2V5KGtleSkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfYmFzZS5jb250YWluc0tleShfY2Fub25pY2FsaXplKGtleSBhcyBLKSk7CiAgfQoKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSA9PgogICAgICBfYmFzZS52YWx1ZXMuYW55KChwYWlyKSA9PiBwYWlyLmxhc3QgPT0gdmFsdWUpOwoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgPT4KICAgICAgX2Jhc2UuZW50cmllcy5tYXAoKGUpID0+IG5ldyBNYXBFbnRyeShlLnZhbHVlLmZpcnN0LCBlLnZhbHVlLmxhc3QpKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9iYXNlLmZvckVhY2goKGtleSwgcGFpcikgPT4gZihwYWlyLmZpcnN0LCBwYWlyLmxhc3QpKTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2Jhc2UuaXNFbXB0eTsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfYmFzZS5pc05vdEVtcHR5OwoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBfYmFzZS52YWx1ZXMubWFwKChwYWlyKSA9PiBwYWlyLmZpcnN0KTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2Jhc2UubGVuZ3RoOwoKICBNYXA8SzIsIFYyPiBtYXA8SzIsIFYyPihNYXBFbnRyeTxLMiwgVjI+IHRyYW5zZm9ybShLIGtleSwgViB2YWx1ZSkpID0+CiAgICAgIF9iYXNlLm1hcCgoXywgcGFpcikgPT4gdHJhbnNmb3JtKHBhaXIuZmlyc3QsIHBhaXIubGFzdCkpOwoKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIHJldHVybiBfYmFzZQogICAgICAgIC5wdXRJZkFic2VudChfY2Fub25pY2FsaXplKGtleSksICgpID0+IG5ldyBQYWlyKGtleSwgaWZBYnNlbnQoKSkpCiAgICAgICAgLmxhc3Q7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAoIV9pc1ZhbGlkS2V5KGtleSkpIHJldHVybiBudWxsOwogICAgdmFyIHBhaXIgPSBfYmFzZS5yZW1vdmUoX2Nhbm9uaWNhbGl6ZShrZXkgYXMgSykpOwogICAgcmV0dXJuIHBhaXIgPT0gbnVsbCA/IG51bGwgOiBwYWlyLmxhc3Q7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpID0+CiAgICAgIF9iYXNlLnJlbW92ZVdoZXJlKChfLCBwYWlyKSA9PiB0ZXN0KHBhaXIuZmlyc3QsIHBhaXIubGFzdCkpOwoKICBAZGVwcmVjYXRlZAogIE1hcDxLMiwgVjI+IHJldHlwZTxLMiwgVjI+KCkgPT4gY2FzdDxLMiwgVjI+KCk7CgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pID0+IF9iYXNlCiAgICAgIC51cGRhdGUoX2Nhbm9uaWNhbGl6ZShrZXkpLCAocGFpcikgPT4gbmV3IFBhaXIoa2V5LCB1cGRhdGUocGFpci5sYXN0KSksCiAgICAgICAgICBpZkFic2VudDogaWZBYnNlbnQgPT0gbnVsbCA/IG51bGwgOiAoKSA9PiBuZXcgUGFpcihrZXksIGlmQWJzZW50KCkpKQogICAgICAubGFzdDsKCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSA9PiBfYmFzZS51cGRhdGVBbGwoCiAgICAgIChfLCBwYWlyKSA9PiBuZXcgUGFpcihwYWlyLmZpcnN0LCB1cGRhdGUocGFpci5maXJzdCwgcGFpci5sYXN0KSkpOwoKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IF9iYXNlLnZhbHVlcy5tYXAoKHBhaXIpID0+IHBhaXIubGFzdCk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIC8vIERldGVjdCB0b1N0cmluZygpIGN5Y2xlcy4KICAgIGlmIChfaXNUb1N0cmluZ1Zpc2l0aW5nKHRoaXMpKSB7CiAgICAgIHJldHVybiAney4uLn0nOwogICAgfQoKICAgIHZhciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICB0cnkgewogICAgICBfdG9TdHJpbmdWaXNpdGluZy5hZGQodGhpcyk7CiAgICAgIHJlc3VsdC53cml0ZSgneycpOwogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yRWFjaCgoaywgdikgewogICAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICAgIHJlc3VsdC53cml0ZSgnLCAnKTsKICAgICAgICB9CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICByZXN1bHQud3JpdGUoJyRrOiAkdicpOwogICAgICB9KTsKICAgICAgcmVzdWx0LndyaXRlKCd9Jyk7CiAgICB9IGZpbmFsbHkgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKF90b1N0cmluZ1Zpc2l0aW5nLmxhc3QsIHRoaXMpKTsKICAgICAgX3RvU3RyaW5nVmlzaXRpbmcucmVtb3ZlTGFzdCgpOwogICAgfQoKICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9CgogIGJvb2wgX2lzVmFsaWRLZXkoT2JqZWN0IGtleSkgPT4KICAgICAgKGtleSA9PSBudWxsIHx8IGtleSBpcyBLKSAmJgogICAgICAoX2lzVmFsaWRLZXlGbiA9PSBudWxsIHx8IF9pc1ZhbGlkS2V5Rm4oa2V5KSk7Cn0KCi8vLyBBIGNvbGxlY3Rpb24gdXNlZCB0byBpZGVudGlmeSBjeWNsaWMgbWFwcyBkdXJpbmcgdG9TdHJpbmcoKSBjYWxscy4KZmluYWwgTGlzdCBfdG9TdHJpbmdWaXNpdGluZyA9IFtdOwoKLy8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgdmlzaXRpbmcgYG9gIGluIGEgdG9TdHJpbmcoKSBjYWxsLgpib29sIF9pc1RvU3RyaW5nVmlzaXRpbmcobykgPT4gX3RvU3RyaW5nVmlzaXRpbmcuYW55KChlKSA9PiBpZGVudGljYWwobywgZSkpOwqArgBOTjwBGgEVASYBJgFEBE1KTxAESBw3KwEjASoBKgZMTwZMTSNJJiQBTxIGTE8GTE0jQCUmJRMEAR4oLywEASYjNgQBITYEATckUQE2ARETBAEhKTcEASY2ASpLASk8BAElASsBQgEiAUlAAScRSg8EARkoNiwEATFDAQ4yAT5OTw0BP0kBQwEWISUWBgElCiMZGRcWHgoXIAoZEDcmBgEeBAEiIzUCAUcjAUFOAS1wYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2Nhbm9uaWNhbGl6ZWRfbWFwLmRhcnRUc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9pdGVyYWJsZS5kYXJ0h9kvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKLy8vIEEgdmlldyBvZiBzZXZlcmFsIGl0ZXJhYmxlcyBjb21iaW5lZCBzZXF1ZW50aWFsbHkgaW50byBhIHNpbmdsZSBpdGVyYWJsZS4KLy8vCi8vLyBBbGwgbWV0aG9kcyBhbmQgYWNjZXNzb3JzIHRyZWF0IHRoZSBbQ29tYmluZWRJdGVyYWJsZVZpZXddIGFzIGlmIGl0IHdlcmUgYQovLy8gc2luZ2xlIGNvbmNhdGVuYXRlZCBpdGVyYWJsZSwgYnV0IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uCi8vLyBsYXppbHkgYWNjZXNzaW5nIGluZGl2aWR1YWwgaXRlcmFibGUgaW5zdGFuY2VzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlCi8vLyB1bmRlcmx5aW5nIGl0ZXJhYmxlcyBjaGFuZ2UsIHRoZSBbQ29tYmluZWRJdGVyYWJsZVZpZXddIHdpbGwgcmVmbGVjdCB0aG9zZQovLy8gY2hhbmdlcy4KY2xhc3MgQ29tYmluZWRJdGVyYWJsZVZpZXc8VD4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8VD4gewogIC8vLyBUaGUgaXRlcmFibGVzIHRoYXQgdGhpcyBjb21iaW5lcy4KICBmaW5hbCBJdGVyYWJsZTxJdGVyYWJsZTxUPj4gX2l0ZXJhYmxlczsKCiAgLy8vIENyZWF0ZXMgYSBjb21iaW5lZCB2aWV3IG9mIFtpdGVyYWJsZXNdLgogIGNvbnN0IENvbWJpbmVkSXRlcmFibGVWaWV3KHRoaXMuX2l0ZXJhYmxlcyk7CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciA9PgogICAgICBuZXcgX0NvbWJpbmVkSXRlcmF0b3I8VD4oX2l0ZXJhYmxlcy5tYXAoKGkpID0+IGkuaXRlcmF0b3IpLml0ZXJhdG9yKTsKCiAgLy8gU3BlY2lhbCBjYXNlZCBjb250YWlucy9pc0VtcHR5L2xlbmd0aCBzaW5jZSBtYW55IGl0ZXJhYmxlcyBoYXZlIGFuCiAgLy8gZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgcnVubmluZyB0aHJvdWdoIHRoZSBlbnRpcmUgaXRlcmF0b3IuCgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpID0+IF9pdGVyYWJsZXMuYW55KChpKSA9PiBpLmNvbnRhaW5zKGVsZW1lbnQpKTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfaXRlcmFibGVzLmV2ZXJ5KChpKSA9PiBpLmlzRW1wdHkpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfaXRlcmFibGVzLmZvbGQoMCwgKGxlbmd0aCwgaSkgPT4gbGVuZ3RoICsgaS5sZW5ndGgpOwp9CgovLy8gVGhlIGl0ZXJhdG9yIGZvciBbQ29tYmluZWRJdGVyYWJsZVZpZXddLgovLy8KLy8vIFRoaXMgbW92ZXMgdGhyb3VnaCBlYWNoIGl0ZXJhYmxlJ3MgaXRlcmF0b3JzIGluIHNlcXVlbmNlLgpjbGFzcyBfQ29tYmluZWRJdGVyYXRvcjxUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICAvLy8gVGhlIGl0ZXJhdG9ycyB0aGF0IHRoaXMgY29tYmluZXMuCiAgLy8vCiAgLy8vIEJlY2F1c2UgdGhpcyBjb21lcyBmcm9tIGEgY2FsbCB0byBbSXRlcmFibGUubWFwXSwgaXQncyBsYXp5IGFuZCB3aWxsCiAgLy8vIGF2b2lkIGluc3RhbnRpYXRpbmcgdW5uZWNlc3NhcnkgaXRlcmF0b3JzLgogIGZpbmFsIEl0ZXJhdG9yPEl0ZXJhdG9yPFQ+PiBfaXRlcmF0b3JzOwoKICBfQ29tYmluZWRJdGVyYXRvcih0aGlzLl9pdGVyYXRvcnMpOwoKICBUIGdldCBjdXJyZW50ID0+IF9pdGVyYXRvcnMuY3VycmVudD8uY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIHZhciBjdXJyZW50ID0gX2l0ZXJhdG9ycy5jdXJyZW50OwogICAgaWYgKGN1cnJlbnQgIT0gbnVsbCAmJiBjdXJyZW50Lm1vdmVOZXh0KCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gX2l0ZXJhdG9ycy5tb3ZlTmV4dCgpICYmIG1vdmVOZXh0KCk7CiAgfQp9CjkATk48ARoBTgRPUEtPDTgoKgEuLwEeTAFITgFPAToBSgIBLQQ+NCgGSzEqASYBMAEUJjETBjAEAgE/cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9pdGVyYWJsZS5kYXJ0UHNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvY29tYmluZWRfd3JhcHBlcnMvY29tYmluZWRfbGlzdC5kYXJ0hykvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKLy8vIEEgdmlldyBvZiBzZXZlcmFsIGxpc3RzIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgbGlzdC4KLy8vCi8vLyBBbGwgbWV0aG9kcyBhbmQgYWNjZXNzb3JzIHRyZWF0IHRoZSBbQ29tYmluZWRMaXN0Vmlld10gbGlzdCBhcyBpZiBpdCB3ZXJlIGEKLy8vIHNpbmdsZSBjb25jYXRlbmF0ZWQgbGlzdCwgYnV0IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uCi8vLyBsYXppbHkgYWNjZXNzaW5nIGluZGl2aWR1YWwgbGlzdCBpbnN0YW5jZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUKLy8vIHVuZGVybHlpbmcgbGlzdHMgY2hhbmdlLCB0aGUgW0NvbWJpbmVkTGlzdFZpZXddIHdpbGwgcmVmbGVjdCB0aG9zZSBjaGFuZ2VzLgovLy8KLy8vIFRoZSBpbmRleCBvcGVyYXRvciAoYFtdYCkgYW5kIFtsZW5ndGhdIHByb3BlcnR5IG9mIGEgW0NvbWJpbmVkTGlzdFZpZXddIGFyZQovLy8gYm90aCBgTyhsaXN0cylgIHJhdGhlciB0aGFuIGBPKDEpYC4gQSBbQ29tYmluZWRMaXN0Vmlld10gaXMgdW5tb2RpZmlhYmxlLgpjbGFzcyBDb21iaW5lZExpc3RWaWV3PFQ+IGV4dGVuZHMgTGlzdEJhc2U8VD4KICAgIGltcGxlbWVudHMgVW5tb2RpZmlhYmxlTGlzdFZpZXc8VD4gewogIHN0YXRpYyB2b2lkIF90aHJvdygpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBMaXN0Jyk7CiAgfQoKICAvLy8gVGhlIGxpc3RzIHRoYXQgdGhpcyBjb21iaW5lcy4KICBmaW5hbCBMaXN0PExpc3Q8VD4+IF9saXN0czsKCiAgLy8vIENyZWF0ZXMgYSBjb21iaW5lZCB2aWV3IG9mIFtsaXN0c10uCiAgQ29tYmluZWRMaXN0Vmlldyh0aGlzLl9saXN0cyk7CgogIHNldCBsZW5ndGgoaW50IGxlbmd0aCkgewogICAgX3Rocm93KCk7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGlzdHMuZm9sZCgwLCAobGVuZ3RoLCBsaXN0KSA9PiBsZW5ndGggKyBsaXN0Lmxlbmd0aCk7CgogIFQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICB2YXIgaW5pdGlhbEluZGV4ID0gaW5kZXg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9saXN0cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgbGlzdCA9IF9saXN0c1tpXTsKICAgICAgaWYgKGluZGV4IDwgbGlzdC5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gbGlzdFtpbmRleF07CiAgICAgIH0KICAgICAgaW5kZXggLT0gbGlzdC5sZW5ndGg7CiAgICB9CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbml0aWFsSW5kZXgsIHRoaXMsICdpbmRleCcsIG51bGwsIGxlbmd0aCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIFQgdmFsdWUpIHsKICAgIF90aHJvdygpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF90aHJvdygpOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIF90aHJvdygpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfdGhyb3coKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF90aHJvdygpOwogIH0KfQpEAE5OPAEaATkEUExHUARQTi4pGUYEASQeASohARsOBAFMAR0eLhwhHAgcBksEASoOBAERDgQBIA4RBAErDgQBKw4EAgE7cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9saXN0LmRhcnQ3b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vY29sbGVjdGlvbnMuZGFydIOoLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEFuIHVubW9kaWZpYWJsZSBbTGlzdF0gdmlldyBvZiBhbm90aGVyIExpc3QuCi8vLwovLy8gVGhlIHNvdXJjZSBvZiB0aGUgZWxlbWVudHMgbWF5IGJlIGEgW0xpc3RdIG9yIGFueSBbSXRlcmFibGVdIHdpdGgKLy8vIGVmZmljaWVudCBbSXRlcmFibGUubGVuZ3RoXSBhbmQgW0l0ZXJhYmxlLmVsZW1lbnRBdF0uCmNsYXNzIFVubW9kaWZpYWJsZUxpc3RWaWV3PEU+IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9zb3VyY2U7CgogIC8vLyBDcmVhdGVzIGFuIHVubW9kaWZpYWJsZSBsaXN0IGJhY2tlZCBieSBbc291cmNlXS4KICAvLy8KICAvLy8gVGhlIFtzb3VyY2VdIG9mIHRoZSBlbGVtZW50cyBtYXkgYmUgYSBbTGlzdF0gb3IgYW55IFtJdGVyYWJsZV0gd2l0aAogIC8vLyBlZmZpY2llbnQgW0l0ZXJhYmxlLmxlbmd0aF0gYW5kIFtJdGVyYWJsZS5lbGVtZW50QXRdLgogIFVubW9kaWZpYWJsZUxpc3RWaWV3KEl0ZXJhYmxlPEU+IHNvdXJjZSkgOiBfc291cmNlID0gc291cmNlOwoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBVbm1vZGlmaWFibGVMaXN0Vmlldyhfc291cmNlLmNhc3Q8Uj4oKSk7CiAgaW50IGdldCBsZW5ndGggPT4gX3NvdXJjZS5sZW5ndGg7CgogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBfc291cmNlLmVsZW1lbnRBdChpbmRleCk7Cn0KGgBOTjwBGQExBEY6QB0BNwZKPD8BQCQBOAIBIGRhcnQ6Y29sbGVjdGlvbi9jb2xsZWN0aW9ucy5kYXJ0T3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvY29tYmluZWRfd3JhcHBlcnMvY29tYmluZWRfbWFwLmRhcnSH+y8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJ2NvbWJpbmVkX2l0ZXJhYmxlLmRhcnQnOwoKLy8vIFJldHVybnMgYSBuZXcgbWFwIHRoYXQgcmVwcmVzZW50cyBtYXBzIGZsYXR0ZW5lZCBpbnRvIGEgc2luZ2xlIG1hcC4KLy8vCi8vLyBBbGwgbWV0aG9kcyBhbmQgYWNjZXNzb3JzIHRyZWF0IHRoZSBuZXcgbWFwIGFzLWlmIGl0IHdlcmUgYSBzaW5nbGUKLy8vIGNvbmNhdGVuYXRlZCBtYXAsIGJ1dCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBsYXppbHkKLy8vIGFjY2Vzc2luZyBpbmRpdmlkdWFsIG1hcCBpbnN0YW5jZXMuIEluIHRoZSBvY2Nhc2lvbiB3aGVyZSBhIGtleSBvY2N1cnMgaW4KLy8vIG11bHRpcGxlIG1hcHMgdGhlIGZpcnN0IHZhbHVlIGlzIHJldHVybmVkLgovLy8KLy8vIFRoZSByZXN1bHRpbmcgbWFwIGhhcyBhbiBpbmRleCBvcGVyYXRvciAoYFtdYCkgYW5kIGBsZW5ndGhgIHByb3BlcnR5IHRoYXQKLy8vIGFyZSBib3RoIGBPKG1hcHMpYCwgcmF0aGVyIHRoYW4gYE8oMSlgLCBhbmQgdGhlIG1hcCBpcyB1bm1vZGlmaWFibGUgLSBidXQKLy8vIHVuZGVybHlpbmcgY2hhbmdlcyB0byB0aGVzZSBtYXBzIGFyZSBzdGlsbCBhY2Nlc3NpYmxlIGZyb20gdGhlIHJlc3VsdGluZwovLy8gbWFwLgpjbGFzcyBDb21iaW5lZE1hcFZpZXc8SywgVj4gZXh0ZW5kcyBVbm1vZGlmaWFibGVNYXBCYXNlPEssIFY+IHsKICBmaW5hbCBJdGVyYWJsZTxNYXA8SywgVj4+IF9tYXBzOwoKICAvLy8gQ3JlYXRlIGEgbmV3IGNvbWJpbmVkIHZpZXcgaW50byBtdWx0aXBsZSBtYXBzLgogIC8vLwogIC8vLyBUaGUgaXRlcmFibGUgaXMgYWNjZXNzZWQgbGF6aWx5IHNvIGl0IHNob3VsZCBiZSBjb2xsZWN0aW9uIHR5cGUgbGlrZQogIC8vLyBbTGlzdF0gb3IgW1NldF0gcmF0aGVyIHRoYW4gYSBsYXp5IGl0ZXJhYmxlIHByb2R1Y2VkIGJ5IGBtYXAoKWAgZXQgYWwuCiAgQ29tYmluZWRNYXBWaWV3KHRoaXMuX21hcHMpOwoKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpIHsKICAgIGZvciAodmFyIG1hcCBpbiBfbWFwcykgewogICAgICAvLyBBdm9pZCB0d28gaGFzaCBsb29rdXBzIG9uIGEgcG9zaXRpdmUgaGl0LgogICAgICB2YXIgdmFsdWUgPSBtYXBba2V5XTsKICAgICAgaWYgKHZhbHVlICE9IG51bGwgfHwgbWFwLmNvbnRhaW5zS2V5KHZhbHVlKSkgewogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gVGhlIGtleXMgb2YgW3RoaXNdLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgaXRlcmFibGUgaGFzIGVmZmljaWVudCBgbGVuZ3RoYCBhbmQgYGNvbnRhaW5zYCBvcGVyYXRpb25zLAogIC8vLyBiYXNlZCBvbiBbbGVuZ3RoXSBhbmQgW2NvbnRhaW5zS2V5XSBvZiB0aGUgaW5kaXZpZHVhbCBtYXBzLgogIC8vLwogIC8vLyBUaGUgb3JkZXIgb2YgaXRlcmF0aW9uIGlzIGRlZmluZWQgYnkgdGhlIGluZGl2aWR1YWwgYE1hcGAgaW1wbGVtZW50YXRpb25zLAogIC8vLyBidXQgbXVzdCBiZSBjb25zaXN0ZW50IGJldHdlZW4gY2hhbmdlcyB0byB0aGUgbWFwcy4KICAvLy8KICAvLy8gVW5saWtlIG1vc3QgW01hcF0gaW1wbGVtZW50YXRpb25zLCBtb2RpZnlpbmcgYW4gaW5kaXZpZHVhbCBtYXAgd2hpbGUKICAvLy8gaXRlcmF0aW5nIHRoZSBrZXlzIHdpbGwgX3NvbWV0aW1lc18gdGhyb3cuIFRoaXMgYmVoYXZpb3IgbWF5IGNoYW5nZSBpbgogIC8vLyB0aGUgZnV0dXJlLgogIEl0ZXJhYmxlPEs+IGdldCBrZXlzID0+IG5ldyBDb21iaW5lZEl0ZXJhYmxlVmlldzxLPihfbWFwcy5tYXAoKG0pID0+IG0ua2V5cykpOwp9CjYATk48ARoBIQFIBEdLTi8ETk5NCUAjATUGS00fAR4dMxw1FggGEQQBGgZOQgZROgZLTRJRAgE6cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9tYXAuZGFydDxzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2NvbXBhcmF0b3JzLmRhcnS6cS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlDQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQ0KLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCg0KLy8gQ2hhcmFjdGVyIGNvbnN0YW50cy4NCmNvbnN0IGludCBfemVybyA9IDB4MzA7DQpjb25zdCBpbnQgX3VwcGVyQ2FzZUEgPSAweDQxOw0KY29uc3QgaW50IF91cHBlckNhc2VaID0gMHg1YTsNCmNvbnN0IGludCBfbG93ZXJDYXNlQSA9IDB4NjE7DQpjb25zdCBpbnQgX2xvd2VyQ2FzZVogPSAweDdhOw0KY29uc3QgaW50IF9hc2NpaUNhc2VCaXQgPSAweDIwOw0KDQovLy8gQ2hlY2tzIGlmIHN0cmluZ3MgW2FdIGFuZCBbYl0gZGlmZmVyIG9ubHkgb24gdGhlIGNhc2Ugb2YgQVNDSUkgbGV0dGVycy4NCi8vLw0KLy8vIFN0cmluZ3MgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBsZW5ndGgsIGFuZCB0aGUgY2hhcmFjdGVycyBhdA0KLy8vIGVhY2ggaW5kZXggYXJlIHRoZSBzYW1lLCBvciB0aGV5IGFyZSBBU0NJSSBsZXR0ZXJzIHdoZXJlIG9uZSBpcyB1cHBlci1jYXNlDQovLy8gYW5kIHRoZSBvdGhlciBpcyB0aGUgbG93ZXItY2FzZSB2ZXJzaW9uIG9mIHRoZSBzYW1lIGxldHRlci4NCi8vLw0KLy8vIFRoZSBjb21wYXJpc29uIGRvZXMgbm90IGlnbm9yZSB0aGUgY2FzZSBvZiBub24tQVNDSUkgbGV0dGVycywgc28NCi8vLyBhbiB1cHBlci1jYXNlIGFlLWxpZ2F0dXJlICjDhikgaXMgZGlmZmVyZW50IGZyb20NCi8vLyBhIGxvd2VyIGNhc2UgYWUtbGlnYXR1cmUgKMOmKS4NCi8vLw0KLy8vIElnbm9yaW5nIG5vbi1BU0NJSSBsZXR0ZXJzIGlzIG5vdCBnZW5lcmFsbHkgYSBnb29kIGlkZWEsIGJ1dCBpdCBtYWtlcyBzZW5zZQ0KLy8vIGZvciBzaXR1YXRpb25zIHdoZXJlIHRoZSBzdHJpbmdzIGFyZSBrbm93biB0byBiZSBBU0NJSS4gRXhhbXBsZXMgY291bGQNCi8vLyBiZSBEYXJ0IGlkZW50aWZpZXJzLCBiYXNlLTY0IG9yIGhleCBlbmNvZGVkIHN0cmluZ3MsIEdVSURzIG9yIHNpbWlsYXINCi8vLyBzdHJpbmdzIHdpdGggYSBrbm93biBzdHJ1Y3R1cmUuDQpib29sIGVxdWFsc0lnbm9yZUFzY2lpQ2FzZShTdHJpbmcgYSwgU3RyaW5nIGIpIHsNCiAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7DQogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgew0KICAgIHZhciBhQ2hhciA9IGEuY29kZVVuaXRBdChpKTsNCiAgICB2YXIgYkNoYXIgPSBiLmNvZGVVbml0QXQoaSk7DQogICAgaWYgKGFDaGFyID09IGJDaGFyKSBjb250aW51ZTsNCiAgICAvLyBRdWljay1jaGVjayBmb3Igd2hldGhlciB0aGlzIG1heSBiZSBkaWZmZXJlbnQgY2FzZXMgb2YgdGhlIHNhbWUgbGV0dGVyLg0KICAgIGlmIChhQ2hhciBeIGJDaGFyICE9IF9hc2NpaUNhc2VCaXQpIHJldHVybiBmYWxzZTsNCiAgICAvLyBJZiBpdCdzIHBvc3NpYmxlLCB0aGVuIGNoZWNrIGlmIGVpdGhlciBjaGFyYWN0ZXIgaXMgYWN0dWFsbHkgYW4gQVNDSUkNCiAgICAvLyBsZXR0ZXIuDQogICAgaW50IGFDaGFyTG93ZXJDYXNlID0gYUNoYXIgfCBfYXNjaWlDYXNlQml0Ow0KICAgIGlmIChfbG93ZXJDYXNlQSA8PSBhQ2hhckxvd2VyQ2FzZSAmJiBhQ2hhckxvd2VyQ2FzZSA8PSBfbG93ZXJDYXNlWikgew0KICAgICAgY29udGludWU7DQogICAgfQ0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KLy8vIEhhc2ggY29kZSBmb3IgYSBzdHJpbmcgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIFtlcXVhbHNJZ25vcmVBc2NpaUNhc2VdLg0KLy8vDQovLy8gVGhlIGhhc2ggY29kZSBpcyB1bmFmZmVjdGVkIGJ5IGNoYW5naW5nIHRoZSBjYXNlIG9mIEFTQ0lJIGxldHRlcnMsIGJ1dA0KLy8vIHRoZSBjYXNlIG9mIG5vbi1BU0NJSSBsZXR0ZXJzIGRvIGFmZmVjdCB0aGUgcmVzdWx0Lg0KaW50IGhhc2hJZ25vcmVBc2NpaUNhc2UoU3RyaW5nIHN0cmluZykgew0KICAvLyBKZW5raW5zIGhhc2ggY29kZSAoIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmVua2luc19oYXNoX2Z1bmN0aW9uKS4NCiAgLy8gYWRhcHRlZCB0byBzbWkgdmFsdWVzLg0KICAvLyBTYW1lIGhhc2ggdXNlZCBieSBkYXJ0MmpzIGZvciBzdHJpbmdzLCBtb2RpZmllZCB0byBpZ25vcmUgQVNDSUkgbGV0dGVyDQogIC8vIGNhc2UuDQogIGludCBoYXNoID0gMDsNCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHsNCiAgICBpbnQgY2hhciA9IHN0cmluZy5jb2RlVW5pdEF0KGkpOw0KICAgIC8vIENvbnZlcnQgbG93ZXItY2FzZSBBU0NJSSBsZXR0ZXJzIHRvIHVwcGVyIGNhc2UudXBwZXINCiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBzdHJpbmdzIHRoYXQgZGlmZmVyIG9ubHkgaW4gY2FzZSB3aWxsIGhhdmUgdGhlDQogICAgLy8gc2FtZSBoYXNoIGNvZGUuDQogICAgaWYgKF9sb3dlckNhc2VBIDw9IGNoYXIgJiYgY2hhciA8PSBfbG93ZXJDYXNlWikgY2hhciAtPSBfYXNjaWlDYXNlQml0Ow0KICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyBjaGFyKTsNCiAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDdmZmZmICYgaGFzaCkgPDwgMTApKTsNCiAgICBoYXNoID4+PSA2Ow0KICB9DQogIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDNmZmZmZmYgJiBoYXNoKSA8PCAzKSk7DQogIGhhc2ggPj49IDExOw0KICByZXR1cm4gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDAzZmZmICYgaGFzaCkgPDwgMTUpKTsNCn0NCg0KLy8vIENvbXBhcmVzIFthXSBhbmQgW2JdIGxleGljYWxseSwgY29udmVydGluZyBBU0NJSSBsZXR0ZXJzIHRvIHVwcGVyIGNhc2UuDQovLy8NCi8vLyBDb21wYXJpc29uIHRyZWF0cyBhbGwgbG93ZXItY2FzZSBBU0NJSSBsZXR0ZXJzIGFzIHVwcGVyLWNhc2UgbGV0dGVycywNCi8vLyBidXQgZG9lcyBubyBjYXNlIGNvbnZlcnNpb24gZm9yIG5vbi1BU0NJSSBsZXR0ZXJzLg0KLy8vDQovLy8gSWYgdHdvIHN0cmluZ3MgZGlmZmVyIG9ubHkgb24gdGhlIGNhc2Ugb2YgQVNDSUkgbGV0dGVycywgdGhlIG9uZSB3aXRoIHRoZQ0KLy8vIGNhcGl0YWwgbGV0dGVyIGF0IHRoZSBmaXJzdCBkaWZmZXJlbmNlIHdpbGwgY29tcGFyZSBhcyBsZXNzIHRoYW4gdGhlIG90aGVyDQovLy8gc3RyaW5nLiBUaGlzIHRpZS1icmVha2luZyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBhcmlzb24gaXMgYSB0b3RhbCBvcmRlcmluZw0KLy8vIG9uIHN0cmluZ3MgYW5kIGlzIGNvbXBhdGlibGUgd2l0aCBlcXVhbGl0eS4NCi8vLw0KLy8vIElnbm9yaW5nIG5vbi1BU0NJSSBsZXR0ZXJzIGlzIG5vdCBnZW5lcmFsbHkgYSBnb29kIGlkZWEsIGJ1dCBpdCBtYWtlcyBzZW5zZQ0KLy8vIGZvciBzaXR1YXRpb25zIHdoZXJlIHRoZSBzdHJpbmdzIGFyZSBrbm93biB0byBiZSBBU0NJSS4gRXhhbXBsZXMgY291bGQNCi8vLyBiZSBEYXJ0IGlkZW50aWZpZXJzLCBiYXNlLTY0IG9yIGhleCBlbmNvZGVkIHN0cmluZ3MsIEdVSURzIG9yIHNpbWlsYXINCi8vLyBzdHJpbmdzIHdpdGggYSBrbm93biBzdHJ1Y3R1cmUuDQppbnQgY29tcGFyZUFzY2lpVXBwZXJDYXNlKFN0cmluZyBhLCBTdHJpbmcgYikgew0KICBpbnQgZGVmYXVsdFJlc3VsdCA9IDA7IC8vIFJldHVybmVkIGlmIG5vIGRpZmZlcmVuY2UgZm91bmQuDQogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgew0KICAgIGlmIChpID49IGIubGVuZ3RoKSByZXR1cm4gMTsNCiAgICB2YXIgYUNoYXIgPSBhLmNvZGVVbml0QXQoaSk7DQogICAgdmFyIGJDaGFyID0gYi5jb2RlVW5pdEF0KGkpOw0KICAgIGlmIChhQ2hhciA9PSBiQ2hhcikgY29udGludWU7DQogICAgLy8gVXBwZXItY2FzZSBpZiBsZXR0ZXJzLg0KICAgIGludCBhVXBwZXJDYXNlID0gYUNoYXI7DQogICAgaW50IGJVcHBlckNhc2UgPSBiQ2hhcjsNCiAgICBpZiAoX2xvd2VyQ2FzZUEgPD0gYUNoYXIgJiYgYUNoYXIgPD0gX2xvd2VyQ2FzZVopIHsNCiAgICAgIGFVcHBlckNhc2UgLT0gX2FzY2lpQ2FzZUJpdDsNCiAgICB9DQogICAgaWYgKF9sb3dlckNhc2VBIDw9IGJDaGFyICYmIGJDaGFyIDw9IF9sb3dlckNhc2VaKSB7DQogICAgICBiVXBwZXJDYXNlIC09IF9hc2NpaUNhc2VCaXQ7DQogICAgfQ0KICAgIGlmIChhVXBwZXJDYXNlICE9IGJVcHBlckNhc2UpIHJldHVybiAoYVVwcGVyQ2FzZSAtIGJVcHBlckNhc2UpLnNpZ247DQogICAgaWYgKGRlZmF1bHRSZXN1bHQgPT0gMCkgZGVmYXVsdFJlc3VsdCA9IChhQ2hhciAtIGJDaGFyKTsNCiAgfQ0KICBpZiAoYi5sZW5ndGggPiBhLmxlbmd0aCkgcmV0dXJuIC0xOw0KICByZXR1cm4gZGVmYXVsdFJlc3VsdC5zaWduOw0KfQ0KDQovLy8gQ29tcGFyZXMgW2FdIGFuZCBbYl0gbGV4aWNhbGx5LCBjb252ZXJ0aW5nIEFTQ0lJIGxldHRlcnMgdG8gbG93ZXIgY2FzZS4NCi8vLw0KLy8vIENvbXBhcmlzb24gdHJlYXRzIGFsbCB1cHBlci1jYXNlIEFTQ0lJIGxldHRlcnMgYXMgbG93ZXItY2FzZSBsZXR0ZXJzLA0KLy8vIGJ1dCBkb2VzIG5vIGNhc2UgY29udmVyc2lvbiBmb3Igbm9uLUFTQ0lJIGxldHRlcnMuDQovLy8NCi8vLyBJZiB0d28gc3RyaW5ncyBkaWZmZXIgb25seSBvbiB0aGUgY2FzZSBvZiBBU0NJSSBsZXR0ZXJzLCB0aGUgb25lIHdpdGggdGhlDQovLy8gY2FwaXRhbCBsZXR0ZXIgYXQgdGhlIGZpcnN0IGRpZmZlcmVuY2Ugd2lsbCBjb21wYXJlIGFzIGxlc3MgdGhhbiB0aGUgb3RoZXINCi8vLyBzdHJpbmcuIFRoaXMgdGllLWJyZWFraW5nIGVuc3VyZXMgdGhhdCB0aGUgY29tcGFyaXNvbiBpcyBhIHRvdGFsIG9yZGVyaW5nDQovLy8gb24gc3RyaW5ncy4NCi8vLw0KLy8vIElnbm9yaW5nIG5vbi1BU0NJSSBsZXR0ZXJzIGlzIG5vdCBnZW5lcmFsbHkgYSBnb29kIGlkZWEsIGJ1dCBpdCBtYWtlcyBzZW5zZQ0KLy8vIGZvciBzaXR1YXRpb25zIHdoZXJlIHRoZSBzdHJpbmdzIGFyZSBrbm93biB0byBiZSBBU0NJSS4gRXhhbXBsZXMgY291bGQNCi8vLyBiZSBEYXJ0IGlkZW50aWZpZXJzLCBiYXNlLTY0IG9yIGhleCBlbmNvZGVkIHN0cmluZ3MsIEdVSURzIG9yIHNpbWlsYXINCi8vLyBzdHJpbmdzIHdpdGggYSBrbm93biBzdHJ1Y3R1cmUuDQppbnQgY29tcGFyZUFzY2lpTG93ZXJDYXNlKFN0cmluZyBhLCBTdHJpbmcgYikgew0KICBpbnQgZGVmYXVsdFJlc3VsdCA9IDA7DQogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgew0KICAgIGlmIChpID49IGIubGVuZ3RoKSByZXR1cm4gMTsNCiAgICB2YXIgYUNoYXIgPSBhLmNvZGVVbml0QXQoaSk7DQogICAgdmFyIGJDaGFyID0gYi5jb2RlVW5pdEF0KGkpOw0KICAgIGlmIChhQ2hhciA9PSBiQ2hhcikgY29udGludWU7DQogICAgaW50IGFMb3dlckNhc2UgPSBhQ2hhcjsNCiAgICBpbnQgYkxvd2VyQ2FzZSA9IGJDaGFyOw0KICAgIC8vIFVwcGVyIGNhc2UgaWYgQVNDSUkgbGV0dGVycy4NCiAgICBpZiAoX3VwcGVyQ2FzZUEgPD0gYkNoYXIgJiYgYkNoYXIgPD0gX3VwcGVyQ2FzZVopIHsNCiAgICAgIGJMb3dlckNhc2UgKz0gX2FzY2lpQ2FzZUJpdDsNCiAgICB9DQogICAgaWYgKF91cHBlckNhc2VBIDw9IGFDaGFyICYmIGFDaGFyIDw9IF91cHBlckNhc2VaKSB7DQogICAgICBhTG93ZXJDYXNlICs9IF9hc2NpaUNhc2VCaXQ7DQogICAgfQ0KICAgIGlmIChhTG93ZXJDYXNlICE9IGJMb3dlckNhc2UpIHJldHVybiAoYUxvd2VyQ2FzZSAtIGJMb3dlckNhc2UpLnNpZ247DQogICAgaWYgKGRlZmF1bHRSZXN1bHQgPT0gMCkgZGVmYXVsdFJlc3VsdCA9IGFDaGFyIC0gYkNoYXI7DQogIH0NCiAgaWYgKGIubGVuZ3RoID4gYS5sZW5ndGgpIHJldHVybiAtMTsNCiAgcmV0dXJuIGRlZmF1bHRSZXN1bHQuc2lnbjsNCn0NCg0KLy8vIENvbXBhcmVzIHN0cmluZ3MgW2FdIGFuZCBbYl0gYWNjb3JkaW5nIHRvIFtuYXR1cmFsIHNvcnQgb3JkZXJpbmddW10uDQovLy8NCi8vLyBBIG5hdHVyYWwgc29ydCBvcmRlcmluZyBpcyBhIGxleGljYWwgb3JkZXJpbmcgd2hlcmUgZW1iZWRkZWQNCi8vLyBudW1lcmFscyAoZGlnaXQgc2VxdWVuY2VzKSBhcmUgdHJlYXRlZCBhcyBhIHNpbmdsZSB1bml0IGFuZCBvcmRlcmVkIGJ5DQovLy8gbnVtZXJpY2FsIHZhbHVlLg0KLy8vIFRoaXMgbWVhbnMgdGhhdCBgImExMGIiYCB3aWxsIGJlIG9yZGVyZWQgYWZ0ZXIgYCJhN2IiYCBpbiBuYXR1cmFsDQovLy8gb3JkZXJpbmcsIHdoZXJlIGxleGljYWwgb3JkZXJpbmcgd291bGQgcHV0IHRoZSBgMWAgYmVmb3JlIHRoZSBgN2AsIGlnbm9yaW5nDQovLy8gdGhhdCB0aGUgYDFgIGlzIHBhcnQgb2YgYSBsYXJnZXIgbnVtYmVyLg0KLy8vDQovLy8gRXhhbXBsZToNCi8vLyBUaGUgZm9sbG93aW5nIHN0cmluZ3MgYXJlIGluIHRoZSBvcmRlciB0aGV5IHdvdWxkIGJlIHNvcnRlZCBieSB1c2luZyB0aGlzDQovLy8gY29tcGFyaXNvbiBmdW5jdGlvbjoNCi8vLw0KLy8vICAgICAiYSIsICJhMCIsICJhMGIiLCAiYTEiLCAiYTAxIiwgImE5IiwgImExMCIsICJhMTAwIiwgImExMDBiIiwgImFhIg0KLy8vDQovLy8gW25hdHVyYWwgc29ydCBvcmRlcmluZ106IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05hdHVyYWxfc29ydF9vcmRlcg0KaW50IGNvbXBhcmVOYXR1cmFsKFN0cmluZyBhLCBTdHJpbmcgYikgew0KICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsNCiAgICBpZiAoaSA+PSBiLmxlbmd0aCkgcmV0dXJuIDE7DQogICAgdmFyIGFDaGFyID0gYS5jb2RlVW5pdEF0KGkpOw0KICAgIHZhciBiQ2hhciA9IGIuY29kZVVuaXRBdChpKTsNCiAgICBpZiAoYUNoYXIgIT0gYkNoYXIpIHsNCiAgICAgIHJldHVybiBfY29tcGFyZU5hdHVyYWxseShhLCBiLCBpLCBhQ2hhciwgYkNoYXIpOw0KICAgIH0NCiAgfQ0KICBpZiAoYi5sZW5ndGggPiBhLmxlbmd0aCkgcmV0dXJuIC0xOw0KICByZXR1cm4gMDsNCn0NCg0KLy8vIENvbXBhcmVzIHN0cmluZ3MgW2FdIGFuZCBbYl0gYWNjb3JkaW5nIHRvIGxvd2VyLWNhc2UNCi8vLyBbbmF0dXJhbCBzb3J0IG9yZGVyaW5nXVtdLg0KLy8vDQovLy8gQVNDSUkgbGV0dGVycyBhcmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UgYmVmb3JlIGJlaW5nIGNvbXBhcmVkLCBsaWtlDQovLy8gZm9yIFtjb21wYXJlQXNjaWlMb3dlckNhc2VdLCB0aGVuIHRoZSByZXN1bHQgaXMgY29tcGFyZWQgbGlrZSBmb3INCi8vLyBbY29tcGFyZU5hdHVyYWxdLg0KLy8vDQovLy8gSWYgdHdvIHN0cmluZ3MgZGlmZmVyIG9ubHkgb24gdGhlIGNhc2Ugb2YgQVNDSUkgbGV0dGVycywgdGhlIG9uZSB3aXRoIHRoZQ0KLy8vIGNhcGl0YWwgbGV0dGVyIGF0IHRoZSBmaXJzdCBkaWZmZXJlbmNlIHdpbGwgY29tcGFyZSBhcyBsZXNzIHRoYW4gdGhlIG90aGVyDQovLy8gc3RyaW5nLiBUaGlzIHRpZS1icmVha2luZyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBhcmlzb24gaXMgYSB0b3RhbCBvcmRlcmluZw0KLy8vIG9uIHN0cmluZ3MuDQovLy8NCi8vLyBbbmF0dXJhbCBzb3J0IG9yZGVyaW5nXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmF0dXJhbF9zb3J0X29yZGVyDQppbnQgY29tcGFyZUFzY2lpTG93ZXJDYXNlTmF0dXJhbChTdHJpbmcgYSwgU3RyaW5nIGIpIHsNCiAgaW50IGRlZmF1bHRSZXN1bHQgPSAwOyAvLyBSZXR1cm5lZCBpZiBubyBkaWZmZXJlbmNlIGZvdW5kLg0KICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsNCiAgICBpZiAoaSA+PSBiLmxlbmd0aCkgcmV0dXJuIDE7DQogICAgdmFyIGFDaGFyID0gYS5jb2RlVW5pdEF0KGkpOw0KICAgIHZhciBiQ2hhciA9IGIuY29kZVVuaXRBdChpKTsNCiAgICBpZiAoYUNoYXIgPT0gYkNoYXIpIGNvbnRpbnVlOw0KICAgIGludCBhTG93ZXJDYXNlID0gYUNoYXI7DQogICAgaW50IGJMb3dlckNhc2UgPSBiQ2hhcjsNCiAgICBpZiAoX3VwcGVyQ2FzZUEgPD0gYUNoYXIgJiYgYUNoYXIgPD0gX3VwcGVyQ2FzZVopIHsNCiAgICAgIGFMb3dlckNhc2UgKz0gX2FzY2lpQ2FzZUJpdDsNCiAgICB9DQogICAgaWYgKF91cHBlckNhc2VBIDw9IGJDaGFyICYmIGJDaGFyIDw9IF91cHBlckNhc2VaKSB7DQogICAgICBiTG93ZXJDYXNlICs9IF9hc2NpaUNhc2VCaXQ7DQogICAgfQ0KICAgIGlmIChhTG93ZXJDYXNlICE9IGJMb3dlckNhc2UpIHsNCiAgICAgIHJldHVybiBfY29tcGFyZU5hdHVyYWxseShhLCBiLCBpLCBhTG93ZXJDYXNlLCBiTG93ZXJDYXNlKTsNCiAgICB9DQogICAgaWYgKGRlZmF1bHRSZXN1bHQgPT0gMCkgZGVmYXVsdFJlc3VsdCA9IGFDaGFyIC0gYkNoYXI7DQogIH0NCiAgaWYgKGIubGVuZ3RoID4gYS5sZW5ndGgpIHJldHVybiAtMTsNCiAgcmV0dXJuIGRlZmF1bHRSZXN1bHQuc2lnbjsNCn0NCg0KLy8vIENvbXBhcmVzIHN0cmluZ3MgW2FdIGFuZCBbYl0gYWNjb3JkaW5nIHRvIHVwcGVyLWNhc2UNCi8vLyBbbmF0dXJhbCBzb3J0IG9yZGVyaW5nXVtdLg0KLy8vDQovLy8gQVNDSUkgbGV0dGVycyBhcmUgY29udmVydGVkIHRvIHVwcGVyIGNhc2UgYmVmb3JlIGJlaW5nIGNvbXBhcmVkLCBsaWtlDQovLy8gZm9yIFtjb21wYXJlQXNjaWlVcHBlckNhc2VdLCB0aGVuIHRoZSByZXN1bHQgaXMgY29tcGFyZWQgbGlrZSBmb3INCi8vLyBbY29tcGFyZU5hdHVyYWxdLg0KLy8vDQovLy8gSWYgdHdvIHN0cmluZ3MgZGlmZmVyIG9ubHkgb24gdGhlIGNhc2Ugb2YgQVNDSUkgbGV0dGVycywgdGhlIG9uZSB3aXRoIHRoZQ0KLy8vIGNhcGl0YWwgbGV0dGVyIGF0IHRoZSBmaXJzdCBkaWZmZXJlbmNlIHdpbGwgY29tcGFyZSBhcyBsZXNzIHRoYW4gdGhlIG90aGVyDQovLy8gc3RyaW5nLiBUaGlzIHRpZS1icmVha2luZyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBhcmlzb24gaXMgYSB0b3RhbCBvcmRlcmluZw0KLy8vIG9uIHN0cmluZ3MNCi8vLw0KLy8vIFtuYXR1cmFsIHNvcnQgb3JkZXJpbmddOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OYXR1cmFsX3NvcnRfb3JkZXINCmludCBjb21wYXJlQXNjaWlVcHBlckNhc2VOYXR1cmFsKFN0cmluZyBhLCBTdHJpbmcgYikgew0KICBpbnQgZGVmYXVsdFJlc3VsdCA9IDA7DQogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgew0KICAgIGlmIChpID49IGIubGVuZ3RoKSByZXR1cm4gMTsNCiAgICB2YXIgYUNoYXIgPSBhLmNvZGVVbml0QXQoaSk7DQogICAgdmFyIGJDaGFyID0gYi5jb2RlVW5pdEF0KGkpOw0KICAgIGlmIChhQ2hhciA9PSBiQ2hhcikgY29udGludWU7DQogICAgaW50IGFVcHBlckNhc2UgPSBhQ2hhcjsNCiAgICBpbnQgYlVwcGVyQ2FzZSA9IGJDaGFyOw0KICAgIGlmIChfbG93ZXJDYXNlQSA8PSBhQ2hhciAmJiBhQ2hhciA8PSBfbG93ZXJDYXNlWikgew0KICAgICAgYVVwcGVyQ2FzZSAtPSBfYXNjaWlDYXNlQml0Ow0KICAgIH0NCiAgICBpZiAoX2xvd2VyQ2FzZUEgPD0gYkNoYXIgJiYgYkNoYXIgPD0gX2xvd2VyQ2FzZVopIHsNCiAgICAgIGJVcHBlckNhc2UgLT0gX2FzY2lpQ2FzZUJpdDsNCiAgICB9DQogICAgaWYgKGFVcHBlckNhc2UgIT0gYlVwcGVyQ2FzZSkgew0KICAgICAgcmV0dXJuIF9jb21wYXJlTmF0dXJhbGx5KGEsIGIsIGksIGFVcHBlckNhc2UsIGJVcHBlckNhc2UpOw0KICAgIH0NCiAgICBpZiAoZGVmYXVsdFJlc3VsdCA9PSAwKSBkZWZhdWx0UmVzdWx0ID0gYUNoYXIgLSBiQ2hhcjsNCiAgfQ0KICBpZiAoYi5sZW5ndGggPiBhLmxlbmd0aCkgcmV0dXJuIC0xOw0KICByZXR1cm4gZGVmYXVsdFJlc3VsdC5zaWduOw0KfQ0KDQovLy8gQ2hlY2sgZm9yIG51bWJlcnMgb3ZlcmxhcHBpbmcgdGhlIGN1cnJlbnQgbWlzbWF0Y2hlZCBjaGFyYWN0ZXJzLg0KLy8vDQovLy8gSWYgYm90aCBbYUNoYXJdIGFuZCBbYkNoYXJdIGFyZSBkaWdpdHMsIHVzZSBudW1lcmljYWwgY29tcGFyaXNvbi4NCi8vLyBDaGVjayBpZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVycyBpcyBhIG5vbi16ZXJvIG51bWJlciwgYW5kIGlmIG5vdCwNCi8vLyBza2lwIC0gYnV0IGNvdW50IC0gbGVhZGluZyB6ZXJvcyBiZWZvcmUgY29tcGFyaW5nIG51bWJlcnMuDQovLy8NCi8vLyBJZiBvbmUgaXMgYSBkaWdpdCBhbmQgdGhlIG90aGVyIGlzbid0LCBjaGVjayBpZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyDQovLy8gaXMgYSBkaWdpdCwgYW5kIGlmIHNvLCB0aGUgdGhlIG9uZSB3aXRoIHRoZSBkaWdpdCBpcyB0aGUgZ3JlYXRlciBudW1iZXIuDQovLy8NCi8vLyBPdGhlcndpc2UganVzdCByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gW2FDaGFyXSBhbmQgW2JDaGFyXS4NCmludCBfY29tcGFyZU5hdHVyYWxseShTdHJpbmcgYSwgU3RyaW5nIGIsIGludCBpbmRleCwgaW50IGFDaGFyLCBpbnQgYkNoYXIpIHsNCiAgYXNzZXJ0KGFDaGFyICE9IGJDaGFyKTsNCiAgdmFyIGFJc0RpZ2l0ID0gX2lzRGlnaXQoYUNoYXIpOw0KICB2YXIgYklzRGlnaXQgPSBfaXNEaWdpdChiQ2hhcik7DQogIGlmIChhSXNEaWdpdCkgew0KICAgIGlmIChiSXNEaWdpdCkgew0KICAgICAgcmV0dXJuIF9jb21wYXJlTnVtZXJpY2FsbHkoYSwgYiwgYUNoYXIsIGJDaGFyLCBpbmRleCk7DQogICAgfSBlbHNlIGlmIChpbmRleCA+IDAgJiYgX2lzRGlnaXQoYS5jb2RlVW5pdEF0KGluZGV4IC0gMSkpKSB7DQogICAgICAvLyBhQ2hhciBpcyB0aGUgY29udGludWF0aW9uIG9mIGEgbG9uZ2VyIG51bWJlci4NCiAgICAgIHJldHVybiAxOw0KICAgIH0NCiAgfSBlbHNlIGlmIChiSXNEaWdpdCAmJiBpbmRleCA+IDAgJiYgX2lzRGlnaXQoYi5jb2RlVW5pdEF0KGluZGV4IC0gMSkpKSB7DQogICAgLy8gYkNoYXIgaXMgdGhlIGNvbnRpbnVhdGlvbiBvZiBhIGxvbmdlciBudW1iZXIuDQogICAgcmV0dXJuIC0xOw0KICB9DQogIC8vIENoYXJhY3RlcnMgYXJlIGJvdGggbm9uLWRpZ2l0cywgb3Igbm90IGNvbnRpbnVhdGlvbiBvZiBlYXJsaWVyIG51bWJlci4NCiAgcmV0dXJuIChhQ2hhciAtIGJDaGFyKS5zaWduOw0KfQ0KDQovLy8gQ29tcGFyZSBudW1iZXJzIG92ZXJsYXBwaW5nIFthQ2hhcl0gYW5kIFtiQ2hhcl0gbnVtZXJpY2FsbHkuDQovLy8NCi8vLyBJZiB0aGUgbnVtYmVycyBoYXZlIHRoZSBzYW1lIG51bWVyaWNhbCB2YWx1ZSwgYnV0IG9uZSBoYXMgbW9yZSBsZWFkaW5nDQovLy8gemVyb3MsIHRoZSBsb25nZXIgbnVtYmVyIGlzIGNvbnNpZGVyZWQgZ3JlYXRlciB0aGFuIHRoZSBzaG9ydGVyIG9uZS4NCi8vLw0KLy8vIFRoaXMgZW5zdXJlcyBhIHRvdGFsIG9yZGVyaW5nIG9uIHN0cmluZ3MgY29tcGF0aWJsZSB3aXRoIGVxdWFsaXR5Lg0KaW50IF9jb21wYXJlTnVtZXJpY2FsbHkoU3RyaW5nIGEsIFN0cmluZyBiLCBpbnQgYUNoYXIsIGludCBiQ2hhciwgaW50IGluZGV4KSB7DQogIC8vIEJvdGggYXJlIGRpZ2l0cy4gRmluZCB0aGUgZmlyc3Qgc2lnbmlmaWNhbnQgZGlmZmVyZW50IGRpZ2l0LCB0aGVuIGZpbmQNCiAgLy8gdGhlIGxlbmd0aCBvZiB0aGUgbnVtYmVycy4NCiAgaWYgKF9pc05vblplcm9OdW1iZXJTdWZmaXgoYSwgaW5kZXgpKSB7DQogICAgLy8gUGFydCBvZiBhIGxvbmdlciBudW1iZXIsIGRpZmZlcnMgYXQgdGhpcyBpbmRleCwganVzdCBjb3VudCB0aGUgbGVuZ3RoLg0KICAgIGludCByZXN1bHQgPSBfY29tcGFyZURpZ2l0Q291bnQoYSwgYiwgaW5kZXgsIGluZGV4KTsNCiAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7DQogICAgLy8gSWYgc2FtZSBsZW5ndGgsIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCBkaWZmZXJpbmcNCiAgICAvLyBkaWdpdC4NCiAgICByZXR1cm4gKGFDaGFyIC0gYkNoYXIpLnNpZ247DQogIH0NCiAgLy8gTm90IHBhcnQgb2YgbGFyZ2VyIChub24temVybykgbnVtYmVyLCBzbyBza2lwIGxlYWRpbmcgemVyb3MgYmVmb3JlDQogIC8vIGNvbXBhcmluZyBudW1iZXJzLg0KICBpbnQgYUluZGV4ID0gaW5kZXg7DQogIGludCBiSW5kZXggPSBpbmRleDsNCiAgaWYgKGFDaGFyID09IF96ZXJvKSB7DQogICAgZG8gew0KICAgICAgYUluZGV4Kys7DQogICAgICBpZiAoYUluZGV4ID09IGEubGVuZ3RoKSByZXR1cm4gLTE7IC8vIG51bWJlciBpbiBhIGlzIHplcm8sIGIgaXMgbm90Lg0KICAgICAgYUNoYXIgPSBhLmNvZGVVbml0QXQoYUluZGV4KTsNCiAgICB9IHdoaWxlIChhQ2hhciA9PSBfemVybyk7DQogICAgaWYgKCFfaXNEaWdpdChhQ2hhcikpIHJldHVybiAtMTsNCiAgfSBlbHNlIGlmIChiQ2hhciA9PSBfemVybykgew0KICAgIGRvIHsNCiAgICAgIGJJbmRleCsrOw0KICAgICAgaWYgKGJJbmRleCA9PSBiLmxlbmd0aCkgcmV0dXJuIDE7IC8vIG51bWJlciBpbiBiIGlzIHplcm8sIGEgaXMgbm90Lg0KICAgICAgYkNoYXIgPSBiLmNvZGVVbml0QXQoYkluZGV4KTsNCiAgICB9IHdoaWxlIChiQ2hhciA9PSBfemVybyk7DQogICAgaWYgKCFfaXNEaWdpdChiQ2hhcikpIHJldHVybiAxOw0KICB9DQogIGlmIChhQ2hhciAhPSBiQ2hhcikgew0KICAgIGludCByZXN1bHQgPSBfY29tcGFyZURpZ2l0Q291bnQoYSwgYiwgYUluZGV4LCBiSW5kZXgpOw0KICAgIGlmIChyZXN1bHQgIT0gMCkgcmV0dXJuIHJlc3VsdDsNCiAgICByZXR1cm4gKGFDaGFyIC0gYkNoYXIpLnNpZ247DQogIH0NCiAgLy8gU2FtZSBsZWFkaW5nIGRpZ2l0LCBvbmUgaGFkIG1vcmUgbGVhZGluZyB6ZXJvcy4NCiAgLy8gQ29tcGFyZSBkaWdpdHMgdW50aWwgcmVhY2hpbmcgYSBkaWZmZXJlbmNlLg0KICB3aGlsZSAodHJ1ZSkgew0KICAgIHZhciBhSXNEaWdpdCA9IGZhbHNlOw0KICAgIHZhciBiSXNEaWdpdCA9IGZhbHNlOw0KICAgIGFDaGFyID0gMDsNCiAgICBiQ2hhciA9IDA7DQogICAgaWYgKCsrYUluZGV4IDwgYS5sZW5ndGgpIHsNCiAgICAgIGFDaGFyID0gYS5jb2RlVW5pdEF0KGFJbmRleCk7DQogICAgICBhSXNEaWdpdCA9IF9pc0RpZ2l0KGFDaGFyKTsNCiAgICB9DQogICAgaWYgKCsrYkluZGV4IDwgYi5sZW5ndGgpIHsNCiAgICAgIGJDaGFyID0gYi5jb2RlVW5pdEF0KGJJbmRleCk7DQogICAgICBiSXNEaWdpdCA9IF9pc0RpZ2l0KGJDaGFyKTsNCiAgICB9DQogICAgaWYgKGFJc0RpZ2l0KSB7DQogICAgICBpZiAoYklzRGlnaXQpIHsNCiAgICAgICAgaWYgKGFDaGFyID09IGJDaGFyKSBjb250aW51ZTsNCiAgICAgICAgLy8gRmlyc3QgZGlmZmVyZW50IGRpZ2l0IGZvdW5kLg0KICAgICAgICBicmVhazsNCiAgICAgIH0NCiAgICAgIC8vIGJDaGFyIGlzIG5vbi1kaWdpdCwgc28gYSBoYXMgbG9uZ2VyIG51bWJlci4NCiAgICAgIHJldHVybiAxOw0KICAgIH0gZWxzZSBpZiAoYklzRGlnaXQpIHsNCiAgICAgIHJldHVybiAtMTsgLy8gYiBoYXMgbG9uZ2VyIG51bWJlci4NCiAgICB9IGVsc2Ugew0KICAgICAgLy8gTmVpdGhlciBpcyBkaWdpdCwgc28gbnVtYmVycyBoYWQgc2FtZSBudW1lcmljYWwgdmFsdWUuDQogICAgICAvLyBGYWxsIGJhY2sgb24gbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MNCiAgICAgIC8vIChyZWZsZWN0ZWQgYnkgZGlmZmVyZW5jZSBpbiBpbmRpY2VzKS4NCiAgICAgIHJldHVybiAoYUluZGV4IC0gYkluZGV4KS5zaWduOw0KICAgIH0NCiAgfQ0KICAvLyBBdCBmaXJzdCBkaWZmZXJpbmcgZGlnaXRzLg0KICBpbnQgcmVzdWx0ID0gX2NvbXBhcmVEaWdpdENvdW50KGEsIGIsIGFJbmRleCwgYkluZGV4KTsNCiAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0Ow0KICByZXR1cm4gKGFDaGFyIC0gYkNoYXIpLnNpZ247DQp9DQoNCi8vLyBDaGVja3Mgd2hpY2ggb2YgW2FdIGFuZCBbYl0gaGFzIHRoZSBsb25nZXN0IHNlcXVlbmNlIG9mIGRpZ2l0cy4NCi8vLw0KLy8vIFN0YXJ0cyBjb3VudGluZyBmcm9tIGBpICsgMWAgYW5kIGBqICsgMWAgKGFzc3VtZXMgdGhhdCBgYVtpXWAgYW5kIGBiW2pdYCBhcmUNCi8vLyBib3RoIGFscmVhZHkga25vd24gdG8gYmUgZGlnaXRzKS4NCmludCBfY29tcGFyZURpZ2l0Q291bnQoU3RyaW5nIGEsIFN0cmluZyBiLCBpbnQgaSwgaW50IGopIHsNCiAgd2hpbGUgKCsraSA8IGEubGVuZ3RoKSB7DQogICAgYm9vbCBhSXNEaWdpdCA9IF9pc0RpZ2l0KGEuY29kZVVuaXRBdChpKSk7DQogICAgaWYgKCsraiA9PSBiLmxlbmd0aCkgcmV0dXJuIGFJc0RpZ2l0ID8gMSA6IDA7DQogICAgYm9vbCBiSXNEaWdpdCA9IF9pc0RpZ2l0KGIuY29kZVVuaXRBdChqKSk7DQogICAgaWYgKGFJc0RpZ2l0KSB7DQogICAgICBpZiAoYklzRGlnaXQpIGNvbnRpbnVlOw0KICAgICAgcmV0dXJuIDE7DQogICAgfSBlbHNlIGlmIChiSXNEaWdpdCkgew0KICAgICAgcmV0dXJuIC0xOw0KICAgIH0gZWxzZSB7DQogICAgICByZXR1cm4gMDsNCiAgICB9DQogIH0NCiAgaWYgKCsraiA8IGIubGVuZ3RoICYmIF9pc0RpZ2l0KGIuY29kZVVuaXRBdChqKSkpIHsNCiAgICByZXR1cm4gLTE7DQogIH0NCiAgcmV0dXJuIDA7DQp9DQoNCmJvb2wgX2lzRGlnaXQoaW50IGNoYXJDb2RlKSA9PiAoY2hhckNvZGUgXiBfemVybykgPD0gOTsNCg0KLy8vIENoZWNrIGlmIHRoZSBkaWdpdCBhdCBbaW5kZXhdIGlzIGNvbnRpbnVpbmcgYSBub24temVybyBudW1iZXIuDQovLy8NCi8vLyBJZiB0aGVyZSBpcyBubyBub24temVybyBkaWdpdHMgYmVmb3JlLCB0aGVuIGxlYWRpbmcgemVyb3MgYXQgW2luZGV4XQ0KLy8vIGFyZSBhbHNvIGlnbm9yZWQgd2hlbiBjb21wYXJpbmcgbnVtZXJpY2FsbHkuIElmIHRoZXJlIGlzIGEgbm9uLXplcm8gZGlnaXQNCi8vLyBiZWZvcmUsIHRoZW4gemVyb3MgYXQgW2luZGV4XSBhcmUgc2lnbmlmaWNhbnQuDQpib29sIF9pc05vblplcm9OdW1iZXJTdWZmaXgoU3RyaW5nIHN0cmluZywgaW50IGluZGV4KSB7DQogIHdoaWxlICgtLWluZGV4ID49IDApIHsNCiAgICBpbnQgY2hhciA9IHN0cmluZy5jb2RlVW5pdEF0KGluZGV4KTsNCiAgICBpZiAoY2hhciAhPSBfemVybykgcmV0dXJuIF9pc0RpZ2l0KGNoYXIpOw0KICB9DQogIHJldHVybiBmYWxzZTsNCn0NCoGLAE9PPQIZGR8fHx8hAk0FS1BBBUY1IwVRTEslMisoIiIjUDdOEDFLEQcTBRADAk4FTDkqTx1NDBEtJj1JGEwoPxEFPBA9AwJNBUs4BU9QTzEFUUxLJTE+KCIiIiMfHR05JAc5JAdKPgUnHgMCTQVLOAVPUE8RBVFMSyUxGigiIiIjHR0lOSQHOSQHSjwFJx4DAkoFQkwWR1EuBQ5PGgVLBU8qKCIiIhs4BwUnDQMCOiAFS0cXBU9QTxEFTzg+KCIiIiMdHTkkBzkkByVCBzwFJx4DAjogBUtHFwVPUE8QBU84GigiIiIjHR05JAc5JAclQgc8BSceAwJGBUdIQAVMTgVIThsjIxMVPkI4EQdMNhAFTSADAkIFTEoFSFBNIStPOiVQDyIFSRkXFxkKEUwlHyYgChFLJR8lBRk8JSIFNjISGxsQECAlIwcgJSMHFRcnKRAJNhEcKg5BLzAmBwUhOiMgAwJFBVInPBwwMzAVHxEcEg4RBwU2EAUNAwI5AkQFSk80ORoqLwURAwEncGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21wYXJhdG9ycy5kYXJ0OXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvZXF1YWxpdHkuZGFydLvzLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIjsKCmltcG9ydCAiY29tcGFyYXRvcnMuZGFydCI7Cgpjb25zdCBpbnQgX0hBU0hfTUFTSyA9IDB4N2ZmZmZmZmY7CgovLy8gQSBnZW5lcmljIGVxdWFsaXR5IHJlbGF0aW9uIG9uIG9iamVjdHMuCmFic3RyYWN0IGNsYXNzIEVxdWFsaXR5PEU+IHsKICBjb25zdCBmYWN0b3J5IEVxdWFsaXR5KCkgPSBEZWZhdWx0RXF1YWxpdHk8RT47CgogIC8vLyBDb21wYXJlIHR3byBlbGVtZW50cyBmb3IgYmVpbmcgZXF1YWwuCiAgLy8vCiAgLy8vIFRoaXMgc2hvdWxkIGJlIGEgcHJvcGVyIGVxdWFsaXR5IHJlbGF0aW9uLgogIGJvb2wgZXF1YWxzKEUgZTEsIEUgZTIpOwoKICAvLy8gR2V0IGEgaGFzaGNvZGUgb2YgYW4gZWxlbWVudC4KICAvLy8KICAvLy8gVGhlIGhhc2hjb2RlIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggW2VxdWFsc10sIHNvIHRoYXQgaWYKICAvLy8gYGVxdWFscyhhLCBiKWAgdGhlbiBgaGFzaChhKSA9PSBoYXNoKGIpYC4KICBpbnQgaGFzaChFIGUpOwoKICAvLy8gVGVzdCB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIHZhbGlkIGFyZ3VtZW50IHRvIFtlcXVhbHNdIGFuZCBbaGFzaF0uCiAgLy8vCiAgLy8vIFNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBiZSByZXN0cmljdGVkIHRvIG9ubHkgd29yayBvbiBzcGVjaWZpYyB0eXBlcwogIC8vLyBvZiBvYmplY3RzLgogIGJvb2wgaXNWYWxpZEtleShPYmplY3Qgbyk7Cn0KCnR5cGVkZWYgRiBfR2V0S2V5PEUsIEY+KEUgb2JqZWN0KTsKCi8vLyBFcXVhbGl0eSBvZiBvYmplY3RzIGJhc2VkIG9uIGRlcml2ZWQgdmFsdWVzLgovLy8KLy8vIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgY2xhc3M6Ci8vLyBgYGBkYXJ0Ci8vLyBhYnN0cmFjdCBjbGFzcyBFbXBsb3llZSB7Ci8vLyAgIGludCBnZXQgZW1wbG95bWVudElkOwovLy8gfQovLy8gYGBgCi8vLwovLy8gVGhlIGZvbGxvd2luZyBbRXF1YWxpdHldIGNvbnNpZGVycyBlbXBsb3llZXMgd2l0aCB0aGUgc2FtZSBJRHMgdG8gYmUgZXF1YWw6Ci8vLyBgYGBkYXJ0Ci8vLyBuZXcgRXF1YWxpdHlCeSgoRW1wbG95ZWUgZSkgPT4gZS5lbXBsb3ltZW50SWQpOwovLy8gYGBgCi8vLwovLy8gSXQncyBhbHNvIHBvc3NpYmxlIHRvIHBhc3MgYW4gYWRkaXRpb25hbCBlcXVhbGl0eSBpbnN0YW5jZSB0aGF0IHNob3VsZCBiZQovLy8gdXNlZCB0byBjb21wYXJlIHRoZSB2YWx1ZSBpdHNlbGYuCmNsYXNzIEVxdWFsaXR5Qnk8RSwgRj4gaW1wbGVtZW50cyBFcXVhbGl0eTxFPiB7CiAgLy8gUmV0dXJucyBhIGRlcml2ZWQgdmFsdWUgRiBmcm9tIGFuIG9iamVjdCBFLgogIGZpbmFsIF9HZXRLZXk8RSwgRj4gX2dldEtleTsKCiAgLy8gRGV0ZXJtaW5lcyBlcXVhbGl0eSBiZXR3ZWVuIHR3byB2YWx1ZXMgb2YgRi4KICBmaW5hbCBFcXVhbGl0eTxGPiBfaW5uZXI7CgogIEVxdWFsaXR5QnkoRiBnZXRLZXkoRSBvYmplY3QpLCBbRXF1YWxpdHk8Rj4gaW5uZXIgPSBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKV0pCiAgICAgIDogX2dldEtleSA9IGdldEtleSwKICAgICAgICBfaW5uZXIgPSBpbm5lcjsKCiAgYm9vbCBlcXVhbHMoRSBlMSwgRSBlMikgPT4gX2lubmVyLmVxdWFscyhfZ2V0S2V5KGUxKSwgX2dldEtleShlMikpOwoKICBpbnQgaGFzaChFIGUpID0+IF9pbm5lci5oYXNoKF9nZXRLZXkoZSkpOwoKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pIHsKICAgIGlmIChvIGlzIEUpIHsKICAgICAgZmluYWwgdmFsdWUgPSBfZ2V0S2V5KG8pOwogICAgICByZXR1cm4gdmFsdWUgaXMgRiAmJiBfaW5uZXIuaXNWYWxpZEtleSh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gRXF1YWxpdHkgb2Ygb2JqZWN0cyB0aGF0IGNvbXBhcmVzIG9ubHkgdGhlIG5hdHVyYWwgZXF1YWxpdHkgb2YgdGhlIG9iamVjdHMuCi8vLwovLy8gVGhpcyBlcXVhbGl0eSB1c2VzIHRoZSBvYmplY3RzJyBvd24gW09iamVjdC49PV0gYW5kIFtPYmplY3QuaGFzaENvZGVdIGZvcgovLy8gdGhlIGVxdWFsaXR5LgovLy8KLy8vIE5vdGUgdGhhdCBbZXF1YWxzXSBhbmQgW2hhc2hdIHRha2UgYE9iamVjdGBzIHJhdGhlciB0aGFuIGBFYHMuIFRoaXMgYWxsb3dzCi8vLyBgRWAgdG8gYmUgaW5mZXJyZWQgYXMgYE51bGxgIGluIGNvbnN0IGNvbnRleHRzIHdoZXJlIGBFYCB3b3VsZG4ndCBiZSBhCi8vLyBjb21waWxlLXRpbWUgY29uc3RhbnQsIHdoaWxlIHN0aWxsIGFsbG93aW5nIHRoZSBjbGFzcyB0byBiZSB1c2VkIGF0IHJ1bnRpbWUuCmNsYXNzIERlZmF1bHRFcXVhbGl0eTxFPiBpbXBsZW1lbnRzIEVxdWFsaXR5PEU+IHsKICBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKTsKICBib29sIGVxdWFscyhPYmplY3QgZTEsIE9iamVjdCBlMikgPT4gZTEgPT0gZTI7CiAgaW50IGhhc2goT2JqZWN0IGUpID0+IGUuaGFzaENvZGU7CiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSA9PiB0cnVlOwp9CgovLy8gRXF1YWxpdHkgb2Ygb2JqZWN0cyB0aGF0IGNvbXBhcmVzIG9ubHkgdGhlIGlkZW50aXR5IG9mIHRoZSBvYmplY3RzLgpjbGFzcyBJZGVudGl0eUVxdWFsaXR5PEU+IGltcGxlbWVudHMgRXF1YWxpdHk8RT4gewogIGNvbnN0IElkZW50aXR5RXF1YWxpdHkoKTsKICBib29sIGVxdWFscyhFIGUxLCBFIGUyKSA9PiBpZGVudGljYWwoZTEsIGUyKTsKICBpbnQgaGFzaChFIGUpID0+IGlkZW50aXR5SGFzaENvZGUoZSk7CiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSA9PiB0cnVlOwp9CgovLy8gRXF1YWxpdHkgb24gaXRlcmFibGVzLgovLy8KLy8vIFR3byBpdGVyYWJsZXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRlci4KLy8vCi8vLyBUaGUgW2VxdWFsc10gYW5kIFtoYXNoXSBtZXRob2RzIGFjY2VwdHMgYG51bGxgIHZhbHVlcywKLy8vIGV2ZW4gaWYgdGhlIFtpc1ZhbGlkS2V5XSByZXR1cm5zIGBmYWxzZWAgZm9yIGBudWxsYC4KLy8vIFRoZSBbaGFzaF0gb2YgYG51bGxgIGlzIGBudWxsLmhhc2hDb2RlYC4KY2xhc3MgSXRlcmFibGVFcXVhbGl0eTxFPiBpbXBsZW1lbnRzIEVxdWFsaXR5PEl0ZXJhYmxlPEU+PiB7CiAgZmluYWwgRXF1YWxpdHk8RT4gX2VsZW1lbnRFcXVhbGl0eTsKICBjb25zdCBJdGVyYWJsZUVxdWFsaXR5KAogICAgICBbRXF1YWxpdHk8RT4gZWxlbWVudEVxdWFsaXR5ID0gY29uc3QgRGVmYXVsdEVxdWFsaXR5KCldKQogICAgICA6IF9lbGVtZW50RXF1YWxpdHkgPSBlbGVtZW50RXF1YWxpdHk7CgogIGJvb2wgZXF1YWxzKEl0ZXJhYmxlPEU+IGVsZW1lbnRzMSwgSXRlcmFibGU8RT4gZWxlbWVudHMyKSB7CiAgICBpZiAoaWRlbnRpY2FsKGVsZW1lbnRzMSwgZWxlbWVudHMyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoZWxlbWVudHMxID09IG51bGwgfHwgZWxlbWVudHMyID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHZhciBpdDEgPSBlbGVtZW50czEuaXRlcmF0b3I7CiAgICB2YXIgaXQyID0gZWxlbWVudHMyLml0ZXJhdG9yOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgYm9vbCBoYXNOZXh0ID0gaXQxLm1vdmVOZXh0KCk7CiAgICAgIGlmIChoYXNOZXh0ICE9IGl0Mi5tb3ZlTmV4dCgpKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICghaGFzTmV4dCkgcmV0dXJuIHRydWU7CiAgICAgIGlmICghX2VsZW1lbnRFcXVhbGl0eS5lcXVhbHMoaXQxLmN1cnJlbnQsIGl0Mi5jdXJyZW50KSkgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgaW50IGhhc2goSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIGlmIChlbGVtZW50cyA9PSBudWxsKSByZXR1cm4gbnVsbC5oYXNoQ29kZTsKICAgIC8vIEplbmtpbnMncyBvbmUtYXQtYS10aW1lIGhhc2ggZnVuY3Rpb24uCiAgICBpbnQgaGFzaCA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBpbnQgYyA9IF9lbGVtZW50RXF1YWxpdHkuaGFzaChlbGVtZW50KTsKICAgICAgaGFzaCA9IChoYXNoICsgYykgJiBfSEFTSF9NQVNLOwogICAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAxMCkpICYgX0hBU0hfTUFTSzsKICAgICAgaGFzaCBePSAoaGFzaCA+PiA2KTsKICAgIH0KICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDMpKSAmIF9IQVNIX01BU0s7CiAgICBoYXNoIF49IChoYXNoID4+IDExKTsKICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDE1KSkgJiBfSEFTSF9NQVNLOwogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pID0+IG8gaXMgSXRlcmFibGU8RT47Cn0KCi8vLyBFcXVhbGl0eSBvbiBsaXN0cy4KLy8vCi8vLyBUd28gbGlzdHMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYW5kIHRoZWlyIGVsZW1lbnRzCi8vLyBhdCBlYWNoIGluZGV4IGFyZSBlcXVhbC4KLy8vCi8vLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIFtJdGVyYWJsZUVxdWFsaXR5XSBleGNlcHQgdGhhdCBpdAovLy8gYWNjZXNzZXMgZWxlbWVudHMgYnkgaW5kZXggaW5zdGVhZCBvZiB0aHJvdWdoIGl0ZXJhdGlvbi4KLy8vCi8vLyBUaGUgW2VxdWFsc10gYW5kIFtoYXNoXSBtZXRob2RzIGFjY2VwdHMgYG51bGxgIHZhbHVlcywKLy8vIGV2ZW4gaWYgdGhlIFtpc1ZhbGlkS2V5XSByZXR1cm5zIGBmYWxzZWAgZm9yIGBudWxsYC4KLy8vIFRoZSBbaGFzaF0gb2YgYG51bGxgIGlzIGBudWxsLmhhc2hDb2RlYC4KY2xhc3MgTGlzdEVxdWFsaXR5PEU+IGltcGxlbWVudHMgRXF1YWxpdHk8TGlzdDxFPj4gewogIGZpbmFsIEVxdWFsaXR5PEU+IF9lbGVtZW50RXF1YWxpdHk7CiAgY29uc3QgTGlzdEVxdWFsaXR5KFtFcXVhbGl0eTxFPiBlbGVtZW50RXF1YWxpdHkgPSBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKV0pCiAgICAgIDogX2VsZW1lbnRFcXVhbGl0eSA9IGVsZW1lbnRFcXVhbGl0eTsKCiAgYm9vbCBlcXVhbHMoTGlzdDxFPiBsaXN0MSwgTGlzdDxFPiBsaXN0MikgewogICAgaWYgKGlkZW50aWNhbChsaXN0MSwgbGlzdDIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChsaXN0MSA9PSBudWxsIHx8IGxpc3QyID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGludCBsZW5ndGggPSBsaXN0MS5sZW5ndGg7CiAgICBpZiAobGVuZ3RoICE9IGxpc3QyLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAoIV9lbGVtZW50RXF1YWxpdHkuZXF1YWxzKGxpc3QxW2ldLCBsaXN0MltpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgaW50IGhhc2goTGlzdDxFPiBsaXN0KSB7CiAgICBpZiAobGlzdCA9PSBudWxsKSByZXR1cm4gbnVsbC5oYXNoQ29kZTsKICAgIC8vIEplbmtpbnMncyBvbmUtYXQtYS10aW1lIGhhc2ggZnVuY3Rpb24uCiAgICAvLyBUaGlzIGNvZGUgaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgb25lIGluIEl0ZXJhYmxlRXF1YWxpdHksIGV4Y2VwdAogICAgLy8gdGhhdCBpdCB1c2VzIGluZGV4aW5nIGluc3RlYWQgb2YgaXRlcmF0aW5nIHRvIGdldCB0aGUgZWxlbWVudHMuCiAgICBpbnQgaGFzaCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgaW50IGMgPSBfZWxlbWVudEVxdWFsaXR5Lmhhc2gobGlzdFtpXSk7CiAgICAgIGhhc2ggPSAoaGFzaCArIGMpICYgX0hBU0hfTUFTSzsKICAgICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMTApKSAmIF9IQVNIX01BU0s7CiAgICAgIGhhc2ggXj0gKGhhc2ggPj4gNik7CiAgICB9CiAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAzKSkgJiBfSEFTSF9NQVNLOwogICAgaGFzaCBePSAoaGFzaCA+PiAxMSk7CiAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAxNSkpICYgX0hBU0hfTUFTSzsKICAgIHJldHVybiBoYXNoOwogIH0KCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSA9PiBvIGlzIExpc3Q8RT47Cn0KCmFic3RyYWN0IGNsYXNzIF9Vbm9yZGVyZWRFcXVhbGl0eTxFLCBUIGV4dGVuZHMgSXRlcmFibGU8RT4+CiAgICBpbXBsZW1lbnRzIEVxdWFsaXR5PFQ+IHsKICBmaW5hbCBFcXVhbGl0eTxFPiBfZWxlbWVudEVxdWFsaXR5OwoKICBjb25zdCBfVW5vcmRlcmVkRXF1YWxpdHkodGhpcy5fZWxlbWVudEVxdWFsaXR5KTsKCiAgYm9vbCBlcXVhbHMoVCBlbGVtZW50czEsIFQgZWxlbWVudHMyKSB7CiAgICBpZiAoaWRlbnRpY2FsKGVsZW1lbnRzMSwgZWxlbWVudHMyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoZWxlbWVudHMxID09IG51bGwgfHwgZWxlbWVudHMyID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIEhhc2hNYXA8RSwgaW50PiBjb3VudHMgPSBuZXcgSGFzaE1hcCgKICAgICAgICBlcXVhbHM6IF9lbGVtZW50RXF1YWxpdHkuZXF1YWxzLAogICAgICAgIGhhc2hDb2RlOiBfZWxlbWVudEVxdWFsaXR5Lmhhc2gsCiAgICAgICAgaXNWYWxpZEtleTogX2VsZW1lbnRFcXVhbGl0eS5pc1ZhbGlkS2V5KTsKICAgIGludCBsZW5ndGggPSAwOwogICAgZm9yICh2YXIgZSBpbiBlbGVtZW50czEpIHsKICAgICAgaW50IGNvdW50ID0gY291bnRzW2VdOwogICAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAwOwogICAgICBjb3VudHNbZV0gPSBjb3VudCArIDE7CiAgICAgIGxlbmd0aCsrOwogICAgfQogICAgZm9yICh2YXIgZSBpbiBlbGVtZW50czIpIHsKICAgICAgaW50IGNvdW50ID0gY291bnRzW2VdOwogICAgICBpZiAoY291bnQgPT0gbnVsbCB8fCBjb3VudCA9PSAwKSByZXR1cm4gZmFsc2U7CiAgICAgIGNvdW50c1tlXSA9IGNvdW50IC0gMTsKICAgICAgbGVuZ3RoLS07CiAgICB9CiAgICByZXR1cm4gbGVuZ3RoID09IDA7CiAgfQoKICBpbnQgaGFzaChUIGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMgPT0gbnVsbCkgcmV0dXJuIG51bGwuaGFzaENvZGU7CiAgICBpbnQgaGFzaCA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBpbnQgYyA9IF9lbGVtZW50RXF1YWxpdHkuaGFzaChlbGVtZW50KTsKICAgICAgaGFzaCA9IChoYXNoICsgYykgJiBfSEFTSF9NQVNLOwogICAgfQogICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMykpICYgX0hBU0hfTUFTSzsKICAgIGhhc2ggXj0gKGhhc2ggPj4gMTEpOwogICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMTUpKSAmIF9IQVNIX01BU0s7CiAgICByZXR1cm4gaGFzaDsKICB9Cn0KCi8vLyBFcXVhbGl0eSBvZiB0aGUgZWxlbWVudHMgb2YgdHdvIGl0ZXJhYmxlcyB3aXRob3V0IGNvbnNpZGVyaW5nIG9yZGVyLgovLy8KLy8vIFR3byBpdGVyYWJsZXMgYXJlIGNvbnNpZGVyZWQgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cywKLy8vIGFuZCB0aGUgZWxlbWVudHMgb2Ygb25lIHNldCBjYW4gYmUgcGFpcmVkIHdpdGggdGhlIGVsZW1lbnRzCi8vLyBvZiB0aGUgb3RoZXIgaXRlcmFibGUsIHNvIHRoYXQgZWFjaCBwYWlyIGFyZSBlcXVhbC4KY2xhc3MgVW5vcmRlcmVkSXRlcmFibGVFcXVhbGl0eTxFPiBleHRlbmRzIF9Vbm9yZGVyZWRFcXVhbGl0eTxFLCBJdGVyYWJsZTxFPj4gewogIGNvbnN0IFVub3JkZXJlZEl0ZXJhYmxlRXF1YWxpdHkoCiAgICAgIFtFcXVhbGl0eTxFPiBlbGVtZW50RXF1YWxpdHkgPSBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKV0pCiAgICAgIDogc3VwZXIoZWxlbWVudEVxdWFsaXR5KTsKCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSA9PiBvIGlzIEl0ZXJhYmxlPEU+Owp9CgovLy8gRXF1YWxpdHkgb2Ygc2V0cy4KLy8vCi8vLyBUd28gc2V0cyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzLAovLy8gYW5kIHRoZSBlbGVtZW50cyBvZiBvbmUgc2V0IGNhbiBiZSBwYWlyZWQgd2l0aCB0aGUgZWxlbWVudHMKLy8vIG9mIHRoZSBvdGhlciBzZXQsIHNvIHRoYXQgZWFjaCBwYWlyIGFyZSBlcXVhbC4KLy8vCi8vLyBUaGlzIGVxdWFsaXR5IGJlaGF2ZXMgdGhlIHNhbWUgYXMgW1Vub3JkZXJlZEl0ZXJhYmxlRXF1YWxpdHldIGV4Y2VwdCB0aGF0Ci8vLyBpdCBleHBlY3RzIHNldHMgaW5zdGVhZCBvZiBpdGVyYWJsZXMgYXMgYXJndW1lbnRzLgovLy8KLy8vIFRoZSBbZXF1YWxzXSBhbmQgW2hhc2hdIG1ldGhvZHMgYWNjZXB0cyBgbnVsbGAgdmFsdWVzLAovLy8gZXZlbiBpZiB0aGUgW2lzVmFsaWRLZXldIHJldHVybnMgYGZhbHNlYCBmb3IgYG51bGxgLgovLy8gVGhlIFtoYXNoXSBvZiBgbnVsbGAgaXMgYG51bGwuaGFzaENvZGVgLgpjbGFzcyBTZXRFcXVhbGl0eTxFPiBleHRlbmRzIF9Vbm9yZGVyZWRFcXVhbGl0eTxFLCBTZXQ8RT4+IHsKICBjb25zdCBTZXRFcXVhbGl0eShbRXF1YWxpdHk8RT4gZWxlbWVudEVxdWFsaXR5ID0gY29uc3QgRGVmYXVsdEVxdWFsaXR5KCldKQogICAgICA6IHN1cGVyKGVsZW1lbnRFcXVhbGl0eSk7CgogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgPT4gbyBpcyBTZXQ8RT47Cn0KCi8vLyBJbnRlcm5hbCBjbGFzcyB1c2VkIGJ5IFtNYXBFcXVhbGl0eV0uCi8vLwovLy8gVGhlIGNsYXNzIHJlcHJlc2VudHMgYSBtYXAgZW50cnkgYXMgYSBzaW5nbGUgb2JqZWN0LAovLy8gdXNpbmcgYSBjb21iaW5lZCBoYXNoQ29kZSBhbmQgZXF1YWxpdHkgb2YgdGhlIGtleSBhbmQgdmFsdWUuCmNsYXNzIF9NYXBFbnRyeSB7CiAgZmluYWwgTWFwRXF1YWxpdHkgZXF1YWxpdHk7CiAgZmluYWwga2V5OwogIGZpbmFsIHZhbHVlOwogIF9NYXBFbnRyeSh0aGlzLmVxdWFsaXR5LCB0aGlzLmtleSwgdGhpcy52YWx1ZSk7CgogIGludCBnZXQgaGFzaENvZGUgPT4KICAgICAgKDMgKiBlcXVhbGl0eS5fa2V5RXF1YWxpdHkuaGFzaChrZXkpICsKICAgICAgICAgIDcgKiBlcXVhbGl0eS5fdmFsdWVFcXVhbGl0eS5oYXNoKHZhbHVlKSkgJgogICAgICBfSEFTSF9NQVNLOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgb3RoZXIgaXMgX01hcEVudHJ5ICYmCiAgICAgIGVxdWFsaXR5Ll9rZXlFcXVhbGl0eS5lcXVhbHMoa2V5LCBvdGhlci5rZXkpICYmCiAgICAgIGVxdWFsaXR5Ll92YWx1ZUVxdWFsaXR5LmVxdWFscyh2YWx1ZSwgb3RoZXIudmFsdWUpOwp9CgovLy8gRXF1YWxpdHkgb24gbWFwcy4KLy8vCi8vLyBUd28gbWFwcyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzLCBhbmQgaWYgdGhlCi8vLyBlbnRyaWVzIG9mIHRoZSB0d28gbWFwcyBhcmUgcGFpcndpc2UgZXF1YWwgb24gYm90aCBrZXkgYW5kIHZhbHVlLgovLy8KLy8vIFRoZSBbZXF1YWxzXSBhbmQgW2hhc2hdIG1ldGhvZHMgYWNjZXB0cyBgbnVsbGAgdmFsdWVzLAovLy8gZXZlbiBpZiB0aGUgW2lzVmFsaWRLZXldIHJldHVybnMgYGZhbHNlYCBmb3IgYG51bGxgLgovLy8gVGhlIFtoYXNoXSBvZiBgbnVsbGAgaXMgYG51bGwuaGFzaENvZGVgLgpjbGFzcyBNYXBFcXVhbGl0eTxLLCBWPiBpbXBsZW1lbnRzIEVxdWFsaXR5PE1hcDxLLCBWPj4gewogIGZpbmFsIEVxdWFsaXR5PEs+IF9rZXlFcXVhbGl0eTsKICBmaW5hbCBFcXVhbGl0eTxWPiBfdmFsdWVFcXVhbGl0eTsKICBjb25zdCBNYXBFcXVhbGl0eSgKICAgICAge0VxdWFsaXR5PEs+IGtleXM6IGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpLAogICAgICBFcXVhbGl0eTxWPiB2YWx1ZXM6IGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpfSkKICAgICAgOiBfa2V5RXF1YWxpdHkgPSBrZXlzLAogICAgICAgIF92YWx1ZUVxdWFsaXR5ID0gdmFsdWVzOwoKICBib29sIGVxdWFscyhNYXA8SywgVj4gbWFwMSwgTWFwPEssIFY+IG1hcDIpIHsKICAgIGlmIChpZGVudGljYWwobWFwMSwgbWFwMikpIHJldHVybiB0cnVlOwogICAgaWYgKG1hcDEgPT0gbnVsbCB8fCBtYXAyID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGludCBsZW5ndGggPSBtYXAxLmxlbmd0aDsKICAgIGlmIChsZW5ndGggIT0gbWFwMi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIE1hcDxfTWFwRW50cnksIGludD4gZXF1YWxFbGVtZW50Q291bnRzID0gbmV3IEhhc2hNYXAoKTsKICAgIGZvciAoSyBrZXkgaW4gbWFwMS5rZXlzKSB7CiAgICAgIF9NYXBFbnRyeSBlbnRyeSA9IG5ldyBfTWFwRW50cnkodGhpcywga2V5LCBtYXAxW2tleV0pOwogICAgICBpbnQgY291bnQgPSBlcXVhbEVsZW1lbnRDb3VudHNbZW50cnldOwogICAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAwOwogICAgICBlcXVhbEVsZW1lbnRDb3VudHNbZW50cnldID0gY291bnQgKyAxOwogICAgfQogICAgZm9yIChLIGtleSBpbiBtYXAyLmtleXMpIHsKICAgICAgX01hcEVudHJ5IGVudHJ5ID0gbmV3IF9NYXBFbnRyeSh0aGlzLCBrZXksIG1hcDJba2V5XSk7CiAgICAgIGludCBjb3VudCA9IGVxdWFsRWxlbWVudENvdW50c1tlbnRyeV07CiAgICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50ID09IDApIHJldHVybiBmYWxzZTsKICAgICAgZXF1YWxFbGVtZW50Q291bnRzW2VudHJ5XSA9IGNvdW50IC0gMTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgaW50IGhhc2goTWFwPEssIFY+IG1hcCkgewogICAgaWYgKG1hcCA9PSBudWxsKSByZXR1cm4gbnVsbC5oYXNoQ29kZTsKICAgIGludCBoYXNoID0gMDsKICAgIGZvciAoSyBrZXkgaW4gbWFwLmtleXMpIHsKICAgICAgaW50IGtleUhhc2ggPSBfa2V5RXF1YWxpdHkuaGFzaChrZXkpOwogICAgICBpbnQgdmFsdWVIYXNoID0gX3ZhbHVlRXF1YWxpdHkuaGFzaChtYXBba2V5XSk7CiAgICAgIGhhc2ggPSAoaGFzaCArIDMgKiBrZXlIYXNoICsgNyAqIHZhbHVlSGFzaCkgJiBfSEFTSF9NQVNLOwogICAgfQogICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMykpICYgX0hBU0hfTUFTSzsKICAgIGhhc2ggXj0gKGhhc2ggPj4gMTEpOwogICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMTUpKSAmIF9IQVNIX01BU0s7CiAgICByZXR1cm4gaGFzaDsKICB9CgogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgPT4gbyBpcyBNYXA8SywgVj47Cn0KCi8vLyBDb21iaW5lcyBzZXZlcmFsIGVxdWFsaXRpZXMgaW50byBhIHNpbmdsZSBlcXVhbGl0eS4KLy8vCi8vLyBUcmllcyBlYWNoIGVxdWFsaXR5IGluIG9yZGVyLCB1c2luZyBbRXF1YWxpdHkuaXNWYWxpZEtleV0sIGFuZCByZXR1cm5zCi8vLyB0aGUgcmVzdWx0IG9mIHRoZSBmaXJzdCBlcXVhbGl0eSB0aGF0IGFwcGxpZXMgdG8gdGhlIGFyZ3VtZW50IG9yIGFyZ3VtZW50cy4KLy8vCi8vLyBGb3IgYGVxdWFsc2AsIHRoZSBmaXJzdCBlcXVhbGl0eSB0aGF0IG1hdGNoZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHVzZWQsCi8vLyBhbmQgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBgZXF1YWxzYCBpcyBub3QgdmFsaWQgZm9yIHRoYXQgZXF1YWxpdHksCi8vLyBpdCByZXR1cm5zIGZhbHNlLgovLy8KLy8vIEJlY2F1c2UgdGhlIGVxdWFsaXRpZXMgYXJlIHRyaWVkIGluIG9yZGVyLCB0aGV5IHNob3VsZCBnZW5lcmFsbHkgd29yayBvbgovLy8gZGlzam9pbnQgdHlwZXMuIE90aGVyd2lzZSB0aGUgbXVsdGktZXF1YWxpdHkgbWF5IGdpdmUgaW5jb25zaXN0ZW50IHJlc3VsdHMKLy8vIGZvciBgZXF1YWxzKGUxLCBlMilgIGFuZCBgZXF1YWxzKGUyLCBlMSlgLiBUaGlzIGNhbiBoYXBwZW4gaWYgb25lIGVxdWFsaXR5Ci8vLyBjb25zaWRlcnMgb25seSBgZTFgIGEgdmFsaWQga2V5LCBhbmQgbm90IGBlMmAsIGJ1dCBhbiBlcXVhbGl0eSB3aGljaCBpcwovLy8gY2hlY2tlZCBsYXRlciwgYWxsb3dzIGJvdGguCmNsYXNzIE11bHRpRXF1YWxpdHk8RT4gaW1wbGVtZW50cyBFcXVhbGl0eTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RXF1YWxpdHk8RT4+IF9lcXVhbGl0aWVzOwoKICBjb25zdCBNdWx0aUVxdWFsaXR5KEl0ZXJhYmxlPEVxdWFsaXR5PEU+PiBlcXVhbGl0aWVzKQogICAgICA6IF9lcXVhbGl0aWVzID0gZXF1YWxpdGllczsKCiAgYm9vbCBlcXVhbHMoRSBlMSwgRSBlMikgewogICAgZm9yIChFcXVhbGl0eTxFPiBlcSBpbiBfZXF1YWxpdGllcykgewogICAgICBpZiAoZXEuaXNWYWxpZEtleShlMSkpIHJldHVybiBlcS5pc1ZhbGlkS2V5KGUyKSAmJiBlcS5lcXVhbHMoZTEsIGUyKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGludCBoYXNoKEUgZSkgewogICAgZm9yIChFcXVhbGl0eTxFPiBlcSBpbiBfZXF1YWxpdGllcykgewogICAgICBpZiAoZXEuaXNWYWxpZEtleShlKSkgcmV0dXJuIGVxLmhhc2goZSk7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgewogICAgZm9yIChFcXVhbGl0eTxFPiBlcSBpbiBfZXF1YWxpdGllcykgewogICAgICBpZiAoZXEuaXNWYWxpZEtleShvKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gRGVlcCBlcXVhbGl0eSBvbiBjb2xsZWN0aW9ucy4KLy8vCi8vLyBSZWNvZ25pemVzIGxpc3RzLCBzZXRzLCBpdGVyYWJsZXMgYW5kIG1hcHMgYW5kIGNvbXBhcmVzIHRoZWlyIGVsZW1lbnRzIHVzaW5nCi8vLyBkZWVwIGVxdWFsaXR5IGFzIHdlbGwuCi8vLwovLy8gTm9uLWl0ZXJhYmxlL21hcCBvYmplY3RzIGFyZSBjb21wYXJlZCB1c2luZyBhIGNvbmZpZ3VyYWJsZSBiYXNlIGVxdWFsaXR5LgovLy8KLy8vIFdvcmtzIGluIG9uZSBvZiB0d28gbW9kZXM6IG9yZGVyZWQgb3IgdW5vcmRlcmVkLgovLy8KLy8vIEluIG9yZGVyZWQgbW9kZSwgbGlzdHMgYW5kIGl0ZXJhYmxlcyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBlcXVhbCBlbGVtZW50cwovLy8gaW4gdGhlIHNhbWUgb3JkZXIuIEluIHVub3JkZXJlZCBtb2RlLCB0aGUgb3JkZXIgb2YgZWxlbWVudHMgaW4gaXRlcmFibGVzCi8vLyBhbmQgbGlzdHMgYXJlIG5vdCBpbXBvcnRhbnQuCi8vLwovLy8gQSBsaXN0IGlzIG9ubHkgZXF1YWwgdG8gYW5vdGhlciBsaXN0LCBsaWtld2lzZSBmb3Igc2V0cyBhbmQgbWFwcy4gQWxsIG90aGVyCi8vLyBpdGVyYWJsZXMgYXJlIGNvbXBhcmVkIGFzIGl0ZXJhYmxlcyBvbmx5LgpjbGFzcyBEZWVwQ29sbGVjdGlvbkVxdWFsaXR5IGltcGxlbWVudHMgRXF1YWxpdHkgewogIGZpbmFsIEVxdWFsaXR5IF9iYXNlOwogIGZpbmFsIGJvb2wgX3Vub3JkZXJlZDsKICBjb25zdCBEZWVwQ29sbGVjdGlvbkVxdWFsaXR5KFtFcXVhbGl0eSBiYXNlID0gY29uc3QgRGVmYXVsdEVxdWFsaXR5KCldKQogICAgICA6IF9iYXNlID0gYmFzZSwKICAgICAgICBfdW5vcmRlcmVkID0gZmFsc2U7CgogIC8vLyBDcmVhdGVzIGEgZGVlcCBlcXVhbGl0eSBvbiBjb2xsZWN0aW9ucyB3aGVyZSB0aGUgb3JkZXIgb2YgbGlzdHMgYW5kCiAgLy8vIGl0ZXJhYmxlcyBhcmUgbm90IGNvbnNpZGVyZWQgaW1wb3J0YW50LiBUaGF0IGlzLCBsaXN0cyBhbmQgaXRlcmFibGVzIGFyZQogIC8vLyB0cmVhdGVkIGFzIHVub3JkZXJlZCBpdGVyYWJsZXMuCiAgY29uc3QgRGVlcENvbGxlY3Rpb25FcXVhbGl0eS51bm9yZGVyZWQoCiAgICAgIFtFcXVhbGl0eSBiYXNlID0gY29uc3QgRGVmYXVsdEVxdWFsaXR5KCldKQogICAgICA6IF9iYXNlID0gYmFzZSwKICAgICAgICBfdW5vcmRlcmVkID0gdHJ1ZTsKCiAgYm9vbCBlcXVhbHMoZTEsIGUyKSB7CiAgICBpZiAoZTEgaXMgU2V0KSB7CiAgICAgIHJldHVybiBlMiBpcyBTZXQgJiYgbmV3IFNldEVxdWFsaXR5KHRoaXMpLmVxdWFscyhlMSwgZTIpOwogICAgfQogICAgaWYgKGUxIGlzIE1hcCkgewogICAgICByZXR1cm4gZTIgaXMgTWFwICYmCiAgICAgICAgICBuZXcgTWFwRXF1YWxpdHkoa2V5czogdGhpcywgdmFsdWVzOiB0aGlzKS5lcXVhbHMoZTEsIGUyKTsKICAgIH0KICAgIGlmICghX3Vub3JkZXJlZCkgewogICAgICBpZiAoZTEgaXMgTGlzdCkgewogICAgICAgIHJldHVybiBlMiBpcyBMaXN0ICYmIG5ldyBMaXN0RXF1YWxpdHkodGhpcykuZXF1YWxzKGUxLCBlMik7CiAgICAgIH0KICAgICAgaWYgKGUxIGlzIEl0ZXJhYmxlKSB7CiAgICAgICAgcmV0dXJuIGUyIGlzIEl0ZXJhYmxlICYmIG5ldyBJdGVyYWJsZUVxdWFsaXR5KHRoaXMpLmVxdWFscyhlMSwgZTIpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGUxIGlzIEl0ZXJhYmxlKSB7CiAgICAgIGlmIChlMSBpcyBMaXN0ICE9IGUyIGlzIExpc3QpIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIGUyIGlzIEl0ZXJhYmxlICYmCiAgICAgICAgICBuZXcgVW5vcmRlcmVkSXRlcmFibGVFcXVhbGl0eSh0aGlzKS5lcXVhbHMoZTEsIGUyKTsKICAgIH0KICAgIHJldHVybiBfYmFzZS5lcXVhbHMoZTEsIGUyKTsKICB9CgogIGludCBoYXNoKE9iamVjdCBvKSB7CiAgICBpZiAobyBpcyBTZXQpIHJldHVybiBuZXcgU2V0RXF1YWxpdHkodGhpcykuaGFzaChvKTsKICAgIGlmIChvIGlzIE1hcCkgcmV0dXJuIG5ldyBNYXBFcXVhbGl0eShrZXlzOiB0aGlzLCB2YWx1ZXM6IHRoaXMpLmhhc2gobyk7CiAgICBpZiAoIV91bm9yZGVyZWQpIHsKICAgICAgaWYgKG8gaXMgTGlzdCkgcmV0dXJuIG5ldyBMaXN0RXF1YWxpdHkodGhpcykuaGFzaChvKTsKICAgICAgaWYgKG8gaXMgSXRlcmFibGUpIHJldHVybiBuZXcgSXRlcmFibGVFcXVhbGl0eSh0aGlzKS5oYXNoKG8pOwogICAgfSBlbHNlIGlmIChvIGlzIEl0ZXJhYmxlKSB7CiAgICAgIHJldHVybiBuZXcgVW5vcmRlcmVkSXRlcmFibGVFcXVhbGl0eSh0aGlzKS5oYXNoKG8pOwogICAgfQogICAgcmV0dXJuIF9iYXNlLmhhc2gobyk7CiAgfQoKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pID0+IG8gaXMgSXRlcmFibGUgfHwgbyBpcyBNYXAgfHwgX2Jhc2UuaXNWYWxpZEtleShvKTsKfQoKLy8vIFN0cmluZyBlcXVhbGl0eSB0aGF0J3MgaW5zZW5zaXRpdmUgdG8gZGlmZmVyZW5jZXMgaW4gQVNDSUkgY2FzZS4KLy8vCi8vLyBOb24tQVNDSUkgY2hhcmFjdGVycyBhcmUgY29tcGFyZWQgYXMtaXMsIHdpdGggbm8gY29udmVyc2lvbi4KY2xhc3MgQ2FzZUluc2Vuc2l0aXZlRXF1YWxpdHkgaW1wbGVtZW50cyBFcXVhbGl0eTxTdHJpbmc+IHsKICBjb25zdCBDYXNlSW5zZW5zaXRpdmVFcXVhbGl0eSgpOwoKICBib29sIGVxdWFscyhTdHJpbmcgc3RyaW5nMSwgU3RyaW5nIHN0cmluZzIpID0+CiAgICAgIGVxdWFsc0lnbm9yZUFzY2lpQ2FzZShzdHJpbmcxLCBzdHJpbmcyKTsKCiAgaW50IGhhc2goU3RyaW5nIHN0cmluZykgPT4gaGFzaElnbm9yZUFzY2lpQ2FzZShzdHJpbmcpOwoKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG9iamVjdCkgPT4gb2JqZWN0IGlzIFN0cmluZzsKfQqB0gBOTjwBGgEbASMBLB0xASwGMRsBJAZCMBEBSQZMEh0CASMBMQQiDB4cBggEUAw0CAROJjAxHwEyHAFQGhgBRgEsAR4SIDUGEgQCAVAEThIET0tRMhsxJCUCAUgzHDAoJQIBGwROBDs5LT0mGj8sAT42PiIiEyUzIUwGBAEjMC4SIi4mMRsGLhovEQQBMQIBFwRIHQRGPQQ7OS01Jk4sAS4uNh8uJ0YGEQQBGywuTEcSLC4mMRsGLhovEQQBLQIBPB0mATMBKjY+KikpMhQfHSQdEAYfHTUdEAYYBAEZMBIiLiYGLhovEQQCAUkEUUA4UCM/IAExAgEWBExAMwRONwQ7OS09TSABLAIBKgQ5QRIeDQ8yARYtNRIBJBw2OgIBFgRLRgQ7OS05IiQVMjQdIQEwLDQeLTwfPS0kLQYfPS01LQYRBAEcKxIeLDVABi4aLxEEAS8CATgES1AETksWBE1PT0wgMCsBOCIBHCpMBhIEARIqLwYOBAEeKikGEgQCASIEURsETgQ1BE1NIQRQLjMYGUoWHAFKTyYqMRYbARgVQAYVGkQGFxhECBxMCCEyHz4GIQQBFzhMFzxEIDoGGgQBUQIBRQRBPCMBMS8BOgE2AgEkcGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lcXVhbGl0eS5kYXJ0PXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvZXF1YWxpdHlfbWFwLmRhcnSEgy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJ2VxdWFsaXR5LmRhcnQnOwppbXBvcnQgJ3dyYXBwZXJzLmRhcnQnOwoKLy8vIEEgW01hcF0gd2hvc2Uga2V5IGVxdWFsaXR5IGlzIGRldGVybWluZWQgYnkgYW4gW0VxdWFsaXR5XSBvYmplY3QuCmNsYXNzIEVxdWFsaXR5TWFwPEssIFY+IGV4dGVuZHMgRGVsZWdhdGluZ01hcDxLLCBWPiB7CiAgLy8vIENyZWF0ZXMgYSBtYXAgd2l0aCBlcXVhbGl0eSBiYXNlZCBvbiBbZXF1YWxpdHldLgogIEVxdWFsaXR5TWFwKEVxdWFsaXR5PEs+IGVxdWFsaXR5KQogICAgICA6IHN1cGVyKG5ldyBMaW5rZWRIYXNoTWFwKAogICAgICAgICAgICBlcXVhbHM6IGVxdWFsaXR5LmVxdWFscywKICAgICAgICAgICAgaGFzaENvZGU6IGVxdWFsaXR5Lmhhc2gsCiAgICAgICAgICAgIGlzVmFsaWRLZXk6IGVxdWFsaXR5LmlzVmFsaWRLZXkpKTsKCiAgLy8vIENyZWF0ZXMgYSBtYXAgd2l0aCBlcXVhbGl0eSBiYXNlZCBvbiBbZXF1YWxpdHldIHRoYXQgY29udGFpbnMgYWxsCiAgLy8vIGtleS12YWx1ZSBwYWlycyBvZiBbb3RoZXJdLgogIC8vLwogIC8vLyBJZiBbb3RoZXJdIGhhcyBtdWx0aXBsZSBrZXlzIHRoYXQgYXJlIGVxdWl2YWxlbnQgYWNjb3JkaW5nIHRvIFtlcXVhbGl0eV0sCiAgLy8vIHRoZSBsYXN0IG9uZSByZWFjaGVkIGR1cmluZyBpdGVyYXRpb24gdGFrZXMgcHJlY2VkZW5jZS4KICBFcXVhbGl0eU1hcC5mcm9tKEVxdWFsaXR5PEs+IGVxdWFsaXR5LCBNYXA8SywgVj4gb3RoZXIpCiAgICAgIDogc3VwZXIobmV3IExpbmtlZEhhc2hNYXAoCiAgICAgICAgICAgIGVxdWFsczogZXF1YWxpdHkuZXF1YWxzLAogICAgICAgICAgICBoYXNoQ29kZTogZXF1YWxpdHkuaGFzaCwKICAgICAgICAgICAgaXNWYWxpZEtleTogZXF1YWxpdHkuaXNWYWxpZEtleSkpIHsKICAgIGFkZEFsbChvdGhlcik7CiAgfQp9CiEATk48ARoBGBgBRjY3JCElJS8BSCIGUD46ISUlMBMEAgEocGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lcXVhbGl0eV9tYXAuZGFydD1zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2VxdWFsaXR5X3NldC5kYXJ0hHsvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICdlcXVhbGl0eS5kYXJ0JzsKaW1wb3J0ICd3cmFwcGVycy5kYXJ0JzsKCi8vLyBBIFtNYXBdIHdob3NlIGtleSBlcXVhbGl0eSBpcyBkZXRlcm1pbmVkIGJ5IGFuIFtFcXVhbGl0eV0gb2JqZWN0LgpjbGFzcyBFcXVhbGl0eVNldDxFPiBleHRlbmRzIERlbGVnYXRpbmdTZXQ8RT4gewogIC8vLyBDcmVhdGVzIGEgc2V0IHdpdGggZXF1YWxpdHkgYmFzZWQgb24gW2VxdWFsaXR5XS4KICBFcXVhbGl0eVNldChFcXVhbGl0eTxFPiBlcXVhbGl0eSkKICAgICAgOiBzdXBlcihuZXcgTGlua2VkSGFzaFNldCgKICAgICAgICAgICAgZXF1YWxzOiBlcXVhbGl0eS5lcXVhbHMsCiAgICAgICAgICAgIGhhc2hDb2RlOiBlcXVhbGl0eS5oYXNoLAogICAgICAgICAgICBpc1ZhbGlkS2V5OiBlcXVhbGl0eS5pc1ZhbGlkS2V5KSk7CgogIC8vLyBDcmVhdGVzIGEgc2V0IHdpdGggZXF1YWxpdHkgYmFzZWQgb24gW2VxdWFsaXR5XSB0aGF0IGNvbnRhaW5zIGFsbAogIC8vLyBlbGVtZW50cyBpbiBbb3RoZXJdLgogIC8vLwogIC8vLyBJZiBbb3RoZXJdIGhhcyBtdWx0aXBsZSB2YWx1ZXMgdGhhdCBhcmUgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8KICAvLy8gW2VxdWFsaXR5XSwgdGhlIGZpcnN0IG9uZSByZWFjaGVkIGR1cmluZyBpdGVyYXRpb24gdGFrZXMgcHJlY2VkZW5jZS4KICBFcXVhbGl0eVNldC5mcm9tKEVxdWFsaXR5PEU+IGVxdWFsaXR5LCBJdGVyYWJsZTxFPiBvdGhlcikKICAgICAgOiBzdXBlcihuZXcgTGlua2VkSGFzaFNldCgKICAgICAgICAgICAgZXF1YWxzOiBlcXVhbGl0eS5lcXVhbHMsCiAgICAgICAgICAgIGhhc2hDb2RlOiBlcXVhbGl0eS5oYXNoLAogICAgICAgICAgICBpc1ZhbGlkS2V5OiBlcXVhbGl0eS5pc1ZhbGlkS2V5KSkgewogICAgYWRkQWxsKG90aGVyKTsKICB9Cn0KIQBOTjwBGgEYGAFGMDckISUlLwFIGwZGSzwhJSUwEwQCAShwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2VxdWFsaXR5X3NldC5kYXJ0OnNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvZnVuY3Rpb25zLmRhcnSbxy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CmltcG9ydCAnZGFydDptYXRoJyBhcyBtYXRoOwoKaW1wb3J0ICd1dGlscy5kYXJ0JzsKCi8vIFRPRE8obndlaXopOiBXaGVuIHNkayMyNjQ4OCBpcyBmaXhlZCwgdXNlIG92ZXJsb2FkcyB0byBlbnN1cmUgdGhhdCBpZiBba2V5XQovLyBvciBbdmFsdWVdIGlzbid0IHBhc3NlZCwgYEsyYC9gVjJgIGRlZmF1bHRzIHRvIGBLMWAvYFYxYCwgcmVzcGVjdGl2ZWx5LgovLy8gQ3JlYXRlcyBhIG5ldyBtYXAgZnJvbSBbbWFwXSB3aXRoIG5ldyBrZXlzIGFuZCB2YWx1ZXMuCi8vLwovLy8gVGhlIHJldHVybiB2YWx1ZXMgb2YgW2tleV0gYXJlIHVzZWQgYXMgdGhlIGtleXMgYW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mCi8vLyBbdmFsdWVdIGFyZSB1c2VkIGFzIHRoZSB2YWx1ZXMgZm9yIHRoZSBuZXcgbWFwLgpNYXA8SzIsIFYyPiBtYXBNYXA8SzEsIFYxLCBLMiwgVjI+KE1hcDxLMSwgVjE+IG1hcCwKICAgIHtLMiBrZXkoSzEga2V5LCBWMSB2YWx1ZSksIFYyIHZhbHVlKEsxIGtleSwgVjEgdmFsdWUpfSkgewogIGtleSA/Pz0gKG1hcEtleSwgXykgPT4gbWFwS2V5IGFzIEsyOwogIHZhbHVlID8/PSAoXywgbWFwVmFsdWUpID0+IG1hcFZhbHVlIGFzIFYyOwoKICB2YXIgcmVzdWx0ID0gPEsyLCBWMj57fTsKICBtYXAuZm9yRWFjaCgobWFwS2V5LCBtYXBWYWx1ZSkgewogICAgcmVzdWx0W2tleShtYXBLZXksIG1hcFZhbHVlKV0gPSB2YWx1ZShtYXBLZXksIG1hcFZhbHVlKTsKICB9KTsKICByZXR1cm4gcmVzdWx0Owp9CgovLy8gUmV0dXJucyBhIG5ldyBtYXAgd2l0aCBhbGwga2V5L3ZhbHVlIHBhaXJzIGluIGJvdGggW21hcDFdIGFuZCBbbWFwMl0uCi8vLwovLy8gSWYgdGhlcmUgYXJlIGtleXMgdGhhdCBvY2N1ciBpbiBib3RoIG1hcHMsIHRoZSBbdmFsdWVdIGZ1bmN0aW9uIGlzIHVzZWQgdG8KLy8vIHNlbGVjdCB0aGUgdmFsdWUgdGhhdCBnb2VzIGludG8gdGhlIHJlc3VsdGluZyBtYXAgYmFzZWQgb24gdGhlIHR3byBvcmlnaW5hbAovLy8gdmFsdWVzLiBJZiBbdmFsdWVdIGlzIG9taXR0ZWQsIHRoZSB2YWx1ZSBmcm9tIFttYXAyXSBpcyB1c2VkLgpNYXA8SywgVj4gbWVyZ2VNYXBzPEssIFY+KE1hcDxLLCBWPiBtYXAxLCBNYXA8SywgVj4gbWFwMiwKICAgIHtWIHZhbHVlKFYgdmFsdWUxLCBWIHZhbHVlMil9KSB7CiAgdmFyIHJlc3VsdCA9IG5ldyBNYXA8SywgVj4uZnJvbShtYXAxKTsKICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdC4uYWRkQWxsKG1hcDIpOwoKICBtYXAyLmZvckVhY2goKGtleSwgbWFwVmFsdWUpIHsKICAgIHJlc3VsdFtrZXldID0KICAgICAgICByZXN1bHQuY29udGFpbnNLZXkoa2V5KSA/IHZhbHVlKHJlc3VsdFtrZXldLCBtYXBWYWx1ZSkgOiBtYXBWYWx1ZTsKICB9KTsKICByZXR1cm4gcmVzdWx0Owp9CgovLy8gR3JvdXBzIHRoZSBlbGVtZW50cyBpbiBbdmFsdWVzXSBieSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgW2tleV0uCi8vLwovLy8gUmV0dXJucyBhIG1hcCBmcm9tIGtleXMgY29tcHV0ZWQgYnkgW2tleV0gdG8gYSBsaXN0IG9mIGFsbCB2YWx1ZXMgZm9yIHdoaWNoCi8vLyBba2V5XSByZXR1cm5zIHRoYXQga2V5LiBUaGUgdmFsdWVzIGFwcGVhciBpbiB0aGUgbGlzdCBpbiB0aGUgc2FtZSByZWxhdGl2ZQovLy8gb3JkZXIgYXMgaW4gW3ZhbHVlc10uCk1hcDxULCBMaXN0PFM+PiBncm91cEJ5PFMsIFQ+KEl0ZXJhYmxlPFM+IHZhbHVlcywgVCBrZXkoUyBlbGVtZW50KSkgewogIHZhciBtYXAgPSA8VCwgTGlzdDxTPj57fTsKICBmb3IgKHZhciBlbGVtZW50IGluIHZhbHVlcykgewogICAgdmFyIGxpc3QgPSBtYXAucHV0SWZBYnNlbnQoa2V5KGVsZW1lbnQpLCAoKSA9PiBbXSk7CiAgICBsaXN0LmFkZChlbGVtZW50KTsKICB9CiAgcmV0dXJuIG1hcDsKfQoKLy8vIFJldHVybnMgdGhlIGVsZW1lbnQgb2YgW3ZhbHVlc10gZm9yIHdoaWNoIFtvcmRlckJ5XSByZXR1cm5zIHRoZSBtaW5pbXVtCi8vLyB2YWx1ZS4KLy8vCi8vLyBUaGUgdmFsdWVzIHJldHVybmVkIGJ5IFtvcmRlckJ5XSBhcmUgY29tcGFyZWQgdXNpbmcgdGhlIFtjb21wYXJlXSBmdW5jdGlvbi4KLy8vIElmIFtjb21wYXJlXSBpcyBvbWl0dGVkLCB2YWx1ZXMgbXVzdCBpbXBsZW1lbnQgW0NvbXBhcmFibGU8VD5dIGFuZCB0aGV5IGFyZQovLy8gY29tcGFyZWQgdXNpbmcgdGhlaXIgW0NvbXBhcmFibGUuY29tcGFyZVRvXS4KUyBtaW5CeTxTLCBUPihJdGVyYWJsZTxTPiB2YWx1ZXMsIFQgb3JkZXJCeShTIGVsZW1lbnQpLAogICAge2ludCBjb21wYXJlKFQgdmFsdWUxLCBUIHZhbHVlMil9KSB7CiAgY29tcGFyZSA/Pz0gZGVmYXVsdENvbXBhcmU8VD4oKTsKCiAgUyBtaW5WYWx1ZTsKICBUIG1pbk9yZGVyQnk7CiAgZm9yICh2YXIgZWxlbWVudCBpbiB2YWx1ZXMpIHsKICAgIHZhciBlbGVtZW50T3JkZXJCeSA9IG9yZGVyQnkoZWxlbWVudCk7CiAgICBpZiAobWluT3JkZXJCeSA9PSBudWxsIHx8IGNvbXBhcmUoZWxlbWVudE9yZGVyQnksIG1pbk9yZGVyQnkpIDwgMCkgewogICAgICBtaW5WYWx1ZSA9IGVsZW1lbnQ7CiAgICAgIG1pbk9yZGVyQnkgPSBlbGVtZW50T3JkZXJCeTsKICAgIH0KICB9CiAgcmV0dXJuIG1pblZhbHVlOwp9CgovLy8gUmV0dXJucyB0aGUgZWxlbWVudCBvZiBbdmFsdWVzXSBmb3Igd2hpY2ggW29yZGVyQnldIHJldHVybnMgdGhlIG1heGltdW0KLy8vIHZhbHVlLgovLy8KLy8vIFRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgW29yZGVyQnldIGFyZSBjb21wYXJlZCB1c2luZyB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uLgovLy8gSWYgW2NvbXBhcmVdIGlzIG9taXR0ZWQsIHZhbHVlcyBtdXN0IGltcGxlbWVudCBbQ29tcGFyYWJsZTxUPl0gYW5kIHRoZXkgYXJlCi8vLyBjb21wYXJlZCB1c2luZyB0aGVpciBbQ29tcGFyYWJsZS5jb21wYXJlVG9dLgpTIG1heEJ5PFMsIFQ+KEl0ZXJhYmxlPFM+IHZhbHVlcywgVCBvcmRlckJ5KFMgZWxlbWVudCksCiAgICB7aW50IGNvbXBhcmUoVCB2YWx1ZTEsIFQgdmFsdWUyKX0pIHsKICBjb21wYXJlID8/PSBkZWZhdWx0Q29tcGFyZTxUPigpOwoKICBTIG1heFZhbHVlOwogIFQgbWF4T3JkZXJCeTsKICBmb3IgKHZhciBlbGVtZW50IGluIHZhbHVlcykgewogICAgdmFyIGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTsKICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgY29tcGFyZShlbGVtZW50T3JkZXJCeSwgbWF4T3JkZXJCeSkgPiAwKSB7CiAgICAgIG1heFZhbHVlID0gZWxlbWVudDsKICAgICAgbWF4T3JkZXJCeSA9IGVsZW1lbnRPcmRlckJ5OwogICAgfQogIH0KICByZXR1cm4gbWF4VmFsdWU7Cn0KCi8vLyBSZXR1cm5zIHRoZSBbdHJhbnNpdGl2ZSBjbG9zdXJlXVtdIG9mIFtncmFwaF0uCi8vLwovLy8gW3RyYW5zaXRpdmUgY2xvc3VyZV06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RyYW5zaXRpdmVfY2xvc3VyZQovLy8KLy8vIEludGVycHJldHMgW2dyYXBoXSBhcyBhIGRpcmVjdGVkIGdyYXBoIHdpdGggYSB2ZXJ0ZXggZm9yIGVhY2gga2V5IGFuZCBlZGdlcwovLy8gZnJvbSBlYWNoIGtleSB0byB0aGUgdmFsdWVzIHRoYXQgdGhlIGtleSBtYXBzIHRvLgovLy8KLy8vIEFzc3VtZXMgdGhhdCBldmVyeSB2ZXJ0ZXggaW4gdGhlIGdyYXBoIGhhcyBhIGtleSB0byByZXByZXNlbnQgaXQsIGV2ZW4gaWYKLy8vIHRoYXQgdmVydGV4IGhhcyBubyBvdXRnb2luZyBlZGdlcy4gVGhpcyBpc24ndCBjaGVja2VkLCBidXQgaWYgaXQncyBub3QKLy8vIHNhdGlzZmllZCwgdGhlIGZ1bmN0aW9uIG1heSBjcmFzaCBvciBwcm92aWRlIHVuZXhwZWN0ZWQgb3V0cHV0LiBGb3IgZXhhbXBsZSwKLy8vIGB7ImEiOiBbImIiXX1gIGlzIG5vdCB2YWxpZCwgYnV0IGB7ImEiOiBbImIiXSwgImIiOiBbXX1gIGlzLgpNYXA8VCwgU2V0PFQ+PiB0cmFuc2l0aXZlQ2xvc3VyZTxUPihNYXA8VCwgSXRlcmFibGU8VD4+IGdyYXBoKSB7CiAgLy8gVGhpcyB1c2VzIFtXYXJzaGFsbCdzIGFsZ29yaXRobV1bXSwgbW9kaWZpZWQgbm90IHRvIGFkZCBhIHZlcnRleCBmcm9tIGVhY2gKICAvLyBub2RlIHRvIGl0c2VsZi4KICAvLwogIC8vIFtXYXJzaGFsbCdzIGFsZ29yaXRobV06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zsb3lkJUUyJTgwJTkzV2Fyc2hhbGxfYWxnb3JpdGhtI0FwcGxpY2F0aW9uc19hbmRfZ2VuZXJhbGl6YXRpb25zLgogIHZhciByZXN1bHQgPSA8VCwgU2V0PFQ+Pnt9OwogIGdyYXBoLmZvckVhY2goKHZlcnRleCwgZWRnZXMpIHsKICAgIHJlc3VsdFt2ZXJ0ZXhdID0gbmV3IFNldDxUPi5mcm9tKGVkZ2VzKTsKICB9KTsKCiAgLy8gTGlzdHMgYXJlIGZhc3RlciB0byBpdGVyYXRlIHRoYW4gbWFwcywgc28gd2UgY3JlYXRlIGEgbGlzdCBzaW5jZSB3ZSdyZQogIC8vIGl0ZXJhdGluZyByZXBlYXRlZGx5LgogIHZhciBrZXlzID0gZ3JhcGgua2V5cy50b0xpc3QoKTsKICBmb3IgKHZhciB2ZXJ0ZXgxIGluIGtleXMpIHsKICAgIGZvciAodmFyIHZlcnRleDIgaW4ga2V5cykgewogICAgICBmb3IgKHZhciB2ZXJ0ZXgzIGluIGtleXMpIHsKICAgICAgICBpZiAocmVzdWx0W3ZlcnRleDJdLmNvbnRhaW5zKHZlcnRleDEpICYmCiAgICAgICAgICAgIHJlc3VsdFt2ZXJ0ZXgxXS5jb250YWlucyh2ZXJ0ZXgzKSkgewogICAgICAgICAgcmVzdWx0W3ZlcnRleDJdLmFkZCh2ZXJ0ZXgzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiByZXN1bHQ7Cn0KCi8vLyBSZXR1cm5zIHRoZSBbc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHNdW10gb2YgW2dyYXBoXSwgaW4gdG9wb2xvZ2ljYWwKLy8vIG9yZGVyLgovLy8KLy8vIFtzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50c106IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0cm9uZ2x5X2Nvbm5lY3RlZF9jb21wb25lbnQKLy8vCi8vLyBJbnRlcnByZXRzIFtncmFwaF0gYXMgYSBkaXJlY3RlZCBncmFwaCB3aXRoIGEgdmVydGV4IGZvciBlYWNoIGtleSBhbmQgZWRnZXMKLy8vIGZyb20gZWFjaCBrZXkgdG8gdGhlIHZhbHVlcyB0aGF0IHRoZSBrZXkgbWFwcyB0by4KLy8vCi8vLyBBc3N1bWVzIHRoYXQgZXZlcnkgdmVydGV4IGluIHRoZSBncmFwaCBoYXMgYSBrZXkgdG8gcmVwcmVzZW50IGl0LCBldmVuIGlmCi8vLyB0aGF0IHZlcnRleCBoYXMgbm8gb3V0Z29pbmcgZWRnZXMuIFRoaXMgaXNuJ3QgY2hlY2tlZCwgYnV0IGlmIGl0J3Mgbm90Ci8vLyBzYXRpc2ZpZWQsIHRoZSBmdW5jdGlvbiBtYXkgY3Jhc2ggb3IgcHJvdmlkZSB1bmV4cGVjdGVkIG91dHB1dC4gRm9yIGV4YW1wbGUsCi8vLyBgeyJhIjogWyJiIl19YCBpcyBub3QgdmFsaWQsIGJ1dCBgeyJhIjogWyJiIl0sICJiIjogW119YCBpcy4KTGlzdDxTZXQ8VD4+IHN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50czxUPihNYXA8VCwgSXRlcmFibGU8VD4+IGdyYXBoKSB7CiAgLy8gVGhpcyB1c2VzIFtUYXJqYW4ncyBhbGdvcml0aG1dW10uCiAgLy8KICAvLyBbVGFyamFuJ3MgYWxnb3JpdGhtXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGFyamFuJTI3c19zdHJvbmdseV9jb25uZWN0ZWRfY29tcG9uZW50c19hbGdvcml0aG0KICB2YXIgaW5kZXggPSAwOwogIHZhciBzdGFjayA9IDxUPltdOwogIHZhciByZXN1bHQgPSA8U2V0PFQ+PltdOwoKICAvLyBUaGUgb3JkZXIgb2YgdGhlc2UgZG9lc24ndCBtYXR0ZXIsIHNvIHdlIHVzZSB1bi1saW5rZWQgaW1wbGVtZW50YXRpb25zIHRvCiAgLy8gYXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuCiAgdmFyIGluZGljZXMgPSBuZXcgSGFzaE1hcDxULCBpbnQ+KCk7CiAgdmFyIGxvd0xpbmtzID0gbmV3IEhhc2hNYXA8VCwgaW50PigpOwogIHZhciBvblN0YWNrID0gbmV3IEhhc2hTZXQ8VD4oKTsKCiAgc3Ryb25nQ29ubmVjdChUIHZlcnRleCkgewogICAgaW5kaWNlc1t2ZXJ0ZXhdID0gaW5kZXg7CiAgICBsb3dMaW5rc1t2ZXJ0ZXhdID0gaW5kZXg7CiAgICBpbmRleCsrOwoKICAgIHN0YWNrLmFkZCh2ZXJ0ZXgpOwogICAgb25TdGFjay5hZGQodmVydGV4KTsKCiAgICBmb3IgKHZhciBzdWNjZXNzb3IgaW4gZ3JhcGhbdmVydGV4XSkgewogICAgICBpZiAoIWluZGljZXMuY29udGFpbnNLZXkoc3VjY2Vzc29yKSkgewogICAgICAgIHN0cm9uZ0Nvbm5lY3Qoc3VjY2Vzc29yKTsKICAgICAgICBsb3dMaW5rc1t2ZXJ0ZXhdID0gbWF0aC5taW4obG93TGlua3NbdmVydGV4XSwgbG93TGlua3Nbc3VjY2Vzc29yXSk7CiAgICAgIH0gZWxzZSBpZiAob25TdGFjay5jb250YWlucyhzdWNjZXNzb3IpKSB7CiAgICAgICAgbG93TGlua3NbdmVydGV4XSA9IG1hdGgubWluKGxvd0xpbmtzW3ZlcnRleF0sIGxvd0xpbmtzW3N1Y2Nlc3Nvcl0pOwogICAgICB9CiAgICB9CgogICAgaWYgKGxvd0xpbmtzW3ZlcnRleF0gPT0gaW5kaWNlc1t2ZXJ0ZXhdKSB7CiAgICAgIHZhciBjb21wb25lbnQgPSBuZXcgU2V0PFQ+KCk7CiAgICAgIFQgbmVpZ2hib3I7CiAgICAgIGRvIHsKICAgICAgICBuZWlnaGJvciA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICBvblN0YWNrLnJlbW92ZShuZWlnaGJvcik7CiAgICAgICAgY29tcG9uZW50LmFkZChuZWlnaGJvcik7CiAgICAgIH0gd2hpbGUgKG5laWdoYm9yICE9IHZlcnRleCk7CiAgICAgIHJlc3VsdC5hZGQoY29tcG9uZW50KTsKICAgIH0KICB9CgogIGZvciAodmFyIHZlcnRleCBpbiBncmFwaC5rZXlzKSB7CiAgICBpZiAoIWluZGljZXMuY29udGFpbnNLZXkodmVydGV4KSkgc3Ryb25nQ29ubmVjdCh2ZXJ0ZXgpOwogIH0KCiAgLy8gVGFyamFuJ3MgYWxnb3JpdGhtIHByb2R1Y2VzIGEgcmV2ZXJzZS10b3BvbG9naWNhbCBzb3J0LCBzbyB3ZSByZXZlcnNlIGl0IHRvCiAgLy8gZ2V0IGEgbm9ybWFsIHRvcG9sb2dpY2FsIHNvcnQuCiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlZC50b0xpc3QoKTsKfQqAzQBOTjwBGhwBFQFPSzsETTQ0PictARsjPQYRAgFKBE9QQjolKTIBIRJLBhECAUQEUE8aRhwgOBcEDgIBTAsEUFAxOCkjAQ4QICtJGiMGBBMCAUwLBFBQMTgpIwEOECArSRojBgQTAgEzBEsEUDYETktRQUFQFQV+HiItBgFMGyIeICIxMSgKCAYEARECAU0LBGAEUDYETktRQUknBWwRFRsBTyEnKCIBHB0eDQEXGQErLSJMMEwIBgEvJBILJyIhJB0GBAEjPQQBUSQjAgElcGFja2FnZTpjb2xsZWN0aW9uL3NyYy9mdW5jdGlvbnMuZGFydD1zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2l0ZXJhYmxlX3ppcC5kYXJ0hx4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iOwoKLy8vIEl0ZXJhYmxlIHRoYXQgaXRlcmF0ZXMgb3ZlciBsaXN0cyBvZiB2YWx1ZXMgZnJvbSBvdGhlciBpdGVyYWJsZXMuCi8vLwovLy8gV2hlbiBbaXRlcmF0b3JdIGlzIHJlYWQsIGFuIFtJdGVyYXRvcl0gaXMgY3JlYXRlZCBmb3IgZWFjaCBbSXRlcmFibGVdIGluCi8vLyB0aGUgW0l0ZXJhYmxlXSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgovLy8KLy8vIEFzIGxvbmcgYXMgYWxsIHRoZXNlIGl0ZXJhdG9ycyBoYXZlIGEgbmV4dCB2YWx1ZSwgdGhvc2UgbmV4dCB2YWx1ZXMgYXJlCi8vLyBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIGxpc3QsIHdoaWNoIGJlY29tZXMgdGhlIG5leHQgdmFsdWUgb2YgdGhpcwovLy8gW0l0ZXJhYmxlXSdzIFtJdGVyYXRvcl0uIEFzIHNvb24gYXMgYW55IG9mIHRoZSBpdGVyYXRvcnMgcnVuIG91dCwKLy8vIHRoZSB6aXBwZWQgaXRlcmF0b3IgYWxzbyBzdG9wcy4KY2xhc3MgSXRlcmFibGVaaXA8VD4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8TGlzdDxUPj4gewogIGZpbmFsIEl0ZXJhYmxlPEl0ZXJhYmxlPFQ+PiBfaXRlcmFibGVzOwoKICBJdGVyYWJsZVppcChJdGVyYWJsZTxJdGVyYWJsZTxUPj4gaXRlcmFibGVzKSA6IHRoaXMuX2l0ZXJhYmxlcyA9IGl0ZXJhYmxlczsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBjb21iaW5lcyB2YWx1ZXMgb2YgdGhlIGl0ZXJhYmxlcycgaXRlcmF0b3JzCiAgLy8vIGFzIGxvbmcgYXMgdGhleSBhbGwgaGF2ZSB2YWx1ZXMuCiAgSXRlcmF0b3I8TGlzdDxUPj4gZ2V0IGl0ZXJhdG9yIHsKICAgIHZhciBpdGVyYXRvcnMgPSBfaXRlcmFibGVzLm1hcCgoeCkgPT4geC5pdGVyYXRvcikudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAvLyBUT0RPKGxybik6IFJldHVybiBhbiBlbXB0eSBpdGVyYXRvciBkaXJlY3RseSBpZiBpdGVyYXRvcnMgaXMgZW1wdHk/CiAgICByZXR1cm4gbmV3IF9JdGVyYXRvclppcDxUPihpdGVyYXRvcnMpOwogIH0KfQoKY2xhc3MgX0l0ZXJhdG9yWmlwPFQ+IGltcGxlbWVudHMgSXRlcmF0b3I8TGlzdDxUPj4gewogIGZpbmFsIExpc3Q8SXRlcmF0b3I8VD4+IF9pdGVyYXRvcnM7CiAgTGlzdDxUPiBfY3VycmVudDsKCiAgX0l0ZXJhdG9yWmlwKExpc3Q8SXRlcmF0b3I8VD4+IGl0ZXJhdG9ycykgOiBfaXRlcmF0b3JzID0gaXRlcmF0b3JzOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9pdGVyYXRvcnMuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfaXRlcmF0b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghX2l0ZXJhdG9yc1tpXS5tb3ZlTmV4dCgpKSB7CiAgICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgX2N1cnJlbnQgPSBuZXcgTGlzdChfaXRlcmF0b3JzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9pdGVyYXRvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgX2N1cnJlbnRbaV0gPSBfaXRlcmF0b3JzW2ldLmN1cnJlbnQ7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIExpc3Q8VD4gZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KNgBOTjwBGgFGBE0uBExGRiQ1KgFOAUsnI09LKwQCATUmFAFGARQqMicZFggGLDIrBhEEASMCAShwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2l0ZXJhYmxlX3ppcC5kYXJ0P3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvcHJpb3JpdHlfcXVldWUuZGFydKunLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIjsKCmltcG9ydCAidXRpbHMuZGFydCI7CgovLy8gQSBwcmlvcml0eSBxdWV1ZSBpcyBhIHByaW9yaXR5IGJhc2VkIHdvcmstbGlzdCBvZiBlbGVtZW50cy4KLy8vCi8vLyBUaGUgcXVldWUgYWxsb3dzIGFkZGluZyBlbGVtZW50cywgYW5kIHJlbW92aW5nIHRoZW0gYWdhaW4gaW4gcHJpb3JpdHkgb3JkZXIuCmFic3RyYWN0IGNsYXNzIFByaW9yaXR5UXVldWU8RT4gewogIC8vLyBDcmVhdGVzIGFuIGVtcHR5IFtQcmlvcml0eVF1ZXVlXS4KICAvLy8KICAvLy8gVGhlIGNyZWF0ZWQgW1ByaW9yaXR5UXVldWVdIGlzIGEgcGxhaW4gW0hlYXBQcmlvcml0eVF1ZXVlXS4KICAvLy8KICAvLy8gVGhlIFtjb21wYXJpc29uXSBpcyBhIFtDb21wYXJhdG9yXSB1c2VkIHRvIGNvbXBhcmUgdGhlIHByaW9yaXR5IG9mCiAgLy8vIGVsZW1lbnRzLiBBbiBlbGVtZW50IHRoYXQgY29tcGFyZXMgYXMgbGVzcyB0aGFuIGFub3RoZXIgZWxlbWVudCBoYXMKICAvLy8gYSBoaWdoZXIgcHJpb3JpdHkuCiAgLy8vCiAgLy8vIElmIFtjb21wYXJpc29uXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBbQ29tcGFyYWJsZS5jb21wYXJlXS4gSWYgdGhpcwogIC8vLyBpcyB0aGUgY2FzZSwgYEVgIG11c3QgaW1wbGVtZW50IFtDb21wYXJhYmxlXSwgYW5kIHRoaXMgaXMgY2hlY2tlZCBhdAogIC8vLyBydW50aW1lIGZvciBldmVyeSBjb21wYXJpc29uLgogIGZhY3RvcnkgUHJpb3JpdHlRdWV1ZShbaW50IGNvbXBhcmlzb24oRSBlMSwgRSBlMildKSA9IEhlYXBQcmlvcml0eVF1ZXVlPEU+OwoKICAvLy8gTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBxdWV1ZS4KICBpbnQgZ2V0IGxlbmd0aDsKCiAgLy8vIFdoZXRoZXIgdGhlIHF1ZXVlIGlzIGVtcHR5LgogIGJvb2wgZ2V0IGlzRW1wdHk7CgogIC8vLyBXaGV0aGVyIHRoZSBxdWV1ZSBoYXMgYW55IGVsZW1lbnRzLgogIGJvb2wgZ2V0IGlzTm90RW1wdHk7CgogIC8vLyBDaGVja3MgaWYgW29iamVjdF0gaXMgaW4gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgZm91bmQuCiAgYm9vbCBjb250YWlucyhFIG9iamVjdCk7CgogIC8vLyBBZGRzIGVsZW1lbnQgdG8gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgZWxlbWVudCB3aWxsIGJlY29tZSB0aGUgbmV4dCB0byBiZSByZW1vdmVkIGJ5IFtyZW1vdmVGaXJzdF0KICAvLy8gd2hlbiBhbGwgZWxlbWVudHMgd2l0aCBoaWdoZXIgcHJpb3JpdHkgaGF2ZSBiZWVuIHJlbW92ZWQuCiAgdm9pZCBhZGQoRSBlbGVtZW50KTsKCiAgLy8vIEFkZHMgYWxsIFtlbGVtZW50c10gdG8gdGhlIHF1ZXVlLgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIG5leHQgZWxlbWVudCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgYnkgW3JlbW92ZUZpcnN0XS4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnQgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBxdWV1ZSBtdXN0IG5vdCBiZSBlbXB0eSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICBFIGdldCBmaXJzdDsKCiAgLy8vIFJlbW92ZXMgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eS4KICAvLy8KICAvLy8gUmVwZWF0ZWRseSBjYWxsaW5nIHRoaXMgbWV0aG9kLCB3aXRob3V0IGFkZGluZyBlbGVtZW50IGluIGJldHdlZW4sCiAgLy8vIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIGVsZW1lbnRzIGluIG5vbi1kZWNyZWFzaW5nIG9yZGVyIGFzLCBzcGVjaWZpZWQgYnkKICAvLy8gW2NvbXBhcmlzb25dLgogIC8vLwogIC8vLyBUaGUgcXVldWUgbXVzdCBub3QgYmUgZW1wdHkgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCiAgRSByZW1vdmVGaXJzdCgpOwoKICAvLy8gUmVtb3ZlcyBhbiBlbGVtZW50IHRoYXQgY29tcGFyZXMgZXF1YWwgdG8gW2VsZW1lbnRdIGluIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gUmV0dXJucyB0cnVlIGlmIGFuIGVsZW1lbnQgaXMgZm91bmQgYW5kIHJlbW92ZWQsCiAgLy8vIGFuZCBmYWxzZSBpZiBubyBlcXVhbCBlbGVtZW50IGlzIGZvdW5kLgogIGJvb2wgcmVtb3ZlKEUgZWxlbWVudCk7CgogIC8vLyBSZW1vdmVzIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGlzIHF1ZXVlIGFuZCByZXR1cm5zIHRoZW0uCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBpdGVyYWJsZSBoYXMgbm8gc3BlY2lmaWVkIG9yZGVyLgogIEl0ZXJhYmxlPEU+IHJlbW92ZUFsbCgpOwoKICAvLy8gUmVtb3ZlcyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhpcyBxdWV1ZS4KICB2b2lkIGNsZWFyKCk7CgogIC8vLyBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgZWxlbWVudHMgb2YgdGhpcyBxdWV1ZSBpbiBwcmlvcml0eSBvcmRlci4KICAvLy8KICAvLy8gVGhlIHF1ZXVlIGlzIG5vdCBtb2RpZmllZC4KICAvLy8KICAvLy8gVGhlIG9yZGVyIGlzIHRoZSBvcmRlciB0aGF0IHRoZSBlbGVtZW50cyB3b3VsZCBiZSBpbiBpZiB0aGV5IHdlcmUKICAvLy8gcmVtb3ZlZCBmcm9tIHRoaXMgcXVldWUgdXNpbmcgW3JlbW92ZUZpcnN0XS4KICBMaXN0PEU+IHRvTGlzdCgpOwoKICAvLy8gUmV0dXJuIGEgY29tcGFyYXRvciBiYXNlZCBzZXQgdXNpbmcgdGhlIGNvbXBhcmF0b3Igb2YgdGhpcyBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIHF1ZXVlIGlzIG5vdCBtb2RpZmllZC4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIFtTZXRdIGlzIGN1cnJlbnRseSBhIFtTcGxheVRyZWVTZXRdLAogIC8vLyBidXQgdGhpcyBtYXkgY2hhbmdlIGFzIG90aGVyIG9yZGVyZWQgc2V0cyBhcmUgaW1wbGVtZW50ZWQuCiAgLy8vCiAgLy8vIFRoZSBzZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGlzIHF1ZXVlLgogIC8vLyBJZiBhbiBlbGVtZW50IG9jY3VycyBtb3JlIHRoYW4gb25jZSBpbiB0aGUgcXVldWUsCiAgLy8vIHRoZSBzZXQgd2lsbCBjb250YWluIGl0IG9ubHkgb25jZS4KICBTZXQ8RT4gdG9TZXQoKTsKfQoKLy8vIEhlYXAgYmFzZWQgcHJpb3JpdHkgcXVldWUuCi8vLwovLy8gVGhlIGVsZW1lbnRzIGFyZSBrZXB0IGluIGEgaGVhcCBzdHJ1Y3R1cmUsCi8vLyB3aGVyZSB0aGUgZWxlbWVudCB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IGlzIGltbWVkaWF0ZWx5IGFjY2Vzc2libGUsCi8vLyBhbmQgbW9kaWZ5aW5nIGEgc2luZ2xlIGVsZW1lbnQgdGFrZXMKLy8vIGxvZ2FyaXRobWljIHRpbWUgaW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBvbiBhdmVyYWdlLgovLy8KLy8vICogVGhlIFthZGRdIGFuZCBbcmVtb3ZlRmlyc3RdIG9wZXJhdGlvbnMgdGFrZSBhbW9ydGl6ZWQgbG9nYXJpdGhtaWMgdGltZSwKLy8vICAgTyhsb2cobikpLCBidXQgbWF5IG9jY2FzaW9uYWxseSB0YWtlIGxpbmVhciB0aW1lIHdoZW4gZ3Jvd2luZyB0aGUgY2FwYWNpdHkKLy8vICAgb2YgdGhlIGhlYXAuCi8vLyAqIFRoZSBbYWRkQWxsXSBvcGVyYXRpb24gd29ya3MgYXMgZG9pbmcgcmVwZWF0ZWQgW2FkZF0gb3BlcmF0aW9ucy4KLy8vICogVGhlIFtmaXJzdF0gZ2V0dGVyIHRha2VzIGNvbnN0YW50IHRpbWUsIE8oMSkuCi8vLyAqIFRoZSBbY2xlYXJdIGFuZCBbcmVtb3ZlQWxsXSBtZXRob2RzIGFsc28gdGFrZSBjb25zdGFudCB0aW1lLCBPKDEpLgovLy8gKiBUaGUgW2NvbnRhaW5zXSBhbmQgW3JlbW92ZV0gb3BlcmF0aW9ucyBtYXkgbmVlZCB0byBzZWFyY2ggdGhlIGVudGlyZQovLy8gICBxdWV1ZSBmb3IgdGhlIGVsZW1lbnRzLCB0YWtpbmcgTyhuKSB0aW1lLgovLy8gKiBUaGUgW3RvTGlzdF0gb3BlcmF0aW9uIGVmZmVjdGl2ZWx5IHNvcnRzIHRoZSBlbGVtZW50cywgdGFraW5nIE8obipsb2cobikpCi8vLyAgIHRpbWUuCi8vLyAqIFRoZSBbdG9TZXRdIG9wZXJhdGlvbiBlZmZlY3RpdmVseSBhZGRzIGVhY2ggZWxlbWVudCB0byB0aGUgbmV3IHNldCwgdGFraW5nCi8vLyAgIGFuIGV4cGVjdGVkIE8obipsb2cobikpIHRpbWUuCmNsYXNzIEhlYXBQcmlvcml0eVF1ZXVlPEU+IGltcGxlbWVudHMgUHJpb3JpdHlRdWV1ZTxFPiB7CiAgLy8vIEluaXRpYWwgY2FwYWNpdHkgb2YgYSBxdWV1ZSB3aGVuIGNyZWF0ZWQsIG9yIHdoZW4gYWRkZWQgdG8gYWZ0ZXIgYQogIC8vLyBbY2xlYXJdLgogIC8vLwogIC8vLyBOdW1iZXIgY2FuIGJlIGFueSBwb3NpdGl2ZSB2YWx1ZS4gUGlja2luZyBhIHNpemUgdGhhdCBnaXZlcyBhIHdob2xlCiAgLy8vIG51bWJlciBvZiAidHJlZSBsZXZlbHMiIGluIHRoZSBoZWFwIGlzIG9ubHkgZG9uZSBmb3IgYWVzdGhldGljIHJlYXNvbnMuCiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9DQVBBQ0lUWSA9IDc7CgogIC8vLyBUaGUgY29tcGFyaXNvbiBiZWluZyB1c2VkIHRvIGNvbXBhcmUgdGhlIHByaW9yaXR5IG9mIGVsZW1lbnRzLgogIGZpbmFsIENvbXBhcmF0b3I8RT4gY29tcGFyaXNvbjsKCiAgLy8vIExpc3QgaW1wbGVtZW50YXRpb24gb2YgYSBoZWFwLgogIExpc3Q8RT4gX3F1ZXVlID0gbmV3IExpc3Q8RT4oX0lOSVRJQUxfQ0FQQUNJVFkpOwoKICAvLy8gTnVtYmVyIG9mIGVsZW1lbnRzIGluIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgaGVhcCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZmlyc3QgW19sZW5ndGhdIGVudHJpZXMgb2YgW19xdWV1ZV0uCiAgaW50IF9sZW5ndGggPSAwOwoKICAvLy8gQ3JlYXRlIGEgbmV3IHByaW9yaXR5IHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgW2NvbXBhcmlzb25dIGlzIGEgW0NvbXBhcmF0b3JdIHVzZWQgdG8gY29tcGFyZSB0aGUgcHJpb3JpdHkgb2YKICAvLy8gZWxlbWVudHMuIEFuIGVsZW1lbnQgdGhhdCBjb21wYXJlcyBhcyBsZXNzIHRoYW4gYW5vdGhlciBlbGVtZW50IGhhcwogIC8vLyBhIGhpZ2hlciBwcmlvcml0eS4KICAvLy8KICAvLy8gSWYgW2NvbXBhcmlzb25dIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIFtDb21wYXJhYmxlLmNvbXBhcmVdLiBJZiB0aGlzCiAgLy8vIGlzIHRoZSBjYXNlLCBgRWAgbXVzdCBpbXBsZW1lbnQgW0NvbXBhcmFibGVdLCBhbmQgdGhpcyBpcyBjaGVja2VkIGF0CiAgLy8vIHJ1bnRpbWUgZm9yIGV2ZXJ5IGNvbXBhcmlzb24uCiAgSGVhcFByaW9yaXR5UXVldWUoW2ludCBjb21wYXJpc29uKEUgZTEsIEUgZTIpXSkKICAgICAgOiBjb21wYXJpc29uID0gY29tcGFyaXNvbiA/PyBkZWZhdWx0Q29tcGFyZTxFPigpOwoKICB2b2lkIGFkZChFIGVsZW1lbnQpIHsKICAgIF9hZGQoZWxlbWVudCk7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgZm9yIChFIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgX2FkZChlbGVtZW50KTsKICAgIH0KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfcXVldWUgPSBjb25zdCBbXTsKICAgIF9sZW5ndGggPSAwOwogIH0KCiAgYm9vbCBjb250YWlucyhFIG9iamVjdCkgewogICAgcmV0dXJuIF9sb2NhdGUob2JqZWN0KSA+PSAwOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKF9sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIHN1Y2ggZWxlbWVudCIpOwogICAgcmV0dXJuIF9xdWV1ZVswXTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2xlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9sZW5ndGggIT0gMDsKCiAgaW50IGdldCBsZW5ndGggPT4gX2xlbmd0aDsKCiAgYm9vbCByZW1vdmUoRSBlbGVtZW50KSB7CiAgICBpbnQgaW5kZXggPSBfbG9jYXRlKGVsZW1lbnQpOwogICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIGZhbHNlOwogICAgRSBsYXN0ID0gX3JlbW92ZUxhc3QoKTsKICAgIGlmIChpbmRleCA8IF9sZW5ndGgpIHsKICAgICAgaW50IGNvbXAgPSBjb21wYXJpc29uKGxhc3QsIGVsZW1lbnQpOwogICAgICBpZiAoY29tcCA8PSAwKSB7CiAgICAgICAgX2J1YmJsZVVwKGxhc3QsIGluZGV4KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfYnViYmxlRG93bihsYXN0LCBpbmRleCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgSXRlcmFibGU8RT4gcmVtb3ZlQWxsKCkgewogICAgTGlzdDxFPiByZXN1bHQgPSBfcXVldWU7CiAgICBpbnQgbGVuZ3RoID0gX2xlbmd0aDsKICAgIF9xdWV1ZSA9IGNvbnN0IFtdOwogICAgX2xlbmd0aCA9IDA7CiAgICByZXR1cm4gcmVzdWx0LnRha2UobGVuZ3RoKTsKICB9CgogIEUgcmVtb3ZlRmlyc3QoKSB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiTm8gc3VjaCBlbGVtZW50Iik7CiAgICBFIHJlc3VsdCA9IF9xdWV1ZVswXTsKICAgIEUgbGFzdCA9IF9yZW1vdmVMYXN0KCk7CiAgICBpZiAoX2xlbmd0aCA+IDApIHsKICAgICAgX2J1YmJsZURvd24obGFzdCwgMCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlzdDxFPiB0b0xpc3QoKSB7CiAgICBMaXN0PEU+IGxpc3QgPSBuZXcgTGlzdDxFPigpLi5sZW5ndGggPSBfbGVuZ3RoOwogICAgbGlzdC5zZXRSYW5nZSgwLCBfbGVuZ3RoLCBfcXVldWUpOwogICAgbGlzdC5zb3J0KGNvbXBhcmlzb24pOwogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBTZXQ8RT4gdG9TZXQoKSB7CiAgICBTZXQ8RT4gc2V0ID0gbmV3IFNwbGF5VHJlZVNldDxFPihjb21wYXJpc29uKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2xlbmd0aDsgaSsrKSB7CiAgICAgIHNldC5hZGQoX3F1ZXVlW2ldKTsKICAgIH0KICAgIHJldHVybiBzZXQ7CiAgfQoKICAvLy8gUmV0dXJucyBzb21lIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIGZvcm1hdCBpc24ndCBzaWduaWZpY2FudCwgYW5kIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gX3F1ZXVlLnRha2UoX2xlbmd0aCkudG9TdHJpbmcoKTsKICB9CgogIC8vLyBBZGQgZWxlbWVudCB0byB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIEdyb3dzIHRoZSBjYXBhY2l0eSBpZiB0aGUgYmFja2luZyBsaXN0IGlzIGZ1bGwuCiAgdm9pZCBfYWRkKEUgZWxlbWVudCkgewogICAgaWYgKF9sZW5ndGggPT0gX3F1ZXVlLmxlbmd0aCkgX2dyb3coKTsKICAgIF9idWJibGVVcChlbGVtZW50LCBfbGVuZ3RoKyspOwogIH0KCiAgLy8vIEZpbmQgdGhlIGluZGV4IG9mIGFuIG9iamVjdCBpbiB0aGUgaGVhcC4KICAvLy8KICAvLy8gUmV0dXJucyAtMSBpZiB0aGUgb2JqZWN0IGlzIG5vdCBmb3VuZC4KICBpbnQgX2xvY2F0ZShFIG9iamVjdCkgewogICAgaWYgKF9sZW5ndGggPT0gMCkgcmV0dXJuIC0xOwogICAgLy8gQ291bnQgcG9zaXRpb25zIGZyb20gb25lIGluc3RlYWQgb2YgemVyby4gVGhpcyBnaXZlcyB0aGUgbnVtYmVycwogICAgLy8gc29tZSBuaWNlIHByb3BlcnRpZXMuIEZvciBleGFtcGxlLCBhbGwgcmlnaHQgY2hpbGRyZW4gYXJlIG9kZCwKICAgIC8vIHRoZWlyIGxlZnQgc2libGluZyBpcyBldmVuLCBhbmQgdGhlIHBhcmVudCBpcyBmb3VuZCBieSBzaGlmdGluZwogICAgLy8gcmlnaHQgYnkgb25lLgogICAgLy8gVmFsaWQgcmFuZ2UgZm9yIHBvc2l0aW9uIGlzIFsxLi5fbGVuZ3RoXSwgaW5jbHVzaXZlLgogICAgaW50IHBvc2l0aW9uID0gMTsKICAgIC8vIFByZS1vcmRlciBkZXB0aCBmaXJzdCBzZWFyY2gsIG9taXQgY2hpbGQgbm9kZXMgaWYgdGhlIGN1cnJlbnQKICAgIC8vIG5vZGUgaGFzIGxvd2VyIHByaW9yaXR5IHRoYW4gW29iamVjdF0sIGJlY2F1c2UgYWxsIG5vZGVzIGxvd2VyCiAgICAvLyBpbiB0aGUgaGVhcCB3aWxsIGFsc28gaGF2ZSBsb3dlciBwcmlvcml0eS4KICAgIGRvIHsKICAgICAgaW50IGluZGV4ID0gcG9zaXRpb24gLSAxOwogICAgICBFIGVsZW1lbnQgPSBfcXVldWVbaW5kZXhdOwogICAgICBpbnQgY29tcCA9IGNvbXBhcmlzb24oZWxlbWVudCwgb2JqZWN0KTsKICAgICAgaWYgKGNvbXAgPT0gMCkgcmV0dXJuIGluZGV4OwogICAgICBpZiAoY29tcCA8IDApIHsKICAgICAgICAvLyBFbGVtZW50IG1heSBiZSBpbiBzdWJ0cmVlLgogICAgICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIGxlZnQgY2hpbGQsIGlmIGl0IGlzIHRoZXJlLgogICAgICAgIGludCBsZWZ0Q2hpbGRQb3NpdGlvbiA9IHBvc2l0aW9uICogMjsKICAgICAgICBpZiAobGVmdENoaWxkUG9zaXRpb24gPD0gX2xlbmd0aCkgewogICAgICAgICAgcG9zaXRpb24gPSBsZWZ0Q2hpbGRQb3NpdGlvbjsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBGaW5kIHRoZSBuZXh0IHJpZ2h0IHNpYmxpbmcgb3IgcmlnaHQgYW5jZXN0b3Igc2libGluZy4KICAgICAgZG8gewogICAgICAgIHdoaWxlIChwb3NpdGlvbi5pc09kZCkgewogICAgICAgICAgLy8gV2hpbGUgcG9zaXRpb24gaXMgYSByaWdodCBjaGlsZCwgZ28gdG8gdGhlIHBhcmVudC4KICAgICAgICAgIHBvc2l0aW9uID4+PSAxOwogICAgICAgIH0KICAgICAgICAvLyBUaGVuIGdvIHRvIHRoZSByaWdodCBzaWJsaW5nIG9mIHRoZSBsZWZ0LWNoaWxkLgogICAgICAgIHBvc2l0aW9uICs9IDE7CiAgICAgIH0gd2hpbGUgKHBvc2l0aW9uID4gX2xlbmd0aCk7IC8vIEhhcHBlbnMgaWYgbGFzdCBlbGVtZW50IGlzIGEgbGVmdCBjaGlsZC4KICAgIH0gd2hpbGUgKHBvc2l0aW9uICE9IDEpOyAvLyBBdCByb290IGFnYWluLiBIYXBwZW5zIGZvciByaWdodC1tb3N0IGVsZW1lbnQuCiAgICByZXR1cm4gLTE7CiAgfQoKICBFIF9yZW1vdmVMYXN0KCkgewogICAgaW50IG5ld0xlbmd0aCA9IF9sZW5ndGggLSAxOwogICAgRSBsYXN0ID0gX3F1ZXVlW25ld0xlbmd0aF07CiAgICBfcXVldWVbbmV3TGVuZ3RoXSA9IG51bGw7CiAgICBfbGVuZ3RoID0gbmV3TGVuZ3RoOwogICAgcmV0dXJuIGxhc3Q7CiAgfQoKICAvLy8gUGxhY2UgW2VsZW1lbnRdIGluIGhlYXAgYXQgW2luZGV4XSBvciBhYm92ZS4KICAvLy8KICAvLy8gUHV0IGVsZW1lbnQgaW50byB0aGUgZW1wdHkgY2VsbCBhdCBgaW5kZXhgLgogIC8vLyBXaGlsZSB0aGUgYGVsZW1lbnRgIGhhcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUKICAvLy8gcGFyZW50LCBzd2FwIGl0IHdpdGggdGhlIHBhcmVudC4KICB2b2lkIF9idWJibGVVcChFIGVsZW1lbnQsIGludCBpbmRleCkgewogICAgd2hpbGUgKGluZGV4ID4gMCkgewogICAgICBpbnQgcGFyZW50SW5kZXggPSAoaW5kZXggLSAxKSB+LyAyOwogICAgICBFIHBhcmVudCA9IF9xdWV1ZVtwYXJlbnRJbmRleF07CiAgICAgIGlmIChjb21wYXJpc29uKGVsZW1lbnQsIHBhcmVudCkgPiAwKSBicmVhazsKICAgICAgX3F1ZXVlW2luZGV4XSA9IHBhcmVudDsKICAgICAgaW5kZXggPSBwYXJlbnRJbmRleDsKICAgIH0KICAgIF9xdWV1ZVtpbmRleF0gPSBlbGVtZW50OwogIH0KCiAgLy8vIFBsYWNlIFtlbGVtZW50XSBpbiBoZWFwIGF0IFtpbmRleF0gb3IgYWJvdmUuCiAgLy8vCiAgLy8vIFB1dCBlbGVtZW50IGludG8gdGhlIGVtcHR5IGNlbGwgYXQgYGluZGV4YC4KICAvLy8gV2hpbGUgdGhlIGBlbGVtZW50YCBoYXMgbG93ZXIgcHJpb3JpdHkgdGhhbiBlaXRoZXIgY2hpbGQsCiAgLy8vIHN3YXAgaXQgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSBjaGlsZC4KICB2b2lkIF9idWJibGVEb3duKEUgZWxlbWVudCwgaW50IGluZGV4KSB7CiAgICBpbnQgcmlnaHRDaGlsZEluZGV4ID0gaW5kZXggKiAyICsgMjsKICAgIHdoaWxlIChyaWdodENoaWxkSW5kZXggPCBfbGVuZ3RoKSB7CiAgICAgIGludCBsZWZ0Q2hpbGRJbmRleCA9IHJpZ2h0Q2hpbGRJbmRleCAtIDE7CiAgICAgIEUgbGVmdENoaWxkID0gX3F1ZXVlW2xlZnRDaGlsZEluZGV4XTsKICAgICAgRSByaWdodENoaWxkID0gX3F1ZXVlW3JpZ2h0Q2hpbGRJbmRleF07CiAgICAgIGludCBjb21wID0gY29tcGFyaXNvbihsZWZ0Q2hpbGQsIHJpZ2h0Q2hpbGQpOwogICAgICBpbnQgbWluQ2hpbGRJbmRleDsKICAgICAgRSBtaW5DaGlsZDsKICAgICAgaWYgKGNvbXAgPCAwKSB7CiAgICAgICAgbWluQ2hpbGQgPSBsZWZ0Q2hpbGQ7CiAgICAgICAgbWluQ2hpbGRJbmRleCA9IGxlZnRDaGlsZEluZGV4OwogICAgICB9IGVsc2UgewogICAgICAgIG1pbkNoaWxkID0gcmlnaHRDaGlsZDsKICAgICAgICBtaW5DaGlsZEluZGV4ID0gcmlnaHRDaGlsZEluZGV4OwogICAgICB9CiAgICAgIGNvbXAgPSBjb21wYXJpc29uKGVsZW1lbnQsIG1pbkNoaWxkKTsKICAgICAgaWYgKGNvbXAgPD0gMCkgewogICAgICAgIF9xdWV1ZVtpbmRleF0gPSBlbGVtZW50OwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfcXVldWVbaW5kZXhdID0gbWluQ2hpbGQ7CiAgICAgIGluZGV4ID0gbWluQ2hpbGRJbmRleDsKICAgICAgcmlnaHRDaGlsZEluZGV4ID0gaW5kZXggKiAyICsgMjsKICAgIH0KICAgIGludCBsZWZ0Q2hpbGRJbmRleCA9IHJpZ2h0Q2hpbGRJbmRleCAtIDE7CiAgICBpZiAobGVmdENoaWxkSW5kZXggPCBfbGVuZ3RoKSB7CiAgICAgIEUgY2hpbGQgPSBfcXVldWVbbGVmdENoaWxkSW5kZXhdOwogICAgICBpbnQgY29tcCA9IGNvbXBhcmlzb24oZWxlbWVudCwgY2hpbGQpOwogICAgICBpZiAoY29tcCA+IDApIHsKICAgICAgICBfcXVldWVbaW5kZXhdID0gY2hpbGQ7CiAgICAgICAgaW5kZXggPSBsZWZ0Q2hpbGRJbmRleDsKICAgICAgfQogICAgfQogICAgX3F1ZXVlW2luZGV4XSA9IGVsZW1lbnQ7CiAgfQoKICAvLy8gR3Jvd3MgdGhlIGNhcGFjaXR5IG9mIHRoZSBsaXN0IGhvbGRpbmcgdGhlIGhlYXAuCiAgLy8vCiAgLy8vIENhbGxlZCB3aGVuIHRoZSBsaXN0IGlzIGZ1bGwuCiAgdm9pZCBfZ3JvdygpIHsKICAgIGludCBuZXdDYXBhY2l0eSA9IF9xdWV1ZS5sZW5ndGggKiAyICsgMTsKICAgIGlmIChuZXdDYXBhY2l0eSA8IF9JTklUSUFMX0NBUEFDSVRZKSBuZXdDYXBhY2l0eSA9IF9JTklUSUFMX0NBUEFDSVRZOwogICAgTGlzdDxFPiBuZXdRdWV1ZSA9IG5ldyBMaXN0PEU+KG5ld0NhcGFjaXR5KTsKICAgIG5ld1F1ZXVlLnNldFJhbmdlKDAsIF9sZW5ndGgsIF9xdWV1ZSk7CiAgICBfcXVldWUgPSBuZXdRdWV1ZTsKICB9Cn0KgWoATk48ARoBFQFABFEiKAZCBklKGQZPSyROAScSASIUASoXASoGLBsBIQZGQBcBKCUBRwYxBj4PAUEGSVAUBj4TAUgGNy4aAUEGNBsBMBABRgYhBkgzFAFIBiEGOEEGNzgpEgIBHwQvSyk7BE5RE0c0SUswUAxRJDlJDwZKTioBRSIBJTMBIwZKEwEjBklKGQZPSyQyOAEYEwQBJiIVBgQBERcRBAEcIQQBED8WBAEkAScBHQEbIiEcGywXIA8iCAYRBAEcHRoXESAEARQ/GhwXHAYTBAEVNCcbEQQBEzIoGgYQBAEwBkIWLAQBIAY2GSsjBAEvBi0aIUhGRxU8FkVGMgkgIS4jFiY5LiwoFAoIQAshQBoKOxdQTw8EARQhIB4ZEQQBMwYyNycpGComMh4bBh0EATMGMkAvKykoMCwuNBkSFh4oDx8pCCwXIRAIIB0nBi4kKC0WHyAIBh0EATcGJBEtSjErFwQCASpwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3ByaW9yaXR5X3F1ZXVlLmRhcnQ7c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9xdWV1ZV9saXN0LmRhcnSeUS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgovLy8gQSBjbGFzcyB0aGF0IGVmZmljaWVudGx5IGltcGxlbWVudHMgYm90aCBbUXVldWVdIGFuZCBbTGlzdF0uCi8vIFRPRE8obndlaXopOiBDdXJyZW50bHkgdGhpcyBjb2RlIGlzIGNvcGllZCBhbG1vc3QgdmVyYmF0aW0gZnJvbQovLyBkYXJ0OmNvbGxlY3Rpb24uIFRoZSBvbmx5IGNoYW5nZXMgYXJlIHRvIGltcGxlbWVudCBMaXN0IGFuZCB0byByZW1vdmUgbWV0aG9kcwovLyB0aGF0IGFyZSByZWR1bmRhbnQgd2l0aCBMaXN0TWl4aW4uIFJlbW92ZSBvciBzaW1wbGlmeSBpdCB3aGVuIGlzc3VlIDIxMzMwIGlzCi8vIGZpeGVkLgpjbGFzcyBRdWV1ZUxpc3Q8RT4gZXh0ZW5kcyBPYmplY3Qgd2l0aCBMaXN0TWl4aW48RT4gaW1wbGVtZW50cyBRdWV1ZTxFPiB7CiAgLy8vIEFkYXB0cyBbc291cmNlXSB0byBiZSBhIGBRdWV1ZUxpc3Q8VD5gLgogIC8vLwogIC8vLyBBbnkgdGltZSB0aGUgY2xhc3Mgd291bGQgcHJvZHVjZSBhbiBlbGVtZW50IHRoYXQgaXMgbm90IGEgW1RdLCB0aGUgZWxlbWVudAogIC8vLyBhY2Nlc3Mgd2lsbCB0aHJvdy4KICAvLy8KICAvLy8gQW55IHRpbWUgYSBbVF0gdmFsdWUgaXMgYXR0ZW1wdGVkIHN0b3JlZCBpbnRvIHRoZSBhZGFwdGVkIGNsYXNzLCB0aGUgc3RvcmUKICAvLy8gd2lsbCB0aHJvdyB1bmxlc3MgdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1NdLgogIC8vLwogIC8vLyBJZiBhbGwgYWNjZXNzZWQgZWxlbWVudHMgb2YgW3NvdXJjZV0gYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbVF0gYW5kIGlmCiAgLy8vIGFsbCBlbGVtZW50cyBzdG9yZWQgaW4gdGhlIHJldHVybmVkICBhcmUgYWN0dWFsbHkgaW5zdGFuY2Ugb2YgW1NdLAogIC8vLyB0aGVuIHRoZSByZXR1cm5lZCBpbnN0YW5jZSBjYW4gYmUgdXNlZCBhcyBhIGBRdWV1ZUxpc3Q8VD5gLgogIHN0YXRpYyBRdWV1ZUxpc3Q8VD4gX2Nhc3RGcm9tPFMsIFQ+KFF1ZXVlTGlzdDxTPiBzb3VyY2UpIHsKICAgIHJldHVybiBuZXcgX0Nhc3RRdWV1ZUxpc3Q8UywgVD4oc291cmNlKTsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfQ0FQQUNJVFkgPSA4OwogIExpc3Q8RT4gX3RhYmxlOwogIGludCBfaGVhZDsKICBpbnQgX3RhaWw7CgogIC8vLyBDcmVhdGUgYW4gZW1wdHkgcXVldWUuCiAgLy8vCiAgLy8vIElmIFtpbml0aWFsQ2FwYWNpdHldIGlzIGdpdmVuLCBwcmVwYXJlIHRoZSBxdWV1ZSBmb3IgYXQgbGVhc3QgdGhhdCBtYW55CiAgLy8vIGVsZW1lbnRzLgogIFF1ZXVlTGlzdChbaW50IGluaXRpYWxDYXBhY2l0eV0pCiAgICAgIDogX2hlYWQgPSAwLAogICAgICAgIF90YWlsID0gMCB7CiAgICBpZiAoaW5pdGlhbENhcGFjaXR5ID09IG51bGwgfHwgaW5pdGlhbENhcGFjaXR5IDwgX0lOSVRJQUxfQ0FQQUNJVFkpIHsKICAgICAgaW5pdGlhbENhcGFjaXR5ID0gX0lOSVRJQUxfQ0FQQUNJVFk7CiAgICB9IGVsc2UgaWYgKCFfaXNQb3dlck9mMihpbml0aWFsQ2FwYWNpdHkpKSB7CiAgICAgIGluaXRpYWxDYXBhY2l0eSA9IF9uZXh0UG93ZXJPZjIoaW5pdGlhbENhcGFjaXR5KTsKICAgIH0KICAgIGFzc2VydChfaXNQb3dlck9mMihpbml0aWFsQ2FwYWNpdHkpKTsKICAgIF90YWJsZSA9IG5ldyBMaXN0PEU+KGluaXRpYWxDYXBhY2l0eSk7CiAgfQoKICAvLyBBbiBpbnRlcm5hbCBjb25zdHJ1Y3RvciBmb3IgdXNlIGJ5IF9DYXN0UXVldWVMaXN0LgogIFF1ZXVlTGlzdC5fKCk7CgogIC8vLyBDcmVhdGUgYSBxdWV1ZSBpbml0aWFsbHkgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgW3NvdXJjZV0uCiAgZmFjdG9yeSBRdWV1ZUxpc3QuZnJvbShJdGVyYWJsZTxFPiBzb3VyY2UpIHsKICAgIGlmIChzb3VyY2UgaXMgTGlzdCkgewogICAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgICAgUXVldWVMaXN0PEU+IHF1ZXVlID0gbmV3IFF1ZXVlTGlzdChsZW5ndGggKyAxKTsKICAgICAgYXNzZXJ0KHF1ZXVlLl90YWJsZS5sZW5ndGggPiBsZW5ndGgpOwogICAgICB2YXIgc291cmNlTGlzdCA9IHNvdXJjZTsKICAgICAgcXVldWUuX3RhYmxlLnNldFJhbmdlKDAsIGxlbmd0aCwgc291cmNlTGlzdCwgMCk7CiAgICAgIHF1ZXVlLl90YWlsID0gbGVuZ3RoOwogICAgICByZXR1cm4gcXVldWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFF1ZXVlTGlzdDxFPigpLi5hZGRBbGwoc291cmNlKTsKICAgIH0KICB9CgogIC8vIENvbGxlY3Rpb24gaW50ZXJmYWNlLgoKICB2b2lkIGFkZChFIGVsZW1lbnQpIHsKICAgIF9hZGQoZWxlbWVudCk7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgaWYgKGl0ZXJhYmxlIGlzIExpc3QpIHsKICAgICAgdmFyIGxpc3QgPSBpdGVyYWJsZTsKICAgICAgaW50IGFkZENvdW50ID0gbGlzdC5sZW5ndGg7CiAgICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgaWYgKGxlbmd0aCArIGFkZENvdW50ID49IF90YWJsZS5sZW5ndGgpIHsKICAgICAgICBfcHJlR3JvdyhsZW5ndGggKyBhZGRDb3VudCk7CiAgICAgICAgLy8gQWZ0ZXIgcHJlR3JvdywgYWxsIGVsZW1lbnRzIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QuCiAgICAgICAgX3RhYmxlLnNldFJhbmdlKGxlbmd0aCwgbGVuZ3RoICsgYWRkQ291bnQsIGxpc3QsIDApOwogICAgICAgIF90YWlsICs9IGFkZENvdW50OwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEFkZGluZyBhZGRDb3VudCBlbGVtZW50cyB3b24ndCByZWFjaCBfaGVhZC4KICAgICAgICBpbnQgZW5kU3BhY2UgPSBfdGFibGUubGVuZ3RoIC0gX3RhaWw7CiAgICAgICAgaWYgKGFkZENvdW50IDwgZW5kU3BhY2UpIHsKICAgICAgICAgIF90YWJsZS5zZXRSYW5nZShfdGFpbCwgX3RhaWwgKyBhZGRDb3VudCwgbGlzdCwgMCk7CiAgICAgICAgICBfdGFpbCArPSBhZGRDb3VudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW50IHByZVNwYWNlID0gYWRkQ291bnQgLSBlbmRTcGFjZTsKICAgICAgICAgIF90YWJsZS5zZXRSYW5nZShfdGFpbCwgX3RhaWwgKyBlbmRTcGFjZSwgbGlzdCwgMCk7CiAgICAgICAgICBfdGFibGUuc2V0UmFuZ2UoMCwgcHJlU3BhY2UsIGxpc3QsIGVuZFNwYWNlKTsKICAgICAgICAgIF90YWlsID0gcHJlU3BhY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKEUgZWxlbWVudCBpbiBpdGVyYWJsZSkgX2FkZChlbGVtZW50KTsKICAgIH0KICB9CgogIFF1ZXVlTGlzdDxUPiBjYXN0PFQ+KCkgPT4gUXVldWVMaXN0Ll9jYXN0RnJvbTxFLCBUPih0aGlzKTsKCiAgQGRlcHJlY2F0ZWQKICBRdWV1ZUxpc3Q8VD4gcmV0eXBlPFQ+KCkgPT4gY2FzdDxUPigpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb0Z1bGxTdHJpbmcodGhpcywgInsiLCAifSIpOwoKICAvLyBRdWV1ZSBpbnRlcmZhY2UuCgogIHZvaWQgYWRkTGFzdChFIGVsZW1lbnQpIHsKICAgIF9hZGQoZWxlbWVudCk7CiAgfQoKICB2b2lkIGFkZEZpcnN0KEUgZWxlbWVudCkgewogICAgX2hlYWQgPSAoX2hlYWQgLSAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICBfdGFibGVbX2hlYWRdID0gZWxlbWVudDsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgX2dyb3coKTsKICB9CgogIEUgcmVtb3ZlRmlyc3QoKSB7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBlbGVtZW50Iik7CiAgICBFIHJlc3VsdCA9IF90YWJsZVtfaGVhZF07CiAgICBfdGFibGVbX2hlYWRdID0gbnVsbDsKICAgIF9oZWFkID0gKF9oZWFkICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEUgcmVtb3ZlTGFzdCgpIHsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIGVsZW1lbnQiKTsKICAgIF90YWlsID0gKF90YWlsIC0gMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgRSByZXN1bHQgPSBfdGFibGVbX3RhaWxdOwogICAgX3RhYmxlW190YWlsXSA9IG51bGw7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gTGlzdCBpbnRlcmZhY2UuCgogIGludCBnZXQgbGVuZ3RoID0+IChfdGFpbCAtIF9oZWFkKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CgogIHNldCBsZW5ndGgoaW50IHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTGVuZ3RoICR2YWx1ZSBtYXkgbm90IGJlIG5lZ2F0aXZlLiIpOwoKICAgIGludCBkZWx0YSA9IHZhbHVlIC0gbGVuZ3RoOwogICAgaWYgKGRlbHRhID49IDApIHsKICAgICAgaWYgKF90YWJsZS5sZW5ndGggPD0gdmFsdWUpIHsKICAgICAgICBfcHJlR3Jvdyh2YWx1ZSk7CiAgICAgIH0KICAgICAgX3RhaWwgPSAoX3RhaWwgKyBkZWx0YSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaW50IG5ld1RhaWwgPSBfdGFpbCArIGRlbHRhOyAvLyBbZGVsdGFdIGlzIG5lZ2F0aXZlLgogICAgaWYgKG5ld1RhaWwgPj0gMCkgewogICAgICBfdGFibGUuZmlsbFJhbmdlKG5ld1RhaWwsIF90YWlsLCBudWxsKTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld1RhaWwgKz0gX3RhYmxlLmxlbmd0aDsKICAgICAgX3RhYmxlLmZpbGxSYW5nZSgwLCBfdGFpbCwgbnVsbCk7CiAgICAgIF90YWJsZS5maWxsUmFuZ2UobmV3VGFpbCwgX3RhYmxlLmxlbmd0aCwgbnVsbCk7CiAgICB9CiAgICBfdGFpbCA9IG5ld1RhaWw7CiAgfQoKICBFIG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4ICRpbmRleCBtdXN0IGJlIGluIHRoZSByYW5nZSBbMC4uJGxlbmd0aCkuIik7CiAgICB9CgogICAgcmV0dXJuIF90YWJsZVsoX2hlYWQgKyBpbmRleCkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpXTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgRSB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4ICRpbmRleCBtdXN0IGJlIGluIHRoZSByYW5nZSBbMC4uJGxlbmd0aCkuIik7CiAgICB9CgogICAgX3RhYmxlWyhfaGVhZCArIGluZGV4KSAmIChfdGFibGUubGVuZ3RoIC0gMSldID0gdmFsdWU7CiAgfQoKICAvLyBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLgoKICAvLy8gV2hldGhlciBbbnVtYmVyXSBpcyBhIHBvd2VyIG9mIHR3by4KICAvLy8KICAvLy8gT25seSB3b3JrcyBmb3IgcG9zaXRpdmUgbnVtYmVycy4KICBzdGF0aWMgYm9vbCBfaXNQb3dlck9mMihpbnQgbnVtYmVyKSA9PiAobnVtYmVyICYgKG51bWJlciAtIDEpKSA9PSAwOwoKICAvLy8gUm91bmRzIFtudW1iZXJdIHVwIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mIDIuCiAgLy8vCiAgLy8vIElmIFtudW1iZXJdIGlzIGEgcG93ZXIgb2YgMiBhbHJlYWR5LCBpdCBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gT25seSB3b3JrcyBmb3IgcG9zaXRpdmUgbnVtYmVycy4KICBzdGF0aWMgaW50IF9uZXh0UG93ZXJPZjIoaW50IG51bWJlcikgewogICAgYXNzZXJ0KG51bWJlciA+IDApOwogICAgbnVtYmVyID0gKG51bWJlciA8PCAxKSAtIDE7CiAgICBmb3IgKDs7KSB7CiAgICAgIGludCBuZXh0TnVtYmVyID0gbnVtYmVyICYgKG51bWJlciAtIDEpOwogICAgICBpZiAobmV4dE51bWJlciA9PSAwKSByZXR1cm4gbnVtYmVyOwogICAgICBudW1iZXIgPSBuZXh0TnVtYmVyOwogICAgfQogIH0KCiAgLy8vIEFkZHMgZWxlbWVudCBhdCBlbmQgb2YgcXVldWUuIFVzZWQgYnkgYm90aCBbYWRkXSBhbmQgW2FkZEFsbF0uCiAgdm9pZCBfYWRkKEUgZWxlbWVudCkgewogICAgX3RhYmxlW190YWlsXSA9IGVsZW1lbnQ7CiAgICBfdGFpbCA9IChfdGFpbCArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgX2dyb3coKTsKICB9CgogIC8vLyBHcm93IHRoZSB0YWJsZSB3aGVuIGZ1bGwuCiAgdm9pZCBfZ3JvdygpIHsKICAgIExpc3Q8RT4gbmV3VGFibGUgPSBuZXcgTGlzdDxFPihfdGFibGUubGVuZ3RoICogMik7CiAgICBpbnQgc3BsaXQgPSBfdGFibGUubGVuZ3RoIC0gX2hlYWQ7CiAgICBuZXdUYWJsZS5zZXRSYW5nZSgwLCBzcGxpdCwgX3RhYmxlLCBfaGVhZCk7CiAgICBuZXdUYWJsZS5zZXRSYW5nZShzcGxpdCwgc3BsaXQgKyBfaGVhZCwgX3RhYmxlLCAwKTsKICAgIF9oZWFkID0gMDsKICAgIF90YWlsID0gX3RhYmxlLmxlbmd0aDsKICAgIF90YWJsZSA9IG5ld1RhYmxlOwogIH0KCiAgaW50IF93cml0ZVRvTGlzdChMaXN0PEU+IHRhcmdldCkgewogICAgYXNzZXJ0KHRhcmdldC5sZW5ndGggPj0gbGVuZ3RoKTsKICAgIGlmIChfaGVhZCA8PSBfdGFpbCkgewogICAgICBpbnQgbGVuZ3RoID0gX3RhaWwgLSBfaGVhZDsKICAgICAgdGFyZ2V0LnNldFJhbmdlKDAsIGxlbmd0aCwgX3RhYmxlLCBfaGVhZCk7CiAgICAgIHJldHVybiBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBpbnQgZmlyc3RQYXJ0U2l6ZSA9IF90YWJsZS5sZW5ndGggLSBfaGVhZDsKICAgICAgdGFyZ2V0LnNldFJhbmdlKDAsIGZpcnN0UGFydFNpemUsIF90YWJsZSwgX2hlYWQpOwogICAgICB0YXJnZXQuc2V0UmFuZ2UoZmlyc3RQYXJ0U2l6ZSwgZmlyc3RQYXJ0U2l6ZSArIF90YWlsLCBfdGFibGUsIDApOwogICAgICByZXR1cm4gX3RhaWwgKyBmaXJzdFBhcnRTaXplOwogICAgfQogIH0KCiAgLy8vIEdyb3dzIHRoZSB0YWJsZSBldmVuIGlmIGl0IGlzIG5vdCBmdWxsLgogIHZvaWQgX3ByZUdyb3coaW50IG5ld0VsZW1lbnRDb3VudCkgewogICAgYXNzZXJ0KG5ld0VsZW1lbnRDb3VudCA+PSBsZW5ndGgpOwoKICAgIC8vIEFkZCAxLjV4IGV4dHJhIHJvb20gdG8gZW5zdXJlIHRoYXQgdGhlcmUncyByb29tIGZvciBtb3JlIGVsZW1lbnRzIGFmdGVyCiAgICAvLyBleHBhbnNpb24uCiAgICBuZXdFbGVtZW50Q291bnQgKz0gbmV3RWxlbWVudENvdW50ID4+IDE7CiAgICBpbnQgbmV3Q2FwYWNpdHkgPSBfbmV4dFBvd2VyT2YyKG5ld0VsZW1lbnRDb3VudCk7CiAgICBMaXN0PEU+IG5ld1RhYmxlID0gbmV3IExpc3Q8RT4obmV3Q2FwYWNpdHkpOwogICAgX3RhaWwgPSBfd3JpdGVUb0xpc3QobmV3VGFibGUpOwogICAgX3RhYmxlID0gbmV3VGFibGU7CiAgICBfaGVhZCA9IDA7CiAgfQp9CgpjbGFzcyBfQ2FzdFF1ZXVlTGlzdDxTLCBUPiBleHRlbmRzIFF1ZXVlTGlzdDxUPiB7CiAgZmluYWwgUXVldWVMaXN0PFM+IF9kZWxlZ2F0ZTsKCiAgX0Nhc3RRdWV1ZUxpc3QodGhpcy5fZGVsZWdhdGUpIDogc3VwZXIuXygpIHsKICAgIF90YWJsZSA9IF9kZWxlZ2F0ZS5fdGFibGUuY2FzdDxUPigpOwogIH0KCiAgaW50IGdldCBfaGVhZCA9PiBfZGVsZWdhdGUuX2hlYWQ7CiAgc2V0IF9oZWFkKGludCB2YWx1ZSkgPT4gX2RlbGVnYXRlLl9oZWFkID0gdmFsdWU7CgogIGludCBnZXQgX3RhaWwgPT4gX2RlbGVnYXRlLl90YWlsOwogIHNldCBfdGFpbChpbnQgdmFsdWUpID0+IF9kZWxlZ2F0ZS5fdGFpbCA9IHZhbHVlOwp9CoEGAE5OPAEaAUFDUVAKSi4GURkGUT4GUElCPS0EASoSDQ0BHQZOECMTFEorMDgGKisEATgRAUQvGiI2LB83HBQNMQYEARsBGBMEASYcGyIgMCVFPRsPNy4jPR0RLj04HAoIDTEGBAE9AQ4pAUoBFgEcEwQBHS8dIQQBFDweGi8TBAETPC8eGhMEARUBOwEaTwEgFiQZCDUOBgE5GC4NICg2BhUEAR0oTwYBOgQBKihPBgE7BAEgASoGJ0cBNAY7BicpGCAPLiobBgQBRRkdLyEEASARNycwOA8bFwQBJSUaIjEVDTE4SCQGBAEuJycBTxItNjEkFw8EAgEyIAEvKQQBJDMBJDMCASZwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3F1ZXVlX2xpc3QuZGFydDpzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL3VuaW9uX3NldC5kYXJ0jWAvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICd1bm1vZGlmaWFibGVfd3JhcHBlcnMuZGFydCc7CgovLy8gQSBzaW5nbGUgc2V0IHRoYXQgcHJvdmlkZXMgYSB2aWV3IG9mIHRoZSB1bmlvbiBvdmVyIGEgc2V0IG9mIHNldHMuCi8vLwovLy8gU2luY2UgdGhpcyBpcyBqdXN0IGEgdmlldywgaXQgcmVmbGVjdHMgYWxsIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgc2V0cy4KLy8vCi8vLyBJZiBhbiBlbGVtZW50IGlzIGluIG11bHRpcGxlIHNldHMgYW5kIHRoZSBvdXRlciBzZXQgaXMgb3JkZXJlZCwgdGhlIHZlcnNpb24KLy8vIGluIHRoZSBlYXJsaWVzdCBpbm5lciBzZXQgaXMgcHJlZmVycmVkLiBDb21wb25lbnQgc2V0cyBhcmUgYXNzdW1lZCB0byB1c2UKLy8vIGA9PWAgYW5kIGBoYXNoQ29kZWAgZm9yIGVxdWFsaXR5LgpjbGFzcyBVbmlvblNldDxFPiBleHRlbmRzIFNldEJhc2U8RT4gd2l0aCBVbm1vZGlmaWFibGVTZXRNaXhpbjxFPiB7CiAgLy8vIFRoZSBzZXQgb2Ygc2V0cyB0aGF0IHRoaXMgcHJvdmlkZXMgYSB2aWV3IG9mLgogIGZpbmFsIFNldDxTZXQ8RT4+IF9zZXRzOwoKICAvLy8gV2hldGhlciB0aGUgc2V0cyBpbiBbX3NldHNdIGFyZSBndWFyYW50ZWVkIHRvIGJlIGRpc2pvaW50LgogIGZpbmFsIGJvb2wgX2Rpc2pvaW50OwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBzZXQgdGhhdCdzIGEgdmlldyBvZiB0aGUgdW5pb24gb2YgYWxsIHNldHMgaW4gW3NldHNdLgogIC8vLwogIC8vLyBJZiBhbnkgc2V0cyBpbiBbc2V0c10gY2hhbmdlLCB0aGlzIFtVbmlvblNldF0gcmVmbGVjdHMgdGhhdCBjaGFuZ2UuIElmIGEKICAvLy8gbmV3IHNldCBpcyBhZGRlZCB0byBbc2V0c10sIHRoaXMgW1VuaW9uU2V0XSByZWZsZWN0cyB0aGF0IGFzIHdlbGwuCiAgLy8vCiAgLy8vIElmIFtkaXNqb2ludF0gaXMgYHRydWVgLCB0aGVuIGFsbCBjb21wb25lbnQgc2V0cyBtdXN0IGJlIGRpc2pvaW50LiBUaGF0CiAgLy8vIGlzLCB0aGF0IHRoZXkgY29udGFpbiBubyBlbGVtZW50cyBpbiBjb21tb24uIFRoaXMgbWFrZXMgbWFueSBvcGVyYXRpb25zCiAgLy8vIGluY2x1ZGluZyBbbGVuZ3RoXSBtb3JlIGVmZmljaWVudC4gSWYgdGhlIGNvbXBvbmVudCBzZXRzIHR1cm4gb3V0IG5vdCB0bwogIC8vLyBiZSBkaXNqb2ludCwgc29tZSBvcGVyYXRpb25zIG1heSBiZWhhdmUgaW5jb25zaXN0ZW50bHkuCiAgVW5pb25TZXQodGhpcy5fc2V0cywge2Jvb2wgZGlzam9pbnQ6IGZhbHNlfSkgOiBfZGlzam9pbnQgPSBkaXNqb2ludDsKCiAgLy8vIENyZWF0ZXMgYSBuZXcgc2V0IHRoYXQncyBhIHZpZXcgb2YgdGhlIHVuaW9uIG9mIGFsbCBzZXRzIGluIFtzZXRzXS4KICAvLy8KICAvLy8gSWYgYW55IHNldHMgaW4gW3NldHNdIGNoYW5nZSwgdGhpcyBbVW5pb25TZXRdIHJlZmxlY3RzIHRoYXQgY2hhbmdlLgogIC8vLyBIb3dldmVyLCB1bmxpa2UgW25ldyBVbmlvblNldF0sIHRoaXMgY3JlYXRlcyBhIGNvcHkgb2YgaXRzIHBhcmFtZXRlciwgc28KICAvLy8gY2hhbmdlcyBpbiBbc2V0c10gYXJlbid0IHJlZmxlY3RlZCBpbiB0aGlzIFtVbmlvblNldF0uCiAgLy8vCiAgLy8vIElmIFtkaXNqb2ludF0gaXMgYHRydWVgLCB0aGVuIGFsbCBjb21wb25lbnQgc2V0cyBtdXN0IGJlIGRpc2pvaW50LiBUaGF0CiAgLy8vIGlzLCB0aGF0IHRoZXkgY29udGFpbiBubyBlbGVtZW50cyBpbiBjb21tb24uIFRoaXMgbWFrZXMgbWFueSBvcGVyYXRpb25zCiAgLy8vIGluY2x1ZGluZyBbbGVuZ3RoXSBtb3JlIGVmZmljaWVudC4gSWYgdGhlIGNvbXBvbmVudCBzZXRzIHR1cm4gb3V0IG5vdCB0bwogIC8vLyBiZSBkaXNqb2ludCwgc29tZSBvcGVyYXRpb25zIG1heSBiZWhhdmUgaW5jb25zaXN0ZW50bHkuCiAgVW5pb25TZXQuZnJvbShJdGVyYWJsZTxTZXQ8RT4+IHNldHMsIHtib29sIGRpc2pvaW50OiBmYWxzZX0pCiAgICAgIDogdGhpcyhzZXRzLnRvU2V0KCksIGRpc2pvaW50OiBkaXNqb2ludCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9kaXNqb2ludAogICAgICA/IF9zZXRzLmZvbGQoMCwgKGxlbmd0aCwgc2V0KSA9PiBsZW5ndGggKyBzZXQubGVuZ3RoKQogICAgICA6IF9pdGVyYWJsZS5sZW5ndGg7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfaXRlcmFibGUuaXRlcmF0b3I7CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGNvbnRlbnRzIG9mIGFsbCB0aGUgc2V0cyBpbiBbdGhpc10uCiAgSXRlcmFibGU8RT4gZ2V0IF9pdGVyYWJsZSA9PgogICAgICBfZGlzam9pbnQgPyBfc2V0cy5leHBhbmQoKHNldCkgPT4gc2V0KSA6IF9kZWR1cEl0ZXJhYmxlOwoKICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSBvdmVyIHRoZSBjb250ZW50cyBvZiBhbGwgdGhlIHNldHMgaW4gW3RoaXNdIHRoYXQKICAvLy8gZGUtZHVwbGljYXRlcyBlbGVtZW50cy4KICAvLy8KICAvLy8gSWYgdGhlIHNldHMgYXJlbid0IGd1YXJhbnRlZWQgdG8gYmUgZGlzam9pbnQsIHRoaXMga2VlcHMgdHJhY2sgb2YgdGhlCiAgLy8vIGVsZW1lbnRzIHdlJ3ZlIGFscmVhZHkgZW1pdHRlZCBzbyB0aGF0IHdlIGNhbiBkZS1kdXBsaWNhdGUgdGhlbS4KICBJdGVyYWJsZTxFPiBnZXQgX2RlZHVwSXRlcmFibGUgewogICAgdmFyIHNlZW4gPSBuZXcgU2V0PEU+KCk7CiAgICByZXR1cm4gX3NldHMuZXhwYW5kKChzZXQpID0+IHNldCkud2hlcmUoKGVsZW1lbnQpIHsKICAgICAgaWYgKHNlZW4uY29udGFpbnMoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgICAgc2Vlbi5hZGQoZWxlbWVudCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSk7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSA9PiBfc2V0cy5hbnkoKHNldCkgPT4gc2V0LmNvbnRhaW5zKGVsZW1lbnQpKTsKCiAgRSBsb29rdXAoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIHJldHVybiBfc2V0cwogICAgICAgIC5tYXAoKHNldCkgPT4gc2V0Lmxvb2t1cChlbGVtZW50KSkKICAgICAgICAuZmlyc3RXaGVyZSgocmVzdWx0KSA9PiByZXN1bHQgIT0gbnVsbCwgb3JFbHNlOiAoKSA9PiBudWxsKTsKICB9CgogIFNldDxFPiB0b1NldCgpIHsKICAgIHZhciByZXN1bHQgPSBuZXcgU2V0PEU+KCk7CiAgICBmb3IgKHZhciBzZXQgaW4gX3NldHMpIHsKICAgICAgcmVzdWx0LmFkZEFsbChzZXQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KWgBOTjwBGgElAUcETwRQTiZENBsBQRgBSgZPSQZOTk8+RwFKBkpPPQZOTk8+PzABHjwaATIBRx8/AUseBkxHIx04MBkTCAQBTgEdJgERK0UEARMfHRoGEwQCASVwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3VuaW9uX3NldC5kYXJ0RnNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvdW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnSY8S8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2VtcHR5X3VubW9kaWZpYWJsZV9zZXQuZGFydCc7CmltcG9ydCAnd3JhcHBlcnMuZGFydCc7CgpleHBvcnQgImRhcnQ6Y29sbGVjdGlvbiIgc2hvdyBVbm1vZGlmaWFibGVMaXN0VmlldywgVW5tb2RpZmlhYmxlTWFwVmlldzsKCi8vLyBBIGZpeGVkLWxlbmd0aCBsaXN0LgovLy8KLy8vIEEgYE5vbkdyb3dhYmxlTGlzdFZpZXdgIGNvbnRhaW5zIGEgW0xpc3RdIG9iamVjdCBhbmQgZW5zdXJlcyB0aGF0Ci8vLyBpdHMgbGVuZ3RoIGRvZXMgbm90IGNoYW5nZS4KLy8vIE1ldGhvZHMgdGhhdCB3b3VsZCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCwKLy8vIHN1Y2ggYXMgW2FkZF0gYW5kIFtyZW1vdmVdLCB0aHJvdyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCi8vLyBBbGwgb3RoZXIgbWV0aG9kcyB3b3JrIGRpcmVjdGx5IG9uIHRoZSB1bmRlcmx5aW5nIGxpc3QuCi8vLwovLy8gVGhpcyBjbGFzcyBfZG9lc18gYWxsb3cgY2hhbmdlcyB0byB0aGUgY29udGVudHMgb2YgdGhlIHdyYXBwZWQgbGlzdC4KLy8vIFlvdSBjYW4sIGZvciBleGFtcGxlLCBbc29ydF0gdGhlIGxpc3QuCi8vLyBQZXJtaXR0ZWQgb3BlcmF0aW9ucyBkZWZlciB0byB0aGUgd3JhcHBlZCBsaXN0LgpjbGFzcyBOb25Hcm93YWJsZUxpc3RWaWV3PEU+IGV4dGVuZHMgRGVsZWdhdGluZ0xpc3Q8RT4KICAgIHdpdGggTm9uR3Jvd2FibGVMaXN0TWl4aW48RT4gewogIE5vbkdyb3dhYmxlTGlzdFZpZXcoTGlzdDxFPiBsaXN0QmFzZSkgOiBzdXBlcihsaXN0QmFzZSk7Cn0KCi8vLyBNaXhpbiBjbGFzcyB0aGF0IGltcGxlbWVudHMgYSB0aHJvd2luZyB2ZXJzaW9uIG9mIGFsbCBsaXN0IG9wZXJhdGlvbnMgdGhhdAovLy8gY2hhbmdlIHRoZSBMaXN0J3MgbGVuZ3RoLgphYnN0cmFjdCBjbGFzcyBOb25Hcm93YWJsZUxpc3RNaXhpbjxFPiBpbXBsZW1lbnRzIExpc3Q8RT4gewogIHN0YXRpYyBUIF90aHJvdzxUPigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgY2hhbmdlIHRoZSBsZW5ndGggb2YgYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICBzZXQgbGVuZ3RoKGludCBuZXdMZW5ndGgpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIGJvb2wgYWRkKEUgdmFsdWUpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIGluc2VydChpbnQgaW5kZXgsIEUgZWxlbWVudCkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICBFIHJlbW92ZUF0KGludCBpbmRleCkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgRSByZW1vdmVMYXN0KCkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgcmVwbGFjZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgY2xlYXIoKSA9PiBfdGhyb3coKTsKfQoKLy8vIEFuIHVubW9kaWZpYWJsZSBzZXQuCi8vLwovLy8gQW4gVW5tb2RpZmlhYmxlU2V0VmlldyBjb250YWlucyBhIFtTZXRdIG9iamVjdCBhbmQgZW5zdXJlcwovLy8gdGhhdCBpdCBkb2VzIG5vdCBjaGFuZ2UuCi8vLyBNZXRob2RzIHRoYXQgd291bGQgY2hhbmdlIHRoZSBzZXQsCi8vLyBzdWNoIGFzIFthZGRdIGFuZCBbcmVtb3ZlXSwgdGhyb3cgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgovLy8gUGVybWl0dGVkIG9wZXJhdGlvbnMgZGVmZXIgdG8gdGhlIHdyYXBwZWQgc2V0LgpjbGFzcyBVbm1vZGlmaWFibGVTZXRWaWV3PEU+IGV4dGVuZHMgRGVsZWdhdGluZ1NldDxFPgogICAgd2l0aCBVbm1vZGlmaWFibGVTZXRNaXhpbjxFPiB7CiAgVW5tb2RpZmlhYmxlU2V0VmlldyhTZXQ8RT4gc2V0QmFzZSkgOiBzdXBlcihzZXRCYXNlKTsKCiAgLy8vIEFuIHVubW9kaWZpYWJsZSBlbXB0eSBzZXQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgYG5ldyBVbm1vZGlmaWFibGVTZXRWaWV3KG5ldyBTZXQoKSlgLCBleGNlcHQgdGhhdCBpdAogIC8vLyBjYW4gYmUgdXNlZCBpbiBjb25zdCBjb250ZXh0cy4KICBjb25zdCBmYWN0b3J5IFVubW9kaWZpYWJsZVNldFZpZXcuZW1wdHkoKSA9IEVtcHR5VW5tb2RpZmlhYmxlU2V0PEU+Owp9CgovLy8gTWl4aW4gY2xhc3MgdGhhdCBpbXBsZW1lbnRzIGEgdGhyb3dpbmcgdmVyc2lvbiBvZiBhbGwgc2V0IG9wZXJhdGlvbnMgdGhhdAovLy8gY2hhbmdlIHRoZSBTZXQuCmFic3RyYWN0IGNsYXNzIFVubW9kaWZpYWJsZVNldE1peGluPEU+IGltcGxlbWVudHMgU2V0PEU+IHsKICBzdGF0aWMgVCBfdGhyb3c8VD4oKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgU2V0Iik7CiAgfQoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc2V0IGFyZSBkaXNhbGxvd2VkLgogIGJvb2wgYWRkKEUgdmFsdWUpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc2V0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIHNldCBhcmUgZGlzYWxsb3dlZC4KICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc2V0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlIGVsZW1lbnRzKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIHNldCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZSBlbGVtZW50cykgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBzZXQgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBzZXQgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBzZXQgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCBjbGVhcigpID0+IF90aHJvdygpOwp9CgovLy8gTWl4aW4gY2xhc3MgdGhhdCBpbXBsZW1lbnRzIGEgdGhyb3dpbmcgdmVyc2lvbiBvZiBhbGwgbWFwIG9wZXJhdGlvbnMgdGhhdAovLy8gY2hhbmdlIHRoZSBNYXAuCmFic3RyYWN0IGNsYXNzIFVubW9kaWZpYWJsZU1hcE1peGluPEssIFY+IGltcGxlbWVudHMgTWFwPEssIFY+IHsKICBzdGF0aWMgVCBfdGhyb3c8VD4oKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbWFwIGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIG1hcCBhcmUgZGlzYWxsb3dlZC4KICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbWFwIGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBtYXAgYXJlIGRpc2FsbG93ZWQuCiAgViByZW1vdmUoT2JqZWN0IGtleSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBtYXAgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCBjbGVhcigpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbWFwIGFyZSBkaXNhbGxvd2VkLgogIHNldCBmaXJzdChfKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIG1hcCBhcmUgZGlzYWxsb3dlZC4KICBzZXQgbGFzdChfKSA9PiBfdGhyb3coKTsKfQqAtQBOTjwBJhgBSQEZBEYgNj08BEkrNDcjOwIBTx48GSA8BAEkRCkBJEQhASREMQEkRDEBJEQ/ASREKQEkRCUBJEQeASRENgEkRDYBJEQ0ASRESwEkRBwCARkEPx0nPTM2IzgBIQZPJUcCAU4UOxlFBAEkNSEBJDUxASQ1KQEkNTEBJDUxASQ1NgEkNTYBJDUcAgFOFEEZRQQBJDUxASQ1MgEkNSwBJDUkASQ1HAEkNRwBJDUbAgExcGFja2FnZTpjb2xsZWN0aW9uL3NyYy91bm1vZGlmaWFibGVfd3JhcHBlcnMuZGFydEVzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL3VuaW9uX3NldF9jb250cm9sbGVyLmRhcnSHUC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3VuaW9uX3NldC5kYXJ0JzsKCi8vLyBBIGNvbnRyb2xsZXIgdGhhdCBleHBvc2VzIGEgdmlldyBvZiB0aGUgdW5pb24gb2YgYSBjb2xsZWN0aW9uIG9mIHNldHMuCi8vLwovLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIGNsYXNzIGZvciBjcmVhdGluZyBhIFtVbmlvblNldF0gd2hvc2UgY29udGVudHMgY2hhbmdlCi8vLyBvdmVyIHRoZSBsaWZldGltZSBvZiBhIGNsYXNzLiBGb3IgZXhhbXBsZToKLy8vCi8vLyBgYGBkYXJ0Ci8vLyBjbGFzcyBFbmdpbmUgewovLy8gICBTZXQ8VGVzdD4gZ2V0IGFjdGl2ZVRlc3RzID0+IF9hY3RpdmVUZXN0c0dyb3VwLnNldDsKLy8vICAgZmluYWwgX2FjdGl2ZVRlc3RzR3JvdXAgPSBuZXcgVW5pb25TZXRDb250cm9sbGVyPFRlc3Q+KCk7Ci8vLwovLy8gICB2b2lkIGFkZFN1aXRlKFN1aXRlIHN1aXRlKSB7Ci8vLyAgICAgX2FjdGl2ZVRlc3RzR3JvdXAuYWRkKHN1aXRlLnRlc3RzKTsKLy8vICAgICBfcnVuU3VpdGUoc3VpdGUpOwovLy8gICAgIF9hY3RpdmVUZXN0c0dyb3VwLnJlbW92ZShzdWl0ZS50ZXN0cyk7Ci8vLyAgIH0KLy8vIH0KLy8vIGBgYApjbGFzcyBVbmlvblNldENvbnRyb2xsZXI8RT4gewogIC8vLyBUaGUgW1VuaW9uU2V0XSB0aGF0IHByb3ZpZGVzIGEgdmlldyBvZiB0aGUgdW5pb24gb2Ygc2V0cyBpbiBbdGhpc10uCiAgVW5pb25TZXQ8RT4gZ2V0IHNldCA9PiBfc2V0OwogIFVuaW9uU2V0PEU+IF9zZXQ7CgogIC8vLyBUaGUgc2V0cyB3aG9zZSB1bmlvbiBpcyBleHBvc2VkIHRocm91Z2ggW3NldF0uCiAgZmluYWwgX3NldHMgPSBuZXcgU2V0PFNldDxFPj4oKTsKCiAgLy8vIENyZWF0ZXMgYSBzZXQgb2Ygc2V0cyB0aGF0IHByb3ZpZGVzIGEgdmlldyBvZiB0aGUgdW5pb24gb2YgdGhvc2Ugc2V0cy4KICAvLy8KICAvLy8gSWYgW2Rpc2pvaW50XSBpcyBgdHJ1ZWAsIHRoaXMgYXNzdW1lcyB0aGF0IGFsbCBjb21wb25lbnQgc2V0cyBhcmUKICAvLy8gZGlzam9pbnTigJR0aGF0IGlzLCB0aGF0IHRoZXkgY29udGFpbiBubyBlbGVtZW50cyBpbiBjb21tb24uIFRoaXMgbWFrZXMKICAvLy8gbWFueSBvcGVyYXRpb25zIGluY2x1ZGluZyBbbGVuZ3RoXSBtb3JlIGVmZmljaWVudC4KICBVbmlvblNldENvbnRyb2xsZXIoe2Jvb2wgZGlzam9pbnQ6IGZhbHNlfSkgewogICAgX3NldCA9IG5ldyBVbmlvblNldDxFPihfc2V0cywgZGlzam9pbnQ6IGRpc2pvaW50KTsKICB9CgogIC8vLyBBZGRzIHRoZSBjb250ZW50cyBvZiBbY29tcG9uZW50XSB0byBbc2V0XS4KICAvLy8KICAvLy8gSWYgdGhlIGNvbnRlbnRzIG9mIFtjb21wb25lbnRdIGNoYW5nZSBvdmVyIHRpbWUsIFtzZXRdIHdpbGwgY2hhbmdlCiAgLy8vIGFjY29yZGluZ2x5LgogIHZvaWQgYWRkKFNldDxFPiBjb21wb25lbnQpIHsKICAgIF9zZXRzLmFkZChjb21wb25lbnQpOwogIH0KCiAgLy8vIFJlbW92ZXMgdGhlIGNvbnRlbnRzIG9mIFtjb21wb25lbnRdIHRvIFtzZXRdLgogIC8vLwogIC8vLyBJZiBhbm90aGVyIHNldCBpbiBbdGhpc10gaGFzIG92ZXJsYXBwaW5nIGVsZW1lbnRzIHdpdGggW2NvbXBvbmVudF0sIHRob3NlCiAgLy8vIGVsZW1lbnRzIHdpbGwgcmVtYWluIGluIFtzZXRdLgogIGJvb2wgcmVtb3ZlKFNldDxFPiBjb21wb25lbnQpID0+IF9zZXRzLnJlbW92ZShjb21wb25lbnQpOwp9CjgATk48ARkBSwRQLwQMEzpABCMsGi8IBggeSh8UATUjAU0GSEw5LzcEATEGSRMfGgQBNAZQJTwCATBwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3VuaW9uX3NldF9jb250cm9sbGVyLmRhcnQ5c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy93cmFwcGVycy5kYXJ0wABThC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiI7CmltcG9ydCAiZGFydDptYXRoIiBhcyBtYXRoOwoKaW1wb3J0ICJ1bm1vZGlmaWFibGVfd3JhcHBlcnMuZGFydCI7Cgp0eXBlZGVmIEsgX0tleUZvclZhbHVlPEssIFY+KFYgdmFsdWUpOwoKLy8vIEEgYmFzZSBjbGFzcyBmb3IgZGVsZWdhdGluZyBpdGVyYWJsZXMuCi8vLwovLy8gU3ViY2xhc3NlcyBjYW4gcHJvdmlkZSBhIFtfYmFzZV0gdGhhdCBzaG91bGQgYmUgZGVsZWdhdGVkIHRvLiBVbmxpa2UKLy8vIFtEZWxlZ2F0aW5nSXRlcmFibGVdLCB0aGlzIGFsbG93cyB0aGUgYmFzZSB0byBiZSBjcmVhdGVkIG9uIGRlbWFuZC4KYWJzdHJhY3QgY2xhc3MgX0RlbGVnYXRpbmdJdGVyYWJsZUJhc2U8RT4gaW1wbGVtZW50cyBJdGVyYWJsZTxFPiB7CiAgSXRlcmFibGU8RT4gZ2V0IF9iYXNlOwoKICBjb25zdCBfRGVsZWdhdGluZ0l0ZXJhYmxlQmFzZSgpOwoKICBib29sIGFueShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gX2Jhc2UuYW55KHRlc3QpOwoKICBJdGVyYWJsZTxUPiBjYXN0PFQ+KCkgPT4gX2Jhc2UuY2FzdDxUPigpOwoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSA9PiBfYmFzZS5jb250YWlucyhlbGVtZW50KTsKCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSA9PiBfYmFzZS5lbGVtZW50QXQoaW5kZXgpOwoKICBib29sIGV2ZXJ5KGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBfYmFzZS5ldmVyeSh0ZXN0KTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoRSBlbGVtZW50KSkgPT4gX2Jhc2UuZXhwYW5kKGYpOwoKICBFIGdldCBmaXJzdCA9PiBfYmFzZS5maXJzdDsKCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pID0+CiAgICAgIF9iYXNlLmZpcnN0V2hlcmUodGVzdCwgb3JFbHNlOiBvckVsc2UpOwoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpID0+CiAgICAgIF9iYXNlLmZvbGQoaW5pdGlhbFZhbHVlLCBjb21iaW5lKTsKCiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgPT4gX2Jhc2UuZm9sbG93ZWRCeShvdGhlcik7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoRSBlbGVtZW50KSkgPT4gX2Jhc2UuZm9yRWFjaChmKTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfYmFzZS5pc0VtcHR5OwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9iYXNlLmlzTm90RW1wdHk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfYmFzZS5pdGVyYXRvcjsKCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pID0+IF9iYXNlLmpvaW4oc2VwYXJhdG9yKTsKCiAgRSBnZXQgbGFzdCA9PiBfYmFzZS5sYXN0OwoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSA9PgogICAgICBfYmFzZS5sYXN0V2hlcmUodGVzdCwgb3JFbHNlOiBvckVsc2UpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfYmFzZS5sZW5ndGg7CgogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoRSBlbGVtZW50KSkgPT4gX2Jhc2UubWFwKGYpOwoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgPT4gX2Jhc2UucmVkdWNlKGNvbWJpbmUpOwoKICBAZGVwcmVjYXRlZAogIEl0ZXJhYmxlPFQ+IHJldHlwZTxUPigpID0+IGNhc3Q8VD4oKTsKCiAgRSBnZXQgc2luZ2xlID0+IF9iYXNlLnNpbmdsZTsKCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICByZXR1cm4gX2Jhc2Uuc2luZ2xlV2hlcmUodGVzdCwgb3JFbHNlOiBvckVsc2UpOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgbikgPT4gX2Jhc2Uuc2tpcChuKTsKCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgPT4gX2Jhc2Uuc2tpcFdoaWxlKHRlc3QpOwoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBuKSA9PiBfYmFzZS50YWtlKG4pOwoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSA9PiBfYmFzZS50YWtlV2hpbGUodGVzdCk7CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgPT4gX2Jhc2UudG9MaXN0KGdyb3dhYmxlOiBncm93YWJsZSk7CgogIFNldDxFPiB0b1NldCgpID0+IF9iYXNlLnRvU2V0KCk7CgogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBfYmFzZS53aGVyZSh0ZXN0KTsKCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gX2Jhc2Uud2hlcmVUeXBlPFQ+KCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9iYXNlLnRvU3RyaW5nKCk7Cn0KCi8vLyBBbiBbSXRlcmFibGVdIHRoYXQgZGVsZWdhdGVzIGFsbCBvcGVyYXRpb25zIHRvIGEgYmFzZSBpdGVyYWJsZS4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGhpZGUgbm9uLWBJdGVyYWJsZWAgbWV0aG9kcyBvZiBhbiBpdGVyYWJsZSBvYmplY3QsCi8vLyBvciBpdCBjYW4gYmUgZXh0ZW5kZWQgdG8gYWRkIGV4dHJhIGZ1bmN0aW9uYWxpdHkgb24gdG9wIG9mIGFuIGV4aXN0aW5nCi8vLyBpdGVyYWJsZSBvYmplY3QuCmNsYXNzIERlbGVnYXRpbmdJdGVyYWJsZTxFPiBleHRlbmRzIF9EZWxlZ2F0aW5nSXRlcmFibGVCYXNlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfYmFzZTsKCiAgLy8vIENyZWF0ZXMgYSB3cmFwcGVyIHRoYXQgZm9yd2FyZHMgb3BlcmF0aW9ucyB0byBbYmFzZV0uCiAgY29uc3QgRGVsZWdhdGluZ0l0ZXJhYmxlKEl0ZXJhYmxlPEU+IGJhc2UpIDogX2Jhc2UgPSBiYXNlOwoKICAvLy8gQ3JlYXRlcyBhIHdyYXBwZXIgdGhhdCBhc3NlcnRzIHRoZSB0eXBlcyBvZiB2YWx1ZXMgaW4gW2Jhc2VdLgogIC8vLwogIC8vLyBUaGlzIHNvdW5kbHkgY29udmVydHMgYW4gW0l0ZXJhYmxlXSB3aXRob3V0IGEgZ2VuZXJpYyB0eXBlIHRvIGFuCiAgLy8vIGBJdGVyYWJsZTxFPmAgYnkgYXNzZXJ0aW5nIHRoYXQgaXRzIGVsZW1lbnRzIGFyZSBpbnN0YW5jZXMgb2YgYEVgIHdoZW5ldmVyCiAgLy8vIHRoZXkncmUgYWNjZXNzZWQuIElmIHRoZXkncmUgbm90LCBpdCB0aHJvd3MgYSBbQ2FzdEVycm9yXS4KICAvLy8KICAvLy8gVGhpcyBmb3J3YXJkcyBhbGwgb3BlcmF0aW9ucyB0byBbYmFzZV0sIHNvIGFueSBjaGFuZ2VzIGluIFtiYXNlXSB3aWxsIGJlCiAgLy8vIHJlZmxlY3RlZCBpbiBbdGhpc10uIElmIFtiYXNlXSBpcyBhbHJlYWR5IGFuIGBJdGVyYWJsZTxFPmAsIGl0J3MgcmV0dXJuZWQKICAvLy8gdW5tb2RpZmllZC4KICBARGVwcmVjYXRlZCgnVXNlIGl0ZXJhYmxlLmNhc3Q8RT4gaW5zdGVhZC4nKQogIHN0YXRpYyBJdGVyYWJsZTxFPiB0eXBlZDxFPihJdGVyYWJsZSBiYXNlKSA9PiBiYXNlLmNhc3Q8RT4oKTsKfQoKLy8vIEEgW0xpc3RdIHRoYXQgZGVsZWdhdGVzIGFsbCBvcGVyYXRpb25zIHRvIGEgYmFzZSBsaXN0LgovLy8KLy8vIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gaGlkZSBub24tYExpc3RgIG1ldGhvZHMgb2YgYSBsaXN0IG9iamVjdCwgb3IgaXQKLy8vIGNhbiBiZSBleHRlbmRlZCB0byBhZGQgZXh0cmEgZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgYW4gZXhpc3RpbmcgbGlzdAovLy8gb2JqZWN0LgpjbGFzcyBEZWxlZ2F0aW5nTGlzdDxFPiBleHRlbmRzIERlbGVnYXRpbmdJdGVyYWJsZTxFPiBpbXBsZW1lbnRzIExpc3Q8RT4gewogIGNvbnN0IERlbGVnYXRpbmdMaXN0KExpc3Q8RT4gYmFzZSkgOiBzdXBlcihiYXNlKTsKCiAgLy8vIENyZWF0ZXMgYSB3cmFwcGVyIHRoYXQgYXNzZXJ0cyB0aGUgdHlwZXMgb2YgdmFsdWVzIGluIFtiYXNlXS4KICAvLy8KICAvLy8gVGhpcyBzb3VuZGx5IGNvbnZlcnRzIGEgW0xpc3RdIHdpdGhvdXQgYSBnZW5lcmljIHR5cGUgdG8gYSBgTGlzdDxFPmAgYnkKICAvLy8gYXNzZXJ0aW5nIHRoYXQgaXRzIGVsZW1lbnRzIGFyZSBpbnN0YW5jZXMgb2YgYEVgIHdoZW5ldmVyIHRoZXkncmUKICAvLy8gYWNjZXNzZWQuIElmIHRoZXkncmUgbm90LCBpdCB0aHJvd3MgYSBbQ2FzdEVycm9yXS4gTm90ZSB0aGF0IGV2ZW4gaWYgYW4KICAvLy8gb3BlcmF0aW9uIHRocm93cyBhIFtDYXN0RXJyb3JdLCBpdCBtYXkgc3RpbGwgbXV0YXRlIHRoZSB1bmRlcmx5aW5nCiAgLy8vIGNvbGxlY3Rpb24uCiAgLy8vCiAgLy8vIFRoaXMgZm9yd2FyZHMgYWxsIG9wZXJhdGlvbnMgdG8gW2Jhc2VdLCBzbyBhbnkgY2hhbmdlcyBpbiBbYmFzZV0gd2lsbCBiZQogIC8vLyByZWZsZWN0ZWQgaW4gW3RoaXNdLiBJZiBbYmFzZV0gaXMgYWxyZWFkeSBhIGBMaXN0PEU+YCwgaXQncyByZXR1cm5lZAogIC8vLyB1bm1vZGlmaWVkLgogIEBEZXByZWNhdGVkKCdVc2UgbGlzdC5jYXN0PEU+IGluc3RlYWQuJykKICBzdGF0aWMgTGlzdDxFPiB0eXBlZDxFPihMaXN0IGJhc2UpID0+IGJhc2UuY2FzdDxFPigpOwoKICBMaXN0PEU+IGdldCBfbGlzdEJhc2UgPT4gX2Jhc2U7CgogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBfbGlzdEJhc2VbaW5kZXhdOwoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEUgdmFsdWUpIHsKICAgIF9saXN0QmFzZVtpbmRleF0gPSB2YWx1ZTsKICB9CgogIExpc3Q8RT4gb3BlcmF0b3IgKyhMaXN0PEU+IG90aGVyKSA9PiBfbGlzdEJhc2UgKyBvdGhlcjsKCiAgdm9pZCBhZGQoRSB2YWx1ZSkgewogICAgX2xpc3RCYXNlLmFkZCh2YWx1ZSk7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgX2xpc3RCYXNlLmFkZEFsbChpdGVyYWJsZSk7CiAgfQoKICBNYXA8aW50LCBFPiBhc01hcCgpID0+IF9saXN0QmFzZS5hc01hcCgpOwoKICBMaXN0PFQ+IGNhc3Q8VD4oKSA9PiBfbGlzdEJhc2UuY2FzdDxUPigpOwoKICB2b2lkIGNsZWFyKCkgewogICAgX2xpc3RCYXNlLmNsZWFyKCk7CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtFIGZpbGxWYWx1ZV0pIHsKICAgIF9saXN0QmFzZS5maWxsUmFuZ2Uoc3RhcnQsIGVuZCwgZmlsbFZhbHVlKTsKICB9CgogIHNldCBmaXJzdChFIHZhbHVlKSB7CiAgICBpZiAodGhpcy5pc0VtcHR5KSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbMF0gPSB2YWx1ZTsKICB9CgogIEl0ZXJhYmxlPEU+IGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgPT4gX2xpc3RCYXNlLmdldFJhbmdlKHN0YXJ0LCBlbmQpOwoKICBpbnQgaW5kZXhPZihFIGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSkgPT4gX2xpc3RCYXNlLmluZGV4T2YoZWxlbWVudCwgc3RhcnQpOwoKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKSA9PgogICAgICBfbGlzdEJhc2UuaW5kZXhXaGVyZSh0ZXN0LCBzdGFydCk7CgogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSBlbGVtZW50KSB7CiAgICBfbGlzdEJhc2UuaW5zZXJ0KGluZGV4LCBlbGVtZW50KTsKICB9CgogIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBfbGlzdEJhc2UuaW5zZXJ0QWxsKGluZGV4LCBpdGVyYWJsZSk7CiAgfQoKICBzZXQgbGFzdChFIHZhbHVlKSB7CiAgICBpZiAodGhpcy5pc0VtcHR5KSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbdGhpcy5sZW5ndGggLSAxXSA9IHZhbHVlOwogIH0KCiAgaW50IGxhc3RJbmRleE9mKEUgZWxlbWVudCwgW2ludCBzdGFydF0pID0+CiAgICAgIF9saXN0QmFzZS5sYXN0SW5kZXhPZihlbGVtZW50LCBzdGFydCk7CgogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydF0pID0+CiAgICAgIF9saXN0QmFzZS5sYXN0SW5kZXhXaGVyZSh0ZXN0LCBzdGFydCk7CgogIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCkgewogICAgX2xpc3RCYXNlLmxlbmd0aCA9IG5ld0xlbmd0aDsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgPT4gX2xpc3RCYXNlLnJlbW92ZSh2YWx1ZSk7CgogIEUgcmVtb3ZlQXQoaW50IGluZGV4KSA9PiBfbGlzdEJhc2UucmVtb3ZlQXQoaW5kZXgpOwoKICBFIHJlbW92ZUxhc3QoKSA9PiBfbGlzdEJhc2UucmVtb3ZlTGFzdCgpOwoKICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgX2xpc3RCYXNlLnJlbW92ZVJhbmdlKHN0YXJ0LCBlbmQpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2xpc3RCYXNlLnJlbW92ZVdoZXJlKHRlc3QpOwogIH0KCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgX2xpc3RCYXNlLnJlcGxhY2VSYW5nZShzdGFydCwgZW5kLCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfbGlzdEJhc2UucmV0YWluV2hlcmUodGVzdCk7CiAgfQoKICBAZGVwcmVjYXRlZAogIExpc3Q8VD4gcmV0eXBlPFQ+KCkgPT4gY2FzdDxUPigpOwoKICBJdGVyYWJsZTxFPiBnZXQgcmV2ZXJzZWQgPT4gX2xpc3RCYXNlLnJldmVyc2VkOwoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBfbGlzdEJhc2Uuc2V0QWxsKGluZGV4LCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIF9saXN0QmFzZS5zZXRSYW5nZShzdGFydCwgZW5kLCBpdGVyYWJsZSwgc2tpcENvdW50KTsKICB9CgogIHZvaWQgc2h1ZmZsZShbbWF0aC5SYW5kb20gcmFuZG9tXSkgewogICAgX2xpc3RCYXNlLnNodWZmbGUocmFuZG9tKTsKICB9CgogIHZvaWQgc29ydChbaW50IGNvbXBhcmUoRSBhLCBFIGIpXSkgewogICAgX2xpc3RCYXNlLnNvcnQoY29tcGFyZSk7CiAgfQoKICBMaXN0PEU+IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pID0+IF9saXN0QmFzZS5zdWJsaXN0KHN0YXJ0LCBlbmQpOwp9CgovLy8gQSBbU2V0XSB0aGF0IGRlbGVnYXRlcyBhbGwgb3BlcmF0aW9ucyB0byBhIGJhc2Ugc2V0LgovLy8KLy8vIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gaGlkZSBub24tYFNldGAgbWV0aG9kcyBvZiBhIHNldCBvYmplY3QsIG9yIGl0IGNhbgovLy8gYmUgZXh0ZW5kZWQgdG8gYWRkIGV4dHJhIGZ1bmN0aW9uYWxpdHkgb24gdG9wIG9mIGFuIGV4aXN0aW5nIHNldCBvYmplY3QuCmNsYXNzIERlbGVnYXRpbmdTZXQ8RT4gZXh0ZW5kcyBEZWxlZ2F0aW5nSXRlcmFibGU8RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIGNvbnN0IERlbGVnYXRpbmdTZXQoU2V0PEU+IGJhc2UpIDogc3VwZXIoYmFzZSk7CgogIC8vLyBDcmVhdGVzIGEgd3JhcHBlciB0aGF0IGFzc2VydHMgdGhlIHR5cGVzIG9mIHZhbHVlcyBpbiBbYmFzZV0uCiAgLy8vCiAgLy8vIFRoaXMgc291bmRseSBjb252ZXJ0cyBhIFtTZXRdIHdpdGhvdXQgYSBnZW5lcmljIHR5cGUgdG8gYSBgU2V0PEU+YCBieQogIC8vLyBhc3NlcnRpbmcgdGhhdCBpdHMgZWxlbWVudHMgYXJlIGluc3RhbmNlcyBvZiBgRWAgd2hlbmV2ZXIgdGhleSdyZQogIC8vLyBhY2Nlc3NlZC4gSWYgdGhleSdyZSBub3QsIGl0IHRocm93cyBhIFtDYXN0RXJyb3JdLiBOb3RlIHRoYXQgZXZlbiBpZiBhbgogIC8vLyBvcGVyYXRpb24gdGhyb3dzIGEgW0Nhc3RFcnJvcl0sIGl0IG1heSBzdGlsbCBtdXRhdGUgdGhlIHVuZGVybHlpbmcKICAvLy8gY29sbGVjdGlvbi4KICAvLy8KICAvLy8gVGhpcyBmb3J3YXJkcyBhbGwgb3BlcmF0aW9ucyB0byBbYmFzZV0sIHNvIGFueSBjaGFuZ2VzIGluIFtiYXNlXSB3aWxsIGJlCiAgLy8vIHJlZmxlY3RlZCBpbiBbdGhpc10uIElmIFtiYXNlXSBpcyBhbHJlYWR5IGEgYFNldDxFPmAsIGl0J3MgcmV0dXJuZWQKICAvLy8gdW5tb2RpZmllZC4KICBARGVwcmVjYXRlZCgnVXNlIHNldC5jYXN0PEU+IGluc3RlYWQuJykKICBzdGF0aWMgU2V0PEU+IHR5cGVkPEU+KFNldCBiYXNlKSA9PiBiYXNlLmNhc3Q8RT4oKTsKCiAgU2V0PEU+IGdldCBfc2V0QmFzZSA9PiBfYmFzZTsKCiAgYm9vbCBhZGQoRSB2YWx1ZSkgPT4gX3NldEJhc2UuYWRkKHZhbHVlKTsKCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIF9zZXRCYXNlLmFkZEFsbChlbGVtZW50cyk7CiAgfQoKICBTZXQ8VD4gY2FzdDxUPigpID0+IF9zZXRCYXNlLmNhc3Q8VD4oKTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9zZXRCYXNlLmNsZWFyKCk7CiAgfQoKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gb3RoZXIpID0+IF9zZXRCYXNlLmNvbnRhaW5zQWxsKG90aGVyKTsKCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpID0+IF9zZXRCYXNlLmRpZmZlcmVuY2Uob3RoZXIpOwoKICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSA9PiBfc2V0QmFzZS5pbnRlcnNlY3Rpb24ob3RoZXIpOwoKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCkgPT4gX3NldEJhc2UubG9va3VwKGVsZW1lbnQpOwoKICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpID0+IF9zZXRCYXNlLnJlbW92ZSh2YWx1ZSk7CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIF9zZXRCYXNlLnJlbW92ZUFsbChlbGVtZW50cyk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfc2V0QmFzZS5yZW1vdmVXaGVyZSh0ZXN0KTsKICB9CgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIF9zZXRCYXNlLnJldGFpbkFsbChlbGVtZW50cyk7CiAgfQoKICBAZGVwcmVjYXRlZAogIFNldDxUPiByZXR5cGU8VD4oKSA9PiBjYXN0PFQ+KCk7CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9zZXRCYXNlLnJldGFpbldoZXJlKHRlc3QpOwogIH0KCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcikgPT4gX3NldEJhc2UudW5pb24ob3RoZXIpOwoKICBTZXQ8RT4gdG9TZXQoKSA9PiBuZXcgRGVsZWdhdGluZ1NldDxFPihfc2V0QmFzZS50b1NldCgpKTsKfQoKLy8vIEEgW1F1ZXVlXSB0aGF0IGRlbGVnYXRlcyBhbGwgb3BlcmF0aW9ucyB0byBhIGJhc2UgcXVldWUuCi8vLwovLy8gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBoaWRlIG5vbi1gUXVldWVgIG1ldGhvZHMgb2YgYSBxdWV1ZSBvYmplY3QsIG9yIGl0Ci8vLyBjYW4gYmUgZXh0ZW5kZWQgdG8gYWRkIGV4dHJhIGZ1bmN0aW9uYWxpdHkgb24gdG9wIG9mIGFuIGV4aXN0aW5nIHF1ZXVlCi8vLyBvYmplY3QuCmNsYXNzIERlbGVnYXRpbmdRdWV1ZTxFPiBleHRlbmRzIERlbGVnYXRpbmdJdGVyYWJsZTxFPiBpbXBsZW1lbnRzIFF1ZXVlPEU+IHsKICBjb25zdCBEZWxlZ2F0aW5nUXVldWUoUXVldWU8RT4gcXVldWUpIDogc3VwZXIocXVldWUpOwoKICAvLy8gQ3JlYXRlcyBhIHdyYXBwZXIgdGhhdCBhc3NlcnRzIHRoZSB0eXBlcyBvZiB2YWx1ZXMgaW4gW2Jhc2VdLgogIC8vLwogIC8vLyBUaGlzIHNvdW5kbHkgY29udmVydHMgYSBbUXVldWVdIHdpdGhvdXQgYSBnZW5lcmljIHR5cGUgdG8gYSBgUXVldWU8RT5gIGJ5CiAgLy8vIGFzc2VydGluZyB0aGF0IGl0cyBlbGVtZW50cyBhcmUgaW5zdGFuY2VzIG9mIGBFYCB3aGVuZXZlciB0aGV5J3JlCiAgLy8vIGFjY2Vzc2VkLiBJZiB0aGV5J3JlIG5vdCwgaXQgdGhyb3dzIGEgW0Nhc3RFcnJvcl0uIE5vdGUgdGhhdCBldmVuIGlmIGFuCiAgLy8vIG9wZXJhdGlvbiB0aHJvd3MgYSBbQ2FzdEVycm9yXSwgaXQgbWF5IHN0aWxsIG11dGF0ZSB0aGUgdW5kZXJseWluZwogIC8vLyBjb2xsZWN0aW9uLgogIC8vLwogIC8vLyBUaGlzIGZvcndhcmRzIGFsbCBvcGVyYXRpb25zIHRvIFtiYXNlXSwgc28gYW55IGNoYW5nZXMgaW4gW2Jhc2VdIHdpbGwgYmUKICAvLy8gcmVmbGVjdGVkIGluIFt0aGlzXS4gSWYgW2Jhc2VdIGlzIGFscmVhZHkgYSBgUXVldWU8RT5gLCBpdCdzIHJldHVybmVkCiAgLy8vIHVubW9kaWZpZWQuCiAgQERlcHJlY2F0ZWQoJ1VzZSBxdWV1ZS5jYXN0PEU+IGluc3RlYWQuJykKICBzdGF0aWMgUXVldWU8RT4gdHlwZWQ8RT4oUXVldWUgYmFzZSkgPT4gYmFzZS5jYXN0PEU+KCk7CgogIFF1ZXVlPEU+IGdldCBfYmFzZVF1ZXVlID0+IF9iYXNlOwoKICB2b2lkIGFkZChFIHZhbHVlKSB7CiAgICBfYmFzZVF1ZXVlLmFkZCh2YWx1ZSk7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgX2Jhc2VRdWV1ZS5hZGRBbGwoaXRlcmFibGUpOwogIH0KCiAgdm9pZCBhZGRGaXJzdChFIHZhbHVlKSB7CiAgICBfYmFzZVF1ZXVlLmFkZEZpcnN0KHZhbHVlKTsKICB9CgogIHZvaWQgYWRkTGFzdChFIHZhbHVlKSB7CiAgICBfYmFzZVF1ZXVlLmFkZExhc3QodmFsdWUpOwogIH0KCiAgUXVldWU8VD4gY2FzdDxUPigpID0+IF9iYXNlUXVldWUuY2FzdDxUPigpOwoKICB2b2lkIGNsZWFyKCkgewogICAgX2Jhc2VRdWV1ZS5jbGVhcigpOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IG9iamVjdCkgPT4gX2Jhc2VRdWV1ZS5yZW1vdmUob2JqZWN0KTsKCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2Jhc2VRdWV1ZS5yZW1vdmVXaGVyZSh0ZXN0KTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9iYXNlUXVldWUucmV0YWluV2hlcmUodGVzdCk7CiAgfQoKICBAZGVwcmVjYXRlZAogIFF1ZXVlPFQ+IHJldHlwZTxUPigpID0+IGNhc3Q8VD4oKTsKCiAgRSByZW1vdmVGaXJzdCgpID0+IF9iYXNlUXVldWUucmVtb3ZlRmlyc3QoKTsKCiAgRSByZW1vdmVMYXN0KCkgPT4gX2Jhc2VRdWV1ZS5yZW1vdmVMYXN0KCk7Cn0KCi8vLyBBIFtNYXBdIHRoYXQgZGVsZWdhdGVzIGFsbCBvcGVyYXRpb25zIHRvIGEgYmFzZSBtYXAuCi8vLwovLy8gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBoaWRlIG5vbi1gTWFwYCBtZXRob2RzIG9mIGFuIG9iamVjdCB0aGF0IGV4dGVuZHMKLy8vIGBNYXBgLCBvciBpdCBjYW4gYmUgZXh0ZW5kZWQgdG8gYWRkIGV4dHJhIGZ1bmN0aW9uYWxpdHkgb24gdG9wIG9mIGFuCi8vLyBleGlzdGluZyBtYXAgb2JqZWN0LgpjbGFzcyBEZWxlZ2F0aW5nTWFwPEssIFY+IGltcGxlbWVudHMgTWFwPEssIFY+IHsKICBmaW5hbCBNYXA8SywgVj4gX2Jhc2U7CgogIGNvbnN0IERlbGVnYXRpbmdNYXAoTWFwPEssIFY+IGJhc2UpIDogX2Jhc2UgPSBiYXNlOwoKICAvLy8gQ3JlYXRlcyBhIHdyYXBwZXIgdGhhdCBhc3NlcnRzIHRoZSB0eXBlcyBvZiBrZXlzIGFuZCB2YWx1ZXMgaW4gW2Jhc2VdLgogIC8vLwogIC8vLyBUaGlzIHNvdW5kbHkgY29udmVydHMgYSBbTWFwXSB3aXRob3V0IGdlbmVyaWMgdHlwZXMgdG8gYSBgTWFwPEssIFY+YCBieQogIC8vLyBhc3NlcnRpbmcgdGhhdCBpdHMga2V5cyBhcmUgaW5zdGFuY2VzIG9mIGBFYCBhbmQgaXRzIHZhbHVlcyBhcmUgaW5zdGFuY2VzCiAgLy8vIG9mIGBWYCB3aGVuZXZlciB0aGV5J3JlIGFjY2Vzc2VkLiBJZiB0aGV5J3JlIG5vdCwgaXQgdGhyb3dzIGEgW0Nhc3RFcnJvcl0uCiAgLy8vIE5vdGUgdGhhdCBldmVuIGlmIGFuIG9wZXJhdGlvbiB0aHJvd3MgYSBbQ2FzdEVycm9yXSwgaXQgbWF5IHN0aWxsIG11dGF0ZQogIC8vLyB0aGUgdW5kZXJseWluZyBjb2xsZWN0aW9uLgogIC8vLwogIC8vLyBUaGlzIGZvcndhcmRzIGFsbCBvcGVyYXRpb25zIHRvIFtiYXNlXSwgc28gYW55IGNoYW5nZXMgaW4gW2Jhc2VdIHdpbGwgYmUKICAvLy8gcmVmbGVjdGVkIGluIFt0aGlzXS4gSWYgW2Jhc2VdIGlzIGFscmVhZHkgYSBgTWFwPEssIFY+YCwgaXQncyByZXR1cm5lZAogIC8vLyB1bm1vZGlmaWVkLgogIEBEZXByZWNhdGVkKCdVc2UgbWFwLmNhc3Q8SywgVj4gaW5zdGVhZC4nKQogIHN0YXRpYyBNYXA8SywgVj4gdHlwZWQ8SywgVj4oTWFwIGJhc2UpID0+IGJhc2UuY2FzdDxLLCBWPigpOwoKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpID0+IF9iYXNlW2tleV07CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBfYmFzZVtrZXldID0gdmFsdWU7CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIF9iYXNlLmFkZEFsbChvdGhlcik7CiAgfQoKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpIHsKICAgIF9iYXNlLmFkZEVudHJpZXMoZW50cmllcyk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX2Jhc2UuY2xlYXIoKTsKICB9CgogIE1hcDxLMiwgVjI+IGNhc3Q8SzIsIFYyPigpID0+IF9iYXNlLmNhc3Q8SzIsIFYyPigpOwoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+IF9iYXNlLmNvbnRhaW5zS2V5KGtleSk7CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+IF9iYXNlLmNvbnRhaW5zVmFsdWUodmFsdWUpOwoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgPT4gX2Jhc2UuZW50cmllczsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9iYXNlLmZvckVhY2goZik7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IF9iYXNlLmlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2Jhc2UuaXNOb3RFbXB0eTsKCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX2Jhc2Uua2V5czsKCiAgaW50IGdldCBsZW5ndGggPT4gX2Jhc2UubGVuZ3RoOwoKICBNYXA8SzIsIFYyPiBtYXA8SzIsIFYyPihNYXBFbnRyeTxLMiwgVjI+IHRyYW5zZm9ybShLIGtleSwgViB2YWx1ZSkpID0+CiAgICAgIF9iYXNlLm1hcCh0cmFuc2Zvcm0pOwoKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpID0+IF9iYXNlLnB1dElmQWJzZW50KGtleSwgaWZBYnNlbnQpOwoKICBWIHJlbW92ZShPYmplY3Qga2V5KSA9PiBfYmFzZS5yZW1vdmUoa2V5KTsKCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoSyBrZXksIFYgdmFsdWUpKSA9PiBfYmFzZS5yZW1vdmVXaGVyZSh0ZXN0KTsKCiAgQGRlcHJlY2F0ZWQKICBNYXA8SzIsIFYyPiByZXR5cGU8SzIsIFYyPigpID0+IGNhc3Q8SzIsIFYyPigpOwoKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IF9iYXNlLnZhbHVlczsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX2Jhc2UudG9TdHJpbmcoKTsKCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgPT4KICAgICAgX2Jhc2UudXBkYXRlKGtleSwgdXBkYXRlLCBpZkFic2VudDogaWZBYnNlbnQpOwoKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpID0+IF9iYXNlLnVwZGF0ZUFsbCh1cGRhdGUpOwp9CgovLy8gQW4gdW5tb2RpZmlhYmxlIFtTZXRdIHZpZXcgb2YgdGhlIGtleXMgb2YgYSBbTWFwXS4KLy8vCi8vLyBUaGUgc2V0IGRlbGVnYXRlcyBhbGwgb3BlcmF0aW9ucyB0byB0aGUgdW5kZXJseWluZyBtYXAuCi8vLwovLy8gQSBgTWFwYCBjYW4gb25seSBjb250YWluIGVhY2gga2V5IG9uY2UsIHNvIGl0cyBrZXlzIGNhbiBhbHdheXMKLy8vIGJlIHZpZXdlZCBhcyBhIGBTZXRgIHdpdGhvdXQgYW55IGxvc3MsIGV2ZW4gaWYgdGhlIFtNYXAua2V5c10KLy8vIGdldHRlciBvbmx5IHNob3dzIGFuIFtJdGVyYWJsZV0gdmlldyBvZiB0aGUga2V5cy4KLy8vCi8vLyBOb3RlIHRoYXQgW2xvb2t1cF0gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzZXQuCmNsYXNzIE1hcEtleVNldDxFPiBleHRlbmRzIF9EZWxlZ2F0aW5nSXRlcmFibGVCYXNlPEU+CiAgICB3aXRoIFVubW9kaWZpYWJsZVNldE1peGluPEU+IHsKICBmaW5hbCBNYXA8RSwgZHluYW1pYz4gX2Jhc2VNYXA7CgogIE1hcEtleVNldChNYXA8RSwgZHluYW1pYz4gYmFzZSkgOiBfYmFzZU1hcCA9IGJhc2U7CgogIEl0ZXJhYmxlPEU+IGdldCBfYmFzZSA9PiBfYmFzZU1hcC5rZXlzOwoKICBTZXQ8VD4gY2FzdDxUPigpIHsKICAgIGlmICh0aGlzIGlzIE1hcEtleVNldDxUPikgewogICAgICByZXR1cm4gdGhpcyBhcyBNYXBLZXlTZXQ8VD47CiAgICB9CiAgICByZXR1cm4gU2V0LmNhc3RGcm9tPEUsIFQ+KHRoaXMpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gX2Jhc2VNYXAuY29udGFpbnNLZXkoZWxlbWVudCk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2Jhc2VNYXAuaXNFbXB0eTsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfYmFzZU1hcC5pc05vdEVtcHR5OwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfYmFzZU1hcC5sZW5ndGg7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJ7JHtfYmFzZS5qb2luKCcsICcpfX0iOwoKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gb3RoZXIpID0+IG90aGVyLmV2ZXJ5KGNvbnRhaW5zKTsKCiAgLy8vIFJldHVybnMgYSBuZXcgc2V0IHdpdGggdGhlIHRoZSBlbGVtZW50cyBvZiBbdGhpc10gdGhhdCBhcmUgbm90IGluIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoYXQgaXMsIHRoZSByZXR1cm5lZCBzZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGlzIFtTZXRdIHRoYXQgYXJlCiAgLy8vIG5vdCBlbGVtZW50cyBvZiBbb3RoZXJdIGFjY29yZGluZyB0byBgb3RoZXIuY29udGFpbnNgLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHNldCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBlcXVhbGl0eSBvcGVyYXRpb24sIHdoaWNoCiAgLy8vIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgZXF1YWxpdHkgb3BlcmF0aW9uIFt0aGlzXSB1c2VzLgogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PgogICAgICB3aGVyZSgoZWxlbWVudCkgPT4gIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKS50b1NldCgpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBzZXQgd2hpY2ggaXMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIFt0aGlzXSBhbmQgW290aGVyXS4KICAvLy8KICAvLy8gVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gdGhhdCBhcmUKICAvLy8gYWxzbyBlbGVtZW50cyBvZiBbb3RoZXJdIGFjY29yZGluZyB0byBgb3RoZXIuY29udGFpbnNgLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHNldCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBlcXVhbGl0eSBvcGVyYXRpb24sIHdoaWNoCiAgLy8vIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgZXF1YWxpdHkgb3BlcmF0aW9uIFt0aGlzXSB1c2VzLgogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpID0+IHdoZXJlKG90aGVyLmNvbnRhaW5zKS50b1NldCgpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXSBzaW5jZSB0aGVyZSdzIG5vIGNvcnJlc3BvbmRpbmcgbWV0aG9kIGZvcgogIC8vLyBbTWFwXXMuCiAgRSBsb29rdXAoT2JqZWN0IGVsZW1lbnQpID0+CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJNYXBLZXlTZXQgZG9lc24ndCBzdXBwb3J0IGxvb2t1cCgpLiIpOwoKICBAZGVwcmVjYXRlZAogIFNldDxUPiByZXR5cGU8VD4oKSA9PiBTZXQuY2FzdEZyb208RSwgVD4odGhpcyk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IHNldCB3aGljaCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIFt0aGlzXSBhbmQgW290aGVyXS4KICAvLy8KICAvLy8gVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gYW5kIGFsbAogIC8vLyB0aGUgZWxlbWVudHMgb2YgW290aGVyXS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBzZXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgZXF1YWxpdHkgb3BlcmF0aW9uLCB3aGljaAogIC8vLyBtYXkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIGVxdWFsaXR5IG9wZXJhdGlvbiBbdGhpc10gdXNlcy4KICBTZXQ8RT4gdW5pb24oU2V0PEU+IG90aGVyKSA9PiB0b1NldCgpLi5hZGRBbGwob3RoZXIpOwp9CgovLy8gQ3JlYXRlcyBhIG1vZGlmaWFibGUgW1NldF0gdmlldyBvZiB0aGUgdmFsdWVzIG9mIGEgW01hcF0uCi8vLwovLy8gVGhlIGBTZXRgIHZpZXcgYXNzdW1lcyB0aGF0IHRoZSBrZXlzIG9mIHRoZSBgTWFwYCBjYW4gYmUgdW5pcXVlbHkgZGV0ZXJtaW5lZAovLy8gZnJvbSB0aGUgdmFsdWVzLiBUaGUgYGtleUZvclZhbHVlYCBmdW5jdGlvbiBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIGZpbmRzCi8vLyB0aGUga2V5IGZvciBhIHNpbmdsZSB2YWx1ZS4gVGhlIGBrZXlGb3JWYWx1ZWAgZnVuY3Rpb24gc2hvdWxkIGJlIGNvbnNpc3RlbnQKLy8vIHdpdGggZXF1YWxpdHkuIElmIGB2YWx1ZTEgPT0gdmFsdWUyYCB0aGVuIGBrZXlGb3JWYWx1ZSh2YWx1ZTEpYCBhbmQKLy8vIGBrZXlGb3JWYWx1ZSh2YWx1ZTIpYCBzaG91bGQgYmUgY29uc2lkZXJlZCBlcXVhbCBrZXlzIGJ5IHRoZSB1bmRlcmx5aW5nIG1hcCwKLy8vIGFuZCB2aWNlIHZlcnNhLgovLy8KLy8vIE1vZGlmeWluZyB0aGUgc2V0IHdpbGwgbW9kaWZ5IHRoZSB1bmRlcmx5aW5nIG1hcCBiYXNlZCBvbiB0aGUga2V5IHJldHVybmVkCi8vLyBieSBga2V5Rm9yVmFsdWVgLgovLy8KLy8vIElmIHRoZSBgTWFwYCBjb250ZW50cyBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgYGtleUZvclZhbHVlYCBmdW5jdGlvbiwKLy8vIHRoZSBzZXQgd2lsbCBub3Qgd29yayBjb25zaXN0ZW50bHksIGFuZCBtYXkgZ2l2ZSBtZWFuaW5nbGVzcyByZXNwb25zZXMgb3IgZG8KLy8vIGluY29uc2lzdGVudCB1cGRhdGVzLgovLy8KLy8vIFRoaXMgc2V0IGNhbiwgZm9yIGV4YW1wbGUsIGJlIHVzZWQgb24gYSBtYXAgZnJvbSBkYXRhYmFzZSByZWNvcmQgSURzIHRvIHRoZQovLy8gcmVjb3Jkcy4gSXQgZXhwb3NlcyB0aGUgcmVjb3JkcyBhcyBhIHNldCwgYW5kIGFsbG93cyBmb3Igd3JpdGluZyBib3RoCi8vLyBgcmVjb3JkU2V0LmFkZChkYXRhYmFzZVJlY29yZClgIGFuZCBgcmVjb3JkTWFwW2lkXWAuCi8vLwovLy8gRWZmZWN0aXZlbHksIHRoZSBtYXAgd2lsbCBhY3QgYXMgYSBraW5kIG9mIGluZGV4IGZvciB0aGUgc2V0LgpjbGFzcyBNYXBWYWx1ZVNldDxLLCBWPiBleHRlbmRzIF9EZWxlZ2F0aW5nSXRlcmFibGVCYXNlPFY+IGltcGxlbWVudHMgU2V0PFY+IHsKICBmaW5hbCBNYXA8SywgVj4gX2Jhc2VNYXA7CiAgZmluYWwgX0tleUZvclZhbHVlPEssIFY+IF9rZXlGb3JWYWx1ZTsKCiAgLy8vIENyZWF0ZXMgYSBuZXcgW01hcFZhbHVlU2V0XSBiYXNlZCBvbiBbYmFzZV0uCiAgLy8vCiAgLy8vIFtrZXlGb3JWYWx1ZV0gcmV0dXJucyB0aGUga2V5IGluIHRoZSBtYXAgdGhhdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAgLy8vIHRoZSBnaXZlbiB2YWx1ZS4gVGhlIHNldCdzIG5vdGlvbiBvZiBlcXVhbGl0eSBpcyBpZGVudGljYWwgdG8gdGhlIGVxdWFsaXR5CiAgLy8vIG9mIHRoZSByZXR1cm4gdmFsdWVzIG9mIFtrZXlGb3JWYWx1ZV0uCiAgTWFwVmFsdWVTZXQoTWFwPEssIFY+IGJhc2UsIEsga2V5Rm9yVmFsdWUoViB2YWx1ZSkpCiAgICAgIDogX2Jhc2VNYXAgPSBiYXNlLAogICAgICAgIF9rZXlGb3JWYWx1ZSA9IGtleUZvclZhbHVlOwoKICBJdGVyYWJsZTxWPiBnZXQgX2Jhc2UgPT4gX2Jhc2VNYXAudmFsdWVzOwoKICBTZXQ8VD4gY2FzdDxUPigpIHsKICAgIGlmICh0aGlzIGlzIFNldDxUPikgewogICAgICByZXR1cm4gdGhpcyBhcyBTZXQ8VD47CiAgICB9CiAgICByZXR1cm4gU2V0LmNhc3RGcm9tPFYsIFQ+KHRoaXMpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50IGlzISBWKSByZXR1cm4gZmFsc2U7CiAgICB2YXIga2V5ID0gX2tleUZvclZhbHVlKGVsZW1lbnQgYXMgVik7CgogICAgcmV0dXJuIF9iYXNlTWFwLmNvbnRhaW5zS2V5KGtleSk7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IF9iYXNlTWFwLmlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2Jhc2VNYXAuaXNOb3RFbXB0eTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2Jhc2VNYXAubGVuZ3RoOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiB0b1NldCgpLnRvU3RyaW5nKCk7CgogIGJvb2wgYWRkKFYgdmFsdWUpIHsKICAgIEsga2V5ID0gX2tleUZvclZhbHVlKHZhbHVlKTsKICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICBfYmFzZU1hcC5wdXRJZkFic2VudChrZXksICgpIHsKICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8Vj4gZWxlbWVudHMpID0+IGVsZW1lbnRzLmZvckVhY2goYWRkKTsKCiAgdm9pZCBjbGVhcigpID0+IF9iYXNlTWFwLmNsZWFyKCk7CgogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgPT4gb3RoZXIuZXZlcnkoY29udGFpbnMpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBzZXQgd2l0aCB0aGUgdGhlIGVsZW1lbnRzIG9mIFt0aGlzXSB0aGF0IGFyZSBub3QgaW4gW290aGVyXS4KICAvLy8KICAvLy8gVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gdGhhdCBhcmUKICAvLy8gbm90IGVsZW1lbnRzIG9mIFtvdGhlcl0gYWNjb3JkaW5nIHRvIGBvdGhlci5jb250YWluc2AuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgc2V0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGVxdWFsaXR5IG9wZXJhdGlvbiwgd2hpY2gKICAvLy8gbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBlcXVhbGl0eSBvcGVyYXRpb24gW3RoaXNdIHVzZXMuCiAgU2V0PFY+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpID0+CiAgICAgIHdoZXJlKChlbGVtZW50KSA9PiAhb3RoZXIuY29udGFpbnMoZWxlbWVudCkpLnRvU2V0KCk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IHNldCB3aGljaCBpcyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gW3RoaXNdIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGF0IGlzLCB0aGUgcmV0dXJuZWQgc2V0IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBbU2V0XSB0aGF0IGFyZQogIC8vLyBhbHNvIGVsZW1lbnRzIG9mIFtvdGhlcl0gYWNjb3JkaW5nIHRvIGBvdGhlci5jb250YWluc2AuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgc2V0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGVxdWFsaXR5IG9wZXJhdGlvbiwgd2hpY2gKICAvLy8gbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBlcXVhbGl0eSBvcGVyYXRpb24gW3RoaXNdIHVzZXMuCiAgU2V0PFY+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgPT4gd2hlcmUob3RoZXIuY29udGFpbnMpLnRvU2V0KCk7CgogIFYgbG9va3VwKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmIGVsZW1lbnQgaXMhIFYpIHJldHVybiBudWxsOwogICAgdmFyIGtleSA9IF9rZXlGb3JWYWx1ZShlbGVtZW50IGFzIFYpOwoKICAgIHJldHVybiBfYmFzZU1hcFtrZXldOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudCBpcyEgVikgcmV0dXJuIGZhbHNlOwogICAgdmFyIGtleSA9IF9rZXlGb3JWYWx1ZShlbGVtZW50IGFzIFYpOwoKICAgIGlmICghX2Jhc2VNYXAuY29udGFpbnNLZXkoa2V5KSkgcmV0dXJuIGZhbHNlOwogICAgX2Jhc2VNYXAucmVtb3ZlKGtleSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpID0+IGVsZW1lbnRzLmZvckVhY2gocmVtb3ZlKTsKCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoViBlbGVtZW50KSkgewogICAgdmFyIHRvUmVtb3ZlID0gW107CiAgICBfYmFzZU1hcC5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgIGlmICh0ZXN0KHZhbHVlKSkgdG9SZW1vdmUuYWRkKGtleSk7CiAgICB9KTsKICAgIHRvUmVtb3ZlLmZvckVhY2goX2Jhc2VNYXAucmVtb3ZlKTsKICB9CgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIHZhciB2YWx1ZXNUb1JldGFpbiA9IG5ldyBTZXQ8Vj4uaWRlbnRpdHkoKTsKICAgIGZvciAodmFyIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50IGlzISBWKSBjb250aW51ZTsKICAgICAgdmFyIGtleSA9IF9rZXlGb3JWYWx1ZShlbGVtZW50IGFzIFYpOwoKICAgICAgaWYgKCFfYmFzZU1hcC5jb250YWluc0tleShrZXkpKSBjb250aW51ZTsKICAgICAgdmFsdWVzVG9SZXRhaW4uYWRkKF9iYXNlTWFwW2tleV0pOwogICAgfQoKICAgIHZhciBrZXlzVG9SZW1vdmUgPSBbXTsKICAgIF9iYXNlTWFwLmZvckVhY2goKGssIHYpIHsKICAgICAgaWYgKCF2YWx1ZXNUb1JldGFpbi5jb250YWlucyh2KSkga2V5c1RvUmVtb3ZlLmFkZChrKTsKICAgIH0pOwogICAga2V5c1RvUmVtb3ZlLmZvckVhY2goX2Jhc2VNYXAucmVtb3ZlKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KFYgZWxlbWVudCkpID0+CiAgICAgIHJlbW92ZVdoZXJlKChlbGVtZW50KSA9PiAhdGVzdChlbGVtZW50KSk7CgogIEBkZXByZWNhdGVkCiAgU2V0PFQ+IHJldHlwZTxUPigpID0+IFNldC5jYXN0RnJvbTxWLCBUPih0aGlzKTsKCiAgLy8vIFJldHVybnMgYSBuZXcgc2V0IHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgW3RoaXNdIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGF0IGlzLCB0aGUgcmV0dXJuZWQgc2V0IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBbU2V0XSBhbmQgYWxsCiAgLy8vIHRoZSBlbGVtZW50cyBvZiBbb3RoZXJdLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHNldCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBlcXVhbGl0eSBvcGVyYXRpb24sIHdoaWNoCiAgLy8vIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgZXF1YWxpdHkgb3BlcmF0aW9uIFt0aGlzXSB1c2VzLgogIFNldDxWPiB1bmlvbihTZXQ8Vj4gb3RoZXIpID0+IHRvU2V0KCkuLmFkZEFsbChvdGhlcik7Cn0KgrMATk48ARocASUBJwErBElIQxkBIwE1ASwBPAE0ATkBRgEeATYuAUYpAUgBNwElASsBLgFBARwBNS0BIgE2AUQBDigBIAE2NAQBLAFGASwBRgFNASMBQAE2ASkCAUQEUUsVQRsBPD0BRAZHUUEGT1ASL0ACATsETkoMSzQBRAZOSE5JEgZPSxIrOAEiATABKh4EAToBFhoEASYgBAEsASwBERcEATYwBAEXOxUEAU4BUAE7KQEmJgQBLyoEARY7IwQBLS0BOy0BHiIEATgBNgEsASknBAErIQQBQDIEASshBAEOJAEyATEnBAFROQQBJx8EAScdBAFKAgE5BFBNSTIBRAZMSE5JEgZPShIqNgEgASwBJh8EASoBERYEAUsBRgFKATgBNwEuIgQBKyAEAS4iBAEOIwErIAQBNwE8AgE9BFBLDE04AUQGUEhOSRIGT0wSLDoBJAEWGwQBJiEEARsgBAEaHwQBLgERGAQBOwErIgQBKyIEAQ4lAS8BLQIBOQRPSRkxGQE2AU0GTlBRTyEGT00SLT8BKwEmGAQBIRkEATYfBAEREwQBNgE6AUIBOQEpFgQBJQErASYBIgFJHAFKAS0BSgEOMgEqASkBODUBRwIBNwQ8BENCNgQ2NiMiATUBKgEVICMGJQQBQgEoAS4BJQEwAUUBUQZRPQZQQCo8AU4GUT4GUEBLAU0OHkkBDjIBTwZQHwZQQDgCAT4EUVBQSFEUBE8WBE5RGgRQSjkEQk8cKQEzBk5RLTYZJAEsARUaHQYlBAEiOCoBJgQBKAEuASUBKwEWIRkjFRQIEwQBPgEkAUUBUQZRPQZQQCo8AU4GUT4GUEBLAR03KgEaBAEgOCoBMhoRBAFJASsXJCoIJwQBLjAkNiwBMCkGARsePAgrBAEsMAEOMgFPBlAfBlBAOAIBJHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvd3JhcHBlcnMuZGFydDhzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvZGFydDJqc19pbmZvL2xpYi9zcmMvZ3JhcGguZGFydKjeLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBBIGxpYnJhcnkgdG8gd29yayB3aXRoIGdyYXBocy4gSXQgY29udGFpbnMgYSBjb3VwbGUgYWxnb3JpdGhtcywgaW5jbHVkaW5nCi8vLyBUYXJqYW4ncyBhbGdvcml0aG0gdG8gY29tcHV0ZSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50cyBpbiBhIGdyYXBoIGFuZAovLy8gQ29vcGVyIGV0IGFsJ3MgZG9taW5hdG9yIGFsZ29yaXRobS4KLy8vCi8vLyBQb3J0aW9ucyBvZiB0aGUgY29kZSBpbiB0aGlzIGxpYnJhcnkgd2FzIGFkYXB0ZWQgZnJvbQovLy8gYHBhY2thZ2U6YW5hbHl6ZXIvc3JjL2dlbmVyYXRlZC9jb2xsZWN0aW9uX3V0aWxpdGllcy5kYXJ0YC4KLy8gVE9ETyhzaWdtdW5kKTogbW92ZSB0aGlzIGludG8gYSBzaGFyZWQgcGxhY2UsIGxpa2UgcXVpdmVyPwpsaWJyYXJ5IGRhcnQyanNfaW5mby5zcmMuZ3JhcGg7CgppbXBvcnQgJ2RhcnQ6bWF0aCcgYXMgbWF0aDsKCmFic3RyYWN0IGNsYXNzIEdyYXBoPE4+IHsKICBJdGVyYWJsZTxOPiBnZXQgbm9kZXM7CiAgYm9vbCBnZXQgaXNFbXB0eTsKICBpbnQgZ2V0IG5vZGVDb3VudDsKICBJdGVyYWJsZTxOPiB0YXJnZXRzT2YoTiBzb3VyY2UpOwogIEl0ZXJhYmxlPE4+IHNvdXJjZXNPZihOIHNvdXJjZSk7CgogIC8vLyBSdW4gYSB0b3BvbG9naWNhbCBzb3J0IG9mIHRoZSBncmFwaC4gU2luY2UgdGhlIGdyYXBoIG1heSBjb250YWluIGN5Y2xlcywKICAvLy8gdGhpcyByZXN1bHRzIGluIGEgbGlzdCBvZiBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50cyByYXRoZXIgdGhhbiBhIGxpc3QKICAvLy8gb2Ygbm9kZXMuIFRoZSBub2RlcyBpbiBlYWNoIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIG9ubHkgaGF2ZSBlZGdlcwogIC8vLyB0aGF0IHBvaW50IHRvIG5vZGVzIGluIHRoZSBzYW1lIGNvbXBvbmVudCBvciBlYXJsaWVyIGNvbXBvbmVudHMuCiAgTGlzdDxMaXN0PE4+PiBjb21wdXRlVG9wb2xvZ2ljYWxTb3J0KCkgewogICAgX1NjY0ZpbmRlcjxOPiBmaW5kZXIgPSBuZXcgX1NjY0ZpbmRlcjxOPih0aGlzKTsKICAgIHJldHVybiBmaW5kZXIuY29tcHV0ZVRvcG9sb2dpY2FsU29ydCgpOwogIH0KCiAgLy8vIFdoZXRoZXIgW3NvdXJjZV0gY2FuIHRyYW5zaXRpdmVseSByZWFjaCBbdGFyZ2V0XS4KICBib29sIGNvbnRhaW5zUGF0aChOIHNvdXJjZSwgTiB0YXJnZXQpIHsKICAgIFNldDxOPiBzZWVuID0gbmV3IFNldDxOPigpOwogICAgYm9vbCBoZWxwZXIoTiBub2RlKSB7CiAgICAgIGlmIChpZGVudGljYWwobm9kZSwgdGFyZ2V0KSkgcmV0dXJuIHRydWU7CiAgICAgIGlmICghc2Vlbi5hZGQobm9kZSkpIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRhcmdldHNPZihub2RlKS5hbnkoaGVscGVyKTsKICAgIH0KCiAgICByZXR1cm4gaGVscGVyKHNvdXJjZSk7CiAgfQoKICAvLy8gUmV0dXJucyBhbGwgbm9kZXMgcmVhY2hhYmxlIGZyb20gW3Jvb3RdIGluIHBvc3Qgb3JkZXIuCiAgSXRlcmFibGU8Tj4gcG9zdE9yZGVyKE4gcm9vdCkgc3luYyogewogICAgdmFyIHNlZW4gPSBuZXcgU2V0PE4+KCk7CiAgICBJdGVyYWJsZTxOPiBoZWxwZXIoTiBuKSBzeW5jKiB7CiAgICAgIGlmICghc2Vlbi5hZGQobikpIHJldHVybjsKICAgICAgZm9yICh2YXIgeCBpbiB0YXJnZXRzT2YobikpIHsKICAgICAgICB5aWVsZCogaGVscGVyKHgpOwogICAgICB9CiAgICAgIHlpZWxkIG47CiAgICB9CgogICAgeWllbGQqIGhlbHBlcihyb290KTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIG9mIGFsbCBub2RlcyByZWFjaGFibGUgZnJvbSBbcm9vdF0gaW4gcHJlb3JkZXIuCiAgSXRlcmFibGU8Tj4gcHJlT3JkZXIoTiByb290KSBzeW5jKiB7CiAgICB2YXIgc2VlbiA9IG5ldyBTZXQ8Tj4oKTsKICAgIHZhciBzdGFjayA9IDxOPltyb290XTsKICAgIHdoaWxlIChzdGFjay5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBuZXh0ID0gc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICBpZiAoIXNlZW4uY29udGFpbnMobmV4dCkpIHsKICAgICAgICBzZWVuLmFkZChuZXh0KTsKICAgICAgICB5aWVsZCBuZXh0OwogICAgICAgIHN0YWNrLmFkZEFsbCh0YXJnZXRzT2YobmV4dCkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIGxpc3Qgb2Ygbm9kZXMgdGhhdCBmb3JtIGEgY3ljbGUgY29udGFpbmluZyB0aGUgZ2l2ZW4gbm9kZS4gSWYKICAvLy8gdGhlIG5vZGUgaXMgbm90IHBhcnQgb2YgYSBjeWNsZSBpbiB0aGlzIGdyYXBoLCB0aGVuIGEgbGlzdCBjb250YWluaW5nIG9ubHkKICAvLy8gdGhlIG5vZGUgaXRzZWxmIHdpbGwgYmUgcmV0dXJuZWQuCiAgTGlzdDxOPiBmaW5kQ3ljbGVDb250YWluaW5nKE4gbm9kZSkgewogICAgYXNzZXJ0KG5vZGUgIT0gbnVsbCk7CiAgICBfU2NjRmluZGVyPE4+IGZpbmRlciA9IG5ldyBfU2NjRmluZGVyPE4+KHRoaXMpOwogICAgcmV0dXJuIGZpbmRlci5fY29tcG9uZW50Q29udGFpbmluZyhub2RlKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgZG9taW5hdG9yIHRyZWUgc3RhcnRpbmcgZnJvbSByb290LiBUaGlzIGlzIGEgbmV3IGdyYXBoLCB3aXRoIHRoZQogIC8vLyBzYW1lIG5vZGVzIGFzIHRoaXMgZ3JhcGgsIGJ1dCB3aGVyZSBlZGdlcyBleGlzdCBiZXR3ZWVuIGEgbm9kZSBhbmQgdGhlCiAgLy8vIG5vZGVzIGl0IGltbWVkaWF0ZWx5IGRvbWluYXRlcy4gRm9yIGV4YW1wbGUsIHRoaXMgZ3JhcGg6CiAgLy8vCiAgLy8vICAgICAgIHJvb3QKICAvLy8gICAgICAgLyAgIFwKICAvLy8gICAgICBhICAgICBiCiAgLy8vICAgICAgfCAgICAvIFwKICAvLy8gICAgICBjICAgZCAgIGUKICAvLy8gICAgICAgXCAvIFwgLwogIC8vLyAgICAgICAgZiAgIGcKICAvLy8KICAvLy8gUHJvZHVjZXMgdGhpcyB0cmVlOgogIC8vLwogIC8vLyAgICAgICByb290CiAgLy8vICAgICAgIC98ICBcCiAgLy8vICAgICAgYSB8ICAgYgogIC8vLyAgICAgIHwgfCAgL3xcCiAgLy8vICAgICAgYyB8IGQgfCBlCiAgLy8vICAgICAgICB8ICAgfAogIC8vLyAgICAgICAgZiAgIGcKICAvLy8KICAvLy8gSW50ZXJuYWxseSB3ZSBjb21wdXRlIGRvbWluYXRvcnMgdXNpbmcgKENvb3BlciwgSGFydmV5LCBhbmQgS2VubmVkeSdzCiAgLy8vIGFsZ29yaXRobSlbaHR0cDovL3d3dy5jcy5yaWNlLmVkdS9+a2VpdGgvRU1CRUQvZG9tLnBkZl0uCiAgR3JhcGg8Tj4gZG9taW5hdG9yVHJlZShOIHJvb3QpIHsKICAgIHZhciBpRG9tID0gKG5ldyBfRG9taW5hdG9yRmluZGVyKHRoaXMpLi5ydW4ocm9vdCkpLmltbWVkaWF0ZURvbWluYXRvcnM7CiAgICB2YXIgZ3JhcGggPSBuZXcgRWRnZUxpc3RHcmFwaDxOPigpOwogICAgZm9yIChOIG5vZGUgaW4gaURvbS5rZXlzKSB7CiAgICAgIGlmIChub2RlICE9IHJvb3QpIGdyYXBoLmFkZEVkZ2UoaURvbVtub2RlXSwgbm9kZSk7CiAgICB9CiAgICByZXR1cm4gZ3JhcGg7CiAgfQp9CgpjbGFzcyBFZGdlTGlzdEdyYXBoPE4+IGV4dGVuZHMgR3JhcGg8Tj4gewogIC8vLyBFZGdlcyBpbiB0aGUgZ3JhcGguCiAgTWFwPE4sIFNldDxOPj4gX2VkZ2VzID0gbmV3IE1hcDxOLCBTZXQ8Tj4+KCk7CgogIC8vLyBUaGUgcmV2ZXJzZSBvZiBfZWRnZXMuCiAgTWFwPE4sIFNldDxOPj4gX3JldkVkZ2VzID0gbmV3IE1hcDxOLCBTZXQ8Tj4+KCk7CgogIEl0ZXJhYmxlPE4+IGdldCBub2RlcyA9PiBfZWRnZXMua2V5czsKICBib29sIGdldCBpc0VtcHR5ID0+IF9lZGdlcy5pc0VtcHR5OwogIGludCBnZXQgbm9kZUNvdW50ID0+IF9lZGdlcy5sZW5ndGg7CgogIGZpbmFsIF9lbXB0eSA9IG5ldyBTZXQ8Tj4oKTsKCiAgSXRlcmFibGU8Tj4gdGFyZ2V0c09mKE4gc291cmNlKSA9PiBfZWRnZXNbc291cmNlXSA/PyBfZW1wdHk7CiAgSXRlcmFibGU8Tj4gc291cmNlc09mKE4gc291cmNlKSA9PiBfcmV2RWRnZXNbc291cmNlXSA/PyBfZW1wdHk7CgogIHZvaWQgYWRkRWRnZShOIHNvdXJjZSwgTiB0YXJnZXQpIHsKICAgIGFzc2VydChzb3VyY2UgIT0gbnVsbCk7CiAgICBhc3NlcnQodGFyZ2V0ICE9IG51bGwpOwogICAgYWRkTm9kZShzb3VyY2UpOwogICAgYWRkTm9kZSh0YXJnZXQpOwogICAgX2VkZ2VzW3NvdXJjZV0uYWRkKHRhcmdldCk7CiAgICBfcmV2RWRnZXNbdGFyZ2V0XS5hZGQoc291cmNlKTsKICB9CgogIHZvaWQgYWRkTm9kZShOIG5vZGUpIHsKICAgIGFzc2VydChub2RlICE9IG51bGwpOwogICAgX2VkZ2VzLnB1dElmQWJzZW50KG5vZGUsICgpID0+IG5ldyBTZXQ8Tj4oKSk7CiAgICBfcmV2RWRnZXMucHV0SWZBYnNlbnQobm9kZSwgKCkgPT4gbmV3IFNldDxOPigpKTsKICB9CgogIC8vLyBSZW1vdmUgdGhlIGVkZ2UgZnJvbSB0aGUgZ2l2ZW4gW3NvdXJjZV0gbm9kZSB0byB0aGUgZ2l2ZW4gW3RhcmdldF0gbm9kZS4KICAvLy8gSWYgdGhlcmUgd2FzIG5vIHN1Y2ggZWRnZSB0aGVuIHRoZSBncmFwaCB3aWxsIGJlIHVubW9kaWZpZWQ6IHRoZSBudW1iZXIgb2YKICAvLy8gZWRnZXMgd2lsbCBiZSB0aGUgc2FtZSBhbmQgdGhlIHNldCBvZiBub2RlcyB3aWxsIGJlIHRoZSBzYW1lIChuZWl0aGVyIG5vZGUKICAvLy8gd2lsbCBlaXRoZXIgYmUgYWRkZWQgb3IgcmVtb3ZlZCkuCiAgdm9pZCByZW1vdmVFZGdlKE4gc291cmNlLCBOIHRhcmdldCkgewogICAgX2VkZ2VzW3NvdXJjZV0/LnJlbW92ZSh0YXJnZXQpOwogIH0KCiAgLy8vIFJlbW92ZSB0aGUgZ2l2ZW4gbm9kZSBmcm9tIHRoaXMgZ3JhcGguIEFzIGEgY29uc2VxdWVuY2UsIGFueSBlZGdlcyBmb3IKICAvLy8gd2hpY2ggdGhhdCBub2RlIHdhcyBlaXRoZXIgYSBoZWFkIG9yIGEgdGFpbCB3aWxsIGFsc28gYmUgcmVtb3ZlZC4KICB2b2lkIHJlbW92ZU5vZGUoTiBub2RlKSB7CiAgICBfZWRnZXMucmVtb3ZlKG5vZGUpOwogICAgdmFyIHNvdXJjZXMgPSBfcmV2RWRnZXNbbm9kZV07CiAgICBpZiAoc291cmNlcyA9PSBudWxsKSByZXR1cm47CiAgICBmb3IgKHZhciBzb3VyY2UgaW4gc291cmNlcykgewogICAgICBfZWRnZXNbc291cmNlXS5yZW1vdmUobm9kZSk7CiAgICB9CiAgfQoKICAvLy8gUmVtb3ZlIGFsbCBvZiB0aGUgZ2l2ZW4gbm9kZXMgZnJvbSB0aGlzIGdyYXBoLiBBcyBhIGNvbnNlcXVlbmNlLCBhbnkgZWRnZXMKICAvLy8gZm9yIHdoaWNoIHRob3NlIG5vZGVzIHdlcmUgZWl0aGVyIGEgaGVhZCBvciBhIHRhaWwgd2lsbCBhbHNvIGJlIHJlbW92ZWQuCiAgdm9pZCByZW1vdmVBbGxOb2RlcyhMaXN0PE4+IG5vZGVzKSA9PiBub2Rlcy5mb3JFYWNoKHJlbW92ZU5vZGUpOwp9CgovLy8gVXNlZCBieSB0aGUgW1NjY0ZpbmRlcl0gdG8gbWFpbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGVzIHRoYXQgaGF2ZQovLy8gYmVlbiBleGFtaW5lZC4gVGhlcmUgaXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwZXIgbm9kZSBpbiB0aGUgZ3JhcGguCmNsYXNzIF9Ob2RlSW5mbzxOPiB7CiAgLy8vIERlcHRoIG9mIHRoZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBpbmZvLgogIGludCBpbmRleCA9IDA7CgogIC8vLyBEZXB0aCBvZiB0aGUgZmlyc3Qgbm9kZSBpbiBhIGN5Y2xlLgogIGludCBsb3dsaW5rID0gMDsKCiAgLy8vIFdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZSBpcyBvbiB0aGUgc3RhY2suIFVzZWQgdG8gcmVtb3ZlIHRoZSBuZWVkCiAgLy8vIGZvciBzZWFyY2hpbmcgYSBjb2xsZWN0aW9uIGZvciB0aGUgbm9kZSBlYWNoIHRpbWUgdGhlIHF1ZXN0aW9uIG5lZWRzIHRvIGJlCiAgLy8vIGFza2VkLgogIGJvb2wgb25TdGFjayA9IGZhbHNlOwoKICAvLy8gQ29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZS4KICBMaXN0PE4+IGNvbXBvbmVudDsKCiAgX05vZGVJbmZvKGludCBkZXB0aCkKICAgICAgOiBpbmRleCA9IGRlcHRoLAogICAgICAgIGxvd2xpbmsgPSBkZXB0aCwKICAgICAgICBvblN0YWNrID0gZmFsc2U7Cn0KCi8vLyBJbXBsZW1lbnRzIFRhcmphbidzIEFsZ29yaXRobSBmb3IgZmluZGluZyB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMKLy8vIGluIGEgZ3JhcGguCmNsYXNzIF9TY2NGaW5kZXI8Tj4gewogIC8vLyBUaGUgZ3JhcGggdG8gcHJvY2Vzcy4KICBmaW5hbCBHcmFwaDxOPiBfZ3JhcGg7CgogIC8vLyBUaGUgaW5kZXggdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgZGVwdGggb2Ygbm9kZXMuCiAgaW50IF9pbmRleCA9IDA7CgogIC8vLyBOb2RlcyB0aGF0IGFyZSBiZWluZyB2aXNpdGVkIGluIG9yZGVyIHRvIGlkZW50aWZ5IGNvbXBvbmVudHMuCiAgTGlzdDxOPiBfc3RhY2sgPSBuZXcgTGlzdDxOPigpOwoKICAvLy8gSW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGVhY2ggbm9kZS4KICBNYXA8TiwgX05vZGVJbmZvPE4+PiBfaW5mbyA9IDxOLCBfTm9kZUluZm88Tj4+e307CgogIC8vLyBBbGwgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgZm91bmQsIGluIHRvcG9sb2dpY2FsIHNvcnQgb3JkZXIgKGVhY2gKICAvLy8gbm9kZSBpbiBhIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgb25seSBoYXMgZWRnZXMgdGhhdCBwb2ludCB0byBub2RlcwogIC8vLyBpbiB0aGUgc2FtZSBjb21wb25lbnQgb3IgZWFybGllciBjb21wb25lbnRzKS4KICBMaXN0PExpc3Q8Tj4+IF9hbGxDb21wb25lbnRzID0gbmV3IExpc3Q8TGlzdDxOPj4oKTsKCiAgX1NjY0ZpbmRlcih0aGlzLl9ncmFwaCk7CgogIC8vLyBSZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmcgdGhlIG5vZGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZAogIC8vLyBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gbm9kZS4KICBMaXN0PE4+IF9jb21wb25lbnRDb250YWluaW5nKE4gbm9kZSkgPT4gX3N0cm9uZ0Nvbm5lY3Qobm9kZSkuY29tcG9uZW50OwoKICAvLy8gUnVuIFRhcmphbidzIGFsZ29yaXRobSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBvZiBzdHJvbmdseSBjb25uZWN0ZWQKICAvLy8gY29tcG9uZW50cy4gVGhlIGxpc3QgaXMgaW4gdG9wb2xvZ2ljYWwgc29ydCBvcmRlciAoZWFjaCBub2RlIGluIGEgc3Ryb25nbHkKICAvLy8gY29ubmVjdGVkIGNvbXBvbmVudCBvbmx5IGhhcyBlZGdlcyB0aGF0IHBvaW50IHRvIG5vZGVzIGluIHRoZSBzYW1lCiAgLy8vIGNvbXBvbmVudCBvciBlYXJsaWVyIGNvbXBvbmVudHMpLgogIExpc3Q8TGlzdDxOPj4gY29tcHV0ZVRvcG9sb2dpY2FsU29ydCgpIHsKICAgIGZvciAoTiBub2RlIGluIF9ncmFwaC5ub2RlcykgewogICAgICB2YXIgbm9kZUluZm8gPSBfaW5mb1tub2RlXTsKICAgICAgaWYgKG5vZGVJbmZvID09IG51bGwpIF9zdHJvbmdDb25uZWN0KG5vZGUpOwogICAgfQogICAgcmV0dXJuIF9hbGxDb21wb25lbnRzOwogIH0KCiAgLy8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSB0b3AtbW9zdCBlbGVtZW50IGZyb20gdGhlIHN0YWNrLgogIE4gX3BvcCgpIHsKICAgIE4gbm9kZSA9IF9zdGFjay5yZW1vdmVBdChfc3RhY2subGVuZ3RoIC0gMSk7CiAgICBfaW5mb1tub2RlXS5vblN0YWNrID0gZmFsc2U7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIC8vLyBBZGQgdGhlIGdpdmVuIG5vZGUgdG8gdGhlIHN0YWNrLgogIHZvaWQgX3B1c2goTiBub2RlKSB7CiAgICBfaW5mb1tub2RlXS5vblN0YWNrID0gdHJ1ZTsKICAgIF9zdGFjay5hZGQobm9kZSk7CiAgfQoKICAvLy8gQ29tcHV0ZSB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBub2RlIGFzCiAgLy8vIHdlbGwgYXMgYW55IGNvbXBvbmVudHMgY29udGFpbmluZyBub2RlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB0aGUgZ2l2ZW4KICAvLy8gY29tcG9uZW50LgogIF9Ob2RlSW5mbzxOPiBfc3Ryb25nQ29ubmVjdChOIHYpIHsKICAgIC8vIFNldCB0aGUgZGVwdGggaW5kZXggZm9yIHYgdG8gdGhlIHNtYWxsZXN0IHVudXNlZCBpbmRleAogICAgdmFyIHZJbmZvID0gbmV3IF9Ob2RlSW5mbzxOPihfaW5kZXgrKyk7CiAgICBfaW5mb1t2XSA9IHZJbmZvOwogICAgX3B1c2godik7CgogICAgZm9yIChOIHcgaW4gX2dyYXBoLnRhcmdldHNPZih2KSkgewogICAgICB2YXIgd0luZm8gPSBfaW5mb1t3XTsKICAgICAgaWYgKHdJbmZvID09IG51bGwpIHsKICAgICAgICAvLyBTdWNjZXNzb3IgdyBoYXMgbm90IHlldCBiZWVuIHZpc2l0ZWQ7IHJlY3Vyc2Ugb24gaXQKICAgICAgICB3SW5mbyA9IF9zdHJvbmdDb25uZWN0KHcpOwogICAgICAgIHZJbmZvLmxvd2xpbmsgPSBtYXRoLm1pbih2SW5mby5sb3dsaW5rLCB3SW5mby5sb3dsaW5rKTsKICAgICAgfSBlbHNlIGlmICh3SW5mby5vblN0YWNrKSB7CiAgICAgICAgLy8gU3VjY2Vzc29yIHcgaXMgaW4gc3RhY2sgUyBhbmQgaGVuY2UgaW4gdGhlIGN1cnJlbnQgU0NDCiAgICAgICAgdkluZm8ubG93bGluayA9IG1hdGgubWluKHZJbmZvLmxvd2xpbmssIHdJbmZvLmluZGV4KTsKICAgICAgfQogICAgfQoKICAgIC8vIElmIHYgaXMgYSByb290IG5vZGUsIHBvcCB0aGUgc3RhY2sgYW5kIGdlbmVyYXRlIGFuIFNDQwogICAgaWYgKHZJbmZvLmxvd2xpbmsgPT0gdkluZm8uaW5kZXgpIHsKICAgICAgdmFyIGNvbXBvbmVudCA9IG5ldyBMaXN0PE4+KCk7CiAgICAgIE4gdzsKICAgICAgZG8gewogICAgICAgIHcgPSBfcG9wKCk7CiAgICAgICAgY29tcG9uZW50LmFkZCh3KTsKICAgICAgICBfaW5mb1t3XS5jb21wb25lbnQgPSBjb21wb25lbnQ7CiAgICAgIH0gd2hpbGUgKCFpZGVudGljYWwodywgdikpOwogICAgICBfYWxsQ29tcG9uZW50cy5hZGQoY29tcG9uZW50KTsKICAgIH0KICAgIHJldHVybiB2SW5mbzsKICB9Cn0KCi8vLyBDb21wdXRlcyBkb21pbmF0b3JzIHVzaW5nIChDb29wZXIsIEhhcnZleSwgYW5kIEtlbm5lZHkncwovLy8gYWxnb3JpdGhtKVtodHRwOi8vd3d3LmNzLnJpY2UuZWR1L35rZWl0aC9FTUJFRC9kb20ucGRmXS4KY2xhc3MgX0RvbWluYXRvckZpbmRlcjxOPiB7CiAgZmluYWwgR3JhcGg8Tj4gX2dyYXBoOwogIE1hcDxOLCBOPiBpbW1lZGlhdGVEb21pbmF0b3JzID0ge307CiAgTWFwPE4sIGludD4gcG9zdE9yZGVySWQgPSB7fTsKICBfRG9taW5hdG9yRmluZGVyKHRoaXMuX2dyYXBoKTsKCiAgcnVuKE4gcm9vdCkgewogICAgaW1tZWRpYXRlRG9taW5hdG9yc1tyb290XSA9IHJvb3Q7CiAgICBib29sIGNoYW5nZWQgPSB0cnVlOwogICAgaW50IGkgPSAwOwogICAgdmFyIG5vZGVzSW5Qb3N0T3JkZXIgPSBfZ3JhcGgucG9zdE9yZGVyKHJvb3QpLnRvTGlzdCgpOwogICAgZm9yICh2YXIgbiBpbiBub2Rlc0luUG9zdE9yZGVyKSB7CiAgICAgIHBvc3RPcmRlcklkW25dID0gaSsrOwogICAgfQogICAgdmFyIG5vZGVzSW5SZXZlcnNlZFBvc3RPcmRlciA9IG5vZGVzSW5Qb3N0T3JkZXIucmV2ZXJzZWQ7CiAgICB3aGlsZSAoY2hhbmdlZCkgewogICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgIGZvciAodmFyIG4gaW4gbm9kZXNJblJldmVyc2VkUG9zdE9yZGVyKSB7CiAgICAgICAgaWYgKG4gPT0gcm9vdCkgY29udGludWU7CiAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgICAgTiBpZG9tOwogICAgICAgIGZvciAodmFyIHAgaW4gX2dyYXBoLnNvdXJjZXNPZihuKSkgewogICAgICAgICAgaWYgKGltbWVkaWF0ZURvbWluYXRvcnNbcF0gIT0gbnVsbCkgewogICAgICAgICAgICBpZiAoZmlyc3QpIHsKICAgICAgICAgICAgICBpZG9tID0gcDsKICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlkb20gPSBfaW50ZXJzZWN0KHAsIGlkb20pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChpbW1lZGlhdGVEb21pbmF0b3JzW25dICE9IGlkb20pIHsKICAgICAgICAgIGltbWVkaWF0ZURvbWluYXRvcnNbbl0gPSBpZG9tOwogICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBOIF9pbnRlcnNlY3QoTiBiMSwgTiBiMikgewogICAgdmFyIGZpbmdlcjEgPSBiMTsKICAgIHZhciBmaW5nZXIyID0gYjI7CiAgICB3aGlsZSAoZmluZ2VyMSAhPSBmaW5nZXIyKSB7CiAgICAgIHdoaWxlIChwb3N0T3JkZXJJZFtmaW5nZXIxXSA8IHBvc3RPcmRlcklkW2ZpbmdlcjJdKSB7CiAgICAgICAgZmluZ2VyMSA9IGltbWVkaWF0ZURvbWluYXRvcnNbZmluZ2VyMV07CiAgICAgIH0KICAgICAgd2hpbGUgKHBvc3RPcmRlcklkW2ZpbmdlcjJdIDwgcG9zdE9yZGVySWRbZmluZ2VyMV0pIHsKICAgICAgICBmaW5nZXIyID0gaW1tZWRpYXRlRG9taW5hdG9yc1tmaW5nZXIyXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZpbmdlcjE7CiAgfQp9CoFQAE5OPAFOTygEOkA+IAEcARoZFBUjIwFPUVBHKzQsBAE4KiAaMCkqBgEbBAE9KB0kICQaCA8GARkEAUonHRsfJSIYFCcIBgQBTlEoKBo0LgQBUU0/BhESExQVFBMGGgYREhMUFRMTBkw/I0woIDkGEgQCASoaMAEdMwEoJiYBHwE/QgElHBwVFSAjBAEZGjI1BAFPUVEoKCQEAU1IHBkjISIjBgQBUU9DAgFOTRU0EQEqEwFOUQ0YATYVARcXGRkCAVAQFhwZAT4SAUQiAS00AU9QNDYBGwFRLkoBUVFJKCsjIjIGGwQBPQ0xIREEAScXIBYEAU9QESU+LBYOASccGz8jQCJCPggGAT4oJQsLFBooIiUGEgQCAT09HBkmICEBECYZDzwmHAY+FhcwIRsQLTAZGB0VKg4MCi4pGgoIBgQBHRYWITwwCDwwCAYUBAIBI3BhY2thZ2U6ZGFydDJqc19pbmZvL3NyYy9ncmFwaC5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL25vZGVfdHJhY2VyLmRhcnTAAEYzLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29tcGlsZXIuc3JjLmluZmVycmVyLm5vZGVfdHJhY2VyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVyczsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBTZXRsZXQ7CmltcG9ydCAnYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJ2RlYnVnLmRhcnQnIGFzIGRlYnVnOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwoKLy8gQSBzZXQgb2Ygc2VsZWN0b3JzIHdlIGtub3cgZG8gbm90IGVzY2FwZSB0aGUgZWxlbWVudHMgaW5zaWRlIHRoZQovLyBsaXN0LgpTZXQ8U3RyaW5nPiBkb2VzTm90RXNjYXBlTGlzdFNldCA9IG5ldyBTZXQ8U3RyaW5nPi5mcm9tKGNvbnN0IDxTdHJpbmc+WwogIC8vIEZyb20gT2JqZWN0LgogICc9PScsCiAgJ2hhc2hDb2RlJywKICAndG9TdHJpbmcnLAogICdub1N1Y2hNZXRob2QnLAogICdydW50aW1lVHlwZScsCgogIC8vIEZyb20gSXRlcmFibGUuCiAgJ2lzRW1wdHknLAogICdpc05vdEVtcHR5JywKICAnbGVuZ3RoJywKICAnY29udGFpbnMnLAogICdqb2luJywKCiAgLy8gRnJvbSBMaXN0LgogICdhZGQnLAogICdhZGRBbGwnLAogICdjbGVhcicsCiAgJ2ZpbGxSYW5nZScsCiAgJ2luZGV4T2YnLAogICdpbnNlcnQnLAogICdpbnNlcnRBbGwnLAogICdsYXN0SW5kZXhPZicsCiAgJ3JlbW92ZScsCiAgJ3JlbW92ZVJhbmdlJywKICAncmVwbGFjZVJhbmdlJywKICAnc2V0QWxsJywKICAnc2V0UmFuZ2UnLAogICdzaHVmZmxlJywKICAnW109JywKCiAgLy8gRnJvbSBKU0FycmF5LgogICdjaGVja011dGFibGUnLAogICdjaGVja0dyb3dhYmxlJywKXSk7CgpTZXQ8U3RyaW5nPiBkb2VzTm90RXNjYXBlU2V0U2V0ID0gbmV3IFNldDxTdHJpbmc+LmZyb20oY29uc3QgPFN0cmluZz5bCiAgLy8gRnJvbSBPYmplY3QuCiAgJz09JywKICAnaGFzaENvZGUnLAogICd0b1N0cmluZycsCiAgJ25vU3VjaE1ldGhvZCcsCiAgJ3J1bnRpbWVUeXBlJywKCiAgLy8gRnJvbSBJdGVyYWJsZS4KICAnaXNFbXB0eScsCiAgJ2lzTm90RW1wdHknLAogICdsZW5ndGgnLAogICdjb250YWlucycsCiAgJ2pvaW4nLAoKICAvLyBGcm9tIFNldC4KICAnYWRkJywKICAnYWRkQWxsJywKICAnY2xlYXInLAogICdjb250YWluc0FsbCcsCiAgJ3JlbW92ZScsCiAgJ3JlbW92ZUFsbCcsCiAgJ3JldGFpbkFsbCcsCl0pOwoKU2V0PFN0cmluZz4gZG9lc05vdEVzY2FwZU1hcFNldCA9IG5ldyBTZXQ8U3RyaW5nPi5mcm9tKGNvbnN0IDxTdHJpbmc+WwogIC8vIEZyb20gT2JqZWN0LgogICc9PScsCiAgJ2hhc2hDb2RlJywKICAndG9TdHJpbmcnLAogICdub1N1Y2hNZXRob2QnLAogICdydW50aW1lVHlwZScsCiAgLy8gZnJvbSBNYXAuCiAgJ2lzRW1wdHknLAogICdpc05vdEVtcHR5JywKICAnbGVuZ3RoJywKICAnY2xlYXInLAogICdjb250YWluc0tleScsCiAgJ2NvbnRhaW5zVmFsdWUnLAogICdbXT0nLAogIC8vIFtrZXlzXSBvbmx5IGFsbG93cyBrZXkgdmFsdWVzIHRvIGVzY2FwZSwgd2hpY2ggd2UgZG8gbm90IHRyYWNrLgogICdrZXlzJwpdKTsKCi8vLyBDb21tb24gbG9naWMgdG8gdHJhY2UgYSB2YWx1ZSB0aHJvdWdoIHRoZSB0eXBlIGluZmVyZW5jZSBncmFwaCBub2Rlcy4KYWJzdHJhY3QgY2xhc3MgVHJhY2VyVmlzaXRvciBpbXBsZW1lbnRzIFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgewogIGZpbmFsIFR5cGVJbmZvcm1hdGlvbiB0cmFjZWRUeXBlOwogIGZpbmFsIEluZmVycmVyRW5naW5lIGluZmVycmVyOwoKICBzdGF0aWMgY29uc3QgaW50IE1BWF9BTkFMWVNJU19DT1VOVCA9CiAgICAgIGNvbnN0IGludC5mcm9tRW52aXJvbm1lbnQoJ2RhcnQyanMudHJhY2luZy5saW1pdCcsIGRlZmF1bHRWYWx1ZTogMzIpOwogIGZpbmFsIFNldGxldDxNZW1iZXJFbnRpdHk+IGFuYWx5emVkRWxlbWVudHMgPSBuZXcgU2V0bGV0PE1lbWJlckVudGl0eT4oKTsKCiAgVHJhY2VyVmlzaXRvcih0aGlzLnRyYWNlZFR5cGUsIHRoaXMuaW5mZXJyZXIpOwoKICAvLy8gV29yayBsaXN0IHRoYXQgZ2V0cyBwb3B1bGF0ZWQgd2l0aCBbVHlwZUluZm9ybWF0aW9uXSB0aGF0IGNvdWxkCiAgLy8vIGNvbnRhaW4gdGhlIGNvbnRhaW5lci4KICBmaW5hbCBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gd29ya0xpc3QgPSA8VHlwZUluZm9ybWF0aW9uPltdOwoKICAvLy8gV29yayBsaXN0IG9mIGxpc3RzIHRvIGFuYWx5emUgYWZ0ZXIgYW5hbHl6aW5nIHRoZSB1c2VycyBvZiBhCiAgLy8vIFtUeXBlSW5mb3JtYXRpb25dLiBXZSBrbm93IHRoZSBbdHJhY2VkVHlwZV0gaGFzIGJlZW4gc3RvcmVkIGluIHRoZXNlCiAgLy8vIGxpc3RzIGFuZCB3ZSBtdXN0IGNoZWNrIGhvdyBpdCBlc2NhcGVzIGZyb20gdGhlc2UgbGlzdHMuCiAgZmluYWwgTGlzdDxMaXN0VHlwZUluZm9ybWF0aW9uPiBsaXN0c1RvQW5hbHl6ZSA9IDxMaXN0VHlwZUluZm9ybWF0aW9uPltdOwoKICAvLy8gV29yayBsaXN0IG9mIHNldHMgdG8gYW5hbHl6ZSBhZnRlciBhbmFseXppbmcgdGhlIHVzZXJzIG9mIGEKICAvLy8gW1R5cGVJbmZvcm1hdGlvbl0uIFdlIGtub3cgdGhlIFt0cmFjZWRUeXBlXSBoYXMgYmVlbiBzdG9yZWQgaW4gdGhlc2Ugc2V0cwogIC8vLyBhbmQgd2UgbXVzdCBjaGVjayBob3cgaXQgZXNjYXBlcyBmcm9tIHRoZXNlIHNldHMuCiAgZmluYWwgTGlzdDxTZXRUeXBlSW5mb3JtYXRpb24+IHNldHNUb0FuYWx5emUgPSA8U2V0VHlwZUluZm9ybWF0aW9uPltdOwoKICAvLy8gV29yayBsaXN0IG9mIG1hcHMgdG8gYW5hbHl6ZSBhZnRlciBhbmFseXppbmcgdGhlIHVzZXJzIG9mIGEKICAvLy8gW1R5cGVJbmZvcm1hdGlvbl0uIFdlIGtub3cgdGhlIFt0cmFjZWRUeXBlXSBoYXMgYmVlbiBzdG9yZWQgaW4gdGhlc2UKICAvLy8gbWFwcyBhbmQgd2UgbXVzdCBjaGVjayBob3cgaXQgZXNjYXBlcyBmcm9tIHRoZXNlIG1hcHMuCiAgZmluYWwgTGlzdDxNYXBUeXBlSW5mb3JtYXRpb24+IG1hcHNUb0FuYWx5emUgPSA8TWFwVHlwZUluZm9ybWF0aW9uPltdOwoKICBmaW5hbCBTZXRsZXQ8VHlwZUluZm9ybWF0aW9uPiBmbG93c0ludG8gPSBuZXcgU2V0bGV0PFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgLy8gVGhlIGN1cnJlbnQgW1R5cGVJbmZvcm1hdGlvbl0gaW4gdGhlIGFuYWx5c2lzLgogIFR5cGVJbmZvcm1hdGlvbiBjdXJyZW50VXNlcjsKICBib29sIGNvbnRpbnVlQW5hbHl6aW5nID0gdHJ1ZTsKCiAgdm9pZCBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaWYgKGZsb3dzSW50by5jb250YWlucyhpbmZvKSkgcmV0dXJuOwogICAgZmxvd3NJbnRvLmFkZChpbmZvKTsKICAgIHdvcmtMaXN0LmFkZChpbmZvKTsKICB9CgogIGJvb2wgX3dvdWxkQmVUb29NYW55VXNlcnMoU2V0IHVzZXJzKSB7CiAgICBpbnQgc2VlblNvRmFyID0gYW5hbHl6ZWRFbGVtZW50cy5sZW5ndGg7CiAgICBpZiAoc2VlblNvRmFyICsgdXNlcnMubGVuZ3RoIDw9IE1BWF9BTkFMWVNJU19DT1VOVCkgcmV0dXJuIGZhbHNlOwogICAgaW50IGFjdHVhbFdvcmsgPSAwOwogICAgZm9yIChUeXBlSW5mb3JtYXRpb24gdXNlciBpbiB1c2VycykgewogICAgICBpZiAoIWFuYWx5emVkRWxlbWVudHMuY29udGFpbnModXNlci5vd25lcikpIHsKICAgICAgICBhY3R1YWxXb3JrKys7CiAgICAgICAgaWYgKGFjdHVhbFdvcmsgPiBNQVhfQU5BTFlTSVNfQ09VTlQgLSBzZWVuU29GYXIpIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIGFuYWx5emUoKSB7CiAgICAvLyBDb2xsZWN0IHRoZSBbVHlwZUluZm9ybWF0aW9uXSB3aGVyZSB0aGUgbGlzdCBjYW4gZmxvdyBpbiwKICAgIC8vIGFzIHdlbGwgYXMgdGhlIG9wZXJhdGlvbnMgZG9uZSBvbiBhbGwgdGhlc2UgW1R5cGVJbmZvcm1hdGlvbl1zLgogICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24odHJhY2VkVHlwZSk7CiAgICB3aGlsZSAoIXdvcmtMaXN0LmlzRW1wdHkpIHsKICAgICAgY3VycmVudFVzZXIgPSB3b3JrTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGlmIChfd291bGRCZVRvb01hbnlVc2VycyhjdXJyZW50VXNlci51c2VycykpIHsKICAgICAgICBiYWlsb3V0KCdUb28gbWFueSB1c2VycycpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIGluZm8gaW4gY3VycmVudFVzZXIudXNlcnMpIHsKICAgICAgICBhbmFseXplZEVsZW1lbnRzLmFkZChpbmZvLm93bmVyKTsKICAgICAgICBpbmZvLmFjY2VwdCh0aGlzKTsKICAgICAgfQogICAgICB3aGlsZSAoIWxpc3RzVG9BbmFseXplLmlzRW1wdHkpIHsKICAgICAgICBhbmFseXplU3RvcmVkSW50b0xpc3QobGlzdHNUb0FuYWx5emUucmVtb3ZlTGFzdCgpKTsKICAgICAgfQogICAgICB3aGlsZSAoc2V0c1RvQW5hbHl6ZS5pc05vdEVtcHR5KSB7CiAgICAgICAgYW5hbHl6ZVN0b3JlZEludG9TZXQoc2V0c1RvQW5hbHl6ZS5yZW1vdmVMYXN0KCkpOwogICAgICB9CiAgICAgIHdoaWxlICghbWFwc1RvQW5hbHl6ZS5pc0VtcHR5KSB7CiAgICAgICAgYW5hbHl6ZVN0b3JlZEludG9NYXAobWFwc1RvQW5hbHl6ZS5yZW1vdmVMYXN0KCkpOwogICAgICB9CiAgICAgIGlmICghY29udGludWVBbmFseXppbmcpIGJyZWFrOwogICAgfQogIH0KCiAgdm9pZCBiYWlsb3V0KFN0cmluZyByZWFzb24pIHsKICAgIGlmIChkZWJ1Zy5WRVJCT1NFKSB7CiAgICAgIHByaW50KCdCYWlsaW5nIG91dCBvbiAkdHJhY2VkVHlwZSBiZWNhdXNlOiAkcmVhc29uJyk7CiAgICB9CiAgICBjb250aW51ZUFuYWx5emluZyA9IGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEF3YWl0VHlwZUluZm9ybWF0aW9uKEF3YWl0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGJhaWxvdXQoIlBhc3NlZCB0aHJvdWdoIGF3YWl0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0WWllbGRUeXBlSW5mb3JtYXRpb24oWWllbGRUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgLy8gVE9ETygyOTM0NCk6IFRoZSBlbmNsb3Npbmcgc3luYyovYXN5bmMvYXN5bmMqIG1ldGhvZCBjb3VsZCBoYXZlIGEKICAgIC8vIHRyYWNhYmxlIFR5cGVJbmZvcm1hdGlvbiBmb3IgdGhlIEl0ZXJhYmxlIC8gRnV0dXJlIC8gU3RyZWFtIHdpdGggYW4KICAgIC8vIGVsZW1lbnQgVHlwZUluZm9ybWF0aW9uLiBUaGVuIFlpZWxkVHlwZUluZm9ybWF0aW9uIGNvdWxkIGNvbm5lY3QgdGhlCiAgICAvLyBzb3VyY2UgdHlwZSBpbmZvcm1hdGlvbiB0byB0aGUgdHJhY2FibGUgZWxlbWVudC4KICAgIGJhaWxvdXQoIlBhc3NlZCB0aHJvdWdoIHlpZWxkIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFycm93VHlwZUluZm9ybWF0aW9uKE5hcnJvd1R5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uKFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uKAogICAgICBFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uKEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbihLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAvLyBXZSBkbyBub3QgdHJhY2sgdGhlIHVzZSBvZiBrZXlzIGZyb20gYSBtYXAsIHNvIHdlIGhhdmUgdG8gYmFpbC4KICAgIGJhaWxvdXQoJ1VzZWQgYXMga2V5IGluIE1hcCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24oVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0VHlwZUluZm9ybWF0aW9uKExpc3RUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgbGlzdHNUb0FuYWx5emUuYWRkKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldFR5cGVJbmZvcm1hdGlvbihTZXRUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc2V0c1RvQW5hbHl6ZS5hZGQoaW5mbyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwVHlwZUluZm9ybWF0aW9uKE1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBtYXBzVG9BbmFseXplLmFkZChpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbihDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbihTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uIGluZm8pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbihCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2xvc3VyZVR5cGVJbmZvcm1hdGlvbihDbG9zdXJlVHlwZUluZm9ybWF0aW9uIGluZm8pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIE1lbWJlckVudGl0eSBjYWxsZWQgPSBpbmZvLmNhbGxlZEVsZW1lbnQ7CiAgICBUeXBlSW5mb3JtYXRpb24gaW5mZXJyZWQgPSBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihjYWxsZWQpOwogICAgaWYgKGluZmVycmVkID09IGN1cnJlbnRVc2VyKSB7CiAgICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogICAgfQogIH0KCiAgdm9pZCBhbmFseXplU3RvcmVkSW50b0xpc3QoTGlzdFR5cGVJbmZvcm1hdGlvbiBsaXN0KSB7CiAgICBpbmZlcnJlci5hbmFseXplTGlzdEFuZEVucXVldWUobGlzdCk7CiAgICBpZiAobGlzdC5iYWlsZWRPdXQpIHsKICAgICAgYmFpbG91dCgnU3RvcmVkIGluIGEgbGlzdCB0aGF0IGJhaWxlZCBvdXQnKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3QuZmxvd3NJbnRvLmZvckVhY2goKFR5cGVJbmZvcm1hdGlvbiBmbG93KSB7CiAgICAgICAgZmxvdy51c2Vycy5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gdXNlcikgewogICAgICAgICAgaWYgKHVzZXIgaXMgRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgICAgIGlmICh1c2VyLnJlY2VpdmVyICE9IGZsb3cpIHJldHVybjsKICAgICAgICAgICAgaWYgKGluZmVycmVyLnJldHVybnNMaXN0RWxlbWVudFR5cGVTZXQuY29udGFpbnModXNlci5zZWxlY3RvcikpIHsKICAgICAgICAgICAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbih1c2VyKTsKICAgICAgICAgICAgfSBlbHNlIGlmICghZG9lc05vdEVzY2FwZUxpc3RTZXQuY29udGFpbnModXNlci5zZWxlY3Rvci5uYW1lKSkgewogICAgICAgICAgICAgIGJhaWxvdXQoJ0VzY2FwZSBmcm9tIGEgbGlzdCB2aWEgWyR7dXNlci5zZWxlY3Rvci5uYW1lfV0nKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KICB9CgogIHZvaWQgYW5hbHl6ZVN0b3JlZEludG9TZXQoU2V0VHlwZUluZm9ybWF0aW9uIHNldCkgewogICAgaW5mZXJyZXIuYW5hbHl6ZVNldEFuZEVucXVldWUoc2V0KTsKICAgIGlmIChzZXQuYmFpbGVkT3V0KSB7CiAgICAgIGJhaWxvdXQoJ1N0b3JlZCBpbiBhIHNldCB0aGF0IGJhaWxlZCBvdXQnKTsKICAgIH0gZWxzZSB7CiAgICAgIHNldC5mbG93c0ludG8uZm9yRWFjaCgoVHlwZUluZm9ybWF0aW9uIGZsb3cpIHsKICAgICAgICBmbG93LnVzZXJzLmZvckVhY2goKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7CiAgICAgICAgICBpZiAodXNlciBpcyBEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICAgICAgaWYgKHVzZXIucmVjZWl2ZXIgIT0gZmxvdykgcmV0dXJuOwogICAgICAgICAgICBpZiAodXNlci5zZWxlY3Rvci5pc0luZGV4KSB7CiAgICAgICAgICAgICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24odXNlcik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRvZXNOb3RFc2NhcGVTZXRTZXQuY29udGFpbnModXNlci5zZWxlY3Rvci5uYW1lKSkgewogICAgICAgICAgICAgIGJhaWxvdXQoJ0VzY2FwZSBmcm9tIGEgc2V0IHZpYSBbJHt1c2VyLnNlbGVjdG9yLm5hbWV9XScpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgdm9pZCBhbmFseXplU3RvcmVkSW50b01hcChNYXBUeXBlSW5mb3JtYXRpb24gbWFwKSB7CiAgICBpbmZlcnJlci5hbmFseXplTWFwQW5kRW5xdWV1ZShtYXApOwogICAgaWYgKG1hcC5iYWlsZWRPdXQpIHsKICAgICAgYmFpbG91dCgnU3RvcmVkIGluIGEgbWFwIHRoYXQgYmFpbGVkIG91dCcpOwogICAgfSBlbHNlIHsKICAgICAgbWFwLmZsb3dzSW50by5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gZmxvdykgewogICAgICAgIGZsb3cudXNlcnMuZm9yRWFjaCgoVHlwZUluZm9ybWF0aW9uIHVzZXIpIHsKICAgICAgICAgIGlmICh1c2VyIGlzIER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbikgewogICAgICAgICAgICBpZiAodXNlci5yZWNlaXZlciAhPSBmbG93KSByZXR1cm47CiAgICAgICAgICAgIGlmICh1c2VyLnNlbGVjdG9yLmlzSW5kZXgpIHsKICAgICAgICAgICAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbih1c2VyKTsKICAgICAgICAgICAgfSBlbHNlIGlmICghZG9lc05vdEVzY2FwZU1hcFNldC5jb250YWlucyh1c2VyLnNlbGVjdG9yLm5hbWUpKSB7CiAgICAgICAgICAgICAgYmFpbG91dCgnRXNjYXBlIGZyb20gYSBtYXAgdmlhIFske3VzZXIuc2VsZWN0b3IubmFtZX1dJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLy8gQ2hlY2tzIHdoZXRoZXIgdGhpcyBpcyBhIGNhbGwgdG8gYSBsaXN0IGFkZGluZyBtZXRob2QuIFRoZSBkZWZpbml0aW9uIG9mCiAgLy8vIHdoYXQgbGlzdCBhZGRpbmcgbWVhbnMgaGFzIHRvIHN0YXkgaW4gc3luYyB3aXRoCiAgLy8vIFtpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZF0uCiAgYm9vbCBtaWdodEFkZFRvQ29udGFpbmVyKER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpZiAoaW5mby5hcmd1bWVudHMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGluZm8uYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHJldHVybiBmYWxzZTsKICAgIFN0cmluZyBzZWxlY3Rvck5hbWUgPSBpbmZvLnNlbGVjdG9yLm5hbWU7CiAgICBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gYXJndW1lbnRzID0gaW5mby5hcmd1bWVudHMucG9zaXRpb25hbDsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIChzZWxlY3Rvck5hbWUgPT0gJ2FkZCcgJiYgY3VycmVudFVzZXIgPT0gYXJndW1lbnRzWzBdKTsKICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7CiAgICAgIHJldHVybiAoc2VsZWN0b3JOYW1lID09ICdpbnNlcnQnICYmIGN1cnJlbnRVc2VyID09IGFyZ3VtZW50c1sxXSk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIGlzSW5kZXhTZXRBcmd1bWVudChEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbywgaW50IGluZGV4KSB7CiAgICBTdHJpbmcgc2VsZWN0b3JOYW1lID0gaW5mby5zZWxlY3Rvci5uYW1lOwogICAgaWYgKHNlbGVjdG9yTmFtZSAhPSAnW109JykgcmV0dXJuIGZhbHNlOwogICAgYXNzZXJ0KGluZm8uYXJndW1lbnRzLmxlbmd0aCA9PSAyKTsKICAgIExpc3Q8VHlwZUluZm9ybWF0aW9uPiBhcmd1bWVudHMgPSBpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsOwogICAgcmV0dXJuIGN1cnJlbnRVc2VyID09IGFyZ3VtZW50c1tpbmRleF07CiAgfQoKICAvLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGNhbGwgc2l0ZSBmbG93cyB0aGUgY3VycmVudFVzZXIgdG8gdGhlIGtleSBhcmd1bWVudCBvZgogIC8vLyBhbiBpbmRleGluZyBzZXR0ZXIuIFRoaXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aAogIC8vLyBbaXNQYXJhbWV0ZXJPZk1hcEFkZGluZ01ldGhvZF0uCiAgYm9vbCBpc0luZGV4U2V0S2V5KER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICByZXR1cm4gaXNJbmRleFNldEFyZ3VtZW50KGluZm8sIDApOwogIH0KCiAgLy8vIENoZWNrcyB3aGV0aGVyIHRoZSBjYWxsIHNpdGUgZmxvd3MgdGhlIGN1cnJlbnRVc2VyIHRvIHRoZSB2YWx1ZSBhcmd1bWVudAogIC8vLyBvZiBhbiBpbmRleGluZyBzZXR0ZXIuIFRoaXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aAogIC8vLyBbaXNQYXJhbWV0ZXJPZkxpc3RBZGRpbmdNZXRob2RdIGFuZCBbaXNQYXJhbWV0ZXJPZk1hcEFkZGluZ01ldGhvZF0uCiAgYm9vbCBpc0luZGV4U2V0VmFsdWUoRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHJldHVybiBpc0luZGV4U2V0QXJndW1lbnQoaW5mbywgMSk7CiAgfQoKICB2b2lkIGJhaWxvdXRJZlJlYWNoZXMoYm9vbCBwcmVkaWNhdGUoUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGUpKSB7CiAgICBmb3IgKHZhciB1c2VyIGluIGN1cnJlbnRVc2VyLnVzZXJzKSB7CiAgICAgIGlmICh1c2VyIGlzIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbikgewogICAgICAgIGlmIChwcmVkaWNhdGUodXNlcikpIHsKICAgICAgICAgIGJhaWxvdXQoJ1JlYWNoZWQgc3VwcHJlc3NlZCBwYXJhbWV0ZXIgd2l0aG91dCBwcmVjaXNlIHJlY2VpdmVyJyk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICB2b2lkIGFkZHNUb0NvbnRhaW5lcihBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgICAgT2JqZWN0IGFsbG9jYXRpb25Ob2RlID0KICAgICAgICAgIGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbk5vZGUobWFzayk7CiAgICAgIGlmIChhbGxvY2F0aW9uTm9kZSAhPSBudWxsKSB7CiAgICAgICAgTGlzdFR5cGVJbmZvcm1hdGlvbiBsaXN0ID0KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuYWxsb2NhdGVkTGlzdHNbYWxsb2NhdGlvbk5vZGVdOwogICAgICAgIGxpc3RzVG9BbmFseXplLmFkZChsaXN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaGUgW21hc2tdIGlzIGEgdW5pb24gb2YgdHdvIGNvbnRhaW5lcnMsIGFuZCB3ZSBsb3NlIHRyYWNrIG9mIHdoZXJlCiAgICAgICAgLy8gdGhlc2UgY29udGFpbmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgYmFpbG91dCgnU3RvcmVkIGluIHRvbyBtYW55IGNvbnRhaW5lcnMnKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYWRkc1RvTWFwVmFsdWUoQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSA9CiAgICAgICAgICBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25Ob2RlKG1hc2spOwogICAgICBpZiAoYWxsb2NhdGlvbk5vZGUgIT0gbnVsbCkgewogICAgICAgIE1hcFR5cGVJbmZvcm1hdGlvbiBtYXAgPSBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZWRNYXBzW2FsbG9jYXRpb25Ob2RlXTsKICAgICAgICBtYXBzVG9BbmFseXplLmFkZChtYXApOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoZSBbbWFza10gaXMgYSB1bmlvbi4gU2VlIGNvbW1lbnQgZm9yIFttYXNrXSBhYm92ZS4KICAgICAgICBiYWlsb3V0KCdTdG9yZWQgaW4gdG9vIG1hbnkgbWFwcycpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBhZGRzVG9NYXBLZXkoQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICAgIC8vIFdlIGRvIG5vdCB0cmFjayB0aGUgdXNlIG9mIGtleXMgZnJvbSBhIG1hcCwgc28gd2UgaGF2ZSB0byBiYWlsLgogICAgICBiYWlsb3V0KCdVc2VkIGFzIGtleSBpbiBNYXAnKTsKICAgIH0KCiAgICAvLyAiYVsuLi5dID0geCIgY291bGQgYmUgYSBsaXN0IChjb250YWluZXIpIG9yIG1hcCBhc3NpZ25lbW50LgogICAgaWYgKGlzSW5kZXhTZXRWYWx1ZShpbmZvKSkgewogICAgICB2YXIgcmVjZWl2ZXJUeXBlID0gaW5mby5yZWNlaXZlci50eXBlOwogICAgICBpZiAoaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcihyZWNlaXZlclR5cGUpKSB7CiAgICAgICAgYWRkc1RvQ29udGFpbmVyKHJlY2VpdmVyVHlwZSk7CiAgICAgIH0gZWxzZSBpZiAoaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5pc01hcChyZWNlaXZlclR5cGUpKSB7CiAgICAgICAgYWRkc1RvTWFwVmFsdWUocmVjZWl2ZXJUeXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBOb3QgYSBjb250YWluZXIgb3IgbWFwLCBzbyB0aGUgdGFyZ2V0cyBjb3VsZCBiZSBhbnkgbWV0aG9kcy4gVGhlcmUKICAgICAgICAvLyBhcmUgZWRnZXMgZnJvbSB0aGUgW2N1cnJlbnRVc2VyXSB0byB0aGUgcGFyYW1ldGVycyBvZiB0aGUgdGFyZ2V0cywgc28KICAgICAgICAvLyB0cmFjaW5nIHdpbGwgY29udGludWUgaW50byB0aGUgdGFyZ2V0cy4gIFRyYWNpbmcgc3RvcHMgYXQgcGFyYW1ldGVycwogICAgICAgIC8vIHRoYXQgbWF0Y2ggdGhlIHRhcmdldHMgY29ycmVzcG9uZGluZyB0byB0aGUgcmVjZWl2ZXJUeXBlcyBhYm92ZSAodG8KICAgICAgICAvLyBwcmV2ZW50IGltcHJlY2lzZSByZXN1bHRzIGZyb20gdHJhY2luZyB0aGUgaW1wbGVtZW50YXRpb24pLCBzbyB3ZQogICAgICAgIC8vIG5lZWQgY29tcGVuc2F0ZSBpZiBvbmUgb2YgdGhlIHRhcmdldHMgaXMgaW4gdGhlIHRhcmdldCBzZXQuIElmIHRoZXJlCiAgICAgICAgLy8gaXMgYW4gZWRnZSB0byBhIHBhcmFtZXRlciBtYXRjaGluZyBbaXNQYXJhbWV0ZXJPZkxpc3RBZGRpbmdNZXRob2RdIG9yCiAgICAgICAgLy8gW2lzUGFyYW1ldGVyT2ZNYXBBZGRpbmdNZXRob2RdIHRoZW4gdGhlIHRyYWNlZCB2YWx1ZSBpcyBiZWluZyBzdG9yZWQKICAgICAgICAvLyBpbnRvIGFuIHVudHJhY2VkIGxpc3Qgb3IgbWFwLgoKICAgICAgICAvLyBUT0RPKHNyYSk6IEl0IHdvdWxkIGJlIG1vcmUgcHJlY2lzZSB0byBzcGVjaWZpY2FsbHkgbWF0Y2ggdGhlIGB2YWx1ZScKICAgICAgICAvLyBwYXJhbWV0ZXJzIG9mICJvcGVyYXRvciBbXT0iLgogICAgICAgIGJhaWxvdXRJZlJlYWNoZXMoaXNQYXJhbWV0ZXJPZkxpc3RBZGRpbmdNZXRob2QpOwogICAgICAgIGJhaWxvdXRJZlJlYWNoZXMoaXNQYXJhbWV0ZXJPZk1hcEFkZGluZ01ldGhvZCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDb3VsZCBiZTogIG1beF0gPSAuLi47CiAgICBpZiAoaXNJbmRleFNldEtleShpbmZvKSkgewogICAgICB2YXIgcmVjZWl2ZXJUeXBlID0gaW5mby5yZWNlaXZlci50eXBlOwogICAgICBpZiAoaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5pc01hcChyZWNlaXZlclR5cGUpKSB7CiAgICAgICAgYWRkc1RvTWFwS2V5KHJlY2VpdmVyVHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmFpbG91dElmUmVhY2hlcyhpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZCk7CiAgICAgICAgYmFpbG91dElmUmVhY2hlcyhpc1BhcmFtZXRlck9mTWFwQWRkaW5nTWV0aG9kKTsKICAgICAgfQogICAgfQoKICAgIGlmIChtaWdodEFkZFRvQ29udGFpbmVyKGluZm8pKSB7CiAgICAgIHZhciByZWNlaXZlclR5cGUgPSBpbmZvLnJlY2VpdmVyLnR5cGU7CiAgICAgIGlmIChpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmlzQ29udGFpbmVyKHJlY2VpdmVyVHlwZSkpIHsKICAgICAgICBhZGRzVG9Db250YWluZXIocmVjZWl2ZXJUeXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBOb3QgYSBjb250YWluZXIsIHNlZSBub3RlIGFib3ZlLgogICAgICAgIGJhaWxvdXRJZlJlYWNoZXMoaXNQYXJhbWV0ZXJPZkxpc3RBZGRpbmdNZXRob2QpOwogICAgICB9CiAgICB9CgogICAgaWYgKGluZm8udGFyZ2V0c0luY2x1ZGVDb21wbGV4Tm9TdWNoTWV0aG9kKGluZmVycmVyKSAmJgogICAgICAgIGluZm8uYXJndW1lbnRzICE9IG51bGwgJiYKICAgICAgICBpbmZvLmFyZ3VtZW50cy5jb250YWlucyhjdXJyZW50VXNlcikpIHsKICAgICAgYmFpbG91dCgnUGFzc2VkIHRvIG5vU3VjaE1ldGhvZCcpOwogICAgfQoKICAgIEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gaW5mZXJyZWRUYXJnZXRUeXBlcyA9CiAgICAgICAgaW5mby5jb25jcmV0ZVRhcmdldHMubWFwKChNZW1iZXJFbnRpdHkgZW50aXR5KSB7CiAgICAgIHJldHVybiBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbnRpdHkpOwogICAgfSk7CiAgICBpZiAoaW5mZXJyZWRUYXJnZXRUeXBlcy5hbnkoKHVzZXIpID0+IHVzZXIgPT0gY3VycmVudFVzZXIpKSB7CiAgICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogICAgfQogIH0KCiAgLy8vIENoZWNrIHdoZXRoZXIgZWxlbWVudCBpcyB0aGUgcGFyYW1ldGVyIG9mIGEgbGlzdCBhZGRpbmcgbWV0aG9kLgogIC8vLyBUaGUgZGVmaW5pdGlvbiBvZiB3aGF0IGEgbGlzdCBhZGRpbmcgbWV0aG9kIGlzIGhhcyB0byBzdGF5IGluIHN5bmMgd2l0aAogIC8vLyBbbWlnaHRBZGRUb0NvbnRhaW5lcl0uCiAgYm9vbCBpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZChQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gcGFyYW1ldGVySW5mbykgewogICAgaWYgKCFwYXJhbWV0ZXJJbmZvLmlzUmVndWxhclBhcmFtZXRlcikgcmV0dXJuIGZhbHNlOwogICAgaWYgKHBhcmFtZXRlckluZm8ubWV0aG9kLmVuY2xvc2luZ0NsYXNzICE9CiAgICAgICAgaW5mZXJyZXIuY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIFN0cmluZyBuYW1lID0gcGFyYW1ldGVySW5mby5tZXRob2QubmFtZTsKICAgIHJldHVybiAobmFtZSA9PSAnW109JykgfHwgKG5hbWUgPT0gJ2FkZCcpIHx8IChuYW1lID09ICdpbnNlcnQnKTsKICB9CgogIC8vLyBDaGVjayB3aGV0aGVyIGVsZW1lbnQgaXMgdGhlIHBhcmFtZXRlciBvZiBhIGxpc3QgYWRkaW5nIG1ldGhvZC4KICAvLy8gVGhlIGRlZmluaXRpb24gb2Ygd2hhdCBhIGxpc3QgYWRkaW5nIG1ldGhvZCBpcyBoYXMgdG8gc3RheSBpbiBzeW5jIHdpdGgKICAvLy8gW2lzSW5kZXhTZXRLZXldIGFuZCBbaXNJbmRleFNldFZhbHVlXS4KICBib29sIGlzUGFyYW1ldGVyT2ZNYXBBZGRpbmdNZXRob2QoUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIHBhcmFtZXRlckluZm8pIHsKICAgIGlmICghcGFyYW1ldGVySW5mby5pc1JlZ3VsYXJQYXJhbWV0ZXIpIHJldHVybiBmYWxzZTsKICAgIGlmIChwYXJhbWV0ZXJJbmZvLm1ldGhvZC5lbmNsb3NpbmdDbGFzcyAhPQogICAgICAgIGluZmVycmVyLmNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxDbGFzcykgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9IHBhcmFtZXRlckluZm8ubWV0aG9kLm5hbWU7CiAgICByZXR1cm4gKG5hbWUgPT0gJ1tdPScpOwogIH0KCiAgYm9vbCBpc0Nsb3N1cmUoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmICghZWxlbWVudC5pc0Z1bmN0aW9uKSByZXR1cm4gZmFsc2U7CgogICAgLy8vIENyZWF0aW5nIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIFtGdW5jdGlvbl0gYWxzbwogICAgLy8vIGNsb3N1cml6ZXMgdGhlIGNvcnJlc3BvbmRpbmcgW2NhbGxdIG1lbWJlci4gV2UgZG8gbm90IGN1cnJlbnRseQogICAgLy8vIHRyYWNrIHRoZXNlLCB0aHVzIHRoZSBjaGVjayBmb3IgW2lzQ2xvc3VyaXplZF0gb24gc3VjaCBhIG1ldGhvZCB3aWxsCiAgICAvLy8gcmV0dXJuIGZhbHNlLiBJbnN0ZWFkIHdlIGNhdGNoIHRoYXQgY2FzZSBoZXJlIGZvciBub3cuCiAgICAvLyBUT0RPKGhlcmh1dCk6IEhhbmRsZSBjcmVhdGlvbiBvZiBjbG9zdXJlcyBmcm9tIGluc3RhbmNlcyBvZiBGdW5jdGlvbi4KICAgIGlmIChlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIgJiYgZWxlbWVudC5uYW1lID09IElkZW50aWZpZXJzLmNhbGwpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgcmV0dXJuIGNscyAhPSBudWxsICYmIGNscy5pc0Nsb3N1cmU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWVtYmVyVHlwZUluZm9ybWF0aW9uKE1lbWJlclR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpZiAoaW5mby5pc0Nsb3N1cml6ZWQpIHsKICAgICAgYmFpbG91dCgnUmV0dXJuZWQgZnJvbSBhIGNsb3N1cml6ZWQgbWV0aG9kJyk7CiAgICB9CiAgICBpZiAoaXNDbG9zdXJlKGluZm8ubWVtYmVyKSkgewogICAgICBiYWlsb3V0KCdSZXR1cm5lZCBmcm9tIGEgY2xvc3VyZScpOwogICAgfQogICAgaWYgKGluZm8ubWVtYmVyLmlzRmllbGQgJiYKICAgICAgICAhaW5mZXJyZXIuY2FuRmllbGRCZVVzZWRGb3JHbG9iYWxPcHRpbWl6YXRpb25zKGluZm8ubWVtYmVyKSkgewogICAgICBiYWlsb3V0KCdFc2NhcGUgdG8gY29kZSB0aGF0IGhhcyBzcGVjaWFsIGJhY2tlbmQgdHJlYXRtZW50Jyk7CiAgICB9CiAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24oUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChpbmZlcnJlci5jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKGluZm8ubWV0aG9kKSkgewogICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBuYXRpdmUgbWV0aG9kJyk7CiAgICB9CiAgICBpZiAoIWluZmVycmVyCiAgICAgICAgLmNhbkZ1bmN0aW9uUGFyYW1ldGVyc0JlVXNlZEZvckdsb2JhbE9wdGltaXphdGlvbnMoaW5mby5tZXRob2QpKSB7CiAgICAgIGJhaWxvdXQoJ0VzY2FwZSB0byBjb2RlIHRoYXQgaGFzIHNwZWNpYWwgYmFja2VuZCB0cmVhdG1lbnQnKTsKICAgIH0KICAgIGlmIChpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZChpbmZvKSB8fAogICAgICAgIGlzUGFyYW1ldGVyT2ZNYXBBZGRpbmdNZXRob2QoaW5mbykpIHsKICAgICAgLy8gVGhlc2UgZWxlbWVudHMgYXJlIGJlaW5nIGhhbmRsZWQgaW4KICAgICAgLy8gW3Zpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uXS4KICAgICAgcmV0dXJuOwogICAgfQogICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgfQp9CoIoAE5OPAErATAkKCUeHyABRAlIEggODhIRARQNEAwOCgEQCQwLDw0MDxEMERIMDg0JARMSEwQBRxIIDg4SEQEUDRAMDgoBDwkMCxEMDw8EAUcSCA4OEhEPDRAMCxETCUUJBAFKQSQhAShMTAExAUYdPgFDSz9MAUJQOEkBQks9SQFLATQfIQE3KhkYBAEpLUYYKjQWRggGEgQBE0FHKSArNSMPCDgqGwgoPAgpOggnOgglBgQBIBk8Bh8EAQw+JQQBDD5JS0w4JQQBDEAjBAEMSCMEAQwvMCMEAQxMIwQBDERHIwQBDEgjBAEMPB4EAQw6HQQBDDodBAEMRQEMTwEMSwEMQwEMLC4BDEsuTyMlBgQBOSoaMw02NDgvTi1NSQ4MDAoGBAE2KBkyDTU0OC8pLUxIDgwMCgYEATYoGTINNTQ4LyktTEgODAwKBgQBTzYnQi43LkEhRShIBhIEAUwuLShBLAQBUDkmPCgEAU88Sj4oBAFGKi4fTBEKCAYEAQwsLS8eQCQjOyIPTz8yCAYBLh5AJE8gD0AsCAYBLEklBgFDIS1EJ0UmD05RUE9NUFFQKQFRKTk4CAYBHh8tPiQPOTgIBgElLUQnDyw5CAYBPCIwKQYBNDk9CEIlBgQBRk4dTzkvPBQGLUUEAUZOLU45Lz8UBi0cBAEpKwFISE0/TUgTBi4pBAEMQB00BiIqBh9HRAYjBAEMRkcsBhJLRAYvLi0wDgYjBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL25vZGVfdHJhY2VyLmRhcnRBc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9qc19pbnRlcm9wX2FuYWx5c2lzLmRhcnSIoy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQW5hbHlzaXMgdG8gZGV0ZXJtaW5lIGhvdyB0byBnZW5lcmF0ZSBjb2RlIGZvciB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3AuCmxpYnJhcnkgY29tcGlsZXIuc3JjLmpzX2JhY2tlbmQuanNfaW50ZXJvcF9hbmFseXNpczsKCmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnQnIHNob3cgU2VsZWN0b3JDb25zdHJhaW50czsKaW1wb3J0ICduYW1lci5kYXJ0JzsKaW1wb3J0ICduYXRpdmVfZGF0YS5kYXJ0JzsKCmpzQXN0LlN0YXRlbWVudCBidWlsZEpzSW50ZXJvcEJvb3RzdHJhcCgKICAgIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQsIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGEsIE5hbWVyIG5hbWVyKSB7CiAgaWYgKCFuYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BVc2VkKSByZXR1cm4gbnVsbDsKICBMaXN0PGpzQXN0LlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxqc0FzdC5TdGF0ZW1lbnQ+W107CiAgY29kZWdlbldvcmxkLmZvckVhY2hJbnZva2VkTmFtZSgKICAgICAgKFN0cmluZyBuYW1lLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycykgewogICAgc2VsZWN0b3JzLmZvckVhY2goKFNlbGVjdG9yIHNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzKSB7CiAgICAgIGlmIChzZWxlY3Rvci5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgLy8gVE9ETyhqYWNvYnIpOiBzdXBwb3J0IG5hbWVkIGFyZ3VtZW50cy4KICAgICAgICBpZiAoc2VsZWN0b3IubmFtZWRBcmd1bWVudENvdW50ID4gMCkgcmV0dXJuOwogICAgICAgIGludCBhcmd1bWVudENvdW50ID0gc2VsZWN0b3IuYXJndW1lbnRDb3VudDsKICAgICAgICBTdHJpbmcgY2FuZGlkYXRlUGFyYW1ldGVyTmFtZXMgPQogICAgICAgICAgICAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7CiAgICAgICAgTGlzdDxTdHJpbmc+IHBhcmFtZXRlcnMgPSBuZXcgTGlzdDxTdHJpbmc+LmdlbmVyYXRlKAogICAgICAgICAgICBhcmd1bWVudENvdW50LCAoaSkgPT4gY2FuZGlkYXRlUGFyYW1ldGVyTmFtZXNbaV0pOwoKICAgICAgICBqc0FzdC5OYW1lIG5hbWUgPSBuYW1lci5pbnZvY2F0aW9uTmFtZShzZWxlY3Rvcik7CiAgICAgICAgc3RhdGVtZW50cy5hZGQoanMuc3RhdGVtZW50KAogICAgICAgICAgICAnRnVuY3Rpb24ucHJvdG90eXBlLiMgPSBmdW5jdGlvbigjKSB7IHJldHVybiB0aGlzKCMpIH0nLAogICAgICAgICAgICBbbmFtZSwgcGFyYW1ldGVycywgcGFyYW1ldGVyc10pKTsKICAgICAgfQogICAgfSk7CiAgfSk7CiAgcmV0dXJuIG5ldyBqc0FzdC5CbG9jayhzdGF0ZW1lbnRzKTsKfQoKRnVuY3Rpb25UeXBlIGJ1aWxkSnNGdW5jdGlvblR5cGUoKSB7CiAgLy8gVE9ETyhqYWNvYnIpOiBjb25zaWRlciB1c2luZyBjb2RlZ2VuV29ybGRCdWlsZGVyLmlzQ2hlY2tzIHRvIGRldGVybWluZSB0aGUKICAvLyByYW5nZSBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IG5lZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IEphdmFTY3JpcHQKICAvLyBmdW5jdGlvbiB0eXBlcy4KICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZSgKICAgICAgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKDE2LCBjb25zdCBEeW5hbWljVHlwZSgpKSwKICAgICAgY29uc3QgPFN0cmluZz5bXSwKICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICBjb25zdCA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W10pOwp9CjgATk48AU01ASEhIDIxQhUbASlPNTojRE0kMjU0KUQ9PwE6JUUuCAgGJgIBJVBLFRsbGjoYGicCAThwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2pzX2ludGVyb3BfYW5hbHlzaXMuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9yZXNvbHV0aW9uL3JlZ2lzdHJ5LmRhcnSWii8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMucmVzb2x1dGlvbi5yZWdpc3RyeTsKCmltcG9ydCAnLi4vY29tbW9uL3Jlc29sdXRpb24uZGFydCcgc2hvdyBSZXNvbHV0aW9uSW1wYWN0OwppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JyBzaG93IENsYXNzRW50aXR5LCBNZW1iZXJFbnRpdHk7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcgc2hvdyBXb3JsZEltcGFjdCwgV29ybGRJbXBhY3RCdWlsZGVySW1wbDsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCcgc2hvdyBFbnVtU2V0OwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IFNldGxldDsKCmNsYXNzIFJlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIgZXh0ZW5kcyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsCiAgICBpbXBsZW1lbnRzIFJlc29sdXRpb25JbXBhY3QgewogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckVudGl0eSBtZW1iZXI7CiAgRW51bVNldDxGZWF0dXJlPiBfZmVhdHVyZXM7CiAgU2V0bGV0PE1hcExpdGVyYWxVc2U+IF9tYXBMaXRlcmFsczsKICBTZXRsZXQ8U2V0TGl0ZXJhbFVzZT4gX3NldExpdGVyYWxzOwogIFNldGxldDxMaXN0TGl0ZXJhbFVzZT4gX2xpc3RMaXRlcmFsczsKICBTZXRsZXQ8U3RyaW5nPiBfY29uc3RTeW1ib2xOYW1lczsKICBTZXRsZXQ8Q29uc3RhbnRFeHByZXNzaW9uPiBfY29uc3RhbnRMaXRlcmFsczsKICBTZXRsZXQ8ZHluYW1pYz4gX25hdGl2ZURhdGE7CiAgU2V0bGV0PENsYXNzRW50aXR5PiBfc2VlbkNsYXNzZXM7CiAgU2V0PFJ1bnRpbWVUeXBlVXNlPiBfcnVudGltZVR5cGVVc2VzOwogIFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4gX2dlbmVyaWNJbnN0YW50aWF0aW9uczsKCiAgUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlcih0aGlzLm1lbWJlcik7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gZmFsc2U7CgogIHZvaWQgcmVnaXN0ZXJNYXBMaXRlcmFsKE1hcExpdGVyYWxVc2UgbWFwTGl0ZXJhbFVzZSkgewogICAgYXNzZXJ0KG1hcExpdGVyYWxVc2UgIT0gbnVsbCk7CiAgICBfbWFwTGl0ZXJhbHMgPz89IG5ldyBTZXRsZXQ8TWFwTGl0ZXJhbFVzZT4oKTsKICAgIF9tYXBMaXRlcmFscy5hZGQobWFwTGl0ZXJhbFVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNYXBMaXRlcmFsVXNlPiBnZXQgbWFwTGl0ZXJhbHMgewogICAgcmV0dXJuIF9tYXBMaXRlcmFscyAhPSBudWxsID8gX21hcExpdGVyYWxzIDogY29uc3QgPE1hcExpdGVyYWxVc2U+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVyU2V0TGl0ZXJhbChTZXRMaXRlcmFsVXNlIHNldExpdGVyYWxVc2UpIHsKICAgIGFzc2VydChzZXRMaXRlcmFsVXNlICE9IG51bGwpOwogICAgX3NldExpdGVyYWxzID8/PSBuZXcgU2V0bGV0PFNldExpdGVyYWxVc2U+KCk7CiAgICBfc2V0TGl0ZXJhbHMuYWRkKHNldExpdGVyYWxVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U2V0TGl0ZXJhbFVzZT4gZ2V0IHNldExpdGVyYWxzID0+CiAgICAgIF9zZXRMaXRlcmFscyA/PyBjb25zdCA8U2V0TGl0ZXJhbFVzZT5bXTsKCiAgdm9pZCByZWdpc3Rlckxpc3RMaXRlcmFsKExpc3RMaXRlcmFsVXNlIGxpc3RMaXRlcmFsVXNlKSB7CiAgICBhc3NlcnQobGlzdExpdGVyYWxVc2UgIT0gbnVsbCk7CiAgICBfbGlzdExpdGVyYWxzID8/PSBuZXcgU2V0bGV0PExpc3RMaXRlcmFsVXNlPigpOwogICAgX2xpc3RMaXRlcmFscy5hZGQobGlzdExpdGVyYWxVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TGlzdExpdGVyYWxVc2U+IGdldCBsaXN0TGl0ZXJhbHMgewogICAgcmV0dXJuIF9saXN0TGl0ZXJhbHMgIT0gbnVsbCA/IF9saXN0TGl0ZXJhbHMgOiBjb25zdCA8TGlzdExpdGVyYWxVc2U+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVyUnVudGltZVR5cGVVc2UoUnVudGltZVR5cGVVc2UgcnVudGltZVR5cGVVc2UpIHsKICAgIGFzc2VydChydW50aW1lVHlwZVVzZSAhPSBudWxsKTsKICAgIF9ydW50aW1lVHlwZVVzZXMgPz89IG5ldyBTZXRsZXQ8UnVudGltZVR5cGVVc2U+KCk7CiAgICBfcnVudGltZVR5cGVVc2VzLmFkZChydW50aW1lVHlwZVVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxSdW50aW1lVHlwZVVzZT4gZ2V0IHJ1bnRpbWVUeXBlVXNlcyB7CiAgICByZXR1cm4gX3J1bnRpbWVUeXBlVXNlcyAhPSBudWxsCiAgICAgICAgPyBfcnVudGltZVR5cGVVc2VzCiAgICAgICAgOiBjb25zdCA8UnVudGltZVR5cGVVc2U+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29uc3RTeW1ib2xOYW1lKFN0cmluZyBuYW1lKSB7CiAgICBfY29uc3RTeW1ib2xOYW1lcyA/Pz0gbmV3IFNldGxldDxTdHJpbmc+KCk7CiAgICBfY29uc3RTeW1ib2xOYW1lcy5hZGQobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBjb25zdFN5bWJvbE5hbWVzIHsKICAgIHJldHVybiBfY29uc3RTeW1ib2xOYW1lcyAhPSBudWxsID8gX2NvbnN0U3ltYm9sTmFtZXMgOiBjb25zdCA8U3RyaW5nPltdOwogIH0KCiAgdm9pZCByZWdpc3RlckZlYXR1cmUoRmVhdHVyZSBmZWF0dXJlKSB7CiAgICBfZmVhdHVyZXMgPz89IG5ldyBFbnVtU2V0PEZlYXR1cmU+KCk7CiAgICBfZmVhdHVyZXMuYWRkKGZlYXR1cmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RmVhdHVyZT4gZ2V0IGZlYXR1cmVzIHsKICAgIHJldHVybiBfZmVhdHVyZXMgIT0gbnVsbAogICAgICAgID8gX2ZlYXR1cmVzLml0ZXJhYmxlKEZlYXR1cmUudmFsdWVzKQogICAgICAgIDogY29uc3QgPEZlYXR1cmU+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRMaXRlcmFsKENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCkgewogICAgX2NvbnN0YW50TGl0ZXJhbHMgPz89IG5ldyBTZXRsZXQ8Q29uc3RhbnRFeHByZXNzaW9uPigpOwogICAgX2NvbnN0YW50TGl0ZXJhbHMuYWRkKGNvbnN0YW50KTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50RXhwcmVzc2lvbj4gZ2V0IGNvbnN0YW50TGl0ZXJhbHMgewogICAgcmV0dXJuIF9jb25zdGFudExpdGVyYWxzICE9IG51bGwKICAgICAgICA/IF9jb25zdGFudExpdGVyYWxzCiAgICAgICAgOiBjb25zdCA8Q29uc3RhbnRFeHByZXNzaW9uPltdOwogIH0KCiAgdm9pZCByZWdpc3Rlck5hdGl2ZURhdGEoZHluYW1pYyBuYXRpdmVEYXRhKSB7CiAgICBhc3NlcnQobmF0aXZlRGF0YSAhPSBudWxsKTsKICAgIF9uYXRpdmVEYXRhID8/PSBuZXcgU2V0bGV0PGR5bmFtaWM+KCk7CiAgICBfbmF0aXZlRGF0YS5hZGQobmF0aXZlRGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxkeW5hbWljPiBnZXQgbmF0aXZlRGF0YSB7CiAgICByZXR1cm4gX25hdGl2ZURhdGEgIT0gbnVsbCA/IF9uYXRpdmVEYXRhIDogY29uc3QgPGR5bmFtaWM+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVyU2VlbkNsYXNzKENsYXNzRW50aXR5IHNlZW5DbGFzcykgewogICAgX3NlZW5DbGFzc2VzID8/PSBuZXcgU2V0bGV0PENsYXNzRW50aXR5PigpOwogICAgX3NlZW5DbGFzc2VzLmFkZChzZWVuQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBzZWVuQ2xhc3NlcyB7CiAgICByZXR1cm4gX3NlZW5DbGFzc2VzID8/IGNvbnN0IDxDbGFzc0VudGl0eT5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24pIHsKICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMgPz89IG5ldyBTZXQ8R2VuZXJpY0luc3RhbnRpYXRpb24+KCk7CiAgICBfZ2VuZXJpY0luc3RhbnRpYXRpb25zLmFkZChpbnN0YW50aWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEdlbmVyaWNJbnN0YW50aWF0aW9uPiBnZXQgZ2VuZXJpY0luc3RhbnRpYXRpb25zIHsKICAgIHJldHVybiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zID8/IGNvbnN0IDxHZW5lcmljSW5zdGFudGlhdGlvbj5bXTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyKCRtZW1iZXIpJyk7CiAgICBXb3JsZEltcGFjdC5wcmludE9uKHNiLCB0aGlzKTsKICAgIGlmIChfZmVhdHVyZXMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4gZmVhdHVyZXM6Jyk7CiAgICAgIGZvciAoRmVhdHVyZSBmZWF0dXJlIGluIF9mZWF0dXJlcy5pdGVyYWJsZShGZWF0dXJlLnZhbHVlcykpIHsKICAgICAgICBzYi53cml0ZSgnXG4gICRmZWF0dXJlJyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfbWFwTGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4gbWFwLWxpdGVyYWxzOicpOwogICAgICBmb3IgKE1hcExpdGVyYWxVc2UgdXNlIGluIF9tYXBMaXRlcmFscykgewogICAgICAgIHNiLndyaXRlKCdcbiAgJHVzZScpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3NldExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuIHNldC1saXRlcmFsczonKTsKICAgICAgZm9yIChTZXRMaXRlcmFsVXNlIHVzZSBpbiBfc2V0TGl0ZXJhbHMpIHsKICAgICAgICBzYi53cml0ZSgnXG4gICR1c2UnKTsKICAgICAgfQogICAgfQogICAgaWYgKF9saXN0TGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4gbGlzdC1saXRlcmFsczonKTsKICAgICAgZm9yIChMaXN0TGl0ZXJhbFVzZSB1c2UgaW4gX2xpc3RMaXRlcmFscykgewogICAgICAgIHNiLndyaXRlKCdcbiAgJHVzZScpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2NvbnN0YW50TGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4gY29uc3QtbGl0ZXJhbHM6Jyk7CiAgICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50IGluIF9jb25zdGFudExpdGVyYWxzKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuICAke2NvbnN0YW50LnRvRGFydFRleHQoKX0nKTsKICAgICAgfQogICAgfQogICAgaWYgKF9jb25zdFN5bWJvbE5hbWVzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuIGNvbnN0LXN5bWJvbC1uYW1lczogJF9jb25zdFN5bWJvbE5hbWVzJyk7CiAgICB9CiAgICBpZiAoX25hdGl2ZURhdGEgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4gbmF0aXZlLWRhdGE6Jyk7CiAgICAgIGZvciAodmFyIGRhdGEgaW4gX25hdGl2ZURhdGEpIHsKICAgICAgICBzYi53cml0ZSgnXG4gICRkYXRhJyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZ2VuZXJpY0luc3RhbnRpYXRpb25zICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuIGluc3RhbnRpYXRpb25zOicpOwogICAgICBmb3IgKHZhciBkYXRhIGluIF9nZW5lcmljSW5zdGFudGlhdGlvbnMpIHsKICAgICAgICBzYi53cml0ZSgnXG4gICRkYXRhJyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQqAxwBOTjwBJQE6KEMjUSwoAUIiDB0eJiYoJDAfJCg0AS0BDB0BOSMyJQQBDCxKBAE5IzIlBAEMLS8BPCQ0JwQBDC5NBAE/JDcqBAEMMSQbJAQBLjAhBAEMKk0EASoqHAQBDCMdLR0EAT48JQQBDDYlHCgEATAgKyEEAQwlQgQBMjAhBAEMKjIEAUNALwQBDD1FBAEMFio3Ix0gRCIIBiAkMB4IBiAkMB4IBiElMh4IBiUmPzIIBiU9Bh8jJh8IBiomMR8IBhoEAgEtcGFja2FnZTpjb21waWxlci9zcmMvcmVzb2x1dGlvbi9yZWdpc3RyeS5kYXJ0NHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy90ZXN0aW5nL2ZlYXR1cmVzLmRhcnSkmi8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2lkX3Rlc3RpbmcuZGFydCc7CgovLy8gVXRpbGl0eSBjbGFzcyBmb3IgYW5ub3RhdGVkIHRlc3RpbmcgcmVwcmVzZW50aW5nIGEgc2V0IG9mIGZlYXR1cmVzLgpjbGFzcyBGZWF0dXJlcyB7CiAgTWFwPFN0cmluZywgT2JqZWN0PiBfZmVhdHVyZXMgPSB7fTsKICBTZXQ8U3RyaW5nPiBfdW5zb3J0ZWQgPSBuZXcgU2V0PFN0cmluZz4oKTsKCiAgLy8vIE1hcmsgdGhlIGZlYXR1cmUgW2tleV0gYXMgZXhpc3RpbmcuIElmIFt2YWx1ZV0gaXMgcHJvdmlkZWQsIHRoZSBmZWF0dXJlCiAgLy8vIFtrZXldIGlzIHNldCB0byBoYXZlIHRoaXMgdmFsdWUuCiAgdm9pZCBhZGQoU3RyaW5nIGtleSwge3ZhciB2YWx1ZTogJyd9KSB7CiAgICBfZmVhdHVyZXNba2V5XSA9IHZhbHVlLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gQWRkIFt2YWx1ZV0gYXMgYW4gZWxlbWVudCBvZiB0aGUgbGlzdCB2YWx1ZXMgb2YgZmVhdHVyZSBba2V5XS4KICB2b2lkIGFkZEVsZW1lbnQoU3RyaW5nIGtleSwgW3ZhciB2YWx1ZV0pIHsKICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gX2ZlYXR1cmVzLnB1dElmQWJzZW50KGtleSwgKCkgPT4gPFN0cmluZz5bXSk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICBsaXN0LmFkZCh2YWx1ZS50b1N0cmluZygpKTsKICAgIH0KICB9CgogIC8vLyBNYXJrcyBsaXN0IHZhbHVlcyBvZiBba2V5XSBhcyB1bnNvcnRlZC4gVGhpcyBwcmV2ZW50cyB0aGUgW2dldFRleHRdCiAgLy8vIHJlcHJlc2VudGF0aW9uIGZyb20gYXV0b21hdGljYWxseSBzb3J0aW5nIHRoZSB2YWx1ZXMuCiAgdm9pZCBtYXJrQXNVbnNvcnRlZChTdHJpbmcga2V5KSB7CiAgICBfdW5zb3J0ZWQuYWRkKGtleSk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgZmVhdHVyZSBba2V5XSBleGlzdHMuCiAgYm9vbCBjb250YWluc0tleShTdHJpbmcga2V5KSB7CiAgICByZXR1cm4gX2ZlYXR1cmVzLmNvbnRhaW5zS2V5KGtleSk7CiAgfQoKICAvLy8gU2V0IHRoZSBmZWF0dXJlIFtrZXldIHRvIGV4aXN0IHdpdGggdGhlIFt2YWx1ZV0uCiAgdm9pZCBvcGVyYXRvciBbXT0oU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7CiAgICBfZmVhdHVyZXNba2V5XSA9IHZhbHVlOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHZhbHVlIHNldCBmb3IgZmVhdHVyZSBba2V5XS4KICBPYmplY3Qgb3BlcmF0b3IgW10oU3RyaW5nIGtleSkgPT4gX2ZlYXR1cmVzW2tleV07CgogIC8vLyBSZW1vdmVzIHRoZSB2YWx1ZSBzZXQgZm9yIGZlYXR1cmUgW2tleV0uIFJldHVybnMgdGhlIGV4aXN0aW5nIHZhbHVlLgogIE9iamVjdCByZW1vdmUoU3RyaW5nIGtleSkgPT4gX2ZlYXR1cmVzLnJlbW92ZShrZXkpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBmZWF0dXJlIHNldCBpcyBlbXB0eS4KICBib29sIGdldCBpc0VtcHR5ID0+IF9mZWF0dXJlcy5pc0VtcHR5OwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBmZWF0dXJlIHNldCBpcyBub24tZW1wdHkuCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfZmVhdHVyZXMuaXNOb3RFbXB0eTsKCiAgLy8vIENhbGwgW2ZdIGZvciBlYWNoIGZlYXR1cmUgaW4gdGhpcyBmZWF0dXJlIHNldCB3aXRoIGl0cyBjb3JyZXNwb25kaW5nCiAgLy8vIHZhbHVlLgogIHZvaWQgZm9yRWFjaCh2b2lkIEZ1bmN0aW9uKFN0cmluZywgT2JqZWN0KSBmKSB7CiAgICBfZmVhdHVyZXMuZm9yRWFjaChmKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIGZlYXR1cmVzIGluIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgc29ydGVkCiAgLy8vIGJ5IGZlYXR1cmUgbmFtZXMuCiAgU3RyaW5nIGdldFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gX2ZlYXR1cmVzLmtleXMudG9MaXN0KCkuLnNvcnQoKSkgewogICAgICBkeW5hbWljIHZhbHVlID0gX2ZlYXR1cmVzW25hbWVdOwogICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZShuYW1lKTsKICAgICAgICBpZiAodmFsdWUgaXMgTGlzdDxTdHJpbmc+KSB7CiAgICAgICAgICBpZiAoX3Vuc29ydGVkLmNvbnRhaW5zKG5hbWUpKSB7CiAgICAgICAgICAgIHZhbHVlID0gJ1ske3ZhbHVlLmpvaW4oJywnKX1dJzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbHVlID0gJ1skeyh2YWx1ZS4uc29ydCgpKS5qb2luKCcsJyl9XSc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSAhPSAnJykgewogICAgICAgICAgc2Iud3JpdGUoJz0nKTsKICAgICAgICAgIHNiLndyaXRlKHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0ZlYXR1cmVzKCR7Z2V0VGV4dCgpfSknOwoKICAvLy8gQ3JlYXRlcyBhIFtGZWF0dXJlc10gb2JqZWN0IGJ5IHBhcnNlIHRoZSBbdGV4dF0gZW5jb2RpbmcuCiAgLy8vCiAgLy8vIFNpbmdsZSBmZWF0dXJlcyB3aWxsIGJlIHBhcnNlZCBhcyBzdHJpbmdzIGFuZCBsaXN0IGZlYXR1cmVzIChmZWF0dXJlcwogIC8vLyBlbmNvZGVkIGluIGBbLi4uXWAgd2lsbCBiZSBwYXJzZWQgYXMgbGlzdHMgb2Ygc3RyaW5ncy4KICBzdGF0aWMgRmVhdHVyZXMgZnJvbVRleHQoU3RyaW5nIHRleHQpIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBpZiAodGV4dCA9PSBudWxsKSByZXR1cm4gZmVhdHVyZXM7CiAgICBpbnQgaW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGgpIHsKICAgICAgaW50IGVxUG9zID0gdGV4dC5pbmRleE9mKCc9JywgaW5kZXgpOwogICAgICBpbnQgY29tbWFQb3MgPSB0ZXh0LmluZGV4T2YoJywnLCBpbmRleCk7CiAgICAgIFN0cmluZyBuYW1lOwogICAgICBib29sIGhhc1ZhbHVlID0gZmFsc2U7CiAgICAgIGlmIChlcVBvcyAhPSAtMSAmJiBjb21tYVBvcyAhPSAtMSkgewogICAgICAgIGlmIChlcVBvcyA8IGNvbW1hUG9zKSB7CiAgICAgICAgICBuYW1lID0gdGV4dC5zdWJzdHJpbmcoaW5kZXgsIGVxUG9zKTsKICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTsKICAgICAgICAgIGluZGV4ID0gZXFQb3MgKyAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBuYW1lID0gdGV4dC5zdWJzdHJpbmcoaW5kZXgsIGNvbW1hUG9zKTsKICAgICAgICAgIGluZGV4ID0gY29tbWFQb3MgKyAxOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlcVBvcyAhPSAtMSkgewogICAgICAgIG5hbWUgPSB0ZXh0LnN1YnN0cmluZyhpbmRleCwgZXFQb3MpOwogICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTsKICAgICAgICBpbmRleCA9IGVxUG9zICsgMTsKICAgICAgfSBlbHNlIGlmIChjb21tYVBvcyAhPSAtMSkgewogICAgICAgIG5hbWUgPSB0ZXh0LnN1YnN0cmluZyhpbmRleCwgY29tbWFQb3MpOwogICAgICAgIGluZGV4ID0gY29tbWFQb3MgKyAxOwogICAgICB9IGVsc2UgewogICAgICAgIG5hbWUgPSB0ZXh0LnN1YnN0cmluZyhpbmRleCk7CiAgICAgICAgaW5kZXggPSB0ZXh0Lmxlbmd0aDsKICAgICAgfQogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBjb25zdCBNYXA8U3RyaW5nLCBTdHJpbmc+IGRlbGltaXRlcnMgPSBjb25zdCB7CiAgICAgICAgICAnWyc6ICddJywKICAgICAgICAgICd7JzogJ30nLAogICAgICAgICAgJygnOiAnKScsCiAgICAgICAgICAnPCc6ICc+JwogICAgICAgIH07CiAgICAgICAgTGlzdDxTdHJpbmc+IGVuZERlbGltaXRlcnMgPSA8U3RyaW5nPltdOwogICAgICAgIGJvb2wgaXNMaXN0ID0gaW5kZXggPCB0ZXh0Lmxlbmd0aCAmJiB0ZXh0LnN0YXJ0c1dpdGgoJ1snLCBpbmRleCk7CiAgICAgICAgaWYgKGlzTGlzdCkgewogICAgICAgICAgZmVhdHVyZXMuYWRkRWxlbWVudChuYW1lKTsKICAgICAgICAgIGVuZERlbGltaXRlcnMuYWRkKCddJyk7CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICBpbnQgdmFsdWVTdGFydCA9IGluZGV4OwogICAgICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoKSB7CiAgICAgICAgICBTdHJpbmcgY2hhciA9IHRleHQuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDEpOwogICAgICAgICAgaWYgKGVuZERlbGltaXRlcnMuaXNOb3RFbXB0eSAmJiBlbmREZWxpbWl0ZXJzLmxhc3QgPT0gY2hhcikgewogICAgICAgICAgICBlbmREZWxpbWl0ZXJzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIFN0cmluZyBlbmREZWxpbWl0ZXIgPSBkZWxpbWl0ZXJzW2NoYXJdOwogICAgICAgICAgICBpZiAoZW5kRGVsaW1pdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICBlbmREZWxpbWl0ZXJzLmFkZChlbmREZWxpbWl0ZXIpOwogICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSAnLCcpIHsKICAgICAgICAgICAgICBpZiAoZW5kRGVsaW1pdGVycy5pc0VtcHR5KSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVuZERlbGltaXRlcnMubGVuZ3RoID09IDEgJiYgaXNMaXN0KSB7CiAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSB0ZXh0LnN1YnN0cmluZyh2YWx1ZVN0YXJ0LCBpbmRleCk7CiAgICAgICAgICAgICAgICBmZWF0dXJlcy5hZGRFbGVtZW50KG5hbWUsIHZhbHVlKTsKICAgICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICAgICAgICB2YWx1ZVN0YXJ0ID0gaW5kZXg7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGlzTGlzdCkgewogICAgICAgICAgU3RyaW5nIHZhbHVlID0gdGV4dC5zdWJzdHJpbmcodmFsdWVTdGFydCwgaW5kZXggLSAxKTsKICAgICAgICAgIGlmICh2YWx1ZS5pc05vdEVtcHR5KSB7CiAgICAgICAgICAgIGZlYXR1cmVzLmFkZEVsZW1lbnQobmFtZSwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBTdHJpbmcgdmFsdWUgPSB0ZXh0LnN1YnN0cmluZyh2YWx1ZVN0YXJ0LCBpbmRleCk7CiAgICAgICAgICBmZWF0dXJlcy5hZGQobmFtZSwgdmFsdWU6IHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5kZXgrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICBmZWF0dXJlcy5hZGQobmFtZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmZWF0dXJlczsKICB9Cn0KCmNsYXNzIEZlYXR1cmVzRGF0YUludGVycHJldGVyIGltcGxlbWVudHMgRGF0YUludGVycHJldGVyPEZlYXR1cmVzPiB7CiAgY29uc3QgRmVhdHVyZXNEYXRhSW50ZXJwcmV0ZXIoKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGlzQXNFeHBlY3RlZChGZWF0dXJlcyBhY3R1YWxGZWF0dXJlcywgU3RyaW5nIGV4cGVjdGVkRGF0YSkgewogICAgaWYgKGV4cGVjdGVkRGF0YSA9PSAnKicpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkRGF0YSA9PSAnJykgewogICAgICByZXR1cm4gYWN0dWFsRmVhdHVyZXMuaXNOb3RFbXB0eSA/ICJFeHBlY3RlZCBlbXB0eSBkYXRhLiIgOiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgTGlzdDxTdHJpbmc+IGVycm9yc0ZvdW5kID0gW107CiAgICAgIEZlYXR1cmVzIGV4cGVjdGVkRmVhdHVyZXMgPSBGZWF0dXJlcy5mcm9tVGV4dChleHBlY3RlZERhdGEpOwogICAgICBTZXQ8U3RyaW5nPiB2YWxpZGF0ZWRGZWF0dXJlcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwogICAgICBleHBlY3RlZEZlYXR1cmVzLmZvckVhY2goKFN0cmluZyBrZXksIE9iamVjdCBleHBlY3RlZFZhbHVlKSB7CiAgICAgICAgYm9vbCBleHBlY3RNYXRjaCA9IHRydWU7CiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCchJykpIHsKICAgICAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcoMSk7CiAgICAgICAgICBleHBlY3RNYXRjaCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICB2YWxpZGF0ZWRGZWF0dXJlcy5hZGQoa2V5KTsKICAgICAgICBPYmplY3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxGZWF0dXJlc1trZXldOwogICAgICAgIGlmICghZXhwZWN0TWF0Y2gpIHsKICAgICAgICAgIGlmIChhY3R1YWxGZWF0dXJlcy5jb250YWluc0tleShrZXkpKSB7CiAgICAgICAgICAgIGVycm9yc0ZvdW5kLmFkZCgnVW5leHBlY3RlZCBkYXRhIGZvdW5kIGZvciAka2V5PSRhY3R1YWxWYWx1ZScpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoIWFjdHVhbEZlYXR1cmVzLmNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgICAgIGVycm9yc0ZvdW5kLmFkZCgnTm8gZGF0YSBmb3VuZCBmb3IgJGtleScpOwogICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRWYWx1ZSA9PSAnJykgewogICAgICAgICAgaWYgKGFjdHVhbFZhbHVlICE9ICcnKSB7CiAgICAgICAgICAgIGVycm9yc0ZvdW5kLmFkZCgnTm9uLWVtcHR5IGRhdGEgZm91bmQgZm9yICRrZXknKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVmFsdWUgPT0gJyonKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmIChleHBlY3RlZFZhbHVlIGlzIExpc3QpIHsKICAgICAgICAgIGlmIChhY3R1YWxWYWx1ZSBpcyBMaXN0KSB7CiAgICAgICAgICAgIExpc3QgYWN0dWFsTGlzdCA9IGFjdHVhbFZhbHVlLnRvTGlzdCgpOwogICAgICAgICAgICBmb3IgKE9iamVjdCBleHBlY3RlZE9iamVjdCBpbiBleHBlY3RlZFZhbHVlKSB7CiAgICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkVGV4dCA9ICckZXhwZWN0ZWRPYmplY3QnOwogICAgICAgICAgICAgIGJvb2wgbWF0Y2hGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgIGlmIChleHBlY3RlZFRleHQuZW5kc1dpdGgoJyonKSkgewogICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgbWF0Y2hlci4KICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPQogICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkVGV4dC5zdWJzdHJpbmcoMCwgZXhwZWN0ZWRUZXh0LmluZGV4T2YoJyonKSk7CiAgICAgICAgICAgICAgICBMaXN0IG1hdGNoZXMgPSBbXTsKICAgICAgICAgICAgICAgIGZvciAoT2JqZWN0IGFjdHVhbE9iamVjdCBpbiBhY3R1YWxMaXN0KSB7CiAgICAgICAgICAgICAgICAgIGlmICgnJGFjdHVhbE9iamVjdCcuc3RhcnRzV2l0aChwcmVmaXgpKSB7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5hZGQoYWN0dWFsT2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICBtYXRjaEZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChPYmplY3QgbWF0Y2ggaW4gbWF0Y2hlcykgewogICAgICAgICAgICAgICAgICBhY3R1YWxMaXN0LnJlbW92ZShtYXRjaCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAoT2JqZWN0IGFjdHVhbE9iamVjdCBpbiBhY3R1YWxMaXN0KSB7CiAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZFRleHQgPT0gJyRhY3R1YWxPYmplY3QnKSB7CiAgICAgICAgICAgICAgICAgICAgYWN0dWFsTGlzdC5yZW1vdmUoYWN0dWFsT2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICBtYXRjaEZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIW1hdGNoRm91bmQpIHsKICAgICAgICAgICAgICAgIGVycm9yc0ZvdW5kLmFkZCgiTm8gbWF0Y2ggZm91bmQgZm9yICRrZXk9WyRleHBlY3RlZFRleHRdIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhY3R1YWxMaXN0LmlzTm90RW1wdHkpIHsKICAgICAgICAgICAgICBlcnJvcnNGb3VuZAogICAgICAgICAgICAgICAgICAuYWRkKCJFeHRyYSBkYXRhIGZvdW5kICRrZXk9WyR7YWN0dWFsTGlzdC5qb2luKCcsJyl9XSIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlcnJvcnNGb3VuZC5hZGQoIkxpc3QgZGF0YSBleHBlY3RlZCBmb3IgJGtleTogIgogICAgICAgICAgICAgICAgImV4cGVjdGVkICckZXhwZWN0ZWRWYWx1ZScsIGZvdW5kICcke2FjdHVhbFZhbHVlfSciKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVmFsdWUgIT0gYWN0dWFsVmFsdWUpIHsKICAgICAgICAgIGVycm9yc0ZvdW5kLmFkZCgiTWlzbWF0Y2ggZm9yICRrZXk6IGV4cGVjdGVkICckZXhwZWN0ZWRWYWx1ZScsICIKICAgICAgICAgICAgICAiZm91bmQgJyR7YWN0dWFsVmFsdWV9JyIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGFjdHVhbEZlYXR1cmVzLmZvckVhY2goKFN0cmluZyBrZXksIE9iamVjdCB2YWx1ZSkgewogICAgICAgIGlmICghdmFsaWRhdGVkRmVhdHVyZXMuY29udGFpbnMoa2V5KSkgewogICAgICAgICAgaWYgKHZhbHVlID09ICcnKSB7CiAgICAgICAgICAgIGVycm9yc0ZvdW5kLmFkZCgiRXh0cmEgZGF0YSBmb3VuZCAnJGtleSciKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVycm9yc0ZvdW5kLmFkZCgiRXh0cmEgZGF0YSBmb3VuZCAka2V5PSR2YWx1ZSIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiBlcnJvcnNGb3VuZC5pc05vdEVtcHR5ID8gZXJyb3JzRm91bmQuam9pbignXG4gJykgOiBudWxsOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldFRleHQoRmVhdHVyZXMgYWN0dWFsRGF0YSkgewogICAgcmV0dXJuIGFjdHVhbERhdGEuZ2V0VGV4dCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0VtcHR5KEZlYXR1cmVzIGFjdHVhbERhdGEpIHsKICAgIHJldHVybiBhY3R1YWxEYXRhID09IG51bGwgfHwgYWN0dWFsRGF0YS5pc0VtcHR5OwogIH0KfQqBHwBOTjwBGgFIESYtAU4nKicEAUUtRhkiBgQBSjwkGAQBLiEnBAE3MBwEAS80AUs2ATMpATcvAUsNMhoEAVAYFSodOycbGhkKGCUqLBM2DAobGRsKGwgGGgQBDDEBQAZMPSooJxMiLC8THSsgLxsdETIgCiAtGRsjMB4PJh0IFjcUFBQTCzFKFiUiEwogJjpIKBUTNCgvFyYrF0BCMhkkFxkQFRcODAoWQCIuDBE8LAoRDxwIBhUEAgFFIwEMRh8TJUgNJUM5RCEjIh8KJDIcMUwMNzUqIz4MKxIsJTQ7NycwJSBKIzo8LycUEjAsEhc6OTUnGxQSECFMEA4pGksOEzxGDDNLKQoKOjAdOBM9DAoKRgYEAQwoIQQBDCY1BAIBK3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2ZlYXR1cmVzLmRhcnQsc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGFzaC9zaGExLmRhcnSF9C8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgppbXBvcnQgJ3BhY2thZ2U6Y3J5cHRvL2NyeXB0by5kYXJ0JzsKCmltcG9ydCAnLi4vaW8vY29kZV9vdXRwdXQuZGFydCcgc2hvdyBDb2RlT3V0cHV0TGlzdGVuZXI7CgpjbGFzcyBIYXNoZXIgaW1wbGVtZW50cyBDb2RlT3V0cHV0TGlzdGVuZXIgewogIGZpbmFsIF9EaWdlc3RTaW5rIF9kaWdlc3RTaW5rOwogIEJ5dGVDb252ZXJzaW9uU2luayBfYnl0ZVNpbms7CgogIEhhc2hlci5fKHRoaXMuX2RpZ2VzdFNpbmspCiAgICAgIDogX2J5dGVTaW5rID0gc2hhMS5zdGFydENodW5rZWRDb252ZXJzaW9uKF9kaWdlc3RTaW5rKTsKCiAgZmFjdG9yeSBIYXNoZXIoKSA9PiBIYXNoZXIuXyhfRGlnZXN0U2luaygpKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBvbkRvbmUoaW50IGxlbmd0aCkgewogICAgLy8gRG8gbm90aGluZy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25UZXh0KFN0cmluZyB0ZXh0KSB7CiAgICBpZiAoX2J5dGVTaW5rICE9IG51bGwpIHsKICAgICAgX2J5dGVTaW5rLmFkZCh1dGY4LmVuY29kZSh0ZXh0KSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgYmFzZTY0LWVuY29kZWQgU0hBLTEgaGFzaCBvZiB0aGUgdXRmLTggYnl0ZXMgb2YgdGhlIG91dHB1dAogIC8vLyB0ZXh0LgogIFN0cmluZyBnZXRIYXNoKCkgewogICAgaWYgKF9ieXRlU2luayAhPSBudWxsKSB7CiAgICAgIF9ieXRlU2luay5jbG9zZSgpOwogICAgICBfYnl0ZVNpbmsgPSBudWxsOwogICAgfQogICAgcmV0dXJuIGJhc2U2NC5lbmNvZGUoX2RpZ2VzdFNpbmsudmFsdWUuYnl0ZXMpOwogIH0KfQoKLy8vIEEgc2luayB1c2VkIHRvIGdldCBhIGRpZ2VzdCB2YWx1ZSBvdXQgb2YgYEhhc2guc3RhcnRDaHVua2VkQ29udmVyc2lvbmAuCmNsYXNzIF9EaWdlc3RTaW5rIGV4dGVuZHMgU2luazxEaWdlc3Q+IHsKICBEaWdlc3QgX3ZhbHVlOwoKICAvLy8gVGhlIHZhbHVlIGFkZGVkIHRvIHRoZSBzaW5rLCBpZiBhbnkuCiAgRGlnZXN0IGdldCB2YWx1ZSB7CiAgICBhc3NlcnQoX3ZhbHVlICE9IG51bGwpOwogICAgcmV0dXJuIF92YWx1ZTsKICB9CgogIC8vLyBBZGRzIFt2YWx1ZV0gdG8gdGhlIHNpbmsuCiAgLy8vCiAgLy8vIFVubGlrZSBtb3N0IHNpbmtzLCB0aGlzIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlLgogIEBvdmVycmlkZQogIHZvaWQgYWRkKERpZ2VzdCB2YWx1ZSkgewogICAgYXNzZXJ0KF92YWx1ZSA9PSBudWxsKTsKICAgIF92YWx1ZSA9IHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCk7CiAgfQp9CkQATk48ARcBJQE5AS0hIAEdPgEvAQwcEwQBDB0dKAYEAU0MFR0ZGAYzBAIBTCkRASsVHBMEASAGNwwbHBQEAQwRHAQCASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9oYXNoL3NoYTEuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pby9zb3VyY2VfbWFwX2J1aWxkZXIuZGFydLwDLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5zb3VyY2VfbWFwX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMb2NhdGlvbjsKaW1wb3J0ICcuLi8uLi9jb21waWxlcl9uZXcuZGFydCcgc2hvdyBDb21waWxlck91dHB1dCwgT3V0cHV0U2luaywgT3V0cHV0VHlwZTsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnbG9jYXRpb25fcHJvdmlkZXIuZGFydCc7CmltcG9ydCAnY29kZV9vdXRwdXQuZGFydCcgc2hvdyBTb3VyY2VMb2NhdGlvbnNQcm92aWRlciwgU291cmNlTG9jYXRpb25zOwppbXBvcnQgJ3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JyBzaG93IFNvdXJjZUxvY2F0aW9uLCBGcmFtZUVudHJ5OwoKY2xhc3MgU291cmNlTWFwQnVpbGRlciB7CiAgZmluYWwgU3RyaW5nIHZlcnNpb247CgogIC8vLyBUaGUgVVJJIG9mIHRoZSBzb3VyY2UgbWFwIGZpbGUuCiAgZmluYWwgVXJpIHNvdXJjZU1hcFVyaTsKCiAgLy8vIFRoZSBVUkkgb2YgdGhlIHRhcmdldCBsYW5ndWFnZSBmaWxlLgogIGZpbmFsIFVyaSB0YXJnZXRGaWxlVXJpOwoKICBmaW5hbCBMb2NhdGlvblByb3ZpZGVyIGxvY2F0aW9uUHJvdmlkZXI7CiAgZmluYWwgTGlzdDxTb3VyY2VNYXBFbnRyeT4gZW50cmllcyA9IG5ldyBMaXN0PFNvdXJjZU1hcEVudHJ5PigpOwoKICAvLy8gRXh0ZW5zaW9uIHVzZWQgdG8gZGVvYmZ1c2NhdGUgbWluaWZpZWQgbmFtZXMgaW4gZXJyb3IgbWVzc2FnZXMuCiAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBtaW5pZmllZEdsb2JhbE5hbWVzOwogIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gbWluaWZpZWRJbnN0YW5jZU5hbWVzOwoKICAvLy8gRXh0ZW5zaW9uIHVzZWQgdG8gZGVvYmZ1c2NhdGUgaW5saW5lZCBzdGFjayBmcmFtZXMuCiAgZmluYWwgTWFwPGludCwgTGlzdDxGcmFtZUVudHJ5Pj4gZnJhbWVzOwoKICBTb3VyY2VNYXBCdWlsZGVyKAogICAgICB0aGlzLnZlcnNpb24sCiAgICAgIHRoaXMuc291cmNlTWFwVXJpLAogICAgICB0aGlzLnRhcmdldEZpbGVVcmksCiAgICAgIHRoaXMubG9jYXRpb25Qcm92aWRlciwKICAgICAgdGhpcy5taW5pZmllZEdsb2JhbE5hbWVzLAogICAgICB0aGlzLm1pbmlmaWVkSW5zdGFuY2VOYW1lcywKICAgICAgdGhpcy5mcmFtZXMpOwoKICB2b2lkIGFkZE1hcHBpbmcoaW50IHRhcmdldE9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24pIHsKICAgIGVudHJpZXMuYWRkKG5ldyBTb3VyY2VNYXBFbnRyeShzb3VyY2VMb2NhdGlvbiwgdGFyZ2V0T2Zmc2V0KSk7CiAgfQoKICB2b2lkIHByaW50U3RyaW5nTGlzdE9uKEl0ZXJhYmxlPFN0cmluZz4gc3RyaW5ncywgU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBidWZmZXIud3JpdGUoJ1snKTsKICAgIGZvciAoU3RyaW5nIHN0cmluZyBpbiBzdHJpbmdzKSB7CiAgICAgIGlmICghZmlyc3QpIGJ1ZmZlci53cml0ZSgnLCcpOwogICAgICBidWZmZXIud3JpdGUoJyInKTsKICAgICAgd3JpdGVKc29uRXNjYXBlZENoYXJzT24oc3RyaW5nLCBidWZmZXIpOwogICAgICBidWZmZXIud3JpdGUoJyInKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZSgnXScpOwogIH0KCiAgU3RyaW5nIGJ1aWxkKCkgewogICAgTGluZUNvbHVtbk1hcDxTb3VyY2VNYXBFbnRyeT4gbGluZUNvbHVtbk1hcCA9CiAgICAgICAgbmV3IExpbmVDb2x1bW5NYXA8U291cmNlTWFwRW50cnk+KCk7CiAgICBNYXA8VXJpLCBMaW5lQ29sdW1uTWFwPFNvdXJjZU1hcEVudHJ5Pj4gc291cmNlTG9jYXRpb25NYXAgPQogICAgICAgIDxVcmksIExpbmVDb2x1bW5NYXA8U291cmNlTWFwRW50cnk+Pnt9OwogICAgZW50cmllcy5mb3JFYWNoKChTb3VyY2VNYXBFbnRyeSBzb3VyY2VNYXBFbnRyeSkgewogICAgICBMb2NhdGlvbiBrZXJuZWxMb2NhdGlvbiA9CiAgICAgICAgICBsb2NhdGlvblByb3ZpZGVyLmdldExvY2F0aW9uKHNvdXJjZU1hcEVudHJ5LnRhcmdldE9mZnNldCk7CiAgICAgIGludCBsaW5lID0ga2VybmVsTG9jYXRpb24ubGluZSAtIDE7CiAgICAgIGludCBjb2x1bW4gPSBrZXJuZWxMb2NhdGlvbi5jb2x1bW4gLSAxOwogICAgICBsaW5lQ29sdW1uTWFwLmFkZChsaW5lLCBjb2x1bW4sIHNvdXJjZU1hcEVudHJ5KTsKCiAgICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uID0gc291cmNlTWFwRW50cnkuc291cmNlTG9jYXRpb247CiAgICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgaWYgKGxvY2F0aW9uLnNvdXJjZVVyaSAhPSBudWxsKSB7CiAgICAgICAgICBMaW5lQ29sdW1uTWFwPFNvdXJjZU1hcEVudHJ5PiBzb3VyY2VMaW5lQ29sdW1uTWFwID0KICAgICAgICAgICAgICBzb3VyY2VMb2NhdGlvbk1hcC5wdXRJZkFic2VudChsb2NhdGlvbi5zb3VyY2VVcmksCiAgICAgICAgICAgICAgICAgICgpID0+IG5ldyBMaW5lQ29sdW1uTWFwPFNvdXJjZU1hcEVudHJ5PigpKTsKICAgICAgICAgIHNvdXJjZUxpbmVDb2x1bW5NYXAuYWRkKAogICAgICAgICAgICAgIGxvY2F0aW9uLmxpbmUgLSAxLCBsb2NhdGlvbi5jb2x1bW4gLSAxLCBzb3VyY2VNYXBFbnRyeSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICByZXR1cm4gX2J1aWxkKGxpbmVDb2x1bW5NYXApOwogIH0KCiAgU3RyaW5nIF9idWlsZChMaW5lQ29sdW1uTWFwPFNvdXJjZU1hcEVudHJ5PiBsaW5lQ29sdW1uTWFwKSB7CiAgICBJbmRleE1hcDxVcmk+IHVyaU1hcCA9IG5ldyBJbmRleE1hcDxVcmk+KCk7CiAgICBJbmRleE1hcDxTdHJpbmc+IG5hbWVNYXAgPSBuZXcgSW5kZXhNYXA8U3RyaW5nPigpOwoKICAgIHZvaWQgcmVnaXN0ZXJMb2NhdGlvbihTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikgewogICAgICBpZiAoc291cmNlTG9jYXRpb24gIT0gbnVsbCkgewogICAgICAgIGlmIChzb3VyY2VMb2NhdGlvbi5zb3VyY2VVcmkgIT0gbnVsbCkgewogICAgICAgICAgdXJpTWFwLnJlZ2lzdGVyKHNvdXJjZUxvY2F0aW9uLnNvdXJjZVVyaSk7CiAgICAgICAgICBpZiAoc291cmNlTG9jYXRpb24uc291cmNlTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgIG5hbWVNYXAucmVnaXN0ZXIoc291cmNlTG9jYXRpb24uc291cmNlTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgbGluZUNvbHVtbk1hcC5mb3JFYWNoRWxlbWVudCgoU291cmNlTWFwRW50cnkgZW50cnkpIHsKICAgICAgcmVnaXN0ZXJMb2NhdGlvbihlbnRyeS5zb3VyY2VMb2NhdGlvbik7CiAgICB9KTsKCiAgICBtaW5pZmllZEdsb2JhbE5hbWVzLnZhbHVlcy5mb3JFYWNoKG5hbWVNYXAucmVnaXN0ZXIpOwogICAgbWluaWZpZWRJbnN0YW5jZU5hbWVzLnZhbHVlcy5mb3JFYWNoKG5hbWVNYXAucmVnaXN0ZXIpOwogICAgZm9yIChMaXN0PEZyYW1lRW50cnk+IGVudHJpZXMgaW4gZnJhbWVzLnZhbHVlcykgewogICAgICBmb3IgKHZhciBmcmFtZSBpbiBlbnRyaWVzKSB7CiAgICAgICAgcmVnaXN0ZXJMb2NhdGlvbihmcmFtZS5wdXNoTG9jYXRpb24pOwogICAgICAgIGlmIChmcmFtZS5pbmxpbmVkTWV0aG9kTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICBuYW1lTWFwLnJlZ2lzdGVyKGZyYW1lLmlubGluZWRNZXRob2ROYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBTdHJpbmdCdWZmZXIgbWFwcGluZ3NCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICB3cml0ZUVudHJpZXMobGluZUNvbHVtbk1hcCwgdXJpTWFwLCBuYW1lTWFwLCBtYXBwaW5nc0J1ZmZlcik7CgogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZSgne1xuJyk7CiAgICBidWZmZXIud3JpdGUoJyAgInZlcnNpb24iOiAzLFxuJyk7CiAgICBidWZmZXIud3JpdGUoJyAgImVuZ2luZSI6ICIkdmVyc2lvbiIsXG4nKTsKICAgIGlmIChzb3VyY2VNYXBVcmkgIT0gbnVsbCAmJiB0YXJnZXRGaWxlVXJpICE9IG51bGwpIHsKICAgICAgYnVmZmVyLndyaXRlKCcgICJmaWxlIjogJwogICAgICAgICAgJyIke2ZlLnJlbGF0aXZpemVVcmkoc291cmNlTWFwVXJpLCB0YXJnZXRGaWxlVXJpLCBmYWxzZSl9IixcbicpOwogICAgfQogICAgYnVmZmVyLndyaXRlKCcgICJzb3VyY2VSb290IjogIiIsXG4nKTsKICAgIGJ1ZmZlci53cml0ZSgnICAic291cmNlcyI6ICcpOwogICAgSXRlcmFibGU8U3RyaW5nPiByZWxhdGl2ZVNvdXJjZVVyaUxpc3QgPSBjb25zdCA8U3RyaW5nPltdOwogICAgaWYgKHNvdXJjZU1hcFVyaSAhPSBudWxsKSB7CiAgICAgIHJlbGF0aXZlU291cmNlVXJpTGlzdCA9CiAgICAgICAgICB1cmlNYXAuZWxlbWVudHMubWFwKCh1KSA9PiBmZS5yZWxhdGl2aXplVXJpKHNvdXJjZU1hcFVyaSwgdSwgZmFsc2UpKTsKICAgIH0KICAgIHByaW50U3RyaW5nTGlzdE9uKHJlbGF0aXZlU291cmNlVXJpTGlzdCwgYnVmZmVyKTsKICAgIGJ1ZmZlci53cml0ZSgnLFxuJyk7CiAgICBidWZmZXIud3JpdGUoJyAgIm5hbWVzIjogJyk7CiAgICBwcmludFN0cmluZ0xpc3RPbihuYW1lTWFwLmVsZW1lbnRzLCBidWZmZXIpOwogICAgYnVmZmVyLndyaXRlKCcsXG4nKTsKICAgIGJ1ZmZlci53cml0ZSgnICAibWFwcGluZ3MiOiAiJyk7CiAgICBidWZmZXIud3JpdGUobWFwcGluZ3NCdWZmZXIpOwogICAgYnVmZmVyLndyaXRlKCciLFxuJyk7CiAgICBidWZmZXIud3JpdGUoJyAgInhfb3JnX2RhcnRsYW5nX2RhcnQyanMiOiB7XG4nKTsKICAgIGJ1ZmZlci53cml0ZSgnICAgICJtaW5pZmllZF9uYW1lcyI6IHtcbicpOwogICAgYnVmZmVyLndyaXRlKCcgICAgICAiZ2xvYmFsIjogJyk7CiAgICB3cml0ZU1pbmlmaWVkTmFtZXMobWluaWZpZWRHbG9iYWxOYW1lcywgbmFtZU1hcCwgYnVmZmVyKTsKICAgIGJ1ZmZlci53cml0ZSgnLFxuJyk7CiAgICBidWZmZXIud3JpdGUoJyAgICAgICJpbnN0YW5jZSI6ICcpOwogICAgd3JpdGVNaW5pZmllZE5hbWVzKG1pbmlmaWVkSW5zdGFuY2VOYW1lcywgbmFtZU1hcCwgYnVmZmVyKTsKICAgIGJ1ZmZlci53cml0ZSgnXG4gICAgfSxcbicpOwogICAgYnVmZmVyLndyaXRlKCcgICAgImZyYW1lcyI6ICcpOwogICAgd3JpdGVGcmFtZXModXJpTWFwLCBuYW1lTWFwLCBidWZmZXIpOwogICAgYnVmZmVyLndyaXRlKCdcbiAgfVxufVxuJyk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIHdyaXRlRW50cmllcyhMaW5lQ29sdW1uTWFwPFNvdXJjZU1hcEVudHJ5PiBlbnRyaWVzLCBJbmRleE1hcDxVcmk+IHVyaU1hcCwKICAgICAgSW5kZXhNYXA8U3RyaW5nPiBuYW1lTWFwLCBTdHJpbmdCdWZmZXIgb3V0cHV0KSB7CiAgICBTb3VyY2VMb2NhdGlvbiBwcmV2aW91c1NvdXJjZUxvY2F0aW9uOwogICAgaW50IHByZXZpb3VzVGFyZ2V0TGluZSA9IDA7CiAgICBEZWx0YUVuY29kZXIgdGFyZ2V0Q29sdW1uRW5jb2RlciA9IG5ldyBEZWx0YUVuY29kZXIoKTsKICAgIGJvb2wgZmlyc3RFbnRyeUluTGluZSA9IHRydWU7CiAgICBEZWx0YUVuY29kZXIgc291cmNlVXJpSW5kZXhFbmNvZGVyID0gbmV3IERlbHRhRW5jb2RlcigpOwogICAgRGVsdGFFbmNvZGVyIHNvdXJjZUxpbmVFbmNvZGVyID0gbmV3IERlbHRhRW5jb2RlcigpOwogICAgRGVsdGFFbmNvZGVyIHNvdXJjZUNvbHVtbkVuY29kZXIgPSBuZXcgRGVsdGFFbmNvZGVyKCk7CiAgICBEZWx0YUVuY29kZXIgc291cmNlTmFtZUluZGV4RW5jb2RlciA9IG5ldyBEZWx0YUVuY29kZXIoKTsKCiAgICBlbnRyaWVzLmZvckVhY2goKGludCB0YXJnZXRMaW5lLCBpbnQgdGFyZ2V0Q29sdW1uLCBTb3VyY2VNYXBFbnRyeSBlbnRyeSkgewogICAgICBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbiA9IGVudHJ5LnNvdXJjZUxvY2F0aW9uOwogICAgICBpZiAoc291cmNlTG9jYXRpb24gPT0gcHJldmlvdXNTb3VyY2VMb2NhdGlvbikgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKHRhcmdldExpbmUgPiBwcmV2aW91c1RhcmdldExpbmUpIHsKICAgICAgICBmb3IgKGludCBpID0gcHJldmlvdXNUYXJnZXRMaW5lOyBpIDwgdGFyZ2V0TGluZTsgKytpKSB7CiAgICAgICAgICBvdXRwdXQud3JpdGUoJzsnKTsKICAgICAgICB9CiAgICAgICAgcHJldmlvdXNUYXJnZXRMaW5lID0gdGFyZ2V0TGluZTsKICAgICAgICBwcmV2aW91c1NvdXJjZUxvY2F0aW9uID0gbnVsbDsKICAgICAgICB0YXJnZXRDb2x1bW5FbmNvZGVyLnJlc2V0KCk7CiAgICAgICAgZmlyc3RFbnRyeUluTGluZSA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmICghZmlyc3RFbnRyeUluTGluZSkgewogICAgICAgIG91dHB1dC53cml0ZSgnLCcpOwogICAgICB9CiAgICAgIGZpcnN0RW50cnlJbkxpbmUgPSBmYWxzZTsKCiAgICAgIHRhcmdldENvbHVtbkVuY29kZXIuZW5jb2RlKG91dHB1dCwgdGFyZ2V0Q29sdW1uKTsKCiAgICAgIGlmIChzb3VyY2VMb2NhdGlvbiA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBVcmkgc291cmNlVXJpID0gc291cmNlTG9jYXRpb24uc291cmNlVXJpOwogICAgICBpZiAoc291cmNlVXJpICE9IG51bGwpIHsKICAgICAgICBzb3VyY2VVcmlJbmRleEVuY29kZXIuZW5jb2RlKG91dHB1dCwgdXJpTWFwW3NvdXJjZVVyaV0pOwogICAgICAgIHNvdXJjZUxpbmVFbmNvZGVyLmVuY29kZShvdXRwdXQsIHNvdXJjZUxvY2F0aW9uLmxpbmUgLSAxKTsKICAgICAgICBzb3VyY2VDb2x1bW5FbmNvZGVyLmVuY29kZShvdXRwdXQsIHNvdXJjZUxvY2F0aW9uLmNvbHVtbiAtIDEpOwogICAgICB9CgogICAgICBTdHJpbmcgc291cmNlTmFtZSA9IHNvdXJjZUxvY2F0aW9uLnNvdXJjZU5hbWU7CiAgICAgIGlmIChzb3VyY2VOYW1lICE9IG51bGwpIHsKICAgICAgICBzb3VyY2VOYW1lSW5kZXhFbmNvZGVyLmVuY29kZShvdXRwdXQsIG5hbWVNYXBbc291cmNlTmFtZV0pOwogICAgICB9CgogICAgICBwcmV2aW91c1NvdXJjZUxvY2F0aW9uID0gc291cmNlTG9jYXRpb247CiAgICB9KTsKICB9CgogIHZvaWQgd3JpdGVNaW5pZmllZE5hbWVzKE1hcDxTdHJpbmcsIFN0cmluZz4gbWluaWZpZWROYW1lcywKICAgICAgSW5kZXhNYXA8U3RyaW5nPiBuYW1lTWFwLCBTdHJpbmdCdWZmZXIgYnVmZmVyKSB7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGJ1ZmZlci53cml0ZSgnIicpOwogICAgbWluaWZpZWROYW1lcy5mb3JFYWNoKChTdHJpbmcgbWluaWZpZWROYW1lLCBTdHJpbmcgbmFtZSkgewogICAgICBpZiAoIWZpcnN0KSBidWZmZXIud3JpdGUoJywnKTsKICAgICAgLy8gbWluaWZpZWROYW1lcyBhcmUgdmFsaWQgSlMgaWRlbnRpZmllcnMgc28gdGhleSBkb24ndCBuZWVkIHRvIGJlIGVzY2FwZWQKICAgICAgYnVmZmVyLndyaXRlKG1pbmlmaWVkTmFtZSk7CiAgICAgIGJ1ZmZlci53cml0ZSgnLCcpOwogICAgICBidWZmZXIud3JpdGUobmFtZU1hcFtuYW1lXSk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9KTsKICAgIGJ1ZmZlci53cml0ZSgnIicpOwogIH0KCiAgdm9pZCB3cml0ZUZyYW1lcygKICAgICAgSW5kZXhNYXA8VXJpPiB1cmlNYXAsIEluZGV4TWFwPFN0cmluZz4gbmFtZU1hcCwgU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewogICAgdmFyIG9mZnNldEVuY29kZXIgPSBEZWx0YUVuY29kZXIoKTsKICAgIHZhciB1cmlFbmNvZGVyID0gRGVsdGFFbmNvZGVyKCk7CiAgICB2YXIgbGluZUVuY29kZXIgPSBEZWx0YUVuY29kZXIoKTsKICAgIHZhciBjb2x1bW5FbmNvZGVyID0gRGVsdGFFbmNvZGVyKCk7CiAgICB2YXIgbmFtZUVuY29kZXIgPSBEZWx0YUVuY29kZXIoKTsKICAgIGJ1ZmZlci53cml0ZSgnIicpOwogICAgZnJhbWVzLmZvckVhY2goKGludCBvZmZzZXQsIExpc3Q8RnJhbWVFbnRyeT4gZW50cmllcykgewogICAgICBmb3IgKHZhciBlbnRyeSBpbiBlbnRyaWVzKSB7CiAgICAgICAgb2Zmc2V0RW5jb2Rlci5lbmNvZGUoYnVmZmVyLCBvZmZzZXQpOwogICAgICAgIGlmIChlbnRyeS5pc1B1c2gpIHsKICAgICAgICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uID0gZW50cnkucHVzaExvY2F0aW9uOwogICAgICAgICAgdXJpRW5jb2Rlci5lbmNvZGUoYnVmZmVyLCB1cmlNYXBbbG9jYXRpb24uc291cmNlVXJpXSk7CiAgICAgICAgICBsaW5lRW5jb2Rlci5lbmNvZGUoYnVmZmVyLCBsb2NhdGlvbi5saW5lIC0gMSk7CiAgICAgICAgICBjb2x1bW5FbmNvZGVyLmVuY29kZShidWZmZXIsIGxvY2F0aW9uLmNvbHVtbiAtIDEpOwogICAgICAgICAgbmFtZUVuY29kZXIuZW5jb2RlKGJ1ZmZlciwgbmFtZU1hcFtlbnRyeS5pbmxpbmVkTWV0aG9kTmFtZV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyA7IGFuZCAsIGFyZSBub3QgdXNlZCBieSBWTFEgc28gd2UgY2FuIGRpc3Rpbmd1aXNoIHRoZW0gaW4gdGhlCiAgICAgICAgICAvLyBlbmNvZGluZywgdGhpcyBpcyB0aGUgc2FtZSByZWFzb24gdGhleSBhcmUgdXNlZCBpbiB0aGUgbWFwcGluZ3MKICAgICAgICAgIC8vIGZpZWxkLgogICAgICAgICAgYnVmZmVyLndyaXRlKGVudHJ5LmlzRW1wdHlQb3AgPyAiOyIgOiAiLCIpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBidWZmZXIud3JpdGUoJyInKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzb3VyY2UgbWFwIHRhZyB0byBwdXQgYXQgdGhlIGVuZCBhIC5qcyBmaWxlIGluIFtmaWxlVXJpXSB0bwogIC8vLyBtYWtlIGl0IHBvaW50IHRvIHRoZSBzb3VyY2UgbWFwIGZpbGUgaW4gW3NvdXJjZU1hcFVyaV0uCiAgc3RhdGljIFN0cmluZyBnZW5lcmF0ZVNvdXJjZU1hcFRhZyhVcmkgc291cmNlTWFwVXJpLCBVcmkgZmlsZVVyaSkgewogICAgaWYgKHNvdXJjZU1hcFVyaSAhPSBudWxsICYmIGZpbGVVcmkgIT0gbnVsbCkgewogICAgICBTdHJpbmcgc291cmNlTWFwRmlsZU5hbWUgPSBmZS5yZWxhdGl2aXplVXJpKGZpbGVVcmksIHNvdXJjZU1hcFVyaSwgZmFsc2UpOwogICAgICByZXR1cm4gJycnCgovLyMgc291cmNlTWFwcGluZ1VSTD0kc291cmNlTWFwRmlsZU5hbWUKJycnOwogICAgfQogICAgcmV0dXJuICcnOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBzb3VyY2UgbWFwIGZpbGVzIGZvciBhbGwgW1NvdXJjZUxvY2F0aW9uc10gaW4KICAvLy8gW3NvdXJjZUxvY2F0aW9uc1Byb3ZpZGVyXSBmb3IgdGhlIC5qcyBjb2RlIGluIFtsb2NhdGlvblByb3ZpZGVyXQogIC8vLyBbc291cmNlTWFwVXJpXSBpcyB1c2VkIHRvIHJlbGF0aXZpemVzIHRoZSBVUklzIG9mIHRoZSByZWZlcmVuY2VkIHNvdXJjZQogIC8vLyBmaWxlcyBhbmQgdGhlIHRhcmdldCBbZmlsZVVyaV0uIFtuYW1lXSBhbmQgW291dHB1dFByb3ZpZGVyXSBhcmUgdXNlZCB0bwogIC8vLyBjcmVhdGUgdGhlIFtPdXRwdXRTaW5rXSBmb3IgdGhlIHNvdXJjZSBtYXAgdGV4dC4KICBzdGF0aWMgdm9pZCBvdXRwdXRTb3VyY2VNYXAoCiAgICAgIFNvdXJjZUxvY2F0aW9uc1Byb3ZpZGVyIHNvdXJjZUxvY2F0aW9uc1Byb3ZpZGVyLAogICAgICBMb2NhdGlvblByb3ZpZGVyIGxvY2F0aW9uUHJvdmlkZXIsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWluaWZpZWRHbG9iYWxOYW1lcywKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtaW5pZmllZEluc3RhbmNlTmFtZXMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBVcmkgc291cmNlTWFwVXJpLAogICAgICBVcmkgZmlsZVVyaSwKICAgICAgQ29tcGlsZXJPdXRwdXQgY29tcGlsZXJPdXRwdXQpIHsKICAgIC8vIENyZWF0ZSBhIHNvdXJjZSBmaWxlIGZvciB0aGUgY29tcGlsYXRpb24gb3V0cHV0LiBUaGlzIGFsbG93cyB1c2luZwogICAgLy8gWzpnZXRMaW5lOl0gdG8gdHJhbnNmb3JtIG9mZnNldHMgdG8gbGluZSBudW1iZXJzIGluIFtTb3VyY2VNYXBCdWlsZGVyXS4KICAgIGludCBpbmRleCA9IDA7CiAgICBzb3VyY2VMb2NhdGlvbnNQcm92aWRlci5zb3VyY2VMb2NhdGlvbnMKICAgICAgICAuZm9yRWFjaCgoU291cmNlTG9jYXRpb25zIHNvdXJjZUxvY2F0aW9ucykgewogICAgICBTb3VyY2VNYXBCdWlsZGVyIHNvdXJjZU1hcEJ1aWxkZXIgPSBuZXcgU291cmNlTWFwQnVpbGRlcigKICAgICAgICAgIHNvdXJjZUxvY2F0aW9ucy5uYW1lLAogICAgICAgICAgc291cmNlTWFwVXJpLAogICAgICAgICAgZmlsZVVyaSwKICAgICAgICAgIGxvY2F0aW9uUHJvdmlkZXIsCiAgICAgICAgICBtaW5pZmllZEdsb2JhbE5hbWVzLAogICAgICAgICAgbWluaWZpZWRJbnN0YW5jZU5hbWVzLAogICAgICAgICAgc291cmNlTG9jYXRpb25zLmZyYW1lTWFya2Vycyk7CiAgICAgIHNvdXJjZUxvY2F0aW9ucy5mb3JFYWNoU291cmNlTG9jYXRpb24oc291cmNlTWFwQnVpbGRlci5hZGRNYXBwaW5nKTsKICAgICAgU3RyaW5nIHNvdXJjZU1hcCA9IHNvdXJjZU1hcEJ1aWxkZXIuYnVpbGQoKTsKICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9ICdqcy5tYXAnOwogICAgICBpZiAoaW5kZXggPiAwKSB7CiAgICAgICAgaWYgKG5hbWUgPT0gJycpIHsKICAgICAgICAgIG5hbWUgPSBmaWxlVXJpICE9IG51bGwgPyBmaWxlVXJpLnBhdGhTZWdtZW50cy5sYXN0IDogJ291dC5qcyc7CiAgICAgICAgICBleHRlbnNpb24gPSAnbWFwLiR7c291cmNlTG9jYXRpb25zLm5hbWV9JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXh0ZW5zaW9uID0gJ2pzLm1hcC4ke3NvdXJjZUxvY2F0aW9ucy5uYW1lfSc7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbXBpbGVyT3V0cHV0LmNyZWF0ZU91dHB1dFNpbmsobmFtZSwgZXh0ZW5zaW9uLCBPdXRwdXRUeXBlLnNvdXJjZU1hcCkKICAgICAgICAuLmFkZChzb3VyY2VNYXApCiAgICAgICAgLi5jbG9zZSgpOwogICAgICBpbmRleCsrOwogICAgfSk7CiAgfQp9CgovLy8gRW5jb2RlciBmb3IgdmFsdWUgZGVsdGFzIGluIFZMUSBmb3JtYXQuCmNsYXNzIERlbHRhRW5jb2RlciB7CiAgLy8vIFRoZSBsYXN0IGVtaXR0ZWQgdmFsdWUgb2YgdGhlIGVuY29kZXIuCiAgaW50IF92YWx1ZSA9IDA7CgogIC8vLyBSZXNldCB0aGUgZW5jb2RlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS4KICB2b2lkIHJlc2V0KCkgewogICAgX3ZhbHVlID0gMDsKICB9CgogIC8vLyBXcml0ZXMgdGhlIFZMUSBvZiBkZWx0YSBiZXR3ZWVuIFt2YWx1ZV0gYW5kIHRoZSBsYXN0IGVtaXR0ZWQgdmFsdWUgaW50bwogIC8vLyBbb3V0cHV0XSBhbmQgdXBkYXRlcyB0aGUgbGFzdCBlbWl0dGVkIHZhbHVlIG9mIHRoZSBlbmNvZGVyLgogIHZvaWQgZW5jb2RlKFN0cmluZ0J1ZmZlciBvdXRwdXQsIGludCB2YWx1ZSkgewogICAgX3ZhbHVlID0gZW5jb2RlVkxRKG91dHB1dCwgdmFsdWUsIF92YWx1ZSk7CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IFZMUV9CQVNFX1NISUZUID0gNTsKICBzdGF0aWMgY29uc3QgaW50IFZMUV9CQVNFX01BU0sgPSAoMSA8PCA1KSAtIDE7CiAgc3RhdGljIGNvbnN0IGludCBWTFFfQ09OVElOVUFUSU9OX0JJVCA9IDEgPDwgNTsKICBzdGF0aWMgY29uc3QgaW50IFZMUV9DT05USU5VQVRJT05fTUFTSyA9IDEgPDwgNTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIEJBU0U2NF9ESUdJVFMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbicKICAgICAgJ29wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CgogIC8vLyBXcml0ZXMgdGhlIFZMUSBvZiBkZWx0YSBiZXR3ZWVuIFt2YWx1ZV0gYW5kIFtvZmZzZXRdIGludG8gW291dHB1dF0gYW5kCiAgLy8vIHJldHVybiBbdmFsdWVdLgogIHN0YXRpYyBpbnQgZW5jb2RlVkxRKFN0cmluZ0J1ZmZlciBvdXRwdXQsIGludCB2YWx1ZSwgaW50IG9mZnNldCkgewogICAgaW50IGRlbHRhID0gdmFsdWUgLSBvZmZzZXQ7CiAgICBpbnQgc2lnbkJpdCA9IDA7CiAgICBpZiAoZGVsdGEgPCAwKSB7CiAgICAgIHNpZ25CaXQgPSAxOwogICAgICBkZWx0YSA9IC1kZWx0YTsKICAgIH0KICAgIGRlbHRhID0gKGRlbHRhIDw8IDEpIHwgc2lnbkJpdDsKICAgIGRvIHsKICAgICAgaW50IGRpZ2l0ID0gZGVsdGEgJiBWTFFfQkFTRV9NQVNLOwogICAgICBkZWx0YSA+Pj0gVkxRX0JBU0VfU0hJRlQ7CiAgICAgIGlmIChkZWx0YSA+IDApIHsKICAgICAgICBkaWdpdCB8PSBWTFFfQ09OVElOVUFUSU9OX0JJVDsKICAgICAgfQogICAgICBvdXRwdXQud3JpdGUoQkFTRTY0X0RJR0lUU1tkaWdpdF0pOwogICAgfSB3aGlsZSAoZGVsdGEgPiAwKTsKICAgIHJldHVybiB2YWx1ZTsKICB9Cn0KCmNsYXNzIFNvdXJjZU1hcEVudHJ5IHsKICBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbjsKICBpbnQgdGFyZ2V0T2Zmc2V0OwoKICBTb3VyY2VNYXBFbnRyeSh0aGlzLnNvdXJjZUxvY2F0aW9uLCB0aGlzLnRhcmdldE9mZnNldCk7Cn0KCi8vLyBNYXAgZnJvbSBsaW5lL2NvbHVtbiBwYWlycyB0byBsaXN0cyBvZiBbVF0gZWxlbWVudHMuCmNsYXNzIExpbmVDb2x1bW5NYXA8VD4gewogIE1hcDxpbnQsIE1hcDxpbnQsIExpc3Q8VD4+PiBfbWFwID0gPGludCwgTWFwPGludCwgTGlzdDxUPj4+e307CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IG9mIGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCAoW2xpbmVdLFtjb2x1bW5dKS4KICBMaXN0PFQ+IF9nZXRMaXN0KGludCBsaW5lLCBpbnQgY29sdW1uKSB7CiAgICBNYXA8aW50LCBMaXN0PFQ+PiBsaW5lTWFwID0gX21hcFtsaW5lXSA/Pz0gPGludCwgTGlzdDxUPj57fTsKICAgIHJldHVybiBsaW5lTWFwW2NvbHVtbl0gPz89IDxUPltdOwogIH0KCiAgLy8vIEFkZHMgW2VsZW1lbnRdIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3Qgb2YgZWxlbWVudHMgYXNzb2NpYXRlZCB3aXRoCiAgLy8vIChbbGluZV0sW2NvbHVtbl0pLgogIHZvaWQgYWRkKGludCBsaW5lLCBpbnQgY29sdW1uLCBUIGVsZW1lbnQpIHsKICAgIF9nZXRMaXN0KGxpbmUsIGNvbHVtbikuYWRkKGVsZW1lbnQpOwogIH0KCiAgLy8vIEFkZHMgW2VsZW1lbnRdIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3Qgb2YgZWxlbWVudHMgYXNzb2NpYXRlZCB3aXRoCiAgLy8vIChbbGluZV0sW2NvbHVtbl0pLgogIHZvaWQgYWRkRmlyc3QoaW50IGxpbmUsIGludCBjb2x1bW4sIFQgZWxlbWVudCkgewogICAgX2dldExpc3QobGluZSwgY29sdW1uKS5pbnNlcnQoMCwgZWxlbWVudCk7CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIHdpdGggdGhlIGxpbmUgbnVtYmVyIGZvciBlYWNoIGxpbmUgd2l0aCBhc3NvY2lhdGVkIGVsZW1lbnRzLgogIC8vLwogIC8vLyBbZl0gaXMgY2FsbGVkIGluIGluY3JlYXNpbmcgbGluZSBvcmRlci4KICB2b2lkIGZvckVhY2hMaW5lKGYoaW50IGxpbmUpKSB7CiAgICBMaXN0PGludD4gbGluZXMgPSBfbWFwLmtleXMudG9MaXN0KCkuLnNvcnQoKTsKICAgIGxpbmVzLmZvckVhY2goZik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgZWxlbWVudHMgZm9yIHRoZSBmaXJzdCB0aGUgY29sdW1uIGluIFtsaW5lXSB0aGF0IGhhcwogIC8vLyBhc3NvY2lhdGVkIGVsZW1lbnRzLgogIExpc3Q8VD4gZ2V0Rmlyc3RFbGVtZW50c0luTGluZShpbnQgbGluZSkgewogICAgTWFwPGludCwgTGlzdDxUPj4gbGluZU1hcCA9IF9tYXBbbGluZV07CiAgICBpZiAobGluZU1hcCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8aW50PiBjb2x1bW5zID0gbGluZU1hcC5rZXlzLnRvTGlzdCgpLi5zb3J0KCk7CiAgICByZXR1cm4gbGluZU1hcFtjb2x1bW5zLmZpcnN0XTsKICB9CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggY29sdW1uIHdpdGggYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBbbGluZV0uCiAgLy8vCiAgLy8vIFtmXSBpcyBjYWxsZWQgaW4gaW5jcmVhc2luZyBjb2x1bW4gb3JkZXIuCiAgdm9pZCBmb3JFYWNoQ29sdW1uKGludCBsaW5lLCBmKGludCBjb2x1bW4sIExpc3Q8VD4gZWxlbWVudHMpKSB7CiAgICBNYXA8aW50LCBMaXN0PFQ+PiBsaW5lTWFwID0gX21hcFtsaW5lXTsKICAgIGlmIChsaW5lTWFwICE9IG51bGwpIHsKICAgICAgTGlzdDxpbnQ+IGNvbHVtbnMgPSBsaW5lTWFwLmtleXMudG9MaXN0KCkuLnNvcnQoKTsKICAgICAgY29sdW1ucy5mb3JFYWNoKChpbnQgY29sdW1uKSB7CiAgICAgICAgZihjb2x1bW4sIGxpbmVNYXBbY29sdW1uXSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBsaW5lL2NvbHVtbi9lbGVtZW50IHRyaXBsZXQgaW4gdGhlIG1hcC4KICAvLy8KICAvLy8gW2ZdIGlzIGNhbGxlZCBpbiBpbmNyZWFzaW5nIGxpbmUsIGNvbHVtbiwgZWxlbWVudCBvcmRlci4KICB2b2lkIGZvckVhY2goZihpbnQgbGluZSwgaW50IGNvbHVtbiwgVCBlbGVtZW50KSkgewogICAgTGlzdDxpbnQ+IGxpbmVzID0gX21hcC5rZXlzLnRvTGlzdCgpLi5zb3J0KCk7CiAgICBmb3IgKGludCBsaW5lIGluIGxpbmVzKSB7CiAgICAgIE1hcDxpbnQsIExpc3Q8VD4+IGxpbmVNYXAgPSBfbWFwW2xpbmVdOwogICAgICBMaXN0PGludD4gY29sdW1ucyA9IGxpbmVNYXAua2V5cy50b0xpc3QoKS4uc29ydCgpOwogICAgICBmb3IgKGludCBjb2x1bW4gaW4gY29sdW1ucykgewogICAgICAgIGxpbmVNYXBbY29sdW1uXS5mb3JFYWNoKChlKSA9PiBmKGxpbmUsIGNvbHVtbiwgZSkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGVsZW1lbnQgYXNzb2NpYXRlZCBpbiB0aGUgbWFwLgogIC8vLwogIC8vLyBbZl0gaXMgY2FsbGVkIGluIGluY3JlYXNpbmcgbGluZSwgY29sdW1uLCBlbGVtZW50IG9yZGVyLgogIHZvaWQgZm9yRWFjaEVsZW1lbnQoZihUIGVsZW1lbnQpKSB7CiAgICBmb3JFYWNoKChsaW5lLCBjb2x1bW4sIGVsZW1lbnQpID0+IGYoZWxlbWVudCkpOwogIH0KfQoKLy8vIE1hcCBmcm9tIFtUXSBlbGVtZW50cyB0byBhc3NpZ25lZCBpbmRpY2VzLgpjbGFzcyBJbmRleE1hcDxUPiB7CiAgTWFwPFQsIGludD4gbWFwID0gPFQsIGludD57fTsKCiAgLy8vIFJlZ2lzdGVyIFtlbGVtZW50XSBhbmQgcmV0dXJucyBpdHMgaW5kZXguCiAgaW50IHJlZ2lzdGVyKFQgZWxlbWVudCkgewogICAgcmV0dXJuIG1hcC5wdXRJZkFic2VudChlbGVtZW50LCAoKSA9PiBtYXAubGVuZ3RoKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBbZWxlbWVudF0uCiAgaW50IG9wZXJhdG9yIFtdKFQgZWxlbWVudCkgPT4gbWFwW2VsZW1lbnRdOwoKICAvLy8gUmV0dXJucyB0aGUgaW5kZXhlZCBlbGVtZW50cy4KICBJdGVyYWJsZTxUPiBnZXQgZWxlbWVudHMgPT4gbWFwLmtleXM7Cn0KgccATk48ASQBQDBOHCFJQgEZGAEmGgErGwErQwFGMTMBOisBFBQZGh0gIhQBRUMEAUoXFyUlGS8ZFQYXBAETMi1AMDYgRSouNwE/Hio+QD4jRwoICAEiBAE/MDcBOyQwNTM5DAoIBgE6LggBOjw2Iy4vNQoIBgE2QgEuGScvOSBLBisjPyAeUAY2GSExGSUiGjUvJj4ZKEAgJCogHgQBUTcrIDsiPTk7PgFPPDYQCAEtQB0KKSclIQgBHxsIIAE4ASQQCAEwH0FDRwgBNSBECAEvCAQBPTcXFz8lUSIZIxUIFwQBFE0oJSYoJhc8Iy4cOEE5PUgRS00UNgoICBcEAU4+RjNREQEoBQYPBAE+R05ONx83KS8xExgTJ0pPEyw1QCAYExwfISlKMyMXGkk1ETgKCE0ZEw8IBAIBLBUtEgEuERAEAU5CMC8EAScxMjNRIgFNFkUgFRUTFgYkCSkgFycIKhkSBAIBFyEUAToCATkZQQFGK0EmBAFIGS4pBAFOGTMvBAFNBi4iMhYEAUcbLSwmNyMEAUQGMEIsGzklJAoGBAFBBj81Mh4uOSQ8CAYEATgGPyY0BAIBLxQgATAcNwQBJi4BJCgCAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9zb3VyY2VfbWFwX2J1aWxkZXIuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2pzX2JhY2tlbmQuZGFydIGtLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZDsKCmV4cG9ydCAnYmFja2VuZC5kYXJ0JzsKZXhwb3J0ICdjaGVja2VkX21vZGVfaGVscGVycy5kYXJ0JzsKZXhwb3J0ICdjb25zdGFudF9lbWl0dGVyLmRhcnQnOwpleHBvcnQgJ2N1c3RvbV9lbGVtZW50c19hbmFseXNpcy5kYXJ0JzsKZXhwb3J0ICduYW1lci5kYXJ0JzsKZXhwb3J0ICdub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKDgBOTjwBFAEXJCAoFScBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvanNfYmFja2VuZC5kYXJ0P3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvY29uc3RhbnRfb3JkZXJpbmcuZGFydKMrLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLmNvbnN0YW50X29yZGVyaW5nOwoKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnCiAgICBzaG93IENsYXNzRW50aXR5LCBGaWVsZEVudGl0eSwgTWVtYmVyRW50aXR5LCBUeXBlZGVmRW50aXR5OwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ3NvcnRlci5kYXJ0JyBzaG93IFNvcnRlcjsKCi8vLyBBIGNhbm9uaWNhbCBidXQgYXJiaXRyYXJ5IG9yZGVyaW5nIG9mIGNvbnN0YW50cy4gVGhlIG9yZGVyaW5nIGlzICdzdGFibGUnCi8vLyB1bmRlciBwZXJ0dXJiYXRpb24gb2YgdGhlIHNvdXJjZS4KYWJzdHJhY3QgY2xhc3MgQ29uc3RhbnRPcmRlcmluZyB7CiAgZmFjdG9yeSBDb25zdGFudE9yZGVyaW5nKFNvcnRlciBzb3J0ZXIpID0gX0NvbnN0YW50T3JkZXJpbmc7CgogIGludCBjb21wYXJlKENvbnN0YW50VmFsdWUgYSwgQ29uc3RhbnRWYWx1ZSBiKTsKfQoKY2xhc3MgX0NvbnN0YW50T3JkZXJpbmcKICAgIGltcGxlbWVudHMgQ29uc3RhbnRPcmRlcmluZywgQ29uc3RhbnRWYWx1ZVZpc2l0b3I8aW50LCBDb25zdGFudFZhbHVlPiB7CiAgZmluYWwgU29ydGVyIF9zb3J0ZXI7CiAgX0RhcnRUeXBlT3JkZXJpbmcgX2RhcnRUeXBlT3JkZXJpbmc7CiAgX0NvbnN0YW50T3JkZXJpbmcodGhpcy5fc29ydGVyKSB7CiAgICBfZGFydFR5cGVPcmRlcmluZyA9IG5ldyBfRGFydFR5cGVPcmRlcmluZyh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlKENvbnN0YW50VmFsdWUgYSwgQ29uc3RhbnRWYWx1ZSBiKSA9PiBjb21wYXJlVmFsdWVzKGEsIGIpOwoKICBpbnQgY29tcGFyZVZhbHVlcyhDb25zdGFudFZhbHVlIGEsIENvbnN0YW50VmFsdWUgYikgewogICAgaWYgKGlkZW50aWNhbChhLCBiKSkgcmV0dXJuIDA7CiAgICBpbnQgciA9IGEua2luZC5pbmRleC5jb21wYXJlVG8oYi5raW5kLmluZGV4KTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIGEuYWNjZXB0KHRoaXMsIGIpOwogIH0KCiAgc3RhdGljIGludCBjb21wYXJlTnVsbGFibGU8VD4oaW50IGNvbXBhcmUoVCBhLCBUIGIpLCBUIGEsIFQgYikgewogICAgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpIHJldHVybiAwOwogICAgaWYgKGEgPT0gbnVsbCkgcmV0dXJuIC0xOwogICAgaWYgKGIgPT0gbnVsbCkgcmV0dXJuIDE7CiAgICByZXR1cm4gY29tcGFyZShhLCBiKTsKICB9CgogIHN0YXRpYyBpbnQgY29tcGFyZUxpc3RzPFMsIFQ+KGludCBjb21wYXJlKFMgYSwgVCBiKSwgTGlzdDxTPiBhLCBMaXN0PFQ+IGIpIHsKICAgIGludCByID0gYS5sZW5ndGguY29tcGFyZVRvKGIubGVuZ3RoKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CiAgICAgIHIgPSBjb21wYXJlKGFbaV0sIGJbaV0pOwogICAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgaW50IGNvbXBhcmVDbGFzc2VzKENsYXNzRW50aXR5IGEsIENsYXNzRW50aXR5IGIpIHsKICAgIGludCByID0gYS5uYW1lLmNvbXBhcmVUbyhiLm5hbWUpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gX3NvcnRlci5jb21wYXJlQ2xhc3Nlc0J5TG9jYXRpb24oYSwgYik7CiAgfQoKICBpbnQgY29tcGFyZU1lbWJlcnMoTWVtYmVyRW50aXR5IGEsIE1lbWJlckVudGl0eSBiKSB7CiAgICBpbnQgciA9IGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIF9zb3J0ZXIuY29tcGFyZU1lbWJlcnNCeUxvY2F0aW9uKGEsIGIpOwogIH0KCiAgaW50IGNvbXBhcmVUeXBlZGVmcyhUeXBlZGVmRW50aXR5IGEsIFR5cGVkZWZFbnRpdHkgYikgewogICAgaW50IHIgPSBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBfc29ydGVyLmNvbXBhcmVUeXBlZGVmc0J5TG9jYXRpb24oYSwgYik7CiAgfQoKICBpbnQgY29tcGFyZURhcnRUeXBlcyhEYXJ0VHlwZSBhLCBEYXJ0VHlwZSBiKSB7CiAgICByZXR1cm4gX2RhcnRUeXBlT3JkZXJpbmcuY29tcGFyZShhLCBiKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBhLCBGdW5jdGlvbkNvbnN0YW50VmFsdWUgYikgewogICAgcmV0dXJuIGNvbXBhcmVNZW1iZXJzKGEuZWxlbWVudCwgYi5lbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdE51bGwoTnVsbENvbnN0YW50VmFsdWUgYSwgTnVsbENvbnN0YW50VmFsdWUgYikgewogICAgcmV0dXJuIDA7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXROb25Db25zdGFudChOb25Db25zdGFudFZhbHVlIGEsIE5vbkNvbnN0YW50VmFsdWUgYikgewogICAgcmV0dXJuIDA7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnQoSW50Q29uc3RhbnRWYWx1ZSBhLCBJbnRDb25zdGFudFZhbHVlIGIpIHsKICAgIHJldHVybiBhLmludFZhbHVlLmNvbXBhcmVUbyhiLmludFZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdERvdWJsZShEb3VibGVDb25zdGFudFZhbHVlIGEsIERvdWJsZUNvbnN0YW50VmFsdWUgYikgewogICAgcmV0dXJuIGEuZG91YmxlVmFsdWUuY29tcGFyZVRvKGIuZG91YmxlVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Qm9vbChCb29sQ29uc3RhbnRWYWx1ZSBhLCBCb29sQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgYUludCA9IGEuYm9vbFZhbHVlID8gMSA6IDA7CiAgICBpbnQgYkludCA9IGIuYm9vbFZhbHVlID8gMSA6IDA7CiAgICByZXR1cm4gYUludC5jb21wYXJlVG8oYkludCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRTdHJpbmcoU3RyaW5nQ29uc3RhbnRWYWx1ZSBhLCBTdHJpbmdDb25zdGFudFZhbHVlIGIpIHsKICAgIFN0cmluZyBhU3RyaW5nID0gYS5zdHJpbmdWYWx1ZTsKICAgIFN0cmluZyBiU3RyaW5nID0gYi5zdHJpbmdWYWx1ZTsKICAgIHJldHVybiBhU3RyaW5nLmNvbXBhcmVUbyhiU3RyaW5nKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdExpc3QoTGlzdENvbnN0YW50VmFsdWUgYSwgTGlzdENvbnN0YW50VmFsdWUgYikgewogICAgaW50IHIgPSBjb21wYXJlTGlzdHMoY29tcGFyZVZhbHVlcywgYS5lbnRyaWVzLCBiLmVudHJpZXMpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gY29tcGFyZURhcnRUeXBlcyhhLnR5cGUsIGIudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRTZXQoU2V0Q29uc3RhbnRWYWx1ZSBhLCBTZXRDb25zdGFudFZhbHVlIGIpIHsKICAgIGludCByID0gY29tcGFyZUxpc3RzKGNvbXBhcmVWYWx1ZXMsIGEudmFsdWVzLCBiLnZhbHVlcyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBjb21wYXJlRGFydFR5cGVzKGEudHlwZSwgYi50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdE1hcChNYXBDb25zdGFudFZhbHVlIGEsIE1hcENvbnN0YW50VmFsdWUgYikgewogICAgaW50IHIgPSBjb21wYXJlTGlzdHMoY29tcGFyZVZhbHVlcywgYS5rZXlzLCBiLmtleXMpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByID0gY29tcGFyZUxpc3RzKGNvbXBhcmVWYWx1ZXMsIGEudmFsdWVzLCBiLnZhbHVlcyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBjb21wYXJlRGFydFR5cGVzKGEudHlwZSwgYi50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdENvbnN0cnVjdGVkKENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBhLCBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgYikgewogICAgaW50IHIgPSBjb21wYXJlRGFydFR5cGVzKGEudHlwZSwgYi50eXBlKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwoKICAgIC8vIFRPRE8oc3JhKTogQXZvaWQgYWxsIHRoZXNlIHRlYXItb2Zmcy4KICAgIExpc3Q8RmllbGRFbnRpdHk+IGFGaWVsZHMgPSBhLmZpZWxkcy5rZXlzLnRvTGlzdCgpLi5zb3J0KGNvbXBhcmVNZW1iZXJzKTsKICAgIExpc3Q8RmllbGRFbnRpdHk+IGJGaWVsZHMgPSBiLmZpZWxkcy5rZXlzLnRvTGlzdCgpLi5zb3J0KGNvbXBhcmVNZW1iZXJzKTsKCiAgICByID0gY29tcGFyZUxpc3RzKGNvbXBhcmVNZW1iZXJzLCBhRmllbGRzLCBiRmllbGRzKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwoKICAgIHJldHVybiBjb21wYXJlTGlzdHMoCiAgICAgICAgY29tcGFyZVZhbHVlcywKICAgICAgICBhRmllbGRzLm1hcCgoZmllbGQpID0+IGEuZmllbGRzW2ZpZWxkXSkudG9MaXN0KCksCiAgICAgICAgYUZpZWxkcy5tYXAoKGZpZWxkKSA9PiBiLmZpZWxkc1tmaWVsZF0pLnRvTGlzdCgpKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFR5cGUoVHlwZUNvbnN0YW50VmFsdWUgYSwgVHlwZUNvbnN0YW50VmFsdWUgYikgewogICAgaW50IHIgPSBjb21wYXJlRGFydFR5cGVzKGEucmVwcmVzZW50ZWRUeXBlLCBiLnJlcHJlc2VudGVkVHlwZSk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBjb21wYXJlRGFydFR5cGVzKGEudHlwZSwgYi50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdEludGVyY2VwdG9yKEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBhLCBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgYikgewogICAgcmV0dXJuIGNvbXBhcmVDbGFzc2VzKGEuY2xzLCBiLmNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXREdW1teUludGVyY2VwdG9yKAogICAgICBEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBhLCBEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICAvLyBOZXZlciBlbWl0dGVkLgogICAgcmV0dXJuIDA7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRVbnJlYWNoYWJsZShVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgYSwgVW5yZWFjaGFibGVDb25zdGFudFZhbHVlIGIpIHsKICAgIC8vIE5ldmVyIGVtaXR0ZWQuCiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdEpzTmFtZShKc05hbWVDb25zdGFudFZhbHVlIGEsIEpzTmFtZUNvbnN0YW50VmFsdWUgYikgewogICAgLy8gQW4gb3BhcXVlIGRlZmVycmVkIEpTIEFTVCByZWZlcmVuY2UgdG8gYSBuYW1lLgogICAgcmV0dXJuIDA7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXREZWZlcnJlZEdsb2JhbCgKICAgICAgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGEsIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVWYWx1ZXMoYS5yZWZlcmVuY2VkLCBiLnJlZmVyZW5jZWQpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gYS51bml0LmNvbXBhcmVUbyhiLnVuaXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0SW5zdGFudGlhdGlvbigKICAgICAgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgYSwgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgYikgewogICAgaW50IHIgPSBjb21wYXJlVmFsdWVzKGEuZnVuY3Rpb24sIGIuZnVuY3Rpb24pOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gY29tcGFyZUxpc3RzKGNvbXBhcmVEYXJ0VHlwZXMsIGEudHlwZUFyZ3VtZW50cywgYi50eXBlQXJndW1lbnRzKTsKICB9Cn0KCi8vLyBWaXNpdG9yIGZvciBkaXN0aW5ndWlzaGluZyB0eXBlcyBieSBraW5kLgpjbGFzcyBfRGFydFR5cGVLaW5kVmlzaXRvciBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxpbnQsIE51bGw+IHsKICBjb25zdCBfRGFydFR5cGVLaW5kVmlzaXRvcigpOwoKICBzdGF0aWMgaW50IGtpbmQoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIHR5cGUuYWNjZXB0KGNvbnN0IF9EYXJ0VHlwZUtpbmRWaXNpdG9yKCksIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Vm9pZFR5cGUoY292YXJpYW50IFZvaWRUeXBlIHR5cGUsIF8pID0+IDY7CiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0VHlwZVZhcmlhYmxlVHlwZShjb3ZhcmlhbnQgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBfKSA9PiAzOwogIEBvdmVycmlkZQogIGludCB2aXNpdEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlIHR5cGUsIF8pID0+IDA7CiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0SW50ZXJmYWNlVHlwZShjb3ZhcmlhbnQgSW50ZXJmYWNlVHlwZSB0eXBlLCBfKSA9PiAxOwogIEBvdmVycmlkZQogIGludCB2aXNpdFR5cGVkZWZUeXBlKGNvdmFyaWFudCBUeXBlZGVmVHlwZSB0eXBlLCBfKSA9PiAyOwogIEBvdmVycmlkZQogIGludCB2aXNpdER5bmFtaWNUeXBlKGNvdmFyaWFudCBEeW5hbWljVHlwZSB0eXBlLCBfKSA9PiA1Owp9CgpjbGFzcyBfRGFydFR5cGVPcmRlcmluZyBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxpbnQsIERhcnRUeXBlPiB7CiAgZmluYWwgX0NvbnN0YW50T3JkZXJpbmcgX2NvbnN0YW50T3JkZXJpbmc7CiAgRGFydFR5cGUgX3Jvb3Q7CiAgX0RhcnRUeXBlT3JkZXJpbmcodGhpcy5fY29uc3RhbnRPcmRlcmluZyk7CgogIGludCBjb21wYXJlKERhcnRUeXBlIGEsIERhcnRUeXBlIGIpIHsKICAgIGlmIChhID09IGIpIHJldHVybiAwOwogICAgaW50IHIgPQogICAgICAgIF9EYXJ0VHlwZUtpbmRWaXNpdG9yLmtpbmQoYSkuY29tcGFyZVRvKF9EYXJ0VHlwZUtpbmRWaXNpdG9yLmtpbmQoYikpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICBfcm9vdCA9IGE7CiAgICByID0gYS5hY2NlcHQodGhpcywgYik7CiAgICBfcm9vdCA9IG51bGw7CiAgICByZXR1cm4gcjsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFZvaWRUeXBlKGNvdmFyaWFudCBWb2lkVHlwZSB0eXBlLCBjb3ZhcmlhbnQgVm9pZFR5cGUgb3RoZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbnJlYWNoYWJsZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0VHlwZVZhcmlhYmxlVHlwZSgKICAgICAgY292YXJpYW50IFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgY292YXJpYW50IFR5cGVWYXJpYWJsZVR5cGUgb3RoZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUeXBlIHZhcmlhYmxlcyBhcmUgbm90IGV4cGVjdGVkIGluIGNvbnN0YW50czogJyR0eXBlJyBpbiAnJF9yb290JyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RnVuY3Rpb25UeXBlKAogICAgICBjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlIHR5cGUsIGNvdmFyaWFudCBGdW5jdGlvblR5cGUgb3RoZXIpIHsKICAgIGludCByID0gX2NvbXBhcmVUeXBlQXJndW1lbnRzKHR5cGUucGFyYW1ldGVyVHlwZXMsIG90aGVyLnBhcmFtZXRlclR5cGVzKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgciA9IF9jb21wYXJlVHlwZUFyZ3VtZW50cygKICAgICAgICB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIG90aGVyLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByID0gX0NvbnN0YW50T3JkZXJpbmcuY29tcGFyZUxpc3RzKChTdHJpbmcgYSwgU3RyaW5nIGIpID0+IGEuY29tcGFyZVRvKGIpLAogICAgICAgIHR5cGUubmFtZWRQYXJhbWV0ZXJzLCBvdGhlci5uYW1lZFBhcmFtZXRlcnMpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByID0gX2NvbXBhcmVUeXBlQXJndW1lbnRzKAogICAgICAgIHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcywgb3RoZXIubmFtZWRQYXJhbWV0ZXJUeXBlcyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBjb21wYXJlKHR5cGUucmV0dXJuVHlwZSwgb3RoZXIucmV0dXJuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnRlcmZhY2VUeXBlKAogICAgICBjb3ZhcmlhbnQgSW50ZXJmYWNlVHlwZSB0eXBlLCBjb3ZhcmlhbnQgSW50ZXJmYWNlVHlwZSBvdGhlcikgewogICAgaW50IHIgPSBfY29uc3RhbnRPcmRlcmluZy5jb21wYXJlQ2xhc3Nlcyh0eXBlLmVsZW1lbnQsIG90aGVyLmVsZW1lbnQpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gX2NvbXBhcmVUeXBlQXJndW1lbnRzKHR5cGUudHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRUeXBlZGVmVHlwZSgKICAgICAgY292YXJpYW50IFR5cGVkZWZUeXBlIHR5cGUsIGNvdmFyaWFudCBUeXBlZGVmVHlwZSBvdGhlcikgewogICAgaW50IHIgPSBfY29uc3RhbnRPcmRlcmluZy5jb21wYXJlVHlwZWRlZnModHlwZS5lbGVtZW50LCBvdGhlci5lbGVtZW50KTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIF9jb21wYXJlVHlwZUFyZ3VtZW50cyh0eXBlLnR5cGVBcmd1bWVudHMsIG90aGVyLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RHluYW1pY1R5cGUoCiAgICAgIGNvdmFyaWFudCBEeW5hbWljVHlwZSB0eXBlLCBjb3ZhcmlhbnQgRHluYW1pY1R5cGUgb3RoZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbnJlYWNoYWJsZScpOwogIH0KCiAgaW50IF9jb21wYXJlVHlwZUFyZ3VtZW50cygKICAgICAgTGlzdDxEYXJ0VHlwZT4gYUFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gYkFyZ3VtZW50cykgewogICAgcmV0dXJuIF9Db25zdGFudE9yZGVyaW5nLmNvbXBhcmVMaXN0cyhjb21wYXJlLCBhQXJndW1lbnRzLCBiQXJndW1lbnRzKTsKICB9Cn0KgS0ATk48AS4BIyNAISIBTiYiPwExAgEYTBgnJDUEAQxIATgjMhoeBAFDKh4dGgQBTyoaKR8cBg4EATUmGjMEATcmGjMEATomGjQEATEsBAEMSDEEAQw8DgQBDEEOBAEMOS0EAQxCMwQBDDwkJCEEAQxCJCQnBAEMPD8aLQQBDDk9Gi0EAQw5ORo5Gi0EAQxRLhoBLU5OATgaARkXOjsEAQw8RBotBAEMUSkEAQwdShYOBAEMURYOBAEMQjYOBAEMG0Y3GiUEAQwaRDMaTQQCAS5AIAEjPAQBDDYMRgw+DEAMPAw8AgFBLRItASgaDE4aDxsSDgQBDEkvBAEMHUsgTgQBDBlDThofRBpPNhofPho3BAEMGkVLGksEAQwYQUwaSwQBDBhBLwQBHT5MBAIBNnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvY29uc3RhbnRfb3JkZXJpbmcuZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL2hlYWRlcnMuZGFydIYaLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLmhlYWRlcnM7CgppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CgpTdHJpbmcgZ2VuZXJhdGVkQnkoQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsIHtTdHJpbmcgZmxhdm9yOiAiIn0pIHsKICBTdHJpbmcgc3VmZml4ID0gJyc7CiAgaWYgKG9wdGlvbnMuaGFzQnVpbGRJZCkgewogICAgc3VmZml4ID0gJyB2ZXJzaW9uOiAke29wdGlvbnMuYnVpbGRJZH0nOwogIH0KICBpZiAoZmxhdm9yICE9ICIiKSBmbGF2b3IgPSAiICgkZmxhdm9yKSI7CiAgcmV0dXJuICcvLyBHZW5lcmF0ZWQgYnkgZGFydDJqcyRmbGF2b3IsICcKICAgICAgJ3RoZSBEYXJ0IHRvIEphdmFTY3JpcHQgY29tcGlsZXIkc3VmZml4Lic7Cn0KCmNvbnN0IFN0cmluZyBIT09LU19BUElfVVNBR0UgPSAiIiIKLy8gVGhlIGNvZGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBob29rczoKLy8gZGFydFByaW50KG1lc3NhZ2UpOgovLyAgICBpZiB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaXQgaXMgY2FsbGVkIGluc3RlYWQgb2YgdGhlIERhcnQgW3ByaW50XQovLyAgICBtZXRob2QuCi8vCi8vIGRhcnRNYWluUnVubmVyKG1haW4sIGFyZ3MpOgovLyAgICBpZiB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQsIHRoZSBEYXJ0IFttYWluXSBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZAovLyAgICBkaXJlY3RseS4gSW5zdGVhZCwgYSBjbG9zdXJlIHRoYXQgd2lsbCBpbnZva2UgW21haW5dLCBhbmQgaXRzIGFyZ3VtZW50cwovLyAgICBbYXJnc10gaXMgcGFzc2VkIHRvIFtkYXJ0TWFpblJ1bm5lcl0uCi8vCi8vIGRhcnREZWZlcnJlZExpYnJhcnlMb2FkZXIodXJpLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOgovLyAgICBpZiB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGl0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBkZWZlcnJlZCBsaWJyYXJ5Ci8vICAgIGlzIGxvYWRlZC4gSXQgc2hvdWxkIGxvYWQgYW5kIGV2YWwgdGhlIGphdmFzY3JpcHQgb2YgYHVyaWAsIGFuZCBjYWxsCi8vICAgIHN1Y2Nlc3NDYWxsYmFjay4gSWYgaXQgZmFpbHMgdG8gZG8gc28sIGl0IHNob3VsZCBjYWxsIGVycm9yQ2FsbGJhY2sgd2l0aAovLyAgICBhbiBlcnJvci4KLy8KLy8gZGFydENhbGxJbnN0cnVtZW50YXRpb24oaWQsIHF1YWxpZmllZE5hbWUpOgovLyAgICBpZiB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGl0IHdpbGwgYmUgY2FsbGVkIGF0IGVhY2ggZW50cnkgb2YgYQovLyAgICBtZXRob2Qgb3IgY29uc3RydWN0b3IuIFVzZWQgb25seSB3aGVuIGNvbXBpbGluZyBwcm9ncmFtcyB3aXRoCi8vICAgIC0tZXhwZXJpbWVudC1jYWxsLWluc3RydW1lbnRhdGlvbi4KIiIiOwoqAE5OPAEkARoBQxYcLQQrLDECASMqF0sOAx9OTiwDQ01LTxADL0hEKQUBLHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvaGVhZGVycy5kYXJ0NnNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvdXRpbHMuZGFydIHwLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBBIHBhaXIgb2YgdmFsdWVzLgpjbGFzcyBQYWlyPEUsIEY+IHsKICBFIGZpcnN0OwogIEYgbGFzdDsKCiAgUGFpcih0aGlzLmZpcnN0LCB0aGlzLmxhc3QpOwp9CgovLy8gUmV0dXJucyBhIFtDb21wYXJhdG9yXSB0aGF0IGFzc2VydHMgdGhhdCBpdHMgZmlyc3QgYXJndW1lbnQgaXMgY29tcGFyYWJsZS4KQ29tcGFyYXRvcjxUPiBkZWZhdWx0Q29tcGFyZTxUPigpID0+CiAgICAodmFsdWUxLCB2YWx1ZTIpID0+ICh2YWx1ZTEgYXMgQ29tcGFyYWJsZSkuY29tcGFyZVRvKHZhbHVlMik7ChEATk48ARYTCwoBHwIBTyVCASFwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3V0aWxzLmRhcnRHc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9lbXB0eV91bm1vZGlmaWFibGVfc2V0LmRhcnSHLS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJ3VubW9kaWZpYWJsZV93cmFwcGVycy5kYXJ0JzsKCi8vIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IHVzZSBVbm1vZGlmaWFibGVTZXRNaXhpbiBoZXJlLCBzaW5jZSBjb25zdCBjbGFzc2VzCi8vIGNhbid0IHVzZSBtaXhpbnMuCi8vLyBBbiB1bm1vZGlmaWFibGUsIGVtcHR5IHNldCB0aGF0IGNhbiBoYXZlIGEgY29uc3QgY29uc3RydWN0b3IuCmNsYXNzIEVtcHR5VW5tb2RpZmlhYmxlU2V0PEU+IGV4dGVuZHMgSXRlcmFibGVCYXNlPEU+CiAgICBpbXBsZW1lbnRzIFVubW9kaWZpYWJsZVNldFZpZXc8RT4gewogIHN0YXRpYyBUIF90aHJvdzxUPigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBTZXQiKTsKICB9CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBuZXcgSXRlcmFibGU8RT4uZW1wdHkoKS5pdGVyYXRvcjsKICBpbnQgZ2V0IGxlbmd0aCA9PiAwOwoKICBjb25zdCBFbXB0eVVubW9kaWZpYWJsZVNldCgpOwoKICBFbXB0eVVubW9kaWZpYWJsZVNldDxUPiBjYXN0PFQ+KCkgPT4gbmV3IEVtcHR5VW5tb2RpZmlhYmxlU2V0PFQ+KCk7CiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gZmFsc2U7CiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSA9PiBvdGhlci5pc0VtcHR5OwogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpID0+IG5ldyBTZXQuZnJvbShvdGhlcik7CiAgRSBsb29rdXAoT2JqZWN0IGVsZW1lbnQpID0+IG51bGw7CiAgQGRlcHJlY2F0ZWQKICBFbXB0eVVubW9kaWZpYWJsZVNldDxUPiByZXR5cGU8VD4oKSA9PiBuZXcgRW1wdHlVbm1vZGlmaWFibGVTZXQ8VD4oKTsKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pID0+IHN1cGVyLnNpbmdsZVdoZXJlKHRlc3QpOwogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IG5ldyBFbXB0eVVubW9kaWZpYWJsZVNldDxUPigpOwogIFNldDxFPiB0b1NldCgpID0+IG5ldyBTZXQoKTsKICBTZXQ8RT4gdW5pb24oU2V0PEU+IG90aGVyKSA9PiBuZXcgU2V0LmZyb20ob3RoZXIpOwogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpID0+IG5ldyBTZXQoKTsKICBTZXQ8RT4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcikgPT4gbmV3IFNldCgpOwoKICBib29sIGFkZChFIHZhbHVlKSA9PiBfdGhyb3coKTsKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4gX3Rocm93KCk7CiAgdm9pZCBjbGVhcigpID0+IF90aHJvdygpOwogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSA9PiBfdGhyb3coKTsKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSA9PiBfdGhyb3coKTsKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBfdGhyb3coKTsKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBfdGhyb3coKTsKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSA9PiBfdGhyb3coKTsKfQovAE5OPAEaASUBThVCNigZRQQBQBcBIAFGKj1EJA5IUD8fNTc1ASExHCs5NjY5AgEycGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lbXB0eV91bm1vZGlmaWFibGVfc2V0LmRhcnQ2c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL3Rlc3RpbmcvaWRfdGVzdGluZy5kYXJ0wABXBC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6aW8nOwppbXBvcnQgJ2Fubm90YXRlZF9jb2RlX2hlbHBlci5kYXJ0JzsKaW1wb3J0ICdpZC5kYXJ0JzsKaW1wb3J0ICcuLi9mYXN0YS9jb2xvcnMuZGFydCcgYXMgY29sb3JzOwoKY29uc3QgU3RyaW5nIGNmZU1hcmtlciA9ICdjZmUnOwpjb25zdCBTdHJpbmcgZGFydDJqc01hcmtlciA9ICdkYXJ0MmpzJzsKY29uc3QgU3RyaW5nIGFuYWx5emVyTWFya2VyID0gJ2FuYWx5emVyJzsKCi8vLyBNYXJrZXJzIHVzZWQgaW4gYW5ub3RhdGVkIHRlc3RzIHNoYXJkIGJ5IENGRSwgYW5hbHl6ZXIgYW5kIGRhcnQyanMuCmNvbnN0IExpc3Q8U3RyaW5nPiBzaGFyZWRNYXJrZXJzID0gWwogIGNmZU1hcmtlciwKICBkYXJ0MmpzTWFya2VyLAogIGFuYWx5emVyTWFya2VyLApdOwoKLy8vIGB0cnVlYCBpZiBBTlNJIGNvbG9ycyBhcmUgc3VwcG9ydGVkIGJ5IHN0ZG91dC4KYm9vbCB1c2VDb2xvcnMgPSBzdGRvdXQuc3VwcG9ydHNBbnNpRXNjYXBlczsKCi8vLyBDb2xvcml6ZSBhIG1lc3NhZ2UgW3RleHRdLCBpZiBBTlNJIGNvbG9ycyBhcmUgc3VwcG9ydGVkLgpTdHJpbmcgY29sb3JpemVNZXNzYWdlKFN0cmluZyB0ZXh0KSB7CiAgaWYgKHVzZUNvbG9ycykgewogICAgcmV0dXJuICcke2NvbG9ycy5ZRUxMT1dfQ09MT1J9JHt0ZXh0fSR7Y29sb3JzLkRFRkFVTFRfQ09MT1J9JzsKICB9IGVsc2UgewogICAgcmV0dXJuIHRleHQ7CiAgfQp9CgovLy8gQ29sb3JpemUgYSBtYXRjaGluZyBhbm5vdGF0aW9uIFt0ZXh0XSwgaWYgQU5TSSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KU3RyaW5nIGNvbG9yaXplTWF0Y2goU3RyaW5nIHRleHQpIHsKICBpZiAodXNlQ29sb3JzKSB7CiAgICByZXR1cm4gJyR7Y29sb3JzLkJMVUVfQ09MT1J9JHt0ZXh0fSR7Y29sb3JzLkRFRkFVTFRfQ09MT1J9JzsKICB9IGVsc2UgewogICAgcmV0dXJuIHRleHQ7CiAgfQp9CgovLy8gQ29sb3JpemUgYSBzaW5nbGUgYW5ub3RhdGlvbiBbdGV4dF0sIGlmIEFOU0kgY29sb3JzIGFyZSBzdXBwb3J0ZWQuClN0cmluZyBjb2xvcml6ZVNpbmdsZShTdHJpbmcgdGV4dCkgewogIGlmICh1c2VDb2xvcnMpIHsKICAgIHJldHVybiAnJHtjb2xvcnMuR1JFRU5fQ09MT1J9JHt0ZXh0fSR7Y29sb3JzLkRFRkFVTFRfQ09MT1J9JzsKICB9IGVsc2UgewogICAgcmV0dXJuIHRleHQ7CiAgfQp9CgovLy8gQ29sb3JpemUgdGhlIGFjdHVhbCBhbm5vdGF0aW9uIFt0ZXh0XSwgaWYgQU5TSSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KU3RyaW5nIGNvbG9yaXplQWN0dWFsKFN0cmluZyB0ZXh0KSB7CiAgaWYgKHVzZUNvbG9ycykgewogICAgcmV0dXJuICcke2NvbG9ycy5SRURfQ09MT1J9JHt0ZXh0fSR7Y29sb3JzLkRFRkFVTFRfQ09MT1J9JzsKICB9IGVsc2UgewogICAgcmV0dXJuIHRleHQ7CiAgfQp9CgovLy8gQ29sb3JpemUgYW4gZXhwZWN0ZWQgYW5ub3RhdGlvbiBbdGV4dF0sIGlmIEFOU0kgY29sb3JzIGFyZSBzdXBwb3J0ZWQuClN0cmluZyBjb2xvcml6ZUV4cGVjdGVkKFN0cmluZyB0ZXh0KSB7CiAgaWYgKHVzZUNvbG9ycykgewogICAgcmV0dXJuICcke2NvbG9ycy5HUkVFTl9DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSBkZWxpbWl0ZXIgW3RleHRdLCBpZiBBTlNJIGNvbG9ycyBhcmUgc3VwcG9ydGVkLgpTdHJpbmcgY29sb3JpemVEZWxpbWl0ZXIoU3RyaW5nIHRleHQpIHsKICBpZiAodXNlQ29sb3JzKSB7CiAgICByZXR1cm4gJyR7Y29sb3JzLllFTExPV19DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSBkaWZmcyBbZXhwZWN0ZWRdIGFuZCBbYWN0dWFsXSBhbmQgW2RlbGltaXRlcl0sIGlmIEFOU0kgY29sb3JzIGFyZQovLy8gc3VwcG9ydGVkLgpTdHJpbmcgY29sb3JpemVEaWZmKFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIGRlbGltaXRlciwgU3RyaW5nIGFjdHVhbCkgewogIHJldHVybiAnJHtjb2xvcml6ZUV4cGVjdGVkKGV4cGVjdGVkKX0nCiAgICAgICcke2NvbG9yaXplRGVsaW1pdGVyKGRlbGltaXRlcil9JHtjb2xvcml6ZUFjdHVhbChhY3R1YWwpfSc7Cn0KCi8vLyBDb2xvcml6ZSBhbm5vdGF0aW9uIGRlbGltaXRlcnMgW3N0YXJ0XSBhbmQgW2VuZF0gc3Vycm91bmRpbmcgW3RleHRdLCBpZgovLy8gQU5TSSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KU3RyaW5nIGNvbG9yaXplQW5ub3RhdGlvbihTdHJpbmcgc3RhcnQsIFN0cmluZyB0ZXh0LCBTdHJpbmcgZW5kKSB7CiAgcmV0dXJuICcke2NvbG9yaXplRGVsaW1pdGVyKHN0YXJ0KX0kdGV4dCR7Y29sb3JpemVEZWxpbWl0ZXIoZW5kKX0nOwp9CgovLy8gRW5jYXBzdWxhdGVzIHRoZSBtZW1iZXIgZGF0YSBjb21wdXRlZCBmb3IgZWFjaCBzb3VyY2UgZmlsZSBvZiBpbnRlcmVzdC4KLy8vIEl0J3MgYSBnbG9yaWZpZWQgd3JhcHBlciBhcm91bmQgYSBtYXAgb2YgbWFwcywgYnV0IHdyaXR0ZW4gdGhpcyB3YXkgdG8KLy8vIHByb3ZpZGUgYSBsaXR0bGUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGl0J3MgZG9pbmcuIFtEYXRhVHlwZV0gcmVmZXJzCi8vLyB0byB0aGUgdHlwZSB0aGlzIG1hcCBpcyBob2xkaW5nIC0tIGl0IGlzIGVpdGhlciBbSWRWYWx1ZV0gb3IgW0FjdHVhbERhdGFdLgpjbGFzcyBNZW1iZXJBbm5vdGF0aW9uczxEYXRhVHlwZT4gewogIC8vLyBGb3IgZWFjaCBVcmksIHdlIGNyZWF0ZSBhIG1hcCBhc3NvY2lhdGluZyBhbiBlbGVtZW50IGlkIHdpdGggaXRzCiAgLy8vIGNvcnJlc3BvbmRpbmcgYW5ub3RhdGlvbnMuCiAgZmluYWwgTWFwPFVyaSwgTWFwPElkLCBEYXRhVHlwZT4+IF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZSA9CiAgICAgIG5ldyBNYXA8VXJpLCBNYXA8SWQsIERhdGFUeXBlPj4oKTsKCiAgLy8vIE1lbWJlciBvciBjbGFzcyBhbm5vdGF0aW9ucyB0aGF0IGRvbid0IHJlZmVyIHRvIGFueSBvZiB0aGUgdXNlciBmaWxlcy4KICBmaW5hbCBNYXA8SWQsIERhdGFUeXBlPiBnbG9iYWxEYXRhID0gPElkLCBEYXRhVHlwZT57fTsKCiAgdm9pZCBvcGVyYXRvciBbXT0oVXJpIGZpbGUsIE1hcDxJZCwgRGF0YVR5cGU+IGNvbXB1dGVkRGF0YSkgewogICAgX2NvbXB1dGVkRGF0YUZvckVhY2hGaWxlW2ZpbGVdID0gY29tcHV0ZWREYXRhOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihVcmkgZmlsZSwgTWFwPElkLCBEYXRhVHlwZT4gY29tcHV0ZWREYXRhKSkgewogICAgX2NvbXB1dGVkRGF0YUZvckVhY2hGaWxlLmZvckVhY2goZik7CiAgfQoKICBNYXA8SWQsIERhdGFUeXBlPiBvcGVyYXRvciBbXShVcmkgZmlsZSkgewogICAgaWYgKCFfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGUuY29udGFpbnNLZXkoZmlsZSkpIHsKICAgICAgX2NvbXB1dGVkRGF0YUZvckVhY2hGaWxlW2ZpbGVdID0gPElkLCBEYXRhVHlwZT57fTsKICAgIH0KICAgIHJldHVybiBfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGVbZmlsZV07CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnTWVtYmVyQW5ub3RhdGlvbnMoJyk7CiAgICBTdHJpbmcgY29tbWEgPSAnJzsKICAgIGlmIChfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGUuaXNOb3RFbXB0eSAmJgogICAgICAgIChfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGUubGVuZ3RoID4gMSB8fAogICAgICAgICAgICBfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGUudmFsdWVzLnNpbmdsZS5pc05vdEVtcHR5KSkgewogICAgICBzYi53cml0ZSgnZGF0YTp7Jyk7CiAgICAgIF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZS5mb3JFYWNoKChVcmkgdXJpLCBNYXA8SWQsIERhdGFUeXBlPiBkYXRhKSB7CiAgICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICAgIHNiLndyaXRlKCckdXJpOicpOwogICAgICAgIHNiLndyaXRlKGRhdGEpOwogICAgICAgIGNvbW1hID0gJywnOwogICAgICB9KTsKICAgICAgc2Iud3JpdGUoJ30nKTsKICAgIH0KICAgIGlmIChnbG9iYWxEYXRhLmlzTm90RW1wdHkpIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnZ2xvYmFsOicpOwogICAgICBzYi53cml0ZShnbG9iYWxEYXRhKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBDb21wdXRlIGEgW01lbWJlckFubm90YXRpb25zXSBvYmplY3QgZnJvbSBbY29kZV0gZm9yIGVhY2ggbWFya2VyIGluIFttYXBzXQovLy8gc3BlY2lmeWluZyB0aGUgZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCi8vLwovLy8gSWYgYW4gYW5ub3RhdGlvbiBzdGFydHMgd2l0aCBhIG1hcmtlciwgaXQgaXMgb25seSBleHBlY3RlZCBmb3IgdGhlCi8vLyBjb3JyZXNwb25kaW5nIHRlc3QgY29uZmlndXJhdGlvbi4gT3RoZXJ3aXNlIGl0IGlzIGV4cGVjdGVkIGZvciBhbGwKLy8vIGNvbmZpZ3VyYXRpb25zLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IGFuIGVtcHR5IG1hcmtlciBzZXQuCnZvaWQgY29tcHV0ZUV4cGVjdGVkTWFwKFVyaSBzb3VyY2VVcmksIFN0cmluZyBmaWxlbmFtZSwgQW5ub3RhdGVkQ29kZSBjb2RlLAogICAgTWFwPFN0cmluZywgTWVtYmVyQW5ub3RhdGlvbnM8SWRWYWx1ZT4+IG1hcHMsCiAgICB7dm9pZCBvbkZhaWx1cmUoU3RyaW5nIG1lc3NhZ2UpfSkgewogIExpc3Q8U3RyaW5nPiBtYXBLZXlzID0gbWFwcy5rZXlzLnRvTGlzdCgpOwogIE1hcDxTdHJpbmcsIEFubm90YXRlZENvZGU+IHNwbGl0ID0gc3BsaXRCeVByZWZpeGVzKGNvZGUsIG1hcEtleXMpOwoKICBzcGxpdC5mb3JFYWNoKChTdHJpbmcgbWFya2VyLCBBbm5vdGF0ZWRDb2RlIGNvZGUpIHsKICAgIE1lbWJlckFubm90YXRpb25zPElkVmFsdWU+IGZpbGVBbm5vdGF0aW9ucyA9IG1hcHNbbWFya2VyXTsKICAgIGFzc2VydChmaWxlQW5ub3RhdGlvbnMgIT0gbnVsbCwgIk5vIGFubm90YXRpb25zIGZvciAkbWFya2VyIGluICRtYXBzIik7CiAgICBNYXA8SWQsIElkVmFsdWU+IGV4cGVjdGVkVmFsdWVzID0gZmlsZUFubm90YXRpb25zW3NvdXJjZVVyaV07CiAgICBmb3IgKEFubm90YXRpb24gYW5ub3RhdGlvbiBpbiBjb2RlLmFubm90YXRpb25zKSB7CiAgICAgIFN0cmluZyB0ZXh0ID0gYW5ub3RhdGlvbi50ZXh0OwogICAgICBJZFZhbHVlIGlkVmFsdWUgPSBJZFZhbHVlLmRlY29kZShzb3VyY2VVcmksIGFubm90YXRpb24ub2Zmc2V0LCB0ZXh0KTsKICAgICAgaWYgKGlkVmFsdWUuaWQuaXNHbG9iYWwpIHsKICAgICAgICBpZiAoZmlsZUFubm90YXRpb25zLmdsb2JhbERhdGEuY29udGFpbnNLZXkoaWRWYWx1ZS5pZCkpIHsKICAgICAgICAgIG9uRmFpbHVyZSgiRXJyb3IgaW4gdGVzdCAnJGZpbGVuYW1lJzogIgogICAgICAgICAgICAgICJEdXBsaWNhdGUgYW5ub3RhdGlvbnMgZm9yICR7aWRWYWx1ZS5pZH0gaW4gJG1hcmtlcjogIgogICAgICAgICAgICAgICIke2lkVmFsdWV9IGFuZCAke2ZpbGVBbm5vdGF0aW9ucy5nbG9iYWxEYXRhW2lkVmFsdWUuaWRdfS4iKTsKICAgICAgICB9CiAgICAgICAgZmlsZUFubm90YXRpb25zLmdsb2JhbERhdGFbaWRWYWx1ZS5pZF0gPSBpZFZhbHVlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChleHBlY3RlZFZhbHVlcy5jb250YWluc0tleShpZFZhbHVlLmlkKSkgewogICAgICAgICAgb25GYWlsdXJlKCJFcnJvciBpbiB0ZXN0ICckZmlsZW5hbWUnOiAiCiAgICAgICAgICAgICAgIkR1cGxpY2F0ZSBhbm5vdGF0aW9ucyBmb3IgJHtpZFZhbHVlLmlkfSBpbiAkbWFya2VyOiAiCiAgICAgICAgICAgICAgIiR7aWRWYWx1ZX0gYW5kICR7ZXhwZWN0ZWRWYWx1ZXNbaWRWYWx1ZS5pZF19LiIpOwogICAgICAgIH0KICAgICAgICBleHBlY3RlZFZhbHVlc1tpZFZhbHVlLmlkXSA9IGlkVmFsdWU7CiAgICAgIH0KICAgIH0KICB9KTsKfQoKLy8vIENyZWF0ZXMgYSBbVGVzdERhdGFdIG9iamVjdCBmb3IgdGhlIGFubm90YXRlZCB0ZXN0IGluIFt0ZXN0RmlsZV0uCi8vLwovLy8gSWYgW3Rlc3RGaWxlXSBpcyBhIGZpbGUsIHVzZSB0aGF0IGRpcmVjdGx5LiBJZiBpdCdzIGEgZGlyZWN0b3J5IGluY2x1ZGUKLy8vIGV2ZXJ5dGhpbmcgaW4gdGhhdCBkaXJlY3RvcnkuCi8vLwovLy8gSWYgW3Rlc3RMaWJEaXJlY3RvcnldIGlzIG5vdCBgbnVsbGAsIGZpbGVzIGluIFt0ZXN0TGliRGlyZWN0b3J5XSB3aXRoIHRoZQovLy8gW3Rlc3RGaWxlXSBuYW1lIGFzIGEgcHJlZml4IGFyZSBpbmNsdWRlZC4KVGVzdERhdGEgY29tcHV0ZVRlc3REYXRhKEZpbGVTeXN0ZW1FbnRpdHkgdGVzdEZpbGUsCiAgICB7SXRlcmFibGU8U3RyaW5nPiBzdXBwb3J0ZWRNYXJrZXJzLAogICAgVXJpIGNyZWF0ZVVyaUZvckZpbGVOYW1lKFN0cmluZyBmaWxlTmFtZSksCiAgICB2b2lkIG9uRmFpbHVyZShTdHJpbmcgbWVzc2FnZSl9KSB7CiAgVXJpIGVudHJ5UG9pbnQgPSBjcmVhdGVVcmlGb3JGaWxlTmFtZSgnbWFpbi5kYXJ0Jyk7CgogIFN0cmluZyB0ZXN0TmFtZTsKICBGaWxlIG1haW5UZXN0RmlsZTsKICBVcmkgdGVzdEZpbGVVcmkgPSB0ZXN0RmlsZS51cmk7CiAgTWFwPFN0cmluZywgRmlsZT4gYWRkaXRpb25hbEZpbGVzOwogIGlmICh0ZXN0RmlsZSBpcyBGaWxlKSB7CiAgICB0ZXN0TmFtZSA9IHRlc3RGaWxlVXJpLnBhdGhTZWdtZW50cy5sYXN0OwogICAgbWFpblRlc3RGaWxlID0gdGVzdEZpbGU7CiAgfSBlbHNlIGlmICh0ZXN0RmlsZSBpcyBEaXJlY3RvcnkpIHsKICAgIHRlc3ROYW1lID0gdGVzdEZpbGVVcmkucGF0aFNlZ21lbnRzW3Rlc3RGaWxlVXJpLnBhdGhTZWdtZW50cy5sZW5ndGggLSAyXTsKICAgIGFkZGl0aW9uYWxGaWxlcyA9IG5ldyBNYXA8U3RyaW5nLCBGaWxlPigpOwogICAgZm9yIChGaWxlU3lzdGVtRW50aXR5IGVudHJ5IGluIHRlc3RGaWxlLmxpc3RTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSkpIHsKICAgICAgaWYgKGVudHJ5IGlzISBGaWxlKSBjb250aW51ZTsKICAgICAgaWYgKGVudHJ5LnVyaS5wYXRoU2VnbWVudHMubGFzdCA9PSAibWFpbi5kYXJ0IikgewogICAgICAgIG1haW5UZXN0RmlsZSA9IGVudHJ5OwogICAgICB9IGVsc2UgewogICAgICAgIGFkZGl0aW9uYWxGaWxlc1tlbnRyeS51cmkucGF0aC5zdWJzdHJpbmcodGVzdEZpbGUudXJpLnBhdGgubGVuZ3RoKV0gPQogICAgICAgICAgICBlbnRyeTsKICAgICAgfQogICAgfQogIH0KCiAgU3RyaW5nIGFubm90YXRlZENvZGUgPSBuZXcgRmlsZS5mcm9tVXJpKG1haW5UZXN0RmlsZS51cmkpLnJlYWRBc1N0cmluZ1N5bmMoKTsKICBNYXA8VXJpLCBBbm5vdGF0ZWRDb2RlPiBjb2RlID0gewogICAgZW50cnlQb2ludDoKICAgICAgICBuZXcgQW5ub3RhdGVkQ29kZS5mcm9tVGV4dChhbm5vdGF0ZWRDb2RlLCBjb21tZW50U3RhcnQsIGNvbW1lbnRFbmQpCiAgfTsKICBNYXA8U3RyaW5nLCBNZW1iZXJBbm5vdGF0aW9uczxJZFZhbHVlPj4gZXhwZWN0ZWRNYXBzID0ge307CiAgZm9yIChTdHJpbmcgdGVzdE1hcmtlciBpbiBzdXBwb3J0ZWRNYXJrZXJzKSB7CiAgICBleHBlY3RlZE1hcHNbdGVzdE1hcmtlcl0gPSBuZXcgTWVtYmVyQW5ub3RhdGlvbnM8SWRWYWx1ZT4oKTsKICB9CiAgY29tcHV0ZUV4cGVjdGVkTWFwKGVudHJ5UG9pbnQsIHRlc3RGaWxlLnVyaS5wYXRoU2VnbWVudHMubGFzdCwKICAgICAgY29kZVtlbnRyeVBvaW50XSwgZXhwZWN0ZWRNYXBzLAogICAgICBvbkZhaWx1cmU6IG9uRmFpbHVyZSk7CiAgTWFwPFN0cmluZywgU3RyaW5nPiBtZW1vcnlTb3VyY2VGaWxlcyA9IHsKICAgIGVudHJ5UG9pbnQucGF0aDogY29kZVtlbnRyeVBvaW50XS5zb3VyY2VDb2RlCiAgfTsKCiAgaWYgKGFkZGl0aW9uYWxGaWxlcyAhPSBudWxsKSB7CiAgICBmb3IgKE1hcEVudHJ5PFN0cmluZywgRmlsZT4gYWRkaXRpb25hbEZpbGVEYXRhIGluIGFkZGl0aW9uYWxGaWxlcy5lbnRyaWVzKSB7CiAgICAgIFN0cmluZyBsaWJGaWxlTmFtZSA9IGFkZGl0aW9uYWxGaWxlRGF0YS5rZXk7CiAgICAgIEZpbGUgbGliRW50aXR5ID0gYWRkaXRpb25hbEZpbGVEYXRhLnZhbHVlOwogICAgICBVcmkgbGliRmlsZVVyaSA9IGNyZWF0ZVVyaUZvckZpbGVOYW1lKGxpYkZpbGVOYW1lKTsKICAgICAgU3RyaW5nIGxpYkNvZGUgPSBsaWJFbnRpdHkucmVhZEFzU3RyaW5nU3luYygpOwogICAgICBBbm5vdGF0ZWRDb2RlIGFubm90YXRlZExpYkNvZGUgPQogICAgICAgICAgbmV3IEFubm90YXRlZENvZGUuZnJvbVRleHQobGliQ29kZSwgY29tbWVudFN0YXJ0LCBjb21tZW50RW5kKTsKICAgICAgbWVtb3J5U291cmNlRmlsZXNbbGliRmlsZVVyaS5wYXRoXSA9IGFubm90YXRlZExpYkNvZGUuc291cmNlQ29kZTsKICAgICAgY29kZVtsaWJGaWxlVXJpXSA9IGFubm90YXRlZExpYkNvZGU7CiAgICAgIGNvbXB1dGVFeHBlY3RlZE1hcCgKICAgICAgICAgIGxpYkZpbGVVcmksIGxpYkZpbGVOYW1lLCBhbm5vdGF0ZWRMaWJDb2RlLCBleHBlY3RlZE1hcHMsCiAgICAgICAgICBvbkZhaWx1cmU6IG9uRmFpbHVyZSk7CiAgICB9CiAgfQoKICByZXR1cm4gbmV3IFRlc3REYXRhKAogICAgICB0ZXN0TmFtZSwgdGVzdEZpbGVVcmksIGVudHJ5UG9pbnQsIG1lbW9yeVNvdXJjZUZpbGVzLCBjb2RlLCBleHBlY3RlZE1hcHMpOwp9CgovLy8gRGF0YSBmb3IgYW4gYW5ub3RhdGVkIHRlc3QuCmNsYXNzIFRlc3REYXRhIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBVcmkgdGVzdEZpbGVVcmk7CiAgZmluYWwgVXJpIGVudHJ5UG9pbnQ7CiAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBtZW1vcnlTb3VyY2VGaWxlczsKICBmaW5hbCBNYXA8VXJpLCBBbm5vdGF0ZWRDb2RlPiBjb2RlOwogIGZpbmFsIE1hcDxTdHJpbmcsIE1lbWJlckFubm90YXRpb25zPElkVmFsdWU+PiBleHBlY3RlZE1hcHM7CgogIFRlc3REYXRhKHRoaXMubmFtZSwgdGhpcy50ZXN0RmlsZVVyaSwgdGhpcy5lbnRyeVBvaW50LCB0aGlzLm1lbW9yeVNvdXJjZUZpbGVzLAogICAgICB0aGlzLmNvZGUsIHRoaXMuZXhwZWN0ZWRNYXBzKTsKfQoKLy8vIFRoZSBhY3R1YWwgcmVzdWx0IGNvbXB1dGVkIGZvciBhbiBhbm5vdGF0ZWQgdGVzdC4KYWJzdHJhY3QgY2xhc3MgQ29tcGlsZWREYXRhPFQ+IHsKICBmaW5hbCBVcmkgbWFpblVyaTsKCiAgLy8vIEZvciBlYWNoIFVyaSwgYSBtYXAgYXNzb2NpYXRpbmcgYW4gZWxlbWVudCBpZCB3aXRoIHRoZSBpbnN0cnVtZW50YXRpb24KICAvLy8gZGF0YSB3ZSd2ZSBjb2xsZWN0ZWQgZm9yIGl0LgogIGZpbmFsIE1hcDxVcmksIE1hcDxJZCwgQWN0dWFsRGF0YTxUPj4+IGFjdHVhbE1hcHM7CgogIC8vLyBDb2xsZWN0ZWQgaW5zdHJ1bWVudGF0aW9uIGRhdGEgdGhhdCBkb2Vzbid0IHJlZmVyIHRvIGFueSBvZiB0aGUgdXNlcgogIC8vLyBmaWxlcy4gIChFLmcuIGluZm9ybWF0aW9uIHRoZSB0ZXN0IGhhcyBjb2xsZWN0ZWQgYWJvdXQgZmlsZXMgaW4KICAvLy8gYGRhcnQ6Y29yZWApLgogIGZpbmFsIE1hcDxJZCwgQWN0dWFsRGF0YTxUPj4gZ2xvYmFsRGF0YTsKCiAgQ29tcGlsZWREYXRhKHRoaXMubWFpblVyaSwgdGhpcy5hY3R1YWxNYXBzLCB0aGlzLmdsb2JhbERhdGEpOwoKICBNYXA8aW50LCBMaXN0PFN0cmluZz4+IGNvbXB1dGVBbm5vdGF0aW9ucyhVcmkgdXJpKSB7CiAgICBNYXA8SWQsIEFjdHVhbERhdGE8VD4+IGFjdHVhbE1hcCA9IGFjdHVhbE1hcHNbdXJpXTsKICAgIE1hcDxpbnQsIExpc3Q8U3RyaW5nPj4gYW5ub3RhdGlvbnMgPSA8aW50LCBMaXN0PFN0cmluZz4+e307CiAgICBhY3R1YWxNYXAuZm9yRWFjaCgoSWQgaWQsIEFjdHVhbERhdGE8VD4gZGF0YSkgewogICAgICBTdHJpbmcgdmFsdWUxID0gJyR7ZGF0YS52YWx1ZX0nOwogICAgICBhbm5vdGF0aW9ucwogICAgICAgICAgLnB1dElmQWJzZW50KGRhdGEub2Zmc2V0LCAoKSA9PiBbXSkKICAgICAgICAgIC5hZGQoY29sb3JpemVBY3R1YWwodmFsdWUxKSk7CiAgICB9KTsKICAgIHJldHVybiBhbm5vdGF0aW9uczsKICB9CgogIE1hcDxpbnQsIExpc3Q8U3RyaW5nPj4gY29tcHV0ZURpZmZBbm5vdGF0aW9uc0FnYWluc3QoCiAgICAgIE1hcDxJZCwgQWN0dWFsRGF0YTxUPj4gdGhpc01hcCwgTWFwPElkLCBBY3R1YWxEYXRhPFQ+PiBvdGhlck1hcCwgVXJpIHVyaSwKICAgICAge2Jvb2wgaW5jbHVkZU1hdGNoZXM6IGZhbHNlfSkgewogICAgTWFwPGludCwgTGlzdDxTdHJpbmc+PiBhbm5vdGF0aW9ucyA9IDxpbnQsIExpc3Q8U3RyaW5nPj57fTsKICAgIHRoaXNNYXAuZm9yRWFjaCgoSWQgaWQsIEFjdHVhbERhdGE8VD4gdGhpc0RhdGEpIHsKICAgICAgQWN0dWFsRGF0YTxUPiBvdGhlckRhdGEgPSBvdGhlck1hcFtpZF07CiAgICAgIFN0cmluZyB0aGlzVmFsdWUgPSAnJHt0aGlzRGF0YS52YWx1ZX0nOwogICAgICBpZiAodGhpc0RhdGEudmFsdWUgIT0gb3RoZXJEYXRhPy52YWx1ZSkgewogICAgICAgIFN0cmluZyBvdGhlclZhbHVlID0gJyR7b3RoZXJEYXRhPy52YWx1ZSA/PyAnLS0tJ30nOwogICAgICAgIGFubm90YXRpb25zCiAgICAgICAgICAgIC5wdXRJZkFic2VudCh0aGlzRGF0YS5vZmZzZXQsICgpID0+IFtdKQogICAgICAgICAgICAuYWRkKGNvbG9yaXplRGlmZih0aGlzVmFsdWUsICcgfCAnLCBvdGhlclZhbHVlKSk7CiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZU1hdGNoZXMpIHsKICAgICAgICBhbm5vdGF0aW9ucwogICAgICAgICAgICAucHV0SWZBYnNlbnQodGhpc0RhdGEub2Zmc2V0LCAoKSA9PiBbXSkKICAgICAgICAgICAgLmFkZChjb2xvcml6ZU1hdGNoKHRoaXNWYWx1ZSkpOwogICAgICB9CiAgICB9KTsKICAgIG90aGVyTWFwLmZvckVhY2goKElkIGlkLCBBY3R1YWxEYXRhPFQ+IG90aGVyRGF0YSkgewogICAgICBpZiAoIXRoaXNNYXAuY29udGFpbnNLZXkoaWQpKSB7CiAgICAgICAgU3RyaW5nIHRoaXNWYWx1ZSA9ICctLS0nOwogICAgICAgIFN0cmluZyBvdGhlclZhbHVlID0gJyR7b3RoZXJEYXRhLnZhbHVlfSc7CiAgICAgICAgYW5ub3RhdGlvbnMKICAgICAgICAgICAgLnB1dElmQWJzZW50KG90aGVyRGF0YS5vZmZzZXQsICgpID0+IFtdKQogICAgICAgICAgICAuYWRkKGNvbG9yaXplRGlmZih0aGlzVmFsdWUsICcgfCAnLCBvdGhlclZhbHVlKSk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGFubm90YXRpb25zOwogIH0KCiAgaW50IGdldE9mZnNldEZyb21JZChJZCBpZCwgVXJpIHVyaSk7CgogIHZvaWQgcmVwb3J0RXJyb3IoVXJpIHVyaSwgaW50IG9mZnNldCwgU3RyaW5nIG1lc3NhZ2UsIHtib29sIHN1Y2NpbmN0OiBmYWxzZX0pOwp9CgovLy8gSW50ZXJmYWNlIHVzZWQgZm9yIGludGVycHJldGluZyBhbm5vdGF0aW9ucy4KYWJzdHJhY3QgY2xhc3MgRGF0YUludGVycHJldGVyPFQ+IHsKICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgW2FjdHVhbERhdGFdIHNhdGlzZmllcyB0aGUgW2V4cGVjdGVkRGF0YV0gYW5ub3RhdGlvbi4KICAvLy8gT3RoZXJ3aXNlLCBhIG1lc3NhZ2UgaXMgcmV0dXJuZWQgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgLy8vIHByb2JsZW1zIGZvdW5kLgogIFN0cmluZyBpc0FzRXhwZWN0ZWQoVCBhY3R1YWxEYXRhLCBTdHJpbmcgZXhwZWN0ZWREYXRhKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFthY3R1YWxEYXRhXSBjb3JyZXNwb25kcyB0byBlbXB0eSBkYXRhLgogIGJvb2wgaXNFbXB0eShUIGFjdHVhbERhdGEpOwoKICAvLy8gUmV0dXJucyBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgW2FjdHVhbERhdGFdLgogIFN0cmluZyBnZXRUZXh0KFQgYWN0dWFsRGF0YSk7Cn0KCi8vLyBEZWZhdWx0IGRhdGEgaW50ZXJwcmV0ZXIgZm9yIHN0cmluZyBkYXRhLgpjbGFzcyBTdHJpbmdEYXRhSW50ZXJwcmV0ZXIgaW1wbGVtZW50cyBEYXRhSW50ZXJwcmV0ZXI8U3RyaW5nPiB7CiAgY29uc3QgU3RyaW5nRGF0YUludGVycHJldGVyKCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBpc0FzRXhwZWN0ZWQoU3RyaW5nIGFjdHVhbERhdGEsIFN0cmluZyBleHBlY3RlZERhdGEpIHsKICAgIGFjdHVhbERhdGEgPz89ICcnOwogICAgZXhwZWN0ZWREYXRhID8/PSAnJzsKICAgIGlmIChhY3R1YWxEYXRhICE9IGV4cGVjdGVkRGF0YSkgewogICAgICByZXR1cm4gIkV4cGVjdGVkICRleHBlY3RlZERhdGEsIGZvdW5kICRhY3R1YWxEYXRhIjsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0VtcHR5KFN0cmluZyBhY3R1YWxEYXRhKSB7CiAgICByZXR1cm4gYWN0dWFsRGF0YSA9PSAnJzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRUZXh0KFN0cmluZyBhY3R1YWxEYXRhKSB7CiAgICByZXR1cm4gYWN0dWFsRGF0YTsKICB9Cn0KClN0cmluZyB3aXRoQW5ub3RhdGlvbnMoU3RyaW5nIHNvdXJjZUNvZGUsIE1hcDxpbnQsIExpc3Q8U3RyaW5nPj4gYW5ub3RhdGlvbnMpIHsKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgaW50IGVuZCA9IDA7CiAgZm9yIChpbnQgb2Zmc2V0IGluIGFubm90YXRpb25zLmtleXMudG9MaXN0KCkuLnNvcnQoKSkgewogICAgaWYgKG9mZnNldCA+PSBzb3VyY2VDb2RlLmxlbmd0aCkgewogICAgICBzYi53cml0ZSgnLi4uJyk7CiAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgfQogICAgaWYgKG9mZnNldCA+IGVuZCkgewogICAgICBzYi53cml0ZShzb3VyY2VDb2RlLnN1YnN0cmluZyhlbmQsIG9mZnNldCkpOwogICAgfQogICAgZm9yIChTdHJpbmcgYW5ub3RhdGlvbiBpbiBhbm5vdGF0aW9uc1tvZmZzZXRdKSB7CiAgICAgIHNiLndyaXRlKGNvbG9yaXplQW5ub3RhdGlvbignLyonLCBhbm5vdGF0aW9uLCAnKi8nKSk7CiAgICB9CiAgICBlbmQgPSBvZmZzZXQ7CiAgfQogIGlmIChlbmQgPCBzb3VyY2VDb2RlLmxlbmd0aCkgewogICAgc2Iud3JpdGUoc291cmNlQ29kZS5zdWJzdHJpbmcoZW5kKSk7CiAgfQogIHJldHVybiBzYi50b1N0cmluZygpOwp9CgovLy8gQ29tcHV0ZWQgYW5kIGV4cGVjdGVkIGRhdGEgZm9yIGFuIGFubm90YXRlZCB0ZXN0LiBUaGlzIGlzIHVzZWQgZm9yIGNoZWNraW5nCi8vLyBhbmQgZGlzcGxheWluZyByZXN1bHRzIG9mIGFuIGFubm90YXRlZCB0ZXN0LgpjbGFzcyBJZERhdGE8VD4gewogIGZpbmFsIE1hcDxVcmksIEFubm90YXRlZENvZGU+IGNvZGU7CiAgZmluYWwgTWVtYmVyQW5ub3RhdGlvbnM8SWRWYWx1ZT4gZXhwZWN0ZWRNYXBzOwogIGZpbmFsIENvbXBpbGVkRGF0YTxUPiBfY29tcGlsZWREYXRhOwogIGZpbmFsIE1lbWJlckFubm90YXRpb25zPEFjdHVhbERhdGE8VD4+IF9hY3R1YWxNYXBzID0gbmV3IE1lbWJlckFubm90YXRpb25zKCk7CgogIElkRGF0YSh0aGlzLmNvZGUsIHRoaXMuZXhwZWN0ZWRNYXBzLCB0aGlzLl9jb21waWxlZERhdGEpIHsKICAgIGZvciAoVXJpIHVyaSBpbiBjb2RlLmtleXMpIHsKICAgICAgX2FjdHVhbE1hcHNbdXJpXSA9IF9jb21waWxlZERhdGEuYWN0dWFsTWFwc1t1cmldID8/IDxJZCwgQWN0dWFsRGF0YTxUPj57fTsKICAgIH0KICAgIF9hY3R1YWxNYXBzLmdsb2JhbERhdGEuYWRkQWxsKF9jb21waWxlZERhdGEuZ2xvYmFsRGF0YSk7CiAgfQoKICBVcmkgZ2V0IG1haW5VcmkgPT4gX2NvbXBpbGVkRGF0YS5tYWluVXJpOwogIE1lbWJlckFubm90YXRpb25zPEFjdHVhbERhdGE8VD4+IGdldCBhY3R1YWxNYXBzID0+IF9hY3R1YWxNYXBzOwoKICBTdHJpbmcgYWN0dWFsQ29kZShVcmkgdXJpKSB7CiAgICBNYXA8aW50LCBMaXN0PFN0cmluZz4+IGFubm90YXRpb25zID0gPGludCwgTGlzdDxTdHJpbmc+Pnt9OwogICAgYWN0dWFsTWFwc1t1cmldLmZvckVhY2goKElkIGlkLCBBY3R1YWxEYXRhPFQ+IGRhdGEpIHsKICAgICAgYW5ub3RhdGlvbnMucHV0SWZBYnNlbnQoZGF0YS5vZmZzZXQsICgpID0+IFtdKS5hZGQoJyR7ZGF0YS52YWx1ZX0nKTsKICAgIH0pOwogICAgcmV0dXJuIHdpdGhBbm5vdGF0aW9ucyhjb2RlW3VyaV0uc291cmNlQ29kZSwgYW5ub3RhdGlvbnMpOwogIH0KCiAgU3RyaW5nIGRpZmZDb2RlKFVyaSB1cmksIERhdGFJbnRlcnByZXRlcjxUPiBkYXRhVmFsaWRhdG9yKSB7CiAgICBNYXA8aW50LCBMaXN0PFN0cmluZz4+IGFubm90YXRpb25zID0gPGludCwgTGlzdDxTdHJpbmc+Pnt9OwogICAgYWN0dWFsTWFwc1t1cmldLmZvckVhY2goKElkIGlkLCBBY3R1YWxEYXRhPFQ+IGRhdGEpIHsKICAgICAgSWRWYWx1ZSBleHBlY3RlZFZhbHVlID0gZXhwZWN0ZWRNYXBzW3VyaV1baWRdOwogICAgICBUIGFjdHVhbFZhbHVlID0gZGF0YS52YWx1ZTsKICAgICAgU3RyaW5nIHVuZXhwZWN0ZWRNZXNzYWdlID0KICAgICAgICAgIGRhdGFWYWxpZGF0b3IuaXNBc0V4cGVjdGVkKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlPy52YWx1ZSk7CiAgICAgIGlmICh1bmV4cGVjdGVkTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgICAgU3RyaW5nIGV4cGVjdGVkID0gZXhwZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSA/PyAnJzsKICAgICAgICBTdHJpbmcgYWN0dWFsID0gZGF0YVZhbGlkYXRvci5nZXRUZXh0KGFjdHVhbFZhbHVlKTsKICAgICAgICBpbnQgb2Zmc2V0ID0gZ2V0T2Zmc2V0RnJvbUlkKGlkLCB1cmkpOwogICAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCkgewogICAgICAgICAgU3RyaW5nIHZhbHVlMSA9ICcke2V4cGVjdGVkfSc7CiAgICAgICAgICBTdHJpbmcgdmFsdWUyID0gSWRWYWx1ZS5pZFRvU3RyaW5nKGlkLCAnJHthY3R1YWx9Jyk7CiAgICAgICAgICBhbm5vdGF0aW9ucwogICAgICAgICAgICAgIC5wdXRJZkFic2VudChvZmZzZXQsICgpID0+IFtdKQogICAgICAgICAgICAgIC5hZGQoY29sb3JpemVEaWZmKHZhbHVlMSwgJyB8ICcsIHZhbHVlMikpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBleHBlY3RlZE1hcHNbdXJpXS5mb3JFYWNoKChJZCBpZCwgSWRWYWx1ZSBleHBlY3RlZCkgewogICAgICBpZiAoIWFjdHVhbE1hcHNbdXJpXS5jb250YWluc0tleShpZCkpIHsKICAgICAgICBpbnQgb2Zmc2V0ID0gZ2V0T2Zmc2V0RnJvbUlkKGlkLCB1cmkpOwogICAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCkgewogICAgICAgICAgU3RyaW5nIHZhbHVlMSA9ICcke2V4cGVjdGVkfSc7CiAgICAgICAgICBTdHJpbmcgdmFsdWUyID0gJy0tLSc7CiAgICAgICAgICBhbm5vdGF0aW9ucwogICAgICAgICAgICAgIC5wdXRJZkFic2VudChvZmZzZXQsICgpID0+IFtdKQogICAgICAgICAgICAgIC5hZGQoY29sb3JpemVEaWZmKHZhbHVlMSwgJyB8ICcsIHZhbHVlMikpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gd2l0aEFubm90YXRpb25zKGNvZGVbdXJpXS5zb3VyY2VDb2RlLCBhbm5vdGF0aW9ucyk7CiAgfQoKICBpbnQgZ2V0T2Zmc2V0RnJvbUlkKElkIGlkLCBVcmkgdXJpKSB7CiAgICByZXR1cm4gX2NvbXBpbGVkRGF0YS5nZXRPZmZzZXRGcm9tSWQoaWQsIHVyaSk7CiAgfQp9CgovLy8gQ2hlY2tzIFtjb21waWxlZERhdGFdIGFnYWluc3QgdGhlIGV4cGVjdGVkIGRhdGEgaW4gW2V4cGVjdGVkTWFwc10gZGVyaXZlZAovLy8gZnJvbSBbY29kZV0uCkZ1dHVyZTxib29sPiBjaGVja0NvZGU8VD4oCiAgICBTdHJpbmcgbW9kZU5hbWUsCiAgICBVcmkgbWFpbkZpbGVVcmksCiAgICBNYXA8VXJpLCBBbm5vdGF0ZWRDb2RlPiBjb2RlLAogICAgTWVtYmVyQW5ub3RhdGlvbnM8SWRWYWx1ZT4gZXhwZWN0ZWRNYXBzLAogICAgQ29tcGlsZWREYXRhPFQ+IGNvbXBpbGVkRGF0YSwKICAgIERhdGFJbnRlcnByZXRlcjxUPiBkYXRhVmFsaWRhdG9yLAogICAge2Jvb2wgZmlsdGVyQWN0dWFsRGF0YShJZFZhbHVlIGV4cGVjdGVkLCBBY3R1YWxEYXRhPFQ+IGFjdHVhbERhdGEpLAogICAgYm9vbCBmYXRhbEVycm9yczogdHJ1ZSwKICAgIGJvb2wgc3VjY2luY3Q6IGZhbHNlLAogICAgdm9pZCBvbkZhaWx1cmUoU3RyaW5nIG1lc3NhZ2UpfSkgYXN5bmMgewogIElkRGF0YTxUPiBkYXRhID0gbmV3IElkRGF0YTxUPihjb2RlLCBleHBlY3RlZE1hcHMsIGNvbXBpbGVkRGF0YSk7CiAgYm9vbCBoYXNGYWlsdXJlID0gZmFsc2U7CiAgU2V0PFVyaT4gbmVlZGVkRGlmZnMgPSBuZXcgU2V0PFVyaT4oKTsKCiAgdm9pZCBjaGVja0FjdHVhbE1hcCgKICAgICAgTWFwPElkLCBBY3R1YWxEYXRhPFQ+PiBhY3R1YWxNYXAsIE1hcDxJZCwgSWRWYWx1ZT4gZXhwZWN0ZWRNYXAsCiAgICAgIFtVcmkgdXJpXSkgewogICAgYm9vbCBoYXNMb2NhbEZhaWx1cmUgPSBmYWxzZTsKICAgIGFjdHVhbE1hcC5mb3JFYWNoKChJZCBpZCwgQWN0dWFsRGF0YTxUPiBhY3R1YWxEYXRhKSB7CiAgICAgIFQgYWN0dWFsID0gYWN0dWFsRGF0YS52YWx1ZTsKICAgICAgU3RyaW5nIGFjdHVhbFRleHQgPSBkYXRhVmFsaWRhdG9yLmdldFRleHQoYWN0dWFsKTsKCiAgICAgIGlmICghZXhwZWN0ZWRNYXAuY29udGFpbnNLZXkoaWQpKSB7CiAgICAgICAgaWYgKCFkYXRhVmFsaWRhdG9yLmlzRW1wdHkoYWN0dWFsKSkgewogICAgICAgICAgU3RyaW5nIGFjdHVhbFZhbHVlVGV4dCA9IElkVmFsdWUuaWRUb1N0cmluZyhpZCwgYWN0dWFsVGV4dCk7CiAgICAgICAgICBjb21waWxlZERhdGEucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgYWN0dWFsRGF0YS51cmksCiAgICAgICAgICAgICAgYWN0dWFsRGF0YS5vZmZzZXQsCiAgICAgICAgICAgICAgc3VjY2luY3QKICAgICAgICAgICAgICAgICAgPyAnRVhUUkEgJG1vZGVOYW1lIERBVEEgZm9yICR7aWQuZGVzY3JpcHRvcn0nCiAgICAgICAgICAgICAgICAgIDogJ0VYVFJBICRtb2RlTmFtZSBEQVRBIGZvciAke2lkLmRlc2NyaXB0b3J9OlxuICcKICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QgICA6ICR7YWN0dWFsRGF0YS5vYmplY3RUZXh0fVxuICcKICAgICAgICAgICAgICAgICAgICAgICdhY3R1YWwgICA6ICR7Y29sb3JpemVBY3R1YWwoYWN0dWFsVmFsdWVUZXh0KX1cbiAnCiAgICAgICAgICAgICAgICAgICAgICAnRGF0YSB3YXMgZXhwZWN0ZWQgZm9yIHRoZXNlIGlkczogJHtleHBlY3RlZE1hcC5rZXlzfScsCiAgICAgICAgICAgICAgc3VjY2luY3Q6IHN1Y2NpbmN0KTsKICAgICAgICAgIGlmIChmaWx0ZXJBY3R1YWxEYXRhID09IG51bGwgfHwgZmlsdGVyQWN0dWFsRGF0YShudWxsLCBhY3R1YWxEYXRhKSkgewogICAgICAgICAgICBoYXNMb2NhbEZhaWx1cmUgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBJZFZhbHVlIGV4cGVjdGVkID0gZXhwZWN0ZWRNYXBbaWRdOwogICAgICAgIFN0cmluZyB1bmV4cGVjdGVkTWVzc2FnZSA9CiAgICAgICAgICAgIGRhdGFWYWxpZGF0b3IuaXNBc0V4cGVjdGVkKGFjdHVhbCwgZXhwZWN0ZWQudmFsdWUpOwogICAgICAgIGlmICh1bmV4cGVjdGVkTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgICAgICBTdHJpbmcgYWN0dWFsVmFsdWVUZXh0ID0gSWRWYWx1ZS5pZFRvU3RyaW5nKGlkLCBhY3R1YWxUZXh0KTsKICAgICAgICAgIGNvbXBpbGVkRGF0YS5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICBhY3R1YWxEYXRhLnVyaSwKICAgICAgICAgICAgICBhY3R1YWxEYXRhLm9mZnNldCwKICAgICAgICAgICAgICBzdWNjaW5jdAogICAgICAgICAgICAgICAgICA/ICdVTkVYUEVDVEVEICRtb2RlTmFtZSBEQVRBIGZvciAke2lkLmRlc2NyaXB0b3J9JwogICAgICAgICAgICAgICAgICA6ICdVTkVYUEVDVEVEICRtb2RlTmFtZSBEQVRBIGZvciAke2lkLmRlc2NyaXB0b3J9OlxuICcKICAgICAgICAgICAgICAgICAgICAgICdkZXRhaWwgIDogJHtjb2xvcml6ZU1lc3NhZ2UodW5leHBlY3RlZE1lc3NhZ2UpfVxuICcKICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QgIDogJHthY3R1YWxEYXRhLm9iamVjdFRleHR9XG4gJwogICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdGVkOiAke2NvbG9yaXplRXhwZWN0ZWQoJyRleHBlY3RlZCcpfVxuICcKICAgICAgICAgICAgICAgICAgICAgICdhY3R1YWwgIDogJHtjb2xvcml6ZUFjdHVhbChhY3R1YWxWYWx1ZVRleHQpfScsCiAgICAgICAgICAgICAgc3VjY2luY3Q6IHN1Y2NpbmN0KTsKICAgICAgICAgIGlmIChmaWx0ZXJBY3R1YWxEYXRhID09IG51bGwgfHwKICAgICAgICAgICAgICBmaWx0ZXJBY3R1YWxEYXRhKGV4cGVjdGVkLCBhY3R1YWxEYXRhKSkgewogICAgICAgICAgICBoYXNMb2NhbEZhaWx1cmUgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBpZiAoaGFzTG9jYWxGYWlsdXJlKSB7CiAgICAgIGhhc0ZhaWx1cmUgPSB0cnVlOwogICAgICBpZiAodXJpICE9IG51bGwpIHsKICAgICAgICBuZWVkZWREaWZmcy5hZGQodXJpKTsKICAgICAgfQogICAgfQogIH0KCiAgZGF0YS5hY3R1YWxNYXBzLmZvckVhY2goKFVyaSB1cmksIE1hcDxJZCwgQWN0dWFsRGF0YTxUPj4gYWN0dWFsTWFwKSB7CiAgICBjaGVja0FjdHVhbE1hcChhY3R1YWxNYXAsIGRhdGEuZXhwZWN0ZWRNYXBzW3VyaV0sIHVyaSk7CiAgfSk7CiAgY2hlY2tBY3R1YWxNYXAoZGF0YS5hY3R1YWxNYXBzLmdsb2JhbERhdGEsIGRhdGEuZXhwZWN0ZWRNYXBzLmdsb2JhbERhdGEpOwoKICBTZXQ8SWQ+IG1pc3NpbmdJZHMgPSBuZXcgU2V0PElkPigpOwogIHZvaWQgY2hlY2tNaXNzaW5nKAogICAgICBNYXA8SWQsIElkVmFsdWU+IGV4cGVjdGVkTWFwLCBNYXA8SWQsIEFjdHVhbERhdGE8VD4+IGFjdHVhbE1hcCwKICAgICAgW1VyaSB1cmldKSB7CiAgICBleHBlY3RlZE1hcC5mb3JFYWNoKChJZCBpZCwgSWRWYWx1ZSBleHBlY3RlZCkgewogICAgICBpZiAoIWFjdHVhbE1hcC5jb250YWluc0tleShpZCkpIHsKICAgICAgICBtaXNzaW5nSWRzLmFkZChpZCk7CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAnTUlTU0lORyAkbW9kZU5hbWUgREFUQSBmb3IgJHtpZC5kZXNjcmlwdG9yfTogJwogICAgICAgICAgICAnRXhwZWN0ZWQgJHtjb2xvcml6ZUV4cGVjdGVkKCckZXhwZWN0ZWQnKX0nOwogICAgICAgIGlmICh1cmkgIT0gbnVsbCkgewogICAgICAgICAgY29tcGlsZWREYXRhLnJlcG9ydEVycm9yKAogICAgICAgICAgICAgIHVyaSwgY29tcGlsZWREYXRhLmdldE9mZnNldEZyb21JZChpZCwgdXJpKSwgbWVzc2FnZSwKICAgICAgICAgICAgICBzdWNjaW5jdDogc3VjY2luY3QpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmludChtZXNzYWdlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgaWYgKG1pc3NpbmdJZHMuaXNOb3RFbXB0eSAmJiB1cmkgIT0gbnVsbCkgewogICAgICBuZWVkZWREaWZmcy5hZGQodXJpKTsKICAgIH0KICB9CgogIGRhdGEuZXhwZWN0ZWRNYXBzLmZvckVhY2goKFVyaSB1cmksIE1hcDxJZCwgSWRWYWx1ZT4gZXhwZWN0ZWRNYXApIHsKICAgIGNoZWNrTWlzc2luZyhleHBlY3RlZE1hcCwgZGF0YS5hY3R1YWxNYXBzW3VyaV0sIHVyaSk7CiAgfSk7CiAgY2hlY2tNaXNzaW5nKGRhdGEuZXhwZWN0ZWRNYXBzLmdsb2JhbERhdGEsIGRhdGEuYWN0dWFsTWFwcy5nbG9iYWxEYXRhKTsKICBpZiAoIXN1Y2NpbmN0KSB7CiAgICBmb3IgKFVyaSB1cmkgaW4gbmVlZGVkRGlmZnMpIHsKICAgICAgcHJpbnQoJy0tYW5ub3RhdGlvbnMgZGlmZiBbJHt1cmkucGF0aFNlZ21lbnRzLmxhc3R9XS0tLS0tLS0tLS0tLS0nKTsKICAgICAgcHJpbnQoZGF0YS5kaWZmQ29kZSh1cmksIGRhdGFWYWxpZGF0b3IpKTsKICAgICAgcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIH0KICB9CiAgaWYgKG1pc3NpbmdJZHMuaXNOb3RFbXB0eSkgewogICAgcHJpbnQoIk1JU1NJTkcgaWRzOiAke21pc3NpbmdJZHN9LiIpOwogICAgaGFzRmFpbHVyZSA9IHRydWU7CiAgfQogIGlmIChoYXNGYWlsdXJlICYmIGZhdGFsRXJyb3JzKSB7CiAgICBvbkZhaWx1cmUoJ0Vycm9ycyBmb3VuZC4nKTsKICB9CiAgcmV0dXJuIGhhc0ZhaWx1cmU7Cn0KCnR5cGVkZWYgRnV0dXJlPGJvb2w+IFJ1blRlc3RGdW5jdGlvbihUZXN0RGF0YSB0ZXN0RGF0YSwKICAgIHtib29sIHRlc3RBZnRlckZhaWx1cmVzLCBib29sIHZlcmJvc2UsIGJvb2wgc3VjY2luY3QsIGJvb2wgcHJpbnRDb2RlfSk7CgovLy8gQ2hlY2sgY29kZSBmb3IgYWxsIHRlc3RzIGluIFtkYXRhRGlyXSB1c2luZyBbcnVuVGVzdF0uCkZ1dHVyZSBydW5UZXN0cyhEaXJlY3RvcnkgZGF0YURpciwKICAgIHtMaXN0PFN0cmluZz4gYXJnczogY29uc3QgPFN0cmluZz5bXSwKICAgIGludCBzaGFyZHM6IDEsCiAgICBpbnQgc2hhcmRJbmRleDogMCwKICAgIHZvaWQgb25UZXN0KFVyaSB1cmkpLAogICAgSXRlcmFibGU8U3RyaW5nPiBzdXBwb3J0ZWRNYXJrZXJzLAogICAgVXJpIGNyZWF0ZVVyaUZvckZpbGVOYW1lKFN0cmluZyBmaWxlTmFtZSksCiAgICB2b2lkIG9uRmFpbHVyZShTdHJpbmcgbWVzc2FnZSksCiAgICBSdW5UZXN0RnVuY3Rpb24gcnVuVGVzdH0pIGFzeW5jIHsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IC0tc2hvdyB0byBzaG93IGFjdHVhbCBkYXRhIGZvciBhbiBpbnB1dC4KICBhcmdzID0gYXJncy50b0xpc3QoKTsKICBib29sIHZlcmJvc2UgPSBhcmdzLnJlbW92ZSgnLXYnKTsKICBib29sIHN1Y2NpbmN0ID0gYXJncy5yZW1vdmUoJy1zJyk7CiAgYm9vbCBzaG91bGRDb250aW51ZSA9IGFyZ3MucmVtb3ZlKCctYycpOwogIGJvb2wgdGVzdEFmdGVyRmFpbHVyZXMgPSBhcmdzLnJlbW92ZSgnLWEnKTsKICBib29sIHByaW50Q29kZSA9IGFyZ3MucmVtb3ZlKCctcCcpOwogIGJvb2wgY29udGludWVkID0gZmFsc2U7CiAgYm9vbCBoYXNGYWlsdXJlcyA9IGZhbHNlOwoKICBTdHJpbmcgcmVsYXRpdmVEaXIgPSBkYXRhRGlyLnVyaS5wYXRoLnJlcGxhY2VBbGwoVXJpLmJhc2UucGF0aCwgJycpOwogIHByaW50KCdEYXRhIGRpcjogJHtyZWxhdGl2ZURpcn0nKTsKICBMaXN0PEZpbGVTeXN0ZW1FbnRpdHk+IGVudGl0aWVzID0gZGF0YURpci5saXN0U3luYygpOwogIGlmIChzaGFyZHMgPiAxKSB7CiAgICBpbnQgc3RhcnQgPSBlbnRpdGllcy5sZW5ndGggKiBzaGFyZEluZGV4IH4vIHNoYXJkczsKICAgIGludCBlbmQgPSBlbnRpdGllcy5sZW5ndGggKiAoc2hhcmRJbmRleCArIDEpIH4vIHNoYXJkczsKICAgIGVudGl0aWVzID0gZW50aXRpZXMuc3VibGlzdChzdGFydCwgZW5kKTsKICB9CiAgaW50IHRlc3RDb3VudCA9IDA7CiAgZm9yIChGaWxlU3lzdGVtRW50aXR5IGVudGl0eSBpbiBlbnRpdGllcykgewogICAgU3RyaW5nIG5hbWUgPSBlbnRpdHkudXJpLnBhdGhTZWdtZW50cy5sYXN0OwogICAgaWYgKGVudGl0eSBpcyBEaXJlY3RvcnkpIHsKICAgICAgbmFtZSA9IGVudGl0eS51cmkucGF0aFNlZ21lbnRzW2VudGl0eS51cmkucGF0aFNlZ21lbnRzLmxlbmd0aCAtIDJdOwogICAgfQogICAgaWYgKGFyZ3MuaXNOb3RFbXB0eSAmJiAhYXJncy5jb250YWlucyhuYW1lKSAmJiAhY29udGludWVkKSBjb250aW51ZTsKICAgIGlmIChzaG91bGRDb250aW51ZSkgY29udGludWVkID0gdHJ1ZTsKICAgIHRlc3RDb3VudCsrOwoKICAgIGlmIChvblRlc3QgIT0gbnVsbCkgewogICAgICBvblRlc3QoZW50aXR5LnVyaSk7CiAgICB9CiAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwoKICAgIFRlc3REYXRhIHRlc3REYXRhID0gY29tcHV0ZVRlc3REYXRhKGVudGl0eSwKICAgICAgICBzdXBwb3J0ZWRNYXJrZXJzOiBzdXBwb3J0ZWRNYXJrZXJzLAogICAgICAgIGNyZWF0ZVVyaUZvckZpbGVOYW1lOiBjcmVhdGVVcmlGb3JGaWxlTmFtZSwKICAgICAgICBvbkZhaWx1cmU6IG9uRmFpbHVyZSk7CiAgICBwcmludCgnVGVzdDogJHt0ZXN0RGF0YS50ZXN0RmlsZVVyaX0nKTsKCiAgICBpZiAoYXdhaXQgcnVuVGVzdCh0ZXN0RGF0YSwKICAgICAgICB0ZXN0QWZ0ZXJGYWlsdXJlczogdGVzdEFmdGVyRmFpbHVyZXMsCiAgICAgICAgdmVyYm9zZTogdmVyYm9zZSwKICAgICAgICBzdWNjaW5jdDogc3VjY2luY3QsCiAgICAgICAgcHJpbnRDb2RlOiBwcmludENvZGUpKSB7CiAgICAgIGhhc0ZhaWx1cmVzID0gdHJ1ZTsKICAgIH0KICB9CiAgaWYgKGhhc0ZhaWx1cmVzKSB7CiAgICBvbkZhaWx1cmUoJ0Vycm9ycyBmb3VuZC4nKTsKICB9CiAgaWYgKHRlc3RDb3VudCA9PSAwKSB7CiAgICBvbkZhaWx1cmUoIk5vIGZpbGVzIHdlcmUgdGVzdGVkLiIpOwogIH0KfQqCiABOTjwBEiUSKQEgKCoBSCUNERIDATMtAT0mE0MLEQQCAUkkE0ELEQQCAUclE0ILEQQCAUklE0ALEQQCAUonE0ILEQQCAT0oE0MLEQQCAU8PSClCAgFMH0NGAgFMS09PJEchPykBTTkBQDMEAUMpBAEsNzkGKwQBDBYqJBcvMEIaSxkbGBUKFQYhFxscBhMaBAIBTykER0cUNUwyKC1FATY/TEI2JUwhQjJFTAo6DzYyRUAKLggGBgIBRgRMIgROLjQoLyc2ARMVIiUaLh0mTi9JJDgeD04TCAYEAVAjEEwFPTBBBEEmHSwxBQEhUTMxOjUnSUgrGkMhBgQBF1ECASARFRkYLyY+AVElAgE2IRUBTSM1AUtGFCsBQAE3OEA0JxIuKAgYBAE4UCZANi4uMDwUND4jFDQsCAg4JiIyFDU+CAgYBAEnAVECATEkTkkWOgFAHgE4IAIBLkEhAQxAFxkmOgYRBAEMJB0EAQwmFwQCAVAoDzonFxwGGDMGNTwGEgQhKQQYAgFQMRImMSdQAT0hUQY9BAEsQgEfQDpLCD8EAT9AOjUiIUknOzwvHik/Fi05CggIOi4vHikhFi05CggIPwQBKDMEAgFOERsVFSItIiZIHBotRBspARdGEyI6IzkBKi5HJB4hF0BEP0lOI1AkDAoPLCNAKUckHiEXRUlLPkZGIyo4JAwKCAgbGRkeCAYEAUg8BkwBJhVGEzQoHEk5GyRDIxEaCggIMBwGBAFGOgZKEyNLMEsGBB8qFwQjIAQVAgE4TAE7IyoTFxonLyQmSxgkJSsuJhocAUclOBQ4PC0EFS4wH0oGSSoRARoaBk8BMCw0HywBIC4aHCEaBgQVIAQYKAQCAS1wYWNrYWdlOmZyb250X2VuZC9zcmMvdGVzdGluZy9pZF90ZXN0aW5nLmRhcnQvc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NyeXB0by9saWIvY3J5cHRvLmRhcnSBbC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpleHBvcnQgJ3NyYy9kaWdlc3QuZGFydCc7CmV4cG9ydCAnc3JjL2hhc2guZGFydCc7CmV4cG9ydCAnc3JjL2htYWMuZGFydCc7CmV4cG9ydCAnc3JjL21kNS5kYXJ0JzsKZXhwb3J0ICdzcmMvc2hhMS5kYXJ0JzsKZXhwb3J0ICdzcmMvc2hhMjU2LmRhcnQnOwoMAE5OPAEaGBgXGBoBGnBhY2thZ2U6Y3J5cHRvL2NyeXB0by5kYXJ0QXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy90ZXN0aW5nL2Fubm90YXRlZF9jb2RlX2hlbHBlci5kYXJ0mugvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKY29uc3QgaW50IF9MRiA9IDB4MEE7CmNvbnN0IGludCBfQ1IgPSAweDBEOwoKY29uc3QgUGF0dGVybiBhdEJyYWNlU3RhcnQgPSAnQHsnOwpjb25zdCBQYXR0ZXJuIGJyYWNlRW5kID0gJ30nOwoKZmluYWwgUGF0dGVybiBjb21tZW50U3RhcnQgPSBuZXcgUmVnRXhwKHInL1wqJyk7CmZpbmFsIFBhdHRlcm4gY29tbWVudEVuZCA9IG5ldyBSZWdFeHAocidcKi9ccyonKTsKCmNsYXNzIEFubm90YXRpb24gewogIC8vLyAxLWJhc2VkIGxpbmUgbnVtYmVyIG9mIHRoZSBhbm5vdGF0aW9uLgogIGZpbmFsIGludCBsaW5lTm87CgogIC8vLyAxLWJhc2VkIGNvbHVtbiBudW1iZXIgb2YgdGhlIGFubm90YXRpb24uCiAgZmluYWwgaW50IGNvbHVtbk5vOwoKICAvLy8gMC1iYXNlZCBjaGFyYWN0ZXIgb2Zmc2V0ICBvZiB0aGUgYW5ub3RhdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSB0ZXh0LgogIGZpbmFsIGludCBvZmZzZXQ7CgogIC8vLyBUaGUgdGV4dCBpbiB0aGUgYW5ub3RhdGlvbi4KICBmaW5hbCBTdHJpbmcgdGV4dDsKCiAgQW5ub3RhdGlvbih0aGlzLmxpbmVObywgdGhpcy5jb2x1bW5ObywgdGhpcy5vZmZzZXQsIHRoaXMudGV4dCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdBbm5vdGF0aW9uKGxpbmVObz0kbGluZU5vLGNvbHVtbk5vPSRjb2x1bW5ObyxvZmZzZXQ9JG9mZnNldCx0ZXh0PSR0ZXh0KSc7Cn0KCi8vLyBBIHNvdXJjZSBjb2RlIHRleHQgd2l0aCBhbm5vdGF0ZWQgcG9zaXRpb25zLgovLy8KLy8vIEFuIFtBbm5vdGF0ZWRDb2RlXSBjYW4gYmUgY3JlYXRlZCBmcm9tIGEgW1N0cmluZ10gb2Ygc291cmNlIGNvZGUgd2hlcmUKLy8vIGFubm90YXRlZCBwb3NpdGlvbnMgYXJlIGVtYmVkZGVkLCBieSBkZWZhdWx0IHVzaW5nIHRoZSBzeW50YXggYEB7dGV4dH1gLgovLy8gRm9yIGluc3RhbmNlCi8vLwovLy8gICAgIG1haW4oKSB7Ci8vLyAgICAgICBAe2Zvby1jYWxsfWZvbygpOwovLy8gICAgICAgYmFyQHtiYXItYXJnc30oKTsKLy8vICAgICB9Ci8vLwovLy8gIHRoZSBwb3NpdGlvbiBvZiBgZm9vYCBjYWxsIHdpbGwgaG9sZCBhbiBhbm5vdGF0aW9uIHdpdGggdGV4dCAnZm9vLWNhbGwnIGFuZAovLy8gIHRoZSBwb3NpdGlvbiBvZiBgYmFyYCBhcmd1bWVudHMgd2lsbCBob2xkIGFuIGFubm90YXRpb24gd2l0aCB0ZXh0Ci8vLyAgJ2Jhci1hcmdzJy4KLy8vCi8vLyAgQW5ub3RhdGlvbiB0ZXh0IGNhbm5vdCBzcGFuIG11bHRpcGxlIGxpbmVzIGFuZCBjYW5ub3QgY29udGFpbiAnfScuCmNsYXNzIEFubm90YXRlZENvZGUgewogIC8vLyBUaGUgc291cmNlIGNvZGUgd2l0aG91dCBhbm5vdGF0aW9ucy4KICBmaW5hbCBTdHJpbmcgc291cmNlQ29kZTsKCiAgLy8vIFRoZSBhbm5vdGF0aW9ucyBmb3IgdGhlIHNvdXJjZSBjb2RlLgogIGZpbmFsIExpc3Q8QW5ub3RhdGlvbj4gYW5ub3RhdGlvbnM7CgogIExpc3Q8aW50PiBfbGluZVN0YXJ0czsKCiAgQW5ub3RhdGVkQ29kZSh0aGlzLnNvdXJjZUNvZGUsIHRoaXMuYW5ub3RhdGlvbnMpOwoKICBBbm5vdGF0ZWRDb2RlLmludGVybmFsKHRoaXMuc291cmNlQ29kZSwgdGhpcy5hbm5vdGF0aW9ucywgdGhpcy5fbGluZVN0YXJ0cyk7CgogIC8vLyBDcmVhdGVzIGFuIFtBbm5vdGF0ZWRDb2RlXSBieSBwcm9jZXNzaW5nIFthbm5vdGF0ZWRDb2RlXS4gQW5ub3RhdGlvbgogIC8vLyBkZWxpbWl0ZWQgYnkgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIGNvbnZlcnRlZCBpbnRvIFtBbm5vdGF0aW9uXXMgYW5kCiAgLy8vIHJlbW92ZWQgZnJvbSB0aGUgW2Fubm90YXRlZENvZGVdIHRvIHByb2R1Y2UgdGhlIHNvdXJjZSBjb2RlLgogIGZhY3RvcnkgQW5ub3RhdGVkQ29kZS5mcm9tVGV4dChTdHJpbmcgYW5ub3RhdGVkQ29kZSwKICAgICAgW1BhdHRlcm4gc3RhcnQgPSBhdEJyYWNlU3RhcnQsIFBhdHRlcm4gZW5kID0gYnJhY2VFbmRdKSB7CiAgICBTdHJpbmdCdWZmZXIgY29kZUJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIExpc3Q8QW5ub3RhdGlvbj4gYW5ub3RhdGlvbnMgPSA8QW5ub3RhdGlvbj5bXTsKICAgIGludCBpbmRleCA9IDA7CiAgICBpbnQgb2Zmc2V0ID0gMDsKICAgIGludCBsaW5lTm8gPSAxOwogICAgaW50IGNvbHVtbk5vID0gMTsKICAgIExpc3Q8aW50PiBsaW5lU3RhcnRzID0gPGludD5bXTsKICAgIGxpbmVTdGFydHMuYWRkKG9mZnNldCk7CiAgICB3aGlsZSAoaW5kZXggPCBhbm5vdGF0ZWRDb2RlLmxlbmd0aCkgewogICAgICBNYXRjaCBzdGFydE1hdGNoID0gc3RhcnQubWF0Y2hBc1ByZWZpeChhbm5vdGF0ZWRDb2RlLCBpbmRleCk7CiAgICAgIGlmIChzdGFydE1hdGNoICE9IG51bGwpIHsKICAgICAgICBpbnQgc3RhcnRJbmRleCA9IHN0YXJ0TWF0Y2guZW5kOwogICAgICAgIEl0ZXJhYmxlPE1hdGNoPiBlbmRNYXRjaGVzID0KICAgICAgICAgICAgZW5kLmFsbE1hdGNoZXMoYW5ub3RhdGVkQ29kZSwgc3RhcnRNYXRjaC5lbmQpOwogICAgICAgIGlmICghZW5kTWF0Y2hlcy5pc0VtcHR5KSB7CiAgICAgICAgICBNYXRjaCBlbmRNYXRjaCA9IGVuZE1hdGNoZXMuZmlyc3Q7CiAgICAgICAgICBhbm5vdGF0ZWRDb2RlLmluZGV4T2YoZW5kLCBzdGFydEluZGV4KTsKICAgICAgICAgIFN0cmluZyB0ZXh0ID0gYW5ub3RhdGVkQ29kZS5zdWJzdHJpbmcoc3RhcnRNYXRjaC5lbmQsIGVuZE1hdGNoLnN0YXJ0KTsKICAgICAgICAgIGFubm90YXRpb25zLmFkZChuZXcgQW5ub3RhdGlvbihsaW5lTm8sIGNvbHVtbk5vLCBvZmZzZXQsIHRleHQpKTsKICAgICAgICAgIGluZGV4ID0gZW5kTWF0Y2guZW5kOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CgogICAgICBpbnQgY2hhckNvZGUgPSBhbm5vdGF0ZWRDb2RlLmNvZGVVbml0QXQoaW5kZXgpOwogICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7CiAgICAgICAgY2FzZSBfTEY6CiAgICAgICAgICBjb2RlQnVmZmVyLndyaXRlKCdcbicpOwogICAgICAgICAgb2Zmc2V0Kys7CiAgICAgICAgICBsaW5lU3RhcnRzLmFkZChvZmZzZXQpOwogICAgICAgICAgbGluZU5vKys7CiAgICAgICAgICBjb2x1bW5ObyA9IDE7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIF9DUjoKICAgICAgICAgIGlmIChpbmRleCArIDEgPCBhbm5vdGF0ZWRDb2RlLmxlbmd0aCAmJgogICAgICAgICAgICAgIGFubm90YXRlZENvZGUuY29kZVVuaXRBdChpbmRleCArIDEpID09IF9MRikgewogICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgfQogICAgICAgICAgY29kZUJ1ZmZlci53cml0ZSgnXG4nKTsKICAgICAgICAgIG9mZnNldCsrOwogICAgICAgICAgbGluZVN0YXJ0cy5hZGQob2Zmc2V0KTsKICAgICAgICAgIGxpbmVObysrOwogICAgICAgICAgY29sdW1uTm8gPSAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGNvZGVCdWZmZXIud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgICAgICAgICBvZmZzZXQrKzsKICAgICAgICAgIGNvbHVtbk5vKys7CiAgICAgIH0KICAgICAgaW5kZXgrKzsKICAgIH0KICAgIGxpbmVTdGFydHMuYWRkKG9mZnNldCk7CiAgICByZXR1cm4gbmV3IEFubm90YXRlZENvZGUuaW50ZXJuYWwoCiAgICAgICAgY29kZUJ1ZmZlci50b1N0cmluZygpLCBhbm5vdGF0aW9ucywgbGluZVN0YXJ0cyk7CiAgfQoKICB2b2lkIF9lbnN1cmVMaW5lU3RhcnRzKCkgewogICAgaWYgKF9saW5lU3RhcnRzID09IG51bGwpIHsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgIF9saW5lU3RhcnRzID0gPGludD5bXTsKICAgICAgX2xpbmVTdGFydHMuYWRkKG9mZnNldCk7CiAgICAgIHdoaWxlIChpbmRleCA8IHNvdXJjZUNvZGUubGVuZ3RoKSB7CiAgICAgICAgaW50IGNoYXJDb2RlID0gc291cmNlQ29kZS5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7CiAgICAgICAgICBjYXNlIF9MRjoKICAgICAgICAgICAgb2Zmc2V0Kys7CiAgICAgICAgICAgIF9saW5lU3RhcnRzLmFkZChvZmZzZXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0NSOgogICAgICAgICAgICBpZiAoaW5kZXggKyAxIDwgc291cmNlQ29kZS5sZW5ndGggJiYKICAgICAgICAgICAgICAgIHNvdXJjZUNvZGUuY29kZVVuaXRBdChpbmRleCArIDEpID09IF9MRikgewogICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb2Zmc2V0Kys7CiAgICAgICAgICAgIF9saW5lU3RhcnRzLmFkZChvZmZzZXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIG9mZnNldCsrOwogICAgICAgIH0KICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICAgIF9saW5lU3RhcnRzLmFkZChvZmZzZXQpOwogICAgfQogIH0KCiAgdm9pZCBhZGRBbm5vdGF0aW9uKGludCBsaW5lTm8sIGludCBjb2x1bW5ObywgU3RyaW5nIHRleHQpIHsKICAgIF9lbnN1cmVMaW5lU3RhcnRzKCk7CiAgICBpbnQgb2Zmc2V0ID0gX2xpbmVTdGFydHNbbGluZU5vIC0gMV0gKyAoY29sdW1uTm8gLSAxKTsKICAgIGFubm90YXRpb25zLmFkZChuZXcgQW5ub3RhdGlvbihsaW5lTm8sIGNvbHVtbk5vLCBvZmZzZXQsIHRleHQpKTsKICB9CgogIFN0cmluZyB0b1RleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBMaXN0PEFubm90YXRpb24+IGxpc3QgPSBhbm5vdGF0aW9ucy50b0xpc3QoKQogICAgICAuLnNvcnQoKGEsIGIpID0+IGEub2Zmc2V0LmNvbXBhcmVUbyhiLm9mZnNldCkpOwogICAgaW50IG9mZnNldCA9IDA7CiAgICBmb3IgKEFubm90YXRpb24gYW5ub3RhdGlvbiBpbiBsaXN0KSB7CiAgICAgIHNiLndyaXRlKHNvdXJjZUNvZGUuc3Vic3RyaW5nKG9mZnNldCwgYW5ub3RhdGlvbi5vZmZzZXQpKTsKICAgICAgc2Iud3JpdGUoJ0B7JHthbm5vdGF0aW9uLnRleHR9fScpOwogICAgICBvZmZzZXQgPSBhbm5vdGF0aW9uLm9mZnNldDsKICAgIH0KICAgIHNiLndyaXRlKHNvdXJjZUNvZGUuc3Vic3RyaW5nKG9mZnNldCkpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gU3BsaXQgdGhlIGFubm90YXRpb25zIGluIFthbm5vdGF0ZWRDb2RlXSBieSBbcHJlZml4ZXNdLgovLy8KLy8vIFJldHVybnMgYSBtYXAgY29udGFpbmluZyBhbiBbQW5ub3RhdGVkQ29kZV0gb2JqZWN0IGZvciBlYWNoIHByZWZpeCwKLy8vIGNvbnRhaW5pbmcgb25seSB0aGUgYW5ub3RhdGlvbnMgd2hvc2UgdGV4dCBzdGFydGVkIHdpdGggdGhlIGdpdmVuIHByZWZpeC4KLy8vIElmIG5vIHByZWZpeCBtYXRjaCB0aGUgYW5ub3RhdGlvbiB0ZXh0LCB0aGUgYW5ub3RhdGlvbiBpcyBhZGRlZCB0byBhbGwKLy8vIFtBbm5vdGF0ZWRDb2RlXSBvYmplY3RzLgovLy8KLy8vIFRoZSBwcmVmaXhlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBhbm5vdGF0aW9uIHRleHRzIGluIHRoZSByZXR1cm5lZAovLy8gW0Fubm90YXRlZENvZGVdIG9iamVjdHMuCk1hcDxTdHJpbmcsIEFubm90YXRlZENvZGU+IHNwbGl0QnlQcmVmaXhlcygKICAgIEFubm90YXRlZENvZGUgYW5ub3RhdGVkQ29kZSwgSXRlcmFibGU8U3RyaW5nPiBwcmVmaXhlcykgewogIFNldDxTdHJpbmc+IHByZWZpeFNldCA9IHByZWZpeGVzLnRvU2V0KCk7CiAgTWFwPFN0cmluZywgTGlzdDxBbm5vdGF0aW9uPj4gbWFwID0gPFN0cmluZywgTGlzdDxBbm5vdGF0aW9uPj57fTsKICBmb3IgKFN0cmluZyBwcmVmaXggaW4gcHJlZml4U2V0KSB7CiAgICBtYXBbcHJlZml4XSA9IDxBbm5vdGF0aW9uPltdOwogIH0KICBvdXRlcjoKICBmb3IgKEFubm90YXRpb24gYW5ub3RhdGlvbiBpbiBhbm5vdGF0ZWRDb2RlLmFubm90YXRpb25zKSB7CiAgICBpbnQgZG90UG9zID0gYW5ub3RhdGlvbi50ZXh0LmluZGV4T2YoJy4nKTsKICAgIGlmIChkb3RQb3MgIT0gLTEpIHsKICAgICAgU3RyaW5nIGFubm90YXRpb25QcmVmaXggPSBhbm5vdGF0aW9uLnRleHQuc3Vic3RyaW5nKDAsIGRvdFBvcyk7CiAgICAgIFN0cmluZyBhbm5vdGF0aW9uVGV4dCA9IGFubm90YXRpb24udGV4dC5zdWJzdHJpbmcoZG90UG9zICsgMSk7CiAgICAgIExpc3Q8U3RyaW5nPiBtYXJrZXJzID0gYW5ub3RhdGlvblByZWZpeC5zcGxpdCgnfCcpLnRvTGlzdCgpOwogICAgICBpZiAocHJlZml4U2V0LmNvbnRhaW5zQWxsKG1hcmtlcnMpKSB7CiAgICAgICAgZm9yIChTdHJpbmcgcGFydCBpbiBtYXJrZXJzKSB7CiAgICAgICAgICBtYXBbcGFydF0uYWRkKG5ldyBBbm5vdGF0aW9uKGFubm90YXRpb24ubGluZU5vLCBhbm5vdGF0aW9uLmNvbHVtbk5vLAogICAgICAgICAgICAgIGFubm90YXRpb24ub2Zmc2V0LCBhbm5vdGF0aW9uVGV4dCkpOwogICAgICAgIH0KICAgICAgICBjb250aW51ZSBvdXRlcjsKICAgICAgfQogICAgfQogICAgZm9yIChTdHJpbmcgcHJlZml4IGluIHByZWZpeFNldCkgewogICAgICBtYXBbcHJlZml4XS5hZGQoYW5ub3RhdGlvbik7CiAgICB9CiAgfQogIE1hcDxTdHJpbmcsIEFubm90YXRlZENvZGU+IHNwbGl0ID0gPFN0cmluZywgQW5ub3RhdGVkQ29kZT57fTsKICBtYXAuZm9yRWFjaCgoU3RyaW5nIHByZWZpeCwgTGlzdDxBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucykgewogICAgc3BsaXRbcHJlZml4XSA9IG5ldyBBbm5vdGF0ZWRDb2RlKGFubm90YXRlZENvZGUuc291cmNlQ29kZSwgYW5ub3RhdGlvbnMpOwogIH0pOwogIHJldHVybiBzcGxpdDsKfQqA2ABOTjwBFhYBIx4BMTIBEy0UAS8WAUoUASIVAUIBF1ECATEES00RBBEcHAoEUUcRBEgWKxsBKyYBGQE0AU8BS0pDN0AyMxMUFBYkHCtEICklOyMtMlFLIBQKCAE2GhIiFCIUGBESMjwVDCIUIhQYEREuFBYIDwYcJzkEAR0fFRYdHyo1HBQWJRMUMTsXDhYlExMWChEIHwYEAT4ZO0UEARQqMTYUKkEpIgYsGgQCATwESE5LHQRHHSw+LEQlIgQJPS8YRkVDLCdPMwoYCAYnIwYEQD5OBhACAThwYWNrYWdlOmZyb250X2VuZC9zcmMvdGVzdGluZy9hbm5vdGF0ZWRfY29kZV9oZWxwZXIuZGFydC5zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvdGVzdGluZy9pZC5kYXJ0qqYvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKZW51bSBJZEtpbmQgewogIC8vLyBJZCB1c2VkIGZvciB0b3AgbGV2ZWwgb3IgY2xhc3MgbWVtYmVycy4gVGhpcyBpcyB1c2VkIGluIFtNZW1iZXJJZF0uCiAgbWVtYmVyLAoKICAvLy8gSWQgdXNlZCBmb3IgY2xhc3Nlcy4gVGhpcyBpcyB1c2VkIGluIFtDbGFzc0lkXS4KICBjbHMsCgogIC8vLyBJZCB1c2VkIGZvciBsaWJyYXJpZXMuIFRoaXMgaXMgdXNlZCBpbiBbTGlicmFyeUlkXS4KICBsaWJyYXJ5LAoKICAvLy8gSWQgdXNlZCBmb3IgYSBjb2RlIHBvaW50IGF0IGNlcnRhaW4gb2Zmc2V0LiBUaGUgaWQgcmVwcmVzZW50cyB0aGUgZGVmYXVsdAogIC8vLyB1c2Ugb2YgdGhlIGNvZGUgcG9pbnQsIG9mdGVuIGEgcmVhZCBhY2Nlc3MuIFRoaXMgaXMgdXNlZCBpbiBbTm9kZUlkXS4KICBub2RlLAoKICAvLy8gSWQgdXNlZCBmb3IgYW4gaW52b2NhdGlvbiBhdCBjZXJ0YWluIG9mZnNldC4gVGhpcyBpcyB1c2VkIGluIFtOb2RlSWRdLgogIGludm9rZSwKCiAgLy8vIElkIHVzZWQgZm9yIGFuIGFzc2lnbm1lbnQgYXQgY2VydGFpbiBvZmZzZXQuIFRoaXMgaXMgdXNlZCBpbiBbTm9kZUlkXS4KICB1cGRhdGUsCgogIC8vLyBJZCB1c2VkIGZvciB0aGUgaXRlcmF0b3IgZXhwcmVzc2lvbiBvZiBhIGZvci1pbiBhdCBjZXJ0YWluIG9mZnNldC4gVGhpcyBpcwogIC8vLyB1c2VkIGluIFtOb2RlSWRdLgogIGl0ZXJhdG9yLAoKICAvLy8gSWQgdXNlZCBmb3IgdGhlIGltcGxpY2l0IGNhbGwgdG8gYEl0ZXJhdG9yLmN1cnJlbnRgIGluIGEgZm9yLWluIGF0IGNlcnRhaW4KICAvLy8gb2Zmc2V0LiBUaGlzIGlzIHVzZWQgaW4gW05vZGVJZF0uCiAgY3VycmVudCwKCiAgLy8vIElkIHVzZWQgZm9yIHRoZSBpbXBsaWNpdCBjYWxsIHRvIGBJdGVyYXRvci5tb3ZlTmV4dGAgaW4gYSBmb3ItaW4gYXQKICAvLy8gY2VydGFpbiBvZmZzZXQuIFRoaXMgaXMgdXNlZCBpbiBbTm9kZUlkXS4KICBtb3ZlTmV4dCwKCiAgLy8vIElkIHVzZWQgZm9yIHRoZSBpbXBsaWNpdCBhcyBleHByZXNzaW9uIGluc2VydGVkIGJ5IHRoZSBjb21waWxlci4KICBpbXBsaWNpdEFzLAoKICAvLy8gSWQgdXNlZCBmb3IgdGhlIHN0YXRlbWVudCBhdCBjZXJ0YWluIG9mZnNldC4gVGhpcyBpcyB1c2VkIGluIFtOb2RlSWRdLgogIHN0bXQsCgogIC8vLyBJZCB1c2VkIGZvciB0aGUgZXJyb3IgcmVwb3J0ZWQgYXQgY2VydGFpbiBvZmZzZXQuIFRoaXMgaXMgdXNlZCBpbgogIC8vLyBbTm9kZUlkXS4KICBlcnJvciwKfQoKLy8vIElkIGZvciBhIGNvZGUgcG9pbnQgb3IgZWxlbWVudC4KYWJzdHJhY3QgY2xhc3MgSWQgewogIElkS2luZCBnZXQga2luZDsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZCByZWZlcnMgdG8gYW4gZWxlbWVudCBkZWZpbmVkIG91dHNpZGUgb2YgdGhlIHRlc3QKICAvLy8gY2FzZSBpdHNlbGYgKGUuZy4gc29tZSB0ZXN0cyBtYXkgbmVlZCB0byByZWZlciB0byBwcm9wZXJ0aWVzIG9mIGVsZW1lbnRzCiAgLy8vIGluIGBkYXJ0OmNvcmVgKS4KICBib29sIGdldCBpc0dsb2JhbDsKCiAgLy8vIERpc3BsYXkgbmFtZSBmb3IgdGhpcyBpZC4KICBTdHJpbmcgZ2V0IGRlc2NyaXB0b3I7Cn0KCmNsYXNzIElkVmFsdWUgewogIGZpbmFsIElkIGlkOwogIGZpbmFsIFN0cmluZyB2YWx1ZTsKCiAgY29uc3QgSWRWYWx1ZSh0aGlzLmlkLCB0aGlzLnZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBpZC5oYXNoQ29kZSAqIDEzICsgdmFsdWUuaGFzaENvZGUgKiAxNzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBJZFZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gaWQgPT0gb3RoZXIuaWQgJiYgdmFsdWUgPT0gb3RoZXIudmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBpZFRvU3RyaW5nKGlkLCB2YWx1ZSk7CgogIHN0YXRpYyBTdHJpbmcgaWRUb1N0cmluZyhJZCBpZCwgU3RyaW5nIHZhbHVlKSB7CiAgICBzd2l0Y2ggKGlkLmtpbmQpIHsKICAgICAgY2FzZSBJZEtpbmQubWVtYmVyOgogICAgICAgIE1lbWJlcklkIGVsZW1lbnRJZCA9IGlkOwogICAgICAgIHJldHVybiAnJG1lbWJlclByZWZpeCR7ZWxlbWVudElkLm5hbWV9OiR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLmNsczoKICAgICAgICBDbGFzc0lkIGNsYXNzSWQgPSBpZDsKICAgICAgICByZXR1cm4gJyRjbGFzc1ByZWZpeCR7Y2xhc3NJZC5uYW1lfTokdmFsdWUnOwogICAgICBjYXNlIElkS2luZC5saWJyYXJ5OgogICAgICAgIHJldHVybiAnJGxpYnJhcnlQcmVmaXgkdmFsdWUnOwogICAgICBjYXNlIElkS2luZC5ub2RlOgogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgY2FzZSBJZEtpbmQuaW52b2tlOgogICAgICAgIHJldHVybiAnJGludm9rZVByZWZpeCR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLnVwZGF0ZToKICAgICAgICByZXR1cm4gJyR1cGRhdGVQcmVmaXgkdmFsdWUnOwogICAgICBjYXNlIElkS2luZC5pdGVyYXRvcjoKICAgICAgICByZXR1cm4gJyRpdGVyYXRvclByZWZpeCR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLmN1cnJlbnQ6CiAgICAgICAgcmV0dXJuICckY3VycmVudFByZWZpeCR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLm1vdmVOZXh0OgogICAgICAgIHJldHVybiAnJG1vdmVOZXh0UHJlZml4JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQuaW1wbGljaXRBczoKICAgICAgICByZXR1cm4gJyRpbXBsaWNpdEFzUHJlZml4JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQuc3RtdDoKICAgICAgICByZXR1cm4gJyRzdG10UHJlZml4JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQuZXJyb3I6CiAgICAgICAgcmV0dXJuICckZXJyb3JQcmVmaXgkdmFsdWUnOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgaWQga2luZDogJHtpZC5raW5kfSIpOwogIH0KCiAgc3RhdGljIGNvbnN0IFN0cmluZyBnbG9iYWxQcmVmaXggPSAiZ2xvYmFsIyI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBtZW1iZXJQcmVmaXggPSAibWVtYmVyOiAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY2xhc3NQcmVmaXggPSAiY2xhc3M6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBsaWJyYXJ5UHJlZml4ID0gImxpYnJhcnk6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBpbnZva2VQcmVmaXggPSAiaW52b2tlOiAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdXBkYXRlUHJlZml4ID0gInVwZGF0ZTogIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGl0ZXJhdG9yUHJlZml4ID0gIml0ZXJhdG9yOiAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY3VycmVudFByZWZpeCA9ICJjdXJyZW50OiAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbW92ZU5leHRQcmVmaXggPSAibW92ZU5leHQ6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBpbXBsaWNpdEFzUHJlZml4ID0gImFzOiAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3RtdFByZWZpeCA9ICJzdG10OiAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZXJyb3JQcmVmaXggPSAiZXJyb3I6ICI7CgogIHN0YXRpYyBJZFZhbHVlIGRlY29kZShVcmkgc291cmNlVXJpLCBpbnQgb2Zmc2V0LCBTdHJpbmcgdGV4dCkgewogICAgSWQgaWQ7CiAgICBTdHJpbmcgZXhwZWN0ZWQ7CiAgICBpZiAodGV4dC5zdGFydHNXaXRoKG1lbWJlclByZWZpeCkpIHsKICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKG1lbWJlclByZWZpeC5sZW5ndGgpOwogICAgICBpbnQgY29sb25Qb3MgPSB0ZXh0LmluZGV4T2YoJzonKTsKICAgICAgaWYgKGNvbG9uUG9zID09IC0xKSB0aHJvdyAiSW52YWxpZCBtZW1iZXIgaWQ6ICckdGV4dCciOwogICAgICBTdHJpbmcgbmFtZSA9IHRleHQuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKTsKICAgICAgYm9vbCBpc0dsb2JhbCA9IG5hbWUuc3RhcnRzV2l0aChnbG9iYWxQcmVmaXgpOwogICAgICBpZiAoaXNHbG9iYWwpIHsKICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoZ2xvYmFsUHJlZml4Lmxlbmd0aCk7CiAgICAgIH0KICAgICAgaWQgPSBuZXcgTWVtYmVySWQobmFtZSwgaXNHbG9iYWw6IGlzR2xvYmFsKTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhjb2xvblBvcyArIDEpOwogICAgfSBlbHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgoY2xhc3NQcmVmaXgpKSB7CiAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZyhjbGFzc1ByZWZpeC5sZW5ndGgpOwogICAgICBpbnQgY29sb25Qb3MgPSB0ZXh0LmluZGV4T2YoJzonKTsKICAgICAgaWYgKGNvbG9uUG9zID09IC0xKSB0aHJvdyAiSW52YWxpZCBjbGFzcyBpZDogJyR0ZXh0JyI7CiAgICAgIFN0cmluZyBuYW1lID0gdGV4dC5zdWJzdHJpbmcoMCwgY29sb25Qb3MpOwogICAgICBib29sIGlzR2xvYmFsID0gbmFtZS5zdGFydHNXaXRoKGdsb2JhbFByZWZpeCk7CiAgICAgIGlmIChpc0dsb2JhbCkgewogICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhnbG9iYWxQcmVmaXgubGVuZ3RoKTsKICAgICAgfQogICAgICBpZCA9IG5ldyBDbGFzc0lkKG5hbWUsIGlzR2xvYmFsOiBpc0dsb2JhbCk7CiAgICAgIGV4cGVjdGVkID0gdGV4dC5zdWJzdHJpbmcoY29sb25Qb3MgKyAxKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKGxpYnJhcnlQcmVmaXgpKSB7CiAgICAgIGlkID0gbmV3IExpYnJhcnlJZChzb3VyY2VVcmkpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKGxpYnJhcnlQcmVmaXgubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKGludm9rZVByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLmludm9rZSk7CiAgICAgIGV4cGVjdGVkID0gdGV4dC5zdWJzdHJpbmcoaW52b2tlUHJlZml4Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aCh1cGRhdGVQcmVmaXgpKSB7CiAgICAgIGlkID0gbmV3IE5vZGVJZChvZmZzZXQsIElkS2luZC51cGRhdGUpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKHVwZGF0ZVByZWZpeC5sZW5ndGgpOwogICAgfSBlbHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgoaXRlcmF0b3JQcmVmaXgpKSB7CiAgICAgIGlkID0gbmV3IE5vZGVJZChvZmZzZXQsIElkS2luZC5pdGVyYXRvcik7CiAgICAgIGV4cGVjdGVkID0gdGV4dC5zdWJzdHJpbmcoaXRlcmF0b3JQcmVmaXgubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKGN1cnJlbnRQcmVmaXgpKSB7CiAgICAgIGlkID0gbmV3IE5vZGVJZChvZmZzZXQsIElkS2luZC5jdXJyZW50KTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhjdXJyZW50UHJlZml4Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aChtb3ZlTmV4dFByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLm1vdmVOZXh0KTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhtb3ZlTmV4dFByZWZpeC5sZW5ndGgpOwogICAgfSBlbHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgoaW1wbGljaXRBc1ByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLmltcGxpY2l0QXMpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKGltcGxpY2l0QXNQcmVmaXgubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKHN0bXRQcmVmaXgpKSB7CiAgICAgIGlkID0gbmV3IE5vZGVJZChvZmZzZXQsIElkS2luZC5zdG10KTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhzdG10UHJlZml4Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aChlcnJvclByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLmVycm9yKTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhlcnJvclByZWZpeC5sZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLm5vZGUpOwogICAgICBleHBlY3RlZCA9IHRleHQ7CiAgICB9CiAgICAvLyBSZW1vdmUgbmV3bGluZXMuCiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnJlcGxhY2VBbGwobmV3IFJlZ0V4cChyJ1xzKihcblxzKikrXHMqJyksICcnKTsKICAgIHJldHVybiBuZXcgSWRWYWx1ZShpZCwgZXhwZWN0ZWQpOwogIH0KfQoKLy8vIElkIGZvciBhbiBtZW1iZXIgZWxlbWVudC4KY2xhc3MgTWVtYmVySWQgaW1wbGVtZW50cyBJZCB7CiAgZmluYWwgU3RyaW5nIGNsYXNzTmFtZTsKICBmaW5hbCBTdHJpbmcgbWVtYmVyTmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzR2xvYmFsOwoKICBmYWN0b3J5IE1lbWJlcklkKFN0cmluZyB0ZXh0LCB7Ym9vbCBpc0dsb2JhbDogZmFsc2V9KSB7CiAgICBpbnQgZG90UG9zID0gdGV4dC5pbmRleE9mKCcuJyk7CiAgICBpZiAoZG90UG9zICE9IC0xKSB7CiAgICAgIHJldHVybiBuZXcgTWVtYmVySWQuaW50ZXJuYWwodGV4dC5zdWJzdHJpbmcoZG90UG9zICsgMSksCiAgICAgICAgICBjbGFzc05hbWU6IHRleHQuc3Vic3RyaW5nKDAsIGRvdFBvcyksIGlzR2xvYmFsOiBpc0dsb2JhbCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IE1lbWJlcklkLmludGVybmFsKHRleHQsIGlzR2xvYmFsOiBpc0dsb2JhbCk7CiAgICB9CiAgfQoKICBNZW1iZXJJZC5pbnRlcm5hbCh0aGlzLm1lbWJlck5hbWUsIHt0aGlzLmNsYXNzTmFtZSwgdGhpcy5pc0dsb2JhbDogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBjbGFzc05hbWUuaGFzaENvZGUgKiAxMyArIG1lbWJlck5hbWUuaGFzaENvZGUgKiAxNzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBNZW1iZXJJZCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGNsYXNzTmFtZSA9PSBvdGhlci5jbGFzc05hbWUgJiYgbWVtYmVyTmFtZSA9PSBvdGhlci5tZW1iZXJOYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgSWRLaW5kIGdldCBraW5kID0+IElkS2luZC5tZW1iZXI7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBjbGFzc05hbWUgIT0gbnVsbCA/ICckY2xhc3NOYW1lLiRtZW1iZXJOYW1lJyA6IG1lbWJlck5hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVzY3JpcHRvciA9PiAnbWVtYmVyICRuYW1lJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ21lbWJlcjokbmFtZSc7Cn0KCi8vLyBJZCBmb3IgYSBjbGFzcy4KY2xhc3MgQ2xhc3NJZCBpbXBsZW1lbnRzIElkIHsKICBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNHbG9iYWw7CgogIENsYXNzSWQodGhpcy5jbGFzc05hbWUsIHt0aGlzLmlzR2xvYmFsOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGNsYXNzTmFtZS5oYXNoQ29kZSAqIDEzOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIENsYXNzSWQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBjbGFzc05hbWUgPT0gb3RoZXIuY2xhc3NOYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgSWRLaW5kIGdldCBraW5kID0+IElkS2luZC5jbHM7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBjbGFzc05hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVzY3JpcHRvciA9PiAnY2xhc3MgJG5hbWUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnY2xhc3M6JG5hbWUnOwp9CgovLy8gSWQgZm9yIGEgbGlicmFyeS4KY2xhc3MgTGlicmFyeUlkIGltcGxlbWVudHMgSWQgewogIGZpbmFsIFVyaSB1cmk7CgogIExpYnJhcnlJZCh0aGlzLnVyaSk7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgZ2xvYmFsIGxpYnJhcnkgYW5ub3RhdGlvbnMuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNHbG9iYWwgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdXJpLmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgTGlicmFyeUlkKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdXJpID09IG90aGVyLnVyaTsKICB9CgogIEBvdmVycmlkZQogIElkS2luZCBnZXQga2luZCA9PiBJZEtpbmQubGlicmFyeTsKCiAgU3RyaW5nIGdldCBuYW1lID0+IHVyaS50b1N0cmluZygpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlc2NyaXB0b3IgPT4gJ2xpYnJhcnkgJG5hbWUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnbGlicmFyeTokbmFtZSc7Cn0KCi8vLyBJZCBmb3IgYSBjb2RlIHBvaW50IGRlZmluZWQgYnkgYSBraW5kIGFuZCBhIGNvZGUgb2Zmc2V0LgpjbGFzcyBOb2RlSWQgaW1wbGVtZW50cyBJZCB7CiAgZmluYWwgaW50IHZhbHVlOwogIEBvdmVycmlkZQogIGZpbmFsIElkS2luZCBraW5kOwoKICBjb25zdCBOb2RlSWQodGhpcy52YWx1ZSwgdGhpcy5raW5kKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNHbG9iYWwgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdmFsdWUuaGFzaENvZGUgKiAxMyArIGtpbmQuaGFzaENvZGUgKiAxNzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBOb2RlSWQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZSA9PSBvdGhlci52YWx1ZSAmJiBraW5kID09IG90aGVyLmtpbmQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlc2NyaXB0b3IgPT4gJ29mZnNldCAkdmFsdWUgKCRraW5kKSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcka2luZDokdmFsdWUnOwp9CgpjbGFzcyBBY3R1YWxEYXRhPFQ+IHsKICBmaW5hbCBJZCBpZDsKICBmaW5hbCBUIHZhbHVlOwogIGZpbmFsIFVyaSB1cmk7CiAgZmluYWwgaW50IF9vZmZzZXQ7CiAgZmluYWwgT2JqZWN0IG9iamVjdDsKCiAgQWN0dWFsRGF0YSh0aGlzLmlkLCB0aGlzLnZhbHVlLCB0aGlzLnVyaSwgdGhpcy5fb2Zmc2V0LCB0aGlzLm9iamVjdCk7CgogIGludCBnZXQgb2Zmc2V0IHsKICAgIGlmIChpZCBpcyBOb2RlSWQpIHsKICAgICAgTm9kZUlkIG5vZGVJZCA9IGlkOwogICAgICByZXR1cm4gbm9kZUlkLnZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9vZmZzZXQ7CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IG9iamVjdFRleHQgewogICAgcmV0dXJuICdvYmplY3QgYCR7JyRvYmplY3QnLnJlcGxhY2VBbGwoJ1xuJywgJycpfWAgKCR7b2JqZWN0LnJ1bnRpbWVUeXBlfSknOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0FjdHVhbERhdGEoaWQ9JGlkLHZhbHVlPSR2YWx1ZSx1cmk9JHVyaSwnCiAgICAgICdvZmZzZXQ9JG9mZnNldCxvYmplY3Q9JG9iamVjdFRleHQpJzsKfQoKYWJzdHJhY3QgY2xhc3MgRGF0YVJlZ2lzdHJ5PFQ+IHsKICBNYXA8SWQsIEFjdHVhbERhdGE8VD4+IGdldCBhY3R1YWxNYXA7CgogIC8vLyBSZWdpc3RlcnMgW3ZhbHVlXSB3aXRoIFtpZF0gaW4gW2FjdHVhbE1hcF0uCiAgLy8vCiAgLy8vIENoZWNrcyBmb3IgZHVwbGljYXRlIGRhdGEgZm9yIFtpZF0uCiAgdm9pZCByZWdpc3RlclZhbHVlKFVyaSB1cmksIGludCBvZmZzZXQsIElkIGlkLCBUIHZhbHVlLCBPYmplY3Qgb2JqZWN0KSB7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICBpZiAoYWN0dWFsTWFwLmNvbnRhaW5zS2V5KGlkKSkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIGxldCB0aGUgdGVzdCBzdXBwbHkgYSB3YXkgdG8gbWVyZ2UKICAgICAgICAvLyBtdWx0aXBsZSBkYXRhIG9uIHRoZSBzYW1lIGlkPwogICAgICAgIEFjdHVhbERhdGE8VD4gZXhpc3RpbmdEYXRhID0gYWN0dWFsTWFwW2lkXTsKICAgICAgICByZXBvcnQodXJpLCBvZmZzZXQsICJEdXBsaWNhdGUgaWQgJHtpZH0sIHZhbHVlPSR2YWx1ZSwgb2JqZWN0PSRvYmplY3QiKTsKICAgICAgICByZXBvcnQoCiAgICAgICAgICAgIHVyaSwKICAgICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgICAiRHVwbGljYXRlIGlkICR7aWR9LCB2YWx1ZT0ke2V4aXN0aW5nRGF0YS52YWx1ZX0sICIKICAgICAgICAgICAgIm9iamVjdD0ke2V4aXN0aW5nRGF0YS5vYmplY3R9Iik7CiAgICAgICAgZmFpbCgiRHVwbGljYXRlIGlkICRpZC4iKTsKICAgICAgfQogICAgICBhY3R1YWxNYXBbaWRdID0gbmV3IEFjdHVhbERhdGE8VD4oaWQsIHZhbHVlLCB1cmksIG9mZnNldCwgb2JqZWN0KTsKICAgIH0KICB9CgogIC8vLyBDYWxsZWQgdG8gcmVwb3J0IGR1cGxpY2F0ZSBlcnJvcnMuCiAgdm9pZCByZXBvcnQoVXJpIHVyaSwgaW50IG9mZnNldCwgU3RyaW5nIG1lc3NhZ2UpOwoKICAvLy8gQ2FsbGVkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBvbiBkdXBsaWNhdGUgZXJyb3JzLgogIHZvaWQgZmFpbChTdHJpbmcgbWVzc2FnZSk7Cn0KgXgATk48AQ5KCgE2BwE6CwFQTAgBTQoBTQoBURgMAVEoCwFKMAwBRw4BTQgBSBAJAgEkFBMBUE8XFQEgGQIBEA8WASYBDD4BDBwtKTMEAQwuATIXGiE4Fx41GycYFhomGiYcKBsnHCgeKhgkGSUGQgQBMDEvMzExNTM1MS0vAUILFSkyKD4xNRY0CDMvLzEoPTE1FjQIMi8xJTcwLjYwLjYyMDgxLzcyMDg0MjouLDQvLTUNLBcGGEcmBAIBHh8aGwwXATokGD9FDT4GBAFOAQxKAQwcLSpLBAEMJAFQAQwrAQwnAgEUHhoMFwEzAQwvAQwcLSkpBAEMIQEgAQwqAQwmAgEWIBEBFwE+DB4BDCkBDBwtKx0EAQwlASUBDCwBDCgCAT0dEwwVAScBDB4BDEABDBwtKDcEAQw0AQwnAgEWDxERFRcBSAETGBobDRYGBAEaUQQBDEIsAgEhKAEyBipLGSdJKTRREBEUQC4jCEkGBAEpNAE4HQIBJXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2lkLmRhcnQzc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NyeXB0by9saWIvc3JjL2RpZ2VzdC5kYXJ0g7YvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmNvbGxlY3Rpb24vY29sbGVjdGlvbi5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmNvbnZlcnQvY29udmVydC5kYXJ0JzsKCi8vLyBBIG1lc3NhZ2UgZGlnZXN0IGFzIGNvbXB1dGVkIGJ5IGEgYEhhc2hgIG9yIGBITUFDYCBmdW5jdGlvbi4KY2xhc3MgRGlnZXN0IHsKICAvLy8gVGhlIG1lc3NhZ2UgZGlnZXN0IGFzIGFuIGFycmF5IG9mIGJ5dGVzLgogIGZpbmFsIExpc3Q8aW50PiBieXRlczsKCiAgRGlnZXN0KHRoaXMuYnl0ZXMpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIHRoaXMgaXMgZXF1YWwgdG8gYW5vdGhlciBkaWdlc3QuCiAgLy8vCiAgLy8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBtYW51YWwgY29tcGFyaXNvbnMgdG8gYXZvaWQgbGVha2luZwogIC8vLyBpbmZvcm1hdGlvbiB2aWEgdGltaW5nLgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PgogICAgICBvdGhlciBpcyBEaWdlc3QgJiYgY29uc3QgTGlzdEVxdWFsaXR5KCkuZXF1YWxzKGJ5dGVzLCBvdGhlci5ieXRlcyk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gY29uc3QgTGlzdEVxdWFsaXR5KCkuaGFzaChieXRlcyk7CgogIC8vLyBUaGUgbWVzc2FnZSBkaWdlc3QgYXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGhleC5lbmNvZGUoYnl0ZXMpOwp9Ch8ATk48AS0nAUEPLxkBFgE3BkkeDCRKAQw4ATwMKgIBHnBhY2thZ2U6Y3J5cHRvL3NyYy9kaWdlc3QuZGFydDFzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY3J5cHRvL2xpYi9zcmMvaGFzaC5kYXJ0hEMvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwoKaW1wb3J0ICdkaWdlc3QuZGFydCc7CmltcG9ydCAnZGlnZXN0X3NpbmsuZGFydCc7CgovLy8gQW4gaW50ZXJmYWNlIGZvciBjcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb25zLgovLy8KLy8vIEV2ZXJ5IGhhc2ggaXMgYSBjb252ZXJ0ZXIgdGhhdCB0YWtlcyBhIGxpc3Qgb2YgaW50cyBhbmQgcmV0dXJucyBhIHNpbmdsZQovLy8gZGlnZXN0LiBXaGVuIHVzZWQgaW4gY2h1bmtlZCBtb2RlLCBpdCB3aWxsIG9ubHkgZXZlciBhZGQgb25lIGRpZ2VzdCB0byB0aGUKLy8vIGlubmVyIFtTaW5rXS4KYWJzdHJhY3QgY2xhc3MgSGFzaCBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIERpZ2VzdD4gewogIC8vLyBUaGUgaW50ZXJuYWwgYmxvY2sgc2l6ZSBvZiB0aGUgaGFzaCBpbiBieXRlcy4KICAvLy8KICAvLy8gVGhpcyBpcyBleHBvc2VkIGZvciB1c2UgYnkgdGhlIGBIbWFjYCBjbGFzcywgd2hpY2ggbmVlZHMgdG8ga25vdyB0aGUgYmxvY2sKICAvLy8gc2l6ZSBmb3IgdGhlIFtIYXNoXSBpdCB1c2VzLgogIGludCBnZXQgYmxvY2tTaXplOwoKICBjb25zdCBIYXNoKCk7CgogIEBvdmVycmlkZQogIERpZ2VzdCBjb252ZXJ0KExpc3Q8aW50PiBkYXRhKSB7CiAgICB2YXIgaW5uZXJTaW5rID0gbmV3IERpZ2VzdFNpbmsoKTsKICAgIHZhciBvdXRlclNpbmsgPSBzdGFydENodW5rZWRDb252ZXJzaW9uKGlubmVyU2luayk7CiAgICBvdXRlclNpbmsuYWRkKGRhdGEpOwogICAgb3V0ZXJTaW5rLmNsb3NlKCk7CiAgICByZXR1cm4gaW5uZXJTaW5rLnZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxEaWdlc3Q+IHNpbmspOwp9CiUATk48ARcBFhsBMwRNTxI7NAZRIxUBEAEMIyY3GRccBAEMQAIBHHBhY2thZ2U6Y3J5cHRvL3NyYy9oYXNoLmRhcnQxc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NyeXB0by9saWIvc3JjL2htYWMuZGFydIxlLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKaW1wb3J0ICdkaWdlc3QuZGFydCc7CmltcG9ydCAnZGlnZXN0X3NpbmsuZGFydCc7CmltcG9ydCAnaGFzaC5kYXJ0JzsKCi8vLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBba2V5ZWQtaGFzaCBtZXRob2QgYXV0aGVudGljYXRpb24gY29kZXNdW3JmY10uCi8vLwovLy8gW3JmY106IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMTA0Ci8vLwovLy8gSE1BQyBhbGxvd3MgbWVzc2FnZXMgdG8gYmUgY3J5cHRvZ3JhcGhpY2FsbHkgYXV0aGVudGljYXRlZCB1c2luZyBhbnkKLy8vIGl0ZXJhdGVkIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbi4KY2xhc3MgSG1hYyBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIERpZ2VzdD4gewogIC8vLyBUaGUgaGFzaCBmdW5jdGlvbiB1c2VkIHRvIGNvbXB1dGUgdGhlIGF1dGhlbnRpY2F0aW9uIGRpZ2VzdC4KICBmaW5hbCBIYXNoIF9oYXNoOwoKICAvLy8gVGhlIHNlY3JldCBrZXkgc2hhcmVkIGJ5IHRoZSBzZW5kZXIgYW5kIHRoZSByZWNlaXZlci4KICBmaW5hbCBVaW50OExpc3QgX2tleTsKCiAgLy8vIENyZWF0ZSBhbiBbSG1hY10gb2JqZWN0IGZyb20gYSBbSGFzaF0gYW5kIGEgYmluYXJ5IGtleS4KICAvLy8KICAvLy8gVGhlIGtleSBzaG91bGQgYmUgYSBzZWNyZXQgc2hhcmVkIGJldHdlZW4gdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIgb2YgdGhlCiAgLy8vIG1lc3NhZ2UuCiAgSG1hYyhIYXNoIGhhc2gsIExpc3Q8aW50PiBrZXkpCiAgICAgIDogX2hhc2ggPSBoYXNoLAogICAgICAgIF9rZXkgPSBuZXcgVWludDhMaXN0KGhhc2guYmxvY2tTaXplKSB7CiAgICAvLyBIYXNoIHRoZSBrZXkgaWYgaXQncyBsb25nZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgaGFzaC4KICAgIGlmIChrZXkubGVuZ3RoID4gX2hhc2guYmxvY2tTaXplKSBrZXkgPSBfaGFzaC5jb252ZXJ0KGtleSkuYnl0ZXM7CgogICAgLy8gSWYgW2tleV0gaXMgc2hvcnRlciB0aGFuIHRoZSBibG9jayBzaXplLCB0aGUgcmVzdCBvZiBbX2tleV0gd2lsbCBiZQogICAgLy8gMC1wYWRkZWQuCiAgICBfa2V5LnNldFJhbmdlKDAsIGtleS5sZW5ndGgsIGtleSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEaWdlc3QgY29udmVydChMaXN0PGludD4gZGF0YSkgewogICAgdmFyIGlubmVyU2luayA9IG5ldyBEaWdlc3RTaW5rKCk7CiAgICB2YXIgb3V0ZXJTaW5rID0gc3RhcnRDaHVua2VkQ29udmVyc2lvbihpbm5lclNpbmspOwogICAgb3V0ZXJTaW5rLmFkZChkYXRhKTsKICAgIG91dGVyU2luay5jbG9zZSgpOwogICAgcmV0dXJuIGlubmVyU2luay52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8RGlnZXN0PiBzaW5rKSA9PgogICAgICBuZXcgX0htYWNTaW5rKHNpbmssIF9oYXNoLCBfa2V5KTsKfQoKLy8vIFRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSE1BQyBhbGdvcml0aG0uCmNsYXNzIF9IbWFjU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgLy8vIFRoZSBzaW5rIGZvciB0aGUgb3V0ZXIgaGFzaCBjb21wdXRhdGlvbi4KICBmaW5hbCBCeXRlQ29udmVyc2lvblNpbmsgX291dGVyU2luazsKCiAgLy8vIFRoZSBzaW5rIHRoYXQgW19pbm5lclNpbmtdJ3MgcmVzdWx0IHdpbGwgYmUgYWRkZWQgdG8gd2hlbiBpdCdzIGF2YWlsYWJsZS4KICBmaW5hbCBfaW5uZXJSZXN1bHRTaW5rID0gbmV3IERpZ2VzdFNpbmsoKTsKCiAgLy8vIFRoZSBzaW5rIGZvciB0aGUgaW5uZXIgaGFzaCBjb21wdXRhdGlvbi4KICBCeXRlQ29udmVyc2lvblNpbmsgX2lubmVyU2luazsKCiAgLy8vIFdoZXRoZXIgW2Nsb3NlXSBoYXMgYmVlbiBjYWxsZWQuCiAgYm9vbCBfaXNDbG9zZWQgPSBmYWxzZTsKCiAgX0htYWNTaW5rKFNpbms8RGlnZXN0PiBzaW5rLCBIYXNoIGhhc2gsIExpc3Q8aW50PiBrZXkpCiAgICAgIDogX291dGVyU2luayA9IGhhc2guc3RhcnRDaHVua2VkQ29udmVyc2lvbihzaW5rKSB7CiAgICBfaW5uZXJTaW5rID0gaGFzaC5zdGFydENodW5rZWRDb252ZXJzaW9uKF9pbm5lclJlc3VsdFNpbmspOwoKICAgIC8vIENvbXB1dGUgb3V0ZXIgcGFkZGluZy4KICAgIHZhciBwYWRkaW5nID0gbmV3IFVpbnQ4TGlzdChrZXkubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFkZGluZy5sZW5ndGg7IGkrKykgewogICAgICBwYWRkaW5nW2ldID0gMHg1YyBeIGtleVtpXTsKICAgIH0KICAgIF9vdXRlclNpbmsuYWRkKHBhZGRpbmcpOwoKICAgIC8vIENvbXB1dGUgaW5uZXIgcGFkZGluZy4KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFkZGluZy5sZW5ndGg7IGkrKykgewogICAgICBwYWRkaW5nW2ldID0gMHgzNiBeIGtleVtpXTsKICAgIH0KICAgIF9pbm5lclNpbmsuYWRkKHBhZGRpbmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGlmIChfaXNDbG9zZWQpIHRocm93IG5ldyBTdGF0ZUVycm9yKCdITUFDIGlzIGNsb3NlZCcpOwogICAgX2lubmVyU2luay5hZGQoZGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB0aHJvdyBuZXcgU3RhdGVFcnJvcignSE1BQyBpcyBjbG9zZWQnKTsKICAgIF9pbm5lclNpbmsuYWRkU2xpY2UoZGF0YSwgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSByZXR1cm47CiAgICBfaXNDbG9zZWQgPSB0cnVlOwoKICAgIF9pbm5lclNpbmsuY2xvc2UoKTsKICAgIF9vdXRlclNpbmsuYWRkKF9pbm5lclJlc3VsdFNpbmsudmFsdWUuYnl0ZXMpOwogICAgX291dGVyU2luay5jbG9zZSgpOwogIH0KfQptAE5OPAEXGgEWGxQBSAQvBEkqMkMUATwYAT4GTw8hFi9ERgFLEScEAQwjJjcZFxwEAQxCKAIBNy0vJwFQLQEvIQEnGgE5OUABHi0vIgYdAR4vIgYdBAEMHTsaBAEMQzszBAEMERsWARgyGAQCARxwYWNrYWdlOmNyeXB0by9zcmMvaG1hYy5kYXJ0MHNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jcnlwdG8vbGliL3NyYy9tZDUuZGFydI7aLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKaW1wb3J0ICdkaWdlc3QuZGFydCc7CmltcG9ydCAnaGFzaC5kYXJ0JzsKaW1wb3J0ICdoYXNoX3NpbmsuZGFydCc7CmltcG9ydCAndXRpbHMuZGFydCc7CgovLy8gQW4gaW5zdGFuY2Ugb2YgW01ENV0uCi8vLwovLy8gVGhpcyBpbnN0YW5jZSBwcm92aWRlcyBjb252ZW5pZW50IGFjY2VzcyB0byB0aGUgW01ENV1bcmZjXSBoYXNoIGZ1bmN0aW9uLgovLy8KLy8vIFtyZmNdOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTMyMQovLy8KLy8vICoqV2FybmluZyoqOiBNRDUgaGFzIGtub3duIGNvbGxpc2lvbnMgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiByZXF1aXJlZAovLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgpmaW5hbCBtZDUgPSBuZXcgTUQ1Ll8oKTsKCi8vLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW01ENV1bcmZjXSBoYXNoIGZ1bmN0aW9uLgovLy8KLy8vIFtyZmNdOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTMyMQovLy8KLy8vICoqV2FybmluZyoqOiBNRDUgaGFzIGtub3duIGNvbGxpc2lvbnMgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiByZXF1aXJlZAovLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgovLy8KLy8vIE5vdGUgdGhhdCBpdCdzIGFsbW9zdCBhbHdheXMgZWFzaWVyIHRvIHVzZSBbbWQ1XSByYXRoZXIgdGhhbiBjcmVhdGluZyBhIG5ldwovLy8gaW5zdGFuY2UuCmNsYXNzIE1ENSBleHRlbmRzIEhhc2ggewogIEBvdmVycmlkZQogIGZpbmFsIGludCBibG9ja1NpemUgPSAxNiAqIGJ5dGVzUGVyV29yZDsKCiAgTUQ1Ll8oKTsKCiAgQG92ZXJyaWRlCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxEaWdlc3Q+IHNpbmspID0+CiAgICAgIG5ldyBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShuZXcgX01ENVNpbmsoc2luaykpOwp9CgovLy8gRGF0YSBmcm9tIGEgbm9uLWxpbmVhciBtYXRoZW1hdGljYWwgZnVuY3Rpb24gdGhhdCBmdW5jdGlvbnMgYXMKLy8vIHJlcHJvZHVjaWJsZSBub2lzZS4KY29uc3QgX25vaXNlID0gY29uc3QgWwogIDB4ZDc2YWE0NzgsIDB4ZThjN2I3NTYsIDB4MjQyMDcwZGIsIDB4YzFiZGNlZWUsIDB4ZjU3YzBmYWYsIDB4NDc4N2M2MmEsIC8vCiAgMHhhODMwNDYxMywgMHhmZDQ2OTUwMSwgMHg2OTgwOThkOCwgMHg4YjQ0ZjdhZiwgMHhmZmZmNWJiMSwgMHg4OTVjZDdiZSwKICAweDZiOTAxMTIyLCAweGZkOTg3MTkzLCAweGE2Nzk0MzhlLCAweDQ5YjQwODIxLCAweGY2MWUyNTYyLCAweGMwNDBiMzQwLAogIDB4MjY1ZTVhNTEsIDB4ZTliNmM3YWEsIDB4ZDYyZjEwNWQsIDB4MDI0NDE0NTMsIDB4ZDhhMWU2ODEsIDB4ZTdkM2ZiYzgsCiAgMHgyMWUxY2RlNiwgMHhjMzM3MDdkNiwgMHhmNGQ1MGQ4NywgMHg0NTVhMTRlZCwgMHhhOWUzZTkwNSwgMHhmY2VmYTNmOCwKICAweDY3NmYwMmQ5LCAweDhkMmE0YzhhLCAweGZmZmEzOTQyLCAweDg3NzFmNjgxLCAweDZkOWQ2MTIyLCAweGZkZTUzODBjLAogIDB4YTRiZWVhNDQsIDB4NGJkZWNmYTksIDB4ZjZiYjRiNjAsIDB4YmViZmJjNzAsIDB4Mjg5YjdlYzYsIDB4ZWFhMTI3ZmEsCiAgMHhkNGVmMzA4NSwgMHgwNDg4MWQwNSwgMHhkOWQ0ZDAzOSwgMHhlNmRiOTllNSwgMHgxZmEyN2NmOCwgMHhjNGFjNTY2NSwKICAweGY0MjkyMjQ0LCAweDQzMmFmZjk3LCAweGFiOTQyM2E3LCAweGZjOTNhMDM5LCAweDY1NWI1OWMzLCAweDhmMGNjYzkyLAogIDB4ZmZlZmY0N2QsIDB4ODU4NDVkZDEsIDB4NmZhODdlNGYsIDB4ZmUyY2U2ZTAsIDB4YTMwMTQzMTQsIDB4NGUwODExYTEsCiAgMHhmNzUzN2U4MiwgMHhiZDNhZjIzNSwgMHgyYWQ3ZDJiYiwgMHhlYjg2ZDM5MQpdOwoKLy8vIFBlci1yb3VuZCBzaGlmdCBhbW91bnRzLgpjb25zdCBfc2hpZnRBbW91bnRzID0gY29uc3QgWwogIDA3LCAxMiwgMTcsIDIyLCAwNywgMTIsIDE3LCAyMiwgMDcsIDEyLCAxNywgMjIsIDA3LCAxMiwgMTcsIDIyLCAwNSwgMDksIDE0LCAvLwogIDIwLCAwNSwgMDksIDE0LCAyMCwgMDUsIDA5LCAxNCwgMjAsIDA1LCAwOSwgMTQsIDIwLCAwNCwgMTEsIDE2LCAyMywgMDQsIDExLAogIDE2LCAyMywgMDQsIDExLCAxNiwgMjMsIDA0LCAxMSwgMTYsIDIzLCAwNiwgMTAsIDE1LCAyMSwgMDYsIDEwLCAxNSwgMjEsIDA2LAogIDEwLCAxNSwgMjEsIDA2LCAxMCwgMTUsIDIxCl07CgovLy8gVGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtNRDVdLgovLy8KLy8vIFRoaXMgaXMgc2VwYXJhdGUgc28gdGhhdCBpdCBjYW4gZXh0ZW5kIFtIYXNoU2lua10gd2l0aG91dCBsZWFraW5nIGFkZGl0aW9uYWwKLy8vIHB1YmxpYyBtZW1iZXJzLgpjbGFzcyBfTUQ1U2luayBleHRlbmRzIEhhc2hTaW5rIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBkaWdlc3QgPSBuZXcgVWludDMyTGlzdCg0KTsKCiAgX01ENVNpbmsoU2luazxEaWdlc3Q+IHNpbmspIDogc3VwZXIoc2luaywgMTYsIGVuZGlhbjogRW5kaWFuLmxpdHRsZSkgewogICAgZGlnZXN0WzBdID0gMHg2NzQ1MjMwMTsKICAgIGRpZ2VzdFsxXSA9IDB4ZWZjZGFiODk7CiAgICBkaWdlc3RbMl0gPSAweDk4YmFkY2ZlOwogICAgZGlnZXN0WzNdID0gMHgxMDMyNTQ3NjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlSGFzaChVaW50MzJMaXN0IGNodW5rKSB7CiAgICBhc3NlcnQoY2h1bmsubGVuZ3RoID09IDE2KTsKCiAgICB2YXIgYSA9IGRpZ2VzdFswXTsKICAgIHZhciBiID0gZGlnZXN0WzFdOwogICAgdmFyIGMgPSBkaWdlc3RbMl07CiAgICB2YXIgZCA9IGRpZ2VzdFszXTsKCiAgICBpbnQgZTsKICAgIGludCBmOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjQ7IGkrKykgewogICAgICBpZiAoaSA8IDE2KSB7CiAgICAgICAgZSA9IChiICYgYykgfCAoKH5iICYgbWFzazMyKSAmIGQpOwogICAgICAgIGYgPSBpOwogICAgICB9IGVsc2UgaWYgKGkgPCAzMikgewogICAgICAgIGUgPSAoZCAmIGIpIHwgKCh+ZCAmIG1hc2szMikgJiBjKTsKICAgICAgICBmID0gKCg1ICogaSkgKyAxKSAlIDE2OwogICAgICB9IGVsc2UgaWYgKGkgPCA0OCkgewogICAgICAgIGUgPSBiIF4gYyBeIGQ7CiAgICAgICAgZiA9ICgoMyAqIGkpICsgNSkgJSAxNjsKICAgICAgfSBlbHNlIHsKICAgICAgICBlID0gYyBeIChiIHwgKH5kICYgbWFzazMyKSk7CiAgICAgICAgZiA9ICg3ICogaSkgJSAxNjsKICAgICAgfQoKICAgICAgdmFyIHRlbXAgPSBkOwogICAgICBkID0gYzsKICAgICAgYyA9IGI7CiAgICAgIGIgPSBhZGQzMigKICAgICAgICAgIGIsCiAgICAgICAgICByb3RsMzIoYWRkMzIoYWRkMzIoYSwgZSksIGFkZDMyKF9ub2lzZVtpXSwgY2h1bmtbZl0pKSwKICAgICAgICAgICAgICBfc2hpZnRBbW91bnRzW2ldKSk7CiAgICAgIGEgPSB0ZW1wOwogICAgfQoKICAgIGRpZ2VzdFswXSA9IGFkZDMyKGEsIGRpZ2VzdFswXSk7CiAgICBkaWdlc3RbMV0gPSBhZGQzMihiLCBkaWdlc3RbMV0pOwogICAgZGlnZXN0WzJdID0gYWRkMzIoYywgZGlnZXN0WzJdKTsKICAgIGRpZ2VzdFszXSA9IGFkZDMyKGQsIGRpZ2VzdFszXSk7CiAgfQp9Cn4ATk48ARcaARYUGRUBGgROBC8EUCEZATcELwRQIQRQDhkMKwELAQxCNwIBQxgXTUpKSkpKSkpKSjEDAR0eUU5OHQMBKgRRFCIMJAFJHBwcHAQBDCYgARcXFxcBCwsBIxQrDxsrIBsXIA8lGggBFA0NEQ1BIhAGASUlJSUEAgEbcGFja2FnZTpjcnlwdG8vc3JjL21kNS5kYXJ0MXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jcnlwdG8vbGliL3NyYy9zaGExLmRhcnSK6y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAnZGlnZXN0LmRhcnQnOwppbXBvcnQgJ2hhc2guZGFydCc7CmltcG9ydCAnaGFzaF9zaW5rLmRhcnQnOwppbXBvcnQgJ3V0aWxzLmRhcnQnOwoKLy8vIEFuIGluc3RhbmNlIG9mIFtTaGExXS4KLy8vCi8vLyBUaGlzIGluc3RhbmNlIHByb3ZpZGVzIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSBbU0hBLTFdW3JmY10gaGFzaCBmdW5jdGlvbi4KLy8vCi8vLyBbcmZjXTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzE3NApmaW5hbCBzaGExID0gbmV3IFNoYTEuXygpOwoKLy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbU0hBLTFdW3JmY10gaGFzaCBmdW5jdGlvbi4KLy8vCi8vLyBbcmZjXTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzE3NApjbGFzcyBTaGExIGV4dGVuZHMgSGFzaCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGJsb2NrU2l6ZSA9IDE2ICogYnl0ZXNQZXJXb3JkOwoKICBTaGExLl8oKTsKCiAgQG92ZXJyaWRlCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxEaWdlc3Q+IHNpbmspID0+CiAgICAgIG5ldyBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShuZXcgX1NoYTFTaW5rKHNpbmspKTsKfQoKLy8vIFRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBbU2hhMV0uCi8vLwovLy8gVGhpcyBpcyBzZXBhcmF0ZSBzbyB0aGF0IGl0IGNhbiBleHRlbmQgW0hhc2hTaW5rXSB3aXRob3V0IGxlYWtpbmcgYWRkaXRpb25hbAovLy8gcHVibGljIG1lbWViZXJzLgpjbGFzcyBfU2hhMVNpbmsgZXh0ZW5kcyBIYXNoU2luayB7CiAgQG92ZXJyaWRlCiAgZmluYWwgZGlnZXN0ID0gbmV3IFVpbnQzMkxpc3QoNSk7CgogIC8vLyBUaGUgc2l4dGVlbiB3b3JkcyBmcm9tIHRoZSBvcmlnaW5hbCBjaHVuaywgZXh0ZW5kZWQgdG8gODAgd29yZHMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgdG8gYXZvaWQgcmUtYWxsb2NhdGluZywgYnV0IGl0cyBkYXRhIGlzbid0CiAgLy8vIHVzZWQgYWNyb3NzIGludm9jYXRpb25zIG9mIFt1cGRhdGVIYXNoXS4KICBmaW5hbCBVaW50MzJMaXN0IF9leHRlbmRlZDsKCiAgX1NoYTFTaW5rKFNpbms8RGlnZXN0PiBzaW5rKQogICAgICA6IF9leHRlbmRlZCA9IG5ldyBVaW50MzJMaXN0KDgwKSwKICAgICAgICBzdXBlcihzaW5rLCAxNikgewogICAgZGlnZXN0WzBdID0gMHg2NzQ1MjMwMTsKICAgIGRpZ2VzdFsxXSA9IDB4RUZDREFCODk7CiAgICBkaWdlc3RbMl0gPSAweDk4QkFEQ0ZFOwogICAgZGlnZXN0WzNdID0gMHgxMDMyNTQ3NjsKICAgIGRpZ2VzdFs0XSA9IDB4QzNEMkUxRjA7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHVwZGF0ZUhhc2goVWludDMyTGlzdCBjaHVuaykgewogICAgYXNzZXJ0KGNodW5rLmxlbmd0aCA9PSAxNik7CgogICAgdmFyIGEgPSBkaWdlc3RbMF07CiAgICB2YXIgYiA9IGRpZ2VzdFsxXTsKICAgIHZhciBjID0gZGlnZXN0WzJdOwogICAgdmFyIGQgPSBkaWdlc3RbM107CiAgICB2YXIgZSA9IGRpZ2VzdFs0XTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDgwOyBpKyspIHsKICAgICAgaWYgKGkgPCAxNikgewogICAgICAgIF9leHRlbmRlZFtpXSA9IGNodW5rW2ldOwogICAgICB9IGVsc2UgewogICAgICAgIF9leHRlbmRlZFtpXSA9IHJvdGwzMigKICAgICAgICAgICAgX2V4dGVuZGVkW2kgLSAzXSBeCiAgICAgICAgICAgICAgICBfZXh0ZW5kZWRbaSAtIDhdIF4KICAgICAgICAgICAgICAgIF9leHRlbmRlZFtpIC0gMTRdIF4KICAgICAgICAgICAgICAgIF9leHRlbmRlZFtpIC0gMTZdLAogICAgICAgICAgICAxKTsKICAgICAgfQoKICAgICAgdmFyIG5ld0EgPSBhZGQzMihhZGQzMihyb3RsMzIoYSwgNSksIGUpLCBfZXh0ZW5kZWRbaV0pOwogICAgICBpZiAoaSA8IDIwKSB7CiAgICAgICAgbmV3QSA9IGFkZDMyKGFkZDMyKG5ld0EsIChiICYgYykgfCAofmIgJiBkKSksIDB4NUE4Mjc5OTkpOwogICAgICB9IGVsc2UgaWYgKGkgPCA0MCkgewogICAgICAgIG5ld0EgPSBhZGQzMihhZGQzMihuZXdBLCAoYiBeIGMgXiBkKSksIDB4NkVEOUVCQTEpOwogICAgICB9IGVsc2UgaWYgKGkgPCA2MCkgewogICAgICAgIG5ld0EgPSBhZGQzMihhZGQzMihuZXdBLCAoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZCkpLCAweDhGMUJCQ0RDKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuZXdBID0gYWRkMzIoYWRkMzIobmV3QSwgYiBeIGMgXiBkKSwgMHhDQTYyQzFENik7CiAgICAgIH0KCiAgICAgIGUgPSBkOwogICAgICBkID0gYzsKICAgICAgYyA9IHJvdGwzMihiLCAzMCk7CiAgICAgIGIgPSBhOwogICAgICBhID0gbmV3QSAmIG1hc2szMjsKICAgIH0KCiAgICBkaWdlc3RbMF0gPSBhZGQzMihhLCBkaWdlc3RbMF0pOwogICAgZGlnZXN0WzFdID0gYWRkMzIoYiwgZGlnZXN0WzFdKTsKICAgIGRpZ2VzdFsyXSA9IGFkZDMyKGMsIGRpZ2VzdFsyXSk7CiAgICBkaWdlc3RbM10gPSBhZGQzMihkLCBkaWdlc3RbM10pOwogICAgZGlnZXN0WzRdID0gYWRkMzIoZSwgZGlnZXN0WzRdKTsKICB9Cn0KagBOTjwBFxoBFhQZFQEbBFAELhsBOQQuGgwrAQwBDEI4AgErBFEVIwwkAUcGTi8eAR8oGhwcHBwcBAEMJiABFxcXFxcBIxQhDx8fIyQjEAgBPhRDGzwbTA86CAENDRkNGQYBJSUlJSUEAgEccGFja2FnZTpjcnlwdG8vc3JjL3NoYTEuZGFydDNzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY3J5cHRvL2xpYi9zcmMvc2hhMjU2LmRhcnSSey8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAnZGlnZXN0LmRhcnQnOwppbXBvcnQgJ2hhc2guZGFydCc7CmltcG9ydCAnaGFzaF9zaW5rLmRhcnQnOwppbXBvcnQgJ3V0aWxzLmRhcnQnOwoKLy8vIEFuIGluc3RhbmNlIG9mIFtTaGEyNTZdLgovLy8KLy8vIFRoaXMgaW5zdGFuY2UgcHJvdmlkZXMgY29udmVuaWVudCBhY2Nlc3MgdG8gdGhlIFtTaGEyNTZdW3JmY10gaGFzaCBmdW5jdGlvbi4KLy8vCi8vLyBbcmZjXTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjIzNApmaW5hbCBzaGEyNTYgPSBuZXcgU2hhMjU2Ll8oKTsKCi8vLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1NIQS0yNTZdW3JmY10gaGFzaCBmdW5jdGlvbi4KLy8vCi8vLyBbcmZjXTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjIzNAovLy8KLy8vIE5vdGUgdGhhdCBpdCdzIGFsbW9zdCBhbHdheXMgZWFzaWVyIHRvIHVzZSBbc2hhMjU2XSByYXRoZXIgdGhhbiBjcmVhdGluZyBhCi8vLyBuZXcgaW5zdGFuY2UuCmNsYXNzIFNoYTI1NiBleHRlbmRzIEhhc2ggewogIEBvdmVycmlkZQogIGZpbmFsIGludCBibG9ja1NpemUgPSAxNiAqIGJ5dGVzUGVyV29yZDsKCiAgU2hhMjU2Ll8oKTsKCiAgU2hhMjU2IG5ld0luc3RhbmNlKCkgPT4gbmV3IFNoYTI1Ni5fKCk7CgogIEBvdmVycmlkZQogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8RGlnZXN0PiBzaW5rKSA9PgogICAgICBuZXcgQnl0ZUNvbnZlcnNpb25TaW5rLmZyb20obmV3IF9TaGEyNTZTaW5rKHNpbmspKTsKfQoKLy8vIERhdGEgZnJvbSBhIG5vbi1saW5lYXIgZnVuY3Rpb24gdGhhdCBmdW5jdGlvbnMgYXMgcmVwcm9kdWNpYmxlIG5vaXNlLgpjb25zdCBMaXN0PGludD4gX25vaXNlID0gY29uc3QgWwogIDB4NDI4YTJmOTgsIDB4NzEzNzQ0OTEsIDB4YjVjMGZiY2YsIDB4ZTliNWRiYTUsIDB4Mzk1NmMyNWIsIDB4NTlmMTExZjEsIC8vCiAgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSwgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMywKICAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LCAweGU0OWI2OWMxLCAweGVmYmU0Nzg2LAogIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsCiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywKICAweDA2Y2E2MzUxLCAweDE0MjkyOTY3LCAweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzLAogIDB4NjUwYTczNTQsIDB4NzY2YTBhYmIsIDB4ODFjMmM5MmUsIDB4OTI3MjJjODUsIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsCiAgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMywgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCwKICAweDE5YTRjMTE2LCAweDFlMzc2YzA4LCAweDI3NDg3NzRjLCAweDM0YjBiY2I1LCAweDM5MWMwY2IzLCAweDRlZDhhYTRhLAogIDB4NWI5Y2NhNGYsIDB4NjgyZTZmZjMsIDB4NzQ4ZjgyZWUsIDB4NzhhNTYzNmYsIDB4ODRjODc4MTQsIDB4OGNjNzAyMDgsCiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMgpdOwoKLy8vIFRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBbU2hhMjU2XS4KLy8vCi8vLyBUaGlzIGlzIHNlcGFyYXRlIHNvIHRoYXQgaXQgY2FuIGV4dGVuZCBbSGFzaFNpbmtdIHdpdGhvdXQgbGVha2luZyBhZGRpdGlvbmFsCi8vLyBwdWJsaWMgbWVtYmVycy4KY2xhc3MgX1NoYTI1NlNpbmsgZXh0ZW5kcyBIYXNoU2luayB7CiAgQG92ZXJyaWRlCiAgZmluYWwgZGlnZXN0ID0gbmV3IFVpbnQzMkxpc3QoOCk7CgogIC8vLyBUaGUgc2l4dGVlbiB3b3JkcyBmcm9tIHRoZSBvcmlnaW5hbCBjaHVuaywgZXh0ZW5kZWQgdG8gNjQgd29yZHMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgdG8gYXZvaWQgcmUtYWxsb2NhdGluZywgYnV0IGl0cyBkYXRhIGlzbid0CiAgLy8vIHVzZWQgYWNyb3NzIGludm9jYXRpb25zIG9mIFt1cGRhdGVIYXNoXS4KICBmaW5hbCBVaW50MzJMaXN0IF9leHRlbmRlZDsKCiAgX1NoYTI1NlNpbmsoU2luazxEaWdlc3Q+IHNpbmspCiAgICAgIDogX2V4dGVuZGVkID0gbmV3IFVpbnQzMkxpc3QoNjQpLAogICAgICAgIHN1cGVyKHNpbmssIDE2KSB7CiAgICAvLyBJbml0aWFsIHZhbHVlIG9mIHRoZSBoYXNoIHBhcnRzLiBGaXJzdCAzMiBiaXRzIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnRzCiAgICAvLyBvZiB0aGUgc3F1YXJlIHJvb3RzIG9mIHRoZSBmaXJzdCA4IHByaW1lIG51bWJlcnMuCiAgICBkaWdlc3RbMF0gPSAweDZhMDllNjY3OwogICAgZGlnZXN0WzFdID0gMHhiYjY3YWU4NTsKICAgIGRpZ2VzdFsyXSA9IDB4M2M2ZWYzNzI7CiAgICBkaWdlc3RbM10gPSAweGE1NGZmNTNhOwogICAgZGlnZXN0WzRdID0gMHg1MTBlNTI3ZjsKICAgIGRpZ2VzdFs1XSA9IDB4OWIwNTY4OGM7CiAgICBkaWdlc3RbNl0gPSAweDFmODNkOWFiOwogICAgZGlnZXN0WzddID0gMHg1YmUwY2QxOTsKICB9CgogIC8vIFRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9ucyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbQogIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYyMzQuCgogIGludCBfcm90cjMyKGludCBuLCBpbnQgeCkgPT4gKHggPj4gbikgfCAoKHggPDwgKDMyIC0gbikpICYgbWFzazMyKTsKICBpbnQgX2NoKGludCB4LCBpbnQgeSwgaW50IHopID0+ICh4ICYgeSkgXiAoKH54ICYgbWFzazMyKSAmIHopOwogIGludCBfbWFqKGludCB4LCBpbnQgeSwgaW50IHopID0+ICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTsKICBpbnQgX2JzaWcwKGludCB4KSA9PiBfcm90cjMyKDIsIHgpIF4gX3JvdHIzMigxMywgeCkgXiBfcm90cjMyKDIyLCB4KTsKICBpbnQgX2JzaWcxKGludCB4KSA9PiBfcm90cjMyKDYsIHgpIF4gX3JvdHIzMigxMSwgeCkgXiBfcm90cjMyKDI1LCB4KTsKICBpbnQgX3NzaWcwKGludCB4KSA9PiBfcm90cjMyKDcsIHgpIF4gX3JvdHIzMigxOCwgeCkgXiAoeCA+PiAzKTsKICBpbnQgX3NzaWcxKGludCB4KSA9PiBfcm90cjMyKDE3LCB4KSBeIF9yb3RyMzIoMTksIHgpIF4gKHggPj4gMTApOwoKICBAb3ZlcnJpZGUKICB2b2lkIHVwZGF0ZUhhc2goVWludDMyTGlzdCBjaHVuaykgewogICAgYXNzZXJ0KGNodW5rLmxlbmd0aCA9PSAxNik7CgogICAgLy8gUHJlcGFyZSBtZXNzYWdlIHNjaGVkdWxlLgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgIF9leHRlbmRlZFtpXSA9IGNodW5rW2ldOwogICAgfQogICAgZm9yICh2YXIgaSA9IDE2OyBpIDwgNjQ7IGkrKykgewogICAgICBfZXh0ZW5kZWRbaV0gPSBhZGQzMihhZGQzMihfc3NpZzEoX2V4dGVuZGVkW2kgLSAyXSksIF9leHRlbmRlZFtpIC0gN10pLAogICAgICAgICAgYWRkMzIoX3NzaWcwKF9leHRlbmRlZFtpIC0gMTVdKSwgX2V4dGVuZGVkW2kgLSAxNl0pKTsKICAgIH0KCiAgICAvLyBTaHVmZmxlIGFyb3VuZCB0aGUgYml0cy4KICAgIHZhciBhID0gZGlnZXN0WzBdOwogICAgdmFyIGIgPSBkaWdlc3RbMV07CiAgICB2YXIgYyA9IGRpZ2VzdFsyXTsKICAgIHZhciBkID0gZGlnZXN0WzNdOwogICAgdmFyIGUgPSBkaWdlc3RbNF07CiAgICB2YXIgZiA9IGRpZ2VzdFs1XTsKICAgIHZhciBnID0gZGlnZXN0WzZdOwogICAgdmFyIGggPSBkaWdlc3RbN107CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAgICAgIHZhciB0ZW1wMSA9IGFkZDMyKGFkZDMyKGgsIF9ic2lnMShlKSksCiAgICAgICAgICBhZGQzMihfY2goZSwgZiwgZyksIGFkZDMyKF9ub2lzZVtpXSwgX2V4dGVuZGVkW2ldKSkpOwogICAgICB2YXIgdGVtcDIgPSBhZGQzMihfYnNpZzAoYSksIF9tYWooYSwgYiwgYykpOwogICAgICBoID0gZzsKICAgICAgZyA9IGY7CiAgICAgIGYgPSBlOwogICAgICBlID0gYWRkMzIoZCwgdGVtcDEpOwogICAgICBkID0gYzsKICAgICAgYyA9IGI7CiAgICAgIGIgPSBhOwogICAgICBhID0gYWRkMzIodGVtcDEsIHRlbXAyKTsKICAgIH0KCiAgICAvLyBVcGRhdGUgaGFzaCB2YWx1ZXMgYWZ0ZXIgaXRlcmF0aW9uLgogICAgZGlnZXN0WzBdID0gYWRkMzIoYSwgZGlnZXN0WzBdKTsKICAgIGRpZ2VzdFsxXSA9IGFkZDMyKGIsIGRpZ2VzdFsxXSk7CiAgICBkaWdlc3RbMl0gPSBhZGQzMihjLCBkaWdlc3RbMl0pOwogICAgZGlnZXN0WzNdID0gYWRkMzIoZCwgZGlnZXN0WzNdKTsKICAgIGRpZ2VzdFs0XSA9IGFkZDMyKGUsIGRpZ2VzdFs0XSk7CiAgICBkaWdlc3RbNV0gPSBhZGQzMihmLCBkaWdlc3RbNV0pOwogICAgZGlnZXN0WzZdID0gYWRkMzIoZywgZGlnZXN0WzZdKTsKICAgIGRpZ2VzdFs3XSA9IGFkZDMyKGgsIGRpZ2VzdFs3XSk7CiAgfQp9CoCPAE5OPAEXGgEWFBkVAR0EUQQuHwE7BC4ETxIcDCsBDgEqAQxCOgIBSiFNSkpKSkpKSkpKMQMBLQRRFCUMJAFHBk4vHgEhKBpOORwcHBwcHBwcBAE8KQFGQUBISEJEAQwmIAEhIx8GJE5ABgEgFxcXFxcXFxcBIy1AMw0NDRsNDQ0fBgErJSUlJSUlJSUEAgEecGFja2FnZTpjcnlwdG8vc3JjL3NoYTI1Ni5kYXJ0MXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb252ZXJ0L2xpYi9jb252ZXJ0LmRhcnSBlS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbnZlcnQ7CgpleHBvcnQgJ3NyYy9hY2N1bXVsYXRvcl9zaW5rLmRhcnQnOwpleHBvcnQgJ3NyYy9ieXRlX2FjY3VtdWxhdG9yX3NpbmsuZGFydCc7CmV4cG9ydCAnc3JjL2hleC5kYXJ0JzsKZXhwb3J0ICdzcmMvcGVyY2VudC5kYXJ0JzsKZXhwb3J0ICdzcmMvc3RyaW5nX2FjY3VtdWxhdG9yX3NpbmsuZGFydCc7Cg0ATk48AREBJCkXGysBHHBhY2thZ2U6Y29udmVydC9jb252ZXJ0LmRhcnQ4c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NyeXB0by9saWIvc3JjL2RpZ2VzdF9zaW5rLmRhcnSC4i8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RpZ2VzdC5kYXJ0JzsKCi8vLyBBIHNpbmsgdXNlZCB0byBnZXQgYSBkaWdlc3QgdmFsdWUgb3V0IG9mIGBIYXNoLnN0YXJ0Q2h1bmtlZENvbnZlcnNpb25gLgpjbGFzcyBEaWdlc3RTaW5rIGV4dGVuZHMgU2luazxEaWdlc3Q+IHsKICAvLy8gVGhlIHZhbHVlIGFkZGVkIHRvIHRoZSBzaW5rLCBpZiBhbnkuCiAgRGlnZXN0IGdldCB2YWx1ZSB7CiAgICBhc3NlcnQoX3ZhbHVlICE9IG51bGwpOwogICAgcmV0dXJuIF92YWx1ZTsKICB9CgogIERpZ2VzdCBfdmFsdWU7CgogIC8vLyBBZGRzIFt2YWx1ZV0gdG8gdGhlIHNpbmsuCiAgLy8vCiAgLy8vIFVubGlrZSBtb3N0IHNpbmtzLCB0aGlzIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlLgogIEBvdmVycmlkZQogIHZvaWQgYWRkKERpZ2VzdCB2YWx1ZSkgewogICAgYXNzZXJ0KF92YWx1ZSA9PSBudWxsKTsKICAgIF92YWx1ZSA9IHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCk7CiAgfQp9CiAATk48ARYBTCgrFRwTBAERASAGNwwbHBQEAQwRHAQCASNwYWNrYWdlOmNyeXB0by9zcmMvZGlnZXN0X3NpbmsuZGFydDZzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY3J5cHRvL2xpYi9zcmMvaGFzaF9zaW5rLmRhcnSVEC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgppbXBvcnQgJ3BhY2thZ2U6dHlwZWRfZGF0YS90eXBlZF9kYXRhLmRhcnQnOwoKaW1wb3J0ICdkaWdlc3QuZGFydCc7CmltcG9ydCAndXRpbHMuZGFydCc7CgovLy8gQSBiYXNlIGNsYXNzIGZvciBbU2lua10gaW1wbGVtZW50YXRpb25zIGZvciBoYXNoIGFsZ29yaXRobXMuCi8vLwovLy8gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgW3VwZGF0ZUhhc2hdIGFuZCBbZGlnZXN0XS4KYWJzdHJhY3QgY2xhc3MgSGFzaFNpbmsgaW1wbGVtZW50cyBTaW5rPExpc3Q8aW50Pj4gewogIC8vLyBUaGUgaW5uZXIgc2luayB0aGF0IHRoaXMgc2hvdWxkIGZvcndhcmQgdG8uCiAgZmluYWwgU2luazxEaWdlc3Q+IF9zaW5rOwoKICAvLy8gV2hldGhlciB0aGUgaGFzaCBmdW5jdGlvbiBvcGVyYXRlcyBvbiBiaWctZW5kaWFuIHdvcmRzLgogIGZpbmFsIEVuZGlhbiBfZW5kaWFuOwoKICAvLy8gVGhlIHdvcmRzIGluIHRoZSBjdXJyZW50IGNodW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGFuIGluc3RhbmNlIHZhcmlhYmxlIHRvIGF2b2lkIHJlLWFsbG9jYXRpbmcsIGJ1dCBpdHMgZGF0YSBpc24ndAogIC8vLyB1c2VkIGFjcm9zcyBpbnZvY2F0aW9ucyBvZiBbX2l0ZXJhdGVdLgogIGZpbmFsIFVpbnQzMkxpc3QgX2N1cnJlbnRDaHVuazsKCiAgLy8vIE1lc3NhZ2VzIHdpdGggbW9yZSB0aGFuIDJeNTMtMSBiaXRzIGFyZSBub3Qgc3VwcG9ydGVkLiAoVGhpcyBpcyB0aGUKICAvLy8gbGFyZ2VzdCB2YWx1ZSB0aGF0IGlzIHJlcHJlc2VudGFibGUgb24gYm90aCBKUyBhbmQgdGhlIERhcnQgVk0uKQogIC8vLyBTbyB0aGUgbWF4aW11bSBsZW5ndGggaW4gYnl0ZXMgaXMgKDJeNTMtMSkvOC4KICBzdGF0aWMgY29uc3QgX21heE1lc3NhZ2VMZW5ndGhJbkJ5dGVzID0gMHgwMDAzZmZmZmZmZmZmZmZmOwoKICAvLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YSBzbyBmYXIsIGluIGJ5dGVzLgogIGludCBfbGVuZ3RoSW5CeXRlcyA9IDA7CgogIC8vLyBEYXRhIHRoYXQgaGFzIHlldCB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIGhhc2ggZnVuY3Rpb24uCiAgZmluYWwgX3BlbmRpbmdEYXRhID0gbmV3IFVpbnQ4QnVmZmVyKCk7CgogIC8vLyBXaGV0aGVyIFtjbG9zZV0gaGFzIGJlZW4gY2FsbGVkLgogIGJvb2wgX2lzQ2xvc2VkID0gZmFsc2U7CgogIC8vLyBUaGUgd29yZHMgaW4gdGhlIGN1cnJlbnQgZGlnZXN0LgogIC8vLwogIC8vLyBUaGlzIHNob3VsZCBiZSB1cGRhdGVkIGVhY2ggdGltZSBbdXBkYXRlSGFzaF0gaXMgY2FsbGVkLgogIFVpbnQzMkxpc3QgZ2V0IGRpZ2VzdDsKCiAgLy8vIENyZWF0ZXMgYSBuZXcgaGFzaC4KICAvLy8KICAvLy8gW2NodW5rU2l6ZUluV29yZHNdIHJlcHJlc2VudHMgdGhlIHNpemUgb2YgdGhlIGlucHV0IGNodW5rcyBwcm9jZXNzZWQgYnkKICAvLy8gdGhlIGFsZ29yaXRobSwgaW4gdGVybXMgb2YgMzItYml0IHdvcmRzLgogIEhhc2hTaW5rKHRoaXMuX3NpbmssIGludCBjaHVua1NpemVJbldvcmRzLCB7RW5kaWFuIGVuZGlhbjogRW5kaWFuLmJpZ30pCiAgICAgIDogX2VuZGlhbiA9IGVuZGlhbiwKICAgICAgICBfY3VycmVudENodW5rID0gbmV3IFVpbnQzMkxpc3QoY2h1bmtTaXplSW5Xb3Jkcyk7CgogIC8vLyBSdW5zIGEgc2luZ2xlIGl0ZXJhdGlvbiBvZiB0aGUgaGFzaCBjb21wdXRhdGlvbiwgdXBkYXRpbmcgW2RpZ2VzdF0gd2l0aAogIC8vLyB0aGUgcmVzdWx0LgogIC8vLwogIC8vLyBbY2h1bmtdIGlzIHRoZSBjdXJyZW50IGNodW5rLCB3aG9zZSBzaXplIGlzIGdpdmVuIGJ5IHRoZQogIC8vLyBgY2h1bmtTaXplSW5Xb3Jkc2AgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCiAgdm9pZCB1cGRhdGVIYXNoKFVpbnQzMkxpc3QgY2h1bmspOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ0hhc2guYWRkKCkgY2FsbGVkIGFmdGVyIGNsb3NlKCkuJyk7CiAgICBfbGVuZ3RoSW5CeXRlcyArPSBkYXRhLmxlbmd0aDsKICAgIF9wZW5kaW5nRGF0YS5hZGRBbGwoZGF0YSk7CiAgICBfaXRlcmF0ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChfaXNDbG9zZWQpIHJldHVybjsKICAgIF9pc0Nsb3NlZCA9IHRydWU7CgogICAgX2ZpbmFsaXplRGF0YSgpOwogICAgX2l0ZXJhdGUoKTsKICAgIGFzc2VydChfcGVuZGluZ0RhdGEuaXNFbXB0eSk7CiAgICBfc2luay5hZGQobmV3IERpZ2VzdChfYnl0ZURpZ2VzdCgpKSk7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgVWludDhMaXN0IF9ieXRlRGlnZXN0KCkgewogICAgaWYgKF9lbmRpYW4gPT0gRW5kaWFuLmhvc3QpIHJldHVybiBkaWdlc3QuYnVmZmVyLmFzVWludDhMaXN0KCk7CgogICAgdmFyIGJ5dGVEaWdlc3QgPSBuZXcgVWludDhMaXN0KGRpZ2VzdC5sZW5ndGhJbkJ5dGVzKTsKICAgIHZhciBieXRlRGF0YSA9IGJ5dGVEaWdlc3QuYnVmZmVyLmFzQnl0ZURhdGEoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlnZXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIGJ5dGVEYXRhLnNldFVpbnQzMihpICogYnl0ZXNQZXJXb3JkLCBkaWdlc3RbaV0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVEaWdlc3Q7CiAgfQoKICAvLy8gSXRlcmF0ZXMgdGhyb3VnaCBbX3BlbmRpbmdEYXRhXSwgdXBkYXRpbmcgdGhlIGhhc2ggY29tcHV0YXRpb24gZm9yIGVhY2gKICAvLy8gY2h1bmsuCiAgdm9pZCBfaXRlcmF0ZSgpIHsKICAgIHZhciBwZW5kaW5nRGF0YUJ5dGVzID0gX3BlbmRpbmdEYXRhLmJ1ZmZlci5hc0J5dGVEYXRhKCk7CiAgICB2YXIgcGVuZGluZ0RhdGFDaHVua3MgPSBfcGVuZGluZ0RhdGEubGVuZ3RoIH4vIF9jdXJyZW50Q2h1bmsubGVuZ3RoSW5CeXRlczsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGVuZGluZ0RhdGFDaHVua3M7IGkrKykgewogICAgICAvLyBDb3B5IHdvcmRzIGZyb20gdGhlIHBlbmRpbmcgZGF0YSBidWZmZXIgaW50byB0aGUgY3VycmVudCBjaHVuayBidWZmZXIuCiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgX2N1cnJlbnRDaHVuay5sZW5ndGg7IGorKykgewogICAgICAgIF9jdXJyZW50Q2h1bmtbal0gPSBwZW5kaW5nRGF0YUJ5dGVzLmdldFVpbnQzMigKICAgICAgICAgICAgaSAqIF9jdXJyZW50Q2h1bmsubGVuZ3RoSW5CeXRlcyArIGogKiBieXRlc1BlcldvcmQsIF9lbmRpYW4pOwogICAgICB9CgogICAgICAvLyBSdW4gdGhlIGhhc2ggZnVuY3Rpb24gb24gdGhlIGN1cnJlbnQgY2h1bmsuCiAgICAgIHVwZGF0ZUhhc2goX2N1cnJlbnRDaHVuayk7CiAgICB9CgogICAgLy8gUmVtb3ZlIGFsbCBwZW5kaW5nIGRhdGEgdXAgdG8gdGhlIGxhc3QgY2xlYW4gY2h1bmsgYnJlYWsuCiAgICBfcGVuZGluZ0RhdGEucmVtb3ZlUmFuZ2UoCiAgICAgICAgMCwgcGVuZGluZ0RhdGFDaHVua3MgKiBfY3VycmVudENodW5rLmxlbmd0aEluQnl0ZXMpOwogIH0KCiAgLy8vIEZpbmFsaXplcyBbX3BlbmRpbmdEYXRhXS4KICAvLy8KICAvLy8gVGhpcyBhZGRzIGEgMSBiaXQgdG8gdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSwgYW5kIGV4cGFuZHMgaXQgd2l0aCAwIGJpdHMgdG8KICAvLy8gcGFkIGl0IG91dC4KICB2b2lkIF9maW5hbGl6ZURhdGEoKSB7CiAgICAvLyBQYWQgb3V0IHRoZSBkYXRhIHdpdGggMHg4MCwgZWlnaHQgMHMsIGFuZCBhcyBtYW55IG1vcmUgMHMgYXMgd2UgbmVlZCB0bwogICAgLy8gbGFuZCBjbGVhbmx5IG9uIGEgY2h1bmsgYm91bmRhcnkuCiAgICBfcGVuZGluZ0RhdGEuYWRkKDB4ODApOwogICAgdmFyIGNvbnRlbnRzTGVuZ3RoID0gX2xlbmd0aEluQnl0ZXMgKyA5OwogICAgdmFyIGZpbmFsaXplZExlbmd0aCA9IF9yb3VuZFVwKGNvbnRlbnRzTGVuZ3RoLCBfY3VycmVudENodW5rLmxlbmd0aEluQnl0ZXMpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaW5hbGl6ZWRMZW5ndGggLSBjb250ZW50c0xlbmd0aDsgaSsrKSB7CiAgICAgIF9wZW5kaW5nRGF0YS5hZGQoMCk7CiAgICB9CgogICAgaWYgKF9sZW5ndGhJbkJ5dGVzID4gX21heE1lc3NhZ2VMZW5ndGhJbkJ5dGVzKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgJ0hhc2hpbmcgaXMgdW5zdXBwb3J0ZWQgZm9yIG1lc3NhZ2VzIHdpdGggbW9yZSB0aGFuIDJeNTMgYml0cy4nKTsKICAgIH0KCiAgICB2YXIgbGVuZ3RoSW5CaXRzID0gX2xlbmd0aEluQnl0ZXMgKiBiaXRzUGVyQnl0ZTsKCiAgICAvLyBBZGQgdGhlIGZ1bGwgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhIGFzIGEgNjQtYml0IHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlCiAgICAvLyBoYXNoLgogICAgdmFyIG9mZnNldCA9IF9wZW5kaW5nRGF0YS5sZW5ndGg7CiAgICBfcGVuZGluZ0RhdGEuYWRkQWxsKG5ldyBVaW50OExpc3QoOCkpOwogICAgdmFyIGJ5dGVEYXRhID0gX3BlbmRpbmdEYXRhLmJ1ZmZlci5hc0J5dGVEYXRhKCk7CgogICAgLy8gV2UncmUgZXNzZW50aWFsbHkgZG9pbmcgYnl0ZURhdGEuc2V0VWludDY0KG9mZnNldCwgbGVuZ3RoSW5CaXRzLCBfZW5kaWFuKQogICAgLy8gaGVyZSwgYnV0IHRoYXQgbWV0aG9kIGlzbid0IHN1cHBvcnRlZCBvbiBkYXJ0MmpzIHNvIHdlIGltcGxlbWVudCBpdAogICAgLy8gbWFudWFsbHkgaW5zdGVhZC4KICAgIHZhciBoaWdoQml0cyA9IGxlbmd0aEluQml0cyA+PiAzMjsKICAgIHZhciBsb3dCaXRzID0gbGVuZ3RoSW5CaXRzICYgbWFzazMyOwogICAgaWYgKF9lbmRpYW4gPT0gRW5kaWFuLmJpZykgewogICAgICBieXRlRGF0YS5zZXRVaW50MzIob2Zmc2V0LCBoaWdoQml0cywgX2VuZGlhbik7CiAgICAgIGJ5dGVEYXRhLnNldFVpbnQzMihvZmZzZXQgKyBieXRlc1BlcldvcmQsIGxvd0JpdHMsIF9lbmRpYW4pOwogICAgfSBlbHNlIHsKICAgICAgYnl0ZURhdGEuc2V0VWludDMyKG9mZnNldCwgbG93Qml0cywgX2VuZGlhbik7CiAgICAgIGJ5dGVEYXRhLnNldFVpbnQzMihvZmZzZXQgKyBieXRlc1BlcldvcmQsIGhpZ2hCaXRzLCBfZW5kaWFuKTsKICAgIH0KICB9CgogIC8vLyBSb3VuZHMgW3ZhbF0gdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgW25dLCBhcyBsb25nIGFzIFtuXSBpcyBhIHBvd2VyIG9mCiAgLy8vIHR3by4KICBpbnQgX3JvdW5kVXAoaW50IHZhbCwgaW50IG4pID0+ICh2YWwgKyBuIC0gMSkgJiAtbjsKfQqAoABOTjwBGgEtARYVAUEEOjUyHAE+GAEmBk4tIgFKRzQ+ATUaAT4qAScaAScGPxkBGgZOL0oaOgFOEgY/PiUBDB1NIx8QBAEMERsWARUQIioTBAEcRAE6My43BhcEAU4NFD1QMlA3N0oIATUhBgFBHj0EASAGURIZTykcLVFBGwYBNSJMBgE1AVENJis1AVFLGScpITVDDTREBgQBUAs2AgEhcGFja2FnZTpjcnlwdG8vc3JjL2hhc2hfc2luay5kYXJ0MnNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jcnlwdG8vbGliL3NyYy91dGlscy5kYXJ0guwvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEEgYml0bWFzayB0aGF0IGxpbWl0cyBhbiBpbnRlZ2VyIHRvIDMyIGJpdHMuCmNvbnN0IG1hc2szMiA9IDB4RkZGRkZGRkY7CgovLy8gVGhlIG51bWJlciBvZiBiaXRzIGluIGEgYnl0ZS4KY29uc3QgYml0c1BlckJ5dGUgPSA4OwoKLy8vIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSAzMi1iaXQgd29yZC4KY29uc3QgYnl0ZXNQZXJXb3JkID0gNDsKCi8vLyBBZGRzIFt4XSBhbmQgW3ldIHdpdGggMzItYml0IG92ZXJmbG93IHNlbWFudGljcy4KaW50IGFkZDMyKGludCB4LCBpbnQgeSkgPT4gKHggKyB5KSAmIG1hc2szMjsKCi8vLyBCaXR3aXNlIHJvdGF0ZXMgW3ZhbF0gdG8gdGhlIGxlZnQgYnkgW3NoaWZ0XSwgb2JleWluZyAzMi1iaXQgb3ZlcmZsb3cKLy8vIHNlbWFudGljcy4KaW50IHJvdGwzMihpbnQgdmFsLCBpbnQgc2hpZnQpIHsKICB2YXIgbW9kU2hpZnQgPSBzaGlmdCAmIDMxOwogIHJldHVybiAoKHZhbCA8PCBtb2RTaGlmdCkgJiBtYXNrMzIpIHwgKCh2YWwgJiBtYXNrMzIpID4+ICgzMiAtIG1vZFNoaWZ0KSk7Cn0KGABOTjwBMRsBIhcBKhgBNS0BSg8hHU0CAR1wYWNrYWdlOmNyeXB0by9zcmMvdXRpbHMuZGFydD5zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29udmVydC9saWIvc3JjL2FjY3VtdWxhdG9yX3NpbmsuZGFydIPtLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCi8vLyBBIHNpbmsgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gYWxsIHRoZSBbZXZlbnRzXSB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgdG8gaXQuCi8vLwovLy8gU2VlIGFsc28gW0NodW5rZWRDb252ZXJzaW9uU2luay53aXRoQ2FsbGJhY2tdLgpjbGFzcyBBY2N1bXVsYXRvclNpbms8VD4gaW1wbGVtZW50cyBTaW5rPFQ+IHsKICAvLy8gQW4gdW5tb2RpZmlhYmxlIGxpc3Qgb2YgZXZlbnRzIHBhc3NlZCB0byB0aGlzIHNpbmsgc28gZmFyLgogIExpc3Q8VD4gZ2V0IGV2ZW50cyA9PiBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXcoX2V2ZW50cyk7CiAgZmluYWwgX2V2ZW50cyA9IDxUPltdOwoKICAvLy8gV2hldGhlciBbY2xvc2VdIGhhcyBiZWVuIGNhbGxlZC4KICBib29sIGdldCBpc0Nsb3NlZCA9PiBfaXNDbG9zZWQ7CiAgdmFyIF9pc0Nsb3NlZCA9IGZhbHNlOwoKICAvLy8gUmVtb3ZlcyBhbGwgZXZlbnRzIGZyb20gW2V2ZW50c10uCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQgZG91YmxlLXByb2Nlc3NpbmcgZXZlbnRzLgogIHZvaWQgY2xlYXIoKSB7CiAgICBfZXZlbnRzLmNsZWFyKCk7CiAgfQoKICB2b2lkIGFkZChUIGV2ZW50KSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJDYW4ndCBhZGQgdG8gYSBjbG9zZWQgc2luay4iKTsKICAgIH0KCiAgICBfZXZlbnRzLmFkZChldmVudCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2lzQ2xvc2VkID0gdHJ1ZTsKICB9Cn0KJwBOTjwBGgFRBDMuQTsZASciGQEoBjoRFQQBFhU7BgEYBAERFgQCASlwYWNrYWdlOmNvbnZlcnQvc3JjL2FjY3VtdWxhdG9yX3NpbmsuZGFydENzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29udmVydC9saWIvc3JjL2J5dGVfYWNjdW11bGF0b3Jfc2luay5kYXJ0hcIvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgppbXBvcnQgJ3BhY2thZ2U6dHlwZWRfZGF0YS90eXBlZF9kYXRhLmRhcnQnOwoKLy8vIEEgc2luayB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgY29uY2F0ZW5hdGVkIGJ5dGVzIHBhc3NlZCB0byBpdC4KLy8vCi8vLyBTZWUgYWxzbyBbQnl0ZUNvbnZlcnNpb25TaW5rLndpdGhDYWxsYmFja10uCmNsYXNzIEJ5dGVBY2N1bXVsYXRvclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLy8gVGhlIGJ5dGVzIGFjY3VtdWxhdGVkIHNvIGZhci4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIFtVaW50OExpc3RdIGlzIHZpZXdpbmcgYSBzaGFyZWQgYnVmZmVyLCBzbyBpdCBzaG91bGQgbm90IGJlCiAgLy8vIGNoYW5nZWQgYW5kIGFueSBieXRlcyBvdXRzaWRlIHRoZSB2aWV3IHNob3VsZCBub3QgYmUgYWNjZXNzZWQuCiAgVWludDhMaXN0IGdldCBieXRlcyA9PiBuZXcgVWludDhMaXN0LnZpZXcoX2J1ZmZlci5idWZmZXIsIDAsIF9idWZmZXIubGVuZ3RoKTsKCiAgZmluYWwgX2J1ZmZlciA9IG5ldyBVaW50OEJ1ZmZlcigpOwoKICAvLy8gV2hldGhlciBbY2xvc2VdIGhhcyBiZWVuIGNhbGxlZC4KICBib29sIGdldCBpc0Nsb3NlZCA9PiBfaXNDbG9zZWQ7CiAgdmFyIF9pc0Nsb3NlZCA9IGZhbHNlOwoKICAvLy8gUmVtb3ZlcyBhbGwgYnl0ZXMgZnJvbSBbYnl0ZXNdLgogIC8vLwogIC8vLyBUaGlzIGNhbiBiZSB1c2VkIHRvIGF2b2lkIGRvdWJsZS1wcm9jZXNzaW5nIGRhdGEuCiAgdm9pZCBjbGVhcigpIHsKICAgIF9idWZmZXIuY2xlYXIoKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBieXRlcykgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiQ2FuJ3QgYWRkIHRvIGEgY2xvc2VkIHNpbmsuIik7CiAgICB9CgogICAgX2J1ZmZlci5hZGRBbGwoYnl0ZXMpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkNhbid0IGFkZCB0byBhIGNsb3NlZCBzaW5rLiIpOwogICAgfQoKICAgIF9idWZmZXIuYWRkQWxsKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIGlmIChpc0xhc3QpIF9pc0Nsb3NlZCA9IHRydWU7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2lzQ2xvc2VkID0gdHJ1ZTsKICB9Cn0KNwBOTjwBFxoBLQFIBDA7JAZPRVABJQEnIhkBJgY4ERUEAR4VOwYBGwQBRBU7BgEnIgQBERYEAgEucGFja2FnZTpjb252ZXJ0L3NyYy9ieXRlX2FjY3VtdWxhdG9yX3NpbmsuZGFydDFzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29udmVydC9saWIvc3JjL2hleC5kYXJ0g1YvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb252ZXJ0LmhleDsKCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKCmltcG9ydCAnaGV4L2VuY29kZXIuZGFydCc7CmltcG9ydCAnaGV4L2RlY29kZXIuZGFydCc7CgpleHBvcnQgJ2hleC9lbmNvZGVyLmRhcnQnIGhpZGUgaGV4RW5jb2RlcjsKZXhwb3J0ICdoZXgvZGVjb2Rlci5kYXJ0JyBoaWRlIGhleERlY29kZXI7CgovLy8gVGhlIGNhbm9uaWNhbCBpbnN0YW5jZSBvZiBbSGV4Q29kZWNdLgpjb25zdCBoZXggPSBjb25zdCBIZXhDb2RlYy5fKCk7CgovLy8gQSBjb2RlYyB0aGF0IGNvbnZlcnRzIGJ5dGUgYXJyYXlzIHRvIGFuZCBmcm9tIGhleGFkZWNpbWFsIHN0cmluZ3MsIGZvbGxvd2luZwovLy8gW3RoZSBCYXNlMTYgc3BlY11bcmZjXS4KLy8vCi8vLyBbcmZjXTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgjc2VjdGlvbi04Ci8vLwovLy8gVGhpcyBzaG91bGQgYmUgdXNlZCB2aWEgdGhlIFtoZXhdIGZpZWxkLgpjbGFzcyBIZXhDb2RlYyBleHRlbmRzIENvZGVjPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgSGV4RW5jb2RlciBnZXQgZW5jb2RlciA9PiBoZXhFbmNvZGVyOwogIEhleERlY29kZXIgZ2V0IGRlY29kZXIgPT4gaGV4RGVjb2RlcjsKCiAgY29uc3QgSGV4Q29kZWMuXygpOwp9Ch8ATk48ARUBFwEbGwErKwEqIAFRHAQ5BC0yKCgBFgIBHHBhY2thZ2U6Y29udmVydC9zcmMvaGV4LmRhcnQ1c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbnZlcnQvbGliL3NyYy9wZXJjZW50LmRhcnSF/C8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbnZlcnQucGVyY2VudDsKCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKCmltcG9ydCAncGVyY2VudC9lbmNvZGVyLmRhcnQnOwppbXBvcnQgJ3BlcmNlbnQvZGVjb2Rlci5kYXJ0JzsKCmV4cG9ydCAncGVyY2VudC9lbmNvZGVyLmRhcnQnIGhpZGUgcGVyY2VudEVuY29kZXI7CmV4cG9ydCAncGVyY2VudC9kZWNvZGVyLmRhcnQnIGhpZGUgcGVyY2VudERlY29kZXI7CgovLy8gVGhlIGNhbm9uaWNhbCBpbnN0YW5jZSBvZiBbUGVyY2VudENvZGVjXS4KY29uc3QgcGVyY2VudCA9IGNvbnN0IFBlcmNlbnRDb2RlYy5fKCk7CgovLyBUT0RPKG53ZWl6KTogQWRkIGZsYWdzIHRvIHN1cHBvcnQgZ2VuZXJhdGluZyBhbmQgaW50ZXJwcmV0aW5nICIrIiBhcyBhIHNwYWNlCi8vIGNoYXJhY3Rlci4gQWxzbyBhZGQgYW4gb3B0aW9uIGZvciBjdXN0b20gc2V0cyBvZiB1bnJlc2VydmVkIGNoYXJhY3RlcnMuCi8vLyBBIGNvZGVjIHRoYXQgY29udmVydHMgYnl0ZSBhcnJheXMgdG8gYW5kIGZyb20gcGVyY2VudC1lbmNvZGVkIChhbHNvIGtub3duIGFzCi8vLyBVUkwtZW5jb2RlZCkgc3RyaW5ncyBhY2NvcmRpbmcgdG8gW1JGQyAzOTg2XVtyZmNdLgovLy8KLy8vIFtyZmNdOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIuMQovLy8KLy8vIFtlbmNvZGVyXSBlbmNvZGVzIGFsbCBieXRlcyBvdGhlciB0aGFuIEFTQ0lJIGxldHRlcnMsIGRlY2ltYWwgZGlnaXRzLCBvciBvbmUKLy8vIG9mIGAtLl9+YC4gVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiBbVXJpLmVuY29kZVF1ZXJ5Q29tcG9uZW50XSBleGNlcHQKLy8vIHRoYXQgaXQgZG9lc24ndCBlbmNvZGUgYDB4MjBgIGJ5dGVzIHRvIHRoZSBgK2AgY2hhcmFjdGVyLgovLy8KLy8vIFRvIGJlIG1heGltYWxseSBmbGV4aWJsZSwgW2RlY29kZXJdIHdpbGwgZGVjb2RlIGFueSBwZXJjZW50LWVuY29kZWQgYnl0ZSBhbmQKLy8vIHdpbGwgYWxsb3cgYW55IG5vbi1wZXJjZW50LWVuY29kZWQgYnl0ZSBvdGhlciB0aGFuIGAlYC4gQnkgZGVmYXVsdCwgaXQKLy8vIGludGVycHJldHMgYCtgIGFzIGAweDJCYCByYXRoZXIgdGhhbiBgMHgyMGAgYXMgZW1pdHRlZCBieQovLy8gW1VyaS5lbmNvZGVRdWVyeUNvbXBvbmVudF0uCmNsYXNzIFBlcmNlbnRDb2RlYyBleHRlbmRzIENvZGVjPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgUGVyY2VudEVuY29kZXIgZ2V0IGVuY29kZXIgPT4gcGVyY2VudEVuY29kZXI7CiAgUGVyY2VudERlY29kZXIgZ2V0IGRlY29kZXIgPT4gcGVyY2VudERlY29kZXI7CgogIGNvbnN0IFBlcmNlbnRDb2RlYy5fKCk7Cn0KKABOTjwBGQEXAR8fATMzAS4oAVBLUTcEOwRRTj4EUUs+IDYwMAEaAgEgcGFja2FnZTpjb252ZXJ0L3NyYy9wZXJjZW50LmRhcnRFc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbnZlcnQvbGliL3NyYy9zdHJpbmdfYWNjdW11bGF0b3Jfc2luay5kYXJ0hLgvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwoKLy8vIEEgc2luayB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgY29uY2F0ZW5hdGVkIHN0cmluZ3MgcGFzc2VkIHRvIGl0LgovLy8KLy8vIFNlZSBhbHNvIFtTdHJpbmdDb252ZXJzaW9uU2luay53aXRoQ2FsbGJhY2tdLgpjbGFzcyBTdHJpbmdBY2N1bXVsYXRvclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vLyBUaGUgc3RyaW5nIGFjY3VtdWxhdGVkIHNvIGZhci4KICBTdHJpbmcgZ2V0IHN0cmluZyA9PiBfYnVmZmVyLnRvU3RyaW5nKCk7CiAgZmluYWwgX2J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKCiAgLy8vIFdoZXRoZXIgW2Nsb3NlXSBoYXMgYmVlbiBjYWxsZWQuCiAgYm9vbCBnZXQgaXNDbG9zZWQgPT4gX2lzQ2xvc2VkOwogIHZhciBfaXNDbG9zZWQgPSBmYWxzZTsKCiAgLy8vIEVtcHRpZXMgW3N0cmluZ10uCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQgZG91YmxlLXByb2Nlc3NpbmcgZGF0YS4KICB2b2lkIGNsZWFyKCkgewogICAgX2J1ZmZlci5jbGVhcigpOwogIH0KCiAgdm9pZCBhZGQoU3RyaW5nIGNodW5rKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJDYW4ndCBhZGQgdG8gYSBjbG9zZWQgc2luay4iKTsKICAgIH0KCiAgICBfYnVmZmVyLndyaXRlKGNodW5rKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJDYW4ndCBhZGQgdG8gYSBjbG9zZWQgc2luay4iKTsKICAgIH0KCiAgICBfYnVmZmVyLndyaXRlKGNodW5rLnN1YnN0cmluZyhzdGFydCwgZW5kKSk7CiAgICBpZiAoaXNMYXN0KSBfaXNDbG9zZWQgPSB0cnVlOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9pc0Nsb3NlZCA9IHRydWU7CiAgfQp9CjAATk48ARcBSgQyPyUrJgEnIhkBGAY4ERUEARsVOwYBGgQBQRU7BgEwIgQBERYEAgEwcGFja2FnZTpjb252ZXJ0L3NyYy9zdHJpbmdfYWNjdW11bGF0b3Jfc2luay5kYXJ0N3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy90eXBlZF9kYXRhL2xpYi90eXBlZF9kYXRhLmRhcnSBaC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gVXRpbGl0aWVzIGFuZCBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gdGhlICJkYXJ0OnR5cGVkX2RhdGEiIGxpYnJhcnkuCmxpYnJhcnkgdHlwZWRfZGF0YTsKCmV4cG9ydCAicGFja2FnZTp0eXBlZF9kYXRhL3R5cGVkX2J1ZmZlcnMuZGFydCI7CgoATk48AUoUATABInBhY2thZ2U6dHlwZWRfZGF0YS90eXBlZF9kYXRhLmRhcnQ5c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbnZlcnQvbGliL3NyYy9oZXgvZW5jb2Rlci5kYXJ0i4kvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb252ZXJ0LmhleC5lbmNvZGVyOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgppbXBvcnQgJ3BhY2thZ2U6Y2hhcmNvZGUvYXNjaWkuZGFydCc7CgovLy8gVGhlIGNhbm9uaWNhbCBpbnN0YW5jZSBvZiBbSGV4RW5jb2Rlcl0uCmNvbnN0IGhleEVuY29kZXIgPSBjb25zdCBIZXhFbmNvZGVyLl8oKTsKCi8vLyBBIGNvbnZlcnRlciB0aGF0IGVuY29kZXMgYnl0ZSBhcnJheXMgaW50byBoZXhhZGVjaW1hbCBzdHJpbmdzLgovLy8KLy8vIFRoaXMgd2lsbCB0aHJvdyBhIFtSYW5nZUVycm9yXSBpZiB0aGUgYnl0ZSBhcnJheSBoYXMgYW55IGRpZ2l0cyB0aGF0IGRvbid0Ci8vLyBmaXQgaW4gdGhlIGdhbXV0IG9mIGEgYnl0ZS4KY2xhc3MgSGV4RW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gewogIGNvbnN0IEhleEVuY29kZXIuXygpOwoKICBTdHJpbmcgY29udmVydChMaXN0PGludD4gYnl0ZXMpID0+IF9jb252ZXJ0KGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpOwoKICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFN0cmluZz4gc2luaykgPT4KICAgICAgbmV3IF9IZXhFbmNvZGVyU2luayhzaW5rKTsKfQoKLy8vIEEgY29udmVyc2lvbiBzaW5rIGZvciBjaHVua2VkIGhleGFkZWNpbWFsIGVuY29kaW5nLgpjbGFzcyBfSGV4RW5jb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLy8gVGhlIHVuZGVybHlpbmcgc2luayB0byB3aGljaCBkZWNvZGVkIGJ5dGUgYXJyYXlzIHdpbGwgYmUgcGFzc2VkLgogIGZpbmFsIFNpbms8U3RyaW5nPiBfc2luazsKCiAgX0hleEVuY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspIHsKICAgIF9zaW5rLmFkZChfY29udmVydChjaHVuaywgMCwgY2h1bmsubGVuZ3RoKSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgY2h1bmsubGVuZ3RoKTsKICAgIF9zaW5rLmFkZChfY29udmVydChjaHVuaywgc3RhcnQsIGVuZCkpOwogICAgaWYgKGlzTGFzdCkgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KfQoKU3RyaW5nIF9jb252ZXJ0KExpc3Q8aW50PiBieXRlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgLy8gQSBVaW50OExpc3QgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBhIFN0cmluZ0J1ZmZlciBnaXZlbiB0aGF0IHdlIGtub3cgdGhhdAogIC8vIHdlJ3JlIG9ubHkgZW1pdHRpbmcgQVNDSUktY29tcGF0aWJsZSBjaGFyYWN0ZXJzLCBhbmQgdGhhdCB3ZSBrbm93IHRoZQogIC8vIGxlbmd0aCBhaGVhZCBvZiB0aW1lLgogIHZhciBidWZmZXIgPSBuZXcgVWludDhMaXN0KChlbmQgLSBzdGFydCkgKiAyKTsKICB2YXIgYnVmZmVySW5kZXggPSAwOwoKICAvLyBBIGJpdHdpc2UgT1Igb2YgYWxsIGJ5dGVzIGluIFtieXRlc10uIFRoaXMgYWxsb3dzIHVzIHRvIGNoZWNrIGZvcgogIC8vIG91dC1vZi1yYW5nZSBieXRlcyB3aXRob3V0IGFkZGluZyBtb3JlIGJyYW5jaGVzIHRoYW4gbmVjZXNzYXJ5IHRvIHRoZQogIC8vIGNvcmUgbG9vcC4KICB2YXIgYnl0ZU9yID0gMDsKICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgdmFyIGJ5dGUgPSBieXRlc1tpXTsKICAgIGJ5dGVPciB8PSBieXRlOwoKICAgIC8vIFRoZSBiaXR3aXNlIGFyaXRobWV0aWMgaGVyZSBpcyBlcXVpdmFsZW50IHRvIGBieXRlIH4vIDE2YCBhbmQgYGJ5dGUgJSAxNmAKICAgIC8vIGZvciB2YWxpZCBieXRlIHZhbHVlcywgYnV0IGlzIGVhc2llciBmb3IgZGFydDJqcyB0byBvcHRpbWl6ZSBnaXZlbiB0aGF0CiAgICAvLyBpdCBjYW4ndCBwcm92ZSB0aGF0IFtieXRlXSB3aWxsIGFsd2F5cyBiZSBwb3NpdGl2ZS4KICAgIGJ1ZmZlcltidWZmZXJJbmRleCsrXSA9IF9jb2RlVW5pdEZvckRpZ2l0KChieXRlICYgMHhGMCkgPj4gNCk7CiAgICBidWZmZXJbYnVmZmVySW5kZXgrK10gPSBfY29kZVVuaXRGb3JEaWdpdChieXRlICYgMHgwRik7CiAgfQoKICBpZiAoYnl0ZU9yID49IDAgJiYgYnl0ZU9yIDw9IDI1NSkgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhidWZmZXIpOwoKICAvLyBJZiB0aGVyZSB3YXMgYW4gaW52YWxpZCBieXRlLCBmaW5kIGl0IGFuZCB0aHJvdyBhbiBleGNlcHRpb24uCiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgIHZhciBieXRlID0gYnl0ZXNbaV07CiAgICBpZiAoYnl0ZSA+PSAwICYmIGJ5dGUgPD0gMHhmZikgY29udGludWU7CiAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICJJbnZhbGlkIGJ5dGUgJHtieXRlIDwgMCA/ICItIiA6ICIifTB4JHtieXRlLmFicygpLnRvUmFkaXhTdHJpbmcoMTYpfS4iLAogICAgICAgIGJ5dGVzLAogICAgICAgIGkpOwogIH0KCiAgdGhyb3cgJ3VucmVhY2hhYmxlJzsKfQoKLy8vIFJldHVybnMgdGhlIEFTQ0lJL1VuaWNvZGUgY29kZSB1bml0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGhleGFkZWNpbWFsIGRpZ2l0Ci8vLyBbZGlnaXRdLgppbnQgX2NvZGVVbml0Rm9yRGlnaXQoaW50IGRpZ2l0KSA9PiBkaWdpdCA8IDEwID8gZGlnaXQgKyAkMCA6IGRpZ2l0ICsgJGEgLSAxMDsKWwBOTjwBHQEXGgEmASwpAUMETyA4GAFHAUIhAgE4N0ccAR8BHjEEAUQ6LB8EARETBAIBN09LGzEXAUdLEBImGRQBUU87QzwEAU0BQyYZLR9RDwwEARcCAU8NTwEkcGFja2FnZTpjb252ZXJ0L3NyYy9oZXgvZW5jb2Rlci5kYXJ0OXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb252ZXJ0L2xpYi9zcmMvaGV4L2RlY29kZXIuZGFydJT9Ly8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29udmVydC5oZXguZGVjb2RlcjsKCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKaW1wb3J0ICcuLi91dGlscy5kYXJ0JzsKCi8vLyBUaGUgY2Fub25pY2FsIGluc3RhbmNlIG9mIFtIZXhEZWNvZGVyXS4KY29uc3QgaGV4RGVjb2RlciA9IGNvbnN0IEhleERlY29kZXIuXygpOwoKLy8vIEEgY29udmVydGVyIHRoYXQgZGVjb2RlcyBoZXhhZGVjaW1hbCBzdHJpbmdzIGludG8gYnl0ZSBhcnJheXMuCi8vLwovLy8gQmVjYXVzZSB0d28gaGV4YWRlY2ltYWwgZGlnaXRzIGNvcnJlc3BvbmQgdG8gYSBzaW5nbGUgYnl0ZSwgdGhpcyB3aWxsIHRocm93Ci8vLyBhIFtGb3JtYXRFeGNlcHRpb25dIGlmIGdpdmVuIGFuIG9kZC1sZW5ndGggc3RyaW5nLiBJdCB3aWxsIGFsc28gdGhyb3cgYQovLy8gW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgZ2l2ZW4gYSBzdHJpbmcgY29udGFpbmluZyBub24taGV4YWRlY2ltYWwgY29kZSB1bml0cy4KY2xhc3MgSGV4RGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGNvbnN0IEhleERlY29kZXIuXygpOwoKICBMaXN0PGludD4gY29udmVydChTdHJpbmcgc3RyaW5nKSB7CiAgICBpZiAoIXN0cmluZy5sZW5ndGguaXNFdmVuKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiSW52YWxpZCBpbnB1dCBsZW5ndGgsIG11c3QgYmUgZXZlbi4iLCBzdHJpbmcsIHN0cmluZy5sZW5ndGgpOwogICAgfQoKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OExpc3Qoc3RyaW5nLmxlbmd0aCB+LyAyKTsKICAgIF9kZWNvZGUoc3RyaW5nLmNvZGVVbml0cywgMCwgc3RyaW5nLmxlbmd0aCwgYnl0ZXMsIDApOwogICAgcmV0dXJuIGJ5dGVzOwogIH0KCiAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPExpc3Q8aW50Pj4gc2luaykgPT4KICAgICAgbmV3IF9IZXhEZWNvZGVyU2luayhzaW5rKTsKfQoKLy8vIEEgY29udmVyc2lvbiBzaW5rIGZvciBjaHVua2VkIGhleGFkZWNpbWFsIGRlY29kaW5nLgpjbGFzcyBfSGV4RGVjb2RlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vLyBUaGUgdW5kZXJseWluZyBzaW5rIHRvIHdoaWNoIGRlY29kZWQgYnl0ZSBhcnJheXMgd2lsbCBiZSBwYXNzZWQuCiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwoKICAvLy8gVGhlIHRyYWlsaW5nIGRpZ2l0IGZyb20gdGhlIHByZXZpb3VzIHN0cmluZy4KICAvLy8KICAvLy8gVGhpcyB3aWxsIGJlIG5vbi1gbnVsbGAgaWYgdGhlIG1vc3QgcmVjZW50IHN0cmluZyBoYWQgYW4gb2RkIG51bWJlciBvZgogIC8vLyBoZXhhZGVjaW1hbCBkaWdpdHMuIFNpbmNlIGl0J3MgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQsIGl0J3MgYWx3YXlzIGEKICAvLy8gbXVsdGlwbGUgb2YgMTYuCiAgaW50IF9sYXN0RGlnaXQ7CgogIF9IZXhEZWNvZGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzdHJpbmcubGVuZ3RoKTsKCiAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgIGlmIChpc0xhc3QpIF9jbG9zZShzdHJpbmcsIGVuZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2YXIgY29kZVVuaXRzID0gc3RyaW5nLmNvZGVVbml0czsKICAgIFVpbnQ4TGlzdCBieXRlczsKICAgIGludCBieXRlc1N0YXJ0OwogICAgaWYgKF9sYXN0RGlnaXQgPT0gbnVsbCkgewogICAgICBieXRlcyA9IG5ldyBVaW50OExpc3QoKGVuZCAtIHN0YXJ0KSB+LyAyKTsKICAgICAgYnl0ZXNTdGFydCA9IDA7CiAgICB9IGVsc2UgewogICAgICB2YXIgaGV4UGFpcnMgPSAoZW5kIC0gc3RhcnQgLSAxKSB+LyAyOwogICAgICBieXRlcyA9IG5ldyBVaW50OExpc3QoMSArIGhleFBhaXJzKTsKICAgICAgYnl0ZXNbMF0gPSBfbGFzdERpZ2l0ICsgZGlnaXRGb3JDb2RlVW5pdChjb2RlVW5pdHMsIHN0YXJ0KTsKICAgICAgc3RhcnQrKzsKICAgICAgYnl0ZXNTdGFydCA9IDE7CiAgICB9CgogICAgX2xhc3REaWdpdCA9IF9kZWNvZGUoY29kZVVuaXRzLCBzdGFydCwgZW5kLCBieXRlcywgYnl0ZXNTdGFydCk7CgogICAgX3NpbmsuYWRkKGJ5dGVzKTsKICAgIGlmIChpc0xhc3QpIF9jbG9zZShzdHJpbmcsIGVuZCk7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKSA9PgogICAgICBuZXcgX0hleERlY29kZXJCeXRlU2luayhfc2luayk7CgogIHZvaWQgY2xvc2UoKSA9PiBfY2xvc2UoKTsKCiAgLy8vIExpa2UgW2Nsb3NlXSwgYnV0IGluY2x1ZGVzIFtzdHJpbmddIGFuZCBbaW5kZXhdIGluIHRoZSBbRm9ybWF0RXhjZXB0aW9uXQogIC8vLyBpZiBvbmUgaXMgdGhyb3duLgogIHZvaWQgX2Nsb3NlKFtTdHJpbmcgc3RyaW5nLCBpbnQgaW5kZXhdKSB7CiAgICBpZiAoX2xhc3REaWdpdCAhPSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiSW5wdXQgZW5kZWQgd2l0aCBpbmNvbXBsZXRlIGVuY29kZWQgYnl0ZS4iLCBzdHJpbmcsIGluZGV4KTsKICAgIH0KCiAgICBfc2luay5jbG9zZSgpOwogIH0KfQoKLy8vIEEgY29udmVyc2lvbiBzaW5rIGZvciBjaHVua2VkIGhleGFkZWNpbWFsIGRlY29kaW5nIGZyb20gVVRGLTggYnl0ZXMuCmNsYXNzIF9IZXhEZWNvZGVyQnl0ZVNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLy8gVGhlIHVuZGVybHlpbmcgc2luayB0byB3aGljaCBkZWNvZGVkIGJ5dGUgYXJyYXlzIHdpbGwgYmUgcGFzc2VkLgogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBfc2luazsKCiAgLy8vIFRoZSB0cmFpbGluZyBkaWdpdCBmcm9tIHRoZSBwcmV2aW91cyBzdHJpbmcuCiAgLy8vCiAgLy8vIFRoaXMgd2lsbCBiZSBub24tYG51bGxgIGlmIHRoZSBtb3N0IHJlY2VudCBzdHJpbmcgaGFkIGFuIG9kZCBudW1iZXIgb2YKICAvLy8gaGV4YWRlY2ltYWwgZGlnaXRzLiBTaW5jZSBpdCdzIHRoZSBtb3N0IHNpZ25pZmljYW50IGRpZ2l0LCBpdCdzIGFsd2F5cyBhCiAgLy8vIG11bHRpcGxlIG9mIDE2LgogIGludCBfbGFzdERpZ2l0OwoKICBfSGV4RGVjb2RlckJ5dGVTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspID0+IGFkZFNsaWNlKGNodW5rLCAwLCBjaHVuay5sZW5ndGgsIGZhbHNlKTsKCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGNodW5rLmxlbmd0aCk7CgogICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICBpZiAoaXNMYXN0KSBfY2xvc2UoY2h1bmssIGVuZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBVaW50OExpc3QgYnl0ZXM7CiAgICBpbnQgYnl0ZXNTdGFydDsKICAgIGlmIChfbGFzdERpZ2l0ID09IG51bGwpIHsKICAgICAgYnl0ZXMgPSBuZXcgVWludDhMaXN0KChlbmQgLSBzdGFydCkgfi8gMik7CiAgICAgIGJ5dGVzU3RhcnQgPSAwOwogICAgfSBlbHNlIHsKICAgICAgdmFyIGhleFBhaXJzID0gKGVuZCAtIHN0YXJ0IC0gMSkgfi8gMjsKICAgICAgYnl0ZXMgPSBuZXcgVWludDhMaXN0KDEgKyBoZXhQYWlycyk7CiAgICAgIGJ5dGVzWzBdID0gX2xhc3REaWdpdCArIGRpZ2l0Rm9yQ29kZVVuaXQoY2h1bmssIHN0YXJ0KTsKICAgICAgc3RhcnQrKzsKICAgICAgYnl0ZXNTdGFydCA9IDE7CiAgICB9CgogICAgX2xhc3REaWdpdCA9IF9kZWNvZGUoY2h1bmssIHN0YXJ0LCBlbmQsIGJ5dGVzLCBieXRlc1N0YXJ0KTsKCiAgICBfc2luay5hZGQoYnl0ZXMpOwogICAgaWYgKGlzTGFzdCkgX2Nsb3NlKGNodW5rLCBlbmQpOwogIH0KCiAgdm9pZCBjbG9zZSgpID0+IF9jbG9zZSgpOwoKICAvLy8gTGlrZSBbY2xvc2VdLCBidXQgaW5jbHVkZXMgW2NodW5rXSBhbmQgW2luZGV4XSBpbiB0aGUgW0Zvcm1hdEV4Y2VwdGlvbl0KICAvLy8gaWYgb25lIGlzIHRocm93bi4KICB2b2lkIF9jbG9zZShbTGlzdDxpbnQ+IGNodW5rLCBpbnQgaW5kZXhdKSB7CiAgICBpZiAoX2xhc3REaWdpdCAhPSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiSW5wdXQgZW5kZWQgd2l0aCBpbmNvbXBsZXRlIGVuY29kZWQgYnl0ZS4iLCBjaHVuaywgaW5kZXgpOwogICAgfQoKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgovLy8gRGVjb2RlcyBbY29kZVVuaXRzXSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgaW50byBbZGVzdGluYXRpb25dLgovLy8KLy8vIFRoaXMgcmVhZHMgZnJvbSBbY29kZVVuaXRzXSBiZXR3ZWVuIFtzb3VyY2VTdGFydF0gYW5kIFtzb3VyY2VFbmRdLiBJdCB3cml0ZXMKLy8vIHRoZSByZXN1bHQgaW50byBbZGVzdGluYXRpb25dIHN0YXJ0aW5nIGF0IFtkZXN0aW5hdGlvblN0YXJ0XS4KLy8vCi8vLyBJZiB0aGVyZSdzIGEgbGVmdG92ZXIgZGlnaXQgYXQgdGhlIGVuZCBvZiB0aGUgZGVjb2RpbmcsIHRoaXMgcmV0dXJucyB0aGF0Ci8vLyBkaWdpdC4gT3RoZXJ3aXNlIGl0IHJldHVybnMgYG51bGxgLgppbnQgX2RlY29kZShMaXN0PGludD4gY29kZVVuaXRzLCBpbnQgc291cmNlU3RhcnQsIGludCBzb3VyY2VFbmQsCiAgICBMaXN0PGludD4gZGVzdGluYXRpb24sIGludCBkZXN0aW5hdGlvblN0YXJ0KSB7CiAgdmFyIGRlc3RpbmF0aW9uSW5kZXggPSBkZXN0aW5hdGlvblN0YXJ0OwogIGZvciAodmFyIGkgPSBzb3VyY2VTdGFydDsgaSA8IHNvdXJjZUVuZCAtIDE7IGkgKz0gMikgewogICAgdmFyIGZpcnN0RGlnaXQgPSBkaWdpdEZvckNvZGVVbml0KGNvZGVVbml0cywgaSk7CiAgICB2YXIgc2Vjb25kRGlnaXQgPSBkaWdpdEZvckNvZGVVbml0KGNvZGVVbml0cywgaSArIDEpOwogICAgZGVzdGluYXRpb25bZGVzdGluYXRpb25JbmRleCsrXSA9IDE2ICogZmlyc3REaWdpdCArIHNlY29uZERpZ2l0OwogIH0KCiAgaWYgKChzb3VyY2VFbmQgLSBzb3VyY2VTdGFydCkuaXNFdmVuKSByZXR1cm4gbnVsbDsKICByZXR1cm4gMTYgKiBkaWdpdEZvckNvZGVVbml0KGNvZGVVbml0cywgc291cmNlRW5kIC0gMSk7Cn0KgK4ATk48AR0BFxoBGAEsKQFDBFBMTzgYASUhIUkGATM7EgQBRyECATg5Rx8BMwZNTxYSAR8BQjsBGCcOBgEmFRQeMRYNLStCDxYGAUQBFiUEATgmARwBTxgsHiFHBgETBAIBSTtHHwEzBk1PFhIBIwFIAUQ6ARgmDgYBFRQeMRYNLSs+DxYGAUABFiQEARwBThguHiFGBgETBAIBQgRRQgROKEEzKzk1OkUEATU6AgEkcGFja2FnZTpjb252ZXJ0L3NyYy9oZXgvZGVjb2Rlci5kYXJ0PXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb252ZXJ0L2xpYi9zcmMvcGVyY2VudC9lbmNvZGVyLmRhcnSOJi8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbnZlcnQucGVyY2VudC5lbmNvZGVyOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwoKaW1wb3J0ICdwYWNrYWdlOmNoYXJjb2RlL2FzY2lpLmRhcnQnOwoKLy8vIFRoZSBjYW5vbmljYWwgaW5zdGFuY2Ugb2YgW1BlcmNlbnRFbmNvZGVyXS4KY29uc3QgcGVyY2VudEVuY29kZXIgPSBjb25zdCBQZXJjZW50RW5jb2Rlci5fKCk7CgovLy8gQSBjb252ZXJ0ZXIgdGhhdCBlbmNvZGVzIGJ5dGUgYXJyYXlzIGludG8gcGVyY2VudC1lbmNvZGVkIHN0cmluZ3MuCi8vLwovLy8gW2VuY29kZXJdIGVuY29kZXMgYWxsIGJ5dGVzIG90aGVyIHRoYW4gQVNDSUkgbGV0dGVycywgZGVjaW1hbCBkaWdpdHMsIG9yIG9uZQovLy8gb2YgYC0uX35gLiBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIFtVcmkuZW5jb2RlUXVlcnlDb21wb25lbnRdIGV4Y2VwdAovLy8gdGhhdCBpdCBkb2Vzbid0IGVuY29kZSBgMHgyMGAgYnl0ZXMgdG8gdGhlIGArYCBjaGFyYWN0ZXIuCi8vLwovLy8gVGhpcyB3aWxsIHRocm93IGEgW1JhbmdlRXJyb3JdIGlmIHRoZSBieXRlIGFycmF5IGhhcyBhbnkgZGlnaXRzIHRoYXQgZG9uJ3QKLy8vIGZpdCBpbiB0aGUgZ2FtdXQgb2YgYSBieXRlLgpjbGFzcyBQZXJjZW50RW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gewogIGNvbnN0IFBlcmNlbnRFbmNvZGVyLl8oKTsKCiAgU3RyaW5nIGNvbnZlcnQoTGlzdDxpbnQ+IGJ5dGVzKSA9PiBfY29udmVydChieXRlcywgMCwgYnl0ZXMubGVuZ3RoKTsKCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspID0+CiAgICAgIG5ldyBfUGVyY2VudEVuY29kZXJTaW5rKHNpbmspOwp9CgovLy8gQSBjb252ZXJzaW9uIHNpbmsgZm9yIGNodW5rZWQgcGVyY2VudGFkZWNpbWFsIGVuY29kaW5nLgpjbGFzcyBfUGVyY2VudEVuY29kZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgLy8vIFRoZSB1bmRlcmx5aW5nIHNpbmsgdG8gd2hpY2ggZGVjb2RlZCBieXRlIGFycmF5cyB3aWxsIGJlIHBhc3NlZC4KICBmaW5hbCBTaW5rPFN0cmluZz4gX3Npbms7CgogIF9QZXJjZW50RW5jb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgewogICAgX3NpbmsuYWRkKF9jb252ZXJ0KGNodW5rLCAwLCBjaHVuay5sZW5ndGgpKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBjaHVuay5sZW5ndGgpOwogICAgX3NpbmsuYWRkKF9jb252ZXJ0KGNodW5rLCBzdGFydCwgZW5kKSk7CiAgICBpZiAoaXNMYXN0KSBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgpTdHJpbmcgX2NvbnZlcnQoTGlzdDxpbnQ+IGJ5dGVzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICB2YXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICAvLyBBIGJpdHdpc2UgT1Igb2YgYWxsIGJ5dGVzIGluIFtieXRlc10uIFRoaXMgYWxsb3dzIHVzIHRvIGNoZWNrIGZvcgogIC8vIG91dC1vZi1yYW5nZSBieXRlcyB3aXRob3V0IGFkZGluZyBtb3JlIGJyYW5jaGVzIHRoYW4gbmVjZXNzYXJ5IHRvIHRoZQogIC8vIGNvcmUgbG9vcC4KICB2YXIgYnl0ZU9yID0gMDsKICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgdmFyIGJ5dGUgPSBieXRlc1tpXTsKICAgIGJ5dGVPciB8PSBieXRlOwoKICAgIC8vIElmIHRoZSBieXRlIGlzIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGNvbnZlcnQgaXQgdG8gbG93ZXJjYXNlIHRvIGNoZWNrIGlmCiAgICAvLyBpdCdzIHVucmVzZXJ2ZWQuIFRoaXMgd29ya3MgYmVjYXVzZSB1cHBlcmNhc2UgbGV0dGVycyBpbiBBU0NJSSBhcmUKICAgIC8vIGV4YWN0bHkgYDBiMTAwMDAwID0gMHgyMGAgbGVzcyB0aGFuIGxvd2VyY2FzZSBsZXR0ZXJzLCBzbyBpZiB3ZSBlbnN1cmUKICAgIC8vIHRoYXQgdGhhdCBiaXQgaXMgMSB3ZSBlbnN1cmUgdGhhdCB0aGUgbGV0dGVyIGlzIGxvd2VyY2FzZS4KICAgIHZhciBsZXR0ZXIgPSAweDIwIHwgYnl0ZTsKICAgIGlmICgobGV0dGVyID49ICRhICYmIGxldHRlciA8PSAkeikgfHwKICAgICAgICAoYnl0ZSA+PSAkMCAmJiBieXRlIDw9ICQ5KSB8fAogICAgICAgIGJ5dGUgPT0gJGRhc2ggfHwKICAgICAgICBieXRlID09ICRkb3QgfHwKICAgICAgICBieXRlID09ICR1bmRlcnNjb3JlIHx8CiAgICAgICAgYnl0ZSA9PSAkdGlsZGUpIHsKICAgICAgLy8gVW5yZXNlcnZlZCBjaGFyYWN0ZXJzIGFyZSBzYWZlIHRvIHdyaXRlIGFzLWlzLgogICAgICBidWZmZXIud3JpdGVDaGFyQ29kZShieXRlKTsKICAgICAgY29udGludWU7CiAgICB9CgogICAgYnVmZmVyLndyaXRlQ2hhckNvZGUoJHBlcmNlbnQpOwoKICAgIC8vIFRoZSBiaXR3aXNlIGFyaXRobWV0aWMgaGVyZSBpcyBlcXVpdmFsZW50IHRvIGBieXRlIH4vIDE2YCBhbmQgYGJ5dGUgJSAxNmAKICAgIC8vIGZvciB2YWxpZCBieXRlIHZhbHVlcywgYnV0IGlzIGVhc2llciBmb3IgZGFydDJqcyB0byBvcHRpbWl6ZSBnaXZlbiB0aGF0CiAgICAvLyBpdCBjYW4ndCBwcm92ZSB0aGF0IFtieXRlXSB3aWxsIGFsd2F5cyBiZSBwb3NpdGl2ZS4KICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKF9jb2RlVW5pdEZvckRpZ2l0KChieXRlICYgMHhGMCkgPj4gNCkpOwogICAgYnVmZmVyLndyaXRlQ2hhckNvZGUoX2NvZGVVbml0Rm9yRGlnaXQoYnl0ZSAmIDB4MEYpKTsKICB9CgogIGlmIChieXRlT3IgPj0gMCAmJiBieXRlT3IgPD0gMjU1KSByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CgogIC8vIElmIHRoZXJlIHdhcyBhbiBpbnZhbGlkIGJ5dGUsIGZpbmQgaXQgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi4KICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgdmFyIGJ5dGUgPSBieXRlc1tpXTsKICAgIGlmIChieXRlID49IDAgJiYgYnl0ZSA8PSAweGZmKSBjb250aW51ZTsKICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgIkludmFsaWQgYnl0ZSAke2J5dGUgPCAwID8gIi0iIDogIiJ9MHgke2J5dGUuYWJzKCkudG9SYWRpeFN0cmluZygxNil9LiIsCiAgICAgICAgYnl0ZXMsCiAgICAgICAgaSk7CiAgfQoKICB0aHJvdyAndW5yZWFjaGFibGUnOwp9CgovLy8gUmV0dXJucyB0aGUgQVNDSUkvVW5pY29kZSBjb2RlIHVuaXQgY29ycmVzcG9uZGluZyB0byB0aGUgaGV4YWRlY2ltYWwgZGlnaXQKLy8vIFtkaWdpdF0uCmludCBfY29kZVVuaXRGb3JEaWdpdChpbnQgZGlnaXQpID0+IGRpZ2l0IDwgMTAgPyBkaWdpdCArICQwIDogZGlnaXQgKyAkQSAtIDEwOwpsAE5OPAEhARcBJgEwMQFHBFFOPgRPIDwcAUcBQiUCATw7RxwBIwEeMQQBRDosHwQBERMEAgE3IwFHSxASJhkUAU9KTkIeKiYZGB8aOCIQBgEkAVFPO0E6BAE+AUMmGS0fUQ8MBAEXAgFPDU8BKHBhY2thZ2U6Y29udmVydC9zcmMvcGVyY2VudC9lbmNvZGVyLmRhcnQ9c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbnZlcnQvbGliL3NyYy9wZXJjZW50L2RlY29kZXIuZGFydJ3sLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29udmVydC5wZXJjZW50LmRlY29kZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgppbXBvcnQgJ3BhY2thZ2U6Y2hhcmNvZGUvYXNjaWkuZGFydCc7CmltcG9ydCAncGFja2FnZTp0eXBlZF9kYXRhL3R5cGVkX2RhdGEuZGFydCc7CgppbXBvcnQgJy4uL3V0aWxzLmRhcnQnOwoKLy8vIFRoZSBjYW5vbmljYWwgaW5zdGFuY2Ugb2YgW1BlcmNlbnREZWNvZGVyXS4KY29uc3QgcGVyY2VudERlY29kZXIgPSBjb25zdCBQZXJjZW50RGVjb2Rlci5fKCk7Cgpjb25zdCBfbGFzdFBlcmNlbnQgPSAtMTsKCi8vLyBBIGNvbnZlcnRlciB0aGF0IGRlY29kZXMgcGVyY2VudC1lbmNvZGVkIHN0cmluZ3MgaW50byBieXRlIGFycmF5cy4KLy8vCi8vLyBUbyBiZSBtYXhpbWFsbHkgZmxleGlibGUsIHRoaXMgd2lsbCBkZWNvZGUgYW55IHBlcmNlbnQtZW5jb2RlZCBieXRlIGFuZAovLy8gd2lsbCBhbGxvdyBhbnkgbm9uLXBlcmNlbnQtZW5jb2RlZCBieXRlIG90aGVyIHRoYW4gYCVgLiBCeSBkZWZhdWx0LCBpdAovLy8gaW50ZXJwcmV0cyBgK2AgYXMgYDB4MkJgIHJhdGhlciB0aGFuIGAweDIwYCBhcyBlbWl0dGVkIGJ5Ci8vLyBbVXJpLmVuY29kZVF1ZXJ5Q29tcG9uZW50XS4KLy8vCi8vLyBUaGlzIHdpbGwgdGhyb3cgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiB0aGUgaW5wdXQgc3RyaW5nIGhhcyBhbiBpbmNvbXBsZXRlCi8vLyBwZXJjZW50LWVuY29kaW5nLCBvciBpZiBpdCBjb250YWlucyBub24tQVNDSUkgY29kZSB1bml0cy4KY2xhc3MgUGVyY2VudERlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8U3RyaW5nLCBMaXN0PGludD4+IHsKICBjb25zdCBQZXJjZW50RGVjb2Rlci5fKCk7CgogIExpc3Q8aW50PiBjb252ZXJ0KFN0cmluZyBzdHJpbmcpIHsKICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhCdWZmZXIoKTsKICAgIHZhciBsYXN0RGlnaXQgPSBfZGVjb2RlKHN0cmluZy5jb2RlVW5pdHMsIDAsIHN0cmluZy5sZW5ndGgsIGJ1ZmZlcik7CgogICAgaWYgKGxhc3REaWdpdCAhPSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiSW5wdXQgZW5kZWQgd2l0aCBpbmNvbXBsZXRlIGVuY29kZWQgYnl0ZS4iLCBzdHJpbmcsIHN0cmluZy5sZW5ndGgpOwogICAgfQoKICAgIHJldHVybiBidWZmZXIuYnVmZmVyLmFzVWludDhMaXN0KDAsIGJ1ZmZlci5sZW5ndGgpOwogIH0KCiAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPExpc3Q8aW50Pj4gc2luaykgPT4KICAgICAgbmV3IF9QZXJjZW50RGVjb2RlclNpbmsoc2luayk7Cn0KCi8vLyBBIGNvbnZlcnNpb24gc2luayBmb3IgY2h1bmtlZCBwZXJjZW50LWVuY29kZWQgZGVjb2RpbmcuCmNsYXNzIF9QZXJjZW50RGVjb2RlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vLyBUaGUgdW5kZXJseWluZyBzaW5rIHRvIHdoaWNoIGRlY29kZWQgYnl0ZSBhcnJheXMgd2lsbCBiZSBwYXNzZWQuCiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwoKICAvLy8gVGhlIHRyYWlsaW5nIGRpZ2l0IGZyb20gdGhlIHByZXZpb3VzIHN0cmluZy4KICAvLy8KICAvLy8gVGhpcyBpcyBgbnVsbGAgaWYgdGhlIHByZXZpb3VzIHN0cmluZyBlbmRlZCB3aXRoIGEgY29tcGxldGUKICAvLy8gcGVyY2VudC1lbmNvZGVkIGJ5dGUgb3IgYSBsaXRlcmFsIGNoYXJhY3Rlci4gSXQncyBbX2xhc3RQZXJjZW50XSBpZiB0aGUKICAvLy8gbW9zdCByZWNlbnQgc3RyaW5nIGVuZGVkIHdpdGggYCVgLiBPdGhlcndpc2UsIHRoZSBtb3N0IHJlY2VudCBzdHJpbmcgZW5kZWQKICAvLy8gd2l0aCBhIGAlYCBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIGRpZ2l0LCBhbmQgdGhpcyBpcyB0aGF0IGRpZ2l0LiBTaW5jZQogIC8vLyBpdCdzIHRoZSBtb3N0IHNpZ25pZmljYW50IGRpZ2l0LCBpdCdzIGFsd2F5cyBhIG11bHRpcGxlIG9mIDE2LgogIGludCBfbGFzdERpZ2l0OwoKICBfUGVyY2VudERlY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzdHJpbmcsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHN0cmluZy5sZW5ndGgpOwoKICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgaWYgKGlzTGFzdCkgX2Nsb3NlKHN0cmluZywgZW5kKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhCdWZmZXIoKTsKICAgIHZhciBjb2RlVW5pdHMgPSBzdHJpbmcuY29kZVVuaXRzOwogICAgaWYgKF9sYXN0RGlnaXQgPT0gX2xhc3RQZXJjZW50KSB7CiAgICAgIF9sYXN0RGlnaXQgPSAxNiAqIGRpZ2l0Rm9yQ29kZVVuaXQoY29kZVVuaXRzLCBzdGFydCk7CiAgICAgIHN0YXJ0Kys7CgogICAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgICAgaWYgKGlzTGFzdCkgX2Nsb3NlKHN0cmluZywgZW5kKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBpZiAoX2xhc3REaWdpdCAhPSBudWxsKSB7CiAgICAgIGJ1ZmZlci5hZGQoX2xhc3REaWdpdCArIGRpZ2l0Rm9yQ29kZVVuaXQoY29kZVVuaXRzLCBzdGFydCkpOwogICAgICBzdGFydCsrOwogICAgfQoKICAgIF9sYXN0RGlnaXQgPSBfZGVjb2RlKGNvZGVVbml0cywgc3RhcnQsIGVuZCwgYnVmZmVyKTsKCiAgICBfc2luay5hZGQoYnVmZmVyLmJ1ZmZlci5hc1VpbnQ4TGlzdCgwLCBidWZmZXIubGVuZ3RoKSk7CiAgICBpZiAoaXNMYXN0KSBfY2xvc2Uoc3RyaW5nLCBlbmQpOwogIH0KCiAgQnl0ZUNvbnZlcnNpb25TaW5rIGFzVXRmOFNpbmsoYm9vbCBhbGxvd01hbGZvcm1lZCkgPT4KICAgICAgbmV3IF9QZXJjZW50RGVjb2RlckJ5dGVTaW5rKF9zaW5rKTsKCiAgdm9pZCBjbG9zZSgpID0+IF9jbG9zZSgpOwoKICAvLy8gTGlrZSBbY2xvc2VdLCBidXQgaW5jbHVkZXMgW3N0cmluZ10gYW5kIFtpbmRleF0gaW4gdGhlIFtGb3JtYXRFeGNlcHRpb25dCiAgLy8vIGlmIG9uZSBpcyB0aHJvd24uCiAgdm9pZCBfY2xvc2UoW1N0cmluZyBzdHJpbmcsIGludCBpbmRleF0pIHsKICAgIGlmIChfbGFzdERpZ2l0ICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnB1dCBlbmRlZCB3aXRoIGluY29tcGxldGUgZW5jb2RlZCBieXRlLiIsIHN0cmluZywgaW5kZXgpOwogICAgfQoKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgovLy8gQSBjb252ZXJzaW9uIHNpbmsgZm9yIGNodW5rZWQgcGVyY2VudC1lbmNvZGVkIGRlY29kaW5nIGZyb20gVVRGLTggYnl0ZXMuCmNsYXNzIF9QZXJjZW50RGVjb2RlckJ5dGVTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgLy8vIFRoZSB1bmRlcmx5aW5nIHNpbmsgdG8gd2hpY2ggZGVjb2RlZCBieXRlIGFycmF5cyB3aWxsIGJlIHBhc3NlZC4KICBmaW5hbCBTaW5rPExpc3Q8aW50Pj4gX3Npbms7CgogIC8vLyBUaGUgdHJhaWxpbmcgZGlnaXQgZnJvbSB0aGUgcHJldmlvdXMgc3RyaW5nLgogIC8vLwogIC8vLyBUaGlzIGlzIGBudWxsYCBpZiB0aGUgcHJldmlvdXMgc3RyaW5nIGVuZGVkIHdpdGggYSBjb21wbGV0ZQogIC8vLyBwZXJjZW50LWVuY29kZWQgYnl0ZSBvciBhIGxpdGVyYWwgY2hhcmFjdGVyLiBJdCdzIFtfbGFzdFBlcmNlbnRdIGlmIHRoZQogIC8vLyBtb3N0IHJlY2VudCBzdHJpbmcgZW5kZWQgd2l0aCBgJWAuIE90aGVyd2lzZSwgdGhlIG1vc3QgcmVjZW50IHN0cmluZyBlbmRlZAogIC8vLyB3aXRoIGEgYCVgIGZvbGxvd2VkIGJ5IGEgaGV4YWRlY2ltYWwgZGlnaXQsIGFuZCB0aGlzIGlzIHRoYXQgZGlnaXQuIFNpbmNlCiAgLy8vIGl0J3MgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQsIGl0J3MgYWx3YXlzIGEgbXVsdGlwbGUgb2YgMTYuCiAgaW50IF9sYXN0RGlnaXQ7CgogIF9QZXJjZW50RGVjb2RlckJ5dGVTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspID0+IGFkZFNsaWNlKGNodW5rLCAwLCBjaHVuay5sZW5ndGgsIGZhbHNlKTsKCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGNodW5rLmxlbmd0aCk7CgogICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICBpZiAoaXNMYXN0KSBfY2xvc2UoY2h1bmssIGVuZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QnVmZmVyKCk7CiAgICBpZiAoX2xhc3REaWdpdCA9PSBfbGFzdFBlcmNlbnQpIHsKICAgICAgX2xhc3REaWdpdCA9IDE2ICogZGlnaXRGb3JDb2RlVW5pdChjaHVuaywgc3RhcnQpOwogICAgICBzdGFydCsrOwoKICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICAgIGlmIChpc0xhc3QpIF9jbG9zZShjaHVuaywgZW5kKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBpZiAoX2xhc3REaWdpdCAhPSBudWxsKSB7CiAgICAgIGJ1ZmZlci5hZGQoX2xhc3REaWdpdCArIGRpZ2l0Rm9yQ29kZVVuaXQoY2h1bmssIHN0YXJ0KSk7CiAgICAgIHN0YXJ0Kys7CiAgICB9CgogICAgX2xhc3REaWdpdCA9IF9kZWNvZGUoY2h1bmssIHN0YXJ0LCBlbmQsIGJ1ZmZlcik7CgogICAgX3NpbmsuYWRkKGJ1ZmZlci5idWZmZXIuYXNVaW50OExpc3QoMCwgYnVmZmVyLmxlbmd0aCkpOwogICAgaWYgKGlzTGFzdCkgX2Nsb3NlKGNodW5rLCBlbmQpOwogIH0KCiAgdm9pZCBjbG9zZSgpID0+IF9jbG9zZSgpOwoKICAvLy8gTGlrZSBbY2xvc2VdLCBidXQgaW5jbHVkZXMgW2NodW5rXSBhbmQgW2luZGV4XSBpbiB0aGUgW0Zvcm1hdEV4Y2VwdGlvbl0KICAvLy8gaWYgb25lIGlzIHRocm93bi4KICB2b2lkIF9jbG9zZShbTGlzdDxpbnQ+IGNodW5rLCBpbnQgaW5kZXhdKSB7CiAgICBpZiAoX2xhc3REaWdpdCAhPSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAiSW5wdXQgZW5kZWQgd2l0aCBpbmNvbXBsZXRlIGVuY29kZWQgYnl0ZS4iLCBjaHVuaywgaW5kZXgpOwogICAgfQoKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgovLy8gRGVjb2RlcyBbY29kZVVuaXRzXSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgaW50byBbZGVzdGluYXRpb25dLgovLy8KLy8vIFRoaXMgcmVhZHMgZnJvbSBbY29kZVVuaXRzXSBiZXR3ZWVuIFtzb3VyY2VTdGFydF0gYW5kIFtzb3VyY2VFbmRdLiBJdCB3cml0ZXMKLy8vIHRoZSByZXN1bHQgaW50byBbZGVzdGluYXRpb25dIHN0YXJ0aW5nIGF0IFtkZXN0aW5hdGlvblN0YXJ0XS4KLy8vCi8vLyBJZiB0aGVyZSdzIGEgbGVmdG92ZXIgZGlnaXQgYXQgdGhlIGVuZCBvZiB0aGUgZGVjb2RpbmcsIHRoaXMgcmV0dXJucyB0aGF0Ci8vLyBkaWdpdC4gT3RoZXJ3aXNlIGl0IHJldHVybnMgYG51bGxgLgppbnQgX2RlY29kZShMaXN0PGludD4gY29kZVVuaXRzLCBpbnQgc3RhcnQsIGludCBlbmQsIFVpbnQ4QnVmZmVyIGJ1ZmZlcikgewogIC8vIEEgYml0d2lzZSBPUiBvZiBhbGwgY29kZSB1bml0cyBpbiBbY29kZVVuaXRzXS4gVGhpcyBhbGxvd3MgdXMgdG8gY2hlY2sgZm9yCiAgLy8gb3V0LW9mLXJhbmdlIGNvZGUgdW5pdHMgd2l0aG91dCBhZGRpbmcgbW9yZSBicmFuY2hlcyB0aGFuIG5lY2Vzc2FyeSB0byB0aGUKICAvLyBjb3JlIGxvb3AuCiAgdmFyIGNvZGVVbml0T3IgPSAwOwoKICAvLyBUaGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IHNsaWNlIG9mIGFkamFjZW50IG5vbi0lIGNoYXJhY3RlcnMuIFdlIGNhbiBhZGQKICAvLyBhbGwgb2YgdGhlc2UgdG8gdGhlIGJ1ZmZlciBhdCBvbmNlLgogIHZhciBzbGljZVN0YXJ0ID0gc3RhcnQ7CiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgIC8vIEZpcnN0LCBsb29wIHRocm91Z2ggbm9uLSUgY2hhcmFjdGVycy4KICAgIHZhciBjb2RlVW5pdCA9IGNvZGVVbml0c1tpXTsKICAgIGlmIChjb2RlVW5pdHNbaV0gIT0gJHBlcmNlbnQpIHsKICAgICAgY29kZVVuaXRPciB8PSBjb2RlVW5pdDsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gV2UgZm91bmQgYSAlLiBUaGUgc2xpY2UgZnJvbSBgc2xpY2VTdGFydGAgdG8gYGlgIHJlcHJlc2VudHMgY2hhcmFjdGVycwogICAgLy8gdGhhbiBjYW4gYmUgY29waWVkIHRvIHRoZSBidWZmZXIgYXMtaXMuCiAgICBpZiAoaSA+IHNsaWNlU3RhcnQpIHsKICAgICAgX2NoZWNrRm9ySW52YWxpZENvZGVVbml0KGNvZGVVbml0T3IsIGNvZGVVbml0cywgc2xpY2VTdGFydCwgaSk7CiAgICAgIGJ1ZmZlci5hZGRBbGwoY29kZVVuaXRzLCBzbGljZVN0YXJ0LCBpKTsKICAgIH0KCiAgICAvLyBOb3cgZGVjb2RlIHRoZSBwZXJjZW50LWVuY29kZWQgYnl0ZSBhbmQgYWRkIGl0IGFzIHdlbGwuCiAgICBpKys7CiAgICBpZiAoaSA+PSBlbmQpIHJldHVybiBfbGFzdFBlcmNlbnQ7CgogICAgdmFyIGZpcnN0RGlnaXQgPSBkaWdpdEZvckNvZGVVbml0KGNvZGVVbml0cywgaSk7CiAgICBpKys7CiAgICBpZiAoaSA+PSBlbmQpIHJldHVybiAxNiAqIGZpcnN0RGlnaXQ7CgogICAgdmFyIHNlY29uZERpZ2l0ID0gZGlnaXRGb3JDb2RlVW5pdChjb2RlVW5pdHMsIGkpOwogICAgYnVmZmVyLmFkZCgxNiAqIGZpcnN0RGlnaXQgKyBzZWNvbmREaWdpdCk7CgogICAgLy8gVGhlIG5leHQgaXRlcmF0aW9uIHdpbGwgbG9vayBmb3Igbm9uLSUgY2hhcmFjdGVycyBhZ2Fpbi4KICAgIHNsaWNlU3RhcnQgPSBpICsgMTsKICB9CgogIGlmIChlbmQgPiBzbGljZVN0YXJ0KSB7CiAgICBfY2hlY2tGb3JJbnZhbGlkQ29kZVVuaXQoY29kZVVuaXRPciwgY29kZVVuaXRzLCBzbGljZVN0YXJ0LCBlbmQpOwogICAgaWYgKHN0YXJ0ID09IHNsaWNlU3RhcnQpIHsKICAgICAgYnVmZmVyLmFkZEFsbChjb2RlVW5pdHMpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyLmFkZEFsbChjb2RlVW5pdHMsIHNsaWNlU3RhcnQsIGVuZCk7CiAgICB9CiAgfQoKICByZXR1cm4gbnVsbDsKfQoKdm9pZCBfY2hlY2tGb3JJbnZhbGlkQ29kZVVuaXQoCiAgICBpbnQgY29kZVVuaXRPciwgTGlzdDxpbnQ+IGNvZGVVbml0cywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgaWYgKGNvZGVVbml0T3IgPj0gMCAmJiBjb2RlVW5pdE9yIDw9IDB4N2YpIHJldHVybjsKCiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgIHZhciBjb2RlVW5pdCA9IGNvZGVVbml0c1tpXTsKICAgIGlmIChjb2RlVW5pdCA+PSAwICYmIGNvZGVVbml0IDw9IDB4N2YpIGNvbnRpbnVlOwogICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAiTm9uLUFTQ0lJIGNvZGUgdW5pdCAiCiAgICAgICAgIlUrJHtjb2RlVW5pdC50b1JhZGl4U3RyaW5nKDE2KS5wYWRMZWZ0KDQsICcwJyl9IiwKICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgaSk7CiAgfQp9CoD2AE5OPAEhARcBJi0BGAEwMQEZAUcETEs+IAROPjwcASUkSQEdIU8GATgEAUclAgE8PUcfATMGQk5RUEUSASMBQjsBGCcOBgEkJiY8DwEaKRAIBgEeQw8GATkBPCUEATgqARwBTxgsHiFHBgETBAIBTT9HHwEzBkJOUVBFEgEnAUgBRDoBGCYOBgEkJjgPARooEAgGAR4/DwYBNQE8JAQBHAFOGC4eIUYGARMEAgFCBFFCBE4oS1BQEBYBUSkaJi0hJB4QBgFOLxpGLwYBPwknATUJKgE2LwFAGAQBGkYfIA0xBgQBDwIBHz81ASYhNR8fOxMMBAIBKHBhY2thZ2U6Y29udmVydC9zcmMvcGVyY2VudC9kZWNvZGVyLmRhcnQ6c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL3R5cGVkX2RhdGEvbGliL3R5cGVkX2J1ZmZlcnMuZGFydLPPLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBHcm93YWJsZSB0eXBlZC1kYXRhIGxpc3RzLgovLy8KLy8vIFRoZXNlIGxpc3RzIHdvcmtzIGp1c3QgYXMgYSB0eXBlZC1kYXRhIGxpc3QsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIGdyb3dhYmxlLgovLy8gVGhleSB1c2UgYW4gdW5kZXJseWluZyBidWZmZXIsIGFuZCB3aGVuIHRoYXQgYnVmZmVyIGJlY29tZXMgdG9vIHNtYWxsLCBpdAovLy8gaXMgcmVwbGFjZWQgYnkgYSBuZXcgYnVmZmVyLgovLy8KLy8vIFRoYXQgbWVhbnMgdGhhdCB1c2luZyB0aGUgW1R5cGVkRGF0YVZpZXcuYnVmZmVyXSBnZXR0ZXIgaXMgbm90IGd1YXJhbnRlZWQKLy8vIHRvIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZWFjaCB0aW1lIGl0IGlzIHVzZWQsIGFuZCB0aGF0IHRoZSBidWZmZXIgbWF5Ci8vLyBiZSBsYXJnZXIgdGhhbiB3aGF0IHRoZSBsaXN0IGlzIHVzaW5nLgpsaWJyYXJ5IHR5cGVkX2RhdGEudHlwZWRfYnVmZmVyczsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IExpc3RCYXNlOwppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSI7CgphYnN0cmFjdCBjbGFzcyBfVHlwZWREYXRhQnVmZmVyPEU+IGV4dGVuZHMgTGlzdEJhc2U8RT4gewogIHN0YXRpYyBjb25zdCBpbnQgSU5JVElBTF9MRU5HVEggPSA4OwoKICAvLy8gVGhlIHVuZGVybHlpbmcgZGF0YSBidWZmZXIuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYWx3YXlzIGJvdGggYSBMaXN0PEU+IGFuZCBhIFR5cGVkRGF0YSwgd2hpY2ggd2UgZG9uJ3QgaGF2ZSBhIHR5cGUKICAvLy8gZm9yIGhlcmUuIEZvciBleGFtcGxlLCBmb3IgYSBgVWludDhCdWZmZXJgLCB0aGlzIGlzIGEgYFVpbnQ4TGlzdGAuCiAgTGlzdDxFPiBfYnVmZmVyOwoKICAvLy8gUmV0dXJucyBhIHZpZXcgb2YgW19idWZmZXJdIGFzIGEgW1R5cGVkRGF0YV0uCiAgVHlwZWREYXRhIGdldCBfdHlwZWRCdWZmZXIgPT4gX2J1ZmZlciBhcyBUeXBlZERhdGE7CgogIC8vLyBUaGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJlaW5nIGJ1aWx0LgogIGludCBfbGVuZ3RoOwoKICBfVHlwZWREYXRhQnVmZmVyKExpc3Q8RT4gYnVmZmVyKQogICAgICA6IHRoaXMuX2J1ZmZlciA9IGJ1ZmZlciwKICAgICAgICB0aGlzLl9sZW5ndGggPSBidWZmZXIubGVuZ3RoOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoOwogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcyk7CiAgICByZXR1cm4gX2J1ZmZlcltpbmRleF07CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEUgdmFsdWUpIHsKICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzKTsKICAgIF9idWZmZXJbaW5kZXhdID0gdmFsdWU7CiAgfQoKICB2b2lkIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCkgewogICAgaWYgKG5ld0xlbmd0aCA8IF9sZW5ndGgpIHsKICAgICAgRSBkZWZhdWx0VmFsdWUgPSBfZGVmYXVsdFZhbHVlOwogICAgICBmb3IgKGludCBpID0gbmV3TGVuZ3RoOyBpIDwgX2xlbmd0aDsgaSsrKSB7CiAgICAgICAgX2J1ZmZlcltpXSA9IGRlZmF1bHRWYWx1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChuZXdMZW5ndGggPiBfYnVmZmVyLmxlbmd0aCkgewogICAgICBMaXN0PEU+IG5ld0J1ZmZlcjsKICAgICAgaWYgKF9idWZmZXIubGVuZ3RoID09IDApIHsKICAgICAgICBuZXdCdWZmZXIgPSBfY3JlYXRlQnVmZmVyKG5ld0xlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3QnVmZmVyID0gX2NyZWF0ZUJpZ2dlckJ1ZmZlcihuZXdMZW5ndGgpOwogICAgICB9CiAgICAgIG5ld0J1ZmZlci5zZXRSYW5nZSgwLCBfbGVuZ3RoLCBfYnVmZmVyKTsKICAgICAgX2J1ZmZlciA9IG5ld0J1ZmZlcjsKICAgIH0KICAgIF9sZW5ndGggPSBuZXdMZW5ndGg7CiAgfQoKICB2b2lkIF9hZGQoRSB2YWx1ZSkgewogICAgaWYgKF9sZW5ndGggPT0gX2J1ZmZlci5sZW5ndGgpIF9ncm93KF9sZW5ndGgpOwogICAgX2J1ZmZlcltfbGVuZ3RoKytdID0gdmFsdWU7CiAgfQoKICAvLyBXZSBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgYWRkYCBiZWNhdXNlIGl0IGdyb3dzIHRoZSBsaXN0CiAgLy8gYnkgc2V0dGluZyB0aGUgbGVuZ3RoIGluIGluY3JlbWVudHMgb2Ygb25lLiBXZSB3YW50IHRvIGdyb3cgYnkgZG91YmxpbmcKICAvLyBjYXBhY2l0eSBpbiBtb3N0IGNhc2VzLgogIHZvaWQgYWRkKEUgdmFsdWUpIHsKICAgIF9hZGQodmFsdWUpOwogIH0KCiAgLy8vIEFwcGVuZHMgYWxsIG9iamVjdHMgb2YgW3ZhbHVlc10gdG8gdGhlIGVuZCBvZiB0aGlzIGJ1ZmZlci4KICAvLy8KICAvLy8gVGhpcyBhZGRzIHZhbHVlcyBmcm9tIFtzdGFydF0gKGluY2x1c2l2ZSkgdG8gW2VuZF0gKGV4Y2x1c2l2ZSkgaW4KICAvLy8gW3ZhbHVlc10uIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGFkZGluZyBhbGwgZWxlbWVudHMgb2YKICAvLy8gW3ZhbHVlc10gYWZ0ZXIgW3N0YXJ0XS4KICAvLy8KICAvLy8gVGhlIFtzdGFydF0gdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUuIFRoZSBbdmFsdWVzXSBpdGVyYWJsZSBtdXN0IGhhdmUgYXQKICAvLy8gbGVhc3QgW3N0YXJ0XSBlbGVtZW50cywgYW5kIGlmIFtlbmRdIGlzIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBncmVhdGVyIHRoYW4KICAvLy8gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgW3ZhbHVlc10gbXVzdCBoYXZlIGF0IGxlYXN0IFtlbmRdIGVsZW1lbnRzLgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IHZhbHVlcywgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoc3RhcnQsICJzdGFydCIpOwogICAgaWYgKGVuZCAhPSBudWxsICYmIHN0YXJ0ID4gZW5kKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIG51bGwsICJlbmQiKTsKICAgIH0KCiAgICBfYWRkQWxsKHZhbHVlcywgc3RhcnQsIGVuZCk7CiAgfQoKICAvLy8gSW5zZXJ0cyBhbGwgb2JqZWN0cyBvZiBbdmFsdWVzXSBhdCBwb3NpdGlvbiBbaW5kZXhdIGluIHRoaXMgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBhZGRzIHZhbHVlcyBmcm9tIFtzdGFydF0gKGluY2x1c2l2ZSkgdG8gW2VuZF0gKGV4Y2x1c2l2ZSkgaW4KICAvLy8gW3ZhbHVlc10uIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGFkZGluZyBhbGwgZWxlbWVudHMgb2YKICAvLy8gW3ZhbHVlc10gYWZ0ZXIgW3N0YXJ0XS4KICAvLy8KICAvLy8gVGhlIFtzdGFydF0gdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUuIFRoZSBbdmFsdWVzXSBpdGVyYWJsZSBtdXN0IGhhdmUgYXQKICAvLy8gbGVhc3QgW3N0YXJ0XSBlbGVtZW50cywgYW5kIGlmIFtlbmRdIGlzIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBncmVhdGVyIHRoYW4KICAvLy8gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgW3ZhbHVlc10gbXVzdCBoYXZlIGF0IGxlYXN0IFtlbmRdIGVsZW1lbnRzLgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gdmFsdWVzLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZEluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiLCBfbGVuZ3RoICsgMSk7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoc3RhcnQsICJzdGFydCIpOwogICAgaWYgKGVuZCAhPSBudWxsKSB7CiAgICAgIGlmIChzdGFydCA+IGVuZCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIG51bGwsICJlbmQiKTsKICAgICAgfQogICAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm47CiAgICB9CgogICAgLy8gSWYgd2UncmUgYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW55d2F5LCB1c2UgW19hZGRBbGxdLiBUaGlzIGxldHMKICAgIC8vIHVzIGF2b2lkIGNvbnZlcnRpbmcgW3ZhbHVlc10gaW50byBhIGxpc3QgZXZlbiBpZiBbZW5kXSBpcyBudWxsLCBzaW5jZSB3ZQogICAgLy8gY2FuIGFkZCB2YWx1ZXMgaXRlcmF0aXZlbHkgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gV2UgY2FuJ3QgZG8gc28gaW4gdGhlCiAgICAvLyBjZW50ZXIgYmVjYXVzZSBjb3B5aW5nIHRoZSB0cmFpbGluZyBlbGVtZW50cyBldmVyeSB0aW1lIGlzIG5vbi1saW5lYXIuCiAgICBpZiAoaW5kZXggPT0gX2xlbmd0aCkgewogICAgICBfYWRkQWxsKHZhbHVlcywgc3RhcnQsIGVuZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZW5kID09IG51bGwgJiYgdmFsdWVzIGlzIExpc3QpIHsKICAgICAgZW5kID0gdmFsdWVzLmxlbmd0aDsKICAgIH0KICAgIGlmIChlbmQgIT0gbnVsbCkgewogICAgICBfaW5zZXJ0S25vd25MZW5ndGgoaW5kZXgsIHZhbHVlcywgc3RhcnQsIGVuZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBBZGQgZWxlbWVudHMgYXQgZW5kLCBncm93aW5nIGFzIGFwcHJvcHJpYXRlLCB0aGVuIHB1dCB0aGVtIGJhY2sgYXQKICAgIC8vIHBvc2l0aW9uIFtpbmRleF0gdXNpbmcgZmxpcC1ieS1kb3VibGUtcmV2ZXJzZS4KICAgIHZhciB3cml0ZUluZGV4ID0gX2xlbmd0aDsKICAgIHZhciBza2lwQ291bnQgPSBzdGFydDsKICAgIGZvciAodmFyIHZhbHVlIGluIHZhbHVlcykgewogICAgICBpZiAoc2tpcENvdW50ID4gMCkgewogICAgICAgIHNraXBDb3VudC0tOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICh3cml0ZUluZGV4ID09IF9idWZmZXIubGVuZ3RoKSB7CiAgICAgICAgX2dyb3cod3JpdGVJbmRleCk7CiAgICAgIH0KICAgICAgX2J1ZmZlclt3cml0ZUluZGV4KytdID0gdmFsdWU7CiAgICB9CgogICAgaWYgKHNraXBDb3VudCA+IDApIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlRvbyBmZXcgZWxlbWVudHMiKTsKICAgIH0KICAgIGlmIChlbmQgIT0gbnVsbCAmJiB3cml0ZUluZGV4IDwgZW5kKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIHdyaXRlSW5kZXgsICJlbmQiKTsKICAgIH0KCiAgICAvLyBTd2FwIFtpbmRleC4uX2xlbmd0aCkgYW5kIFtfbGVuZ3RoLi53cml0ZUluZGV4KSBieSBkb3VibGUtcmV2ZXJzaW5nLgogICAgX3JldmVyc2UoX2J1ZmZlciwgaW5kZXgsIF9sZW5ndGgpOwogICAgX3JldmVyc2UoX2J1ZmZlciwgX2xlbmd0aCwgd3JpdGVJbmRleCk7CiAgICBfcmV2ZXJzZShfYnVmZmVyLCBpbmRleCwgd3JpdGVJbmRleCk7CiAgICBfbGVuZ3RoID0gd3JpdGVJbmRleDsKICAgIHJldHVybjsKICB9CgogIC8vIFJldmVyc2VzIHRoZSByYW5nZSBbc3RhcnQuLmVuZCkgb2YgYnVmZmVyLgogIHN0YXRpYyB2b2lkIF9yZXZlcnNlKExpc3QgYnVmZmVyLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGVuZC0tOyAvLyBQb2ludCB0byBsYXN0IGVsZW1lbnQsIG5vdCBhZnRlciBsYXN0IGVsZW1lbnQuCiAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKICAgICAgdmFyIGZpcnN0ID0gYnVmZmVyW3N0YXJ0XTsKICAgICAgdmFyIGxhc3QgPSBidWZmZXJbZW5kXTsKICAgICAgYnVmZmVyW2VuZF0gPSBmaXJzdDsKICAgICAgYnVmZmVyW3N0YXJ0XSA9IGxhc3Q7CiAgICAgIHN0YXJ0Kys7CiAgICAgIGVuZC0tOwogICAgfQogIH0KCiAgLy8vIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgW2FkZEFsbF0uCiAgLy8vCiAgLy8vIFRoaXMgYWxsb3dzIFthZGRBbGxdIGFuZCBbaW5zZXJ0QWxsXSB0byBzaGFyZSBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IGEKICAvLy8gc3ViY2xhc3MgdW5leHBlY3RlZGx5IG92ZXJyaWRpbmcgYm90aCB3aGVuIGl0IGludGVuZGVkIHRvIG9ubHkgb3ZlcnJpZGUKICAvLy8gW2FkZEFsbF0uCiAgdm9pZCBfYWRkQWxsKEl0ZXJhYmxlPEU+IHZhbHVlcywgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBpZiAodmFsdWVzIGlzIExpc3QpIGVuZCA/Pz0gdmFsdWVzLmxlbmd0aDsKCiAgICAvLyBJZiB3ZSBrbm93IHRoZSBsZW5ndGggb2YgdGhlIHNlZ21lbnQgdG8gYWRkLCBkbyBzbyB3aXRoIFthZGRSYW5nZV0uIFRoaXMKICAgIC8vIHdheSB3ZSBrbm93IGhvdyBtdWNoIHRvIGdyb3cgdGhlIGJ1ZmZlciBpbiBhZHZhbmNlLCBhbmQgaXQgbWF5IGJlIGV2ZW4KICAgIC8vIG1vcmUgZWZmaWNpZW50IGZvciB0eXBlZCBkYXRhIGlucHV0LgogICAgaWYgKGVuZCAhPSBudWxsKSB7CiAgICAgIF9pbnNlcnRLbm93bkxlbmd0aChfbGVuZ3RoLCB2YWx1ZXMsIHN0YXJ0LCBlbmQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gT3RoZXJ3aXNlLCBqdXN0IGFkZCB2YWx1ZXMgb25lIGF0IGEgdGltZS4KICAgIHZhciBpID0gMDsKICAgIGZvciAodmFyIHZhbHVlIGluIHZhbHVlcykgewogICAgICBpZiAoaSA+PSBzdGFydCkgYWRkKHZhbHVlKTsKICAgICAgaSsrOwogICAgfQogICAgaWYgKGkgPCBzdGFydCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlRvbyBmZXcgZWxlbWVudHMiKTsKICB9CgogIC8vLyBMaWtlIFtpbnNlcnRBbGxdLCBidXQgd2l0aCBhIGd1YXJhbnRlZWQgbm9uLWBudWxsYCBbc3RhcnRdIGFuZCBbZW5kXS4KICB2b2lkIF9pbnNlcnRLbm93bkxlbmd0aChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IHZhbHVlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAodmFsdWVzIGlzIExpc3QpIHsKICAgICAgZW5kID8/PSB2YWx1ZXMubGVuZ3RoOwogICAgICBpZiAoc3RhcnQgPiB2YWx1ZXMubGVuZ3RoIHx8IGVuZCA+IHZhbHVlcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiVG9vIGZldyBlbGVtZW50cyIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoZW5kICE9IG51bGwpOwogICAgfQoKICAgIHZhciB2YWx1ZXNMZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIHZhciBuZXdMZW5ndGggPSBfbGVuZ3RoICsgdmFsdWVzTGVuZ3RoOwogICAgX2Vuc3VyZUNhcGFjaXR5KG5ld0xlbmd0aCk7CgogICAgX2J1ZmZlci5zZXRSYW5nZSgKICAgICAgICBpbmRleCArIHZhbHVlc0xlbmd0aCwgX2xlbmd0aCArIHZhbHVlc0xlbmd0aCwgX2J1ZmZlciwgaW5kZXgpOwogICAgX2J1ZmZlci5zZXRSYW5nZShpbmRleCwgaW5kZXggKyB2YWx1ZXNMZW5ndGgsIHZhbHVlcywgc3RhcnQpOwogICAgX2xlbmd0aCA9IG5ld0xlbmd0aDsKICB9CgogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSBlbGVtZW50KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gX2xlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShpbmRleCwgMCwgX2xlbmd0aCk7CiAgICB9CiAgICBpZiAoX2xlbmd0aCA8IF9idWZmZXIubGVuZ3RoKSB7CiAgICAgIF9idWZmZXIuc2V0UmFuZ2UoaW5kZXggKyAxLCBfbGVuZ3RoICsgMSwgX2J1ZmZlciwgaW5kZXgpOwogICAgICBfYnVmZmVyW2luZGV4XSA9IGVsZW1lbnQ7CiAgICAgIF9sZW5ndGgrKzsKICAgICAgcmV0dXJuOwogICAgfQogICAgTGlzdDxFPiBuZXdCdWZmZXIgPSBfY3JlYXRlQmlnZ2VyQnVmZmVyKG51bGwpOwogICAgbmV3QnVmZmVyLnNldFJhbmdlKDAsIGluZGV4LCBfYnVmZmVyKTsKICAgIG5ld0J1ZmZlci5zZXRSYW5nZShpbmRleCArIDEsIF9sZW5ndGggKyAxLCBfYnVmZmVyLCBpbmRleCk7CiAgICBuZXdCdWZmZXJbaW5kZXhdID0gZWxlbWVudDsKICAgIF9sZW5ndGgrKzsKICAgIF9idWZmZXIgPSBuZXdCdWZmZXI7CiAgfQoKICAvLy8gRW5zdXJlcyB0aGF0IFtfYnVmZmVyXSBpcyBhdCBsZWFzdCBbcmVxdWlyZWRDYXBhY2l0eV0gbG9uZywKICAvLy8KICAvLy8gR3Jvd3MgdGhlIGJ1ZmZlciBpZiBuZWNlc3NhcnksIHByZXNlcnZpbmcgZXhpc3RpbmcgZGF0YS4KICB2b2lkIF9lbnN1cmVDYXBhY2l0eShpbnQgcmVxdWlyZWRDYXBhY2l0eSkgewogICAgaWYgKHJlcXVpcmVkQ2FwYWNpdHkgPD0gX2J1ZmZlci5sZW5ndGgpIHJldHVybjsKICAgIHZhciBuZXdCdWZmZXIgPSBfY3JlYXRlQmlnZ2VyQnVmZmVyKHJlcXVpcmVkQ2FwYWNpdHkpOwogICAgbmV3QnVmZmVyLnNldFJhbmdlKDAsIF9sZW5ndGgsIF9idWZmZXIpOwogICAgX2J1ZmZlciA9IG5ld0J1ZmZlcjsKICB9CgogIC8vLyBDcmVhdGUgYSBiaWdnZXIgYnVmZmVyLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIGhvdyBtdWNoIGJpZ2dlciBhIGJpZ2dlciBidWZmZXIgc2hvdWxkCiAgLy8vIGJlLiBJZiBbcmVxdWlyZWRDYXBhY2l0eV0gaXMgbm90IG51bGwsIGl0IHdpbGwgYmUgYXQgbGVhc3QgdGhhdAogIC8vLyBzaXplLiBJdCB3aWxsIGFsd2F5cyBoYXZlIGF0IGxlYXN0IGhhdmUgZG91YmxlIHRoZSBjYXBhY2l0eSBvZgogIC8vLyB0aGUgY3VycmVudCBidWZmZXIuCiAgTGlzdDxFPiBfY3JlYXRlQmlnZ2VyQnVmZmVyKGludCByZXF1aXJlZENhcGFjaXR5KSB7CiAgICBpbnQgbmV3TGVuZ3RoID0gX2J1ZmZlci5sZW5ndGggKiAyOwogICAgaWYgKHJlcXVpcmVkQ2FwYWNpdHkgIT0gbnVsbCAmJiBuZXdMZW5ndGggPCByZXF1aXJlZENhcGFjaXR5KSB7CiAgICAgIG5ld0xlbmd0aCA9IHJlcXVpcmVkQ2FwYWNpdHk7CiAgICB9IGVsc2UgaWYgKG5ld0xlbmd0aCA8IElOSVRJQUxfTEVOR1RIKSB7CiAgICAgIG5ld0xlbmd0aCA9IElOSVRJQUxfTEVOR1RIOwogICAgfQogICAgcmV0dXJuIF9jcmVhdGVCdWZmZXIobmV3TGVuZ3RoKTsKICB9CgogIC8vLyBHcm93cyB0aGUgYnVmZmVyLgogIC8vLwogIC8vLyBUaGlzIGNvcGllcyB0aGUgZmlyc3QgW2xlbmd0aF0gZWxlbWVudHMgaW50byB0aGUgbmV3IGJ1ZmZlci4KICB2b2lkIF9ncm93KGludCBsZW5ndGgpIHsKICAgIF9idWZmZXIgPSBfY3JlYXRlQmlnZ2VyQnVmZmVyKG51bGwpLi5zZXRSYW5nZSgwLCBsZW5ndGgsIF9idWZmZXIpOwogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IHNvdXJjZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgaWYgKGVuZCA+IF9sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgMCwgX2xlbmd0aCk7CiAgICBfc2V0UmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLCBza2lwQ291bnQpOwogIH0KCiAgLy8vIExpa2UgW3NldFJhbmdlXSwgYnV0IHdpdGggbm8gYm91bmRzIGNoZWNraW5nLgogIHZvaWQgX3NldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gc291cmNlLCBpbnQgc2tpcENvdW50KSB7CiAgICBpZiAoc291cmNlIGlzIF9UeXBlZERhdGFCdWZmZXI8RT4pIHsKICAgICAgX2J1ZmZlci5zZXRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UuX2J1ZmZlciwgc2tpcENvdW50KTsKICAgIH0gZWxzZSB7CiAgICAgIF9idWZmZXIuc2V0UmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLCBza2lwQ291bnQpOwogICAgfQogIH0KCiAgLy8gVHlwZWREYXRhLgoKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyA9PiBfdHlwZWRCdWZmZXIuZWxlbWVudFNpemVJbkJ5dGVzOwoKICBpbnQgZ2V0IGxlbmd0aEluQnl0ZXMgPT4gX2xlbmd0aCAqIF90eXBlZEJ1ZmZlci5lbGVtZW50U2l6ZUluQnl0ZXM7CgogIGludCBnZXQgb2Zmc2V0SW5CeXRlcyA9PiBfdHlwZWRCdWZmZXIub2Zmc2V0SW5CeXRlczsKCiAgLy8vIFJldHVybnMgdGhlIHVuZGVybHlpbmcgW0J5dGVCdWZmZXJdLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgYnVmZmVyIG1heSBiZSByZXBsYWNlZCBieSBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBbbGVuZ3RoXQogIC8vLyBvZiB0aGlzIGxpc3QuCiAgLy8vCiAgLy8vIFRoZSBidWZmZXIgbWF5IGJlIGxhcmdlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXSBieXRlcywgYnV0IG5ldmVyIHNtYWxsZXIuCiAgQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyID0+IF90eXBlZEJ1ZmZlci5idWZmZXI7CgogIC8vIFNwZWNpYWxpemF0aW9uIGZvciB0aGUgc3BlY2lmaWMgdHlwZS4KCiAgLy8gUmV0dXJuIHplcm8gZm9yIGludGVnZXJzLCAwLjAgZm9yIGZsb2F0cywgZXRjLgogIC8vIFVzZWQgdG8gZmlsbCBidWZmZXIgd2hlbiBjaGFuZ2luZyBsZW5ndGguCiAgRSBnZXQgX2RlZmF1bHRWYWx1ZTsKCiAgLy8gQ3JlYXRlIGEgbmV3IHR5cGVkIGxpc3QgdG8gdXNlIGFzIGJ1ZmZlci4KICBMaXN0PEU+IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpOwp9CgphYnN0cmFjdCBjbGFzcyBfSW50QnVmZmVyIGV4dGVuZHMgX1R5cGVkRGF0YUJ1ZmZlcjxpbnQ+IHsKICBfSW50QnVmZmVyKExpc3Q8aW50PiBidWZmZXIpIDogc3VwZXIoYnVmZmVyKTsKCiAgaW50IGdldCBfZGVmYXVsdFZhbHVlID0+IDA7Cn0KCmFic3RyYWN0IGNsYXNzIF9GbG9hdEJ1ZmZlciBleHRlbmRzIF9UeXBlZERhdGFCdWZmZXI8ZG91YmxlPiB7CiAgX0Zsb2F0QnVmZmVyKExpc3Q8ZG91YmxlPiBidWZmZXIpIDogc3VwZXIoYnVmZmVyKTsKCiAgZG91YmxlIGdldCBfZGVmYXVsdFZhbHVlID0+IDAuMDsKfQoKY2xhc3MgVWludDhCdWZmZXIgZXh0ZW5kcyBfSW50QnVmZmVyIHsKICBVaW50OEJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkgOiBzdXBlcihuZXcgVWludDhMaXN0KGluaXRpYWxMZW5ndGgpKTsKICBVaW50OExpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gbmV3IFVpbnQ4TGlzdChzaXplKTsKfQoKY2xhc3MgSW50OEJ1ZmZlciBleHRlbmRzIF9JbnRCdWZmZXIgewogIEludDhCdWZmZXIoW2ludCBpbml0aWFsTGVuZ3RoID0gMF0pIDogc3VwZXIobmV3IEludDhMaXN0KGluaXRpYWxMZW5ndGgpKTsKICBJbnQ4TGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBuZXcgSW50OExpc3Qoc2l6ZSk7Cn0KCmNsYXNzIFVpbnQ4Q2xhbXBlZEJ1ZmZlciBleHRlbmRzIF9JbnRCdWZmZXIgewogIFVpbnQ4Q2xhbXBlZEJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkKICAgICAgOiBzdXBlcihuZXcgVWludDhDbGFtcGVkTGlzdChpbml0aWFsTGVuZ3RoKSk7CiAgVWludDhDbGFtcGVkTGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBuZXcgVWludDhDbGFtcGVkTGlzdChzaXplKTsKfQoKY2xhc3MgVWludDE2QnVmZmVyIGV4dGVuZHMgX0ludEJ1ZmZlciB7CiAgVWludDE2QnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKSA6IHN1cGVyKG5ldyBVaW50MTZMaXN0KGluaXRpYWxMZW5ndGgpKTsKICBVaW50MTZMaXN0IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpID0+IG5ldyBVaW50MTZMaXN0KHNpemUpOwp9CgpjbGFzcyBJbnQxNkJ1ZmZlciBleHRlbmRzIF9JbnRCdWZmZXIgewogIEludDE2QnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKSA6IHN1cGVyKG5ldyBJbnQxNkxpc3QoaW5pdGlhbExlbmd0aCkpOwogIEludDE2TGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBuZXcgSW50MTZMaXN0KHNpemUpOwp9CgpjbGFzcyBVaW50MzJCdWZmZXIgZXh0ZW5kcyBfSW50QnVmZmVyIHsKICBVaW50MzJCdWZmZXIoW2ludCBpbml0aWFsTGVuZ3RoID0gMF0pIDogc3VwZXIobmV3IFVpbnQzMkxpc3QoaW5pdGlhbExlbmd0aCkpOwogIFVpbnQzMkxpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gbmV3IFVpbnQzMkxpc3Qoc2l6ZSk7Cn0KCmNsYXNzIEludDMyQnVmZmVyIGV4dGVuZHMgX0ludEJ1ZmZlciB7CiAgSW50MzJCdWZmZXIoW2ludCBpbml0aWFsTGVuZ3RoID0gMF0pIDogc3VwZXIobmV3IEludDMyTGlzdChpbml0aWFsTGVuZ3RoKSk7CiAgSW50MzJMaXN0IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpID0+IG5ldyBJbnQzMkxpc3Qoc2l6ZSk7Cn0KCmNsYXNzIFVpbnQ2NEJ1ZmZlciBleHRlbmRzIF9JbnRCdWZmZXIgewogIFVpbnQ2NEJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkgOiBzdXBlcihuZXcgVWludDY0TGlzdChpbml0aWFsTGVuZ3RoKSk7CiAgVWludDY0TGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBuZXcgVWludDY0TGlzdChzaXplKTsKfQoKY2xhc3MgSW50NjRCdWZmZXIgZXh0ZW5kcyBfSW50QnVmZmVyIHsKICBJbnQ2NEJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkgOiBzdXBlcihuZXcgSW50NjRMaXN0KGluaXRpYWxMZW5ndGgpKTsKICBJbnQ2NExpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gbmV3IEludDY0TGlzdChzaXplKTsKfQoKY2xhc3MgRmxvYXQzMkJ1ZmZlciBleHRlbmRzIF9GbG9hdEJ1ZmZlciB7CiAgRmxvYXQzMkJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkKICAgICAgOiBzdXBlcihuZXcgRmxvYXQzMkxpc3QoaW5pdGlhbExlbmd0aCkpOwogIEZsb2F0MzJMaXN0IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpID0+IG5ldyBGbG9hdDMyTGlzdChzaXplKTsKfQoKY2xhc3MgRmxvYXQ2NEJ1ZmZlciBleHRlbmRzIF9GbG9hdEJ1ZmZlciB7CiAgRmxvYXQ2NEJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkKICAgICAgOiBzdXBlcihuZXcgRmxvYXQ2NExpc3QoaW5pdGlhbExlbmd0aCkpOwogIEZsb2F0NjRMaXN0IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpID0+IG5ldyBGbG9hdDY0TGlzdChzaXplKTsKfQoKY2xhc3MgSW50MzJ4NEJ1ZmZlciBleHRlbmRzIF9UeXBlZERhdGFCdWZmZXI8SW50MzJ4ND4gewogIHN0YXRpYyBJbnQzMng0IF96ZXJvID0gbmV3IEludDMyeDQoMCwgMCwgMCwgMCk7CiAgSW50MzJ4NEJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkKICAgICAgOiBzdXBlcihuZXcgSW50MzJ4NExpc3QoaW5pdGlhbExlbmd0aCkpOwogIEludDMyeDQgZ2V0IF9kZWZhdWx0VmFsdWUgPT4gX3plcm87CiAgSW50MzJ4NExpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gbmV3IEludDMyeDRMaXN0KHNpemUpOwp9CgpjbGFzcyBGbG9hdDMyeDRCdWZmZXIgZXh0ZW5kcyBfVHlwZWREYXRhQnVmZmVyPEZsb2F0MzJ4ND4gewogIEZsb2F0MzJ4NEJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkKICAgICAgOiBzdXBlcihuZXcgRmxvYXQzMng0TGlzdChpbml0aWFsTGVuZ3RoKSk7CiAgRmxvYXQzMng0IGdldCBfZGVmYXVsdFZhbHVlID0+IG5ldyBGbG9hdDMyeDQuemVybygpOwogIEZsb2F0MzJ4NExpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gbmV3IEZsb2F0MzJ4NExpc3Qoc2l6ZSk7Cn0KgY8ATk48AR8EUE4hBE5MKyIBKBoBOScBIgZQSRMBNDYBKg8BIx8mAR0dQhsEASpCHAQBIx8mMiMILRkhLg80CC8bBhkEARczIAQBT00dFhEEAUEGSEseBlFRSj4xJjsGASEEAUgGSEseBlFRSkxDMRcZPQggBgFPUFBOHCMOBgEpGwYXNQ4GAUo2HhsgGxUSCCobCCUGARkwBitBBgFMJywqGgwEATA6PRohHhscDw0GBAEnBk1OED8vAVBOLBc3DgYBMQ8gIgsGPQQBTE8aHToyCA0bBgEkLCABFkdCGQQBJig1BiRAIBEOBjMrQCAPGQQBQgY/LzQ7LRkEAR4GREZFGjYoRCQtIgYlBAEYBkMbRwQBT0QuBAE0Sik/DTcGBAEQAUEBRgE3ASsGURQGTjABKwE0LxcBLyMCATowAR4CAT81ASMCASdOPAIBJkw6AgEuLjRKAgEoUD4CASdOPAIBKFA+AgEnTjwCAShQPgIBJ048AgErKS9AAgErKS9AAgE4MikvJkACATwrMTdEAgElcGFja2FnZTp0eXBlZF9kYXRhL3R5cGVkX2J1ZmZlcnMuZGFydDNzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29udmVydC9saWIvc3JjL3V0aWxzLmRhcnSGWC8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbnZlcnQudXRpbHM7CgppbXBvcnQgJ3BhY2thZ2U6Y2hhcmNvZGUvYXNjaWkuZGFydCc7CgovLy8gUmV0dXJucyB0aGUgZGlnaXQgKDAgdGhyb3VnaCAxNSkgY29ycmVzcG9uZGluZyB0byB0aGUgaGV4YWRlY2ltYWwgY29kZSB1bml0Ci8vLyBhdCBpbmRleCBbaV0gaW4gW2NvZGVVbml0c10uCi8vLwovLy8gSWYgdGhlIGdpdmVuIGNvZGUgdW5pdCBpc24ndCB2YWxpZCBoZXhhZGVjaW1hbCwgdGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCmludCBkaWdpdEZvckNvZGVVbml0KExpc3Q8aW50PiBjb2RlVW5pdHMsIGludCBpbmRleCkgewogIC8vIElmIHRoZSBjb2RlIHVuaXQgaXMgYSBudW1lcmFsLCBnZXQgaXRzIHZhbHVlLiBYT1Igd29ya3MgYmVjYXVzZSAwIGluIEFTQ0lJCiAgLy8gaXMgYDBiMTEwMDAwYCBhbmQgdGhlIG90aGVyIG51bWVyYWxzIGNvbWUgYWZ0ZXIgaXQgaW4gYXNjZW5kaW5nIG9yZGVyIGFuZAogIC8vIHRha2UgdXAgYXQgbW9zdCBmb3VyIGJpdHMuCiAgLy8KICAvLyBXZSBjaGVjayBmb3IgZGlnaXRzIGZpcnN0IGJlY2F1c2UgaXQgZW5zdXJlcyB0aGVyZSdzIG9ubHkgYSBzaW5nbGUgYnJhbmNoCiAgLy8gZm9yIDEwIG91dCBvZiAxNiBvZiB0aGUgZXhwZWN0ZWQgY2FzZXMuIFdlIGRvbid0IGNvdW50IHRoZSBgZGlnaXQgPj0gMGAKICAvLyBjaGVjayBiZWNhdXNlIGJyYW5jaCBwcmVkaWN0aW9uIHdpbGwgYWx3YXlzIHdvcmsgb24gaXQgZm9yIHZhbGlkIGRhdGEuCiAgdmFyIGNvZGVVbml0ID0gY29kZVVuaXRzW2luZGV4XTsKICB2YXIgZGlnaXQgPSAkMCBeIGNvZGVVbml0OwogIGlmIChkaWdpdCA8PSA5KSB7CiAgICBpZiAoZGlnaXQgPj0gMCkgcmV0dXJuIGRpZ2l0OwogIH0gZWxzZSB7CiAgICAvLyBJZiB0aGUgY29kZSB1bml0IGlzIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGNvbnZlcnQgaXQgdG8gbG93ZXJjYXNlLiBUaGlzCiAgICAvLyB3b3JrcyBiZWNhdXNlIHVwcGVyY2FzZSBsZXR0ZXJzIGluIEFTQ0lJIGFyZSBleGFjdGx5IGAwYjEwMDAwMCA9IDB4MjBgCiAgICAvLyBsZXNzIHRoYW4gbG93ZXJjYXNlIGxldHRlcnMsIHNvIGlmIHdlIGVuc3VyZSB0aGF0IHRoYXQgYml0IGlzIDEgd2UgZW5zdXJlCiAgICAvLyB0aGF0IHRoZSBsZXR0ZXIgaXMgbG93ZXJjYXNlLgogICAgdmFyIGxldHRlciA9IDB4MjAgfCBjb2RlVW5pdDsKICAgIGlmICgkYSA8PSBsZXR0ZXIgJiYgbGV0dGVyIDw9ICRmKSByZXR1cm4gbGV0dGVyIC0gJGEgKyAxMDsKICB9CgogIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICJJbnZhbGlkIGhleGFkZWNpbWFsIGNvZGUgdW5pdCAiCiAgICAgICJVKyR7Y29kZVVuaXQudG9SYWRpeFN0cmluZygxNikucGFkTGVmdCg0LCAnMCcpfS4iLAogICAgICBjb2RlVW5pdHMsCiAgICAgIGluZGV4KTsKfQopAE5OPAEXASYBUCEEUDdQTyAFT01MIx0UIgtOTlElIj8EAR0nOhEOAgEecGFja2FnZTpjb252ZXJ0L3NyYy91dGlscy5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9hc3luYy5kYXJ0kV8vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoqCiAqIFN1cHBvcnQgZm9yIGFzeW5jaHJvbm91cyBwcm9ncmFtbWluZywKICogd2l0aCBjbGFzc2VzIHN1Y2ggYXMgRnV0dXJlIGFuZCBTdHJlYW0uCiAqCiAqIFVuZGVyc3RhbmRpbmcgW0Z1dHVyZV1zIGFuZCBbU3RyZWFtXXMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yCiAqIHdyaXRpbmcganVzdCBhYm91dCBhbnkgRGFydCBwcm9ncmFtLgogKgogKiBUbyB1c2UgdGhpcyBsaWJyYXJ5IGluIHlvdXIgY29kZToKICoKICogICAgIGltcG9ydCAnZGFydDphc3luYyc7CiAqCiAqICMjIEZ1dHVyZQogKgogKiBBIEZ1dHVyZSBvYmplY3QgcmVwcmVzZW50cyBhIGNvbXB1dGF0aW9uIHdob3NlIHJldHVybiB2YWx1ZQogKiBtaWdodCBub3QgeWV0IGJlIGF2YWlsYWJsZS4KICogVGhlIEZ1dHVyZSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgY29tcHV0YXRpb24KICogd2hlbiBpdCBjb21wbGV0ZXMgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuCiAqIEZ1dHVyZXMgYXJlIG9mdGVuIHVzZWQgZm9yIHBvdGVudGlhbGx5IGxlbmd0aHkgY29tcHV0YXRpb25zCiAqIHN1Y2ggYXMgSS9PIGFuZCBpbnRlcmFjdGlvbiB3aXRoIHVzZXJzLgogKgogKiBNYW55IG1ldGhvZHMgaW4gdGhlIERhcnQgbGlicmFyaWVzIHJldHVybiBGdXR1cmVzIHdoZW4KICogcGVyZm9ybWluZyB0YXNrcy4gRm9yIGV4YW1wbGUsIHdoZW4gYmluZGluZyBhbiBIdHRwU2VydmVyCiAqIHRvIGEgaG9zdCBhbmQgcG9ydCwgdGhlIGBiaW5kKClgIG1ldGhvZCByZXR1cm5zIGEgRnV0dXJlLgogKgogKiAgICAgIEh0dHBTZXJ2ZXIuYmluZCgnMTI3LjAuMC4xJywgNDQ0NCkKICogICAgICAgICAgLnRoZW4oKHNlcnZlcikgPT4gcHJpbnQoJyR7c2VydmVyLmlzQnJvYWRjYXN0fScpKQogKiAgICAgICAgICAuY2F0Y2hFcnJvcihwcmludCk7CiAqCiAqIFtGdXR1cmUudGhlbl0gcmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBydW5zCiAqIHdoZW4gdGhlIEZ1dHVyZSdzIG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHRoZSBgYmluZCgpYCBtZXRob2QsCiAqIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuCiAqIFRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgb3BlcmF0aW9uCiAqIGlzIHBhc3NlZCBpbnRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KICogSW4gdGhpcyBleGFtcGxlLCB0aGUgYGJpbmQoKWAgbWV0aG9kIHJldHVybnMgdGhlIEh0dHBTZXJ2ZXIKICogb2JqZWN0LiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gcHJpbnRzIG9uZSBvZiBpdHMgcHJvcGVydGllcy4KICogW0Z1dHVyZS5jYXRjaEVycm9yXSByZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0CiAqIHJ1bnMgaWYgYW4gZXJyb3Igb2NjdXJzIHdpdGhpbiB0aGUgRnV0dXJlLgogKgogKiAjIyBTdHJlYW0KICoKICogQSBTdHJlYW0gcHJvdmlkZXMgYW4gYXN5bmNocm9ub3VzIHNlcXVlbmNlIG9mIGRhdGEuCiAqIEV4YW1wbGVzIG9mIGRhdGEgc2VxdWVuY2VzIGluY2x1ZGUgaW5kaXZpZHVhbCBldmVudHMsIGxpa2UgbW91c2UgY2xpY2tzLAogKiBvciBzZXF1ZW50aWFsIGNodW5rcyBvZiBsYXJnZXIgZGF0YSwgbGlrZSBtdWx0aXBsZSBieXRlIGxpc3RzIHdpdGggdGhlCiAqIGNvbnRlbnRzIG9mIGEgZmlsZQogKiBzdWNoIGFzIG1vdXNlIGNsaWNrcywgYW5kIGEgc3RyZWFtIG9mIGJ5dGUgbGlzdHMgcmVhZCBmcm9tIGEgZmlsZS4KICogVGhlIGZvbGxvd2luZyBleGFtcGxlIG9wZW5zIGEgZmlsZSBmb3IgcmVhZGluZy4KICogW1N0cmVhbS5saXN0ZW5dIHJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgcnVucwogKiBlYWNoIHRpbWUgbW9yZSBkYXRhIGlzIGF2YWlsYWJsZS4KICoKICogICAgIFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSA9IG5ldyBGaWxlKCdxdW90ZXMudHh0Jykub3BlblJlYWQoKTsKICogICAgIHN0cmVhbS50cmFuc2Zvcm0odXRmOC5kZWNvZGVyKS5saXN0ZW4ocHJpbnQpOwogKgogKiBUaGUgc3RyZWFtIGVtaXRzIGEgc2VxdWVuY2Ugb2YgYSBsaXN0IG9mIGJ5dGVzLgogKiBUaGUgcHJvZ3JhbSBtdXN0IGludGVycHJldCB0aGUgYnl0ZXMgb3IgaGFuZGxlIHRoZSByYXcgYnl0ZSBkYXRhLgogKiBIZXJlLCB0aGUgY29kZSB1c2VzIGEgVVRGLTggZGVjb2RlciAocHJvdmlkZWQgaW4gdGhlIGBkYXJ0OmNvbnZlcnRgIGxpYnJhcnkpCiAqIHRvIGNvbnZlcnQgdGhlIHNlcXVlbmNlIG9mIGJ5dGVzIGludG8gYSBzZXF1ZW5jZQogKiBvZiBEYXJ0IHN0cmluZ3MuCiAqCiAqIEFub3RoZXIgY29tbW9uIHVzZSBvZiBzdHJlYW1zIGlzIGZvciB1c2VyLWdlbmVyYXRlZCBldmVudHMKICogaW4gYSB3ZWIgYXBwOiBUaGUgZm9sbG93aW5nIGNvZGUgbGlzdGVucyBmb3IgbW91c2UgY2xpY2tzIG9uIGEgYnV0dG9uLgogKgogKiAgICAgcXVlcnlTZWxlY3RvcignI215QnV0dG9uJykub25DbGljay5saXN0ZW4oKF8pID0+IHByaW50KCdDbGljay4nKSk7CiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiAqIFRoZSBbZGFydDphc3luYyBzZWN0aW9uIG9mIHRoZSBsaWJyYXJ5IHRvdXJdW2FzeW5jaHJvbm91cy1wcm9ncmFtbWluZ106CiAqICAgQSBicmllZiBvdmVydmlldyBvZiBhc3luY2hyb25vdXMgcHJvZ3JhbW1pbmcuCiAqCiAqICogW1VzZSBGdXR1cmUtQmFzZWQgQVBJc11bZnV0dXJlcy10dXRvcmlhbF06IEEgY2xvc2VyIGxvb2sgYXQgRnV0dXJlcyBhbmQKICogICBob3cgdG8gdXNlIHRoZW0gdG8gd3JpdGUgYXN5bmNocm9ub3VzIERhcnQgY29kZS4KICoKICogKiBbRnV0dXJlcyBhbmQgRXJyb3IgSGFuZGxpbmddW2Z1dHVyZXMtZXJyb3ItaGFuZGxpbmddOiBFdmVyeXRoaW5nIHlvdQogKiAgIHdhbnRlZCB0byBrbm93IGFib3V0IGhhbmRsaW5nIGVycm9ycyBhbmQgZXhjZXB0aW9ucyB3aGVuIHdvcmtpbmcgd2l0aAogKiAgIEZ1dHVyZXMgKGJ1dCB3ZXJlIGFmcmFpZCB0byBhc2spLgogKgogKiAqIFtUaGUgRXZlbnQgTG9vcCBhbmQgRGFydF0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2FydGljbGVzL2V2ZW50LWxvb3AvKToKICogICBMZWFybiBob3cgRGFydCBoYW5kbGVzIHRoZSBldmVudCBxdWV1ZSBhbmQgbWljcm90YXNrIHF1ZXVlLCBzbyB5b3UgY2FuCiAqICAgd3JpdGUgYmV0dGVyIGFzeW5jaHJvbm91cyBjb2RlIHdpdGggZmV3ZXIgc3VycHJpc2VzLgogKgogKiAqIFt0ZXN0IHBhY2thZ2U6IEFzeW5jaHJvbm91cyBUZXN0c11bdGVzdC1yZWFkbWVdOiBIb3cgdG8gdGVzdCBhc3luY2hyb25vdXMKICogICBjb2RlLgogKgogKiBbYXN5bmNocm9ub3VzLXByb2dyYW1taW5nXTogaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjZGFydGFzeW5jLS0tYXN5bmNocm9ub3VzLXByb2dyYW1taW5nCiAqIFtmdXR1cmVzLXR1dG9yaWFsXTogaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvdHV0b3JpYWxzL2Z1dHVyZXMvCiAqIFtmdXR1cmVzLWVycm9yLWhhbmRsaW5nXTogaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2FydGljbGVzL2Z1dHVyZXMtYW5kLWVycm9yLWhhbmRsaW5nLwogKiBbdGVzdC1yZWFkbWVdOiBodHRwczovL3B1Yi5kYXJ0bGFuZy5vcmcvcGFja2FnZXMvdGVzdAogKgogKiB7QGNhdGVnb3J5IENvcmV9CiAqLwpsaWJyYXJ5IGRhcnQuYXN5bmM7CgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiIgc2hvdyBIYXNoTWFwLCBJdGVyYWJsZUJhc2U7CmltcG9ydCAiZGFydDpfaW50ZXJuYWwiCiAgICBzaG93CiAgICAgICAgQ2FzdFN0cmVhbSwKICAgICAgICBDYXN0U3RyZWFtVHJhbnNmb3JtZXIsCiAgICAgICAgRW1wdHlJdGVyYXRvciwKICAgICAgICBJdGVyYWJsZUVsZW1lbnRFcnJvciwKICAgICAgICBwcmludFRvWm9uZSwKICAgICAgICBwcmludFRvQ29uc29sZSwKICAgICAgICBTaW5jZTsKCnBhcnQgJ2FzeW5jX2Vycm9yLmRhcnQnOwpwYXJ0ICdicm9hZGNhc3Rfc3RyZWFtX2NvbnRyb2xsZXIuZGFydCc7CnBhcnQgJ2RlZmVycmVkX2xvYWQuZGFydCc7CnBhcnQgJ2Z1dHVyZS5kYXJ0JzsKcGFydCAnZnV0dXJlX2ltcGwuZGFydCc7CnBhcnQgJ3NjaGVkdWxlX21pY3JvdGFzay5kYXJ0JzsKcGFydCAnc3RyZWFtLmRhcnQnOwpwYXJ0ICdzdHJlYW1fY29udHJvbGxlci5kYXJ0JzsKcGFydCAnc3RyZWFtX2ltcGwuZGFydCc7CnBhcnQgJ3N0cmVhbV9waXBlLmRhcnQnOwpwYXJ0ICdzdHJlYW1fdHJhbnNmb3JtZXJzLmRhcnQnOwpwYXJ0ICd0aW1lci5kYXJ0JzsKcGFydCAnem9uZS5kYXJ0JzsKeQBOTjwBBCkrAz8oAyUDHAMNAz8fMzE/KwM6PT0DKz4gAzlCGycpPz86LgMNAzdMShZGMzslA0U1AzNFUDQUAz5KA0oDFgNNMwNNNgNKSycDT0w6A08LA4CASFs5AxQEFAE1GAkUHxceFRgPARkpGxQZIBQfGRkhExIBCmRhcnQ6YXN5bmMyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL2Z1dHVyZV9pbXBsLmRhcnTAAG2FLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCi8qKiBUaGUgb25WYWx1ZSBhbmQgb25FcnJvciBoYW5kbGVycyByZXR1cm4gZWl0aGVyIGEgdmFsdWUgb3IgYSBmdXR1cmUgKi8KdHlwZWRlZiBGdXR1cmVPcjxUPiBfRnV0dXJlT25WYWx1ZTxTLCBUPihTIHZhbHVlKTsKLyoqIFRlc3QgdXNlZCBieSBbRnV0dXJlLmNhdGNoRXJyb3JdIHRvIGhhbmRsZSBza2lwIHNvbWUgZXJyb3JzLiAqLwp0eXBlZGVmIGJvb2wgX0Z1dHVyZUVycm9yVGVzdChPYmplY3QgZXJyb3IpOwovKiogVXNlZCBieSBbV2hlbkZ1dHVyZV0uICovCnR5cGVkZWYgZHluYW1pYyBfRnV0dXJlQWN0aW9uKCk7CgphYnN0cmFjdCBjbGFzcyBfQ29tcGxldGVyPFQ+IGltcGxlbWVudHMgQ29tcGxldGVyPFQ+IHsKICBmaW5hbCBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CgogIHZvaWQgY29tcGxldGUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSk7CgogIHZvaWQgY29tcGxldGVFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IoZXJyb3IpOwogICAgaWYgKCFmdXR1cmUuX21heUNvbXBsZXRlKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiRnV0dXJlIGFscmVhZHkgY29tcGxldGVkIik7CiAgICBBc3luY0Vycm9yIHJlcGxhY2VtZW50ID0gWm9uZS5jdXJyZW50LmVycm9yQ2FsbGJhY2soZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgICAgc3RhY2tUcmFjZSA9IHJlcGxhY2VtZW50LnN0YWNrVHJhY2U7CiAgICB9CiAgICBfY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIF9jb21wbGV0ZUVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKCiAgLy8gVGhlIGZ1dHVyZSdzIF9pc0NvbXBsZXRlIGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgcGVuZGluZyBjb21wbGV0aW9ucy4KICAvLyBXZSB0aGVyZWZvcmUgdXNlIF9tYXlDb21wbGV0ZS4KICBib29sIGdldCBpc0NvbXBsZXRlZCA9PiAhZnV0dXJlLl9tYXlDb21wbGV0ZTsKfQoKY2xhc3MgX0FzeW5jQ29tcGxldGVyPFQ+IGV4dGVuZHMgX0NvbXBsZXRlcjxUPiB7CiAgdm9pZCBjb21wbGV0ZShbRnV0dXJlT3I8VD4gdmFsdWVdKSB7CiAgICBpZiAoIWZ1dHVyZS5fbWF5Q29tcGxldGUpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKTsKICAgIGZ1dHVyZS5fYXN5bmNDb21wbGV0ZSh2YWx1ZSk7CiAgfQoKICB2b2lkIF9jb21wbGV0ZUVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBmdXR1cmUuX2FzeW5jQ29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQp9CgpjbGFzcyBfU3luY0NvbXBsZXRlcjxUPiBleHRlbmRzIF9Db21wbGV0ZXI8VD4gewogIHZvaWQgY29tcGxldGUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSkgewogICAgaWYgKCFmdXR1cmUuX21heUNvbXBsZXRlKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiRnV0dXJlIGFscmVhZHkgY29tcGxldGVkIik7CiAgICBmdXR1cmUuX2NvbXBsZXRlKHZhbHVlKTsKICB9CgogIHZvaWQgX2NvbXBsZXRlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGZ1dHVyZS5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQp9CgpjbGFzcyBfRnV0dXJlTGlzdGVuZXI8UywgVD4gewogIHN0YXRpYyBjb25zdCBpbnQgbWFza1ZhbHVlID0gMTsKICBzdGF0aWMgY29uc3QgaW50IG1hc2tFcnJvciA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBtYXNrVGVzdEVycm9yID0gNDsKICBzdGF0aWMgY29uc3QgaW50IG1hc2tXaGVuY29tcGxldGUgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgc3RhdGVDaGFpbiA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZVRoZW4gPSBtYXNrVmFsdWU7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZVRoZW5PbmVycm9yID0gbWFza1ZhbHVlIHwgbWFza0Vycm9yOwogIHN0YXRpYyBjb25zdCBpbnQgc3RhdGVDYXRjaGVycm9yID0gbWFza0Vycm9yOwogIHN0YXRpYyBjb25zdCBpbnQgc3RhdGVDYXRjaGVycm9yVGVzdCA9IG1hc2tFcnJvciB8IG1hc2tUZXN0RXJyb3I7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZVdoZW5jb21wbGV0ZSA9IG1hc2tXaGVuY29tcGxldGU7CiAgc3RhdGljIGNvbnN0IGludCBtYXNrVHlwZSA9CiAgICAgIG1hc2tWYWx1ZSB8IG1hc2tFcnJvciB8IG1hc2tUZXN0RXJyb3IgfCBtYXNrV2hlbmNvbXBsZXRlOwogIHN0YXRpYyBjb25zdCBpbnQgc3RhdGVJc0F3YWl0ID0gMTY7CiAgLy8gTGlzdGVuZXJzIG9uIHRoZSBzYW1lIGZ1dHVyZSBhcmUgbGlua2VkIHRocm91Z2ggdGhpcyBsaW5rLgogIF9GdXR1cmVMaXN0ZW5lciBfbmV4dExpc3RlbmVyOwogIC8vIFRoZSBmdXR1cmUgdG8gY29tcGxldGUgd2hlbiB0aGlzIGxpc3RlbmVyIGlzIGFjdGl2YXRlZC4KICBmaW5hbCBfRnV0dXJlPFQ+IHJlc3VsdDsKICAvLyBXaGljaCBmaWVsZHMgbWVhbnMgd2hhdC4KICBmaW5hbCBpbnQgc3RhdGU7CiAgLy8gVXNlZCBmb3IgdGhlbi93aGVuRG9uZSBjYWxsYmFjayBhbmQgZXJyb3IgdGVzdAogIGZpbmFsIEZ1bmN0aW9uIGNhbGxiYWNrOwogIC8vIFVzZWQgZm9yIGVycm9yIGNhbGxiYWNrcy4KICBmaW5hbCBGdW5jdGlvbiBlcnJvckNhbGxiYWNrOwoKICBfRnV0dXJlTGlzdGVuZXIudGhlbigKICAgICAgdGhpcy5yZXN1bHQsIF9GdXR1cmVPblZhbHVlPFMsIFQ+IG9uVmFsdWUsIEZ1bmN0aW9uIGVycm9yQ2FsbGJhY2spCiAgICAgIDogY2FsbGJhY2sgPSBvblZhbHVlLAogICAgICAgIGVycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrLAogICAgICAgIHN0YXRlID0gKGVycm9yQ2FsbGJhY2sgPT0gbnVsbCkgPyBzdGF0ZVRoZW4gOiBzdGF0ZVRoZW5PbmVycm9yOwoKICBfRnV0dXJlTGlzdGVuZXIudGhlbkF3YWl0KAogICAgICB0aGlzLnJlc3VsdCwgX0Z1dHVyZU9uVmFsdWU8UywgVD4gb25WYWx1ZSwgRnVuY3Rpb24gZXJyb3JDYWxsYmFjaykKICAgICAgOiBjYWxsYmFjayA9IG9uVmFsdWUsCiAgICAgICAgZXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2ssCiAgICAgICAgc3RhdGUgPSAoKGVycm9yQ2FsbGJhY2sgPT0gbnVsbCkgPyBzdGF0ZVRoZW4gOiBzdGF0ZVRoZW5PbmVycm9yKQogICAgICAgICAgICAgIHwgc3RhdGVJc0F3YWl0IDsKCiAgX0Z1dHVyZUxpc3RlbmVyLmNhdGNoRXJyb3IodGhpcy5yZXN1bHQsIHRoaXMuZXJyb3JDYWxsYmFjaywgdGhpcy5jYWxsYmFjaykKICAgICAgOiBzdGF0ZSA9IChjYWxsYmFjayA9PSBudWxsKSA/IHN0YXRlQ2F0Y2hlcnJvciA6IHN0YXRlQ2F0Y2hlcnJvclRlc3Q7CgogIF9GdXR1cmVMaXN0ZW5lci53aGVuQ29tcGxldGUodGhpcy5yZXN1bHQsIHRoaXMuY2FsbGJhY2spCiAgICAgIDogZXJyb3JDYWxsYmFjayA9IG51bGwsCiAgICAgICAgc3RhdGUgPSBzdGF0ZVdoZW5jb21wbGV0ZTsKCiAgWm9uZSBnZXQgX3pvbmUgPT4gcmVzdWx0Ll96b25lOwoKICBib29sIGdldCBoYW5kbGVzVmFsdWUgPT4gKHN0YXRlICYgbWFza1ZhbHVlICE9IDApOwogIGJvb2wgZ2V0IGhhbmRsZXNFcnJvciA9PiAoc3RhdGUgJiBtYXNrRXJyb3IgIT0gMCk7CiAgYm9vbCBnZXQgaGFzRXJyb3JUZXN0ID0+IChzdGF0ZSAmIG1hc2tUeXBlID09IHN0YXRlQ2F0Y2hlcnJvclRlc3QpOwogIGJvb2wgZ2V0IGhhbmRsZXNDb21wbGV0ZSA9PiAoc3RhdGUgJiBtYXNrVHlwZSA9PSBzdGF0ZVdoZW5jb21wbGV0ZSk7CiAgYm9vbCBnZXQgaXNBd2FpdCA9PiAoc3RhdGUgJiBzdGF0ZUlzQXdhaXQgIT0gMCk7CgogIF9GdXR1cmVPblZhbHVlPFMsIFQ+IGdldCBfb25WYWx1ZSB7CiAgICBhc3NlcnQoaGFuZGxlc1ZhbHVlKTsKICAgIHJldHVybiBjYWxsYmFjazsKICB9CgogIEZ1bmN0aW9uIGdldCBfb25FcnJvciA9PiBlcnJvckNhbGxiYWNrOwogIF9GdXR1cmVFcnJvclRlc3QgZ2V0IF9lcnJvclRlc3QgewogICAgYXNzZXJ0KGhhc0Vycm9yVGVzdCk7CiAgICByZXR1cm4gY2FsbGJhY2s7CiAgfQoKICBfRnV0dXJlQWN0aW9uIGdldCBfd2hlbkNvbXBsZXRlQWN0aW9uIHsKICAgIGFzc2VydChoYW5kbGVzQ29tcGxldGUpOwogICAgcmV0dXJuIGNhbGxiYWNrOwogIH0KCiAgLy8vIFdoZXRoZXIgdGhpcyBsaXN0ZW5lciBoYXMgYW4gZXJyb3IgY2FsbGJhY2suCiAgLy8vCiAgLy8vIFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgbGlzdGVuZXIgW2hhbmRsZXNFcnJvcl0uCiAgYm9vbCBnZXQgaGFzRXJyb3JDYWxsYmFjayB7CiAgICBhc3NlcnQoaGFuZGxlc0Vycm9yKTsKICAgIHJldHVybiBfb25FcnJvciAhPSBudWxsOwogIH0KCiAgRnV0dXJlT3I8VD4gaGFuZGxlVmFsdWUoUyBzb3VyY2VSZXN1bHQpIHsKICAgIHJldHVybiBfem9uZS5ydW5VbmFyeTxGdXR1cmVPcjxUPiwgUz4oX29uVmFsdWUsIHNvdXJjZVJlc3VsdCk7CiAgfQoKICBib29sIG1hdGNoZXNFcnJvclRlc3QoQXN5bmNFcnJvciBhc3luY0Vycm9yKSB7CiAgICBpZiAoIWhhc0Vycm9yVGVzdCkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gX3pvbmUucnVuVW5hcnk8Ym9vbCwgT2JqZWN0PihfZXJyb3JUZXN0LCBhc3luY0Vycm9yLmVycm9yKTsKICB9CgogIEZ1dHVyZU9yPFQ+IGhhbmRsZUVycm9yKEFzeW5jRXJyb3IgYXN5bmNFcnJvcikgewogICAgYXNzZXJ0KGhhbmRsZXNFcnJvciAmJiBoYXNFcnJvckNhbGxiYWNrKTsKICAgIHZhciBlcnJvckNhbGxiYWNrID0gdGhpcy5lcnJvckNhbGxiYWNrOyAvLyBUbyBlbmFibGUgcHJvbW90aW9uLgogICAgLy8gSWYgdGhlIGVycm9yQ2FsbGJhY2sgcmV0dXJucyBzb21ldGhpbmcgd2hpY2ggaXMgbm90IGEgRnV0dXJlT3I8VD4sCiAgICAvLyB0aGlzIHJldHVybiBzdGF0ZW1lbnQgdGhyb3dzLCBhbmQgdGhlIGNhbGxlciBoYW5kbGVzIHRoZSBlcnJvci4KICAgIGlmIChlcnJvckNhbGxiYWNrIGlzIGR5bmFtaWMgRnVuY3Rpb24oT2JqZWN0LCBTdGFja1RyYWNlKSkgewogICAgICByZXR1cm4gX3pvbmUucnVuQmluYXJ5PGR5bmFtaWMsIE9iamVjdCwgU3RhY2tUcmFjZT4oCiAgICAgICAgICBlcnJvckNhbGxiYWNrLCBhc3luY0Vycm9yLmVycm9yLCBhc3luY0Vycm9yLnN0YWNrVHJhY2UpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGVycm9yQ2FsbGJhY2sgaXMgZHluYW1pYyBGdW5jdGlvbihPYmplY3QpKTsKICAgICAgcmV0dXJuIF96b25lLnJ1blVuYXJ5PGR5bmFtaWMsIE9iamVjdD4oZXJyb3JDYWxsYmFjaywgYXN5bmNFcnJvci5lcnJvcik7CiAgICB9CiAgfQoKICBkeW5hbWljIGhhbmRsZVdoZW5Db21wbGV0ZSgpIHsKICAgIGFzc2VydCghaGFuZGxlc0Vycm9yKTsKICAgIHJldHVybiBfem9uZS5ydW4oX3doZW5Db21wbGV0ZUFjdGlvbik7CiAgfQp9CgpjbGFzcyBfRnV0dXJlPFQ+IGltcGxlbWVudHMgRnV0dXJlPFQ+IHsKICAvLy8gSW5pdGlhbCBzdGF0ZSwgd2FpdGluZyBmb3IgYSByZXN1bHQuIEluIHRoaXMgc3RhdGUsIHRoZQogIC8vLyBbcmVzdWx0T3JMaXN0ZW5lcnNdIGZpZWxkIGhvbGRzIGEgc2luZ2xlLWxpbmtlZCBsaXN0IG9mCiAgLy8vIFtfRnV0dXJlTGlzdGVuZXJdIGxpc3RlbmVycy4KICBzdGF0aWMgY29uc3QgaW50IF9zdGF0ZUluY29tcGxldGUgPSAwOwoKICAvLy8gUGVuZGluZyBjb21wbGV0aW9uLiBTZXQgd2hlbiBjb21wbGV0ZWQgdXNpbmcgW19hc3luY0NvbXBsZXRlXSBvcgogIC8vLyBbX2FzeW5jQ29tcGxldGVFcnJvcl0uIEl0IGlzIGFuIGVycm9yIHRvIHRyeSB0byBjb21wbGV0ZSBpdCBhZ2Fpbi4KICAvLy8gW3Jlc3VsdE9yTGlzdGVuZXJzXSBob2xkcyBsaXN0ZW5lcnMuCiAgc3RhdGljIGNvbnN0IGludCBfc3RhdGVQZW5kaW5nQ29tcGxldGUgPSAxOwoKICAvLy8gVGhlIGZ1dHVyZSBoYXMgYmVlbiBjaGFpbmVkIHRvIGFub3RoZXIgZnV0dXJlLiBUaGUgcmVzdWx0IG9mIHRoYXQKICAvLy8gb3RoZXIgZnV0dXJlIGJlY29tZXMgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1dHVyZSBhcyB3ZWxsLgogIC8vLyBbcmVzdWx0T3JMaXN0ZW5lcnNdIGNvbnRhaW5zIHRoZSBzb3VyY2UgZnV0dXJlLgogIHN0YXRpYyBjb25zdCBpbnQgX3N0YXRlQ2hhaW5lZCA9IDI7CgogIC8vLyBUaGUgZnV0dXJlIGhhcyBiZWVuIGNvbXBsZXRlZCB3aXRoIGEgdmFsdWUgcmVzdWx0LgogIHN0YXRpYyBjb25zdCBpbnQgX3N0YXRlVmFsdWUgPSA0OwoKICAvLy8gVGhlIGZ1dHVyZSBoYXMgYmVlbiBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciByZXN1bHQuCiAgc3RhdGljIGNvbnN0IGludCBfc3RhdGVFcnJvciA9IDg7CgogIC8qKiBXaGV0aGVyIHRoZSBmdXR1cmUgaXMgY29tcGxldGUsIGFuZCBhcyB3aGF0LiAqLwogIGludCBfc3RhdGUgPSBfc3RhdGVJbmNvbXBsZXRlOwoKICAvKioKICAgKiBab25lIHRoYXQgdGhlIGZ1dHVyZSB3YXMgY29tcGxldGVkIGZyb20uCiAgICogVGhpcyBpcyB0aGUgem9uZSB0aGF0IGFuIGVycm9yIHJlc3VsdCBiZWxvbmdzIHRvLgogICAqCiAgICogVW50aWwgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQsIHRoZSBmaWVsZCBtYXkgaG9sZCB0aGUgem9uZSB0aGF0CiAgICogbGlzdGVuZXIgY2FsbGJhY2tzIHVzZWQgdG8gY3JlYXRlIHRoaXMgZnV0dXJlIHNob3VsZCBiZSBydW4gaW4uCiAgICovCiAgZmluYWwgWm9uZSBfem9uZTsKCiAgLyoqCiAgICogRWl0aGVyIHRoZSByZXN1bHQsIGEgbGlzdCBvZiBsaXN0ZW5lcnMgb3IgYW5vdGhlciBmdXR1cmUuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIHRoZSBmdXR1cmUgaXMgZWl0aGVyIGEgdmFsdWUgb3IgYW4gZXJyb3IuCiAgICogQSByZXN1bHQgaXMgb25seSBzdG9yZWQgd2hlbiB0aGUgZnV0dXJlIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBUaGUgbGlzdGVuZXJzIGlzIGFuIGludGVybmFsbHkgbGlua2VkIGxpc3Qgb2YgW19GdXR1cmVMaXN0ZW5lcl1zLgogICAqIExpc3RlbmVycyBhcmUgb25seSByZW1lbWJlcmVkIHdoaWxlIHRoZSBmdXR1cmUgaXMgbm90IHlldCBjb21wbGV0ZSwKICAgKiBhbmQgaXQgaXMgbm90IGNoYWluZWQgdG8gYW5vdGhlciBmdXR1cmUuCiAgICoKICAgKiBUaGUgZnV0dXJlIGlzIGFub3RoZXIgZnV0dXJlIHRoYXQgaGlzIGZ1dHVyZSBpcyBjaGFpbmVkIHRvLiBUaGlzIGZ1dHVyZQogICAqIGlzIHdhaXRpbmcgZm9yIHRoZSBvdGhlciBmdXR1cmUgdG8gY29tcGxldGUsIGFuZCB3aGVuIGl0IGRvZXMsIHRoaXMgZnV0dXJlCiAgICogd2lsbCBjb21wbGV0ZSB3aXRoIHRoZSBzYW1lIHJlc3VsdC4KICAgKiBBbGwgbGlzdGVuZXJzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIG90aGVyIGZ1dHVyZS4KICAgKi8KICB2YXIgX3Jlc3VsdE9yTGlzdGVuZXJzOwoKICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgYnkgYXN5bmMvYXdhaXQuCiAgX0Z1dHVyZSgpIDogX3pvbmUgPSBab25lLmN1cnJlbnQ7CgogIF9GdXR1cmUuaW1tZWRpYXRlKEZ1dHVyZU9yPFQ+IHJlc3VsdCkgOiBfem9uZSA9IFpvbmUuY3VycmVudCB7CiAgICBfYXN5bmNDb21wbGV0ZShyZXN1bHQpOwogIH0KCiAgLyoqIENyZWF0ZXMgYSBmdXR1cmUgd2l0aCB0aGUgdmFsdWUgYW5kIHRoZSBzcGVjaWZpZWQgem9uZS4gKi8KICBfRnV0dXJlLnpvbmVWYWx1ZShUIHZhbHVlLCB0aGlzLl96b25lKSB7CiAgICBfc2V0VmFsdWUodmFsdWUpOwogIH0KCiAgX0Z1dHVyZS5pbW1lZGlhdGVFcnJvcih2YXIgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKQogICAgICA6IF96b25lID0gWm9uZS5jdXJyZW50IHsKICAgIF9hc3luY0NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgLyoqIENyZWF0ZXMgYSBmdXR1cmUgdGhhdCBpcyBhbHJlYWR5IGNvbXBsZXRlZCB3aXRoIHRoZSB2YWx1ZS4gKi8KICBfRnV0dXJlLnZhbHVlKFQgdmFsdWUpIDogdGhpcy56b25lVmFsdWUodmFsdWUsIFpvbmUuY3VycmVudCk7CgogIGJvb2wgZ2V0IF9tYXlDb21wbGV0ZSA9PiBfc3RhdGUgPT0gX3N0YXRlSW5jb21wbGV0ZTsKICBib29sIGdldCBfaXNQZW5kaW5nQ29tcGxldGUgPT4gX3N0YXRlID09IF9zdGF0ZVBlbmRpbmdDb21wbGV0ZTsKICBib29sIGdldCBfbWF5QWRkTGlzdGVuZXIgPT4gX3N0YXRlIDw9IF9zdGF0ZVBlbmRpbmdDb21wbGV0ZTsKICBib29sIGdldCBfaXNDaGFpbmVkID0+IF9zdGF0ZSA9PSBfc3RhdGVDaGFpbmVkOwogIGJvb2wgZ2V0IF9pc0NvbXBsZXRlID0+IF9zdGF0ZSA+PSBfc3RhdGVWYWx1ZTsKICBib29sIGdldCBfaGFzRXJyb3IgPT4gX3N0YXRlID09IF9zdGF0ZUVycm9yOwoKICBzdGF0aWMgTGlzdDxGdW5jdGlvbj4gX2NvbnRpbnVhdGlvbkZ1bmN0aW9ucyhfRnV0dXJlPE9iamVjdD4gZnV0dXJlKSB7CiAgICBMaXN0PEZ1bmN0aW9uPiByZXN1bHQgPSBudWxsOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKGZ1dHVyZS5fbWF5QWRkTGlzdGVuZXIpIHJldHVybiByZXN1bHQ7CiAgICAgIGFzc2VydCghZnV0dXJlLl9pc0NvbXBsZXRlKTsKICAgICAgYXNzZXJ0KCFmdXR1cmUuX2lzQ2hhaW5lZCk7CiAgICAgIC8vIFNvIF9yZXN1bHRPckxpc3RlbmVycyBjb250YWlucyBsaXN0ZW5lcnMuCiAgICAgIF9GdXR1cmVMaXN0ZW5lcjxPYmplY3QsIE9iamVjdD4gbGlzdGVuZXIgPSBmdXR1cmUuX3Jlc3VsdE9yTGlzdGVuZXJzOwogICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCAmJgogICAgICAgICAgbGlzdGVuZXIuX25leHRMaXN0ZW5lciA9PSBudWxsICYmCiAgICAgICAgICBsaXN0ZW5lci5pc0F3YWl0KSB7CiAgICAgICAgKHJlc3VsdCA/Pz0gPEZ1bmN0aW9uPltdKS5hZGQobGlzdGVuZXIuaGFuZGxlVmFsdWUpOwogICAgICAgIGZ1dHVyZSA9IGxpc3RlbmVyLnJlc3VsdDsKICAgICAgICBhc3NlcnQoIWZ1dHVyZS5faXNDb21wbGV0ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9zZXRDaGFpbmVkKF9GdXR1cmUgc291cmNlKSB7CiAgICBhc3NlcnQoX21heUFkZExpc3RlbmVyKTsKICAgIF9zdGF0ZSA9IF9zdGF0ZUNoYWluZWQ7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBzb3VyY2U7CiAgfQoKICBGdXR1cmU8Uj4gdGhlbjxSPihGdXR1cmVPcjxSPiBmKFQgdmFsdWUpLCB7RnVuY3Rpb24gb25FcnJvcn0pIHsKICAgIFpvbmUgY3VycmVudFpvbmUgPSBab25lLmN1cnJlbnQ7CiAgICBpZiAoIWlkZW50aWNhbChjdXJyZW50Wm9uZSwgX3Jvb3Rab25lKSkgewogICAgICBmID0gY3VycmVudFpvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPEZ1dHVyZU9yPFI+LCBUPihmKTsKICAgICAgaWYgKG9uRXJyb3IgIT0gbnVsbCkgewogICAgICAgIC8vIEluIGNoZWNrZWQgbW9kZSwgdGhpcyBjaGVja3MgdGhhdCBvbkVycm9yIGlzIGFzc2lnbmFibGUgdG8gb25lIG9mOgogICAgICAgIC8vICAgZHluYW1pYyBGdW5jdGlvbihPYmplY3QpCiAgICAgICAgLy8gICBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkKICAgICAgICBvbkVycm9yID0gX3JlZ2lzdGVyRXJyb3JIYW5kbGVyKG9uRXJyb3IsIGN1cnJlbnRab25lKTsKICAgICAgfQogICAgfQogICAgX0Z1dHVyZTxSPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxSPigpOwogICAgX2FkZExpc3RlbmVyKG5ldyBfRnV0dXJlTGlzdGVuZXI8VCwgUj4udGhlbihyZXN1bHQsIGYsIG9uRXJyb3IpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIGEgc3lzdGVtIGNyZWF0ZWQgcmVzdWx0IGFuZCBlcnJvciBjb250aW51YXRpb24uCiAgLy8vCiAgLy8vIFVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhd2FpdGAgdG8gbGlzdGVuIHRvIGEgZnV0dXJlLgogIC8vLyBUaGUgc3lzdGVtIGNyZWF0ZWQgbGlzZW5lcnMgYXJlIG5vdCByZWdpc3RlcmVkIGluIHRoZSB6b25lLAogIC8vLyBhbmQgdGhlIGxpc3RlbmVyIGlzIG1hcmtlZCBhcyBiZWluZyBmcm9tIGFuIGBhd2FpdGAuCiAgLy8vIFRoaXMgbWFya2VyIGlzIHVzZWQgaW4gW19jb250aW51YXRpb25GdW5jdGlvbnNdLgogIEZ1dHVyZTxFPiBfdGhlbkF3YWl0PEU+KAogICAgICBGdXR1cmVPcjxFPiBmKFQgdmFsdWUpLCBGdW5jdGlvbiBvbkVycm9yKSB7CiAgICBfRnV0dXJlPEU+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPEU+KCk7CiAgICBfYWRkTGlzdGVuZXIobmV3IF9GdXR1cmVMaXN0ZW5lcjxULCBFPi50aGVuQXdhaXQocmVzdWx0LCBmLCBvbkVycm9yKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFQ+IGNhdGNoRXJyb3IoRnVuY3Rpb24gb25FcnJvciwge2Jvb2wgdGVzdChlcnJvcil9KSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBpZiAoIWlkZW50aWNhbChyZXN1bHQuX3pvbmUsIF9yb290Wm9uZSkpIHsKICAgICAgb25FcnJvciA9IF9yZWdpc3RlckVycm9ySGFuZGxlcihvbkVycm9yLCByZXN1bHQuX3pvbmUpOwogICAgICBpZiAodGVzdCAhPSBudWxsKSB0ZXN0ID0gcmVzdWx0Ll96b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjayh0ZXN0KTsKICAgIH0KICAgIF9hZGRMaXN0ZW5lcihuZXcgX0Z1dHVyZUxpc3RlbmVyPFQsIFQ+LmNhdGNoRXJyb3IocmVzdWx0LCBvbkVycm9yLCB0ZXN0KSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFQ+IHdoZW5Db21wbGV0ZShkeW5hbWljIGFjdGlvbigpKSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBpZiAoIWlkZW50aWNhbChyZXN1bHQuX3pvbmUsIF9yb290Wm9uZSkpIHsKICAgICAgYWN0aW9uID0gcmVzdWx0Ll96b25lLnJlZ2lzdGVyQ2FsbGJhY2s8ZHluYW1pYz4oYWN0aW9uKTsKICAgIH0KICAgIF9hZGRMaXN0ZW5lcihuZXcgX0Z1dHVyZUxpc3RlbmVyPFQsIFQ+LndoZW5Db21wbGV0ZShyZXN1bHQsIGFjdGlvbikpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmVhbTxUPiBhc1N0cmVhbSgpID0+IG5ldyBTdHJlYW08VD4uZnJvbUZ1dHVyZSh0aGlzKTsKCiAgdm9pZCBfc2V0UGVuZGluZ0NvbXBsZXRlKCkgewogICAgYXNzZXJ0KF9tYXlDb21wbGV0ZSk7CiAgICBfc3RhdGUgPSBfc3RhdGVQZW5kaW5nQ29tcGxldGU7CiAgfQoKICB2b2lkIF9jbGVhclBlbmRpbmdDb21wbGV0ZSgpIHsKICAgIGFzc2VydChfaXNQZW5kaW5nQ29tcGxldGUpOwogICAgX3N0YXRlID0gX3N0YXRlSW5jb21wbGV0ZTsKICB9CgogIEFzeW5jRXJyb3IgZ2V0IF9lcnJvciB7CiAgICBhc3NlcnQoX2hhc0Vycm9yKTsKICAgIHJldHVybiBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgfQoKICBfRnV0dXJlIGdldCBfY2hhaW5Tb3VyY2UgewogICAgYXNzZXJ0KF9pc0NoYWluZWQpOwogICAgcmV0dXJuIF9yZXN1bHRPckxpc3RlbmVyczsKICB9CgogIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgYXN5bmMvYXdhaXQuCiAgdm9pZCBfc2V0VmFsdWUoVCB2YWx1ZSkgewogICAgYXNzZXJ0KCFfaXNDb21wbGV0ZSk7IC8vIEJ1dCBtYXkgaGF2ZSBhIGNvbXBsZXRpb24gcGVuZGluZy4KICAgIF9zdGF0ZSA9IF9zdGF0ZVZhbHVlOwogICAgX3Jlc3VsdE9yTGlzdGVuZXJzID0gdmFsdWU7CiAgfQoKICB2b2lkIF9zZXRFcnJvck9iamVjdChBc3luY0Vycm9yIGVycm9yKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsgLy8gQnV0IG1heSBoYXZlIGEgY29tcGxldGlvbiBwZW5kaW5nLgogICAgX3N0YXRlID0gX3N0YXRlRXJyb3I7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBlcnJvcjsKICB9CgogIHZvaWQgX3NldEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc2V0RXJyb3JPYmplY3QobmV3IEFzeW5jRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpKTsKICB9CgogIC8vLyBDb3B5IHRoZSBjb21wbGV0aW9uIHJlc3VsdCBvZiBbc291cmNlXSBpbnRvIHRoaXMgZnV0dXJlLgogIC8vLwogIC8vLyBVc2VkIHdoZW4gYSBjaGFpbmVkIGZ1dHVyZSBub3RpY2VzIHRoYXQgaXRzIHNvdXJjZSBpcyBjb21wbGV0ZWQuCiAgdm9pZCBfY2xvbmVSZXN1bHQoX0Z1dHVyZSBzb3VyY2UpIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwogICAgYXNzZXJ0KHNvdXJjZS5faXNDb21wbGV0ZSk7CiAgICBfc3RhdGUgPSBzb3VyY2UuX3N0YXRlOwogICAgX3Jlc3VsdE9yTGlzdGVuZXJzID0gc291cmNlLl9yZXN1bHRPckxpc3RlbmVyczsKICB9CgogIHZvaWQgX2FkZExpc3RlbmVyKF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcikgewogICAgYXNzZXJ0KGxpc3RlbmVyLl9uZXh0TGlzdGVuZXIgPT0gbnVsbCk7CiAgICBpZiAoX21heUFkZExpc3RlbmVyKSB7CiAgICAgIGxpc3RlbmVyLl9uZXh0TGlzdGVuZXIgPSBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIF9yZXN1bHRPckxpc3RlbmVycyA9IGxpc3RlbmVyOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9pc0NoYWluZWQpIHsKICAgICAgICAvLyBEZWxlZ2F0ZSBsaXN0ZW5lcnMgdG8gY2hhaW5lZCBzb3VyY2UgZnV0dXJlLgogICAgICAgIC8vIElmIHRoZSBzb3VyY2UgaXMgY29tcGxldGUsIGluc3RlYWQgY29weSBpdHMgdmFsdWVzIGFuZAogICAgICAgIC8vIGRyb3AgdGhlIGNoYWluaW5nLgogICAgICAgIF9GdXR1cmUgc291cmNlID0gX2NoYWluU291cmNlOwogICAgICAgIGlmICghc291cmNlLl9pc0NvbXBsZXRlKSB7CiAgICAgICAgICBzb3VyY2UuX2FkZExpc3RlbmVyKGxpc3RlbmVyKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX2Nsb25lUmVzdWx0KHNvdXJjZSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KF9pc0NvbXBsZXRlKTsKICAgICAgLy8gSGFuZGxlIGxhdGUgbGlzdGVuZXJzIGFzeW5jaHJvbm91c2x5LgogICAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHRoaXMsIGxpc3RlbmVyKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIF9wcmVwZW5kTGlzdGVuZXJzKF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMpIHsKICAgIGlmIChsaXN0ZW5lcnMgPT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKF9tYXlBZGRMaXN0ZW5lcikgewogICAgICBfRnV0dXJlTGlzdGVuZXIgZXhpc3RpbmdMaXN0ZW5lcnMgPSBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIF9yZXN1bHRPckxpc3RlbmVycyA9IGxpc3RlbmVyczsKICAgICAgaWYgKGV4aXN0aW5nTGlzdGVuZXJzICE9IG51bGwpIHsKICAgICAgICBfRnV0dXJlTGlzdGVuZXIgY3Vyc29yID0gbGlzdGVuZXJzOwogICAgICAgIHdoaWxlIChjdXJzb3IuX25leHRMaXN0ZW5lciAhPSBudWxsKSB7CiAgICAgICAgICBjdXJzb3IgPSBjdXJzb3IuX25leHRMaXN0ZW5lcjsKICAgICAgICB9CiAgICAgICAgY3Vyc29yLl9uZXh0TGlzdGVuZXIgPSBleGlzdGluZ0xpc3RlbmVyczsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKF9pc0NoYWluZWQpIHsKICAgICAgICAvLyBEZWxlZ2F0ZSBsaXN0ZW5lcnMgdG8gY2hhaW5lZCBzb3VyY2UgZnV0dXJlLgogICAgICAgIC8vIElmIHRoZSBzb3VyY2UgaXMgY29tcGxldGUsIGluc3RlYWQgY29weSBpdHMgdmFsdWVzIGFuZAogICAgICAgIC8vIGRyb3AgdGhlIGNoYWluaW5nLgogICAgICAgIF9GdXR1cmUgc291cmNlID0gX2NoYWluU291cmNlOwogICAgICAgIGlmICghc291cmNlLl9pc0NvbXBsZXRlKSB7CiAgICAgICAgICBzb3VyY2UuX3ByZXBlbmRMaXN0ZW5lcnMobGlzdGVuZXJzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX2Nsb25lUmVzdWx0KHNvdXJjZSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KF9pc0NvbXBsZXRlKTsKICAgICAgbGlzdGVuZXJzID0gX3JldmVyc2VMaXN0ZW5lcnMobGlzdGVuZXJzKTsKICAgICAgX3pvbmUuc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0aGlzLCBsaXN0ZW5lcnMpOwogICAgICB9KTsKICAgIH0KICB9CgogIF9GdXR1cmVMaXN0ZW5lciBfcmVtb3ZlTGlzdGVuZXJzKCkgewogICAgLy8gUmV2ZXJzZSBsaXN0ZW5lcnMgYmVmb3JlIHJldHVybmluZyB0aGVtLCBzbyB0aGUgcmVzdWx0aW5nIGxpc3QgaXMgaW4KICAgIC8vIHN1YnNjcmlwdGlvbiBvcmRlci4KICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwogICAgX0Z1dHVyZUxpc3RlbmVyIGN1cnJlbnQgPSBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBudWxsOwogICAgcmV0dXJuIF9yZXZlcnNlTGlzdGVuZXJzKGN1cnJlbnQpOwogIH0KCiAgX0Z1dHVyZUxpc3RlbmVyIF9yZXZlcnNlTGlzdGVuZXJzKF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMpIHsKICAgIF9GdXR1cmVMaXN0ZW5lciBwcmV2OwogICAgX0Z1dHVyZUxpc3RlbmVyIGN1cnJlbnQgPSBsaXN0ZW5lcnM7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIF9GdXR1cmVMaXN0ZW5lciBuZXh0ID0gY3VycmVudC5fbmV4dExpc3RlbmVyOwogICAgICBjdXJyZW50Ll9uZXh0TGlzdGVuZXIgPSBwcmV2OwogICAgICBwcmV2ID0gY3VycmVudDsKICAgICAgY3VycmVudCA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gcHJldjsKICB9CgogIC8vIFRha2UgdGhlIHZhbHVlICh3aGVuIGNvbXBsZXRlZCkgb2Ygc291cmNlIGFuZCBjb21wbGV0ZSB0YXJnZXQgd2l0aCB0aGF0CiAgLy8gdmFsdWUgKG9yIGVycm9yKS4gVGhpcyBmdW5jdGlvbiBjb3VsZCBjaGFpbiBhbGwgRnV0dXJlcywgYnV0IGlzIHNsb3dlcgogIC8vIGZvciBfRnV0dXJlIHRoYW4gX2NoYWluQ29yZUZ1dHVyZSwgc28geW91IG11c3QgdXNlIF9jaGFpbkNvcmVGdXR1cmUKICAvLyBpbiB0aGF0IGNhc2UuCiAgc3RhdGljIHZvaWQgX2NoYWluRm9yZWlnbkZ1dHVyZShGdXR1cmUgc291cmNlLCBfRnV0dXJlIHRhcmdldCkgewogICAgYXNzZXJ0KCF0YXJnZXQuX2lzQ29tcGxldGUpOwogICAgYXNzZXJ0KHNvdXJjZSBpcyEgX0Z1dHVyZSk7CgogICAgLy8gTWFyayB0aGUgdGFyZ2V0IGFzIGNoYWluZWQgKGFuZCBhcyBzdWNoIGhhbGYtY29tcGxldGVkKS4KICAgIHRhcmdldC5fc2V0UGVuZGluZ0NvbXBsZXRlKCk7CiAgICB0cnkgewogICAgICBzb3VyY2UudGhlbigodmFsdWUpIHsKICAgICAgICBhc3NlcnQodGFyZ2V0Ll9pc1BlbmRpbmdDb21wbGV0ZSk7CiAgICAgICAgLy8gVGhlICJ2YWx1ZSIgbWF5IGJlIGFub3RoZXIgZnV0dXJlIGlmIHRoZSBmb3JlaWduIGZ1dHVyZQogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGlzIG1pcy1iZWhhdmluZywKICAgICAgICAvLyBzbyB1c2UgX2NvbXBsZXRlIGluc3RlYWQgb2YgX2NvbXBsZXRlV2l0aFZhbHVlLgogICAgICAgIHRhcmdldC5fY2xlYXJQZW5kaW5nQ29tcGxldGUoKTsgLy8gQ2xlYXIgdGhpcyBmaXJzdCwgaXQncyBzZXQgYWdhaW4uCiAgICAgICAgdGFyZ2V0Ll9jb21wbGV0ZSh2YWx1ZSk7CiAgICAgIH0sCiAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZXZlbnR1YWxseSB3ZSB3b3VsZCBsaWtlIHRvIG1ha2UgdGhpcyBub24tb3B0aW9uYWwKICAgICAgICAgIC8vIGFuZCBkZXBlbmRlbnQgb24gdGhlIGxpc3RlbmVycyBvZiB0aGUgdGFyZ2V0IGZ1dHVyZS4gSWYgbm9uZSBvZgogICAgICAgICAgLy8gdGhlIHRhcmdldCBmdXR1cmUncyBsaXN0ZW5lcnMgd2FudCB0byBoYXZlIHRoZSBzdGFjayB0cmFjZSB3ZSBkb24ndAogICAgICAgICAgLy8gbmVlZCBhIHRyYWNlLgogICAgICAgICAgb25FcnJvcjogKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgICAgIGFzc2VydCh0YXJnZXQuX2lzUGVuZGluZ0NvbXBsZXRlKTsKICAgICAgICB0YXJnZXQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgLy8gVGhpcyBvbmx5IGhhcHBlbnMgaWYgdGhlIGB0aGVuYCBjYWxsIHRocmV3IHN5bmNocm9ub3VzbHkgd2hlbiBnaXZlbgogICAgICAvLyB2YWxpZCBhcmd1bWVudHMuCiAgICAgIC8vIFRoYXQgcmVxdWlyZXMgYSBub24tY29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRnV0dXJlIGludGVyZmFjZSwKICAgICAgLy8gd2hpY2ggc2hvdWxkLCBob3BlZnVsbHksIG5ldmVyIGhhcHBlbi4KICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICAgIHRhcmdldC5fY29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBUYWtlIHRoZSB2YWx1ZSAod2hlbiBjb21wbGV0ZWQpIG9mIHNvdXJjZSBhbmQgY29tcGxldGUgdGFyZ2V0IHdpdGggdGhhdAogIC8vIHZhbHVlIChvciBlcnJvcikuIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHNvdXJjZSBpcyBhIF9GdXR1cmUuCiAgc3RhdGljIHZvaWQgX2NoYWluQ29yZUZ1dHVyZShfRnV0dXJlIHNvdXJjZSwgX0Z1dHVyZSB0YXJnZXQpIHsKICAgIGFzc2VydCh0YXJnZXQuX21heUFkZExpc3RlbmVyKTsgLy8gTm90IGNvbXBsZXRlZCwgbm90IGFscmVhZHkgY2hhaW5lZC4KICAgIHdoaWxlIChzb3VyY2UuX2lzQ2hhaW5lZCkgewogICAgICBzb3VyY2UgPSBzb3VyY2UuX2NoYWluU291cmNlOwogICAgfQogICAgaWYgKHNvdXJjZS5faXNDb21wbGV0ZSkgewogICAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gdGFyZ2V0Ll9yZW1vdmVMaXN0ZW5lcnMoKTsKICAgICAgdGFyZ2V0Ll9jbG9uZVJlc3VsdChzb3VyY2UpOwogICAgICBfcHJvcGFnYXRlVG9MaXN0ZW5lcnModGFyZ2V0LCBsaXN0ZW5lcnMpOwogICAgfSBlbHNlIHsKICAgICAgX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVycyA9IHRhcmdldC5fcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIHRhcmdldC5fc2V0Q2hhaW5lZChzb3VyY2UpOwogICAgICBzb3VyY2UuX3ByZXBlbmRMaXN0ZW5lcnMobGlzdGVuZXJzKTsKICAgIH0KICB9CgogIHZvaWQgX2NvbXBsZXRlKEZ1dHVyZU9yPFQ+IHZhbHVlKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKICAgIGlmICh2YWx1ZSBpcyBGdXR1cmU8VD4pIHsKICAgICAgaWYgKHZhbHVlIGlzIF9GdXR1cmU8VD4pIHsKICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY2hhaW5Gb3JlaWduRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVycyA9IF9yZW1vdmVMaXN0ZW5lcnMoKTsKICAgICAgX3NldFZhbHVlKHZhbHVlKTsKICAgICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHRoaXMsIGxpc3RlbmVycyk7CiAgICB9CiAgfQoKICB2b2lkIF9jb21wbGV0ZVdpdGhWYWx1ZShUIHZhbHVlKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKICAgIGFzc2VydCh2YWx1ZSBpcyEgRnV0dXJlPFQ+KTsKCiAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gX3JlbW92ZUxpc3RlbmVycygpOwogICAgX3NldFZhbHVlKHZhbHVlKTsKICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0aGlzLCBsaXN0ZW5lcnMpOwogIH0KCiAgdm9pZCBfY29tcGxldGVFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKCiAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gX3JlbW92ZUxpc3RlbmVycygpOwogICAgX3NldEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0aGlzLCBsaXN0ZW5lcnMpOwogIH0KCiAgdm9pZCBfYXN5bmNDb21wbGV0ZShGdXR1cmVPcjxUPiB2YWx1ZSkgewogICAgYXNzZXJ0KCFfaXNDb21wbGV0ZSk7CiAgICAvLyBUd28gY29ybmVyIGNhc2VzIGlmIHRoZSB2YWx1ZSBpcyBhIGZ1dHVyZToKICAgIC8vICAgMS4gdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGNvbXBsZXRlZCBhbmQgYW4gZXJyb3IuCiAgICAvLyAgIDIuIHRoZSBmdXR1cmUgaXMgbm90IHlldCBjb21wbGV0ZWQgYnV0IG1pZ2h0IGJlY29tZSBhbiBlcnJvci4KICAgIC8vIFRoZSBmaXJzdCBjYXNlIG1lYW5zIHRoYXQgd2UgbXVzdCBub3QgaW1tZWRpYXRlbHkgY29tcGxldGUgdGhlIEZ1dHVyZSwKICAgIC8vIGFzIG91ciBjb2RlIHdvdWxkIGltbWVkaWF0ZWx5IHN0YXJ0IHByb3BhZ2F0aW5nIHRoZSBlcnJvciB3aXRob3V0CiAgICAvLyBnaXZpbmcgdGhlIHRpbWUgdG8gaW5zdGFsbCBlcnJvci1oYW5kbGVycy4KICAgIC8vIEhvd2V2ZXIgdGhlIHNlY29uZCBjYXNlIHJlcXVpcmVzIHVzIHRvIGRlYWwgd2l0aCB0aGUgdmFsdWUgaW1tZWRpYXRlbHkuCiAgICAvLyBPdGhlcndpc2UgdGhlIHZhbHVlIGNvdWxkIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IgYW5kIHJlcG9ydCBhbgogICAgLy8gdW5oYW5kbGVkIGVycm9yLCBldmVuIHRob3VnaCB3ZSBrbm93IHdlIGFyZSBhbHJlYWR5IGdvaW5nIHRvIGxpc3RlbiB0bwogICAgLy8gaXQuCgogICAgaWYgKHZhbHVlIGlzIEZ1dHVyZTxUPikgewogICAgICBfY2hhaW5GdXR1cmUodmFsdWUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfc2V0UGVuZGluZ0NvbXBsZXRlKCk7CiAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgIF9jb21wbGV0ZVdpdGhWYWx1ZSh2YWx1ZSk7CiAgICB9KTsKICB9CgogIHZvaWQgX2NoYWluRnV0dXJlKEZ1dHVyZTxUPiB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIF9GdXR1cmU8VD4pIHsKICAgICAgaWYgKHZhbHVlLl9oYXNFcnJvcikgewogICAgICAgIC8vIERlbGF5IGNvbXBsZXRpb24gdG8gYWxsb3cgdGhlIHVzZXIgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzLgogICAgICAgIF9zZXRQZW5kaW5nQ29tcGxldGUoKTsKICAgICAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBKdXN0IGxpc3RlbiBvbiB0aGUgZm9yZWlnbiBmdXR1cmUuIFRoaXMgZ3VhcmFudGVlcyBhbiBhc3luYyBkZWxheS4KICAgIF9jaGFpbkZvcmVpZ25GdXR1cmUodmFsdWUsIHRoaXMpOwogIH0KCiAgdm9pZCBfYXN5bmNDb21wbGV0ZUVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwoKICAgIF9zZXRQZW5kaW5nQ29tcGxldGUoKTsKICAgIF96b25lLnNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBQcm9wYWdhdGVzIHRoZSB2YWx1ZS9lcnJvciBvZiBbc291cmNlXSB0byBpdHMgW2xpc3RlbmVyc10sIGV4ZWN1dGluZyB0aGUKICAgKiBsaXN0ZW5lcnMnIGNhbGxiYWNrcy4KICAgKi8KICBzdGF0aWMgdm9pZCBfcHJvcGFnYXRlVG9MaXN0ZW5lcnMoX0Z1dHVyZSBzb3VyY2UsIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMpIHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGFzc2VydChzb3VyY2UuX2lzQ29tcGxldGUpOwogICAgICBib29sIGhhc0Vycm9yID0gc291cmNlLl9oYXNFcnJvcjsKICAgICAgaWYgKGxpc3RlbmVycyA9PSBudWxsKSB7CiAgICAgICAgaWYgKGhhc0Vycm9yKSB7CiAgICAgICAgICBBc3luY0Vycm9yIGFzeW5jRXJyb3IgPSBzb3VyY2UuX2Vycm9yOwogICAgICAgICAgc291cmNlLl96b25lCiAgICAgICAgICAgICAgLmhhbmRsZVVuY2F1Z2h0RXJyb3IoYXN5bmNFcnJvci5lcnJvciwgYXN5bmNFcnJvci5zdGFja1RyYWNlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIC8vIFVzdWFsbHkgZnV0dXJlcyBvbmx5IGhhdmUgb25lIGxpc3RlbmVyLiBJZiB0aGV5IGhhdmUgc2V2ZXJhbCwgd2UKICAgICAgLy8gY2FsbCBoYW5kbGUgdGhlbSBzZXBhcmF0ZWx5IGluIHJlY3Vyc2l2ZSBjYWxscywgY29udGludWluZwogICAgICAvLyBoZXJlIG9ubHkgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaXN0ZW5lciBsZWZ0LgogICAgICB3aGlsZSAobGlzdGVuZXJzLl9uZXh0TGlzdGVuZXIgIT0gbnVsbCkgewogICAgICAgIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IGxpc3RlbmVyczsKICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lci5fbmV4dExpc3RlbmVyOwogICAgICAgIGxpc3RlbmVyLl9uZXh0TGlzdGVuZXIgPSBudWxsOwogICAgICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyhzb3VyY2UsIGxpc3RlbmVyKTsKICAgICAgfQogICAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnM7CiAgICAgIGZpbmFsIHNvdXJjZVJlc3VsdCA9IHNvdXJjZS5fcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIC8vIERvIHRoZSBhY3R1YWwgcHJvcGFnYXRpb24uCiAgICAgIC8vIFNldCBpbml0aWFsIHN0YXRlIG9mIGxpc3RlbmVySGFzRXJyb3IgYW5kIGxpc3RlbmVyVmFsdWVPckVycm9yLiBUaGVzZQogICAgICAvLyB2YXJpYWJsZXMgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgb3V0Y29tZSBvZiBwb3RlbnRpYWwgY2FsbGJhY2tzLgogICAgICAvLyBOb24tZXJyb3IgcmVzdWx0cywgaW5jbHVkaW5nIGZ1dHVyZXMsIGFyZSBzdG9yZWQgaW4KICAgICAgLy8gbGlzdGVuZXJWYWx1ZU9yRXJyb3IgYW5kIGxpc3RlbmVySGFzRXJyb3IgaXMgc2V0IHRvIGZhbHNlLiBFcnJvcnMKICAgICAgLy8gYXJlIHN0b3JlZCBpbiBsaXN0ZW5lclZhbHVlT3JFcnJvciBhcyBhbiBbQXN5bmNFcnJvcl0gYW5kCiAgICAgIC8vIGxpc3RlbmVySGFzRXJyb3IgaXMgc2V0IHRvIHRydWUuCiAgICAgIGJvb2wgbGlzdGVuZXJIYXNFcnJvciA9IGhhc0Vycm9yOwogICAgICB2YXIgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBzb3VyY2VSZXN1bHQ7CgogICAgICAvLyBPbmx5IGlmIHdlIGVpdGhlciBoYXZlIGFuIGVycm9yIG9yIGNhbGxiYWNrcywgZ28gaW50byB0aGlzLCBzb21ld2hhdAogICAgICAvLyBleHBlbnNpdmUsIGJyYW5jaC4gSGVyZSB3ZSdsbCBlbnRlci9sZWF2ZSB0aGUgem9uZS4gTWFueSBmdXR1cmVzCiAgICAgIC8vIGRvbid0IGhhdmUgY2FsbGJhY2tzLCBzbyB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uLgogICAgICBpZiAoaGFzRXJyb3IgfHwgbGlzdGVuZXIuaGFuZGxlc1ZhbHVlIHx8IGxpc3RlbmVyLmhhbmRsZXNDb21wbGV0ZSkgewogICAgICAgIFpvbmUgem9uZSA9IGxpc3RlbmVyLl96b25lOwogICAgICAgIGlmIChoYXNFcnJvciAmJiAhc291cmNlLl96b25lLmluU2FtZUVycm9yWm9uZSh6b25lKSkgewogICAgICAgICAgLy8gRG9uJ3QgY3Jvc3Mgem9uZSBib3VuZGFyaWVzIHdpdGggZXJyb3JzLgogICAgICAgICAgQXN5bmNFcnJvciBhc3luY0Vycm9yID0gc291cmNlLl9lcnJvcjsKICAgICAgICAgIHNvdXJjZS5fem9uZQogICAgICAgICAgICAgIC5oYW5kbGVVbmNhdWdodEVycm9yKGFzeW5jRXJyb3IuZXJyb3IsIGFzeW5jRXJyb3Iuc3RhY2tUcmFjZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBab25lIG9sZFpvbmU7CiAgICAgICAgaWYgKCFpZGVudGljYWwoWm9uZS5jdXJyZW50LCB6b25lKSkgewogICAgICAgICAgLy8gQ2hhbmdlIHpvbmUgaWYgaXQncyBub3QgY3VycmVudC4KICAgICAgICAgIG9sZFpvbmUgPSBab25lLl9lbnRlcih6b25lKTsKICAgICAgICB9CgogICAgICAgIC8vIFRoZXNlIGNhbGxiYWNrcyBhcmUgYWJzdHJhY3RlZCB0byBpc29sYXRlIHRoZSB0cnkvY2F0Y2ggYmxvY2tzCiAgICAgICAgLy8gZnJvbSB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byB3b3JrIGFyb3VuZCBhIFY4IGdsYXNzIGphdy4KICAgICAgICB2b2lkIGhhbmRsZVdoZW5Db21wbGV0ZUNhbGxiYWNrKCkgewogICAgICAgICAgLy8gVGhlIHdoZW5Db21wbGV0ZS1oYW5kbGVyIGlzIG5vdCBjb21iaW5lZCB3aXRoIG5vcm1hbCB2YWx1ZS9lcnJvcgogICAgICAgICAgLy8gaGFuZGxpbmcuIFRoaXMgbWVhbnMgYXQgbW9zdCBvbmUgaGFuZGxlWCBtZXRob2QgaXMgY2FsbGVkIHBlcgogICAgICAgICAgLy8gbGlzdGVuZXIuCiAgICAgICAgICBhc3NlcnQoIWxpc3RlbmVyLmhhbmRsZXNWYWx1ZSk7CiAgICAgICAgICBhc3NlcnQoIWxpc3RlbmVyLmhhbmRsZXNFcnJvcik7CiAgICAgICAgICB2YXIgY29tcGxldGVSZXN1bHQ7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb21wbGV0ZVJlc3VsdCA9IGxpc3RlbmVyLmhhbmRsZVdoZW5Db21wbGV0ZSgpOwogICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICBpZiAoaGFzRXJyb3IgJiYgaWRlbnRpY2FsKHNvdXJjZS5fZXJyb3IuZXJyb3IsIGUpKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBzb3VyY2UuX2Vycm9yOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gbmV3IEFzeW5jRXJyb3IoZSwgcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGlzdGVuZXJIYXNFcnJvciA9IHRydWU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb21wbGV0ZVJlc3VsdCBpcyBGdXR1cmUpIHsKICAgICAgICAgICAgaWYgKGNvbXBsZXRlUmVzdWx0IGlzIF9GdXR1cmUgJiYgY29tcGxldGVSZXN1bHQuX2lzQ29tcGxldGUpIHsKICAgICAgICAgICAgICBpZiAoY29tcGxldGVSZXN1bHQuX2hhc0Vycm9yKSB7CiAgICAgICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IGNvbXBsZXRlUmVzdWx0Ll9lcnJvcjsKICAgICAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBleGlzdGluZyByZXN1bHQgb2Ygc291cmNlLgogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBjb21wbGV0ZVJlc3VsdCBmdXR1cmUgdG8gY29tcGxldGUKICAgICAgICAgICAgLy8gYmVmb3JlIGtub3dpbmcgaWYgaXQncyBhbiBlcnJvciBvciB3ZSBzaG91bGQgdXNlIHRoZSByZXN1bHQKICAgICAgICAgICAgLy8gb2Ygc291cmNlLgogICAgICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gY29tcGxldGVSZXN1bHQudGhlbigoXykgPT4gb3JpZ2luYWxTb3VyY2UpOwogICAgICAgICAgICBsaXN0ZW5lckhhc0Vycm9yID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2b2lkIGhhbmRsZVZhbHVlQ2FsbGJhY2soKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IGxpc3RlbmVyLmhhbmRsZVZhbHVlKHNvdXJjZVJlc3VsdCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gbmV3IEFzeW5jRXJyb3IoZSwgcyk7CiAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdm9pZCBoYW5kbGVFcnJvcigpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIEFzeW5jRXJyb3IgYXN5bmNFcnJvciA9IHNvdXJjZS5fZXJyb3I7CiAgICAgICAgICAgIGlmIChsaXN0ZW5lci5tYXRjaGVzRXJyb3JUZXN0KGFzeW5jRXJyb3IpICYmCiAgICAgICAgICAgICAgICBsaXN0ZW5lci5oYXNFcnJvckNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBsaXN0ZW5lci5oYW5kbGVFcnJvcihhc3luY0Vycm9yKTsKICAgICAgICAgICAgICBsaXN0ZW5lckhhc0Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgaWYgKGlkZW50aWNhbChzb3VyY2UuX2Vycm9yLmVycm9yLCBlKSkgewogICAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gc291cmNlLl9lcnJvcjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IG5ldyBBc3luY0Vycm9yKGUsIHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGxpc3RlbmVyLmhhbmRsZXNDb21wbGV0ZSkgewogICAgICAgICAgaGFuZGxlV2hlbkNvbXBsZXRlQ2FsbGJhY2soKTsKICAgICAgICB9IGVsc2UgaWYgKCFoYXNFcnJvcikgewogICAgICAgICAgaWYgKGxpc3RlbmVyLmhhbmRsZXNWYWx1ZSkgewogICAgICAgICAgICBoYW5kbGVWYWx1ZUNhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChsaXN0ZW5lci5oYW5kbGVzRXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlRXJyb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIElmIHdlIGNoYW5nZWQgem9uZSwgb2xkWm9uZSB3aWxsIG5vdCBiZSBudWxsLgogICAgICAgIGlmIChvbGRab25lICE9IG51bGwpIFpvbmUuX2xlYXZlKG9sZFpvbmUpOwoKICAgICAgICAvLyBJZiB0aGUgbGlzdGVuZXIncyB2YWx1ZSBpcyBhIGZ1dHVyZSB3ZSBuZWVkIHRvIGNoYWluIGl0LiBOb3RlIHRoYXQKICAgICAgICAvLyB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGNhbGxiYWNrLgogICAgICAgIGlmIChsaXN0ZW5lclZhbHVlT3JFcnJvciBpcyBGdXR1cmUpIHsKICAgICAgICAgIEZ1dHVyZSBjaGFpblNvdXJjZSA9IGxpc3RlbmVyVmFsdWVPckVycm9yOwogICAgICAgICAgLy8gU2hvcnRjdXQgaWYgdGhlIGNoYWluLXNvdXJjZSBpcyBhbHJlYWR5IGNvbXBsZXRlZC4gSnVzdCBjb250aW51ZQogICAgICAgICAgLy8gdGhlIGxvb3AuCiAgICAgICAgICBfRnV0dXJlIHJlc3VsdCA9IGxpc3RlbmVyLnJlc3VsdDsKICAgICAgICAgIGlmIChjaGFpblNvdXJjZSBpcyBfRnV0dXJlKSB7CiAgICAgICAgICAgIGlmIChjaGFpblNvdXJjZS5faXNDb21wbGV0ZSkgewogICAgICAgICAgICAgIGxpc3RlbmVycyA9IHJlc3VsdC5fcmVtb3ZlTGlzdGVuZXJzKCk7CiAgICAgICAgICAgICAgcmVzdWx0Ll9jbG9uZVJlc3VsdChjaGFpblNvdXJjZSk7CiAgICAgICAgICAgICAgc291cmNlID0gY2hhaW5Tb3VyY2U7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2NoYWluQ29yZUZ1dHVyZShjaGFpblNvdXJjZSwgcmVzdWx0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2NoYWluRm9yZWlnbkZ1dHVyZShjaGFpblNvdXJjZSwgcmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgX0Z1dHVyZSByZXN1bHQgPSBsaXN0ZW5lci5yZXN1bHQ7CiAgICAgIGxpc3RlbmVycyA9IHJlc3VsdC5fcmVtb3ZlTGlzdGVuZXJzKCk7CiAgICAgIGlmICghbGlzdGVuZXJIYXNFcnJvcikgewogICAgICAgIHJlc3VsdC5fc2V0VmFsdWUobGlzdGVuZXJWYWx1ZU9yRXJyb3IpOwogICAgICB9IGVsc2UgewogICAgICAgIEFzeW5jRXJyb3IgYXN5bmNFcnJvciA9IGxpc3RlbmVyVmFsdWVPckVycm9yOwogICAgICAgIHJlc3VsdC5fc2V0RXJyb3JPYmplY3QoYXN5bmNFcnJvcik7CiAgICAgIH0KICAgICAgLy8gUHJlcGFyZSBmb3IgbmV4dCByb3VuZC4KICAgICAgc291cmNlID0gcmVzdWx0OwogICAgfQogIH0KCiAgRnV0dXJlPFQ+IHRpbWVvdXQoRHVyYXRpb24gdGltZUxpbWl0LCB7RnV0dXJlT3I8VD4gb25UaW1lb3V0KCl9KSB7CiAgICBpZiAoX2lzQ29tcGxldGUpIHJldHVybiBuZXcgX0Z1dHVyZS5pbW1lZGlhdGUodGhpcyk7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUaW1lciB0aW1lcjsKICAgIGlmIChvblRpbWVvdXQgPT0gbnVsbCkgewogICAgICB0aW1lciA9IG5ldyBUaW1lcih0aW1lTGltaXQsICgpIHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoCiAgICAgICAgICAgIG5ldyBUaW1lb3V0RXhjZXB0aW9uKCJGdXR1cmUgbm90IGNvbXBsZXRlZCIsIHRpbWVMaW1pdCkpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIFpvbmUgem9uZSA9IFpvbmUuY3VycmVudDsKICAgICAgb25UaW1lb3V0ID0gem9uZS5yZWdpc3RlckNhbGxiYWNrKG9uVGltZW91dCk7CiAgICAgIHRpbWVyID0gbmV3IFRpbWVyKHRpbWVMaW1pdCwgKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlKHpvbmUucnVuKG9uVGltZW91dCkpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGhpcy50aGVuKChUIHYpIHsKICAgICAgaWYgKHRpbWVyLmlzQWN0aXZlKSB7CiAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZVdpdGhWYWx1ZSh2KTsKICAgICAgfQogICAgfSwgb25FcnJvcjogKGUsIFN0YWNrVHJhY2UgcykgewogICAgICBpZiAodGltZXIuaXNBY3RpdmUpIHsKICAgICAgICB0aW1lci5jYW5jZWwoKTsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZSwgcyk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8vLyBSZWdpc3RlcnMgZXJyb3JIYW5kbGVyIGluIHpvbmUgaWYgaXQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCi8vLwovLy8gQ2hlY2tzIHRoYXQgdGhlIGZ1bmN0aW9uIGFjY2VwdHMgZWl0aGVyIGFuIFtPYmplY3RdIGFuZCBhIFtTdGFja1RyYWNlXQovLy8gb3IganVzdCBvbmUgW09iamVjdF0uIERvZXMgbm90IGNoZWNrIHRoZSByZXR1cm4gdHlwZS4KLy8vIFRoZSBhY3R1YWxseSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlIGBGdXR1cmVPcjxSPmAgd2hlcmUgYFJgIGlzIHRoZQovLy8gdmFsdWUgdHlwZSBvZiB0aGUgZnV0dXJlIHRoYXQgdGhlIGNhbGwgd2lsbCBjb21wbGV0ZSAoZWl0aGVyIHJldHVybmVkCi8vLyBieSBbRnV0dXJlLnRoZW5dIG9yIFtGdXR1cmUuY2F0Y2hFcnJvcl0pLiBXZSBjaGVjayB0aGUgcmV0dXJuZWQgdmFsdWUKLy8vIGR5bmFtaWNhbGx5IGJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBpbiBwb3NpdGlvbnMKLy8vIHdpdGhvdXQgaW5mZXJlbmNlLCBzbyBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gd29uJ3QgaW5mZXIgdGhlIHJldHVybiB0eXBlLgovLy8KLy8vIFRocm93cyBpZiB0aGUgdHlwZSBpcyBub3QgdmFsaWQuCkZ1bmN0aW9uIF9yZWdpc3RlckVycm9ySGFuZGxlcihGdW5jdGlvbiBlcnJvckhhbmRsZXIsIFpvbmUgem9uZSkgewogIGlmIChlcnJvckhhbmRsZXIgaXMgZHluYW1pYyBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpKSB7CiAgICByZXR1cm4gem9uZQogICAgICAgIC5yZWdpc3RlckJpbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE9iamVjdCwgU3RhY2tUcmFjZT4oZXJyb3JIYW5kbGVyKTsKICB9CiAgaWYgKGVycm9ySGFuZGxlciBpcyBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCkpIHsKICAgIHJldHVybiB6b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjazxkeW5hbWljLCBPYmplY3Q+KGVycm9ySGFuZGxlcik7CiAgfQogIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICBlcnJvckhhbmRsZXIsCiAgICAgICJvbkVycm9yIiwKICAgICAgIkVycm9yIGhhbmRsZXIgbXVzdCBhY2NlcHQgb25lIE9iamVjdCBvciBvbmUgT2JqZWN0IGFuZCBhIFN0YWNrVHJhY2UiCiAgICAgICIgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJuIGEgYSB2YWxpZCByZXN1bHQiKTsKfQqDLgBOTjwBFAFKM0QtHSEBNy4BJgE+IlBMHzArBicEATwBTSQwAgExJ1AiBAE9MwQCATAnUB0EAT0uBAIBHiIiJikjKj0wRDkeQCZAIT0bHhM0Gx8gARhJHCdIAR1JHCdJHwFNTAE7HiMBIgE1NUZHMwEmGhUEASokGhUEASodFQQBMwZIHhodBAEsQwQBMSRHBAEzLkRKR0E7Qw05TwYEASEbKwQCASg+PiMpAUdJKy4BSD42JgE5JAE6JAE2IQEGLjcFRUUGFAEGPwU9PAVHSS4FTVApNgYaAS4kAUEcBAFBKxYEAT0fLAQBREABN0I/MjEvAUkiEzEjIjNMHiwePSIlDw8IBhMEASUdHCEEAUIlLkAdTiYyPwgGKkYTBAFABkNCOzcbMipLEwQBPyovPkkGTxMEAS0qLz8GShMEAToBHxokBAEhIB8EARoXHwQBHRgfBAEpHEAaIAQBK0AaIAQBODgEAT8GRyYaIBw0BAEwLBszJQ0YOEIeJyMpEgoeCBsvIy8KBgQBNiMbPiYnLC8pCjIIDRg4Qh4nIy8SCh4IGzAjMAoGBAEnTBsaMh8nBAFBGikeNCQWFgYRBAFNTEkTQyEgAUAiChwrQys7TSEJUE1RGzYrMgoVTRpQMB0lCgYEAU1HQUsgJAYePSMwDT0iKwYEASYaHiEnDyoIDTYYLgYEASUaIQE0FiwEAT8aATQiLAQBKxoyOkdOSTJPRk4LAR4bDgYbISEIBAEnHx1FHyUpDA8nCA4GSiYEATsaARshKQgEAQZOGwZREyIoHxgxF00KEAhKRDkwLiwnMQgsNiRPSD1LQyooLwFOSkZLJD82MRdNEgoBFi4uJwoBSkQsTksXKioeEDwbQTQVOw4lFAwqSy4+KRA+Fg5JSxopTyYMCgElEEcbOSUMCgEdEDM5LUcoDhs1NBU7DiUMCgEoKCAnIwwRJxsMCgE5MwFOOC41ThcsKCs1MCQYFTUOEzYMEgoIKC0fMA82LAghFwYEAUU5KhEdKB9GCg0gNCgOMRknCgoGFhwYJggkHBglCAgTBAIBPwRLOkdKSktNBCVDPhBMBDJGBCEUEUw1AgEbZGFydDphc3luYy9mdXR1cmVfaW1wbC5kYXJ0OW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9zY2hlZHVsZV9taWNyb3Rhc2suZGFydJMOLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCnR5cGVkZWYgdm9pZCBfQXN5bmNDYWxsYmFjaygpOwoKY2xhc3MgX0FzeW5jQ2FsbGJhY2tFbnRyeSB7CiAgZmluYWwgX0FzeW5jQ2FsbGJhY2sgY2FsbGJhY2s7CiAgX0FzeW5jQ2FsbGJhY2tFbnRyeSBuZXh0OwogIF9Bc3luY0NhbGxiYWNrRW50cnkodGhpcy5jYWxsYmFjayk7Cn0KCi8qKiBIZWFkIG9mIHNpbmdsZSBsaW5rZWQgbGlzdCBvZiBwZW5kaW5nIGNhbGxiYWNrcy4gKi8KX0FzeW5jQ2FsbGJhY2tFbnRyeSBfbmV4dENhbGxiYWNrOwovKiogVGFpbCBvZiBzaW5nbGUgbGlua2VkIGxpc3Qgb2YgcGVuZGluZyBjYWxsYmFja3MuICovCl9Bc3luY0NhbGxiYWNrRW50cnkgX2xhc3RDYWxsYmFjazsKLyoqCiAqIFRhaWwgb2YgcHJpb3JpdHkgY2FsbGJhY2tzIGFkZGVkIGJ5IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNhbGxiYWNrLgogKgogKiBQcmlvcml0eSBjYWxsYmFja3MgYXJlIHB1dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQogKiBjYWxsYmFjayBxdWV1ZSwgc28gdGhhdCBpZiBvbmUgY2FsbGJhY2sgc2NoZWR1bGVzIG1vcmUgdGhhbiBvbmUKICogcHJpb3JpdHkgY2FsbGJhY2ssIHRoZXkgYXJlIHN0aWxsIGVucXVldWVkIGluIHNjaGVkdWxpbmcgb3JkZXIuCiAqLwpfQXN5bmNDYWxsYmFja0VudHJ5IF9sYXN0UHJpb3JpdHlDYWxsYmFjazsKLyoqCiAqIFdoZXRoZXIgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgdGhlIGNhbGxiYWNrIGxvb3AuCiAqCiAqIElmIHdlIGFyZSBpbnNpZGUgdGhlIGxvb3AsIHdlIG5ldmVyIG5lZWQgdG8gc2NoZWR1bGUgdGhlIGxvb3AsCiAqIGV2ZW4gaWYgYWRkaW5nIGEgZmlyc3QgZWxlbWVudC4KICovCmJvb2wgX2lzSW5DYWxsYmFja0xvb3AgPSBmYWxzZTsKCnZvaWQgX21pY3JvdGFza0xvb3AoKSB7CiAgd2hpbGUgKF9uZXh0Q2FsbGJhY2sgIT0gbnVsbCkgewogICAgX2xhc3RQcmlvcml0eUNhbGxiYWNrID0gbnVsbDsKICAgIF9Bc3luY0NhbGxiYWNrRW50cnkgZW50cnkgPSBfbmV4dENhbGxiYWNrOwogICAgX25leHRDYWxsYmFjayA9IGVudHJ5Lm5leHQ7CiAgICBpZiAoX25leHRDYWxsYmFjayA9PSBudWxsKSBfbGFzdENhbGxiYWNrID0gbnVsbDsKICAgIChlbnRyeS5jYWxsYmFjaykoKTsKICB9Cn0KCnZvaWQgX3N0YXJ0TWljcm90YXNrTG9vcCgpIHsKICBfaXNJbkNhbGxiYWNrTG9vcCA9IHRydWU7CiAgdHJ5IHsKICAgIC8vIE1vdmVkIHRvIHNlcGFyYXRlIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5LWZpbmFsbHkgcHJldmVudHMKICAgIC8vIGdvb2Qgb3B0aW1pemF0aW9uLgogICAgX21pY3JvdGFza0xvb3AoKTsKICB9IGZpbmFsbHkgewogICAgX2xhc3RQcmlvcml0eUNhbGxiYWNrID0gbnVsbDsKICAgIF9pc0luQ2FsbGJhY2tMb29wID0gZmFsc2U7CiAgICBpZiAoX25leHRDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIF9Bc3luY1J1bi5fc2NoZWR1bGVJbW1lZGlhdGUoX3N0YXJ0TWljcm90YXNrTG9vcCk7CiAgICB9CiAgfQp9CgovKioKICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFzIGEgbWljcm90YXNrLgogKgogKiBUaGUgbWljcm90YXNrIGlzIGNhbGxlZCBhZnRlciBhbGwgb3RoZXIgY3VycmVudGx5IHNjaGVkdWxlZAogKiBtaWNyb3Rhc2tzLCBidXQgYXMgcGFydCBvZiB0aGUgY3VycmVudCBzeXN0ZW0gZXZlbnQuCiAqLwp2b2lkIF9zY2hlZHVsZUFzeW5jQ2FsbGJhY2soX0FzeW5jQ2FsbGJhY2sgY2FsbGJhY2spIHsKICBfQXN5bmNDYWxsYmFja0VudHJ5IG5ld0VudHJ5ID0gbmV3IF9Bc3luY0NhbGxiYWNrRW50cnkoY2FsbGJhY2spOwogIGlmIChfbmV4dENhbGxiYWNrID09IG51bGwpIHsKICAgIF9uZXh0Q2FsbGJhY2sgPSBfbGFzdENhbGxiYWNrID0gbmV3RW50cnk7CiAgICBpZiAoIV9pc0luQ2FsbGJhY2tMb29wKSB7CiAgICAgIF9Bc3luY1J1bi5fc2NoZWR1bGVJbW1lZGlhdGUoX3N0YXJ0TWljcm90YXNrTG9vcCk7CiAgICB9CiAgfSBlbHNlIHsKICAgIF9sYXN0Q2FsbGJhY2submV4dCA9IG5ld0VudHJ5OwogICAgX2xhc3RDYWxsYmFjayA9IG5ld0VudHJ5OwogIH0KfQoKLyoqCiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBiZWZvcmUgYWxsIG90aGVyIGN1cnJlbnRseSBzY2hlZHVsZWQgb25lcy4KICoKICogVGhpcyBjYWxsYmFjayB0YWtlcyBwcmlvcml0eSBvdmVyIGV4aXN0aW5nIHNjaGVkdWxlZCBjYWxsYmFja3MuCiAqIEl0IGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IHRvIGdpdmUgaGlnaGVyIHByaW9yaXR5IHRvIGVycm9yIHJlcG9ydGluZy4KICoKICogSXMgYWx3YXlzIHJ1biBpbiB0aGUgcm9vdCB6b25lLgogKi8Kdm9pZCBfc2NoZWR1bGVQcmlvcml0eUFzeW5jQ2FsbGJhY2soX0FzeW5jQ2FsbGJhY2sgY2FsbGJhY2spIHsKICBpZiAoX25leHRDYWxsYmFjayA9PSBudWxsKSB7CiAgICBfc2NoZWR1bGVBc3luY0NhbGxiYWNrKGNhbGxiYWNrKTsKICAgIF9sYXN0UHJpb3JpdHlDYWxsYmFjayA9IF9sYXN0Q2FsbGJhY2s7CiAgICByZXR1cm47CiAgfQogIF9Bc3luY0NhbGxiYWNrRW50cnkgZW50cnkgPSBuZXcgX0FzeW5jQ2FsbGJhY2tFbnRyeShjYWxsYmFjayk7CiAgaWYgKF9sYXN0UHJpb3JpdHlDYWxsYmFjayA9PSBudWxsKSB7CiAgICBlbnRyeS5uZXh0ID0gX25leHRDYWxsYmFjazsKICAgIF9uZXh0Q2FsbGJhY2sgPSBfbGFzdFByaW9yaXR5Q2FsbGJhY2sgPSBlbnRyeTsKICB9IGVsc2UgewogICAgZW50cnkubmV4dCA9IF9sYXN0UHJpb3JpdHlDYWxsYmFjay5uZXh0OwogICAgX2xhc3RQcmlvcml0eUNhbGxiYWNrLm5leHQgPSBlbnRyeTsKICAgIF9sYXN0UHJpb3JpdHlDYWxsYmFjayA9IGVudHJ5OwogICAgaWYgKGVudHJ5Lm5leHQgPT0gbnVsbCkgewogICAgICBfbGFzdENhbGxiYWNrID0gZW50cnk7CiAgICB9CiAgfQp9CgovKioKICogUnVucyBhIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5LgogKgogKiBDYWxsYmFja3MgcmVnaXN0ZXJlZCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gYXJlIGFsd2F5cyBleGVjdXRlZCBpbiBvcmRlciBhbmQKICogYXJlIGd1YXJhbnRlZWQgdG8gcnVuIGJlZm9yZSBvdGhlciBhc3luY2hyb25vdXMgZXZlbnRzIChsaWtlIFtUaW1lcl0gZXZlbnRzLAogKiBvciBET00gZXZlbnRzKS4KICoKICogKipXYXJuaW5nOioqIGl0IGlzIHBvc3NpYmxlIHRvIHN0YXJ2ZSB0aGUgRE9NIGJ5IHJlZ2lzdGVyaW5nIGFzeW5jaHJvbm91cwogKiBjYWxsYmFja3MgdGhyb3VnaCB0aGlzIG1ldGhvZC4gRm9yIGV4YW1wbGUgdGhlIGZvbGxvd2luZyBwcm9ncmFtIHJ1bnMKICogdGhlIGNhbGxiYWNrcyB3aXRob3V0IGV2ZXIgZ2l2aW5nIHRoZSBUaW1lciBjYWxsYmFjayBhIGNoYW5jZSB0byBleGVjdXRlOgogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgVGltZXIucnVuKCgpIHsgcHJpbnQoImV4ZWN1dGVkIik7IH0pOyAgLy8gV2lsbCBuZXZlciBiZSBleGVjdXRlZC4KICogICAgICAgZm9vKCkgewogKiAgICAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZvbyk7ICAvLyBTY2hlZHVsZXMgW2Zvb10gaW4gZnJvbnQgb2Ygb3RoZXIgZXZlbnRzLgogKiAgICAgICB9CiAqICAgICAgIGZvbygpOwogKiAgICAgfQogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogKiBbVGhlIEV2ZW50IExvb3AgYW5kIERhcnRdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9hcnRpY2xlcy9ldmVudC1sb29wLyk6CiAqIExlYXJuIGhvdyBEYXJ0IGhhbmRsZXMgdGhlIGV2ZW50IHF1ZXVlIGFuZCBtaWNyb3Rhc2sgcXVldWUsIHNvIHlvdSBjYW4gd3JpdGUKICogYmV0dGVyIGFzeW5jaHJvbm91cyBjb2RlIHdpdGggZmV3ZXIgc3VycHJpc2VzLgogKi8Kdm9pZCBzY2hlZHVsZU1pY3JvdGFzayh2b2lkIGNhbGxiYWNrKCkpIHsKICBfWm9uZSBjdXJyZW50Wm9uZSA9IFpvbmUuY3VycmVudDsKICBpZiAoaWRlbnRpY2FsKF9yb290Wm9uZSwgY3VycmVudFpvbmUpKSB7CiAgICAvLyBObyBuZWVkIHRvIGJpbmQgdGhlIGNhbGxiYWNrLiBXZSBrbm93IHRoYXQgdGhlIHJvb3QncyBzY2hlZHVsZU1pY3JvdGFzawogICAgLy8gd2lsbCBiZSBpbnZva2VkIGluIHRoZSByb290IHpvbmUuCiAgICBfcm9vdFNjaGVkdWxlTWljcm90YXNrKG51bGwsIG51bGwsIF9yb290Wm9uZSwgY2FsbGJhY2spOwogICAgcmV0dXJuOwogIH0KICBfWm9uZUZ1bmN0aW9uIGltcGxlbWVudGF0aW9uID0gY3VycmVudFpvbmUuX3NjaGVkdWxlTWljcm90YXNrOwogIGlmIChpZGVudGljYWwoX3Jvb3Rab25lLCBpbXBsZW1lbnRhdGlvbi56b25lKSAmJgogICAgICBfcm9vdFpvbmUuaW5TYW1lRXJyb3Jab25lKGN1cnJlbnRab25lKSkgewogICAgX3Jvb3RTY2hlZHVsZU1pY3JvdGFzaygKICAgICAgICBudWxsLCBudWxsLCBjdXJyZW50Wm9uZSwgY3VycmVudFpvbmUucmVnaXN0ZXJDYWxsYmFjayhjYWxsYmFjaykpOwogICAgcmV0dXJuOwogIH0KICBab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb3Rhc2soWm9uZS5jdXJyZW50LmJpbmRDYWxsYmFja0d1YXJkZWQoY2FsbGJhY2spKTsKfQoKY2xhc3MgX0FzeW5jUnVuIHsKICAvKiogU2NoZWR1bGUgdGhlIGdpdmVuIGNhbGxiYWNrIGJlZm9yZSBhbnkgb3RoZXIgZXZlbnQgaW4gdGhlIGV2ZW50LWxvb3AuICovCiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX3NjaGVkdWxlSW1tZWRpYXRlKHZvaWQgY2FsbGJhY2soKSk7Cn0KgJsATk48ARQBHwEcIRwmAgE4IzgjBEkDNkNDBCsENgNCIwQgARgiIi8gNRgEAgEdHAg/GhYOIh8hOQYEAgEENQM/OAQ3RB8uHjkGCyMeBAIBBFADQ0oDIwQ/HyYrDARBJyAzCy0oIx4dBgQCAQQjA09QEwNNSU0DEEsRUQsQCQMWA09QMgQqJCtPKT0MBEEzMBxKDAROAgESTzwCASJkYXJ0OmFzeW5jL3NjaGVkdWxlX21pY3JvdGFzay5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9zdHJlYW0uZGFydMABP9EvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3JlIFN0cmVhbSB0eXBlcwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp0eXBlZGVmIHZvaWQgX1RpbWVyQ2FsbGJhY2soKTsKCi8qKgogKiBBIHNvdXJjZSBvZiBhc3luY2hyb25vdXMgZGF0YSBldmVudHMuCiAqCiAqIEEgU3RyZWFtIHByb3ZpZGVzIGEgd2F5IHRvIHJlY2VpdmUgYSBzZXF1ZW5jZSBvZiBldmVudHMuCiAqIEVhY2ggZXZlbnQgaXMgZWl0aGVyIGEgZGF0YSBldmVudCwgYWxzbyBjYWxsZWQgYW4gKmVsZW1lbnQqIG9mIHRoZSBzdHJlYW0sCiAqIG9yIGFuIGVycm9yIGV2ZW50LCB3aGljaCBpcyBhIG5vdGlmaWNhdGlvbiB0aGF0IHNvbWV0aGluZyBoYXMgZmFpbGVkLgogKiBXaGVuIGEgc3RyZWFtIGhhcyBlbWl0dGVkIGFsbCBpdHMgZXZlbnQsCiAqIGEgc2luZ2xlICJkb25lIiBldmVudCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXIgdGhhdCB0aGUgZW5kIGhhcyBiZWVuIHJlYWNoZWQuCiAqCiAqIFlvdSBbbGlzdGVuXSBvbiBhIHN0cmVhbSB0byBtYWtlIGl0IHN0YXJ0IGdlbmVyYXRpbmcgZXZlbnRzLAogKiBhbmQgdG8gc2V0IHVwIGxpc3RlbmVycyB0aGF0IHJlY2VpdmUgdGhlIGV2ZW50cy4KICogV2hlbiB5b3UgbGlzdGVuLCB5b3UgcmVjZWl2ZSBhIFtTdHJlYW1TdWJzY3JpcHRpb25dIG9iamVjdAogKiB3aGljaCBpcyB0aGUgYWN0aXZlIG9iamVjdCBwcm92aWRpbmcgdGhlIGV2ZW50cywKICogYW5kIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgbGlzdGVuaW5nIGFnYWluLAogKiBvciB0byB0ZW1wb3JhcmlseSBwYXVzZSBldmVudHMgZnJvbSB0aGUgc3Vic2NyaXB0aW9uLgogKgogKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHN0cmVhbXM6ICJTaW5nbGUtc3Vic2NyaXB0aW9uIiBzdHJlYW1zIGFuZAogKiAiYnJvYWRjYXN0IiBzdHJlYW1zLgogKgogKiAqQSBzaW5nbGUtc3Vic2NyaXB0aW9uIHN0cmVhbSogYWxsb3dzIG9ubHkgYSBzaW5nbGUgbGlzdGVuZXIgZHVyaW5nIHRoZSB3aG9sZQogKiBsaWZldGltZSBvZiB0aGUgc3RyZWFtLgogKiBJdCBkb2Vzbid0IHN0YXJ0IGdlbmVyYXRpbmcgZXZlbnRzIHVudGlsIGl0IGhhcyBhIGxpc3RlbmVyLAogKiBhbmQgaXQgc3RvcHMgc2VuZGluZyBldmVudHMgd2hlbiB0aGUgbGlzdGVuZXIgaXMgdW5zdWJzY3JpYmVkLAogKiBldmVuIGlmIHRoZSBzb3VyY2Ugb2YgZXZlbnRzIGNvdWxkIHN0aWxsIHByb3ZpZGUgbW9yZS4KICoKICogTGlzdGVuaW5nIHR3aWNlIG9uIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW0gaXMgbm90IGFsbG93ZWQsIGV2ZW4gYWZ0ZXIKICogdGhlIGZpcnN0IHN1YnNjcmlwdGlvbiBoYXMgYmVlbiBjYW5jZWxlZC4KICoKICogU2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW1zIGFyZSBnZW5lcmFsbHkgdXNlZCBmb3Igc3RyZWFtaW5nIGNodW5rcyBvZgogKiBsYXJnZXIgY29udGlndW91cyBkYXRhIGxpa2UgZmlsZSBJL08uCiAqCiAqICpBIGJyb2FkY2FzdCBzdHJlYW0qIGFsbG93cyBhbnkgbnVtYmVyIG9mIGxpc3RlbmVycywgYW5kIGl0IGZpcmVzCiAqIGl0cyBldmVudHMgd2hlbiB0aGV5IGFyZSByZWFkeSwgd2hldGhlciB0aGVyZSBhcmUgbGlzdGVuZXJzIG9yIG5vdC4KICoKICogQnJvYWRjYXN0IHN0cmVhbXMgYXJlIHVzZWQgZm9yIGluZGVwZW5kZW50IGV2ZW50cy9vYnNlcnZlcnMuCiAqCiAqIElmIHNldmVyYWwgbGlzdGVuZXJzIHdhbnQgdG8gbGlzdGVuIHRvIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiBzdHJlYW0sCiAqIHVzZSBbYXNCcm9hZGNhc3RTdHJlYW1dIHRvIGNyZWF0ZSBhIGJyb2FkY2FzdCBzdHJlYW0gb24gdG9wIG9mIHRoZQogKiBub24tYnJvYWRjYXN0IHN0cmVhbS4KICoKICogT24gZWl0aGVyIGtpbmQgb2Ygc3RyZWFtLCBzdHJlYW0gdHJhbnNmb3JtYXRpb25zLCBzdWNoIGFzIFt3aGVyZV0gYW5kCiAqIFtza2lwXSwgcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2Ygc3RyZWFtIGFzIHRoZSBvbmUgdGhlIG1ldGhvZCB3YXMgY2FsbGVkIG9uLAogKiB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgogKgogKiBXaGVuIGFuIGV2ZW50IGlzIGZpcmVkLCB0aGUgbGlzdGVuZXIocykgYXQgdGhhdCB0aW1lIHdpbGwgcmVjZWl2ZSB0aGUgZXZlbnQuCiAqIElmIGEgbGlzdGVuZXIgaXMgYWRkZWQgdG8gYSBicm9hZGNhc3Qgc3RyZWFtIHdoaWxlIGFuIGV2ZW50IGlzIGJlaW5nIGZpcmVkLAogKiB0aGF0IGxpc3RlbmVyIHdpbGwgbm90IHJlY2VpdmUgdGhlIGV2ZW50IGN1cnJlbnRseSBiZWluZyBmaXJlZC4KICogSWYgYSBsaXN0ZW5lciBpcyBjYW5jZWxlZCwgaXQgaW1tZWRpYXRlbHkgc3RvcHMgcmVjZWl2aW5nIGV2ZW50cy4KICogTGlzdGVuaW5nIG9uIGEgYnJvYWRjYXN0IHN0cmVhbSBjYW4gYmUgdHJlYXRlZCBhcyBsaXN0ZW5pbmcgb24gYSBuZXcgc3RyZWFtCiAqIGNvbnRhaW5pbmcgb25seSB0aGUgZXZlbnRzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gZW1pdHRlZCB3aGVuIHRoZSBbbGlzdGVuXQogKiBjYWxsIG9jY3Vycy4KICogRm9yIGV4YW1wbGUsIHRoZSBbZmlyc3RdIGdldHRlciBsaXN0ZW5zIHRvIHRoZSBzdHJlYW0sIHRoZW4gcmV0dXJucyB0aGUgZmlyc3QKICogZXZlbnQgdGhhdCBsaXN0ZW5lciByZWNlaXZlcy4KICogVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGZpcnN0IGV2ZW4gZW1pdHRlZCBieSB0aGUgc3RyZWFtLCBidXQgdGhlIGZpcnN0CiAqIG9mIHRoZSAqcmVtYWluaW5nKiBldmVudHMgb2YgdGhlIGJyb2FkY2FzdCBzdHJlYW0uCiAqCiAqIFdoZW4gdGhlICJkb25lIiBldmVudCBpcyBmaXJlZCwgc3Vic2NyaWJlcnMgYXJlIHVuc3Vic2NyaWJlZCBiZWZvcmUKICogcmVjZWl2aW5nIHRoZSBldmVudC4gQWZ0ZXIgdGhlIGV2ZW50IGhhcyBiZWVuIHNlbnQsIHRoZSBzdHJlYW0gaGFzIG5vCiAqIHN1YnNjcmliZXJzLiBBZGRpbmcgbmV3IHN1YnNjcmliZXJzIHRvIGEgYnJvYWRjYXN0IHN0cmVhbSBhZnRlciB0aGlzIHBvaW50CiAqIGlzIGFsbG93ZWQsIGJ1dCB0aGV5IHdpbGwganVzdCByZWNlaXZlIGEgbmV3ICJkb25lIiBldmVudCBhcyBzb29uCiAqIGFzIHBvc3NpYmxlLgogKgogKiBTdHJlYW0gc3Vic2NyaXB0aW9ucyBhbHdheXMgcmVzcGVjdCAicGF1c2UiIHJlcXVlc3RzLiBJZiBuZWNlc3NhcnkgdGhleSBuZWVkCiAqIHRvIGJ1ZmZlciB0aGVpciBpbnB1dCwgYnV0IG9mdGVuLCBhbmQgcHJlZmVyYWJseSwgdGhleSBjYW4gc2ltcGx5IHJlcXVlc3QKICogdGhlaXIgaW5wdXQgdG8gcGF1c2UgdG9vLgogKgogKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBbaXNCcm9hZGNhc3RdIHJldHVybnMgZmFsc2UuCiAqIEEgYnJvYWRjYXN0IHN0cmVhbSBpbmhlcml0aW5nIGZyb20gW1N0cmVhbV0gbXVzdCBvdmVycmlkZSBbaXNCcm9hZGNhc3RdCiAqIHRvIHJldHVybiBgdHJ1ZWAuCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW08VD4gewogIFN0cmVhbSgpOwoKICAvKioKICAgKiBJbnRlcm5hbCB1c2Ugb25seS4gV2UgZG8gbm90IHdhbnQgdG8gcHJvbWlzZSB0aGF0IFN0cmVhbSBzdGF5cyBjb25zdC4KICAgKgogICAqIElmIG1peGlucyBiZWNvbWUgY29tcGF0aWJsZSB3aXRoIGNvbnN0IGNvbnN0cnVjdG9ycywgd2UgbWF5IHVzZSBhCiAgICogc3RyZWFtIG1peGluIGluc3RlYWQgb2YgZXh0ZW5kaW5nIFN0cmVhbSBmcm9tIGEgY29uc3QgY2xhc3MuCiAgICovCiAgY29uc3QgU3RyZWFtLl9pbnRlcm5hbCgpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIGVtcHR5IGJyb2FkY2FzdCBzdHJlYW0uCiAgICoKICAgKiBUaGlzIGlzIGEgc3RyZWFtIHdoaWNoIGRvZXMgbm90aGluZyBleGNlcHQgc2VuZGluZyBhIGRvbmUgZXZlbnQKICAgKiB3aGVuIGl0J3MgbGlzdGVuZWQgdG8uCiAgICovCiAgY29uc3QgZmFjdG9yeSBTdHJlYW0uZW1wdHkoKSA9IF9FbXB0eVN0cmVhbTxUPjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB3aGljaCBlbWl0cyBhIHNpbmdsZSBkYXRhIGV2ZW50IGJlZm9yZSBjb21wbGV0aW5nLgogICAqCiAgICogVGhpcyBzdHJlYW0gZW1pdHMgYSBzaW5nbGUgZGF0YSBldmVudCBvZiBbdmFsdWVdCiAgICogYW5kIHRoZW4gY29tcGxldGVzIHdpdGggYSBkb25lIGV2ZW50LgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogRnV0dXJlPHZvaWQ+IHByaW50VGhpbmdzKFN0cmVhbTxTdHJpbmc+IGRhdGEpIGFzeW5jIHsKICAgKiAgIGF3YWl0IGZvciAodmFyIHggaW4gZGF0YSkgewogICAqICAgICBwcmludCh4KTsKICAgKiAgIH0KICAgKiB9CiAgICogcHJpbnRUaGluZ3MoU3RyZWFtPFN0cmluZz4udmFsdWUoIm9rIikpOyAvLyBwcmludHMgIm9rIi4KICAgKiBgYGAKICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZWZmZWN0aXZlbHkgZXF1aXZhbGVudCB0byBvbmUgY3JlYXRlZCBieQogICAqIGAoKCkgYXN5bmMqIHsgeWllbGQgdmFsdWU7IH0gKCkpYCBvciBgRnV0dXJlPFQ+LnZhbHVlKHZhbHVlKS5hc1N0cmVhbSgpYC4KICAgKi8KICBAU2luY2UoIjIuNSIpCiAgZmFjdG9yeSBTdHJlYW0udmFsdWUoVCB2YWx1ZSkgPT4KICAgICAgKF9Bc3luY1N0cmVhbUNvbnRyb2xsZXI8VD4obnVsbCwgbnVsbCwgbnVsbCwgbnVsbCkKICAgICAgICAgICAgLi5fYWRkKHZhbHVlKQogICAgICAgICAgICAuLl9jbG9zZVVuY2hlY2tlZCgpKQogICAgICAgICAgLnN0cmVhbTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB3aGljaCBlbWl0cyBhIHNpbmdsZSBlcnJvciBldmVudCBiZWZvcmUgY29tcGxldGluZy4KICAgKgogICAqIFRoaXMgc3RyZWFtIGVtaXRzIGEgc2luZ2xlIGVycm9yIGV2ZW50IG9mIFtlcnJvcl0gYW5kIFtzdGFja1RyYWNlXQogICAqIGFuZCB0aGVuIGNvbXBsZXRlcyB3aXRoIGEgZG9uZSBldmVudC4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqIEZ1dHVyZTx2b2lkPiB0cnlUaGluZ3MoU3RyZWFtPGludD4gZGF0YSkgYXN5bmMgewogICAqICAgdHJ5IHsKICAgKiAgICAgYXdhaXQgZm9yICh2YXIgeCBpbiBkYXRhKSB7CiAgICogICAgICAgcHJpbnQoIkRhdGE6ICR4Iik7CiAgICogICAgIH0KICAgKiAgIH0gY2F0Y2ggKGUpIHsKICAgKiAgICAgcHJpbnQoZSk7CiAgICogICB9CiAgICogfQogICAqIHRyeVRoaW5ncyhTdHJlYW08aW50Pi5lcnJvcigiRXJyb3IiKSk7IC8vIHByaW50cyAiRXJyb3IiLgogICAqIGBgYAogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZWZmZWN0aXZlbHkgZXF1aXZhbGVudCB0byBvbmUgY3JlYXRlZCBieQogICAqIGBGdXR1cmU8VD4uZXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpLmFzU3RyZWFtKClgLCBieSBvcgogICAqIGAoKCkgYXN5bmMqIHsgdGhyb3cgZXJyb3I7IH0gKCkpYCwgZXhjZXB0IHRoYXQgeW91IGNhbiBjb250cm9sIHRoZQogICAqIHN0YWNrIHRyYWNlIGFzIHdlbGwuCiAgICovCiAgQFNpbmNlKCIyLjUiKQogIGZhY3RvcnkgU3RyZWFtLmVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pID0+CiAgICAgIChfQXN5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG51bGwsIG51bGwsIG51bGwsIG51bGwpCiAgICAgICAgICAgIC4uX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKQogICAgICAgICAgICAuLl9jbG9zZVVuY2hlY2tlZCgpKQogICAgICAgICAgLnN0cmVhbTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzaW5nbGUtc3Vic2NyaXB0aW9uIHN0cmVhbSBmcm9tIHRoZSBmdXR1cmUuCiAgICoKICAgKiBXaGVuIHRoZSBmdXR1cmUgY29tcGxldGVzLCB0aGUgc3RyZWFtIHdpbGwgZmlyZSBvbmUgZXZlbnQsIGVpdGhlcgogICAqIGRhdGEgb3IgZXJyb3IsIGFuZCB0aGVuIGNsb3NlIHdpdGggYSBkb25lLWV2ZW50LgogICAqLwogIGZhY3RvcnkgU3RyZWFtLmZyb21GdXR1cmUoRnV0dXJlPFQ+IGZ1dHVyZSkgewogICAgLy8gVXNlIHRoZSBjb250cm9sbGVyJ3MgYnVmZmVyaW5nIHRvIGZpbGwgaW4gdGhlIHZhbHVlIGV2ZW4gYmVmb3JlCiAgICAvLyB0aGUgc3RyZWFtIGhhcyBhIGxpc3RlbmVyLiBGb3IgYSBzaW5nbGUgdmFsdWUsIGl0J3Mgbm90IHdvcnRoIGl0CiAgICAvLyB0byB3YWl0IGZvciBhIGxpc3RlbmVyIGJlZm9yZSBkb2luZyB0aGUgYHRoZW5gIG9uIHRoZSBmdXR1cmUuCiAgICBfU3RyZWFtQ29udHJvbGxlcjxUPiBjb250cm9sbGVyID0KICAgICAgICBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG51bGwsIG51bGwsIG51bGwsIG51bGwpOwogICAgZnV0dXJlLnRoZW4oKHZhbHVlKSB7CiAgICAgIGNvbnRyb2xsZXIuX2FkZCh2YWx1ZSk7CiAgICAgIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgY29udHJvbGxlci5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICBjb250cm9sbGVyLl9jbG9zZVVuY2hlY2tlZCgpOwogICAgfSk7CiAgICByZXR1cm4gY29udHJvbGxlci5zdHJlYW07CiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBzdHJlYW0gZnJvbSBhIGdyb3VwIG9mIGZ1dHVyZXMuCiAgICoKICAgKiBUaGUgc3RyZWFtIHJlcG9ydHMgdGhlIHJlc3VsdHMgb2YgdGhlIGZ1dHVyZXMgb24gdGhlIHN0cmVhbSBpbiB0aGUgb3JkZXIKICAgKiBpbiB3aGljaCB0aGUgZnV0dXJlcyBjb21wbGV0ZS4KICAgKiBFYWNoIGZ1dHVyZSBwcm92aWRlcyBlaXRoZXIgYSBkYXRhIGV2ZW50IG9yIGFuIGVycm9yIGV2ZW50LAogICAqIGRlcGVuZGluZyBvbiBob3cgdGhlIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBJZiBzb21lIGZ1dHVyZXMgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCB3aGVuIGBTdHJlYW0uZnJvbUZ1dHVyZXNgIGlzIGNhbGxlZCwKICAgKiB0aGVpciByZXN1bHRzIHdpbGwgYmUgZW1pdHRlZCBpbiBzb21lIHVuc3BlY2lmaWVkIG9yZGVyLgogICAqCiAgICogV2hlbiBhbGwgZnV0dXJlcyBoYXZlIGNvbXBsZXRlZCwgdGhlIHN0cmVhbSBpcyBjbG9zZWQuCiAgICoKICAgKiBJZiBbZnV0dXJlc10gaXMgZW1wdHksIHRoZSBzdHJlYW0gY2xvc2VzIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICovCiAgZmFjdG9yeSBTdHJlYW0uZnJvbUZ1dHVyZXMoSXRlcmFibGU8RnV0dXJlPFQ+PiBmdXR1cmVzKSB7CiAgICBfU3RyZWFtQ29udHJvbGxlcjxUPiBjb250cm9sbGVyID0KICAgICAgICBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG51bGwsIG51bGwsIG51bGwsIG51bGwpOwogICAgaW50IGNvdW50ID0gMDsKICAgIC8vIERlY2xhcmUgdGhlc2UgYXMgdmFyaWFibGVzIGhvbGRpbmcgY2xvc3VyZXMgaW5zdGVhZCBvZiBhcwogICAgLy8gZnVuY3Rpb24gZGVjbGFyYXRpb25zLgogICAgLy8gVGhpcyBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgY2xvc3VyZSBmcm9tIHRoZSBmdW5jdGlvbnMgZm9yIGVhY2ggZnV0dXJlLgogICAgdmFyIG9uVmFsdWUgPSAoVCB2YWx1ZSkgewogICAgICBpZiAoIWNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgICBjb250cm9sbGVyLl9hZGQodmFsdWUpOwogICAgICAgIGlmICgtLWNvdW50ID09IDApIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgb25FcnJvciA9IChlcnJvciwgU3RhY2tUcmFjZSBzdGFjaykgewogICAgICBpZiAoIWNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgICBjb250cm9sbGVyLl9hZGRFcnJvcihlcnJvciwgc3RhY2spOwogICAgICAgIGlmICgtLWNvdW50ID09IDApIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICAgIH0KICAgIH07CiAgICAvLyBUaGUgZnV0dXJlcyBhcmUgYWxyZWFkeSBydW5uaW5nLCBzbyBzdGFydCBsaXN0ZW5pbmcgdG8gdGhlbSBpbW1lZGlhdGVseQogICAgLy8gKGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIHN0cmVhbSB0byBiZSBsaXN0ZW5lZCBvbikuCiAgICAvLyBJZiB3ZSB3YWl0LCB3ZSBtaWdodCBub3QgY2F0Y2ggZXJyb3JzIGluIHRoZSBmdXR1cmVzIGluIHRpbWUuCiAgICBmb3IgKHZhciBmdXR1cmUgaW4gZnV0dXJlcykgewogICAgICBjb3VudCsrOwogICAgICBmdXR1cmUudGhlbihvblZhbHVlLCBvbkVycm9yOiBvbkVycm9yKTsKICAgIH0KICAgIC8vIFVzZSBzY2hlZHVsZSBtaWNyb3Rhc2sgc2luY2UgY29udHJvbGxlciBpcyBzeW5jLgogICAgaWYgKGNvdW50ID09IDApIHNjaGVkdWxlTWljcm90YXNrKGNvbnRyb2xsZXIuY2xvc2UpOwogICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHNpbmdsZS1zdWJzY3JpcHRpb24gc3RyZWFtIHRoYXQgZ2V0cyBpdHMgZGF0YSBmcm9tIFtlbGVtZW50c10uCiAgICoKICAgKiBUaGUgaXRlcmFibGUgaXMgaXRlcmF0ZWQgd2hlbiB0aGUgc3RyZWFtIHJlY2VpdmVzIGEgbGlzdGVuZXIsIGFuZCBzdG9wcwogICAqIGl0ZXJhdGluZyBpZiB0aGUgbGlzdGVuZXIgY2FuY2VscyB0aGUgc3Vic2NyaXB0aW9uLCBvciBpZiB0aGUKICAgKiBbSXRlcmF0b3IubW92ZU5leHRdIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAgb3IgdGhyb3dzLgogICAqIEl0ZXJhdGlvbiBpcyBzdXNwZW5kZWQgd2hpbGUgdGhlIHN0cmVhbSBzdWJzY3JpcHRpb24gaXMgcGF1c2VkLgogICAqCiAgICogSWYgY2FsbGluZyBbSXRlcmF0b3IubW92ZU5leHRdIG9uIGBlbGVtZW50cy5pdGVyYXRvcmAgdGhyb3dzLAogICAqIHRoZSBzdHJlYW0gZW1pdHMgdGhhdCBlcnJvciBhbmQgdGhlbiBpdCBjbG9zZXMuCiAgICogSWYgcmVhZGluZyBbSXRlcmF0b3IuY3VycmVudF0gb24gYGVsZW1lbnRzLml0ZXJhdG9yYCB0aHJvd3MsCiAgICogdGhlIHN0cmVhbSBlbWl0cyB0aGF0IGVycm9yLCBidXQga2VlcHMgaXRlcmF0aW5nLgogICAqLwogIGZhY3RvcnkgU3RyZWFtLmZyb21JdGVyYWJsZShJdGVyYWJsZTxUPiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBfR2VuZXJhdGVkU3RyZWFtSW1wbDxUPigKICAgICAgICAoKSA9PiBuZXcgX0l0ZXJhYmxlUGVuZGluZ0V2ZW50czxUPihlbGVtZW50cykpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB0aGF0IHJlcGVhdGVkbHkgZW1pdHMgZXZlbnRzIGF0IFtwZXJpb2RdIGludGVydmFscy4KICAgKgogICAqIFRoZSBldmVudCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJ5IGludm9raW5nIFtjb21wdXRhdGlvbl0uIFRoZSBhcmd1bWVudCB0bwogICAqIHRoaXMgY2FsbGJhY2sgaXMgYW4gaW50ZWdlciB0aGF0IHN0YXJ0cyB3aXRoIDAgYW5kIGlzIGluY3JlbWVudGVkIGZvcgogICAqIGV2ZXJ5IGV2ZW50LgogICAqCiAgICogSWYgW2NvbXB1dGF0aW9uXSBpcyBvbWl0dGVkIHRoZSBldmVudCB2YWx1ZXMgd2lsbCBhbGwgYmUgYG51bGxgLgogICAqLwogIGZhY3RvcnkgU3RyZWFtLnBlcmlvZGljKER1cmF0aW9uIHBlcmlvZCwKICAgICAgW1QgY29tcHV0YXRpb24oaW50IGNvbXB1dGF0aW9uQ291bnQpXSkgewogICAgVGltZXIgdGltZXI7CiAgICBpbnQgY29tcHV0YXRpb25Db3VudCA9IDA7CiAgICBTdHJlYW1Db250cm9sbGVyPFQ+IGNvbnRyb2xsZXI7CiAgICAvLyBDb3VudHMgdGhlIHRpbWUgdGhhdCB0aGUgU3RyZWFtIHdhcyBydW5uaW5nIChhbmQgbm90IHBhdXNlZCkuCiAgICBTdG9wd2F0Y2ggd2F0Y2ggPSBuZXcgU3RvcHdhdGNoKCk7CgogICAgdm9pZCBzZW5kRXZlbnQoKSB7CiAgICAgIHdhdGNoLnJlc2V0KCk7CiAgICAgIFQgZGF0YTsKICAgICAgaWYgKGNvbXB1dGF0aW9uICE9IG51bGwpIHsKICAgICAgICB0cnkgewogICAgICAgICAgZGF0YSA9IGNvbXB1dGF0aW9uKGNvbXB1dGF0aW9uQ291bnQrKyk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29udHJvbGxlci5hZGQoZGF0YSk7CiAgICB9CgogICAgdm9pZCBzdGFydFBlcmlvZGljVGltZXIoKSB7CiAgICAgIGFzc2VydCh0aW1lciA9PSBudWxsKTsKICAgICAgdGltZXIgPSBuZXcgVGltZXIucGVyaW9kaWMocGVyaW9kLCAoVGltZXIgdGltZXIpIHsKICAgICAgICBzZW5kRXZlbnQoKTsKICAgICAgfSk7CiAgICB9CgogICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFQ+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46ICgpIHsKICAgICAgICAgIHdhdGNoLnN0YXJ0KCk7CiAgICAgICAgICBzdGFydFBlcmlvZGljVGltZXIoKTsKICAgICAgICB9LAogICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgICAgdGltZXIgPSBudWxsOwogICAgICAgICAgd2F0Y2guc3RvcCgpOwogICAgICAgIH0sCiAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgIGFzc2VydCh0aW1lciA9PSBudWxsKTsKICAgICAgICAgIER1cmF0aW9uIGVsYXBzZWQgPSB3YXRjaC5lbGFwc2VkOwogICAgICAgICAgd2F0Y2guc3RhcnQoKTsKICAgICAgICAgIHRpbWVyID0gbmV3IFRpbWVyKHBlcmlvZCAtIGVsYXBzZWQsICgpIHsKICAgICAgICAgICAgdGltZXIgPSBudWxsOwogICAgICAgICAgICBzdGFydFBlcmlvZGljVGltZXIoKTsKICAgICAgICAgICAgc2VuZEV2ZW50KCk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICBpZiAodGltZXIgIT0gbnVsbCkgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgICByZXR1cm4gRnV0dXJlLl9udWxsRnV0dXJlOwogICAgICAgIH0pOwogICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB3aGVyZSBhbGwgZXZlbnRzIG9mIGFuIGV4aXN0aW5nIHN0cmVhbSBhcmUgcGlwZWQgdGhyb3VnaAogICAqIGEgc2luay10cmFuc2Zvcm1hdGlvbi4KICAgKgogICAqIFRoZSBnaXZlbiBbbWFwU2lua10gY2xvc3VyZSBpcyBpbnZva2VkIHdoZW4gdGhlIHJldHVybmVkIHN0cmVhbSBpcwogICAqIGxpc3RlbmVkIHRvLiBBbGwgZXZlbnRzIGZyb20gdGhlIFtzb3VyY2VdIGFyZSBhZGRlZCBpbnRvIHRoZSBldmVudCBzaW5rCiAgICogdGhhdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBpbnZvY2F0aW9uLiBUaGUgdHJhbnNmb3JtYXRpb24gcHV0cyBhbGwKICAgKiB0cmFuc2Zvcm1lZCBldmVudHMgaW50byB0aGUgc2luayB0aGUgW21hcFNpbmtdIGNsb3N1cmUgcmVjZWl2ZWQgZHVyaW5nCiAgICogaXRzIGludm9jYXRpb24uIENvbmNlcHR1YWxseSB0aGUgW21hcFNpbmtdIGNyZWF0ZXMgYSB0cmFuc2Zvcm1hdGlvbiBwaXBlCiAgICogd2l0aCB0aGUgaW5wdXQgc2luayBiZWluZyB0aGUgcmV0dXJuZWQgW0V2ZW50U2lua10gYW5kIHRoZSBvdXRwdXQgc2luawogICAqIGJlaW5nIHRoZSBzaW5rIGl0IHJlY2VpdmVkLgogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBpcyBmcmVxdWVudGx5IHVzZWQgdG8gYnVpbGQgdHJhbnNmb3JtZXJzLgogICAqCiAgICogRXhhbXBsZSB1c2UgZm9yIGEgZHVwbGljYXRpbmcgdHJhbnNmb3JtZXI6CiAgICoKICAgKiAgICAgY2xhc3MgRHVwbGljYXRpb25TaW5rIGltcGxlbWVudHMgRXZlbnRTaW5rPFN0cmluZz4gewogICAqICAgICAgIGZpbmFsIEV2ZW50U2luazxTdHJpbmc+IF9vdXRwdXRTaW5rOwogICAqICAgICAgIER1cGxpY2F0aW9uU2luayh0aGlzLl9vdXRwdXRTaW5rKTsKICAgKgogICAqICAgICAgIHZvaWQgYWRkKFN0cmluZyBkYXRhKSB7CiAgICogICAgICAgICBfb3V0cHV0U2luay5hZGQoZGF0YSk7CiAgICogICAgICAgICBfb3V0cHV0U2luay5hZGQoZGF0YSk7CiAgICogICAgICAgfQogICAqCiAgICogICAgICAgdm9pZCBhZGRFcnJvcihlLCBbc3RdKSB7IF9vdXRwdXRTaW5rLmFkZEVycm9yKGUsIHN0KTsgfQogICAqICAgICAgIHZvaWQgY2xvc2UoKSB7IF9vdXRwdXRTaW5rLmNsb3NlKCk7IH0KICAgKiAgICAgfQogICAqCiAgICogICAgIGNsYXNzIER1cGxpY2F0aW9uVHJhbnNmb3JtZXIgZXh0ZW5kcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8U3RyaW5nLCBTdHJpbmc+IHsKICAgKiAgICAgICAvLyBTb21lIGdlbmVyaWMgdHlwZXMgb21pdHRlZCBmb3IgYnJldml0eS4KICAgKiAgICAgICBTdHJlYW0gYmluZChTdHJlYW0gc3RyZWFtKSA9PiBuZXcgU3RyZWFtPFN0cmluZz4uZXZlbnRUcmFuc2Zvcm1lZCgKICAgKiAgICAgICAgICAgc3RyZWFtLAogICAqICAgICAgICAgICAoRXZlbnRTaW5rIHNpbmspID0+IG5ldyBEdXBsaWNhdGlvblNpbmsoc2luaykpOwogICAqICAgICB9CiAgICoKICAgKiAgICAgc3RyaW5nU3RyZWFtLnRyYW5zZm9ybShuZXcgRHVwbGljYXRpb25UcmFuc2Zvcm1lcigpKTsKICAgKgogICAqIFRoZSByZXN1bHRpbmcgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiBbc291cmNlXSBpcy4KICAgKi8KICBmYWN0b3J5IFN0cmVhbS5ldmVudFRyYW5zZm9ybWVkKAogICAgICBTdHJlYW0gc291cmNlLCBFdmVudFNpbmsgbWFwU2luayhFdmVudFNpbms8VD4gc2luaykpIHsKICAgIHJldHVybiBuZXcgX0JvdW5kU2lua1N0cmVhbShzb3VyY2UsIG1hcFNpbmspOwogIH0KCiAgLyoqCiAgICogQWRhcHRzIFtzb3VyY2VdIHRvIGJlIGEgYFN0cmVhbTxUPmAuCiAgICoKICAgKiBUaGlzIGFsbG93cyBbc291cmNlXSB0byBiZSB1c2VkIGF0IHRoZSBuZXcgdHlwZSwgYnV0IGF0IHJ1bi10aW1lIGl0CiAgICogbXVzdCBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgYm90aCB0aGUgbmV3IHR5cGUgYW5kIGl0cyBvcmlnaW5hbCB0eXBlLgogICAqCiAgICogRGF0YSBldmVudHMgY3JlYXRlZCBieSB0aGUgc291cmNlIHN0cmVhbSBtdXN0IGFsc28gYmUgaW5zdGFuY2VzIG9mIFtUXS4KICAgKi8KICBzdGF0aWMgU3RyZWFtPFQ+IGNhc3RGcm9tPFMsIFQ+KFN0cmVhbTxTPiBzb3VyY2UpID0+CiAgICAgIG5ldyBDYXN0U3RyZWFtPFMsIFQ+KHNvdXJjZSk7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtLgogICAqLwogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IGZhbHNlOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbXVsdGktc3Vic2NyaXB0aW9uIHN0cmVhbSB0aGF0IHByb2R1Y2VzIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSB3aWxsIHN1YnNjcmliZSB0byB0aGlzIHN0cmVhbSB3aGVuIGl0cyBmaXJzdAogICAqIHN1YnNjcmliZXIgaXMgYWRkZWQsIGFuZCB3aWxsIHN0YXkgc3Vic2NyaWJlZCB1bnRpbCB0aGlzIHN0cmVhbSBlbmRzLAogICAqIG9yIGEgY2FsbGJhY2sgY2FuY2VscyB0aGUgc3Vic2NyaXB0aW9uLgogICAqCiAgICogSWYgW29uTGlzdGVuXSBpcyBwcm92aWRlZCwgaXQgaXMgY2FsbGVkIHdpdGggYSBzdWJzY3JpcHRpb24tbGlrZSBvYmplY3QKICAgKiB0aGF0IHJlcHJlc2VudHMgdGhlIHVuZGVybHlpbmcgc3Vic2NyaXB0aW9uIHRvIHRoaXMgc3RyZWFtLiBJdCBpcwogICAqIHBvc3NpYmxlIHRvIHBhdXNlLCByZXN1bWUgb3IgY2FuY2VsIHRoZSBzdWJzY3JpcHRpb24gZHVyaW5nIHRoZSBjYWxsCiAgICogdG8gW29uTGlzdGVuXS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgZXZlbnQgaGFuZGxlcnMsIGluY2x1ZGluZwogICAqIHVzaW5nIFtTdHJlYW1TdWJzY3JpcHRpb24uYXNGdXR1cmVdLgogICAqCiAgICogSWYgW29uQ2FuY2VsXSBpcyBwcm92aWRlZCwgaXQgaXMgY2FsbGVkIGluIGEgc2ltaWxhciB3YXkgdG8gW29uTGlzdGVuXQogICAqIHdoZW4gdGhlIHJldHVybmVkIHN0cmVhbSBzdG9wcyBoYXZpbmcgbGlzdGVuZXIuIElmIGl0IGxhdGVyIGdldHMKICAgKiBhIG5ldyBsaXN0ZW5lciwgdGhlIFtvbkxpc3Rlbl0gZnVuY3Rpb24gaXMgY2FsbGVkIGFnYWluLgogICAqCiAgICogVXNlIHRoZSBjYWxsYmFja3MsIGZvciBleGFtcGxlLCBmb3IgcGF1c2luZyB0aGUgdW5kZXJseWluZyBzdWJzY3JpcHRpb24KICAgKiB3aGlsZSBoYXZpbmcgbm8gc3Vic2NyaWJlcnMgdG8gcHJldmVudCBsb3NpbmcgZXZlbnRzLCBvciBjYW5jZWxpbmcgdGhlCiAgICogc3Vic2NyaXB0aW9uIHdoZW4gdGhlcmUgYXJlIG5vIGxpc3RlbmVycy4KICAgKi8KICBTdHJlYW08VD4gYXNCcm9hZGNhc3RTdHJlYW0oCiAgICAgIHt2b2lkIG9uTGlzdGVuKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pLAogICAgICB2b2lkIG9uQ2FuY2VsKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pfSkgewogICAgcmV0dXJuIG5ldyBfQXNCcm9hZGNhc3RTdHJlYW08VD4odGhpcywgb25MaXN0ZW4sIG9uQ2FuY2VsKTsKICB9CgogIC8qKgogICAqIEFkZHMgYSBzdWJzY3JpcHRpb24gdG8gdGhpcyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0gd2hpY2ggaGFuZGxlcyBldmVudHMgZnJvbSB0aGlzIHN0cmVhbSB1c2luZwogICAqIHRoZSBwcm92aWRlZCBbb25EYXRhXSwgW29uRXJyb3JdIGFuZCBbb25Eb25lXSBoYW5kbGVycy4KICAgKiBUaGUgaGFuZGxlcnMgY2FuIGJlIGNoYW5nZWQgb24gdGhlIHN1YnNjcmlwdGlvbiwgYnV0IHRoZXkgc3RhcnQgb3V0CiAgICogYXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9ucy4KICAgKgogICAqIE9uIGVhY2ggZGF0YSBldmVudCBmcm9tIHRoaXMgc3RyZWFtLCB0aGUgc3Vic2NyaWJlcidzIFtvbkRhdGFdIGhhbmRsZXIKICAgKiBpcyBjYWxsZWQuIElmIFtvbkRhdGFdIGlzIGBudWxsYCwgbm90aGluZyBoYXBwZW5zLgogICAqCiAgICogT24gZXJyb3JzIGZyb20gdGhpcyBzdHJlYW0sIHRoZSBbb25FcnJvcl0gaGFuZGxlciBpcyBjYWxsZWQgd2l0aCB0aGUKICAgKiBlcnJvciBvYmplY3QgYW5kIHBvc3NpYmx5IGEgc3RhY2sgdHJhY2UuCiAgICoKICAgKiBUaGUgW29uRXJyb3JdIGNhbGxiYWNrIG11c3QgYmUgb2YgdHlwZSBgdm9pZCBvbkVycm9yKGVycm9yKWAgb3IKICAgKiBgdm9pZCBvbkVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpYC4gSWYgW29uRXJyb3JdIGFjY2VwdHMKICAgKiB0d28gYXJndW1lbnRzIGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBlcnJvciBvYmplY3QgYW5kIHRoZSBzdGFjayB0cmFjZQogICAqICh3aGljaCBjb3VsZCBiZSBgbnVsbGAgaWYgdGhpcyBzdHJlYW0gaXRzZWxmIHJlY2VpdmVkIGFuIGVycm9yIHdpdGhvdXQKICAgKiBzdGFjayB0cmFjZSkuCiAgICogT3RoZXJ3aXNlIGl0IGlzIGNhbGxlZCB3aXRoIGp1c3QgdGhlIGVycm9yIG9iamVjdC4KICAgKiBJZiBbb25FcnJvcl0gaXMgb21pdHRlZCwgYW55IGVycm9ycyBvbiB0aGlzIHN0cmVhbSBhcmUgY29uc2lkZXJlZCB1bmhhbmRsZWQsCiAgICogYW5kIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjdXJyZW50IFtab25lXSdzIGVycm9yIGhhbmRsZXIuCiAgICogQnkgZGVmYXVsdCB1bmhhbmRsZWQgYXN5bmMgZXJyb3JzIGFyZSB0cmVhdGVkCiAgICogYXMgaWYgdGhleSB3ZXJlIHVuY2F1Z2h0IHRvcC1sZXZlbCBlcnJvcnMuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBjbG9zZXMgYW5kIHNlbmRzIGEgZG9uZSBldmVudCwgdGhlIFtvbkRvbmVdIGhhbmRsZXIgaXMKICAgKiBjYWxsZWQuIElmIFtvbkRvbmVdIGlzIGBudWxsYCwgbm90aGluZyBoYXBwZW5zLgogICAqCiAgICogSWYgW2NhbmNlbE9uRXJyb3JdIGlzIHRydWUsIHRoZSBzdWJzY3JpcHRpb24gaXMgYXV0b21hdGljYWxseSBjYW5jZWxlZAogICAqIHdoZW4gdGhlIGZpcnN0IGVycm9yIGV2ZW50IGlzIGRlbGl2ZXJlZC4gVGhlIGRlZmF1bHQgaXMgYGZhbHNlYC4KICAgKgogICAqIFdoaWxlIGEgc3Vic2NyaXB0aW9uIGlzIHBhdXNlZCwgb3Igd2hlbiBpdCBoYXMgYmVlbiBjYW5jZWxlZCwKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGRvZXNuJ3QgcmVjZWl2ZSBldmVudHMgYW5kIG5vbmUgb2YgdGhlCiAgICogZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgYXJlIGNhbGxlZC4KICAgKi8KICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc3RyZWFtIGZyb20gdGhpcyBzdHJlYW0gdGhhdCBkaXNjYXJkcyBzb21lIGVsZW1lbnRzLgogICAqCiAgICogVGhlIG5ldyBzdHJlYW0gc2VuZHMgdGhlIHNhbWUgZXJyb3IgYW5kIGRvbmUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtLAogICAqIGJ1dCBpdCBvbmx5IHNlbmRzIHRoZSBkYXRhIGV2ZW50cyB0aGF0IHNhdGlzZnkgdGhlIFt0ZXN0XS4KICAgKgogICAqIElmIHRoZSBbdGVzdF0gZnVuY3Rpb24gdGhyb3dzLCB0aGUgZGF0YSBldmVudCBpcyBkcm9wcGVkIGFuZCB0aGUKICAgKiBlcnJvciBpcyBlbWl0dGVkIG9uIHRoZSByZXR1cm5lZCBzdHJlYW0gaW5zdGVhZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIElmIGEgYnJvYWRjYXN0IHN0cmVhbSBpcyBsaXN0ZW5lZCB0byBtb3JlIHRoYW4gb25jZSwgZWFjaCBzdWJzY3JpcHRpb24KICAgKiB3aWxsIGluZGl2aWR1YWxseSBwZXJmb3JtIHRoZSBgdGVzdGAuCiAgICovCiAgU3RyZWFtPFQ+IHdoZXJlKGJvb2wgdGVzdChUIGV2ZW50KSkgewogICAgcmV0dXJuIG5ldyBfV2hlcmVTdHJlYW08VD4odGhpcywgdGVzdCk7CiAgfQoKICAvKioKICAgKiBUcmFuc2Zvcm1zIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbSBpbnRvIGEgbmV3IHN0cmVhbSBldmVudC4KICAgKgogICAqIENyZWF0ZXMgYSBuZXcgc3RyZWFtIHRoYXQgY29udmVydHMgZWFjaCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtCiAgICogdG8gYSBuZXcgdmFsdWUgdXNpbmcgdGhlIFtjb252ZXJ0XSBmdW5jdGlvbiwgYW5kIGVtaXRzIHRoZSByZXN1bHQuCiAgICoKICAgKiBGb3IgZWFjaCBkYXRhIGV2ZW50LCBgb2AsIGluIHRoaXMgc3RyZWFtLCB0aGUgcmV0dXJuZWQgc3RyZWFtCiAgICogcHJvdmlkZXMgYSBkYXRhIGV2ZW50IHdpdGggdGhlIHZhbHVlIGBjb252ZXJ0KG8pYC4KICAgKiBJZiBbY29udmVydF0gdGhyb3dzLCB0aGUgcmV0dXJuZWQgc3RyZWFtIHJlcG9ydHMgaXQgYXMgYW4gZXJyb3IKICAgKiBldmVudCBpbnN0ZWFkLgogICAqCiAgICogRXJyb3IgYW5kIGRvbmUgZXZlbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQgdG8gdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIFRoZSBbY29udmVydF0gZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgcGVyIGRhdGEgZXZlbnQgcGVyIGxpc3RlbmVyLgogICAqIElmIGEgYnJvYWRjYXN0IHN0cmVhbSBpcyBsaXN0ZW5lZCB0byBtb3JlIHRoYW4gb25jZSwgZWFjaCBzdWJzY3JpcHRpb24KICAgKiB3aWxsIGluZGl2aWR1YWxseSBjYWxsIFtjb252ZXJ0XSBvbiBlYWNoIGRhdGEgZXZlbnQuCiAgICoKICAgKiBVbmxpa2UgW3RyYW5zZm9ybV0sIHRoaXMgbWV0aG9kIGRvZXMgbm90IHRyZWF0IHRoZSBzdHJlYW0gYXMKICAgKiBjaHVua3Mgb2YgYSBzaW5nbGUgdmFsdWUuIEluc3RlYWQgZWFjaCBldmVudCBpcyBjb252ZXJ0ZWQgaW5kZXBlbmRlbnRseQogICAqIG9mIHRoZSBwcmV2aW91cyBhbmQgZm9sbG93aW5nIGV2ZW50cywgd2hpY2ggbWF5IG5vdCBhbHdheXMgYmUgY29ycmVjdC4KICAgKiBGb3IgZXhhbXBsZSwgVVRGLTggZW5jb2RpbmcsIG9yIGRlY29kaW5nLCB3aWxsIGdpdmUgd3JvbmcgcmVzdWx0cwogICAqIGlmIGEgc3Vycm9nYXRlIHBhaXIsIG9yIGEgbXVsdGlieXRlIFVURi04IGVuY29kaW5nLCBpcyBzcGxpdCBpbnRvCiAgICogc2VwYXJhdGUgZXZlbnRzLCBhbmQgdGhvc2UgZXZlbnRzIGFyZSBhdHRlbXB0ZWQgZW5jb2RlZCBvciBkZWNvZGVkCiAgICogaW5kZXBlbmRlbnRseS4KICAgKi8KICBTdHJlYW08Uz4gbWFwPFM+KFMgY29udmVydChUIGV2ZW50KSkgewogICAgcmV0dXJuIG5ldyBfTWFwU3RyZWFtPFQsIFM+KHRoaXMsIGNvbnZlcnQpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzdHJlYW0gd2l0aCBlYWNoIGRhdGEgZXZlbnQgb2YgdGhpcyBzdHJlYW0gYXN5bmNocm9ub3VzbHkKICAgKiBtYXBwZWQgdG8gYSBuZXcgZXZlbnQuCiAgICoKICAgKiBUaGlzIGFjdHMgbGlrZSBbbWFwXSwgZXhjZXB0IHRoYXQgW2NvbnZlcnRdIG1heSByZXR1cm4gYSBbRnV0dXJlXSwKICAgKiBhbmQgaW4gdGhhdCBjYXNlLCB0aGlzIHN0cmVhbSB3YWl0cyBmb3IgdGhhdCBmdXR1cmUgdG8gY29tcGxldGUgYmVmb3JlCiAgICogY29udGludWluZyB3aXRoIGl0cyByZXN1bHQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKi8KICBTdHJlYW08RT4gYXN5bmNNYXA8RT4oRnV0dXJlT3I8RT4gY29udmVydChUIGV2ZW50KSkgewogICAgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPEU+IGNvbnRyb2xsZXI7CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uOwoKICAgIHZvaWQgb25MaXN0ZW4oKSB7CiAgICAgIGZpbmFsIGFkZCA9IGNvbnRyb2xsZXIuYWRkOwogICAgICBhc3NlcnQoY29udHJvbGxlciBpcyBfU3RyZWFtQ29udHJvbGxlcjxFPiB8fAogICAgICAgICAgY29udHJvbGxlciBpcyBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcik7CiAgICAgIGZpbmFsIGFkZEVycm9yID0gY29udHJvbGxlci5fYWRkRXJyb3I7CiAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKChUIGV2ZW50KSB7CiAgICAgICAgRnV0dXJlT3I8RT4gbmV3VmFsdWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIG5ld1ZhbHVlID0gY29udmVydChldmVudCk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKG5ld1ZhbHVlIGlzIEZ1dHVyZTxFPikgewogICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICBuZXdWYWx1ZQogICAgICAgICAgICAgIC50aGVuKGFkZCwgb25FcnJvcjogYWRkRXJyb3IpCiAgICAgICAgICAgICAgLndoZW5Db21wbGV0ZShzdWJzY3JpcHRpb24ucmVzdW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29udHJvbGxlci5hZGQobmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgfSwgb25FcnJvcjogYWRkRXJyb3IsIG9uRG9uZTogY29udHJvbGxlci5jbG9zZSk7CiAgICB9CgogICAgaWYgKHRoaXMuaXNCcm9hZGNhc3QpIHsKICAgICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEU+LmJyb2FkY2FzdCgKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxFPigKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICB9LAogICAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgICAgfSwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBzdWJzY3JpcHRpb24uY2FuY2VsKCksCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9CgogIC8qKgogICAqIFRyYW5zZm9ybXMgZWFjaCBlbGVtZW50IGludG8gYSBzZXF1ZW5jZSBvZiBhc3luY2hyb25vdXMgZXZlbnRzLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJlYW0gYW5kIGZvciBlYWNoIGV2ZW50IG9mIHRoaXMgc3RyZWFtLCBkbyB0aGUgZm9sbG93aW5nOgogICAqCiAgICogKiBJZiB0aGUgZXZlbnQgaXMgYW4gZXJyb3IgZXZlbnQgb3IgYSBkb25lIGV2ZW50LCBpdCBpcyBlbWl0dGVkIGRpcmVjdGx5CiAgICogYnkgdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKiAqIE90aGVyd2lzZSBpdCBpcyBhbiBlbGVtZW50LiBUaGVuIHRoZSBbY29udmVydF0gZnVuY3Rpb24gaXMgY2FsbGVkCiAgICogd2l0aCB0aGUgZWxlbWVudCBhcyBhcmd1bWVudCB0byBwcm9kdWNlIGEgY29udmVydC1zdHJlYW0gZm9yIHRoZSBlbGVtZW50LgogICAqICogSWYgdGhhdCBjYWxsIHRocm93cywgdGhlIGVycm9yIGlzIGVtaXR0ZWQgb24gdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKiAqIElmIHRoZSBjYWxsIHJldHVybnMgYG51bGxgLCBubyBmdXJ0aGVyIGFjdGlvbiBpcyB0YWtlbiBmb3IgdGhlIGVsZW1lbnRzLgogICAqICogT3RoZXJ3aXNlLCB0aGlzIHN0cmVhbSBpcyBwYXVzZWQgYW5kIGNvbnZlcnQtc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqIEV2ZXJ5IGRhdGEgYW5kIGVycm9yIGV2ZW50IG9mIHRoZSBjb252ZXJ0LXN0cmVhbSBpcyBlbWl0dGVkIG9uIHRoZSByZXR1cm5lZAogICAqIHN0cmVhbSBpbiB0aGUgb3JkZXIgaXQgaXMgcHJvZHVjZWQuCiAgICogV2hlbiB0aGUgY29udmVydC1zdHJlYW0gZW5kcywgdGhpcyBzdHJlYW0gaXMgcmVzdW1lZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqLwogIFN0cmVhbTxFPiBhc3luY0V4cGFuZDxFPihTdHJlYW08RT4gY29udmVydChUIGV2ZW50KSkgewogICAgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPEU+IGNvbnRyb2xsZXI7CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uOwogICAgdm9pZCBvbkxpc3RlbigpIHsKICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgaXMgX1N0cmVhbUNvbnRyb2xsZXIgfHwKICAgICAgICAgIGNvbnRyb2xsZXIgaXMgX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIpOwogICAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigoVCBldmVudCkgewogICAgICAgIFN0cmVhbTxFPiBuZXdTdHJlYW07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIG5ld1N0cmVhbSA9IGNvbnZlcnQoZXZlbnQpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoZSwgcyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChuZXdTdHJlYW0gIT0gbnVsbCkgewogICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICBjb250cm9sbGVyLmFkZFN0cmVhbShuZXdTdHJlYW0pLndoZW5Db21wbGV0ZShzdWJzY3JpcHRpb24ucmVzdW1lKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgICAgICBvbkVycm9yOiBjb250cm9sbGVyLl9hZGRFcnJvciwgLy8gQXZvaWQgWm9uZSBlcnJvciByZXBsYWNlbWVudC4KICAgICAgICAgIG9uRG9uZTogY29udHJvbGxlci5jbG9zZSk7CiAgICB9CgogICAgaWYgKHRoaXMuaXNCcm9hZGNhc3QpIHsKICAgICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEU+LmJyb2FkY2FzdCgKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxFPigKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICB9LAogICAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgICAgfSwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBzdWJzY3JpcHRpb24uY2FuY2VsKCksCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSB3cmFwcGVyIFN0cmVhbSB0aGF0IGludGVyY2VwdHMgc29tZSBlcnJvcnMgZnJvbSB0aGlzIHN0cmVhbS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIHNlbmRzIGFuIGVycm9yIHRoYXQgbWF0Y2hlcyBbdGVzdF0sIHRoZW4gaXQgaXMgaW50ZXJjZXB0ZWQKICAgKiBieSB0aGUgW29uRXJyb3JdIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIFtvbkVycm9yXSBjYWxsYmFjayBtdXN0IGJlIG9mIHR5cGUgYHZvaWQgb25FcnJvcihlcnJvcilgIG9yCiAgICogYHZvaWQgb25FcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKWAuCiAgICogVGhlIGZ1bmN0aW9uIHR5cGUgZGV0ZXJtaW5lcyB3aGV0aGVyIFtvbkVycm9yXSBpcyBpbnZva2VkIHdpdGggYSBzdGFjawogICAqIHRyYWNlIGFyZ3VtZW50LgogICAqIFRoZSBzdGFjayB0cmFjZSBhcmd1bWVudCBtYXkgYmUgYG51bGxgIGlmIHRoaXMgc3RyZWFtIHJlY2VpdmVkIGFuIGVycm9yCiAgICogd2l0aG91dCBhIHN0YWNrIHRyYWNlLgogICAqCiAgICogQW4gYXN5bmNocm9ub3VzIGVycm9yIGBlcnJvcmAgaXMgbWF0Y2hlZCBieSBhIHRlc3QgZnVuY3Rpb24gaWYKICAgKmB0ZXN0KGVycm9yKWAgcmV0dXJucyB0cnVlLiBJZiBbdGVzdF0gaXMgb21pdHRlZCwgZXZlcnkgZXJyb3IgaXMgY29uc2lkZXJlZAogICAqIG1hdGNoaW5nLgogICAqCiAgICogSWYgdGhlIGVycm9yIGlzIGludGVyY2VwdGVkLCB0aGUgW29uRXJyb3JdIGZ1bmN0aW9uIGNhbiBkZWNpZGUgd2hhdCB0byBkbwogICAqIHdpdGggaXQuIEl0IGNhbiB0aHJvdyBpZiBpdCB3YW50cyB0byByYWlzZSBhIG5ldyAob3IgdGhlIHNhbWUpIGVycm9yLAogICAqIG9yIHNpbXBseSByZXR1cm4gdG8gbWFrZSB0aGlzIHN0cmVhbSBmb3JnZXQgdGhlIGVycm9yLgogICAqIElmIHRoZSByZWNlaXZlZCBgZXJyb3JgIHZhbHVlIGlzIHRocm93biBhZ2FpbiBieSB0aGUgW29uRXJyb3JdIGZ1bmN0aW9uLAogICAqIGl0IGFjdHMgbGlrZSBhIGByZXRocm93YCBhbmQgaXQgaXMgZW1pdHRlZCBhbG9uZyB3aXRoIGl0cyBvcmlnaW5hbAogICAqIHN0YWNrIHRyYWNlLCBub3QgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBgdGhyb3dgIGluc2lkZSBbb25FcnJvcl0uCiAgICoKICAgKiBJZiB5b3UgbmVlZCB0byB0cmFuc2Zvcm0gYW4gZXJyb3IgaW50byBhIGRhdGEgZXZlbnQsIHVzZSB0aGUgbW9yZSBnZW5lcmljCiAgICogW1N0cmVhbS50cmFuc2Zvcm1dIHRvIGhhbmRsZSB0aGUgZXZlbnQgYnkgd3JpdGluZyBhIGRhdGEgZXZlbnQgdG8KICAgKiB0aGUgb3V0cHV0IHNpbmsuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKiBJZiBhIGJyb2FkY2FzdCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8gbW9yZSB0aGFuIG9uY2UsIGVhY2ggc3Vic2NyaXB0aW9uCiAgICogd2lsbCBpbmRpdmlkdWFsbHkgcGVyZm9ybSB0aGUgYHRlc3RgIGFuZCBoYW5kbGUgdGhlIGVycm9yLgogICAqLwogIFN0cmVhbTxUPiBoYW5kbGVFcnJvcihGdW5jdGlvbiBvbkVycm9yLCB7Ym9vbCB0ZXN0KGVycm9yKX0pIHsKICAgIHJldHVybiBuZXcgX0hhbmRsZUVycm9yU3RyZWFtPFQ+KHRoaXMsIG9uRXJyb3IsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogVHJhbnNmb3JtcyBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0gaW50byBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJlYW0gd2hlcmUgZWFjaCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtIGlzIHJlcGxhY2VkCiAgICogYnkgemVybyBvciBtb3JlIGRhdGEgZXZlbnRzLgogICAqIFRoZSBldmVudCB2YWx1ZXMgYXJlIHByb3ZpZGVkIGFzIGFuIFtJdGVyYWJsZV0gYnkgYSBjYWxsIHRvIFtjb252ZXJ0XQogICAqIHdpdGggdGhlIGVsZW1lbnQgYXMgYXJndW1lbnQsIGFuZCB0aGUgZWxlbWVudHMgb2YgdGhhdCBpdGVyYWJsZSBpcwogICAqIGVtaXR0ZWQgaW4gaXRlcmF0aW9uIG9yZGVyLgogICAqIElmIGNhbGxpbmcgW2NvbnZlcnRdIHRocm93cywgb3IgaWYgdGhlIGl0ZXJhdGlvbiBvZiB0aGUgcmV0dXJuZWQgdmFsdWVzCiAgICogdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBvbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGFuZCBpdGVyYXRpb24gZW5kcwogICAqIGZvciB0aGF0IGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBFcnJvciBldmVudHMgYW5kIHRoZSBkb25lIGV2ZW50IG9mIHRoaXMgc3RyZWFtIGFyZSBmb3J3YXJkZWQgZGlyZWN0bHkKICAgKiB0byB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaW5kaXZpZHVhbGx5IGNhbGwgYGNvbnZlcnRgIGFuZCBleHBhbmQgdGhlIGV2ZW50cy4KICAgKi8KICBTdHJlYW08Uz4gZXhwYW5kPFM+KEl0ZXJhYmxlPFM+IGNvbnZlcnQoVCBlbGVtZW50KSkgewogICAgcmV0dXJuIG5ldyBfRXhwYW5kU3RyZWFtPFQsIFM+KHRoaXMsIGNvbnZlcnQpOwogIH0KCiAgLyoqCiAgICogUGlwZXMgdGhlIGV2ZW50cyBvZiB0aGlzIHN0cmVhbSBpbnRvIFtzdHJlYW1Db25zdW1lcl0uCiAgICoKICAgKiBBbGwgZXZlbnRzIG9mIHRoaXMgc3RyZWFtIGFyZSBhZGRlZCB0byBgc3RyZWFtQ29uc3VtZXJgIHVzaW5nCiAgICogW1N0cmVhbUNvbnN1bWVyLmFkZFN0cmVhbV0uCiAgICogVGhlIGBzdHJlYW1Db25zdW1lcmAgaXMgY2xvc2VkIHdoZW4gdGhpcyBzdHJlYW0gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFkZGVkCiAgICogdG8gaXQgLSB3aGVuIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYGFkZFN0cmVhbWAgY29tcGxldGVzIHdpdGhvdXQgYW4gZXJyb3IuCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHdoaWNoIGNvbXBsZXRlcyB3aGVuIHRoaXMgc3RyZWFtIGhhcyBiZWVuIGNvbnN1bWVkCiAgICogYW5kIHRoZSBjb25zdW1lciBoYXMgYmVlbiBjbG9zZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgZnV0dXJlIHJldHVybmVkCiAgICogYnkgW1N0cmVhbUNvbnN1bWVyLmNsb3NlXS4KICAgKiBJZiB0aGUgY2FsbCB0byBbU3RyZWFtQ29uc3VtZXIuYWRkU3RyZWFtXSBmYWlscyBpbiBzb21lIHdheSwgdGhpcwogICAqIG1ldGhvZCBmYWlscyBpbiB0aGUgc2FtZSB3YXkuCiAgICovCiAgRnV0dXJlIHBpcGUoU3RyZWFtQ29uc3VtZXI8VD4gc3RyZWFtQ29uc3VtZXIpIHsKICAgIHJldHVybiBzdHJlYW1Db25zdW1lci5hZGRTdHJlYW0odGhpcykudGhlbigoXykgPT4gc3RyZWFtQ29uc3VtZXIuY2xvc2UoKSk7CiAgfQoKICAvKioKICAgKiBBcHBsaWVzICBbc3RyZWFtVHJhbnNmb3JtZXJdIHRvIHRoaXMgc3RyZWFtLgogICAqCiAgICogUmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgc3RyZWFtLAogICAqIHRoYXQgaXMsIHRoZSByZXN1bHQgb2YgYHN0cmVhbVRyYW5zZm9ybWVyLmJpbmQodGhpcylgLgogICAqIFRoaXMgbWV0aG9kIHNpbXBseSBhbGxvd3Mgd3JpdGluZyB0aGUgY2FsbCB0byBgc3RyZWFtVHJhbnNmb3JtZXIuYmluZGAKICAgKiBpbiBhIGNoYWluZWQgZmFzaGlvbiwgbGlrZQogICAqIGBgYAogICAqIHN0cmVhbS5tYXAobWFwcGluZykudHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uKS50b0xpc3QoKQogICAqIGBgYAogICAqIHdoaWNoIGNhbiBiZSBtb3JlIGNvbnZlbmllbnQgdGhhbiBjYWxsaW5nIGBiaW5kYCBkaXJlY3RseS4KICAgKgogICAqIFRoZSBbc3RyZWFtVHJhbnNmb3JtZXJdIGNhbiByZXR1cm4gYW55IHN0cmVhbS4KICAgKiBXaGV0aGVyIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIG9yIG5vdCwKICAgKiBhbmQgd2hpY2ggZWxlbWVudHMgaXQgd2lsbCBjb250YWluLAogICAqIGlzIGVudGlyZWx5IHVwIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbi4KICAgKgogICAqIFRoaXMgbWV0aG9kIHNob3VsZCBhbHdheXMgYmUgdXNlZCBmb3IgdHJhbnNmb3JtYXRpb25zIHdoaWNoIHRyZWF0CiAgICogdGhlIGVudGlyZSBzdHJlYW0gYXMgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHZhbHVlCiAgICogd2hpY2ggaGFzIHBlcmhhcHMgYmVlbiBzcGxpdCBpbnRvIHNldmVyYWwgcGFydHMgZm9yIHRyYW5zcG9ydCwKICAgKiBsaWtlIGEgZmlsZSBiZWluZyByZWFkIGZyb20gZGlzayBvciBiZWluZyBmZXRjaGVkIG92ZXIgYSBuZXR3b3JrLgogICAqIFRoZSB0cmFuc2Zvcm1hdGlvbiB3aWxsIHRoZW4gcHJvZHVjZSBhIG5ldyBzdHJlYW0gd2hpY2gKICAgKiB0cmFuc2Zvcm1zIHRoZSBzdHJlYW0ncyB2YWx1ZSBpbmNyZW1lbnRhbGx5IChwZXJoYXBzIHVzaW5nCiAgICogW0NvbnZlcnRlci5zdGFydENodW5rZWRDb252ZXJzaW9uXSkuIFRoZSByZXN1bHRpbmcgc3RyZWFtCiAgICogbWF5IGFnYWluIGJlIGNodW5rcyBvZiB0aGUgcmVzdWx0LCBidXQgZG9lcyBub3QgaGF2ZSB0bwogICAqIGNvcnJlc3BvbmQgdG8gc3BlY2lmaWMgZXZlbnRzIGZyb20gdGhlIHNvdXJjZSBzdHJpbmcuCiAgICovCiAgU3RyZWFtPFM+IHRyYW5zZm9ybTxTPihTdHJlYW1UcmFuc2Zvcm1lcjxULCBTPiBzdHJlYW1UcmFuc2Zvcm1lcikgewogICAgcmV0dXJuIHN0cmVhbVRyYW5zZm9ybWVyLmJpbmQodGhpcyk7CiAgfQoKICAvKioKICAgKiBDb21iaW5lcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyBieSByZXBlYXRlZGx5IGFwcGx5aW5nIFtjb21iaW5lXS4KICAgKgogICAqIFNpbWlsYXIgdG8gW0l0ZXJhYmxlLnJlZHVjZV0sIHRoaXMgZnVuY3Rpb24gbWFpbnRhaW5zIGEgdmFsdWUsCiAgICogc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbQogICAqIGFuZCB1cGRhdGVkIGZvciBlYWNoIGZ1cnRoZXIgZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKiBGb3IgZWFjaCBlbGVtZW50IGFmdGVyIHRoZSBmaXJzdCwKICAgKiB0aGUgdmFsdWUgaXMgdXBkYXRlZCB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW2NvbWJpbmVdCiAgICogd2l0aCB0aGUgcHJldmlvdXMgdmFsdWUgYW5kIHRoZSBlbGVtZW50LgogICAqCiAgICogV2hlbiB0aGlzIHN0cmVhbSBpcyBkb25lLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoCiAgICogdGhlIHZhbHVlIGF0IHRoYXQgdGltZS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGlzIGVtcHR5LCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoCiAgICogYW4gZXJyb3IuCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIHRoZSBjYWxsIHRvIFtjb21iaW5lXSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIGlzIHN0b3BwZWQuCiAgICovCiAgRnV0dXJlPFQ+IHJlZHVjZShUIGNvbWJpbmUoVCBwcmV2aW91cywgVCBlbGVtZW50KSkgewogICAgX0Z1dHVyZTxUPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgYm9vbCBzZWVuRmlyc3QgPSBmYWxzZTsKICAgIFQgdmFsdWU7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZWxlbWVudCkgewogICAgICAgICAgaWYgKHNlZW5GaXJzdCkgewogICAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gY29tYmluZSh2YWx1ZSwgZWxlbWVudCksIChUIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIHJlc3VsdCkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50OwogICAgICAgICAgICBzZWVuRmlyc3QgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogcmVzdWx0Ll9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKCFzZWVuRmlyc3QpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAvLyBUaHJvdyBhbmQgcmVjYXRjaCwgaW5zdGVhZCBvZiBqdXN0IGRvaW5nCiAgICAgICAgICAgICAgLy8gIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrLCBlLCB0aGVFcnJvciwgU3RhY2tUcmFjZS5jdXJyZW50KSwKICAgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2tUcmFjZSBpcyBzZXQgb24gdGhlIGVycm9yLgogICAgICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2socmVzdWx0LCBlLCBzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZSh2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBDb21iaW5lcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyBieSByZXBlYXRlZGx5IGFwcGx5aW5nIFtjb21iaW5lXS4KICAgKgogICAqIFNpbWlsYXIgdG8gW0l0ZXJhYmxlLmZvbGRdLCB0aGlzIGZ1bmN0aW9uIG1haW50YWlucyBhIHZhbHVlLAogICAqIHN0YXJ0aW5nIHdpdGggW2luaXRpYWxWYWx1ZV0gYW5kIHVwZGF0ZWQgZm9yIGVhY2ggZWxlbWVudCBvZgogICAqIHRoaXMgc3RyZWFtLgogICAqIEZvciBlYWNoIGVsZW1lbnQsIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZwogICAqIFtjb21iaW5lXSB3aXRoIHRoZSBwcmV2aW91cyB2YWx1ZSBhbmQgdGhlIGVsZW1lbnQuCiAgICoKICAgKiBXaGVuIHRoaXMgc3RyZWFtIGlzIGRvbmUsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGgKICAgKiB0aGUgdmFsdWUgYXQgdGhhdCB0aW1lLgogICAqIEZvciBhbiBlbXB0eSBzdHJlYW0sIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggW2luaXRpYWxWYWx1ZV0uCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgdGhlIGNhbGwgdG8gW2NvbWJpbmVdIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3NpbmcgaXMgc3RvcHBlZC4KICAgKi8KICBGdXR1cmU8Uz4gZm9sZDxTPihTIGluaXRpYWxWYWx1ZSwgUyBjb21iaW5lKFMgcHJldmlvdXMsIFQgZWxlbWVudCkpIHsKICAgIF9GdXR1cmU8Uz4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8Uz4oKTsKICAgIFMgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZWxlbWVudCkgewogICAgICAgICAgX3J1blVzZXJDb2RlKCgpID0+IGNvbWJpbmUodmFsdWUsIGVsZW1lbnQpLCAoUyBuZXdWYWx1ZSkgewogICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIHJlc3VsdCkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogcmVzdWx0Ll9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZSh2YWx1ZSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBDb21iaW5lcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGVsZW1lbnRzIGludG8gYSBzaW5nbGUgc3RyaW5nLgogICAqCiAgICogRWFjaCBlbGVtZW50IGlzIGNvbnZlcnRlZCB0byBhIHN0cmluZyB1c2luZyBpdHMgW09iamVjdC50b1N0cmluZ10gbWV0aG9kLgogICAqIElmIFtzZXBhcmF0b3JdIGlzIHByb3ZpZGVkLCBpdCBpcyBpbnNlcnRlZCBiZXR3ZWVuIGVsZW1lbnQgc3RyaW5nCiAgICogcmVwcmVzZW50YXRpb25zLgogICAqCiAgICogVGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgY29tYmluZWQgc3RyaW5nIHdoZW4gdGhpcyBzdHJlYW0KICAgKiBpcyBkb25lLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIHRoZSBjYWxsIHRvIFtPYmplY3QudG9TdHJpbmddIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICovCiAgRnV0dXJlPFN0cmluZz4gam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgX0Z1dHVyZTxTdHJpbmc+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFN0cmluZz4oKTsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgICAgfQogICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShlbGVtZW50KTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NhbmNlbEFuZEVycm9yV2l0aFJlcGxhY2VtZW50KHN1YnNjcmlwdGlvbiwgcmVzdWx0LCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IHJlc3VsdC5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGUoYnVmZmVyLnRvU3RyaW5nKCkpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIFtuZWVkbGVdIG9jY3VycyBpbiB0aGUgZWxlbWVudHMgcHJvdmlkZWQgYnkgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBDb21wYXJlcyBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0gdG8gW25lZWRsZV0gdXNpbmcgW09iamVjdC49PV0uCiAgICogSWYgYW4gZXF1YWwgZWxlbWVudCBpcyBmb3VuZCwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBgdHJ1ZWAuCiAgICogSWYgdGhpcyBzdHJlYW0gZW5kcyB3aXRob3V0IGZpbmRpbmcgYSBtYXRjaCwgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aAogICAqIGBmYWxzZWAuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgdGhlIGNhbGwgdG8gW09iamVjdC49PV0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKi8KICBGdXR1cmU8Ym9vbD4gY29udGFpbnMoT2JqZWN0IG5lZWRsZSkgewogICAgX0Z1dHVyZTxib29sPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxib29sPigpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIGVsZW1lbnQpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiAoZWxlbWVudCA9PSBuZWVkbGUpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBFeGVjdXRlcyBbYWN0aW9uXSBvbiBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBDb21wbGV0ZXMgdGhlIHJldHVybmVkIFtGdXR1cmVdIHdoZW4gYWxsIGVsZW1lbnRzIG9mIHRoaXMgc3RyZWFtCiAgICogaGF2ZSBiZWVuIHByb2Nlc3NlZC4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCBvciBpZiB0aGUgY2FsbCB0byBbYWN0aW9uXSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZSBmb3JFYWNoKHZvaWQgYWN0aW9uKFQgZWxlbWVudCkpIHsKICAgIF9GdXR1cmUgZnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHR5cGUgc2hvdWxkIGJlICd2b2lkJyBhbmQgaW5mZXJyZWQuCiAgICAgICAgICBfcnVuVXNlckNvZGU8ZHluYW1pYz4oKCkgPT4gYWN0aW9uKGVsZW1lbnQpLCAoXykge30sCiAgICAgICAgICAgICAgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShudWxsKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIFt0ZXN0XSBhY2NlcHRzIGFsbCBlbGVtZW50cyBwcm92aWRlZCBieSB0aGlzIHN0cmVhbS4KICAgKgogICAqIENhbGxzIFt0ZXN0XSBvbiBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICogSWYgdGhlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVuZHMgd2l0aG91dCBmaW5kaW5nIGFuIGVsZW1lbnQgdGhhdCBbdGVzdF0gcmVqZWN0cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGB0cnVlYC4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCBvciBpZiB0aGUgY2FsbCB0byBbdGVzdF0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKi8KICBGdXR1cmU8Ym9vbD4gZXZlcnkoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9GdXR1cmU8Ym9vbD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8Ym9vbD4oKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gdGVzdChlbGVtZW50KSwgKGJvb2wgaXNNYXRjaCkgewogICAgICAgICAgICBpZiAoIWlzTWF0Y2gpIHsKICAgICAgICAgICAgICBfY2FuY2VsQW5kVmFsdWUoc3Vic2NyaXB0aW9uLCBmdXR1cmUsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZSh0cnVlKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIFt0ZXN0XSBhY2NlcHRzIGFueSBlbGVtZW50IHByb3ZpZGVkIGJ5IHRoaXMgc3RyZWFtLgogICAqCiAgICogQ2FsbHMgW3Rlc3RdIG9uIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKiBJZiB0aGUgY2FsbCByZXR1cm5zIGB0cnVlYCwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBgdHJ1ZWAKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVuZHMgd2l0aG91dCBmaW5kaW5nIGFuIGVsZW1lbnQgdGhhdCBbdGVzdF0gYWNjZXB0cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgaWYgdGhlIGNhbGwgdG8gW3Rlc3RdIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICovCiAgRnV0dXJlPGJvb2w+IGFueShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX0Z1dHVyZTxib29sPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxib29sPigpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIGVsZW1lbnQpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0ZXN0KGVsZW1lbnQpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgc3RyZWFtLgogICAqCiAgICogV2FpdHMgZm9yIGFsbCBlbGVtZW50cyBvZiB0aGlzIHN0cmVhbS4gV2hlbiB0aGlzIHN0cmVhbSBlbmRzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIG51bWJlciBvZiBlbGVtZW50cy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGxpc3RlbnMgdG8gdGhpcyBzdHJlYW0sIGFuZCBhIG5vbi1icm9hZGNhc3Qgc3RyZWFtIGNhbm5vdAogICAqIGJlIHJldXNlZCBhZnRlciBmaW5kaW5nIGl0cyBsZW5ndGguCiAgICovCiAgRnV0dXJlPGludD4gZ2V0IGxlbmd0aCB7CiAgICBfRnV0dXJlPGludD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8aW50PigpOwogICAgaW50IGNvdW50ID0gMDsKICAgIHRoaXMubGlzdGVuKAogICAgICAgIChfKSB7CiAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShjb3VudCk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgc3RyZWFtIGNvbnRhaW5zIGFueSBlbGVtZW50cy4KICAgKgogICAqIFdhaXRzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbSwgdGhlbiBjb21wbGV0ZXMgdGhlIHJldHVybmVkCiAgICogZnV0dXJlIHdpdGggYHRydWVgLgogICAqIElmIHRoaXMgc3RyZWFtIGVuZHMgd2l0aG91dCBlbWl0dGluZyBhbnkgZWxlbWVudHMsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMKICAgKiBjb21wbGV0ZWQgd2l0aCBgZmFsc2VgLgogICAqCiAgICogSWYgdGhlIGZpcnN0IGV2ZW50IGlzIGFuIGVycm9yLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQKICAgKiBlcnJvci4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGxpc3RlbnMgdG8gdGhpcyBzdHJlYW0sIGFuZCBhIG5vbi1icm9hZGNhc3Qgc3RyZWFtIGNhbm5vdAogICAqIGJlIHJldXNlZCBhZnRlciBjaGVja2luZyB3aGV0aGVyIGl0IGlzIGVtcHR5LgogICAqLwogIEZ1dHVyZTxib29sPiBnZXQgaXNFbXB0eSB7CiAgICBfRnV0dXJlPGJvb2w+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPGJvb2w+KCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKF8pIHsKICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZmFsc2UpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZSh0cnVlKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIEFkYXB0IHRoaXMgc3RyZWFtIHRvIGJlIGEgYFN0cmVhbTxSPmAuCiAgICoKICAgKiBUaGlzIHN0cmVhbSBpcyB3cmFwcGVkIGFzIGEgYFN0cmVhbTxSPmAgd2hpY2ggY2hlY2tzIGF0IHJ1bi10aW1lIHRoYXQKICAgKiBlYWNoIGRhdGEgZXZlbnQgZW1pdHRlZCBieSB0aGlzIHN0cmVhbSBpcyBhbHNvIGFuIGluc3RhbmNlIG9mIFtSXS4KICAgKi8KICBTdHJlYW08Uj4gY2FzdDxSPigpID0+IFN0cmVhbS5jYXN0RnJvbTxULCBSPih0aGlzKTsKICAvKioKICAgKiBDb2xsZWN0cyBhbGwgZWxlbWVudHMgb2YgdGhpcyBzdHJlYW0gaW4gYSBbTGlzdF0uCiAgICoKICAgKiBDcmVhdGVzIGEgYExpc3Q8VD5gIGFuZCBhZGRzIGFsbCBlbGVtZW50cyBvZiB0aGlzIHN0cmVhbSB0byB0aGUgbGlzdAogICAqIGluIHRoZSBvcmRlciB0aGV5IGFycml2ZS4KICAgKiBXaGVuIHRoaXMgc3RyZWFtIGVuZHMsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBsaXN0LgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZTxMaXN0PFQ+PiB0b0xpc3QoKSB7CiAgICBMaXN0PFQ+IHJlc3VsdCA9IDxUPltdOwogICAgX0Z1dHVyZTxMaXN0PFQ+PiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxMaXN0PFQ+PigpOwogICAgdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZGF0YSkgewogICAgICAgICAgcmVzdWx0LmFkZChkYXRhKTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IGZ1dHVyZS5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENvbGxlY3RzIHRoZSBkYXRhIG9mIHRoaXMgc3RyZWFtIGluIGEgW1NldF0uCiAgICoKICAgKiBDcmVhdGVzIGEgYFNldDxUPmAgYW5kIGFkZHMgYWxsIGVsZW1lbnRzIG9mIHRoaXMgc3RyZWFtIHRvIHRoZSBzZXQuCiAgICogaW4gdGhlIG9yZGVyIHRoZXkgYXJyaXZlLgogICAqIFdoZW4gdGhpcyBzdHJlYW0gZW5kcywgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IHNldC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzZXQgaXMgdGhlIHNhbWUgdHlwZSBhcyByZXR1cm5lZCBieSBgbmV3IFNldDxUPigpYC4KICAgKiBJZiBhbm90aGVyIHR5cGUgb2Ygc2V0IGlzIG5lZWRlZCwgZWl0aGVyIHVzZSBbZm9yRWFjaF0gdG8gYWRkIGVhY2gKICAgKiBlbGVtZW50IHRvIHRoZSBzZXQsIG9yIHVzZQogICAqIGB0b0xpc3QoKS50aGVuKChsaXN0KSA9PiBuZXcgU29tZU90aGVyU2V0LmZyb20obGlzdCkpYAogICAqIHRvIGNyZWF0ZSB0aGUgc2V0LgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZTxTZXQ8VD4+IHRvU2V0KCkgewogICAgU2V0PFQ+IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTsKICAgIF9GdXR1cmU8U2V0PFQ+PiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxTZXQ8VD4+KCk7CiAgICB0aGlzLmxpc3RlbigKICAgICAgICAoVCBkYXRhKSB7CiAgICAgICAgICByZXN1bHQuYWRkKGRhdGEpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogRGlzY2FyZHMgYWxsIGRhdGEgb24gdGhpcyBzdHJlYW0sIGJ1dCBzaWduYWxzIHdoZW4gaXQgaXMgZG9uZSBvciBhbiBlcnJvcgogICAqIG9jY3VycmVkLgogICAqCiAgICogV2hlbiBzdWJzY3JpYmluZyB1c2luZyBbZHJhaW5dLCBjYW5jZWxPbkVycm9yIHdpbGwgYmUgdHJ1ZS4gVGhpcyBtZWFucwogICAqIHRoYXQgdGhlIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggdGhlIGZpcnN0IGVycm9yIG9uIHRoaXMgc3RyZWFtIGFuZCB0aGVuCiAgICogY2FuY2VsIHRoZSBzdWJzY3JpcHRpb24uCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIHRoZSBjYWxsIHRvIFtjb21iaW5lXSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIGlzIHN0b3BwZWQuCiAgICoKICAgKiBJbiBjYXNlIG9mIGEgYGRvbmVgIGV2ZW50IHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggdGhlIGdpdmVuCiAgICogW2Z1dHVyZVZhbHVlXS4KICAgKi8KICBGdXR1cmU8RT4gZHJhaW48RT4oW0UgZnV0dXJlVmFsdWVdKSA9PgogICAgICBsaXN0ZW4obnVsbCwgY2FuY2VsT25FcnJvcjogdHJ1ZSkuYXNGdXR1cmU8RT4oZnV0dXJlVmFsdWUpOwoKICAvKioKICAgKiBQcm92aWRlcyBhdCBtb3N0IHRoZSBmaXJzdCBbY291bnRdIGRhdGEgZXZlbnRzIG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogUmV0dXJucyBhIHN0cmVhbSB0aGF0IGVtaXRzIHRoZSBzYW1lIGV2ZW50cyB0aGF0IHRoaXMgc3RyZWFtIHdvdWxkCiAgICogaWYgbGlzdGVuZWQgdG8gYXQgdGhlIHNhbWUgdGltZSwKICAgKiB1bnRpbCBlaXRoZXIgdGhpcyBzdHJlYW0gZW5kcyBvciBpdCBoYXMgZW1pdHRlZCBbY291bnRdIGRhdGEgZXZlbnRzLAogICAqIGF0IHdoaWNoIHBvaW50IHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZG9uZS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIHByb2R1Y2VzIGZld2VyIHRoYW4gW2NvdW50XSBkYXRhIGV2ZW50cyBiZWZvcmUgaXQncyBkb25lLAogICAqIHNvIHdpbGwgdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKgogICAqIFN0YXJ0cyBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gd2hlbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvCiAgICogYW5kIHN0b3BzIGxpc3RlbmluZyB3aGVuIHRoZSBmaXJzdCBbY291bnRdIGRhdGEgZXZlbnRzIGhhdmUgYmVlbiByZWNlaXZlZC4KICAgKgogICAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGlzIGlzIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkgc3RyZWFtcwogICAqIGl0IGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgdGhlIHJldHVybmVkIHN0cmVhbSBoYXMgYmVlbiBsaXN0ZW5lZCB0by4KICAgKgogICAqIElmIHRoaXMgaXMgYSBicm9hZGNhc3Qgc3RyZWFtLCB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbS4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSBldmVudHMgYXJlIG9ubHkgY291bnRlZCBmcm9tIHRoZSB0aW1lCiAgICogdGhlIHJldHVybmVkIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAgKi8KICBTdHJlYW08VD4gdGFrZShpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgX1Rha2VTdHJlYW08VD4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogRm9yd2FyZHMgZGF0YSBldmVudHMgd2hpbGUgW3Rlc3RdIGlzIHN1Y2Nlc3NmdWwuCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgcHJvdmlkZXMgdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtCiAgICogdW50aWwgW3Rlc3RdIGZhaWxzIGZvciBhIGRhdGEgZXZlbnQuCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBkb25lIHdoZW4gZWl0aGVyIHRoaXMgc3RyZWFtIGlzIGRvbmUsCiAgICogb3Igd2hlbiB0aGlzIHN0cmVhbSBmaXJzdCBlbWl0cyBhIGRhdGEgZXZlbnQgdGhhdCBmYWlscyBbdGVzdF0uCiAgICoKICAgKiBUaGUgYHRlc3RgIGNhbGwgaXMgY29uc2lkZXJlZCBmYWlsaW5nIGlmIGl0IHJldHVybnMgYSBub24tYHRydWVgIHZhbHVlCiAgICogb3IgaWYgaXQgdGhyb3dzLiBJZiB0aGUgYHRlc3RgIGNhbGwgdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBhcyB0aGUKICAgKiBsYXN0IGV2ZW50IG9uIHRoZSByZXR1cm5lZCBzdHJlYW1zLgogICAqCiAgICogU3RvcHMgbGlzdGVuaW5nIHRvIHRoaXMgc3RyZWFtIGFmdGVyIHRoZSBhY2NlcHRlZCBlbGVtZW50cy4KICAgKgogICAqIEludGVybmFsbHkgdGhlIG1ldGhvZCBjYW5jZWxzIGl0cyBzdWJzY3JpcHRpb24gYWZ0ZXIgdGhlc2UgZWxlbWVudHMuIFRoaXMKICAgKiBtZWFucyB0aGF0IHNpbmdsZS1zdWJzY3JpcHRpb24gKG5vbi1icm9hZGNhc3QpIHN0cmVhbXMgYXJlIGNsb3NlZCBhbmQKICAgKiBjYW5ub3QgYmUgcmV1c2VkIGFmdGVyIGEgY2FsbCB0byB0aGlzIG1ldGhvZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIEZvciBhIGJyb2FkY2FzdCBzdHJlYW0sIHRoZSBldmVudHMgYXJlIG9ubHkgdGVzdGVkIGZyb20gdGhlIHRpbWUKICAgKiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqLwogIFN0cmVhbTxUPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIHJldHVybiBuZXcgX1Rha2VXaGlsZVN0cmVhbTxUPih0aGlzLCB0ZXN0KTsKICB9CgogIC8qKgogICAqIFNraXBzIHRoZSBmaXJzdCBbY291bnRdIGRhdGEgZXZlbnRzIGZyb20gdGhpcyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgZW1pdHMgdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtIHdvdWxkCiAgICogaWYgbGlzdGVuZWQgdG8gYXQgdGhlIHNhbWUgdGltZSwgZXhjZXB0IHRoYXQgdGhlIGZpcnN0IFtjb3VudF0KICAgKiBkYXRhIGV2ZW50cyBhcmUgbm90IGVtaXR0ZWQuCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBkb25lIHdoZW4gdGhpcyBzdHJlYW0gaXMuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBmZXdlciB0aGFuIFtjb3VudF0gZGF0YSBldmVudHMKICAgKiBiZWZvcmUgYmVpbmcgZG9uZSwgdGhlIHJldHVybmVkIHN0cmVhbSBlbWl0cyBubyBkYXRhIGV2ZW50cy4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIEZvciBhIGJyb2FkY2FzdCBzdHJlYW0sIHRoZSBldmVudHMgYXJlIG9ubHkgY291bnRlZCBmcm9tIHRoZSB0aW1lCiAgICogdGhlIHJldHVybmVkIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAgKi8KICBTdHJlYW08VD4gc2tpcChpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgX1NraXBTdHJlYW08VD4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogU2tpcCBkYXRhIGV2ZW50cyBmcm9tIHRoaXMgc3RyZWFtIHdoaWxlIHRoZXkgYXJlIG1hdGNoZWQgYnkgW3Rlc3RdLgogICAqCiAgICogUmV0dXJucyBhIHN0cmVhbSB0aGF0IGVtaXRzIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzIHN0cmVhbSwKICAgKiBleGNlcHQgdGhhdCBkYXRhIGV2ZW50cyBhcmUgbm90IGVtaXR0ZWQgdW50aWwgYSBkYXRhIGV2ZW50IGZhaWxzIGB0ZXN0YC4KICAgKiBUaGUgdGVzdCBmYWlscyB3aGVuIGNhbGxlZCB3aXRoIGEgZGF0YSBldmVudAogICAqIGlmIGl0IHJldHVybnMgYSBub24tYHRydWVgIHZhbHVlIG9yIGlmIHRoZSBjYWxsIHRvIGB0ZXN0YCB0aHJvd3MuCiAgICogSWYgdGhlIGNhbGwgdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBhcyBhbiBlcnJvciBldmVudAogICAqIG9uIHRoZSByZXR1cm5lZCBzdHJlYW0gaW5zdGVhZCBvZiB0aGUgZGF0YSBldmVudCwKICAgKiBvdGhlcndpc2UgdGhlIGV2ZW50IHRoYXQgbWFkZSBgdGVzdGAgcmV0dXJuIG5vbi10cnVlIGlzIGVtaXR0ZWQgYXMgdGhlCiAgICogZmlyc3QgZGF0YSBldmVudC4KICAgKgogICAqIEVycm9yIGFuZCBkb25lIGV2ZW50cyBhcmUgcHJvdmlkZWQgYnkgdGhlIHJldHVybmVkIHN0cmVhbSB1bm1vZGlmaWVkLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogRm9yIGEgYnJvYWRjYXN0IHN0cmVhbSwgdGhlIGV2ZW50cyBhcmUgb25seSB0ZXN0ZWQgZnJvbSB0aGUgdGltZQogICAqIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgICovCiAgU3RyZWFtPFQ+IHNraXBXaGlsZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgcmV0dXJuIG5ldyBfU2tpcFdoaWxlU3RyZWFtPFQ+KHRoaXMsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogU2tpcHMgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgZXF1YWwgdG8gdGhlIHByZXZpb3VzIGRhdGEgZXZlbnQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIHByb3ZpZGVzIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzIHN0cmVhbSwgZXhjZXB0CiAgICogdGhhdCBpdCBuZXZlciBwcm92aWRlcyB0d28gY29uc2VjdXRpdmUgZGF0YSBldmVudHMgdGhhdCBhcmUgZXF1YWwuCiAgICogVGhhdCBpcywgZXJyb3JzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcmV0dXJuZWQgc3RyZWFtLCBhbmQKICAgKiBkYXRhIGV2ZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggaWYgdGhleSBhcmUgZGlzdGluY3QgZnJvbSB0aGUgbW9zdAogICAqIHJlY2VudGx5IGVtaXR0ZWQgZGF0YSBldmVudC4KICAgKgogICAqIEVxdWFsaXR5IGlzIGRldGVybWluZWQgYnkgdGhlIHByb3ZpZGVkIFtlcXVhbHNdIG1ldGhvZC4gSWYgdGhhdCBpcwogICAqIG9taXR0ZWQsIHRoZSAnPT0nIG9wZXJhdG9yIG9uIHRoZSBsYXN0IHByb3ZpZGVkIGRhdGEgZWxlbWVudCBpcyB1c2VkLgogICAqCiAgICogSWYgW2VxdWFsc10gdGhyb3dzLCB0aGUgZGF0YSBldmVudCBpcyByZXBsYWNlZCBieSBhbiBlcnJvciBldmVudAogICAqIGNvbnRhaW5pbmcgdGhlIHRocm93biBlcnJvci4gVGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlCiAgICogb3JpZ2luYWwgc3RyZWFtIGVtaXR0aW5nIHRoZSBlcnJvciBldmVudCwgYW5kIGl0IGRvZXNuJ3QgY2hhbmdlCiAgICogdGhlIHdoYXQgdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBkYXRhIGV2ZW50IGlzLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaW5kaXZpZHVhbGx5IHBlcmZvcm0gdGhlIGBlcXVhbHNgIHRlc3QuCiAgICovCiAgU3RyZWFtPFQ+IGRpc3RpbmN0KFtib29sIGVxdWFscyhUIHByZXZpb3VzLCBUIG5leHQpXSkgewogICAgcmV0dXJuIG5ldyBfRGlzdGluY3RTdHJlYW08VD4odGhpcywgZXF1YWxzKTsKICB9CgogIC8qKgogICAqIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogU3RvcHMgbGlzdGVuaW5nIHRvIHRoaXMgc3RyZWFtIGFmdGVyIHRoZSBmaXJzdCBlbGVtZW50IGhhcyBiZWVuIHJlY2VpdmVkLgogICAqCiAgICogSW50ZXJuYWxseSB0aGUgbWV0aG9kIGNhbmNlbHMgaXRzIHN1YnNjcmlwdGlvbiBhZnRlciB0aGUgZmlyc3QgZWxlbWVudC4KICAgKiBUaGlzIG1lYW5zIHRoYXQgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkgc3RyZWFtcyBhcmUgY2xvc2VkCiAgICogYW5kIGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZ2V0dGVyLgogICAqCiAgICogSWYgYW4gZXJyb3IgZXZlbnQgb2NjdXJzIGJlZm9yZSB0aGUgZmlyc3QgZGF0YSBldmVudCwgdGhlIHJldHVybmVkIGZ1dHVyZQogICAqIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBpcyBlbXB0eSAoYSBkb25lIGV2ZW50IG9jY3VycyBiZWZvcmUgdGhlIGZpcnN0IGRhdGEgZXZlbnQpLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IuCiAgICoKICAgKiBFeGNlcHQgZm9yIHRoZSB0eXBlIG9mIHRoZSBlcnJvciwgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0bwogICAqIGB0aGlzLmVsZW1lbnRBdCgwKWAuCiAgICovCiAgRnV0dXJlPFQ+IGdldCBmaXJzdCB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgdmFsdWUpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBUaGUgbGFzdCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IgZXZlbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBpcyBlbXB0eSAodGhlIGRvbmUgZXZlbnQgaXMgdGhlIGZpcnN0IGV2ZW50KSwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLgogICAqLwogIEZ1dHVyZTxUPiBnZXQgbGFzdCB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUIHJlc3VsdDsKICAgIGJvb2wgZm91bmRSZXN1bHQgPSBmYWxzZTsKICAgIGxpc3RlbigKICAgICAgICAoVCB2YWx1ZSkgewogICAgICAgICAgZm91bmRSZXN1bHQgPSB0cnVlOwogICAgICAgICAgcmVzdWx0ID0gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAoZm91bmRSZXN1bHQpIHsKICAgICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2soZnV0dXJlLCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIFRoZSBzaW5nbGUgZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yIGV2ZW50LAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvcgogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqCiAgICogSWYgW3RoaXNdIGlzIGVtcHR5IG9yIGhhcyBtb3JlIHRoYW4gb25lIGVsZW1lbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvci4KICAgKi8KICBGdXR1cmU8VD4gZ2V0IHNpbmdsZSB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUIHJlc3VsdDsKICAgIGJvb2wgZm91bmRSZXN1bHQgPSBmYWxzZTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCB2YWx1ZSkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNlY29uZCBlbGVtZW50IHdlIGdldC4KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgICBfY2FuY2VsQW5kRXJyb3JXaXRoUmVwbGFjZW1lbnQoc3Vic2NyaXB0aW9uLCBmdXR1cmUsIGUsIHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBGaW5kcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbSBtYXRjaGluZyBbdGVzdF0uCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgaXMgY29tcGxldGVkIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0KICAgKiB0aGF0IFt0ZXN0XSByZXR1cm5zIGB0cnVlYCBmb3IuCiAgICoKICAgKiBJZiBubyBzdWNoIGVsZW1lbnQgaXMgZm91bmQgYmVmb3JlIHRoaXMgc3RyZWFtIGlzIGRvbmUsIGFuZCBhCiAgICogW29yRWxzZV0gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoZSByZXN1bHQgb2YgY2FsbGluZyBbb3JFbHNlXQogICAqIGJlY29tZXMgdGhlIHZhbHVlIG9mIHRoZSBmdXR1cmUuIElmIFtvckVsc2VdIHRocm93cywgdGhlIHJldHVybmVkCiAgICogZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciBiZWZvcmUgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLCBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIFN0b3BzIGxpc3RlbmluZyB0byB0aGlzIHN0cmVhbSBhZnRlciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBvciBlcnJvcgogICAqIGhhcyBiZWVuIHJlY2VpdmVkLgogICAqCiAgICogSW50ZXJuYWxseSB0aGUgbWV0aG9kIGNhbmNlbHMgaXRzIHN1YnNjcmlwdGlvbiBhZnRlciB0aGUgZmlyc3QgZWxlbWVudCB0aGF0CiAgICogbWF0Y2hlcyB0aGUgcHJlZGljYXRlLiBUaGlzIG1lYW5zIHRoYXQgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkKICAgKiBzdHJlYW1zIGFyZSBjbG9zZWQgYW5kIGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgbWV0aG9kLgogICAqCiAgICogSWYgYW4gZXJyb3Igb2NjdXJzLCBvciBpZiB0aGlzIHN0cmVhbSBlbmRzIHdpdGhvdXQgZmluZGluZyBhIG1hdGNoIGFuZAogICAqIHdpdGggbm8gW29yRWxzZV0gZnVuY3Rpb24gcHJvdmlkZWQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvci4KICAgKi8KICBGdXR1cmU8VD4gZmlyc3RXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSwge1Qgb3JFbHNlKCl9KSB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlKCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0ZXN0KHZhbHVlKSwgKGJvb2wgaXNNYXRjaCkgewogICAgICAgICAgICBpZiAoaXNNYXRjaCkgewogICAgICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgZnV0dXJlKSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAob3JFbHNlICE9IG51bGwpIHsKICAgICAgICAgICAgX3J1blVzZXJDb2RlKG9yRWxzZSwgZnV0dXJlLl9jb21wbGV0ZSwgZnV0dXJlLl9jb21wbGV0ZUVycm9yKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBGaW5kcyB0aGUgbGFzdCBlbGVtZW50IGluIHRoaXMgc3RyZWFtIG1hdGNoaW5nIFt0ZXN0XS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQKICAgKiBlcnJvciwgYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICoKICAgKiBPdGhlcndpc2UgYXMgW2ZpcnN0V2hlcmVdLCBleGNlcHQgdGhhdCB0aGUgbGFzdCBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kCiAgICogaW5zdGVhZCBvZiB0aGUgZmlyc3QuCiAgICogVGhhdCBtZWFucyB0aGF0IGEgbm9uLWVycm9yIHJlc3VsdCBjYW5ub3QgYmUgcHJvdmlkZWQgYmVmb3JlIHRoaXMgc3RyZWFtCiAgICogaXMgZG9uZS4KICAgKi8KICBGdXR1cmU8VD4gbGFzdFdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpLCB7VCBvckVsc2UoKX0pIHsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICAgIFQgcmVzdWx0OwogICAgYm9vbCBmb3VuZFJlc3VsdCA9IGZhbHNlOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIHZhbHVlKSB7CiAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gdHJ1ZSA9PSB0ZXN0KHZhbHVlKSwgKGJvb2wgaXNNYXRjaCkgewogICAgICAgICAgICBpZiAoaXNNYXRjaCkgewogICAgICAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9yRWxzZSAhPSBudWxsKSB7CiAgICAgICAgICAgIF9ydW5Vc2VyQ29kZShvckVsc2UsIGZ1dHVyZS5fY29tcGxldGUsIGZ1dHVyZS5fY29tcGxldGVFcnJvcik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhmdXR1cmUsIGUsIHMpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogRmluZHMgdGhlIHNpbmdsZSBlbGVtZW50IGluIHRoaXMgc3RyZWFtIG1hdGNoaW5nIFt0ZXN0XS4KICAgKgogICAqIExpa2UgW2xhc3RXaGVyZV0sIGV4Y2VwdCB0aGF0IGl0IGlzIGFuIGVycm9yIGlmIG1vcmUgdGhhbiBvbmUKICAgKiBtYXRjaGluZyBlbGVtZW50IG9jY3VycyBpbiB0aGlzIHN0cmVhbS4KICAgKi8KICBGdXR1cmU8VD4gc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCksIHtUIG9yRWxzZSgpfSkgewogICAgX0Z1dHVyZTxUPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgVCByZXN1bHQ7CiAgICBib29sIGZvdW5kUmVzdWx0ID0gZmFsc2U7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0cnVlID09IHRlc3QodmFsdWUpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgICAgICAgIF9jYW5jZWxBbmRFcnJvcldpdGhSZXBsYWNlbWVudChzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKG9yRWxzZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgX3J1blVzZXJDb2RlKG9yRWxzZSwgZnV0dXJlLl9jb21wbGV0ZSwgZnV0dXJlLl9jb21wbGV0ZUVycm9yKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgW2luZGV4XXRoIGRhdGEgZXZlbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBTdG9wcyBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gYWZ0ZXIgdGhlIFtpbmRleF10aCBkYXRhIGV2ZW50IGhhcyBiZWVuCiAgICogcmVjZWl2ZWQuCiAgICoKICAgKiBJbnRlcm5hbGx5IHRoZSBtZXRob2QgY2FuY2VscyBpdHMgc3Vic2NyaXB0aW9uIGFmdGVyIHRoZXNlIGVsZW1lbnRzLiBUaGlzCiAgICogbWVhbnMgdGhhdCBzaW5nbGUtc3Vic2NyaXB0aW9uIChub24tYnJvYWRjYXN0KSBzdHJlYW1zIGFyZSBjbG9zZWQgYW5kCiAgICogY2Fubm90IGJlIHJldXNlZCBhZnRlciBhIGNhbGwgdG8gdGhpcyBtZXRob2QuCiAgICoKICAgKiBJZiBhbiBlcnJvciBldmVudCBvY2N1cnMgYmVmb3JlIHRoZSB2YWx1ZSBpcyBmb3VuZCwgdGhlIGZ1dHVyZSBjb21wbGV0ZXMKICAgKiB3aXRoIHRoaXMgZXJyb3IuCiAgICoKICAgKiBJZiBhIGRvbmUgZXZlbnQgb2NjdXJzIGJlZm9yZSB0aGUgdmFsdWUgaXMgZm91bmQsIHRoZSBmdXR1cmUgY29tcGxldGVzCiAgICogd2l0aCBhIFtSYW5nZUVycm9yXS4KICAgKi8KICBGdXR1cmU8VD4gZWxlbWVudEF0KGludCBpbmRleCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoaW5kZXgsICJpbmRleCIpOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGluZGV4LCAiaW5kZXgiKTsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIHZhbHVlKSB7CiAgICAgICAgICBpZiAoaW5kZXggPT0gZWxlbWVudEluZGV4KSB7CiAgICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBlbGVtZW50SW5kZXggKz0gMTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IGZ1dHVyZS5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGVFcnJvcigKICAgICAgICAgICAgICBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4IiwgbnVsbCwgZWxlbWVudEluZGV4KSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHN0cmVhbSB3aXRoIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzIHN0cmVhbS4KICAgKgogICAqIFdoZW5ldmVyIG1vcmUgdGhhbiBbdGltZUxpbWl0XSBwYXNzZXMgYmV0d2VlbiB0d28gZXZlbnRzIGZyb20gdGhpcyBzdHJlYW0sCiAgICogdGhlIFtvblRpbWVvdXRdIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hpY2ggY2FuIGVtaXQgZnVydGhlciBldmVudHMgb24KICAgKiB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqCiAgICogVGhlIGNvdW50ZG93biBkb2Vzbid0IHN0YXJ0IHVudGlsIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgICogVGhlIGNvdW50ZG93biBpcyByZXNldCBldmVyeSB0aW1lIGFuIGV2ZW50IGlzIGZvcndhcmRlZCBmcm9tIHRoaXMgc3RyZWFtLAogICAqIG9yIHdoZW4gdGhpcyBzdHJlYW0gaXMgcGF1c2VkIGFuZCByZXN1bWVkLgogICAqCiAgICogVGhlIFtvblRpbWVvdXRdIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudDogYW4KICAgKiBbRXZlbnRTaW5rXSB0aGF0IGFsbG93cyBwdXR0aW5nIGV2ZW50cyBpbnRvIHRoZSByZXR1cm5lZCBzdHJlYW0uCiAgICogVGhpcyBgRXZlbnRTaW5rYCBpcyBvbmx5IHZhbGlkIGR1cmluZyB0aGUgY2FsbCB0byBbb25UaW1lb3V0XS4KICAgKiBDYWxsaW5nIFtFdmVudFNpbmsuY2xvc2VdIG9uIHRoZSBzaW5rIHBhc3NlZCB0byBbb25UaW1lb3V0XSBjbG9zZXMgdGhlCiAgICogcmV0dXJuZWQgc3RyZWFtLCBhbmQgbm8gZnVydGhlciBldmVudHMgYXJlIHByb2Nlc3NlZC4KICAgKgogICAqIElmIFtvblRpbWVvdXRdIGlzIG9taXR0ZWQsIGEgdGltZW91dCB3aWxsIGp1c3QgcHV0IGEgW1RpbWVvdXRFeGNlcHRpb25dCiAgICogaW50byB0aGUgZXJyb3IgY2hhbm5lbCBvZiB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqIElmIHRoZSBjYWxsIHRvIFtvblRpbWVvdXRdIHRocm93cywgdGhlIGVycm9yIGlzIGVtaXR0ZWQgb24gdGhlIHJldHVybmVkCiAgICogc3RyZWFtLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaGF2ZSBpdHMgaW5kaXZpZHVhbGx5IHRpbWVyIHRoYXQgc3RhcnRzIGNvdW50aW5nIG9uIGxpc3RlbiwKICAgKiBhbmQgdGhlIHN1YnNjcmlwdGlvbnMnIHRpbWVycyBjYW4gYmUgcGF1c2VkIGluZGl2aWR1YWxseS4KICAgKi8KICBTdHJlYW08VD4gdGltZW91dChEdXJhdGlvbiB0aW1lTGltaXQsIHt2b2lkIG9uVGltZW91dChFdmVudFNpbms8VD4gc2luayl9KSB7CiAgICBfU3RyZWFtQ29udHJvbGxlckJhc2U8VD4gY29udHJvbGxlcjsKICAgIC8vIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBzZXQgb24gbGlzdGVuLgogICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbjsKICAgIFRpbWVyIHRpbWVyOwogICAgWm9uZSB6b25lOwogICAgX1RpbWVyQ2FsbGJhY2sgdGltZW91dDsKCiAgICB2b2lkIG9uRGF0YShUIGV2ZW50KSB7CiAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgICAgLy8gSXQgbWlnaHQgY2xvc2UgdGhlIHN0cmVhbSBhbmQgY2FuY2VsIHRpbWVyLCBzbyBjcmVhdGUgcmVjdXJpbmcgVGltZXIKICAgICAgLy8gYmVmb3JlIGNhbGxpbmcgaW50byBhZGQoKTsKICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zNzU2NQogICAgICBjb250cm9sbGVyLmFkZChldmVudCk7CiAgICB9CgogICAgdm9pZCBvbkVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgIGFzc2VydChjb250cm9sbGVyIGlzIF9TdHJlYW1Db250cm9sbGVyIHx8CiAgICAgICAgICBjb250cm9sbGVyIGlzIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKTsKICAgICAgY29udHJvbGxlci5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOyAvLyBBdm9pZCBab25lIGVycm9yIHJlcGxhY2VtZW50LgogICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgIH0KCiAgICB2b2lkIG9uRG9uZSgpIHsKICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0KCiAgICB2b2lkIG9uTGlzdGVuKCkgewogICAgICAvLyBUaGlzIGlzIHRoZSBvbkxpc3RlbiBjYWxsYmFjayBmb3Igb2YgY29udHJvbGxlci4KICAgICAgLy8gSXQgcnVucyBpbiB0aGUgc2FtZSB6b25lIHRoYXQgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCBpbi4KICAgICAgLy8gVXNlIHRoYXQgem9uZSBmb3IgY3JlYXRpbmcgdGltZXJzIGFuZCBydW5uaW5nIHRoZSBvblRpbWVvdXQKICAgICAgLy8gY2FsbGJhY2suCiAgICAgIHpvbmUgPSBab25lLmN1cnJlbnQ7CiAgICAgIGlmIChvblRpbWVvdXQgPT0gbnVsbCkgewogICAgICAgIHRpbWVvdXQgPSAoKSB7CiAgICAgICAgICBjb250cm9sbGVyLmFkZEVycm9yKAogICAgICAgICAgICAgIG5ldyBUaW1lb3V0RXhjZXB0aW9uKCJObyBzdHJlYW0gZXZlbnQiLCB0aW1lTGltaXQpLCBudWxsKTsKICAgICAgICB9OwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgcmV0dXJuIHR5cGUgc2hvdWxkIGJlICd2b2lkJywgYW5kIHRoZSB0eXBlCiAgICAgICAgLy8gc2hvdWxkIGJlIGluZmVycmVkLgogICAgICAgIHZhciByZWdpc3RlcmVkT25UaW1lb3V0ID0KICAgICAgICAgICAgem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgRXZlbnRTaW5rPFQ+PihvblRpbWVvdXQpOwogICAgICAgIHZhciB3cmFwcGVyID0gbmV3IF9Db250cm9sbGVyRXZlbnRTaW5rV3JhcHBlcjxUPihudWxsKTsKICAgICAgICB0aW1lb3V0ID0gKCkgewogICAgICAgICAgd3JhcHBlci5fc2luayA9IGNvbnRyb2xsZXI7IC8vIE9ubHkgdmFsaWQgZHVyaW5nIGNhbGwuCiAgICAgICAgICB6b25lLnJ1blVuYXJ5R3VhcmRlZChyZWdpc3RlcmVkT25UaW1lb3V0LCB3cmFwcGVyKTsKICAgICAgICAgIHdyYXBwZXIuX3NpbmsgPSBudWxsOwogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKG9uRGF0YSwgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUpOwogICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgIH0KCiAgICBGdXR1cmUgb25DYW5jZWwoKSB7CiAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICBGdXR1cmUgcmVzdWx0ID0gc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICBzdWJzY3JpcHRpb24gPSBudWxsOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGNvbnRyb2xsZXIgPSBpc0Jyb2FkY2FzdAogICAgICAgID8gbmV3IF9TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPihvbkxpc3Rlbiwgb25DYW5jZWwpCiAgICAgICAgOiBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG9uTGlzdGVuLCAoKSB7CiAgICAgICAgICAgIC8vIERvbid0IG51bGwgdGhlIHRpbWVyLCBvbkNhbmNlbCBtYXkgY2FsbCBjYW5jZWwgYWdhaW4uCiAgICAgICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgICAgICBzdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgICAgIH0sICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgICAgICAgIH0sIG9uQ2FuY2VsKTsKICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9Cn0KCi8qKgogKiBBIHN1YnNjcmlwdGlvbiBvbiBldmVudHMgZnJvbSBhIFtTdHJlYW1dLgogKgogKiBXaGVuIHlvdSBsaXN0ZW4gb24gYSBbU3RyZWFtXSB1c2luZyBbU3RyZWFtLmxpc3Rlbl0sCiAqIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0gb2JqZWN0IGlzIHJldHVybmVkLgogKgogKiBUaGUgc3Vic2NyaXB0aW9uIHByb3ZpZGVzIGV2ZW50cyB0byB0aGUgbGlzdGVuZXIsCiAqIGFuZCBob2xkcyB0aGUgY2FsbGJhY2tzIHVzZWQgdG8gaGFuZGxlIHRoZSBldmVudHMuCiAqIFRoZSBzdWJzY3JpcHRpb24gY2FuIGFsc28gYmUgdXNlZCB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBldmVudHMsCiAqIG9yIHRvIHRlbXBvcmFyaWx5IHBhdXNlIHRoZSBldmVudHMgZnJvbSB0aGUgc3RyZWFtLgogKi8KYWJzdHJhY3QgY2xhc3MgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICAvKioKICAgKiBDYW5jZWxzIHRoaXMgc3Vic2NyaXB0aW9uLgogICAqCiAgICogQWZ0ZXIgdGhpcyBjYWxsLCB0aGUgc3Vic2NyaXB0aW9uIG5vIGxvbmdlciByZWNlaXZlcyBldmVudHMuCiAgICoKICAgKiBUaGUgc3RyZWFtIG1heSBuZWVkIHRvIHNodXQgZG93biB0aGUgc291cmNlIG9mIGV2ZW50cyBhbmQgY2xlYW4gdXAgYWZ0ZXIKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGVkLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGlzIGNvbXBsZXRlZCBvbmNlIHRoZSBzdHJlYW0gaGFzIGZpbmlzaGVkCiAgICogaXRzIGNsZWFudXAuCiAgICoKICAgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBtYXkgYWxzbyByZXR1cm4gYG51bGxgIGlmIG5vIGNsZWFudXAgd2FzIG5lY2Vzc2FyeS4KICAgKiBSZXR1cm5pbmcgYG51bGxgIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBiZSBhdm9pZGVkLgogICAqCiAgICogVHlwaWNhbGx5LCBmdXR1cmVzIGFyZSByZXR1cm5lZCB3aGVuIHRoZSBzdHJlYW0gbmVlZHMgdG8gcmVsZWFzZSByZXNvdXJjZXMuCiAgICogRm9yIGV4YW1wbGUsIGEgc3RyZWFtIG1pZ2h0IG5lZWQgdG8gY2xvc2UgYW4gb3BlbiBmaWxlIChhcyBhbiBhc3luY2hyb25vdXMKICAgKiBvcGVyYXRpb24pLiBJZiB0aGUgbGlzdGVuZXIgd2FudHMgdG8gZGVsZXRlIHRoZSBmaWxlIGFmdGVyIGhhdmluZwogICAqIGNhbmNlbGVkIHRoZSBzdWJzY3JpcHRpb24sIGl0IG11c3Qgd2FpdCBmb3IgdGhlIGNsZWFudXAgZnV0dXJlIHRvIGNvbXBsZXRlLgogICAqCiAgICogQSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggYSBgbnVsbGAgdmFsdWUuCiAgICogSWYgdGhlIGNsZWFudXAgdGhyb3dzLCB3aGljaCBpdCByZWFsbHkgc2hvdWxkbid0LCB0aGUgcmV0dXJuZWQgZnV0dXJlCiAgICogY29tcGxldGVzIHdpdGggdGhhdCBlcnJvci4KICAgKi8KICBGdXR1cmUgY2FuY2VsKCk7CgogIC8qKgogICAqIFJlcGxhY2VzIHRoZSBkYXRhIGV2ZW50IGhhbmRsZXIgb2YgdGhpcyBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgW2hhbmRsZURhdGFdIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBzdHJlYW0KICAgKiBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KICAgKiBJZiBbaGFuZGxlRGF0YV0gaXMgYG51bGxgLCBmdXJ0aGVyIGVsZW1lbnRzIGFyZSBpZ25vcmVkLgogICAqCiAgICogVGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIGN1cnJlbnQgaGFuZGxlciBzZXQgYnkgdGhlIGludm9jYXRpb24gb2YKICAgKiBbU3RyZWFtLmxpc3Rlbl0gb3IgYnkgYSBwcmV2aW91cyBjYWxsIHRvIFtvbkRhdGFdLgogICAqLwogIHZvaWQgb25EYXRhKHZvaWQgaGFuZGxlRGF0YShUIGRhdGEpKTsKCiAgLyoqCiAgICogUmVwbGFjZXMgdGhlIGVycm9yIGV2ZW50IGhhbmRsZXIgb2YgdGhpcyBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgW2hhbmRsZUVycm9yXSBmdW5jdGlvbiBtdXN0IGJlIGFibGUgdG8gYmUgY2FsbGVkIHdpdGggZWl0aGVyCiAgICogb25lIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHdpdGggdHdvIHBvc2l0aW9uYWwgYXJndW1lbnRzCiAgICogd2hlcmUgdGhlIHNlY29uZHMgaXMgYWx3YXlzIGEgW1N0YWNrVHJhY2VdLgogICAqCiAgICogVGhlIFtoYW5kbGVFcnJvcl0gYXJndW1lbnQgbWF5IGJlIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBmdXJ0aGVyCiAgICogZXJyb3IgZXZlbnRzIGFyZSBjb25zaWRlcmVkIHVuaGFuZGxlZCwgYW5kIHdpbGwgYmUgcmVwb3J0ZWQgdG8KICAgKiBbWm9uZS5oYW5kbGVVbmNhdWdodEVycm9yXS4KICAgKgogICAqIFRoZSBwcm92aWRlZCBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGFsbCBlcnJvciBldmVudHMgZnJvbSB0aGUKICAgKiBzdHJlYW0gc3Vic2NyaXB0aW9uLgogICAqCiAgICogVGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIGN1cnJlbnQgaGFuZGxlciBzZXQgYnkgdGhlIGludm9jYXRpb24gb2YKICAgKiBbU3RyZWFtLmxpc3Rlbl0sIGJ5IGNhbGxpbmcgW2FzRnV0dXJlXSwgb3IgYnkgYSBwcmV2aW91cyBjYWxsIHRvIFtvbkVycm9yXS4KICAgKi8KICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpOwoKICAvKioKICAgKiBSZXBsYWNlcyB0aGUgZG9uZSBldmVudCBoYW5kbGVyIG9mIHRoaXMgc3Vic2NyaXB0aW9uLgogICAqCiAgICogVGhlIFtoYW5kbGVEb25lXSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGNsb3Nlcy4KICAgKiBUaGUgdmFsdWUgbWF5IGJlIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBubyBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCByZXBsYWNlcyB0aGUgY3VycmVudCBoYW5kbGVyIHNldCBieSB0aGUgaW52b2NhdGlvbiBvZgogICAqIFtTdHJlYW0ubGlzdGVuXSwgYnkgY2FsbGluZyBbYXNGdXR1cmVdLCBvciBieSBhIHByZXZpb3VzIGNhbGwgdG8gW29uRG9uZV0uCiAgICovCiAgdm9pZCBvbkRvbmUodm9pZCBoYW5kbGVEb25lKCkpOwoKICAvKioKICAgKiBSZXF1ZXN0IHRoYXQgdGhlIHN0cmVhbSBwYXVzZXMgZXZlbnRzIHVudGlsIGZ1cnRoZXIgbm90aWNlLgogICAqCiAgICogV2hpbGUgcGF1c2VkLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgbm90IGZpcmUgYW55IGV2ZW50cy4KICAgKiBJZiBpdCByZWNlaXZlcyBldmVudHMgZnJvbSBpdHMgc291cmNlLCB0aGV5IHdpbGwgYmUgYnVmZmVyZWQgdW50aWwKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGlzIHJlc3VtZWQuCiAgICogRm9yIG5vbi1icm9hZGNhc3Qgc3RyZWFtcywgdGhlIHVuZGVybHlpbmcgc291cmNlIGlzIHVzdWFsbHkgaW5mb3JtZWQKICAgKiBhYm91dCB0aGUgcGF1c2UsCiAgICogc28gaXQgY2FuIHN0b3AgZ2VuZXJhdGluZyBldmVudHMgdW50aWwgdGhlIHN1YnNjcmlwdGlvbiBpcyByZXN1bWVkLgogICAqCiAgICogVG8gYXZvaWQgYnVmZmVyaW5nIGV2ZW50cyBvbiBhIGJyb2FkY2FzdCBzdHJlYW0sIGl0IGlzIGJldHRlciB0bwogICAqIGNhbmNlbCB0aGlzIHN1YnNjcmlwdGlvbiwgYW5kIHN0YXJ0IHRvIGxpc3RlbiBhZ2FpbiB3aGVuIGV2ZW50cwogICAqIGFyZSBuZWVkZWQsIGlmIHRoZSBpbnRlcm1lZGlhdGUgZXZlbnRzIGFyZSBub3QgaW1wb3J0YW50LgogICAqCiAgICogSWYgW3Jlc3VtZVNpZ25hbF0gaXMgcHJvdmlkZWQsIHRoZSBzdHJlYW0gc3Vic2NyaXB0aW9uIHdpbGwgdW5kbyB0aGUgcGF1c2UKICAgKiB3aGVuIHRoZSBmdXR1cmUgY29tcGxldGVzLCBhcyBpZiBieSBhIGNhbGwgdG8gW3Jlc3VtZV0uCiAgICogSWYgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwKICAgKiB0aGUgc3RyZWFtIHdpbGwgc3RpbGwgcmVzdW1lLCBidXQgdGhlIGVycm9yIHdpbGwgYmUgY29uc2lkZXJlZCB1bmhhbmRsZWQKICAgKiBhbmQgaXMgcGFzc2VkIHRvIFtab25lLmhhbmRsZVVuY2F1Z2h0RXJyb3JdLgogICAqCiAgICogQSBjYWxsIHRvIFtyZXN1bWVdIHdpbGwgYWxzbyB1bmRvIGEgcGF1c2UuCiAgICoKICAgKiBJZiB0aGUgc3Vic2NyaXB0aW9uIGlzIHBhdXNlZCBtb3JlIHRoYW4gb25jZSwgYW4gZXF1YWwgbnVtYmVyCiAgICogb2YgcmVzdW1lcyBtdXN0IGJlIHBlcmZvcm1lZCB0byByZXN1bWUgdGhlIHN0cmVhbS4KICAgKiBDYWxscyB0byBbcmVzdW1lXSBhbmQgdGhlIGNvbXBsZXRpb24gb2YgYSBbcmVzdW1lU2lnbmFsXSBhcmUKICAgKiBpbnRlcmNoYW5nZWFibGUgLSB0aGUgW3BhdXNlXSB3aGljaCB3YXMgcGFzc2VkIGEgW3Jlc3VtZVNpZ25hbF0gbWF5IGJlCiAgICogZW5kZWQgYnkgYSBjYWxsIHRvIFtyZXN1bWVdLCBhbmQgY29tcGxldGluZyB0aGUgW3Jlc3VtZVNpZ25hbF0gbWF5IGVuZCBhCiAgICogZGlmZmVyZW50IFtwYXVzZV0uCiAgICoKICAgKiBJdCBpcyBzYWZlIHRvIFtyZXN1bWVdIG9yIGNvbXBsZXRlIGEgW3Jlc3VtZVNpZ25hbF0gZXZlbiB3aGVuIHRoZQogICAqIHN1YnNjcmlwdGlvbiBpcyBub3QgcGF1c2VkLCBhbmQgdGhlIHJlc3VtZSB3aWxsIGhhdmUgbm8gZWZmZWN0LgogICAqCiAgICogQ3VycmVudGx5IERPTSBzdHJlYW1zIHNpbGVudGx5IGRyb3AgZXZlbnRzIHdoZW4gdGhlIHN0cmVhbSBpcyBwYXVzZWQuIFRoaXMKICAgKiBpcyBhIGJ1ZyBhbmQgd2lsbCBiZSBmaXhlZC4KICAgKi8KICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSk7CgogIC8qKgogICAqIFJlc3VtZSBhZnRlciBhIHBhdXNlLgogICAqCiAgICogVGhpcyB1bmRvZXMgb25lIHByZXZpb3VzIGNhbGwgdG8gW3BhdXNlXS4KICAgKiBXaGVuIGFsbCBwcmV2aW91c2x5IGNhbGxzIHRvIFtwYXVzZV0gaGF2ZSBiZWVuIG1hdGNoZWQgYnkgYSBjYWxscyB0bwogICAqIFtyZXN1bWVdLCBwb3NzaWJseSB0aHJvdWdoIGEgYHJlc3VtZVNpZ25hbGAgcGFzc2VkIHRvIFtwYXVzZV0sCiAgICogdGhlIHN0cmVhbSBzdWJzY3JpcHRpb24gbWF5IGVtaXQgZXZlbnRzIGFnYWluLgogICAqCiAgICogSXQgaXMgc2FmZSB0byBbcmVzdW1lXSBldmVuIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiBpcyBub3QgcGF1c2VkLCBhbmQgdGhlCiAgICogcmVzdW1lIHdpbGwgaGF2ZSBubyBlZmZlY3QuCiAgICovCiAgdm9pZCByZXN1bWUoKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgW1N0cmVhbVN1YnNjcmlwdGlvbl0gaXMgY3VycmVudGx5IHBhdXNlZC4KICAgKgogICAqIElmIHRoZXJlIGhhdmUgYmVlbiBtb3JlIGNhbGxzIHRvIFtwYXVzZV0gdGhhbiB0byBbcmVzdW1lXSBvbiB0aGlzCiAgICogc3RyZWFtIHN1YnNjcmlwdGlvbiwgdGhlIHN1YnNjcmlwdGlvbiBpcyBwYXVzZWQsIGFuZCB0aGlzIGdldHRlcgogICAqIHJldHVybnMgYHRydWVgLgogICAqCiAgICogUmV0dXJucyBgZmFsc2VgIGlmIHRoZSBzdHJlYW0gY2FuIGN1cnJlbnRseSBlbWl0IGV2ZW50cywgb3IgaWYKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBjb21wbGV0ZWQgb3IgYmVlbiBjYW5jZWxsZWQuCiAgICovCiAgYm9vbCBnZXQgaXNQYXVzZWQ7CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgdGhhdCBoYW5kbGVzIHRoZSBbb25Eb25lXSBhbmQgW29uRXJyb3JdIGNhbGxiYWNrcy4KICAgKgogICAqIFRoaXMgbWV0aG9kICpvdmVyd3JpdGVzKiB0aGUgZXhpc3RpbmcgW29uRG9uZV0gYW5kIFtvbkVycm9yXSBjYWxsYmFja3MKICAgKiB3aXRoIG5ldyBvbmVzIHRoYXQgY29tcGxldGUgdGhlIHJldHVybmVkIGZ1dHVyZS4KICAgKgogICAqIEluIGNhc2Ugb2YgYW4gZXJyb3IgdGhlIHN1YnNjcmlwdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgY2FuY2VsIChldmVuCiAgICogd2hlbiBpdCB3YXMgbGlzdGVuaW5nIHdpdGggYGNhbmNlbE9uRXJyb3JgIHNldCB0byBgZmFsc2VgKS4KICAgKgogICAqIEluIGNhc2Ugb2YgYSBgZG9uZWAgZXZlbnQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGUgZ2l2ZW4KICAgKiBbZnV0dXJlVmFsdWVdLgogICAqLwogIEZ1dHVyZTxFPiBhc0Z1dHVyZTxFPihbRSBmdXR1cmVWYWx1ZV0pOwp9CgovKioKICogQSBbU2lua10gdGhhdCBzdXBwb3J0cyBhZGRpbmcgZXJyb3JzLgogKgogKiBUaGlzIG1ha2VzIGl0IHN1aXRhYmxlIGZvciBjYXB0dXJpbmcgdGhlIHJlc3VsdHMgb2YgYXN5bmNocm9ub3VzCiAqIGNvbXB1dGF0aW9ucywgd2hpY2ggY2FuIGNvbXBsZXRlIHdpdGggYSB2YWx1ZSBvciBhbiBlcnJvci4KICoKICogVGhlIFtFdmVudFNpbmtdIGhhcyBiZWVuIGRlc2lnbmVkIHRvIGhhbmRsZSBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20KICogW1N0cmVhbV1zLiBTZWUsIGZvciBleGFtcGxlLCBbU3RyZWFtLmV2ZW50VHJhbnNmb3JtZWRdIHdoaWNoIHVzZXMKICogYEV2ZW50U2lua2BzIHRvIHRyYW5zZm9ybSBldmVudHMuCiAqLwphYnN0cmFjdCBjbGFzcyBFdmVudFNpbms8VD4gaW1wbGVtZW50cyBTaW5rPFQ+IHsKICAvKioKICAgKiBBZGRzIGEgZGF0YSBbZXZlbnRdIHRvIHRoZSBzaW5rLgogICAqCiAgICogTXVzdCBub3QgYmUgY2FsbGVkIG9uIGEgY2xvc2VkIHNpbmsuCiAgICovCiAgdm9pZCBhZGQoVCBldmVudCk7CgogIC8qKgogICAqIEFkZHMgYW4gW2Vycm9yXSB0byB0aGUgc2luay4KICAgKgogICAqIE11c3Qgbm90IGJlIGNhbGxlZCBvbiBhIGNsb3NlZCBzaW5rLgogICAqLwogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSk7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc2luay4KICAgKgogICAqIENhbGxpbmcgdGhpcyBtZXRob2QgbW9yZSB0aGFuIG9uY2UgaXMgYWxsb3dlZCwgYnV0IGRvZXMgbm90aGluZy4KICAgKgogICAqIE5laXRoZXIgW2FkZF0gbm9yIFthZGRFcnJvcl0gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBtZXRob2QuCiAgICovCiAgdm9pZCBjbG9zZSgpOwp9CgovKiogW1N0cmVhbV0gd3JhcHBlciB0aGF0IG9ubHkgZXhwb3NlcyB0aGUgW1N0cmVhbV0gaW50ZXJmYWNlLiAqLwpjbGFzcyBTdHJlYW1WaWV3PFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICBmaW5hbCBTdHJlYW08VD4gX3N0cmVhbTsKCiAgY29uc3QgU3RyZWFtVmlldyhTdHJlYW08VD4gc3RyZWFtKQogICAgICA6IF9zdHJlYW0gPSBzdHJlYW0sCiAgICAgICAgc3VwZXIuX2ludGVybmFsKCk7CgogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IF9zdHJlYW0uaXNCcm9hZGNhc3Q7CgogIFN0cmVhbTxUPiBhc0Jyb2FkY2FzdFN0cmVhbSgKICAgICAgICAgIHt2b2lkIG9uTGlzdGVuKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pLAogICAgICAgICAgdm9pZCBvbkNhbmNlbChTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKX0pID0+CiAgICAgIF9zdHJlYW0uYXNCcm9hZGNhc3RTdHJlYW0ob25MaXN0ZW46IG9uTGlzdGVuLCBvbkNhbmNlbDogb25DYW5jZWwpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgdmFsdWUpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQp9CgovKioKICogQWJzdHJhY3QgaW50ZXJmYWNlIGZvciBhICJzaW5rIiBhY2NlcHRpbmcgbXVsdGlwbGUgZW50aXJlIHN0cmVhbXMuCiAqCiAqIEEgY29uc3VtZXIgY2FuIGFjY2VwdCBhIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzdHJlYW1zIHVzaW5nIFthZGRTdHJlYW1dLAogKiBhbmQgd2hlbiBubyBmdXJ0aGVyIGRhdGEgbmVlZCB0byBiZSBhZGRlZCwgdGhlIFtjbG9zZV0gbWV0aG9kIHRlbGxzIHRoZQogKiBjb25zdW1lciB0byBjb21wbGV0ZSBpdHMgd29yayBhbmQgc2h1dCBkb3duLgogKgogKiBUaGUgW1N0cmVhbS5waXBlXSBhY2NlcHRzIGEgYFN0cmVhbUNvbnN1bWVyYCBhbmQgd2lsbCBwYXNzIHRoZSBzdHJlYW0KICogdG8gdGhlIGNvbnN1bWVyJ3MgW2FkZFN0cmVhbV0gbWV0aG9kLiBXaGVuIHRoYXQgY29tcGxldGVzLCBpdCB3aWxsCiAqIGNhbGwgW2Nsb3NlXSBhbmQgdGhlbiBjb21wbGV0ZSBpdHMgb3duIHJldHVybmVkIGZ1dHVyZS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbUNvbnN1bWVyPFM+IHsKICAvKioKICAgKiBDb25zdW1lcyB0aGUgZWxlbWVudHMgb2YgW3N0cmVhbV0uCiAgICoKICAgKiBMaXN0ZW5zIG9uIFtzdHJlYW1dIGFuZCBkb2VzIHNvbWV0aGluZyBmb3IgZWFjaCBldmVudC4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggaXMgY29tcGxldGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBkb25lIGJlaW5nIGFkZGVkLAogICAqIGFuZCB0aGUgY29uc3VtZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGEgbmV3IHN0cmVhbS4KICAgKiBObyBmdXJ0aGVyIGNhbGxzIHRvIFthZGRTdHJlYW1dIG9yIFtjbG9zZV0gc2hvdWxkIGhhcHBlbiBiZWZvcmUgdGhlCiAgICogcmV0dXJuZWQgZnV0dXJlIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBUaGUgY29uc3VtZXIgbWF5IHN0b3AgbGlzdGVuaW5nIHRvIHRoZSBzdHJlYW0gYWZ0ZXIgYW4gZXJyb3IsCiAgICogaXQgbWF5IGNvbnN1bWUgYWxsIHRoZSBlcnJvcnMgYW5kIG9ubHkgc3RvcCBhdCBhIGRvbmUgZXZlbnQsCiAgICogb3IgaXQgbWF5IGJlIGNhbmNlbGVkIGVhcmx5IGlmIHRoZSByZWNlaXZlciBkb24ndCB3YW50IGFueSBmdXJ0aGVyIGV2ZW50cy4KICAgKgogICAqIElmIHRoZSBjb25zdW1lciBzdG9wcyBsaXN0ZW5pbmcgYmVjYXVzZSBvZiBzb21lIGVycm9yIHByZXZlbnRpbmcgaXQKICAgKiBmcm9tIGNvbnRpbnVpbmcsIGl0IG1heSByZXBvcnQgdGhpcyBlcnJvciBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLAogICAqIG90aGVyd2lzZSBpdCB3aWxsIGp1c3QgY29tcGxldGUgdGhlIGZ1dHVyZSB3aXRoIGBudWxsYC4KICAgKi8KICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxTPiBzdHJlYW0pOwoKICAvKioKICAgKiBUZWxscyB0aGUgY29uc3VtZXIgdGhhdCBubyBmdXJ0aGVyIHN0cmVhbXMgd2lsbCBiZSBhZGRlZC4KICAgKgogICAqIFRoaXMgYWxsb3dzIHRoZSBjb25zdW1lciB0byBjb21wbGV0ZSBhbnkgcmVtYWluaW5nIHdvcmsgYW5kIHJlbGVhc2UKICAgKiByZXNvdXJjZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZAogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCBpcyBjb21wbGV0ZWQgd2hlbiB0aGUgY29uc3VtZXIgaGFzIHNodXQgZG93bi4KICAgKiBJZiBjbGVhbmluZyB1cCBjYW4gZmFpbCwgdGhlIGVycm9yIG1heSBiZSByZXBvcnRlZCBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLAogICAqIG90aGVyd2lzZSBpdCBjb21wbGV0ZXMgd2l0aCBgbnVsbGAuCiAgICovCiAgRnV0dXJlIGNsb3NlKCk7Cn0KCi8qKgogKiBBIG9iamVjdCB0aGF0IGFjY2VwdHMgc3RyZWFtIGV2ZW50cyBib3RoIHN5bmNocm9ub3VzbHkgYW5kIGFzeW5jaHJvbm91c2x5LgogKgogKiBBIFtTdHJlYW1TaW5rXSBjb21iaW5lcyB0aGUgbWV0aG9kcyBmcm9tIFtTdHJlYW1Db25zdW1lcl0gYW5kIFtFdmVudFNpbmtdLgogKgogKiBUaGUgW0V2ZW50U2lua10gbWV0aG9kcyBjYW4ndCBiZSB1c2VkIHdoaWxlIHRoZSBbYWRkU3RyZWFtXSBpcyBjYWxsZWQuCiAqIEFzIHNvb24gYXMgdGhlIFthZGRTdHJlYW1dJ3MgW0Z1dHVyZV0gY29tcGxldGVzIHdpdGggYSB2YWx1ZSwgdGhlCiAqIFtFdmVudFNpbmtdIG1ldGhvZHMgY2FuIGJlIHVzZWQgYWdhaW4uCiAqCiAqIElmIFthZGRTdHJlYW1dIGlzIGNhbGxlZCBhZnRlciBhbnkgb2YgdGhlIFtFdmVudFNpbmtdIG1ldGhvZHMsIGl0J2xsCiAqIGJlIGRlbGF5ZWQgdW50aWwgdGhlIHVuZGVybHlpbmcgc3lzdGVtIGhhcyBjb25zdW1lZCB0aGUgZGF0YSBhZGRlZCBieSB0aGUKICogW0V2ZW50U2lua10gbWV0aG9kcy4KICoKICogV2hlbiBbRXZlbnRTaW5rXSBtZXRob2RzIGFyZSB1c2VkLCB0aGUgW2RvbmVdIFtGdXR1cmVdIGNhbiBiZSB1c2VkIHRvCiAqIGNhdGNoIGFueSBlcnJvcnMuCiAqCiAqIFdoZW4gW2Nsb3NlXSBpcyBjYWxsZWQsIGl0IHdpbGwgcmV0dXJuIHRoZSBbZG9uZV0gW0Z1dHVyZV0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1TaW5rPFM+IGltcGxlbWVudHMgRXZlbnRTaW5rPFM+LCBTdHJlYW1Db25zdW1lcjxTPiB7CiAgLyoqCiAgICogVGVsbHMgdGhlIHN0cmVhbSBzaW5rIHRoYXQgbm8gZnVydGhlciBzdHJlYW1zIHdpbGwgYmUgYWRkZWQuCiAgICoKICAgKiBUaGlzIGFsbG93cyB0aGUgc3RyZWFtIHNpbmsgdG8gY29tcGxldGUgYW55IHJlbWFpbmluZyB3b3JrIGFuZCByZWxlYXNlCiAgICogcmVzb3VyY2VzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQKICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggaXMgY29tcGxldGVkIHdoZW4gdGhlIHN0cmVhbSBzaW5rIGhhcyBzaHV0IGRvd24uCiAgICogSWYgY2xlYW5pbmcgdXAgY2FuIGZhaWwsIHRoZSBlcnJvciBtYXkgYmUgcmVwb3J0ZWQgaW4gdGhlIHJldHVybmVkIGZ1dHVyZSwKICAgKiBvdGhlcndpc2UgaXQgY29tcGxldGVzIHdpdGggYG51bGxgLgogICAqCiAgICogUmV0dXJucyB0aGUgc2FtZSBmdXR1cmUgYXMgW2RvbmVdLgogICAqCiAgICogVGhlIHN0cmVhbSBzaW5rIG1heSBjbG9zZSBiZWZvcmUgdGhlIFtjbG9zZV0gbWV0aG9kIGlzIGNhbGxlZCwgZWl0aGVyIGR1ZQogICAqIHRvIGFuIGVycm9yIG9yIGJlY2F1c2UgaXQgaXMgaXRzZWxmIHByb3ZpZGluZyBldmVudHMgdG8gc29tZW9uZSB3aG8gaGFzCiAgICogc3RvcHBlZCBsaXN0ZW5pbmcuIEluIHRoYXQgY2FzZSwgdGhlIFtkb25lXSBmdXR1cmUgaXMgY29tcGxldGVkIGZpcnN0LAogICAqIGFuZCB0aGUgYGNsb3NlYCBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIGBkb25lYCBmdXR1cmUgd2hlbiBjYWxsZWQuCiAgICoKICAgKiBVbmlmaWVzIFtTdHJlYW1Db25zdW1lci5jbG9zZV0gYW5kIFtFdmVudFNpbmsuY2xvc2VdIHdoaWNoIGJvdGggbWFyayB0aGVpcgogICAqIG9iamVjdCBhcyBub3QgZXhwZWN0aW5nIGFueSBmdXJ0aGVyIGV2ZW50cy4KICAgKi8KICBGdXR1cmUgY2xvc2UoKTsKCiAgLyoqCiAgICogUmV0dXJuIGEgZnV0dXJlIHdoaWNoIGlzIGNvbXBsZXRlZCB3aGVuIHRoZSBbU3RyZWFtU2lua10gaXMgZmluaXNoZWQuCiAgICoKICAgKiBJZiB0aGUgYFN0cmVhbVNpbmtgIGZhaWxzIHdpdGggYW4gZXJyb3IsCiAgICogcGVyaGFwcyBpbiByZXNwb25zZSB0byBhZGRpbmcgZXZlbnRzIHVzaW5nIFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0sCiAgICogdGhlIFtkb25lXSBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIHRoYXQgZXJyb3IuCiAgICoKICAgKiBPdGhlcndpc2UsIHRoZSByZXR1cm5lZCBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aGVuIGVpdGhlcjoKICAgKgogICAqICogYWxsIGV2ZW50cyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgc2luayBoYXMgYmVlbiBjbG9zZWQsIG9yCiAgICogKiB0aGUgc2luayBoYXMgb3RoZXJ3aXNlIGJlZW4gc3RvcHBlZCBmcm9tIGhhbmRsaW5nIG1vcmUgZXZlbnRzCiAgICogICAoZm9yIGV4YW1wbGUgYnkgY2FuY2VsaW5nIGEgc3RyZWFtIHN1YnNjcmlwdGlvbikuCiAgICovCiAgRnV0dXJlIGdldCBkb25lOwp9CgovKioKICogVHJhbnNmb3JtcyBhIFN0cmVhbS4KICoKICogV2hlbiBhIHN0cmVhbSdzIFtTdHJlYW0udHJhbnNmb3JtXSBtZXRob2QgaXMgaW52b2tlZCB3aXRoIGEKICogW1N0cmVhbVRyYW5zZm9ybWVyXSwgdGhlIHN0cmVhbSBjYWxscyB0aGUgW2JpbmRdIG1ldGhvZCBvbiB0aGUgcHJvdmlkZWQKICogdHJhbnNmb3JtZXIuIFRoZSByZXN1bHRpbmcgc3RyZWFtIGlzIHRoZW4gcmV0dXJuZWQgZnJvbSB0aGUKICogW1N0cmVhbS50cmFuc2Zvcm1dIG1ldGhvZC4KICoKICogQ29uY2VwdHVhbGx5LCBhIHRyYW5zZm9ybWVyIGlzIHNpbXBseSBhIGZ1bmN0aW9uIGZyb20gW1N0cmVhbV0gdG8gW1N0cmVhbV0KICogdGhhdCBpcyBlbmNhcHN1bGF0ZWQgaW50byBhIGNsYXNzLgogKgogKiBJdCBpcyBnb29kIHByYWN0aWNlIHRvIHdyaXRlIHRyYW5zZm9ybWVycyB0aGF0IGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLgogKgogKiBBbGwgb3RoZXIgdHJhbnNmb3JtaW5nIG1ldGhvZHMgb24gW1N0cmVhbV0sIHN1Y2ggYXMgW1N0cmVhbS5tYXBdLAogKiBbU3RyZWFtLndoZXJlXSBvciBbU3RyZWFtLmV4cGFuZF0gY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nCiAqIFtTdHJlYW0udHJhbnNmb3JtXS4gQSBbU3RyZWFtVHJhbnNmb3JtZXJdIGlzIHRodXMgdmVyeSBwb3dlcmZ1bCBidXQgb2Z0ZW4KICogYWxzbyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRvIHVzZS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbVRyYW5zZm9ybWVyPFMsIFQ+IHsKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0cmVhbVRyYW5zZm9ybWVyXSBiYXNlZCBvbiB0aGUgZ2l2ZW4gW29uTGlzdGVuXSBjYWxsYmFjay4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gdHJhbnNmb3JtZXIgdXNlcyB0aGUgcHJvdmlkZWQgW29uTGlzdGVuXSBjYWxsYmFjawogICAqIHdoZW4gYSB0cmFuc2Zvcm1lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uIEF0IHRoYXQgdGltZSwgdGhlIGNhbGxiYWNrCiAgICogcmVjZWl2ZXMgdGhlIGlucHV0IHN0cmVhbSAodGhlIG9uZSBwYXNzZWQgdG8gW2JpbmRdKSBhbmQgYQogICAqIGJvb2xlYW4gZmxhZyBgY2FuY2VsT25FcnJvcmAgdG8gY3JlYXRlIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0uCiAgICoKICAgKiBJZiB0aGUgdHJhbnNmb3JtZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSwgc28gaXMgdGhlIHN0cmVhbQogICAqIHJldHVybmVkIGJ5IHRoZSBbU3RyZWFtVHJhbnNmb3JtZXIuYmluZF0gbWV0aG9kIGJ5IHRoaXMgdHJhbnNmb3JtZXIuCiAgICoKICAgKiBJZiB0aGUgdHJhbnNmb3JtZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG11bHRpcGxlIHRpbWVzLCB0aGUgW29uTGlzdGVuXQogICAqIGNhbGxiYWNrIGlzIGNhbGxlZCBhZ2FpbiBmb3IgZWFjaCBuZXcgW1N0cmVhbS5saXN0ZW5dIGNhbGwuCiAgICogVGhpcyBoYXBwZW5zIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gb3Igbm90LAogICAqIGJ1dCB0aGUgY2FsbCB3aWxsIHVzdWFsbHkgZmFpbCBmb3Igbm9uLWJyb2FkY2FzdCBzdHJlYW1zLgogICAqCiAgICogVGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgZG9lcyAqbm90KiByZWNlaXZlIHRoZSBoYW5kbGVycyB0aGF0IHdlcmUgcGFzc2VkCiAgICogdG8gW1N0cmVhbS5saXN0ZW5dLiBUaGVzZSBhcmUgYXV0b21hdGljYWxseSBzZXQgYWZ0ZXIgdGhlIGNhbGwgdG8gdGhlCiAgICogW29uTGlzdGVuXSBjYWxsYmFjayAodXNpbmcgW1N0cmVhbVN1YnNjcmlwdGlvbi5vbkRhdGFdLAogICAqIFtTdHJlYW1TdWJzY3JpcHRpb24ub25FcnJvcl0gYW5kIFtTdHJlYW1TdWJzY3JpcHRpb24ub25Eb25lXSkuCiAgICoKICAgKiBNb3N0IGNvbW1vbmx5LCBhbiBbb25MaXN0ZW5dIGNhbGxiYWNrIHdpbGwgZmlyc3QgY2FsbCBbU3RyZWFtLmxpc3Rlbl0gb24KICAgKiB0aGUgcHJvdmlkZWQgc3RyZWFtICh3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGBjYW5jZWxPbkVycm9yYCBmbGFnKSwgYW5kIHRoZW4KICAgKiByZXR1cm4gYSBuZXcgW1N0cmVhbVN1YnNjcmlwdGlvbl0uCiAgICoKICAgKiBUaGVyZSBhcmUgdHdvIGNvbW1vbiB3YXlzIHRvIGNyZWF0ZSBhIFN0cmVhbVN1YnNjcmlwdGlvbjoKICAgKgogICAqIDEuIGJ5IGFsbG9jYXRpbmcgYSBbU3RyZWFtQ29udHJvbGxlcl0gYW5kIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mCiAgICogICAgbGlzdGVuaW5nIHRvIGl0cyBzdHJlYW0uIEl0J3MgaW1wb3J0YW50IHRvIGZvcndhcmQgcGF1c2UsIHJlc3VtZSBhbmQKICAgKiAgICBjYW5jZWwgZXZlbnRzICh1bmxlc3MgdGhlIHRyYW5zZm9ybWVyIGludGVudGlvbmFsbHkgd2FudHMgdG8gY2hhbmdlCiAgICogICAgdGhpcyBiZWhhdmlvcikuCiAgICogMi4gYnkgY3JlYXRpbmcgYSBuZXcgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIFtTdHJlYW1TdWJzY3JpcHRpb25dLgogICAqICAgIE5vdGUgdGhhdCB0aGUgc3Vic2NyaXB0aW9uIHNob3VsZCBydW4gY2FsbGJhY2tzIGluIHRoZSBbWm9uZV0gdGhlCiAgICogICAgc3RyZWFtIHdhcyBsaXN0ZW5lZCB0byAoc2VlIFtab25lXSBhbmQgW1pvbmUuYmluZENhbGxiYWNrXSkuCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogYGBgCiAgICogLy8vIFN0YXJ0cyBsaXN0ZW5pbmcgdG8gW2lucHV0XSBhbmQgZHVwbGljYXRlcyBhbGwgbm9uLWVycm9yIGV2ZW50cy4KICAgKiBTdHJlYW1TdWJzY3JpcHRpb248aW50PiBfb25MaXN0ZW4oU3RyZWFtPGludD4gaW5wdXQsIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAqICAgU3RyZWFtU3Vic2NyaXB0aW9uPFN0cmluZz4gc3Vic2NyaXB0aW9uOwogICAqICAgLy8gQ3JlYXRlIGNvbnRyb2xsZXIgdGhhdCBmb3J3YXJkcyBwYXVzZSwgcmVzdW1lIGFuZCBjYW5jZWwgZXZlbnRzLgogICAqICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxTdHJpbmc+KAogICAqICAgICAgIG9uUGF1c2U6ICgpIHsKICAgKiAgICAgICAgIHN1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAqICAgICAgIH0sCiAgICogICAgICAgb25SZXN1bWU6ICgpIHsKICAgKiAgICAgICAgIHN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgKiAgICAgICB9LAogICAqICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBzdWJzY3JpcHRpb24uY2FuY2VsKCksCiAgICogICAgICAgc3luYzogdHJ1ZSk7IC8vICJzeW5jIiBpcyBjb3JyZWN0IGhlcmUsIHNpbmNlIGV2ZW50cyBhcmUgZm9yd2FyZGVkLgogICAqCiAgICogICAvLyBMaXN0ZW4gdG8gdGhlIHByb3ZpZGVkIHN0cmVhbSB1c2luZyBgY2FuY2VsT25FcnJvcmAuCiAgICogICBzdWJzY3JpcHRpb24gPSBpbnB1dC5saXN0ZW4oKGRhdGEpIHsKICAgKiAgICAgLy8gRHVwbGljYXRlIHRoZSBkYXRhLgogICAqICAgICBjb250cm9sbGVyLmFkZChkYXRhKTsKICAgKiAgICAgY29udHJvbGxlci5hZGQoZGF0YSk7CiAgICogICB9LAogICAqICAgICAgIG9uRXJyb3I6IGNvbnRyb2xsZXIuYWRkRXJyb3IsCiAgICogICAgICAgb25Eb25lOiBjb250cm9sbGVyLmNsb3NlLAogICAqICAgICAgIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogICAqCiAgICogICAvLyBSZXR1cm4gYSBuZXcgW1N0cmVhbVN1YnNjcmlwdGlvbl0gYnkgbGlzdGVuaW5nIHRvIHRoZSBjb250cm9sbGVyJ3MKICAgKiAgIC8vIHN0cmVhbS4KICAgKiAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbS5saXN0ZW4obnVsbCk7CiAgICogfQogICAqCiAgICogLy8gSW5zdGFudGlhdGUgYSB0cmFuc2Zvcm1lcjoKICAgKiB2YXIgZHVwbGljYXRvciA9IGNvbnN0IFN0cmVhbVRyYW5zZm9ybWVyPGludCwgaW50Pihfb25MaXN0ZW4pOwogICAqCiAgICogLy8gVXNlIGFzIGZvbGxvd3M6CiAgICogaW50U3RyZWFtLnRyYW5zZm9ybShkdXBsaWNhdG9yKTsKICAgKiBgYGAKICAgKi8KICBjb25zdCBmYWN0b3J5IFN0cmVhbVRyYW5zZm9ybWVyKAogICAgICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IG9uTGlzdGVuKAogICAgICAgICAgICAgIFN0cmVhbTxTPiBzdHJlYW0sIGJvb2wgY2FuY2VsT25FcnJvcikpID0KICAgICAgX1N0cmVhbVN1YnNjcmlwdGlvblRyYW5zZm9ybWVyPFMsIFQ+OwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0cmVhbVRyYW5zZm9ybWVyXSB0aGF0IGRlbGVnYXRlcyBldmVudHMgdG8gdGhlIGdpdmVuIGZ1bmN0aW9ucy4KICAgKgogICAqIEV4YW1wbGUgdXNlIG9mIGEgZHVwbGljYXRpbmcgdHJhbnNmb3JtZXI6CiAgICoKICAgKiBgYGAKICAgKiBzdHJpbmdTdHJlYW0udHJhbnNmb3JtKG5ldyBTdHJlYW1UcmFuc2Zvcm1lcjxTdHJpbmcsIFN0cmluZz4uZnJvbUhhbmRsZXJzKAogICAqICAgICBoYW5kbGVEYXRhOiAoU3RyaW5nIHZhbHVlLCBFdmVudFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICogICAgICAgc2luay5hZGQodmFsdWUpOwogICAqICAgICAgIHNpbmsuYWRkKHZhbHVlKTsgIC8vIER1cGxpY2F0ZSB0aGUgaW5jb21pbmcgZXZlbnRzLgogICAqICAgICB9KSk7CiAgICogYGBgCiAgICoKICAgKiBUcmFuc2Zvcm1lcnMgdGhhdCBhcmUgY29uc3RydWN0ZWQgdGhpcyB3YXkgY2Fubm90IHVzZSBjYXB0dXJlZCBzdGF0ZSBpZgogICAqIHRoZXkgYXJlIHVzZWQgaW4gc3RyZWFtcyB0aGF0IGNhbiBiZSBsaXN0ZW5lZCB0byBtdWx0aXBsZSB0aW1lcy4KICAgKiBgYGAKICAgKiBTdHJlYW1Db250cm9sbGVyPFN0cmluZz4gY29udHJvbGxlcjsKICAgKiBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIuYnJvYWRjYXN0KG9uTGlzdGVuOiAoKSB7CiAgICogICBzY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICogICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoIkJhZCIpOwogICAqICAgICBjb250cm9sbGVyLmFkZEVycm9yKCJXb3JzZSIpOwogICAqICAgICBjb250cm9sbGVyLmFkZEVycm9yKCJXb3JzdCIpOwogICAqICAgfSk7CiAgICogfSk7CiAgICogdmFyIHNoYXJlZFN0YXRlID0gMDsKICAgKiB2YXIgdHJhbnNmb3JtZWRTdHJlYW0gPSBjb250cm9sbGVyLnN0cmVhbS50cmFuc2Zvcm0oCiAgICogICAgIG5ldyBTdHJlYW1UcmFuc2Zvcm1lcjxTdHJpbmc+LmZyb21IYW5kbGVycygKICAgKiAgICAgICAgIGhhbmRsZUVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UsIHNpbmspIHsKICAgKiAgIHNoYXJlZFN0YXRlKys7IC8vIEluY3JlbWVudCBzaGFyZWQgZXJyb3ItY291bnRlci4KICAgKiAgIHNpbmsuYWRkKCJFcnJvciAkc2hhcmVkU3RhdGU6ICRlcnJvciIpOwogICAqIH0pKTsKICAgKgogICAqIHRyYW5zZm9ybWVkU3RyZWFtLmxpc3RlbihwcmludCk7CiAgICogdHJhbnNmb3JtZWRTdHJlYW0ubGlzdGVuKHByaW50KTsgLy8gTGlzdGVuIHR3aWNlLgogICAqIC8vIExpc3RlbmluZyB0d2ljZSB0byB0aGUgc2FtZSBzdHJlYW0gbWFrZXMgdGhlIHRyYW5zZm9ybWVyIHNoYXJlIHRoZSBzYW1lCiAgICogLy8gc3RhdGUuIEluc3RlYWQgb2YgaGF2aW5nICJFcnJvciAxOiBCYWQiLCAiRXJyb3IgMjogV29yc2UiLAogICAqIC8vICJFcnJvciAzOiBXb3JzdCIgYXMgb3V0cHV0IChlYWNoIHR3aWNlIGZvciB0aGUgc2VwYXJhdGUgc3Vic2NyaXB0aW9ucyksCiAgICogLy8gdGhpcyBwcm9ncmFtIGVtaXRzOgogICAqIC8vIEVycm9yIDE6IEJhZAogICAqIC8vIEVycm9yIDI6IEJhZAogICAqIC8vIEVycm9yIDM6IFdvcnNlCiAgICogLy8gRXJyb3IgNDogV29yc2UKICAgKiAvLyBFcnJvciA1OiBXb3JzdAogICAqIC8vIEVycm9yIDY6IFdvcnN0CiAgICogYGBgCiAgICovCiAgZmFjdG9yeSBTdHJlYW1UcmFuc2Zvcm1lci5mcm9tSGFuZGxlcnMoCiAgICAgIHt2b2lkIGhhbmRsZURhdGEoUyBkYXRhLCBFdmVudFNpbms8VD4gc2luayksCiAgICAgIHZvaWQgaGFuZGxlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIEV2ZW50U2luazxUPiBzaW5rKSwKICAgICAgdm9pZCBoYW5kbGVEb25lKEV2ZW50U2luazxUPiBzaW5rKX0pID0gX1N0cmVhbUhhbmRsZXJUcmFuc2Zvcm1lcjxTLCBUPjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTdHJlYW1UcmFuc2Zvcm1lcl0gYmFzZWQgb24gYSBbYmluZF0gY2FsbGJhY2suCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIHRyYW5zZm9ybWVyIHVzZXMgdGhlIFtiaW5kXSBhcmd1bWVudCB0byBpbXBsZW1lbnQgdGhlCiAgICogW1N0cmVhbVRyYW5zZm9ybWVyLmJpbmRdIEFQSSBhbmQgY2FuIGJlIHVzZWQgd2hlbiB0aGUgdHJhbnNmb3JtYXRpb24gaXMKICAgKiBhdmFpbGFibGUgYXMgYSBzdHJlYW0tdG8tc3RyZWFtIGZ1bmN0aW9uLgogICAqCiAgICogYGBgZGFydAogICAqIGZpbmFsIHNwbGl0RGVjb2RlZCA9IFN0cmVhbVRyYW5zZm9ybWVyPExpc3Q8aW50PiwgU3RyaW5nPi5mcm9tQmluZCgKICAgKiAgICAgKHN0cmVhbSkgPT4gc3RyZWFtLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpLnRyYW5zZm9ybShMaW5lU3BsaXR0ZXIoKSkpOwogICAqIGBgYAogICAqLwogIEBTaW5jZSgiMi4xIikKICBmYWN0b3J5IFN0cmVhbVRyYW5zZm9ybWVyLmZyb21CaW5kKFN0cmVhbTxUPiBGdW5jdGlvbihTdHJlYW08Uz4pIGJpbmQpID0KICAgICAgX1N0cmVhbUJpbmRUcmFuc2Zvcm1lcjxTLCBUPjsKCiAgLyoqCiAgICogQWRhcHRzIFtzb3VyY2VdIHRvIGJlIGEgYFN0cmVhbVRyYW5zZm9ybWVyPFRTLCBUVD5gLgogICAqCiAgICogVGhpcyBhbGxvd3MgW3NvdXJjZV0gdG8gYmUgdXNlZCBhdCB0aGUgbmV3IHR5cGUsIGJ1dCBhdCBydW4tdGltZSBpdAogICAqIG11c3Qgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIGJvdGggdGhlIG5ldyB0eXBlIGFuZCBpdHMgb3JpZ2luYWwgdHlwZS4KICAgKgogICAqIERhdGEgZXZlbnRzIHBhc3NlZCBpbnRvIHRoZSByZXR1cm5lZCB0cmFuc2Zvcm1lciBtdXN0IGFsc28gYmUgaW5zdGFuY2VzCiAgICogb2YgW1NTXSwgYW5kIGRhdGEgZXZlbnRzIHByb2R1Y2VkIGJ5IFtzb3VyY2VdIGZvciB0aG9zZSBldmVudHMgbXVzdAogICAqIGFsc28gYmUgaW5zdGFuY2VzIG9mIFtUVF0uCiAgICovCiAgc3RhdGljIFN0cmVhbVRyYW5zZm9ybWVyPFRTLCBUVD4gY2FzdEZyb208U1MsIFNULCBUUywgVFQ+KAogICAgICBTdHJlYW1UcmFuc2Zvcm1lcjxTUywgU1Q+IHNvdXJjZSkgewogICAgcmV0dXJuIG5ldyBDYXN0U3RyZWFtVHJhbnNmb3JtZXI8U1MsIFNULCBUUywgVFQ+KHNvdXJjZSk7CiAgfQoKICAvKioKICAgKiBUcmFuc2Zvcm1zIHRoZSBwcm92aWRlZCBbc3RyZWFtXS4KICAgKgogICAqIFJldHVybnMgYSBuZXcgc3RyZWFtIHdpdGggZXZlbnRzIHRoYXQgYXJlIGNvbXB1dGVkIGZyb20gZXZlbnRzIG9mIHRoZQogICAqIHByb3ZpZGVkIFtzdHJlYW1dLgogICAqCiAgICogVGhlIFtTdHJlYW1UcmFuc2Zvcm1lcl0gaW50ZXJmYWNlIGlzIGNvbXBsZXRlbHkgZ2VuZXJpYywKICAgKiBzbyBpdCBjYW5ub3Qgc2F5IHdoYXQgc3ViY2xhc3NlcyBkby4KICAgKiBFYWNoIFtTdHJlYW1UcmFuc2Zvcm1lcl0gc2hvdWxkIGRvY3VtZW50IGNsZWFybHkgaG93IGl0IHRyYW5zZm9ybXMgdGhlCiAgICogc3RyZWFtIChvbiB0aGUgY2xhc3Mgb3IgdmFyaWFibGUgdXNlZCB0byBhY2Nlc3MgdGhlIHRyYW5zZm9ybWVyKSwKICAgKiBhcyB3ZWxsIGFzIGFueSBkaWZmZXJlbmNlcyBmcm9tIHRoZSBmb2xsb3dpbmcgdHlwaWNhbCBiZWhhdmlvcjoKICAgKgogICAqICogV2hlbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLCBpdCBzdGFydHMgbGlzdGVuaW5nIHRvIHRoZQogICAqICAgaW5wdXQgW3N0cmVhbV0uCiAgICogKiBTdWJzY3JpcHRpb25zIG9mIHRoZSByZXR1cm5lZCBzdHJlYW0gZm9yd2FyZCAoaW4gYSByZWFzb25hYmxlIHRpbWUpCiAgICogICBhIFtTdHJlYW1TdWJzY3JpcHRpb24ucGF1c2VdIGNhbGwgdG8gdGhlIHN1YnNjcmlwdGlvbiBvZiB0aGUgaW5wdXQKICAgKiAgIFtzdHJlYW1dLgogICAqICogU2ltaWxhcmx5LCBjYW5jZWxpbmcgYSBzdWJzY3JpcHRpb24gb2YgdGhlIHJldHVybmVkIHN0cmVhbSBldmVudHVhbGx5CiAgICogICAoaW4gcmVhc29uYWJsZSB0aW1lKSBjYW5jZWxzIHRoZSBzdWJzY3JpcHRpb24gb2YgdGhlIGlucHV0IFtzdHJlYW1dLgogICAqCiAgICogIlJlYXNvbmFibGUgdGltZSIgZGVwZW5kcyBvbiB0aGUgdHJhbnNmb3JtZXIgYW5kIHN0cmVhbS4gU29tZSB0cmFuc2Zvcm1lcnMsCiAgICogbGlrZSBhICJ0aW1lb3V0IiB0cmFuc2Zvcm1lciwgbWlnaHQgbWFrZSB0aGVzZSBvcGVyYXRpb25zIGRlcGVuZCBvbiBhCiAgICogZHVyYXRpb24uIE90aGVycyBtaWdodCBub3QgZGVsYXkgdGhlbSBhdCBhbGwsIG9yIGp1c3QgYnkgYSBtaWNyb3Rhc2suCiAgICoKICAgKiBUcmFuc2Zvcm1lcnMgYXJlIGZyZWUgdG8gaGFuZGxlIGVycm9ycyBpbiBhbnkgd2F5LgogICAqIEEgdHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb24gbWF5IGNob29zZSB0byBwcm9wYWdhdGUgZXJyb3JzLAogICAqIG9yIGNvbnZlcnQgdGhlbSB0byBvdGhlciBldmVudHMsIG9yIGlnbm9yZSB0aGVtIGNvbXBsZXRlbHksCiAgICogYnV0IGlmIGVycm9ycyBhcmUgaWdub3JlZCwgaXQgc2hvdWxkIGJlIGRvY3VtZW50ZWQgZXhwbGljaXRseS4KICAgKi8KICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKTsKCiAgLyoqCiAgICogUHJvdmlkZXMgYSBgU3RyZWFtVHJhbnNmb3JtZXI8UlMsIFJUPmAgdmlldyBvZiB0aGlzIHN0cmVhbSB0cmFuc2Zvcm1lci4KICAgKgogICAqIFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZXIgd2lsbCBjaGVjayBhdCBydW4tdGltZSB0aGF0IGFsbCBkYXRhIGV2ZW50cwogICAqIG9mIHRoZSBzdHJlYW0gaXQgdHJhbnNmb3JtcyBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtTXSwKICAgKiBhbmQgaXQgd2lsbCBjaGVjayB0aGF0IGFsbCBkYXRhIGV2ZW50cyBwcm9kdWNlZCBieSB0aGlzIHRyYW5zZm9ybWVyCiAgICogYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbUlRdLgogICAqLwogIFN0cmVhbVRyYW5zZm9ybWVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCk7Cn0KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgW1N0cmVhbVRyYW5zZm9ybWVyXS4KICoKICogQ29udGFpbnMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgZXZlcnkgbWV0aG9kIGV4Y2VwdCBbYmluZF0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8UywgVD4gaW1wbGVtZW50cyBTdHJlYW1UcmFuc2Zvcm1lcjxTLCBUPiB7CiAgY29uc3QgU3RyZWFtVHJhbnNmb3JtZXJCYXNlKCk7CgogIFN0cmVhbVRyYW5zZm9ybWVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCkgPT4KICAgICAgU3RyZWFtVHJhbnNmb3JtZXIuY2FzdEZyb208UywgVCwgUlMsIFJUPih0aGlzKTsKfQoKLyoqCiAqIEFuIFtJdGVyYXRvcl0gbGlrZSBpbnRlcmZhY2UgZm9yIHRoZSB2YWx1ZXMgb2YgYSBbU3RyZWFtXS4KICoKICogVGhpcyB3cmFwcyBhIFtTdHJlYW1dIGFuZCBhIHN1YnNjcmlwdGlvbiBvbiB0aGUgc3RyZWFtLiBJdCBsaXN0ZW5zCiAqIG9uIHRoZSBzdHJlYW0sIGFuZCBjb21wbGV0ZXMgdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBbbW92ZU5leHRdIHdoZW4gdGhlCiAqIG5leHQgdmFsdWUgYmVjb21lcyBhdmFpbGFibGUuCiAqCiAqIFRoZSBzdHJlYW0gbWF5IGJlIHBhdXNlZCBiZXR3ZWVuIGNhbGxzIHRvIFttb3ZlTmV4dF0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1JdGVyYXRvcjxUPiB7CiAgLyoqIENyZWF0ZSBhIFtTdHJlYW1JdGVyYXRvcl0gb24gW3N0cmVhbV0uICovCiAgZmFjdG9yeSBTdHJlYW1JdGVyYXRvcihTdHJlYW08VD4gc3RyZWFtKQogICAgICAvLyBUT0RPKGxybik6IHVzZSByZWRpcmVjdGluZyBmYWN0b3J5IGNvbnN0cnVjdG9yIHdoZW4gdHlwZQogICAgICAvLyBhcmd1bWVudHMgYXJlIHN1cHBvcnRlZC4KICAgICAgPT4KICAgICAgbmV3IF9TdHJlYW1JdGVyYXRvcjxUPihzdHJlYW0pOwoKICAvKioKICAgKiBXYWl0IGZvciB0aGUgbmV4dCBzdHJlYW0gdmFsdWUgdG8gYmUgYXZhaWxhYmxlLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCB3aWxsIGNvbXBsZXRlIHdpdGggZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgLgogICAqIENvbXBsZXRpbmcgd2l0aCBgdHJ1ZWAgbWVhbnMgdGhhdCBhbm90aGVyIGV2ZW50IGhhcyBiZWVuIHJlY2VpdmVkIGFuZAogICAqIGNhbiBiZSByZWFkIGFzIFtjdXJyZW50XS4KICAgKiBDb21wbGV0aW5nIHdpdGggYGZhbHNlYCBtZWFucyB0aGF0IHRoZSBzdHJlYW0gaXRlcmF0aW9uIGlzIGRvbmUgYW5kCiAgICogbm8gZnVydGhlciBldmVudHMgd2lsbCBldmVyIGJlIGF2YWlsYWJsZS4KICAgKiBUaGUgZnV0dXJlIG1heSBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLCBpZiB0aGUgc3RyZWFtIHByb2R1Y2VzIGFuIGVycm9yLAogICAqIHdoaWNoIGFsc28gZW5kcyBpdGVyYXRpb24uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIGFnYWluIHVudGlsIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYQogICAqIHByZXZpb3VzIGNhbGwgaXMgY29tcGxldGVkLgogICAqLwogIEZ1dHVyZTxib29sPiBtb3ZlTmV4dCgpOwoKICAvKioKICAgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3RyZWFtLgogICAqCiAgICogSXMgYG51bGxgIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBbbW92ZU5leHRdIGFuZCBhZnRlciBhIGNhbGwgdG8KICAgKiBgbW92ZU5leHRgIGNvbXBsZXRlcyB3aXRoIGEgYGZhbHNlYCByZXN1bHQgb3IgYW4gZXJyb3IuCiAgICoKICAgKiBXaGVuIGEgYG1vdmVOZXh0YCBjYWxsIGNvbXBsZXRlcyB3aXRoIGB0cnVlYCwgdGhlIGBjdXJyZW50YCBmaWVsZCBob2xkcwogICAqIHRoZSBtb3N0IHJlY2VudCBldmVudCBvZiB0aGUgc3RyZWFtLCBhbmQgaXQgc3RheXMgbGlrZSB0aGF0IHVudGlsIHRoZSBuZXh0CiAgICogY2FsbCB0byBgbW92ZU5leHRgLgogICAqIEJldHdlZW4gYSBjYWxsIHRvIGBtb3ZlTmV4dGAgYW5kIHdoZW4gaXRzIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMsCiAgICogdGhlIHZhbHVlIGlzIHVuc3BlY2lmaWVkLgogICAqLwogIFQgZ2V0IGN1cnJlbnQ7CgogIC8qKgogICAqIENhbmNlbHMgdGhlIHN0cmVhbSBpdGVyYXRvciAoYW5kIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBzdWJzY3JpcHRpb24pIGVhcmx5LgogICAqCiAgICogVGhlIHN0cmVhbSBpdGVyYXRvciBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGVkIGlmIHRoZSBbbW92ZU5leHRdIGZ1dHVyZQogICAqIGNvbXBsZXRlcyB3aXRoIGVpdGhlciBgZmFsc2VgIG9yIGFuIGVycm9yLgogICAqCiAgICogSWYgeW91IG5lZWQgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yIHZhbHVlcyBiZWZvcmUgdGhlIHN0cmVhbSBpdGVyYXRvciBpcwogICAqIGF1dG9tYXRpY2FsbHkgY2xvc2VkLCB5b3UgbXVzdCBjYWxsIFtjYW5jZWxdIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJlYW0KICAgKiBpcyBwcm9wZXJseSBjbG9zZWQuCiAgICoKICAgKiBJZiBbbW92ZU5leHRdIGhhcyBiZWVuIGNhbGxlZCB3aGVuIHRoZSBpdGVyYXRvciBpcyBjYW5jZWxlZCwKICAgKiBpdHMgcmV0dXJuZWQgZnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCBgZmFsc2VgIGFzIHZhbHVlLAogICAqIGFzIHdpbGwgYWxsIGZ1cnRoZXIgY2FsbHMgdG8gW21vdmVOZXh0XS4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgaWYgdGhlIGNhbmNlbC1vcGVyYXRpb24gaXMgbm90IGNvbXBsZXRlZCBzeW5jaHJvbm91c2x5LgogICAqIE90aGVyd2lzZSByZXR1cm5zIGBudWxsYC4KICAgKi8KICBGdXR1cmUgY2FuY2VsKCk7Cn0KCi8qKgogKiBXcmFwcyBhbiBbX0V2ZW50U2lua10gc28gaXQgZXhwb3NlcyBvbmx5IHRoZSBbRXZlbnRTaW5rXSBpbnRlcmZhY2UuCiAqLwpjbGFzcyBfQ29udHJvbGxlckV2ZW50U2lua1dyYXBwZXI8VD4gaW1wbGVtZW50cyBFdmVudFNpbms8VD4gewogIEV2ZW50U2luayBfc2luazsKICBfQ29udHJvbGxlckV2ZW50U2lua1dyYXBwZXIodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKFQgZGF0YSkgewogICAgX3NpbmsuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9zaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KfQqI3QBOTjwBFAFHFUcBHwEEKQM8TkksUQNAND40MjkDRRgDURs/QjoDTi0DSikDRUcDQANIRhkDSU8bA1BPQ0VPTxBRIU82A0dJTkUQA1BNHQM+SxUEGwwBBksFR0IGHAEGKAVFHAYy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cGUgb2YgYSBzdHJlYW0gY29udHJvbGxlcidzIGBvbkxpc3RlbmAsIGBvblBhdXNlYCBhbmQgYG9uUmVzdW1lYCBjYWxsYmFja3MuCiAqLwp0eXBlZGVmIHZvaWQgQ29udHJvbGxlckNhbGxiYWNrKCk7CgovKioKICogVHlwZSBvZiBzdHJlYW0gY29udHJvbGxlciBgb25DYW5jZWxgIGNhbGxiYWNrcy4KICoKICogVGhlIGNhbGxiYWNrIG1heSByZXR1cm4gZWl0aGVyIGB2b2lkYCBvciBhIGZ1dHVyZS4KICovCnR5cGVkZWYgQ29udHJvbGxlckNhbmNlbENhbGxiYWNrKCk7CgovKioKICogQSBjb250cm9sbGVyIHdpdGggdGhlIHN0cmVhbSBpdCBjb250cm9scy4KICoKICogVGhpcyBjb250cm9sbGVyIGFsbG93cyBzZW5kaW5nIGRhdGEsIGVycm9yIGFuZCBkb25lIGV2ZW50cyBvbgogKiBpdHMgW3N0cmVhbV0uCiAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgc2ltcGxlIHN0cmVhbSB0aGF0IG90aGVycwogKiBjYW4gbGlzdGVuIG9uLCBhbmQgdG8gcHVzaCBldmVudHMgdG8gdGhhdCBzdHJlYW0uCiAqCiAqIEl0J3MgcG9zc2libGUgdG8gY2hlY2sgd2hldGhlciB0aGUgc3RyZWFtIGlzIHBhdXNlZCBvciBub3QsIGFuZCB3aGV0aGVyCiAqIGl0IGhhcyBzdWJzY3JpYmVycyBvciBub3QsIGFzIHdlbGwgYXMgZ2V0dGluZyBhIGNhbGxiYWNrIHdoZW4gZWl0aGVyIG9mCiAqIHRoZXNlIGNoYW5nZS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbUNvbnRyb2xsZXI8VD4gaW1wbGVtZW50cyBTdHJlYW1TaW5rPFQ+IHsKICAvKiogVGhlIHN0cmVhbSB0aGF0IHRoaXMgY29udHJvbGxlciBpcyBjb250cm9sbGluZy4gKi8KICBTdHJlYW08VD4gZ2V0IHN0cmVhbTsKCiAgLyoqCiAgICogQSBjb250cm9sbGVyIHdpdGggYSBbc3RyZWFtXSB0aGF0IHN1cHBvcnRzIG9ubHkgb25lIHNpbmdsZSBzdWJzY3JpYmVyLgogICAqCiAgICogSWYgW3N5bmNdIGlzIHRydWUsIHRoZSByZXR1cm5lZCBzdHJlYW0gY29udHJvbGxlciBpcyBhCiAgICogW1N5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcl0sIGFuZCBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgY2FyZQogICAqIGFuZCBhdHRlbnRpb24gbmVjZXNzYXJ5IHRvIG5vdCBicmVhayB0aGUgW1N0cmVhbV0gY29udHJhY3QuIElmIGluIGRvdWJ0LAogICAqIHVzZSB0aGUgbm9uLXN5bmMgdmVyc2lvbi4KICAgKgogICAqIFVzaW5nIGFuIGFzeW5jaHJvbm91cyBjb250cm9sbGVyIHdpbGwgbmV2ZXIgZ2l2ZSB0aGUgd3JvbmcKICAgKiBiZWhhdmlvciwgYnV0IHVzaW5nIGEgc3luY2hyb25vdXMgY29udHJvbGxlciBpbmNvcnJlY3RseSBjYW4gY2F1c2UKICAgKiBvdGhlcndpc2UgY29ycmVjdCBwcm9ncmFtcyB0byBicmVhay4KICAgKgogICAqIEEgc3luY2hyb25vdXMgY29udHJvbGxlciBpcyBvbmx5IGludGVuZGVkIGZvciBvcHRpbWl6aW5nIGV2ZW50CiAgICogcHJvcGFnYXRpb24gd2hlbiBvbmUgYXN5bmNocm9ub3VzIGV2ZW50IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGFub3RoZXIuCiAgICogSXQgc2hvdWxkIG5vdCBiZSB1c2VkIHVubGVzcyB0aGUgY2FsbHMgdG8gW2FkZF0gb3IgW2FkZEVycm9yXQogICAqIGFyZSBndWFyYW50ZWVkIHRvIG9jY3VyIGluIHBsYWNlcyB3aGVyZSBpdCB3b24ndCBicmVhayBgU3RyZWFtYCBpbnZhcmlhbnRzLgogICAqCiAgICogVXNlIHN5bmNocm9ub3VzIGNvbnRyb2xsZXJzIG9ubHkgdG8gZm9yd2FyZCAocG90ZW50aWFsbHkgdHJhbnNmb3JtZWQpCiAgICogZXZlbnRzIGZyb20gYW5vdGhlciBzdHJlYW0gb3IgYSBmdXR1cmUuCiAgICoKICAgKiBBIFN0cmVhbSBzaG91bGQgYmUgaW5lcnQgdW50aWwgYSBzdWJzY3JpYmVyIHN0YXJ0cyBsaXN0ZW5pbmcgb24gaXQgKHVzaW5nCiAgICogdGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgdG8gc3RhcnQgcHJvZHVjaW5nIGV2ZW50cykuIFN0cmVhbXMgc2hvdWxkIG5vdAogICAqIGxlYWsgcmVzb3VyY2VzIChsaWtlIHdlYnNvY2tldHMpIHdoZW4gbm8gdXNlciBldmVyIGxpc3RlbnMgb24gdGhlIHN0cmVhbS4KICAgKgogICAqIFRoZSBjb250cm9sbGVyIGJ1ZmZlcnMgYWxsIGluY29taW5nIGV2ZW50cyB1bnRpbCBhIHN1YnNjcmliZXIgaXMKICAgKiByZWdpc3RlcmVkLCBidXQgdGhpcyBmZWF0dXJlIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gcmFyZSBjaXJjdW1zdGFuY2VzLgogICAqCiAgICogVGhlIFtvblBhdXNlXSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGJlY29tZXMKICAgKiBwYXVzZWQuIFtvblJlc3VtZV0gaXMgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSByZXN1bWVkLgogICAqCiAgICogVGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbQogICAqIHJlY2VpdmVzIGl0cyBsaXN0ZW5lciBhbmQgW29uQ2FuY2VsXSB3aGVuIHRoZSBsaXN0ZW5lciBlbmRzCiAgICogaXRzIHN1YnNjcmlwdGlvbi4gSWYgW29uQ2FuY2VsXSBuZWVkcyB0byBwZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24sCiAgICogW29uQ2FuY2VsXSBzaG91bGQgcmV0dXJuIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIGNhbmNlbCBvcGVyYXRpb24KICAgKiBpcyBkb25lLgogICAqCiAgICogSWYgdGhlIHN0cmVhbSBpcyBjYW5jZWxlZCBiZWZvcmUgdGhlIGNvbnRyb2xsZXIgbmVlZHMgbmV3IGRhdGEgdGhlCiAgICogW29uUmVzdW1lXSBjYWxsIG1pZ2h0IG5vdCBiZSBleGVjdXRlZC4KICAgKi8KICBmYWN0b3J5IFN0cmVhbUNvbnRyb2xsZXIoCiAgICAgIHt2b2lkIG9uTGlzdGVuKCksCiAgICAgIHZvaWQgb25QYXVzZSgpLAogICAgICB2b2lkIG9uUmVzdW1lKCksCiAgICAgIG9uQ2FuY2VsKCksCiAgICAgIGJvb2wgc3luYzogZmFsc2V9KSB7CiAgICByZXR1cm4gc3luYwogICAgICAgID8gbmV3IF9TeW5jU3RyZWFtQ29udHJvbGxlcjxUPihvbkxpc3Rlbiwgb25QYXVzZSwgb25SZXN1bWUsIG9uQ2FuY2VsKQogICAgICAgIDogbmV3IF9Bc3luY1N0cmVhbUNvbnRyb2xsZXI8VD4ob25MaXN0ZW4sIG9uUGF1c2UsIG9uUmVzdW1lLCBvbkNhbmNlbCk7CiAgfQoKICAvKioKICAgKiBBIGNvbnRyb2xsZXIgd2hlcmUgW3N0cmVhbV0gY2FuIGJlIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLgogICAqCiAgICogVGhlIFtTdHJlYW1dIHJldHVybmVkIGJ5IFtzdHJlYW1dIGlzIGEgYnJvYWRjYXN0IHN0cmVhbS4KICAgKiBJdCBjYW4gYmUgbGlzdGVuZWQgdG8gbW9yZSB0aGFuIG9uY2UuCiAgICoKICAgKiBBIFN0cmVhbSBzaG91bGQgYmUgaW5lcnQgdW50aWwgYSBzdWJzY3JpYmVyIHN0YXJ0cyBsaXN0ZW5pbmcgb24gaXQgKHVzaW5nCiAgICogdGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgdG8gc3RhcnQgcHJvZHVjaW5nIGV2ZW50cykuIFN0cmVhbXMgc2hvdWxkIG5vdAogICAqIGxlYWsgcmVzb3VyY2VzIChsaWtlIHdlYnNvY2tldHMpIHdoZW4gbm8gdXNlciBldmVyIGxpc3RlbnMgb24gdGhlIHN0cmVhbS4KICAgKgogICAqIEJyb2FkY2FzdCBzdHJlYW1zIGRvIG5vdCBidWZmZXIgZXZlbnRzIHdoZW4gdGhlcmUgaXMgbm8gbGlzdGVuZXIuCiAgICoKICAgKiBUaGUgY29udHJvbGxlciBkaXN0cmlidXRlcyBhbnkgZXZlbnRzIHRvIGFsbCBjdXJyZW50bHkgc3Vic2NyaWJlZAogICAqIGxpc3RlbmVycyBhdCB0aGUgdGltZSB3aGVuIFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0gaXMgY2FsbGVkLgogICAqIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGNhbGwgYGFkZGAsIGBhZGRFcnJvcmAsIG9yIGBjbG9zZWAgYmVmb3JlIGEgcHJldmlvdXMKICAgKiBjYWxsIGhhcyByZXR1cm5lZC4gVGhlIGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSBhbnkgaW50ZXJuYWwgcXVldWUgb2YKICAgKiBldmVudHMsIGFuZCBpZiB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyBhZGRlZCwKICAgKiBpdCB3aWxsIGp1c3QgYmUgZHJvcHBlZCwgb3IsIGlmIGl0IGlzIGFuIGVycm9yLCBiZSByZXBvcnRlZCBhcyB1bmNhdWdodC4KICAgKgogICAqIEVhY2ggbGlzdGVuZXIgc3Vic2NyaXB0aW9uIGlzIGhhbmRsZWQgaW5kZXBlbmRlbnRseSwKICAgKiBhbmQgaWYgb25lIHBhdXNlcywgb25seSB0aGUgcGF1c2luZyBsaXN0ZW5lciBpcyBhZmZlY3RlZC4KICAgKiBBIHBhdXNlZCBsaXN0ZW5lciB3aWxsIGJ1ZmZlciBldmVudHMgaW50ZXJuYWxseSB1bnRpbCB1bnBhdXNlZCBvciBjYW5jZWxlZC4KICAgKgogICAqIElmIFtzeW5jXSBpcyB0cnVlLCBldmVudHMgbWF5IGJlIGZpcmVkIGRpcmVjdGx5IGJ5IHRoZSBzdHJlYW0ncwogICAqIHN1YnNjcmlwdGlvbnMgZHVyaW5nIGFuIFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0gY2FsbC4KICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGNvbnRyb2xsZXIgaXMgYSBbU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyXSwKICAgKiBhbmQgbXVzdCBiZSB1c2VkIHdpdGggdGhlIGNhcmUgYW5kIGF0dGVudGlvbiBuZWNlc3NhcnkgdG8gbm90IGJyZWFrCiAgICogdGhlIFtTdHJlYW1dIGNvbnRyYWN0LgogICAqIFNlZSBbQ29tcGxldGVyLnN5bmNdIGZvciBzb21lIGV4cGxhbmF0aW9ucyBvbiB3aGVuIGEgc3luY2hyb25vdXMKICAgKiBkaXNwYXRjaGluZyBjYW4gYmUgdXNlZC4KICAgKiBJZiBpbiBkb3VidCwga2VlcCB0aGUgY29udHJvbGxlciBub24tc3luYy4KICAgKgogICAqIElmIFtzeW5jXSBpcyBmYWxzZSwgdGhlIGV2ZW50IHdpbGwgYWx3YXlzIGJlIGZpcmVkIGF0IGEgbGF0ZXIgdGltZSwKICAgKiBhZnRlciB0aGUgY29kZSBhZGRpbmcgdGhlIGV2ZW50IGhhcyBjb21wbGV0ZWQuCiAgICogSW4gdGhhdCBjYXNlLCBubyBndWFyYW50ZWVzIGFyZSBnaXZlbiB3aXRoIHJlZ2FyZCB0byB3aGVuCiAgICogbXVsdGlwbGUgbGlzdGVuZXJzIGdldCB0aGUgZXZlbnRzLCBleGNlcHQgdGhhdCBlYWNoIGxpc3RlbmVyIHdpbGwgZ2V0CiAgICogYWxsIGV2ZW50cyBpbiB0aGUgY29ycmVjdCBvcmRlci4gRWFjaCBzdWJzY3JpcHRpb24gaGFuZGxlcyB0aGUgZXZlbnRzCiAgICogaW5kaXZpZHVhbGx5LgogICAqIElmIHR3byBldmVudHMgYXJlIHNlbnQgb24gYW4gYXN5bmMgY29udHJvbGxlciB3aXRoIHR3byBsaXN0ZW5lcnMsCiAgICogb25lIG9mIHRoZSBsaXN0ZW5lcnMgbWF5IGdldCBib3RoIGV2ZW50cwogICAqIGJlZm9yZSB0aGUgb3RoZXIgbGlzdGVuZXIgZ2V0cyBhbnkuCiAgICogQSBsaXN0ZW5lciBtdXN0IGJlIHN1YnNjcmliZWQgYm90aCB3aGVuIHRoZSBldmVudCBpcyBpbml0aWF0ZWQKICAgKiAodGhhdCBpcywgd2hlbiBbYWRkXSBpcyBjYWxsZWQpCiAgICogYW5kIHdoZW4gdGhlIGV2ZW50IGlzIGxhdGVyIGRlbGl2ZXJlZCwKICAgKiBpbiBvcmRlciB0byByZWNlaXZlIHRoZSBldmVudC4KICAgKgogICAqIFRoZSBbb25MaXN0ZW5dIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBmaXJzdCBsaXN0ZW5lciBpcyBzdWJzY3JpYmVkLAogICAqIGFuZCB0aGUgW29uQ2FuY2VsXSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFueSBhY3RpdmUgbGlzdGVuZXJzLgogICAqIElmIGEgbGlzdGVuZXIgaXMgYWRkZWQgYWdhaW4gbGF0ZXIsIGFmdGVyIHRoZSBbb25DYW5jZWxdIHdhcyBjYWxsZWQsCiAgICogdGhlIFtvbkxpc3Rlbl0gd2lsbCBiZSBjYWxsZWQgYWdhaW4uCiAgICovCiAgZmFjdG9yeSBTdHJlYW1Db250cm9sbGVyLmJyb2FkY2FzdCgKICAgICAge3ZvaWQgb25MaXN0ZW4oKSwgdm9pZCBvbkNhbmNlbCgpLCBib29sIHN5bmM6IGZhbHNlfSkgewogICAgcmV0dXJuIHN5bmMKICAgICAgICA/IG5ldyBfU3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4ob25MaXN0ZW4sIG9uQ2FuY2VsKQogICAgICAgIDogbmV3IF9Bc3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4ob25MaXN0ZW4sIG9uQ2FuY2VsKTsKICB9CgogIC8qKgogICAqIFRoZSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqCiAgICogTWF5IGJlIHNldCB0byBgbnVsbGAsIGluIHdoaWNoIGNhc2Ugbm8gY2FsbGJhY2sgd2lsbCBoYXBwZW4uCiAgICovCiAgQ29udHJvbGxlckNhbGxiYWNrIGdldCBvbkxpc3RlbjsKCiAgdm9pZCBzZXQgb25MaXN0ZW4odm9pZCBvbkxpc3RlbkhhbmRsZXIoKSk7CgogIC8qKgogICAqIFRoZSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGlzIHBhdXNlZC4KICAgKgogICAqIE1heSBiZSBzZXQgdG8gYG51bGxgLCBpbiB3aGljaCBjYXNlIG5vIGNhbGxiYWNrIHdpbGwgaGFwcGVuLgogICAqCiAgICogUGF1c2UgcmVsYXRlZCBjYWxsYmFja3MgYXJlIG5vdCBzdXBwb3J0ZWQgb24gYnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycy4KICAgKi8KICBDb250cm9sbGVyQ2FsbGJhY2sgZ2V0IG9uUGF1c2U7CgogIHZvaWQgc2V0IG9uUGF1c2Uodm9pZCBvblBhdXNlSGFuZGxlcigpKTsKCiAgLyoqCiAgICogVGhlIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgcmVzdW1lZC4KICAgKgogICAqIE1heSBiZSBzZXQgdG8gYG51bGxgLCBpbiB3aGljaCBjYXNlIG5vIGNhbGxiYWNrIHdpbGwgaGFwcGVuLgogICAqCiAgICogUGF1c2UgcmVsYXRlZCBjYWxsYmFja3MgYXJlIG5vdCBzdXBwb3J0ZWQgb24gYnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycy4KICAgKi8KICBDb250cm9sbGVyQ2FsbGJhY2sgZ2V0IG9uUmVzdW1lOwoKICB2b2lkIHNldCBvblJlc3VtZSh2b2lkIG9uUmVzdW1lSGFuZGxlcigpKTsKCiAgLyoqCiAgICogVGhlIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgY2FuY2VsZWQuCiAgICoKICAgKiBNYXkgYmUgc2V0IHRvIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFjayB3aWxsIGhhcHBlbi4KICAgKi8KICBDb250cm9sbGVyQ2FuY2VsQ2FsbGJhY2sgZ2V0IG9uQ2FuY2VsOwoKICB2b2lkIHNldCBvbkNhbmNlbChvbkNhbmNlbEhhbmRsZXIoKSk7CgogIC8qKgogICAqIFJldHVybnMgYSB2aWV3IG9mIHRoaXMgb2JqZWN0IHRoYXQgb25seSBleHBvc2VzIHRoZSBbU3RyZWFtU2lua10gaW50ZXJmYWNlLgogICAqLwogIFN0cmVhbVNpbms8VD4gZ2V0IHNpbms7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIHN0cmVhbSBjb250cm9sbGVyIGlzIGNsb3NlZCBmb3IgYWRkaW5nIG1vcmUgZXZlbnRzLgogICAqCiAgICogVGhlIGNvbnRyb2xsZXIgYmVjb21lcyBjbG9zZWQgYnkgY2FsbGluZyB0aGUgW2Nsb3NlXSBtZXRob2QuCiAgICogTmV3IGV2ZW50cyBjYW5ub3QgYmUgYWRkZWQsIGJ5IGNhbGxpbmcgW2FkZF0gb3IgW2FkZEVycm9yXSwKICAgKiB0byBhIGNsb3NlZCBjb250cm9sbGVyLgogICAqCiAgICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgY2xvc2VkLAogICAqIHRoZSAiZG9uZSIgZXZlbnQgbWlnaHQgbm90IGhhdmUgYmVlbiBkZWxpdmVyZWQgeWV0LAogICAqIGJ1dCBpdCBoYXMgYmVlbiBzY2hlZHVsZWQsIGFuZCBpdCBpcyB0b28gbGF0ZSB0byBhZGQgbW9yZSBldmVudHMuCiAgICovCiAgYm9vbCBnZXQgaXNDbG9zZWQ7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIHN1YnNjcmlwdGlvbiB3b3VsZCBuZWVkIHRvIGJ1ZmZlciBldmVudHMuCiAgICoKICAgKiBUaGlzIGlzIHRoZSBjYXNlIGlmIHRoZSBjb250cm9sbGVyJ3Mgc3RyZWFtIGhhcyBhIGxpc3RlbmVyIGFuZCBpdCBpcwogICAqIHBhdXNlZCwgb3IgaWYgaXQgaGFzIG5vdCByZWNlaXZlZCBhIGxpc3RlbmVyIHlldC4gSW4gdGhhdCBjYXNlLCB0aGUKICAgKiBjb250cm9sbGVyIGlzIGNvbnNpZGVyZWQgcGF1c2VkIGFzIHdlbGwuCiAgICoKICAgKiBBIGJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlciBpcyBuZXZlciBjb25zaWRlcmVkIHBhdXNlZC4gSXQgYWx3YXlzCiAgICogZm9yd2FyZHMgaXRzIGV2ZW50cyB0byBhbGwgdW5jYW5jZWxlZCBzdWJzY3JpcHRpb25zLCBpZiBhbnksCiAgICogYW5kIGxldCB0aGUgc3Vic2NyaXB0aW9ucyBoYW5kbGUgdGhlaXIgb3duIHBhdXNpbmcgYW5kIGJ1ZmZlcmluZy4KICAgKi8KICBib29sIGdldCBpc1BhdXNlZDsKCiAgLyoqIFdoZXRoZXIgdGhlcmUgaXMgYSBzdWJzY3JpYmVyIG9uIHRoZSBbU3RyZWFtXS4gKi8KICBib29sIGdldCBoYXNMaXN0ZW5lcjsKCiAgLyoqCiAgICogU2VuZHMgYSBkYXRhIFtldmVudF0uCiAgICoKICAgKiBMaXN0ZW5lcnMgcmVjZWl2ZSB0aGlzIGV2ZW50IGluIGEgbGF0ZXIgbWljcm90YXNrLgogICAqCiAgICogTm90ZSB0aGF0IGEgc3luY2hyb25vdXMgY29udHJvbGxlciAoY3JlYXRlZCBieSBwYXNzaW5nIHRydWUgdG8gdGhlIGBzeW5jYAogICAqIHBhcmFtZXRlciBvZiB0aGUgYFN0cmVhbUNvbnRyb2xsZXJgIGNvbnN0cnVjdG9yKSBkZWxpdmVycyBldmVudHMKICAgKiBpbW1lZGlhdGVseS4gU2luY2UgdGhpcyBiZWhhdmlvciB2aW9sYXRlcyB0aGUgY29udHJhY3QgbWVudGlvbmVkIGhlcmUsCiAgICogc3luY2hyb25vdXMgY29udHJvbGxlcnMgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBkZXNjcmliZWQgaW4gdGhlCiAgICogZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgZGVsaXZlcmVkIGV2ZW50cyBhbHdheXMgKmFwcGVhciogYXMgaWYKICAgKiB0aGV5IHdlcmUgZGVsaXZlcmVkIGluIGEgc2VwYXJhdGUgbWljcm90YXNrLgogICAqLwogIHZvaWQgYWRkKFQgZXZlbnQpOwoKICAvKioKICAgKiBTZW5kcyBvciBlbnF1ZXVlcyBhbiBlcnJvciBldmVudC4KICAgKgogICAqIElmIFtlcnJvcl0gaXMgYG51bGxgLCBpdCBpcyByZXBsYWNlZCBieSBhIFtOdWxsVGhyb3duRXJyb3JdLgogICAqCiAgICogTGlzdGVuZXJzIHJlY2VpdmUgdGhpcyBldmVudCBhdCBhIGxhdGVyIG1pY3JvdGFzay4gVGhpcyBiZWhhdmlvciBjYW4gYmUKICAgKiBvdmVycmlkZGVuIGJ5IHVzaW5nIGBzeW5jYCBjb250cm9sbGVycy4gTm90ZSwgaG93ZXZlciwgdGhhdCBzeW5jCiAgICogY29udHJvbGxlcnMgaGF2ZSB0byBzYXRpc2Z5IHRoZSBwcmVjb25kaXRpb25zIG1lbnRpb25lZCBpbiB0aGUKICAgKiBkb2N1bWVudGF0aW9uIG9mIHRoZSBjb25zdHJ1Y3RvcnMuCiAgICovCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKTsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzdHJlYW0uCiAgICoKICAgKiBMaXN0ZW5lcnMgcmVjZWl2ZSB0aGUgZG9uZSBldmVudCBhdCBhIGxhdGVyIG1pY3JvdGFzay4gVGhpcyBiZWhhdmlvciBjYW4gYmUKICAgKiBvdmVycmlkZGVuIGJ5IHVzaW5nIGBzeW5jYCBjb250cm9sbGVycy4gTm90ZSwgaG93ZXZlciwgdGhhdCBzeW5jCiAgICogY29udHJvbGxlcnMgaGF2ZSB0byBzYXRpc2Z5IHRoZSBwcmVjb25kaXRpb25zIG1lbnRpb25lZCBpbiB0aGUKICAgKiBkb2N1bWVudGF0aW9uIG9mIHRoZSBjb25zdHJ1Y3RvcnMuCiAgICovCiAgRnV0dXJlIGNsb3NlKCk7CgogIC8qKgogICAqIFJlY2VpdmVzIGV2ZW50cyBmcm9tIFtzb3VyY2VdIGFuZCBwdXRzIHRoZW0gaW50byB0aGlzIGNvbnRyb2xsZXIncyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHdoaWNoIGNvbXBsZXRlcyB3aGVuIHRoZSBzb3VyY2Ugc3RyZWFtIGlzIGRvbmUuCiAgICoKICAgKiBFdmVudHMgbXVzdCBub3QgYmUgYWRkZWQgZGlyZWN0bHkgdG8gdGhpcyBjb250cm9sbGVyIHVzaW5nIFthZGRdLAogICAqIFthZGRFcnJvcl0sIFtjbG9zZV0gb3IgW2FkZFN0cmVhbV0sIHVudGlsIHRoZSByZXR1cm5lZCBmdXR1cmUKICAgKiBpcyBjb21wbGV0ZS4KICAgKgogICAqIERhdGEgYW5kIGVycm9yIGV2ZW50cyBhcmUgZm9yd2FyZGVkIHRvIHRoaXMgY29udHJvbGxlcidzIHN0cmVhbS4gQSBkb25lCiAgICogZXZlbnQgb24gdGhlIHNvdXJjZSB3aWxsIGVuZCB0aGUgYGFkZFN0cmVhbWAgb3BlcmF0aW9uIGFuZCBjb21wbGV0ZSB0aGUKICAgKiByZXR1cm5lZCBmdXR1cmUuCiAgICoKICAgKiBJZiBbY2FuY2VsT25FcnJvcl0gaXMgdHJ1ZSwgb25seSB0aGUgZmlyc3QgZXJyb3Igb24gW3NvdXJjZV0gaXMKICAgKiBmb3J3YXJkZWQgdG8gdGhlIGNvbnRyb2xsZXIncyBzdHJlYW0sIGFuZCB0aGUgYGFkZFN0cmVhbWAgZW5kcwogICAqIGFmdGVyIHRoaXMuIElmIFtjYW5jZWxPbkVycm9yXSBpcyBmYWxzZSwgYWxsIGVycm9ycyBhcmUgZm9yd2FyZGVkCiAgICogYW5kIG9ubHkgYSBkb25lIGV2ZW50IHdpbGwgZW5kIHRoZSBgYWRkU3RyZWFtYC4KICAgKiBJZiBbY2FuY2VsT25FcnJvcl0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gZmFsc2UuCiAgICovCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc291cmNlLCB7Ym9vbCBjYW5jZWxPbkVycm9yfSk7Cn0KCi8qKgogKiBBIHN0cmVhbSBjb250cm9sbGVyIHRoYXQgZGVsaXZlcnMgaXRzIGV2ZW50cyBzeW5jaHJvbm91c2x5LgogKgogKiBBIHN5bmNocm9ub3VzIHN0cmVhbSBjb250cm9sbGVyIGlzIGludGVuZGVkIGZvciBjYXNlcyB3aGVyZQogKiBhbiBhbHJlYWR5IGFzeW5jaHJvbm91cyBldmVudCB0cmlnZ2VycyBhbiBldmVudCBvbiBhIHN0cmVhbS4KICoKICogSW5zdGVhZCBvZiBhZGRpbmcgdGhlIGV2ZW50IHRvIHRoZSBzdHJlYW0gaW4gYSBsYXRlciBtaWNyb3Rhc2ssCiAqIGNhdXNpbmcgZXh0cmEgbGF0ZW5jeSwgdGhlIGV2ZW50IGlzIGluc3RlYWQgZmlyZWQgaW1tZWRpYXRlbHkgYnkgdGhlCiAqIHN5bmNocm9ub3VzIHN0cmVhbSBjb250cm9sbGVyLCBhcyBpZiB0aGUgc3RyZWFtIGV2ZW50IHdhcwogKiB0aGUgY3VycmVudCBldmVudCBvciBtaWNyb3Rhc2suCiAqCiAqIFRoZSBzeW5jaHJvbm91cyBzdHJlYW0gY29udHJvbGxlciBjYW4gYmUgdXNlZCB0byBicmVhayB0aGUgY29udHJhY3QKICogb24gW1N0cmVhbV0sIGFuZCBpdCBtdXN0IGJlIHVzZWQgY2FyZWZ1bGx5IHRvIGF2b2lkIGRvaW5nIHNvLgogKgogKiBUaGUgb25seSBhZHZhbnRhZ2UgdG8gdXNpbmcgYSBbU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyXSBvdmVyIGEKICogbm9ybWFsIFtTdHJlYW1Db250cm9sbGVyXSBpcyB0aGUgaW1wcm92ZWQgbGF0ZW5jeS4KICogT25seSB1c2UgdGhlIHN5bmNocm9ub3VzIHZlcnNpb24gaWYgdGhlIGltcHJvdmVtZW50IGlzIHNpZ25pZmljYW50LAogKiBhbmQgaWYgaXRzIHVzZSBpcyBzYWZlLiBPdGhlcndpc2UganVzdCB1c2UgYSBub3JtYWwgc3RyZWFtIGNvbnRyb2xsZXIsCiAqIHdoaWNoIHdpbGwgYWx3YXlzIGhhdmUgdGhlIGNvcnJlY3QgYmVoYXZpb3IgZm9yIGEgW1N0cmVhbV0sIGFuZCB3b24ndAogKiBhY2NpZGVudGFsbHkgYnJlYWsgb3RoZXIgY29kZS4KICoKICogQWRkaW5nIGV2ZW50cyB0byBhIHN5bmNocm9ub3VzIGNvbnRyb2xsZXIgc2hvdWxkIG9ubHkgaGFwcGVuIGFzIHRoZQogKiB2ZXJ5IGxhc3QgcGFydCBvZiB0aGUgaGFuZGxpbmcgb2YgdGhlIG9yaWdpbmFsIGV2ZW50LgogKiBBdCB0aGF0IHBvaW50LCBhZGRpbmcgYW4gZXZlbnQgdG8gdGhlIHN0cmVhbSBpcyBlcXVpdmFsZW50IHRvCiAqIHJldHVybmluZyB0byB0aGUgZXZlbnQgbG9vcCBhbmQgYWRkaW5nIHRoZSBldmVudCBpbiB0aGUgbmV4dCBtaWNyb3Rhc2suCiAqCiAqIEVhY2ggbGlzdGVuZXIgY2FsbGJhY2sgd2lsbCBiZSBydW4gYXMgaWYgaXQgd2FzIGEgdG9wLWxldmVsIGV2ZW50CiAqIG9yIG1pY3JvdGFzay4gVGhpcyBtZWFucyB0aGF0IGlmIGl0IHRocm93cywgdGhlIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXMKICogdW5jYXVnaHQgYXMgc29vbiBhcyBwb3NzaWJsZS4KICogVGhpcyBpcyBvbmUgcmVhc29uIHRvIGFkZCB0aGUgZXZlbnQgYXMgdGhlIGxhc3QgdGhpbmcgaW4gdGhlIG9yaWdpbmFsIGV2ZW50CiAqIGhhbmRsZXIgLSBhbnkgYWN0aW9uIGRvbmUgYWZ0ZXIgYWRkaW5nIHRoZSBldmVudCB3aWxsIGRlbGF5IHRoZSByZXBvcnQgb2YKICogZXJyb3JzIGluIHRoZSBldmVudCBsaXN0ZW5lciBjYWxsYmFja3MuCiAqCiAqIElmIGFuIGV2ZW50IGlzIGFkZGVkIGluIGEgc2V0dGluZyB0aGF0IGlzbid0IGtub3duIHRvIGJlIGFub3RoZXIgZXZlbnQsCiAqIGl0IG1heSBjYXVzZSB0aGUgc3RyZWFtJ3MgbGlzdGVuZXIgdG8gZ2V0IHRoYXQgZXZlbnQgYmVmb3JlIHRoZSBsaXN0ZW5lcgogKiBpcyByZWFkeSB0byBoYW5kbGUgaXQuIFdlIHByb21pc2UgdGhhdCBhZnRlciBjYWxsaW5nIFtTdHJlYW0ubGlzdGVuXSwKICogeW91IHdvbid0IGdldCBhbnkgZXZlbnRzIHVudGlsIHRoZSBjb2RlIGRvaW5nIHRoZSBsaXN0ZW4gaGFzIGNvbXBsZXRlZC4KICogQ2FsbGluZyBbYWRkXSBpbiByZXNwb25zZSB0byBhIGZ1bmN0aW9uIGNhbGwgb2YgdW5rbm93biBvcmlnaW4gbWF5IGJyZWFrCiAqIHRoYXQgcHJvbWlzZS4KICoKICogQW4gW29uTGlzdGVuXSBjYWxsYmFjayBmcm9tIHRoZSBjb250cm9sbGVyIGlzICpub3QqIGFuIGFzeW5jaHJvbm91cyBldmVudCwKICogYW5kIGFkZGluZyBldmVudHMgdG8gdGhlIGNvbnRyb2xsZXIgaW4gdGhlIGBvbkxpc3RlbmAgY2FsbGJhY2sgaXMgYWx3YXlzCiAqIHdyb25nLiBUaGUgZXZlbnRzIHdpbGwgYmUgZGVsaXZlcmVkIGJlZm9yZSB0aGUgbGlzdGVuZXIgaGFzIGV2ZW4gcmVjZWl2ZWQKICogdGhlIHN1YnNjcmlwdGlvbiB5ZXQuCiAqCiAqIFRoZSBzeW5jaHJvbm91cyBicm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXIgYWxzbyBoYXMgYSByZXN0cmljdGlvbnMgdGhhdCBhCiAqIG5vcm1hbCBzdHJlYW0gY29udHJvbGxlciBkb2VzIG5vdDoKICogVGhlIFthZGRdLCBbYWRkRXJyb3JdLCBbY2xvc2VdIGFuZCBbYWRkU3RyZWFtXSBtZXRob2RzICptdXN0IG5vdCogYmUKICogY2FsbGVkIHdoaWxlIGFuIGV2ZW50IGlzIGJlaW5nIGRlbGl2ZXJlZC4KICogVGhhdCBpcywgaWYgYSBjYWxsYmFjayBvbiBhIHN1YnNjcmlwdGlvbiBvbiB0aGUgY29udHJvbGxlcidzIHN0cmVhbSBjYXVzZXMKICogYSBjYWxsIHRvIGFueSBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLCB0aGUgY2FsbCB3aWxsIGZhaWwuCiAqIEEgYnJvYWRjYXN0IHN0cmVhbSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIGxpc3RlbmVyLCBhbmQgaWYgYW4KICogZXZlbnQgaXMgYWRkZWQgc3luY2hyb25vdXNseSB3aGlsZSBhbm90aGVyIGlzIGJlaW5nIGFsc28gaW4gdGhlIHByb2Nlc3MKICogb2YgYmVpbmcgYWRkZWQsIHRoZSBsYXR0ZXIgZXZlbnQgbWlnaHQgcmVhY2ggc29tZSBsaXN0ZW5lcnMgYmVmb3JlCiAqIHRoZSBmb3JtZXIuIFRvIHByZXZlbnQgdGhhdCwgYW4gZXZlbnQgY2Fubm90IGJlIGFkZGVkIHdoaWxlIGEgcHJldmlvdXMKICogZXZlbnQgaXMgYmVpbmcgZmlyZWQuCiAqIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFuIGV2ZW50IGlzIGZ1bGx5IGRlbGl2ZXJlZCB3aGVuIHRoZQogKiBmaXJzdCBbYWRkXSwgW2FkZEVycm9yXSBvciBbY2xvc2VdIHJldHVybnMsCiAqIGFuZCBmdXJ0aGVyIGV2ZW50cyB3aWxsIGJlIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KICoKICogVGhpcyBzdGlsbCBvbmx5IGd1YXJhbnRlZXMgdGhhdCB0aGUgZXZlbnQgaXMgZGVsaXZlcmVkIHRvIHRoZSBzdWJzY3JpcHRpb24uCiAqIElmIHRoZSBzdWJzY3JpcHRpb24gaXMgcGF1c2VkLCB0aGUgYWN0dWFsIGNhbGxiYWNrIG1heSBzdGlsbCBoYXBwZW4gbGF0ZXIsCiAqIGFuZCB0aGUgZXZlbnQgd2lsbCBpbnN0ZWFkIGJlIGJ1ZmZlcmVkIGJ5IHRoZSBzdWJzY3JpcHRpb24uCiAqIEJhcnJpbmcgcGF1c2luZywgYW5kIHRoZSBmb2xsb3dpbmcgYnVmZmVyZWQgZXZlbnRzIHRoYXQgaGF2ZW4ndCBiZWVuCiAqIGRlbGl2ZXJlZCB5ZXQsIGNhbGxiYWNrcyB3aWxsIGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IHdoZW4gYW4gZXZlbnQgaXMgYWRkZWQuCiAqCiAqIEFkZGluZyBhbiBldmVudCB0byBhIHN5bmNocm9ub3VzIG5vbi1icm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXIgd2hpbGUKICogYW5vdGhlciBldmVudCBpcyBpbiBwcm9ncmVzcyBtYXkgY2F1c2UgdGhlIHNlY29uZCBldmVudCB0byBiZSBkZWxheWVkCiAqIGFuZCBub3QgYmUgZGVsaXZlcmVkIHN5bmNocm9ub3VzbHksIGFuZCB1bnRpbCB0aGF0IGV2ZW50IGlzIGRlbGl2ZXJlZCwKICogdGhlIGNvbnRyb2xsZXIgd2lsbCBub3QgYWN0IHN5bmNocm9ub3VzbHkuCiAqLwphYnN0cmFjdCBjbGFzcyBTeW5jaHJvbm91c1N0cmVhbUNvbnRyb2xsZXI8VD4gaW1wbGVtZW50cyBTdHJlYW1Db250cm9sbGVyPFQ+IHsKICAvKioKICAgKiBBZGRzIGV2ZW50IHRvIHRoZSBjb250cm9sbGVyJ3Mgc3RyZWFtLgogICAqCiAgICogQXMgW1N0cmVhbUNvbnRyb2xsZXIuYWRkXSwgYnV0IG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSBhbiBldmVudCBpcwogICAqIGJlaW5nIGFkZGVkIGJ5IFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0uCiAgICovCiAgdm9pZCBhZGQoVCBkYXRhKTsKCiAgLyoqCiAgICogQWRkcyBlcnJvciB0byB0aGUgY29udHJvbGxlcidzIHN0cmVhbS4KICAgKgogICAqIEFzIFtTdHJlYW1Db250cm9sbGVyLmFkZEVycm9yXSwgYnV0IG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSBhbiBldmVudCBpcwogICAqIGJlaW5nIGFkZGVkIGJ5IFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0uCiAgICovCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKTsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBjb250cm9sbGVyJ3Mgc3RyZWFtLgogICAqCiAgICogQXMgW1N0cmVhbUNvbnRyb2xsZXIuY2xvc2VdLCBidXQgbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIGFuIGV2ZW50IGlzCiAgICogYmVpbmcgYWRkZWQgYnkgW2FkZF0sIFthZGRFcnJvcl0gb3IgW2Nsb3NlXS4KICAgKi8KICBGdXR1cmUgY2xvc2UoKTsKfQoKYWJzdHJhY3QgY2xhc3MgX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gewogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfc3Vic2NyaWJlKAogICAgICB2b2lkIG9uRGF0YShUIGRhdGEpLCBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpOwogIHZvaWQgX3JlY29yZFBhdXNlKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHt9CiAgdm9pZCBfcmVjb3JkUmVzdW1lKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHt9CiAgRnV0dXJlIF9yZWNvcmRDYW5jZWwoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgPT4gbnVsbDsKfQoKLy8gQmFzZSB0eXBlIGZvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RyZWFtIGNvbnRyb2xsZXJzLgphYnN0cmFjdCBjbGFzcyBfU3RyZWFtQ29udHJvbGxlckJhc2U8VD4KICAgIGltcGxlbWVudHMKICAgICAgICBTdHJlYW1Db250cm9sbGVyPFQ+LAogICAgICAgIF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlPFQ+LAogICAgICAgIF9FdmVudFNpbms8VD4sCiAgICAgICAgX0V2ZW50RGlzcGF0Y2g8VD4ge30KCi8qKgogKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFtTdHJlYW1Db250cm9sbGVyXS4KICoKICogQ29udHJvbHMgYSBzdHJlYW0gdGhhdCBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGNvbnRyb2xsZXIuCiAqLwphYnN0cmFjdCBjbGFzcyBfU3RyZWFtQ29udHJvbGxlcjxUPiBpbXBsZW1lbnRzIF9TdHJlYW1Db250cm9sbGVyQmFzZTxUPiB7CiAgLy8gVGhlIHN0YXRlcyBhcmUgYml0LWZsYWdzLiBNb3JlIHRoYW4gb25lIGNhbiBiZSBzZXQgYXQgYSB0aW1lLgogIC8vCiAgLy8gVGhlICJzdWJzY3JpcHRpb24gc3RhdGUiIGdvZXMgdGhyb3VnaCB0aGUgc3RhdGVzOgogIC8vICAgaW5pdGlhbCAtPiBzdWJzY3JpYmVkIC0+IGNhbmNlbGVkLgogIC8vIFRoZXNlIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCiAgLy8gVGhlICJjbG9zZWQiIHN0YXRlIHJlY29yZHMgd2hldGhlciB0aGUgW2Nsb3NlXSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkCiAgLy8gb24gdGhlIGNvbnRyb2xsZXIuIFRoaXMgY2FuIGJlIGRvbmUgYXQgYW55IHRpbWUuIElmIGRvbmUgYmVmb3JlCiAgLy8gc3Vic2NyaXB0aW9uLCB0aGUgZG9uZSBldmVudCBpcyBxdWV1ZWQuIElmIGRvbmUgYWZ0ZXIgY2FuY2VsLCB0aGUgZG9uZQogIC8vIGV2ZW50IGlzIGlnbm9yZWQgKGp1c3QgYXMgYW55IG90aGVyIGV2ZW50IGFmdGVyIGEgY2FuY2VsKS4KCiAgLyoqIFRoZSBjb250cm9sbGVyIGlzIGluIGl0cyBpbml0aWFsIHN0YXRlIHdpdGggbm8gc3Vic2NyaXB0aW9uLiAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOSVRJQUwgPSAwOwogIC8qKiBUaGUgY29udHJvbGxlciBoYXMgYSBzdWJzY3JpcHRpb24sIGJ1dCBoYXNuJ3QgYmVlbiBjbG9zZWQgb3IgY2FuY2VsZWQuICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfU1VCU0NSSUJFRCA9IDE7CiAgLyoqIFRoZSBzdWJzY3JpcHRpb24gaXMgY2FuY2VsZWQuICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQ0FOQ0VMRUQgPSAyOwogIC8qKiBNYXNrIGZvciB0aGUgc3Vic2NyaXB0aW9uIHN0YXRlLiAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1NVQlNDUklQVElPTl9NQVNLID0gMzsKCiAgLy8gVGhlIGZvbGxvd2luZyBzdGF0ZSByZWxhdGUgdG8gdGhlIGNvbnRyb2xsZXIsIG5vdCB0aGUgc3Vic2NyaXB0aW9uLgogIC8vIElmIGNsb3NlZCwgYWRkaW5nIG1vcmUgZXZlbnRzIGlzIG5vdCBhbGxvd2VkLgogIC8vIElmIGV4ZWN1dGluZyBhbiBbYWRkU3RyZWFtXSwgbmV3IGV2ZW50cyBhcmUgbm90IGFsbG93ZWQgZWl0aGVyLCBidXQgd2lsbAogIC8vIGJlIGFkZGVkIGJ5IHRoZSBzdHJlYW0uCgogIC8qKgogICAqIFRoZSBjb250cm9sbGVyIGlzIGNsb3NlZCBkdWUgdG8gY2FsbGluZyBbY2xvc2VdLgogICAqCiAgICogV2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZCwgeW91IGNhbiBuZWl0aGVyIGFkZCBuZXcgZXZlbnRzIG5vciBhZGQgbmV3CiAgICogbGlzdGVuZXJzLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NMT1NFRCA9IDQ7CiAgLyoqCiAgICogVGhlIGNvbnRyb2xsZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBhbiBbYWRkU3RyZWFtXSBvcGVyYXRpb24uCiAgICoKICAgKiBXaGlsZSBhZGRpbmcgZXZlbnRzIGZyb20gYSBzdHJlYW0sIG5vIG5ldyBldmVudHMgY2FuIGJlIGFkZGVkIGRpcmVjdGx5CiAgICogb24gdGhlIGNvbnRyb2xsZXIuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQUREU1RSRUFNID0gODsKCiAgLyoqCiAgICogRmllbGQgY29udGFpbmluZyBkaWZmZXJlbnQgZGF0YSBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3Vic2NyaXB0aW9uCiAgICogc3RhdGUuCiAgICoKICAgKiBJZiBbX3N0YXRlXSBpcyBbX1NUQVRFX0lOSVRJQUxdLCB0aGUgZmllbGQgbWF5IGNvbnRhaW4gYSBbX1BlbmRpbmdFdmVudHNdCiAgICogZm9yIGV2ZW50cyBhZGRlZCB0byB0aGUgY29udHJvbGxlciBiZWZvcmUgYSBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBXaGlsZSBbX3N0YXRlXSBpcyBbX1NUQVRFX1NVQlNDUklCRURdLCB0aGUgZmllbGQgY29udGFpbnMgdGhlIHN1YnNjcmlwdGlvbi4KICAgKgogICAqIFdoZW4gW19zdGF0ZV0gaXMgW19TVEFURV9DQU5DRUxFRF0gdGhlIGZpZWxkIGlzIGN1cnJlbnRseSBub3QgdXNlZC4KICAgKi8KICB2YXIgX3ZhckRhdGE7CgogIC8qKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBjb250cm9sbGVyLiAqLwogIGludCBfc3RhdGUgPSBfU1RBVEVfSU5JVElBTDsKCiAgLyoqCiAgICogRnV0dXJlIGNvbXBsZXRlZCB3aGVuIHRoZSBzdHJlYW0gc2VuZHMgaXRzIGxhc3QgZXZlbnQuCiAgICoKICAgKiBUaGlzIGlzIGFsc28gdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBbY2xvc2VdLgogICAqLwogIC8vIFRPRE8obHJuKTogQ291bGQgdGhpcyBiZSBzdG9yZWQgaW4gdGhlIHZhckRhdGEgZmllbGQgdG9vLCBpZiBpdCdzIG5vdAogIC8vIGFjY2Vzc2VkIHVudGlsIHRoZSBjYWxsIHRvICJjbG9zZSI/IFRoZW4gd2UgbmVlZCB0byBzcGVjaWFsIGNhc2UgaWYgaXQncwogIC8vIGFjY2Vzc2VkIGVhcmxpZXIsIG9yIGlmIGNsb3NlIGlzIGNhbGxlZCBiZWZvcmUgc3Vic2NyaWJpbmcuCiAgX0Z1dHVyZSBfZG9uZUZ1dHVyZTsKCiAgQ29udHJvbGxlckNhbGxiYWNrIG9uTGlzdGVuOwogIENvbnRyb2xsZXJDYWxsYmFjayBvblBhdXNlOwogIENvbnRyb2xsZXJDYWxsYmFjayBvblJlc3VtZTsKICBDb250cm9sbGVyQ2FuY2VsQ2FsbGJhY2sgb25DYW5jZWw7CgogIF9TdHJlYW1Db250cm9sbGVyKHRoaXMub25MaXN0ZW4sIHRoaXMub25QYXVzZSwgdGhpcy5vblJlc3VtZSwgdGhpcy5vbkNhbmNlbCk7CgogIC8vIFJldHVybiBhIG5ldyBzdHJlYW0gZXZlcnkgdGltZS4gVGhlIHN0cmVhbXMgYXJlIGVxdWFsLCBidXQgbm90IGlkZW50aWNhbC4KICBTdHJlYW08VD4gZ2V0IHN0cmVhbSA9PiBuZXcgX0NvbnRyb2xsZXJTdHJlYW08VD4odGhpcyk7CgogIC8qKgogICAqIFJldHVybnMgYSB2aWV3IG9mIHRoaXMgb2JqZWN0IHRoYXQgb25seSBleHBvc2VzIHRoZSBbU3RyZWFtU2lua10gaW50ZXJmYWNlLgogICAqLwogIFN0cmVhbVNpbms8VD4gZ2V0IHNpbmsgPT4gbmV3IF9TdHJlYW1TaW5rV3JhcHBlcjxUPih0aGlzKTsKCiAgLyoqCiAgICogV2hldGhlciBhIGxpc3RlbmVyIGhhcyBleGlzdGVkIGFuZCBiZWVuIGNhbmNlbGVkLgogICAqCiAgICogQWZ0ZXIgdGhpcywgYWRkaW5nIG1vcmUgZXZlbnRzIHdpbGwgYmUgaWdub3JlZC4KICAgKi8KICBib29sIGdldCBfaXNDYW5jZWxlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NBTkNFTEVEKSAhPSAwOwoKICAvKiogV2hldGhlciB0aGVyZSBpcyBhbiBhY3RpdmUgbGlzdGVuZXIuICovCiAgYm9vbCBnZXQgaGFzTGlzdGVuZXIgPT4gKF9zdGF0ZSAmIF9TVEFURV9TVUJTQ1JJQkVEKSAhPSAwOwoKICAvKiogV2hldGhlciB0aGVyZSBoYXMgbm90IGJlZW4gYSBsaXN0ZW5lciB5ZXQuICovCiAgYm9vbCBnZXQgX2lzSW5pdGlhbFN0YXRlID0+CiAgICAgIChfc3RhdGUgJiBfU1RBVEVfU1VCU0NSSVBUSU9OX01BU0spID09IF9TVEFURV9JTklUSUFMOwoKICBib29sIGdldCBpc0Nsb3NlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NMT1NFRCkgIT0gMDsKCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4KICAgICAgaGFzTGlzdGVuZXIgPyBfc3Vic2NyaXB0aW9uLl9pc0lucHV0UGF1c2VkIDogIV9pc0NhbmNlbGVkOwoKICBib29sIGdldCBfaXNBZGRpbmdTdHJlYW0gPT4gKF9zdGF0ZSAmIF9TVEFURV9BRERTVFJFQU0pICE9IDA7CgogIC8qKiBOZXcgZXZlbnRzIG1heSBub3QgYmUgYWRkZWQgYWZ0ZXIgY2xvc2UsIG9yIGR1cmluZyBhZGRTdHJlYW0uICovCiAgYm9vbCBnZXQgX21heUFkZEV2ZW50ID0+IChfc3RhdGUgPCBfU1RBVEVfQ0xPU0VEKTsKCiAgLy8gUmV0dXJucyB0aGUgcGVuZGluZyBldmVudHMuCiAgLy8gUGVuZGluZyBldmVudHMgYXJlIGV2ZW50cyBhZGRlZCBiZWZvcmUgYSBzdWJzY3JpcHRpb24gZXhpc3RzLgogIC8vIFRoZXkgYXJlIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gd2hlbiBpdCBpcyBjcmVhdGVkLgogIC8vIFBlbmRpbmcgZXZlbnRzLCBpZiBhbnksIGFyZSBrZXB0IGluIHRoZSBfdmFyRGF0YSBmaWVsZCB1bnRpbCB0aGUKICAvLyBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgLy8gV2hpbGUgYWRkaW5nIGEgc3RyZWFtLCBwZW5kaW5nIGV2ZW50cyBhcmUgbW92ZWQgaW50byB0aGUKICAvLyBzdGF0ZSBvYmplY3QgdG8gYWxsb3cgdGhlIHN0YXRlIG9iamVjdCB0byB1c2UgdGhlIF92YXJEYXRhIGZpZWxkLgogIF9QZW5kaW5nRXZlbnRzPFQ+IGdldCBfcGVuZGluZ0V2ZW50cyB7CiAgICBhc3NlcnQoX2lzSW5pdGlhbFN0YXRlKTsKICAgIGlmICghX2lzQWRkaW5nU3RyZWFtKSB7CiAgICAgIHJldHVybiBfdmFyRGF0YTsKICAgIH0KICAgIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gc3RhdGUgPSBfdmFyRGF0YTsKICAgIHJldHVybiBzdGF0ZS52YXJEYXRhOwogIH0KCiAgLy8gUmV0dXJucyB0aGUgcGVuZGluZyBldmVudHMsIGFuZCBjcmVhdGVzIHRoZSBvYmplY3QgaWYgbmVjZXNzYXJ5LgogIF9TdHJlYW1JbXBsRXZlbnRzPFQ+IF9lbnN1cmVQZW5kaW5nRXZlbnRzKCkgewogICAgYXNzZXJ0KF9pc0luaXRpYWxTdGF0ZSk7CiAgICBpZiAoIV9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfdmFyRGF0YSA/Pz0gbmV3IF9TdHJlYW1JbXBsRXZlbnRzPFQ+KCk7CiAgICAgIHJldHVybiBfdmFyRGF0YTsKICAgIH0KICAgIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gc3RhdGUgPSBfdmFyRGF0YTsKICAgIGlmIChzdGF0ZS52YXJEYXRhID09IG51bGwpIHN0YXRlLnZhckRhdGEgPSBuZXcgX1N0cmVhbUltcGxFdmVudHM8VD4oKTsKICAgIHJldHVybiBzdGF0ZS52YXJEYXRhOwogIH0KCiAgLy8gR2V0IHRoZSBjdXJyZW50IHN1YnNjcmlwdGlvbi4KICAvLyBJZiB3ZSBhcmUgYWRkaW5nIGEgc3RyZWFtLCB0aGUgc3Vic2NyaXB0aW9uIGlzIG1vdmVkIGludG8gdGhlIHN0YXRlCiAgLy8gb2JqZWN0IHRvIGFsbG93IHRoZSBzdGF0ZSBvYmplY3QgdG8gdXNlIHRoZSBfdmFyRGF0YSBmaWVsZC4KICBfQ29udHJvbGxlclN1YnNjcmlwdGlvbjxUPiBnZXQgX3N1YnNjcmlwdGlvbiB7CiAgICBhc3NlcnQoaGFzTGlzdGVuZXIpOwogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIHJldHVybiBhZGRTdGF0ZS52YXJEYXRhOwogICAgfQogICAgcmV0dXJuIF92YXJEYXRhOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBlcnJvciBkZXNjcmliaW5nIHdoeSBhbiBldmVudCBjYW5ub3QgYmUgYWRkZWQuCiAgICoKICAgKiBUaGUgcmVhc29uLCBhbmQgdGhlcmVmb3JlIHRoZSBlcnJvciBtZXNzYWdlLCBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IHN0YXRlLgogICAqLwogIEVycm9yIF9iYWRFdmVudFN0YXRlKCkgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigiQ2Fubm90IGFkZCBldmVudCBhZnRlciBjbG9zaW5nIik7CiAgICB9CiAgICBhc3NlcnQoX2lzQWRkaW5nU3RyZWFtKTsKICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigiQ2Fubm90IGFkZCBldmVudCB3aGlsZSBhZGRpbmcgYSBzdHJlYW0iKTsKICB9CgogIC8vIFN0cmVhbVNpbmsgaW50ZXJmYWNlLgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwge2Jvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGlmICghX21heUFkZEV2ZW50KSB0aHJvdyBfYmFkRXZlbnRTdGF0ZSgpOwogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm4gbmV3IF9GdXR1cmUuaW1tZWRpYXRlKG51bGwpOwogICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9CiAgICAgICAgbmV3IF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4oCiAgICAgICAgICAgIHRoaXMsIF92YXJEYXRhLCBzb3VyY2UsIGNhbmNlbE9uRXJyb3IgPz8gZmFsc2UpOwogICAgX3ZhckRhdGEgPSBhZGRTdGF0ZTsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQUREU1RSRUFNOwogICAgcmV0dXJuIGFkZFN0YXRlLmFkZFN0cmVhbUZ1dHVyZTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgdGhhdCBpcyBjb21wbGV0ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGRvbmUKICAgKiBwcm9jZXNzaW5nIGV2ZW50cy4KICAgKgogICAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGUgZG9uZSBldmVudCBoYXMgYmVlbiBzZW50LCBvciBpZiB0aGUKICAgKiBzdWJzY3JpYmVyIG9mIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW0gaXMgY2FuY2VsbGVkLgogICAqLwogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfZW5zdXJlRG9uZUZ1dHVyZSgpOwoKICBGdXR1cmUgX2Vuc3VyZURvbmVGdXR1cmUoKSB7CiAgICBfZG9uZUZ1dHVyZSA/Pz0gX2lzQ2FuY2VsZWQgPyBGdXR1cmUuX251bGxGdXR1cmUgOiBuZXcgX0Z1dHVyZSgpOwogICAgcmV0dXJuIF9kb25lRnV0dXJlOwogIH0KCiAgLyoqCiAgICogU2VuZCBvciBlbnF1ZXVlIGEgZGF0YSBldmVudC4KICAgKi8KICB2b2lkIGFkZChUIHZhbHVlKSB7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2JhZEV2ZW50U3RhdGUoKTsKICAgIF9hZGQodmFsdWUpOwogIH0KCiAgLyoqCiAgICogU2VuZCBvciBlbnF1ZXVlIGFuIGVycm9yIGV2ZW50LgogICAqLwogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9iYWRFdmVudFN0YXRlKCk7CiAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IoZXJyb3IpOwogICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgfQogICAgX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIC8qKgogICAqIENsb3NlcyB0aGlzIGNvbnRyb2xsZXIgYW5kIHNlbmRzIGEgZG9uZSBldmVudCBvbiB0aGUgc3RyZWFtLgogICAqCiAgICogVGhlIGZpcnN0IHRpbWUgYSBjb250cm9sbGVyIGlzIGNsb3NlZCwgYSAiZG9uZSIgZXZlbnQgaXMgYWRkZWQgdG8gaXRzCiAgICogc3RyZWFtLgogICAqCiAgICogWW91IGFyZSBhbGxvd2VkIHRvIGNsb3NlIHRoZSBjb250cm9sbGVyIG1vcmUgdGhhbiBvbmNlLCBidXQgb25seSB0aGUgZmlyc3QKICAgKiBjYWxsIGhhcyBhbnkgZWZmZWN0LgogICAqCiAgICogQWZ0ZXIgY2xvc2luZywgbm8gZnVydGhlciBldmVudHMgbWF5IGJlIGFkZGVkIHVzaW5nIFthZGRdLCBbYWRkRXJyb3JdCiAgICogb3IgW2FkZFN0cmVhbV0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aGVuIHRoZSBkb25lIGV2ZW50IGhhcyBiZWVuIGRlbGl2ZXJlZC4KICAgKi8KICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuIF9lbnN1cmVEb25lRnV0dXJlKCk7CiAgICB9CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2JhZEV2ZW50U3RhdGUoKTsKICAgIF9jbG9zZVVuY2hlY2tlZCgpOwogICAgcmV0dXJuIF9lbnN1cmVEb25lRnV0dXJlKCk7CiAgfQoKICB2b2lkIF9jbG9zZVVuY2hlY2tlZCgpIHsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQ0xPU0VEOwogICAgaWYgKGhhc0xpc3RlbmVyKSB7CiAgICAgIF9zZW5kRG9uZSgpOwogICAgfSBlbHNlIGlmIChfaXNJbml0aWFsU3RhdGUpIHsKICAgICAgX2Vuc3VyZVBlbmRpbmdFdmVudHMoKS5hZGQoY29uc3QgX0RlbGF5ZWREb25lKCkpOwogICAgfQogIH0KCiAgLy8gRXZlbnRTaW5rIGludGVyZmFjZS4gVXNlZCBieSB0aGUgW2FkZFN0cmVhbV0gZXZlbnRzLgoKICAvLyBBZGQgZGF0YSBldmVudCwgdXNlZCBib3RoIGJ5IHRoZSBbYWRkU3RyZWFtXSBldmVudHMgYW5kIGJ5IFthZGRdLgogIHZvaWQgX2FkZChUIHZhbHVlKSB7CiAgICBpZiAoaGFzTGlzdGVuZXIpIHsKICAgICAgX3NlbmREYXRhKHZhbHVlKTsKICAgIH0gZWxzZSBpZiAoX2lzSW5pdGlhbFN0YXRlKSB7CiAgICAgIF9lbnN1cmVQZW5kaW5nRXZlbnRzKCkuYWRkKG5ldyBfRGVsYXllZERhdGE8VD4odmFsdWUpKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoaGFzTGlzdGVuZXIpIHsKICAgICAgX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9IGVsc2UgaWYgKF9pc0luaXRpYWxTdGF0ZSkgewogICAgICBfZW5zdXJlUGVuZGluZ0V2ZW50cygpLmFkZChuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogICAgfQogIH0KCiAgdm9pZCBfY2xvc2UoKSB7CiAgICAvLyBFbmQgb2YgYWRkU3RyZWFtIHN0cmVhbS4KICAgIGFzc2VydChfaXNBZGRpbmdTdHJlYW0pOwogICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9IF92YXJEYXRhOwogICAgX3ZhckRhdGEgPSBhZGRTdGF0ZS52YXJEYXRhOwogICAgX3N0YXRlICY9IH5fU1RBVEVfQUREU1RSRUFNOwogICAgYWRkU3RhdGUuY29tcGxldGUoKTsKICB9CgogIC8vIF9TdHJlYW1Db250cm9sbGVyTGlmZUN5Y2xlIGludGVyZmFjZQoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX3N1YnNjcmliZSh2b2lkIG9uRGF0YShUIGRhdGEpLCBGdW5jdGlvbiBvbkVycm9yLAogICAgICB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIGlmICghX2lzSW5pdGlhbFN0YXRlKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsaXN0ZW5lZCB0by4iKTsKICAgIH0KICAgIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IG5ldyBfQ29udHJvbGxlclN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CgogICAgX1BlbmRpbmdFdmVudHM8VD4gcGVuZGluZ0V2ZW50cyA9IF9wZW5kaW5nRXZlbnRzOwogICAgX3N0YXRlIHw9IF9TVEFURV9TVUJTQ1JJQkVEOwogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIGFkZFN0YXRlLnZhckRhdGEgPSBzdWJzY3JpcHRpb247CiAgICAgIGFkZFN0YXRlLnJlc3VtZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3ZhckRhdGEgPSBzdWJzY3JpcHRpb247CiAgICB9CiAgICBzdWJzY3JpcHRpb24uX3NldFBlbmRpbmdFdmVudHMocGVuZGluZ0V2ZW50cyk7CiAgICBzdWJzY3JpcHRpb24uX2d1YXJkQ2FsbGJhY2soKCkgewogICAgICBfcnVuR3VhcmRlZChvbkxpc3Rlbik7CiAgICB9KTsKCiAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogIH0KCiAgRnV0dXJlIF9yZWNvcmRDYW5jZWwoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgLy8gV2hlbiB3ZSBjYW5jZWwsIHdlIGZpcnN0IGNhbmNlbCBhbnkgc3RyZWFtIGJlaW5nIGFkZGVkLAogICAgLy8gVGhlbiB3ZSBjYWxsIGBvbkNhbmNlbGAsIGFuZCBmaW5hbGx5IHRoZSBfZG9uZUZ1dHVyZSBpcyBjb21wbGV0ZWQuCiAgICAvLyBJZiBlaXRoZXIgb2YgYWRkU3RyZWFtJ3MgY2FuY2VsIG9yIGBvbkNhbmNlbGAgcmV0dXJucyBhIGZ1dHVyZSwKICAgIC8vIHdlIHdhaXQgZm9yIGl0IGJlZm9yZSBjb250aW51aW5nLgogICAgLy8gQW55IGVycm9yIGR1cmluZyB0aGlzIHByb2Nlc3MgZW5kcyB1cCBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLgogICAgLy8gSWYgbW9yZSBlcnJvcnMgaGFwcGVuLCB3ZSBhY3QgYXMgaWYgaXQgaGFwcGVucyBpbnNpZGUgbmVzdGVkIHRyeS9maW5hbGx5cwogICAgLy8gb3Igd2hlbkNvbXBsZXRlIGNhbGxzLCBhbmQgb25seSB0aGUgbGFzdCBlcnJvciBlbmRzIHVwIGluIHRoZQogICAgLy8gcmV0dXJuZWQgZnV0dXJlLgogICAgRnV0dXJlIHJlc3VsdDsKICAgIGlmIChfaXNBZGRpbmdTdHJlYW0pIHsKICAgICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9IF92YXJEYXRhOwogICAgICByZXN1bHQgPSBhZGRTdGF0ZS5jYW5jZWwoKTsKICAgIH0KICAgIF92YXJEYXRhID0gbnVsbDsKICAgIF9zdGF0ZSA9CiAgICAgICAgKF9zdGF0ZSAmIH4oX1NUQVRFX1NVQlNDUklCRUQgfCBfU1RBVEVfQUREU1RSRUFNKSkgfCBfU1RBVEVfQ0FOQ0VMRUQ7CgogICAgaWYgKG9uQ2FuY2VsICE9IG51bGwpIHsKICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgICAgLy8gT25seSBpbnRyb2R1Y2UgYSBmdXR1cmUgaWYgb25lIGlzIG5lZWRlZC4KICAgICAgICAvLyBJZiBfb25DYW5jZWwgcmV0dXJucyBudWxsLCBubyBmdXR1cmUgaXMgbmVlZGVkLgogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQgPSBvbkNhbmNlbCgpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgaW4gdGhlIHJldHVybmVkIGZ1dHVyZS4KICAgICAgICAgIC8vIENvbXBsZXRlIGl0IGFzeW5jaHJvbm91c2x5LCBzbyB0aGVyZSBpcyB0aW1lIGZvciBhIGxpc3RlbmVyCiAgICAgICAgICAvLyB0byBoYW5kbGUgdGhlIGVycm9yLgogICAgICAgICAgcmVzdWx0ID0gbmV3IF9GdXR1cmUoKS4uX2FzeW5jQ29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU2ltcGxlciBjYXNlIHdoZW4gd2UgYWxyZWFkeSBrbm93IHRoYXQgd2Ugd2lsbCByZXR1cm4gYSBmdXR1cmUuCiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LndoZW5Db21wbGV0ZShvbkNhbmNlbCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGNvbXBsZXRlKCkgewogICAgICBpZiAoX2RvbmVGdXR1cmUgIT0gbnVsbCAmJiBfZG9uZUZ1dHVyZS5fbWF5Q29tcGxldGUpIHsKICAgICAgICBfZG9uZUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICAgICAgfQogICAgfQoKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICByZXN1bHQgPSByZXN1bHQud2hlbkNvbXBsZXRlKGNvbXBsZXRlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbXBsZXRlKCk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3JlY29yZFBhdXNlKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHsKICAgIGlmIChfaXNBZGRpbmdTdHJlYW0pIHsKICAgICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9IF92YXJEYXRhOwogICAgICBhZGRTdGF0ZS5wYXVzZSgpOwogICAgfQogICAgX3J1bkd1YXJkZWQob25QYXVzZSk7CiAgfQoKICB2b2lkIF9yZWNvcmRSZXN1bWUoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIGFkZFN0YXRlLnJlc3VtZSgpOwogICAgfQogICAgX3J1bkd1YXJkZWQob25SZXN1bWUpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1N5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD4KICAgIGltcGxlbWVudHMgX1N0cmVhbUNvbnRyb2xsZXI8VD4sIFN5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgaW50IGdldCBfc3RhdGU7CiAgdm9pZCBzZXQgX3N0YXRlKGludCBzdGF0ZSk7CgogIHZvaWQgX3NlbmREYXRhKFQgZGF0YSkgewogICAgX3N1YnNjcmlwdGlvbi5fYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBfc2VuZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc3Vic2NyaXB0aW9uLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIF9zZW5kRG9uZSgpIHsKICAgIF9zdWJzY3JpcHRpb24uX2Nsb3NlKCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfQXN5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD4KICAgIGltcGxlbWVudHMgX1N0cmVhbUNvbnRyb2xsZXI8VD4gewogIHZvaWQgX3NlbmREYXRhKFQgZGF0YSkgewogICAgX3N1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWREYXRhPFQ+KGRhdGEpKTsKICB9CgogIHZvaWQgX3NlbmRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgX3N1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBfc3Vic2NyaXB0aW9uLl9hZGRQZW5kaW5nKGNvbnN0IF9EZWxheWVkRG9uZSgpKTsKICB9Cn0KCi8vIFRPRE8obHJuKTogVXNlIGNvbW1vbiBzdXBlcmNsYXNzIGZvciBjYWxsYmFjay1jb250cm9sbGVycyB3aGVuIFZNIHN1cHBvcnRzCi8vIGNvbnN0cnVjdG9ycyBpbiBtaXhpbiBzdXBlcmNsYXNzZXMuCgpjbGFzcyBfQXN5bmNTdHJlYW1Db250cm9sbGVyPFQ+ID0gX1N0cmVhbUNvbnRyb2xsZXI8VD4KICAgIHdpdGggX0FzeW5jU3RyZWFtQ29udHJvbGxlckRpc3BhdGNoPFQ+OwoKY2xhc3MgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+ID0gX1N0cmVhbUNvbnRyb2xsZXI8VD4KICAgIHdpdGggX1N5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD47Cgp0eXBlZGVmIF9Ob3RpZmljYXRpb25IYW5kbGVyKCk7Cgp2b2lkIF9ydW5HdWFyZGVkKF9Ob3RpZmljYXRpb25IYW5kbGVyIG5vdGlmaWNhdGlvbkhhbmRsZXIpIHsKICBpZiAobm90aWZpY2F0aW9uSGFuZGxlciA9PSBudWxsKSByZXR1cm47CiAgdHJ5IHsKICAgIG5vdGlmaWNhdGlvbkhhbmRsZXIoKTsKICB9IGNhdGNoIChlLCBzKSB7CiAgICBab25lLmN1cnJlbnQuaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICB9Cn0KCmNsYXNzIF9Db250cm9sbGVyU3RyZWFtPFQ+IGV4dGVuZHMgX1N0cmVhbUltcGw8VD4gewogIF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlPFQ+IF9jb250cm9sbGVyOwoKICBfQ29udHJvbGxlclN0cmVhbSh0aGlzLl9jb250cm9sbGVyKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgPT4KICAgICAgX2NvbnRyb2xsZXIuX3N1YnNjcmliZShvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CgogIC8vIE92ZXJyaWRlID09IGFuZCBoYXNoQ29kZSBzbyB0aGF0IG5ldyBzdHJlYW1zIHJldHVybmVkIGJ5IHRoZSBzYW1lCiAgLy8gY29udHJvbGxlciBhcmUgY29uc2lkZXJlZCBlcXVhbC4gVGhlIGNvbnRyb2xsZXIgcmV0dXJucyBhIG5ldyBzdHJlYW0KICAvLyBlYWNoIHRpbWUgaXQncyBxdWVyaWVkLCBidXQgZG9lc24ndCBoYXZlIHRvIGNhY2hlIHRoZSByZXN1bHQuCgogIGludCBnZXQgaGFzaENvZGUgPT4gX2NvbnRyb2xsZXIuaGFzaENvZGUgXiAweDM1MzIzNTMyOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIF9Db250cm9sbGVyU3RyZWFtICYmCiAgICAgICAgaWRlbnRpY2FsKG90aGVyLl9jb250cm9sbGVyLCB0aGlzLl9jb250cm9sbGVyKTsKICB9Cn0KCmNsYXNzIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+IGV4dGVuZHMgX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPiB7CiAgZmluYWwgX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gX2NvbnRyb2xsZXI7CgogIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uKHRoaXMuX2NvbnRyb2xsZXIsIHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBzdXBlcihvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CgogIEZ1dHVyZSBfb25DYW5jZWwoKSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuX3JlY29yZENhbmNlbCh0aGlzKTsKICB9CgogIHZvaWQgX29uUGF1c2UoKSB7CiAgICBfY29udHJvbGxlci5fcmVjb3JkUGF1c2UodGhpcyk7CiAgfQoKICB2b2lkIF9vblJlc3VtZSgpIHsKICAgIF9jb250cm9sbGVyLl9yZWNvcmRSZXN1bWUodGhpcyk7CiAgfQp9CgovKiogQSBjbGFzcyB0aGF0IGV4cG9zZXMgb25seSB0aGUgW1N0cmVhbVNpbmtdIGludGVyZmFjZSBvZiBhbiBvYmplY3QuICovCmNsYXNzIF9TdHJlYW1TaW5rV3JhcHBlcjxUPiBpbXBsZW1lbnRzIFN0cmVhbVNpbms8VD4gewogIGZpbmFsIFN0cmVhbUNvbnRyb2xsZXIgX3RhcmdldDsKICBfU3RyZWFtU2lua1dyYXBwZXIodGhpcy5fdGFyZ2V0KTsKICB2b2lkIGFkZChUIGRhdGEpIHsKICAgIF90YXJnZXQuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfdGFyZ2V0LmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpID0+IF90YXJnZXQuY2xvc2UoKTsKCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc291cmNlKSA9PiBfdGFyZ2V0LmFkZFN0cmVhbShzb3VyY2UpOwoKICBGdXR1cmUgZ2V0IGRvbmUgPT4gX3RhcmdldC5kb25lOwp9CgovKioKICogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIHVzZWQgdG8gaGFuZGxlIFtTdHJlYW1Db250cm9sbGVyLmFkZFN0cmVhbV0uCiAqLwpjbGFzcyBfQWRkU3RyZWFtU3RhdGU8VD4gewogIC8vIFtfRnV0dXJlXSByZXR1cm5lZCBieSBjYWxsIHRvIGFkZFN0cmVhbS4KICBmaW5hbCBfRnV0dXJlIGFkZFN0cmVhbUZ1dHVyZTsKCiAgLy8gU3Vic2NyaXB0aW9uIG9uIHN0cmVhbSBhcmd1bWVudCB0byBhZGRTdHJlYW0uCiAgZmluYWwgU3RyZWFtU3Vic2NyaXB0aW9uIGFkZFN1YnNjcmlwdGlvbjsKCiAgX0FkZFN0cmVhbVN0YXRlKAogICAgICBfRXZlbnRTaW5rPFQ+IGNvbnRyb2xsZXIsIFN0cmVhbTxUPiBzb3VyY2UsIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBhZGRTdHJlYW1GdXR1cmUgPSBuZXcgX0Z1dHVyZSgpLAogICAgICAgIGFkZFN1YnNjcmlwdGlvbiA9IHNvdXJjZS5saXN0ZW4oY29udHJvbGxlci5fYWRkLAogICAgICAgICAgICBvbkVycm9yOiBjYW5jZWxPbkVycm9yCiAgICAgICAgICAgICAgICA/IG1ha2VFcnJvckhhbmRsZXIoY29udHJvbGxlcikKICAgICAgICAgICAgICAgIDogY29udHJvbGxlci5fYWRkRXJyb3IsCiAgICAgICAgICAgIG9uRG9uZTogY29udHJvbGxlci5fY2xvc2UsCiAgICAgICAgICAgIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwoKICBzdGF0aWMgbWFrZUVycm9ySGFuZGxlcihfRXZlbnRTaW5rIGNvbnRyb2xsZXIpID0+IChlLCBTdGFja1RyYWNlIHMpIHsKICAgICAgICBjb250cm9sbGVyLl9hZGRFcnJvcihlLCBzKTsKICAgICAgICBjb250cm9sbGVyLl9jbG9zZSgpOwogICAgICB9OwoKICB2b2lkIHBhdXNlKCkgewogICAgYWRkU3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgfQoKICB2b2lkIHJlc3VtZSgpIHsKICAgIGFkZFN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICB9CgogIC8qKgogICAqIFN0b3AgYWRkaW5nIHRoZSBzdHJlYW0uCiAgICoKICAgKiBDb21wbGV0ZSB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IGBTdHJlYW1Db250cm9sbGVyLmFkZFN0cmVhbWAgd2hlbgogICAqIHRoZSBjYW5jZWwgaXMgY29tcGxldGUuCiAgICoKICAgKiBSZXR1cm4gYSBmdXR1cmUgaWYgdGhlIGNhbmNlbCB0YWtlcyB0aW1lLCBvdGhlcndpc2UgcmV0dXJuIGBudWxsYC4KICAgKi8KICBGdXR1cmUgY2FuY2VsKCkgewogICAgdmFyIGNhbmNlbCA9IGFkZFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIGlmIChjYW5jZWwgPT0gbnVsbCkgewogICAgICBhZGRTdHJlYW1GdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGNhbmNlbC53aGVuQ29tcGxldGUoKCkgewogICAgICBhZGRTdHJlYW1GdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgICB9KTsKICB9CgogIHZvaWQgY29tcGxldGUoKSB7CiAgICBhZGRTdHJlYW1GdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgfQp9CgpjbGFzcyBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGV4dGVuZHMgX0FkZFN0cmVhbVN0YXRlPFQ+IHsKICAvLyBUaGUgc3Vic2NyaXB0aW9uIG9yIHBlbmRpbmcgZGF0YSBvZiBhIF9TdHJlYW1Db250cm9sbGVyLgogIC8vIFN0b3JlZCBoZXJlIGJlY2F1c2Ugd2UgcmV1c2UgdGhlIGBfdmFyRGF0YWAgZmllbGQgIGluIHRoZSBfU3RyZWFtQ29udHJvbGxlcgogIC8vIHRvIHN0b3JlIHRoaXMgc3RhdGUgb2JqZWN0LgogIHZhciB2YXJEYXRhOwoKICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlKF9TdHJlYW1Db250cm9sbGVyPFQ+IGNvbnRyb2xsZXIsIHRoaXMudmFyRGF0YSwKICAgICAgU3RyZWFtPFQ+IHNvdXJjZSwgYm9vbCBjYW5jZWxPbkVycm9yKQogICAgICA6IHN1cGVyKGNvbnRyb2xsZXIsIHNvdXJjZSwgY2FuY2VsT25FcnJvcikgewogICAgaWYgKGNvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgYWRkU3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICB9CiAgfQp9CoOwAE5OPAEUAUc6RwEEUQQjAQQzAzYEJAEELQNBEUA1A0tLEQQ+ORgBBkwFPENOHwVASCoFREtDUQVLLQVPTE8FRk0FPjsFN0FRUA4FSCwGHBgWFxIbEE5QBAEGRAU+KwVPTE8FRwVHSE9LS04FOj9RBUVASEkcRh4wBUk0P0tLE0cuKUQlLCQFTlFKKgYmPhBERgQBBkIFQgYjAS0BBj0FQgVQBiIBKwEGPgVCBVAGIwEtAQY/BUIGKQEoAQZRBhoBBkUFQkEdBSI5RwYVAQY7BUpJLgVJQkcGFQE4GAEGGwU4BU9GTEVNMgYVAQYnBUIFTUZEKAY4AQYYBVFGRCgGEgEGUAVGBUdDEgVNTRYFRURHNToGPAIBBD8DP0ADQ0g9IwNHQQNGNkdKSSIDRzlBSwNFTSFPTSsDS0xJS0wRA05MTRkDTiZILU49QUtGShk9Lz4DT04/SFEDSklKLgRPBiwFSTIGFAEGLAVOMgY4AQYlBUsyBhICAS8kUTs8RAIBOCgPHScXHQEEMQM9BEpDBTcqI0tFTEABRidQKicoKjEBSTNOHQEGNgVLEAYmBkIFTBgGKQEGSwwFTz8FUQVJBhABKh8BBjwFMgZLTkEXAR8eHyUBUAFPOgEGUQY9AQY3BTUGOwEuPQE0Hj0BNgEXQQFAAUc1ASFDPEYcPkcpHRwXBjkaBAFGMB0cLxcGOUsaBAEjSUExGRs+HwYVBAEGPwVQBhsUPwYdRQQBGz0vOTIwPRkgJQQBBkAYBUY+BioBH0YYBAEGIwYWLxEEAQYlBjkvIkwfMCsGIgQBBkIFSw0FUBoFSxUFTgYTFCIGLxcgBAEbHRcTIjgGBAE6AUcXFxgiPgYEATgXJSJIBgQBEiAdPCEhGQQBKgFKKxxEBk43ATYhGz4nGQ0fBjMlHQgBGQQBPT9KRylFUUUYExs+IgYVDU4BHBw1Ow4fGTZJIj0KD0swCAYBFj0qCAYBGi4NEgYBEwQBOhs+GAYaBAE7Gz4ZBhsEAgEwRhIeARseBAE5MAQBFRwEAgExJhs6BAE5RQQBFTUEAgFOJwE3LAE2KwEgAT0rCBsTLAQCATQtAScBQUJGAUdKQwE5ASMtKTgEAgFLMwFBOzcBFywEARQkBAEVJQQCAUo3IiQVFwQBOSkEASUBQwEjAgEETAQbLiEBMywBE0YpOSMvKCcrAUgkHQkBER0EARIeBAEGHQVHHQVIBhQrGiwTBiQsCAQBFCoEAgFGPlEhDwFRLDMfHwYEAgEhZGFydDphc3luYy9zdHJlYW1fY29udHJvbGxlci5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9zdHJlYW1faW1wbC5kYXJ0wAB+CC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgovKiogQWJzdHJhY3QgYW5kIHByaXZhdGUgaW50ZXJmYWNlIGZvciBhIHBsYWNlIHRvIHB1dCBldmVudHMuICovCmFic3RyYWN0IGNsYXNzIF9FdmVudFNpbms8VD4gewogIHZvaWQgX2FkZChUIGRhdGEpOwogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKICB2b2lkIF9jbG9zZSgpOwp9CgovKioKICogQWJzdHJhY3QgYW5kIHByaXZhdGUgaW50ZXJmYWNlIGZvciBhIHBsYWNlIHRvIHNlbmQgZXZlbnRzLgogKgogKiBVc2VkIGJ5IGV2ZW50IGJ1ZmZlcmluZyB0byBmaW5hbGx5IGRpc3BhdGNoIHRoZSBwZW5kaW5nIGV2ZW50LCB3aGVyZQogKiBbX0V2ZW50U2lua10gaXMgd2hlcmUgdGhlIGV2ZW50IGZpcnN0IGVudGVycyB0aGUgc3RyZWFtIHN1YnNjcmlwdGlvbiwKICogYW5kIG1heSB5ZXQgYmUgYnVmZmVyZWQuCiAqLwphYnN0cmFjdCBjbGFzcyBfRXZlbnREaXNwYXRjaDxUPiB7CiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKTsKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwogIHZvaWQgX3NlbmREb25lKCk7Cn0KCi8qKgogKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHN0cmVhbSBzdWJzY3JpcHRpb24gb2YgYnVmZmVyaW5nIGV2ZW50cy4KICoKICogVGhlIG9ubHkgcHVibGljIG1ldGhvZHMgYXJlIHRob3NlIG9mIFtTdHJlYW1TdWJzY3JpcHRpb25dLCBzbyBpbnN0YW5jZXMgb2YKICogW19CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25dIGNhbiBiZSByZXR1cm5lZCBkaXJlY3RseSBhcyBhCiAqIFtTdHJlYW1TdWJzY3JpcHRpb25dIHdpdGhvdXQgZXhwb3NpbmcgaW50ZXJuYWwgZnVuY3Rpb25hbGl0eS4KICoKICogVGhlIFtTdHJlYW1Db250cm9sbGVyXSBpcyBhIHB1YmxpYyBmYWNpbmcgdmVyc2lvbiBvZiBbU3RyZWFtXSBhbmQgdGhpcyBjbGFzcywKICogd2l0aCBzb21lIG1ldGhvZHMgbWFkZSBwdWJsaWMuCiAqCiAqIFRoZSB1c2VyIGludGVyZmFjZSBvZiBbX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbl0gYXJlIHRoZSBmb2xsb3dpbmcKICogbWV0aG9kczoKICoKICogKiBbX2FkZF06IEFkZCBhIGRhdGEgZXZlbnQgdG8gdGhlIHN0cmVhbS4KICogKiBbX2FkZEVycm9yXTogQWRkIGFuIGVycm9yIGV2ZW50IHRvIHRoZSBzdHJlYW0uCiAqICogW19jbG9zZV06IFJlcXVlc3QgdG8gY2xvc2UgdGhlIHN0cmVhbS4KICogKiBbX29uQ2FuY2VsXTogQ2FsbGVkIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiB3aWxsIHByb3ZpZGUgbm8gbW9yZSBldmVudHMsCiAqICAgICBlaXRoZXIgZHVlIHRvIGJlaW5nIGFjdGl2ZWx5IGNhbmNlbGVkLCBvciBhZnRlciBzZW5kaW5nIGEgZG9uZSBldmVudC4KICogKiBbX29uUGF1c2VdOiBDYWxsZWQgd2hlbiB0aGUgc3Vic2NyaXB0aW9uIHdhbnRzIHRoZSBldmVudCBzb3VyY2UgdG8gcGF1c2UuCiAqICogW19vblJlc3VtZV06IENhbGxlZCB3aGVuIGFsbG93aW5nIG5ldyBldmVudHMgYWZ0ZXIgYSBwYXVzZS4KICoKICogVGhlIHVzZXIgc2hvdWxkIG5vdCBhZGQgbmV3IGV2ZW50cyB3aGVuIHRoZSBzdWJzY3JpcHRpb24gcmVxdWVzdHMgYSBwYXVzZWQsCiAqIGJ1dCBpZiBpdCBoYXBwZW5zIGFueXdheSwgdGhlIHN1YnNjcmlwdGlvbiB3aWxsIGVucXVldWUgdGhlIGV2ZW50cyBqdXN0IGFzCiAqIHdoZW4gbmV3IGV2ZW50cyBhcnJpdmUgd2hpbGUgc3RpbGwgZmlyaW5nIGFuIG9sZCBldmVudC4KICovCmNsYXNzIF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4KICAgIGltcGxlbWVudHMgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+LCBfRXZlbnRTaW5rPFQ+LCBfRXZlbnREaXNwYXRjaDxUPiB7CiAgLyoqIFRoZSBgY2FuY2VsT25FcnJvcmAgZmxhZyBmcm9tIHRoZSBgbGlzdGVuYCBjYWxsLiAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NBTkNFTF9PTl9FUlJPUiA9IDE7CiAgLyoqCiAgICogV2hldGhlciB0aGUgImRvbmUiIGV2ZW50IGhhcyBiZWVuIHJlY2VpdmVkLgogICAqIE5vIGZ1cnRoZXIgZXZlbnRzIGFyZSBhY2NlcHRlZCBhZnRlciB0aGlzLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NMT1NFRCA9IDI7CiAgLyoqCiAgICogU2V0IGlmIHRoZSBpbnB1dCBoYXMgYmVlbiBhc2tlZCBub3QgdG8gc2VuZCBldmVudHMuCiAgICoKICAgKiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBiZWluZyBwYXVzZWQsIHNpbmNlIHRoZSBpbnB1dCB3aWxsIHJlbWFpbiBwYXVzZWQKICAgKiBhZnRlciBhIGNhbGwgdG8gW3Jlc3VtZV0gaWYgdGhlcmUgYXJlIHBlbmRpbmcgZXZlbnRzLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOUFVUX1BBVVNFRCA9IDQ7CiAgLyoqCiAgICogV2hldGhlciB0aGUgc3Vic2NyaXB0aW9uIGhhcyBiZWVuIGNhbmNlbGVkLgogICAqCiAgICogU2V0IGJ5IGNhbGxpbmcgW2NhbmNlbF0sIG9yIGJ5IGhhbmRsaW5nIGEgImRvbmUiIGV2ZW50LCBvciBhbiAiZXJyb3IiIGV2ZW50CiAgICogd2hlbiBgY2FuY2VsT25FcnJvcmAgaXMgdHJ1ZS4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9DQU5DRUxFRCA9IDg7CiAgLyoqCiAgICogU2V0IHdoZW4gZWl0aGVyOgogICAqCiAgICogICAqIGFuIGVycm9yIGlzIHNlbnQsIGFuZCBbY2FuY2VsT25FcnJvcl0gaXMgdHJ1ZSwgb3IKICAgKiAgICogYSBkb25lIGV2ZW50IGlzIHNlbnQuCiAgICoKICAgKiBJZiB0aGUgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGVkIHdoaWxlIF9TVEFURV9XQUlUX0ZPUl9DQU5DRUwgaXMgc2V0LCB0aGUKICAgKiBzdGF0ZSBpcyB1bnNldCwgYW5kIG5vIGZ1cnRoZXIgZXZlbnRzIG11c3QgYmUgZGVsaXZlcmVkLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1dBSVRfRk9SX0NBTkNFTCA9IDE2OwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOX0NBTExCQUNLID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfSEFTX1BFTkRJTkcgPSA2NDsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9QQVVTRV9DT1VOVCA9IDEyODsKCiAgLyogRXZlbnQgaGFuZGxlcnMgcHJvdmlkZWQgaW4gY29uc3RydWN0b3IuICovCiAgX0RhdGFIYW5kbGVyPFQ+IF9vbkRhdGE7CiAgRnVuY3Rpb24gX29uRXJyb3I7CiAgX0RvbmVIYW5kbGVyIF9vbkRvbmU7CiAgZmluYWwgWm9uZSBfem9uZSA9IFpvbmUuY3VycmVudDsKCiAgLyoqIEJpdCB2ZWN0b3IgYmFzZWQgb24gc3RhdGUtY29uc3RhbnRzIGFib3ZlLiAqLwogIGludCBfc3RhdGU7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiByZXVzZSBhbm90aGVyIGZpZWxkCiAgLyoqIFRoZSBmdXR1cmUgW19vbkNhbmNlbF0gbWF5IHJldHVybi4gKi8KICBGdXR1cmUgX2NhbmNlbEZ1dHVyZTsKCiAgLyoqCiAgICogUXVldWUgb2YgcGVuZGluZyBldmVudHMuCiAgICoKICAgKiBJcyBjcmVhdGVkIHdoZW4gbmVjZXNzYXJ5LCBvciBzZXQgaW4gY29uc3RydWN0b3IgZm9yIHByZWNvbmZpZ3VyZWQgZXZlbnRzLgogICAqLwogIF9QZW5kaW5nRXZlbnRzPFQ+IF9wZW5kaW5nOwoKICBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uKAogICAgICB2b2lkIG9uRGF0YShUIGRhdGEpLCBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpCiAgICAgIDogX3N0YXRlID0gKGNhbmNlbE9uRXJyb3IgPyBfU1RBVEVfQ0FOQ0VMX09OX0VSUk9SIDogMCkgewogICAgdGhpcy5vbkRhdGEob25EYXRhKTsKICAgIHRoaXMub25FcnJvcihvbkVycm9yKTsKICAgIHRoaXMub25Eb25lKG9uRG9uZSk7CiAgfQoKICAvKioKICAgKiBTZXRzIHRoZSBzdWJzY3JpcHRpb24ncyBwZW5kaW5nIGV2ZW50cyBvYmplY3QuCiAgICoKICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgb25jZS4gVGhlIHBlbmRpbmcgZXZlbnRzIG9iamVjdCBpcyB1c2VkIGZvciB0aGUKICAgKiByZXN0IG9mIHRoZSBzdWJzY3JpcHRpb24ncyBsaWZlIGN5Y2xlLgogICAqLwogIHZvaWQgX3NldFBlbmRpbmdFdmVudHMoX1BlbmRpbmdFdmVudHM8VD4gcGVuZGluZ0V2ZW50cykgewogICAgYXNzZXJ0KF9wZW5kaW5nID09IG51bGwpOwogICAgaWYgKHBlbmRpbmdFdmVudHMgPT0gbnVsbCkgcmV0dXJuOwogICAgX3BlbmRpbmcgPSBwZW5kaW5nRXZlbnRzOwogICAgaWYgKCFwZW5kaW5nRXZlbnRzLmlzRW1wdHkpIHsKICAgICAgX3N0YXRlIHw9IF9TVEFURV9IQVNfUEVORElORzsKICAgICAgX3BlbmRpbmcuc2NoZWR1bGUodGhpcyk7CiAgICB9CiAgfQoKICAvLyBTdHJlYW1TdWJzY3JpcHRpb24gaW50ZXJmYWNlLgoKICB2b2lkIG9uRGF0YSh2b2lkIGhhbmRsZURhdGEoVCBldmVudCkpIHsKICAgIGhhbmRsZURhdGEgPz89IF9udWxsRGF0YUhhbmRsZXI7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHJldHVybiB0eXBlIHNob3VsZCBiZSAndm9pZCcsIGFuZCB0aGUgdHlwZQogICAgLy8gc2hvdWxkIGJlIGluZmVycmVkLgogICAgX29uRGF0YSA9IF96b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjazxkeW5hbWljLCBUPihoYW5kbGVEYXRhKTsKICB9CgogIHZvaWQgb25FcnJvcihGdW5jdGlvbiBoYW5kbGVFcnJvcikgewogICAgaGFuZGxlRXJyb3IgPz89IF9udWxsRXJyb3JIYW5kbGVyOwogICAgaWYgKGhhbmRsZUVycm9yIGlzIHZvaWQgRnVuY3Rpb24oT2JqZWN0LCBTdGFja1RyYWNlKSkgewogICAgICBfb25FcnJvciA9IF96b25lCiAgICAgICAgICAucmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxkeW5hbWljLCBPYmplY3QsIFN0YWNrVHJhY2U+KGhhbmRsZUVycm9yKTsKICAgIH0gZWxzZSBpZiAoaGFuZGxlRXJyb3IgaXMgdm9pZCBGdW5jdGlvbihPYmplY3QpKSB7CiAgICAgIF9vbkVycm9yID0gX3pvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE9iamVjdD4oaGFuZGxlRXJyb3IpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoImhhbmRsZUVycm9yIGNhbGxiYWNrIG11c3QgdGFrZSBlaXRoZXIgYW4gT2JqZWN0ICIKICAgICAgICAgICIodGhlIGVycm9yKSwgb3IgYm90aCBhbiBPYmplY3QgKHRoZSBlcnJvcikgYW5kIGEgU3RhY2tUcmFjZS4iKTsKICAgIH0KICB9CgogIHZvaWQgb25Eb25lKHZvaWQgaGFuZGxlRG9uZSgpKSB7CiAgICBoYW5kbGVEb25lID8/PSBfbnVsbERvbmVIYW5kbGVyOwogICAgX29uRG9uZSA9IF96b25lLnJlZ2lzdGVyQ2FsbGJhY2soaGFuZGxlRG9uZSk7CiAgfQoKICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSkgewogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICBib29sIHdhc1BhdXNlZCA9IF9pc1BhdXNlZDsKICAgIGJvb2wgd2FzSW5wdXRQYXVzZWQgPSBfaXNJbnB1dFBhdXNlZDsKICAgIC8vIEluY3JlbWVudCBwYXVzZSBjb3VudCBhbmQgbWFyayBpbnB1dCBwYXVzZWQgKGlmIGl0IGlzbid0IGFscmVhZHkpLgogICAgX3N0YXRlID0gKF9zdGF0ZSArIF9TVEFURV9QQVVTRV9DT1VOVCkgfCBfU1RBVEVfSU5QVVRfUEFVU0VEOwogICAgaWYgKHJlc3VtZVNpZ25hbCAhPSBudWxsKSByZXN1bWVTaWduYWwud2hlbkNvbXBsZXRlKHJlc3VtZSk7CiAgICBpZiAoIXdhc1BhdXNlZCAmJiBfcGVuZGluZyAhPSBudWxsKSBfcGVuZGluZy5jYW5jZWxTY2hlZHVsZSgpOwogICAgaWYgKCF3YXNJbnB1dFBhdXNlZCAmJiAhX2luQ2FsbGJhY2spIF9ndWFyZENhbGxiYWNrKF9vblBhdXNlKTsKICB9CgogIHZvaWQgcmVzdW1lKCkgewogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICBpZiAoX2lzUGF1c2VkKSB7CiAgICAgIF9kZWNyZW1lbnRQYXVzZUNvdW50KCk7CiAgICAgIGlmICghX2lzUGF1c2VkKSB7CiAgICAgICAgaWYgKF9oYXNQZW5kaW5nICYmICFfcGVuZGluZy5pc0VtcHR5KSB7CiAgICAgICAgICAvLyBJbnB1dCBpcyBzdGlsbCBwYXVzZWQuCiAgICAgICAgICBfcGVuZGluZy5zY2hlZHVsZSh0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KF9tYXlSZXN1bWVJbnB1dCk7CiAgICAgICAgICBfc3RhdGUgJj0gfl9TVEFURV9JTlBVVF9QQVVTRUQ7CiAgICAgICAgICBpZiAoIV9pbkNhbGxiYWNrKSBfZ3VhcmRDYWxsYmFjayhfb25SZXN1bWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgRnV0dXJlIGNhbmNlbCgpIHsKICAgIC8vIFRoZSB1c2VyIGRvZXNuJ3Qgd2FudCB0byByZWNlaXZlIGFueSBmdXJ0aGVyIGV2ZW50cy4gSWYgdGhlcmUgaXMgYW4KICAgIC8vIGVycm9yIG9yIGRvbmUgZXZlbnQgcGVuZGluZyAod2FpdGluZyBmb3IgdGhlIGNhbmNlbCB0byBiZSBkb25lKSBkaXNjYXJkCiAgICAvLyB0aGF0IGV2ZW50LgogICAgX3N0YXRlICY9IH5fU1RBVEVfV0FJVF9GT1JfQ0FOQ0VMOwogICAgaWYgKCFfaXNDYW5jZWxlZCkgewogICAgICBfY2FuY2VsKCk7CiAgICB9CiAgICByZXR1cm4gX2NhbmNlbEZ1dHVyZSA/PyBGdXR1cmUuX251bGxGdXR1cmU7CiAgfQoKICBGdXR1cmU8RT4gYXNGdXR1cmU8RT4oW0UgZnV0dXJlVmFsdWVdKSB7CiAgICBfRnV0dXJlPEU+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPEU+KCk7CgogICAgLy8gT3ZlcndyaXRlIHRoZSBvbkRvbmUgYW5kIG9uRXJyb3IgaGFuZGxlcnMuCiAgICBfb25Eb25lID0gKCkgewogICAgICByZXN1bHQuX2NvbXBsZXRlKGZ1dHVyZVZhbHVlKTsKICAgIH07CiAgICBfb25FcnJvciA9IChlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICAgIEZ1dHVyZSBjYW5jZWxGdXR1cmUgPSBjYW5jZWwoKTsKICAgICAgaWYgKCFpZGVudGljYWwoY2FuY2VsRnV0dXJlLCBGdXR1cmUuX251bGxGdXR1cmUpKSB7CiAgICAgICAgY2FuY2VsRnV0dXJlLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0KICAgIH07CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFN0YXRlIG1hbmFnZW1lbnQuCgogIGJvb2wgZ2V0IF9pc0lucHV0UGF1c2VkID0+IChfc3RhdGUgJiBfU1RBVEVfSU5QVVRfUEFVU0VEKSAhPSAwOwogIGJvb2wgZ2V0IF9pc0Nsb3NlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NMT1NFRCkgIT0gMDsKICBib29sIGdldCBfaXNDYW5jZWxlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NBTkNFTEVEKSAhPSAwOwogIGJvb2wgZ2V0IF93YWl0c0ZvckNhbmNlbCA9PiAoX3N0YXRlICYgX1NUQVRFX1dBSVRfRk9SX0NBTkNFTCkgIT0gMDsKICBib29sIGdldCBfaW5DYWxsYmFjayA9PiAoX3N0YXRlICYgX1NUQVRFX0lOX0NBTExCQUNLKSAhPSAwOwogIGJvb2wgZ2V0IF9oYXNQZW5kaW5nID0+IChfc3RhdGUgJiBfU1RBVEVfSEFTX1BFTkRJTkcpICE9IDA7CiAgYm9vbCBnZXQgX2lzUGF1c2VkID0+IF9zdGF0ZSA+PSBfU1RBVEVfUEFVU0VfQ09VTlQ7CiAgYm9vbCBnZXQgX2NhbkZpcmUgPT4gX3N0YXRlIDwgX1NUQVRFX0lOX0NBTExCQUNLOwogIGJvb2wgZ2V0IF9tYXlSZXN1bWVJbnB1dCA9PgogICAgICAhX2lzUGF1c2VkICYmIChfcGVuZGluZyA9PSBudWxsIHx8IF9wZW5kaW5nLmlzRW1wdHkpOwogIGJvb2wgZ2V0IF9jYW5jZWxPbkVycm9yID0+IChfc3RhdGUgJiBfU1RBVEVfQ0FOQ0VMX09OX0VSUk9SKSAhPSAwOwoKICBib29sIGdldCBpc1BhdXNlZCA9PiBfaXNQYXVzZWQ7CgogIHZvaWQgX2NhbmNlbCgpIHsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQ0FOQ0VMRUQ7CiAgICBpZiAoX2hhc1BlbmRpbmcpIHsKICAgICAgX3BlbmRpbmcuY2FuY2VsU2NoZWR1bGUoKTsKICAgIH0KICAgIGlmICghX2luQ2FsbGJhY2spIF9wZW5kaW5nID0gbnVsbDsKICAgIF9jYW5jZWxGdXR1cmUgPSBfb25DYW5jZWwoKTsKICB9CgogIC8qKgogICAqIERlY3JlbWVudHMgdGhlIHBhdXNlIGNvdW50LgogICAqCiAgICogRG9lcyBub3QgYXV0b21hdGljYWxseSB1bnBhdXNlIHRoZSBpbnB1dCAoY2FsbCBbX29uUmVzdW1lXSkgd2hlbgogICAqIHRoZSBwYXVzZSBjb3VudCByZWFjaGVzIHplcm8uIFRoaXMgaXMgaGFuZGxlZCBlbHNld2hlcmUsIGFuZCBvbmx5CiAgICogaWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgZXZlbnRzIGJ1ZmZlcmVkLgogICAqLwogIHZvaWQgX2RlY3JlbWVudFBhdXNlQ291bnQoKSB7CiAgICBhc3NlcnQoX2lzUGF1c2VkKTsKICAgIF9zdGF0ZSAtPSBfU1RBVEVfUEFVU0VfQ09VTlQ7CiAgfQoKICAvLyBfRXZlbnRTaW5rIGludGVyZmFjZS4KCiAgdm9pZCBfYWRkKFQgZGF0YSkgewogICAgYXNzZXJ0KCFfaXNDbG9zZWQpOwogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICBpZiAoX2NhbkZpcmUpIHsKICAgICAgX3NlbmREYXRhKGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgX2FkZFBlbmRpbmcobmV3IF9EZWxheWVkRGF0YTxUPihkYXRhKSk7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICBpZiAoX2NhbkZpcmUpIHsKICAgICAgX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7IC8vIFJlcG9ydHMgY2FuY2VsIGFmdGVyIHNlbmRpbmcuCiAgICB9IGVsc2UgewogICAgICBfYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogICAgfQogIH0KCiAgdm9pZCBfY2xvc2UoKSB7CiAgICBhc3NlcnQoIV9pc0Nsb3NlZCk7CiAgICBpZiAoX2lzQ2FuY2VsZWQpIHJldHVybjsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQ0xPU0VEOwogICAgaWYgKF9jYW5GaXJlKSB7CiAgICAgIF9zZW5kRG9uZSgpOwogICAgfSBlbHNlIHsKICAgICAgX2FkZFBlbmRpbmcoY29uc3QgX0RlbGF5ZWREb25lKCkpOwogICAgfQogIH0KCiAgLy8gSG9va3MgY2FsbGVkIHdoZW4gdGhlIGlucHV0IGlzIHBhdXNlZCwgdW5wYXVzZWQgb3IgY2FuY2VsZWQuCiAgLy8gVGhlc2UgbXVzdCBub3QgdGhyb3cuIElmIG92ZXJ3cml0dGVuIHRvIGNhbGwgdXNlciBjb2RlLCBpbmNsdWRlIHN1aXRhYmxlCiAgLy8gdHJ5L2NhdGNoIHdyYXBwaW5nIGFuZCBzZW5kIGFueSBlcnJvcnMgdG8KICAvLyBbX1pvbmUuY3VycmVudC5oYW5kbGVVbmNhdWdodEVycm9yXS4KICB2b2lkIF9vblBhdXNlKCkgewogICAgYXNzZXJ0KF9pc0lucHV0UGF1c2VkKTsKICB9CgogIHZvaWQgX29uUmVzdW1lKCkgewogICAgYXNzZXJ0KCFfaXNJbnB1dFBhdXNlZCk7CiAgfQoKICBGdXR1cmUgX29uQ2FuY2VsKCkgewogICAgYXNzZXJ0KF9pc0NhbmNlbGVkKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gSGFuZGxlIHBlbmRpbmcgZXZlbnRzLgoKICAvKioKICAgKiBBZGQgYSBwZW5kaW5nIGV2ZW50LgogICAqCiAgICogSWYgdGhlIHN1YnNjcmlwdGlvbiBpcyBub3QgcGF1c2VkLCB0aGlzIGFsc28gc2NoZWR1bGVzIGEgZmlyaW5nCiAgICogb2YgcGVuZGluZyBldmVudHMgbGF0ZXIgKGlmIG5lY2Vzc2FyeSkuCiAgICovCiAgdm9pZCBfYWRkUGVuZGluZyhfRGVsYXllZEV2ZW50IGV2ZW50KSB7CiAgICBfU3RyZWFtSW1wbEV2ZW50czxUPiBwZW5kaW5nID0gX3BlbmRpbmc7CiAgICBpZiAoX3BlbmRpbmcgPT0gbnVsbCkgewogICAgICBwZW5kaW5nID0gX3BlbmRpbmcgPSBuZXcgX1N0cmVhbUltcGxFdmVudHM8VD4oKTsKICAgIH0KICAgIHBlbmRpbmcuYWRkKGV2ZW50KTsKICAgIGlmICghX2hhc1BlbmRpbmcpIHsKICAgICAgX3N0YXRlIHw9IF9TVEFURV9IQVNfUEVORElORzsKICAgICAgaWYgKCFfaXNQYXVzZWQpIHsKICAgICAgICBfcGVuZGluZy5zY2hlZHVsZSh0aGlzKTsKICAgICAgfQogICAgfQogIH0KCiAgLyogX0V2ZW50RGlzcGF0Y2ggaW50ZXJmYWNlLiAqLwoKICB2b2lkIF9zZW5kRGF0YShUIGRhdGEpIHsKICAgIGFzc2VydCghX2lzQ2FuY2VsZWQpOwogICAgYXNzZXJ0KCFfaXNQYXVzZWQpOwogICAgYXNzZXJ0KCFfaW5DYWxsYmFjayk7CiAgICBib29sIHdhc0lucHV0UGF1c2VkID0gX2lzSW5wdXRQYXVzZWQ7CiAgICBfc3RhdGUgfD0gX1NUQVRFX0lOX0NBTExCQUNLOwogICAgX3pvbmUucnVuVW5hcnlHdWFyZGVkKF9vbkRhdGEsIGRhdGEpOwogICAgX3N0YXRlICY9IH5fU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICBfY2hlY2tTdGF0ZSh3YXNJbnB1dFBhdXNlZCk7CiAgfQoKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGFzc2VydCghX2lzQ2FuY2VsZWQpOwogICAgYXNzZXJ0KCFfaXNQYXVzZWQpOwogICAgYXNzZXJ0KCFfaW5DYWxsYmFjayk7CiAgICBib29sIHdhc0lucHV0UGF1c2VkID0gX2lzSW5wdXRQYXVzZWQ7CgogICAgdm9pZCBzZW5kRXJyb3IoKSB7CiAgICAgIC8vIElmIHRoZSBzdWJzY3JpcHRpb24gaGFzIGJlZW4gY2FuY2VsZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGNhbmNlbAogICAgICAvLyBmdXR1cmUgdG8gZmluaXNoIHdlIG11c3Qgbm90IHJlcG9ydCB0aGUgZXJyb3IuCiAgICAgIGlmIChfaXNDYW5jZWxlZCAmJiAhX3dhaXRzRm9yQ2FuY2VsKSByZXR1cm47CiAgICAgIF9zdGF0ZSB8PSBfU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGlzIGR5bmFtaWMgc2hvdWxkIGJlICd2b2lkJy4KICAgICAgdmFyIG9uRXJyb3IgPSBfb25FcnJvcjsKICAgICAgaWYgKG9uRXJyb3IgaXMgdm9pZCBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpKSB7CiAgICAgICAgX3pvbmUucnVuQmluYXJ5R3VhcmRlZDxPYmplY3QsIFN0YWNrVHJhY2U+KG9uRXJyb3IsIGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoX29uRXJyb3IgaXMgdm9pZCBGdW5jdGlvbihPYmplY3QpKTsKICAgICAgICBfem9uZS5ydW5VbmFyeUd1YXJkZWQ8T2JqZWN0Pihfb25FcnJvciwgZXJyb3IpOwogICAgICB9CiAgICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0lOX0NBTExCQUNLOwogICAgfQoKICAgIGlmIChfY2FuY2VsT25FcnJvcikgewogICAgICBfc3RhdGUgfD0gX1NUQVRFX1dBSVRfRk9SX0NBTkNFTDsKICAgICAgX2NhbmNlbCgpOwogICAgICBpZiAoX2NhbmNlbEZ1dHVyZSAhPSBudWxsICYmCiAgICAgICAgICAhaWRlbnRpY2FsKF9jYW5jZWxGdXR1cmUsIEZ1dHVyZS5fbnVsbEZ1dHVyZSkpIHsKICAgICAgICBfY2FuY2VsRnV0dXJlLndoZW5Db21wbGV0ZShzZW5kRXJyb3IpOwogICAgICB9IGVsc2UgewogICAgICAgIHNlbmRFcnJvcigpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzZW5kRXJyb3IoKTsKICAgICAgLy8gT25seSBjaGVjayBzdGF0ZSBpZiBub3QgY2FuY2VsT25FcnJvci4KICAgICAgX2NoZWNrU3RhdGUod2FzSW5wdXRQYXVzZWQpOwogICAgfQogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBhc3NlcnQoIV9pc0NhbmNlbGVkKTsKICAgIGFzc2VydCghX2lzUGF1c2VkKTsKICAgIGFzc2VydCghX2luQ2FsbGJhY2spOwoKICAgIHZvaWQgc2VuZERvbmUoKSB7CiAgICAgIC8vIElmIHRoZSBzdWJzY3JpcHRpb24gaGFzIGJlZW4gY2FuY2VsZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGNhbmNlbAogICAgICAvLyBmdXR1cmUgdG8gZmluaXNoIHdlIG11c3Qgbm90IHJlcG9ydCB0aGUgZG9uZSBldmVudC4KICAgICAgaWYgKCFfd2FpdHNGb3JDYW5jZWwpIHJldHVybjsKICAgICAgX3N0YXRlIHw9IChfU1RBVEVfQ0FOQ0VMRUQgfCBfU1RBVEVfQ0xPU0VEIHwgX1NUQVRFX0lOX0NBTExCQUNLKTsKICAgICAgX3pvbmUucnVuR3VhcmRlZChfb25Eb25lKTsKICAgICAgX3N0YXRlICY9IH5fU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICB9CgogICAgX2NhbmNlbCgpOwogICAgX3N0YXRlIHw9IF9TVEFURV9XQUlUX0ZPUl9DQU5DRUw7CiAgICBpZiAoX2NhbmNlbEZ1dHVyZSAhPSBudWxsICYmCiAgICAgICAgIWlkZW50aWNhbChfY2FuY2VsRnV0dXJlLCBGdXR1cmUuX251bGxGdXR1cmUpKSB7CiAgICAgIF9jYW5jZWxGdXR1cmUud2hlbkNvbXBsZXRlKHNlbmREb25lKTsKICAgIH0gZWxzZSB7CiAgICAgIHNlbmREb25lKCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBDYWxsIGEgaG9vayBmdW5jdGlvbi4KICAgKgogICAqIFRoZSBjYWxsIGlzIHByb3Blcmx5IHdyYXBwZWQgaW4gY29kZSB0byBhdm9pZCBvdGhlciBjYWxsYmFja3MKICAgKiBkdXJpbmcgdGhlIGNhbGwsIGFuZCBpdCBjaGVja3MgZm9yIHN0YXRlIGNoYW5nZXMgYWZ0ZXIgdGhlIGNhbGwKICAgKiB0aGF0IHNob3VsZCBjYXVzZSBmdXJ0aGVyIGNhbGxiYWNrcy4KICAgKi8KICB2b2lkIF9ndWFyZENhbGxiYWNrKHZvaWQgY2FsbGJhY2soKSkgewogICAgYXNzZXJ0KCFfaW5DYWxsYmFjayk7CiAgICBib29sIHdhc0lucHV0UGF1c2VkID0gX2lzSW5wdXRQYXVzZWQ7CiAgICBfc3RhdGUgfD0gX1NUQVRFX0lOX0NBTExCQUNLOwogICAgY2FsbGJhY2soKTsKICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0lOX0NBTExCQUNLOwogICAgX2NoZWNrU3RhdGUod2FzSW5wdXRQYXVzZWQpOwogIH0KCiAgLyoqCiAgICogQ2hlY2sgaWYgdGhlIGlucHV0IG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHN0YXRlIGNoYW5nZXMuCiAgICoKICAgKiBTdGF0ZSBjaGFuZ2VzIGFyZSBwYXVzaW5nLCByZXN1bWluZyBhbmQgY2FuY2VsaW5nLgogICAqCiAgICogQWZ0ZXIgY2FuY2VsaW5nLCBubyBmdXJ0aGVyIGNhbGxiYWNrcyB3aWxsIGhhcHBlbi4KICAgKgogICAqIFRoZSBjYW5jZWwgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIGEgdXNlciBjYW5jZWwsIG9yIGFmdGVyCiAgICogdGhlIGZpbmFsIGRvbmUgZXZlbnQgaXMgc2VudC4KICAgKi8KICB2b2lkIF9jaGVja1N0YXRlKGJvb2wgd2FzSW5wdXRQYXVzZWQpIHsKICAgIGFzc2VydCghX2luQ2FsbGJhY2spOwogICAgaWYgKF9oYXNQZW5kaW5nICYmIF9wZW5kaW5nLmlzRW1wdHkpIHsKICAgICAgX3N0YXRlICY9IH5fU1RBVEVfSEFTX1BFTkRJTkc7CiAgICAgIGlmIChfaXNJbnB1dFBhdXNlZCAmJiBfbWF5UmVzdW1lSW5wdXQpIHsKICAgICAgICBfc3RhdGUgJj0gfl9TVEFURV9JTlBVVF9QQVVTRUQ7CiAgICAgIH0KICAgIH0KICAgIC8vIElmIHRoZSBzdGF0ZSBjaGFuZ2VzIGR1cmluZyBhIGNhbGxiYWNrLCB3ZSBpbW1lZGlhdGVseQogICAgLy8gbWFrZSBhIG5ldyBzdGF0ZS1jaGFuZ2UgY2FsbGJhY2suIExvb3AgdW50aWwgdGhlIHN0YXRlIGRpZG4ndCBjaGFuZ2UuCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoX2lzQ2FuY2VsZWQpIHsKICAgICAgICBfcGVuZGluZyA9IG51bGw7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGJvb2wgaXNJbnB1dFBhdXNlZCA9IF9pc0lucHV0UGF1c2VkOwogICAgICBpZiAod2FzSW5wdXRQYXVzZWQgPT0gaXNJbnB1dFBhdXNlZCkgYnJlYWs7CiAgICAgIF9zdGF0ZSBePSBfU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICAgIGlmIChpc0lucHV0UGF1c2VkKSB7CiAgICAgICAgX29uUGF1c2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfb25SZXN1bWUoKTsKICAgICAgfQogICAgICBfc3RhdGUgJj0gfl9TVEFURV9JTl9DQUxMQkFDSzsKICAgICAgd2FzSW5wdXRQYXVzZWQgPSBpc0lucHV0UGF1c2VkOwogICAgfQogICAgaWYgKF9oYXNQZW5kaW5nICYmICFfaXNQYXVzZWQpIHsKICAgICAgX3BlbmRpbmcuc2NoZWR1bGUodGhpcyk7CiAgICB9CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBzaW5nbGUgYW5kIG11bHRpLXN1YnNjcmlwdGlvbiBzdHJlYW1zLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmFic3RyYWN0IGNsYXNzIF9TdHJlYW1JbXBsPFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBTdHJlYW0gaW50ZXJmYWNlLgoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBjYW5jZWxPbkVycm9yID0gaWRlbnRpY2FsKHRydWUsIGNhbmNlbE9uRXJyb3IpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9CiAgICAgICAgX2NyZWF0ZVN1YnNjcmlwdGlvbihvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CiAgICBfb25MaXN0ZW4oc3Vic2NyaXB0aW9uKTsKICAgIHJldHVybiBzdWJzY3JpcHRpb247CiAgfQoKICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLyoqIENyZWF0ZSBhIHN1YnNjcmlwdGlvbiBvYmplY3QuIENhbGxlZCBieSBbc3ViY3JpYmVdLiAqLwogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfY3JlYXRlU3Vic2NyaXB0aW9uKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAgcmV0dXJuIG5ldyBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKICB9CgogIC8qKiBIb29rIGNhbGxlZCB3aGVuIHRoZSBzdWJzY3JpcHRpb24gaGFzIGJlZW4gY3JlYXRlZC4gKi8KICB2b2lkIF9vbkxpc3RlbihTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uKSB7fQp9Cgp0eXBlZGVmIF9QZW5kaW5nRXZlbnRzPFQ+IF9FdmVudEdlbmVyYXRvcjxUPigpOwoKLyoqIFN0cmVhbSB0aGF0IGdlbmVyYXRlcyBpdHMgb3duIGV2ZW50cy4gKi8KY2xhc3MgX0dlbmVyYXRlZFN0cmVhbUltcGw8VD4gZXh0ZW5kcyBfU3RyZWFtSW1wbDxUPiB7CiAgZmluYWwgX0V2ZW50R2VuZXJhdG9yPFQ+IF9wZW5kaW5nOwogIGJvb2wgX2lzVXNlZCA9IGZhbHNlOwogIC8qKgogICAqIEluaXRpYWxpemVzIHRoZSBzdHJlYW0gdG8gaGF2ZSBvbmx5IHRoZSBldmVudHMgcHJvdmlkZWQgYnkgYQogICAqIFtfUGVuZGluZ0V2ZW50c10uCiAgICoKICAgKiBBIG5ldyBbX1BlbmRpbmdFdmVudHNdIG11c3QgYmUgZ2VuZXJhdGVkIGZvciBlYWNoIGxpc3Rlbi4KICAgKi8KICBfR2VuZXJhdGVkU3RyZWFtSW1wbCh0aGlzLl9wZW5kaW5nKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICBpZiAoX2lzVXNlZCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxpc3RlbmVkIHRvLiIpOwogICAgX2lzVXNlZCA9IHRydWU7CiAgICByZXR1cm4gbmV3IF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4oCiAgICAgICAgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpCiAgICAgIC4uX3NldFBlbmRpbmdFdmVudHMoX3BlbmRpbmcoKSk7CiAgfQp9CgovKiogUGVuZGluZyBldmVudHMgb2JqZWN0IHRoYXQgZ2V0cyBpdHMgZXZlbnRzIGZyb20gYW4gW0l0ZXJhYmxlXS4gKi8KY2xhc3MgX0l0ZXJhYmxlUGVuZGluZ0V2ZW50czxUPiBleHRlbmRzIF9QZW5kaW5nRXZlbnRzPFQ+IHsKICAvLyBUaGUgaXRlcmF0b3IgcHJvdmlkaW5nIGRhdGEgZm9yIGRhdGEgZXZlbnRzLgogIC8vIFNldCB0byBudWxsIHdoZW4gaXRlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCiAgSXRlcmF0b3I8VD4gX2l0ZXJhdG9yOwoKICBfSXRlcmFibGVQZW5kaW5nRXZlbnRzKEl0ZXJhYmxlPFQ+IGRhdGEpIDogX2l0ZXJhdG9yID0gZGF0YS5pdGVyYXRvcjsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfaXRlcmF0b3IgPT0gbnVsbDsKCiAgdm9pZCBoYW5kbGVOZXh0KF9FdmVudERpc3BhdGNoPFQ+IGRpc3BhdGNoKSB7CiAgICBpZiAoX2l0ZXJhdG9yID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIGV2ZW50cyBwZW5kaW5nLiIpOwogICAgfQogICAgLy8gU2VuZCBvbmUgZXZlbnQgcGVyIGNhbGwgdG8gbW92ZU5leHQuCiAgICAvLyBJZiBtb3ZlTmV4dCByZXR1cm5zIHRydWUsIHNlbmQgdGhlIGN1cnJlbnQgZWxlbWVudCBhcyBkYXRhLgogICAgLy8gSWYgY3VycmVudCB0aHJvd3MsIHNlbmQgdGhhdCBlcnJvciwgYnV0IGtlZXAgaXRlcmF0aW5nLgogICAgLy8gSWYgbW92ZU5leHQgcmV0dXJucyBmYWxzZSwgc2VuZCBhIGRvbmUgZXZlbnQgYW5kIGNsZWFyIHRoZSBfaXRlcmF0b3IuCiAgICAvLyBJZiBtb3ZlTmV4dCB0aHJvd3MgYW4gZXJyb3IsIHNlbmQgYW4gZXJyb3IgYW5kIHByZXBhcmUgdG8gc2VuZCBhIGRvbmUKICAgIC8vIGV2ZW50IGFmdGVyd2FyZHMuCiAgICBib29sIGhhc01vcmU7CiAgICB0cnkgewogICAgICBoYXNNb3JlID0gX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICAgIGlmIChoYXNNb3JlKSB7CiAgICAgICAgZGlzcGF0Y2guX3NlbmREYXRhKF9pdGVyYXRvci5jdXJyZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfaXRlcmF0b3IgPSBudWxsOwogICAgICAgIGRpc3BhdGNoLl9zZW5kRG9uZSgpOwogICAgICB9CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGlmIChoYXNNb3JlID09IG51bGwpIHsKICAgICAgICAvLyBUaHJldyBpbiAubW92ZU5leHQoKS4KICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBzZW5kIGEgZG9uZSBhZnRlcndhcmRzLgogICAgICAgIF9pdGVyYXRvciA9IGNvbnN0IEVtcHR5SXRlcmF0b3I8TnVsbD4oKTsKICAgICAgICBkaXNwYXRjaC5fc2VuZEVycm9yKGUsIHMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRocmV3IGluIC5jdXJyZW50LgogICAgICAgIGRpc3BhdGNoLl9zZW5kRXJyb3IoZSwgcyk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoaXNTY2hlZHVsZWQpIGNhbmNlbFNjaGVkdWxlKCk7CiAgICBfaXRlcmF0b3IgPSBudWxsOwogIH0KfQoKLy8gSW50ZXJuYWwgaGVscGVycy4KCi8vIFR5cGVzIG9mIHRoZSBkaWZmZXJlbnQgaGFuZGxlcnMgb24gYSBzdHJlYW0uIFR5cGVzIHVzZWQgdG8gdHlwZSBmaWVsZHMuCnR5cGVkZWYgdm9pZCBfRGF0YUhhbmRsZXI8VD4oVCB2YWx1ZSk7CnR5cGVkZWYgdm9pZCBfRG9uZUhhbmRsZXIoKTsKCi8qKiBEZWZhdWx0IGRhdGEgaGFuZGxlciwgZG9lcyBub3RoaW5nLiAqLwp2b2lkIF9udWxsRGF0YUhhbmRsZXIoT2JqZWN0IHZhbHVlKSB7fQoKLyoqIERlZmF1bHQgZXJyb3IgaGFuZGxlciwgcmVwb3J0cyB0aGUgZXJyb3IgdG8gdGhlIGN1cnJlbnQgem9uZSdzIGhhbmRsZXIuICovCnZvaWQgX251bGxFcnJvckhhbmRsZXIoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogIFpvbmUuY3VycmVudC5oYW5kbGVVbmNhdWdodEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKfQoKLyoqIERlZmF1bHQgZG9uZSBoYW5kbGVyLCBkb2VzIG5vdGhpbmcuICovCnZvaWQgX251bGxEb25lSGFuZGxlcigpIHt9CgovKiogQSBkZWxheWVkIGV2ZW50IG9uIGEgYnVmZmVyaW5nIHN0cmVhbSBzdWJzY3JpcHRpb24uICovCmFic3RyYWN0IGNsYXNzIF9EZWxheWVkRXZlbnQ8VD4gewogIC8qKiBBZGRlZCBhcyBhIGxpbmtlZCBsaXN0IG9uIHRoZSBbU3RyZWFtQ29udHJvbGxlcl0uICovCiAgX0RlbGF5ZWRFdmVudCBuZXh0OwogIC8qKiBFeGVjdXRlIHRoZSBkZWxheWVkIGV2ZW50IG9uIHRoZSBbU3RyZWFtQ29udHJvbGxlcl0uICovCiAgdm9pZCBwZXJmb3JtKF9FdmVudERpc3BhdGNoPFQ+IGRpc3BhdGNoKTsKfQoKLyoqIEEgZGVsYXllZCBkYXRhIGV2ZW50LiAqLwpjbGFzcyBfRGVsYXllZERhdGE8VD4gZXh0ZW5kcyBfRGVsYXllZEV2ZW50PFQ+IHsKICBmaW5hbCBUIHZhbHVlOwogIF9EZWxheWVkRGF0YSh0aGlzLnZhbHVlKTsKICB2b2lkIHBlcmZvcm0oX0V2ZW50RGlzcGF0Y2g8VD4gZGlzcGF0Y2gpIHsKICAgIGRpc3BhdGNoLl9zZW5kRGF0YSh2YWx1ZSk7CiAgfQp9CgovKiogQSBkZWxheWVkIGVycm9yIGV2ZW50LiAqLwpjbGFzcyBfRGVsYXllZEVycm9yIGV4dGVuZHMgX0RlbGF5ZWRFdmVudCB7CiAgZmluYWwgZXJyb3I7CiAgZmluYWwgU3RhY2tUcmFjZSBzdGFja1RyYWNlOwoKICBfRGVsYXllZEVycm9yKHRoaXMuZXJyb3IsIHRoaXMuc3RhY2tUcmFjZSk7CiAgdm9pZCBwZXJmb3JtKF9FdmVudERpc3BhdGNoIGRpc3BhdGNoKSB7CiAgICBkaXNwYXRjaC5fc2VuZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9Cn0KCi8qKiBBIGRlbGF5ZWQgZG9uZSBldmVudC4gKi8KY2xhc3MgX0RlbGF5ZWREb25lIGltcGxlbWVudHMgX0RlbGF5ZWRFdmVudCB7CiAgY29uc3QgX0RlbGF5ZWREb25lKCk7CiAgdm9pZCBwZXJmb3JtKF9FdmVudERpc3BhdGNoIGRpc3BhdGNoKSB7CiAgICBkaXNwYXRjaC5fc2VuZERvbmUoKTsKICB9CgogIF9EZWxheWVkRXZlbnQgZ2V0IG5leHQgPT4gbnVsbDsKCiAgdm9pZCBzZXQgbmV4dChfRGVsYXllZEV2ZW50IF8pIHsKICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBldmVudHMgYWZ0ZXIgYSBkb25lLiIpOwogIH0KfQoKLyoqIFN1cGVyY2xhc3MgZm9yIHByb3ZpZGVyIG9mIHBlbmRpbmcgZXZlbnRzLiAqLwphYnN0cmFjdCBjbGFzcyBfUGVuZGluZ0V2ZW50czxUPiB7CiAgLy8gTm8gYXN5bmMgZXZlbnQgaGFzIGJlZW4gc2NoZWR1bGVkLgogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1VOU0NIRURVTEVEID0gMDsKICAvLyBBbiBhc3luYyBldmVudCBoYXMgYmVlbiBzY2hlZHVsZWQgdG8gcnVuIGEgZnVuY3Rpb24uCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfU0NIRURVTEVEID0gMTsKICAvLyBBbiBhc3luYyBldmVudCBoYXMgYmVlbiBzY2hlZHVsZWQsIGJ1dCBpdCB3aWxsIGRvIG5vdGhpbmcgd2hlbiBpdCBydW5zLgogIC8vIEFzeW5jIGV2ZW50cyBjYW4ndCBiZSBwcmVlbXB0ZWQuCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQ0FOQ0VMRUQgPSAzOwoKICAvKioKICAgKiBTdGF0ZSBvZiBiZWluZyBzY2hlZHVsZWQuCiAgICoKICAgKiBTZXQgdG8gW19TVEFURV9TQ0hFRFVMRURdIHdoZW4gcGVuZGluZyBldmVudHMgYXJlIHNjaGVkdWxlZCBmb3IKICAgKiBhc3luYyBkaXNwYXRjaC4gU2luY2Ugd2UgY2FuJ3QgY2FuY2VsIGEgW3NjaGVkdWxlTWljcm90YXNrXSBjYWxsLCBpZgogICAqIHNjaGVkdWxpbmcgaXMgImNhbmNlbGVkIiwgdGhlIF9zdGF0ZSBpcyBzaW1wbHkgc2V0IHRvIFtfU1RBVEVfQ0FOQ0VMRURdCiAgICogd2hpY2ggd2lsbCBtYWtlIHRoZSBhc3luYyBjb2RlIGRvIG5vdGhpbmcgZXhjZXB0IHJlc2V0dGluZyBbX3N0YXRlXS4KICAgKgogICAqIElmIGV2ZW50cyBhcmUgc2NoZWR1bGVkIHdoaWxlIHRoZSBzdGF0ZSBpcyBbX1NUQVRFX0NBTkNFTEVEXSwgaXQgaXMKICAgKiBtZXJlbHkgc3dpdGNoZWQgYmFjayB0byBbX1NUQVRFX1NDSEVEVUxFRF0sIGJ1dCBubyBuZXcgY2FsbCB0bwogICAqIFtzY2hlZHVsZU1pY3JvdGFza10gaXMgcGVyZm9ybWVkLgogICAqLwogIGludCBfc3RhdGUgPSBfU1RBVEVfVU5TQ0hFRFVMRUQ7CgogIGJvb2wgZ2V0IGlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzU2NoZWR1bGVkID0+IF9zdGF0ZSA9PSBfU1RBVEVfU0NIRURVTEVEOwogIGJvb2wgZ2V0IF9ldmVudFNjaGVkdWxlZCA9PiBfc3RhdGUgPj0gX1NUQVRFX1NDSEVEVUxFRDsKCiAgLyoqCiAgICogU2NoZWR1bGUgYW4gZXZlbnQgdG8gcnVuIGxhdGVyLgogICAqCiAgICogSWYgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLCBpdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgZGlzcGF0Y2ggYXMKICAgKiBhcmd1bWVudCBlYWNoIHRpbWUuIEl0IG1heSByZXVzZSBhbiBlYXJsaWVyIGFyZ3VtZW50IGluIHNvbWUgY2FzZXMuCiAgICovCiAgdm9pZCBzY2hlZHVsZShfRXZlbnREaXNwYXRjaDxUPiBkaXNwYXRjaCkgewogICAgaWYgKGlzU2NoZWR1bGVkKSByZXR1cm47CiAgICBhc3NlcnQoIWlzRW1wdHkpOwogICAgaWYgKF9ldmVudFNjaGVkdWxlZCkgewogICAgICBhc3NlcnQoX3N0YXRlID09IF9TVEFURV9DQU5DRUxFRCk7CiAgICAgIF9zdGF0ZSA9IF9TVEFURV9TQ0hFRFVMRUQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgaW50IG9sZFN0YXRlID0gX3N0YXRlOwogICAgICBfc3RhdGUgPSBfU1RBVEVfVU5TQ0hFRFVMRUQ7CiAgICAgIGlmIChvbGRTdGF0ZSA9PSBfU1RBVEVfQ0FOQ0VMRUQpIHJldHVybjsKICAgICAgaGFuZGxlTmV4dChkaXNwYXRjaCk7CiAgICB9KTsKICAgIF9zdGF0ZSA9IF9TVEFURV9TQ0hFRFVMRUQ7CiAgfQoKICB2b2lkIGNhbmNlbFNjaGVkdWxlKCkgewogICAgaWYgKGlzU2NoZWR1bGVkKSBfc3RhdGUgPSBfU1RBVEVfQ0FOQ0VMRUQ7CiAgfQoKICB2b2lkIGhhbmRsZU5leHQoX0V2ZW50RGlzcGF0Y2g8VD4gZGlzcGF0Y2gpOwoKICAvKiogVGhyb3cgYXdheSBhbnkgcGVuZGluZyBldmVudHMgYW5kIGNhbmNlbCBzY2hlZHVsZWQgZXZlbnRzLiAqLwogIHZvaWQgY2xlYXIoKTsKfQoKLyoqIENsYXNzIGhvbGRpbmcgcGVuZGluZyBldmVudHMgZm9yIGEgW19TdHJlYW1JbXBsXS4gKi8KY2xhc3MgX1N0cmVhbUltcGxFdmVudHM8VD4gZXh0ZW5kcyBfUGVuZGluZ0V2ZW50czxUPiB7CiAgLy8vIFNpbmdsZSBsaW5rZWQgbGlzdCBvZiBbX0RlbGF5ZWRFdmVudF0gb2JqZWN0cy4KICBfRGVsYXllZEV2ZW50IGZpcnN0UGVuZGluZ0V2ZW50OwoKICAvLy8gTGFzdCBlbGVtZW50IGluIHRoZSBsaXN0IG9mIHBlbmRpbmcgZXZlbnRzLiBOZXcgZXZlbnRzIGFyZSBhZGRlZCBhZnRlciBpdC4KICBfRGVsYXllZEV2ZW50IGxhc3RQZW5kaW5nRXZlbnQ7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGFzdFBlbmRpbmdFdmVudCA9PSBudWxsOwoKICB2b2lkIGFkZChfRGVsYXllZEV2ZW50IGV2ZW50KSB7CiAgICBpZiAobGFzdFBlbmRpbmdFdmVudCA9PSBudWxsKSB7CiAgICAgIGZpcnN0UGVuZGluZ0V2ZW50ID0gbGFzdFBlbmRpbmdFdmVudCA9IGV2ZW50OwogICAgfSBlbHNlIHsKICAgICAgbGFzdFBlbmRpbmdFdmVudCA9IGxhc3RQZW5kaW5nRXZlbnQubmV4dCA9IGV2ZW50OwogICAgfQogIH0KCiAgdm9pZCBoYW5kbGVOZXh0KF9FdmVudERpc3BhdGNoPFQ+IGRpc3BhdGNoKSB7CiAgICBhc3NlcnQoIWlzU2NoZWR1bGVkKTsKICAgIF9EZWxheWVkRXZlbnQgZXZlbnQgPSBmaXJzdFBlbmRpbmdFdmVudDsKICAgIGZpcnN0UGVuZGluZ0V2ZW50ID0gZXZlbnQubmV4dDsKICAgIGlmIChmaXJzdFBlbmRpbmdFdmVudCA9PSBudWxsKSB7CiAgICAgIGxhc3RQZW5kaW5nRXZlbnQgPSBudWxsOwogICAgfQogICAgZXZlbnQucGVyZm9ybShkaXNwYXRjaCk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKGlzU2NoZWR1bGVkKSBjYW5jZWxTY2hlZHVsZSgpOwogICAgZmlyc3RQZW5kaW5nRXZlbnQgPSBsYXN0UGVuZGluZ0V2ZW50ID0gbnVsbDsKICB9Cn0KCnR5cGVkZWYgdm9pZCBfQnJvYWRjYXN0Q2FsbGJhY2s8VD4oU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbik7CgovKioKICogRG9uZSBzdWJzY3JpcHRpb24gdGhhdCB3aWxsIHNlbmQgb25lIGRvbmUgZXZlbnQgYXMgc29vbiBhcyBwb3NzaWJsZS4KICovCmNsYXNzIF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGltcGxlbWVudHMgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICBzdGF0aWMgY29uc3QgaW50IF9ET05FX1NFTlQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX1NDSEVEVUxFRCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBfUEFVU0VEID0gNDsKCiAgZmluYWwgWm9uZSBfem9uZTsKICBpbnQgX3N0YXRlID0gMDsKICBfRG9uZUhhbmRsZXIgX29uRG9uZTsKCiAgX0RvbmVTdHJlYW1TdWJzY3JpcHRpb24odGhpcy5fb25Eb25lKSA6IF96b25lID0gWm9uZS5jdXJyZW50IHsKICAgIF9zY2hlZHVsZSgpOwogIH0KCiAgYm9vbCBnZXQgX2lzU2VudCA9PiAoX3N0YXRlICYgX0RPTkVfU0VOVCkgIT0gMDsKICBib29sIGdldCBfaXNTY2hlZHVsZWQgPT4gKF9zdGF0ZSAmIF9TQ0hFRFVMRUQpICE9IDA7CiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4gX3N0YXRlID49IF9QQVVTRUQ7CgogIHZvaWQgX3NjaGVkdWxlKCkgewogICAgaWYgKF9pc1NjaGVkdWxlZCkgcmV0dXJuOwogICAgX3pvbmUuc2NoZWR1bGVNaWNyb3Rhc2soX3NlbmREb25lKTsKICAgIF9zdGF0ZSB8PSBfU0NIRURVTEVEOwogIH0KCiAgdm9pZCBvbkRhdGEodm9pZCBoYW5kbGVEYXRhKFQgZGF0YSkpIHt9CiAgdm9pZCBvbkVycm9yKEZ1bmN0aW9uIGhhbmRsZUVycm9yKSB7fQogIHZvaWQgb25Eb25lKHZvaWQgaGFuZGxlRG9uZSgpKSB7CiAgICBfb25Eb25lID0gaGFuZGxlRG9uZTsKICB9CgogIHZvaWQgcGF1c2UoW0Z1dHVyZSByZXN1bWVTaWduYWxdKSB7CiAgICBfc3RhdGUgKz0gX1BBVVNFRDsKICAgIGlmIChyZXN1bWVTaWduYWwgIT0gbnVsbCkgcmVzdW1lU2lnbmFsLndoZW5Db21wbGV0ZShyZXN1bWUpOwogIH0KCiAgdm9pZCByZXN1bWUoKSB7CiAgICBpZiAoaXNQYXVzZWQpIHsKICAgICAgX3N0YXRlIC09IF9QQVVTRUQ7CiAgICAgIGlmICghaXNQYXVzZWQgJiYgIV9pc1NlbnQpIHsKICAgICAgICBfc2NoZWR1bGUoKTsKICAgICAgfQogICAgfQogIH0KCiAgRnV0dXJlIGNhbmNlbCgpID0+IEZ1dHVyZS5fbnVsbEZ1dHVyZTsKCiAgRnV0dXJlPEU+IGFzRnV0dXJlPEU+KFtFIGZ1dHVyZVZhbHVlXSkgewogICAgX0Z1dHVyZTxFPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxFPigpOwogICAgX29uRG9uZSA9ICgpIHsKICAgICAgcmVzdWx0Ll9jb21wbGV0ZVdpdGhWYWx1ZShmdXR1cmVWYWx1ZSk7CiAgICB9OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3NlbmREb25lKCkgewogICAgX3N0YXRlICY9IH5fU0NIRURVTEVEOwogICAgaWYgKGlzUGF1c2VkKSByZXR1cm47CiAgICBfc3RhdGUgfD0gX0RPTkVfU0VOVDsKICAgIGlmIChfb25Eb25lICE9IG51bGwpIF96b25lLnJ1bkd1YXJkZWQoX29uRG9uZSk7CiAgfQp9CgpjbGFzcyBfQXNCcm9hZGNhc3RTdHJlYW08VD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIFN0cmVhbTxUPiBfc291cmNlOwogIGZpbmFsIF9Ccm9hZGNhc3RDYWxsYmFjazxUPiBfb25MaXN0ZW5IYW5kbGVyOwogIGZpbmFsIF9Ccm9hZGNhc3RDYWxsYmFjazxUPiBfb25DYW5jZWxIYW5kbGVyOwogIGZpbmFsIFpvbmUgX3pvbmU7CgogIF9Bc0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4gX2NvbnRyb2xsZXI7CiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9zdWJzY3JpcHRpb247CgogIF9Bc0Jyb2FkY2FzdFN0cmVhbSgKICAgICAgdGhpcy5fc291cmNlLAogICAgICB2b2lkIG9uTGlzdGVuSGFuZGxlcihTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSwKICAgICAgdm9pZCBvbkNhbmNlbEhhbmRsZXIoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikpCiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgcmV0dXJuIHR5cGUgc2hvdWxkIGJlIHZvaWQgYW5kIHNob3VsZCBiZQogICAgICAvLyBpbmZlcnJlZC4KICAgICAgOiBfb25MaXN0ZW5IYW5kbGVyID0gWm9uZS5jdXJyZW50CiAgICAgICAgICAgIC5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+PigKICAgICAgICAgICAgICAgIG9uTGlzdGVuSGFuZGxlciksCiAgICAgICAgX29uQ2FuY2VsSGFuZGxlciA9IFpvbmUuY3VycmVudAogICAgICAgICAgICAucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIFN0cmVhbVN1YnNjcmlwdGlvbjxUPj4oCiAgICAgICAgICAgICAgICBvbkNhbmNlbEhhbmRsZXIpLAogICAgICAgIF96b25lID0gWm9uZS5jdXJyZW50IHsKICAgIF9jb250cm9sbGVyID0gbmV3IF9Bc0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4oX29uTGlzdGVuLCBfb25DYW5jZWwpOwogIH0KCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gdHJ1ZTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGxpc3Rlbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaWYgKF9jb250cm9sbGVyID09IG51bGwgfHwgX2NvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgLy8gUmV0dXJuIGEgZHVtbXkgc3Vic2NyaXB0aW9uIGJhY2tlZCBieSBub3RoaW5nLCBzaW5jZQogICAgICAvLyBpdCB3aWxsIG9ubHkgZXZlciBzZW5kIG9uZSBkb25lIGV2ZW50LgogICAgICByZXR1cm4gbmV3IF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KG9uRG9uZSk7CiAgICB9CiAgICBfc3Vic2NyaXB0aW9uID8/PSBfc291cmNlLmxpc3RlbihfY29udHJvbGxlci5hZGQsCiAgICAgICAgb25FcnJvcjogX2NvbnRyb2xsZXIuYWRkRXJyb3IsIG9uRG9uZTogX2NvbnRyb2xsZXIuY2xvc2UpOwogICAgY2FuY2VsT25FcnJvciA9IGlkZW50aWNhbCh0cnVlLCBjYW5jZWxPbkVycm9yKTsKICAgIHJldHVybiBfY29udHJvbGxlci5fc3Vic2NyaWJlKG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKICB9CgogIHZvaWQgX29uQ2FuY2VsKCkgewogICAgYm9vbCBzaHV0ZG93biA9IChfY29udHJvbGxlciA9PSBudWxsKSB8fCBfY29udHJvbGxlci5pc0Nsb3NlZDsKICAgIGlmIChfb25DYW5jZWxIYW5kbGVyICE9IG51bGwpIHsKICAgICAgX3pvbmUucnVuVW5hcnkoCiAgICAgICAgICBfb25DYW5jZWxIYW5kbGVyLCBuZXcgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXI8VD4odGhpcykpOwogICAgfQogICAgaWYgKHNodXRkb3duKSB7CiAgICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9vbkxpc3RlbigpIHsKICAgIGlmIChfb25MaXN0ZW5IYW5kbGVyICE9IG51bGwpIHsKICAgICAgX3pvbmUucnVuVW5hcnkoCiAgICAgICAgICBfb25MaXN0ZW5IYW5kbGVyLCBuZXcgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXI8VD4odGhpcykpOwogICAgfQogIH0KCiAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uV3JhcHBlci4KICB2b2lkIF9jYW5jZWxTdWJzY3JpcHRpb24oKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiA9PSBudWxsKSByZXR1cm47CiAgICAvLyBDYWxsZWQgYnkgW19jb250cm9sbGVyXSB3aGVuIGl0IGhhcyBubyBzdWJzY3JpYmVycyBsZWZ0LgogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiA9IF9zdWJzY3JpcHRpb247CiAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIF9jb250cm9sbGVyID0gbnVsbDsgLy8gTWFya3MgdGhlIHN0cmVhbSBhcyBubyBsb25nZXIgbGlzdGVuYWJsZS4KICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICB9CgogIHZvaWQgX3BhdXNlU3Vic2NyaXB0aW9uKEZ1dHVyZSByZXN1bWVTaWduYWwpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybjsKICAgIF9zdWJzY3JpcHRpb24ucGF1c2UocmVzdW1lU2lnbmFsKTsKICB9CgogIHZvaWQgX3Jlc3VtZVN1YnNjcmlwdGlvbigpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybjsKICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgfQoKICBib29sIGdldCBfaXNTdWJzY3JpcHRpb25QYXVzZWQgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9zdWJzY3JpcHRpb24uaXNQYXVzZWQ7CiAgfQp9CgovKioKICogV3JhcHBlciBmb3Igc3Vic2NyaXB0aW9uIHRoYXQgZGlzYWxsb3dzIGNoYW5naW5nIGhhbmRsZXJzLgogKi8KY2xhc3MgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXI8VD4gaW1wbGVtZW50cyBTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIGZpbmFsIF9Bc0Jyb2FkY2FzdFN0cmVhbSBfc3RyZWFtOwoKICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uV3JhcHBlcih0aGlzLl9zdHJlYW0pOwoKICB2b2lkIG9uRGF0YSh2b2lkIGhhbmRsZURhdGEoVCBkYXRhKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkNhbm5vdCBjaGFuZ2UgaGFuZGxlcnMgb2YgYXNCcm9hZGNhc3RTdHJlYW0gc291cmNlIHN1YnNjcmlwdGlvbi4iKTsKICB9CgogIHZvaWQgb25FcnJvcihGdW5jdGlvbiBoYW5kbGVFcnJvcikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkNhbm5vdCBjaGFuZ2UgaGFuZGxlcnMgb2YgYXNCcm9hZGNhc3RTdHJlYW0gc291cmNlIHN1YnNjcmlwdGlvbi4iKTsKICB9CgogIHZvaWQgb25Eb25lKHZvaWQgaGFuZGxlRG9uZSgpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSBoYW5kbGVycyBvZiBhc0Jyb2FkY2FzdFN0cmVhbSBzb3VyY2Ugc3Vic2NyaXB0aW9uLiIpOwogIH0KCiAgdm9pZCBwYXVzZShbRnV0dXJlIHJlc3VtZVNpZ25hbF0pIHsKICAgIF9zdHJlYW0uX3BhdXNlU3Vic2NyaXB0aW9uKHJlc3VtZVNpZ25hbCk7CiAgfQoKICB2b2lkIHJlc3VtZSgpIHsKICAgIF9zdHJlYW0uX3Jlc3VtZVN1YnNjcmlwdGlvbigpOwogIH0KCiAgRnV0dXJlIGNhbmNlbCgpIHsKICAgIF9zdHJlYW0uX2NhbmNlbFN1YnNjcmlwdGlvbigpOwogICAgcmV0dXJuIEZ1dHVyZS5fbnVsbEZ1dHVyZTsKICB9CgogIGJvb2wgZ2V0IGlzUGF1c2VkIHsKICAgIHJldHVybiBfc3RyZWFtLl9pc1N1YnNjcmlwdGlvblBhdXNlZDsKICB9CgogIEZ1dHVyZTxFPiBhc0Z1dHVyZTxFPihbRSBmdXR1cmVWYWx1ZV0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgY2hhbmdlIGhhbmRsZXJzIG9mIGFzQnJvYWRjYXN0U3RyZWFtIHNvdXJjZSBzdWJzY3JpcHRpb24uIik7CiAgfQp9CgovKioKICogU2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIFtTdHJlYW1JdGVyYXRvcl0uCiAqCiAqIFBhdXNlcyB0aGUgc3RyZWFtIGJldHdlZW4gY2FsbHMgdG8gW21vdmVOZXh0XS4KICovCmNsYXNzIF9TdHJlYW1JdGVyYXRvcjxUPiBpbXBsZW1lbnRzIFN0cmVhbUl0ZXJhdG9yPFQ+IHsKICAvLyBUaGUgc3RyZWFtIGl0ZXJhdG9yIGlzIGFsd2F5cyBpbiBvbmUgb2YgZm91ciBzdGF0ZXMuCiAgLy8gVGhlIHZhbHVlIG9mIHRoZSBbX3N0YXRlRGF0YV0gZmllbGQgZGVwZW5kcyBvbiB0aGUgc3RhdGUuCiAgLy8KICAvLyBXaGVuIGBfc3Vic2NyaXB0aW9uID09IG51bGxgIGFuZCBgX3N0YXRlRGF0YSAhPSBudWxsYDoKICAvLyBUaGUgc3RyZWFtIGl0ZXJhdG9yIGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBbbW92ZU5leHRdIGhhcyBub3QgYmVlbiBjYWxsZWQKICAvLyB5ZXQuIFRoZSBbX3N0YXRlRGF0YV0gZmllbGQgY29udGFpbnMgdGhlIHN0cmVhbSB0byBsaXN0ZW4gdG8gb24gdGhlIGZpcnN0CiAgLy8gY2FsbCB0byBbbW92ZU5leHRdIGFuZCBbY3VycmVudF0gcmV0dXJucyBgbnVsbGAuCiAgLy8KICAvLyBXaGVuIGBfc3Vic2NyaXB0aW9uICE9IG51bGxgIGFuZCBgIV9pc1BhdXNlZGA6CiAgLy8gVGhlIHVzZXIgaGFzIGNhbGxlZCBbbW92ZU5leHRdIGFuZCB0aGUgaXRlcmF0b3IgaXMgd2FpdGluZyBmb3IgdGhlIG5leHQKICAvLyBldmVudC4gVGhlIFtfc3RhdGVEYXRhXSBmaWVsZCBjb250YWlucyB0aGUgW19GdXR1cmVdIHJldHVybmVkIGJ5IHRoZQogIC8vIFtfbW92ZU5leHRdIGNhbGwgYW5kIFtjdXJyZW50XSByZXR1cm5zIGBudWxsLmAKICAvLwogIC8vIFdoZW4gYF9zdWJzY3JpcHRpb24gIT0gbnVsbGAgYW5kIGBfaXNQYXVzZWRgOgogIC8vIFRoZSBtb3N0IHJlY2VudCBjYWxsIHRvIFttb3ZlTmV4dF0gaGFzIGNvbXBsZXRlZCB3aXRoIGEgYHRydWVgIHZhbHVlCiAgLy8gYW5kIFtjdXJyZW50XSBwcm92aWRlcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEgZXZlbnQuCiAgLy8gVGhlIFtfc3RhdGVEYXRhXSBmaWVsZCBjb250YWlucyB0aGUgW2N1cnJlbnRdIHZhbHVlLgogIC8vCiAgLy8gV2hlbiBgX3N1YnNjcmlwdGlvbiA9PSBudWxsYCBhbmQgYF9zdGF0ZURhdGEgPT0gbnVsbGA6CiAgLy8gVGhlIHN0cmVhbSBoYXMgY29tcGxldGVkIG9yIGJlZW4gY2FuY2VsZWQgdXNpbmcgW2NhbmNlbF0uCiAgLy8gVGhlIHN0cmVhbSBjb21wbGV0ZXMgb24gZWl0aGVyIGEgZG9uZSBldmVudCBvciBhbiBlcnJvciBldmVudC4KICAvLyBUaGUgbGFzdCBjYWxsIHRvIFttb3ZlTmV4dF0gaGFzIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAgYW5kIFtjdXJyZW50XQogIC8vIHJldHVybnMgYG51bGxgLgoKICAvLy8gU3Vic2NyaXB0aW9uIGJlaW5nIGxpc3RlbmVkIHRvLgogIC8vLwogIC8vLyBTZXQgdG8gYG51bGxgIHdoZW4gdGhlIHN0cmVhbSBzdWJzY3JpcHRpb24gaXMgZG9uZSBvciBjYW5jZWxlZC4KICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKCiAgLy8vIERhdGEgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0YXRlLgogIC8vLwogIC8vLyBCZWZvcmUgZmlyc3QgY2FsbCB0byBbbW92ZU5leHRdOiBUaGUgc3RyZWFtIHRvIGxpc3RlbiB0by4KICAvLy8KICAvLy8gQWZ0ZXIgY2FsbGluZyBbbW92ZU5leHRdIGJ1dCBiZWZvcmUgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXM6CiAgLy8vIFRoZSByZXR1cm5lZCBmdXR1cmUuCiAgLy8vCiAgLy8vIEFmdGVyIGNhbGxpbmcgW21vdmVOZXh0XSBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBoYXMgY29tcGxldGVkCiAgLy8vIHdpdGggYHRydWVgOiBUaGUgdmFsdWUgb2YgW2N1cnJlbnRdLgogIC8vLwogIC8vLyBBZnRlciBjYWxsaW5nIFttb3ZlTmV4dF0gYW5kIHRoZSByZXR1cm5lZCBmdXR1cmUgaGFzIGNvbXBsZXRlZAogIC8vLyB3aXRoIGBmYWxzZWAsIG9yIGFmdGVyIGNhbGxpbmcgW2NhbmNlbF06IGBudWxsYC4KICBPYmplY3QgX3N0YXRlRGF0YTsKCiAgLy8vIFdoZXRoZXIgdGhlIGl0ZXJhdG9yIGlzIGJldHdlZW4gY2FsbHMgdG8gYG1vdmVOZXh0YC4KICAvLy8gVGhpcyB3aWxsIHVzdWFsbHkgY2F1c2UgdGhlIFtfc3Vic2NyaXB0aW9uXSB0byBiZSBwYXVzZWQsIGJ1dCBhcyBhbgogIC8vLyBvcHRpbWl6YXRpb24sIHdlIG9ubHkgcGF1c2UgYWZ0ZXIgdGhlIFttb3ZlTmV4dF0gZnV0dXJlIGhhcyBiZWVuCiAgLy8vIGNvbXBsZXRlZC4KICBib29sIF9pc1BhdXNlZCA9IGZhbHNlOwoKICBfU3RyZWFtSXRlcmF0b3IoZmluYWwgU3RyZWFtPFQ+IHN0cmVhbSkKICAgICAgOiBfc3RhdGVEYXRhID0gc3RyZWFtID8/ICh0aHJvdyBBcmd1bWVudEVycm9yLm5vdE51bGwoInN0cmVhbSIpKTsKCiAgVCBnZXQgY3VycmVudCB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsICYmIF9pc1BhdXNlZCkgewogICAgICByZXR1cm4gX3N0YXRlRGF0YTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgRnV0dXJlPGJvb2w+IG1vdmVOZXh0KCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBpZiAoX2lzUGF1c2VkKSB7CiAgICAgICAgdmFyIGZ1dHVyZSA9IG5ldyBfRnV0dXJlPGJvb2w+KCk7CiAgICAgICAgX3N0YXRlRGF0YSA9IGZ1dHVyZTsKICAgICAgICBfaXNQYXVzZWQgPSBmYWxzZTsKICAgICAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgIHJldHVybiBmdXR1cmU7CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkFscmVhZHkgd2FpdGluZyBmb3IgbmV4dC4iKTsKICAgIH0KICAgIHJldHVybiBfaW5pdGlhbGl6ZU9yRG9uZSgpOwogIH0KCiAgLy8vIENhbGxlZCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgc3Vic2NyaXB0aW9uIHdoZW4gW21vdmVOZXh0XSBpcyBjYWxsZWQuCiAgLy8vCiAgLy8vIEVpdGhlciBzdGFydHMgbGlzdGVuaW5nIG9uIHRoZSBzdHJlYW0gaWYgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0bwogIC8vLyBbbW92ZU5leHRdLCBvciByZXR1cm5zIGEgYGZhbHNlYCBmdXR1cmUgYmVjYXVzZSB0aGUgc3RyZWFtIGhhcyBhbHJlYWR5CiAgLy8vIGVuZGVkLgogIEZ1dHVyZTxib29sPiBfaW5pdGlhbGl6ZU9yRG9uZSgpIHsKICAgIGFzc2VydChfc3Vic2NyaXB0aW9uID09IG51bGwpOwogICAgdmFyIHN0YXRlRGF0YSA9IF9zdGF0ZURhdGE7CiAgICBpZiAoc3RhdGVEYXRhICE9IG51bGwpIHsKICAgICAgU3RyZWFtPFQ+IHN0cmVhbSA9IHN0YXRlRGF0YTsKICAgICAgX3N1YnNjcmlwdGlvbiA9IHN0cmVhbS5saXN0ZW4oX29uRGF0YSwKICAgICAgICAgIG9uRXJyb3I6IF9vbkVycm9yLCBvbkRvbmU6IF9vbkRvbmUsIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgICB2YXIgZnV0dXJlID0gbmV3IF9GdXR1cmU8Ym9vbD4oKTsKICAgICAgX3N0YXRlRGF0YSA9IGZ1dHVyZTsKICAgICAgcmV0dXJuIGZ1dHVyZTsKICAgIH0KICAgIHJldHVybiBGdXR1cmUuX2ZhbHNlRnV0dXJlOwogIH0KCiAgRnV0dXJlIGNhbmNlbCgpIHsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfc3Vic2NyaXB0aW9uOwogICAgT2JqZWN0IHN0YXRlRGF0YSA9IF9zdGF0ZURhdGE7CiAgICBfc3RhdGVEYXRhID0gbnVsbDsKICAgIGlmIChzdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgaWYgKCFfaXNQYXVzZWQpIHsKICAgICAgICBfRnV0dXJlPGJvb2w+IGZ1dHVyZSA9IHN0YXRlRGF0YTsKICAgICAgICBmdXR1cmUuX2FzeW5jQ29tcGxldGUoZmFsc2UpOwogICAgICB9CiAgICAgIHJldHVybiBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICB9CiAgICByZXR1cm4gRnV0dXJlLl9udWxsRnV0dXJlOwogIH0KCiAgdm9pZCBfb25EYXRhKFQgZGF0YSkgewogICAgYXNzZXJ0KF9zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiAhX2lzUGF1c2VkKTsKICAgIF9GdXR1cmU8Ym9vbD4gbW92ZU5leHRGdXR1cmUgPSBfc3RhdGVEYXRhOwogICAgX3N0YXRlRGF0YSA9IGRhdGE7CiAgICBfaXNQYXVzZWQgPSB0cnVlOwogICAgbW92ZU5leHRGdXR1cmUuX2NvbXBsZXRlKHRydWUpOwogICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiBfaXNQYXVzZWQpIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICB9CgogIHZvaWQgX29uRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgYXNzZXJ0KF9zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiAhX2lzUGF1c2VkKTsKICAgIF9GdXR1cmU8Ym9vbD4gbW92ZU5leHRGdXR1cmUgPSBfc3RhdGVEYXRhOwogICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICBfc3RhdGVEYXRhID0gbnVsbDsKICAgIG1vdmVOZXh0RnV0dXJlLl9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX29uRG9uZSgpIHsKICAgIGFzc2VydChfc3Vic2NyaXB0aW9uICE9IG51bGwgJiYgIV9pc1BhdXNlZCk7CiAgICBfRnV0dXJlPGJvb2w+IG1vdmVOZXh0RnV0dXJlID0gX3N0YXRlRGF0YTsKICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgX3N0YXRlRGF0YSA9IG51bGw7CiAgICBtb3ZlTmV4dEZ1dHVyZS5fY29tcGxldGUoZmFsc2UpOwogIH0KfQoKLyoqIEFuIGVtcHR5IGJyb2FkY2FzdCBzdHJlYW0sIHNlbmRpbmcgYSBkb25lIGV2ZW50IGFzIHNvb24gYXMgcG9zc2libGUuICovCmNsYXNzIF9FbXB0eVN0cmVhbTxUPiBleHRlbmRzIFN0cmVhbTxUPiB7CiAgY29uc3QgX0VtcHR5U3RyZWFtKCkgOiBzdXBlci5faW50ZXJuYWwoKTsKICBib29sIGdldCBpc0Jyb2FkY2FzdCA9PiB0cnVlOwogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBuZXcgX0RvbmVTdHJlYW1TdWJzY3JpcHRpb248VD4ob25Eb25lKTsKICB9Cn0KhCgATk48ARQBQR8VNxECAQQ+A0hJHAQjGjgUAgEERgNOQEEDUSIDSgwDLTQsTE1PQQNPTjsEJkk6LwYxMAYmBjkFTjsGLAYxBVEjBigGFgU7HwVOPgYwLCwtATAbFRgjATQOASksGAEGHgVQBh4BIFBAGRsZBAEGNAVLLAY8HiceIiQfBgQBIwEqJUYbQwQBJyc8F003TA1RSwYEASMlMgQBJh0gKkpCQUNDBAESHRUeGDAkIxEjKjcKCAYEARRLTxMnGBEGMAQBKyoBMhMlBzAmOic0DA8yCAcBEwQBFwFCNztGPj42NB48RQEiARMfFyEGJyEEAQYhBUZHLgYgFyIEARsBFhgdFBcNLgYEATgdFEYNOQYEARIYHR0UEw0pBgQBQk4vKhQcBAEVHQQBFxkRBAEcAQYaBUUtBiotHDcGGBgkGCEIBgQBIgEbGhgaKiIqIyEEATkaGBoqARdMODMkOB46UA8zOAglBgEaKBEjOy8PFQgNEzAjBgQBFRoYGgEWTD0kSCElBgEPJiE5LA0SBgQBBhsFQ0UqBikaKiIQIyEEAQY/BTgFOAVBIwYqGislLygIBj5NExkZEAgrMiQbFA8VCCUmBiUfBgQCAUdARzJIFwE0PzQpRR0ZBAFJPUE9MDEEAT01AgEwAS03JRgGQhcFPwYnAUE9TxQwMCcEAgFGPDIvGQFIASkBMB0yBixDP01NGRIKJhUvDxoeCBUdITIxIw8eIwgGBAERJxYEAgEVAUsnHQErJwFPQDcCASsbATsiOxY+LAIBHTERHC0fBAIBHiwPHwEuKiwEAgEdLhgqGgQBIgEjNQQCATIjKCs6KU0mKAEGHwVFSk1KBUlEJwYjARQBNjoBBiUFTUkGLh0WGykhDgYbHSMvHAgfBAEaLwQBLwFEEAIBOTc1IwFRIgEwASIkNA04BgQBMBotJCUfBh0EAREnMQQCAUgBBEgERCMjIAEUEhgBQREEATI3KgEVHigaBAEqKCMaBAEmF0EEARIUGSMVCAYEASkBKyoTLgcTBAEVGxoaNAQCATAbMDAUAS8nARYUQEBGEyhEIihEIh9NBAEgATQ/Nz4wNQY2QzRLBAEVQyQWSQYUIyAeCAYEARUkFkkGBAE4HydANRpFGwQBMScnBAEfJxwEASMtIwQCAQQ+BEokAS8BKSBNBAEnIE0EASMgTQQBJi4EARIjBAEUIx8EARYqBAErIE0EAgEELgMyBDg6PwU8Tk82BTRNSjQFM0o5OgU8P0RKFQEmBkYkATEGQAZJGwZFKwZFNxUBO0pHERoBKkgBEi4ZBhEEARwhFyodGyAXCDkGIAQBSwZJTQ0lIyAdJC1EKBsVBiAEARQ4IxcgHBgqJggkBh8EARkxLxcWJEMEATkxLxoXNgQBEzEvGhclBAIBTCosIDQ/MwQCARtkYXJ0OmFzeW5jL3N0cmVhbV9pbXBsLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL3N0cmVhbV9waXBlLmRhcnS3pS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgovKiogUnVucyB1c2VyIGNvZGUgYW5kIHRha2VzIGFjdGlvbnMgZGVwZW5kaW5nIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gKi8KX3J1blVzZXJDb2RlPFQ+KAogICAgVCB1c2VyQ29kZSgpLCBvblN1Y2Nlc3MoVCB2YWx1ZSksIG9uRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkpIHsKICB0cnkgewogICAgb25TdWNjZXNzKHVzZXJDb2RlKCkpOwogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlLCBzKTsKICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB7CiAgICAgIG9uRXJyb3IoZSwgcyk7CiAgICB9IGVsc2UgewogICAgICB2YXIgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgICAgdmFyIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgICBvbkVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0KICB9Cn0KCi8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2FuY2VsIGEgc3Vic2NyaXB0aW9uIGFuZCB3YWl0IGZvciB0aGUgcG90ZW50aWFsIGZ1dHVyZSwKICBiZWZvcmUgY29tcGxldGluZyB3aXRoIGFuIGVycm9yLiAqLwp2b2lkIF9jYW5jZWxBbmRFcnJvcihTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uLCBfRnV0dXJlIGZ1dHVyZSwgZXJyb3IsCiAgICBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICB2YXIgY2FuY2VsRnV0dXJlID0gc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogIGlmIChjYW5jZWxGdXR1cmUgIT0gbnVsbCAmJiAhaWRlbnRpY2FsKGNhbmNlbEZ1dHVyZSwgRnV0dXJlLl9udWxsRnV0dXJlKSkgewogICAgY2FuY2VsRnV0dXJlLndoZW5Db21wbGV0ZSgoKSA9PiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpKTsKICB9IGVsc2UgewogICAgZnV0dXJlLl9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9Cn0KCnZvaWQgX2NhbmNlbEFuZEVycm9yV2l0aFJlcGxhY2VtZW50KFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24sCiAgICBfRnV0dXJlIGZ1dHVyZSwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICB9CiAgX2NhbmNlbEFuZEVycm9yKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCBlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCnR5cGVkZWYgdm9pZCBfRXJyb3JDYWxsYmFjayhlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKCi8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gbWFrZSBhbiBvbkVycm9yIGFyZ3VtZW50IHRvIFtfcnVuVXNlckNvZGVdLiAqLwpfRXJyb3JDYWxsYmFjayBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKAogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiwgX0Z1dHVyZSBmdXR1cmUpIHsKICByZXR1cm4gKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIF9jYW5jZWxBbmRFcnJvcihzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZXJyb3IsIHN0YWNrVHJhY2UpOwogIH07Cn0KCi8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2FuY2VsIGEgc3Vic2NyaXB0aW9uIGFuZCB3YWl0IGZvciB0aGUgcG90ZW50aWFsIGZ1dHVyZSwKICBiZWZvcmUgY29tcGxldGluZyB3aXRoIGEgdmFsdWUuICovCnZvaWQgX2NhbmNlbEFuZFZhbHVlKFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24sIF9GdXR1cmUgZnV0dXJlLCB2YWx1ZSkgewogIHZhciBjYW5jZWxGdXR1cmUgPSBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgaWYgKGNhbmNlbEZ1dHVyZSAhPSBudWxsICYmICFpZGVudGljYWwoY2FuY2VsRnV0dXJlLCBGdXR1cmUuX251bGxGdXR1cmUpKSB7CiAgICBjYW5jZWxGdXR1cmUud2hlbkNvbXBsZXRlKCgpID0+IGZ1dHVyZS5fY29tcGxldGUodmFsdWUpKTsKICB9IGVsc2UgewogICAgZnV0dXJlLl9jb21wbGV0ZSh2YWx1ZSk7CiAgfQp9CgovKioKICogQSBbU3RyZWFtXSB0aGF0IGZvcndhcmRzIHN1YnNjcmlwdGlvbnMgdG8gYW5vdGhlciBzdHJlYW0uCiAqCiAqIFRoaXMgc3RyZWFtIGltcGxlbWVudHMgW1N0cmVhbV0sIGJ1dCBmb3J3YXJkcyBhbGwgc3Vic2NyaXB0aW9ucwogKiB0byBhbiB1bmRlcmx5aW5nIHN0cmVhbSwgYW5kIHdyYXBzIHRoZSByZXR1cm5lZCBzdWJzY3JpcHRpb24gdG8KICogbW9kaWZ5IHRoZSBldmVudHMgb24gdGhlIHdheS4KICoKICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAqLwphYnN0cmFjdCBjbGFzcyBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiBleHRlbmRzIFN0cmVhbTxUPiB7CiAgZmluYWwgU3RyZWFtPFM+IF9zb3VyY2U7CgogIF9Gb3J3YXJkaW5nU3RyZWFtKHRoaXMuX3NvdXJjZSk7CgogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IF9zb3VyY2UuaXNCcm9hZGNhc3Q7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCB2YWx1ZSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBjYW5jZWxPbkVycm9yID0gaWRlbnRpY2FsKHRydWUsIGNhbmNlbE9uRXJyb3IpOwogICAgcmV0dXJuIF9jcmVhdGVTdWJzY3JpcHRpb24ob25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICByZXR1cm4gbmV3IF9Gb3J3YXJkaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBpbiBzdWJjbGFzc2VzIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3IuCgogIHZvaWQgX2hhbmRsZURhdGEoUyBkYXRhLCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIHNpbmsuX2FkZChkYXRhIGFzIE9iamVjdCk7CiAgfQoKICB2b2lkIF9oYW5kbGVFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlLCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIHNpbmsuX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX2hhbmRsZURvbmUoX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBzaW5rLl9jbG9zZSgpOwogIH0KfQoKLyoqCiAqIEFic3RyYWN0IHN1cGVyY2xhc3MgZm9yIHN1YnNjcmlwdGlvbnMgdGhhdCBmb3J3YXJkIHRvIG90aGVyIHN1YnNjcmlwdGlvbnMuCiAqLwpjbGFzcyBfRm9yd2FyZGluZ1N0cmVhbVN1YnNjcmlwdGlvbjxTLCBUPgogICAgZXh0ZW5kcyBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICBmaW5hbCBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiBfc3RyZWFtOwoKICBTdHJlYW1TdWJzY3JpcHRpb248Uz4gX3N1YnNjcmlwdGlvbjsKCiAgX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb24odGhpcy5fc3RyZWFtLCB2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpCiAgICAgIDogc3VwZXIob25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpIHsKICAgIF9zdWJzY3JpcHRpb24gPSBfc3RyZWFtLl9zb3VyY2UKICAgICAgICAubGlzdGVuKF9oYW5kbGVEYXRhLCBvbkVycm9yOiBfaGFuZGxlRXJyb3IsIG9uRG9uZTogX2hhbmRsZURvbmUpOwogIH0KCiAgLy8gX1N0cmVhbVNpbmsgaW50ZXJmYWNlLgogIC8vIFRyYW5zZm9ybWVycyBzZW5kaW5nIG1vcmUgdGhhbiBvbmUgZXZlbnQgaGF2ZSBubyB3YXkgdG8ga25vdyBpZiB0aGUgc3RyZWFtCiAgLy8gaXMgY2FuY2VsZWQgb3IgY2xvc2VkIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UganVzdCBpZ25vcmUgcmVtYWluaW5nIGV2ZW50cy4KCiAgdm9pZCBfYWRkKFQgZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgcmV0dXJuOwogICAgc3VwZXIuX2FkZChkYXRhKTsKICB9CgogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSByZXR1cm47CiAgICBzdXBlci5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgLy8gU3RyZWFtU3Vic2NyaXB0aW9uIGNhbGxiYWNrcy4KCiAgdm9pZCBfb25QYXVzZSgpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybjsKICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICB9CgogIHZvaWQgX29uUmVzdW1lKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICB9CgogIEZ1dHVyZSBfb25DYW5jZWwoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24gPSBfc3Vic2NyaXB0aW9uOwogICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gTWV0aG9kcyB1c2VkIGFzIGxpc3RlbmVyIG9uIHNvdXJjZSBzdWJzY3JpcHRpb24uCgogIHZvaWQgX2hhbmRsZURhdGEoUyBkYXRhKSB7CiAgICBfc3RyZWFtLl9oYW5kbGVEYXRhKGRhdGEsIHRoaXMpOwogIH0KCiAgdm9pZCBfaGFuZGxlRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgX3N0cmVhbS5faGFuZGxlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UsIHRoaXMpOwogIH0KCiAgdm9pZCBfaGFuZGxlRG9uZSgpIHsKICAgIF9zdHJlYW0uX2hhbmRsZURvbmUodGhpcyk7CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFN0cmVhbSB0cmFuc2Zvcm1lcnMgdXNlZCBieSB0aGUgZGVmYXVsdCBTdHJlYW0gaW1wbGVtZW50YXRpb24uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnR5cGVkZWYgYm9vbCBfUHJlZGljYXRlPFQ+KFQgdmFsdWUpOwoKdm9pZCBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoX0V2ZW50U2luayBzaW5rLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogIH0KICBzaW5rLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCmNsYXNzIF9XaGVyZVN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBfUHJlZGljYXRlPFQ+IF90ZXN0OwoKICBfV2hlcmVTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwgYm9vbCB0ZXN0KFQgdmFsdWUpKQogICAgICA6IF90ZXN0ID0gdGVzdCwKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICB2b2lkIF9oYW5kbGVEYXRhKFQgaW5wdXRFdmVudCwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBib29sIHNhdGlzZmllczsKICAgIHRyeSB7CiAgICAgIHNhdGlzZmllcyA9IF90ZXN0KGlucHV0RXZlbnQpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzYXRpc2ZpZXMpIHsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfQogIH0KfQoKdHlwZWRlZiBUIF9UcmFuc2Zvcm1hdGlvbjxTLCBUPihTIHZhbHVlKTsKCi8qKgogKiBBIHN0cmVhbSBwaXBlIHRoYXQgY29udmVydHMgZGF0YSBldmVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSBvbi4KICovCmNsYXNzIF9NYXBTdHJlYW08UywgVD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiB7CiAgZmluYWwgX1RyYW5zZm9ybWF0aW9uPFMsIFQ+IF90cmFuc2Zvcm07CgogIF9NYXBTdHJlYW0oU3RyZWFtPFM+IHNvdXJjZSwgVCB0cmFuc2Zvcm0oUyBldmVudCkpCiAgICAgIDogdGhpcy5fdHJhbnNmb3JtID0gdHJhbnNmb3JtLAogICAgICAgIHN1cGVyKHNvdXJjZSk7CgogIHZvaWQgX2hhbmRsZURhdGEoUyBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIFQgb3V0cHV0RXZlbnQ7CiAgICB0cnkgewogICAgICBvdXRwdXRFdmVudCA9IF90cmFuc2Zvcm0oaW5wdXRFdmVudCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2luay5fYWRkKG91dHB1dEV2ZW50KTsKICB9Cn0KCi8qKgogKiBBIHN0cmVhbSBwaXBlIHRoYXQgY29udmVydHMgZGF0YSBldmVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSBvbi4KICovCmNsYXNzIF9FeHBhbmRTdHJlYW08UywgVD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiB7CiAgZmluYWwgX1RyYW5zZm9ybWF0aW9uPFMsIEl0ZXJhYmxlPFQ+PiBfZXhwYW5kOwoKICBfRXhwYW5kU3RyZWFtKFN0cmVhbTxTPiBzb3VyY2UsIEl0ZXJhYmxlPFQ+IGV4cGFuZChTIGV2ZW50KSkKICAgICAgOiB0aGlzLl9leHBhbmQgPSBleHBhbmQsCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRGF0YShTIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgdHJ5IHsKICAgICAgZm9yIChUIHZhbHVlIGluIF9leHBhbmQoaW5wdXRFdmVudCkpIHsKICAgICAgICBzaW5rLl9hZGQodmFsdWUpOwogICAgICB9CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIC8vIElmIGVpdGhlciBfZXhwYW5kIG9yIGl0ZXJhdGluZyB0aGUgZ2VuZXJhdGVkIGl0ZXJhdG9yIHRocm93cywKICAgICAgLy8gd2UgYWJvcnQgdGhlIGl0ZXJhdGlvbi4KICAgICAgX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50KHNpbmssIGUsIHMpOwogICAgfQogIH0KfQoKdHlwZWRlZiBib29sIF9FcnJvclRlc3QoZXJyb3IpOwoKLyoqCiAqIEEgc3RyZWFtIHBpcGUgdGhhdCBjb252ZXJ0cyBvciBkaXNwb3NlcyBlcnJvciBldmVudHMKICogYmVmb3JlIHBhc3NpbmcgdGhlbSBvbi4KICovCmNsYXNzIF9IYW5kbGVFcnJvclN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBGdW5jdGlvbiBfdHJhbnNmb3JtOwogIGZpbmFsIF9FcnJvclRlc3QgX3Rlc3Q7CgogIF9IYW5kbGVFcnJvclN0cmVhbShTdHJlYW08VD4gc291cmNlLCBGdW5jdGlvbiBvbkVycm9yLCBib29sIHRlc3QoZXJyb3IpKQogICAgICA6IHRoaXMuX3RyYW5zZm9ybSA9IG9uRXJyb3IsCiAgICAgICAgdGhpcy5fdGVzdCA9IHRlc3QsCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgYm9vbCBtYXRjaGVzID0gdHJ1ZTsKICAgIGlmIChfdGVzdCAhPSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgbWF0Y2hlcyA9IF90ZXN0KGVycm9yKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGlmIChtYXRjaGVzKSB7CiAgICAgIHRyeSB7CiAgICAgICAgX2ludm9rZUVycm9ySGFuZGxlcihfdHJhbnNmb3JtLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGUsIGVycm9yKSkgewogICAgICAgICAgc2luay5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc2luay5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KfQoKY2xhc3MgX1Rha2VTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgZmluYWwgaW50IF9jb3VudDsKCiAgX1Rha2VTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwgaW50IGNvdW50KQogICAgICA6IHRoaXMuX2NvdW50ID0gY291bnQsCiAgICAgICAgc3VwZXIoc291cmNlKSB7CiAgICAvLyBUaGlzIHRlc3QgaXMgZG9uZSBlYXJseSB0byBhdm9pZCBoYW5kbGluZyBhbiBhc3luYyBlcnJvcgogICAgLy8gaW4gdGhlIF9oYW5kbGVEYXRhIG1ldGhvZC4KICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGNvdW50LCAiY291bnQiKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfY3JlYXRlU3Vic2NyaXB0aW9uKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAgaWYgKF9jb3VudCA9PSAwKSB7CiAgICAgIF9zb3VyY2UubGlzdGVuKG51bGwpLmNhbmNlbCgpOwogICAgICByZXR1cm4gbmV3IF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KG9uRG9uZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvciwgX2NvdW50KTsKICB9CgogIHZvaWQgX2hhbmRsZURhdGEoVCBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBzaW5rOwogICAgaW50IGNvdW50ID0gc3Vic2NyaXB0aW9uLl9jb3VudDsKICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgICBjb3VudCAtPSAxOwogICAgICBzdWJzY3JpcHRpb24uX2NvdW50ID0gY291bnQ7CiAgICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgLy8gQ2xvc2luZyBhbHNvIHVuc3Vic2NyaWJlcyBhbGwgc3Vic2NyaWJlcnMsIHdoaWNoIHVuc3Vic2NyaWJlcwogICAgICAgIC8vIHRoaXMgZnJvbSBzb3VyY2UuCiAgICAgICAgc2luay5fY2xvc2UoKTsKICAgICAgfQogICAgfQogIH0KfQoKLyoqCiAqIEEgW19Gb3J3YXJkaW5nU3RyZWFtU3Vic2NyaXB0aW9uXSB3aXRoIG9uZSBleHRyYSBzdGF0ZSBmaWVsZC4KICoKICogVXNlIGJ5IHNldmVyYWwgZGlmZmVyZW50IGNsYXNzZXMsIHN0b3JpbmcgYW4gaW50ZWdlciwgYm9vbCBvciBnZW5lcmFsLgogKi8KY2xhc3MgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGV4dGVuZHMgX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb248VCwgVD4gewogIC8vIFJhdyBzdGF0ZSBmaWVsZC4gVHlwZWQgYWNjZXNzIHByb3ZpZGVkIGJ5IGdldHRlcnMgYW5kIHNldHRlcnMgYmVsb3cuCiAgdmFyIF9zaGFyZWRTdGF0ZTsKCiAgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uKF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHN0cmVhbSwgdm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yLCB0aGlzLl9zaGFyZWRTdGF0ZSkKICAgICAgOiBzdXBlcihzdHJlYW0sIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKCiAgYm9vbCBnZXQgX2ZsYWcgPT4gX3NoYXJlZFN0YXRlOwogIHZvaWQgc2V0IF9mbGFnKGJvb2wgZmxhZykgewogICAgX3NoYXJlZFN0YXRlID0gZmxhZzsKICB9CgogIGludCBnZXQgX2NvdW50ID0+IF9zaGFyZWRTdGF0ZTsKICB2b2lkIHNldCBfY291bnQoaW50IGNvdW50KSB7CiAgICBfc2hhcmVkU3RhdGUgPSBjb3VudDsKICB9CgogIE9iamVjdCBnZXQgX3ZhbHVlID0+IF9zaGFyZWRTdGF0ZTsKICB2b2lkIHNldCBfdmFsdWUoT2JqZWN0IHZhbHVlKSB7CiAgICBfc2hhcmVkU3RhdGUgPSB2YWx1ZTsKICB9Cn0KCmNsYXNzIF9UYWtlV2hpbGVTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgZmluYWwgX1ByZWRpY2F0ZTxUPiBfdGVzdDsKCiAgX1Rha2VXaGlsZVN0cmVhbShTdHJlYW08VD4gc291cmNlLCBib29sIHRlc3QoVCB2YWx1ZSkpCiAgICAgIDogdGhpcy5fdGVzdCA9IHRlc3QsCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRGF0YShUIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgYm9vbCBzYXRpc2ZpZXM7CiAgICB0cnkgewogICAgICBzYXRpc2ZpZXMgPSBfdGVzdChpbnB1dEV2ZW50KTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50KHNpbmssIGUsIHMpOwogICAgICAvLyBUaGUgdGVzdCBkaWRuJ3Qgc2F5IHRydWUuIERpZG4ndCBzYXkgZmFsc2UgZWl0aGVyLCBidXQgd2Ugc3RvcCBhbnl3YXkuCiAgICAgIHNpbmsuX2Nsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzYXRpc2ZpZXMpIHsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfSBlbHNlIHsKICAgICAgc2luay5fY2xvc2UoKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9Ta2lwU3RyZWFtPFQ+IGV4dGVuZHMgX0ZvcndhcmRpbmdTdHJlYW08VCwgVD4gewogIGZpbmFsIGludCBfY291bnQ7CgogIF9Ta2lwU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIGludCBjb3VudCkKICAgICAgOiB0aGlzLl9jb3VudCA9IGNvdW50LAogICAgICAgIHN1cGVyKHNvdXJjZSkgewogICAgLy8gVGhpcyB0ZXN0IGlzIGRvbmUgZWFybHkgdG8gYXZvaWQgaGFuZGxpbmcgYW4gYXN5bmMgZXJyb3IKICAgIC8vIGluIHRoZSBfaGFuZGxlRGF0YSBtZXRob2QuCiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChjb3VudCwgImNvdW50Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoY291bnQsICJjb3VudCIpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICByZXR1cm4gbmV3IF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvciwgX2NvdW50KTsKICB9CgogIHZvaWQgX2hhbmRsZURhdGEoVCBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBzaW5rOwogICAgaW50IGNvdW50ID0gc3Vic2NyaXB0aW9uLl9jb3VudDsKICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgc3Vic2NyaXB0aW9uLl9jb3VudCA9IGNvdW50IC0gMTsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogIH0KfQoKY2xhc3MgX1NraXBXaGlsZVN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBfUHJlZGljYXRlPFQ+IF90ZXN0OwoKICBfU2tpcFdoaWxlU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIGJvb2wgdGVzdChUIHZhbHVlKSkKICAgICAgOiB0aGlzLl90ZXN0ID0gdGVzdCwKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIHJldHVybiBuZXcgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yLCBmYWxzZSk7CiAgfQoKICB2b2lkIF9oYW5kbGVEYXRhKFQgaW5wdXRFdmVudCwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBfU3RhdGVTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gc2luazsKICAgIGJvb2wgaGFzRmFpbGVkID0gc3Vic2NyaXB0aW9uLl9mbGFnOwogICAgaWYgKGhhc0ZhaWxlZCkgewogICAgICBzaW5rLl9hZGQoaW5wdXRFdmVudCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGJvb2wgc2F0aXNmaWVzOwogICAgdHJ5IHsKICAgICAgc2F0aXNmaWVzID0gX3Rlc3QoaW5wdXRFdmVudCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgLy8gQSBmYWlsdXJlIHRvIHJldHVybiBhIGJvb2xlYW4gaXMgY29uc2lkZXJlZCAibm90IG1hdGNoaW5nIi4KICAgICAgc3Vic2NyaXB0aW9uLl9mbGFnID0gdHJ1ZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFzYXRpc2ZpZXMpIHsKICAgICAgc3Vic2NyaXB0aW9uLl9mbGFnID0gdHJ1ZTsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfQogIH0KfQoKdHlwZWRlZiBib29sIF9FcXVhbGl0eTxUPihUIGEsIFQgYik7CgpjbGFzcyBfRGlzdGluY3RTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgc3RhdGljIGZpbmFsIF9TRU5USU5FTCA9IG5ldyBPYmplY3QoKTsKCiAgZmluYWwgX0VxdWFsaXR5PFQ+IF9lcXVhbHM7CgogIF9EaXN0aW5jdFN0cmVhbShTdHJlYW08VD4gc291cmNlLCBib29sIGVxdWFscyhUIGEsIFQgYikpCiAgICAgIDogX2VxdWFscyA9IGVxdWFscywKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIHJldHVybiBuZXcgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yLCBfU0VOVElORUwpOwogIH0KCiAgdm9pZCBfaGFuZGxlRGF0YShUIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IHNpbms7CiAgICB2YXIgcHJldmlvdXMgPSBzdWJzY3JpcHRpb24uX3ZhbHVlOwogICAgaWYgKGlkZW50aWNhbChwcmV2aW91cywgX1NFTlRJTkVMKSkgewogICAgICAvLyBGaXJzdCBldmVudC4KICAgICAgc3Vic2NyaXB0aW9uLl92YWx1ZSA9IGlucHV0RXZlbnQ7CiAgICAgIHNpbmsuX2FkZChpbnB1dEV2ZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIFQgcHJldmlvdXNFdmVudCA9IHByZXZpb3VzOwogICAgICBib29sIGlzRXF1YWw7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKF9lcXVhbHMgPT0gbnVsbCkgewogICAgICAgICAgaXNFcXVhbCA9IChwcmV2aW91c0V2ZW50ID09IGlucHV0RXZlbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpc0VxdWFsID0gX2VxdWFscyhwcmV2aW91c0V2ZW50LCBpbnB1dEV2ZW50KTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghaXNFcXVhbCkgewogICAgICAgIHNpbmsuX2FkZChpbnB1dEV2ZW50KTsKICAgICAgICBzdWJzY3JpcHRpb24uX3ZhbHVlID0gaW5wdXRFdmVudDsKICAgICAgfQogICAgfQogIH0KfQqB9gBOTjwBFAFJEU8IGxM/HxUNNC8iBgQCAVAmTR0sTk8LLgQCAUU0Sh0uKQQ8AgE7AUYnNyo+BQIBUCVPLE4+Cx0EAgEEPQNDQyEDMQQ7GwEjAS8BNT80SAQBQT00NwQBSgExHwQBSCcEASkTBAIBBE4EKi4pAScBQzs4JEoEARxQUAEWGxYEATgbKAQBIwEUJxsEARUnHAQBFyE3HCQGEQQBNgEdJQQBNDMEARcfBAIBR0JHASUBT0odLikEJQIBOB0BNRYXATcUCiUVLA4GFR0GBAIBKgEEQwQ5KgE1JRcBNxMKLBUsDgYcBAIBBEMEPDEBPx8XATcKLRoIFUchLAYEAgEgAQQ4GwQ+HRoBSyMbFwFPGRkMIBcuEAgGEww8FyMtETAKEAgNKQYEAgE3FAErHRhAIjAEAUE9FyU1Biw/BAE3NSUVHRIjGEkdFwgGBAIBBEEDSgRQShQBUE4/ASIeGQQBIh8aBAElIhoEAgE8HQE5GxcBNxQKJRUsUBUOBhUdDRUGBAIBNxQBKx0YQCIwMQQBQT0sPwQBNzUlFScOBhsEAgE8HQE5GxcBQT0sPgQBNzUpFR0OBhQKJRUsRSEOBhYhHQYEAgElATspAR4BOxoXAUE9LEIEATc1KCoWKB0NIhQMHzMROAoXLhAIFh8qCAYEAgEbZGFydDphc3luYy9zdHJlYW1fcGlwZS5kYXJ0Om9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9zdHJlYW1fdHJhbnNmb3JtZXJzLmRhcnSmOC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgovKioKICogV3JhcHMgYW4gW19FdmVudFNpbmtdIHNvIGl0IGV4cG9zZXMgb25seSB0aGUgW0V2ZW50U2lua10gaW50ZXJmYWNlLgogKi8KY2xhc3MgX0V2ZW50U2lua1dyYXBwZXI8VD4gaW1wbGVtZW50cyBFdmVudFNpbms8VD4gewogIF9FdmVudFNpbmsgX3Npbms7CiAgX0V2ZW50U2lua1dyYXBwZXIodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKFQgZGF0YSkgewogICAgX3NpbmsuX2FkZChkYXRhKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfc2luay5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLl9jbG9zZSgpOwogIH0KfQoKLyoqCiAqIEEgU3RyZWFtU3Vic2NyaXB0aW9uIHRoYXQgcGlwZXMgZGF0YSB0aHJvdWdoIGEgc2luay4KICoKICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgY2xhc3MgdGFrZXMgYSBbX1NpbmtNYXBwZXJdIHdoaWNoIG1hcHMgZnJvbQogKiBbRXZlbnRTaW5rXSB0byBbRXZlbnRTaW5rXS4gVGhlIGlucHV0IHRvIHRoZSBtYXBwZXIgaXMgdGhlIG91dHB1dCBvZgogKiB0aGUgdHJhbnNmb3JtYXRpb24uIFRoZSByZXR1cm5lZCBzaW5rIGlzIHRoZSB0cmFuc2Zvcm1hdGlvbidzIGlucHV0LgogKi8KY2xhc3MgX1NpbmtUcmFuc2Zvcm1lclN0cmVhbVN1YnNjcmlwdGlvbjxTLCBUPgogICAgZXh0ZW5kcyBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICAvLy8gVGhlIHRyYW5zZm9ybWVyJ3MgaW5wdXQgc2luay4KICBFdmVudFNpbms8Uz4gX3RyYW5zZm9ybWVyU2luazsKCiAgLy8vIFRoZSBzdWJzY3JpcHRpb24gdG8gdGhlIGlucHV0IHN0cmVhbS4KICBTdHJlYW1TdWJzY3JpcHRpb248Uz4gX3N1YnNjcmlwdGlvbjsKCiAgX1NpbmtUcmFuc2Zvcm1lclN0cmVhbVN1YnNjcmlwdGlvbihTdHJlYW08Uz4gc291cmNlLCBfU2lua01hcHBlcjxTLCBUPiBtYXBwZXIsCiAgICAgIHZvaWQgb25EYXRhKFQgZGF0YSksIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgLy8gV2Ugc2V0IHRoZSBhZGFwdGVyJ3MgdGFyZ2V0IG9ubHkgd2hlbiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHNlbmQgZGF0YS4KICAgICAgOiBzdXBlcihvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcikgewogICAgX0V2ZW50U2lua1dyYXBwZXI8VD4gZXZlbnRTaW5rID0gbmV3IF9FdmVudFNpbmtXcmFwcGVyPFQ+KHRoaXMpOwogICAgX3RyYW5zZm9ybWVyU2luayA9IG1hcHBlcihldmVudFNpbmspOwogICAgX3N1YnNjcmlwdGlvbiA9CiAgICAgICAgc291cmNlLmxpc3RlbihfaGFuZGxlRGF0YSwgb25FcnJvcjogX2hhbmRsZUVycm9yLCBvbkRvbmU6IF9oYW5kbGVEb25lKTsKICB9CgogIC8qKiBXaGV0aGVyIHRoaXMgc3Vic2NyaXB0aW9uIGlzIHN0aWxsIHN1YnNjcmliZWQgdG8gaXRzIHNvdXJjZS4gKi8KICBib29sIGdldCBfaXNTdWJzY3JpYmVkID0+IF9zdWJzY3JpcHRpb24gIT0gbnVsbDsKCiAgLy8gX0V2ZW50U2luayBpbnRlcmZhY2UuCgogIC8qKgogICAqIEFkZHMgYW4gZXZlbnQgdG8gdGhpcyBzdWJzY3JpcHRpb25zLgogICAqCiAgICogQ29udHJhcnkgdG8gbm9ybWFsIFtfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uXXMgd2UgbWF5IHJlY2VpdmUKICAgKiBldmVudHMgd2hlbiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkLiBSZXBvcnQgdGhlbSBhcyBzdGF0ZQogICAqIGVycm9yLgogICAqLwogIHZvaWQgX2FkZChUIGRhdGEpIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbSBpcyBhbHJlYWR5IGNsb3NlZCIpOwogICAgfQogICAgc3VwZXIuX2FkZChkYXRhKTsKICB9CgogIC8qKgogICAqIEFkZHMgYW4gZXJyb3IgZXZlbnQgdG8gdGhpcyBzdWJzY3JpcHRpb25zLgogICAqCiAgICogQ29udHJhcnkgdG8gbm9ybWFsIFtfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uXXMgd2UgbWF5IHJlY2VpdmUKICAgKiBldmVudHMgd2hlbiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkLiBSZXBvcnQgdGhlbSBhcyBzdGF0ZQogICAqIGVycm9yLgogICAqLwogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQiKTsKICAgIH0KICAgIHN1cGVyLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICAvKioKICAgKiBBZGRzIGEgY2xvc2UgZXZlbnQgdG8gdGhpcyBzdWJzY3JpcHRpb25zLgogICAqCiAgICogQ29udHJhcnkgdG8gbm9ybWFsIFtfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uXXMgd2UgbWF5IHJlY2VpdmUKICAgKiBldmVudHMgd2hlbiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkLiBSZXBvcnQgdGhlbSBhcyBzdGF0ZQogICAqIGVycm9yLgogICAqLwogIHZvaWQgX2Nsb3NlKCkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkIik7CiAgICB9CiAgICBzdXBlci5fY2xvc2UoKTsKICB9CgogIC8vIF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb24gaG9va3MuCgogIHZvaWQgX29uUGF1c2UoKSB7CiAgICBpZiAoX2lzU3Vic2NyaWJlZCkgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogIH0KCiAgdm9pZCBfb25SZXN1bWUoKSB7CiAgICBpZiAoX2lzU3Vic2NyaWJlZCkgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICB9CgogIEZ1dHVyZSBfb25DYW5jZWwoKSB7CiAgICBpZiAoX2lzU3Vic2NyaWJlZCkgewogICAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uID0gX3N1YnNjcmlwdGlvbjsKICAgICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIHJldHVybiBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgX2hhbmRsZURhdGEoUyBkYXRhKSB7CiAgICB0cnkgewogICAgICBfdHJhbnNmb3JtZXJTaW5rLmFkZChkYXRhKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX2FkZEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICB0cnkgewogICAgICBfdHJhbnNmb3JtZXJTaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaWYgKGlkZW50aWNhbChlLCBlcnJvcikpIHsKICAgICAgICBfYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9IGVsc2UgewogICAgICAgIF9hZGRFcnJvcihlLCBzKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlRG9uZSgpIHsKICAgIHRyeSB7CiAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICBfdHJhbnNmb3JtZXJTaW5rLmNsb3NlKCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9hZGRFcnJvcihlLCBzKTsKICAgIH0KICB9Cn0KCnR5cGVkZWYgRXZlbnRTaW5rPFM+IF9TaW5rTWFwcGVyPFMsIFQ+KEV2ZW50U2luazxUPiBvdXRwdXQpOwoKLyoqCiAqIEEgU3RyZWFtVHJhbnNmb3JtZXIgZm9yIFNpbmstbWFwcGVycy4KICoKICogQSBTaW5rLW1hcHBlciB0YWtlcyBhbiBbRXZlbnRTaW5rXSAoaXRzIG91dHB1dCkgYW5kIHJldHVybnMgYW5vdGhlcgogKiBFdmVudFNpbmsgKGl0cyBpbnB1dCkuCiAqCiAqIE5vdGUgdGhhdCB0aGlzIGNsYXNzIGNhbiBiZSBgY29uc3RgLgogKi8KY2xhc3MgX1N0cmVhbVNpbmtUcmFuc2Zvcm1lcjxTLCBUPiBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTLCBUPiB7CiAgZmluYWwgX1NpbmtNYXBwZXI8UywgVD4gX3NpbmtNYXBwZXI7CiAgY29uc3QgX1N0cmVhbVNpbmtUcmFuc2Zvcm1lcih0aGlzLl9zaW5rTWFwcGVyKTsKCiAgU3RyZWFtPFQ+IGJpbmQoU3RyZWFtPFM+IHN0cmVhbSkgPT4KICAgICAgbmV3IF9Cb3VuZFNpbmtTdHJlYW08UywgVD4oc3RyZWFtLCBfc2lua01hcHBlcik7Cn0KCi8qKgogKiBUaGUgcmVzdWx0IG9mIGJpbmRpbmcgYSBTdHJlYW1UcmFuc2Zvcm1lciBmb3IgU2luay1tYXBwZXJzLgogKgogKiBJdCBjb250YWlucyB0aGUgYm91bmQgU3RyZWFtIGFuZCB0aGUgc2luay1tYXBwZXIuIE9ubHkgd2hlbiB0aGUgdXNlciBzdGFydHMKICogbGlzdGVuaW5nIHRvIHRoaXMgc3RyZWFtIGlzIHRoZSBzaW5rLW1hcHBlciBpbnZva2VkLiBUaGUgcmVzdWx0IGlzIHVzZWQKICogdG8gY3JlYXRlIGEgU3RyZWFtU3Vic2NyaXB0aW9uIHRoYXQgdHJhbnNmb3JtcyBldmVudHMuCiAqLwpjbGFzcyBfQm91bmRTaW5rU3RyZWFtPFMsIFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICBmaW5hbCBfU2lua01hcHBlcjxTLCBUPiBfc2lua01hcHBlcjsKICBmaW5hbCBTdHJlYW08Uz4gX3N0cmVhbTsKCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gX3N0cmVhbS5pc0Jyb2FkY2FzdDsKCiAgX0JvdW5kU2lua1N0cmVhbSh0aGlzLl9zdHJlYW0sIHRoaXMuX3NpbmtNYXBwZXIpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgY2FuY2VsT25FcnJvciA9IGlkZW50aWNhbCh0cnVlLCBjYW5jZWxPbkVycm9yKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPQogICAgICAgIG5ldyBfU2lua1RyYW5zZm9ybWVyU3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+KAogICAgICAgICAgICBfc3RyZWFtLCBfc2lua01hcHBlciwgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICB9Cn0KCi8vLyBEYXRhLWhhbmRsZXIgY29taW5nIGZyb20gW1N0cmVhbVRyYW5zZm9ybWVyLmZyb21IYW5kbGVyc10uCnR5cGVkZWYgdm9pZCBfVHJhbnNmb3JtRGF0YUhhbmRsZXI8UywgVD4oUyBkYXRhLCBFdmVudFNpbms8VD4gc2luayk7CgovLy8gRXJyb3ItaGFuZGxlciBjb21pbmcgZnJvbSBbU3RyZWFtVHJhbnNmb3JtZXIuZnJvbUhhbmRsZXJzXS4KdHlwZWRlZiB2b2lkIF9UcmFuc2Zvcm1FcnJvckhhbmRsZXI8VD4oCiAgICBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSwgRXZlbnRTaW5rPFQ+IHNpbmspOwoKLy8vIERvbmUtaGFuZGxlciBjb21pbmcgZnJvbSBbU3RyZWFtVHJhbnNmb3JtZXIuZnJvbUhhbmRsZXJzXS4KdHlwZWRlZiB2b2lkIF9UcmFuc2Zvcm1Eb25lSGFuZGxlcjxUPihFdmVudFNpbms8VD4gc2luayk7CgovKioKICogV3JhcHMgaGFuZGxlcnMgKGZyb20gW1N0cmVhbVRyYW5zZm9ybWVyLmZyb21IYW5kbGVyc10pIGludG8gYW4gYEV2ZW50U2lua2AuCiAqCiAqIFRoaXMgd2F5IHdlIGNhbiByZXVzZSB0aGUgY29kZSBmcm9tIFtfU3RyZWFtU2lua1RyYW5zZm9ybWVyXS4KICovCmNsYXNzIF9IYW5kbGVyRXZlbnRTaW5rPFMsIFQ+IGltcGxlbWVudHMgRXZlbnRTaW5rPFM+IHsKICBmaW5hbCBfVHJhbnNmb3JtRGF0YUhhbmRsZXI8UywgVD4gX2hhbmRsZURhdGE7CiAgZmluYWwgX1RyYW5zZm9ybUVycm9ySGFuZGxlcjxUPiBfaGFuZGxlRXJyb3I7CiAgZmluYWwgX1RyYW5zZm9ybURvbmVIYW5kbGVyPFQ+IF9oYW5kbGVEb25lOwoKICAvLy8gVGhlIG91dHB1dCBzaW5rIHdoZXJlIHRoZSBoYW5kbGVycyBzaG91bGQgc2VuZCB0aGVpciBkYXRhIGludG8uCiAgRXZlbnRTaW5rPFQ+IF9zaW5rOwoKICBfSGFuZGxlckV2ZW50U2luaygKICAgICAgdGhpcy5faGFuZGxlRGF0YSwgdGhpcy5faGFuZGxlRXJyb3IsIHRoaXMuX2hhbmRsZURvbmUsIHRoaXMuX3NpbmspIHsKICAgIGlmIChfc2luayA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJUaGUgcHJvdmlkZWQgc2luayBtdXN0IG5vdCBiZSBudWxsLiIpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgX2lzQ2xvc2VkID0+IF9zaW5rID09IG51bGw7CgogIHZvaWQgYWRkKFMgZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJTaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgaWYgKF9oYW5kbGVEYXRhICE9IG51bGwpIHsKICAgICAgX2hhbmRsZURhdGEoZGF0YSwgX3NpbmspOwogICAgfSBlbHNlIHsKICAgICAgX3NpbmsuYWRkKGRhdGEgYXMgVCk7CiAgICB9CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiU2luayBpcyBjbG9zZWQiKTsKICAgIH0KICAgIGlmIChfaGFuZGxlRXJyb3IgIT0gbnVsbCkgewogICAgICBfaGFuZGxlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UsIF9zaW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0KICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSByZXR1cm47CiAgICB2YXIgc2luayA9IF9zaW5rOwogICAgX3NpbmsgPSBudWxsOwogICAgaWYgKF9oYW5kbGVEb25lICE9IG51bGwpIHsKICAgICAgX2hhbmRsZURvbmUoc2luayk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLmNsb3NlKCk7CiAgICB9CiAgfQp9CgovKioKICogQSBTdHJlYW1UcmFuc2Zvcm1lciB0aGF0IHRyYW5zZm9ybWVycyBldmVudHMgd2l0aCB0aGUgZ2l2ZW4gaGFuZGxlcnMuCiAqCiAqIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybWVyIGNhbiBvbmx5IGJlIHVzZWQgb25jZS4KICovCmNsYXNzIF9TdHJlYW1IYW5kbGVyVHJhbnNmb3JtZXI8UywgVD4gZXh0ZW5kcyBfU3RyZWFtU2lua1RyYW5zZm9ybWVyPFMsIFQ+IHsKICBfU3RyZWFtSGFuZGxlclRyYW5zZm9ybWVyKAogICAgICB7dm9pZCBoYW5kbGVEYXRhKFMgZGF0YSwgRXZlbnRTaW5rPFQ+IHNpbmspLAogICAgICB2b2lkIGhhbmRsZUVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlLCBFdmVudFNpbms8VD4gc2luayksCiAgICAgIHZvaWQgaGFuZGxlRG9uZShFdmVudFNpbms8VD4gc2luayl9KQogICAgICA6IHN1cGVyKChFdmVudFNpbms8VD4gb3V0cHV0U2luaykgewogICAgICAgICAgcmV0dXJuIG5ldyBfSGFuZGxlckV2ZW50U2luazxTLCBUPigKICAgICAgICAgICAgICBoYW5kbGVEYXRhLCBoYW5kbGVFcnJvciwgaGFuZGxlRG9uZSwgb3V0cHV0U2luayk7CiAgICAgICAgfSk7CgogIFN0cmVhbTxUPiBiaW5kKFN0cmVhbTxTPiBzdHJlYW0pIHsKICAgIHJldHVybiBzdXBlci5iaW5kKHN0cmVhbSk7CiAgfQp9CgovKioKICogQSBTdHJlYW1UcmFuc2Zvcm1lciB0aGF0IG92ZXJyaWRlcyBbU3RyZWFtVHJhbnNmb3JtZXIuYmluZF0gd2l0aCBhIGNhbGxiYWNrLgogKi8KY2xhc3MgX1N0cmVhbUJpbmRUcmFuc2Zvcm1lcjxTLCBUPiBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTLCBUPiB7CiAgZmluYWwgU3RyZWFtPFQ+IEZ1bmN0aW9uKFN0cmVhbTxTPikgX2JpbmQ7CiAgX1N0cmVhbUJpbmRUcmFuc2Zvcm1lcih0aGlzLl9iaW5kKTsKCiAgU3RyZWFtPFQ+IGJpbmQoU3RyZWFtPFM+IHN0cmVhbSkgPT4gX2JpbmQoc3RyZWFtKTsKfQoKLy8vIEEgY2xvc3VyZSBtYXBwaW5nIGEgc3RyZWFtIGFuZCBjYW5jZWxPbkVycm9yIHRvIGEgU3RyZWFtU3Vic2NyaXB0aW9uLgp0eXBlZGVmIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXI8UywgVD4oCiAgICBTdHJlYW08Uz4gc3RyZWFtLCBib29sIGNhbmNlbE9uRXJyb3IpOwoKLyoqCiAqIEEgW1N0cmVhbVRyYW5zZm9ybWVyXSB0aGF0IG1pbmltaXplcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY2xhc3Nlcy4KICoKICogSW5zdGVhZCBvZiBpbXBsZW1lbnRpbmcgdGhyZWUgY2xhc3NlczogYSBbU3RyZWFtVHJhbnNmb3JtZXJdLCBhIFtTdHJlYW1dCiAqIChhcyB0aGUgcmVzdWx0IG9mIGEgYGJpbmRgIGNhbGwpIGFuZCBhIFtTdHJlYW1TdWJzY3JpcHRpb25dICh3aGljaCBkb2VzIHRoZQogKiBhY3R1YWwgd29yayksIHRoaXMgY2xhc3Mgb25seSByZXF1aXJlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZQogKiBsYXN0IGJpdCAodGhlIHN1YnNjcmlwdGlvbikgb2YgdGhlIHRyYW5zZm9ybWVyLXdvcmtmbG93IGlzIG5lZWRlZC4KICoKICogVGhlIGdpdmVuIHRyYW5zZm9ybWVyIGZ1bmN0aW9uIG1hcHMgZnJvbSBTdHJlYW0gYW5kIGNhbmNlbE9uRXJyb3IgdG8gYQogKiBgU3RyZWFtU3Vic2NyaXB0aW9uYC4gQXMgc3VjaCBpdCBjYW4gYWxzbyBhY3Qgb24gYGNhbmNlbGAgZXZlbnRzLCBtYWtpbmcgaXQKICogZnVsbHkgZ2VuZXJhbC4KICovCmNsYXNzIF9TdHJlYW1TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcjxTLCBUPiBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTLCBUPiB7CiAgZmluYWwgX1N1YnNjcmlwdGlvblRyYW5zZm9ybWVyPFMsIFQ+IF9vbkxpc3RlbjsKCiAgY29uc3QgX1N0cmVhbVN1YnNjcmlwdGlvblRyYW5zZm9ybWVyKHRoaXMuX29uTGlzdGVuKTsKCiAgU3RyZWFtPFQ+IGJpbmQoU3RyZWFtPFM+IHN0cmVhbSkgPT4KICAgICAgbmV3IF9Cb3VuZFN1YnNjcmlwdGlvblN0cmVhbTxTLCBUPihzdHJlYW0sIF9vbkxpc3Rlbik7Cn0KCi8qKgogKiBBIHN0cmVhbSB0cmFuc2Zvcm1lZCBieSBhIFtfU3RyZWFtU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXJdLgogKgogKiBXaGVuIHRoaXMgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIGl0IGludm9rZXMgdGhlIFtfb25MaXN0ZW5dIGZ1bmN0aW9uIHdpdGgKICogdGhlIHN0b3JlZCBbX3N0cmVhbV0uIFVzdWFsbHkgdGhlIHRyYW5zZm9ybWVyIHN0YXJ0cyBsaXN0ZW5pbmcgYXQgdGhpcwogKiBtb21lbnQuCiAqLwpjbGFzcyBfQm91bmRTdWJzY3JpcHRpb25TdHJlYW08UywgVD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIF9TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcjxTLCBUPiBfb25MaXN0ZW47CiAgZmluYWwgU3RyZWFtPFM+IF9zdHJlYW07CgogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IF9zdHJlYW0uaXNCcm9hZGNhc3Q7CgogIF9Cb3VuZFN1YnNjcmlwdGlvblN0cmVhbSh0aGlzLl9zdHJlYW0sIHRoaXMuX29uTGlzdGVuKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGxpc3Rlbih2b2lkIG9uRGF0YShUIGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGNhbmNlbE9uRXJyb3IgPSBpZGVudGljYWwodHJ1ZSwgY2FuY2VsT25FcnJvcik7CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gcmVzdWx0ID0gX29uTGlzdGVuKF9zdHJlYW0sIGNhbmNlbE9uRXJyb3IpOwogICAgcmVzdWx0Lm9uRGF0YShvbkRhdGEpOwogICAgcmVzdWx0Lm9uRXJyb3Iob25FcnJvcik7CiAgICByZXN1bHQub25Eb25lKG9uRG9uZSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQqBUgBOTjwBFAEERwQ1FCEBFRYEATIoBAERFAQCAQQ4A0dISAQvLiQhASwnAVFQUThFKhRQBAFGMwEbAQYqBUdEDAYWFTgGFgQBBjAFR0QMBjgVOAYoBAEGLwVHRAwGEhU4BhQEASkBFC4EARUvBAEXGTccJAYRBAEdCiIVFwYEATYKNBUhJg8ZCAYEARcKHCAVFwYEAgE9AQQpA0caAygESScyASY3AgEEPwNPSzoEMScbAS8BNAE1PzQpNksZBAIBP0UBQCg9AT86AQRPA0EEODEwLgFGFgEVSxlGBgQBJwEVFSoGHyANHAYEATkVKgYgLg0pBgQBERsWEh8ZDRQGBAIBBEkDNQRNHTNQKyouQAwBJR8EAgEEUARJLSYBNQIBSj4rAQRKA0xPTkYDSk8SBFEyATgBJj0CAQQ/A0xKCwQ5MhsBLwE6ATU/NEYbHRsTBAIBI2RhcnQ6YXN5bmMvc3RyZWFtX3RyYW5zZm9ybWVycy5kYXJ0K29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy96b25lLmRhcnTAANaeLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCnR5cGVkZWYgUiBab25lQ2FsbGJhY2s8Uj4oKTsKdHlwZWRlZiBSIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+KFQgYXJnKTsKdHlwZWRlZiBSIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KFQxIGFyZzEsIFQyIGFyZzIpOwoKdHlwZWRlZiBIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciA9IHZvaWQgRnVuY3Rpb24oWm9uZSBzZWxmLAogICAgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CnR5cGVkZWYgUnVuSGFuZGxlciA9IFIgRnVuY3Rpb248Uj4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBGdW5jdGlvbigpIGYpOwp0eXBlZGVmIFJ1blVuYXJ5SGFuZGxlciA9IFIgRnVuY3Rpb248UiwgVD4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBGdW5jdGlvbihUIGFyZykgZiwgVCBhcmcpOwp0eXBlZGVmIFJ1bkJpbmFyeUhhbmRsZXIgPSBSIEZ1bmN0aW9uPFIsIFQxLCBUMj4oWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LAogICAgWm9uZSB6b25lLCBSIEZ1bmN0aW9uKFQxIGFyZzEsIFQyIGFyZzIpIGYsIFQxIGFyZzEsIFQyIGFyZzIpOwp0eXBlZGVmIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyID0gWm9uZUNhbGxiYWNrPFI+IEZ1bmN0aW9uPFI+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgRnVuY3Rpb24oKSBmKTsKdHlwZWRlZiBSZWdpc3RlclVuYXJ5Q2FsbGJhY2tIYW5kbGVyID0gWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gRnVuY3Rpb248UiwgVD4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBGdW5jdGlvbihUIGFyZykgZik7CnR5cGVkZWYgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIKICAgID0gWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gRnVuY3Rpb248UiwgVDEsIFQyPihab25lIHNlbGYsCiAgICAgICAgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIEZ1bmN0aW9uKFQxIGFyZzEsIFQyIGFyZzIpIGYpOwp0eXBlZGVmIEFzeW5jRXJyb3IgRXJyb3JDYWxsYmFja0hhbmRsZXIoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LAogICAgWm9uZSB6b25lLCBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CnR5cGVkZWYgdm9pZCBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIoCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgdm9pZCBmKCkpOwp0eXBlZGVmIFRpbWVyIENyZWF0ZVRpbWVySGFuZGxlcigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKCkpOwp0eXBlZGVmIFRpbWVyIENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwKICAgIFpvbmUgem9uZSwgRHVyYXRpb24gcGVyaW9kLCB2b2lkIGYoVGltZXIgdGltZXIpKTsKdHlwZWRlZiB2b2lkIFByaW50SGFuZGxlcigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBTdHJpbmcgbGluZSk7CnR5cGVkZWYgWm9uZSBGb3JrSGFuZGxlcihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgIFpvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzKTsKCi8qKiBQYWlyIG9mIGVycm9yIGFuZCBzdGFjayB0cmFjZS4gUmV0dXJuZWQgYnkgW1pvbmUuZXJyb3JDYWxsYmFja10uICovCmNsYXNzIEFzeW5jRXJyb3IgaW1wbGVtZW50cyBFcnJvciB7CiAgZmluYWwgT2JqZWN0IGVycm9yOwogIGZpbmFsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZTsKCiAgQXN5bmNFcnJvcih0aGlzLmVycm9yLCB0aGlzLnN0YWNrVHJhY2UpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGVycm9yJzsKfQoKY2xhc3MgX1pvbmVGdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24+IHsKICBmaW5hbCBfWm9uZSB6b25lOwogIGZpbmFsIFQgZnVuY3Rpb247CiAgY29uc3QgX1pvbmVGdW5jdGlvbih0aGlzLnpvbmUsIHRoaXMuZnVuY3Rpb24pOwp9CgovKioKICogVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgYSBmb3JrZWQgem9uZS4KICoKICogV2hlbiBmb3JraW5nIGEgbmV3IHpvbmUgKHNlZSBbWm9uZS5mb3JrXSkgb25lIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdAogKiBiZWhhdmlvciBvZiB0aGUgem9uZSBieSBwcm92aWRpbmcgY2FsbGJhY2tzLiBUaGVzZSBjYWxsYmFja3MgbXVzdCBiZQogKiBnaXZlbiBpbiBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgogKgogKiBIYW5kbGVycyBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyB0aGUgc2FtZS1uYW1lZCBtZXRob2RzIG9uIFtab25lXSBidXQKICogcmVjZWl2ZSB0aHJlZSBhZGRpdGlvbmFsIGFyZ3VtZW50czoKICoKICogICAxLiB0aGUgem9uZSB0aGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvICh0aGUgInNlbGYiIHpvbmUpLgogKiAgIDIuIGEgW1pvbmVEZWxlZ2F0ZV0gdG8gdGhlIHBhcmVudCB6b25lLgogKiAgIDMuIHRoZSB6b25lIHRoYXQgZmlyc3QgcmVjZWl2ZWQgdGhlIHJlcXVlc3QgKGJlZm9yZSB0aGUgcmVxdWVzdCB3YXMKICogICAgIGJ1YmJsZWQgdXApLgogKgogKiBIYW5kbGVycyBjYW4gZWl0aGVyIHN0b3AgcHJvcGFnYXRpb24gdGhlIHJlcXVlc3QgKGJ5IHNpbXBseSBub3QgY2FsbGluZyB0aGUKICogcGFyZW50IGhhbmRsZXIpLCBvciBmb3J3YXJkIHRvIHRoZSBwYXJlbnQgem9uZSwgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZQogKiBhcmd1bWVudHMgb24gdGhlIHdheS4KICovCmFic3RyYWN0IGNsYXNzIFpvbmVTcGVjaWZpY2F0aW9uIHsKICAvKioKICAgKiBDcmVhdGVzIGEgc3BlY2lmaWNhdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBoYW5kbGVycy4KICAgKi8KICBjb25zdCBmYWN0b3J5IFpvbmVTcGVjaWZpY2F0aW9uKAogICAgICB7SGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgaGFuZGxlVW5jYXVnaHRFcnJvciwKICAgICAgUnVuSGFuZGxlciBydW4sCiAgICAgIFJ1blVuYXJ5SGFuZGxlciBydW5VbmFyeSwKICAgICAgUnVuQmluYXJ5SGFuZGxlciBydW5CaW5hcnksCiAgICAgIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyQ2FsbGJhY2ssCiAgICAgIFJlZ2lzdGVyVW5hcnlDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJVbmFyeUNhbGxiYWNrLAogICAgICBSZWdpc3RlckJpbmFyeUNhbGxiYWNrSGFuZGxlciByZWdpc3RlckJpbmFyeUNhbGxiYWNrLAogICAgICBFcnJvckNhbGxiYWNrSGFuZGxlciBlcnJvckNhbGxiYWNrLAogICAgICBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIgc2NoZWR1bGVNaWNyb3Rhc2ssCiAgICAgIENyZWF0ZVRpbWVySGFuZGxlciBjcmVhdGVUaW1lciwKICAgICAgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIgY3JlYXRlUGVyaW9kaWNUaW1lciwKICAgICAgUHJpbnRIYW5kbGVyIHByaW50LAogICAgICBGb3JrSGFuZGxlciBmb3JrfSkgPSBfWm9uZVNwZWNpZmljYXRpb247CgogIC8qKgogICAqIENyZWF0ZXMgYSBzcGVjaWZpY2F0aW9uIGZyb20gW290aGVyXSB3aXRoIHRoZSBwcm92aWRlZCBoYW5kbGVycyBvdmVycmlkaW5nCiAgICogdGhlIG9uZXMgaW4gW290aGVyXS4KICAgKi8KICBmYWN0b3J5IFpvbmVTcGVjaWZpY2F0aW9uLmZyb20oWm9uZVNwZWNpZmljYXRpb24gb3RoZXIsCiAgICAgIHtIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciBoYW5kbGVVbmNhdWdodEVycm9yLAogICAgICBSdW5IYW5kbGVyIHJ1biwKICAgICAgUnVuVW5hcnlIYW5kbGVyIHJ1blVuYXJ5LAogICAgICBSdW5CaW5hcnlIYW5kbGVyIHJ1bkJpbmFyeSwKICAgICAgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJDYWxsYmFjaywKICAgICAgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciByZWdpc3RlclVuYXJ5Q2FsbGJhY2ssCiAgICAgIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2ssCiAgICAgIEVycm9yQ2FsbGJhY2tIYW5kbGVyIGVycm9yQ2FsbGJhY2ssCiAgICAgIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBzY2hlZHVsZU1pY3JvdGFzaywKICAgICAgQ3JlYXRlVGltZXJIYW5kbGVyIGNyZWF0ZVRpbWVyLAogICAgICBDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlciBjcmVhdGVQZXJpb2RpY1RpbWVyLAogICAgICBQcmludEhhbmRsZXIgcHJpbnQsCiAgICAgIEZvcmtIYW5kbGVyIGZvcmt9KSB7CiAgICByZXR1cm4gbmV3IFpvbmVTcGVjaWZpY2F0aW9uKAogICAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3I6IGhhbmRsZVVuY2F1Z2h0RXJyb3IgPz8gb3RoZXIuaGFuZGxlVW5jYXVnaHRFcnJvciwKICAgICAgICBydW46IHJ1biA/PyBvdGhlci5ydW4sCiAgICAgICAgcnVuVW5hcnk6IHJ1blVuYXJ5ID8/IG90aGVyLnJ1blVuYXJ5LAogICAgICAgIHJ1bkJpbmFyeTogcnVuQmluYXJ5ID8/IG90aGVyLnJ1bkJpbmFyeSwKICAgICAgICByZWdpc3RlckNhbGxiYWNrOiByZWdpc3RlckNhbGxiYWNrID8/IG90aGVyLnJlZ2lzdGVyQ2FsbGJhY2ssCiAgICAgICAgcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOgogICAgICAgICAgICByZWdpc3RlclVuYXJ5Q2FsbGJhY2sgPz8gb3RoZXIucmVnaXN0ZXJVbmFyeUNhbGxiYWNrLAogICAgICAgIHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s6CiAgICAgICAgICAgIHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2sgPz8gb3RoZXIucmVnaXN0ZXJCaW5hcnlDYWxsYmFjaywKICAgICAgICBlcnJvckNhbGxiYWNrOiBlcnJvckNhbGxiYWNrID8/IG90aGVyLmVycm9yQ2FsbGJhY2ssCiAgICAgICAgc2NoZWR1bGVNaWNyb3Rhc2s6IHNjaGVkdWxlTWljcm90YXNrID8/IG90aGVyLnNjaGVkdWxlTWljcm90YXNrLAogICAgICAgIGNyZWF0ZVRpbWVyOiBjcmVhdGVUaW1lciA/PyBvdGhlci5jcmVhdGVUaW1lciwKICAgICAgICBjcmVhdGVQZXJpb2RpY1RpbWVyOiBjcmVhdGVQZXJpb2RpY1RpbWVyID8/IG90aGVyLmNyZWF0ZVBlcmlvZGljVGltZXIsCiAgICAgICAgcHJpbnQ6IHByaW50ID8/IG90aGVyLnByaW50LAogICAgICAgIGZvcms6IGZvcmsgPz8gb3RoZXIuZm9yayk7CiAgfQoKICBIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciBnZXQgaGFuZGxlVW5jYXVnaHRFcnJvcjsKICBSdW5IYW5kbGVyIGdldCBydW47CiAgUnVuVW5hcnlIYW5kbGVyIGdldCBydW5VbmFyeTsKICBSdW5CaW5hcnlIYW5kbGVyIGdldCBydW5CaW5hcnk7CiAgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgZ2V0IHJlZ2lzdGVyQ2FsbGJhY2s7CiAgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciBnZXQgcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyIGdldCByZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogIEVycm9yQ2FsbGJhY2tIYW5kbGVyIGdldCBlcnJvckNhbGxiYWNrOwogIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBnZXQgc2NoZWR1bGVNaWNyb3Rhc2s7CiAgQ3JlYXRlVGltZXJIYW5kbGVyIGdldCBjcmVhdGVUaW1lcjsKICBDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlciBnZXQgY3JlYXRlUGVyaW9kaWNUaW1lcjsKICBQcmludEhhbmRsZXIgZ2V0IHByaW50OwogIEZvcmtIYW5kbGVyIGdldCBmb3JrOwp9CgovKioKICogSW50ZXJuYWwgW1pvbmVTcGVjaWZpY2F0aW9uXSBjbGFzcy4KICoKICogVGhlIGltcGxlbWVudGF0aW9uIHdhbnRzIHRvIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGUgZ2V0dGVycyBjYW5ub3QgY2hhbmdlCiAqIGR5bmFtaWNhbGx5LiBXZSB0aHVzIHJlcXVpcmUgdXNlcnMgdG8gZ28gdGhyb3VnaCB0aGUgcmVkaXJlY3RpbmcKICogW1pvbmVTcGVjaWZpY2F0aW9uXSBjb25zdHJ1Y3RvciB3aGljaCBpbnN0YW50aWF0ZXMgdGhpcyBjbGFzcy4KICovCmNsYXNzIF9ab25lU3BlY2lmaWNhdGlvbiBpbXBsZW1lbnRzIFpvbmVTcGVjaWZpY2F0aW9uIHsKICBjb25zdCBfWm9uZVNwZWNpZmljYXRpb24oCiAgICAgIHt0aGlzLmhhbmRsZVVuY2F1Z2h0RXJyb3IsCiAgICAgIHRoaXMucnVuLAogICAgICB0aGlzLnJ1blVuYXJ5LAogICAgICB0aGlzLnJ1bkJpbmFyeSwKICAgICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrLAogICAgICB0aGlzLnJlZ2lzdGVyVW5hcnlDYWxsYmFjaywKICAgICAgdGhpcy5yZWdpc3RlckJpbmFyeUNhbGxiYWNrLAogICAgICB0aGlzLmVycm9yQ2FsbGJhY2ssCiAgICAgIHRoaXMuc2NoZWR1bGVNaWNyb3Rhc2ssCiAgICAgIHRoaXMuY3JlYXRlVGltZXIsCiAgICAgIHRoaXMuY3JlYXRlUGVyaW9kaWNUaW1lciwKICAgICAgdGhpcy5wcmludCwKICAgICAgdGhpcy5mb3JrfSk7CgogIGZpbmFsIEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGhhbmRsZVVuY2F1Z2h0RXJyb3I7CiAgZmluYWwgUnVuSGFuZGxlciBydW47CiAgZmluYWwgUnVuVW5hcnlIYW5kbGVyIHJ1blVuYXJ5OwogIGZpbmFsIFJ1bkJpbmFyeUhhbmRsZXIgcnVuQmluYXJ5OwogIGZpbmFsIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyQ2FsbGJhY2s7CiAgZmluYWwgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciByZWdpc3RlclVuYXJ5Q2FsbGJhY2s7CiAgZmluYWwgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICBmaW5hbCBFcnJvckNhbGxiYWNrSGFuZGxlciBlcnJvckNhbGxiYWNrOwogIGZpbmFsIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBzY2hlZHVsZU1pY3JvdGFzazsKICBmaW5hbCBDcmVhdGVUaW1lckhhbmRsZXIgY3JlYXRlVGltZXI7CiAgZmluYWwgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIgY3JlYXRlUGVyaW9kaWNUaW1lcjsKICBmaW5hbCBQcmludEhhbmRsZXIgcHJpbnQ7CiAgZmluYWwgRm9ya0hhbmRsZXIgZm9yazsKfQoKLyoqCiAqIEFuIGFkYXB0ZWQgdmlldyBvZiB0aGUgcGFyZW50IHpvbmUuCiAqCiAqIFRoaXMgY2xhc3MgYWxsb3dzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHpvbmUgbWV0aG9kIHRvIGludm9rZSBtZXRob2RzIG9uCiAqIHRoZSBwYXJlbnQgem9uZSB3aGlsZSByZXRhaW5pbmcga25vd2xlZGdlIG9mIHRoZSBvcmlnaW5hdGluZyB6b25lLgogKgogKiBDdXN0b20gem9uZXMgKGNyZWF0ZWQgdGhyb3VnaCBbWm9uZS5mb3JrXSBvciBbcnVuWm9uZWRdKSBjYW4gcHJvdmlkZQogKiBpbXBsZW1lbnRhdGlvbnMgb2YgbW9zdCBtZXRob2RzIG9mIHpvbmVzLiBUaGlzIGlzIHNpbWlsYXIgdG8gb3ZlcnJpZGluZwogKiBtZXRob2RzIG9uIFtab25lXSwgZXhjZXB0IHRoYXQgdGhpcyBtZWNoYW5pc20gZG9lc24ndCByZXF1aXJlIHN1YmNsYXNzaW5nLgogKgogKiBBIGN1c3RvbSB6b25lIGZ1bmN0aW9uIChwcm92aWRlZCB0aHJvdWdoIGEgW1pvbmVTcGVjaWZpY2F0aW9uXSkgdHlwaWNhbGx5CiAqIHJlY29yZHMgb3Igd3JhcHMgaXRzIHBhcmFtZXRlcnMgYW5kIHRoZW4gZGVsZWdhdGVzIHRoZSBvcGVyYXRpb24gdG8gaXRzCiAqIHBhcmVudCB6b25lIHVzaW5nIHRoZSBwcm92aWRlZCBbWm9uZURlbGVnYXRlXS4KICoKICogV2hpbGUgem9uZXMgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgcGFyZW50IHpvbmUgKHRocm91Z2ggW1pvbmUucGFyZW50XSkgaXQgaXMKICogcmVjb21tZW5kZWQgdG8gY2FsbCB0aGUgbWV0aG9kcyBvbiB0aGUgcHJvdmlkZWQgcGFyZW50IGRlbGVnYXRlIGZvciB0d28KICogcmVhc29uczoKICogMS4gdGhlIGRlbGVnYXRlIG1ldGhvZHMgdGFrZSBhbiBhZGRpdGlvbmFsIGB6b25lYCBhcmd1bWVudCB3aGljaCBpcyB0aGUKICogICB6b25lIHRoZSBhY3Rpb24gaGFzIGJlZW4gaW5pdGlhdGVkIGluLgogKiAyLiBkZWxlZ2F0ZSBjYWxscyBhcmUgbW9yZSBlZmZpY2llbnQsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBrbm93cyBob3cKICogICB0byBza2lwIHpvbmVzIHRoYXQgd291bGQganVzdCBkZWxlZ2F0ZSB0byB0aGVpciBwYXJlbnRzLgogKi8KYWJzdHJhY3QgY2xhc3MgWm9uZURlbGVnYXRlIHsKICB2b2lkIGhhbmRsZVVuY2F1Z2h0RXJyb3IoWm9uZSB6b25lLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKICBSIHJ1bjxSPihab25lIHpvbmUsIFIgZigpKTsKICBSIHJ1blVuYXJ5PFIsIFQ+KFpvbmUgem9uZSwgUiBmKFQgYXJnKSwgVCBhcmcpOwogIFIgcnVuQmluYXJ5PFIsIFQxLCBUMj4oWm9uZSB6b25lLCBSIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpOwogIFpvbmVDYWxsYmFjazxSPiByZWdpc3RlckNhbGxiYWNrPFI+KFpvbmUgem9uZSwgUiBmKCkpOwogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IHJlZ2lzdGVyVW5hcnlDYWxsYmFjazxSLCBUPihab25lIHpvbmUsIFIgZihUIGFyZykpOwogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgWm9uZSB6b25lLCBSIGYoVDEgYXJnMSwgVDIgYXJnMikpOwogIEFzeW5jRXJyb3IgZXJyb3JDYWxsYmFjayhab25lIHpvbmUsIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKICB2b2lkIHNjaGVkdWxlTWljcm90YXNrKFpvbmUgem9uZSwgdm9pZCBmKCkpOwogIFRpbWVyIGNyZWF0ZVRpbWVyKFpvbmUgem9uZSwgRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZigpKTsKICBUaW1lciBjcmVhdGVQZXJpb2RpY1RpbWVyKFpvbmUgem9uZSwgRHVyYXRpb24gcGVyaW9kLCB2b2lkIGYoVGltZXIgdGltZXIpKTsKICB2b2lkIHByaW50KFpvbmUgem9uZSwgU3RyaW5nIGxpbmUpOwogIFpvbmUgZm9yayhab25lIHpvbmUsIFpvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzKTsKfQoKLyoqCiAqIEEgem9uZSByZXByZXNlbnRzIGFuIGVudmlyb25tZW50IHRoYXQgcmVtYWlucyBzdGFibGUgYWNyb3NzIGFzeW5jaHJvbm91cwogKiBjYWxscy4KICoKICogQ29kZSBpcyBhbHdheXMgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYSB6b25lLCBhdmFpbGFibGUgYXMKICogW1pvbmUuY3VycmVudF0uIFRoZSBpbml0aWFsIGBtYWluYCBmdW5jdGlvbiBydW5zIGluIHRoZSBjb250ZXh0IG9mIHRoZQogKiBkZWZhdWx0IHpvbmUgKFtab25lLnJvb3RdKS4gQ29kZSBjYW4gYmUgcnVuIGluIGEgZGlmZmVyZW50IHpvbmUgdXNpbmcgZWl0aGVyCiAqIFtydW5ab25lZF0sIHRvIGNyZWF0ZSBhIG5ldyB6b25lLCBvciBbWm9uZS5ydW5dIHRvIHJ1biBjb2RlIGluIHRoZSBjb250ZXh0IG9mCiAqIGFuIGV4aXN0aW5nIHpvbmUgbGlrZWx5IGNyZWF0ZWQgdXNpbmcgW1pvbmUuZm9ya10uCiAqCiAqIERldmVsb3BlcnMgY2FuIGNyZWF0ZSBhIG5ldyB6b25lIHRoYXQgb3ZlcnJpZGVzIHNvbWUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YKICogYW4gZXhpc3Rpbmcgem9uZS4gRm9yIGV4YW1wbGUsIGN1c3RvbSB6b25lcyBjYW4gcmVwbGFjZSBvZiBtb2RpZnkgdGhlCiAqIGJlaGF2aW9yIG9mIGBwcmludGAsIHRpbWVycywgbWljcm90YXNrcyBvciBob3cgdW5jYXVnaHQgZXJyb3JzIGFyZSBoYW5kbGVkLgogKgogKiBUaGUgW1pvbmVdIGNsYXNzIGlzIG5vdCBzdWJjbGFzc2FibGUsIGJ1dCB1c2VycyBjYW4gcHJvdmlkZSBjdXN0b20gem9uZXMgYnkKICogZm9ya2luZyBhbiBleGlzdGluZyB6b25lICh1c3VhbGx5IFtab25lLmN1cnJlbnRdKSB3aXRoIGEgW1pvbmVTcGVjaWZpY2F0aW9uXS4KICogVGhpcyBpcyBzaW1pbGFyIHRvIGNyZWF0aW5nIGEgbmV3IGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgYmFzZSBgWm9uZWAgY2xhc3MKICogYW5kIHRoYXQgb3ZlcnJpZGVzIHNvbWUgbWV0aG9kcywgZXhjZXB0IHdpdGhvdXQgYWN0dWFsbHkgY3JlYXRpbmcgYSBuZXcKICogY2xhc3MuIEluc3RlYWQgdGhlIG92ZXJyaWRpbmcgbWV0aG9kcyBhcmUgcHJvdmlkZWQgYXMgZnVuY3Rpb25zIHRoYXQKICogZXhwbGljaXRseSB0YWtlIHRoZSBlcXVpdmFsZW50IG9mIHRoZWlyIG93biBjbGFzcywgdGhlICJzdXBlciIgY2xhc3MgYW5kIHRoZQogKiBgdGhpc2Agb2JqZWN0IGFzIHBhcmFtZXRlcnMuCiAqCiAqIEFzeW5jaHJvbm91cyBjYWxsYmFja3MgYWx3YXlzIHJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgem9uZSB3aGVyZSB0aGV5IHdlcmUKICogc2NoZWR1bGVkLiBUaGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIHR3byBzdGVwczoKICogMS4gdGhlIGNhbGxiYWNrIGlzIGZpcnN0IHJlZ2lzdGVyZWQgdXNpbmcgb25lIG9mIFtyZWdpc3RlckNhbGxiYWNrXSwKICogICBbcmVnaXN0ZXJVbmFyeUNhbGxiYWNrXSwgb3IgW3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tdLiBUaGlzIGFsbG93cyB0aGUgem9uZQogKiAgIHRvIHJlY29yZCB0aGF0IGEgY2FsbGJhY2sgZXhpc3RzIGFuZCBwb3RlbnRpYWxseSBtb2RpZnkgaXQgKGJ5IHJldHVybmluZyBhCiAqICAgZGlmZmVyZW50IGNhbGxiYWNrKS4gVGhlIGNvZGUgZG9pbmcgdGhlIHJlZ2lzdHJhdGlvbiAoZS5nLiwgYEZ1dHVyZS50aGVuYCkKICogICBhbHNvIHJlbWVtYmVycyB0aGUgY3VycmVudCB6b25lIHNvIHRoYXQgaXQgY2FuIGxhdGVyIHJ1biB0aGUgY2FsbGJhY2sgaW4KICogICB0aGF0IHpvbmUuCiAqIDIuIEF0IGEgbGF0ZXIgcG9pbnQgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgaXMgcnVuIGluIHRoZSByZW1lbWJlcmVkIHpvbmUuCiAqCiAqIFRoaXMgaXMgYWxsIGhhbmRsZWQgaW50ZXJuYWxseSBieSB0aGUgcGxhdGZvcm0gY29kZSBhbmQgbW9zdCB1c2VycyBkb24ndCBuZWVkCiAqIHRvIHdvcnJ5IGFib3V0IGl0LiBIb3dldmVyLCBkZXZlbG9wZXJzIG9mIG5ldyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucywKICogcHJvdmlkZWQgYnkgdGhlIHVuZGVybHlpbmcgc3lzdGVtIG9yIHRocm91Z2ggbmF0aXZlIGV4dGVuc2lvbnMsIG11c3QgZm9sbG93CiAqIHRoZSBwcm90b2NvbCB0byBiZSB6b25lIGNvbXBhdGlibGUuCiAqCiAqIEZvciBjb252ZW5pZW5jZSwgem9uZXMgcHJvdmlkZSBbYmluZENhbGxiYWNrXSAoYW5kIHRoZSBjb3JyZXNwb25kaW5nCiAqIFtiaW5kVW5hcnlDYWxsYmFja10gYW5kIFtiaW5kQmluYXJ5Q2FsbGJhY2tdKSB0byBtYWtlIGl0IGVhc2llciB0byByZXNwZWN0CiAqIHRoZSB6b25lIGNvbnRyYWN0OiB0aGVzZSBmdW5jdGlvbnMgZmlyc3QgaW52b2tlIHRoZSBjb3JyZXNwb25kaW5nIGByZWdpc3RlcmAKICogZnVuY3Rpb25zIGFuZCB0aGVuIHdyYXAgdGhlIHJldHVybmVkIGZ1bmN0aW9uIHNvIHRoYXQgaXQgcnVucyBpbiB0aGUgY3VycmVudAogKiB6b25lIHdoZW4gaXQgaXMgbGF0ZXIgYXN5bmNocm9ub3VzbHkgaW52b2tlZC4KICoKICogU2ltaWxhcmx5LCB6b25lcyBwcm92aWRlIFtiaW5kQ2FsbGJhY2tHdWFyZGVkXSAoYW5kIHRoZSBjb3JyZXNwb25kaW5nCiAqIFtiaW5kVW5hcnlDYWxsYmFja0d1YXJkZWRdIGFuZCBbYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZF0pLCB3aGVuIHRoZQogKiBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCB0aHJvdWdoIFtab25lLnJ1bkd1YXJkZWRdLgogKi8KYWJzdHJhY3QgY2xhc3MgWm9uZSB7CiAgLy8gUHJpdmF0ZSBjb25zdHJ1Y3RvciBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSBpbnN0YW50aWF0ZSBhIFpvbmUgY2xhc3MuCiAgWm9uZS5fKCk7CgogIC8qKgogICAqIFRoZSByb290IHpvbmUuCiAgICoKICAgKiBBbGwgaXNvbGF0ZSBlbnRyeSBmdW5jdGlvbnMgKGBtYWluYCBvciBzcGF3bmVkIGZ1bmN0aW9ucykgc3RhcnQgcnVubmluZyBpbgogICAqIHRoZSByb290IHpvbmUgKHRoYXQgaXMsIFtab25lLmN1cnJlbnRdIGlzIGlkZW50aWNhbCB0byBbWm9uZS5yb290XSB3aGVuIHRoZQogICAqIGVudHJ5IGZ1bmN0aW9uIGlzIGNhbGxlZCkuIElmIG5vIGN1c3RvbSB6b25lIGlzIGNyZWF0ZWQsIHRoZSByZXN0IG9mIHRoZQogICAqIHByb2dyYW0gYWx3YXlzIHJ1bnMgaW4gdGhlIHJvb3Qgem9uZS4KICAgKgogICAqIFRoZSByb290IHpvbmUgaW1wbGVtZW50cyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBhbGwgem9uZSBvcGVyYXRpb25zLgogICAqIE1hbnkgbWV0aG9kcywgbGlrZSBbcmVnaXN0ZXJDYWxsYmFja10gZG8gdGhlIGJhcmUgbWluaW11bSByZXF1aXJlZCBvZiB0aGUKICAgKiBmdW5jdGlvbiwgYW5kIGFyZSBvbmx5IHByb3ZpZGVkIGFzIGEgaG9vayBmb3IgY3VzdG9tIHpvbmVzLiBPdGhlcnMsIGxpa2UKICAgKiBbc2NoZWR1bGVNaWNyb3Rhc2tdLCBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSB0byBpbXBsZW1lbnQgdGhlCiAgICogZGVzaXJlZCBiZWhhdmlvci4KICAgKi8KICBzdGF0aWMgY29uc3QgWm9uZSByb290ID0gX3Jvb3Rab25lOwoKICAvKiogVGhlIGN1cnJlbnRseSBydW5uaW5nIHpvbmUuICovCiAgc3RhdGljIFpvbmUgX2N1cnJlbnQgPSBfcm9vdFpvbmU7CgogIC8qKiBUaGUgem9uZSB0aGF0IGlzIGN1cnJlbnRseSBhY3RpdmUuICovCiAgc3RhdGljIFpvbmUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIC8qKgogICAqIEhhbmRsZXMgdW5jYXVnaHQgYXN5bmNocm9ub3VzIGVycm9ycy4KICAgKgogICAqIFRoZXJlIGFyZSB0d28ga2luZCBvZiBhc3luY2hyb25vdXMgZXJyb3JzIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhpcwogICAqIGZ1bmN0aW9uOgogICAqIDEuIFVuY2F1Z2h0IGVycm9ycyB0aGF0IHdlcmUgdGhyb3duIGluIGFzeW5jaHJvbm91cyBjYWxsYmFja3MsIGZvciBleGFtcGxlLAogICAqICAgYSBgdGhyb3dgIGluIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gW1RpbWVyLnJ1bl0uCiAgICogMi4gQXN5bmNocm9ub3VzIGVycm9ycyB0aGF0IGFyZSBwdXNoZWQgdGhyb3VnaCBbRnV0dXJlXSBhbmQgW1N0cmVhbV0KICAgKiAgIGNoYWlucywgYnV0IGZvciB3aGljaCBubyBjaGlsZCByZWdpc3RlcmVkIGFuIGVycm9yIGhhbmRsZXIuCiAgICogICBNb3N0IGFzeW5jaHJvbm91cyBjbGFzc2VzLCBsaWtlIFtGdXR1cmVdIG9yIFtTdHJlYW1dIHB1c2ggZXJyb3JzIHRvIHRoZWlyCiAgICogICBsaXN0ZW5lcnMuIEVycm9ycyBhcmUgcHJvcGFnYXRlZCB0aGlzIHdheSB1bnRpbCBlaXRoZXIgYSBsaXN0ZW5lciBoYW5kbGVzCiAgICogICB0aGUgZXJyb3IgKGZvciBleGFtcGxlIHdpdGggW0Z1dHVyZS5jYXRjaEVycm9yXSksIG9yIG5vIGxpc3RlbmVyIGlzCiAgICogICBhdmFpbGFibGUgYW55bW9yZS4gSW4gdGhlIGxhdHRlciBjYXNlLCBmdXR1cmVzIGFuZCBzdHJlYW1zIGludm9rZSB0aGUKICAgKiAgIHpvbmUncyBbaGFuZGxlVW5jYXVnaHRFcnJvcl0uCiAgICoKICAgKiBCeSBkZWZhdWx0LCB3aGVuIGhhbmRsZWQgYnkgdGhlIHJvb3Qgem9uZSwgdW5jYXVnaHQgYXN5bmNocm9ub3VzIGVycm9ycyBhcmUKICAgKiB0cmVhdGVkIGxpa2UgdW5jYXVnaHQgc3luY2hyb25vdXMgZXhjZXB0aW9ucy4KICAgKi8KICB2b2lkIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CgogIC8qKgogICAqIFRoZSBwYXJlbnQgem9uZSBvZiB0aGUgdGhpcyB6b25lLgogICAqCiAgICogSXMgYG51bGxgIGlmIGB0aGlzYCBpcyB0aGUgW3Jvb3RdIHpvbmUuCiAgICoKICAgKiBab25lcyBhcmUgY3JlYXRlZCBieSBbZm9ya10gb24gYW4gZXhpc3Rpbmcgem9uZSwgb3IgYnkgW3J1blpvbmVkXSB3aGljaAogICAqIGZvcmtzIHRoZSBbY3VycmVudF0gem9uZS4gVGhlIG5ldyB6b25lJ3MgcGFyZW50IHpvbmUgaXMgdGhlIHpvbmUgaXQgd2FzCiAgICogZm9ya2VkIGZyb20uCiAgICovCiAgWm9uZSBnZXQgcGFyZW50OwoKICAvKioKICAgKiBUaGUgZXJyb3Igem9uZSBpcyB0aGUgb25lIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGRlYWxpbmcgd2l0aCB1bmNhdWdodAogICAqIGVycm9ycy4KICAgKgogICAqIFRoaXMgaXMgdGhlIGNsb3Nlc3QgcGFyZW50IHpvbmUgb2YgdGhpcyB6b25lIHRoYXQgcHJvdmlkZXMgYQogICAqIFtoYW5kbGVVbmNhdWdodEVycm9yXSBtZXRob2QuCiAgICoKICAgKiBBc3luY2hyb25vdXMgZXJyb3JzIG5ldmVyIGNyb3NzIHpvbmUgYm91bmRhcmllcyBiZXR3ZWVuIHpvbmVzIHdpdGgKICAgKiBkaWZmZXJlbnQgZXJyb3IgaGFuZGxlcnMuCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYAogICAqIGltcG9ydCAnZGFydDphc3luYyc7CiAgICoKICAgKiBtYWluKCkgewogICAqICAgdmFyIGZ1dHVyZTsKICAgKiAgIHJ1blpvbmVkKCgpIHsKICAgKiAgICAgLy8gVGhlIGFzeW5jaHJvbm91cyBlcnJvciBpcyBjYXVnaHQgYnkgdGhlIGN1c3RvbSB6b25lIHdoaWNoIHByaW50cwogICAqICAgICAvLyAnYXN5bmNocm9ub3VzIGVycm9yJy4KICAgKiAgICAgZnV0dXJlID0gbmV3IEZ1dHVyZS5lcnJvcigiYXN5bmNocm9ub3VzIGVycm9yIik7CiAgICogICB9LCBvbkVycm9yOiAoZSkgeyBwcmludChlKTsgfSk7ICAvLyBDcmVhdGVzIGEgem9uZSB3aXRoIGFuIGVycm9yIGhhbmRsZXIuCiAgICogICAvLyBUaGUgZm9sbG93aW5nIGBjYXRjaEVycm9yYCBoYW5kbGVyIGlzIG5ldmVyIGludm9rZWQsIGJlY2F1c2UgdGhlCiAgICogICAvLyBjdXN0b20gem9uZSBjcmVhdGVkIGJ5IHRoZSBjYWxsIHRvIGBydW5ab25lZGAgcHJvdmlkZXMgYW4KICAgKiAgIC8vIGVycm9yIGhhbmRsZXIuCiAgICogICBmdXR1cmUuY2F0Y2hFcnJvcigoZSkgeyB0aHJvdyAiaXMgbmV2ZXIgcmVhY2hlZCI7IH0pOwogICAqIH0KICAgKiBgYGAKICAgKgogICAqIE5vdGUgdGhhdCBlcnJvcnMgY2Fubm90IGVudGVyIGEgY2hpbGQgem9uZSB3aXRoIGEgZGlmZmVyZW50IGVycm9yIGhhbmRsZXIKICAgKiBlaXRoZXI6CiAgICogYGBgCiAgICogaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICAgKgogICAqIG1haW4oKSB7CiAgICogICBydW5ab25lZCgoKSB7CiAgICogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXN5bmNocm9ub3VzIGVycm9yIGlzICpub3QqIGNhdWdodCBieSB0aGUgYGNhdGNoRXJyb3JgCiAgICogICAgIC8vIGluIHRoZSBuZXN0ZWQgem9uZSwgc2luY2UgZXJyb3JzIGFyZSBub3QgdG8gY3Jvc3Mgem9uZSBib3VuZGFyaWVzCiAgICogICAgIC8vIHdpdGggZGlmZmVyZW50IGVycm9yIGhhbmRsZXJzLgogICAqICAgICAvLyBJbnN0ZWFkIHRoZSBlcnJvciBpcyBoYW5kbGVkIGJ5IHRoZSBjdXJyZW50IGVycm9yIGhhbmRsZXIsCiAgICogICAgIC8vIHByaW50aW5nICJDYXVnaHQgYnkgb3V0ZXIgem9uZTogYXN5bmNocm9ub3VzIGVycm9yIi4KICAgKiAgICAgdmFyIGZ1dHVyZSA9IG5ldyBGdXR1cmUuZXJyb3IoImFzeW5jaHJvbm91cyBlcnJvciIpOwogICAqICAgICBydW5ab25lZCgoKSB7CiAgICogICAgICAgZnV0dXJlLmNhdGNoRXJyb3IoKGUpIHsgdGhyb3cgImlzIG5ldmVyIHJlYWNoZWQiOyB9KTsKICAgKiAgICAgfSwgb25FcnJvcjogKGUpIHsgdGhyb3cgImlzIG5ldmVyIHJlYWNoZWQiOyB9KTsKICAgKiAgIH0sIG9uRXJyb3I6IChlKSB7IHByaW50KCJDYXVnaHQgYnkgb3V0ZXIgem9uZTogJGUiKTsgfSk7CiAgICogfQogICAqIGBgYAogICAqLwogIFpvbmUgZ2V0IGVycm9yWm9uZTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIGB0aGlzYCBhbmQgW290aGVyWm9uZV0gYXJlIGluIHRoZSBzYW1lIGVycm9yIHpvbmUuCiAgICoKICAgKiBUd28gem9uZXMgYXJlIGluIHRoZSBzYW1lIGVycm9yIHpvbmUgaWYgdGhleSBoYXZlIHRoZSBzYW1lIFtlcnJvclpvbmVdLgogICAqLwogIGJvb2wgaW5TYW1lRXJyb3Jab25lKFpvbmUgb3RoZXJab25lKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyB6b25lIGFzIGEgY2hpbGQgb2YgYHRoaXNgLgogICAqCiAgICogVGhlIG5ldyB6b25lIHVzZXMgdGhlIGNsb3N1cmVzIGluIHRoZSBnaXZlbiBbc3BlY2lmaWNhdGlvbl0gdG8gb3ZlcnJpZGUKICAgKiB0aGUgY3VycmVudCdzIHpvbmUgYmVoYXZpb3IuIEFsbCBzcGVjaWZpY2F0aW9uIGVudHJpZXMgdGhhdCBhcmUgYG51bGxgCiAgICogaW5oZXJpdCB0aGUgYmVoYXZpb3IgZnJvbSB0aGUgcGFyZW50IHpvbmUgKGB0aGlzYCkuCiAgICoKICAgKiBUaGUgbmV3IHpvbmUgaW5oZXJpdHMgdGhlIHN0b3JlZCB2YWx1ZXMgKGFjY2Vzc2VkIHRocm91Z2ggW29wZXJhdG9yIFtdXSkKICAgKiBvZiB0aGlzIHpvbmUgYW5kIHVwZGF0ZXMgdGhlbSB3aXRoIHZhbHVlcyBmcm9tIFt6b25lVmFsdWVzXSwgd2hpY2ggZWl0aGVyCiAgICogYWRkcyBuZXcgdmFsdWVzIG9yIG92ZXJyaWRlcyBleGlzdGluZyBvbmVzLgogICAqCiAgICogTm90ZSB0aGF0IHRoZSBmb3JrIG9wZXJhdGlvbiBpcyBpbnRlcmNlcHRpYmxlLiBBIHpvbmUgY2FuIHRodXMgY2hhbmdlCiAgICogdGhlIHpvbmUgc3BlY2lmaWNhdGlvbiAob3Igem9uZSB2YWx1ZXMpLCBnaXZpbmcgdGhlIGZvcmtpbmcgem9uZSBmdWxsCiAgICogY29udHJvbCBvdmVyIHRoZSBjaGlsZCB6b25lLgogICAqLwogIFpvbmUgZm9yayh7Wm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXN9KTsKCiAgLyoqCiAgICogRXhlY3V0ZXMgW2FjdGlvbl0gaW4gdGhpcyB6b25lLgogICAqCiAgICogQnkgZGVmYXVsdCAoYXMgaW1wbGVtZW50ZWQgaW4gdGhlIFtyb290XSB6b25lKSwgcnVucyBbYWN0aW9uXQogICAqIHdpdGggW2N1cnJlbnRdIHNldCB0byB0aGlzIHpvbmUuCiAgICoKICAgKiBJZiBbYWN0aW9uXSB0aHJvd3MsIHRoZSBzeW5jaHJvbm91cyBleGNlcHRpb24gaXMgbm90IGNhdWdodCBieSB0aGUgem9uZSdzCiAgICogZXJyb3IgaGFuZGxlci4gVXNlIFtydW5HdWFyZGVkXSB0byBhY2hpZXZlIHRoYXQuCiAgICoKICAgKiBTaW5jZSB0aGUgcm9vdCB6b25lIGlzIHRoZSBvbmx5IHpvbmUgdGhhdCBjYW4gbW9kaWZ5IHRoZSB2YWx1ZSBvZgogICAqIFtjdXJyZW50XSwgY3VzdG9tIHpvbmVzIGludGVyY2VwdGluZyBydW4gc2hvdWxkIGFsd2F5cyBkZWxlZ2F0ZSB0byB0aGVpcgogICAqIHBhcmVudCB6b25lLiBUaGV5IG1heSB0YWtlIGFjdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2FsbC4KICAgKi8KICBSIHJ1bjxSPihSIGFjdGlvbigpKTsKCiAgLyoqCiAgICogRXhlY3V0ZXMgdGhlIGdpdmVuIFthY3Rpb25dIHdpdGggW2FyZ3VtZW50XSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBBcyBbcnVuXSBleGNlcHQgdGhhdCBbYWN0aW9uXSBpcyBjYWxsZWQgd2l0aCBvbmUgW2FyZ3VtZW50XSBpbnN0ZWFkIG9mCiAgICogbm9uZS4KICAgKi8KICBSIHJ1blVuYXJ5PFIsIFQ+KFIgYWN0aW9uKFQgYXJndW1lbnQpLCBUIGFyZ3VtZW50KTsKCiAgLyoqCiAgICogRXhlY3V0ZXMgdGhlIGdpdmVuIFthY3Rpb25dIHdpdGggW2FyZ3VtZW50MV0gYW5kIFthcmd1bWVudDJdIGluIHRoaXMKICAgKiB6b25lLgogICAqCiAgICogQXMgW3J1bl0gZXhjZXB0IHRoYXQgW2FjdGlvbl0gaXMgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIG5vbmUuCiAgICovCiAgUiBydW5CaW5hcnk8UiwgVDEsIFQyPigKICAgICAgUiBhY3Rpb24oVDEgYXJndW1lbnQxLCBUMiBhcmd1bWVudDIpLCBUMSBhcmd1bWVudDEsIFQyIGFyZ3VtZW50Mik7CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBbYWN0aW9uXSBpbiB0aGlzIHpvbmUgYW5kIGNhdGNoZXMgc3luY2hyb25vdXMKICAgKiBlcnJvcnMuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG86CiAgICogYGBgCiAgICogdHJ5IHsKICAgKiAgIHRoaXMucnVuKGFjdGlvbik7CiAgICogfSBjYXRjaCAoZSwgcykgewogICAqICAgdGhpcy5oYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAqIH0KICAgKiBgYGAKICAgKgogICAqIFNlZSBbcnVuXS4KICAgKi8KICB2b2lkIHJ1bkd1YXJkZWQodm9pZCBhY3Rpb24oKSk7CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBbYWN0aW9uXSB3aXRoIFthcmd1bWVudF0gaW4gdGhpcyB6b25lIGFuZAogICAqIGNhdGNoZXMgc3luY2hyb25vdXMgZXJyb3JzLgogICAqCiAgICogU2VlIFtydW5HdWFyZGVkXS4KICAgKi8KICB2b2lkIHJ1blVuYXJ5R3VhcmRlZDxUPih2b2lkIGFjdGlvbihUIGFyZ3VtZW50KSwgVCBhcmd1bWVudCk7CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBbYWN0aW9uXSB3aXRoIFthcmd1bWVudDFdIGFuZCBbYXJndW1lbnQyXSBpbiB0aGlzCiAgICogem9uZSBhbmQgY2F0Y2hlcyBzeW5jaHJvbm91cyBlcnJvcnMuCiAgICoKICAgKiBTZWUgW3J1bkd1YXJkZWRdLgogICAqLwogIHZvaWQgcnVuQmluYXJ5R3VhcmRlZDxUMSwgVDI+KAogICAgICB2b2lkIGFjdGlvbihUMSBhcmd1bWVudDEsIFQyIGFyZ3VtZW50MiksIFQxIGFyZ3VtZW50MSwgVDIgYXJndW1lbnQyKTsKCiAgLyoqCiAgICogUmVnaXN0ZXJzIHRoZSBnaXZlbiBjYWxsYmFjayBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBXaGVuIGltcGxlbWVudGluZyBhbiBhc3luY2hyb25vdXMgcHJpbWl0aXZlIHRoYXQgdXNlcyBjYWxsYmFja3MsIHRoZQogICAqIGNhbGxiYWNrIG11c3QgYmUgcmVnaXN0ZXJlZCB1c2luZyBbcmVnaXN0ZXJDYWxsYmFja10gYXQgdGhlIHBvaW50IHdoZXJlIHRoZQogICAqIHVzZXIgcHJvdmlkZXMgdGhlIGNhbGxiYWNrLiBUaGlzIGFsbG93cyB6b25lcyB0byByZWNvcmQgb3RoZXIgaW5mb3JtYXRpb24KICAgKiB0aGF0IHRoZXkgbmVlZCBhdCB0aGUgc2FtZSB0aW1lLCBwZXJoYXBzIGV2ZW4gd3JhcHBpbmcgdGhlIGNhbGxiYWNrLCBzbwogICAqIHRoYXQgdGhlIGNhbGxiYWNrIGlzIHByZXBhcmVkIHdoZW4gaXQgaXMgbGF0ZXIgcnVuIGluIHRoZSBzYW1lIHpvbmVzCiAgICogKHVzaW5nIFtydW5dKS4gRm9yIGV4YW1wbGUsIGEgem9uZSBtYXkgZGVjaWRlCiAgICogdG8gc3RvcmUgdGhlIHN0YWNrIHRyYWNlIChhdCB0aGUgdGltZSBvZiB0aGUgcmVnaXN0cmF0aW9uKSB3aXRoIHRoZQogICAqIGNhbGxiYWNrLgogICAqCiAgICogUmV0dXJucyB0aGUgY2FsbGJhY2sgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUgcHJvdmlkZWQKICAgKiBbY2FsbGJhY2tdLiBGcmVxdWVudGx5IHpvbmVzIHNpbXBseSByZXR1cm4gdGhlIG9yaWdpbmFsIGNhbGxiYWNrLgogICAqCiAgICogQ3VzdG9tIHpvbmVzIG1heSBpbnRlcmNlcHQgdGhpcyBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGluCiAgICogW1pvbmUucm9vdF0gcmV0dXJucyB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgdW5jaGFuZ2VkLgogICAqLwogIFpvbmVDYWxsYmFjazxSPiByZWdpc3RlckNhbGxiYWNrPFI+KFIgY2FsbGJhY2soKSk7CgogIC8qKgogICAqIFJlZ2lzdGVycyB0aGUgZ2l2ZW4gY2FsbGJhY2sgaW4gdGhpcyB6b25lLgogICAqCiAgICogU2ltaWxhciB0byBbcmVnaXN0ZXJDYWxsYmFja10gYnV0IHdpdGggYSB1bmFyeSBjYWxsYmFjay4KICAgKi8KICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiByZWdpc3RlclVuYXJ5Q2FsbGJhY2s8UiwgVD4oUiBjYWxsYmFjayhUIGFyZykpOwoKICAvKioKICAgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIGNhbGxiYWNrIGluIHRoaXMgem9uZS4KICAgKgogICAqIFNpbWlsYXIgdG8gW3JlZ2lzdGVyQ2FsbGJhY2tdIGJ1dCB3aXRoIGEgdW5hcnkgY2FsbGJhY2suCiAgICovCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBSIGNhbGxiYWNrKFQxIGFyZzEsIFQyIGFyZzIpKTsKCiAgLyoqCiAgICogIFJlZ2lzdGVycyB0aGUgcHJvdmlkZWQgW2NhbGxiYWNrXSBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbAogICAqICBleGVjdXRlIGluIHRoaXMgem9uZS4KICAgKgogICAqICBFcXVpdmFsZW50IHRvOgogICAqCiAgICogICAgICBab25lQ2FsbGJhY2sgcmVnaXN0ZXJlZCA9IHRoaXMucmVnaXN0ZXJDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgICByZXR1cm4gKCkgPT4gdGhpcy5ydW4ocmVnaXN0ZXJlZCk7CiAgICoKICAgKi8KICBab25lQ2FsbGJhY2s8Uj4gYmluZENhbGxiYWNrPFI+KFIgY2FsbGJhY2soKSk7CgogIC8qKgogICAqICBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIFtjYWxsYmFja10gYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwKICAgKiAgZXhlY3V0ZSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiAgRXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICAgWm9uZUNhbGxiYWNrIHJlZ2lzdGVyZWQgPSB0aGlzLnJlZ2lzdGVyVW5hcnlDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgICByZXR1cm4gKGFyZykgPT4gdGhpbi5ydW5VbmFyeShyZWdpc3RlcmVkLCBhcmcpOwogICAqLwogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IGJpbmRVbmFyeUNhbGxiYWNrPFIsIFQ+KFIgY2FsbGJhY2soVCBhcmd1bWVudCkpOwoKICAvKioKICAgKiAgUmVnaXN0ZXJzIHRoZSBwcm92aWRlZCBbY2FsbGJhY2tdIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsCiAgICogIGV4ZWN1dGUgaW4gdGhpcyB6b25lLgogICAqCiAgICogIEVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgIFpvbmVDYWxsYmFjayByZWdpc3RlcmVkID0gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaW4ucnVuQmluYXJ5KHJlZ2lzdGVyZWQsIGFyZzEsIGFyZzIpOwogICAqLwogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IGJpbmRCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBSIGNhbGxiYWNrKFQxIGFyZ3VtZW50MSwgVDIgYXJndW1lbnQyKSk7CgogIC8qKgogICAqIFJlZ2lzdGVycyB0aGUgcHJvdmlkZWQgW2NhbGxiYWNrXSBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbAogICAqIGV4ZWN1dGUgaW4gdGhpcyB6b25lLgogICAqCiAgICogV2hlbiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMsIGVycm9ycyBhcmUgY2F1Z2h0IGFuZCB0cmVhdGVkIGFzIHVuY2F1Z2h0CiAgICogZXJyb3JzLgogICAqCiAgICogRXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICBab25lQ2FsbGJhY2sgcmVnaXN0ZXJlZCA9IHRoaXMucmVnaXN0ZXJDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgIHJldHVybiAoKSA9PiB0aGlzLnJ1bkd1YXJkZWQocmVnaXN0ZXJlZCk7CiAgICoKICAgKi8KICB2b2lkIEZ1bmN0aW9uKCkgYmluZENhbGxiYWNrR3VhcmRlZCh2b2lkIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIFtjYWxsYmFja10gYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwKICAgKiBleGVjdXRlIGluIHRoaXMgem9uZS4KICAgKgogICAqIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzLCBlcnJvcnMgYXJlIGNhdWdodCBhbmQgdHJlYXRlZCBhcyB1bmNhdWdodAogICAqIGVycm9ycy4KICAgKgogICAqIEVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgWm9uZUNhbGxiYWNrIHJlZ2lzdGVyZWQgPSB0aGlzLnJlZ2lzdGVyVW5hcnlDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgIHJldHVybiAoYXJnKSA9PiB0aGlzLnJ1blVuYXJ5R3VhcmRlZChyZWdpc3RlcmVkLCBhcmcpOwogICAqLwogIHZvaWQgRnVuY3Rpb24oVCkgYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkPFQ+KHZvaWQgY2FsbGJhY2soVCBhcmd1bWVudCkpOwoKICAvKioKICAgKiAgUmVnaXN0ZXJzIHRoZSBwcm92aWRlZCBbY2FsbGJhY2tdIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsCiAgICogIGV4ZWN1dGUgaW4gdGhpcyB6b25lLgogICAqCiAgICogIEVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgIFpvbmVDYWxsYmFjayByZWdpc3RlcmVkID0gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaXMucnVuQmluYXJ5R3VhcmRlZChyZWdpc3RlcmVkLCBhcmcxLCBhcmcyKTsKICAgKi8KICB2b2lkIEZ1bmN0aW9uKFQxLCBUMikgYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZDxUMSwgVDI+KAogICAgICB2b2lkIGNhbGxiYWNrKFQxIGFyZ3VtZW50MSwgVDIgYXJndW1lbnQyKSk7CgogIC8qKgogICAqIEludGVyY2VwdHMgZXJyb3JzIHdoZW4gYWRkZWQgcHJvZ3JhbW1hdGljYWxseSB0byBhIGBGdXR1cmVgIG9yIGBTdHJlYW1gLgogICAqCiAgICogV2hlbiBjYWxsaW5nIFtDb21wbGV0ZXIuY29tcGxldGVFcnJvcl0sIFtTdHJlYW1Db250cm9sbGVyLmFkZEVycm9yXSwKICAgKiBvciBzb21lIFtGdXR1cmVdIGNvbnN0cnVjdG9ycywgdGhlIGN1cnJlbnQgem9uZSBpcyBhbGxvd2VkIHRvIGludGVyY2VwdAogICAqIGFuZCByZXBsYWNlIHRoZSBlcnJvci4KICAgKgogICAqIEZ1dHVyZSBjb25zdHJ1Y3RvcnMgaW52b2tlIHRoaXMgZnVuY3Rpb24gd2hlbiB0aGUgZXJyb3IgaXMgcmVjZWl2ZWQKICAgKiBkaXJlY3RseSwgZm9yIGV4YW1wbGUgd2l0aCBbRnV0dXJlLmVycm9yXSwgb3Igd2hlbiB0aGUgZXJyb3IgaXMgY2F1Z2h0CiAgICogc3luY2hyb25vdXNseSwgZm9yIGV4YW1wbGUgd2l0aCBbRnV0dXJlLnN5bmNdLgogICAqCiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYW4gZXJyb3IgaXMgb25seSBzZW50IHRocm91Z2ggW2Vycm9yQ2FsbGJhY2tdCiAgICogb25jZS4gTGlicmFyaWVzIHRoYXQgdXNlIGludGVybWVkaWF0ZSBjb250cm9sbGVycyBvciBjb21wbGV0ZXJzIG1pZ2h0CiAgICogZW5kIHVwIGludm9raW5nIFtlcnJvckNhbGxiYWNrXSBtdWx0aXBsZSB0aW1lcy4KICAgKgogICAqIFJldHVybnMgYG51bGxgIGlmIG5vIHJlcGxhY2VtZW50IGlzIGRlc2lyZWQuIE90aGVyd2lzZSByZXR1cm5zIGFuIGluc3RhbmNlCiAgICogb2YgW0FzeW5jRXJyb3JdIGhvbGRpbmcgdGhlIG5ldyBwYWlyIG9mIGVycm9yIGFuZCBzdGFjayB0cmFjZS4KICAgKgogICAqIEFsdGhvdWdoIG5vdCByZWNvbW1lbmRlZCwgdGhlIHJldHVybmVkIGluc3RhbmNlIG1heSBoYXZlIGl0cyBgZXJyb3JgIG1lbWJlcgogICAqIChbQXN5bmNFcnJvci5lcnJvcl0pIGJlIGVxdWFsIHRvIGBudWxsYCBpbiB3aGljaCBjYXNlIHRoZSBlcnJvciBzaG91bGQgYmUKICAgKiByZXBsYWNlZCBieSBhIFtOdWxsVGhyb3duRXJyb3JdLgogICAqCiAgICogQ3VzdG9tIHpvbmVzIG1heSBpbnRlcmNlcHQgdGhpcyBvcGVyYXRpb24uCiAgICoKICAgKiBJbXBsZW1lbnRhdGlvbnMgb2YgYSBuZXcgYXN5bmNocm9ub3VzIHByaW1pdGl2ZSB0aGF0IGNvbnZlcnRzIHN5bmNocm9ub3VzCiAgICogZXJyb3JzIHRvIGFzeW5jaHJvbm91cyBlcnJvcnMgcmFyZWx5IG5lZWQgdG8gaW52b2tlIFtlcnJvckNhbGxiYWNrXSwgc2luY2UKICAgKiBlcnJvcnMgYXJlIHVzdWFsbHkgcmVwb3J0ZWQgdGhyb3VnaCBmdXR1cmUgY29tcGxldGVycyBvciBzdHJlYW0KICAgKiBjb250cm9sbGVycy4KICAgKi8KICBBc3luY0Vycm9yIGVycm9yQ2FsbGJhY2soT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwoKICAvKioKICAgKiBSdW5zIFtjYWxsYmFja10gYXN5bmNocm9ub3VzbHkgaW4gdGhpcyB6b25lLgogICAqCiAgICogVGhlIGdsb2JhbCBgc2NoZWR1bGVNaWNyb3Rhc2tgIGRlbGVnYXRlcyB0byB0aGUgY3VycmVudCB6b25lJ3MKICAgKiBbc2NoZWR1bGVNaWNyb3Rhc2tdLiBUaGUgcm9vdCB6b25lJ3MgaW1wbGVtZW50YXRpb24gaW50ZXJhY3RzIHdpdGggdGhlCiAgICogdW5kZXJseWluZyBzeXN0ZW0gdG8gc2NoZWR1bGUgdGhlIGdpdmVuIGNhbGxiYWNrIGFzIGEgbWljcm90YXNrLgogICAqCiAgICogQ3VzdG9tIHpvbmVzIG1heSBpbnRlcmNlcHQgdGhpcyBvcGVyYXRpb24gKGZvciBleGFtcGxlIHRvIHdyYXAgdGhlIGdpdmVuCiAgICogW2NhbGxiYWNrXSkuCiAgICovCiAgdm9pZCBzY2hlZHVsZU1pY3JvdGFzayh2b2lkIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgVGltZXIgd2hlcmUgdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGluIHRoaXMgem9uZS4KICAgKi8KICBUaW1lciBjcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHBlcmlvZGljIFRpbWVyIHdoZXJlIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBpbiB0aGlzIHpvbmUuCiAgICovCiAgVGltZXIgY3JlYXRlUGVyaW9kaWNUaW1lcihEdXJhdGlvbiBwZXJpb2QsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKTsKCiAgLyoqCiAgICogUHJpbnRzIHRoZSBnaXZlbiBbbGluZV0uCiAgICoKICAgKiBUaGUgZ2xvYmFsIGBwcmludGAgZnVuY3Rpb24gZGVsZWdhdGVzIHRvIHRoZSBjdXJyZW50IHpvbmUncyBbcHJpbnRdCiAgICogZnVuY3Rpb24gd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gaW50ZXJjZXB0IHByaW50aW5nLgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGAKICAgKiBpbXBvcnQgJ2RhcnQ6YXN5bmMnOwogICAqCiAgICogbWFpbigpIHsKICAgKiAgIHJ1blpvbmVkKCgpIHsKICAgKiAgICAgLy8gRW5kcyB1cCBwcmludGluZzogIkludGVyY2VwdGVkOiBpbiB6b25lIi4KICAgKiAgICAgcHJpbnQoImluIHpvbmUiKTsKICAgKiAgIH0sIHpvbmVTcGVjaWZpY2F0aW9uOiBuZXcgWm9uZVNwZWNpZmljYXRpb24oCiAgICogICAgICAgcHJpbnQ6IChab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgU3RyaW5nIGxpbmUpIHsKICAgKiAgICAgcGFyZW50LnByaW50KHpvbmUsICJJbnRlcmNlcHRlZDogJGxpbmUiKTsKICAgKiAgIH0pKTsKICAgKiB9CiAgICogYGBgCiAgICovCiAgdm9pZCBwcmludChTdHJpbmcgbGluZSk7CgogIC8qKgogICAqIENhbGwgdG8gZW50ZXIgdGhlIFpvbmUuCiAgICoKICAgKiBUaGUgcHJldmlvdXMgY3VycmVudCB6b25lIGlzIHJldHVybmVkLgogICAqLwogIHN0YXRpYyBab25lIF9lbnRlcihab25lIHpvbmUpIHsKICAgIGFzc2VydCh6b25lICE9IG51bGwpOwogICAgYXNzZXJ0KCFpZGVudGljYWwoem9uZSwgX2N1cnJlbnQpKTsKICAgIFpvbmUgcHJldmlvdXMgPSBfY3VycmVudDsKICAgIF9jdXJyZW50ID0gem9uZTsKICAgIHJldHVybiBwcmV2aW91czsKICB9CgogIC8qKgogICAqIENhbGwgdG8gbGVhdmUgdGhlIFpvbmUuCiAgICoKICAgKiBUaGUgcHJldmlvdXMgWm9uZSBtdXN0IGJlIHByb3ZpZGVkIGFzIGBwcmV2aW91c2AuCiAgICovCiAgc3RhdGljIHZvaWQgX2xlYXZlKFpvbmUgcHJldmlvdXMpIHsKICAgIGFzc2VydChwcmV2aW91cyAhPSBudWxsKTsKICAgIFpvbmUuX2N1cnJlbnQgPSBwcmV2aW91czsKICB9CgogIC8qKgogICAqIFJldHJpZXZlcyB0aGUgem9uZS12YWx1ZSBhc3NvY2lhdGVkIHdpdGggW2tleV0uCiAgICoKICAgKiBJZiB0aGlzIHpvbmUgZG9lcyBub3QgY29udGFpbiB0aGUgdmFsdWUgbG9va3MgdXAgdGhlIHNhbWUga2V5IGluIHRoZQogICAqIHBhcmVudCB6b25lLiBJZiB0aGUgW2tleV0gaXMgbm90IGZvdW5kIHJldHVybnMgYG51bGxgLgogICAqCiAgICogQW55IG9iamVjdCBjYW4gYmUgdXNlZCBhcyBrZXksIGFzIGxvbmcgYXMgaXQgaGFzIGNvbXBhdGlibGUgYG9wZXJhdG9yID09YAogICAqIGFuZCBgaGFzaENvZGVgIGltcGxlbWVudGF0aW9ucy4KICAgKiBCeSBjb250cm9sbGluZyBhY2Nlc3MgdG8gdGhlIGtleSwgYSB6b25lIGNhbiBncmFudCBvciBkZW55IGFjY2VzcyB0byB0aGUKICAgKiB6b25lIHZhbHVlLgogICAqLwogIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpOwp9Cgpab25lRGVsZWdhdGUgX3BhcmVudERlbGVnYXRlKF9ab25lIHpvbmUpIHsKICBpZiAoem9uZS5wYXJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIHpvbmUucGFyZW50Ll9kZWxlZ2F0ZTsKfQoKY2xhc3MgX1pvbmVEZWxlZ2F0ZSBpbXBsZW1lbnRzIFpvbmVEZWxlZ2F0ZSB7CiAgZmluYWwgX1pvbmUgX2RlbGVnYXRpb25UYXJnZXQ7CgogIF9ab25lRGVsZWdhdGUodGhpcy5fZGVsZWdhdGlvblRhcmdldCk7CgogIHZvaWQgaGFuZGxlVW5jYXVnaHRFcnJvcihab25lIHpvbmUsIGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9oYW5kbGVVbmNhdWdodEVycm9yOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgSGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoCiAgICAgICAgaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIFIgcnVuPFI+KFpvbmUgem9uZSwgUiBmKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9ydW47CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBSdW5IYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmKTsKICB9CgogIFIgcnVuVW5hcnk8UiwgVD4oWm9uZSB6b25lLCBSIGYoVCBhcmcpLCBUIGFyZykgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3J1blVuYXJ5OwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgUnVuVW5hcnlIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmLCBhcmcpOwogIH0KCiAgUiBydW5CaW5hcnk8UiwgVDEsIFQyPihab25lIHpvbmUsIFIgZihUMSBhcmcxLCBUMiBhcmcyKSwgVDEgYXJnMSwgVDIgYXJnMikgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3J1bkJpbmFyeTsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFJ1bkJpbmFyeUhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGYsIGFyZzEsIGFyZzIpOwogIH0KCiAgWm9uZUNhbGxiYWNrPFI+IHJlZ2lzdGVyQ2FsbGJhY2s8Uj4oWm9uZSB6b25lLCBSIGYoKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3JlZ2lzdGVyQ2FsbGJhY2s7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBSZWdpc3RlckNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZik7CiAgfQoKICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiByZWdpc3RlclVuYXJ5Q2FsbGJhY2s8UiwgVD4oWm9uZSB6b25lLCBSIGYoVCBhcmcpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZik7CiAgfQoKICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiByZWdpc3RlckJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICAgIFpvbmUgem9uZSwgUiBmKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmKTsKICB9CgogIEFzeW5jRXJyb3IgZXJyb3JDYWxsYmFjayhab25lIHpvbmUsIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fZXJyb3JDYWxsYmFjazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIGlmIChpZGVudGljYWwoaW1wbFpvbmUsIF9yb290Wm9uZSkpIHJldHVybiBudWxsOwogICAgRXJyb3JDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoCiAgICAgICAgaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgc2NoZWR1bGVNaWNyb3Rhc2soWm9uZSB6b25lLCBmKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9zY2hlZHVsZU1pY3JvdGFzazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmKTsKICB9CgogIFRpbWVyIGNyZWF0ZVRpbWVyKFpvbmUgem9uZSwgRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fY3JlYXRlVGltZXI7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBDcmVhdGVUaW1lckhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGR1cmF0aW9uLCBmKTsKICB9CgogIFRpbWVyIGNyZWF0ZVBlcmlvZGljVGltZXIoWm9uZSB6b25lLCBEdXJhdGlvbiBwZXJpb2QsIHZvaWQgZihUaW1lciB0aW1lcikpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9jcmVhdGVQZXJpb2RpY1RpbWVyOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIHBlcmlvZCwgZik7CiAgfQoKICB2b2lkIHByaW50KFpvbmUgem9uZSwgU3RyaW5nIGxpbmUpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9wcmludDsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFByaW50SGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBsaW5lKTsKICB9CgogIFpvbmUgZm9yayhab25lIHpvbmUsIFpvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fZm9yazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIEZvcmtIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKAogICAgICAgIGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBzcGVjaWZpY2F0aW9uLCB6b25lVmFsdWVzKTsKICB9Cn0KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBab25lIGltcGxlbWVudGF0aW9ucy4KICovCmFic3RyYWN0IGNsYXNzIF9ab25lIGltcGxlbWVudHMgWm9uZSB7CiAgY29uc3QgX1pvbmUoKTsKCiAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZSB0eXBlcyBvZiB0aGUgYF9ab25lRnVuY3Rpb25gcyBzaG91bGQgaGF2ZSBhIHR5cGUgZm9yCiAgLy8gYWxsIGZpZWxkcy4KICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1bjsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1blVuYXJ5OwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcnVuQmluYXJ5OwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcmVnaXN0ZXJDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyVW5hcnlDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxFcnJvckNhbGxiYWNrSGFuZGxlcj4gZ2V0IF9lcnJvckNhbGxiYWNrOwogIF9ab25lRnVuY3Rpb248U2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyPiBnZXQgX3NjaGVkdWxlTWljcm90YXNrOwogIF9ab25lRnVuY3Rpb248Q3JlYXRlVGltZXJIYW5kbGVyPiBnZXQgX2NyZWF0ZVRpbWVyOwogIF9ab25lRnVuY3Rpb248Q3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXI+IGdldCBfY3JlYXRlUGVyaW9kaWNUaW1lcjsKICBfWm9uZUZ1bmN0aW9uPFByaW50SGFuZGxlcj4gZ2V0IF9wcmludDsKICBfWm9uZUZ1bmN0aW9uPEZvcmtIYW5kbGVyPiBnZXQgX2Zvcms7CiAgX1pvbmVGdW5jdGlvbjxIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlcj4gZ2V0IF9oYW5kbGVVbmNhdWdodEVycm9yOwogIF9ab25lIGdldCBwYXJlbnQ7CiAgWm9uZURlbGVnYXRlIGdldCBfZGVsZWdhdGU7CiAgTWFwIGdldCBfbWFwOwoKICBib29sIGluU2FtZUVycm9yWm9uZShab25lIG90aGVyWm9uZSkgewogICAgcmV0dXJuIGlkZW50aWNhbCh0aGlzLCBvdGhlclpvbmUpIHx8CiAgICAgICAgaWRlbnRpY2FsKGVycm9yWm9uZSwgb3RoZXJab25lLmVycm9yWm9uZSk7CiAgfQp9CgpjbGFzcyBfQ3VzdG9tWm9uZSBleHRlbmRzIF9ab25lIHsKICAvLyBUaGUgYWN0dWFsIHpvbmUgYW5kIGltcGxlbWVudGF0aW9uIG9mIGVhY2ggb2YgdGhlc2UKICAvLyBpbmhlcml0YWJsZSB6b25lIGZ1bmN0aW9ucy4KICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHR5cGVzIG9mIHRoZSBgX1pvbmVGdW5jdGlvbmBzIHNob3VsZCBoYXZlIGEgdHlwZSBmb3IKICAvLyBhbGwgZmllbGRzLgogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IF9ydW47CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gX3J1blVuYXJ5OwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IF9ydW5CaW5hcnk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gX3JlZ2lzdGVyQ2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gX3JlZ2lzdGVyVW5hcnlDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBfcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEVycm9yQ2FsbGJhY2tIYW5kbGVyPiBfZXJyb3JDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPFNjaGVkdWxlTWljcm90YXNrSGFuZGxlcj4gX3NjaGVkdWxlTWljcm90YXNrOwogIF9ab25lRnVuY3Rpb248Q3JlYXRlVGltZXJIYW5kbGVyPiBfY3JlYXRlVGltZXI7CiAgX1pvbmVGdW5jdGlvbjxDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlcj4gX2NyZWF0ZVBlcmlvZGljVGltZXI7CiAgX1pvbmVGdW5jdGlvbjxQcmludEhhbmRsZXI+IF9wcmludDsKICBfWm9uZUZ1bmN0aW9uPEZvcmtIYW5kbGVyPiBfZm9yazsKICBfWm9uZUZ1bmN0aW9uPEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyPiBfaGFuZGxlVW5jYXVnaHRFcnJvcjsKCiAgLy8gQSBjYWNoZWQgZGVsZWdhdGUgdG8gdGhpcyB6b25lLgogIFpvbmVEZWxlZ2F0ZSBfZGVsZWdhdGVDYWNoZTsKCiAgLy8vIFRoZSBwYXJlbnQgem9uZS4KICBmaW5hbCBfWm9uZSBwYXJlbnQ7CgogIC8vLyBUaGUgem9uZSdzIHNjb3BlZCB2YWx1ZSBkZWNsYXJhdGlvbiBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYWx3YXlzIGEgW0hhc2hNYXBdLgogIGZpbmFsIE1hcCBfbWFwOwoKICBab25lRGVsZWdhdGUgZ2V0IF9kZWxlZ2F0ZSB7CiAgICBpZiAoX2RlbGVnYXRlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIF9kZWxlZ2F0ZUNhY2hlOwogICAgX2RlbGVnYXRlQ2FjaGUgPSBuZXcgX1pvbmVEZWxlZ2F0ZSh0aGlzKTsKICAgIHJldHVybiBfZGVsZWdhdGVDYWNoZTsKICB9CgogIF9DdXN0b21ab25lKHRoaXMucGFyZW50LCBab25lU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uLCB0aGlzLl9tYXApIHsKICAgIC8vIFRoZSByb290IHpvbmUgd2lsbCBoYXZlIGltcGxlbWVudGF0aW9ucyBvZiBhbGwgcGFydHMgb2YgdGhlCiAgICAvLyBzcGVjaWZpY2F0aW9uLCBzbyBpdCB3aWxsIG5ldmVyIHRyeSB0byBhY2Nlc3MgdGhlIChudWxsKSBwYXJlbnQuCiAgICAvLyBBbGwgb3RoZXIgem9uZXMgaGF2ZSBhIG5vbi1udWxsIHBhcmVudC4KICAgIF9ydW4gPSAoc3BlY2lmaWNhdGlvbi5ydW4gIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPih0aGlzLCBzcGVjaWZpY2F0aW9uLnJ1bikKICAgICAgICA6IHBhcmVudC5fcnVuOwogICAgX3J1blVuYXJ5ID0gKHNwZWNpZmljYXRpb24ucnVuVW5hcnkgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPih0aGlzLCBzcGVjaWZpY2F0aW9uLnJ1blVuYXJ5KQogICAgICAgIDogcGFyZW50Ll9ydW5VbmFyeTsKICAgIF9ydW5CaW5hcnkgPSAoc3BlY2lmaWNhdGlvbi5ydW5CaW5hcnkgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPih0aGlzLCBzcGVjaWZpY2F0aW9uLnJ1bkJpbmFyeSkKICAgICAgICA6IHBhcmVudC5fcnVuQmluYXJ5OwogICAgX3JlZ2lzdGVyQ2FsbGJhY2sgPSAoc3BlY2lmaWNhdGlvbi5yZWdpc3RlckNhbGxiYWNrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4odGhpcywgc3BlY2lmaWNhdGlvbi5yZWdpc3RlckNhbGxiYWNrKQogICAgICAgIDogcGFyZW50Ll9yZWdpc3RlckNhbGxiYWNrOwogICAgX3JlZ2lzdGVyVW5hcnlDYWxsYmFjayA9IChzcGVjaWZpY2F0aW9uLnJlZ2lzdGVyVW5hcnlDYWxsYmFjayAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KHRoaXMsIHNwZWNpZmljYXRpb24ucmVnaXN0ZXJVbmFyeUNhbGxiYWNrKQogICAgICAgIDogcGFyZW50Ll9yZWdpc3RlclVuYXJ5Q2FsbGJhY2s7CiAgICBfcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayA9IChzcGVjaWZpY2F0aW9uLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2sgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPigKICAgICAgICAgICAgdGhpcywgc3BlY2lmaWNhdGlvbi5yZWdpc3RlckJpbmFyeUNhbGxiYWNrKQogICAgICAgIDogcGFyZW50Ll9yZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogICAgX2Vycm9yQ2FsbGJhY2sgPSAoc3BlY2lmaWNhdGlvbi5lcnJvckNhbGxiYWNrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxFcnJvckNhbGxiYWNrSGFuZGxlcj4oCiAgICAgICAgICAgIHRoaXMsIHNwZWNpZmljYXRpb24uZXJyb3JDYWxsYmFjaykKICAgICAgICA6IHBhcmVudC5fZXJyb3JDYWxsYmFjazsKICAgIF9zY2hlZHVsZU1pY3JvdGFzayA9IChzcGVjaWZpY2F0aW9uLnNjaGVkdWxlTWljcm90YXNrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXI+KAogICAgICAgICAgICB0aGlzLCBzcGVjaWZpY2F0aW9uLnNjaGVkdWxlTWljcm90YXNrKQogICAgICAgIDogcGFyZW50Ll9zY2hlZHVsZU1pY3JvdGFzazsKICAgIF9jcmVhdGVUaW1lciA9IChzcGVjaWZpY2F0aW9uLmNyZWF0ZVRpbWVyICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxDcmVhdGVUaW1lckhhbmRsZXI+KHRoaXMsIHNwZWNpZmljYXRpb24uY3JlYXRlVGltZXIpCiAgICAgICAgOiBwYXJlbnQuX2NyZWF0ZVRpbWVyOwogICAgX2NyZWF0ZVBlcmlvZGljVGltZXIgPSAoc3BlY2lmaWNhdGlvbi5jcmVhdGVQZXJpb2RpY1RpbWVyICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlcj4oCiAgICAgICAgICAgIHRoaXMsIHNwZWNpZmljYXRpb24uY3JlYXRlUGVyaW9kaWNUaW1lcikKICAgICAgICA6IHBhcmVudC5fY3JlYXRlUGVyaW9kaWNUaW1lcjsKICAgIF9wcmludCA9IChzcGVjaWZpY2F0aW9uLnByaW50ICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxQcmludEhhbmRsZXI+KHRoaXMsIHNwZWNpZmljYXRpb24ucHJpbnQpCiAgICAgICAgOiBwYXJlbnQuX3ByaW50OwogICAgX2ZvcmsgPSAoc3BlY2lmaWNhdGlvbi5mb3JrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxGb3JrSGFuZGxlcj4odGhpcywgc3BlY2lmaWNhdGlvbi5mb3JrKQogICAgICAgIDogcGFyZW50Ll9mb3JrOwogICAgX2hhbmRsZVVuY2F1Z2h0RXJyb3IgPSAoc3BlY2lmaWNhdGlvbi5oYW5kbGVVbmNhdWdodEVycm9yICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlcj4oCiAgICAgICAgICAgIHRoaXMsIHNwZWNpZmljYXRpb24uaGFuZGxlVW5jYXVnaHRFcnJvcikKICAgICAgICA6IHBhcmVudC5faGFuZGxlVW5jYXVnaHRFcnJvcjsKICB9CgogIC8qKgogICAqIFRoZSBjbG9zZXN0IGVycm9yLWhhbmRsaW5nIHpvbmUuCiAgICoKICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBgdGhpc2AgaGFzIGFuIGVycm9yLWhhbmRsZXIuIE90aGVyd2lzZSByZXR1cm5zIHRoZQogICAqIHBhcmVudCdzIGVycm9yLXpvbmUuCiAgICovCiAgWm9uZSBnZXQgZXJyb3Jab25lID0+IF9oYW5kbGVVbmNhdWdodEVycm9yLnpvbmU7CgogIHZvaWQgcnVuR3VhcmRlZCh2b2lkIGYoKSkgewogICAgdHJ5IHsKICAgICAgcnVuKGYpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBydW5VbmFyeUd1YXJkZWQ8VD4odm9pZCBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIHRyeSB7CiAgICAgIHJ1blVuYXJ5KGYsIGFyZyk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICB2b2lkIHJ1bkJpbmFyeUd1YXJkZWQ8VDEsIFQyPih2b2lkIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpIHsKICAgIHRyeSB7CiAgICAgIHJ1bkJpbmFyeShmLCBhcmcxLCBhcmcyKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIFpvbmVDYWxsYmFjazxSPiBiaW5kQ2FsbGJhY2s8Uj4oUiBmKCkpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJDYWxsYmFjayhmKTsKICAgIHJldHVybiAoKSA9PiB0aGlzLnJ1bihyZWdpc3RlcmVkKTsKICB9CgogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IGJpbmRVbmFyeUNhbGxiYWNrPFIsIFQ+KFIgZihUIGFyZykpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJVbmFyeUNhbGxiYWNrKGYpOwogICAgcmV0dXJuIChhcmcpID0+IHRoaXMucnVuVW5hcnkocmVnaXN0ZXJlZCwgYXJnKTsKICB9CgogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IGJpbmRCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBSIGYoVDEgYXJnMSwgVDIgYXJnMikpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhmKTsKICAgIHJldHVybiAoYXJnMSwgYXJnMikgPT4gdGhpcy5ydW5CaW5hcnkocmVnaXN0ZXJlZCwgYXJnMSwgYXJnMik7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKCkgYmluZENhbGxiYWNrR3VhcmRlZCh2b2lkIGYoKSkgewogICAgdmFyIHJlZ2lzdGVyZWQgPSByZWdpc3RlckNhbGxiYWNrKGYpOwogICAgcmV0dXJuICgpID0+IHRoaXMucnVuR3VhcmRlZChyZWdpc3RlcmVkKTsKICB9CgogIHZvaWQgRnVuY3Rpb24oVCkgYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkPFQ+KHZvaWQgZihUIGFyZykpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJVbmFyeUNhbGxiYWNrKGYpOwogICAgcmV0dXJuIChhcmcpID0+IHRoaXMucnVuVW5hcnlHdWFyZGVkKHJlZ2lzdGVyZWQsIGFyZyk7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKFQxLCBUMikgYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZDxUMSwgVDI+KAogICAgICB2b2lkIGYoVDEgYXJnMSwgVDIgYXJnMikpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhmKTsKICAgIHJldHVybiAoYXJnMSwgYXJnMikgPT4gdGhpcy5ydW5CaW5hcnlHdWFyZGVkKHJlZ2lzdGVyZWQsIGFyZzEsIGFyZzIpOwogIH0KCiAgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgdmFyIHJlc3VsdCA9IF9tYXBba2V5XTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCB8fCBfbWFwLmNvbnRhaW5zS2V5KGtleSkpIHJldHVybiByZXN1bHQ7CiAgICAvLyBJZiB3ZSBhcmUgbm90IHRoZSByb290IHpvbmUsIGxvb2sgdXAgaW4gdGhlIHBhcmVudCB6b25lLgogICAgaWYgKHBhcmVudCAhPSBudWxsKSB7CiAgICAgIC8vIFdlIGRvIG5vdCBvcHRpbWl6ZSBmb3IgcmVwZWF0ZWRseSBsb29raW5nIHVwIGEga2V5IHdoaWNoIGlzbid0CiAgICAgIC8vIHRoZXJlLiBUaGF0IHdvdWxkIHJlcXVpcmUgc3RvcmluZyB0aGUga2V5IGFuZCBrZWVwaW5nIGl0IGFsaXZlLgogICAgICAvLyBDb3B5aW5nIHRoZSBrZXkvdmFsdWUgZnJvbSB0aGUgcGFyZW50IGRvZXMgbm90IGtlZXAgYW55IG5ldyB2YWx1ZXMKICAgICAgLy8gYWxpdmUuCiAgICAgIHZhciB2YWx1ZSA9IHBhcmVudFtrZXldOwogICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgIF9tYXBba2V5XSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIGFzc2VydCh0aGlzID09IF9yb290Wm9uZSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIE1ldGhvZHMgdGhhdCBjYW4gYmUgY3VzdG9taXplZCBieSB0aGUgem9uZSBzcGVjaWZpY2F0aW9uLgoKICB2b2lkIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5faGFuZGxlVW5jYXVnaHRFcnJvcjsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKAogICAgICAgIGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBab25lIGZvcmsoe1pvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzfSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fZm9yazsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIEZvcmtIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKAogICAgICAgIGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBzcGVjaWZpY2F0aW9uLCB6b25lVmFsdWVzKTsKICB9CgogIFIgcnVuPFI+KFIgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9ydW47CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBSdW5IYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBmKTsKICB9CgogIFIgcnVuVW5hcnk8UiwgVD4oUiBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3J1blVuYXJ5OwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUnVuVW5hcnlIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBmLCBhcmcpOwogIH0KCiAgUiBydW5CaW5hcnk8UiwgVDEsIFQyPihSIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3J1bkJpbmFyeTsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFJ1bkJpbmFyeUhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGYsIGFyZzEsIGFyZzIpOwogIH0KCiAgWm9uZUNhbGxiYWNrPFI+IHJlZ2lzdGVyQ2FsbGJhY2s8Uj4oUiBjYWxsYmFjaygpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9yZWdpc3RlckNhbGxiYWNrOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGNhbGxiYWNrKTsKICB9CgogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IHJlZ2lzdGVyVW5hcnlDYWxsYmFjazxSLCBUPihSIGNhbGxiYWNrKFQgYXJnKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgY2FsbGJhY2spOwogIH0KCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBSIGNhbGxiYWNrKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9yZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGNhbGxiYWNrKTsKICB9CgogIEFzeW5jRXJyb3IgZXJyb3JDYWxsYmFjayhPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fZXJyb3JDYWxsYmFjazsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIGZpbmFsIFpvbmUgaW1wbGVtZW50YXRpb25ab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIGlmIChpZGVudGljYWwoaW1wbGVtZW50YXRpb25ab25lLCBfcm9vdFpvbmUpKSByZXR1cm4gbnVsbDsKICAgIGZpbmFsIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvblpvbmUpOwogICAgRXJyb3JDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb25ab25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBzY2hlZHVsZU1pY3JvdGFzayh2b2lkIGYoKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fc2NoZWR1bGVNaWNyb3Rhc2s7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGYpOwogIH0KCiAgVGltZXIgY3JlYXRlVGltZXIoRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9jcmVhdGVUaW1lcjsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIENyZWF0ZVRpbWVySGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZHVyYXRpb24sIGYpOwogIH0KCiAgVGltZXIgY3JlYXRlUGVyaW9kaWNUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKFRpbWVyIHRpbWVyKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fY3JlYXRlUGVyaW9kaWNUaW1lcjsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBkdXJhdGlvbiwgZik7CiAgfQoKICB2b2lkIHByaW50KFN0cmluZyBsaW5lKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9wcmludDsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFByaW50SGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgbGluZSk7CiAgfQp9Cgp2b2lkIF9yb290SGFuZGxlVW5jYXVnaHRFcnJvcigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgX3NjaGVkdWxlUHJpb3JpdHlBc3luY0NhbGxiYWNrKCgpIHsKICAgIGVycm9yID8/PSBuZXcgTnVsbFRocm93bkVycm9yKCk7CiAgICBpZiAoc3RhY2tUcmFjZSA9PSBudWxsKSB0aHJvdyBlcnJvcjsKICAgIF9yZXRocm93KGVycm9yLCBzdGFja1RyYWNlKTsKICB9KTsKfQoKZXh0ZXJuYWwgdm9pZCBfcmV0aHJvdyhPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CgpSIF9yb290UnVuPFI+KFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoKSkgewogIGlmIChab25lLl9jdXJyZW50ID09IHpvbmUpIHJldHVybiBmKCk7CgogIFpvbmUgb2xkID0gWm9uZS5fZW50ZXIoem9uZSk7CiAgdHJ5IHsKICAgIHJldHVybiBmKCk7CiAgfSBmaW5hbGx5IHsKICAgIFpvbmUuX2xlYXZlKG9sZCk7CiAgfQp9CgpSIF9yb290UnVuVW5hcnk8UiwgVD4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBmKFQgYXJnKSwgVCBhcmcpIHsKICBpZiAoWm9uZS5fY3VycmVudCA9PSB6b25lKSByZXR1cm4gZihhcmcpOwoKICBab25lIG9sZCA9IFpvbmUuX2VudGVyKHpvbmUpOwogIHRyeSB7CiAgICByZXR1cm4gZihhcmcpOwogIH0gZmluYWxseSB7CiAgICBab25lLl9sZWF2ZShvbGQpOwogIH0KfQoKUiBfcm9vdFJ1bkJpbmFyeTxSLCBUMSwgVDI+KFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLAogICAgUiBmKFQxIGFyZzEsIFQyIGFyZzIpLCBUMSBhcmcxLCBUMiBhcmcyKSB7CiAgaWYgKFpvbmUuX2N1cnJlbnQgPT0gem9uZSkgcmV0dXJuIGYoYXJnMSwgYXJnMik7CgogIFpvbmUgb2xkID0gWm9uZS5fZW50ZXIoem9uZSk7CiAgdHJ5IHsKICAgIHJldHVybiBmKGFyZzEsIGFyZzIpOwogIH0gZmluYWxseSB7CiAgICBab25lLl9sZWF2ZShvbGQpOwogIH0KfQoKWm9uZUNhbGxiYWNrPFI+IF9yb290UmVnaXN0ZXJDYWxsYmFjazxSPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoKSkgewogIHJldHVybiBmOwp9Cgpab25lVW5hcnlDYWxsYmFjazxSLCBUPiBfcm9vdFJlZ2lzdGVyVW5hcnlDYWxsYmFjazxSLCBUPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoVCBhcmcpKSB7CiAgcmV0dXJuIGY7Cn0KClpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IF9yb290UmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgZihUMSBhcmcxLCBUMiBhcmcyKSkgewogIHJldHVybiBmOwp9CgpBc3luY0Vycm9yIF9yb290RXJyb3JDYWxsYmFjayhab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgICAgICBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgPT4KICAgIG51bGw7Cgp2b2lkIF9yb290U2NoZWR1bGVNaWNyb3Rhc2soCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgdm9pZCBmKCkpIHsKICBpZiAoIWlkZW50aWNhbChfcm9vdFpvbmUsIHpvbmUpKSB7CiAgICBib29sIGhhc0Vycm9ySGFuZGxlciA9ICFfcm9vdFpvbmUuaW5TYW1lRXJyb3Jab25lKHpvbmUpOwogICAgaWYgKGhhc0Vycm9ySGFuZGxlcikgewogICAgICBmID0gem9uZS5iaW5kQ2FsbGJhY2tHdWFyZGVkKGYpOwogICAgfSBlbHNlIHsKICAgICAgZiA9IHpvbmUuYmluZENhbGxiYWNrKGYpOwogICAgfQogICAgLy8gVXNlIHJvb3Qgem9uZSBhcyBldmVudCB6b25lIGlmIHRoZSBmdW5jdGlvbiBpcyBhbHJlYWR5IGJvdW5kLgogICAgem9uZSA9IF9yb290Wm9uZTsKICB9CiAgX3NjaGVkdWxlQXN5bmNDYWxsYmFjayhmKTsKfQoKVGltZXIgX3Jvb3RDcmVhdGVUaW1lcihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKCkpIHsKICBpZiAoIWlkZW50aWNhbChfcm9vdFpvbmUsIHpvbmUpKSB7CiAgICBjYWxsYmFjayA9IHpvbmUuYmluZENhbGxiYWNrKGNhbGxiYWNrKTsKICB9CiAgcmV0dXJuIFRpbWVyLl9jcmVhdGVUaW1lcihkdXJhdGlvbiwgY2FsbGJhY2spOwp9CgpUaW1lciBfcm9vdENyZWF0ZVBlcmlvZGljVGltZXIoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsCiAgICBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lcikpIHsKICBpZiAoIWlkZW50aWNhbChfcm9vdFpvbmUsIHpvbmUpKSB7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHJldHVybiB0eXBlIHNob3VsZCBiZSAndm9pZCcuCiAgICBjYWxsYmFjayA9IHpvbmUuYmluZFVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgVGltZXI+KGNhbGxiYWNrKTsKICB9CiAgcmV0dXJuIFRpbWVyLl9jcmVhdGVQZXJpb2RpY1RpbWVyKGR1cmF0aW9uLCBjYWxsYmFjayk7Cn0KCnZvaWQgX3Jvb3RQcmludChab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgU3RyaW5nIGxpbmUpIHsKICBwcmludFRvQ29uc29sZShsaW5lKTsKfQoKdm9pZCBfcHJpbnRUb1pvbmUoU3RyaW5nIGxpbmUpIHsKICBab25lLmN1cnJlbnQucHJpbnQobGluZSk7Cn0KClpvbmUgX3Jvb3RGb3JrKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLAogICAgWm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXMpIHsKICAvLyBUT0RPKGZsb2l0c2NoKTogaXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBnZXQgcmlkIG9mIHRoaXMgaGFjay4KICAvLyBDaGFuZ2UgdGhlIHN0YXRpYyB6b25lT3JEaXJlY3RQcmludCBmdW5jdGlvbiB0byBnbyB0aHJvdWdoIHpvbmVzCiAgLy8gZnJvbSBub3cgb24uCiAgcHJpbnRUb1pvbmUgPSBfcHJpbnRUb1pvbmU7CgogIGlmIChzcGVjaWZpY2F0aW9uID09IG51bGwpIHsKICAgIHNwZWNpZmljYXRpb24gPSBjb25zdCBab25lU3BlY2lmaWNhdGlvbigpOwogIH0gZWxzZSBpZiAoc3BlY2lmaWNhdGlvbiBpcyEgX1pvbmVTcGVjaWZpY2F0aW9uKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiWm9uZVNwZWNpZmljYXRpb25zIG11c3QgYmUgaW5zdGFudGlhdGVkIgogICAgICAgICIgd2l0aCB0aGUgcHJvdmlkZWQgY29uc3RydWN0b3IuIik7CiAgfQogIE1hcCB2YWx1ZU1hcDsKICBpZiAoem9uZVZhbHVlcyA9PSBudWxsKSB7CiAgICBpZiAoem9uZSBpcyBfWm9uZSkgewogICAgICB2YWx1ZU1hcCA9IHpvbmUuX21hcDsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlTWFwID0gbmV3IEhhc2hNYXAoKTsKICAgIH0KICB9IGVsc2UgewogICAgdmFsdWVNYXAgPSBuZXcgSGFzaE1hcC5mcm9tKHpvbmVWYWx1ZXMpOwogIH0KICByZXR1cm4gbmV3IF9DdXN0b21ab25lKHpvbmUsIHNwZWNpZmljYXRpb24sIHZhbHVlTWFwKTsKfQoKY2xhc3MgX1Jvb3Rab25lIGV4dGVuZHMgX1pvbmUgewogIGNvbnN0IF9Sb290Wm9uZSgpOwoKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1biA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPihfcm9vdFpvbmUsIF9yb290UnVuKTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1blVuYXJ5ID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KF9yb290Wm9uZSwgX3Jvb3RSdW5VbmFyeSk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9ydW5CaW5hcnkgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4oX3Jvb3Rab25lLCBfcm9vdFJ1bkJpbmFyeSk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9yZWdpc3RlckNhbGxiYWNrID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KF9yb290Wm9uZSwgX3Jvb3RSZWdpc3RlckNhbGxiYWNrKTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyVW5hcnlDYWxsYmFjayA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPihfcm9vdFpvbmUsIF9yb290UmVnaXN0ZXJVbmFyeUNhbGxiYWNrKTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2sgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4oX3Jvb3Rab25lLCBfcm9vdFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2spOwogIF9ab25lRnVuY3Rpb248RXJyb3JDYWxsYmFja0hhbmRsZXI+IGdldCBfZXJyb3JDYWxsYmFjayA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEVycm9yQ2FsbGJhY2tIYW5kbGVyPihfcm9vdFpvbmUsIF9yb290RXJyb3JDYWxsYmFjayk7CiAgX1pvbmVGdW5jdGlvbjxTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXI+IGdldCBfc2NoZWR1bGVNaWNyb3Rhc2sgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXI+KAogICAgICAgICAgX3Jvb3Rab25lLCBfcm9vdFNjaGVkdWxlTWljcm90YXNrKTsKICBfWm9uZUZ1bmN0aW9uPENyZWF0ZVRpbWVySGFuZGxlcj4gZ2V0IF9jcmVhdGVUaW1lciA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPENyZWF0ZVRpbWVySGFuZGxlcj4oX3Jvb3Rab25lLCBfcm9vdENyZWF0ZVRpbWVyKTsKICBfWm9uZUZ1bmN0aW9uPENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyPiBnZXQgX2NyZWF0ZVBlcmlvZGljVGltZXIgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlcj4oCiAgICAgICAgICBfcm9vdFpvbmUsIF9yb290Q3JlYXRlUGVyaW9kaWNUaW1lcik7CiAgX1pvbmVGdW5jdGlvbjxQcmludEhhbmRsZXI+IGdldCBfcHJpbnQgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxQcmludEhhbmRsZXI+KF9yb290Wm9uZSwgX3Jvb3RQcmludCk7CiAgX1pvbmVGdW5jdGlvbjxGb3JrSGFuZGxlcj4gZ2V0IF9mb3JrID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248Rm9ya0hhbmRsZXI+KF9yb290Wm9uZSwgX3Jvb3RGb3JrKTsKICBfWm9uZUZ1bmN0aW9uPEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyPiBnZXQgX2hhbmRsZVVuY2F1Z2h0RXJyb3IgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlcj4oCiAgICAgICAgICBfcm9vdFpvbmUsIF9yb290SGFuZGxlVW5jYXVnaHRFcnJvcik7CgogIC8vIFRoZSBwYXJlbnQgem9uZS4KICBfWm9uZSBnZXQgcGFyZW50ID0+IG51bGw7CgogIC8vLyBUaGUgem9uZSdzIHNjb3BlZCB2YWx1ZSBkZWNsYXJhdGlvbiBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYWx3YXlzIGEgW0hhc2hNYXBdLgogIE1hcCBnZXQgX21hcCA9PiBfcm9vdE1hcDsKCiAgc3RhdGljIGZpbmFsIF9yb290TWFwID0gbmV3IEhhc2hNYXAoKTsKCiAgc3RhdGljIFpvbmVEZWxlZ2F0ZSBfcm9vdERlbGVnYXRlOwoKICBab25lRGVsZWdhdGUgZ2V0IF9kZWxlZ2F0ZSB7CiAgICBpZiAoX3Jvb3REZWxlZ2F0ZSAhPSBudWxsKSByZXR1cm4gX3Jvb3REZWxlZ2F0ZTsKICAgIHJldHVybiBfcm9vdERlbGVnYXRlID0gbmV3IF9ab25lRGVsZWdhdGUodGhpcyk7CiAgfQoKICAvKioKICAgKiBUaGUgY2xvc2VzdCBlcnJvci1oYW5kbGluZyB6b25lLgogICAqCiAgICogUmV0dXJucyBgdGhpc2AgaWYgYHRoaXNgIGhhcyBhbiBlcnJvci1oYW5kbGVyLiBPdGhlcndpc2UgcmV0dXJucyB0aGUKICAgKiBwYXJlbnQncyBlcnJvci16b25lLgogICAqLwogIFpvbmUgZ2V0IGVycm9yWm9uZSA9PiB0aGlzOwoKICAvLyBab25lIGludGVyZmFjZS4KCiAgdm9pZCBydW5HdWFyZGVkKHZvaWQgZigpKSB7CiAgICB0cnkgewogICAgICBpZiAoaWRlbnRpY2FsKF9yb290Wm9uZSwgWm9uZS5fY3VycmVudCkpIHsKICAgICAgICBmKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9yb290UnVuKG51bGwsIG51bGwsIHRoaXMsIGYpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBydW5VbmFyeUd1YXJkZWQ8VD4odm9pZCBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIHRyeSB7CiAgICAgIGlmIChpZGVudGljYWwoX3Jvb3Rab25lLCBab25lLl9jdXJyZW50KSkgewogICAgICAgIGYoYXJnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX3Jvb3RSdW5VbmFyeShudWxsLCBudWxsLCB0aGlzLCBmLCBhcmcpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBydW5CaW5hcnlHdWFyZGVkPFQxLCBUMj4odm9pZCBmKFQxIGFyZzEsIFQyIGFyZzIpLCBUMSBhcmcxLCBUMiBhcmcyKSB7CiAgICB0cnkgewogICAgICBpZiAoaWRlbnRpY2FsKF9yb290Wm9uZSwgWm9uZS5fY3VycmVudCkpIHsKICAgICAgICBmKGFyZzEsIGFyZzIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfcm9vdFJ1bkJpbmFyeShudWxsLCBudWxsLCB0aGlzLCBmLCBhcmcxLCBhcmcyKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIFpvbmVDYWxsYmFjazxSPiBiaW5kQ2FsbGJhY2s8Uj4oUiBmKCkpIHsKICAgIHJldHVybiAoKSA9PiB0aGlzLnJ1bjxSPihmKTsKICB9CgogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IGJpbmRVbmFyeUNhbGxiYWNrPFIsIFQ+KFIgZihUIGFyZykpIHsKICAgIHJldHVybiAoYXJnKSA9PiB0aGlzLnJ1blVuYXJ5PFIsIFQ+KGYsIGFyZyk7CiAgfQoKICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiBiaW5kQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgUiBmKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaXMucnVuQmluYXJ5PFIsIFQxLCBUMj4oZiwgYXJnMSwgYXJnMik7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKCkgYmluZENhbGxiYWNrR3VhcmRlZCh2b2lkIGYoKSkgewogICAgcmV0dXJuICgpID0+IHRoaXMucnVuR3VhcmRlZChmKTsKICB9CgogIHZvaWQgRnVuY3Rpb24oVCkgYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkPFQ+KHZvaWQgZihUIGFyZykpIHsKICAgIHJldHVybiAoYXJnKSA9PiB0aGlzLnJ1blVuYXJ5R3VhcmRlZChmLCBhcmcpOwogIH0KCiAgdm9pZCBGdW5jdGlvbihUMSwgVDIpIGJpbmRCaW5hcnlDYWxsYmFja0d1YXJkZWQ8VDEsIFQyPigKICAgICAgdm9pZCBmKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaXMucnVuQmluYXJ5R3VhcmRlZChmLCBhcmcxLCBhcmcyKTsKICB9CgogIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpID0+IG51bGw7CgogIC8vIE1ldGhvZHMgdGhhdCBjYW4gYmUgY3VzdG9taXplZCBieSB0aGUgem9uZSBzcGVjaWZpY2F0aW9uLgoKICB2b2lkIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgX3Jvb3RIYW5kbGVVbmNhdWdodEVycm9yKG51bGwsIG51bGwsIHRoaXMsIGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIFpvbmUgZm9yayh7Wm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXN9KSB7CiAgICByZXR1cm4gX3Jvb3RGb3JrKG51bGwsIG51bGwsIHRoaXMsIHNwZWNpZmljYXRpb24sIHpvbmVWYWx1ZXMpOwogIH0KCiAgUiBydW48Uj4oUiBmKCkpIHsKICAgIGlmIChpZGVudGljYWwoWm9uZS5fY3VycmVudCwgX3Jvb3Rab25lKSkgcmV0dXJuIGYoKTsKICAgIHJldHVybiBfcm9vdFJ1bihudWxsLCBudWxsLCB0aGlzLCBmKTsKICB9CgogIFIgcnVuVW5hcnk8UiwgVD4oUiBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIGlmIChpZGVudGljYWwoWm9uZS5fY3VycmVudCwgX3Jvb3Rab25lKSkgcmV0dXJuIGYoYXJnKTsKICAgIHJldHVybiBfcm9vdFJ1blVuYXJ5KG51bGwsIG51bGwsIHRoaXMsIGYsIGFyZyk7CiAgfQoKICBSIHJ1bkJpbmFyeTxSLCBUMSwgVDI+KFIgZihUMSBhcmcxLCBUMiBhcmcyKSwgVDEgYXJnMSwgVDIgYXJnMikgewogICAgaWYgKGlkZW50aWNhbChab25lLl9jdXJyZW50LCBfcm9vdFpvbmUpKSByZXR1cm4gZihhcmcxLCBhcmcyKTsKICAgIHJldHVybiBfcm9vdFJ1bkJpbmFyeShudWxsLCBudWxsLCB0aGlzLCBmLCBhcmcxLCBhcmcyKTsKICB9CgogIFpvbmVDYWxsYmFjazxSPiByZWdpc3RlckNhbGxiYWNrPFI+KFIgZigpKSA9PiBmOwoKICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiByZWdpc3RlclVuYXJ5Q2FsbGJhY2s8UiwgVD4oUiBmKFQgYXJnKSkgPT4gZjsKCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICAgICAgUiBmKFQxIGFyZzEsIFQyIGFyZzIpKSA9PgogICAgICBmOwoKICBBc3luY0Vycm9yIGVycm9yQ2FsbGJhY2soT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpID0+IG51bGw7CgogIHZvaWQgc2NoZWR1bGVNaWNyb3Rhc2sodm9pZCBmKCkpIHsKICAgIF9yb290U2NoZWR1bGVNaWNyb3Rhc2sobnVsbCwgbnVsbCwgdGhpcywgZik7CiAgfQoKICBUaW1lciBjcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKCkpIHsKICAgIHJldHVybiBUaW1lci5fY3JlYXRlVGltZXIoZHVyYXRpb24sIGYpOwogIH0KCiAgVGltZXIgY3JlYXRlUGVyaW9kaWNUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKFRpbWVyIHRpbWVyKSkgewogICAgcmV0dXJuIFRpbWVyLl9jcmVhdGVQZXJpb2RpY1RpbWVyKGR1cmF0aW9uLCBmKTsKICB9CgogIHZvaWQgcHJpbnQoU3RyaW5nIGxpbmUpIHsKICAgIHByaW50VG9Db25zb2xlKGxpbmUpOwogIH0KfQoKY29uc3QgX3Jvb3Rab25lID0gY29uc3QgX1Jvb3Rab25lKCk7CgovKioKICogUnVucyBbYm9keV0gaW4gaXRzIG93biB6b25lLgogKgogKiBDcmVhdGVzIGEgbmV3IHpvbmUgdXNpbmcgW1pvbmUuZm9ya10gYmFzZWQgb24gW3pvbmVTcGVjaWZpY2F0aW9uXSBhbmQKICogW3pvbmVWYWx1ZXNdLCB0aGVuIHJ1bnMgW2JvZHldIGluIHRoYXQgem9uZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgogKgogKiBJZiBbb25FcnJvcl0gaXMgcHJvdmlkZWQsIGl0IG11c3QgaGF2ZSBvbmUgb2YgdGhlIHR5cGVzCiAqICogYHZvaWQgRnVuY3Rpb24oT2JqZWN0KWAKICogKiBgdm9pZCBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpYAogKiBhbmQgdGhlIFtvbkVycm9yXSBoYW5kbGVyIGlzIHVzZWQgKmJvdGgqIHRvIGhhbmRsZSBhc3luY2hyb25vdXMgZXJyb3JzCiAqIGJ5IG92ZXJyaWRpbmcgW1pvbmVTcGVjaWZpY2F0aW9uLmhhbmRsZVVuY2F1Z2h0RXJyb3JdIGluIFt6b25lU3BlY2lmaWNhdGlvbl0sCiAqIGlmIGFueSwgKmFuZCogdG8gaGFuZGxlIGVycm9ycyB0aHJvd24gc3luY2hyb25vdXNseSBieSB0aGUgY2FsbCB0byBbYm9keV0uCiAqCiAqIElmIGFuIGVycm9yIG9jY3VycyBzeW5jaHJvbm91c2x5IGluIFtib2R5XSwKICogdGhlbiB0aHJvd2luZyBpbiB0aGUgW29uRXJyb3JdIGhhbmRsZXIKICogbWFrZXMgdGhlIGNhbGwgdG8gYHJ1blpvbmVgIHRocm93IHRoYXQgZXJyb3IsCiAqIGFuZCBvdGhlcndpc2UgdGhlIGNhbGwgdG8gYHJ1blpvbmVkYCByZXR1cm5zIGBudWxsYC4KICoKICogSWYgdGhlIHpvbmUgc3BlY2lmaWNhdGlvbiBoYXMgYSBgaGFuZGxlVW5jYXVnaHRFcnJvcmAgdmFsdWUgb3IgdGhlIFtvbkVycm9yXQogKiBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZSB6b25lIGJlY29tZXMgYW4gZXJyb3Item9uZS4KICoKICogRXJyb3JzIHdpbGwgbmV2ZXIgY3Jvc3MgZXJyb3Item9uZSBib3VuZGFyaWVzIGJ5IHRoZW1zZWx2ZXMuCiAqIEVycm9ycyB0aGF0IHRyeSB0byBjcm9zcyBlcnJvci16b25lIGJvdW5kYXJpZXMgYXJlIGNvbnNpZGVyZWQgdW5jYXVnaHQgaW4KICogdGhlaXIgb3JpZ2luYXRpbmcgZXJyb3Igem9uZS4KICoKICogICAgIHZhciBmdXR1cmUgPSBuZXcgRnV0dXJlLnZhbHVlKDQ5OSk7CiAqICAgICBydW5ab25lZCgoKSB7CiAqICAgICAgIHZhciBmdXR1cmUyID0gZnV0dXJlLnRoZW4oKF8pIHsgdGhyb3cgImVycm9yIGluIGZpcnN0IGVycm9yLXpvbmUiOyB9KTsKICogICAgICAgcnVuWm9uZWQoKCkgewogKiAgICAgICAgIHZhciBmdXR1cmUzID0gZnV0dXJlMi5jYXRjaEVycm9yKChlKSB7IHByaW50KCJOZXZlciByZWFjaGVkISIpOyB9KTsKICogICAgICAgfSwgb25FcnJvcjogKGUpIHsgcHJpbnQoInVudXNlZCBlcnJvciBoYW5kbGVyIik7IH0pOwogKiAgICAgfSwgb25FcnJvcjogKGUpIHsgcHJpbnQoImNhdGNoZXMgZXJyb3Igb2YgZmlyc3QgZXJyb3Item9uZS4iKTsgfSk7CiAqCiAqIEV4YW1wbGU6CiAqCiAqICAgICBydW5ab25lZCgoKSB7CiAqICAgICAgIG5ldyBGdXR1cmUoKCkgeyB0aHJvdyAiYXN5bmNocm9ub3VzIGVycm9yIjsgfSk7CiAqICAgICB9LCBvbkVycm9yOiBwcmludCk7ICAvLyBXaWxsIHByaW50ICJhc3luY2hyb25vdXMgZXJyb3IiLgogKgogKiBJdCBpcyBwb3NzaWJsZSB0byBtYW51YWxseSBwYXNzIGFuIGVycm9yIGZyb20gb25lIGVycm9yIHpvbmUgdG8gYW5vdGhlcgogKiBieSByZS10aHJvd2luZyBpdCBpbiB0aGUgbmV3IHpvbmUuIElmIFtvbkVycm9yXSB0aHJvd3MsIHRoYXQgZXJyb3Igd2lsbAogKiBvY2N1ciBpbiB0aGUgb3JpZ2luYWwgem9uZSB3aGVyZSBbcnVuWm9uZWRdIHdhcyBjYWxsZWQuCiAqLwpSIHJ1blpvbmVkPFI+KFIgYm9keSgpLAogICAge01hcCB6b25lVmFsdWVzLCBab25lU3BlY2lmaWNhdGlvbiB6b25lU3BlY2lmaWNhdGlvbiwgRnVuY3Rpb24gb25FcnJvcn0pIHsKICBpZiAob25FcnJvciA9PSBudWxsKSB7CiAgICByZXR1cm4gX3J1blpvbmVkPFI+KGJvZHksIHpvbmVWYWx1ZXMsIHpvbmVTcGVjaWZpY2F0aW9uKTsKICB9CiAgdm9pZCBGdW5jdGlvbihPYmplY3QpIHVuYXJ5T25FcnJvcjsKICB2b2lkIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkgYmluYXJ5T25FcnJvcjsKICBpZiAob25FcnJvciBpcyB2b2lkIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkpIHsKICAgIGJpbmFyeU9uRXJyb3IgPSBvbkVycm9yOwogIH0gZWxzZSBpZiAob25FcnJvciBpcyB2b2lkIEZ1bmN0aW9uKE9iamVjdCkpIHsKICAgIHVuYXJ5T25FcnJvciA9IG9uRXJyb3I7CiAgfSBlbHNlIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJvbkVycm9yIGNhbGxiYWNrIG11c3QgdGFrZSBlaXRoZXIgYW4gT2JqZWN0ICIKICAgICAgICAiKHRoZSBlcnJvciksIG9yIGJvdGggYW4gT2JqZWN0ICh0aGUgZXJyb3IpIGFuZCBhIFN0YWNrVHJhY2UuIik7CiAgfQogIEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlciA9IChab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsCiAgICAgIFpvbmUgem9uZSwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgdHJ5IHsKICAgICAgaWYgKGJpbmFyeU9uRXJyb3IgIT0gbnVsbCkgewogICAgICAgIHNlbGYucGFyZW50LnJ1bkJpbmFyeShiaW5hcnlPbkVycm9yLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KHVuYXJ5T25FcnJvciAhPSBudWxsKTsKICAgICAgICBzZWxmLnBhcmVudC5ydW5VbmFyeSh1bmFyeU9uRXJyb3IsIGVycm9yKTsKICAgICAgfQogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBpZiAoaWRlbnRpY2FsKGUsIGVycm9yKSkgewogICAgICAgIHBhcmVudC5oYW5kbGVVbmNhdWdodEVycm9yKHpvbmUsIGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwYXJlbnQuaGFuZGxlVW5jYXVnaHRFcnJvcih6b25lLCBlLCBzKTsKICAgICAgfQogICAgfQogIH07CiAgaWYgKHpvbmVTcGVjaWZpY2F0aW9uID09IG51bGwpIHsKICAgIHpvbmVTcGVjaWZpY2F0aW9uID0KICAgICAgICBuZXcgWm9uZVNwZWNpZmljYXRpb24oaGFuZGxlVW5jYXVnaHRFcnJvcjogZXJyb3JIYW5kbGVyKTsKICB9IGVsc2UgewogICAgem9uZVNwZWNpZmljYXRpb24gPSBuZXcgWm9uZVNwZWNpZmljYXRpb24uZnJvbSh6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgICBoYW5kbGVVbmNhdWdodEVycm9yOiBlcnJvckhhbmRsZXIpOwogIH0KICB0cnkgewogICAgcmV0dXJuIF9ydW5ab25lZDxSPihib2R5LCB6b25lVmFsdWVzLCB6b25lU3BlY2lmaWNhdGlvbik7CiAgfSBjYXRjaCAoZSwgc3RhY2tUcmFjZSkgewogICAgaWYgKGJpbmFyeU9uRXJyb3IgIT0gbnVsbCkgewogICAgICBiaW5hcnlPbkVycm9yKGUsIHN0YWNrVHJhY2UpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KHVuYXJ5T25FcnJvciAhPSBudWxsKTsKICAgICAgdW5hcnlPbkVycm9yKGUpOwogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQoKLy8vIFJ1bnMgW2JvZHldIGluIGEgbmV3IHpvbmUgYmFzZWQgb24gW3pvbmVWYWx1ZXNdIGFuZCBbc3BlY2lmaWNhdGlvbl0uClIgX3J1blpvbmVkPFI+KFIgYm9keSgpLCBNYXAgem9uZVZhbHVlcywgWm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbikgPT4KICAgIFpvbmUuY3VycmVudAogICAgICAgIC5mb3JrKHNwZWNpZmljYXRpb246IHNwZWNpZmljYXRpb24sIHpvbmVWYWx1ZXM6IHpvbmVWYWx1ZXMpCiAgICAgICAgLnJ1bjxSPihib2R5KTsKhe4ATk48ARQBHSo7AT5KJEAsTFFCP0BPRSZD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b25jYXRlbmF0ZXMgYWxsIHBhdGNoIGZpbGVzIGludG8gYSBzaW5nbGUgcGF0Y2ggZmlsZS4gVGhpcwovLy8gZmlsZSBpcyB0aGUgZmlyc3QgcGF0Y2ggaW4gImRhcnQ6YXN5bmMiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cyB1c2VkCi8vLyBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYSBzaGFyZWQKLy8vIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgVk1MaWJyYXJ5SG9va3MsIHBhdGNoOwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImRlZmVycmVkX2xvYWRfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInNjaGVkdWxlX21pY3JvdGFza19wYXRjaC5kYXJ0IjsKLy8gcGFydCAidGltZXJfcGF0Y2guZGFydCI7CgovLyBFcXVpdmFsZW50IG9mIGNhbGxpbmcgRkFUQUwgZnJvbSBDKysgY29kZS4KX2ZhdGFsKG1zZykgbmF0aXZlICJEYXJ0QXN5bmNfZmF0YWwiOwoKY2xhc3MgX0FzeW5jQXdhaXRDb21wbGV0ZXI8VD4gaW1wbGVtZW50cyBDb21wbGV0ZXI8VD4gewogIGZpbmFsIF9mdXR1cmUgPSBuZXcgX0Z1dHVyZTxUPigpOwogIGJvb2wgaXNTeW5jOwoKICBfQXN5bmNBd2FpdENvbXBsZXRlcigpIDogaXNTeW5jID0gZmFsc2U7CgogIHZvaWQgY29tcGxldGUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSkgewogICAgaWYgKCFpc1N5bmMgfHwgdmFsdWUgaXMgRnV0dXJlPFQ+KSB7CiAgICAgIF9mdXR1cmUuX2FzeW5jQ29tcGxldGUodmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgX2Z1dHVyZS5fY29tcGxldGVXaXRoVmFsdWUodmFsdWUpOwogICAgfQogIH0KCiAgdm9pZCBjb21wbGV0ZUVycm9yKGUsIFtzdF0pIHsKICAgIGlmIChpc1N5bmMpIHsKICAgICAgX2Z1dHVyZS5fY29tcGxldGVFcnJvcihlLCBzdCk7CiAgICB9IGVsc2UgewogICAgICBfZnV0dXJlLl9hc3luY0NvbXBsZXRlRXJyb3IoZSwgc3QpOwogICAgfQogIH0KCiAgdm9pZCBzdGFydChmKSB7CiAgICBmKCk7CiAgICBpc1N5bmMgPSB0cnVlOwogIH0KCiAgRnV0dXJlPFQ+IGdldCBmdXR1cmUgPT4gX2Z1dHVyZTsKICBib29sIGdldCBpc0NvbXBsZXRlZCA9PiAhX2Z1dHVyZS5fbWF5Q29tcGxldGU7Cn0KCi8vIFdlIG5lZWQgdG8gcGFzcyB0aGUgdmFsdWUgYXMgZmlyc3QgYXJndW1lbnQgYW5kIGxlYXZlIHRoZSBzZWNvbmQgYW5kIHRoaXJkCi8vIGFyZ3VtZW50cyBlbXB0eSAodXNlZCBmb3IgZXJyb3IgaGFuZGxpbmcpLgovLyBTZWUgdm0vYXN0X3RyYW5zZm9ybWVyLmNjIGZvciB1c2FnZS4KRnVuY3Rpb24gX2FzeW5jVGhlbldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7CiAgLy8gQW55IGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCBhcyBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2sgbXVzdCBiZSByZWdpc3RlcmVkCiAgLy8gaW4gdGhlIGN1cnJlbnQgWm9uZS4gTm9ybWFsbHksIHRoaXMgaXMgZG9uZSBieSB0aGUgZnV0dXJlIHdoZW4gYQogIC8vIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQgKGZvciBleGFtcGxlIHdpdGggYC50aGVuYCBvciBgLmNhdGNoRXJyb3JgKS4gSW4gb3VyCiAgLy8gY2FzZSB3ZSB3YW50IHRvIHJldXNlIHRoZSBzYW1lIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzIGFuZCB0aGVyZWZvcmUgYXZvaWQKICAvLyB0aGUgbXVsdGlwbGUgcmVnaXN0cmF0aW9ucy4gRm9yIG91ciBpbnRlcm5hbCBmdXR1cmVzIChgX0Z1dHVyZWApIHdlIGNhbgogIC8vIHVzZSB0aGUgc2hvcnRjdXQtdmVyc2lvbiBvZiBgLnRoZW5gLCBhbmQgc2tpcCB0aGUgcmVnaXN0cmF0aW9uLiBIb3dldmVyLAogIC8vIHRoYXQgbWVhbnMgdGhhdCB0aGUgY29udGludWF0aW9uIG11c3QgYmUgcmVnaXN0ZXJlZCBieSB1cy4KICAvLwogIC8vIEZ1cnRoZXJtb3JlLCB3ZSBrbm93IHRoYXQgdGhlIHJvb3Qtem9uZSBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGFuZAogIC8vIHdlIGNhbiB0aGVyZWZvcmUgc2tpcCB0aGUgcmVnaXN0cmF0aW9uIGNhbGwgZm9yIGl0LgogIC8vCiAgLy8gTm90ZSwgdGhhdCB0aGUgY29udGludWF0aW9uIGFjY2VwdHMgdXAgdG8gdGhyZWUgYXJndW1lbnRzLiBJZiB0aGUgY3VycmVudAogIC8vIHpvbmUgaXMgdGhlIHJvb3Qgem9uZSwgd2UgZG9uJ3Qgd3JhcCB0aGUgY29udGludWF0aW9uLCBhbmQgYSBiYWQKICAvLyBgRnV0dXJlYCBpbXBsZW1lbnRhdGlvbiBjb3VsZCBwb3RlbnRpYWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggdGhlCiAgLy8gd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4KICBpZiAoWm9uZS5jdXJyZW50ID09IFpvbmUucm9vdCkgcmV0dXJuIGNvbnRpbnVhdGlvbjsKICByZXR1cm4gWm9uZS5jdXJyZW50LnJlZ2lzdGVyVW5hcnlDYWxsYmFjaygoeCkgPT4gY29udGludWF0aW9uKHgsIG51bGwsIG51bGwpKTsKfQoKLy8gV2UgbmVlZCB0byBwYXNzIHRoZSBleGNlcHRpb24gYW5kIHN0YWNrIHRyYWNlIG9iamVjdHMgYXMgc2Vjb25kIGFuZCB0aGlyZAovLyBwYXJhbWV0ZXIgdG8gdGhlIGNvbnRpbnVhdGlvbi4gIFNlZSB2bS9hc3RfdHJhbnNmb3JtZXIuY2MgZm9yIHVzYWdlLgpGdW5jdGlvbiBfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7CiAgLy8gU2VlIGNvbW1lbnRzIG9mIGBfYXN5bmNUaGVuV3JhcHBlckhlbHBlcmAuCiAgdmFyIGVycm9yQ2FsbGJhY2sgPSAoZSwgcykgPT4gY29udGludWF0aW9uKG51bGwsIGUsIHMpOwogIGlmIChab25lLmN1cnJlbnQgPT0gWm9uZS5yb290KSByZXR1cm4gZXJyb3JDYWxsYmFjazsKICByZXR1cm4gWm9uZS5jdXJyZW50LnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2soZXJyb3JDYWxsYmFjayk7Cn0KCi8vLyBSZWdpc3RlcnMgdGhlIFt0aGVuQ2FsbGJhY2tdIGFuZCBbZXJyb3JDYWxsYmFja10gb24gdGhlIGdpdmVuIFtvYmplY3RdLgovLy8KLy8vIElmIFtvYmplY3RdIGlzIG5vdCBhIGZ1dHVyZSwgdGhlbiBpdCBpcyB3cmFwcGVkIGludG8gb25lLgovLy8KLy8vIFJldHVybnMgdGhlIHJlc3VsdCBvZiByZWdpc3RlcmluZyB3aXRoIGAudGhlbmAuCkZ1dHVyZSBfYXdhaXRIZWxwZXIoCiAgICB2YXIgb2JqZWN0LCBGdW5jdGlvbiB0aGVuQ2FsbGJhY2ssIEZ1bmN0aW9uIGVycm9yQ2FsbGJhY2ssIHZhciBhd2FpdGVyKSB7CiAgaWYgKG9iamVjdCBpcyEgRnV0dXJlKSB7CiAgICBvYmplY3QgPSBuZXcgX0Z1dHVyZSgpLi5fc2V0VmFsdWUob2JqZWN0KTsKICB9IGVsc2UgaWYgKG9iamVjdCBpcyEgX0Z1dHVyZSkgewogICAgcmV0dXJuIG9iamVjdC50aGVuKHRoZW5DYWxsYmFjaywgb25FcnJvcjogZXJyb3JDYWxsYmFjayk7CiAgfQogIC8vIGBvYmplY3RgIGlzIGEgYF9GdXR1cmVgLgogIC8vCiAgLy8gU2luY2UgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBpbiB0aGUgY3VycmVudCB6b25lIChzZWUKICAvLyBbX2FzeW5jVGhlbldyYXBwZXJIZWxwZXJdIGFuZCBbX2FzeW5jRXJyb3JXcmFwcGVySGVscGVyXSksIHdlIGNhbiBhdm9pZAogIC8vIGFub3RoZXIgcmVnaXN0cmF0aW9uIGFuZCBkaXJlY3RseSBpbnZva2UgdGhlIG5vLXpvbmUtcmVnaXN0cmF0aW9uIGAudGhlbmAuCiAgLy8KICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIGZvciBvdXIgaW50ZXJuYWwgZnV0dXJlcyAodGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YKICAvLyBhbGwgZnV0dXJlcyB0aGF0IGFyZSBjb25zdHJ1Y3RlZCBieSB0aGUgYGRhcnQ6YXN5bmNgIGxpYnJhcnkpLgogIG9iamVjdC5fYXdhaXRlciA9IGF3YWl0ZXI7CiAgcmV0dXJuIG9iamVjdC5fdGhlbkF3YWl0KHRoZW5DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Cn0KCi8vIENhbGxlZCBhcyBwYXJ0IG9mIHRoZSAnYXdhaXQgZm9yICguLi4pJyBjb25zdHJ1Y3QuIFJlZ2lzdGVycyB0aGUKLy8gYXdhaXRlciBvbiB0aGUgc3RyZWFtLgp2b2lkIF9hc3luY1N0YXJMaXN0ZW5IZWxwZXIodmFyIG9iamVjdCwgdmFyIGF3YWl0ZXIpIHsKICBpZiAob2JqZWN0IGlzISBfU3RyZWFtSW1wbCkgewogICAgcmV0dXJuOwogIH0KICAvLyBgb2JqZWN0YCBpcyBhIGBfU3RyZWFtSW1wbGAuCiAgb2JqZWN0Ll9hd2FpdGVyID0gYXdhaXRlcjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX2FzeW5jU3Rhck1vdmVOZXh0SGVscGVyKHZhciBzdHJlYW0pIHsKICBpZiAoc3RyZWFtIGlzISBfU3RyZWFtSW1wbCkgewogICAgcmV0dXJuOwogIH0KICAvLyBzdHJlYW0gaXMgYSBfU3RyZWFtSW1wbC4KICBpZiAoc3RyZWFtLl9nZW5lcmF0b3IgPT0gbnVsbCkgewogICAgLy8gTm8gZ2VuZXJhdG9yIHJlZ2lzdGVyZWQsIHRoaXMgaXNuJ3QgYW4gYXN5bmMqIFN0cmVhbS4KICAgIHJldHVybjsKICB9CiAgX21vdmVOZXh0RGVidWdnZXJTdGVwQ2hlY2soc3RyZWFtLl9nZW5lcmF0b3IpOwp9CgovLyBfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlciBpcyB1c2VkIGJ5IHRoZSBjb21waWxlciB0byBpbXBsZW1lbnQKLy8gYXN5bmMqIGdlbmVyYXRvciBmdW5jdGlvbnMuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXI8VD4gewogIFN0cmVhbUNvbnRyb2xsZXI8VD4gY29udHJvbGxlcjsKICBGdW5jdGlvbiBhc3luY1N0YXJCb2R5OwogIGJvb2wgaXNBZGRpbmcgPSBmYWxzZTsKICBib29sIG9uTGlzdGVuUmVjZWl2ZWQgPSBmYWxzZTsKICBib29sIGlzU2NoZWR1bGVkID0gZmFsc2U7CiAgYm9vbCBpc1N1c3BlbmRlZEF0WWllbGQgPSBmYWxzZTsKICBfRnV0dXJlIGNhbmNlbGxhdGlvbkZ1dHVyZSA9IG51bGw7CgogIFN0cmVhbTxUPiBnZXQgc3RyZWFtIHsKICAgIGZpbmFsIFN0cmVhbTxUPiBsb2NhbCA9IGNvbnRyb2xsZXIuc3RyZWFtOwogICAgaWYgKGxvY2FsIGlzIF9TdHJlYW1JbXBsPFQ+KSB7CiAgICAgIGxvY2FsLl9nZW5lcmF0b3IgPSBhc3luY1N0YXJCb2R5OwogICAgfQogICAgcmV0dXJuIGxvY2FsOwogIH0KCiAgdm9pZCBydW5Cb2R5KCkgewogICAgaXNTY2hlZHVsZWQgPSBmYWxzZTsKICAgIGlzU3VzcGVuZGVkQXRZaWVsZCA9IGZhbHNlOwogICAgYXN5bmNTdGFyQm9keSgpOwogIH0KCiAgdm9pZCBzY2hlZHVsZUdlbmVyYXRvcigpIHsKICAgIGlmIChpc1NjaGVkdWxlZCB8fCBjb250cm9sbGVyLmlzUGF1c2VkIHx8IGlzQWRkaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlzU2NoZWR1bGVkID0gdHJ1ZTsKICAgIHNjaGVkdWxlTWljcm90YXNrKHJ1bkJvZHkpOwogIH0KCiAgLy8gQWRkcyBlbGVtZW50IHRvIHN0cmVhbSwgcmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHRlcm1pbmF0ZQogIC8vIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yLgogIC8vCiAgLy8gVE9ETyhoYXVzbmVyKTogUGVyIHNwZWMsIHRoZSBnZW5lcmF0b3Igc2hvdWxkIGJlIHN1c3BlbmRlZCBiZWZvcmUKICAvLyBleGl0aW5nIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuIFdlIGNvdWxkIGFkZCBhIGdldHRlciBsaWtlIHRoaXM6CiAgLy8gZ2V0IGlzQ2FuY2VsbGVkID0+IGNvbnRyb2xsZXIuaGFzTGlzdGVuZXI7CiAgLy8gVGhlIGdlbmVyYXRvciB3b3VsZCB0cmFuc2xhdGUgYSAneWllbGQgZScgc3RhdGVtZW50IHRvCiAgLy8gY29udHJvbGxlci5hZGQoZSk7CiAgLy8gc3VzcGVuZDsKICAvLyBpZiAoY29udHJvbGxlci5pc0NhbmNlbGxlZCkgcmV0dXJuOwogIGJvb2wgYWRkKFQgZXZlbnQpIHsKICAgIGlmICghb25MaXN0ZW5SZWNlaXZlZCkgX2ZhdGFsKCJ5aWVsZCBiZWZvcmUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIik7CiAgICBpZiAoaXNTdXNwZW5kZWRBdFlpZWxkKSBfZmF0YWwoInVuZXhwZWN0ZWQgeWllbGQiKTsKICAgIC8vIElmIHN0cmVhbSBpcyBjYW5jZWxsZWQsIHRlbGwgY2FsbGVyIHRvIGV4aXQgdGhlIGFzeW5jIGdlbmVyYXRvci4KICAgIGlmICghY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGNvbnRyb2xsZXIuYWRkKGV2ZW50KTsKICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgICBpc1N1c3BlbmRlZEF0WWllbGQgPSB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gQWRkcyB0aGUgZWxlbWVudHMgb2Ygc3RyZWFtIGludG8gdGhpcyBjb250cm9sbGVyJ3Mgc3RyZWFtLgogIC8vIFRoZSBnZW5lcmF0b3Igd2lsbCBiZSBzY2hlZHVsZWQgYWdhaW4gd2hlbiBhbGwgb2YgdGhlCiAgLy8gZWxlbWVudHMgb2YgdGhlIGFkZGVkIHN0cmVhbSBoYXZlIGJlZW4gY29uc3VtZWQuCiAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHRlcm1pbmF0ZQogIC8vIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yLgogIGJvb2wgYWRkU3RyZWFtKFN0cmVhbTxUPiBzdHJlYW0pIHsKICAgIGlmICghb25MaXN0ZW5SZWNlaXZlZCkgX2ZhdGFsKCJ5aWVsZCBiZWZvcmUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIik7CiAgICAvLyBJZiBzdHJlYW0gaXMgY2FuY2VsbGVkLCB0ZWxsIGNhbGxlciB0byBleGl0IHRoZSBhc3luYyBnZW5lcmF0b3IuCiAgICBpZiAoIWNvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHJldHVybiB0cnVlOwogICAgaXNBZGRpbmcgPSB0cnVlOwogICAgdmFyIHdoZW5Eb25lQWRkaW5nID0gY29udHJvbGxlci5hZGRTdHJlYW0oc3RyZWFtLCBjYW5jZWxPbkVycm9yOiBmYWxzZSk7CiAgICB3aGVuRG9uZUFkZGluZy50aGVuKChfKSB7CiAgICAgIGlzQWRkaW5nID0gZmFsc2U7CiAgICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgICAgIGlmICghaXNTY2hlZHVsZWQpIGlzU3VzcGVuZGVkQXRZaWVsZCA9IHRydWU7CiAgICB9KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmICgoY2FuY2VsbGF0aW9uRnV0dXJlICE9IG51bGwpICYmIGNhbmNlbGxhdGlvbkZ1dHVyZS5fbWF5Q29tcGxldGUpIHsKICAgICAgLy8gSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBjYW5jZWxsZWQsIGNvbXBsZXRlIHRoZSBjYW5jZWxsYXRpb24gZnV0dXJlCiAgICAgIC8vIHdpdGggdGhlIGVycm9yLgogICAgICBjYW5jZWxsYXRpb25GdXR1cmUuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBJZiBzdHJlYW0gaXMgY2FuY2VsbGVkLCB0ZWxsIGNhbGxlciB0byBleGl0IHRoZSBhc3luYyBnZW5lcmF0b3IuCiAgICBpZiAoIWNvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHJldHVybjsKICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgLy8gTm8gbmVlZCB0byBzY2hlZHVsZSB0aGUgZ2VuZXJhdG9yIGJvZHkgaGVyZS4gVGhpcyBjb2RlIGlzIG9ubHkKICAgIC8vIGNhbGxlZCBmcm9tIHRoZSBjYXRjaCBjbGF1c2Ugb2YgdGhlIGltcGxpY2l0IHRyeS1jYXRjaC1maW5hbGx5CiAgICAvLyBhcm91bmQgdGhlIGdlbmVyYXRvciBib2R5LiBUaGF0IGlzLCB3ZSBhcmUgb24gdGhlIGVycm9yIHBhdGggb3V0CiAgICAvLyBvZiB0aGUgZ2VuZXJhdG9yIGFuZCBkbyBub3QgbmVlZCB0byBydW4gdGhlIGdlbmVyYXRvciBhZ2Fpbi4KICB9CgogIGNsb3NlKCkgewogICAgaWYgKChjYW5jZWxsYXRpb25GdXR1cmUgIT0gbnVsbCkgJiYgY2FuY2VsbGF0aW9uRnV0dXJlLl9tYXlDb21wbGV0ZSkgewogICAgICAvLyBJZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGNhbmNlbGxlZCwgY29tcGxldGUgdGhlIGNhbmNlbGxhdGlvbiBmdXR1cmUKICAgICAgLy8gd2l0aCB0aGUgZXJyb3IuCiAgICAgIGNhbmNlbGxhdGlvbkZ1dHVyZS5fY29tcGxldGVXaXRoVmFsdWUobnVsbCk7CiAgICB9CiAgICBjb250cm9sbGVyLmNsb3NlKCk7CiAgfQoKICBfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcih0aGlzLmFzeW5jU3RhckJvZHkpIHsKICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcigKICAgICAgICBvbkxpc3RlbjogdGhpcy5vbkxpc3RlbiwKICAgICAgICBvblJlc3VtZTogdGhpcy5vblJlc3VtZSwKICAgICAgICBvbkNhbmNlbDogdGhpcy5vbkNhbmNlbCk7CiAgfQoKICBvbkxpc3RlbigpIHsKICAgIGFzc2VydCghb25MaXN0ZW5SZWNlaXZlZCk7CiAgICBvbkxpc3RlblJlY2VpdmVkID0gdHJ1ZTsKICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgfQoKICBvblJlc3VtZSgpIHsKICAgIGlmIChpc1N1c3BlbmRlZEF0WWllbGQpIHsKICAgICAgc2NoZWR1bGVHZW5lcmF0b3IoKTsKICAgIH0KICB9CgogIG9uQ2FuY2VsKCkgewogICAgaWYgKGNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoY2FuY2VsbGF0aW9uRnV0dXJlID09IG51bGwpIHsKICAgICAgY2FuY2VsbGF0aW9uRnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICAgICAgLy8gT25seSByZXN1bWUgdGhlIGdlbmVyYXRvciBpZiBpdCBpcyBzdXNwZW5kZWQgYXQgYSB5aWVsZC4KICAgICAgLy8gQ2FuY2VsbGF0aW9uIGRvZXMgbm90IGFmZmVjdCBhbiBhc3luYyBnZW5lcmF0b3IgdGhhdCBpcwogICAgICAvLyBzdXNwZW5kZWQgYXQgYW4gYXdhaXQuCiAgICAgIGlmIChpc1N1c3BlbmRlZEF0WWllbGQpIHsKICAgICAgICBzY2hlZHVsZUdlbmVyYXRvcigpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2FuY2VsbGF0aW9uRnV0dXJlOwogIH0KfQoKQHBhdGNoCnZvaWQgX3JldGhyb3coT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIG5hdGl2ZSAiQXN5bmNfcmV0aHJvdyI7CgpAcGF0Y2gKY2xhc3MgX0Z1dHVyZTxUPiB7CiAgLy8vIFRoZSBjbG9zdXJlIGltcGxlbWVudGluZyB0aGUgYXN5bmNbKl0tYm9keSB0aGF0IGlzIGBhd2FpdGBpbmcgdGhpcyBmdXR1cmUuCiAgRnVuY3Rpb24gX2F3YWl0ZXI7Cn0KCkBwYXRjaApjbGFzcyBfU3RyZWFtSW1wbDxUPiB7CiAgLy8vIFRoZSBjbG9zdXJlIGltcGxlbWVudGluZyB0aGUgYXN5bmNbKl0tYm9keSB0aGF0IGlzIGBhd2FpdGBpbmcgdGhpcyBmdXR1cmUuCiAgRnVuY3Rpb24gX2F3YWl0ZXI7CgogIC8vLyBUaGUgY2xvc3VyZSBpbXBsZW1lbnRpbmcgdGhlIGFzeW5jLWdlbmVyYXRvciBib2R5IHRoYXQgaXMgY3JlYXRpbmcgZXZlbnRzCiAgLy8vIGZvciB0aGlzIHN0cmVhbS4KICBGdW5jdGlvbiBfZ2VuZXJhdG9yOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfY29tcGxldGVPbkFzeW5jUmV0dXJuKENvbXBsZXRlciBjb21wbGV0ZXIsIE9iamVjdCB2YWx1ZSkgewogIGNvbXBsZXRlci5jb21wbGV0ZSh2YWx1ZSk7Cn0KCi8vLyBSZXR1cm5zIGEgW1N0YWNrVHJhY2VdIG9iamVjdCBjb250YWluaW5nIHRoZSBzeW5jaHJvbm91cyBwcmVmaXggZm9yIHRoaXMKLy8vIGFzeW5jaHJvbm91cyBtZXRob2QuCi8vCi8vIFRoaXMgbWV0aG9kIGlzIHJlY29nbml6ZWQuIEl0IHBlcmZvcm1zIGEgcnVudGltZSBjYWxsIGlmCi8vIEZMQUdfY2F1c2FsX2FzeW5jX3N0YWNrcyBpcyBlbmFibGVkIG9yIHJldHVybnMgYG51bGxgIG90aGVyd2lzZS4KQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCk9iamVjdCBfYXN5bmNTdGFja1RyYWNlSGVscGVyKEZ1bmN0aW9uIGFzeW5jX29wKQogICAgbmF0aXZlICJTdGFja1RyYWNlX2FzeW5jU3RhY2tUcmFjZUhlbHBlciI7CgovLyBUaGlzIG1ldGhvZCBpcyBhc20gaW50cmluc2lmaWVkLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfY2xlYXJBc3luY1RocmVhZFN0YWNrVHJhY2UoKQogICAgbmF0aXZlICJTdGFja1RyYWNlX2NsZWFyQXN5bmNUaHJlYWRTdGFja1RyYWNlIjsKCi8vIFRoaXMgbWV0aG9kIGlzIGFzbSBpbnRyaW5zaWZpZWQuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9zZXRBc3luY1RocmVhZFN0YWNrVHJhY2UoU3RhY2tUcmFjZSBzdGFja1RyYWNlKQogICAgbmF0aXZlICJTdGFja1RyYWNlX3NldEFzeW5jVGhyZWFkU3RhY2tUcmFjZSI7Cgp2b2lkIF9tb3ZlTmV4dERlYnVnZ2VyU3RlcENoZWNrKEZ1bmN0aW9uIGFzeW5jX29wKQogICAgbmF0aXZlICJBc3luY1N0YXJNb3ZlTmV4dF9kZWJ1Z2dlclN0ZXBDaGVjayI7CoE5AE5OPAFNUE0kATQBOiQpHAEuJgE4JA8BKwEnKSUNKQYEASASJQ0qBgQBEgkTBAEjMQIBTi4oMU5GUFBNTkAFTjkFT0ZMIDZRAgFNSDIwOjc9AgFMBD4ENBVOGy8jPgQeBUdNUAVRRB05AgFEGjcgDAQiHQIBIiwgDAQeIz0MBDECAUMfGiYiGhkhHCMlARkvIygGEgQBExkgFQQBHToOBhggBAFJIQVHSTA8GA4pFkk4SCMTBhsZHxIEAUA7NjEhJUlILhVNHhgbMwgSBAE3S0wZPA4GSCksRkZIRAQBDEtMGTMGGAQBMychISIEAQ8fHRkEAQ8eGwYEAQ8fEwYmKkJBICAdCAYfBAIBB0sBBxNRFQIBBxdRFQFQFxcCASJBHQIBTRkDPEQcMS8BJCIjNAEkIjYyATMyASFkYXJ0OmFzeW5jLXBhdGNoL2FzeW5jX3BhdGNoLmRhcnQ9b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9zY2hlZHVsZV9taWNyb3Rhc2tfcGF0Y2guZGFydIONLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImFzeW5jX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIF9Bc3luY1J1biB7CiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX3NjaGVkdWxlSW1tZWRpYXRlKHZvaWQgY2FsbGJhY2soKSkgewogICAgaWYgKF9TY2hlZHVsZUltbWVkaWF0ZS5fY2xvc3VyZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJNaWNyb3Rhc2tzIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICB9CiAgICBfU2NoZWR1bGVJbW1lZGlhdGUuX2Nsb3N1cmUoY2FsbGJhY2spOwogIH0KfQoKdHlwZWRlZiB2b2lkIF9TY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUodm9pZCBjYWxsYmFjaygpKTsKCmNsYXNzIF9TY2hlZHVsZUltbWVkaWF0ZSB7CiAgc3RhdGljIF9TY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUgX2Nsb3N1cmU7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9zZXRTY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUoX1NjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZSBjbG9zdXJlKSB7CiAgX1NjaGVkdWxlSW1tZWRpYXRlLl9jbG9zdXJlID0gY2xvc3VyZTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX2Vuc3VyZVNjaGVkdWxlSW1tZWRpYXRlKCkgewogIF9Bc3luY1J1bi5fc2NoZWR1bGVJbW1lZGlhdGUoX3N0YXJ0TWljcm90YXNrTG9vcCk7Cn0KIgBOTjwBHwEHEgk0L0IGKwQCATkBGy0CASJHKQIBIiI1AgEuZGFydDphc3luYy1wYXRjaC9zY2hlZHVsZV9taWNyb3Rhc2tfcGF0Y2guZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3RpbWVyX3BhdGNoLmRhcnSF7i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJhc3luY19wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBUaW1lciB7CiAgQHBhdGNoCiAgc3RhdGljIFRpbWVyIF9jcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKSB7CiAgICAvLyBUT0RPKGlwb3N2YSk6IFJlbW92ZSBfVGltZXJGYWN0b3J5IGFuZCB1c2UgVk1MaWJyYXJ5SG9va3MgZXhjbHVzaXZlbHkuCiAgICBpZiAoX1RpbWVyRmFjdG9yeS5fZmFjdG9yeSA9PSBudWxsKSB7CiAgICAgIF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkgPSBWTUxpYnJhcnlIb29rcy50aW1lckZhY3Rvcnk7CiAgICB9CiAgICBpZiAoX1RpbWVyRmFjdG9yeS5fZmFjdG9yeSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJUaW1lciBpbnRlcmZhY2Ugbm90IHN1cHBvcnRlZC4iKTsKICAgIH0KICAgIGludCBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5pbk1pbGxpc2Vjb25kczsKICAgIGlmIChtaWxsaXNlY29uZHMgPCAwKSBtaWxsaXNlY29uZHMgPSAwOwogICAgcmV0dXJuIF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkobWlsbGlzZWNvbmRzLCAoXykgewogICAgICBjYWxsYmFjaygpOwogICAgfSwgZmFsc2UpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIFRpbWVyIF9jcmVhdGVQZXJpb2RpY1RpbWVyKAogICAgICBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lcikpIHsKICAgIC8vIFRPRE8oaXBvc3ZhKTogUmVtb3ZlIF9UaW1lckZhY3RvcnkgYW5kIHVzZSBWTUxpYnJhcnlIb29rcyBleGNsdXNpdmVseS4KICAgIF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkgPz89IFZNTGlicmFyeUhvb2tzLnRpbWVyRmFjdG9yeTsKICAgIGlmIChfVGltZXJGYWN0b3J5Ll9mYWN0b3J5ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlRpbWVyIGludGVyZmFjZSBub3Qgc3VwcG9ydGVkLiIpOwogICAgfQogICAgaW50IG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogICAgaWYgKG1pbGxpc2Vjb25kcyA8IDApIG1pbGxpc2Vjb25kcyA9IDA7CiAgICByZXR1cm4gX1RpbWVyRmFjdG9yeS5fZmFjdG9yeShtaWxsaXNlY29uZHMsIGNhbGxiYWNrLCB0cnVlKTsKICB9Cn0KCnR5cGVkZWYgVGltZXIgX1RpbWVyRmFjdG9yeUNsb3N1cmUoCiAgICBpbnQgbWlsbGlzZWNvbmRzLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSwgYm9vbCByZXBlYXRpbmcpOwoKY2xhc3MgX1RpbWVyRmFjdG9yeSB7CiAgc3RhdGljIF9UaW1lckZhY3RvcnlDbG9zdXJlIF9mYWN0b3J5Owp9Ci4ATk48AR8BBw4JQk4qPAYqRAYwLDYSDwQBCSU3TjwqRAYwLEEEAgEkQwEWKAIBIWRhcnQ6YXN5bmMtcGF0Y2gvdGltZXJfcGF0Y2guZGFydEJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvYnJvYWRjYXN0X3N0cmVhbV9jb250cm9sbGVyLmRhcnS8ji8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgpjbGFzcyBfQnJvYWRjYXN0U3RyZWFtPFQ+IGV4dGVuZHMgX0NvbnRyb2xsZXJTdHJlYW08VD4gewogIF9Ccm9hZGNhc3RTdHJlYW0oX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gY29udHJvbGxlcikKICAgICAgOiBzdXBlcihjb250cm9sbGVyKTsKCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gdHJ1ZTsKfQoKY2xhc3MgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBleHRlbmRzIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+IHsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9FVkVOVF9JRCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfRklSSU5HID0gMjsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9SRU1PVkVfQUZURVJfRklSSU5HID0gNDsKICAvLyBUT0RPKGxybik6IFVzZSB0aGUgX3N0YXRlIGZpZWxkIG9uIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uIHRvCiAgLy8gYWxzbyBzdG9yZSB0aGlzIHN0YXRlLiBSZXF1aXJlcyB0aGF0IHRoZSBzdWJzY3JpcHRpb24gaW1wbGVtZW50YXRpb24KICAvLyBkb2VzIG5vdCBhc3N1bWUgdGhhdCBpdCdzIHVzZSBvZiB0aGUgc3RhdGUgaW50ZWdlciBpcyB0aGUgb25seSB1c2UuCiAgaW50IF9ldmVudFN0YXRlID0gMDsgLy8gSW5pdGlhbGl6ZWQgdG8gaGVscCBkYXJ0MmpzIHR5cGUgaW5mZXJlbmNlLgoKICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IF9uZXh0OwogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gX3ByZXZpb3VzOwoKICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uKF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlPFQ+IGNvbnRyb2xsZXIsCiAgICAgIHZvaWQgb25EYXRhKFQgZGF0YSksIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBzdXBlcihjb250cm9sbGVyLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcikgewogICAgX25leHQgPSBfcHJldmlvdXMgPSB0aGlzOwogIH0KCiAgYm9vbCBfZXhwZWN0c0V2ZW50KGludCBldmVudElkKSA9PiAoX2V2ZW50U3RhdGUgJiBfU1RBVEVfRVZFTlRfSUQpID09IGV2ZW50SWQ7CgogIHZvaWQgX3RvZ2dsZUV2ZW50SWQoKSB7CiAgICBfZXZlbnRTdGF0ZSBePSBfU1RBVEVfRVZFTlRfSUQ7CiAgfQoKICBib29sIGdldCBfaXNGaXJpbmcgPT4gKF9ldmVudFN0YXRlICYgX1NUQVRFX0ZJUklORykgIT0gMDsKCiAgdm9pZCBfc2V0UmVtb3ZlQWZ0ZXJGaXJpbmcoKSB7CiAgICBhc3NlcnQoX2lzRmlyaW5nKTsKICAgIF9ldmVudFN0YXRlIHw9IF9TVEFURV9SRU1PVkVfQUZURVJfRklSSU5HOwogIH0KCiAgYm9vbCBnZXQgX3JlbW92ZUFmdGVyRmlyaW5nID0+CiAgICAgIChfZXZlbnRTdGF0ZSAmIF9TVEFURV9SRU1PVkVfQUZURVJfRklSSU5HKSAhPSAwOwoKICAvLyBUaGUgY29udHJvbGxlci5fcmVjb3JkUGF1c2UgZG9lc24ndCBkbyBhbnl0aGluZyBmb3IgYSBicm9hZGNhc3QgY29udHJvbGxlciwKICAvLyBzbyB3ZSBkb24ndCBib3RoZXIgY2FsbGluZyBpdC4KICB2b2lkIF9vblBhdXNlKCkge30KCiAgLy8gVGhlIGNvbnRyb2xsZXIuX3JlY29yZFJlc3VtZSBkb2Vzbid0IGRvIGFueXRoaW5nIGZvciBhIGJyb2FkY2FzdAogIC8vIGNvbnRyb2xsZXIsIHNvIHdlIGRvbid0IGJvdGhlciBjYWxsaW5nIGl0LgogIHZvaWQgX29uUmVzdW1lKCkge30KCiAgLy8gX29uQ2FuY2VsIGlzIGluaGVyaXRlZC4KfQoKYWJzdHJhY3QgY2xhc3MgX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4KICAgIGltcGxlbWVudHMgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPFQ+IHsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9JTklUSUFMID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9FVkVOVF9JRCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfRklSSU5HID0gMjsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9DTE9TRUQgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0FERFNUUkVBTSA9IDg7CgogIENvbnRyb2xsZXJDYWxsYmFjayBvbkxpc3RlbjsKICBDb250cm9sbGVyQ2FuY2VsQ2FsbGJhY2sgb25DYW5jZWw7CgogIC8vIFN0YXRlIG9mIHRoZSBjb250cm9sbGVyLgogIGludCBfc3RhdGU7CgogIC8vIERvdWJsZS1saW5rZWQgbGlzdCBvZiBhY3RpdmUgbGlzdGVuZXJzLgogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gX2ZpcnN0U3Vic2NyaXB0aW9uOwogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gX2xhc3RTdWJzY3JpcHRpb247CgogIC8vIEV4dHJhIHN0YXRlIHVzZWQgZHVyaW5nIGFuIFthZGRTdHJlYW1dIGNhbGwuCiAgX0FkZFN0cmVhbVN0YXRlPFQ+IF9hZGRTdHJlYW1TdGF0ZTsKCiAgLyoqCiAgICogRnV0dXJlIHJldHVybmVkIGJ5IFtjbG9zZV0gYW5kIFtkb25lXS4KICAgKgogICAqIFRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdoZW5ldmVyIHRoZSBkb25lIGV2ZW50IGhhcyBiZWVuIHNlbnQgdG8gYWxsCiAgICogcmVsZXZhbnQgbGlzdGVuZXJzLgogICAqIFRoZSByZWxldmFudCBsaXN0ZW5lcnMgYXJlIHRoZSBvbmVzIHRoYXQgd2VyZSBsaXN0ZW5pbmcgd2hlbiBbY2xvc2VdIHdhcwogICAqIGNhbGxlZC4gV2hlbiBhbGwgb2YgdGhlc2UgaGF2ZSBiZWVuIGNhbmNlbGVkIChzZW5kaW5nIHRoZSBkb25lIGV2ZW50IG1ha2VzCiAgICogdGhlbSBjYW5jZWwsIGJ1dCB0aGV5IGNhbiBhbHNvIGJlIGNhbmNlbGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBldmVudCksCiAgICogdGhpcyBmdXR1cmUgY29tcGxldGVzLgogICAqCiAgICogQW55IGF0dGVtcHQgdG8gbGlzdGVuIGFmdGVyIGNhbGxpbmcgW2Nsb3NlXSB3aWxsIHRocm93LCBzbyB0aGVyZSB3b24ndAogICAqIGJlIGFueSBmdXJ0aGVyIGxpc3RlbmVycy4KICAgKi8KICBfRnV0dXJlIF9kb25lRnV0dXJlOwoKICBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcih0aGlzLm9uTGlzdGVuLCB0aGlzLm9uQ2FuY2VsKQogICAgICA6IF9zdGF0ZSA9IF9TVEFURV9JTklUSUFMOwoKICBDb250cm9sbGVyQ2FsbGJhY2sgZ2V0IG9uUGF1c2UgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMgZG8gbm90IHN1cHBvcnQgcGF1c2UgY2FsbGJhY2tzIik7CiAgfQoKICB2b2lkIHNldCBvblBhdXNlKHZvaWQgb25QYXVzZUhhbmRsZXIoKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMgZG8gbm90IHN1cHBvcnQgcGF1c2UgY2FsbGJhY2tzIik7CiAgfQoKICBDb250cm9sbGVyQ2FsbGJhY2sgZ2V0IG9uUmVzdW1lIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJCcm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXJzIGRvIG5vdCBzdXBwb3J0IHBhdXNlIGNhbGxiYWNrcyIpOwogIH0KCiAgdm9pZCBzZXQgb25SZXN1bWUodm9pZCBvblJlc3VtZUhhbmRsZXIoKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMgZG8gbm90IHN1cHBvcnQgcGF1c2UgY2FsbGJhY2tzIik7CiAgfQoKICAvLyBTdHJlYW1Db250cm9sbGVyIGludGVyZmFjZS4KCiAgU3RyZWFtPFQ+IGdldCBzdHJlYW0gPT4gbmV3IF9Ccm9hZGNhc3RTdHJlYW08VD4odGhpcyk7CgogIFN0cmVhbVNpbms8VD4gZ2V0IHNpbmsgPT4gbmV3IF9TdHJlYW1TaW5rV3JhcHBlcjxUPih0aGlzKTsKCiAgYm9vbCBnZXQgaXNDbG9zZWQgPT4gKF9zdGF0ZSAmIF9TVEFURV9DTE9TRUQpICE9IDA7CgogIC8qKgogICAqIEEgYnJvYWRjYXN0IGNvbnRyb2xsZXIgaXMgbmV2ZXIgcGF1c2VkLgogICAqCiAgICogRWFjaCByZWNlaXZpbmcgc3RyZWFtIG1heSBiZSBwYXVzZWQgaW5kaXZpZHVhbGx5LCBhbmQgdGhleSBoYW5kbGUgdGhlaXIKICAgKiBvd24gYnVmZmVyaW5nLgogICAqLwogIGJvb2wgZ2V0IGlzUGF1c2VkID0+IGZhbHNlOwoKICAvKiogV2hldGhlciB0aGVyZSBhcmUgY3VycmVudGx5IG9uZSBvciBtb3JlIHN1YnNjcmliZXJzLiAqLwogIGJvb2wgZ2V0IGhhc0xpc3RlbmVyID0+ICFfaXNFbXB0eTsKCiAgLyoqCiAgICogVGVzdCB3aGV0aGVyIHRoZSBzdHJlYW0gaGFzIGV4YWN0bHkgb25lIGxpc3RlbmVyLgogICAqCiAgICogQXNzdW1lcyB0aGF0IHRoZSBzdHJlYW0gaGFzIGEgbGlzdGVuZXIgKG5vdCBbX2lzRW1wdHldKS4KICAgKi8KICBib29sIGdldCBfaGFzT25lTGlzdGVuZXIgewogICAgYXNzZXJ0KCFfaXNFbXB0eSk7CiAgICByZXR1cm4gaWRlbnRpY2FsKF9maXJzdFN1YnNjcmlwdGlvbiwgX2xhc3RTdWJzY3JpcHRpb24pOwogIH0KCiAgLyoqIFdoZXRoZXIgYW4gZXZlbnQgaXMgYmVpbmcgZmlyZWQgKHNlbnQgdG8gc29tZSwgYnV0IG5vdCBhbGwsIGxpc3RlbmVycykuICovCiAgYm9vbCBnZXQgX2lzRmlyaW5nID0+IChfc3RhdGUgJiBfU1RBVEVfRklSSU5HKSAhPSAwOwoKICBib29sIGdldCBfaXNBZGRpbmdTdHJlYW0gPT4gKF9zdGF0ZSAmIF9TVEFURV9BRERTVFJFQU0pICE9IDA7CgogIGJvb2wgZ2V0IF9tYXlBZGRFdmVudCA9PiAoX3N0YXRlIDwgX1NUQVRFX0NMT1NFRCk7CgogIF9GdXR1cmUgX2Vuc3VyZURvbmVGdXR1cmUoKSB7CiAgICBpZiAoX2RvbmVGdXR1cmUgIT0gbnVsbCkgcmV0dXJuIF9kb25lRnV0dXJlOwogICAgcmV0dXJuIF9kb25lRnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICB9CgogIC8vIExpbmtlZCBsaXN0IGhlbHBlcnMKCiAgYm9vbCBnZXQgX2lzRW1wdHkgPT4gX2ZpcnN0U3Vic2NyaXB0aW9uID09IG51bGw7CgogIC8qKiBBZGRzIHN1YnNjcmlwdGlvbiB0byBsaW5rZWQgbGlzdCBvZiBhY3RpdmUgbGlzdGVuZXJzLiAqLwogIHZvaWQgX2FkZExpc3RlbmVyKF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHN1YnNjcmlwdGlvbi5fbmV4dCwgc3Vic2NyaXB0aW9uKSk7CiAgICBzdWJzY3JpcHRpb24uX2V2ZW50U3RhdGUgPSAoX3N0YXRlICYgX1NUQVRFX0VWRU5UX0lEKTsKICAgIC8vIEluc2VydCBpbiBsaW5rZWQgbGlzdCBhcyBsYXN0IHN1YnNjcmlwdGlvbi4KICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gb2xkTGFzdCA9IF9sYXN0U3Vic2NyaXB0aW9uOwogICAgX2xhc3RTdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24uX25leHQgPSBudWxsOwogICAgc3Vic2NyaXB0aW9uLl9wcmV2aW91cyA9IG9sZExhc3Q7CiAgICBpZiAob2xkTGFzdCA9PSBudWxsKSB7CiAgICAgIF9maXJzdFN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIG9sZExhc3QuX25leHQgPSBzdWJzY3JpcHRpb247CiAgICB9CiAgfQoKICB2b2lkIF9yZW1vdmVMaXN0ZW5lcihfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgYXNzZXJ0KGlkZW50aWNhbChzdWJzY3JpcHRpb24uX2NvbnRyb2xsZXIsIHRoaXMpKTsKICAgIGFzc2VydCghaWRlbnRpY2FsKHN1YnNjcmlwdGlvbi5fbmV4dCwgc3Vic2NyaXB0aW9uKSk7CiAgICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHByZXZpb3VzID0gc3Vic2NyaXB0aW9uLl9wcmV2aW91czsKICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gbmV4dCA9IHN1YnNjcmlwdGlvbi5fbmV4dDsKICAgIGlmIChwcmV2aW91cyA9PSBudWxsKSB7CiAgICAgIC8vIFRoaXMgd2FzIHRoZSBmaXJzdCBzdWJzY3JpcHRpb24uCiAgICAgIF9maXJzdFN1YnNjcmlwdGlvbiA9IG5leHQ7CiAgICB9IGVsc2UgewogICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQ7CiAgICB9CiAgICBpZiAobmV4dCA9PSBudWxsKSB7CiAgICAgIC8vIFRoaXMgd2FzIHRoZSBsYXN0IHN1YnNjcmlwdGlvbi4KICAgICAgX2xhc3RTdWJzY3JpcHRpb24gPSBwcmV2aW91czsKICAgIH0gZWxzZSB7CiAgICAgIG5leHQuX3ByZXZpb3VzID0gcHJldmlvdXM7CiAgICB9CgogICAgc3Vic2NyaXB0aW9uLl9uZXh0ID0gc3Vic2NyaXB0aW9uLl9wcmV2aW91cyA9IHN1YnNjcmlwdGlvbjsKICB9CgogIC8vIF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlIGludGVyZmFjZS4KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9zdWJzY3JpYmUodm9pZCBvbkRhdGEoVCBkYXRhKSwgRnVuY3Rpb24gb25FcnJvciwKICAgICAgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgb25Eb25lID8/PSBfbnVsbERvbmVIYW5kbGVyOwogICAgICByZXR1cm4gbmV3IF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KG9uRG9uZSk7CiAgICB9CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gbmV3IF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4oCiAgICAgICAgdGhpcywgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogICAgX2FkZExpc3RlbmVyKHN1YnNjcmlwdGlvbik7CiAgICBpZiAoaWRlbnRpY2FsKF9maXJzdFN1YnNjcmlwdGlvbiwgX2xhc3RTdWJzY3JpcHRpb24pKSB7CiAgICAgIC8vIE9ubHkgb25lIGxpc3RlbmVyLCBzbyBpdCBtdXN0IGJlIHRoZSBmaXJzdCBsaXN0ZW5lci4KICAgICAgX3J1bkd1YXJkZWQob25MaXN0ZW4pOwogICAgfQogICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICB9CgogIEZ1dHVyZSBfcmVjb3JkQ2FuY2VsKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWIpIHsKICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gc3ViOwogICAgLy8gSWYgYWxyZWFkeSByZW1vdmVkIGJ5IHRoZSBzdHJlYW0sIGRvbid0IHJlbW92ZSBpdCBhZ2Fpbi4KICAgIGlmIChpZGVudGljYWwoc3Vic2NyaXB0aW9uLl9uZXh0LCBzdWJzY3JpcHRpb24pKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdWJzY3JpcHRpb24uX2lzRmlyaW5nKSB7CiAgICAgIHN1YnNjcmlwdGlvbi5fc2V0UmVtb3ZlQWZ0ZXJGaXJpbmcoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9yZW1vdmVMaXN0ZW5lcihzdWJzY3JpcHRpb24pOwogICAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGZpcmluZyBhbiBldmVudCwgdGhlIGVtcHR5LWNoZWNrIGlzIHBlcmZvcm1lZCBhdAogICAgICAvLyB0aGUgZW5kIG9mIHRoZSBsaXN0ZW5lciBsb29wIGluc3RlYWQgb2YgaGVyZS4KICAgICAgaWYgKCFfaXNGaXJpbmcgJiYgX2lzRW1wdHkpIHsKICAgICAgICBfY2FsbE9uQ2FuY2VsKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBfcmVjb3JkUGF1c2UoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikge30KICB2b2lkIF9yZWNvcmRSZXN1bWUoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikge30KCiAgLy8gRXZlbnRTaW5rIGludGVyZmFjZS4KCiAgRXJyb3IgX2FkZEV2ZW50RXJyb3IoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuIG5ldyBTdGF0ZUVycm9yKCJDYW5ub3QgYWRkIG5ldyBldmVudHMgYWZ0ZXIgY2FsbGluZyBjbG9zZSIpOwogICAgfQogICAgYXNzZXJ0KF9pc0FkZGluZ1N0cmVhbSk7CiAgICByZXR1cm4gbmV3IFN0YXRlRXJyb3IoIkNhbm5vdCBhZGQgbmV3IGV2ZW50cyB3aGlsZSBkb2luZyBhbiBhZGRTdHJlYW0iKTsKICB9CgogIHZvaWQgYWRkKFQgZGF0YSkgewogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9hZGRFdmVudEVycm9yKCk7CiAgICBfc2VuZERhdGEoZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihlcnJvcik7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2FkZEV2ZW50RXJyb3IoKTsKICAgIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpOwogICAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICAgIH0KICAgIF9zZW5kRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIGFzc2VydChfZG9uZUZ1dHVyZSAhPSBudWxsKTsKICAgICAgcmV0dXJuIF9kb25lRnV0dXJlOwogICAgfQogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9hZGRFdmVudEVycm9yKCk7CiAgICBfc3RhdGUgfD0gX1NUQVRFX0NMT1NFRDsKICAgIEZ1dHVyZSBkb25lRnV0dXJlID0gX2Vuc3VyZURvbmVGdXR1cmUoKTsKICAgIF9zZW5kRG9uZSgpOwogICAgcmV0dXJuIGRvbmVGdXR1cmU7CiAgfQoKICBGdXR1cmUgZ2V0IGRvbmUgPT4gX2Vuc3VyZURvbmVGdXR1cmUoKTsKCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc3RyZWFtLCB7Ym9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9hZGRFdmVudEVycm9yKCk7CiAgICBfc3RhdGUgfD0gX1NUQVRFX0FERFNUUkVBTTsKICAgIF9hZGRTdHJlYW1TdGF0ZSA9IG5ldyBfQWRkU3RyZWFtU3RhdGUodGhpcywgc3RyZWFtLCBjYW5jZWxPbkVycm9yID8/IGZhbHNlKTsKICAgIHJldHVybiBfYWRkU3RyZWFtU3RhdGUuYWRkU3RyZWFtRnV0dXJlOwogIH0KCiAgLy8gX0V2ZW50U2luayBpbnRlcmZhY2UsIGNhbGxlZCBmcm9tIEFkZFN0cmVhbVN0YXRlLgogIHZvaWQgX2FkZChUIGRhdGEpIHsKICAgIF9zZW5kRGF0YShkYXRhKTsKICB9CgogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc2VuZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX2Nsb3NlKCkgewogICAgYXNzZXJ0KF9pc0FkZGluZ1N0cmVhbSk7CiAgICBfQWRkU3RyZWFtU3RhdGUgYWRkU3RhdGUgPSBfYWRkU3RyZWFtU3RhdGU7CiAgICBfYWRkU3RyZWFtU3RhdGUgPSBudWxsOwogICAgX3N0YXRlICY9IH5fU1RBVEVfQUREU1RSRUFNOwogICAgYWRkU3RhdGUuY29tcGxldGUoKTsKICB9CgogIC8vIEV2ZW50IGhhbmRsaW5nLgogIHZvaWQgX2ZvckVhY2hMaXN0ZW5lcigKICAgICAgdm9pZCBhY3Rpb24oX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pKSB7CiAgICBpZiAoX2lzRmlyaW5nKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKAogICAgICAgICAgIkNhbm5vdCBmaXJlIG5ldyBldmVudC4gQ29udHJvbGxlciBpcyBhbHJlYWR5IGZpcmluZyBhbiBldmVudCIpOwogICAgfQogICAgaWYgKF9pc0VtcHR5KSByZXR1cm47CgogICAgLy8gR2V0IGV2ZW50IGlkIG9mIHRoaXMgZXZlbnQuCiAgICBpbnQgaWQgPSAoX3N0YXRlICYgX1NUQVRFX0VWRU5UX0lEKTsKICAgIC8vIFN0YXJ0IGZpcmluZyAoc2V0IHRoZSBfU1RBVEVfRklSSU5HIGJpdCkuIFdlIGRvbid0IGRvIFtvbkNhbmNlbF0KICAgIC8vIGNhbGxiYWNrcyB3aGlsZSBmaXJpbmcsIGFuZCB3ZSBwcmV2ZW50IHJlZW50cmFuY3kgb2YgdGhpcyBmdW5jdGlvbi4KICAgIC8vCiAgICAvLyBTZXQgW19zdGF0ZV0ncyBldmVudCBpZCB0byB0aGUgbmV4dCBldmVudCdzIGlkLgogICAgLy8gQW55IGxpc3RlbmVycyBhZGRlZCB3aGlsZSBmaXJpbmcgdGhpcyBldmVudCB3aWxsIGV4cGVjdCB0aGUgbmV4dCBldmVudCwKICAgIC8vIG5vdCB0aGlzIG9uZSwgYW5kIHdvbid0IGdldCBub3RpZmllZC4KICAgIF9zdGF0ZSBePSBfU1RBVEVfRVZFTlRfSUQgfCBfU1RBVEVfRklSSU5HOwogICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfZmlyc3RTdWJzY3JpcHRpb247CiAgICB3aGlsZSAoc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgaWYgKHN1YnNjcmlwdGlvbi5fZXhwZWN0c0V2ZW50KGlkKSkgewogICAgICAgIHN1YnNjcmlwdGlvbi5fZXZlbnRTdGF0ZSB8PSBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uLl9TVEFURV9GSVJJTkc7CiAgICAgICAgYWN0aW9uKHN1YnNjcmlwdGlvbik7CiAgICAgICAgc3Vic2NyaXB0aW9uLl90b2dnbGVFdmVudElkKCk7CiAgICAgICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBuZXh0ID0gc3Vic2NyaXB0aW9uLl9uZXh0OwogICAgICAgIGlmIChzdWJzY3JpcHRpb24uX3JlbW92ZUFmdGVyRmlyaW5nKSB7CiAgICAgICAgICBfcmVtb3ZlTGlzdGVuZXIoc3Vic2NyaXB0aW9uKTsKICAgICAgICB9CiAgICAgICAgc3Vic2NyaXB0aW9uLl9ldmVudFN0YXRlICY9IH5fQnJvYWRjYXN0U3Vic2NyaXB0aW9uLl9TVEFURV9GSVJJTkc7CiAgICAgICAgc3Vic2NyaXB0aW9uID0gbmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb24uX25leHQ7CiAgICAgIH0KICAgIH0KICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0ZJUklORzsKCiAgICBpZiAoX2lzRW1wdHkpIHsKICAgICAgX2NhbGxPbkNhbmNlbCgpOwogICAgfQogIH0KCiAgdm9pZCBfY2FsbE9uQ2FuY2VsKCkgewogICAgYXNzZXJ0KF9pc0VtcHR5KTsKICAgIGlmIChpc0Nsb3NlZCAmJiBfZG9uZUZ1dHVyZS5fbWF5Q29tcGxldGUpIHsKICAgICAgLy8gV2hlbiBjbG9zZWQsIF9kb25lRnV0dXJlIGlzIG5vdCBudWxsLgogICAgICBfZG9uZUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICAgIH0KICAgIF9ydW5HdWFyZGVkKG9uQ2FuY2VsKTsKICB9Cn0KCmNsYXNzIF9TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPiBleHRlbmRzIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+CiAgICBpbXBsZW1lbnRzIFN5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgX1N5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKHZvaWQgb25MaXN0ZW4oKSwgdm9pZCBvbkNhbmNlbCgpKQogICAgICA6IHN1cGVyKG9uTGlzdGVuLCBvbkNhbmNlbCk7CgogIC8vIEV2ZW50RGlzcGF0Y2ggaW50ZXJmYWNlLgoKICBib29sIGdldCBfbWF5QWRkRXZlbnQgPT4gc3VwZXIuX21heUFkZEV2ZW50ICYmICFfaXNGaXJpbmc7CgogIF9hZGRFdmVudEVycm9yKCkgewogICAgaWYgKF9pc0ZpcmluZykgewogICAgICByZXR1cm4gbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGZpcmUgbmV3IGV2ZW50LiBDb250cm9sbGVyIGlzIGFscmVhZHkgZmlyaW5nIGFuIGV2ZW50Iik7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuX2FkZEV2ZW50RXJyb3IoKTsKICB9CgogIHZvaWQgX3NlbmREYXRhKFQgZGF0YSkgewogICAgaWYgKF9pc0VtcHR5KSByZXR1cm47CiAgICBpZiAoX2hhc09uZUxpc3RlbmVyKSB7CiAgICAgIF9zdGF0ZSB8PSBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlci5fU1RBVEVfRklSSU5HOwogICAgICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9maXJzdFN1YnNjcmlwdGlvbjsKICAgICAgc3Vic2NyaXB0aW9uLl9hZGQoZGF0YSk7CiAgICAgIF9zdGF0ZSAmPSB+X0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIuX1NUQVRFX0ZJUklORzsKICAgICAgaWYgKF9pc0VtcHR5KSB7CiAgICAgICAgX2NhbGxPbkNhbmNlbCgpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9mb3JFYWNoTGlzdGVuZXIoKF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICAgIHN1YnNjcmlwdGlvbi5fYWRkKGRhdGEpOwogICAgfSk7CiAgfQoKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmIChfaXNFbXB0eSkgcmV0dXJuOwogICAgX2ZvckVhY2hMaXN0ZW5lcigoX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHsKICAgICAgc3Vic2NyaXB0aW9uLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9KTsKICB9CgogIHZvaWQgX3NlbmREb25lKCkgewogICAgaWYgKCFfaXNFbXB0eSkgewogICAgICBfZm9yRWFjaExpc3RlbmVyKChfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgICAgIHN1YnNjcmlwdGlvbi5fY2xvc2UoKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoX2RvbmVGdXR1cmUgIT0gbnVsbCk7CiAgICAgIGFzc2VydChfZG9uZUZ1dHVyZS5fbWF5Q29tcGxldGUpOwogICAgICBfZG9uZUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9Bc3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4gZXh0ZW5kcyBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgX0FzeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcih2b2lkIG9uTGlzdGVuKCksIHZvaWQgb25DYW5jZWwoKSkKICAgICAgOiBzdXBlcihvbkxpc3Rlbiwgb25DYW5jZWwpOwoKICAvLyBFdmVudERpc3BhdGNoIGludGVyZmFjZS4KCiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKSB7CiAgICBmb3IgKF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gX2ZpcnN0U3Vic2NyaXB0aW9uOwogICAgICAgIHN1YnNjcmlwdGlvbiAhPSBudWxsOwogICAgICAgIHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbi5fbmV4dCkgewogICAgICBzdWJzY3JpcHRpb24uX2FkZFBlbmRpbmcobmV3IF9EZWxheWVkRGF0YTxUPihkYXRhKSk7CiAgICB9CiAgfQoKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGZvciAoX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfZmlyc3RTdWJzY3JpcHRpb247CiAgICAgICAgc3Vic2NyaXB0aW9uICE9IG51bGw7CiAgICAgICAgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uLl9uZXh0KSB7CiAgICAgIHN1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogICAgfQogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBpZiAoIV9pc0VtcHR5KSB7CiAgICAgIGZvciAoX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfZmlyc3RTdWJzY3JpcHRpb247CiAgICAgICAgICBzdWJzY3JpcHRpb24gIT0gbnVsbDsKICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbi5fbmV4dCkgewogICAgICAgIHN1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhjb25zdCBfRGVsYXllZERvbmUoKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfZG9uZUZ1dHVyZSAhPSBudWxsKTsKICAgICAgYXNzZXJ0KF9kb25lRnV0dXJlLl9tYXlDb21wbGV0ZSk7CiAgICAgIF9kb25lRnV0dXJlLl9hc3luY0NvbXBsZXRlKG51bGwpOwogICAgfQogIH0KfQoKLyoqCiAqIFN0cmVhbSBjb250cm9sbGVyIHRoYXQgaXMgdXNlZCBieSBbU3RyZWFtLmFzQnJvYWRjYXN0U3RyZWFtXS4KICoKICogVGhpcyBzdHJlYW0gY29udHJvbGxlciBhbGxvd3MgaW5jb21pbmcgZXZlbnRzIHdoaWxlIGl0IGlzIGZpcmluZwogKiBvdGhlciBldmVudHMuIFRoaXMgaXMgaGFuZGxlZCBieSBkZWxheWluZyB0aGUgZXZlbnRzIHVudGlsIHRoZQogKiBjdXJyZW50IGV2ZW50IGlzIGRvbmUgZmlyaW5nLCBhbmQgdGhlbiBmaXJlIHRoZSBwZW5kaW5nIGV2ZW50cy4KICoKICogVGhpcyBjbGFzcyBleHRlbmRzIFtfU3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXJdLiBFdmVudHMgb2YKICogYW4gImFzQnJvYWRjYXN0U3RyZWFtIiBzdHJlYW0gYXJlIGFsd2F5cyBpbml0aWF0ZWQgYnkgZXZlbnRzCiAqIG9uIGFub3RoZXIgc3RyZWFtLCBhbmQgaXQgaXMgZmluZSB0byBmb3J3YXJkIHRoZW0gc3luY2hyb25vdXNseS4KICovCmNsYXNzIF9Bc0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4gZXh0ZW5kcyBfU3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4KICAgIGltcGxlbWVudHMgX0V2ZW50RGlzcGF0Y2g8VD4gewogIF9TdHJlYW1JbXBsRXZlbnRzPFQ+IF9wZW5kaW5nOwoKICBfQXNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKHZvaWQgb25MaXN0ZW4oKSwgdm9pZCBvbkNhbmNlbCgpKQogICAgICA6IHN1cGVyKG9uTGlzdGVuLCBvbkNhbmNlbCk7CgogIGJvb2wgZ2V0IF9oYXNQZW5kaW5nID0+IF9wZW5kaW5nICE9IG51bGwgJiYgIV9wZW5kaW5nLmlzRW1wdHk7CgogIHZvaWQgX2FkZFBlbmRpbmdFdmVudChfRGVsYXllZEV2ZW50IGV2ZW50KSB7CiAgICBfcGVuZGluZyA/Pz0gbmV3IF9TdHJlYW1JbXBsRXZlbnRzPFQ+KCk7CiAgICBfcGVuZGluZy5hZGQoZXZlbnQpOwogIH0KCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBpZiAoIWlzQ2xvc2VkICYmIF9pc0ZpcmluZykgewogICAgICBfYWRkUGVuZGluZ0V2ZW50KG5ldyBfRGVsYXllZERhdGE8VD4oZGF0YSkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBzdXBlci5hZGQoZGF0YSk7CiAgICB3aGlsZSAoX2hhc1BlbmRpbmcpIHsKICAgICAgX3BlbmRpbmcuaGFuZGxlTmV4dCh0aGlzKTsKICAgIH0KICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKCFpc0Nsb3NlZCAmJiBfaXNGaXJpbmcpIHsKICAgICAgX2FkZFBlbmRpbmdFdmVudChuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2FkZEV2ZW50RXJyb3IoKTsKICAgIF9zZW5kRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgd2hpbGUgKF9oYXNQZW5kaW5nKSB7CiAgICAgIF9wZW5kaW5nLmhhbmRsZU5leHQodGhpcyk7CiAgICB9CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoIWlzQ2xvc2VkICYmIF9pc0ZpcmluZykgewogICAgICBfYWRkUGVuZGluZ0V2ZW50KGNvbnN0IF9EZWxheWVkRG9uZSgpKTsKICAgICAgX3N0YXRlIHw9IF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyLl9TVEFURV9DTE9TRUQ7CiAgICAgIHJldHVybiBzdXBlci5kb25lOwogICAgfQogICAgRnV0dXJlIHJlc3VsdCA9IHN1cGVyLmNsb3NlKCk7CiAgICBhc3NlcnQoIV9oYXNQZW5kaW5nKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9jYWxsT25DYW5jZWwoKSB7CiAgICBpZiAoX2hhc1BlbmRpbmcpIHsKICAgICAgX3BlbmRpbmcuY2xlYXIoKTsKICAgICAgX3BlbmRpbmcgPSBudWxsOwogICAgfQogICAgc3VwZXIuX2NhbGxPbkNhbmNlbCgpOwogIH0KfQqCAABOTjwBFAE5PRsBIAIBRSgmM0NKSUYBIycBQ1BEHgQBUQEaJAQBPAEhFy8EASE3AVEkFQFGMBYBHQIBLSonKCYmKQEfJQEeDgEtMC8BMiYBBiwFShlOUEscBUwfBhcBOyEBIyBIBAEsIEgEASQgSAQBLiBIBAEhATkBPQE2AQYtBU0UBh4BPiUBBjcFPgYdFz0EAVE3AUABNQEgMSgEARkBMwE/Pjk7MzsmHyYbKQ0kBgQBQTc6QTkcKiENHQYYKSQNIQYBQAQBKwFKKxQjNQZINyA8Ph0GGQQBNDJAQiIsDSVONyQZCAYRBAE7PAEaARsUSgYdTQQBFS8VBAE5Ii9MHzArBiMEARMUIxoGLx0tERcEASoBPS8gUSwEATcWFQQBOCMEARIdMBwhGQQBFRlDFRxLBhoBIylISwc3Ty0vQSMsSh4nPS8pCksdDysIBh4BFBcGBAEZFjAvKAYbBAIBTjBDIwEeAT0BFRUdSwYjBAEbGhs6Qx87FhkIDgZGHwgEATkaRjEIBAEVFUgfCg0jKCgGBAIBUUQjAR4BG0YeLTsGBAE5Rh4tRgYEARUVSCAvOAgNIygoBgQCAQRBA0RCQwNCQEQEUCMhAUEjAUEBLy0ZBAEVIjMOBhUaIQYEATkiPg4GLyMaIQYEARMiLjoZBiMaEwQBGRcYFwYbBAIBK2RhcnQ6YXN5bmMvYnJvYWRjYXN0X3N0cmVhbV9jb250cm9sbGVyLmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL2RlZmVycmVkX2xvYWQuZGFydIPOLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCi8qKgogKiBJbmRpY2F0ZXMgdGhhdCBsb2FkaW5nIG9mIFtsaWJyYXJ5TmFtZV0gaXMgZGVmZXJyZWQuCiAqCiAqIFRoaXMgY2xhc3MgaXMgb2Jzb2xldGUuIEluc3RlYWQgdXNlIHRoZSBzeW50YXg6CiAqIGltcG9ydCAibGlicmFyeS5kYXJ0IiBkZWZlcnJlZCBhcyBwcmVmaXg7CiAqLwpARGVwcmVjYXRlZCgiRGFydCBzZGsgdi4gMS44IikKY2xhc3MgRGVmZXJyZWRMaWJyYXJ5IHsKICBmaW5hbCBTdHJpbmcgbGlicmFyeU5hbWU7CiAgZmluYWwgU3RyaW5nIHVyaTsKCiAgY29uc3QgRGVmZXJyZWRMaWJyYXJ5KHRoaXMubGlicmFyeU5hbWUsIHt0aGlzLnVyaX0pOwoKICAvKioKICAgKiBFbnN1cmUgdGhhdCBbbGlicmFyeU5hbWVdIGhhcyBiZWVuIGxvYWRlZC4KICAgKgogICAqIElmIHRoZSBsaWJyYXJ5IGZhaWxzIHRvIGxvYWQsIHRoZSBGdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIGEKICAgKiBEZWZlcnJlZExvYWRFeGNlcHRpb24uCiAgICovCiAgZXh0ZXJuYWwgRnV0dXJlPE51bGw+IGxvYWQoKTsKfQoKLyoqCiAqIFRocm93biB3aGVuIGEgZGVmZXJyZWQgbGlicmFyeSBmYWlscyB0byBsb2FkLgogKi8KY2xhc3MgRGVmZXJyZWRMb2FkRXhjZXB0aW9uIGltcGxlbWVudHMgRXhjZXB0aW9uIHsKICBEZWZlcnJlZExvYWRFeGNlcHRpb24odGhpcy5fcyk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkRlZmVycmVkTG9hZEV4Y2VwdGlvbjogJyRfcyciOwogIGZpbmFsIFN0cmluZyBfczsKfQomAE5OPAEUAQQ4AzMtBB8YHBQBNwEGMAVDHAYgAgEEMQQzIjcTAgEdZGFydDphc3luYy9kZWZlcnJlZF9sb2FkLmRhcnQ4b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9kZWZlcnJlZF9sb2FkX3BhdGNoLmRhcnSCQi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJhc3luY19wYXRjaC5kYXJ0IjsKCmZpbmFsIFNldDxTdHJpbmc+IF9sb2FkZWRMaWJyYXJpZXMgPSBuZXcgU2V0PFN0cmluZz4oKTsKCkBwYXRjaApjbGFzcyBEZWZlcnJlZExpYnJhcnkgewogIEBwYXRjaAogIEZ1dHVyZTxOdWxsPiBsb2FkKCkgewogICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgZXZlbnR1YWxseSBiZSByZXBsYWNlZCBieSByZWFsCiAgICAvLyBpbXBsZW1lbnRhdGlvbi4KICAgIEZ1dHVyZSBmdXR1cmUgPSBuZXcgRnV0dXJlPE51bGw+LnZhbHVlKG51bGwpOwogICAgX2xvYWRlZExpYnJhcmllcy5hZGQobGlicmFyeU5hbWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9Cn0KFQBOTjwBHwE4AQcYCRhHFzInEwQCASlkYXJ0OmFzeW5jLXBhdGNoL2RlZmVycmVkX2xvYWRfcGF0Y2guZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvZnV0dXJlLmRhcnTAAIjnLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCi8vLyBBIHR5cGUgcmVwcmVzZW50aW5nIHZhbHVlcyB0aGF0IGFyZSBlaXRoZXIgYEZ1dHVyZTxUPmAgb3IgYFRgLgovLy8KLy8vIFRoaXMgY2xhc3MgZGVjbGFyYXRpb24gaXMgYSBwdWJsaWMgc3RhbmQtaW4gZm9yIGFuIGludGVybmFsCi8vLyBmdXR1cmUtb3ItdmFsdWUgZ2VuZXJpYyB0eXBlLiBSZWZlcmVuY2VzIHRvIHRoaXMgY2xhc3MgYXJlIHJlc29sdmVkIHRvIHRoZQovLy8gaW50ZXJuYWwgdHlwZS4KLy8vCi8vLyBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYW55IGNsYXNzIHRvIGV4dGVuZCwgbWl4IGluIG9yIGltcGxlbWVudAovLy8gYEZ1dHVyZU9yYC4KLy8vCi8vLyBOb3RlOiB0aGUgYEZ1dHVyZU9yPFQ+YCB0eXBlIGlzIGludGVycHJldGVkIGFzIGBkeW5hbWljYCBpbiBub24gc3Ryb25nLW1vZGUuCi8vLwovLy8gIyBFeGFtcGxlcwovLy8gYGBgIGRhcnQKLy8vIC8vIFRoZSBgRnV0dXJlPFQ+LnRoZW5gIGZ1bmN0aW9uIHRha2VzIGEgY2FsbGJhY2sgW2ZdIHRoYXQgcmV0dXJucyBlaXRoZXIKLy8vIC8vIGFuIGBTYCBvciBhIGBGdXR1cmU8Uz5gLgovLy8gRnV0dXJlPFM+IHRoZW48Uz4oRnV0dXJlT3I8Uz4gZihUIHgpLCAuLi4pOwovLy8KLy8vIC8vIGBDb21wbGV0ZXI8VD4uY29tcGxldGVgIHRha2VzIGVpdGhlciBhIGBUYCBvciBgRnV0dXJlPFQ+YC4KLy8vIHZvaWQgY29tcGxldGUoRnV0dXJlT3I8VD4gdmFsdWUpOwovLy8gYGBgCi8vLwovLy8gIyBBZHZhbmNlZAovLy8gVGhlIGBGdXR1cmVPcjxpbnQ+YCB0eXBlIGlzIGFjdHVhbGx5IHRoZSAidHlwZSB1bmlvbiIgb2YgdGhlIHR5cGVzIGBpbnRgIGFuZAovLy8gYEZ1dHVyZTxpbnQ+YC4gVGhpcyB0eXBlIHVuaW9uIGlzIGRlZmluZWQgaW4gc3VjaCBhIHdheSB0aGF0Ci8vLyBgRnV0dXJlT3I8T2JqZWN0PmAgaXMgYm90aCBhIHN1cGVyLSBhbmQgc3ViLXR5cGUgb2YgYE9iamVjdGAgKHN1Yi10eXBlCi8vLyBiZWNhdXNlIGBPYmplY3RgIGlzIG9uZSBvZiB0aGUgdHlwZXMgb2YgdGhlIHVuaW9uLCBzdXBlci10eXBlIGJlY2F1c2UKLy8vIGBPYmplY3RgIGlzIGEgc3VwZXItdHlwZSBvZiBib3RoIG9mIHRoZSB0eXBlcyBvZiB0aGUgdW5pb24pLiBUb2dldGhlciBpdAovLy8gbWVhbnMgdGhhdCBgRnV0dXJlT3I8T2JqZWN0PmAgaXMgZXF1aXZhbGVudCB0byBgT2JqZWN0YC4KLy8vCi8vLyBBcyBhIGNvcm9sbGFyeSwgYEZ1dHVyZU9yPE9iamVjdD5gIGlzIGVxdWl2YWxlbnQgdG8KLy8vIGBGdXR1cmVPcjxGdXR1cmVPcjxPYmplY3Q+PmAsIGBGdXR1cmVPcjxGdXR1cmU8T2JqZWN0Pj5gIGlzIGVxdWl2YWxlbnQgdG8KLy8vIGBGdXR1cmU8T2JqZWN0PmAuCmFic3RyYWN0IGNsYXNzIEZ1dHVyZU9yPFQ+IHsKICAvLyBQcml2YXRlIGdlbmVyYXRpdmUgY29uc3RydWN0b3IsIHNvIHRoYXQgaXQgaXMgbm90IHN1YmNsYXNzYWJsZSwgbWl4YWJsZSwgb3IKICAvLyBpbnN0YW50aWFibGUuCiAgRnV0dXJlT3IuXygpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJGdXR1cmVPciBjYW4ndCBiZSBpbnN0YW50aWF0ZWQiKTsKICB9Cn0KCi8qKgogKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZGVsYXllZCBjb21wdXRhdGlvbi4KICoKICogQSBbRnV0dXJlXSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIHBvdGVudGlhbCB2YWx1ZSwgb3IgZXJyb3IsCiAqIHRoYXQgd2lsbCBiZSBhdmFpbGFibGUgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuCiAqIFJlY2VpdmVycyBvZiBhIFtGdXR1cmVdIGNhbiByZWdpc3RlciBjYWxsYmFja3MKICogdGhhdCBoYW5kbGUgdGhlIHZhbHVlIG9yIGVycm9yIG9uY2UgaXQgaXMgYXZhaWxhYmxlLgogKiBGb3IgZXhhbXBsZToKICoKICogICAgIEZ1dHVyZTxpbnQ+IGZ1dHVyZSA9IGdldEZ1dHVyZSgpOwogKiAgICAgZnV0dXJlLnRoZW4oKHZhbHVlKSA9PiBoYW5kbGVWYWx1ZSh2YWx1ZSkpCiAqICAgICAgICAgICAuY2F0Y2hFcnJvcigoZXJyb3IpID0+IGhhbmRsZUVycm9yKGVycm9yKSk7CiAqCiAqIEEgW0Z1dHVyZV0gY2FuIGJlIGNvbXBsZXRlZCBpbiB0d28gd2F5czoKICogd2l0aCBhIHZhbHVlICgidGhlIGZ1dHVyZSBzdWNjZWVkcyIpCiAqIG9yIHdpdGggYW4gZXJyb3IgKCJ0aGUgZnV0dXJlIGZhaWxzIikuCiAqIFVzZXJzIGNhbiBpbnN0YWxsIGNhbGxiYWNrcyBmb3IgZWFjaCBjYXNlLgogKgogKiBJbiBzb21lIGNhc2VzIHdlIHNheSB0aGF0IGEgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGFub3RoZXIgZnV0dXJlLgogKiBUaGlzIGlzIGEgc2hvcnQgd2F5IG9mIHN0YXRpbmcgdGhhdCB0aGUgZnV0dXJlIGlzIGNvbXBsZXRlZCBpbiB0aGUgc2FtZSB3YXksCiAqIHdpdGggdGhlIHNhbWUgdmFsdWUgb3IgZXJyb3IsCiAqIGFzIHRoZSBvdGhlciBmdXR1cmUgb25jZSB0aGF0IGNvbXBsZXRlcy4KICogV2hlbmV2ZXIgYSBmdW5jdGlvbiBpbiB0aGUgY29yZSBsaWJyYXJ5IG1heSBjb21wbGV0ZSBhIGZ1dHVyZQogKiAoZm9yIGV4YW1wbGUgW0NvbXBsZXRlci5jb21wbGV0ZV0gb3IgW25ldyBGdXR1cmUudmFsdWVdKSwKICogdGhlbiBpdCBhbHNvIGFjY2VwdHMgYW5vdGhlciBmdXR1cmUgYW5kIGRvZXMgdGhpcyB3b3JrIGZvciB0aGUgZGV2ZWxvcGVyLgogKgogKiBUaGUgcmVzdWx0IG9mIHJlZ2lzdGVyaW5nIGEgcGFpciBvZiBjYWxsYmFja3MgaXMgYSBuZXcgRnV0dXJlICh0aGUKICogInN1Y2Nlc3NvciIpIHdoaWNoIGluIHR1cm4gaXMgY29tcGxldGVkIHdpdGggdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUKICogY29ycmVzcG9uZGluZyBjYWxsYmFjay4KICogVGhlIHN1Y2Nlc3NvciBpcyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciBpZiB0aGUgaW52b2tlZCBjYWxsYmFjayB0aHJvd3MuCiAqIEZvciBleGFtcGxlOgogKiBgYGAKICogRnV0dXJlPGludD4gc3VjY2Vzc29yID0gZnV0dXJlLnRoZW4oKGludCB2YWx1ZSkgewogKiAgICAgLy8gSW52b2tlZCB3aGVuIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYSB2YWx1ZS4KICogICAgIHJldHVybiA0MjsgIC8vIFRoZSBzdWNjZXNzb3IgaXMgY29tcGxldGVkIHdpdGggdGhlIHZhbHVlIDQyLgogKiAgIH0sCiAqICAgb25FcnJvcjogKGUpIHsKICogICAgIC8vIEludm9rZWQgd2hlbiB0aGUgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yLgogKiAgICAgaWYgKGNhbkhhbmRsZShlKSkgewogKiAgICAgICByZXR1cm4gNDk5OyAgLy8gVGhlIHN1Y2Nlc3NvciBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgdmFsdWUgNDk5LgogKiAgICAgfSBlbHNlIHsKICogICAgICAgdGhyb3cgZTsgIC8vIFRoZSBzdWNjZXNzb3IgaXMgY29tcGxldGVkIHdpdGggdGhlIGVycm9yIGUuCiAqICAgICB9CiAqICAgfSk7CiAqIGBgYAogKgogKiBJZiBhIGZ1dHVyZSBkb2VzIG5vdCBoYXZlIGEgc3VjY2Vzc29yIHdoZW4gaXQgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsCiAqIGl0IGZvcndhcmRzIHRoZSBlcnJvciBtZXNzYWdlIHRvIHRoZSBnbG9iYWwgZXJyb3ItaGFuZGxlci4KICogVGhpcyBiZWhhdmlvciBtYWtlcyBzdXJlIHRoYXQgbm8gZXJyb3IgaXMgc2lsZW50bHkgZHJvcHBlZC4KICogSG93ZXZlciwgaXQgYWxzbyBtZWFucyB0aGF0IGVycm9yIGhhbmRsZXJzIHNob3VsZCBiZSBpbnN0YWxsZWQgZWFybHksCiAqIHNvIHRoYXQgdGhleSBhcmUgcHJlc2VudCBhcyBzb29uIGFzIGEgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yLgogKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoaXMgcG90ZW50aWFsIGJ1ZzoKICogYGBgCiAqIHZhciBmdXR1cmUgPSBnZXRGdXR1cmUoKTsKICogbmV3IFRpbWVyKG5ldyBEdXJhdGlvbihtaWxsaXNlY29uZHM6IDUpLCAoKSB7CiAqICAgLy8gVGhlIGVycm9yLWhhbmRsZXIgaXMgbm90IGF0dGFjaGVkIHVudGlsIDUgbXMgYWZ0ZXIgdGhlIGZ1dHVyZSBoYXMKICogICAvLyBiZWVuIHJlY2VpdmVkLiBJZiB0aGUgZnV0dXJlIGZhaWxzIGJlZm9yZSB0aGF0LCB0aGUgZXJyb3IgaXMKICogICAvLyBmb3J3YXJkZWQgdG8gdGhlIGdsb2JhbCBlcnJvci1oYW5kbGVyLCBldmVuIHRob3VnaCB0aGVyZSBpcyBjb2RlCiAqICAgLy8gKGp1c3QgYmVsb3cpIHRvIGV2ZW50dWFsbHkgaGFuZGxlIHRoZSBlcnJvci4KICogICBmdXR1cmUudGhlbigodmFsdWUpIHsgdXNlVmFsdWUodmFsdWUpOyB9LAogKiAgICAgICAgICAgICAgIG9uRXJyb3I6IChlKSB7IGhhbmRsZUVycm9yKGUpOyB9KTsKICogfSk7CiAqIGBgYAogKgogKiBXaGVuIHJlZ2lzdGVyaW5nIGNhbGxiYWNrcywgaXQncyBvZnRlbiBtb3JlIHJlYWRhYmxlIHRvIHJlZ2lzdGVyIHRoZSB0d28KICogY2FsbGJhY2tzIHNlcGFyYXRlbHksIGJ5IGZpcnN0IHVzaW5nIFt0aGVuXSB3aXRoIG9uZSBhcmd1bWVudAogKiAodGhlIHZhbHVlIGhhbmRsZXIpIGFuZCB1c2luZyBhIHNlY29uZCBbY2F0Y2hFcnJvcl0gZm9yIGhhbmRsaW5nIGVycm9ycy4KICogRWFjaCBvZiB0aGVzZSB3aWxsIGZvcndhcmQgdGhlIHJlc3VsdCB0aGF0IHRoZXkgZG9uJ3QgaGFuZGxlCiAqIHRvIHRoZWlyIHN1Y2Nlc3NvcnMsIGFuZCB0b2dldGhlciB0aGV5IGhhbmRsZSBib3RoIHZhbHVlIGFuZCBlcnJvciByZXN1bHQuCiAqIEl0IGFsc28gaGFzIHRoZSBhZGRpdGlvbmFsIGJlbmVmaXQgb2YgdGhlIFtjYXRjaEVycm9yXSBoYW5kbGluZyBlcnJvcnMgaW4gdGhlCiAqIFt0aGVuXSB2YWx1ZSBjYWxsYmFjayB0b28uCiAqIFVzaW5nIHNlcXVlbnRpYWwgaGFuZGxlcnMgaW5zdGVhZCBvZiBwYXJhbGxlbCBvbmVzIG9mdGVuIGxlYWRzIHRvIGNvZGUgdGhhdAogKiBpcyBlYXNpZXIgdG8gcmVhc29uIGFib3V0LgogKiBJdCBhbHNvIG1ha2VzIGFzeW5jaHJvbm91cyBjb2RlIHZlcnkgc2ltaWxhciB0byBzeW5jaHJvbm91cyBjb2RlOgogKiBgYGAKICogLy8gU3luY2hyb25vdXMgY29kZS4KICogdHJ5IHsKICogICBpbnQgdmFsdWUgPSBmb28oKTsKICogICByZXR1cm4gYmFyKHZhbHVlKTsKICogfSBjYXRjaCAoZSkgewogKiAgIHJldHVybiA0OTk7CiAqIH0KICogYGBgCiAqCiAqIEVxdWl2YWxlbnQgYXN5bmNocm9ub3VzIGNvZGUsIGJhc2VkIG9uIGZ1dHVyZXM6CiAqIGBgYAogKiBGdXR1cmU8aW50PiBmdXR1cmUgPSBuZXcgRnV0dXJlKGZvbyk7ICAvLyBSZXN1bHQgb2YgZm9vKCkgYXMgYSBmdXR1cmUuCiAqIGZ1dHVyZS50aGVuKChpbnQgdmFsdWUpID0+IGJhcih2YWx1ZSkpCiAqICAgICAgIC5jYXRjaEVycm9yKChlKSA9PiA0OTkpOwogKiBgYGAKICoKICogU2ltaWxhciB0byB0aGUgc3luY2hyb25vdXMgY29kZSwgdGhlIGVycm9yIGhhbmRsZXIgKHJlZ2lzdGVyZWQgd2l0aAogKiBbY2F0Y2hFcnJvcl0pIGlzIGhhbmRsaW5nIGFueSBlcnJvcnMgdGhyb3duIGJ5IGVpdGhlciBgZm9vYCBvciBgYmFyYC4KICogSWYgdGhlIGVycm9yLWhhbmRsZXIgaGFkIGJlZW4gcmVnaXN0ZXJlZCBhcyB0aGUgYG9uRXJyb3JgIHBhcmFtZXRlciBvZgogKiB0aGUgYHRoZW5gIGNhbGwsIGl0IHdvdWxkIG5vdCBjYXRjaCBlcnJvcnMgZnJvbSB0aGUgYGJhcmAgY2FsbC4KICoKICogRnV0dXJlcyBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIGNhbGxiYWNrLXBhaXIgcmVnaXN0ZXJlZC4gRWFjaCBzdWNjZXNzb3IgaXMKICogdHJlYXRlZCBpbmRlcGVuZGVudGx5IGFuZCBpcyBoYW5kbGVkIGFzIGlmIGl0IHdhcyB0aGUgb25seSBzdWNjZXNzb3IuCiAqCiAqIEEgZnV0dXJlIG1heSBhbHNvIGZhaWwgdG8gZXZlciBjb21wbGV0ZS4gSW4gdGhhdCBjYXNlLCBubyBjYWxsYmFja3MgYXJlCiAqIGNhbGxlZC4KICovCmFic3RyYWN0IGNsYXNzIEZ1dHVyZTxUPiB7CiAgLy8vIEEgYEZ1dHVyZTxOdWxsPmAgY29tcGxldGVkIHdpdGggYG51bGxgLgogIHN0YXRpYyBmaW5hbCBfRnV0dXJlPE51bGw+IF9udWxsRnV0dXJlID0KICAgICAgbmV3IF9GdXR1cmU8TnVsbD4uem9uZVZhbHVlKG51bGwsIFpvbmUucm9vdCk7CgogIC8vLyBBIGBGdXR1cmU8Ym9vbD5gIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAuCiAgc3RhdGljIGZpbmFsIF9GdXR1cmU8Ym9vbD4gX2ZhbHNlRnV0dXJlID0KICAgICAgbmV3IF9GdXR1cmU8Ym9vbD4uem9uZVZhbHVlKGZhbHNlLCBab25lLnJvb3QpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgZnV0dXJlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFtjb21wdXRhdGlvbl0KICAgKiBhc3luY2hyb25vdXNseSB3aXRoIFtUaW1lci5ydW5dLgogICAqCiAgICogSWYgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgW2NvbXB1dGF0aW9uXSB0aHJvd3MsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMKICAgKiBjb21wbGV0ZWQgd2l0aCB0aGUgZXJyb3IuCiAgICoKICAgKiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgaXRzZWxmIGEgW0Z1dHVyZV0sIGNvbXBsZXRpb24gb2YKICAgKiB0aGUgY3JlYXRlZCBmdXR1cmUgd2lsbCB3YWl0IHVudGlsIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzLAogICAqIGFuZCB3aWxsIHRoZW4gY29tcGxldGUgd2l0aCB0aGUgc2FtZSByZXN1bHQuCiAgICoKICAgKiBJZiBhIG5vbi1mdXR1cmUgdmFsdWUgaXMgcmV0dXJuZWQsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkCiAgICogd2l0aCB0aGF0IHZhbHVlLgogICAqLwogIGZhY3RvcnkgRnV0dXJlKEZ1dHVyZU9yPFQ+IGNvbXB1dGF0aW9uKCkpIHsKICAgIF9GdXR1cmU8VD4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIFRpbWVyLnJ1bigoKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZShjb21wdXRhdGlvbigpKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKHJlc3VsdCwgZSwgcyk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBmdXR1cmUgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW2NvbXB1dGF0aW9uXQogICAqIGFzeW5jaHJvbm91c2x5IHdpdGggW3NjaGVkdWxlTWljcm90YXNrXS4KICAgKgogICAqIElmIGV4ZWN1dGluZyBbY29tcHV0YXRpb25dIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSB0aHJvd24gZXJyb3IuCiAgICoKICAgKiBJZiBjYWxsaW5nIFtjb21wdXRhdGlvbl0gcmV0dXJucyBhIFtGdXR1cmVdLCBjb21wbGV0aW9uIG9mCiAgICogdGhlIGNyZWF0ZWQgZnV0dXJlIHdpbGwgd2FpdCB1bnRpbCB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcywKICAgKiBhbmQgd2lsbCB0aGVuIGNvbXBsZXRlIHdpdGggdGhlIHNhbWUgcmVzdWx0LgogICAqCiAgICogSWYgY2FsbGluZyBbY29tcHV0YXRpb25dIHJldHVybnMgYSBub24tZnV0dXJlIHZhbHVlLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCB2YWx1ZS4KICAgKi8KICBmYWN0b3J5IEZ1dHVyZS5taWNyb3Rhc2soRnV0dXJlT3I8VD4gY29tcHV0YXRpb24oKSkgewogICAgX0Z1dHVyZTxUPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICB0cnkgewogICAgICAgIHJlc3VsdC5fY29tcGxldGUoY29tcHV0YXRpb24oKSk7CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhyZXN1bHQsIGUsIHMpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgZnV0dXJlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBpbW1lZGlhdGVseSBjYWxsaW5nCiAgICogW2NvbXB1dGF0aW9uXS4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSB0aHJvd3MsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlCiAgICogZXJyb3IuCiAgICoKICAgKiBJZiBjYWxsaW5nIFtjb21wdXRhdGlvbl0gcmV0dXJucyBhIGBGdXR1cmU8VD5gLCB0aGF0IGZ1dHVyZSBpcyByZXR1cm5lZC4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSByZXR1cm5zIGEgbm9uLWZ1dHVyZSB2YWx1ZSwKICAgKiBhIGZ1dHVyZSBpcyByZXR1cm5lZCB3aGljaCBoYXMgYmVlbiBjb21wbGV0ZWQgd2l0aCB0aGF0IHZhbHVlLgogICAqLwogIGZhY3RvcnkgRnV0dXJlLnN5bmMoRnV0dXJlT3I8VD4gY29tcHV0YXRpb24oKSkgewogICAgdHJ5IHsKICAgICAgdmFyIHJlc3VsdCA9IGNvbXB1dGF0aW9uKCk7CiAgICAgIGlmIChyZXN1bHQgaXMgRnV0dXJlPFQ+KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IF9GdXR1cmU8VD4udmFsdWUocmVzdWx0KTsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgdmFyIGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICAgIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgICAgZnV0dXJlLl9hc3luY0NvbXBsZXRlRXJyb3IoCiAgICAgICAgICAgIF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpLCByZXBsYWNlbWVudC5zdGFja1RyYWNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmdXR1cmUuX2FzeW5jQ29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZ1dHVyZTsKICAgIH0KICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBmdXR1cmUgY29tcGxldGVkIHdpdGggW3ZhbHVlXS4KICAgKgogICAqIElmIFt2YWx1ZV0gaXMgYSBmdXR1cmUsIHRoZSBjcmVhdGVkIGZ1dHVyZSB3YWl0cyBmb3IgdGhlCiAgICogW3ZhbHVlXSBmdXR1cmUgdG8gY29tcGxldGUsIGFuZCB0aGVuIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIHJlc3VsdC4KICAgKiBTaW5jZSBhIFt2YWx1ZV0gZnV0dXJlIGNhbiBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLCBzbyBjYW4gdGhlIGZ1dHVyZQogICAqIGNyZWF0ZWQgYnkgW0Z1dHVyZS52YWx1ZV0sIGV2ZW4gaWYgdGhlIG5hbWUgc3VnZ2VzdHMgb3RoZXJ3aXNlLgogICAqCiAgICogSWYgW3ZhbHVlXSBpcyBub3QgYSBbRnV0dXJlXSwgdGhlIGNyZWF0ZWQgZnV0dXJlIGlzIGNvbXBsZXRlZAogICAqIHdpdGggdGhlIFt2YWx1ZV0gdmFsdWUsCiAgICogZXF1aXZhbGVudGx5IHRvIGBuZXcgRnV0dXJlPFQ+LnN5bmMoKCkgPT4gdmFsdWUpYC4KICAgKgogICAqIFVzZSBbQ29tcGxldGVyXSB0byBjcmVhdGUgYSBmdXR1cmUgYW5kIGNvbXBsZXRlIGl0IGxhdGVyLgogICAqLwogIGZhY3RvcnkgRnV0dXJlLnZhbHVlKFtGdXR1cmVPcjxUPiB2YWx1ZV0pIHsKICAgIHJldHVybiBuZXcgX0Z1dHVyZTxUPi5pbW1lZGlhdGUodmFsdWUpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLgogICAqCiAgICogVGhlIGNyZWF0ZWQgZnV0dXJlIHdpbGwgYmUgY29tcGxldGVkIHdpdGggYW4gZXJyb3IgaW4gYSBmdXR1cmUgbWljcm90YXNrLgogICAqIFRoaXMgYWxsb3dzIGVub3VnaCB0aW1lIGZvciBzb21lb25lIHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIG9uIHRoZSBmdXR1cmUuCiAgICogSWYgYW4gZXJyb3IgaGFuZGxlciBpc24ndCBhZGRlZCBiZWZvcmUgdGhlIGZ1dHVyZSBjb21wbGV0ZXMsIHRoZSBlcnJvcgogICAqIHdpbGwgYmUgY29uc2lkZXJlZCB1bmhhbmRsZWQuCiAgICoKICAgKiBJZiBbZXJyb3JdIGlzIGBudWxsYCwgaXQgaXMgcmVwbGFjZWQgYnkgYSBbTnVsbFRocm93bkVycm9yXS4KICAgKgogICAqIFVzZSBbQ29tcGxldGVyXSB0byBjcmVhdGUgYSBmdXR1cmUgYW5kIGNvbXBsZXRlIGl0IGxhdGVyLgogICAqLwogIGZhY3RvcnkgRnV0dXJlLmVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihlcnJvcik7CiAgICBpZiAoIWlkZW50aWNhbChab25lLmN1cnJlbnQsIF9yb290Wm9uZSkpIHsKICAgICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpOwogICAgICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IF9GdXR1cmU8VD4uaW1tZWRpYXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGZ1dHVyZSB0aGF0IHJ1bnMgaXRzIGNvbXB1dGF0aW9uIGFmdGVyIGEgZGVsYXkuCiAgICoKICAgKiBUaGUgW2NvbXB1dGF0aW9uXSB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBnaXZlbiBbZHVyYXRpb25dIGhhcyBwYXNzZWQsCiAgICogYW5kIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgY29tcHV0YXRpb24uCiAgICoKICAgKiBJZiBbY29tcHV0YXRpb25dIHJldHVybnMgYSBmdXR1cmUsCiAgICogdGhlIGZ1dHVyZSByZXR1cm5lZCBieSB0aGlzIGNvbnN0cnVjdG9yIHdpbGwgY29tcGxldGUgd2l0aCB0aGUgdmFsdWUgb3IKICAgKiBlcnJvciBvZiB0aGF0IGZ1dHVyZS4KICAgKgogICAqIElmIHRoZSBkdXJhdGlvbiBpcyAwIG9yIGxlc3MsCiAgICogaXQgY29tcGxldGVzIG5vIHNvb25lciB0aGFuIGluIHRoZSBuZXh0IGV2ZW50LWxvb3AgaXRlcmF0aW9uLAogICAqIGFmdGVyIGFsbCBtaWNyb3Rhc2tzIGhhdmUgcnVuLgogICAqCiAgICogSWYgW2NvbXB1dGF0aW9uXSBpcyBvbWl0dGVkLAogICAqIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBpZiBbY29tcHV0YXRpb25dIHdhcyBgKCkgPT4gbnVsbGAsCiAgICogYW5kIHRoZSBmdXR1cmUgd2lsbCBldmVudHVhbGx5IGNvbXBsZXRlIHdpdGggdGhlIGBudWxsYCB2YWx1ZS4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSB0aHJvd3MsIHRoZSBjcmVhdGVkIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggdGhlCiAgICogZXJyb3IuCiAgICoKICAgKiBTZWUgYWxzbyBbQ29tcGxldGVyXSBmb3IgYSB3YXkgdG8gY3JlYXRlIGFuZCBjb21wbGV0ZSBhIGZ1dHVyZSBhdCBhCiAgICogbGF0ZXIgdGltZSB0aGF0IGlzbid0IG5lY2Vzc2FyaWx5IGFmdGVyIGEga25vd24gZml4ZWQgZHVyYXRpb24uCiAgICovCiAgZmFjdG9yeSBGdXR1cmUuZGVsYXllZChEdXJhdGlvbiBkdXJhdGlvbiwgW0Z1dHVyZU9yPFQ+IGNvbXB1dGF0aW9uKCldKSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBuZXcgVGltZXIoZHVyYXRpb24sICgpIHsKICAgICAgaWYgKGNvbXB1dGF0aW9uID09IG51bGwpIHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlKG51bGwpOwogICAgICB9IGVsc2UgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlKGNvbXB1dGF0aW9uKCkpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKHJlc3VsdCwgZSwgcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBXYWl0cyBmb3IgbXVsdGlwbGUgZnV0dXJlcyB0byBjb21wbGV0ZSBhbmQgY29sbGVjdHMgdGhlaXIgcmVzdWx0cy4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggd2lsbCBjb21wbGV0ZSBvbmNlIGFsbCB0aGUgcHJvdmlkZWQgZnV0dXJlcwogICAqIGhhdmUgY29tcGxldGVkLCBlaXRoZXIgd2l0aCB0aGVpciByZXN1bHRzLCBvciB3aXRoIGFuIGVycm9yIGlmIGFueQogICAqIG9mIHRoZSBwcm92aWRlZCBmdXR1cmVzIGZhaWwuCiAgICoKICAgKiBUaGUgdmFsdWUgb2YgdGhlIHJldHVybmVkIGZ1dHVyZSB3aWxsIGJlIGEgbGlzdCBvZiBhbGwgdGhlIHZhbHVlcyB0aGF0CiAgICogd2VyZSBwcm9kdWNlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGUgZnV0dXJlcyBhcmUgcHJvdmlkZWQgYnkgaXRlcmF0aW5nCiAgICogW2Z1dHVyZXNdLgogICAqCiAgICogSWYgYW55IGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwKICAgKiB0aGVuIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggdGhhdCBlcnJvci4KICAgKiBJZiBmdXJ0aGVyIGZ1dHVyZXMgYWxzbyBjb21wbGV0ZSB3aXRoIGVycm9ycywgdGhvc2UgZXJyb3JzIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBJZiBgZWFnZXJFcnJvcmAgaXMgdHJ1ZSwgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvcgogICAqIGltbWVkaWF0ZWx5IG9uIHRoZSBmaXJzdCBlcnJvciBmcm9tIG9uZSBvZiB0aGUgZnV0dXJlcy4gT3RoZXJ3aXNlIGFsbAogICAqIGZ1dHVyZXMgbXVzdCBjb21wbGV0ZSBiZWZvcmUgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgKHN0aWxsIHdpdGgKICAgKiB0aGUgZmlyc3QgZXJyb3I7IHRoZSByZW1haW5pbmcgZXJyb3JzIGFyZSBzaWxlbnRseSBkcm9wcGVkKS4KICAgKgogICAqIEluIHRoZSBjYXNlIG9mIGFuIGVycm9yLCBbY2xlYW5VcF0gKGlmIHByb3ZpZGVkKSwgaXMgaW52b2tlZCBvbiBhbnkKICAgKiBub24tbnVsbCByZXN1bHQgb2Ygc3VjY2Vzc2Z1bCBmdXR1cmVzLgogICAqIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gYGNsZWFuVXBgIHJlc291cmNlcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZQogICAqIGxvc3QgKHNpbmNlIHRoZSByZXR1cm5lZCBmdXR1cmUgZG9lcyBub3QgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlc2UgdmFsdWVzKS4KICAgKiBUaGUgW2NsZWFuVXBdIGZ1bmN0aW9uIGlzIHVudXNlZCBpZiB0aGVyZSBpcyBubyBlcnJvci4KICAgKgogICAqIFRoZSBjYWxsIHRvIFtjbGVhblVwXSBzaG91bGQgbm90IHRocm93LiBJZiBpdCBkb2VzLCB0aGUgZXJyb3Igd2lsbCBiZSBhbgogICAqIHVuY2F1Z2h0IGFzeW5jaHJvbm91cyBlcnJvci4KICAgKi8KICBzdGF0aWMgRnV0dXJlPExpc3Q8VD4+IHdhaXQ8VD4oSXRlcmFibGU8RnV0dXJlPFQ+PiBmdXR1cmVzLAogICAgICB7Ym9vbCBlYWdlckVycm9yOiBmYWxzZSwgdm9pZCBjbGVhblVwKFQgc3VjY2Vzc1ZhbHVlKX0pIHsKICAgIGZpbmFsIF9GdXR1cmU8TGlzdDxUPj4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8TGlzdDxUPj4oKTsKICAgIExpc3Q8VD4gdmFsdWVzOyAvLyBDb2xsZWN0cyB0aGUgdmFsdWVzLiBTZXQgdG8gbnVsbCBvbiBlcnJvci4KICAgIGludCByZW1haW5pbmcgPSAwOyAvLyBIb3cgbWFueSBmdXR1cmVzIGFyZSB3ZSB3YWl0aW5nIGZvci4KICAgIHZhciBlcnJvcjsgLy8gVGhlIGZpcnN0IGVycm9yIGZyb20gYSBmdXR1cmUuCiAgICBTdGFja1RyYWNlIHN0YWNrVHJhY2U7IC8vIFRoZSBzdGFja1RyYWNlIHRoYXQgY2FtZSB3aXRoIHRoZSBlcnJvci4KCiAgICAvLyBIYW5kbGUgYW4gZXJyb3IgZnJvbSBhbnkgb2YgdGhlIGZ1dHVyZXMuCiAgICAvLyBUT0RPKGptZXNzZXJseSk6IHVzZSBgdm9pZGAgcmV0dXJuIHR5cGUgb25jZSBpdCBjYW4gYmUgaW5mZXJyZWQgZm9yIHRoZQogICAgLy8gYHRoZW5gIGNhbGwgYmVsb3cuCiAgICBoYW5kbGVFcnJvcih0aGVFcnJvciwgU3RhY2tUcmFjZSB0aGVTdGFja1RyYWNlKSB7CiAgICAgIHJlbWFpbmluZy0tOwogICAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgICBpZiAoY2xlYW5VcCAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKHZhciB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICAvLyBFbnN1cmUgZXJyb3JzIGZyb20gY2xlYW5VcCBhcmUgdW5jYXVnaHQuCiAgICAgICAgICAgICAgbmV3IEZ1dHVyZS5zeW5jKCgpIHsKICAgICAgICAgICAgICAgIGNsZWFuVXAodmFsdWUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhbHVlcyA9IG51bGw7CiAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwIHx8IGVhZ2VyRXJyb3IpIHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcih0aGVFcnJvciwgdGhlU3RhY2tUcmFjZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVycm9yID0gdGhlRXJyb3I7CiAgICAgICAgICBzdGFja1RyYWNlID0gdGhlU3RhY2tUcmFjZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocmVtYWluaW5nID09IDAgJiYgIWVhZ2VyRXJyb3IpIHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9CiAgICB9CgogICAgdHJ5IHsKICAgICAgLy8gQXMgZWFjaCBmdXR1cmUgY29tcGxldGVzLCBwdXQgaXRzIHZhbHVlIGludG8gdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgLy8gcG9zaXRpb24gaW4gdGhlIGxpc3Qgb2YgdmFsdWVzLgogICAgICBmb3IgKHZhciBmdXR1cmUgaW4gZnV0dXJlcykgewogICAgICAgIGludCBwb3MgPSByZW1haW5pbmc7CiAgICAgICAgZnV0dXJlLnRoZW4oKFQgdmFsdWUpIHsKICAgICAgICAgIHJlbWFpbmluZy0tOwogICAgICAgICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgICAgICAgIHZhbHVlc1twb3NdID0gdmFsdWU7CiAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPT0gMCkgewogICAgICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVXaXRoVmFsdWUodmFsdWVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGNsZWFuVXAgIT0gbnVsbCAmJiB2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgLy8gRW5zdXJlIGVycm9ycyBmcm9tIGNsZWFuVXAgYXJlIHVuY2F1Z2h0LgogICAgICAgICAgICAgIG5ldyBGdXR1cmUuc3luYygoKSB7CiAgICAgICAgICAgICAgICBjbGVhblVwKHZhbHVlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVtYWluaW5nID09IDAgJiYgIWVhZ2VyRXJyb3IpIHsKICAgICAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwgb25FcnJvcjogaGFuZGxlRXJyb3IpOwogICAgICAgIC8vIEluY3JlbWVudCB0aGUgJ3JlbWFpbmluZycgYWZ0ZXIgdGhlIGNhbGwgdG8gJ3RoZW4nLgogICAgICAgIC8vIElmIHRoYXQgY2FsbCB0aHJvd3MsIHdlIGRvbid0IGV4cGVjdCBhbnkgZnV0dXJlIGNhbGxiYWNrIGZyb20KICAgICAgICAvLyB0aGUgZnV0dXJlLCBhbmQgd2UgYWxzbyBkb24ndCBpbmNyZW1lbnQgcmVtYWluaW5nLgogICAgICAgIHJlbWFpbmluZysrOwogICAgICB9CiAgICAgIGlmIChyZW1haW5pbmcgPT0gMCkgewogICAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKGNvbnN0IFtdKTsKICAgICAgfQogICAgICB2YWx1ZXMgPSBuZXcgTGlzdDxUPihyZW1haW5pbmcpOwogICAgfSBjYXRjaCAoZSwgc3QpIHsKICAgICAgLy8gVGhlIGVycm9yIG11c3QgaGF2ZSBiZWVuIHRocm93biB3aGlsZSBpdGVyYXRpbmcgb3ZlciB0aGUgZnV0dXJlcwogICAgICAvLyBsaXN0LCBvciB3aGlsZSBpbnN0YWxsaW5nIGEgY2FsbGJhY2sgaGFuZGxlciBvbiB0aGUgZnV0dXJlLgogICAgICBpZiAocmVtYWluaW5nID09IDAgfHwgZWFnZXJFcnJvcikgewogICAgICAgIC8vIFRocm93IGEgbmV3IEZ1dHVyZS5lcnJvci4KICAgICAgICAvLyBEb24ndCBqdXN0IGNhbGwgYHJlc3VsdC5fY29tcGxldGVFcnJvcmAgc2luY2UgdGhhdCB3b3VsZCBwcm9wYWdhdGUKICAgICAgICAvLyB0aGUgZXJyb3IgdG9vIGVhZ2VybHksIG5vdCBnaXZpbmcgdGhlIGNhbGxlcnMgdGltZSB0byBpbnN0YWxsCiAgICAgICAgLy8gZXJyb3IgaGFuZGxlcnMuCiAgICAgICAgLy8gQWxzbywgZG9uJ3QgdXNlIGBfYXN5bmNDb21wbGV0ZUVycm9yYCBzaW5jZSB0aGF0IG9uZSBkb2Vzbid0IGdpdmUKICAgICAgICAvLyB6b25lcyB0aGUgY2hhbmNlIHRvIGludGVyY2VwdCB0aGUgZXJyb3IuCiAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZSwgc3QpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIERvbid0IGFsbG9jYXRlIGEgbGlzdCBmb3IgdmFsdWVzLCB0aHVzIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3YXMgYW4KICAgICAgICAvLyBlcnJvci4KICAgICAgICAvLyBTZXQgZXJyb3IgdG8gdGhlIGNhdWdodCBleGNlcHRpb24uCiAgICAgICAgZXJyb3IgPSBlOwogICAgICAgIHN0YWNrVHJhY2UgPSBzdDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3QgZnV0dXJlIGluIFtmdXR1cmVzXSB0byBjb21wbGV0ZS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3QKICAgKiBmdXR1cmUgaW4gW2Z1dHVyZXNdIHRvIHJlcG9ydCB0aGF0IGl0IGlzIGNvbXBsZXRlLAogICAqIHdoZXRoZXIgaXQncyB3aXRoIGEgdmFsdWUgb3IgYW4gZXJyb3IuCiAgICogVGhlIHJlc3VsdHMgb2YgYWxsIHRoZSBvdGhlciBmdXR1cmVzIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBJZiBbZnV0dXJlc10gaXMgZW1wdHksIG9yIGlmIG5vbmUgb2YgaXRzIGZ1dHVyZXMgY29tcGxldGUsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBuZXZlciBjb21wbGV0ZXMuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxUPiBhbnk8VD4oSXRlcmFibGU8RnV0dXJlPFQ+PiBmdXR1cmVzKSB7CiAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxUPi5zeW5jKCk7CiAgICB2YXIgb25WYWx1ZSA9IChUIHZhbHVlKSB7CiAgICAgIGlmICghY29tcGxldGVyLmlzQ29tcGxldGVkKSBjb21wbGV0ZXIuY29tcGxldGUodmFsdWUpOwogICAgfTsKICAgIHZhciBvbkVycm9yID0gKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrKSB7CiAgICAgIGlmICghY29tcGxldGVyLmlzQ29tcGxldGVkKSBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2spOwogICAgfTsKICAgIGZvciAodmFyIGZ1dHVyZSBpbiBmdXR1cmVzKSB7CiAgICAgIGZ1dHVyZS50aGVuKG9uVmFsdWUsIG9uRXJyb3I6IG9uRXJyb3IpOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICAvKioKICAgKiBQZXJmb3JtcyBhbiBhY3Rpb24gZm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgaXRlcmFibGUsIGluIHR1cm4uCiAgICoKICAgKiBUaGUgW2FjdGlvbl0gbWF5IGJlIGVpdGhlciBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMuCiAgICoKICAgKiBDYWxscyBbYWN0aW9uXSB3aXRoIGVhY2ggZWxlbWVudCBpbiBbZWxlbWVudHNdIGluIG9yZGVyLgogICAqIElmIHRoZSBjYWxsIHRvIFthY3Rpb25dIHJldHVybnMgYSBgRnV0dXJlPFQ+YCwgdGhlIGl0ZXJhdGlvbiB3YWl0cwogICAqIHVudGlsIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIG5leHQgZWxlbWVudC4KICAgKgogICAqIFJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyB3aXRoIGBudWxsYCB3aGVuIGFsbCBlbGVtZW50cyBoYXZlIGJlZW4KICAgKiBwcm9jZXNzZWQuCiAgICoKICAgKiBOb24tW0Z1dHVyZV0gcmV0dXJuIHZhbHVlcywgYW5kIGNvbXBsZXRpb24tdmFsdWVzIG9mIHJldHVybmVkIFtGdXR1cmVdcywKICAgKiBhcmUgZGlzY2FyZGVkLgogICAqCiAgICogQW55IGVycm9yIGZyb20gW2FjdGlvbl0sIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cywKICAgKiB3aWxsIHN0b3AgdGhlIGl0ZXJhdGlvbiBhbmQgYmUgcmVwb3J0ZWQgaW4gdGhlIHJldHVybmVkIFtGdXR1cmVdLgogICAqLwogIHN0YXRpYyBGdXR1cmUgZm9yRWFjaDxUPihJdGVyYWJsZTxUPiBlbGVtZW50cywgRnV0dXJlT3IgYWN0aW9uKFQgZWxlbWVudCkpIHsKICAgIHZhciBpdGVyYXRvciA9IGVsZW1lbnRzLml0ZXJhdG9yOwogICAgcmV0dXJuIGRvV2hpbGUoKCkgewogICAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIHJlc3VsdCA9IGFjdGlvbihpdGVyYXRvci5jdXJyZW50KTsKICAgICAgaWYgKHJlc3VsdCBpcyBGdXR1cmUpIHJldHVybiByZXN1bHQudGhlbihfa1RydWUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0KCiAgLy8gQ29uc3RhbnQgYHRydWVgIGZ1bmN0aW9uLCB1c2VkIGFzIGNhbGxiYWNrIGJ5IFtmb3JFYWNoXS4KICBzdGF0aWMgYm9vbCBfa1RydWUoXykgPT4gdHJ1ZTsKCiAgLyoqCiAgICogUGVyZm9ybXMgYW4gb3BlcmF0aW9uIHJlcGVhdGVkbHkgdW50aWwgaXQgcmV0dXJucyBgZmFsc2VgLgogICAqCiAgICogVGhlIG9wZXJhdGlvbiwgW2FjdGlvbl0sIG1heSBiZSBlaXRoZXIgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzLgogICAqCiAgICogVGhlIG9wZXJhdGlvbiBpcyBjYWxsZWQgcmVwZWF0ZWRseSBhcyBsb25nIGFzIGl0IHJldHVybnMgZWl0aGVyIHRoZSBbYm9vbF0KICAgKiB2YWx1ZSBgdHJ1ZWAgb3IgYSBgRnV0dXJlPGJvb2w+YCB3aGljaCBjb21wbGV0ZXMgd2l0aCB0aGUgdmFsdWUgYHRydWVgLgogICAqCiAgICogSWYgYSBjYWxsIHRvIFthY3Rpb25dIHJldHVybnMgYGZhbHNlYCBvciBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIHRvCiAgICogYGZhbHNlYCwgaXRlcmF0aW9uIGVuZHMgYW5kIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgW2RvV2hpbGVdIGlzIGNvbXBsZXRlZAogICAqIHdpdGggYSBgbnVsbGAgdmFsdWUuCiAgICoKICAgKiBJZiBhIGNhbGwgdG8gW2FjdGlvbl0gdGhyb3dzIG9yIGEgZnV0dXJlIHJldHVybmVkIGJ5IFthY3Rpb25dIGNvbXBsZXRlcwogICAqIHdpdGggYW4gZXJyb3IsIGl0ZXJhdGlvbiBlbmRzIGFuZCB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IFtkb1doaWxlXQogICAqIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIGVycm9yLgogICAqCiAgICogQ2FsbHMgdG8gW2FjdGlvbl0gbWF5IGhhcHBlbiBhdCBhbnkgdGltZSwKICAgKiBpbmNsdWRpbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyBgZG9XaGlsZWAuCiAgICogVGhlIG9ubHkgcmVzdHJpY3Rpb24gaXMgYSBuZXcgY2FsbCB0byBbYWN0aW9uXSB3b24ndCBoYXBwZW4gYmVmb3JlCiAgICogdGhlIHByZXZpb3VzIGNhbGwgaGFzIHJldHVybmVkLCBhbmQgaWYgaXQgcmV0dXJuZWQgYSBgRnV0dXJlPGJvb2w+YCwgbm90CiAgICogdW50aWwgdGhhdCBmdXR1cmUgaGFzIGNvbXBsZXRlZC4KICAgKi8KICBzdGF0aWMgRnV0dXJlIGRvV2hpbGUoRnV0dXJlT3I8Ym9vbD4gYWN0aW9uKCkpIHsKICAgIF9GdXR1cmUgZG9uZVNpZ25hbCA9IG5ldyBfRnV0dXJlKCk7CiAgICB2b2lkIEZ1bmN0aW9uKGJvb2wpIG5leHRJdGVyYXRpb247CiAgICAvLyBCaW5kIHRoaXMgY2FsbGJhY2sgZXhwbGljaXRseSBzbyB0aGF0IGVhY2ggaXRlcmF0aW9uIGlzbid0IGJvdW5kIGluIHRoZQogICAgLy8gY29udGV4dCBvZiBhbGwgdGhlIHByZXZpb3VzIGl0ZXJhdGlvbnMnIGNhbGxiYWNrcy4KICAgIC8vIFRoaXMgYXZvaWRzLCBlLmcuLCBkZWVwbHkgbmVzdGVkIHN0YWNrIHRyYWNlcyBmcm9tIHRoZSBzdGFjayB0cmFjZQogICAgLy8gcGFja2FnZS4KICAgIG5leHRJdGVyYXRpb24gPSBab25lLmN1cnJlbnQuYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkKChib29sIGtlZXBHb2luZykgewogICAgICB3aGlsZSAoa2VlcEdvaW5nKSB7CiAgICAgICAgRnV0dXJlT3I8Ym9vbD4gcmVzdWx0OwogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQgPSBhY3Rpb24oKTsKICAgICAgICB9IGNhdGNoIChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICAgICAgLy8gQ2Fubm90IHVzZSBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayBiZWNhdXNlIGl0IGNvbXBsZXRlcwogICAgICAgICAgLy8gdGhlIGZ1dHVyZSBzeW5jaHJvbm91c2x5LgogICAgICAgICAgX2FzeW5jQ29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhkb25lU2lnbmFsLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChyZXN1bHQgaXMgRnV0dXJlPGJvb2w+KSB7CiAgICAgICAgICByZXN1bHQudGhlbihuZXh0SXRlcmF0aW9uLCBvbkVycm9yOiBkb25lU2lnbmFsLl9jb21wbGV0ZUVycm9yKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAga2VlcEdvaW5nID0gcmVzdWx0OwogICAgICB9CiAgICAgIGRvbmVTaWduYWwuX2NvbXBsZXRlKG51bGwpOwogICAgfSk7CiAgICBuZXh0SXRlcmF0aW9uKHRydWUpOwogICAgcmV0dXJuIGRvbmVTaWduYWw7CiAgfQoKICAvKioKICAgKiBSZWdpc3RlciBjYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gdGhpcyBmdXR1cmUgY29tcGxldGVzLgogICAqCiAgICogV2hlbiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhIHZhbHVlLAogICAqIHRoZSBbb25WYWx1ZV0gY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGF0IHZhbHVlLgogICAqIElmIHRoaXMgZnV0dXJlIGlzIGFscmVhZHkgY29tcGxldGVkLCB0aGUgY2FsbGJhY2sgd2lsbCBub3QgYmUgY2FsbGVkCiAgICogaW1tZWRpYXRlbHksIGJ1dCB3aWxsIGJlIHNjaGVkdWxlZCBpbiBhIGxhdGVyIG1pY3JvdGFzay4KICAgKgogICAqIElmIFtvbkVycm9yXSBpcyBwcm92aWRlZCwgYW5kIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLAogICAqIHRoZSBgb25FcnJvcmAgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhhdCBlcnJvciBhbmQgaXRzIHN0YWNrIHRyYWNlLgogICAqIFRoZSBgb25FcnJvcmAgY2FsbGJhY2sgbXVzdCBhY2NlcHQgZWl0aGVyIG9uZSBhcmd1bWVudCBvciB0d28gYXJndW1lbnRzCiAgICogd2hlcmUgdGhlIGxhdHRlciBpcyBhIFtTdGFja1RyYWNlXS4KICAgKiBJZiBgb25FcnJvcmAgYWNjZXB0cyB0d28gYXJndW1lbnRzLAogICAqIGl0IGlzIGNhbGxlZCB3aXRoIGJvdGggdGhlIGVycm9yIGFuZCB0aGUgc3RhY2sgdHJhY2UsCiAgICogb3RoZXJ3aXNlIGl0IGlzIGNhbGxlZCB3aXRoIGp1c3QgdGhlIGVycm9yIG9iamVjdC4KICAgKiBUaGUgYG9uRXJyb3JgIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgdmFsdWUgb3IgZnV0dXJlIHRoYXQgY2FuIGJlIHVzZWQKICAgKiB0byBjb21wbGV0ZSB0aGUgcmV0dXJuZWQgZnV0dXJlLCBzbyBpdCBtdXN0IGJlIHNvbWV0aGluZyBhc3NpZ25hYmxlIHRvCiAgICogYEZ1dHVyZU9yPFI+YC4KICAgKgogICAqIFJldHVybnMgYSBuZXcgW0Z1dHVyZV0KICAgKiB3aGljaCBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIGBvblZhbHVlYAogICAqIChpZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhIHZhbHVlKQogICAqIG9yIHRvIGBvbkVycm9yYCAoaWYgdGhpcyBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IpLgogICAqCiAgICogSWYgdGhlIGludm9rZWQgY2FsbGJhY2sgdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIHRocm93biBlcnJvcgogICAqIGFuZCBhIHN0YWNrIHRyYWNlIGZvciB0aGUgZXJyb3IuCiAgICogSW4gdGhlIGNhc2Ugb2YgYG9uRXJyb3JgLAogICAqIGlmIHRoZSBleGNlcHRpb24gdGhyb3duIGlzIGBpZGVudGljYWxgIHRvIHRoZSBlcnJvciBhcmd1bWVudCB0byBgb25FcnJvcmAsCiAgICogdGhlIHRocm93IGlzIGNvbnNpZGVyZWQgYSByZXRocm93LAogICAqIGFuZCB0aGUgb3JpZ2luYWwgc3RhY2sgdHJhY2UgaXMgdXNlZCBpbnN0ZWFkLgogICAqCiAgICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYSBbRnV0dXJlXSwKICAgKiB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IGB0aGVuYCB3aWxsIGJlIGNvbXBsZXRlZCB3aXRoCiAgICogdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrLgogICAqCiAgICogSWYgW29uRXJyb3JdIGlzIG5vdCBnaXZlbiwgYW5kIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLAogICAqIHRoZSBlcnJvciBpcyBmb3J3YXJkZWQgZGlyZWN0bHkgdG8gdGhlIHJldHVybmVkIGZ1dHVyZS4KICAgKgogICAqIEluIG1vc3QgY2FzZXMsIGl0IGlzIG1vcmUgcmVhZGFibGUgdG8gdXNlIFtjYXRjaEVycm9yXSBzZXBhcmF0ZWx5LCBwb3NzaWJseQogICAqIHdpdGggYSBgdGVzdGAgcGFyYW1ldGVyLCBpbnN0ZWFkIG9mIGhhbmRsaW5nIGJvdGggdmFsdWUgYW5kIGVycm9yIGluIGEKICAgKiBzaW5nbGUgW3RoZW5dIGNhbGwuCiAgICoKICAgKiBOb3RlIHRoYXQgZnV0dXJlcyBkb24ndCBkZWxheSByZXBvcnRpbmcgb2YgZXJyb3JzIHVudGlsIGxpc3RlbmVycyBhcmUKICAgKiBhZGRlZC4gSWYgdGhlIGZpcnN0IGB0aGVuYCBvciBgY2F0Y2hFcnJvcmAgY2FsbCBoYXBwZW5zIGFmdGVyIHRoaXMgZnV0dXJlCiAgICogaGFzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yIHRoZW4gdGhlIGVycm9yIGlzIHJlcG9ydGVkIGFzIHVuaGFuZGxlZCBlcnJvci4KICAgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9uIFtGdXR1cmVdLgogICAqLwogIEZ1dHVyZTxSPiB0aGVuPFI+KEZ1dHVyZU9yPFI+IG9uVmFsdWUoVCB2YWx1ZSksIHtGdW5jdGlvbiBvbkVycm9yfSk7CgogIC8qKgogICAqIEhhbmRsZXMgZXJyb3JzIGVtaXR0ZWQgYnkgdGhpcyBbRnV0dXJlXS4KICAgKgogICAqIFRoaXMgaXMgdGhlIGFzeW5jaHJvbm91cyBlcXVpdmFsZW50IG9mIGEgImNhdGNoIiBibG9jay4KICAgKgogICAqIFJldHVybnMgYSBuZXcgW0Z1dHVyZV0gdGhhdCB3aWxsIGJlIGNvbXBsZXRlZCB3aXRoIGVpdGhlciB0aGUgcmVzdWx0IG9mCiAgICogdGhpcyBmdXR1cmUgb3IgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBgb25FcnJvcmAgY2FsbGJhY2suCiAgICoKICAgKiBJZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhIHZhbHVlLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggdGhlIHNhbWUgdmFsdWUuCiAgICoKICAgKiBJZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwKICAgKiB0aGVuIFt0ZXN0XSBpcyBmaXJzdCBjYWxsZWQgd2l0aCB0aGUgZXJyb3IgdmFsdWUuCiAgICoKICAgKiBJZiBgdGVzdGAgcmV0dXJucyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCBieSB0aGlzIGBjYXRjaEVycm9yYCwKICAgKiBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGUgc2FtZSBlcnJvciBhbmQgc3RhY2sgdHJhY2UKICAgKiBhcyB0aGlzIGZ1dHVyZS4KICAgKgogICAqIElmIGB0ZXN0YCByZXR1cm5zIGB0cnVlYCwKICAgKiBbb25FcnJvcl0gaXMgY2FsbGVkIHdpdGggdGhlIGVycm9yIGFuZCBwb3NzaWJseSBzdGFjayB0cmFjZSwKICAgKiBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoaXMgY2FsbAogICAqIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGZvciBbdGhlbl0ncyBgb25FcnJvcmAuCiAgICoKICAgKiBJZiBgdGVzdGAgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIHRydWUuCiAgICogVGhlIGB0ZXN0YCBmdW5jdGlvbiBzaG91bGQgbm90IHRocm93LCBidXQgaWYgaXQgZG9lcywgaXQgaXMgaGFuZGxlZCBhcwogICAqIGlmIHRoZSBgb25FcnJvcmAgZnVuY3Rpb24gaGFkIHRocm93bi4KICAgKgogICAqIE5vdGUgdGhhdCBmdXR1cmVzIGRvbid0IGRlbGF5IHJlcG9ydGluZyBvZiBlcnJvcnMgdW50aWwgbGlzdGVuZXJzIGFyZQogICAqIGFkZGVkLiBJZiB0aGUgZmlyc3QgYGNhdGNoRXJyb3JgIChvciBgdGhlbmApIGNhbGwgaGFwcGVucyBhZnRlciB0aGlzIGZ1dHVyZQogICAqIGhhcyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciB0aGVuIHRoZSBlcnJvciBpcyByZXBvcnRlZCBhcyB1bmhhbmRsZWQgZXJyb3IuCiAgICogU2VlIHRoZSBkZXNjcmlwdGlvbiBvbiBbRnV0dXJlXS4KICAgKi8KICAvLyBUaGUgYEZ1bmN0aW9uYCBiZWxvdyBzdGFuZHMgZm9yIG9uZSBvZiB0d28gdHlwZXM6CiAgLy8gLSAoZHluYW1pYykgLT4gRnV0dXJlT3I8VD4KICAvLyAtIChkeW5hbWljLCBTdGFja1RyYWNlKSAtPiBGdXR1cmVPcjxUPgogIC8vIEdpdmVuIHRoYXQgdGhlcmUgaXMgYSBgdGVzdGAgZnVuY3Rpb24gdGhhdCBpcyB1c3VhbGx5IHVzZWQgdG8gZG8gYW4KICAvLyBgaXNDaGVja2Agd2Ugc2hvdWxkIGFsc28gZXhwZWN0IGZ1bmN0aW9ucyB0aGF0IHRha2UgYSBzcGVjaWZpYyBhcmd1bWVudC4KICAvLyBOb3RlOiBtYWtpbmcgYGNhdGNoRXJyb3JgIHJldHVybiBhIGBGdXR1cmU8VD5gIGluIG5vbi1zdHJvbmcgbW9kZSBjb3VsZCBiZQogIC8vIGEgYnJlYWtpbmcgY2hhbmdlLgogIEZ1dHVyZTxUPiBjYXRjaEVycm9yKEZ1bmN0aW9uIG9uRXJyb3IsIHtib29sIHRlc3QoT2JqZWN0IGVycm9yKX0pOwoKICAvKioKICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBUaGUgW2FjdGlvbl0gZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhpcyBmdXR1cmUgY29tcGxldGVzLCB3aGV0aGVyIGl0CiAgICogZG9lcyBzbyB3aXRoIGEgdmFsdWUgb3Igd2l0aCBhbiBlcnJvci4KICAgKgogICAqIFRoaXMgaXMgdGhlIGFzeW5jaHJvbm91cyBlcXVpdmFsZW50IG9mIGEgImZpbmFsbHkiIGJsb2NrLgogICAqCiAgICogVGhlIGZ1dHVyZSByZXR1cm5lZCBieSB0aGlzIGNhbGwsIGBmYCwgd2lsbCBjb21wbGV0ZSB0aGUgc2FtZSB3YXkKICAgKiBhcyB0aGlzIGZ1dHVyZSB1bmxlc3MgYW4gZXJyb3Igb2NjdXJzIGluIHRoZSBbYWN0aW9uXSBjYWxsLCBvciBpbgogICAqIGEgW0Z1dHVyZV0gcmV0dXJuZWQgYnkgdGhlIFthY3Rpb25dIGNhbGwuIElmIHRoZSBjYWxsIHRvIFthY3Rpb25dCiAgICogZG9lcyBub3QgcmV0dXJuIGEgZnV0dXJlLCBpdHMgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuCiAgICoKICAgKiBJZiB0aGUgY2FsbCB0byBbYWN0aW9uXSB0aHJvd3MsIHRoZW4gYGZgIGlzIGNvbXBsZXRlZCB3aXRoIHRoZQogICAqIHRocm93biBlcnJvci4KICAgKgogICAqIElmIHRoZSBjYWxsIHRvIFthY3Rpb25dIHJldHVybnMgYSBbRnV0dXJlXSwgYGYyYCwgdGhlbiBjb21wbGV0aW9uIG9mCiAgICogYGZgIGlzIGRlbGF5ZWQgdW50aWwgYGYyYCBjb21wbGV0ZXMuIElmIGBmMmAgY29tcGxldGVzIHdpdGgKICAgKiBhbiBlcnJvciwgdGhhdCB3aWxsIGJlIHRoZSByZXN1bHQgb2YgYGZgIHRvby4gVGhlIHZhbHVlIG9mIGBmMmAgaXMgYWx3YXlzCiAgICogaWdub3JlZC4KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgRnV0dXJlPFQ+IHdoZW5Db21wbGV0ZShhY3Rpb24oKSkgewogICAqICAgICAgIHJldHVybiB0aGlzLnRoZW4oKHYpIHsKICAgKiAgICAgICAgIHZhciBmMiA9IGFjdGlvbigpOwogICAqICAgICAgICAgaWYgKGYyIGlzIEZ1dHVyZSkgcmV0dXJuIGYyLnRoZW4oKF8pID0+IHYpOwogICAqICAgICAgICAgcmV0dXJuIHYKICAgKiAgICAgICB9LCBvbkVycm9yOiAoZSkgewogICAqICAgICAgICAgdmFyIGYyID0gYWN0aW9uKCk7CiAgICogICAgICAgICBpZiAoZjIgaXMgRnV0dXJlKSByZXR1cm4gZjIudGhlbigoXykgeyB0aHJvdyBlOyB9KTsKICAgKiAgICAgICAgIHRocm93IGU7CiAgICogICAgICAgfSk7CiAgICogICAgIH0KICAgKi8KICBGdXR1cmU8VD4gd2hlbkNvbXBsZXRlKEZ1dHVyZU9yIGFjdGlvbigpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTdHJlYW1dIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1dHVyZS4KICAgKgogICAqIFRoZSBzdHJlYW0gd2lsbCBwcm9kdWNlIHNpbmdsZSBkYXRhIG9yIGVycm9yIGV2ZW50IGNvbnRhaW5pbmcgdGhlCiAgICogY29tcGxldGlvbiByZXN1bHQgb2YgdGhpcyBmdXR1cmUsIGFuZCB0aGVuIGl0IHdpbGwgY2xvc2Ugd2l0aCBhCiAgICogZG9uZSBldmVudC4KICAgKgogICAqIElmIHRoZSBmdXR1cmUgbmV2ZXIgY29tcGxldGVzLCB0aGUgc3RyZWFtIHdpbGwgbm90IHByb2R1Y2UgYW55IGV2ZW50cy4KICAgKi8KICBTdHJlYW08VD4gYXNTdHJlYW0oKTsKCiAgLyoqCiAgICogVGltZS1vdXQgdGhlIGZ1dHVyZSBjb21wdXRhdGlvbiBhZnRlciBbdGltZUxpbWl0XSBoYXMgcGFzc2VkLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyB0aGlzIGZ1dHVyZSwKICAgKiBpZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgaW4gdGltZS4KICAgKgogICAqIElmIHRoaXMgZnV0dXJlIGRvZXMgbm90IGNvbXBsZXRlIGJlZm9yZSBgdGltZUxpbWl0YCBoYXMgcGFzc2VkLAogICAqIHRoZSBbb25UaW1lb3V0XSBhY3Rpb24gaXMgZXhlY3V0ZWQgaW5zdGVhZCwgYW5kIGl0cyByZXN1bHQgKHdoZXRoZXIgaXQKICAgKiByZXR1cm5zIG9yIHRocm93cykgaXMgdXNlZCBhcyB0aGUgcmVzdWx0IG9mIHRoZSByZXR1cm5lZCBmdXR1cmUuCiAgICogVGhlIFtvblRpbWVvdXRdIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgW1RdIG9yIGEgYEZ1dHVyZTxUPmAuCiAgICoKICAgKiBJZiBgb25UaW1lb3V0YCBpcyBvbWl0dGVkLCBhIHRpbWVvdXQgd2lsbCBjYXVzZSB0aGUgcmV0dXJuZWQgZnV0dXJlIHRvCiAgICogY29tcGxldGUgd2l0aCBhIFtUaW1lb3V0RXhjZXB0aW9uXS4KICAgKi8KICBGdXR1cmU8VD4gdGltZW91dChEdXJhdGlvbiB0aW1lTGltaXQsIHtGdXR1cmVPcjxUPiBvblRpbWVvdXQoKX0pOwp9CgovKioKICogVGhyb3duIHdoZW4gYSBzY2hlZHVsZWQgdGltZW91dCBoYXBwZW5zIHdoaWxlIHdhaXRpbmcgZm9yIGFuIGFzeW5jIHJlc3VsdC4KICovCmNsYXNzIFRpbWVvdXRFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIC8qKiBEZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2Ugb2YgdGhlIHRpbWVvdXQuICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgLyoqIFRoZSBkdXJhdGlvbiB0aGF0IHdhcyBleGNlZWRlZC4gKi8KICBmaW5hbCBEdXJhdGlvbiBkdXJhdGlvbjsKCiAgVGltZW91dEV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UsIFt0aGlzLmR1cmF0aW9uXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZyByZXN1bHQgPSAiVGltZW91dEV4Y2VwdGlvbiI7CiAgICBpZiAoZHVyYXRpb24gIT0gbnVsbCkgcmVzdWx0ID0gIlRpbWVvdXRFeGNlcHRpb24gYWZ0ZXIgJGR1cmF0aW9uIjsKICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHJlc3VsdCA9ICIkcmVzdWx0OiAkbWVzc2FnZSI7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLyoqCiAqIEEgd2F5IHRvIHByb2R1Y2UgRnV0dXJlIG9iamVjdHMgYW5kIHRvIGNvbXBsZXRlIHRoZW0gbGF0ZXIKICogd2l0aCBhIHZhbHVlIG9yIGVycm9yLgogKgogKiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBhIGZ1dHVyZSBpcyB0byBqdXN0IHVzZQogKiBvbmUgb2YgdGhlIFtGdXR1cmVdIGNvbnN0cnVjdG9ycyB0byBjYXB0dXJlIHRoZSByZXN1bHQgb2YgYSBzaW5nbGUKICogYXN5bmNocm9ub3VzIGNvbXB1dGF0aW9uOgogKiBgYGAKICogbmV3IEZ1dHVyZSgoKSB7IGRvU29tZXRoaW5nKCk7IHJldHVybiByZXN1bHQ7IH0pOwogKiBgYGAKICogb3IsIGlmIHRoZSBmdXR1cmUgcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGEgc2VxdWVuY2Ugb2YgYXN5bmNocm9ub3VzCiAqIGNvbXB1dGF0aW9ucywgdGhleSBjYW4gYmUgY2hhaW5lZCB1c2luZyBbRnV0dXJlLnRoZW5dIG9yIHNpbWlsYXIgZnVuY3Rpb25zCiAqIG9uIFtGdXR1cmVdOgogKiBgYGAKICogRnV0dXJlIGRvU3R1ZmYoKXsKICogICByZXR1cm4gc29tZUFzeW5jT3BlcmF0aW9uKCkudGhlbigocmVzdWx0KSB7CiAqICAgICByZXR1cm4gc29tZU90aGVyQXN5bmNPcGVyYXRpb24ocmVzdWx0KTsKICogICB9KTsKICogfQogKiBgYGAKICogSWYgeW91IGRvIG5lZWQgdG8gY3JlYXRlIGEgRnV0dXJlIGZyb20gc2NyYXRjaCDigJQgZm9yIGV4YW1wbGUsCiAqIHdoZW4geW91J3JlIGNvbnZlcnRpbmcgYSBjYWxsYmFjay1iYXNlZCBBUEkgaW50byBhIEZ1dHVyZS1iYXNlZAogKiBvbmUg4oCUIHlvdSBjYW4gdXNlIGEgQ29tcGxldGVyIGFzIGZvbGxvd3M6CiAqIGBgYAogKiBjbGFzcyBBc3luY09wZXJhdGlvbiB7CiAqICAgQ29tcGxldGVyIF9jb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAqCiAqICAgRnV0dXJlPFQ+IGRvT3BlcmF0aW9uKCkgewogKiAgICAgX3N0YXJ0T3BlcmF0aW9uKCk7CiAqICAgICByZXR1cm4gX2NvbXBsZXRlci5mdXR1cmU7IC8vIFNlbmQgZnV0dXJlIG9iamVjdCBiYWNrIHRvIGNsaWVudC4KICogICB9CiAqCiAqICAgLy8gU29tZXRoaW5nIGNhbGxzIHRoaXMgd2hlbiB0aGUgdmFsdWUgaXMgcmVhZHkuCiAqICAgdm9pZCBfZmluaXNoT3BlcmF0aW9uKFQgcmVzdWx0KSB7CiAqICAgICBfY29tcGxldGVyLmNvbXBsZXRlKHJlc3VsdCk7CiAqICAgfQogKgogKiAgIC8vIElmIHNvbWV0aGluZyBnb2VzIHdyb25nLCBjYWxsIHRoaXMuCiAqICAgdm9pZCBfZXJyb3JIYXBwZW5lZChlcnJvcikgewogKiAgICAgX2NvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICogICB9CiAqIH0KICogYGBgCiAqLwphYnN0cmFjdCBjbGFzcyBDb21wbGV0ZXI8VD4gewogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgY29tcGxldGVyLgogICAqCiAgICogVGhlIGdlbmVyYWwgd29ya2Zsb3cgZm9yIGNyZWF0aW5nIGEgbmV3IGZ1dHVyZSBpcyB0byAxKSBjcmVhdGUgYQogICAqIG5ldyBjb21wbGV0ZXIsIDIpIGhhbmQgb3V0IGl0cyBmdXR1cmUsIGFuZCwgYXQgYSBsYXRlciBwb2ludCwgMykgaW52b2tlCiAgICogZWl0aGVyIFtjb21wbGV0ZV0gb3IgW2NvbXBsZXRlRXJyb3JdLgogICAqCiAgICogVGhlIGNvbXBsZXRlciBjb21wbGV0ZXMgdGhlIGZ1dHVyZSBhc3luY2hyb25vdXNseS4gVGhhdCBtZWFucyB0aGF0CiAgICogY2FsbGJhY2tzIHJlZ2lzdGVyZWQgb24gdGhlIGZ1dHVyZSBhcmUgbm90IGNhbGxlZCBpbW1lZGlhdGVseSB3aGVuCiAgICogW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gaXMgY2FsbGVkLiBJbnN0ZWFkIHRoZSBjYWxsYmFja3MgYXJlCiAgICogZGVsYXllZCB1bnRpbCBhIGxhdGVyIG1pY3JvdGFzay4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgCiAgICogdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgKiBoYW5kT3V0KGNvbXBsZXRlci5mdXR1cmUpOwogICAqIGxhdGVyOiB7CiAgICogICBjb21wbGV0ZXIuY29tcGxldGUoJ2NvbXBsZXRpb24gdmFsdWUnKTsKICAgKiB9CiAgICogYGBgCiAgICovCiAgZmFjdG9yeSBDb21wbGV0ZXIoKSA9PiBuZXcgX0FzeW5jQ29tcGxldGVyPFQ+KCk7CgogIC8qKgogICAqIENvbXBsZXRlcyB0aGUgZnV0dXJlIHN5bmNocm9ub3VzbHkuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBiZSBhdm9pZGVkIHVubGVzcyB0aGUgY29tcGxldGlvbiBvZiB0aGUgZnV0dXJlIGlzCiAgICoga25vd24gdG8gYmUgdGhlIGZpbmFsIHJlc3VsdCBvZiBhbm90aGVyIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIElmIGluIGRvdWJ0CiAgICogdXNlIHRoZSBkZWZhdWx0IFtDb21wbGV0ZXJdIGNvbnN0cnVjdG9yLgogICAqCiAgICogVXNpbmcgYW4gbm9ybWFsLCBhc3luY2hyb25vdXMsIGNvbXBsZXRlciB3aWxsIG5ldmVyIGdpdmUgdGhlIHdyb25nCiAgICogYmVoYXZpb3IsIGJ1dCB1c2luZyBhIHN5bmNocm9ub3VzIGNvbXBsZXRlciBpbmNvcnJlY3RseSBjYW4gY2F1c2UKICAgKiBvdGhlcndpc2UgY29ycmVjdCBwcm9ncmFtcyB0byBicmVhay4KICAgKgogICAqIEEgc3luY2hyb25vdXMgY29tcGxldGVyIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG9wdGltaXppbmcgZXZlbnQKICAgKiBwcm9wYWdhdGlvbiB3aGVuIG9uZSBhc3luY2hyb25vdXMgZXZlbnQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYW5vdGhlci4KICAgKiBJdCBzaG91bGQgbm90IGJlIHVzZWQgdW5sZXNzIHRoZSBjYWxscyB0byBbY29tcGxldGVdIGFuZCBbY29tcGxldGVFcnJvcl0KICAgKiBhcmUgZ3VhcmFudGVlZCB0byBvY2N1ciBpbiBwbGFjZXMgd2hlcmUgaXQgd29uJ3QgYnJlYWsgYEZ1dHVyZWAgaW52YXJpYW50cy4KICAgKgogICAqIENvbXBsZXRpbmcgc3luY2hyb25vdXNseSBtZWFucyB0aGF0IHRoZSBjb21wbGV0ZXIncyBmdXR1cmUgd2lsbCBiZQogICAqIGNvbXBsZXRlZCBpbW1lZGlhdGVseSB3aGVuIGNhbGxpbmcgdGhlIFtjb21wbGV0ZV0gb3IgW2NvbXBsZXRlRXJyb3JdCiAgICogbWV0aG9kIG9uIGEgc3luY2hyb25vdXMgY29tcGxldGVyLCB3aGljaCBhbHNvIGNhbGxzIGFueSBjYWxsYmFja3MKICAgKiByZWdpc3RlcmVkIG9uIHRoYXQgZnV0dXJlLgogICAqCiAgICogQ29tcGxldGluZyBzeW5jaHJvbm91c2x5IG11c3Qgbm90IGJyZWFrIHRoZSBydWxlIHRoYXQgd2hlbiB5b3UgYWRkIGEKICAgKiBjYWxsYmFjayBvbiBhIGZ1dHVyZSwgdGhhdCBjYWxsYmFjayBtdXN0IG5vdCBiZSBjYWxsZWQgdW50aWwgdGhlIGNvZGUKICAgKiB0aGF0IGFkZGVkIHRoZSBjYWxsYmFjayBoYXMgY29tcGxldGVkLgogICAqIEZvciB0aGF0IHJlYXNvbiwgYSBzeW5jaHJvbm91cyBjb21wbGV0aW9uIG11c3Qgb25seSBvY2N1ciBhdCB0aGUgdmVyeSBlbmQKICAgKiAoaW4gInRhaWwgcG9zaXRpb24iKSBvZiBhbm90aGVyIHN5bmNocm9ub3VzIGV2ZW50LAogICAqIGJlY2F1c2UgYXQgdGhhdCBwb2ludCwgY29tcGxldGluZyB0aGUgZnV0dXJlIGltbWVkaWF0ZWx5IGlzIGJlIGVxdWl2YWxlbnQKICAgKiB0byByZXR1cm5pbmcgdG8gdGhlIGV2ZW50IGxvb3AgYW5kIGNvbXBsZXRpbmcgdGhlIGZ1dHVyZSBpbiB0aGUgbmV4dAogICAqIG1pY3JvdGFzay4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIuc3luYygpOwogICAqICAgICAvLyBUaGUgY29tcGxldGlvbiBpcyB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgb25Eb25lIGV2ZW50LgogICAqICAgICAvLyBObyBvdGhlciBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFmdGVyIHRoZSBjb21wbGV0aW9uLiBJdCBpcyBzYWZlCiAgICogICAgIC8vIHRvIHVzZSB0aGUgQ29tcGxldGVyLnN5bmMgY29uc3RydWN0b3IuCiAgICogICAgIHN0cmVhbS5saXN0ZW4ocHJpbnQsIG9uRG9uZTogKCkgeyBjb21wbGV0ZXIuY29tcGxldGUoImRvbmUiKTsgfSk7CiAgICoKICAgKiBCYWQgZXhhbXBsZS4gRG8gbm90IHVzZSB0aGlzIGNvZGUuIE9ubHkgZm9yIGlsbHVzdHJhdGl2ZSBwdXJwb3NlczoKICAgKgogICAqICAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlci5zeW5jKCk7CiAgICogICAgIGNvbXBsZXRlci5mdXR1cmUudGhlbigoXykgeyBiYXIoKTsgfSk7CiAgICogICAgIC8vIFRoZSBjb21wbGV0aW9uIGlzIHRoZSByZXN1bHQgb2YgdGhlIGFzeW5jaHJvbm91cyBvbkRvbmUgZXZlbnQuCiAgICogICAgIC8vIEhvd2V2ZXIsIHRoZXJlIGlzIHN0aWxsIGNvZGUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24uIFRoaXMKICAgKiAgICAgLy8gb3BlcmF0aW9uIGlzICpub3QqIHNhZmUuCiAgICogICAgIHN0cmVhbS5saXN0ZW4ocHJpbnQsIG9uRG9uZTogKCkgewogICAqICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZSgiZG9uZSIpOwogICAqICAgICAgIGZvbygpOyAgLy8gSW4gdGhpcyBjYXNlLCBmb28oKSBydW5zIGFmdGVyIGJhcigpLgogICAqICAgICB9KTsKICAgKi8KICBmYWN0b3J5IENvbXBsZXRlci5zeW5jKCkgPT4gbmV3IF9TeW5jQ29tcGxldGVyPFQ+KCk7CgogIC8qKgogICAqIFRoZSBmdXR1cmUgdGhhdCBpcyBjb21wbGV0ZWQgYnkgdGhpcyBjb21wbGV0ZXIuCiAgICoKICAgKiBUaGUgZnV0dXJlIHRoYXQgaXMgY29tcGxldGVkIHdoZW4gW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gaXMgY2FsbGVkLgogICAqLwogIEZ1dHVyZTxUPiBnZXQgZnV0dXJlOwoKICAvKioKICAgKiBDb21wbGV0ZXMgW2Z1dHVyZV0gd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzLgogICAqCiAgICogVGhlIHZhbHVlIG11c3QgYmUgZWl0aGVyIGEgdmFsdWUgb2YgdHlwZSBbVF0KICAgKiBvciBhIGZ1dHVyZSBvZiB0eXBlIGBGdXR1cmU8VD5gLgogICAqCiAgICogSWYgdGhlIHZhbHVlIGlzIGl0c2VsZiBhIGZ1dHVyZSwgdGhlIGNvbXBsZXRlciB3aWxsIHdhaXQgZm9yIHRoYXQgZnV0dXJlCiAgICogdG8gY29tcGxldGUsIGFuZCBjb21wbGV0ZSB3aXRoIHRoZSBzYW1lIHJlc3VsdCwgd2hldGhlciBpdCBpcyBhIHN1Y2Nlc3MKICAgKiBvciBhbiBlcnJvci4KICAgKgogICAqIENhbGxpbmcgW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gbXVzdCBiZSBkb25lIGF0IG1vc3Qgb25jZS4KICAgKgogICAqIEFsbCBsaXN0ZW5lcnMgb24gdGhlIGZ1dHVyZSBhcmUgaW5mb3JtZWQgYWJvdXQgdGhlIHZhbHVlLgogICAqLwogIHZvaWQgY29tcGxldGUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSk7CgogIC8qKgogICAqIENvbXBsZXRlIFtmdXR1cmVdIHdpdGggYW4gZXJyb3IuCiAgICoKICAgKiBDYWxsaW5nIFtjb21wbGV0ZV0gb3IgW2NvbXBsZXRlRXJyb3JdIG11c3QgYmUgZG9uZSBhdCBtb3N0IG9uY2UuCiAgICoKICAgKiBDb21wbGV0aW5nIGEgZnV0dXJlIHdpdGggYW4gZXJyb3IgaW5kaWNhdGVzIHRoYXQgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24KICAgKiB3aGlsZSB0cnlpbmcgdG8gcHJvZHVjZSBhIHZhbHVlLgogICAqCiAgICogSWYgW2Vycm9yXSBpcyBgbnVsbGAsIGl0IGlzIHJlcGxhY2VkIGJ5IGEgW051bGxUaHJvd25FcnJvcl0uCiAgICoKICAgKiBJZiBgZXJyb3JgIGlzIGEgYEZ1dHVyZWAsIHRoZSBmdXR1cmUgaXRzZWxmIGlzIHVzZWQgYXMgdGhlIGVycm9yIHZhbHVlLgogICAqIElmIHlvdSB3YW50IHRvIGNvbXBsZXRlIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZnV0dXJlLCB5b3UgY2FuIHVzZToKICAgKiBgYGAKICAgKiB0aGlzQ29tcGxldGVyLmNvbXBsZXRlKHRoZUZ1dHVyZSkKICAgKiBgYGAKICAgKiBvciBpZiB5b3Ugb25seSB3YW50IHRvIGhhbmRsZSBhbiBlcnJvciBmcm9tIHRoZSBmdXR1cmU6CiAgICogYGBgCiAgICogdGhlRnV0dXJlLmNhdGNoRXJyb3IodGhpc0NvbXBsZXRlci5jb21wbGV0ZUVycm9yKTsKICAgKiBgYGAKICAgKi8KICB2b2lkIGNvbXBsZXRlRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSk7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIFtmdXR1cmVdIGhhcyBiZWVuIGNvbXBsZXRlZC4KICAgKgogICAqIFJlZmxlY3RzIHdoZXRoZXIgW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gaGFzIGJlZW4gY2FsbGVkLgogICAqIEEgYHRydWVgIHZhbHVlIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IGxpc3RlbmVycyBvZiB0aGlzIGZ1dHVyZQogICAqIGhhdmUgYmVlbiBpbnZva2VkIHlldCwgZWl0aGVyIGJlY2F1c2UgdGhlIGNvbXBsZXRlciB1c3VhbGx5IHdhaXRzIHVudGlsCiAgICogYSBsYXRlciBtaWNyb3Rhc2sgdG8gcHJvcGFnYXRlIHRoZSByZXN1bHQsIG9yIGJlY2F1c2UgW2NvbXBsZXRlXQogICAqIHdhcyBjYWxsZWQgd2l0aCBhIGZ1dHVyZSB0aGF0IGhhc24ndCBjb21wbGV0ZWQgeWV0LgogICAqCiAgICogV2hlbiB0aGlzIHZhbHVlIGlzIGB0cnVlYCwgW2NvbXBsZXRlXSBhbmQgW2NvbXBsZXRlRXJyb3JdIG11c3Qgbm90IGJlCiAgICogY2FsbGVkIGFnYWluLgogICAqLwogIGJvb2wgZ2V0IGlzQ29tcGxldGVkOwp9CgovLyBIZWxwZXIgZnVuY3Rpb24gY29tcGxldGluZyBhIF9GdXR1cmUgd2l0aCBlcnJvciwgYnV0IGNoZWNraW5nIHRoZSB6b25lCi8vIGZvciBlcnJvciByZXBsYWNlbWVudCBmaXJzdC4Kdm9pZCBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhfRnV0dXJlIHJlc3VsdCwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICB9CiAgcmVzdWx0Ll9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKfQoKLy8gTGlrZSBbX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2tdIGJ1dCBjb21wbGV0ZXMgYXN5bmNocm9ub3VzbHkuCnZvaWQgX2Fz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ciBjb3VudHMgZG93biBmcm9tIHRoZSBzcGVjaWZpZWQgZHVyYXRpb24gdG8gMC4KICogV2hlbiB0aGUgdGltZXIgcmVhY2hlcyAwLCB0aGUgdGltZXIgaW52b2tlcyB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZ1bmN0aW9uLgogKiBVc2UgYSBwZXJpb2RpYyB0aW1lciB0byByZXBlYXRlZGx5IGNvdW50IGRvd24gdGhlIHNhbWUgaW50ZXJ2YWwuCiAqCiAqIEEgbmVnYXRpdmUgZHVyYXRpb24gaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyBhIGR1cmF0aW9uIG9mIDAuCiAqIElmIHRoZSBkdXJhdGlvbiBpcyBzdGF0aWNhbGx5IGtub3duIHRvIGJlIDAsIGNvbnNpZGVyIHVzaW5nIFtydW5dLgogKgogKiBGcmVxdWVudGx5IHRoZSBkdXJhdGlvbiBpcyBlaXRoZXIgYSBjb25zdGFudCBvciBjb21wdXRlZCBhcyBpbiB0aGUKICogZm9sbG93aW5nIGV4YW1wbGUgKHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIG11bHRpcGxpY2F0aW9uIG9wZXJhdG9yIG9mCiAqIHRoZSBbRHVyYXRpb25dIGNsYXNzKToKICogYGBgZGFydAogKiBjb25zdCB0aW1lb3V0ID0gY29uc3QgRHVyYXRpb24oc2Vjb25kczogMyk7CiAqIGNvbnN0IG1zID0gY29uc3QgRHVyYXRpb24obWlsbGlzZWNvbmRzOiAxKTsKICoKICogc3RhcnRUaW1lb3V0KFtpbnQgbWlsbGlzZWNvbmRzXSkgewogKiAgIHZhciBkdXJhdGlvbiA9IG1pbGxpc2Vjb25kcyA9PSBudWxsID8gdGltZW91dCA6IG1zICogbWlsbGlzZWNvbmRzOwogKiAgIHJldHVybiBuZXcgVGltZXIoZHVyYXRpb24sIGhhbmRsZVRpbWVvdXQpOwogKiB9CiAqIC4uLgogKiB2b2lkIGhhbmRsZVRpbWVvdXQoKSB7ICAvLyBjYWxsYmFjayBmdW5jdGlvbgogKiAgIC4uLgogKiB9CiAqIGBgYAogKiBOb3RlOiBJZiBEYXJ0IGNvZGUgdXNpbmcgVGltZXIgaXMgY29tcGlsZWQgdG8gSmF2YVNjcmlwdCwgdGhlIGZpbmVzdAogKiBncmFudWxhcml0eSBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIgaXMgNCBtaWxsaXNlY29uZHMuCiAqCiAqIFNlZSBbU3RvcHdhdGNoXSBmb3IgbWVhc3VyaW5nIGVsYXBzZWQgdGltZS4KICovCmFic3RyYWN0IGNsYXNzIFRpbWVyIHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHRpbWVyLgogICAqCiAgICogVGhlIFtjYWxsYmFja10gZnVuY3Rpb24gaXMgaW52b2tlZCBhZnRlciB0aGUgZ2l2ZW4gW2R1cmF0aW9uXS4KICAgKgogICAqLwogIGZhY3RvcnkgVGltZXIoRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgY2FsbGJhY2soKSkgewogICAgaWYgKFpvbmUuY3VycmVudCA9PSBab25lLnJvb3QpIHsKICAgICAgLy8gTm8gbmVlZCB0byBiaW5kIHRoZSBjYWxsYmFjay4gV2Uga25vdyB0aGF0IHRoZSByb290J3MgdGltZXIgd2lsbAogICAgICAvLyBiZSBpbnZva2VkIGluIHRoZSByb290IHpvbmUuCiAgICAgIHJldHVybiBab25lLmN1cnJlbnQuY3JlYXRlVGltZXIoZHVyYXRpb24sIGNhbGxiYWNrKTsKICAgIH0KICAgIHJldHVybiBab25lLmN1cnJlbnQKICAgICAgICAuY3JlYXRlVGltZXIoZHVyYXRpb24sIFpvbmUuY3VycmVudC5iaW5kQ2FsbGJhY2tHdWFyZGVkKGNhbGxiYWNrKSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHJlcGVhdGluZyB0aW1lci4KICAgKgogICAqIFRoZSBbY2FsbGJhY2tdIGlzIGludm9rZWQgcmVwZWF0ZWRseSB3aXRoIFtkdXJhdGlvbl0gaW50ZXJ2YWxzIHVudGlsCiAgICogY2FuY2VsZWQgd2l0aCB0aGUgW2NhbmNlbF0gZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgZXhhY3QgdGltaW5nIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgdGltZXIgaW1wbGVtZW50YXRpb24uCiAgICogTm8gbW9yZSB0aGFuIGBuYCBjYWxsYmFja3Mgd2lsbCBiZSBtYWRlIGluIGBkdXJhdGlvbiAqIG5gIHRpbWUsCiAgICogYnV0IHRoZSB0aW1lIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGNhbGxiYWNrcwogICAqIGNhbiBiZSBzaG9ydGVyIGFuZCBsb25nZXIgdGhhbiBgZHVyYXRpb25gLgogICAqCiAgICogSW4gcGFydGljdWxhciwgYW4gaW1wbGVtZW50YXRpb24gbWF5IHNjaGVkdWxlIHRoZSBuZXh0IGNhbGxiYWNrLCBlLmcuLAogICAqIGEgYGR1cmF0aW9uYCBhZnRlciBlaXRoZXIgd2hlbiB0aGUgcHJldmlvdXMgY2FsbGJhY2sgZW5kZWQsCiAgICogd2hlbiB0aGUgcHJldmlvdXMgY2FsbGJhY2sgc3RhcnRlZCwgb3Igd2hlbiB0aGUgcHJldmlvdXMgY2FsbGJhY2sgd2FzCiAgICogc2NoZWR1bGVkIGZvciAtIGV2ZW4gaWYgdGhlIGFjdHVhbCBjYWxsYmFjayB3YXMgZGVsYXllZC4KICAgKi8KICBmYWN0b3J5IFRpbWVyLnBlcmlvZGljKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSkgewogICAgaWYgKFpvbmUuY3VycmVudCA9PSBab25lLnJvb3QpIHsKICAgICAgLy8gTm8gbmVlZCB0byBiaW5kIHRoZSBjYWxsYmFjay4gV2Uga25vdyB0aGF0IHRoZSByb290J3MgdGltZXIgd2lsbAogICAgICAvLyBiZSBpbnZva2VkIGluIHRoZSByb290IHpvbmUuCiAgICAgIHJldHVybiBab25lLmN1cnJlbnQuY3JlYXRlUGVyaW9kaWNUaW1lcihkdXJhdGlvbiwgY2FsbGJhY2spOwogICAgfQogICAgdmFyIGJvdW5kQ2FsbGJhY2sgPSBab25lLmN1cnJlbnQuYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkPFRpbWVyPihjYWxsYmFjayk7CiAgICByZXR1cm4gWm9uZS5jdXJyZW50LmNyZWF0ZVBlcmlvZGljVGltZXIoZHVyYXRpb24sIGJvdW5kQ2FsbGJhY2spOwogIH0KCiAgLyoqCiAgICogUnVucyB0aGUgZ2l2ZW4gW2NhbGxiYWNrXSBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIHBvc3NpYmxlLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBuZXcgVGltZXIoRHVyYXRpb24uemVybywgY2FsbGJhY2spYC4KICAgKi8KICBzdGF0aWMgdm9pZCBydW4odm9pZCBjYWxsYmFjaygpKSB7CiAgICBuZXcgVGltZXIoRHVyYXRpb24uemVybywgY2FsbGJhY2spOwogIH0KCiAgLyoqCiAgICogQ2FuY2VscyB0aGUgdGltZXIuCiAgICoKICAgKiBPbmNlIGEgW1RpbWVyXSBoYXMgYmVlbiBjYW5jZWxlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZAogICAqIGJ5IHRoZSB0aW1lci4gQ2FsbGluZyBbY2FuY2VsXSBtb3JlIHRoYW4gb25jZSBvbiBhIFtUaW1lcl0gaXMgYWxsb3dlZCwgYW5kCiAgICogd2lsbCBoYXZlIG5vIGZ1cnRoZXIgZWZmZWN0LgogICAqLwogIHZvaWQgY2FuY2VsKCk7CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgZHVyYXRpb25zIHByZWNlZGluZyB0aGUgbW9zdCByZWNlbnQgdGltZXIgZXZlbnQuCiAgICoKICAgKiBUaGUgdmFsdWUgc3RhcnRzIGF0IHplcm8gYW5kIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIHRpbWVyIGV2ZW50CiAgICogb2NjdXJzLCBzbyBlYWNoIGNhbGxiYWNrIHdpbGwgc2VlIGEgbGFyZ2VyIHZhbHVlIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4KICAgKgogICAqIElmIGEgcGVyaW9kaWMgdGltZXIgd2l0aCBhIG5vbi16ZXJvIGR1cmF0aW9uIGlzIGRlbGF5ZWQgdG9vIG11Y2gsCiAgICogc28gbW9yZSB0aGFuIG9uZSB0aWNrIHNob3VsZCBoYXZlIGhhcHBlbmVkLAogICAqIGFsbCBidXQgdGhlIGxhc3QgdGljayBpbiB0aGUgcGFzdCBhcmUgY29uc2lkZXJlZCAibWlzc2VkIiwKICAgKiBhbmQgbm8gY2FsbGJhY2sgaXMgaW52b2tlZCBmb3IgdGhlbS4KICAgKiBUaGUgW3RpY2tdIGNvdW50IHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgZHVyYXRpb25zIHRoYXQgaGF2ZSBwYXNzZWQgYW5kCiAgICogbm90IHRoZSBudW1iZXIgb2YgY2FsbGJhY2sgaW52b2NhdGlvbnMgdGhhdCBoYXZlIGhhcHBlbmVkLgogICAqLwogIGludCBnZXQgdGljazsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSB0aW1lciBpcyBzdGlsbCBhY3RpdmUuCiAgICoKICAgKiBBIG5vbi1wZXJpb2RpYyB0aW1lciBpcyBhY3RpdmUgaWYgdGhlIGNhbGxiYWNrIGhhcyBub3QgYmVlbiBleGVjdXRlZCwKICAgKiBhbmQgdGhlIHRpbWVyIGhhcyBub3QgYmVlbiBjYW5jZWxlZC4KICAgKgogICAqIEEgcGVyaW9kaWMgdGltZXIgaXMgYWN0aXZlIGlmIGl0IGhhcyBub3QgYmVlbiBjYW5jZWxlZC4KICAgKi8KICBib29sIGdldCBpc0FjdGl2ZTsKCiAgZXh0ZXJuYWwgc3RhdGljIFRpbWVyIF9jcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKTsKICBleHRlcm5hbCBzdGF0aWMgVGltZXIgX2NyZWF0ZVBlcmlvZGljVGltZXIoCiAgICAgIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSk7Cn0KgIEATk48ARQBBEkDO1BEAz9GA0ZJGgsvLwMmSDAFBzAJBQdIOwMvBBcGGgVEBQY2JUomOwYYTAQBBiQFSioFRkU0MAVMQUs+BkolSiZDBlBGBAEGQwVKBiUoBAEGGAVQUCIGEQEGRAVJTQVHMUAqTEAGEAEGMAVLKgU9BhUBSi42AgEVZGFydDphc3luYy90aW1lci5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZXJyb3JzX3BhdGNoLmRhcnTAAEyBLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgRXJyb3IgewogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX29iamVjdFRvU3RyaW5nKE9iamVjdCBvYmplY3QpIHsKICAgIHJldHVybiBPYmplY3QuX3RvU3RyaW5nKG9iamVjdCk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9zdHJpbmdUb1NhZmVTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgcmV0dXJuIGpzb24uZW5jb2RlKHN0cmluZyk7CiAgfQoKICBAcGF0Y2gKICBTdGFja1RyYWNlIGdldCBzdGFja1RyYWNlID0+IF9zdGFja1RyYWNlOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgU3RhY2tUcmFjZSBfc3RhY2tUcmFjZTsKfQoKY2xhc3MgX0Fzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBBc3NlcnRpb25FcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIF9Bc3NlcnRpb25FcnJvci5fY3JlYXRlKAogICAgICB0aGlzLl9mYWlsZWRBc3NlcnRpb24sIHRoaXMuX3VybCwgdGhpcy5fbGluZSwgdGhpcy5fY29sdW1uLCB0aGlzLm1lc3NhZ2UpOwoKICAvLyBBc3NlcnRpb25FcnJvcl90aHJvd05ldyBpbiBlcnJvcnMuY2MgZmlzaGVzIHRoZSBhc3NlcnRpb24gc291cmNlIGNvZGUKICAvLyBvdXQgb2YgdGhlIHNjcmlwdC4gSXQgZXhwZWN0cyBhIERhcnQgc3RhY2sgZnJhbWUgZnJvbSBjbGFzcwogIC8vIF9Bc3NlcnRpb25FcnJvci4gVGh1cyB3ZSBuZWVkIGEgRGFydCBzdHViIHRoYXQgY2FsbHMgdGhlIG5hdGl2ZSBjb2RlLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyBfdGhyb3dOZXcoaW50IGFzc2VydGlvblN0YXJ0LCBpbnQgYXNzZXJ0aW9uRW5kLCBPYmplY3QgbWVzc2FnZSkgewogICAgX2RvVGhyb3dOZXcoYXNzZXJ0aW9uU3RhcnQsIGFzc2VydGlvbkVuZCwgbWVzc2FnZSk7CiAgfQoKICBzdGF0aWMgX2RvVGhyb3dOZXcoaW50IGFzc2VydGlvblN0YXJ0LCBpbnQgYXNzZXJ0aW9uRW5kLCBPYmplY3QgbWVzc2FnZSkKICAgICAgbmF0aXZlICJBc3NlcnRpb25FcnJvcl90aHJvd05ldyI7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyBfZXZhbHVhdGVBc3NlcnRpb24oY29uZGl0aW9uKSB7CiAgICBpZiAoaWRlbnRpY2FsKGNvbmRpdGlvbiwgdHJ1ZSkgfHwgaWRlbnRpY2FsKGNvbmRpdGlvbiwgZmFsc2UpKSB7CiAgICAgIHJldHVybiBjb25kaXRpb247CiAgICB9CiAgICBpZiAoY29uZGl0aW9uIGlzIF9DbG9zdXJlKSB7CiAgICAgIHJldHVybiAoY29uZGl0aW9uIGFzIGR5bmFtaWMpKCk7CiAgICB9CiAgICBpZiAoY29uZGl0aW9uIGlzIEZ1bmN0aW9uKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbigpOwogICAgfQogICAgcmV0dXJuIGNvbmRpdGlvbjsKICB9CgogIFN0cmluZyBnZXQgX21lc3NhZ2VTdHJpbmcgewogICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgcmV0dXJuICJpcyBub3QgdHJ1ZS4iOwogICAgaWYgKG1lc3NhZ2UgaXMgU3RyaW5nKSByZXR1cm4gbWVzc2FnZTsKICAgIHJldHVybiBFcnJvci5zYWZlVG9TdHJpbmcobWVzc2FnZSk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAoX3VybCA9PSBudWxsKSB7CiAgICAgIGlmIChtZXNzYWdlID09IG51bGwpIHJldHVybiBfZmFpbGVkQXNzZXJ0aW9uPy50cmltKCk7CiAgICAgIHJldHVybiAiJyR7X2ZhaWxlZEFzc2VydGlvbj8udHJpbSgpfSc6ICRfbWVzc2FnZVN0cmluZyI7CiAgICB9CiAgICB2YXIgY29sdW1uSW5mbyA9ICIiOwogICAgaWYgKF9jb2x1bW4gPiAwKSB7CiAgICAgIC8vIE9ubHkgYWRkIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBpcyB2YWxpZC4KICAgICAgY29sdW1uSW5mbyA9ICIgcG9zICRfY29sdW1uIjsKICAgIH0KICAgIHJldHVybiAiJyRfdXJsJzogRmFpbGVkIGFzc2VydGlvbjogbGluZSAkX2xpbmUkY29sdW1uSW5mbzogIgogICAgICAgICInJF9mYWlsZWRBc3NlcnRpb24nOiAkX21lc3NhZ2VTdHJpbmciOwogIH0KCiAgZmluYWwgU3RyaW5nIF9mYWlsZWRBc3NlcnRpb247CiAgZmluYWwgU3RyaW5nIF91cmw7CiAgZmluYWwgaW50IF9saW5lOwogIGZpbmFsIGludCBfY29sdW1uOwogIGZpbmFsIE9iamVjdCBtZXNzYWdlOwp9CgpjbGFzcyBfVHlwZUVycm9yIGV4dGVuZHMgX0Fzc2VydGlvbkVycm9yIGltcGxlbWVudHMgVHlwZUVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgX1R5cGVFcnJvci5fY3JlYXRlKFN0cmluZyB1cmwsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgZXJyb3JNc2cpCiAgICAgIDogc3VwZXIuX2NyZWF0ZSgiaXMgYXNzaWduYWJsZSIsIHVybCwgbGluZSwgY29sdW1uLCBlcnJvck1zZyk7CgogIHN0YXRpYyBfdGhyb3dOZXcoaW50IGxvY2F0aW9uLCBPYmplY3Qgc3JjX3ZhbHVlLCBfVHlwZSBkc3RfdHlwZSwKICAgICAgU3RyaW5nIGRzdF9uYW1lKSBuYXRpdmUgIlR5cGVFcnJvcl90aHJvd05ldyI7CgogIFN0cmluZyB0b1N0cmluZygpID0+IHN1cGVyLm1lc3NhZ2U7Cn0KCmNsYXNzIF9DYXN0RXJyb3IgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIENhc3RFcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIF9DYXN0RXJyb3IuX2NyZWF0ZSh0aGlzLl91cmwsIHRoaXMuX2xpbmUsIHRoaXMuX2NvbHVtbiwgdGhpcy5fZXJyb3JNc2cpOwoKICAvLyBBIENhc3RFcnJvciBpcyBhbGxvY2F0ZWQgYnkgVHlwZUVycm9yLl90aHJvd05ldygpIHdoZW4gZHN0X25hbWUgZXF1YWxzCiAgLy8gU3ltYm9sczo6SW5UeXBlQ2FzdCgpLgoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfZXJyb3JNc2c7CgogIC8vIEZpZWxkcyBfdXJsLCBfbGluZSwgYW5kIF9jb2x1bW4gYXJlIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgogIGZpbmFsIFN0cmluZyBfdXJsOwogIGZpbmFsIGludCBfbGluZTsKICBmaW5hbCBpbnQgX2NvbHVtbjsKICBmaW5hbCBTdHJpbmcgX2Vycm9yTXNnOwp9CgpAcGF0Y2gKY2xhc3MgRmFsbFRocm91Z2hFcnJvciB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIEZhbGxUaHJvdWdoRXJyb3IuX2NyZWF0ZShTdHJpbmcgdXJsLCBpbnQgbGluZSkKICAgICAgOiBfdXJsID0gdXJsLAogICAgICAgIF9saW5lID0gbGluZTsKCiAgc3RhdGljIF90aHJvd05ldyhpbnQgY2FzZV9jbGF1c2VfcG9zKSBuYXRpdmUgIkZhbGxUaHJvdWdoRXJyb3JfdGhyb3dOZXciOwoKICBAcGF0Y2gKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIickX3VybCc6IFN3aXRjaCBjYXNlIGZhbGwtdGhyb3VnaCBhdCBsaW5lICRfbGluZS4iOwogIH0KCiAgLy8gVGhlc2UgbmV3IGZpZWxkcyBjYW5ub3QgYmUgZGVjbGFyZWQgZmluYWwsIGJlY2F1c2UgYSBjb25zdHJ1Y3RvciBleGlzdHMKICAvLyBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIHBhdGNoZWQgY2xhc3MuCiAgU3RyaW5nIF91cmw7CiAgaW50IF9saW5lOwp9CgpjbGFzcyBfSW50ZXJuYWxFcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IF9JbnRlcm5hbEVycm9yKHRoaXMuX21zZyk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkludGVybmFsRXJyb3I6ICcke19tc2d9JyI7CiAgZmluYWwgU3RyaW5nIF9tc2c7Cn0KCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIFVuc3VwcG9ydGVkRXJyb3IgewogIHN0YXRpYyBfdGhyb3dOZXcoU3RyaW5nIG1zZykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IobXNnKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBDeWNsaWNJbml0aWFsaXphdGlvbkVycm9yIHsKICBzdGF0aWMgX3Rocm93TmV3KFN0cmluZyB2YXJpYWJsZU5hbWUpIHsKICAgIHRocm93IG5ldyBDeWNsaWNJbml0aWFsaXphdGlvbkVycm9yKHZhcmlhYmxlTmFtZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IuX2NyZWF0ZSgKICAgICAgdGhpcy5fY2xhc3NOYW1lLCB0aGlzLl91cmwsIHRoaXMuX2xpbmUpOwoKICBzdGF0aWMgX3Rocm93TmV3KGludCBjYXNlX2NsYXVzZV9wb3MsIFN0cmluZyBjbGFzc05hbWUpCiAgICAgIG5hdGl2ZSAiQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcl90aHJvd05ldyI7CgogIEBwYXRjaAogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiQ2Fubm90IGluc3RhbnRpYXRlIGFic3RyYWN0IGNsYXNzICRfY2xhc3NOYW1lOiAiCiAgICAgICAgIl91cmwgJyRfdXJsJyBsaW5lICRfbGluZSI7CiAgfQoKICAvLyBUaGVzZSBuZXcgZmllbGRzIGNhbm5vdCBiZSBkZWNsYXJlZCBmaW5hbCwgYmVjYXVzZSBhIGNvbnN0cnVjdG9yIGV4aXN0cwogIC8vIGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2hlZCBjbGFzcy4KICBTdHJpbmcgX3VybDsKICBpbnQgX2xpbmU7Cn0KCkBwYXRjaApjbGFzcyBOb1N1Y2hNZXRob2RFcnJvciB7CiAgLy8gRGVwcmVjYXRlZCBtZW1iZXJzIHRvIGJlIHJlbW92ZWQuCiAgU3ltYm9sIF9tZW1iZXJOYW1lOwogIExpc3QgX2FyZ3VtZW50czsKICBNYXA8U3ltYm9sLCBkeW5hbWljPiBfbmFtZWRBcmd1bWVudHM7CiAgTGlzdCBfZXhpc3RpbmdBcmd1bWVudE5hbWVzOwoKICBmaW5hbCBPYmplY3QgX3JlY2VpdmVyOwogIGZpbmFsIF9JbnZvY2F0aW9uTWlycm9yIF9pbnZvY2F0aW9uOwoKICBAcGF0Y2gKICBOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbihPYmplY3QgcmVjZWl2ZXIsIEludm9jYXRpb24gaW52b2NhdGlvbikKICAgICAgOiBfcmVjZWl2ZXIgPSByZWNlaXZlciwKICAgICAgICBfaW52b2NhdGlvbiA9IGludm9jYXRpb24gYXMgX0ludm9jYXRpb25NaXJyb3I7CgogIHN0YXRpYyB2b2lkIF90aHJvd05ld0ludm9jYXRpb24oT2JqZWN0IHJlY2VpdmVyLCBJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbihyZWNlaXZlciwgaW52b2NhdGlvbik7CiAgfQoKICAvLyBUaGUgY29tcGlsZXIgZW1pdHMgYSBjYWxsIHRvIF90aHJvd05ldyB3aGVuIGl0IGNhbm5vdCByZXNvbHZlIGEgc3RhdGljCiAgLy8gbWV0aG9kIGF0IGNvbXBpbGUgdGltZS4gVGhlIHJlY2VpdmVyIGlzIGFjdHVhbGx5IHRoZSBsaXRlcmFsIGNsYXNzIG9mIHRoZQogIC8vIHVucmVzb2x2ZWQgbWV0aG9kLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyB2b2lkIF90aHJvd05ldyhPYmplY3QgcmVjZWl2ZXIsIFN0cmluZyBtZW1iZXJOYW1lLCBpbnQgaW52b2NhdGlvbl90eXBlLAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywgTGlzdCBhcmd1bWVudHMsIExpc3QgYXJndW1lbnROYW1lcykgewogICAgdGhyb3cgbmV3IE5vU3VjaE1ldGhvZEVycm9yLl93aXRoVHlwZShyZWNlaXZlciwgbWVtYmVyTmFtZSwgaW52b2NhdGlvbl90eXBlLAogICAgICAgIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50cywgYXJndW1lbnROYW1lcyk7CiAgfQoKICBzdGF0aWMgdm9pZCBfdGhyb3dOZXdJZk5vdExvYWRlZCgKICAgICAgX0xpYnJhcnlQcmVmaXggcHJlZml4LAogICAgICBPYmplY3QgcmVjZWl2ZXIsCiAgICAgIFN0cmluZyBtZW1iZXJOYW1lLAogICAgICBpbnQgaW52b2NhdGlvbl90eXBlLAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgTGlzdCBhcmd1bWVudHMsCiAgICAgIExpc3QgYXJndW1lbnROYW1lcykgewogICAgaWYgKCFwcmVmaXguaXNMb2FkZWQoKSkgewogICAgICBfdGhyb3dOZXcocmVjZWl2ZXIsIG1lbWJlck5hbWUsIGludm9jYXRpb25fdHlwZSwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRzLAogICAgICAgICAgYXJndW1lbnROYW1lcyk7CiAgICB9CiAgfQoKICAvLyBUT0RPKHJlZ2lzKTogRGVwcmVjYXRlZCBtZW1iZXIgc3RpbGwgdXNlZCBieSBkYXJ0MmpzIHRvIGJlIHJlbW92ZWQuCiAgLy8gUmVtZW1iZXIgdGhlIHR5cGUgZnJvbSB0aGUgaW52b2NhdGlvbiBtaXJyb3Igb3Igc3RhdGljIGNvbXBpbGF0aW9uCiAgLy8gYW5hbHlzaXMgd2hlbiB0aHJvd24gZGlyZWN0bHkgd2l0aCBfdGhyb3dOZXcuIEEgbmVnYXRpdmUgdmFsdWUgbWVhbnMKICAvLyB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KICBpbnQgX2ludm9jYXRpb25fdHlwZTsKCiAgLy8gVE9ETyhyZWdpcyk6IERlcHJlY2F0ZWQgY29uc3RydWN0b3Igc3RpbGwgdXNlZCBieSBkYXJ0MmpzIHRvIGJlIHJlbW92ZWQuCiAgQHBhdGNoCiAgTm9TdWNoTWV0aG9kRXJyb3IoT2JqZWN0IHJlY2VpdmVyLCBTeW1ib2wgbWVtYmVyTmFtZSwKICAgICAgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLCBNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50cywKICAgICAgW0xpc3QgZXhpc3RpbmdBcmd1bWVudE5hbWVzID0gbnVsbF0pCiAgICAgIDogX3JlY2VpdmVyID0gcmVjZWl2ZXIsCiAgICAgICAgX2ludm9jYXRpb24gPSBudWxsLAogICAgICAgIF9tZW1iZXJOYW1lID0gbWVtYmVyTmFtZSwKICAgICAgICBfYXJndW1lbnRzID0gcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICBfbmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cywKICAgICAgICBfZXhpc3RpbmdBcmd1bWVudE5hbWVzID0gZXhpc3RpbmdBcmd1bWVudE5hbWVzLAogICAgICAgIF9pbnZvY2F0aW9uX3R5cGUgPSAtMTsKCiAgLy8gSGVscGVyIHRvIGJ1aWxkIGEgbWFwIG9mIG5hbWVkIGFyZ3VtZW50cy4KICBzdGF0aWMgTWFwPFN5bWJvbCwgZHluYW1pYz4gX05hbWVkQXJndW1lbnRzTWFwKAogICAgICBMaXN0IGFyZ3VtZW50cywgTGlzdCBhcmd1bWVudE5hbWVzKSB7CiAgICBNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50cyA9IG5ldyBNYXA8U3ltYm9sLCBkeW5hbWljPigpOwogICAgaW50IG51bVBvc2l0aW9uYWxBcmd1bWVudHMgPSBhcmd1bWVudHMubGVuZ3RoIC0gYXJndW1lbnROYW1lcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGFyZ192YWx1ZSA9IGFyZ3VtZW50c1tudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgaV07CiAgICAgIG5hbWVkQXJndW1lbnRzW25ldyBTeW1ib2woYXJndW1lbnROYW1lc1tpXSldID0gYXJnX3ZhbHVlOwogICAgfQogICAgcmV0dXJuIG5hbWVkQXJndW1lbnRzOwogIH0KCiAgLy8gQ29uc3RydWN0b3IgY2FsbGVkIGZyb20gRXhjZXB0aW9uczo6VGhyb3dCeVR5cGUoa05vU3VjaE1ldGhvZCkgYW5kIGZyb20KICAvLyBfdGhyb3dOZXcgYWJvdmUsIHRha2luZyBhIFR5cGVBcmd1bWVudHMgb2JqZWN0IHJhdGhlciB0aGFuIGFuIHVucGFja2VkIGxpc3QKICAvLyBvZiB0eXBlcywgYXMgd2VsbCBhcyBhIGxpc3Qgb2YgYWxsIGFyZ3VtZW50cyBhbmQgYSBsaXN0IG9mIG5hbWVzLCByYXRoZXIKICAvLyB0aGFuIGEgc2VwYXJhdGUgbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhbmQgYSBtYXAgb2YgbmFtZWQgYXJndW1lbnRzLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBOb1N1Y2hNZXRob2RFcnJvci5fd2l0aFR5cGUoCiAgICAgIHRoaXMuX3JlY2VpdmVyLAogICAgICBTdHJpbmcgbWVtYmVyTmFtZSwKICAgICAgaW50IGludm9jYXRpb25fdHlwZSwKICAgICAgT2JqZWN0IHR5cGVBcmd1bWVudHMsCiAgICAgIExpc3QgYXJndW1lbnRzLAogICAgICBMaXN0IGFyZ3VtZW50TmFtZXMpCiAgICAgIDogdGhpcy5faW52b2NhdGlvbiA9IG5ldyBfSW52b2NhdGlvbk1pcnJvci5fd2l0aFR5cGUoCiAgICAgICAgICAgIG5ldyBTeW1ib2wobWVtYmVyTmFtZSksCiAgICAgICAgICAgIGludm9jYXRpb25fdHlwZSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyAhPSBudWxsCiAgICAgICAgICAgICAgICAvLyBUT0RPKDMzMDczKTogVXNlIGFjdHVhbCBjb3VudCBvZiB0eXBlIGFyZ3VtZW50cyBpbiBwbGFjZSBvZiAwLgogICAgICAgICAgICAgICAgPyBfSW52b2NhdGlvbk1pcnJvci5fdW5wYWNrVHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzLCAwKQogICAgICAgICAgICAgICAgOiBudWxsLAogICAgICAgICAgICBhcmd1bWVudE5hbWVzICE9IG51bGwKICAgICAgICAgICAgICAgID8gYXJndW1lbnRzLnN1Ymxpc3QoMCwgYXJndW1lbnRzLmxlbmd0aCAtIGFyZ3VtZW50TmFtZXMubGVuZ3RoKQogICAgICAgICAgICAgICAgOiBhcmd1bWVudHMsCiAgICAgICAgICAgIGFyZ3VtZW50TmFtZXMgIT0gbnVsbAogICAgICAgICAgICAgICAgPyBfTmFtZWRBcmd1bWVudHNNYXAoYXJndW1lbnRzLCBhcmd1bWVudE5hbWVzKQogICAgICAgICAgICAgICAgOiBudWxsKTsKCiAgc3RhdGljIFN0cmluZyBfZXhpc3RpbmdNZXRob2RTaWduYXR1cmUoT2JqZWN0IHJlY2VpdmVyLCBTdHJpbmcgbWV0aG9kTmFtZSwKICAgICAgaW50IGludm9jYXRpb25UeXBlKSBuYXRpdmUgIk5vU3VjaE1ldGhvZEVycm9yX2V4aXN0aW5nTWV0aG9kU2lnbmF0dXJlIjsKCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgLy8gVE9ETyhyZWdpcyk6IFJlbW92ZSB0aGlzIG51bGwgY2hlY2sgb25jZSBkYXJ0MmpzIGlzIHVwZGF0ZWQuCiAgICBpZiAoX2ludm9jYXRpb24gPT0gbnVsbCkgewogICAgICAvLyBVc2UgZGVwcmVjYXRlZCB2ZXJzaW9uIG9mIHRvU3RyaW5nLgogICAgICByZXR1cm4gX3RvU3RyaW5nRGVwcmVjYXRlZCgpOwogICAgfQogICAgU3RyaW5nIG1lbWJlck5hbWUgPQogICAgICAgIGludGVybmFsLlN5bWJvbC5jb21wdXRlVW5tYW5nbGVkTmFtZShfaW52b2NhdGlvbi5tZW1iZXJOYW1lKTsKICAgIHZhciBsZXZlbCA9IChfaW52b2NhdGlvbi5fdHlwZSA+PiBfSW52b2NhdGlvbk1pcnJvci5fTEVWRUxfU0hJRlQpICYKICAgICAgICBfSW52b2NhdGlvbk1pcnJvci5fTEVWRUxfTUFTSzsKICAgIHZhciBraW5kID0gX2ludm9jYXRpb24uX3R5cGUgJiBfSW52b2NhdGlvbk1pcnJvci5fS0lORF9NQVNLOwogICAgaWYgKGtpbmQgPT0gX0ludm9jYXRpb25NaXJyb3IuX0xPQ0FMX1ZBUikgewogICAgICByZXR1cm4gIk5vU3VjaE1ldGhvZEVycm9yOiBDYW5ub3QgYXNzaWduIHRvIGZpbmFsIHZhcmlhYmxlICckbWVtYmVyTmFtZSciOwogICAgfQoKICAgIFN0cmluZ0J1ZmZlciB0eXBlQXJndW1lbnRzQnVmID0gbnVsbDsKICAgIHZhciB0eXBlQXJndW1lbnRzID0gX2ludm9jYXRpb24udHlwZUFyZ3VtZW50czsKICAgIGlmICgodHlwZUFyZ3VtZW50cyAhPSBudWxsKSAmJiAodHlwZUFyZ3VtZW50cy5sZW5ndGggPiAwKSkgewogICAgICB0eXBlQXJndW1lbnRzQnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICB0eXBlQXJndW1lbnRzQnVmLndyaXRlKCI8Iik7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgdHlwZUFyZ3VtZW50c0J1Zi53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgdHlwZUFyZ3VtZW50c0J1Zi53cml0ZShFcnJvci5zYWZlVG9TdHJpbmcodHlwZUFyZ3VtZW50c1tpXSkpOwogICAgICB9CiAgICAgIHR5cGVBcmd1bWVudHNCdWYud3JpdGUoIj4iKTsKICAgIH0KICAgIFN0cmluZ0J1ZmZlciBhcmd1bWVudHNCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICB2YXIgcG9zaXRpb25hbEFyZ3VtZW50cyA9IF9pbnZvY2F0aW9uLnBvc2l0aW9uYWxBcmd1bWVudHM7CiAgICBpbnQgYXJndW1lbnRDb3VudCA9IDA7CiAgICBpZiAocG9zaXRpb25hbEFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGZvciAoOyBhcmd1bWVudENvdW50IDwgcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGg7IGFyZ3VtZW50Q291bnQrKykgewogICAgICAgIGlmIChhcmd1bWVudENvdW50ID4gMCkgewogICAgICAgICAgYXJndW1lbnRzQnVmLndyaXRlKCIsICIpOwogICAgICAgIH0KICAgICAgICBhcmd1bWVudHNCdWYKICAgICAgICAgICAgLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyhwb3NpdGlvbmFsQXJndW1lbnRzW2FyZ3VtZW50Q291bnRdKSk7CiAgICAgIH0KICAgIH0KICAgIHZhciBuYW1lZEFyZ3VtZW50cyA9IF9pbnZvY2F0aW9uLm5hbWVkQXJndW1lbnRzOwogICAgaWYgKG5hbWVkQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgbmFtZWRBcmd1bWVudHMuZm9yRWFjaCgoU3ltYm9sIGtleSwgdmFyIHZhbHVlKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgICAgICBhcmd1bWVudHNCdWYud3JpdGUoIiwgIik7CiAgICAgICAgfQogICAgICAgIGFyZ3VtZW50c0J1Zi53cml0ZShpbnRlcm5hbC5TeW1ib2wuY29tcHV0ZVVubWFuZ2xlZE5hbWUoa2V5KSk7CiAgICAgICAgYXJndW1lbnRzQnVmLndyaXRlKCI6ICIpOwogICAgICAgIGFyZ3VtZW50c0J1Zi53cml0ZShFcnJvci5zYWZlVG9TdHJpbmcodmFsdWUpKTsKICAgICAgICBhcmd1bWVudENvdW50Kys7CiAgICAgIH0pOwogICAgfQogICAgU3RyaW5nIGV4aXN0aW5nU2lnID0KICAgICAgICBfZXhpc3RpbmdNZXRob2RTaWduYXR1cmUoX3JlY2VpdmVyLCBtZW1iZXJOYW1lLCBfaW52b2NhdGlvbi5fdHlwZSk7CiAgICBTdHJpbmcgYXJnc01zZyA9IGV4aXN0aW5nU2lnICE9IG51bGwgPyAiIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzIiA6ICIiOwoKICAgIFN0cmluZyBraW5kQnVmOwogICAgaWYgKGtpbmQgPj0gMCAmJiBraW5kIDwgNSkgewogICAgICBraW5kQnVmID0gKGNvbnN0IFsKICAgICAgICAibWV0aG9kIiwKICAgICAgICAiZ2V0dGVyIiwKICAgICAgICAic2V0dGVyIiwKICAgICAgICAiZ2V0dGVyIG9yIHNldHRlciIsCiAgICAgICAgInZhcmlhYmxlIgogICAgICBdKVtraW5kXTsKICAgIH0KCiAgICBTdHJpbmdCdWZmZXIgbXNnQnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiTm9TdWNoTWV0aG9kRXJyb3I6ICIpOwogICAgYm9vbCBpc190eXBlX2NhbGwgPSBmYWxzZTsKICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fRFlOQU1JQzoKICAgICAgICB7CiAgICAgICAgICBpZiAoX3JlY2VpdmVyID09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGV4aXN0aW5nU2lnICE9IG51bGwpIHsKICAgICAgICAgICAgICBtc2dCdWYud3JpdGVsbigiVGhlIG51bGwgb2JqZWN0IGRvZXMgbm90IGhhdmUgYSAka2luZEJ1ZiAiCiAgICAgICAgICAgICAgICAgICInJG1lbWJlck5hbWUnJGFyZ3NNc2cuIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbXNnQnVmLndyaXRlbG4oIlRoZSAka2luZEJ1ZiAnJG1lbWJlck5hbWUnIHdhcyBjYWxsZWQgb24gbnVsbC4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKF9yZWNlaXZlciBpcyBfQ2xvc3VyZSkgewogICAgICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJDbG9zdXJlIGNhbGwgd2l0aCBtaXNtYXRjaGVkIGFyZ3VtZW50czogIgogICAgICAgICAgICAgICAgICAiZnVuY3Rpb24gJyRtZW1iZXJOYW1lJyIpOwogICAgICAgICAgICB9IGVsc2UgaWYgKF9yZWNlaXZlciBpcyBfVHlwZSAmJiBtZW1iZXJOYW1lID09ICJjYWxsIikgewogICAgICAgICAgICAgIGlzX3R5cGVfY2FsbCA9IHRydWU7CiAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBfcmVjZWl2ZXIudG9TdHJpbmcoKTsKICAgICAgICAgICAgICBtc2dCdWYud3JpdGVsbigiQXR0ZW1wdGVkIHRvIHVzZSB0eXBlICckbmFtZScgYXMgYSBmdW5jdGlvbi4gIgogICAgICAgICAgICAgICAgICAiU2luY2UgdHlwZXMgZG8gbm90IGRlZmluZSBhIG1ldGhvZCAnY2FsbCcsIHRoaXMgaXMgbm90ICIKICAgICAgICAgICAgICAgICAgInBvc3NpYmxlLiBEaWQgeW91IGludGVuZCB0byBjYWxsIHRoZSAkbmFtZSBjb25zdHJ1Y3RvciBhbmQgIgogICAgICAgICAgICAgICAgICAiZm9yZ2V0IHRoZSAnbmV3JyBvcGVyYXRvcj8iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtc2dCdWYud3JpdGVsbigiQ2xhc3MgJyR7X3JlY2VpdmVyLnJ1bnRpbWVUeXBlfScgaGFzIG5vIGluc3RhbmNlICIKICAgICAgICAgICAgICAgICAgIiRraW5kQnVmICckbWVtYmVyTmFtZSckYXJnc01zZy4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9TVVBFUjoKICAgICAgICB7CiAgICAgICAgICBtc2dCdWYud3JpdGVsbigiU3VwZXIgY2xhc3Mgb2YgY2xhc3MgJyR7X3JlY2VpdmVyLnJ1bnRpbWVUeXBlfScgaGFzICIKICAgICAgICAgICAgICAibm8gaW5zdGFuY2UgJGtpbmRCdWYgJyRtZW1iZXJOYW1lJyRhcmdzTXNnLiIpOwogICAgICAgICAgbWVtYmVyTmFtZSA9ICJzdXBlci4kbWVtYmVyTmFtZSI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX1NUQVRJQzoKICAgICAgICB7CiAgICAgICAgICBtc2dCdWYud3JpdGVsbigiTm8gc3RhdGljICRraW5kQnVmICckbWVtYmVyTmFtZSckYXJnc01zZyAiCiAgICAgICAgICAgICAgImRlY2xhcmVkIGluIGNsYXNzICckX3JlY2VpdmVyJy4iKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fQ09OU1RSVUNUT1I6CiAgICAgICAgewogICAgICAgICAgbXNnQnVmLndyaXRlbG4oIk5vIGNvbnN0cnVjdG9yICckbWVtYmVyTmFtZSckYXJnc01zZyBkZWNsYXJlZCAiCiAgICAgICAgICAgICAgImluIGNsYXNzICckX3JlY2VpdmVyJy4iKTsKICAgICAgICAgIG1lbWJlck5hbWUgPSAibmV3ICRtZW1iZXJOYW1lIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fVE9QX0xFVkVMOgogICAgICAgIHsKICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJObyB0b3AtbGV2ZWwgJGtpbmRCdWYgJyRtZW1iZXJOYW1lJyRhcmdzTXNnICIKICAgICAgICAgICAgICAiZGVjbGFyZWQuIik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGxldmVsID09IF9JbnZvY2F0aW9uTWlycm9yLl9UT1BfTEVWRUwpIHsKICAgICAgbXNnQnVmLndyaXRlbG4oIlJlY2VpdmVyOiB0b3AtbGV2ZWwiKTsKICAgIH0gZWxzZSB7CiAgICAgIG1zZ0J1Zi53cml0ZWxuKCJSZWNlaXZlcjogJHtFcnJvci5zYWZlVG9TdHJpbmcoX3JlY2VpdmVyKX0iKTsKICAgIH0KCiAgICBpZiAoa2luZCA9PSBfSW52b2NhdGlvbk1pcnJvci5fTUVUSE9EKSB7CiAgICAgIFN0cmluZyBtID0gaXNfdHlwZV9jYWxsID8gIiRfcmVjZWl2ZXIiIDogIiRtZW1iZXJOYW1lIjsKICAgICAgbXNnQnVmLndyaXRlKCJUcmllZCBjYWxsaW5nOiAkbSIpOwogICAgICBpZiAodHlwZUFyZ3VtZW50c0J1ZiAhPSBudWxsKSB7CiAgICAgICAgbXNnQnVmLndyaXRlKHR5cGVBcmd1bWVudHNCdWYpOwogICAgICB9CiAgICAgIG1zZ0J1Zi53cml0ZSgiKCRhcmd1bWVudHNCdWYpIik7CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50Q291bnQgPT0gMCkgewogICAgICBtc2dCdWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lIik7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gX0ludm9jYXRpb25NaXJyb3IuX1NFVFRFUikgewogICAgICBtc2dCdWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lJGFyZ3VtZW50c0J1ZiIpOwogICAgfSBlbHNlIHsKICAgICAgbXNnQnVmLndyaXRlKCJUcmllZCBjYWxsaW5nOiAkbWVtYmVyTmFtZSA9ICRhcmd1bWVudHNCdWYiKTsKICAgIH0KCiAgICBpZiAoZXhpc3RpbmdTaWcgIT0gbnVsbCkgewogICAgICBtc2dCdWYud3JpdGUoIlxuRm91bmQ6ICRtZW1iZXJOYW1lJGV4aXN0aW5nU2lnIik7CiAgICB9CgogICAgcmV0dXJuIG1zZ0J1Zi50b1N0cmluZygpOwogIH0KCiAgLy8gVE9ETyhyZWdpcyk6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgZGFydDJqcyBpcyB1cGRhdGVkLgogIFN0cmluZyBfdG9TdHJpbmdEZXByZWNhdGVkKCkgewogICAgdmFyIGxldmVsID0gKF9pbnZvY2F0aW9uX3R5cGUgPj4gX0ludm9jYXRpb25NaXJyb3IuX0xFVkVMX1NISUZUKSAmCiAgICAgICAgX0ludm9jYXRpb25NaXJyb3IuX0xFVkVMX01BU0s7CiAgICB2YXIgdHlwZSA9IF9pbnZvY2F0aW9uX3R5cGUgJiBfSW52b2NhdGlvbk1pcnJvci5fS0lORF9NQVNLOwogICAgU3RyaW5nIG1lbWJlck5hbWUgPSAoX21lbWJlck5hbWUgPT0gbnVsbCkKICAgICAgICA/ICIiCiAgICAgICAgOiBpbnRlcm5hbC5TeW1ib2wuY29tcHV0ZVVubWFuZ2xlZE5hbWUoX21lbWJlck5hbWUpOwoKICAgIGlmICh0eXBlID09IF9JbnZvY2F0aW9uTWlycm9yLl9MT0NBTF9WQVIpIHsKICAgICAgcmV0dXJuICJOb1N1Y2hNZXRob2RFcnJvcjogQ2Fubm90IGFzc2lnbiB0byBmaW5hbCB2YXJpYWJsZSAnJG1lbWJlck5hbWUnIjsKICAgIH0KCiAgICBTdHJpbmdCdWZmZXIgYXJndW1lbnRzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaW50IGFyZ3VtZW50Q291bnQgPSAwOwogICAgaWYgKF9hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBmb3IgKDsgYXJndW1lbnRDb3VudCA8IF9hcmd1bWVudHMubGVuZ3RoOyBhcmd1bWVudENvdW50KyspIHsKICAgICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgICAgIGFyZ3VtZW50cy53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgYXJndW1lbnRzLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyhfYXJndW1lbnRzW2FyZ3VtZW50Q291bnRdKSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfbmFtZWRBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBfbmFtZWRBcmd1bWVudHMuZm9yRWFjaCgoU3ltYm9sIGtleSwgdmFyIHZhbHVlKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgICAgICBhcmd1bWVudHMud3JpdGUoIiwgIik7CiAgICAgICAgfQogICAgICAgIGFyZ3VtZW50cy53cml0ZShpbnRlcm5hbC5TeW1ib2wuY29tcHV0ZVVubWFuZ2xlZE5hbWUoa2V5KSk7CiAgICAgICAgYXJndW1lbnRzLndyaXRlKCI6ICIpOwogICAgICAgIGFyZ3VtZW50cy53cml0ZShFcnJvci5zYWZlVG9TdHJpbmcodmFsdWUpKTsKICAgICAgICBhcmd1bWVudENvdW50Kys7CiAgICAgIH0pOwogICAgfQogICAgYm9vbCBhcmdzX21pc21hdGNoID0gX2V4aXN0aW5nQXJndW1lbnROYW1lcyAhPSBudWxsOwogICAgU3RyaW5nIGFyZ3NfbWVzc2FnZSA9IGFyZ3NfbWlzbWF0Y2ggPyAiIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzIiA6ICIiOwoKICAgIFN0cmluZyB0eXBlX3N0cjsKICAgIGlmICh0eXBlID49IDAgJiYgdHlwZSA8IDUpIHsKICAgICAgdHlwZV9zdHIgPSAoY29uc3QgWwogICAgICAgICJtZXRob2QiLAogICAgICAgICJnZXR0ZXIiLAogICAgICAgICJzZXR0ZXIiLAogICAgICAgICJnZXR0ZXIgb3Igc2V0dGVyIiwKICAgICAgICAidmFyaWFibGUiCiAgICAgIF0pW3R5cGVdOwogICAgfQoKICAgIFN0cmluZ0J1ZmZlciBtc2dfYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiTm9TdWNoTWV0aG9kRXJyb3I6ICIpOwogICAgYm9vbCBpc190eXBlX2NhbGwgPSBmYWxzZTsKICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fRFlOQU1JQzoKICAgICAgICB7CiAgICAgICAgICBpZiAoX3JlY2VpdmVyID09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGFyZ3NfbWlzbWF0Y2gpIHsKICAgICAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIlRoZSBudWxsIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgJHR5cGVfc3RyICIKICAgICAgICAgICAgICAgICAgIickbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlLiIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1zZ19idWYKICAgICAgICAgICAgICAgICAgLndyaXRlbG4oIlRoZSAkdHlwZV9zdHIgJyRtZW1iZXJOYW1lJyB3YXMgY2FsbGVkIG9uIG51bGwuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChfcmVjZWl2ZXIgaXMgX0Nsb3N1cmUpIHsKICAgICAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIkNsb3N1cmUgY2FsbCB3aXRoIG1pc21hdGNoZWQgYXJndW1lbnRzOiAiCiAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiAnJG1lbWJlck5hbWUnIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoX3JlY2VpdmVyIGlzIF9UeXBlICYmIG1lbWJlck5hbWUgPT0gImNhbGwiKSB7CiAgICAgICAgICAgICAgaXNfdHlwZV9jYWxsID0gdHJ1ZTsKICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IF9yZWNlaXZlci50b1N0cmluZygpOwogICAgICAgICAgICAgIG1zZ19idWYud3JpdGVsbigiQXR0ZW1wdGVkIHRvIHVzZSB0eXBlICckbmFtZScgYXMgYSBmdW5jdGlvbi4gIgogICAgICAgICAgICAgICAgICAiU2luY2UgdHlwZXMgZG8gbm90IGRlZmluZSBhIG1ldGhvZCAnY2FsbCcsIHRoaXMgaXMgbm90ICIKICAgICAgICAgICAgICAgICAgInBvc3NpYmxlLiBEaWQgeW91IGludGVuZCB0byBjYWxsIHRoZSAkbmFtZSBjb25zdHJ1Y3RvciBhbmQgIgogICAgICAgICAgICAgICAgICAiZm9yZ2V0IHRoZSAnbmV3JyBvcGVyYXRvcj8iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtc2dfYnVmCiAgICAgICAgICAgICAgICAgIC53cml0ZWxuKCJDbGFzcyAnJHtfcmVjZWl2ZXIucnVudGltZVR5cGV9JyBoYXMgbm8gaW5zdGFuY2UgIgogICAgICAgICAgICAgICAgICAgICAgIiR0eXBlX3N0ciAnJG1lbWJlck5hbWUnJGFyZ3NfbWVzc2FnZS4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9TVVBFUjoKICAgICAgICB7CiAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIlN1cGVyIGNsYXNzIG9mIGNsYXNzICcke19yZWNlaXZlci5ydW50aW1lVHlwZX0nIGhhcyAiCiAgICAgICAgICAgICAgIm5vIGluc3RhbmNlICR0eXBlX3N0ciAnJG1lbWJlck5hbWUnJGFyZ3NfbWVzc2FnZS4iKTsKICAgICAgICAgIG1lbWJlck5hbWUgPSAic3VwZXIuJG1lbWJlck5hbWUiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9TVEFUSUM6CiAgICAgICAgewogICAgICAgICAgbXNnX2J1Zi53cml0ZWxuKCJObyBzdGF0aWMgJHR5cGVfc3RyICckbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlICIKICAgICAgICAgICAgICAiZGVjbGFyZWQgaW4gY2xhc3MgJyRfcmVjZWl2ZXInLiIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9DT05TVFJVQ1RPUjoKICAgICAgICB7CiAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIk5vIGNvbnN0cnVjdG9yICckbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlIGRlY2xhcmVkICIKICAgICAgICAgICAgICAiaW4gY2xhc3MgJyRfcmVjZWl2ZXInLiIpOwogICAgICAgICAgbWVtYmVyTmFtZSA9ICJuZXcgJG1lbWJlck5hbWUiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9UT1BfTEVWRUw6CiAgICAgICAgewogICAgICAgICAgbXNnX2J1Zi53cml0ZWxuKCJObyB0b3AtbGV2ZWwgJHR5cGVfc3RyICckbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlICIKICAgICAgICAgICAgICAiZGVjbGFyZWQuIik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGxldmVsID09IF9JbnZvY2F0aW9uTWlycm9yLl9UT1BfTEVWRUwpIHsKICAgICAgbXNnX2J1Zi53cml0ZWxuKCJSZWNlaXZlcjogdG9wLWxldmVsIik7CiAgICB9IGVsc2UgewogICAgICBtc2dfYnVmLndyaXRlbG4oIlJlY2VpdmVyOiAke0Vycm9yLnNhZmVUb1N0cmluZyhfcmVjZWl2ZXIpfSIpOwogICAgfQoKICAgIGlmICh0eXBlID09IF9JbnZvY2F0aW9uTWlycm9yLl9NRVRIT0QpIHsKICAgICAgU3RyaW5nIG0gPSBpc190eXBlX2NhbGwgPyAiJF9yZWNlaXZlciIgOiAiJG1lbWJlck5hbWUiOwogICAgICBtc2dfYnVmLndyaXRlKCJUcmllZCBjYWxsaW5nOiAkbSgkYXJndW1lbnRzKSIpOwogICAgfSBlbHNlIGlmIChhcmd1bWVudENvdW50ID09IDApIHsKICAgICAgbXNnX2J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG1lbWJlck5hbWUiKTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PSBfSW52b2NhdGlvbk1pcnJvci5fU0VUVEVSKSB7CiAgICAgIG1zZ19idWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lJGFyZ3VtZW50cyIpOwogICAgfSBlbHNlIHsKICAgICAgbXNnX2J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG1lbWJlck5hbWUgPSAkYXJndW1lbnRzIik7CiAgICB9CgogICAgaWYgKGFyZ3NfbWlzbWF0Y2gpIHsKICAgICAgU3RyaW5nQnVmZmVyIGZvcm1hbFBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2V4aXN0aW5nQXJndW1lbnROYW1lcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgZm9ybWFsUGFyYW1ldGVycy53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgZm9ybWFsUGFyYW1ldGVycy53cml0ZShfZXhpc3RpbmdBcmd1bWVudE5hbWVzW2ldKTsKICAgICAgfQogICAgICBtc2dfYnVmLndyaXRlKCJcbkZvdW5kOiAkbWVtYmVyTmFtZSgkZm9ybWFsUGFyYW1ldGVycykiKTsKICAgIH0KCiAgICByZXR1cm4gbXNnX2J1Zi50b1N0cmluZygpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfQ29tcGlsZVRpbWVFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX2Vycm9yTXNnOwogIF9Db21waWxlVGltZUVycm9yKHRoaXMuX2Vycm9yTXNnKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfZXJyb3JNc2c7Cn0KCi8vLyBVc2VkIGJ5IEZhc3RhIHRvIHJlcG9ydCBhIHJ1bnRpbWUgZXJyb3Igd2hlbiBhIGZpbmFsIGZpZWxkIHdpdGggYW4KLy8vIGluaXRpYWxpemVyIGlzIGFsc28gaW5pdGlhbGl6ZWQgaW4gYSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLgovLy8KLy8vIE5vdGU6IGluIHN0cm9uZyBtb2RlLCB0aGlzIGlzIGEgY29tcGlsZS10aW1lIGVycm9yIGFuZCB0aGlzIGNsYXNzIGJlY29tZXMKLy8vIG9ic29sZXRlLgpjbGFzcyBfRHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX25hbWU7CgogIF9EdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yKHRoaXMuX25hbWUpOwoKICB0b1N0cmluZygpID0+ICJFcnJvcjogZmllbGQgJyRfbmFtZScgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4iOwp9CoJQAE5OPAEeAQcOCTElBAEJNSAEAQksARwaAgFAHBtRAUtBSyRLOAQBSygBJClFGAYhJwYhHwYWBAEeMCsoBAEWGDw/BhkXNSQGQTAEASEVExUYAgFAHEhFAUM0ASYCATYcSwFMHAEiAUsVExUaAgEHGQkcMRQWAUwBCRZABAFNNA8NAgEXHCMzFQIBBxoZISUEAgEHIio3BAIBBygcKy8BOjkBCRY9JAQBTTQPDQIBBxonFhMoHwEaJwEJSx43AUxGBAFMTxgkUUJRMgQBJB0XGRscFhweURoGBAFJSEonGAFOCThFKx4cIioqOB8BLzIsRko1PUAGGwQBTVFOUBwfFhkbHBYaPCQdIlJLGCJQHSI/GQFNTgEJFkQfLSQGGEZIJ0EwUQYBKjNBLSM3FSgKRggjBjQ/GydMISQKFUwIBjUiNyEkCkciNxkKBhlMTAEUIRkSEhIcExAGAUMfFScKIydJLRVQDhMpSC1FIzJNTFAxFVE2DgwRCiUKUD4sEQomCkUyEQorCkopKhEKKQpIHBEKBgExLQ1EBgEtPikmKAgnJTI0Pw1CBgEfOAYBHgQBQCFHJ0AuDT0BMFEGATEbHkMhIQpICAYjOCEhCkQfNBkKBjlLARUhGhISEhwTEAYBRB8VJwojIUsyFRZPDhMpSS1FIzJOTFAxFRZPQA4MEQolClFELBEKJgpMMhEKKwpQKSoRCikKTxwRCgYBMS4NRQYBLT42JTM0PQ1ABgEZOkAVKAo7CEAGAR8EAgEaKBolIgIBR0EETg43FgEwAUECASFkYXJ0OmNvcmUtcGF0Y2gvZXJyb3JzX3BhdGNoLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL2FzeW5jX2Vycm9yLmRhcnSDLC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgpfaW52b2tlRXJyb3JIYW5kbGVyKAogICAgRnVuY3Rpb24gZXJyb3JIYW5kbGVyLCBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogIGlmIChlcnJvckhhbmRsZXIgaXMgWm9uZUJpbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE51bGwsIE51bGw+KSB7CiAgICAvLyBEeW5hbWljIGludm9jYXRpb24gYmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUKICAgIC8vIGZpcnN0IGFyZ3VtZW50IG9yIHRoZSBlcnJvciBvYmplY3QsIGJ1dCB3ZSBzaG91bGQgc3VjY2Vzc2Z1bGx5IGNhbGwKICAgIC8vIHRoZSBoYW5kbGVyIGlmIHRoZXkgbWF0Y2ggdXAuCiAgICAvLyBUT0RPKGxybik6IFNob3VsZCB3ZT8gV2h5IG5vdCB0aGUgc2FtZSBiZWxvdyBmb3IgdGhlIHVuYXJ5IGNhc2U/CiAgICByZXR1cm4gKGVycm9ySGFuZGxlciBhcyBkeW5hbWljKShlcnJvciwgc3RhY2tUcmFjZSk7CiAgfSBlbHNlIHsKICAgIFpvbmVVbmFyeUNhbGxiYWNrIHVuYXJ5RXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyOwogICAgcmV0dXJuIHVuYXJ5RXJyb3JIYW5kbGVyKGVycm9yKTsKICB9Cn0KFQBOTjwBFAEVQkFHSyVIOQs4JQQCARtkYXJ0OmFzeW5jL2FzeW5jX2Vycm9yLmRhcnQ2b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vY29sbGVjdGlvbi5kYXJ0gzMvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIENsYXNzZXMgYW5kIHV0aWxpdGllcyB0aGF0IHN1cHBsZW1lbnQgdGhlIGNvbGxlY3Rpb24gc3VwcG9ydCBpbiBkYXJ0OmNvcmUuCi8vLwovLy8gVG8gdXNlIHRoaXMgbGlicmFyeSBpbiB5b3VyIGNvZGU6Ci8vLwovLy8gICAgIGltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKLy8vCi8vLyB7QGNhdGVnb3J5IENvcmV9CmxpYnJhcnkgZGFydC5jb2xsZWN0aW9uOwoKaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCcgaGlkZSBTeW1ib2w7CmltcG9ydCAnZGFydDptYXRoJyBzaG93IFJhbmRvbTsgLy8gVXNlZCBieSBMaXN0TWl4aW4uc2h1ZmZsZS4KCnBhcnQgJ2NvbGxlY3Rpb25zLmRhcnQnOwpwYXJ0ICdoYXNoX21hcC5kYXJ0JzsKcGFydCAnaGFzaF9zZXQuZGFydCc7CnBhcnQgJ2l0ZXJhYmxlLmRhcnQnOwpwYXJ0ICdpdGVyYXRvci5kYXJ0JzsKcGFydCAnbGlua2VkX2hhc2hfbWFwLmRhcnQnOwpwYXJ0ICdsaW5rZWRfaGFzaF9zZXQuZGFydCc7CnBhcnQgJ2xpbmtlZF9saXN0LmRhcnQnOwpwYXJ0ICdsaXN0LmRhcnQnOwpwYXJ0ICdtYXBzLmRhcnQnOwpwYXJ0ICdxdWV1ZS5kYXJ0JzsKcGFydCAnc2V0LmRhcnQnOwpwYXJ0ICdzcGxheV90cmVlLmRhcnQnOwofAE5OPAFPBCYEIgQVGQElPgEZFhYWFh0dGRISExEYAQ9kYXJ0OmNvbGxlY3Rpb240b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vaGFzaF9tYXAuZGFydJkzLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIERlZmF1bHQgZnVuY3Rpb24gZm9yIGVxdWFsaXR5IGNvbXBhcmlzb24gaW4gY3VzdG9taXplZCBIYXNoTWFwcwpib29sIF9kZWZhdWx0RXF1YWxzKGEsIGIpID0+IGEgPT0gYjsKCi8vLyBEZWZhdWx0IGZ1bmN0aW9uIGZvciBoYXNoLWNvZGUgY29tcHV0YXRpb24gaW4gY3VzdG9taXplZCBIYXNoTWFwcwppbnQgX2RlZmF1bHRIYXNoQ29kZShhKSA9PiBhLmhhc2hDb2RlOwoKLy8vIFR5cGUgb2YgY3VzdG9tIGVxdWFsaXR5IGZ1bmN0aW9uCnR5cGVkZWYgX0VxdWFsaXR5PEs+ID0gYm9vbCBGdW5jdGlvbihLIGEsIEsgYik7CgovLy8gVHlwZSBvZiBjdXN0b20gaGFzaCBjb2RlIGZ1bmN0aW9uLgp0eXBlZGVmIF9IYXNoZXI8Sz4gPSBpbnQgRnVuY3Rpb24oSyBvYmplY3QpOwoKLy8vIEEgaGFzaC10YWJsZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBbTWFwXS4KLy8vCi8vLyBUaGUga2V5cyBvZiBhIGBIYXNoTWFwYCBtdXN0IGhhdmUgY29uc2lzdGVudCBbT2JqZWN0Lj09XQovLy8gYW5kIFtPYmplY3QuaGFzaENvZGVdIGltcGxlbWVudGF0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHRoZSBgPT1gIG9wZXJhdG9yCi8vLyBtdXN0IGRlZmluZSBhIHN0YWJsZSBlcXVpdmFsZW5jZSByZWxhdGlvbiBvbiB0aGUga2V5cyAocmVmbGV4aXZlLAovLy8gc3ltbWV0cmljLCB0cmFuc2l0aXZlLCBhbmQgY29uc2lzdGVudCBvdmVyIHRpbWUpLCBhbmQgdGhhdCBgaGFzaENvZGVgCi8vLyBtdXN0IGJlIHRoZSBzYW1lIGZvciBvYmplY3RzIHRoYXQgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYnkgYD09YC4KLy8vCi8vLyBUaGUgbWFwIGFsbG93cyBgbnVsbGAgYXMgYSBrZXkuCi8vLwovLy8gSXRlcmF0aW5nIHRoZSBtYXAncyBrZXlzLCB2YWx1ZXMgb3IgZW50cmllcyAodGhyb3VnaCBbZm9yRWFjaF0pCi8vLyBtYXkgaGFwcGVuIGluIGFueSBvcmRlci4KLy8vIFRoZSBpdGVyYXRpb24gb3JkZXIgb25seSBjaGFuZ2VzIHdoZW4gdGhlIG1hcCBpcyBtb2RpZmllZC4KLy8vIFZhbHVlcyBhcmUgaXRlcmF0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlaXIgYXNzb2NpYXRlZCBrZXlzLAovLy8gc28gaXRlcmF0aW5nIHRoZSBba2V5c10gYW5kIFt2YWx1ZXNdIGluIHBhcmFsbGVsCi8vLyB3aWxsIGdpdmUgbWF0Y2hpbmcga2V5IGFuZCB2YWx1ZSBwYWlycy4KYWJzdHJhY3QgY2xhc3MgSGFzaE1hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgLy8vIENyZWF0ZXMgYW4gdW5vcmRlcmVkIGhhc2gtdGFibGUgYmFzZWQgW01hcF0uCiAgLy8vCiAgLy8vIFRoZSBjcmVhdGVkIG1hcCBpcyBub3Qgb3JkZXJlZCBpbiBhbnkgd2F5LiBXaGVuIGl0ZXJhdGluZyB0aGUga2V5cyBvcgogIC8vLyB2YWx1ZXMsIHRoZSBpdGVyYXRpb24gb3JkZXIgaXMgdW5zcGVjaWZpZWQgZXhjZXB0IHRoYXQgaXQgd2lsbCBzdGF5IHRoZQogIC8vLyBzYW1lIGFzIGxvbmcgYXMgdGhlIG1hcCBpc24ndCBjaGFuZ2VkLgogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBjb21wYXJlIHRoZSBrZXlzIGluIHRoZSB0YWJsZSB3aXRoCiAgLy8vIG5ldyBrZXlzLiBJZiBbZXF1YWxzXSBpcyBvbWl0dGVkLCB0aGUga2V5J3Mgb3duIFtPYmplY3QuPT1dIGlzIHVzZWQKICAvLy8gaW5zdGVhZC4KICAvLy8KICAvLy8gU2ltaWxhciwgaWYgW2hhc2hDb2RlXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBwcm9kdWNlIGEgaGFzaCB2YWx1ZQogIC8vLyBmb3Iga2V5cyBpbiBvcmRlciB0byBwbGFjZSB0aGVtIGluIHRoZSBoYXNoIHRhYmxlLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUKICAvLy8ga2V5J3Mgb3duIFtPYmplY3QuaGFzaENvZGVdIGlzIHVzZWQuCiAgLy8vCiAgLy8vIElmIHVzaW5nIG1ldGhvZHMgbGlrZSBbb3BlcmF0b3IgW11dLCBbcmVtb3ZlXSBhbmQgW2NvbnRhaW5zS2V5XSB0b2dldGhlcgogIC8vLyB3aXRoIGEgY3VzdG9tIGVxdWFsaXR5IGFuZCBoYXNoY29kZSwgYW4gZXh0cmEgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uCiAgLy8vIGNhbiBiZSBzdXBwbGllZC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgW2VxdWFsc10gb3IKICAvLy8gW2hhc2hDb2RlXSB3aXRoIGFuIGFyZ3VtZW50IHRoYXQgbWF5IG5vdCBiZSBhIFtLXSBpbnN0YW5jZSwgYW5kIGlmIHRoZQogIC8vLyBjYWxsIHJldHVybnMgZmFsc2UsIHRoZSBrZXkgaXMgYXNzdW1lZCB0byBub3QgYmUgaW4gdGhlIHNldC4KICAvLy8gVGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBkZWZhdWx0cyB0byBqdXN0IHRlc3RpbmcgaWYgdGhlIG9iamVjdCBpcyBhCiAgLy8vIFtLXSBpbnN0YW5jZS4KICAvLy8KICAvLy8gRXhhbXBsZToKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoTWFwPGludCxpbnQ+KGVxdWFsczogKGludCBhLCBpbnQgYikgPT4gKGIgLSBhKSAlIDUgPT0gMCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiAoaW50IGUpID0+IGUgJSA1KQogIC8vLwogIC8vLyBUaGlzIGV4YW1wbGUgbWFwIGRvZXMgbm90IG5lZWQgYW4gYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZC4KICAvLy8gVGhlIGRlZmF1bHQgZnVuY3Rpb24gYWNjZXB0cyBvbmx5IGBpbnRgIHZhbHVlcywgd2hpY2ggY2FuIHNhZmVseSBiZQogIC8vLyBwYXNzZWQgdG8gYm90aCB0aGUgYGVxdWFsc2AgYW5kIGBoYXNoQ29kZWAgZnVuY3Rpb25zLgogIC8vLwogIC8vLyBJZiBuZWl0aGVyIGBlcXVhbHNgLCBgaGFzaENvZGVgLCBub3IgYGlzVmFsaWRLZXlgIGlzIHByb3ZpZGVkLAogIC8vLyB0aGUgZGVmYXVsdCBgaXNWYWxpZEtleWAgaW5zdGVhZCBhY2NlcHRzIGFsbCBrZXlzLgogIC8vLyBUaGUgZGVmYXVsdCBlcXVhbGl0eSBhbmQgaGFzaGNvZGUgb3BlcmF0aW9ucyBhcmUgYXNzdW1lZCB0byB3b3JrIG9uIGFsbAogIC8vLyBvYmplY3RzLgogIC8vLwogIC8vLyBMaWtld2lzZSwgaWYgYGVxdWFsc2AgaXMgW2lkZW50aWNhbF0sIGBoYXNoQ29kZWAgaXMgW2lkZW50aXR5SGFzaENvZGVdCiAgLy8vIGFuZCBgaXNWYWxpZEtleWAgaXMgb21pdHRlZCwgdGhlIHJlc3VsdGluZyBtYXAgaXMgaWRlbnRpdHkgYmFzZWQsCiAgLy8vIGFuZCB0aGUgYGlzVmFsaWRLZXlgIGRlZmF1bHRzIHRvIGFjY2VwdGluZyBhbGwga2V5cy4KICAvLy8gU3VjaCBhIG1hcCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSB1c2luZyBbSGFzaE1hcC5pZGVudGl0eV0uCiAgLy8vCiAgLy8vIFRoZSB1c2VkIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgIG1ldGhvZCBzaG91bGQgYWx3YXlzIGJlIGNvbnNpc3RlbnQsCiAgLy8vIHNvIHRoYXQgaWYgYGVxdWFscyhhLCBiKWAgdGhlbiBgaGFzaENvZGUoYSkgPT0gaGFzaENvZGUoYilgLiBUaGUgaGFzaAogIC8vLyBvZiBhbiBvYmplY3QsIG9yIHdoYXQgaXQgY29tcGFyZXMgZXF1YWwgdG8sIHNob3VsZCBub3QgY2hhbmdlIHdoaWxlIHRoZQogIC8vLyBvYmplY3QgaXMgYSBrZXkgaW4gdGhlIG1hcC4gSWYgaXQgZG9lcyBjaGFuZ2UsIHRoZSByZXN1bHQgaXMKICAvLy8gdW5wcmVkaWN0YWJsZS4KICAvLy8KICAvLy8gSWYgeW91IHN1cHBseSBvbmUgb2YgW2VxdWFsc10gYW5kIFtoYXNoQ29kZV0sCiAgLy8vIHlvdSBzaG91bGQgZ2VuZXJhbGx5IGFsc28gdG8gc3VwcGx5IHRoZSBvdGhlci4KICBleHRlcm5hbCBmYWN0b3J5IEhhc2hNYXAoCiAgICAgIHtib29sIGVxdWFscyhLIGtleTEsIEsga2V5MiksCiAgICAgIGludCBoYXNoQ29kZShLIGtleSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSk7CgogIC8vLyBDcmVhdGVzIGFuIHVub3JkZXJlZCBpZGVudGl0eS1iYXNlZCBtYXAuCiAgLy8vCiAgLy8vIEVmZmVjdGl2ZWx5IGEgc2hvcnRoYW5kIGZvcjoKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoTWFwPEssIFY+KGVxdWFsczogaWRlbnRpY2FsLAogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkZW50aXR5SGFzaENvZGUpCiAgZXh0ZXJuYWwgZmFjdG9yeSBIYXNoTWFwLmlkZW50aXR5KCk7CgogIC8vLyBDcmVhdGVzIGEgW0hhc2hNYXBdIHRoYXQgY29udGFpbnMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGUga2V5cyBtdXN0IGFsbCBiZSBpbnN0YW5jZXMgb2YgW0tdIGFuZCB0aGUgdmFsdWVzIG9mIFtWXS4KICAvLy8gVGhlIFtvdGhlcl0gbWFwIGl0c2VsZiBjYW4gaGF2ZSBhbnkgdHlwZS4KICBmYWN0b3J5IEhhc2hNYXAuZnJvbShNYXAgb3RoZXIpIHsKICAgIE1hcDxLLCBWPiByZXN1bHQgPSBIYXNoTWFwPEssIFY+KCk7CiAgICBvdGhlci5mb3JFYWNoKChrLCB2KSB7CiAgICAgIHJlc3VsdFtrXSA9IHY7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtIYXNoTWFwXSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkvdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICBmYWN0b3J5IEhhc2hNYXAub2YoTWFwPEssIFY+IG90aGVyKSA9PiBIYXNoTWFwPEssIFY+KCkuLmFkZEFsbChvdGhlcik7CgogIC8vLyBDcmVhdGVzIGEgW0hhc2hNYXBdIHdoZXJlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgLy8vIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIEZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIFtpdGVyYWJsZV0gdGhpcyBjb25zdHJ1Y3RvciBjb21wdXRlcyBhIGtleS92YWx1ZQogIC8vLyBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUgbGFzdAogIC8vLyBvY2N1cnJlbmNlIG9mIGEga2V5IHdpbGwgc2ltcGx5IG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIElmIG5vIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGZvciBba2V5XSBhbmQgW3ZhbHVlXSB0aGUgZGVmYXVsdCBpcyB0aGUKICAvLy8gaWRlbnRpdHkgZnVuY3Rpb24uCiAgZmFjdG9yeSBIYXNoTWFwLmZyb21JdGVyYWJsZShJdGVyYWJsZSBpdGVyYWJsZSwKICAgICAge0sga2V5KGVsZW1lbnQpLCBWIHZhbHVlKGVsZW1lbnQpfSkgewogICAgTWFwPEssIFY+IG1hcCA9IEhhc2hNYXA8SywgVj4oKTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUobWFwLCBpdGVyYWJsZSwga2V5LCB2YWx1ZSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbSGFzaE1hcF0gYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAvLy8KICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpdGVyYXRlcyBvdmVyIFtrZXlzXSBhbmQgW3ZhbHVlc10gYW5kIG1hcHMgZWFjaCBlbGVtZW50CiAgLy8vIG9mIFtrZXlzXSB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBJZiBba2V5c10gY29udGFpbnMgdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvY2N1cnJlbmNlCiAgLy8vIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzIHZhbHVlLgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciBpZiB0aGUgdHdvIFtJdGVyYWJsZV1zIGRvbid0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgogIGZhY3RvcnkgSGFzaE1hcC5mcm9tSXRlcmFibGVzKEl0ZXJhYmxlPEs+IGtleXMsIEl0ZXJhYmxlPFY+IHZhbHVlcykgewogICAgTWFwPEssIFY+IG1hcCA9IEhhc2hNYXA8SywgVj4oKTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoSXRlcmFibGVzKG1hcCwga2V5cywgdmFsdWVzKTsKICAgIHJldHVybiBtYXA7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtIYXNoTWFwXSBjb250YWluaW5nIHRoZSBlbnRyaWVzIG9mIFtlbnRyaWVzXS4KICAvLy8KICAvLy8gUmV0dXJucyBhIG5ldyBgSGFzaE1hcDxLLCBWPmAgd2hlcmUgYWxsIGVudHJpZXMgb2YgW2VudHJpZXNdCiAgLy8vIGhhdmUgYmVlbiBhZGRlZCBpbiBpdGVyYXRpb24gb3JkZXIuCiAgLy8vCiAgLy8vIElmIG11bHRpcGxlIFtlbnRyaWVzXSBoYXZlIHRoZSBzYW1lIGtleSwKICAvLy8gbGF0ZXIgb2NjdXJyZW5jZXMgb3ZlcndyaXRlIHRoZSBlYXJsaWVyIG9uZXMuCiAgQFNpbmNlKCIyLjEiKQogIGZhY3RvcnkgSGFzaE1hcC5mcm9tRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgPT4KICAgICAgSGFzaE1hcDxLLCBWPigpLi5hZGRFbnRyaWVzKGVudHJpZXMpOwp9CoCeAE5OPAEZAUQlAUYnASUwASctATAEPU1GSkQEJAREHT9ENSw0MwZMTi0GUEoPBk1PKwZPSkpNQ0wUBg8GSzsGTEo8BkU5Tg8GTUg7QwZLTE5DFQY0NRwkGycBLwYjBi84JwFIBkMwJCgbFQgTBAFISQFKEgZPOAZJRAZKGTIsJUMQBAFEBk86Bk0lBkhIJTYQBAE/BkMqBi80EEMsAgEdZGFydDpjb2xsZWN0aW9uL2hhc2hfbWFwLmRhcnQ2b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vc3BsYXlfdHJlZS5kYXJ0wABnZC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCnR5cGVkZWYgX1ByZWRpY2F0ZTxUPiA9IGJvb2wgRnVuY3Rpb24oVCB2YWx1ZSk7CgovLy8gQSBub2RlIGluIGEgc3BsYXkgdHJlZS4gSXQgaG9sZHMgdGhlIHNvcnRpbmcga2V5IGFuZCB0aGUgbGVmdAovLy8gYW5kIHJpZ2h0IGNoaWxkcmVuIGluIHRoZSB0cmVlLgpjbGFzcyBfU3BsYXlUcmVlTm9kZTxLPiB7CiAgZmluYWwgSyBrZXk7CiAgX1NwbGF5VHJlZU5vZGU8Sz4gbGVmdDsKICBfU3BsYXlUcmVlTm9kZTxLPiByaWdodDsKCiAgX1NwbGF5VHJlZU5vZGUodGhpcy5rZXkpOwp9CgovLy8gQSBub2RlIGluIGEgc3BsYXkgdHJlZSBiYXNlZCBtYXAuCi8vLwovLy8gQSBbX1NwbGF5VHJlZU5vZGVdIHRoYXQgYWxzbyBjb250YWlucyBhIHZhbHVlCmNsYXNzIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IGV4dGVuZHMgX1NwbGF5VHJlZU5vZGU8Sz4gewogIFYgdmFsdWU7CiAgX1NwbGF5VHJlZU1hcE5vZGUoSyBrZXksIHRoaXMudmFsdWUpIDogc3VwZXIoa2V5KTsKfQoKLy8vIEEgc3BsYXkgdHJlZSBpcyBhIHNlbGYtYmFsYW5jaW5nIGJpbmFyeSBzZWFyY2ggdHJlZS4KLy8vCi8vLyBJdCBoYXMgdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZCBlbGVtZW50cwovLy8gYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4KLy8vIEl0IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kCi8vLyByZW1vdmFsLCBpbiBPKGxvZyhuKSkgYW1vcnRpemVkIHRpbWUuCmFic3RyYWN0IGNsYXNzIF9TcGxheVRyZWU8SywgTm9kZSBleHRlbmRzIF9TcGxheVRyZWVOb2RlPEs+PiB7CiAgLy8gVGhlIHJvb3Qgbm9kZSBvZiB0aGUgc3BsYXkgdHJlZS4gSXQgd2lsbCBjb250YWluIGVpdGhlciB0aGUgbGFzdAogIC8vIGVsZW1lbnQgaW5zZXJ0ZWQgb3IgdGhlIGxhc3QgZWxlbWVudCBsb29rZWQgdXAuCiAgTm9kZSBnZXQgX3Jvb3Q7CiAgc2V0IF9yb290KE5vZGUgbmV3VmFsdWUpOwoKICAvLyBUaGUgZHVtbXkgbm9kZSB1c2VkIHdoZW4gcGVyZm9ybWluZyBhIHNwbGF5IG9uIHRoZSB0cmVlLiBSZXVzaW5nIGl0CiAgLy8gYXZvaWRzIGFsbG9jYXRpbmcgYSBub2RlIGVhY2ggdGltZSBhIHNwbGF5IGlzIHBlcmZvcm1lZC4KICBOb2RlIGdldCBfZHVtbXk7CgogIC8vIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3BsYXkgdHJlZS4KICBpbnQgX2NvdW50ID0gMDsKCiAgLy8vIENvdW50ZXIgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGtleXMgaW4gdGhlIG1hcCBjaGFuZ2VzLgogIC8vLwogIC8vLyBVc2VkIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMuCiAgaW50IF9tb2RpZmljYXRpb25Db3VudCA9IDA7CgogIC8vLyBDb3VudGVyIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSB0cmVlIHN0cnVjdHVyZSBjaGFuZ2VzLgogIC8vLwogIC8vLyBVc2VkIHRvIGRldGVjdCB0aGF0IGFuIGluLXBsYWNlIHRyYXZlcnNhbCBjYW5ub3QgdXNlCiAgLy8vIGNhY2hlZCBpbmZvcm1hdGlvbiB0aGF0IHJlbGllcyBvbiB0aGUgdHJlZSBzdHJ1Y3R1cmUuCiAgaW50IF9zcGxheUNvdW50ID0gMDsKCiAgLy8vIFRoZSBjb21wYXJhdG9yIHRoYXQgaXMgdXNlZCBmb3IgdGhpcyBzcGxheSB0cmVlLgogIENvbXBhcmF0b3I8Sz4gZ2V0IF9jb21wYXJhdG9yOwoKICAvLy8gVGhlIHByZWRpY2F0ZSB0byBkZXRlcm1pbmUgdGhhdCBhIGdpdmVuIG9iamVjdCBpcyBhIHZhbGlkIGtleS4KICBfUHJlZGljYXRlIGdldCBfdmFsaWRLZXk7CgogIC8vLyBDb21wYXJpc29uIHVzZWQgdG8gY29tcGFyZSBrZXlzLgogIGludCBfY29tcGFyZShLIGtleTEsIEsga2V5Mik7CgogIC8vLyBQZXJmb3JtIHRoZSBzcGxheSBvcGVyYXRpb24gZm9yIHRoZSBnaXZlbiBrZXkuIE1vdmVzIHRoZSBub2RlIHdpdGgKICAvLy8gdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9kZSBoYXMgdGhlIGdpdmVuCiAgLy8vIGtleSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUKICAvLy8gdHJlZS4gVGhpcyBpcyB0aGUgc2ltcGxpZmllZCB0b3AtZG93biBzcGxheWluZyBhbGdvcml0aG0gZnJvbToKICAvLy8gIlNlbGYtYWRqdXN0aW5nIEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbi4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGNvbXBhcmluZyB0aGUgbmV3IHJvb3Qgb2YgdGhlIHRyZWUgdG8gW2tleV0uCiAgLy8vIFJldHVybnMgLTEgaWYgdGhlIHRhYmxlIGlzIGVtcHR5LgogIGludCBfc3BsYXkoSyBrZXkpIHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gLTE7CgogICAgLy8gVGhlIHJpZ2h0IGNoaWxkIG9mIHRoZSBkdW1teSBub2RlIHdpbGwgaG9sZAogICAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxnb3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKICAgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2luZyBhIGR1bW15IG5vZGUsIGxlZnQKICAgIC8vIGFuZCByaWdodCB3aWxsIGFsd2F5cyBiZSBub2RlcyBhbmQgd2UgYXZvaWQgc3BlY2lhbCBjYXNlcy4KICAgIE5vZGUgbGVmdCA9IF9kdW1teTsKICAgIE5vZGUgcmlnaHQgPSBfZHVtbXk7CiAgICBOb2RlIGN1cnJlbnQgPSBfcm9vdDsKICAgIGludCBjb21wOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgY29tcCA9IF9jb21wYXJlKGN1cnJlbnQua2V5LCBrZXkpOwogICAgICBpZiAoY29tcCA+IDApIHsKICAgICAgICBpZiAoY3VycmVudC5sZWZ0ID09IG51bGwpIGJyZWFrOwogICAgICAgIGNvbXAgPSBfY29tcGFyZShjdXJyZW50LmxlZnQua2V5LCBrZXkpOwogICAgICAgIGlmIChjb21wID4gMCkgewogICAgICAgICAgLy8gUm90YXRlIHJpZ2h0LgogICAgICAgICAgX1NwbGF5VHJlZU5vZGU8Sz4gdG1wID0gY3VycmVudC5sZWZ0OwogICAgICAgICAgY3VycmVudC5sZWZ0ID0gdG1wLnJpZ2h0OwogICAgICAgICAgdG1wLnJpZ2h0ID0gY3VycmVudDsKICAgICAgICAgIGN1cnJlbnQgPSB0bXA7CiAgICAgICAgICBpZiAoY3VycmVudC5sZWZ0ID09IG51bGwpIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBMaW5rIHJpZ2h0LgogICAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OwogICAgICAgIHJpZ2h0ID0gY3VycmVudDsKICAgICAgICBjdXJyZW50ID0gY3VycmVudC5sZWZ0OwogICAgICB9IGVsc2UgaWYgKGNvbXAgPCAwKSB7CiAgICAgICAgaWYgKGN1cnJlbnQucmlnaHQgPT0gbnVsbCkgYnJlYWs7CiAgICAgICAgY29tcCA9IF9jb21wYXJlKGN1cnJlbnQucmlnaHQua2V5LCBrZXkpOwogICAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgICAgLy8gUm90YXRlIGxlZnQuCiAgICAgICAgICBOb2RlIHRtcCA9IGN1cnJlbnQucmlnaHQ7CiAgICAgICAgICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CiAgICAgICAgICB0bXAubGVmdCA9IGN1cnJlbnQ7CiAgICAgICAgICBjdXJyZW50ID0gdG1wOwogICAgICAgICAgaWYgKGN1cnJlbnQucmlnaHQgPT0gbnVsbCkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vIExpbmsgbGVmdC4KICAgICAgICBsZWZ0LnJpZ2h0ID0gY3VycmVudDsKICAgICAgICBsZWZ0ID0gY3VycmVudDsKICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgLy8gQXNzZW1ibGUuCiAgICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0OwogICAgcmlnaHQubGVmdCA9IGN1cnJlbnQucmlnaHQ7CiAgICBjdXJyZW50LmxlZnQgPSBfZHVtbXkucmlnaHQ7CiAgICBjdXJyZW50LnJpZ2h0ID0gX2R1bW15LmxlZnQ7CiAgICBfcm9vdCA9IGN1cnJlbnQ7CgogICAgX2R1bW15LnJpZ2h0ID0gbnVsbDsKICAgIF9kdW1teS5sZWZ0ID0gbnVsbDsKICAgIF9zcGxheUNvdW50Kys7CiAgICByZXR1cm4gY29tcDsKICB9CgogIC8vIEVtdWxhdGVzIHNwbGF5aW5nIHdpdGggYSBrZXkgdGhhdCBpcyBzbWFsbGVyIHRoYW4gYW55IGluIHRoZSBzdWJ0cmVlCiAgLy8gYW5jaG9yZWQgYXQgW25vZGVdLgogIC8vIGFuZCB0aGF0IG5vZGUgaXMgcmV0dXJuZWQuIEl0IHNob3VsZCByZXBsYWNlIHRoZSByZWZlcmVuY2UgdG8gW25vZGVdCiAgLy8gaW4gYW55IHBhcmVudCB0cmVlIG9yIHJvb3QgcG9pbnRlci4KICBleHRlcm5hbCBOb2RlIF9zcGxheU1pbihOb2RlIG5vZGUpOwoKICAvLyBFbXVsYXRlcyBzcGxheWluZyB3aXRoIGEga2V5IHRoYXQgaXMgZ3JlYXRlciB0aGFuIGFueSBpbiB0aGUgc3VidHJlZQogIC8vIGFuY2hvcmVkIGF0IFtub2RlXS4KICAvLyBBZnRlciB0aGlzLCB0aGUgbGFyZ2VzdCBlbGVtZW50IGluIHRoZSB0cmVlIGlzIHRoZSByb290IG9mIHRoZSBzdWJ0cmVlLAogIC8vIGFuZCB0aGF0IG5vZGUgaXMgcmV0dXJuZWQuIEl0IHNob3VsZCByZXBsYWNlIHRoZSByZWZlcmVuY2UgdG8gW25vZGVdCiAgLy8gaW4gYW55IHBhcmVudCB0cmVlIG9yIHJvb3QgcG9pbnRlci4KICBleHRlcm5hbCBOb2RlIF9zcGxheU1heChOb2RlIG5vZGUpOwoKICBOb2RlIF9yZW1vdmUoSyBrZXkpIHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGludCBjb21wID0gX3NwbGF5KGtleSk7CiAgICBpZiAoY29tcCAhPSAwKSByZXR1cm4gbnVsbDsKICAgIE5vZGUgcmVzdWx0ID0gX3Jvb3Q7CiAgICBfY291bnQtLTsKICAgIC8vIGFzc2VydChfY291bnQgPj0gMCk7CiAgICBpZiAoX3Jvb3QubGVmdCA9PSBudWxsKSB7CiAgICAgIF9yb290ID0gX3Jvb3QucmlnaHQ7CiAgICB9IGVsc2UgewogICAgICBOb2RlIHJpZ2h0ID0gX3Jvb3QucmlnaHQ7CiAgICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBoYXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCiAgICAgIF9yb290ID0gX3NwbGF5TWF4KF9yb290LmxlZnQpOwogICAgICAvLyBJbnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUgbmV3CiAgICAgIC8vIHJvb3QuCiAgICAgIF9yb290LnJpZ2h0ID0gcmlnaHQ7CiAgICB9CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQWRkcyBhIG5ldyByb290IG5vZGUgd2l0aCB0aGUgZ2l2ZW4gW2tleV0gb3IgW3ZhbHVlXS4KICAvLy8KICAvLy8gVGhlIFtjb21wXSB2YWx1ZSBpcyB0aGUgcmVzdWx0IG9mIGNvbXBhcmluZyB0aGUgZXhpc3Rpbmcgcm9vdCdzIGtleQogIC8vLyB3aXRoIGtleS4KICB2b2lkIF9hZGROZXdSb290KE5vZGUgbm9kZSwgaW50IGNvbXApIHsKICAgIF9jb3VudCsrOwogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgewogICAgICBfcm9vdCA9IG5vZGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIGFzc2VydChfY291bnQgPj0gMCk7CiAgICBpZiAoY29tcCA8IDApIHsKICAgICAgbm9kZS5sZWZ0ID0gX3Jvb3Q7CiAgICAgIG5vZGUucmlnaHQgPSBfcm9vdC5yaWdodDsKICAgICAgX3Jvb3QucmlnaHQgPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgbm9kZS5yaWdodCA9IF9yb290OwogICAgICBub2RlLmxlZnQgPSBfcm9vdC5sZWZ0OwogICAgICBfcm9vdC5sZWZ0ID0gbnVsbDsKICAgIH0KICAgIF9yb290ID0gbm9kZTsKICB9CgogIE5vZGUgZ2V0IF9maXJzdCB7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBfcm9vdCA9IF9zcGxheU1pbihfcm9vdCk7CiAgICByZXR1cm4gX3Jvb3Q7CiAgfQoKICBOb2RlIGdldCBfbGFzdCB7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBfcm9vdCA9IF9zcGxheU1heChfcm9vdCk7CiAgICByZXR1cm4gX3Jvb3Q7CiAgfQoKICB2b2lkIF9jbGVhcigpIHsKICAgIF9yb290ID0gbnVsbDsKICAgIF9jb3VudCA9IDA7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICB9Cn0KCmNsYXNzIF9UeXBlVGVzdDxUPiB7CiAgYm9vbCB0ZXN0KHYpID0+IHYgaXMgVDsKfQoKaW50IF9keW5hbWljQ29tcGFyZShkeW5hbWljIGEsIGR5bmFtaWMgYikgPT4gQ29tcGFyYWJsZS5jb21wYXJlKGEsIGIpOwoKQ29tcGFyYXRvcjxLPiBfZGVmYXVsdENvbXBhcmU8Sz4oKSB7CiAgLy8gSWYgSyA8OiBDb21wYXJhYmxlLCB0aGVuIHdlIGNhbiBqdXN0IHVzZSBDb21wYXJhYmxlLmNvbXBhcmUKICAvLyB3aXRoIG5vIGNhc3RzLgogIE9iamVjdCBjb21wYXJlID0gQ29tcGFyYWJsZS5jb21wYXJlOwogIGlmIChjb21wYXJlIGlzIENvbXBhcmF0b3I8Sz4pIHsKICAgIHJldHVybiBjb21wYXJlOwogIH0KICAvLyBPdGhlcndpc2Ugd3JhcCBhbmQgY2FzdCB0aGUgYXJndW1lbnRzIG9uIGVhY2ggY2FsbC4KICByZXR1cm4gX2R5bmFtaWNDb21wYXJlOwp9CgovLy8gQSBbTWFwXSBvZiBvYmplY3RzIHRoYXQgY2FuIGJlIG9yZGVyZWQgcmVsYXRpdmUgdG8gZWFjaCBvdGhlci4KLy8vCi8vLyBUaGUgbWFwIGlzIGJhc2VkIG9uIGEgc2VsZi1iYWxhbmNpbmcgYmluYXJ5IHRyZWUuIEl0IGFsbG93cyBtb3N0IG9wZXJhdGlvbnMKLy8vIGluIGFtb3J0aXplZCBsb2dhcml0aG1pYyB0aW1lLgovLy8KLy8vIEtleXMgb2YgdGhlIG1hcCBhcmUgY29tcGFyZWQgdXNpbmcgdGhlIGBjb21wYXJlYCBmdW5jdGlvbiBwYXNzZWQgaW4KLy8vIHRoZSBjb25zdHJ1Y3RvciwgYm90aCBmb3Igb3JkZXJpbmcgYW5kIGZvciBlcXVhbGl0eS4KLy8vIElmIHRoZSBtYXAgY29udGFpbnMgb25seSB0aGUga2V5IGBhYCwgdGhlbiBgbWFwLmNvbnRhaW5zS2V5KGIpYAovLy8gd2lsbCByZXR1cm4gYHRydWVgIGlmIGFuZCBvbmx5IGlmIGBjb21wYXJlKGEsIGIpID09IDBgLAovLy8gYW5kIHRoZSB2YWx1ZSBvZiBgYSA9PSBiYCBpcyBub3QgZXZlbiBjaGVja2VkLgovLy8gSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gaXMgb21pdHRlZCwgdGhlIG9iamVjdHMgYXJlIGFzc3VtZWQgdG8gYmUKLy8vIFtDb21wYXJhYmxlXSwgYW5kIGFyZSBjb21wYXJlZCB1c2luZyB0aGVpciBbQ29tcGFyYWJsZS5jb21wYXJlVG9dIG1ldGhvZC4KLy8vIE5vbi1jb21wYXJhYmxlIG9iamVjdHMgKGluY2x1ZGluZyBgbnVsbGApIHdpbGwgbm90IHdvcmsgYXMga2V5cwovLy8gaW4gdGhhdCBjYXNlLgovLy8KLy8vIFRvIGFsbG93IGNhbGxpbmcgW29wZXJhdG9yIFtdXSwgW3JlbW92ZV0gb3IgW2NvbnRhaW5zS2V5XSB3aXRoIG9iamVjdHMKLy8vIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBjb21wYXJlYCBmdW5jdGlvbiwgYW4gZXh0cmEgYGlzVmFsaWRLZXlgCi8vLyBwcmVkaWNhdGUgZnVuY3Rpb24gY2FuIGJlIHN1cHBsaWVkLiBUaGlzIGZ1bmN0aW9uIGlzIHRlc3RlZCBiZWZvcmUKLy8vIHVzaW5nIHRoZSBgY29tcGFyZWAgZnVuY3Rpb24gb24gYW4gYXJndW1lbnQgdmFsdWUgdGhhdCBtYXkgbm90IGJlIGEgW0tdCi8vLyB2YWx1ZS4gSWYgb21pdHRlZCwgdGhlIGBpc1ZhbGlkS2V5YCBmdW5jdGlvbiBkZWZhdWx0cyB0byB0ZXN0aW5nIGlmIHRoZQovLy8gdmFsdWUgaXMgYSBbS10uCmNsYXNzIFNwbGF5VHJlZU1hcDxLLCBWPiBleHRlbmRzIF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU1hcE5vZGU8SywgVj4+CiAgICB3aXRoIE1hcE1peGluPEssIFY+IHsKICBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPiBfcm9vdDsKICBmaW5hbCBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPiBfZHVtbXkgPSBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPihudWxsLCBudWxsKTsKCiAgQ29tcGFyYXRvcjxLPiBfY29tcGFyYXRvcjsKICBfUHJlZGljYXRlIF92YWxpZEtleTsKCiAgU3BsYXlUcmVlTWFwKFtpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkKICAgICAgOiBfY29tcGFyYXRvciA9IGNvbXBhcmUgPz8gX2RlZmF1bHRDb21wYXJlPEs+KCksCiAgICAgICAgX3ZhbGlkS2V5ID0gaXNWYWxpZEtleSA/PyAoKHYpID0+IHYgaXMgSyk7CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZU1hcF0gdGhhdCBjb250YWlucyBhbGwga2V5L3ZhbHVlIHBhaXJzIG9mIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG11c3QgYWxsIGJlIGluc3RhbmNlcyBvZiBbS10gYW5kIHRoZSB2YWx1ZXMgb2YgW1ZdLgogIC8vLyBUaGUgW290aGVyXSBtYXAgaXRzZWxmIGNhbiBoYXZlIGFueSB0eXBlLgogIGZhY3RvcnkgU3BsYXlUcmVlTWFwLmZyb20oTWFwIG90aGVyLAogICAgICBbaW50IGNvbXBhcmUoSyBrZXkxLCBLIGtleTIpLCBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KV0pIHsKICAgIFNwbGF5VHJlZU1hcDxLLCBWPiByZXN1bHQgPSBTcGxheVRyZWVNYXA8SywgVj4oY29tcGFyZSwgaXNWYWxpZEtleSk7CiAgICBvdGhlci5mb3JFYWNoKChrLCB2KSB7CiAgICAgIHJlc3VsdFtrXSA9IHY7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtTcGxheVRyZWVNYXBdIHRoYXQgY29udGFpbnMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbb3RoZXJdLgogIGZhY3RvcnkgU3BsYXlUcmVlTWFwLm9mKE1hcDxLLCBWPiBvdGhlciwKICAgICAgICAgIFtpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkgPT4KICAgICAgU3BsYXlUcmVlTWFwPEssIFY+KGNvbXBhcmUsIGlzVmFsaWRLZXkpLi5hZGRBbGwob3RoZXIpOwoKICAvLy8gQ3JlYXRlcyBhIFtTcGxheVRyZWVNYXBdIHdoZXJlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgLy8vIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIEZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIFtpdGVyYWJsZV0gdGhpcyBjb25zdHJ1Y3RvciBjb21wdXRlcyBhIGtleS92YWx1ZQogIC8vLyBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUgbGFzdAogIC8vLyBvY2N1cnJlbmNlIG9mIGEga2V5IHdpbGwgc2ltcGx5IG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIElmIG5vIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWVkIGZvciBba2V5XSBhbmQgW3ZhbHVlXSB0aGUgZGVmYXVsdCBpcyB0bwogIC8vLyB1c2UgdGhlIGl0ZXJhYmxlIHZhbHVlIGl0c2VsZi4KICBmYWN0b3J5IFNwbGF5VHJlZU1hcC5mcm9tSXRlcmFibGUoSXRlcmFibGUgaXRlcmFibGUsCiAgICAgIHtLIGtleShlbGVtZW50KSwKICAgICAgViB2YWx1ZShlbGVtZW50KSwKICAgICAgaW50IGNvbXBhcmUoSyBrZXkxLCBLIGtleTIpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pIHsKICAgIFNwbGF5VHJlZU1hcDxLLCBWPiBtYXAgPSBTcGxheVRyZWVNYXA8SywgVj4oY29tcGFyZSwgaXNWYWxpZEtleSk7CiAgICBNYXBCYXNlLl9maWxsTWFwV2l0aE1hcHBlZEl0ZXJhYmxlKG1hcCwgaXRlcmFibGUsIGtleSwgdmFsdWUpOwogICAgcmV0dXJuIG1hcDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZU1hcF0gYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAvLy8KICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpdGVyYXRlcyBvdmVyIFtrZXlzXSBhbmQgW3ZhbHVlc10gYW5kIG1hcHMgZWFjaCBlbGVtZW50CiAgLy8vIG9mIFtrZXlzXSB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBJZiBba2V5c10gY29udGFpbnMgdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvY2N1cnJlbmNlCiAgLy8vIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzIHZhbHVlLgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciBpZiB0aGUgdHdvIFtJdGVyYWJsZV1zIGRvbid0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgogIGZhY3RvcnkgU3BsYXlUcmVlTWFwLmZyb21JdGVyYWJsZXMoSXRlcmFibGU8Sz4ga2V5cywgSXRlcmFibGU8Vj4gdmFsdWVzLAogICAgICBbaW50IGNvbXBhcmUoSyBrZXkxLCBLIGtleTIpLCBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KV0pIHsKICAgIFNwbGF5VHJlZU1hcDxLLCBWPiBtYXAgPSBTcGxheVRyZWVNYXA8SywgVj4oY29tcGFyZSwgaXNWYWxpZEtleSk7CiAgICBNYXBCYXNlLl9maWxsTWFwV2l0aEl0ZXJhYmxlcyhtYXAsIGtleXMsIHZhbHVlcyk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgaW50IF9jb21wYXJlKEsga2V5MSwgSyBrZXkyKSA9PiBfY29tcGFyYXRvcihrZXkxLCBrZXkyKTsKCiAgU3BsYXlUcmVlTWFwLl9pbnRlcm5hbCgpOwoKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpIHsKICAgIGlmICghX3ZhbGlkS2V5KGtleSkpIHJldHVybiBudWxsOwogICAgaWYgKF9yb290ICE9IG51bGwpIHsKICAgICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgICAgaWYgKGNvbXAgPT0gMCkgewogICAgICAgIHJldHVybiBfcm9vdC52YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAoIV92YWxpZEtleShrZXkpKSByZXR1cm4gbnVsbDsKICAgIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IG1hcFJvb3QgPSBfcmVtb3ZlKGtleSk7CiAgICBpZiAobWFwUm9vdCAhPSBudWxsKSByZXR1cm4gbWFwUm9vdC52YWx1ZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGlmIChrZXkgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvcihrZXkpOwogICAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgogICAgLy8gdGhlIGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KICAgIGludCBjb21wID0gX3NwbGF5KGtleSk7CiAgICBpZiAoY29tcCA9PSAwKSB7CiAgICAgIF9yb290LnZhbHVlID0gdmFsdWU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9hZGROZXdSb290KF9TcGxheVRyZWVNYXBOb2RlKGtleSwgdmFsdWUpLCBjb21wKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgaWYgKGtleSA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yKGtleSk7CiAgICBpbnQgY29tcCA9IF9zcGxheShrZXkpOwogICAgaWYgKGNvbXAgPT0gMCkgewogICAgICByZXR1cm4gX3Jvb3QudmFsdWU7CiAgICB9CiAgICBpbnQgbW9kaWZpY2F0aW9uQ291bnQgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICBpbnQgc3BsYXlDb3VudCA9IF9zcGxheUNvdW50OwogICAgViB2YWx1ZSA9IGlmQWJzZW50KCk7CiAgICBpZiAobW9kaWZpY2F0aW9uQ291bnQgIT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgIH0KICAgIGlmIChzcGxheUNvdW50ICE9IF9zcGxheUNvdW50KSB7CiAgICAgIGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgICAgLy8gS2V5IGlzIHN0aWxsIG5vdCB0aGVyZSwgb3RoZXJ3aXNlIF9tb2RpZmljYXRpb25Db3VudCB3b3VsZCBiZSBjaGFuZ2VkLgogICAgICBhc3NlcnQoY29tcCAhPSAwKTsKICAgIH0KICAgIF9hZGROZXdSb290KF9TcGxheVRyZWVNYXBOb2RlKGtleSwgdmFsdWUpLCBjb21wKTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgb3RoZXIuZm9yRWFjaCgoSyBrZXksIFYgdmFsdWUpIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9KTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIChfcm9vdCA9PSBudWxsKTsKICB9CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBJdGVyYXRvcjxfU3BsYXlUcmVlTm9kZTxLPj4gbm9kZXMgPSBfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yPEs+KHRoaXMpOwogICAgd2hpbGUgKG5vZGVzLm1vdmVOZXh0KCkpIHsKICAgICAgX1NwbGF5VHJlZU1hcE5vZGU8SywgVj4gbm9kZSA9IG5vZGVzLmN1cnJlbnQ7CiAgICAgIGYobm9kZS5rZXksIG5vZGUudmFsdWUpOwogICAgfQogIH0KCiAgaW50IGdldCBsZW5ndGggewogICAgcmV0dXJuIF9jb3VudDsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfY2xlYXIoKTsKICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgcmV0dXJuIF92YWxpZEtleShrZXkpICYmIF9zcGxheShrZXkpID09IDA7CiAgfQoKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSB7CiAgICBpbnQgaW5pdGlhbFNwbGF5Q291bnQgPSBfc3BsYXlDb3VudDsKICAgIGJvb2wgdmlzaXQoX1NwbGF5VHJlZU1hcE5vZGUgbm9kZSkgewogICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5vZGUudmFsdWUgPT0gdmFsdWUpIHJldHVybiB0cnVlOwogICAgICAgIGlmIChpbml0aWFsU3BsYXlDb3VudCAhPSBfc3BsYXlDb3VudCkgewogICAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZS5yaWdodCAhPSBudWxsICYmIHZpc2l0KG5vZGUucmlnaHQpKSByZXR1cm4gdHJ1ZTsKICAgICAgICBub2RlID0gbm9kZS5sZWZ0OwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gdmlzaXQoX3Jvb3QpOwogIH0KCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX1NwbGF5VHJlZUtleUl0ZXJhYmxlPEs+KHRoaXMpOwoKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IF9TcGxheVRyZWVWYWx1ZUl0ZXJhYmxlPEssIFY+KHRoaXMpOwoKICAvLy8gR2V0IHRoZSBmaXJzdCBrZXkgaW4gdGhlIG1hcC4gUmV0dXJucyBbOm51bGw6XSBpZiB0aGUgbWFwIGlzIGVtcHR5LgogIEsgZmlyc3RLZXkoKSB7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2ZpcnN0LmtleTsKICB9CgogIC8vLyBHZXQgdGhlIGxhc3Qga2V5IGluIHRoZSBtYXAuIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIG1hcCBpcyBlbXB0eS4KICBLIGxhc3RLZXkoKSB7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2xhc3Qua2V5OwogIH0KCiAgLy8vIEdldCB0aGUgbGFzdCBrZXkgaW4gdGhlIG1hcCB0aGF0IGlzIHN0cmljdGx5IHNtYWxsZXIgdGhhbiBba2V5XS4gUmV0dXJucwogIC8vLyBbOm51bGw6XSBpZiBubyBrZXkgd2FzIG5vdCBmb3VuZC4KICBLIGxhc3RLZXlCZWZvcmUoSyBrZXkpIHsKICAgIGlmIChrZXkgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvcihrZXkpOwogICAgaWYgKF9yb290ID09IG51bGwpIHJldHVybiBudWxsOwogICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgIGlmIChjb21wIDwgMCkgcmV0dXJuIF9yb290LmtleTsKICAgIF9TcGxheVRyZWVOb2RlPEs+IG5vZGUgPSBfcm9vdC5sZWZ0OwogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB3aGlsZSAobm9kZS5yaWdodCAhPSBudWxsKSB7CiAgICAgIG5vZGUgPSBub2RlLnJpZ2h0OwogICAgfQogICAgcmV0dXJuIG5vZGUua2V5OwogIH0KCiAgLy8vIEdldCB0aGUgZmlyc3Qga2V5IGluIHRoZSBtYXAgdGhhdCBpcyBzdHJpY3RseSBsYXJnZXIgdGhhbiBba2V5XS4gUmV0dXJucwogIC8vLyBbOm51bGw6XSBpZiBubyBrZXkgd2FzIG5vdCBmb3VuZC4KICBLIGZpcnN0S2V5QWZ0ZXIoSyBrZXkpIHsKICAgIGlmIChrZXkgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvcihrZXkpOwogICAgaWYgKF9yb290ID09IG51bGwpIHJldHVybiBudWxsOwogICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgIGlmIChjb21wID4gMCkgcmV0dXJuIF9yb290LmtleTsKICAgIF9TcGxheVRyZWVOb2RlPEs+IG5vZGUgPSBfcm9vdC5yaWdodDsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiBudWxsOwogICAgd2hpbGUgKG5vZGUubGVmdCAhPSBudWxsKSB7CiAgICAgIG5vZGUgPSBub2RlLmxlZnQ7CiAgICB9CiAgICByZXR1cm4gbm9kZS5rZXk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfU3BsYXlUcmVlSXRlcmF0b3I8SywgVD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgZmluYWwgX1NwbGF5VHJlZTxLLCBfU3BsYXlUcmVlTm9kZTxLPj4gX3RyZWU7CgogIC8vLyBXb3JrbGlzdCBvZiBub2RlcyB0byB2aXNpdC4KICAvLy8KICAvLy8gVGhlc2Ugbm9kZXMgaGF2ZSBiZWVuIHBhc3NlZCBvdmVyIG9uIHRoZSB3YXkgZG93biBpbiBhCiAgLy8vIGRlcHRoLWZpcnN0IGxlZnQtdG8tcmlnaHQgdHJhdmVyc2FsLiBWaXNpdGluZyBlYWNoIG5vZGUsCiAgLy8vIGFuZCB0aGVpciByaWdodCBzdWJ0cmVlcyB3aWxsIHZpc2l0IHRoZSByZW1haW5kZXIgb2YKICAvLy8gdGhlIG5vZGVzIG9mIGEgZnVsbCB0cmF2ZXJzYWwuCiAgLy8vCiAgLy8vIE9ubHkgdmFsaWQgYXMgbG9uZyBhcyB0aGUgb3JpZ2luYWwgdHJlZSBpc24ndCByZW9yZGVyZWQuCiAgZmluYWwgTGlzdDxfU3BsYXlUcmVlTm9kZTxLPj4gX3dvcmtMaXN0ID0gPF9TcGxheVRyZWVOb2RlPEs+PltdOwoKICAvLy8gT3JpZ2luYWwgbW9kaWZpY2F0aW9uIGNvdW50ZXIgb2YgW190cmVlXS4KICAvLy8KICAvLy8gSW5jcmVtZW50ZWQgb24gW190cmVlXSB3aGVuIGEga2V5IGlzIGFkZGVkIG9yIHJlbW92ZWQuCiAgLy8vIElmIGl0IGNoYW5nZXMsIGl0ZXJhdGlvbiBpcyBhYm9ydGVkLgogIC8vLwogIC8vLyBOb3QgZmluYWwgYmVjYXVzZSBzb21lIGl0ZXJhdG9ycyBtYXkgbW9kaWZ5IHRoZSB0cmVlIGtub3dpbmdseSwKICAvLy8gYW5kIHRoZXkgdXBkYXRlIHRoZSBtb2RpZmljYXRpb24gY291bnQgaW4gdGhhdCBjYXNlLgogIGludCBfbW9kaWZpY2F0aW9uQ291bnQ7CgogIC8vLyBDb3VudCBvZiBzcGxheSBvcGVyYXRpb25zIG9uIFtfdHJlZV0gd2hlbiBbX3dvcmtMaXN0XSB3YXMgYnVpbHQuCiAgLy8vCiAgLy8vIElmIHRoZSBzcGxheSBjb3VudCBvbiBbX3RyZWVdIGluY3JlYXNlcywgW193b3JrTGlzdF0gYmVjb21lcyBpbnZhbGlkLgogIGludCBfc3BsYXlDb3VudDsKCiAgLy8vIEN1cnJlbnQgbm9kZS4KICBfU3BsYXlUcmVlTm9kZTxLPiBfY3VycmVudE5vZGU7CgogIF9TcGxheVRyZWVJdGVyYXRvcihfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiB0cmVlKQogICAgICA6IF90cmVlID0gdHJlZSwKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPSB0cmVlLl9tb2RpZmljYXRpb25Db3VudCwKICAgICAgICBfc3BsYXlDb3VudCA9IHRyZWUuX3NwbGF5Q291bnQgewogICAgX2ZpbmRMZWZ0TW9zdERlc2NlbmRlbnQodHJlZS5fcm9vdCk7CiAgfQoKICBfU3BsYXlUcmVlSXRlcmF0b3Iuc3RhcnRBdChfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiB0cmVlLCBLIHN0YXJ0S2V5KQogICAgICA6IF90cmVlID0gdHJlZSwKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPSB0cmVlLl9tb2RpZmljYXRpb25Db3VudCB7CiAgICBpZiAodHJlZS5fcm9vdCA9PSBudWxsKSByZXR1cm47CiAgICBpbnQgY29tcGFyZSA9IHRyZWUuX3NwbGF5KHN0YXJ0S2V5KTsKICAgIF9zcGxheUNvdW50ID0gdHJlZS5fc3BsYXlDb3VudDsKICAgIGlmIChjb21wYXJlIDwgMCkgewogICAgICAvLyBEb24ndCBpbmNsdWRlIHRoZSByb290LCBzdGFydCBhdCB0aGUgbmV4dCBlbGVtZW50IGFmdGVyIHRoZSByb290LgogICAgICBfZmluZExlZnRNb3N0RGVzY2VuZGVudCh0cmVlLl9yb290LnJpZ2h0KTsKICAgIH0gZWxzZSB7CiAgICAgIF93b3JrTGlzdC5hZGQodHJlZS5fcm9vdCk7CiAgICB9CiAgfQoKICBUIGdldCBjdXJyZW50IHsKICAgIGlmIChfY3VycmVudE5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2dldFZhbHVlKF9jdXJyZW50Tm9kZSk7CiAgfQoKICB2b2lkIF9maW5kTGVmdE1vc3REZXNjZW5kZW50KF9TcGxheVRyZWVOb2RlPEs+IG5vZGUpIHsKICAgIHdoaWxlIChub2RlICE9IG51bGwpIHsKICAgICAgX3dvcmtMaXN0LmFkZChub2RlKTsKICAgICAgbm9kZSA9IG5vZGUubGVmdDsKICAgIH0KICB9CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgdHJlZSBzdHJ1Y3R1cmUgb2YgdGhlIHRyZWUgaGFzIGNoYW5nZWQuCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHNwbGF5IG9wZXJhdGlvbi4KICAvLy8gSWYgdGhlIGtleS1zZXQgY2hhbmdlcywgaXRlcmF0aW9uIGlzIGFib3J0ZWQgYmVmb3JlIGdldHRpbmcKICAvLy8gaGVyZSwgc28gd2Uga25vdyB0aGF0IHRoZSBrZXlzIGFyZSB0aGUgc2FtZSBhcyBiZWZvcmUsIGl0J3MKICAvLy8gb25seSB0aGUgdHJlZSB0aGF0IGhhcyBiZWVuIHJlb3JkZXJlZC4KICB2b2lkIF9yZWJ1aWxkV29ya0xpc3QoX1NwbGF5VHJlZU5vZGU8Sz4gY3VycmVudE5vZGUpIHsKICAgIGFzc2VydChfd29ya0xpc3QuaXNOb3RFbXB0eSk7CiAgICBfd29ya0xpc3QuY2xlYXIoKTsKICAgIGlmIChjdXJyZW50Tm9kZSA9PSBudWxsKSB7CiAgICAgIF9maW5kTGVmdE1vc3REZXNjZW5kZW50KF90cmVlLl9yb290KTsKICAgIH0gZWxzZSB7CiAgICAgIF90cmVlLl9zcGxheShjdXJyZW50Tm9kZS5rZXkpOwogICAgICBfZmluZExlZnRNb3N0RGVzY2VuZGVudChfdHJlZS5fcm9vdC5yaWdodCk7CiAgICAgIGFzc2VydChfd29ya0xpc3QuaXNOb3RFbXB0eSk7CiAgICB9CiAgfQoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9tb2RpZmljYXRpb25Db3VudCAhPSBfdHJlZS5fbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKF90cmVlKTsKICAgIH0KICAgIC8vIFBpY2tzIHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIHdvcmtsaXN0IGFzIGN1cnJlbnQuCiAgICAvLyBVcGRhdGVzIHRoZSB3b3JrbGlzdCB3aXRoIHRoZSBsZWZ0LW1vc3QgcGF0aCBvZiB0aGUgY3VycmVudCBub2RlJ3MKICAgIC8vIHJpZ2h0LWhhbmQgY2hpbGQuCiAgICAvLyBJZiB0aGUgd29ya2xpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkIChhZnRlciBhIHNwbGF5KSwgaXQgaXMgcmVidWlsZAogICAgLy8gZnJvbSBzY3JhdGNoLgogICAgaWYgKF93b3JrTGlzdC5pc0VtcHR5KSB7CiAgICAgIF9jdXJyZW50Tm9kZSA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChfdHJlZS5fc3BsYXlDb3VudCAhPSBfc3BsYXlDb3VudCAmJiBfY3VycmVudE5vZGUgIT0gbnVsbCkgewogICAgICBfcmVidWlsZFdvcmtMaXN0KF9jdXJyZW50Tm9kZSk7CiAgICB9CiAgICBfY3VycmVudE5vZGUgPSBfd29ya0xpc3QucmVtb3ZlTGFzdCgpOwogICAgX2ZpbmRMZWZ0TW9zdERlc2NlbmRlbnQoX2N1cnJlbnROb2RlLnJpZ2h0KTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgVCBfZ2V0VmFsdWUoX1NwbGF5VHJlZU5vZGU8Sz4gbm9kZSk7Cn0KCmNsYXNzIF9TcGxheVRyZWVLZXlJdGVyYWJsZTxLPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEs+IHsKICBfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiBfdHJlZTsKICBfU3BsYXlUcmVlS2V5SXRlcmFibGUodGhpcy5fdHJlZSk7CiAgaW50IGdldCBsZW5ndGggPT4gX3RyZWUuX2NvdW50OwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3RyZWUuX2NvdW50ID09IDA7CiAgSXRlcmF0b3I8Sz4gZ2V0IGl0ZXJhdG9yID0+IF9TcGxheVRyZWVLZXlJdGVyYXRvcjxLPihfdHJlZSk7CgogIFNldDxLPiB0b1NldCgpIHsKICAgIFNwbGF5VHJlZVNldDxLPiBzZXQgPSBTcGxheVRyZWVTZXQ8Sz4oX3RyZWUuX2NvbXBhcmF0b3IsIF90cmVlLl92YWxpZEtleSk7CiAgICBzZXQuX2NvdW50ID0gX3RyZWUuX2NvdW50OwogICAgc2V0Ll9yb290ID0gc2V0Ll9jb3B5Tm9kZShfdHJlZS5fcm9vdCk7CiAgICByZXR1cm4gc2V0OwogIH0KfQoKY2xhc3MgX1NwbGF5VHJlZVZhbHVlSXRlcmFibGU8SywgVj4gZXh0ZW5kcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxWPiB7CiAgU3BsYXlUcmVlTWFwPEssIFY+IF9tYXA7CiAgX1NwbGF5VHJlZVZhbHVlSXRlcmFibGUodGhpcy5fbWFwKTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLl9jb3VudDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9tYXAuX2NvdW50ID09IDA7CiAgSXRlcmF0b3I8Vj4gZ2V0IGl0ZXJhdG9yID0+IF9TcGxheVRyZWVWYWx1ZUl0ZXJhdG9yPEssIFY+KF9tYXApOwp9CgpjbGFzcyBfU3BsYXlUcmVlS2V5SXRlcmF0b3I8Sz4gZXh0ZW5kcyBfU3BsYXlUcmVlSXRlcmF0b3I8SywgSz4gewogIF9TcGxheVRyZWVLZXlJdGVyYXRvcihfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiBtYXApIDogc3VwZXIobWFwKTsKICBLIF9nZXRWYWx1ZShfU3BsYXlUcmVlTm9kZTxLPiBub2RlKSA9PiBub2RlLmtleTsKfQoKY2xhc3MgX1NwbGF5VHJlZVZhbHVlSXRlcmF0b3I8SywgVj4gZXh0ZW5kcyBfU3BsYXlUcmVlSXRlcmF0b3I8SywgVj4gewogIF9TcGxheVRyZWVWYWx1ZUl0ZXJhdG9yKFNwbGF5VHJlZU1hcDxLLCBWPiBtYXApIDogc3VwZXIobWFwKTsKICBWIF9nZXRWYWx1ZShfU3BsYXlUcmVlTm9kZTxLPiBub2RlKSB7CiAgICBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPiBtYXBOb2RlID0gbm9kZTsKICAgIHJldHVybiBtYXBOb2RlLnZhbHVlOwogIH0KfQoKY2xhc3MgX1NwbGF5VHJlZU5vZGVJdGVyYXRvcjxLPgogICAgZXh0ZW5kcyBfU3BsYXlUcmVlSXRlcmF0b3I8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHsKICBfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yKF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHRyZWUpIDogc3VwZXIodHJlZSk7CiAgX1NwbGF5VHJlZU5vZGVJdGVyYXRvci5zdGFydEF0KAogICAgICBfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiB0cmVlLCBLIHN0YXJ0S2V5KQogICAgICA6IHN1cGVyLnN0YXJ0QXQodHJlZSwgc3RhcnRLZXkpOwogIF9TcGxheVRyZWVOb2RlPEs+IF9nZXRWYWx1ZShfU3BsYXlUcmVlTm9kZTxLPiBub2RlKSA9PiBub2RlOwp9CgovLy8gQSBbU2V0XSBvZiBvYmplY3RzIHRoYXQgY2FuIGJlIG9yZGVyZWQgcmVsYXRpdmUgdG8gZWFjaCBvdGhlci4KLy8vCi8vLyBUaGUgc2V0IGlzIGJhc2VkIG9uIGEgc2VsZi1iYWxhbmNpbmcgYmluYXJ5IHRyZWUuIEl0IGFsbG93cyBtb3N0IG9wZXJhdGlvbnMKLy8vIGluIGFtb3J0aXplZCBsb2dhcml0aG1pYyB0aW1lLgovLy8KLy8vIEVsZW1lbnRzIG9mIHRoZSBzZXQgYXJlIGNvbXBhcmVkIHVzaW5nIHRoZSBgY29tcGFyZWAgZnVuY3Rpb24gcGFzc2VkIGluCi8vLyB0aGUgY29uc3RydWN0b3IsIGJvdGggZm9yIG9yZGVyaW5nIGFuZCBmb3IgZXF1YWxpdHkuCi8vLyBJZiB0aGUgc2V0IGNvbnRhaW5zIG9ubHkgYW4gb2JqZWN0IGBhYCwgdGhlbiBgc2V0LmNvbnRhaW5zKGIpYAovLy8gd2lsbCByZXR1cm4gYHRydWVgIGlmIGFuZCBvbmx5IGlmIGBjb21wYXJlKGEsIGIpID09IDBgLAovLy8gYW5kIHRoZSB2YWx1ZSBvZiBgYSA9PSBiYCBpcyBub3QgZXZlbiBjaGVja2VkLgovLy8gSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gaXMgb21pdHRlZCwgdGhlIG9iamVjdHMgYXJlIGFzc3VtZWQgdG8gYmUKLy8vIFtDb21wYXJhYmxlXSwgYW5kIGFyZSBjb21wYXJlZCB1c2luZyB0aGVpciBbQ29tcGFyYWJsZS5jb21wYXJlVG9dIG1ldGhvZC4KLy8vIE5vbi1jb21wYXJhYmxlIG9iamVjdHMgKGluY2x1ZGluZyBgbnVsbGApIHdpbGwgbm90IHdvcmsgYXMgYW4gZWxlbWVudAovLy8gaW4gdGhhdCBjYXNlLgpjbGFzcyBTcGxheVRyZWVTZXQ8RT4gZXh0ZW5kcyBfU3BsYXlUcmVlPEUsIF9TcGxheVRyZWVOb2RlPEU+PgogICAgd2l0aCBJdGVyYWJsZU1peGluPEU+LCBTZXRNaXhpbjxFPiB7CiAgX1NwbGF5VHJlZU5vZGU8RT4gX3Jvb3Q7CiAgZmluYWwgX1NwbGF5VHJlZU5vZGU8RT4gX2R1bW15ID0gX1NwbGF5VHJlZU5vZGU8RT4obnVsbCk7CgogIENvbXBhcmF0b3I8RT4gX2NvbXBhcmF0b3I7CiAgX1ByZWRpY2F0ZSBfdmFsaWRLZXk7CgogIC8vLyBDcmVhdGUgYSBuZXcgW1NwbGF5VHJlZVNldF0gd2l0aCB0aGUgZ2l2ZW4gY29tcGFyZSBmdW5jdGlvbi4KICAvLy8KICAvLy8gSWYgdGhlIFtjb21wYXJlXSBmdW5jdGlvbiBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBbQ29tcGFyYWJsZS5jb21wYXJlXSwKICAvLy8gYW5kIHRoZSBlbGVtZW50cyBtdXN0IGJlIGNvbXBhcmFibGUuCiAgLy8vCiAgLy8vIEEgcHJvdmlkZWQgYGNvbXBhcmVgIGZ1bmN0aW9uIG1heSBub3Qgd29yayBvbiBhbGwgb2JqZWN0cy4gSXQgbWF5IG5vdCBldmVuCiAgLy8vIHdvcmsgb24gYWxsIGBFYCBpbnN0YW5jZXMuCiAgLy8vCiAgLy8vIEZvciBvcGVyYXRpb25zIHRoYXQgYWRkIGVsZW1lbnRzIHRvIHRoZSBzZXQsIHRoZSB1c2VyIGlzIHN1cHBvc2VkIHRvIG5vdAogIC8vLyBwYXNzIGluIG9iamVjdHMgdGhhdCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgY29tcGFyZSBmdW5jdGlvbi4KICAvLy8KICAvLy8gVGhlIG1ldGhvZHMgW2NvbnRhaW5zXSwgW3JlbW92ZV0sIFtsb29rdXBdLCBbcmVtb3ZlQWxsXSBvciBbcmV0YWluQWxsXQogIC8vLyBhcmUgdHlwZWQgdG8gYWNjZXB0IGFueSBvYmplY3QocyksIGFuZCB0aGUgW2lzVmFsaWRLZXldIHRlc3QgY2FuIHVzZWQgdG8KICAvLy8gZmlsdGVyIHRob3NlIG9iamVjdHMgYmVmb3JlIGhhbmRpbmcgdGhlbSB0byB0aGUgYGNvbXBhcmVgIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBJZiBbaXNWYWxpZEtleV0gaXMgcHJvdmlkZWQsIG9ubHkgdmFsdWVzIHNhdGlzZnlpbmcgYGlzVmFsaWRLZXkob3RoZXIpYAogIC8vLyBhcmUgY29tcGFyZWQgdXNpbmcgdGhlIGBjb21wYXJlYCBtZXRob2QgaW4gdGhlIG1ldGhvZHMgbWVudGlvbmVkIGFib3ZlLgogIC8vLyBJZiB0aGUgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGFuIG9iamVjdCwgaXQgaXMgYXNzdW1lZCB0bwogIC8vLyBub3QgYmUgaW4gdGhlIHNldC4KICAvLy8KICAvLy8gSWYgb21pdHRlZCwgdGhlIGBpc1ZhbGlkS2V5YCBmdW5jdGlvbiBkZWZhdWx0cyB0byBjaGVja2luZyBhZ2FpbnN0IHRoZQogIC8vLyB0eXBlIHBhcmFtZXRlcjogYG90aGVyIGlzIEVgLgogIFNwbGF5VHJlZVNldChbaW50IGNvbXBhcmUoRSBrZXkxLCBFIGtleTIpLCBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KV0pCiAgICAgIDogX2NvbXBhcmF0b3IgPSBjb21wYXJlID8/IF9kZWZhdWx0Q29tcGFyZTxFPigpLAogICAgICAgIF92YWxpZEtleSA9IGlzVmFsaWRLZXkgPz8gKCh2KSA9PiB2IGlzIEUpOwoKICAvLy8gQ3JlYXRlcyBhIFtTcGxheVRyZWVTZXRdIHRoYXQgY29udGFpbnMgYWxsIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBzZXQgd29ya3MgYXMgaWYgY3JlYXRlZCBieSBgbmV3IFNwbGF5VHJlZVNldDxFPihjb21wYXJlLCBpc1ZhbGlkS2V5KWAuCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXSBhbmQgdmFsaWQgYXJndW1lbnRzIHRvCiAgLy8vIFtjb21wYXJlXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAvLy8gY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFNldGAsIGZvciBleGFtcGxlIGFzOgogIC8vLyBgYGBkYXJ0CiAgLy8vIFNldDxTdXBlclR5cGU+IHN1cGVyU2V0ID0gLi4uOwogIC8vLyBTZXQ8U3ViVHlwZT4gc3ViU2V0ID0KICAvLy8gICAgIG5ldyBTcGxheVRyZWVTZXQ8U3ViVHlwZT4uZnJvbShzdXBlclNldC53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgLy8vIGBgYAogIGZhY3RvcnkgU3BsYXlUcmVlU2V0LmZyb20oSXRlcmFibGUgZWxlbWVudHMsCiAgICAgIFtpbnQgY29tcGFyZShFIGtleTEsIEUga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkgewogICAgU3BsYXlUcmVlU2V0PEU+IHJlc3VsdCA9IFNwbGF5VHJlZVNldDxFPihjb21wYXJlLCBpc1ZhbGlkS2V5KTsKICAgIGZvciAoZmluYWwgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBFIGUgPSBlbGVtZW50OwogICAgICByZXN1bHQuYWRkKGUpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZVNldF0gZnJvbSBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBUaGUgc2V0IHdvcmtzIGFzIGlmIGNyZWF0ZWQgYnkgYG5ldyBTcGxheVRyZWVTZXQ8RT4oY29tcGFyZSwgaXNWYWxpZEtleSlgLgogIC8vLwogIC8vLyBBbGwgdGhlIFtlbGVtZW50c10gc2hvdWxkIGJlIHZhbGlkIGFzIGFyZ3VtZW50cyB0byB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uLgogIGZhY3RvcnkgU3BsYXlUcmVlU2V0Lm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzLAogICAgICAgICAgW2ludCBjb21wYXJlKEUga2V5MSwgRSBrZXkyKSwgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSldKSA9PgogICAgICBTcGxheVRyZWVTZXQoY29tcGFyZSwgaXNWYWxpZEtleSkuLmFkZEFsbChlbGVtZW50cyk7CgogIFNldDxUPiBfbmV3U2V0PFQ+KCkgPT4KICAgICAgU3BsYXlUcmVlU2V0PFQ+KChUIGEsIFQgYikgPT4gX2NvbXBhcmF0b3IoYSBhcyBFLCBiIGFzIEUpLCBfdmFsaWRLZXkpOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzLCBuZXdTZXQ6IF9uZXdTZXQpOwogIGludCBfY29tcGFyZShFIGUxLCBFIGUyKSA9PiBfY29tcGFyYXRvcihlMSwgZTIpOwoKICAvLyBGcm9tIEl0ZXJhYmxlLgoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX1NwbGF5VHJlZUtleUl0ZXJhdG9yPEU+KHRoaXMpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfY291bnQ7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfcm9vdCA9PSBudWxsOwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX3Jvb3QgIT0gbnVsbDsKCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKF9jb3VudCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHJldHVybiBfZmlyc3Qua2V5OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAoX2NvdW50ID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIF9sYXN0LmtleTsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBpZiAoX2NvdW50ID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgaWYgKF9jb3VudCA+IDEpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIHJldHVybiBfcm9vdC5rZXk7CiAgfQoKICAvLyBGcm9tIFNldC4KICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICByZXR1cm4gX3ZhbGlkS2V5KGVsZW1lbnQpICYmIF9zcGxheShlbGVtZW50KSA9PSAwOwogIH0KCiAgYm9vbCBhZGQoRSBlbGVtZW50KSB7CiAgICBpbnQgY29tcGFyZSA9IF9zcGxheShlbGVtZW50KTsKICAgIGlmIChjb21wYXJlID09IDApIHJldHVybiBmYWxzZTsKICAgIF9hZGROZXdSb290KF9TcGxheVRyZWVOb2RlKGVsZW1lbnQpLCBjb21wYXJlKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IG9iamVjdCkgewogICAgaWYgKCFfdmFsaWRLZXkob2JqZWN0KSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9yZW1vdmUob2JqZWN0KSAhPSBudWxsOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGludCBjb21wYXJlID0gX3NwbGF5KGVsZW1lbnQpOwogICAgICBpZiAoY29tcGFyZSAhPSAwKSB7CiAgICAgICAgX2FkZE5ld1Jvb3QoX1NwbGF5VHJlZU5vZGUoZWxlbWVudCksIGNvbXBhcmUpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICBmb3IgKE9iamVjdCBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGlmIChfdmFsaWRLZXkoZWxlbWVudCkpIF9yZW1vdmUoZWxlbWVudCk7CiAgICB9CiAgfQoKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICAvLyBCdWlsZCBhIHNldCB3aXRoIHRoZSBzYW1lIHNlbnNlIG9mIGVxdWFsaXR5IGFzIHRoaXMgc2V0LgogICAgU3BsYXlUcmVlU2V0PEU+IHJldGFpblNldCA9IFNwbGF5VHJlZVNldDxFPihfY29tcGFyYXRvciwgX3ZhbGlkS2V5KTsKICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGZvciAoT2JqZWN0IG9iamVjdCBpbiBlbGVtZW50cykgewogICAgICBpZiAobW9kaWZpY2F0aW9uQ291bnQgIT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgICAgLy8gVGhlIGl0ZXJhdG9yIHNob3VsZCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuCiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICAgIC8vIEVxdWl2YWxlbnQgdG8gdGhpcy5jb250YWlucyhvYmplY3QpLgogICAgICBpZiAoX3ZhbGlkS2V5KG9iamVjdCkgJiYgX3NwbGF5KG9iamVjdCkgPT0gMCkgewogICAgICAgIHJldGFpblNldC5hZGQoX3Jvb3Qua2V5KTsKICAgICAgfQogICAgfQogICAgLy8gVGFrZSBvdmVyIHRoZSBlbGVtZW50cyBmcm9tIHRoZSByZXRhaW5lZCBzZXQsIGlmIGl0IGRpZmZlcnMuCiAgICBpZiAocmV0YWluU2V0Ll9jb3VudCAhPSBfY291bnQpIHsKICAgICAgX3Jvb3QgPSByZXRhaW5TZXQuX3Jvb3Q7CiAgICAgIF9jb3VudCA9IHJldGFpblNldC5fY291bnQ7CiAgICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgfQogIH0KCiAgRSBsb29rdXAoT2JqZWN0IG9iamVjdCkgewogICAgaWYgKCFfdmFsaWRLZXkob2JqZWN0KSkgcmV0dXJuIG51bGw7CiAgICBpbnQgY29tcCA9IF9zcGxheShvYmplY3QpOwogICAgaWYgKGNvbXAgIT0gMCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX3Jvb3Qua2V5OwogIH0KCiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgewogICAgU2V0PEU+IHJlc3VsdCA9IFNwbGF5VHJlZVNldDxFPihfY29tcGFyYXRvciwgX3ZhbGlkS2V5KTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gU3BsYXlUcmVlU2V0PEU+KF9jb21wYXJhdG9yLCBfdmFsaWRLZXkpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiBfY2xvbmUoKS4uYWRkQWxsKG90aGVyKTsKICB9CgogIFNwbGF5VHJlZVNldDxFPiBfY2xvbmUoKSB7CiAgICB2YXIgc2V0ID0gU3BsYXlUcmVlU2V0PEU+KF9jb21wYXJhdG9yLCBfdmFsaWRLZXkpOwogICAgc2V0Ll9jb3VudCA9IF9jb3VudDsKICAgIHNldC5fcm9vdCA9IF9jb3B5Tm9kZShfcm9vdCk7CiAgICByZXR1cm4gc2V0OwogIH0KCiAgLy8gQ29waWVzIHRoZSBzdHJ1Y3R1cmUgb2YgYSBTcGxheVRyZWUgaW50byBhIG5ldyBzaW1pbGFyIHN0cnVjdHVyZS4KICAvLyBXb3JrcyBvbiBfU3BsYXlUcmVlTWFwTm9kZSBhcyB3ZWxsLCBidXQgb25seSBjb3BpZXMgdGhlIGtleXMsCiAgX1NwbGF5VHJlZU5v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dCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2gsIEl0ZXJhYmxlRWxlbWVudEVycm9yOwoKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgVWludDMyTGlzdDsKCi8vLyBUaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5OgovLyBwYXJ0ICJjb21wYWN0X2hhc2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgSGFzaE1hcDxLLCBWPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBIYXNoTWFwKAogICAgICB7Ym9vbCBlcXVhbHMoSyBrZXkxLCBLIGtleTIpLAogICAgICBpbnQgaGFzaENvZGUoSyBrZXkpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pIHsKICAgIGlmIChpc1ZhbGlkS2V5ID09IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IG51bGwpIHsKICAgICAgICBpZiAoZXF1YWxzID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0hhc2hNYXA8SywgVj4oKTsKICAgICAgICB9CiAgICAgICAgaGFzaENvZGUgPSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpZGVudGljYWwoaWRlbnRpdHlIYXNoQ29kZSwgaGFzaENvZGUpICYmCiAgICAgICAgICAgIGlkZW50aWNhbChpZGVudGljYWwsIGVxdWFscykpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0lkZW50aXR5SGFzaE1hcDxLLCBWPigpOwogICAgICAgIH0KICAgICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBoYXNoQ29kZSA/Pz0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgIH0KICAgIHJldHVybiBuZXcgX0N1c3RvbUhhc2hNYXA8SywgVj4oZXF1YWxzLCBoYXNoQ29kZSwgaXNWYWxpZEtleSk7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IEhhc2hNYXAuaWRlbnRpdHkoKSA9PiBuZXcgX0lkZW50aXR5SGFzaE1hcDxLLCBWPigpOwoKICBTZXQ8Sz4gX25ld0tleVNldCgpOwp9Cgpjb25zdCBpbnQgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLID0gMHgzZmZmZmZmZjsKCmNsYXNzIF9IYXNoTWFwPEssIFY+IGV4dGVuZHMgTWFwQmFzZTxLLCBWPiBpbXBsZW1lbnRzIEhhc2hNYXA8SywgVj4gewogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfQ0FQQUNJVFkgPSA4OwoKICBpbnQgX2VsZW1lbnRDb3VudCA9IDA7CiAgTGlzdDxfSGFzaE1hcEVudHJ5PEssIFY+PiBfYnVja2V0cyA9CiAgICAgIG5ldyBMaXN0PF9IYXNoTWFwRW50cnk8SywgVj4+KF9JTklUSUFMX0NBUEFDSVRZKTsKICBpbnQgX21vZGlmaWNhdGlvbkNvdW50ID0gMDsKCiAgaW50IGdldCBsZW5ndGggPT4gX2VsZW1lbnRDb3VudDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9lbGVtZW50Q291bnQgPT0gMDsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9lbGVtZW50Q291bnQgIT0gMDsKCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gbmV3IF9IYXNoTWFwS2V5SXRlcmFibGU8SywgVj4odGhpcyk7CiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBuZXcgX0hhc2hNYXBWYWx1ZUl0ZXJhYmxlPEssIFY+KHRoaXMpOwoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgcmV0dXJuIHRydWU7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBidWNrZXRzW2ldOwogICAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSB2YWx1ZSkgcmV0dXJuIHRydWU7CiAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgewogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGtleS5oYXNoQ29kZTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChsZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGVudHJ5LmtleSA9PSBrZXkpIHsKICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGtleS5oYXNoQ29kZTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChsZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGVudHJ5LmtleSA9PSBrZXkpIHsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgZmluYWwgc3RhbXAgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICBmaW5hbCBWIHZhbHVlID0gaWZBYnNlbnQoKTsKICAgIGlmIChzdGFtcCA9PSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgX2FkZEVudHJ5KGJ1Y2tldHMsIGluZGV4LCBsZW5ndGgsIGtleSwgdmFsdWUsIGhhc2hDb2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXNba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBvdGhlci5mb3JFYWNoKChLIGtleSwgViB2YWx1ZSkgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0pOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEsga2V5LCBWIHZhbHVlKSkgewogICAgZmluYWwgc3RhbXAgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBsZW5ndGggPSBidWNrZXRzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpXTsKICAgICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBhY3Rpb24oZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7CiAgICAgICAgaWYgKHN0YW1wICE9IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgICB9CiAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgICB9CiAgICB9CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGtleS5oYXNoQ29kZTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgX0hhc2hNYXBFbnRyeTxLLCBWPiBwcmV2aW91cyA9IG51bGw7CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGVudHJ5LmtleSA9PSBrZXkpIHsKICAgICAgICBfcmVtb3ZlRW50cnkoZW50cnksIHByZXZpb3VzLCBpbmRleCk7CiAgICAgICAgX2VsZW1lbnRDb3VudC0tOwogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9CiAgICAgICAgICAgIChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgcHJldmlvdXMgPSBlbnRyeTsKICAgICAgZW50cnkgPSBuZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX2J1Y2tldHMgPSBuZXcgTGlzdChfSU5JVElBTF9DQVBBQ0lUWSk7CiAgICBpZiAoX2VsZW1lbnRDb3VudCA+IDApIHsKICAgICAgX2VsZW1lbnRDb3VudCA9IDA7CiAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9IChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgIH0KICB9CgogIHZvaWQgX3JlbW92ZUVudHJ5KF9IYXNoTWFwRW50cnk8SywgVj4gZW50cnksCiAgICAgIF9IYXNoTWFwRW50cnk8SywgVj4gcHJldmlvdXNJbkJ1Y2tldCwgaW50IGJ1Y2tldEluZGV4KSB7CiAgICBpZiAocHJldmlvdXNJbkJ1Y2tldCA9PSBudWxsKSB7CiAgICAgIF9idWNrZXRzW2J1Y2tldEluZGV4XSA9IGVudHJ5Lm5leHQ7CiAgICB9IGVsc2UgewogICAgICBwcmV2aW91c0luQnVja2V0Lm5leHQgPSBlbnRyeS5uZXh0OwogICAgfQogIH0KCiAgdm9pZCBfYWRkRW50cnkoTGlzdDxfSGFzaE1hcEVudHJ5PEssIFY+PiBidWNrZXRzLCBpbnQgaW5kZXgsIGludCBsZW5ndGgsCiAgICAgIEsga2V5LCBWIHZhbHVlLCBpbnQgaGFzaENvZGUpIHsKICAgIGZpbmFsIGVudHJ5ID0gbmV3IF9IYXNoTWFwRW50cnk8SywgVj4oa2V5LCB2YWx1ZSwgaGFzaENvZGUsIGJ1Y2tldHNbaW5kZXhdKTsKICAgIGJ1Y2tldHNbaW5kZXhdID0gZW50cnk7CiAgICBmaW5hbCBuZXdFbGVtZW50cyA9IF9lbGVtZW50Q291bnQgKyAxOwogICAgX2VsZW1lbnRDb3VudCA9IG5ld0VsZW1lbnRzOwogICAgLy8gSWYgd2UgZW5kIHVwIHdpdGggbW9yZSB0aGFuIDc1JSBub24tZW1wdHkgZW50cmllcywgd2UKICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBzdG9yZS4KICAgIGlmICgobmV3RWxlbWVudHMgPDwgMikgPiAoKGxlbmd0aCA8PCAxKSArIGxlbmd0aCkpIF9yZXNpemUoKTsKICAgIF9tb2RpZmljYXRpb25Db3VudCA9IChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICB9CgogIHZvaWQgX3Jlc2l6ZSgpIHsKICAgIGZpbmFsIG9sZEJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIG9sZExlbmd0aCA9IG9sZEJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgbmV3TGVuZ3RoID0gb2xkTGVuZ3RoIDw8IDE7CiAgICBmaW5hbCBuZXdCdWNrZXRzID0gbmV3IExpc3Q8X0hhc2hNYXBFbnRyeTxLLCBWPj4obmV3TGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2xkTGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gb2xkQnVja2V0c1tpXTsKICAgICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgICBmaW5hbCBoYXNoQ29kZSA9IGVudHJ5Lmhhc2hDb2RlOwogICAgICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAobmV3TGVuZ3RoIC0gMSk7CiAgICAgICAgZW50cnkubmV4dCA9IG5ld0J1Y2tldHNbaW5kZXhdOwogICAgICAgIG5ld0J1Y2tldHNbaW5kZXhdID0gZW50cnk7CiAgICAgICAgZW50cnkgPSBuZXh0OwogICAgICB9CiAgICB9CiAgICBfYnVja2V0cyA9IG5ld0J1Y2tldHM7CiAgfQoKICBTZXQ8Sz4gX25ld0tleVNldCgpID0+IG5ldyBfSGFzaFNldDxLPigpOwp9CgpjbGFzcyBfQ3VzdG9tSGFzaE1hcDxLLCBWPiBleHRlbmRzIF9IYXNoTWFwPEssIFY+IHsKICBmaW5hbCBfRXF1YWxpdHk8Sz4gX2VxdWFsczsKICBmaW5hbCBfSGFzaGVyPEs+IF9oYXNoQ29kZTsKICBmaW5hbCBfUHJlZGljYXRlIF92YWxpZEtleTsKICBfQ3VzdG9tSGFzaE1hcCh0aGlzLl9lcXVhbHMsIHRoaXMuX2hhc2hDb2RlLCB2YWxpZEtleSkKICAgICAgOiBfdmFsaWRLZXkgPSAodmFsaWRLZXkgIT0gbnVsbCkgPyB2YWxpZEtleSA6IG5ldyBfVHlwZVRlc3Q8Sz4oKS50ZXN0OwoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpIHsKICAgIGlmICghX3ZhbGlkS2V5KGtleSkpIHJldHVybiBmYWxzZTsKICAgIGZpbmFsIGhhc2hDb2RlID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBfZXF1YWxzKGVudHJ5LmtleSwga2V5KSkgcmV0dXJuIHRydWU7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgaWYgKCFfdmFsaWRLZXkoa2V5KSkgcmV0dXJuIG51bGw7CiAgICBmaW5hbCBoYXNoQ29kZSA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgX2VxdWFscyhlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChsZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIF9lcXVhbHMoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgX2FkZEVudHJ5KGJ1Y2tldHMsIGluZGV4LCBsZW5ndGgsIGtleSwgdmFsdWUsIGhhc2hDb2RlKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChsZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIF9lcXVhbHMoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIGludCBzdGFtcCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgaWYgKHN0YW1wID09IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogICAgfSBlbHNlIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAoIV92YWxpZEtleShrZXkpKSByZXR1cm4gbnVsbDsKICAgIGZpbmFsIGhhc2hDb2RlID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIF9IYXNoTWFwRW50cnk8SywgVj4gcHJldmlvdXMgPSBudWxsOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgZmluYWwgbmV4dCA9IGVudHJ5Lm5leHQ7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBfZXF1YWxzKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIF9yZW1vdmVFbnRyeShlbnRyeSwgcHJldmlvdXMsIGluZGV4KTsKICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0KICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBwcmV2aW91cyA9IGVudHJ5OwogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFNldDxLPiBfbmV3S2V5U2V0KCkgPT4gbmV3IF9DdXN0b21IYXNoU2V0PEs+KF9lcXVhbHMsIF9oYXNoQ29kZSwgX3ZhbGlkS2V5KTsKfQoKY2xhc3MgX0lkZW50aXR5SGFzaE1hcDxLLCBWPiBleHRlbmRzIF9IYXNoTWFwPEssIFY+IHsKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gaWRlbnRpdHlIYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgaWRlbnRpY2FsKGVudHJ5LmtleSwga2V5KSkgcmV0dXJuIHRydWU7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgZmluYWwgaGFzaENvZGUgPSBpZGVudGl0eUhhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBpZGVudGljYWwoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gaWRlbnRpdHlIYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgaWRlbnRpY2FsKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIF9hZGRFbnRyeShidWNrZXRzLCBpbmRleCwgbGVuZ3RoLCBrZXksIHZhbHVlLCBoYXNoQ29kZSk7CiAgfQoKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gaWRlbnRpdHlIYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgaWRlbnRpY2FsKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICBmaW5hbCBzdGFtcCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgaWYgKHN0YW1wID09IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogICAgfSBlbHNlIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGlkZW50aXR5SGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgX0hhc2hNYXBFbnRyeTxLLCBWPiBwcmV2aW91cyA9IG51bGw7CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGlkZW50aWNhbChlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICBfcmVtb3ZlRW50cnkoZW50cnksIHByZXZpb3VzLCBpbmRleCk7CiAgICAgICAgX2VsZW1lbnRDb3VudC0tOwogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9CiAgICAgICAgICAgIChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgcHJldmlvdXMgPSBlbnRyeTsKICAgICAgZW50cnkgPSBuZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBTZXQ8Sz4gX25ld0tleVNldCgpID0+IG5ldyBfSWRlbnRpdHlIYXNoU2V0PEs+KCk7Cn0KCmNsYXNzIF9IYXNoTWFwRW50cnk8SywgVj4gewogIGZpbmFsIEsga2V5OwogIFYgdmFsdWU7CiAgZmluYWwgaW50IGhhc2hDb2RlOwogIF9IYXNoTWFwRW50cnk8SywgVj4gbmV4dDsKICBfSGFzaE1hcEVudHJ5KHRoaXMua2V5LCB0aGlzLnZhbHVlLCB0aGlzLmhhc2hDb2RlLCB0aGlzLm5leHQpOwp9CgphYnN0cmFjdCBjbGFzcyBfSGFzaE1hcEl0ZXJhYmxlPEssIFYsIEU+CiAgICBleHRlbmRzIGludGVybmFsLkVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBfSGFzaE1hcDxLLCBWPiBfbWFwOwogIF9IYXNoTWFwSXRlcmFibGUodGhpcy5fbWFwKTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9tYXAuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9tYXAuaXNOb3RFbXB0eTsKfQoKY2xhc3MgX0hhc2hNYXBLZXlJdGVyYWJsZTxLLCBWPiBleHRlbmRzIF9IYXNoTWFwSXRlcmFibGU8SywgViwgSz4gewogIF9IYXNoTWFwS2V5SXRlcmFibGUoX0hhc2hNYXA8SywgVj4gbWFwKSA6IHN1cGVyKG1hcCk7CiAgSXRlcmF0b3I8Sz4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfSGFzaE1hcEtleUl0ZXJhdG9yPEssIFY+KF9tYXApOwogIGJvb2wgY29udGFpbnMoT2JqZWN0IGtleSkgPT4gX21hcC5jb250YWluc0tleShrZXkpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSkpIHsKICAgIF9tYXAuZm9yRWFjaCgoSyBrZXksIF8pIHsKICAgICAgYWN0aW9uKGtleSk7CiAgICB9KTsKICB9CgogIFNldDxLPiB0b1NldCgpID0+IF9tYXAuX25ld0tleVNldCgpLi5hZGRBbGwodGhpcyk7Cn0KCmNsYXNzIF9IYXNoTWFwVmFsdWVJdGVyYWJsZTxLLCBWPiBleHRlbmRzIF9IYXNoTWFwSXRlcmFibGU8SywgViwgVj4gewogIF9IYXNoTWFwVmFsdWVJdGVyYWJsZShfSGFzaE1hcDxLLCBWPiBtYXApIDogc3VwZXIobWFwKTsKICBJdGVyYXRvcjxWPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9IYXNoTWFwVmFsdWVJdGVyYXRvcjxLLCBWPihfbWFwKTsKICBib29sIGNvbnRhaW5zKE9iamVjdCB2YWx1ZSkgPT4gX21hcC5jb250YWluc1ZhbHVlKHZhbHVlKTsKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oViB2YWx1ZSkpIHsKICAgIF9tYXAuZm9yRWFjaCgoXywgViB2YWx1ZSkgewogICAgICBhY3Rpb24odmFsdWUpOwogICAgfSk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfSGFzaE1hcEl0ZXJhdG9yPEssIFYsIEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIF9IYXNoTWFwPEssIFY+IF9tYXA7CiAgZmluYWwgaW50IF9zdGFtcDsKCiAgaW50IF9pbmRleCA9IDA7CiAgX0hhc2hNYXBFbnRyeTxLLCBWPiBfZW50cnk7CgogIF9IYXNoTWFwSXRlcmF0b3IodGhpcy5fbWFwKSA6IF9zdGFtcCA9IF9tYXAuX21vZGlmaWNhdGlvbkNvdW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9zdGFtcCAhPSBfbWFwLl9tb2RpZmljYXRpb25Db3VudCkgewogICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKF9tYXApOwogICAgfQogICAgdmFyIGVudHJ5ID0gX2VudHJ5OwogICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgZmluYWwgbmV4dCA9IGVudHJ5Lm5leHQ7CiAgICAgIGlmIChuZXh0ICE9IG51bGwpIHsKICAgICAgICBfZW50cnkgPSBuZXh0OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIF9lbnRyeSA9IG51bGw7CiAgICB9CiAgICBmaW5hbCBidWNrZXRzID0gX21hcC5fYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IF9pbmRleDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGVudHJ5ID0gYnVja2V0c1tpXTsKICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBfaW5kZXggPSBpICsgMTsKICAgICAgICBfZW50cnkgPSBlbnRyeTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX2luZGV4ID0gbGVuZ3RoOwogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgX0hhc2hNYXBLZXlJdGVyYXRvcjxLLCBWPiBleHRlbmRzIF9IYXNoTWFwSXRlcmF0b3I8SywgViwgSz4gewogIF9IYXNoTWFwS2V5SXRlcmF0b3IoX0hhc2hNYXA8SywgVj4gbWFwKSA6IHN1cGVyKG1hcCk7CiAgSyBnZXQgY3VycmVudCA9PiBfZW50cnk/LmtleTsKfQoKY2xhc3MgX0hhc2hNYXBWYWx1ZUl0ZXJhdG9yPEssIFY+IGV4dGVuZHMgX0hhc2hNYXBJdGVyYXRvcjxLLCBWLCBWPiB7CiAgX0hhc2hNYXBWYWx1ZUl0ZXJhdG9yKF9IYXNoTWFwPEssIFY+IG1hcCkgOiBzdXBlcihtYXApOwogIFYgZ2V0IGN1cnJlbnQgPT4gX2VudHJ5Py52YWx1ZTsKfQoKQHBhdGNoCmNsYXNzIEhhc2hTZXQ8RT4gewogIEBwYXRjaAogIGZhY3RvcnkgSGFzaFNldCgKICAgICAge2Jvb2wgZXF1YWxzKEUgZTEsIEUgZTIpLAogICAgICBpbnQgaGFzaENvZGUoRSBlKSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KSB7CiAgICBpZiAoaXNWYWxpZEtleSA9PSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBudWxsKSB7CiAgICAgICAgaWYgKGVxdWFscyA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9IYXNoU2V0PEU+KCk7CiAgICAgICAgfQogICAgICAgIGhhc2hDb2RlID0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGlkZW50aXR5SGFzaENvZGUsIGhhc2hDb2RlKSAmJgogICAgICAgICAgICBpZGVudGljYWwoaWRlbnRpY2FsLCBlcXVhbHMpKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8RT4oKTsKICAgICAgICB9CiAgICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaGFzaENvZGUgPz89IF9kZWZhdWx0SGFzaENvZGU7CiAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICB9CiAgICByZXR1cm4gbmV3IF9DdXN0b21IYXNoU2V0PEU+KGVxdWFscywgaGFzaENvZGUsIGlzVmFsaWRLZXkpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBIYXNoU2V0LmlkZW50aXR5KCkgPT4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8RT4oKTsKfQoKY2xhc3MgX0hhc2hTZXQ8RT4gZXh0ZW5kcyBfU2V0QmFzZTxFPiBpbXBsZW1lbnRzIEhhc2hTZXQ8RT4gewogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfQ0FQQUNJVFkgPSA4OwoKICBMaXN0PF9IYXNoU2V0RW50cnk8RT4+IF9idWNrZXRzID0KICAgICAgbmV3IExpc3Q8X0hhc2hTZXRFbnRyeTxFPj4oX0lOSVRJQUxfQ0FQQUNJVFkpOwogIGludCBfZWxlbWVudENvdW50ID0gMDsKICBpbnQgX21vZGlmaWNhdGlvbkNvdW50ID0gMDsKCiAgYm9vbCBfZXF1YWxzKGUxLCBlMikgPT4gZTEgPT0gZTI7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBlLmhhc2hDb2RlOwoKICBzdGF0aWMgU2V0PFI+IF9uZXdFbXB0eTxSPigpID0+IG5ldyBfSGFzaFNldDxSPigpOwoKICAvLyBJdGVyYWJsZS4KCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfSGFzaFNldEl0ZXJhdG9yPEU+KHRoaXMpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZWxlbWVudENvdW50OwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9lbGVtZW50Q291bnQgPT0gMDsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfZWxlbWVudENvdW50ICE9IDA7CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IG9iamVjdCkgewogICAgaW50IGluZGV4ID0gX2hhc2hDb2RlKG9iamVjdCkgJiAoX2J1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gX2J1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKF9lcXVhbHMoZW50cnkua2V5LCBvYmplY3QpKSByZXR1cm4gdHJ1ZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBsb29rdXAoT2JqZWN0IG9iamVjdCkgewogICAgaW50IGluZGV4ID0gX2hhc2hDb2RlKG9iamVjdCkgJiAoX2J1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gX2J1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgdmFyIGtleSA9IGVudHJ5LmtleTsKICAgICAgaWYgKF9lcXVhbHMoa2V5LCBvYmplY3QpKSByZXR1cm4ga2V5OwogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2J1Y2tldHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gX2J1Y2tldHNbaV07CiAgICAgIGlmIChlbnRyeSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LmtleTsKICAgICAgfQogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGZvciAoaW50IGkgPSBfYnVja2V0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICB2YXIgZW50cnkgPSBfYnVja2V0c1tpXTsKICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICB3aGlsZSAoZW50cnkubmV4dCAhPSBudWxsKSB7CiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBlbnRyeS5rZXk7CiAgICAgIH0KICAgIH0KICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgLy8gU2V0LgoKICBib29sIGFkZChFIGVsZW1lbnQpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gX2hhc2hDb2RlKGVsZW1lbnQpOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChfYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIF9IYXNoU2V0RW50cnk8RT4gZW50cnkgPSBfYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoX2VxdWFscyhlbnRyeS5rZXksIGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIF9hZGRFbnRyeShlbGVtZW50LCBoYXNoQ29kZSwgaW5kZXgpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBvYmplY3RzKSB7CiAgICBmb3IgKEUgb2JqZWN0IGluIG9iamVjdHMpIHsKICAgICAgYWRkKG9iamVjdCk7CiAgICB9CiAgfQoKICBib29sIF9yZW1vdmUoT2JqZWN0IG9iamVjdCwgaW50IGhhc2hDb2RlKSB7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKF9idWNrZXRzLmxlbmd0aCAtIDEpOwogICAgX0hhc2hTZXRFbnRyeTxFPiBlbnRyeSA9IF9idWNrZXRzW2luZGV4XTsKICAgIF9IYXNoU2V0RW50cnk8RT4gcHJldmlvdXMgPSBudWxsOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKF9lcXVhbHMoZW50cnkua2V5LCBvYmplY3QpKSB7CiAgICAgICAgX0hhc2hTZXRFbnRyeTxFPiBuZXh0ID0gZW50cnkucmVtb3ZlKCk7CiAgICAgICAgaWYgKHByZXZpb3VzID09IG51bGwpIHsKICAgICAgICAgIF9idWNrZXRzW2luZGV4XSA9IG5leHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByZXZpb3VzLm5leHQgPSBuZXh0OwogICAgICAgIH0KICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0KICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHByZXZpb3VzID0gZW50cnk7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBvYmplY3QpID0+IF9yZW1vdmUob2JqZWN0LCBfaGFzaENvZGUob2JqZWN0KSk7CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gb2JqZWN0c1RvUmVtb3ZlKSB7CiAgICBmb3IgKE9iamVjdCBvYmplY3QgaW4gb2JqZWN0c1RvUmVtb3ZlKSB7CiAgICAgIF9yZW1vdmUob2JqZWN0LCBfaGFzaENvZGUob2JqZWN0KSk7CiAgICB9CiAgfQoKICB2b2lkIF9maWx0ZXJXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgYm9vbCByZW1vdmVNYXRjaGluZykgewogICAgaW50IGxlbmd0aCA9IF9idWNrZXRzLmxlbmd0aDsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgX0hhc2hTZXRFbnRyeTxFPiBlbnRyeSA9IF9idWNrZXRzW2luZGV4XTsKICAgICAgX0hhc2hTZXRFbnRyeTxFPiBwcmV2aW91cyA9IG51bGw7CiAgICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgICAgaW50IG1vZGlmaWNhdGlvbkNvdW50ID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgICAgIGJvb2wgdGVzdFJlc3VsdCA9IHRlc3QoZW50cnkua2V5KTsKICAgICAgICBpZiAobW9kaWZpY2F0aW9uQ291bnQgIT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgICBpZiAodGVzdFJlc3VsdCA9PSByZW1vdmVNYXRjaGluZykgewogICAgICAgICAgX0hhc2hTZXRFbnRyeTxFPiBuZXh0ID0gZW50cnkucmVtb3ZlKCk7CiAgICAgICAgICBpZiAocHJldmlvdXMgPT0gbnVsbCkgewogICAgICAgICAgICBfYnVja2V0c1tpbmRleF0gPSBuZXh0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJldmlvdXMubmV4dCA9IG5leHQ7CiAgICAgICAgICB9CiAgICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPQogICAgICAgICAgICAgIChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgICAgICAgIGVudHJ5ID0gbmV4dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJldmlvdXMgPSBlbnRyeTsKICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9maWx0ZXJXaGVyZSh0ZXN0LCB0cnVlKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9maWx0ZXJXaGVyZSh0ZXN0LCBmYWxzZSk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX2J1Y2tldHMgPSBuZXcgTGlzdChfSU5JVElBTF9DQVBBQ0lUWSk7CiAgICBpZiAoX2VsZW1lbnRDb3VudCA+IDApIHsKICAgICAgX2VsZW1lbnRDb3VudCA9IDA7CiAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9IChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgIH0KICB9CgogIHZvaWQgX2FkZEVudHJ5KEUga2V5LCBpbnQgaGFzaENvZGUsIGludCBpbmRleCkgewogICAgX2J1Y2tldHNbaW5kZXhdID0gbmV3IF9IYXNoU2V0RW50cnk8RT4oa2V5LCBoYXNoQ29kZSwgX2J1Y2tldHNbaW5kZXhdKTsKICAgIGludCBuZXdFbGVtZW50cyA9IF9lbGVtZW50Q291bnQgKyAxOwogICAgX2VsZW1lbnRDb3VudCA9IG5ld0VsZW1lbnRzOwogICAgaW50IGxlbmd0aCA9IF9idWNrZXRzLmxlbmd0aDsKICAgIC8vIElmIHdlIGVuZCB1cCB3aXRoIG1vcmUgdGhhbiA3NSUgbm9uLWVtcHR5IGVudHJpZXMsIHdlCiAgICAvLyByZXNpemUgdGhlIGJhY2tpbmcgc3RvcmUuCiAgICBpZiAoKG5ld0VsZW1lbnRzIDw8IDIpID4gKChsZW5ndGggPDwgMSkgKyBsZW5ndGgpKSBfcmVzaXplKCk7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQgPSAoX21vZGlmaWNhdGlvbkNvdW50ICsgMSkgJiBfTU9ESUZJQ0FUSU9OX0NPVU5UX01BU0s7CiAgfQoKICB2b2lkIF9yZXNpemUoKSB7CiAgICBpbnQgb2xkTGVuZ3RoID0gX2J1Y2tldHMubGVuZ3RoOwogICAgaW50IG5ld0xlbmd0aCA9IG9sZExlbmd0aCA8PCAxOwogICAgTGlzdCBvbGRCdWNrZXRzID0gX2J1Y2tldHM7CiAgICBMaXN0IG5ld0J1Y2tldHMgPSBuZXcgTGlzdDxfSGFzaFNldEVudHJ5PEU+PihuZXdMZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRMZW5ndGg7IGkrKykgewogICAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gb2xkQnVja2V0c1tpXTsKICAgICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBfSGFzaFNldEVudHJ5PEU+IG5leHQgPSBlbnRyeS5uZXh0OwogICAgICAgIGludCBuZXdJbmRleCA9IGVudHJ5Lmhhc2hDb2RlICYgKG5ld0xlbmd0aCAtIDEpOwogICAgICAgIGVudHJ5Lm5leHQgPSBuZXdCdWNrZXRzW25ld0luZGV4XTsKICAgICAgICBuZXdCdWNrZXRzW25ld0luZGV4XSA9IGVudHJ5OwogICAgICAgIGVudHJ5ID0gbmV4dDsKICAgICAgfQogICAgfQogICAgX2J1Y2tldHMgPSBuZXdCdWNrZXRzOwogIH0KCiAgSGFzaFNldDxFPiBfbmV3U2V0KCkgPT4gbmV3IF9IYXNoU2V0PEU+KCk7CiAgSGFzaFNldDxSPiBfbmV3U2ltaWxhclNldDxSPigpID0+IG5ldyBfSGFzaFNldDxSPigpOwp9CgpjbGFzcyBfSWRlbnRpdHlIYXNoU2V0PEU+IGV4dGVuZHMgX0hhc2hTZXQ8RT4gewogIGludCBfaGFzaENvZGUoZSkgPT4gaWRlbnRpdHlIYXNoQ29kZShlKTsKICBib29sIF9lcXVhbHMoZTEsIGUyKSA9PiBpZGVudGljYWwoZTEsIGUyKTsKCiAgSGFzaFNldDxFPiBfbmV3U2V0KCkgPT4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8RT4oKTsKICBIYXNoU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCkgPT4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8Uj4oKTsKfQoKY2xhc3MgX0N1c3RvbUhhc2hTZXQ8RT4gZXh0ZW5kcyBfSGFzaFNldDxFPiB7CiAgZmluYWwgX0VxdWFsaXR5PEU+IF9lcXVhbGl0eTsKICBmaW5hbCBfSGFzaGVyPEU+IF9oYXNoZXI7CiAgZmluYWwgX1ByZWRpY2F0ZSBfdmFsaWRLZXk7CiAgX0N1c3RvbUhhc2hTZXQodGhpcy5fZXF1YWxpdHksIHRoaXMuX2hhc2hlciwgYm9vbCB2YWxpZEtleShPYmplY3QgbykpCiAgICAgIDogX3ZhbGlkS2V5ID0gKHZhbGlkS2V5ICE9IG51bGwpID8gdmFsaWRLZXkgOiBuZXcgX1R5cGVUZXN0PEU+KCkudGVzdDsKCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmICghX3ZhbGlkS2V5KGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3VwZXIucmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgaWYgKCFfdmFsaWRLZXkoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdXBlci5jb250YWlucyhlbGVtZW50KTsKICB9CgogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoIV92YWxpZEtleShlbGVtZW50KSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gc3VwZXIubG9va3VwKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICBmb3IgKE9iamVjdCBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGlmICghX3ZhbGlkS2V5KGVsZW1lbnQpIHx8ICF0aGlzLmNvbnRhaW5zKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaWYgKF92YWxpZEtleShlbGVtZW50KSkgewogICAgICAgIHN1cGVyLl9yZW1vdmUoZWxlbWVudCwgX2hhc2hlcihlbGVtZW50KSk7CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IF9lcXVhbGl0eShlMSwgZTIpOwogIGludCBfaGFzaENvZGUoZSkgPT4gX2hhc2hlcihlKTsKCiAgSGFzaFNldDxFPiBfbmV3U2V0KCkgPT4gbmV3IF9DdXN0b21IYXNoU2V0PEU+KF9lcXVhbGl0eSwgX2hhc2hlciwgX3ZhbGlkS2V5KTsKICBIYXNoU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCkgPT4gbmV3IF9IYXNoU2V0PFI+KCk7Cn0KCmNsYXNzIF9IYXNoU2V0RW50cnk8RT4gewogIGZpbmFsIEUga2V5OwogIGZpbmFsIGludCBoYXNoQ29kZTsKICBfSGFzaFNldEVudHJ5PEU+IG5leHQ7CiAgX0hhc2hTZXRFbnRyeSh0aGlzLmtleSwgdGhpcy5oYXNoQ29kZSwgdGhpcy5uZXh0KTsKCiAgX0hhc2hTZXRFbnRyeTxFPiByZW1vdmUoKSB7CiAgICBmaW5hbCByZXN1bHQgPSBuZXh0OwogICAgbmV4dCA9IG51bGw7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKY2xhc3MgX0hhc2hTZXRJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBfSGFzaFNldDxFPiBfc2V0OwogIGZpbmFsIGludCBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgaW50IF9pbmRleCA9IDA7CiAgX0hhc2hTZXRFbnRyeTxFPiBfbmV4dDsKICBFIF9jdXJyZW50OwoKICBfSGFzaFNldEl0ZXJhdG9yKHRoaXMuX3NldCkgOiBfbW9kaWZpY2F0aW9uQ291bnQgPSBfc2V0Ll9tb2RpZmljYXRpb25Db3VudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfbW9kaWZpY2F0aW9uQ291bnQgIT0gX3NldC5fbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihfc2V0KTsKICAgIH0KICAgIGlmIChfbmV4dCAhPSBudWxsKSB7CiAgICAgIF9jdXJyZW50ID0gX25leHQua2V5OwogICAgICBfbmV4dCA9IF9uZXh0Lm5leHQ7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgTGlzdDxfSGFzaFNldEVudHJ5PEU+PiBidWNrZXRzID0gX3NldC5fYnVja2V0czsKICAgIHdoaWxlIChfaW5kZXggPCBidWNrZXRzLmxlbmd0aCkgewogICAgICBfbmV4dCA9IGJ1Y2tldHNbX2luZGV4XTsKICAgICAgX2luZGV4ID0gX2luZGV4ICsgMTsKICAgICAgaWYgKF9uZXh0ICE9IG51bGwpIHsKICAgICAgICBfY3VycmVudCA9IF9uZXh0LmtleTsKICAgICAgICBfbmV4dCA9IF9uZXh0Lm5leHQ7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KCi8qKgogKiBBIGhhc2gtYmFzZWQgbWFwIHRoYXQgaXRlcmF0ZXMga2V5cyBhbmQgdmFsdWVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAqIFRoaXMgaXMgbmV2ZXIgYWN0dWFsbHkgaW5zdGFudGlhdGVkIGFueSBtb3JlIC0gdGhlIGNvbnN0cnVjdG9yIGFsd2F5cwogKiByZXR1cm5zIGFuIGluc3RhbmNlIG9mIF9Db21wYWN0TGlua2VkSGFzaE1hcCBvciBfSW50ZXJuYWxMaW5rZWRIYXNoTWFwLAogKiB3aGljaCBkZXNwaXRlIHRoZSBuYW1lcyBkbyBub3QgdXNlIGxpbmtzIChidXQgYXJlIGluc2VydGlvbi1vcmRlcmVkIGFzIGlmCiAqIHRoZXkgZGlkKS4KICovCkBwYXRjaApjbGFzcyBMaW5rZWRIYXNoTWFwPEssIFY+IHsKICBAcGF0Y2gKICBmYWN0b3J5IExpbmtlZEhhc2hNYXAoCiAgICAgIHtib29sIGVxdWFscyhLIGtleTEsIEsga2V5MiksCiAgICAgIGludCBoYXNoQ29kZShLIGtleSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSkgewogICAgaWYgKGlzVmFsaWRLZXkgPT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gbnVsbCkgewogICAgICAgIGlmIChlcXVhbHMgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuYWxMaW5rZWRIYXNoTWFwPEssIFY+KCk7CiAgICAgICAgfQogICAgICAgIGhhc2hDb2RlID0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGlkZW50aXR5SGFzaENvZGUsIGhhc2hDb2RlKSAmJgogICAgICAgICAgICBpZGVudGljYWwoaWRlbnRpY2FsLCBlcXVhbHMpKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwPEssIFY+KCk7CiAgICAgICAgfQogICAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGhhc2hDb2RlID8/PSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgfQogICAgcmV0dXJuIG5ldyBfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hNYXA8SywgVj4oZXF1YWxzLCBoYXNoQ29kZSwgaXNWYWxpZEtleSk7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IExpbmtlZEhhc2hNYXAuaWRlbnRpdHkoKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXA8SywgVj4oKTsKfQoKQHBhdGNoCmNsYXNzIExpbmtlZEhhc2hTZXQ8RT4gewogIEBwYXRjaAogIGZhY3RvcnkgTGlua2VkSGFzaFNldCgKICAgICAge2Jvb2wgZXF1YWxzKEUgZTEsIEUgZTIpLAogICAgICBpbnQgaGFzaENvZGUoRSBlKSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KSB7CiAgICBpZiAoaXNWYWxpZEtleSA9PSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBudWxsKSB7CiAgICAgICAgaWYgKGVxdWFscyA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9Db21wYWN0TGlua2VkSGFzaFNldDxFPigpOwogICAgICAgIH0KICAgICAgICBoYXNoQ29kZSA9IF9kZWZhdWx0SGFzaENvZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChpZGVudGl0eUhhc2hDb2RlLCBoYXNoQ29kZSkgJiYKICAgICAgICAgICAgaWRlbnRpY2FsKGlkZW50aWNhbCwgZXF1YWxzKSkgewogICAgICAgICAgcmV0dXJuIG5ldyBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldDxFPigpOwogICAgICAgIH0KICAgICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBoYXNoQ29kZSA/Pz0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgIH0KICAgIHJldHVybiBuZXcgX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoU2V0PEU+KGVxdWFscywgaGFzaENvZGUsIGlzVmFsaWRLZXkpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBMaW5rZWRIYXNoU2V0LmlkZW50aXR5KCkgPT4gbmV3IF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0PEU+KCk7Cn0KCkBwYXRjaAphYnN0cmFjdCBjbGFzcyBfU3BsYXlUcmVlPEssIE5vZGUgZXh0ZW5kcyBfU3BsYXlUcmVlTm9kZTxLPj4gewogIC8vIFdlIG92ZXJyaWRlIF9zcGxheU1pbiBhbmQgX3NwbGF5TWF4IHRvIG9wdGltaXplIHR5cGUtY2hlY2tzLgogIEBwYXRjaAogIE5vZGUgX3NwbGF5TWluKE5vZGUgbm9kZSkgewogICAgTm9kZSBjdXJyZW50ID0gbm9kZTsKICAgIHdoaWxlIChjdXJyZW50LmxlZnQgIT0gbnVsbCkgewogICAgICBOb2RlIGxlZnQgPSBpbnRlcm5hbC51bnNhZmVDYXN0PE5vZGU+KGN1cnJlbnQubGVm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cmVoYXNoaW5nIG9mIHRoZSBsaW5rZWQgaGFzaG1hcHMgaW4gW29iamVjdHNdLiBXZQovLyBkbyB0aGlzIGVhZ2VybHkgYWZ0ZXIgc25hcHNob3QgZGVzZXJpYWxpemF0aW9uLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfcmVoYXNoT2JqZWN0cyhMaXN0IG9iamVjdHMpIHsKICBmaW5hbCBpbnQgbGVuZ3RoID0gb2JqZWN0cy5sZW5ndGg7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgb2JqZWN0c1tpXS5fcmVnZW5lcmF0ZUluZGV4KCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfSGFzaEZpZWxkQmFzZSB7CiAgLy8gRWFjaCBvY2N1cGllZCBlbnRyeSBpbiBfaW5kZXggaXMgYSBmaXhlZC1zaXplIGludGVnZXIgdGhhdCBlbmNvZGVzIGEgcGFpcjoKICAvLyAgIFsgaGFzaCBwYXR0ZXJuIGZvciBrZXkgfCBpbmRleCBvZiBlbnRyeSBpbiBfZGF0YSBdCiAgLy8gVGhlIGhhc2ggcGF0dGVybiBpcyBiYXNlZCBvbiBoYXNoQ29kZSwgYnV0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm9uLXplcm8uCiAgLy8gVGhlIGxlbmd0aCBvZiBfaW5kZXggaXMgYWx3YXlzIGEgcG93ZXIgb2YgdHdvLCBhbmQgdGhlcmUgaXMgYWx3YXlzIGF0CiAgLy8gbGVhc3Qgb25lIHVub2NjdXBpZWQgZW50cnkuCiAgLy8gTk9URTogV2hlbiBtYXBzIGFyZSBkZXNlcmlhbGl6ZWQsIHRoZWlyIF9pbmRleCBhbmQgX2hhc2hNYXNrIGlzIHJlZ2VuZXJhdGVkCiAgLy8gZWFnZXJseSBieSBfcmVnZW5lcmF0ZUluZGV4LgogIFVpbnQzMkxpc3QgX2luZGV4ID0gbmV3IFVpbnQzMkxpc3QoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUpOwoKICAvLyBDYWNoZWQgaW4tcGxhY2UgbWFzayBmb3IgdGhlIGhhc2ggcGF0dGVybiBjb21wb25lbnQuCiAgaW50IF9oYXNoTWFzayA9IF9IYXNoQmFzZS5faW5kZXhTaXplVG9IYXNoTWFzayhfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7CgogIC8vIEZpeGVkLWxlbmd0aCBsaXN0IG9mIGtleXMgKHNldCkgb3Iga2V5L3ZhbHVlIGF0IGV2ZW4vb2RkIGluZGljZXMgKG1hcCkuCiAgTGlzdCBfZGF0YTsKCiAgLy8gTGVuZ3RoIG9mIF9kYXRhIHRoYXQgaXMgdXNlZCAoaS5lLiwga2V5cyArIHZhbHVlcyBmb3IgYSBtYXApLgogIGludCBfdXNlZERhdGEgPSAwOwoKICAvLyBOdW1iZXIgb2YgZGVsZXRlZCBrZXlzLgogIGludCBfZGVsZXRlZEtleXMgPSAwOwoKICAvLyBOb3RlOiBBbGwgZmllbGRzIGFyZSBpbml0aWFsaXplZCBpbiBhIHNpbmdsZSBjb25zdHJ1Y3RvciBzbyB0aGF0IHRoZSBWTQogIC8vIHJlY29nbml6ZXMgdGhleSBjYW5ub3QgaG9sZCBudWxsIHZhbHVlcy4gVGhpcyBtYWtlcyBhIGJpZyAoMjAlKSBwZXJmb3JtYW5jZQogIC8vIGRpZmZlcmVuY2Ugb24gc29tZSBvcGVyYXRpb25zLgogIF9IYXNoRmllbGRCYXNlKGludCBkYXRhU2l6ZSkgOiB0aGlzLl9kYXRhID0gbmV3IExpc3QoZGF0YVNpemUpOwp9CgovLyBCYXNlIGNsYXNzIGZvciBWTS1pbnRlcm5hbCBjbGFzc2VzOyBrZWVwIGluIHN5bmMgd2l0aCBfSGFzaEZpZWxkQmFzZS4KYWJzdHJhY3QgY2xhc3MgX0hhc2hWTUJhc2UgewogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6dHlwZWRfZGF0YSNfVWludDMyTGlzdCIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgVWludDMyTGlzdCBnZXQgX2luZGV4IG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9nZXRJbmRleCI7CiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXQgX2luZGV4KFVpbnQzMkxpc3QgdmFsdWUpIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9zZXRJbmRleCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IF9oYXNoTWFzayBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfZ2V0SGFzaE1hc2siOwogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0IF9oYXNoTWFzayhpbnQgdmFsdWUpIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9zZXRIYXNoTWFzayI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfTGlzdCIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgTGlzdCBnZXQgX2RhdGEgbmF0aXZlICJMaW5rZWRIYXNoTWFwX2dldERhdGEiOwogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0IF9kYXRhKExpc3QgdmFsdWUpIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9zZXREYXRhIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgX3VzZWREYXRhIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9nZXRVc2VkRGF0YSI7CiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXQgX3VzZWREYXRhKGludCB2YWx1ZSkgbmF0aXZlICJMaW5rZWRIYXNoTWFwX3NldFVzZWREYXRhIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgX2RlbGV0ZWRLZXlzIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9nZXREZWxldGVkS2V5cyI7CiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXQgX2RlbGV0ZWRLZXlzKGludCB2YWx1ZSkgbmF0aXZlICJMaW5rZWRIYXNoTWFwX3NldERlbGV0ZWRLZXlzIjsKfQoKLy8gVGhpcyBtaXhpbiBjYW4gYmUgYXBwbGllZCB0byBfSGFzaEZpZWxkQmFzZSBvciBfSGFzaFZNQmFzZSAoZm9yCi8vIG5vcm1hbCBhbmQgVk0taW50ZXJuYWxpemVkIGNsYXNzZXMsIHJlc3BlY3RpdmVsZXkpLCB3aGljaCBwcm92aWRlIHRoZQovLyBhY3R1YWwgZmllbGRzL2FjY2Vzc29ycyB0aGF0IHRoaXMgbWl4aW4gYXNzdW1lcy4KLy8gVE9ETyhrb2RhKTogQ29uc2lkZXIgbW92aW5nIGZpZWxkIGNvbW1lbnRzIHRvIF9IYXNoRmllbGRCYXNlLgphYnN0cmFjdCBjbGFzcyBfSGFzaEJhc2UgaW1wbGVtZW50cyBfSGFzaFZNQmFzZSB7CiAgLy8gVGhlIG51bWJlciBvZiBiaXRzIHVzZWQgZm9yIGVhY2ggY29tcG9uZW50IGlzIGRldGVybWluZWQgYnkgdGFibGUgc2l6ZS4KICAvLyBUaGUgbGVuZ3RoIG9mIF9pbmRleCBpcyB0d2ljZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gX2RhdGEsIGFuZCBib3RoCiAgLy8gYXJlIGRvdWJsZWQgd2hlbiBfZGF0YSBpcyBmdWxsLiBUaHVzLCBfaW5kZXggd2lsbCBoYXZlIGEgbWF4IGxvYWQgZmFjdG9yCiAgLy8gb2YgMS8yLCB3aGljaCBlbmFibGVzIG9uZSBtb3JlIGJpdCB0byBiZSB1c2VkIGZvciB0aGUgaGFzaC4KICAvLyBUT0RPKGtvZGEpOiBDb25zaWRlciBncm93aW5nIF9kYXRhIGJ5IGZhY3RvciBzcXJ0KDIpLCB0d2ljZSBhcyBvZnRlbi4KICBzdGF0aWMgY29uc3QgaW50IF9JTklUSUFMX0lOREVYX0JJVFMgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfSU5ERVhfU0laRSA9IDEgPDwgKF9JTklUSUFMX0lOREVYX0JJVFMgKyAxKTsKCiAgLy8gVW51c2VkIGFuZCBkZWxldGVkIGVudHJpZXMgYXJlIG1hcmtlZCBieSAwIGFuZCAxLCByZXNwZWN0aXZlbHkuCiAgc3RhdGljIGNvbnN0IGludCBfVU5VU0VEX1BBSVIgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX0RFTEVURURfUEFJUiA9IDE7CgogIC8vIE9uIDMyLWJpdCwgdGhlIHRvcCBiaXRzIGFyZSB3YXN0ZWQgdG8gYXZvaWQgTWludCBhbGxvY2F0aW9uLgogIC8vIFRPRE8oa29kYSk6IFJlY2xhaW0gdGhlIGJpdHMgYnkgbWFraW5nIHRoZSBjb21waWxlciB0cmVhdCBoYXNoIHBhdHRlcm5zCiAgLy8gYXMgdW5zaWduZWQgd29yZHMuCiAgc3RhdGljIGludCBfaW5kZXhTaXplVG9IYXNoTWFzayhpbnQgaW5kZXhTaXplKSB7CiAgICBpbnQgaW5kZXhCaXRzID0gaW5kZXhTaXplLmJpdExlbmd0aCAtIDI7CiAgICByZXR1cm4gaW50ZXJuYWwuaXM2NEJpdAogICAgICAgID8gKDEgPDwgKDMyIC0gaW5kZXhCaXRzKSkgLSAxCiAgICAgICAgOiAoMSA8PCAoMzAgLSBpbmRleEJpdHMpKSAtIDE7CiAgfQoKICBzdGF0aWMgaW50IF9oYXNoUGF0dGVybihpbnQgZnVsbEhhc2gsIGludCBoYXNoTWFzaywgaW50IHNpemUpIHsKICAgIGZpbmFsIGludCBtYXNrZWRIYXNoID0gZnVsbEhhc2ggJiBoYXNoTWFzazsKICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIGtlZXBpbmcgYml0IGxlbmd0aCBhbmQgdXNlIGxlZnQgc2hpZnQuCiAgICByZXR1cm4gKG1hc2tlZEhhc2ggPT0gMCkgPyAoc2l6ZSA+PiAxKSA6IG1hc2tlZEhhc2ggKiAoc2l6ZSA+PiAxKTsKICB9CgogIC8vIExpbmVhciBwcm9iaW5nLgogIHN0YXRpYyBpbnQgX2ZpcnN0UHJvYmUoaW50IGZ1bGxIYXNoLCBpbnQgc2l6ZU1hc2spIHsKICAgIGZpbmFsIGludCBpID0gZnVsbEhhc2ggJiBzaXplTWFzazsKICAgIC8vIExpZ2h0LCBmYXN0IHNodWZmbGUgdG8gbWl0aWdhdGUgYmFkIGhhc2hDb2RlIChlLmcuLCBzZXF1ZW50aWFsKS4KICAgIHJldHVybiAoKGkgPDwgMSkgKyBpKSAmIHNpemVNYXNrOwogIH0KCiAgc3RhdGljIGludCBfbmV4dFByb2JlKGludCBpLCBpbnQgc2l6ZU1hc2spID0+IChpICsgMSkgJiBzaXplTWFzazsKCiAgLy8gQSBzZWxmLWxvb3AgaXMgdXNlZCB0byBtYXJrIGEgZGVsZXRlZCBrZXkgb3IgdmFsdWUuCiAgc3RhdGljIGJvb2wgX2lzRGVsZXRlZChMaXN0IGRhdGEsIE9iamVjdCBrZXlPclZhbHVlKSA9PgogICAgICBpZGVudGljYWwoa2V5T3JWYWx1ZSwgZGF0YSk7CiAgc3RhdGljIHZvaWQgX3NldERlbGV0ZWRBdChMaXN0IGRhdGEsIGludCBkKSB7CiAgICBkYXRhW2RdID0gZGF0YTsKICB9CgogIC8vIENvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGRldGVjdGlvbiByZWxpZXMgb24gdGhpcyBjaGVja3N1bSBtb25vdG9uaWNhbGx5CiAgLy8gaW5jcmVhc2luZyBiZXR3ZWVuIHJlYWxsb2NhdGlvbnMgb2YgX2RhdGEuCiAgaW50IGdldCBfY2hlY2tTdW0gPT4gX3VzZWREYXRhICsgX2RlbGV0ZWRLZXlzOwogIGJvb2wgX2lzTW9kaWZpZWRTaW5jZShMaXN0IG9sZERhdGEsIGludCBvbGRDaGVja1N1bSkgPT4KICAgICAgIWlkZW50aWNhbChfZGF0YSwgb2xkRGF0YSkgfHwgKF9jaGVja1N1bSAhPSBvbGRDaGVja1N1bSk7CgogIGludCBnZXQgbGVuZ3RoOwp9CgpjbGFzcyBfT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZSB7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBlLmhhc2hDb2RlOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IGUxID09IGUyOwp9CgpjbGFzcyBfSWRlbnRpY2FsQW5kSWRlbnRpdHlIYXNoQ29kZSB7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBpZGVudGl0eUhhc2hDb2RlKGUpOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IGlkZW50aWNhbChlMSwgZTIpOwp9CgovLyBWTS1pbnRlcm5hbGl6ZWQgaW1wbGVtZW50YXRpb24gb2YgYSBkZWZhdWx0LWNvbnN0cnVjdGVkIExpbmtlZEhhc2hNYXAuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludGVybmFsTGlua2VkSGFzaE1hcDxLLCBWPiBleHRlbmRzIF9IYXNoVk1CYXNlCiAgICB3aXRoCiAgICAgICAgTWFwTWl4aW48SywgVj4sCiAgICAgICAgX0xpbmtlZEhhc2hNYXBNaXhpbjxLLCBWPiwKICAgICAgICBfSGFzaEJhc2UsCiAgICAgICAgX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGUKICAgIGltcGxlbWVudHMgTGlua2VkSGFzaE1hcDxLLCBWPiB7CiAgX0ludGVybmFsTGlua2VkSGFzaE1hcCgpIHsKICAgIF9pbmRleCA9IG5ldyBVaW50MzJMaXN0KF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFKTsKICAgIF9oYXNoTWFzayA9IF9IYXNoQmFzZS5faW5kZXhTaXplVG9IYXNoTWFzayhfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7CiAgICBfZGF0YSA9IG5ldyBMaXN0KF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFKTsKICAgIF91c2VkRGF0YSA9IDA7CiAgICBfZGVsZXRlZEtleXMgPSAwOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0xpbmtlZEhhc2hNYXBNaXhpbjxLLCBWPiBpbXBsZW1lbnRzIF9IYXNoQmFzZSB7CiAgaW50IF9oYXNoQ29kZShlKTsKICBib29sIF9lcXVhbHMoZTEsIGUyKTsKICBpbnQgZ2V0IF9jaGVja1N1bTsKICBib29sIF9pc01vZGlmaWVkU2luY2UoTGlzdCBvbGREYXRhLCBpbnQgb2xkQ2hlY2tTdW0pOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiAoX3VzZWREYXRhID4+IDEpIC0gX2RlbGV0ZWRLZXlzOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgdm9pZCBfcmVoYXNoKCkgewogICAgaWYgKChfZGVsZXRlZEtleXMgPDwgMikgPiBfdXNlZERhdGEpIHsKICAgICAgLy8gVE9ETyhrb2RhKTogQ29uc2lkZXIgc2hyaW5raW5nLgogICAgICAvLyBUT0RPKGtvZGEpOiBDb25zaWRlciBpbi1wbGFjZSBjb21wYWN0aW9uIGFuZCBtb3JlIGNvc3RseSBDTUUgY2hlY2suCiAgICAgIF9pbml0KF9pbmRleC5sZW5ndGgsIF9oYXNoTWFzaywgX2RhdGEsIF91c2VkRGF0YSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGtvZGEpOiBTdXBwb3J0IDMyLT42NCBiaXQgdHJhbnNpdGlvbiAoYW5kIGFkanVzdCBfaGFzaE1hc2spLgogICAgICBfaW5pdChfaW5kZXgubGVuZ3RoIDw8IDEsIF9oYXNoTWFzayA+PiAxLCBfZGF0YSwgX3VzZWREYXRhKTsKICAgIH0KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoIWlzRW1wdHkpIHsKICAgICAgX2luaXQoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUsIF9oYXNoTWFzaywgbnVsbCwgMCk7CiAgICB9CiAgfQoKICAvLyBBbGxvY2F0ZSBuZXcgX2luZGV4IGFuZCBfZGF0YSwgYW5kIG9wdGlvbmFsbHkgY29weSBleGlzdGluZyBjb250ZW50cy4KICB2b2lkIF9pbml0KGludCBzaXplLCBpbnQgaGFzaE1hc2ssIExpc3Qgb2xkRGF0YSwgaW50IG9sZFVzZWQpIHsKICAgIGFzc2VydChzaXplICYgKHNpemUgLSAxKSA9PSAwKTsKICAgIGFzc2VydChfSGFzaEJhc2UuX1VOVVNFRF9QQUlSID09IDApOwogICAgX2luZGV4ID0gbmV3IFVpbnQzMkxpc3Qoc2l6ZSk7CiAgICBfaGFzaE1hc2sgPSBoYXNoTWFzazsKICAgIF9kYXRhID0gbmV3IExpc3Qoc2l6ZSk7CiAgICBfdXNlZERhdGEgPSAwOwogICAgX2RlbGV0ZWRLZXlzID0gMDsKICAgIGlmIChvbGREYXRhICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRVc2VkOyBpICs9IDIpIHsKICAgICAgICB2YXIga2V5ID0gb2xkRGF0YVtpXTsKICAgICAgICBpZiAoIV9IYXNoQmFzZS5faXNEZWxldGVkKG9sZERhdGEsIGtleSkpIHsKICAgICAgICAgIC8vIFRPRE8oa29kYSk6IFdoaWxlIHRoZXJlIGFyZSBlbm91Z2ggaGFzaCBiaXRzLCBhdm9pZCBoYXNoQ29kZSBjYWxscy4KICAgICAgICAgIHRoaXNba2V5XSA9IG9sZERhdGFbaSArIDFdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IFtfcmVoYXNoT2JqZWN0c10gKHNlZSBhYm92ZSkuCiAgdm9pZCBfcmVnZW5lcmF0ZUluZGV4KCkgewogICAgX2luZGV4ID0gbmV3IFVpbnQzMkxpc3QoX2RhdGEubGVuZ3RoKTsKICAgIGFzc2VydChfaGFzaE1hc2sgPT0gMCk7CiAgICBfaGFzaE1hc2sgPSBfSGFzaEJhc2UuX2luZGV4U2l6ZVRvSGFzaE1hc2soX2luZGV4Lmxlbmd0aCk7CiAgICBmaW5hbCBpbnQgdG1wVXNlZCA9IF91c2VkRGF0YTsKICAgIF91c2VkRGF0YSA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRtcFVzZWQ7IGkgKz0gMikgewogICAgICB0aGlzW19kYXRhW2ldXSA9IF9kYXRhW2kgKyAxXTsKICAgIH0KICB9CgogIHZvaWQgX2luc2VydChLIGtleSwgViB2YWx1ZSwgaW50IGhhc2hQYXR0ZXJuLCBpbnQgaSkgewogICAgaWYgKF91c2VkRGF0YSA9PSBfZGF0YS5sZW5ndGgpIHsKICAgICAgX3JlaGFzaCgpOwogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCgxIDw9IGhhc2hQYXR0ZXJuICYmIGhhc2hQYXR0ZXJuIDwgKDEgPDwgMzIpKTsKICAgICAgZmluYWwgaW50IGluZGV4ID0gX3VzZWREYXRhID4+IDE7CiAgICAgIGFzc2VydCgoaW5kZXggJiBoYXNoUGF0dGVybikgPT0gMCk7CiAgICAgIF9pbmRleFtpXSA9IGhhc2hQYXR0ZXJuIHwgaW5kZXg7CiAgICAgIF9kYXRhW191c2VkRGF0YSsrXSA9IGtleTsKICAgICAgX2RhdGFbX3VzZWREYXRhKytdID0gdmFsdWU7CiAgICB9CiAgfQoKICAvLyBJZiBrZXkgaXMgcHJlc2VudCwgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHZhbHVlIGluIF9kYXRhLCBlbHNlIHJldHVybnMKICAvLyB0aGUgbmVnYXRlZCBpbnNlcnRpb24gcG9pbnQgaW4gX2luZGV4LgogIGludCBfZmluZFZhbHVlT3JJbnNlcnRQb2ludChLIGtleSwgaW50IGZ1bGxIYXNoLCBpbnQgaGFzaFBhdHRlcm4sIGludCBzaXplKSB7CiAgICBmaW5hbCBpbnQgc2l6ZU1hc2sgPSBzaXplIC0gMTsKICAgIGZpbmFsIGludCBtYXhFbnRyaWVzID0gc2l6ZSA+PiAxOwogICAgaW50IGkgPSBfSGFzaEJhc2UuX2ZpcnN0UHJvYmUoZnVsbEhhc2gsIHNpemVNYXNrKTsKICAgIGludCBmaXJzdERlbGV0ZWQgPSAtMTsKICAgIGludCBwYWlyID0gX2luZGV4W2ldOwogICAgd2hpbGUgKHBhaXIgIT0gX0hhc2hCYXNlLl9VTlVTRURfUEFJUikgewogICAgICBpZiAocGFpciA9PSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUikgewogICAgICAgIGlmIChmaXJzdERlbGV0ZWQgPCAwKSB7CiAgICAgICAgICBmaXJzdERlbGV0ZWQgPSBpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmaW5hbCBpbnQgZW50cnkgPSBoYXNoUGF0dGVybiBeIHBhaXI7CiAgICAgICAgaWYgKGVudHJ5IDwgbWF4RW50cmllcykgewogICAgICAgICAgZmluYWwgaW50IGQgPSBlbnRyeSA8PCAxOwogICAgICAgICAgaWYgKF9lcXVhbHMoa2V5LCBfZGF0YVtkXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGQgKyAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpID0gX0hhc2hCYXNlLl9uZXh0UHJvYmUoaSwgc2l6ZU1hc2spOwogICAgICBwYWlyID0gX2luZGV4W2ldOwogICAgfQogICAgcmV0dXJuIGZpcnN0RGVsZXRlZCA+PSAwID8gLWZpcnN0RGVsZXRlZCA6IC1pOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBmdWxsSGFzaCA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgaW50IGhhc2hQYXR0ZXJuID0gX0hhc2hCYXNlLl9oYXNoUGF0dGVybihmdWxsSGFzaCwgX2hhc2hNYXNrLCBzaXplKTsKICAgIGZpbmFsIGludCBkID0gX2ZpbmRWYWx1ZU9ySW5zZXJ0UG9pbnQoa2V5LCBmdWxsSGFzaCwgaGFzaFBhdHRlcm4sIHNpemUpOwogICAgaWYgKGQgPiAwKSB7CiAgICAgIF9kYXRhW2RdID0gdmFsdWU7CiAgICB9IGVsc2UgewogICAgICBmaW5hbCBpbnQgaSA9IC1kOwogICAgICBfaW5zZXJ0KGtleSwgdmFsdWUsIGhhc2hQYXR0ZXJuLCBpKTsKICAgIH0KICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgZmluYWwgaW50IHNpemUgPSBfaW5kZXgubGVuZ3RoOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgZmluYWwgaW50IGQgPSBfZmluZFZhbHVlT3JJbnNlcnRQb2ludChrZXksIGZ1bGxIYXNoLCBoYXNoUGF0dGVybiwgc2l6ZSk7CiAgICBpZiAoZCA+IDApIHsKICAgICAgcmV0dXJuIF9kYXRhW2RdOwogICAgfQogICAgLy8gJ2lmQWJzZW50JyBpcyBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgbWFwLgogICAgTGlzdCBvbGREYXRhID0gX2RhdGE7CiAgICBpbnQgb2xkQ2hlY2tTdW0gPSBfY2hlY2tTdW07CiAgICBWIHZhbHVlID0gaWZBYnNlbnQoKTsKICAgIGlmIChfaXNNb2RpZmllZFNpbmNlKG9sZERhdGEsIG9sZENoZWNrU3VtKSkgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsIGludCBpID0gLWQ7CiAgICAgIF9pbnNlcnQoa2V5LCB2YWx1ZSwgaGFzaFBhdHRlcm4sIGkpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgViByZW1vdmUoT2JqZWN0IGtleSkgewogICAgZmluYWwgaW50IHNpemUgPSBfaW5kZXgubGVuZ3RoOwogICAgZmluYWwgaW50IHNpemVNYXNrID0gc2l6ZSAtIDE7CiAgICBmaW5hbCBpbnQgbWF4RW50cmllcyA9IHNpemUgPj4gMTsKICAgIGZpbmFsIGludCBmdWxsSGFzaCA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgaW50IGhhc2hQYXR0ZXJuID0gX0hhc2hCYXNlLl9oYXNoUGF0dGVybihmdWxsSGFzaCwgX2hhc2hNYXNrLCBzaXplKTsKICAgIGludCBpID0gX0hhc2hCYXNlLl9maXJzdFByb2JlKGZ1bGxIYXNoLCBzaXplTWFzayk7CiAgICBpbnQgcGFpciA9IF9pbmRleFtpXTsKICAgIHdoaWxlIChwYWlyICE9IF9IYXNoQmFzZS5fVU5VU0VEX1BBSVIpIHsKICAgICAgaWYgKHBhaXIgIT0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVIpIHsKICAgICAgICBmaW5hbCBpbnQgZW50cnkgPSBoYXNoUGF0dGVybiBeIHBhaXI7CiAgICAgICAgaWYgKGVudHJ5IDwgbWF4RW50cmllcykgewogICAgICAgICAgZmluYWwgaW50IGQgPSBlbnRyeSA8PCAxOwogICAgICAgICAgaWYgKF9lcXVhbHMoa2V5LCBfZGF0YVtkXSkpIHsKICAgICAgICAgICAgX2luZGV4W2ldID0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVI7CiAgICAgICAgICAgIF9IYXNoQmFzZS5fc2V0RGVsZXRlZEF0KF9kYXRhLCBkKTsKICAgICAgICAgICAgViB2YWx1ZSA9IF9kYXRhW2QgKyAxXTsKICAgICAgICAgICAgX0hhc2hCYXNlLl9zZXREZWxldGVkQXQoX2RhdGEsIGQgKyAxKTsKICAgICAgICAgICAgKytfZGVsZXRlZEtleXM7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaSA9IF9IYXNoQmFzZS5fbmV4dFByb2JlKGksIHNpemVNYXNrKTsKICAgICAgcGFpciA9IF9pbmRleFtpXTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gSWYga2V5IGlzIGFic2VudCwgcmV0dXJuIF9kYXRhICh3aGljaCBpcyBuZXZlciBhIHZhbHVlKS4KICBPYmplY3QgX2dldFZhbHVlT3JEYXRhKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBzaXplTWFzayA9IHNpemUgLSAxOwogICAgZmluYWwgaW50IG1heEVudHJpZXMgPSBzaXplID4+IDE7CiAgICBmaW5hbCBpbnQgZnVsbEhhc2ggPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGludCBoYXNoUGF0dGVybiA9IF9IYXNoQmFzZS5faGFzaFBhdHRlcm4oZnVsbEhhc2gsIF9oYXNoTWFzaywgc2l6ZSk7CiAgICBpbnQgaSA9IF9IYXNoQmFzZS5fZmlyc3RQcm9iZShmdWxsSGFzaCwgc2l6ZU1hc2spOwogICAgaW50IHBhaXIgPSBfaW5kZXhbaV07CiAgICB3aGlsZSAocGFpciAhPSBfSGFzaEJhc2UuX1VOVVNFRF9QQUlSKSB7CiAgICAgIGlmIChwYWlyICE9IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSKSB7CiAgICAgICAgZmluYWwgaW50IGVudHJ5ID0gaGFzaFBhdHRlcm4gXiBwYWlyOwogICAgICAgIGlmIChlbnRyeSA8IG1heEVudHJpZXMpIHsKICAgICAgICAgIGZpbmFsIGludCBkID0gZW50cnkgPDwgMTsKICAgICAgICAgIGlmIChfZXF1YWxzKGtleSwgX2RhdGFbZF0pKSB7CiAgICAgICAgICAgIHJldHVybiBfZGF0YVtkICsgMV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGkgPSBfSGFzaEJhc2UuX25leHRQcm9iZShpLCBzaXplTWFzayk7CiAgICAgIHBhaXIgPSBfaW5kZXhbaV07CiAgICB9CiAgICByZXR1cm4gX2RhdGE7CiAgfQoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+ICFpZGVudGljYWwoX2RhdGEsIF9nZXRWYWx1ZU9yRGF0YShrZXkpKTsKCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICB2YXIgdiA9IF9nZXRWYWx1ZU9yRGF0YShrZXkpOwogICAgcmV0dXJuIGlkZW50aWNhbChfZGF0YSwgdikgPyBudWxsIDogaW50ZXJuYWwudW5zYWZlQ2FzdDxWPih2KTsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZvciAodmFyIHYgaW4gdmFsdWVzKSB7CiAgICAgIC8vIFNwZWMuIHNheXMgdGhpcyBzaG91bGQgYWx3YXlzIHVzZSAiPT0iLCBhbHNvIGZvciBpZGVudGl0eSBtYXBzLCBldGMuCiAgICAgIGlmICh2ID09IHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB2YXIga2kgPSBrZXlzLml0ZXJhdG9yOwogICAgdmFyIHZpID0gdmFsdWVzLml0ZXJhdG9yOwogICAgd2hpbGUgKGtpLm1vdmVOZXh0KCkpIHsKICAgICAgdmkubW92ZU5leHQoKTsKICAgICAgZihraS5jdXJyZW50LCB2aS5jdXJyZW50KTsKICAgIH0KICB9CgogIEl0ZXJhYmxlPEs+IGdldCBrZXlzID0+CiAgICAgIG5ldyBfQ29tcGFjdEl0ZXJhYmxlPEs+KHRoaXMsIF9kYXRhLCBfdXNlZERhdGEsIC0yLCAyKTsKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+CiAgICAgIG5ldyBfQ29tcGFjdEl0ZXJhYmxlPFY+KHRoaXMsIF9kYXRhLCBfdXNlZERhdGEsIC0xLCAyKTsKfQoKY2xhc3MgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXA8SywgVj4gZXh0ZW5kcyBfSGFzaEZpZWxkQmFzZQogICAgd2l0aAogICAgICAgIE1hcE1peGluPEssIFY+LAogICAgICAgIF9MaW5rZWRIYXNoTWFwTWl4aW48SywgVj4sCiAgICAgICAgX0hhc2hCYXNlLAogICAgICAgIF9JZGVudGljYWxBbmRJZGVudGl0eUhhc2hDb2RlCiAgICBpbXBsZW1lbnRzIExpbmtlZEhhc2hNYXA8SywgVj4gewogIF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwKCkgOiBzdXBlcihfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7Cn0KCmNsYXNzIF9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcDxLLCBWPiBleHRlbmRzIF9IYXNoRmllbGRCYXNlCiAgICB3aXRoIE1hcE1peGluPEssIFY+LCBfTGlua2VkSGFzaE1hcE1peGluPEssIFY+LCBfSGFzaEJhc2UKICAgIGltcGxlbWVudHMgTGlua2VkSGFzaE1hcDxLLCBWPiB7CiAgZmluYWwgX2VxdWFsaXR5OwogIGZpbmFsIF9oYXNoZXI7CiAgZmluYWwgX3ZhbGlkS2V5OwoKICAvLyBUT0RPKGtvZGEpOiBBc2sgZ2JyYWNoYSB3aHkgSSBjYW5ub3QgaGF2ZSBmaWVsZHMgX2VxdWFscy9faGFzaENvZGUuCiAgaW50IF9oYXNoQ29kZShlKSA9PiBfaGFzaGVyKGUpOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IF9lcXVhbGl0eShlMSwgZTIpOwoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBvKSA9PiBfdmFsaWRLZXkobykgPyBzdXBlci5jb250YWluc0tleShvKSA6IGZhbHNlOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IG8pID0+IF92YWxpZEtleShvKSA/IHN1cGVyW29dIDogbnVsbDsKICBWIHJlbW92ZShPYmplY3QgbykgPT4gX3ZhbGlkS2V5KG8pID8gc3VwZXIucmVtb3ZlKG8pIDogbnVsbDsKCiAgX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoTWFwKHRoaXMuX2VxdWFsaXR5LCB0aGlzLl9oYXNoZXIsIHZhbGlkS2V5KQogICAgICA6IF92YWxpZEtleSA9ICh2YWxpZEtleSAhPSBudWxsKSA/IHZhbGlkS2V5IDogbmV3IF9UeXBlVGVzdDxLPigpLnRlc3QsCiAgICAgICAgc3VwZXIoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUpOwp9CgovLyBJdGVyYXRlcyB0aHJvdWdoIF9kYXRhW19vZmZzZXQgKyBfc3RlcF0sIF9kYXRhW19vZmZzZXQgKyAyKl9zdGVwXSwgLi4uCi8vIGFuZCBjaGVja3MgZm9yIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uLgpjbGFzcyBfQ29tcGFjdEl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIF9IYXNoQmFzZSBfdGFibGU7CiAgZmluYWwgTGlzdCBfZGF0YTsKICBmaW5hbCBpbnQgX2xlbjsKICBmaW5hbCBpbnQgX29mZnNldDsKICBmaW5hbCBpbnQgX3N0ZXA7CgogIF9Db21wYWN0SXRlcmFibGUoCiAgICAgIHRoaXMuX3RhYmxlLCB0aGlzLl9kYXRhLCB0aGlzLl9sZW4sIHRoaXMuX29mZnNldCwgdGhpcy5fc3RlcCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PgogICAgICBuZXcgX0NvbXBhY3RJdGVyYXRvcjxFPihfdGFibGUsIF9kYXRhLCBfbGVuLCBfb2Zmc2V0LCBfc3RlcCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF90YWJsZS5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5Owp9CgpjbGFzcyBfQ29tcGFjdEl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIF9IYXNoQmFzZSBfdGFibGU7CiAgZmluYWwgTGlzdCBfZGF0YTsKICBmaW5hbCBpbnQgX2xlbjsKICBpbnQgX29mZnNldDsKICBmaW5hbCBpbnQgX3N0ZXA7CiAgZmluYWwgaW50IF9jaGVja1N1bTsKICBFIGN1cnJlbnQ7CgogIF9Db21wYWN0SXRlcmF0b3IoCiAgICAgIF9IYXNoQmFzZSB0YWJsZSwgdGhpcy5fZGF0YSwgdGhpcy5fbGVuLCB0aGlzLl9vZmZzZXQsIHRoaXMuX3N0ZXApCiAgICAgIDogX3RhYmxlID0gdGFibGUsCiAgICAgICAgX2NoZWNrU3VtID0gdGFibGUuX2NoZWNrU3VtOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF90YWJsZS5faXNNb2RpZmllZFNpbmNlKF9kYXRhLCBfY2hlY2tTdW0pKSB7CiAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX3RhYmxlKTsKICAgIH0KICAgIGRvIHsKICAgICAgX29mZnNldCArPSBfc3RlcDsKICAgIH0gd2hpbGUgKF9vZmZzZXQgPCBfbGVuICYmIF9IYXNoQmFzZS5faXNEZWxldGVkKF9kYXRhLCBfZGF0YVtfb2Zmc2V0XSkpOwogICAgaWYgKF9vZmZzZXQgPCBfbGVuKSB7CiAgICAgIGN1cnJlbnQgPSBpbnRlcm5hbC51bnNhZmVDYXN0PEU+KF9kYXRhW19vZmZzZXRdKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICBjdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKLy8gU2V0IGltcGxlbWVudGF0aW9uLCBhbmFsb2dvdXMgdG8gX0NvbXBhY3RMaW5rZWRIYXNoTWFwLgpjbGFzcyBfQ29tcGFjdExpbmtlZEhhc2hTZXQ8RT4gZXh0ZW5kcyBfSGFzaEZpZWxkQmFzZQogICAgd2l0aCBfSGFzaEJhc2UsIF9PcGVyYXRvckVxdWFsc0FuZEhhc2hDb2RlLCBTZXRNaXhpbjxFPgogICAgaW1wbGVtZW50cyBMaW5rZWRIYXNoU2V0PEU+IHsKICBfQ29tcGFjdExpbmtlZEhhc2hTZXQoKSA6IHN1cGVyKF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFID4+IDEpIHsKICAgIGFzc2VydChfSGFzaEJhc2UuX1VOVVNFRF9QQUlSID09IDApOwogIH0KCiAgc3RhdGljIFNldDxSPiBfbmV3RW1wdHk8Uj4oKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PFI+KCk7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMsIG5ld1NldDogX25ld0VtcHR5KTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfdXNlZERhdGEgLSBfZGVsZXRlZEtleXM7CgogIEUgZ2V0IGZpcnN0IHsKICAgIGZvciAoaW50IG9mZnNldCA9IDA7IG9mZnNldCA8IF91c2VkRGF0YTsgb2Zmc2V0KyspIHsKICAgICAgT2JqZWN0IGN1cnJlbnQgPSBfZGF0YVtvZmZzZXRdOwogICAgICBpZiAoIV9IYXNoQmFzZS5faXNEZWxldGVkKF9kYXRhLCBjdXJyZW50KSkgewogICAgICAgIHJldHVybiBjdXJyZW50OwogICAgICB9CiAgICB9CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgZm9yIChpbnQgb2Zmc2V0ID0gX3VzZWREYXRhIC0gMTsgb2Zmc2V0ID49IDA7IG9mZnNldC0tKSB7CiAgICAgIE9iamVjdCBjdXJyZW50ID0gX2RhdGFbb2Zmc2V0XTsKICAgICAgaWYgKCFfSGFzaEJhc2UuX2lzRGVsZXRlZChfZGF0YSwgY3VycmVudCkpIHsKICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgfQogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICB2b2lkIF9yZWhhc2goKSB7CiAgICBpZiAoKF9kZWxldGVkS2V5cyA8PCAxKSA+IF91c2VkRGF0YSkgewogICAgICBfaW5pdChfaW5kZXgubGVuZ3RoLCBfaGFzaE1hc2ssIF9kYXRhLCBfdXNlZERhdGEpOwogICAgfSBlbHNlIHsKICAgICAgX2luaXQoX2luZGV4Lmxlbmd0aCA8PCAxLCBfaGFzaE1hc2sgPj4gMSwgX2RhdGEsIF91c2VkRGF0YSk7CiAgICB9CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKCFpc0VtcHR5KSB7CiAgICAgIF9pbml0KF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFLCBfaGFzaE1hc2ssIG51bGwsIDApOwogICAgfQogIH0KCiAgdm9pZCBfaW5pdChpbnQgc2l6ZSwgaW50IGhhc2hNYXNrLCBMaXN0IG9sZERhdGEsIGludCBvbGRVc2VkKSB7CiAgICBfaW5kZXggPSBuZXcgVWludDMyTGlzdChzaXplKTsKICAgIF9oYXNoTWFzayA9IGhhc2hNYXNrOwogICAgX2RhdGEgPSBuZXcgTGlzdChzaXplID4+IDEpOwogICAgX3VzZWREYXRhID0gMDsKICAgIF9kZWxldGVkS2V5cyA9IDA7CiAgICBpZiAob2xkRGF0YSAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2xkVXNlZDsgaSArPSAxKSB7CiAgICAgICAgdmFyIGtleSA9IG9sZERhdGFbaV07CiAgICAgICAgaWYgKCFfSGFzaEJhc2UuX2lzRGVsZXRlZChvbGREYXRhLCBrZXkpKSB7CiAgICAgICAgICBhZGQoa2V5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgYWRkKEUga2V5KSB7CiAgICBmaW5hbCBpbnQgc2l6ZSA9IF9pbmRleC5sZW5ndGg7CiAgICBmaW5hbCBpbnQgc2l6ZU1hc2sgPSBzaXplIC0gMTsKICAgIGZpbmFsIGludCBtYXhFbnRyaWVzID0gc2l6ZSA+PiAxOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgaW50IGkgPSBfSGFzaEJhc2UuX2ZpcnN0UHJvYmUoZnVsbEhhc2gsIHNpemVNYXNrKTsKICAgIGludCBmaXJzdERlbGV0ZWQgPSAtMTsKICAgIGludCBwYWlyID0gX2luZGV4W2ldOwogICAgd2hpbGUgKHBhaXIgIT0gX0hhc2hCYXNlLl9VTlVTRURfUEFJUikgewogICAgICBpZiAocGFpciA9PSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUikgewogICAgICAgIGlmIChmaXJzdERlbGV0ZWQgPCAwKSB7CiAgICAgICAgICBmaXJzdERlbGV0ZWQgPSBpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmaW5hbCBpbnQgZCA9IGhhc2hQYXR0ZXJuIF4gcGFpcjsKICAgICAgICBpZiAoZCA8IG1heEVudHJpZXMgJiYgX2VxdWFscyhrZXksIF9kYXRhW2RdKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBpID0gX0hhc2hCYXNlLl9uZXh0UHJvYmUoaSwgc2l6ZU1hc2spOwogICAgICBwYWlyID0gX2luZGV4W2ldOwogICAgfQogICAgaWYgKF91c2VkRGF0YSA9PSBfZGF0YS5sZW5ndGgpIHsKICAgICAgX3JlaGFzaCgpOwogICAgICBhZGQoa2V5KTsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsIGludCBpbnNlcnRpb25Qb2ludCA9IChmaXJzdERlbGV0ZWQgPj0gMCkgPyBmaXJzdERlbGV0ZWQgOiBpOwogICAgICBhc3NlcnQoMSA8PSBoYXNoUGF0dGVybiAmJiBoYXNoUGF0dGVybiA8ICgxIDw8IDMyKSk7CiAgICAgIGFzc2VydCgoaGFzaFBhdHRlcm4gJiBfdXNlZERhdGEpID09IDApOwogICAgICBfaW5kZXhbaW5zZXJ0aW9uUG9pbnRdID0gaGFzaFBhdHRlcm4gfCBfdXNlZERhdGE7CiAgICAgIF9kYXRhW191c2VkRGF0YSsrXSA9IGtleTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gSWYga2V5IGlzIGFic2VudCwgcmV0dXJuIF9kYXRhICh3aGljaCBpcyBuZXZlciBhIHZhbHVlKS4KICBPYmplY3QgX2dldEtleU9yRGF0YShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBpbnQgc2l6ZSA9IF9pbmRleC5sZW5ndGg7CiAgICBmaW5hbCBpbnQgc2l6ZU1hc2sgPSBzaXplIC0gMTsKICAgIGZpbmFsIGludCBtYXhFbnRyaWVzID0gc2l6ZSA+PiAxOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgaW50IGkgPSBfSGFzaEJhc2UuX2ZpcnN0UHJvYmUoZnVsbEhhc2gsIHNpemVNYXNrKTsKICAgIGludCBwYWlyID0gX2luZGV4W2ldOwogICAgd2hpbGUgKHBhaXIgIT0gX0hhc2hCYXNlLl9VTlVTRURfUEFJUikgewogICAgICBpZiAocGFpciAhPSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUikgewogICAgICAgIGZpbmFsIGludCBkID0gaGFzaFBhdHRlcm4gXiBwYWlyOwogICAgICAgIGlmIChkIDwgbWF4RW50cmllcyAmJiBfZXF1YWxzKGtleSwgX2RhdGFbZF0pKSB7CiAgICAgICAgICByZXR1cm4gX2RhdGFbZF07IC8vIE5vdGU6IE11c3QgcmV0dXJuIHRoZSBleGlzdGluZyBrZXkuCiAgICAgICAgfQogICAgICB9CiAgICAgIGkgPSBfSGFzaEJhc2UuX25leHRQcm9iZShpLCBzaXplTWFzayk7CiAgICAgIHBhaXIgPSBfaW5kZXhbaV07CiAgICB9CiAgICByZXR1cm4gX2RhdGE7CiAgfQoKICBFIGxvb2t1cChPYmplY3Qga2V5KSB7CiAgICB2YXIgayA9IF9nZXRLZXlPckRhdGEoa2V5KTsKICAgIHJldHVybiBpZGVudGljYWwoX2RhdGEsIGspID8gbnVsbCA6IGs7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBrZXkpID0+ICFpZGVudGljYWwoX2RhdGEsIF9nZXRLZXlPckRhdGEoa2V5KSk7CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBzaXplTWFzayA9IHNpemUgLSAxOwogICAgZmluYWwgaW50IG1heEVudHJpZXMgPSBzaXplID4+IDE7CiAgICBmaW5hbCBpbnQgZnVsbEhhc2ggPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGludCBoYXNoUGF0dGVybiA9IF9IYXNoQmFzZS5faGFzaFBhdHRlcm4oZnVsbEhhc2gsIF9oYXNoTWFzaywgc2l6ZSk7CiAgICBpbnQgaSA9IF9IYXNoQmFzZS5fZmlyc3RQcm9iZShmdWxsSGFzaCwgc2l6ZU1hc2spOwogICAgaW50IHBhaXIgPSBfaW5kZXhbaV07CiAgICB3aGlsZSAocGFpciAhPSBfSGFzaEJhc2UuX1VOVVNFRF9QQUlSKSB7CiAgICAgIGlmIChwYWlyICE9IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSKSB7CiAgICAgICAgZmluYWwgaW50IGQgPSBoYXNoUGF0dGVybiBeIHBhaXI7CiAgICAgICAgaWYgKGQgPCBtYXhFbnRyaWVzICYmIF9lcXVhbHMoa2V5LCBfZGF0YVtkXSkpIHsKICAgICAgICAgIF9pbmRleFtpXSA9IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSOwogICAgICAgICAgX0hhc2hCYXNlLl9zZXREZWxldGVkQXQoX2RhdGEsIGQpOwogICAgICAgICAgKytfZGVsZXRlZEtleXM7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaSA9IF9IYXNoQmFzZS5fbmV4dFByb2JlKGksIHNpemVNYXNrKTsKICAgICAgcGFpciA9IF9pbmRleFtpXTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PgogICAgICBuZXcgX0NvbXBhY3RJdGVyYXRvcjxFPih0aGlzLCBfZGF0YSwgX3VzZWREYXRhLCAtMSwgMSk7CgogIC8vIFJldHVybnMgYSBzZXQgb2YgdGhlIHNhbWUgdHlwZSwgYWx0aG91Z2ggdGhpcwogIC8vIGlzIG5vdCByZXF1aXJlZCBieSB0aGUgc3BlYy4gKEZvciBpbnN0YW5jZSwgYWx3YXlzIHVzaW5nIGFuIGlkZW50aXR5IHNldAogIC8vIHdvdWxkIGJlIHRlY2huaWNhbGx5IGNvcnJlY3QsIGFsYmVpdCBzdXJwcmlzaW5nLikKICBTZXQ8RT4gdG9TZXQoKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PEU+KCkuLmFkZEFsbCh0aGlzKTsKCiAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IFtfcmVoYXNoT2JqZWN0c10gKHNlZSBhYm92ZSkuCiAgdm9pZCBfcmVnZW5lcmF0ZUluZGV4KCkgewogICAgX3JlaGFzaCgpOwogIH0KfQoKY2xhc3MgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hTZXQ8RT4gZXh0ZW5kcyBfQ29tcGFjdExpbmtlZEhhc2hTZXQ8RT4KICAgIHdpdGggX0lkZW50aWNhbEFuZElkZW50aXR5SGFzaENvZGUgewogIFNldDxFPiB0b1NldCgpID0+IG5ldyBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldDxFPigpLi5hZGRBbGwodGhpcyk7CgogIHN0YXRpYyBTZXQ8Uj4gX25ld0VtcHR5PFI+KCkgPT4gbmV3IF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0PFI+KCk7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMsIG5ld1NldDogX25ld0VtcHR5KTsKfQoKY2xhc3MgX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoU2V0PEU+IGV4dGVuZHMgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PEU+IHsKICBmaW5hbCBfZXF1YWxpdHk7CiAgZmluYWwgX2hhc2hlcjsKICBmaW5hbCBfdmFsaWRLZXk7CgogIGludCBfaGFzaENvZGUoZSkgPT4gX2hhc2hlcihlKTsKICBib29s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cGVyYXRvcltdPWAsIGByZW1vdmVgIGFuZCBgY2xlYXJgLgovLy8gVGhlIHJlbWFpbmluZyBvcGVyYXRpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiB0aGVzZSBmaXZlLgovLy8KLy8vIFRoZSBga2V5c2AgaXRlcmFibGUgc2hvdWxkIGhhdmUgZWZmaWNpZW50IFtJdGVyYWJsZS5sZW5ndGhdIGFuZAovLy8gW0l0ZXJhYmxlLmNvbnRhaW5zXSBvcGVyYXRpb25zLCBhbmQgaXQgc2hvdWxkIGNhdGNoIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucwovLy8gb2YgdGhlIGtleXMgd2hpbGUgaXRlcmF0aW5nLgovLy8KLy8vIEEgbW9yZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gaXMgdXN1YWxseSBwb3NzaWJsZSBieSBvdmVycmlkaW5nCi8vLyBzb21lIG9mIHRoZSBvdGhlciBtZW1iZXJzIGFzIHdlbGwuCmFic3RyYWN0IGNsYXNzIE1hcEJhc2U8SywgVj4gZXh0ZW5kcyBNYXBNaXhpbjxLLCBWPiB7CiAgc3RhdGljIFN0cmluZyBtYXBUb1N0cmluZyhNYXAgbSkgewogICAgLy8gUmV1c2VzIHRoZSBsaXN0IGluIEl0ZXJhYmxlQmFzZSBmb3IgZGV0ZWN0aW5nIHRvU3RyaW5nIGN5Y2xlcy4KICAgIGlmIChfaXNUb1N0cmluZ1Zpc2l0aW5nKG0pKSB7CiAgICAgIHJldHVybiAney4uLn0nOwogICAgfQoKICAgIHZhciByZXN1bHQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIHRyeSB7CiAgICAgIF90b1N0cmluZ1Zpc2l0aW5nLmFkZChtKTsKICAgICAgcmVzdWx0LndyaXRlKCd7Jyk7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBtLmZvckVhY2goKGssIHYpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICByZXN1bHQud3JpdGUoJywgJyk7CiAgICAgICAgfQogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgcmVzdWx0LndyaXRlKGspOwogICAgICAgIHJlc3VsdC53cml0ZSgnOiAnKTsKICAgICAgICByZXN1bHQud3JpdGUodik7CiAgICAgIH0pOwogICAgICByZXN1bHQud3JpdGUoJ30nKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGFzc2VydChpZGVudGljYWwoX3RvU3RyaW5nVmlzaXRpbmcubGFzdCwgbSkpOwogICAgICBfdG9TdHJpbmdWaXNpdGluZy5yZW1vdmVMYXN0KCk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIF9pZCh4KSA9PiB4OwoKICAvLy8gRmlsbHMgYSBbTWFwXSB3aXRoIGtleS92YWx1ZSBwYWlycyBjb21wdXRlZCBmcm9tIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgW01hcF0gY2xhc3NlcyBpbiB0aGUgbmFtZWQgY29uc3RydWN0b3IKICAvLy8gYGZyb21JdGVyYWJsZWAuCiAgc3RhdGljIHZvaWQgX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUoCiAgICAgIE1hcCBtYXAsIEl0ZXJhYmxlIGl0ZXJhYmxlLCBrZXkoZWxlbWVudCksIHZhbHVlKGVsZW1lbnQpKSB7CiAgICBrZXkgPz89IF9pZDsKICAgIHZhbHVlID8/PSBfaWQ7CgogICAgZm9yICh2YXIgZWxlbWVudCBpbiBpdGVyYWJsZSkgewogICAgICBtYXBba2V5KGVsZW1lbnQpXSA9IHZhbHVlKGVsZW1lbnQpOwogICAgfQogIH0KCiAgLy8vIEZpbGxzIGEgbWFwIGJ5IGFzc29jaWF0aW5nIHRoZSBba2V5c10gdG8gW3ZhbHVlc10uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgW01hcF0gY2xhc3NlcyBpbiB0aGUgbmFtZWQgY29uc3RydWN0b3IKICAvLy8gYGZyb21JdGVyYWJsZXNgLgogIHN0YXRpYyB2b2lkIF9maWxsTWFwV2l0aEl0ZXJhYmxlcyhNYXAgbWFwLCBJdGVyYWJsZSBrZXlzLCBJdGVyYWJsZSB2YWx1ZXMpIHsKICAgIEl0ZXJhdG9yIGtleUl0ZXJhdG9yID0ga2V5cy5pdGVyYXRvcjsKICAgIEl0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSB2YWx1ZXMuaXRlcmF0b3I7CgogICAgYm9vbCBoYXNOZXh0S2V5ID0ga2V5SXRlcmF0b3IubW92ZU5leHQoKTsKICAgIGJvb2wgaGFzTmV4dFZhbHVlID0gdmFsdWVJdGVyYXRvci5tb3ZlTmV4dCgpOwoKICAgIHdoaWxlIChoYXNOZXh0S2V5ICYmIGhhc05leHRWYWx1ZSkgewogICAgICBtYXBba2V5SXRlcmF0b3IuY3VycmVudF0gPSB2YWx1ZUl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIGhhc05leHRLZXkgPSBrZXlJdGVyYXRvci5tb3ZlTmV4dCgpOwogICAgICBoYXNOZXh0VmFsdWUgPSB2YWx1ZUl0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICB9CgogICAgaWYgKGhhc05leHRLZXkgfHwgaGFzTmV4dFZhbHVlKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIkl0ZXJhYmxlcyBkbyBub3QgaGF2ZSBzYW1lIGxlbmd0aC4iKTsKICAgIH0KICB9Cn0KCi8vLyBNaXhpbiBpbXBsZW1lbnRpbmcgYSBbTWFwXS4KLy8vCi8vLyBUaGlzIG1peGluIGhhcyBhIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGFsbCBidXQgZml2ZSBvZiB0aGUgbWVtYmVycyBvZgovLy8gW01hcF0uCi8vLyBBIGJhc2ljIGBNYXBgIGNsYXNzIGNhbiBiZSBpbXBsZW1lbnRlZCBieSBtaXhpbiBpbiB0aGlzIGNsYXNzIGFuZAovLy8gaW1wbGVtZW50aW5nIGBrZXlzYCwgYG9wZXJhdG9yW11gLCBgb3BlcmF0b3JbXT1gLCBgcmVtb3ZlYCBhbmQgYGNsZWFyYC4KLy8vIFRoZSByZW1haW5pbmcgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgdGhlc2UgZml2ZS4KLy8vCi8vLyBUaGUgYGtleXNgIGl0ZXJhYmxlIHNob3VsZCBoYXZlIGVmZmljaWVudCBbSXRlcmFibGUubGVuZ3RoXSBhbmQKLy8vIFtJdGVyYWJsZS5jb250YWluc10gb3BlcmF0aW9ucywgYW5kIGl0IHNob3VsZCBjYXRjaCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMKLy8vIG9mIHRoZSBrZXlzIHdoaWxlIGl0ZXJhdGluZy4KLy8vCi8vLyBBIG1vcmUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIGlzIHVzdWFsbHkgcG9zc2libGUgYnkgb3ZlcnJpZGluZwovLy8gc29tZSBvZiB0aGUgb3RoZXIgbWVtYmVycyBhcyB3ZWxsLgphYnN0cmFjdCBjbGFzcyBNYXBNaXhpbjxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgSXRlcmFibGU8Sz4gZ2V0IGtleXM7CiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KTsKICBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpOwogIFYgcmVtb3ZlKE9iamVjdCBrZXkpOwogIC8vIFRoZSBgY2xlYXJgIG9wZXJhdGlvbiBzaG91bGQgbm90IGJlIGJhc2VkIG9uIGByZW1vdmVgLgogIC8vIEl0IHNob3VsZCBjbGVhciB0aGUgbWFwIGV2ZW4gaWYgc29tZSBrZXlzIGFyZSBub3QgZXF1YWwgdG8gdGhlbXNlbHZlcy4KICB2b2lkIGNsZWFyKCk7CgogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+IE1hcC5jYXN0RnJvbTxLLCBWLCBSSywgUlY+KHRoaXMpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIGZvciAoSyBrZXkgaW4ga2V5cykgewogICAgICBhY3Rpb24oa2V5LCB0aGlzW2tleV0pOwogICAgfQogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBmb3IgKEsga2V5IGluIG90aGVyLmtleXMpIHsKICAgICAgdGhpc1trZXldID0gb3RoZXJba2V5XTsKICAgIH0KICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZvciAoSyBrZXkgaW4ga2V5cykgewogICAgICBpZiAodGhpc1trZXldID09IHZhbHVlKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgaWYgKGNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgcmV0dXJuIHRoaXNba2V5XTsKICAgIH0KICAgIHJldHVybiB0aGlzW2tleV0gPSBpZkFic2VudCgpOwogIH0KCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgewogICAgaWYgKHRoaXMuY29udGFpbnNLZXkoa2V5KSkgewogICAgICByZXR1cm4gdGhpc1trZXldID0gdXBkYXRlKHRoaXNba2V5XSk7CiAgICB9CiAgICBpZiAoaWZBYnNlbnQgIT0gbnVsbCkgewogICAgICByZXR1cm4gdGhpc1trZXldID0gaWZBYnNlbnQoKTsKICAgIH0KICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoa2V5LCAia2V5IiwgIktleSBub3QgaW4gbWFwLiIpOwogIH0KCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5rZXlzKSB7CiAgICAgIHRoaXNba2V5XSA9IHVwZGF0ZShrZXksIHRoaXNba2V5XSk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgewogICAgcmV0dXJuIGtleXMubWFwKChLIGtleSkgPT4gTWFwRW50cnk8SywgVj4oa2V5LCB0aGlzW2tleV0pKTsKICB9CgogIE1hcDxLMiwgVjI+IG1hcDxLMiwgVjI+KE1hcEVudHJ5PEsyLCBWMj4gdHJhbnNmb3JtKEsga2V5LCBWIHZhbHVlKSkgewogICAgdmFyIHJlc3VsdCA9IDxLMiwgVjI+e307CiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5rZXlzKSB7CiAgICAgIHZhciBlbnRyeSA9IHRyYW5zZm9ybShrZXksIHRoaXNba2V5XSk7CiAgICAgIHJlc3VsdFtlbnRyeS5rZXldID0gZW50cnkudmFsdWU7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBuZXdFbnRyaWVzKSB7CiAgICBmb3IgKHZhciBlbnRyeSBpbiBuZXdFbnRyaWVzKSB7CiAgICAgIHRoaXNbZW50cnkua2V5XSA9IGVudHJ5LnZhbHVlOwogICAgfQogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB2YXIga2V5c1RvUmVtb3ZlID0gPEs+W107CiAgICBmb3IgKHZhciBrZXkgaW4ga2V5cykgewogICAgICBpZiAodGVzdChrZXksIHRoaXNba2V5XSkpIGtleXNUb1JlbW92ZS5hZGQoa2V5KTsKICAgIH0KICAgIGZvciAodmFyIGtleSBpbiBrZXlzVG9SZW1vdmUpIHsKICAgICAgdGhpcy5yZW1vdmUoa2V5KTsKICAgIH0KICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4ga2V5cy5jb250YWlucyhrZXkpOwogIGludCBnZXQgbGVuZ3RoID0+IGtleXMubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4ga2V5cy5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4ga2V5cy5pc05vdEVtcHR5OwogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX01hcEJhc2VWYWx1ZUl0ZXJhYmxlPEssIFY+KHRoaXMpOwogIFN0cmluZyB0b1N0cmluZygpID0+IE1hcEJhc2UubWFwVG9TdHJpbmcodGhpcyk7Cn0KCi8vLyBCYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBhbiB1bm1vZGlmaWFibGUgW01hcF0uCi8vLwovLy8gVGhpcyBjbGFzcyBoYXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBhbGwgYnV0IHR3byBvZiB0aGUgbWVtYmVycyBvZgovLy8gYW4gdW1vZGlmaWFibGUgW01hcF0uCi8vLyBBIHNpbXBsZSB1bm1vZGlmaWFibGUgYE1hcGAgY2xhc3MgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGV4dGVuZGluZyB0aGlzCi8vLyBjbGFzcyBhbmQgaW1wbGVtZW50aW5nIGBrZXlzYCBhbmQgYG9wZXJhdG9yW11gLgovLy8KLy8vIE1vZGlmeWluZyBvcGVyYXRpb25zIHRocm93IHdoZW4gdXNlZC4KLy8vIFRoZSByZW1haW5pbmcgbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBga2V5c2AKLy8vIGFuZCBgb3BlcmF0b3JbXWAuCi8vLwovLy8gVGhlIGBrZXlzYCBpdGVyYWJsZSBzaG91bGQgaGF2ZSBlZmZpY2llbnQgW0l0ZXJhYmxlLmxlbmd0aF0gYW5kCi8vLyBbSXRlcmFibGUuY29udGFpbnNdIG9wZXJhdGlvbnMsIGFuZCBpdCBzaG91bGQgY2F0Y2ggY29uY3VycmVudCBtb2RpZmljYXRpb25zCi8vLyBvZiB0aGUga2V5cyB3aGlsZSBpdGVyYXRpbmcuCi8vLwovLy8gQSBtb3JlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBpcyB1c3VhbGx5IHBvc3NpYmxlIGJ5IG92ZXJyaWRpbmcKLy8vIHNvbWUgb2YgdGhlIG90aGVyIG1lbWJlcnMgYXMgd2VsbC4KYWJzdHJhY3QgY2xhc3MgVW5tb2RpZmlhYmxlTWFwQmFzZTxLLCBWPiA9IE1hcEJhc2U8SywgVj4KICAgIHdpdGggX1VubW9kaWZpYWJsZU1hcE1peGluPEssIFY+OwoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtNYXAudmFsdWVzXSBiYXNlZCBvbiB0aGUgbWFwIGFuZCBpdHMgW01hcC5rZXlzXSBpdGVyYWJsZS4KLy8vCi8vLyBJdGVyYWJsZSB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIHZhbHVlcyBvZiBhIGBNYXBgLgovLy8gSXQgYWNjZXNzZXMgdGhlIHZhbHVlcyBieSBpdGVyYXRpbmcgb3ZlciB0aGUga2V5cyBvZiB0aGUgbWFwLCBhbmQgdXNpbmcgdGhlCi8vLyBtYXAncyBgb3BlcmF0b3JbXWAgdG8gbG9va3VwIHRoZSBrZXlzLgpjbGFzcyBfTWFwQmFzZVZhbHVlSXRlcmFibGU8SywgVj4gZXh0ZW5kcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxWPiB7CiAgZmluYWwgTWFwPEssIFY+IF9tYXA7CiAgX01hcEJhc2VWYWx1ZUl0ZXJhYmxlKHRoaXMuX21hcCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX21hcC5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX21hcC5pc05vdEVtcHR5OwogIFYgZ2V0IGZpcnN0ID0+IF9tYXBbX21hcC5rZXlzLmZpcnN0XTsKICBWIGdldCBzaW5nbGUgPT4gX21hcFtfbWFwLmtleXMuc2luZ2xlXTsKICBWIGdldCBsYXN0ID0+IF9tYXBbX21hcC5rZXlzLmxhc3RdOwoKICBJdGVyYXRvcjxWPiBnZXQgaXRlcmF0b3IgPT4gX01hcEJhc2VWYWx1ZUl0ZXJhdG9yPEssIFY+KF9tYXApOwp9CgovLy8gSXRlcmF0b3IgY3JlYXRlZCBieSBbX01hcEJhc2VWYWx1ZUl0ZXJhYmxlXS4KLy8vCi8vLyBJdGVyYXRlcyBvdmVyIHRoZSB2YWx1ZXMgb2YgYSBtYXAgYnkgaXRlcmF0aW5nIGl0cyBrZXlzIGFuZCBsb29rdXAgdXAgdGhlCi8vLyB2YWx1ZXMuCmNsYXNzIF9NYXBCYXNlVmFsdWVJdGVyYXRvcjxLLCBWPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFY+IHsKICBmaW5hbCBJdGVyYXRvcjxLPiBfa2V5czsKICBmaW5hbCBNYXA8SywgVj4gX21hcDsKICBWIF9jdXJyZW50OwoKICBfTWFwQmFzZVZhbHVlSXRlcmF0b3IoTWFwPEssIFY+IG1hcCkKICAgICAgOiBfbWFwID0gbWFwLAogICAgICAgIF9rZXlzID0gbWFwLmtleXMuaXRlcmF0b3I7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2tleXMubW92ZU5leHQoKSkgewogICAgICBfY3VycmVudCA9IF9tYXBbX2tleXMuY3VycmVudF07CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgViBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKLy8vIE1peGluIHRoYXQgb3ZlcnJpZGVzIG11dGF0aW5nIG1hcCBvcGVyYXRpb25zIHdpdGggaW1wbGVtZW50YXRpb25zIHRoYXQKLy8vIHRocm93LgphYnN0cmFjdCBjbGFzcyBfVW5tb2RpZmlhYmxlTWFwTWl4aW48SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIC8vLyBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBtYXAuCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIik7CiAgfQoKICAvLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbWFwLgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICBWIHVwZGF0ZShLIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXAiKTsKICB9CgogIC8vLyBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBtYXAuCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXAiKTsKICB9Cn0KCi8vLyBXcmFwcGVyIGFyb3VuZCBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBbTWFwXSB0aGF0IG9ubHkgZXhwb3NlcyBgTWFwYAovLy8gbWVtYmVycy4KLy8vCi8vLyBBIHNpbXBsZSB3cmFwcGVyIHRoYXQgZGVsZWdhdGVzIGFsbCBgTWFwYCBtZW1iZXJzIHRvIHRoZSBtYXAgcHJvdmlkZWQgaW4gdGhlCi8vLyBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBCYXNlIGZvciBkZWxlZ2F0aW5nIG1hcCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBbVW5tb2RpZmlhYmxlTWFwVmlld10uCmNsYXNzIE1hcFZpZXc8SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIGZpbmFsIE1hcDxLLCBWPiBfbWFwOwogIGNvbnN0IE1hcFZpZXcoTWFwPEssIFY+IG1hcCkgOiBfbWFwID0gbWFwOwoKICBNYXA8UkssIFJWPiBjYXN0PFJLLCBSVj4oKSA9PiBfbWFwLmNhc3Q8UkssIFJWPigpOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gX21hcFtrZXldOwogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBfbWFwW2tleV0gPSB2YWx1ZTsKICB9CgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgX21hcC5hZGRBbGwob3RoZXIpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9tYXAuY2xlYXIoKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgPT4gX21hcC5wdXRJZkFic2VudChrZXksIGlmQWJzZW50KTsKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+IF9tYXAuY29udGFpbnNLZXkoa2V5KTsKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSA9PiBfbWFwLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAuZm9yRWFjaChhY3Rpb24pOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbWFwLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbWFwLmlzTm90RW1wdHk7CiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7CiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX21hcC5rZXlzOwogIFYgcmVtb3ZlKE9iamVjdCBrZXkpID0+IF9tYXAucmVtb3ZlKGtleSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX21hcC50b1N0cmluZygpOwogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX21hcC52YWx1ZXM7CgogIEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBnZXQgZW50cmllcyA9PiBfbWFwLmVudHJpZXM7CgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgX21hcC5hZGRFbnRyaWVzKGVudHJpZXMpOwogIH0KCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfbWFwLm1hcDxLMiwgVjI+KHRyYW5zZm9ybSk7CgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pID0+CiAgICAgIF9tYXAudXBkYXRlKGtleSwgdXBkYXRlLCBpZkFic2VudDogaWZBYnNlbnQpOwoKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAudXBkYXRlQWxsKHVwZGF0ZSk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQp9CgovLy8gVmlldyBvZiBhIFtNYXBdIHRoYXQgZGlzYWxsb3cgbW9kaWZ5aW5nIHRoZSBtYXAuCi8vLwovLy8gQSB3cmFwcGVyIGFyb3VuZCBhIGBNYXBgIHRoYXQgZm9yd2FyZHMgYWxsIG1lbWJlcnMgdG8gdGhlIG1hcCBwcm92aWRlZCBpbgovLy8gdGhlIGNvbnN0cnVjdG9yLCBleGNlcHQgZm9yIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIG1hcC4KLy8vIE1vZGlmeWluZyBvcGVyYXRpb25zIHRocm93IGluc3RlYWQuCmNsYXNzIFVubW9kaWZpYWJsZU1hcFZpZXc8SywgVj4gZXh0ZW5kcyBNYXBWaWV3PEssIFY+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVNYXBNaXhpbjxLLCBWPiB7CiAgVW5tb2RpZmlhYmxlTWFwVmlldyhNYXA8SywgVj4gbWFwKSA6IHN1cGVyKG1hcCk7CgogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+CiAgICAgIFVubW9kaWZpYWJsZU1hcFZpZXc8UkssIFJWPihfbWFwLmNhc3Q8UkssIFJWPigpKTsKfQqBfABOTjwBGQEpBEwLR0xFBERRIQRGJzYlRiIWBgEhCiAZGRkWHgoXGRwZChkQNCYGAR4EARYBQwZEFipCERMBJCoGBAE5BkQXTyouAS4yASk4Ky8GASZBBgQCASAETAtGTEUERFEhBEYnNRgdIBg8TBABQi4aHgYEASEgHgYEASUaKwYSBAEnHBgGIwQBNyEsBhwlBj4EAS0hKgYEASlABAFIHSEtJwYTBAE5JCUGBAEwHhw3BiQYBgQBNiEkKj8yAgEzBEsaSzQEKk4WBERRIQRGJzkmAVEEN1ArRxgkASEkKigqJgFBAgExBE4MOxsYDgEnFCMBFBwmEwYVEgQBHQIBSwtCPiY+BAE+IT4EAT42PgQBPhE+BAE+GT4EAT4wPgQBPic+BAE+Nz4EAT4tPgQCAUkNBFERBEgrGC0BNSomFwQBIRgEARESBAFJOUEuGgQBJCohJSwoKQE4ATYeBAFJIwE4NAEtHAQBMBwEAgE1BE5AKDYnMwEgOAIBGWRhcnQ6Y29sbGVjdGlvbi9tYXBzLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vc2V0LmRhcnTAAEDlLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9ucyBvZiBbU2V0XS4KcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gTWl4aW4gaW1wbGVtZW50YXRpb24gb2YgW1NldF0uCi8vLwovLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYSBgU2V0YCB0aGF0IGRlcGVuZHMgb25seQovLy8gb24gdGhlIGFic3RyYWN0IG1lbWJlcnM6IFthZGRdLCBbY29udGFpbnNdLCBbbG9va3VwXSwgW3JlbW92ZV0sCi8vLyBbaXRlcmF0b3JdLCBbbGVuZ3RoXSBhbmQgW3RvU2V0XS4KLy8vCi8vLyBTb21lIG9mIHRoZSBtZXRob2RzIGFzc3VtZSB0aGF0IGB0b1NldGAgY3JlYXRlcyBhIG1vZGlmaWFibGUgc2V0LgovLy8gSWYgdXNpbmcgdGhpcyBtaXhpbiBmb3IgYW4gdW5tb2RpZmlhYmxlIHNldCwKLy8vIHdoZXJlIGB0b1NldGAgc2hvdWxkIHJldHVybiBhbiB1bm1vZGlmaWFibGUgc2V0LAovLy8gaXQncyBuZWNlc3NhcnkgdG8gcmVpbXBsZW1lbnQKLy8vIFtyZXRhaW5BbGxdLCBbdW5pb25dLCBbaW50ZXJzZWN0aW9uXSBhbmQgW2RpZmZlcmVuY2VdLgovLy8KLy8vIEltcGxlbWVudGF0aW9ucyBvZiBgU2V0YCB1c2luZyB0aGlzIG1peGluIHNob3VsZCBjb25zaWRlciBhbHNvIGltcGxlbWVudGluZwovLy8gYGNsZWFyYCBpbiBjb25zdGFudCB0aW1lLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3b3JrcyBieSByZW1vdmluZyBldmVyeQovLy8gZWxlbWVudC4KYWJzdHJhY3QgY2xhc3MgU2V0TWl4aW48RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIC8vIFRoaXMgY2xhc3MgcmVpbXBsZW1lbnRzIGFsbCBvZiBbSXRlcmFibGVNaXhpbl0uCiAgLy8gSWYvd2hlbiBEYXJ0IG1peGlucyBnZXQgbW9yZSBwb3dlcmZ1bCwgd2Ugc2hvdWxkIGp1c3QgY3JlYXRlIGEgc2luZ2xlCiAgLy8gTWl4aW4gY2xhc3MgZnJvbSBJdGVyYWJsZU1peGluIGFuZCB0aGUgbmV3IG1ldGhvZHMgb2YgdGhpcyBjbGFzcy4KCiAgYm9vbCBhZGQoRSB2YWx1ZSk7CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpOwoKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCk7CgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvcjsKCiAgU2V0PEU+IHRvU2V0KCk7CgogIGludCBnZXQgbGVuZ3RoOwoKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IGxlbmd0aCAhPSAwOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBJdGVyYWJsZTxFPiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEU+IG90aGVyKSA9PgogICAgICBGb2xsb3dlZEJ5SXRlcmFibGU8RT4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBXaGVyZVR5cGVJdGVyYWJsZTxUPih0aGlzKTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIHJlbW92ZUFsbCh0b0xpc3QoKSk7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgZm9yIChFIGVsZW1lbnQgaW4gZWxlbWVudHMpIGFkZChlbGVtZW50KTsKICB9CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgaW4gZWxlbWVudHMpIHJlbW92ZShlbGVtZW50KTsKICB9CgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIHNldCwgcmVtb3ZlIGFsbCBvZiBlbGVtZW50cyBmcm9tIHRoZSBjb3B5LAogICAgLy8gdGhlbiByZW1vdmUgYWxsIHJlbWFpbmluZyBlbGVtZW50cyBpbiBjb3B5IGZyb20gdGhpcy4KICAgIFNldDxFPiB0b1JlbW92ZSA9IHRvU2V0KCk7CiAgICBmb3IgKE9iamVjdCBvIGluIGVsZW1lbnRzKSB7CiAgICAgIHRvUmVtb3ZlLnJlbW92ZShvKTsKICAgIH0KICAgIHJlbW92ZUFsbCh0b1JlbW92ZSk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBMaXN0IHRvUmVtb3ZlID0gW107CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB0b1JlbW92ZS5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZW1vdmVBbGwodG9SZW1vdmUpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgTGlzdCB0b1JlbW92ZSA9IFtdOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIXRlc3QoZWxlbWVudCkpIHRvUmVtb3ZlLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJlbW92ZUFsbCh0b1JlbW92ZSk7CiAgfQoKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gb3RoZXIpIHsKICAgIGZvciAoT2JqZWN0IG8gaW4gb3RoZXIpIHsKICAgICAgaWYgKCFjb250YWlucyhvKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBTZXQ8RT4gdW5pb24oU2V0PEU+IG90aGVyKSB7CiAgICByZXR1cm4gdG9TZXQoKS4uYWRkQWxsKG90aGVyKTsKICB9CgogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSB0b1NldCgpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQucmVtb3ZlKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gdG9TZXQoKTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQucmVtb3ZlKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pIHsKICAgIExpc3Q8RT4gcmVzdWx0ID0gZ3Jvd2FibGUgPyAoPEU+W10uLmxlbmd0aCA9IGxlbmd0aCkgOiBMaXN0PEU+KGxlbmd0aCk7CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSByZXN1bHRbaSsrXSA9IGVsZW1lbnQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGVsZW1lbnQpKSA9PgogICAgICBFZmZpY2llbnRMZW5ndGhNYXBwZWRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPiAxKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIEUgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb0Z1bGxTdHJpbmcodGhpcywgJ3snLCAnfScpOwoKICAvLyBDb3BpZWQgZnJvbSBJdGVyYWJsZU1peGluLgogIC8vIFNob3VsZCBiZSBpbmhlcml0ZWQgaWYgd2UgaGFkIG11bHRpLWxldmVsIG1peGlucy4KCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCBmKEUgZWxlbWVudCkpID0+IFdoZXJlSXRlcmFibGU8RT4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+CiAgICAgIEV4cGFuZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIGYoZWxlbWVudCk7CiAgfQoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgewogICAgSXRlcmF0b3I8RT4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSB2YWx1ZSA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgYm9vbCBldmVyeShib29sIGYoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIWYoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuICIiOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHNlcGFyYXRvciA9PSBudWxsIHx8IHNlcGFyYXRvciA9PSAiIikgewogICAgICBkbyB7CiAgICAgICAgYnVmZmVyLndyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICBidWZmZXIud3JpdGUoc2VwYXJhdG9yKTsKICAgICAgICBidWZmZXIud3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IG4pIHsKICAgIHJldHVybiBUYWtlSXRlcmFibGU8RT4odGhpcywgbik7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBuKSB7CiAgICByZXR1cm4gU2tpcEl0ZXJhYmxlPEU+KHRoaXMsIG4pOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFNraXBXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiBpdC5jdXJyZW50OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSByZXN1bHQ7CiAgICBkbyB7CiAgICAgIHJlc3VsdCA9IGl0LmN1cnJlbnQ7CiAgICB9IHdoaWxlIChpdC5tb3ZlTmV4dCgpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChpbmRleCwgImluZGV4Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoaW5kZXgsICJpbmRleCIpOwogICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmIChpbmRleCA9PSBlbGVtZW50SW5kZXgpIHJldHVybiBlbGVtZW50OwogICAgICBlbGVtZW50SW5kZXgrKzsKICAgIH0KICAgIHRocm93IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIsIG51bGwsIGVsZW1lbnRJbmRleCk7CiAgfQp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBbU2V0XS4KLy8vCi8vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGBTZXRgIHRoYXQgZGVwZW5kcyBvbmx5Ci8vLyBvbiB0aGUgYWJzdHJhY3QgbWVtYmVyczogW2FkZF0sIFtjb250YWluc10sIFtsb29rdXBdLCBbcmVtb3ZlXSwKLy8vIFtpdGVyYXRvcl0sIFtsZW5ndGhdIGFuZCBbdG9TZXRdLgovLy8KLy8vIFNvbWUgb2YgdGhlIG1ldGhvZHMgYXNzdW1lIHRoYXQgYHRvU2V0YCBjcmVhdGVzIGEgbW9kaWZpYWJsZSBzZXQuCi8vLyBJZiB1c2luZyB0aGlzIGJhc2UgY2xhc3MgZm9yIGFuIHVubW9kaWZpYWJsZSBzZXQsCi8vLyB3aGVyZSBgdG9TZXRgIHNob3VsZCByZXR1cm4gYW4gdW5tb2RpZmlhYmxlIHNldCwKLy8vIGl0J3MgbmVjZXNzYXJ5IHRvIHJlaW1wbGVtZW50Ci8vLyBbcmV0YWluQWxsXSwgW3VuaW9uXSwgW2ludGVyc2VjdGlvbl0gYW5kIFtkaWZmZXJlbmNlXS4KLy8vCi8vLyBJbXBsZW1lbnRhdGlvbnMgb2YgYFNldGAgdXNpbmcgdGhpcyBiYXNlIHNob3VsZCBjb25zaWRlciBhbHNvIGltcGxlbWVudGluZwovLy8gYGNsZWFyYCBpbiBjb25zdGFudCB0aW1lLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3b3JrcyBieSByZW1vdmluZyBldmVyeQovLy8gZWxlbWVudC4KYWJzdHJhY3QgY2xhc3MgU2V0QmFzZTxFPiBleHRlbmRzIE9iamVjdCB3aXRoIFNldE1peGluPEU+IHsKICAvLy8gQ29udmVydCBhIGBTZXRgIHRvIGEgc3RyaW5nIGFzIGB7ZWFjaCwgZWxlbWVudCwgYXMsIHN0cmluZ31gLgogIC8vLwogIC8vLyBIYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2hlcmUgY29udmVydGluZyBvbmUgb2YgdGhlIGVsZW1lbnRzCiAgLy8vIHRvIGEgc3RyaW5nIGVuZHMgdXAgY29udmVydGluZyBbc2V0XSB0byBhIHN0cmluZyBhZ2Fpbi4KICBzdGF0aWMgU3RyaW5nIHNldFRvU3RyaW5nKFNldCBzZXQpID0+CiAgICAgIEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyhzZXQsICd7JywgJ30nKTsKfQoKLy8vIENvbW1vbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIFtTZXRdIG1ldGhvZHMuCi8vIFRPRE8oMzU1NDgpOiBNYWtlIHRoaXMgbWl4LWluIFNldE1peGluLCBieSBhZGRpbmcgYHdpdGggU2V0TWl4aW48RT5gCi8vIGFuZCByZW1vdmluZyB0aGUgY29waWVkIG1lbWJlcnMgYmVsb3csCi8vIHdoZW4gYW5hbHl6ZXIgc3VwcG9ydHMgY29uc3QgY29uc3RydWN0b3JzIGZvciBtaXhpbiBhcHBsaWNhdGlvbnMuCmFic3RyYWN0IGNsYXNzIF9TZXRCYXNlPEU+IGltcGxlbWVudHMgU2V0PEU+IHsKICAvLyBUaGUgZm9sbG93aW5nIHR3byBtZXRob2RzIG92ZXJyaWRlIHRoZSBvbmVzIGluIFNldEJhc2UuCiAgLy8gSXQncyBwb3NzaWJsZSB0byBiZSBtb3JlIGVmZmljaWVudCBpZiB3ZSBoYXZlIGEgd2F5IHRvIGNyZWF0ZSBhbiBlbXB0eQogIC8vIHNldCBvZiB0aGUgY29ycmVjdCB0eXBlLgogIGNvbnN0IF9TZXRCYXNlKCk7CgogIFNldDxFPiBfbmV3U2V0KCk7CgogIFNldDxSPiBfbmV3U2ltaWxhclNldDxSPigpOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzLCBuZXdTZXQ6IF9uZXdTaW1pbGFyU2V0KTsKCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSBfbmV3U2V0KCk7CiAgICBmb3IgKHZhciBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKCFvdGhlci5jb250YWlucyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gX25ld1NldCgpOwogICAgZm9yICh2YXIgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmIChvdGhlci5jb250YWlucyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBTdWJjbGFzc2VzIGNhbiBvcHRpbWl6ZSB0aGlzIGZ1cnRoZXIuCiAgU2V0PEU+IHRvU2V0KCkgPT4gX25ld1NldCgpLi5hZGRBbGwodGhpcyk7CgogIC8vLyBUT0RPKDM1NTQ4KTogUmVtb3ZlIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zIGFnYWluIHdoZW4gdGhlIGFuYWx5emVyCiAgLy8vIHN1cHBvcnRzIG1peGlucyB3aXRoIGNvbnN0IGNvbnN0cnVjdG9ycywgYW5kIG1peCBpbiBgU2V0TWl4aW5gIGluc3RlYWQuCgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gbGVuZ3RoICE9IDA7CgogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpID0+CiAgICAgIEZvbGxvd2VkQnlJdGVyYWJsZTxFPi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICB2b2lkIGNsZWFyKCkgewogICAgcmVtb3ZlQWxsKHRvTGlzdCgpKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiBlbGVtZW50cykgYWRkKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgZm9yIChPYmplY3QgZWxlbWVudCBpbiBlbGVtZW50cykgcmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgc2V0LCByZW1vdmUgYWxsIG9mIGVsZW1lbnRzIGZyb20gdGhlIGNvcHksCiAgICAvLyB0aGVuIHJlbW92ZSBhbGwgcmVtYWluaW5nIGVsZW1lbnRzIGluIGNvcHkgZnJvbSB0aGlzLgogICAgU2V0PEU+IHRvUmVtb3ZlID0gdG9TZXQoKTsKICAgIGZvciAoT2JqZWN0IG8gaW4gZWxlbWVudHMpIHsKICAgICAgdG9SZW1vdmUucmVtb3ZlKG8pOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIExpc3QgdG9SZW1vdmUgPSBbXTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHRvUmVtb3ZlLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJlbW92ZUFsbCh0b1JlbW92ZSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBMaXN0IHRvUmVtb3ZlID0gW107CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghdGVzdChlbGVtZW50KSkgdG9SZW1vdmUuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgewogICAgZm9yIChPYmplY3QgbyBpbiBvdGhlcikgewogICAgICBpZiAoIWNvbnRhaW5zKG8pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiB0b1NldCgpLi5hZGRBbGwob3RoZXIpOwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgTGlzdDxFPiByZXN1bHQgPSBncm93YWJsZSA/ICg8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoKSA6IExpc3Q8RT4obGVuZ3RoKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHJlc3VsdFtpKytdID0gZWxlbWVudDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+CiAgICAgIEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA+IDEpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgRSByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyh0aGlzLCAneycsICd9Jyk7CgogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgZihFIGVsZW1lbnQpKSA9PiBXaGVyZUl0ZXJhYmxlPEU+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihFIGVsZW1lbnQpKSA9PgogICAgICBFeHBhbmRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSBmKGVsZW1lbnQpOwogIH0KCiAgRSByZWR1Y2UoRSBjb21iaW5lKEUgdmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgdmFsdWUgPSBpdGVyYXRvci5jdXJyZW50OwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBpdGVyYXRvci5jdXJyZW50KTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50KTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIGJvb2wgZXZlcnkoYm9vbCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKCFmKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiAiIjsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChzZXBhcmF0b3IgPT0gbnVsbCB8fCBzZXBhcmF0b3IgPT0gIiIpIHsKICAgICAgZG8gewogICAgICAgIGJ1ZmZlci53cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICBidWZmZXIud3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgYnVmZmVyLndyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGFueShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBuKSB7CiAgICByZXR1cm4gVGFrZUl0ZXJhYmxlPEU+KHRoaXMsIG4pOwogIH0KCiAgSXRlcmFibGU8RT4gdGFrZVdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFRha2VXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgbikgewogICAgcmV0dXJuIFNraXBJdGVyYWJsZTxFPih0aGlzLCBuKTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXBXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpIHsKICAgIHJldHVybiBTa2lwV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICByZXR1cm4gaXQuY3VycmVudDsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgcmVzdWx0OwogICAgZG8gewogICAgICByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgfSB3aGlsZSAoaXQubW92ZU5leHQoKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSB2YWx1ZSksIHtFIG9yRWxzZSgpfSkgewogICAgRSByZXN1bHQ7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoaW5kZXgsICJpbmRleCIpOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGluZGV4LCAiaW5kZXgiKTsKICAgIGludCBlbGVtZW50SW5kZXggPSAwOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoaW5kZXggPT0gZWxlbWVudEluZGV4KSByZXR1cm4gZWxlbWVudDsKICAgICAgZWxlbWVudEluZGV4Kys7CiAgICB9CiAgICB0aHJvdyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiLCBudWxsLCBlbGVtZW50SW5kZXgpOwogIH0KfQoKLy8vIENsYXNzIHVzZWQgdG8gaW1wbGVtZW50IGNvbnN0IHNldHMuCmNsYXNzIF9Vbm1vZGlmaWFibGVTZXQ8RT4gZXh0ZW5kcyBfU2V0QmFzZTxFPiB7CiAgZmluYWwgTWFwPEUsIE51bGw+IF9tYXA7CgogIGNvbnN0IF9Vbm1vZGlmaWFibGVTZXQodGhpcy5fbWFwKTsKCiAgU2V0PEU+IF9uZXdTZXQoKSA9PiBMaW5rZWRIYXNoU2V0PEU+KCk7CgogIFNldDxSPiBfbmV3U2ltaWxhclNldDxSPigpID0+IExpbmtlZEhhc2hTZXQ8Uj4oKTsKCiAgLy8gTG9va3VwcyB1c2UgbWFwIG1ldGhvZHMuCgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpID0+IF9tYXAuY29udGFpbnNLZXkoZWxlbWVudCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfbWFwLmtleXMuaXRlcmF0b3I7CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwoKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCkgewogICAgZm9yICh2YXIga2V5IGluIF9tYXAua2V5cykgewogICAgICBpZiAoa2V5ID09IGVsZW1lbnQpIHJldHVybiBrZXk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIE11dGF0aW5nIG1ldGhvZHMgdGhyb3cuCgogIGJvb2wgYWRkKEUgdmFsdWUpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2hhbmdlIHVubW9kaWZpYWJsZSBzZXQiKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KfQqCeABOTjwBIxkBIwRLRCYERjE1IjsEUFENLzVLRwEVASEBHAEdARwBEgESASMBJgEwLzkBPAERGQQBJi4EAS42BAEuRz0fIRoGGQQBKxgeMAYZBAErGB4xBhkEAS0eJgYRBAEfIwQBKx0ePAYTBAEpHR47BhMEAStMDzMTBAEoNAEROh9AGxMEAUoBIDcBRQE1JQEkKAQBLCogLgYgIjAGEgQBRR49EgQBIh4lBhEEASkqKSowCyglDSYkISgIBh4EASMeJgYSBAEcJQQBLi0EARwlBAEuLQQBEB8aLgYXBAEPHxouBg4JGx0TBAEzHikGKSwEATIOIB4bGh4IBiYpLAQBNA4gHhsdMAoaHggGJiksBAEbMDEaHjEWBkYEAgEiBEtEJgRGNjUiOwRPUQ08RAZHPig4AgE6SCpFLz1MHhQBFAEeAUgBKR8gOQYTBAErHyA4BhMEASstAU1OASMBJgEvOQE8AREZBAEmLgQBLjYEAS5HPR8hGgYZBAErGB4wBhkEASsYHjEGGQQBLR4mBhEEAR8jBAErTA8zEwQBKDQBETofQBsTBAFKAUUBNSUBJCgEASwqIC4GICIwBhIEAUUePRIEASIeJQYRBAEpKikqMAsoJQ0mJCEoCAYeBAEjHiYGEgQBHCUEAS4tBAEcJQQBLi0EARAfGi4GFwQBDx8aLgYOCRsdEwQBMx4pBiksBAEyDiAeGxoeCAYmKSwEATQOIB4bHTAKGh4IBiYpLAQBGzAxGh4xFgZGBAIBKDAbASUBKgE0AR4BPgEyASEBHSEmBhEEAR0BFj4EARE+BAEmPgQBLj4EAS4+BAErPgQBKz4EAR4+BAIBGGRhcnQ6Y29sbGVjdGlvbi9zZXQuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9oYXNoX3NldC5kYXJ0k3svLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gQW4gdW5vcmRlcmVkIGhhc2gtdGFibGUgYmFzZWQgW1NldF0gaW1wbGVtZW50YXRpb24uCi8vLwovLy8gVGhlIGVsZW1lbnRzIG9mIGEgYEhhc2hTZXRgIG11c3QgaGF2ZSBjb25zaXN0ZW50IGVxdWFsaXR5Ci8vLyBhbmQgaGFzaENvZGUgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGVxdWFscyBvcGVyYXRpb24KLy8vIG11c3QgZGVmaW5lIGEgc3RhYmxlIGVxdWl2YWxlbmNlIHJlbGF0aW9uIG9uIHRoZSBlbGVtZW50cyAocmVmbGV4aXZlLAovLy8gc3ltbWV0cmljLCB0cmFuc2l0aXZlLCBhbmQgY29uc2lzdGVudCBvdmVyIHRpbWUpLCBhbmQgdGhhdCB0aGUgaGFzaENvZGUKLy8vIG11c3QgY29uc2lzdGVudCB3aXRoIGVxdWFsaXR5LCBzbyB0aGF0IHRoZSBzYW1lIGZvciBvYmplY3RzIHRoYXQgYXJlCi8vLyBjb25zaWRlcmVkIGVxdWFsLgovLy8KLy8vIFRoZSBzZXQgYWxsb3dzIGBudWxsYCBhcyBhbiBlbGVtZW50LgovLy8KLy8vIE1vc3Qgc2ltcGxlIG9wZXJhdGlvbnMgb24gYEhhc2hTZXRgIGFyZSBkb25lIGluIChwb3RlbnRpYWxseSBhbW9ydGl6ZWQpCi8vLyBjb25zdGFudCB0aW1lOiBbYWRkXSwgW2NvbnRhaW5zXSwgW3JlbW92ZV0sIGFuZCBbbGVuZ3RoXSwgcHJvdmlkZWQgdGhlIGhhc2gKLy8vIGNvZGVzIG9mIG9iamVjdHMgYXJlIHdlbGwgZGlzdHJpYnV0ZWQuCi8vLwovLy8gVGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGUgc2V0IGlzIG5vdCBzcGVjaWZpZWQgYW5kIGRlcGVuZHMgb24KLy8vIHRoZSBoYXNoY29kZXMgb2YgdGhlIHByb3ZpZGVkIGVsZW1lbnRzLiBIb3dldmVyLCB0aGUgb3JkZXIgaXMgc3RhYmxlOgovLy8gbXVsdGlwbGUgaXRlcmF0aW9ucyBvdmVyIHRoZSBzYW1lIHNldCBwcm9kdWNlIHRoZSBzYW1lIG9yZGVyLCBhcyBsb25nIGFzCi8vLyB0aGUgc2V0IGlzIG5vdCBtb2RpZmllZC4KYWJzdHJhY3QgY2xhc3MgSGFzaFNldDxFPiBpbXBsZW1lbnRzIFNldDxFPiB7CiAgLy8vIENyZWF0ZSBhIGhhc2ggc2V0IHVzaW5nIHRoZSBwcm92aWRlZCBbZXF1YWxzXSBhcyBlcXVhbGl0eS4KICAvLy8KICAvLy8gVGhlIHByb3ZpZGVkIFtlcXVhbHNdIG11c3QgZGVmaW5lIGEgc3RhYmxlIGVxdWl2YWxlbmNlIHJlbGF0aW9uLCBhbmQKICAvLy8gW2hhc2hDb2RlXSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBbZXF1YWxzXS4gSWYgdGhlIFtlcXVhbHNdIG9yIFtoYXNoQ29kZV0KICAvLy8gbWV0aG9kcyB3b24ndCB3b3JrIG9uIGFsbCBvYmplY3RzLCBidXQgb25seSBvbiBzb21lIGluc3RhbmNlcyBvZiBFLCB0aGUKICAvLy8gW2lzVmFsaWRLZXldIHByZWRpY2F0ZSBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0aGUga2V5cyB0aGF0IHRoZSBmdW5jdGlvbnMKICAvLy8gYXJlIGFwcGxpZWQgdG8uCiAgLy8vIEFueSBrZXkgZm9yIHdoaWNoIFtpc1ZhbGlkS2V5XSByZXR1cm5zIGZhbHNlIGlzIGF1dG9tYXRpY2FsbHkgYXNzdW1lZAogIC8vLyB0byBub3QgYmUgaW4gdGhlIHNldCB3aGVuIGFza2luZyBgY29udGFpbnNgLgogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBvciBbaGFzaENvZGVdIGFyZSBvbWl0dGVkLCB0aGUgc2V0IHVzZXMKICAvLy8gdGhlIGVsZW1lbnRzJyBpbnRyaW5zaWMgW09iamVjdC49PV0gYW5kIFtPYmplY3QuaGFzaENvZGVdLgogIC8vLwogIC8vLyBJZiB5b3Ugc3VwcGx5IG9uZSBvZiBbZXF1YWxzXSBhbmQgW2hhc2hDb2RlXSwKICAvLy8geW91IHNob3VsZCBnZW5lcmFsbHkgYWxzbyB0byBzdXBwbHkgdGhlIG90aGVyLgogIC8vLwogIC8vLyBJZiB0aGUgc3VwcGxpZWQgYGVxdWFsc2Agb3IgYGhhc2hDb2RlYCBmdW5jdGlvbnMgd29uJ3Qgd29yayBvbiBhbGwgW0VdCiAgLy8vIG9iamVjdHMsIGFuZCB0aGUgbWFwIHdpbGwgYmUgdXNlZCBpbiBhIHNldHRpbmcgd2hlcmUgYSBub24tYEVgIG9iamVjdAogIC8vLyBpcyBwYXNzZWQgdG8sIGUuZy4sIGBjb250YWluc2AsIHRoZW4gdGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBzaG91bGQKICAvLy8gYWxzbyBiZSBzdXBwbGllZC4KICAvLy8KICAvLy8gSWYgW2lzVmFsaWRLZXldIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRlc3RpbmcgaWYgdGhlIG9iamVjdCBpcyBhbgogIC8vLyBbRV0gaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdDoKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoU2V0PGludD4oZXF1YWxzOiAoaW50IGUxLCBpbnQgZTIpID0+IChlMSAtIGUyKSAlIDUgPT0gMCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IChpbnQgZSkgPT4gZSAlIDUpCiAgLy8vCiAgLy8vIGRvZXMgbm90IG5lZWQgYW4gYGlzVmFsaWRLZXlgIGFyZ3VtZW50LCBiZWNhdXNlIGl0IGRlZmF1bHRzIHRvIG9ubHkKICAvLy8gYWNjZXB0aW5nIGBpbnRgIHZhbHVlcyB3aGljaCBhcmUgYWNjZXB0ZWQgYnkgYm90aCBgZXF1YWxzYCBhbmQgYGhhc2hDb2RlYC4KICAvLy8KICAvLy8gSWYgbmVpdGhlciBgZXF1YWxzYCwgYGhhc2hDb2RlYCwgbm9yIGBpc1ZhbGlkS2V5YCBpcyBwcm92aWRlZCwKICAvLy8gdGhlIGRlZmF1bHQgYGlzVmFsaWRLZXlgIGluc3RlYWQgYWNjZXB0cyBhbGwgdmFsdWVzLgogIC8vLyBUaGUgZGVmYXVsdCBlcXVhbGl0eSBhbmQgaGFzaGNvZGUgb3BlcmF0aW9ucyBhcmUgYXNzdW1lZCB0byB3b3JrIG9uIGFsbAogIC8vLyBvYmplY3RzLgogIC8vLwogIC8vLyBMaWtld2lzZSwgaWYgYGVxdWFsc2AgaXMgW2lkZW50aWNhbF0sIGBoYXNoQ29kZWAgaXMgW2lkZW50aXR5SGFzaENvZGVdCiAgLy8vIGFuZCBgaXNWYWxpZEtleWAgaXMgb21pdHRlZCwgdGhlIHJlc3VsdGluZyBzZXQgaXMgaWRlbnRpdHkgYmFzZWQsCiAgLy8vIGFuZCB0aGUgYGlzVmFsaWRLZXlgIGRlZmF1bHRzIHRvIGFjY2VwdGluZyBhbGwga2V5cy4KICAvLy8gU3VjaCBhIG1hcCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSB1c2luZyBbSGFzaFNldC5pZGVudGl0eV0uCiAgZXh0ZXJuYWwgZmFjdG9yeSBIYXNoU2V0KAogICAgICB7Ym9vbCBlcXVhbHMoRSBlMSwgRSBlMiksCiAgICAgIGludCBoYXNoQ29kZShFIGUpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pOwoKICAvLy8gQ3JlYXRlcyBhbiB1bm9yZGVyZWQgaWRlbnRpdHktYmFzZWQgc2V0LgogIC8vLwogIC8vLyBFZmZlY3RpdmVseSBhIHNob3J0aGFuZCBmb3I6CiAgLy8vCiAgLy8vICAgICBuZXcgSGFzaFNldDxFPihlcXVhbHM6IGlkZW50aWNhbCwKICAvLy8gICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZGVudGl0eUhhc2hDb2RlKQogIGV4dGVybmFsIGZhY3RvcnkgSGFzaFNldC5pZGVudGl0eSgpOwoKICAvLy8gQ3JlYXRlIGEgaGFzaCBzZXQgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gQ3JlYXRlcyBhIGhhc2ggc2V0IGFzIGJ5IGBuZXcgSGFzaFNldDxFPigpYCBhbmQgYWRkcyBhbGwgZ2l2ZW4gW2VsZW1lbnRzXQogIC8vLyB0byB0aGUgc2V0LiBUaGUgZWxlbWVudHMgYXJlIGFkZGVkIGluIG9yZGVyLiBJZiBbZWxlbWVudHNdIGNvbnRhaW5zCiAgLy8vIHR3byBlbnRyaWVzIHRoYXQgYXJlIGVxdWFsLCBidXQgbm90IGlkZW50aWNhbCwgdGhlbiB0aGUgZmlyc3Qgb25lIGlzCiAgLy8vIHRoZSBvbmUgaW4gdGhlIHJlc3VsdGluZyBzZXQuCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAvLy8gY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFNldGAsIGZvciBleGFtcGxlIGFzOgogIC8vLyBgYGBkYXJ0CiAgLy8vIFNldDxTdXBlclR5cGU+IHN1cGVyU2V0ID0gLi4uOwogIC8vLyBTZXQ8U3ViVHlwZT4gc3ViU2V0ID0KICAvLy8gICAgIG5ldyBIYXNoU2V0PFN1YlR5cGU+LmZyb20oc3VwZXJTZXQud2hlcmVUeXBlPFN1YlR5cGU+KCkpOwogIC8vLyBgYGAKICBmYWN0b3J5IEhhc2hTZXQuZnJvbShJdGVyYWJsZSBlbGVtZW50cykgewogICAgSGFzaFNldDxFPiByZXN1bHQgPSBIYXNoU2V0PEU+KCk7CiAgICBmb3IgKGZpbmFsIGUgaW4gZWxlbWVudHMpIHsKICAgICAgcmVzdWx0LmFkZChlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlIGEgaGFzaCBzZXQgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gQ3JlYXRlcyBhIGhhc2ggc2V0IGFzIGJ5IGBuZXcgSGFzaFNldDxFPigpYCBhbmQgYWRkcyBhbGwgZ2l2ZW4gW2VsZW1lbnRzXQogIC8vLyB0byB0aGUgc2V0LiBUaGUgZWxlbWVudHMgYXJlIGFkZGVkIGluIG9yZGVyLiBJZiBbZWxlbWVudHNdIGNvbnRhaW5zCiAgLy8vIHR3byBlbnRyaWVzIHRoYXQgYXJlIGVxdWFsLCBidXQgbm90IGlkZW50aWNhbCwgdGhlbiB0aGUgZmlyc3Qgb25lIGlzCiAgLy8vIHRoZSBvbmUgaW4gdGhlIHJlc3VsdGluZyBzZXQuCiAgZmFjdG9yeSBIYXNoU2V0Lm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9PiBIYXNoU2V0PEU+KCkuLmFkZEFsbChlbGVtZW50cyk7CgogIC8vLyBQcm92aWRlcyBhbiBpdGVyYXRvciB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIGVsZW1lbnRzIG9mIHRoaXMgc2V0LgogIC8vLwogIC8vLyBUaGUgb3JkZXIgb2YgaXRlcmF0aW9uIGlzIHVuc3BlY2lmaWVkLAogIC8vLyBidXQgY29uc2lzdGVudCBiZXR3ZWVuIGNoYW5nZXMgdG8gdGhlIHNldC4KICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3I7Cn0KdQBOTjwBGQE4BD5HSkxJFgQpBExQKwRDSk0dLkEGS1FOURZMMwY6QQY0NQZNTEwYBk0lBks3BkpRBkU7Tg8GTUg7QxwgGScBLwYjBiw1JwEzBlBKSyQGNUhEDiUcRAosJiAVBhMEATMGUEpLJE4BSAYtMRwCAR1kYXJ0OmNvbGxlY3Rpb24vaGFzaF9zZXQuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9pdGVyYWJsZS5kYXJ0rswvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gVGhpcyBbSXRlcmFibGVdIG1peGluIGltcGxlbWVudHMgYWxsIFtJdGVyYWJsZV0gbWVtYmVycyBleGNlcHQgYGl0ZXJhdG9yYC4KLy8vCi8vLyBBbGwgb3RoZXIgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgYGl0ZXJhdG9yYC4KYWJzdHJhY3QgY2xhc3MgSXRlcmFibGVNaXhpbjxFPiBpbXBsZW1lbnRzIEl0ZXJhYmxlPEU+IHsKICAvLyBUaGlzIGNsYXNzIGhhcyBtZXRob2RzIGNvcGllZCB2ZXJiYXRpbSBpbnRvOgogIC8vIC0gSXRlcmFibGVCYXNlCiAgLy8gLSBTZXRNaXhpbgogIC8vIElmIGNoYW5naW5nIGEgbWV0aG9kIGhlcmUsIGFsc28gY2hhbmdlIHRoZSBvdGhlciBjb3BpZXMuCgogIEl0ZXJhYmxlPFI+IGNhc3Q8Uj4oKSA9PiBJdGVyYWJsZS5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IE1hcHBlZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIGYoRSBlbGVtZW50KSkgPT4gV2hlcmVJdGVyYWJsZTxFPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+CiAgICAgIEV4cGFuZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxFPiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEU+IG90aGVyKSB7CiAgICAvLyBUeXBlIHdvcmthcm91bmQgYmVjYXVzZSBJdGVyYWJsZU1peGluPEU+IGRvZXNuJ3QgcHJvbW90ZQogICAgLy8gdG8gRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4uCiAgICBJdGVyYWJsZTxFPiBzZWxmID0gdGhpczsKICAgIGlmIChzZWxmIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+KSB7CiAgICAgIHJldHVybiBGb2xsb3dlZEJ5SXRlcmFibGU8RT4uZmlyc3RFZmZpY2llbnQoc2VsZiwgb3RoZXIpOwogICAgfQogICAgcmV0dXJuIEZvbGxvd2VkQnlJdGVyYWJsZTxFPih0aGlzLCBvdGhlcik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBmb3IgKEUgZSBpbiB0aGlzKSB7CiAgICAgIGlmIChlID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSBmKGVsZW1lbnQpOwogIH0KCiAgRSByZWR1Y2UoRSBjb21iaW5lKEUgdmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgdmFsdWUgPSBpdGVyYXRvci5jdXJyZW50OwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBpdGVyYXRvci5jdXJyZW50KTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50KTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIGJvb2wgZXZlcnkoYm9vbCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKCFmKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiAiIjsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChzZXBhcmF0b3IgPT0gbnVsbCB8fCBzZXBhcmF0b3IgPT0gIiIpIHsKICAgICAgZG8gewogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGFueShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZSA9IHRydWV9KSA9PgogICAgICBMaXN0PEU+LmZyb20odGhpcywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKCiAgU2V0PEU+IHRvU2V0KCkgPT4gU2V0PEU+LmZyb20odGhpcyk7CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIGFzc2VydCh0aGlzIGlzISBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSk7CiAgICBpbnQgY291bnQgPSAwOwogICAgSXRlcmF0b3IgaXQgPSBpdGVyYXRvcjsKICAgIHdoaWxlIChpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+ICFpdGVyYXRvci5tb3ZlTmV4dCgpOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgewogICAgcmV0dXJuIFRha2VJdGVyYWJsZTxFPih0aGlzLCBjb3VudCk7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgewogICAgcmV0dXJuIFNraXBJdGVyYWJsZTxFPih0aGlzLCBjb3VudCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gU2tpcFdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgcmV0dXJuIGl0LmN1cnJlbnQ7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHJlc3VsdDsKICAgIGRvIHsKICAgICAgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIH0gd2hpbGUgKGl0Lm1vdmVOZXh0KCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIEUgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIGlmIChpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSB2YWx1ZSksIHtFIG9yRWxzZSgpfSkgewogICAgRSByZXN1bHQ7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChpbmRleCwgImluZGV4Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoaW5kZXgsICJpbmRleCIpOwogICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmIChpbmRleCA9PSBlbGVtZW50SW5kZXgpIHJldHVybiBlbGVtZW50OwogICAgICBlbGVtZW50SW5kZXgrKzsKICAgIH0KICAgIHRocm93IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIsIG51bGwsIGVsZW1lbnRJbmRleCk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb1Nob3J0U3RyaW5nKHRoaXMsICcoJywgJyknKTsKfQoKLy8vIEJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBbSXRlcmFibGVdLgovLy8KLy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbGwgbWV0aG9kcyBvZiBbSXRlcmFibGVdLCBleGNlcHQgW0l0ZXJhYmxlLml0ZXJhdG9yXSwKLy8vIGluIHRlcm1zIG9mIGBpdGVyYXRvcmAuCmFic3RyYWN0IGNsYXNzIEl0ZXJhYmxlQmFzZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBjb25zdCBJdGVyYWJsZUJhc2UoKTsKCiAgLy8vIENvbnZlcnQgYW4gYEl0ZXJhYmxlYCB0byBhIHN0cmluZyBsaWtlIFtJdGVyYWJsZUJhc2UudG9TdHJpbmddLgogIC8vLwogIC8vLyBBbGxvd3MgdXNpbmcgb3RoZXIgZGVsaW1pdGVycyB0aGFuICcoJyBhbmQgJyknLgogIC8vLwogIC8vLyBIYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2hlcmUgY29udmVydGluZyBvbmUgb2YgdGhlIGVsZW1lbnRzCiAgLy8vIHRvIGEgc3RyaW5nIGVuZHMgdXAgY29udmVydGluZyBbaXRlcmFibGVdIHRvIGEgc3RyaW5nIGFnYWluLgogIHN0YXRpYyBTdHJpbmcgaXRlcmFibGVUb1Nob3J0U3RyaW5nKEl0ZXJhYmxlIGl0ZXJhYmxlLAogICAgICBbU3RyaW5nIGxlZnREZWxpbWl0ZXIgPSAnKCcsIFN0cmluZyByaWdodERlbGltaXRlciA9ICcpJ10pIHsKICAgIGlmIChfaXNUb1N0cmluZ1Zpc2l0aW5nKGl0ZXJhYmxlKSkgewogICAgICBpZiAobGVmdERlbGltaXRlciA9PSAiKCIgJiYgcmlnaHREZWxpbWl0ZXIgPT0gIikiKSB7CiAgICAgICAgLy8gQXZvaWQgY3JlYXRpbmcgYSBuZXcgc3RyaW5nIGluIHRoZSAiY29tbW9uIiBjYXNlLgogICAgICAgIHJldHVybiAiKC4uLikiOwogICAgICB9CiAgICAgIHJldHVybiAiJGxlZnREZWxpbWl0ZXIuLi4kcmlnaHREZWxpbWl0ZXIiOwogICAgfQogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gPFN0cmluZz5bXTsKICAgIF90b1N0cmluZ1Zpc2l0aW5nLmFkZChpdGVyYWJsZSk7CiAgICB0cnkgewogICAgICBfaXRlcmFibGVQYXJ0c1RvU3RyaW5ncyhpdGVyYWJsZSwgcGFydHMpOwogICAgfSBmaW5hbGx5IHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChfdG9TdHJpbmdWaXNpdGluZy5sYXN0LCBpdGVyYWJsZSkpOwogICAgICBfdG9TdHJpbmdWaXNpdGluZy5yZW1vdmVMYXN0KCk7CiAgICB9CiAgICByZXR1cm4gKFN0cmluZ0J1ZmZlcihsZWZ0RGVsaW1pdGVyKQogICAgICAgICAgLi53cml0ZUFsbChwYXJ0cywgIiwgIikKICAgICAgICAgIC4ud3JpdGUocmlnaHREZWxpbWl0ZXIpKQogICAgICAgIC50b1N0cmluZygpOwogIH0KCiAgLy8vIENvbnZlcnRzIGFuIGBJdGVyYWJsZWAgdG8gYSBzdHJpbmcuCiAgLy8vCiAgLy8vIENvbnZlcnRzIGVhY2ggZWxlbWVudHMgdG8gYSBzdHJpbmcsIGFuZCBzZXBhcmF0ZXMgdGhlIHJlc3VsdHMgYnkgIiwgIi4KICAvLy8gVGhlbiB3cmFwcyB0aGUgcmVzdWx0IGluIFtsZWZ0RGVsaW1pdGVyXSBhbmQgW3JpZ2h0RGVsaW1pdGVyXS4KICAvLy8KICAvLy8gVW5saWtlIFtpdGVyYWJsZVRvU2hvcnRTdHJpbmddLCB0aGlzIGNvbnZlcnNpb24gZG9lc24ndCBvbWl0IGFueQogIC8vLyBlbGVtZW50cyBvciBwdXRzIGFueSBsaW1pdCBvbiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0LgogIC8vLwogIC8vLyBIYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2hlcmUgY29udmVydGluZyBvbmUgb2YgdGhlIGVsZW1lbnRzCiAgLy8vIHRvIGEgc3RyaW5nIGVuZHMgdXAgY29udmVydGluZyBbaXRlcmFibGVdIHRvIGEgc3RyaW5nIGFnYWluLgogIHN0YXRpYyBTdHJpbmcgaXRlcmFibGVUb0Z1bGxTdHJpbmcoSXRlcmFibGUgaXRlcmFibGUsCiAgICAgIFtTdHJpbmcgbGVmdERlbGltaXRlciA9ICcoJywgU3RyaW5nIHJpZ2h0RGVsaW1pdGVyID0gJyknXSkgewogICAgaWYgKF9pc1RvU3RyaW5nVmlzaXRpbmcoaXRlcmFibGUpKSB7CiAgICAgIHJldHVybiAiJGxlZnREZWxpbWl0ZXIuLi4kcmlnaHREZWxpbWl0ZXIiOwogICAgfQogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcihsZWZ0RGVsaW1pdGVyKTsKICAgIF90b1N0cmluZ1Zpc2l0aW5nLmFkZChpdGVyYWJsZSk7CiAgICB0cnkgewogICAgICBidWZmZXIud3JpdGVBbGwoaXRlcmFibGUsICIsICIpOwogICAgfSBmaW5hbGx5IHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChfdG9TdHJpbmdWaXNpdGluZy5sYXN0LCBpdGVyYWJsZSkpOwogICAgICBfdG9TdHJpbmdWaXNpdGluZy5yZW1vdmVMYXN0KCk7CiAgICB9CiAgICBidWZmZXIud3JpdGUocmlnaHREZWxpbWl0ZXIpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KfQoKLy8vIEEgY29sbGVjdGlvbiB1c2VkIHRvIGlkZW50aWZ5IGN5Y2xpYyBsaXN0cyBkdXJpbmcgdG9TdHJpbmcoKSBjYWxscy4KZmluYWwgTGlzdCBfdG9TdHJpbmdWaXNpdGluZyA9IFtdOwoKLy8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgdmlzaXRpbmcgYG9gIGluIGEgdG9TdHJpbmcgY2FsbC4KYm9vbCBfaXNUb1N0cmluZ1Zpc2l0aW5nKE9iamVjdCBvKSB7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBfdG9TdHJpbmdWaXNpdGluZy5sZW5ndGg7IGkrKykgewogICAgaWYgKGlkZW50aWNhbChvLCBfdG9TdHJpbmdWaXNpdGluZ1tpXSkpIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCi8vLyBDb252ZXJ0IGVsZW1lbnRzIG9mIFtpdGVyYWJsZV0gdG8gc3RyaW5ncyBhbmQgc3RvcmUgdGhlbSBpbiBbcGFydHNdLgp2b2lkIF9pdGVyYWJsZVBhcnRzVG9TdHJpbmdzKEl0ZXJhYmxlIGl0ZXJhYmxlLCBMaXN0PFN0cmluZz4gcGFydHMpIHsKICAvKgogICAqIFRoaXMgaXMgdGhlIGNvbXBsaWNhdGVkIHBhcnQgb2YgW2l0ZXJhYmxlVG9TaG9ydFN0cmluZ10uCiAgICogSXQgaXMgZXh0cmFjdGVkIGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYXZvaWQgaGF2aW5nIHRvbyBtdWNoIGNvZGUKICAgKiBpbnNpZGUgdGhlIHRyeS9maW5hbGx5LgogICAqLwogIC8vLyBUcnkgdG8gc3RheSBiZWxvdyB0aGlzIG1hbnkgY2hhcmFjdGVycy4KICBjb25zdCBpbnQgbGVuZ3RoTGltaXQgPSA4MDsKCiAgLy8vIEFsd2F5cyBhdCBsZWFzdCB0aGlzIG1hbnkgZWxlbWVudHMgYXQgdGhlIHN0YXJ0LgogIGNvbnN0IGludCBoZWFkQ291bnQgPSAzOwoKICAvLy8gQWx3YXlzIGF0IGxlYXN0IHRoaXMgbWFueSBlbGVtZW50cyBhdCB0aGUgZW5kLgogIGNvbnN0IGludCB0YWlsQ291bnQgPSAyOwoKICAvLy8gU3RvcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBtYW55IGVsZW1lbnRzLiBJdGVyYWJsZXMgY2FuIGJlIGluZmluaXRlLgogIGNvbnN0IGludCBtYXhDb3VudCA9IDEwMDsKICAvLyBQZXIgZW50cnkgbGVuZ3RoIG92ZXJoZWFkLiBJdCdzIGZvciAiLCAiIGZvciBhbGwgYWZ0ZXIgdGhlIGZpcnN0IGVudHJ5LAogIC8vIGFuZCBmb3IgIigiIGFuZCAiKSIgZm9yIHRoZSBpbml0aWFsIGVudHJ5LiBCeSBwdXJlIGx1Y2ssIHRoYXQncyB0aGUgc2FtZQogIC8vIG51bWJlci4KICBjb25zdCBpbnQgb3ZlcmhlYWQgPSAyOwogIGNvbnN0IGludCBlbGxpcHNpc1NpemUgPSAzOyAvLyAiLi4uIi5sZW5ndGguCgogIGludCBsZW5ndGggPSAwOwogIGludCBjb3VudCA9IDA7CiAgSXRlcmF0b3IgaXQgPSBpdGVyYWJsZS5pdGVyYXRvcjsKICAvLyBJbml0aWFsIHJ1biBvZiBlbGVtZW50cywgYXQgbGVhc3QgaGVhZENvdW50LCBhbmQgdGhlbiBjb250aW51ZSB1bnRpbAogIC8vIHBhc3NpbmcgYXQgbW9zdCBsZW5ndGhMaW1pdCBjaGFyYWN0ZXJzLgogIHdoaWxlIChsZW5ndGggPCBsZW5ndGhMaW1pdCB8fCBjb3VudCA8IGhlYWRDb3VudCkgewogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICBTdHJpbmcgbmV4dCA9ICIke2l0LmN1cnJlbnR9IjsKICAgIHBhcnRzLmFkZChuZXh0KTsKICAgIGxlbmd0aCArPSBuZXh0Lmxlbmd0aCArIG92ZXJoZWFkOwogICAgY291bnQrKzsKICB9CgogIFN0cmluZyBwZW51bHRpbWF0ZVN0cmluZzsKICBTdHJpbmcgdWx0aW1hdGVTdHJpbmc7CgogIC8vIEZpbmQgbGFzdCB0d28gZWxlbWVudHMuIE9uZSBvciBtb3JlIG9mIHRoZW0gbWF5IGFscmVhZHkgYmUgaW4gdGhlCiAgLy8gcGFydHMgYXJyYXkuIEluY2x1ZGUgdGhlaXIgbGVuZ3RoIGluIGBsZW5ndGhgLgogIE9iamVjdCBwZW51bHRpbWF0ZTsKICBPYmplY3QgdWx0aW1hdGU7CiAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICBpZiAoY291bnQgPD0gaGVhZENvdW50ICsgdGFpbENvdW50KSByZXR1cm47CiAgICB1bHRpbWF0ZVN0cmluZyA9IHBhcnRzLnJlbW92ZUxhc3QoKTsKICAgIHBlbnVsdGltYXRlU3RyaW5nID0gcGFydHMucmVtb3ZlTGFzdCgpOwogIH0gZWxzZSB7CiAgICBwZW51bHRpbWF0ZSA9IGl0LmN1cnJlbnQ7CiAgICBjb3VudCsrOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIGlmIChjb3VudCA8PSBoZWFkQ291bnQgKyAxKSB7CiAgICAgICAgcGFydHMuYWRkKCIkcGVudWx0aW1hdGUiKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdWx0aW1hdGVTdHJpbmcgPSAiJHBlbnVsdGltYXRlIjsKICAgICAgcGVudWx0aW1hdGVTdHJpbmcgPSBwYXJ0cy5yZW1vdmVMYXN0KCk7CiAgICAgIGxlbmd0aCArPSB1bHRpbWF0ZVN0cmluZy5sZW5ndGggKyBvdmVyaGVhZDsKICAgIH0gZWxzZSB7CiAgICAgIHVsdGltYXRlID0gaXQuY3VycmVudDsKICAgICAgY291bnQrKzsKICAgICAgLy8gVGhlbiBrZWVwIGxvb3BpbmcsIGtlZXBpbmcgdGhlIGxhc3QgdHdvIGVsZW1lbnRzIGluIHZhcmlhYmxlcy4KICAgICAgYXNzZXJ0KGNvdW50IDwgbWF4Q291bnQpOwogICAgICB3aGlsZSAoaXQubW92ZU5leHQoKSkgewogICAgICAgIHBlbnVsdGltYXRlID0gdWx0aW1hdGU7CiAgICAgICAgdWx0aW1hdGUgPSBpdC5jdXJyZW50OwogICAgICAgIGNvdW50Kys7CiAgICAgICAgaWYgKGNvdW50ID4gbWF4Q291bnQpIHsKICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZm91bmQgdGhlIGVuZCBiZWZvcmUgbWF4Q291bnQsIGdpdmUgdXAuCiAgICAgICAgICAvLyBUaGlzIGNhbm5vdCBoYXBwZW4gaW4gdGhlIGNvZGUgYWJvdmUgYmVjYXVzZSBlYWNoIGVudHJ5CiAgICAgICAgICAvLyBpbmNyZWFzZXMgbGVuZ3RoIGJ5IGF0IGxlYXN0IHR3bywgc28gdGhlcmUgaXMgbm8gd2F5IHRvCiAgICAgICAgICAvLyB2aXNpdCBtb3JlIHRoYW4gfjQwIGVsZW1lbnRzIGJlZm9yZSB0aGlzIGxvb3AuCgogICAgICAgICAgLy8gUmVtb3ZlIGFueSBzdXJwbHVzIGVsZW1lbnRzIHVudGlsIGxlbmd0aCwgaW5jbHVkaW5nICIsIC4uLikiLAogICAgICAgICAgLy8gaXMgYXQgbW9zdCBsZW5ndGhMaW1pdC4KICAgICAgICAgIHdoaWxlIChsZW5ndGggPiBsZW5ndGhMaW1pdCAtIGVsbGlwc2lzU2l6ZSAtIG92ZXJoZWFkICYmCiAgICAgICAgICAgICAgY291bnQgPiBoZWFkQ291bnQpIHsKICAgICAgICAgICAgbGVuZ3RoIC09IHBhcnRzLnJlbW92ZUxhc3QoKS5sZW5ndGggKyBvdmVyaGVhZDsKICAgICAgICAgICAgY291bnQtLTsKICAgICAgICAgIH0KICAgICAgICAgIHBhcnRzLmFkZCgiLi4uIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIHBlbnVsdGltYXRlU3RyaW5nID0gIiRwZW51bHRpbWF0ZSI7CiAgICAgIHVsdGltYXRlU3RyaW5nID0gIiR1bHRpbWF0ZSI7CiAgICAgIGxlbmd0aCArPSB1bHRpbWF0ZVN0cmluZy5sZW5ndGggKyBwZW51bHRpbWF0ZVN0cmluZy5sZW5ndGggKyAyICogb3ZlcmhlYWQ7CiAgICB9CiAgfQoKICAvLyBJZiB0aGVyZSBpcyBhIGdhcCBiZXR3ZWVuIHRoZSBpbml0aWFsIHJ1biBhbmQgdGhlIGxhc3QgdHdvLAogIC8vIHByZXBhcmUgdG8gYWRkIGFuIGVsbGlwc2lzLgogIFN0cmluZyBlbGlzaW9uOwogIGlmIChjb3VudCA+IHBhcnRzLmxlbmd0aCArIHRhaWxDb3VudCkgewogICAgZWxpc2lvbiA9ICIuLi4iOwogICAgbGVuZ3RoICs9IGVsbGlwc2lzU2l6ZSArIG92ZXJoZWFkOwogIH0KCiAgLy8gSWYgdGhlIGxhc3QgdHdvIGVsZW1lbnRzIHdlcmUgdmVyeSBsb25nLCBhbmQgd2UgaGF2ZSBtb3JlIHRoYW4KICAvLyBoZWFkQ291bnQgZWxlbWVudHMgaW4gdGhlIGluaXRpYWwgcnVuLCBkcm9wIHNvbWUgdG8gbWFrZSByb29tIGZvcgogIC8vIHRoZSBsYXN0IHR3by4KICB3aGlsZSAobGVuZ3RoID4gbGVuZ3RoTGltaXQgJiYgcGFydHMubGVuZ3RoID4gaGVhZENvdW50KSB7CiAgICBsZW5ndGggLT0gcGFydHMucmVtb3ZlTGFzdCgpLmxlbmd0aCArIG92ZXJoZWFkOwogICAgaWYgKGVsaXNpb24gPT0gbnVsbCkgewogICAgICBlbGlzaW9uID0gIi4uLiI7CiAgICAgIGxlbmd0aCArPSBlbGxpcHNpc1NpemUgKyBvdmVyaGVhZDsKICAgIH0KICB9CiAgaWYgKGVsaXNpb24gIT0gbnVsbCkgewogICAgcGFydHMuYWRkKGVsaXNpb24pOwogIH0KICBwYXJ0cy5hZGQocGVudWx0aW1hdGVTdHJpbmcpOwogIHBhcnRzLmFkZCh1bHRpbWF0ZVN0cmluZyk7Cn0KgZQATk48ARkBTwQ+OTIUED4BOkcBRQE8ATUlAS5AJh0uQAYvBAEiGCUGEgQBJCgEASwqIC4GICIwBhIEAUUePRIEASIeJQYRBAEpKikqMAstJQ0rJCEtCAYeBAEjHiYGEgQBLC4BJwETLhMcHA8GEgQBLAEjASApBAEuLQQBICkEAS4tBAEQHxouBhcEAQ8fGi4GDgkbHRMEAREfQBs9EwQBMx4pBiksBAEyDiAeGxoeCAYmKSwEATYOIB4bHTAKGh4IBiYpLAQBGzAxGh4xFgZGBAFLAgEsBFEcNRgBRgY2BkdDOUMpOz0YCDEGJSUKMBA7JgYoIiMVBAEqBk1FBkc8BkdDOEMpMQY3JQonEDsmBiIeBAIBSCMBPyU3OQQQAgFJRgU+Sh0GLh4BNxsBNRsBShxNTg0aLwESESNKLTYgIxUmDQQBHBkBRzQWExgwKSwLHg0aJCMQCCcuMg0dD0ggHiAfESBDRUU8AUslQyM8FQwcEgoIKiRRBgQBQSESKhUnBAFERxM9NBsXKQYEGRgEIB0CAR1kYXJ0OmNvbGxlY3Rpb24vaXRlcmFibGUuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9pdGVyYXRvci5kYXJ0hPovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gVGhlIFtIYXNOZXh0SXRlcmF0b3JdIGNsYXNzIHdyYXBzIGFuIFtJdGVyYXRvcl0gYW5kIHByb3ZpZGVzIG1ldGhvZHMgdG8KLy8vIGl0ZXJhdGUgb3ZlciBhbiBvYmplY3QgdXNpbmcgYGhhc05leHRgIGFuZCBgbmV4dGAuCi8vLwovLy8gQW4gW0hhc05leHRJdGVyYXRvcl0gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBbSXRlcmF0b3JdIGludGVyZmFjZS4KY2xhc3MgSGFzTmV4dEl0ZXJhdG9yPEU+IHsKICBzdGF0aWMgY29uc3QgaW50IF9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9OT19ORVhUID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9OT1RfTU9WRURfWUVUID0gMjsKCiAgSXRlcmF0b3I8RT4gX2l0ZXJhdG9yOwogIGludCBfc3RhdGUgPSBfTk9UX01PVkVEX1lFVDsKCiAgSGFzTmV4dEl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yKTsKCiAgYm9vbCBnZXQgaGFzTmV4dCB7CiAgICBpZiAoX3N0YXRlID09IF9OT1RfTU9WRURfWUVUKSBfbW92ZSgpOwogICAgcmV0dXJuIF9zdGF0ZSA9PSBfSEFTX05FWFRfQU5EX05FWFRfSU5fQ1VSUkVOVDsKICB9CgogIEUgbmV4dCgpIHsKICAgIC8vIENhbGwgdG8gaGFzTmV4dCBpcyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHdlIGFyZSBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdAogICAgLy8gZWxlbWVudCB3aGVuIHdlIHN0YXJ0IGl0ZXJhdGluZy4KICAgIGlmICghaGFzTmV4dCkgdGhyb3cgU3RhdGVFcnJvcigiTm8gbW9yZSBlbGVtZW50cyIpOwogICAgYXNzZXJ0KF9zdGF0ZSA9PSBfSEFTX05FWFRfQU5EX05FWFRfSU5fQ1VSUkVOVCk7CiAgICBFIHJlc3VsdCA9IF9pdGVyYXRvci5jdXJyZW50OwogICAgX21vdmUoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9tb3ZlKCkgewogICAgaWYgKF9pdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIF9zdGF0ZSA9IF9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UOwogICAgfSBlbHNlIHsKICAgICAgX3N0YXRlID0gX05PX05FWFQ7CiAgICB9CiAgfQp9Ci0ATk48ARkBTDcERhs2IScBGR8BIwEVKzQEAQ1QKDg1Ig0TBAERIC4NGQYEAgEdZGFydDpjb2xsZWN0aW9uL2l0ZXJhdG9yLmRhcnQ7b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vbGlua2VkX2hhc2hfbWFwLmRhcnSXyy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBBIGhhc2gtdGFibGUgYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgW01hcF0uCi8vLwovLy8gVGhlIGluc2VydGlvbiBvcmRlciBvZiBrZXlzIGlzIHJlbWVtYmVyZWQsCi8vLyBhbmQga2V5cyBhcmUgaXRlcmF0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBpbnNlcnRlZCBpbnRvIHRoZSBtYXAuCi8vLyBWYWx1ZXMgYXJlIGl0ZXJhdGVkIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcga2V5J3Mgb3JkZXIuCi8vLyBDaGFuZ2luZyBhIGtleSdzIHZhbHVlLCB3aGVuIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB0aGUgbWFwLAovLy8gZG9lcyBub3QgY2hhbmdlIHRoZSBpdGVyYXRpb24gb3JkZXIsCi8vLyBidXQgcmVtb3ZpbmcgdGhlIGtleSBhbmQgYWRkaW5nIGl0IGFnYWluCi8vLyB3aWxsIG1ha2UgaXQgYmUgbGFzdCBpbiB0aGUgaXRlcmF0aW9uIG9yZGVyLgovLy8KLy8vIFRoZSBrZXlzIG9mIGEgYExpbmtlZEhhc2hNYXBgIG11c3QgaGF2ZSBjb25zaXN0ZW50IFtPYmplY3QuPT1dCi8vLyBhbmQgW09iamVjdC5oYXNoQ29kZV0gaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGA9PWAgb3BlcmF0b3IKLy8vIG11c3QgZGVmaW5lIGEgc3RhYmxlIGVxdWl2YWxlbmNlIHJlbGF0aW9uIG9uIHRoZSBrZXlzIChyZWZsZXhpdmUsCi8vLyBzeW1tZXRyaWMsIHRyYW5zaXRpdmUsIGFuZCBjb25zaXN0ZW50IG92ZXIgdGltZSksIGFuZCB0aGF0IGBoYXNoQ29kZWAKLy8vIG11c3QgYmUgdGhlIHNhbWUgZm9yIG9iamVjdHMgdGhhdCBhcmUgY29uc2lkZXJlZCBlcXVhbCBieSBgPT1gLgovLy8KLy8vIFRoZSBtYXAgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KYWJzdHJhY3QgY2xhc3MgTGlua2VkSGFzaE1hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgLy8vIENyZWF0ZXMgYW4gaW5zZXJ0aW9uLW9yZGVyZWQgaGFzaC10YWJsZSBiYXNlZCBbTWFwXS4KICAvLy8KICAvLy8gSWYgW2VxdWFsc10gaXMgcHJvdmlkZWQsIGl0IGlzIHVzZWQgdG8gY29tcGFyZSB0aGUga2V5cyBpbiB0aGUgdGFibGUgd2l0aAogIC8vLyBuZXcga2V5cy4gSWYgW2VxdWFsc10gaXMgb21pdHRlZCwgdGhlIGtleSdzIG93biBbT2JqZWN0Lj09XSBpcyB1c2VkCiAgLy8vIGluc3RlYWQuCiAgLy8vCiAgLy8vIFNpbWlsYXIsIGlmIFtoYXNoQ29kZV0gaXMgcHJvdmlkZWQsIGl0IGlzIHVzZWQgdG8gcHJvZHVjZSBhIGhhc2ggdmFsdWUKICAvLy8gZm9yIGtleXMgaW4gb3JkZXIgdG8gcGxhY2UgdGhlbSBpbiB0aGUgaGFzaCB0YWJsZS4gSWYgaXQgaXMgb21pdHRlZCwgdGhlCiAgLy8vIGtleSdzIG93biBbT2JqZWN0Lmhhc2hDb2RlXSBpcyB1c2VkLgogIC8vLwogIC8vLyBJZiB1c2luZyBtZXRob2RzIGxpa2UgW29wZXJhdG9yIFtdXSwgW3JlbW92ZV0gYW5kIFtjb250YWluc0tleV0gdG9nZXRoZXIKICAvLy8gd2l0aCBhIGN1c3RvbSBlcXVhbGl0eSBhbmQgaGFzaGNvZGUsIGFuIGV4dHJhIGBpc1ZhbGlkS2V5YCBmdW5jdGlvbgogIC8vLyBjYW4gYmUgc3VwcGxpZWQuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIFtlcXVhbHNdIG9yCiAgLy8vIFtoYXNoQ29kZV0gd2l0aCBhbiBhcmd1bWVudCB0aGF0IG1heSBub3QgYmUgYSBbS10gaW5zdGFuY2UsIGFuZCBpZiB0aGUKICAvLy8gY2FsbCByZXR1cm5zIGZhbHNlLCB0aGUga2V5IGlzIGFzc3VtZWQgdG8gbm90IGJlIGluIHRoZSBzZXQuCiAgLy8vIFRoZSBbaXNWYWxpZEtleV0gZnVuY3Rpb24gZGVmYXVsdHMgdG8ganVzdCB0ZXN0aW5nIGlmIHRoZSBvYmplY3QgaXMgYQogIC8vLyBbS10gaW5zdGFuY2UuCiAgLy8vCiAgLy8vIEV4YW1wbGU6CiAgLy8vCiAgLy8vICAgICBuZXcgTGlua2VkSGFzaE1hcDxpbnQsaW50PihlcXVhbHM6IChpbnQgYSwgaW50IGIpID0+IChiIC0gYSkgJSA1ID09IDAsCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogKGludCBlKSA9PiBlICUgNSkKICAvLy8KICAvLy8gVGhpcyBleGFtcGxlIG1hcCBkb2VzIG5vdCBuZWVkIGFuIGBpc1ZhbGlkS2V5YCBmdW5jdGlvbiB0byBiZSBwYXNzZWQuCiAgLy8vIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIGFjY2VwdHMgb25seSBgaW50YCB2YWx1ZXMsIHdoaWNoIGNhbiBzYWZlbHkgYmUKICAvLy8gcGFzc2VkIHRvIGJvdGggdGhlIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgIGZ1bmN0aW9ucy4KICAvLy8KICAvLy8gSWYgbmVpdGhlciBgZXF1YWxzYCwgYGhhc2hDb2RlYCwgbm9yIGBpc1ZhbGlkS2V5YCBpcyBwcm92aWRlZCwKICAvLy8gdGhlIGRlZmF1bHQgYGlzVmFsaWRLZXlgIGluc3RlYWQgYWNjZXB0cyBhbGwga2V5cy4KICAvLy8gVGhlIGRlZmF1bHQgZXF1YWxpdHkgYW5kIGhhc2hjb2RlIG9wZXJhdGlvbnMgYXJlIGFzc3VtZWQgdG8gd29yayBvbiBhbGwKICAvLy8gb2JqZWN0cy4KICAvLy8KICAvLy8gTGlrZXdpc2UsIGlmIGBlcXVhbHNgIGlzIFtpZGVudGljYWxdLCBgaGFzaENvZGVgIGlzIFtpZGVudGl0eUhhc2hDb2RlXQogIC8vLyBhbmQgYGlzVmFsaWRLZXlgIGlzIG9taXR0ZWQsIHRoZSByZXN1bHRpbmcgbWFwIGlzIGlkZW50aXR5IGJhc2VkLAogIC8vLyBhbmQgdGhlIGBpc1ZhbGlkS2V5YCBkZWZhdWx0cyB0byBhY2NlcHRpbmcgYWxsIGtleXMuCiAgLy8vIFN1Y2ggYSBtYXAgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgdXNpbmcgW0xpbmtlZEhhc2hNYXAuaWRlbnRpdHldLgogIC8vLwogIC8vLyBUaGUgdXNlZCBgZXF1YWxzYCBhbmQgYGhhc2hDb2RlYCBtZXRob2Qgc2hvdWxkIGFsd2F5cyBiZSBjb25zaXN0ZW50LAogIC8vLyBzbyB0aGF0IGlmIGBlcXVhbHMoYSwgYilgIHRoZW4gYGhhc2hDb2RlKGEpID09IGhhc2hDb2RlKGIpYC4gVGhlIGhhc2gKICAvLy8gb2YgYW4gb2JqZWN0LCBvciB3aGF0IGl0IGNvbXBhcmVzIGVxdWFsIHRvLCBzaG91bGQgbm90IGNoYW5nZSB3aGlsZSB0aGUKICAvLy8gb2JqZWN0IGlzIGluIHRoZSB0YWJsZS4gSWYgaXQgZG9lcyBjaGFuZ2UsIHRoZSByZXN1bHQgaXMgdW5wcmVkaWN0YWJsZS4KICAvLy8KICAvLy8gSWYgeW91IHN1cHBseSBvbmUgb2YgW2VxdWFsc10gYW5kIFtoYXNoQ29kZV0sCiAgLy8vIHlvdSBzaG91bGQgZ2VuZXJhbGx5IGFsc28gdG8gc3VwcGx5IHRoZSBvdGhlci4KICBleHRlcm5hbCBmYWN0b3J5IExpbmtlZEhhc2hNYXAoCiAgICAgIHtib29sIGVxdWFscyhLIGtleTEsIEsga2V5MiksCiAgICAgIGludCBoYXNoQ29kZShLIGtleSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSk7CgogIC8vLyBDcmVhdGVzIGFuIGluc2VydGlvbi1vcmRlcmVkIGlkZW50aXR5LWJhc2VkIG1hcC4KICAvLy8KICAvLy8gRWZmZWN0aXZlbHkgYSBzaG9ydGhhbmQgZm9yOgogIC8vLwogIC8vLyAgICAgbmV3IExpbmtlZEhhc2hNYXA8SywgVj4oZXF1YWxzOiBpZGVudGljYWwsCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWRlbnRpdHlIYXNoQ29kZSkKICBleHRlcm5hbCBmYWN0b3J5IExpbmtlZEhhc2hNYXAuaWRlbnRpdHkoKTsKCiAgLy8vIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gdGhhdCBjb250YWlucyBhbGwga2V5IHZhbHVlIHBhaXJzIG9mIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG11c3QgYWxsIGJlIGluc3RhbmNlcyBvZiBbS10gYW5kIHRoZSB2YWx1ZXMgdG8gW1ZdLgogIC8vLyBUaGUgW290aGVyXSBtYXAgaXRzZWxmIGNhbiBoYXZlIGFueSB0eXBlLgogIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5mcm9tKE1hcCBvdGhlcikgewogICAgTGlua2VkSGFzaE1hcDxLLCBWPiByZXN1bHQgPSBMaW5rZWRIYXNoTWFwPEssIFY+KCk7CiAgICBvdGhlci5mb3JFYWNoKChrLCB2KSB7CiAgICAgIHJlc3VsdFtrXSA9IHY7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtMaW5rZWRIYXNoTWFwXSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkgdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICBmYWN0b3J5IExpbmtlZEhhc2hNYXAub2YoTWFwPEssIFY+IG90aGVyKSA9PgogICAgICBMaW5rZWRIYXNoTWFwPEssIFY+KCkuLmFkZEFsbChvdGhlcik7CgogIC8vLyBDcmVhdGVzIGEgW0xpbmtlZEhhc2hNYXBdIHdoZXJlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgLy8vIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIEZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIFtpdGVyYWJsZV0gdGhpcyBjb25zdHJ1Y3RvciBjb21wdXRlcyBhIGtleS92YWx1ZQogIC8vLyBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUgbGFzdAogIC8vLyBvY2N1cnJlbmNlIG9mIGEga2V5IHdpbGwgc2ltcGx5IG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIElmIG5vIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGZvciBba2V5XSBhbmQgW3ZhbHVlXSB0aGUgZGVmYXVsdCBpcyB0aGUKICAvLy8gaWRlbnRpdHkgZnVuY3Rpb24uCiAgZmFjdG9yeSBMaW5rZWRIYXNoTWFwLmZyb21JdGVyYWJsZShJdGVyYWJsZSBpdGVyYWJsZSwKICAgICAge0sga2V5KGVsZW1lbnQpLCBWIHZhbHVlKGVsZW1lbnQpfSkgewogICAgTGlua2VkSGFzaE1hcDxLLCBWPiBtYXAgPSBMaW5rZWRIYXNoTWFwPEssIFY+KCk7CiAgICBNYXBCYXNlLl9maWxsTWFwV2l0aE1hcHBlZEl0ZXJhYmxlKG1hcCwgaXRlcmFibGUsIGtleSwgdmFsdWUpOwogICAgcmV0dXJuIG1hcDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0xpbmtlZEhhc2hNYXBdIGFzc29jaWF0aW5nIHRoZSBnaXZlbiBba2V5c10gdG8gW3ZhbHVlc10uCiAgLy8vCiAgLy8vIFRoaXMgY29uc3RydWN0b3IgaXRlcmF0ZXMgb3ZlciBba2V5c10gYW5kIFt2YWx1ZXNdIGFuZCBtYXBzIGVhY2ggZWxlbWVudCBvZgogIC8vLyBba2V5c10gdG8gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBbdmFsdWVzXS4KICAvLy8KICAvLy8gSWYgW2tleXNdIGNvbnRhaW5zIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lcywgdGhlIGxhc3Qgb2NjdXJyZW5jZQogIC8vLyBvdmVyd3JpdGVzIHRoZSBwcmV2aW91cyB2YWx1ZS4KICAvLy8KICAvLy8gSXQgaXMgYW4gZXJyb3IgaWYgdGhlIHR3byBbSXRlcmFibGVdcyBkb24ndCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4KICBmYWN0b3J5IExpbmtlZEhhc2hNYXAuZnJvbUl0ZXJhYmxlcyhJdGVyYWJsZTxLPiBrZXlzLCBJdGVyYWJsZTxWPiB2YWx1ZXMpIHsKICAgIExpbmtlZEhhc2hNYXA8SywgVj4gbWFwID0gTGlua2VkSGFzaE1hcDxLLCBWPigpOwogICAgTWFwQmFzZS5fZmlsbE1hcFdpdGhJdGVyYWJsZXMobWFwLCBrZXlzLCB2YWx1ZXMpOwogICAgcmV0dXJuIG1hcDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0xpbmtlZEhhc2hNYXBdIGNvbnRhaW5pbmcgdGhlIGVudHJpZXMgb2YgW2VudHJpZXNdLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgbmV3IGBMaW5rZWRIYXNoTWFwPEssIFY+YCB3aGVyZSBhbGwgZW50cmllcyBvZiBbZW50cmllc10KICAvLy8gaGF2ZSBiZWVuIGFkZGVkIGluIGl0ZXJhdGlvbiBvcmRlci4KICAvLy8KICAvLy8gSWYgbXVsdGlwbGUgW2VudHJpZXNdIGhhdmUgdGhlIHNhbWUga2V5LAogIC8vLyBsYXRlciBvY2N1cnJlbmNlcyBvdmVyd3JpdGUgdGhlIGVhcmxpZXIgb25lcy4KICBAU2luY2UoIjIuMSIpCiAgZmFjdG9yeSBMaW5rZWRIYXNoTWFwLmZyb21FbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSA9PgogICAgICA8SywgVj57fS4uYWRkRW50cmllcyhlbnRyaWVzKTsKfQqAjwBOTjwBGQEwBC9IPEApLTEEQ01GSkQEJDo7BlBKDwZNTysGT0pKTUNMFAYPBlFBBkxKPAZFOU4PBk1IO0kGS0xOTgY0NSIkGycBNwYjBjU+LQFOBkMwKjgbFQgTBAFOLywBUBIGTzgGSUQGShk4LDVDEAQBSgZSNwZNJQZITjU2EAQBRQZJKgYvNBBJJQIBJGRhcnQ6Y29sbGVjdGlvbi9saW5rZWRfaGFzaF9tYXAuZGFydDtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9saW5rZWRfaGFzaF9zZXQuZGFydJTRLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEEgW0xpbmtlZEhhc2hTZXRdIGlzIGEgaGFzaC10YWJsZSBiYXNlZCBbU2V0XSBpbXBsZW1lbnRhdGlvbi4KLy8vCi8vLyBUaGUgYExpbmtlZEhhc2hTZXRgIGFsc28ga2VlcCB0cmFjayBvZiB0aGUgb3JkZXIgdGhhdCBlbGVtZW50cyB3ZXJlIGluc2VydGVkCi8vLyBpbiwgYW5kIGl0ZXJhdGlvbiBoYXBwZW5zIGluIGZpcnN0LXRvLWxhc3QgaW5zZXJ0aW9uIG9yZGVyLgovLy8KLy8vIFRoZSBlbGVtZW50cyBvZiBhIGBMaW5rZWRIYXNoU2V0YCBtdXN0IGhhdmUgY29uc2lzdGVudCBbT2JqZWN0Lj09XQovLy8gYW5kIFtPYmplY3QuaGFzaENvZGVdIGltcGxlbWVudGF0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHRoZSBgPT1gIG9wZXJhdG9yCi8vLyBtdXN0IGRlZmluZSBhIHN0YWJsZSBlcXVpdmFsZW5jZSByZWxhdGlvbiBvbiB0aGUgZWxlbWVudHMgKHJlZmxleGl2ZSwKLy8vIHN5bW1ldHJpYywgdHJhbnNpdGl2ZSwgYW5kIGNvbnNpc3RlbnQgb3ZlciB0aW1lKSwgYW5kIHRoYXQgYGhhc2hDb2RlYAovLy8gbXVzdCBiZSB0aGUgc2FtZSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjb25zaWRlcmVkIGVxdWFsIGJ5IGA9PWAuCi8vLwovLy8gVGhlIHNldCBhbGxvd3MgYG51bGxgIGFzIGFuIGVsZW1lbnQuCi8vLwovLy8gSXRlcmF0aW9uIG9mIGVsZW1lbnRzIGlzIGRvbmUgaW4gZWxlbWVudCBpbnNlcnRpb24gb3JkZXIuCi8vLyBBbiBlbGVtZW50IHRoYXQgd2FzIGFkZGVkIGFmdGVyIGFub3RoZXIgd2lsbCBvY2N1ciBsYXRlciBpbiB0aGUgaXRlcmF0aW9uLgovLy8gQWRkaW5nIGFuIGVsZW1lbnQgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBzZXQKLy8vIGRvZXMgbm90IGNoYW5nZSBpdHMgcG9zaXRpb24gaW4gdGhlIGl0ZXJhdGlvbiBvcmRlciwKLy8vIGJ1dCByZW1vdmluZyBhbiBlbGVtZW50IGFuZCBhZGRpbmcgaXQgYWdhaW4sCi8vLyB3aWxsIG1ha2UgaXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBpdGVyYXRpb24uCi8vLwovLy8gTW9zdCBzaW1wbGUgb3BlcmF0aW9ucyBvbiBgSGFzaFNldGAgYXJlIGRvbmUgaW4gKHBvdGVudGlhbGx5IGFtb3J0aXplZCkKLy8vIGNvbnN0YW50IHRpbWU6IFthZGRdLCBbY29udGFpbnNdLCBbcmVtb3ZlXSwgYW5kIFtsZW5ndGhdLCBwcm92aWRlZCB0aGUgaGFzaAovLy8gY29kZXMgb2Ygb2JqZWN0cyBhcmUgd2VsbCBkaXN0cmlidXRlZC4uCmFic3RyYWN0IGNsYXNzIExpbmtlZEhhc2hTZXQ8RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIC8vLyBDcmVhdGUgYW4gaW5zZXJ0aW9uLW9yZGVyZWQgaGFzaCBzZXQgdXNpbmcgdGhlIHByb3ZpZGVkCiAgLy8vIFtlcXVhbHNdIGFuZCBbaGFzaENvZGVdLgogIC8vLwogIC8vLyBUaGUgcHJvdmlkZWQgW2VxdWFsc10gbXVzdCBkZWZpbmUgYSBzdGFibGUgZXF1aXZhbGVuY2UgcmVsYXRpb24sIGFuZAogIC8vLyBbaGFzaENvZGVdIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIFtlcXVhbHNdLiBJZiB0aGUgW2VxdWFsc10gb3IgW2hhc2hDb2RlXQogIC8vLyBtZXRob2RzIHdvbid0IHdvcmsgb24gYWxsIG9iamVjdHMsIGJ1dCBvbmx5IG9uIHNvbWUgaW5zdGFuY2VzIG9mIEUsIHRoZQogIC8vLyBbaXNWYWxpZEtleV0gcHJlZGljYXRlIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBrZXlzIHRoYXQgdGhlIGZ1bmN0aW9ucwogIC8vLyBhcmUgYXBwbGllZCB0by4KICAvLy8gQW55IGtleSBmb3Igd2hpY2ggW2lzVmFsaWRLZXldIHJldHVybnMgZmFsc2UgaXMgYXV0b21hdGljYWxseSBhc3N1bWVkCiAgLy8vIHRvIG5vdCBiZSBpbiB0aGUgc2V0IHdoZW4gYXNraW5nIGBjb250YWluc2AuCiAgLy8vCiAgLy8vIElmIFtlcXVhbHNdIG9yIFtoYXNoQ29kZV0gYXJlIG9taXR0ZWQsIHRoZSBzZXQgdXNlcwogIC8vLyB0aGUgZWxlbWVudHMnIGludHJpbnNpYyBbT2JqZWN0Lj09XSBhbmQgW09iamVjdC5oYXNoQ29kZV0sCiAgLy8vIGFuZCBbaXNWYWxpZEtleV0gaXMgaWdub3JlZCBzaW5jZSB0aGVzZSBvcGVyYXRpb25zIGFyZSBhc3N1bWVkCiAgLy8vIHRvIHdvcmsgb24gYWxsIG9iamVjdHMuCiAgLy8vCiAgLy8vIElmIHlvdSBzdXBwbHkgb25lIG9mIFtlcXVhbHNdIGFuZCBbaGFzaENvZGVdLAogIC8vLyB5b3Ugc2hvdWxkIGdlbmVyYWxseSBhbHNvIHRvIHN1cHBseSB0aGUgb3RoZXIuCiAgLy8vCiAgLy8vIElmIHRoZSBzdXBwbGllZCBgZXF1YWxzYCBvciBgaGFzaENvZGVgIGZ1bmN0aW9ucyB3b24ndCB3b3JrIG9uIGFsbCBbRV0KICAvLy8gb2JqZWN0cywgYW5kIHRoZSBtYXAgd2lsbCBiZSB1c2VkIGluIGEgc2V0dGluZyB3aGVyZSBhIG5vbi1gRWAgb2JqZWN0CiAgLy8vIGlzIHBhc3NlZCB0bywgZS5nLiwgYGNvbnRhaW5zYCwgdGhlbiB0aGUgW2lzVmFsaWRLZXldIGZ1bmN0aW9uIHNob3VsZAogIC8vLyBhbHNvIGJlIHN1cHBsaWVkLgogIC8vLwogIC8vLyBJZiBbaXNWYWxpZEtleV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGVzdGluZyBpZiB0aGUgb2JqZWN0IGlzIGFuCiAgLy8vIFtFXSBpbnN0YW5jZS4gVGhhdCBtZWFucyB0aGF0OgogIC8vLwogIC8vLyAgICAgbmV3IExpbmtlZEhhc2hTZXQ8aW50PihlcXVhbHM6IChpbnQgZTEsIGludCBlMikgPT4gKGUxIC0gZTIpICUgNSA9PSAwLAogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogKGludCBlKSA9PiBlICUgNSkKICAvLy8KICAvLy8gZG9lcyBub3QgbmVlZCBhbiBgaXNWYWxpZEtleWAgYXJndW1lbnQsIGJlY2F1c2UgaXQgZGVmYXVsdHMgdG8gb25seQogIC8vLyBhY2NlcHRpbmcgYGludGAgdmFsdWVzIHdoaWNoIGFyZSBhY2NlcHRlZCBieSBib3RoIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgLgogIC8vLwogIC8vLyBJZiBuZWl0aGVyIGBlcXVhbHNgLCBgaGFzaENvZGVgLCBub3IgYGlzVmFsaWRLZXlgIGlzIHByb3ZpZGVkLAogIC8vLyB0aGUgZGVmYXVsdCBgaXNWYWxpZEtleWAgaW5zdGVhZCBhY2NlcHRzIGFsbCB2YWx1ZXMuCiAgLy8vIFRoZSBkZWZhdWx0IGVxdWFsaXR5IGFuZCBoYXNoY29kZSBvcGVyYXRpb25zIGFyZSBhc3N1bWVkIHRvIHdvcmsgb24gYWxsCiAgLy8vIG9iamVjdHMuCiAgLy8vCiAgLy8vIExpa2V3aXNlLCBpZiBgZXF1YWxzYCBpcyBbaWRlbnRpY2FsXSwgYGhhc2hDb2RlYCBpcyBbaWRlbnRpdHlIYXNoQ29kZV0KICAvLy8gYW5kIGBpc1ZhbGlkS2V5YCBpcyBvbWl0dGVkLCB0aGUgcmVzdWx0aW5nIHNldCBpcyBpZGVudGl0eSBiYXNlZCwKICAvLy8gYW5kIHRoZSBgaXNWYWxpZEtleWAgZGVmYXVsdHMgdG8gYWNjZXB0aW5nIGFsbCBrZXlzLgogIC8vLyBTdWNoIGEgbWFwIGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IHVzaW5nIFtMaW5rZWRIYXNoU2V0LmlkZW50aXR5XS4KICBleHRlcm5hbCBmYWN0b3J5IExpbmtlZEhhc2hTZXQoCiAgICAgIHtib29sIGVxdWFscyhFIGUxLCBFIGUyKSwKICAgICAgaW50IGhhc2hDb2RlKEUgZSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSk7CgogIC8vLyBDcmVhdGVzIGFuIGluc2VydGlvbi1vcmRlcmVkIGlkZW50aXR5LWJhc2VkIHNldC4KICAvLy8KICAvLy8gRWZmZWN0aXZlbHkgYSBzaG9ydGhhbmQgZm9yOgogIC8vLwogIC8vLyAgICAgbmV3IExpbmtlZEhhc2hTZXQ8RT4oZXF1YWxzOiBpZGVudGljYWwsCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWRlbnRpdHlIYXNoQ29kZSkKICBleHRlcm5hbCBmYWN0b3J5IExpbmtlZEhhc2hTZXQuaWRlbnRpdHkoKTsKCiAgLy8vIENyZWF0ZSBhIGxpbmtlZCBoYXNoIHNldCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBDcmVhdGVzIGEgbGlua2VkIGhhc2ggc2V0IGFzIGJ5IGBuZXcgTGlua2VkSGFzaFNldDxFPigpYCBhbmQgYWRkcyBlYWNoCiAgLy8vIGVsZW1lbnQgb2YgYGVsZW1lbnRzYCB0byB0aGlzIHNldCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgaXRlcmF0ZWQuCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsCiAgLy8vIHNvIHRoaXMgY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFNldGAsIGZvciBleGFtcGxlIGFzOgogIC8vLwogIC8vLyAgICAgU2V0PFN1cGVyVHlwZT4gc3VwZXJTZXQgPSAuLi47CiAgLy8vICAgICBJdGVyYWJsZTxTdXBlclR5cGU+IHRtcCA9IHN1cGVyU2V0LndoZXJlKChlKSA9PiBlIGlzIFN1YlR5cGUpOwogIC8vLyAgICAgU2V0PFN1YlR5cGU+IHN1YlNldCA9IG5ldyBMaW5rZWRIYXNoU2V0PFN1YlR5cGU+LmZyb20odG1wKTsKICBmYWN0b3J5IExpbmtlZEhhc2hTZXQuZnJvbShJdGVyYWJsZSBlbGVtZW50cykgewogICAgTGlua2VkSGFzaFNldDxFPiByZXN1bHQgPSBMaW5rZWRIYXNoU2V0PEU+KCk7CiAgICBmb3IgKGZpbmFsIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlIGEgbGlua2VkIGhhc2ggc2V0IGZyb20gW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gQ3JlYXRlcyBhIGxpbmtlZCBoYXNoIHNldCBhcyBieSBgbmV3IExpbmtlZEhhc2hTZXQ8RT4oKWAgYW5kIGFkZHMgZWFjaAogIC8vLyBlbGVtZW50IG9mIGBlbGVtZW50c2AgdG8gdGhpcyBzZXQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGl0ZXJhdGVkLgogIGZhY3RvcnkgTGlua2VkSGFzaFNldC5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4KICAgICAgTGlua2VkSGFzaFNldDxFPigpLi5hZGRBbGwoZWxlbWVudHMpOwoKICAvLy8gRXhlY3V0ZXMgYSBmdW5jdGlvbiBvbiBlYWNoIGVsZW1lbnQgb2YgdGhlIHNldC4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnRzIGFyZSBpdGVyYXRlZCBpbiBpbnNlcnRpb24gb3JkZXIuCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpOwoKICAvLy8gUHJvdmlkZXMgYW4gaXRlcmF0b3IgdGhhdCBpdGVyYXRlcyBvdmVyIHRoZSBlbGVtZW50cyBpbiBpbnNlcnRpb24gb3JkZXIuCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yOwp9CnoATk48ARkBQgRRQARHTUpKRAQpBD5PMTkxMwRMUCw0Ph8GS1FOURZMMwY6QUUeBjQ1Bk1MTBgGTSUGUT0GSlEGRTtODwZNSDtJIiAZJwE3BiMGMjstAToGTUgGNUBMBilJRjIyJhsGEwQBMAZNSDQsATYGNCgBTxwCASRkYXJ0OmNvbGxlY3Rpb24vbGlua2VkX2hhc2hfc2V0LmRhcnQ3b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vbGlua2VkX2xpc3QuZGFydJ69Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEEgc3BlY2lhbGl6ZWQgZG91YmxlLWxpbmtlZCBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgZXh0ZW5kcyBbTGlua2VkTGlzdEVudHJ5XS4KLy8vCi8vLyBUaGlzIGlzIG5vdCBhIGdlbmVyaWMgZGF0YSBzdHJ1Y3R1cmUuIEl0IG9ubHkgYWNjZXB0cyBlbGVtZW50cyB0aGF0IGV4dGVuZAovLy8gdGhlIFtMaW5rZWRMaXN0RW50cnldIGNsYXNzLiBTZWUgdGhlIFtRdWV1ZV0gaW1wbGVtZW50YXRpb25zIGZvciBnZW5lcmljCi8vLyBjb2xsZWN0aW9ucyB0aGF0IGFsbG93IGNvbnN0YW50IHRpbWUgYWRkaW5nIGFuZCByZW1vdmluZyBhdCB0aGUgZW5kcy4KLy8vCi8vLyBUaGlzIGlzIG5vdCBhIFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4gRGVzcGl0ZSBpdHMgbmFtZSwgdGhpcyBjbGFzcyBkb2VzIG5vdAovLy8gaW1wbGVtZW50IHRoZSBbTGlzdF0gaW50ZXJmYWNlLiBJdCBkb2VzIG5vdCBhbGxvdyBjb25zdGFudCB0aW1lIGxvb2t1cCBieQovLy8gaW5kZXguCi8vLwovLy8gQmVjYXVzZSB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBjb250YWluIHRoZSBsaW5rcyBvZiB0aGlzIGxpbmtlZCBsaXN0LAovLy8gZWFjaCBlbGVtZW50IGNhbiBiZSBpbiBvbmx5IG9uZSBsaXN0IGF0IGEgdGltZS4gVG8gYWRkIGFuIGVsZW1lbnQgdG8gYW5vdGhlcgovLy8gbGlzdCwgaXQgbXVzdCBmaXJzdCBiZSByZW1vdmVkIGZyb20gaXRzIGN1cnJlbnQgbGlzdCAoaWYgYW55KS4KLy8vCi8vLyBJbiByZXR1cm4sIGVhY2ggZWxlbWVudCBrbm93cyBpdHMgb3duIHBsYWNlIGluIHRoZSBsaW5rZWQgbGlzdCwgYXMgd2VsbCBhcwovLy8gd2hpY2ggbGlzdCBpdCBpcyBpbi4gVGhpcyBhbGxvd3MgY29uc3RhbnQgdGltZQovLy8gW0xpbmtlZExpc3RFbnRyeS5pbnNlcnRBZnRlcl0sIFtMaW5rZWRMaXN0RW50cnkuaW5zZXJ0QmVmb3JlXSBhbmQKLy8vIFtMaW5rZWRMaXN0RW50cnkudW5saW5rXSBvcGVyYXRpb25zIHdoZW4gYWxsIHlvdSBoYXZlIGlzIHRoZSBlbGVtZW50LgovLy8KLy8vIEEgYExpbmtlZExpc3RgIGFsc28gYWxsb3dzIGNvbnN0YW50IHRpbWUgYWRkaW5nIGFuZCByZW1vdmluZyBhdCBlaXRoZXIgZW5kLAovLy8gYW5kIGEgY29uc3RhbnQgdGltZSBsZW5ndGggZ2V0dGVyLgpjbGFzcyBMaW5rZWRMaXN0PEUgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8RT4+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGludCBfbW9kaWZpY2F0aW9uQ291bnQgPSAwOwogIGludCBfbGVuZ3RoID0gMDsKICBFIF9maXJzdDsKCiAgLy8vIENvbnN0cnVjdCBhIG5ldyBlbXB0eSBsaW5rZWQgbGlzdC4KICBMaW5rZWRMaXN0KCk7CgogIC8vLyBBZGQgW2VudHJ5XSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5rZWQgbGlzdC4KICB2b2lkIGFkZEZpcnN0KEUgZW50cnkpIHsKICAgIF9pbnNlcnRCZWZvcmUoX2ZpcnN0LCBlbnRyeSwgdXBkYXRlRmlyc3Q6IHRydWUpOwogICAgX2ZpcnN0ID0gZW50cnk7CiAgfQoKICAvLy8gQWRkIFtlbnRyeV0gdG8gdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QuCiAgdm9pZCBhZGQoRSBlbnRyeSkgewogICAgX2luc2VydEJlZm9yZShfZmlyc3QsIGVudHJ5LCB1cGRhdGVGaXJzdDogZmFsc2UpOwogIH0KCiAgLy8vIEFkZCBbZW50cmllc10gdG8gdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QuCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZW50cmllcykgewogICAgZW50cmllcy5mb3JFYWNoKGFkZCk7CiAgfQoKICAvLy8gUmVtb3ZlIFtlbnRyeV0gZnJvbSB0aGUgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFJldHVybnMgZmFsc2UgYW5kIGRvZXMgbm90aGluZyBpZiBbZW50cnldIGlzIG5vdCBpbiB0aGlzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZW50cnkudW5saW5rKClgIGlmIHRoZSBlbnRyeSBpcyBpbiB0aGlzCiAgLy8vIGxpc3QuCiAgYm9vbCByZW1vdmUoRSBlbnRyeSkgewogICAgaWYgKGVudHJ5Ll9saXN0ICE9IHRoaXMpIHJldHVybiBmYWxzZTsKICAgIF91bmxpbmsoZW50cnkpOyAvLyBVbmxpbmsgd2lsbCBkZWNyZW1lbnQgbGVuZ3RoLgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX0xpbmtlZExpc3RJdGVyYXRvcjxFPih0aGlzKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2xlbmd0aDsKCiAgLy8vIFJlbW92ZSBhbGwgZWxlbWVudHMgZnJvbSB0aGlzIGxpbmtlZCBsaXN0LgogIHZvaWQgY2xlYXIoKSB7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIGlmIChpc0VtcHR5KSByZXR1cm47CgogICAgRSBuZXh0ID0gX2ZpcnN0OwogICAgZG8gewogICAgICBFIGVudHJ5ID0gbmV4dDsKICAgICAgbmV4dCA9IGVudHJ5Ll9uZXh0OwogICAgICBlbnRyeS5fbmV4dCA9IGVudHJ5Ll9wcmV2aW91cyA9IGVudHJ5Ll9saXN0ID0gbnVsbDsKICAgIH0gd2hpbGUgKCFpZGVudGljYWwobmV4dCwgX2ZpcnN0KSk7CgogICAgX2ZpcnN0ID0gbnVsbDsKICAgIF9sZW5ndGggPSAwOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcignTm8gc3VjaCBlbGVtZW50Jyk7CiAgICB9CiAgICByZXR1cm4gX2ZpcnN0OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAoaXNFbXB0eSkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCdObyBzdWNoIGVsZW1lbnQnKTsKICAgIH0KICAgIHJldHVybiBfZmlyc3QuX3ByZXZpb3VzOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoJ05vIHN1Y2ggZWxlbWVudCcpOwogICAgfQogICAgaWYgKF9sZW5ndGggPiAxKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoJ1RvbyBtYW55IGVsZW1lbnRzJyk7CiAgICB9CiAgICByZXR1cm4gX2ZpcnN0OwogIH0KCiAgLy8vIENhbGwgW2FjdGlvbl0gd2l0aCBlYWNoIGVudHJ5IGluIHRoaXMgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIEl0J3MgYW4gZXJyb3IgaWYgW2FjdGlvbl0gbW9kaWZ5IHRoZSBsaW5rZWQgbGlzdC4KICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oRSBlbnRyeSkpIHsKICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGlmIChpc0VtcHR5KSByZXR1cm47CgogICAgRSBjdXJyZW50ID0gX2ZpcnN0OwogICAgZG8gewogICAgICBhY3Rpb24oY3VycmVudCk7CiAgICAgIGlmIChtb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgY3VycmVudCA9IGN1cnJlbnQuX25leHQ7CiAgICB9IHdoaWxlICghaWRlbnRpY2FsKGN1cnJlbnQsIF9maXJzdCkpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbGVuZ3RoID09IDA7CgogIC8vLyBJbnNlcnRzIFtuZXdFbnRyeV0gYXMgbGFzdCBlbnRyeSBvZiB0aGUgbGlzdC4KICAvLy8KICAvLy8gSWYgW3VwZGF0ZUZpcnN0XSBpcyB0cnVlIGFuZCBbZW50cnldIGlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbGlzdCwKICAvLy8gdXBkYXRlcyB0aGUgW19maXJzdF0gZmllbGQgdG8gcG9pbnQgdG8gdGhlIFtuZXdFbnRyeV0gYXMgZmlyc3QgZW50cnkuCiAgdm9pZCBfaW5zZXJ0QmVmb3JlKEUgZW50cnksIEUgbmV3RW50cnksIHtib29sIHVwZGF0ZUZpcnN0fSkgewogICAgaWYgKG5ld0VudHJ5Lmxpc3QgIT0gbnVsbCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCdMaW5rZWRMaXN0RW50cnkgaXMgYWxyZWFkeSBpbiBhIExpbmtlZExpc3QnKTsKICAgIH0KICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwoKICAgIG5ld0VudHJ5Ll9saXN0ID0gdGhpczsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIGFzc2VydChlbnRyeSA9PSBudWxsKTsKICAgICAgbmV3RW50cnkuX3ByZXZpb3VzID0gbmV3RW50cnkuX25leHQgPSBuZXdFbnRyeTsKICAgICAgX2ZpcnN0ID0gbmV3RW50cnk7CiAgICAgIF9sZW5ndGgrKzsKICAgICAgcmV0dXJuOwogICAgfQogICAgRSBwcmVkZWNlc3NvciA9IGVudHJ5Ll9wcmV2aW91czsKICAgIEUgc3VjY2Vzc29yID0gZW50cnk7CiAgICBuZXdFbnRyeS5fcHJldmlvdXMgPSBwcmVkZWNlc3NvcjsKICAgIG5ld0VudHJ5Ll9uZXh0ID0gc3VjY2Vzc29yOwogICAgcHJlZGVjZXNzb3IuX25leHQgPSBuZXdFbnRyeTsKICAgIHN1Y2Nlc3Nvci5fcHJldmlvdXMgPSBuZXdFbnRyeTsKICAgIGlmICh1cGRhdGVGaXJzdCAmJiBpZGVudGljYWwoZW50cnksIF9maXJzdCkpIHsKICAgICAgX2ZpcnN0ID0gbmV3RW50cnk7CiAgICB9CiAgICBfbGVuZ3RoKys7CiAgfQoKICB2b2lkIF91bmxpbmsoRSBlbnRyeSkgewogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICBlbnRyeS5fbmV4dC5fcHJldmlvdXMgPSBlbnRyeS5fcHJldmlvdXM7CiAgICBFIG5leHQgPSBlbnRyeS5fcHJldmlvdXMuX25leHQgPSBlbnRyeS5fbmV4dDsKICAgIF9sZW5ndGgtLTsKICAgIGVudHJ5Ll9saXN0ID0gZW50cnkuX25leHQgPSBlbnRyeS5fcHJldmlvdXMgPSBudWxsOwogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgX2ZpcnN0ID0gbnVsbDsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKGVudHJ5LCBfZmlyc3QpKSB7CiAgICAgIF9maXJzdCA9IG5leHQ7CiAgICB9CiAgfQp9CgpjbGFzcyBfTGlua2VkTGlzdEl0ZXJhdG9yPEUgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8RT4+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIExpbmtlZExpc3Q8RT4gX2xpc3Q7CiAgZmluYWwgaW50IF9tb2RpZmljYXRpb25Db3VudDsKICBFIF9jdXJyZW50OwogIExpbmtlZExpc3RFbnRyeTxFPiBfbmV4dDsKICBib29sIF92aXNpdGVkRmlyc3Q7CgogIF9MaW5rZWRMaXN0SXRlcmF0b3IoTGlua2VkTGlzdDxFPiBsaXN0KQogICAgICA6IF9saXN0ID0gbGlzdCwKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPSBsaXN0Ll9tb2RpZmljYXRpb25Db3VudCwKICAgICAgICBfbmV4dCA9IGxpc3QuX2ZpcnN0LAogICAgICAgIF92aXNpdGVkRmlyc3QgPSBmYWxzZTsKCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfbW9kaWZpY2F0aW9uQ291bnQgIT0gX2xpc3QuX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgIH0KICAgIGlmIChfbGlzdC5pc0VtcHR5IHx8IChfdmlzaXRlZEZpcnN0ICYmIGlkZW50aWNhbChfbmV4dCwgX2xpc3QuZmlyc3QpKSkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF92aXNpdGVkRmlyc3QgPSB0cnVlOwogICAgX2N1cnJlbnQgPSBfbmV4dDsKICAgIF9uZXh0ID0gX25leHQuX25leHQ7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8vLyBBbiBvYmplY3QgdGhhdCBjYW4gYmUgYW4gZWxlbWVudCBpbiBhIFtMaW5rZWRMaXN0XS4KLy8vCi8vLyBBbGwgZWxlbWVudHMgb2YgYSBgTGlua2VkTGlzdGAgbXVzdCBleHRlbmQgdGhpcyBjbGFzcy4KLy8vIFRoZSBjbGFzcyBwcm92aWRlcyB0aGUgaW50ZXJuYWwgbGlua3MgdGhhdCBsaW5rIGVsZW1lbnRzIHRvZ2V0aGVyCi8vLyBpbiB0aGUgYExpbmtlZExpc3RgLCBhbmQgYSByZWZlcmVuY2UgdG8gdGhlIGxpbmtlZCBsaXN0IGl0c2VsZgovLy8gdGhhdCBhbiBlbGVtZW50IGlzIGN1cnJlbnRseSBwYXJ0IG9mLgovLy8KLy8vIEFuIGVudHJ5IGNhbiBiZSBpbiBhdCBtb3N0IG9uZSBsaW5rZWQgbGlzdCBhdCBhIHRpbWUuCi8vLyBXaGlsZSBhbiBlbnRyeSBpcyBpbiBhIGxpbmtlZCBsaXN0LCB0aGUgW2xpc3RdIHByb3BlcnR5IHBvaW50cyB0byB0aGF0Ci8vLyBsaW5rZWQgbGlzdCwgYW5kIG90aGVyd2lzZSB0aGUgYGxpc3RgIHByb3BlcnR5IGlzIGBudWxsYC4KLy8vCi8vLyBXaGVuIGNyZWF0ZWQsIGFuIGVudHJ5IGlzIG5vdCBpbiBhbnkgbGlua2VkIGxpc3QuCmFic3RyYWN0IGNsYXNzIExpbmtlZExpc3RFbnRyeTxFIGV4dGVuZHMgTGlua2VkTGlzdEVudHJ5PEU+PiB7CiAgTGlua2VkTGlzdDxFPiBfbGlzdDsKICBFIF9uZXh0OwogIEUgX3ByZXZpb3VzOwoKICAvLy8gR2V0IHRoZSBsaW5rZWQgbGlzdCBjb250YWluaW5nIHRoaXMgZWxlbWVudC4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhpcyBlbnRyeSBpcyBub3QgY3VycmVudGx5IGluIGFueSBsaXN0LgogIExpbmtlZExpc3Q8RT4gZ2V0IGxpc3QgPT4gX2xpc3Q7CgogIC8vLyBVbmxpbmsgdGhlIGVsZW1lbnQgZnJvbSBpdHMgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFRoZSBlbnRyeSBtdXN0IGN1cnJlbnRseSBiZSBpbiBhIGxpbmtlZCBsaXN0IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIHZvaWQgdW5saW5rKCkgewogICAgX2xpc3QuX3VubGluayh0aGlzKTsKICB9CgogIC8vLyBSZXR1cm4gdGhlIHN1Y2Nlc3NvciBvZiB0aGlzIGVsZW1lbnQgaW4gaXRzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBubyBzdWNjZXNzb3IgaW4gdGhlIGxpbmtlZCBsaXN0LCBvciBpZiB0aGlzCiAgLy8vIGVudHJ5IGlzIG5vdCBjdXJyZW50bHkgaW4gYW55IGxpc3QuCiAgRSBnZXQgbmV4dCB7CiAgICBpZiAoX2xpc3QgPT0gbnVsbCB8fCBpZGVudGljYWwoX2xpc3QuZmlyc3QsIF9uZXh0KSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX25leHQ7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBwcmVkZWNlc3NvciBvZiB0aGlzIGVsZW1lbnQgaW4gaXRzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBubyBwcmVkZWNlc3NvciBpbiB0aGUgbGlua2VkIGxpc3QsIG9yIGlmIHRoaXMKICAvLy8gZW50cnkgaXMgbm90IGN1cnJlbnRseSBpbiBhbnkgbGlzdC4KICBFIGdldCBwcmV2aW91cyB7CiAgICBpZiAoX2xpc3QgPT0gbnVsbCB8fCBpZGVudGljYWwodGhpcywgX2xpc3QuZmlyc3QpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfcHJldmlvdXM7CiAgfQoKICAvLy8gSW5zZXJ0IGFuIGVsZW1lbnQgYWZ0ZXIgdGhpcyBlbGVtZW50IGluIHRoaXMgZWxlbWVudCdzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGVudHJ5IG11c3QgYmUgaW4gYSBsaW5rZWQgbGlzdCB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICAvLy8gVGhlIFtlbnRyeV0gbXVzdCBub3QgYmUgaW4gYSBsaW5rZWQgbGlzdC4KICB2b2lkIGluc2VydEFmdGVyKEUgZW50cnkpIHsKICAgIF9saXN0Ll9pbnNlcnRCZWZvcmUoX25leHQsIGVudHJ5LCB1cGRhdGVGaXJzdDogZmFsc2UpOwogIH0KCiAgLy8vIEluc2VydCBhbiBlbGVtZW50IGJlZm9yZSB0aGlzIGVsZW1lbnQgaW4gdGhpcyBlbGVtZW50J3MgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgZW50cnkgbXVzdCBiZSBpbiBhIGxpbmtlZCBsaXN0IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIC8vLyBUaGUgW2VudHJ5XSBtdXN0IG5vdCBiZSBpbiBhIGxpbmtlZCBsaXN0LgogIHZvaWQgaW5zZXJ0QmVmb3JlKEUgZW50cnkpIHsKICAgIF9saXN0Ll9pbnNlcnRCZWZvcmUodGhpcywgZW50cnksIHVwZGF0ZUZpcnN0OiB0cnVlKTsKICB9Cn0KgQkATk48ARkBUQRPTUoET04LBEtRQwRPM0ZKBFAnRR4TDAEpEAE3GzUUBAExFjYEATMlGgQBKwZMBk0MGSs1EQQBPAEdATERGhkBFQkWGjooARMRBAEQEysGEwQBDxMrBh0EARETKwYXLQYTBAE5BjgnMBkBGAkXNTEIHysEASQBNAZLTEAhRgYaARsTHTYZEQ4GJRkmICIkMxkGDwQBGhotMg84ExUrFQYEAgFRHSAOHBYBKhY2HR8BHQEUOi8GTRcUBhoWGREEAgE4BDtGQyoEOks+BDY/FwsPATMGQSMBLwZPEhkEAT8GTSoPRRIEAUEGTyoTRBYEAUoGRjAeOwQBSwZGMB85BAIBIGRhcnQ6Y29sbGVjdGlvbi9saW5rZWRfbGlzdC5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb2xsZWN0aW9uL3F1ZXVlLmRhcnTAAGqFLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEEgW1F1ZXVlXSBpcyBhIGNvbGxlY3Rpb24gdGhhdCBjYW4gYmUgbWFuaXB1bGF0ZWQgYXQgYm90aCBlbmRzLiBPbmUKLy8vIGNhbiBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGEgcXVldWUgdGhyb3VnaCBbZm9yRWFjaF0gb3Igd2l0aAovLy8gYW4gW0l0ZXJhdG9yXS4KLy8vCi8vLyBJdCBpcyBnZW5lcmFsbHkgbm90IGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSBxdWV1ZSAoYWRkIG9yIHJlbW92ZSBlbnRyaWVzKQovLy8gd2hpbGUgYW4gb3BlcmF0aW9uIG9uIHRoZSBxdWV1ZSBpcyBiZWluZyBwZXJmb3JtZWQsIGZvciBleGFtcGxlIGR1cmluZyBhCi8vLyBjYWxsIHRvIFtmb3JFYWNoXS4KLy8vIE1vZGlmeWluZyB0aGUgcXVldWUgd2hpbGUgaXQgaXMgYmVpbmcgaXRlcmF0ZWQgd2lsbCBtb3N0IGxpa2VseSBicmVhayB0aGUKLy8vIGl0ZXJhdGlvbi4KLy8vIFRoaXMgZ29lcyBib3RoIGZvciB1c2luZyB0aGUgW2l0ZXJhdG9yXSBkaXJlY3RseSwgb3IgZm9yIGl0ZXJhdGluZyBhbgovLy8gYEl0ZXJhYmxlYCByZXR1cm5lZCBieSBhIG1ldGhvZCBsaWtlIFttYXBdIG9yIFt3aGVyZV0uCmFic3RyYWN0IGNsYXNzIFF1ZXVlPEU+IGltcGxlbWVudHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIC8vLyBDcmVhdGVzIGEgcXVldWUuCiAgZmFjdG9yeSBRdWV1ZSgpID0gTGlzdFF1ZXVlPEU+OwoKICAvLy8gQ3JlYXRlcyBhIHF1ZXVlIGNvbnRhaW5pbmcgYWxsIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IG9yZGVyIGluIHRoZSBxdWV1ZSBpcyBhcyBpZiB0aGUgZWxlbWVudHMgd2VyZSBhZGRlZCB1c2luZwogIC8vLyBbYWRkTGFzdF0gaW4gdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IFtlbGVtZW50cy5pdGVyYXRvcl0uCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAvLy8gY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFF1ZXVlYCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gUXVldWU8U3VwZXJUeXBlPiBzdXBlclF1ZXVlID0gLi4uOwogIC8vLyBRdWV1ZTxTdWJUeXBlPiBzdWJRdWV1ZSA9CiAgLy8vICAgICBuZXcgUXVldWU8U3ViVHlwZT4uZnJvbShzdXBlclNldC53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgLy8vIGBgYAogIGZhY3RvcnkgUXVldWUuZnJvbShJdGVyYWJsZSBlbGVtZW50cykgPSBMaXN0UXVldWU8RT4uZnJvbTsKCiAgLy8vIENyZWF0ZXMgYSBxdWV1ZSBmcm9tIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IG9yZGVyIGluIHRoZSBxdWV1ZSBpcyBhcyBpZiB0aGUgZWxlbWVudHMgd2VyZSBhZGRlZCB1c2luZwogIC8vLyBbYWRkTGFzdF0gaW4gdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IFtlbGVtZW50cy5pdGVyYXRvcl0uCiAgZmFjdG9yeSBRdWV1ZS5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPSBMaXN0UXVldWU8RT4ub2Y7CgogIC8vLyBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgUXVldWU8VD5gLgogIC8vLwogIC8vLyBBbnkgdGltZSB0aGUgcXVldWUgd291bGQgcHJvZHVjZSBhbiBlbGVtZW50IHRoYXQgaXMgbm90IGEgW1RdLAogIC8vLyB0aGUgZWxlbWVudCBhY2Nlc3Mgd2lsbCB0aHJvdy4KICAvLy8KICAvLy8gQW55IHRpbWUgYSBbVF0gdmFsdWUgaXMgYXR0ZW1wdGVkIHN0b3JlZCBpbnRvIHRoZSBhZGFwdGVkIHF1ZXVlLAogIC8vLyB0aGUgc3RvcmUgd2lsbCB0aHJvdyB1bmxlc3MgdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1NdLgogIC8vLwogIC8vLyBJZiBhbGwgYWNjZXNzZWQgZWxlbWVudHMgb2YgW3NvdXJjZV0gYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbVF0sCiAgLy8vIGFuZCBpZiBhbGwgZWxlbWVudHMgc3RvcmVkIGludG8gdGhlIHJldHVybmVkIHF1ZXVlIGFyZSBhY3R1YWxseSBpbnN0YW5jZQogIC8vLyBvZiBbU10sCiAgLy8vIHRoZW4gdGhlIHJldHVybmVkIHF1ZXVlIGNhbiBiZSB1c2VkIGFzIGEgYFF1ZXVlPFQ+YC4KICBzdGF0aWMgUXVldWU8VD4gY2FzdEZyb208UywgVD4oUXVldWU8Uz4gc291cmNlKSA9PiBDYXN0UXVldWU8UywgVD4oc291cmNlKTsKCiAgLy8vIFByb3ZpZGVzIGEgdmlldyBvZiB0aGlzIHF1ZXVlIGFzIGEgcXVldWUgb2YgW1JdIGluc3RhbmNlcywgaWYgbmVjZXNzYXJ5LgogIC8vLwogIC8vLyBJZiB0aGlzIHF1ZXVlIGNvbnRhaW5zIG9ubHkgaW5zdGFuY2VzIG9mIFtSXSwgYWxsIHJlYWQgb3BlcmF0aW9ucwogIC8vLyB3aWxsIHdvcmsgY29ycmVjdGx5LiBJZiBhbnkgb3BlcmF0aW9uIHRyaWVzIHRvIGFjY2VzcyBhbiBlbGVtZW50CiAgLy8vIHRoYXQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFtSXSwgdGhlIGFjY2VzcyB3aWxsIHRocm93IGluc3RlYWQuCiAgLy8vCiAgLy8vIEVsZW1lbnRzIGFkZGVkIHRvIHRoZSBxdWV1ZSAoZS5nLiwgYnkgdXNpbmcgW2FkZEZpcnN0XSBvciBbYWRkQWxsXSkKICAvLy8gbXVzdCBiZSBpbnN0YW5jZSBvZiBbUl0gdG8gYmUgdmFsaWQgYXJndW1lbnRzIHRvIHRoZSBhZGRpbmcgZnVuY3Rpb24sCiAgLy8vIGFuZCB0aGV5IG11c3QgYmUgaW5zdGFuY2VzIG9mIFtFXSBhcyB3ZWxsIHRvIGJlIGFjY2VwdGVkIGJ5CiAgLy8vIHRoaXMgcXVldWUgYXMgd2VsbC4KICBRdWV1ZTxSPiBjYXN0PFI+KCk7CgogIC8vLyBSZW1vdmVzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBxdWV1ZSBtdXN0IG5vdCBiZSBlbXB0eSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICBFIHJlbW92ZUZpcnN0KCk7CgogIC8vLyBSZW1vdmVzIGFuZCByZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgcXVldWUgbXVzdCBub3QgYmUgZW1wdHkgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCiAgRSByZW1vdmVMYXN0KCk7CgogIC8vLyBBZGRzIFt2YWx1ZV0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVldWUuCiAgdm9pZCBhZGRGaXJzdChFIHZhbHVlKTsKCiAgLy8vIEFkZHMgW3ZhbHVlXSBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4KICB2b2lkIGFkZExhc3QoRSB2YWx1ZSk7CgogIC8vLyBBZGRzIFt2YWx1ZV0gYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUuCiAgdm9pZCBhZGQoRSB2YWx1ZSk7CgogIC8vLyBSZW1vdmUgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgW3ZhbHVlXSBmcm9tIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYSB2YWx1ZSB3YXMgcmVtb3ZlZCwgb3IgYGZhbHNlYCBpZiB0aGUgcXVldWUKICAvLy8gY29udGFpbmVkIG5vIGVsZW1lbnQgZXF1YWwgdG8gW3ZhbHVlXS4KICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpOwoKICAvLy8gQWRkcyBhbGwgZWxlbWVudHMgb2YgW2l0ZXJhYmxlXSBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4gVGhlCiAgLy8vIGxlbmd0aCBvZiB0aGUgcXVldWUgaXMgZXh0ZW5kZWQgYnkgdGhlIGxlbmd0aCBvZiBbaXRlcmFibGVdLgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKTsKCiAgLy8vIFJlbW92ZXMgYWxsIGVsZW1lbnRzIG1hdGNoZWQgYnkgW3Rlc3RdIGZyb20gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgYHRlc3RgIGZ1bmN0aW9uIG11c3Qgbm90IHRocm93IG9yIG1vZGlmeSB0aGUgcXVldWUuCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSk7CgogIC8vLyBSZW1vdmVzIGFsbCBlbGVtZW50cyBub3QgbWF0Y2hlZCBieSBbdGVzdF0gZnJvbSB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBgdGVzdGAgZnVuY3Rpb24gbXVzdCBub3QgdGhyb3cgb3IgbW9kaWZ5IHRoZSBxdWV1ZS4KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKTsKCiAgLy8vIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGluIHRoZSBxdWV1ZS4gVGhlIHNpemUgb2YgdGhlIHF1ZXVlIGJlY29tZXMgemVyby4KICB2b2lkIGNsZWFyKCk7Cn0KCmNsYXNzIF9Eb3VibGVMaW5rPExpbmsgZXh0ZW5kcyBfRG91YmxlTGluazxMaW5rPj4gewogIExpbmsgX3ByZXZpb3VzTGluazsKICBMaW5rIF9uZXh0TGluazsKCiAgdm9pZCBfbGluayhMaW5rIHByZXZpb3VzLCBMaW5rIG5leHQpIHsKICAgIF9uZXh0TGluayA9IG5leHQ7CiAgICBfcHJldmlvdXNMaW5rID0gcHJldmlvdXM7CiAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgcHJldmlvdXMuX25leHRMaW5rID0gdGhpczsKICAgIGlmIChuZXh0ICE9IG51bGwpIG5leHQuX3ByZXZpb3VzTGluayA9IHRoaXM7CiAgfQoKICB2b2lkIF91bmxpbmsoKSB7CiAgICBpZiAoX3ByZXZpb3VzTGluayAhPSBudWxsKSBfcHJldmlvdXNMaW5rLl9uZXh0TGluayA9IF9uZXh0TGluazsKICAgIGlmIChfbmV4dExpbmsgIT0gbnVsbCkgX25leHRMaW5rLl9wcmV2aW91c0xpbmsgPSBfcHJldmlvdXNMaW5rOwogICAgX25leHRMaW5rID0gbnVsbDsKICAgIF9wcmV2aW91c0xpbmsgPSBudWxsOwogIH0KfQoKLy8vIEFuIGVudHJ5IGluIGEgZG91Ymx5IGxpbmtlZCBsaXN0LiBJdCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQKLy8vIGVudHJ5LCB0aGUgcHJldmlvdXMgZW50cnksIGFuZCB0aGUgYm94ZWQgZWxlbWVudC4KY2xhc3MgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBleHRlbmRzIF9Eb3VibGVMaW5rPERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4+IHsKICAvLy8gVGhlIGVsZW1lbnQgaW4gdGhlIHF1ZXVlLgogIEUgZWxlbWVudDsKCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeSh0aGlzLmVsZW1lbnQpOwoKICAvLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gW2VdIGFzIGVudHJ5IGp1c3QgYWZ0ZXIgdGhpcyBlbnRyeS4KICB2b2lkIGFwcGVuZChFIGUpIHsKICAgIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4oZSkuX2xpbmsodGhpcywgX25leHRMaW5rKTsKICB9CgogIC8vLyBQcmVwZW5kcyB0aGUgZ2l2ZW4gW2VdIGFzIGVudHJ5IGp1c3QgYmVmb3JlIHRoaXMgZW50cnkuCiAgdm9pZCBwcmVwZW5kKEUgZSkgewogICAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPihlKS5fbGluayhfcHJldmlvdXNMaW5rLCB0aGlzKTsKICB9CgogIEUgcmVtb3ZlKCkgewogICAgX3VubGluaygpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgcHJldmlvdXMgZW50cnkgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vbmUuCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBwcmV2aW91c0VudHJ5KCkgPT4gX3ByZXZpb3VzTGluazsKCiAgLy8vIFJldHVybnMgdGhlIG5leHQgZW50cnkgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vbmUuCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBuZXh0RW50cnkoKSA9PiBfbmV4dExpbms7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHRoZSBsaW5rIGNsYXNzZXMgdXNlZCBieSBbRG91YmxlTGlua2VkUXVldWVdLgovLy8KLy8vIEJvdGggdGhlIFtfRG91YmxlTGlua2VkUXVldWVFbGVtZW50XSBhbmQgW19Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsXQovLy8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgovLy8gVGhlIGVudHJ5IGNvbnRhaW5zIGEgbGluayBiYWNrIHRvIHRoZSBxdWV1ZSwgc28gY2FsbGluZyBgYXBwZW5kYAovLy8gb3IgYHByZXBlbmRgIGNhbiBjb3JyZWN0bHkgdXBkYXRlIHRoZSBlbGVtZW50IGNvdW50LgphYnN0cmFjdCBjbGFzcyBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBleHRlbmRzIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gewogIERvdWJsZUxpbmtlZFF1ZXVlPEU+IF9xdWV1ZTsKICBfRG91YmxlTGlua2VkUXVldWVFbnRyeShFIGVsZW1lbnQsIHRoaXMuX3F1ZXVlKSA6IHN1cGVyKGVsZW1lbnQpOwoKICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IF9hc05vblNlbnRpbmVsRW50cnkoKTsKCiAgdm9pZCBfYXBwZW5kKEUgZSkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudDxFPihlLCBfcXVldWUpLl9saW5rKHRoaXMsIF9uZXh0TGluayk7CiAgfQoKICB2b2lkIF9wcmVwZW5kKEUgZSkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudDxFPihlLCBfcXVldWUpLl9saW5rKF9wcmV2aW91c0xpbmssIHRoaXMpOwogIH0KCiAgRSBfcmVtb3ZlKCk7CgogIEUgZ2V0IF9lbGVtZW50ID0+IGVsZW1lbnQ7CgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gbmV4dEVudHJ5KCkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfbmV4dExpbms7CiAgICByZXR1cm4gZW50cnkuX2FzTm9uU2VudGluZWxFbnRyeSgpOwogIH0KCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBwcmV2aW91c0VudHJ5KCkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfcHJldmlvdXNMaW5rOwogICAgcmV0dXJuIGVudHJ5Ll9hc05vblNlbnRpbmVsRW50cnkoKTsKICB9Cn0KCi8vLyBUaGUgYWN0dWFsIGVudHJ5IHR5cGUgdXNlZCBieSB0aGUgW0RvdWJsZUxpbmtlZFF1ZXVlXS4KLy8vCi8vLyBUaGUgZW50cnkgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHF1ZXVlLCBhbGxvd2luZwovLy8gW2FwcGVuZF0vW3ByZXBlbmRdIHRvIHVwZGF0ZSB0aGUgbGlzdCBsZW5ndGguCmNsYXNzIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQ8RT4gZXh0ZW5kcyBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiB7CiAgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudChFIGVsZW1lbnQsIERvdWJsZUxpbmtlZFF1ZXVlPEU+IHF1ZXVlKQogICAgICA6IHN1cGVyKGVsZW1lbnQsIHF1ZXVlKTsKCiAgdm9pZCBhcHBlbmQoRSBlKSB7CiAgICBfYXBwZW5kKGUpOwogICAgaWYgKF9xdWV1ZSAhPSBudWxsKSBfcXVldWUuX2VsZW1lbnRDb3VudCsrOwogIH0KCiAgdm9pZCBwcmVwZW5kKEUgZSkgewogICAgX3ByZXBlbmQoZSk7CiAgICBpZiAoX3F1ZXVlICE9IG51bGwpIF9xdWV1ZS5fZWxlbWVudENvdW50Kys7CiAgfQoKICBFIF9yZW1vdmUoKSB7CiAgICBfcXVldWUgPSBudWxsOwogICAgX3VubGluaygpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQoKICBFIHJlbW92ZSgpIHsKICAgIGlmIChfcXVldWUgIT0gbnVsbCkgX3F1ZXVlLl9lbGVtZW50Q291bnQtLTsKICAgIHJldHVybiBfcmVtb3ZlKCk7CiAgfQoKICBfRG91YmxlTGlua2VkUXVldWVFbGVtZW50PEU+IF9hc05vblNlbnRpbmVsRW50cnkoKSB7CiAgICByZXR1cm4gdGhpczsKICB9Cn0KCi8vLyBBIHNlbnRpbmVsIGluIGEgZG91YmxlIGxpbmtlZCBsaXN0IGlzIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgbGlzdAovLy8gYXQgYm90aCBlbmRzLgovLy8gQSBkb3VibGUgbGlua2VkIGxpc3QgaGFzIGV4YWN0bHkgb25lIHNlbnRpbmVsLAovLy8gd2hpY2ggaXMgdGhlIG9ubHkgZW50cnkgd2hlbiB0aGUgbGlzdCBpcyBjb25zdHJ1Y3RlZC4KLy8vIEluaXRpYWxseSwgYSBzZW50aW5lbCBoYXMgaXRzIG5leHQgYW5kIHByZXZpb3VzIGVudHJ5IHBvaW50IHRvIGl0c2VsZi4KLy8vIEEgc2VudGluZWwgZG9lcyBub3QgYm94IGFueSB1c2VyIGVsZW1lbnQuCmNsYXNzIF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsPEU+IGV4dGVuZHMgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gewogIF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsKERvdWJsZUxpbmtlZFF1ZXVlPEU+IHF1ZXVlKSA6IHN1cGVyKG51bGwsIHF1ZXVlKSB7CiAgICBfcHJldmlvdXNMaW5rID0gdGhpczsKICAgIF9uZXh0TGluayA9IHRoaXM7CiAgfQoKICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IF9hc05vblNlbnRpbmVsRW50cnkoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBIaXQgYnksIGUuZy4sIFtEb3VibGVMaW5rZWRRdWV1ZS5yZW1vdmVGaXJzdF0gaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LgogIEUgX3JlbW92ZSgpIHsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgLy8vIEhpdCBieSwgZS5nLiwgW0RvdWJsZUxpbmtlZFF1ZXVlLmZpcnN0XSBpZiB0aGUgcXVldWUgaXMgZW1wdHkuCiAgRSBnZXQgX2VsZW1lbnQgewogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQp9CgovLy8gQSBbUXVldWVdIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGEgZG91YmxlLWxpbmtlZCBsaXN0LgovLy8KLy8vIEFsbG93cyBjb25zdGFudCB0aW1lIGFkZCwgcmVtb3ZlLWF0LWVuZHMgYW5kIHBlZWsgb3BlcmF0aW9ucy4KY2xhc3MgRG91YmxlTGlua2VkUXVldWU8RT4gZXh0ZW5kcyBJdGVyYWJsZTxFPiBpbXBsZW1lbnRzIFF1ZXVlPEU+IHsKICBfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbDxFPiBfc2VudGluZWw7CiAgaW50IF9lbGVtZW50Q291bnQgPSAwOwoKICBEb3VibGVMaW5rZWRRdWV1ZSgpIHsKICAgIF9zZW50aW5lbCA9IF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsPEU+KHRoaXMpOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBkb3VibGUtbGlua2VkIHF1ZXVlIGNvbnRhaW5pbmcgYWxsIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IG9yZGVyIGluIHRoZSBxdWV1ZSBpcyBhcyBpZiB0aGUgZWxlbWVudHMgd2VyZSBhZGRlZCB1c2luZwogIC8vLyBbYWRkTGFzdF0gaW4gdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IFtlbGVtZW50cy5pdGVyYXRvcl0uCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAvLy8gY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFF1ZXVlYCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gUXVldWU8U3VwZXJUeXBlPiBzdXBlclF1ZXVlID0gLi4uOwogIC8vLyBRdWV1ZTxTdWJUeXBlPiBzdWJRdWV1ZSA9CiAgLy8vICAgICBuZXcgRG91YmxlTGlua2VkUXVldWU8U3ViVHlwZT4uZnJvbShzdXBlclF1ZXVlLndoZXJlVHlwZTxTdWJUeXBlPigpKTsKICAvLy8gYGBgCiAgZmFjdG9yeSBEb3VibGVMaW5rZWRRdWV1ZS5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSB7CiAgICBRdWV1ZTxFPiBsaXN0ID0gRG91YmxlTGlua2VkUXVldWU8RT4oKTsKICAgIGZvciAoZmluYWwgZSBpbiBlbGVtZW50cykgewogICAgICBsaXN0LmFkZExhc3QoZSk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgZG91YmxlLWxpbmtlZCBxdWV1ZSBmcm9tIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IG9yZGVyIGluIHRoZSBxdWV1ZSBpcyBhcyBpZiB0aGUgZWxlbWVudHMgd2VyZSBhZGRlZCB1c2luZwogIC8vLyBbYWRkTGFzdF0gaW4gdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IFtlbGVtZW50cy5pdGVyYXRvcl0uCiAgZmFjdG9yeSBEb3VibGVMaW5rZWRRdWV1ZS5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4KICAgICAgRG91YmxlTGlua2VkUXVldWU8RT4oKS4uYWRkQWxsKGVsZW1lbnRzKTsKCiAgUXVldWU8Uj4gY2FzdDxSPigpID0+IFF1ZXVlLmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIGludCBnZXQgbGVuZ3RoID0+IF9lbGVtZW50Q291bnQ7CgogIHZvaWQgYWRkTGFzdChFIHZhbHVlKSB7CiAgICBfc2VudGluZWwuX3ByZXBlbmQodmFsdWUpOwogICAgX2VsZW1lbnRDb3VudCsrOwogIH0KCiAgdm9pZCBhZGRGaXJzdChFIHZhbHVlKSB7CiAgICBfc2VudGluZWwuX2FwcGVuZCh2YWx1ZSk7CiAgICBfZWxlbWVudENvdW50Kys7CiAgfQoKICB2b2lkIGFkZChFIHZhbHVlKSB7CiAgICBfc2VudGluZWwuX3ByZXBlbmQodmFsdWUpOwogICAgX2VsZW1lbnRDb3VudCsrOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIGZvciAoZmluYWwgRSB2YWx1ZSBpbiBpdGVyYWJsZSkgewogICAgICBfc2VudGluZWwuX3ByZXBlbmQodmFsdWUpOwogICAgICBfZWxlbWVudENvdW50Kys7CiAgICB9CiAgfQoKICBFIHJlbW92ZUxhc3QoKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBsYXN0RW50cnkgPSBfc2VudGluZWwuX3ByZXZpb3VzTGluazsKICAgIEUgcmVzdWx0ID0gbGFzdEVudHJ5Ll9yZW1vdmUoKTsKICAgIF9lbGVtZW50Q291bnQtLTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIHJlbW92ZUZpcnN0KCkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZmlyc3RFbnRyeSA9IF9zZW50aW5lbC5fbmV4dExpbms7CiAgICBFIHJlc3VsdCA9IGZpcnN0RW50cnkuX3JlbW92ZSgpOwogICAgX2VsZW1lbnRDb3VudC0tOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBvKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBlbnRyeSA9IF9zZW50aW5lbC5fbmV4dExpbms7CiAgICB3aGlsZSAoIWlkZW50aWNhbChlbnRyeSwgX3NlbnRpbmVsKSkgewogICAgICBib29sIGVxdWFscyA9IChlbnRyeS5fZWxlbWVudCA9PSBvKTsKICAgICAgaWYgKCFpZGVudGljYWwodGhpcywgZW50cnkuX3F1ZXVlKSkgewogICAgICAgIC8vIEVudHJ5IG11c3Qgc3RpbGwgYmUgaW4gdGhlIHF1ZXVlLgogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgICBpZiAoZXF1YWxzKSB7CiAgICAgICAgZW50cnkuX3JlbW92ZSgpOwogICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Ll9uZXh0TGluazsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgX2ZpbHRlcihib29sIHRlc3QoRSBlbGVtZW50KSwgYm9vbCByZW1vdmVNYXRjaGluZykgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfc2VudGluZWwuX25leHRMaW5rOwogICAgd2hpbGUgKCFpZGVudGljYWwoZW50cnksIF9zZW50aW5lbCkpIHsKICAgICAgYm9vbCBtYXRjaGVzID0gdGVzdChlbnRyeS5fZWxlbWVudCk7CiAgICAgIGlmICghaWRlbnRpY2FsKHRoaXMsIGVudHJ5Ll9xdWV1ZSkpIHsKICAgICAgICAvLyBFbnRyeSBtdXN0IHN0aWxsIGJlIGluIHRoZSBxdWV1ZS4KICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gbmV4dCA9IGVudHJ5Ll9uZXh0TGluazsgLy8gQ2Fubm90IGJlIG51bGwuCiAgICAgIGlmIChpZGVudGljYWwocmVtb3ZlTWF0Y2hpbmcsIG1hdGNoZXMpKSB7CiAgICAgICAgZW50cnkuX3JlbW92ZSgpOwogICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgfQogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfZmlsdGVyKHRlc3QsIHRydWUpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcih0ZXN0LCBmYWxzZSk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBmaXJzdEVudHJ5ID0gX3NlbnRpbmVsLl9uZXh0TGluazsKICAgIHJldHVybiBmaXJzdEVudHJ5Ll9lbGVtZW50OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBsYXN0RW50cnkgPSBfc2VudGluZWwuX3ByZXZpb3VzTGluazsKICAgIHJldHVybiBsYXN0RW50cnkuX2VsZW1lbnQ7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgLy8gTm90ZSB0aGF0IHRoaXMgdGhyb3dzIGNvcnJlY3RseSBpZiB0aGUgcXVldWUgaXMgZW1wdHkKICAgIC8vIGJlY2F1c2UgcmVhZGluZyB0aGUgZWxlbWVudCBvZiB0aGUgc2VudGluZWwgdGhyb3dzLgogICAgaWYgKGlkZW50aWNhbChfc2VudGluZWwuX25leHRMaW5rLCBfc2VudGluZWwuX3ByZXZpb3VzTGluaykpIHsKICAgICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfc2VudGluZWwuX25leHRMaW5rOwogICAgICByZXR1cm4gZW50cnkuX2VsZW1lbnQ7CiAgICB9CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICAvLy8gVGhlIGVudHJ5IG9iamVjdCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIEVhY2ggZWxlbWVudCBvZiB0aGUgcXVldWUgaGFzIGFuIGFzc29jaWF0ZWQgW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnldLgogIC8vLyBSZXR1cm5zIHRoZSBlbnRyeSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBlbnRyeSBvYmplY3RzIGNhbiBhbHNvIGJlIGFjY2Vzc2VkIHVzaW5nIFtsYXN0RW50cnldLAogIC8vLyBhbmQgdGhleSBjYW4gYmUgaXRlcmF0ZWQgdXNpbmcgW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnkubmV4dEVudHJ5KCldIGFuZAogIC8vLyBbRG91YmxlTGlua2VkUXVldWVFbnRyeS5wcmV2aW91c0VudHJ5KCldLgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZmlyc3RFbnRyeSgpIHsKICAgIHJldHVybiBfc2VudGluZWwubmV4dEVudHJ5KCk7CiAgfQoKICAvLy8gVGhlIGVudHJ5IG9iamVjdCBvZiB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gRWFjaCBlbGVtZW50IG9mIHRoZSBxdWV1ZSBoYXMgYW4gYXNzb2NpYXRlZCBbRG91YmxlTGlua2VkUXVldWVFbnRyeV0uCiAgLy8vIFJldHVybnMgdGhlIGVudHJ5IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgZW50cnkgb2JqZWN0cyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB1c2luZyBbZmlyc3RFbnRyeV0sCiAgLy8vIGFuZCB0aGV5IGNhbiBiZSBpdGVyYXRlZCB1c2luZyBbRG91YmxlTGlua2VkUXVldWVFbnRyeS5uZXh0RW50cnkoKV0gYW5kCiAgLy8vIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5LnByZXZpb3VzRW50cnkoKV0uCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBsYXN0RW50cnkoKSB7CiAgICByZXR1cm4gX3NlbnRpbmVsLnByZXZpb3VzRW50cnkoKTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIChpZGVudGljYWwoX3NlbnRpbmVsLl9uZXh0TGluaywgX3NlbnRpbmVsKSk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX3NlbnRpbmVsLl9uZXh0TGluayA9IF9zZW50aW5lbDsKICAgIF9zZW50aW5lbC5fcHJldmlvdXNMaW5rID0gX3NlbnRpbmVsOwogICAgX2VsZW1lbnRDb3VudCA9IDA7CiAgfQoKICAvLy8gQ2FsbHMgW2FjdGlvbl0gZm9yIGVhY2ggZW50cnkgb2JqZWN0IG9mIHRoaXMgZG91YmxlLWxpbmtlZCBxdWV1ZS4KICAvLy8KICAvLy8gRWFjaCBlbGVtZW50IG9mIHRoZSBxdWV1ZSBoYXMgYW4gYXNzb2NpYXRlZCBbRG91YmxlTGlua2VkUXVldWVFbnRyeV0uCiAgLy8vIFRoaXMgbWV0aG9kIGl0ZXJhdGVzIHRoZSBlbnRyeSBvYmplY3RzIGZyb20gZmlyc3QgdG8gbGFzdCBhbmQgY2FsbHMKICAvLy8gW2FjdGlvbl0gd2l0aCBlYWNoIG9iamVjdCBpbiB0dXJuLgogIC8vLwogIC8vLyBUaGUgZW50cnkgb2JqZWN0cyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB1c2luZyBbZmlyc3RFbnRyeV0gYW5kIFtsYXN0RW50cnldLAogIC8vLyBhbmQgaXRlcmF0ZWQgdXNpbmcgW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnkubmV4dEVudHJ5KCldIGFuZAogIC8vLyBbRG91YmxlTGlua2VkUXVldWVFbnRyeS5wcmV2aW91c0VudHJ5KCldLgogIC8vLwogIC8vLyBUaGUgW2FjdGlvbl0gZnVuY3Rpb24gY2FuIHVzZSBtZXRob2RzIG9uIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5XSB0bwogIC8vLyByZW1vdmUgdGhlIGVudHJ5IG9yIGl0IGNhbiBpbnNlcnQgZWxlbWVudHMgYmVmb3JlIG9yIGFmdGVyIHRoZW4gZW50cnkuCiAgLy8vIElmIHRoZSBjdXJyZW50IGVudHJ5IGlzIHJlbW92ZWQsIGl0ZXJhdGlvbiBjb250aW51ZXMgd2l0aCB0aGUgZW50cnkgdGhhdAogIC8vLyB3YXMgZm9sbG93aW5nIHRoZSBjdXJyZW50IGVudHJ5IHdoZW4gW2FjdGlvbl0gd2FzIGNhbGxlZC4gQW55IGVsZW1lbnRzCiAgLy8vIGluc2VydGVkIGFmdGVyIHRoZSBjdXJyZW50IGVsZW1lbnQgYmVmb3JlIGl0IGlzIHJlbW92ZWQgd2lsbCBub3QgYmUKICAvLy8gdmlzaXRlZCBieSB0aGUgaXRlcmF0aW9uLgogIHZvaWQgZm9yRWFjaEVudHJ5KHZvaWQgYWN0aW9uKERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZWxlbWVudCkpIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGVudHJ5ID0gX3NlbnRpbmVsLl9uZXh0TGluazsKICAgIHdoaWxlICghaWRlbnRpY2FsKGVudHJ5LCBfc2VudGluZWwpKSB7CiAgICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQ8RT4gZWxlbWVudCA9IGVudHJ5OwogICAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBuZXh0ID0gZWxlbWVudC5fbmV4dExpbms7CiAgICAgIC8vIFJlbWVtYmVyIGJvdGggZW50cnkgYW5kIGVudHJ5Ll9uZXh0TGluay4KICAgICAgLy8gSWYgc29tZW9uZSBjYWxscyBgZWxlbWVudC5yZW1vdmUoKWAgd2UgY29udGludWUgZnJvbSBgbmV4dGAuCiAgICAgIC8vIE90aGVyd2lzZSB3ZSB1c2UgdGhlIHZhbHVlIG9mIGVudHJ5Ll9uZXh0TGluayB3aGljaCBtYXkgaGF2ZSBiZWVuCiAgICAgIC8vIHVwZGF0ZWQuCiAgICAgIGFjdGlvbihlbGVtZW50KTsKICAgICAgaWYgKGlkZW50aWNhbCh0aGlzLCBlbnRyeS5fcXVldWUpKSB7CiAgICAgICAgbmV4dCA9IGVudHJ5Ll9uZXh0TGluazsKICAgICAgfSBlbHNlIGlmICghaWRlbnRpY2FsKHRoaXMsIG5leHQuX3F1ZXVlKSkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgfQoKICBfRG91YmxlTGlua2VkUXVldWVJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIF9Eb3VibGVMaW5rZWRRdWV1ZUl0ZXJhdG9yPEU+KF9zZW50aW5lbCk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb0Z1bGxTdHJpbmcodGhpcywgJ3snLCAnfScpOwp9CgpjbGFzcyBfRG91YmxlTGlua2VkUXVldWVJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbDxFPiBfc2VudGluZWw7CiAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gX25leHRFbnRyeTsKICBFIF9jdXJyZW50OwoKICBfRG91YmxlTGlua2VkUXVldWVJdGVyYXRvcihfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbDxFPiBzZW50aW5lbCkKICAgICAgOiBfc2VudGluZWwgPSBzZW50aW5lbCwKICAgICAgICBfbmV4dEVudHJ5ID0gc2VudGluZWwuX25leHRMaW5rOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKGlkZW50aWNhbChfbmV4dEVudHJ5LCBfc2VudGluZWwpKSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgX25leHRFbnRyeSA9IG51bGw7CiAgICAgIF9zZW50aW5lbCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQ8RT4gZWxlbWVudEVudHJ5ID0gX25leHRFbnRyeTsKICAgIGlmICghaWRlbnRpY2FsKF9zZW50aW5lbC5fcXVldWUsIGVsZW1lbnRFbnRyeS5fcXVldWUpKSB7CiAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihfc2VudGluZWwuX3F1ZXVlKTsKICAgIH0KICAgIF9jdXJyZW50ID0gZWxlbWVudEVudHJ5Ll9lbGVtZW50OwogICAgX25leHRFbnRyeSA9IGVsZW1lbnRFbnRyeS5fbmV4dExpbms7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KCi8vLyBMaXN0IGJhc2VkIFtRdWV1ZV0uCi8vLwovLy8gS2VlcHMgYSBjeWNsaWMgYnVmZmVyIG9mIGVsZW1lbnRzLCBhbmQgZ3Jvd3MgdG8gYSBsYXJnZXIgYnVmZmVyIHdoZW4KLy8vIGl0IGZpbGxzIHVwLiBUaGlzIGd1YXJhbnRlZXMgY29uc3RhbnQgdGltZSBwZWVrIGFuZCByZW1vdmUgb3BlcmF0aW9ucywgYW5kCi8vLyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZSBhZGQgb3BlcmF0aW9ucy4KLy8vCi8vLyBUaGUgc3RydWN0dXJlIGlzIGVmZmljaWVudCBmb3IgYW55IHF1ZXVlIG9yIHN0YWNrIHVzYWdlLgpjbGFzcyBMaXN0UXVldWU8RT4gZXh0ZW5kcyBMaXN0SXRlcmFibGU8RT4gaW1wbGVtZW50cyBRdWV1ZTxFPiB7CiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9DQVBBQ0lUWSA9IDg7CiAgTGlzdDxFPiBfdGFibGU7CiAgaW50IF9oZWFkOwogIGludCBfdGFpbDsKICBpbnQgX21vZGlmaWNhdGlvbkNvdW50ID0gMDsKCiAgLy8vIENyZWF0ZSBhbiBlbXB0eSBxdWV1ZS4KICAvLy8KICAvLy8gSWYgW2luaXRpYWxDYXBhY2l0eV0gaXMgZ2l2ZW4sIHByZXBhcmUgdGhlIHF1ZXVlIGZvciBhdCBsZWFzdCB0aGF0IG1hbnkKICAvLy8gZWxlbWVudHMuCiAgTGlzdFF1ZXVlKFtpbnQgaW5pdGlhbENhcGFjaXR5XSkKICAgICAgOiBfaGVhZCA9IDAsCiAgICAgICAgX3RhaWwgPSAwIHsKICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPT0gbnVsbCB8fCBpbml0aWFsQ2FwYWNpdHkgPCBfSU5JVElBTF9DQVBBQ0lUWSkgewogICAgICBpbml0aWFsQ2FwYWNpdHkgPSBfSU5JVElBTF9DQVBBQ0lUWTsKICAgIH0gZWxzZSBpZiAoIV9pc1Bvd2VyT2YyKGluaXRpYWxDYXBhY2l0eSkpIHsKICAgICAgaW5pdGlhbENhcGFjaXR5ID0gX25leHRQb3dlck9mMihpbml0aWFsQ2FwYWNpdHkpOwogICAgfQogICAgYXNzZXJ0KF9pc1Bvd2VyT2YyKGluaXRpYWxDYXBhY2l0eSkpOwogICAgX3RhYmxlID0gTGlzdDxFPihpbml0aWFsQ2FwYWNpdHkpOwogIH0KCiAgLy8vIENyZWF0ZSBhIGBMaXN0UXVldWVgIGNvbnRhaW5pbmcgYWxsIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlIHF1ZXVlLCBhcyBieSBbYWRkTGFzdF0sIGluIHRoZSBvcmRlciBnaXZlbgogIC8vLyBieSBgZWxlbWVudHMuaXRlcmF0b3JgLgogIC8vLwogIC8vLyBBbGwgdGhlIFtlbGVtZW50c10gc2hvdWxkIGJlIGluc3RhbmNlcyBvZiBbRV0uCiAgLy8vIFRoZSBgZWxlbWVudHNgIGl0ZXJhYmxlIGl0c2VsZiBtYXkgaGF2ZSBhbnkgZWxlbWVudCB0eXBlLCBzbyB0aGlzCiAgLy8vIGNvbnN0cnVjdG9yIGNhbiBiZSB1c2VkIHRvIGRvd24tY2FzdCBhIGBRdWV1ZWAsIGZvciBleGFtcGxlIGFzOgogIC8vLyBgYGBkYXJ0CiAgLy8vIFF1ZXVlPFN1cGVyVHlwZT4gc3VwZXJRdWV1ZSA9IC4uLjsKICAvLy8gUXVldWU8U3ViVHlwZT4gc3ViUXVldWUgPQogIC8vLyAgICAgbmV3IExpc3RRdWV1ZTxTdWJUeXBlPi5mcm9tKHN1cGVyUXVldWUud2hlcmVUeXBlPFN1YlR5cGU+KCkpOwogIC8vLyBgYGAKICBmYWN0b3J5IExpc3RRdWV1ZS5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMgaXMgTGlzdCkgewogICAgICBpbnQgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOwogICAgICBMaXN0UXVldWU8RT4gcXVldWUgPSBMaXN0UXVldWU8RT4obGVuZ3RoICsgMSk7CiAgICAgIGFzc2VydChxdWV1ZS5fdGFibGUubGVuZ3RoID4gbGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHF1ZXVlLl90YWJsZVtpXSA9IGVsZW1lbnRzW2ldOwogICAgICB9CiAgICAgIHF1ZXVlLl90YWlsID0gbGVuZ3RoOwogICAgICByZXR1cm4gcXVldWU7CiAgICB9IGVsc2UgewogICAgICBpbnQgY2FwYWNpdHkgPSBfSU5JVElBTF9DQVBBQ0lUWTsKICAgICAgaWYgKGVsZW1lbnRzIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgICAgY2FwYWNpdHkgPSBlbGVtZW50cy5sZW5ndGg7CiAgICAgIH0KICAgICAgTGlzdFF1ZXVlPEU+IHJlc3VsdCA9IExpc3RRdWV1ZTxFPihjYXBhY2l0eSk7CiAgICAgIGZvciAoZmluYWwgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICAgIHJlc3VsdC5hZGRMYXN0KGVsZW1lbnQpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlIGEgYExpc3RRdWV1ZWAgZnJvbSBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBUaGUgZWxlbWVudHMgYXJlIGFkZGVkIHRvIHRoZSBxdWV1ZSwgYXMgYnkgW2FkZExhc3RdLCBpbiB0aGUgb3JkZXIgZ2l2ZW4KICAvLy8gYnkgYGVsZW1lbnRzLml0ZXJhdG9yYC4KICBmYWN0b3J5IExpc3RRdWV1ZS5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4KICAgICAgTGlzdFF1ZXVlPEU+KCkuLmFkZEFsbChlbGVtZW50cyk7CgogIC8vIEl0ZXJhYmxlIGludGVyZmFjZS4KCiAgUXVldWU8Uj4gY2FzdDxSPigpID0+IFF1ZXVlLmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfTGlzdFF1ZXVlSXRlcmF0b3I8RT4odGhpcyk7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoRSBlbGVtZW50KSkgewogICAgaW50IG1vZGlmaWNhdGlvbkNvdW50ID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgZm9yIChpbnQgaSA9IF9oZWFkOyBpICE9IF90YWlsOyBpID0gKGkgKyAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSkpIHsKICAgICAgZihfdGFibGVbaV0pOwogICAgICBfY2hlY2tNb2RpZmljYXRpb24obW9kaWZpY2F0aW9uQ291bnQpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfaGVhZCA9PSBfdGFpbDsKCiAgaW50IGdldCBsZW5ndGggPT4gKF90YWlsIC0gX2hlYWQpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKF9oZWFkID09IF90YWlsKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHJldHVybiBfdGFibGVbX2hlYWRdOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIF90YWJsZVsoX3RhaWwgLSAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSldOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBpZiAobGVuZ3RoID4gMSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgcmV0dXJuIF90YWJsZVtfaGVhZF07CiAgfQoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZEluZGV4KGluZGV4LCB0aGlzKTsKICAgIHJldHVybiBfdGFibGVbKF9oZWFkICsgaW5kZXgpICYgKF90YWJsZS5sZW5ndGggLSAxKV07CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZSA9IHRydWV9KSB7CiAgICBMaXN0PEU+IGxpc3Q7CiAgICBpZiAoZ3Jvd2FibGUpIHsKICAgICAgbGlzdCA9IDxFPltdLi5sZW5ndGggPSBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBsaXN0ID0gTGlzdDxFPihsZW5ndGgpOwogICAgfQogICAgX3dyaXRlVG9MaXN0KGxpc3QpOwogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICAvLyBDb2xsZWN0aW9uIGludGVyZmFjZS4KCiAgdm9pZCBhZGQoRSB2YWx1ZSkgewogICAgX2FkZCh2YWx1ZSk7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgaWYgKGVsZW1lbnRzIGlzIExpc3Q8RT4pIHsKICAgICAgTGlzdDxFPiBsaXN0ID0gZWxlbWVudHM7CiAgICAgIGludCBhZGRDb3VudCA9IGxpc3QubGVuZ3RoOwogICAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgIGlmIChsZW5ndGggKyBhZGRDb3VudCA+PSBfdGFibGUubGVuZ3RoKSB7CiAgICAgICAgX3ByZUdyb3cobGVuZ3RoICsgYWRkQ291bnQpOwogICAgICAgIC8vIEFmdGVyIHByZUdyb3csIGFsbCBlbGVtZW50cyBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0LgogICAgICAgIF90YWJsZS5zZXRSYW5nZShsZW5ndGgsIGxlbmd0aCArIGFkZENvdW50LCBsaXN0LCAwKTsKICAgICAgICBfdGFpbCArPSBhZGRDb3VudDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBBZGRpbmcgYWRkQ291bnQgZWxlbWVudHMgd29uJ3QgcmVhY2ggX2hlYWQuCiAgICAgICAgaW50IGVuZFNwYWNlID0gX3RhYmxlLmxlbmd0aCAtIF90YWlsOwogICAgICAgIGlmIChhZGRDb3VudCA8IGVuZFNwYWNlKSB7CiAgICAgICAgICBfdGFibGUuc2V0UmFuZ2UoX3RhaWwsIF90YWlsICsgYWRkQ291bnQsIGxpc3QsIDApOwogICAgICAgICAgX3RhaWwgKz0gYWRkQ291bnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGludCBwcmVTcGFjZSA9IGFkZENvdW50IC0gZW5kU3BhY2U7CiAgICAgICAgICBfdGFibGUuc2V0UmFuZ2UoX3RhaWwsIF90YWlsICsgZW5kU3BhY2UsIGxpc3QsIDApOwogICAgICAgICAgX3RhYmxlLnNldFJhbmdlKDAsIHByZVNwYWNlLCBsaXN0LCBlbmRTcGFjZSk7CiAgICAgICAgICBfdGFpbCA9IHByZVNwYWNlOwogICAgICAgIH0KICAgICAgfQogICAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoRSBlbGVtZW50IGluIGVsZW1lbnRzKSBfYWRkKGVsZW1lbnQpOwogICAgfQogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKSB7CiAgICBmb3IgKGludCBpID0gX2hlYWQ7IGkgIT0gX3RhaWw7IGkgPSAoaSArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKSkgewogICAgICBFIGVsZW1lbnQgPSBfdGFibGVbaV07CiAgICAgIGlmIChlbGVtZW50ID09IHZhbHVlKSB7CiAgICAgICAgX3JlbW92ZShpKTsKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBfZmlsdGVyV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIGJvb2wgcmVtb3ZlTWF0Y2hpbmcpIHsKICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGludCBpID0gX2hlYWQ7CiAgICB3aGlsZSAoaSAhPSBfdGFpbCkgewogICAgICBFIGVsZW1lbnQgPSBfdGFibGVbaV07CiAgICAgIGJvb2wgcmVtb3ZlID0gaWRlbnRpY2FsKHJlbW92ZU1hdGNoaW5nLCB0ZXN0KGVsZW1lbnQpKTsKICAgICAgX2NoZWNrTW9kaWZpY2F0aW9uKG1vZGlmaWNhdGlvbkNvdW50KTsKICAgICAgaWYgKHJlbW92ZSkgewogICAgICAgIGkgPSBfcmVtb3ZlKGkpOwogICAgICAgIG1vZGlmaWNhdGlvbkNvdW50ID0gKytfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaSA9IChpICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmVtb3ZlIGFsbCBlbGVtZW50cyBtYXRjaGVkIGJ5IFt0ZXN0XS4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgaW5lZmZpY2llbnQgc2luY2UgaXQgd29ya3MgYnkgcmVwZWF0ZWRseSByZW1vdmluZyBzaW5nbGUKICAvLy8gZWxlbWVudHMsIGVhY2ggb2Ygd2hpY2ggY2FuIHRha2UgbGluZWFyIHRpbWUuCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcldoZXJlKHRlc3QsIHRydWUpOwogIH0KCiAgLy8vIFJlbW92ZSBhbGwgZWxlbWVudHMgbm90IG1hdGNoZWQgYnkgW3Rlc3RdLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbmVmZmljaWVudCBzaW5jZSBpdCB3b3JrcyBieSByZXBlYXRlZGx5IHJlbW92aW5nIHNpbmdsZQogIC8vLyBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gdGFrZSBsaW5lYXIgdGltZS4KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfZmlsdGVyV2hlcmUodGVzdCwgZmFsc2UpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIGlmIChfaGVhZCAhPSBfdGFpbCkgewogICAgICBmb3IgKGludCBpID0gX2hlYWQ7IGkgIT0gX3RhaWw7IGkgPSAoaSArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKSkgewogICAgICAgIF90YWJsZVtpXSA9IG51bGw7CiAgICAgIH0KICAgICAgX2hlYWQgPSBfdGFpbCA9IDA7CiAgICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHRoaXMsICJ7IiwgIn0iKTsKCiAgLy8gUXVldWUgaW50ZXJmYWNlLgoKICB2b2lkIGFkZExhc3QoRSB2YWx1ZSkgewogICAgX2FkZCh2YWx1ZSk7CiAgfQoKICB2b2lkIGFkZEZpcnN0KEUgdmFsdWUpIHsKICAgIF9oZWFkID0gKF9oZWFkIC0gMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgX3RhYmxlW19oZWFkXSA9IHZhbHVlOwogICAgaWYgKF9oZWFkID09IF90YWlsKSBfZ3JvdygpOwogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgfQoKICBFIHJlbW92ZUZpcnN0KCkgewogICAgaWYgKF9oZWFkID09IF90YWlsKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgRSByZXN1bHQgPSBfdGFibGVbX2hlYWRdOwogICAgX3RhYmxlW19oZWFkXSA9IG51bGw7CiAgICBfaGVhZCA9IChfaGVhZCArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIHJlbW92ZUxhc3QoKSB7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICBfdGFpbCA9IChfdGFpbCAtIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIEUgcmVzdWx0ID0gX3RhYmxlW190YWlsXTsKICAgIF90YWJsZVtfdGFpbF0gPSBudWxsOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIEludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgogIC8vLyBXaGV0aGVyIFtudW1iZXJdIGlzIGEgcG93ZXIgb2YgdHdvLgogIC8vLwogIC8vLyBPbmx5IHdvcmtzIGZvciBwb3NpdGl2ZSBudW1iZXJzLgogIHN0YXRpYyBib29sIF9pc1Bvd2VyT2YyKGludCBudW1iZXIpID0+IChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09IDA7CgogIC8vLyBSb3VuZHMgW251bWJlcl0gdXAgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgMi4KICAvLy8KICAvLy8gSWYgW251bWJlcl0gaXMgYSBwb3dlciBvZiAyIGFscmVhZHksIGl0IGlzIHJldHVybmVkLgogIC8vLwogIC8vLyBPbmx5IHdvcmtzIGZvciBwb3NpdGl2ZSBudW1iZXJzLgogIHN0YXRpYyBpbnQgX25leHRQb3dlck9mMihpbnQgbnVtYmVyKSB7CiAgICBhc3NlcnQobnVtYmVyID4gMCk7CiAgICBudW1iZXIgPSAobnVtYmVyIDw8IDEpIC0gMTsKICAgIGZvciAoOzspIHsKICAgICAgaW50IG5leHROdW1iZXIgPSBudW1iZXIgJiAobnVtYmVyIC0gMSk7CiAgICAgIGlmIChuZXh0TnVtYmVyID09IDApIHJldHVybiBudW1iZXI7CiAgICAgIG51bWJlciA9IG5leHROdW1iZXI7CiAgICB9CiAgfQoKICAvLy8gQ2hlY2sgaWYgdGhlIHF1ZXVlIGhhcyBiZWVuIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uCiAgdm9pZCBfY2hlY2tNb2RpZmljYXRpb24oaW50IGV4cGVjdGVkTW9kaWZpY2F0aW9uQ291bnQpIHsKICAgIGlmIChleHBlY3RlZE1vZGlmaWNhdGlvbkNvdW50ICE9IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBlbGVtZW50IGF0IGVuZCBvZiBxdWV1ZS4gVXNlZCBieSBib3RoIFthZGRdIGFuZCBbYWRkQWxsXS4KICB2b2lkIF9hZGQoRSBlbGVtZW50KSB7CiAgICBfdGFibGVbX3RhaWxdID0gZWxlbWVudDsKICAgIF90YWlsID0gKF90YWlsICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgaWYgKF9oZWFkID09IF90YWlsKSBfZ3JvdygpOwogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgfQoKICAvLy8gUmVtb3ZlcyB0aGUgZWxlbWVudCBhdCBbb2Zmc2V0XSBpbnRvIFtfdGFibGVdLgogIC8vLwogIC8vLyBSZW1vdmFsIGlzIHBlcmZvcm1lZCBieSBsaW5lYXJseSBtb3ZpbmcgZWxlbWVudHMgZWl0aGVyIGJlZm9yZSBvciBhZnRlcgogIC8vLyBbb2Zmc2V0XSBieSBvbmUgcG9zaXRpb24uCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIG5ldyBvZmZzZXQgb2YgdGhlIGZvbGxvd2luZyBlbGVtZW50LiBUaGlzIG1heSBiZSB0aGUgc2FtZQogIC8vLyBvZmZzZXQgb3IgdGhlIGZvbGxvd2luZyBvZmZzZXQgZGVwZW5kaW5nIG9uIGhvdyBlbGVtZW50cyBhcmUgbW92ZWQKICAvLy8gdG8gZmlsbCB0aGUgaG9sZS4KICBpbnQgX3JlbW92ZShpbnQgb2Zmc2V0KSB7CiAgICBpbnQgbWFzayA9IF90YWJsZS5sZW5ndGggLSAxOwogICAgaW50IHN0YXJ0RGlzdGFuY2UgPSAob2Zmc2V0IC0gX2hlYWQpICYgbWFzazsKICAgIGludCBlbmREaXN0YW5jZSA9IChfdGFpbCAtIG9mZnNldCkgJiBtYXNrOwogICAgaWYgKHN0YXJ0RGlzdGFuY2UgPCBlbmREaXN0YW5jZSkgewogICAgICAvLyBDbG9zZXN0IHRvIHN0YXJ0LgogICAgICBpbnQgaSA9IG9mZnNldDsKICAgICAgd2hpbGUgKGkgIT0gX2hlYWQpIHsKICAgICAgICBpbnQgcHJldk9mZnNldCA9IChpIC0gMSkgJiBtYXNrOwogICAgICAgIF90YWJsZVtpXSA9IF90YWJsZVtwcmV2T2Zmc2V0XTsKICAgICAgICBpID0gcHJldk9mZnNldDsKICAgICAgfQogICAgICBfdGFibGVbX2hlYWRdID0gbnVsbDsKICAgICAgX2hlYWQgPSAoX2hlYWQgKyAxKSAmIG1hc2s7CiAgICAgIHJldHVybiAob2Zmc2V0ICsgMSkgJiBtYXNrOwogICAgfSBlbHNlIHsKICAgICAgX3RhaWwgPSAoX3RhaWwgLSAxKSAmIG1hc2s7CiAgICAgIGludCBpID0gb2Zmc2V0OwogICAgICB3aGlsZSAoaSAhPSBfdGFpbCkgewogICAgICAgIGludCBuZXh0T2Zmc2V0ID0gKGkgKyAxKSAmIG1hc2s7CiAgICAgICAgX3RhYmxlW2ldID0gX3RhYmxlW25leHRPZmZzZXRdOwogICAgICAgIGkgPSBuZXh0T2Zmc2V0OwogICAgICB9CiAgICAgIF90YWJsZVtfdGFpbF0gPSBudWxsOwogICAgICByZXR1cm4gb2Zmc2V0OwogICAgfQogIH0KCiAgLy8vIEdyb3cgdGhlIHRhYmxlIHdoZW4gZnVsbC4KICB2b2lkIF9ncm93KCkgewogICAgTGlzdDxFPiBuZXdUYWJsZSA9IExpc3Q8RT4oX3RhYmxlLmxlbmd0aCAqIDIpOwogICAgaW50IHNwbGl0ID0gX3RhYmxlLmxlbmd0aCAtIF9oZWFkOwogICAgbmV3VGFibGUuc2V0UmFuZ2UoMCwgc3BsaXQsIF90YWJsZSwgX2hlYWQpOwogICAgbmV3VGFibGUuc2V0UmFuZ2Uoc3BsaXQsIHNwbGl0ICsgX2hlYWQsIF90YWJsZSwgMCk7CiAgICBfaGVhZCA9IDA7CiAgICBfdGFpbCA9IF90YWJsZS5sZW5ndGg7CiAgICBfdGFibGUgPSBuZXdUYWJsZTsKICB9CgogIGludCBfd3JpdGVUb0xpc3QoTGlzdDxFPiB0YXJnZXQpIHsKICAgIGFzc2VydCh0YXJnZXQubGVuZ3RoID49IGxlbmd0aCk7CiAgICBpZiAoX2hlYWQgPD0gX3RhaWwpIHsKICAgICAgaW50IGxlbmd0aCA9IF90YWlsIC0gX2hlYWQ7CiAgICAgIHRhcmdldC5zZXRSYW5nZSgwLCBsZW5ndGgsIF90YWJsZSwgX2hlYWQpOwogICAgICByZXR1cm4gbGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgaW50IGZpcnN0UGFydFNpemUgPSBfdGFibGUubGVuZ3RoIC0gX2hlYWQ7CiAgICAgIHRhcmdldC5zZXRSYW5nZSgwLCBmaXJzdFBhcnRTaXplLCBfdGFibGUsIF9oZWFkKTsKICAgICAgdGFyZ2V0LnNldFJhbmdlKGZpcnN0UGFydFNpemUsIGZpcnN0UGFydFNpemUgKyBfdGFpbCwgX3RhYmxlLCAwKTsKICAgICAgcmV0dXJuIF90YWlsICsgZmlyc3RQYXJ0U2l6ZTsKICAgIH0KICB9CgogIC8vLyBHcm93cyB0aGUgdGFibGUgZXZlbiBpZiBpdCBpcyBub3QgZnVsbC4KICB2b2lkIF9wcmVHcm93KGludCBuZXdFbGVtZW50Q291bnQpIHsKICAgIGFzc2VydChuZXdFbGVtZW50Q291bnQgPj0gbGVuZ3RoKTsKCiAgICAvLyBBZGQgc29tZSBleHRyYSByb29tIHRvIGVuc3VyZSB0aGF0IHRoZXJlJ3Mgcm9vbSBmb3IgbW9yZSBlbGVtZW50cyBhZnRlcgogICAgLy8gZXhwYW5zaW9uLgogICAgbmV3RWxlbWVudENvdW50ICs9IG5ld0VsZW1lbnRDb3VudCA+PiAxOwogICAgaW50IG5ld0NhcGFjaXR5ID0gX25leHRQb3dlck9mMihuZXdFbGVtZW50Q291bnQpOwogICAgTGlzdDxFPiBuZXdUYWJsZSA9IExpc3Q8RT4obmV3Q2FwYWNpdHkpOwogICAgX3RhaWwgPSBfd3JpdGVUb0xpc3QobmV3VGFibGUpOwogICAgX3RhYmxlID0gbmV3VGFibGU7CiAgICBfaGVhZCA9IDA7CiAgfQp9CgovLy8gSXRlcmF0b3IgZm9yIGEgW0xpc3RRdWV1ZV0uCi8vLwovLy8gQ29uc2lkZXJzIGFueSBhZGQgb3IgcmVtb3ZlIG9wZXJhdGlvbiBhIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uLgpjbGFzcyBfTGlzdFF1ZXVlSXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgTGlzdFF1ZXVlPEU+IF9xdWV1ZTsKICBmaW5hbCBpbnQgX2VuZDsKICBmaW5hbCBpbnQgX21vZGlmaWNhdGlvbkNvdW50OwogIGludCBfcG9zaXRpb247CiAgRSBfY3VycmVudDsKCiAgX0xpc3RRdWV1ZUl0ZXJhdG9yKExpc3RRdWV1ZTxFPiBxdWV1ZSkKICAgICAgOiBfcXVldWUgPSBxdWV1ZSwKICAgICAgICBfZW5kID0gcXVldWUuX3RhaWwsCiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0gcXVldWUuX21vZGlmaWNhdGlvbkNvdW50LAogICAgICAgIF9wb3NpdGlvbiA9IHF1ZXVlLl9oZWFkOwoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgX3F1ZXVlLl9jaGVja01vZGlmaWNhdGlvbihfbW9kaWZpY2F0aW9uQ291bnQpOwogICAgaWYgKF9wb3NpdGlvbiA9PSBfZW5kKSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfcXVldWUuX3RhYmxlW19wb3NpdGlvbl07CiAgICBfcG9zaXRpb24gPSAoX3Bvc2l0aW9uICsgMSkgJiAoX3F1ZXVlLl90YWJsZS5sZW5ndGggLSAxKTsKICAgIHJldHVybiB0cnVlOwogIH0KfQqDeQBOTjwBGQFIRxMETE0XTg9KO0AXIgExBkw+BjVIRg4pIEIKPQEnBkw+PAEqBkUlBkdIBkpPDjtOAU8GSEdFBkpMQhoWATsGPhMBOQY+EgEyGgEsGQEsFQE6BkUtHQFDQyUBPQY+KgFBBj4qAU0QAgE0FhIBKRYeNTEEARNERBYaBAIBSDZRIA0BKAE8FTkEAT4WPQQBDw8UBAE9PgE5NgIBQARKHkU5Th9EATMBFkQEARdIBAEPAR0BKjIoBAEuNigEAgE7BDoySEMfARUQMAQBFhEwBAEQEw8UBAEPMBYEATcRBAIBRhIzOksuSVAaFgQBNBEEAUsQLAQBRRMsBAIBPARCRSsZARg1BAE/Bkw+BjVIRg4pIFAKNiwgFwYRBAE1Bkw+ODABNCMBGh8VBAEbHhUEARYfFQQBJiYhFwYEARNEJBUTBAEUQSUVEwQBGjwrKywtMQgUGRkVCB8GEgQBPDwrKywtMQhMMBkZCBQGBAErGQQBKxoEARBBIAQBD0QfBAERPTtDPh0GKgQBOgZMUAZATjArIgQBOQZMTwZBTjAqJgQBFTgEARElKRcEAUgGTEopBlFCMAZLTU9NSiBGPCs0OzJGSxIXKyAyMQgUBgQBLzUEAUoCAT0rKQ4BRR4pARQsFxkYFAY8PTsGJikRBAEdAgEYBElPLAQ9QSoSDQ0eAR0GThAjExRKKzA4BionBAE2Bk8eBjVIRg4pIEgKLhwkNSwpJwgcFA0oMSQINCghCBUGBAEsBk8eMCgBGQE0OwEkMEkULQYEASYBOwEQQBoEAQ9ANgQBEUA6GgQBGy06BAErEhQlDR4GGBEEARsBFhEEASYfHyIgMCVFPRsPNy4jPR0RLj04HAoIHA0xBgQBHkkdHhQeFQgGEgQBQTATGR0+LRQYMg8rCAYEAS0GTjQrHgQBMQZONCsfBAERGksaCBkcBgQBSgEWARoRBAEbLxshGgQBFEAaHhovEwQBE0AaLx4aEwQBIAEqBidHATQGOwYnKRggDy4qGwYEAT07Oy8GBAFFGR0vIRoEATUGTiAGTEkYHCIxLycbFhspKBgIHCIiDSIWGykoGAgcFQYEASARMycwOA8bFwQBJSUaIjEVDTE4SCQGBAEuJycBTxItNi0kFw8EAgEgBEU1HRIgEQ4BKRgcNyEBHQEUMx0XFAYpPhEEAgEaZGFydDpjb2xsZWN0aW9uL3F1ZXVlLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvY29udmVydC5kYXJ0ibwvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vCi8vLyBFbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBkaWZmZXJlbnQgZGF0YSByZXByZXNlbnRhdGlvbnMsCi8vLyBpbmNsdWRpbmcgSlNPTiBhbmQgVVRGLTguCi8vLwovLy8gSW4gYWRkaXRpb24gdG8gY29udmVydGVycyBmb3IgY29tbW9uIGRhdGEgcmVwcmVzZW50YXRpb25zLCB0aGlzIGxpYnJhcnkKLy8vIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBjb252ZXJ0ZXJzIGluIGEgd2F5IHdoaWNoIG1ha2VzIHRoZW0gZWFzeSB0bwovLy8gY2hhaW4gYW5kIHRvIHVzZSB3aXRoIHN0cmVhbXMuCi8vLwovLy8gVG8gdXNlIHRoaXMgbGlicmFyeSBpbiB5b3VyIGNvZGU6Ci8vLwovLy8gICAgIGltcG9ydCAnZGFydDpjb252ZXJ0JzsKLy8vCi8vLyBUd28gY29tbW9ubHkgdXNlZCBjb252ZXJ0ZXJzIGFyZSB0aGUgdG9wLWxldmVsIGluc3RhbmNlcyBvZgovLy8gW0pzb25Db2RlY10gYW5kIFtVdGY4Q29kZWNdLCBuYW1lZCBbanNvbl0gYW5kIFt1dGY4XSwgcmVzcGVjdGl2ZWx5LgovLy8KLy8vIEpTT04gaXMgYSBzaW1wbGUgdGV4dCBmb3JtYXQgZm9yIHJlcHJlc2VudGluZwovLy8gc3RydWN0dXJlZCBvYmplY3RzIGFuZCBjb2xsZWN0aW9ucy4KLy8vIFRoZSBKU09OIGVuY29kZXIvZGVjb2RlciB0cmFuc2Zvcm1zIGJldHdlZW4gc3RyaW5ncyBhbmQKLy8vIG9iamVjdCBzdHJ1Y3R1cmVzLCBzdWNoIGFzIGxpc3RzIGFuZCBtYXBzLCB1c2luZyB0aGUgSlNPTiBmb3JtYXQuCi8vLwovLy8gVVRGLTggaXMgYSBjb21tb24gdmFyaWFibGUtd2lkdGggZW5jb2RpbmcgdGhhdCBjYW4gcmVwcmVzZW50Ci8vLyBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHNldC4KLy8vIFRoZSBVVEYtOCBlbmNvZGVyL2RlY29kZXIgdHJhbnNmb3JtcyBiZXR3ZWVuIFN0cmluZ3MgYW5kIGJ5dGVzLgovLy8KLy8vIENvbnZlcnRlcnMgYXJlIG9mdGVuIHVzZWQgd2l0aCBzdHJlYW1zCi8vLyB0byB0cmFuc2Zvcm0gdGhlIGRhdGEgdGhhdCBjb21lcyB0aHJvdWdoIHRoZSBzdHJlYW0KLy8vIGFzIGl0IGJlY29tZXMgYXZhaWxhYmxlLgovLy8gVGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgdHdvIGNvbnZlcnRlcnMuCi8vLyBUaGUgZmlyc3QgaXMgYSBVVEYtOCBkZWNvZGVyLCB3aGljaCBjb252ZXJ0cyB0aGUgZGF0YSBmcm9tIGJ5dGVzIHRvIFVURi04Ci8vLyBhcyBpdCdzIHJlYWQgZnJvbSBhIGZpbGUsCi8vLyBUaGUgc2Vjb25kIGlzIGFuIGluc3RhbmNlIG9mIFtMaW5lU3BsaXR0ZXJdLAovLy8gd2hpY2ggc3BsaXRzIHRoZSBkYXRhIG9uIG5ld2xpbmUgYm91bmRhcmllcy4KLy8vCi8vLyAgICAgdmFyIGxpbmVOdW1iZXIgPSAxOwovLy8gICAgIHZhciBzdHJlYW0gPSBGaWxlKCdxdW90ZXMudHh0Jykub3BlblJlYWQoKTsKLy8vCi8vLyAgICAgc3RyZWFtLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpCi8vLyAgICAgICAgICAgLnRyYW5zZm9ybShjb25zdCBMaW5lU3BsaXR0ZXIoKSkKLy8vICAgICAgICAgICAubGlzdGVuKChsaW5lKSB7Ci8vLyAgICAgICAgICAgICBpZiAoc2hvd0xpbmVOdW1iZXJzKSB7Ci8vLyAgICAgICAgICAgICAgIHN0ZG91dC53cml0ZSgnJHtsaW5lTnVtYmVyKyt9ICcpOwovLy8gICAgICAgICAgICAgfQovLy8gICAgICAgICAgICAgc3Rkb3V0LndyaXRlbG4obGluZSk7Ci8vLyAgICAgICAgICAgfSk7Ci8vLwovLy8gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgW0NvZGVjXSBhbmQgW0NvbnZlcnRlcl0gY2xhc3NlcwovLy8gZm9yIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIHlvdXIgb3duIGNvbnZlcnRlcnMuCi8vLwovLy8ge0BjYXRlZ29yeSBDb3JlfQpsaWJyYXJ5IGRhcnQuY29udmVydDsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCcgc2hvdyBDYXN0Q29udmVydGVyLCBwYXJzZUhleEJ5dGU7CgpwYXJ0ICdhc2NpaS5kYXJ0JzsKcGFydCAnYmFzZTY0LmRhcnQnOwpwYXJ0ICdieXRlX2NvbnZlcnNpb24uZGFydCc7CnBhcnQgJ2NodW5rZWRfY29udmVyc2lvbi5kYXJ0JzsKcGFydCAnY29kZWMuZGFydCc7CnBhcnQgJ2NvbnZlcnRlci5kYXJ0JzsKcGFydCAnZW5jb2RpbmcuZGFydCc7CnBhcnQgJ2h0bWxfZXNjYXBlLmRhcnQnOwpwYXJ0ICdqc29uLmRhcnQnOwpwYXJ0ICdsYXRpbjEuZGFydCc7CnBhcnQgJ2xpbmVfc3BsaXR0ZXIuZGFydCc7CnBhcnQgJ3N0cmluZ19jb252ZXJzaW9uLmRhcnQnOwpwYXJ0ICd1dGYuZGFydCc7CkoATk48AQRRHgRMUyMEJgQfBEBIBDIoPEYEQTJEBCs4HSxOHjExBBw0BCcvHyc0EiYSBEI4BBUWARUaOgETFB0gExcWGRIUGx8RAQxkYXJ0OmNvbnZlcnQyb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9jb252ZXJ0X3BhdGNoLmRhcnTAAOeyLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0OmNvbnZlcnQiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgUE9XRVJTX09GX1RFTiwgcGF0Y2gsIENsYXNzSUQ7CgppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBVaW50OExpc3QsIFVpbnQxNkxpc3Q7CgovLy8gVGhpcyBwYXRjaCBsaWJyYXJ5IGhhcyBubyBhZGRpdGlvbmFsIHBhcnRzLgoKLy8gSlNPTiBjb252ZXJzaW9uLgoKQHBhdGNoCl9wYXJzZUpzb24oU3RyaW5nIHNvdXJjZSwgcmV2aXZlcihrZXksIHZhbHVlKSkgewogIF9CdWlsZEpzb25MaXN0ZW5lciBsaXN0ZW5lcjsKICBpZiAocmV2aXZlciA9PSBudWxsKSB7CiAgICBsaXN0ZW5lciA9IG5ldyBfQnVpbGRKc29uTGlzdGVuZXIoKTsKICB9IGVsc2UgewogICAgbGlzdGVuZXIgPSBuZXcgX1Jldml2ZXJKc29uTGlzdGVuZXIocmV2aXZlcik7CiAgfQogIHZhciBwYXJzZXIgPSBuZXcgX0pzb25TdHJpbmdQYXJzZXIobGlzdGVuZXIpOwogIHBhcnNlci5jaHVuayA9IHNvdXJjZTsKICBwYXJzZXIuY2h1bmtFbmQgPSBzb3VyY2UubGVuZ3RoOwogIHBhcnNlci5wYXJzZSgwKTsKICBwYXJzZXIuY2xvc2UoKTsKICByZXR1cm4gbGlzdGVuZXIucmVzdWx0Owp9CgpAcGF0Y2gKY2xhc3MgVXRmOERlY29kZXIgewogIEBwYXRjaAogIENvbnZlcnRlcjxMaXN0PGludD4sIFQ+IGZ1c2U8VD4oQ29udmVydGVyPFN0cmluZywgVD4gbmV4dCkgewogICAgaWYgKG5leHQgaXMgSnNvbkRlY29kZXIpIHsKICAgICAgcmV0dXJuIG5ldyBfSnNvblV0ZjhEZWNvZGVyKAogICAgICAgICAgICAgIChuZXh0IGFzIEpzb25EZWNvZGVyKS5fcmV2aXZlciwgdGhpcy5fYWxsb3dNYWxmb3JtZWQpCiAgICAgICAgICBhcyBkeW5hbWljLyo9Q29udmVydGVyPExpc3Q8aW50PiwgVD4qLzsKICAgIH0KICAgIC8vIFRPRE8obHJuKTogUmVjb2duaXplIGEgZnVzZWQgZGVjb2RlciB3aGVyZSB0aGUgbmV4dCBzdGVwIGlzIEpzb25EZWNvZGVyLgogICAgcmV0dXJuIHN1cGVyLmZ1c2U8VD4obmV4dCk7CiAgfQoKICAvLyBBbGxvdyBpbnRlcmNlcHRpbmcgb2YgVVRGLTggZGVjb2Rpbmcgd2hlbiBidWlsdC1pbiBsaXN0cyBhcmUgcGFzc2VkLgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX2NvbnZlcnRJbnRlcmNlcHRlZCgKICAgICAgYm9vbCBhbGxvd01hbGZvcm1lZCwgTGlzdDxpbnQ+IGNvZGVVbml0cywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICByZXR1cm4gbnVsbDsgLy8gVGhpcyBjYWxsIHdhcyBub3QgaW50ZXJjZXB0ZWQuCiAgfQp9CgpjbGFzcyBfSnNvblV0ZjhEZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgT2JqZWN0PiB7CiAgZmluYWwgRnVuY3Rpb24oT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSBfcmV2aXZlcjsKICBmaW5hbCBib29sIF9hbGxvd01hbGZvcm1lZDsKCiAgX0pzb25VdGY4RGVjb2Rlcih0aGlzLl9yZXZpdmVyLCB0aGlzLl9hbGxvd01hbGZvcm1lZCk7CgogIE9iamVjdCBjb252ZXJ0KExpc3Q8aW50PiBpbnB1dCkgewogICAgdmFyIHBhcnNlciA9IF9Kc29uVXRmOERlY29kZXJTaW5rLl9jcmVhdGVQYXJzZXIoX3Jldml2ZXIsIF9hbGxvd01hbGZvcm1lZCk7CiAgICBwYXJzZXIuY2h1bmsgPSBpbnB1dDsKICAgIHBhcnNlci5jaHVua0VuZCA9IGlucHV0Lmxlbmd0aDsKICAgIHBhcnNlci5wYXJzZSgwKTsKICAgIHBhcnNlci5jbG9zZSgpOwogICAgcmV0dXJuIHBhcnNlci5yZXN1bHQ7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPE9iamVjdD4gc2luaykgewogICAgcmV0dXJuIG5ldyBfSnNvblV0ZjhEZWNvZGVyU2luayhfcmV2aXZlciwgc2luaywgX2FsbG93TWFsZm9ybWVkKTsKICB9Cn0KCi8vLy8gSW1wbGVtZW50YXRpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vIFNpbXBsZSBBUEkgZm9yIEpTT04gcGFyc2luZy4KCi8qKgogKiBMaXN0ZW5lciBmb3IgcGFyc2luZyBldmVudHMgZnJvbSBbX0NodW5rZWRKc29uUGFyc2VyXS4KICovCmFic3RyYWN0IGNsYXNzIF9Kc29uTGlzdGVuZXIgewogIHZvaWQgaGFuZGxlU3RyaW5nKFN0cmluZyB2YWx1ZSkge30KICB2b2lkIGhhbmRsZU51bWJlcihudW0gdmFsdWUpIHt9CiAgdm9pZCBoYW5kbGVCb29sKGJvb2wgdmFsdWUpIHt9CiAgdm9pZCBoYW5kbGVOdWxsKCkge30KICB2b2lkIGJlZ2luT2JqZWN0KCkge30KICB2b2lkIHByb3BlcnR5TmFtZSgpIHt9CiAgdm9pZCBwcm9wZXJ0eVZhbHVlKCkge30KICB2b2lkIGVuZE9iamVjdCgpIHt9CiAgdm9pZCBiZWdpbkFycmF5KCkge30KICB2b2lkIGFycmF5RWxlbWVudCgpIHt9CiAgdm9pZCBlbmRBcnJheSgpIHt9CgogIC8qKgogICAqIFJlYWQgb3V0IHRoZSBmaW5hbCByZXN1bHQgb2YgcGFyc2luZyBhIEpTT04gc3RyaW5nLgogICAqCiAgICogTXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBlbnRpcmUgaW5wdXQgaGFzIGJlZW4gcGFyc2VkLgogICAqLwogIGdldCByZXN1bHQ7Cn0KCi8qKgogKiBBIFtfSnNvbkxpc3RlbmVyXSB0aGF0IGJ1aWxkcyBkYXRhIG9iamVjdHMgZnJvbSB0aGUgcGFyc2VyIGV2ZW50cy4KICoKICogVGhpcyBpcyBhIHNpbXBsZSBzdGFjay1iYXNlZCBvYmplY3QgYnVpbGRlci4gSXQga2VlcHMgdGhlIG1vc3QgcmVjZW50bHkKICogc2VlbiB2YWx1ZSBpbiBhIHZhcmlhYmxlLCBhbmQgdXNlcyBpdCBkZXBlbmRpbmcgb24gdGhlIGZvbGxvd2luZyBldmVudC4KICovCmNsYXNzIF9CdWlsZEpzb25MaXN0ZW5lciBleHRlbmRzIF9Kc29uTGlzdGVuZXIgewogIC8qKgogICAqIFN0YWNrIHVzZWQgdG8gaGFuZGxlIG5lc3RlZCBjb250YWluZXJzLgogICAqCiAgICogVGhlIGN1cnJlbnQgY29udGFpbmVyIGlzIHB1c2hlZCBvbiB0aGUgc3RhY2sgd2hlbiBhIG5ldyBvbmUgaXMKICAgKiBzdGFydGVkLiBJZiB0aGUgY29udGFpbmVyIGlzIGEgW01hcF0sIHRoZXJlIGlzIGFsc28gYSBjdXJyZW50IFtrZXldCiAgICogd2hpY2ggaXMgYWxzbyBzdG9yZWQgb24gdGhlIHN0YWNrLgogICAqLwogIExpc3Qgc3RhY2sgPSBbXTsKICAvKiogVGhlIGN1cnJlbnQgW01hcF0gb3IgW0xpc3RdIGJlaW5nIGJ1aWx0LiAqLwogIHZhciBjdXJyZW50Q29udGFpbmVyOwogIC8qKiBUaGUgbW9zdCByZWNlbnRseSByZWFkIHByb3BlcnR5IGtleS4gKi8KICBTdHJpbmcga2V5OwogIC8qKiBUaGUgbW9zdCByZWNlbnRseSByZWFkIHZhbHVlLiAqLwogIHZhciB2YWx1ZTsKCiAgLyoqIFB1c2hlcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250YWluZXIgKGFuZCBrZXksIGlmIGEgW01hcF0pLiAqLwogIHZvaWQgcHVzaENvbnRhaW5lcigpIHsKICAgIGlmIChjdXJyZW50Q29udGFpbmVyIGlzIE1hcCkgc3RhY2suYWRkKGtleSk7CiAgICBzdGFjay5hZGQoY3VycmVudENvbnRhaW5lcik7CiAgfQoKICAvKiogUG9wcyB0aGUgdG9wIGNvbnRhaW5lciBmcm9tIHRoZSBbc3RhY2tdLCBpbmNsdWRpbmcgYSBrZXkgaWYgYXBwbGljYWJsZS4gKi8KICB2b2lkIHBvcENvbnRhaW5lcigpIHsKICAgIHZhbHVlID0gY3VycmVudENvbnRhaW5lcjsKICAgIGN1cnJlbnRDb250YWluZXIgPSBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICBpZiAoY3VycmVudENvbnRhaW5lciBpcyBNYXApIGtleSA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKICB9CgogIHZvaWQgaGFuZGxlU3RyaW5nKFN0cmluZyB2YWx1ZSkgewogICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogIH0KCiAgdm9pZCBoYW5kbGVOdW1iZXIobnVtIHZhbHVlKSB7CiAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgfQoKICB2b2lkIGhhbmRsZUJvb2woYm9vbCB2YWx1ZSkgewogICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogIH0KCiAgdm9pZCBoYW5kbGVOdWxsKCkgewogICAgdGhpcy52YWx1ZSA9IG51bGw7CiAgfQoKICB2b2lkIGJlZ2luT2JqZWN0KCkgewogICAgcHVzaENvbnRhaW5lcigpOwogICAgY3VycmVudENvbnRhaW5lciA9IDxTdHJpbmcsIGR5bmFtaWM+e307CiAgfQoKICB2b2lkIHByb3BlcnR5TmFtZSgpIHsKICAgIGtleSA9IHZhbHVlOwogICAgdmFsdWUgPSBudWxsOwogIH0KCiAgdm9pZCBwcm9wZXJ0eVZhbHVlKCkgewogICAgTWFwIG1hcCA9IGN1cnJlbnRDb250YWluZXI7CiAgICBtYXBba2V5XSA9IHZhbHVlOwogICAga2V5ID0gdmFsdWUgPSBudWxsOwogIH0KCiAgdm9pZCBlbmRPYmplY3QoKSB7CiAgICBwb3BDb250YWluZXIoKTsKICB9CgogIHZvaWQgYmVnaW5BcnJheSgpIHsKICAgIHB1c2hDb250YWluZXIoKTsKICAgIGN1cnJlbnRDb250YWluZXIgPSBbXTsKICB9CgogIHZvaWQgYXJyYXlFbGVtZW50KCkgewogICAgY3VycmVudENvbnRhaW5lci5hZGQodmFsdWUpOwogICAgdmFsdWUgPSBudWxsOwogIH0KCiAgdm9pZCBlbmRBcnJheSgpIHsKICAgIHBvcENvbnRhaW5lcigpOwogIH0KCiAgLyoqIFJlYWQgb3V0IHRoZSBmaW5hbCByZXN1bHQgb2YgcGFyc2luZyBhIEpTT04gc3RyaW5nLiAqLwogIGdldCByZXN1bHQgewogICAgYXNzZXJ0KGN1cnJlbnRDb250YWluZXIgPT0gbnVsbCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgpjbGFzcyBfUmV2aXZlckpzb25MaXN0ZW5lciBleHRlbmRzIF9CdWlsZEpzb25MaXN0ZW5lciB7CiAgZmluYWwgRnVuY3Rpb24oT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSByZXZpdmVyOwogIF9SZXZpdmVySnNvbkxpc3RlbmVyKHRoaXMucmV2aXZlcik7CgogIHZvaWQgYXJyYXlFbGVtZW50KCkgewogICAgTGlzdCBsaXN0ID0gY3VycmVudENvbnRhaW5lcjsKICAgIHZhbHVlID0gcmV2aXZlcihsaXN0Lmxlbmd0aCwgdmFsdWUpOwogICAgc3VwZXIuYXJyYXlFbGVtZW50KCk7CiAgfQoKICB2b2lkIHByb3BlcnR5VmFsdWUoKSB7CiAgICB2YWx1ZSA9IHJldml2ZXIoa2V5LCB2YWx1ZSk7CiAgICBzdXBlci5wcm9wZXJ0eVZhbHVlKCk7CiAgfQoKICBnZXQgcmVzdWx0IHsKICAgIHJldHVybiByZXZpdmVyKG51bGwsIHZhbHVlKTsKICB9Cn0KCi8qKgogKiBCdWZmZXIgaG9sZGluZyBwYXJ0cyBvZiBhIG51bWVyYWwuCiAqCiAqIFRoZSBidWZmZXIgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgb2YgYSBKU09OIG51bWJlci4KICogVGhlc2UgYXJlIGFsbCBBU0NJSSwgc28gYW4gW1VpbnQ4TGlzdF0gaXMgdXNlZCBhcyBiYWNraW5nIHN0b3JlLgogKgogKiBUaGlzIGJ1ZmZlciBpcyB1c2VkIHdoZW4gYSBKU09OIG51bWJlciBpcyBzcGxpdCBiZXR3ZWVuIHNlcGFyYXRlIGNodW5rcy4KICoKICovCmNsYXNzIF9OdW1iZXJCdWZmZXIgewogIHN0YXRpYyBjb25zdCBpbnQgbWluQ2FwYWNpdHkgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IGtEZWZhdWx0T3ZlcmhlYWQgPSA1OwogIFVpbnQ4TGlzdCBsaXN0OwogIGludCBsZW5ndGggPSAwOwogIF9OdW1iZXJCdWZmZXIoaW50IGluaXRpYWxDYXBhY2l0eSkKICAgICAgOiBsaXN0ID0gbmV3IFVpbnQ4TGlzdChfaW5pdGlhbENhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpOwoKICBpbnQgZ2V0IGNhcGFjaXR5ID0+IGxpc3QubGVuZ3RoOwoKICAvLyBQaWNrIGFuIGluaXRpYWwgY2FwYWNpdHkgZ3JlYXRlciB0aGFuIHRoZSBmaXJzdCBwYXJ0J3Mgc2l6ZS4KICAvLyBUaGUgdHlwaWNhbCB1c2UgY2FzZSBoYXMgdHdvIHBhcnRzLCB0aGlzIGlzIHRoZSBhdHRlbXB0IGF0CiAgLy8gZ3Vlc3NpbmcgdGhlIHNpemUgb2YgdGhlIHNlY29uZCBwYXJ0IHdpdGhvdXQgb3ZlcmRvaW5nIGl0LgogIC8vIFRoZSBkZWZhdWx0IGVzdGltYXRlIG9mIHRoZSBzZWNvbmQgcGFydCBpcyBba0RlZmF1bHRPdmVyaGVhZF0sCiAgLy8gdGhlbiByb3VuZCB0byBtdWx0aXBsdW0gb2YgZm91ciwgYW5kIHJldHVybiB0aGUgcmVzdWx0LAogIC8vIG9yIFttaW5DYXBhY2l0eV0gaWYgdGhhdCBpcyBncmVhdGVyLgogIHN0YXRpYyBpbnQgX2luaXRpYWxDYXBhY2l0eShpbnQgbWluQ2FwYWNpdHkpIHsKICAgIG1pbkNhcGFjaXR5ICs9IGtEZWZhdWx0T3ZlcmhlYWQ7CiAgICBpZiAobWluQ2FwYWNpdHkgPCBtaW5DYXBhY2l0eSkgcmV0dXJuIG1pbkNhcGFjaXR5OwogICAgbWluQ2FwYWNpdHkgPSAobWluQ2FwYWNpdHkgKyAzKSAmIH4zOyAvLyBSb3VuZCB0byBtdWx0aXBsZSBvZiBmb3VyLgogICAgcmV0dXJuIG1pbkNhcGFjaXR5OwogIH0KCiAgLy8gR3Jvd3MgdG8gdGhlIGV4YWN0IHNpemUgYXNrZWQgZm9yLgogIHZvaWQgZW5zdXJlQ2FwYWNpdHkoaW50IG5ld0NhcGFjaXR5KSB7CiAgICBVaW50OExpc3QgbGlzdCA9IHRoaXMubGlzdDsKICAgIGlmIChuZXdDYXBhY2l0eSA8PSBsaXN0Lmxlbmd0aCkgcmV0dXJuOwogICAgVWludDhMaXN0IG5ld0xpc3QgPSBuZXcgVWludDhMaXN0KG5ld0NhcGFjaXR5KTsKICAgIG5ld0xpc3Quc2V0UmFuZ2UoMCwgbGlzdC5sZW5ndGgsIGxpc3QsIDApOwogICAgdGhpcy5saXN0ID0gbmV3TGlzdDsKICB9CgogIFN0cmluZyBnZXRTdHJpbmcoKSB7CiAgICBTdHJpbmcgcmVzdWx0ID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGxpc3QsIDAsIGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gVE9ETyhscm4pOiBTZWUgaWYgcGFyc2luZyBvZiBudW1iZXJzIGNhbiBiZSBhYnN0cmFjdGVkIHRvIHNvbWV0aGluZwogIC8vIG5vdCBvbmx5IHdvcmtpbmcgb24gc3RyaW5ncywgYnV0IGFsc28gb24gY2hhci1jb2RlIGxpc3RzLCB3aXRob3V0IGxvc3NpbmcKICAvLyBwZXJmb3JtYW5jZS4KICBudW0gcGFyc2VOdW0oKSA9PiBudW0ucGFyc2UoZ2V0U3RyaW5nKCkpOwogIGRvdWJsZSBwYXJzZURvdWJsZSgpID0+IGRvdWJsZS5wYXJzZShnZXRTdHJpbmcoKSk7Cn0KCi8qKgogKiBDaHVua2VkIEpTT04gcGFyc2VyLgogKgogKiBSZWNlaXZlcyBpbnB1dHMgaW4gY2h1bmtzLCBnaXZlcyBhY2Nlc3MgdG8gaW5kaXZpZHVhbCBwYXJ0cyBvZiB0aGUgaW5wdXQsCiAqIGFuZCBzdG9yZXMgaW5wdXQgc3RhdGUgYmV0d2VlbiBjaHVua3MuCiAqCiAqIEltcGxlbWVudGF0aW9ucyBpbmNsdWRlIFtTdHJpbmddIGFuZCBVVEYtOCBwYXJzZXJzLgogKi8KYWJzdHJhY3QgY2xhc3MgX0NodW5rZWRKc29uUGFyc2VyPFQ+IHsKICAvLyBBIHNpbXBsZSBub24tcmVjdXJzaXZlIHN0YXRlLWJhc2VkIHBhcnNlciBmb3IgSlNPTi4KICAvLwogIC8vIExpdGVyYWwgdmFsdWVzIGFjY2VwdGVkIGluIHN0YXRlcyBBUlJBWV9FTVBUWSwgQVJSQVlfQ09NTUEsIE9CSkVDVF9DT0xPTgogIC8vIGFuZCBzdHJpbmdzIGFsc28gaW4gT0JKRUNUX0VNUFRZLCBPQkpFQ1RfQ09NTUEuCiAgLy8gICAgICAgICAgICAgICBWQUxVRSAgU1RSSU5HICA6ICAsICB9ICBdICAgICAgICBUcmFuc2l0aW9ucyB0bwogIC8vIEVNUFRZICAgICAgICAgICAgWCAgICAgIFggICAgICAgICAgICAgICAgICAgLT4gRU5ECiAgLy8gQVJSQVlfRU1QVFkgICAgICBYICAgICAgWCAgICAgICAgICAgICBAICAgICAtPiBBUlJBWV9WQUxVRSAvIHBvcAogIC8vIEFSUkFZX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgQCAgICAgQCAgICAgLT4gQVJSQVlfQ09NTUEgLyBwb3AKICAvLyBBUlJBWV9DT01NQSAgICAgIFggICAgICBYICAgICAgICAgICAgICAgICAgIC0+IEFSUkFZX1ZBTFVFCiAgLy8gT0JKRUNUX0VNUFRZICAgICAgICAgICAgWCAgICAgICAgICBAICAgICAgICAtPiBPQkpFQ1RfS0VZIC8gcG9wCiAgLy8gT0JKRUNUX0tFWSAgICAgICAgICAgICAgICAgICBAICAgICAgICAgICAgICAtPiBPQkpFQ1RfQ09MT04KICAvLyBPQkpFQ1RfQ09MT04gICAgIFggICAgICBYICAgICAgICAgICAgICAgICAgIC0+IE9CSkVDVF9WQUxVRQogIC8vIE9CSkVDVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgQCAgQCAgICAgICAgLT4gT0JKRUNUX0NPTU1BIC8gcG9wCiAgLy8gT0JKRUNUX0NPTU1BICAgICAgICAgICAgWCAgICAgICAgICAgICAgICAgICAtPiBPQkpFQ1RfS0VZCiAgLy8gRU5ECiAgLy8gU3RhcnRpbmcgYSBuZXcgYXJyYXkgb3Igb2JqZWN0IHdpbGwgcHVzaCB0aGUgY3VycmVudCBzdGF0ZS4gVGhlICJwb3AiCiAgLy8gYWJvdmUgbWVhbnMgcmVzdG9yaW5nIHRoaXMgc3RhdGUgYW5kIHRoZW4gbWFya2luZyBpdCBhcyBhbiBlbmRlZCB2YWx1ZS4KICAvLyBYIG1lYW5zIGdlbmVyaWMgaGFuZGxpbmcsIEAgbWVhbnMgc3BlY2lhbCBoYW5kbGluZyBmb3IganVzdCB0aGF0CiAgLy8gc3RhdGUgLSB0aGF0IGlzLCB2YWx1ZXMgYXJlIGhhbmRsZWQgZ2VuZXJpY2FsbHksIG9ubHkgcHVuY3R1YXRpb24KICAvLyBjYXJlcyBhYm91dCB0aGUgY3VycmVudCBzdGF0ZS4KICAvLyBWYWx1ZXMgZm9yIHN0YXRlcyBhcmUgY2hvc2VuIHNvIGJpdHMgMCBhbmQgMSB0ZWxsIHdoZXRoZXIKICAvLyBhIHN0cmluZy92YWx1ZSBpcyBhbGxvd2VkLCBhbmQgc2V0dGluZyBiaXRzIDAgdGhyb3VnaCAyIGFmdGVyIGEgdmFsdWUKICAvLyBnZXRzIHRvIHRoZSBuZXh0IHN0YXRlIChub3QgZW1wdHksIGRvZXNuJ3QgYWxsb3cgYSB2YWx1ZSkuCgogIC8vIFN0YXRlIGJ1aWxkaW5nLWJsb2NrIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IFRPUF9MRVZFTCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBJTlNJREVfQVJSQVkgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgSU5TSURFX09CSkVDVCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBBRlRFUl9DT0xPTiA9IDM7IC8vIEFsd2F5cyBpbnNpZGUgb2JqZWN0LgoKICBzdGF0aWMgY29uc3QgaW50IEFMTE9XX1NUUklOR19NQVNLID0gODsgLy8gQWxsb3dlZCBpZiB6ZXJvLgogIHN0YXRpYyBjb25zdCBpbnQgQUxMT1dfVkFMVUVfTUFTSyA9IDQ7IC8vIEFsbG93ZWQgaWYgemVyby4KICBzdGF0aWMgY29uc3QgaW50IEFMTE9XX1ZBTFVFID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFNUUklOR19PTkxZID0gNDsKICBzdGF0aWMgY29uc3QgaW50IE5PX1ZBTFVFUyA9IDEyOwoKICAvLyBPYmplY3RzIGFuZCBhcnJheXMgYXJlICJlbXB0eSIgdW50aWwgdGhlaXIgZmlyc3QgcHJvcGVydHkvZWxlbWVudC4KICAvLyBBdCB0aGlzIHBvc2l0aW9uLCB0aGV5IG1heSBlaXRoZXIgaGF2ZSBhbiBlbnRyeSBvciBhIGNsb3NlLWJyYWNrZXQuCiAgc3RhdGljIGNvbnN0IGludCBFTVBUWSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBOT05fRU1QVFkgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IEVNUFRZX01BU0sgPSAxNjsgLy8gRW1wdHkgaWYgemVyby4KCiAgLy8gQWN0dWFsIHN0YXRlcyAgICAgICAgICAgICAgIDogQ29udGV4dCB8IElzIGVtcHR5PyB8IE5leHQ/CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9JTklUSUFMID0gVE9QX0xFVkVMIHwgRU1QVFkgfCBBTExPV19WQUxVRTsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX0VORCA9IFRPUF9MRVZFTCB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKCiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9BUlJBWV9FTVBUWSA9IElOU0lERV9BUlJBWSB8IEVNUFRZIHwgQUxMT1dfVkFMVUU7CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9BUlJBWV9WQUxVRSA9IElOU0lERV9BUlJBWSB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX0FSUkFZX0NPTU1BID0gSU5TSURFX0FSUkFZIHwgTk9OX0VNUFRZIHwgQUxMT1dfVkFMVUU7CgogIHN0YXRpYyBjb25zdCBpbnQgU1RBVEVfT0JKRUNUX0VNUFRZID0gSU5TSURFX09CSkVDVCB8IEVNUFRZIHwgU1RSSU5HX09OTFk7CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9PQkpFQ1RfS0VZID0gSU5TSURFX09CSkVDVCB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX09CSkVDVF9DT0xPTiA9IEFGVEVSX0NPTE9OIHwgTk9OX0VNUFRZIHwgQUxMT1dfVkFMVUU7CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9PQkpFQ1RfVkFMVUUgPSBBRlRFUl9DT0xPTiB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX09CSkVDVF9DT01NQSA9IElOU0lERV9PQkpFQ1QgfCBOT05fRU1QVFkgfCBTVFJJTkdfT05MWTsKCiAgLy8gQml0cyBzZXQgaW4gc3RhdGUgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHJlYWRpbmcgYSB2YWx1ZS4KICAvLyBUaGlzIHRyYW5zaXRpb25zIHRoZSBzdGF0ZSB0byBleHBlY3QgdGhlIG5leHQgcHVuY3R1YXRpb24uCiAgc3RhdGljIGNvbnN0IGludCBWQUxVRV9SRUFEX0JJVFMgPSBOT05fRU1QVFkgfCBOT19WQUxVRVM7CgogIC8vIENoYXJhY3RlciBjb2RlIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IEJBQ0tTUEFDRSA9IDB4MDg7CiAgc3RhdGljIGNvbnN0IGludCBUQUIgPSAweDA5OwogIHN0YXRpYyBjb25zdCBpbnQgTkVXTElORSA9IDB4MGE7CiAgc3RhdGljIGNvbnN0IGludCBDQVJSSUFHRV9SRVRVUk4gPSAweDBkOwogIHN0YXRpYyBjb25zdCBpbnQgRk9STV9GRUVEID0gMHgwYzsKICBzdGF0aWMgY29uc3QgaW50IFNQQUNFID0gMHgyMDsKICBzdGF0aWMgY29uc3QgaW50IFFVT1RFID0gMHgyMjsKICBzdGF0aWMgY29uc3QgaW50IFBMVVMgPSAweDJiOwogIHN0YXRpYyBjb25zdCBpbnQgQ09NTUEgPSAweDJjOwogIHN0YXRpYyBjb25zdCBpbnQgTUlOVVMgPSAweDJkOwogIHN0YXRpYyBjb25zdCBpbnQgREVDSU1BTFBPSU5UID0gMHgyZTsKICBzdGF0aWMgY29uc3QgaW50IFNMQVNIID0gMHgyZjsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfMCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSXzkgPSAweDM5OwogIHN0YXRpYyBjb25zdCBpbnQgQ09MT04gPSAweDNhOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9FID0gMHg0NTsKICBzdGF0aWMgY29uc3QgaW50IExCUkFDS0VUID0gMHg1YjsKICBzdGF0aWMgY29uc3QgaW50IEJBQ0tTTEFTSCA9IDB4NWM7CiAgc3RhdGljIGNvbnN0IGludCBSQlJBQ0tFVCA9IDB4NWQ7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX2EgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9iID0gMHg2MjsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfZSA9IDB4NjU7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX2YgPSAweDY2OwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9sID0gMHg2YzsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfbiA9IDB4NmU7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX3IgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9zID0gMHg3MzsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfdCA9IDB4NzQ7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX3UgPSAweDc1OwogIHN0YXRpYyBjb25zdCBpbnQgTEJSQUNFID0gMHg3YjsKICBzdGF0aWMgY29uc3QgaW50IFJCUkFDRSA9IDB4N2Q7CgogIC8vIFN0YXRlIG9mIHBhcnRpYWwgdmFsdWUgYXQgY2h1bmsgc3BsaXQuCiAgc3RhdGljIGNvbnN0IGludCBOT19QQVJUSUFMID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFBBUlRJQUxfU1RSSU5HID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFBBUlRJQUxfTlVNRVJBTCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBQQVJUSUFMX0tFWVdPUkQgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19QQVJUSUFMID0gMzsKCiAgLy8gUGFydGlhbCBzdGF0ZXMgZm9yIG51bWVyYWxzLiBWYWx1ZXMgY2FuIGJlIHwnZWQgd2l0aCBQQVJUSUFMX05VTUVSQUwuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fU0lHTiA9IDA7IC8vIEFmdGVyIGluaXRpYWwgJy0nLgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX1pFUk8gPSA0OyAvLyBBZnRlciAnMCcgYXMgZmlyc3QgZGlnaXQuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRElHSVQgPSA4OyAvLyBBZnRlciBkaWdpdCwgbm8gJy4nIG9yICdlJyBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX0RPVCA9IDEyOyAvLyBBZnRlciAnLicuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRE9UX0RJR0lUID0gMTY7IC8vIEFmdGVyIGEgZGVjaW1hbCBkaWdpdCAoYWZ0ZXIgJy4nKS4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9FID0gMjA7IC8vIEFmdGVyICdlJyBvciAnRScuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRV9TSUdOID0gMjQ7IC8vIEFmdGVyICctJyBvciAnKycgYWZ0ZXIgJ2UnIG9yICdFJy4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9FX0RJR0lUID0gMjg7IC8vIEFmdGVyIGV4cG9uZW50IGRpZ2l0LgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX1NVQ0NFU1MgPSAzMjsgLy8gTmV2ZXIgc3RvcmVkIGFzIHBhcnRpYWwgc3RhdGUuCgogIC8vIFBhcnRpYWwgc3RhdGVzIGZvciBzdHJpbmdzLgogIHN0YXRpYyBjb25zdCBpbnQgU1RSX1BMQUlOID0gMDsgLy8gSW5zaWRlIHN0cmluZywgYnV0IG5vdCBlc2NhcGUuCiAgc3RhdGljIGNvbnN0IGludCBTVFJfRVNDQVBFID0gNDsgLy8gQWZ0ZXIgJ1wnLgogIHN0YXRpYyBjb25zdCBpbnQgU1RSX1UgPSAxNjsgLy8gQWZ0ZXIgJ1x1JyBhbmQgMC0zIGhleCBkaWdpdHMuCiAgc3RhdGljIGNvbnN0IGludCBTVFJfVV9DT1VOVF9TSElGVCA9IDI7IC8vIEhleCBkaWdpdCBjb3VudCBpbiBiaXRzIDItMy4KICBzdGF0aWMgY29uc3QgaW50IFNUUl9VX1ZBTFVFX1NISUZUID0gNTsgLy8gSGV4IGRpZ2l0IHZhbHVlIGluIGJpdHMgNSsuCgogIC8vIFBhcnRpYWwgc3RhdGVzIGZvciBrZXl3b3Jkcy4KICBzdGF0aWMgY29uc3QgaW50IEtXRF9UWVBFX01BU0sgPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IEtXRF9UWVBFX1NISUZUID0gMjsKICBzdGF0aWMgY29uc3QgaW50IEtXRF9OVUxMID0gMDsgLy8gUHJlZml4IG9mICJudWxsIiBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgS1dEX1RSVUUgPSA0OyAvLyBQcmVmaXggb2YgInRydWUiIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBLV0RfRkFMU0UgPSA4OyAvLyBQcmVmaXggb2YgImZhbHNlIiBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgS1dEX0JPTSA9IDEyOyAvLyBQcmVmaXggb2YgQk9NIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBLV0RfQ09VTlRfU0hJRlQgPSA0OyAvLyBQcmVmaXggbGVuZ3RoIGluIGJpdHMgNCsuCgogIC8vIE1hc2sgdXNlZCB0byBtYXNrIG9mZiB0d28gbG93ZXIgYml0cy4KICBzdGF0aWMgY29uc3QgaW50IFRXT19CSVRfTUFTSyA9IDM7CgogIGZpbmFsIF9Kc29uTGlzdGVuZXIgbGlzdGVuZXI7CgogIC8vIFRoZSBjdXJyZW50IHBhcnNpbmcgc3RhdGUuCiAgaW50IHN0YXRlID0gU1RBVEVfSU5JVElBTDsKICBMaXN0PGludD4gc3RhdGVzID0gPGludD5bXTsKCiAgLyoqCiAgICogU3RvcmVzIHRva2VuaXplciBzdGF0ZSBiZXR3ZWVuIGNodW5rcy4KICAgKgogICAqIFRoaXMgc3RhdGUgaXMgc3RvcmVkIHdoZW4gYSBjaHVuayBzdG9wcyBpbiB0aGUgbWlkZGxlIG9mIGEKICAgKiB0b2tlbiAoc3RyaW5nLCBudW1lcmFsLCBib29sZWFuIG9yIG51bGwpLgogICAqCiAgICogVGhlIHBhcnRpYWwgc3RhdGUgaXMgdXNlZCB0byBjb250aW51ZSBwYXJzaW5nIG9uIHRoZSBuZXh0IGNodW5rLgogICAqIFRoZSBwcmV2aW91cyBjaHVuayBpcyBub3QgcmV0YWluZWQsIGFueSBkYXRhIG5lZWRlZCBhcmUgc3RvcmVkIGluCiAgICogdGhpcyBpbnRlZ2VyLCBvciBpbiB0aGUgW2J1ZmZlcl0gZmllbGQgYXMgYSBzdHJpbmctYnVpbGRpbmcgYnVmZmVyCiAgICogb3IgYSBbX051bWJlckJ1ZmZlcl0uCiAgICoKICAgKiBQcmVmaXggc3RhdGUgc3RvcmVkIGluIFtwcmVmaXhTdGF0ZV0gYXMgYml0cy4KICAgKgogICAqICAgICAgICAgICAgLi4wMCA6IE5vIHBhcnRpYWwgdmFsdWUgKE5PX1BBUlRJQUwpLgogICAqCiAgICogICAgICAgICAuLjAwMDAxIDogUGFydGlhbCBzdHJpbmcsIG5vdCBpbnNpZGUgZXNjYXBlLgogICAqICAgICAgICAgLi4wMDEwMSA6IFBhcnRpYWwgc3RyaW5nLCBhZnRlciAnXCcuCiAgICogICAgIC4udnZ2djFkZDAxIDogUGFydGlhbCBcdSBlc2NhcGUuCiAgICogICAgICAgICAgICAgICAgICAgVGhlICdkZCcgYml0cyAoMi0zKSBlbmNvZGUgdGhlIG51bWJlciBvZiBoZXggZGlnaXRzIHNlZW4uCiAgICogICAgICAgICAgICAgICAgICAgQml0cyA1LTE2IGVuY29kZSB0aGUgdmFsdWUgb2YgdGhlIGhleCBkaWdpdHMgc2VlbiBzbyBmYXIuCiAgICoKICAgKiAgICAgICAgLi4wZGRkMTAgOiBQYXJ0aWFsIG51bWVyYWwuCiAgICogICAgICAgICAgICAgICAgICAgVGhlIGBkZGRgIGJpdHMgc3RvcmUgdGhlIHBhcnRzIG9mIGluIHRoZSBudW1lcmFsIHNlZW4gc28KICAgKiAgICAgICAgICAgICAgICAgICBmYXIsIGFzIHRoZSBjb25zdGFudHMgYE5VTV8qYCBkZWZpbmVkIGFib3ZlLgogICAqICAgICAgICAgICAgICAgICAgIFRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBudW1lcmFsIGFyZSBzdG9yZWQgaW4gW2J1ZmZlcl0KICAgKiAgICAgICAgICAgICAgICAgICBhcyBhIFtfTnVtYmVyQnVmZmVyXS4KICAgKgogICAqICAgICAgLi4wZGRkMDAxMSA6IFBhcnRpYWwgJ251bGwnIGtleXdvcmQuCiAgICogICAgICAuLjBkZGQwMTExIDogUGFydGlhbCAndHJ1ZScga2V5d29yZC4KICAgKiAgICAgIC4uMGRkZDEwMTEgOiBQYXJ0aWFsICdmYWxzZScga2V5d29yZC4KICAgKiAgICAgIC4uMGRkZDExMTEgOiBQYXJ0aWFsIFVURi04IEJPTSBieXRlIHNlcWV1ZW5jZSAoIlx4RUZceEJCXHhCRiIpLgogICAqICAgICAgICAgICAgICAgICAgIEZvciBhbGwga2V5d29yZHMsIHRoZSBgZGRkYCBiaXRzIGVuY29kZSB0aGUgbnVtYmVyCiAgICogICAgICAgICAgICAgICAgICAgb2YgbGV0dGVycyBzZWVuLgogICAqICAgICAgICAgICAgICAgICAgIFRoZSBCT00gYnl0ZSBzZXF1ZW5jZSBpcyBvbmx5IHVzZWQgYnkgW19Kc29uVXRmOFBhcnNlcl0sCiAgICogICAgICAgICAgICAgICAgICAgYW5kIG9ubHkgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIGlucHV0LgogICAqLwogIGludCBwYXJ0aWFsU3RhdGUgPSBOT19QQVJUSUFMOwoKICAvKioKICAgKiBFeHRyYSBkYXRhIHN0b3JlZCB3aGlsZSBwYXJzaW5nIGEgcHJpbWl0aXZlIHZhbHVlLgogICAqIE1heSBiZSBzZXQgZHVyaW5nIHBhcnNpbmcsIGFsd2F5cyBzZXQgYXQgY2h1bmsgZW5kIGlmIGEgdmFsdWUgaXMgcGFydGlhbC4KICAgKgogICAqIE1heSBjb250YWluIGEgc3RyaW5nIGJ1ZmZlciB3aGlsZSBwYXJzaW5nIHN0cmluZ3MuCiAgICovCiAgdmFyIGJ1ZmZlciA9IG51bGw7CgogIF9DaHVua2VkSnNvblBhcnNlcih0aGlzLmxpc3RlbmVyKTsKCiAgLyoqCiAgICogUHVzaCB0aGUgY3VycmVudCBwYXJzZSBbc3RhdGVdIG9uIGEgc3RhY2suCiAgICoKICAgKiBTdGF0ZSBpcyBwdXNoZWQgd2hlbiBhIG5ldyBhcnJheSBvciBvYmplY3QgbGl0ZXJhbCBzdGFydHMsCiAgICogc28gdGhlIHBhcnNlciBjYW4gZ28gYmFjayB0byB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIHRoZSBsaXRlcmFsIGVuZHMuCiAgICovCiAgdm9pZCBzYXZlU3RhdGUoaW50IHN0YXRlKSB7CiAgICBzdGF0ZXMuYWRkKHN0YXRlKTsKICB9CgogIC8qKgogICAqIFJlc3RvcmUgYSBzdGF0ZSBwdXNoZWQgd2l0aCBbc2F2ZVN0YXRlXS4KICAgKi8KICBpbnQgcmVzdG9yZVN0YXRlKCkgewogICAgcmV0dXJuIHN0YXRlcy5yZW1vdmVMYXN0KCk7IC8vIFRocm93cyBpZiBlbXB0eS4KICB9CgogIC8qKgogICAqIEZpbmFsaXplcyB0aGUgcGFyc2luZy4KICAgKgogICAqIFRocm93cyBpZiB0aGUgc291cmNlIHJlYWQgc28gZmFyIGRvZXNuJ3QgZW5kIHVwIHdpdGggYSBjb21wbGV0ZQogICAqIHBhcnNlZCB2YWx1ZS4gVGhhdCBtZWFucyBpdCBtdXN0IG5vdCBiZSBpbnNpZGUgYSBsaXN0IG9yIG9iamVjdAogICAqIGxpdGVyYWwsIGFuZCBhbnkgcGFydGlhbCB2YWx1ZSByZWFkIHNob3VsZCBhbHNvIGJlIGEgdmFsaWQgY29tcGxldGUKICAgKiB2YWx1ZS4KICAgKgogICAqIFRoZSBvbmx5IHZhbGlkIHBhcnRpYWwgc3RhdGUgaXMgYSBudW1iZXIgdGhhdCBlbmRzIGluIGEgZGlnaXQsIGFuZAogICAqIG9ubHkgaWYgdGhlIG51bWJlciBpcyB0aGUgZW50aXJlIEpTT04gdmFsdWUgYmVpbmcgcGFyc2VkCiAgICogKG90aGVyd2lzZSBpdCB3b3VsZCBiZSBpbnNpZGUgYSBsaXN0IG9yIG9iamVjdCkuCiAgICogU3VjaCBhIG51bWJlciB3aWxsIGJlIGNvbXBsZXRlZC4gQW55IG90aGVyIHBhcnRpYWwgc3RhdGUgaXMgYW4gZXJyb3IuCiAgICovCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChwYXJ0aWFsU3RhdGUgIT0gTk9fUEFSVElBTCkgewogICAgICBpbnQgcGFydGlhbFR5cGUgPSBwYXJ0aWFsU3RhdGUgJiBNQVNLX1BBUlRJQUw7CiAgICAgIGlmIChwYXJ0aWFsVHlwZSA9PSBQQVJUSUFMX05VTUVSQUwpIHsKICAgICAgICBpbnQgbnVtU3RhdGUgPSBwYXJ0aWFsU3RhdGUgJiB+TUFTS19QQVJUSUFMOwogICAgICAgIC8vIEEgcGFydGlhbCBudW1iZXIgbWlnaHQgYmUgYSB2YWxpZCBudW1iZXIgaWYgd2Uga25vdyBpdCdzIGRvbmUuCiAgICAgICAgLy8gVGhlcmUgaXMgYW4gdW5uZWNlc3Nhcnkgb3ZlcmhlYWQgaWYgaW5wdXQgaXMgYSBzaW5nbGUgbnVtYmVyLAogICAgICAgIC8vIGJ1dCB0aGlzIGlzIGFzc3VtZWQgdG8gYmUgcmFyZS4KICAgICAgICBfTnVtYmVyQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKICAgICAgICBmaW5pc2hDaHVua051bWJlcihudW1TdGF0ZSwgMCwgMCwgYnVmZmVyKTsKICAgICAgfSBlbHNlIGlmIChwYXJ0aWFsVHlwZSA9PSBQQVJUSUFMX1NUUklORykgewogICAgICAgIGZhaWwoY2h1bmtFbmQsICJVbnRlcm1pbmF0ZWQgc3RyaW5nIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KHBhcnRpYWxUeXBlID09IFBBUlRJQUxfS0VZV09SRCk7CiAgICAgICAgZmFpbChjaHVua0VuZCk7IC8vIEluY29tcGxldGUgbGl0ZXJhbC4KICAgICAgfQogICAgfQogICAgaWYgKHN0YXRlICE9IFNUQVRFX0VORCkgewogICAgICBmYWlsKGNodW5rRW5kKTsKICAgIH0KICB9CgogIC8qKgogICAqIFJlYWQgb3V0IHRoZSByZXN1bHQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNsb3NpbmcgdGhlIHBhcnNlci4KICAgKgogICAqIFRoZSBwYXJzZXIgaXMgY2xvc2VkIGJ5IGNhbGxpbmcgW2Nsb3NlXSBvciBjYWxsaW5nIFthZGRTb3VyY2VDaHVua10gd2l0aAogICAqIGB0cnVlYCBhcyBzZWNvbmQgKGBpc0xhc3RgKSBhcmd1bWVudC4KICAgKi8KICBPYmplY3QgZ2V0IHJlc3VsdCB7CiAgICByZXR1cm4gbGlzdGVuZXIucmVzdWx0OwogIH0KCiAgLyoqIFNldHMgdGhlIGN1cnJlbnQgc291cmNlIGNodW5rLiAqLwogIHZvaWQgc2V0IGNodW5rKFQgc291cmNlKTsKCiAgLyoqCiAgICogTGVuZ3RoIG9mIGN1cnJlbnQgY2h1bmsuCiAgICoKICAgKiBUaGUgdmFsaWQgYXJndW1lbnRzIHRvIFtnZXRDaGFyXSBhcmUgMCAuLiBgY2h1bmtFbmQgLSAxYC4KICAgKi8KICBpbnQgZ2V0IGNodW5rRW5kOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjaHVuayBpdHNlbGYuCiAgICoKICAgKiBPbmx5IHVzZWQgYnkgW2ZhaWxdIHRvIGluY2x1ZGUgdGhlIGNodW5rIGluIHRoZSB0aHJvd24gW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgICovCiAgVCBnZXQgY2h1bms7CgogIC8qKgogICAqIEdldCBjaGFyY2FjdGVyL2NvZGUgdW5pdCBvZiBjdXJyZW50IGNodW5rLgogICAqCiAgICogVGhlIFtpbmRleF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIGxlc3MgdGhhbiBgY2h1bmtFbmRgLgogICAqIEluIHByYWN0aXZlLCBbaW5kZXhdIHdpbGwgYmUgbm8gc21hbGxlciB0aGFuIHRoZSBgc3RhcnRgIGFyZ3VtZW50IHBhc3NlZAogICAqIHRvIFtwYXJzZV0uCiAgICovCiAgaW50IGdldENoYXIoaW50IGluZGV4KTsKCiAgLyoqCiAgICogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGZyb20gc3RhcnQgdG8gZW5kIG9mIGNodW5rIGludG8gYSBsaXN0LgogICAqCiAgICogVXNlZCBmb3IgbnVtYmVyIGJ1ZmZlciAoYWx3YXlzIGNvcGllcyBBU0NJSSwgc28gZW5jb2RpbmcgaXMgbm90IGltcG9ydGFudCkuCiAgICovCiAgdm9pZCBjb3B5Q2hhcnNUb0xpc3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0PGludD4gdGFyZ2V0LCBpbnQgb2Zmc2V0KTsKCiAgLyoqCiAgICogQnVpbGQgYSBzdHJpbmcgdXNpbmcgaW5wdXQgY29kZSB1bml0cy4KICAgKgogICAqIENyZWF0ZXMgYSBzdHJpbmcgYnVmZmVyIGFuZCBlbmFibGVzIGFkZGluZyBjaGFyYWN0ZXJzIGFuZCBzbGljZXMKICAgKiB0byB0aGF0IGJ1ZmZlci4KICAgKiBUaGUgYnVmZmVyIGlzIHN0b3JlZCBpbiB0aGUgW2J1ZmZlcl0gZmllbGQuIElmIHRoZSBzdHJpbmcgaXMgdW50ZXJtaW5hdGVkLAogICAqIHRoZSBzYW1lIGJ1ZmZlciBpcyB1c2VkIHRvIGNvbnRpbnVlIHBhcnNpbmcgaW4gdGhlIG5leHQgY2h1bmsuCiAgICovCiAgdm9pZCBiZWdpblN0cmluZygpOwogIC8qKgogICAqIEFkZCBzaW5nbGUgY2hhcmFjdGVyIGNvZGUgdG8gc3RyaW5nIGJlaW5nIGJ1aWx0LgogICAqCiAgICogVXNlZCBmb3IgdW5wYXJzZWQgZXNjYXBlIHNlcXVlbmNlcy4KICAgKi8KICB2b2lkIGFkZENoYXJUb1N0cmluZyhpbnQgY2hhckNvZGUpOwoKICAvKioKICAgKiBBZGRzIHNsaWNlIG9mIGN1cnJlbnQgY2h1bmsgdG8gc3RyaW5nIGJlaW5nIGJ1aWx0LgogICAqCiAgICogVGhlIFtzdGFydF0gcG9zaXRpb25zIGlzIGluY2x1c2l2ZSwgW2VuZF0gaXMgZXhjbHVzaXZlLgogICAqLwogIHZvaWQgYWRkU2xpY2VUb1N0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvKiogRmluYWxpemVzIHRoZSBzdHJpbmcgYmVpbmcgYnVpbHQgYW5kIHJldHVybnMgaXQgYXMgYSBTdHJpbmcuICovCiAgU3RyaW5nIGVuZFN0cmluZygpOwoKICAvKioKICAgKiBFeHRyYWN0cyBhIGxpdGVyYWwgc3RyaW5nIGZyb20gYSBzbGljZSBvZiB0aGUgY3VycmVudCBjaHVuay4KICAgKgogICAqIE5vIGludGVycHJldGF0aW9uIG9mIHRoZSBjb250ZW50IGlzIHBlcmZvcm1lZCwgZXhjZXB0IGZvciBjb252ZXJ0aW5nCiAgICogdGhlIHNvdXJjZSBmb3JtYXQgdG8gc3RyaW5nLgogICAqIFRoaXMgY2FuIGJlIGltcGxlbWVudGVkIG1vcmUgb3IgbGVzcyBlZmZpY2llbnRseSBkZXBlbmRpbmcgb24gdGhlCiAgICogdW5kZXJseWluZyBzb3VyY2UuCiAgICoKICAgKiBUaGlzIGlzIHVzZWQgZm9yIHN0cmluZyBsaXRlcmFscyB0aGF0IGNvbnRhaW4gbm8gZXNjYXBlcy4KICAgKgogICAqIFRoZSBbYml0c10gaW50ZWdlciBpcyBhbiB1cHBlciBib3VuZCBvbiB0aGUgY29kZSBwb2ludCBpbiB0aGUgcmFuZ2UKICAgKiBmcm9tIGBzdGFydGAgdG8gYGVuZGAuCiAgICogVXN1YWxseSBmb3VuZCBieSBkb2luZyBiaXR3aXNlIG9yIG9mIGFsbCB0aGUgdmFsdWVzLgogICAqIFRoZSBmdW5jdGlvbiBtYXkgY2hvb3NlIHRvIG9wdGltaXplIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUuCiAgICovCiAgU3RyaW5nIGdldFN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQsIGludCBiaXRzKTsKCiAgLyoqCiAgICogUGFyc2UgYSBzbGljZSBvZiB0aGUgY3VycmVudCBjaHVuayBhcyBhIG51bWJlci4KICAgKgogICAqIFNpbmNlIGludGVnZXJzIGhhdmUgYSBtYXhpbWFsIHZhbHVlLCBhbmQgd2UgZG9uJ3QgdHJhY2sgdGhlIHZhbHVlCiAgICogaW4gdGhlIGJ1ZmZlciwgYSBzZXF1ZW5jZSBvZiBkaWdpdHMgY2FuIGJlIGVpdGhlciBhbiBpbnQgb3IgYSBkb3VibGUuCiAgICogVGhlIGBudW0ucGFyc2VgIGZ1bmN0aW9uIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgogICAqCiAgICogVGhlIGZvcm1hdCBpcyBleHBlY3RlZCB0byBiZSBjb3JyZWN0LgogICAqLwogIG51bSBwYXJzZU51bShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGNvbnN0IGludCBhc2NpaUJpdHMgPSAweDdmOyAvLyBOdW1iZXIgbGl0ZXJhbHMgYXJlIEFTQ0lJIG9ubHkuCiAgICByZXR1cm4gbnVtLnBhcnNlKGdldFN0cmluZyhzdGFydCwgZW5kLCBhc2NpaUJpdHMpKTsKICB9CgogIC8qKgogICAqIFBhcnNlIGEgc2xpY2Ugb2YgdGhlIGN1cnJlbnQgY2h1bmsgYXMgYSBkb3VibGUuCiAgICoKICAgKiBUaGUgZm9ybWF0IGlzIGV4cGVjdGVkIHRvIGJlIGNvcnJlY3QuCiAgICogVGhpcyBpcyB1c2VkIGJ5IFtwYXJzZU51bWJlcl0gd2hlbiB0aGUgZG91YmxlIHZhbHVlIGNhbm5vdCBiZQogICAqIGJ1aWx0IGV4YWN0bHkgZHVyaW5nIHBhcnNpbmcuCiAgICovCiAgZG91YmxlIHBhcnNlRG91YmxlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgY29uc3QgaW50IGFzY2lpQml0cyA9IDB4N2Y7IC8vIERvdWJsZSBsaXRlcmFscyBhcmUgQVNDSUkgb25seS4KICAgIHJldHVybiBkb3VibGUucGFyc2UoZ2V0U3RyaW5nKHN0YXJ0LCBlbmQsIGFzY2lpQml0cykpOwogIH0KCiAgLyoqCiAgICogQ29udGludWVzIHBhcnNpbmcgYSBwYXJ0aWFsIHZhbHVlLgogICAqLwogIGludCBwYXJzZVBhcnRpYWwoaW50IHBvc2l0aW9uKSB7CiAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIHJldHVybiBwb3NpdGlvbjsKICAgIGludCBwYXJ0aWFsU3RhdGUgPSB0aGlzLnBhcnRpYWxTdGF0ZTsKICAgIGFzc2VydChwYXJ0aWFsU3RhdGUgIT0gTk9fUEFSVElBTCk7CiAgICBpbnQgcGFydGlhbFR5cGUgPSBwYXJ0aWFsU3RhdGUgJiBNQVNLX1BBUlRJQUw7CiAgICB0aGlzLnBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICBwYXJ0aWFsU3RhdGUgPSBwYXJ0aWFsU3RhdGUgJiB+TUFTS19QQVJUSUFMOwogICAgYXNzZXJ0KHBhcnRpYWxUeXBlICE9IDApOwogICAgaWYgKHBhcnRpYWxUeXBlID09IFBBUlRJQUxfU1RSSU5HKSB7CiAgICAgIHBvc2l0aW9uID0gcGFyc2VQYXJ0aWFsU3RyaW5nKHBvc2l0aW9uLCBwYXJ0aWFsU3RhdGUpOwogICAgfSBlbHNlIGlmIChwYXJ0aWFsVHlwZSA9PSBQQVJUSUFMX05VTUVSQUwpIHsKICAgICAgcG9zaXRpb24gPSBwYXJzZVBhcnRpYWxOdW1iZXIocG9zaXRpb24sIHBhcnRpYWxTdGF0ZSk7CiAgICB9IGVsc2UgaWYgKHBhcnRpYWxUeXBlID09IFBBUlRJQUxfS0VZV09SRCkgewogICAgICBwb3NpdGlvbiA9IHBhcnNlUGFydGlhbEtleXdvcmQocG9zaXRpb24sIHBhcnRpYWxTdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gcG9zaXRpb247CiAgfQoKICAvKioKICAgKiBQYXJzZXMgdGhlIHJlbWFpbmRlciBvZiBhIG51bWJlciBpbnRvIHRoZSBudW1iZXIgYnVmZmVyLgogICAqCiAgICogU3ludGF4IGlzIGNoZWNrZWQgd2hpbGUgcGFzaW5nLgogICAqIFN0YXJ0cyBhdCBwb3NpdGlvbiwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgdGhlIHN0YXJ0IG9mIHRoZSBjaHVuaywKICAgKiBhbmQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG5vbi1udW1iZXItbGl0ZXJhbCBjaGFyYWN0ZXIgZm91bmQsCiAgICogb3IgY2h1bmtFbmQgaWYgdGhlIGVudGlyZSBjaHVuayBpcyBhIHZhbGlkIG51bWJlciBjb250aW51YXRpb24uCiAgICogVGhyb3dzIGlmIGEgc3ludGF4IGVycm9yIGlzIGRldGVjdGVkLgogICAqLwogIGludCBwYXJzZVBhcnRpYWxOdW1iZXIoaW50IHBvc2l0aW9uLCBpbnQgc3RhdGUpIHsKICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgLy8gUHJpbWl0aXZlIGltcGxlbWVudGF0aW9uLCBjYW4gYmUgb3B0aW1pemVkLgogICAgX051bWJlckJ1ZmZlciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjsKICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKICAgIGludCBlbmQgPSBjaHVua0VuZDsKICAgIHRvQmFpbG91dDoKICAgIHsKICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgYnJlYWsgdG9CYWlsb3V0OwogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpbnQgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICBpZiAoc3RhdGUgPT0gTlVNX1NJR04pIHsKICAgICAgICBpZiAoZGlnaXQgPD0gOSkgewogICAgICAgICAgaWYgKGRpZ2l0ID09IDApIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fWkVSTzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlID0gTlVNX0RJR0lUOwogICAgICAgICAgfQogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIGJyZWFrIHRvQmFpbG91dDsKICAgICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhdGUgPT0gTlVNX1pFUk8pIHsKICAgICAgICAvLyBKU09OIGRvZXMgbm90IGFsbG93IGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcyAoZS5nLiwgIjA5IikuCiAgICAgICAgaWYgKGRpZ2l0IDw9IDkpIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICBzdGF0ZSA9IE5VTV9ESUdJVDsKICAgICAgfQogICAgICB3aGlsZSAoc3RhdGUgPT0gTlVNX0RJR0lUKSB7CiAgICAgICAgaWYgKGRpZ2l0ID4gOSkgewogICAgICAgICAgaWYgKGNoYXIgPT0gREVDSU1BTFBPSU5UKSB7CiAgICAgICAgICAgIHN0YXRlID0gTlVNX0RPVDsKICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXIgfCAweDIwKSA9PSBDSEFSX2UpIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fRTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpbmlzaENodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgcG9zaXRpb24sIGJ1ZmZlcik7CiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfQogICAgICBpZiAoc3RhdGUgPT0gTlVNX0RPVCkgewogICAgICAgIGlmIChkaWdpdCA+IDkpIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICBzdGF0ZSA9IE5VTV9ET1RfRElHSVQ7CiAgICAgIH0KICAgICAgd2hpbGUgKHN0YXRlID09IE5VTV9ET1RfRElHSVQpIHsKICAgICAgICBpZiAoZGlnaXQgPiA5KSB7CiAgICAgICAgICBpZiAoKGNoYXIgfCAweDIwKSA9PSBDSEFSX2UpIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fRTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpbmlzaENodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgcG9zaXRpb24sIGJ1ZmZlcik7CiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfQogICAgICBpZiAoc3RhdGUgPT0gTlVNX0UpIHsKICAgICAgICBpZiAoY2hhciA9PSBQTFVTIHx8IGNoYXIgPT0gTUlOVVMpIHsKICAgICAgICAgIHN0YXRlID0gTlVNX0VfU0lHTjsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzc2VydChzdGF0ZSA+PSBOVU1fRSk7CiAgICAgIHdoaWxlIChkaWdpdCA8PSA5KSB7CiAgICAgICAgc3RhdGUgPSBOVU1fRV9ESUdJVDsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIGJyZWFrIHRvQmFpbG91dDsKICAgICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgICAgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICB9CiAgICAgIGZpbmlzaENodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgcG9zaXRpb24sIGJ1ZmZlcik7CiAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH0KICAgIC8vIEJhaWxvdXQgY29kZSBpbiBjYXNlIHRoZSBjdXJyZW50IGNodW5rIGVuZHMgd2hpbGUgcGFyc2luZyB0aGUgbnVtZXJhbC4KICAgIGFzc2VydChwb3NpdGlvbiA9PSBlbmQpOwogICAgY29udGludWVDaHVua051bWJlcihzdGF0ZSwgc3RhcnQsIGJ1ZmZlcik7CiAgICByZXR1cm4gY2h1bmtFbmQ7CiAgfQoKICAvKioKICAgKiBDb250aW51ZXMgcGFyc2luZyBhIHBhcnRpYWwgc3RyaW5nIGxpdGVyYWwuCiAgICoKICAgKiBIYW5kbGVzIHBhcnRpYWwgZXNjYXBlcyBhbmQgdGhlbiBoYW5kcyB0aGUgcGFyc2luZyBvZmYgdG8KICAgKiBbcGFyc2VTdHJpbmdUb0J1ZmZlcl0uCiAgICovCiAgaW50IHBhcnNlUGFydGlhbFN0cmluZyhpbnQgcG9zaXRpb24sIGludCBwYXJ0aWFsU3RhdGUpIHsKICAgIGlmIChwYXJ0aWFsU3RhdGUgPT0gU1RSX1BMQUlOKSB7CiAgICAgIHJldHVybiBwYXJzZVN0cmluZ1RvQnVmZmVyKHBvc2l0aW9uKTsKICAgIH0KICAgIGlmIChwYXJ0aWFsU3RhdGUgPT0gU1RSX0VTQ0FQRSkgewogICAgICBwb3NpdGlvbiA9IHBhcnNlU3RyaW5nRXNjYXBlKHBvc2l0aW9uKTsKICAgICAgLy8gcGFyc2VTdHJpbmdFc2NhcGUgc2V0cyBwYXJ0aWFsU3RhdGUgaWYgaXQgc2VlcyB0aGUgZW5kLgogICAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIHJldHVybiBwb3NpdGlvbjsKICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nVG9CdWZmZXIocG9zaXRpb24pOwogICAgfQogICAgYXNzZXJ0KChwYXJ0aWFsU3RhdGUgJiBTVFJfVSkgIT0gMCk7CiAgICBpbnQgdmFsdWUgPSBwYXJ0aWFsU3RhdGUgPj4gU1RSX1VfVkFMVUVfU0hJRlQ7CiAgICBpbnQgY291bnQgPSAocGFydGlhbFN0YXRlID4+IFNUUl9VX0NPVU5UX1NISUZUKSAmIFRXT19CSVRfTUFTSzsKICAgIGZvciAoaW50IGkgPSBjb3VudDsgaSA8IDQ7IGkrKywgcG9zaXRpb24rKykgewogICAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIHJldHVybiBjaHVua1N0cmluZ0VzY2FwZVUoaSwgdmFsdWUpOwogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpbnQgZGlnaXQgPSBwYXJzZUhleERpZ2l0KGNoYXIpOwogICAgICBpZiAoZGlnaXQgPCAwKSBmYWlsKHBvc2l0aW9uLCAiSW52YWxpZCBoZXggZGlnaXQiKTsKICAgICAgdmFsdWUgPSAxNiAqIHZhbHVlICsgZGlnaXQ7CiAgICB9CiAgICBhZGRDaGFyVG9TdHJpbmcodmFsdWUpOwogICAgcmV0dXJuIHBhcnNlU3RyaW5nVG9CdWZmZXIocG9zaXRpb24pOwogIH0KCiAgLyoqCiAgICogQ29udGludWVzIHBhcnNpbmcgYSBwYXJ0aWFsIGtleXdvcmQuCiAgICovCiAgaW50IHBhcnNlUGFydGlhbEtleXdvcmQoaW50IHBvc2l0aW9uLCBpbnQgcGFydGlhbFN0YXRlKSB7CiAgICBpbnQga2V5d29yZFR5cGUgPSBwYXJ0aWFsU3RhdGUgJiBLV0RfVFlQRV9NQVNLOwogICAgaW50IGNvdW50ID0gcGFydGlhbFN0YXRlID4+IEtXRF9DT1VOVF9TSElGVDsKICAgIGludCBrZXl3b3JkVHlwZUluZGV4ID0ga2V5d29yZFR5cGUgPj4gS1dEX1RZUEVfU0hJRlQ7CiAgICBTdHJpbmcga2V5d29yZCA9CiAgICAgICAgY29uc3QgWyJudWxsIiwgInRydWUiLCAiZmFsc2UiLCAiXHhFRlx4QkJceEJGIl1ba2V5d29yZFR5cGVJbmRleF07CiAgICBhc3NlcnQoY291bnQgPCBrZXl3b3JkLmxlbmd0aCk7CiAgICBkbyB7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBjaHVua0VuZCkgewogICAgICAgIHRoaXMucGFydGlhbFN0YXRlID0KICAgICAgICAgICAgUEFSVElBTF9LRVlXT1JEIHwga2V5d29yZFR5cGUgfCAoY291bnQgPDwgS1dEX0NPVU5UX1NISUZUKTsKICAgICAgICByZXR1cm4gY2h1bmtFbmQ7CiAgICAgIH0KICAgICAgaW50IGV4cGVjdGVkQ2hhciA9IGtleXdvcmQuY29kZVVuaXRBdChjb3VudCk7CiAgICAgIGlmIChnZXRDaGFyKHBvc2l0aW9uKSAhPSBleHBlY3RlZENoYXIpIHsKICAgICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAgYXNzZXJ0KGtleXdvcmRUeXBlID09IEtXRF9CT00pOwogICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgIH0KICAgICAgcG9zaXRpb24rKzsKICAgICAgY291bnQrKzsKICAgIH0gd2hpbGUgKGNvdW50IDwga2V5d29yZC5sZW5ndGgpOwogICAgaWYgKGtleXdvcmRUeXBlID09IEtXRF9OVUxMKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bGwoKTsKICAgIH0gZWxzZSBpZiAoa2V5d29yZFR5cGUgIT0gS1dEX0JPTSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVCb29sKGtleXdvcmRUeXBlID09IEtXRF9UUlVFKTsKICAgIH0KICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIC8qKiBDb252ZXJ0IGhleC1kaWdpdCB0byBpdHMgdmFsdWUuIFJldHVybnMgLTEgaWYgY2hhciBpcyBub3QgYSBoZXggZGlnaXQuICovCiAgaW50IHBhcnNlSGV4RGlnaXQoaW50IGNoYXIpIHsKICAgIGludCBkaWdpdCA9IGNoYXIgXiAweDMwOwogICAgaWYgKGRpZ2l0IDw9IDkpIHJldHVybiBkaWdpdDsKICAgIGludCBsZXR0ZXIgPSAoY2hhciB8IDB4MjApIF4gMHg2MDsKICAgIC8vIHZhbHVlcyAxIC4uIDYgYXJlICdhJyB0aHJvdWdoICdmJwogICAgaWYgKGxldHRlciA8PSA2ICYmIGxldHRlciA+IDApIHJldHVybiBsZXR0ZXIgKyA5OwogICAgcmV0dXJuIC0xOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIHRoZSBjdXJyZW50IGNodW5rIGFzIGEgY2h1bmsgb2YgSlNPTi4KICAgKgogICAqIFN0YXJ0cyBwYXJzaW5nIGF0IFtwb3NpdGlvbl0gYW5kIGNvbnRpbnVlcyB1bnRpbCBbY2h1bmtFbmRdLgogICAqIENvbnRpbnVlcyBwYXJzaW5nIHdoZXJlIHRoZSBwcmV2aW91cyBjaHVuayAoaWYgYW55KSBlbmRlZC4KICAgKi8KICB2b2lkIHBhcnNlKGludCBwb3NpdGlvbikgewogICAgaW50IGxlbmd0aCA9IGNodW5rRW5kOwogICAgaWYgKHBhcnRpYWxTdGF0ZSAhPSBOT19QQVJUSUFMKSB7CiAgICAgIHBvc2l0aW9uID0gcGFyc2VQYXJ0aWFsKHBvc2l0aW9uKTsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuOwogICAgfQogICAgaW50IHN0YXRlID0gdGhpcy5zdGF0ZTsKICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBzd2l0Y2ggKGNoYXIpIHsKICAgICAgICBjYXNlIFNQQUNFOgogICAgICAgIGNhc2UgQ0FSUklBR0VfUkVUVVJOOgogICAgICAgIGNhc2UgTkVXTElORToKICAgICAgICBjYXNlIFRBQjoKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFFVT1RFOgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1NUUklOR19NQVNLKSAhPSAwKSByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICBzdGF0ZSB8PSBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbiA9IHBhcnNlU3RyaW5nKHBvc2l0aW9uICsgMSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIExCUkFDS0VUOgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1ZBTFVFX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIGxpc3RlbmVyLmJlZ2luQXJyYXkoKTsKICAgICAgICAgIHNhdmVTdGF0ZShzdGF0ZSk7CiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0FSUkFZX0VNUFRZOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTEJSQUNFOgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1ZBTFVFX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIGxpc3RlbmVyLmJlZ2luT2JqZWN0KCk7CiAgICAgICAgICBzYXZlU3RhdGUoc3RhdGUpOwogICAgICAgICAgc3RhdGUgPSBTVEFURV9PQkpFQ1RfRU1QVFk7CiAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSEFSX246CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgc3RhdGUgfD0gVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24gPSBwYXJzZU51bGwocG9zaXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSEFSX2Y6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgc3RhdGUgfD0gVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24gPSBwYXJzZUZhbHNlKHBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ0hBUl90OgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1ZBTFVFX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIHN0YXRlIHw9IFZBTFVFX1JFQURfQklUUzsKICAgICAgICAgIHBvc2l0aW9uID0gcGFyc2VUcnVlKHBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ09MT046CiAgICAgICAgICBpZiAoc3RhdGUgIT0gU1RBVEVfT0JKRUNUX0tFWSkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgbGlzdGVuZXIucHJvcGVydHlOYW1lKCk7CiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX09CSkVDVF9DT0xPTjsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENPTU1BOgogICAgICAgICAgaWYgKHN0YXRlID09IFNUQVRFX09CSkVDVF9WQUxVRSkgewogICAgICAgICAgICBsaXN0ZW5lci5wcm9wZXJ0eVZhbHVlKCk7CiAgICAgICAgICAgIHN0YXRlID0gU1RBVEVfT0JKRUNUX0NPTU1BOwogICAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9BUlJBWV9WQUxVRSkgewogICAgICAgICAgICBsaXN0ZW5lci5hcnJheUVsZW1lbnQoKTsKICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9BUlJBWV9DT01NQTsKICAgICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUkJSQUNLRVQ6CiAgICAgICAgICBpZiAoc3RhdGUgPT0gU1RBVEVfQVJSQVlfRU1QVFkpIHsKICAgICAgICAgICAgbGlzdGVuZXIuZW5kQXJyYXkoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfQVJSQVlfVkFMVUUpIHsKICAgICAgICAgICAgbGlzdGVuZXIuYXJyYXlFbGVtZW50KCk7CiAgICAgICAgICAgIGxpc3RlbmVyLmVuZEFycmF5KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0ZSA9IHJlc3RvcmVTdGF0ZSgpIHwgVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUkJSQUNFOgogICAgICAgICAgaWYgKHN0YXRlID09IFNUQVRFX09CSkVDVF9FTVBUWSkgewogICAgICAgICAgICBsaXN0ZW5lci5lbmRPYmplY3QoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfT0JKRUNUX1ZBTFVFKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLnByb3BlcnR5VmFsdWUoKTsKICAgICAgICAgICAgbGlzdGVuZXIuZW5kT2JqZWN0KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0ZSA9IHJlc3RvcmVTdGF0ZSgpIHwgVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgZmFpbChwb3NpdGlvbik7CiAgICAgICAgICBzdGF0ZSB8PSBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbiA9IHBhcnNlTnVtYmVyKGNoYXIsIHBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICB0aGlzLnN0YXRlID0gc3RhdGU7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYSAidHJ1ZSIgbGl0ZXJhbCBzdGFydGluZyBhdCBbcG9zaXRpb25dLgogICAqCiAgICogVGhlIGNoYXJhY3RlciBgc291cmNlW3Bvc2l0aW9uXWAgbXVzdCBiZSAidCIuCiAgICovCiAgaW50IHBhcnNlVHJ1ZShpbnQgcG9zaXRpb24pIHsKICAgIGFzc2VydChnZXRDaGFyKHBvc2l0aW9uKSA9PSBDSEFSX3QpOwogICAgaWYgKGNodW5rRW5kIDwgcG9zaXRpb24gKyA0KSB7CiAgICAgIHJldHVybiBwYXJzZUtleXdvcmRQcmVmaXgocG9zaXRpb24sICJ0cnVlIiwgS1dEX1RSVUUpOwogICAgfQogICAgaWYgKGdldENoYXIocG9zaXRpb24gKyAxKSAhPSBDSEFSX3IgfHwKICAgICAgICBnZXRDaGFyKHBvc2l0aW9uICsgMikgIT0gQ0hBUl91IHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDMpICE9IENIQVJfZSkgewogICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVCb29sKHRydWUpOwogICAgcmV0dXJuIHBvc2l0aW9uICsgNDsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhICJmYWxzZSIgbGl0ZXJhbCBzdGFydGluZyBhdCBbcG9zaXRpb25dLgogICAqCiAgICogVGhlIGNoYXJhY3RlciBgc291cmNlW3Bvc2l0aW9uXWAgbXVzdCBiZSAiZiIuCiAgICovCiAgaW50IHBhcnNlRmFsc2UoaW50IHBvc2l0aW9uKSB7CiAgICBhc3NlcnQoZ2V0Q2hhcihwb3NpdGlvbikgPT0gQ0hBUl9mKTsKICAgIGlmIChjaHVua0VuZCA8IHBvc2l0aW9uICsgNSkgewogICAgICByZXR1cm4gcGFyc2VLZXl3b3JkUHJlZml4KHBvc2l0aW9uLCAiZmFsc2UiLCBLV0RfRkFMU0UpOwogICAgfQogICAgaWYgKGdldENoYXIocG9zaXRpb24gKyAxKSAhPSBDSEFSX2EgfHwKICAgICAgICBnZXRDaGFyKHBvc2l0aW9uICsgMikgIT0gQ0hBUl9sIHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDMpICE9IENIQVJfcyB8fAogICAgICAgIGdldENoYXIocG9zaXRpb24gKyA0KSAhPSBDSEFSX2UpIHsKICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlQm9vbChmYWxzZSk7CiAgICByZXR1cm4gcG9zaXRpb24gKyA1OwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgIm51bGwiIGxpdGVyYWwgc3RhcnRpbmcgYXQgW3Bvc2l0aW9uXS4KICAgKgogICAqIFRoZSBjaGFyYWN0ZXIgYHNvdXJjZVtwb3NpdGlvbl1gIG11c3QgYmUgIm4iLgogICAqLwogIGludCBwYXJzZU51bGwoaW50IHBvc2l0aW9uKSB7CiAgICBhc3NlcnQoZ2V0Q2hhcihwb3NpdGlvbikgPT0gQ0hBUl9uKTsKICAgIGlmIChjaHVua0VuZCA8IHBvc2l0aW9uICsgNCkgewogICAgICByZXR1cm4gcGFyc2VLZXl3b3JkUHJlZml4KHBvc2l0aW9uLCAibnVsbCIsIEtXRF9OVUxMKTsKICAgIH0KICAgIGlmIChnZXRDaGFyKHBvc2l0aW9uICsgMSkgIT0gQ0hBUl91IHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDIpICE9IENIQVJfbCB8fAogICAgICAgIGdldENoYXIocG9zaXRpb24gKyAzKSAhPSBDSEFSX2wpIHsKICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlTnVsbCgpOwogICAgcmV0dXJuIHBvc2l0aW9uICsgNDsKICB9CgogIGludCBwYXJzZUtleXdvcmRQcmVmaXgoaW50IHBvc2l0aW9uLCBTdHJpbmcgY2hhcnMsIGludCB0eXBlKSB7CiAgICBhc3NlcnQoZ2V0Q2hhcihwb3NpdGlvbikgPT0gY2hhcnMuY29kZVVuaXRBdCgwKSk7CiAgICBpbnQgbGVuZ3RoID0gY2h1bmtFbmQ7CiAgICBpbnQgc3RhcnQgPSBwb3NpdGlvbjsKICAgIGludCBjb3VudCA9IDE7CiAgICB3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpZiAoY2hhciAhPSBjaGFycy5jb2RlVW5pdEF0KGNvdW50KSkgcmV0dXJuIGZhaWwoc3RhcnQpOwogICAgICBjb3VudCsrOwogICAgfQogICAgdGhpcy5wYXJ0aWFsU3RhdGUgPSBQQVJUSUFMX0tFWVdPUkQgfCB0eXBlIHwgKGNvdW50IDw8IEtXRF9DT1VOVF9TSElGVCk7CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgc3RyaW5nIHZhbHVlLgogICAqCiAgICogSW5pdGlhbCBbcG9zaXRpb25dIGlzIHJpZ2h0IGFmdGVyIHRoZSBpbml0aWFsIHF1b3RlLgogICAqIFJldHVybmVkIHBvc2l0aW9uIHJpZ2h0IGFmdGVyIHRoZSBmaW5hbCBxdW90ZS4KICAgKi8KICBpbnQgcGFyc2VTdHJpbmcoaW50IHBvc2l0aW9uKSB7CiAgICAvLyBGb3JtYXQ6ICciJyhbXlx4MDAtXHgxZlxcXCJdfCdcXCdbYmZucnQvXFwiXSkqJyInCiAgICAvLyBJbml0aWFsIHBvc2l0aW9uIGlzIHJpZ2h0IGFmdGVyIGZpcnN0ICciJy4KICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgaW50IGVuZCA9IGNodW5rRW5kOwogICAgaW50IGJpdHMgPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CiAgICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbisrKTsKICAgICAgYml0cyB8PSBjaGFyOyAvLyBJbmNsdWRlcyBmaW5hbCAnIicsIGJ1dCB0aGF0IG5ldmVyIG1hdHRlcnMuCiAgICAgIC8vIEJBQ0tTTEFTSCBpcyBsYXJnZXIgdGhhbiBRVU9URSBhbmQgU1BBQ0UuCiAgICAgIGlmIChjaGFyID4gQkFDS1NMQVNIKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT0gQkFDS1NMQVNIKSB7CiAgICAgICAgYmVnaW5TdHJpbmcoKTsKICAgICAgICBpbnQgc2xpY2VFbmQgPSBwb3NpdGlvbiAtIDE7CiAgICAgICAgaWYgKHN0YXJ0IDwgc2xpY2VFbmQpIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIHNsaWNlRW5kKTsKICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdUb0J1ZmZlcihzbGljZUVuZCk7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT0gUVVPVEUpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVTdHJpbmcoZ2V0U3RyaW5nKHN0YXJ0LCBwb3NpdGlvbiAtIDEsIGJpdHMpKTsKICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPCBTUEFDRSkgewogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uIC0gMSwgIkNvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZyIpOwogICAgICB9CiAgICB9CiAgICBiZWdpblN0cmluZygpOwogICAgaWYgKHN0YXJ0IDwgZW5kKSBhZGRTbGljZVRvU3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgcmV0dXJuIGNodW5rU3RyaW5nKFNUUl9QTEFJTik7CiAgfQoKICAvKioKICAgKiBTZXRzIHVwIGEgcGFydGlhbCBzdHJpbmcgc3RhdGUuCiAgICoKICAgKiBUaGUgc3RhdGUgaXMgZWl0aGVyIG5vdCBpbnNpZGUgYW4gZXNjYXBlLCBvciByaWdodCBhZnRlciBhIGJhY2tzbGFzaC4KICAgKiBGb3IgcGFydGlhbCBzdHJpbmdzIGVuZGluZyBpbnNpZGUgYSBVbmljb2RlIGVzY2FwZSwgdXNlCiAgICogW2NodW5rU3RyaW5nRXNjYXBlVV0uCiAgICovCiAgaW50IGNodW5rU3RyaW5nKGludCBzdHJpbmdTdGF0ZSkgewogICAgcGFydGlhbFN0YXRlID0gUEFSVElBTF9TVFJJTkcgfCBzdHJpbmdTdGF0ZTsKICAgIHJldHVybiBjaHVua0VuZDsKICB9CgogIC8qKgogICAqIFNldHMgdXAgYSBwYXJ0aWFsIHN0cmluZyBzdGF0ZSBmb3IgYSBwYXJ0aWFsbHkgcGFyc2VkIFVuaWNvZGUgZXNjYXBlLgogICAqCiAgICogVGhlIHBhcnRpYWwgc3RyaW5nIHN0YXRlIGluY2x1ZGVzIHRoZSBjdXJyZW50IFtidWZmZXJdIGFuZCB0aGUKICAgKiBudW1iZXIgb2YgaGV4IGRpZ2l0cyBvZiB0aGUgVW5pY29kZSBzZWVuIHNvIGZhciAoZS5nLiwgZm9yIGAiXHUzMCcpCiAgICogdGhlIHN0YXRlIGtub3dzIHRoYXQgdHdvIGRpZ2l0cyBoYXZlIGJlZW4gc2VlbiwgYW5kIHdoYXQgdGhlaXIgdmFsdWUgaXMuCiAgICoKICAgKiBSZXR1cm5zIFtjaHVua0VuZF0gc28gaXQgY2FuIGJlIHVzZWQgYXMgcGFydCBvZiBhIHJldHVybiBzdGF0ZW1lbnQuCiAgICovCiAgaW50IGNodW5rU3RyaW5nRXNjYXBlVShpbnQgY291bnQsIGludCB2YWx1ZSkgewogICAgcGFydGlhbFN0YXRlID0gUEFSVElBTF9TVFJJTkcgfAogICAgICAgIFNUUl9VIHwKICAgICAgICAoY291bnQgPDwgU1RSX1VfQ09VTlRfU0hJRlQpIHwKICAgICAgICAodmFsdWUgPDwgU1RSX1VfVkFMVUVfU0hJRlQpOwogICAgcmV0dXJuIGNodW5rRW5kOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIHRoZSByZW1haW5kZXIgb2YgYSBzdHJpbmcgbGl0ZXJhbCBpbnRvIGEgYnVmZmVyLgogICAqCiAgICogVGhlIGJ1ZmZlciBpcyBzdG9yZWQgaW4gW2J1ZmZlcl0gYW5kIGl0cyB1bmRlcmx5aW5nIGZvcm1hdCBkZXBlbmRzIG9uCiAgICogdGhlIGlucHV0IGNodW5rIHR5cGUuIEZvciBleGFtcGxlIFVURi04IGRlY29kaW5nIGhhcHBlbnMgaW4gdGhlCiAgICogYnVmZmVyLCBub3QgaW4gdGhlIHBhcnNlciwgc2luY2UgYWxsIHNpZ25pZmljYW50IEpTT04gY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHRocm91Z2ggdGhlIHN0cmluZyBsaXRlcmFsIGZvciBlc2NhcGVzLCBhbmQgY29waWVzCiAgICogc2xpY2VzIG9mIG5vbi1lc2NhcGUgY2hhcmFjdGVycyB1c2luZyBbYWRkU2xpY2VUb1N0cmluZ10uCiAgICovCiAgaW50IHBhcnNlU3RyaW5nVG9CdWZmZXIoaW50IHBvc2l0aW9uKSB7CiAgICBpbnQgZW5kID0gY2h1bmtFbmQ7CiAgICBpbnQgc3RhcnQgPSBwb3NpdGlvbjsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHsKICAgICAgICBpZiAocG9zaXRpb24gPiBzdGFydCkgewogICAgICAgICAgYWRkU2xpY2VUb1N0cmluZyhzdGFydCwgcG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2h1bmtTdHJpbmcoU1RSX1BMQUlOKTsKICAgICAgfQogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24rKyk7CiAgICAgIGlmIChjaGFyID4gQkFDS1NMQVNIKSBjb250aW51ZTsKICAgICAgaWYgKGNoYXIgPCBTUEFDRSkgewogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uIC0gMSk7IC8vIENvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZy4KICAgICAgfQogICAgICBpZiAoY2hhciA9PSBRVU9URSkgewogICAgICAgIGludCBxdW90ZVBvc2l0aW9uID0gcG9zaXRpb24gLSAxOwogICAgICAgIGlmIChxdW90ZVBvc2l0aW9uID4gc3RhcnQpIHsKICAgICAgICAgIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIHF1b3RlUG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBsaXN0ZW5lci5oYW5kbGVTdHJpbmcoZW5kU3RyaW5nKCkpOwogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgfQogICAgICBpZiAoY2hhciAhPSBCQUNLU0xBU0gpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAvLyBIYW5kbGUgZXNjYXBlLgogICAgICBpZiAocG9zaXRpb24gLSAxID4gc3RhcnQpIHsKICAgICAgICBhZGRTbGljZVRvU3RyaW5nKHN0YXJ0LCBwb3NpdGlvbiAtIDEpOwogICAgICB9CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHJldHVybiBjaHVua1N0cmluZyhTVFJfRVNDQVBFKTsKICAgICAgcG9zaXRpb24gPSBwYXJzZVN0cmluZ0VzY2FwZShwb3NpdGlvbik7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHJldHVybiBwb3NpdGlvbjsKICAgICAgc3RhcnQgPSBwb3NpdGlvbjsKICAgIH0KICAgIHJldHVybiAtMTsgLy8gVU5SRUFDSEFCTEUuCiAgfQoKICAvKioKICAgKiBQYXJzZSBhIHN0cmluZyBlc2NhcGUuCiAgICoKICAgKiBQb3NpdGlvbiBpcyByaWdodCBhZnRlciB0aGUgaW5pdGlhbCBiYWNrc2xhc2guCiAgICogVGhlIGZvbGxvd2luZyBlc2NhcGUgaXMgcGFyc2VkIGludG8gYSBjaGFyYWN0ZXIgY29kZSB3aGljaCBpcyBhZGRlZCB0bwogICAqIHRoZSBjdXJyZW50IHN0cmluZyBidWZmZXIgdXNpbmcgW2FkZENoYXJUb1N0cmluZ10uCiAgICoKICAgKiBSZXR1cm5zIHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgZXNjYXBlLgogICAqLwogIGludCBwYXJzZVN0cmluZ0VzY2FwZShpbnQgcG9zaXRpb24pIHsKICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbisrKTsKICAgIGludCBsZW5ndGggPSBjaHVua0VuZDsKICAgIHN3aXRjaCAoY2hhcikgewogICAgICBjYXNlIENIQVJfYjoKICAgICAgICBjaGFyID0gQkFDS1NQQUNFOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIQVJfZjoKICAgICAgICBjaGFyID0gRk9STV9GRUVEOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIQVJfbjoKICAgICAgICBjaGFyID0gTkVXTElORTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSEFSX3I6CiAgICAgICAgY2hhciA9IENBUlJJQUdFX1JFVFVSTjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSEFSX3Q6CiAgICAgICAgY2hhciA9IFRBQjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTTEFTSDoKICAgICAgY2FzZSBCQUNLU0xBU0g6CiAgICAgIGNhc2UgUVVPVEU6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ0hBUl91OgogICAgICAgIGludCBoZXhTdGFydCA9IHBvc2l0aW9uIC0gMTsKICAgICAgICBpbnQgdmFsdWUgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICBpZiAocG9zaXRpb24gPT0gbGVuZ3RoKSByZXR1cm4gY2h1bmtTdHJpbmdFc2NhcGVVKGksIHZhbHVlKTsKICAgICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKyspOwogICAgICAgICAgaW50IGRpZ2l0ID0gY2hhciBeIDB4MzA7CiAgICAgICAgICB2YWx1ZSAqPSAxNjsKICAgICAgICAgIGlmIChkaWdpdCA8PSA5KSB7CiAgICAgICAgICAgIHZhbHVlICs9IGRpZ2l0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGlnaXQgPSAoY2hhciB8IDB4MjApIC0gQ0hBUl9hOwogICAgICAgICAgICBpZiAoZGlnaXQgPCAwIHx8IGRpZ2l0ID4gNSkgewogICAgICAgICAgICAgIHJldHVybiBmYWlsKGhleFN0YXJ0LCAiSW52YWxpZCB1bmljb2RlIGVzY2FwZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhbHVlICs9IGRpZ2l0ICsgMTA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNoYXIgPSB2YWx1ZTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBpZiAoY2hhciA8IFNQQUNFKSByZXR1cm4gZmFpbChwb3NpdGlvbiwgIkNvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZyIpOwogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uLCAiVW5yZWNvZ25pemVkIHN0cmluZyBlc2NhcGUiKTsKICAgIH0KICAgIGFkZENoYXJUb1N0cmluZyhjaGFyKTsKICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBjaHVua1N0cmluZyhTVFJfUExBSU4pOwogICAgcmV0dXJuIHBvc2l0aW9uOwogIH0KCiAgLy8vIFNldHMgdXAgYSBwYXJ0aWFsIG51bWVyYWwgc3RhdGUuCiAgLy8vIFJldHVybnMgY2h1bmtFbmQgdG8gYWxsb3cgZWFzeSBvbmUtbGluZSBiYWlsb3V0IHRlc3RzLgogIGludCBiZWdpbkNodW5rTnVtYmVyKGludCBzdGF0ZSwgaW50IHN0YXJ0KSB7CiAgICBpbnQgZW5kID0gY2h1bmtFbmQ7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICB2YXIgYnVmZmVyID0gbmV3IF9OdW1iZXJCdWZmZXIobGVuZ3RoKTsKICAgIGNvcHlDaGFyc1RvTGlzdChzdGFydCwgZW5kLCBidWZmZXIubGlzdCwgMCk7CiAgICBidWZmZXIubGVuZ3RoID0gbGVuZ3RoOwogICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CiAgICB0aGlzLnBhcnRpYWxTdGF0ZSA9IFBBUlRJQUxfTlVNRVJBTCB8IHN0YXRlOwogICAgcmV0dXJuIGVuZDsKICB9CgogIHZvaWQgYWRkTnVtYmVyQ2h1bmsoX051bWJlckJ1ZmZlciBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCwgaW50IG92ZXJoZWFkKSB7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpbnQgY291bnQgPSBidWZmZXIubGVuZ3RoOwogICAgaW50IG5ld0NvdW50ID0gY291bnQgKyBsZW5ndGg7CiAgICBpbnQgbmV3Q2FwYWNpdHkgPSBuZXdDb3VudCArIG92ZXJoZWFkOwogICAgYnVmZmVyLmVuc3VyZUNhcGFjaXR5KG5ld0NhcGFjaXR5KTsKICAgIGNvcHlDaGFyc1RvTGlzdChzdGFydCwgZW5kLCBidWZmZXIubGlzdCwgY291bnQpOwogICAgYnVmZmVyLmxlbmd0aCA9IG5ld0NvdW50OwogIH0KCiAgLy8gQ29udGludWVzIGFuIGFscmVhZHkgY2h1bmtlZCBudW1iZXIgYWNyb3NzIGFuIGVudGlyZSBjaHVuay4KICBpbnQgY29udGludWVDaHVua051bWJlcihpbnQgc3RhdGUsIGludCBzdGFydCwgX051bWJlckJ1ZmZlciBidWZmZXIpIHsKICAgIGludCBlbmQgPSBjaHVua0VuZDsKICAgIGFkZE51bWJlckNodW5rKGJ1ZmZlciwgc3RhcnQsIGVuZCwgX051bWJlckJ1ZmZlci5rRGVmYXVsdE92ZXJoZWFkKTsKICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwogICAgdGhpcy5wYXJ0aWFsU3RhdGUgPSBQQVJUSUFMX05VTUVSQUwgfCBzdGF0ZTsKICAgIHJldHVybiBlbmQ7CiAgfQoKICBpbnQgZmluaXNoQ2h1bmtOdW1iZXIoaW50IHN0YXRlLCBpbnQgc3RhcnQsIGludCBlbmQsIF9OdW1iZXJCdWZmZXIgYnVmZmVyKSB7CiAgICBpZiAoc3RhdGUgPT0gTlVNX1pFUk8pIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKDApOwogICAgICByZXR1cm4gZW5kOwogICAgfQogICAgaWYgKGVuZCA+IHN0YXJ0KSB7CiAgICAgIGFkZE51bWJlckNodW5rKGJ1ZmZlciwgc3RhcnQsIGVuZCwgMCk7CiAgICB9CiAgICBpZiAoc3RhdGUgPT0gTlVNX0RJR0lUKSB7CiAgICAgIG51bSB2YWx1ZSA9IGJ1ZmZlci5wYXJzZU51bSgpOwogICAgICBsaXN0ZW5lci5oYW5kbGVOdW1iZXIodmFsdWUpOwogICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBOVU1fRE9UX0RJR0lUIHx8IHN0YXRlID09IE5VTV9FX0RJR0lUKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcihidWZmZXIucGFyc2VEb3VibGUoKSk7CiAgICB9IGVsc2UgewogICAgICBmYWlsKGNodW5rRW5kLCAiVW50ZXJtaW5hdGVkIG51bWJlciBsaXRlcmFsIik7CiAgICB9CiAgICByZXR1cm4gZW5kOwogIH0KCiAgaW50IHBhcnNlTnVtYmVyKGludCBjaGFyLCBpbnQgcG9zaXRpb24pIHsKICAgIC8vIEFsc28gY2FsbGVkIG9uIGFueSB1bmV4cGVjdGVkIGNoYXJhY3Rlci4KICAgIC8vIEZvcm1hdDoKICAgIC8vICAnLSc/KCcwJ3xbMS05XVswLTldKikoJy4nWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8KICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgaW50IGxlbmd0aCA9IGNodW5rRW5kOwogICAgLy8gQ29sbGVjdHMgYW4gaW50IHZhbHVlIHdoaWxlIHBhcnNpbmcuIFVzZWQgZm9yIGJvdGggYW4gaW50ZWdlciBsaXRlcmFsLAogICAgLy8gYW5kIHRoZSBleHBvbmVudCBwYXJ0IG9mIGEgZG91YmxlIGxpdGVyYWwuCiAgICAvLyBTdG9yZWQgYXMgbmVnYXRpdmUgdG8gZW5zdXJlIHdlIGNhbiByZXByZXNlbnQgLTJeNjMuCiAgICBpbnQgaW50VmFsdWUgPSAwOwogICAgZG91YmxlIGRvdWJsZVZhbHVlID0gMC4wOyAvLyBDb2xsZWN0IGRvdWJsZSB2YWx1ZSB3aGlsZSBwYXJzaW5nLgogICAgLy8gMSBpZiB0aGVyZSBpcyBubyBsZWFkaW5nIC0sIC0xIGlmIHRoZXJlIGlzLgogICAgaW50IHNpZ24gPSAxOwogICAgYm9vbCBpc0RvdWJsZSA9IGZhbHNlOwogICAgLy8gQnJlYWsgdGhpcyBibG9jayB3aGVuIHRoZSBlbmQgb2YgdGhlIG51bWJlciBsaXRlcmFsIGlzIHJlYWNoZWQuCiAgICAvLyBBdCB0aGF0IHRpbWUsIHBvc2l0aW9uIHBvaW50cyB0byB0aGUgbmV4dCBjaGFyYWN0ZXIsIGFuZCBpc0RvdWJsZQogICAgLy8gaXMgc2V0IGlmIHRoZSBsaXRlcmFsIGNvbnRhaW5zIGEgZGVjaW1hbCBwb2ludCBvciBhbiBleHBvbmVudGlhbC4KICAgIGlmIChjaGFyID09IE1JTlVTKSB7CiAgICAgIHNpZ24gPSAtMTsKICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX1NJR04sIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgfQogICAgaW50IGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgIGlmIChkaWdpdCA+IDkpIHsKICAgICAgaWYgKHNpZ24gPCAwKSB7CiAgICAgICAgZmFpbChwb3NpdGlvbiwgIk1pc3NpbmcgZXhwZWN0ZWQgZGlnaXQiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IGV2ZW4gc3RhcnQgb3V0IGFzIGEgbnVtZXJhbC4KICAgICAgICBmYWlsKHBvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgaWYgKGRpZ2l0ID09IDApIHsKICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX1pFUk8sIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIC8vIElmIHN0YXJ0aW5nIHdpdGggemVybywgbmV4dCBjaGFyYWN0ZXIgbXVzdCBub3QgYmUgZGlnaXQuCiAgICAgIGlmIChkaWdpdCA8PSA5KSBmYWlsKHBvc2l0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBkaWdpdENvdW50ID0gMDsKICAgICAgZG8gewogICAgICAgIGlmIChkaWdpdENvdW50ID49IDE4KSB7CiAgICAgICAgICAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCiAgICAgICAgICAvLyBJcyAxIGlmIGRpZ2l0IGlzIDggb3IgOSBhbmQgc2lnbiA9PSAwLCBvciBkaWdpdCBpcyA5IGFuZCBzaWduIDwgMDsKICAgICAgICAgIGludCBoaWdoRGlnaXQgPSBkaWdpdCA+PiAzOwogICAgICAgICAgaWYgKHNpZ24gPCAwKSBoaWdoRGlnaXQgJj0gZGlnaXQ7CiAgICAgICAgICBpZiAoZGlnaXRDb3VudCA9PSAxOSB8fCBpbnRWYWx1ZSAtIGhpZ2hEaWdpdCA8IC05MjIzMzcyMDM2ODU0Nzc1ODApIHsKICAgICAgICAgICAgaXNEb3VibGUgPSB0cnVlOwogICAgICAgICAgICAvLyBCaWcgdmFsdWUgdGhhdCB3ZSBrbm93IGlzIG5vdCB0cnVzdGVkIHRvIGJlIGV4YWN0IGxhdGVyLAogICAgICAgICAgICAvLyBmb3JjaW5nIHJlcGFyc2luZyB1c2luZyBgZG91YmxlLnBhcnNlYC4KICAgICAgICAgICAgZG91YmxlVmFsdWUgPSA5MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGludFZhbHVlID0gMTAgKiBpbnRWYWx1ZSAtIGRpZ2l0OwogICAgICAgIGRpZ2l0Q291bnQrKzsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBiZWdpbkNodW5rTnVtYmVyKE5VTV9ESUdJVCwgc3RhcnQpOwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIH0gd2hpbGUgKGRpZ2l0IDw9IDkpOwogICAgfQogICAgaWYgKGNoYXIgPT0gREVDSU1BTFBPSU5UKSB7CiAgICAgIGlmICghaXNEb3VibGUpIHsKICAgICAgICBpc0RvdWJsZSA9IHRydWU7CiAgICAgICAgZG91YmxlVmFsdWUgPSAoaW50VmFsdWUgPT0gMCkgPyAwLjAgOiAtaW50VmFsdWUudG9Eb3VibGUoKTsKICAgICAgfQogICAgICBpbnRWYWx1ZSA9IDA7CiAgICAgIHBvc2l0aW9uKys7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBiZWdpbkNodW5rTnVtYmVyKE5VTV9ET1QsIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIGlmIChkaWdpdCA+IDkpIGZhaWwocG9zaXRpb24pOwogICAgICBkbyB7CiAgICAgICAgZG91YmxlVmFsdWUgPSAxMC4wICogZG91YmxlVmFsdWUgKyBkaWdpdDsKICAgICAgICBpbnRWYWx1ZSAtPSAxOwogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0RPVF9ESUdJVCwgc3RhcnQpOwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIH0gd2hpbGUgKGRpZ2l0IDw9IDkpOwogICAgfQogICAgaWYgKChjaGFyIHwgMHgyMCkgPT0gQ0hBUl9lKSB7CiAgICAgIGlmICghaXNEb3VibGUpIHsKICAgICAgICBpc0RvdWJsZSA9IHRydWU7CiAgICAgICAgZG91YmxlVmFsdWUgPSAoaW50VmFsdWUgPT0gMCkgPyAwLjAgOiAtaW50VmFsdWUudG9Eb3VibGUoKTsKICAgICAgICBpbnRWYWx1ZSA9IDA7CiAgICAgIH0KICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0UsIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpbnQgZXhwU2lnbiA9IDE7CiAgICAgIGludCBleHBvbmVudCA9IDA7CiAgICAgIGlmICgoKGNoYXIgKyAxKSB8IDIpID09IDB4MmUgLyorIG9yIC0qLykgewogICAgICAgIGV4cFNpZ24gPSAweDJDIC0gY2hhcjsgLy8gLTEgZm9yIE1JTlVTLCArMSBmb3IgUExVUwogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0VfU0lHTiwgc3RhcnQpOwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgfQogICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIGlmIChkaWdpdCA+IDkpIHsKICAgICAgICBmYWlsKHBvc2l0aW9uLCAiTWlzc2luZyBleHBlY3RlZCBkaWdpdCIpOwogICAgICB9CiAgICAgIGJvb2wgZXhwb25lbnRPdmVyZmxvdyA9IGZhbHNlOwogICAgICBkbyB7CiAgICAgICAgZXhwb25lbnQgPSAxMCAqIGV4cG9uZW50ICsgZGlnaXQ7CiAgICAgICAgaWYgKGV4cG9uZW50ID4gNDAwKSBleHBvbmVudE92ZXJmbG93ID0gdHJ1ZTsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBiZWdpbkNodW5rTnVtYmVyKE5VTV9FX0RJR0lULCBzdGFydCk7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfSB3aGlsZSAoZGlnaXQgPD0gOSk7CiAgICAgIGlmIChleHBvbmVudE92ZXJmbG93KSB7CiAgICAgICAgaWYgKGRvdWJsZVZhbHVlID09IDAuMCB8fCBleHBTaWduIDwgMCkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ24gPCAwID8gLTAuMCA6IDAuMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcigKICAgICAgICAgICAgICBzaWduIDwgMCA/IGRvdWJsZS5uZWdhdGl2ZUluZmluaXR5IDogZG91YmxlLmluZmluaXR5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICB9CiAgICAgIGludFZhbHVlICs9IGV4cFNpZ24gKiBleHBvbmVudDsKICAgIH0KICAgIGlmICghaXNEb3VibGUpIHsKICAgICAgaW50IGJpdEZsYWcgPSAtKHNpZ24gKyAxKSA+PiAxOyAvLyAwIGlmIHNpZ24gPT0gLTEsIC0xIGlmIHNpZ24gPT0gMQogICAgICAvLyBOZWdhdGUgaWYgYml0RmxhZyBpcyAtMSBieSBkb2luZyB+aW50VmFsdWUgKyAxCiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcigoaW50VmFsdWUgXiBiaXRGbGFnKSAtIGJpdEZsYWcpOwogICAgICByZXR1cm4gcG9zaXRpb247CiAgICB9CiAgICAvLyBEb3VibGUgdmFsdWVzIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUgKDIgKiogNTMpIG1heSBoYXZlIGxvc3QgcHJlY2lzaW9uLgogICAgLy8gT25seSB0cnVzdCByZXN1bHRzIHRoYXQgYXJlIGJlbG93IHRoaXMgdmFsdWUuCiAgICBjb25zdCBkb3VibGUgbWF4RXhhY3REb3VibGUgPSA5MDA3MTk5MjU0NzQwOTkyLjA7CiAgICBpZiAoZG91YmxlVmFsdWUgPCBtYXhFeGFjdERvdWJsZSkgewogICAgICBpbnQgZXhwb25lbnQgPSBpbnRWYWx1ZTsKICAgICAgZG91YmxlIHNpZ25lZE1hbnRpc3NhID0gZG91YmxlVmFsdWUgKiBzaWduOwogICAgICBpZiAoZXhwb25lbnQgPj0gLTIyKSB7CiAgICAgICAgaWYgKGV4cG9uZW50IDwgMCkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ25lZE1hbnRpc3NhIC8gUE9XRVJTX09GX1RFTlstZXhwb25lbnRdKTsKICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcihzaWduZWRNYW50aXNzYSk7CiAgICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgICAgfQogICAgICAgIGlmIChleHBvbmVudCA8PSAyMikgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ25lZE1hbnRpc3NhICogUE9XRVJTX09GX1RFTltleHBvbmVudF0pOwogICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLy8gSWYgdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlICsvLW1heEV4YWN0RG91YmxlIG9yCiAgICAvLyBleHBvbmVudCBpcyBvdXRzaWRlIHRoZSByYW5nZSArLy0yMiwgdGhlbiB3ZSBjYW4ndCB0cnVzdCBzaW1wbGUgZG91YmxlCiAgICAvLyBhcml0aG1ldGljIHRvIGdldCB0aGUgZXhhY3QgcmVzdWx0LCBzbyB3ZSB1c2UgdGhlIHN5c3RlbSBkb3VibGUgcGFyc2luZy4KICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcihwYXJzZURvdWJsZShzdGFydCwgcG9zaXRpb24pKTsKICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIGZhaWwoaW50IHBvc2l0aW9uLCBbU3RyaW5nIG1lc3NhZ2VdKSB7CiAgICBpZiAobWVzc2FnZSA9PSBudWxsKSB7CiAgICAgIG1lc3NhZ2UgPSAiVW5leHBlY3RlZCBjaGFyYWN0ZXIiOwogICAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIG1lc3NhZ2UgPSAiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiOwogICAgfQogICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbihtZXNzYWdlLCBjaHVuaywgcG9zaXRpb24pOwogIH0KfQoKLyoqCiAqIENodW5rZWQgSlNPTiBwYXJzZXIgdGhhdCBwYXJzZXMgW1N0cmluZ10gY2h1bmtzLgogKi8KY2xhc3MgX0pzb25TdHJpbmdQYXJzZXIgZXh0ZW5kcyBfQ2h1bmtlZEpzb25QYXJzZXI8U3RyaW5nPiB7CiAgU3RyaW5nIGNodW5rOwogIGludCBjaHVua0VuZDsKCiAgX0pzb25TdHJpbmdQYXJzZXIoX0pzb25MaXN0ZW5lciBsaXN0ZW5lcikgOiBzdXBlcihsaXN0ZW5lcik7CgogIGludCBnZXRDaGFyKGludCBwb3NpdGlvbikgPT4gY2h1bmsuY29kZVVuaXRBdChwb3NpdGlvbik7CgogIFN0cmluZyBnZXRTdHJpbmcoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgYml0cykgewogICAgcmV0dXJuIGNodW5rLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgYmVnaW5TdHJpbmcoKSB7CiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICB9CgogIHZvaWQgYWRkU2xpY2VUb1N0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjsKICAgIGJ1ZmZlci53cml0ZShjaHVuay5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwogIH0KCiAgdm9pZCBhZGRDaGFyVG9TdHJpbmcoaW50IGNoYXJDb2RlKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICBidWZmZXIud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICBTdHJpbmcgZW5kU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgdGhpcy5idWZmZXIgPSBudWxsOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgdm9pZCBjb3B5Q2hhcnNUb0xpc3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0IHRhcmdldCwgaW50IG9mZnNldCkgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB0YXJnZXRbb2Zmc2V0ICsgaV0gPSBjaHVuay5jb2RlVW5pdEF0KHN0YXJ0ICsgaSk7CiAgICB9CiAgfQoKICBkb3VibGUgcGFyc2VEb3VibGUoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICByZXR1cm4gX3BhcnNlRG91YmxlKGNodW5rLCBzdGFydCwgZW5kKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBKc29uRGVjb2RlciB7CiAgQHBhdGNoCiAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPE9iamVjdD4gc2luaykgewogICAgcmV0dXJuIG5ldyBfSnNvblN0cmluZ0RlY29kZXJTaW5rKHRoaXMuX3Jldml2ZXIsIHNpbmspOwogIH0KfQoKLyoqCiAqIEltcGxlbWVudHMgdGhlIGNodW5rZWQgY29udmVyc2lvbiBmcm9tIGEgSlNPTiBzdHJpbmcgdG8gaXRzIGNvcnJlc3BvbmRpbmcKICogb2JqZWN0LgogKgogKiBUaGUgc2luayBvbmx5IGNyZWF0ZXMgb25lIG9iamVjdCwgYnV0IGl0cyBpbnB1dCBjYW4gYmUgY2h1bmtlZC4KICovCmNsYXNzIF9Kc29uU3RyaW5nRGVjb2RlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIF9Kc29uU3RyaW5nUGFyc2VyIF9wYXJzZXI7CiAgZmluYWwgRnVuY3Rpb24oT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSBfcmV2aXZlcjsKICBmaW5hbCBTaW5rPE9iamVjdD4gX3Npbms7CgogIF9Kc29uU3RyaW5nRGVjb2RlclNpbmsodGhpcy5fcmV2aXZlciwgdGhpcy5fc2luaykKICAgICAgOiBfcGFyc2VyID0gX2NyZWF0ZVBhcnNlcihfcmV2aXZlcik7CgogIHN0YXRpYyBfSnNvblN0cmluZ1BhcnNlciBfY3JlYXRlUGFyc2VyKHJldml2ZXIpIHsKICAgIF9CdWlsZEpzb25MaXN0ZW5lciBsaXN0ZW5lcjsKICAgIGlmIChyZXZpdmVyID09IG51bGwpIHsKICAgICAgbGlzdGVuZXIgPSBuZXcgX0J1aWxkSnNvbkxpc3RlbmVyKCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lciA9IG5ldyBfUmV2aXZlckpzb25MaXN0ZW5lcihyZXZpdmVyKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0pzb25TdHJpbmdQYXJzZXIobGlzdGVuZXIpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIF9wYXJzZXIuY2h1bmsgPSBjaHVuazsKICAgIF9wYXJzZXIuY2h1bmtFbmQgPSBlbmQ7CiAgICBfcGFyc2VyLnBhcnNlKHN0YXJ0KTsKICAgIGlmIChpc0xhc3QpIF9wYXJzZXIuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKFN0cmluZyBjaHVuaykgewogICAgYWRkU2xpY2UoY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9wYXJzZXIuY2xvc2UoKTsKICAgIHZhciBkZWNvZGVkID0gX3BhcnNlci5yZXN1bHQ7CiAgICBfc2luay5hZGQoZGVjb2RlZCk7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgQnl0ZUNvbnZlcnNpb25TaW5rIGFzVXRmOFNpbmsoYm9vbCBhbGxvd01hbGZvcm1lZCkgewogICAgX3BhcnNlciA9IG51bGw7CiAgICByZXR1cm4gbmV3IF9Kc29uVXRmOERlY29kZXJTaW5rKF9yZXZpdmVyLCBfc2luaywgYWxsb3dNYWxmb3JtZWQpOwogIH0KfQoKY2xhc3MgX1V0ZjhTdHJpbmdCdWZmZXIgewogIHN0YXRpYyBjb25zdCBpbnQgSU5JVElBTF9DQVBBQ0lUWSA9IDMyOwogIC8vIFBhcnRpYWwgc3RhdGUgZW5jb2RpbmcuCiAgc3RhdGljIGNvbnN0IGludCBNQVNLX1RXT19CSVQgPSAweDAzOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19TSVpFID0gTUFTS19UV09fQklUOwogIHN0YXRpYyBjb25zdCBpbnQgU0hJRlRfTUlTU0lORyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBTSElGVF9WQUxVRSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBOT19QQVJUSUFMID0gMDsKCiAgLy8gVVRGLTggZW5jb2RpbmcgYW5kIGxpbWl0cy4KICBzdGF0aWMgY29uc3QgaW50IE1BWF9BU0NJSSA9IDEyNzsKICBzdGF0aWMgY29uc3QgaW50IE1BWF9UV09fQllURSA9IDB4N2ZmOwogIHN0YXRpYyBjb25zdCBpbnQgTUFYX1RIUkVFX0JZVEUgPSAweGZmZmY7CiAgc3RhdGljIGNvbnN0IGludCBNQVhfVU5JQ09ERSA9IDBYMTBmZmZmOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19UV09fQllURSA9IDB4MWY7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX1RIUkVFX0JZVEUgPSAweDBmOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19GT1VSX0JZVEUgPSAweDA3OwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19DT05USU5VRV9UQUcgPSAweEMwOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19DT05USU5VRV9WQUxVRSA9IDB4M2Y7CiAgc3RhdGljIGNvbnN0IGludCBDT05USU5VRV9UQUcgPSAweDgwOwoKICAvLyBVVEYtMTYgc3Vycm9nYXRlIGVuY29kaW5nLgogIHN0YXRpYyBjb25zdCBpbnQgTEVBRF9TVVJST0dBVEUgPSAweEQ4MDA7CiAgc3RhdGljIGNvbnN0IGludCBUQUlMX1NVUlJPR0FURSA9IDB4REMwMDsKICBzdGF0aWMgY29uc3QgaW50IFNISUZUX0hJR0hfU1VSUk9HQVRFID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX0xPV19TVVJST0dBVEUgPSAweDNmZjsKCiAgLy8gVGhlIGludGVybmFsIGJ1ZmZlciBzdGFydHMgYXMgVWludDhMaXN0LCBidXQgbWF5IGNoYW5nZSB0byBVaW50MTZMaXN0CiAgLy8gaWYgdGhlIHN0cmluZyBjb250YWlucyBub24tTGF0aW4tMSBjaGFyYWN0ZXJzLgogIExpc3Q8aW50PiBidWZmZXIgPSBuZXcgVWludDhMaXN0KElOSVRJQUxfQ0FQQUNJVFkpOwogIC8vIE51bWJlciBvZiBlbGVtZW50cyBpbiBidWZmZXIuCiAgaW50IGxlbmd0aCA9IDA7CiAgLy8gUGFydGlhbCBkZWNvZGluZyBzdGF0ZSwgZm9yIGNhc2VzIHdoZXJlIGFuIFVURi04IHNlcXVlbmNlcyBpcyBzcGxpdAogIC8vIGJldHdlZW4gY2h1bmtzLgogIGludCBwYXJ0aWFsU3RhdGUgPSBOT19QQVJUSUFMOwogIC8vIFdoZXRoZXIgYWxsIGNoYXJhY3RlcnMgc28gZmFyIGhhdmUgYmVlbiBMYXRpbi0xIChhbmQgdGhlIGJ1ZmZlciBpcwogIC8vIHN0aWxsIGEgVWludDhMaXN0KS4gU2V0IHRvIGZhbHNlIHdoZW4gdGhlIGZpcnN0IG5vbi1MYXRpbi0xIGNoYXJhY3RlcgogIC8vIGlzIGVuY291bnRlcmVkLCBhbmQgdGhlIGJ1ZmZlciBpcyB0aGVuIGFsc28gY29udmVydGVkIHRvIGEgVWludDE2TGlzdC4KICBib29sIGlzTGF0aW4xID0gdHJ1ZTsKICAvLyBJZiBhbGxvd2luZyBtYWxmb3JtZWQsIGludmFsaWQgVVRGLTggc2VxdWVuY2VzIGFyZSBjb252ZXJ0ZWQgdG8KICAvLyBVK0ZGRkQuCiAgYm9vbCBhbGxvd01hbGZvcm1lZDsKCiAgX1V0ZjhTdHJpbmdCdWZmZXIodGhpcy5hbGxvd01hbGZvcm1lZCk7CgogIC8qKgogICAqIFBhcnNlIHRoZSBjb250aW51YXRpb24gb2YgYSBtdWx0aS1ieXRlIFVURi04IHNlcXVlbmNlLgogICAqCiAgICogUGFyc2UgW3V0ZjhdIGZyb20gW3Bvc2l0aW9uXSB0byBbZW5kXS4gSWYgdGhlIHNlcXVlbmNlIGV4dGVuZHMgYmV5b25kCiAgICogYGVuZGAsIHN0b3JlIHRoZSBwYXJ0aWFsIHN0YXRlIGluIFtwYXJ0aWFsU3RhdGVdLCBhbmQgY29udGludWUgZnJvbSB0aGVyZQogICAqIG9uIHRoZSBuZXh0IGFkZGVkIHNsaWNlLgogICAqCiAgICogVGhlIFtzaXplXSBpcyB0aGUgbnVtYmVyIG9mIGV4cGVjdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB0b3RhbCwKICAgKiBhbmQgW21pc3NpbmddIGlzIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGNvbnRpbnVhdGlvbiBieXRlcy4KICAgKiBUaGUgW3NpemVdIGlzIHVzZWQgdG8gZGV0ZWN0IG92ZXJsb25nIGVuY29kaW5ncy4KICAgKiBUaGUgW3ZhbHVlXSBpcyB0aGUgdmFsdWUgY29sbGVjdGVkIHNvIGZhci4KICAgKgogICAqIFdoZW4gY2FsbGVkIGFmdGVyIHNlZWluZyB0aGUgZmlyc3QgbXVsdGktYnl0ZSBtYXJrZXIsIHRoZSBbc2l6ZV0gYW5kCiAgICogW21pc3NpbmddIHZhbHVlcyBhcmUgYWx3YXlzIHRoZSBzYW1lLCBidXQgdGhleSBtYXkgZGlmZmVyIGlmIGNvbnRpbnVpbmcKICAgKiBhZnRlciBhIHBhcnRpYWwgc2VxdWVuY2UuCiAgICovCiAgaW50IGFkZENvbnRpbnVhdGlvbigKICAgICAgTGlzdDxpbnQ+IHV0ZjgsIGludCBwb3NpdGlvbiwgaW50IGVuZCwgaW50IHNpemUsIGludCBtaXNzaW5nLCBpbnQgdmFsdWUpIHsKICAgIGludCBjb2RlRW5kID0gcG9zaXRpb24gKyBtaXNzaW5nOwogICAgZG8gewogICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CiAgICAgICAgbWlzc2luZyA9IGNvZGVFbmQgLSBwb3NpdGlvbjsKICAgICAgICBwYXJ0aWFsU3RhdGUgPQogICAgICAgICAgICBzaXplIHwgKG1pc3NpbmcgPDwgU0hJRlRfTUlTU0lORykgfCAodmFsdWUgPDwgU0hJRlRfVkFMVUUpOwogICAgICAgIHJldHVybiBlbmQ7CiAgICAgIH0KICAgICAgaW50IGNoYXIgPSB1dGY4W3Bvc2l0aW9uXTsKICAgICAgaWYgKChjaGFyICYgTUFTS19DT05USU5VRV9UQUcpICE9IENPTlRJTlVFX1RBRykgewogICAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkV4cGVjdGVkIFVURi04IGNvbnRpbnVhdGlvbiBieXRlLCAiCiAgICAgICAgICAgICJmb3VuZCAkY2hhciIsCiAgICAgICAgICAgIHV0ZjgsCiAgICAgICAgICAgIHBvc2l0aW9uKTsKICAgICAgfQogICAgICB2YWx1ZSA9IDY0ICogdmFsdWUgKyAoY2hhciAmIE1BU0tfQ09OVElOVUVfVkFMVUUpOwogICAgICBwb3NpdGlvbisrOwogICAgfSB3aGlsZSAocG9zaXRpb24gPCBjb2RlRW5kKTsKICAgIGlmICh2YWx1ZSA8PSBjb25zdCBbMCwgTUFYX0FTQ0lJLCBNQVhfVFdPX0JZVEUsIE1BWF9USFJFRV9CWVRFXVtzaXplXSkgewogICAgICAvLyBPdmVyLWxvbmcgZW5jb2RpbmcuCiAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgIHZhbHVlID0gMHhGRkZEOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJJbnZhbGlkIGVuY29kaW5nOiBVKyR7dmFsdWUudG9SYWRpeFN0cmluZygxNikucGFkTGVmdCg0LCAnMCcpfSIKICAgICAgICAgICAgIiBlbmNvZGVkIGluICR7c2l6ZSArIDF9IGJ5dGVzLiIsCiAgICAgICAgICAgIHV0ZjgsCiAgICAgICAgICAgIHBvc2l0aW9uIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIGFkZENoYXJDb2RlKHZhbHVlKTsKICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIHZvaWQgYWRkQ2hhckNvZGUoaW50IGNoYXIpIHsKICAgIGFzc2VydChjaGFyID49IDApOwogICAgYXNzZXJ0KGNoYXIgPD0gTUFYX1VOSUNPREUpOwogICAgaWYgKHBhcnRpYWxTdGF0ZSAhPSBOT19QQVJUSUFMKSB7CiAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgIHBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlIik7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc0xhdGluMSAmJiBjaGFyID4gMHhmZikgewogICAgICBfdG8xNkJpdCgpOyAvLyBBbHNvIGdyb3dzIGEgbGl0dGxlIGlmIGNsb3NlIHRvIGZ1bGwuCiAgICB9CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAoY2hhciA8PSBNQVhfVEhSRUVfQllURSkgewogICAgICBpZiAobGVuZ3RoID09IGJ1ZmZlci5sZW5ndGgpIF9ncm93KCk7CiAgICAgIGJ1ZmZlcltsZW5ndGhdID0gY2hhcjsKICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGggKyAxOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobGVuZ3RoICsgMiA+IGJ1ZmZlci5sZW5ndGgpIF9ncm93KCk7CiAgICBpbnQgYml0cyA9IGNoYXIgLSAweDEwMDAwOwogICAgYnVmZmVyW2xlbmd0aF0gPSBMRUFEX1NVUlJPR0FURSB8IChiaXRzID4+IFNISUZUX0hJR0hfU1VSUk9HQVRFKTsKICAgIGJ1ZmZlcltsZW5ndGggKyAxXSA9IFRBSUxfU1VSUk9HQVRFIHwgKGJpdHMgJiBNQVNLX0xPV19TVVJST0dBVEUpOwogICAgdGhpcy5sZW5ndGggPSBsZW5ndGggKyAyOwogIH0KCiAgdm9pZCBfdG8xNkJpdCgpIHsKICAgIGFzc2VydChpc0xhdGluMSk7CiAgICBVaW50MTZMaXN0IG5ld0J1ZmZlcjsKICAgIGlmICgobGVuZ3RoICsgSU5JVElBTF9DQVBBQ0lUWSkgKiAyIDw9IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgLy8gUmV1c2UgZXhpc3RpbmcgYnVmZmVyIGlmIGl0J3MgYmlnIGVub3VnaC4KICAgICAgbmV3QnVmZmVyID0gbmV3IFVpbnQxNkxpc3QudmlldygoYnVmZmVyIGFzIFVpbnQ4TGlzdCkuYnVmZmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBuZXdDYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICAgIGlmIChuZXdDYXBhY2l0eSAtIGxlbmd0aCA8IElOSVRJQUxfQ0FQQUNJVFkpIHsKICAgICAgICBuZXdDYXBhY2l0eSA9IGxlbmd0aCArIElOSVRJQUxfQ0FQQUNJVFk7CiAgICAgIH0KICAgICAgbmV3QnVmZmVyID0gbmV3IFVpbnQxNkxpc3QobmV3Q2FwYWNpdHkpOwogICAgfQogICAgbmV3QnVmZmVyLnNldFJhbmdlKDAsIGxlbmd0aCwgYnVmZmVyKTsKICAgIGJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgIGlzTGF0aW4xID0gZmFsc2U7CiAgfQoKICB2b2lkIF9ncm93KCkgewogICAgaW50IG5ld0NhcGFjaXR5ID0gYnVmZmVyLmxlbmd0aCAqIDI7CiAgICBMaXN0IG5ld0J1ZmZlcjsKICAgIGlmIChpc0xhdGluMSkgewogICAgICBuZXdCdWZmZXIgPSBuZXcgVWludDhMaXN0KG5ld0NhcGFjaXR5KTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld0J1ZmZlciA9IG5ldyBVaW50MTZMaXN0KG5ld0NhcGFjaXR5KTsKICAgIH0KICAgIG5ld0J1ZmZlci5zZXRSYW5nZSgwLCBsZW5ndGgsIGJ1ZmZlcik7CiAgICBidWZmZXIgPSBuZXdCdWZmZXI7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiB1dGY4LCBpbnQgcG9zaXRpb24sIGludCBlbmQpIHsKICAgIGFzc2VydChwb3NpdGlvbiA8IGVuZCk7CiAgICBpZiAocGFydGlhbFN0YXRlID4gMCkgewogICAgICBpbnQgY29udGludWVCeXRlQ291bnQgPSAocGFydGlhbFN0YXRlICYgTUFTS19UV09fQklUKTsKICAgICAgaW50IG1pc3NpbmcgPSAocGFydGlhbFN0YXRlID4+IFNISUZUX01JU1NJTkcpICYgTUFTS19UV09fQklUOwogICAgICBpbnQgdmFsdWUgPSBwYXJ0aWFsU3RhdGUgPj4gU0hJRlRfVkFMVUU7CiAgICAgIHBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICAgIHBvc2l0aW9uID0gYWRkQ29udGludWF0aW9uKAogICAgICAgICAgdXRmOCwgcG9zaXRpb24sIGVuZCwgY29udGludWVCeXRlQ291bnQsIG1pc3NpbmcsIHZhbHVlKTsKICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgcmV0dXJuOwogICAgfQogICAgLy8gS2VlcCBpbmRleCBhbmQgY2FwYWNpdHkgaW4gbG9jYWwgdmFyaWFibGVzIHdoaWxlIGxvb3Bpbmcgb3ZlcgogICAgLy8gQVNDSUkgY2hhcmFjdGVycy4KICAgIGludCBpbmRleCA9IGxlbmd0aDsKICAgIGludCBjYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgaW50IGNoYXIgPSB1dGY4W3Bvc2l0aW9uXTsKICAgICAgaWYgKGNoYXIgPD0gTUFYX0FTQ0lJKSB7CiAgICAgICAgaWYgKGluZGV4ID09IGNhcGFjaXR5KSB7CiAgICAgICAgICBsZW5ndGggPSBpbmRleDsKICAgICAgICAgIF9ncm93KCk7CiAgICAgICAgICBjYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IGNoYXI7CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZW5ndGggPSBpbmRleDsKICAgICAgaWYgKChjaGFyICYgTUFTS19DT05USU5VRV9UQUcpID09IENPTlRJTlVFX1RBRykgewogICAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgVVRGLTggY29udGludWF0aW9uIGJ5dGUiLCB1dGY4LCBwb3NpdGlvbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNoYXIgPCAweEUwKSB7CiAgICAgICAgLy8gQzAtREYKICAgICAgICAvLyBUd28tYnl0ZS4KICAgICAgICBwb3NpdGlvbiA9IGFkZENvbnRpbnVhdGlvbigKICAgICAgICAgICAgdXRmOCwgcG9zaXRpb24gKyAxLCBlbmQsIDEsIDEsIGNoYXIgJiBNQVNLX1RXT19CWVRFKTsKICAgICAgfSBlbHNlIGlmIChjaGFyIDwgMHhGMCkgewogICAgICAgIC8vIEUwLUVGCiAgICAgICAgLy8gVGhyZWUtYnl0ZS4KICAgICAgICBwb3NpdGlvbiA9IGFkZENvbnRpbnVhdGlvbigKICAgICAgICAgICAgdXRmOCwgcG9zaXRpb24gKyAxLCBlbmQsIDIsIDIsIGNoYXIgJiBNQVNLX1RIUkVFX0JZVEUpOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPCAweEY4KSB7CiAgICAgICAgLy8gRjAtRjcKICAgICAgICAvLyBGb3VyLWJ5dGUuCiAgICAgICAgcG9zaXRpb24gPSBhZGRDb250aW51YXRpb24oCiAgICAgICAgICAgIHV0ZjgsIHBvc2l0aW9uICsgMSwgZW5kLCAzLCAzLCBjaGFyICYgTUFTS19GT1VSX0JZVEUpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgIkludmFsaWQgVVRGLTggYnl0ZTogJGNoYXIiLCB1dGY4LCBwb3NpdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGluZGV4ID0gbGVuZ3RoOwogICAgICBjYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICB9CiAgICBsZW5ndGggPSBpbmRleDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChwYXJ0aWFsU3RhdGUgIT0gTk9fUEFSVElBTCkgewogICAgICBpZiAoYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICBwYXJ0aWFsU3RhdGUgPSBOT19QQVJUSUFMOwogICAgICAgIGFkZENoYXJDb2RlKDB4RkZGRCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50IGNvbnRpbnVlQnl0ZUNvdW50ID0gKHBhcnRpYWxTdGF0ZSAmIE1BU0tfVFdPX0JJVCk7CiAgICAgICAgaW50IG1pc3NpbmcgPSAocGFydGlhbFN0YXRlID4+IFNISUZUX01JU1NJTkcpICYgTUFTS19UV09fQklUOwogICAgICAgIGludCB2YWx1ZSA9IHBhcnRpYWxTdGF0ZSA+PiBTSElGVF9WQUxVRTsKICAgICAgICBpbnQgc2VlbkJ5dGVDb3VudCA9IGNvbnRpbnVlQnl0ZUNvdW50IC0gbWlzc2luZyArIDE7CiAgICAgICAgTGlzdCBzb3VyY2UgPSBuZXcgVWludDhMaXN0KHNlZW5CeXRlQ291bnQpOwogICAgICAgIHdoaWxlIChzZWVuQnl0ZUNvdW50ID4gMSkgewogICAgICAgICAgc2VlbkJ5dGVDb3VudC0tOwogICAgICAgICAgc291cmNlW3NlZW5CeXRlQ291bnRdID0gQ09OVElOVUVfVEFHIHwgKHZhbHVlICYgTUFTS19DT05USU5VRV9WQUxVRSk7CiAgICAgICAgICB2YWx1ZSA+Pj0gNjsKICAgICAgICB9CiAgICAgICAgc291cmNlWzBdID0gdmFsdWUgfCAoMHgzYzAgPj4gKGNvbnRpbnVlQnl0ZUNvdW50IC0gMSkpOwogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJJbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlIiwgc291cmNlLCBzb3VyY2UubGVuZ3RoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhidWZmZXIsIDAsIGxlbmd0aCk7CiAgfQp9CgovKioKICogQ2h1bmtlZCBKU09OIHBhcnNlciB0aGF0IHBhcnNlcyBVVEYtOCBjaHVua3MuCiAqLwpjbGFzcyBfSnNvblV0ZjhQYXJzZXIgZXh0ZW5kcyBfQ2h1bmtlZEpzb25QYXJzZXI8TGlzdDxpbnQ+PiB7CiAgZmluYWwgYm9vbCBhbGxvd01hbGZvcm1lZDsKICBMaXN0PGludD4gY2h1bms7CiAgaW50IGNodW5rRW5kOwoKICBfSnNvblV0ZjhQYXJzZXIoX0pzb25MaXN0ZW5lciBsaXN0ZW5lciwgdGhpcy5hbGxvd01hbGZvcm1lZCkKICAgICAgOiBzdXBlcihsaXN0ZW5lcikgewogICAgLy8gU3RhcnRzIG91dCBjaGVja2luZyBmb3IgYW4gb3B0aW9uYWwgQk9NIChLV0RfQk9NLCBjb3VudCA9IDApLgogICAgcGFydGlhbFN0YXRlID0KICAgICAgICBfQ2h1bmtlZEpzb25QYXJzZXIuUEFSVElBTF9LRVlXT1JEIHwgX0NodW5rZWRKc29uUGFyc2VyLktXRF9CT007CiAgfQoKICBpbnQgZ2V0Q2hhcihpbnQgcG9zaXRpb24pID0+IGNodW5rW3Bvc2l0aW9uXTsKCiAgU3RyaW5nIGdldFN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQsIGludCBiaXRzKSB7CiAgICBjb25zdCBpbnQgbWF4QXNjaWlDaGFyID0gMHg3ZjsKICAgIGlmIChiaXRzIDw9IG1heEFzY2lpQ2hhcikgewogICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIH0KICAgIGJlZ2luU3RyaW5nKCk7CiAgICBpZiAoc3RhcnQgPCBlbmQpIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIGVuZCk7CiAgICBTdHJpbmcgcmVzdWx0ID0gZW5kU3RyaW5nKCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBiZWdpblN0cmluZygpIHsKICAgIHRoaXMuYnVmZmVyID0gbmV3IF9VdGY4U3RyaW5nQnVmZmVyKGFsbG93TWFsZm9ybWVkKTsKICB9CgogIHZvaWQgYWRkU2xpY2VUb1N0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9VdGY4U3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgYnVmZmVyLmFkZFNsaWNlKGNodW5rLCBzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgYWRkQ2hhclRvU3RyaW5nKGludCBjaGFyQ29kZSkgewogICAgX1V0ZjhTdHJpbmdCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICBidWZmZXIuYWRkQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgU3RyaW5nIGVuZFN0cmluZygpIHsKICAgIF9VdGY4U3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgdGhpcy5idWZmZXIgPSBudWxsOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgdm9pZCBjb3B5Q2hhcnNUb0xpc3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0IHRhcmdldCwgaW50IG9mZnNldCkgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgdGFyZ2V0LnNldFJhbmdlKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoLCBjaHVuaywgc3RhcnQpOwogIH0KCiAgZG91YmxlIHBhcnNlRG91YmxlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgU3RyaW5nIHN0cmluZyA9IGdldFN0cmluZyhzdGFydCwgZW5kLCAweDdmKTsKICAgIHJldHVybiBfcGFyc2VEb3VibGUoc3RyaW5nLCAwLCBzdHJpbmcubGVuZ3RoKTsKICB9Cn0KCmRvdWJsZSBfcGFyc2VEb3VibGUoU3RyaW5nIHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSBuYXRpdmUgIkRvdWJsZV9wYXJzZSI7CgovKioKICogSW1wbGVtZW50cyB0aGUgY2h1bmtlZCBjb252ZXJzaW9uIGZyb20gYSBVVEYtOCBlbmNvZGluZyBvZiBKU09OCiAqIHRvIGl0cyBjb3JyZXNwb25kaW5nIG9iamVjdC4KICovCmNsYXNzIF9Kc29uVXRmOERlY29kZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgX0pzb25VdGY4UGFyc2VyIF9wYXJzZXI7CiAgZmluYWwgU2luazxPYmplY3Q+IF9zaW5rOwoKICBfSnNvblV0ZjhEZWNvZGVyU2luayhyZXZpdmVyLCB0aGlzLl9zaW5rLCBib29sIGFsbG93TWFsZm9ybWVkKQogICAgICA6IF9wYXJzZXIgPSBfY3JlYXRlUGFyc2VyKHJldml2ZXIsIGFsbG93TWFsZm9ybWVkKTsKCiAgc3RhdGljIF9Kc29uVXRmOFBhcnNlciBfY3JlYXRlUGFyc2VyKHJldml2ZXIsIGJvb2wgYWxsb3dNYWxmb3JtZWQpIHsKICAgIF9CdWlsZEpzb25MaXN0ZW5lciBsaXN0ZW5lcjsKICAgIGlmIChyZXZpdmVyID09IG51bGwpIHsKICAgICAgbGlzdGVuZXIgPSBuZXcgX0J1aWxkSnNvbkxpc3RlbmVyKCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lciA9IG5ldyBfUmV2aXZlckpzb25MaXN0ZW5lcihyZXZpdmVyKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0pzb25VdGY4UGFyc2VyKGxpc3RlbmVyLCBhbGxvd01hbGZvcm1lZCk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgX2FkZENodW5rKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspIHsKICAgIF9hZGRDaHVuayhjaHVuaywgMCwgY2h1bmsubGVuZ3RoKTsKICB9CgogIHZvaWQgX2FkZENodW5rKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfcGFy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b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvYXNjaWkuZGFydKUOLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIEFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBbQXNjaWlDb2RlY10uCi8vLwovLy8gVGhpcyBpbnN0YW5jZSBwcm92aWRlcyBhIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSBtb3N0IGNvbW1vbiBBU0NJSQovLy8gdXNlIGNhc2VzLgovLy8KLy8vIEV4YW1wbGVzOgovLy8gYGBgZGFydAovLy8gdmFyIGVuY29kZWQgPSBhc2NpaS5lbmNvZGUoIlRoaXMgaXMgQVNDSUkhIik7Ci8vLyB2YXIgZGVjb2RlZCA9IGFzY2lpLmRlY29kZShbMHg1NCwgMHg2OCwgMHg2OSwgMHg3MywgMHgyMCwgMHg2OSwgMHg3MywKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDQxLCAweDUzLCAweDQzLCAweDQ5LCAweDQ5LCAweDIxXSk7Ci8vLyBgYGAKY29uc3QgQXNjaWlDb2RlYyBhc2NpaSA9IEFzY2lpQ29kZWMoKTsKCmNvbnN0IGludCBfYXNjaWlNYXNrID0gMHg3RjsKCi8vLyBBbiBbQXNjaWlDb2RlY10gYWxsb3dzIGVuY29kaW5nIHN0cmluZ3MgYXMgQVNDSUkgYnl0ZXMKLy8vIGFuZCBkZWNvZGluZyBBU0NJSSBieXRlcyB0byBzdHJpbmdzLgpjbGFzcyBBc2NpaUNvZGVjIGV4dGVuZHMgRW5jb2RpbmcgewogIGZpbmFsIGJvb2wgX2FsbG93SW52YWxpZDsKCiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBbQXNjaWlDb2RlY10uCiAgLy8vCiAgLy8vIElmIFthbGxvd0ludmFsaWRdIGlzIHRydWUsIHRoZSBbZGVjb2RlXSBtZXRob2QgYW5kIHRoZSBjb252ZXJ0ZXIKICAvLy8gcmV0dXJuZWQgYnkgW2RlY29kZXJdIHdpbGwgZGVmYXVsdCB0byBhbGxvd2luZyBpbnZhbGlkIHZhbHVlcy4KICAvLy8gSWYgYWxsb3dpbmcgaW52YWxpZCB2YWx1ZXMsIHRoZSB2YWx1ZXMgd2lsbCBiZSBkZWNvZGVkIGludG8gdGhlIFVuaWNvZGUKICAvLy8gUmVwbGFjZW1lbnQgY2hhcmFjdGVyIChVK0ZGRkQpLiBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KICAvLy8gQ2FsbHMgdG8gdGhlIFtkZWNvZGVdIG1ldGhvZCBjYW4gY2hvb3NlIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdC4KICAvLy8KICAvLy8gRW5jb2RlcnMgd2lsbCBub3QgYWNjZXB0IGludmFsaWQgKG5vbiBBU0NJSSkgY2hhcmFjdGVycy4KICBjb25zdCBBc2NpaUNvZGVjKHtib29sIGFsbG93SW52YWxpZCA9IGZhbHNlfSkgOiBfYWxsb3dJbnZhbGlkID0gYWxsb3dJbnZhbGlkOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBjb2RlYywgInVzLWFzY2lpIi4KICBTdHJpbmcgZ2V0IG5hbWUgPT4gInVzLWFzY2lpIjsKCiAgVWludDhMaXN0IGVuY29kZShTdHJpbmcgc291cmNlKSA9PiBlbmNvZGVyLmNvbnZlcnQoc291cmNlKTsKCiAgLy8vIERlY29kZXMgdGhlIEFTQ0lJIFtieXRlc10gKGEgbGlzdCBvZiB1bnNpZ25lZCA3LWJpdCBpbnRlZ2VycykgdG8gdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nLgogIC8vLwogIC8vLyBJZiBbYnl0ZXNdIGNvbnRhaW5zIHZhbHVlcyB0aGF0IGFyZSBub3QgaW4gdGhlIHJhbmdlIDAgLi4gMTI3LCB0aGUgZGVjb2RlcgogIC8vLyB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICAvLy8KICAvLy8gSWYgW2FsbG93SW52YWxpZF0gaXMgbm90IHByb3ZpZGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgdXNlZCB0byBjcmVhdGUKICAvLy8gdGhpcyBbQXNjaWlDb2RlY10uCiAgU3RyaW5nIGRlY29kZShMaXN0PGludD4gYnl0ZXMsIHtib29sIGFsbG93SW52YWxpZH0pIHsKICAgIGFsbG93SW52YWxpZCA/Pz0gX2FsbG93SW52YWxpZDsKICAgIGlmIChhbGxvd0ludmFsaWQpIHsKICAgICAgcmV0dXJuIGNvbnN0IEFzY2lpRGVjb2RlcihhbGxvd0ludmFsaWQ6IHRydWUpLmNvbnZlcnQoYnl0ZXMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbnN0IEFzY2lpRGVjb2RlcihhbGxvd0ludmFsaWQ6IGZhbHNlKS5jb252ZXJ0KGJ5dGVzKTsKICAgIH0KICB9CgogIEFzY2lpRW5jb2RlciBnZXQgZW5jb2RlciA9PiBjb25zdCBBc2NpaUVuY29kZXIoKTsKCiAgQXNjaWlEZWNvZGVyIGdldCBkZWNvZGVyID0+IF9hbGxvd0ludmFsaWQKICAgICAgPyBjb25zdCBBc2NpaURlY29kZXIoYWxsb3dJbnZhbGlkOiB0cnVlKQogICAgICA6IGNvbnN0IEFzY2lpRGVjb2RlcihhbGxvd0ludmFsaWQ6IGZhbHNlKTsKfQoKLy8gU3VwZXJjbGFzcyBmb3IgW0FzY2lpRW5jb2Rlcl0gYW5kIFtMYXRpbjFFbmNvZGVyXS4KLy8gR2VuZXJhbGl6ZXMgY29tbW9uIG9wZXJhdGlvbnMgdGhhdCBvbmx5IGRpZmZlciBieSBhIG1hc2s7CmNsYXNzIF9Vbmljb2RlU3Vic2V0RW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGZpbmFsIGludCBfc3Vic2V0TWFzazsKCiAgY29uc3QgX1VuaWNvZGVTdWJzZXRFbmNvZGVyKHRoaXMuX3N1YnNldE1hc2spOwoKICAvLy8gQ29udmVydHMgdGhlIFtTdHJpbmddIGludG8gYSBsaXN0IG9mIGl0cyBjb2RlIHVuaXRzLgogIC8vLwogIC8vLyBJZiBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgcHJvdmlkZWQsIG9ubHkgdGhlIHN1YnN0cmluZwogIC8vLyBgc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kKWAgaXMgdXNlZCBhcyBpbnB1dCB0byB0aGUgY29udmVyc2lvbi4KICBVaW50OExpc3QgY29udmVydChTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIHZhciBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc3RyaW5nTGVuZ3RoKTsKICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIHZhciByZXN1bHQgPSBVaW50OExpc3QobGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGNvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQoc3RhcnQgKyBpKTsKICAgICAgaWYgKChjb2RlVW5pdCAmIH5fc3Vic2V0TWFzaykgIT0gMCkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgICAgIHN0cmluZywgInN0cmluZyIsICJDb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuIik7CiAgICAgIH0KICAgICAgcmVzdWx0W2ldID0gY29kZVVuaXQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIGNvbnZlcnRlciB3b3JrcyBtb3JlIGVmZmljaWVudGx5IGlmIHRoZSBnaXZlbiBbc2lua10gaXMgYQogIC8vLyBbQnl0ZUNvbnZlcnNpb25TaW5rXS4KICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICByZXR1cm4gX1VuaWNvZGVTdWJzZXRFbmNvZGVyU2luayhfc3Vic2V0TWFzaywKICAgICAgICBzaW5rIGlzIEJ5dGVDb252ZXJzaW9uU2luayA/IHNpbmsgOiBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKSk7CiAgfQoKICAvLyBPdmVycmlkZSB0aGUgYmFzZS1jbGFzcycgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxMaXN0PGludD4+IGJpbmQoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSA9PiBzdXBlci5iaW5kKHN0cmVhbSk7Cn0KCi8vLyBUaGlzIGNsYXNzIGNvbnZlcnRzIHN0cmluZ3Mgb2Ygb25seSBBU0NJSSBjaGFyYWN0ZXJzIHRvIGJ5dGVzLgpjbGFzcyBBc2NpaUVuY29kZXIgZXh0ZW5kcyBfVW5pY29kZVN1YnNldEVuY29kZXIgewogIGNvbnN0IEFzY2lpRW5jb2RlcigpIDogc3VwZXIoX2FzY2lpTWFzayk7Cn0KCi8vLyBUaGlzIGNsYXNzIGVuY29kZXMgY2h1bmtlZCBzdHJpbmdzIHRvIGJ5dGVzICh1bnNpZ25lZCA4LWJpdAovLy8gaW50ZWdlcnMpLgpjbGFzcyBfVW5pY29kZVN1YnNldEVuY29kZXJTaW5rIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICBmaW5hbCBCeXRlQ29udmVyc2lvblNpbmsgX3Npbms7CiAgZmluYWwgaW50IF9zdWJzZXRNYXNrOwoKICBfVW5pY29kZVN1YnNldEVuY29kZXJTaW5rKHRoaXMuX3N1YnNldE1hc2ssIHRoaXMuX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLmxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY29kZVVuaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKChjb2RlVW5pdCAmIH5fc3Vic2V0TWFzaykgIT0gMCkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICJTb3VyY2UgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXIgd2l0aCBjb2RlIHBvaW50OiAkY29kZVVuaXQuIik7CiAgICAgIH0KICAgIH0KICAgIF9zaW5rLmFkZChzb3VyY2UuY29kZVVuaXRzLnN1Ymxpc3Qoc3RhcnQsIGVuZCkpOwogICAgaWYgKGlzTGFzdCkgewogICAgICBjbG9zZSgpOwogICAgfQogIH0KfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgTGF0aW4tMSBieXRlcyAobGlzdHMgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpCi8vLyB0byBhIHN0cmluZy4KYWJzdHJhY3QgY2xhc3MgX1VuaWNvZGVTdWJzZXREZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgZmluYWwgYm9vbCBfYWxsb3dJbnZhbGlkOwogIGZpbmFsIGludCBfc3Vic2V0TWFzazsKCiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBkZWNvZGVyLgogIC8vLwogIC8vLyBUaGUgW19hbGxvd0ludmFsaWRdIGFyZ3VtZW50IGRlZmluZXMgaG93IFtjb252ZXJ0XSBkZWFscwogIC8vLyB3aXRoIGludmFsaWQgYnl0ZXMuCiAgLy8vCiAgLy8vIFRoZSBbX3N1YnNldE1hc2tdIGFyZ3VtZW50IGlzIGEgYml0IG1hc2sgdXNlZCB0byBkZWZpbmUgdGhlIHN1YnNldAogIC8vLyBvZiBVbmljb2RlIGJlaW5nIGRlY29kZWQuIFVzZSBbX0xBVElOMV9NQVNLXSBmb3IgTGF0aW4tMSAoOC1iaXQpIG9yCiAgLy8vIFtfYXNjaWlNYXNrXSBmb3IgQVNDSUkgKDctYml0KS4KICAvLy8KICAvLy8gSWYgW19hbGxvd0ludmFsaWRdIGlzIGB0cnVlYCwgW2NvbnZlcnRdIHJlcGxhY2VzIGludmFsaWQgYnl0ZXMgd2l0aCB0aGUKICAvLy8gVW5pY29kZSBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgYFUrRkZGRGAgKO+/vSkuCiAgLy8vIE90aGVyd2lzZSBpdCB0aHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICBjb25zdCBfVW5pY29kZVN1YnNldERlY29kZXIodGhpcy5fYWxsb3dJbnZhbGlkLCB0aGlzLl9zdWJzZXRNYXNrKTsKCiAgLy8vIENvbnZlcnRzIHRoZSBbYnl0ZXNdIChhIGxpc3Qgb2YgdW5zaWduZWQgNy0gb3IgOC1iaXQgaW50ZWdlcnMpIHRvIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIHN0cmluZy4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIHByb3ZpZGVkLCBvbmx5IHRoZSBzdWItbGlzdCBvZiBieXRlcyBmcm9tCiAgLy8vIGBzdGFydGAgdG8gYGVuZGAgKGBlbmRgIG5vdCBpbmNsdXNpdmUpIGlzIHVzZWQgYXMgaW5wdXQgdG8gdGhlIGNvbnZlcnNpb24uCiAgU3RyaW5nIGNvbnZlcnQoTGlzdDxpbnQ+IGJ5dGVzLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIHZhciBieXRlQ291bnQgPSBieXRlcy5sZW5ndGg7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBieXRlQ291bnQpOwogICAgZW5kID8/PSBieXRlQ291bnQ7CgogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGJ5dGUgPSBieXRlc1tpXTsKICAgICAgaWYgKChieXRlICYgfl9zdWJzZXRNYXNrKSAhPSAwKSB7CiAgICAgICAgaWYgKCFfYWxsb3dJbnZhbGlkKSB7CiAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgdmFsdWUgaW4gaW5wdXQ6ICRieXRlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfY29udmVydEludmFsaWQoYnl0ZXMsIHN0YXJ0LCBlbmQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZXMoYnl0ZXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgU3RyaW5nIF9jb252ZXJ0SW52YWxpZChMaXN0PGludD4gYnl0ZXMsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgdmFyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIHZhbHVlID0gYnl0ZXNbaV07CiAgICAgIGlmICgodmFsdWUgJiB+X3N1YnNldE1hc2spICE9IDApIHZhbHVlID0gMHhGRkZEOwogICAgICBidWZmZXIud3JpdGVDaGFyQ29kZSh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspOwoKICAvLyBPdmVycmlkZSB0aGUgYmFzZS1jbGFzcydzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08U3RyaW5nPiBiaW5kKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgPT4gc3VwZXIuYmluZChzdHJlYW0pOwp9CgpjbGFzcyBBc2NpaURlY29kZXIgZXh0ZW5kcyBfVW5pY29kZVN1YnNldERlY29kZXIgewogIGNvbnN0IEFzY2lpRGVjb2Rlcih7Ym9vbCBhbGxvd0ludmFsaWQgPSBmYWxzZX0pCiAgICAgIDogc3VwZXIoYWxsb3dJbnZhbGlkLCBfYXNjaWlNYXNrKTsKCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIGNvbnZlcnRlciB3b3JrcyBtb3JlIGVmZmljaWVudGx5IGlmIHRoZSBnaXZlbiBbc2lua10gaXMgYQogIC8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICBTdHJpbmdDb252ZXJzaW9uU2luayBzdHJpbmdTaW5rOwogICAgaWYgKHNpbmsgaXMgU3RyaW5nQ29udmVyc2lvblNpbmspIHsKICAgICAgc3RyaW5nU2luayA9IHNpbms7CiAgICB9IGVsc2UgewogICAgICBzdHJpbmdTaW5rID0gU3RyaW5nQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKTsKICAgIH0KICAgIC8vIFRPRE8obHJuKTogVXNlIGFzVXRmMTZTaW5rIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUuIEl0CiAgICAvLyB3b3JrcyBqdXN0IGFzIHdlbGwsIGlzIGxpa2VseSB0byBoYXZlIGxlc3MgZGVjb2Rpbmcgb3ZlcmhlYWQsCiAgICAvLyBhbmQgbWFrZSBhZGRpbmcgVStGRkZEIGVhc2llci4KICAgIC8vIEF0IHRoYXQgdGltZSwgbWVyZ2UgdGhpcyB3aXRoIF9MYXRpbjFEZWNvZGVyU2luazsKICAgIGlmIChfYWxsb3dJbnZhbGlkKSB7CiAgICAgIHJldHVybiBfRXJyb3JIYW5kbGluZ0FzY2lpRGVjb2RlclNpbmsoc3RyaW5nU2luay5hc1V0ZjhTaW5rKGZhbHNlKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX1NpbXBsZUFzY2lpRGVjb2RlclNpbmsoc3RyaW5nU2luayk7CiAgICB9CiAgfQp9CgpjbGFzcyBfRXJyb3JIYW5kbGluZ0FzY2lpRGVjb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICBCeXRlQ29udmVyc2lvblNpbmsgX3V0ZjhTaW5rOwogIF9FcnJvckhhbmRsaW5nQXNjaWlEZWNvZGVyU2luayh0aGlzLl91dGY4U2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfdXRmOFNpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBzb3VyY2UpIHsKICAgIGFkZFNsaWNlKHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGlmICgoc291cmNlW2ldICYgfl9hc2NpaU1hc2spICE9IDApIHsKICAgICAgICBpZiAoaSA+IHN0YXJ0KSBfdXRmOFNpbmsuYWRkU2xpY2Uoc291cmNlLCBzdGFydCwgaSwgZmFsc2UpOwogICAgICAgIC8vIEFkZCBVVEYtOCBlbmNvZGluZyBvZiBVK0ZGRkQuCiAgICAgICAgX3V0ZjhTaW5rLmFkZChjb25zdCA8aW50PlsweEVGLCAweEJGLCAweEJEXSk7CiAgICAgICAgc3RhcnQgPSBpICsgMTsKICAgICAgfQogICAgfQogICAgaWYgKHN0YXJ0IDwgZW5kKSB7CiAgICAgIF91dGY4U2luay5hZGRTbGljZShzb3VyY2UsIHN0YXJ0LCBlbmQsIGlzTGFzdCk7CiAgICB9IGVsc2UgaWYgKGlzTGFzdCkgewogICAgICBjbG9zZSgpOwogICAgfQogIH0KfQoKY2xhc3MgX1NpbXBsZUFzY2lpRGVjb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICBTaW5rIF9zaW5rOwogIF9TaW1wbGVBc2NpaURlY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBzb3VyY2UpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICgoc291cmNlW2ldICYgfl9hc2NpaU1hc2spICE9IDApIHsKICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIlNvdXJjZSBjb250YWlucyBub24tQVNDSUkgYnl0ZXMuIik7CiAgICAgIH0KICAgIH0KICAgIF9zaW5rLmFkZChTdHJpbmcuZnJvbUNoYXJDb2Rlcyhzb3VyY2UpKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgZmluYWwgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CiAgICBpZiAoc3RhcnQgPCBlbmQpIHsKICAgICAgaWYgKHN0YXJ0ICE9IDAgfHwgZW5kICE9IGxlbmd0aCkgewogICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zdWJsaXN0KHN0YXJ0LCBlbmQpOwogICAgICB9CiAgICAgIGFkZChzb3VyY2UpOwogICAgfQogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9Cn0KgSEATk48ARYBQwRIDwQODDJKTAgnAR0BOykkHAEnBkdFTktIBj9QASohAT4BSxwGUTEGURk4JBhEDUUGBAE0ASwvMQIBNj1DGQExATsGPEk/JkAeJCczLCM/CBwGEwQBIwZEHEYyTAQBPkcCAUMzLAIBQA9DIhkBOwEREwQBQjsoKywdTggGNRIPBgQCAUkRTBwZASIGPxoGSUomBk4yL0UBTBwGSVE+IjcXASgbKB5CCjMIBjQEAUAhKBw3IwYeBAEjBkQeQAE/RwIBMzIpASMGRB5BJSgZDTQGQEUmORlLDTIGBAIBRiAyAREXBAEfLwQBRTsoLEQpNhcIBhc2GQ8GBAIBPw4nARETBAEfLixDCAYtBAFFIjQXKS0IEwYZBAIBF2RhcnQ6Y29udmVydC9hc2NpaS5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2Jhc2U2NC5kYXJ0wAB63S8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIFtiYXNlNjRdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4KSBlbmNvZGVyIGFuZCBkZWNvZGVyLgovLy8KLy8vIEl0IGVuY29kZXMgdXNpbmcgdGhlIGRlZmF1bHQgYmFzZTY0IGFscGhhYmV0LAovLy8gZGVjb2RlcyB1c2luZyBib3RoIHRoZSBiYXNlNjQgYW5kIGJhc2U2NHVybCBhbHBoYWJldHMsCi8vLyBkb2VzIG5vdCBhbGxvdyBpbnZhbGlkIGNoYXJhY3RlcnMgYW5kIHJlcXVpcmVzIHBhZGRpbmcuCi8vLwovLy8gRXhhbXBsZXM6Ci8vLwovLy8gICAgIHZhciBlbmNvZGVkID0gYmFzZTY0LmVuY29kZShbMHg2MiwgMHg2YywgMHhjMywgMHhhNSwgMHg2MiwgMHhjMywgMHhhNiwKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzIsIDB4NjcsIDB4NzIsIDB4YzMsIDB4YjgsIDB4NjRdKTsKLy8vICAgICB2YXIgZGVjb2RlZCA9IGJhc2U2NC5kZWNvZGUoIlltekRwV0xEcG5KbmNzTzRaQW89Iik7Ci8vLwovLy8gVGhlIHRvcC1sZXZlbCBbYmFzZTY0RW5jb2RlXSBhbmQgW2Jhc2U2NERlY29kZV0gZnVuY3Rpb25zIG1heSBiZSB1c2VkCi8vLyBpbnN0ZWFkIGlmIGEgbG9jYWwgdmFyaWFibGUgc2hhZG93cyB0aGUgW2Jhc2U2NF0gY29uc3RhbnQuCmNvbnN0IEJhc2U2NENvZGVjIGJhc2U2NCA9IEJhc2U2NENvZGVjKCk7CgovLy8gQSBbYmFzZTY0dXJsXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgZW5jb2RlciBhbmQgZGVjb2Rlci4KLy8vCi8vLyBJdCBlbmNvZGVzIGFuZCBkZWNvZGVzIHVzaW5nIHRoZSBiYXNlNjR1cmwgYWxwaGFiZXQsCi8vLyBkZWNvZGVzIHVzaW5nIGJvdGggdGhlIGJhc2U2NCBhbmQgYmFzZTY0dXJsIGFscGhhYmV0cywKLy8vIGRvZXMgbm90IGFsbG93IGludmFsaWQgY2hhcmFjdGVycyBhbmQgcmVxdWlyZXMgcGFkZGluZy4KLy8vCi8vLyBFeGFtcGxlczoKLy8vCi8vLyAgICAgdmFyIGVuY29kZWQgPSBiYXNlNjRVcmwuZW5jb2RlKFsweDYyLCAweDZjLCAweGMzLCAweGE1LCAweDYyLCAweGMzLCAweGE2LAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MiwgMHg2NywgMHg3MiwgMHhjMywgMHhiOCwgMHg2NF0pOwovLy8gICAgIHZhciBkZWNvZGVkID0gYmFzZTY0VXJsLmRlY29kZSgiWW16RHBXTERwbkpuY3NPNFpBbz0iKTsKY29uc3QgQmFzZTY0Q29kZWMgYmFzZTY0VXJsID0gQmFzZTY0Q29kZWMudXJsU2FmZSgpOwoKLy8vIEVuY29kZXMgW2J5dGVzXSB1c2luZyBbYmFzZTY0XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgZW5jb2RpbmcuCi8vLwovLy8gU2hvcnRoYW5kIGZvciBbYmFzZTY0LmVuY29kZV0uIFVzZWZ1bCBpZiBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlIGdsb2JhbAovLy8gW2Jhc2U2NF0gY29uc3RhbnQuClN0cmluZyBiYXNlNjRFbmNvZGUoTGlzdDxpbnQ+IGJ5dGVzKSA9PiBiYXNlNjQuZW5jb2RlKGJ5dGVzKTsKCi8vLyBFbmNvZGVzIFtieXRlc10gdXNpbmcgW2Jhc2U2NHVybF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgpIGVuY29kaW5nLgovLy8KLy8vIFNob3J0aGFuZCBmb3IgW2Jhc2U2NHVybC5lbmNvZGVdLgpTdHJpbmcgYmFzZTY0VXJsRW5jb2RlKExpc3Q8aW50PiBieXRlcykgPT4gYmFzZTY0VXJsLmVuY29kZShieXRlcyk7CgovLy8gRGVjb2RlcyBbYmFzZTY0XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgb3IgW2Jhc2U2NHVybF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgpIGVuY29kZWQgYnl0ZXMuCi8vLwovLy8gU2hvcnRoYW5kIGZvciBbYmFzZTY0LmRlY29kZV0uIFVzZWZ1bCBpZiBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlCi8vLyBnbG9iYWwgW2Jhc2U2NF0gY29uc3RhbnQuClVpbnQ4TGlzdCBiYXNlNjREZWNvZGUoU3RyaW5nIHNvdXJjZSkgPT4gYmFzZTY0LmRlY29kZShzb3VyY2UpOwoKLy8gQ29uc3RhbnRzIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBjbGFzcy4KY29uc3QgaW50IF9wYWRkaW5nQ2hhciA9IDB4M2Q7IC8vICc9Jy4KCi8vLyBBIFtiYXNlNjRdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4KSBlbmNvZGVyIGFuZCBkZWNvZGVyLgovLy8KLy8vIEEgW0Jhc2U2NENvZGVjXSBhbGxvd3MgYmFzZTY0IGVuY29kaW5nIGJ5dGVzIGludG8gQVNDSUkgc3RyaW5ncyBhbmQKLy8vIGRlY29kaW5nIHZhbGlkIGVuY29kaW5ncyBiYWNrIHRvIGJ5dGVzLgovLy8KLy8vIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBoYW5kbGVzIHRoZSBzaW1wbGVzdCBSRkMgNDY0OCBiYXNlNjQgYW5kIGJhc2U2NHVybAovLy8gZW5jb2RpbmdzLgovLy8gSXQgZG9lcyBub3QgYWxsb3cgaW52YWxpZCBjaGFyYWN0ZXJzIHdoZW4gZGVjb2RpbmcgYW5kIGl0IHJlcXVpcmVzLAovLy8gYW5kIGdlbmVyYXRlcywgcGFkZGluZyBzbyB0aGF0IHRoZSBpbnB1dCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiBmb3VyCi8vLyBjaGFyYWN0ZXJzLgpjbGFzcyBCYXNlNjRDb2RlYyBleHRlbmRzIENvZGVjPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgZmluYWwgQmFzZTY0RW5jb2RlciBfZW5jb2RlcjsKICBjb25zdCBCYXNlNjRDb2RlYygpIDogX2VuY29kZXIgPSBjb25zdCBCYXNlNjRFbmNvZGVyKCk7CiAgY29uc3QgQmFzZTY0Q29kZWMudXJsU2FmZSgpIDogX2VuY29kZXIgPSBjb25zdCBCYXNlNjRFbmNvZGVyLnVybFNhZmUoKTsKCiAgQmFzZTY0RW5jb2RlciBnZXQgZW5jb2RlciA9PiBfZW5jb2RlcjsKCiAgQmFzZTY0RGVjb2RlciBnZXQgZGVjb2RlciA9PiBjb25zdCBCYXNlNjREZWNvZGVyKCk7CgogIC8vLyBEZWNvZGVzIFtlbmNvZGVkXS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGlzIGRlY29kZWQgYXMgaWYgYnkgYGRlY29kZXIuY29udmVydGAuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBbVWludDhMaXN0XSBjb250YWlucyBleGFjdGx5IHRoZSBkZWNvZGVkIGJ5dGVzLAogIC8vLyBzbyB0aGUgW1VpbnQ4TGlzdC5sZW5ndGhdIGlzIHByZWNpc2VseSB0aGUgbnVtYmVyIG9mIGRlY29kZWQgYnl0ZXMuCiAgLy8vIFRoZSBbVWludDhMaXN0LmJ1ZmZlcl0gbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBkZWNvZGVkIGJ5dGVzLgogIFVpbnQ4TGlzdCBkZWNvZGUoU3RyaW5nIGVuY29kZWQpID0+IGRlY29kZXIuY29udmVydChlbmNvZGVkKTsKCiAgLy8vIFZhbGlkYXRlcyBhbmQgbm9ybWFsaXplcyB0aGUgYmFzZTY0IGVuY29kZWQgZGF0YSBpbiBbc291cmNlXS4KICAvLy8KICAvLy8gT25seSBhY3RzIG9uIHRoZSBzdWJzdHJpbmcgZnJvbSBbc3RhcnRdIHRvIFtlbmRdLCB3aXRoIFtlbmRdCiAgLy8vIGRlZmF1bHRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgogIC8vLwogIC8vLyBOb3JtYWxpemF0aW9uIHdpbGw6CiAgLy8vICogVW5lc2NhcGUgYW55IGAlYC1lc2NhcGVzLgogIC8vLyAqIE9ubHkgYWxsb3cgdmFsaWQgY2hhcmFjdGVycyAoYEFgLWBaYCwgYGFgLWB6YCwgYDBgLWA5YCwgYC9gIGFuZCBgK2ApLgogIC8vLyAqIE5vcm1hbGl6ZSBhIGBfYCBvciBgLWAgY2hhcmFjdGVyIHRvIGAvYCBvciBgK2AuCiAgLy8vICogVmFsaWRhdGUgdGhhdCBleGlzdGluZyBwYWRkaW5nICh0cmFpbGluZyBgPWAgY2hhcmFjdGVycykgaXMgY29ycmVjdC4KICAvLy8gKiBJZiBubyBwYWRkaW5nIGV4aXN0cywgYWRkIGNvcnJlY3QgcGFkZGluZyBpZiBuZWNlc3NhcnkgYW5kIHBvc3NpYmxlLgogIC8vLyAqIFZhbGlkYXRlIHRoYXQgdGhlIGxlbmd0aCBpcyBjb3JyZWN0IChhIG11bHRpcGxlIG9mIGZvdXIpLgogIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIHNvdXJjZSwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGNvbnN0IHBlcmNlbnQgPSAweDI1OwogICAgY29uc3QgZXF1YWxzID0gMHgzZDsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICB2YXIgc2xpY2VTdGFydCA9IHN0YXJ0OwogICAgdmFyIGFscGhhYmV0ID0gX0Jhc2U2NEVuY29kZXIuX2Jhc2U2NEFscGhhYmV0OwogICAgdmFyIGludmVyc2VBbHBoYWJldCA9IF9CYXNlNjREZWNvZGVyLl9pbnZlcnNlQWxwaGFiZXQ7CiAgICB2YXIgZmlyc3RQYWRkaW5nID0gLTE7CiAgICB2YXIgZmlyc3RQYWRkaW5nU291cmNlSW5kZXggPSAtMTsKICAgIHZhciBwYWRkaW5nQ291bnQgPSAwOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOykgewogICAgICB2YXIgc2xpY2VFbmQgPSBpOwogICAgICB2YXIgY2hhciA9IHNvdXJjZS5jb2RlVW5pdEF0KGkrKyk7CiAgICAgIHZhciBvcmlnaW5hbENoYXIgPSBjaGFyOwogICAgICAvLyBOb3JtYWxpemUgY2hhciwga2VlcCBvcmlnaW5hbENoYXIgdG8gc2VlIGlmIGl0IG1hdGNoZXMgdGhlIHNvdXJjZS4KICAgICAgaWYgKGNoYXIgPT0gcGVyY2VudCkgewogICAgICAgIGlmIChpICsgMiA8PSBlbmQpIHsKICAgICAgICAgIGNoYXIgPSBwYXJzZUhleEJ5dGUoc291cmNlLCBpKTsgLy8gTWF5IGJlIG5lZ2F0aXZlLgogICAgICAgICAgaSArPSAyOwogICAgICAgICAgLy8gV2Uga25vdyB0aGF0ICUyNSBpc24ndCB2YWxpZCwgYnV0IG91ciB0YWJsZSBjb25zaWRlcnMgaXQKICAgICAgICAgIC8vIGEgcG90ZW50aWFsIHBhZGRpbmcgc3RhcnQsIHNvIHNraXAgdGhlIGNoZWNrcy4KICAgICAgICAgIGlmIChjaGFyID09IHBlcmNlbnQpIGNoYXIgPSAtMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gQW4gaW52YWxpZCBIRVggZXNjYXBlICh0b28gc2hvcnQpLgogICAgICAgICAgLy8gSnVzdCBza2lwIHBhc3QgdGhlIGhhbmRsaW5nIGFuZCByZWFjaCB0aGUgdGhyb3cgYmVsb3cuCiAgICAgICAgICBjaGFyID0gLTE7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIElmIGNoYXIgaXMgbmVnYXRpdmUgaGVyZSwgaGV4LWRlY29kaW5nIGZhaWxlZCBpbiBzb21lIHdheS4KICAgICAgaWYgKDAgPD0gY2hhciAmJiBjaGFyIDw9IDEyNykgewogICAgICAgIHZhciB2YWx1ZSA9IGludmVyc2VBbHBoYWJldFtjaGFyXTsKICAgICAgICBpZiAodmFsdWUgPj0gMCkgewogICAgICAgICAgY2hhciA9IGFscGhhYmV0LmNvZGVVbml0QXQodmFsdWUpOwogICAgICAgICAgaWYgKGNoYXIgPT0gb3JpZ2luYWxDaGFyKSBjb250aW51ZTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09IF9CYXNlNjREZWNvZGVyLl9wYWRkaW5nKSB7CiAgICAgICAgICAvLyBXZSBoYXZlIHJ1bGVkIG91dCBwZXJjZW50LCBzbyBjaGFyIGlzICc9Jy4KICAgICAgICAgIGlmIChmaXJzdFBhZGRpbmcgPCAwKSB7CiAgICAgICAgICAgIC8vIE1hcmsgcG9zaXRpb24gaW4gbm9ybWFsaXplZCBvdXRwdXQgd2hlcmUgcGFkZGluZyBvY2N1cnMuCiAgICAgICAgICAgIGZpcnN0UGFkZGluZyA9IChidWZmZXI/Lmxlbmd0aCA/PyAwKSArIChzbGljZUVuZCAtIHNsaWNlU3RhcnQpOwogICAgICAgICAgICBmaXJzdFBhZGRpbmdTb3VyY2VJbmRleCA9IHNsaWNlRW5kOwogICAgICAgICAgfQogICAgICAgICAgcGFkZGluZ0NvdW50Kys7CiAgICAgICAgICAvLyBJdCBjb3VsZCBoYXZlIGJlZW4gYW4gZXNjYXBlZCBlcXVhbHMgKCUzRCkuCiAgICAgICAgICBpZiAob3JpZ2luYWxDaGFyID09IGVxdWFscykgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSAhPSBfQmFzZTY0RGVjb2Rlci5faW52YWxpZCkgewogICAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgIGJ1ZmZlci53cml0ZShzb3VyY2Uuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIHNsaWNlRW5kKSk7CiAgICAgICAgICBidWZmZXIud3JpdGVDaGFyQ29kZShjaGFyKTsKICAgICAgICAgIHNsaWNlU3RhcnQgPSBpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBiYXNlNjQgZGF0YSIsIHNvdXJjZSwgc2xpY2VFbmQpOwogICAgfQogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSB7CiAgICAgIGJ1ZmZlci53cml0ZShzb3VyY2Uuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIGVuZCkpOwogICAgICBpZiAoZmlyc3RQYWRkaW5nID49IDApIHsKICAgICAgICAvLyBUaGVyZSB3YXMgcGFkZGluZyBpbiB0aGUgc291cmNlLiBDaGVjayB0aGF0IGl0IGlzIHZhbGlkOgogICAgICAgIC8vICogcmVzdWx0IGxlbmd0aCBhIG11bHRpcGxlIG9mIGZvdXIKICAgICAgICAvLyAqIG9uZSBvciB0d28gcGFkZGluZyBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQuCiAgICAgICAgX2NoZWNrUGFkZGluZyhzb3VyY2UsIGZpcnN0UGFkZGluZ1NvdXJjZUluZGV4LCBlbmQsIGZpcnN0UGFkZGluZywKICAgICAgICAgICAgcGFkZGluZ0NvdW50LCBidWZmZXIubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBMZW5ndGggb2YgbGFzdCBjaHVuayAoMS00IGNoYXJzKSBpbiB0aGUgZW5jb2RpbmcuCiAgICAgICAgdmFyIGVuZExlbmd0aCA9ICgoYnVmZmVyLmxlbmd0aCAtIDEpICUgNCkgKyAxOwogICAgICAgIGlmIChlbmRMZW5ndGggPT0gMSkgewogICAgICAgICAgLy8gVGhlIGRhdGEgbXVzdCBoYXZlIGxlbmd0aCAwLCAyIG9yIDMgbW9kdWxvIDQuCiAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgYmFzZTY0IGVuY29kaW5nIGxlbmd0aCAiLCBzb3VyY2UsIGVuZCk7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChlbmRMZW5ndGggPCA0KSB7CiAgICAgICAgICBidWZmZXIud3JpdGUoIj0iKTsKICAgICAgICAgIGVuZExlbmd0aCsrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gc291cmNlLnJlcGxhY2VSYW5nZShzdGFydCwgZW5kLCBidWZmZXIudG9TdHJpbmcoKSk7CiAgICB9CiAgICAvLyBPcmlnaW5hbCB3YXMgYWxyZWFkeSBub3JtYWxpemVkLCBvbmx5IGNoZWNrIHBhZGRpbmcuCiAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAoZmlyc3RQYWRkaW5nID49IDApIHsKICAgICAgX2NoZWNrUGFkZGluZyhzb3VyY2UsIGZpcnN0UGFkZGluZ1NvdXJjZUluZGV4LCBlbmQsIGZpcnN0UGFkZGluZywKICAgICAgICAgIHBhZGRpbmdDb3VudCwgbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE5vIHBhZGRpbmcgZ2l2ZW4sIHNvIGFkZCBzb21lIGlmIG5lZWRlZCBpdC4KICAgICAgdmFyIGVuZExlbmd0aCA9IGxlbmd0aCAlIDQ7CiAgICAgIGlmIChlbmRMZW5ndGggPT0gMSkgewogICAgICAgIC8vIFRoZSBkYXRhIG11c3QgaGF2ZSBsZW5ndGggMCwgMiBvciAzIG1vZHVsbyA0LgogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBiYXNlNjQgZW5jb2RpbmcgbGVuZ3RoICIsIHNvdXJjZSwgZW5kKTsKICAgICAgfQogICAgICBpZiAoZW5kTGVuZ3RoID4gMSkgewogICAgICAgIC8vIFRoZXJlIGlzIG5vICJpbnNlcnRBdCIgb24gU3RyaW5nLCBidXQgdGhpcyB3b3JrcyBhcyB3ZWxsLgogICAgICAgIHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlUmFuZ2UoZW5kLCBlbmQsIChlbmRMZW5ndGggPT0gMikgPyAiPT0iIDogIj0iKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNvdXJjZTsKICB9CgogIHN0YXRpYyB2b2lkIF9jaGVja1BhZGRpbmcoU3RyaW5nIHNvdXJjZSwgaW50IHNvdXJjZUluZGV4LCBpbnQgc291cmNlRW5kLAogICAgICBpbnQgZmlyc3RQYWRkaW5nLCBpbnQgcGFkZGluZ0NvdW50LCBpbnQgbGVuZ3RoKSB7CiAgICBpZiAobGVuZ3RoICUgNCAhPSAwKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCBwYWRkZWQgbGVuZ3RoIG11c3QgYmUgbXVsdGlwbGUgb2YgZm91ciwgIgogICAgICAgICAgImlzICRsZW5ndGgiLAogICAgICAgICAgc291cmNlLAogICAgICAgICAgc291cmNlRW5kKTsKICAgIH0KICAgIGlmIChmaXJzdFBhZGRpbmcgKyBwYWRkaW5nQ291bnQgIT0gbGVuZ3RoKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCAnPScgbm90IGF0IHRoZSBlbmQiLCBzb3VyY2UsIHNvdXJjZUluZGV4KTsKICAgIH0KICAgIGlmIChwYWRkaW5nQ291bnQgPiAyKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCBtb3JlIHRoYW4gdHdvICc9JyBjaGFyYWN0ZXJzIiwKICAgICAgICAgIHNvdXJjZSwKICAgICAgICAgIHNvdXJjZUluZGV4KTsKICAgIH0KICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBFbmNvZGVyCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIEJhc2U2NCBhbmQgYmFzZTY0dXJsIGVuY29kaW5nIGNvbnZlcnRlci4KLy8vCi8vLyBFbmNvZGVzIGxpc3RzIG9mIGJ5dGVzIHVzaW5nIGJhc2U2NCBvciBiYXNlNjR1cmwgZW5jb2RpbmcuCi8vLwovLy8gVGhlIHJlc3VsdHMgYXJlIEFTQ0lJIHN0cmluZ3MgdXNpbmcgYSByZXN0cmljdGVkIGFscGhhYmV0LgpjbGFzcyBCYXNlNjRFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgZmluYWwgYm9vbCBfdXJsU2FmZTsKCiAgY29uc3QgQmFzZTY0RW5jb2RlcigpIDogX3VybFNhZmUgPSBmYWxzZTsKICBjb25zdCBCYXNlNjRFbmNvZGVyLnVybFNhZmUoKSA6IF91cmxTYWZlID0gdHJ1ZTsKCiAgU3RyaW5nIGNvbnZlcnQoTGlzdDxpbnQ+IGlucHV0KSB7CiAgICBpZiAoaW5wdXQuaXNFbXB0eSkgcmV0dXJuICIiOwogICAgdmFyIGVuY29kZXIgPSBfQmFzZTY0RW5jb2RlcihfdXJsU2FmZSk7CiAgICB2YXIgYnVmZmVyID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQsIDAsIGlucHV0Lmxlbmd0aCwgdHJ1ZSk7CiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZXMoYnVmZmVyKTsKICB9CgogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICBpZiAoc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luaykgewogICAgICByZXR1cm4gX1V0ZjhCYXNlNjRFbmNvZGVyU2luayhzaW5rLmFzVXRmOFNpbmsoZmFsc2UpLCBfdXJsU2FmZSk7CiAgICB9CiAgICByZXR1cm4gX0FzY2lpQmFzZTY0RW5jb2RlclNpbmsoc2luaywgX3VybFNhZmUpOwogIH0KfQoKLy8vIEhlbHBlciBjbGFzcyBmb3IgZW5jb2RpbmcgYnl0ZXMgdG8gYmFzZTY0LgpjbGFzcyBfQmFzZTY0RW5jb2RlciB7CiAgLy8vIFRoZSBSRkMgNDY0OCBiYXNlNjQgZW5jb2RpbmcgYWxwaGFiZXQuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBfYmFzZTY0QWxwaGFiZXQgPQogICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CgogIC8vLyBUaGUgUkZDIDQ2NDggYmFzZTY0dXJsIGVuY29kaW5nIGFscGhhYmV0LgogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2Jhc2U2NFVybEFscGhhYmV0ID0KICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8iOwoKICAvLy8gU2hpZnQtY291bnQgdG8gZXh0cmFjdCB0aGUgdmFsdWVzIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgY29uc3QgaW50IF92YWx1ZVNoaWZ0ID0gMjsKCiAgLy8vIE1hc2sgdG8gZXh0cmFjdCB0aGUgY291bnQgdmFsdWUgc3RvcmVkIGluIFtfc3RhdGVdLgogIHN0YXRpYyBjb25zdCBpbnQgX2NvdW50TWFzayA9IDM7CgogIHN0YXRpYyBjb25zdCBpbnQgX3NpeEJpdE1hc2sgPSAweDNGOwoKICAvLy8gSW50ZXJtZWRpYXRlIHN0YXRlIGJldHdlZW4gY2h1bmtzLgogIC8vLwogIC8vLyBFbmNvZGluZyBoYW5kbGVzIHRocmVlIGJ5dGVzIGF0IGEgdGltZS4KICAvLy8gSWYgZmV3ZXIgdGhhbiB0aHJlZSBieXRlcyBoYXMgYmVlbiBzZWVuLCB0aGlzIHZhbHVlIGVuY29kZXMKICAvLy8gdGhlIG51bWJlciBvZiBieXRlcyBzZWVuICgwLCAxIG9yIDIpIGFuZCB0aGVpciB2YWx1ZXMuCiAgaW50IF9zdGF0ZSA9IDA7CgogIC8vLyBBbHBoYWJldCB1c2VkIGZvciBlbmNvZGluZy4KICBmaW5hbCBTdHJpbmcgX2FscGhhYmV0OwoKICBfQmFzZTY0RW5jb2Rlcihib29sIHVybFNhZmUpCiAgICAgIDogX2FscGhhYmV0ID0gdXJsU2FmZSA/IF9iYXNlNjRVcmxBbHBoYWJldCA6IF9iYXNlNjRBbHBoYWJldDsKCiAgLy8vIEVuY29kZSBjb3VudCBhbmQgYml0cyBpbnRvIGEgdmFsdWUgdG8gYmUgc3RvcmVkIGluIFtfc3RhdGVdLgogIHN0YXRpYyBpbnQgX2VuY29kZVN0YXRlKGludCBjb3VudCwgaW50IGJpdHMpIHsKICAgIGFzc2VydChjb3VudCA8PSBfY291bnRNYXNrKTsKICAgIHJldHVybiBiaXRzIDw8IF92YWx1ZVNoaWZ0IHwgY291bnQ7CiAgfQoKICAvLy8gRXh0cmFjdCBiaXRzIGZyb20gZW5jb2RlZCBzdGF0ZS4KICBzdGF0aWMgaW50IF9zdGF0ZUJpdHMoaW50IHN0YXRlKSA9PiBzdGF0ZSA+PiBfdmFsdWVTaGlmdDsKCiAgLy8vIEV4dHJhY3QgY291bnQgZnJvbSBlbmNvZGVkIHN0YXRlLgogIHN0YXRpYyBpbnQgX3N0YXRlQ291bnQoaW50IHN0YXRlKSA9PiBzdGF0ZSAmIF9jb3VudE1hc2s7CgogIC8vLyBDcmVhdGUgYSBbVWludDhMaXN0XSB3aXRoIHRoZSBwcm92aWRlZCBsZW5ndGguCiAgVWludDhMaXN0IGNyZWF0ZUJ1ZmZlcihpbnQgYnVmZmVyTGVuZ3RoKSA9PiBVaW50OExpc3QoYnVmZmVyTGVuZ3RoKTsKCiAgLy8vIEVuY29kZSBbYnl0ZXNdIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBhbmQgdGhlIGJpdHMgaW4gW19zdGF0ZV0uCiAgLy8vCiAgLy8vIFJldHVybnMgYSBbVWludDhMaXN0XSBvZiB0aGUgQVNDSUkgY29kZXMgb2YgdGhlIGVuY29kZWQgZGF0YS4KICAvLy8KICAvLy8gSWYgdGhlIGlucHV0LCBpbmNsdWRpbmcgbGVmdCBvdmVyIFtfc3RhdGVdIGZyb20gZWFybGllciBlbmNvZGluZ3MsCiAgLy8vIGFyZSBub3QgYSBtdWx0aXBsZSBvZiB0aHJlZSBieXRlcywgdGhlbiB0aGUgcGFydGlhbCBzdGF0ZSBpcyBzdG9yZWQKICAvLy8gYmFjayBpbnRvIFtfc3RhdGVdLgogIC8vLyBJZiBbaXNMYXN0XSBpcyB0cnVlLCBwYXJ0aWFsIHN0YXRlIGlzIGVuY29kZWQgaW4gdGhlIG91dHB1dCBpbnN0ZWFkLAogIC8vLyB3aXRoIHRoZSBuZWNlc3NhcnkgcGFkZGluZy4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gb3V0cHV0LgogIFVpbnQ4TGlzdCBlbmNvZGUoTGlzdDxpbnQ+IGJ5dGVzLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBhc3NlcnQoMCA8PSBzdGFydCk7CiAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKICAgIGFzc2VydChieXRlcyA9PSBudWxsIHx8IGVuZCA8PSBieXRlcy5sZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwoKICAgIHZhciBjb3VudCA9IF9zdGF0ZUNvdW50KF9zdGF0ZSk7CiAgICB2YXIgYnl0ZUNvdW50ID0gKGNvdW50ICsgbGVuZ3RoKTsKICAgIHZhciBmdWxsQ2h1bmtzID0gYnl0ZUNvdW50IH4vIDM7CiAgICB2YXIgcGFydGlhbENodW5rTGVuZ3RoID0gYnl0ZUNvdW50IC0gZnVsbENodW5rcyAqIDM7CiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gZnVsbENodW5rcyAqIDQ7CiAgICBpZiAoaXNMYXN0ICYmIHBhcnRpYWxDaHVua0xlbmd0aCA+IDApIHsKICAgICAgYnVmZmVyTGVuZ3RoICs9IDQ7IC8vIFJvb20gZm9yIHBhZGRpbmcuCiAgICB9CiAgICB2YXIgb3V0cHV0ID0gY3JlYXRlQnVmZmVyKGJ1ZmZlckxlbmd0aCk7CiAgICBfc3RhdGUgPQogICAgICAgIGVuY29kZUNodW5rKF9hbHBoYWJldCwgYnl0ZXMsIHN0YXJ0LCBlbmQsIGlzTGFzdCwgb3V0cHV0LCAwLCBfc3RhdGUpOwogICAgaWYgKGJ1ZmZlckxlbmd0aCA+IDApIHJldHVybiBvdXRwdXQ7CiAgICAvLyBJZiB0aGUgaW5wdXQgcGx1cyB0aGUgZGF0YSBpbiBzdGF0ZSBpcyBzdGlsbCBsZXNzIHRoYW4gdGhyZWUgYnl0ZXMsCiAgICAvLyB0aGVyZSBtYXkgbm90IGJlIGFueSBvdXRwdXQuCiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBpbnQgZW5jb2RlQ2h1bmsoU3RyaW5nIGFscGhhYmV0LCBMaXN0PGludD4gYnl0ZXMsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgYm9vbCBpc0xhc3QsIFVpbnQ4TGlzdCBvdXRwdXQsIGludCBvdXRwdXRJbmRleCwgaW50IHN0YXRlKSB7CiAgICB2YXIgYml0cyA9IF9zdGF0ZUJpdHMoc3RhdGUpOwogICAgLy8gQ291bnQgbnVtYmVyIG9mIG1pc3NpbmcgYnl0ZXMgaW4gdGhyZWUtYnl0ZSBjaHVuay4KICAgIHZhciBleHBlY3RlZENoYXJzID0gMyAtIF9zdGF0ZUNvdW50KHN0YXRlKTsKCiAgICAvLyBUaGUgaW5wdXQgbXVzdCBiZSBhIGxpc3Qgb2YgYnl0ZXMgKGludGVnZXJzIGluIHRoZSByYW5nZSAwLi4yNTUpLgogICAgLy8gVGhlIHZhbHVlIG9mIGBieXRlT3JgIHdpbGwgYmUgdGhlIGJpdHdpc2Ugb3Igb2YgYWxsIHRoZSB2YWx1ZXMgaW4KICAgIC8vIGBieXRlc2AgYW5kIGEgbGF0ZXIgY2hlY2sgd2lsbCB2YWxpZGF0ZSB0aGF0IHRoZXkgd2VyZSBhbGwgdmFsaWQgYnl0ZXMuCiAgICB2YXIgYnl0ZU9yID0gMDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBieXRlID0gYnl0ZXNbaV07CiAgICAgIGJ5dGVPciB8PSBieXRlOwogICAgICBiaXRzID0gKChiaXRzIDw8IDgpIHwgYnl0ZSkgJiAweEZGRkZGRjsgLy8gTmV2ZXIgc3RvcmUgbW9yZSB0aGFuIDI0IGJpdHMuCiAgICAgIGV4cGVjdGVkQ2hhcnMtLTsKICAgICAgaWYgKGV4cGVjdGVkQ2hhcnMgPT0gMCkgewogICAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gMTgpICYgX3NpeEJpdE1hc2spOwogICAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gMTIpICYgX3NpeEJpdE1hc2spOwogICAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gNikgJiBfc2l4Qml0TWFzayk7CiAgICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdChiaXRzICYgX3NpeEJpdE1hc2spOwogICAgICAgIGV4cGVjdGVkQ2hhcnMgPSAzOwogICAgICAgIGJpdHMgPSAwOwogICAgICB9CiAgICB9CiAgICBpZiAoYnl0ZU9yID49IDAgJiYgYnl0ZU9yIDw9IDI1NSkgewogICAgICBpZiAoaXNMYXN0ICYmIGV4cGVjdGVkQ2hhcnMgPCAzKSB7CiAgICAgICAgd3JpdGVGaW5hbENodW5rKGFscGhhYmV0LCBvdXRwdXQsIG91dHB1dEluZGV4LCAzIC0gZXhwZWN0ZWRDaGFycywgYml0cyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgICAgcmV0dXJuIF9lbmNvZGVTdGF0ZSgzIC0gZXhwZWN0ZWRDaGFycywgYml0cyk7CiAgICB9CgogICAgLy8gVGhlcmUgd2FzIGFuIGludmFsaWQgYnl0ZSB2YWx1ZSBzb21ld2hlcmUgaW4gdGhlIGlucHV0IC0gZmluZCBpdCEKICAgIHZhciBpID0gc3RhcnQ7CiAgICB3aGlsZSAoaSA8IGVuZCkgewogICAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBpZiAoYnl0ZSA8IDAgfHwgYnl0ZSA+IDI1NSkgYnJlYWs7CiAgICAgIGkrKzsKICAgIH0KICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgYnl0ZXMsICJOb3QgYSBieXRlIHZhbHVlIGF0IGluZGV4ICRpOiAweCR7Ynl0ZXNbaV0udG9SYWRpeFN0cmluZygxNil9Iik7CiAgfQoKICAvLy8gV3JpdGVzIGEgZmluYWwgZW5jb2RlZCBmb3VyLWNoYXJhY3RlciBjaHVuay4KICAvLy8KICAvLy8gT25seSB1c2VkIHdoZW4gdGhlIFtfc3RhdGVdIGNvbnRhaW5zIGEgcGFydGlhbCAoMSBvciAyIGJ5dGUpCiAgLy8vIGlucHV0LgogIHN0YXRpYyB2b2lkIHdyaXRlRmluYWxDaHVuaygKICAgICAgU3RyaW5nIGFscGhhYmV0LCBVaW50OExpc3Qgb3V0cHV0LCBpbnQgb3V0cHV0SW5kZXgsIGludCBjb3VudCwgaW50IGJpdHMpIHsKICAgIGFzc2VydChjb3VudCA+IDApOwogICAgaWYgKGNvdW50ID09IDEpIHsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA+PiAyKSAmIF9zaXhCaXRNYXNrKTsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA8PCA0KSAmIF9zaXhCaXRNYXNrKTsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gX3BhZGRpbmdDaGFyOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBfcGFkZGluZ0NoYXI7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoY291bnQgPT0gMik7CiAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gMTApICYgX3NpeEJpdE1hc2spOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzID4+IDQpICYgX3NpeEJpdE1hc2spOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzIDw8IDIpICYgX3NpeEJpdE1hc2spOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBfcGFkZGluZ0NoYXI7CiAgICB9CiAgfQp9CgpjbGFzcyBfQnVmZmVyQ2FjaGluZ0Jhc2U2NEVuY29kZXIgZXh0ZW5kcyBfQmFzZTY0RW5jb2RlciB7CiAgLy8vIFJldXNlZCBidWZmZXIuCiAgLy8vCiAgLy8vIFdoZW4gdGhlIGJ1ZmZlciBpc24ndCByZWxlYXNlZCB0byB0aGUgc2luaywgb25seSB1c2VkIHRvIGNyZWF0ZSBhbm90aGVyCiAgLy8vIHZhbHVlIChhIHN0cmluZyksIHRoZSBidWZmZXIgY2FuIGJlIHJldXNlZCBiZXR3ZWVuIGNodW5rcy4KICBVaW50OExpc3QgYnVmZmVyQ2FjaGU7CgogIF9CdWZmZXJDYWNoaW5nQmFzZTY0RW5jb2Rlcihib29sIHVybFNhZmUpIDogc3VwZXIodXJsU2FmZSk7CgogIFVpbnQ4TGlzdCBjcmVhdGVCdWZmZXIoaW50IGJ1ZmZlckxlbmd0aCkgewogICAgaWYgKGJ1ZmZlckNhY2hlID09IG51bGwgfHwgYnVmZmVyQ2FjaGUubGVuZ3RoIDwgYnVmZmVyTGVuZ3RoKSB7CiAgICAgIGJ1ZmZlckNhY2hlID0gVWludDhMaXN0KGJ1ZmZlckxlbmd0aCk7CiAgICB9CiAgICAvLyBSZXR1cm4gYSB2aWV3IG9mIHRoZSBidWZmZXIsIHNvIGl0IGhhcyB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KICAgIHJldHVybiBVaW50OExpc3QudmlldyhidWZmZXJDYWNoZS5idWZmZXIsIDAsIGJ1ZmZlckxlbmd0aCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfQmFzZTY0RW5jb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICB2b2lkIGFkZChMaXN0PGludD4gc291cmNlKSB7CiAgICBfYWRkKHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9hZGQobnVsbCwgMCwgMCwgdHJ1ZSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChlbmQgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJlbmQiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgX2FkZChzb3VyY2UsIHN0YXJ0LCBlbmQsIGlzTGFzdCk7CiAgfQoKICB2b2lkIF9hZGQoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCk7Cn0KCmNsYXNzIF9Bc2NpaUJhc2U2NEVuY29kZXJTaW5rIGV4dGVuZHMgX0Jhc2U2NEVuY29kZXJTaW5rIHsKICBmaW5hbCBTaW5rPFN0cmluZz4gX3Npbms7CiAgZmluYWwgX0Jhc2U2NEVuY29kZXIgX2VuY29kZXI7CgogIF9Bc2NpaUJhc2U2NEVuY29kZXJTaW5rKHRoaXMuX3NpbmssIGJvb2wgdXJsU2FmZSkKICAgICAgOiBfZW5jb2RlciA9IF9CdWZmZXJDYWNoaW5nQmFzZTY0RW5jb2Rlcih1cmxTYWZlKTsKCiAgdm9pZCBfYWRkKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIHZhciBidWZmZXIgPSBfZW5jb2Rlci5lbmNvZGUoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSB7CiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlcyhidWZmZXIpOwogICAgICBfc2luay5hZGQoc3RyaW5nKTsKICAgIH0KICAgIGlmIChpc0xhc3QpIHsKICAgICAgX3NpbmsuY2xvc2UoKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9VdGY4QmFzZTY0RW5jb2RlclNpbmsgZXh0ZW5kcyBfQmFzZTY0RW5jb2RlclNpbmsgewogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfc2luazsKICBmaW5hbCBfQmFzZTY0RW5jb2RlciBfZW5jb2RlcjsKCiAgX1V0ZjhCYXNlNjRFbmNvZGVyU2luayh0aGlzLl9zaW5rLCBib29sIHVybFNhZmUpCiAgICAgIDogX2VuY29kZXIgPSBfQmFzZTY0RW5jb2Rlcih1cmxTYWZlKTsKCiAgdm9pZCBfYWRkKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIHZhciBidWZmZXIgPSBfZW5jb2Rlci5lbmNvZGUoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSB7CiAgICAgIF9zaW5rLmFkZFNsaWNlKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCwgaXNMYXN0KTsKICAgIH0KICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBEZWNvZGVyCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIERlY29kZXIgZm9yIGJhc2U2NCBlbmNvZGVkIGRhdGEuCi8vLwovLy8gVGhpcyBkZWNvZGVyIGFjY2VwdHMgYm90aCBiYXNlNjQgYW5kIGJhc2U2NHVybCAoInVybC1zYWZlIikgZW5jb2RpbmdzLgovLy8KLy8vIFRoZSBlbmNvZGluZyBpcyByZXF1aXJlZCB0byBiZSBwcm9wZXJseSBwYWRkZWQuCmNsYXNzIEJhc2U2NERlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8U3RyaW5nLCBMaXN0PGludD4+IHsKICBjb25zdCBCYXNlNjREZWNvZGVyKCk7CgogIC8vLyBEZWNvZGVzIHRoZSBjaGFyYWN0ZXJzIG9mIFtpbnB1dF0gZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGFzIGJhc2U2NC4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgc3RhcnQgb2YgW2lucHV0XS4KICAvLy8gSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIGVuZCBvZiBbaW5wdXRdLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgW1VpbnQ4TGlzdF0gY29udGFpbnMgZXhhY3RseSB0aGUgZGVjb2RlZCBieXRlcywKICAvLy8gc28gdGhlIFtVaW50OExpc3QubGVuZ3RoXSBpcyBwcmVjaXNlbHkgdGhlIG51bWJlciBvZiBkZWNvZGVkIGJ5dGVzLgogIC8vLyBUaGUgW1VpbnQ4TGlzdC5idWZmZXJdIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgZGVjb2RlZCBieXRlcy4KICBVaW50OExpc3QgY29udmVydChTdHJpbmcgaW5wdXQsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgaW5wdXQubGVuZ3RoKTsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiBVaW50OExpc3QoMCk7CiAgICB2YXIgZGVjb2RlciA9IF9CYXNlNjREZWNvZGVyKCk7CiAgICB2YXIgYnVmZmVyID0gZGVjb2Rlci5kZWNvZGUoaW5wdXQsIHN0YXJ0LCBlbmQpOwogICAgZGVjb2Rlci5jbG9zZShpbnB1dCwgZW5kKTsKICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICByZXR1cm4gX0Jhc2U2NERlY29kZXJTaW5rKHNpbmspOwogIH0KfQoKLy8vIEhlbHBlciBjbGFzcyBpbXBsZW1lbnRpbmcgYmFzZTY0IGRlY29kaW5nIHdpdGggaW50ZXJtZWRpYXRlIHN0YXRlLgpjbGFzcyBfQmFzZTY0RGVjb2RlciB7CiAgLy8vIFNoaWZ0LWNvdW50IHRvIGV4dHJhY3QgdGhlIHZhbHVlcyBzdG9yZWQgaW4gW19zdGF0ZV0uCiAgc3RhdGljIGNvbnN0IGludCBfdmFsdWVTaGlmdCA9IDI7CgogIC8vLyBNYXNrIHRvIGV4dHJhY3QgdGhlIGNvdW50IHZhbHVlIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgY29uc3QgaW50IF9jb3VudE1hc2sgPSAzOwoKICAvLy8gSW52YWxpZCBjaGFyYWN0ZXIgaW4gZGVjb2RpbmcgdGFibGUuCiAgc3RhdGljIGNvbnN0IGludCBfaW52YWxpZCA9IC0yOwoKICAvLy8gUGFkZGluZyBjaGFyYWN0ZXIgaW4gZGVjb2RpbmcgdGFibGUuCiAgc3RhdGljIGNvbnN0IGludCBfcGFkZGluZyA9IC0xOwoKICAvLyBTaG9ydGhhbmRzIHRvIG1ha2UgdGhlIHRhYmxlIG1vcmUgcmVhZGFibGUuCiAgc3RhdGljIGNvbnN0IGludCBfXyA9IF9pbnZhbGlkOwogIHN0YXRpYyBjb25zdCBpbnQgX3AgPSBfcGFkZGluZzsKCiAgLy8vIE1hcHBpbmcgZnJvbSBBU0NJSSBjaGFyYWN0ZXJzIHRvIHRoZWlyIGluZGV4IGluIHRoZSBiYXNlNjQgYWxwaGFiZXQuCiAgLy8vCiAgLy8vIFVzZXMgW19pbnZhbGlkXSBmb3IgaW52YWxpZCBpbmRpY2VzIGFuZCBbX3BhZGRpbmddIGZvciB0aGUgcGFkZGluZwogIC8vLyBjaGFyYWN0ZXIuCiAgLy8vCiAgLy8vIEFjY2VwdHMgdGhlICJVUkwtc2FmZSIgYWxwaGFiZXQgYXMgd2VsbCAoYC1gIGFuZCBgX2AgYXJlIHRoZQogIC8vLyA2Mm5kIGFuZCA2M3JkIGFscGhhYmV0IGNoYXJhY3RlcnMpLCBhbmQgY29uc2lkZXJzIGAlYCBhIHBhZGRpbmcKICAvLy8gY2hhcmFjdGVyLCB3aGljaCBtdXN0IHRoZW4gYmUgZm9sbG93ZWQgYnkgYDNEYCwgdGhlIHBlcmNlbnQtZXNjYXBlCiAgLy8vIGZvciBgPWAuCiAgc3RhdGljIGZpbmFsIExpc3Q8aW50PiBfaW52ZXJzZUFscGhhYmV0ID0gSW50OExpc3QuZnJvbUxpc3QoWwogICAgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIC8vCiAgICBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgLy8KICAgIF9fLCBfXywgX18sIF9fLCBfXywgX3AsIF9fLCBfXywgX18sIF9fLCBfXywgNjIsIF9fLCA2MiwgX18sIDYzLCAvLwogICAgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIF9fLCBfXywgX18sIF9wLCBfXywgX18sIC8vCiAgICBfXywgMDAsIDAxLCAwMiwgMDMsIDA0LCAwNSwgMDYsIDA3LCAwOCwgMDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgLy8KICAgIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgX18sIF9fLCBfXywgX18sIDYzLCAvLwogICAgX18sIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIC8vCiAgICA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIF9fLCBfXywgX18sIF9fLCBfXywgLy8KICBdKTsKCiAgLy8gQ2hhcmFjdGVyIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IF9jaGFyX3BlcmNlbnQgPSAweDI1OyAvLyAnJScuCiAgc3RhdGljIGNvbnN0IGludCBfY2hhcl8zID0gMHgzMzsgLy8gJzMnLgogIHN0YXRpYyBjb25zdCBpbnQgX2NoYXJfZCA9IDB4NjQ7IC8vICdkJy4KCiAgLy8vIE1haW50YWlucyB0aGUgaW50ZXJtZWRpYXRlIHN0YXRlIG9mIGEgcGFydGx5LWRlY29kZWQgaW5wdXQuCiAgLy8vCiAgLy8vIEJhc2U2NCBpcyBkZWNvZGVkIGluIGNodW5rcyBvZiBmb3VyIGNoYXJhY3RlcnMuIElmIGEgY2h1bmsgZG9lcyBub3QKICAvLy8gY29udGFpbiBhIGZ1bGwgYmxvY2ssIHRoZSBkZWNvZGVkIGJpdHMgKHNpeCBwZXIgY2hhcmFjdGVyKSBvZiB0aGUKICAvLy8gYXZhaWxhYmxlIGNoYXJhY3RlcnMgYXJlIHN0b3JlZCBpbiBbX3N0YXRlXSB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvCiAgLy8vIFtfZGVjb2RlXSBvciBbX2Nsb3NlXS4KICAvLy8KICAvLy8gSWYgbm8gcGFkZGluZyBoYXMgYmVlbiBzZWVuLCB0aGUgdmFsdWUgaXMKICAvLy8gICBgbnVtYmVyT2ZDaGFyYWN0ZXJzU2VlbiB8IChkZWNvZGVkQml0cyA8PCAyKWAKICAvLy8gd2hlcmUgYG51bWJlck9mQ2hhcmFjdGVyc1NlZW5gIGlzIGJldHdlZW4gMCBhbmQgMyBhbmQgZGVjb2RlZCBiaXRzCiAgLy8vIGNvbnRhaW5zIHNpeCBiaXRzIHBlciBzZWVuIGNoYXJhY3Rlci4KICAvLy8KICAvLy8gSWYgcGFkZGluZyBoYXMgYmVlbiBzZWVuIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZS4gSXQncyB0aGUgYml0d2lzZSBuZWdhdGlvbgogIC8vLyBvZiB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBhbGxvd2VkIHBhZGRpbmcgY2hhcmFjdGVycyAoYWx3YXlzIH4wIG9yIH4xKS4KICAvLy8KICAvLy8gQSBzdGF0ZSBvZiBgMGAgb3IgYH4wYCBhcmUgdmFsaWQgcGxhY2VzIHRvIGVuZCBkZWNvZGluZywgYWxsIG90aGVyIHZhbHVlcwogIC8vLyBtZWFuIHRoYXQgYSBmb3VyLWNoYXJhY3RlciBibG9jayBoYXMgbm90IGJlZW4gY29tcGxldGVkLgogIGludCBfc3RhdGUgPSAwOwoKICAvLy8gRW5jb2RlcyBbY291bnRdIGFuZCBbYml0c10gYXMgYSB2YWx1ZSB0byBiZSBzdG9yZWQgaW4gW19zdGF0ZV0uCiAgc3RhdGljIGludCBfZW5jb2RlQ2hhcmFjdGVyU3RhdGUoaW50IGNvdW50LCBpbnQgYml0cykgewogICAgYXNzZXJ0KGNvdW50ID09IChjb3VudCAmIF9jb3VudE1hc2spKTsKICAgIHJldHVybiAoYml0cyA8PCBfdmFsdWVTaGlmdCB8IGNvdW50KTsKICB9CgogIC8vLyBFeHRyYWN0cyBjb3VudCBmcm9tIGEgW19zdGF0ZV0gdmFsdWUuCiAgc3RhdGljIGludCBfc3RhdGVDb3VudChpbnQgc3RhdGUpIHsKICAgIGFzc2VydChzdGF0ZSA+PSAwKTsKICAgIHJldHVybiBzdGF0ZSAmIF9jb3VudE1hc2s7CiAgfQoKICAvLy8gRXh0cmFjdHMgdmFsdWUgYml0cyBmcm9tIGEgW19zdGF0ZV0gdmFsdWUuCiAgc3RhdGljIGludCBfc3RhdGVCaXRzKGludCBzdGF0ZSkgewogICAgYXNzZXJ0KHN0YXRlID49IDApOwogICAgcmV0dXJuIHN0YXRlID4+IF92YWx1ZVNoaWZ0OwogIH0KCiAgLy8vIEVuY29kZXMgYSBudW1iZXIgb2YgZXhwZWN0ZWQgcGFkZGluZyBjaGFyYWN0ZXJzIHRvIGJlIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgaW50IF9lbmNvZGVQYWRkaW5nU3RhdGUoaW50IGV4cGVjdGVkUGFkZGluZykgewogICAgYXNzZXJ0KGV4cGVjdGVkUGFkZGluZyA+PSAwKTsKICAgIGFzc2VydChleHBlY3RlZFBhZGRpbmcgPD0gNSk7CiAgICByZXR1cm4gLWV4cGVjdGVkUGFkZGluZyAtIDE7IC8vIH5leHBlY3RlZFBhZGRpbmcgYWRhcHRlZCB0byBkYXJ0MmpzLgogIH0KCiAgLy8vIEV4dHJhY3RzIGV4cGVjdGVkIHBhZGRpbmcgY2hhcmFjdGVyIGNvdW50IGZyb20gYSBbX3N0YXRlXSB2YWx1ZS4KICBzdGF0aWMgaW50IF9zdGF0ZVBhZGRpbmcoaW50IHN0YXRlKSB7CiAgICBhc3NlcnQoc3RhdGUgPCAwKTsKICAgIHJldHVybiAtc3RhdGUgLSAxOyAvLyB+c3RhdGUgYWRhcHRlZCB0byBkYXJ0MmpzLgogIH0KCiAgc3RhdGljIGJvb2wgX2hhc1NlZW5QYWRkaW5nKGludCBzdGF0ZSkgPT4gc3RhdGUgPCAwOwoKICAvLy8gRGVjb2RlcyBbaW5wdXRdIGZyb20gW3N0YXJ0XSB0byBbZW5kXS4KICAvLy8KICAvLy8gUmV0dXJucyBhIFtVaW50OExpc3RdIHdpdGggdGhlIGRlY29kZWQgYnl0ZXMuCiAgLy8vIElmIGEgcHJldmlvdXMgY2FsbCBoYWQgYW4gaW5jb21wbGV0ZSBmb3VyLWNoYXJhY3RlciBibG9jaywgdGhlIGJpdHMgZnJvbQogIC8vLyB0aG9zZSBhcmUgaW5jbHVkZWQgaW4gZGVjb2RpbmcKICBVaW50OExpc3QgZGVjb2RlKFN0cmluZyBpbnB1dCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBhc3NlcnQoMCA8PSBzdGFydCk7CiAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKICAgIGFzc2VydChlbmQgPD0gaW5wdXQubGVuZ3RoKTsKICAgIGlmIChfaGFzU2VlblBhZGRpbmcoX3N0YXRlKSkgewogICAgICBfc3RhdGUgPSBfY2hlY2tQYWRkaW5nKGlucHV0LCBzdGFydCwgZW5kLCBfc3RhdGUpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiBVaW50OExpc3QoMCk7CiAgICB2YXIgYnVmZmVyID0gX2FsbG9jYXRlQnVmZmVyKGlucHV0LCBzdGFydCwgZW5kLCBfc3RhdGUpOwogICAgX3N0YXRlID0gZGVjb2RlQ2h1bmsoaW5wdXQsIHN0YXJ0LCBlbmQsIGJ1ZmZlciwgMCwgX3N0YXRlKTsKICAgIHJldHVybiBidWZmZXI7CiAgfQoKICAvLy8gQ2hlY2tzIHRoYXQgW19zdGF0ZV0gcmVwcmVzZW50cyBhIHZhbGlkIGRlY29kaW5nLgogIHZvaWQgY2xvc2UoU3RyaW5nIGlucHV0LCBpbnQgZW5kKSB7CiAgICBpZiAoX3N0YXRlIDwgX2VuY29kZVBhZGRpbmdTdGF0ZSgwKSkgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIk1pc3NpbmcgcGFkZGluZyBjaGFyYWN0ZXIiLCBpbnB1dCwgZW5kKTsKICAgIH0KICAgIGlmIChfc3RhdGUgPiAwKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnZhbGlkIGxlbmd0aCwgbXVzdCBiZSBtdWx0aXBsZSBvZiBmb3VyIiwgaW5wdXQsIGVuZCk7CiAgICB9CiAgICBfc3RhdGUgPSBfZW5jb2RlUGFkZGluZ1N0YXRlKDApOwogIH0KCiAgLy8vIERlY29kZXMgW2lucHV0XSBmcm9tIFtzdGFydF0gdG8gW2VuZF0uCiAgLy8vCiAgLy8vIEluY2x1ZGVzIHRoZSBzdGF0ZSByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgaW4gdGhlIGRlY29kaW5nLgogIC8vLyBXcml0ZXMgdGhlIGRlY29kaW5nIHRvIFtvdXRwdXRdIGF0IFtvdXRJbmRleF0sIGFuZCB0aGVyZSBtdXN0CiAgLy8vIGJlIHJvb20gaW4gdGhlIG91dHB1dC4KICBzdGF0aWMgaW50IGRlY29kZUNodW5rKFN0cmluZyBpbnB1dCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBVaW50OExpc3Qgb3V0cHV0LAogICAgICBpbnQgb3V0SW5kZXgsIGludCBzdGF0ZSkgewogICAgYXNzZXJ0KCFfaGFzU2VlblBhZGRpbmcoc3RhdGUpKTsKICAgIGNvbnN0IGFzY2lpTWFzayA9IDEyNzsKICAgIGNvbnN0IGFzY2lpTWF4ID0gMTI3OwogICAgY29uc3QgZWlnaHRCaXRNYXNrID0gMHhGRjsKICAgIGNvbnN0IGJpdHNQZXJDaGFyYWN0ZXIgPSA2OwoKICAgIHZhciBiaXRzID0gX3N0YXRlQml0cyhzdGF0ZSk7CiAgICB2YXIgY291bnQgPSBfc3RhdGVDb3VudChzdGF0ZSk7CiAgICAvLyBTdHJpbmcgY29udGVudHMgc2hvdWxkIGJlIGFsbCBBU0NJSS4KICAgIC8vIEluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIGVhY2ggY2hhcmFjdGVyLCB3ZSBjb2xsZWN0IHRoZSBiaXR3aXNlLW9yIG9mCiAgICAvLyBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gYGNoYXJPcmAgYW5kIGxhdGVyIHZhbGlkYXRlIHRoYXQgYWxsIGNoYXJhY3RlcnMKICAgIC8vIHdlcmUgQVNDSUkuCiAgICB2YXIgY2hhck9yID0gMDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChpKTsKICAgICAgY2hhck9yIHw9IGNoYXI7CiAgICAgIHZhciBjb2RlID0gX2ludmVyc2VBbHBoYWJldFtjaGFyICYgYXNjaWlNYXNrXTsKICAgICAgaWYgKGNvZGUgPj0gMCkgewogICAgICAgIGJpdHMgPSAoKGJpdHMgPDwgYml0c1BlckNoYXJhY3RlcikgfCBjb2RlKSAmIDB4RkZGRkZGOwogICAgICAgIGNvdW50ID0gKGNvdW50ICsgMSkgJiAzOwogICAgICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgICBhc3NlcnQob3V0SW5kZXggKyAzIDw9IG91dHB1dC5sZW5ndGgpOwogICAgICAgICAgb3V0cHV0W291dEluZGV4KytdID0gKGJpdHMgPj4gMTYpICYgZWlnaHRCaXRNYXNrOwogICAgICAgICAgb3V0cHV0W291dEluZGV4KytdID0gKGJpdHMgPj4gOCkgJiBlaWdodEJpdE1hc2s7CiAgICAgICAgICBvdXRwdXRbb3V0SW5kZXgrK10gPSBiaXRzICYgZWlnaHRCaXRNYXNrOwogICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gX3BhZGRpbmcgJiYgY291bnQgPiAxKSB7CiAgICAgICAgaWYgKGNoYXJPciA8IDAgfHwgY2hhck9yID4gYXNjaWlNYXgpIGJyZWFrOwogICAgICAgIGlmIChjb3VudCA9PSAzKSB7CiAgICAgICAgICBpZiAoKGJpdHMgJiAweDAzKSAhPSAwKSB7CiAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBlbmNvZGluZyBiZWZvcmUgcGFkZGluZyIsIGlucHV0LCBpKTsKICAgICAgICAgIH0KICAgICAgICAgIG91dHB1dFtvdXRJbmRleCsrXSA9IGJpdHMgPj4gMTA7CiAgICAgICAgICBvdXRwdXRbb3V0SW5kZXgrK10gPSBiaXRzID4+IDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICgoYml0cyAmIDB4MEYpICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGVuY29kaW5nIGJlZm9yZSBwYWRkaW5nIiwgaW5wdXQsIGkpOwogICAgICAgICAgfQogICAgICAgICAgb3V0cHV0W291dEluZGV4KytdID0gYml0cyA+PiA0OwogICAgICAgIH0KICAgICAgICAvLyBFeHBlY3RlZCBwYWRkaW5nIGlzIHRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgcGFkZGluZyBjaGFyYWN0ZXJzLAogICAgICAgIC8vIHdoZXJlIGA9YCBjb3VudHMgYXMgdGhyZWUgYW5kIGAlM0RgIGNvdW50cyBhcyBvbmUgcGVyIGNoYXJhY3Rlci4KICAgICAgICAvLwogICAgICAgIC8vIEV4cGVjdCBlaXRoZXIgemVybyBvciBvbmUgcGFkZGluZyBkZXBlbmRpbmcgb24gY291bnQgKDIgb3IgMyksCiAgICAgICAgLy8gcGx1cyB0d28gbW9yZSBjaGFyYWN0ZXJzIGlmIHRoZSBjb2RlIHdhcyBgJWAgKGEgcGFydGlhbCBwYWRkaW5nKS4KICAgICAgICB2YXIgZXhwZWN0ZWRQYWRkaW5nID0gKDMgLSBjb3VudCkgKiAzOwogICAgICAgIGlmIChjaGFyID09IF9jaGFyX3BlcmNlbnQpIGV4cGVjdGVkUGFkZGluZyArPSAyOwogICAgICAgIHN0YXRlID0gX2VuY29kZVBhZGRpbmdTdGF0ZShleHBlY3RlZFBhZGRpbmcpOwogICAgICAgIHJldHVybiBfY2hlY2tQYWRkaW5nKGlucHV0LCBpICsgMSwgZW5kLCBzdGF0ZSk7CiAgICAgIH0KICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGNoYXJhY3RlciIsIGlucHV0LCBpKTsKICAgIH0KICAgIGlmIChjaGFyT3IgPj0gMCAmJiBjaGFyT3IgPD0gYXNjaWlNYXgpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVDaGFyYWN0ZXJTdGF0ZShjb3VudCwgYml0cyk7CiAgICB9CiAgICAvLyBUaGVyZSBpcyBhbiBpbnZhbGlkIChub24tQVNDSUkpIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQuCiAgICBpbnQgaTsKICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciA8IDAgfHwgY2hhciA+IGFzY2lpTWF4KSBicmVhazsKICAgIH0KICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBjaGFyYWN0ZXIiLCBpbnB1dCwgaSk7CiAgfQoKICAvLy8gQWxsb2NhdGVzIGEgYnVmZmVyIHdpdGggcm9vbSBmb3IgdGhlIGRlY29kaW5nIG9mIGEgc3Vic3RyaW5nIG9mIFtpbnB1dF0uCiAgLy8vCiAgLy8vIEluY2x1ZGVzIHJvb20gZm9yIHRoZSBjaGFyYWN0ZXJzIGluIFtzdGF0ZV0sIGFuZCBoYW5kbGVzIHBhZGRpbmcgY29ycmVjdGx5LgogIHN0YXRpYyBVaW50OExpc3QgX2FsbG9jYXRlQnVmZmVyKAogICAgICBTdHJpbmcgaW5wdXQsIGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0YXRlKSB7CiAgICBhc3NlcnQoc3RhdGUgPj0gMCk7CiAgICB2YXIgcGFkZGluZ1N0YXJ0ID0gX3RyaW1QYWRkaW5nQ2hhcnMoaW5wdXQsIHN0YXJ0LCBlbmQpOwogICAgdmFyIGxlbmd0aCA9IF9zdGF0ZUNvdW50KHN0YXRlKSArIChwYWRkaW5nU3RhcnQgLSBzdGFydCk7CiAgICAvLyBUaHJlZSBieXRlcyBwZXIgZnVsbCBmb3VyIGJ5dGVzIGluIHRoZSBpbnB1dC4KICAgIHZhciBidWZmZXJMZW5ndGggPSAobGVuZ3RoID4+IDIpICogMzsKICAgIC8vIElmIHBhZGRpbmcgd2FzIHNlZW4sIHRoZW4gdGhpcyBpcyB0aGUgbGFzdCBjaHVuaywgYW5kIHRoZSBmaW5hbCBwYXJ0aWFsCiAgICAvLyBjaHVuayBzaG91bGQgYmUgZGVjb2RlZCB0b28uCiAgICB2YXIgcmVtYWluZGVyTGVuZ3RoID0gbGVuZ3RoICYgMzsKICAgIGlmIChyZW1haW5kZXJMZW5ndGggIT0gMCAmJiBwYWRkaW5nU3RhcnQgPCBlbmQpIHsKICAgICAgYnVmZmVyTGVuZ3RoICs9IHJlbWFpbmRlckxlbmd0aCAtIDE7CiAgICB9CiAgICBpZiAoYnVmZmVyTGVuZ3RoID4gMCkgcmV0dXJuIFVpbnQ4TGlzdChidWZmZXJMZW5ndGgpOwogICAgLy8gSWYgdGhlIGlucHV0IHBsdXMgc3RhdGUgaXMgbGVzcyB0aGFuIGZvdXIgY2hhcmFjdGVycywgYW5kIGl0J3Mgbm90CiAgICAvLyBhdCB0aGUgZW5kIG9mIGlucHV0LCBubyBidWZmZXIgaXMgbmVlZGVkLgogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIGVuZCBvZiBpbnB1dCBpZiB0aGVyZSBpcyBubyBwYWRkaW5nLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRlY29kaW5nIGJ1ZmZlciBoYXMgdGhlIGV4YWN0IHNpemUKICAvLy8gaXQgbmVlZHMgd2hlbiBpbnB1dCBpcyB2YWxpZCwgYW5kIGF0IGxlYXN0IGVub3VnaCBieXRlcyB0byByZWFjaCB0aGUgZXJyb3IKICAvLy8gd2hlbiBpbnB1dCBpcyBpbnZhbGlkLgogIC8vLwogIC8vLyBOZXZlciBjb3VudCBtb3JlIHRoYW4gdHdvIHBhZGRpbmcgc2VxdWVuY2VzIHNpbmNlIGFueSBtb3JlIHRoYW4gdGhhdAogIC8vLyB3aWxsIHJhaXNlIGFuIGVycm9yIGFueXdheSwgYW5kIHdlIG9ubHkgY2FyZSBhYm91dCBiZWluZyBwcmVjaXNlIGZvcgogIC8vLyBzdWNjZXNzZnVsIGNvbnZlcnNpb25zLgogIHN0YXRpYyBpbnQgX3RyaW1QYWRkaW5nQ2hhcnMoU3RyaW5nIGlucHV0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIFRoaXMgbWF5IGNvdW50ICclPScgYXMgdHdvIHBhZGRpbmdzLiBUaGF0J3Mgb2ssIGl0IHdpbGwgZXJyIGxhdGVyLAogICAgLy8gYnV0IHRoZSBidWZmZXIgd2lsbCBiZSBsYXJnZSBlbm91Z2ggdG8gcmVhY2ggdGhlIGVycm9yLgogICAgdmFyIHBhZGRpbmcgPSAwOwogICAgdmFyIGluZGV4ID0gZW5kOwogICAgdmFyIG5ld0VuZCA9IGVuZDsKICAgIHdoaWxlIChpbmRleCA+IHN0YXJ0ICYmIHBhZGRpbmcgPCAyKSB7CiAgICAgIGluZGV4LS07CiAgICAgIHZhciBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChpbmRleCk7CiAgICAgIGlmIChjaGFyID09IF9wYWRkaW5nQ2hhcikgewogICAgICAgIHBhZGRpbmcrKzsKICAgICAgICBuZXdFbmQgPSBpbmRleDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoKGNoYXIgfCAweDIwKSA9PSBfY2hhcl9kKSB7CiAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KSBicmVhazsKICAgICAgICBpbmRleC0tOwogICAgICAgIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgfQogICAgICBpZiAoY2hhciA9PSBfY2hhcl8zKSB7CiAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KSBicmVhazsKICAgICAgICBpbmRleC0tOwogICAgICAgIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgfQogICAgICBpZiAoY2hhciA9PSBfY2hhcl9wZXJjZW50KSB7CiAgICAgICAgcGFkZGluZysrOwogICAgICAgIG5ld0VuZCA9IGluZGV4OwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIG5ld0VuZDsKICB9CgogIC8vLyBDaGVjayB0aGF0IHRoZSByZW1haW5kZXIgb2YgdGhlIHN0cmluZyBpcyB2YWxpZCBwYWRkaW5nLgogIC8vLwogIC8vLyBWYWxpZCBwYWRkaW5nIGlzIGEgY29ycmVjdCBudW1iZXIgKDAsIDEgb3IgMikgb2YgYD1gIGNoYXJhY3RlcnMKICAvLy8gb3IgYCUzRGAgc2VxdWVuY2VzIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBiYXNlNjQgY2hhcmFjdGVycy4KICAvLy8gVGhlIFtzdGF0ZV0gcGFyYW1ldGVyIGVuY29kZXMgd2hpY2ggcGFkZGluZyBjb250aW51YXRpb25zIGFyZSBhbGxvd2VkCiAgLy8vIGFzIHRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgY2hhcmFjdGVycy4gVGhhdCBudW1iZXIgaXMgdGhlIG51bWJlciBvZgogIC8vLyBleHBlY3RlZCBwYWRkaW5nIGNoYXJhY3RlcnMgdGltZXMgMyBtaW51cyB0aGUgbnVtYmVyIG9mIHBhZGRpbmcgY2hhcmFjdGVycwogIC8vLyBzZWVuIHNvIGZhciwgd2hlcmUgYD1gIGNvdW50cyBhcyAzIGNvdW50cyBhcyB0aHJlZSBjaGFyYWN0ZXJzLAogIC8vLyBhbmQgdGhlIHBhZGRpbmcgc2VxdWVuY2UgYCUzRGAgY291bnRzIGFzIG9uZSBjaGFyYWN0ZXIgcGVyIGNoYXJhY3Rlci4KICAvLy8KICAvLy8gVGhlIG51bWJlciBvZiBtaXNzaW5nIGNoYXJhY3RlcnMgaXMgYWx3YXlzIGJldHdlZW4gMCBhbmQgNSBiZWNhdXNlIHdlCiAgLy8vIG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIGhhdmluZyBzZWVuIGF0IGxlYXN0IG9uZSBgPWAgb3IgYCVgCiAgLy8vIGNoYXJhY3Rlci4KICAvLy8gSWYgdGhlIG51bWJlciBvZiBtaXNzaW5nIGNoYXJhY3RlcnMgaXMgbm90IDMgb3IgMCwgd2UgaGF2ZSBzZWVuIChhdCBsZWFzdCkKICAvLy8gYSBgJWAgY2hhcmFjdGVyIGFuZCBleHBlY3RzIHRoZSByZXN0IG9mIHRoZSBgJTNEYCBzZXF1ZW5jZSwgYW5kIGEgYD1gIGlzCiAgLy8vIG5vdCBhbGxvd2VkLiBXaGVuIG1pc3NpbmcgMyBjaGFyYWN0ZXJzLCBlaXRoZXIgYD1gIG9yIGAlYCBpcyBhbGxvd2VkLgogIC8vLwogIC8vLyBXaGVuIHRoZSB2YWx1ZSBpcyAwLCBubyBtb3JlIHBhZGRpbmcgKG9yIGFueSBvdGhlciBjaGFyYWN0ZXIpIGlzIGFsbG93ZWQuCiAgc3RhdGljIGludCBfY2hlY2tQYWRkaW5nKFN0cmluZyBpbnB1dCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhdGUpIHsKICAgIGFzc2VydChfaGFzU2VlblBhZGRpbmcoc3RhdGUpKTsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiBzdGF0ZTsKICAgIHZhciBleHBlY3RlZFBhZGRpbmcgPSBfc3RhdGVQYWRkaW5nKHN0YXRlKTsKICAgIGFzc2VydChleHBlY3RlZFBhZGRpbmcgPj0gMCk7CiAgICBhc3NlcnQoZXhwZWN0ZWRQYWRkaW5nIDwgNik7CiAgICB3aGlsZSAoZXhwZWN0ZWRQYWRkaW5nID4gMCkgewogICAgICB2YXIgY2hhciA9IGlucHV0LmNvZGVVbml0QXQoc3RhcnQpOwogICAgICBpZiAoZXhwZWN0ZWRQYWRkaW5nID09IDMpIHsKICAgICAgICBpZiAoY2hhciA9PSBfcGFkZGluZ0NoYXIpIHsKICAgICAgICAgIGV4cGVjdGVkUGFkZGluZyAtPSAzOwogICAgICAgICAgc3RhcnQrKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhciA9PSBfY2hhcl9wZXJjZW50KSB7CiAgICAgICAgICBleHBlY3RlZFBhZGRpbmctLTsKICAgICAgICAgIHN0YXJ0Kys7CiAgICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKSBicmVhazsKICAgICAgICAgIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFBhcnRpYWwgcGFkZGluZyBtZWFucyB3ZSBoYXZlIHNlZW4gcGFydCBvZiBhICIlM0QiIGVzY2FwZS4KICAgICAgdmFyIGV4cGVjdGVkUGFydGlhbFBhZGRpbmcgPSBleHBlY3RlZFBhZGRpbmc7CiAgICAgIGlmIChleHBlY3RlZFBhcnRpYWxQYWRkaW5nID4gMykgZXhwZWN0ZWRQYXJ0aWFsUGFkZGluZyAtPSAzOwogICAgICBpZiAoZXhwZWN0ZWRQYXJ0aWFsUGFkZGluZyA9PSAyKSB7CiAgICAgICAgLy8gRXhwZWN0cyAnMycKICAgICAgICBpZiAoY2hhciAhPSBfY2hhcl8zKSBicmVhazsKICAgICAgICBzdGFydCsrOwogICAgICAgIGV4cGVjdGVkUGFkZGluZy0tOwogICAgICAgIGlmIChzdGFydCA9PSBlbmQpIGJyZWFrOwogICAgICAgIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgfQogICAgICAvLyBFeHBlY3RzICdEJyBvciAnZCcuCiAgICAgIGlmICgoY2hhciB8IDB4MjApICE9IF9jaGFyX2QpIGJyZWFrOwogICAgICBzdGFydCsrOwogICAgICBleHBlY3RlZFBhZGRpbmctLTsKICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgYnJlYWs7CiAgICB9CiAgICBpZiAoc3RhcnQgIT0gZW5kKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBwYWRkaW5nIGNoYXJhY3RlciIsIGlucHV0LCBzdGFydCk7CiAgICB9CiAgICByZXR1cm4gX2VuY29kZVBhZGRpbmdTdGF0ZShleHBlY3RlZFBhZGRpbmcpOwogIH0KfQoKY2xhc3MgX0Jhc2U2NERlY29kZXJTaW5rIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLy8gT3V0cHV0IHNpbmsKICBmaW5hbCBTaW5rPExpc3Q8aW50Pj4gX3Npbms7CiAgZmluYWwgX0Jhc2U2NERlY29kZXIgX2RlY29kZXIgPSBfQmFzZTY0RGVjb2RlcigpOwoKICBfQmFzZTY0RGVjb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKFN0cmluZyBzdHJpbmcpIHsKICAgIGlmIChzdHJpbmcuaXNFbXB0eSkgcmV0dXJuOwogICAgdmFyIGJ1ZmZlciA9IF9kZWNvZGVyLmRlY29kZShzdHJpbmcsIDAsIHN0cmluZy5sZW5ndGgpOwogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSBfc2luay5hZGQoYnVmZmVyKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfZGVjb2Rlci5jbG9zZShudWxsLCBudWxsKTsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzdHJpbmcsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHN0cmluZy5sZW5ndGgpOwogICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuOwogICAgdmFyIGJ1ZmZlciA9IF9kZWNvZGVyLmRlY29kZShzdHJpbmcsIHN0YXJ0LCBlbmQpOwogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSBfc2luay5hZGQoYnVmZmVyKTsKICAgIGlmIChpc0xhc3QpIHsKICAgICAgX2RlY29kZXIuY2xvc2Uoc3RyaW5nLCBlbmQpOwogICAgICBfc2luay5jbG9zZSgpOwogICAgfQogIH0KfQqDWABOTjwBFgFJBDI7PAQOBE9LPQRKPyoBTAQ5OzwEDgRSTkA1AVIEURc+AVUEJkQBfQRKHkABKicBSQRILARQD0hKEDUgOkoBKQE2ARkGNwZDSkNAAUQGQysGGiJOOE1NQj5BGhkZHDM7GyYaJBgpH0wdHD4SRjwqETBEFQoIRCYrGi0uNzgiSEwwDBo5MAowJUAmGhQKCEYGGjcfRC43SioPPTceO1EKIB0XCghBBjweHUghDTUiHDlPCBtFTwgGEwQBSzgbHU0YEhYGMR1OBhwdQhIYBgQCAUwLTAEtBD8EPzsXASwzASQiLD8pBAFBKEcGNAQCAS8XLShKATArSgE8JAE6IwEnASkGLkI9EgEiGgEfRAFDMSEoBAEnPAEoOwE1RwFFBkQGSUoaSyIGLEcYGjIeASUmJTknLC4GLQ1OKUskEQQBT0MiOjABSUlPFCgbFlAXIFFRUEkbEggGKClREgg0BgFJExYbKQsGH1EEATMGQw0fURcWTk4sLA0aT05OLAYEAgE7FQZOQRkBPgEtRC0GREAEAgFDHysEAREcBAFFOTsmBAFAAgE7HCEBNDkBQT4aMRkGEhUGBAIBOiIhATMsAUE+GjgGBAIBTAtMASUESwQ0OxkBSQZCPgZDSkM+QCskNB8TBAFGJQQCAUcXPCQBOiMBKyIBKyIBMSIiAUsGSREGQ0ZJD0BHR0dHR0dHRwYBGjErKwFCBkpISR0GMDZJLAZQTwZQPxIBRjorKgQBLCYYHwQBMSUYIQQBUDgiIkkEAUcoFzUEATcBLQY0TyU3GBohIzkTBis9QBMEATgmK0YGFh1DBiUEAS0GRkQdTSElGxofIAEiJCxMTRMUKCYWNRc/IRoxPDs0FAoSMjQaJFAMKyoRJFAMKgpKTAtKTS85NjgIPAYtMQY/CyQmLgY6BAFPBlIkNRg9PjUqTyQmNisGOkoxEQQBTAY3BklRHQZLSx5DSj8VFRYrDyoiExgSCCYjESgIHSMRKAgjExgSCA0GEwQBPwZGUUxJUUVMBkxIEVFPTAZQSiQkMCIhIioiJCATEQolHRMjKhERCghENEMpFyQRGyEoCB0rDxkfBhhIBjEEAgE8Eh80ASIBHCA8KwQBESATBAFCQR42KxIjFQYEAgEYZGFydDpjb252ZXJ0L2Jhc2U2NC5kYXJ0OG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2J5dGVfY29udmVyc2lvbi5kYXJ0jVQvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gVGhlIFtCeXRlQ29udmVyc2lvblNpbmtdIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgY29udmVydGVycyB0bwovLy8gZWZmaWNpZW50bHkgdHJhbnNtaXQgYnl0ZSBkYXRhLgovLy8KLy8vIEluc3RlYWQgb2YgbGltaXRpbmcgdGhlIGludGVyZmFjZSB0byBvbmUgbm9uLWNodW5rZWQgbGlzdCBvZiBieXRlcyBpdAovLy8gYWNjZXB0cyBpdHMgaW5wdXQgaW4gY2h1bmtzICh0aGVtc2VsdmVzIGJlaW5nIGxpc3RzIG9mIGJ5dGVzKS4KLy8vCi8vLyBUaGlzIGFic3RyYWN0IGNsYXNzIHdpbGwgbGlrZWx5IGdldCBtb3JlIG1ldGhvZHMgb3ZlciB0aW1lLiBJbXBsZW1lbnRlcnMgYXJlCi8vLyB1cmdlZCB0byBleHRlbmQgb3IgbWl4IGluIFtCeXRlQ29udmVyc2lvblNpbmtCYXNlXSB0byBlbnN1cmUgdGhhdCB0aGVpcgovLy8gY2xhc3MgY292ZXJzIHRoZSBuZXdseSBhZGRlZCBtZXRob2RzLgphYnN0cmFjdCBjbGFzcyBCeXRlQ29udmVyc2lvblNpbmsgZXh0ZW5kcyBDaHVua2VkQ29udmVyc2lvblNpbms8TGlzdDxpbnQ+PiB7CiAgQnl0ZUNvbnZlcnNpb25TaW5rKCk7CiAgZmFjdG9yeSBCeXRlQ29udmVyc2lvblNpbmsud2l0aENhbGxiYWNrKAogICAgICB2b2lkIGNhbGxiYWNrKExpc3Q8aW50PiBhY2N1bXVsYXRlZCkpID0gX0J5dGVDYWxsYmFja1Npbms7CiAgZmFjdG9yeSBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShTaW5rPExpc3Q8aW50Pj4gc2luaykgPSBfQnl0ZUFkYXB0ZXJTaW5rOwoKICAvLy8gQWRkcyB0aGUgbmV4dCBbY2h1bmtdIHRvIGB0aGlzYC4KICAvLy8KICAvLy8gQWRkcyB0aGUgYnl0ZXMgZGVmaW5lZCBieSBbc3RhcnRdIGFuZCBbZW5kXS1leGNsdXNpdmUgdG8gYHRoaXNgLgogIC8vLwogIC8vLyBJZiBbaXNMYXN0XSBpcyBgdHJ1ZWAgY2xvc2VzIGB0aGlzYC4KICAvLy8KICAvLy8gQ29udHJhcnkgdG8gYGFkZGAgdGhlIGdpdmVuIFtjaHVua10gbXVzdCBub3QgYmUgaGVsZCBvbnRvLiBPbmNlIHRoZSBtZXRob2QKICAvLy8gcmV0dXJucywgaXQgaXMgc2FmZSB0byBvdmVyd3JpdGUgdGhlIGRhdGEgaW4gaXQuCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpOwoKICAvLyBUT0RPKGZsb2l0c2NoKTogYWRkIG1vcmUgbWV0aG9kczoKICAvLyAtIGl0ZXJhdGVCeXRlcy4KfQoKLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNlLWNsYXNzIGZvciBjb252ZXJ0ZXJzIHRoYXQgbmVlZCB0byBhY2NlcHQgYnl0ZQovLy8gaW5wdXRzLgphYnN0cmFjdCBjbGFzcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspOwogIHZvaWQgY2xvc2UoKTsKCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGFkZChjaHVuay5zdWJsaXN0KHN0YXJ0LCBlbmQpKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBhZGFwdHMgYSBzaW1wbGUgW1NpbmtdIHRvIGEgW0J5dGVDb252ZXJzaW9uU2lua10uCi8vLwovLy8gQWxsIGFkZGl0aW9uYWwgbWV0aG9kcyBvZiB0aGUgW0J5dGVDb252ZXJzaW9uU2lua10gKGNvbXBhcmVkIHRvIHRoZQovLy8gQ2h1bmtlZENvbnZlcnNpb25TaW5rKSBhcmUgcmVkaXJlY3RlZCB0byB0aGUgYGFkZGAgbWV0aG9kLgpjbGFzcyBfQnl0ZUFkYXB0ZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwoKICBfQnl0ZUFkYXB0ZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspIHsKICAgIF9zaW5rLmFkZChjaHVuayk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBjaHVua3MgaW50byBvbmUgbGlzdCBvZiBieXRlcwovLy8gYW5kIGludm9rZXMgYSBjYWxsYmFjayB3aGVuIHRoZSBzaW5rIGlzIGNsb3NlZC4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHRlcm1pbmF0ZSBhIGNodW5rZWQgY29udmVyc2lvbi4KY2xhc3MgX0J5dGVDYWxsYmFja1NpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICBzdGF0aWMgY29uc3QgX0lOSVRJQUxfQlVGRkVSX1NJWkUgPSAxMDI0OwoKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKExpc3Q8aW50PikgX2NhbGxiYWNrOwogIExpc3Q8aW50PiBfYnVmZmVyID0gVWludDhMaXN0KF9JTklUSUFMX0JVRkZFUl9TSVpFKTsKICBpbnQgX2J1ZmZlckluZGV4ID0gMDsKCiAgX0J5dGVDYWxsYmFja1Npbmsodm9pZCBjYWxsYmFjayhMaXN0PGludD4gYWNjdW11bGF0ZWQpKQogICAgICA6IF9jYWxsYmFjayA9IGNhbGxiYWNrOwoKICB2b2lkIGFkZChJdGVyYWJsZTxpbnQ+IGNodW5rKSB7CiAgICB2YXIgZnJlZUNvdW50ID0gX2J1ZmZlci5sZW5ndGggLSBfYnVmZmVySW5kZXg7CiAgICBpZiAoY2h1bmsubGVuZ3RoID4gZnJlZUNvdW50KSB7CiAgICAgIC8vIEdyb3cgdGhlIGJ1ZmZlci4KICAgICAgdmFyIG9sZExlbmd0aCA9IF9idWZmZXIubGVuZ3RoOwogICAgICB2YXIgbmV3TGVuZ3RoID0gX3JvdW5kVG9Qb3dlck9mMihjaHVuay5sZW5ndGggKyBvbGRMZW5ndGgpICogMjsKICAgICAgdmFyIGdyb3duID0gVWludDhMaXN0KG5ld0xlbmd0aCk7CiAgICAgIGdyb3duLnNldFJhbmdlKDAsIF9idWZmZXIubGVuZ3RoLCBfYnVmZmVyKTsKICAgICAgX2J1ZmZlciA9IGdyb3duOwogICAgfQogICAgX2J1ZmZlci5zZXRSYW5nZShfYnVmZmVySW5kZXgsIF9idWZmZXJJbmRleCArIGNodW5rLmxlbmd0aCwgY2h1bmspOwogICAgX2J1ZmZlckluZGV4ICs9IGNodW5rLmxlbmd0aDsKICB9CgogIHN0YXRpYyBpbnQgX3JvdW5kVG9Qb3dlck9mMihpbnQgdikgewogICAgYXNzZXJ0KHYgPiAwKTsKICAgIHYtLTsKICAgIHYgfD0gdiA+PiAxOwogICAgdiB8PSB2ID4+IDI7CiAgICB2IHw9IHYgPj4gNDsKICAgIHYgfD0gdiA+PiA4OwogICAgdiB8PSB2ID4+IDE2OwogICAgdisrOwogICAgcmV0dXJuIHY7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2NhbGxiYWNrKF9idWZmZXIuc3VibGlzdCgwLCBfYnVmZmVySW5kZXgpKTsKICB9Cn0KbwBOTjwBFgFFJARKQwRRTCpNGCtBTAEnBkcGKwZRN0MBJxUCAU0MQx0QAUQkGQQCAUEESD84HwEgAR4WBAEREwQCAT00BD45LAEsNxgBOh4BIjMkGiZGKDIXBkgiBAEnEwkREREREgkOBAERMQQCASFkYXJ0OmNvbnZlcnQvYnl0ZV9jb252ZXJzaW9uLmRhcnQ7b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvY2h1bmtlZF9jb252ZXJzaW9uLmRhcnSKby8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIFtDaHVua2VkQ29udmVyc2lvblNpbmtdIGlzIHVzZWQgdG8gdHJhbnNtaXQgZGF0YSBtb3JlIGVmZmljaWVudGx5IGJldHdlZW4KLy8vIHR3byBjb252ZXJ0ZXJzIGR1cmluZyBjaHVua2VkIGNvbnZlcnNpb25zLgovLy8KLy8vIFRoZSBiYXNpYyBgQ2h1bmtlZENvbnZlcnNpb25TaW5rYCBpcyBqdXN0IGEgW1NpbmtdLCBhbmQgY29udmVydGVycyBzaG91bGQKLy8vIHdvcmsgd2l0aCBhIHBsYWluIGBTaW5rYCwgYnV0IG1heSB3b3JrIG1vcmUgZWZmaWNpZW50bHkgd2l0aCBjZXJ0YWluCi8vLyBzcGVjaWFsaXplZCB0eXBlcyBvZiBgQ2h1bmtlZENvbnZlcnNpb25TaW5rYC4KLy8vCi8vLyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGltcGxlbWVudGF0aW9ucyBvZiBgQ2h1bmtlZENvbnZlcnNpb25TaW5rYCBleHRlbmQKLy8vIHRoaXMgY2xhc3MsIHRvIGluaGVyaXQgYW55IGZ1cnRoZXIgbWV0aG9kcyB0aGF0IG1heSBiZSBhZGRlZCB0byB0aGUgY2xhc3MuCmFic3RyYWN0IGNsYXNzIENodW5rZWRDb252ZXJzaW9uU2luazxUPiBpbXBsZW1lbnRzIFNpbms8VD4gewogIENodW5rZWRDb252ZXJzaW9uU2luaygpOwogIGZhY3RvcnkgQ2h1bmtlZENvbnZlcnNpb25TaW5rLndpdGhDYWxsYmFjaygKICAgICAgdm9pZCBjYWxsYmFjayhMaXN0PFQ+IGFjY3VtdWxhdGVkKSkgPSBfU2ltcGxlQ2FsbGJhY2tTaW5rPFQ+OwoKICAvLy8gQWRkcyBjaHVua2VkIGRhdGEgdG8gdGhpcyBzaW5rLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBhbHNvIHVzZWQgd2hlbiBjb252ZXJ0ZXJzIGFyZSB1c2VkIGFzIFtTdHJlYW1UcmFuc2Zvcm1lcl1zLgogIHZvaWQgYWRkKFQgY2h1bmspOwoKICAvLy8gQ2xvc2VzIHRoZSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUgY2h1bmtlZCBjb252ZXJzaW9uLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQKICAvLy8gd2hlbiBjb252ZXJ0ZXJzIGFyZSB1c2VkIGFzIFtTdHJlYW1UcmFuc2Zvcm1lcl0ncy4KICB2b2lkIGNsb3NlKCk7Cn0KCi8vLyBUaGlzIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBjaHVua3MgYW5kIGludm9rZXMgYSBjYWxsYmFjayB3aXRoIGEgbGlzdCBvZgovLy8gdGhlIGNodW5rcyB3aGVuIHRoZSBzaW5rIGlzIGNsb3NlZC4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHRlcm1pbmF0ZSBhIGNodW5rZWQgY29udmVyc2lvbi4KY2xhc3MgX1NpbXBsZUNhbGxiYWNrU2luazxUPiBleHRlbmRzIENodW5rZWRDb252ZXJzaW9uU2luazxUPiB7CiAgZmluYWwgdm9pZCBGdW5jdGlvbihMaXN0PFQ+KSBfY2FsbGJhY2s7CiAgZmluYWwgTGlzdDxUPiBfYWNjdW11bGF0ZWQgPSA8VD5bXTsKCiAgX1NpbXBsZUNhbGxiYWNrU2luayh0aGlzLl9jYWxsYmFjayk7CgogIHZvaWQgYWRkKFQgY2h1bmspIHsKICAgIF9hY2N1bXVsYXRlZC5hZGQoY2h1bmspOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jYWxsYmFjayhfYWNjdW11bGF0ZWQpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbG9naWMgZm9yIGEgY2h1bmtlZCBjb252ZXJzaW9uIGFzIGEKLy8vIHN0cmVhbSB0cmFuc2Zvcm1lci4KLy8vCi8vLyBJdCBpcyB1c2VkIGFzIHN0cmF0ZWd5IGluIHRoZSBbRXZlbnRUcmFuc2Zvcm1TdHJlYW1dLgovLy8KLy8vIEl0IGFsc28gaW1wbGVtZW50cyB0aGUgW0NodW5rZWRDb252ZXJzaW9uU2lua10gaW50ZXJmYWNlIHNvIHRoYXQgaXQKLy8vIGNhbiBiZSB1c2VkIGFzIG91dHB1dCBzaW5rIGluIGEgY2h1bmtlZCBjb252ZXJzaW9uLgpjbGFzcyBfQ29udmVydGVyU3RyZWFtRXZlbnRTaW5rPFMsIFQ+IGltcGxlbWVudHMgRXZlbnRTaW5rPFM+IHsKICAvLy8gVGhlIG91dHB1dCBzaW5rIGZvciB0aGUgY29udmVydGVyLgogIGZpbmFsIEV2ZW50U2luazxUPiBfZXZlbnRTaW5rOwoKICAvLy8gVGhlIGlucHV0IHNpbmsgZm9yIG5ldyBkYXRhLiBBbGwgZGF0YSB0aGF0IGlzIHJlY2VpdmVkIHdpdGgKICAvLy8gW2hhbmRsZURhdGFdIGlzIGFkZGVkIGludG8gdGhpcyBzaW5rLgogIGZpbmFsIFNpbms8Uz4gX2NodW5rZWRTaW5rOwoKICBfQ29udmVydGVyU3RyZWFtRXZlbnRTaW5rKENvbnZlcnRlcjxTLCBUPiBjb252ZXJ0ZXIsIEV2ZW50U2luazxUPiBzaW5rKQogICAgICA6IF9ldmVudFNpbmsgPSBzaW5rLAogICAgICAgIF9jaHVua2VkU2luayA9IGNvbnZlcnRlci5zdGFydENodW5rZWRDb252ZXJzaW9uKHNpbmspOwoKICB2b2lkIGFkZChTIG8pIHsKICAgIF9jaHVua2VkU2luay5hZGQobyk7CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9ldmVudFNpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jaHVua2VkU2luay5jbG9zZSgpOwogIH0KfQpUAE5OPAEWAVAvBE5JMgRNTz0bLkQBJgZRFQEXBkw5EAIBTCgEPkAqJgEnARYdBAERHQQCAUIYBDoESDhAKSEBQiweAUobPwESGQQBOSwEAREaBAIBJGRhcnQ6Y29udmVydC9jaHVua2VkX2NvbnZlcnNpb24uZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC9jb2RlYy5kYXJ0jIovLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gQSBbQ29kZWNdIGVuY29kZXMgYW5kIChpZiBzdXBwb3J0ZWQpIGRlY29kZXMgZGF0YS4KLy8vCi8vLyBDb2RlY3MgY2FuIGJlIGZ1c2VkLiBGb3IgZXhhbXBsZSBmdXNpbmcgW2pzb25dIGFuZCBbdXRmOF0gcHJvZHVjZXMKLy8vIGFuIGVuY29kZXIgdGhhdCBjYW4gY29udmVydCBKc29uIG9iamVjdHMgZGlyZWN0bHkgdG8gYnl0ZXMsIG9yIGNhbiBkZWNvZGUKLy8vIGJ5dGVzIGRpcmVjdGx5IHRvIGpzb24gb2JqZWN0cy4KLy8vCi8vLyBGdXNlZCBjb2RlY3MgZ2VuZXJhbGx5IGF0dGVtcHQgdG8gb3B0aW1pemUgdGhlIG9wZXJhdGlvbnMgYW5kIGNhbiBiZSBmYXN0ZXIKLy8vIHRoYW4gZXhlY3V0aW5nIGVhY2ggc3RlcCBvZiBhbiBlbmNvZGluZyBzZXBhcmF0ZWx5LgphYnN0cmFjdCBjbGFzcyBDb2RlYzxTLCBUPiB7CiAgY29uc3QgQ29kZWMoKTsKCiAgLy8vIEVuY29kZXMgW2lucHV0XS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGlzIGVuY29kZWQgYXMgaWYgYnkgYGVuY29kZXIuY29udmVydGAuCiAgVCBlbmNvZGUoUyBpbnB1dCkgPT4gZW5jb2Rlci5jb252ZXJ0KGlucHV0KTsKCiAgLy8vIERlY29kZXMgW2VuY29kZWRdIGRhdGEuCiAgLy8vCiAgLy8vIFRoZSBpbnB1dCBpcyBkZWNvZGVkIGFzIGlmIGJ5IGBkZWNvZGVyLmNvbnZlcnRgLgogIFMgZGVjb2RlKFQgZW5jb2RlZCkgPT4gZGVjb2Rlci5jb252ZXJ0KGVuY29kZWQpOwoKICAvLy8gUmV0dXJucyB0aGUgZW5jb2RlciBmcm9tIFtTXSB0byBbVF0uCiAgLy8vCiAgLy8vIEl0IG1heSBiZSBzdGF0ZWZ1bCBhbmQgc2hvdWxkIG5vdCBiZSByZXVzZWQuCiAgQ29udmVydGVyPFMsIFQ+IGdldCBlbmNvZGVyOwoKICAvLy8gUmV0dXJucyB0aGUgZGVjb2RlciBvZiBgdGhpc2AsIGNvbnZlcnRpbmcgZnJvbSBbVF0gdG8gW1NdLgogIC8vLwogIC8vLyBJdCBtYXkgYmUgc3RhdGVmdWwgYW5kIHNob3VsZCBub3QgYmUgcmV1c2VkLgogIENvbnZlcnRlcjxULCBTPiBnZXQgZGVjb2RlcjsKCiAgLy8vIEZ1c2VzIGB0aGlzYCB3aXRoIGBvdGhlcmAuCiAgLy8vCiAgLy8vIFdoZW4gZW5jb2RpbmcsIHRoZSByZXN1bHRpbmcgY29kZWMgZW5jb2RlcyB3aXRoIGB0aGlzYCBiZWZvcmUKICAvLy8gZW5jb2Rpbmcgd2l0aCBbb3RoZXJdLgogIC8vLwogIC8vLyBXaGVuIGRlY29kaW5nLCB0aGUgcmVzdWx0aW5nIGNvZGVjIGRlY29kZXMgd2l0aCBbb3RoZXJdIGJlZm9yZSBkZWNvZGluZwogIC8vLyB3aXRoIGB0aGlzYC4KICAvLy8KICAvLy8gSW4gc29tZSBjYXNlcyBvbmUgbmVlZHMgdG8gdXNlIHRoZSBbaW52ZXJ0ZWRdIGNvZGVjcyB0byBiZSBhYmxlIHRvIGZ1c2UKICAvLy8gdGhlbSBjb3JyZWN0bHkuIFRoYXQgaXMsIHRoZSBvdXRwdXQgdHlwZSBvZiBgdGhpc2AgKFtUXSkgbXVzdCBtYXRjaCB0aGUKICAvLy8gaW5wdXQgdHlwZSBvZiB0aGUgc2Vjb25kIGNvZGVjIFtvdGhlcl0uCiAgLy8vCiAgLy8vIEV4YW1wbGVzOgogIC8vLyBgYGBkYXJ0CiAgLy8vIGZpbmFsIGpzb25Ub0J5dGVzID0ganNvbi5mdXNlKHV0ZjgpOwogIC8vLyBMaXN0PGludD4gYnl0ZXMgPSBqc29uVG9CeXRlcy5lbmNvZGUoWyJqc29uLW9iamVjdCJdKTsKICAvLy8gdmFyIGRlY29kZWQgPSBqc29uVG9CeXRlcy5kZWNvZGUoYnl0ZXMpOwogIC8vLyBhc3NlcnQoZGVjb2RlZCBpcyBMaXN0ICYmIGRlY29kZWRbMF0gPT0gImpzb24tb2JqZWN0Iik7CiAgLy8vCiAgLy8vIHZhciBpbnZlcnRlZCA9IGpzb24uaW52ZXJ0ZWQ7CiAgLy8vIHZhciBqc29uSWRlbnRpdHkgPSBqc29uLmZ1c2UoaW52ZXJ0ZWQpOwogIC8vLyB2YXIganNvbk9iamVjdCA9IGpzb25JZGVudGl0eS5lbmNvZGUoWyIxIiwgMl0pOwogIC8vLyBhc3NlcnQoanNvbk9iamVjdCBpcyBMaXN0ICYmIGpzb25PYmplY3RbMF0gPT0gIjEiICYmIGpzb25PYmplY3RbMV0gPT0gMik7CiAgLy8vIGBgYAogIC8vIFRPRE8oZmxvaXRzY2gpOiB1c2UgYmV0dGVyIGV4YW1wbGUgd2l0aCBsaW5lLXNwbGl0dGVyIG9uY2UgdGhhdCBvbmUgaXMKICAvLyBpbiB0aGlzIGxpYnJhcnkuCiAgQ29kZWM8UywgUj4gZnVzZTxSPihDb2RlYzxULCBSPiBvdGhlcikgewogICAgcmV0dXJuIF9GdXNlZENvZGVjPFMsIFQsIFI+KHRoaXMsIG90aGVyKTsKICB9CgogIC8vLyBJbnZlcnRzIGB0aGlzYC4KICAvLy8KICAvLy8gVGhlIFtlbmNvZGVyXSBhbmQgW2RlY29kZXJdIG9mIHRoZSByZXN1bHRpbmcgY29kZWMgYXJlIHN3YXBwZWQuCiAgQ29kZWM8VCwgUz4gZ2V0IGludmVydGVkID0+IF9JbnZlcnRlZENvZGVjPFQsIFM+KHRoaXMpOwp9CgovLy8gRnVzZXMgdGhlIGdpdmVuIGNvZGVjcy4KLy8vCi8vLyBJbiB0aGUgbm9uLWNodW5rZWQgY29udmVyc2lvbiBzaW1wbHkgaW52b2tlcyB0aGUgbm9uLWNodW5rZWQgY29udmVyc2lvbnMgaW4KLy8vIHNlcXVlbmNlLgpjbGFzcyBfRnVzZWRDb2RlYzxTLCBNLCBUPiBleHRlbmRzIENvZGVjPFMsIFQ+IHsKICBmaW5hbCBDb2RlYzxTLCBNPiBfZmlyc3Q7CiAgZmluYWwgQ29kZWM8TSwgVD4gX3NlY29uZDsKCiAgQ29udmVydGVyPFMsIFQ+IGdldCBlbmNvZGVyID0+IF9maXJzdC5lbmNvZGVyLmZ1c2U8VD4oX3NlY29uZC5lbmNvZGVyKTsKICBDb252ZXJ0ZXI8VCwgUz4gZ2V0IGRlY29kZXIgPT4gX3NlY29uZC5kZWNvZGVyLmZ1c2U8Uz4oX2ZpcnN0LmRlY29kZXIpOwoKICBfRnVzZWRDb2RlYyh0aGlzLl9maXJzdCwgdGhpcy5fc2Vjb25kKTsKfQoKY2xhc3MgX0ludmVydGVkQ29kZWM8VCwgUz4gZXh0ZW5kcyBDb2RlYzxULCBTPiB7CiAgZmluYWwgQ29kZWM8UywgVD4gX2NvZGVjOwoKICBfSW52ZXJ0ZWRDb2RlYyhDb2RlYzxTLCBUPiBjb2RlYykgOiBfY29kZWMgPSBjb2RlYzsKCiAgQ29udmVydGVyPFQsIFM+IGdldCBlbmNvZGVyID0+IF9jb2RlYy5kZWNvZGVyOwogIENvbnZlcnRlcjxTLCBUPiBnZXQgZGVjb2RlciA9PiBfY29kZWMuZW5jb2RlcjsKCiAgQ29kZWM8UywgVD4gZ2V0IGludmVydGVkID0+IF9jb2RlYzsKfQpjAE5OPAEWATcER04kBFA4HREBFwY3LwEeBjczASsGMx8BQQYzHwEhBkQdBk4TBk5OLgYQDis9Lz4GJC42UApMFisuBAEWBkY6AgEcBFAOMRwdAUpKASoCATEcATYBMTEBJgIBF2RhcnQ6Y29udmVydC9jb2RlYy5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2NvbnZlcnRlci5kYXJ0ipUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gQSBbQ29udmVydGVyXSBjb252ZXJ0cyBkYXRhIGZyb20gb25lIHJlcHJlc2VudGF0aW9uIGludG8gYW5vdGhlci4KLy8vCi8vLyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGltcGxlbWVudGF0aW9ucyBvZiBgQ29udmVydGVyYCBleHRlbmQgdGhpcyBjbGFzcywKLy8vIHRvIGluaGVyaXQgYW55IGZ1cnRoZXIgbWV0aG9kcyB0aGF0IG1heSBiZSBhZGRlZCB0byB0aGUgY2xhc3MuCmFic3RyYWN0IGNsYXNzIENvbnZlcnRlcjxTLCBUPiBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTLCBUPiB7CiAgY29uc3QgQ29udmVydGVyKCk7CgogIC8vLyBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgQ29udmVydGVyPFRTLCBUVD5gLgogIC8vLwogIC8vLyBUaGlzIGFsbG93cyBbc291cmNlXSB0byBiZSB1c2VkIGF0IHRoZSBuZXcgdHlwZSwgYnV0IGF0IHJ1bi10aW1lIGl0CiAgLy8vIG11c3Qgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIGJvdGggdGhlIG5ldyB0eXBlIGFuZCBpdHMgb3JpZ2luYWwgdHlwZS4KICAvLy8KICAvLy8gQ29udmVyc2lvbiBpbnB1dCBtdXN0IGJlIGJvdGggW1NTXSBhbmQgW1RTXSBhbmQgdGhlIG91dHB1dCBjcmVhdGVkIGJ5CiAgLy8vIFtzb3VyY2VdIGZvciB0aG9zZSBpbnB1dCBtdXN0IGJlIGJvdGggW1NUXSBhbmQgW1RUXS4KICBzdGF0aWMgQ29udmVydGVyPFRTLCBUVD4gY2FzdEZyb208U1MsIFNULCBUUywgVFQ+KENvbnZlcnRlcjxTUywgU1Q+IHNvdXJjZSkgPT4KICAgICAgQ2FzdENvbnZlcnRlcjxTUywgU1QsIFRTLCBUVD4oc291cmNlKTsKCiAgLy8vIENvbnZlcnRzIFtpbnB1dF0gYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbi4KICBUIGNvbnZlcnQoUyBpbnB1dCk7CgogIC8vLyBGdXNlcyBgdGhpc2Agd2l0aCBbb3RoZXJdLgogIC8vLwogIC8vLyBFbmNvZGluZyB3aXRoIHRoZSByZXN1bHRpbmcgY29udmVydGVyIGlzIGVxdWl2YWxlbnQgdG8gY29udmVydGluZyB3aXRoCiAgLy8vIGB0aGlzYCBiZWZvcmUgY29udmVydGluZyB3aXRoIGBvdGhlcmAuCiAgQ29udmVydGVyPFMsIFRUPiBmdXNlPFRUPihDb252ZXJ0ZXI8VCwgVFQ+IG90aGVyKSB7CiAgICByZXR1cm4gX0Z1c2VkQ29udmVydGVyPFMsIFQsIFRUPih0aGlzLCBvdGhlcik7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgc2luayBzZXJ2ZXMgYXMgaW5wdXQgZm9yIHRoZSBsb25nLXJ1bm5pbmcgY29udmVyc2lvbi4gVGhlCiAgLy8vIGdpdmVuIFtzaW5rXSBzZXJ2ZXMgYXMgb3V0cHV0LgogIFNpbms8Uz4gc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFQ+IHNpbmspIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlRoaXMgY29udmVydGVyIGRvZXMgbm90IHN1cHBvcnQgY2h1bmtlZCBjb252ZXJzaW9uczogJHRoaXMiKTsKICB9CgogIFN0cmVhbTxUPiBiaW5kKFN0cmVhbTxTPiBzdHJlYW0pIHsKICAgIHJldHVybiBTdHJlYW08VD4uZXZlbnRUcmFuc2Zvcm1lZCgKICAgICAgICBzdHJlYW0sIChFdmVudFNpbmsgc2luaykgPT4gX0NvbnZlcnRlclN0cmVhbUV2ZW50U2luayh0aGlzLCBzaW5rKSk7CiAgfQoKICAvLy8gUHJvdmlkZXMgYSBgQ29udmVydGVyPFJTLCBSVD5gIHZpZXcgb2YgdGhpcyBzdHJlYW0gdHJhbnNmb3JtZXIuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZXIgd2lsbCBjaGVjayBhdCBydW4tdGltZSB0aGF0IGFsbCBjb252ZXJzaW9uCiAgLy8vIGlucHV0cyBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtTXSwKICAvLy8gYW5kIGl0IHdpbGwgY2hlY2sgdGhhdCBhbGwgY29udmVyc2lvbiBvdXRwdXQgcHJvZHVjZWQgYnkgdGhpcyBjb252ZXJ0ZXIKICAvLy8gYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbUlRdLgogIENvbnZlcnRlcjxSUywgUlQ+IGNhc3Q8UlMsIFJUPigpID0+IENvbnZlcnRlci5jYXN0RnJvbTxTLCBULCBSUywgUlQ+KHRoaXMpOwp9CgovLy8gRnVzZXMgdHdvIGNvbnZlcnRlcnMuCi8vLwovLy8gRm9yIGEgbm9uLWNodW5rZWQgY29udmVyc2lvbiBjb252ZXJ0cyB0aGUgaW5wdXQgaW4gc2VxdWVuY2UuCmNsYXNzIF9GdXNlZENvbnZlcnRlcjxTLCBNLCBUPiBleHRlbmRzIENvbnZlcnRlcjxTLCBUPiB7CiAgZmluYWwgQ29udmVydGVyPFMsIE0+IF9maXJzdDsKICBmaW5hbCBDb252ZXJ0ZXI8TSwgVD4gX3NlY29uZDsKCiAgX0Z1c2VkQ29udmVydGVyKHRoaXMuX2ZpcnN0LCB0aGlzLl9zZWNvbmQpOwoKICBUIGNvbnZlcnQoUyBpbnB1dCkgPT4gX3NlY29uZC5jb252ZXJ0KF9maXJzdC5jb252ZXJ0KGlucHV0KSk7CgogIFNpbms8Uz4gc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFQ+IHNpbmspIHsKICAgIHJldHVybiBfZmlyc3Quc3RhcnRDaHVua2VkQ29udmVyc2lvbihfc2Vjb25kLnN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oc2luaykpOwogIH0KfQpKAE5OPAEWAUYETUNFFQEzBkpQBkw7US0BQRYBIQZNLTYzBAEjBk0lMRxHBAElJ0wEAUYGSyxOJk4CARoEQTkgIQEuAUABMVAEAgEbZGFydDpjb252ZXJ0L2NvbnZlcnRlci5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2VuY29kaW5nLmRhcnSJ+S8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBPcGVuLWVuZGVkIEVuY29kaW5nIGVudW0uCmFic3RyYWN0IGNsYXNzIEVuY29kaW5nIGV4dGVuZHMgQ29kZWM8U3RyaW5nLCBMaXN0PGludD4+IHsKICBjb25zdCBFbmNvZGluZygpOwoKICAvLy8gUmV0dXJucyB0aGUgZW5jb2RlciBmcm9tIGBTdHJpbmdgIHRvIGBMaXN0PGludD5gLgogIC8vLwogIC8vLyBJdCBtYXkgYmUgc3RhdGVmdWwgYW5kIHNob3VsZCBub3QgYmUgcmV1c2VkLgogIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gZ2V0IGVuY29kZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBkZWNvZGVyIG9mIGB0aGlzYCwgY29udmVydGluZyBmcm9tIGBMaXN0PGludD5gIHRvIGBTdHJpbmdgLgogIC8vLwogIC8vLyBJdCBtYXkgYmUgc3RhdGVmdWwgYW5kIHNob3VsZCBub3QgYmUgcmV1c2VkLgogIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gZ2V0IGRlY29kZXI7CgogIEZ1dHVyZTxTdHJpbmc+IGRlY29kZVN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBieXRlU3RyZWFtKSB7CiAgICByZXR1cm4gZGVjb2RlcgogICAgICAgIC5iaW5kKGJ5dGVTdHJlYW0pCiAgICAgICAgLmZvbGQoU3RyaW5nQnVmZmVyKCksCiAgICAgICAgICAgIChTdHJpbmdCdWZmZXIgYnVmZmVyLCBTdHJpbmcgc3RyaW5nKSA9PiBidWZmZXIuLndyaXRlKHN0cmluZykpCiAgICAgICAgLnRoZW4oKFN0cmluZ0J1ZmZlciBidWZmZXIpID0+IGJ1ZmZlci50b1N0cmluZygpKTsKICB9CgogIC8vLyBOYW1lIG9mIHRoZSBlbmNvZGluZy4KICAvLy8KICAvLy8gSWYgdGhlIGVuY29kaW5nIGlzIHN0YW5kYXJkaXplZCwgdGhpcyBpcyB0aGUgbG93ZXItY2FzZSB2ZXJzaW9uIG9mIG9uZSBvZgogIC8vLyB0aGUgSUFOQSBvZmZpY2lhbCBuYW1lcyBmb3IgdGhlIGNoYXJhY3RlciBzZXQgKHNlZQogIC8vLyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzL2NoYXJhY3Rlci1zZXRzLnhtbCkKICBTdHJpbmcgZ2V0IG5hbWU7CgogIC8vIEFsbCBhbGlhc2VzIChpbiBsb3dlcmNhc2UpIG9mIHN1cHBvcnRlZCBlbmNvZGluZyBmcm9tCiAgLy8gaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54bWwuCiAgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIEVuY29kaW5nPiBfbmFtZVRvRW5jb2RpbmcgPSA8U3RyaW5nLCBFbmNvZGluZz57CiAgICAvLyBJU09fODg1OS0xOjE5ODcuCiAgICAiaXNvXzg4NTktMToxOTg3IjogbGF0aW4xLAogICAgImlzby1pci0xMDAiOiBsYXRpbjEsCiAgICAiaXNvXzg4NTktMSI6IGxhdGluMSwKICAgICJpc28tODg1OS0xIjogbGF0aW4xLAogICAgImxhdGluMSI6IGxhdGluMSwKICAgICJsMSI6IGxhdGluMSwKICAgICJpYm04MTkiOiBsYXRpbjEsCiAgICAiY3A4MTkiOiBsYXRpbjEsCiAgICAiY3Npc29sYXRpbjEiOiBsYXRpbjEsCgogICAgLy8gVVMtQVNDSUkuCiAgICAiaXNvLWlyLTYiOiBhc2NpaSwKICAgICJhbnNpX3gzLjQtMTk2OCI6IGFzY2lpLAogICAgImFuc2lfeDMuNC0xOTg2IjogYXNjaWksCiAgICAiaXNvXzY0Ni5pcnY6MTk5MSI6IGFzY2lpLAogICAgImlzbzY0Ni11cyI6IGFzY2lpLAogICAgInVzLWFzY2lpIjogYXNjaWksCiAgICAidXMiOiBhc2NpaSwKICAgICJpYm0zNjciOiBhc2NpaSwKICAgICJjcDM2NyI6IGFzY2lpLAogICAgImNzYXNjaWkiOiBhc2NpaSwKICAgICJhc2NpaSI6IGFzY2lpLCAvLyBUaGlzIGlzIG5vdCBpbiB0aGUgSUFOQSBvZmZpY2lhbCBuYW1lcy4KCiAgICAvLyBVVEYtOC4KICAgICJjc3V0ZjgiOiB1dGY4LAogICAgInV0Zi04IjogdXRmOAogIH07CgogIC8vLyBHZXRzIGFuIFtFbmNvZGluZ10gb2JqZWN0IGZyb20gdGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlciBzZXQKICAvLy8gbmFtZS4gVGhlIG5hbWVzIHVzZWQgYXJlIHRoZSBJQU5BIG9mZmljaWFsIG5hbWVzIGZvciB0aGUKICAvLy8gY2hhcmFjdGVyIHNldCAoc2VlCiAgLy8vIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMvY2hhcmFjdGVyLXNldHMueG1sKS4KICAvLy8KICAvLy8gVGhlIFtuYW1lXSBwYXNzZWQgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KICAvLy8KICAvLy8gSWYgY2hhcmFjdGVyIHNldCBpcyBub3Qgc3VwcG9ydGVkIFs6bnVsbDpdIGlzIHJldHVybmVkLgogIHN0YXRpYyBFbmNvZGluZyBnZXRCeU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChuYW1lID09IG51bGwpIHJldHVybiBudWxsOwogICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKICAgIHJldHVybiBfbmFtZVRvRW5jb2RpbmdbbmFtZV07CiAgfQp9ClMATk48ARYBHjsUATgGMywBTgYzLAE+ExoeSzsEARwGUDlJEwE7SEsYHxoaGhYSFhUbAREXHR0fGBcRFRQWPwEOFBIFAUM/GUoGLQY+KyMfIgQCARpkYXJ0OmNvbnZlcnQvZW5jb2RpbmcuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC9odG1sX2VzY2FwZS5kYXJ0n8cvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gQSBgU3RyaW5nYCBjb252ZXJ0ZXIgdGhhdCBjb252ZXJ0cyBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuCi8vLwovLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBzYW5pdGl6ZSB0ZXh0IGJlZm9yZSBpbnNlcnRpbmcgdGhlIHRleHQgaW50byBhbiBIVE1MCi8vLyBkb2N1bWVudC4gQ2hhcmFjdGVycyB0aGF0IGFyZSBtZWFuaW5nZnVsIGluIEhUTUwgYXJlIGNvbnZlcnRlZCB0bwovLy8gSFRNTCBlbnRpdGllcyAobGlrZSBgJmFtcDtgIGZvciBgJmApLgovLy8KLy8vIFRoZSBnZW5lcmFsIGNvbnZlcnRlciBlc2NhcGVzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG1lYW5pbmdmdWwgaW4gSFRNTAovLy8gYXR0cmlidXRlcyBvciBub3JtYWwgZWxlbWVudCBjb250ZXh0LiBFbGVtZW50cyB3aXRoIHNwZWNpYWwgY29udGVudCB0eXBlcwovLy8gKGxpa2UgQ1NTIG9yIEphdmFTY3JpcHQpIG1heSBuZWVkIGEgbW9yZSBzcGVjaWFsaXplZCBlc2NhcGluZyB0aGF0Ci8vLyB1bmRlcnN0YW5kcyB0aGF0IGNvbnRlbnQgdHlwZS4KLy8vCi8vLyBJZiB0aGUgY29udGV4dCB3aGVyZSB0aGUgdGV4dCB3aWxsIGJlIGluc2VydGVkIGlzIGtub3duIGluIG1vcmUgZGV0YWlsLAovLy8gaXQncyBwb3NzaWJsZSB0byBvbWl0IGVzY2FwaW5nIHNvbWUgY2hhcmFjdGVycyAobGlrZSBxdW90ZXMgd2hlbiBub3QKLy8vIGluc2lkZSBhbiBhdHRyaWJ1dGUgdmFsdWUpLgovLy8KLy8vIFRoZSBlc2NhcGVkIHRleHQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgcXVvdGVkIEhUTUwgYXR0cmlidXRlcyB2YWx1ZXMKLy8vIG9yIGFzIHRleHQgY29udGVudCBvZiBhIG5vcm1hbCBlbGVtZW50LiBVc2luZyB0aGUgZXNjYXBlZCB0ZXh0IGluc2lkZSBhCi8vLyB0YWcsIGJ1dCBub3QgaW5zaWRlIGEgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZSwgaXMgc3RpbGwgZGFuZ2Vyb3VzLgpjb25zdCBIdG1sRXNjYXBlIGh0bWxFc2NhcGUgPSBIdG1sRXNjYXBlKCk7CgovLy8gSFRNTCBlc2NhcGUgbW9kZXMuCi8vLwovLy8gQWxsb3dzIHNwZWNpZnlpbmcgYSBtb2RlIGZvciBIVE1MIGVzY2FwaW5nIHRoYXQgZGVwZW5kIG9uIHRoZSBjb250ZXh0Ci8vLyB3aGVyZSB0aGUgZXNjYXBlZCByZXN1bHQgaXMgZ29pbmcgdG8gYmUgdXNlZC4KLy8vIFRoZSByZWxldmFudCBjb250ZXh0cyBhcmU6Ci8vLwovLy8gKiBhcyB0ZXh0IGNvbnRlbnQgb2YgYW4gSFRNTCBlbGVtZW50LgovLy8gKiBhcyB2YWx1ZSBvZiBhIChzaW5nbGUtIG9yIGRvdWJsZS0pIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuCi8vLwovLy8gQWxsIG1vZGVzIHJlcXVpcmUgZXNjYXBpbmcgb2YgYCZgIChhbXBlcnNhbmQpIGNoYXJhY3RlcnMsIGFuZCBtYXkKLy8vIGVuYWJsZSBlc2NhcGluZyBvZiBtb3JlIGNoYXJhY3RlcnMuCi8vLwovLy8gQ3VzdG9tIGVzY2FwZSBtb2RlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgW0h0bWxFc2NhcGVNb2RlLkh0bWxFc2NhcGVNb2RlXQovLy8gY29uc3RydWN0b3IuCmNsYXNzIEh0bWxFc2NhcGVNb2RlIHsKICBmaW5hbCBTdHJpbmcgX25hbWU7CgogIC8vLyBXaGV0aGVyIHRvIGVzY2FwZSAnPCcgYW5kICc+Jy4KICBmaW5hbCBib29sIGVzY2FwZUx0R3Q7CgogIC8vLyBXaGV0aGVyIHRvIGVzY2FwZSAnIicgKHF1b3RlKS4KICBmaW5hbCBib29sIGVzY2FwZVF1b3Q7CgogIC8vLyBXaGV0aGVyIHRvIGVzY2FwZSAiJyIgKGFwb3N0cm9waGUpLgogIGZpbmFsIGJvb2wgZXNjYXBlQXBvczsKCiAgLy8vIFdoZXRoZXIgdG8gZXNjYXBlICIvIiAoZm9yd2FyZCBzbGFzaCwgc29saWR1cykuCiAgLy8vCiAgLy8vIEVzY2FwaW5nIGEgc2xhc2ggaXMgcmVjb21tZW5kZWQgdG8gYXZvaWQgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgYXR0YWNrcyBieQogIC8vLyBbdGhlIE9wZW4gV2ViIEFwcGxpY2F0aW9uIFNlY3VyaXR5IFByb2plY3RdKGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTXyhDcm9zc19TaXRlX1NjcmlwdGluZylfUHJldmVudGlvbl9DaGVhdF9TaGVldCNSVUxFXy4yMzFfLV9IVE1MX0VzY2FwZV9CZWZvcmVfSW5zZXJ0aW5nX1VudHJ1c3RlZF9EYXRhX2ludG9fSFRNTF9FbGVtZW50X0NvbnRlbnQpCiAgZmluYWwgYm9vbCBlc2NhcGVTbGFzaDsKCiAgLy8vIERlZmF1bHQgZXNjYXBpbmcgbW9kZSB3aGljaCBlc2NhcGUgYWxsIGNoYXJhY3RlcnMuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHQgb2Ygc3VjaCBhbiBlc2NhcGluZyBpcyB1c2FibGUgYm90aCBpbiBlbGVtZW50IGNvbnRlbnQgYW5kCiAgLy8vIGluIGFueSBhdHRyaWJ1dGUgdmFsdWUuCiAgLy8vCiAgLy8vIFRoZSBlc2NhcGluZyBvbmx5IHdvcmtzIGZvciBlbGVtZW50cyB3aXRoIG5vcm1hbCBIVE1MIGNvbnRlbnQsCiAgLy8vIGFuZCBub3QgZm9yLCBmb3IgZXhhbXBsZSwgc2NyaXB0IG9yIHN0eWxlIGVsZW1lbnQgY29udGVudCwKICAvLy8gd2hpY2ggcmVxdWlyZSBlc2NhcGVzIG1hdGNoaW5nIHRoZWlyIHBhcnRpY3VsYXIgY29udGVudCBzeW50YXguCiAgc3RhdGljIGNvbnN0IEh0bWxFc2NhcGVNb2RlIHVua25vd24gPQogICAgICBIdG1sRXNjYXBlTW9kZS5fKCd1bmtub3duJywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CgogIC8vLyBFc2NhcGluZyBtb2RlIGZvciB0ZXh0IGdvaW5nIGludG8gZG91YmxlLXF1b3RlZCBIVE1MIGF0dHJpYnV0ZSB2YWx1ZXMuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHQgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZSBjb250ZW50IG9mIGFuIHVucXVvdGVkCiAgLy8vIG9yIHNpbmdsZS1xdW90ZWQgYXR0cmlidXRlIHZhbHVlLgogIC8vLwogIC8vLyBFc2NhcGVzIGRvdWJsZSBxdW90ZXMgKGAiYCkgYnV0IG5vdCBzaW5nbGUgcXVvdGVzIChgJ2ApLAogIC8vLyBhbmQgZXNjYXBlcyBgPGAgYW5kIGA+YCBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFsbG93ZWQKICAvLy8gaW4gc3RyaWN0IFhIVE1MIGF0dHJpYnV0ZXMKICBzdGF0aWMgY29uc3QgSHRtbEVzY2FwZU1vZGUgYXR0cmlidXRlID0KICAgICAgSHRtbEVzY2FwZU1vZGUuXygnYXR0cmlidXRlJywgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKCiAgLy8vIEVzY2FwaW5nIG1vZGUgZm9yIHRleHQgZ29pbmcgaW50byBzaW5nbGUtcXVvdGVkIEhUTUwgYXR0cmlidXRlIHZhbHVlcy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIGNvbnRlbnQgb2YgYW4gdW5xdW90ZWQKICAvLy8gb3IgZG91YmxlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuCiAgLy8vCiAgLy8vIEVzY2FwZXMgc2luZ2xlIHF1b3RlcyAoYCdgKSBidXQgbm90IGRvdWJsZSBxdW90ZXMgKGAiYCksCiAgLy8vIGFuZCBlc2NhcGVzIGA8YCBhbmQgYD5gIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYWxsb3dlZAogIC8vLyBpbiBzdHJpY3QgWEhUTUwgYXR0cmlidXRlcwogIHN0YXRpYyBjb25zdCBIdG1sRXNjYXBlTW9kZSBzcUF0dHJpYnV0ZSA9CiAgICAgIEh0bWxFc2NhcGVNb2RlLl8oJ2F0dHJpYnV0ZScsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CgogIC8vLyBFc2NhcGluZyBtb2RlIGZvciB0ZXh0IGdvaW5nIGludG8gSFRNTCBlbGVtZW50IGNvbnRlbnQuCiAgLy8vCiAgLy8vIFRoZSBlc2NhcGluZyBvbmx5IHdvcmtzIGZvciBlbGVtZW50cyB3aXRoIG5vcm1hbCBIVE1MIGNvbnRlbnQsCiAgLy8vIGFuZCBub3QgZm9yLCBmb3IgZXhhbXBsZSwgc2NyaXB0IG9yIHN0eWxlIGVsZW1lbnQgY29udGVudCwKICAvLy8gd2hpY2ggcmVxdWlyZSBlc2NhcGVzIG1hdGNoaW5nIHRoZWlyIHBhcnRpY3VsYXIgY29udGVudCBzeW50YXguCiAgLy8vCiAgLy8vIEVzY2FwZXMgYDxgIGFuZCBgPmAgY2hhcmFjdGVycy4KICBzdGF0aWMgY29uc3QgSHRtbEVzY2FwZU1vZGUgZWxlbWVudCA9CiAgICAgIEh0bWxFc2NhcGVNb2RlLl8oJ2VsZW1lbnQnLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKCiAgY29uc3QgSHRtbEVzY2FwZU1vZGUuXyh0aGlzLl9uYW1lLCB0aGlzLmVzY2FwZUx0R3QsIHRoaXMuZXNjYXBlUXVvdCwKICAgICAgdGhpcy5lc2NhcGVBcG9zLCB0aGlzLmVzY2FwZVNsYXNoKTsKCiAgLy8vIENyZWF0ZSBhIGN1c3RvbSBlc2NhcGluZyBtb2RlLgogIC8vLwogIC8vLyBBbGwgbW9kZXMgZXNjYXBlIGAmYC4KICAvLy8gVGhlIG1vZGUgY2FuIGZ1cnRoZXIgYmUgc2V0IHRvIGVzY2FwZSBgPGAgYW5kIGA+YCAoW2VzY2FwZUx0R3RdKSwKICAvLy8gYCJgIChbZXNjYXBlUXVvdF0pLCBgJ2AgKFtlc2NhcGVBcG9zXSksIGFuZC9vciBgL2AgKFtlc2NhcGVTbGFzaF0pLgogIGNvbnN0IEh0bWxFc2NhcGVNb2RlKAogICAgICB7U3RyaW5nIG5hbWUgPSAiY3VzdG9tIiwKICAgICAgdGhpcy5lc2NhcGVMdEd0ID0gZmFsc2UsCiAgICAgIHRoaXMuZXNjYXBlUXVvdCA9IGZhbHNlLAogICAgICB0aGlzLmVzY2FwZUFwb3MgPSBmYWxzZSwKICAgICAgdGhpcy5lc2NhcGVTbGFzaCA9IGZhbHNlfSkKICAgICAgOiBfbmFtZSA9IG5hbWU7CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9uYW1lOwp9CgovLy8gQ29udmVydGVyIHdoaWNoIGVzY2FwZXMgY2hhcmFjdGVycyB3aXRoIHNwZWNpYWwgbWVhbmluZyBpbiBIVE1MLgovLy8KLy8vIFRoZSBjb252ZXJ0ZXIgZmluZHMgY2hhcmFjdGVycyB0aGF0IGFyZSBzaWduaWZpY2FudCBpbiBIVE1MIHNvdXJjZSBhbmQKLy8vIHJlcGxhY2VzIHRoZW0gd2l0aCBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuCi8vLwovLy8gVGhlIGNoYXJhY3RlcnMgdGhhdCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYXJlOgovLy8KLy8vICogYCZgIChhbXBlcnNhbmQpIGFsd2F5cyBuZWVkIHRvIGJlIGVzY2FwZWQuCi8vLyAqIGA8YCAobGVzcyB0aGFuKSBhbmQgJz4nIChncmVhdGVyIHRoYW4pIHdoZW4gaW5zaWRlIGFuIGVsZW1lbnQuCi8vLyAqIGAiYCAocXVvdGUpIHdoZW4gaW5zaWRlIGEgZG91YmxlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuCi8vLyAqIGAnYCAoYXBvc3Ryb3BoZSkgd2hlbiBpbnNpZGUgYSBzaW5nbGUtcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4KLy8vICAgICAgIEFwb3N0cm9waGUgaXMgZXNjYXBlZCBhcyBgJiMzOTtgIGluc3RlYWQgb2YgYCZhcG9zO2Agc2luY2UKLy8vICAgICAgIG5vdCBhbGwgYnJvd3NlcnMgdW5kZXJzdGFuZCBgJmFwb3M7YC4KLy8vICogYC9gIChzbGFzaCkgaXMgcmVjb21tZW5kZWQgdG8gYmUgZXNjYXBlZCBiZWNhdXNlIGl0IG1heSBiZSB1c2VkCi8vLyAgICAgICB0byB0ZXJtaW5hdGUgYW4gZWxlbWVudCBpbiBzb21lIEhUTUwgZGlhbGVjdHMuCi8vLwovLy8gRXNjYXBpbmcgYD5gIChncmVhdGVyIHRoYW4pIGlzbid0IG5lY2Vzc2FyeSwgYnV0IHRoZSByZXN1bHQgaXMgb2Z0ZW4KLy8vIGZvdW5kIHRvIGJlIGVhc2llciB0byByZWFkIGlmIGdyZWF0ZXItdGhhbiBpcyBhbHNvIGVzY2FwZWQgd2hlbmV2ZXIKLy8vIGxlc3MtdGhhbiBpcy4KY2xhc3MgSHRtbEVzY2FwZSBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIFN0cmluZz4gewogIC8vLyBUaGUgW0h0bWxFc2NhcGVNb2RlXSB1c2VkIGJ5IHRoZSBjb252ZXJ0ZXIuCiAgZmluYWwgSHRtbEVzY2FwZU1vZGUgbW9kZTsKCiAgLy8vIENyZWF0ZSBjb252ZXJ0ZXIgdGhhdCBlc2NhcGVzIEhUTUwgY2hhcmFjdGVycy4KICAvLy8KICAvLy8gSWYgW21vZGVdIGlzIHByb3ZpZGVkIGFzIGVpdGhlciBbSHRtbEVzY2FwZU1vZGUuYXR0cmlidXRlXSBvcgogIC8vLyBbSHRtbEVzY2FwZU1vZGUuZWxlbWVudF0sIG9ubHkgdGhlIGNvcnJlc3BvbmRpbmcgc3Vic2V0IG9mIEhUTUwKICAvLy8gY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4KICAvLy8gVGhlIGRlZmF1bHQgaXMgdG8gZXNjYXBlIGFsbCBIVE1MIGNoYXJhY3RlcnMuCiAgY29uc3QgSHRtbEVzY2FwZShbdGhpcy5tb2RlID0gSHRtbEVzY2FwZU1vZGUudW5rbm93bl0pOwoKICBTdHJpbmcgY29udmVydChTdHJpbmcgdGV4dCkgewogICAgdmFyIHZhbCA9IF9jb252ZXJ0KHRleHQsIDAsIHRleHQubGVuZ3RoKTsKICAgIHJldHVybiB2YWwgPT0gbnVsbCA/IHRleHQgOiB2YWw7CiAgfQoKICAvLy8gQ29udmVydHMgdGhlIHN1YnN0cmluZyBvZiB0ZXh0IGZyb20gc3RhcnQgdG8gZW5kLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiBubyBjaGFuZ2VzIHdlcmUgbmVjZXNzYXJ5LCBvdGhlcndpc2UgcmV0dXJucwogIC8vLyB0aGUgY29udmVydGVkIHN0cmluZy4KICBTdHJpbmcgX2NvbnZlcnQoU3RyaW5nIHRleHQsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgU3RyaW5nQnVmZmVyIHJlc3VsdDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaCA9IHRleHRbaV07CiAgICAgIFN0cmluZyByZXBsYWNlbWVudDsKICAgICAgc3dpdGNoIChjaCkgewogICAgICAgIGNhc2UgJyYnOgogICAgICAgICAgcmVwbGFjZW1lbnQgPSAnJmFtcDsnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnIic6CiAgICAgICAgICBpZiAobW9kZS5lc2NhcGVRdW90KSByZXBsYWNlbWVudCA9ICcmcXVvdDsnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiJyI6CiAgICAgICAgICBpZiAobW9kZS5lc2NhcGVBcG9zKSByZXBsYWNlbWVudCA9ICcmIzM5Oyc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICc8JzoKICAgICAgICAgIGlmIChtb2RlLmVzY2FwZUx0R3QpIHJlcGxhY2VtZW50ID0gJyZsdDsnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnPic6CiAgICAgICAgICBpZiAobW9kZS5lc2NhcGVMdEd0KSByZXBsYWNlbWVudCA9ICcmZ3Q7JzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgaWYgKG1vZGUuZXNjYXBlU2xhc2gpIHJlcGxhY2VtZW50ID0gJyYjNDc7JzsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgICAgcmVzdWx0ID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBpZiAoaSA+IHN0YXJ0KSByZXN1bHQud3JpdGUodGV4dC5zdWJzdHJpbmcoc3RhcnQsIGkpKTsKICAgICAgICByZXN1bHQud3JpdGUocmVwbGFjZW1lbnQpOwogICAgICAgIHN0YXJ0ID0gaSArIDE7CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoZW5kID4gc3RhcnQpIHJlc3VsdC53cml0ZSh0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSk7CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICByZXR1cm4gX0h0bWxFc2NhcGVTaW5rKHRoaXMsCiAgICAgICAgc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luayA/IHNpbmsgOiBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspKTsKICB9Cn0KCmNsYXNzIF9IdG1sRXNjYXBlU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgSHRtbEVzY2FwZSBfZXNjYXBlOwogIGZpbmFsIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9zaW5rOwoKICBfSHRtbEVzY2FwZVNpbmsodGhpcy5fZXNjYXBlLCB0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIHZhciB2YWwgPSBfZXNjYXBlLl9jb252ZXJ0KGNodW5rLCBzdGFydCwgZW5kKTsKICAgIGlmICh2YWwgPT0gbnVsbCkgewogICAgICBfc2luay5hZGRTbGljZShjaHVuaywgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW5rLmFkZCh2YWwpOwogICAgICBpZiAoaXNMYXN0KSBfc2luay5jbG9zZSgpOwogICAgfQogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CoDhAE5OPAEWAUQETUYqBE1ORyMETEkgBE5MRiwBFwRKMh8EKkEERigEUREXFgElGQElGQEqGQE2Bk+A1xoBOQZLHgZFQUYoOwFNBkIoBj9GISo/AU0GQigGP0YhLD8BPgZFQUYGJig+AUcqASUGHEhKGB8fHx8hFgEeAgFFBEs0BDMEMUU/REUwRjkESUgSNTIdATUGREYeNDoBIC4lBAE4BkUcNRkoGBoUEiEREjcREjYREjUREjUREjcRCCEjPyMXCAYlPx4EAUMhUAQCATkcJAEtAUEzFzENFiEGBAEREwQCAR1kYXJ0OmNvbnZlcnQvaHRtbF9lc2NhcGUuZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC9qc29uLmRhcnTAAIqMLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIEVycm9yIHRocm93biBieSBKU09OIHNlcmlhbGl6YXRpb24gaWYgYW4gb2JqZWN0IGNhbm5vdCBiZSBzZXJpYWxpemVkLgovLy8KLy8vIFRoZSBbdW5zdXBwb3J0ZWRPYmplY3RdIGZpZWxkIGhvbGRzIHRoYXQgb2JqZWN0IHRoYXQgZmFpbGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi8vLwovLy8gSWYgYW4gb2JqZWN0IGlzbid0IGRpcmVjdGx5IHNlcmlhbGl6YWJsZSwgdGhlIHNlcmlhbGl6ZXIgY2FsbHMgdGhlIGB0b0pzb25gCi8vLyBtZXRob2Qgb24gdGhlIG9iamVjdC4gSWYgdGhhdCBjYWxsIGZhaWxzLCB0aGUgZXJyb3Igd2lsbCBiZSBzdG9yZWQgaW4gdGhlCi8vLyBbY2F1c2VdIGZpZWxkLiBJZiB0aGUgY2FsbCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGlzbid0IGRpcmVjdGx5Ci8vLyBzZXJpYWxpemFibGUsIHRoZSBbY2F1c2VdIGlzIG51bGwuCmNsYXNzIEpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yIGV4dGVuZHMgRXJyb3IgewogIC8vLyBUaGUgb2JqZWN0IHRoYXQgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuCiAgZmluYWwgT2JqZWN0IHVuc3VwcG9ydGVkT2JqZWN0OwoKICAvLy8gVGhlIGV4Y2VwdGlvbiB0aHJvd24gd2hlbiB0cnlpbmcgdG8gY29udmVydCB0aGUgb2JqZWN0LgogIGZpbmFsIE9iamVjdCBjYXVzZTsKCiAgLy8vIFRoZSBwYXJ0aWFsIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiwgdXAgdW50aWwgdGhlIGVycm9yIGhhcHBlbmVkLgogIC8vLwogIC8vLyBNYXkgYmUgbnVsbC4KICBmaW5hbCBTdHJpbmcgcGFydGlhbFJlc3VsdDsKCiAgSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3IodGhpcy51bnN1cHBvcnRlZE9iamVjdCwKICAgICAge3RoaXMuY2F1c2UsIHRoaXMucGFydGlhbFJlc3VsdH0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICB2YXIgc2FmZVN0cmluZyA9IEVycm9yLnNhZmVUb1N0cmluZyh1bnN1cHBvcnRlZE9iamVjdCk7CiAgICBTdHJpbmcgcHJlZml4OwogICAgaWYgKGNhdXNlICE9IG51bGwpIHsKICAgICAgcHJlZml4ID0gIkNvbnZlcnRpbmcgb2JqZWN0IHRvIGFuIGVuY29kYWJsZSBvYmplY3QgZmFpbGVkOiI7CiAgICB9IGVsc2UgewogICAgICBwcmVmaXggPSAiQ29udmVydGluZyBvYmplY3QgZGlkIG5vdCByZXR1cm4gYW4gZW5jb2RhYmxlIG9iamVjdDoiOwogICAgfQogICAgcmV0dXJuICIkcHJlZml4ICRzYWZlU3RyaW5nIjsKICB9Cn0KCi8vLyBSZXBvcnRzIHRoYXQgYW4gb2JqZWN0IGNvdWxkIG5vdCBiZSBzdHJpbmdpZmllZCBkdWUgdG8gY3ljbGljIHJlZmVyZW5jZXMuCi8vLwovLy8gQW4gb2JqZWN0IHRoYXQgcmVmZXJlbmNlcyBpdHNlbGYgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYnkKLy8vIFtKc29uQ29kZWMuZW5jb2RlXS9bSnNvbkVuY29kZXIuY29udmVydF0uCi8vLyBXaGVuIHRoZSBjeWNsZSBpcyBkZXRlY3RlZCwgYSBbSnNvbkN5Y2xpY0Vycm9yXSBpcyB0aHJvd24uCmNsYXNzIEpzb25DeWNsaWNFcnJvciBleHRlbmRzIEpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yIHsKICAvLy8gVGhlIGZpcnN0IG9iamVjdCB0aGF0IHdhcyBkZXRlY3RlZCBhcyBwYXJ0IG9mIGEgY3ljbGUuCiAgSnNvbkN5Y2xpY0Vycm9yKE9iamVjdCBvYmplY3QpIDogc3VwZXIob2JqZWN0KTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiQ3ljbGljIGVycm9yIGluIEpTT04gc3RyaW5naWZ5IjsKfQoKLy8vIEFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBbSnNvbkNvZGVjXS4KLy8vCi8vLyBUaGlzIGluc3RhbmNlIHByb3ZpZGVzIGEgY29udmVuaWVudCBhY2Nlc3MgdG8gdGhlIG1vc3QgY29tbW9uIEpTT04KLy8vIHVzZSBjYXNlcy4KLy8vCi8vLyBFeGFtcGxlczoKLy8vCi8vLyAgICAgdmFyIGVuY29kZWQgPSBqc29uLmVuY29kZShbMSwgMiwgeyAiYSI6IG51bGwgfV0pOwovLy8gICAgIHZhciBkZWNvZGVkID0ganNvbi5kZWNvZGUoJ1siZm9vIiwgeyAiYmFyIjogNDk5IH1dJyk7Ci8vLwovLy8gVGhlIHRvcC1sZXZlbCBbanNvbkVuY29kZV0gYW5kIFtqc29uRGVjb2RlXSBmdW5jdGlvbnMgbWF5IGJlIHVzZWQgaW5zdGVhZCBpZgovLy8gYSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIHRoZSBbanNvbl0gY29uc3RhbnQuCmNvbnN0IEpzb25Db2RlYyBqc29uID0gSnNvbkNvZGVjKCk7CgovLy8gQ29udmVydHMgW3ZhbHVlXSB0byBhIEpTT04gc3RyaW5nLgovLy8KLy8vIElmIHZhbHVlIGNvbnRhaW5zIG9iamVjdHMgdGhhdCBhcmUgbm90IGRpcmVjdGx5IGVuY29kYWJsZSB0byBhIEpTT04KLy8vIHN0cmluZyAoYSB2YWx1ZSB0aGF0IGlzIG5vdCBhIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nLCBudWxsLCBsaXN0IG9yIGEgbWFwCi8vLyB3aXRoIHN0cmluZyBrZXlzKSwgdGhlIFt0b0VuY29kYWJsZV0gZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IGl0IHRvIGFuCi8vLyBvYmplY3QgdGhhdCBtdXN0IGJlIGRpcmVjdGx5IGVuY29kYWJsZS4KLy8vCi8vLyBJZiBbdG9FbmNvZGFibGVdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZQovLy8gcmVzdWx0IG9mIGNhbGxpbmcgYC50b0pzb24oKWAgb24gdGhlIHVuZW5jb2RhYmxlIG9iamVjdC4KLy8vCi8vLyBTaG9ydGhhbmQgZm9yIFtqc29uLmVuY29kZV0uIFVzZWZ1bCBpZiBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlIGdsb2JhbAovLy8gW2pzb25dIGNvbnN0YW50LgpTdHJpbmcganNvbkVuY29kZShPYmplY3Qgb2JqZWN0LCB7T2JqZWN0IHRvRW5jb2RhYmxlKE9iamVjdCBub25FbmNvZGFibGUpfSkgPT4KICAgIGpzb24uZW5jb2RlKG9iamVjdCwgdG9FbmNvZGFibGU6IHRvRW5jb2RhYmxlKTsKCi8vLyBQYXJzZXMgdGhlIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIEpzb24gb2JqZWN0LgovLy8KLy8vIFRoZSBvcHRpb25hbCBbcmV2aXZlcl0gZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggb2JqZWN0IG9yIGxpc3QKLy8vIHByb3BlcnR5IHRoYXQgaGFzIGJlZW4gcGFyc2VkIGR1cmluZyBkZWNvZGluZy4gVGhlIGBrZXlgIGFyZ3VtZW50IGlzIGVpdGhlcgovLy8gdGhlIGludGVnZXIgbGlzdCBpbmRleCBmb3IgYSBsaXN0IHByb3BlcnR5LCB0aGUgc3RyaW5nIG1hcCBrZXkgZm9yIG9iamVjdAovLy8gcHJvcGVydGllcywgb3IgYG51bGxgIGZvciB0aGUgZmluYWwgcmVzdWx0LgovLy8KLy8vIFRoZSBkZWZhdWx0IFtyZXZpdmVyXSAod2hlbiBub3QgcHJvdmlkZWQpIGlzIHRoZSBpZGVudGl0eSBmdW5jdGlvbi4KLy8vCi8vLyBTaG9ydGhhbmQgZm9yIFtqc29uLmRlY29kZV0uIFVzZWZ1bCBpZiBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlIGdsb2JhbAovLy8gW2pzb25dIGNvbnN0YW50LgpkeW5hbWljIGpzb25EZWNvZGUoU3RyaW5nIHNvdXJjZSwge09iamVjdCByZXZpdmVyKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSl9KSA9PgogICAganNvbi5kZWNvZGUoc291cmNlLCByZXZpdmVyOiByZXZpdmVyKTsKCi8vLyBBIFtKc29uQ29kZWNdIGVuY29kZXMgSlNPTiBvYmplY3RzIHRvIHN0cmluZ3MgYW5kIGRlY29kZXMgc3RyaW5ncyB0bwovLy8gSlNPTiBvYmplY3RzLgovLy8KLy8vIEV4YW1wbGVzOgovLy8KLy8vICAgICB2YXIgZW5jb2RlZCA9IGpzb24uZW5jb2RlKFsxLCAyLCB7ICJhIjogbnVsbCB9XSk7Ci8vLyAgICAgdmFyIGRlY29kZWQgPSBqc29uLmRlY29kZSgnWyJmb28iLCB7ICJiYXIiOiA0OTkgfV0nKTsKY2xhc3MgSnNvbkNvZGVjIGV4dGVuZHMgQ29kZWM8T2JqZWN0LCBTdHJpbmc+IHsKICBmaW5hbCBGdW5jdGlvbihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIF9yZXZpdmVyOwogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKCiAgLy8vIENyZWF0ZXMgYSBgSnNvbkNvZGVjYCB3aXRoIHRoZSBnaXZlbiByZXZpdmVyIGFuZCBlbmNvZGluZyBmdW5jdGlvbi4KICAvLy8KICAvLy8gVGhlIFtyZXZpdmVyXSBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGRlY29kaW5nLiBJdCBpcyBpbnZva2VkIG9uY2UgZm9yCiAgLy8vIGVhY2ggb2JqZWN0IG9yIGxpc3QgcHJvcGVydHkgdGhhdCBoYXMgYmVlbiBwYXJzZWQuCiAgLy8vIFRoZSBga2V5YCBhcmd1bWVudCBpcyBlaXRoZXIgdGhlIGludGVnZXIgbGlzdCBpbmRleCBmb3IgYSBsaXN0IHByb3BlcnR5LAogIC8vLyB0aGUgc3RyaW5nIG1hcCBrZXkgZm9yIG9iamVjdCBwcm9wZXJ0aWVzLCBvciBgbnVsbGAgZm9yIHRoZSBmaW5hbCByZXN1bHQuCiAgLy8vCiAgLy8vIElmIFtyZXZpdmVyXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIHZhbHVlIGFyZ3VtZW50LgogIC8vLwogIC8vLyBUaGUgW3RvRW5jb2RhYmxlXSBmdW5jdGlvbiBpcyB1c2VkIGR1cmluZyBlbmNvZGluZy4gSXQgaXMgaW52b2tlZCBmb3IKICAvLy8gdmFsdWVzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSBlbmNvZGFibGUgdG8gYSBzdHJpbmcgKGEgdmFsdWUgdGhhdCBpcyBub3QgYQogIC8vLyBudW1iZXIsIGJvb2xlYW4sIHN0cmluZywgbnVsbCwgbGlzdCBvciBhIG1hcCB3aXRoIHN0cmluZyBrZXlzKS4gVGhlCiAgLy8vIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGlzIGRpcmVjdGx5IGVuY29kYWJsZS4gVGhlIGVsZW1lbnRzIG9mCiAgLy8vIGEgcmV0dXJuZWQgbGlzdCBhbmQgdmFsdWVzIG9mIGEgcmV0dXJuZWQgbWFwIGRvIG5vdCBuZWVkIHRvIGJlIGRpcmVjdGx5CiAgLy8vIGVuY29kYWJsZSwgYW5kIGlmIHRoZXkgYXJlbid0LCBgdG9FbmNvZGFibGVgIHdpbGwgYmUgdXNlZCBvbiB0aGVtIGFzIHdlbGwuCiAgLy8vIFBsZWFzZSBub3RpY2UgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBjYXVzZSBhbiBpbmZpbml0ZSByZWN1cnNpdmUgcmVncmVzcwogIC8vLyBpbiB0aGlzIHdheSwgYnkgZWZmZWN0aXZlbHkgY3JlYXRpbmcgYW4gaW5maW5pdGUgZGF0YSBzdHJ1Y3R1cmUgdGhyb3VnaAogIC8vLyByZXBlYXRlZCBjYWxsIHRvIGB0b0VuY29kYWJsZWAuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlCiAgLy8vIHJlc3VsdCBvZiBjYWxsaW5nIGAudG9Kc29uKClgIG9uIHRoZSB1bmVuY29kYWJsZSBvYmplY3QuCiAgY29uc3QgSnNvbkNvZGVjKHtyZXZpdmVyKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSksIHRvRW5jb2RhYmxlKHZhciBvYmplY3QpfSkKICAgICAgOiBfcmV2aXZlciA9IHJldml2ZXIsCiAgICAgICAgX3RvRW5jb2RhYmxlID0gdG9FbmNvZGFibGU7CgogIC8vLyBDcmVhdGVzIGEgYEpzb25Db2RlY2Agd2l0aCB0aGUgZ2l2ZW4gcmV2aXZlci4KICAvLy8KICAvLy8gVGhlIFtyZXZpdmVyXSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBvYmplY3Qgb3IgbGlzdCBwcm9wZXJ0eQogIC8vLyB0aGF0IGhhcyBiZWVuIHBhcnNlZCBkdXJpbmcgZGVjb2RpbmcuIFRoZSBga2V5YCBhcmd1bWVudCBpcyBlaXRoZXIgdGhlCiAgLy8vIGludGVnZXIgbGlzdCBpbmRleCBmb3IgYSBsaXN0IHByb3BlcnR5LCB0aGUgc3RyaW5nIG1hcCBrZXkgZm9yIG9iamVjdAogIC8vLyBwcm9wZXJ0aWVzLCBvciBgbnVsbGAgZm9yIHRoZSBmaW5hbCByZXN1bHQuCiAgSnNvbkNvZGVjLndpdGhSZXZpdmVyKHJldml2ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSkKICAgICAgOiB0aGlzKHJldml2ZXI6IHJldml2ZXIpOwoKICAvLy8gUGFyc2VzIHRoZSBzdHJpbmcgYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBKc29uIG9iamVjdC4KICAvLy8KICAvLy8gVGhlIG9wdGlvbmFsIFtyZXZpdmVyXSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBvYmplY3Qgb3IgbGlzdAogIC8vLyBwcm9wZXJ0eSB0aGF0IGhhcyBiZWVuIHBhcnNlZCBkdXJpbmcgZGVjb2RpbmcuIFRoZSBga2V5YCBhcmd1bWVudCBpcyBlaXRoZXIKICAvLy8gdGhlIGludGVnZXIgbGlzdCBpbmRleCBmb3IgYSBsaXN0IHByb3BlcnR5LCB0aGUgc3RyaW5nIG1hcCBrZXkgZm9yIG9iamVjdAogIC8vLyBwcm9wZXJ0aWVzLCBvciBgbnVsbGAgZm9yIHRoZSBmaW5hbCByZXN1bHQuCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IFtyZXZpdmVyXSAod2hlbiBub3QgcHJvdmlkZWQpIGlzIHRoZSBpZGVudGl0eSBmdW5jdGlvbi4KICBkeW5hbWljIGRlY29kZShTdHJpbmcgc291cmNlLCB7cmV2aXZlcihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpfSkgewogICAgcmV2aXZlciA/Pz0gX3Jldml2ZXI7CiAgICBpZiAocmV2aXZlciA9PSBudWxsKSByZXR1cm4gZGVjb2Rlci5jb252ZXJ0KHNvdXJjZSk7CiAgICByZXR1cm4gSnNvbkRlY29kZXIocmV2aXZlcikuY29udmVydChzb3VyY2UpOwogIH0KCiAgLy8vIENvbnZlcnRzIFt2YWx1ZV0gdG8gYSBKU09OIHN0cmluZy4KICAvLy8KICAvLy8gSWYgdmFsdWUgY29udGFpbnMgb2JqZWN0cyB0aGF0IGFyZSBub3QgZGlyZWN0bHkgZW5jb2RhYmxlIHRvIGEgSlNPTgogIC8vLyBzdHJpbmcgKGEgdmFsdWUgdGhhdCBpcyBub3QgYSBudW1iZXIsIGJvb2xlYW4sIHN0cmluZywgbnVsbCwgbGlzdCBvciBhIG1hcAogIC8vLyB3aXRoIHN0cmluZyBrZXlzKSwgdGhlIFt0b0VuY29kYWJsZV0gZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IGl0IHRvIGFuCiAgLy8vIG9iamVjdCB0aGF0IG11c3QgYmUgZGlyZWN0bHkgZW5jb2RhYmxlLgogIC8vLwogIC8vLyBJZiBbdG9FbmNvZGFibGVdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZQogIC8vLyByZXN1bHQgb2YgY2FsbGluZyBgLnRvSnNvbigpYCBvbiB0aGUgdW5lbmNvZGFibGUgb2JqZWN0LgogIFN0cmluZyBlbmNvZGUoT2JqZWN0IHZhbHVlLCB7dG9FbmNvZGFibGUob2JqZWN0KX0pIHsKICAgIHRvRW5jb2RhYmxlID8/PSBfdG9FbmNvZGFibGU7CiAgICBpZiAodG9FbmNvZGFibGUgPT0gbnVsbCkgcmV0dXJuIGVuY29kZXIuY29udmVydCh2YWx1ZSk7CiAgICByZXR1cm4gSnNvbkVuY29kZXIodG9FbmNvZGFibGUpLmNvbnZlcnQodmFsdWUpOwogIH0KCiAgSnNvbkVuY29kZXIgZ2V0IGVuY29kZXIgewogICAgaWYgKF90b0VuY29kYWJsZSA9PSBudWxsKSByZXR1cm4gY29uc3QgSnNvbkVuY29kZXIoKTsKICAgIHJldHVybiBKc29uRW5jb2RlcihfdG9FbmNvZGFibGUpOwogIH0KCiAgSnNvbkRlY29kZXIgZ2V0IGRlY29kZXIgewogICAgaWYgKF9yZXZpdmVyID09IG51bGwpIHJldHVybiBjb25zdCBKc29uRGVjb2RlcigpOwogICAgcmV0dXJuIEpzb25EZWNvZGVyKF9yZXZpdmVyKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGNvbnZlcnRzIEpTT04gb2JqZWN0cyB0byBzdHJpbmdzLgpjbGFzcyBKc29uRW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxPYmplY3QsIFN0cmluZz4gewogIC8vLyBUaGUgc3RyaW5nIHVzZWQgZm9yIGluZGVudGlvbi4KICAvLy8KICAvLy8gV2hlbiBnZW5lcmF0aW5nIG11bHRpLWxpbmUgb3V0cHV0LCB0aGlzIHN0cmluZyBpcyBpbnNlcnRlZCBvbmNlIGF0IHRoZQogIC8vLyBiZWdpbm5pbmcgb2YgZWFjaCBpbmRlbnRlZCBsaW5lIGZvciBlYWNoIGxldmVsIG9mIGluZGVudGF0aW9uLgogIC8vLwogIC8vLyBJZiBgbnVsbGAsIHRoZSBvdXRwdXQgaXMgZW5jb2RlZCBhcyBhIHNpbmdsZSBsaW5lLgogIGZpbmFsIFN0cmluZyBpbmRlbnQ7CgogIC8vLyBGdW5jdGlvbiBjYWxsZWQgb24gbm9uLWVuY29kYWJsZSBvYmplY3RzIHRvIHJldHVybiBhIHJlcGxhY2VtZW50CiAgLy8vIGVuY29kYWJsZSBvYmplY3QgdGhhdCB3aWxsIGJlIGVuY29kZWQgaW4gdGhlIG9yaWduYWwncyBwbGFjZS4KICBmaW5hbCBGdW5jdGlvbihkeW5hbWljKSBfdG9FbmNvZGFibGU7CgogIC8vLyBDcmVhdGVzIGEgSlNPTiBlbmNvZGVyLgogIC8vLwogIC8vLyBUaGUgSlNPTiBlbmNvZGVyIGhhbmRsZXMgbnVtYmVycywgc3RyaW5ncywgYm9vbGVhbnMsIG51bGwsIGxpc3RzIGFuZAogIC8vLyBtYXBzIHdpdGggc3RyaW5nIGtleXMgZGlyZWN0bHkuCiAgLy8vCiAgLy8vIEFueSBvdGhlciBvYmplY3QgaXMgYXR0ZW1wdGVkIGNvbnZlcnRlZCBieSBbdG9FbmNvZGFibGVdIHRvIGFuCiAgLy8vIG9iamVjdCB0aGF0IGlzIG9mIG9uZSBvZiB0aGUgY29udmVydGlibGUgdHlwZXMuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gY2FsbGluZyBgLnRvSnNvbigpYCBvbgogIC8vLyB0aGUgb2JqZWN0LgogIGNvbnN0IEpzb25FbmNvZGVyKFt0b0VuY29kYWJsZShvYmplY3QpXSkKICAgICAgOiBpbmRlbnQgPSBudWxsLAogICAgICAgIF90b0VuY29kYWJsZSA9IHRvRW5jb2RhYmxlOwoKICAvLy8gQ3JlYXRlcyBhIEpTT04gZW5jb2RlciB0aGF0IGNyZWF0ZXMgbXVsdGktbGluZSBKU09OLgogIC8vLwogIC8vLyBUaGUgZW5jb2Rpbmcgb2YgZWxlbWVudHMgb2YgbGlzdHMgYW5kIG1hcHMgYXJlIGluZGVudGVkIGFuZCBwdXQgb24gc2VwYXJhdGUKICAvLy8gbGluZXMuIFRoZSBbaW5kZW50XSBzdHJpbmcgaXMgcHJlcGVuZGVkIHRvIHRoZXNlIGVsZW1lbnRzLCBvbmNlIGZvciBlYWNoCiAgLy8vIGxldmVsIG9mIGluZGVudGF0aW9uLgogIC8vLwogIC8vLyBJZiBbaW5kZW50XSBpcyBgbnVsbGAsIHRoZSBvdXRwdXQgaXMgZW5jb2RlZCBhcyBhIHNpbmdsZSBsaW5lLgogIC8vLwogIC8vLyBUaGUgSlNPTiBlbmNvZGVyIGhhbmRsZXMgbnVtYmVycywgc3RyaW5ncywgYm9vbGVhbnMsIG51bGwsIGxpc3RzIGFuZAogIC8vLyBtYXBzIHdpdGggc3RyaW5nIGtleXMgZGlyZWN0bHkuCiAgLy8vCiAgLy8vIEFueSBvdGhlciBvYmplY3QgaXMgYXR0ZW1wdGVkIGNvbnZlcnRlZCBieSBbdG9FbmNvZGFibGVdIHRvIGFuCiAgLy8vIG9iamVjdCB0aGF0IGlzIG9mIG9uZSBvZiB0aGUgY29udmVydGlibGUgdHlwZXMuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gY2FsbGluZyBgLnRvSnNvbigpYCBvbgogIC8vLyB0aGUgb2JqZWN0LgogIGNvbnN0IEpzb25FbmNvZGVyLndpdGhJbmRlbnQodGhpcy5pbmRlbnQsIFt0b0VuY29kYWJsZShvYmplY3QpXSkKICAgICAgOiBfdG9FbmNvZGFibGUgPSB0b0VuY29kYWJsZTsKCiAgLy8vIENvbnZlcnRzIFtvYmplY3RdIHRvIGEgSlNPTiBbU3RyaW5nXS4KICAvLy8KICAvLy8gRGlyZWN0bHkgc2VyaWFsaXphYmxlIHZhbHVlcyBhcmUgW251bV0sIFtTdHJpbmddLCBbYm9vbF0sIGFuZCBbTnVsbF0sIGFzCiAgLy8vIHdlbGwgYXMgc29tZSBbTGlzdF0gYW5kIFtNYXBdIHZhbHVlcy4gRm9yIFtMaXN0XSwgdGhlIGVsZW1lbnRzIG11c3QgYWxsIGJlCiAgLy8vIHNlcmlhbGl6YWJsZS4gRm9yIFtNYXBdLCB0aGUga2V5cyBtdXN0IGJlIFtTdHJpbmddIGFuZCB0aGUgdmFsdWVzIG11c3QgYmUKICAvLy8gc2VyaWFsaXphYmxlLgogIC8vLwogIC8vLyBJZiBhIHZhbHVlIG9mIGFueSBvdGhlciB0eXBlIGlzIGF0dGVtcHRlZCB0byBiZSBzZXJpYWxpemVkLCB0aGUKICAvLy8gYHRvRW5jb2RhYmxlYCBmdW5jdGlvbiBwcm92aWRlZCBpbiB0aGUgY29uc3RydWN0b3IgaXMgY2FsbGVkIHdpdGggdGhlIHZhbHVlCiAgLy8vIGFzIGFyZ3VtZW50LiBUaGUgcmVzdWx0LCB3aGljaCBtdXN0IGJlIGEgZGlyZWN0bHkgc2VyaWFsaXphYmxlIHZhbHVlLCBpcwogIC8vLyBzZXJpYWxpemVkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLgogIC8vLwogIC8vLyBJZiB0aGUgY29udmVyc2lvbiB0aHJvd3MsIG9yIHJldHVybnMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBkaXJlY3RseQogIC8vLyBzZXJpYWxpemFibGUsIGEgW0pzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yXSBleGNlcHRpb24gaXMgdGhyb3duLgogIC8vLyBJZiB0aGUgY2FsbCB0aHJvd3MsIHRoZSBlcnJvciBpcyBjYXVnaHQgYW5kIHN0b3JlZCBpbiB0aGUKICAvLy8gW0pzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yXSdzIFs6Y2F1c2U6XSBmaWVsZC4KICAvLy8KICAvLy8gSWYgYSBbTGlzdF0gb3IgW01hcF0gY29udGFpbnMgYSByZWZlcmVuY2UgdG8gaXRzZWxmLCBkaXJlY3RseSBvciB0aHJvdWdoCiAgLy8vIG90aGVyIGxpc3RzIG9yIG1hcHMsIGl0IGNhbm5vdCBiZSBzZXJpYWxpemVkIGFuZCBhIFtKc29uQ3ljbGljRXJyb3JdIGlzCiAgLy8vIHRocm93bi4KICAvLy8KICAvLy8gW29iamVjdF0gc2hvdWxkIG5vdCBjaGFuZ2UgZHVyaW5nIHNlcmlhbGl6YXRpb24uCiAgLy8vCiAgLy8vIElmIGFuIG9iamVjdCBpcyBzZXJpYWxpemVkIG1vcmUgdGhhbiBvbmNlLCBbY29udmVydF0gbWF5IGNhY2hlIHRoZSB0ZXh0CiAgLy8vIGZvciBpdC4gSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBjb250ZW50IG9mIGFuIG9iamVjdCBjaGFuZ2VzIGFmdGVyIGl0IGlzCiAgLy8vIGZpcnN0IHNlcmlhbGl6ZWQsIHRoZSBuZXcgdmFsdWVzIG1heSBub3QgYmUgcmVmbGVjdGVkIGluIHRoZSByZXN1bHQuCiAgU3RyaW5nIGNvbnZlcnQoT2JqZWN0IG9iamVjdCkgPT4KICAgICAgX0pzb25TdHJpbmdTdHJpbmdpZmllci5zdHJpbmdpZnkob2JqZWN0LCBfdG9FbmNvZGFibGUsIGluZGVudCk7CgogIC8vLyBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIFRoZSBjb252ZXJ0ZXIgd29ya3MgbW9yZSBlZmZpY2llbnRseSBpZiB0aGUgZ2l2ZW4gW3NpbmtdIGlzIGEKICAvLy8gW1N0cmluZ0NvbnZlcnNpb25TaW5rXS4KICAvLy8KICAvLy8gUmV0dXJucyBhIGNodW5rZWQtY29udmVyc2lvbiBzaW5rIHRoYXQgYWNjZXB0cyBhdCBtb3N0IG9uZSBvYmplY3QuIEl0IGlzCiAgLy8vIGFuIGVycm9yIHRvIGludm9rZSBgYWRkYCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgcmV0dXJuZWQgc2luay4KICBDaHVua2VkQ29udmVyc2lvblNpbms8T2JqZWN0PiBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICBpZiAoc2luayBpcyBfVXRmOEVuY29kZXJTaW5rKSB7CiAgICAgIHJldHVybiBfSnNvblV0ZjhFbmNvZGVyU2luaygKICAgICAgICAgIHNpbmsuX3NpbmssCiAgICAgICAgICBfdG9FbmNvZGFibGUsCiAgICAgICAgICBKc29uVXRmOEVuY29kZXIuX3V0ZjhFbmNvZGUoaW5kZW50KSwKICAgICAgICAgIEpzb25VdGY4RW5jb2Rlci5fZGVmYXVsdEJ1ZmZlclNpemUpOwogICAgfQogICAgcmV0dXJuIF9Kc29uRW5jb2RlclNpbmsoCiAgICAgICAgc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luayA/IHNpbmsgOiBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspLAogICAgICAgIF90b0VuY29kYWJsZSwKICAgICAgICBpbmRlbnQpOwogIH0KCiAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgY2xhc3MncyBiaW5kLCB0byBwcm92aWRlIGEgYmV0dGVyIHR5cGUuCiAgU3RyZWFtPFN0cmluZz4gYmluZChTdHJlYW08T2JqZWN0PiBzdHJlYW0pID0+IHN1cGVyLmJpbmQoc3RyZWFtKTsKCiAgQ29udmVydGVyPE9iamVjdCwgVD4gZnVzZTxUPihDb252ZXJ0ZXI8U3RyaW5nLCBUPiBvdGhlcikgewogICAgaWYgKG90aGVyIGlzIFV0ZjhFbmNvZGVyICYmIFQgaXMgTGlzdDxpbnQ+KSB7CiAgICAgIC8vIFRoZSBpbnN0YW5jZSBjaGVjayBndWFyYW50ZWVzIHRoYXQgYFRgIGlzIChhIHN1YnR5cGUgb2YpIExpc3Q8aW50PiwKICAgICAgLy8gYnV0IHRoZSBzdGF0aWMgdHlwZSBzeXN0ZW0gZG9lc24ndCBrbm93IHRoYXQsIGFuZCBzbyB3ZSBjYXN0LgogICAgICAvLyBDYXN0IHRocm91Z2ggZHluYW1pYyB0byBrZWVwIHRoZSBjYXN0IGltcGxpY2l0IGZvciBidWlsZHMgdXNpbmcKICAgICAgLy8gdW5jaGVja2VkIGltcGxpY2l0IGNhc3RzLgogICAgICByZXR1cm4gSnNvblV0ZjhFbmNvZGVyKGluZGVudCwgX3RvRW5jb2RhYmxlKSBhcyBkeW5hbWljOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmZ1c2U8VD4ob3RoZXIpOwogIH0KfQoKLy8vIEVuY29kZXIgdGhhdCBlbmNvZGVzIGEgc2luZ2xlIG9iamVjdCBhcyBhIFVURi04IGVuY29kZWQgSlNPTiBzdHJpbmcuCi8vLwovLy8gVGhpcyBlbmNvZGVyIHdvcmtzIGVxdWl2YWxlbnRseSB0byBmaXJzdCBjb252ZXJ0aW5nIHRoZSBvYmplY3QgdG8KLy8vIGEgSlNPTiBzdHJpbmcsIGFuZCB0aGVuIFVURi04IGVuY29kaW5nIHRoZSBzdHJpbmcsIGJ1dCB3aXRob3V0Ci8vLyBjcmVhdGluZyBhbiBpbnRlcm1lZGlhdGUgc3RyaW5nLgpjbGFzcyBKc29uVXRmOEVuY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8T2JqZWN0LCBMaXN0PGludD4+IHsKICAvLy8gRGVmYXVsdCBidWZmZXIgc2l6ZSB1c2VkIGJ5IHRoZSBKU09OLXRvLVVURi04IGVuY29kZXIuCiAgc3RhdGljIGNvbnN0IGludCBfZGVmYXVsdEJ1ZmZlclNpemUgPSAyNTY7CiAgQGRlcHJlY2F0ZWQKICBzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfQlVGRkVSX1NJWkUgPSBfZGVmYXVsdEJ1ZmZlclNpemU7CgogIC8vLyBJbmRlbnRhdGlvbiB1c2VkIGluIHByZXR0eS1wcmludCBtb2RlLCBgbnVsbGAgaWYgbm90IHByZXR0eS4KICBmaW5hbCBMaXN0PGludD4gX2luZGVudDsKCiAgLy8vIEZ1bmN0aW9uIGNhbGxlZCB3aXRoIGVhY2ggdW4tZW5jb2RhYmxlIG9iamVjdCBlbmNvdW50ZXJlZC4KICBmaW5hbCBGdW5jdGlvbihkeW5hbWljKSBfdG9FbmNvZGFibGU7CgogIC8vLyBVVEYtOCBidWZmZXIgc2l6ZS4KICBmaW5hbCBpbnQgX2J1ZmZlclNpemU7CgogIC8vLyBDcmVhdGUgY29udmVydGVyLgogIC8vLwogIC8vLyBJZiBbaW5kZW50XSBpcyBub24tYG51bGxgLCB0aGUgY29udmVydGVyIGF0dGVtcHRzIHRvICJwcmV0dHktcHJpbnQiIHRoZQogIC8vLyBKU09OLCBhbmQgdXNlcyBgaW5kZW50YCBhcyB0aGUgaW5kZW50YXRpb24uIE90aGVyd2lzZSB0aGUgcmVzdWx0IGhhcyBubwogIC8vLyB3aGl0ZXNwYWNlIG91dHNpZGUgb2Ygc3RyaW5nIGxpdGVyYWxzLgogIC8vLyBJZiBgaW5kZW50YCBjb250YWlucyBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCB2YWxpZCBKU09OIHdoaXRlc3BhY2UKICAvLy8gY2hhcmFjdGVycywgdGhlIHJlc3VsdCB3aWxsIG5vdCBiZSB2YWxpZCBKU09OLiBKU09OIHdoaXRlc3BhY2UgY2hhcmFjdGVycwogIC8vLyBhcmUgc3BhY2UgKFUrMDAyMCksIHRhYiAoVSswMDA5KSwgbGluZSBmZWVkIChVKzAwMGEpIGFuZCBjYXJyaWFnZSByZXR1cm4KICAvLy8gKFUrMDAwZCkgKFtFQ01BCiAgLy8vIDQwNF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9zdGFuZGFyZHMvRWNtYS00MDQuaHRtKSkuCiAgLy8vCiAgLy8vIFRoZSBbYnVmZmVyU2l6ZV0gaXMgdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlcnMgdXNlZCB0byBjb2xsZWN0CiAgLy8vIFVURi04IGNvZGUgdW5pdHMuCiAgLy8vIElmIHVzaW5nIFtzdGFydENodW5rZWRDb252ZXJzaW9uXSwgaXQgd2lsbCBiZSB0aGUgc2l6ZSBvZiB0aGUgY2h1bmtzLgogIC8vLwogIC8vLyBUaGUgSlNPTiBlbmNvZGVyIGhhbmRsZXMgbnVtYmVycywgc3RyaW5ncywgYm9vbGVhbnMsIG51bGwsIGxpc3RzIGFuZCBtYXBzCiAgLy8vIGRpcmVjdGx5LgogIC8vLwogIC8vLyBBbnkgb3RoZXIgb2JqZWN0IGlzIGF0dGVtcHRlZCBjb252ZXJ0ZWQgYnkgW3RvRW5jb2RhYmxlXSB0byBhbiBvYmplY3QgdGhhdAogIC8vLyBpcyBvZiBvbmUgb2YgdGhlIGNvbnZlcnRpYmxlIHR5cGVzLgogIC8vLwogIC8vLyBJZiBbdG9FbmNvZGFibGVdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGNhbGxpbmcgYC50b0pzb24oKWAgb24gdGhlCiAgLy8vIG9iamVjdC4KICBKc29uVXRmOEVuY29kZXIoCiAgICAgIFtTdHJpbmcgaW5kZW50LCB0b0VuY29kYWJsZShvYmplY3QpLCBpbnQgYnVmZmVyU2l6ZSA9IF9kZWZhdWx0QnVmZmVyU2l6ZV0pCiAgICAgIDogX2luZGVudCA9IF91dGY4RW5jb2RlKGluZGVudCksCiAgICAgICAgX3RvRW5jb2RhYmxlID0gdG9FbmNvZGFibGUsCiAgICAgICAgX2J1ZmZlclNpemUgPSBidWZmZXJTaXplOwoKICBzdGF0aWMgTGlzdDxpbnQ+IF91dGY4RW5jb2RlKFN0cmluZyBzdHJpbmcpIHsKICAgIGlmIChzdHJpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoc3RyaW5nLmlzRW1wdHkpIHJldHVybiBVaW50OExpc3QoMCk7CiAgICBjaGVja0FzY2lpOgogICAgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChzdHJpbmcuY29kZVVuaXRBdChpKSA+PSAweDgwKSBicmVhayBjaGVja0FzY2lpOwogICAgICB9CiAgICAgIHJldHVybiBzdHJpbmcuY29kZVVuaXRzOwogICAgfQogICAgcmV0dXJuIHV0ZjguZW5jb2RlKHN0cmluZyk7CiAgfQoKICAvLy8gQ29udmVydCBbb2JqZWN0XSBpbnRvIFVURi04IGVuY29kZWQgSlNPTi4KICBMaXN0PGludD4gY29udmVydChPYmplY3Qgb2JqZWN0KSB7CiAgICB2YXIgYnl0ZXMgPSA8TGlzdDxpbnQ+PltdOwogICAgLy8gVGhlIGBzdHJpbmdpZnlgIGZ1bmN0aW9uIGFsd2F5cyBjb252ZXJ0cyBpbnRvIGNodW5rcy4KICAgIC8vIENvbGxlY3QgdGhlIGNodW5rcyBpbnRvIHRoZSBgYnl0ZXNgIGxpc3QsIHRoZW4gY29tYmluZSB0aGVtIGFmdGVyd2FyZHMuCiAgICB2b2lkIGFkZENodW5rKFVpbnQ4TGlzdCBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAgIGlmIChzdGFydCA+IDAgfHwgZW5kIDwgY2h1bmsubGVuZ3RoKSB7CiAgICAgICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgICAgIGNodW5rID0KICAgICAgICAgICAgVWludDhMaXN0LnZpZXcoY2h1bmsuYnVmZmVyLCBjaHVuay5vZmZzZXRJbkJ5dGVzICsgc3RhcnQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgYnl0ZXMuYWRkKGNodW5rKTsKICAgIH0KCiAgICBfSnNvblV0ZjhTdHJpbmdpZmllci5zdHJpbmdpZnkoCiAgICAgICAgb2JqZWN0LCBfaW5kZW50LCBfdG9FbmNvZGFibGUsIF9idWZmZXJTaXplLCBhZGRDaHVuayk7CiAgICBpZiAoYnl0ZXMubGVuZ3RoID09IDEpIHJldHVybiBieXRlc1swXTsKICAgIHZhciBsZW5ndGggPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICBsZW5ndGggKz0gYnl0ZXNbaV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdCA9IFVpbnQ4TGlzdChsZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IDAsIG9mZnNldCA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgYnl0ZUxpc3QgPSBieXRlc1tpXTsKICAgICAgaW50IGVuZCA9IG9mZnNldCArIGJ5dGVMaXN0Lmxlbmd0aDsKICAgICAgcmVzdWx0LnNldFJhbmdlKG9mZnNldCwgZW5kLCBieXRlTGlzdCk7CiAgICAgIG9mZnNldCA9IGVuZDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gU3RhcnQgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIE9ubHkgb25lIG9iamVjdCBjYW4gYmUgcGFzc2VkIGludG8gdGhlIHJldHVybmVkIHNpbmsuCiAgLy8vCiAgLy8vIFRoZSBhcmd1bWVudCBbc2lua10gd2lsbCByZWNlaXZlIGJ5dGUgbGlzdHMgaW4gc2l6ZXMgZGVwZW5kaW5nIG9uIHRoZQogIC8vLyBgYnVmZmVyU2l6ZWAgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGNyZWF0aW5nIHRoaXMgZW5jb2Rlci4KICBDaHVua2VkQ29udmVyc2lvblNpbms8T2JqZWN0PiBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICBCeXRlQ29udmVyc2lvblNpbmsgYnl0ZVNpbms7CiAgICBpZiAoc2luayBpcyBCeXRlQ29udmVyc2lvblNpbmspIHsKICAgICAgYnl0ZVNpbmsgPSBzaW5rOwogICAgfSBlbHNlIHsKICAgICAgYnl0ZVNpbmsgPSBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKTsKICAgIH0KICAgIHJldHVybiBfSnNvblV0ZjhFbmNvZGVyU2luayhieXRlU2luaywgX3RvRW5jb2RhYmxlLCBfaW5kZW50LCBfYnVmZmVyU2l6ZSk7CiAgfQoKICAvLyBPdmVycmlkZSB0aGUgYmFzZSBjbGFzcydzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08TGlzdDxpbnQ+PiBiaW5kKFN0cmVhbTxPYmplY3Q+IHN0cmVhbSkgewogICAgcmV0dXJuIHN1cGVyLmJpbmQoc3RyZWFtKTsKICB9Cn0KCi8vLyBJbXBsZW1lbnRzIHRoZSBjaHVua2VkIGNvbnZlcnNpb24gZnJvbSBvYmplY3QgdG8gaXRzIEpTT04gcmVwcmVzZW50YXRpb24uCi8vLwovLy8gVGhlIHNpbmsgb25seSBhY2NlcHRzIG9uZSB2YWx1ZSwgYnV0IHdpbGwgcHJvZHVjZSBvdXRwdXQgaW4gYSBjaHVua2VkIHdheS4KY2xhc3MgX0pzb25FbmNvZGVyU2luayBleHRlbmRzIENodW5rZWRDb252ZXJzaW9uU2luazxPYmplY3Q+IHsKICBmaW5hbCBTdHJpbmcgX2luZGVudDsKICBmaW5hbCBGdW5jdGlvbihkeW5hbWljKSBfdG9FbmNvZGFibGU7CiAgZmluYWwgU3RyaW5nQ29udmVyc2lvblNpbmsgX3Npbms7CiAgYm9vbCBfaXNEb25lID0gZmFsc2U7CgogIF9Kc29uRW5jb2RlclNpbmsodGhpcy5fc2luaywgdGhpcy5fdG9FbmNvZGFibGUsIHRoaXMuX2luZGVudCk7CgogIC8vLyBFbmNvZGVzIHRoZSBnaXZlbiBvYmplY3QgW29dLgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciB0byBpbnZva2UgdGhpcyBtZXRob2QgbW9yZSB0aGFuIG9uY2Ugb24gYW55IGluc3RhbmNlLiBXaGlsZQogIC8vLyB0aGlzIG1ha2VzIHRoZSBpbnB1dCBlZmZlY3RpdmVseSBub24tY2h1bmtlZCB0aGUgb3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkCiAgLy8vIGluIGEgY2h1bmtlZCB3YXkuCiAgdm9pZCBhZGQoT2JqZWN0IG8pIHsKICAgIGlmIChfaXNEb25lKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIk9ubHkgb25lIGNhbGwgdG8gYWRkIGFsbG93ZWQiKTsKICAgIH0KICAgIF9pc0RvbmUgPSB0cnVlOwogICAgdmFyIHN0cmluZ1NpbmsgPSBfc2luay5hc1N0cmluZ1NpbmsoKTsKICAgIF9Kc29uU3RyaW5nU3RyaW5naWZpZXIucHJpbnRPbihvLCBzdHJpbmdTaW5rLCBfdG9FbmNvZGFibGUsIF9pbmRlbnQpOwogICAgc3RyaW5nU2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsvKiBkbyBub3RoaW5nICovfQp9CgovLy8gU2luayByZXR1cm5lZCB3aGVuIHN0YXJ0aW5nIGEgY2h1bmtlZCBjb252ZXJzaW9uIGZyb20gb2JqZWN0IHRvIGJ5dGVzLgpjbGFzcyBfSnNvblV0ZjhFbmNvZGVyU2luayBleHRlbmRzIENodW5rZWRDb252ZXJzaW9uU2luazxPYmplY3Q+IHsKICAvLy8gVGhlIGJ5dGUgc2luayByZWNlaXZlaW5nIHRoZSBlbmNvZGVkIGNodW5rcy4KICBmaW5hbCBCeXRlQ29udmVyc2lvblNpbmsgX3Npbms7CiAgZmluYWwgTGlzdDxpbnQ+IF9pbmRlbnQ7CiAgZmluYWwgRnVuY3Rpb24oZHluYW1pYykgX3RvRW5jb2RhYmxlOwogIGZpbmFsIGludCBfYnVmZmVyU2l6ZTsKICBib29sIF9pc0RvbmUgPSBmYWxzZTsKICBfSnNvblV0ZjhFbmNvZGVyU2luaygKICAgICAgdGhpcy5fc2luaywgdGhpcy5fdG9FbmNvZGFibGUsIHRoaXMuX2luZGVudCwgdGhpcy5fYnVmZmVyU2l6ZSk7CgogIC8vLyBDYWxsYmFjayBjYWxsZWQgZm9yIGVhY2ggc2xpY2Ugb2YgcmVzdWx0IGJ5dGVzLgogIHZvaWQgX2FkZENodW5rKFVpbnQ4TGlzdCBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfc2luay5hZGRTbGljZShjaHVuaywgc3RhcnQsIGVuZCwgZmFsc2UpOwogIH0KCiAgdm9pZCBhZGQoT2JqZWN0IG9iamVjdCkgewogICAgaWYgKF9pc0RvbmUpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiT25seSBvbmUgY2FsbCB0byBhZGQgYWxsb3dlZCIpOwogICAgfQogICAgX2lzRG9uZSA9IHRydWU7CiAgICBfSnNvblV0ZjhTdHJpbmdpZmllci5zdHJpbmdpZnkoCiAgICAgICAgb2JqZWN0LCBfaW5kZW50LCBfdG9FbmNvZGFibGUsIF9idWZmZXJTaXplLCBfYWRkQ2h1bmspOwogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoIV9pc0RvbmUpIHsKICAgICAgX2lzRG9uZSA9IHRydWU7CiAgICAgIF9zaW5rLmNsb3NlKCk7CiAgICB9CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBwYXJzZXMgSlNPTiBzdHJpbmdzIGFuZCBidWlsZHMgdGhlIGNvcnJlc3BvbmRpbmcgb2JqZWN0cy4KY2xhc3MgSnNvbkRlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8U3RyaW5nLCBPYmplY3Q+IHsKICBmaW5hbCBGdW5jdGlvbihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIF9yZXZpdmVyOwoKICAvLy8gQ29uc3RydWN0cyBhIG5ldyBKc29uRGVjb2Rlci4KICAvLy8KICAvLy8gVGhlIFtyZXZpdmVyXSBtYXkgYmUgYG51bGxgLgogIGNvbnN0IEpzb25EZWNvZGVyKFtyZXZpdmVyKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSldKSA6IF9yZXZpdmVyID0gcmV2aXZlcjsKCiAgLy8vIENvbnZlcnRzIHRoZSBnaXZlbiBKU09OLXN0cmluZyBbaW5wdXRdIHRvIGl0cyBjb3JyZXNwb25kaW5nIG9iamVjdC4KICAvLy8KICAvLy8gUGFyc2VkIEpTT04gdmFsdWVzIGFyZSBvZiB0aGUgdHlwZXMgW251bV0sIFtTdHJpbmddLCBbYm9vbF0sIFtOdWxsXSwKICAvLy8gW0xpc3RdcyBvZiBwYXJzZWQgSlNPTiB2YWx1ZXMgb3IgW01hcF1zIGZyb20gW1N0cmluZ10gdG8gcGFyc2VkIEpTT04KICAvLy8gdmFsdWVzLgogIC8vLwogIC8vLyBJZiBgdGhpc2Agd2FzIGluaXRpYWxpemVkIHdpdGggYSByZXZpdmVyLCB0aGVuIHRoZSBwYXJzaW5nIG9wZXJhdGlvbgogIC8vLyBpbnZva2VzIHRoZSByZXZpdmVyIG9uIGV2ZXJ5IG9iamVjdCBvciBsaXN0IHByb3BlcnR5IHRoYXQgaGFzIGJlZW4gcGFyc2VkLgogIC8vLyBUaGUgYXJndW1lbnRzIGFyZSB0aGUgcHJvcGVydHkgbmFtZSAoW1N0cmluZ10pIG9yIGxpc3QgaW5kZXggKFtpbnRdKSwgYW5kCiAgLy8vIHRoZSB2YWx1ZSBpcyB0aGUgcGFyc2VkIHZhbHVlLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSByZXZpdmVyIGlzIHVzZWQgYXMKICAvLy8gdGhlIHZhbHVlIG9mIHRoYXQgcHJvcGVydHkgaW5zdGVhZCB0aGUgcGFyc2VkIHZhbHVlLgogIC8vLwogIC8vLyBUaHJvd3MgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgdGhlIGlucHV0IGlzIG5vdCB2YWxpZCBKU09OIHRleHQuCiAgZHluYW1pYyBjb252ZXJ0KFN0cmluZyBpbnB1dCkgPT4gX3BhcnNlSnNvbihpbnB1dCwgX3Jldml2ZXIpOwoKICAvLy8gU3RhcnRzIGEgY29udmVyc2lvbiBmcm9tIGEgY2h1bmtlZCBKU09OIHN0cmluZyB0byBpdHMgY29ycmVzcG9uZGluZyBvYmplY3QuCiAgLy8vCiAgLy8vIFRoZSBvdXRwdXQgW3NpbmtdIHJlY2VpdmVzIGV4YWN0bHkgb25lIGRlY29kZWQgZWxlbWVudCB0aHJvdWdoIGBhZGRgLgogIGV4dGVybmFsIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxPYmplY3Q+IHNpbmspOwoKICAvLyBPdmVycmlkZSB0aGUgYmFzZSBjbGFzcydzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08T2JqZWN0PiBiaW5kKFN0cmVhbTxTdHJpbmc+IHN0cmVhbSkgPT4gc3VwZXIuYmluZChzdHJlYW0pOwp9CgovLyBJbnRlcm5hbCBvcHRpbWl6ZWQgSlNPTiBwYXJzaW5nIGltcGxlbWVudGF0aW9uLgpleHRlcm5hbCBfcGFyc2VKc29uKFN0cmluZyBzb3VyY2UsIHJldml2ZXIoa2V5LCB2YWx1ZSkpOwoKLy8gSW1wbGVtZW50YXRpb24gb2YgZW5jb2Rlci9zdHJpbmdpZmllci4KCmR5bmFtaWMgX2RlZmF1bHRUb0VuY29kYWJsZShkeW5hbWljIG9iamVjdCkgPT4gb2JqZWN0LnRvSnNvbigpOwoKLy8vIEpTT04gZW5jb2RlciB0aGF0IHRyYXZlcnNlcyBhbiBvYmplY3Qgc3RydWN0dXJlIGFuZCB3cml0ZXMgSlNPTiBzb3VyY2UuCi8vLwovLy8gVGhpcyBpcyBhbiBhYnN0cmFjdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXNuJ3QgZGVjaWRlIG9uIHRoZSBvdXRwdXQKLy8vIGZvcm1hdCwgYnV0IHdyaXRlcyB0aGUgSlNPTiB0aHJvdWdoIGFic3RyYWN0IG1ldGhvZHMgbGlrZSBbd3JpdGVTdHJpbmddLgphYnN0cmFjdCBjbGFzcyBfSnNvblN0cmluZ2lmaWVyIHsKICAvLyBDaGFyYWN0ZXIgY29kZSBjb25zdGFudHMuCiAgc3RhdGljIGNvbnN0IGludCBiYWNrc3BhY2UgPSAweDA4OwogIHN0YXRpYyBjb25zdCBpbnQgdGFiID0gMHgwOTsKICBzdGF0aWMgY29uc3QgaW50IG5ld2xpbmUgPSAweDBhOwogIHN0YXRpYyBjb25zdCBpbnQgY2FycmlhZ2VSZXR1cm4gPSAweDBkOwogIHN0YXRpYyBjb25zdCBpbnQgZm9ybUZlZWQgPSAweDBjOwogIHN0YXRpYyBjb25zdCBpbnQgcXVvdGUgPSAweDIyOwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl8wID0gMHgzMDsKICBzdGF0aWMgY29uc3QgaW50IGJhY2tzbGFzaCA9IDB4NWM7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyX2IgPSAweDYyOwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl9mID0gMHg2NjsKICBzdGF0aWMgY29uc3QgaW50IGNoYXJfbiA9IDB4NmU7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyX3IgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl90ID0gMHg3NDsKICBzdGF0aWMgY29uc3QgaW50IGNoYXJfdSA9IDB4NzU7CgogIC8vLyBMaXN0IG9mIG9iamVjdHMgY3VycmVudGx5IGJlaW5nIHRyYXZlcnNlZC4gVXNlZCB0byBkZXRlY3QgY3ljbGVzLgogIGZpbmFsIExpc3QgX3NlZW4gPSBbXTsKCiAgLy8vIEZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCB1bi1lbmNvZGFibGUgb2JqZWN0IGVuY291bnRlcmVkLgogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKCiAgX0pzb25TdHJpbmdpZmllcih0b0VuY29kYWJsZShvKSkKICAgICAgOiBfdG9FbmNvZGFibGUgPSB0b0VuY29kYWJsZSA/PyBfZGVmYXVsdFRvRW5jb2RhYmxlOwoKICBTdHJpbmcgZ2V0IF9wYXJ0aWFsUmVzdWx0OwoKICAvLy8gQXBwZW5kIGEgc3RyaW5nIHRvIHRoZSBKU09OIG91dHB1dC4KICB2b2lkIHdyaXRlU3RyaW5nKFN0cmluZyBjaGFyYWN0ZXJzKTsKCiAgLy8vIEFwcGVuZCBwYXJ0IG9mIGEgc3RyaW5nIHRvIHRoZSBKU09OIG91dHB1dC4KICB2b2lkIHdyaXRlU3RyaW5nU2xpY2UoU3RyaW5nIGNoYXJhY3RlcnMsIGludCBzdGFydCwgaW50IGVuZCk7CgogIC8vLyBBcHBlbmQgYSBzaW5nbGUgY2hhcmFjdGVyLCBnaXZlbiBieSBpdHMgY29kZSBwb2ludCwgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpOwoKICAvLy8gV3JpdGUgYSBudW1iZXIgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVOdW1iZXIobnVtIG51bWJlcik7CgogIC8vICgnMCcgKyB4KSBvciAoJ2EnICsgeCAtIDEwKQogIHN0YXRpYyBpbnQgaGV4RGlnaXQoaW50IHgpID0+IHggPCAxMCA/IDQ4ICsgeCA6IDg3ICsgeDsKCiAgLy8vIFdyaXRlLCBhbmQgc3VpdGFibHkgZXNjYXBlLCBhIHN0cmluZydzIGNvbnRlbnQgYXMgYSBKU09OIHN0cmluZyBsaXRlcmFsLgogIHZvaWQgd3JpdGVTdHJpbmdDb250ZW50KFN0cmluZyBzKSB7CiAgICB2YXIgb2Zmc2V0ID0gMDsKICAgIGZpbmFsIGxlbmd0aCA9IHMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgY2hhckNvZGUgPSBzLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyQ29kZSA+IGJhY2tzbGFzaCkgY29udGludWU7CiAgICAgIGlmIChjaGFyQ29kZSA8IDMyKSB7CiAgICAgICAgaWYgKGkgPiBvZmZzZXQpIHdyaXRlU3RyaW5nU2xpY2Uocywgb2Zmc2V0LCBpKTsKICAgICAgICBvZmZzZXQgPSBpICsgMTsKICAgICAgICB3cml0ZUNoYXJDb2RlKGJhY2tzbGFzaCk7CiAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkgewogICAgICAgICAgY2FzZSBiYWNrc3BhY2U6CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl9iKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIHRhYjoKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX3QpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgbmV3bGluZToKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX24pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgZm9ybUZlZWQ6CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl9mKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIGNhcnJpYWdlUmV0dXJuOgogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfcik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX3UpOwogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfMCk7CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl8wKTsKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShoZXhEaWdpdCgoY2hhckNvZGUgPj4gNCkgJiAweGYpKTsKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShoZXhEaWdpdChjaGFyQ29kZSAmIDB4ZikpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2hhckNvZGUgPT0gcXVvdGUgfHwgY2hhckNvZGUgPT0gYmFja3NsYXNoKSB7CiAgICAgICAgaWYgKGkgPiBvZmZzZXQpIHdyaXRlU3RyaW5nU2xpY2Uocywgb2Zmc2V0LCBpKTsKICAgICAgICBvZmZzZXQgPSBpICsgMTsKICAgICAgICB3cml0ZUNoYXJDb2RlKGJhY2tzbGFzaCk7CiAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChvZmZzZXQgPT0gMCkgewogICAgICB3cml0ZVN0cmluZyhzKTsKICAgIH0gZWxzZSBpZiAob2Zmc2V0IDwgbGVuZ3RoKSB7CiAgICAgIHdyaXRlU3RyaW5nU2xpY2Uocywgb2Zmc2V0LCBsZW5ndGgpOwogICAgfQogIH0KCiAgLy8vIENoZWNrIGlmIGFuIGVuY291bnRlcmVkIG9iamVjdCBpcyBhbHJlYWR5IGJlaW5nIHRyYXZlcnNlZC4KICAvLy8KICAvLy8gUmVjb3JkcyB0aGUgb2JqZWN0IGlmIGl0IGlzbid0IGFscmVhZHkgc2Vlbi4gU2hvdWxkIGhhdmUgYSBtYXRjaGluZyBjYWxsIHRvCiAgLy8vIFtfcmVtb3ZlU2Vlbl0gd2hlbiB0aGUgb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyB0cmF2ZXJzZWQuCiAgdm9pZCBfY2hlY2tDeWNsZShvYmplY3QpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3NlZW4ubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGlkZW50aWNhbChvYmplY3QsIF9zZWVuW2ldKSkgewogICAgICAgIHRocm93IEpzb25DeWNsaWNFcnJvcihvYmplY3QpOwogICAgICB9CiAgICB9CiAgICBfc2Vlbi5hZGQob2JqZWN0KTsKICB9CgogIC8vLyBSZW1vdmUgW29iamVjdF0gZnJvbSB0aGUgbGlzdCBvZiBjdXJyZW50bHkgdHJhdmVyc2VkIG9iamVjdHMuCiAgLy8vCiAgLy8vIFNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIG9wcG9zaXRlIG9yZGVyIG9mIHRoZSBtYXRjaGluZyBbX2NoZWNrQ3ljbGVdCiAgLy8vIGNhbGxzLgogIHZvaWQgX3JlbW92ZVNlZW4ob2JqZWN0KSB7CiAgICBhc3NlcnQoX3NlZW4uaXNOb3RFbXB0eSk7CiAgICBhc3NlcnQoaWRlbnRpY2FsKF9zZWVuLmxhc3QsIG9iamVjdCkpOwogICAgX3NlZW4ucmVtb3ZlTGFzdCgpOwogIH0KCiAgLy8vIFdyaXRlIGFuIG9iamVjdC4KICAvLy8KICAvLy8gSWYgW29iamVjdF0gaXNuJ3QgZGlyZWN0bHkgZW5jb2RhYmxlLCB0aGUgW190b0VuY29kYWJsZV0gZnVuY3Rpb24gZ2V0cyBvbmUKICAvLy8gY2hhbmNlIHRvIHJldHVybiBhIHJlcGxhY2VtZW50IHdoaWNoIGlzIGVuY29kYWJsZS4KICB2b2lkIHdyaXRlT2JqZWN0KG9iamVjdCkgewogICAgLy8gVHJpZXMgc3RyaW5naWZ5aW5nIG9iamVjdCBkaXJlY3RseS4gSWYgaXQncyBub3QgYSBzaW1wbGUgdmFsdWUsIExpc3Qgb3IKICAgIC8vIE1hcCwgY2FsbCB0b0pzb24oKSB0byBnZXQgYSBjdXN0b20gcmVwcmVzZW50YXRpb24gYW5kIHRyeSBzZXJpYWxpemluZwogICAgLy8gdGhhdC4KICAgIGlmICh3cml0ZUpzb25WYWx1ZShvYmplY3QpKSByZXR1cm47CiAgICBfY2hlY2tDeWNsZShvYmplY3QpOwogICAgdHJ5IHsKICAgICAgdmFyIGN1c3RvbUpzb24gPSBfdG9FbmNvZGFibGUob2JqZWN0KTsKICAgICAgaWYgKCF3cml0ZUpzb25WYWx1ZShjdXN0b21Kc29uKSkgewogICAgICAgIHRocm93IEpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yKG9iamVjdCwgcGFydGlhbFJlc3VsdDogX3BhcnRpYWxSZXN1bHQpOwogICAgICB9CiAgICAgIF9yZW1vdmVTZWVuKG9iamVjdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRocm93IEpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yKG9iamVjdCwKICAgICAgICAgIGNhdXNlOiBlLCBwYXJ0aWFsUmVzdWx0OiBfcGFydGlhbFJlc3VsdCk7CiAgICB9CiAgfQoKICAvLy8gU2VyaWFsaXplIGEgW251bV0sIFtTdHJpbmddLCBbYm9vbF0sIFtOdWxsXSwgW0xpc3RdIG9yIFtNYXBdIHZhbHVlLgogIC8vLwogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIG9uZSBvZiB0aGVzZSB0eXBlcywgYW5kIGZhbHNlIGlmIG5vdC4KICAvLy8gSWYgYSB2YWx1ZSBpcyBib3RoIGEgW0xpc3RdIGFuZCBhIFtNYXBdLCBpdCdzIHNlcmlhbGl6ZWQgYXMgYSBbTGlzdF0uCiAgYm9vbCB3cml0ZUpzb25WYWx1ZShvYmplY3QpIHsKICAgIGlmIChvYmplY3QgaXMgbnVtKSB7CiAgICAgIGlmICghb2JqZWN0LmlzRmluaXRlKSByZXR1cm4gZmFsc2U7CiAgICAgIHdyaXRlTnVtYmVyKG9iamVjdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwob2JqZWN0LCB0cnVlKSkgewogICAgICB3cml0ZVN0cmluZygndHJ1ZScpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG9iamVjdCwgZmFsc2UpKSB7CiAgICAgIHdyaXRlU3RyaW5nKCdmYWxzZScpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgd3JpdGVTdHJpbmcoJ251bGwnKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKG9iamVjdCBpcyBTdHJpbmcpIHsKICAgICAgd3JpdGVTdHJpbmcoJyInKTsKICAgICAgd3JpdGVTdHJpbmdDb250ZW50KG9iamVjdCk7CiAgICAgIHdyaXRlU3RyaW5nKCciJyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChvYmplY3QgaXMgTGlzdCkgewogICAgICBfY2hlY2tDeWNsZShvYmplY3QpOwogICAgICB3cml0ZUxpc3Qob2JqZWN0KTsKICAgICAgX3JlbW92ZVNlZW4ob2JqZWN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKG9iamVjdCBpcyBNYXApIHsKICAgICAgX2NoZWNrQ3ljbGUob2JqZWN0KTsKICAgICAgLy8gd3JpdGVNYXAgY2FuIGZhaWwgaWYga2V5cyBhcmUgbm90IGFsbCBzdHJpbmdzLgogICAgICB2YXIgc3VjY2VzcyA9IHdyaXRlTWFwKG9iamVjdCk7CiAgICAgIF9yZW1vdmVTZWVuKG9iamVjdCk7CiAgICAgIHJldHVybiBzdWNjZXNzOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgLy8vIFNlcmlhbGl6ZSBhIFtMaXN0XS4KICB2b2lkIHdyaXRlTGlzdChMaXN0IGxpc3QpIHsKICAgIHdyaXRlU3RyaW5nKCdbJyk7CiAgICBpZiAobGlzdC5pc05vdEVtcHR5KSB7CiAgICAgIHdyaXRlT2JqZWN0KGxpc3RbMF0pOwogICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICB3cml0ZVN0cmluZygnLCcpOwogICAgICAgIHdyaXRlT2JqZWN0KGxpc3RbaV0pOwogICAgICB9CiAgICB9CiAgICB3cml0ZVN0cmluZygnXScpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZSBhIFtNYXBdLgogIGJvb2wgd3JpdGVNYXAoTWFwIG1hcCkgewogICAgaWYgKG1hcC5pc0VtcHR5KSB7CiAgICAgIHdyaXRlU3RyaW5nKCJ7fSIpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHZhciBrZXlWYWx1ZUxpc3QgPSBMaXN0KG1hcC5sZW5ndGggKiAyKTsKICAgIHZhciBpID0gMDsKICAgIHZhciBhbGxTdHJpbmdLZXlzID0gdHJ1ZTsKICAgIG1hcC5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgIGlmIChrZXkgaXMhIFN0cmluZykgewogICAgICAgIGFsbFN0cmluZ0tleXMgPSBmYWxzZTsKICAgICAgfQogICAgICBrZXlWYWx1ZUxpc3RbaSsrXSA9IGtleTsKICAgICAga2V5VmFsdWVMaXN0W2krK10gPSB2YWx1ZTsKICAgIH0pOwogICAgaWYgKCFhbGxTdHJpbmdLZXlzKSByZXR1cm4gZmFsc2U7CiAgICB3cml0ZVN0cmluZygneycpOwogICAgdmFyIHNlcGFyYXRvciA9ICciJzsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5VmFsdWVMaXN0Lmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIHdyaXRlU3RyaW5nKHNlcGFyYXRvcik7CiAgICAgIHNlcGFyYXRvciA9ICcsIic7CiAgICAgIHdyaXRlU3RyaW5nQ29udGVudChrZXlWYWx1ZUxpc3RbaV0pOwogICAgICB3cml0ZVN0cmluZygnIjonKTsKICAgICAgd3JpdGVPYmplY3Qoa2V5VmFsdWVMaXN0W2kgKyAxXSk7CiAgICB9CiAgICB3cml0ZVN0cmluZygnfScpOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CgovLy8gQSBtb2RpZmljYXRpb24gb2YgW19Kc29uU3RyaW5naWZpZXJdIHdoaWNoIGluZGVudHMgdGhlIGNvbnRlbnRzIG9mIFtMaXN0XSBhbmQKLy8vIFtNYXBdIG9iamVjdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBpbmRlbnQgdmFsdWUuCi8vLwovLy8gU3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IFt3cml0ZUluZGVudGF0aW9uXS4KYWJzdHJhY3QgY2xhc3MgX0pzb25QcmV0dHlQcmludE1peGluIGltcGxlbWVudHMgX0pzb25TdHJpbmdpZmllciB7CiAgaW50IF9pbmRlbnRMZXZlbCA9IDA7CgogIC8vLyBBZGQgW2luZGVudExldmVsXSBpbmRlbnRhdGlvbnMgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVJbmRlbnRhdGlvbihpbnQgaW5kZW50TGV2ZWwpOwoKICB2b2lkIHdyaXRlTGlzdChMaXN0IGxpc3QpIHsKICAgIGlmIChsaXN0LmlzRW1wdHkpIHsKICAgICAgd3JpdGVTdHJpbmcoJ1tdJyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZVN0cmluZygnW1xuJyk7CiAgICAgIF9pbmRlbnRMZXZlbCsrOwogICAgICB3cml0ZUluZGVudGF0aW9uKF9pbmRlbnRMZXZlbCk7CiAgICAgIHdyaXRlT2JqZWN0KGxpc3RbMF0pOwogICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICB3cml0ZVN0cmluZygnLFxuJyk7CiAgICAgICAgd3JpdGVJbmRlbnRhdGlvbihfaW5kZW50TGV2ZWwpOwogICAgICAgIHdyaXRlT2JqZWN0KGxpc3RbaV0pOwogICAgICB9CiAgICAgIHdyaXRlU3RyaW5nKCdcbicpOwogICAgICBfaW5kZW50TGV2ZWwtLTsKICAgICAgd3JpdGVJbmRlbnRhdGlvbihfaW5kZW50TGV2ZWwpOwogICAgICB3cml0ZVN0cmluZygnXScpOwogICAgfQogIH0KCiAgYm9vbCB3cml0ZU1hcChNYXAgbWFwKSB7CiAgICBpZiAobWFwLmlzRW1wdHkpIHsKICAgICAgd3JpdGVTdHJpbmcoInt9Iik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdmFyIGtleVZhbHVlTGlzdCA9IExpc3QobWFwLmxlbmd0aCAqIDIpOwogICAgdmFyIGkgPSAwOwogICAgdmFyIGFsbFN0cmluZ0tleXMgPSB0cnVlOwogICAgbWFwLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpcyEgU3RyaW5nKSB7CiAgICAgICAgYWxsU3RyaW5nS2V5cyA9IGZhbHNlOwogICAgICB9CiAgICAgIGtleVZhbHVlTGlzdFtpKytdID0ga2V5OwogICAgICBrZXlWYWx1ZUxpc3RbaSsrXSA9IHZhbHVlOwogICAgfSk7CiAgICBpZiAoIWFsbFN0cmluZ0tleXMpIHJldHVybiBmYWxzZTsKICAgIHdyaXRlU3RyaW5nKCd7XG4nKTsKICAgIF9pbmRlbnRMZXZlbCsrOwogICAgdmFyIHNlcGFyYXRvciA9ICIiOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZUxpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgd3JpdGVTdHJpbmcoc2VwYXJhdG9yKTsKICAgICAgc2VwYXJhdG9yID0gIixcbiI7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oX2luZGVudExldmVsKTsKICAgICAgd3JpdGVTdHJpbmcoJyInKTsKICAgICAgd3JpdGVTdHJpbmdDb250ZW50KGtleVZhbHVlTGlzdFtpXSk7CiAgICAgIHdyaXRlU3RyaW5nKCciOiAnKTsKICAgICAgd3JpdGVPYmplY3Qoa2V5VmFsdWVMaXN0W2kgKyAxXSk7CiAgICB9CiAgICB3cml0ZVN0cmluZygnXG4nKTsKICAgIF9pbmRlbnRMZXZlbC0tOwogICAgd3JpdGVJbmRlbnRhdGlvbihfaW5kZW50TGV2ZWwpOwogICAgd3JpdGVTdHJpbmcoJ30nKTsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8vIEEgc3BlY2lhbGl6YXRpb24gb2YgW19Kc29uU3RyaW5naWZpZXJdIHRoYXQgd3JpdGVzIGl0cyBKU09OIHRvIGEgc3RyaW5nLgpjbGFzcyBfSnNvblN0cmluZ1N0cmluZ2lmaWVyIGV4dGVuZHMgX0pzb25TdHJpbmdpZmllciB7CiAgZmluYWwgU3RyaW5nU2luayBfc2luazsKCiAgX0pzb25TdHJpbmdTdHJpbmdpZmllcih0aGlzLl9zaW5rLCBkeW5hbWljIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZSkKICAgICAgOiBzdXBlcihfdG9FbmNvZGFibGUpOwoKICAvLy8gQ29udmVydCBvYmplY3QgdG8gYSBzdHJpbmcuCiAgLy8vCiAgLy8vIFRoZSBbdG9FbmNvZGFibGVdIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29udmVydCBub24tZW5jb2RhYmxlIG9iamVjdHMKICAvLy8gdG8gZW5jb2RhYmxlIG9uZXMuCiAgLy8vCiAgLy8vIElmIFtpbmRlbnRdIGlzIG5vdCBgbnVsbGAsIHRoZSByZXN1bHRpbmcgSlNPTiB3aWxsIGJlICJwcmV0dHktcHJpbnRlZCIKICAvLy8gd2l0aCBuZXdsaW5lcyBhbmQgaW5kZW50YXRpb24uIFRoZSBgaW5kZW50YCBzdHJpbmcgaXMgYWRkZWQgYXMgaW5kZW50YXRpb24KICAvLy8gZm9yIGVhY2ggaW5kZW50YXRpb24gbGV2ZWwuIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gdmFsaWQgSlNPTiB3aGl0ZXNwYWNlCiAgLy8vIGNoYXJhY3RlcnMgKHNwYWNlLCB0YWIsIGNhcnJpYWdlIHJldHVybiBvciBsaW5lIGZlZWQpLgogIHN0YXRpYyBTdHJpbmcgc3RyaW5naWZ5KG9iamVjdCwgdG9FbmNvZGFibGUobyksIFN0cmluZyBpbmRlbnQpIHsKICAgIHZhciBvdXRwdXQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIHByaW50T24ob2JqZWN0LCBvdXRwdXQsIHRvRW5jb2RhYmxlLCBpbmRlbnQpOwogICAgcmV0dXJuIG91dHB1dC50b1N0cmluZygpOwogIH0KCiAgLy8vIENvbnZlcnQgb2JqZWN0IHRvIGEgc3RyaW5nLCBhbmQgd3JpdGUgdGhlIHJlc3VsdCB0byB0aGUgW291dHB1dF0gc2luay4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBpcyB3cml0dGVuIHBpZWNlbWFsbHkgdG8gdGhlIHNpbmsuCiAgc3RhdGljIHZvaWQgcHJpbnRPbigKICAgICAgb2JqZWN0LCBTdHJpbmdTaW5rIG91dHB1dCwgdG9FbmNvZGFibGUobyksIFN0cmluZyBpbmRlbnQpIHsKICAgIF9Kc29uU3RyaW5naWZpZXIgc3RyaW5naWZpZXI7CiAgICBpZiAoaW5kZW50ID09IG51bGwpIHsKICAgICAgc3RyaW5naWZpZXIgPSBfSnNvblN0cmluZ1N0cmluZ2lmaWVyKG91dHB1dCwgdG9FbmNvZGFibGUpOwogICAgfSBlbHNlIHsKICAgICAgc3RyaW5naWZpZXIgPSBfSnNvblN0cmluZ1N0cmluZ2lmaWVyUHJldHR5KG91dHB1dCwgdG9FbmNvZGFibGUsIGluZGVudCk7CiAgICB9CiAgICBzdHJpbmdpZmllci53cml0ZU9iamVjdChvYmplY3QpOwogIH0KCiAgU3RyaW5nIGdldCBfcGFydGlhbFJlc3VsdCA9PiBfc2luayBpcyBTdHJpbmdCdWZmZXIgPyBfc2luay50b1N0cmluZygpIDogbnVsbDsKCiAgdm9pZCB3cml0ZU51bWJlcihudW0gbnVtYmVyKSB7CiAgICBfc2luay53cml0ZShudW1iZXIudG9TdHJpbmcoKSk7CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nKFN0cmluZyBzdHJpbmcpIHsKICAgIF9zaW5rLndyaXRlKHN0cmluZyk7CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nU2xpY2UoU3RyaW5nIHN0cmluZywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfc2luay53cml0ZShzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsKICB9CgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIF9zaW5rLndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KfQoKY2xhc3MgX0pzb25TdHJpbmdTdHJpbmdpZmllclByZXR0eSBleHRlbmRzIF9Kc29uU3RyaW5nU3RyaW5naWZpZXIKICAgIHdpdGggX0pzb25QcmV0dHlQcmludE1peGluIHsKICBmaW5hbCBTdHJpbmcgX2luZGVudDsKCiAgX0pzb25TdHJpbmdTdHJpbmdpZmllclByZXR0eShTdHJpbmdTaW5rIHNpbmssIHRvRW5jb2RhYmxlKG8pLCB0aGlzLl9pbmRlbnQpCiAgICAgIDogc3VwZXIoc2luaywgdG9FbmNvZGFibGUpOwoKICB2b2lkIHdyaXRlSW5kZW50YXRpb24oaW50IGNvdW50KSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHdyaXRlU3RyaW5nKF9pbmRlbnQpOwogIH0KfQoKLy8vIFNwZWNpYWxpemF0aW9uIG9mIFtfSnNvblN0cmluZ2lmaWVyXSB0aGF0IHdyaXRlcyB0aGUgSlNPTiBhcyBVVEYtOC4KLy8vCi8vLyBUaGUgSlNPTiB0ZXh0IGlzIFVURi04IGVuY29kZWQgYW5kIHdyaXR0ZW4gdG8gW1VpbnQ4TGlzdF0gYnVmZmVycy4KLy8vIFRoZSBidWZmZXJzIGFyZSB0aGVuIHBhc3NlZCBiYWNrIHRvIGEgdXNlciBwcm92aWRlZCBjYWxsYmFjayBtZXRob2QuCmNsYXNzIF9Kc29uVXRmOFN0cmluZ2lmaWVyIGV4dGVuZHMgX0pzb25TdHJpbmdpZmllciB7CiAgZmluYWwgaW50IGJ1ZmZlclNpemU7CiAgZmluYWwgdm9pZCBGdW5jdGlvbihVaW50OExpc3QgbGlzdCwgaW50IHN0YXJ0LCBpbnQgZW5kKSBhZGRDaHVuazsKICBVaW50OExpc3QgYnVmZmVyOwogIGludCBpbmRleCA9IDA7CgogIF9Kc29uVXRmOFN0cmluZ2lmaWVyKHRvRW5jb2RhYmxlKG8pLCB0aGlzLmJ1ZmZlclNpemUsIHRoaXMuYWRkQ2h1bmspCiAgICAgIDogYnVmZmVyID0gVWludDhMaXN0KGJ1ZmZlclNpemUpLAogICAgICAgIHN1cGVyKHRvRW5jb2RhYmxlKTsKCiAgLy8vIENvbnZlcnQgW29iamVjdF0gdG8gVVRGLTggZW5jb2RlZCBKU09OLgogIC8vLwogIC8vLyBDYWxscyBbYWRkQ2h1bmtdIHdpdGggc2xpY2VzIG9mIFVURi04IGNvZGUgdW5pdHMuCiAgLy8vIFRoZXNlIHdpbGwgdHlwaWNhbGx5IGhhdmUgc2l6ZSBbYnVmZmVyU2l6ZV0sIGJ1dCBtYXkgYmUgc2hvcnRlci4KICAvLy8gVGhlIGJ1ZmZlcnMgYXJlIG5vdCByZXVzZWQsIHNvIHRoZSBbYWRkQ2h1bmtdIGNhbGwgbWF5IGtlZXAgYW5kIHJldXNlIHRoZQogIC8vLyBjaHVua3MuCiAgLy8vCiAgLy8vIElmIFtpbmRlbnRdIGlzIG5vbi1gbnVsbGAsIHRoZSByZXN1bHQgd2lsbCBiZSAicHJldHR5LXByaW50ZWQiIHdpdGggZXh0cmEKICAvLy8gbmV3bGluZXMgYW5kIGluZGVudGF0aW9uLCB1c2luZyBbaW5kZW50XSBhcyB0aGUgaW5kZW50YXRpb24uCiAgc3RhdGljIHZvaWQgc3RyaW5naWZ5KE9iamVjdCBvYmplY3QsIExpc3Q8aW50PiBpbmRlbnQsIHRvRW5jb2RhYmxlKG8pLAogICAgICBpbnQgYnVmZmVyU2l6ZSwgdm9pZCBhZGRDaHVuayhVaW50OExpc3QgY2h1bmssIGludCBzdGFydCwgaW50IGVuZCkpIHsKICAgIF9Kc29uVXRmOFN0cmluZ2lmaWVyIHN0cmluZ2lmaWVyOwogICAgaWYgKGluZGVudCAhPSBudWxsKSB7CiAgICAgIHN0cmluZ2lmaWVyID0KICAgICAgICAgIF9Kc29uVXRmOFN0cmluZ2lmaWVyUHJldHR5KHRvRW5jb2RhYmxlLCBpbmRlbnQsIGJ1ZmZlclNpemUsIGFkZENodW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmluZ2lmaWVyID0gX0pzb25VdGY4U3RyaW5naWZpZXIodG9FbmNvZGFibGUsIGJ1ZmZlclNpemUsIGFkZENodW5rKTsKICAgIH0KICAgIHN0cmluZ2lmaWVyLndyaXRlT2JqZWN0KG9iamVjdCk7CiAgICBzdHJpbmdpZmllci5mbHVzaCgpOwogIH0KCiAgLy8vIE11c3QgYmUgY2FsbGVkIGF0IHRoZSBlbmQgdG8gcHVzaCB0aGUgbGFzdCBjaHVuayB0byB0aGUgW2FkZENodW5rXQogIC8vLyBjYWxsYmFjay4KICB2b2lkIGZsdXNoKCkgewogICAgaWYgKGluZGV4ID4gMCkgewogICAgICBhZGRDaHVuayhidWZmZXIsIDAsIGluZGV4KTsKICAgIH0KICAgIGJ1ZmZlciA9IG51bGw7CiAgICBpbmRleCA9IDA7CiAgfQoKICBTdHJpbmcgZ2V0IF9wYXJ0aWFsUmVzdWx0ID0+IG51bGw7CgogIHZvaWQgd3JpdGVOdW1iZXIobnVtIG51bWJlcikgewogICAgd3JpdGVBc2NpaVN0cmluZyhudW1iZXIudG9TdHJpbmcoKSk7CiAgfQoKICAvLy8gV3JpdGUgYSBzdHJpbmcgdGhhdCBpcyBrbm93biB0byBub3QgaGF2ZSBub24tQVNDSUkgY2hhcmFjdGVycy4KICB2b2lkIHdyaXRlQXNjaWlTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgLy8gVE9ETyhscm4pOiBPcHRpbWl6ZSBieSBjb3B5aW5nIGRpcmVjdGx5IGludG8gYnVmZmVyIGluc3RlYWQgb2YgZ29pbmcKICAgIC8vIHRocm91Z2ggd3JpdGVDaGFyQ29kZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gc3RyaW5nLmNvZGVVbml0QXQoaSk7CiAgICAgIGFzc2VydChjaGFyIDw9IDB4N2YpOwogICAgICB3cml0ZUJ5dGUoY2hhcik7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nKFN0cmluZyBzdHJpbmcpIHsKICAgIHdyaXRlU3RyaW5nU2xpY2Uoc3RyaW5nLCAwLCBzdHJpbmcubGVuZ3RoKTsKICB9CgogIHZvaWQgd3JpdGVTdHJpbmdTbGljZShTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIFRPRE8obHJuKTogT3B0aW1pemUgYnkgY29weWluZyBkaXJlY3RseSBpbnRvIGJ1ZmZlciBpbnN0ZWFkIG9mIGdvaW5nCiAgICAvLyB0aHJvdWdoIHdyaXRlQ2hhckNvZGUvd3JpdGVCeXRlLiBBc3N1bXB0aW9uIGlzIHRoZSBtb3N0IGNoYXJhY3RlcnMKICAgIC8vIGluIHN0YXJpbmdzIGFyZSBwbGFpbiBBU0NJSS4KICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gc3RyaW5nLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyIDw9IDB4N2YpIHsKICAgICAgICB3cml0ZUJ5dGUoY2hhcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKChjaGFyICYgMHhGQzAwKSA9PSAweEQ4MDAgJiYgaSArIDEgPCBlbmQpIHsKICAgICAgICAgIC8vIExlYWQgc3Vycm9nYXRlLgogICAgICAgICAgdmFyIG5leHRDaGFyID0gc3RyaW5nLmNvZGVVbml0QXQoaSArIDEpOwogICAgICAgICAgaWYgKChuZXh0Q2hhciAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7CiAgICAgICAgICAgIC8vIFRhaWwgc3Vycm9nYXRlLgogICAgICAgICAgICBjaGFyID0gMHgxMDAwMCArICgoY2hhciAmIDB4M2ZmKSA8PCAxMCkgKyAobmV4dENoYXIgJiAweDNmZik7CiAgICAgICAgICAgIHdyaXRlRm91ckJ5dGVDaGFyQ29kZShjaGFyKTsKICAgICAgICAgICAgaSsrOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd3JpdGVNdWx0aUJ5dGVDaGFyQ29kZShjaGFyKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgaWYgKGNoYXJDb2RlIDw9IDB4N2YpIHsKICAgICAgd3JpdGVCeXRlKGNoYXJDb2RlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgd3JpdGVNdWx0aUJ5dGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICB2b2lkIHdyaXRlTXVsdGlCeXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBpZiAoY2hhckNvZGUgPD0gMHg3ZmYpIHsKICAgICAgd3JpdGVCeXRlKDB4QzAgfCAoY2hhckNvZGUgPj4gNikpOwogICAgICB3cml0ZUJ5dGUoMHg4MCB8IChjaGFyQ29kZSAmIDB4M2YpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGNoYXJDb2RlIDw9IDB4ZmZmZikgewogICAgICB3cml0ZUJ5dGUoMHhFMCB8IChjaGFyQ29kZSA+PiAxMikpOwogICAgICB3cml0ZUJ5dGUoMHg4MCB8ICgoY2hhckNvZGUgPj4gNikgJiAweDNmKSk7CiAgICAgIHdyaXRlQnl0ZSgweDgwIHwgKGNoYXJDb2RlICYgMHgzZikpOwogICAgICByZXR1cm47CiAgICB9CiAgICB3cml0ZUZvdXJCeXRlQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgdm9pZCB3cml0ZUZvdXJCeXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBhc3NlcnQoY2hhckNvZGUgPD0gMHgxMGZmZmYpOwogICAgd3JpdGVCeXRlKDB4RjAgfCAoY2hhckNvZGUgPj4gMTgpKTsKICAgIHdyaXRlQnl0ZSgweDgwIHwgKChjaGFyQ29kZSA+PiAxMikgJiAweDNmKSk7CiAgICB3cml0ZUJ5dGUoMHg4MCB8ICgoY2hhckNvZGUgPj4gNikgJiAweDNmKSk7CiAgICB3cml0ZUJ5dGUoMHg4MCB8IChjaGFyQ29kZSAmIDB4M2YpKTsKICB9CgogIHZvaWQgd3JpdGVCeXRlKGludCBieXRlKSB7CiAgICBhc3NlcnQoYnl0ZSA8PSAweGZmKTsKICAgIGlmIChpbmRleCA9PSBidWZmZXIubGVuZ3RoKSB7CiAgICAgIGFkZENodW5rKGJ1ZmZlciwgMCwgaW5kZXgpOwogICAgICBidWZmZXIgPSBVaW50OExpc3QoYnVmZmVyU2l6ZSk7CiAgICAgIGluZGV4ID0gMDsKICAgIH0KICAgIGJ1ZmZlcltpbmRleCsrXSA9IGJ5dGU7CiAgfQp9CgovLy8gUHJldHR5LXByaW50aW5nIHZlcnNpb24gb2YgW19Kc29uVXRmOFN0cmluZ2lmaWVyXS4KY2xhc3MgX0pzb25VdGY4U3RyaW5naWZpZXJQcmV0dHkgZXh0ZW5kcyBfSnNvblV0ZjhTdHJpbmdpZmllcgogICAgd2l0aCBfSnNvblByZXR0eVByaW50TWl4aW4gewogIGZpbmFsIExpc3Q8aW50PiBpbmRlbnQ7CiAgX0pzb25VdGY4U3RyaW5naWZpZXJQcmV0dHkodG9FbmNvZGFibGUobyksIHRoaXMuaW5kZW50LCBpbnQgYnVmZmVyU2l6ZSwKICAgICAgdm9pZCBhZGRDaHVuayhVaW50OExpc3QgYnVmZmVyLCBpbnQgc3RhcnQsIGludCBlbmQpKQogICAgICA6IHN1cGVyKHRvRW5jb2RhYmxlLCBidWZmZXJTaXplLCBhZGRDaHVuayk7CgogIHZvaWQgd3JpdGVJbmRlbnRhdGlvbihpbnQgY291bnQpIHsKICAgIHZhciBpbmRlbnQgPSB0aGlzLmluZGVudDsKICAgIHZhciBpbmRlbnRMZW5ndGggPSBpbmRlbnQubGVuZ3RoOwogICAgaWYgKGluZGVudExlbmd0aCA9PSAxKSB7CiAgICAgIHZhciBjaGFyID0gaW5kZW50WzBdOwogICAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgd3JpdGVCeXRlKGNoYXIpOwogICAgICAgIGNvdW50IC09IDE7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgd2hpbGUgKGNvdW50ID4gMCkgewogICAgICBjb3VudC0tOwogICAgICB2YXIgZW5kID0gaW5kZXggKyBpbmRlbnRMZW5ndGg7CiAgICAgIGlmIChlbmQgPD0gYnVmZmVyLmxlbmd0aCkgewogICAgICAgIGJ1ZmZlci5zZXRSYW5nZShpbmRleCwgZW5kLCBpbmRlbnQpOwogICAgICAgIGluZGV4ID0gZW5kOwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZW50TGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHdyaXRlQnl0ZShpbmRlbnRbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQqEDABOTjwBFgFKBFIEUE5FJzEvIgE+FgFJBhMeATUpARY8ExlDDUgGIgQCAU4EPS4/Oz0yOQIBQgRHDwQO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IElTTy04ODU5LTEpIGJ5dGVzCi8vLyBhbmQgZGVjb2RlcyBMYXRpbi0xIGJ5dGVzIHRvIHN0cmluZ3MuCmNsYXNzIExhdGluMUNvZGVjIGV4dGVuZHMgRW5jb2RpbmcgewogIGZpbmFsIGJvb2wgX2FsbG93SW52YWxpZDsKCiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBbTGF0aW4xQ29kZWNdLgogIC8vLwogIC8vLyBJZiBbYWxsb3dJbnZhbGlkXSBpcyB0cnVlLCB0aGUgW2RlY29kZV0gbWV0aG9kIGFuZCB0aGUgY29udmVydGVyCiAgLy8vIHJldHVybmVkIGJ5IFtkZWNvZGVyXSB3aWxsIGRlZmF1bHQgdG8gYWxsb3dpbmcgaW52YWxpZCB2YWx1ZXMuIEludmFsaWQKICAvLy8gdmFsdWVzIGFyZSBkZWNvZGVkIGludG8gdGhlIFVuaWNvZGUgUmVwbGFjZW1lbnQgY2hhcmFjdGVyIChVK0ZGRkQpLgogIC8vLyBDYWxscyB0byB0aGUgW2RlY29kZV0gbWV0aG9kIGNhbiBvdmVycmlkZSB0aGlzIGRlZmF1bHQuCiAgLy8vCiAgLy8vIEVuY29kZXJzIHdpbGwgbm90IGFjY2VwdCBpbnZhbGlkIChub24gTGF0aW4tMSkgY2hhcmFjdGVycy4KICBjb25zdCBMYXRpbjFDb2RlYyh7Ym9vbCBhbGxvd0ludmFsaWQgPSBmYWxzZX0pIDogX2FsbG93SW52YWxpZCA9IGFsbG93SW52YWxpZDsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoaXMgY29kZWMsICJpc28tODg1OS0xIi4KICBTdHJpbmcgZ2V0IG5hbWUgPT4gImlzby04ODU5LTEiOwoKICBVaW50OExpc3QgZW5jb2RlKFN0cmluZyBzb3VyY2UpID0+IGVuY29kZXIuY29udmVydChzb3VyY2UpOwoKICAvLy8gRGVjb2RlcyB0aGUgTGF0aW4tMSBbYnl0ZXNdIChhIGxpc3Qgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpIHRvIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIHN0cmluZy4KICAvLy8KICAvLy8gSWYgW2J5dGVzXSBjb250YWlucyB2YWx1ZXMgdGhhdCBhcmUgbm90IGluIHRoZSByYW5nZSAwIC4uIDI1NSwgdGhlIGRlY29kZXIKICAvLy8gd2lsbCBldmVudHVhbGx5IHRocm93IGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgLy8vCiAgLy8vIElmIFthbGxvd0ludmFsaWRdIGlzIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIHVzZWQgdG8gY3JlYXRlCiAgLy8vIHRoaXMgW0xhdGluMUNvZGVjXS4KICBTdHJpbmcgZGVjb2RlKExpc3Q8aW50PiBieXRlcywge2Jvb2wgYWxsb3dJbnZhbGlkfSkgewogICAgYWxsb3dJbnZhbGlkID8/PSBfYWxsb3dJbnZhbGlkOwogICAgaWYgKGFsbG93SW52YWxpZCkgewogICAgICByZXR1cm4gY29uc3QgTGF0aW4xRGVjb2RlcihhbGxvd0ludmFsaWQ6IHRydWUpLmNvbnZlcnQoYnl0ZXMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbnN0IExhdGluMURlY29kZXIoYWxsb3dJbnZhbGlkOiBmYWxzZSkuY29udmVydChieXRlcyk7CiAgICB9CiAgfQoKICBMYXRpbjFFbmNvZGVyIGdldCBlbmNvZGVyID0+IGNvbnN0IExhdGluMUVuY29kZXIoKTsKCiAgTGF0aW4xRGVjb2RlciBnZXQgZGVjb2RlciA9PiBfYWxsb3dJbnZhbGlkCiAgICAgID8gY29uc3QgTGF0aW4xRGVjb2RlcihhbGxvd0ludmFsaWQ6IHRydWUpCiAgICAgIDogY29uc3QgTGF0aW4xRGVjb2RlcihhbGxvd0ludmFsaWQ6IGZhbHNlKTsKfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgc3RyaW5ncyBvZiBvbmx5IElTTyBMYXRpbi0xIGNoYXJhY3RlcnMgdG8gYnl0ZXMuCmNsYXNzIExhdGluMUVuY29kZXIgZXh0ZW5kcyBfVW5pY29kZVN1YnNldEVuY29kZXIgewogIGNvbnN0IExhdGluMUVuY29kZXIoKSA6IHN1cGVyKF9sYXRpbjFNYXNrKTsKfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgTGF0aW4tMSBieXRlcyAobGlzdHMgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpCi8vLyB0byBhIHN0cmluZy4KY2xhc3MgTGF0aW4xRGVjb2RlciBleHRlbmRzIF9Vbmljb2RlU3Vic2V0RGVjb2RlciB7CiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBbTGF0aW4xRGVjb2Rlcl0uCiAgLy8vCiAgLy8vIFRoZSBvcHRpb25hbCBbYWxsb3dJbnZhbGlkXSBhcmd1bWVudCBkZWZpbmVzIGhvdyBbY29udmVydF0gZGVhbHMKICAvLy8gd2l0aCBpbnZhbGlkIGJ5dGVzLgogIC8vLwogIC8vLyBJZiBpdCBpcyBgdHJ1ZWAsIFtjb252ZXJ0XSByZXBsYWNlcyBpbnZhbGlkIGJ5dGVzIHdpdGggdGhlIFVuaWNvZGUKICAvLy8gUmVwbGFjZW1lbnQgY2hhcmFjdGVyIGBVK0ZGRkRgICjvv70pLgogIC8vLyBPdGhlcndpc2UgaXQgdGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgY29uc3QgTGF0aW4xRGVjb2Rlcih7Ym9vbCBhbGxvd0ludmFsaWQgPSBmYWxzZX0pCiAgICAgIDogc3VwZXIoYWxsb3dJbnZhbGlkLCBfbGF0aW4xTWFzayk7CgogIC8vLyBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIFRoZSBjb252ZXJ0ZXIgd29ya3MgbW9yZSBlZmZpY2llbnRseSBpZiB0aGUgZ2l2ZW4gW3NpbmtdIGlzIGEKICAvLy8gW1N0cmluZ0NvbnZlcnNpb25TaW5rXS4KICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFN0cmluZz4gc2luaykgewogICAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RyaW5nU2luazsKICAgIGlmIChzaW5rIGlzIFN0cmluZ0NvbnZlcnNpb25TaW5rKSB7CiAgICAgIHN0cmluZ1NpbmsgPSBzaW5rOwogICAgfSBlbHNlIHsKICAgICAgc3RyaW5nU2luayA9IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oc2luayk7CiAgICB9CiAgICAvLyBUT0RPKGxybik6IFVzZSBzdHJpbmdTaW5rLmFzVXRmMTZTaW5rKCkgaWYgaXQgYmVjb21lcyBhdmFpbGFibGUuCiAgICBpZiAoIV9hbGxvd0ludmFsaWQpIHJldHVybiBfTGF0aW4xRGVjb2RlclNpbmsoc3RyaW5nU2luayk7CiAgICByZXR1cm4gX0xhdGluMUFsbG93SW52YWxpZERlY29kZXJTaW5rKHN0cmluZ1NpbmspOwogIH0KfQoKY2xhc3MgX0xhdGluMURlY29kZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgU3RyaW5nQ29udmVyc2lvblNpbmsgX3Npbms7CiAgX0xhdGluMURlY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICAgIF9zaW5rID0gbnVsbDsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBzb3VyY2UpIHsKICAgIGFkZFNsaWNlKHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBfYWRkU2xpY2VUb1NpbmsoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgLy8gSWYgX3Npbmsgd2FzIGEgVVRGLTE2IGNvbnZlcnNpb24gc2luaywganVzdCBhZGQgdGhlIHNsaWNlIGRpcmVjdGx5IHdpdGgKICAgIC8vIF9zaW5rLmFkZFNsaWNlKHNvdXJjZSwgc3RhcnQsIGVuZCwgaXNMYXN0KS4KICAgIC8vIFRoZSBjb2RlIGJlbG93IGlzIGFuIG1vZGVyYXRlbHkgc3R1cGlkIHdvcmthcm91bmQgdW50aWwgYSByZWFsCiAgICAvLyBzb2x1dGlvbiBjYW4gYmUgbWFkZS4KICAgIF9zaW5rLmFkZChTdHJpbmcuZnJvbUNoYXJDb2Rlcyhzb3VyY2UsIHN0YXJ0LCBlbmQpKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuOwogICAgaWYgKHNvdXJjZSBpcyEgVWludDhMaXN0KSB7CiAgICAgIC8vIExpc3QgbWF5IGNvbnRhaW4gdmFsdWUgb3V0c2lkZSBvZiB0aGUgMC4uMjU1IHJhbmdlLiBJZiBzbywgdGhyb3cuCiAgICAgIC8vIFRlY2huaWNhbGx5LCB3ZSBjb3VsZCBleGN1c2UgVWludDhDbGFtcGVkTGlzdCBhcyB3ZWxsLCBidXQgaXQgdW5saWtlbHkKICAgICAgLy8gdG8gYmUgcmVsZXZhbnQuCiAgICAgIF9jaGVja1ZhbGlkTGF0aW4xKHNvdXJjZSwgc3RhcnQsIGVuZCk7CiAgICB9CiAgICBfYWRkU2xpY2VUb1Npbmsoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogIH0KCiAgc3RhdGljIHZvaWQgX2NoZWNrVmFsaWRMYXRpbjEoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB2YXIgbWFzayA9IDA7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBtYXNrIHw9IHNvdXJjZVtpXTsKICAgIH0KICAgIGlmIChtYXNrID49IDAgJiYgbWFzayA8PSBfbGF0aW4xTWFzaykgewogICAgICByZXR1cm47CiAgICB9CiAgICBfcmVwb3J0SW52YWxpZExhdGluMShzb3VyY2UsIHN0YXJ0LCBlbmQpOyAvLyBBbHdheXMgdGhyb3dzLgogIH0KCiAgc3RhdGljIHZvaWQgX3JlcG9ydEludmFsaWRMYXRpbjEoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgbm9uLUxhdGluLTEgY2hhcmFjdGVyIGNvZGUuCiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY2hhciA9IHNvdXJjZVtpXTsKICAgICAgaWYgKGNoYXIgPCAwIHx8IGNoYXIgPiBfbGF0aW4xTWFzaykgewogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIlNvdXJjZSBjb250YWlucyBub24tTGF0aW4tMSBjaGFyYWN0ZXJzLiIsIHNvdXJjZSwgaSk7CiAgICAgIH0KICAgIH0KICAgIC8vIFVucmVhY2hhYmxlIC0gd2Ugb25seSBjYWxsIHRoZSBmdW5jdGlvbiBpZiB0aGUgbG9vcCBhYm92ZSB0aHJvd3MuCiAgICBhc3NlcnQoZmFsc2UpOwogIH0KfQoKY2xhc3MgX0xhdGluMUFsbG93SW52YWxpZERlY29kZXJTaW5rIGV4dGVuZHMgX0xhdGluMURlY29kZXJTaW5rIHsKICBfTGF0aW4xQWxsb3dJbnZhbGlkRGVjb2RlclNpbmsoU3RyaW5nQ29udmVyc2lvblNpbmsgc2luaykgOiBzdXBlcihzaW5rKTsKCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gc291cmNlW2ldOwogICAgICBpZiAoY2hhciA+IF9sYXRpbjFNYXNrIHx8IGNoYXIgPCAwKSB7CiAgICAgICAgaWYgKGkgPiBzdGFydCkgX2FkZFNsaWNlVG9TaW5rKHNvdXJjZSwgc3RhcnQsIGksIGZhbHNlKTsKICAgICAgICAvLyBBZGQgVVRGLTggZW5jb2Rpbmcgb2YgVStGRkZELgogICAgICAgIF9hZGRTbGljZVRvU2luayhjb25zdCBbMHhGRkZEXSwgMCwgMSwgZmFsc2UpOwogICAgICAgIHN0YXJ0ID0gaSArIDE7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdGFydCA8IGVuZCkgewogICAgICBfYWRkU2xpY2VUb1Npbmsoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogICAgfQogICAgaWYgKGlzTGFzdCkgewogICAgICBjbG9zZSgpOwogICAgfQogIH0KfQqAuABOTjwBFgFEBE4PBA4MLz9BCCoBHgFKKiUcASgGR01KPgZBUQEsIwE+AU0cBlExBlEaOCQYRQ1GBgQBNgEtMDICAUk0LgIBSRE0KgZHGgZJKi8zKgEjBkQeQSUoGQ00Bkg/NwQCAToeIgERExIEAR8vBAFMTzNGHTkZBAFFQR4gS1AZLQYxBAFIEigZBiwOBkAEAUs/KBwsH0MIBkkTBAIBQksBRTsoHCxBKTYXCAYXMwYSDwYEAgEYZGFydDpjb252ZXJ0L2xhdGluMS5kYXJ0Nm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2xpbmVfc3BsaXR0ZXIuZGFydJN8Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8gQ2hhcmFjdGVyIGNvbnN0YW50cy4KY29uc3QgaW50IF9MRiA9IDEwOwpjb25zdCBpbnQgX0NSID0gMTM7CgovLy8gQSBbU3RyZWFtVHJhbnNmb3JtZXJdIHRoYXQgc3BsaXRzIGEgW1N0cmluZ10gaW50byBpbmRpdmlkdWFsIGxpbmVzLgovLy8KLy8vIEEgbGluZSBpcyB0ZXJtaW5hdGVkIGJ5IGVpdGhlciBhIENSIChVKzAwMEQpLCBhIExGIChVKzAwMEEpLCBhCi8vLyBDUitMRiBzZXF1ZW5jZSAoRE9TIGxpbmUgZW5kaW5nKSwKLy8vIGFuZCBhIGZpbmFsIG5vbi1lbXB0eSBsaW5lIGNhbiBiZSBlbmRlZCBieSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCi8vLwovLy8gVGhlIHJldHVybmVkIGxpbmVzIGRvIG5vdCBjb250YWluIHRoZSBsaW5lIHRlcm1pbmF0b3JzLgoKY2xhc3MgTGluZVNwbGl0dGVyIGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFN0cmluZywgU3RyaW5nPiB7CiAgY29uc3QgTGluZVNwbGl0dGVyKCk7CgogIC8vLyBTcGxpdCBbbGluZXNdIGludG8gaW5kaXZpZHVhbCBsaW5lcy4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIHByb3ZpZGVkLCBvbmx5IHNwbGl0IHRoZSBjb250ZW50cyBvZgogIC8vLyBgbGluZXMuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpYC4gVGhlIFtzdGFydF0gYW5kIFtlbmRdIHZhbHVlcyBtdXN0CiAgLy8vIHNwZWNpZnkgYSB2YWxpZCBzdWItcmFuZ2Ugb2YgW2xpbmVzXQogIC8vLyAoYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxpbmVzLmxlbmd0aGApLgogIHN0YXRpYyBJdGVyYWJsZTxTdHJpbmc+IHNwbGl0KFN0cmluZyBsaW5lcywgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSBzeW5jKiB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsaW5lcy5sZW5ndGgpOwogICAgdmFyIHNsaWNlU3RhcnQgPSBzdGFydDsKICAgIHZhciBjaGFyID0gMDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBwcmV2aW91c0NoYXIgPSBjaGFyOwogICAgICBjaGFyID0gbGluZXMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgIT0gX0NSKSB7CiAgICAgICAgaWYgKGNoYXIgIT0gX0xGKSBjb250aW51ZTsKICAgICAgICBpZiAocHJldmlvdXNDaGFyID09IF9DUikgewogICAgICAgICAgc2xpY2VTdGFydCA9IGkgKyAxOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHlpZWxkIGxpbmVzLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBpKTsKICAgICAgc2xpY2VTdGFydCA9IGkgKyAxOwogICAgfQogICAgaWYgKHNsaWNlU3RhcnQgPCBlbmQpIHsKICAgICAgeWllbGQgbGluZXMuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIGVuZCk7CiAgICB9CiAgfQoKICBMaXN0PFN0cmluZz4gY29udmVydChTdHJpbmcgZGF0YSkgewogICAgdmFyIGxpbmVzID0gPFN0cmluZz5bXTsKICAgIHZhciBlbmQgPSBkYXRhLmxlbmd0aDsKICAgIHZhciBzbGljZVN0YXJ0ID0gMDsKICAgIHZhciBjaGFyID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIHByZXZpb3VzQ2hhciA9IGNoYXI7CiAgICAgIGNoYXIgPSBkYXRhLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyICE9IF9DUikgewogICAgICAgIGlmIChjaGFyICE9IF9MRikgY29udGludWU7CiAgICAgICAgaWYgKHByZXZpb3VzQ2hhciA9PSBfQ1IpIHsKICAgICAgICAgIHNsaWNlU3RhcnQgPSBpICsgMTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBsaW5lcy5hZGQoZGF0YS5zdWJzdHJpbmcoc2xpY2VTdGFydCwgaSkpOwogICAgICBzbGljZVN0YXJ0ID0gaSArIDE7CiAgICB9CiAgICBpZiAoc2xpY2VTdGFydCA8IGVuZCkgewogICAgICBsaW5lcy5hZGQoZGF0YS5zdWJzdHJpbmcoc2xpY2VTdGFydCwgZW5kKSk7CiAgICB9CiAgICByZXR1cm4gbGluZXM7CiAgfQoKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICByZXR1cm4gX0xpbmVTcGxpdHRlclNpbmsoCiAgICAgICAgc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luayA/IHNpbmsgOiBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspKTsKICB9CgogIFN0cmVhbTxTdHJpbmc+IGJpbmQoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSB7CiAgICByZXR1cm4gU3RyZWFtPFN0cmluZz4uZXZlbnRUcmFuc2Zvcm1lZCgKICAgICAgICBzdHJlYW0sIChFdmVudFNpbms8U3RyaW5nPiBzaW5rKSA9PiBfTGluZVNwbGl0dGVyRXZlbnRTaW5rKHNpbmspKTsKICB9Cn0KCi8vIFRPRE8oZmxvaXRzY2gpOiBkZWFsIHdpdGggdXRmOC4KY2xhc3MgX0xpbmVTcGxpdHRlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIGZpbmFsIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9zaW5rOwoKICAvLy8gVGhlIGNhcnJ5LW92ZXIgZnJvbSB0aGUgcHJldmlvdXMgY2h1bmsuCiAgLy8vCiAgLy8vIElmIHRoZSBwcmV2aW91cyBzbGljZSBlbmRlZCBpbiBhIGxpbmUgd2l0aG91dCBhIGxpbmUgdGVybWluYXRvciwKICAvLy8gdGhlbiB0aGUgbmV4dCBzbGljZSBtYXkgY29udGludWUgdGhlIGxpbmUuCiAgU3RyaW5nIF9jYXJyeTsKCiAgLy8vIFdoZXRoZXIgdG8gc2tpcCBhIGxlYWRpbmcgTEYgY2hhcmFjdGVyIGZyb20gdGhlIG5leHQgc2xpY2UuCiAgLy8vCiAgLy8vIElmIHRoZSBwcmV2aW91cyBzbGljZSBlbmRlZCBvbiBhIENSIGNoYXJhY3RlciwgYSBmb2xsb3dpbmcgTEYKICAvLy8gd291bGQgYmUgcGFydCBvZiB0aGUgc2FtZSBsaW5lIHRlcm1pbmF0aW9uLCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCiAgLy8vCiAgLy8vIE9ubHkgYHRydWVgIHdoZW4gW19jYXJyeV0gaXMgYG51bGxgLgogIGJvb2wgX3NraXBMZWFkaW5nTEYgPSBmYWxzZTsKCiAgX0xpbmVTcGxpdHRlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBjaHVuay5sZW5ndGgpOwogICAgLy8gSWYgdGhlIGNodW5rIGlzIGVtcHR5LCBpdCdzIHByb2JhYmx5IGJlY2F1c2UgaXQncyB0aGUgbGFzdCBvbmUuCiAgICAvLyBIYW5kbGUgdGhhdCBoZXJlLCBzbyB3ZSBrbm93IHRoZSByYW5nZSBpcyBub24tZW1wdHkgYmVsb3cuCiAgICBpZiAoc3RhcnQgPj0gZW5kKSB7CiAgICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfY2FycnkgIT0gbnVsbCkgewogICAgICBhc3NlcnQoIV9za2lwTGVhZGluZ0xGKTsKICAgICAgY2h1bmsgPSBfY2FycnkgKyBjaHVuay5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICAgIHN0YXJ0ID0gMDsKICAgICAgZW5kID0gY2h1bmsubGVuZ3RoOwogICAgICBfY2FycnkgPSBudWxsOwogICAgfSBlbHNlIGlmIChfc2tpcExlYWRpbmdMRikgewogICAgICBpZiAoY2h1bmsuY29kZVVuaXRBdChzdGFydCkgPT0gX0xGKSB7CiAgICAgICAgc3RhcnQgKz0gMTsKICAgICAgfQogICAgICBfc2tpcExlYWRpbmdMRiA9IGZhbHNlOwogICAgfQogICAgX2FkZExpbmVzKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKF9jYXJyeSAhPSBudWxsKSB7CiAgICAgIF9zaW5rLmFkZChfY2FycnkpOwogICAgICBfY2FycnkgPSBudWxsOwogICAgfQogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgX2FkZExpbmVzKFN0cmluZyBsaW5lcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB2YXIgc2xpY2VTdGFydCA9IHN0YXJ0OwogICAgdmFyIGNoYXIgPSAwOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIHByZXZpb3VzQ2hhciA9IGNoYXI7CiAgICAgIGNoYXIgPSBsaW5lcy5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciAhPSBfQ1IpIHsKICAgICAgICBpZiAoY2hhciAhPSBfTEYpIGNvbnRpbnVlOwogICAgICAgIGlmIChwcmV2aW91c0NoYXIgPT0gX0NSKSB7CiAgICAgICAgICBzbGljZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgX3NpbmsuYWRkKGxpbmVzLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBpKSk7CiAgICAgIHNsaWNlU3RhcnQgPSBpICsgMTsKICAgIH0KICAgIGlmIChzbGljZVN0YXJ0IDwgZW5kKSB7CiAgICAgIF9jYXJyeSA9IGxpbmVzLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBlbmQpOwogICAgfSBlbHNlIHsKICAgICAgX3NraXBMZWFkaW5nTEYgPSAoY2hhciA9PSBfQ1IpOwogICAgfQogIH0KfQoKY2xhc3MgX0xpbmVTcGxpdHRlckV2ZW50U2luayBleHRlbmRzIF9MaW5lU3BsaXR0ZXJTaW5rCiAgICBpbXBsZW1lbnRzIEV2ZW50U2luazxTdHJpbmc+IHsKICBmaW5hbCBFdmVudFNpbms8U3RyaW5nPiBfZXZlbnRTaW5rOwoKICBfTGluZVNwbGl0dGVyRXZlbnRTaW5rKEV2ZW50U2luazxTdHJpbmc+IGV2ZW50U2luaykKICAgICAgOiBfZXZlbnRTaW5rID0gZXZlbnRTaW5rLAogICAgICAgIHN1cGVyKFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oZXZlbnRTaW5rKSk7CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IG8sIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfZXZlbnRTaW5rLmFkZEVycm9yKG8sIHN0YWNrVHJhY2UpOwogIH0KfQqArgBOTjwBFgEYFBQBSARDJkYEPAFDGAErBkRHKy1QQBwSKB8iGSMjHhQKCCwaBhwuBgQBJhwbGBIkHyEZIyMeFAoIMBoGHDIGEgQBQx5QBAEvLEsEAgEjOyQBLgZHMREBQgZESQYrHwEhAUFAR0IYGw4GGh80ERoVISwUCB4GIhkEAREaGRUGEwQBNRwSKB8iGSMjHhQKCDEaBhwxDSYGBAIBNyMmATYgNQE1KAQCAR9kYXJ0OmNvbnZlcnQvbGluZV9zcGxpdHRlci5kYXJ0Om9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L3N0cmluZ19jb252ZXJzaW9uLmRhcnSlgi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgY29udmVydGVycyB0bwovLy8gZWZmaWNpZW50bHkgdHJhbnNtaXQgU3RyaW5nIGRhdGEuCi8vLwovLy8gSW5zdGVhZCBvZiBsaW1pdGluZyB0aGUgaW50ZXJmYWNlIHRvIG9uZSBub24tY2h1bmtlZCBTdHJpbmcgaXQgYWNjZXB0cwovLy8gcGFydGlhbCBzdHJpbmdzIG9yIGNhbiBiZSB0cmFuc2Zvcm1lZCBpbnRvIGEgYnl0ZSBzaW5rIHRoYXQKLy8vIGFjY2VwdHMgVVRGLTggY29kZSB1bml0cy4KLy8vCi8vLyBUaGlzIGFic3RyYWN0IGNsYXNzIHdpbGwgbGlrZWx5IGdldCBtb3JlIG1ldGhvZHMgb3ZlciB0aW1lLiBJbXBsZW1lbnRlcnMgYXJlCi8vLyB1cmdlZCB0byBleHRlbmQgW1N0cmluZ0NvbnZlcnNpb25TaW5rQmFzZV0gb3IgdG8gbWl4IGluCi8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbl0sIHRvIGVuc3VyZSB0aGF0IHRoZWlyIGNsYXNzIGNvdmVycyB0aGUgbmV3bHkKLy8vIGFkZGVkIG1ldGhvZHMuCmFic3RyYWN0IGNsYXNzIFN0cmluZ0NvbnZlcnNpb25TaW5rIGV4dGVuZHMgQ2h1bmtlZENvbnZlcnNpb25TaW5rPFN0cmluZz4gewogIFN0cmluZ0NvbnZlcnNpb25TaW5rKCk7CiAgZmFjdG9yeSBTdHJpbmdDb252ZXJzaW9uU2luay53aXRoQ2FsbGJhY2sodm9pZCBjYWxsYmFjayhTdHJpbmcgYWNjdW11bGF0ZWQpKSA9CiAgICAgIF9TdHJpbmdDYWxsYmFja1Npbms7CiAgZmFjdG9yeSBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKFNpbms8U3RyaW5nPiBzaW5rKSA9IF9TdHJpbmdBZGFwdGVyU2luazsKCiAgLy8vIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugd3JhcHBpbmcgdGhlIGdpdmVuIFtzaW5rXS4KICAvLy8KICAvLy8gRXZlcnkgc3RyaW5nIHRoYXQgaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIGluc3RhbmNlIGlzIGZvcndhcmRlZCB0bwogIC8vLyB0aGUgW3NpbmtdLiBUaGUgaW5zdGFuY2UgaXMgYWxsb3dlZCB0byBidWZmZXIgYW5kIGlzIG5vdCByZXF1aXJlZCB0bwogIC8vLyBmb3J3YXJkIGltbWVkaWF0ZWx5LgogIGZhY3RvcnkgU3RyaW5nQ29udmVyc2lvblNpbmsuZnJvbVN0cmluZ1NpbmsoU3RyaW5nU2luayBzaW5rKSA9CiAgICAgIF9TdHJpbmdTaW5rQ29udmVyc2lvblNpbms8U3RyaW5nU2luaz47CgogIC8vLyBBZGRzIHRoZSBuZXh0IFtjaHVua10gdG8gYHRoaXNgLgogIC8vLwogIC8vLyBBZGRzIHRoZSBzdWJzdHJpbmcgZGVmaW5lZCBieSBbc3RhcnRdIGFuZCBbZW5kXS1leGNsdXNpdmUgdG8gYHRoaXNgLgogIC8vLwogIC8vLyBJZiBbaXNMYXN0XSBpcyBgdHJ1ZWAgY2xvc2VzIGB0aGlzYC4KICB2b2lkIGFkZFNsaWNlKFN0cmluZyBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCk7CgogIC8vLyBSZXR1cm5zIGB0aGlzYCBhcyBhIHNpbmsgdGhhdCBhY2NlcHRzIFVURi04IGlucHV0LgogIC8vLwogIC8vLyBJZiB1c2VkLCB0aGlzIG1ldGhvZCBtdXN0IGJlIHRoZSBmaXJzdCBhbmQgb25seSBjYWxsIHRvIGB0aGlzYC4gSXQKICAvLy8gaW52YWxpZGF0ZXMgYHRoaXNgLiBBbGwgZnVydGhlciBvcGVyYXRpb25zIG11c3QgYmUgcGVyZm9ybWVkIG9uIHRoZSByZXN1bHQuCiAgQnl0ZUNvbnZlcnNpb25TaW5rIGFzVXRmOFNpbmsoYm9vbCBhbGxvd01hbGZvcm1lZCk7CiAgLy8gLSBhc1J1bmVTaW5rCiAgLy8gLSBhc0NvZGVVbml0c1NpbmsKCiAgLy8vIFJldHVybnMgYHRoaXNgIGFzIGEgW0Nsb3NhYmxlU3RyaW5nU2lua10uCiAgLy8vCiAgLy8vIElmIHVzZWQsIHRoaXMgbWV0aG9kIG11c3QgYmUgdGhlIGZpcnN0IGFuZCBvbmx5IGNhbGwgdG8gYHRoaXNgLiBJdAogIC8vLyBpbnZhbGlkYXRlcyBgdGhpc2AuIEFsbCBmdXJ0aGVyIG9wZXJhdGlvbnMgbXVzdCBiZSBwZXJmb3JtZWQgb24gdGhlIHJlc3VsdC4KICBDbG9zYWJsZVN0cmluZ1NpbmsgYXNTdHJpbmdTaW5rKCk7Cn0KCi8vLyBBIFtDbG9zYWJsZVN0cmluZ1NpbmtdIGV4dGVuZHMgdGhlIFtTdHJpbmdTaW5rXSBpbnRlcmZhY2UgYnkgYWRkaW5nIGEKLy8vIGBjbG9zZWAgbWV0aG9kLgphYnN0cmFjdCBjbGFzcyBDbG9zYWJsZVN0cmluZ1NpbmsgZXh0ZW5kcyBTdHJpbmdTaW5rIHsKICAvLy8gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBjb21iaW5pbmcgYSBbU3RyaW5nU2lua10gW3NpbmtdIGFuZCBhIGNhbGxiYWNrCiAgLy8vIFtvbkNsb3NlXSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIHJldHVybmVkIGluc3RhbmNlIGlzIGNsb3NlZC4KICBmYWN0b3J5IENsb3NhYmxlU3RyaW5nU2luay5mcm9tU3RyaW5nU2luayhTdHJpbmdTaW5rIHNpbmssIHZvaWQgb25DbG9zZSgpKSA9CiAgICAgIF9DbG9zYWJsZVN0cmluZ1Npbms7CgogIC8vLyBDbG9zZXMgYHRoaXNgIGFuZCBmbHVzaGVzIGFueSBvdXRzdGFuZGluZyBkYXRhLgogIHZvaWQgY2xvc2UoKTsKfQoKLy8vIFRoaXMgY2xhc3Mgd3JhcHMgYW4gZXhpc3RpbmcgW1N0cmluZ1NpbmtdIGFuZCBpbnZva2VzIGEKLy8vIGNsb3N1cmUgd2hlbiBbY2xvc2VdIGlzIGludm9rZWQuCmNsYXNzIF9DbG9zYWJsZVN0cmluZ1NpbmsgaW1wbGVtZW50cyBDbG9zYWJsZVN0cmluZ1NpbmsgewogIGZpbmFsIHZvaWQgRnVuY3Rpb24oKSBfY2FsbGJhY2s7CiAgZmluYWwgU3RyaW5nU2luayBfc2luazsKCiAgX0Nsb3NhYmxlU3RyaW5nU2luayh0aGlzLl9zaW5rLCB0aGlzLl9jYWxsYmFjayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfY2FsbGJhY2soKTsKICB9CgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIF9zaW5rLndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgdm9pZCB3cml0ZShPYmplY3QgbykgewogICAgX3Npbmsud3JpdGUobyk7CiAgfQoKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvID0gIiJdKSB7CiAgICBfc2luay53cml0ZWxuKG8pOwogIH0KCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgX3Npbmsud3JpdGVBbGwob2JqZWN0cywgc2VwYXJhdG9yKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIHdyYXBzIGFuIGV4aXN0aW5nIFtTdHJpbmdDb252ZXJzaW9uU2lua10gYW5kIGV4cG9zZXMgYQovLy8gW0Nsb3NhYmxlU3RyaW5nU2lua10gaW50ZXJmYWNlLiBUaGUgd3JhcHBlZCBzaW5rIG9ubHkgbmVlZHMgdG8gaW1wbGVtZW50Ci8vLyBgYWRkYCBhbmQgYGNsb3NlYC4KLy8gVE9ETyhmbG9pdHNjaCk6IG1ha2UgdGhpcyBjbGFzcyBwdWJsaWM/CmNsYXNzIF9TdHJpbmdDb252ZXJzaW9uU2lua0FzU3RyaW5nU2lua0FkYXB0ZXIgaW1wbGVtZW50cyBDbG9zYWJsZVN0cmluZ1NpbmsgewogIHN0YXRpYyBjb25zdCBfTUlOX1NUUklOR19TSVpFID0gMTY7CgogIFN0cmluZ0J1ZmZlciBfYnVmZmVyOwogIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9jaHVua2VkU2luazsKCiAgX1N0cmluZ0NvbnZlcnNpb25TaW5rQXNTdHJpbmdTaW5rQWRhcHRlcih0aGlzLl9jaHVua2VkU2luaykKICAgICAgOiBfYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoX2J1ZmZlci5pc05vdEVtcHR5KSBfZmx1c2goKTsKICAgIF9jaHVua2VkU2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgX2J1ZmZlci53cml0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA+IF9NSU5fU1RSSU5HX1NJWkUpIF9mbHVzaCgpOwogIH0KCiAgdm9pZCB3cml0ZShPYmplY3QgbykgewogICAgaWYgKF9idWZmZXIuaXNOb3RFbXB0eSkgX2ZsdXNoKCk7CiAgICBfY2h1bmtlZFNpbmsuYWRkKG8udG9TdHJpbmcoKSk7CiAgfQoKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvID0gIiJdKSB7CiAgICBfYnVmZmVyLndyaXRlbG4obyk7CiAgICBpZiAoX2J1ZmZlci5sZW5ndGggPiBfTUlOX1NUUklOR19TSVpFKSBfZmx1c2goKTsKICB9CgogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIGlmIChfYnVmZmVyLmlzTm90RW1wdHkpIF9mbHVzaCgpOwogICAgdmFyIGl0ZXJhdG9yID0gb2JqZWN0cy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuOwogICAgaWYgKHNlcGFyYXRvci5pc0VtcHR5KSB7CiAgICAgIGRvIHsKICAgICAgICBfY2h1bmtlZFNpbmsuYWRkKGl0ZXJhdG9yLmN1cnJlbnQudG9TdHJpbmcoKSk7CiAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpOwogICAgfSBlbHNlIHsKICAgICAgX2NodW5rZWRTaW5rLmFkZChpdGVyYXRvci5jdXJyZW50LnRvU3RyaW5nKCkpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIHdyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgX2NodW5rZWRTaW5rLmFkZChpdGVyYXRvci5jdXJyZW50LnRvU3RyaW5nKCkpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9mbHVzaCgpIHsKICAgIHZhciBhY2N1bXVsYXRlZCA9IF9idWZmZXIudG9TdHJpbmcoKTsKICAgIF9idWZmZXIuY2xlYXIoKTsKICAgIF9jaHVua2VkU2luay5hZGQoYWNjdW11bGF0ZWQpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNlLWNsYXNzIGZvciBjb252ZXJ0ZXJzIHRoYXQgbmVlZCB0byBhY2NlcHQgU3RyaW5nCi8vLyBpbnB1dHMuCmFic3RyYWN0IGNsYXNzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rTWl4aW4ge30KCi8vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbWl4aW4gZm9yIGNvbnZlcnRlcnMgdGhhdCBuZWVkIHRvIGFjY2VwdCBTdHJpbmcKLy8vIGlucHV0cy4KYWJzdHJhY3QgY2xhc3MgU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbiBpbXBsZW1lbnRzIFN0cmluZ0NvbnZlcnNpb25TaW5rIHsKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzdHIsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpOwogIHZvaWQgY2xvc2UoKTsKCiAgdm9pZCBhZGQoU3RyaW5nIHN0cikgewogICAgYWRkU2xpY2Uoc3RyLCAwLCBzdHIubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKSB7CiAgICByZXR1cm4gX1V0ZjhDb252ZXJzaW9uU2luayh0aGlzLCBhbGxvd01hbGZvcm1lZCk7CiAgfQoKICBDbG9zYWJsZVN0cmluZ1NpbmsgYXNTdHJpbmdTaW5rKCkgewogICAgcmV0dXJuIF9TdHJpbmdDb252ZXJzaW9uU2lua0FzU3RyaW5nU2lua0FkYXB0ZXIodGhpcyk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBpcyBhIFtTdHJpbmdDb252ZXJzaW9uU2lua10gdGhhdCB3cmFwcyBhIFtTdHJpbmdTaW5rXS4KY2xhc3MgX1N0cmluZ1NpbmtDb252ZXJzaW9uU2luazxUU3RyaW5nU2luayBleHRlbmRzIFN0cmluZ1Npbms+CiAgICBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgVFN0cmluZ1NpbmsgX3N0cmluZ1Npbms7CiAgX1N0cmluZ1NpbmtDb252ZXJzaW9uU2luayh0aGlzLl9zdHJpbmdTaW5rKTsKCiAgdm9pZCBjbG9zZSgpIHt9CiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoc3RhcnQgIT0gMCB8fCBlbmQgIT0gc3RyLmxlbmd0aCkgewogICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIF9zdHJpbmdTaW5rLndyaXRlQ2hhckNvZGUoc3RyLmNvZGVVbml0QXQoaSkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBfc3RyaW5nU2luay53cml0ZShzdHIpOwogICAgfQogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKFN0cmluZyBzdHIpIHsKICAgIF9zdHJpbmdTaW5rLndyaXRlKHN0cik7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKSB7CiAgICByZXR1cm4gX1V0ZjhTdHJpbmdTaW5rQWRhcHRlcih0aGlzLCBfc3RyaW5nU2luaywgYWxsb3dNYWxmb3JtZWQpOwogIH0KCiAgQ2xvc2FibGVTdHJpbmdTaW5rIGFzU3RyaW5nU2luaygpIHsKICAgIHJldHVybiBDbG9zYWJsZVN0cmluZ1NpbmsuZnJvbVN0cmluZ1NpbmsoX3N0cmluZ1NpbmssIGNsb3NlKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBjaHVua3MgaW50byBvbmUgc3RyaW5nCi8vLyBhbmQgaW52b2tlcyBhIGNhbGxiYWNrIHdoZW4gdGhlIHNpbmsgaXMgY2xvc2VkLgovLy8KLy8vIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gdGVybWluYXRlIGEgY2h1bmtlZCBjb252ZXJzaW9uLgpjbGFzcyBfU3RyaW5nQ2FsbGJhY2tTaW5rIGV4dGVuZHMgX1N0cmluZ1NpbmtDb252ZXJzaW9uU2luazxTdHJpbmdCdWZmZXI+IHsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKFN0cmluZykgX2NhbGxiYWNrOwogIF9TdHJpbmdDYWxsYmFja1NpbmsodGhpcy5fY2FsbGJhY2spIDogc3VwZXIoU3RyaW5nQnVmZmVyKCkpOwoKICB2b2lkIGNsb3NlKCkgewogICAgdmFyIGFjY3VtdWxhdGVkID0gX3N0cmluZ1NpbmsudG9TdHJpbmcoKTsKICAgIF9zdHJpbmdTaW5rLmNsZWFyKCk7CiAgICBfY2FsbGJhY2soYWNjdW11bGF0ZWQpOwogIH0KCiAgQnl0ZUNvbnZlcnNpb25TaW5rIGFzVXRmOFNpbmsoYm9vbCBhbGxvd01hbGZvcm1lZCkgewogICAgcmV0dXJuIF9VdGY4U3RyaW5nU2lua0FkYXB0ZXIodGhpcywgX3N0cmluZ1NpbmssIGFsbG93TWFsZm9ybWVkKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGFkYXB0cyBhIHNpbXBsZSBbQ2h1bmtlZENvbnZlcnNpb25TaW5rXSB0byBhCi8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgovLy8KLy8vIEFsbCBhZGRpdGlvbmFsIG1ldGhvZHMgb2YgdGhlIFtTdHJpbmdDb252ZXJzaW9uU2lua10gKGNvbXBhcmVkIHRvIHRoZQovLy8gQ2h1bmtlZENvbnZlcnNpb25TaW5rKSBhcmUgcmVkaXJlY3RlZCB0byB0aGUgYGFkZGAgbWV0aG9kLgpjbGFzcyBfU3RyaW5nQWRhcHRlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIGZpbmFsIFNpbms8U3RyaW5nPiBfc2luazsKCiAgX1N0cmluZ0FkYXB0ZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZChTdHJpbmcgc3RyKSB7CiAgICBfc2luay5hZGQoc3RyKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgaWYgKHN0YXJ0ID09IDAgJiYgZW5kID09IHN0ci5sZW5ndGgpIHsKICAgICAgYWRkKHN0cik7CiAgICB9IGVsc2UgewogICAgICBhZGQoc3RyLnN1YnN0cmluZyhzdGFydCwgZW5kKSk7CiAgICB9CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgovLy8gRGVjb2RlcyBVVEYtOCBjb2RlIHVuaXRzIGFuZCBzdG9yZXMgdGhlbSBpbiBhIFtTdHJpbmdTaW5rXS4KY2xhc3MgX1V0ZjhTdHJpbmdTaW5rQWRhcHRlciBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgZmluYWwgX1V0ZjhEZWNvZGVyIF9kZWNvZGVyOwogIGZpbmFsIFNpbmsgX3Npbms7CgogIF9VdGY4U3RyaW5nU2lua0FkYXB0ZXIodGhpcy5fc2luaywgU3RyaW5nU2luayBzdHJpbmdTaW5rLCBib29sIGFsbG93TWFsZm9ybWVkKQogICAgICA6IF9kZWNvZGVyID0gX1V0ZjhEZWNvZGVyKHN0cmluZ1NpbmssIGFsbG93TWFsZm9ybWVkKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9kZWNvZGVyLmNsb3NlKCk7CiAgICBpZiAoX3NpbmsgIT0gbnVsbCkgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgewogICAgYWRkU2xpY2UoY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBhZGRTbGljZSgKICAgICAgTGlzdDxpbnQ+IGNvZGVVbml0cywgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpc0xhc3QpIHsKICAgIF9kZWNvZGVyLmNvbnZlcnQoY29kZVVuaXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KfQoKLy8vIERlY29kZXMgVVRGLTggY29kZSB1bml0cy4KLy8vCi8vLyBGb3J3YXJkcyB0aGUgZGVjb2RlZCBzdHJpbmdzIHRvIHRoZSBnaXZlbiBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgovLyBUT0RPKGZsb2l0c2NoKTogbWFrZSB0aGlzIGNsYXNzIHB1YmxpYz8KY2xhc3MgX1V0ZjhDb252ZXJzaW9uU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgZmluYWwgX1V0ZjhEZWNvZGVyIF9kZWNvZGVyOwogIGZpbmFsIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9jaHVua2VkU2luazsKICBmaW5hbCBTdHJpbmdCdWZmZXIgX2J1ZmZlcjsKICBfVXRmOENvbnZlcnNpb25TaW5rKFN0cmluZ0NvbnZlcnNpb25TaW5rIHNpbmssIGJvb2wgYWxsb3dNYWxmb3JtZWQpCiAgICAgIDogdGhpcy5fKHNpbmssIFN0cmluZ0J1ZmZlcigpLCBhbGxvd01hbGZvcm1lZCk7CgogIF9VdGY4Q29udmVyc2lvblNpbmsuXygKICAgICAgdGhpcy5fY2h1bmtlZFNpbmssIFN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIsIGJvb2wgYWxsb3dNYWxmb3JtZWQpCiAgICAgIDogX2RlY29kZXIgPSBfVXRmOERlY29kZXIoc3RyaW5nQnVmZmVyLCBhbGxvd01hbGZvcm1lZCksCiAgICAgICAgX2J1ZmZlciA9IHN0cmluZ0J1ZmZlcjsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9kZWNvZGVyLmNsb3NlKCk7CiAgICBpZiAoX2J1ZmZlci5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBhY2N1bXVsYXRlZCA9IF9idWZmZXIudG9TdHJpbmcoKTsKICAgICAgX2J1ZmZlci5jbGVhcigpOwogICAgICBfY2h1bmtlZFNpbmsuYWRkU2xpY2UoYWNjdW11bGF0ZWQsIDAsIGFjY3VtdWxhdGVkLmxlbmd0aCwgdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBfY2h1bmtlZFNpbmsuY2xvc2UoKTsKICAgIH0KICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgewogICAgYWRkU2xpY2UoY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaXNMYXN0KSB7CiAgICBfZGVjb2Rlci5jb252ZXJ0KGNodW5rLCBzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICBpZiAoX2J1ZmZlci5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBhY2N1bXVsYXRlZCA9IF9idWZmZXIudG9TdHJpbmcoKTsKICAgICAgX2NodW5rZWRTaW5rLmFkZFNsaWNlKGFjY3VtdWxhdGVkLCAwLCBhY2N1bXVsYXRlZC5sZW5ndGgsIGlzTGFzdCk7CiAgICAgIF9idWZmZXIuY2xlYXIoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9Cn0KgUAATk48ARYBNyYES0AeBFE8TRNMGlEbTQE4BkpLG0EtAScGSwYrQAE5BklSNhIXATAGSVIlAgFKFDdMR08bATYQAgE8JTojGgEzARERBAElIwQBGRQEASIWBAE9KAQCAUZNFytPJgEYJQE+IgERJhoEASUlNQQBGSYkBAEiGDUEAT0mJSYdCzclDTUkGjcIBgQBEioVIwQCAU8MTQFKDEs+EAEZKQQBNzYEASY7BAIBRkAnGy8BEj8rKjYIDR4GGQQBGRwEATdGBAEmQgQCATY0BD5MKT8BES4ZHAQBN0YEAgE8HARKPzwcASIBGRQEAT8rEA0mBhkEARETBAIBQDofFAFRPQERFiYEAR4tBAERSDcZBAIBHgRGKzcfKx5GNgEZST8gAREWHiwXRw0cBgQBHi0EAU4zHixJFw4GGQQCASNkYXJ0OmNvbnZlcnQvc3RyaW5nX2NvbnZlcnNpb24uZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC91dGYuZGFydMAATocvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gVGhlIFVuaWNvZGUgUmVwbGFjZW1lbnQgY2hhcmFjdGVyIGBVK0ZGRkRgICjvv70pLgpjb25zdCBpbnQgdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZSA9IDB4RkZGRDsKCi8vLyBUaGUgVW5pY29kZSBCeXRlIE9yZGVyIE1hcmtlciAoQk9NKSBjaGFyYWN0ZXIgYFUrRkVGRmAuCmNvbnN0IGludCB1bmljb2RlQm9tQ2hhcmFjdGVyUnVuZSA9IDB4RkVGRjsKCi8vLyBBbiBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1V0ZjhDb2RlY10uCi8vLwovLy8gVGhpcyBpbnN0YW5jZSBwcm92aWRlcyBhIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSBtb3N0IGNvbW1vbiBVVEYtOAovLy8gdXNlIGNhc2VzLgovLy8KLy8vIEV4YW1wbGVzOgovLy8KLy8vICAgICB2YXIgZW5jb2RlZCA9IHV0ZjguZW5jb2RlKCLDjsOxxaPDqXLDscOlxaPDrsO2w7HDpcS8w67FvsOlxaPDruG7ncOxIik7Ci8vLyAgICAgdmFyIGRlY29kZWQgPSB1dGY4LmRlY29kZShbMHg2MiwgMHg2YywgMHhjMywgMHhhNSwgMHg2MiwgMHhjMywgMHhhNiwKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcyLCAweDY3LCAweDcyLCAweGMzLCAweGI4LCAweDY0XSk7CmNvbnN0IFV0ZjhDb2RlYyB1dGY4ID0gVXRmOENvZGVjKCk7CgovLy8gQSBbVXRmOENvZGVjXSBlbmNvZGVzIHN0cmluZ3MgdG8gdXRmLTggY29kZSB1bml0cyAoYnl0ZXMpIGFuZCBkZWNvZGVzCi8vLyBVVEYtOCBjb2RlIHVuaXRzIHRvIHN0cmluZ3MuCmNsYXNzIFV0ZjhDb2RlYyBleHRlbmRzIEVuY29kaW5nIHsKICBmaW5hbCBib29sIF9hbGxvd01hbGZvcm1lZDsKCiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBbVXRmOENvZGVjXS4KICAvLy8KICAvLy8gVGhlIG9wdGlvbmFsIFthbGxvd01hbGZvcm1lZF0gYXJndW1lbnQgZGVmaW5lcyBob3cgW2RlY29kZXJdIChhbmQgW2RlY29kZV0pCiAgLy8vIGRlYWwgd2l0aCBpbnZhbGlkIG9yIHVudGVybWluYXRlZCBjaGFyYWN0ZXIgc2VxdWVuY2VzLgogIC8vLwogIC8vLyBJZiBpdCBpcyBgdHJ1ZWAgKGFuZCBub3Qgb3ZlcnJpZGRlbiBhdCB0aGUgbWV0aG9kIGludm9jYXRpb24pIFtkZWNvZGVdIGFuZAogIC8vLyB0aGUgW2RlY29kZXJdIHJlcGxhY2UgaW52YWxpZCAob3IgdW50ZXJtaW5hdGVkKSBvY3RldAogIC8vLyBzZXF1ZW5jZXMgd2l0aCB0aGUgVW5pY29kZSBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgYFUrRkZGRGAgKO+/vSkuIE90aGVyd2lzZQogIC8vLyB0aGV5IHRocm93IGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgY29uc3QgVXRmOENvZGVjKHtib29sIGFsbG93TWFsZm9ybWVkID0gZmFsc2V9KQogICAgICA6IF9hbGxvd01hbGZvcm1lZCA9IGFsbG93TWFsZm9ybWVkOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBjb2RlYywgInV0Zi04Ii4KICBTdHJpbmcgZ2V0IG5hbWUgPT4gInV0Zi04IjsKCiAgLy8vIERlY29kZXMgdGhlIFVURi04IFtjb2RlVW5pdHNdIChhIGxpc3Qgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpIHRvIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIHN0cmluZy4KICAvLy8KICAvLy8gSWYgdGhlIFtjb2RlVW5pdHNdIHN0YXJ0IHdpdGggdGhlIGVuY29kaW5nIG9mIGEKICAvLy8gW3VuaWNvZGVCb21DaGFyYWN0ZXJSdW5lXSwgdGhhdCBjaGFyYWN0ZXIgaXMgZGlzY2FyZGVkLgogIC8vLwogIC8vLyBJZiBbYWxsb3dNYWxmb3JtZWRdIGlzIGB0cnVlYCB0aGUgZGVjb2RlciByZXBsYWNlcyBpbnZhbGlkIChvcgogIC8vLyB1bnRlcm1pbmF0ZWQpIGNoYXJhY3RlciBzZXF1ZW5jZXMgd2l0aCB0aGUgVW5pY29kZSBSZXBsYWNlbWVudCBjaGFyYWN0ZXIKICAvLy8gYFUrRkZGRGAgKO+/vSkuIE90aGVyd2lzZSBpdCB0aHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICAvLy8KICAvLy8gSWYgW2FsbG93TWFsZm9ybWVkXSBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIHRoZSBgYWxsb3dNYWxmb3JtZWRgIHRoYXQKICAvLy8gd2FzIHVzZWQgdG8gaW5zdGFudGlhdGUgYHRoaXNgLgogIFN0cmluZyBkZWNvZGUoTGlzdDxpbnQ+IGNvZGVVbml0cywge2Jvb2wgYWxsb3dNYWxmb3JtZWR9KSB7CiAgICBhbGxvd01hbGZvcm1lZCA/Pz0gX2FsbG93TWFsZm9ybWVkOwogICAgcmV0dXJuIFV0ZjhEZWNvZGVyKGFsbG93TWFsZm9ybWVkOiBhbGxvd01hbGZvcm1lZCkuY29udmVydChjb2RlVW5pdHMpOwogIH0KCiAgVXRmOEVuY29kZXIgZ2V0IGVuY29kZXIgPT4gY29uc3QgVXRmOEVuY29kZXIoKTsKICBVdGY4RGVjb2RlciBnZXQgZGVjb2RlciB7CiAgICByZXR1cm4gVXRmOERlY29kZXIoYWxsb3dNYWxmb3JtZWQ6IF9hbGxvd01hbGZvcm1lZCk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBjb252ZXJ0cyBzdHJpbmdzIHRvIHRoZWlyIFVURi04IGNvZGUgdW5pdHMgKGEgbGlzdCBvZgovLy8gdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpLgpjbGFzcyBVdGY4RW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGNvbnN0IFV0ZjhFbmNvZGVyKCk7CgogIC8vLyBDb252ZXJ0cyBbc3RyaW5nXSB0byBpdHMgVVRGLTggY29kZSB1bml0cyAoYSBsaXN0IG9mCiAgLy8vIHVuc2lnbmVkIDgtYml0IGludGVnZXJzKS4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIHByb3ZpZGVkLCBvbmx5IHRoZSBzdWJzdHJpbmcKICAvLy8gYHN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZClgIGlzIGNvbnZlcnRlZC4KICBVaW50OExpc3QgY29udmVydChTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIHZhciBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc3RyaW5nTGVuZ3RoKTsKICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIFVpbnQ4TGlzdCgwKTsKICAgIC8vIENyZWF0ZSBhIG5ldyBlbmNvZGVyIHdpdGggYSBsZW5ndGggdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGJpZyBlbm91Z2guCiAgICAvLyBBIHNpbmdsZSBjb2RlIHVuaXQgdXNlcyBhdCBtb3N0IDMgYnl0ZXMsIGEgc3Vycm9nYXRlIHBhaXIgYXQgbW9zdCA0LgogICAgdmFyIGVuY29kZXIgPSBfVXRmOEVuY29kZXIud2l0aEJ1ZmZlclNpemUobGVuZ3RoICogMyk7CiAgICB2YXIgZW5kUG9zaXRpb24gPSBlbmNvZGVyLl9maWxsQnVmZmVyKHN0cmluZywgc3RhcnQsIGVuZCk7CiAgICBhc3NlcnQoZW5kUG9zaXRpb24gPj0gZW5kIC0gMSk7CiAgICBpZiAoZW5kUG9zaXRpb24gIT0gZW5kKSB7CiAgICAgIC8vIEVuY29kaW5nIHNraXBwZWQgdGhlIGxhc3QgY29kZSB1bml0LgogICAgICAvLyBUaGF0IGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgbGFzdCBjb2RlIHVuaXQgaXMgYSBsZWFkc3Vycm9nYXRlLgogICAgICAvLyBGb3JjZSBlbmNvZGluZyBvZiB0aGUgbGVhZCBzdXJyb2dhdGUgYnkgaXRzZWxmLgogICAgICB2YXIgbGFzdENvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQoZW5kIC0gMSk7CiAgICAgIGFzc2VydChfaXNMZWFkU3Vycm9nYXRlKGxhc3RDb2RlVW5pdCkpOwogICAgICAvLyBXZSB1c2UgYSBub24tc3Vycm9nYXRlIGFzIGBuZXh0VW5pdGAgc28gdGhhdCBfd3JpdGVTdXJyb2dhdGUganVzdAogICAgICAvLyB3cml0ZXMgdGhlIGxlYWQtc3Vycm9nYXRlLgogICAgICB2YXIgd2FzQ29tYmluZWQgPSBlbmNvZGVyLl93cml0ZVN1cnJvZ2F0ZShsYXN0Q29kZVVuaXQsIDApOwogICAgICBhc3NlcnQoIXdhc0NvbWJpbmVkKTsKICAgIH0KICAgIHJldHVybiBlbmNvZGVyLl9idWZmZXIuc3VibGlzdCgwLCBlbmNvZGVyLl9idWZmZXJJbmRleCk7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtCeXRlQ29udmVyc2lvblNpbmtdLgogIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIHJldHVybiBfVXRmOEVuY29kZXJTaW5rKAogICAgICAgIHNpbmsgaXMgQnl0ZUNvbnZlcnNpb25TaW5rID8gc2luayA6IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKHNpbmspKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlLWNsYXNzZXMgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxMaXN0PGludD4+IGJpbmQoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSA9PiBzdXBlci5iaW5kKHN0cmVhbSk7Cn0KCi8vLyBUaGlzIGNsYXNzIGVuY29kZXMgU3RyaW5ncyB0byBVVEYtOCBjb2RlIHVuaXRzICh1bnNpZ25lZCA4IGJpdCBpbnRlZ2VycykuCi8vIFRPRE8oZmxvaXRzY2gpOiBtYWtlIHRoaXMgY2xhc3MgcHVibGljLgpjbGFzcyBfVXRmOEVuY29kZXIgewogIGludCBfY2FycnkgPSAwOwogIGludCBfYnVmZmVySW5kZXggPSAwOwogIGZpbmFsIFVpbnQ4TGlzdCBfYnVmZmVyOwoKICBzdGF0aWMgY29uc3QgX0RFRkFVTFRfQllURV9CVUZGRVJfU0laRSA9IDEwMjQ7CgogIF9VdGY4RW5jb2RlcigpIDogdGhpcy53aXRoQnVmZmVyU2l6ZShfREVGQVVMVF9CWVRFX0JVRkZFUl9TSVpFKTsKCiAgX1V0ZjhFbmNvZGVyLndpdGhCdWZmZXJTaXplKGludCBidWZmZXJTaXplKQogICAgICA6IF9idWZmZXIgPSBfY3JlYXRlQnVmZmVyKGJ1ZmZlclNpemUpOwoKICAvLy8gQWxsb3cgYW4gaW1wbGVtZW50YXRpb24gdG8gcGljayB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IG9mIHN0b3JpbmcgYnl0ZXMuCiAgc3RhdGljIFVpbnQ4TGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBVaW50OExpc3Qoc2l6ZSk7CgogIC8vLyBUcmllcyB0byBjb21iaW5lIHRoZSBnaXZlbiBbbGVhZGluZ1N1cnJvZ2F0ZV0gd2l0aCB0aGUgW25leHRDb2RlVW5pdF0gYW5kCiAgLy8vIHdyaXRlcyBpdCB0byBbX2J1ZmZlcl0uCiAgLy8vCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgW25leHRDb2RlVW5pdF0gd2FzIGNvbWJpbmVkIHdpdGggdGhlCiAgLy8vIFtsZWFkaW5nU3Vycm9nYXRlXS4gSWYgaXQgd2Fzbid0IHRoZW4gbmV4dENvZGVVbml0IHdhcyBub3QgYSB0cmFpbGluZwogIC8vLyBzdXJyb2dhdGUgYW5kIGhhcyBub3QgYmVlbiB3cml0dGVuIHlldC4KICAvLy8KICAvLy8gSXQgaXMgc2FmZSB0byBwYXNzIDAgZm9yIFtuZXh0Q29kZVVuaXRdIGluIHdoaWNoIGNhc2Ugb25seSB0aGUgbGVhZGluZwogIC8vLyBzdXJyb2dhdGUgaXMgd3JpdHRlbi4KICBib29sIF93cml0ZVN1cnJvZ2F0ZShpbnQgbGVhZGluZ1N1cnJvZ2F0ZSwgaW50IG5leHRDb2RlVW5pdCkgewogICAgaWYgKF9pc1RhaWxTdXJyb2dhdGUobmV4dENvZGVVbml0KSkgewogICAgICB2YXIgcnVuZSA9IF9jb21iaW5lU3Vycm9nYXRlUGFpcihsZWFkaW5nU3Vycm9nYXRlLCBuZXh0Q29kZVVuaXQpOwogICAgICAvLyBJZiB0aGUgcnVuZSBpcyBlbmNvZGVkIHdpdGggMiBjb2RlLXVuaXRzIHRoZW4gaXQgbXVzdCBiZSBlbmNvZGVkCiAgICAgIC8vIHdpdGggNCBieXRlcyBpbiBVVEYtOC4KICAgICAgYXNzZXJ0KHJ1bmUgPiBfVEhSRUVfQllURV9MSU1JVCk7CiAgICAgIGFzc2VydChydW5lIDw9IF9GT1VSX0JZVEVfTElNSVQpOwogICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4RjAgfCAocnVuZSA+PiAxOCk7CiAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8ICgocnVuZSA+PiAxMikgJiAweDNmKTsKICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKChydW5lID4+IDYpICYgMHgzZik7CiAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8IChydW5lICYgMHgzZik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IGFsbG93IHRvIHRocm93IG9uIG1hbGZvcm1lZCBzdHJpbmdzLgogICAgICAvLyBFbmNvZGUgdGhlIGhhbGYtc3Vycm9nYXRlIGRpcmVjdGx5IGludG8gVVRGLTguIFRoaXMgeWllbGRzCiAgICAgIC8vIGludmFsaWQgVVRGLTgsIGJ1dCB3ZSBzdGFydGVkIG91dCB3aXRoIGludmFsaWQgVVRGLTE2LgoKICAgICAgLy8gU3Vycm9nYXRlcyBhcmUgYWx3YXlzIGVuY29kZWQgaW4gMyBieXRlcyBpbiBVVEYtOC4KICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweEUwIHwgKGxlYWRpbmdTdXJyb2dhdGUgPj4gMTIpOwogICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAoKGxlYWRpbmdTdXJyb2dhdGUgPj4gNikgJiAweDNmKTsKICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKGxlYWRpbmdTdXJyb2dhdGUgJiAweDNmKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgLy8vIEZpbGxzIHRoZSBbX2J1ZmZlcl0gd2l0aCBhcyBtYW55IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuCiAgLy8vCiAgLy8vIERvZXMgbm90IGVuY29kZSBhbnkgdHJhaWxpbmcgbGVhZC1zdXJyb2dhdGUuIFRoaXMgbXVzdCBiZSBkb25lIGJ5IHRoZQogIC8vLyBjYWxsZXIuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcuIFRoZSByZXR1cm5lZCBpbmRleCBwb2ludHMgdG8gdGhlCiAgLy8vIGZpcnN0IGNvZGUgdW5pdCB0aGF0IGhhc24ndCBiZWVuIGVuY29kZWQuCiAgaW50IF9maWxsQnVmZmVyKFN0cmluZyBzdHIsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgaWYgKHN0YXJ0ICE9IGVuZCAmJiBfaXNMZWFkU3Vycm9nYXRlKHN0ci5jb2RlVW5pdEF0KGVuZCAtIDEpKSkgewogICAgICAvLyBEb24ndCBoYW5kbGUgYSB0cmFpbGluZyBsZWFkLXN1cnJvZ2F0ZSBpbiB0aGlzIGxvb3AuIFRoZSBjYWxsZXIgaGFzCiAgICAgIC8vIHRvIGRlYWwgd2l0aCB0aG9zZS4KICAgICAgZW5kLS07CiAgICB9CiAgICBpbnQgc3RyaW5nSW5kZXg7CiAgICBmb3IgKHN0cmluZ0luZGV4ID0gc3RhcnQ7IHN0cmluZ0luZGV4IDwgZW5kOyBzdHJpbmdJbmRleCsrKSB7CiAgICAgIHZhciBjb2RlVW5pdCA9IHN0ci5jb2RlVW5pdEF0KHN0cmluZ0luZGV4KTsKICAgICAgLy8gQVNDSUkgaGFzIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIGluIFVURi04IGFuZCBVVEYtMTYuCiAgICAgIGlmIChjb2RlVW5pdCA8PSBfT05FX0JZVEVfTElNSVQpIHsKICAgICAgICBpZiAoX2J1ZmZlckluZGV4ID49IF9idWZmZXIubGVuZ3RoKSBicmVhazsKICAgICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IGNvZGVVbml0OwogICAgICB9IGVsc2UgaWYgKF9pc0xlYWRTdXJyb2dhdGUoY29kZVVuaXQpKSB7CiAgICAgICAgaWYgKF9idWZmZXJJbmRleCArIDMgPj0gX2J1ZmZlci5sZW5ndGgpIGJyZWFrOwogICAgICAgIC8vIE5vdGUgdGhhdCBpdCBpcyBzYWZlIHRvIHJlYWQgdGhlIG5leHQgY29kZSB1bml0LiBXZSBkZWNyZW1lbnRlZAogICAgICAgIC8vIFtlbmRdIGFib3ZlIHdoZW4gdGhlIGxhc3QgdmFsaWQgY29kZSB1bml0IHdhcyBhIGxlYWRpbmcgc3Vycm9nYXRlLgogICAgICAgIHZhciBuZXh0Q29kZVVuaXQgPSBzdHIuY29kZVVuaXRBdChzdHJpbmdJbmRleCArIDEpOwogICAgICAgIHZhciB3YXNDb21iaW5lZCA9IF93cml0ZVN1cnJvZ2F0ZShjb2RlVW5pdCwgbmV4dENvZGVVbml0KTsKICAgICAgICBpZiAod2FzQ29tYmluZWQpIHN0cmluZ0luZGV4Kys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHJ1bmUgPSBjb2RlVW5pdDsKICAgICAgICBpZiAocnVuZSA8PSBfVFdPX0JZVEVfTElNSVQpIHsKICAgICAgICAgIGlmIChfYnVmZmVySW5kZXggKyAxID49IF9idWZmZXIubGVuZ3RoKSBicmVhazsKICAgICAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHhDMCB8IChydW5lID4+IDYpOwogICAgICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKHJ1bmUgJiAweDNmKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KHJ1bmUgPD0gX1RIUkVFX0JZVEVfTElNSVQpOwogICAgICAgICAgaWYgKF9idWZmZXJJbmRleCArIDIgPj0gX2J1ZmZlci5sZW5ndGgpIGJyZWFrOwogICAgICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweEUwIHwgKHJ1bmUgPj4gMTIpOwogICAgICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKChydW5lID4+IDYpICYgMHgzZik7CiAgICAgICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAocnVuZSAmIDB4M2YpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0cmluZ0luZGV4OwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgZW5jb2RlcyBjaHVua2VkIHN0cmluZ3MgdG8gVVRGLTggY29kZSB1bml0cyAodW5zaWduZWQgOC1iaXQKLy8vIGludGVnZXJzKS4KY2xhc3MgX1V0ZjhFbmNvZGVyU2luayBleHRlbmRzIF9VdGY4RW5jb2RlciB3aXRoIFN0cmluZ0NvbnZlcnNpb25TaW5rTWl4aW4gewogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfc2luazsKCiAgX1V0ZjhFbmNvZGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChfY2FycnkgIT0gMCkgewogICAgICAvLyBhZGRTbGljZSB3aWxsIGNhbGwgY2xvc2UgYWdhaW4sIGJ1dCB0aGVuIHRoZSBjYXJyeSBtdXN0IGJlIGVxdWFsIHRvIDAuCiAgICAgIGFkZFNsaWNlKCIiLCAwLCAwLCB0cnVlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgX2J1ZmZlckluZGV4ID0gMDsKCiAgICBpZiAoc3RhcnQgPT0gZW5kICYmICFpc0xhc3QpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChfY2FycnkgIT0gMCkgewogICAgICB2YXIgbmV4dENvZGVVbml0ID0gMDsKICAgICAgaWYgKHN0YXJ0ICE9IGVuZCkgewogICAgICAgIG5leHRDb2RlVW5pdCA9IHN0ci5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoaXNMYXN0KTsKICAgICAgfQogICAgICB2YXIgd2FzQ29tYmluZWQgPSBfd3JpdGVTdXJyb2dhdGUoX2NhcnJ5LCBuZXh0Q29kZVVuaXQpOwogICAgICAvLyBFaXRoZXIgd2UgZ290IGEgbm9uLWVtcHR5IHN0cmluZywgb3Igd2UgbXVzdCBub3QgaGF2ZSBiZWVuIGNvbWJpbmVkLgogICAgICBhc3NlcnQoIXdhc0NvbWJpbmVkIHx8IHN0YXJ0ICE9IGVuZCk7CiAgICAgIGlmICh3YXNDb21iaW5lZCkgc3RhcnQrKzsKICAgICAgX2NhcnJ5ID0gMDsKICAgIH0KICAgIGRvIHsKICAgICAgc3RhcnQgPSBfZmlsbEJ1ZmZlcihzdHIsIHN0YXJ0LCBlbmQpOwogICAgICB2YXIgaXNMYXN0U2xpY2UgPSBpc0xhc3QgJiYgKHN0YXJ0ID09IGVuZCk7CiAgICAgIGlmIChzdGFydCA9PSBlbmQgLSAxICYmIF9pc0xlYWRTdXJyb2dhdGUoc3RyLmNvZGVVbml0QXQoc3RhcnQpKSkgewogICAgICAgIGlmIChpc0xhc3QgJiYgX2J1ZmZlckluZGV4IDwgX2J1ZmZlci5sZW5ndGggLSAzKSB7CiAgICAgICAgICAvLyBUaGVyZSBpcyBzdGlsbCBzcGFjZSBmb3IgdGhlIGxhc3QgaW5jb21wbGV0ZSBzdXJyb2dhdGUuCiAgICAgICAgICAvLyBXZSB1c2UgYSBub24tc3Vycm9nYXRlIGFzIHNlY29uZCBhcmd1bWVudC4gVGhpcyB3YXkgdGhlCiAgICAgICAgICAvLyBmdW5jdGlvbiB3aWxsIGp1c3QgYWRkIHRoZSBzdXJyb2dhdGUtaGFsZiB0byB0aGUgYnVmZmVyLgogICAgICAgICAgdmFyIGhhc0JlZW5Db21iaW5lZCA9IF93cml0ZVN1cnJvZ2F0ZShzdHIuY29kZVVuaXRBdChzdGFydCksIDApOwogICAgICAgICAgYXNzZXJ0KCFoYXNCZWVuQ29tYmluZWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPdGhlcndpc2Ugc3RvcmUgaXQgaW4gdGhlIGNhcnJ5LiBJZiBpc0xhc3QgaXMgdHJ1ZSwgdGhlbgogICAgICAgICAgLy8gY2xvc2Ugd2lsbCBmbHVzaCB0aGUgbGFzdCBjYXJyeS4KICAgICAgICAgIF9jYXJyeSA9IHN0ci5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgICB9CiAgICAgICAgc3RhcnQrKzsKICAgICAgfQogICAgICBfc2luay5hZGRTbGljZShfYnVmZmVyLCAwLCBfYnVmZmVySW5kZXgsIGlzTGFzdFNsaWNlKTsKICAgICAgX2J1ZmZlckluZGV4ID0gMDsKICAgIH0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICAvLyBUT0RPKGZsb2l0c2NoKTogaW1wbGVtZW50IGFzVXRmOFNpbmsuIFNsaWd0aGx5IGNvbXBsaWNhdGVkIGJlY2F1c2UgaXQKICAvLyBuZWVkcyB0byBkZWFsIHdpdGggbWFsZm9ybWVkIGlucHV0Lgp9CgovLy8gVGhpcyBjbGFzcyBjb252ZXJ0cyBVVEYtOCBjb2RlIHVuaXRzIChsaXN0cyBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykKLy8vIHRvIGEgc3RyaW5nLgpjbGFzcyBVdGY4RGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gewogIGZpbmFsIGJvb2wgX2FsbG93TWFsZm9ybWVkOwoKICAvLy8gSW5zdGFudGlhdGVzIGEgbmV3IFtVdGY4RGVjb2Rlcl0uCiAgLy8vCiAgLy8vIFRoZSBvcHRpb25hbCBbYWxsb3dNYWxmb3JtZWRdIGFyZ3VtZW50IGRlZmluZXMgaG93IFtjb252ZXJ0XSBkZWFscwogIC8vLyB3aXRoIGludmFsaWQgb3IgdW50ZXJtaW5hdGVkIGNoYXJhY3RlciBzZXF1ZW5jZXMuCiAgLy8vCiAgLy8vIElmIGl0IGlzIGB0cnVlYCBbY29udmVydF0gcmVwbGFjZXMgaW52YWxpZCAob3IgdW50ZXJtaW5hdGVkKSBjaGFyYWN0ZXIKICAvLy8gc2VxdWVuY2VzIHdpdGggdGhlIFVuaWNvZGUgUmVwbGFjZW1lbnQgY2hhcmFjdGVyIGBVK0ZGRkRgICjvv70pLiBPdGhlcndpc2UKICAvLy8gaXQgdGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgY29uc3QgVXRmOERlY29kZXIoe2Jvb2wgYWxsb3dNYWxmb3JtZWQgPSBmYWxzZX0pCiAgICAgIDogX2FsbG93TWFsZm9ybWVkID0gYWxsb3dNYWxmb3JtZWQ7CgogIC8vLyBDb252ZXJ0cyB0aGUgVVRGLTggW2NvZGVVbml0c10gKGEgbGlzdCBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykgdG8gdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nLgogIC8vLwogIC8vLyBVc2VzIHRoZSBjb2RlIHVuaXRzIGZyb20gW3N0YXJ0XSB0bywgYnV0IG5vIGluY2x1ZGluZywgW2VuZF0uCiAgLy8vIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBjb2RlVW5pdHMubGVuZ3RoYC4KICAvLy8KICAvLy8gSWYgdGhlIFtjb2RlVW5pdHNdIHN0YXJ0IHdpdGggdGhlIGVuY29kaW5nIG9mIGEKICAvLy8gW3VuaWNvZGVCb21DaGFyYWN0ZXJSdW5lXSwgdGhhdCBjaGFyYWN0ZXIgaXMgZGlzY2FyZGVkLgogIFN0cmluZyBjb252ZXJ0KExpc3Q8aW50PiBjb2RlVW5pdHMsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgLy8gQWxsb3cgdGhlIGltcGxlbWVudGF0aW9uIHRvIGludGVyY2VwdCBhbmQgc3BlY2lhbGl6ZSBiYXNlZCBvbiB0aGUgdHlwZQogICAgLy8gb2YgY29kZVVuaXRzLgogICAgdmFyIHJlc3VsdCA9IF9jb252ZXJ0SW50ZXJjZXB0ZWQoX2FsbG93TWFsZm9ybWVkLCBjb2RlVW5pdHMsIHN0YXJ0LCBlbmQpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgdmFyIGxlbmd0aCA9IGNvZGVVbml0cy5sZW5ndGg7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsZW5ndGgpOwoKICAgIC8vIEZhc3QgY2FzZSBmb3IgQVNDSUkgc3RyaW5ncyBhdm9pZHMgU3RyaW5nQnVmZmVyL19VdGY4RGVjb2Rlci4KICAgIGludCBvbmVCeXRlcyA9IF9zY2FuT25lQnl0ZUNoYXJhY3RlcnMoY29kZVVuaXRzLCBzdGFydCwgZW5kKTsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICBib29sIGlzRmlyc3RDaGFyYWN0ZXIgPSB0cnVlOwogICAgaWYgKG9uZUJ5dGVzID4gMCkgewogICAgICB2YXIgZmlyc3RQYXJ0ID0gU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzLCBzdGFydCwgc3RhcnQgKyBvbmVCeXRlcyk7CiAgICAgIHN0YXJ0ICs9IG9uZUJ5dGVzOwogICAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgICAgcmV0dXJuIGZpcnN0UGFydDsKICAgICAgfQogICAgICBidWZmZXIgPSBTdHJpbmdCdWZmZXIoZmlyc3RQYXJ0KTsKICAgICAgaXNGaXJzdENoYXJhY3RlciA9IGZhbHNlOwogICAgfQoKICAgIGJ1ZmZlciA/Pz0gU3RyaW5nQnVmZmVyKCk7CiAgICB2YXIgZGVjb2RlciA9IF9VdGY4RGVjb2RlcihidWZmZXIsIF9hbGxvd01hbGZvcm1lZCk7CiAgICBkZWNvZGVyLl9pc0ZpcnN0Q2hhcmFjdGVyID0gaXNGaXJzdENoYXJhY3RlcjsKICAgIGRlY29kZXIuY29udmVydChjb2RlVW5pdHMsIHN0YXJ0LCBlbmQpOwogICAgZGVjb2Rlci5mbHVzaChjb2RlVW5pdHMsIGVuZCk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0cmluZ1Npbms7CiAgICBpZiAoc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luaykgewogICAgICBzdHJpbmdTaW5rID0gc2luazsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmluZ1NpbmsgPSBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspOwogICAgfQogICAgcmV0dXJuIHN0cmluZ1NpbmsuYXNVdGY4U2luayhfYWxsb3dNYWxmb3JtZWQpOwogIH0KCiAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UtY2xhc3NlcyBiaW5kLCB0byBwcm92aWRlIGEgYmV0dGVyIHR5cGUuCiAgU3RyZWFtPFN0cmluZz4gYmluZChTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pID0+IHN1cGVyLmJpbmQoc3RyZWFtKTsKCiAgZXh0ZXJuYWwgQ29udmVydGVyPExpc3Q8aW50PiwgVD4gZnVzZTxUPihDb252ZXJ0ZXI8U3RyaW5nLCBUPiBuZXh0KTsKCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfY29udmVydEludGVyY2VwdGVkKAogICAgICBib29sIGFsbG93TWFsZm9ybWVkLCBMaXN0PGludD4gY29kZVVuaXRzLCBpbnQgc3RhcnQsIGludCBlbmQpOwp9CgovLyBVVEYtOCBjb25zdGFudHMuCmNvbnN0IGludCBfT05FX0JZVEVfTElNSVQgPSAweDdmOyAvLyA3IGJpdHMKY29uc3QgaW50IF9UV09fQllURV9MSU1JVCA9IDB4N2ZmOyAvLyAxMSBiaXRzCmNvbnN0IGludCBfVEhSRUVfQllURV9MSU1JVCA9IDB4ZmZmZjsgLy8gMTYgYml0cwpjb25zdCBpbnQgX0ZPVVJfQllURV9MSU1JVCA9IDB4MTBmZmZmOyAvLyAyMSBiaXRzLCB0cnVuY2F0ZWQgdG8gVW5pY29kZSBtYXguCgovLyBVVEYtMTYgY29uc3RhbnRzLgpjb25zdCBpbnQgX1NVUlJPR0FURV9UQUdfTUFTSyA9IDB4RkMwMDsKY29uc3QgaW50IF9TVVJST0dBVEVfVkFMVUVfTUFTSyA9IDB4M0ZGOwpjb25zdCBpbnQgX0xFQURfU1VSUk9HQVRFX01JTiA9IDB4RDgwMDsKY29uc3QgaW50IF9UQUlMX1NVUlJPR0FURV9NSU4gPSAweERDMDA7Cgpib29sIF9pc0xlYWRTdXJyb2dhdGUoaW50IGNvZGVVbml0KSA9PgogICAgKGNvZGVVbml0ICYgX1NVUlJPR0FURV9UQUdfTUFTSykgPT0gX0xFQURfU1VSUk9HQVRFX01JTjsKYm9vbCBfaXNUYWlsU3Vycm9nYXRlKGludCBjb2RlVW5pdCkgPT4KICAgIChjb2RlVW5pdCAmIF9TVVJST0dBVEVfVEFHX01BU0spID09IF9UQUlMX1NVUlJPR0FURV9NSU47CmludCBfY29tYmluZVN1cnJvZ2F0ZVBhaXIoaW50IGxlYWQsIGludCB0YWlsKSA9PgogICAgMHgxMDAwMCArICgobGVhZCAmIF9TVVJST0dBVEVfVkFMVUVfTUFTSykgPDwgMTApIHwKICAgICh0YWlsICYgX1NVUlJPR0FURV9WQUxVRV9NQVNLKTsKCi8vLyBEZWNvZGVzIFVURi04LgovLy8KLy8vIFRoZSBkZWNvZGVyIGhhbmRsZXMgY2h1bmtlZCBpbnB1dC4KLy8gVE9ETyhmbG9pdHNjaCk6IG1ha2UgdGhpcyBjbGFzcyBwdWJsaWMuCmNsYXNzIF9VdGY4RGVjb2RlciB7CiAgZmluYWwgYm9vbCBfYWxsb3dNYWxmb3JtZWQ7CiAgZmluYWwgU3RyaW5nU2luayBfc3RyaW5nU2luazsKICBib29sIF9pc0ZpcnN0Q2hhcmFjdGVyID0gdHJ1ZTsKICBpbnQgX3ZhbHVlID0gMDsKICBpbnQgX2V4cGVjdGVkVW5pdHMgPSAwOwogIGludCBfZXh0cmFVbml0cyA9IDA7CgogIF9VdGY4RGVjb2Rlcih0aGlzLl9zdHJpbmdTaW5rLCB0aGlzLl9hbGxvd01hbGZvcm1lZCk7CgogIGJvb2wgZ2V0IGhhc1BhcnRpYWxJbnB1dCA9PiBfZXhwZWN0ZWRVbml0cyA+IDA7CgogIC8vIExpbWl0cyBvZiBvbmUgdGhyb3VnaCBmb3VyIGJ5dGUgZW5jb2RpbmdzLgogIHN0YXRpYyBjb25zdCBMaXN0PGludD4gX0xJTUlUUyA9IDxpbnQ+WwogICAgX09ORV9CWVRFX0xJTUlULAogICAgX1RXT19CWVRFX0xJTUlULAogICAgX1RIUkVFX0JZVEVfTElNSVQsCiAgICBfRk9VUl9CWVRFX0xJTUlUCiAgXTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIGZsdXNoKCk7CiAgfQoKICAvLy8gRmx1c2hlcyB0aGlzIGRlY29kZXIgYXMgaWYgY2xvc2VkLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCB0aHJvd3MgaWYgdGhlIGlucHV0IHdhcyBwYXJ0aWFsIGFuZCB0aGUgZGVjb2RlciB3YXMKICAvLy8gY29uc3RydWN0ZWQgd2l0aCBgYWxsb3dNYWxmb3JtZWRgIHNldCB0byBgZmFsc2VgLgogIC8vLwogIC8vLyBUaGUgW3NvdXJjZV0gYW5kIFtvZmZzZXRdIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1heSBiZSBwcm92aWRlZCwKICAvLy8gYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgZXhjZXB0aW9uIGlmIG9uZSBpcyB0aHJvd24uCiAgdm9pZCBmbHVzaChbTGlzdDxpbnQ+IHNvdXJjZSwgaW50IG9mZnNldF0pIHsKICAgIGlmIChoYXNQYXJ0aWFsSW5wdXQpIHsKICAgICAgaWYgKCFfYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJVbmZpbmlzaGVkIFVURi04IG9jdGV0IHNlcXVlbmNlIiwgc291cmNlLCBvZmZzZXQpOwogICAgICB9CiAgICAgIF9zdHJpbmdTaW5rLndyaXRlQ2hhckNvZGUodW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZSk7CiAgICAgIF92YWx1ZSA9IDA7CiAgICAgIF9leHBlY3RlZFVuaXRzID0gMDsKICAgICAgX2V4dHJhVW5pdHMgPSAwOwogICAgfQogIH0KCiAgdm9pZCBjb252ZXJ0KExpc3Q8aW50PiBjb2RlVW5pdHMsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpIHsKICAgIHZhciB2YWx1ZSA9IF92YWx1ZTsKICAgIHZhciBleHBlY3RlZFVuaXRzID0gX2V4cGVjdGVkVW5pdHM7CiAgICB2YXIgZXh0cmFVbml0cyA9IF9leHRyYVVuaXRzOwogICAgX3ZhbHVlID0gMDsKICAgIF9leHBlY3RlZFVuaXRzID0gMDsKICAgIF9leHRyYVVuaXRzID0gMDsKCiAgICB2YXIgaSA9IHN0YXJ0SW5kZXg7CiAgICBsb29wOgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgbXVsdGlieXRlOgogICAgICBpZiAoZXhwZWN0ZWRVbml0cyA+IDApIHsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoaSA9PSBlbmRJbmRleCkgewogICAgICAgICAgICBicmVhayBsb29wOwogICAgICAgICAgfQogICAgICAgICAgdmFyIHVuaXQgPSBjb2RlVW5pdHNbaV07CiAgICAgICAgICBpZiAoKHVuaXQgJiAweEMwKSAhPSAweDgwKSB7CiAgICAgICAgICAgIGV4cGVjdGVkVW5pdHMgPSAwOwogICAgICAgICAgICBpZiAoIV9hbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgIkJhZCBVVEYtOCBlbmNvZGluZyAweCR7dW5pdC50b1JhZGl4U3RyaW5nKDE2KX0iLAogICAgICAgICAgICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgICAgICAgICAgIGkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9pc0ZpcnN0Q2hhcmFjdGVyID0gZmFsc2U7CiAgICAgICAgICAgIF9zdHJpbmdTaW5rLndyaXRlQ2hhckNvZGUodW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZSk7CiAgICAgICAgICAgIGJyZWFrIG11bHRpYnl0ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IDYpIHwgKHVuaXQgJiAweDNmKTsKICAgICAgICAgICAgZXhwZWN0ZWRVbml0cy0tOwogICAgICAgICAgICBpKys7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoZXhwZWN0ZWRVbml0cyA+IDApOwogICAgICAgIGlmICh2YWx1ZSA8PSBfTElNSVRTW2V4dHJhVW5pdHMgLSAxXSkgewogICAgICAgICAgLy8gT3Zlcmx5IGxvbmcgZW5jb2RpbmcuIFRoZSB2YWx1ZSBjb3VsZCBiZSBlbmNvZGVkIHdpdGggYSBzaG9ydGVyCiAgICAgICAgICAvLyBlbmNvZGluZy4KICAgICAgICAgIGlmICghX2FsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJPdmVybG9uZyBlbmNvZGluZyBvZiAweCR7dmFsdWUudG9SYWRpeFN0cmluZygxNil9IiwKICAgICAgICAgICAgICAgIGNvZGVVbml0cywKICAgICAgICAgICAgICAgIGkgLSBleHRyYVVuaXRzIC0gMSk7CiAgICAgICAgICB9CiAgICAgICAgICBleHBlY3RlZFVuaXRzID0gZXh0cmFVbml0cyA9IDA7CiAgICAgICAgICB2YWx1ZSA9IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmU7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSA+IF9GT1VSX0JZVEVfTElNSVQpIHsKICAgICAgICAgIGlmICghX2FsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJDaGFyYWN0ZXIgb3V0c2lkZSB2YWxpZCBVbmljb2RlIHJhbmdlOiAiCiAgICAgICAgICAgICAgICAiMHgke3ZhbHVlLnRvUmFkaXhTdHJpbmcoMTYpfSIsCiAgICAgICAgICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgICAgICAgICBpIC0gZXh0cmFVbml0cyAtIDEpOwogICAgICAgICAgfQogICAgICAgICAgdmFsdWUgPSB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lOwogICAgICAgIH0KICAgICAgICBpZiAoIV9pc0ZpcnN0Q2hhcmFjdGVyIHx8IHZhbHVlICE9IHVuaWNvZGVCb21DaGFyYWN0ZXJSdW5lKSB7CiAgICAgICAgICBfc3RyaW5nU2luay53cml0ZUNoYXJDb2RlKHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgX2lzRmlyc3RDaGFyYWN0ZXIgPSBmYWxzZTsKICAgICAgfQoKICAgICAgd2hpbGUgKGkgPCBlbmRJbmRleCkgewogICAgICAgIHZhciBvbmVCeXRlcyA9IF9zY2FuT25lQnl0ZUNoYXJhY3RlcnMoY29kZVVuaXRzLCBpLCBlbmRJbmRleCk7CiAgICAgICAgaWYgKG9uZUJ5dGVzID4gMCkgewogICAgICAgICAgX2lzRmlyc3RDaGFyYWN0ZXIgPSBmYWxzZTsKICAgICAgICAgIGFzc2VydChpICsgb25lQnl0ZXMgPD0gZW5kSW5kZXgpOwogICAgICAgICAgX3N0cmluZ1Npbmsud3JpdGUoU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzLCBpLCBpICsgb25lQnl0ZXMpKTsKCiAgICAgICAgICBpICs9IG9uZUJ5dGVzOwogICAgICAgICAgaWYgKGkgPT0gZW5kSW5kZXgpIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgdW5pdCA9IGNvZGVVbml0c1tpKytdOwogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgd2F5IHdlIHRlc3Qgd2UgY291bGQgcG90ZW50aWFsbHkgYWxsb3cKICAgICAgICAvLyB1bml0cyB0aGF0IGFyZSB0b28gbGFyZ2UsIGlmIHRoZXkgaGFwcGVuIHRvIGhhdmUgdGhlCiAgICAgICAgLy8gcmlnaHQgYml0LXBhdHRlcm4uIChTYW1lIGlzIHRydWUgZm9yIHRoZSBtdWx0aWJ5dGUgbG9vcCBhYm92ZSkuCiAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IG9wdGltaXplIHRoaXMgbG9vcC4gU2VlOgogICAgICAgIC8vIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMjI5MjkwMjIvZGlmZi8xL3Nkay9saWIvY29udmVydC91dGYuZGFydD9jb2x1bW5fd2lkdGg9ODAKICAgICAgICBpZiAodW5pdCA8IDApIHsKICAgICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBzaG91bGQgdGhpcyBiZSB1bml0IDw9IDAgPwogICAgICAgICAgaWYgKCFfYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIk5lZ2F0aXZlIFVURi04IGNvZGUgdW5pdDogLTB4JHsoLXVuaXQpLnRvUmFkaXhTdHJpbmcoMTYpfSIsCiAgICAgICAgICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgICAgICAgICBpIC0gMSk7CiAgICAgICAgICB9CiAgICAgICAgICBfc3RyaW5nU2luay53cml0ZUNoYXJDb2RlKHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQodW5pdCA+IF9PTkVfQllURV9MSU1JVCk7CiAgICAgICAgICBpZiAoKHVuaXQgJiAweEUwKSA9PSAweEMwKSB7CiAgICAgICAgICAgIHZhbHVlID0gdW5pdCAmIDB4MUY7CiAgICAgICAgICAgIGV4cGVjdGVkVW5pdHMgPSBleHRyYVVuaXRzID0gMTsKICAgICAgICAgICAgY29udGludWUgbG9vcDsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgodW5pdCAmIDB4RjApID09IDB4RTApIHsKICAgICAgICAgICAgdmFsdWUgPSB1bml0ICYgMHgwRjsKICAgICAgICAgICAgZXhwZWN0ZWRVbml0cyA9IGV4dHJhVW5pdHMgPSAyOwogICAgICAgICAgICBjb250aW51ZSBsb29wOwogICAgICAgICAgfQogICAgICAgICAgLy8gMHhGNSwgMHhGNiAuLi4gMHhGRiBuZXZlciBhcHBlYXIgaW4gdmFsaWQgVVRGLTggc2VxdWVuY2VzLgogICAgICAgICAgaWYgKCh1bml0ICYgMHhGOCkgPT0gMHhGMCAmJiB1bml0IDwgMHhGNSkgewogICAgICAgICAgICB2YWx1ZSA9IHVuaXQgJiAweDA3OwogICAgICAgICAgICBleHBlY3RlZFVuaXRzID0gZXh0cmFVbml0cyA9IDM7CiAgICAgICAgICAgIGNvbnRpbnVlIGxvb3A7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9hbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiQmFkIFVURi04IGVuY29kaW5nIDB4JHt1bml0LnRvUmFkaXhTdHJpbmcoMTYpfSIsCiAgICAgICAgICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgICAgICAgICBpIC0gMSk7CiAgICAgICAgICB9CiAgICAgICAgICB2YWx1ZSA9IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmU7CiAgICAgICAgICBleHBlY3RlZFVuaXRzID0g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YXRlZ29yeSBDb3JlfQpsaWJyYXJ5IGRhcnQuZGV2ZWxvcGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZScgc2hvdyBJc29sYXRlLCBSYXdSZWNlaXZlUG9ydCwgU2VuZFBvcnQ7CgpwYXJ0ICdleHRlbnNpb24uZGFydCc7CnBhcnQgJ3Byb2ZpbGVyLmRhcnQnOwpwYXJ0ICdzZXJ2aWNlLmRhcnQnOwpwYXJ0ICd0aW1lbGluZS5kYXJ0JzsKCi8vLyBJZiBbd2hlbl0gaXMgdHJ1ZSwgc3RvcCB0aGUgcHJvZ3JhbSBhcyBpZiBhIGJyZWFrcG9pbnQgd2VyZSBoaXQgYXQgdGhlCi8vLyBmb2xsb3dpbmcgc3RhdGVtZW50LgovLy8KLy8vIFJldHVybnMgdGhlIHZhbHVlIG9mIFt3aGVuXS4gU29tZSBkZWJ1Z2dlcnMgbWF5IGRpc3BsYXkgW21lc3NhZ2VdLgovLy8KLy8vIE5PVEU6IFdoZW4gaW52b2tlZCwgdGhlIGlzb2xhdGUgd2lsbCBub3QgcmV0dXJuIHVudGlsIGEgZGVidWdnZXIKLy8vIGNvbnRpbnVlcyBleGVjdXRpb24uIFdoZW4gcnVubmluZyBpbiB0aGUgRGFydCBWTSwgdGhlIGJlaGF2aW91ciBpcyB0aGUgc2FtZQovLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBhIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZC4gV2hlbiBjb21waWxlZCB0bwovLy8gSmF2YVNjcmlwdCwgdGhpcyB1c2VzIHRoZSAiZGVidWdnZXIiIHN0YXRlbWVudCwgYW5kIGJlaGF2ZXMgZXhhY3RseSBhcwovLy8gdGhhdCBkb2VzLgpleHRlcm5hbCBib29sIGRlYnVnZ2VyKHtib29sIHdoZW46IHRydWUsIFN0cmluZyBtZXNzYWdlfSk7CgovLy8gU2VuZCBhIHJlZmVyZW5jZSB0byBbb2JqZWN0XSB0byBhbnkgYXR0YWNoZWQgZGVidWdnZXJzLgovLy8KLy8vIERlYnVnZ2VycyBtYXkgb3BlbiBhbiBpbnNwZWN0b3Igb24gdGhlIG9iamVjdC4gUmV0dXJucyB0aGUgYXJndW1lbnQuCmV4dGVybmFsIE9iamVjdCBpbnNwZWN0KE9iamVjdCBvYmplY3QpOwoKLy8vIEVtaXQgYSBsb2cgZXZlbnQuCi8vLwovLy8gVGhpcyBmdW5jdGlvbiB3YXMgZGVzaWduZWQgdG8gbWFwIGNsb3NlbHkgdG8gdGhlIGxvZ2dpbmcgaW5mb3JtYXRpb24KLy8vIGNvbGxlY3RlZCBieSBgcGFja2FnZTpsb2dnaW5nYC4KLy8vCi8vLyAtIFttZXNzYWdlXSBpcyB0aGUgbG9nIG1lc3NhZ2UKLy8vIC0gW3RpbWVdIChvcHRpb25hbCkgaXMgdGhlIHRpbWVzdGFtcAovLy8gLSBbc2VxdWVuY2VOdW1iZXJdIChvcHRpb25hbCkgaXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VxdWVuY2UgbnVtYmVyCi8vLyAtIFtsZXZlbF0gKG9wdGlvbmFsKSBpcyB0aGUgc2V2ZXJpdHkgbGV2ZWwgKGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyMDAwKTsgc2VlCi8vLyAgIHRoZSBgcGFja2FnZTpsb2dnaW5nYCBgTGV2ZWxgIGNsYXNzIGZvciBhbiBvdmVydmlldyBvZiB0aGUgcG9zc2libGUgdmFsdWVzCi8vLyAtIFtuYW1lXSAob3B0aW9uYWwpIGlzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2Ugb2YgdGhlIGxvZyBtZXNzYWdlCi8vLyAtIFt6b25lXSAob3B0aW9uYWwpIHRoZSB6b25lIHdoZXJlIHRoZSBsb2cgd2FzIGVtaXR0ZWQKLy8vIC0gW2Vycm9yXSAob3B0aW9uYWwpIGFuIGVycm9yIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsb2cgZXZlbnQKLy8vIC0gW3N0YWNrVHJhY2VdIChvcHRpb25hbCkgYSBzdGFjayB0cmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsb2cgZXZlbnQKZXh0ZXJuYWwgdm9pZCBsb2coCiAgU3RyaW5nIG1lc3NhZ2UsIHsKICBEYXRlVGltZSB0aW1lLAogIGludCBzZXF1ZW5jZU51bWJlciwKICBpbnQgbGV2ZWw6IDAsCiAgU3RyaW5nIG5hbWU6ICcnLAogIFpvbmUgem9uZSwKICBPYmplY3QgZXJyb3IsCiAgU3RhY2tUcmFjZSBzdGFja1RyYWNlLAp9KTsKRQBOTjwBRgRMRhAEJgQhBBUYARUXPgEXFhUWAUsZBEcERVBLSw87ATwESSgBFgRJJAQjKVBRUUU7SEsTFBEWEBMNEBkEAQ5kYXJ0OmRldmVsb3BlcjRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZGV2ZWxvcGVyL2V4dGVuc2lvbi5kYXJ0l6kvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmRldmVsb3BlcjsKCi8vLyBBIHJlc3BvbnNlIHRvIGEgc2VydmljZSBwcm90b2NvbCBleHRlbnNpb24gUlBDLgovLy8KLy8vIElmIHRoZSBSUEMgd2FzIHN1Y2Nlc3NmdWwsIHVzZSBbU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdF0sIG90aGVyd2lzZQovLy8gdXNlIFtTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3JdLgpjbGFzcyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UgewogIC8vLyBUaGUgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBzZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbiBSUEMuCiAgZmluYWwgU3RyaW5nIHJlc3VsdDsKCiAgLy8vIFRoZSBlcnJvciBjb2RlIGFzc29jaWF0ZWQgd2l0aCBhIGZhaWxlZCBzZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbiBSUEMuCiAgZmluYWwgaW50IGVycm9yQ29kZTsKCiAgLy8vIFRoZSBkZXRhaWxzIG9mIGEgZmFpbGVkIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICBmaW5hbCBTdHJpbmcgZXJyb3JEZXRhaWw7CgogIC8vLyBDcmVhdGVzIGEgc3VjY2Vzc2Z1bCByZXNwb25zZSB0byBhIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICAvLy8KICAvLy8gUmVxdWlyZXMgW3Jlc3VsdF0gdG8gYmUgYSBKU09OIG9iamVjdCBlbmNvZGVkIGFzIGEgc3RyaW5nLiBXaGVuIGZvcm1pbmcKICAvLy8gdGhlIEpTT04tUlBDIG1lc3NhZ2UgW3Jlc3VsdF0gd2lsbCBiZSBpbmxpbmVkIGRpcmVjdGx5LgogIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQoU3RyaW5nIHJlc3VsdCkKICAgICAgOiByZXN1bHQgPSByZXN1bHQsCiAgICAgICAgZXJyb3JDb2RlID0gbnVsbCwKICAgICAgICBlcnJvckRldGFpbCA9IG51bGwgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwocmVzdWx0LCAicmVzdWx0Iik7CiAgfQoKICAvLy8gQ3JlYXRlcyBhbiBlcnJvciByZXNwb25zZSB0byBhIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICAvLy8KICAvLy8gUmVxdWlyZXMgW2Vycm9yQ29kZV0gdG8gYmUgW2ludmFsaWRQYXJhbXNdIG9yIGJldHdlZW4gW2V4dGVuc2lvbkVycm9yTWluXQogIC8vLyBhbmQgW2V4dGVuc2lvbkVycm9yTWF4XS4gUmVxdWlyZXMgW2Vycm9yRGV0YWlsXSB0byBiZSBhIEpTT04gb2JqZWN0CiAgLy8vIGVuY29kZWQgYXMgYSBzdHJpbmcuIFdoZW4gZm9ybWluZyB0aGUgSlNPTi1SUEMgbWVzc2FnZSBbZXJyb3JEZXRhaWxdIHdpbGwKICAvLy8gYmUgaW5saW5lZCBkaXJlY3RseS4KICBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3IoaW50IGVycm9yQ29kZSwgU3RyaW5nIGVycm9yRGV0YWlsKQogICAgICA6IHJlc3VsdCA9IG51bGwsCiAgICAgICAgZXJyb3JDb2RlID0gZXJyb3JDb2RlLAogICAgICAgIGVycm9yRGV0YWlsID0gZXJyb3JEZXRhaWwgewogICAgX3ZhbGlkYXRlRXJyb3JDb2RlKGVycm9yQ29kZSk7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChlcnJvckRldGFpbCwgImVycm9yRGV0YWlsIik7CiAgfQoKICAvLy8gSW52YWxpZCBtZXRob2QgcGFyYW1ldGVyKHMpIGVycm9yIGNvZGUuCiAgQGRlcHJlY2F0ZWQKICBzdGF0aWMgY29uc3Qga0ludmFsaWRQYXJhbXMgPSBpbnZhbGlkUGFyYW1zOwoKICAvLy8gR2VuZXJpYyBleHRlbnNpb24gZXJyb3IgY29kZS4KICBAZGVwcmVjYXRlZAogIHN0YXRpYyBjb25zdCBrRXh0ZW5zaW9uRXJyb3IgPSBleHRlbnNpb25FcnJvcjsKCiAgLy8vIE1heGltdW0gZXh0ZW5zaW9uIHByb3ZpZGVkIGVycm9yIGNvZGUuCiAgQGRlcHJlY2F0ZWQKICBzdGF0aWMgY29uc3Qga0V4dGVuc2lvbkVycm9yTWF4ID0gZXh0ZW5zaW9uRXJyb3JNYXg7CgogIC8vLyBNaW5pbXVtIGV4dGVuc2lvbiBwcm92aWRlZCBlcnJvciBjb2RlLgogIEBkZXByZWNhdGVkCiAgc3RhdGljIGNvbnN0IGtFeHRlbnNpb25FcnJvck1pbiA9IGV4dGVuc2lvbkVycm9yTWluOwoKICAvLy8gSW52YWxpZCBtZXRob2QgcGFyYW1ldGVyKHMpIGVycm9yIGNvZGUuCiAgc3RhdGljIGNvbnN0IGludmFsaWRQYXJhbXMgPSAtMzI2MDI7CgogIC8vLyBHZW5lcmljIGV4dGVuc2lvbiBlcnJvciBjb2RlLgogIHN0YXRpYyBjb25zdCBleHRlbnNpb25FcnJvciA9IC0zMjAwMDsKCiAgLy8vIE1heGltdW0gZXh0ZW5zaW9uIHByb3ZpZGVkIGVycm9yIGNvZGUuCiAgc3RhdGljIGNvbnN0IGV4dGVuc2lvbkVycm9yTWF4ID0gLTMyMDAwOwoKICAvLy8gTWluaW11bSBleHRlbnNpb24gcHJvdmlkZWQgZXJyb3IgY29kZS4KICBzdGF0aWMgY29uc3QgZXh0ZW5zaW9uRXJyb3JNaW4gPSAtMzIwMTY7CgogIHN0YXRpYyBTdHJpbmcgX2Vycm9yQ29kZU1lc3NhZ2UoaW50IGVycm9yQ29kZSkgewogICAgX3ZhbGlkYXRlRXJyb3JDb2RlKGVycm9yQ29kZSk7CiAgICBpZiAoZXJyb3JDb2RlID09IGludmFsaWRQYXJhbXMpIHsKICAgICAgcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7CiAgICB9CiAgICByZXR1cm4gIlNlcnZlciBlcnJvciI7CiAgfQoKICBzdGF0aWMgX3ZhbGlkYXRlRXJyb3JDb2RlKGludCBlcnJvckNvZGUpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGVycm9yQ29kZSwgImVycm9yQ29kZSIpOwogICAgaWYgKGVycm9yQ29kZSA9PSBpbnZhbGlkUGFyYW1zKSByZXR1cm47CiAgICBpZiAoKGVycm9yQ29kZSA+PSBleHRlbnNpb25FcnJvck1pbikgJiYgKGVycm9yQ29kZSA8PSBleHRlbnNpb25FcnJvck1heCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoZXJyb3JDb2RlLCAiZXJyb3JDb2RlIiwgIk91dCBvZiByYW5nZSIpOwogIH0KCiAgLy8vIERldGVybWluZXMgaWYgdGhpcyByZXNwb25zZSByZXByZXNlbnRzIGFuIGVycm9yLgogIGJvb2wgaXNFcnJvcigpID0+IChlcnJvckNvZGUgIT0gbnVsbCkgJiYgKGVycm9yRGV0YWlsICE9IG51bGwpOwoKICAvLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50LCBjYWxsZWQgZnJvbSBydW50aW1lL2xpYi9kZXZlbG9wZXIuZGFydAogIFN0cmluZyBfdG9TdHJpbmcoKSB7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChlcnJvckNvZGUgIT0gbnVsbCk7CiAgICAgIGFzc2VydChlcnJvckRldGFpbCAhPSBudWxsKTsKICAgICAgcmV0dXJuIGpzb24uZW5jb2RlKHsKICAgICAgICAnY29kZSc6IGVycm9yQ29kZSwKICAgICAgICAnbWVzc2FnZSc6IF9lcnJvckNvZGVNZXNzYWdlKGVycm9yQ29kZSksCiAgICAgICAgJ2RhdGEnOiB7J2RldGFpbHMnOiBlcnJvckRldGFpbH0KICAgICAgfSk7CiAgICB9CiAgfQp9CgovLy8gQSBzZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbiBoYW5kbGVyLiBSZWdpc3RlcmVkIHdpdGggW3JlZ2lzdGVyRXh0ZW5zaW9uXS4KLy8vCi8vLyBNdXN0IGNvbXBsZXRlIHRvIGEgW1NlcnZpY2VFeHRlbnNpb25SZXNwb25zZV0uIFttZXRob2RdIGlzIHRoZSBtZXRob2QgbmFtZQovLy8gb2YgdGhlIHNlcnZpY2UgcHJvdG9jb2wgcmVxdWVzdCwgYW5kIFtwYXJhbWV0ZXJzXSBpcyBhIG1hcCBob2xkaW5nIHRoZQovLy8gcGFyYW1ldGVycyB0byB0aGUgc2VydmljZSBwcm90b2NvbCByZXF1ZXN0LgovLy8KLy8vICpOT1RFKjogYWxsIHBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzIGFyZSBlbmNvZGVkIGFzIHN0cmluZ3MuCnR5cGVkZWYgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gU2VydmljZUV4dGVuc2lvbkhhbmRsZXIoCiAgICBTdHJpbmcgbWV0aG9kLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMpOwoKLy8vIFJlZ2lzdGVyIGEgW1NlcnZpY2VFeHRlbnNpb25IYW5kbGVyXSB0aGF0IHdpbGwgYmUgaW52b2tlZCBpbiB0aGlzIGlzb2xhdGUKLy8vIGZvciBbbWV0aG9kXS4gKk5PVEUqOiBTZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbnMgbXVzdCBiZSByZWdpc3RlcmVkCi8vLyBpbiBlYWNoIGlzb2xhdGUuCi8vLwovLy8gKk5PVEUqOiBbbWV0aG9kXSBtdXN0IGJlZ2luIHdpdGggJ2V4dC4nIGFuZCB5b3Ugc2hvdWxkIHVzZSB0aGUgZm9sbG93aW5nCi8vLyBzdHJ1Y3R1cmUgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgcGFja2FnZXM6ICdleHQucGFja2FnZS5jb21tYW5kJy4KLy8vIFRoYXQgaXMsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgJ2V4dC4nIHByZWZpeCwgc2hvdWxkIGJlIHRoZSByZWdpc3RlcmluZwovLy8gcGFja2FnZSBuYW1lIGZvbGxvd2VkIGJ5IGFub3RoZXIgcGVyaW9kICgnLicpIGFuZCB0aGVuIHRoZSBjb21tYW5kIG5hbWUuCi8vLyBGb3IgZXhhbXBsZTogJ2V4dC5kYXJ0LmlvLmdldE9wZW5GaWxlcycuCi8vLwovLy8gQmVjYXVzZSBzZXJ2aWNlIGV4dGVuc2lvbnMgYXJlIGlzb2xhdGUgc3BlY2lmaWMsIGNsaWVudHMgdXNpbmcgZXh0ZW5zaW9ucwovLy8gbXVzdCBhbHdheXMgaW5jbHVkZSBhbiAnaXNvbGF0ZUlkJyBwYXJhbWV0ZXIgd2l0aCBlYWNoIFJQQy4Kdm9pZCByZWdpc3RlckV4dGVuc2lvbihTdHJpbmcgbWV0aG9kLCBTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlciBoYW5kbGVyKSB7CiAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWV0aG9kLCAnbWV0aG9kJyk7CiAgaWYgKCFtZXRob2Quc3RhcnRzV2l0aCgnZXh0LicpKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShtZXRob2QsICdtZXRob2QnLCAnTXVzdCBiZWdpbiB3aXRoIGV4dC4nKTsKICB9CiAgaWYgKF9sb29rdXBFeHRlbnNpb24obWV0aG9kKSAhPSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignRXh0ZW5zaW9uIGFscmVhZHkgcmVnaXN0ZXJlZDogJG1ldGhvZCcpOwogIH0KICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChoYW5kbGVyLCAnaGFuZGxlcicpOwogIF9yZWdpc3RlckV4dGVuc2lvbihtZXRob2QsIGhhbmRsZXIpOwp9CgovLy8gUG9zdCBhbiBldmVudCBvZiBbZXZlbnRLaW5kXSB3aXRoIHBheWxvYWQgb2YgW2V2ZW50RGF0YV0gdG8gdGhlIGBFeHRlbnNpb25gCi8vLyBldmVudCBzdHJlYW0uCnZvaWQgcG9zdEV2ZW50KFN0cmluZyBldmVudEtpbmQsIE1hcCBldmVudERhdGEpIHsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChldmVudEtpbmQsICdldmVudEtpbmQnKTsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChldmVudERhdGEsICdldmVudERhdGEnKTsKICBTdHJpbmcgZXZlbnREYXRhQXNTdHJpbmcgPSBqc29uLmVuY29kZShldmVudERhdGEpOwogIF9wb3N0RXZlbnQoZXZlbnRLaW5kLCBldmVudERhdGFBc1N0cmluZyk7Cn0KCmV4dGVybmFsIHZvaWQgX3Bvc3RFdmVudChTdHJpbmcgZXZlbnRLaW5kLCBTdHJpbmcgZXZlbnREYXRhKTsKCi8vIEJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGluc2lkZSBDKysgdG8gYXZvaWQgdXBkYXRpbmcgdGhlIGRhdGEKLy8gc3RydWN0dXJlcyBpbiBEYXJ0LCBnZXR0aW5nIGFuIE9PQiwgYW5kIG9ic2VydmluZyBzdGFsZSBzdGF0ZS4gRG8gbm90IG1vdmUKLy8gdGhlc2UgaW50byBEYXJ0IGNvZGUgdW5sZXNzIHlvdSBjYW4gZW5zdXJlIHRoYXQgdGhlIG9wZXJhdGlvbnMgd2lsbCBjYW4gYmUKLy8gZG9uZSBhdG9taWNhbGx5LiBOYXRpdmUgY29kZSBsaXZlcyBpbiB2bS9pc29sYXRlLmNjLQovLyBMb29rdXBTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlciBhbmQgUmVnaXN0ZXJTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlci4KZXh0ZXJuYWwgU2VydmljZUV4dGVuc2lvbkhhbmRsZXIgX2xvb2t1cEV4dGVuc2lvbihTdHJpbmcgbWV0aG9kKTsKZXh0ZXJuYWwgX3JlZ2lzdGVyRXh0ZW5zaW9uKFN0cmluZyBtZXRob2QsIFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIGhhbmRsZXIpOwqAowBOTjwBGAE0BFAqIUEXAU4XAT4cAUkGTj4xGRodMgQBRQZQSlAbRBcfJCM8BAEuDi8BJA4xAS0ONwEtDjcBLicBJCgBLSsBLSsBMyMmHwYbBAEtOCxQDgZLBAE3QgFEFxoVDSEjGxsxKQoGBAIBTwRPSzAEQ0I0AU5JFQRNTVBNLQROQEkwJE0EKkYEMicCAVASMjY2NSwCAT4BTU5OOEZCTQEdZGFydDpkZXZlbG9wZXIvZXh0ZW5zaW9uLmRhcnQzb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2RldmVsb3Blci90aW1lbGluZS5kYXJ0qngvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmRldmVsb3BlcjsKCmNvbnN0IGJvb2wgX2hhc1RpbWVsaW5lID0KICAgIGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LmRldmVsb3Blci50aW1lbGluZSIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSk7CgovLy8gQSB0eXBlZGVmIGZvciB0aGUgZnVuY3Rpb24gYXJndW1lbnQgdG8gW1RpbWVsaW5lLnRpbWVTeW5jXS4KdHlwZWRlZiBUaW1lbGluZVN5bmNGdW5jdGlvbjxUPiA9IFQgRnVuY3Rpb24oKTsKCi8vIFRPRE86IFRoaXMgdHlwZWRlZiBpcyBub3QgdXNlZC4KdHlwZWRlZiBGdXR1cmUgVGltZWxpbmVBc3luY0Z1bmN0aW9uKCk7CgovLy8gQSBjbGFzcyB0byByZXByZXNlbnQgRmxvdyBldmVudHMuCi8vLwovLy8gW0Zsb3ddIG9iamVjdHMgYXJlIHVzZWQgdG8gdGhyZWFkIGZsb3cgZXZlbnRzIGJldHdlZW4gdGltZWxpbmUgc2xpY2VzLAovLy8gZm9yIGV4YW1wbGUsIHRob3NlIGNyZWF0ZWQgd2l0aCB0aGUgW1RpbWVsaW5lXSBjbGFzcyBiZWxvdy4gQWRkaW5nCi8vLyBbRmxvd10gb2JqZWN0cyBjYXVzZSBhcnJvd3MgdG8gYmUgZHJhd24gYmV0d2VlbiBzbGljZXMgaW4gQ2hyb21lJ3MgdHJhY2UKLy8vIHZpZXdlci4gVGhlIGFycm93cyBzdGFydCBhdCBlLmcgW1RpbWVsaW5lXSBldmVudHMgdGhhdCBhcmUgcGFzc2VkIGEKLy8vIFtGbG93LmJlZ2luXSBvYmplY3QsIGdvIHRocm91Z2ggW1RpbWVsaW5lXSBldmVudHMgdGhhdCBhcmUgcGFzc2VkIGEKLy8vIFtGbG93LnN0ZXBdIG9iamVjdCwgYW5kIGVuZCBhdCBbVGltZWxpbmVdIGV2ZW50cyB0aGF0IGFyZSBwYXNzZWQgYQovLy8gW0Zsb3cuZW5kXSBvYmplY3QsIGFsbCBoYXZpbmcgdGhlIHNhbWUgW0Zsb3cuaWRdLiBGb3IgZXhhbXBsZToKLy8vCi8vLyBgYGBkYXJ0Ci8vLyB2YXIgZmxvdyA9IEZsb3cuYmVnaW4oKTsKLy8vIFRpbWVsaW5lLnRpbWVTeW5jKCdmbG93X3Rlc3QnLCAoKSB7Ci8vLyAgIGRvU29tZXRoaW5nKCk7Ci8vLyB9LCBmbG93OiBmbG93KTsKLy8vCi8vLyBUaW1lbGluZS50aW1lU3luYygnZmxvd190ZXN0JywgKCkgewovLy8gICBkb1NvbWV0aGluZygpOwovLy8gfSwgZmxvdzogRmxvdy5zdGVwKGZsb3cuaWQpKTsKLy8vCi8vLyBUaW1lbGluZS50aW1lU3luYygnZmxvd190ZXN0JywgKCkgewovLy8gICBkb1NvbWV0aGluZygpOwovLy8gfSwgZmxvdzogRmxvdy5lbmQoZmxvdy5pZCkpOwovLy8gYGBgCmNsYXNzIEZsb3cgewogIC8vIFRoZXNlIHZhbHVlcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBlbnVtICJFdmVudFR5cGUiIGluCiAgLy8gcnVudGltZS92bS90aW1lbGluZS5oLgogIHN0YXRpYyBjb25zdCBpbnQgX2JlZ2luID0gOTsKICBzdGF0aWMgY29uc3QgaW50IF9zdGVwID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBfZW5kID0gMTE7CgogIGZpbmFsIGludCBfdHlwZTsKCiAgLy8vIFRoZSBmbG93IGlkIG9mIHRoZSBmbG93IGV2ZW50LgogIGZpbmFsIGludCBpZDsKCiAgRmxvdy5fKHRoaXMuX3R5cGUsIHRoaXMuaWQpOwoKICAvLy8gQSAiYmVnaW4iIEZsb3cgZXZlbnQuCiAgLy8vCiAgLy8vIFdoZW4gcGFzc2VkIHRvIGEgW1RpbWVsaW5lXSBtZXRob2QsIGdlbmVyYXRlcyBhICJiZWdpbiIgRmxvdyBldmVudC4KICAvLy8gSWYgW2lkXSBpcyBub3QgcHJvdmlkZWQsIGFuIGlkIHRoYXQgY29uZmxpY3RzIHdpdGggbm8gb3RoZXIgRGFydC1nZW5lcmF0ZWQKICAvLy8gZmxvdyBpZCdzIHdpbGwgYmUgZ2VuZXJhdGVkLgogIHN0YXRpYyBGbG93IGJlZ2luKHtpbnQgaWR9KSB7CiAgICByZXR1cm4gbmV3IEZsb3cuXyhfYmVnaW4sIGlkID8/IF9nZXROZXh0QXN5bmNJZCgpKTsKICB9CgogIC8vLyBBICJzdGVwIiBGbG93IGV2ZW50LgogIC8vLwogIC8vLyBXaGVuIHBhc3NlZCB0byBhIFtUaW1lbGluZV0gbWV0aG9kLCBnZW5lcmF0ZXMgYSAic3RlcCIgRmxvdyBldmVudC4KICAvLy8gVGhlIFtpZF0gYXJndW1lbnQgaXMgcmVxdWlyZWQuIEl0IGNhbiBjb21lIGVpdGhlciBmcm9tIGFub3RoZXIgW0Zsb3ddCiAgLy8vIGV2ZW50LCBvciBzb21lIGlkIHRoYXQgY29tZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiAgc3RhdGljIEZsb3cgc3RlcChpbnQgaWQpID0+IG5ldyBGbG93Ll8oX3N0ZXAsIGlkKTsKCiAgLy8vIEFuICJlbmQiIEZsb3cgZXZlbnQuCiAgLy8vCiAgLy8vIFdoZW4gcGFzc2VkIHRvIGEgW1RpbWVsaW5lXSBtZXRob2QsIGdlbmVyYXRlcyBhICJlbmQiIEZsb3cgZXZlbnQuCiAgLy8vIFRoZSBbaWRdIGFyZ3VtZW50IGlzIHJlcXVpcmVkLiBJdCBjYW4gY29tZSBlaXRoZXIgZnJvbSBhbm90aGVyIFtGbG93XQogIC8vLyBldmVudCwgb3Igc29tZSBpZCB0aGF0IGNvbWVzIGZyb20gdGhlIGVudmlyb25tZW50LgogIHN0YXRpYyBGbG93IGVuZChpbnQgaWQpID0+IG5ldyBGbG93Ll8oX2VuZCwgaWQpOwp9CgovLy8gQWRkIHRvIHRoZSB0aW1lbGluZS4KLy8vCi8vLyBbVGltZWxpbmVdJ3MgbWV0aG9kcyBhZGQgc3luY2hyb25vdXMgZXZlbnRzIHRvIHRoZSB0aW1lbGluZS4gV2hlbgovLy8gZ2VuZXJhdGluZyBhIHRpbWVsaW5lIGluIENocm9tZSdzIHRyYWNpbmcgZm9ybWF0LCB1c2luZyBbVGltZWxpbmVdIGdlbmVyYXRlcwovLy8gIkNvbXBsZXRlIiBldmVudHMuIFtUaW1lbGluZV0ncyBbc3RhcnRTeW5jXSBhbmQgW2ZpbmlzaFN5bmNdIGNhbiBiZSB1c2VkCi8vLyBleHBsaWNpdGx5LCBvciBpbXBsaWNpdGx5IGJ5IHdyYXBwaW5nIGEgY2xvc3VyZSBpbiBbdGltZVN5bmNdLiBGb3IgZXhhbXBsZToKLy8vCi8vLyBgYGBkYXJ0Ci8vLyBUaW1lbGluZS5zdGFydFN5bmMoIkRvaW5nIFNvbWV0aGluZyIpOwovLy8gZG9Tb21ldGhpbmcoKTsKLy8vIFRpbWVsaW5lLmZpbmlzaFN5bmMoKTsKLy8vIGBgYAovLy8KLy8vIE9yOgovLy8KLy8vIGBgYGRhcnQKLy8vIFRpbWVsaW5lLnRpbWVTeW5jKCJEb2luZyBTb21ldGhpbmciLCAoKSB7Ci8vLyAgIGRvU29tZXRoaW5nKCk7Ci8vLyB9KTsKLy8vIGBgYApjbGFzcyBUaW1lbGluZSB7CiAgLy8vIFN0YXJ0IGEgc3luY2hyb25vdXMgb3BlcmF0aW9uIGxhYmVsZWQgW25hbWVdLiBPcHRpb25hbGx5IHRha2VzCiAgLy8vIGEgW01hcF0gb2YgW2FyZ3VtZW50c10uIFRoaXMgc2xpY2UgbWF5IGFsc28gb3B0aW9uYWxseSBiZSBhc3NvY2lhdGVkIHdpdGgKICAvLy8gYSBbRmxvd10gZXZlbnQuIFRoaXMgb3BlcmF0aW9uIG11c3QgYmUgZmluaXNoZWQgYmVmb3JlCiAgLy8vIHJldHVybmluZyB0byB0aGUgZXZlbnQgcXVldWUuCiAgc3RhdGljIHZvaWQgc3RhcnRTeW5jKFN0cmluZyBuYW1lLCB7TWFwIGFyZ3VtZW50cywgRmxvdyBmbG93fSkgewogICAgaWYgKCFfaGFzVGltZWxpbmUpIHJldHVybjsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKG5hbWUsICduYW1lJyk7CiAgICBpZiAoIV9pc0RhcnRTdHJlYW1FbmFibGVkKCkpIHsKICAgICAgLy8gUHVzaCBhIG51bGwgb250byB0aGUgc3RhY2sgYW5kIHJldHVybi4KICAgICAgX3N0YWNrLmFkZChudWxsKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGJsb2NrID0gbmV3IF9TeW5jQmxvY2suXyhuYW1lLCBfZ2V0VHJhY2VDbG9jaygpLCBfZ2V0VGhyZWFkQ3B1Q2xvY2soKSk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYmxvY2suX2FyZ3VtZW50cyA9IGFyZ3VtZW50czsKICAgIH0KICAgIGlmIChmbG93ICE9IG51bGwpIHsKICAgICAgYmxvY2suZmxvdyA9IGZsb3c7CiAgICB9CiAgICBfc3RhY2suYWRkKGJsb2NrKTsKICB9CgogIC8vLyBGaW5pc2ggdGhlIGxhc3Qgc3luY2hyb25vdXMgb3BlcmF0aW9uIHRoYXQgd2FzIHN0YXJ0ZWQuCiAgc3RhdGljIHZvaWQgZmluaXNoU3luYygpIHsKICAgIGlmICghX2hhc1RpbWVsaW5lKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfc3RhY2subGVuZ3RoID09IDApIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ1VuZXZlbiBjYWxscyB0byBzdGFydFN5bmMgYW5kIGZpbmlzaFN5bmMnKTsKICAgIH0KICAgIC8vIFBvcCB0b3AgaXRlbSBvZmYgb2Ygc3RhY2suCiAgICB2YXIgYmxvY2sgPSBfc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgaWYgKGJsb2NrID09IG51bGwpIHsKICAgICAgLy8gRGFydCBzdHJlYW0gd2FzIGRpc2FibGVkIHdoZW4gc3RhcnRTeW5jIHdhcyBjYWxsZWQuCiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIEZpbmlzaCBpdC4KICAgIGJsb2NrLmZpbmlzaCgpOwogIH0KCiAgLy8vIEVtaXQgYW4gaW5zdGFudCBldmVudC4KICBzdGF0aWMgdm9pZCBpbnN0YW50U3luYyhTdHJpbmcgbmFtZSwge01hcCBhcmd1bWVudHN9KSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgcmV0dXJuOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobmFtZSwgJ25hbWUnKTsKICAgIGlmICghX2lzRGFydFN0cmVhbUVuYWJsZWQoKSkgewogICAgICAvLyBTdHJlYW0gaXMgZGlzYWJsZWQuCiAgICAgIHJldHVybjsKICAgIH0KICAgIE1hcCBpbnN0YW50QXJndW1lbnRzOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGluc3RhbnRBcmd1bWVudHMgPSBuZXcgTWFwLmZyb20oYXJndW1lbnRzKTsKICAgIH0KICAgIF9yZXBvcnRJbnN0YW50RXZlbnQoCiAgICAgICAgX2dldFRyYWNlQ2xvY2soKSwgJ0RhcnQnLCBuYW1lLCBfYXJndW1lbnRzQXNKc29uKGluc3RhbnRBcmd1bWVudHMpKTsKICB9CgogIC8vLyBBIHV0aWxpdHkgbWV0aG9kIHRvIHRpbWUgYSBzeW5jaHJvbm91cyBbZnVuY3Rpb25dLiBJbnRlcm5hbGx5IGNhbGxzCiAgLy8vIFtmdW5jdGlvbl0gYnJhY2tldGVkIGJ5IGNhbGxzIHRvIFtzdGFydFN5bmNdIGFuZCBbZmluaXNoU3luY10uCiAgc3RhdGljIFQgdGltZVN5bmM8VD4oU3RyaW5nIG5hbWUsIFRpbWVsaW5lU3luY0Z1bmN0aW9uPFQ+IGZ1bmN0aW9uLAogICAgICB7TWFwIGFyZ3VtZW50cywgRmxvdyBmbG93fSkgewogICAgc3RhcnRTeW5jKG5hbWUsIGFyZ3VtZW50czogYXJndW1lbnRzLCBmbG93OiBmbG93KTsKICAgIHRyeSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpOwogICAgfSBmaW5hbGx5IHsKICAgICAgZmluaXNoU3luYygpOwogICAgfQogIH0KCiAgLy8vIFRoZSBjdXJyZW50IHRpbWUgc3RhbXAgZnJvbSB0aGUgY2xvY2sgdXNlZCBieSB0aGUgdGltZWxpbmUuIFVuaXRzIGFyZQogIC8vLyBtaWNyb3NlY29uZHMuCiAgLy8vCiAgLy8vIFdoZW4gcnVuIG9uIHRoZSBEYXJ0IFZNLCB1c2VzIHRoZSBzYW1lIG1vbm90b25pYyBjbG9jayBhcyB0aGUgZW1iZWRkaW5nCiAgLy8vIEFQSSdzIGBEYXJ0X1RpbWVsaW5lR2V0TWljcm9zYC4KICBzdGF0aWMgaW50IGdldCBub3cgPT4gX2dldFRyYWNlQ2xvY2soKTsKICBzdGF0aWMgZmluYWwgTGlzdDxfU3luY0Jsb2NrPiBfc3RhY2sgPSBuZXcgTGlzdDxfU3luY0Jsb2NrPigpOwp9CgovLy8gQW4gYXN5bmNocm9ub3VzIHRhc2sgb24gdGhlIHRpbWVsaW5lLiBBbiBhc3luY2hyb25vdXMgdGFzayBjYW4gaGF2ZSBtYW55Ci8vLyAobmVzdGVkKSBzeW5jaHJvbm91cyBvcGVyYXRpb25zLiBTeW5jaHJvbm91cyBvcGVyYXRpb25zIGNhbiBsaXZlIGxvbmdlciB0aGFuCi8vLyB0aGUgY3VycmVudCBpc29sYXRlIGV2ZW50LiBUbyBwYXNzIGEgW1RpbWVsaW5lVGFza10gdG8gYW5vdGhlciBpc29sYXRlLAovLy8geW91IG11c3QgZmlyc3QgY2FsbCBbcGFzc10gdG8gZ2V0IHRoZSB0YXNrIGlkIGFuZCB0aGVuIGNvbnN0cnVjdCBhIG5ldwovLy8gW1RpbWVsaW5lVGFza10gaW4gdGhlIG90aGVyIGlzb2xhdGUuCmNsYXNzIFRpbWVsaW5lVGFzayB7CiAgLy8vIENyZWF0ZSBhIHRhc2suIFRoZSB0YXNrIElEIHdpbGwgYmUgc2V0IGJ5IHRoZSBzeXN0ZW0uCiAgVGltZWxpbmVUYXNrKCkgOiBfdGFza0lkID0gX2dldE5leHRBc3luY0lkKCkge30KCiAgLy8vIENyZWF0ZSBhIHRhc2sgd2l0aCBhbiBleHBsaWNpdCBbdGFza0lkXS4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGFyZQogIC8vLyBwYXNzaW5nIGEgdGFzayBmcm9tIG9uZSBpc29sYXRlIHRvIGFub3RoZXIuCiAgVGltZWxpbmVUYXNrLndpdGhUYXNrSWQoaW50IHRhc2tJZCkgOiBfdGFza0lkID0gdGFza0lkIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHRhc2tJZCwgJ3Rhc2tJZCcpOwogIH0KCiAgLy8vIFN0YXJ0IGEgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdpdGhpbiB0aGlzIHRhc2sgbmFtZWQgW25hbWVdLgogIC8vLyBPcHRpb25hbGx5IHRha2VzIGEgW01hcF0gb2YgW2FyZ3VtZW50c10uCiAgdm9pZCBzdGFydChTdHJpbmcgbmFtZSwge01hcCBhcmd1bWVudHN9KSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgcmV0dXJuOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobmFtZSwgJ25hbWUnKTsKICAgIHZhciBibG9jayA9IG5ldyBfQXN5bmNCbG9jay5fKG5hbWUsIF90YXNrSWQpOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGJsb2NrLl9hcmd1bWVudHMgPSBhcmd1bWVudHM7CiAgICB9CiAgICBfc3RhY2suYWRkKGJsb2NrKTsKICAgIGJsb2NrLl9zdGFydCgpOwogIH0KCiAgLy8vIEVtaXQgYW4gaW5zdGFudCBldmVudCBmb3IgdGhpcyB0YXNrLgogIHZvaWQgaW5zdGFudChTdHJpbmcgbmFtZSwge01hcCBhcmd1bWVudHN9KSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgcmV0dXJuOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobmFtZSwgJ25hbWUnKTsKICAgIE1hcCBpbnN0YW50QXJndW1lbnRzOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGluc3RhbnRBcmd1bWVudHMgPSBuZXcgTWFwLmZyb20oYXJndW1lbnRzKTsKICAgIH0KICAgIF9yZXBvcnRUYXNrRXZlbnQoX2dldFRyYWNlQ2xvY2soKSwgX3Rhc2tJZCwgJ24nLCAnRGFydCcsIG5hbWUsCiAgICAgICAgX2FyZ3VtZW50c0FzSnNvbihpbnN0YW50QXJndW1lbnRzKSk7CiAgfQoKICAvLy8gRmluaXNoIHRoZSBsYXN0IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB0aGF0IHdhcyBzdGFydGVkLgogIHZvaWQgZmluaXNoKCkgewogICAgaWYgKCFfaGFzVGltZWxpbmUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKF9zdGFjay5sZW5ndGggPT0gMCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignVW5ldmVuIGNhbGxzIHRvIHN0YXJ0IGFuZCBmaW5pc2gnKTsKICAgIH0KICAgIC8vIFBvcCB0b3AgaXRlbSBvZmYgb2Ygc3RhY2suCiAgICB2YXIgYmxvY2sgPSBfc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgYmxvY2suX2ZpbmlzaCgpOwogIH0KCiAgLy8vIFJldHJpZXZlIHRoZSBbVGltZWxpbmVUYXNrXSdzIHRhc2sgaWQuIFdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZQogIC8vLyBzdGFjayBpcyBub3QgZW1wdHkuCiAgaW50IHBhc3MoKSB7CiAgICBpZiAoX3N0YWNrLmxlbmd0aCA+IDApIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAnWW91IGNhbm5vdCBwYXNzIGEgVGltZWxpbmVUYXNrIHdpdGhvdXQgZmluaXNoaW5nIGFsbCBzdGFydGVkICcKICAgICAgICAgICdvcGVyYXRpb25zJyk7CiAgICB9CiAgICBpbnQgciA9IF90YXNrSWQ7CiAgICByZXR1cm4gcjsKICB9CgogIGZpbmFsIGludCBfdGFza0lkOwogIGZpbmFsIExpc3Q8X0FzeW5jQmxvY2s+IF9zdGFjayA9IFtdOwp9CgovLy8gQW4gYXN5bmNocm9ub3VzIGJsb2NrIG9mIHRpbWUgb24gdGhlIHRpbWVsaW5lLiBUaGlzIGJsb2NrIGNhbiBiZSBrZXB0Ci8vLyBvcGVuIGFjcm9zcyBpc29sYXRlIG1lc3NhZ2VzLgpjbGFzcyBfQXN5bmNCbG9jayB7CiAgLy8vIFRoZSBjYXRlZ29yeSB0aGlzIGJsb2NrIGJlbG9uZ3MgdG8uCiAgZmluYWwgU3RyaW5nIGNhdGVnb3J5ID0gJ0RhcnQnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBibG9jay4KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFRoZSBhc3luY2hyb25vdXMgdGFzayBpZC4KICBmaW5hbCBpbnQgX3Rhc2tJZDsKCiAgLy8vIEFuIChvcHRpb25hbCkgc2V0IG9mIGFyZ3VtZW50cyB3aGljaCB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gSlNPTiBhbmQKICAvLy8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgYmxvY2suCiAgTWFwIF9hcmd1bWVudHM7CgogIF9Bc3luY0Jsb2NrLl8odGhpcy5uYW1lLCB0aGlzLl90YXNrSWQpOwoKICAvLyBFbWl0IHRoZSBzdGFydCBldmVudC4KICB2b2lkIF9zdGFydCgpIHsKICAgIF9yZXBvcnRUYXNrRXZlbnQoCiAgICAgICAgX2dldFRyYWNlQ2xvY2soKSwgX3Rhc2tJZCwgJ2InLCBjYXRlZ29yeSwgbmFtZSwgX2FyZ3VtZW50c0FzSnNvbihudWxsKSk7CiAgfQoKICAvLyBFbWl0IHRoZSBmaW5pc2ggZXZlbnQuCiAgdm9pZCBfZmluaXNoKCkgewogICAgX3JlcG9ydFRhc2tFdmVudChfZ2V0VHJhY2VDbG9jaygpLCBfdGFza0lkLCAnZScsIGNhdGVnb3J5LCBuYW1lLAogICAgICAgIF9hcmd1bWVudHNBc0pzb24oX2FyZ3VtZW50cykpOwogIH0KfQoKLy8vIEEgc3luY2hyb25vdXMgYmxvY2sgb2YgdGltZSBvbiB0aGUgdGltZWxpbmUuIFRoaXMgYmxvY2sgc2hvdWxkIG5vdCBiZQovLy8ga2VwdCBvcGVuIGFjcm9zcyBpc29sYXRlIG1lc3NhZ2VzLgpjbGFzcyBfU3luY0Jsb2NrIHsKICAvLy8gVGhlIGNhdGVnb3J5IHRoaXMgYmxvY2sgYmVsb25ncyB0by4KICBmaW5hbCBTdHJpbmcgY2F0ZWdvcnkgPSAnRGFydCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGlzIGJsb2NrLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gQW4gKG9wdGlvbmFsKSBzZXQgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgc2VyaWFsaXplZCB0byBKU09OIGFuZAogIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jay4KICBNYXAgX2FyZ3VtZW50czsKICAvLyBUaGUgc3RhcnQgdGltZSBzdGFtcC4KICBmaW5hbCBpbnQgX3N0YXJ0OwogIC8vIFRoZSBzdGFydCB0aW1lIHN0YW1wIG9mIHRoZSB0aHJlYWQgY3B1IGNsb2NrLgogIGZpbmFsIGludCBfc3RhcnRDcHU7CgogIC8vLyBBbiAob3B0aW9uYWwpIGZsb3cgZXZlbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYmxvY2suCiAgRmxvdyBfZmxvdzsKCiAgX1N5bmNCbG9jay5fKHRoaXMubmFtZSwgdGhpcy5fc3RhcnQsIHRoaXMuX3N0YXJ0Q3B1KTsKCiAgLy8vIEZpbmlzaCB0aGlzIGJsb2NrIG9mIHRpbWUuIEF0IHRoaXMgcG9pbnQsIHRoaXMgYmxvY2sgY2FuIG5vIGxvbmdlciBiZQogIC8vLyB1c2VkLgogIHZvaWQgZmluaXNoKCkgewogICAgLy8gUmVwb3J0IGV2ZW50IHRvIHJ1bnRpbWUuCiAgICBfcmVwb3J0Q29tcGxldGVFdmVudCgKICAgICAgICBfc3RhcnQsIF9zdGFydENwdSwgY2F0ZWdvcnksIG5hbWUsIF9hcmd1bWVudHNBc0pzb24oX2FyZ3VtZW50cykpOwogICAgaWYgKF9mbG93ICE9IG51bGwpIHsKICAgICAgX3JlcG9ydEZsb3dFdmVudChfc3RhcnQsIF9zdGFydENwdSwgY2F0ZWdvcnksIG5hbWUsIF9mbG93Ll90eXBlLCBfZmxvdy5pZCwKICAgICAgICAgIF9hcmd1bWVudHNBc0pzb24obnVsbCkpOwogICAgfQogIH0KCiAgdm9pZCBzZXQgZmxvdyhGbG93IGYpIHsKICAgIF9mbG93ID0gZjsKICB9Cn0KClN0cmluZyBfYXJndW1lbnRzQXNKc29uKE1hcCBhcmd1bWVudHMpIHsKICBpZiAoKGFyZ3VtZW50cyA9PSBudWxsKSB8fCAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKSkgewogICAgLy8gRmFzdCBwYXRoIG5vIGFyZ3VtZW50cy4gQXZvaWQgY2FsbGluZyBqc29uRW5jb2RlLgogICAgcmV0dXJuICd7fSc7CiAgfQogIHJldHVybiBqc29uLmVuY29kZShhcmd1bWVudHMpOwp9CgovLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBEYXJ0IFRpbWVsaW5lIHN0cmVhbSBpcyBlbmFibGVkLgpleHRlcm5hbCBib29sIF9pc0RhcnRTdHJlYW1FbmFibGVkKCk7CgovLy8gUmV0dXJucyB0aGUgbmV4dCBhc3luYyB0YXNrIGlkLgpleHRlcm5hbCBpbnQgX2dldE5leHRBc3luY0lkKCk7CgovLy8gUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBmcm9tIHRoZSB0cmFjZSBjbG9jay4KZXh0ZXJuYWwgaW50IF9nZXRUcmFjZUNsb2NrKCk7CgovLy8gUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBmcm9tIHRoZSB0aHJlYWQgQ1BVIHVzYWdlIGNsb2NrLgpleHRlcm5hbCBpbnQgX2dldFRocmVhZENwdUNsb2NrKCk7CgovLy8gUmVwb3J0cyBhbiBldmVudCBmb3IgYSB0YXNrLgpleHRlcm5hbCB2b2lkIF9yZXBvcnRUYXNrRXZlbnQoaW50IHN0YXJ0LCBpbnQgdGFza0lkLCBTdHJpbmcgcGhhc2UsCiAgICBTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBuYW1lLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKTsKCi8vLyBSZXBvcnRzIGEgY29tcGxldGUgc3luY2hyb25vdXMgZXZlbnQuCmV4dGVybmFsIHZvaWQgX3JlcG9ydENvbXBsZXRlRXZlbnQoaW50IHN0YXJ0LCBpbnQgc3RhcnRDcHUsIFN0cmluZyBjYXRlZ29yeSwKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKTsKCi8vLyBSZXBvcnRzIGEgZmxvdyBldmVudC4KZXh0ZXJuYWwgdm9pZCBfcmVwb3J0Rmxvd0V2ZW50KGludCBzdGFydCwgaW50IHN0YXJ0Q3B1LCBTdHJpbmcgY2F0ZWdvcnksCiAgICBTdHJpbmcgbmFtZSwgaW50IHR5cGUsIGludCBpZCwgU3RyaW5nIGFyZ3VtZW50c0FzSnNvbik7CgovLy8gUmVwb3J0cyBhbiBpbnN0YW50IGV2ZW50LgpleHRlcm5hbCB2b2lkIF9yZXBvcnRJbnN0YW50RXZlbnQoCiAgICBpbnQgc3RhcnQsIFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG5hbWUsIFN0cmluZyBhcmd1bWVudHNBc0pzb24pOwqBXwBOTjwBGAEaTwFAMAEjKAEmBEtHTUhIR0MEDB0oFRQEKBUiBCgVIQgNRBwfHx4BEwElEAEfARwGSlEjIDgEARsGSUw5NQEbBkhMOTMCARkERlFNUAQMKxMbCAQIBAwuFQgIEUVQPSRDHy4jMBgOBlAdJAYYGQYXBAE+HRkOBh5IBiIlGT0OBhIUBAEdOh8uIx0OBhodMgYZTQQBSkVGJDcKGRAUBgQBTBQGTiYqQQIBTVFMSykVPDIBSTI7MgQBQy8tHy4yHSQGFxQEASsvHy4aHTIGQy0EAT4SGQ4GHkAGIiUVBAFMGg8dHEoZBhUOBAEVJwIBSiIUKiIBHhUBIBUBSiISASoBGxIWUQQBHBNFJwQCAUonEyoiAR4VAUoiEhsUMxcBOw4BOAFMDBIgGkoZUSMGBAEaDwQCASk4OREEIQIBOSYBJCABNB8BPyMBIUQ7ASpNKgEaSTwBHiNGARxkYXJ0OmRldmVsb3Blci90aW1lbGluZS5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvcHJvZmlsZXIuZGFydIMcLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImRldmVsb3Blci5kYXJ0IjsKCkBwYXRjaApjbGFzcyBVc2VyVGFnIHsKICBAcGF0Y2gKICBmYWN0b3J5IFVzZXJUYWcoU3RyaW5nIGxhYmVsKSB7CiAgICByZXR1cm4gbmV3IF9Vc2VyVGFnKGxhYmVsKTsKICB9CiAgQHBhdGNoCiAgc3RhdGljIFVzZXJUYWcgZ2V0IGRlZmF1bHRUYWcgPT4gX2dldERlZmF1bHRUYWcoKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVXNlclRhZyBpbXBsZW1lbnRzIFVzZXJUYWcgewogIGZhY3RvcnkgX1VzZXJUYWcoU3RyaW5nIGxhYmVsKSBuYXRpdmUgIlVzZXJUYWdfbmV3IjsKICBTdHJpbmcgZ2V0IGxhYmVsIG5hdGl2ZSAiVXNlclRhZ19sYWJlbCI7CiAgVXNlclRhZyBtYWtlQ3VycmVudCgpIG5hdGl2ZSAiVXNlclRhZ19tYWtlQ3VycmVudCI7Cn0KCkBwYXRjaApVc2VyVGFnIGdldEN1cnJlbnRUYWcoKSA9PiBfZ2V0Q3VycmVudFRhZygpOwpVc2VyVGFnIF9nZXRDdXJyZW50VGFnKCkgbmF0aXZlICJQcm9maWxlcl9nZXRDdXJyZW50VGFnIjsKClVzZXJUYWcgX2dldERlZmF1bHRUYWcoKSBuYXRpdmUgIlVzZXJUYWdfZGVmYXVsdFRhZyI7Ch4ATk48AR0BBxAJIiAECTUCARokNys2AgEHLToBNgEiZGFydDpkZXZlbG9wZXItcGF0Y2gvcHJvZmlsZXIuZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZGV2ZWxvcGVyL3Byb2ZpbGVyLmRhcnSPYS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuZGV2ZWxvcGVyOwoKLy8vIEEgVXNlclRhZyBjYW4gYmUgdXNlZCB0byBncm91cCBzYW1wbGVzIGluIHRoZSBPYnNlcnZhdG9yeSBwcm9maWxlci4KYWJzdHJhY3QgY2xhc3MgVXNlclRhZyB7CiAgLy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBVc2VyVGFnIGluc3RhbmNlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGJ5IGEgcHJvZ3JhbS4KICBzdGF0aWMgY29uc3QgTUFYX1VTRVJfVEFHUyA9IDY0OwoKICBleHRlcm5hbCBmYWN0b3J5IFVzZXJUYWcoU3RyaW5nIGxhYmVsKTsKCiAgLy8vIExhYmVsIG9mIFt0aGlzXS4KICBTdHJpbmcgZ2V0IGxhYmVsOwoKICAvLy8gTWFrZSBbdGhpc10gdGhlIGN1cnJlbnQgdGFnIGZvciB0aGUgaXNvbGF0ZS4gUmV0dXJucyB0aGUgY3VycmVudCB0YWcKICAvLy8gYmVmb3JlIHNldHRpbmcuCiAgVXNlclRhZyBtYWtlQ3VycmVudCgpOwoKICAvLy8gVGhlIGRlZmF1bHQgW1VzZXJUYWddIHdpdGggbGFiZWwgJ0RlZmF1bHQnLgogIGV4dGVybmFsIHN0YXRpYyBVc2VyVGFnIGdldCBkZWZhdWx0VGFnOwp9CgovLy8gUmV0dXJucyB0aGUgY3VycmVudCBbVXNlclRhZ10gZm9yIHRoZSBpc29sYXRlLgpleHRlcm5hbCBVc2VyVGFnIGdldEN1cnJlbnRUYWcoKTsKCi8vLyBBYnN0cmFjdCBbTWV0cmljXSBjbGFzcy4gTWV0cmljIG5hbWVzIG11c3QgYmUgdW5pcXVlLCBhcmUgaGllcmFyY2hpY2FsLAovLy8gYW5kIHVzZSBwZXJpb2RzIGFzIHNlcGFyYXRvcnMuIEZvciBleGFtcGxlLCAnYS5iLmMnLiBVbmlxdWVuZXNzIGlzIG9ubHkKLy8vIGVuZm9yY2VkIHdoZW4gYSBNZXRyaWMgaXMgcmVnaXN0ZXJlZC4gVGhlIG5hbWUgb2YgYSBtZXRyaWMgY2Fubm90IGNvbnRhaW4KLy8vIHRoZSBzbGFzaCAoJy8nKSBjaGFyYWN0ZXIuCmFic3RyYWN0IGNsYXNzIE1ldHJpYyB7CiAgLy8vIFtuYW1lXSBvZiB0aGlzIG1ldHJpYy4KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFtkZXNjcmlwdGlvbl0gb2YgdGhpcyBtZXRyaWMuCiAgZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uOwoKICBNZXRyaWModGhpcy5uYW1lLCB0aGlzLmRlc2NyaXB0aW9uKSB7CiAgICBpZiAoKG5hbWUgPT0gJ3ZtJykgfHwgbmFtZS5jb250YWlucygnLycpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdJbnZhbGlkIE1ldHJpYyBuYW1lLicpOwogICAgfQogIH0KCiAgTWFwIF90b0pTT04oKTsKfQoKLy8vIEEgbWVhc3VyZWQgdmFsdWUgd2l0aCBhIG1pbiBhbmQgbWF4LiBJbml0aWFsIHZhbHVlIGlzIG1pbi4gVmFsdWUgd2lsbAovLy8gYmUgY2xhbXBlZCB0byB0aGUgaW50ZXJ2YWwgW21pbiwgbWF4XS4KY2xhc3MgR2F1Z2UgZXh0ZW5kcyBNZXRyaWMgewogIGZpbmFsIGRvdWJsZSBtaW47CiAgZmluYWwgZG91YmxlIG1heDsKCiAgZG91YmxlIF92YWx1ZTsKICBkb3VibGUgZ2V0IHZhbHVlID0+IF92YWx1ZTsKICBzZXQgdmFsdWUoZG91YmxlIHYpIHsKICAgIGlmICh2IDwgbWluKSB7CiAgICAgIHYgPSBtaW47CiAgICB9IGVsc2UgaWYgKHYgPiBtYXgpIHsKICAgICAgdiA9IG1heDsKICAgIH0KICAgIF92YWx1ZSA9IHY7CiAgfQoKICBHYXVnZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uLCB0aGlzLm1pbiwgdGhpcy5tYXgpCiAgICAgIDogc3VwZXIobmFtZSwgZGVzY3JpcHRpb24pIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKG1pbiwgJ21pbicpOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWF4LCAnbWF4Jyk7CiAgICBpZiAoIShtaW4gPCBtYXgpKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignbWluIG11c3QgYmUgbGVzcyB0aGFuIG1heCcpOwogICAgX3ZhbHVlID0gbWluOwogIH0KCiAgTWFwIF90b0pTT04oKSB7CiAgICB2YXIgbWFwID0gewogICAgICAndHlwZSc6ICdHYXVnZScsCiAgICAgICdpZCc6ICdtZXRyaWNzLyRuYW1lJywKICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAnZGVzY3JpcHRpb24nOiBkZXNjcmlwdGlvbiwKICAgICAgJ3ZhbHVlJzogdmFsdWUsCiAgICAgICdtaW4nOiBtaW4sCiAgICAgICdtYXgnOiBtYXgsCiAgICB9OwogICAgcmV0dXJuIG1hcDsKICB9Cn0KCi8vLyBBIGNoYW5naW5nIHZhbHVlLiBJbml0aWFsIHZhbHVlIGlzIDAuMC4KY2xhc3MgQ291bnRlciBleHRlbmRzIE1ldHJpYyB7CiAgQ291bnRlcihTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uKSA6IHN1cGVyKG5hbWUsIGRlc2NyaXB0aW9uKTsKCiAgZG91YmxlIF92YWx1ZSA9IDAuMDsKICBkb3VibGUgZ2V0IHZhbHVlID0+IF92YWx1ZTsKICBzZXQgdmFsdWUoZG91YmxlIHYpIHsKICAgIF92YWx1ZSA9IHY7CiAgfQoKICBNYXAgX3RvSlNPTigpIHsKICAgIHZhciBtYXAgPSB7CiAgICAgICd0eXBlJzogJ0NvdW50ZXInLAogICAgICAnaWQnOiAnbWV0cmljcy8kbmFtZScsCiAgICAgICduYW1lJzogbmFtZSwKICAgICAgJ2Rlc2NyaXB0aW9uJzogZGVzY3JpcHRpb24sCiAgICAgICd2YWx1ZSc6IHZhbHVlLAogICAgfTsKICAgIHJldHVybiBtYXA7CiAgfQp9CgpjbGFzcyBNZXRyaWNzIHsKICBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgTWV0cmljPiBfbWV0cmljcyA9IG5ldyBNYXA8U3RyaW5nLCBNZXRyaWM+KCk7CgogIC8vLyBSZWdpc3RlciBbTWV0cmljXXMgdG8gbWFrZSB0aGVtIHZpc2libGUgdG8gT2JzZXJ2YXRvcnkuCiAgc3RhdGljIHZvaWQgcmVnaXN0ZXIoTWV0cmljIG1ldHJpYykgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWV0cmljLCAnbWV0cmljJyk7CiAgICBpZiAoX21ldHJpY3NbbWV0cmljLm5hbWVdICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ1JlZ2lzdGVyZWQgbWV0cmljcyBoYXZlIHVuaXF1ZSBuYW1lcycpOwogICAgfQogICAgX21ldHJpY3NbbWV0cmljLm5hbWVdID0gbWV0cmljOwogIH0KCiAgLy8vIERlcmVnaXN0ZXIgW01ldHJpY11zIHRvIG1ha2UgdGhlbSBub3QgdmlzaWJsZSB0byBPYnNlcnZhdG9yeS4KICBzdGF0aWMgdm9pZCBkZXJlZ2lzdGVyKE1ldHJpYyBtZXRyaWMpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKG1ldHJpYywgJ21ldHJpYycpOwogICAgX21ldHJpY3MucmVtb3ZlKG1ldHJpYy5uYW1lKTsKICB9CgogIC8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQsIGNhbGxlZCBmcm9tIG5hdGl2ZSBjb2RlCiAgc3RhdGljIFN0cmluZyBfcHJpbnRNZXRyaWMoU3RyaW5nIGlkKSB7CiAgICB2YXIgbWV0cmljID0gX21ldHJpY3NbaWRdOwogICAgaWYgKG1ldHJpYyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGpzb24uZW5jb2RlKG1ldHJpYy5fdG9KU09OKCkpOwogIH0KCiAgLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudCwgY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpCiAgc3RhdGljIFN0cmluZyBfcHJpbnRNZXRyaWNzKCkgewogICAgdmFyIG1ldHJpY3MgPSBbXTsKICAgIGZvciAodmFyIG1ldHJpYyBpbiBfbWV0cmljcy52YWx1ZXMpIHsKICAgICAgbWV0cmljcy5hZGQobWV0cmljLl90b0pTT04oKSk7CiAgICB9CiAgICB2YXIgbWFwID0gewogICAgICAndHlwZSc6ICdNZXRyaWNMaXN0JywKICAgICAgJ21ldHJpY3MnOiBtZXRyaWNzLAogICAgfTsKICAgIHJldHVybiBqc29uLmVuY29kZShtYXApOwogIH0KfQqAlwBOTjwBGAFIGVAjASoBFxQBSxYZATIqAgEzIgFMTE4fGB0VASQcASgwNwYEARECAUorHRQUAREeGBMPGg8GEAQBPSMsLEwSBAESEBcdFCIWEhIHEAQCASwfRwEXHhgQBAESEBkdFCIWBxAEAgEQSQE+KDIpRwYkBAFEKjIiBAE1Kh8aEwYqBAE1TCIWKiUGEBwaBx0EAgEcZGFydDpkZXZlbG9wZXIvcHJvZmlsZXIuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZGV2ZWxvcGVyL3NlcnZpY2UuZGFydI+BLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5kZXZlbG9wZXI7CgovLy8gU2VydmljZSBwcm90b2NvbCBpcyB0aGUgcHJvdG9jb2wgdGhhdCBhIGNsaWVudCBsaWtlIHRoZSBPYnNlcnZhdG9yeQovLy8gY291bGQgdXNlIHRvIGFjY2VzcyB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIERhcnQgVk0gZm9yCi8vLyBkZWJ1Z2dpbmcgYW5kIGluc3BlY3RpbmcgRGFydCBwcm9ncmFtcy4gVGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlCi8vLyB2ZXJzaW9uIG51bWJlciBhbmQgVXJpIGZvciBhY2Nlc3NpbmcgdGhpcyBzZXJ2aWNlLgpjbGFzcyBTZXJ2aWNlUHJvdG9jb2xJbmZvIHsKICAvLy8gVGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIHByb3RvY29sLiBJZiB0aGUgcnVubmluZyBEYXJ0IGVudmlyb25tZW50IGRvZXMKICAvLy8gbm90IHN1cHBvcnQgdGhlIHNlcnZpY2UgcHJvdG9jb2wsIHRoaXMgaXMgMC4KICBmaW5hbCBpbnQgbWFqb3JWZXJzaW9uID0gX2dldFNlcnZpY2VNYWpvclZlcnNpb24oKTsKCiAgLy8vIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC4gSWYgdGhlIHJ1bm5pbmcgRGFydCBlbnZpcm9ubWVudCBkb2VzCiAgLy8vIG5vdCBzdXBwb3J0IHRoZSBzZXJ2aWNlIHByb3RvY29sLCB0aGlzIGlzIDAuCiAgZmluYWwgaW50IG1pbm9yVmVyc2lvbiA9IF9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uKCk7CgogIC8vLyBUaGUgVXJpIHRvIGFjY2VzcyB0aGUgc2VydmljZS4gSWYgdGhlIHdlYiBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmcsIHRoaXMKICAvLy8gd2lsbCBiZSBudWxsLgogIGZpbmFsIFVyaSBzZXJ2ZXJVcmk7CgogIFNlcnZpY2VQcm90b2NvbEluZm8odGhpcy5zZXJ2ZXJVcmkpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAoc2VydmVyVXJpICE9IG51bGwpIHsKICAgICAgcmV0dXJuICdEYXJ0IFZNIFNlcnZpY2UgUHJvdG9jb2wgdiRtYWpvclZlcnNpb24uJG1pbm9yVmVyc2lvbiAnCiAgICAgICAgICAnbGlzdGVuaW5nIG9uICRzZXJ2ZXJVcmknOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICdEYXJ0IFZNIFNlcnZpY2UgUHJvdG9jb2wgdiRtYWpvclZlcnNpb24uJG1pbm9yVmVyc2lvbic7CiAgICB9CiAgfQp9CgovLy8gQWNjZXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHByb3RvY29sIGFuZCBjb250cm9sIHRoZSB3ZWIgc2VydmVyCi8vLyB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIERhcnQgVk0gZm9yCi8vLyBkZWJ1Z2dpbmcgYW5kIGluc3BlY3RpbmcgRGFydCBwcm9ncmFtcy4KY2xhc3MgU2VydmljZSB7CiAgLy8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmljZSBwcm90b2NvbCAodmVyc2lvbiBudW1iZXIgYW5kCiAgLy8vIFVyaSB0byBhY2Nlc3MgdGhlIHNlcnZpY2UpLgogIHN0YXRpYyBGdXR1cmU8U2VydmljZVByb3RvY29sSW5mbz4gZ2V0SW5mbygpIGFzeW5jIHsKICAgIC8vIFBvcnQgdG8gcmVjZWl2ZSByZXNwb25zZSBmcm9tIHNlcnZpY2UgaXNvbGF0ZS4KICAgIGZpbmFsIFJhd1JlY2VpdmVQb3J0IHJlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgICBmaW5hbCBDb21wbGV0ZXI8VXJpPiB1cmlDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFVyaT4oKTsKICAgIHJlY2VpdmVQb3J0LmhhbmRsZXIgPSAoVXJpIHVyaSkgPT4gdXJpQ29tcGxldGVyLmNvbXBsZXRlKHVyaSk7CiAgICAvLyBSZXF1ZXN0IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBfZ2V0U2VydmVySW5mbyhyZWNlaXZlUG9ydC5zZW5kUG9ydCk7CiAgICAvLyBBd2FpdCB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmljZSBpc29sYXRlLgogICAgVXJpIHVyaSA9IGF3YWl0IHVyaUNvbXBsZXRlci5mdXR1cmU7CiAgICAvLyBDbG9zZSB0aGUgcG9ydC4KICAgIHJlY2VpdmVQb3J0LmNsb3NlKCk7CiAgICByZXR1cm4gbmV3IFNlcnZpY2VQcm90b2NvbEluZm8odXJpKTsKICB9CgogIC8vLyBDb250cm9sIHRoZSB3ZWIgc2VydmVyIHRoYXQgdGhlIHNlcnZpY2UgcHJvdG9jb2wgaXMgYWNjZXNzZWQgdGhyb3VnaC4KICAvLy8gVGhlIFtlbmFibGVdIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuIGFuZCBpcyB1c2VkIGFzIGEgdG9nZ2xlIHRvCiAgLy8vIGVuYWJsZSAodHJ1ZSkgb3IgZGlzYWJsZSAoZmFsc2UpIHRoZSB3ZWIgc2VydmVyIHNlcnZpY2luZyByZXF1ZXN0cy4KICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VQcm90b2NvbEluZm8+IGNvbnRyb2xXZWJTZXJ2ZXIoCiAgICAgIHtib29sIGVuYWJsZTogZmFsc2V9KSBhc3luYyB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChlbmFibGUsICdlbmFibGUnKTsKICAgIC8vIFBvcnQgdG8gcmVjZWl2ZSByZXNwb25zZSBmcm9tIHNlcnZpY2UgaXNvbGF0ZS4KICAgIGZpbmFsIFJhd1JlY2VpdmVQb3J0IHJlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgICBmaW5hbCBDb21wbGV0ZXI8VXJpPiB1cmlDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFVyaT4oKTsKICAgIHJlY2VpdmVQb3J0LmhhbmRsZXIgPSAoVXJpIHVyaSkgPT4gdXJpQ29tcGxldGVyLmNvbXBsZXRlKHVyaSk7CiAgICAvLyBSZXF1ZXN0IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBfd2ViU2VydmVyQ29udHJvbChyZWNlaXZlUG9ydC5zZW5kUG9ydCwgZW5hYmxlKTsKICAgIC8vIEF3YWl0IHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBVcmkgdXJpID0gYXdhaXQgdXJpQ29tcGxldGVyLmZ1dHVyZTsKICAgIC8vIENsb3NlIHRoZSBwb3J0LgogICAgcmVjZWl2ZVBvcnQuY2xvc2UoKTsKICAgIHJldHVybiBuZXcgU2VydmljZVByb3RvY29sSW5mbyh1cmkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBbU3RyaW5nXSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIElEIG9mIFtpc29sYXRlXS4KICAvLy8KICAvLy8gUmV0dXJucyBudWxsIGlmIHRoZSBydW5uaW5nIERhcnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VydmljZQogIC8vLyBwcm90b2NvbC4KICBzdGF0aWMgU3RyaW5nIGdldElzb2xhdGVJRChJc29sYXRlIGlzb2xhdGUpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGlzb2xhdGUsICdpc29sYXRlJyk7CiAgICByZXR1cm4gX2dldElzb2xhdGVJREZyb21TZW5kUG9ydChpc29sYXRlLmNvbnRyb2xQb3J0KTsKICB9Cn0KCi8vLyBbc2VuZFBvcnRdIHdpbGwgcmVjZWl2ZSBhIFVyaSBvciBudWxsLgpleHRlcm5hbCB2b2lkIF9nZXRTZXJ2ZXJJbmZvKFNlbmRQb3J0IHNlbmRQb3J0KTsKCi8vLyBbc2VuZFBvcnRdIHdpbGwgcmVjZWl2ZSBhIFVyaSBvciBudWxsLgpleHRlcm5hbCB2b2lkIF93ZWJTZXJ2ZXJDb250cm9sKFNlbmRQb3J0IHNlbmRQb3J0LCBib29sIGVuYWJsZSk7CgovLy8gUmV0dXJucyB0aGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgc2VydmljZSBwcm90b2NvbC4KZXh0ZXJuYWwgaW50IF9nZXRTZXJ2aWNlTWFqb3JWZXJzaW9uKCk7CgovLy8gUmV0dXJucyB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgc2VydmljZSBwcm90b2NvbC4KZXh0ZXJuYWwgaW50IF9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uKCk7CgovLy8gUmV0dXJucyB0aGUgc2VydmljZSBpZCBmb3IgdGhlIGlzb2xhdGUgdGhhdCBvd25zIFtzZW5kUG9ydF0uCmV4dGVybmFsIFN0cmluZyBfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0KFNlbmRQb3J0IHNlbmRQb3J0KTsKZABOTjwBGAFIQUg3HE4zNgFOMzYBTBQXAScBFh1GJQ1GBgQCAU1FLBBFIjc2PT5DOSo0KRcZKQQBTElKNyQyNj0+Qzk1NCkXGSkEAUEGUBAwNDsEAgErMQErQQE3KAE3KAFBPgEbZGFydDpkZXZlbG9wZXIvc2VydmljZS5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZGV2ZWxvcGVyLmRhcnSU9i8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDpkZXZlbG9wZXIiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2g7CgppbXBvcnQgImRhcnQ6YXN5bmMiIHNob3cgRnV0dXJlLCBab25lOwoKaW1wb3J0ICJkYXJ0Omlzb2xhdGUiIHNob3cgU2VuZFBvcnQ7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAicHJvZmlsZXIuZGFydCIKLy8gcGFydCAidGltZWxpbmUuZGFydCIKCkBwYXRjaApib29sIGRlYnVnZ2VyKHtib29sIHdoZW46IHRydWUsIFN0cmluZyBtZXNzYWdlfSkgbmF0aXZlICJEZXZlbG9wZXJfZGVidWdnZXIiOwoKQHBhdGNoCk9iamVjdCBpbnNwZWN0KE9iamVjdCBvYmplY3QpIG5hdGl2ZSAiRGV2ZWxvcGVyX2luc3BlY3QiOwoKQHBhdGNoCnZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLAogICAge0RhdGVUaW1lIHRpbWUsCiAgICBpbnQgc2VxdWVuY2VOdW1iZXIsCiAgICBpbnQgbGV2ZWw6IDAsCiAgICBTdHJpbmcgbmFtZTogJycsCiAgICBab25lIHpvbmUsCiAgICBPYmplY3QgZXJyb3IsCiAgICBTdGFja1RyYWNlIHN0YWNrVHJhY2V9KSB7CiAgaWYgKG1lc3NhZ2UgaXMhIFN0cmluZykgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUobWVzc2FnZSwgIm1lc3NhZ2UiLCAiTXVzdCBiZSBhIFN0cmluZyIpOwogIH0KICB0aW1lID8/PSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgaWYgKHRpbWUgaXMhIERhdGVUaW1lKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSh0aW1lLCAidGltZSIsICJNdXN0IGJlIGEgRGF0ZVRpbWUiKTsKICB9CiAgaWYgKHNlcXVlbmNlTnVtYmVyID09IG51bGwpIHsKICAgIHNlcXVlbmNlTnVtYmVyID0gX25leHRTZXF1ZW5jZU51bWJlcisrOwogIH0gZWxzZSB7CiAgICBfbmV4dFNlcXVlbmNlTnVtYmVyID0gc2VxdWVuY2VOdW1iZXIgKyAxOwogIH0KICBfbG9nKG1lc3NhZ2UsIHRpbWUubWlsbGlzZWNvbmRzU2luY2VFcG9jaCwgc2VxdWVuY2VOdW1iZXIsIGxldmVsLCBuYW1lLCB6b25lLAogICAgICBlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCmludCBfbmV4dFNlcXVlbmNlTnVtYmVyID0gMDsKCl9sb2coU3RyaW5nIG1lc3NhZ2UsIGludCB0aW1lc3RhbXAsIGludCBzZXF1ZW5jZU51bWJlciwgaW50IGxldmVsLCBTdHJpbmcgbmFtZSwKICAgIFpvbmUgem9uZSwgT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIG5hdGl2ZSAiRGV2ZWxvcGVyX2xvZyI7CgpAcGF0Y2gKdm9pZCBfcG9zdEV2ZW50KFN0cmluZyBldmVudEtpbmQsIFN0cmluZyBldmVudERhdGEpCiAgICBuYXRpdmUgIkRldmVsb3Blcl9wb3N0RXZlbnQiOwoKQHBhdGNoClNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIF9sb29rdXBFeHRlbnNpb24oU3RyaW5nIG1ldGhvZCkKICAgIG5hdGl2ZSAiRGV2ZWxvcGVyX2xvb2t1cEV4dGVuc2lvbiI7CgpAcGF0Y2gKX3JlZ2lzdGVyRXh0ZW5zaW9uKFN0cmluZyBtZXRob2QsIFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIGhhbmRsZXIpCiAgICBuYXRpdmUgIkRldmVsb3Blcl9yZWdpc3RlckV4dGVuc2lvbiI7CgovLyBUaGlzIGNvZGUgaXMgb25seSBpbnZva2VkIHdoZW4gdGhlcmUgaXMgbm8gb3RoZXIgRGFydCBjb2RlIG9uIHRoZSBzdGFjay4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAhY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQudm0ucHJvZHVjdCIpKQpfcnVuRXh0ZW5zaW9uKAogICAgU2VydmljZUV4dGVuc2lvbkhhbmRsZXIgaGFuZGxlciwKICAgIFN0cmluZyBtZXRob2QsCiAgICBMaXN0PFN0cmluZz4gcGFyYW1ldGVyS2V5cywKICAgIExpc3Q8U3RyaW5nPiBwYXJhbWV0ZXJWYWx1ZXMsCiAgICBTZW5kUG9ydCByZXBseVBvcnQsCiAgICBPYmplY3QgaWQsCiAgICBib29sIHRyYWNlX3NlcnZpY2UpIHsKICB2YXIgcGFyYW1ldGVycyA9IDxTdHJpbmcsIFN0cmluZz57fTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcktleXMubGVuZ3RoOyBpKyspIHsKICAgIHBhcmFtZXRlcnNbcGFyYW1ldGVyS2V5c1tpXV0gPSBwYXJhbWV0ZXJWYWx1ZXNbaV07CiAgfQogIHZhciByZXNwb25zZTsKICB0cnkgewogICAgcmVzcG9uc2UgPSBoYW5kbGVyKG1ldGhvZCwgcGFyYW1ldGVycyk7CiAgfSBjYXRjaCAoZSwgc3QpIHsKICAgIHZhciBlcnJvckRldGFpbHMgPSAoc3QgPT0gbnVsbCkgPyAnJGUnIDogJyRlXG4kc3QnOwogICAgcmVzcG9uc2UgPSBuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmVycm9yKAogICAgICAgIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5rRXh0ZW5zaW9uRXJyb3IsIGVycm9yRGV0YWlscyk7CiAgICBfcG9zdFJlc3BvbnNlKHJlcGx5UG9ydCwgaWQsIHJlc3BvbnNlLCB0cmFjZV9zZXJ2aWNlKTsKICAgIHJldHVybjsKICB9CiAgaWYgKHJlc3BvbnNlIGlzISBGdXR1cmUpIHsKICAgIHJlc3BvbnNlID0gbmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcigKICAgICAgICBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2Uua0V4dGVuc2lvbkVycm9yLAogICAgICAgICJFeHRlbnNpb24gaGFuZGxlciBtdXN0IHJldHVybiBhIEZ1dHVyZSIpOwogICAgX3Bvc3RSZXNwb25zZShyZXBseVBvcnQsIGlkLCByZXNwb25zZSwgdHJhY2Vfc2VydmljZSk7CiAgICByZXR1cm47CiAgfQogIHJlc3BvbnNlLmNhdGNoRXJyb3IoKGUsIHN0KSB7CiAgICAvLyBDYXRjaCBhbnkgZXJyb3JzIGVhZ2VybHkgYW5kIHdyYXAgdGhlbSBpbiBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS4KICAgIHZhciBlcnJvckRldGFpbHMgPSAoc3QgPT0gbnVsbCkgPyAnJGUnIDogJyRlXG4kc3QnOwogICAgcmV0dXJuIG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3IoCiAgICAgICAgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmtFeHRlbnNpb25FcnJvciwgZXJyb3JEZXRhaWxzKTsKICB9KS50aGVuKChyZXNwb25zZSkgewogICAgLy8gUG9zdCB0aGUgdmFsaWQgcmVzcG9uc2Ugb3IgdGhlIHdyYXBwZWQgZXJyb3IgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQKICAgIC8vIHRoZSByZXNwb25zZSBpcyBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS4KICAgIGlmIChyZXNwb25zZSBpcyEgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlKSB7CiAgICAgIHJlc3BvbnNlID0gbmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcigKICAgICAgICAgIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5rRXh0ZW5zaW9uRXJyb3IsCiAgICAgICAgICAiRXh0ZW5zaW9uIGhhbmRsZXIgbXVzdCBjb21wbGV0ZSB0byBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZSIpOwogICAgfQogICAgX3Bvc3RSZXNwb25zZShyZXBseVBvcnQsIGlkLCByZXNwb25zZSwgdHJhY2Vfc2VydmljZSk7CiAgfSkuY2F0Y2hFcnJvcigoZSwgc3QpIHsKICAgIC8vIFdlIGRvIG5vdCBleHBlY3QgYW55IGVycm9ycyB0byBvY2N1ciBpbiB0aGUgLnRoZW4gb3IgLmNhdGNoRXJyb3IgYmxvY2tzCiAgICAvLyBidXQsIHN1cHByZXNzIHRoZW0ganVzdCBpbiBjYXNlLgogIH0pOwp9CgovLyBUaGlzIGNvZGUgaXMgb25seSBpbnZva2VkIGJ5IF9ydW5FeHRlbnNpb24uCl9wb3N0UmVzcG9uc2UoU2VuZFBvcnQgcmVwbHlQb3J0LCBPYmplY3QgaWQsIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZSByZXNwb25zZSwKICAgIGJvb2wgdHJhY2Vfc2VydmljZSkgewogIGFzc2VydChyZXBseVBvcnQgIT0gbnVsbCk7CiAgaWYgKGlkID09IG51bGwpIHsKICAgIGlmICh0cmFjZV9zZXJ2aWNlKSB7CiAgICAgIHByaW50KCJ2bS1zZXJ2aWNlOiBwb3N0aW5nIG5vIHJlc3BvbnNlIGZvciByZXF1ZXN0Iik7CiAgICB9CiAgICAvLyBObyBpZCAtPiBubyByZXNwb25zZS4KICAgIHJlcGx5UG9ydC5zZW5kKG51bGwpOwogICAgcmV0dXJuOwogIH0KICBhc3NlcnQoaWQgIT0gbnVsbCk7CiAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIHNiLndyaXRlKCd7Impzb25ycGMiOiIyLjAiLCcpOwogIGlmIChyZXNwb25zZS5pc0Vycm9yKCkpIHsKICAgIGlmICh0cmFjZV9zZXJ2aWNlKSB7CiAgICAgIHByaW50KCJ2bS1zZXJ2aWNlOiBwb3N0aW5nIGVycm9yIHJlc3BvbnNlIGZvciByZXF1ZXN0ICRpZCIpOwogICAgfQogICAgc2Iud3JpdGUoJyJlcnJvciI6Jyk7CiAgfSBlbHNlIHsKICAgIGlmICh0cmFjZV9zZXJ2aWNlKSB7CiAgICAgIHByaW50KCJ2bS1zZXJ2aWNlOiBwb3N0aW5nIHJlc3BvbnNlIGZvciByZXF1ZXN0ICRpZCIpOwogICAgfQogICAgc2Iud3JpdGUoJyJyZXN1bHQiOicpOwogIH0KICBzYi53cml0ZSgnJHtyZXNwb25zZS5fdG9TdHJpbmcoKX0sJyk7CiAgaWYgKGlkIGlzIFN0cmluZykgewogICAgc2Iud3JpdGUoJyJpZCI6IiRpZCJ9Jyk7CiAgfSBlbHNlIHsKICAgIHNiLndyaXRlKCciaWQiOiRpZH0nKTsKICB9CiAgcmVwbHlQb3J0LnNlbmQoc2IudG9TdHJpbmcoKSk7Cn0KCkBwYXRjaAppbnQgX2dldFNlcnZpY2VNYWpvclZlcnNpb24oKSBuYXRpdmUgIkRldmVsb3Blcl9nZXRTZXJ2aWNlTWFqb3JWZXJzaW9uIjsKCkBwYXRjaAppbnQgX2dldFNlcnZpY2VNaW5vclZlcnNpb24oKSBuYXRpdmUgIkRldmVsb3Blcl9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uIjsKCkBwYXRjaAp2b2lkIF9nZXRTZXJ2ZXJJbmZvKFNlbmRQb3J0IHNlbmRQb3J0KSBuYXRpdmUgIkRldmVsb3Blcl9nZXRTZXJ2ZXJJbmZvIjsKCkBwYXRjaAp2b2lkIF93ZWJTZXJ2ZXJDb250cm9sKFNlbmRQb3J0IHNlbmRQb3J0LCBib29sIGVuYWJsZSkKICAgIG5hdGl2ZSAiRGV2ZWxvcGVyX3dlYlNlcnZlckNvbnRyb2wiOwoKQHBhdGNoClN0cmluZyBfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0KFNlbmRQb3J0IHNlbmRQb3J0KQogICAgbmF0aXZlICJEZXZlbG9wZXJfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0IjsKgKsATk48AU1PSysBJAEnASUBOhgYAQdOAQc6AQcZFBgSFQ8SHhxLBB8bRwQgLAsuBFAaAgEdAVBMAQc0IgEHOCgBB0MqAUxKDyUTICIYDxonMzcEEAgsFDgzQTsMBB0zMjM7DAQgTTgvQRdJMzE1NEwGOxpPKAYCAS9QGh0UGTwGHRoMBBYoIRwZQwYaCxk9BhsEKBYdCxsEIQIBB0kBB0kBB0kBBzcpAQc0MQEjZGFydDpkZXZlbG9wZXItcGF0Y2gvZGV2ZWxvcGVyLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi90aW1lbGluZS5kYXJ0hHMvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiZGV2ZWxvcGVyLmRhcnQiOwoKQHBhdGNoCmJvb2wgX2lzRGFydFN0cmVhbUVuYWJsZWQoKSBuYXRpdmUgIlRpbWVsaW5lX2lzRGFydFN0cmVhbUVuYWJsZWQiOwoKQHBhdGNoCmludCBfZ2V0VHJhY2VDbG9jaygpIG5hdGl2ZSAiVGltZWxpbmVfZ2V0VHJhY2VDbG9jayI7CgpAcGF0Y2gKaW50IF9nZXRUaHJlYWRDcHVDbG9jaygpIG5hdGl2ZSAiVGltZWxpbmVfZ2V0VGhyZWFkQ3B1Q2xvY2siOwoKQHBhdGNoCmludCBfZ2V0TmV4dEFzeW5jSWQoKSBuYXRpdmUgIlRpbWVsaW5lX2dldE5leHRBc3luY0lkIjsKCkBwYXRjaAp2b2lkIF9yZXBvcnRUYXNrRXZlbnQoaW50IHN0YXJ0LCBpbnQgdGFza0lkLCBTdHJpbmcgcGhhc2UsIFN0cmluZyBjYXRlZ29yeSwKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKSBuYXRpdmUgIlRpbWVsaW5lX3JlcG9ydFRhc2tFdmVudCI7CgpAcGF0Y2gKdm9pZCBfcmVwb3J0Q29tcGxldGVFdmVudChpbnQgc3RhcnQsIGludCBzdGFydENwdSwgU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbmFtZSwKICAgIFN0cmluZyBhcmd1bWVudHNBc0pzb24pIG5hdGl2ZSAiVGltZWxpbmVfcmVwb3J0Q29tcGxldGVFdmVudCI7CgpAcGF0Y2gKdm9pZCBfcmVwb3J0Rmxvd0V2ZW50KGludCBzdGFydCwgaW50IHN0YXJ0Q3B1LCBTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBuYW1lLAogICAgaW50IHR5cGUsIGludCBpZCwgU3RyaW5nIGFyZ3VtZW50c0FzSnNvbikgbmF0aXZlICJUaW1lbGluZV9yZXBvcnRGbG93RXZlbnQiOwoKQHBhdGNoCnZvaWQgX3JlcG9ydEluc3RhbnRFdmVudChpbnQgc3RhcnQsIFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG5hbWUsCiAgICBTdHJpbmcgYXJndW1lbnRzQXNKc29uKSBuYXRpdmUgIlRpbWVsaW5lX3JlcG9ydEluc3RhbnRFdmVudCI7CiMATk48AR0BB0MBBzYBBz4BBzgBB0xMAQdRQwEHTVEBB0JCASJkYXJ0OmRldmVsb3Blci1wYXRjaC90aW1lbGluZS5kYXJ0KG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9mZmkvZmZpLmRhcnSUxi8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKCi8vLyB7QGNhdGVnb3J5IFZNfQovLy8ge0Bub2RvY30KbGlicmFyeSBkYXJ0LmZmaTsKCmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJyBzaG93IFR5cGVkRGF0YTsKCnBhcnQgIm5hdGl2ZV90eXBlLmRhcnQiOwpwYXJ0ICJhbm5vdGF0aW9ucy5kYXJ0IjsKcGFydCAiZHluYW1pY19saWJyYXJ5LmRhcnQiOwpwYXJ0ICJzdHJ1Y3QuZGFydCI7CgovLy8gTnVtYmVyIG9mIGJ5dGVzIHVzZWQgYnkgbmF0aXZlIHR5cGUgVC4KLy8vCi8vLyBJbmNsdWRlcyBwYWRkaW5nIGFuZCBhbGlnbm1lbnQgb2Ygc3RydWN0cy4KZXh0ZXJuYWwgaW50IHNpemVPZjxUIGV4dGVuZHMgTmF0aXZlVHlwZT4oKTsKCi8vLyBSZXByZXNlbnRzIGEgcG9pbnRlciBpbnRvIHRoZSBuYXRpdmUgQyBtZW1vcnkuCmZpbmFsIFBvaW50ZXI8Vm9pZD4gbnVsbHB0ciA9IFBvaW50ZXIuZnJvbUFkZHJlc3MoMCk7CgovLy8gUmVwcmVzZW50cyBhIHBvaW50ZXIgaW50byB0aGUgbmF0aXZlIEMgbWVtb3J5LiBDYW5ub3QgYmUgZXh0ZW5kZWQuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgUG9pbnRlcjxUIGV4dGVuZHMgTmF0aXZlVHlwZT4gZXh0ZW5kcyBOYXRpdmVUeXBlIHsKICAvLy8gQWxsb2NhdGUgW2NvdW50XSBlbGVtZW50cyBvZiB0eXBlIFtUXSBvbiB0aGUgbmF0aXZlIGhlYXAgdmlhIG1hbGxvYygpIGFuZAogIC8vLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5LgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLgogIGV4dGVybmFsIGZhY3RvcnkgUG9pbnRlci5hbGxvY2F0ZSh7aW50IGNvdW50OiAxfSk7CgogIC8vLyBDb25zdHJ1Y3Rpb24gZnJvbSByYXcgaW50ZWdlci4KICBleHRlcm5hbCBmYWN0b3J5IFBvaW50ZXIuZnJvbUFkZHJlc3MoaW50IHB0cik7CgogIC8vLyBDb252ZXJ0IERhcnQgZnVuY3Rpb24gdG8gYSBDIGZ1bmN0aW9uIHBvaW50ZXIsIGF1dG9tYXRpY2FsbHkgbWFyc2hhbGxpbmcKICAvLy8gdGhlIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlCiAgLy8vCiAgLy8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hpbGUgY2FsbGluZyBgZigpYCwgdGhlIG5hdGl2ZSBmdW5jdGlvbiB3aWxsCiAgLy8vIHJldHVybiBgZXhjZXB0aW9uYWxSZXR1cm5gLCB3aGljaCBtdXN0IGJlIGFzc2lnbmFibGUgdG8gcmV0dXJuIHR5cGUgb2YgYGZgLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gYWRkcmVzcyBjYW4gb25seSBiZSBpbnZva2VkIG9uIHRoZSBtdXRhdG9yIChtYWluKQogIC8vLyB0aHJlYWQgb2YgdGhlIGN1cnJlbnQgaXNvbGF0ZS4gSXQgd2lsbCBhYm9ydCB0aGUgcHJvY2VzcyBpZiBpbnZva2VkIG9uIGFueQogIC8vLyBvdGhlciB0aHJlYWQuCiAgLy8vCiAgLy8vIFRoZSBwb2ludGVyIHJldHVybmVkIHdpbGwgcmVtYWluIGFsaXZlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGN1cnJlbnQKICAvLy8gaXNvbGF0ZSdzIGxpZmV0aW1lLiBBZnRlciB0aGUgaXNvbGF0ZSBpdCB3YXMgY3JlYXRlZCBpbiBpcyB0ZXJtaW5hdGVkLAogIC8vLyBpbnZva2luZyBpdCBmcm9tIG5hdGl2ZSBjb2RlIHdpbGwgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yLgogIC8vLwogIC8vLyBEb2VzIG5vdCBhY2NlcHQgZHluYW1pYyBpbnZvY2F0aW9ucyAtLSB3aGVyZSB0aGUgdHlwZSBvZiB0aGUgcmVjZWl2ZXIgaXMKICAvLy8gW2R5bmFtaWNdLgogIGV4dGVybmFsIHN0YXRpYyBQb2ludGVyPE5hdGl2ZUZ1bmN0aW9uPFQ+PiBmcm9tRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uPigKICAgICAgQERhcnRSZXByZXNlbnRhdGlvbk9mKCJUIikgRnVuY3Rpb24gZiwgT2JqZWN0IGV4Y2VwdGlvbmFsUmV0dXJuKTsKCiAgLy8vIFN0b3JlIGEgRGFydCB2YWx1ZSBpbnRvIHRoaXMgbG9jYXRpb24uCiAgLy8vCiAgLy8vIFRoZSBbdmFsdWVdIGlzIGF1dG9tYXRpY2FsbHkgbWFyc2hhbGxlZCBpbnRvIGl0cyBuYXRpdmUgcmVwcmVzZW50YXRpb24uCiAgLy8vIE5vdGUgdGhhdCBpbnRzIHdoaWNoIGRvIG5vdCBmaXQgaW4gW1RdIGFyZSB0cnVuY2F0ZWQgYW5kIHNpZ24gZXh0ZW5kZWQsCiAgLy8vIGFuZCBkb3VibGVzIHN0b3JlZCBpbnRvIFBvaW50ZXI8W0Zsb2F0XT4gbG9zZSBwcmVjaXNpb24uCiAgZXh0ZXJuYWwgdm9pZCBzdG9yZShARGFydFJlcHJlc2VudGF0aW9uT2YoIlQiKSBPYmplY3QgdmFsdWUpOwoKICAvLy8gTG9hZCBhIERhcnQgdmFsdWUgZnJvbSB0aGlzIGxvY2F0aW9uLgogIC8vLwogIC8vLyBUaGUgdmFsdWUgaXMgYXV0b21hdGljYWxseSB1bm1hcnNoYWxsZWQgZnJvbSBpdHMgbmF0aXZlIHJlcHJlc2VudGF0aW9uLgogIC8vLyBMb2FkaW5nIGEgW1N0cnVjdF0gcmVmZXJlbmNlIHJldHVybnMgYSByZWZlcmVuY2UgYmFja2VkIGJ5IG5hdGl2ZSBtZW1vcnkKICAvLy8gKHRoZSBzYW1lIHBvaW50ZXIgYXMgaXQncyBsb2FkZWQgZnJvbSkuCiAgZXh0ZXJuYWwgUiBsb2FkPEBEYXJ0UmVwcmVzZW50YXRpb25PZigiVCIpIFI+KCk7CgogIC8vLyBBY2Nlc3MgdG8gdGhlIHJhdyBwb2ludGVyIHZhbHVlLgogIC8vLyBPbiAzMi1iaXQgc3lzdGVtcywgdGhlIHVwcGVyIDMyLWJpdHMgb2YgdGhlIHJlc3VsdCBhcmUgMC4KICBleHRlcm5hbCBpbnQgZ2V0IGFkZHJlc3M7CgogIC8vLyBQb2ludGVyIGFyaXRobWV0aWMgKHRha2VzIGVsZW1lbnQgc2l6ZSBpbnRvIGFjY291bnQpLgogIGV4dGVybmFsIFBvaW50ZXI8VD4gZWxlbWVudEF0KGludCBpbmRleCk7CgogIC8vLyBQb2ludGVyIGFyaXRobWV0aWMgKGJ5dGUgb2Zmc2V0KS4KICAvLyBUT0RPKGRhY29oYXJrZXMpOiByZW1vdmUgdGhpcz8KICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzU4ODMKICBleHRlcm5hbCBQb2ludGVyPFQ+IG9mZnNldEJ5KGludCBvZmZzZXRJbkJ5dGVzKTsKCiAgLy8vIENhc3QgUG9pbnRlcjxUPiB0byBhIFBvaW50ZXI8Vj4uCiAgZXh0ZXJuYWwgUG9pbnRlcjxVPiBjYXN0PFUgZXh0ZW5kcyBOYXRpdmVUeXBlPigpOwoKICAvLy8gQ29udmVydCB0byBEYXJ0IGZ1bmN0aW9uLCBhdXRvbWF0aWNhbGx5IG1hcnNoYWxsaW5nIHRoZSBhcmd1bWVudHMKICAvLy8gYW5kIHJldHVybiB2YWx1ZS4KICAvLy8KICAvLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIG9uIFtQb2ludGVyXTxbTmF0aXZlRnVuY3Rpb25dPi4gRG9lcyBub3QgYWNjZXB0IGR5bmFtaWMKICAvLy8gaW52b2NhdGlvbnMgLS0gd2hlcmUgdGhlIHR5cGUgb2YgdGhlIHJlY2VpdmVyIGlzIFtkeW5hbWljXS4KICBleHRlcm5hbCBSIGFzRnVuY3Rpb248QERhcnRSZXByZXNlbnRhdGlvbk9mKCJUIikgUiBleHRlbmRzIEZ1bmN0aW9uPigpOwoKICAvLy8gRnJlZSBtZW1vcnkgb24gdGhlIEMgaGVhcCBwb2ludGVkIHRvIGJ5IHRoaXMgcG9pbnRlciB3aXRoIGZyZWUoKS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgemVyb3Mgb3V0IHRoZSBhZGRyZXNzLgogIGV4dGVybmFsIHZvaWQgZnJlZSgpOwoKICAvLy8gQ3JlYXRlcyBhbiAqZXh0ZXJuYWwqIHR5cGVkIGRhdGEgYXJyYXkgYmFja2VkIGJ5IHRoaXMgcG9pbnRlci4KICAvLy8KICAvLy8gVGhlIHR5cGVkIGRhdGEgYXJyYXkgcmV0dXJuZWQgaXMgb25seSB2YWxpZCBmb3IgYXMgbG9uZyBhcyB0aGUgYmFja2luZwogIC8vLyBbUG9pbnRlcl0uIEFjY2Vzc2luZyBhbnkgZWxlbWVudCBvZiB0aGUgdHlwZSBkYXRhIGFycmF5IGFmdGVyIHRoaXMKICAvLy8gW1BvaW50ZXJdIGhhcyBiZWVuIFtQb2ludGVyLmZyZWUoKV1kIHdpbGwgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yLgogIC8vLwogIC8vLyBTaW5jZSBbUG9pbnRlcl1zIGRvIG5vdCBrbm93IHRoZWlyIGxlbmd0aCwgdGhlIHNpemUgb2YgdGhlIHR5cGVkIGRhdGEgaXMKICAvLy8gY29udHJvbGxlZCBieSBgY291bnRgLCBpbiB1bml0cyBvZiB0aGUgc2l6ZSBvZiB0aGUgbmF0aXZlIHR5cGUgZm9yIHRoaXMKICAvLy8gW1BvaW50ZXJdIChzaW1pbGFybHkgdG8gW1BvaW50ZXIuYWxsb2NhdGVdKS4KICAvLy8KICAvLy8gVGhlIGtpbmQgb2YgVHlwZWREYXRhIHByb2R1Y2VkIGRlcGVuZHMgb24gdGhlIG5hdGl2ZSB0eXBlOgogIC8vLwogIC8vLyAgIFBvaW50ZXI8SW50OD4gLT4gSW50OExpc3QKICAvLy8gICBQb2ludGVyPFVpbnQ4PiAtPiBVaW50OExpc3QKICAvLy8gICBldGMuIHVwIHRvIEludDY0L1VpbnQ2NAogIC8vLyAgIFBvaW50ZXI8SW50UHRyPiAtPiBJbnQzMkxpc3QvSW50NjRMaXN0IGRlcGVuZGluZyBvbiBwbGF0Zm9ybSB3b3JkIHNpemUKICAvLy8gICBQb2ludGVyPEZsb2F0PiAtPiBGbG9hdDMyTGlzdAogIC8vLyAgIFBvaW50ZXI8RG91YmxlPiAtPiBGbG9hdDY0TGlzdAogIC8vLwogIC8vLyBDcmVhdGlvbiBvZiBhIFtVaW50OENsYW1wZWRMaXN0XSBpcyBub3Qgc3VwcG9ydGVkLiBDcmVhdGlvbiBvZiBhIHR5cGVkCiAgLy8vIGRhdGEgZnJvbSBhIFtQb2ludGVyXSB0byBhbnkgb3RoZXIgbmF0aXZlIHR5cGUgaXMgbm90IHN1cHBvcnRlZC4KICAvLy8KICAvLy8gVGhlIHBvaW50ZXIgbXVzdCBiZSBhbGlnbmVkIHRvIGEgbXVsdGlwbGUgb2YgdGhlIG5hdGl2ZSB0eXBlJ3Mgc2l6ZS4KICAvLwogIC8vIFRPRE8oMzc3NzMpOiBVc2UgZXh0ZW5zaW9uIG1ldGhvZHMgdG8gYXJ0aWN1bGF0ZSBtb3JlIHByZWNpc2UgcmV0dXJuIHR5cGVzLgogIC8vIFdlIHNob3VsZCBzdGlsbCBrZWVwIHRoaXMgbWVtYmVyIHRob3VnaCBhcyBhIGdlbmVyaWMgd2F5IHRvIGFjY2VzcyBhCiAgLy8gUG9pbnRlciBvZiB1bmtub3duIHR5cGUuCiAgZXh0ZXJuYWwgVHlwZWREYXRhIGFzRXh0ZXJuYWxUeXBlZERhdGEoe2ludCBjb3VudDogMX0pOwoKICAvLy8gRXF1YWxpdHkgZm9yIFBvaW50ZXJzIG9ubHkgZGVwZW5kcyBvbiB0aGVpciBhZGRyZXNzLgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gYWRkcmVzcyA9PSBvdGhlci5hZGRyZXNzOwogIH0KCiAgLy8vIFRoZSBoYXNoIGNvZGUgZm9yIGEgUG9pbnRlciBvbmx5IGRlcGVuZHMgb24gaXRzIGFkZHJlc3MuCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gYWRkcmVzcy5oYXNoQ29kZTsKICB9Cn0KgIkATk47ARMNEgEpARkZHRQBKwQvLQEzNgFHGjlQNgYtNQElMQFPJQZOUgZOURQGTU1CBk8RT0gBLQZOTj9AASwGTk8uMwEnQBwBPCwBKCQzMwEnNAFIGAZRQkoBSAYsGAFFBk1JSgZPTjMGQQYiJCBPJicGTUcGSwVRSh46ATscJSUEAT8VHQQCAQhkYXJ0OmZmaS5vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2ZmaV9wYXRjaC5kYXJ0i4kvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQWxsIGltcG9ydHMgbXVzdCBiZSBpbiBhbGwgRkZJIHBhdGNoIGZpbGVzIHRvIG5vdCBkZXBlbmQgb24gdGhlIG9yZGVyCi8vIHRoZSBwYXRjaGVzIGFyZSBhcHBsaWVkLgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IHBhdGNoOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YScgc2hvdyBUeXBlZERhdGE7CgpAcGF0Y2gKaW50IHNpemVPZjxUIGV4dGVuZHMgTmF0aXZlVHlwZT4oKSBuYXRpdmUgIkZmaV9zaXplT2YiOwoKUG9pbnRlcjxUPiBfYWxsb2NhdGU8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KGludCBjb3VudCkgbmF0aXZlICJGZmlfYWxsb2NhdGUiOwoKUG9pbnRlcjxUPiBfZnJvbUFkZHJlc3M8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KGludCBwdHIpIG5hdGl2ZSAiRmZpX2Zyb21BZGRyZXNzIjsKCi8vIFRoZSByZWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gKGZvciBpbnRlcmZhY2UgY2FsbHMpIGxpdmVzIGluCi8vIEJ1aWxkRmZpQXNGdW5jdGlvbkNhbGwgaW4gdGhlIEtlcm5lbCBmcm9udGVuZC4gTm8gY2FsbHMgY2FuIGFjdHVhbGx5IHJlYWNoCi8vIHRoaXMgZnVuY3Rpb24uCkRTIF9hc0Z1bmN0aW9uSW50ZXJuYWw8RFMgZXh0ZW5kcyBGdW5jdGlvbiwgTlMgZXh0ZW5kcyBGdW5jdGlvbj4oCiAgICBQb2ludGVyPE5hdGl2ZUZ1bmN0aW9uPE5TPj4gcHRyKSBuYXRpdmUgIkZmaV9hc0Z1bmN0aW9uSW50ZXJuYWwiOwoKZHluYW1pYyBfYXNFeHRlcm5hbFR5cGVkRGF0YShQb2ludGVyIHB0ciwgaW50IGNvdW50KQogICAgbmF0aXZlICJGZmlfYXNFeHRlcm5hbFR5cGVkRGF0YSI7CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBQb2ludGVyPFQgZXh0ZW5kcyBOYXRpdmVUeXBlPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBQb2ludGVyLmFsbG9jYXRlKHtpbnQgY291bnQ6IDF9KSA9PiBfYWxsb2NhdGU8VD4oY291bnQpOwoKICBAcGF0Y2gKICBmYWN0b3J5IFBvaW50ZXIuZnJvbUFkZHJlc3MoaW50IHB0cikgPT4gX2Zyb21BZGRyZXNzKHB0cik7CgogIEBwYXRjaAogIHN0YXRpYyBQb2ludGVyPE5hdGl2ZUZ1bmN0aW9uPFQ+PiBmcm9tRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uPigKICAgICAgQERhcnRSZXByZXNlbnRhdGlvbk9mKCJUIikgRnVuY3Rpb24gZiwKICAgICAgT2JqZWN0IGV4Y2VwdGlvbmFsUmV0dXJuKSBuYXRpdmUgIkZmaV9mcm9tRnVuY3Rpb24iOwoKICAvLyBUT0RPKHNqaW5kZWwpOiBXaGVuIE5OQkQgaXMgYXZhaWxhYmxlLCB3ZSBzaG91bGQgY2hhbmdlIGB2YWx1ZWAgdG8gYmUKICAvLyBub24tbnVsbC4KICBAcGF0Y2gKICB2b2lkIHN0b3JlKE9iamVjdCB2YWx1ZSkgbmF0aXZlICJGZmlfc3RvcmUiOwoKICBAcGF0Y2gKICBSIGxvYWQ8Uj4oKSBuYXRpdmUgIkZmaV9sb2FkIjsKCiAgQHBhdGNoCiAgaW50IGdldCBhZGRyZXNzIG5hdGl2ZSAiRmZpX2FkZHJlc3MiOwoKICAvLyBOb3RlIHRoaXMgY291bGQgYWxzbyBiZSBpbXBsbWVudGVkIHdpdGhvdXQgYW4gZXh0cmEgbmF0aXZlIGFzIG9mZnNldEJ5CiAgLy8gKGVsZW1lbnRTaXplKCkqaW5kZXgpLiBUaGlzIHdvdWxkIGJlIDIgbmF0aXZlIGNhbGxzIHJhdGhlciB0aGFuIG9uZS4gV2hhdAogIC8vIHdvdWxkIGJlIGJldHRlcj8KICBAcGF0Y2gKICBQb2ludGVyPFQ+IGVsZW1lbnRBdChpbnQgaW5kZXgpIG5hdGl2ZSAiRmZpX2VsZW1lbnRBdCI7CgogIC8vIE5vdGUgdGhpcyBjb3VsZCBhbHNvIGJlIGltcGxtZW50ZWQgd2l0aG91dCBhbiBleHRyYSAgbmF0aXZlIGFzCiAgLy8gZnJvbUFkZHJlc3MoYWRkcmVzcykuIFRoaXMgd291bGQgYmUgMiBuYXRpdmUgY2FsbHMgcmF0aGVyIHRoYW4gb25lLgogIC8vIFdoYXQgd291bGQgYmUgYmV0dGVyPwogIEBwYXRjaAogIFBvaW50ZXI8VD4gb2Zmc2V0QnkoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiRmZpX29mZnNldEJ5IjsKCiAgLy8gTm90ZSB0aGlzIGNvdWxkIGFsc28gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbiBleHRyYSBuYXRpdmUgYXMKICAvLyBmcm9tQWRkcmVzcyhhZGRyZXNzKS4gVGhpcyB3b3VsZCBiZSAyIG5hdGl2ZSBjYWxscyByYXRoZXIgdGhhbiBvbmUuCiAgLy8gV2hhdCB3b3VsZCBiZSBiZXR0ZXI/CiAgQHBhdGNoCiAgUG9pbnRlcjxVPiBjYXN0PFUgZXh0ZW5kcyBOYXRpdmVUeXBlPigpIG5hdGl2ZSAiRmZpX2Nhc3QiOwoKICBAcGF0Y2gKICBSIGFzRnVuY3Rpb248UiBleHRlbmRzIEZ1bmN0aW9uPigpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIlBvaW50ZXIuYXNGdW5jdGlvbiBjYW5ub3QgYmUgY2FsbGVkIGR5bmFtaWNhbGx5LiIpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBmcmVlKCkgbmF0aXZlICJGZmlfZnJlZSI7CgogIEBwYXRjaAogIFR5cGVkRGF0YSBhc0V4dGVybmFsVHlwZWREYXRhKHtpbnQgY291bnQ6IDF9KSA9PgogICAgICBfYXNFeHRlcm5hbFR5cGVkRGF0YSh0aGlzLCBjb3VudCk7Cn0KCi8vIFJldHVybnMgdGhlIEFCSSB1c2VkIGZvciBzaXplIGFuZCBhbGlnbm1lbnQgY2FsY3VsYXRpb25zLgovLyBTZWUgcGtnL3ZtL2xpYi90cmFuc2Zvcm1hdGlvbnMvZmZpLmRhcnQuCkBwcmFnbWEoJ3ZtOnByZWZlci1pbmxpbmUnKQppbnQgX2FiaSgpCiAgICBuYXRpdmUgIlJlY29nbml6ZWQgbWV0aG9kOiBtZXRob2QgaXMgZGlyZWN0bHkgaW50ZXJwcmV0ZWQgYnkgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyIG9yIElSIGdyYXBoIGlzIGJ1aWx0IGluIHRoZSBmbG93IGdyYXBoIGJ1aWxkZXIuIjsKWABOTjwBSRwkKQEHOAFNAVEBS04SQkYBNSYBBxomCUMBCT0BCUYtOwFLDwkvAQkhAQkoAUxPFgk6AURJGwlAAURJGwk9AQknUAQBCSEBCTMpAgE9LBwLgIwBHWRhcnQ6ZmZpLXBhdGNoL2ZmaV9wYXRjaC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9mZmkvbmF0aXZlX3R5cGUuZGFydI7KLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5mZmk7CgovLy8gW05hdGl2ZVR5cGVdJ3Mgc3VidHlwZXMgcmVwcmVzZW50IGEgbmF0aXZlIHR5cGUgaW4gQy4KLy8vCi8vLyBbTmF0aXZlVHlwZV0ncyBzdWJ0eXBlcyBhcmUgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmUKLy8vIHB1cmVseSBhcyBtYXJrZXJzIGluIHR5cGUgc2lnbmF0dXJlcy4KYWJzdHJhY3QgY2xhc3MgTmF0aXZlVHlwZSB7CiAgY29uc3QgTmF0aXZlVHlwZSgpOwp9CgovLy8gW19OYXRpdmVJbnRlZ2VyXSdzIHN1YnR5cGVzIHJlcHJlc2VudCBhIG5hdGl2ZSBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW19OYXRpdmVJbnRlZ2VyXSdzIHN1YnR5cGVzIGFyZSBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZQovLy8gcHVyZWx5IGFzIG1hcmtlcnMgaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBfTmF0aXZlSW50ZWdlciBleHRlbmRzIE5hdGl2ZVR5cGUgewogIGNvbnN0IF9OYXRpdmVJbnRlZ2VyKCk7Cn0KCi8vLyBbX05hdGl2ZURvdWJsZV0ncyBzdWJ0eXBlcyByZXByZXNlbnQgYSBuYXRpdmUgZmxvYXQgb3IgZG91YmxlIGluIEMuCi8vLwovLy8gW19OYXRpdmVEb3VibGVdJ3Mgc3VidHlwZXMgYXJlIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlCi8vLyBwdXJlbHkgYXMgbWFya2VycyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIF9OYXRpdmVEb3VibGUgZXh0ZW5kcyBOYXRpdmVUeXBlIHsKICBjb25zdCBfTmF0aXZlRG91YmxlKCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHNpZ25lZCA4IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW0ludDhdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIEludDggZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgSW50OCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbSW50MTZdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIEludDE2IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IEludDE2KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtJbnQzMl0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIgaW4KLy8vIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgSW50MzIgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgSW50MzIoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW0ludDY0XSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlciBpbgovLy8gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBJbnQ2NCBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBJbnQ2NCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW1VpbnQ4XSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlciBpbgovLy8gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBVaW50OCBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBVaW50OCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtVaW50MTZdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyCi8vLyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIFVpbnQxNiBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBVaW50MTYoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgdW5zaWduZWQgMzIgYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbVWludDMyXSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBVaW50MzIgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgVWludDMyKCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW1VpbnQ2NF0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIKLy8vIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgVWludDY0IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IFVpbnQ2NCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSBwb2ludGVyLXNpemVkIGludGVnZXIgaW4gQy4KLy8vCi8vLyBbSW50UHRyXSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBJbnRQdHIgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgSW50UHRyKCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIDMyIGJpdCBmbG9hdCBpbiBDLgovLy8KLy8vIFtGbG9hdF0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIKLy8vIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgRmxvYXQgZXh0ZW5kcyBfTmF0aXZlRG91YmxlIHsKICBjb25zdCBGbG9hdCgpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSA2NCBiaXQgZG91YmxlIGluIEMuCi8vLwovLy8gW0RvdWJsZV0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIKLy8vIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgRG91YmxlIGV4dGVuZHMgX05hdGl2ZURvdWJsZSB7CiAgY29uc3QgRG91YmxlKCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgdm9pZCB0eXBlIGluIEMuCi8vLwovLy8gW1ZvaWRdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCkB1bnNpemVkCmNsYXNzIFZvaWQgZXh0ZW5kcyBOYXRpdmVUeXBlIHsKICBjb25zdCBWb2lkKCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgZnVuY3Rpb24gdHlwZSBpbiBDLgovLy8KLy8vIFtOYXRpdmVGdW5jdGlvbl0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcwovLy8gbWFya2VyIGluIHR5cGUgc2lnbmF0dXJlcy4KQHVuc2l6ZWQKY2xhc3MgTmF0aXZlRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uPiBleHRlbmRzIE5hdGl2ZVR5cGUge30KgIcATk48ARIBOgRNKhwWAgFBBFEqKhoCAUgEUCopGQIBMwRQFSQQAgE0BFEVJRECATQEURUlEQIBNARRFSURAgE1BFEVJRECATYETxgmEgIBNgRPGCYSAgE2BE8YJhICATQETxgmEgIBKwROGCQRAgEsBE8YJRICASEEUBUJIBACASUEUB8JPwEZZGFydDpmZmkvbmF0aXZlX3R5cGUuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZmZpL2Fubm90YXRpb25zLmRhcnSF3S8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuZmZpOwoKY2xhc3MgRGFydFJlcHJlc2VudGF0aW9uT2YgewogIC8vLyBSZXByZXNlbnRzIHRoZSBEYXJ0IHR5cGUgY29ycmVzcG9uZGluZyB0byBhIFtOYXRpdmVUeXBlXS4KICAvLy8KICAvLy8gW0ludDhdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtJbnQxNl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbSW50MzJdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW0ludDY0XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtVaW50OF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbVWludDE2XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW1VpbnQzMl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtVaW50NjRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbSW50UHRyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW0RvdWJsZV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtkb3VibGVdCiAgLy8vIFtGbG9hdF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbZG91YmxlXQogIC8vLyBbUG9pbnRlcl08VD4gICAgICAgICAgICAgICAgICAgICAgICAgLT4gW1BvaW50ZXJdPFQ+CiAgLy8vIFtOYXRpdmVGdW5jdGlvbl08VDEgRnVuY3Rpb24oVDIsIFQzKSAtPiBTMSBGdW5jdGlvbihTMiwgUzMpCiAgLy8vICAgIHdoZXJlIERhcnRSZXByZXNlbnRhdGlvbk9mKFRuKSAtPiBTbgogIC8vLyBUIGV4dGVuZHMgU3RydWN0PFQ+ICAgICAgICAgICAgICAgICAgLT4gVAogIGNvbnN0IERhcnRSZXByZXNlbnRhdGlvbk9mKFN0cmluZyBuYXRpdmVUeXBlKTsKfQoKY2xhc3MgVW5zaXplZCB7CiAgY29uc3QgVW5zaXplZCgpOwp9CgovLy8gVGhpcyBbTmF0aXZlVHlwZV0gZG9lcyBub3QgaGF2ZSBwcmVkZWZpbmVkIHNpemUuCi8vLwovLy8gVW5zaXplZCBOYXRpdmVUeXBlcyBkbyBub3Qgc3VwcG9ydCBbc2l6ZU9mXSBiZWNhdXNlIHRoZWlyIHNpemUgaXMgdW5rbm93bi4KLy8vIENvbnNlcXVlbnRseSwgW2FsbG9jYXRlXSwgW1BvaW50ZXIubG9hZF0sIFtQb2ludGVyLnN0b3JlXSwgYW5kCi8vLyBbUG9pbnRlci5lbGVtZW50QXRdIGFyZSBub3QgYXZhaWxhYmxlLgpjb25zdCB1bnNpemVkID0gY29uc3QgVW5zaXplZCgpOwonAE5OPAESAR1ABjQ0NDQ0NDQ0NDc3O0IuMDECARATAgE1BE9DKyEBGWRhcnQ6ZmZpL2Fubm90YXRpb25zLmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ZmaS9keW5hbWljX2xpYnJhcnkuZGFydIUHLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5mZmk7CgovLy8gUmVwcmVzZW50cyBhIGR5bmFtaWNhbGx5IGxvYWRlZCBDIGxpYnJhcnkuCmNsYXNzIER5bmFtaWNMaWJyYXJ5IHsKICAvLy8gTG9hZHMgYSBkeW5hbWljIGxpYnJhcnkgZmlsZS4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBkbG9wZW4uCiAgLy8vCiAgLy8vIFRocm93cyBhbiBbQXJndW1lbnRFcnJvcl0gaWYgbG9hZGluZyB0aGUgZHluYW1pYyBsaWJyYXJ5IGZhaWxzLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgaXQgbG9hZHMgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbGlicmFyeSBsYXppbHkgKFJUTERfTEFaWSkuCiAgZXh0ZXJuYWwgZmFjdG9yeSBEeW5hbWljTGlicmFyeS5vcGVuKFN0cmluZyBuYW1lKTsKCiAgLy8vIExvb2tzIHVwIGEgc3ltYm9sIGluIHRoZSBbRHluYW1pY0xpYnJhcnldIGFuZCByZXR1cm5zIGl0cyBhZGRyZXNzIGluCiAgLy8vIG1lbW9yeS4gRXF1aXZhbGVudCBvZiBkbHN5bS4KICAvLy8KICAvLy8gVGhyb3dzIGFuIFtBcmd1bWVudEVycm9yXSBpZiBpdCBmYWlscyB0byBsb29rdXAgdGhlIHN5bWJvbC4KICBleHRlcm5hbCBQb2ludGVyPFQ+IGxvb2t1cDxUIGV4dGVuZHMgTmF0aXZlVHlwZT4oU3RyaW5nIHN5bWJvbE5hbWUpOwoKICAvLy8gSGVscGVyIHRoYXQgY29tYmluZXMgbG9va3VwIGFuZCBjYXN0IHRvIGEgRGFydCBmdW5jdGlvbi4KICBleHRlcm5hbCBGIGxvb2t1cEZ1bmN0aW9uPFQgZXh0ZW5kcyBGdW5jdGlvbiwgRiBleHRlbmRzIEZ1bmN0aW9uPigKICAgICAgU3RyaW5nIHN5bWJvbE5hbWUpOwoKICAvLy8gRHluYW1pYyBsaWJyYXJpZXMgYXJlIGVxdWFsIGlmIHRoZXkgbG9hZCB0aGUgc2FtZSBsaWJyYXJ5LgogIGV4dGVybmFsIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvLy8gVGhlIGhhc2ggY29kZSBmb3IgYSBEeW5hbWljTGlicmFyeSBvbmx5IGRlcGVuZHMgb24gdGhlIGxvYWRlZCBsaWJyYXJ5CiAgZXh0ZXJuYWwgaW50IGdldCBoYXNoQ29kZTsKCiAgLy8vIFRoZSBoYW5kbGUgdG8gdGhlIGR5bmFtaWMgbGlicmFyeS4KICBleHRlcm5hbCBQb2ludGVyPFZvaWQ+IGdldCBoYW5kbGU7Cn0KJABOTjwBEgEvF0YGRgZKNQFLIwZCRwE/RRoBQSQBTB0BKSUCAR1kYXJ0OmZmaS9keW5hbWljX2xpYnJhcnkuZGFydD5vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2ZmaV9keW5hbWljX2xpYnJhcnlfcGF0Y2guZGFydIXNLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIEFsbCBpbXBvcnRzIG11c3QgYmUgaW4gYWxsIEZGSSBwYXRjaCBmaWxlcyB0byBub3QgZGVwZW5kIG9uIHRoZSBvcmRlcgovLyB0aGUgcGF0Y2hlcyBhcmUgYXBwbGllZC4KaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBwYXRjaDsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnIHNob3cgVHlwZWREYXRhOwoKRHluYW1pY0xpYnJhcnkgX29wZW4oU3RyaW5nIG5hbWUpIG5hdGl2ZSAiRmZpX2RsX29wZW4iOwoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgRHluYW1pY0xpYnJhcnkgewogIEBwYXRjaAogIGZhY3RvcnkgRHluYW1pY0xpYnJhcnkub3BlbihTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIF9vcGVuKG5hbWUpOwogIH0KCiAgQHBhdGNoCiAgUG9pbnRlcjxUPiBsb29rdXA8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KFN0cmluZyBzeW1ib2xOYW1lKQogICAgICBuYXRpdmUgIkZmaV9kbF9sb29rdXAiOwoKICAvLyBUaGUgcmVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIGluIEZmaVVzZVNpdGVzVHJhbnNmb3JtZXIKICAvLyBmb3IgaW50ZXJmYWNlIGNhbGxzLiBPbmx5IGR5bmFtaWMgY2FsbHMgKHdoaWNoIGFyZSBpbGxlZ2FsKSByZWFjaCB0aGlzCiAgLy8gaW1wbGVtZW50YXRpb24uCiAgQHBhdGNoCiAgRiBsb29rdXBGdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24sIEYgZXh0ZW5kcyBGdW5jdGlvbj4oU3RyaW5nIHN5bWJvbE5hbWUpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkR5bmFtaWMgaW52b2NhdGlvbiBvZiBsb29rdXBGdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIpOwogIH0KCiAgLy8gVE9ETyhkYWNvaGFya2VzKTogRXhwb3NlIHRoaXMgdG8gdXNlcnMsIG9yIGV4dGVuZCBQb2ludGVyPwogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zNTg4MQogIGludCBnZXRIYW5kbGUoKSBuYXRpdmUgIkZmaV9kbF9nZXRIYW5kbGUiOwoKICBAcGF0Y2gKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGdldEhhbmRsZSgpID09IG90aGVyLmdldEhhbmRsZSgpOwogIH0KCiAgQHBhdGNoCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gZ2V0SGFuZGxlKCkuaGFzaENvZGU7CiAgfQoKICBAcGF0Y2gKICBQb2ludGVyPFZvaWQ+IGdldCBoYW5kbGUgPT4gUG9pbnRlci5mcm9tQWRkcmVzcyhnZXRIYW5kbGUoKSk7Cn0KNABOTjwBSRwkKQE4AQcaFwktGAQBCT0eAU5MFQlQHEMEAUAzLQEJHCUtBAEJFSEEAQlAAgEtZGFydDpmZmktcGF0Y2gvZmZpX2R5bmFtaWNfbGlicmFyeV9wYXRjaC5kYXJ0K29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9mZmkvc3RydWN0LmRhcnSENC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuZmZpOwoKLy8vIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgdG8gZGVmaW5lIHN0cnVjdHMuCi8vLwovLy8gRmllbGRzIGluIGEgc3RydWN0LCBhbm5vdGF0ZWQgd2l0aCBhIHN1YnR5cGUgb2YgW05hdGl2ZVR5cGVdLCBhcmUKLy8vIGF1dG9tYXRpY2FsbHkgdHJhbnNmb3JtZWQgaW50byB3cmFwcGVycyB0byBhY2Nlc3MgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0Ci8vLyBpbiBuYXRpdmUgbWVtb3J5LgovLy8KLy8vIEFsbCBmaWVsZHMgaW4gYSBzdHJ1Y3QgbXVzdCBlaXRoZXIgaGF2ZSBhIHR5cGUgd2hpY2ggZXh0ZW5kcyBbTmF0aXZlVHlwZV0gb3IKLy8vIGVsc2UgaGF2ZSBhbiBhbm5vdGF0aW9uIGluZGljYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbmF0aXZlIHR5cGUgKGUuZy4KLy8vICJASW50MzIoKSIgZm9yICJpbnQiKS4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgYSBzdWJjbGFzcyBvZiBbU3RydWN0XSBoYXZlIHJlZmVyZW5jZSBzZW1hbnRpY3MgYW5kIGFyZSBiYWNrZWQKLy8vIGJ5IG5hdGl2ZSBtZW1vcnkuIFRoZSBtYXkgYWxsb2NhdGVkIHZpYSBbUG9pbnRlci5hbGxvY2F0ZV0gb3IgbG9hZGVkIGZyb20gYQovLy8gW1BvaW50ZXJdLCBidXQgbm90IGJ5IGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3Rvci4KYWJzdHJhY3QgY2xhc3MgU3RydWN0PFMgZXh0ZW5kcyBOYXRpdmVUeXBlPiBleHRlbmRzIE5hdGl2ZVR5cGUgewogIC8vLyBSZXR1cm5zIHRoZSBhZGRyZXNzIGJhY2tpbmcgdGhlIHJlZmVyZW5jZS4KICBmaW5hbCBQb2ludGVyPFM+IGFkZHJlc3NPZjsKCiAgU3RydWN0KCkgOiBhZGRyZXNzT2YgPSBudWxsOwogIFN0cnVjdC5mcm9tUG9pbnRlcih0aGlzLmFkZHJlc3NPZik7Cn0KHABOTjwBEgEuBEZPFgRRSxsEUFA0QTEeAR8mAgEUZGFydDpmZmkvc3RydWN0LmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ludGVybmFsL2ludGVybmFsLmRhcnS1ji8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQuX2ludGVybmFsOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJwogICAgc2hvdwogICAgICAgIEZ1dHVyZSwKICAgICAgICBTdHJlYW0sCiAgICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uLAogICAgICAgIFN0cmVhbVRyYW5zZm9ybWVyLAogICAgICAgIFN0cmVhbVRyYW5zZm9ybWVyQmFzZSwKICAgICAgICBab25lOwppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBDb252ZXJ0ZXI7CmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIFN5bWJvbDsKaW1wb3J0ICdkYXJ0OmNvcmUnIGFzIGNvcmU7CmltcG9ydCAnZGFydDptYXRoJyBzaG93IFJhbmRvbTsKCnBhcnQgJ2FzeW5jX2Nhc3QuZGFydCc7CnBhcnQgJ2Nhc3QuZGFydCc7CnBhcnQgJ2l0ZXJhYmxlLmRhcnQnOwpwYXJ0ICdsaXN0LmRhcnQnOwpwYXJ0ICdwcmludC5kYXJ0JzsKcGFydCAnc29ydC5kYXJ0JzsKcGFydCAnc3ltYm9sLmRhcnQnOwpwYXJ0ICdsaW5rZWRfbGlzdC5kYXJ0JzsKCi8vIFBvd2VycyBvZiAxMCB1cCB0byAxMF4yMiBhcmUgcmVwcmVzZW50YWJsZSBhcyBkb3VibGVzLgovLyBQb3dlcnMgb2YgMTAgYWJvdmUgdGhhdCBhcmUgb25seSBhcHByb3hpbWF0ZSBkdWUgdG8gbGFjayBvZiBwcmVjaXNzaW9uLgovLyBVc2VkIGJ5IGRvdWJsZS1wYXJzaW5nLgpjb25zdCBQT1dFUlNfT0ZfVEVOID0gY29uc3QgWwogIDEuMCwgLy8gMAogIDEwLjAsCiAgMTAwLjAsCiAgMTAwMC4wLAogIDEwMDAwLjAsCiAgMTAwMDAwLjAsIC8vIDUKICAxMDAwMDAwLjAsCiAgMTAwMDAwMDAuMCwKICAxMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAuMCwgLy8gMTAKICAxMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAwLjAsIC8vIDE1CiAgMTAwMDAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCwgLy8gMjAKICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCwKXTsKCi8qKgogKiBBbiBbSXRlcmFibGVdIG9mIHRoZSBVVEYtMTYgY29kZSB1bml0cyBvZiBhIFtTdHJpbmddIGluIGluZGV4IG9yZGVyLgogKi8KY2xhc3MgQ29kZVVuaXRzIGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PiB7CiAgLyoqIFRoZSBzdHJpbmcgdGhhdCB0aGlzIGlzIHRoZSBjb2RlIHVuaXRzIG9mLiAqLwogIGZpbmFsIFN0cmluZyBfc3RyaW5nOwoKICBDb2RlVW5pdHModGhpcy5fc3RyaW5nKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX3N0cmluZy5sZW5ndGg7CiAgaW50IG9wZXJhdG9yIFtdKGludCBpKSA9PiBfc3RyaW5nLmNvZGVVbml0QXQoaSk7CgogIHN0YXRpYyBTdHJpbmcgc3RyaW5nT2YoQ29kZVVuaXRzIHUpID0+IHUuX3N0cmluZzsKfQoKLy8vIE1hcmtzIGEgZnVuY3Rpb24gb3IgbGlicmFyeSBhcyBoYXZpbmcgYW4gZXh0ZXJuYWwgaW1wbGVtZW50YXRpb24gKCJuYXRpdmUiCi8vLyBpbiB0aGUgRGFydCBWTSkuCi8vLwovLy8gT24gYSBmdW5jdGlvbiwgdGhpcyBwcm92aWRlcyBhIGJhY2tlbmQtc3BlY2lmaWMgU3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8KLy8vIGlkZW50aWZ5IHRoZSBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uLgovLy8KLy8vIE9uIGEgbGlicmFyeSwgaXQgcHJvdmlkZXMgYSBVcmkgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2NhdGUgdGhlIG5hdGl2ZQovLy8gbGlicmFyeSdzIGltcGxlbWVudGF0aW9uLgpjbGFzcyBFeHRlcm5hbE5hbWUgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGNvbnN0IEV4dGVybmFsTmFtZSh0aGlzLm5hbWUpOwp9CgovLyBTaGFyZWQgaGV4LXBhcnNpbmcgdXRpbGl0aWVzLgoKLy8vIFBhcnNlcyBhIHNpbmdsZSBoZXgtZGlnaXQgYXMgY29kZSB1bml0LgovLy8KLy8vIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiB0aGUgY2hhcmFjdGVyIGlzIG5vdCBhIHZhbGlkIGhleC1kaWdpdC4KaW50IGhleERpZ2l0VmFsdWUoaW50IGNoYXIpIHsKICBhc3NlcnQoY2hhciA+PSAwICYmIGNoYXIgPD0gMHhGRkZGKTsKICBjb25zdCBpbnQgZGlnaXQwID0gMHgzMDsKICBjb25zdCBpbnQgYSA9IDB4NjE7CiAgY29uc3QgaW50IGYgPSAweDY2OwogIGludCBkaWdpdCA9IGNoYXIgXiBkaWdpdDA7CiAgaWYgKGRpZ2l0IDw9IDkpIHJldHVybiBkaWdpdDsKICBpbnQgbGV0dGVyID0gKGNoYXIgfCAweDIwKTsKICBpZiAoYSA8PSBsZXR0ZXIgJiYgbGV0dGVyIDw9IGYpIHJldHVybiBsZXR0ZXIgLSAoYSAtIDEwKTsKICByZXR1cm4gLTE7Cn0KCi8vLyBQYXJzZXMgdHdvIGhleCBkaWdpdHMgaW4gYSBzdHJpbmcuCi8vLwovLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIGVpdGhlciBkaWdpdCBpc24ndCB2YWxpZC4KaW50IHBhcnNlSGV4Qnl0ZShTdHJpbmcgc291cmNlLCBpbnQgaW5kZXgpIHsKICBhc3NlcnQoaW5kZXggKyAyIDw9IHNvdXJjZS5sZW5ndGgpOwogIGludCBkaWdpdDEgPSBoZXhEaWdpdFZhbHVlKHNvdXJjZS5jb2RlVW5pdEF0KGluZGV4KSk7CiAgaW50IGRpZ2l0MiA9IGhleERpZ2l0VmFsdWUoc291cmNlLmNvZGVVbml0QXQoaW5kZXggKyAxKSk7CiAgcmV0dXJuIGRpZ2l0MSAqIDE2ICsgZGlnaXQyIC0gKGRpZ2l0MiAmIDI1Nik7Cn0KCi8vLyBHaXZlbiBhbiBbaW5zdGFuY2VdIG9mIHNvbWUgZ2VuZXJpYyB0eXBlIFtUXSwgYW5kIFtleHRyYWN0XSwgYSBmaXJzdC1jbGFzcwovLy8gZ2VuZXJpYyBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBzYW1lIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMgYXMgW1RdLAovLy8gaW52b2tlcyB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSB0eXBlIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkIHRvIFQKLy8vIHdoZW4gW2luc3RhbmNlXSB3YXMgY29uc3RydWN0ZWQuCi8vLwovLy8gRXhhbXBsZToKLy8vCi8vLyBgYGBkYXJ0Ci8vLyBjbGFzcyBUd288QSwgQj4ge30KLy8vCi8vLyBwcmludChleHRyYWN0VHlwZUFyZ3VtZW50czxMaXN0Pig8aW50PltdLCA8VD4oKSA9PiBuZXcgU2V0PFQ+KCkpKTsKLy8vIC8vIFByaW50czogSW5zdGFuY2Ugb2YgJ1NldDxpbnQ+Jy4KLy8vCi8vLyBwcmludChleHRyYWN0VHlwZUFyZ3VtZW50czxNYXA+KDxTdHJpbmcsIGJvb2w+e30sCi8vLyAgICAgPFQsIFM+KCkgPT4gbmV3IFR3bzxULCBTPikpOwovLy8gLy8gUHJpbnRzOiBJbnN0YW5jZSBvZiAnVHdvPFN0cmluZywgYm9vbD4nLgovLy8gYGBgCi8vLwovLy8gVGhlIHR5cGUgYXJndW1lbnQgVCBpcyBpbXBvcnRhbnQgdG8gY2hvb3NlIHdoaWNoIHNwZWNpZmljIHR5cGUgcGFyYW1ldGVyCi8vLyBsaXN0IGluIFtpbnN0YW5jZV0ncyB0eXBlIGhpZXJhcmNoeSBpcyBiZWluZyBleHRyYWN0ZWQuIENvbnNpZGVyOgovLy8KLy8vIGBgYGRhcnQKLy8vIGNsYXNzIEE8VD4ge30KLy8vIGNsYXNzIEI8VD4ge30KLy8vCi8vLyBjbGFzcyBDIGltcGxlbWVudHMgQTxpbnQ+LCBCPFN0cmluZz4ge30KLy8vCi8vLyBtYWluKCkgewovLy8gICB2YXIgYyA9IG5ldyBDKCk7Ci8vLyAgIHByaW50KGV4dHJhY3RUeXBlQXJndW1lbnRzPEE+KGMsIDxUPigpID0+IDxUPltdKSk7Ci8vLyAgIC8vIFByaW50czogSW5zdGFuY2Ugb2YgJ0xpc3Q8aW50PicuCi8vLwovLy8gICBwcmludChleHRyYWN0VHlwZUFyZ3VtZW50czxCPihjLCA8VD4oKSA9PiA8VD5bXSkpOwovLy8gICAvLyBQcmludHM6IEluc3RhbmNlIG9mICdMaXN0PFN0cmluZz4nLgovLy8gfQovLy8gYGBgCi8vLwovLy8gQSBjYWxsZXIgbXVzdCBub3Q6Ci8vLwovLy8gKiAgIFBhc3MgYG51bGxgIGZvciBbaW5zdGFuY2VdLgovLy8gKiAgIFVzZSBhIG5vbi1jbGFzcyB0eXBlIChpLmUuIGEgZnVuY3Rpb24gdHlwZSkgZm9yIFtUXS4KLy8vICogICBVc2UgYSBub24tZ2VuZXJpYyB0eXBlIGZvciBbVF0uCi8vLyAqICAgUGFzcyBhbiBpbnN0YW5jZSBvZiBhIGdlbmVyaWMgdHlwZSBhbmQgYSBmdW5jdGlvbiB0aGF0IGRvbid0IGJvdGggdGFrZQovLy8gICAgIHRoZSBzYW1lIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKLy8vCi8vLyAgICAgYGBgZGFydAovLy8gICAgIGV4dHJhY3RUeXBlQXJndW1lbnRzPExpc3Q+KDxpbnQ+W10sIDxULCBTPigpID0+IG51bGwpOwovLy8gICAgIGBgYAovLy8KLy8vIFNlZSB0aGlzIGlzc3VlIGZvciBtb3JlIGNvbnRleHQ6Ci8vLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzEzNzEKZXh0ZXJuYWwgT2JqZWN0IGV4dHJhY3RUeXBlQXJndW1lbnRzPFQ+KFQgaW5zdGFuY2UsIEZ1bmN0aW9uIGV4dHJhY3QpOwoKLy8vIEFubm90YXRpb24gY2xhc3MgbWFya2luZyB0aGUgdmVyc2lvbiB3aGVyZSBTREsgQVBJIHdhcyBhZGRlZC4KLy8vCi8vLyBBIGBTaW5jZWAgYW5ub3RhdGlvbiBjYW4gYmUgYXBwbGllZCB0byBhIGxpYnJhcnkgZGVjbGFyYXRpb24sCi8vLyBhbnkgcHVibGljIGRlY2xhcmF0aW9uIGluIGEgbGlicmFyeSwgb3IgaW4gYSBjbGFzcywgb3IgdG8KLy8vIGFuIG9wdGlvbmFsIHBhcmFtZXRlci4KLy8vCi8vLyBJdCBzaWduaWZpZXMgdGhhdCB0aGUgZXhwb3J0LCBtZW1iZXIgb3IgcGFyYW1ldGVyIHdhcyAqYWRkZWQqIGluCi8vLyB0aGF0IHZlcnNpb24uCi8vLwovLy8gV2hlbiBhcHBsaWVkIHRvIGEgbGlicmFyeSBkZWNsYXJhdGlvbiwgaXQgYWxzbyBhIGFwcGxpZXMgdG8KLy8vIGFsbCBtZW1iZXJzIGRlY2xhcmVkIG9yIGV4cG9ydGVkIGJ5IHRoYXQgbGlicmFyeS4KLy8vIElmIGFwcGxpZWQgdG8gYSBjbGFzcywgaXQgYWxzbyBhcHBsaWVzIHRvIGFsbCBtZW1iZXJzIGFuZCBjb25zdHJ1Y3RvcnMKLy8vIG9mIHRoYXQgY2xhc3MuCi8vLyBJZiBhcHBsaWVkIHRvIGEgY2xhc3MgbWV0aG9kLCBvciBwYXJhbWV0ZXIgb2Ygc3VjaCwKLy8vIGFueSBtZXRob2QgaW1wbGVtZW50aW5nIHRoYXQgaW50ZXJmYWNlIG1ldGhvZCBpcyBhbHNvIGFubm90YXRlZC4KLy8vIEkgbXVsdGlwbGUgYFNpbmNlYCBhbm5vdGF0aW9ucyBhcHBseSB0byB0aGUgc2FtZSBkZWNsYXJhdGlvbiBvcgovLy8gcGFyYW1ldGVyLCB0aGUgbGF0ZXN0IHZlcnNpb24gdGFrZXMgcHJlY2VuZGVuY2UuCi8vLwovLy8gQW55IHVzZSBvZiBhIG1hcmtlZCBBUEkgbWF5IHRyaWdnZXIgYSB3YXJuaW5nIGlmIHRoZSB1c2luZyBjb2RlCi8vLyBkb2VzIG5vdCByZXF1aXJlIGFuIFNESyB2ZXJzaW9uIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBBUEkgaXMgYXZhaWxhYmxlLAovLy8gdW5sZXNzIHRoZSBBUEkgZmVhdHVyZSBpcyBhbHNvIHByb3ZpZGVkIGJ5IHNvbWV0aGluZyBlbHNlLgovLy8gSXQgaXMgb25seSBhIHByb2JsZW0gaWYgYW4gYW5ub3RhdGVkIGZlYXR1cmUgaXMgdXNlZCwgYW5kIHRoZSBhbm5vdGF0ZWQKLy8vIEFQSSBpcyB0aGUgKm9ubHkqIHRoaW5nIHByb3ZpZGluZyB0aGUgZnVuY3Rpb25hbGl0eS4KLy8vIEZvciBleGFtcGxlLCB1c2luZyBgRnV0dXJlYCBleHBvcnRlZCBieSBgZGFydDpjb3JlYCBpcyBub3QgYSBwcm9ibGVtCi8vLyBpZiB0aGUgc2FtZSBsaWJyYXJ5IGFsc28gaW1wb3J0cyBgZGFydDphc3luY2AsIGFuZCB1c2luZyBhbiBvcHRpb25hbAovLy8gcGFyYW1ldGVyIG9uIGFuIGludGVyZmFjZSBpcyBub3QgYSBwcm9ibGVtIGlmIHRoZSBzYW1lIHR5cGUgYWxzbwovLy8gaW1wbGVtZW50cyBhbm90aGVyIGludGVyZmFjZSBwcm92aWRpbmcgdGhlIHNhbWUgcGFyYW1ldGVyLgovLy8KLy8vIFRoZSB2ZXJzaW9uIG11c3QgYmUgYSBzZW1hbnRpYyB2ZXJzaW9uIChsaWtlIGAxLjQuMmAgb3IgYDAuOS40LXJlYy40YCksCi8vLyBvciB0aGUgZmlyc3QgdHdvIG51bWJlcnMgb2YgYSBzZW1hbnRpYyB2ZXJzaW9uIChsaWtlIGAxLjBgIG9yIGAyLjJgKSwKLy8vIHJlcHJlc2VudGluZyBhIHN0YWJsZSByZWxlYXNlLCBhbmQgZXF1aXZhbGVudCB0byB0aGUgc2VtYW50aWMgdmVyc2lvbgovLy8geW91IGdldCBieSBhcHBlbmRpbmcgYSBgLjBgLgpAU2luY2UoIjIuMiIpCmNsYXNzIFNpbmNlIHsKICBmaW5hbCBTdHJpbmcgdmVyc2lvbjsKICBjb25zdCBTaW5jZSh0aGlzLnZlcnNpb24pOwp9CgovKioKICogSFRUUCBzdGF0dXMgY29kZXMuICBFeHBvcnRlZCBpbiBkYXJ0OmlvIGFuZCBkYXJ0Omh0bWwuCiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwU3RhdHVzIHsKICBzdGF0aWMgY29uc3QgaW50IGNvbnRpbnVlXyA9IDEwMDsKICBzdGF0aWMgY29uc3QgaW50IHN3aXRjaGluZ1Byb3RvY29scyA9IDEwMTsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBwcm9jZXNzaW5nID0gMTAyOwogIHN0YXRpYyBjb25zdCBpbnQgb2sgPSAyMDA7CiAgc3RhdGljIGNvbnN0IGludCBjcmVhdGVkID0gMjAxOwogIHN0YXRpYyBjb25zdCBpbnQgYWNjZXB0ZWQgPSAyMDI7CiAgc3RhdGljIGNvbnN0IGludCBub25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSAyMDM7CiAgc3RhdGljIGNvbnN0IGludCBub0NvbnRlbnQgPSAyMDQ7CiAgc3RhdGljIGNvbnN0IGludCByZXNldENvbnRlbnQgPSAyMDU7CiAgc3RhdGljIGNvbnN0IGludCBwYXJ0aWFsQ29udGVudCA9IDIwNjsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBtdWx0aVN0YXR1cyA9IDIwNzsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBhbHJlYWR5UmVwb3J0ZWQgPSAyMDg7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgaW1Vc2VkID0gMjI2OwogIHN0YXRpYyBjb25zdCBpbnQgbXVsdGlwbGVDaG9pY2VzID0gMzAwOwogIHN0YXRpYyBjb25zdCBpbnQgbW92ZWRQZXJtYW5lbnRseSA9IDMwMTsKICBzdGF0aWMgY29uc3QgaW50IGZvdW5kID0gMzAyOwogIHN0YXRpYyBjb25zdCBpbnQgbW92ZWRUZW1wb3JhcmlseSA9IDMwMjsgLy8gQ29tbW9uIGFsaWFzIGZvciBmb3VuZC4KICBzdGF0aWMgY29uc3QgaW50IHNlZU90aGVyID0gMzAzOwogIHN0YXRpYyBjb25zdCBpbnQgbm90TW9kaWZpZWQgPSAzMDQ7CiAgc3RhdGljIGNvbnN0IGludCB1c2VQcm94eSA9IDMwNTsKICBzdGF0aWMgY29uc3QgaW50IHRlbXBvcmFyeVJlZGlyZWN0ID0gMzA3OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHBlcm1hbmVudFJlZGlyZWN0ID0gMzA4OwogIHN0YXRpYyBjb25zdCBpbnQgYmFkUmVxdWVzdCA9IDQwMDsKICBzdGF0aWMgY29uc3QgaW50IHVuYXV0aG9yaXplZCA9IDQwMTsKICBzdGF0aWMgY29uc3QgaW50IHBheW1lbnRSZXF1aXJlZCA9IDQwMjsKICBzdGF0aWMgY29uc3QgaW50IGZvcmJpZGRlbiA9IDQwMzsKICBzdGF0aWMgY29uc3QgaW50IG5vdEZvdW5kID0gNDA0OwogIHN0YXRpYyBjb25zdCBpbnQgbWV0aG9kTm90QWxsb3dlZCA9IDQwNTsKICBzdGF0aWMgY29uc3QgaW50IG5vdEFjY2VwdGFibGUgPSA0MDY7CiAgc3RhdGljIGNvbnN0IGludCBwcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA0MDc7CiAgc3RhdGljIGNvbnN0IGludCByZXF1ZXN0VGltZW91dCA9IDQwODsKICBzdGF0aWMgY29uc3QgaW50IGNvbmZsaWN0ID0gNDA5OwogIHN0YXRpYyBjb25zdCBpbnQgZ29uZSA9IDQxMDsKICBzdGF0aWMgY29uc3QgaW50IGxlbmd0aFJlcXVpcmVkID0gNDExOwogIHN0YXRpYyBjb25zdCBpbnQgcHJlY29uZGl0aW9uRmFpbGVkID0gNDEyOwogIHN0YXRpYyBjb25zdCBpbnQgcmVxdWVzdEVudGl0eVRvb0xhcmdlID0gNDEzOwogIHN0YXRpYyBjb25zdCBpbnQgcmVxdWVzdFVyaVRvb0xvbmcgPSA0MTQ7CiAgc3RhdGljIGNvbnN0IGludCB1bnN1cHBvcnRlZE1lZGlhVHlwZSA9IDQxNTsKICBzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MTY7CiAgc3RhdGljIGNvbnN0IGludCBleHBlY3RhdGlvbkZhaWxlZCA9IDQxNzsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBtaXNkaXJlY3RlZFJlcXVlc3QgPSA0MjE7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgdW5wcm9jZXNzYWJsZUVudGl0eSA9IDQyMjsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBsb2NrZWQgPSA0MjM7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgZmFpbGVkRGVwZW5kZW5jeSA9IDQyNDsKICBzdGF0aWMgY29uc3QgaW50IHVwZ3JhZGVSZXF1aXJlZCA9IDQyNjsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBwcmVjb25kaXRpb25SZXF1aXJlZCA9IDQyODsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCB0b29NYW55UmVxdWVzdHMgPSA0Mjk7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgcmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlID0gNDMxOwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGNvbm5lY3Rpb25DbG9zZWRXaXRob3V0UmVzcG9uc2UgPSA0NDQ7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgdW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMgPSA0NTE7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgY2xpZW50Q2xvc2VkUmVxdWVzdCA9IDQ5OTsKICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsU2VydmVyRXJyb3IgPSA1MDA7CiAgc3RhdGljIGNvbnN0IGludCBub3RJbXBsZW1lbnRlZCA9IDUwMTsKICBzdGF0aWMgY29uc3QgaW50IGJhZEdhdGV3YXkgPSA1MDI7CiAgc3RhdGljIGNvbnN0IGludCBzZXJ2aWNlVW5hdmFpbGFibGUgPSA1MDM7CiAgc3RhdGljIGNvbnN0IGludCBnYXRld2F5VGltZW91dCA9IDUwNDsKICBzdGF0aWMgY29uc3QgaW50IGh0dHBWZXJzaW9uTm90U3VwcG9ydGVkID0gNTA1OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHZhcmlhbnRBbHNvTmVnb3RpYXRlcyA9IDUwNjsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBpbnN1ZmZpY2llbnRTdG9yYWdlID0gNTA3OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGxvb3BEZXRlY3RlZCA9IDUwODsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBub3RFeHRlbmRlZCA9IDUxMDsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBuZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCA9IDUxMTsKICAvLyBDbGllbnQgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlLgogIHN0YXRpYyBjb25zdCBpbnQgbmV0d29ya0Nvbm5lY3RUaW1lb3V0RXJyb3IgPSA1OTk7CgogIEBEZXByZWNhdGVkKCJVc2UgY29udGludWVfIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQ09OVElOVUUgPSBjb250aW51ZV87CiAgQERlcHJlY2F0ZWQoIlVzZSBzd2l0Y2hpbmdQcm90b2NvbHMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTV0lUQ0hJTkdfUFJPVE9DT0xTID0gc3dpdGNoaW5nUHJvdG9jb2xzOwogIEBEZXByZWNhdGVkKCJVc2Ugb2sgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBPSyA9IG9rOwogIEBEZXByZWNhdGVkKCJVc2UgY3JlYXRlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IENSRUFURUQgPSBjcmVhdGVkOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBBQ0NFUFRFRCA9IGFjY2VwdGVkOwogIEBEZXByZWNhdGVkKCJVc2Ugbm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04gPSBub25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb247CiAgQERlcHJlY2F0ZWQoIlVzZSBub0NvbnRlbnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT19DT05URU5UID0gbm9Db250ZW50OwogIEBEZXByZWNhdGVkKCJVc2UgcmVzZXRDb250ZW50IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVRfQ09OVEVOVCA9IHJlc2V0Q29udGVudDsKICBARGVwcmVjYXRlZCgiVXNlIHBhcnRpYWxDb250ZW50IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUEFSVElBTF9DT05URU5UID0gcGFydGlhbENvbnRlbnQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBtdWx0aXBsZUNob2ljZXMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNVUxUSVBMRV9DSE9JQ0VTID0gbXVsdGlwbGVDaG9pY2VzOwogIEBEZXByZWNhdGVkKCJVc2UgbW92ZWRQZXJtYW5lbnRseSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1PVkVEX1BFUk1BTkVOVExZID0gbW92ZWRQZXJtYW5lbnRseTsKICBARGVwcmVjYXRlZCgiVXNlIGZvdW5kIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgRk9VTkQgPSBmb3VuZDsKICBARGVwcmVjYXRlZCgiVXNlIG1vdmVkVGVtcG9yYXJpbHkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNT1ZFRF9URU1QT1JBUklMWSA9IG1vdmVkVGVtcG9yYXJpbHk7CiAgQERlcHJlY2F0ZWQoIlVzZSBzZWVPdGhlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNFRV9PVEhFUiA9IHNlZU90aGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugbm90TW9kaWZpZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT1RfTU9ESUZJRUQgPSBub3RNb2RpZmllZDsKICBARGVwcmVjYXRlZCgiVXNlIHVzZVByb3h5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgVVNFX1BST1hZID0gdXNlUHJveHk7CiAgQERlcHJlY2F0ZWQoIlVzZSB0ZW1wb3JhcnlSZWRpcmVjdCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFRFTVBPUkFSWV9SRURJUkVDVCA9IHRlbXBvcmFyeVJlZGlyZWN0OwogIEBEZXByZWNhdGVkKCJVc2UgYmFkUmVxdWVzdCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEJBRF9SRVFVRVNUID0gYmFkUmVxdWVzdDsKICBARGVwcmVjYXRlZCgiVXNlIHVuYXV0aG9yaXplZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFVOQVVUSE9SSVpFRCA9IHVuYXV0aG9yaXplZDsKICBARGVwcmVjYXRlZCgiVXNlIHBheW1lbnRSZXF1aXJlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBBWU1FTlRfUkVRVUlSRUQgPSBwYXltZW50UmVxdWlyZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBmb3JiaWRkZW4gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBGT1JCSURERU4gPSBmb3JiaWRkZW47CiAgQERlcHJlY2F0ZWQoIlVzZSBub3RGb3VuZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PVF9GT1VORCA9IG5vdEZvdW5kOwogIEBEZXByZWNhdGVkKCJVc2UgbWV0aG9kTm90QWxsb3dlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1FVEhPRF9OT1RfQUxMT1dFRCA9IG1ldGhvZE5vdEFsbG93ZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBub3RBY2NlcHRhYmxlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9UX0FDQ0VQVEFCTEUgPSBub3RBY2NlcHRhYmxlOwogIEBEZXByZWNhdGVkKCJVc2UgcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgPSBwcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXF1ZXN0VGltZW91dCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfVElNRU9VVCA9IHJlcXVlc3RUaW1lb3V0OwogIEBEZXByZWNhdGVkKCJVc2UgY29uZmxpY3QgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDT05GTElDVCA9IGNvbmZsaWN0OwogIEBEZXByZWNhdGVkKCJVc2UgZ29uZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEdPTkUgPSBnb25lOwogIEBEZXByZWNhdGVkKCJVc2UgbGVuZ3RoUmVxdWlyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBMRU5HVEhfUkVRVUlSRUQgPSBsZW5ndGhSZXF1aXJlZDsKICBARGVwcmVjYXRlZCgiVXNlIHByZWNvbmRpdGlvbkZhaWxlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBSRUNPTkRJVElPTl9GQUlMRUQgPSBwcmVjb25kaXRpb25GYWlsZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXF1ZXN0RW50aXR5VG9vTGFyZ2UgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX0VOVElUWV9UT09fTEFSR0UgPSByZXF1ZXN0RW50aXR5VG9vTGFyZ2U7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXF1ZXN0VXJpVG9vTG9uZyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfVVJJX1RPT19MT05HID0gcmVxdWVzdFVyaVRvb0xvbmc7CiAgQERlcHJlY2F0ZWQoIlVzZSB1bnN1cHBvcnRlZE1lZGlhVHlwZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFVOU1VQUE9SVEVEX01FRElBX1RZUEUgPSB1bnN1cHBvcnRlZE1lZGlhVHlwZTsKICBARGVwcmVjYXRlZCgiVXNlIHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNURURfUkFOR0VfTk9UX1NBVElTRklBQkxFID0KICAgICAgcmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZTsKICBARGVwcmVjYXRlZCgiVXNlIGV4cGVjdGF0aW9uRmFpbGVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgRVhQRUNUQVRJT05fRkFJTEVEID0gZXhwZWN0YXRpb25GYWlsZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSB1cGdyYWRlUmVxdWlyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBVUEdSQURFX1JFUVVJUkVEID0gdXBncmFkZVJlcXVpcmVkOwogIEBEZXByZWNhdGVkKCJVc2UgaW50ZXJuYWxTZXJ2ZXJFcnJvciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IElOVEVSTkFMX1NFUlZFUl9FUlJPUiA9IGludGVybmFsU2VydmVyRXJyb3I7CiAgQERlcHJlY2F0ZWQoIlVzZSBub3RJbXBsZW1lbnRlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PVF9JTVBMRU1FTlRFRCA9IG5vdEltcGxlbWVudGVkOwogIEBEZXByZWNhdGVkKCJVc2UgYmFkR2F0ZXdheSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEJBRF9HQVRFV0FZID0gYmFkR2F0ZXdheTsKICBARGVwcmVjYXRlZCgiVXNlIHNlcnZpY2VVbmF2YWlsYWJsZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSBzZXJ2aWNlVW5hdmFpbGFibGU7CiAgQERlcHJlY2F0ZWQoIlVzZSBnYXRld2F5VGltZW91dCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEdBVEVXQVlfVElNRU9VVCA9IGdhdGV3YXlUaW1lb3V0OwogIEBEZXByZWNhdGVkKCJVc2UgaHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRCA9IGh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOwogIEBEZXByZWNhdGVkKCJVc2UgbmV0d29ya0Nvbm5lY3RUaW1lb3V0RXJyb3IgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBORVRXT1JLX0NPTk5FQ1RfVElNRU9VVF9FUlJPUiA9IG5ldHdvcmtDb25uZWN0VGltZW91dEVycm9yOwp9CoGAAE5OPAEYARoBFAkQEBwbHw4mIBwgARgSFhITEhQZATpLGx4MCAkKCxENDg8QFxITFBUcFxgZGiEcHQMBBEgENDQYARsBJDMBNAIBTxUETywESh4VFSECASEBLARIHicbFhYdIB48DQIBJwQ6LSY4PDACAU9LTCUEDQQMFwRHJwQ2JTAIBE1GBAwSEgQsBA0XOSoEOS0GCAQXBCQ9KE8rBBA/DAQlMkcBQgRCPhsERRIEQDZLEzhFRDUEREw/TDlJSUU/BExKSiEODhgdAgEEOgQcJC0QJR0iIzYkJykQJhAqECEqKyBGIyYjLBAsJScqJCMrKDYpIx8pLTAsLzcsEC0QLhAhECsqEC8QKhA2EDoQNRAuLiklLSkyEDAQLhAnECYQOCM1AScpMD0gHCUmJig5UCcrKjEsNS03LjkjIi45JikpLyYpLzsoLSowLTcnKiYpLjorMzlQLDUmKCIgLDUwPTNFLz0yQjo1JC87LTcxQCw1KC0wPSw1NUk4TwIBDmRhcnQ6X2ludGVybmFsMm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9pdGVyYWJsZS5kYXJ0wABecy8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2ludGVybmFsOwoKLyoqCiAqIE1hcmtlciBpbnRlcmZhY2UgZm9yIFtJdGVyYWJsZV0gc3ViY2xhc3NlcyB0aGF0IGhhdmUgYW4gZWZmaWNpZW50CiAqIFtsZW5ndGhdIGltcGxlbWVudGF0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8VD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgY29uc3QgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUoKTsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGl0ZXJhYmxlLgogICAqCiAgICogVGhpcyBpcyBhbiBlZmZpY2llbnQgb3BlcmF0aW9uIHRoYXQgZG9lc24ndCByZXF1aXJlIGl0ZXJhdGluZyB0aHJvdWdoCiAgICogdGhlIGVsZW1lbnRzLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwp9CgovKioKICogQW4gW0l0ZXJhYmxlXSBmb3IgY2xhc3NlcyB0aGF0IGhhdmUgZWZmaWNpZW50IFtsZW5ndGhdIGFuZCBbZWxlbWVudEF0XS4KICoKICogQWxsIG90aGVyIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIFtsZW5ndGhdIGFuZCBbZWxlbWVudEF0XSwKICogaW5jbHVkaW5nIFtpdGVyYXRvcl0uCiAqLwphYnN0cmFjdCBjbGFzcyBMaXN0SXRlcmFibGU8RT4gZXh0ZW5kcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgaW50IGdldCBsZW5ndGg7CiAgRSBlbGVtZW50QXQoaW50IGkpOwoKICBjb25zdCBMaXN0SXRlcmFibGUoKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBMaXN0SXRlcmF0b3I8RT4odGhpcyk7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGFjdGlvbihlbGVtZW50QXQoaSkpOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHJldHVybiBlbGVtZW50QXQoMCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICByZXR1cm4gZWxlbWVudEF0KGxlbmd0aCAtIDEpOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBpZiAobGVuZ3RoID4gMSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgcmV0dXJuIGVsZW1lbnRBdCgwKTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsZW1lbnRBdChpKSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCF0ZXN0KGVsZW1lbnRBdChpKSkpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudEF0KGkpKSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBFIGVsZW1lbnQgPSBlbGVtZW50QXQoaSk7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgRSBlbGVtZW50ID0gZWxlbWVudEF0KGkpOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBFIG1hdGNoID0gbnVsbDsKICAgIGJvb2wgbWF0Y2hGb3VuZCA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBFIGVsZW1lbnQgPSBlbGVtZW50QXQoaSk7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKG1hdGNoRm91bmQpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7CiAgICAgICAgbWF0Y2ggPSBlbGVtZW50OwogICAgICB9CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hGb3VuZCkgcmV0dXJuIG1hdGNoOwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAoIXNlcGFyYXRvci5pc0VtcHR5KSB7CiAgICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuICIiOwogICAgICBTdHJpbmcgZmlyc3QgPSAiJHtlbGVtZW50QXQoMCl9IjsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoZmlyc3QpOwogICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgYnVmZmVyLndyaXRlKGVsZW1lbnRBdChpKSk7CiAgICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGJ1ZmZlci53cml0ZShlbGVtZW50QXQoaSkpOwogICAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICAgIH0KICB9CgogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBzdXBlci53aGVyZSh0ZXN0KTsKCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGVsZW1lbnQpKSA9PiBuZXcgTWFwcGVkTGlzdEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIEUgdmFsdWUgPSBlbGVtZW50QXQoMCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudEF0KGkpKTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnRBdChpKSk7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPih0aGlzLCBjb3VudCwgbnVsbCk7CgogIEl0ZXJhYmxlPEU+IHNraXBXaGlsZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gc3VwZXIuc2tpcFdoaWxlKHRlc3QpOwoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPih0aGlzLCAwLCBjb3VudCk7CgogIEl0ZXJhYmxlPEU+IHRha2VXaGlsZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gc3VwZXIudGFrZVdoaWxlKHRlc3QpOwoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIExpc3Q8RT4gcmVzdWx0OwogICAgaWYgKGdyb3dhYmxlKSB7CiAgICAgIHJlc3VsdCA9IDxFPltdLi5sZW5ndGggPSBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBuZXcgTGlzdDxFPihsZW5ndGgpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbaV0gPSBlbGVtZW50QXQoaSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IHRvU2V0KCkgewogICAgU2V0PEU+IHJlc3VsdCA9IG5ldyBTZXQ8RT4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0LmFkZChlbGVtZW50QXQoaSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmNsYXNzIFN1Ykxpc3RJdGVyYWJsZTxFPiBleHRlbmRzIExpc3RJdGVyYWJsZTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX2l0ZXJhYmxlOyAvLyBIYXMgZWZmaWNpZW50IGxlbmd0aCBhbmQgZWxlbWVudEF0LgogIGZpbmFsIGludCBfc3RhcnQ7CiAgLyoqIElmIG51bGwsIHJlcHJlc2VudHMgdGhlIGxlbmd0aCBvZiB0aGUgaXRlcmFibGUuICovCiAgZmluYWwgaW50IF9lbmRPckxlbmd0aDsKCiAgU3ViTGlzdEl0ZXJhYmxlKHRoaXMuX2l0ZXJhYmxlLCB0aGlzLl9zdGFydCwgdGhpcy5fZW5kT3JMZW5ndGgpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShfc3RhcnQsICJzdGFydCIpOwogICAgaWYgKF9lbmRPckxlbmd0aCAhPSBudWxsKSB7CiAgICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShfZW5kT3JMZW5ndGgsICJlbmQiKTsKICAgICAgaWYgKF9zdGFydCA+IF9lbmRPckxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKF9zdGFydCwgMCwgX2VuZE9yTGVuZ3RoLCAic3RhcnQiKTsKICAgICAgfQogICAgfQogIH0KCiAgaW50IGdldCBfZW5kSW5kZXggewogICAgaW50IGxlbmd0aCA9IF9pdGVyYWJsZS5sZW5ndGg7CiAgICBpZiAoX2VuZE9yTGVuZ3RoID09IG51bGwgfHwgX2VuZE9yTGVuZ3RoID4gbGVuZ3RoKSByZXR1cm4gbGVuZ3RoOwogICAgcmV0dXJuIF9lbmRPckxlbmd0aDsKICB9CgogIGludCBnZXQgX3N0YXJ0SW5kZXggewogICAgaW50IGxlbmd0aCA9IF9pdGVyYWJsZS5sZW5ndGg7CiAgICBpZiAoX3N0YXJ0ID4gbGVuZ3RoKSByZXR1cm4gbGVuZ3RoOwogICAgcmV0dXJuIF9zdGFydDsKICB9CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9zdGFydCA+PSBsZW5ndGgpIHJldHVybiAwOwogICAgaWYgKF9lbmRPckxlbmd0aCA9PSBudWxsIHx8IF9lbmRPckxlbmd0aCA+PSBsZW5ndGgpIHsKICAgICAgcmV0dXJuIGxlbmd0aCAtIF9zdGFydDsKICAgIH0KICAgIHJldHVybiBfZW5kT3JMZW5ndGggLSBfc3RhcnQ7CiAgfQoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIGludCByZWFsSW5kZXggPSBfc3RhcnRJbmRleCArIGluZGV4OwogICAgaWYgKGluZGV4IDwgMCB8fCByZWFsSW5kZXggPj0gX2VuZEluZGV4KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfaXRlcmFibGUuZWxlbWVudEF0KHJlYWxJbmRleCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgewogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICAgIGludCBuZXdTdGFydCA9IF9zdGFydCArIGNvdW50OwogICAgaWYgKF9lbmRPckxlbmd0aCAhPSBudWxsICYmIG5ld1N0YXJ0ID49IF9lbmRPckxlbmd0aCkgewogICAgICByZXR1cm4gbmV3IEVtcHR5SXRlcmFibGU8RT4oKTsKICAgIH0KICAgIHJldHVybiBuZXcgU3ViTGlzdEl0ZXJhYmxlPEU+KF9pdGVyYWJsZSwgbmV3U3RhcnQsIF9lbmRPckxlbmd0aCk7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgewogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICAgIGlmIChfZW5kT3JMZW5ndGggPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPihfaXRlcmFibGUsIF9zdGFydCwgX3N0YXJ0ICsgY291bnQpOwogICAgfSBlbHNlIHsKICAgICAgaW50IG5ld0VuZCA9IF9zdGFydCArIGNvdW50OwogICAgICBpZiAoX2VuZE9yTGVuZ3RoIDwgbmV3RW5kKSByZXR1cm4gdGhpczsKICAgICAgcmV0dXJuIG5ldyBTdWJMaXN0SXRlcmFibGU8RT4oX2l0ZXJhYmxlLCBfc3RhcnQsIG5ld0VuZCk7CiAgICB9CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIGludCBzdGFydCA9IF9zdGFydDsKICAgIGludCBlbmQgPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9lbmRPckxlbmd0aCAhPSBudWxsICYmIF9lbmRPckxlbmd0aCA8IGVuZCkgZW5kID0gX2VuZE9yTGVuZ3RoOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA8IDApIGxlbmd0aCA9IDA7CiAgICBMaXN0PEU+IHJlc3VsdCA9CiAgICAgICAgZ3Jvd2FibGUgPyAobmV3IExpc3Q8RT4oKS4ubGVuZ3RoID0gbGVuZ3RoKSA6IG5ldyBMaXN0PEU+KGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdFtpXSA9IF9pdGVyYWJsZS5lbGVtZW50QXQoc3RhcnQgKyBpKTsKICAgICAgaWYgKF9pdGVyYWJsZS5sZW5ndGggPCBlbmQpIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLyoqCiAqIEFuIFtJdGVyYXRvcl0gdGhhdCBpdGVyYXRlcyBhIGxpc3QtbGlrZSBbSXRlcmFibGVdLgogKgogKiBBbGwgaXRlcmF0aW9ucyBpcyBkb25lIGluIHRlcm1zIG9mIFtJdGVyYWJsZS5sZW5ndGhdIGFuZAogKiBbSXRlcmFibGUuZWxlbWVudEF0XS4gVGhlc2Ugb3BlcmF0aW9ucyBhcmUgZmFzdCBmb3IgbGlzdC1saWtlCiAqIGl0ZXJhYmxlcy4KICovCmNsYXNzIExpc3RJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgaW50IF9sZW5ndGg7CiAgaW50IF9pbmRleDsKICBFIF9jdXJyZW50OwoKICBMaXN0SXRlcmF0b3IoSXRlcmFibGU8RT4gaXRlcmFibGUpCiAgICAgIDogX2l0ZXJhYmxlID0gaXRlcmFibGUsCiAgICAgICAgX2xlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aCwKICAgICAgICBfaW5kZXggPSAwOwoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBib29sIG1vdmVOZXh0KCkgewogICAgaW50IGxlbmd0aCA9IF9pdGVyYWJsZS5sZW5ndGg7CiAgICBpZiAoX2xlbmd0aCAhPSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihfaXRlcmFibGUpOwogICAgfQogICAgaWYgKF9pbmRleCA+PSBsZW5ndGgpIHsKICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBfY3VycmVudCA9IF9pdGVyYWJsZS5lbGVtZW50QXQoX2luZGV4KTsKICAgIF9pbmRleCsrOwogICAgcmV0dXJuIHRydWU7CiAgfQp9Cgp0eXBlZGVmIFQgX1RyYW5zZm9ybWF0aW9uPFMsIFQ+KFMgdmFsdWUpOwoKY2xhc3MgTWFwcGVkSXRlcmFibGU8UywgVD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgZmluYWwgSXRlcmFibGU8Uz4gX2l0ZXJhYmxlOwogIGZpbmFsIF9UcmFuc2Zvcm1hdGlvbjxTLCBUPiBfZjsKCiAgZmFjdG9yeSBNYXBwZWRJdGVyYWJsZShJdGVyYWJsZTxTPiBpdGVyYWJsZSwgVCBmdW5jdGlvbihTIHZhbHVlKSkgewogICAgaWYgKGl0ZXJhYmxlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoTWFwcGVkSXRlcmFibGU8UywgVD4oaXRlcmFibGUsIGZ1bmN0aW9uKTsKICAgIH0KICAgIHJldHVybiBuZXcgTWFwcGVkSXRlcmFibGU8UywgVD4uXyhpdGVyYWJsZSwgZnVuY3Rpb24pOwogIH0KCiAgTWFwcGVkSXRlcmFibGUuXyh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fZik7CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciA9PiBuZXcgTWFwcGVkSXRlcmF0b3I8UywgVD4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7CgogIC8vIExlbmd0aCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIG1hcHBpbmcuCiAgaW50IGdldCBsZW5ndGggPT4gX2l0ZXJhYmxlLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9pdGVyYWJsZS5pc0VtcHR5OwoKICAvLyBJbmRleCBiYXNlZCBsb29rdXAgY2FuIGJlIGRvbmUgYmVmb3JlIHRyYW5zZm9ybWluZy4KICBUIGdldCBmaXJzdCA9PiBfZihfaXRlcmFibGUuZmlyc3QpOwogIFQgZ2V0IGxhc3QgPT4gX2YoX2l0ZXJhYmxlLmxhc3QpOwogIFQgZ2V0IHNpbmdsZSA9PiBfZihfaXRlcmFibGUuc2luZ2xlKTsKICBUIGVsZW1lbnRBdChpbnQgaW5kZXgpID0+IF9mKF9pdGVyYWJsZS5lbGVtZW50QXQoaW5kZXgpKTsKfQoKY2xhc3MgRWZmaWNpZW50TGVuZ3RoTWFwcGVkSXRlcmFibGU8UywgVD4gZXh0ZW5kcyBNYXBwZWRJdGVyYWJsZTxTLCBUPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxUPiB7CiAgRWZmaWNpZW50TGVuZ3RoTWFwcGVkSXRlcmFibGUoSXRlcmFibGU8Uz4gaXRlcmFibGUsIFQgZnVuY3Rpb24oUyB2YWx1ZSkpCiAgICAgIDogc3VwZXIuXyhpdGVyYWJsZSwgZnVuY3Rpb24pOwp9CgpjbGFzcyBNYXBwZWRJdGVyYXRvcjxTLCBUPiBleHRlbmRzIEl0ZXJhdG9yPFQ+IHsKICBUIF9jdXJyZW50OwogIGZpbmFsIEl0ZXJhdG9yPFM+IF9pdGVyYXRvcjsKICBmaW5hbCBfVHJhbnNmb3JtYXRpb248UywgVD4gX2Y7CgogIE1hcHBlZEl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBfY3VycmVudCA9IF9mKF9pdGVyYXRvci5jdXJyZW50KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfY3VycmVudCA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBUIGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CgovKioKICogU3BlY2lhbGl6ZWQgYWx0ZXJuYXRpdmUgdG8gW01hcHBlZEl0ZXJhYmxlXSBmb3IgbWFwcGVkIFtMaXN0XXMuCiAqCiAqIEV4cGVjdHMgZWZmaWNpZW50IGBsZW5ndGhgIGFuZCBgZWxlbWVudEF0YCBvbiB0aGUgc291cmNlIGl0ZXJhYmxlLgogKi8KY2xhc3MgTWFwcGVkTGlzdEl0ZXJhYmxlPFMsIFQ+IGV4dGVuZHMgTGlzdEl0ZXJhYmxlPFQ+IHsKICBmaW5hbCBJdGVyYWJsZTxTPiBfc291cmNlOwogIGZpbmFsIF9UcmFuc2Zvcm1hdGlvbjxTLCBUPiBfZjsKCiAgTWFwcGVkTGlzdEl0ZXJhYmxlKHRoaXMuX3NvdXJjZSwgdGhpcy5fZik7CgogIGludCBnZXQgbGVuZ3RoID0+IF9zb3VyY2UubGVuZ3RoOwogIFQgZWxlbWVudEF0KGludCBpbmRleCkgPT4gX2YoX3NvdXJjZS5lbGVtZW50QXQoaW5kZXgpKTsKfQoKdHlwZWRlZiBib29sIF9FbGVtZW50UHJlZGljYXRlPEU+KEUgZWxlbWVudCk7CgpjbGFzcyBXaGVyZUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKCiAgV2hlcmVJdGVyYWJsZSh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fZik7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBuZXcgV2hlcmVJdGVyYXRvcjxFPihfaXRlcmFibGUuaXRlcmF0b3IsIF9mKTsKCiAgLy8gU3BlY2lhbGl6YXRpb24gb2YgW0l0ZXJhYmxlLm1hcF0gdG8gbm9uLUVmZmljaWVudExlbmd0aEl0ZXJhYmxlLgogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoRSBlbGVtZW50KSkgPT4gbmV3IE1hcHBlZEl0ZXJhYmxlPEUsIFQ+Ll8odGhpcywgZik7Cn0KCmNsYXNzIFdoZXJlSXRlcmF0b3I8RT4gZXh0ZW5kcyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgSXRlcmF0b3I8RT4gX2l0ZXJhdG9yOwogIGZpbmFsIF9FbGVtZW50UHJlZGljYXRlPEU+IF9mOwoKICBXaGVyZUl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIHdoaWxlIChfaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBpZiAoX2YoX2l0ZXJhdG9yLmN1cnJlbnQpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2l0ZXJhdG9yLmN1cnJlbnQ7Cn0KCnR5cGVkZWYgSXRlcmFibGU8VD4gX0V4cGFuZEZ1bmN0aW9uPFMsIFQ+KFMgc291cmNlRWxlbWVudCk7CgpjbGFzcyBFeHBhbmRJdGVyYWJsZTxTLCBUPiBleHRlbmRzIEl0ZXJhYmxlPFQ+IHsKICBmaW5hbCBJdGVyYWJsZTxTPiBfaXRlcmFibGU7CiAgZmluYWwgX0V4cGFuZEZ1bmN0aW9uPFMsIFQ+IF9mOwoKICBFeHBhbmRJdGVyYWJsZSh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fZik7CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciA9PiBuZXcgRXhwYW5kSXRlcmF0b3I8UywgVD4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7Cn0KCmNsYXNzIEV4cGFuZEl0ZXJhdG9yPFMsIFQ+IGltcGxlbWVudHMgSXRlcmF0b3I8VD4gewogIGZpbmFsIEl0ZXJhdG9yPFM+IF9pdGVyYXRvcjsKICBmaW5hbCBfRXhwYW5kRnVuY3Rpb248UywgVD4gX2Y7CiAgLy8gSW5pdGlhbGl6ZSBfY3VycmVudEV4cGFuc2lvbiB0byBhbiBlbXB0eSBpdGVyYWJsZS4gQSBudWxsIHZhbHVlCiAgLy8gbWFya3MgdGhlIGVuZCBvZiBpdGVyYXRpb24sIGFuZCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgX2YgYmVmb3JlCiAgLy8gdGhlIGZpcnN0IG1vdmVOZXh0IGNhbGwuCiAgSXRlcmF0b3I8VD4gX2N1cnJlbnRFeHBhbnNpb24gPSBjb25zdCBFbXB0eUl0ZXJhdG9yKCk7CiAgVCBfY3VycmVudDsKCiAgRXhwYW5kSXRlcmF0b3IodGhpcy5faXRlcmF0b3IsIHRoaXMuX2YpOwoKICBUIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9jdXJyZW50RXhwYW5zaW9uID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHdoaWxlICghX2N1cnJlbnRFeHBhbnNpb24ubW92ZU5leHQoKSkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIGlmIChfaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIC8vIElmIF9mIHRocm93cywgdGhpcyBlbmRzIGl0ZXJhdGlvbi4gT3RoZXJ3aXNlIF9jdXJyZW50RXhwYW5zaW9uIGFuZAogICAgICAgIC8vIF9jdXJyZW50IHdpbGwgYmUgc2V0IGFnYWluIGJlbG93LgogICAgICAgIF9jdXJyZW50RXhwYW5zaW9uID0gbnVsbDsKICAgICAgICBfY3VycmVudEV4cGFuc2lvbiA9IF9mKF9pdGVyYXRvci5jdXJyZW50KS5pdGVyYXRvcjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIF9jdXJyZW50ID0gX2N1cnJlbnRFeHBhbnNpb24uY3VycmVudDsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKY2xhc3MgVGFrZUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBpbnQgX3Rha2VDb3VudDsKCiAgZmFjdG9yeSBUYWtlSXRlcmFibGUoSXRlcmFibGU8RT4gaXRlcmFibGUsIGludCB0YWtlQ291bnQpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHRha2VDb3VudCwgInRha2VDb3VudCIpOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKHRha2VDb3VudCwgInRha2VDb3VudCIpOwogICAgaWYgKGl0ZXJhYmxlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoVGFrZUl0ZXJhYmxlPEU+KGl0ZXJhYmxlLCB0YWtlQ291bnQpOwogICAgfQogICAgcmV0dXJuIG5ldyBUYWtlSXRlcmFibGU8RT4uXyhpdGVyYWJsZSwgdGFrZUNvdW50KTsKICB9CgogIFRha2VJdGVyYWJsZS5fKHRoaXMuX2l0ZXJhYmxlLCB0aGlzLl90YWtlQ291bnQpOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBUYWtlSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfdGFrZUNvdW50KTsKICB9Cn0KCmNsYXNzIEVmZmljaWVudExlbmd0aFRha2VJdGVyYWJsZTxFPiBleHRlbmRzIFRha2VJdGVyYWJsZTxFPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgRWZmaWNpZW50TGVuZ3RoVGFrZUl0ZXJhYmxlKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBpbnQgdGFrZUNvdW50KQogICAgICA6IHN1cGVyLl8oaXRlcmFibGUsIHRha2VDb3VudCk7CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIGludCBpdGVyYWJsZUxlbmd0aCA9IF9pdGVyYWJsZS5sZW5ndGg7CiAgICBpZiAoaXRlcmFibGVMZW5ndGggPiBfdGFrZUNvdW50KSByZXR1cm4gX3Rha2VDb3VudDsKICAgIHJldHVybiBpdGVyYWJsZUxlbmd0aDsKICB9Cn0KCmNsYXNzIFRha2VJdGVyYXRvcjxFPiBleHRlbmRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYXRvcjxFPiBfaXRlcmF0b3I7CiAgaW50IF9yZW1haW5pbmc7CgogIFRha2VJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fcmVtYWluaW5nKSB7CiAgICBhc3NlcnQoX3JlbWFpbmluZyA+PSAwKTsKICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBfcmVtYWluaW5nLS07CiAgICBpZiAoX3JlbWFpbmluZyA+PSAwKSB7CiAgICAgIHJldHVybiBfaXRlcmF0b3IubW92ZU5leHQoKTsKICAgIH0KICAgIF9yZW1haW5pbmcgPSAtMTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgewogICAgaWYgKF9yZW1haW5pbmcgPCAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfaXRlcmF0b3IuY3VycmVudDsKICB9Cn0KCmNsYXNzIFRha2VXaGlsZUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKCiAgVGFrZVdoaWxlSXRlcmFibGUodGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBUYWtlV2hpbGVJdGVyYXRvcjxFPihfaXRlcmFibGUuaXRlcmF0b3IsIF9mKTsKICB9Cn0KCmNsYXNzIFRha2VXaGlsZUl0ZXJhdG9yPEU+IGV4dGVuZHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIEl0ZXJhdG9yPEU+IF9pdGVyYXRvcjsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKICBib29sIF9pc0ZpbmlzaGVkID0gZmFsc2U7CgogIFRha2VXaGlsZUl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfaXNGaW5pc2hlZCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKCFfaXRlcmF0b3IubW92ZU5leHQoKSB8fCAhX2YoX2l0ZXJhdG9yLmN1cnJlbnQpKSB7CiAgICAgIF9pc0ZpbmlzaGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBFIGdldCBjdXJyZW50IHsKICAgIGlmIChfaXNGaW5pc2hlZCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2l0ZXJhdG9yLmN1cnJlbnQ7CiAgfQp9CgpjbGFzcyBTa2lwSXRlcmFibGU8RT4gZXh0ZW5kcyBJdGVyYWJsZTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX2l0ZXJhYmxlOwogIGZpbmFsIGludCBfc2tpcENvdW50OwoKICBmYWN0b3J5IFNraXBJdGVyYWJsZShJdGVyYWJsZTxFPiBpdGVyYWJsZSwgaW50IGNvdW50KSB7CiAgICBpZiAoaXRlcmFibGUgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUpIHsKICAgICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhTa2lwSXRlcmFibGU8RT4oaXRlcmFibGUsIGNvdW50KTsKICAgIH0KICAgIHJldHVybiBuZXcgU2tpcEl0ZXJhYmxlPEU+Ll8oaXRlcmFibGUsIF9jaGVja0NvdW50KGNvdW50KSk7CiAgfQoKICBTa2lwSXRlcmFibGUuXyh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fc2tpcENvdW50KTsKCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgU2tpcEl0ZXJhYmxlPEU+Ll8oX2l0ZXJhYmxlLCBfc2tpcENvdW50ICsgX2NoZWNrQ291bnQoY291bnQpKTsKICB9CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IFNraXBJdGVyYXRvcjxFPihfaXRlcmFibGUuaXRlcmF0b3IsIF9za2lwQ291bnQpOwogIH0KfQoKY2xhc3MgRWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlPEU+IGV4dGVuZHMgU2tpcEl0ZXJhYmxlPEU+CiAgICBpbXBsZW1lbnRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmYWN0b3J5IEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZShJdGVyYWJsZTxFPiBpdGVyYWJsZSwgaW50IGNvdW50KSB7CiAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZTxFPi5fKGl0ZXJhYmxlLCBfY2hlY2tDb3VudChjb3VudCkpOwogIH0KCiAgRWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlLl8oSXRlcmFibGU8RT4gaXRlcmFibGUsIGludCBjb3VudCkKICAgICAgOiBzdXBlci5fKGl0ZXJhYmxlLCBjb3VudCk7CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoIC0gX3NraXBDb3VudDsKICAgIGlmIChsZW5ndGggPj0gMCkgcmV0dXJuIGxlbmd0aDsKICAgIHJldHVybiAwOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlPEU+Ll8oCiAgICAgICAgX2l0ZXJhYmxlLCBfc2tpcENvdW50ICsgX2NoZWNrQ291bnQoY291bnQpKTsKICB9Cn0KCmludCBfY2hlY2tDb3VudChpbnQgY291bnQpIHsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChjb3VudCwgImNvdW50Iik7CiAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICByZXR1cm4gY291bnQ7Cn0KCmNsYXNzIFNraXBJdGVyYXRvcjxFPiBleHRlbmRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYXRvcjxFPiBfaXRlcmF0b3I7CiAgaW50IF9za2lwQ291bnQ7CgogIFNraXBJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fc2tpcENvdW50KSB7CiAgICBhc3NlcnQoX3NraXBDb3VudCA+PSAwKTsKICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9za2lwQ291bnQ7IGkrKykgX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICBfc2tpcENvdW50ID0gMDsKICAgIHJldHVybiBfaXRlcmF0b3IubW92ZU5leHQoKTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2l0ZXJhdG9yLmN1cnJlbnQ7Cn0KCmNsYXNzIFNraXBXaGlsZUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKCiAgU2tpcFdoaWxlSXRlcmFibGUodGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBTa2lwV2hpbGVJdGVyYXRvcjxFPihfaXRlcmFibGUuaXRlcmF0b3IsIF9mKTsKICB9Cn0KCmNsYXNzIFNraXBXaGlsZUl0ZXJhdG9yPEU+IGV4dGVuZHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIEl0ZXJhdG9yPEU+IF9pdGVyYXRvcjsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKICBib29sIF9oYXNTa2lwcGVkID0gZmFsc2U7CgogIFNraXBXaGlsZUl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmICghX2hhc1NraXBwZWQpIHsKICAgICAgX2hhc1NraXBwZWQgPSB0cnVlOwogICAgICB3aGlsZSAoX2l0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICBpZiAoIV9mKF9pdGVyYXRvci5jdXJyZW50KSkgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfaXRlcmF0b3IubW92ZU5leHQoKTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2l0ZXJhdG9yLmN1cnJlbnQ7Cn0KCi8qKgogKiBUaGUgYWx3YXlzIGVtcHR5IFtJdGVyYWJsZV0uCiAqLwpjbGFzcyBFbXB0eUl0ZXJhYmxlPEU+IGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIGNvbnN0IEVtcHR5SXRlcmFibGUoKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IGNvbnN0IEVtcHR5SXRlcmF0b3IoKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHt9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gdHJ1ZTsKCiAgaW50IGdldCBsZW5ndGggPT4gMDsKCiAgRSBnZXQgZmlyc3QgewogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShpbmRleCwgMCwgMCwgImluZGV4Iik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSA9PiBmYWxzZTsKCiAgYm9vbCBldmVyeShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gdHJ1ZTsKCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGZhbHNlOwoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgPT4gIiI7CgogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiB0aGlzOwoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IG5ldyBFbXB0eUl0ZXJhYmxlPFQ+KCk7CgogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgcmV0dXJuIGluaXRpYWxWYWx1ZTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoY291bnQsICJjb3VudCIpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHRoaXM7CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IGNvdW50KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoY291bnQsICJjb3VudCIpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHRoaXM7CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgPT4gZ3Jvd2FibGUgPyA8RT5bXSA6IG5ldyBMaXN0PEU+KDApOwoKICBTZXQ8RT4gdG9TZXQoKSA9PiBuZXcgU2V0PEU+KCk7Cn0KCi8qKiBUaGUgYWx3YXlzIGVtcHR5IGl0ZXJhdG9yLiAqLwpjbGFzcyBFbXB0eUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGNvbnN0IEVtcHR5SXRlcmF0b3IoKTsKICBib29sIG1vdmVOZXh0KCkgPT4gZmFsc2U7CiAgRSBnZXQgY3VycmVudCA9PiBudWxsOwp9CgpjbGFzcyBGb2xsb3dlZEJ5SXRlcmFibGU8RT4gZXh0ZW5kcyBJdGVyYWJsZTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX2ZpcnN0OwogIGZpbmFsIEl0ZXJhYmxlPEU+IF9zZWNvbmQ7CiAgRm9sbG93ZWRCeUl0ZXJhYmxlKHRoaXMuX2ZpcnN0LCB0aGlzLl9zZWNvbmQpOwoKICBmYWN0b3J5IEZvbGxvd2VkQnlJdGVyYWJsZS5maXJzdEVmZmljaWVudCgKICAgICAgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gZmlyc3QsIEl0ZXJhYmxlPEU+IHNlY29uZCkgewogICAgaWYgKHNlY29uZCBpcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPikgewogICAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aEZvbGxvd2VkQnlJdGVyYWJsZTxFPihmaXJzdCwgc2Vjb25kKTsKICAgIH0KICAgIHJldHVybiBuZXcgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+KGZpcnN0LCBzZWNvbmQpOwogIH0KCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBGb2xsb3dlZEJ5SXRlcmF0b3IoX2ZpcnN0LCBfc2Vjb25kKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2ZpcnN0Lmxlbmd0aCArIF9zZWNvbmQubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2ZpcnN0LmlzRW1wdHkgJiYgX3NlY29uZC5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2ZpcnN0LmlzTm90RW1wdHkgfHwgX3NlY29uZC5pc05vdEVtcHR5OwoKICAvLyBNYXkgYmUgbW9yZSBlZmZpY2llbnQgaWYgZWl0aGVyIGl0ZXJhYmxlIGlzIGEgU2V0LgogIGJvb2wgY29udGFpbnMoT2JqZWN0IHZhbHVlKSA9PgogICAgICBfZmlyc3QuY29udGFpbnModmFsdWUpIHx8IF9zZWNvbmQuY29udGFpbnModmFsdWUpOwoKICBFIGdldCBmaXJzdCB7CiAgICB2YXIgaXRlcmF0b3IgPSBfZmlyc3QuaXRlcmF0b3I7CiAgICBpZiAoaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICByZXR1cm4gX3NlY29uZC5maXJzdDsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgdmFyIGl0ZXJhdG9yID0gX3NlY29uZC5pdGVyYXRvcjsKICAgIGlmIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIEUgbGFzdCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSBsYXN0ID0gaXRlcmF0b3IuY3VycmVudDsKICAgICAgcmV0dXJuIGxhc3Q7CiAgICB9CiAgICByZXR1cm4gX2ZpcnN0Lmxhc3Q7CiAgfQoKICAvLyBJZiBsaW5lYXIgc2VxdWVuY2VzIG9mIGBmb2xsb3dlZEJ5YCBiZWNvbWVzIGFuIGlzc3VlLCB3ZSBjYW4gZmxhdHRlbgogIC8vIGludG8gYSBsaXN0IG9mIGl0ZXJhYmxlcyBpbnN0ZWFkIG9mIGEgdHJlZSBvciBzcGluZS4KfQoKY2xhc3MgRWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlPEU+IGV4dGVuZHMgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+CiAgICBpbXBsZW1lbnRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBFZmZpY2llbnRMZW5ndGhGb2xsb3dlZEJ5SXRlcmFibGUoCiAgICAgIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IGZpcnN0LCBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiBzZWNvbmQpCiAgICAgIDogc3VwZXIoZmlyc3QsIHNlY29uZCk7CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICBpbnQgZmlyc3RMZW5ndGggPSBfZmlyc3QubGVuZ3RoOwogICAgaWYgKGNvdW50ID49IGZpcnN0TGVuZ3RoKSByZXR1cm4gX3NlY29uZC5za2lwKGNvdW50IC0gZmlyc3RMZW5ndGgpOwogICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhGb2xsb3dlZEJ5SXRlcmFibGU8RT4oCiAgICAgICAgX2ZpcnN0LnNraXAoY291bnQpLCBfc2Vjb25kKTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IGNvdW50KSB7CiAgICBpbnQgZmlyc3RMZW5ndGggPSBfZmlyc3QubGVuZ3RoOwogICAgaWYgKGNvdW50IDw9IGZpcnN0TGVuZ3RoKSByZXR1cm4gX2ZpcnN0LnRha2UoY291bnQpOwogICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhGb2xsb3dlZEJ5SXRlcmFibGU8RT4oCiAgICAgICAgX2ZpcnN0LCBfc2Vjb25kLnRha2UoY291bnQgLSBmaXJzdExlbmd0aCkpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBpbnQgZmlyc3RMZW5ndGggPSBfZmlyc3QubGVuZ3RoOwogICAgaWYgKGluZGV4IDwgZmlyc3RMZW5ndGgpIHJldHVybiBfZmlyc3QuZWxlbWVudEF0KGluZGV4KTsKICAgIHJldHVybiBfc2Vjb25kLmVsZW1lbnRBdChpbmRleCAtIGZpcnN0TGVuZ3RoKTsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIGlmIChfZmlyc3QuaXNOb3RFbXB0eSkgcmV0dXJuIF9maXJzdC5maXJzdDsKICAgIHJldHVybiBfc2Vjb25kLmZpcnN0OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAoX3NlY29uZC5pc05vdEVtcHR5KSByZXR1cm4gX3NlY29uZC5sYXN0OwogICAgcmV0dXJuIF9maXJzdC5sYXN0OwogIH0KfQoKY2xhc3MgRm9sbG93ZWRCeUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIEl0ZXJhdG9yPEU+IF9jdXJyZW50SXRlcmF0b3I7CiAgSXRlcmFibGU8RT4gX25leHRJdGVyYWJsZTsKCiAgRm9sbG93ZWRCeUl0ZXJhdG9yKEl0ZXJhYmxlPEU+IGZpcnN0LCB0aGlzLl9uZXh0SXRlcmFibGUpCiAgICAgIDogX2N1cnJlbnRJdGVyYXRvciA9IGZpcnN0Lml0ZXJhdG9yOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9jdXJyZW50SXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoX25leHRJdGVyYWJsZSAhPSBudWxsKSB7CiAgICAgIF9jdXJyZW50SXRlcmF0b3IgPSBfbmV4dEl0ZXJhYmxlLml0ZXJhdG9yOwogICAgICBfbmV4dEl0ZXJhYmxlID0gbnVsbDsKICAgICAgcmV0dXJuIF9jdXJyZW50SXRlcmF0b3IubW92ZU5leHQoKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnRJdGVyYXRvci5jdXJyZW50Owp9CgpjbGFzcyBXaGVyZVR5cGVJdGVyYWJsZTxUPiBleHRlbmRzIEl0ZXJhYmxlPFQ+IHsKICBmaW5hbCBJdGVyYWJsZTxPYmplY3Q+IF9zb3VyY2U7CiAgV2hlcmVUeXBlSXRlcmFibGUodGhpcy5fc291cmNlKTsKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IFdoZXJlVHlwZUl0ZXJhdG9yPFQ+KF9zb3VyY2UuaXRlcmF0b3IpOwp9CgpjbGFzcyBXaGVyZVR5cGVJdGVyYXRvcjxUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBmaW5hbCBJdGVyYXRvcjxPYmplY3Q+IF9zb3VyY2U7CiAgV2hlcmVUeXBlSXRlcmF0b3IodGhpcy5fc291cmNlKTsKICBib29sIG1vdmVOZXh0KCkgewogICAgd2hpbGUgKF9zb3VyY2UubW92ZU5leHQoKSkgewogICAgICBpZiAoX3NvdXJjZS5jdXJyZW50IGlzIFQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgVCBnZXQgY3VycmVudCA9PiBfc291cmNlLmN1cnJlbnQ7Cn0KCi8qKgogKiBDcmVhdGVzIGVycm9ycyB0aHJvdyBieSBbSXRlcmFibGVdIHdoZW4gdGhlIGVsZW1lbnQgY291bnQgaXMgd3JvbmcuCiAqLwphYnN0cmFjdCBjbGFzcyBJdGVyYWJsZUVsZW1lbnRFcnJvciB7CiAgLyoqIEVycm9yIHRocm93biB0aHJvd24gYnksIGUuZy4sIFtJdGVyYWJsZS5maXJzdF0gd2hlbiB0aGVyZSBpcyBubyByZXN1bHQuICovCiAgc3RhdGljIFN0YXRlRXJyb3Igbm9FbGVtZW50KCkgPT4gbmV3IFN0YXRlRXJyb3IoIk5vIGVsZW1lbnQiKTsKICAvKiogRXJyb3IgdGhyb3duIGJ5LCBlLmcuLCBbSXRlcmFibGUuc2luZ2xlXSBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgcmVzdWx0cy4gKi8KICBzdGF0aWMgU3RhdGVFcnJvciB0b29NYW55KCkgPT4gbmV3IFN0YXRlRXJyb3IoIlRvbyBtYW55IGVsZW1lbnRzIik7CiAgLyoqIEVycm9yIHRocm93biBieSwgZS5nLiwgW0xpc3Quc2V0UmFuZ2VdIGlmIHRoZXJlIGFyZSB0b28gZmV3IGVsZW1lbnRzLiAqLwogIHN0YXRpYyBTdGF0ZUVycm9yIHRvb0ZldygpID0+IG5ldyBTdGF0ZUVycm9yKCJUb28gZmV3IGVsZW1lbnRzIik7Cn0Kg4MATk48ARgBBEUcBEAjBjUFSxMGEgIBBEsDSxkERBIWARgBOQEpHiccIzUIBgQBIwEQPRkEAQ89IgQBET06GQQBIh4nMCM1CAYSBAElHictIzUIBhEEASMeJysjNQgGEgQBNR4nICkjNQgGKSwEATQeLCApIzUIBiksBAE2HhQdJyAbGjAKGxkIIzUIBiIpLAQBKR4eIigjNQg1KSEkJTcKCCANMCkkJTcKCCAGBAFAAU8BLB49HCcsIzUIBhIEAUUeHicsIzUIBhIEAUwBSAFJAUgBKhQUJw0kBicgBhMEARMiJyAGEwQCATNGFDkaAUQyIDgjRggGBAEWI0YZBAEYIygTBAETIyQ6HgYiBAEbKS84BisEASAxIzwlBkYEASAxIEgNIy5ABgQBKhggSB4gFUsnMk8GEwQCAQQ3AzxBDgQvHxUODgElHiMUAR0BHhQjHTgGHBcUBiwOEQQCASoBMR8iAUYvSgY7BAEtAVABPiYpATkmJCg8AgFHLEslAgExDh8iASsBFCAoEwYVEgQBHQIBBEMDRgQ5HSIBLQEkOgIBLgEtHyEBKgFMAUZNAgEtHyEBKgEUIyMVCAYSBAEmAgE8ATEfIgErAVACATQfIkVFHjkOASsBHQEUMSwXIk4tIjwPFggGKhEEAgEsHxgBPjg5L0YGNwQBMwEdQAQCAT0sQyYBEys4GwQCASwfEgEyHQQBFBIbIwYVEgQBEiUeBAIBMR8hAS4BHT0EAgExHyEcAS4BFCM7GhQGEQQBEiIeBAIBLB8YATovQgZABAEzASBOBAEdQAQCAT0sSU8EAUEiARMwJA4EASAxNQQCAR0uLxACASwfEgEyHQQBFD8UIQQBJgIBMR8hAS4BHT0EAgExHyEcAS4BFBgaJTEIBiEEASYCAQQgBDwZATUBKgEcARcBECwEAQ8sBAERLAQBGzYEASoBLAErATUpLAQBNCksBAE2KSwEAS4BMwFAASwsBAFFGQQBIDERBAE3ASAxEQQBNwFOASICASIwGRwZAgEyHB0xAS0+MEYGNQQBRwE0OUIBOCE5ARAkNhoEAQ8lHyE7EwYYBAFKOgIBSSwlSx4BICVINSYEASAlOTU0BAEbJT0zBAEQMBoEAQ8xGAQCATUgHQE8KwEUMiExHCoGEgQBLQIBMSIjSgIBNCIjFCEtBhIEASQCAQRHBCZRQVFGT0QCARxkYXJ0Ol9pbnRlcm5hbC9pdGVyYWJsZS5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvaW50ZXJuYWxfcGF0Y2guZGFydI++Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0Ol9pbnRlcm5hbCIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0OmNvcmUiIGhpZGUgU3ltYm9sOwoKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgSW50MzJMaXN0OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImNsYXNzX2lkX2Zhc3RhLmRhcnQiOwovLyBwYXJ0ICJwcmludF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3ltYm9sX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkxpc3Q8VD4gbWFrZUxpc3RGaXhlZExlbmd0aDxUPihMaXN0PFQ+IGdyb3dhYmxlTGlzdCkKICAgIG5hdGl2ZSAiSW50ZXJuYWxfbWFrZUxpc3RGaXhlZExlbmd0aCI7CgpAcGF0Y2gKTGlzdDxUPiBtYWtlRml4ZWRMaXN0VW5tb2RpZmlhYmxlPFQ+KExpc3Q8VD4gZml4ZWRMZW5ndGhMaXN0KQogICAgbmF0aXZlICJJbnRlcm5hbF9tYWtlRml4ZWRMaXN0VW5tb2RpZmlhYmxlIjsKCkBwYXRjaApPYmplY3QgZXh0cmFjdFR5cGVBcmd1bWVudHM8VD4oVCBpbnN0YW5jZSwgRnVuY3Rpb24gZXh0cmFjdCkKICAgIG5hdGl2ZSAiSW50ZXJuYWxfZXh0cmFjdFR5cGVBcmd1bWVudHMiOwoKY2xhc3MgVk1MaWJyYXJ5SG9va3MgewogIC8vIEV4YW1wbGU6ICJkYXJ0Omlzb2xhdGUgX1RpbWVyLl9mYWN0b3J5IgogIHN0YXRpYyB2YXIgdGltZXJGYWN0b3J5OwoKICAvLyBFeGFtcGxlOiAiZGFydDppbyBfRXZlbnRIYW5kbGVyLl9zZW5kRGF0YSIKICBzdGF0aWMgdmFyIGV2ZW50SGFuZGxlclNlbmREYXRhOwoKICAvLyBBIG51bGxhcnkgY2xvc3VyZSB0aGF0IGFuc3dlcnMgdGhlIGN1cnJlbnQgY2xvY2sgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLgogIC8vIEV4YW1wbGU6ICJkYXJ0OmlvIF9FdmVudEhhbmRsZXIuX3RpbWVyTWlsbGlzZWNvbmRDbG9jayIKICBzdGF0aWMgdmFyIHRpbWVyTWlsbGlzZWNvbmRDbG9jazsKCiAgLy8gSW1wbGVtZW50YXRpb24gb2YgUmVzb3VyY2UucmVhZEFzQnl0ZXMuCiAgc3RhdGljIHZhciByZXNvdXJjZVJlYWRBc0J5dGVzOwoKICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBwYWNrYWdlIHJvb3QvbWFwIHByb3Zpc2lvbi4KICBzdGF0aWMgdmFyIHBhY2thZ2VSb290U3RyaW5nOwogIHN0YXRpYyB2YXIgcGFja2FnZUNvbmZpZ1N0cmluZzsKICBzdGF0aWMgdmFyIHBhY2thZ2VSb290VXJpRnV0dXJlOwogIHN0YXRpYyB2YXIgcGFja2FnZUNvbmZpZ1VyaUZ1dHVyZTsKICBzdGF0aWMgdmFyIHJlc29sdmVQYWNrYWdlVXJpRnV0dXJlOwoKICBzdGF0aWMgdmFyIF9jb21wdXRlU2NyaXB0VXJpOwogIHN0YXRpYyB2YXIgX2NhY2hlZFNjcmlwdDsKICBzdGF0aWMgc2V0IHBsYXRmb3JtU2NyaXB0KHZhciBmKSB7CiAgICBfY29tcHV0ZVNjcmlwdFVyaSA9IGY7CiAgICBfY2FjaGVkU2NyaXB0ID0gbnVsbDsKICB9CgogIHN0YXRpYyBnZXQgcGxhdGZvcm1TY3JpcHQgewogICAgaWYgKF9jYWNoZWRTY3JpcHQgPT0gbnVsbCAmJiBfY29tcHV0ZVNjcmlwdFVyaSAhPSBudWxsKSB7CiAgICAgIF9jYWNoZWRTY3JpcHQgPSBfY29tcHV0ZVNjcmlwdFVyaSgpOwogICAgfQogICAgcmV0dXJuIF9jYWNoZWRTY3JpcHQ7CiAgfQp9CgpmaW5hbCBib29sIGlzNjRCaXQgPSBfaW5xdWlyZUlzNjRCaXQoKTsKCmJvb2wgX2lucXVpcmVJczY0Qml0KCkgbmF0aXZlICJJbnRlcm5hbF9pbnF1aXJlSXM2NEJpdCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKYm9vbCBfY2xhc3NSYW5nZUNoZWNrKGludCBjaWQsIGludCBsb3dlckxpbWl0LCBpbnQgdXBwZXJMaW1pdCkgewogIHJldHVybiBjaWQgPj0gbG93ZXJMaW1pdCAmJiBjaWQgPD0gdXBwZXJMaW1pdDsKfQoKLy8gVXRpbGl0eSBjbGFzcyBub3cgb25seSB1c2VkIGJ5IHRoZSBWTS4KY2xhc3MgTGlzdHMgewogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHN0YXRpYyB2b2lkIGNvcHkoTGlzdCBzcmMsIGludCBzcmNTdGFydCwgTGlzdCBkc3QsIGludCBkc3RTdGFydCwgaW50IGNvdW50KSB7CiAgICBpZiAoc3JjU3RhcnQgPCBkc3RTdGFydCkgewogICAgICBmb3IgKGludCBpID0gc3JjU3RhcnQgKyBjb3VudCAtIDEsIGogPSBkc3RTdGFydCArIGNvdW50IC0gMTsKICAgICAgICAgIGkgPj0gc3JjU3RhcnQ7CiAgICAgICAgICBpLS0sIGotLSkgewogICAgICAgIGRzdFtqXSA9IHNyY1tpXTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IHNyY1N0YXJ0LCBqID0gZHN0U3RhcnQ7IGkgPCBzcmNTdGFydCArIGNvdW50OyBpKyssIGorKykgewogICAgICAgIGRzdFtqXSA9IHNyY1tpXTsKICAgICAgfQogICAgfQogIH0KfQoKLy8gUHJlcGVuZCB0aGUgcGFyZW50IHR5cGUgYXJndW1lbnRzIChtYXliZSBudWxsKSBvZiBsZW5ndGggJ3BhcmVudExlbicgdG8gdGhlCi8vIGZ1bmN0aW9uIHR5cGUgYXJndW1lbnRzIChtYXkgYmUgbnVsbCkuIFRoZSByZXN1bHQgaXMgbnVsbCBpZiBib3RoIGlucHV0Ci8vIHZlY3RvcnMgYXJlIG51bGwgb3IgaXMgYSBuZXdseSBhbGxvY2F0ZWQgYW5kIGNhbm9uaWNhbGl6ZWQgdmVjdG9yIG9mIGxlbmd0aAovLyAndG90YWxMZW4nLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX3ByZXBlbmRUeXBlQXJndW1lbnRzKGZ1bmN0aW9uVHlwZUFyZ3VtZW50cywgcGFyZW50VHlwZUFyZ3VtZW50cywgcGFyZW50TGVuLAogICAgdG90YWxMZW4pIG5hdGl2ZSAiSW50ZXJuYWxfcHJlcGVuZFR5cGVBcmd1bWVudHMiOwoKLy8gQ2hlY2sgdGhhdCBhIHNldCBvZiB0eXBlIGFyZ3VtZW50cyBzYXRpc2Z5IHRoZSB0eXBlIHBhcmFtZXRlciBib3VuZHMgb24gYQovLyBjbG9zdXJlLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX2JvdW5kc0NoZWNrRm9yUGFydGlhbEluc3RhbnRpYXRpb24oY2xvc3VyZSwgdHlwZUFyZ3MpCiAgICBuYXRpdmUgIkludGVybmFsX2JvdW5kc0NoZWNrRm9yUGFydGlhbEluc3RhbnRpYXRpb24iOwoKLy8gQ2FsbGVkIGJ5IElSUmVnRXhwTWFjcm9Bc3NlbWJsZXI6Okdyb3dTdGFjay4KSW50MzJMaXN0IF9ncm93UmVnRXhwU3RhY2soSW50MzJMaXN0IHN0YWNrKSB7CiAgZmluYWwgbmV3U3RhY2sgPSBuZXcgSW50MzJMaXN0KHN0YWNrLmxlbmd0aCAqIDIpOwogIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHsKICAgIG5ld1N0YWNrW2ldID0gc3RhY2tbaV07CiAgfQogIHJldHVybiBuZXdTdGFjazsKfQoKLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBza2lwIGltcGxpY2l0IG9yIGV4cGxpY2l0IGNoZWNrZWQgZG93biBjYXN0cyBpbgovLyB0aGUgcGFydHMgb2YgdGhlIGNvcmUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiB3aGVyZSB3ZSBrbm93IGJ5IGNvbnN0cnVjdGlvbiB0aGUKLy8gdHlwZSBvZiBhIHZhbHVlLgovLwovLyBJbXBvcnRhbnQ6IHRoaXMgaXMgdW5zYWZlIGFuZCBtdXN0IGJlIHVzZWQgd2l0aCBjYXJlLgpUIHVuc2FmZUNhc3Q8VD4oT2JqZWN0IHYpIG5hdGl2ZSAiSW50ZXJuYWxfdW5zYWZlQ2FzdCI7Cn4ATk48AU1PSysBIAEpATofHB0BBzUrAQc+MQEHPSwBFy0bATAjAU09JAEtIgEzICIjJSYBIBwlGxoEAR4+KwYaBAIBKAE5ASImHEExAgEqDh5QH0MZFhkIDU0ZCAYEAgFPS08PIk02AU0MIjc6ATAuNCscBBMCAVBSFAM5OAEoZGFydDpfaW50ZXJuYWwtcGF0Y2gvaW50ZXJuYWxfcGF0Y2guZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2NsYXNzX2lkX2Zhc3RhLmRhcnSDpS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJpbnRlcm5hbF9wYXRjaC5kYXJ0IjsKCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgQ2xhc3NJRCB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIHN0YXRpYyBpbnQgZ2V0SUQoT2JqZWN0IHZhbHVlKSBuYXRpdmUgIkNsYXNzSURfZ2V0SUQiOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRBcnJheSA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nID0gMDsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRHcm93YWJsZU9iamVjdEFycmF5ID0gMDsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRJbW11dGFibGVBcnJheSA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkT25lQnl0ZVN0cmluZyA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkVHdvQnl0ZVN0cmluZyA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkVWludDhBcnJheVZpZXcgPSAwOwp9Ch0ATk48ASIBGhAkNDkBHCEcMRwvHCocKRwpHCoCAShkYXJ0Ol9pbnRlcm5hbC1wYXRjaC9jbGFzc19pZF9mYXN0YS5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9wYXRjaC5kYXJ0gT0vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAiZGFydDpfaW50ZXJuYWwiOwoKY2xhc3MgX1BhdGNoIHsKICBjb25zdCBfUGF0Y2goKTsKfQoKY29uc3QgX1BhdGNoIHBhdGNoID0gY29uc3QgX1BhdGNoKCk7Cg0ATk48ARoBDxICASUBH2RhcnQ6X2ludGVybmFsLXBhdGNoL3BhdGNoLmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ludGVybmFsL2FzeW5jX2Nhc3QuZGFydI1gLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovLyBDYXN0aW5nIHdyYXBwZXJzIGZvciBhc3luY2hyb25vdXMgY2xhc3Nlcy4KCmNsYXNzIENhc3RTdHJlYW08UywgVD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIFN0cmVhbTxTPiBfc291cmNlOwogIENhc3RTdHJlYW0odGhpcy5fc291cmNlKTsKICBib29sIGdldCBpc0Jyb2FkY2FzdCA9PiBfc291cmNlLmlzQnJvYWRjYXN0OwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gbmV3IENhc3RTdHJlYW1TdWJzY3JpcHRpb248UywgVD4oCiAgICAgICAgX3NvdXJjZS5saXN0ZW4obnVsbCwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpKQogICAgICAuLm9uRGF0YShvbkRhdGEpCiAgICAgIC4ub25FcnJvcihvbkVycm9yKTsKICB9CgogIFN0cmVhbTxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RTdHJlYW08UywgUj4oX3NvdXJjZSk7Cn0KCmNsYXNzIENhc3RTdHJlYW1TdWJzY3JpcHRpb248UywgVD4gaW1wbGVtZW50cyBTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIGZpbmFsIFN0cmVhbVN1YnNjcmlwdGlvbjxTPiBfc291cmNlOwoKICAvLy8gWm9uZSB3aGVyZSBsaXN0ZW4gd2FzIGNhbGxlZC4KICBmaW5hbCBab25lIF96b25lID0gWm9uZS5jdXJyZW50OwoKICAvLy8gVXNlcidzIGRhdGEgaGFuZGxlci4gTWF5IGJlIG51bGwuCiAgdm9pZCBGdW5jdGlvbihUKSBfaGFuZGxlRGF0YTsKCiAgLy8vIENvcHkgb2YgX3NvdXJjZSdzIGhhbmRsZUVycm9yIHNvIHdlIGNhbiByZXBvcnQgZXJyb3JzIGluIG9uRGF0YS4KICAvLy8gTWF5IGJlIG51bGwuCiAgRnVuY3Rpb24gX2hhbmRsZUVycm9yOwoKICBDYXN0U3RyZWFtU3Vic2NyaXB0aW9uKHRoaXMuX3NvdXJjZSkgewogICAgX3NvdXJjZS5vbkRhdGEoX29uRGF0YSk7CiAgfQoKICBGdXR1cmUgY2FuY2VsKCkgPT4gX3NvdXJjZS5jYW5jZWwoKTsKCiAgdm9pZCBvbkRhdGEodm9pZCBoYW5kbGVEYXRhKFQgZGF0YSkpIHsKICAgIF9oYW5kbGVEYXRhID0gaGFuZGxlRGF0YSA9PSBudWxsCiAgICAgICAgPyBudWxsCiAgICAgICAgOiBfem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgVD4oaGFuZGxlRGF0YSk7CiAgfQoKICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpIHsKICAgIF9zb3VyY2Uub25FcnJvcihoYW5kbGVFcnJvcik7CiAgICBpZiAoaGFuZGxlRXJyb3IgPT0gbnVsbCkgewogICAgICBfaGFuZGxlRXJyb3IgPSBudWxsOwogICAgfSBlbHNlIGlmIChoYW5kbGVFcnJvciBpcyBGdW5jdGlvbihOdWxsLCBOdWxsKSkgewogICAgICBfaGFuZGxlRXJyb3IgPSBfem9uZQogICAgICAgICAgLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8ZHluYW1pYywgT2JqZWN0LCBTdGFja1RyYWNlPihoYW5kbGVFcnJvcik7CiAgICB9IGVsc2UgewogICAgICBfaGFuZGxlRXJyb3IgPSBfem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgT2JqZWN0PihoYW5kbGVFcnJvcik7CiAgICB9CiAgfQoKICB2b2lkIG9uRG9uZSh2b2lkIGhhbmRsZURvbmUoKSkgewogICAgX3NvdXJjZS5vbkRvbmUoaGFuZGxlRG9uZSk7CiAgfQoKICB2b2lkIF9vbkRhdGEoUyBkYXRhKSB7CiAgICBpZiAoX2hhbmRsZURhdGEgPT0gbnVsbCkgcmV0dXJuOwogICAgVCB0YXJnZXREYXRhOwogICAgdHJ5IHsKICAgICAgdGFyZ2V0RGF0YSA9IGRhdGEgYXMgVDsKICAgIH0gY2F0Y2ggKGVycm9yLCBzdGFjaykgewogICAgICBpZiAoX2hhbmRsZUVycm9yID09IG51bGwpIHsKICAgICAgICBfem9uZS5oYW5kbGVVbmNhdWdodEVycm9yKGVycm9yLCBzdGFjayk7CiAgICAgIH0gZWxzZSBpZiAoX2hhbmRsZUVycm9yIGlzIEZ1bmN0aW9uKE51bGwsIE51bGwpKSB7CiAgICAgICAgX3pvbmUucnVuQmluYXJ5R3VhcmRlZChfaGFuZGxlRXJyb3IsIGVycm9yLCBzdGFjayk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3pvbmUucnVuVW5hcnlHdWFyZGVkKF9oYW5kbGVFcnJvciwgZXJyb3IpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIF96b25lLnJ1blVuYXJ5R3VhcmRlZChfaGFuZGxlRGF0YSwgdGFyZ2V0RGF0YSk7CiAgfQoKICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSkgewogICAgX3NvdXJjZS5wYXVzZShyZXN1bWVTaWduYWwpOwogIH0KCiAgdm9pZCByZXN1bWUoKSB7CiAgICBfc291cmNlLnJlc3VtZSgpOwogIH0KCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4gX3NvdXJjZS5pc1BhdXNlZDsKCiAgRnV0dXJlPEU+IGFzRnV0dXJlPEU+KFtFIGZ1dHVyZVZhbHVlXSkgPT4gX3NvdXJjZS5hc0Z1dHVyZTxFPihmdXR1cmVWYWx1ZSk7Cn0KCmNsYXNzIENhc3RTdHJlYW1UcmFuc2Zvcm1lcjxTUywgU1QsIFRTLCBUVD4KICAgIGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFRTLCBUVD4gewogIGZpbmFsIFN0cmVhbVRyYW5zZm9ybWVyPFNTLCBTVD4gX3NvdXJjZTsKICBDYXN0U3RyZWFtVHJhbnNmb3JtZXIodGhpcy5fc291cmNlKTsKCiAgU3RyZWFtVHJhbnNmb3JtZXI8UlMsIFJUPiBjYXN0PFJTLCBSVD4oKSA9PgogICAgICBuZXcgQ2FzdFN0cmVhbVRyYW5zZm9ybWVyPFNTLCBTVCwgUlMsIFJUPihfc291cmNlKTsKICBTdHJlYW08VFQ+IGJpbmQoU3RyZWFtPFRTPiBzdHJlYW0pID0+CiAgICAgIF9zb3VyY2UuYmluZChzdHJlYW0uY2FzdDxTUz4oKSkuY2FzdDxUVD4oKTsKfQoKY2xhc3MgQ2FzdENvbnZlcnRlcjxTUywgU1QsIFRTLCBUVD4gZXh0ZW5kcyBDb252ZXJ0ZXI8VFMsIFRUPiB7CiAgZmluYWwgQ29udmVydGVyPFNTLCBTVD4gX3NvdXJjZTsKICBDYXN0Q29udmVydGVyKHRoaXMuX3NvdXJjZSk7CgogIFRUIGNvbnZlcnQoVFMgaW5wdXQpID0+IF9zb3VyY2UuY29udmVydChpbnB1dCBhcyBTUykgYXMgVFQ7CgogIC8vIGNhc3QgaXMgaW5oZXJpdGVkIGZyb20gQ29udmVydGVyLgoKICBTdHJlYW08VFQ+IGJpbmQoU3RyZWFtPFRTPiBzdHJlYW0pID0+CiAgICAgIF9zb3VyY2UuYmluZChzdHJlYW0uY2FzdDxTUz4oKSkuY2FzdDxUVD4oKTsKCiAgQ29udmVydGVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCkgPT4KICAgICAgbmV3IENhc3RDb252ZXJ0ZXI8U1MsIFNULCBSUywgUlQ+KF9zb3VyY2UpOwp9CnsATk48ARgBLgErGxwvATQ/LUwXGgQBOAIBRicBJCMBKCABRxMZASkdBAEnASklDz8EASciHxs2G00NUAYEASMgBAEZJRIKHh0iMTk8DzQIDgY0BAEmIQQBEhYEASkBTgIBLCwrJwEuOigyAgFAIx8BPgEnASgyASYyAgEeZGFydDpfaW50ZXJuYWwvYXN5bmNfY2FzdC5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9jYXN0LmRhcnSmSi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2ludGVybmFsOwoKLy8gQ2FzdGluZyB3cmFwcGVycyBmb3IgY29sbGVjdGlvbiBjbGFzc2VzLgoKYWJzdHJhY3QgY2xhc3MgX0Nhc3RJdGVyYWJsZUJhc2U8UywgVD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgSXRlcmFibGU8Uz4gZ2V0IF9zb3VyY2U7CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciA9PiBuZXcgQ2FzdEl0ZXJhdG9yPFMsIFQ+KF9zb3VyY2UuaXRlcmF0b3IpOwoKICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlcnMgdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9uIHRoZQogIC8vIHRocm93aW5nIGl0ZXJhdG9yLiBUaGVzZSBhcmUgYWxsIG9wZXJhdGlvbnMgdGhhdCBoYXZlIG5vIG1vcmUgZWZmaWNpZW50CiAgLy8gaW1wbGVtZW50YXRpb24gdGhhbiB2aXNpdGluZyBldmVyeSBlbGVtZW50IGluIG9yZGVyLAogIC8vIG9yIHRoYXQgaGFzIG5vIG1vcmUgZWZmaWNpZW50IHdheSB0byBnZXQgdGhlIGNvcnJlY3QgdHlwZSAodG9MaXN0LCB0b1NldCkuCiAgLy8KICAvLyAqIG1hcAogIC8vICogd2hlcmUKICAvLyAqIGV4cGFuZAogIC8vICogZm9yRWFjaAogIC8vICogcmVkdWNlCiAgLy8gKiBmb2xkCiAgLy8gKiBldmVyeQogIC8vICogYW55CiAgLy8gKiBqb2luCiAgLy8gKiB0b0xpc3QKICAvLyAqIHRvU2V0CiAgLy8gKiBza2lwV2hpbGUKICAvLyAqIHRha2VXaGlsZQogIC8vICogZmlyc3RXaGVyZQogIC8vICogc2luZ2xlV2hlcmUKCiAgaW50IGdldCBsZW5ndGggPT4gX3NvdXJjZS5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfc291cmNlLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfc291cmNlLmlzTm90RW1wdHk7CgogIEl0ZXJhYmxlPFQ+IHNraXAoaW50IGNvdW50KSA9PiBuZXcgQ2FzdEl0ZXJhYmxlPFMsIFQ+KF9zb3VyY2Uuc2tpcChjb3VudCkpOwogIEl0ZXJhYmxlPFQ+IHRha2UoaW50IGNvdW50KSA9PiBuZXcgQ2FzdEl0ZXJhYmxlPFMsIFQ+KF9zb3VyY2UudGFrZShjb3VudCkpOwoKICBUIGVsZW1lbnRBdChpbnQgaW5kZXgpID0+IF9zb3VyY2UuZWxlbWVudEF0KGluZGV4KSBhcyBUOwogIFQgZ2V0IGZpcnN0ID0+IF9zb3VyY2UuZmlyc3QgYXMgVDsKICBUIGdldCBsYXN0ID0+IF9zb3VyY2UubGFzdCBhcyBUOwogIFQgZ2V0IHNpbmdsZSA9PiBfc291cmNlLnNpbmdsZSBhcyBUOwoKICBib29sIGNvbnRhaW5zKE9iamVjdCBvdGhlcikgPT4gX3NvdXJjZS5jb250YWlucyhvdGhlcik7CgogIC8vIE1pZ2h0IGJlIGltcGxlbWVudGVkIGJ5IHRlc3RpbmcgYmFja3dhcmRzIGZyb20gdGhlIGVuZCwKICAvLyBzbyB1c2UgdGhlIF9zb3VyY2UncyBpbXBsZW1lbnRhdGlvbi4KICBUIGxhc3RXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSwge1Qgb3JFbHNlKCl9KSA9PgogICAgICBfc291cmNlLmxhc3RXaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCksCiAgICAgICAgICBvckVsc2U6IChvckVsc2UgPT0gbnVsbCkgPyBudWxsIDogKCkgPT4gb3JFbHNlKCkgYXMgUykgYXMgVDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX3NvdXJjZS50b1N0cmluZygpOwp9CgpjbGFzcyBDYXN0SXRlcmF0b3I8UywgVD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgSXRlcmF0b3I8Uz4gX3NvdXJjZTsKICBDYXN0SXRlcmF0b3IodGhpcy5fc291cmNlKTsKICBib29sIG1vdmVOZXh0KCkgPT4gX3NvdXJjZS5tb3ZlTmV4dCgpOwogIFQgZ2V0IGN1cnJlbnQgPT4gX3NvdXJjZS5jdXJyZW50IGFzIFQ7Cn0KCmNsYXNzIENhc3RJdGVyYWJsZTxTLCBUPiBleHRlbmRzIF9DYXN0SXRlcmFibGVCYXNlPFMsIFQ+IHsKICBmaW5hbCBJdGVyYWJsZTxTPiBfc291cmNlOwoKICBDYXN0SXRlcmFibGUuXyh0aGlzLl9zb3VyY2UpOwoKICBmYWN0b3J5IENhc3RJdGVyYWJsZShJdGVyYWJsZTxTPiBzb3VyY2UpIHsKICAgIGlmIChzb3VyY2UgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8Uz4pIHsKICAgICAgcmV0dXJuIG5ldyBfRWZmaWNpZW50TGVuZ3RoQ2FzdEl0ZXJhYmxlPFMsIFQ+KHNvdXJjZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IENhc3RJdGVyYWJsZTxTLCBUPi5fKHNvdXJjZSk7CiAgfQoKICBJdGVyYWJsZTxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RJdGVyYWJsZTxTLCBSPihfc291cmNlKTsKfQoKY2xhc3MgX0VmZmljaWVudExlbmd0aENhc3RJdGVyYWJsZTxTLCBUPiBleHRlbmRzIENhc3RJdGVyYWJsZTxTLCBUPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxUPiB7CiAgX0VmZmljaWVudExlbmd0aENhc3RJdGVyYWJsZShFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxTPiBzb3VyY2UpCiAgICAgIDogc3VwZXIuXyhzb3VyY2UpOwp9CgphYnN0cmFjdCBjbGFzcyBfQ2FzdExpc3RCYXNlPFMsIFQ+IGV4dGVuZHMgX0Nhc3RJdGVyYWJsZUJhc2U8UywgVD4KICAgIHdpdGggTGlzdE1peGluPFQ+IHsKICBMaXN0PFM+IGdldCBfc291cmNlOwoKICAvLyBVc2luZyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmcm9tIExpc3RNaXhpbjoKICAvLyAqIHJldmVyc2VkCiAgLy8gKiBzaHVmZmxlCiAgLy8gKiBpbmRleE9mCiAgLy8gKiBsYXN0SW5kZXhPZgogIC8vICogY2xlYXIKICAvLyAqIHN1Ymxpc3QKICAvLyAqIGFzTWFwCgogIFQgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBfc291cmNlW2luZGV4XSBhcyBUOwoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIFQgdmFsdWUpIHsKICAgIF9zb3VyY2VbaW5kZXhdID0gdmFsdWUgYXMgUzsKICB9CgogIHZvaWQgc2V0IGxlbmd0aChpbnQgbGVuZ3RoKSB7CiAgICBfc291cmNlLmxlbmd0aCA9IGxlbmd0aDsKICB9CgogIHZvaWQgYWRkKFQgdmFsdWUpIHsKICAgIF9zb3VyY2UuYWRkKHZhbHVlIGFzIFMpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8VD4gdmFsdWVzKSB7CiAgICBfc291cmNlLmFkZEFsbChuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KHZhbHVlcykpOwogIH0KCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShUIHYxLCBUIHYyKV0pIHsKICAgIF9zb3VyY2Uuc29ydCgKICAgICAgICBjb21wYXJlID09IG51bGwgPyBudWxsIDogKFMgdjEsIFMgdjIpID0+IGNvbXBhcmUodjEgYXMgVCwgdjIgYXMgVCkpOwogIH0KCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgX3NvdXJjZS5zaHVmZmxlKHJhbmRvbSk7CiAgfQoKICB2b2lkIGluc2VydChpbnQgaW5kZXgsIFQgZWxlbWVudCkgewogICAgX3NvdXJjZS5pbnNlcnQoaW5kZXgsIGVsZW1lbnQgYXMgUyk7CiAgfQoKICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICBfc291cmNlLmluc2VydEFsbChpbmRleCwgbmV3IENhc3RJdGVyYWJsZTxULCBTPihlbGVtZW50cykpOwogIH0KCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxUPiBlbGVtZW50cykgewogICAgX3NvdXJjZS5zZXRBbGwoaW5kZXgsIG5ldyBDYXN0SXRlcmFibGU8VCwgUz4oZWxlbWVudHMpKTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgPT4gX3NvdXJjZS5yZW1vdmUodmFsdWUpOwoKICBUIHJlbW92ZUF0KGludCBpbmRleCkgPT4gX3NvdXJjZS5yZW1vdmVBdChpbmRleCkgYXMgVDsKCiAgVCByZW1vdmVMYXN0KCkgPT4gX3NvdXJjZS5yZW1vdmVMYXN0KCkgYXMgVDsKCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3NvdXJjZS5yZW1vdmVXaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCkpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3NvdXJjZS5yZXRhaW5XaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCkpOwogIH0KCiAgSXRlcmFibGU8VD4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSA9PgogICAgICBuZXcgQ2FzdEl0ZXJhYmxlPFMsIFQ+KF9zb3VyY2UuZ2V0UmFuZ2Uoc3RhcnQsIGVuZCkpOwoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8VD4gaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIF9zb3VyY2Uuc2V0UmFuZ2Uoc3RhcnQsIGVuZCwgbmV3IENhc3RJdGVyYWJsZTxULCBTPihpdGVyYWJsZSksIHNraXBDb3VudCk7CiAgfQoKICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgX3NvdXJjZS5yZW1vdmVSYW5nZShzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgZmlsbFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgW1QgZmlsbFZhbHVlXSkgewogICAgX3NvdXJjZS5maWxsUmFuZ2Uoc3RhcnQsIGVuZCwgZmlsbFZhbHVlIGFzIFMpOwogIH0KCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxUPiByZXBsYWNlbWVudCkgewogICAgX3NvdXJjZS5yZXBsYWNlUmFuZ2Uoc3RhcnQsIGVuZCwgbmV3IENhc3RJdGVyYWJsZTxULCBTPihyZXBsYWNlbWVudCkpOwogIH0KfQoKY2xhc3MgQ2FzdExpc3Q8UywgVD4gZXh0ZW5kcyBfQ2FzdExpc3RCYXNlPFMsIFQ+IHsKICBmaW5hbCBMaXN0PFM+IF9zb3VyY2U7CiAgQ2FzdExpc3QodGhpcy5fc291cmNlKTsKCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RMaXN0PFMsIFI+KF9zb3VyY2UpOwp9CgpjbGFzcyBDYXN0U2V0PFMsIFQ+IGV4dGVuZHMgX0Nhc3RJdGVyYWJsZUJhc2U8UywgVD4gaW1wbGVtZW50cyBTZXQ8VD4gewogIGZpbmFsIFNldDxTPiBfc291cmNlOwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBlbXB0eSBzZXQgb2YgdGhlIHNhbWUgKmtpbmQqIGFzIFtfc291cmNlXSwKICAvLy8gYnV0IHdpdGggYDxSPmAgYXMgdHlwZSBhcmd1bWVudC4KICAvLy8gVXNlZCBieSBbdG9TZXRdIGFuZCBbdW5pb25dLgogIGZpbmFsIFNldDxSPiBGdW5jdGlvbjxSPigpIF9lbXB0eVNldDsKCiAgQ2FzdFNldCh0aGlzLl9zb3VyY2UsIHRoaXMuX2VtcHR5U2V0KTsKCiAgc3RhdGljIFNldDxSPiBfZGVmYXVsdEVtcHR5U2V0PFI+KCkgPT4gbmV3IFNldDxSPigpOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IG5ldyBDYXN0U2V0PFMsIFI+KF9zb3VyY2UsIF9lbXB0eVNldCk7CiAgYm9vbCBhZGQoVCB2YWx1ZSkgPT4gX3NvdXJjZS5hZGQodmFsdWUgYXMgUyk7CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICBfc291cmNlLmFkZEFsbChuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KGVsZW1lbnRzKSk7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3Qgb2JqZWN0KSA9PiBfc291cmNlLnJlbW92ZShvYmplY3QpOwoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IG9iamVjdHMpIHsKICAgIF9zb3VyY2UucmVtb3ZlQWxsKG9iamVjdHMpOwogIH0KCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBvYmplY3RzKSB7CiAgICBfc291cmNlLnJldGFpbkFsbChvYmplY3RzKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9zb3VyY2UucmVtb3ZlV2hlcmUoKFMgZWxlbWVudCkgPT4gdGVzdChlbGVtZW50IGFzIFQpKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9zb3VyY2UucmV0YWluV2hlcmUoKFMgZWxlbWVudCkgPT4gdGVzdChlbGVtZW50IGFzIFQpKTsKICB9CgogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvYmplY3RzKSA9PiBfc291cmNlLmNvbnRhaW5zQWxsKG9iamVjdHMpOwoKICBTZXQ8VD4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBpZiAoX2VtcHR5U2V0ICE9IG51bGwpIHJldHVybiBfY29uZGl0aW9uYWxBZGQob3RoZXIsIHRydWUpOwogICAgcmV0dXJuIG5ldyBDYXN0U2V0PFMsIFQ+KF9zb3VyY2UuaW50ZXJzZWN0aW9uKG90aGVyKSwgbnVsbCk7CiAgfQoKICBTZXQ8VD4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcikgewogICAgaWYgKF9lbXB0eVNldCAhPSBudWxsKSByZXR1cm4gX2NvbmRpdGlvbmFsQWRkKG90aGVyLCBmYWxzZSk7CiAgICByZXR1cm4gbmV3IENhc3RTZXQ8UywgVD4oX3NvdXJjZS5kaWZmZXJlbmNlKG90aGVyKSwgbnVsbCk7CiAgfQoKICBTZXQ8VD4gX2NvbmRpdGlvbmFsQWRkKFNldDxPYmplY3Q+IG90aGVyLCBib29sIG90aGVyQ29udGFpbnMpIHsKICAgIFNldDxUPiByZXN1bHQgPSAoX2VtcHR5U2V0ID09IG51bGwpID8gbmV3IFNldDxUPigpIDogX2VtcHR5U2V0PFQ+KCk7CiAgICBmb3IgKHZhciBlbGVtZW50IGluIF9zb3VyY2UpIHsKICAgICAgVCBjYXN0RWxlbWVudCA9IGVsZW1lbnQgYXMgVDsKICAgICAgaWYgKG90aGVyQ29udGFpbnMgPT0gb3RoZXIuY29udGFpbnMoY2FzdEVsZW1lbnQpKSByZXN1bHQuYWRkKGNhc3RFbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTZXQ8VD4gdW5pb24oU2V0PFQ+IG90aGVyKSA9PiBfY2xvbmUoKS4uYWRkQWxsKG90aGVyKTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9zb3VyY2UuY2xlYXIoKTsKICB9CgogIFNldDxUPiBfY2xvbmUoKSB7CiAgICBTZXQ8VD4gcmVzdWx0ID0gKF9lbXB0eVNldCA9PSBudWxsKSA/IG5ldyBTZXQ8VD4oKSA6IF9lbXB0eVNldDxUPigpOwogICAgcmVzdWx0LmFkZEFsbCh0aGlzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTZXQ8VD4gdG9TZXQoKSA9PiBfY2xvbmUoKTsKCiAgVCBsb29rdXAoT2JqZWN0IGtleSkgPT4gX3NvdXJjZS5sb29rdXAoa2V5KSBhcyBUOwp9CgpjbGFzcyBDYXN0TWFwPFNLLCBTViwgSywgVj4gZXh0ZW5kcyBNYXBCYXNlPEssIFY+IHsKICBmaW5hbCBNYXA8U0ssIFNWPiBfc291cmNlOwoKICBDYXN0TWFwKHRoaXMuX3NvdXJjZSk7CgogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+IG5ldyBDYXN0TWFwPFNLLCBTViwgUkssIFJWPihfc291cmNlKTsKCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgPT4gX3NvdXJjZS5jb250YWluc1ZhbHVlKHZhbHVlKTsKCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBfc291cmNlLmNvbnRhaW5zS2V5KGtleSk7CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gX3NvdXJjZVtrZXldIGFzIFY7CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBfc291cmNlW2tleSBhcyBTS10gPSB2YWx1ZSBhcyBTVjsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgPT4gX3NvdXJjZS5wdXRJZkFic2VudCgKICAgICAga2V5IGFzIFNLLCAoaWZBYnNlbnQgPT0gbnVsbCkgPyBudWxsIDogKCkgPT4gaWZBYnNlbnQoKSBhcyBTVikgYXMgVjsKCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBfc291cmNlLmFkZEFsbChuZXcgQ2FzdE1hcDxLLCBWLCBTSywgU1Y+KG90aGVyKSk7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSA9PiBfc291cmNlLnJlbW92ZShrZXkpIGFzIFY7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfc291cmNlLmNsZWFyKCk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEsga2V5LCBWIHZhbHVlKSkgewogICAgX3NvdXJjZS5mb3JFYWNoKChTSyBrZXksIFNWIHZhbHVlKSB7CiAgICAgIGYoa2V5IGFzIEssIHZhbHVlIGFzIFYpOwogICAgfSk7CiAgfQoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBuZXcgQ2FzdEl0ZXJhYmxlPFNLLCBLPihfc291cmNlLmtleXMpOwoKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IG5ldyBDYXN0SXRlcmFibGU8U1YsIFY+KF9zb3VyY2UudmFsdWVzKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX3NvdXJjZS5sZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3NvdXJjZS5pc0VtcHR5OwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9zb3VyY2UuaXNOb3RFbXB0eTsKCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgewogICAgcmV0dXJuIF9zb3VyY2UudXBkYXRlKGtleSBhcyBTSywgKFNWIHZhbHVlKSA9PiB1cGRhdGUodmFsdWUgYXMgVikgYXMgU1YsCiAgICAgICAgaWZBYnNlbnQ6IChpZkFic2VudCA9PSBudWxsKSA/IG51bGwgOiAoKSA9PiBpZkFic2VudCgpIGFzIFNWKSBhcyBWOwogIH0KCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBfc291cmNlLnVwZGF0ZUFsbCgoU0sga2V5LCBTViB2YWx1ZSkgPT4gdXBkYXRlKGtleSBhcyBLLCB2YWx1ZSBhcyBWKSBhcyBTVik7CiAgfQoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgewogICAgcmV0dXJuIF9zb3VyY2UuZW50cmllcy5tYXA8TWFwRW50cnk8SywgVj4+KAogICAgICAgIChNYXBFbnRyeTxTSywgU1Y+IGUpID0+IG5ldyBNYXBFbnRyeTxLLCBWPihlLmtleSBhcyBLLCBlLnZhbHVlIGFzIFYpKTsKICB9CgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgZm9yICh2YXIgZW50cnkgaW4gZW50cmllcykgewogICAgICBfc291cmNlW2VudHJ5LmtleSBhcyBTS10gPSBlbnRyeS52YWx1ZSBhcyBTVjsKICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEsga2V5LCBWIHZhbHVlKSkgewogICAgX3NvdXJjZS5yZW1vdmVXaGVyZSgoU0sga2V5LCBTViB2YWx1ZSkgPT4gdGVzdChrZXkgYXMgSywgdmFsdWUgYXMgVikpOwogIH0KfQoKY2xhc3MgQ2FzdFF1ZXVlPFMsIFQ+IGV4dGVuZHMgX0Nhc3RJdGVyYWJsZUJhc2U8UywgVD4gaW1wbGVtZW50cyBRdWV1ZTxUPiB7CiAgZmluYWwgUXVldWU8Uz4gX3NvdXJjZTsKICBDYXN0UXVldWUodGhpcy5fc291cmNlKTsKICBRdWV1ZTxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RRdWV1ZTxTLCBSPihfc291cmNlKTsKCiAgVCByZW1vdmVGaXJzdCgpID0+IF9zb3VyY2UucmVtb3ZlRmlyc3QoKSBhcyBUOwogIFQgcmVtb3ZlTGFzdCgpID0+IF9zb3VyY2UucmVtb3ZlTGFzdCgpIGFzIFQ7CgogIHZvaWQgYWRkKFQgdmFsdWUpIHsKICAgIF9zb3VyY2UuYWRkKHZhbHVlIGFzIFMpOwogIH0KCiAgdm9pZCBhZGRGaXJzdChUIHZhbHVlKSB7CiAgICBfc291cmNlLmFkZEZpcnN0KHZhbHVlIGFzIFMpOwogIH0KCiAgdm9pZCBhZGRMYXN0KFQgdmFsdWUpIHsKICAgIF9zb3VyY2UuYWRkTGFzdCh2YWx1ZSBhcyBTKTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBvdGhlcikgPT4gX3NvdXJjZS5yZW1vdmUob3RoZXIpOwogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICBfc291cmNlLmFkZEFsbChuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KGVsZW1lbnRzKSk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfc291cmNlLnJlbW92ZVdoZXJlKChTIGVsZW1lbnQpID0+IHRlc3QoZWxlbWVudCBhcyBUKSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfc291cmNlLnJldGFpbldoZXJlKChTIGVsZW1lbnQpID0+IHRlc3QoZWxlbWVudCBhcyBUKSk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX3NvdXJjZS5jbGVhcigpOwogIH0KfQqBawBOTjwBGAEsAT0bAUgBQU06UAULDQ4PDgwNCwwODREREhMBJCctAU5OATslIycBOgE9KjU7RwErAgEyFx4pKQIBOx0BIAEtMD0GLQQBPAIBRCxCGQIBQxgXATYQDw8TDQ8NATMBKiEEASAdBAEWHQQBJDQEASkSTQQBIh0EASYpBAE0QAQBMT0EATYBOQEvASs8BAErPAQBLjwBUU8EASklBAE2MwQBQ0sEAgEzGRoBNAIBSBgBPycjKAEpATcBPTABJjYEATgBLSAEAS0gBAErPAQBKzwEAU4BK0BBBAEpQT8EAUJJIyRRBhMEATkBERUEARRJGRMEAR4BNAIBNB0BGQFGAUQBPAEyASYmBAE9SwEhNgQBNAERFQQBKSkfCAQBQQFFASQBJwEtATdNTAQBLVEEASkwTwQBNiE0BgQBMEsEAgFMGhs2ATEvARYdBAEbIgQBGiEEATYmNgQBKzwEASs8BAERFQQCARhkYXJ0Ol9pbnRlcm5hbC9jYXN0LmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ludGVybmFsL2xpc3QuZGFydK7RLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovKioKICogTWl4aW4gdGhhdCB0aHJvd3Mgb24gdGhlIGxlbmd0aCBjaGFuZ2luZyBvcGVyYXRpb25zIG9mIFtMaXN0XS4KICoKICogSW50ZW5kZWQgdG8gbWl4LWluIG9uIHRvcCBvZiBbTGlzdE1peGluXSBmb3IgZml4ZWQtbGVuZ3RoIGxpc3RzLgogKi8KYWJzdHJhY3QgY2xhc3MgRml4ZWRMZW5ndGhMaXN0TWl4aW48RT4gewogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCBhZGQoRSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIGluc2VydChpbnQgaW5kZXgsIEUgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCBpbnNlcnRBbGwoaW50IGF0LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2xlYXIgYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICBFIHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIEUgcmVtb3ZlTGFzdCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgcmVwbGFjZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KfQoKLyoqCiAqIE1peGluIGZvciBhbiB1bm1vZGlmaWFibGUgW0xpc3RdIGNsYXNzLgogKgogKiBUaGlzIG92ZXJyaWRlcyBhbGwgbXV0YXRpbmcgbWV0aG9kcyB3aXRoIG1ldGhvZHMgdGhhdCB0aHJvdy4KICogVGhpcyBtaXhpbiBpcyBpbnRlbmRlZCB0byBiZSBtaXhlZCBpbiBvbiB0b3Agb2YgW0xpc3RNaXhpbl0gb24KICogdW5tb2RpZmlhYmxlIGxpc3RzLgogKi8KYWJzdHJhY3QgY2xhc3MgVW5tb2RpZmlhYmxlTGlzdE1peGluPEU+IGltcGxlbWVudHMgTGlzdDxFPiB7CiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICBzZXQgZmlyc3QoRSBlbGVtZW50KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgc2V0IGxhc3QoRSBlbGVtZW50KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBzZXRBbGwoaW50IGF0LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgYWRkKEUgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIGluc2VydChpbnQgaW5kZXgsIEUgZWxlbWVudCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgaW5zZXJ0QWxsKGludCBhdCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHNvcnQoW0NvbXBhcmF0b3I8RT4gY29tcGFyZV0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2xlYXIgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIEUgcmVtb3ZlQXQoaW50IGluZGV4KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBFIHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbRSBmaWxsVmFsdWVdKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KfQoKLyoqCiAqIEFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIGEgZml4ZWQtbGVuZ3RoIGxpc3QuCiAqCiAqIEFsbCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIGBsZW5ndGhgLCBgb3BlcmF0b3JbXWAgYW5kCiAqIGBvcGVyYXRvcltdPWAsIHdoaWNoIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQuCiAqLwphYnN0cmFjdCBjbGFzcyBGaXhlZExlbmd0aExpc3RCYXNlPEU+ID0gTGlzdEJhc2U8RT4KICAgIHdpdGggRml4ZWRMZW5ndGhMaXN0TWl4aW48RT47CgovKioKICogQWJzdHJhY3QgaW1wbGVtZW50YXRpb24gb2YgYW4gdW5tb2RpZmlhYmxlIGxpc3QuCiAqCiAqIEFsbCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIGBsZW5ndGhgIGFuZCBgb3BlcmF0b3JbXWAsCiAqIHdoaWNoIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQuCiAqLwphYnN0cmFjdCBjbGFzcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxFPiA9IExpc3RCYXNlPEU+CiAgICB3aXRoIFVubW9kaWZpYWJsZUxpc3RNaXhpbjxFPjsKCmNsYXNzIF9MaXN0SW5kaWNlc0l0ZXJhYmxlIGV4dGVuZHMgTGlzdEl0ZXJhYmxlPGludD4gewogIExpc3QgX2JhY2tlZExpc3Q7CgogIF9MaXN0SW5kaWNlc0l0ZXJhYmxlKHRoaXMuX2JhY2tlZExpc3QpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfYmFja2VkTGlzdC5sZW5ndGg7CiAgaW50IGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZEluZGV4KGluZGV4LCB0aGlzKTsKICAgIHJldHVybiBpbmRleDsKICB9Cn0KCmNsYXNzIExpc3RNYXBWaWV3PEU+IGV4dGVuZHMgVW5tb2RpZmlhYmxlTWFwQmFzZTxpbnQsIEU+IHsKICBMaXN0PEU+IF92YWx1ZXM7CgogIExpc3RNYXBWaWV3KHRoaXMuX3ZhbHVlcyk7CgogIEUgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gY29udGFpbnNLZXkoa2V5KSA/IF92YWx1ZXNba2V5XSA6IG51bGw7CiAgaW50IGdldCBsZW5ndGggPT4gX3ZhbHVlcy5sZW5ndGg7CgogIEl0ZXJhYmxlPEU+IGdldCB2YWx1ZXMgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPihfdmFsdWVzLCAwLCBudWxsKTsKICBJdGVyYWJsZTxpbnQ+IGdldCBrZXlzID0+IG5ldyBfTGlzdEluZGljZXNJdGVyYWJsZShfdmFsdWVzKTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfdmFsdWVzLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfdmFsdWVzLmlzTm90RW1wdHk7CiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgPT4gX3ZhbHVlcy5jb250YWlucyh2YWx1ZSk7CiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBrZXkgaXMgaW50ICYmIGtleSA+PSAwICYmIGtleSA8IGxlbmd0aDsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihpbnQga2V5LCBFIHZhbHVlKSkgewogICAgaW50IGxlbmd0aCA9IF92YWx1ZXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBmKGksIF92YWx1ZXNbaV0pOwogICAgICBpZiAobGVuZ3RoICE9IF92YWx1ZXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihfdmFsdWVzKTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgUmV2ZXJzZWRMaXN0SXRlcmFibGU8RT4gZXh0ZW5kcyBMaXN0SXRlcmFibGU8RT4gewogIEl0ZXJhYmxlPEU+IF9zb3VyY2U7CiAgUmV2ZXJzZWRMaXN0SXRlcmFibGUodGhpcy5fc291cmNlKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX3NvdXJjZS5sZW5ndGg7CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgPT4gX3NvdXJjZS5lbGVtZW50QXQoX3NvdXJjZS5sZW5ndGggLSAxIC0gaW5kZXgpOwp9CgovKioKICogQ3JlYXRlcyBlcnJvcnMgdGhyb3duIGJ5IHVubW9kaWZpYWJsZSBsaXN0cyB3aGVuIHRoZXkgYXJlIGF0dGVtcHRlZCBtb2RpZmllZC4KICoKICogVGhpcyBjbGFzcyBjcmVhdGVzIFtVbnN1cHBvcnRlZEVycm9yXXMgd2l0aCBzcGVjaWFsaXplZCBtZXNzYWdlcy4KICovCmFic3RyYWN0IGNsYXNzIFVubW9kaWZpYWJsZUxpc3RFcnJvciB7CiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byBhZGQgZWxlbWVudHMgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgYWRkKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gdW5tb2RpZmlhYmxlIExpc3QiKTsKCiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byBhZGQgZWxlbWVudHMgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgY2hhbmdlKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdGhlIGNvbnRlbnQgb2YgYW4gdW5tb2RpZmlhYmxlIExpc3QiKTsKCiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byBjaGFuZ2UgdGhlIGxlbmd0aCBvZiBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBzdGF0aWMgVW5zdXBwb3J0ZWRFcnJvciBsZW5ndGgoKSA9PgogICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSBsZW5ndGggb2YgdW5tb2RpZmlhYmxlIExpc3QiKTsKCiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byByZW1vdmUgZWxlbWVudHMgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBzdGF0aWMgVW5zdXBwb3J0ZWRFcnJvciByZW1vdmUoKSA9PgogICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIHVubW9kaWZpYWJsZSBMaXN0Iik7Cn0KCi8qKgogKiBDcmVhdGVzIGVycm9ycyB0aHJvd24gYnkgbm9uLWdyb3dhYmxlIGxpc3RzIHdoZW4gdGhleSBhcmUgYXR0ZW1wdGVkIG1vZGlmaWVkLgogKgogKiBUaGlzIGNsYXNzIGNyZWF0ZXMgW1Vuc3VwcG9ydGVkRXJyb3JdcyB3aXRoIHNwZWNpYWxpemVkIG1lc3NhZ2VzLgogKi8KYWJzdHJhY3QgY2xhc3MgTm9uR3Jvd2FibGVMaXN0RXJyb3IgewogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gYWRkIGVsZW1lbnRzIHRvIGFuIG5vbi1ncm93YWJsZSBsaXN0LiAqLwogIHN0YXRpYyBVbnN1cHBvcnRlZEVycm9yIGFkZCgpID0+CiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIG5vbi1ncm93YWJsZSBMaXN0Iik7CgogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gY2hhbmdlIHRoZSBsZW5ndGggb2YgYW4gbm9uLWdyb3dhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgbGVuZ3RoKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgbGVuZ3RoIG9mIG5vbi1ncm93YWJsZSBMaXN0Iik7CgogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gbm9uLWdyb3dhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgcmVtb3ZlKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBub24tZ3Jvd2FibGUgTGlzdCIpOwp9CgovKioKICogQ29udmVydHMgYSBncm93YWJsZSBsaXN0IHRvIGEgZml4ZWQgbGVuZ3RoIGxpc3Qgd2l0aCB0aGUgc2FtZSBlbGVtZW50cy4KICoKICogRm9yIGludGVybmFsIHVzZSBvbmx5LgogKiBPbmx5IHdvcmtzIG9uIGdyb3dhYmxlIGxpc3RzIGFzIGNyZWF0ZWQgYnkgYFtdYCBvciBgbmV3IExpc3QoKWAuCiAqIE1heSB0aHJvdyBvbiBhbnkgb3RoZXIgbGlzdC4KICoKICogVGhlIG9wZXJhdGlvbiBpcyBlZmZpY2llbnQuIEl0IGRvZXNuJ3QgY29weSB0aGUgZWxlbWVudHMsIGJ1dCBjb252ZXJ0cwogKiB0aGUgZXhpc3RpbmcgbGlzdCBkaXJlY3RseSB0byBhIGZpeGVkIGxlbmd0aCBsaXN0LgogKiBUaGF0IG1lYW5zIHRoYXQgaXQgaXMgYSBkZXN0cnVjdGl2ZSBjb252ZXJzaW9uLgogKiBUaGUgb3JpZ2luYWwgbGlzdCBzaG91bGQgbm90IGJlIHVzZWQgYWZ0ZXJ3YXJkcy4KICoKICogVGhlIHJldHVybmVkIGxpc3QgbWF5IGJlIHRoZSBzYW1lIGxpc3QgYXMgdGhlIG9yaWdpbmFsLAogKiBvciBpdCBtYXkgYmUgYSBkaWZmZXJlbnQgbGlzdCAoYWNjb3JkaW5nIHRvIFtpZGVudGljYWxdKS4KICogVGhlIG9yaWdpbmFsIGxpc3QgbWF5IGhhdmUgY2hhbmdlZCB0eXBlIHRvIGJlIGEgZml4ZWQgbGlzdCwKICogb3IgYmVjb21lIGVtcHR5IG9yIGJlZW4gb3RoZXJ3aXNlIG1vZGlmaWVkLgogKiBJdCB3aWxsIHN0aWxsIGJlIGEgdmFsaWQgb2JqZWN0LCBzbyByZWZlcmVuY2VzIHRvIGl0IHdpbGwgbm90LCBlLmcuLCBjcmFzaAogKiB0aGUgcnVudGltZSBpZiBhY2Nlc3NlZCwgYnV0IG5vIHByb21pc2VzIGFyZSBtYWRlIHdydC4gaXRzIGNvbnRlbnRzLgogKgogKiBUaGlzIHVuc3BlY2lmaWVkIGJlaGF2aW9yIGlzIHRoZSByZWFzb24gdGhlIGZ1bmN0aW9uIGlzIG5vdCBleHBvc2VkIHRvCiAqIHVzZXJzLiBXZSBhbGxvdyB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiB0byBtYWtlIHRoZSBtb3N0IGVmZmljaWVudAogKiBjb252ZXJzaW9uLCBhdCB0aGUgY29zdCBvZiBsZWF2aW5nIHRoZSBvcmlnaW5hbCBsaXN0IGluIGFuIHVuc3BlY2lmaWVkCiAqIHN0YXRlLgogKi8KZXh0ZXJuYWwgTGlzdDxUPiBtYWtlTGlzdEZpeGVkTGVuZ3RoPFQ+KExpc3Q8VD4gZ3Jvd2FibGVMaXN0KTsKCi8qKgogKiBDb252ZXJ0cyBhIGZpeGVkLWxlbmd0aCBsaXN0IHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0LgogKgogKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAqIE9ubHkgd29ya3MgZm9yIGNvcmUgZml4ZWQtbGVuZ3RoIGxpc3RzIGFzIGNyZWF0ZWQgYnkgYG5ldyBMaXN0KGxlbmd0aClgLAogKiBvciBhcyByZXR1cm5lZCBieSBbbWFrZUxpc3RGaXhlZExlbmd0aF0uCiAqCiAqIFRoZSBvcGVyYXRpb24gaXMgZWZmaWNpZW50LiBJdCBkb2Vzbid0IGNvcHkgdGhlIGVsZW1lbnRzLCBidXQgY29udmVydHMKICogdGhlIGV4aXN0aW5nIGxpc3QgZGlyZWN0bHkgdG8gYSBmaXhlZCBsZW5ndGggbGlzdC4KICogVGhhdCBtZWFucyB0aGF0IGl0IGlzIGEgZGVzdHJ1Y3RpdmUgY29udmVyc2lvbi4KICogVGhlIG9yaWdpbmFsIGxpc3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGFmdGVyd2FyZHMuCiAqCiAqIFRoZSB1bm1vZGlmaWFibGUgbGlzdCB0eXBlIGlzIHNpbWlsYXIgdG8gdGhlIG9uZSB1c2VkIGJ5IGNvbnN0IGxpc3RzLgogKi8KZXh0ZXJuYWwgTGlzdDxUPiBtYWtlRml4ZWRMaXN0VW5tb2RpZmlhYmxlPFQ+KExpc3Q8VD4gZml4ZWRMZW5ndGhMaXN0KTsKgVcATk48ARgBBEIDRAQpQR4gPAQBQRZFBAFBJEUEAUExRQQBQSZFBAFBIEoEAUErSgQBQStKBAFBEUQEAUEaSgQBQRNKBAFBKUoEAUFASgQCAQQrA0BCFwQ9QipGBAFCHiA9BAEZRgQBGEYEAUIuRgQBQhZGBAFCJkYEAUIxRgQBQiZGBAFCIEsEAUIrSwQBQitLBAFCJ0YEAUIiRgQBQhFFBAFCGksEAUITSwQBQlFGBAFCKUsEAUJASwQBQjZGBAIBBDMDRTAENCIBBDQDRSEENSMBNxQBKgEoHS0SBAIBOxMBHQFHJAFGPwEnLT9KASshJxgmOAgGBAIBOBcmASQBSwIBBFEDRQQnSyM/AUsmUQFQJkkBUCZEAgEEUQNFBCZLIz8BUCZJAVAmRAIBBEsDGkQgA0o2MzQDOz0/L05IA0pMSgoEPwEEOQMaTCwDSjYzNANJBEgBGGRhcnQ6X2ludGVybmFsL2xpc3QuZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW50ZXJuYWwvc29ydC5kYXJ0r8UvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9pbnRlcm5hbDsKCi8qKgogKiBEdWFsLVBpdm90IFF1aWNrc29ydCBhbGdvcml0aG0uCiAqCiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgZHVhbC1waXZvdCBxdWlja3NvcnQgYWxnb3JpdGhtIGFzIHByZXNlbnRlZCBpbgogKiBWbGFkaW1pciBZYXJvc2xhdnNraXkncyBwYXBlci4KICoKICogU29tZSBpbXByb3ZlbWVudHMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIEFuZHJvaWQncyBpbXBsZW1lbnRhdGlvbi4KICovCmNsYXNzIFNvcnQgewogIC8vIFdoZW4gYSBsaXN0IGhhcyBsZXNzIHRoZW4gWzpfSU5TRVJUSU9OX1NPUlRfVEhSRVNIT0xEOl0gZWxlbWVudHMgaXQgd2lsbAogIC8vIGJlIHNvcnRlZCBieSBhbiBpbnNlcnRpb24gc29ydC4KICBzdGF0aWMgY29uc3QgaW50IF9JTlNFUlRJT05fU09SVF9USFJFU0hPTEQgPSAzMjsKCiAgLyoqCiAgICogU29ydHMgYWxsIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBsaXN0IFs6YTpdIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4KICAgKiBbOmNvbXBhcmU6XSBmdW5jdGlvbi4KICAgKgogICAqIFRoZSBbOmNvbXBhcmU6XSBmdW5jdGlvbiB0YWtlcyB0d28gYXJndW1lbnRzIFs6eDpdIGFuZCBbOnk6XSBhbmQgcmV0dXJucwogICAqICAtMSBpZiBbOnggPCB5Ol0sCiAgICogICAwIGlmIFs6eCA9PSB5Ol0sIGFuZAogICAqICAgMSBpZiBbOnggPiB5Ol0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24ncyBiZWhhdmlvciBtdXN0IGJlIGNvbnNpc3RlbnQuIEl0IG11c3Qgbm90IHJldHVybiBkaWZmZXJlbnQKICAgKiByZXN1bHRzIGZvciB0aGUgc2FtZSB2YWx1ZXMuCiAgICovCiAgc3RhdGljIHZvaWQgc29ydDxFPihMaXN0PEU+IGEsIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgX2RvU29ydChhLCAwLCBhLmxlbmd0aCAtIDEsIGNvbXBhcmUpOwogIH0KCiAgLyoqCiAgICogU29ydHMgYWxsIGVsZW1lbnRzIGluIHRoZSByYW5nZSBbOmZyb206XSAoaW5jbHVzaXZlKSB0byBbOnRvOl0gKGV4Y2x1c2l2ZSkKICAgKiBvZiB0aGUgZ2l2ZW4gbGlzdCBbOmE6XS4KICAgKgogICAqIElmIHRoZSBnaXZlbiByYW5nZSBpcyBpbnZhbGlkIGFuICJPdXRPZlJhbmdlIiBlcnJvciBpcyByYWlzZWQuCiAgICogVE9ETyhmbG9pdHNjaCk6IGRvIHdlIHdhbnQgYW4gZXJyb3I/CiAgICoKICAgKiBTZWUgWzpzb3J0Ol0gZm9yIHJlcXVpcmVtZW50cyBvZiB0aGUgWzpjb21wYXJlOl0gZnVuY3Rpb24uCiAgICovCiAgc3RhdGljIHZvaWQgc29ydFJhbmdlPEU+KExpc3Q8RT4gYSwgaW50IGZyb20sIGludCB0bywgaW50IGNvbXBhcmUoRSBhLCBFIGIpKSB7CiAgICBpZiAoKGZyb20gPCAwKSB8fCAodG8gPiBhLmxlbmd0aCkgfHwgKHRvIDwgZnJvbSkpIHsKICAgICAgdGhyb3cgIk91dE9mUmFuZ2UiOwogICAgfQogICAgX2RvU29ydChhLCBmcm9tLCB0byAtIDEsIGNvbXBhcmUpOwogIH0KCiAgLyoqCiAgICogU29ydHMgdGhlIGxpc3QgaW4gdGhlIGludGVydmFsIFs6bGVmdDpdIHRvIFs6cmlnaHQ6XSAoYm90aCBpbmNsdXNpdmUpLgogICAqLwogIHN0YXRpYyB2b2lkIF9kb1NvcnQ8RT4oCiAgICAgIExpc3Q8RT4gYSwgaW50IGxlZnQsIGludCByaWdodCwgaW50IGNvbXBhcmUoRSBhLCBFIGIpKSB7CiAgICBpZiAoKHJpZ2h0IC0gbGVmdCkgPD0gX0lOU0VSVElPTl9TT1JUX1RIUkVTSE9MRCkgewogICAgICBfaW5zZXJ0aW9uU29ydChhLCBsZWZ0LCByaWdodCwgY29tcGFyZSk7CiAgICB9IGVsc2UgewogICAgICBfZHVhbFBpdm90UXVpY2tzb3J0KGEsIGxlZnQsIHJpZ2h0LCBjb21wYXJlKTsKICAgIH0KICB9CgogIHN0YXRpYyB2b2lkIF9pbnNlcnRpb25Tb3J0PEU+KAogICAgICBMaXN0PEU+IGEsIGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgZm9yIChpbnQgaSA9IGxlZnQgKyAxOyBpIDw9IHJpZ2h0OyBpKyspIHsKICAgICAgdmFyIGVsID0gYVtpXTsKICAgICAgaW50IGogPSBpOwogICAgICB3aGlsZSAoKGogPiBsZWZ0KSAmJiAoY29tcGFyZShhW2ogLSAxXSwgZWwpID4gMCkpIHsKICAgICAgICBhW2pdID0gYVtqIC0gMV07CiAgICAgICAgai0tOwogICAgICB9CiAgICAgIGFbal0gPSBlbDsKICAgIH0KICB9CgogIHN0YXRpYyB2b2lkIF9kdWFsUGl2b3RRdWlja3NvcnQ8RT4oCiAgICAgIExpc3Q8RT4gYSwgaW50IGxlZnQsIGludCByaWdodCwgaW50IGNvbXBhcmUoRSBhLCBFIGIpKSB7CiAgICBhc3NlcnQocmlnaHQgLSBsZWZ0ID4gX0lOU0VSVElPTl9TT1JUX1RIUkVTSE9MRCk7CgogICAgLy8gQ29tcHV0ZSB0aGUgdHdvIHBpdm90cyBieSBsb29raW5nIGF0IDUgZWxlbWVudHMuCiAgICBpbnQgc2l4dGggPSAocmlnaHQgLSBsZWZ0ICsgMSkgfi8gNjsKICAgIGludCBpbmRleDEgPSBsZWZ0ICsgc2l4dGg7CiAgICBpbnQgaW5kZXg1ID0gcmlnaHQgLSBzaXh0aDsKICAgIGludCBpbmRleDMgPSAobGVmdCArIHJpZ2h0KSB+LyAyOyAvLyBUaGUgbWlkcG9pbnQuCiAgICBpbnQgaW5kZXgyID0gaW5kZXgzIC0gc2l4dGg7CiAgICBpbnQgaW5kZXg0ID0gaW5kZXgzICsgc2l4dGg7CgogICAgdmFyIGVsMSA9IGFbaW5kZXgxXTsKICAgIHZhciBlbDIgPSBhW2luZGV4Ml07CiAgICB2YXIgZWwzID0gYVtpbmRleDNdOwogICAgdmFyIGVsNCA9IGFbaW5kZXg0XTsKICAgIHZhciBlbDUgPSBhW2luZGV4NV07CgogICAgLy8gU29ydCB0aGUgc2VsZWN0ZWQgNSBlbGVtZW50cyB1c2luZyBhIHNvcnRpbmcgbmV0d29yay4KICAgIGlmIChjb21wYXJlKGVsMSwgZWwyKSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDE7CiAgICAgIGVsMSA9IGVsMjsKICAgICAgZWwyID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsNCwgZWw1KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDQ7CiAgICAgIGVsNCA9IGVsNTsKICAgICAgZWw1ID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMSwgZWwzKSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDE7CiAgICAgIGVsMSA9IGVsMzsKICAgICAgZWwzID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMiwgZWwzKSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDI7CiAgICAgIGVsMiA9IGVsMzsKICAgICAgZWwzID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMSwgZWw0KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDE7CiAgICAgIGVsMSA9IGVsNDsKICAgICAgZWw0ID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMywgZWw0KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDM7CiAgICAgIGVsMyA9IGVsNDsKICAgICAgZWw0ID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMiwgZWw1KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDI7CiAgICAgIGVsMiA9IGVsNTsKICAgICAgZWw1ID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMiwgZWwzKSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDI7CiAgICAgIGVsMiA9IGVsMzsKICAgICAgZWwzID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsNCwgZWw1KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDQ7CiAgICAgIGVsNCA9IGVsNTsKICAgICAgZWw1ID0gdDsKICAgIH0KCiAgICB2YXIgcGl2b3QxID0gZWwyOwogICAgdmFyIHBpdm90MiA9IGVsNDsKCiAgICAvLyBlbDIgYW5kIGVsNCBoYXZlIGJlZW4gc2F2ZWQgaW4gdGhlIHBpdm90IHZhcmlhYmxlcy4gVGhleSB3aWxsIGJlIHdyaXR0ZW4KICAgIC8vIGJhY2ssIG9uY2UgdGhlIHBhcnRpdGlvbmluZyBpcyBmaW5pc2hlZC4KICAgIGFbaW5kZXgxXSA9IGVsMTsKICAgIGFbaW5kZXgzXSA9IGVsMzsKICAgIGFbaW5kZXg1XSA9IGVsNTsKCiAgICBhW2luZGV4Ml0gPSBhW2xlZnRdOwogICAgYVtpbmRleDRdID0gYVtyaWdodF07CgogICAgaW50IGxlc3MgPSBsZWZ0ICsgMTsgLy8gRmlyc3QgZWxlbWVudCBpbiB0aGUgbWlkZGxlIHBhcnRpdGlvbi4KICAgIGludCBncmVhdCA9IHJpZ2h0IC0gMTsgLy8gTGFzdCBlbGVtZW50IGluIHRoZSBtaWRkbGUgcGFydGl0aW9uLgoKICAgIGJvb2wgcGl2b3RzX2FyZV9lcXVhbCA9IChjb21wYXJlKHBpdm90MSwgcGl2b3QyKSA9PSAwKTsKICAgIGlmIChwaXZvdHNfYXJlX2VxdWFsKSB7CiAgICAgIHZhciBwaXZvdCA9IHBpdm90MTsKICAgICAgLy8gRGVnZW5lcmF0ZWQgY2FzZSB3aGVyZSB0aGUgcGFydGl0aW9uaW5nIGJlY29tZXMgYSBEdXRjaCBuYXRpb25hbCBmbGFnCiAgICAgIC8vIHByb2JsZW0uCiAgICAgIC8vCiAgICAgIC8vIFsgfCAgPCBwaXZvdCAgfCA9PSBwaXZvdCB8IHVucGFydGl0aW9uZWQgfCA+IHBpdm90ICB8IF0KICAgICAgLy8gIF4gICAgICAgICAgICAgXiAgICAgICAgICBeICAgICAgICAgICAgIF4gICAgICAgICAgICBeCiAgICAgIC8vIGxlZnQgICAgICAgICBsZXNzICAgICAgICAgayAgICAgICAgICAgZ3JlYXQgICAgICAgICByaWdodAogICAgICAvLwogICAgICAvLyBhW2xlZnRdIGFuZCBhW3JpZ2h0XSBhcmUgdW5kZWZpbmVkIGFuZCBhcmUgZmlsbGVkIGFmdGVyIHRoZQogICAgICAvLyBwYXJ0aXRpb25pbmcuCiAgICAgIC8vCiAgICAgIC8vIEludmFyaWFudHM6CiAgICAgIC8vICAgMSkgZm9yIHggaW4gXWxlZnQsIGxlc3NbIDogeCA8IHBpdm90LgogICAgICAvLyAgIDIpIGZvciB4IGluIFtsZXNzLCBrWyA6IHggPT0gcGl2b3QuCiAgICAgIC8vICAgMykgZm9yIHggaW4gXWdyZWF0LCByaWdodFsgOiB4ID4gcGl2b3QuCiAgICAgIGZvciAoaW50IGsgPSBsZXNzOyBrIDw9IGdyZWF0OyBrKyspIHsKICAgICAgICB2YXIgYWsgPSBhW2tdOwogICAgICAgIGludCBjb21wID0gY29tcGFyZShhaywgcGl2b3QpOwogICAgICAgIGlmIChjb21wID09IDApIGNvbnRpbnVlOwogICAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgICAgaWYgKGsgIT0gbGVzcykgewogICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgYVtsZXNzXSA9IGFrOwogICAgICAgICAgfQogICAgICAgICAgbGVzcysrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBjb21wID4gMC4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBlbGVtZW50IDw9IHBpdm90IGluIHRoZSByYW5nZSBbayAtIDEsIGdyZWF0XSBhbmQKICAgICAgICAgIC8vIHB1dCBbOmFrOl0gdGhlcmUuIFdlIGtub3cgdGhhdCBzdWNoIGFuIGVsZW1lbnQgbXVzdCBleGlzdDoKICAgICAgICAgIC8vIFdoZW4gayA9PSBsZXNzLCB0aGVuIGVsMyAod2hpY2ggaXMgZXF1YWwgdG8gcGl2b3QpIGxpZXMgaW4gdGhlCiAgICAgICAgICAvLyBpbnRlcnZhbC4gT3RoZXJ3aXNlIGFbayAtIDFdID09IHBpdm90IGFuZCB0aGUgc2VhcmNoIHN0b3BzIGF0IGstMS4KICAgICAgICAgIC8vIE5vdGUgdGhhdCBpbiB0aGUgbGF0dGVyIGNhc2UgaW52YXJpYW50IDIgd2lsbCBiZSB2aW9sYXRlZCBmb3IgYQogICAgICAgICAgLy8gc2hvcnQgYW1vdW50IG9mIHRpbWUuIFRoZSBpbnZhcmlhbnQgd2lsbCBiZSByZXN0b3JlZCB3aGVuIHRoZQogICAgICAgICAgLy8gcGl2b3RzIGFyZSBwdXQgaW50byB0aGVpciBmaW5hbCBwb3NpdGlvbnMuCiAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QpOwogICAgICAgICAgICBpZiAoY29tcCA+IDApIHsKICAgICAgICAgICAgICBncmVhdC0tOwogICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgbG9jYXRpb24gaW4gdGhlIHdoaWxlLWxvb3Agd2hlcmUgYSBuZXcKICAgICAgICAgICAgICAvLyBpdGVyYXRpb24gaXMgc3RhcnRlZC4KICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wIDwgMCkgewogICAgICAgICAgICAgIC8vIFRyaXBsZSBleGNoYW5nZS4KICAgICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgICBhW2xlc3MrK10gPSBhW2dyZWF0XTsKICAgICAgICAgICAgICBhW2dyZWF0LS1dID0gYWs7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gY29tcCA9PSAwOwogICAgICAgICAgICAgIGFba10gPSBhW2dyZWF0XTsKICAgICAgICAgICAgICBhW2dyZWF0LS1dID0gYWs7CiAgICAgICAgICAgICAgLy8gTm90ZTogaWYgZ3JlYXQgPCBrIHRoZW4gd2Ugd2lsbCBleGl0IHRoZSBvdXRlciBsb29wIGFuZCBmaXgKICAgICAgICAgICAgICAvLyBpbnZhcmlhbnQgMiAod2hpY2ggd2UganVzdCB2aW9sYXRlZCkuCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFdlIHBhcnRpdGlvbiB0aGUgbGlzdCBpbnRvIHRocmVlIHBhcnRzOgogICAgICAvLyAgMS4gPCBwaXZvdDEKICAgICAgLy8gIDIuID49IHBpdm90MSAmJiA8PSBwaXZvdDIKICAgICAgLy8gIDMuID4gcGl2b3QyCiAgICAgIC8vCiAgICAgIC8vIER1cmluZyB0aGUgbG9vcCB3ZSBoYXZlOgogICAgICAvLyBbIHwgPCBwaXZvdDEgfCA+PSBwaXZvdDEgJiYgPD0gcGl2b3QyIHwgdW5wYXJ0aXRpb25lZCAgfCA+IHBpdm90MiAgfCBdCiAgICAgIC8vICBeICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgIF4gICAgICAgICAgICAgXgogICAgICAvLyBsZWZ0ICAgICAgICAgbGVzcyAgICAgICAgICAgICAgICAgICAgIGsgICAgICAgICAgICAgIGdyZWF0ICAgICAgICByaWdodAogICAgICAvLwogICAgICAvLyBhW2xlZnRdIGFuZCBhW3JpZ2h0XSBhcmUgdW5kZWZpbmVkIGFuZCBhcmUgZmlsbGVkIGFmdGVyIHRoZQogICAgICAvLyBwYXJ0aXRpb25pbmcuCiAgICAgIC8vCiAgICAgIC8vIEludmFyaWFudHM6CiAgICAgIC8vICAgMS4gZm9yIHggaW4gXWxlZnQsIGxlc3NbIDogeCA8IHBpdm90MQogICAgICAvLyAgIDIuIGZvciB4IGluIFtsZXNzLCBrWyA6IHBpdm90MSA8PSB4ICYmIHggPD0gcGl2b3QyCiAgICAgIC8vICAgMy4gZm9yIHggaW4gXWdyZWF0LCByaWdodFsgOiB4ID4gcGl2b3QyCiAgICAgIGZvciAoaW50IGsgPSBsZXNzOyBrIDw9IGdyZWF0OyBrKyspIHsKICAgICAgICB2YXIgYWsgPSBhW2tdOwogICAgICAgIGludCBjb21wX3Bpdm90MSA9IGNvbXBhcmUoYWssIHBpdm90MSk7CiAgICAgICAgaWYgKGNvbXBfcGl2b3QxIDwgMCkgewogICAgICAgICAgaWYgKGsgIT0gbGVzcykgewogICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgYVtsZXNzXSA9IGFrOwogICAgICAgICAgfQogICAgICAgICAgbGVzcysrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnQgY29tcF9waXZvdDIgPSBjb21wYXJlKGFrLCBwaXZvdDIpOwogICAgICAgICAgaWYgKGNvbXBfcGl2b3QyID4gMCkgewogICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgIGludCBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QyKTsKICAgICAgICAgICAgICBpZiAoY29tcCA+IDApIHsKICAgICAgICAgICAgICAgIGdyZWF0LS07CiAgICAgICAgICAgICAgICBpZiAoZ3JlYXQgPCBrKSBicmVhazsKICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgbG9jYXRpb24gaW5zaWRlIHRoZSBsb29wIHdoZXJlIGEgbmV3CiAgICAgICAgICAgICAgICAvLyBpdGVyYXRpb24gaXMgc3RhcnRlZC4KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBhW2dyZWF0XSA8PSBwaXZvdDIuCiAgICAgICAgICAgICAgICBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QxKTsKICAgICAgICAgICAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgICAgICAgICAgICAvLyBUcmlwbGUgZXhjaGFuZ2UuCiAgICAgICAgICAgICAgICAgIGFba10gPSBhW2xlc3NdOwogICAgICAgICAgICAgICAgICBhW2xlc3MrK10gPSBhW2dyZWF0XTsKICAgICAgICAgICAgICAgICAgYVtncmVhdC0tXSA9IGFrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gYVtncmVhdF0gPj0gcGl2b3QxLgogICAgICAgICAgICAgICAgICBhW2tdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgICAgIGFbZ3JlYXQtLV0gPSBhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIE1vdmUgcGl2b3RzIGludG8gdGhlaXIgZmluYWwgcG9zaXRpb25zLgogICAgLy8gV2Ugc2hydW5rIHRoZSBsaXN0IGZyb20gYm90aCBzaWRlcyAoYVtsZWZ0XSBhbmQgYVtyaWdodF0gaGF2ZQogICAgLy8gbWVhbmluZ2xlc3MgdmFsdWVzIGluIHRoZW0pIGFuZCBub3cgd2UgbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBmaXJzdAogICAgLy8gYW5kIHRoaXJkIHBhcnRpdGlvbiBpbnRvIHRoZXNlIGxvY2F0aW9ucyBzbyB0aGF0IHdlIGNhbiBzdG9yZSB0aGUKICAgIC8vIHBpdm90cy4KICAgIGFbbGVmdF0gPSBhW2xlc3MgLSAxXTsKICAgIGFbbGVzcyAtIDFdID0gcGl2b3QxOwogICAgYVtyaWdodF0gPSBhW2dyZWF0ICsgMV07CiAgICBhW2dyZWF0ICsgMV0gPSBwaXZvdDI7CgogICAgLy8gVGhlIGxpc3QgaXMgbm93IHBhcnRpdGlvbmVkIGludG8gdGhyZWUgcGFydGl0aW9uczoKICAgIC8vIFsgPCBwaXZvdDEgICB8ID49IHBpdm90MSAmJiA8PSBwaXZvdDIgICB8ICA+IHBpdm90MiAgIF0KICAgIC8vICBeICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgXgogICAgLy8gbGVmdCAgICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICAgICBncmVhdCAgICAgICAgcmlnaHQKCiAgICAvLyBSZWN1cnNpdmUgZGVzY2VudC4gKERvbid0IGluY2x1ZGUgdGhlIHBpdm90IHZhbHVlcy4pCiAgICBfZG9Tb3J0KGEsIGxlZnQsIGxlc3MgLSAyLCBjb21wYXJlKTsKICAgIF9kb1NvcnQoYSwgZ3JlYXQgKyAyLCByaWdodCwgY29tcGFyZSk7CgogICAgaWYgKHBpdm90c19hcmVfZXF1YWwpIHsKICAgICAgLy8gQWxsIGVsZW1lbnRzIGluIHRoZSBzZWNvbmQgcGFydGl0aW9uIGFyZSBlcXVhbCB0byB0aGUgcGl2b3QuIE5vCiAgICAgIC8vIG5lZWQgdG8gc29ydCB0aGVtLgogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gSW4gdGhlb3J5IGl0IHNob3VsZCBiZSBlbm91Z2ggdG8gY2FsbCBfZG9Tb3J0IHJlY3Vyc2l2ZWx5IG9uIHRoZSBzZWNvbmQKICAgIC8vIHBhcnRpdGlvbi4KICAgIC8vIFRoZSBBbmRyb2lkIHNvdXJjZSBob3dldmVyIHJlbW92ZXMgdGhlIHBpdm90IGVsZW1lbnRzIGZyb20gdGhlIHJlY3Vyc2l2ZQogICAgLy8gY2FsbCBpZiB0aGUgc2Vjb25kIHBhcnRpdGlvbiBpcyB0b28gbGFyZ2UgKG1vcmUgdGhhbiAyLzMgb2YgdGhlIGxpc3QpLgogICAgaWYgKGxlc3MgPCBpbmRleDEgJiYgZ3JlYXQgPiBpbmRleDUpIHsKICAgICAgd2hpbGUgKGNvbXBhcmUoYVtsZXNzXSwgcGl2b3QxKSA9PSAwKSB7CiAgICAgICAgbGVzcysrOwogICAgICB9CiAgICAgIHdoaWxlIChjb21wYXJlKGFbZ3JlYXRdLCBwaXZvdDIpID09IDApIHsKICAgICAgICBncmVhdC0tOwogICAgICB9CgogICAgICAvLyBDb3B5IHBhc3RlIG9mIHRoZSBwcmV2aW91cyAzLXdheSBwYXJ0aXRpb25pbmcgd2l0aCBhZGFwdGlvbnMuCiAgICAgIC8vCiAgICAgIC8vIFdlIHBhcnRpdGlvbiB0aGUgbGlzdCBpbnRvIHRocmVlIHBhcnRzOgogICAgICAvLyAgMS4gPT0gcGl2b3QxCiAgICAgIC8vICAyLiA+IHBpdm90MSAmJiA8IHBpdm90MgogICAgICAvLyAgMy4gPT0gcGl2b3QyCiAgICAgIC8vCiAgICAgIC8vIER1cmluZyB0aGUgbG9vcCB3ZSBoYXZlOgogICAgICAvLyBbID09IHBpdm90MSB8ID4gcGl2b3QxICYmIDwgcGl2b3QyIHwgdW5wYXJ0aXRpb25lZCAgfCA9PSBwaXZvdDIgXQogICAgICAvLyAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICBeCiAgICAgIC8vICAgICAgICAgICAgbGVzcyAgICAgICAgICAgICAgICAgICAgIGsgICAgICAgICAgICAgIGdyZWF0CiAgICAgIC8vCiAgICAgIC8vIEludmFyaWFudHM6CiAgICAgIC8vICAgMS4gZm9yIHggaW4gWyAqLCBsZXNzWyA6IHggPT0gcGl2b3QxCiAgICAgIC8vICAgMi4gZm9yIHggaW4gW2xlc3MsIGtbIDogcGl2b3QxIDwgeCAmJiB4IDwgcGl2b3QyCiAgICAgIC8vICAgMy4gZm9yIHggaW4gXWdyZWF0LCAqIF0gOiB4ID09IHBpdm90MgogICAgICBmb3IgKGludCBrID0gbGVzczsgayA8PSBncmVhdDsgaysrKSB7CiAgICAgICAgdmFyIGFrID0gYVtrXTsKICAgICAgICBpbnQgY29tcF9waXZvdDEgPSBjb21wYXJlKGFrLCBwaXZvdDEpOwogICAgICAgIGlmIChjb21wX3Bpdm90MSA9PSAwKSB7CiAgICAgICAgICBpZiAoayAhPSBsZXNzKSB7CiAgICAgICAgICAgIGFba10gPSBhW2xlc3NdOwogICAgICAgICAgICBhW2xlc3NdID0gYWs7CiAgICAgICAgICB9CiAgICAgICAgICBsZXNzKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGludCBjb21wX3Bpdm90MiA9IGNvbXBhcmUoYWssIHBpdm90Mik7CiAgICAgICAgICBpZiAoY29tcF9waXZvdDIgPT0gMCkgewogICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgIGludCBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QyKTsKICAgICAgICAgICAgICBpZiAoY29tcCA9PSAwKSB7CiAgICAgICAgICAgICAgICBncmVhdC0tOwogICAgICAgICAgICAgICAgaWYgKGdyZWF0IDwgaykgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGxvY2F0aW9uIGluc2lkZSB0aGUgbG9vcCB3aGVyZSBhIG5ldwogICAgICAgICAgICAgICAgLy8gaXRlcmF0aW9uIGlzIHN0YXJ0ZWQuCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gYVtncmVhdF0gPCBwaXZvdDIuCiAgICAgICAgICAgICAgICBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QxKTsKICAgICAgICAgICAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgICAgICAgICAgICAvLyBUcmlwbGUgZXhjaGFuZ2UuCiAgICAgICAgICAgICAgICAgIGFba10gPSBhW2xlc3NdOwogICAgICAgICAgICAgICAgICBhW2xlc3MrK10gPSBhW2dyZWF0XTsKICAgICAgICAgICAgICAgICAgYVtncmVhdC0tXSA9IGFrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gYVtncmVhdF0gPT0gcGl2b3QxLgogICAgICAgICAgICAgICAgICBhW2tdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgICAgIGFbZ3JlYXQtLV0gPSBhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvLyBUaGUgc2Vjb25kIHBhcnRpdGlvbiBoYXMgbm93IGJlZW4gY2xlYXJlZCBvZiBwaXZvdCBlbGVtZW50cyBhbmQgbG9va3MKICAgICAgLy8gYXMgZm9sbG93czoKICAgICAgLy8gWyAgKiAgfCAgPiBwaXZvdDEgJiYgPCBwaXZvdDIgIHwgKiBdCiAgICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgLy8gICAgICAgbGVzcyAgICAgICAgICAgICAgICAgIGdyZWF0CiAgICAgIC8vIFNvcnQgdGhlIHNlY29uZCBwYXJ0aXRpb24gdXNpbmcgcmVjdXJzaXZlIGRlc2NlbnQuCiAgICAgIF9kb1NvcnQoYSwgbGVzcywgZ3JlYXQsIGNvbXBhcmUpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhlIHNlY29uZCBwYXJ0aXRpb24gbG9va3MgYXMgZm9sbG93czoKICAgICAgLy8gWyAgKiAgfCAgPj0gcGl2b3QxICYmIDw9IHBpdm90MiAgfCAqIF0KICAgICAgLy8gICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgIC8vICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICAgIGdyZWF0CiAgICAgIC8vIFNpbXBseSBzb3J0IGl0IGJ5IHJlY3Vyc2l2ZSBkZXNjZW50LgogICAgICBfZG9Tb3J0KGEsIGxlc3MsIGdyZWF0LCBjb21wYXJlKTsKICAgIH0KICB9Cn0KgYMATk48ARgBBCMDTCIDRQQNTiUzAQZHGwVOFxwXBU4iBjoqBAEGUB4FRCoFQAZROBoGJwQBBkwGGj83Lw00BgQBIT8uFRE6GQ0IEQYEASY/NgE4KR8gNyEhARkZGRkZAT0hExEPBiETEQ8GIRMRDwYhExEPBiETEQ8GIRMRDwYhExEPBiETEQ8GIRMRDwYBFhYBUDAVFRUBGRoBQ0QBPBwaTxIJQUBDCUUXCRUxLzMsFychGBscGgwSERcNTUhMUE1LOBktHBdJJxgjIh4kHxUVHB8fTTcVDgwKCA0xFiQWCSJQT1EJRRcJFTE+MywXLx8bHBoMEhExIRs0HhkmSSkaFycyICYiKCMZKSMjEhcQDgwKCAYBL0VLSQ8bGh0bATo/PkABPCkrARxJHA4GAU8SUE4rLhAILxEIAUcJMRciFwkiSz5CCRUwPDEsFy8gGxwaDBIRMSIbNB8ZJkkpGhcmMiAmIigjGSkjIxIXEA4MCghPFS4pKzwoDTAwKy0uKAYEAgEYZGFydDpfaW50ZXJuYWwvc29ydC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9zeW1ib2wuZGFydJK3Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovKioKICogSW1wbGVtZW50YXRpb24gb2YgW2NvcmUuU3ltYm9sXS4gIFRoaXMgY2xhc3MgdXNlcyB0aGUgc2FtZSBuYW1lIGFzCiAqIGEgY29yZSBjbGFzcyBzbyBhIHVzZXIgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZS4KICoKICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBoaWRlIFtfbmFtZV0gZnJvbSB1c2VyIGNvZGUsIGJ1dAogKiBtYWtlIGl0IGFjY2Vzc2libGUgdG8gRGFydCBwbGF0Zm9ybSBjb2RlIHZpYSB0aGUgc3RhdGljIG1ldGhvZAogKiBbZ2V0TmFtZV0uCiAqLwpjbGFzcyBTeW1ib2wgaW1wbGVtZW50cyBjb3JlLlN5bWJvbCB7CiAgZmluYWwgU3RyaW5nIF9uYW1lOwoKICAvKioKICAgKiBTb3VyY2Ugb2YgUmVnRXhwIG1hdGNoaW5nIERhcnQgcmVzZXJ2ZWQgd29yZHMuCiAgICoKICAgKiBSZXNlcnZlZCB3b3JkcyBhcmUgbm90IGFsbG93ZWQgYXMgaWRlbnRpZmllcnMuCiAgICovCiAgc3RhdGljIGNvbnN0IFN0cmluZyByZXNlcnZlZFdvcmRSRSA9CiAgICAgIHInKD86YXNzZXJ0fGJyZWFrfGMoPzphKD86c2V8dGNoKXxsYXNzfG9uKD86c3R8dGludWUpKXxkKD86ZWZhdWx0fG8pfCcKICAgICAgcidlKD86bHNlfG51bXx4dGVuZHMpfGYoPzphbHNlfGluYWwoPzpseSk/fG9yKXxpW2Zuc118big/OmV3fHVsbCl8JwogICAgICByJ3JldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8JwogICAgICByJ3YoPzphcnxvaWQpfHcoPzpoaWxlfGl0aCkpJzsKICAvKioKICAgKiBTb3VyY2Ugb2YgUmVnRXhwIG1hdGNoaW5nIGFueSBwdWJsaWMgaWRlbnRpZmllci4KICAgKgogICAqIEEgcHVibGljIGlkZW50aWZpZXIgaXMgYSB2YWxpZCBpZGVudGlmaWVyIChub3QgYSByZXNlcnZlZCB3b3JkKQogICAqIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoICdfJy4KICAgKi8KICBzdGF0aWMgY29uc3QgU3RyaW5nIHB1YmxpY0lkZW50aWZpZXJSRSA9CiAgICAgIHInKD8hJyAnJHJlc2VydmVkV29yZFJFJyByJ1xiKD8hXCQpKVthLXpBLVokXVtcdyRdKic7CiAgLyoqCiAgICogU291cmNlIG9mIFJlZ0V4cCBtYXRjaGluZyBhbnkgaWRlbnRpZmllci4KICAgKgogICAqIEl0IG1hdGNoZXMgaWRlbnRpZmllcnMgYnV0IG5vdCByZXNlcnZlZCB3b3Jkcy4gVGhlIGlkZW50aWZpZXJzCiAgICogbWF5IHN0YXJ0IHdpdGggJ18nLgogICAqLwogIHN0YXRpYyBjb25zdCBTdHJpbmcgaWRlbnRpZmllclJFID0KICAgICAgcicoPyEnICckcmVzZXJ2ZWRXb3JkUkUnIHInXGIoPyFcJCkpW2EtekEtWiRfXVtcdyRdKic7CiAgLyoqCiAgICogU291cmNlIG9mIFJlZ0V4cCBtYXRjaGluZyBhIGRlY2xhcmFibGUgb3BlcmF0b3IgbmFtZXMuCiAgICoKICAgKiBUaGUgb3BlcmF0b3JzIHRoYXQgY2FuIGJlIGRlY2xhcmVkIHVzaW5nIGBvcGVyYXRvcmAgZGVjbGFyYXRpb25zIGFyZQogICAqIGFsc28gdGhlIG9ubHkgb25lcyBhbGxvd2VkIGFzIHN5bWJvbHMuIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRvcnMgaXMKICAgKiB0aGUgc2FtZSBhcyB0aGUgb3BlcmF0b3IgaXRzZWxmIGV4Y2VwdCBmb3IgdW5hcnkgbWludXMsIHdoZXJlIHRoZSBuYW1lCiAgICogaXMgInVuYXJ5LSIuCiAgICovCiAgc3RhdGljIGNvbnN0IFN0cmluZyBvcGVyYXRvclJFID0KICAgICAgcicoPzpbXC0rKi8lJnxeXXxcW1xdPT98PT18fi8/fDxbPD1dP3w+Wz49XT98dW5hcnktKSc7CgogIC8vIEdyYW1tYXIgaWYgc3ltYm9sczoKICAvLyAgICBzeW1ib2wgOjo9IHF1YWxpZmllZE5hbWUgfCA8ZW1wdHk+CiAgLy8gICAgcXVhbGlmaWVkTmFtZSA6Oj0gcHVibGljSWRlbnRpZmllciAnLicgcXVhbGlmaWVkTmFtZSB8IG5hbWUKICAvLyAgICBuYW1lIDo6PSBwdWJsaWNJZGVudGlmaWVyCiAgLy8gICAgICAgICAgIHwgcHVibGljSWRlbnRpZmllciAnPScKICAvLyAgICAgICAgICAgfCBvcGVyYXRvcgogIC8vIHdoZXJlIHB1YmxpY0lkZW50aWZpZXIgaXMgYW55IHZhbGlkIGlkZW50aWZpZXIgKG5vdCBhIHJlc2VydmVkIHdvcmQpCiAgLy8gdGhhdCBpc24ndCBwcml2YXRlIChkb2Vzbid0IHN0YXJ0IHdpdGggJ18nKS4KICAvLwogIC8vIFJhaWxyb2FkIGRpYWdyYW0gb2YgdGhlIGFjY2VwdGVkIGdyYW1tYXI6CiAgLy8KICAvLyAgICAvLS0tLS0tLS0tLS0tLS0tLVwKICAvLyAgICB8ICAgICAgICAgICAgICAgIHwKICAvLyAgICB8ICAgICAgICAgIC8tWy5dLS8gICAgIC8tWz1dLVwKICAvLyAgICBcICAgICAgICAgLyAgICAgICAgICAgLyAgICAgICBcCiAgLy8gIC0tLS0tLS1baWRdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KICAvLyAgICAgICBcICAgICAgICAgICAgICAgICAgICAgLwogIC8vICAgICAgICBcLS0tLS0tW29wZXJhdG9yXS0tLS8KICAvLyAgICAgICAgICAgIFwgICAgICAgICAgICAgIC8KICAvLyAgICAgICAgICAgICBcLS0tLS0tLS0tLS0tLwogIC8vCgogIC8qKgogICAqIFJlZ0V4cCB0aGF0IHZhbGlkYXRlcyBhIG5vbi1lbXB0eSBub24tcHJpdmF0ZSBzeW1ib2wuCiAgICoKICAgKiBUaGUgZW1wdHkgc3ltYm9sIGlzIGhhbmRsZWQgYmVmb3JlIHRoaXMgcmVnZXhwIGlzIHVzZWQsIGFuZCBpcyBub3QKICAgKiBhY2NlcHRlZC4KICAgKi8KICBzdGF0aWMgZmluYWwgUmVnRXhwIHB1YmxpY1N5bWJvbFBhdHRlcm4gPSBuZXcgUmVnRXhwKAogICAgICAnXig/OiRvcGVyYXRvclJFXCR8JHB1YmxpY0lkZW50aWZpZXJSRSg/Oj0/XCR8Wy5dKD8hXCQpKSkrP1wkJyk7CgogIC8vIFRoZSBncmFtbWFyIG9mIHN5bWJvbHMgdGhhdCBtYXkgYmUgcHJpdmF0ZSBpcyB0aGUgc2FtZSBhcyBmb3IgcHVibGljCiAgLy8gc3ltYm9scywgZXhjZXB0IHRoYXQgInB1YmxpY0lkZW50aWZpZXIiIGlzIHJlcGxhY2VkIGJ5ICJpZGVudGlmaWVyIiwKICAvLyB3aGljaCBtYXRjaGVzIGFueSBpZGVudGlmaWVyLgoKICAvKioKICAgKiBSZWdFeHAgdGhhdCB2YWxpZGF0ZXMgYSBub24tZW1wdHkgc3ltYm9sLgogICAqCiAgICogUHJpdmF0ZSBzeW1ib2xzIGFyZSBhY2NlcHRlZC4KICAgKgogICAqIFRoZSBlbXB0eSBzeW1ib2wgaXMgaGFuZGxlZCBiZWZvcmUgdGhpcyByZWdleHAgaXMgdXNlZCwgYW5kIGlzIG5vdAogICAqIGFjY2VwdGVkLgogICAqLwogIHN0YXRpYyBmaW5hbCBSZWdFeHAgc3ltYm9sUGF0dGVybiA9CiAgICAgIG5ldyBSZWdFeHAoJ14oPzokb3BlcmF0b3JSRVwkfCRpZGVudGlmaWVyUkUoPzo9P1wkfFsuXSg/IVwkKSkpKz9cJCcpOwoKICBleHRlcm5hbCBjb25zdCBTeW1ib2woU3RyaW5nIG5hbWUpOwoKICAvKioKICAgKiBQbGF0Zm9ybS1wcml2YXRlIG1ldGhvZCB1c2VkIGJ5IHRoZSBtaXJyb3Igc3lzdGVtIHRvIGNyZWF0ZQogICAqIG90aGVyd2lzZSBpbnZhbGlkIG5hbWVzLgogICAqLwogIGNvbnN0IFN5bWJvbC51bnZhbGlkYXRlZCh0aGlzLl9uYW1lKTsKCiAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgZGFydDJqcy4KICBTeW1ib2wudmFsaWRhdGVkKFN0cmluZyBuYW1lKSA6IHRoaXMuX25hbWUgPSB2YWxpZGF0ZVB1YmxpY1N5bWJvbChuYW1lKTsKCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gb3RoZXIgaXMgU3ltYm9sICYmIF9uYW1lID09IG90aGVyLl9uYW1lOwoKICBleHRlcm5hbCBpbnQgZ2V0IGhhc2hDb2RlOwoKICBleHRlcm5hbCB0b1N0cmluZygpOwoKICAvLy8gUGxhdGZvcm0tcHJpdmF0ZSBhY2Nlc3NvciB3aGljaCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gdXNlciBsaWJyYXJpZXMuCiAgc3RhdGljIFN0cmluZyBnZXROYW1lKFN5bWJvbCBzeW1ib2wpID0+IHN5bWJvbC5fbmFtZTsKCiAgc3RhdGljIFN0cmluZyB2YWxpZGF0ZVB1YmxpY1N5bWJvbChTdHJpbmcgbmFtZSkgewogICAgaWYgKG5hbWUuaXNFbXB0eSB8fCBwdWJsaWNTeW1ib2xQYXR0ZXJuLmhhc01hdGNoKG5hbWUpKSByZXR1cm4gbmFtZTsKICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ18nKSkgewogICAgICAvLyBUaGVyZSBtYXkgYmUgb3RoZXIgcHJpdmF0ZSBwYXJ0cyBpbiBhIHF1YWxpZmllZCBuYW1lIHRoYW4gdGhlIGZpcnN0CiAgICAgIC8vIG9uZSwgYnV0IHRoaXMgaXMgYSBjb21tb24gY2FzZSB0aGF0IGRlc2VydmVzIGEgc3BlY2lmaWMgZXJyb3IKICAgICAgLy8gbWVzc2FnZS4KICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJyIkbmFtZSIgaXMgYSBwcml2YXRlIGlkZW50aWZpZXInKTsKICAgIH0KICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCciJG5hbWUiIGlzIG5vdCBhIHZhbGlkIChxdWFsaWZpZWQpIHN5bWJvbCBuYW1lJyk7CiAgfQoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciBuYW1lIGlzIGEgdmFsaWQgc3ltYm9sIG5hbWUuCiAgICoKICAgKiBUaGlzIHRlc3QgYWxsb3dzIGJvdGggcHJpdmF0ZSBhbmQgbm9uLXByaXZhdGUgc3ltYm9scy4KICAgKi8KICBzdGF0aWMgYm9vbCBpc1ZhbGlkU3ltYm9sKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gKG5hbWUuaXNFbXB0eSB8fCBzeW1ib2xQYXR0ZXJuLmhhc01hdGNoKG5hbWUpKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgY29tcHV0ZVVubWFuZ2xlZE5hbWUoU3ltYm9sIHN5bWJvbCk7Cn0KgJAATk48ARgBBEY1A0RCDgQmFgEGNAU0BidNSkUlBjYFRSIGKzwGLwVEGQYlPQY8BUpJTBIGIz0BGStEIiYaSjIFLwUbGycoLCMiISAFAQY7BUgPBjhHAUpKIwEGLwUjBUgPBiZMASYBBkEeBigBIEsBRgEdARcBTDgBNEkgTUcSQgZPBAEGMQU8Bis7BAE+AgEaZGFydDpfaW50ZXJuYWwvc3ltYm9sLmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9zeW1ib2xfcGF0Y2guZGFydIaDLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImludGVybmFsX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFN5bWJvbCB7CiAgQHBhdGNoCiAgY29uc3QgU3ltYm9sKFN0cmluZyBuYW1lKSA6IHRoaXMuX25hbWUgPSBuYW1lOwoKICBAcGF0Y2gKICB0b1N0cmluZygpID0+ICdTeW1ib2woIiR7Y29tcHV0ZVVubWFuZ2xlZE5hbWUodGhpcyl9IiknOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbm1hbmdsZWROYW1lKFN5bWJvbCBzeW1ib2wpIHsKICAgIFN0cmluZyBzdHJpbmcgPSBTeW1ib2wuZ2V0TmFtZShzeW1ib2wpOwoKICAgIC8vIGdldDpmb28gLT4gZm9vCiAgICAvLyBzZXQ6Zm9vIC0+IGZvbz0KICAgIC8vIGdldDpfZm9vQHh4eCAtPiBfZm9vCiAgICAvLyBzZXQ6X2Zvb0B4eHggLT4gX2Zvbz0KICAgIC8vIENsYXNzLl9jb25zdHJ1Y3RvckB4eHggLT4gQ2xhc3MuX2NvbnN0cnVjdG9yCiAgICAvLyBfQ2xhc3NAeHh4Ll9jb25zdHJ1Y3RvckB4eHggLT4gX0NsYXNzLl9jb25zdHJ1Y3RvcgogICAgLy8gbGliLl9TQHh4eCB3aXRoIGxpYi5fTTFAeHh4LCBsaWIuX00yQHh4eCAtPiBsaWIuX1Mgd2l0aCBsaWIuX00xLCBsaWIuX00yCiAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYm9vbCBhZGRfc2V0dGVyX3N1ZmZpeCA9IGZhbHNlOwogICAgdmFyIHBvcyA9IDA7CiAgICBpZiAoc3RyaW5nLmxlbmd0aCA+PSA0ICYmIHN0cmluZ1szXSA9PSAnOicpIHsKICAgICAgLy8gRHJvcCAnZ2V0Oicgb3IgJ3NldDonIHByZWZpeC4KICAgICAgcG9zID0gNDsKICAgICAgaWYgKHN0cmluZ1swXSA9PSAncycpIHsKICAgICAgICBhZGRfc2V0dGVyX3N1ZmZpeCA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIC8vIFNraXAgZXZlcnl0aGluZyBiZXR3ZWVuIEFUIGFuZCBQRVJJT0QsIFNQQUNFLCBDT01NQSBvciBFTkQKICAgIGJvb2wgc2tpcCA9IGZhbHNlOwogICAgZm9yICg7IHBvcyA8IHN0cmluZy5sZW5ndGg7IHBvcysrKSB7CiAgICAgIHZhciBjaGFyID0gc3RyaW5nW3Bvc107CiAgICAgIGlmIChjaGFyID09ICdAJykgewogICAgICAgIHNraXAgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gJy4nIHx8IGNoYXIgPT0gJyAnIHx8IGNoYXIgPT0gJywnKSB7CiAgICAgICAgc2tpcCA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmICghc2tpcCkgewogICAgICAgIHJlc3VsdC53cml0ZShjaGFyKTsKICAgICAgfQogICAgfQogICAgaWYgKGFkZF9zZXR0ZXJfc3VmZml4KSB7CiAgICAgIHJlc3VsdC53cml0ZSgnPScpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgQHBhdGNoCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBjb25zdCBhcmJpdHJhcnlQcmltZSA9IDY2NDU5NzsKICAgIHJldHVybiAweDFmZmZmZmZmICYgKGFyYml0cmFyeVByaW1lICogX25hbWUuaGFzaENvZGUpOwogIH0KfQo+AE5OPAEiAQcPCTEBCTsBCTYsARYXHB00OlAuJBEyJw8eIggGQhcpHhkVPhYIExwIBh0ZBh4EAQkVIzsEAgEmZGFydDpfaW50ZXJuYWwtcGF0Y2gvc3ltYm9sX3BhdGNoLmRhcnQ1b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ludGVybmFsL2xpbmtlZF9saXN0LmRhcnSMxS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2ludGVybmFsOwoKLy8vIEEgcnVkaW1lbnRhcnkgbGlua2VkIGxpc3QuCmNsYXNzIExpbmtlZExpc3Q8VCBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxUPj4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8VD4gewogIFQgZmlyc3Q7CiAgVCBsYXN0OwogIGludCBsZW5ndGggPSAwOwoKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICAvKioKICAgKiBBZGRzIFtuZXdMYXN0XSB0byB0aGUgZW5kIG9mIHRoaXMgbGlua2VkIGxpc3QuCiAgICovCiAgdm9pZCBhZGQoVCBuZXdMYXN0KSB7CiAgICBhc3NlcnQobmV3TGFzdC5fbmV4dCA9PSBudWxsICYmIG5ld0xhc3QuX3ByZXZpb3VzID09IG51bGwpOwogICAgaWYgKGxhc3QgIT0gbnVsbCkgewogICAgICBhc3NlcnQobGFzdC5fbmV4dCA9PSBudWxsKTsKICAgICAgbGFzdC5fbmV4dCA9IG5ld0xhc3Q7CiAgICB9IGVsc2UgewogICAgICBmaXJzdCA9IG5ld0xhc3Q7CiAgICB9CiAgICBuZXdMYXN0Ll9wcmV2aW91cyA9IGxhc3Q7CiAgICBsYXN0ID0gbmV3TGFzdDsKICAgIGxhc3QuX2xpc3QgPSB0aGlzOwogICAgbGVuZ3RoKys7CiAgfQoKICAvKioKICAgKiBBZGRzIFtuZXdGaXJzdF0gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGxpbmtlZCBsaXN0LgogICAqLwogIHZvaWQgYWRkRmlyc3QoVCBuZXdGaXJzdCkgewogICAgaWYgKGZpcnN0ICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KGZpcnN0Ll9wcmV2aW91cyA9PSBudWxsKTsKICAgICAgZmlyc3QuX3ByZXZpb3VzID0gbmV3Rmlyc3Q7CiAgICB9IGVsc2UgewogICAgICBsYXN0ID0gbmV3Rmlyc3Q7CiAgICB9CiAgICBuZXdGaXJzdC5fbmV4dCA9IGZpcnN0OwogICAgZmlyc3QgPSBuZXdGaXJzdDsKICAgIGZpcnN0Ll9saXN0ID0gdGhpczsKICAgIGxlbmd0aCsrOwogIH0KCiAgLyoqCiAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gW25vZGVdIGZyb20gdGhpcyBsaXN0LgogICAqCiAgICogSWYgdGhlIGVudHJ5IGlzIG5vdCBpbiB0aGlzIGxpbmtlZCBsaXN0IG5vdGhpbmcgaGFwcGVucy4KICAgKgogICAqIEFsc28gc2VlIFtMaW5rZWRMaXN0RW50cnkudW5saW5rXS4KICAgKi8KICB2b2lkIHJlbW92ZShUIG5vZGUpIHsKICAgIGlmIChub2RlLl9saXN0ICE9IHRoaXMpIHJldHVybjsKICAgIGxlbmd0aC0tOwogICAgaWYgKG5vZGUuX3ByZXZpb3VzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChub2RlLCBmaXJzdCkpOwogICAgICBmaXJzdCA9IG5vZGUuX25leHQ7CiAgICB9IGVsc2UgewogICAgICBub2RlLl9wcmV2aW91cy5fbmV4dCA9IG5vZGUuX25leHQ7CiAgICB9CiAgICBpZiAobm9kZS5fbmV4dCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChpZGVudGljYWwobm9kZSwgbGFzdCkpOwogICAgICBsYXN0ID0gbm9kZS5fcHJldmlvdXM7CiAgICB9IGVsc2UgewogICAgICBub2RlLl9uZXh0Ll9wcmV2aW91cyA9IG5vZGUuX3ByZXZpb3VzOwogICAgfQogICAgbm9kZS5fbmV4dCA9IG5vZGUuX3ByZXZpb3VzID0gbnVsbDsKICAgIG5vZGUuX2xpc3QgPSBudWxsOwogIH0KCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfTGlua2VkTGlzdEl0ZXJhdG9yPFQ+KHRoaXMpOwp9CgpjbGFzcyBMaW5rZWRMaXN0RW50cnk8VCBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxUPj4gewogIFQgX25leHQ7CiAgVCBfcHJldmlvdXM7CiAgTGlua2VkTGlzdDxUPiBfbGlzdDsKCiAgLyoqCiAgICogVW5saW5rcyB0aGUgZWxlbWVudCBmcm9tIGl0cyBsaW5rZWQgbGlzdC4KICAgKgogICAqIElmIHRoZSBlbnRyeSBpcyBub3QgaW4gYSBsaW5rZWQgbGlzdCwgZG9lcyBub3RoaW5nLiBPdGhlcndpc2UsIHRoaXMKICAgKiBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgW0xpbmtlZExpc3QucmVtb3ZlXSBvbiB0aGUgbGlzdCB0aGlzIGVudHJ5CiAgICogaXMgY3VycmVudGx5IGluLgogICAqLwogIHZvaWQgdW5saW5rKCkgewogICAgaWYgKF9saXN0ID09IG51bGwpIHJldHVybjsKICAgIF9saXN0LnJlbW92ZSh0aGlzKTsKICB9Cn0KCmNsYXNzIF9MaW5rZWRMaXN0SXRlcmF0b3I8VCBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxUPj4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgLy8vIFRoZSBjdXJyZW50IGVsZW1lbnQgb2YgdGhlIGl0ZXJhdG9yLgogIC8vIFRoaXMgZmllbGQgaXMgd3JpdGVhYmxlLCBidXQgc2hvdWxkIG9ubHkgcmVhZCBieSB1c2VycyBvZiB0aGlzIGNsYXNzLgogIFQgY3VycmVudDsKCiAgLy8vIFRoZSBsaXN0IHRoZSBpdGVyYXRvciBpdGVyYXRlcyBvdmVyLgogIC8vLwogIC8vLyBTZXQgdG8gW251bGxdIGlmIHRoZSBwcm92aWRlZCBsaXN0IHdhcyBlbXB0eSAoaW5kaWNhdGluZyB0aGF0IHRoZXJlIHdlcmUKICAvLy8gbm8gZW50cmllcyB0byBpdGVyYXRlIG92ZXIpLgogIC8vLwogIC8vLyBTZXQgdG8gW251bGxdIGFzIHNvb24gYXMgW21vdmVOZXh0XSB3YXMgaW52b2tlZCAoaW5kaWNhdGluZyB0aGF0IHRoZQogIC8vLyBpdGVyYXRvciBoYXMgdG8gd29yayB3aXRoIFtjdXJyZW50XSBmcm9tIG5vdyBvbi4KICBMaW5rZWRMaXN0PFQ+IF9saXN0OwoKICBfTGlua2VkTGlzdEl0ZXJhdG9yKHRoaXMuX2xpc3QpIHsKICAgIGlmIChfbGlzdC5sZW5ndGggPT0gMCkgX2xpc3QgPSBudWxsOwogIH0KCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIC8vIGN1cnJlbnQgaXMgbnVsbCBpZiB0aGUgaXRlcmF0b3IgaGFzbid0IHN0YXJ0ZWQgaXRlcmF0aW5nLCBvciBpZiB0aGUKICAgIC8vIGl0ZXJhdGlvbiBpcyBmaW5pc2hlZC4gSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBbX2xpc3RdIGZpZWxkIGlzIG5vdCBudWxsLgogICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgewogICAgICBpZiAoX2xpc3QgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBhc3NlcnQoX2xpc3QubGVuZ3RoID4gMCk7CiAgICAgIGN1cnJlbnQgPSBfbGlzdC5maXJzdDsKICAgICAgX2xpc3QgPSBudWxsOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9uZXh0OwogICAgcmV0dXJuIGN1cnJlbnQgIT0gbnVsbDsKICB9Cn0KgIAATk48ARgBH0kLChIBIwEGNAYYQBgiHA0XBh4UFw4EAQY7Bh4ZJyINFwYcFhgOBAEGLgU+BSgGGCQOIiYaDSkGHiUdDS0GKBcEAUACATYLDxcBBi8FSUkWBhIfGAQCAVErSw0BKwZPIwZLNxcBJCkEARRLUBsnIB0UEwYdHAQCAR9kYXJ0Ol9pbnRlcm5hbC9saW5rZWRfbGlzdC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvcHJpbnRfcGF0Y2guZGFydIL8Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImludGVybmFsX3BhdGNoLmRhcnQiOwoKLy8gQSBwcmludC1jbG9zdXJlIGdldHMgYSBTdHJpbmcgdGhhdCBzaG91bGQgYmUgcHJpbnRlZC4gSW4gZ2VuZXJhbCB0aGUKLy8gc3RyaW5nIGlzIGEgbGluZSwgYnV0IGl0IG1heSBjb250YWluICJcbiIgY2hhcmFjdGVycy4KdHlwZWRlZiB2b2lkIF9QcmludENsb3N1cmUoU3RyaW5nIGxpbmUpOwoKQHBhdGNoCnZvaWQgcHJpbnRUb0NvbnNvbGUoU3RyaW5nIGxpbmUpIHsKICBfcHJpbnRDbG9zdXJlKGxpbmUpOwp9Cgp2b2lkIF91bnN1cHBvcnRlZFByaW50KFN0cmluZyBsaW5lKSB7CiAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIidwcmludCcgaXMgbm90IHN1cHBvcnRlZCIpOwp9CgovLyBfcHJpbnRDbG9zdXJlIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZW1iZWRkZXIgdG8gc3VwcGx5IGEgZGlmZmVyZW50Ci8vIHByaW50IGltcGxlbWVudGF0aW9uLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCl9QcmludENsb3N1cmUgX3ByaW50Q2xvc3VyZSA9IF91bnN1cHBvcnRlZFByaW50OwoZAE5OPAEiAUg5KQEHIxcCASY6AgFKGRoxASVkYXJ0Ol9pbnRlcm5hbC1wYXRjaC9wcmludF9wYXRjaC5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9wcmludC5kYXJ0gjUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9pbnRlcm5hbDsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzIHNldCBieSB0aGUgZmlyc3QgYWxsb2NhdGlvbiBvZiBhIFpvbmUuCiAqCiAqIE9uY2UgdGhlIGZ1bmN0aW9uIGlzIHNldCB0aGUgY29yZSBgcHJpbnRgIGZ1bmN0aW9uIGNhbGxzIHRoaXMgY2xvc3VyZSBpbnN0ZWFkCiAqIG9mIFtwcmludFRvQ29uc29sZV0uCiAqCiAqIFRoaXMgZGVjb3VwbGVzIHRoZSBjb3JlIGxpYnJhcnkgZnJvbSB0aGUgYXN5bmMgbGlicmFyeS4KICovCnZvaWQgRnVuY3Rpb24oU3RyaW5nKSBwcmludFRvWm9uZSA9IG51bGw7CgpleHRlcm5hbCB2b2lkIHByaW50VG9Db25zb2xlKFN0cmluZyBsaW5lKTsKEwBOTjwBGAEEOwNRGAM7BCoBKwEZZGFydDpfaW50ZXJuYWwvcHJpbnQuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaXNvbGF0ZS9pc29sYXRlLmRhcnTAAHd2Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qKgogKiBDb25jdXJyZW50IHByb2dyYW1taW5nIHVzaW5nIF9pc29sYXRlc186CiAqIGluZGVwZW5kZW50IHdvcmtlcnMgdGhhdCBhcmUgc2ltaWxhciB0byB0aHJlYWRzCiAqIGJ1dCBkb24ndCBzaGFyZSBtZW1vcnksCiAqIGNvbW11bmljYXRpbmcgb25seSB2aWEgbWVzc2FnZXMuCiAqCiAqIFRvIHVzZSB0aGlzIGxpYnJhcnkgaW4geW91ciBjb2RlOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0Omlzb2xhdGUnOwogKgogKiB7QGNhdGVnb3J5IFZNfQogKi8KbGlicmFyeSBkYXJ0Lmlzb2xhdGU7CgppbXBvcnQgImRhcnQ6YXN5bmMiOwppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IFNpbmNlOwppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBCeXRlQnVmZmVyLCBUeXBlZERhdGEsIFVpbnQ4TGlzdDsKCnBhcnQgImNhcGFiaWxpdHkuZGFydCI7CgovKioKICogVGhyb3duIHdoZW4gYW4gaXNvbGF0ZSBjYW5ub3QgYmUgY3JlYXRlZC4KICovCmNsYXNzIElzb2xhdGVTcGF3bkV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgLyoqIEVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYnkgdGhlIHNwYXduIG9wZXJhdGlvbi4gKi8KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgSXNvbGF0ZVNwYXduRXhjZXB0aW9uKHRoaXMubWVzc2FnZSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIklzb2xhdGVTcGF3bkV4Y2VwdGlvbjogJG1lc3NhZ2UiOwp9CgovKioKICogQW4gaXNvbGF0ZWQgRGFydCBleGVjdXRpb24gY29udGV4dC4KICoKICogQWxsIERhcnQgY29kZSBydW5zIGluIGFuIGlzb2xhdGUsIGFuZCBjb2RlIGNhbiBhY2Nlc3MgY2xhc3NlcyBhbmQgdmFsdWVzCiAqIG9ubHkgZnJvbSB0aGUgc2FtZSBpc29sYXRlLiBEaWZmZXJlbnQgaXNvbGF0ZXMgY2FuIGNvbW11bmljYXRlIGJ5IHNlbmRpbmcKICogdmFsdWVzIHRocm91Z2ggcG9ydHMgKHNlZSBbUmVjZWl2ZVBvcnRdLCBbU2VuZFBvcnRdKS4KICoKICogQW4gYElzb2xhdGVgIG9iamVjdCBpcyBhIHJlZmVyZW5jZSB0byBhbiBpc29sYXRlLCB1c3VhbGx5IGRpZmZlcmVudCBmcm9tCiAqIHRoZSBjdXJyZW50IGlzb2xhdGUuCiAqIEl0IHJlcHJlc2VudHMsIGFuZCBjYW4gYmUgdXNlZCB0byBjb250cm9sLCB0aGUgb3RoZXIgaXNvbGF0ZS4KICoKICogV2hlbiBzcGF3bmluZyBhIG5ldyBpc29sYXRlLCB0aGUgc3Bhd25pbmcgaXNvbGF0ZSByZWNlaXZlcyBhbiBgSXNvbGF0ZWAKICogb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmV3IGlzb2xhdGUgd2hlbiB0aGUgc3Bhd24gb3BlcmF0aW9uIHN1Y2NlZWRzLgogKgogKiBJc29sYXRlcyBydW4gY29kZSBpbiBpdHMgb3duIGV2ZW50IGxvb3AsIGFuZCBlYWNoIGV2ZW50IG1heSBydW4gc21hbGxlciB0YXNrcwogKiBpbiBhIG5lc3RlZCBtaWNyb3Rhc2sgcXVldWUuCiAqCiAqIEFuIGBJc29sYXRlYCBvYmplY3QgYWxsb3dzIG90aGVyIGlzb2xhdGVzIHRvIGNvbnRyb2wgdGhlIGV2ZW50IGxvb3AKICogb2YgdGhlIGlzb2xhdGUgdGhhdCBpdCByZXByZXNlbnRzLCBhbmQgdG8gaW5zcGVjdCB0aGUgaXNvbGF0ZSwKICogZm9yIGV4YW1wbGUgYnkgcGF1c2luZyB0aGUgaXNvbGF0ZSBvciBieSBnZXR0aW5nIGV2ZW50cyB3aGVuIHRoZSBpc29sYXRlCiAqIGhhcyBhbiB1bmNhdWdodCBlcnJvci4KICoKICogVGhlIFtjb250cm9sUG9ydF0gaWRlbnRpZmllcyBhbmQgZ2l2ZXMgYWNjZXNzIHRvIGNvbnRyb2xsaW5nIHRoZSBpc29sYXRlLAogKiBhbmQgdGhlIFtwYXVzZUNhcGFiaWxpdHldIGFuZCBbdGVybWluYXRlQ2FwYWJpbGl0eV0gZ3VhcmQgYWNjZXNzCiAqIHRvIHNvbWUgY29udHJvbCBvcGVyYXRpb25zLgogKiBGb3IgZXhhbXBsZSwgY2FsbGluZyBbcGF1c2VdIG9uIGFuIGBJc29sYXRlYCBvYmplY3QgY3JlYXRlZCB3aXRob3V0IGEKICogW3BhdXNlQ2FwYWJpbGl0eV0sIGhhcyBubyBlZmZlY3QuCiAqCiAqIFRoZSBgSXNvbGF0ZWAgb2JqZWN0IHByb3ZpZGVkIGJ5IGEgc3Bhd24gb3BlcmF0aW9uIHdpbGwgaGF2ZSB0aGUKICogY29udHJvbCBwb3J0IGFuZCBjYXBhYmlsaXRpZXMgbmVlZGVkIHRvIGNvbnRyb2wgdGhlIGlzb2xhdGUuCiAqIE5ldyBpc29sYXRlIG9iamVjdHMgY2FuIGJlIGNyZWF0ZWQgd2l0aG91dCBzb21lIG9mIHRoZXNlIGNhcGFiaWxpdGllcwogKiBpZiBuZWNlc3NhcnksIHVzaW5nIHRoZSBbSXNvbGF0ZS5Jc29sYXRlXSBjb25zdHJ1Y3Rvci4KICoKICogQW4gYElzb2xhdGVgIG9iamVjdCBjYW5ub3QgYmUgc2VudCBvdmVyIGEgYFNlbmRQb3J0YCwgYnV0IHRoZSBjb250cm9sIHBvcnQKICogYW5kIGNhcGFiaWxpdGllcyBjYW4gYmUgc2VudCwgYW5kIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbmluZwogKiBgSXNvbGF0ZWAgb2JqZWN0IGluIHRoZSByZWNlaXZpbmcgcG9ydCdzIGlzb2xhdGUuCiAqLwpjbGFzcyBJc29sYXRlIHsKICAvKiogQXJndW1lbnQgdG8gYHBpbmdgIGFuZCBga2lsbGA6IEFzayBmb3IgaW1tZWRpYXRlIGFjdGlvbi4gKi8KICBzdGF0aWMgY29uc3QgaW50IGltbWVkaWF0ZSA9IDA7CiAgLyoqIEFyZ3VtZW50IHRvIGBwaW5nYCBhbmQgYGtpbGxgOiBBc2sgZm9yIGFjdGlvbiBiZWZvcmUgdGhlIG5leHQgZXZlbnQuICovCiAgc3RhdGljIGNvbnN0IGludCBiZWZvcmVOZXh0RXZlbnQgPSAxOwoKICAvKioKICAgKiBDb250cm9sIHBvcnQgdXNlZCB0byBzZW5kIGNvbnRyb2wgbWVzc2FnZXMgdG8gdGhlIGlzb2xhdGUuCiAgICoKICAgKiBUaGUgY29udHJvbCBwb3J0IGlkZW50aWZpZXMgdGhlIGlzb2xhdGUuCiAgICoKICAgKiBBbiBgSXNvbGF0ZWAgb2JqZWN0IGFsbG93cyBzZW5kaW5nIGNvbnRyb2wgbWVzc2FnZXMKICAgKiB0aHJvdWdoIHRoZSBjb250cm9sIHBvcnQuCiAgICoKICAgKiBTb21lIGNvbnRyb2wgbWVzc2FnZXMgcmVxdWlyZSBhIHNwZWNpZmljIGNhcGFiaWxpdHkgdG8gYmUgcGFzc2VkIGFsb25nCiAgICogd2l0aCB0aGUgbWVzc2FnZSAoc2VlIFtwYXVzZUNhcGFiaWxpdHldIGFuZCBbdGVybWluYXRlQ2FwYWJpbGl0eV0pLAogICAqIG90aGVyd2lzZSB0aGUgbWVzc2FnZSBpcyBpZ25vcmVkIGJ5IHRoZSBpc29sYXRlLgogICAqLwogIGZpbmFsIFNlbmRQb3J0IGNvbnRyb2xQb3J0OwoKICAvKioKICAgKiBDYXBhYmlsaXR5IGdyYW50aW5nIHRoZSBhYmlsaXR5IHRvIHBhdXNlIHRoZSBpc29sYXRlLgogICAqCiAgICogVGhpcyBjYXBhYmlsaXR5IGlzIHJlcXVpcmVkIGJ5IFtwYXVzZV0uCiAgICogSWYgdGhlIGNhcGFiaWxpdHkgaXMgYG51bGxgLCBvciBpZiBpdCBpcyBub3QgdGhlIGNvcnJlY3QgcGF1c2UgY2FwYWJpbGl0eQogICAqIG9mIHRoZSBpc29sYXRlIGlkZW50aWZpZWQgYnkgW2NvbnRyb2xQb3J0XSwKICAgKiB0aGVuIGNhbGxzIHRvIFtwYXVzZV0gd2lsbCBoYXZlIG5vIGVmZmVjdC4KICAgKgogICAqIElmIHRoZSBpc29sYXRlIGlzIHNwYXduZWQgaW4gYSBwYXVzZWQgc3RhdGUsIHVzZSB0aGlzIGNhcGFiaWxpdHkgYXMKICAgKiBhcmd1bWVudCB0byB0aGUgW3Jlc3VtZV0gbWV0aG9kIGluIG9yZGVyIHRvIHJlc3VtZSB0aGUgcGF1c2VkIGlzb2xhdGUuCiAgICovCiAgZmluYWwgQ2FwYWJpbGl0eSBwYXVzZUNhcGFiaWxpdHk7CgogIC8qKgogICAqIENhcGFiaWxpdHkgZ3JhbnRpbmcgdGhlIGFiaWxpdHkgdG8gdGVybWluYXRlIHRoZSBpc29sYXRlLgogICAqCiAgICogVGhpcyBjYXBhYmlsaXR5IGlzIHJlcXVpcmVkIGJ5IFtraWxsXSBhbmQgW3NldEVycm9yc0ZhdGFsXS4KICAgKiBJZiB0aGUgY2FwYWJpbGl0eSBpcyBgbnVsbGAsIG9yIGlmIGl0IGlzIG5vdCB0aGUgY29ycmVjdCB0ZXJtaW5hdGlvbgogICAqIGNhcGFiaWxpdHkgb2YgdGhlIGlzb2xhdGUgaWRlbnRpZmllZCBieSBbY29udHJvbFBvcnRdLAogICAqIHRoZW4gY2FsbHMgdG8gdGhvc2UgbWV0aG9kcyB3aWxsIGhhdmUgbm8gZWZmZWN0LgogICAqLwogIGZpbmFsIENhcGFiaWxpdHkgdGVybWluYXRlQ2FwYWJpbGl0eTsKCiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIFtJc29sYXRlXSBkaXNwbGF5ZWQgZm9yIGRlYnVnIHB1cnBvc2VzLgogICAqCiAgICogVGhpcyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBgZGVidWdOYW1lYCBwYXJhbWV0ZXIgaW4gW3NwYXduXSBhbmQgW3NwYXduVXJpXS4KICAgKgogICAqIFRoaXMgbmFtZSBkb2VzIG5vdCB1bmlxdWVseSBpZGVudGlmeSBhbiBpc29sYXRlLiBNdWx0aXBsZSBpc29sYXRlcyBpbiB0aGUKICAgKiBzYW1lIHByb2Nlc3MgbWF5IGhhdmUgdGhlIHNhbWUgYGRlYnVnTmFtZWAuCiAgICoKICAgKiBGb3IgYSBnaXZlbiBpc29sYXRlLCB0aGlzIHZhbHVlIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHZhbHVlcyByZXR1cm5lZCBieQogICAqIGBEYXJ0X0RlYnVnTmFtZWAgaW4gdGhlIEMgZW1iZWRkaW5nIEFQSSBhbmQgdGhlIGBkZWJ1Z05hbWVgIHByb3BlcnR5IGluCiAgICogW0lzb2xhdGVNaXJyb3JdLgogICAqLwogIEBTaW5jZSgiMi4zIikKICBleHRlcm5hbCBTdHJpbmcgZ2V0IGRlYnVnTmFtZTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFtJc29sYXRlXSBvYmplY3Qgd2l0aCBhIHJlc3RyaWN0ZWQgc2V0IG9mIGNhcGFiaWxpdGllcy4KICAgKgogICAqIFRoZSBwb3J0IHNob3VsZCBiZSBhIGNvbnRyb2wgcG9ydCBmb3IgYW4gaXNvbGF0ZSwgYXMgdGFrZW4gZnJvbQogICAqIGFub3RoZXIgYElzb2xhdGVgIG9iamVjdC4KICAgKgogICAqIFRoZSBjYXBhYmlsaXRpZXMgc2hvdWxkIGJlIHRoZSBzdWJzZXQgb2YgdGhlIGNhcGFiaWxpdGllcyB0aGF0IGFyZQogICAqIGF2YWlsYWJsZSB0byB0aGUgb3JpZ2luYWwgaXNvbGF0ZS4KICAgKiBDYXBhYmlsaXRpZXMgb2YgYW4gaXNvbGF0ZSBhcmUgbG9ja2VkIHRvIHRoYXQgaXNvbGF0ZSwgYW5kIGhhdmUgbm8gZWZmZWN0CiAgICogYW55d2hlcmUgZWxzZSwgc28gdGhlIGNhcGFiaWxpdGllcyBzaG91bGQgY29tZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGUgYXMKICAgKiB0aGUgY29udHJvbCBwb3J0LgogICAqCiAgICogQ2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUgYW4gW0lzb2xhdGVdIG9iamVjdCBmcm9tIGEgY29udHJvbCBwb3J0LCBhbmQKICAgKiBhbnkgYXZhaWxhYmxlIGNhcGFiaWxpdGllcywgdGhhdCBoYXZlIGJlZW4gc2VudCB0aHJvdWdoIGEgW1NlbmRQb3J0XS4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqIElzb2xhdGUgaXNvbGF0ZSA9IGZpbmRTb21lSXNvbGF0ZSgpOwogICAqIElzb2xhdGUgcmVzdHJpY3RlZElzb2xhdGUgPSBuZXcgSXNvbGF0ZShpc29sYXRlLmNvbnRyb2xQb3J0KTsKICAgKiB1bnRydXN0ZWRDb2RlKHJlc3RyaWN0ZWRJc29sYXRlKTsKICAgKiBgYGAKICAgKiBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIG5ldyBgSXNvbGF0ZWAgb2JqZWN0IHRoYXQgY2Fubm90IGJlIHVzZWQgdG8KICAgKiBwYXVzZSBvciB0ZXJtaW5hdGUgdGhlIGlzb2xhdGUuIEFsbCB0aGUgdW50cnVzdGVkIGNvZGUgY2FuIGRvIGlzIHRvCiAgICogaW5zcGVjdCB0aGUgaXNvbGF0ZSBhbmQgc2VlIHVuY2F1Z2h0IGVycm9ycyBvciB3aGVuIGl0IHRlcm1pbmF0ZXMuCiAgICovCiAgSXNvbGF0ZSh0aGlzLmNvbnRyb2xQb3J0LCB7dGhpcy5wYXVzZUNhcGFiaWxpdHksIHRoaXMudGVybWluYXRlQ2FwYWJpbGl0eX0pOwoKICAvKioKICAgKiBSZXR1cm4gYW4gW0lzb2xhdGVdIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgaXNvbGF0ZS4KICAgKgogICAqIFRoZSBjdXJyZW50IGlzb2xhdGUgZm9yIGNvZGUgdXNpbmcgW2N1cnJlbnRdCiAgICogaXMgdGhlIGlzb2xhdGUgcnVubmluZyB0aGUgY29kZS4KICAgKgogICAqIFRoZSBpc29sYXRlIG9iamVjdCBwcm92aWRlcyB0aGUgY2FwYWJpbGl0aWVzIHJlcXVpcmVkIHRvIGluc3BlY3QsCiAgICogcGF1c2Ugb3Iga2lsbCB0aGUgaXNvbGF0ZSwgYW5kIGFsbG93cyBncmFudGluZyB0aGVzZSBjYXBhYmlsaXRpZXMKICAgKiB0byBvdGhlcnMuCiAgICoKICAgKiBJdCBpcyBwb3NzaWJsZSB0byBwYXVzZSB0aGUgY3VycmVudCBpc29sYXRlLCBidXQgZG9pbmcgc28gKndpdGhvdXQqCiAgICogZmlyc3QgcGFzc2luZyB0aGUgYWJpbGl0eSB0byByZXN1bWUgaXQgYWdhaW4gdG8gYW5vdGhlciBpc29sYXRlLAogICAqIGlzIGEgc3VyZSB3YXkgdG8gaGFuZyB5b3VyIHByb2dyYW0uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIElzb2xhdGUgZ2V0IGN1cnJlbnQ7CgogIC8qKgogICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgcGFja2FnZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50IGlzb2xhdGUsIGlmIGFueS4KICAgKgogICAqIFRoaXMgZ2V0dGVyIHJldHVybnMgYG51bGxgLCBhcyB0aGUgYHBhY2thZ2VzL2AgZGlyZWN0b3J5IGlzIG5vdCBzdXBwb3J0ZWQKICAgKiBpbiBEYXJ0IDIuCiAgICovCiAgQERlcHJlY2F0ZWQoJ3BhY2thZ2VzLyBkaXJlY3RvcnkgcmVzb2x1dGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIERhcnQgMi4nKQogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8VXJpPiBnZXQgcGFja2FnZVJvb3Q7CgogIC8qKgogICAqIFRoZSBwYWNrYWdlIHJvb3Qgb2YgdGhlIGN1cnJlbnQgaXNvbGF0ZSwgaWYgYW55LgogICAqCiAgICogSWYgdGhlIGlzb2xhdGUgaXMgdXNpbmcgYSBbcGFja2FnZVJvb3RdIG9yIHRoZSBpc29sYXRlIGhhcyBub3QgYmVlbgogICAqIHNldHVwIGZvciBwYWNrYWdlIHJlc29sdXRpb24sIHRoaXMgZ2V0dGVyIHJldHVybnMgYG51bGxgLCBvdGhlcndpc2UgaXQKICAgKiByZXR1cm5zIHRoZSBwYWNrYWdlIGNvbmZpZyBVUkkuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxVcmk+IGdldCBwYWNrYWdlQ29uZmlnOwoKICAvKioKICAgKiBNYXBzIGEgcGFja2FnZTogVVJJIHRvIGEgbm9uLXBhY2thZ2UgVXJpLgogICAqCiAgICogSWYgdGhlcmUgaXMgbm8gdmFsaWQgbWFwcGluZyBmcm9tIHRoZSBwYWNrYWdlOiBVUkkgaW4gdGhlIGN1cnJlbnQKICAgKiBpc29sYXRlLCB0aGVuIHRoaXMgY2FsbCByZXR1cm5zIGBudWxsYC4gTm9uLXBhY2thZ2U6IFVSSXMgYXJlCiAgICogcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFVyaT4gcmVzb2x2ZVBhY2thZ2VVcmkoVXJpIHBhY2thZ2VVcmkpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuZCBzcGF3bnMgYW4gaXNvbGF0ZSB0aGF0IHNoYXJlcyB0aGUgc2FtZSBjb2RlIGFzIHRoZSBjdXJyZW50CiAgICogaXNvbGF0ZS4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbZW50cnlQb2ludF0gc3BlY2lmaWVzIHRoZSBpbml0aWFsIGZ1bmN0aW9uIHRvIGNhbGwKICAgKiBpbiB0aGUgc3Bhd25lZCBpc29sYXRlLgogICAqIFRoZSBlbnRyeS1wb2ludCBmdW5jdGlvbiBpcyBpbnZva2VkIGluIHRoZSBuZXcgaXNvbGF0ZSB3aXRoIFttZXNzYWdlXQogICAqIGFzIHRoZSBvbmx5IGFyZ3VtZW50LgogICAqCiAgICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gb3IgYSBzdGF0aWMgbWV0aG9kCiAgICogdGhhdCBjYW4gYmUgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQsCiAgICogdGhhdCBpcywgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgZnVuY3Rpb24gdmFsdWUKICAgKiB3aGljaCBhY2NlcHRzIGF0IGxlYXN0IG9uZSBwb3NpdGlvbmFsIHBhcmFtZXRlcgogICAqIGFuZCBoYXMgYXQgbW9zdCBvbmUgcmVxdWlyZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXIuCiAgICogVGhlIGZ1bmN0aW9uIG1heSBhY2NlcHQgYW55IG51bWJlciBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzLAogICAqIGFzIGxvbmcgYXMgaXQgKmNhbiogYmUgY2FsbGVkIHdpdGgganVzdCBhIHNpbmdsZSBhcmd1bWVudC4KICAgKiBUaGUgZnVuY3Rpb24gbXVzdCBub3QgYmUgdGhlIHZhbHVlIG9mIGEgZnVuY3Rpb24gZXhwcmVzc2lvbgogICAqIG9yIGFuIGluc3RhbmNlIG1ldGhvZCB0ZWFyLW9mZi4KICAgKgogICAqIFVzdWFsbHkgdGhlIGluaXRpYWwgW21lc3NhZ2VdIGNvbnRhaW5zIGEgW1NlbmRQb3J0XSBzbwogICAqIHRoYXQgdGhlIHNwYXduZXIgYW5kIHNwYXduZWUgY2FuIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlci4KICAgKgogICAqIElmIHRoZSBbcGF1c2VkXSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGB0cnVlYCwKICAgKiB0aGUgaXNvbGF0ZSB3aWxsIHN0YXJ0IHVwIGluIGEgcGF1c2VkIHN0YXRlLAogICAqIGp1c3QgYmVmb3JlIGNhbGxpbmcgdGhlIFtlbnRyeVBvaW50XSBmdW5jdGlvbiB3aXRoIHRoZSBbbWVzc2FnZV0sCiAgICogYXMgaWYgYnkgYW4gaW5pdGlhbCBjYWxsIG9mIGBpc29sYXRlLnBhdXNlKGlzb2xhdGUucGF1c2VDYXBhYmlsaXR5KWAuCiAgICogVG8gcmVzdW1lIHRoZSBpc29sYXRlLCBjYWxsIGBpc29sYXRlLnJlc3VtZShpc29sYXRlLnBhdXNlQ2FwYWJpbGl0eSlgLgogICAqCiAgICogSWYgdGhlIFtlcnJvcnNBcmVGYXRhbF0sIFtvbkV4aXRdIGFuZC9vciBbb25FcnJvcl0gcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQsCiAgICogdGhlIGlzb2xhdGUgd2lsbCBhY3QgYXMgaWYsIHJlc3BlY3RpdmVseSwgW3NldEVycm9yc0ZhdGFsXSwKICAgKiBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZCBbYWRkRXJyb3JMaXN0ZW5lcl0gd2VyZSBjYWxsZWQgd2l0aCB0aGUKICAgKiBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciBhbmQgd2FzIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGlzb2xhdGUgc3RhcnRzCiAgICogcnVubmluZy4KICAgKgogICAqIElmIFtkZWJ1Z05hbWVdIGlzIHByb3ZpZGVkLCB0aGUgc3Bhd25lZCBbSXNvbGF0ZV0gd2lsbCBiZSBpZGVudGlmaWFibGUgYnkKICAgKiB0aGlzIG5hbWUgaW4gZGVidWdnZXJzIGFuZCBsb2dnaW5nLgogICAqCiAgICogSWYgW2Vycm9yc0FyZUZhdGFsXSBpcyBvbWl0dGVkLCB0aGUgcGxhdGZvcm0gbWF5IGNob29zZSBhIGRlZmF1bHQgYmVoYXZpb3IKICAgKiBvciBpbmhlcml0IHRoZSBjdXJyZW50IGlzb2xhdGUncyBiZWhhdmlvci4KICAgKgogICAqIFlvdSBjYW4gYWxzbyBjYWxsIHRoZSBbc2V0RXJyb3JzRmF0YWxdLCBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZAogICAqIFthZGRFcnJvckxpc3RlbmVyXSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCBpc29sYXRlLCBidXQgdW5sZXNzIHRoZQogICAqIGlzb2xhdGUgd2FzIHN0YXJ0ZWQgYXMgW3BhdXNlZF0sIGl0IG1heSBhbHJlYWR5IGhhdmUgdGVybWluYXRlZAogICAqIGJlZm9yZSB0aG9zZSBtZXRob2RzIGNhbiBjb21wbGV0ZS4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggd2lsbCBjb21wbGV0ZSB3aXRoIGFuIFtJc29sYXRlXSBpbnN0YW5jZSBpZiB0aGUKICAgKiBzcGF3bmluZyBzdWNjZWVkZWQuIEl0IHdpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvciBvdGhlcndpc2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBzcGF3bjxUPigKICAgICAgdm9pZCBlbnRyeVBvaW50KFQgbWVzc2FnZSksIFQgbWVzc2FnZSwKICAgICAge2Jvb2wgcGF1c2VkOiBmYWxzZSwKICAgICAgYm9vbCBlcnJvcnNBcmVGYXRhbCwKICAgICAgU2VuZFBvcnQgb25FeGl0LAogICAgICBTZW5kUG9ydCBvbkVycm9yLAogICAgICBAU2luY2UoIjIuMyIpIFN0cmluZyBkZWJ1Z05hbWV9KTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbmQgc3Bhd25zIGFuIGlzb2xhdGUgdGhhdCBydW5zIHRoZSBjb2RlIGZyb20gdGhlIGxpYnJhcnkgd2l0aAogICAqIHRoZSBzcGVjaWZpZWQgVVJJLgogICAqCiAgICogVGhlIGlzb2xhdGUgc3RhcnRzIGV4ZWN1dGluZyB0aGUgdG9wLWxldmVsIGBtYWluYCBmdW5jdGlvbiBvZiB0aGUgbGlicmFyeQogICAqIHdpdGggdGhlIGdpdmVuIFVSSS4KICAgKgogICAqIFRoZSB0YXJnZXQgYG1haW5gIG11c3QgYmUgY2FsbGFibGUgd2l0aCB6ZXJvLCBvbmUgb3IgdHdvIGFyZ3VtZW50cy4KICAgKiBFeGFtcGxlczoKICAgKgogICAqICogYG1haW4oKWAKICAgKiAqIGBtYWluKGFyZ3MpYAogICAqICogYG1haW4oYXJncywgbWVzc2FnZSlgCiAgICoKICAgKiBXaGVuIHByZXNlbnQsIHRoZSBwYXJhbWV0ZXIgYGFyZ3NgIGlzIHNldCB0byB0aGUgcHJvdmlkZWQgW2FyZ3NdIGxpc3QuCiAgICogV2hlbiBwcmVzZW50LCB0aGUgcGFyYW1ldGVyIGBtZXNzYWdlYCBpcyBzZXQgdG8gdGhlIGluaXRpYWwgW21lc3NhZ2VdLgogICAqCiAgICogSWYgdGhlIFtwYXVzZWRdIHBhcmFtZXRlciBpcyBzZXQgdG8gYHRydWVgLAogICAqIHRoZSBpc29sYXRlIHdpbGwgc3RhcnQgdXAgaW4gYSBwYXVzZWQgc3RhdGUsCiAgICogYXMgaWYgYnkgYW4gaW5pdGlhbCBjYWxsIG9mIGBpc29sYXRlLnBhdXNlKGlzb2xhdGUucGF1c2VDYXBhYmlsaXR5KWAuCiAgICogVG8gcmVzdW1lIHRoZSBpc29sYXRlLCBjYWxsIGBpc29sYXRlLnJlc3VtZShpc29sYXRlLnBhdXNlQ2FwYWJpbGl0eSlgLgogICAqCiAgICogSWYgdGhlIFtlcnJvcnNBcmVGYXRhbF0sIFtvbkV4aXRdIGFuZC9vciBbb25FcnJvcl0gcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQsCiAgICogdGhlIGlzb2xhdGUgd2lsbCBhY3QgYXMgaWYsIHJlc3BlY3RpdmVseSwgW3NldEVycm9yc0ZhdGFsXSwKICAgKiBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZCBbYWRkRXJyb3JMaXN0ZW5lcl0gd2VyZSBjYWxsZWQgd2l0aCB0aGUKICAgKiBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciBhbmQgd2FzIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGlzb2xhdGUgc3RhcnRzCiAgICogcnVubmluZy4KICAgKgogICAqIFlvdSBjYW4gYWxzbyBjYWxsIHRoZSBbc2V0RXJyb3JzRmF0YWxdLCBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZAogICAqIFthZGRFcnJvckxpc3RlbmVyXSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCBpc29sYXRlLCBidXQgdW5sZXNzIHRoZQogICAqIGlzb2xhdGUgd2FzIHN0YXJ0ZWQgYXMgW3BhdXNlZF0sIGl0IG1heSBhbHJlYWR5IGhhdmUgdGVybWluYXRlZAogICAqIGJlZm9yZSB0aG9zZSBtZXRob2RzIGNhbiBjb21wbGV0ZS4KICAgKgogICAqIElmIHRoZSBbY2hlY2tlZF0gcGFyYW1ldGVyIGlzIHNldCB0byBgdHJ1ZWAgb3IgYGZhbHNlYCwKICAgKiB0aGUgbmV3IGlzb2xhdGUgd2lsbCBydW4gY29kZSBpbiBjaGVja2VkIG1vZGUgKGVuYWJsaW5nIGFzc2VydHMgYW5kIHR5cGUKICAgKiBjaGVja3MpLCByZXNwZWN0aXZlbHkgaW4gcHJvZHVjdGlvbiBtb2RlIChkaXNhYmxpbmcgYXNzZXJ0cyBhbmQgdHlwZQogICAqIGNoZWNrcyksIGlmIHBvc3NpYmxlLiBJZiB0aGUgcGFyYW1ldGVyIGlzIG9taXR0ZWQsIHRoZSBuZXcgaXNvbGF0ZSB3aWxsCiAgICogaW5oZXJpdCB0aGUgdmFsdWUgZnJvbSB0aGUgY3VycmVudCBpc29sYXRlLgogICAqCiAgICogSW4gRGFydDIgc3Ryb25nIG1vZGUsIHRoZSBgY2hlY2tlZGAgcGFyYW1ldGVyIG9ubHkgY29udHJvbHMgYXNzZXJ0cywgYnV0CiAgICogbm90IHR5cGUgY2hlY2tzLgogICAqCiAgICogSXQgbWF5IG5vdCBhbHdheXMgYmUgcG9zc2libGUgdG8gaG9ub3IgdGhlIGBjaGVja2VkYCBwYXJhbWV0ZXIuCiAgICogSWYgdGhlIGlzb2xhdGUgY29kZSB3YXMgcHJlLWNvbXBpbGVkLCBpdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIGNoYW5nZQogICAqIHRoZSBjaGVja2VkIG1vZGUgc2V0dGluZyBkeW5hbWljYWxseS4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSBgY2hlY2tlZGAgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCiAgICoKICAgKiBXQVJOSU5HOiBUaGUgW2NoZWNrZWRdIHBhcmFtZXRlciBpcyBub3QgaW1wbGVtZW50ZWQgb24gYWxsIHBsYXRmb3JtcyB5ZXQuCiAgICoKICAgKiBJZiB0aGUgW3BhY2thZ2VDb25maWddIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdGhlbiBpdCBpcyB1c2VkIHRvIGZpbmQgdGhlCiAgICogbG9jYXRpb24gb2YgYSBwYWNrYWdlIHJlc29sdXRpb24gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgc3Bhd25lZAogICAqIGlzb2xhdGUuCiAgICoKICAgKiBJZiB0aGUgW2F1dG9tYXRpY1BhY2thZ2VSZXNvbHV0aW9uXSBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZW4gdGhlCiAgICogbG9jYXRpb24gb2YgdGhlIHBhY2thZ2Ugc291cmNlcyBpbiB0aGUgc3Bhd25lZCBpc29sYXRlIGlzIGF1dG9tYXRpY2FsbHkKICAgKiBkZXRlcm1pbmVkLgogICAqCiAgICogVGhlIFtlbnZpcm9ubWVudF0gaXMgYSBtYXBwaW5nIGZyb20gc3RyaW5ncyB0byBzdHJpbmdzIHdoaWNoIHRoZQogICAqIHNwYXduZWQgaXNvbGF0ZSB1c2VzIHdoZW4gbG9va2luZyB1cCBbU3RyaW5nLmZyb21FbnZpcm9ubWVudF0gdmFsdWVzLgogICAqIFRoZSBzeXN0ZW0gbWF5IGFkZCBpdHMgb3duIGVudHJpZXMgdG8gZW52aXJvbm1lbnQgYXMgd2VsbC4KICAgKiBJZiBgZW52aXJvbm1lbnRgIGlzIG9taXR0ZWQsIHRoZSBzcGF3bmVkIGlzb2xhdGUgaGFzIHRoZSBzYW1lIGVudmlyb25tZW50CiAgICogZGVjbGFyYXRpb25zIGFzIHRoZSBzcGF3bmluZyBpc29sYXRlLgogICAqCiAgICogV0FSTklORzogVGhlIFtlbnZpcm9ubWVudF0gcGFyYW1ldGVyIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBhbGwKICAgKiBwbGF0Zm9ybXMgeWV0LgogICAqCiAgICogSWYgW2RlYnVnTmFtZV0gaXMgcHJvdmlkZWQsIHRoZSBzcGF3bmVkIFtJc29sYXRlXSB3aWxsIGJlIGlkZW50aWZpYWJsZSBieQogICAqIHRoaXMgbmFtZSBpbiBkZWJ1Z2dlcnMgYW5kIGxvZ2dpbmcuCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZSB3aXRoIGFuIFtJc29sYXRlXSBpbnN0YW5jZSBpZiB0aGUKICAgKiBzcGF3bmluZyBzdWNjZWVkZWQuIEl0IHdpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvciBvdGhlcndpc2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBzcGF3blVyaSgKICAgICAgVXJpIHVyaSwKICAgICAgTGlzdDxTdHJpbmc+IGFyZ3MsCiAgICAgIHZhciBtZXNzYWdlLAogICAgICB7Ym9vbCBwYXVzZWQ6IGZhbHNlLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIGJvb2wgY2hlY2tlZCwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgQERlcHJlY2F0ZWQoJ1RoZSBwYWNrYWdlcy8gZGlyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRGFydCAyJykKICAgICAgICAgIFVyaSBwYWNrYWdlUm9vdCwKICAgICAgVXJpIHBhY2thZ2VDb25maWcsCiAgICAgIGJvb2wgYXV0b21hdGljUGFja2FnZVJlc29sdXRpb246IGZhbHNlLAogICAgICBAU2luY2UoIjIuMyIpCiAgICAgICAgICBTdHJpbmcgZGVidWdOYW1lfSk7CgogIC8qKgogICAqIFJlcXVlc3RzIHRoZSBpc29sYXRlIHRvIHBhdXNlLgogICAqCiAgICogV2hlbiB0aGUgaXNvbGF0ZSByZWNlaXZlcyB0aGUgcGF1c2UgY29tbWFuZCwgaXQgc3RvcHMKICAgKiBwcm9jZXNzaW5nIGV2ZW50cyBmcm9tIHRoZSBldmVudCBsb29wIHF1ZXVlLgogICAqIEl0IG1heSBzdGlsbCBhZGQgbmV3IGV2ZW50cyB0byB0aGUgcXVldWUgaW4gcmVzcG9uc2UgdG8sIGUuZy4sIHRpbWVycwogICAqIG9yIHJlY2VpdmUtcG9ydCBtZXNzYWdlcy4gV2hlbiB0aGUgaXNvbGF0ZSBpcyByZXN1bWVkLAogICAqIGl0IHN0YXJ0cyBoYW5kbGluZyB0aGUgYWxyZWFkeSBlbnF1ZXVlZCBldmVudHMuCiAgICoKICAgKiBUaGUgcGF1c2UgcmVxdWVzdCBpcyBzZW50IHRocm91Z2ggdGhlIGlzb2xhdGUncyBjb21tYW5kIHBvcnQsCiAgICogd2hpY2ggYnlwYXNzZXMgdGhlIHJlY2VpdmluZyBpc29sYXRlJ3MgZXZlbnQgbG9vcC4KICAgKiBUaGUgcGF1c2UgdGFrZXMgZWZmZWN0IHdoZW4gaXQgaXMgcmVjZWl2ZWQsIHBhdXNpbmcgdGhlIGV2ZW50IGxvb3AKICAgKiBhcyBpdCBpcyBhdCB0aGF0IHRpbWUuCiAgICoKICAgKiBUaGUgW3Jlc3VtZUNhcGFiaWxpdHldIGlzIHVzZWQgdG8gaWRlbnRpdHkgdGhlIHBhdXNlLAogICAqIGFuZCBtdXN0IGJlIHVzZWQgYWdhaW4gdG8gZW5kIHRoZSBwYXVzZSB1c2luZyBbcmVzdW1lXS4KICAgKiBJZiBbcmVzdW1lQ2FwYWJpbGl0eV0gaXMgb21pdHRlZCwgYSBuZXcgY2FwYWJpbGl0eSBvYmplY3QgaXMgY3JlYXRlZAogICAqIGFuZCB1c2VkIGluc3RlYWQuCiAgICoKICAgKiBJZiBhbiBpc29sYXRlIGlzIHBhdXNlZCBtb3JlIHRoYW4gb25jZSB1c2luZyB0aGUgc2FtZSBjYXBhYmlsaXR5LAogICAqIG9ubHkgb25lIHJlc3VtZSB3aXRoIHRoYXQgY2FwYWJpbGl0eSBpcyBuZWVkZWQgdG8gZW5kIHRoZSBwYXVzZS4KICAgKgogICAqIElmIGFuIGlzb2xhdGUgaXMgcGF1c2VkIHVzaW5nIG1vcmUgdGhhbiBvbmUgY2FwYWJpbGl0eSwKICAgKiBlYWNoIHBhdXNlIG11c3QgYmUgaW5kaXZpZHVhbGx5IGVuZGVkIGJlZm9yZSB0aGUgaXNvbGF0ZSByZXN1bWVzLgogICAqCiAgICogUmV0dXJucyB0aGUgY2FwYWJpbGl0eSB0aGF0IG11c3QgYmUgdXNlZCB0byBlbmQgdGhlIHBhdXNlLgogICAqIFRoaXMgaXMgZWl0aGVyIFtyZXN1bWVDYXBhYmlsaXR5XSwgb3IgYSBuZXcgY2FwYWJpbGl0eSB3aGVuCiAgICogW3Jlc3VtZUNhcGFiaWxpdHldIGlzIG9taXR0ZWQuCiAgICoKICAgKiBJZiBbcGF1c2VDYXBhYmlsaXR5XSBpcyBgbnVsbGAsIG9yIGl0J3Mgbm90IHRoZSBwYXVzZSBjYXBhYmlsaXR5CiAgICogb2YgdGhlIGlzb2xhdGUgaWRlbnRpZmllZCBieSBbY29udHJvbFBvcnRdLAogICAqIHRoZSBwYXVzZSByZXF1ZXN0IGlzIGlnbm9yZWQgYnkgdGhlIHJlY2VpdmluZyBpc29sYXRlLgogICAqLwogIENhcGFiaWxpdHkgcGF1c2UoW0NhcGFiaWxpdHkgcmVzdW1lQ2FwYWJpbGl0eV0pIHsKICAgIHJlc3VtZUNhcGFiaWxpdHkgPz89IG5ldyBDYXBhYmlsaXR5KCk7CiAgICBfcGF1c2UocmVzdW1lQ2FwYWJpbGl0eSk7CiAgICByZXR1cm4gcmVzdW1lQ2FwYWJpbGl0eTsKICB9CgogIC8qKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBbcGF1c2VdLiAqLwogIGV4dGVybmFsIHZvaWQgX3BhdXNlKENhcGFiaWxpdHkgcmVzdW1lQ2FwYWJpbGl0eSk7CgogIC8qKgogICAqIFJlc3VtZXMgYSBwYXVzZWQgaXNvbGF0ZS4KICAgKgogICAqIFNlbmRzIGEgbWVzc2FnZSB0byBhbiBpc29sYXRlIHJlcXVlc3RpbmcgdGhhdCBpdCBlbmRzIGEgcGF1c2UKICAgKiB0aGF0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZC4KICAgKgogICAqIFdoZW4gYWxsIGFjdGl2ZSBwYXVzZSByZXF1ZXN0cyBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgaXNvbGF0ZQogICAqIHdpbGwgY29udGludWUgcHJvY2Vzc2luZyBldmVudHMgYW5kIGhhbmRsaW5nIG5vcm1hbCBtZXNzYWdlcy4KICAgKgogICAqIElmIHRoZSBbcmVzdW1lQ2FwYWJpbGl0eV0gaXMgbm90IG9uZSB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gdXNlZAogICAqIHRvIHBhdXNlIHRoZSBpc29sYXRlLCBvciBpdCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgdG8gcmVzdW1lIGZyb20KICAgKiB0aGF0IHBhdXNlLCB0aGUgcmVzdW1lIGNhbGwgaGFzIG5vIGVmZmVjdC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHJlc3VtZShDYXBhYmlsaXR5IHJlc3VtZUNhcGFiaWxpdHkpOwoKICAvKioKICAgKiBSZXF1ZXN0cyBhbiBleGl0IG1lc3NhZ2Ugb24gW3Jlc3BvbnNlUG9ydF0gd2hlbiB0aGUgaXNvbGF0ZSB0ZXJtaW5hdGVzLgogICAqCiAgICogVGhlIGlzb2xhdGUgd2lsbCBzZW5kIFtyZXNwb25zZV0gYXMgYSBtZXNzYWdlIG9uIFtyZXNwb25zZVBvcnRdIGFzIHRoZSBsYXN0CiAgICogdGhpbmcgYmVmb3JlIGl0IHRlcm1pbmF0ZXMuIEl0IHdpbGwgcnVuIG5vIGZ1cnRoZXIgY29kZSBhZnRlciB0aGUgbWVzc2FnZQogICAqIGhhcyBiZWVuIHNlbnQuCiAgICoKICAgKiBBZGRpbmcgdGhlIHNhbWUgcG9ydCBtb3JlIHRoYW4gb25jZSB3aWxsIG9ubHkgY2F1c2UgaXQgdG8gcmVjZWl2ZSBvbmUgZXhpdAogICAqIG1lc3NhZ2UsIHVzaW5nIHRoZSBsYXN0IHJlc3BvbnNlIHZhbHVlIHRoYXQgd2FzIGFkZGVkLAogICAqIGFuZCBpdCBvbmx5IG5lZWRzIHRvIGJlIHJlbW92ZWQgb25jZSB1c2luZyBbcmVtb3ZlT25FeGl0TGlzdGVuZXJdLgogICAqCiAgICogSWYgdGhlIGlzb2xhdGUgaGFzIHRlcm1pbmF0ZWQgYmVmb3JlIGl0IGNhbiByZWNlaXZlIHRoaXMgcmVxdWVzdCwKICAgKiBubyBleGl0IG1lc3NhZ2Ugd2lsbCBiZSBzZW50LgogICAqCiAgICogVGhlIFtyZXNwb25zZV0gb2JqZWN0IG11c3QgZm9sbG93IHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBlbmZvcmNlZCBieQogICAqIFtTZW5kUG9ydC5zZW5kXS4KICAgKiBJdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHVzZSBzaW1wbGUgdmFsdWVzIHRoYXQgY2FuIGJlIHNlbnQgdG8gYWxsCiAgICogaXNvbGF0ZXMsIGxpa2UgYG51bGxgLCBib29sZWFucywgbnVtYmVycyBvciBzdHJpbmdzLgogICAqCiAgICogU2luY2UgaXNvbGF0ZXMgcnVuIGNvbmN1cnJlbnRseSwgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXhpdCBiZWZvcmUgdGhlCiAgICogZXhpdCBsaXN0ZW5lciBpcyBlc3RhYmxpc2hlZCwgYW5kIGluIHRoYXQgY2FzZSBubyByZXNwb25zZSB3aWxsIGJlCiAgICogc2VudCBvbiBbcmVzcG9uc2VQb3J0XS4KICAgKiBUbyBhdm9pZCB0aGlzLCBlaXRoZXIgdXNlIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0byB0aGUgc3Bhd24KICAgKiBmdW5jdGlvbiwgb3Igc3RhcnQgdGhlIGlzb2xhdGUgcGF1c2VkLCBhZGQgdGhlIGxpc3RlbmVyIGFuZAogICAqIHRoZW4gcmVzdW1lIHRoZSBpc29sYXRlLgogICAqLwogIC8qIFRPRE8obHJuKTogQ2FuIHdlIGRvIGJldHRlcj8gQ2FuIHRoZSBzeXN0ZW0gcmVjb2duaXplIHRoaXMgbWVzc2FnZSBhbmQKICAgKiBzZW5kIGEgcmVwbHkgaWYgdGhlIHJlY2VpdmluZyBpc29sYXRlIGlzIGRlYWQ/CiAgICovCiAgZXh0ZXJuYWwgdm9pZCBhZGRPbkV4aXRMaXN0ZW5lcihTZW5kUG9ydCByZXNwb25zZVBvcnQsIHtPYmplY3QgcmVzcG9uc2V9KTsKCiAgLyoqCiAgICogU3RvcHMgbGlzdGVuaW5nIGZvciBleGl0IG1lc3NhZ2VzIGZyb20gdGhlIGlzb2xhdGUuCiAgICoKICAgKiBSZXF1ZXN0cyBmb3IgdGhlIGlzb2xhdGUgdG8gbm90IHNlbmQgZXhpdCBtZXNzYWdlcyBvbiBbcmVzcG9uc2VQb3J0XS4KICAgKiBJZiB0aGUgaXNvbGF0ZSBpc24ndCBleHBlY3RpbmcgdG8gc2VuZCBleGl0IG1lc3NhZ2VzIG9uIFtyZXNwb25zZVBvcnRdLAogICAqIGJlY2F1c2UgdGhlIHBvcnQgaGFzbid0IGJlZW4gYWRkZWQgdXNpbmcgW2FkZE9uRXhpdExpc3RlbmVyXSwKICAgKiBvciBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCwgdGhlIHJlcXVlc3QgaXMgaWdub3JlZC4KICAgKgogICAqIElmIHRoZSBzYW1lIHBvcnQgaGFzIGJlZW4gcGFzc2VkIHZpYSBbYWRkT25FeGl0TGlzdGVuZXJdIG1vcmUgdGhhbiBvbmNlLAogICAqIG9ubHkgb25lIGNhbGwgdG8gYHJlbW92ZU9uRXhpdExpc3RlbmVyYCBpcyBuZWVkZWQgdG8gc3RvcCBpdCBmcm9tIHJlY2VpdmluZwogICAqIGV4aXQgbWVzc2FnZXMuCiAgICoKICAgKiBDbG9zaW5nIHRoZSByZWNlaXZlIHBvcnQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFtyZXNwb25zZVBvcnRdIGRvZXMKICAgKiBub3Qgc3RvcCB0aGUgaXNvbGF0ZSBmcm9tIHNlbmRpbmcgdW5jYXVnaHQgZXJyb3JzLCB0aGV5IGFyZSBqdXN0IGdvaW5nIHRvCiAgICogYmUgbG9zdC4KICAgKgogICAqIEFuIGV4aXQgbWVzc2FnZSBtYXkgc3RpbGwgYmUgc2VudCBpZiB0aGUgaXNvbGF0ZSB0ZXJtaW5hdGVzCiAgICogYmVmb3JlIHRoaXMgcmVxdWVzdCBpcyByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLgogICAqLwogIGV4dGVybmFsIHZvaWQgcmVtb3ZlT25FeGl0TGlzdGVuZXIoU2VuZFBvcnQgcmVzcG9uc2VQb3J0KTsKCiAgLyoqCiAgICogU2V0cyB3aGV0aGVyIHVuY2F1Z2h0IGVycm9ycyB3aWxsIHRlcm1pbmF0ZSB0aGUgaXNvbGF0ZS4KICAgKgogICAqIElmIGVycm9ycyBhcmUgZmF0YWwsIGFueSB1bmNhdWdodCBlcnJvciB3aWxsIHRlcm1pbmF0ZSB0aGUgaXNvbGF0ZQogICAqIGV2ZW50IGxvb3AgYW5kIHNodXQgZG93biB0aGUgaXNvbGF0ZS4KICAgKgogICAqIFRoaXMgY2FsbCByZXF1aXJlcyB0aGUgW3Rlcm1pbmF0ZUNhcGFiaWxpdHldIGZvciB0aGUgaXNvbGF0ZS4KICAgKiBJZiB0aGUgY2FwYWJpbGl0eSBpcyBhYnNlbnQgb3IgaW5jb3JyZWN0LCBubyBjaGFuZ2UgaXMgbWFkZS4KICAgKgogICAqIFNpbmNlIGlzb2xhdGVzIHJ1biBjb25jdXJyZW50bHksIGl0J3MgcG9zc2libGUgZm9yIHRoZSByZWNlaXZpbmcgaXNvbGF0ZQogICAqIHRvIGV4aXQgZHVlIHRvIGFuIGVycm9yLCBiZWZvcmUgYSByZXF1ZXN0LCB1c2luZyB0aGlzIG1ldGhvZCwgaGFzIGJlZW4KICAgKiByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLgogICAqIFRvIGF2b2lkIHRoaXMsIGVpdGhlciB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBzcGF3bgogICAqIGZ1bmN0aW9uLCBvciBzdGFydCB0aGUgaXNvbGF0ZSBwYXVzZWQsIHNldCBlcnJvcnMgbm9uLWZhdGFsIGFuZAogICAqIHRoZW4gcmVzdW1lIHRoZSBpc29sYXRlLgogICAqLwogIGV4dGVybmFsIHZvaWQgc2V0RXJyb3JzRmF0YWwoYm9vbCBlcnJvcnNBcmVGYXRhbCk7CgogIC8qKgogICAqIFJlcXVlc3RzIHRoZSBpc29sYXRlIHRvIHNodXQgZG93bi4KICAgKgogICAqIFRoZSBpc29sYXRlIGlzIHJlcXVlc3RlZCB0byB0ZXJtaW5hdGUgaXRzZWxmLgogICAqIFRoZSBbcHJpb3JpdHldIGFyZ3VtZW50IHNwZWNpZmllcyB3aGVuIHRoaXMgbXVzdCBoYXBwZW4uCiAgICoKICAgKiBUaGUgW3ByaW9yaXR5XSwgd2hlbiBwcm92aWRlZCwgbXVzdCBiZSBvbmUgb2YgW2ltbWVkaWF0ZV0gb3IKICAgKiBbYmVmb3JlTmV4dEV2ZW50XSAodGhlIGRlZmF1bHQpLgogICAqIFRoZSBzaHV0ZG93biBpcyBwZXJmb3JtZWQgYXQgZGlmZmVyZW50IHRpbWVzIGRlcGVuZGluZyBvbiB0aGUgcHJpb3JpdHk6CiAgICoKICAgKiAqIGBpbW1lZGlhdGVgOiBUaGUgaXNvbGF0ZSBzaHV0cyBkb3duIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICogICAgIENvbnRyb2wgbWVzc2FnZXMgYXJlIGhhbmRsZWQgaW4gb3JkZXIsIHNvIGFsbCBwcmV2aW91c2x5IHNlbnQgY29udHJvbAogICAqICAgICBldmVudHMgZnJvbSB0aGlzIGlzb2xhdGUgd2lsbCBhbGwgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KICAgKiAgICAgVGhlIHNodXRkb3duIHNob3VsZCBoYXBwZW4gbm8gbGF0ZXIgdGhhbiBpZiBzZW50IHdpdGgKICAgKiAgICAgYGJlZm9yZU5leHRFdmVudGAuCiAgICogICAgIEl0IG1heSBoYXBwZW4gZWFybGllciBpZiB0aGUgc3lzdGVtIGhhcyBhIHdheSB0byBzaHV0IGRvd24gY2xlYW5seQogICAqICAgICBhdCBhbiBlYXJsaWVyIHRpbWUsIGV2ZW4gZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgYW5vdGhlciBldmVudC4KICAgKiAqIGBiZWZvcmVOZXh0RXZlbnRgOiBUaGUgc2h1dGRvd24gaXMgc2NoZWR1bGVkIGZvciB0aGUgbmV4dCB0aW1lCiAgICogICAgIGNvbnRyb2wgcmV0dXJucyB0byB0aGUgZXZlbnQgbG9vcCBvZiB0aGUgcmVjZWl2aW5nIGlzb2xhdGUsCiAgICogICAgIGFmdGVyIHRoZSBjdXJyZW50IGV2ZW50LCBhbmQgYW55IGFscmVhZHkgc2NoZWR1bGVkIGNvbnRyb2wgZXZlbnRzLAogICAqICAgICBhcmUgY29tcGxldGVkLgogICAqCiAgICogSWYgW3Rlcm1pbmF0ZUNhcGFiaWxpdHldIGlzIGBudWxsYCwgb3IgaXQncyBub3QgdGhlIHRlcm1pbmF0ZSBjYXBhYmlsaXR5CiAgICogb2YgdGhlIGlzb2xhdGUgaWRlbnRpZmllZCBieSBbY29udHJvbFBvcnRdLAogICAqIHRoZSBraWxsIHJlcXVlc3QgaXMgaWdub3JlZCBieSB0aGUgcmVjZWl2aW5nIGlzb2xhdGUuCiAgICovCiAgZXh0ZXJuYWwgdm9pZCBraWxsKHtpbnQgcHJpb3JpdHk6IGJlZm9yZU5leHRFdmVudH0pOwoKICAvKioKICAgKiBSZXF1ZXN0cyB0aGF0IHRoZSBpc29sYXRlIHNlbmQgW3Jlc3BvbnNlXSBvbiB0aGUgW3Jlc3BvbnNlUG9ydF0uCiAgICoKICAgKiBUaGUgW3Jlc3BvbnNlXSBvYmplY3QgbXVzdCBmb2xsb3cgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGVuZm9yY2VkIGJ5CiAgICogW1NlbmRQb3J0LnNlbmRdLgogICAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgdXNlIHNpbXBsZSB2YWx1ZXMgdGhhdCBjYW4gYmUgc2VudCB0byBhbGwKICAgKiBpc29sYXRlcywgbGlrZSBgbnVsbGAsIGJvb2xlYW5zLCBudW1iZXJzIG9yIHN0cmluZ3MuCiAgICoKICAgKiBJZiB0aGUgaXNvbGF0ZSBpcyBhbGl2ZSwgaXQgd2lsbCBldmVudHVhbGx5IHNlbmQgYHJlc3BvbnNlYAogICAqIChkZWZhdWx0aW5nIHRvIGBudWxsYCkgb24gdGhlIHJlc3BvbnNlIHBvcnQuCiAgICoKICAgKiBUaGUgW3ByaW9yaXR5XSBtdXN0IGJlIG9uZSBvZiBbaW1tZWRpYXRlXSBvciBbYmVmb3JlTmV4dEV2ZW50XS4KICAgKiBUaGUgcmVzcG9uc2UgaXMgc2VudCBhdCBkaWZmZXJlbnQgdGltZXMgZGVwZW5kaW5nIG9uIHRoZSBwaW5nIHR5cGU6CiAgICoKICAgKiAqIGBpbW1lZGlhdGVgOiBUaGUgaXNvbGF0ZSByZXNwb25kcyBhcyBzb29uIGFzIGl0IHJlY2VpdmVzIHRoZQogICAqICAgICBjb250cm9sIG1lc3NhZ2UuIFRoaXMgaXMgYWZ0ZXIgYW55IHByZXZpb3VzIGNvbnRyb2wgbWVzc2FnZQogICAqICAgICBmcm9tIHRoZSBzYW1lIGlzb2xhdGUgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZCwKICAgKiAgICAgYnV0IG1heSBiZSBkdXJpbmcgZXhlY3V0aW9uIG9mIGFub3RoZXIgZXZlbnQuCiAgICogKiBgYmVmb3JlTmV4dEV2ZW50YDogVGhlIHJlc3BvbnNlIGlzIHNjaGVkdWxlZCBmb3IgdGhlIG5leHQgdGltZQogICAqICAgICBjb250cm9sIHJldHVybnMgdG8gdGhlIGV2ZW50IGxvb3Agb2YgdGhlIHJlY2VpdmluZyBpc29sYXRlLAogICAqICAgICBhZnRlciB0aGUgY3VycmVudCBldmVudCwgYW5kIGFueSBhbHJlYWR5IHNjaGVkdWxlZCBjb250cm9sIGV2ZW50cywKICAgKiAgICAgYXJlIGNvbXBsZXRlZC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHBpbmcoU2VuZFBvcnQgcmVzcG9uc2VQb3J0LAogICAgICB7T2JqZWN0IHJlc3BvbnNlLCBpbnQgcHJpb3JpdHk6IGltbWVkaWF0ZX0pOwoKICAvKioKICAgKiBSZXF1ZXN0cyB0aGF0IHVuY2F1Z2h0IGVycm9ycyBvZiB0aGUgaXNvbGF0ZSBhcmUgc2VudCBiYWNrIHRvIFtwb3J0XS4KICAgKgogICAqIFRoZSBlcnJvcnMgYXJlIHNlbnQgYmFjayBhcyB0d28gZWxlbWVudHMgbGlzdHMuCiAgICogVGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBgU3RyaW5nYCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IsIHVzdWFsbHkKICAgKiBjcmVhdGVkIGJ5IGNhbGxpbmcgYHRvU3RyaW5nYCBvbiB0aGUgZXJyb3IuCiAgICogVGhlIHNlY29uZCBlbGVtZW50IGlzIGEgYFN0cmluZ2AgcmVwcmVzZW50YXRpb24gb2YgYW4gYWNjb21wYW55aW5nCiAgICogc3RhY2sgdHJhY2UsIG9yIGBudWxsYCBpZiBubyBzdGFjayB0cmFjZSB3YXMgcHJvdmlkZWQuCiAgICogVG8gY29udmVydCB0aGlzIGJhY2sgdG8gYSBbU3RhY2tUcmFjZV0gb2JqZWN0LCB1c2UgW1N0YWNrVHJhY2UuZnJvbVN0cmluZ10uCiAgICoKICAgKiBMaXN0ZW5pbmcgdXNpbmcgdGhlIHNhbWUgcG9ydCBtb3JlIHRoYW4gb25jZSBkb2VzIG5vdGhpbmcuCiAgICogQSBwb3J0IHdpbGwgb25seSByZWNlaXZlIGVhY2ggZXJyb3Igb25jZSwKICAgKiBhbmQgd2lsbCBvbmx5IG5lZWQgdG8gYmUgcmVtb3ZlZCBvbmNlIHVzaW5nIFtyZW1vdmVFcnJvckxpc3RlbmVyXS4KCiAgICogQ2xvc2luZyB0aGUgcmVjZWl2ZSBwb3J0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3J0IGRvZXMgbm90IHN0b3AKICAgKiB0aGUgaXNvbGF0ZSBmcm9tIHNlbmRpbmcgdW5jYXVnaHQgZXJyb3JzLCB0aGV5IGFyZSBqdXN0IGdvaW5nIHRvIGJlIGxvc3QuCiAgICogSW5zdGVhZCB1c2UgW3JlbW92ZUVycm9yTGlzdGVuZXJdIHRvIHN0b3AgcmVjZWl2aW5nIGVycm9ycyBvbiBbcG9ydF0uCiAgICoKICAgKiBTaW5jZSBpc29sYXRlcyBydW4gY29uY3VycmVudGx5LCBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleGl0IGJlZm9yZSB0aGUKICAgKiBlcnJvciBsaXN0ZW5lciBpcyBlc3RhYmxpc2hlZC4gVG8gYXZvaWQgdGhpcywgc3RhcnQgdGhlIGlzb2xhdGUgcGF1c2VkLAogICAqIGFkZCB0aGUgbGlzdGVuZXIgYW5kIHRoZW4gcmVzdW1lIHRoZSBpc29sYXRlLgogICAqLwogIGV4dGVybmFsIHZvaWQgYWRkRXJyb3JMaXN0ZW5lcihTZW5kUG9ydCBwb3J0KTsKCiAgLyoqCiAgICogU3RvcHMgbGlzdGVuaW5nIGZvciB1bmNhdWdodCBlcnJvcnMgZnJvbSB0aGUgaXNvbGF0ZS4KICAgKgogICAqIFJlcXVlc3RzIGZvciB0aGUgaXNvbGF0ZSB0byBub3Qgc2VuZCB1bmNhdWdodCBlcnJvcnMgb24gW3BvcnRdLgogICAqIElmIHRoZSBpc29sYXRlIGlzbid0IGV4cGVjdGluZyB0byBzZW5kIHVuY2F1Z2h0IGVycm9ycyBvbiBbcG9ydF0sCiAgICogYmVjYXVzZSB0aGUgcG9ydCBoYXNuJ3QgYmVlbiBhZGRlZCB1c2luZyBbYWRkRXJyb3JMaXN0ZW5lcl0sCiAgICogb3IgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQsIHRoZSByZXF1ZXN0IGlzIGlnbm9yZWQuCiAgICoKICAgKiBJZiB0aGUgc2FtZSBwb3J0IGhhcyBiZWVuIHBhc3NlZCB2aWEgW2FkZEVycm9yTGlzdGVuZXJdIG1vcmUgdGhhbiBvbmNlLAogICAqIG9ubHkgb25lIGNhbGwgdG8gYHJlbW92ZUVycm9yTGlzdGVuZXJgIGlzIG5lZWRlZCB0byBzdG9wIGl0IGZyb20gcmVjZWl2aW5nCiAgICogdW5jYXVnaHQgZXJyb3JzLgogICAqCiAgICogVW5jYXVnaHQgZXJyb3JzIG1lc3NhZ2UgbWF5IHN0aWxsIGJlIHNlbnQgYnkgdGhlIGlzb2xhdGUKICAgKiB1bnRpbCB0aGlzIHJlcXVlc3QgaXMgcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHJlbW92ZUVycm9yTGlzdGVuZXIoU2VuZFBvcnQgcG9ydCk7CgogIC8qKgogICAqIFJldHVybnMgYSBicm9hZGNhc3Qgc3RyZWFtIG9mIHVuY2F1Z2h0IGVycm9ycyBmcm9tIHRoZSBpc29sYXRlLgogICAqCiAgICogRWFjaCBlcnJvciBpcyBwcm92aWRlZCBhcyBhbiBlcnJvciBldmVudCBvbiB0aGUgc3RyZWFtLgogICAqCiAgICogVGhlIGFjdHVhbCBlcnJvciBvYmplY3QgYW5kIHN0YWNrVHJhY2VzIHdpbGwgbm90IG5lY2Vzc2FyaWx5CiAgICogYmUgdGhlIHNhbWUgb2JqZWN0IHR5cGVzIGFzIGluIHRoZSBhY3R1YWwgaXNvbGF0ZSwgYnV0IHRoZXkgd2lsbAogICAqIGFsd2F5cyBoYXZlIHRoZSBzYW1lIFtPYmplY3QudG9TdHJpbmddIHJlc3VsdC4KICAgKgogICAqIFRoaXMgc3RyZWFtIGlzIGJhc2VkIG9uIFthZGRFcnJvckxpc3RlbmVyXSBhbmQgW3JlbW92ZUVycm9yTGlzdGVuZXJdLgogICAqLwogIFN0cmVhbSBnZXQgZXJyb3JzIHsKICAgIFN0cmVhbUNvbnRyb2xsZXIgY29udHJvbGxlcjsKICAgIFJhd1JlY2VpdmVQb3J0IHBvcnQ7CiAgICB2b2lkIGhhbmRsZUVycm9yKG1lc3NhZ2UpIHsKICAgICAgTGlzdCBsaXN0TWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgIFN0cmluZyBlcnJvckRlc2NyaXB0aW9uID0gbGlzdE1lc3NhZ2VbMF07CiAgICAgIFN0cmluZyBzdGFja0Rlc2NyaXB0aW9uID0gbGlzdE1lc3NhZ2VbMV07CiAgICAgIHZhciBlcnJvciA9IG5ldyBSZW1vdGVFcnJvcihlcnJvckRlc2NyaXB0aW9uLCBzdGFja0Rlc2NyaXB0aW9uKTsKICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgZXJyb3Iuc3RhY2tUcmFjZSk7CiAgICB9CgogICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyLmJyb2FkY2FzdCgKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiAoKSB7CiAgICAgICAgICBwb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KGhhbmRsZUVycm9yKTsKICAgICAgICAgIHRoaXMuYWRkRXJyb3JMaXN0ZW5lcihwb3J0LnNlbmRQb3J0KTsKICAgICAgICB9LAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUVycm9yTGlzdGVuZXIocG9ydC5zZW5kUG9ydCk7CiAgICAgICAgICBwb3J0LmNsb3NlKCk7CiAgICAgICAgICBwb3J0ID0gbnVsbDsKICAgICAgICB9KTsKICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9Cn0KCi8qKgogKiBTZW5kcyBtZXNzYWdlcyB0byBpdHMgW1JlY2VpdmVQb3J0XXMuCiAqCiAqIFtTZW5kUG9ydF1zIGFyZSBjcmVhdGVkIGZyb20gW1JlY2VpdmVQb3J0XXMuIEFueSBtZXNzYWdlIHNlbnQgdGhyb3VnaAogKiBhIFtTZW5kUG9ydF0gaXMgZGVsaXZlcmVkIHRvIGl0cyBjb3JyZXNwb25kaW5nIFtSZWNlaXZlUG9ydF0uIFRoZXJlIG1pZ2h0IGJlCiAqIG1hbnkgW1NlbmRQb3J0XXMgZm9yIHRoZSBzYW1lIFtSZWNlaXZlUG9ydF0uCiAqCiAqIFtTZW5kUG9ydF1zIGNhbiBiZSB0cmFuc21pdHRlZCB0byBvdGhlciBpc29sYXRlcywgYW5kIHRoZXkgcHJlc2VydmUgZXF1YWxpdHkKICogd2hlbiBzZW50LgogKi8KYWJzdHJhY3QgY2xhc3MgU2VuZFBvcnQgaW1wbGVtZW50cyBDYXBhYmlsaXR5IHsKICAvKioKICAgKiBTZW5kcyBhbiBhc3luY2hyb25vdXMgW21lc3NhZ2VdIHRocm91Z2ggdGhpcyBzZW5kIHBvcnQsIHRvIGl0cwogICAqIGNvcnJlc3BvbmRpbmcgYFJlY2VpdmVQb3J0YC4KICAgKgogICAqIFRoZSBjb250ZW50IG9mIFttZXNzYWdlXSBjYW4gYmU6IHByaW1pdGl2ZSB2YWx1ZXMgKG51bGwsIG51bSwgYm9vbCwgZG91YmxlLAogICAqIFN0cmluZyksIGluc3RhbmNlcyBvZiBbU2VuZFBvcnRdLCBhbmQgbGlzdHMgYW5kIG1hcHMgd2hvc2UgZWxlbWVudHMgYXJlIGFueQogICAqIG9mIHRoZXNlLiBMaXN0IGFuZCBtYXBzIGFyZSBhbHNvIGFsbG93ZWQgdG8gYmUgY3ljbGljLgogICAqCiAgICogSW4gdGhlIHNwZWNpYWwgY2lyY3Vtc3RhbmNlcyB3aGVuIHR3byBpc29sYXRlcyBzaGFyZSB0aGUgc2FtZSBjb2RlIGFuZCBhcmUKICAgKiBydW5uaW5nIGluIHRoZSBzYW1lIHByb2Nlc3MgKGUuZy4gaXNvbGF0ZXMgY3JlYXRlZCB2aWEgW0lzb2xhdGUuc3Bhd25dKSwgaXQKICAgKiBpcyBhbHNvIHBvc3NpYmxlIHRvIHNlbmQgb2JqZWN0IGluc3RhbmNlcyAod2hpY2ggd291bGQgYmUgY29waWVkIGluIHRoZQogICAqIHByb2Nlc3MpLiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBieSB0aGUgZGFydHZtLiAgRm9yIG5vdywgdGhlCiAgICogZGFydDJqcyBjb21waWxlciBvbmx5IHN1cHBvcnRzIHRoZSByZXN0cmljdGVkIG1lc3NhZ2VzIGRlc2NyaWJlZCBhYm92ZS4KICAgKgogICAqIFRoZSBzZW5kIGhhcHBlbnMgaW1tZWRpYXRlbHkgYW5kIGRvZXNuJ3QgYmxvY2suICBUaGUgY29ycmVzcG9uZGluZyByZWNlaXZlCiAgICogcG9ydCBjYW4gcmVjZWl2ZSB0aGUgbWVzc2FnZSBhcyBzb29uIGFzIGl0cyBpc29sYXRlJ3MgZXZlbnQgbG9vcCBpcyByZWFkeQogICAqIHRvIGRlbGl2ZXIgaXQsIGluZGVwZW5kZW50bHkgb2Ygd2hhdCB0aGUgc2VuZGluZyBpc29sYXRlIGlzIGRvaW5nLgogICAqLwogIHZvaWQgc2VuZCh2YXIgbWVzc2FnZSk7CgogIC8qKgogICAqIFRlc3RzIHdoZXRoZXIgW290aGVyXSBpcyBhIFtTZW5kUG9ydF0gcG9pbnRpbmcgdG8gdGhlIHNhbWUKICAgKiBbUmVjZWl2ZVBvcnRdIGFzIHRoaXMgb25lLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBpbW11dGFibGUgaGFzaCBjb2RlIGZvciB0aGlzIHNlbmQgcG9ydCB0aGF0IGlzCiAgICogY29uc2lzdGVudCB3aXRoIHRoZSA9PSBvcGVyYXRvci4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwp9CgovKioKICogVG9nZXRoZXIgd2l0aCBbU2VuZFBvcnRdLCB0aGUgb25seSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIGJldHdlZW4gaXNvbGF0ZXMuCiAqCiAqIFtSZWNlaXZlUG9ydF1zIGhhdmUgYSBgc2VuZFBvcnRgIGdldHRlciB3aGljaCByZXR1cm5zIGEgW1NlbmRQb3J0XS4KICogQW55IG1lc3NhZ2UgdGhhdCBpcyBzZW50IHRocm91Z2ggdGhpcyBbU2VuZFBvcnRdCiAqIGlzIGRlbGl2ZXJlZCB0byB0aGUgW1JlY2VpdmVQb3J0XSBpdCBoYXMgYmVlbiBjcmVhdGVkIGZyb20uIFRoZXJlLCB0aGUKICogbWVzc2FnZSBpcyBkaXNwYXRjaGVkIHRvIHRoZSBgUmVjZWl2ZVBvcnRgJ3MgbGlzdGVuZXIuCiAqCiAqIEEgW1JlY2VpdmVQb3J0XSBpcyBhIG5vbi1icm9hZGNhc3Qgc3RyZWFtLiBUaGlzIG1lYW5zIHRoYXQgaXQgYnVmZmVycwogKiBpbmNvbWluZyBtZXNzYWdlcyB1bnRpbCBhIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQuIE9ubHkgb25lIGxpc3RlbmVyIGNhbgogKiByZWNlaXZlIG1lc3NhZ2VzLiBTZWUgW1N0cmVhbS5hc0Jyb2FkY2FzdFN0cmVhbV0gZm9yIHRyYW5zZm9ybWluZyB0aGUgcG9ydAogKiB0byBhIGJyb2FkY2FzdCBzdHJlYW0uCiAqCiAqIEEgW1JlY2VpdmVQb3J0XSBtYXkgaGF2ZSBtYW55IFtTZW5kUG9ydF1zLgogKi8KYWJzdHJhY3QgY2xhc3MgUmVjZWl2ZVBvcnQgaW1wbGVtZW50cyBTdHJlYW0gewogIC8qKgogICAqIE9wZW5zIGEgbG9uZy1saXZlZCBwb3J0IGZvciByZWNlaXZpbmcgbWVzc2FnZXMuCiAgICoKICAgKiBBIFtSZWNlaXZlUG9ydF0gaXMgYSBub24tYnJvYWRjYXN0IHN0cmVhbS4gVGhpcyBtZWFucyB0aGF0IGl0IGJ1ZmZlcnMKICAgKiBpbmNvbWluZyBtZXNzYWdlcyB1bnRpbCBhIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQuIE9ubHkgb25lIGxpc3RlbmVyIGNhbgogICAqIHJlY2VpdmUgbWVzc2FnZXMuIFNlZSBbU3RyZWFtLmFzQnJvYWRjYXN0U3RyZWFtXSBmb3IgdHJhbnNmb3JtaW5nIHRoZSBwb3J0CiAgICogdG8gYSBicm9hZGNhc3Qgc3RyZWFtLgogICAqCiAgICogQSByZWNlaXZlIHBvcnQgaXMgY2xvc2VkIGJ5IGNhbmNlbGluZyBpdHMgc3Vic2NyaXB0aW9uLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgUmVjZWl2ZVBvcnQoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtSZWNlaXZlUG9ydF0gZnJvbSBhIFtSYXdSZWNlaXZlUG9ydF0uCiAgICoKICAgKiBUaGUgaGFuZGxlciBvZiB0aGUgZ2l2ZW4gW3Jhd1BvcnRdIGlzIG92ZXJ3cml0dGVuIGR1cmluZyB0aGUgY29uc3RydWN0aW9uCiAgICogb2YgdGhlIHJlc3VsdC4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFJlY2VpdmVQb3J0LmZyb21SYXdSZWNlaXZlUG9ydChSYXdSZWNlaXZlUG9ydCByYXdQb3J0KTsKCiAgLyoqCiAgICogSW5oZXJpdGVkIGZyb20gW1N0cmVhbV0uCiAgICoKICAgKiBOb3RlIHRoYXQgW29uRXJyb3JdIGFuZCBbY2FuY2VsT25FcnJvcl0gYXJlIGlnbm9yZWQgc2luY2UgYSBSZWNlaXZlUG9ydAogICAqIHdpbGwgbmV2ZXIgcmVjZWl2ZSBhbiBlcnJvci4KICAgKgogICAqIFRoZSBbb25Eb25lXSBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBjbG9zZXMuCiAgICogVGhlIHN0cmVhbSBjbG9zZXMgd2hlbiBbY2xvc2VdIGlzIGNhbGxlZC4KICAgKi8KICBTdHJlYW1TdWJzY3JpcHRpb24gbGlzdGVuKHZvaWQgb25EYXRhKHZhciBtZXNzYWdlKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pOwoKICAvKioKICAgKiBDbG9zZXMgYHRoaXNgLgogICAqCiAgICogSWYgdGhlIHN0cmVhbSBoYXMgbm90IGJlZW4gY2FuY2VsZWQgeWV0LCBhZGRzIGEgY2xvc2UtZXZlbnQgdG8gdGhlIGV2ZW50CiAgICogcXVldWUgYW5kIGRpc2NhcmRzIGFueSBmdXJ0aGVyIGluY29taW5nIG1lc3NhZ2VzLgogICAqCiAgICogSWYgdGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNhbmNlbGVkIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCiAgICovCiAgdm9pZCBjbG9zZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW1NlbmRQb3J0XSB0aGF0IHNlbmRzIHRvIHRoaXMgcmVjZWl2ZSBwb3J0LgogICAqLwogIFNlbmRQb3J0IGdldCBzZW5kUG9ydDsKfQoKYWJzdHJhY3QgY2xhc3MgUmF3UmVjZWl2ZVBvcnQgewogIC8qKgogICAqIE9wZW5zIGEgbG9uZy1saXZlZCBwb3J0IGZvciByZWNlaXZpbmcgbWVzc2FnZXMuCiAgICoKICAgKiBBIFtSYXdSZWNlaXZlUG9ydF0gaXMgbG93IGxldmVsIGFuZCBkb2VzIG5vdCB3b3JrIHdpdGggW1pvbmVdcy4gSXQKICAgKiBjYW4gbm90IGJlIHBhdXNlZC4gVGhlIGRhdGEtaGFuZGxlciBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGZpcnN0CiAgICogZXZlbnQgaXMgcmVjZWl2ZWQuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBSYXdSZWNlaXZlUG9ydChbRnVuY3Rpb24gaGFuZGxlcl0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBoYW5kbGVyIHRoYXQgaXMgaW52b2tlZCBmb3IgZXZlcnkgaW5jb21pbmcgbWVzc2FnZS4KICAgKgogICAqIFRoZSBoYW5kbGVyIGlzIGludm9rZWQgaW4gdGhlIHJvb3Qtem9uZSAoW1pvbmUucm9vdF0pLgogICAqLwogIHZvaWQgc2V0IGhhbmRsZXIoRnVuY3Rpb24gbmV3SGFuZGxlcik7CgogIC8qKgogICAqIENsb3NlcyB0aGUgcG9ydC4KICAgKgogICAqIEFmdGVyIGEgY2FsbCB0byB0aGlzIG1ldGhvZCBhbnkgaW5jb21pbmcgbWVzc2FnZSBpcyBzaWxlbnRseSBkcm9wcGVkLgogICAqLwogIHZvaWQgY2xvc2UoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtTZW5kUG9ydF0gdGhhdCBzZW5kcyB0byB0aGlzIHJhdyByZWNlaXZlIHBvcnQuCiAgICovCiAgU2VuZFBvcnQgZ2V0IHNlbmRQb3J0Owp9CgovKioKICogRGVzY3JpcHRpb24gb2YgYW4gZXJyb3IgZnJvbSBhbm90aGVyIGlzb2xhdGUuCiAqCiAqIFRoaXMgZXJyb3IgaGFzIHRoZSBzYW1lIGB0b1N0cmluZygpYCBhbmQgYHN0YWNrVHJhY2UudG9TdHJpbmcoKWAgYmVoYXZpb3IKICogYXMgdGhlIG9yaWdpbmFsIGVycm9yLCBidXQgaGFzIG5vIG90aGVyIGZlYXR1cmVzIG9mIHRoZSBvcmlnaW5hbCBlcnJvci4KICovCmNsYXNzIFJlbW90ZUVycm9yIGltcGxlbWVudHMgRXJyb3IgewogIGZpbmFsIFN0cmluZyBfZGVzY3JpcHRpb247CiAgZmluYWwgU3RhY2tUcmFjZSBzdGFja1RyYWNlOwogIFJlbW90ZUVycm9yKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIHN0YWNrRGVzY3JpcHRpb24pCiAgICAgIDogX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24sCiAgICAgICAgc3RhY2tUcmFjZSA9IG5ldyBTdGFja1RyYWNlLmZyb21TdHJpbmcoc3RhY2tEZXNjcmlwdGlvbik7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX2Rlc2NyaXB0aW9uOwp9CgovKioKICogQW4gZWZmaWNpZW50bHkgdHJhbnNmZXJhYmxlIHNlcXVlbmNlIG9mIGJ5dGUgdmFsdWVzLgogKgogKiBBIFtUcmFuc2ZlcmFibGVUeXBlZERhdGFdIGlzIGNyZWF0ZWQgZnJvbSBhIG51bWJlciBvZiBieXRlcy4KICogVGhpcyB3aWxsIHRha2UgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBieXRlcy4KICoKICogVGhlIFtUcmFuc2ZlcmFibGVUeXBlZERhdGFdIGNhbiBiZSBtb3ZlZCBiZXR3ZWVuIGlzb2xhdGVzLCBzbwogKiBzZW5kaW5nIGl0IHRocm91Z2ggYSBzZW5kIHBvcnQgd2lsbCBvbmx5IHRha2UgY29uc3RhbnQgdGltZS4KICoKICogV2hlbiBzZW50IHRoaXMgd2F5LCB0aGUgbG9jYWwgdHJhbnNmZXJhYmxlIGNhbiBubyBsb25nZXIgYmUgbWF0ZXJpYWxpemVkLAogKiBhbmQgdGhlIHJlY2VpdmVkIG9iamVjdCBpcyBub3cgdGhlIG9ubHkgd2F5IHRvIG1hdGVyaWFsaXplIHRoZSBkYXRhLgogKi8KQFNpbmNlKCIyLjMuMiIpCmFic3RyYWN0IGNsYXNzIFRyYW5zZmVyYWJsZVR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbVHJhbnNm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aCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0Omlzb2xhdGUiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgQ2xhc3NJRCwgVk1MaWJyYXJ5SG9va3MsIHBhdGNoOwoKaW1wb3J0ICJkYXJ0OmFzeW5jIgogICAgc2hvdyBDb21wbGV0ZXIsIEZ1dHVyZSwgU3RyZWFtLCBTdHJlYW1Db250cm9sbGVyLCBTdHJlYW1TdWJzY3JpcHRpb24sIFRpbWVyOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iIHNob3cgSGFzaE1hcDsKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgQnl0ZUJ1ZmZlciwgVHlwZWREYXRhLCBVaW50OExpc3Q7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAidGltZXJfaW1wbC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBSZWNlaXZlUG9ydCB7CiAgQHBhdGNoCiAgZmFjdG9yeSBSZWNlaXZlUG9ydCgpID0+IG5ldyBfUmVjZWl2ZVBvcnRJbXBsKCk7CgogIEBwYXRjaAogIGZhY3RvcnkgUmVjZWl2ZVBvcnQuZnJvbVJhd1JlY2VpdmVQb3J0KFJhd1JlY2VpdmVQb3J0IHJhd1BvcnQpIHsKICAgIHJldHVybiBuZXcgX1JlY2VpdmVQb3J0SW1wbC5mcm9tUmF3UmVjZWl2ZVBvcnQocmF3UG9ydCk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgQ2FwYWJpbGl0eSB7CiAgQHBhdGNoCiAgZmFjdG9yeSBDYXBhYmlsaXR5KCkgPT4gbmV3IF9DYXBhYmlsaXR5SW1wbCgpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9DYXBhYmlsaXR5SW1wbCBpbXBsZW1lbnRzIENhcGFiaWxpdHkgewogIGZhY3RvcnkgX0NhcGFiaWxpdHlJbXBsKCkgbmF0aXZlICJDYXBhYmlsaXR5SW1wbF9mYWN0b3J5IjsKCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIHJldHVybiAob3RoZXIgaXMgX0NhcGFiaWxpdHlJbXBsKSAmJiBfZXF1YWxzKG90aGVyKTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIF9nZXRfaGFzaGNvZGUoKTsKICB9CgogIF9lcXVhbHMob3RoZXIpIG5hdGl2ZSAiQ2FwYWJpbGl0eUltcGxfZXF1YWxzIjsKICBfZ2V0X2hhc2hjb2RlKCkgbmF0aXZlICJDYXBhYmlsaXR5SW1wbF9nZXRfaGFzaGNvZGUiOwp9CgpAcGF0Y2gKY2xhc3MgUmF3UmVjZWl2ZVBvcnQgewogIC8qKgogICAqIE9wZW5zIGEgbG9uZy1saXZlZCBwb3J0IGZvciByZWNlaXZpbmcgbWVzc2FnZXMuCiAgICoKICAgKiBBIFtSYXdSZWNlaXZlUG9ydF0gaXMgbG93IGxldmVsIGFuZCBkb2VzIG5vdCB3b3JrIHdpdGggW1pvbmVdcy4gSXQKICAgKiBjYW4gbm90IGJlIHBhdXNlZC4gVGhlIGRhdGEtaGFuZGxlciBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGZpcnN0CiAgICogZXZlbnQgaXMgcmVjZWl2ZWQuCiAgICovCiAgQHBhdGNoCiAgZmFjdG9yeSBSYXdSZWNlaXZlUG9ydChbRnVuY3Rpb24gaGFuZGxlcl0pIHsKICAgIF9SYXdSZWNlaXZlUG9ydEltcGwgcmVzdWx0ID0gbmV3IF9SYXdSZWNlaXZlUG9ydEltcGwoKTsKICAgIHJlc3VsdC5oYW5kbGVyID0gaGFuZGxlcjsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgpjbGFzcyBfUmVjZWl2ZVBvcnRJbXBsIGV4dGVuZHMgU3RyZWFtIGltcGxlbWVudHMgUmVjZWl2ZVBvcnQgewogIF9SZWNlaXZlUG9ydEltcGwoKSA6IHRoaXMuZnJvbVJhd1JlY2VpdmVQb3J0KG5ldyBSYXdSZWNlaXZlUG9ydCgpKTsKCiAgX1JlY2VpdmVQb3J0SW1wbC5mcm9tUmF3UmVjZWl2ZVBvcnQodGhpcy5fcmF3UG9ydCkgewogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcihvbkNhbmNlbDogY2xvc2UsIHN5bmM6IHRydWUpOwogICAgX3Jhd1BvcnQuaGFuZGxlciA9IF9jb250cm9sbGVyLmFkZDsKICB9CgogIFNlbmRQb3J0IGdldCBzZW5kUG9ydCB7CiAgICByZXR1cm4gX3Jhd1BvcnQuc2VuZFBvcnQ7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb24gbGlzdGVuKHZvaWQgb25EYXRhKHZhciBtZXNzYWdlKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBjbG9zZSgpIHsKICAgIF9yYXdQb3J0LmNsb3NlKCk7CiAgICBfY29udHJvbGxlci5jbG9zZSgpOwogIH0KCiAgZmluYWwgUmF3UmVjZWl2ZVBvcnQgX3Jhd1BvcnQ7CiAgU3RyZWFtQ29udHJvbGxlciBfY29udHJvbGxlcjsKfQoKdHlwZWRlZiB2b2lkIF9JbW1lZGlhdGVDYWxsYmFjaygpOwoKLy8vIFRoZSBjYWxsYmFjayB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgdGhyb3VnaCBgc2NoZWR1bGVJbW1lZGlhdGVgLgpfSW1tZWRpYXRlQ2FsbGJhY2sgX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjazsKCi8vLyBUaGUgY2xvc3VyZSB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIHNjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZSwgd2hlbiB0aGUgVk0KLy8vIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgZXZlbnQgbG9vcC4Kdm9pZCBfaXNvbGF0ZVNjaGVkdWxlSW1tZWRpYXRlKHZvaWQgY2FsbGJhY2soKSkgewogIGFzc2VydCgoX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayA9PSBudWxsKSB8fAogICAgICAoX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayA9PSBjYWxsYmFjaykpOwogIF9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2sgPSBjYWxsYmFjazsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX3J1blBlbmRpbmdJbW1lZGlhdGVDYWxsYmFjaygpIHsKICBpZiAoX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayAhPSBudWxsKSB7CiAgICB2YXIgY2FsbGJhY2sgPSBfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrOwogICAgX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayA9IG51bGw7CiAgICBjYWxsYmFjaygpOwogIH0KfQoKX0ltbWVkaWF0ZUNhbGxiYWNrIF9yZW1vdmVQZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2soKSB7CiAgdmFyIGNhbGxiYWNrID0gX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjazsKICBfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrID0gbnVsbDsKICByZXR1cm4gY2FsbGJhY2s7Cn0KCi8vLyBUaGUgZW1iZWRkZXIgY2FuIGV4ZWN1dGUgdGhpcyBmdW5jdGlvbiB0byBnZXQgaG9sZCBvZgovLy8gW19pc29sYXRlU2NoZWR1bGVJbW1lZGlhdGVdIGFib3ZlLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKRnVuY3Rpb24gX2dldElzb2xhdGVTY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUoKSB7CiAgcmV0dXJuIF9pc29sYXRlU2NoZWR1bGVJbW1lZGlhdGU7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1Jhd1JlY2VpdmVQb3J0SW1wbCBpbXBsZW1lbnRzIFJhd1JlY2VpdmVQb3J0IHsKICBmYWN0b3J5IF9SYXdSZWNlaXZlUG9ydEltcGwoKSBuYXRpdmUgIlJhd1JlY2VpdmVQb3J0SW1wbF9mYWN0b3J5IjsKCiAgY2xvc2UoKSB7CiAgICAvLyBDbG9zZSB0aGUgcG9ydCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGhhbmRsZXIgbWFwLgogICAgX2hhbmRsZXJNYXAucmVtb3ZlKHRoaXMuX2Nsb3NlSW50ZXJuYWwoKSk7CiAgfQoKICBTZW5kUG9ydCBnZXQgc2VuZFBvcnQgewogICAgcmV0dXJuIF9nZXRfc2VuZHBvcnQoKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICByZXR1cm4gKG90aGVyIGlzIF9SYXdSZWNlaXZlUG9ydEltcGwpICYmCiAgICAgICAgKHRoaXMuX2dldF9pZCgpID09IG90aGVyLl9nZXRfaWQoKSk7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBzZW5kUG9ydC5oYXNoQ29kZTsKICB9CgogIC8qKioqIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgKioqKi8KICBfZ2V0X2lkKCkgbmF0aXZlICJSYXdSZWNlaXZlUG9ydEltcGxfZ2V0X2lkIjsKICBfZ2V0X3NlbmRwb3J0KCkgbmF0aXZlICJSYXdSZWNlaXZlUG9ydEltcGxfZ2V0X3NlbmRwb3J0IjsKCiAgLy8gQ2FsbGVkIGZyb20gdGhlIFZNIHRvIHJldHJpZXZlIHRoZSBoYW5kbGVyIGZvciBhIG1lc3NhZ2UuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9sb29rdXBIYW5kbGVyKGludCBpZCkgewogICAgdmFyIHJlc3VsdCA9IF9oYW5kbGVyTWFwW2lkXTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBDYWxsZWQgZnJvbSB0aGUgVk0gdG8gZGlzcGF0Y2ggdG8gdGhlIGhhbmRsZXIuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIHZvaWQgX2hhbmRsZU1lc3NhZ2UoRnVuY3Rpb24gaGFuZGxlciwgdmFyIG1lc3NhZ2UpIHsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGFueSBleGNlcHRpb24gYWJvcnRzIHRoZQogICAgLy8gVk0uIE9uY2Ugd2UgaGF2ZSBub24tZmF0YWwgZ2xvYmFsIGV4Y2VwdGlvbnMgd2UgbmVlZCB0byBjYXRjaCBlcnJvcnMKICAgIC8vIHNvIHRoYXQgd2UgY2FuIHJ1biB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcy4KICAgIGhhbmRsZXIobWVzc2FnZSk7CiAgICBfcnVuUGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrKCk7CiAgfQoKICAvLyBDYWxsIGludG8gdGhlIFZNIHRvIGNsb3NlIHRoZSBWTSBtYWludGFpbmVkIG1hcHBpbmdzLgogIF9jbG9zZUludGVybmFsKCkgbmF0aXZlICJSYXdSZWNlaXZlUG9ydEltcGxfY2xvc2VJbnRlcm5hbCI7CgogIHZvaWQgc2V0IGhhbmRsZXIoRnVuY3Rpb24gdmFsdWUpIHsKICAgIF9oYW5kbGVyTWFwW3RoaXMuX2dldF9pZCgpXSA9IHZhbHVlOwogIH0KCiAgLy8gVE9ETyhpcG9zdmEpOiBJZGVhbGx5IGtlZXAgdGhpcyBtYXAgaW4gdGhlIFZNLgogIC8vIGlkIHRvIGhhbmRsZXIgbWFwcGluZy4KICBzdGF0aWMgX2luaXRIYW5kbGVyTWFwKCkgewogICAgLy8gVE9ETygxODUxMSk6IFdvcmthcm91bmQgYmFkIENoZWNrU21pIGhvaXN0aW5nLgogICAgdmFyIHRlbXBNYXAgPSBuZXcgSGFzaE1hcCgpOwogICAgLy8gQ29sbGVjdCBmZWVkYmFjayB0aGF0IG5vdCBhbGwga2V5cyBhcmUgU21pcy4KICAgIHRlbXBNYXBbIi4iXSA9IDE7CiAgICB0ZW1wTWFwWyIuIl0gPSAyOwoKICAgIHJldHVybiBuZXcgSGFzaE1hcCgpOwogIH0KCiAgc3RhdGljIGZpbmFsIE1hcCBfaGFuZGxlck1hcCA9IF9pbml0SGFuZGxlck1hcCgpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9TZW5kUG9ydEltcGwgaW1wbGVtZW50cyBTZW5kUG9ydCB7CiAgZmFjdG9yeSBfU2VuZFBvcnRJbXBsLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvKi0tLSBwdWJsaWMgaW50ZXJmYWNlIC0tLSovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgdm9pZCBzZW5kKHZhciBtZXNzYWdlKSB7CiAgICBfc2VuZEludGVybmFsKG1lc3NhZ2UpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIHJldHVybiAob3RoZXIgaXMgX1NlbmRQb3J0SW1wbCkgJiYgKHRoaXMuX2dldF9pZCgpID09IG90aGVyLl9nZXRfaWQoKSk7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBfZ2V0X2hhc2hjb2RlKCk7CiAgfQoKICAvKi0tLSBwcml2YXRlIGltcGxlbWVudGF0aW9uIC0tLSovCiAgX2dldF9pZCgpIG5hdGl2ZSAiU2VuZFBvcnRJbXBsX2dldF9pZCI7CiAgX2dldF9oYXNoY29kZSgpIG5hdGl2ZSAiU2VuZFBvcnRJbXBsX2dldF9oYXNoY29kZSI7CgogIC8vIEZvcndhcmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIFZNLgogIHZvaWQgX3NlbmRJbnRlcm5hbCh2YXIgbWVzc2FnZSkgbmF0aXZlICJTZW5kUG9ydEltcGxfc2VuZEludGVybmFsXyI7Cn0KCnR5cGVkZWYgX051bGxhcnlGdW5jdGlvbigpOwp0eXBlZGVmIF9VbmFyeUZ1bmN0aW9uKE51bGwgYXJncyk7CnR5cGVkZWYgX0JpbmFyeUZ1bmN0aW9uKE51bGwgYXJncywgTnVsbCBtZXNzYWdlKTsKCi8qKgogKiBUYWtlcyB0aGUgcmVhbCBlbnRyeSBwb2ludCBhcyBhcmd1bWVudCBhbmQgaW52b2tlcyBpdCB3aXRoIHRoZQogKiBpbml0aWFsIG1lc3NhZ2UuICBEZWZlcnMgZXhlY3V0aW9uIG9mIHRoZSBlbnRyeSBwb2ludCB1bnRpbCB0aGUKICogaXNvbGF0ZSBpcyBpbiB0aGUgbWVzc2FnZSBsb29wLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX3N0YXJ0TWFpbklzb2xhdGUoRnVuY3Rpb24gZW50cnlQb2ludCwgTGlzdDxTdHJpbmc+IGFyZ3MpIHsKICBfc3RhcnRJc29sYXRlKAogICAgICBudWxsLCAvLyBubyBwYXJlbnQgcG9ydAogICAgICBlbnRyeVBvaW50LAogICAgICBhcmdzLAogICAgICBudWxsLCAvLyBubyBtZXNzYWdlCiAgICAgIHRydWUsIC8vIGlzU3Bhd25VcmkKICAgICAgbnVsbCwgLy8gbm8gY29udHJvbCBwb3J0CiAgICAgIG51bGwpOyAvLyBubyBjYXBhYmlsaXRpZXMKfQoKLyoqCiAqIFJldHVybnMgdGhlIF9zdGFydE1haW5Jc29sYXRlIGZ1bmN0aW9uLiBUaGlzIGNsb3N1cml6YXRpb24gYWxsb3dzIGVtYmVkZGVycwogKiB0byBzZXR1cCB0cmFtcG9saW5lcyB0byB0aGUgbWFpbiBmdW5jdGlvbi4gVGhpcyB3b3JrYXJvdW5kIGNhbiBiZSByZW1vdmVkCiAqIG9uY2Ugc3VwcG9ydCBmb3IgQHByYWdtYSgidm06ZW50cnlfcG9pbnQiLCAiZ2V0IikgYXMgZG9jdW1lbnRlZCBpbgogKiBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzU3MjAgbGFuZHMuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKRnVuY3Rpb24gX2dldFN0YXJ0TWFpbklzb2xhdGVGdW5jdGlvbigpIHsKICByZXR1cm4gX3N0YXJ0TWFpbklzb2xhdGU7Cn0KCi8qKgogKiBUYWtlcyB0aGUgcmVhbCBlbnRyeSBwb2ludCBhcyBhcmd1bWVudCBhbmQgaW52b2tlcyBpdCB3aXRoIHRoZSBpbml0aWFsCiAqIG1lc3NhZ2UuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfc3RhcnRJc29sYXRlKAogICAgU2VuZFBvcnQgcGFyZW50UG9ydCwKICAgIEZ1bmN0aW9uIGVudHJ5UG9pbnQsCiAgICBMaXN0PFN0cmluZz4gYXJncywKICAgIHZhciBtZXNzYWdlLAogICAgYm9vbCBpc1NwYXduVXJpLAogICAgUmF3UmVjZWl2ZVBvcnQgY29udHJvbFBvcnQsCiAgICBMaXN0IGNhcGFiaWxpdGllcykgewogIC8vIFRoZSBjb250cm9sIHBvcnQgKGFrYSB0aGUgbWFpbiBpc29sYXRlIHBvcnQpIGRvZXMgbm90IGhhbmRsZSBhbnkgbWVzc2FnZXMuCiAgaWYgKGNvbnRyb2xQb3J0ICE9IG51bGwpIHsKICAgIGNvbnRyb2xQb3J0LmhhbmRsZXIgPSAoXykge307IC8vIE5vYm9keSBob21lIG9uIHRoZSBjb250cm9sIHBvcnQuCiAgfQoKICBpZiAocGFyZW50UG9ydCAhPSBudWxsKSB7CiAgICAvLyBCdWlsZCBhIG1lc3NhZ2UgdG8gb3VyIHBhcmVudCBpc29sYXRlIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlCiAgICAvLyBjdXJyZW50IGlzb2xhdGUncyBjb250cm9sIHBvcnQgYW5kIGNhcGFiaWxpdGllcy4KICAgIC8vCiAgICAvLyBUT0RPKGZsb2l0c2NoKTogU2VuZCBhbiBlcnJvciBtZXNzYWdlIGlmIHdlIGNhbid0IGZpbmQgdGhlIGVudHJ5IHBvaW50LgogICAgdmFyIHJlYWR5TWVzc2FnZSA9IG5ldyBMaXN0KDIpOwogICAgcmVhZHlNZXNzYWdlWzBdID0gY29udHJvbFBvcnQuc2VuZFBvcnQ7CiAgICByZWFkeU1lc3NhZ2VbMV0gPSBjYXBhYmlsaXRpZXM7CgogICAgLy8gT3V0IG9mIGFuIGV4Y2VzcyBvZiBwYXJhbm9pYSB3ZSBjbGVhciB0aGUgY2FwYWJpbGl0aWVzIGZyb20gdGhlCiAgICAvLyBzdGFjay4gIE5vdCByZWFsbHkgbmVjZXNzYXJ5LgogICAgY2FwYWJpbGl0aWVzID0gbnVsbDsKICAgIHBhcmVudFBvcnQuc2VuZChyZWFkeU1lc3NhZ2UpOwogIH0KICBhc3NlcnQoY2FwYWJpbGl0aWVzID09IG51bGwpOwoKICAvLyBEZWxheSBhbGwgdXNlciBjb2RlIGhhbmRsaW5nIHRvIHRoZSBuZXh0IHJ1biBvZiB0aGUgbWVzc2FnZSBsb29wLiBUaGlzCiAgLy8gYWxsb3dzIHVzIHRvIGludGVyY2VwdCBjZXJ0YWluIGNvbmRpdGlvbnMgaW4gdGhlIGV2ZW50IGRpc3BhdGNoLCBzdWNoIGFzCiAgLy8gc3RhcnRpbmcgaW4gcGF1c2VkIHN0YXRlLgogIFJhd1JlY2VpdmVQb3J0IHBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKICBwb3J0LmhhbmRsZXIgPSAoXykgewogICAgcG9ydC5jbG9zZSgpOwoKICAgIGlmIChpc1NwYXduVXJpKSB7CiAgICAgIGlmIChlbnRyeVBvaW50IGlzIF9CaW5hcnlGdW5jdGlvbikgewogICAgICAgIChlbnRyeVBvaW50IGFzIGR5bmFtaWMpKGFyZ3MsIG1lc3NhZ2UpOwogICAgICB9IGVsc2UgaWYgKGVudHJ5UG9pbnQgaXMgX1VuYXJ5RnVuY3Rpb24pIHsKICAgICAgICAoZW50cnlQb2ludCBhcyBkeW5hbWljKShhcmdzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbnRyeVBvaW50KCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGVudHJ5UG9pbnQobWVzc2FnZSk7CiAgICB9CiAgfTsKICAvLyBNYWtlIHN1cmUgdGhlIG1lc3NhZ2UgaGFuZGxlciBpcyB0cmlnZ2VyZWQuCiAgcG9ydC5zZW5kUG9ydC5zZW5kKG51bGwpOwp9CgpAcGF0Y2gKY2xhc3MgSXNvbGF0ZSB7CiAgc3RhdGljIGZpbmFsIF9jdXJyZW50SXNvbGF0ZSA9IF9nZXRDdXJyZW50SXNvbGF0ZSgpOwogIHN0YXRpYyBmaW5hbCBfcm9vdFVyaSA9IF9nZXRDdXJyZW50Um9vdFVyaSgpOwoKICBAcGF0Y2gKICBzdGF0aWMgSXNvbGF0ZSBnZXQgY3VycmVudCA9PiBfY3VycmVudElzb2xhdGU7CgogIEBwYXRjaAogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+IF9nZXREZWJ1Z05hbWUoY29udHJvbFBvcnQpOwoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFVyaT4gZ2V0IHBhY2thZ2VSb290IHsKICAgIHZhciBob29rID0gVk1MaWJyYXJ5SG9va3MucGFja2FnZVJvb3RVcmlGdXR1cmU7CiAgICBpZiAoaG9vayA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJJc29sYXRlLnBhY2thZ2VSb290Iik7CiAgICB9CiAgICByZXR1cm4gaG9vaygpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxVcmk+IGdldCBwYWNrYWdlQ29uZmlnIHsKICAgIHZhciBob29rID0gVk1MaWJyYXJ5SG9va3MucGFja2FnZUNvbmZpZ1VyaUZ1dHVyZTsKICAgIGlmIChob29rID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIklzb2xhdGUucGFja2FnZUNvbmZpZyIpOwogICAgfQogICAgcmV0dXJuIGhvb2soKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8VXJpPiByZXNvbHZlUGFja2FnZVVyaShVcmkgcGFja2FnZVVyaSkgewogICAgdmFyIGhvb2sgPSBWTUxpYnJhcnlIb29rcy5yZXNvbHZlUGFja2FnZVVyaUZ1dHVyZTsKICAgIGlmIChob29rID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIklzb2xhdGUucmVzb2x2ZVBhY2thZ2VVcmkiKTsKICAgIH0KICAgIHJldHVybiBob29rKHBhY2thZ2VVcmkpOwogIH0KCiAgc3RhdGljIGJvb2wgX3BhY2thZ2VTdXBwb3J0ZWQoKSA9PgogICAgICAoVk1MaWJyYXJ5SG9va3MucGFja2FnZVJvb3RVcmlGdXR1cmUgIT0gbnVsbCkgJiYKICAgICAgKFZNTGlicmFyeUhvb2tzLnBhY2thZ2VDb25maWdVcmlGdXR1cmUgIT0gbnVsbCkgJiYKICAgICAgKFZNTGlicmFyeUhvb2tzLnJlc29sdmVQYWNrYWdlVXJpRnV0dXJlICE9IG51bGwpOwoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPElzb2xhdGU+IHNwYXduPFQ+KHZvaWQgZW50cnlQb2ludChUIG1lc3NhZ2UpLCBUIG1lc3NhZ2UsCiAgICAgIHtib29sIHBhdXNlZDogZmFsc2UsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIFNlbmRQb3J0IG9uRXhpdCwKICAgICAgU2VuZFBvcnQgb25FcnJvciwKICAgICAgU3RyaW5nIGRlYnVnTmFtZX0pIGFzeW5jIHsKICAgIC8vIGBwYXVzZWRgIGlzbid0IGhhbmRsZWQgeWV0LgogICAgUmF3UmVjZWl2ZVBvcnQgcmVhZHlQb3J0OwogICAgdHJ5IHsKICAgICAgLy8gQ2hlY2sgZm9yIHRoZSB0eXBlIG9mIGBlbnRyeVBvaW50YCBvbiB0aGUgc3Bhd25pbmcgaXNvbGF0ZSB0byBtYWtlCiAgICAgIC8vIGVycm9yLWhhbmRsaW5nIGVhc2llci4KICAgICAgaWYgKGVudHJ5UG9pbnQgaXMhIF9VbmFyeUZ1bmN0aW9uKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoZW50cnlQb2ludCk7CiAgICAgIH0KICAgICAgLy8gVGhlIFZNIHdpbGwgaW52b2tlIFtfc3RhcnRJc29sYXRlXSB3aXRoIGVudHJ5UG9pbnQgYXMgYXJndW1lbnQuCiAgICAgIHJlYWR5UG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwoKICAgICAgLy8gV2UgZG8gbm90IGluaGVyaXQgdGhlIHBhY2thZ2UgY29uZmlnIHNldHRpbmdzIGZyb20gdGhlIHBhcmVudCBpc29sYXRlLAogICAgICAvLyBpbnN0ZWFkIHdlIHVzZSB0aGUgdmFsdWVzIHRoYXQgd2VyZSBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4KICAgICAgdmFyIHBhY2thZ2VDb25maWcgPSBWTUxpYnJhcnlIb29rcy5wYWNrYWdlQ29uZmlnU3RyaW5nOwogICAgICB2YXIgc2NyaXB0ID0gVk1MaWJyYXJ5SG9va3MucGxhdGZvcm1TY3JpcHQ7CiAgICAgIGlmIChzY3JpcHQgPT0gbnVsbCkgewogICAgICAgIC8vIFdlIGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzdXBwb3J0IHNwYXduaW5nIHRoZSBuZXcKICAgICAgICAvLyBpc29sYXRlLgogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJJc29sYXRlLnNwYXduIik7CiAgICAgIH0KICAgICAgaWYgKHNjcmlwdC5zY2hlbWUgPT0gInBhY2thZ2UiKSB7CiAgICAgICAgc2NyaXB0ID0gYXdhaXQgSXNvbGF0ZS5yZXNvbHZlUGFja2FnZVVyaShzY3JpcHQpOwogICAgICB9CgogICAgICBfc3Bhd25GdW5jdGlvbigKICAgICAgICAgIHJlYWR5UG9ydC5zZW5kUG9ydCwKICAgICAgICAgIHNjcmlwdC50b1N0cmluZygpLAogICAgICAgICAgZW50cnlQb2ludCwKICAgICAgICAgIG1lc3NhZ2UsCiAgICAgICAgICBwYXVzZWQsCiAgICAgICAgICBlcnJvcnNBcmVGYXRhbCwKICAgICAgICAgIG9uRXhpdCwKICAgICAgICAgIG9uRXJyb3IsCiAgICAgICAgICBudWxsLAogICAgICAgICAgcGFja2FnZUNvbmZpZywKICAgICAgICAgIGRlYnVnTmFtZSk7CiAgICAgIHJldHVybiBhd2FpdCBfc3Bhd25Db21tb24ocmVhZHlQb3J0KTsKICAgIH0gY2F0Y2ggKGUsIHN0KSB7CiAgICAgIGlmIChyZWFkeVBvcnQgIT0gbnVsbCkgewogICAgICAgIHJlYWR5UG9ydC5jbG9zZSgpOwogICAgICB9CiAgICAgIHJldHVybiBhd2FpdCBuZXcgRnV0dXJlPElzb2xhdGU+LmVycm9yKGUsIHN0KTsKICAgIH0KICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8SXNvbGF0ZT4gc3Bhd25VcmkoVXJpIHVyaSwgTGlzdDxTdHJpbmc+IGFyZ3MsIHZhciBtZXNzYWdlLAogICAgICB7Ym9vbCBwYXVzZWQ6IGZhbHNlLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIGJvb2wgY2hlY2tlZCwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgVXJpIHBhY2thZ2VSb290LAogICAgICBVcmkgcGFja2FnZUNvbmZpZywKICAgICAgYm9vbCBhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbjogZmFsc2UsCiAgICAgIFN0cmluZyBkZWJ1Z05hbWV9KSBhc3luYyB7CiAgICBSYXdSZWNlaXZlUG9ydCByZWFkeVBvcnQ7CiAgICBpZiAoZW52aXJvbm1lbnQgIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCJlbnZpcm9ubWVudCIpOwogICAgfQoKICAgIC8vIFZlcmlmeSB0aGF0IG5vIG11dHVhbGx5IGV4Y2x1c2l2ZSBhcmd1bWVudHMgaGF2ZSBiZWVuIHBhc3NlZC4KICAgIGlmIChhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbikgewogICAgICBpZiAocGFja2FnZVJvb3QgIT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJDYW5ub3Qgc2ltdWx0YW5lb3VzbHkgcmVxdWVzdCAiCiAgICAgICAgICAgICJhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbiBhbmQgc3BlY2lmeSBhIgogICAgICAgICAgICAicGFja2FnZVJvb3QuIik7CiAgICAgIH0KICAgICAgaWYgKHBhY2thZ2VDb25maWcgIT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJDYW5ub3Qgc2ltdWx0YW5lb3VzbHkgcmVxdWVzdCAiCiAgICAgICAgICAgICJhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbiBhbmQgc3BlY2lmeSBhIgogICAgICAgICAgICAicGFja2FnZUNvbmZpZy4iKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKChwYWNrYWdlUm9vdCAhPSBudWxsKSAmJiAocGFja2FnZUNvbmZpZyAhPSBudWxsKSkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJDYW5ub3Qgc2ltdWx0YW5lb3VzbHkgc3BlY2lmeSBhICIKICAgICAgICAgICAgInBhY2thZ2VSb290IGFuZCBhIHBhY2thZ2VDb25maWcuIik7CiAgICAgIH0KICAgIH0KICAgIHRyeSB7CiAgICAgIC8vIFJlc29sdmUgdGhlIHVyaSBhZ2FpbnN0IHRoZSBjdXJyZW50IGlzb2xhdGUncyByb290IFVyaSBmaXJzdC4KICAgICAgdmFyIHNwYXduZWRVcmkgPSBfcm9vdFVyaS5yZXNvbHZlVXJpKHVyaSk7CgogICAgICAvLyBJbmhlcml0IHRoaXMgaXNvbGF0ZSdzIHBhY2thZ2UgcmVzb2x1dGlvbiBzZXR1cCBpZiBub3Qgb3ZlcnJpZGRlbi4KICAgICAgaWYgKCFhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbiAmJgogICAgICAgICAgKHBhY2thZ2VSb290ID09IG51bGwpICYmCiAgICAgICAgICAocGFja2FnZUNvbmZpZyA9PSBudWxsKSkgewogICAgICAgIGlmIChJc29sYXRlLl9wYWNrYWdlU3VwcG9ydGVkKCkpIHsKICAgICAgICAgIHBhY2thZ2VSb290ID0gYXdhaXQgSXNvbGF0ZS5wYWNrYWdlUm9vdDsKICAgICAgICAgIHBhY2thZ2VDb25maWcgPSBhd2FpdCBJc29sYXRlLnBhY2thZ2VDb25maWc7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBFbnN1cmUgdG8gcmVzb2x2ZSBwYWNrYWdlOiBVUklzIGJlaW5nIGhhbmRlZCBpbiBhcyBwYXJhbWV0ZXJzLgogICAgICBpZiAocGFja2FnZVJvb3QgIT0gbnVsbCkgewogICAgICAgIC8vIGBwYWNrYWdlcy9gIGRpcmVjdG9yeSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBGb3JjZSBpdCBudWxsLgogICAgICAgIC8vIFRPRE8obWZhaXJodXJzdCkgU2hvdWxkIHRoaXMgdGhyb3cgYW4gZXhjZXB0aW9uPwogICAgICAgIHBhY2thZ2VSb290ID0gbnVsbDsKICAgICAgfSBlbHNlIGlmIChwYWNrYWdlQ29uZmlnICE9IG51bGwpIHsKICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIHJlc29sdmVQYWNrYWdlVXJpIGlmIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgaW4gY2FzZQogICAgICAgIC8vIHRoZSBBUEkgaXMgbm90IHN1cHBvcnRlZC4KICAgICAgICBpZiAocGFja2FnZUNvbmZpZy5zY2hlbWUgPT0gInBhY2thZ2UiKSB7CiAgICAgICAgICBwYWNrYWdlQ29uZmlnID0gYXdhaXQgSXNvbGF0ZS5yZXNvbHZlUGFja2FnZVVyaShwYWNrYWdlQ29uZmlnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFRoZSBWTSB3aWxsIGludm9rZSBbX3N0YXJ0SXNvbGF0ZV0gYW5kIG5vdCBgbWFpbmAuCiAgICAgIHJlYWR5UG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwogICAgICB2YXIgcGFja2FnZVJvb3RTdHJpbmcgPSBwYWNrYWdlUm9vdD8udG9TdHJpbmcoKTsKICAgICAgdmFyIHBhY2thZ2VDb25maWdTdHJpbmcgPSBwYWNrYWdlQ29uZmlnPy50b1N0cmluZygpOwoKICAgICAgX3NwYXduVXJpKAogICAgICAgICAgcmVhZHlQb3J0LnNlbmRQb3J0LAogICAgICAgICAgc3Bhd25lZFVyaS50b1N0cmluZygpLAogICAgICAgICAgYXJncywKICAgICAgICAgIG1lc3NhZ2UsCiAgICAgICAgICBwYXVzZWQsCiAgICAgICAgICBvbkV4aXQsCiAgICAgICAgICBvbkVycm9yLAogICAgICAgICAgZXJyb3JzQXJlRmF0YWwsCiAgICAgICAgICBjaGVja2VkLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIC8qIGVudmlyb25tZW50ICovCiAgICAgICAgICBwYWNrYWdlUm9vdFN0cmluZywKICAgICAgICAgIHBhY2thZ2VDb25maWdTdHJpbmcsCiAgICAgICAgICBkZWJ1Z05hbWUpOwogICAgICByZXR1cm4gYXdhaXQgX3NwYXduQ29tbW9uKHJlYWR5UG9ydCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGlmIChyZWFkeVBvcnQgIT0gbnVsbCkgewogICAgICAgIHJlYWR5UG9ydC5jbG9zZSgpOwogICAgICB9CiAgICAgIHJldGhyb3c7CiAgICB9CiAgfQoKICBzdGF0aWMgRnV0dXJlPElzb2xhdGU+IF9zcGF3bkNvbW1vbihSYXdSZWNlaXZlUG9ydCByZWFkeVBvcnQpIHsKICAgIENvbXBsZXRlciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPElzb2xhdGU+LnN5bmMoKTsKICAgIHJlYWR5UG9ydC5oYW5kbGVyID0gKHJlYWR5TWVzc2FnZSkgewogICAgICByZWFkeVBvcnQuY2xvc2UoKTsKICAgICAgaWYgKHJlYWR5TWVzc2FnZSBpcyBMaXN0ICYmIHJlYWR5TWVzc2FnZS5sZW5ndGggPT0gMikgewogICAgICAgIFNlbmRQb3J0IGNvbnRyb2xQb3J0ID0gcmVhZHlNZXNzYWdlWzBdOwogICAgICAgIExpc3QgY2FwYWJpbGl0aWVzID0gcmVhZHlNZXNzYWdlWzFdOwogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZShuZXcgSXNvbGF0ZShjb250cm9sUG9ydCwKICAgICAgICAgICAgcGF1c2VDYXBhYmlsaXR5OiBjYXBhYmlsaXRpZXNbMF0sCiAgICAgICAgICAgIHRlcm1pbmF0ZUNhcGFiaWxpdHk6IGNhcGFiaWxpdGllc1sxXSkpOwogICAgICB9IGVsc2UgaWYgKHJlYWR5TWVzc2FnZSBpcyBTdHJpbmcpIHsKICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBzdGFydGluZyB0aGUgbmV3IGlzb2xhdGUuCiAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlRXJyb3IobmV3IElzb2xhdGVTcGF3bkV4Y2VwdGlvbigKICAgICAgICAgICAgJ1VuYWJsZSB0byBzcGF3biBpc29sYXRlOiAke3JlYWR5TWVzc2FnZX0nKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKG5ldyBJc29sYXRlU3Bhd25FeGNlcHRpb24oCiAgICAgICAgICAgICJJbnRlcm5hbCBlcnJvcjogdW5leHBlY3RlZCBmb3JtYXQgZm9yIHJlYWR5IG1lc3NhZ2U6ICIKICAgICAgICAgICAgIicke3JlYWR5TWVzc2FnZX0nIikpOwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICAvLyBUT0RPKGlwb3N2YSk6IENsZWFudXAgdG8gaGF2ZSBvbmx5IG9uZSBkZWZpbml0aW9uLgogIC8vIFRoZXNlIHZhbHVlcyBuZWVkIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBjbGFzcyBJc29sYXRlTWVzc2FnZUhhbmRsZXIKICAvLyBpbiB2bS9pc29sYXRlLmNjLgogIHN0YXRpYyBjb25zdCBfUEFVU0UgPSAxOwogIHN0YXRpYyBjb25zdCBfUkVTVU1FID0gMjsKICBzdGF0aWMgY29uc3QgX1BJTkcgPSAzOwogIHN0YXRpYyBjb25zdCBfS0lMTCA9IDQ7CiAgc3RhdGljIGNvbnN0IF9BRERfRVhJVCA9IDU7CiAgc3RhdGljIGNvbnN0IF9ERUxfRVhJVCA9IDY7CiAgc3RhdGljIGNvbnN0IF9BRERfRVJST1IgPSA3OwogIHN0YXRpYyBjb25zdCBfREVMX0VSUk9SID0gODsKICBzdGF0aWMgY29uc3QgX0VSUk9SX0ZBVEFMID0gOTsKCiAgc3RhdGljIHZvaWQgX3NwYXduRnVuY3Rpb24oCiAgICAgIFNlbmRQb3J0IHJlYWR5UG9ydCwKICAgICAgU3RyaW5nIHVyaSwKICAgICAgRnVuY3Rpb24gdG9wTGV2ZWxGdW5jdGlvbiwKICAgICAgdmFyIG1lc3NhZ2UsCiAgICAgIGJvb2wgcGF1c2VkLAogICAgICBib29sIGVycm9yc0FyZUZhdGFsLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIFN0cmluZyBwYWNrYWdlUm9vdCwKICAgICAgU3RyaW5nIHBhY2thZ2VDb25maWcsCiAgICAgIFN0cmluZyBkZWJ1Z05hbWUpIG5hdGl2ZSAiSXNvbGF0ZV9zcGF3bkZ1bmN0aW9uIjsKCiAgc3RhdGljIHZvaWQgX3NwYXduVXJpKAogICAgICBTZW5kUG9ydCByZWFkeVBvcnQsCiAgICAgIFN0cmluZyB1cmksCiAgICAgIExpc3Q8U3RyaW5nPiBhcmdzLAogICAgICB2YXIgbWVzc2FnZSwKICAgICAgYm9vbCBwYXVzZWQsCiAgICAgIFNlbmRQb3J0IG9uRXhpdCwKICAgICAgU2VuZFBvcnQgb25FcnJvciwKICAgICAgYm9vbCBlcnJvcnNBcmVGYXRhbCwKICAgICAgYm9vbCBjaGVja2VkLAogICAgICBMaXN0IGVudmlyb25tZW50LAogICAgICBTdHJpbmcgcGFja2FnZVJvb3QsCiAgICAgIFN0cmluZyBwYWNrYWdlQ29uZmlnLAogICAgICBTdHJpbmcgZGVidWdOYW1lKSBuYXRpdmUgIklzb2xhdGVfc3Bhd25VcmkiOwoKICBzdGF0aWMgdm9pZCBfc2VuZE9PQihwb3J0LCBtc2cpIG5hdGl2ZSAiSXNvbGF0ZV9zZW5kT09CIjsKCiAgc3RhdGljIFN0cmluZyBfZ2V0RGVidWdOYW1lKFNlbmRQb3J0IGNvbnRyb2xQb3J0KQogICAgICBuYXRpdmUgIklzb2xhdGVfZ2V0RGVidWdOYW1lIjsKCiAgQHBhdGNoCiAgdm9pZCBfcGF1c2UoQ2FwYWJpbGl0eSByZXN1bWVDYXBhYmlsaXR5KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfUEFVU0UKICAgICAgLi5bMl0gPSBwYXVzZUNhcGFiaWxpdHkKICAgICAgLi5bM10gPSByZXN1bWVDYXBhYmlsaXR5OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHJlc3VtZShDYXBhYmlsaXR5IHJlc3VtZUNhcGFiaWxpdHkpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg0KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9SRVNVTUUKICAgICAgLi5bMl0gPSBwYXVzZUNhcGFiaWxpdHkKICAgICAgLi5bM10gPSByZXN1bWVDYXBhYmlsaXR5OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIGFkZE9uRXhpdExpc3RlbmVyKFNlbmRQb3J0IHJlc3BvbnNlUG9ydCwge09iamVjdCByZXNwb25zZX0pIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg0KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9BRERfRVhJVAogICAgICAuLlsyXSA9IHJlc3BvbnNlUG9ydAogICAgICAuLlszXSA9IHJlc3BvbnNlOwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHJlbW92ZU9uRXhpdExpc3RlbmVyKFNlbmRQb3J0IHJlc3BvbnNlUG9ydCkgewogICAgdmFyIG1zZyA9IG5ldyBMaXN0KDMpCiAgICAgIC4uWzBdID0gMCAvLyBNYWtlIHJvb20gZm9yIE9PQiBtZXNzYWdlIHR5cGUuCiAgICAgIC4uWzFdID0gX0RFTF9FWElUCiAgICAgIC4uWzJdID0gcmVzcG9uc2VQb3J0OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHNldEVycm9yc0ZhdGFsKGJvb2wgZXJyb3JzQXJlRmF0YWwpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg0KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9FUlJPUl9GQVRBTAogICAgICAuLlsyXSA9IHRlcm1pbmF0ZUNhcGFiaWxpdHkKICAgICAgLi5bM10gPSBlcnJvcnNBcmVGYXRhbDsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBraWxsKHtpbnQgcHJpb3JpdHk6IGJlZm9yZU5leHRFdmVudH0pIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg0KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9LSUxMCiAgICAgIC4uWzJdID0gdGVybWluYXRlQ2FwYWJpbGl0eQogICAgICAuLlszXSA9IHByaW9yaXR5OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHBpbmcoU2VuZFBvcnQgcmVzcG9uc2VQb3J0LCB7T2JqZWN0IHJlc3BvbnNlLCBpbnQgcHJpb3JpdHk6IGltbWVkaWF0ZX0pIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg1KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT00gbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9QSU5HCiAgICAgIC4uWzJdID0gcmVzcG9uc2VQb3J0CiAgICAgIC4uWzNdID0gcHJpb3JpdHkKICAgICAgLi5bNF0gPSByZXNwb25zZTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBhZGRFcnJvckxpc3RlbmVyKFNlbmRQb3J0IHBvcnQpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCgzKQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9BRERfRVJST1IKICAgICAgLi5bMl0gPSBwb3J0OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHJlbW92ZUVycm9yTGlzdGVuZXIoU2VuZFBvcnQgcG9ydCkgewogICAgdmFyIG1zZyA9IG5ldyBMaXN0KDMpCiAgICAgIC4uWzBdID0gMCAvLyBNYWtlIHJvb20gZm9yIE9PQiBtZXNzYWdlIHR5cGUuCiAgICAgIC4uWzFdID0gX0RFTF9FUlJPUgogICAgICAuLlsyXSA9IHBvcnQ7CiAgICBfc2VuZE9PQihjb250cm9sUG9ydCwgbXNnKTsKICB9CgogIHN0YXRpYyBJc29sYXRlIF9nZXRDdXJyZW50SXNvbGF0ZSgpIHsKICAgIExpc3QgcG9ydEFuZENhcGFiaWxpdGllcyA9IF9nZXRQb3J0QW5kQ2FwYWJpbGl0aWVzT2ZDdXJyZW50SXNvbGF0ZSgpOwogICAgcmV0dXJuIG5ldyBJc29sYXRlKHBvcnRBbmRDYXBhYmlsaXRpZXNbMF0sCiAgICAgICAgcGF1c2VDYXBhYmlsaXR5OiBwb3J0QW5kQ2FwYWJpbGl0aWVzWzFdLAogICAgICAgIHRlcm1pbmF0ZUNhcGFiaWxpdHk6IHBvcnRBbmRDYXBhYmlsaXRpZXNbMl0pOwogIH0KCiAgc3RhdGljIExpc3QgX2dldFBvcnRBbmRDYXBhYmlsaXRpZXNPZkN1cnJlbnRJc29sYXRlKCkKICAgICAgbmF0aXZlICJJc29sYXRlX2dldFBvcnRBbmRDYXBhYmlsaXRpZXNPZkN1cnJlbnRJc29sYXRlIjsKCiAgc3RhdGljIFVyaSBfZ2V0Q3VycmVudFJvb3RVcmkoKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gVXJpLnBhcnNlKF9nZXRDdXJyZW50Um9vdFVyaVN0cigpKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9nZXRDdXJyZW50Um9vdFVyaVN0cigpIG5hdGl2ZSAiSXNvbGF0ZV9nZXRDdXJyZW50Um9vdFVyaVN0ciI7Cn0KCkBwYXRjaAphYnN0cmFjdCBjbGFzcyBUcmFuc2ZlcmFibGVUeXBlZERhdGEgewogIEBwYXRjaAogIGZhY3RvcnkgVHJhbnNmZXJhYmxlVHlwZWREYXRhLmZyb21MaXN0KExpc3Q8VHlwZWREYXRhPiBjaHVua3MpIHsKICAgIGlmIChjaHVua3MgPT0gbnVsbCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKGNodW5rcyk7CiAgICB9CiAgICBmaW5hbCBpbnQgY2lkID0gQ2xhc3NJRC5nZXRJRChjaHVua3MpOwog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LgovLwovLyBUbyBlbnN1cmUgdGhlIHRpbWVycyBhcmUgb3JkZXJlZCBieSBpbnNlcnRpb24gdGltZSwgdGhlIF9UaW1lciBjbGFzcyBoYXMgYQovLyBgX2lkYCBmaWVsZCBzZXQgd2hlbiBhZGRlZCB0byB0aGUgaGVhcC4KLy8KLy8gWzBdIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmluYXJ5X2hlYXAKY2xhc3MgX1RpbWVySGVhcCB7CiAgTGlzdDxfVGltZXI+IF9saXN0OwogIGludCBfdXNlZCA9IDA7CgogIF9UaW1lckhlYXAoW2ludCBpbml0U2l6ZSA9IDddKSA6IF9saXN0ID0gbmV3IExpc3Q8X1RpbWVyPihpbml0U2l6ZSk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3VzZWQgPT0gMDsKCiAgX1RpbWVyIGdldCBmaXJzdCA9PiBfbGlzdFswXTsKCiAgYm9vbCBpc0ZpcnN0KF9UaW1lciB0aW1lcikgPT4gdGltZXIuX2luZGV4T3JOZXh0ID09IDA7CgogIHZvaWQgYWRkKF9UaW1lciB0aW1lcikgewogICAgaWYgKF91c2VkID09IF9saXN0Lmxlbmd0aCkgewogICAgICBfcmVzaXplKCk7CiAgICB9CiAgICB0aW1lci5faW5kZXhPck5leHQgPSBfdXNlZCsrOwogICAgX2xpc3RbdGltZXIuX2luZGV4T3JOZXh0XSA9IHRpbWVyOwogICAgX2J1YmJsZVVwKHRpbWVyKTsKICB9CgogIF9UaW1lciByZW1vdmVGaXJzdCgpIHsKICAgIHZhciBmID0gZmlyc3Q7CiAgICByZW1vdmUoZik7CiAgICByZXR1cm4gZjsKICB9CgogIHZvaWQgcmVtb3ZlKF9UaW1lciB0aW1lcikgewogICAgX3VzZWQtLTsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIF9saXN0WzBdID0gbnVsbDsKICAgICAgdGltZXIuX2luZGV4T3JOZXh0ID0gbnVsbDsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGxhc3QgPSBfbGlzdFtfdXNlZF07CiAgICBpZiAoIWlkZW50aWNhbChsYXN0LCB0aW1lcikpIHsKICAgICAgbGFzdC5faW5kZXhPck5leHQgPSB0aW1lci5faW5kZXhPck5leHQ7CiAgICAgIF9saXN0W2xhc3QuX2luZGV4T3JOZXh0XSA9IGxhc3Q7CiAgICAgIGlmIChsYXN0Ll9jb21wYXJlVG8odGltZXIpIDwgMCkgewogICAgICAgIF9idWJibGVVcChsYXN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfYnViYmxlRG93bihsYXN0KTsKICAgICAgfQogICAgfQogICAgX2xpc3RbX3VzZWRdID0gbnVsbDsKICAgIHRpbWVyLl9pbmRleE9yTmV4dCA9IG51bGw7CiAgfQoKICB2b2lkIF9yZXNpemUoKSB7CiAgICB2YXIgbmV3TGlzdCA9IG5ldyBMaXN0PF9UaW1lcj4oX2xpc3QubGVuZ3RoICogMiArIDEpOwogICAgbmV3TGlzdC5zZXRSYW5nZSgwLCBfdXNlZCwgX2xpc3QpOwogICAgX2xpc3QgPSBuZXdMaXN0OwogIH0KCiAgdm9pZCBfYnViYmxlVXAoX1RpbWVyIHRpbWVyKSB7CiAgICB3aGlsZSAoIWlzRmlyc3QodGltZXIpKSB7CiAgICAgIFRpbWVyIHBhcmVudCA9IF9wYXJlbnQodGltZXIpOwogICAgICBpZiAodGltZXIuX2NvbXBhcmVUbyhwYXJlbnQpIDwgMCkgewogICAgICAgIF9zd2FwKHRpbWVyLCBwYXJlbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9idWJibGVEb3duKF9UaW1lciB0aW1lcikgewogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaW50IGxlZnRJbmRleCA9IF9sZWZ0Q2hpbGRJbmRleCh0aW1lci5faW5kZXhPck5leHQpOwogICAgICBpbnQgcmlnaHRJbmRleCA9IF9yaWdodENoaWxkSW5kZXgodGltZXIuX2luZGV4T3JOZXh0KTsKICAgICAgX1RpbWVyIG5ld2VzdCA9IHRpbWVyOwogICAgICBpZiAobGVmdEluZGV4IDwgX3VzZWQgJiYgX2xpc3RbbGVmdEluZGV4XS5fY29tcGFyZVRvKG5ld2VzdCkgPCAwKSB7CiAgICAgICAgbmV3ZXN0ID0gX2xpc3RbbGVmdEluZGV4XTsKICAgICAgfQogICAgICBpZiAocmlnaHRJbmRleCA8IF91c2VkICYmIF9saXN0W3JpZ2h0SW5kZXhdLl9jb21wYXJlVG8obmV3ZXN0KSA8IDApIHsKICAgICAgICBuZXdlc3QgPSBfbGlzdFtyaWdodEluZGV4XTsKICAgICAgfQogICAgICBpZiAoaWRlbnRpY2FsKG5ld2VzdCwgdGltZXIpKSB7CiAgICAgICAgLy8gV2UgYXJlIHdoZXJlIHdlIHNob3VsZCBiZSwgYnJlYWsuCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgX3N3YXAobmV3ZXN0LCB0aW1lcik7CiAgICB9CiAgfQoKICB2b2lkIF9zd2FwKF9UaW1lciBmaXJzdCwgX1RpbWVyIHNlY29uZCkgewogICAgaW50IHRtcCA9IGZpcnN0Ll9pbmRleE9yTmV4dDsKICAgIGZpcnN0Ll9pbmRleE9yTmV4dCA9IHNlY29uZC5faW5kZXhPck5leHQ7CiAgICBzZWNvbmQuX2luZGV4T3JOZXh0ID0gdG1wOwogICAgX2xpc3RbZmlyc3QuX2luZGV4T3JOZXh0XSA9IGZpcnN0OwogICAgX2xpc3Rbc2Vjb25kLl9pbmRleE9yTmV4dF0gPSBzZWNvbmQ7CiAgfQoKICBUaW1lciBfcGFyZW50KF9UaW1lciB0aW1lcikgPT4gX2xpc3RbX3BhcmVudEluZGV4KHRpbWVyLl9pbmRleE9yTmV4dCldOwogIFRpbWVyIF9sZWZ0Q2hpbGQoX1RpbWVyIHRpbWVyKSA9PiBfbGlzdFtfbGVmdENoaWxkSW5kZXgodGltZXIuX2luZGV4T3JOZXh0KV07CiAgVGltZXIgX3JpZ2h0Q2hpbGQoX1RpbWVyIHRpbWVyKSA9PgogICAgICBfbGlzdFtfcmlnaHRDaGlsZEluZGV4KHRpbWVyLl9pbmRleE9yTmV4dCldOwoKICBzdGF0aWMgaW50IF9wYXJlbnRJbmRleChpbnQgaW5kZXgpID0+IChpbmRleCAtIDEpIH4vIDI7CiAgc3RhdGljIGludCBfbGVmdENoaWxkSW5kZXgoaW50IGluZGV4KSA9PiAyICogaW5kZXggKyAxOwogIHN0YXRpYyBpbnQgX3JpZ2h0Q2hpbGRJbmRleChpbnQgaW5kZXgpID0+IDIgKiBpbmRleCArIDI7Cn0KCmNsYXNzIF9UaW1lciBpbXBsZW1lbnRzIFRpbWVyIHsKICAvLyBDYW5jZWxzIHRoZSB0aW1lciBpbiB0aGUgZXZlbnQgaGFuZGxlci4KICBzdGF0aWMgY29uc3QgX05PX1RJTUVSID0gLTE7CgogIC8vIFdlIGRpc3Rpbmd1aXNoIHdoYXQga2luZCBvZiBtZXNzYWdlIGFycml2ZWQgYmFzZWQgb24gdGhlIHZhbHVlIGJlaW5nIHNlbnQuCiAgc3RhdGljIGNvbnN0IF9aRVJPX0VWRU5UID0gMTsKICBzdGF0aWMgY29uc3QgX1RJTUVPVVRfRVZFTlQgPSBudWxsOwoKICAvLyBUaW1lcnMgYXJlIG9yZGVyZWQgYnkgd2FrZXVwIHRpbWUuIFRpbWVycyB3aXRoIGEgdGltZW91dCB2YWx1ZSBvZiA+IDAgZG8KICAvLyBlbmQgdXAgb24gdGhlIFRpbWVySGVhcC4gVGltZXJzIHdpdGggYSB0aW1lb3V0IG9mIDAgYXJlIHF1ZXVlZCBpbiBhIGxpc3QuCiAgc3RhdGljIGZpbmFsIF9oZWFwID0gbmV3IF9UaW1lckhlYXAoKTsKICBzdGF0aWMgX1RpbWVyIF9maXJzdFplcm9UaW1lcjsKICBzdGF0aWMgX1RpbWVyIF9sYXN0WmVyb1RpbWVyOwoKICAvLyBXZSB1c2UgYW4gaWQgdG8gYmUgYWJsZSB0byBzb3J0IHRpbWVycyB3aXRoIHRoZSBzYW1lIGV4cGlyYXRpb24gdGltZS4KICAvLyBpZHMgYXJlIHJlY3ljbGVkIGFmdGVyIElEX01BU0sgZW5xdWV1ZXMgb3Igd2hlbiB0aGUgdGltZXIgcXVldWUgaXMgZW1wdHkuCiAgc3RhdGljIGNvbnN0IF9JRF9NQVNLID0gMHgxZmZmZmZmZjsKICBzdGF0aWMgaW50IF9pZENvdW50ID0gMDsKCiAgc3RhdGljIFJhd1JlY2VpdmVQb3J0IF9yZWNlaXZlUG9ydDsKICBzdGF0aWMgU2VuZFBvcnQgX3NlbmRQb3J0OwogIHN0YXRpYyBpbnQgX3NjaGVkdWxlZFdha2V1cFRpbWU7CgogIHN0YXRpYyBib29sIF9oYW5kbGluZ0NhbGxiYWNrcyA9IGZhbHNlOwoKICBGdW5jdGlvbiBfY2FsbGJhY2s7IC8vIENsb3N1cmUgdG8gY2FsbCB3aGVuIHRpbWVyIGZpcmVzLiBudWxsIGlmIGNhbmNlbGVkLgogIGludCBfd2FrZXVwVGltZTsgLy8gRXhwaXJhdGlvbiB0aW1lLgogIGZpbmFsIGludCBfbWlsbGlTZWNvbmRzOyAvLyBEdXJhdGlvbiBzcGVjaWZpZWQgYXQgY3JlYXRpb24uCiAgZmluYWwgYm9vbCBfcmVwZWF0aW5nOyAvLyBJbmRpY2F0ZXMgcGVyaW9kaWMgdGltZXJzLgogIHZhciBfaW5kZXhPck5leHQ7IC8vIEluZGV4IGlmIHBhcnQgb2YgdGhlIFRpbWVySGVhcCwgbGluayBvdGhlcndpc2UuCiAgaW50IF9pZDsgLy8gSW5jcmVtZW50aW5nIGlkIHRvIGVuYWJsZSBzb3J0aW5nIG9mIHRpbWVycyB3aXRoIHNhbWUgZXhwaXJ5LgoKICBpbnQgX3RpY2sgPSAwOyAvLyBCYWNraW5nIGZvciBbdGlja10sCgogIC8vIEdldCB0aGUgbmV4dCBhdmFpbGFibGUgaWQuIFdlIGFjY2VwdCBjb2xsaXNpb25zIGFuZCByZW9yZGVyaW5nIHdoZW4gdGhlCiAgLy8gX2lkQ291bnQgb3ZlcmZsb3dzIGFuZCB0aGUgdGltZXJzIGV4cGlyZSBhdCB0aGUgc2FtZSBtaWxsaXNlY29uZC4KICBzdGF0aWMgaW50IF9uZXh0SWQoKSB7CiAgICB2YXIgcmVzdWx0ID0gX2lkQ291bnQ7CiAgICBfaWRDb3VudCA9IChfaWRDb3VudCArIDEpICYgX0lEX01BU0s7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgX1RpbWVyLl9pbnRlcm5hbCgKICAgICAgdGhpcy5fY2FsbGJhY2ssIHRoaXMuX3dha2V1cFRpbWUsIHRoaXMuX21pbGxpU2Vjb25kcywgdGhpcy5fcmVwZWF0aW5nKQogICAgICA6IF9pZCA9IF9uZXh0SWQoKTsKCiAgc3RhdGljIFRpbWVyIF9jcmVhdGVUaW1lcigKICAgICAgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lciksIGludCBtaWxsaVNlY29uZHMsIGJvb2wgcmVwZWF0aW5nKSB7CiAgICAvLyBOZWdhdGl2ZSB0aW1lb3V0cyBhcmUgdHJlYXRlZCBhcyBpZiAwIHRpbWVvdXQuCiAgICBpZiAobWlsbGlTZWNvbmRzIDwgMCkgewogICAgICBtaWxsaVNlY29uZHMgPSAwOwogICAgfQogICAgLy8gQWRkIG9uZSBiZWNhdXNlIERhdGVUaW1lLm5vdygpIGlzIGFzc3VtZWQgdG8gcm91bmQgZG93bgogICAgLy8gdG8gbmVhcmVzdCBtaWxsaXNlY29uZCwgbm90IHVwLCBzbyB0aGF0IHRpbWUgKyBkdXJhdGlvbiBpcyBiZWZvcmUKICAgIC8vIGR1cmF0aW9uIG1pbGxpc2Vjb25kcyBmcm9tIG5vdy4gVXNpbmcgbWljcm9zZWNvbmQgdGltZXJzIGxpa2UKICAgIC8vIFN0b3B3YXRjaCBhbGxvd3MgZGV0ZWN0aW5nIHRoYXQgdGhlIHRpbWVyIGZpcmVzIGVhcmx5LgogICAgaW50IG5vdyA9IFZNTGlicmFyeUhvb2tzLnRpbWVyTWlsbGlzZWNvbmRDbG9jaygpOwogICAgaW50IHdha2V1cFRpbWUgPSAobWlsbGlTZWNvbmRzID09IDApID8gbm93IDogKG5vdyArIDEgKyBtaWxsaVNlY29uZHMpOwoKICAgIF9UaW1lciB0aW1lciA9CiAgICAgICAgbmV3IF9UaW1lci5faW50ZXJuYWwoY2FsbGJhY2ssIHdha2V1cFRpbWUsIG1pbGxpU2Vjb25kcywgcmVwZWF0aW5nKTsKICAgIC8vIEVucXVldWUgdGhpcyBuZXdseSBjcmVhdGVkIHRpbWVyIGluIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgYW5kCiAgICAvLyBub3RpZnkgaWYgbmVjZXNzYXJ5LgogICAgdGltZXIuX2VucXVldWUoKTsKICAgIHJldHVybiB0aW1lcjsKICB9CgogIGZhY3RvcnkgX1RpbWVyKGludCBtaWxsaVNlY29uZHMsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKSB7CiAgICByZXR1cm4gX2NyZWF0ZVRpbWVyKGNhbGxiYWNrLCBtaWxsaVNlY29uZHMsIGZhbHNlKTsKICB9CgogIGZhY3RvcnkgX1RpbWVyLnBlcmlvZGljKGludCBtaWxsaVNlY29uZHMsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKSB7CiAgICByZXR1cm4gX2NyZWF0ZVRpbWVyKGNhbGxiYWNrLCBtaWxsaVNlY29uZHMsIHRydWUpOwogIH0KCiAgYm9vbCBnZXQgX2lzSW5IZWFwID0+IF9pbmRleE9yTmV4dCBpcyBpbnQ7CgogIGludCBfY29tcGFyZVRvKF9UaW1lciBvdGhlcikgewogICAgaW50IGMgPSBfd2FrZXVwVGltZSAtIG90aGVyLl93YWtldXBUaW1lOwogICAgaWYgKGMgIT0gMCkgcmV0dXJuIGM7CiAgICByZXR1cm4gX2lkIC0gb3RoZXIuX2lkOwogIH0KCiAgYm9vbCBnZXQgaXNBY3RpdmUgPT4gX2NhbGxiYWNrICE9IG51bGw7CgogIGludCBnZXQgdGljayA9PiBfdGljazsKCiAgLy8gQ2FuY2VscyBhIHNldCB0aW1lci4gVGhlIHRpbWVyIGlzIHJlbW92ZWQgZnJvbSB0aGUgdGltZXIgaGVhcCBpZiBpdCBpcyBhCiAgLy8gbm9uLXplcm8gdGltZXIuIFplcm8gdGltZXJzIGFyZSBrZXB0IGluIHRoZSBsaXN0IGFzIHRoZXkgbmVlZCB0byBjb25zdW1lCiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBtZXNzYWdlLgogIHZvaWQgY2FuY2VsKCkgewogICAgX2NhbGxiYWNrID0gbnVsbDsKICAgIC8vIE9ubHkgaGVhcCB0aW1lcnMgYXJlIHJlYWxseSByZW1vdmVkLiBaZXJvIHRpbWVycyBuZWVkIHRvIGNvbnN1bWUgdGhlaXIKICAgIC8vIGNvcnJlc3BvbmRpbmcgd2FrZXVwIG1lc3NhZ2Ugc28gdGhleSBhcmUgbGVmdCBpbiB0aGUgcXVldWUuCiAgICBpZiAoIV9pc0luSGVhcCkgcmV0dXJuOwogICAgYm9vbCB1cGRhdGUgPSBfaGVhcC5pc0ZpcnN0KHRoaXMpOwogICAgX2hlYXAucmVtb3ZlKHRoaXMpOwogICAgaWYgKHVwZGF0ZSkgewogICAgICBfbm90aWZ5RXZlbnRIYW5kbGVyKCk7CiAgICB9CiAgfQoKICB2b2lkIF9hZHZhbmNlV2FrZXVwVGltZSgpIHsKICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBuZXh0IHdha2V1cCB0aW1lLiBGb3IgcmVwZWF0aW5nIHRpbWVycyB3aXRoIGEgMCB0aW1lb3V0CiAgICAvLyB0aGUgbmV4dCB3YWtldXAgdGltZSBpcyBub3cuCiAgICBfaWQgPSBfbmV4dElkKCk7CiAgICBpZiAoX21pbGxpU2Vjb25kcyA+IDApIHsKICAgICAgX3dha2V1cFRpbWUgKz0gX21pbGxpU2Vjb25kczsKICAgIH0gZWxzZSB7CiAgICAgIF93YWtldXBUaW1lID0gVk1MaWJyYXJ5SG9va3MudGltZXJNaWxsaXNlY29uZENsb2NrKCk7CiAgICB9CiAgfQoKICAvLyBBZGRzIGEgdGltZXIgdG8gdGhlIGhlYXAgb3IgdGltZXIgbGlzdC4gVGltZXJzIHdpdGggdGhlIHNhbWUgd2FrZXVwIHRpbWUKICAvLyBhcmUgZW5xdWV1ZWQgaW4gb3JkZXIgYW5kIG5vdGlmaWVkIGluIEZJRk8gb3JkZXIuCiAgdm9pZCBfZW5xdWV1ZSgpIHsKICAgIGlmIChfbWlsbGlTZWNvbmRzID09IDApIHsKICAgICAgaWYgKF9maXJzdFplcm9UaW1lciA9PSBudWxsKSB7CiAgICAgICAgX2xhc3RaZXJvVGltZXIgPSB0aGlzOwogICAgICAgIF9maXJzdFplcm9UaW1lciA9IHRoaXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2xhc3RaZXJvVGltZXIuX2luZGV4T3JOZXh0ID0gdGhpczsKICAgICAgICBfbGFzdFplcm9UaW1lciA9IHRoaXM7CiAgICAgIH0KICAgICAgLy8gRXZlcnkgemVybyB0aW1lciBnZXRzIGl0cyBvd24gZXZlbnQuCiAgICAgIF9ub3RpZnlaZXJvSGFuZGxlcigpOwogICAgfSBlbHNlIHsKICAgICAgX2hlYXAuYWRkKHRoaXMpOwogICAgICBpZiAoX2hlYXAuaXNGaXJzdCh0aGlzKSkgewogICAgICAgIF9ub3RpZnlFdmVudEhhbmRsZXIoKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gRW5xdWV1ZSBvbmUgbWVzc2FnZSBmb3IgZWFjaCB6ZXJvIHRpbWVyLiBUbyBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGZyb20KICAvLyBFdmVudEhhbmRsZXIgbWVzc2FnZXMgd2Ugc2VuZCBhIF9aRVJPX0VWRU5UIGluc3RlYWQgb2YgYSBfVElNRU9VVF9FVkVOVC4KICBzdGF0aWMgdm9pZCBfbm90aWZ5WmVyb0hhbmRsZXIoKSB7CiAgICBpZiAoX3NlbmRQb3J0ID09IG51bGwpIHsKICAgICAgX2NyZWF0ZVRpbWVySGFuZGxlcigpOwogICAgfQogICAgX3NlbmRQb3J0LnNlbmQoX1pFUk9fRVZFTlQpOwogIH0KCiAgLy8gSGFuZGxlIHRoZSBub3RpZmljYXRpb24gb2YgYSB6ZXJvIHRpbWVyLiBNYWtlIHN1cmUgdG8gYWxzbyBleGVjdXRlIG5vbi16ZXJvCiAgLy8gdGltZXJzIHdpdGggYSBsb3dlciBleHBpcmF0aW9uIHRpbWUuCiAgc3RhdGljIExpc3QgX3F1ZXVlRnJvbVplcm9FdmVudCgpIHsKICAgIHZhciBwZW5kaW5nVGltZXJzID0gbmV3IExpc3QoKTsKICAgIGFzc2VydChfZmlyc3RaZXJvVGltZXIgIT0gbnVsbCk7CiAgICAvLyBDb2xsZWN0IHBlbmRpbmcgdGltZXJzIGZyb20gdGhlIHRpbWVyIGhlYXAgdGhhdCBoYXZlIGFuIGV4cGlyYXRpb24gcHJpb3IKICAgIC8vIHRvIHRoZSBjdXJyZW50bHkgbm90aWZpZWQgemVybyB0aW1lci4KICAgIHZhciB0aW1lcjsKICAgIHdoaWxlICghX2hlYXAuaXNFbXB0eSAmJiAoX2hlYXAuZmlyc3QuX2NvbXBhcmVUbyhfZmlyc3RaZXJvVGltZXIpIDwgMCkpIHsKICAgICAgdGltZXIgPSBfaGVhcC5yZW1vdmVGaXJzdCgpOwogICAgICBwZW5kaW5nVGltZXJzLmFkZCh0aW1lcik7CiAgICB9CiAgICAvLyBBcHBlbmQgdGhlIGZpcnN0IHplcm8gdGltZXIgdG8gdGhlIHBlbmRpbmcgdGltZXJzLgogICAgdGltZXIgPSBfZmlyc3RaZXJvVGltZXI7CiAgICBfZmlyc3RaZXJvVGltZXIgPSB0aW1lci5faW5kZXhPck5leHQ7CiAgICB0aW1lci5faW5kZXhPck5leHQgPSBudWxsOwogICAgcGVuZGluZ1RpbWVycy5hZGQodGltZXIpOwogICAgcmV0dXJuIHBlbmRpbmdUaW1lcnM7CiAgfQoKICBzdGF0aWMgdm9pZCBfbm90aWZ5RXZlbnRIYW5kbGVyKCkgewogICAgaWYgKF9oYW5kbGluZ0NhbGxiYWNrcykgewogICAgICAvLyBXaGlsZSB3ZSBhcmUgYWxyZWFkeSBoYW5kbGluZyBjYWxsYmFja3Mgd2Ugd2lsbCBub3Qgbm90aWZ5IHRoZSBldmVudAogICAgICAvLyBoYW5kbGVyLiBfaGFuZGxlVGltZW91dCB3aWxsIGNhbGwgX25vdGlmeUV2ZW50SGFuZGxlciBvbmNlIGFsbCBwZW5kaW5nCiAgICAgIC8vIHRpbWVycyBhcmUgcHJvY2Vzc2VkLgogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGltZXJzLiBDbG9zZSBkb3duIHRoZSByZWNlaXZlIHBvcnQuCiAgICBpZiAoKF9maXJzdFplcm9UaW1lciA9PSBudWxsKSAmJiBfaGVhcC5pc0VtcHR5KSB7CiAgICAgIC8vIE5vIHBlbmRpbmcgdGltZXJzOiBDbG9zZSB0aGUgcmVjZWl2ZSBwb3J0IGFuZCBsZXQgdGhlIGV2ZW50IGhhbmRsZXIKICAgICAgLy8ga25vdy4KICAgICAgaWYgKF9zZW5kUG9ydCAhPSBudWxsKSB7CiAgICAgICAgX2NhbmNlbFdha2V1cCgpOwogICAgICAgIF9zaHV0ZG93blRpbWVySGFuZGxlcigpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAoX2hlYXAuaXNFbXB0eSkgewogICAgICAvLyBPbmx5IHplcm8gdGltZXJzIGFyZSBsZWZ0LiBDYW5jZWwgYW55IHNjaGVkdWxlZCB3YWtldXBzLgogICAgICBfY2FuY2VsV2FrZXVwKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBPbmx5IHNlbmQgYSBtZXNzYWdlIGlmIHRoZSByZXF1ZXN0ZWQgd2FrZXVwIHRpbWUgZGlmZmVycyBmcm9tIHRoZQogICAgLy8gYWxyZWFkeSBzY2hlZHVsZWQgd2FrZXVwIHRpbWUuCiAgICB2YXIgd2FrZXVwVGltZSA9IF9oZWFwLmZpcnN0Ll93YWtldXBUaW1lOwogICAgaWYgKChfc2NoZWR1bGVkV2FrZXVwVGltZSA9PSBudWxsKSB8fAogICAgICAgICh3YWtldXBUaW1lICE9IF9zY2hlZHVsZWRXYWtldXBUaW1lKSkgewogICAgICBfc2NoZWR1bGVXYWtldXAod2FrZXVwVGltZSk7CiAgICB9CiAgfQoKICBzdGF0aWMgTGlzdCBfcXVldWVGcm9tVGltZW91dEV2ZW50KCkgewogICAgdmFyIHBlbmRpbmdUaW1lcnMgPSBuZXcgTGlzdCgpOwogICAgaWYgKF9maXJzdFplcm9UaW1lciAhPSBudWxsKSB7CiAgICAgIC8vIENvbGxlY3QgcGVuZGluZyB0aW1lcnMgZnJvbSB0aGUgdGltZXIgaGVhcCB0aGF0IGhhdmUgYW4gZXhwaXJhdGlvbgogICAgICAvLyBwcmlvciB0byB0aGUgbmV4dCB6ZXJvIHRpbWVyLgogICAgICAvLyBCeSBkZWZpbml0aW9uIHRoZSBmaXJzdCB6ZXJvIHRpbWVyIGhhcyBiZWVuIHNjaGVkdWxlZCBiZWZvcmUgdGhlCiAgICAgIC8vIGN1cnJlbnQgdGltZSwgbWVhbmluZyBhbGwgdGltZXJzIHdoaWNoIGFyZSAibGVzcyB0aGFuIiB0aGUgZmlyc3QgemVybwogICAgICAvLyB0aW1lciBhcmUgZXhwaXJlZC4gVGhlIGZpcnN0IHplcm8gdGltZXIgd2lsbCBiZSBkaXNwYXRjaGVkIHdoZW4gaXRzCiAgICAgIC8vIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSBpcyBkZWxpdmVyZWQuCiAgICAgIHZhciB0aW1lcjsKICAgICAgd2hpbGUgKCFfaGVhcC5pc0VtcHR5ICYmIChfaGVhcC5maXJzdC5fY29tcGFyZVRvKF9maXJzdFplcm9UaW1lcikgPCAwKSkgewogICAgICAgIHRpbWVyID0gX2hlYXAucmVtb3ZlRmlyc3QoKTsKICAgICAgICBwZW5kaW5nVGltZXJzLmFkZCh0aW1lcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIENvbGxlY3QgcGVuZGluZyB0aW1lcnMgZnJvbSB0aGUgdGltZXIgaGVhcCB3aGljaCBoYXZlIGV4cGlyZWQgYXQgdGhpcwogICAgICAvLyB0aW1lLgogICAgICB2YXIgY3VycmVudFRpbWUgPSBWTUxpYnJhcnlIb29rcy50aW1lck1pbGxpc2Vjb25kQ2xvY2soKTsKICAgICAgdmFyIHRpbWVyOwogICAgICB3aGlsZSAoIV9oZWFwLmlzRW1wdHkgJiYgKF9oZWFwLmZpcnN0Ll93YWtldXBUaW1lIDw9IGN1cnJlbnRUaW1lKSkgewogICAgICAgIHRpbWVyID0gX2hlYXAucmVtb3ZlRmlyc3QoKTsKICAgICAgICBwZW5kaW5nVGltZXJzLmFkZCh0aW1lcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwZW5kaW5nVGltZXJzOwogIH0KCiAgc3RhdGljIHZvaWQgX3J1blRpbWVycyhMaXN0IHBlbmRpbmdUaW1lcnMpIHsKICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRpbWVycyBjdXJyZW50bHkgcmVzZXQgdGhlIGlkIHNwYWNlIGJlZm9yZSB3ZQogICAgLy8gaGF2ZSBhIGNoYW5jZSB0byBlbnF1ZXVlIG5ldyB0aW1lcnMuCiAgICBpZiAoX2hlYXAuaXNFbXB0eSAmJiAoX2ZpcnN0WmVyb1RpbWVyID09IG51bGwpKSB7CiAgICAgIF9pZENvdW50ID0gMDsKICAgIH0KCiAgICAvLyBGYXN0IGV4aXQgaWYgbm8gcGVuZGluZyB0aW1lcnMuCiAgICBpZiAocGVuZGluZ1RpbWVycy5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gVHJpZ2dlciBhbGwgb2YgdGhlIHBlbmRpbmcgdGltZXJzLiBOZXcgdGltZXJzIGFkZGVkIGFzIHBhcnQgb2YgdGhlCiAgICAvLyBjYWxsYmFja3Mgd2lsbCBiZSBlbnF1ZXVlZCBub3cgYW5kIG5vdGlmaWVkIGluIHRoZSBuZXh0IHNwaW4gYXQgdGhlCiAgICAvLyBlYXJsaWVzdC4KICAgIF9oYW5kbGluZ0NhbGxiYWNrcyA9IHRydWU7CiAgICB2YXIgaSA9IDA7CiAgICB0cnkgewogICAgICBmb3IgKDsgaSA8IHBlbmRpbmdUaW1lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAvLyBOZXh0IHBlbmRpbmcgdGltZXIuCiAgICAgICAgdmFyIHRpbWVyID0gcGVuZGluZ1RpbWVyc1tpXTsKICAgICAgICB0aW1lci5faW5kZXhPck5leHQgPSBudWxsOwoKICAgICAgICAvLyBPbmUgb2YgdGhlIHRpbWVycyBpbiB0aGUgcGVuZGluZ190aW1lcnMgbGlzdCBjYW4gY2FuY2VsCiAgICAgICAgLy8gb25lIG9mIHRoZSBsYXRlciB0aW1lcnMgd2hpY2ggd2lsbCBzZXQgdGhlIGNhbGxiYWNrIHRvCiAgICAgICAgLy8gbnVsbC4gT3IgdGhlIHBlbmRpbmcgemVybyB0aW1lciBoYXMgYmVlbiBjYW5jZWxlZCBlYXJsaWVyLgogICAgICAgIGlmICh0aW1lci5fY2FsbGJhY2sgIT0gbnVsbCkgewogICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGltZXIuX2NhbGxiYWNrOwogICAgICAgICAgaWYgKCF0aW1lci5fcmVwZWF0aW5nKSB7CiAgICAgICAgICAgIC8vIE1hcmsgdGltZXIgYXMgaW5hY3RpdmUuCiAgICAgICAgICAgIHRpbWVyLl9jYWxsYmFjayA9IG51bGw7CiAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLl9taWxsaVNlY29uZHMgPiAwKSB7CiAgICAgICAgICAgIHZhciBtcyA9IHRpbWVyLl9taWxsaVNlY29uZHM7CiAgICAgICAgICAgIGludCBvdmVyZHVlID0KICAgICAgICAgICAgICAgIFZNTGlicmFyeUhvb2tzLnRpbWVyTWlsbGlzZWNvbmRDbG9jaygpIC0gdGltZXIuX3dha2V1cFRpbWU7CiAgICAgICAgICAgIGlmIChvdmVyZHVlID4gbXMpIHsKICAgICAgICAgICAgICBpbnQgbWlzc2VkVGlja3MgPSBvdmVyZHVlIH4vIG1zOwogICAgICAgICAgICAgIHRpbWVyLl93YWtldXBUaW1lICs9IG1pc3NlZFRpY2tzICogbXM7CiAgICAgICAgICAgICAgdGltZXIuX3RpY2sgKz0gbWlzc2VkVGlja3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRpbWVyLl90aWNrICs9IDE7CgogICAgICAgICAgY2FsbGJhY2sodGltZXIpOwogICAgICAgICAgLy8gUmUtaW5zZXJ0IHJlcGVhdGluZyB0aW1lciBpZiBub3QgY2FuY2VsZWQuCiAgICAgICAgICBpZiAodGltZXIuX3JlcGVhdGluZyAmJiAodGltZXIuX2NhbGxiYWNrICE9IG51bGwpKSB7CiAgICAgICAgICAgIHRpbWVyLl9hZHZhbmNlV2FrZXVwVGltZSgpOwogICAgICAgICAgICB0aW1lci5fZW5xdWV1ZSgpOwogICAgICAgICAgfQogICAgICAgICAgLy8gRXhlY3V0ZSBwZW5kaW5nIG1pY3JvIHRhc2tzLgogICAgICAgICAgdmFyIGltbWVkaWF0ZUNhbGxiYWNrID0gX3JlbW92ZVBlbmRpbmdJbW1lZGlhdGVDYWxsYmFjaygpOwogICAgICAgICAgaWYgKGltbWVkaWF0ZUNhbGxiYWNrICE9IG51bGwpIHsKICAgICAgICAgICAgaW1tZWRpYXRlQ2FsbGJhY2soKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZmluYWxseSB7CiAgICAgIF9oYW5kbGluZ0NhbGxiYWNrcyA9IGZhbHNlOwogICAgICAvLyBSZS1xdWV1ZSB0aW1lcnMgd2UgZGlkbid0IGdldCB0by4KICAgICAgZm9yIChpKys7IGkgPCBwZW5kaW5nVGltZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHRpbWVyID0gcGVuZGluZ1RpbWVyc1tpXTsKICAgICAgICB0aW1lci5fZW5xdWV1ZSgpOwogICAgICB9CiAgICAgIF9ub3RpZnlFdmVudEhhbmRsZXIoKTsKICAgIH0KICB9CgogIHN0YXRpYyB2b2lkIF9oYW5kbGVNZXNzYWdlKG1zZykgewogICAgdmFyIHBlbmRpbmdUaW1lcnM7CiAgICBpZiAobXNnID09IF9aRVJPX0VWRU5UKSB7CiAgICAgIHBlbmRpbmdUaW1lcnMgPSBfcXVldWVGcm9tWmVyb0V2ZW50KCk7CiAgICAgIGFzc2VydChwZW5kaW5nVGltZXJzLmxlbmd0aCA+IDApOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG1zZyA9PSBfVElNRU9VVF9FVkVOVCk7CiAgICAgIF9zY2hlZHVsZWRXYWtldXBUaW1lID0gbnVsbDsgLy8gQ29uc3VtZWQgdGhlIGxhc3Qgc2NoZWR1bGVkIHdha2V1cCBub3cuCiAgICAgIHBlbmRpbmdUaW1lcnMgPSBfcXVldWVGcm9tVGltZW91dEV2ZW50KCk7CiAgICB9CiAgICBfcnVuVGltZXJzKHBlbmRpbmdUaW1lcnMpOwogICAgLy8gTm90aWZ5IHRoZSBldmVudCBoYW5kbGVyIG9yIHNodXRkb3duIHRoZSBwb3J0IGlmIG5vIG1vcmUgcGVuZGluZwogICAgLy8gdGltZXJzIGFyZSBwcmVzZW50LgogICAgX25vdGlmeUV2ZW50SGFuZGxlcigpOwogIH0KCiAgLy8gVGVsbCB0aGUgZXZlbnQgaGFuZGxlciB0byB3YWtlIHRoaXMgaXNvbGF0ZSBhdCBhIHNwZWNpZmljIHRpbWUuCiAgc3RhdGljIHZvaWQgX3NjaGVkdWxlV2FrZXVwKGludCB3YWtldXBUaW1lKSB7CiAgICBpZiAoX3NlbmRQb3J0ID09IG51bGwpIHsKICAgICAgX2NyZWF0ZVRpbWVySGFuZGxlcigpOwogICAgfQogICAgVk1MaWJyYXJ5SG9va3MuZXZlbnRIYW5kbGVyU2VuZERhdGEobnVsbCwgX3NlbmRQb3J0LCB3YWtldXBUaW1lKTsKICAgIF9zY2hlZHVsZWRXYWtldXBUaW1lID0gd2FrZXVwVGltZTsKICB9CgogIC8vIENhbmNlbCBwZW5kaW5nIHdha2V1cHMgaW4gdGhlIGV2ZW50IGhhbmRsZXIuCiAgc3RhdGljIHZvaWQgX2NhbmNlbFdha2V1cCgpIHsKICAgIGlmIChfc2VuZFBvcnQgIT0gbnVsbCkgewogICAgICBWTUxpYnJhcnlIb29rcy5ldmVudEhhbmRsZXJTZW5kRGF0YShudWxsLCBfc2VuZFBvcnQsIF9OT19USU1FUik7CiAgICAgIF9zY2hlZHVsZWRXYWtldXBUaW1lID0gbnVsbDsKICAgIH0KICB9CgogIC8vIENyZWF0ZSBhIHJlY2VpdmUgcG9ydCBhbmQgcmVnaXN0ZXIgYSBtZXNzYWdlIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgogIC8vIGV2ZW50cy4KICBzdGF0aWMgdm9pZCBfY3JlYXRlVGltZXJIYW5kbGVyKCkgewogICAgYXNzZXJ0KF9yZWNlaXZlUG9ydCA9PSBudWxsKTsKICAgIGFzc2VydChfc2VuZFBvcnQgPT0gbnVsbCk7CiAgICBfcmVjZWl2ZVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoX2hhbmRsZU1lc3NhZ2UpOwogICAgX3NlbmRQb3J0ID0gX3JlY2VpdmVQb3J0LnNlbmRQb3J0OwogICAgX3NjaGVkdWxlZFdha2V1cFRpbWUgPSBudWxsOwogIH0KCiAgc3RhdGljIHZvaWQgX3NodXRkb3duVGltZXJIYW5kbGVyKCkgewogICAgX3JlY2VpdmVQb3J0LmNsb3NlKCk7CiAgICBfcmVjZWl2ZVBvcnQgPSBudWxsOwogICAgX3NlbmRQb3J0ID0gbnVsbDsKICAgIF9zY2hlZHVsZWRXYWtldXBUaW1lID0gbnVsbDsKICB9CgogIC8vIFRoZSBUaW1lciBmYWN0b3J5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGFydDphc3luYyBsaWJyYXJ5IGJ5IHRoZSBlbWJlZGRlci4KICBzdGF0aWMgVGltZXIgX2ZhY3RvcnkoCiAgICAgIGludCBtaWxsaVNlY29uZHMsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpLCBib29sIHJlcGVhdGluZykgewogICAgaWYgKHJlcGVhdGluZykgewogICAgICByZXR1cm4gbmV3IF9UaW1lci5wZXJpb2RpYyhtaWxsaVNlY29uZHMsIGNhbGxiYWNrKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1RpbWVyKG1pbGxpU2Vjb25kcywgY2FsbGJhY2spOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCl9zZXR1cEhvb2tzKCkgewogIFZNTGlicmFyeUhvb2tzLnRpbWVyRmFjdG9yeSA9IF9UaW1lci5fZmFjdG9yeTsKfQqB1wBOTjwBIQE7UAoDTisDMBMWEQFHASIBIAE5ARshEQYiJxYEARkTDw4EAR4NExchDgYdIy4nKBkPGwgGGR8EARM6JxUEASEeJSoeDw8IBgQBIxM7PR1KIwhMJAgmLQ8IHAYEASwiLh8nKQQBSlAlMwE6OjsCASAtHwFQICYBTk8pISABS08mGwEmHSMBKgFNJz43R0wBKAFNRxkbKhMEARRNGQEdRjYcGAY/SUU+NksBE01JHBYSBAFBOAQBSjcEAS0BIS0aHAQBKgEZAU5OKBIWTkMcJxgSHQYEAR5PJBUdJA08BgQBTjcUHiUfIA8sHwguHA0XIR8IBgQBTU4lHR0GIQQBUSomJCVQLQ9OIyAGOh0qHx4aBAEmHk5QHw4GAUQ2TQ8fGSEIDiBCFw4GAUkmLiowIwYEASkkI0wnSk9NLRFQJSIIDU8PQBFLJSIIBhoEAS9NLDYUBgEnJQ4GAUpLER8PCi4fJiMBQ0JGJyojJyQwKhpMIC81Kg4MHAEbOD8oHgwqRSshDAoIECIrMSYaCB0GBAEkFx4tKA0lTjAGH0gbGwQBRTAdHQZGJwQBMiAdRyMGBAFIDSYiHzcnIQQBKBoZFiEEAU8ZRhU6Bi8EAgEiEDECASJkYXJ0Omlzb2xhdGUtcGF0Y2gvdGltZXJfaW1wbC5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pc29sYXRlL2NhcGFiaWxpdHkuZGFydITpLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pc29sYXRlOwoKLyoqCiAqIEFuIHVuZm9yZ2VhYmxlIG9iamVjdCB0aGF0IGNvbWVzIGJhY2sgYXMgZXF1YWwgd2hlbiBwYXNzZWQgdGhyb3VnaCBvdGhlcgogKiBpc29sYXRlcy4KICoKICogU2VuZGluZyBhIGNhcGFiaWxpdHkgb2JqZWN0IHRvIGFub3RoZXIgaXNvbGF0ZSwgYW5kIGdldHRpbmcgaXQgYmFjaywKICogd2lsbCBwcm9kdWNlIGFuIG9iamVjdCB0aGF0IGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbC4KICogVGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIGNyZWF0ZSBvYmplY3RzIGVxdWFsIHRvIGEgY2FwYWJpbGl0eSBvYmplY3QuCiAqCiAqIENhcGFiaWxpdGllcyBjYW4gYmUgdXNlZCBhcyBhY2Nlc3MgZ3VhcmRzOiBBIHJlbW90ZSBpc29sYXRlIGNhbiBzZW5kCiAqIGEgcmVxdWVzdCBmb3IgYW4gb3BlcmF0aW9uLCBidXQgaXQgaXMgb25seSBhbGxvd2VkIGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zCiAqIHRoZSBjb3JyZWN0IGNhcGFiaWxpdHkgb2JqZWN0LgogKgogKiBUaGlzIGFsbG93cyBleHBvc2luZyB0aGUgc2FtZSBpbnRlcmZhY2UgdG8gbXVsdGlwbGUgY2xpZW50cywKICogYnV0IHJlc3RyaWN0aW5nIHNvbWUgb3BlcmF0aW9ucyB0byBvbmx5IHRob3NlIGNsaWVudHMKICogdGhhdCBoYXZlIGFsc28gYmVlbiBnaXZlbiB0aGUgY29ycmVzcG9uZGluZyBjYXBhYmlsaXR5LgogKgogKiBDYXBhYmlsaXRpZXMgY2FuIGJlIHVzZWQgaW5zaWRlIGEgc2luZ2xlIGlzb2xhdGUsCiAqIGJ1dCB0aGV5IGhhdmUgbm8gYWR2YW50YWdlIG92ZXIKICoganVzdCB1c2luZyBgbmV3IE9iamVjdGAgdG8gY3JlYXRlIGEgdW5pcXVlIG9iamVjdCwKICogYW5kIGl0IG9mZmVycyBubyByZWFsIHNlY3VyaXR5IGFnYWluc3Qgb3RoZXIgY29kZQogKiBydW5uaW5nIGluIHRoZSBzYW1lIGlzb2xhdGUuCiAqLwpjbGFzcyBDYXBhYmlsaXR5IHsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgdW5mb3JnZWFibGUgY2FwYWJpbGl0eSBvYmplY3QuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBDYXBhYmlsaXR5KCk7Cn0KJABOTjwBFgEETA0DSDlJA0hOIgNAOTsDNSM2NSAEEwYxBiECARxkYXJ0Omlzb2xhdGUvY2FwYWJpbGl0eS5kYXJ0Km9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9tYXRoL21hdGguZGFydJlILy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBNYXRoZW1hdGljYWwgY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMsIHBsdXMgYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KLy8vCi8vLyBUbyB1c2UgdGhpcyBsaWJyYXJ5IGluIHlvdXIgY29kZToKLy8vCi8vLyAgICAgaW1wb3J0ICdkYXJ0Om1hdGgnOwovLy8KLy8vIHtAY2F0ZWdvcnkgQ29yZX0KbGlicmFyeSBkYXJ0Lm1hdGg7CgpwYXJ0ICJqZW5raW5zX3NtaV9oYXNoLmRhcnQiOwpwYXJ0ICJwb2ludC5kYXJ0IjsKcGFydCAicmFuZG9tLmRhcnQiOwpwYXJ0ICJyZWN0YW5nbGUuZGFydCI7CgovLy8gQmFzZSBvZiB0aGUgbmF0dXJhbCBsb2dhcml0aG1zLgovLy8KLy8vIFR5cGljYWxseSB3cml0dGVuIGFzICJlIi4KY29uc3QgZG91YmxlIGUgPSAyLjcxODI4MTgyODQ1OTA0NTsKCi8vLyBOYXR1cmFsIGxvZ2FyaXRobSBvZiAxMC4KLy8vCi8vLyBUaGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMTAgaXMgdGhlIG51bWJlciBzdWNoIHRoYXQgYHBvdyhFLCBMTjEwKSA9PSAxMGAuCi8vLyBUaGlzIHZhbHVlIGlzIG5vdCBleGFjdCwgYnV0IGl0IGlzIHRoZSBjbG9zZXN0IHJlcHJlc2VudGFibGUgZG91YmxlIHRvIHRoZQovLy8gZXhhY3QgbWF0aGVtYXRpY2FsIHZhbHVlLgpjb25zdCBkb3VibGUgbG4xMCA9IDIuMzAyNTg1MDkyOTk0MDQ2OwoKLy8vIE5hdHVyYWwgbG9nYXJpdGhtIG9mIDIuCi8vLwovLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDIgaXMgdGhlIG51bWJlciBzdWNoIHRoYXQgYHBvdyhFLCBMTjIpID09IDJgLgovLy8gVGhpcyB2YWx1ZSBpcyBub3QgZXhhY3QsIGJ1dCBpdCBpcyB0aGUgY2xvc2VzdCByZXByZXNlbnRhYmxlIGRvdWJsZSB0byB0aGUKLy8vIGV4YWN0IG1hdGhlbWF0aWNhbCB2YWx1ZS4KY29uc3QgZG91YmxlIGxuMiA9IDAuNjkzMTQ3MTgwNTU5OTQ1MzsKCi8vLyBCYXNlLTIgbG9nYXJpdGhtIG9mIFtlXS4KY29uc3QgZG91YmxlIGxvZzJlID0gMS40NDI2OTUwNDA4ODg5NjM0OwoKLy8vIEJhc2UtMTAgbG9nYXJpdGhtIG9mIFtlXS4KY29uc3QgZG91YmxlIGxvZzEwZSA9IDAuNDM0Mjk0NDgxOTAzMjUxODsKCi8vLyBUaGUgUEkgY29uc3RhbnQuCmNvbnN0IGRvdWJsZSBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjsKCi8vLyBTcXVhcmUgcm9vdCBvZiAxLzIuCmNvbnN0IGRvdWJsZSBzcXJ0MV8yID0gMC43MDcxMDY3ODExODY1NDc2OwoKLy8vIFNxdWFyZSByb290IG9mIDIuCmNvbnN0IGRvdWJsZSBzcXJ0MiA9IDEuNDE0MjEzNTYyMzczMDk1MTsKCi8vLyBSZXR1cm5zIHRoZSBsZXNzZXIgb2YgdHdvIG51bWJlcnMuCi8vLwovLy8gUmV0dXJucyBOYU4gaWYgZWl0aGVyIGFyZ3VtZW50IGlzIE5hTi4KLy8vIFRoZSBsZXNzZXIgb2YgYC0wLjBgIGFuZCBgMC4wYCBpcyBgLTAuMGAuCi8vLyBJZiB0aGUgYXJndW1lbnRzIGFyZSBvdGhlcndpc2UgZXF1YWwgKGluY2x1ZGluZyBpbnQgYW5kIGRvdWJsZXMgd2l0aCB0aGUKLy8vIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlKSB0aGVuIGl0IGlzIHVuc3BlY2lmaWVkIHdoaWNoIG9mIHRoZSB0d28gYXJndW1lbnRzCi8vLyBpcyByZXR1cm5lZC4KZXh0ZXJuYWwgVCBtaW48VCBleHRlbmRzIG51bT4oVCBhLCBUIGIpOwoKLy8vIFJldHVybnMgdGhlIGxhcmdlciBvZiB0d28gbnVtYmVycy4KLy8vCi8vLyBSZXR1cm5zIE5hTiBpZiBlaXRoZXIgYXJndW1lbnQgaXMgTmFOLgovLy8gVGhlIGxhcmdlciBvZiBgLTAuMGAgYW5kIGAwLjBgIGlzIGAwLjBgLiBJZiB0aGUgYXJndW1lbnRzIGFyZQovLy8gb3RoZXJ3aXNlIGVxdWFsIChpbmNsdWRpbmcgaW50IGFuZCBkb3VibGVzIHdpdGggdGhlIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlKQovLy8gdGhlbiBpdCBpcyB1bnNwZWNpZmllZCB3aGljaCBvZiB0aGUgdHdvIGFyZ3VtZW50cyBpcyByZXR1cm5lZC4KZXh0ZXJuYWwgVCBtYXg8VCBleHRlbmRzIG51bT4oVCBhLCBUIGIpOwoKLy8vIEEgdmFyaWFudCBvZiBbYXRhbl0uCi8vLwovLy8gQ29udmVydHMgYm90aCBhcmd1bWVudHMgdG8gW2RvdWJsZV1zLgovLy8KLy8vIFJldHVybnMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgYmV0d2VlbiB0aGUgcG9zaXRpdmUgeC1heGlzCi8vLyBhbmQgdGhlIHZlY3RvciAoW2JdLFthXSkuCi8vLyBUaGUgcmVzdWx0IGlzIGluIHRoZSByYW5nZSAtUEkuLlBJLgovLy8KLy8vIElmIFtiXSBpcyBwb3NpdGl2ZSwgdGhpcyBpcyB0aGUgc2FtZSBhcyBgYXRhbihiL2EpYC4KLy8vCi8vLyBUaGUgcmVzdWx0IGlzIG5lZ2F0aXZlIHdoZW4gW2FdIGlzIG5lZ2F0aXZlIChpbmNsdWRpbmcgd2hlbiBbYV0gaXMgdGhlCi8vLyBkb3VibGUgLTAuMCkuCi8vLwovLy8gSWYgW2FdIGlzIGVxdWFsIHRvIHplcm8sIHRoZSB2ZWN0b3IgKFtiXSxbYV0pIGlzIGNvbnNpZGVyZWQgcGFyYWxsZWwgdG8KLy8vIHRoZSB4LWF4aXMsIGV2ZW4gaWYgW2JdIGlzIGFsc28gZXF1YWwgdG8gemVyby4gVGhlIHNpZ24gb2YgW2JdIGRldGVybWluZXMKLy8vIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhbG9uZyB0aGUgeC1heGlzLgovLy8KLy8vIFJldHVybnMgTmFOIGlmIGVpdGhlciBhcmd1bWVudCBpcyBOYU4uCmV4dGVybmFsIGRvdWJsZSBhdGFuMihudW0gYSwgbnVtIGIpOwoKLy8vIFJldHVybnMgW3hdIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdLgovLy8KLy8vIElmIFt4XSBpcyBhbiBbaW50XSBhbmQgW2V4cG9uZW50XSBpcyBhIG5vbi1uZWdhdGl2ZSBbaW50XSwgdGhlIHJlc3VsdCBpcwovLy8gYW4gW2ludF0sIG90aGVyd2lzZSBib3RoIGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIGRvdWJsZXMgZmlyc3QsIGFuZCB0aGUKLy8vIHJlc3VsdCBpcyBhIFtkb3VibGVdLgovLy8KLy8vIEZvciBpbnRlZ2VycywgdGhlIHBvd2VyIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgbWF0aGVtYXRpY2FsIHJlc3VsdCBvZiBgeGAgdG8KLy8vIHRoZSBwb3dlciBgZXhwb25lbnRgLCBvbmx5IGxpbWl0ZWQgYnkgdGhlIGF2YWlsYWJsZSBtZW1vcnkuCi8vLwovLy8gRm9yIGRvdWJsZXMsIGBwb3coeCwgeSlgIGhhbmRsZXMgZWRnZSBjYXNlcyBhcyBmb2xsb3dzOgovLy8KLy8vIC0gaWYgYHlgIGlzIHplcm8gKDAuMCBvciAtMC4wKSwgdGhlIHJlc3VsdCBpcyBhbHdheXMgMS4wLgovLy8gLSBpZiBgeGAgaXMgMS4wLCB0aGUgcmVzdWx0IGlzIGFsd2F5cyAxLjAuCi8vLyAtIG90aGVyd2lzZSwgaWYgZWl0aGVyIGB4YCBvciBgeWAgaXMgTmFOIHRoZW4gdGhlIHJlc3VsdCBpcyBOYU4uCi8vLyAtIGlmIGB4YCBpcyBuZWdhdGl2ZSAoYnV0IG5vdCAtMC4wKSBhbmQgYHlgIGlzIGEgZmluaXRlIG5vbi1pbnRlZ2VyLCB0aGUKLy8vICAgcmVzdWx0IGlzIE5hTi4KLy8vIC0gaWYgYHhgIGlzIEluZmluaXR5IGFuZCBgeWAgaXMgbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgMC4wLgovLy8gLSBpZiBgeGAgaXMgSW5maW5pdHkgYW5kIGB5YCBpcyBwb3NpdGl2ZSwgdGhlIHJlc3VsdCBpcyBJbmZpbml0eS4KLy8vIC0gaWYgYHhgIGlzIDAuMCBhbmQgYHlgIGlzIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIEluZmluaXR5LgovLy8gLSBpZiBgeGAgaXMgMC4wIGFuZCBgeWAgaXMgcG9zaXRpdmUsIHRoZSByZXN1bHQgaXMgMC4wLgovLy8gLSBpZiBgeGAgaXMgLUluZmluaXR5IG9yIC0wLjAgYW5kIGB5YCBpcyBhbiBvZGQgaW50ZWdlciwgdGhlbiB0aGUgcmVzdWx0IGlzCi8vLyAgIGAtcG93KC14ICx5KWAuCi8vLyAtIGlmIGB4YCBpcyAtSW5maW5pdHkgb3IgLTAuMCBhbmQgYHlgIGlzIG5vdCBhbiBvZGQgaW50ZWdlciwgdGhlbiB0aGUgcmVzdWx0Ci8vLyAgIGlzIHRoZSBzYW1lIGFzIGBwb3coLXggLCB5KWAuCi8vLyAtIGlmIGB5YCBpcyBJbmZpbml0eSBhbmQgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YCBpcyBsZXNzIHRoYW4gMSwgdGhlCi8vLyAgIHJlc3VsdCBpcyAwLjAuCi8vLyAtIGlmIGB5YCBpcyBJbmZpbml0eSBhbmQgYHhgIGlzIC0xLCB0aGUgcmVzdWx0IGlzIDEuMC4KLy8vIC0gaWYgYHlgIGlzIEluZmluaXR5IGFuZCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYHhgIGlzIGdyZWF0ZXIgdGhhbiAxLAovLy8gICB0aGUgcmVzdWx0IGlzIEluZmluaXR5LgovLy8gLSBpZiBgeWAgaXMgLUluZmluaXR5LCB0aGUgcmVzdWx0IGlzIGAxL3Bvdyh4LCBJbmZpbml0eSlgLgovLy8KLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGBwb3dgIGZ1bmN0aW9uIGRlZmluZWQgaW4gdGhlIElFRUUgU3RhbmRhcmQKLy8vIDc1NC0yMDA4LgovLy8KLy8vIE5vdGljZSB0aGF0IHRoZSByZXN1bHQgbWF5IG92ZXJmbG93LiBJZiBpbnRlZ2VycyBhcmUgcmVwcmVzZW50ZWQgYXMgNjQtYml0Ci8vLyBudW1iZXJzLCBhbiBpbnRlZ2VyIHJlc3VsdCBtYXkgYmUgdHJ1bmNhdGVkLCBhbmQgYSBkb3VibGUgcmVzdWx0IG1heQovLy8gb3ZlcmZsb3cgdG8gcG9zaXRpdmUgb3IgbmVnYXRpdmUgW2RvdWJsZS5pbmZpbml0eV0uCmV4dGVybmFsIG51bSBwb3cobnVtIHgsIG51bSBleHBvbmVudCk7CgovLy8gQ29udmVydHMgW3JhZGlhbnNdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIHNpbmUgb2YgdGhlIHZhbHVlLgovLy8KLy8vIElmIFtyYWRpYW5zXSBpcyBub3QgYSBmaW5pdGUgbnVtYmVyLCB0aGUgcmVzdWx0IGlzIE5hTi4KZXh0ZXJuYWwgZG91YmxlIHNpbihudW0gcmFkaWFucyk7CgovLy8gQ29udmVydHMgW3JhZGlhbnNdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIGNvc2luZSBvZiB0aGUgdmFsdWUuCi8vLwovLy8gSWYgW3JhZGlhbnNdIGlzIG5vdCBhIGZpbml0ZSBudW1iZXIsIHRoZSByZXN1bHQgaXMgTmFOLgpleHRlcm5hbCBkb3VibGUgY29zKG51bSByYWRpYW5zKTsKCi8vLyBDb252ZXJ0cyBbcmFkaWFuc10gdG8gYSBbZG91YmxlXSBhbmQgcmV0dXJucyB0aGUgdGFuZ2VudCBvZiB0aGUgdmFsdWUuCi8vLwovLy8gVGhlIHRhbmdlbnQgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBgc2luKHJhZGlhbnMpL2NvcyhyYWRpYW5zKWAgYW5kIG1heSBiZQovLy8gaW5maW5pdGUgKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSB3aGVuIGBjb3MocmFkaWFucylgIGlzIGVxdWFsIHRvIHplcm8uCi8vLyBJZiBbcmFkaWFuc10gaXMgbm90IGEgZmluaXRlIG51bWJlciwgdGhlIHJlc3VsdCBpcyBOYU4uCmV4dGVybmFsIGRvdWJsZSB0YW4obnVtIHJhZGlhbnMpOwoKLy8vIENvbnZlcnRzIFt4XSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIGl0cyBhcmMgY29zaW5lIGluIHJhZGlhbnMuCi8vLwovLy8gUmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSAwLi5QSSwgb3IgTmFOIGlmIFt4XSBpcyBvdXRzaWRlCi8vLyB0aGUgcmFuZ2UgLTEuLjEuCmV4dGVybmFsIGRvdWJsZSBhY29zKG51bSB4KTsKCi8vLyBDb252ZXJ0cyBbeF0gdG8gYSBbZG91YmxlXSBhbmQgcmV0dXJucyBpdHMgYXJjIHNpbmUgaW4gcmFkaWFucy4KLy8vCi8vLyBSZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIC1QSS8yLi5QSS8yLCBvciBOYU4gaWYgW3hdIGlzIG91dHNpZGUKLy8vIHRoZSByYW5nZSAtMS4uMS4KZXh0ZXJuYWwgZG91YmxlIGFzaW4obnVtIHgpOwoKLy8vIENvbnZlcnRzIFt4XSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIGl0cyBhcmMgdGFuZ2VudCBpbiByYWRpYW5zLgovLy8KLy8vIFJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgLVBJLzIuLlBJLzIsIG9yIE5hTiBpZiBbeF0gaXMgTmFOLgpleHRlcm5hbCBkb3VibGUgYXRhbihudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIHBvc2l0aXZlIHNxdWFyZSByb290IG9mIHRoZQovLy8gdmFsdWUuCi8vLwovLy8gUmV0dXJucyAtMC4wIGlmIFt4XSBpcyAtMC4wLCBhbmQgTmFOIGlmIFt4XSBpcyBvdGhlcndpc2UgbmVnYXRpdmUgb3IgTmFOLgpleHRlcm5hbCBkb3VibGUgc3FydChudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIG5hdHVyYWwgZXhwb25lbnQsIFtlXSwKLy8vIHRvIHRoZSBwb3dlciBbeF0uCi8vLwovLy8gUmV0dXJucyBOYU4gaWYgW3hdIGlzIE5hTi4KZXh0ZXJuYWwgZG91YmxlIGV4cChudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHRoZSB2YWx1ZS4KLy8vCi8vLyBSZXR1cm5zIG5lZ2F0aXZlIGluZmluaXR5IGlmIFt4XSBpcyBlcXVhbCB0byB6ZXJvLgovLy8gUmV0dXJucyBOYU4gaWYgW3hdIGlzIE5hTiBvciBsZXNzIHRoYW4gemVyby4KZXh0ZXJuYWwgZG91YmxlIGxvZyhudW0geCk7CoC1AE5OPAFKBCYEHAQVEwEeExQXASQEHiQBHQROTx4nARwES08eJwEdKQEeKgEVJgEYKwEWKQEnBCsuTU8RKQEnBCtCUUMpARkEKgQ9HigEOQRLEgRMTjIEKyUBLARNTxoEUUAEPAQ+L0VNFUFGQTxQFVEkSxU7Sh4/BEgOBE9JOCcBSAQ8IgFKBDwiAUsEUUo8IgFGBEEVHQFEBEcVHQFHBEQdAUsLBE4dAUYWBB8cAU8ENzEcAQlkYXJ0Om1hdGgvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9tYXRoX3BhdGNoLmRhcnSlNC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDptYXRoIiB3aGljaCBjb250YWlucyBhbGwgdGhlIGltcG9ydHMgdXNlZAovLy8gYnkgcGF0Y2hlcyBvZiB0aGF0IGxpYnJhcnkuIFdlIHBsYW4gdG8gY2hhbmdlIHRoaXMgd2hlbiB3ZSBoYXZlIGEgc2hhcmVkCi8vLyBmcm9udCBlbmQgYW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IHBhdGNoOwoKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgVWludDMyTGlzdDsKCi8vLyBUaGVyZSBhcmUgbm8gcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5LgoKQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpUIG1pbjxUIGV4dGVuZHMgbnVtPihUIGEsIFQgYikgewogIC8vIFRoZXNlIHBhcnRpYWxseSByZWR1bmRhbnQgdHlwZSBjaGVja3MgaW1wcm92ZSBjb2RlIHF1YWxpdHkgZm9yIGRhcnQyanMuCiAgLy8gTW9zdCBvZiB0aGUgaW1wcm92ZW1lbnQgaXMgYXQgY2FsbCBzaXRlcyBmcm9tIHRoZSBpbmZlcnJlZCBub24tbnVsbCBudW0KICAvLyByZXR1cm4gdHlwZS4KICBpZiAoYSBpcyEgbnVtKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihhKTsKICBpZiAoYiBpcyEgbnVtKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihiKTsKCiAgaWYgKGEgPiBiKSByZXR1cm4gYjsKICBpZiAoYSA8IGIpIHJldHVybiBhOwogIGlmIChiIGlzIGRvdWJsZSkgewogICAgLy8gU3BlY2lhbCBjYXNlIGZvciBOYU4gYW5kIC0wLjAuIElmIG9uZSBhcmd1bWVudCBpcyBOYU4gcmV0dXJuIE5hTi4KICAgIC8vIFttaW5dIG11c3QgYWxzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIC0wLjAgYW5kIDAuMC4KICAgIGlmIChhIGlzIGRvdWJsZSkgewogICAgICBpZiAoYSA9PSAwLjApIHsKICAgICAgICAvLyBhIGlzIGVpdGhlciAwLjAgb3IgLTAuMC4gYiBpcyBlaXRoZXIgMC4wLCAtMC4wIG9yIE5hTi4KICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHJldHVybnMgLTAuMCBpZiBlaXRoZXIgYSBvciBiIGlzIC0wLjAsIGFuZCBpdAogICAgICAgIC8vIHJldHVybnMgTmFOIGlmIGIgaXMgTmFOLgogICAgICAgIG51bSBuID0gKGEgKyBiKSAqIGEgKiBiOwogICAgICAgIHJldHVybiBuOwogICAgICB9CiAgICB9CiAgICAvLyBDaGVjayBmb3IgTmFOIGFuZCBiID09IC0wLjAuCiAgICBpZiAoYSA9PSAwICYmIGIuaXNOZWdhdGl2ZSB8fCBiLmlzTmFOKSByZXR1cm4gYjsKICAgIHJldHVybiBhOwogIH0KICByZXR1cm4gYTsKfQoKQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpUIG1heDxUIGV4dGVuZHMgbnVtPihUIGEsIFQgYikgewogIC8vIFRoZXNlIHBhcnRpYWxseSByZWR1bmRhbnQgdHlwZSBjaGVja3MgaW1wcm92ZSBjb2RlIHF1YWxpdHkgZm9yIGRhcnQyanMuCiAgLy8gTW9zdCBvZiB0aGUgaW1wcm92ZW1lbnQgaXMgYXQgY2FsbCBzaXRlcyBmcm9tIHRoZSBpbmZlcnJlZCBub24tbnVsbCBudW0KICAvLyByZXR1cm4gdHlwZS4KICBpZiAoYSBpcyEgbnVtKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihhKTsKICBpZiAoYiBpcyEgbnVtKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihiKTsKCiAgaWYgKGEgPiBiKSByZXR1cm4gYTsKICBpZiAoYSA8IGIpIHJldHVybiBiOwogIGlmIChiIGlzIGRvdWJsZSkgewogICAgLy8gU3BlY2lhbCBjYXNlIGZvciBOYU4gYW5kIC0wLjAuIElmIG9uZSBhcmd1bWVudCBpcyBOYU4gcmV0dXJuIE5hTi4KICAgIC8vIFttYXhdIG11c3QgYWxzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIC0wLjAgYW5kIDAuMC4KICAgIGlmIChhIGlzIGRvdWJsZSkgewogICAgICBpZiAoYSA9PSAwLjApIHsKICAgICAgICAvLyBhIGlzIGVpdGhlciAwLjAgb3IgLTAuMC4gYiBpcyBlaXRoZXIgMC4wLCAtMC4wLCBvciBOYU4uCiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyByZXR1cm5zIDAuMCBpZiBlaXRoZXIgYSBvciBiIGlzIDAuMCwgYW5kIGl0CiAgICAgICAgLy8gcmV0dXJucyBOYU4gaWYgYiBpcyBOYU4uCiAgICAgICAgbnVtIG4gPSBhICsgYjsKICAgICAgICByZXR1cm4gbjsKICAgICAgfQogICAgfQogICAgLy8gQ2hlY2sgZm9yIE5hTi4KICAgIGlmIChiLmlzTmFOKSByZXR1cm4gYjsKICAgIHJldHVybiBhOwogIH0KICAvLyBtYXgoLTAuMCwgMCkgbXVzdCByZXR1cm4gMC4KICBpZiAoYiA9PSAwICYmIGEuaXNOZWdhdGl2ZSkgcmV0dXJuIGI7CiAgcmV0dXJuIGE7Cn0KCi8vIElmIFt4XSBpcyBhbiBbaW50XSBhbmQgW2V4cG9uZW50XSBpcyBhIG5vbi1uZWdhdGl2ZSBbaW50XSwgdGhlIHJlc3VsdCBpcwovLyBhbiBbaW50XSwgb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgYSBbZG91YmxlXS4KQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpudW0gcG93KG51bSB4LCBudW0gZXhwb25lbnQpIHsKICBpZiAoKHggaXMgaW50KSAmJiAoZXhwb25lbnQgaXMgaW50KSAmJiAoZXhwb25lbnQgPj0gMCkpIHsKICAgIHJldHVybiBfaW50UG93KHgsIGV4cG9uZW50KTsKICB9CiAgcmV0dXJuIF9kb3VibGVQb3coeC50b0RvdWJsZSgpLCBleHBvbmVudC50b0RvdWJsZSgpKTsKfQoKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpkb3VibGUgX2RvdWJsZVBvdyhkb3VibGUgYmFzZSwgZG91YmxlIGV4cG9uZW50KSB7CiAgaWYgKGV4cG9uZW50ID09IDAuMCkgewogICAgcmV0dXJuIDEuMDsgLy8gRUNNQS0yNjIgMTUuOC4yLjEzCiAgfQogIC8vIFNwZWVkIHVwIHNpbXBsZSBjYXNlcy4KICBpZiAoZXhwb25lbnQgPT0gMS4wKSByZXR1cm4gYmFzZTsKICBpZiAoZXhwb25lbnQgPT0gMi4wKSByZXR1cm4gYmFzZSAqIGJhc2U7CiAgaWYgKGV4cG9uZW50ID09IDMuMCkgcmV0dXJuIGJhc2UgKiBiYXNlICogYmFzZTsKCiAgaWYgKGJhc2UgPT0gMS4wKSByZXR1cm4gMS4wOwoKICBpZiAoYmFzZS5pc05hTiB8fCBleHBvbmVudC5pc05hTikgewogICAgcmV0dXJuIGRvdWJsZS5uYW47CiAgfQogIGlmICgoYmFzZSAhPSAtZG91YmxlLmluZmluaXR5KSAmJiAoZXhwb25lbnQgPT0gMC41KSkgewogICAgaWYgKGJhc2UgPT0gMC4wKSB7CiAgICAgIHJldHVybiAwLjA7CiAgICB9CiAgICByZXR1cm4gc3FydChiYXNlKTsKICB9CiAgcmV0dXJuIF9wb3coYmFzZS50b0RvdWJsZSgpLCBleHBvbmVudC50b0RvdWJsZSgpKTsKfQoKZG91YmxlIF9wb3coZG91YmxlIGJhc2UsIGRvdWJsZSBleHBvbmVudCkgbmF0aXZlICJNYXRoX2RvdWJsZVBvdyI7CgppbnQgX2ludFBvdyhpbnQgYmFzZSwgaW50IGV4cG9uZW50KSB7CiAgLy8gRXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcuCiAgaW50IHJlc3VsdCA9IDE7CiAgd2hpbGUgKGV4cG9uZW50ICE9IDApIHsKICAgIGlmICgoZXhwb25lbnQgJiAxKSA9PSAxKSB7CiAgICAgIHJlc3VsdCAqPSBiYXNlOwogICAgfQogICAgZXhwb25lbnQgPj49IDE7CiAgICAvLyBTa2lwIHVubmVjZXNzYXJ5IG9wZXJhdGlvbiAoY2FuIG92ZXJmbG93IHRvIE1pbnQpLgogICAgaWYgKGV4cG9uZW50ICE9IDApIHsKICAgICAgYmFzZSAqPSBiYXNlOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CgpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgYXRhbjIobnVtIGEsIG51bSBiKSA9PiBfYXRhbjIoYS50b0RvdWJsZSgpLCBiLnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgc2luKG51bSByYWRpYW5zKSA9PiBfc2luKHJhZGlhbnMudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSBjb3MobnVtIHJhZGlhbnMpID0+IF9jb3MocmFkaWFucy50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIHRhbihudW0gcmFkaWFucykgPT4gX3RhbihyYWRpYW5zLnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgYWNvcyhudW0geCkgPT4gX2Fjb3MoeC50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIGFzaW4obnVtIHgpID0+IF9hc2luKHgudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSBhdGFuKG51bSB4KSA9PiBfYXRhbih4LnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgc3FydChudW0geCkgPT4gX3NxcnQoeC50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpkb3VibGUgZXhwKG51bSB4KSA9PiBfZXhwKHgudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKZG91YmxlIGxvZyhudW0geCkgPT4gX2xvZyh4LnRvRG91YmxlKCkpOwoKZG91YmxlIF9hdGFuMihkb3VibGUgYSwgZG91YmxlIGIpIG5hdGl2ZSAiTWF0aF9hdGFuMiI7CmRvdWJsZSBfc2luKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfc2luIjsKZG91YmxlIF9jb3MoZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9jb3MiOwpkb3VibGUgX3Rhbihkb3VibGUgeCkgbmF0aXZlICJNYXRoX3RhbiI7CmRvdWJsZSBfYWNvcyhkb3VibGUgeCkgbmF0aXZlICJNYXRoX2Fjb3MiOwpkb3VibGUgX2FzaW4oZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9hc2luIjsKZG91YmxlIF9hdGFuKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfYXRhbiI7CmRvdWJsZSBfc3FydChkb3VibGUgeCkgbmF0aXZlICJNYXRoX3NxcnQiOwpkb3VibGUgX2V4cChkb3VibGUgeCkgbmF0aXZlICJNYXRoX2V4cCI7CmRvdWJsZSBfbG9nKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfbG9nIjsKCi8vIFRPRE8oaXBvc3ZhKTogSGFuZGxlIHBhdGNoIG1ldGhvZHMgd2l0aGluIGEgcGF0Y2ggY2xhc3MgY29ycmVjdGx5LgpAcGF0Y2gKY2xhc3MgUmFuZG9tIHsKICBAcGF0Y2gKICBmYWN0b3J5IFJhbmRvbShbaW50IHNlZWRdKSB7CiAgICB2YXIgc3RhdGUgPSBfUmFuZG9tLl9zZXR1cFNlZWQoKHNlZWQgPT0gbnVsbCkgPyBfUmFuZG9tLl9uZXh0U2VlZCgpIDogc2VlZCk7CiAgICAvLyBDcmFuayBhIGNvdXBsZSBvZiB0aW1lcyB0byBkaXN0cmlidXRlIHRoZSBzZWVkIGJpdHMgYSBiaXQgZnVydGhlci4KICAgIHJldHVybiBuZXcgX1JhbmRvbS5fd2l0aFN0YXRlKHN0YXRlKQogICAgICAuLl9uZXh0U3RhdGUoKQogICAgICAuLl9uZXh0U3RhdGUoKQogICAgICAuLl9uZXh0U3RhdGUoKQogICAgICAuLl9uZXh0U3RhdGUoKTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgUmFuZG9tLnNlY3VyZSgpIHsKICAgIHJldHVybiBuZXcgX1NlY3VyZVJhbmRvbSgpOwogIH0KfQoKY2xhc3MgX1JhbmRvbSBpbXBsZW1lbnRzIFJhbmRvbSB7CiAgLy8gSW50ZXJuYWwgc3RhdGUgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmaW5hbCBVaW50MzJMaXN0IF9zdGF0ZTsKICBzdGF0aWMgY29uc3QgX2tTVEFURV9MTyA9IDA7CiAgc3RhdGljIGNvbnN0IF9rU1RBVEVfSEkgPSAxOyAvLyBVbnVzZWQgaW4gRGFydCBjb2RlLgoKICBfUmFuZG9tLl93aXRoU3RhdGUodGhpcy5fc3RhdGUpOwoKICAvLyBUaGUgYWxnb3JpdGhtIHVzZWQgaGVyZSBpcyBNdWx0aXBseSB3aXRoIENhcnJ5IChNV0MpIHdpdGggYSBCYXNlIGIgPSAyXjMyLgogIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTXVsdGlwbHktd2l0aC1jYXJyeQogIC8vIFRoZSBjb25zdGFudCBBIGlzIHNlbGVjdGVkIGZyb20gIk51bWVyaWNhbCBSZWNpcGVzIDNyZCBFZGl0aW9uIiBwLjM0OCBCMS4KCiAgLy8gSW1wbGVtZW50czoKICAvLyAgIGNvbnN0IF9BID0gMHhmZmZmZGE2MTsKICAvLyAgIHZhciBzdGF0ZSA9CiAgLy8gICAgICAgKChfQSAqIChfc3RhdGVbX2tTVEFURV9MT10pKSArIF9zdGF0ZVtfa1NUQVRFX0hJXSkgJiAoKDEgPDwgNjQpIC0gMSk7CiAgLy8gICBfc3RhdGVbX2tTVEFURV9MT10gPSBzdGF0ZSAmICgoMSA8PCAzMikgLSAxKTsKICAvLyAgIF9zdGF0ZVtfa1NUQVRFX0hJXSA9IHN0YXRlID4+IDMyOwogIC8vIFRoaXMgaXMgYSBuYXRpdmUgdG8gcHJldmVudCA2NC1iaXQgb3BlcmF0aW9ucyBpbiBEYXJ0LCB3aGljaAogIC8vIGZhaWwgd2l0aCAtLXRocm93X29uX2phdmFzY3JpcHRfaW50X292ZXJmbG93LgogIC8vIFRPRE8ocmVnaXMpOiBJbXBsZW1lbnQgaW4gRGFydCBhbmQgcmVtb3ZlIFJhbmRvbV9uZXh0U3RhdGUgaW4gbWF0aC5jYy4KICB2b2lkIF9uZXh0U3RhdGUoKSBuYXRpdmUgIlJhbmRvbV9uZXh0U3RhdGUiOwoKICBpbnQgbmV4dEludChpbnQgbWF4KSB7CiAgICBjb25zdCBsaW1pdCA9IDB4M0ZGRkZGRkY7CiAgICBpZiAoKG1heCA8PSAwKSB8fCAoKG1heCA+IGxpbWl0KSAmJiAobWF4ID4gX1BPVzJfMzIpKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZSgKICAgICAgICAgIG1heCwgMSwgX1BPVzJfMzIsICJtYXgiLCAiTXVzdCBiZSBwb3NpdGl2ZSBhbmQgPD0gMl4zMiIpOwogICAgfQogICAgaWYgKChtYXggJiAtbWF4KSA9PSBtYXgpIHsKICAgICAgLy8gRmFzdCBjYXNlIGZvciBwb3dlcnMgb2YgdHdvLgogICAgICBfbmV4dFN0YXRlKCk7CiAgICAgIHJldHVybiBfc3RhdGVbX2tTVEFURV9MT10gJiAobWF4IC0gMSk7CiAgICB9CgogICAgdmFyIHJuZDMyOwogICAgdmFyIHJlc3VsdDsKICAgIGRvIHsKICAgICAgX25leHRTdGF0ZSgpOwogICAgICBybmQzMiA9IF9zdGF0ZVtfa1NUQVRFX0xPXTsKICAgICAgcmVzdWx0ID0gcm5kMzIgJSBtYXg7CiAgICB9IHdoaWxlICgocm5kMzIgLSByZXN1bHQgKyBtYXgpID4gX1BPVzJfMzIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGRvdWJsZSBuZXh0RG91YmxlKCkgewogICAgcmV0dXJuICgobmV4dEludCgxIDw8IDI2KSAqIF9QT1cyXzI3X0QpICsgbmV4dEludCgxIDw8IDI3KSkgLyBfUE9XMl81M19EOwogIH0KCiAgYm9vbCBuZXh0Qm9vbCgpIHsKICAgIHJldHVybiBuZXh0SW50KDIpID09IDA7CiAgfQoKICAvLyBDb25zdGFudHMgdXNlZCBieSB0aGUgYWxnb3JpdGhtLgogIHN0YXRpYyBjb25zdCBfUE9XMl8zMiA9IDEgPDwgMzI7CiAgc3RhdGljIGNvbnN0IF9QT1cyXzUzX0QgPSAxLjAgKiAoMSA8PCA1Myk7CiAgc3RhdGljIGNvbnN0IF9QT1cyXzI3X0QgPSAxLjAgKiAoMSA8PCAyNyk7CgogIC8vIFVzZSBhIHNpbmdsZXRvbiBSYW5kb20gb2JqZWN0IHRvIGdldCBhIG5ldyBzZWVkIGlmIG5vIHNlZWQgd2FzIHBhc3NlZC4KICBzdGF0aWMgZmluYWwgX3BybmcgPSBuZXcgX1JhbmRvbS5fd2l0aFN0YXRlKF9pbml0aWFsU2VlZCgpKTsKCiAgLy8gVGhpcyBpcyBhIG5hdGl2ZSB0byBwcmV2ZW50IDY0LWJpdCBvcGVyYXRpb25zIGluIERhcnQsIHdoaWNoCiAgLy8gZmFpbCB3aXRoIC0tdGhyb3dfb25famF2YXNjcmlwdF9pbnRfb3ZlcmZsb3cuCiAgLy8gVE9ETyhyZWdpcyk6IEltcGxlbWVudCBoZXJlIGluIERhcnQgYW5kIHJlbW92ZSBuYXRpdmUgaW4gbWF0aC5jYy4KICBzdGF0aWMgVWludDMyTGlzdCBfc2V0dXBTZWVkKGludCBzZWVkKSBuYXRpdmUgIlJhbmRvbV9zZXR1cFNlZWQiOwogIC8vIEdldCBhIHNlZWQgZnJvbSB0aGUgVk0ncyByYW5kb20gbnVtYmVyIHByb3ZpZGVyLgogIHN0YXRpYyBVaW50MzJMaXN0IF9pbml0aWFsU2VlZCgpIG5hdGl2ZSAiUmFuZG9tX2luaXRpYWxTZWVkIjsKCiAgc3RhdGljIGludCBfbmV4dFNlZWQoKSB7CiAgICAvLyBUcmlnZ2VyIHRoZSBQUk5HIG9uY2UgdG8gY2hhbmdlIHRoZSBpbnRlcm5hbCBzdGF0ZS4KICAgIF9wcm5nLl9uZXh0U3RhdGUoKTsKICAgIHJldHVybiBfcHJuZy5fc3RhdGVbX2tTVEFURV9MT107CiAgfQp9CgpjbGFzcyBfU2VjdXJlUmFuZG9tIGltcGxlbWVudHMgUmFuZG9tIHsKICBfU2VjdXJlUmFuZG9tKCkgewogICAgLy8gVGhyb3cgZWFybHkgaW4gY29uc3RydWN0b3IgaWYgZW50cm9weSBzb3VyY2UgaXMgbm90IGhvb2tlZCB1cC4KICAgIF9nZXRCeXRlcygxKTsKICB9CgogIC8vIFJldHVybiBjb3VudCBieXRlcyBvZiBlbnRyb3B5IGFzIGEgcG9zaXRpdmUgaW50ZWdlcjsgY291bnQgPD0gOC4KICBzdGF0aWMgaW50IF9nZXRCeXRlcyhpbnQgY291bnQpIG5hdGl2ZSAiU2VjdXJlUmFuZG9tX2dldEJ5dGVzIjsKCiAgaW50IG5leHRJbnQoaW50IG1heCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbCgKICAgICAgICBtYXgsIDEsIF9QT1cyXzMyLCAibWF4IiwgIk11c3QgYmUgcG9zaXRpdmUgYW5kIDw9IDJeMzIiKTsKICAgIGZpbmFsIGJ5dGVDb3VudCA9ICgobWF4IC0gMSkuYml0TGVuZ3RoICsgNykgPj4gMzsKICAgIGlmIChieXRlQ291bnQgPT0gMCkgewogICAgICByZXR1cm4gMDsgLy8gTm90IHJhbmRvbSBpZiBtYXggPT0gMS4KICAgIH0KICAgIHZhciBybmQ7CiAgICB2YXIgcmVzdWx0OwogICAgZG8gewogICAgICBybmQgPSBfZ2V0Qnl0ZXMoYnl0ZUNvdW50KTsKICAgICAgcmVzdWx0ID0gcm5kICUgbWF4OwogICAgfSB3aGlsZSAoKHJuZCAtIHJlc3VsdCArIG1heCkgPiAoMSA8PCAoYnl0ZUNvdW50IDw8IDMpKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZG91YmxlIG5leHREb3VibGUoKSB7CiAgICByZXR1cm4gKF9nZXRCeXRlcyg3KSA+PiAzKSAvIF9QT1cyXzUzX0Q7CiAgfQoKICBib29sIG5leHRCb29sKCkgewogICAgcmV0dXJuIF9nZXRCeXRlcygxKS5pc0V2ZW47CiAgfQoKICAvLyBDb25zdGFudHMgdXNlZCBieSB0aGUgYWxnb3JpdGhtLgogIHN0YXRpYyBjb25zdCBfUE9XMl8zMiA9IDEgPDwgMzI7CiAgc3RhdGljIGNvbnN0IF9QT1cyXzUzX0QgPSAxLjAgKiAoMSA8PCA1Myk7Cn0KgTsATk48AU1PTSQBJAEqAS4BBxwhTU0SLS0BFxcVSTkXFkJHJCESCAYkNQ4EDAIBBxwhTU0SLS0BFxcVSTkXFkNFJBcSCAYWGw4EISgMAgFMMQccHzwhBDgCATUyGSYEHCQrMgEfASYXBDkXEgYXBDUCAUMBJiESGh8WBhQ6GRQGBBECAQc1G0IHNRs1BzUbNQc1GzUHNRsrBzUbKwc1GysHNRsrBxwpBxwpATcpKSkrKysrKSkBRgcPCR9RSikVFRUWBAEJHCAEAgEiNBwbHzcBIwFQNk8BER4TUTUpQjNMLwEZHj0iRAYfJhQtBgEPEAkUIhwxEwQBGE4EARQcBAEmIy0tAUw/AUIzR0Q2QAEbOxglBAIBKBRGEgQBRkIBGSVCNhorBg0QCSIaPhMEARgtBAEUIAQBJiMtAgEfZGFydDptYXRoLXBhdGNoL21hdGhfcGF0Y2guZGFydDZvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvbWF0aC9qZW5raW5zX3NtaV9oYXNoLmRhcnSFMy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCnBhcnQgb2YgZGFydC5tYXRoOwoKLy8vIFRoaXMgaXMgdGhlIFtKZW5raW5zIGhhc2ggZnVuY3Rpb25dWzFdIGJ1dCB1c2luZyBtYXNraW5nIHRvIGtlZXAKLy8vIHZhbHVlcyBpbiBTTUkgcmFuZ2UuCi8vLwovLy8gWzFdOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0plbmtpbnNfaGFzaF9mdW5jdGlvbgovLy8KLy8vIFVzZToKLy8vIEhhc2ggZWFjaCB2YWx1ZSB3aXRoIHRoZSBoYXNoIG9mIHRoZSBwcmV2aW91cyB2YWx1ZSwgdGhlbiBnZXQgdGhlIGZpbmFsCi8vLyBoYXNoIGJ5IGNhbGxpbmcgZmluaXNoLgovLy8KLy8vICAgICB2YXIgaGFzaCA9IDA7Ci8vLyAgICAgZm9yICh2YXIgdmFsdWUgaW4gdmFsdWVzKSB7Ci8vLyAgICAgICBoYXNoID0gSmVua2luc1NtaUhhc2guY29tYmluZShoYXNoLCB2YWx1ZS5oYXNoQ29kZSk7Ci8vLyAgICAgfQovLy8gICAgIGhhc2ggPSBKZW5raW5zU21pSGFzaC5maW5pc2goaGFzaCk7CmNsYXNzIF9KZW5raW5zU21pSGFzaCB7CiAgLy8gVE9ETygxMTYxNyk6IFRoaXMgY2xhc3Mgc2hvdWxkIGJlIG9wdGltaXplZCBhbmQgc3RhbmRhcmRpemVkIGVsc2V3aGVyZS4KCiAgc3RhdGljIGludCBjb21iaW5lKGludCBoYXNoLCBpbnQgdmFsdWUpIHsKICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyB2YWx1ZSk7CiAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDdmZmZmICYgaGFzaCkgPDwgMTApKTsKICAgIHJldHVybiBoYXNoIF4gKGhhc2ggPj4gNik7CiAgfQoKICBzdGF0aWMgaW50IGZpbmlzaChpbnQgaGFzaCkgewogICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwM2ZmZmZmZiAmIGhhc2gpIDw8IDMpKTsKICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4gMTEpOwogICAgcmV0dXJuIDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwMDAwM2ZmZiAmIGhhc2gpIDw8IDE1KSk7CiAgfQoKICBzdGF0aWMgaW50IGhhc2gyKGEsIGIpID0+IGZpbmlzaChjb21iaW5lKGNvbWJpbmUoMCwgYSksIGIpKTsKCiAgc3RhdGljIGludCBoYXNoNChhLCBiLCBjLCBkKSA9PgogICAgICBmaW5pc2goY29tYmluZShjb21iaW5lKGNvbWJpbmUoY29tYmluZSgwLCBhKSwgYiksIGMpLCBkKSk7Cn0KKQBOTjwTAUUZBDwECUwcBBYkPwosGE0BLCg+HwQBID0gPgQBPwEiQQIBH2RhcnQ6bWF0aC9qZW5raW5zX3NtaV9oYXNoLmRhcnQrb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL21hdGgvcG9pbnQuZGFydInyLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KcGFydCBvZiBkYXJ0Lm1hdGg7CgovLy8gQSB1dGlsaXR5IGNsYXNzIGZvciByZXByZXNlbnRpbmcgdHdvLWRpbWVuc2lvbmFsIHBvc2l0aW9ucy4KY2xhc3MgUG9pbnQ8VCBleHRlbmRzIG51bT4gewogIGZpbmFsIFQgeDsKICBmaW5hbCBUIHk7CgogIGNvbnN0IFBvaW50KFQgeCwgVCB5KQogICAgICA6IHRoaXMueCA9IHgsCiAgICAgICAgdGhpcy55ID0geTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1BvaW50KCR4LCAkeSknOwoKICAvLy8gQSBgUG9pbnRgIGlzIG9ubHkgZXF1YWwgdG8gYW5vdGhlciBgUG9pbnRgIHdpdGggdGhlIHNhbWUgY29vcmRpbmF0ZXMuCiAgLy8vCiAgLy8vIFRoaXMgcG9pbnQgaXMgZXF1YWwgdG8gYG90aGVyYCBpZiwgYW5kIG9ubHkgaWYsCiAgLy8vIGBvdGhlcmAgaXMgYSBgUG9pbnRgIHdpdGgKICAvLy8gW3hdIGVxdWFsIHRvIGBvdGhlci54YCBhbmQgW3ldIGVxdWFsIHRvIGBvdGhlci55YC4KICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpID0+CiAgICAgIC8vIENhbm5vdCBjaGFuZ2UgcGFyYW1ldGVyIHR5cGUgdG8gYE9iamVjdGAgaW4gY2FzZSBzb21lIGNsYXNzCiAgICAgIC8vIGluaGVyaXRzIHRoZSB0eXBlIGFuZCB1c2VzIHRoZWlyIGFyZ3VtZW50IGR5bmFtaWNhbGx5LgogICAgICBvdGhlciBpcyBQb2ludCAmJiB4ID09IG90aGVyLnggJiYgeSA9PSBvdGhlci55OwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9KZW5raW5zU21pSGFzaC5oYXNoMih4Lmhhc2hDb2RlLCB5Lmhhc2hDb2RlKTsKCiAgLy8vIEFkZCBbb3RoZXJdIHRvIGB0aGlzYCwgYXMgaWYgYm90aCBwb2ludHMgd2VyZSB2ZWN0b3JzLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgInZlY3RvciIgYXMgYSBQb2ludC4KICBQb2ludDxUPiBvcGVyYXRvciArKFBvaW50PFQ+IG90aGVyKSB7CiAgICByZXR1cm4gUG9pbnQ8VD4oeCArIG90aGVyLngsIHkgKyBvdGhlci55KTsKICB9CgogIC8vLyBTdWJ0cmFjdCBbb3RoZXJdIGZyb20gYHRoaXNgLCBhcyBpZiBib3RoIHBvaW50cyB3ZXJlIHZlY3RvcnMuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIHJlc3VsdGluZyAidmVjdG9yIiBhcyBhIFBvaW50LgogIFBvaW50PFQ+IG9wZXJhdG9yIC0oUG9pbnQ8VD4gb3RoZXIpIHsKICAgIHJldHVybiBQb2ludDxUPih4IC0gb3RoZXIueCwgeSAtIG90aGVyLnkpOwogIH0KCiAgLy8vIFNjYWxlIHRoaXMgcG9pbnQgYnkgW2ZhY3Rvcl0gYXMgaWYgaXQgd2VyZSBhIHZlY3Rvci4KICAvLy8KICAvLy8gKkltcG9ydGFudCogKk5vdGUqOiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYSBgbnVtYCBhcyBpdHMgYXJndW1lbnQgb25seSBzbwogIC8vLyB0aGF0IHlvdSBjYW4gc2NhbGUgUG9pbnQ8ZG91YmxlPiBvYmplY3RzIGJ5IGFuIGBpbnRgIGZhY3Rvci4gQmVjYXVzZSB0aGUKICAvLy8gc3RhciBvcGVyYXRvciBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSB0eXBlIG9mIFBvaW50IHRoYXQgb3JpZ2luYWxseSBjYWxsZWQKICAvLy8gaXQsIHBhc3NpbmcgaW4gYSBkb3VibGUgW2ZhY3Rvcl0gb24gYSBgUG9pbnQ8aW50PmAgX2NhdXNlc18gX2FfCiAgLy8vIF9ydW50aW1lXyBfZXJyb3JfIGluIGNoZWNrZWQgbW9kZS4KICBQb2ludDxUPiBvcGVyYXRvciAqKG51bSAvKlR8aW50Ki8gZmFjdG9yKSB7CiAgICByZXR1cm4gUG9pbnQ8VD4oKHggKiBmYWN0b3IpLCAoeSAqIGZhY3RvcikpOwogIH0KCiAgLy8vIEdldCB0aGUgc3RyYWlnaHQgbGluZSAoRXVjbGlkZWFuKSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW4gKDAsIDApIGFuZAogIC8vLyB0aGlzIHBvaW50LgogIGRvdWJsZSBnZXQgbWFnbml0dWRlID0+IHNxcnQoeCAqIHggKyB5ICogeSk7CgogIC8vLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGB0aGlzYCBhbmQgW290aGVyXS4KICBkb3VibGUgZGlzdGFuY2VUbyhQb2ludDxUPiBvdGhlcikgewogICAgdmFyIGR4ID0geCAtIG90aGVyLng7CiAgICB2YXIgZHkgPSB5IC0gb3RoZXIueTsKICAgIHJldHVybiBzcXJ0KGR4ICogZHggKyBkeSAqIGR5KTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYHRoaXNgIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBTcXVhcmVkIGRpc3RhbmNlcyBjYW4gYmUgdXNlZCBmb3IgY29tcGFyaXNvbnMgd2hlbiB0aGUgYWN0dWFsIHZhbHVlIGlzIG5vdAogIC8vLyByZXF1aXJlZC4KICBUIHNxdWFyZWREaXN0YW5jZVRvKFBvaW50PFQ+IG90aGVyKSB7CiAgICB2YXIgZHggPSB4IC0gb3RoZXIueDsKICAgIHZhciBkeSA9IHkgLSBvdGhlci55OwogICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5OwogIH0KfQpMAE5OPBMBQB0NDQEYFBQBKAFMBjYgOSVFQDYBRQE9BjEoLwQBRAYxKC8EATsGUE9RRikuMQQBTxIvATcmGhokBAE/BlEQKBoaHgQCARRkYXJ0Om1hdGgvcG9pbnQuZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvbWF0aC9yYW5kb20uZGFydIX8Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5tYXRoOwoKLy8vIEEgZ2VuZXJhdG9yIG9mIHJhbmRvbSBib29sLCBpbnQsIG9yIGRvdWJsZSB2YWx1ZXMuCi8vLwovLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3VwcGxpZXMgYSBzdHJlYW0gb2YgcHNldWRvLXJhbmRvbSBiaXRzIHRoYXQgYXJlCi8vLyBub3Qgc3VpdGFibGUgZm9yIGNyeXB0b2dyYXBoaWMgcHVycG9zZXMuCi8vLwovLy8gVXNlIHRoZSBbUmFuZG9tLnNlY3VyZV0oKSBjb25zdHJ1Y3RvciBmb3IgY3J5cHRvZ3JhcGhpYyBwdXJwb3Nlcy4KYWJzdHJhY3QgY2xhc3MgUmFuZG9tIHsKICAvLy8gQ3JlYXRlcyBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogIC8vLwogIC8vLyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIFtzZWVkXSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlCiAgLy8vIGludGVybmFsIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKICAvLy8gcmFuZG9tIHN0cmVhbSBjYW4gY2hhbmdlIGJldHdlZW4gcmVsZWFzZXMgb2YgdGhlIGxpYnJhcnkuCiAgZXh0ZXJuYWwgZmFjdG9yeSBSYW5kb20oW2ludCBzZWVkXSk7CgogIC8vLyBDcmVhdGVzIGEgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogIC8vLwogIC8vLyBJZiB0aGUgcHJvZ3JhbSBjYW5ub3QgcHJvdmlkZSBhIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZQogIC8vLyBzb3VyY2Ugb2YgcmFuZG9tIG51bWJlcnMsIGl0IHRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgZXh0ZXJuYWwgZmFjdG9yeSBSYW5kb20uc2VjdXJlKCk7CgogIC8vLyBHZW5lcmF0ZXMgYSBub24tbmVnYXRpdmUgcmFuZG9tIGludGVnZXIgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIGluIHRoZSByYW5nZQogIC8vLyBmcm9tIDAsIGluY2x1c2l2ZSwgdG8gW21heF0sIGV4Y2x1c2l2ZS4KICAvLy8KICAvLy8gSW1wbGVtZW50YXRpb24gbm90ZTogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgW21heF0gdmFsdWVzCiAgLy8vIGJldHdlZW4gMSBhbmQgKDE8PDMyKSBpbmNsdXNpdmUuCiAgaW50IG5leHRJbnQoaW50IG1heCk7CgogIC8vLyBHZW5lcmF0ZXMgYSBub24tbmVnYXRpdmUgcmFuZG9tIGZsb2F0aW5nIHBvaW50IHZhbHVlIHVuaWZvcm1seSBkaXN0cmlidXRlZAogIC8vLyBpbiB0aGUgcmFuZ2UgZnJvbSAwLjAsIGluY2x1c2l2ZSwgdG8gMS4wLCBleGNsdXNpdmUuCiAgZG91YmxlIG5leHREb3VibGUoKTsKCiAgLy8vIEdlbmVyYXRlcyBhIHJhbmRvbSBib29sZWFuIHZhbHVlLgogIGJvb2wgbmV4dEJvb2woKTsKfQoqAE5OPAETATcEUC0ERhgpBj5BQCcBQgY/QSQBUS4GTCcYAVE7FwEoEwIBFWRhcnQ6bWF0aC9yYW5kb20uZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvbWF0aC9yZWN0YW5nbGUuZGFydKFcLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KcGFydCBvZiBkYXJ0Lm1hdGg7CgovLy8gQSBiYXNlIGNsYXNzIGZvciByZXByZXNlbnRpbmcgdHdvLWRpbWVuc2lvbmFsIGF4aXMtYWxpZ25lZCByZWN0YW5nbGVzLgovLy8KLy8vIFRoaXMgcmVjdGFuZ2xlIHVzZXMgYSBsZWZ0LWhhbmRlZCBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0sIHdpdGggeAovLy8gZGlyZWN0ZWQgdG8gdGhlIHJpZ2h0IGFuZCB5IGRpcmVjdGVkIGRvd24sIGFzIHBlciB0aGUgY29udmVudGlvbiBpbiAyRAovLy8gY29tcHV0ZXIgZ3JhcGhpY3MuCi8vLwovLy8gU2VlIGFsc286Ci8vLyAgICBbVzNDIENvb3JkaW5hdGUgU3lzdGVtcyBTcGVjaWZpY2F0aW9uXShodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjSW5pdGlhbENvb3JkaW5hdGVTeXN0ZW0pLgovLy8KLy8vIFRoZSByZWN0YW5nbGUgaXMgdGhlIHNldCBvZiBwb2ludHMgd2l0aCByZXByZXNlbnRhYmxlIGNvb3JkaW5hdGVzIGdyZWF0ZXIKLy8vIHRoYW4gb3IgZXF1YWwgdG8gbGVmdC90b3AsIGFuZCB3aXRoIGRpc3RhbmNlIHRvIGxlZnQvdG9wIG5vIGdyZWF0ZXIgdGhhbgovLy8gd2lkdGgvaGVpZ2h0ICh0byB0aGUgbGltaXQgb2YgdGhlIHByZWNpc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMpLgphYnN0cmFjdCBjbGFzcyBfUmVjdGFuZ2xlQmFzZTxUIGV4dGVuZHMgbnVtPiB7CiAgY29uc3QgX1JlY3RhbmdsZUJhc2UoKTsKCiAgLy8vIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgZWRnZS4KICBUIGdldCBsZWZ0OwoKICAvLy8gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGVkZ2UuCiAgVCBnZXQgdG9wOwoKICAvLy8gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuCiAgVCBnZXQgd2lkdGg7CgogIC8vLyBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuCiAgVCBnZXQgaGVpZ2h0OwoKICAvLy8gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQgZWRnZS4KICBUIGdldCByaWdodCA9PiBsZWZ0ICsgd2lkdGg7CgogIC8vLyBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBib3R0b20gZWRnZS4KICBUIGdldCBib3R0b20gPT4gdG9wICsgaGVpZ2h0OwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1JlY3RhbmdsZSAoJGxlZnQsICR0b3ApICR3aWR0aCB4ICRoZWlnaHQnOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSA9PgogICAgICAvLyBDYW4ndCBjaGFuZ2UgYXJndW1lbnQgdHlwZSB0byBgT2JqZWN0YCBzaW5jZSBzdWJjbGFzc2VzIGluaGVyaXQgaXQKICAgICAgLy8gYW5kIHVzZXMgdGhlaXIgYXJndW1lbnQgZHluYW1pY2FsbHkuCiAgICAgIG90aGVyIGlzIFJlY3RhbmdsZSAmJgogICAgICBsZWZ0ID09IG90aGVyLmxlZnQgJiYKICAgICAgdG9wID09IG90aGVyLnRvcCAmJgogICAgICByaWdodCA9PSBvdGhlci5yaWdodCAmJgogICAgICBib3R0b20gPT0gb3RoZXIuYm90dG9tOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9KZW5raW5zU21pSGFzaC5oYXNoNCgKICAgICAgbGVmdC5oYXNoQ29kZSwgdG9wLmhhc2hDb2RlLCByaWdodC5oYXNoQ29kZSwgYm90dG9tLmhhc2hDb2RlKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBpbnRlcnNlY3Rpb24gb2YgYHRoaXNgIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGUgaW50ZXJzZWN0aW9uIG9mIHR3byBheGlzLWFsaWduZWQgcmVjdGFuZ2xlcywgaWYgYW55LCBpcyBhbHdheXMgYW5vdGhlcgogIC8vLyBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBhbmQgYG90aGVyYCwgb3IgYG51bGxgIGlmIHRoZXkgZG9uJ3QKICAvLy8gaW50ZXJzZWN0LgogIFJlY3RhbmdsZTxUPiBpbnRlcnNlY3Rpb24oUmVjdGFuZ2xlPFQ+IG90aGVyKSB7CiAgICB2YXIgeDAgPSBtYXgobGVmdCwgb3RoZXIubGVmdCk7CiAgICB2YXIgeDEgPSBtaW4obGVmdCArIHdpZHRoLCBvdGhlci5sZWZ0ICsgb3RoZXIud2lkdGgpOwoKICAgIGlmICh4MCA8PSB4MSkgewogICAgICB2YXIgeTAgPSBtYXgodG9wLCBvdGhlci50b3ApOwogICAgICB2YXIgeTEgPSBtaW4odG9wICsgaGVpZ2h0LCBvdGhlci50b3AgKyBvdGhlci5oZWlnaHQpOwoKICAgICAgaWYgKHkwIDw9IHkxKSB7CiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZTxUPih4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgYHRoaXNgIGludGVyc2VjdHMgW290aGVyXS4KICBib29sIGludGVyc2VjdHMoUmVjdGFuZ2xlPG51bT4gb3RoZXIpIHsKICAgIHJldHVybiAobGVmdCA8PSBvdGhlci5sZWZ0ICsgb3RoZXIud2lkdGggJiYKICAgICAgICBvdGhlci5sZWZ0IDw9IGxlZnQgKyB3aWR0aCAmJgogICAgICAgIHRvcCA8PSBvdGhlci50b3AgKyBvdGhlci5oZWlnaHQgJiYKICAgICAgICBvdGhlci50b3AgPD0gdG9wICsgaGVpZ2h0KTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHJlY3RhbmdsZSB3aGljaCBjb21wbGV0ZWx5IGNvbnRhaW5zIGB0aGlzYCBhbmQgW290aGVyXS4KICBSZWN0YW5nbGU8VD4gYm91bmRpbmdCb3goUmVjdGFuZ2xlPFQ+IG90aGVyKSB7CiAgICB2YXIgcmlnaHQgPSBtYXgodGhpcy5sZWZ0ICsgdGhpcy53aWR0aCwgb3RoZXIubGVmdCArIG90aGVyLndpZHRoKTsKICAgIHZhciBib3R0b20gPSBtYXgodGhpcy50b3AgKyB0aGlzLmhlaWdodCwgb3RoZXIudG9wICsgb3RoZXIuaGVpZ2h0KTsKCiAgICB2YXIgbGVmdCA9IG1pbih0aGlzLmxlZnQsIG90aGVyLmxlZnQpOwogICAgdmFyIHRvcCA9IG1pbih0aGlzLnRvcCwgb3RoZXIudG9wKTsKCiAgICByZXR1cm4gUmVjdGFuZ2xlPFQ+KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApOwogIH0KCiAgLy8vIFRlc3RzIHdoZXRoZXIgYHRoaXNgIGVudGlyZWx5IGNvbnRhaW5zIFthbm90aGVyXS4KICBib29sIGNvbnRhaW5zUmVjdGFuZ2xlKFJlY3RhbmdsZTxudW0+IGFub3RoZXIpIHsKICAgIHJldHVybiBsZWZ0IDw9IGFub3RoZXIubGVmdCAmJgogICAgICAgIGxlZnQgKyB3aWR0aCA+PSBhbm90aGVyLmxlZnQgKyBhbm90aGVyLndpZHRoICYmCiAgICAgICAgdG9wIDw9IGFub3RoZXIudG9wICYmCiAgICAgICAgdG9wICsgaGVpZ2h0ID49IGFub3RoZXIudG9wICsgYW5vdGhlci5oZWlnaHQ7CiAgfQoKICAvLy8gVGVzdHMgd2hldGhlciBbYW5vdGhlcl0gaXMgaW5zaWRlIG9yIGFsb25nIHRoZSBlZGdlcyBvZiBgdGhpc2AuCiAgYm9vbCBjb250YWluc1BvaW50KFBvaW50PG51bT4gYW5vdGhlcikgewogICAgcmV0dXJuIGFub3RoZXIueCA+PSBsZWZ0ICYmCiAgICAgICAgYW5vdGhlci54IDw9IGxlZnQgKyB3aWR0aCAmJgogICAgICAgIGFub3RoZXIueSA+PSB0b3AgJiYKICAgICAgICBhbm90aGVyLnkgPD0gdG9wICsgaGVpZ2h0OwogIH0KCiAgUG9pbnQ8VD4gZ2V0IHRvcExlZnQgPT4gUG9pbnQ8VD4odGhpcy5sZWZ0LCB0aGlzLnRvcCk7CiAgUG9pbnQ8VD4gZ2V0IHRvcFJpZ2h0ID0+IFBvaW50PFQ+KHRoaXMubGVmdCArIHRoaXMud2lkdGgsIHRoaXMudG9wKTsKICBQb2ludDxUPiBnZXQgYm90dG9tUmlnaHQgPT4KICAgICAgUG9pbnQ8VD4odGhpcy5sZWZ0ICsgdGhpcy53aWR0aCwgdGhpcy50b3AgKyB0aGlzLmhlaWdodCk7CiAgUG9pbnQ8VD4gZ2V0IGJvdHRvbUxlZnQgPT4gUG9pbnQ8VD4odGhpcy5sZWZ0LCB0aGlzLnRvcCArIHRoaXMuaGVpZ2h0KTsKfQoKLy8vIEEgY2xhc3MgZm9yIHJlcHJlc2VudGluZyB0d28tZGltZW5zaW9uYWwgcmVjdGFuZ2xlcyB3aG9zZSBwcm9wZXJ0aWVzIGFyZQovLy8gaW1tdXRhYmxlLgpjbGFzcyBSZWN0YW5nbGU8VCBleHRlbmRzIG51bT4gZXh0ZW5kcyBfUmVjdGFuZ2xlQmFzZTxUPiB7CiAgZmluYWwgVCBsZWZ0OwogIGZpbmFsIFQgdG9wOwogIGZpbmFsIFQgd2lkdGg7CiAgZmluYWwgVCBoZWlnaHQ7CgogIC8vLyBDcmVhdGUgYSByZWN0YW5nbGUgc3Bhbm5lZCBieSBgKGxlZnQsIHRvcClgIGFuZAogIC8vLyBgKGxlZnQrd2lkdGgsIHRvcCtoZWlnaHQpYC4KICAvLy8KICAvLy8gVGhlIHJlY3RhbmdsZSBjb250YWlucyB0aGUgcG9pbnRzCiAgLy8vIHdpdGggeC1jb29yZGluYXRlIGJldHdlZW4gYGxlZnRgIGFuZCBgbGVmdCArIHdpZHRoYCwgYW5kCiAgLy8vIHdpdGggeS1jb29yZGluYXRlIGJldHdlZW4gYHRvcGAgYW5kIGB0b3AgKyBoZWlnaHRgLCBib3RoIGluY2x1c2l2ZS4KICAvLy8KICAvLy8gVGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHNob3VsZCBiZSBub24tbmVnYXRpdmUuCiAgLy8vIElmIGB3aWR0aGAgb3IgYGhlaWdodGAgYXJlIG5lZ2F0aXZlLCB0aGV5IGFyZSBjbGFtcGVkIHRvIHplcm8uCiAgLy8vCiAgLy8vIElmIGB3aWR0aGAgYW5kIGBoZWlnaHRgIGFyZSB6ZXJvLCB0aGUgInJlY3RhbmdsZSIgY29tcHJpc2VzIG9ubHkgdGhlCiAgLy8vIHNpbmdsZSBwb2ludCBgKGxlZnQsIHRvcClgLgogIGNvbnN0IFJlY3RhbmdsZSh0aGlzLmxlZnQsIHRoaXMudG9wLCBUIHdpZHRoLCBUIGhlaWdodCkKICAgICAgOiB0aGlzLndpZHRoID0gKHdpZHRoIDwgMCkgPyAtd2lkdGggKiAwIDogd2lkdGgsIC8vIElubGluZSBfY2xhbXBUb1plcm8uCiAgICAgICAgdGhpcy5oZWlnaHQgPSAoaGVpZ2h0IDwgMCkgPyAtaGVpZ2h0ICogMCA6IGhlaWdodDsKCiAgLy8vIENyZWF0ZSBhIHJlY3RhbmdsZSBzcGFubmVkIGJ5IHRoZSBwb2ludHMgW2FdIGFuZCBbYl07CiAgLy8vCiAgLy8vIFRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIHBvaW50cwogIC8vLyB3aXRoIHgtY29vcmRpbmF0ZSBiZXR3ZWVuIGBhLnhgIGFuZCBgYi54YCwgYW5kCiAgLy8vIHdpdGggeS1jb29yZGluYXRlIGJldHdlZW4gYGEueWAgYW5kIGBiLnlgLCBib3RoIGluY2x1c2l2ZS4KICAvLy8KICAvLy8gSWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gYGEueGAgYW5kIGBiLnhgIGlzIG5vdCByZXByZXNlbnRhYmxlCiAgLy8vICh3aGljaCBjYW4gaGFwcGVuIGlmIG9uZSBvciBib3RoIGlzIGEgZG91YmxlKSwKICAvLy8gdGhlIGFjdHVhbCByaWdodCBlZGdlIG1pZ2h0IGJlIHNsaWdodGx5IG9mZiBmcm9tIGBtYXgoYS54LCBiLngpYC4KICAvLy8gU2ltaWxhciBmb3IgdGhlIHktY29vcmRpbmF0ZXMgYW5kIHRoZSBib3R0b20gZWRnZS4KICBmYWN0b3J5IFJlY3RhbmdsZS5mcm9tUG9pbnRzKFBvaW50PFQ+IGEsIFBvaW50PFQ+IGIpIHsKICAgIFQgbGVmdCA9IG1pbihhLngsIGIueCk7CiAgICBUIHdpZHRoID0gbWF4KGEueCwgYi54KSAtIGxlZnQ7CiAgICBUIHRvcCA9IG1pbihhLnksIGIueSk7CiAgICBUIGhlaWdodCA9IG1heChhLnksIGIueSkgLSB0b3A7CiAgICByZXR1cm4gUmVjdGFuZ2xlPFQ+KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CiAgfQp9CgovLy8gQSBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIHR3by1kaW1lbnNpb25hbCBheGlzLWFsaWduZWQgcmVjdGFuZ2xlcyB3aXRoCi8vLyBtdXRhYmxlIHByb3BlcnRpZXMuCmNsYXNzIE11dGFibGVSZWN0YW5nbGU8VCBleHRlbmRzIG51bT4gZXh0ZW5kcyBfUmVjdGFuZ2xlQmFzZTxUPgogICAgaW1wbGVtZW50cyBSZWN0YW5nbGU8VD4gewogIC8vLyBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBsZWZ0IGVkZ2UuCiAgLy8vCiAgLy8vIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwgbW92ZSB0aGUgcmVjdGFuZ2xlIHdpdGhvdXQgY2hhbmdpbmcgaXRzIHdpZHRoLgogIFQgbGVmdDsKCiAgLy8vIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgZWRnZS4KICAvLy8KICAvLy8gU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBtb3ZlIHRoZSByZWN0YW5nbGUgd2l0aG91dCBjaGFuZ2luZyBpdHMgaGVpZ2h0LgogIFQgdG9wOwogIFQgX3dpZHRoOwogIFQgX2hlaWdodDsKCiAgLy8vIENyZWF0ZSBhIG11dGFibGUgcmVjdGFuZ2xlIHNwYW5uZWQgYnkgYChsZWZ0LCB0b3ApYCBhbmQKICAvLy8gYChsZWZ0K3dpZHRoLCB0b3AraGVpZ2h0KWAuCiAgLy8vCiAgLy8vIFRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIHBvaW50cwogIC8vLyB3aXRoIHgtY29vcmRpbmF0ZSBiZXR3ZWVuIGBsZWZ0YCBhbmQgYGxlZnQgKyB3aWR0aGAsIGFuZAogIC8vLyB3aXRoIHktY29vcmRpbmF0ZSBiZXR3ZWVuIGB0b3BgIGFuZCBgdG9wICsgaGVpZ2h0YCwgYm90aCBpbmNsdXNpdmUuCiAgLy8vCiAgLy8vIFRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlLgogIC8vLyBJZiBgd2lkdGhgIG9yIGBoZWlnaHRgIGFyZSBuZWdhdGl2ZSwgdGhleSBhcmUgY2xhbXBlZCB0byB6ZXJvLgogIC8vLwogIC8vLyBJZiBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBhcmUgemVybywgdGhlICJyZWN0YW5nbGUiIGNvbXByaXNlcyBvbmx5IHRoZQogIC8vLyBzaW5nbGUgcG9pbnQgYChsZWZ0LCB0b3ApYC4KICBNdXRhYmxlUmVjdGFuZ2xlKHRoaXMubGVmdCwgdGhpcy50b3AsIFQgd2lkdGgsIFQgaGVpZ2h0KQogICAgICA6IHRoaXMuX3dpZHRoID0gKHdpZHRoIDwgMCkgPyBfY2xhbXBUb1plcm88VD4od2lkdGgpIDogd2lkdGgsCiAgICAgICAgdGhpcy5faGVpZ2h0ID0gKGhlaWdodCA8IDApID8gX2NsYW1wVG9aZXJvPFQ+KGhlaWdodCkgOiBoZWlnaHQ7CgogIC8vLyBDcmVhdGUgYSBtdXRhYmxlIHJlY3RhbmdsZSBzcGFubmVkIGJ5IHRoZSBwb2ludHMgW2FdIGFuZCBbYl07CiAgLy8vCiAgLy8vIFRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIHBvaW50cwogIC8vLyB3aXRoIHgtY29vcmRpbmF0ZSBiZXR3ZWVuIGBhLnhgIGFuZCBgYi54YCwgYW5kCiAgLy8vIHdpdGggeS1jb29yZGluYXRlIGJldHdlZW4gYGEueWAgYW5kIGBiLnlgLCBib3RoIGluY2x1c2l2ZS4KICAvLy8KICAvLy8gSWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gYGEueGAgYW5kIGBiLnhgIGlzIG5vdCByZXByZXNlbnRhYmxlCiAgLy8vICh3aGljaCBjYW4gaGFwcGVuIGlmIG9uZSBvciBib3RoIGlzIGEgZG91YmxlKSwKICAvLy8gdGhlIGFjdHVhbCByaWdodCBlZGdlIG1pZ2h0IGJlIHNsaWdodGx5IG9mZiBmcm9tIGBtYXgoYS54LCBiLngpYC4KICAvLy8gU2ltaWxhciBmb3IgdGhlIHktY29vcmRpbmF0ZXMgYW5kIHRoZSBib3R0b20gZWRnZS4KICBmYWN0b3J5IE11dGFibGVSZWN0YW5nbGUuZnJvbVBvaW50cyhQb2ludDxUPiBhLCBQb2ludDxUPiBiKSB7CiAgICBUIGxlZnQgPSBtaW4oYS54LCBiLngpOwogICAgVCB3aWR0aCA9IG1heChhLngsIGIueCkgLSBsZWZ0OwogICAgVCB0b3AgPSBtaW4oYS55LCBiLnkpOwogICAgVCBoZWlnaHQgPSBtYXgoYS55LCBiLnkpIC0gdG9wOwogICAgcmV0dXJuIE11dGFibGVSZWN0YW5nbGU8VD4obGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKICB9CgogIFQgZ2V0IHdpZHRoID0+IF93aWR0aDsKCiAgLy8vIFNldHMgdGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuCiAgLy8vCiAgLy8vIFRoZSB3aWR0aCBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4KICAvLy8gSWYgYSBuZWdhdGl2ZSB3aWR0aCBpcyBzdXBwbGllZCwgaXQgaXMgY2xhbXBlZCB0byB6ZXJvLgogIC8vLwogIC8vLyBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGNoYW5nZSB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLAogIC8vLyBidXQgd2lsbCBub3QgY2hhbmdlIFtsZWZ0XS4KICBzZXQgd2lkdGgoVCB3aWR0aCkgewogICAgaWYgKHdpZHRoIDwgMCkgd2lkdGggPSBfY2xhbXBUb1plcm88VD4od2lkdGgpOwogICAgX3dpZHRoID0gd2lkdGg7CiAgfQoKICBUIGdldCBoZWlnaHQgPT4gX2hlaWdodDsKCiAgLy8vIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBUaGUgaGVpZ2h0IG11c3QgYmUgbm9uLW5lZ2F0aXZlLgogIC8vLyBJZiBhIG5lZ2F0aXZlIGhlaWdodCBpcyBzdXBwbGllZCwgaXQgaXMgY2xhbXBlZCB0byB6ZXJvLgogIC8vLwogIC8vLyBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGNoYW5nZSB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZSwKICAvLy8gYnV0IHdpbGwgbm90IGNoYW5nZSBbdG9wXS4KICBzZXQgaGVpZ2h0KFQgaGVpZ2h0KSB7CiAgICBpZiAoaGVpZ2h0IDwgMCkgaGVpZ2h0ID0gX2NsYW1wVG9aZXJvPFQ+KGhlaWdodCk7CiAgICBfaGVpZ2h0ID0gaGVpZ2h0OwogIH0KfQoKLy8vIENvbnZlcnRzIGEgbmVnYXRpdmUgW2ludF0gb3IgW2RvdWJsZV0gdG8gYSB6ZXJvLXZhbHVlIG9mIHRoZSBzYW1lIHR5cGUuCi8vLwovLy8gUmV0dXJucyBgMGAgaWYgdmFsdWUgaXMgaW50LCBgMC4wYCBpZiB2YWx1ZSBpcyBkb3VibGUuClQgX2NsYW1wVG9aZXJvPFQgZXh0ZW5kcyBudW0+KFQgdmFsdWUpIHsKICBhc3NlcnQodmFsdWUgPCAwKTsKICByZXR1cm4gLXZhbHVlICogMDsKfQqA+QBOTjwTAUsESksXBA5tBE5NRS8aASkOASgNASIPASMQASofASsgARY3BAElTC4cHBoeHgEtRQE3BlEeBkwRMiQ6ARQkPAEWNwgGEQQBMSowJiskBAFMMUdIASsoAUAEATgzIzgeNgQBRisgJRwjBAE5Rx5ASgIBTQ87EA8REgE2IgYoP0oGN0UGSyI6TzsBPAYoNUEGQzVIOTkcJBskMwQCAUoYQB4pBkwKASkGTQkMDQE+IgYoP0oGN0UGSyI7REgBRAYoNUEGQzVIOUAcJBskOgQBGQEnBiY+BkUiFzMUBAEbASgGJz8GRiEZNhYEAgFMBDspFRUCARhkYXJ0Om1hdGgvcmVjdGFuZ2xlLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL21pcnJvcnMvbWlycm9ycy5kYXJ0wADCly8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBtaXJyb3JzIGxpYnJhcnksIHdlIGFkb3B0IGEgbmFtaW5nCi8vIGNvbnZlbnRpb24gd2l0aCByZXNwZWN0IHRvIGdldHRlcnMgYW5kIHNldHRlcnMuICBTcGVjaWZpY2FsbHksIGZvcgovLyBzb21lIHZhcmlhYmxlIG9yIGZpZWxkLi4uCi8vCi8vICAgdmFyIG15RmllbGQ7Ci8vCi8vIC4uLnRoZSBnZXR0ZXIgaXMgbmFtZWQgJ215RmllbGQnIGFuZCB0aGUgc2V0dGVyIGlzIG5hbWVkCi8vICdteUZpZWxkPScuICBUaGlzIGFsbG93cyB1cyB0byBhc3NpZ24gdW5pcXVlIG5hbWVzIHRvIGdldHRlcnMgYW5kCi8vIHNldHRlcnMgZm9yIHRoZSBwdXJwb3NlcyBvZiBtZW1iZXIgbG9va3VwLgoKLyoqCiAqIEJhc2ljIHJlZmxlY3Rpb24gaW4gRGFydCwKICogd2l0aCBzdXBwb3J0IGZvciBpbnRyb3NwZWN0aW9uIGFuZCBkeW5hbWljIGludm9jYXRpb24uCiAqCiAqICpJbnRyb3NwZWN0aW9uKiBpcyB0aGF0IHN1YnNldCBvZiByZWZsZWN0aW9uIGJ5IHdoaWNoIGEgcnVubmluZwogKiBwcm9ncmFtIGNhbiBleGFtaW5lIGl0cyBvd24gc3RydWN0dXJlLiBGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbgogKiB0aGF0IHByaW50cyBvdXQgdGhlIG5hbWVzIG9mIGFsbCB0aGUgbWVtYmVycyBvZiBhbiBhcmJpdHJhcnkgb2JqZWN0LgogKgogKiAqRHluYW1pYyBpbnZvY2F0aW9uKiByZWZlcnMgdGhlIGFiaWxpdHkgdG8gZXZhbHVhdGUgY29kZSB0aGF0CiAqIGhhcyBub3QgYmVlbiBsaXRlcmFsbHkgc3BlY2lmaWVkIGF0IGNvbXBpbGUgdGltZSwgc3VjaCBhcyBjYWxsaW5nIGEgbWV0aG9kCiAqIHdob3NlIG5hbWUgaXMgcHJvdmlkZWQgYXMgYW4gYXJndW1lbnQgKGJlY2F1c2UgaXQgaXMgbG9va2VkIHVwCiAqIGluIGEgZGF0YWJhc2UsIG9yIHByb3ZpZGVkIGludGVyYWN0aXZlbHkgYnkgdGhlIHVzZXIpLgogKgogKiAjIyBIb3cgdG8gaW50ZXJwcmV0IHRoaXMgbGlicmFyeSdzIGRvY3VtZW50YXRpb24KICoKICogQXMgYSBydWxlLCB0aGUgbmFtZXMgb2YgRGFydCBkZWNsYXJhdGlvbnMgYXJlIHJlcHJlc2VudGVkIHVzaW5nCiAqIGluc3RhbmNlcyBvZiBjbGFzcyBbU3ltYm9sXS4gV2hlbmV2ZXIgdGhlIGRvYyBzcGVha3Mgb2YgYW4gb2JqZWN0ICpzKgogKiBvZiBjbGFzcyBbU3ltYm9sXSBkZW5vdGluZyBhIG5hbWUsIGl0IG1lYW5zIHRoZSBzdHJpbmcgdGhhdAogKiB3YXMgdXNlZCB0byBjb25zdHJ1Y3QgKnMqLgogKgogKiBUaGUgZG9jdW1lbnRhdGlvbiBmcmVxdWVudGx5IGFidXNlcyBub3RhdGlvbiB3aXRoCiAqIERhcnQgcHNldWRvLWNvZGUgc3VjaCBhcyBbOm8ueChhKTpdLCB3aGVyZQogKiBvIGFuZCBhIGFyZSBkZWZpbmVkIHRvIGJlIG9iamVjdHM7IHdoYXQgaXMgYWN0dWFsbHkgbWVhbnQgaW4gdGhlc2UKICogY2FzZXMgaXMgWzpvJy54KGEnKTpdIHdoZXJlICpvJyogYW5kICphJyogYXJlIERhcnQgdmFyaWFibGVzCiAqIGJvdW5kIHRvICpvKiBhbmQgKmEqIHJlc3BlY3RpdmVseS4gRnVydGhlcm1vcmUsICpvJyogYW5kICphJyoKICogYXJlIGFzc3VtZWQgdG8gYmUgZnJlc2ggdmFyaWFibGVzIChtZWFuaW5nIHRoYXQgdGhleSBhcmUKICogZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgdmFyaWFibGVzIGluIHRoZSBwcm9ncmFtKS4KICoKICogU29tZXRpbWVzIHRoZSBkb2N1bWVudGF0aW9uIHJlZmVycyB0byAqc2VyaWFsaXphYmxlKiBvYmplY3RzLgogKiBBbiBvYmplY3QgaXMgc2VyaWFsaXphYmxlIGFjcm9zcyBpc29sYXRlcyBpZiBhbmQgb25seSBpZiBpdCBpcyBhbiBpbnN0YW5jZSBvZgogKiBudW0sIGJvb2wsIFN0cmluZywgYSBsaXN0IG9mIG9iamVjdHMgdGhhdCBhcmUgc2VyaWFsaXphYmxlCiAqIGFjcm9zcyBpc29sYXRlcywgb3IgYSBtYXAgd2l0aCBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBhcmUgYWxsIHNlcmlhbGl6YWJsZSBhY3Jvc3MKICogaXNvbGF0ZXMuCiAqCiAqICMjIFN0YXR1czogVW5zdGFibGUKICoKICogVGhlIGRhcnQ6bWlycm9ycyBsaWJyYXJ5IGlzIHVuc3RhYmxlIGFuZCBpdHMgQVBJIG1pZ2h0IGNoYW5nZSBzbGlnaHRseSBhcyBhCiAqIHJlc3VsdCBvZiB1c2VyIGZlZWRiYWNrLiBUaGlzIGxpYnJhcnkgaXMgcGxhdGZvcm0gZGVwZW5kZW50IGFuZCB0aGVyZWZvcmUgaXQKICogaGFzIGltcGxlbWVudGF0aW9ucyBmb3IgYm90aCBkYXJ0MmpzIGFuZCB0aGUgRGFydCBWTS4gQm90aCBhcmUgdW5kZXIKICogZGV2ZWxvcG1lbnQgYW5kIG1heSBub3Qgc3VwcG9ydCBhbGwgb3BlcmF0aW9ucyB5ZXQuCiAqCiAqIHtAY2F0ZWdvcnkgVk19CiAqLwpsaWJyYXJ5IGRhcnQubWlycm9yczsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgovKioKICogQSBbTWlycm9yU3lzdGVtXSBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdXNlZCB0byByZWZsZWN0IG9uIGEgc2V0IG9mCiAqIGFzc29jaWF0ZWQgbGlicmFyaWVzLgogKgogKiBBdCBydW50aW1lIGVhY2ggcnVubmluZyBpc29sYXRlIGhhcyBhIGRpc3RpbmN0IFtNaXJyb3JTeXN0ZW1dLgogKgogKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBbTWlycm9yU3lzdGVtXSB3aGljaCByZXByZXNlbnRzIGEgc2V0CiAqIG9mIGxpYnJhcmllcyB3aGljaCBhcmUgbm90IHJ1bm5pbmcgLS0gcGVyaGFwcyBhdCBjb21waWxlLXRpbWUuICBJbgogKiB0aGlzIGNhc2UsIGFsbCBhdmFpbGFibGUgcmVmbGVjdGl2ZSBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlCiAqIHN1cHBvcnRlZCwgYnV0IHJ1bnRpbWUgZnVuY3Rpb25hbGl0eSAoc3VjaCBhcyBpbnZva2luZyBhIGZ1bmN0aW9uCiAqIG9yIGluc3BlY3RpbmcgdGhlIGNvbnRlbnRzIG9mIGEgdmFyaWFibGUpIHdvdWxkIGZhaWwgZHluYW1pY2FsbHkuCiAqLwphYnN0cmFjdCBjbGFzcyBNaXJyb3JTeXN0ZW0gewogIC8qKgogICAqIEFsbCBsaWJyYXJpZXMga25vd24gdG8gdGhlIG1pcnJvciBzeXN0ZW0sIGluZGV4ZWQgYnkgdGhlaXIgVVJJLgogICAqCiAgICogUmV0dXJucyBhbiB1bm1vZGlmaWFibGUgbWFwIG9mIHRoZSBsaWJyYXJpZXMgd2l0aCBbTGlicmFyeU1pcnJvci51cmldIGFzCiAgICoga2V5cy4KICAgKgogICAqIEZvciBhIHJ1bnRpbWUgbWlycm9yIHN5c3RlbSwgb25seSBsaWJyYXJpZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBsb2FkZWQKICAgKiBhcmUgaW5jbHVkZWQsIGFuZCByZXBlYXRlZCBjYWxscyBvZiB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIGRpZmZlcmVudCBtYXBzCiAgICogYXMgbGlicmFyaWVzIGFyZSBsb2FkZWQuCiAgICovCiAgTWFwPFVyaSwgTGlicmFyeU1pcnJvcj4gZ2V0IGxpYnJhcmllczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgdW5pcXVlIGxpYnJhcnkgbmFtZWQgW2xpYnJhcnlOYW1lXSBpZiBpdCBleGlzdHMuCiAgICoKICAgKiBJZiBubyB1bmlxdWUgbGlicmFyeSBleGlzdHMsIGFuIGVycm9yIGlzIHRocm93bi4KICAgKi8KICBleHRlcm5hbCBMaWJyYXJ5TWlycm9yIGZpbmRMaWJyYXJ5KFN5bWJvbCBsaWJyYXJ5TmFtZSk7CgogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBpc29sYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFtNaXJyb3JTeXN0ZW1dLgogICAqCiAgICogVGhpcyBtYXkgYmUgbnVsbCBpZiB0aGlzIG1pcnJvciBzeXN0ZW0gaXMgbm90IHJ1bm5pbmcuCiAgICovCiAgSXNvbGF0ZU1pcnJvciBnZXQgaXNvbGF0ZTsKCiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIFs6ZHluYW1pYzpdIHR5cGUuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgZHluYW1pY1R5cGU7CgogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBbOnZvaWQ6XSB0eXBlLgogICAqLwogIFR5cGVNaXJyb3IgZ2V0IHZvaWRUeXBlOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIFtzeW1ib2xdLgogICAqCiAgICogVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgICoKICAgKiBVc2luZyB0aGlzIG1ldGhvZCBtYXkgcmVzdWx0IGluIGxhcmdlciBvdXRwdXQuICBJZiBwb3NzaWJsZSwgdXNlCiAgICogW01pcnJvcnNVc2VkXSB0byBzcGVjaWZ5IHdoaWNoIHN5bWJvbHMgbXVzdCBiZSByZXRhaW5lZCBpbiBjbGVhciB0ZXh0LgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZShTeW1ib2wgc3ltYm9sKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHN5bWJvbCBmb3IgW25hbWVdLgogICAqCiAgICogSWYgW2xpYnJhcnldIGlzIG5vdCBhIFtMaWJyYXJ5TWlycm9yXSBvciBpZiBbbmFtZV0gaXMgYSBwcml2YXRlIGlkZW50aWZpZXIKICAgKiBhbmQgW2xpYnJhcnldIGlzIGBudWxsYCwgdGhyb3dzIGFuIFtBcmd1bWVudEVycm9yXS4gSWYgW25hbWVdIGlzIGEgcHJpdmF0ZQogICAqIGlkZW50aWZpZXIsIHRoZSBzeW1ib2wgcmV0dXJuZWQgaXMgd2l0aCByZXNwZWN0IHRvIFtsaWJyYXJ5XS4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogVXNpbmcgdGhpcyBtZXRob2QgbWF5IHJlc3VsdCBpbiBsYXJnZXIgb3V0cHV0LiAgSWYgcG9zc2libGUsIHVzZQogICAqIHRoZSBjb25zdCBjb25zdHJ1Y3RvciBvZiBbU3ltYm9sXSBvciBzeW1ib2wgbGl0ZXJhbHMuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFN5bWJvbCBnZXRTeW1ib2woU3RyaW5nIG5hbWUsIFtMaWJyYXJ5TWlycm9yIGxpYnJhcnldKTsKfQoKLyoqCiAqIFJldHVybnMgYSBbTWlycm9yU3lzdGVtXSBmb3IgdGhlIGN1cnJlbnQgaXNvbGF0ZS4KICovCmV4dGVybmFsIE1pcnJvclN5c3RlbSBjdXJyZW50TWlycm9yU3lzdGVtKCk7CgovKioKICogUmVmbGVjdHMgYW4gaW5zdGFuY2UuCiAqCiAqIFJldHVybnMgYW4gW0luc3RhbmNlTWlycm9yXSByZWZsZWN0aW5nIFtyZWZsZWN0ZWVdLiBJZiBbcmVmbGVjdGVlXSBpcyBhCiAqIGZ1bmN0aW9uIG9yIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYSBbOmNhbGw6XSBtZXRob2QsIHRoZSByZXR1cm5lZAogKiBpbnN0YW5jZSBtaXJyb3Igd2lsbCBiZSBhIFtDbG9zdXJlTWlycm9yXS4KICoKICogTm90ZSB0aGF0IHNpbmNlIG9uZSBjYW5ub3Qgb2J0YWluIGFuIG9iamVjdCBmcm9tIGFub3RoZXIgaXNvbGF0ZSwgdGhpcwogKiBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvIG9idGFpbiAgbWlycm9ycyBvbiBvYmplY3RzIG9mIHRoZSBjdXJyZW50CiAqIGlzb2xhdGUuCiAqLwpleHRlcm5hbCBJbnN0YW5jZU1pcnJvciByZWZsZWN0KE9iamVjdCByZWZsZWN0ZWUpOwoKLyoqCiAqIFJlZmxlY3RzIGEgY2xhc3MgZGVjbGFyYXRpb24uCiAqCiAqIExldCAqQyogYmUgdGhlIG9yaWdpbmFsIGNsYXNzIGRlY2xhcmF0aW9uIG9mIHRoZSBjbGFzcyByZXByZXNlbnRlZCBieSBba2V5XS4KICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgW0NsYXNzTWlycm9yXSByZWZsZWN0aW5nICpDKi4KICoKICogSWYgW2tleV0gaXMgbm90IGFuIGluc3RhbmNlIG9mIFtUeXBlXSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHRocm93cyBhbgogKiBbQXJndW1lbnRFcnJvcl0uIElmIFtrZXldIGlzIHRoZSBUeXBlIGZvciBkeW5hbWljIG9yIGEgZnVuY3Rpb24gdHlwZWRlZiwKICogdGhyb3dzIGFuIFtBcmd1bWVudEVycm9yXS4KICoKICogTm90ZSB0aGF0IHNpbmNlIG9uZSBjYW5ub3Qgb2J0YWluIGEgW1R5cGVdIG9iamVjdCBmcm9tIGFub3RoZXIgaXNvbGF0ZSwgdGhpcwogKiBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvIG9idGFpbiBjbGFzcyBtaXJyb3JzIG9uIGNsYXNzZXMgb2YgdGhlIGN1cnJlbnQKICogaXNvbGF0ZS4KICovCmV4dGVybmFsIENsYXNzTWlycm9yIHJlZmxlY3RDbGFzcyhUeXBlIGtleSk7CgovKioKICogUmVmbGVjdHMgdGhlIHR5cGUgcmVwcmVzZW50ZWQgYnkgW2tleV0uCiAqCiAqIElmIFtrZXldIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBbVHlwZV0sIHRoZW4gdGhpcyBmdW5jdGlvbiB0aHJvd3MgYW4KICogW0FyZ3VtZW50RXJyb3JdLgogKgogKiBPcHRpb25hbGx5IHRha2VzIGEgbGlzdCBvZiBbdHlwZUFyZ3VtZW50c10gZm9yIGdlbmVyaWMgY2xhc3Nlcy4gSWYgdGhlIGxpc3QKICogaXMgcHJvdmlkZWQsIHRoZW4gdGhlIFtrZXldIG11c3QgYmUgYSBnZW5lcmljIGNsYXNzIHR5cGUsIGFuZCB0aGUgbnVtYmVyIG9mCiAqIHRoZSBwcm92aWRlZCB0eXBlIGFyZ3VtZW50cyBtdXN0IGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgdHlwZSB2YXJpYWJsZXMKICogZGVjbGFyZWQgYnkgdGhlIGNsYXNzLgogKgogKiBOb3RlIHRoYXQgc2luY2Ugb25lIGNhbm5vdCBvYnRhaW4gYSBbVHlwZV0gb2JqZWN0IGZyb20gYW5vdGhlciBpc29sYXRlLCB0aGlzCiAqIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gb2J0YWluIHR5cGUgbWlycm9ycyBvbiB0eXBlcyBvZiB0aGUgY3VycmVudAogKiBpc29sYXRlLgogKi8KZXh0ZXJuYWwgVHlwZU1pcnJvciByZWZsZWN0VHlwZShUeXBlIGtleSwgW0xpc3Q8VHlwZT4gdHlwZUFyZ3VtZW50c10pOwoKLyoqCiAqIEEgW01pcnJvcl0gcmVmbGVjdHMgc29tZSBEYXJ0IGxhbmd1YWdlIGVudGl0eS4KICoKICogRXZlcnkgW01pcnJvcl0gb3JpZ2luYXRlcyBmcm9tIHNvbWUgW01pcnJvclN5c3RlbV0uCiAqLwphYnN0cmFjdCBjbGFzcyBNaXJyb3Ige30KCi8qKgogKiBBbiBbSXNvbGF0ZU1pcnJvcl0gcmVmbGVjdHMgYW4gaXNvbGF0ZS4KICovCmFic3RyYWN0IGNsYXNzIElzb2xhdGVNaXJyb3IgaW1wbGVtZW50cyBNaXJyb3IgewogIC8qKgogICAqIEEgdW5pcXVlIG5hbWUgdXNlZCB0byByZWZlciB0byB0aGUgaXNvbGF0ZSBpbiBkZWJ1Z2dpbmcgbWVzc2FnZXMuCiAgICovCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWU7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBtaXJyb3IgcmVmbGVjdHMgdGhlIGN1cnJlbnRseSBydW5uaW5nIGlzb2xhdGUuCiAgICovCiAgYm9vbCBnZXQgaXNDdXJyZW50OwoKICAvKioKICAgKiBUaGUgcm9vdCBsaWJyYXJ5IGZvciB0aGUgcmVmbGVjdGVkIGlzb2xhdGUuCiAgICovCiAgTGlicmFyeU1pcnJvciBnZXQgcm9vdExpYnJhcnk7CgogIC8qKgogICAqIFdoZXRoZXIgW290aGVyXSBpcyBhbiBbSXNvbGF0ZU1pcnJvcl0gb24gdGhlIHNhbWUgaXNvbGF0ZSBhcyB0aGlzIG1pcnJvci4KICAgKgogICAqIFRoZSBlcXVhbGl0eSBob2xkcyBpZiBhbmQgb25seSBpZgogICAqCiAgICogMS4gW290aGVyXSBpcyBhIG1pcnJvciBvZiB0aGUgc2FtZSBraW5kLCBhbmQKICAgKiAyLiB0aGUgaXNvbGF0ZSBiZWluZyByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IgaXMgdGhlIHNhbWUgaXNvbGF0ZSBiZWluZwogICAqICAgIHJlZmxlY3RlZCBieSBbb3RoZXJdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvKioKICAgKiBMb2FkcyB0aGUgbGlicmFyeSBhdCB0aGUgZ2l2ZW4gdXJpIGludG8gdGhpcyBpc29sYXRlLgogICAqCiAgICogV0FSTklORzogWW91IGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZSBJc29sYXRlLnNwYXduVXJpIGluc3RlYWQgd2hlbgogICAqIHBvc3NpYmxlLiBJc29sYXRlTWlycm9yLmxvYWRVcmkgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHN5bmNocm9ub3VzCiAgICogY29tbXVuaWNhdGlvbiBvciBzaGFyZWQgc3RhdGUgd2l0aCBkeW5hbWljYWxseSBsb2FkZWQgY29kZSBpcyBuZWVkZWQuCiAgICoKICAgKiBJZiBhIGxpYnJhcnkgd2l0aCB0aGUgc2FtZSBjYW5vbmljYWxpemVkIHVyaSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCwKICAgKiB0aGUgZXhpc3RpbmcgbGlicmFyeSB3aWxsIGJlIHJldHVybmVkLiAoVGhlIGlzb2xhdGUgd2lsbCBub3QgbG9hZCBhIG5ldwogICAqIGNvcHkgb2YgdGhlIGxpYnJhcnkuKQogICAqCiAgICogVGhpcyBiZWhhdmlvciBpcyBzaW1pbGFyIHRvIHRoZSBiZWhhdmlvciBvZiBhbiBpbXBvcnQgc3RhdGVtZW50IHRoYXQKICAgKiBhcHBlYXJzIGluIHRoZSByb290IGxpYnJhcnksIGV4Y2VwdCB0aGF0IHRoZSBpbXBvcnQgc2NvcGUgb2YgdGhlIHJvb3QKICAgKiBsaWJyYXJ5IGlzIG5vdCBjaGFuZ2VkLgogICAqLwogIEZ1dHVyZTxMaWJyYXJ5TWlycm9yPiBsb2FkVXJpKFVyaSB1cmkpOwp9CgovKioKICogQSBbRGVjbGFyYXRpb25NaXJyb3JdIHJlZmxlY3RzIHNvbWUgZW50aXR5IGRlY2xhcmVkIGluIGEgRGFydCBwcm9ncmFtLgogKi8KYWJzdHJhY3QgY2xhc3MgRGVjbGFyYXRpb25NaXJyb3IgaW1wbGVtZW50cyBNaXJyb3IgewogIC8qKgogICAqIFRoZSBzaW1wbGUgbmFtZSBmb3IgdGhpcyBEYXJ0IGxhbmd1YWdlIGVudGl0eS4KICAgKgogICAqIFRoZSBzaW1wbGUgbmFtZSBpcyBpbiBtb3N0IGNhc2VzIHRoZSBpZGVudGlmaWVyIG5hbWUgb2YgdGhlIGVudGl0eSwKICAgKiBzdWNoIGFzICdteU1ldGhvZCcgZm9yIGEgbWV0aG9kLCBbOnZvaWQgbXlNZXRob2QoKSB7Li4ufTpdIG9yICdteWxpYnJhcnknCiAgICogZm9yIGEgWzpsaWJyYXJ5ICdteWxpYnJhcnknOzpdIGRlY2xhcmF0aW9uLgogICAqLwogIFN5bWJvbCBnZXQgc2ltcGxlTmFtZTsKCiAgLyoqCiAgICogVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGZvciB0aGlzIERhcnQgbGFuZ3VhZ2UgZW50aXR5LgogICAqCiAgICogVGhpcyBuYW1lIGlzIHF1YWxpZmllZCBieSB0aGUgbmFtZSBvZiB0aGUgb3duZXIuIEZvciBpbnN0YW5jZSwKICAgKiB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgYSBtZXRob2QgJ21ldGhvZCcgaW4gY2xhc3MgJ0NsYXNzJyBpbgogICAqIGxpYnJhcnkgJ2xpYnJhcnknIGlzICdsaWJyYXJ5LkNsYXNzLm1ldGhvZCcuCiAgICoKICAgKiBSZXR1cm5zIGEgW1N5bWJvbF0gY29uc3RydWN0ZWQgZnJvbSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlCiAgICogZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKiBMZXQgKm8qIGJlIHRoZSBbb3duZXJdIG9mIHRoaXMgbWlycm9yLCBsZXQgKnIqIGJlIHRoZSByZWZsZWN0ZWUgb2YKICAgKiB0aGlzIG1pcnJvciwgbGV0ICpwKiBiZSB0aGUgZnVsbHkgcXVhbGlmaWVkCiAgICogbmFtZSBvZiB0aGUgcmVmbGVjdGVlIG9mICpvKiwgYW5kIGxldCAqcyogYmUgdGhlIHNpbXBsZSBuYW1lIG9mICpyKgogICAqIGNvbXB1dGVkIGJ5IFtzaW1wbGVOYW1lXS4KICAgKiBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgKnIqIGlzIHRoZQogICAqIGNvbmNhdGVuYXRpb24gb2YgKnAqLCAnLicsIGFuZCAqcyouCiAgICoKICAgKiBCZWNhdXNlIGFuIGlzb2xhdGUgY2FuIGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBsaWJyYXJ5IHdpdGggdGhlIHNhbWUgbmFtZSAoYXQKICAgKiBkaWZmZXJlbnQgVVJJcyksIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgZG9lcyBub3QgdW5pcXVlbHkgaWRlbnRpZnkgYW55CiAgICogbGFuZ3VhZ2UgZW50aXR5LgogICAqLwogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZTsKCiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIG93bmVyIG9mIHRoaXMgRGFydCBsYW5ndWFnZSBlbnRpdHkuCiAgICoKICAgKiBUaGUgb3duZXIgaXMgdGhlIGRlY2xhcmF0aW9uIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHRoZSByZWZsZWN0ZWU6CiAgICoKICAgKiAqIEZvciBhIGxpYnJhcnksIHRoZSBvd25lciBpcyBbOm51bGw6XS4KICAgKiAqIEZvciBhIGNsYXNzIGRlY2xhcmF0aW9uLCB0eXBlZGVmIG9yIHRvcCBsZXZlbCBmdW5jdGlvbiBvciB2YXJpYWJsZSwgdGhlCiAgICogICBvd25lciBpcyB0aGUgZW5jbG9zaW5nIGxpYnJhcnkuCiAgICogKiBGb3IgYSBtaXhpbiBhcHBsaWNhdGlvbiBgUyB3aXRoIE1gLCB0aGUgb3duZXIgaXMgdGhlIG93bmVyIG9mIGBNYC4KICAgKiAqIEZvciBhIGNvbnN0cnVjdG9yLCB0aGUgb3duZXIgaXMgdGhlIGltbWVkaWF0ZWx5IGVuY2xvc2luZyBjbGFzcy4KICAgKiAqIEZvciBhIG1ldGhvZCwgaW5zdGFuY2UgdmFyaWFibGUgb3IgYSBzdGF0aWMgdmFyaWFibGUsIHRoZSBvd25lciBpcyB0aGUKICAgKiAgIGltbWVkaWF0ZWx5IGVuY2xvc2luZyBjbGFzcywgdW5sZXNzIHRoZSBjbGFzcyBpcyBhIG1peGluIGFwcGxpY2F0aW9uCiAgICogICBgUyB3aXRoIE1gLCBpbiB3aGljaCBjYXNlIHRoZSBvd25lciBpcyBgTWAuIE5vdGUgdGhhdCBgTWAgbWF5IGJlIGFuCiAgICogICBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYy4KICAgKiAqIEZvciBhIHBhcmFtZXRlciwgbG9jYWwgdmFyaWFibGUgb3IgbG9jYWwgZnVuY3Rpb24gdGhlIG93bmVyIGlzIHRoZQogICAqICAgaW1tZWRpYXRlbHkgZW5jbG9zaW5nIGZ1bmN0aW9uLgogICAqLwogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lcjsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIGRlY2xhcmF0aW9uIGlzIGxpYnJhcnkgcHJpdmF0ZS4KICAgKgogICAqIEFsd2F5cyByZXR1cm5zIGBmYWxzZWAgZm9yIGEgbGlicmFyeSBkZWNsYXJhdGlvbiwKICAgKiBvdGhlcndpc2UgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRlY2xhcmF0aW9uJ3MgbmFtZSBzdGFydHMgd2l0aCBhbgogICAqIHVuZGVyc2NvcmUgY2hhcmFjdGVyIChgX2ApLCBhbmQgYGZhbHNlYCBpZiBpdCBkb2Vzbid0LgogICAqLwogIGJvb2wgZ2V0IGlzUHJpdmF0ZTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIGRlY2xhcmF0aW9uIGlzIHRvcC1sZXZlbC4KICAgKgogICAqIEEgZGVjbGFyYXRpb24gaXMgY29uc2lkZXJlZCB0b3AtbGV2ZWwgaWYgaXRzIFtvd25lcl0gaXMgYSBbTGlicmFyeU1pcnJvcl0uCiAgICovCiAgYm9vbCBnZXQgaXNUb3BMZXZlbDsKCiAgLyoqCiAgICogVGhlIHNvdXJjZSBsb2NhdGlvbiBvZiB0aGlzIERhcnQgbGFuZ3VhZ2UgZW50aXR5LCBvciBbOm51bGw6XSBpZiB0aGUKICAgKiBlbnRpdHkgaXMgc3ludGhldGljLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIHZhcmlhYmxlLCB0aGUgcmV0dXJuZWQgbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uCiAgICogb2YgdGhlIHZhcmlhYmxlIG5hbWUgYXQgaXRzIHBvaW50IG9mIGRlY2xhcmF0aW9uLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIGxpYnJhcnksIGNsYXNzLCB0eXBlZGVmLCBmdW5jdGlvbiBvciB0eXBlIHZhcmlhYmxlCiAgICogd2l0aCBhc3NvY2lhdGVkIG1ldGFkYXRhLCB0aGUgcmV0dXJuZWQgbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZQogICAqIGZpcnN0IG1ldGFkYXRhIGRlY2xhcmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVmbGVjdGVlLgogICAqCiAgICogT3RoZXJ3aXNlOgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIGxpYnJhcnksIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcyB0aGUgcG9zaXRpb24gb2YKICAgKiB0aGUga2V5d29yZCAnbGlicmFyeScgYXQgdGhlIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLCBpZiB0aGUKICAgKiByZWZsZWN0ZWUgaXMgYSBuYW1lZCBsaWJyYXJ5LCBvciB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdCBsaW5lIGluCiAgICogdGhlIGNvbXBpbGF0aW9uIHVuaXQgZGVmaW5pbmcgdGhlIHJlZmxlY3RlZSBpZiB0aGUgcmVmbGVjdGVlIGlzIGFub255bW91cy4KICAgKgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgYW4gYWJzdHJhY3QgY2xhc3MsIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcyB0aGUKICAgKiBwb3NpdGlvbiBvZiB0aGUga2V5d29yZCAnYWJzdHJhY3QnIGF0IHRoZSByZWZsZWN0ZWUncyBwb2ludCBvZiBkZWNsYXJhdGlvbi4KICAgKiBPdGhlcndpc2UsIGlmIHRoZSByZWZsZWN0ZWUgaXMgYSBjbGFzcywgdGhlIHJldHVybmVkIGxvY2F0aW9uIGdpdmVzIHRoZQogICAqIHBvc2l0aW9uIG9mIHRoZSBrZXl3b3JkICdjbGFzcycgYXQgdGhlIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIHR5cGVkZWYgdGhlIHJldHVybmVkIGxvY2F0aW9uIGdpdmVzIHRoZSBwb3NpdGlvbiBvZgogICAqIHRoZSBvZiB0aGUga2V5d29yZCAndHlwZWRlZicgYXQgdGhlIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIGZ1bmN0aW9uIHdpdGggYSBkZWNsYXJlZCByZXR1cm4gdHlwZSwgdGhlIHJldHVybmVkCiAgICogbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmdW5jdGlvbidzIHJldHVybiB0eXBlIGF0IHRoZQogICAqIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLiBPdGhlcndpc2UuIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcwogICAqIHRoZSBwb3NpdGlvbiBvZiB0aGUgZnVuY3Rpb24ncyBuYW1lIGF0IHRoZSByZWZsZWN0ZWUncyBwb2ludCBvZgogICAqIGRlY2xhcmF0aW9uLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgb3B0aW9uYWwgYW5kIG1heSB0aHJvdyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY2xhcmF0aW9uLgogICAqCiAgICogTGV0ICpEKiBiZSB0aGUgZGVjbGFyYXRpb24gdGhpcyBtaXJyb3IgcmVmbGVjdHMuCiAgICogSWYgKkQqIGlzIGRlY29yYXRlZCB3aXRoIGFubm90YXRpb25zICpBMSwgLi4uLCBBbioKICAgKiB3aGVyZSAqbiA+IDAqLCB0aGVuIGZvciBlYWNoIGFubm90YXRpb24gKkFpKiBhc3NvY2lhdGVkCiAgICogd2l0aCAqRCwgMSA8PSBpIDw9IG4qLCBsZXQgKmNpKiBiZSB0aGUgY29uc3RhbnQgb2JqZWN0CiAgICogc3BlY2lmaWVkIGJ5ICpBaSouIFRoZW4gdGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgd2hvc2UKICAgKiBtZW1iZXJzIGFyZSBpbnN0YW5jZSBtaXJyb3JzIG9uICpjMSwgLi4uLCBjbiouCiAgICogSWYgbm8gYW5ub3RhdGlvbnMgYXJlIGFzc29jaWF0ZWQgd2l0aCAqRCosIHRoZW4KICAgKiBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLgogICAqCiAgICogSWYgZXZhbHVhdGluZyBhbnkgb2YgKmMxLCAuLi4sIGNuKiB3b3VsZCBjYXVzZSBhCiAgICogY29tcGlsYXRpb24gZXJyb3IKICAgKiB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIGlmIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IKICAgKiBoYWQgYmVlbiBlbmNvdW50ZXJlZC4KICAgKi8KICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGE7Cn0KCi8qKgogKiBBbiBbT2JqZWN0TWlycm9yXSBpcyBhIGNvbW1vbiBzdXBlcmludGVyZmFjZSBvZiBbSW5zdGFuY2VNaXJyb3JdLAogKiBbQ2xhc3NNaXJyb3JdLCBhbmQgW0xpYnJhcnlNaXJyb3JdIHRoYXQgcmVwcmVzZW50cyB0aGVpciBzaGFyZWQKICogZnVuY3Rpb25hbGl0eS4KICoKICogRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgbWlycm9ycyBsaWJyYXJ5LCB0aGVzZSB0eXBlcyBhcmUgYWxsCiAqIG9iamVjdC1saWtlLCBpbiB0aGF0IHRoZXkgc3VwcG9ydCBtZXRob2QgaW52b2NhdGlvbiBhbmQgZmllbGQKICogYWNjZXNzLiAgUmVhbCBEYXJ0IG9iamVjdHMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBbSW5zdGFuY2VNaXJyb3JdCiAqIHR5cGUuCiAqCiAqIFNlZSBbSW5zdGFuY2VNaXJyb3JdLCBbQ2xhc3NNaXJyb3JdLCBhbmQgW0xpYnJhcnlNaXJyb3JdLgogKi8KYWJzdHJhY3QgY2xhc3MgT2JqZWN0TWlycm9yIGltcGxlbWVudHMgTWlycm9yIHsKICAvKioKICAgKiBJbnZva2VzIHRoZSBuYW1lZCBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIG1pcnJvciBvbiB0aGUgcmVzdWx0LgogICAqCiAgICogTGV0ICpvKiBiZSB0aGUgb2JqZWN0IHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciwgbGV0ICpmKiBiZSB0aGUgc2ltcGxlIG5hbWUKICAgKiBvZiB0aGUgbWVtYmVyIGRlbm90ZWQgYnkgW21lbWJlck5hbWVdLCBsZXQgKmExLCAuLi4sIGFuKiBiZSB0aGUgZWxlbWVudHMKICAgKiBvZiBbcG9zaXRpb25hbEFyZ3VtZW50c10sIGxldCAqazEsIC4uLiwga20qIGJlIHRoZSBpZGVudGlmaWVycyBkZW5vdGVkIGJ5CiAgICogdGhlIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy5rZXlzXSwgYW5kIGxldCAqdjEsIC4uLiwgdm0qIGJlIHRoZQogICAqIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy52YWx1ZXNdLiBUaGVuIHRoaXMgbWV0aG9kIHdpbGwgcGVyZm9ybSB0aGUKICAgKiBtZXRob2QgaW52b2NhdGlvbiAqby5mKGExLCAuLi4sIGFuLCBrMTogdjEsIC4uLiwga206IHZtKSogaW4gYSBzY29wZSB0aGF0CiAgICogaGFzIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mICpvKiAoaWYgKm8qIGlzIGEgY2xhc3Mgb3IgbGlicmFyeSkgb3IKICAgKiB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mIHRoZSBjbGFzcyBvZiAqbyogKG90aGVyd2lzZSkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiByZXR1cm5zIGEgcmVzdWx0ICpyKiwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mCiAgICogY2FsbGluZyBbcmVmbGVjdF1cKCpyKlwpLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gY2F1c2VzIGEgY29tcGlsYXRpb24gZXJyb3IgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZgogICAqIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdCBjYXRjaCksIHRoaXMKICAgKiBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICAvKgogICAqIFRPRE8odHVybmlkZ2UpOiBIYW5kbGUgYW1iaWd1b3VzIG5hbWVzLgogICAqIFRPRE8odHVybmlkZ2UpOiBIYW5kbGUgb3B0aW9uYWwgJiBuYW1lZCBhcmd1bWVudHMuCiAgICovCiAgSW5zdGFuY2VNaXJyb3IgaW52b2tlKFN5bWJvbCBtZW1iZXJOYW1lLCBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pOwoKICAvKioKICAgKiBJbnZva2VzIGEgZ2V0dGVyIGFuZCByZXR1cm5zIGEgbWlycm9yIG9uIHRoZSByZXN1bHQuCiAgICoKICAgKiBUaGUgZ2V0dGVyIGNhbiBiZSB0aGUgaW1wbGljaXQgZ2V0dGVyIGZvciBhIGZpZWxkIG9yIGEgdXNlci1kZWZpbmVkIGdldHRlcgogICAqIG1ldGhvZC4KICAgKgogICAqIExldCAqbyogYmUgdGhlIG9iamVjdCByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IsCiAgICogbGV0ICpmKiBiZSB0aGUgc2ltcGxlIG5hbWUgb2YgdGhlIGdldHRlciBkZW5vdGVkIGJ5IFtmaWVsZE5hbWVdLgogICAqCiAgICogVGhlbiB0aGlzIG1ldGhvZCB3aWxsIHBlcmZvcm0gdGhlIGdldHRlciBpbnZvY2F0aW9uICpvLmYqIGluIGEgc2NvcGUgdGhhdAogICAqIGhhcyBhY2Nlc3MgdG8gdGhlIHByaXZhdGUgbWVtYmVycyBvZiAqbyogKGlmICpvKiBpcyBhIGNsYXNzIG9yIGxpYnJhcnkpIG9yCiAgICogdGhlIHByaXZhdGUgbWVtYmVycyBvZiB0aGUgY2xhc3Mgb2YgKm8qIChvdGhlcndpc2UpLgogICAqCiAgICogSWYgdGhpcyBtaXJyb3IgaXMgYW4gW0luc3RhbmNlTWlycm9yXSwgYW5kIFtmaWVsZE5hbWVdIGRlbm90ZXMgYW4gaW5zdGFuY2UKICAgKiBtZXRob2Qgb24gaXRzIHJlZmxlY3RlZSwgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBpcyBhbiBpbnN0YW5jZQogICAqIG1pcnJvciBvbiBhIGNsb3N1cmUgY29ycmVzcG9uZGluZyB0byB0aGF0IG1ldGhvZC4KICAgKgogICAqIElmIHRoaXMgbWlycm9yIGlzIGEgW0xpYnJhcnlNaXJyb3JdLCBhbmQgW2ZpZWxkTmFtZV0gZGVub3RlcyBhIHRvcC1sZXZlbAogICAqIG1ldGhvZCBpbiB0aGUgY29ycmVzcG9uZGluZyBsaWJyYXJ5LCB0aGUgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIGlzIGFuCiAgICogaW5zdGFuY2UgbWlycm9yIG9uIGEgY2xvc3VyZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgbWV0aG9kLgogICAqCiAgICogSWYgdGhpcyBtaXJyb3IgaXMgYSBbQ2xhc3NNaXJyb3JdLCBhbmQgW2ZpZWxkTmFtZV0gZGVub3RlcyBhIHN0YXRpYyBtZXRob2QKICAgKiBpbiB0aGUgY29ycmVzcG9uZGluZyBjbGFzcywgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBpcyBhbiBpbnN0YW5jZQogICAqIG1pcnJvciBvbiBhIGNsb3N1cmUgY29ycmVzcG9uZGluZyB0byB0aGF0IG1ldGhvZC4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIHJldHVybnMgYSByZXN1bHQgKnIqLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKICAgKiBjYWxsaW5nIFtyZWZsZWN0XVwoKnIqXCkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiBjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvciwgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZgogICAqIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdCBjYXRjaCksIHRoaXMKICAgKiBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICAvLyBUT0RPKGFoZSk6IFJlbW92ZSBzdHVmZiBhYm91dCBzY29wZSBhbmQgcHJpdmF0ZSBtZW1iZXJzLiBbZmllbGROYW1lXSBpcyBhCiAgLy8gY2FwYWJpbGl0eSBnaXZpbmcgYWNjZXNzIHRvIHByaXZhdGUgbWVtYmVycy4KICBJbnN0YW5jZU1pcnJvciBnZXRGaWVsZChTeW1ib2wgZmllbGROYW1lKTsKCiAgLyoqCiAgICogSW52b2tlcyBhIHNldHRlciBhbmQgcmV0dXJucyBhIG1pcnJvciBvbiB0aGUgcmVzdWx0LgogICAqCiAgICogVGhlIHNldHRlciBtYXkgYmUgZWl0aGVyIHRoZSBpbXBsaWNpdCBzZXR0ZXIgZm9yIGEgbm9uLWZpbmFsIGZpZWxkIG9yIGEKICAgKiB1c2VyLWRlZmluZWQgc2V0dGVyIG1ldGhvZC4KICAgKgogICAqIExldCAqbyogYmUgdGhlIG9iamVjdCByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IsCiAgICogbGV0ICpmKiBiZSB0aGUgc2ltcGxlIG5hbWUgb2YgdGhlIGdldHRlciBkZW5vdGVkIGJ5IFtmaWVsZE5hbWVdLAogICAqIGFuZCBsZXQgKmEqIGJlIHRoZSBvYmplY3QgYm91bmQgdG8gW3ZhbHVlXS4KICAgKgogICAqIFRoZW4gdGhpcyBtZXRob2Qgd2lsbCBwZXJmb3JtIHRoZSBzZXR0ZXIgaW52b2NhdGlvbiAqby5mID0gYSogaW4gYSBzY29wZQogICAqIHRoYXQgaGFzIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mICpvKiAoaWYgKm8qIGlzIGEgY2xhc3Mgb3IKICAgKiBsaWJyYXJ5KSBvciB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mIHRoZSBjbGFzcyBvZiAqbyogKG90aGVyd2lzZSkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiByZXR1cm5zIGEgcmVzdWx0ICpyKiwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mCiAgICogY2FsbGluZyBbcmVmbGVjdF1cKFt2YWx1ZV1cKS4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIGNhdXNlcyBhIGNvbXBpbGF0aW9uIGVycm9yLCB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIGlmCiAgICogYSBub24tcmVmbGVjdGl2ZSBjb21waWxhdGlvbiBlcnJvciBoYWQgYmVlbiBlbmNvdW50ZXJlZC4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIHRocm93cyBhbiBleGNlcHRpb24gKmUqICh0aGF0IGl0IGRvZXMgbm90IGNhdGNoKSB0aGlzCiAgICogbWV0aG9kIHRocm93cyAqZSouCiAgICovCiAgLyogVE9ETyh0dXJuaWRnZSk6IEhhbmRsZSBhbWJpZ3VvdXMgbmFtZXMuKi8KICBJbnN0YW5jZU1pcnJvciBzZXRGaWVsZChTeW1ib2wgZmllbGROYW1lLCBPYmplY3QgdmFsdWUpOwoKICAvKioKICAgKiBQZXJmb3JtcyBbaW52b2NhdGlvbl0gb24gdGhlIHJlZmxlY3RlZSBvZiB0aGlzIFtPYmplY3RNaXJyb3JdLgogICAqCiAgICogRXF1aXZhbGVudCB0bwogICAqCiAgICogICAgIGlmIChpbnZvY2F0aW9uLmlzR2V0dGVyKSB7CiAgICogICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGQoaW52b2NhdGlvbi5tZW1iZXJOYW1lKS5yZWZsZWN0ZWU7CiAgICogICAgIH0gZWxzZSBpZiAoaW52b2NhdGlvbi5pc1NldHRlcikgewogICAqICAgICAgIHJldHVybiB0aGlzLnNldEZpZWxkKGludm9jYXRpb24ubWVtYmVyTmFtZSwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLnBvc2l0aW9uYWxBcmd1bWVudHNbMF0pLnJlZmxlY3RlZTsKICAgKiAgICAgfSBlbHNlIHsKICAgKiAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoaW52b2NhdGlvbi5tZW1iZXJOYW1lLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGludm9jYXRpb24ubmFtZWRBcmd1bWVudHMpLnJlZmxlY3RlZTsKICAgKiAgICAgfQogICAqLwogIGRlbGVnYXRlKEludm9jYXRpb24gaW52b2NhdGlvbik7Cn0KCi8qKgogKiBBbiBbSW5zdGFuY2VNaXJyb3JdIHJlZmxlY3RzIGFuIGluc3RhbmNlIG9mIGEgRGFydCBsYW5ndWFnZSBvYmplY3QuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnN0YW5jZU1pcnJvciBpbXBsZW1lbnRzIE9iamVjdE1pcnJvciB7CiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIHR5cGUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKgogICAqIFJldHVybnMgYSBtaXJyb3Igb24gdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgcmVmbGVjdGVlLgogICAqIFRoZSBjbGFzcyBvZiB0aGUgcmVmbGVjdGVlIG1heSBkaWZmZXIgZnJvbQogICAqIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgaW52b2tpbmcgW3J1bnRpbWVUeXBlXSBvbgogICAqIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgQ2xhc3NNaXJyb3IgZ2V0IHR5cGU7CgogIC8qKgogICAqIFdoZXRoZXIgW3JlZmxlY3RlZV0gd2lsbCByZXR1cm4gdGhlIGluc3RhbmNlIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvci4KICAgKgogICAqIFRoaXMgd2lsbCBhbHdheXMgYmUgdHJ1ZSBpbiB0aGUgbG9jYWwgY2FzZSAocmVmbGVjdGluZyBpbnN0YW5jZXMgaW4gdGhlCiAgICogc2FtZSBpc29sYXRlKSwgYnV0IG9ubHkgdHJ1ZSBpbiB0aGUgcmVtb3RlIGNhc2UgaWYgdGhpcyBtaXJyb3IgcmVmbGVjdHMgYQogICAqIHNpbXBsZSB2YWx1ZS4KICAgKgogICAqIEEgdmFsdWUgaXMgc2ltcGxlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGhvbGRzOgogICAqCiAgICogKiB0aGUgdmFsdWUgaXMgWzpudWxsOl0KICAgKiAqIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIFtudW1dCiAgICogKiB0aGUgdmFsdWUgaXMgb2YgdHlwZSBbYm9vbF0KICAgKiAqIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIFtTdHJpbmddCiAgICovCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVlOwoKICAvKioKICAgKiBJZiB0aGUgW0luc3RhbmNlTWlycm9yXSByZWZsZWN0cyBhbiBpbnN0YW5jZSBpdCBpcyBtZWFuaW5nZnVsIHRvCiAgICogaGF2ZSBhIGxvY2FsIHJlZmVyZW5jZSB0bywgd2UgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGFjdHVhbAogICAqIGluc3RhbmNlIGhlcmUuCiAgICoKICAgKiBJZiB5b3UgYWNjZXNzIFtyZWZsZWN0ZWVdIHdoZW4gW2hhc1JlZmxlY3RlZV0gaXMgZmFsc2UsIGFuCiAgICogZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICBnZXQgcmVmbGVjdGVlOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgbWlycm9yIGlzIGVxdWFsIHRvIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gZWl0aGVyCiAgICoKICAgKiAgICBhLiBbaGFzUmVmbGVjdGVlXSBpcyB0cnVlIGFuZCBzbyBpcwogICAqICAgIFs6aWRlbnRpY2FsKHJlZmxlY3RlZSwgb3RoZXIucmVmbGVjdGVlKTpdLCBvcgogICAqCiAgICogICAgYi4gdGhlIHJlbW90ZSBvYmplY3RzIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciBhbmQgYnkgW290aGVyXSBhcmUKICAgKiAgICBpZGVudGljYWwuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7Cn0KCi8qKgogKiBBIFtDbG9zdXJlTWlycm9yXSByZWZsZWN0cyBhIGNsb3N1cmUuCiAqCiAqIEEgW0Nsb3N1cmVNaXJyb3JdIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgaXRzIHJlZmxlY3RlZSBhbmQKICogaW50cm9zcGVjdCBpdHMgZnVuY3Rpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBDbG9zdXJlTWlycm9yIGltcGxlbWVudHMgSW5zdGFuY2VNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjbG9zdXJlLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBpbXBsaWNpdCBjbG9zdXJlIG9mIGEgZnVuY3Rpb24gaXMgdGhhdAogICAqIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGEgWzpjYWxsOl0KICAgKiBtZXRob2QgaXMgdGhhdCBbOmNhbGw6XSBtZXRob2QuCiAgICoKICAgKiBBIERhcnQgaW1wbGVtZW50YXRpb24gbWlnaHQgY2hvb3NlIHRvIGNyZWF0ZSBhIGNsYXNzIGZvciBlYWNoIGNsb3N1cmUKICAgKiBleHByZXNzaW9uLCBpbiB3aGljaCBjYXNlIFs6ZnVuY3Rpb246XSB3b3VsZCBiZSB0aGUgc2FtZSBhcwogICAqIFs6dHlwZS5kZWNsYXJhdGlvbnNbI2NhbGxdOl0uIEJ1dCB0aGUgRGFydCBsYW5ndWFnZSBtb2RlbCBkb2VzIG5vdCByZXF1aXJlCiAgICogdGhpcy4gQSBtb3JlIHR5cGljYWwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgYSBzaW5nbGUgY2xvc3VyZSBjbGFzcyBmb3IKICAgKiBlYWNoIHR5cGUgc2lnbmF0dXJlLCB3aGVyZSB0aGUgY2FsbCBtZXRob2QgZGlzcGF0Y2hlcyB0byBhIGZ1bmN0aW9uIGhlbGQKICAgKiBpbiB0aGUgY2xvc3VyZSByYXRoZXIgdGhlIGNhbGwgbWV0aG9kCiAgICogZGlyZWN0bHkgaW1wbGVtZW50aW5nIHRoZSBjbG9zdXJlIGJvZHkuIFNvIG9uZSBjYW5ub3QgcmVseSBvbiBjbG9zdXJlcyBmcm9tCiAgICogZGlzdGluY3QgY2xvc3VyZSBleHByZXNzaW9ucyBoYXZpbmcgZGlzdGluY3QgY2xhc3NlcyAoWzp0eXBlOl0pLCBidXQgb25lCiAgICogY2FuIHJlbHkgb24gdGhlbSBoYXZpbmcgZGlzdGluY3QgZnVuY3Rpb25zIChbOmZ1bmN0aW9uOl0pLgogICAqLwogIE1ldGhvZE1pcnJvciBnZXQgZnVuY3Rpb247CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBjbG9zdXJlIGFuZCByZXR1cm5zIGEgbWlycm9yIG9uIHRoZSByZXN1bHQuCiAgICoKICAgKiBMZXQgKmYqIGJlIHRoZSBjbG9zdXJlIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciwKICAgKiBsZXQgKmExLCAuLi4sIGFuKiBiZSB0aGUgZWxlbWVudHMgb2YgW3Bvc2l0aW9uYWxBcmd1bWVudHNdLAogICAqIGxldCAqazEsIC4uLiwga20qIGJlIHRoZSBpZGVudGlmaWVycyBkZW5vdGVkIGJ5IHRoZSBlbGVtZW50cyBvZgogICAqIFtuYW1lZEFyZ3VtZW50cy5rZXlzXSwKICAgKiBhbmQgbGV0ICp2MSwgLi4uLCB2bSogYmUgdGhlIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy52YWx1ZXNdLgogICAqCiAgICogVGhlbiB0aGlzIG1ldGhvZCB3aWxsIHBlcmZvcm0gdGhlIG1ldGhvZCBpbnZvY2F0aW9uCiAgICogKmYoYTEsIC4uLiwgYW4sIGsxOiB2MSwgLi4uLCBrbTogdm0pKi4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIHJldHVybnMgYSByZXN1bHQgKnIqLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKICAgKiBjYWxsaW5nIFtyZWZsZWN0XVwoKnIqXCkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiBjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvciwgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZgogICAqIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdCBjYXRjaCksIHRoaXMKICAgKiBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICBJbnN0YW5jZU1pcnJvciBhcHBseShMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pOwp9CgovKioKICogQSBbTGlicmFyeU1pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIGxpYnJhcnksIHByb3ZpZGluZwogKiBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgY2xhc3NlcyBvZiB0aGUKICogbGlicmFyeS4KICovCmFic3RyYWN0IGNsYXNzIExpYnJhcnlNaXJyb3IgaW1wbGVtZW50cyBEZWNsYXJhdGlvbk1pcnJvciwgT2JqZWN0TWlycm9yIHsKICAvKioKICAgKiBUaGUgYWJzb2x1dGUgdXJpIG9mIHRoZSBsaWJyYXJ5LgogICAqLwogIFVyaSBnZXQgdXJpOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGltbXV0YWJsZSBtYXAgb2YgdGhlIGRlY2xhcmF0aW9ucyBhY3R1YWxseSBnaXZlbiBpbiB0aGUgbGlicmFyeS4KICAgKgogICAqIFRoaXMgbWFwIGluY2x1ZGVzIGFsbCByZWd1bGFyIG1ldGhvZHMsIGdldHRlcnMsIHNldHRlcnMsIGZpZWxkcywgY2xhc3NlcwogICAqIGFuZCB0eXBlZGVmcyBhY3R1YWxseSBkZWNsYXJlZCBpbiB0aGUgbGlicmFyeS4gVGhlIG1hcCBpcyBrZXllZCBieSB0aGUKICAgKiBzaW1wbGUgbmFtZXMgb2YgdGhlIGRlY2xhcmF0aW9ucy4KICAgKi8KICBNYXA8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4gZ2V0IGRlY2xhcmF0aW9uczsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFRoZSBsaWJyYXJ5IGJlaW5nIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciBhbmQgdGhlIGxpYnJhcnkgYmVpbmcKICAgKiAgICByZWZsZWN0ZWQgYnkgW290aGVyXSBhcmUgdGhlIHNhbWUgbGlicmFyeSBpbiB0aGUgc2FtZSBpc29sYXRlLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgaW1wb3J0cyBhbmQgZXhwb3J0cyBpbiB0aGlzIGxpYnJhcnk7CiAgICovCiAgTGlzdDxMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvcj4gZ2V0IGxpYnJhcnlEZXBlbmRlbmNpZXM7Cn0KCi8vLyBBIG1pcnJvciBvbiBhbiBpbXBvcnQgb3IgZXhwb3J0IGRlY2xhcmF0aW9uLgphYnN0cmFjdCBjbGFzcyBMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvciBpbXBsZW1lbnRzIE1pcnJvciB7CiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIGRlcGVuZGVuY3kgaXMgYW4gaW1wb3J0LgogIGJvb2wgZ2V0IGlzSW1wb3J0OwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgZGVwZW5kZW5jeSBpcyBhbiBleHBvcnQuCiAgYm9vbCBnZXQgaXNFeHBvcnQ7CgogIC8vLyBSZXR1cm5zIHRydWUgaWZmIHRoaXMgZGVwZW5kZW5jeSBpcyBhIGRlZmVycmVkIGltcG9ydC4gT3RoZXJ3aXNlIHJldHVybnMKICAvLy8gZmFsc2UuCiAgYm9vbCBnZXQgaXNEZWZlcnJlZDsKCiAgLy8vIFJldHVybnMgdGhlIGxpYnJhcnkgbWlycm9yIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaW1wb3J0cyBvciBleHBvcnRzIHRoZQogIC8vLyBbdGFyZ2V0TGlicmFyeV0uCiAgTGlicmFyeU1pcnJvciBnZXQgc291cmNlTGlicmFyeTsKCiAgLy8vIFJldHVybnMgdGhlIGxpYnJhcnkgbWlycm9yIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaXMgaW1wb3J0ZWQgb3IgZXhwb3J0ZWQsCiAgLy8vIG9yIG51bGwgaWYgdGhlIGxpYnJhcnkgaXMgbm90IGxvYWRlZC4KICBMaWJyYXJ5TWlycm9yIGdldCB0YXJnZXRMaWJyYXJ5OwoKICAvLy8gUmV0dXJucyB0aGUgcHJlZml4IGlmIHRoaXMgaXMgYSBwcmVmaXhlZCBpbXBvcnQgYW5kIGBudWxsYCBvdGhlcndpc2UuCiAgU3ltYm9sIGdldCBwcmVmaXg7CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IG9mIHNob3cvaGlkZSBjb21iaW5hdG9ycyBvbiB0aGUgaW1wb3J0L2V4cG9ydAogIC8vLyBkZWNsYXJhdGlvbi4KICBMaXN0PENvbWJpbmF0b3JNaXJyb3I+IGdldCBjb21iaW5hdG9yczsKCiAgLy8vIFJldHVybnMgdGhlIHNvdXJjZSBsb2NhdGlvbiBmb3IgdGhpcyBpbXBvcnQvZXhwb3J0IGRlY2xhcmF0aW9uLgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbjsKCiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhOwoKICAvLy8gUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoIGEgbGlicmFyeSBtaXJyb3Igb24gdGhlIGxpYnJhcnkgYmVpbmcKICAvLy8gaW1wb3J0ZWQgb3IgZXhwb3J0ZWQgd2hlbiBpdCBpcyBsb2FkZWQsIGFuZCBpbml0aWF0ZXMgYSBsb2FkIG9mIHRoYXQKICAvLy8gbGlicmFyeSBpZiBpdCBpcyBub3QgbG9hZGVkLgogIEZ1dHVyZTxMaWJyYXJ5TWlycm9yPiBsb2FkTGlicmFyeSgpOwp9CgovLy8gQSBtaXJyb3Igb24gYSBzaG93L2hpZGUgY29tYmluYXRvciBkZWNsYXJlZCBvbiBhIGxpYnJhcnkgZGVwZW5kZW5jeS4KYWJzdHJhY3QgY2xhc3MgQ29tYmluYXRvck1pcnJvciBpbXBsZW1lbnRzIE1pcnJvciB7CiAgLy8vIFRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIG9uIHRoZSBjb21iaW5hdG9yLgogIExpc3Q8U3ltYm9sPiBnZXQgaWRlbnRpZmllcnM7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyBpcyBhICdzaG93JyBjb21iaW5hdG9yLgogIGJvb2wgZ2V0IGlzU2hvdzsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIGlzIGEgJ2hpZGUnIGNvbWJpbmF0b3IuCiAgYm9vbCBnZXQgaXNIaWRlOwp9CgovKioKICogQSBbVHlwZU1pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIGNsYXNzLCB0eXBlZGVmLAogKiBmdW5jdGlvbiB0eXBlIG9yIHR5cGUgdmFyaWFibGUuCiAqLwphYnN0cmFjdCBjbGFzcyBUeXBlTWlycm9yIGltcGxlbWVudHMgRGVjbGFyYXRpb25NaXJyb3IgewogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG1pcnJvciByZWZsZWN0cyBkeW5hbWljLCBhIG5vbi1nZW5lcmljIGNsYXNzIG9yCiAgICogdHlwZWRlZiwgb3IgYW4gaW5zdGFudGlhdGVkIGdlbmVyaWMgY2xhc3Mgb3IgdHlwZWRlZiBpbiB0aGUgY3VycmVudAogICAqIGlzb2xhdGUuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS4KICAgKi8KICBib29sIGdldCBoYXNSZWZsZWN0ZWRUeXBlOwoKICAvKioKICAgKiBJZiBbOmhhc1JlZmxlY3RlZFR5cGU6XSByZXR1cm5zIHRydWUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgW1R5cGVdLgogICAqIE90aGVyd2lzZSwgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlzIHRocm93bi4KICAgKi8KICBUeXBlIGdldCByZWZsZWN0ZWRUeXBlOwoKICAvKioKICAgKiBBbiBpbW11dGFibGUgbGlzdCB3aXRoIG1pcnJvcnMgZm9yIGFsbCB0eXBlIHZhcmlhYmxlcyBmb3IgdGhpcyB0eXBlLgogICAqCiAgICogSWYgdGhpcyB0eXBlIGlzIGEgZ2VuZXJpYyBkZWNsYXJhdGlvbiBvciBhbiBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYwogICAqIGRlY2xhcmF0aW9uLCB0aGUgcmV0dXJuZWQgbGlzdCBjb250YWlucyBtaXJyb3JzIG9uIHRoZSB0eXBlIHZhcmlhYmxlcwogICAqIGRlY2xhcmVkIGluIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbi4KICAgKiBPdGhlcndpc2UsIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqCiAgICogVGhpcyBsaXN0IHByZXNlcnZlcyB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb24gb2YgdGhlIHR5cGUgdmFyaWFibGVzLgogICAqLwogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBnZXQgdHlwZVZhcmlhYmxlczsKCiAgLyoqCiAgICogQW4gaW1tdXRhYmxlIGxpc3Qgd2l0aCBtaXJyb3JzIGZvciBhbGwgdHlwZSBhcmd1bWVudHMgZm9yCiAgICogdGhpcyB0eXBlLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhbiBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYyBjbGFzcywKICAgKiB0aGUgdHlwZSBhcmd1bWVudHMgYXJlIHRoZSBiaW5kaW5ncyBvZiBpdHMgdHlwZSBwYXJhbWV0ZXJzLgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIG9mIGEgZ2VuZXJpYywKICAgKiBpdCBoYXMgbm8gdHlwZSBhcmd1bWVudHMgYW5kIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdC4KICAgKiBJZiB0aGUgcmVmbGVjdGVlIGlzIG5vdCBnZW5lcmljLCB0aGVuCiAgICogaXQgaGFzIG5vIHR5cGUgYXJndW1lbnRzIGFuZCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QuCiAgICoKICAgKiBUaGlzIGxpc3QgcHJlc2VydmVzIHRoZSBvcmRlciBvZiBkZWNsYXJhdGlvbiBvZiB0aGUgdHlwZSB2YXJpYWJsZXMuCiAgICovCiAgTGlzdDxUeXBlTWlycm9yPiBnZXQgdHlwZUFyZ3VtZW50czsKCiAgLyoqCiAgICogSXMgdGhpcyB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gb2YgdGhpcyB0eXBlPwogICAqCiAgICogRm9yIG1vc3QgY2xhc3NlcywgdGhleSBhcmUgdGhlaXIgb3duIG9yaWdpbmFsIGRlY2xhcmF0aW9uLiAgRm9yCiAgICogZ2VuZXJpYyBjbGFzc2VzLCBob3dldmVyLCB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlCiAgICogb3JpZ2luYWwgY2xhc3MgZGVjbGFyYXRpb24sIHdoaWNoIGhhcyB1bmJvdW5kIHR5cGUgdmFyaWFibGVzLCBhbmQKICAgKiB0aGUgaW5zdGFudGlhdGlvbnMgb2YgZ2VuZXJpYyBjbGFzc2VzLCB3aGljaCBoYXZlIGJvdW5kIHR5cGUKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgYm9vbCBnZXQgaXNPcmlnaW5hbERlY2xhcmF0aW9uOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gb2YgdGhpcyB0eXBlLgogICAqCiAgICogRm9yIG1vc3QgY2xhc3NlcywgdGhleSBhcmUgdGhlaXIgb3duIG9yaWdpbmFsIGRlY2xhcmF0aW9uLiAgRm9yCiAgICogZ2VuZXJpYyBjbGFzc2VzLCBob3dldmVyLCB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlCiAgICogb3JpZ2luYWwgY2xhc3MgZGVjbGFyYXRpb24sIHdoaWNoIGhhcyB1bmJvdW5kIHR5cGUgdmFyaWFibGVzLCBhbmQKICAgKiB0aGUgaW5zdGFudGlhdGlvbnMgb2YgZ2VuZXJpYyBjbGFzc2VzLCB3aGljaCBoYXZlIGJvdW5kIHR5cGUKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgb3JpZ2luYWxEZWNsYXJhdGlvbjsKCiAgLyoqCiAgICogQ2hlY2tzIHRoZSBzdWJ0eXBlIHJlbGF0aW9uc2hpcCwgZGVub3RlZCBieSBgPDpgIGluIHRoZSBsYW5ndWFnZQogICAqIHNwZWNpZmljYXRpb24uCiAgICoKICAgKiBUaGlzIGlzIHRoZSB0eXBlIHJlbGF0aW9uc2hpcCB1c2VkIGluIGBpc2AgdGVzdCBjaGVja3MuCiAgICovCiAgYm9vbCBpc1N1YnR5cGVPZihUeXBlTWlycm9yIG90aGVyKTsKCiAgLyoqCiAgICogQ2hlY2tzIHRoZSBhc3NpZ25hYmlsaXR5IHJlbGF0aW9uc2hpcCwgZGVub3RlZCBieSBgPD0+YCBpbiB0aGUgbGFuZ3VhZ2UKICAgKiBzcGVjaWZpY2F0aW9uLgogICAqCiAgICogVGhpcyBpcyB0aGUgdHlwZSByZWxhdGlvbnNoaXAgdGVzdGVkIG9uIGFzc2lnbm1lbnQgaW4gY2hlY2tlZCBtb2RlLgogICAqLwogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcik7Cn0KCi8qKgogKiBBIFtDbGFzc01pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIGNsYXNzLgogKi8KYWJzdHJhY3QgY2xhc3MgQ2xhc3NNaXJyb3IgaW1wbGVtZW50cyBUeXBlTWlycm9yLCBPYmplY3RNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBzdXBlcmNsYXNzIG9uIHRoZSByZWZsZWN0ZWUuCiAgICoKICAgKiBJZiB0aGlzIHR5cGUgaXMgWzpPYmplY3Q6XSwgdGhlIHN1cGVyY2xhc3Mgd2lsbCBiZSBudWxsLgogICAqLwogIENsYXNzTWlycm9yIGdldCBzdXBlcmNsYXNzOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgbWlycm9ycyBvbiB0aGUgc3VwZXJpbnRlcmZhY2VzIG9mIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgTGlzdDxDbGFzc01pcnJvcj4gZ2V0IHN1cGVyaW50ZXJmYWNlczsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhYnN0cmFjdD8KICAgKi8KICBib29sIGdldCBpc0Fic3RyYWN0OwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGFuIGVudW0/CiAgICovCiAgYm9vbCBnZXQgaXNFbnVtOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGltbXV0YWJsZSBtYXAgb2YgdGhlIGRlY2xhcmF0aW9ucyBhY3R1YWxseSBnaXZlbiBpbiB0aGUgY2xhc3MKICAgKiBkZWNsYXJhdGlvbi4KICAgKgogICAqIFRoaXMgbWFwIGluY2x1ZGVzIGFsbCByZWd1bGFyIG1ldGhvZHMsIGdldHRlcnMsIHNldHRlcnMsIGZpZWxkcywKICAgKiBjb25zdHJ1Y3RvcnMgYW5kIHR5cGUgdmFyaWFibGVzIGFjdHVhbGx5IGRlY2xhcmVkIGluIHRoZSBjbGFzcy4gQm90aAogICAqIHN0YXRpYyBhbmQgaW5zdGFuY2UgbWVtYmVycyBhcmUgaW5jbHVkZWQsIGJ1dCBubyBpbmhlcml0ZWQgbWVtYmVycyBhcmUKICAgKiBpbmNsdWRlZC4gVGhlIG1hcCBpcyBrZXllZCBieSB0aGUgc2ltcGxlIG5hbWVzIG9mIHRoZSBkZWNsYXJhdGlvbnMuCiAgICoKICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgaW5oZXJpdGVkIG1lbWJlcnMuCiAgICovCiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IGdldCBkZWNsYXJhdGlvbnM7CgogIC8qKgogICAqIFJldHVybnMgYSBtYXAgb2YgdGhlIG1ldGhvZHMsIGdldHRlcnMgYW5kIHNldHRlcnMgb2YgYW4gaW5zdGFuY2Ugb2YgdGhlCiAgICogY2xhc3MuCiAgICoKICAgKiBUaGUgaW50ZW50IGlzIHRvIGNhcHR1cmUgdGhvc2UgbWVtYmVycyB0aGF0IGNvbnN0aXR1dGUgdGhlIEFQSSBvZiBhbgogICAqIGluc3RhbmNlLiBIZW5jZSBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZCwgYnV0IHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzCiAgICogaW1wbGljaXRseSBpbnRyb2R1Y2VkIGJ5IGZpZWxkcyBhcmUgaW5jbHVkZWQuIFRoZSBtYXAgaW5jbHVkZXMgbWV0aG9kcywKICAgKiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHRoYXQgYXJlIGluaGVyaXRlZCBhcyB3ZWxsIGFzIHRob3NlIGludHJvZHVjZWQgYnkgdGhlCiAgICogY2xhc3MgaXRzZWxmLgogICAqCiAgICogVGhlIG1hcCBpcyBrZXllZCBieSB0aGUgc2ltcGxlIG5hbWVzIG9mIHRoZSBtZW1iZXJzLgogICAqLwogIE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4gZ2V0IGluc3RhbmNlTWVtYmVyczsKCiAgLyoqCiAgICogUmV0dXJucyBhIG1hcCBvZiB0aGUgc3RhdGljIG1ldGhvZHMsIGdldHRlcnMgYW5kIHNldHRlcnMgb2YgdGhlIGNsYXNzLgogICAqCiAgICogVGhlIGludGVudCBpcyB0byBjYXB0dXJlIHRob3NlIG1lbWJlcnMgdGhhdCBjb25zdGl0dXRlIHRoZSBBUEkgb2YgYSBjbGFzcy4KICAgKiBIZW5jZSBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZCwgYnV0IHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGltcGxpY2l0bHkKICAgKiBpbnRyb2R1Y2VkIGJ5IGZpZWxkcyBhcmUgaW5jbHVkZWQuCiAgICoKICAgKiBUaGUgbWFwIGlzIGtleWVkIGJ5IHRoZSBzaW1wbGUgbmFtZXMgb2YgdGhlIG1lbWJlcnMuCiAgICovCiAgTWFwPFN5bWJvbCwgTWV0aG9kTWlycm9yPiBnZXQgc3RhdGljTWVtYmVyczsKCiAgLyoqCiAgICogVGhlIG1peGluIG9mIHRoaXMgY2xhc3MuCiAgICoKICAgKiBJZiB0aGlzIGNsYXNzIGlzIHRoZSByZXN1bHQgb2YgYSBtaXhpbiBhcHBsaWNhdGlvbiBvZiB0aGUgZm9ybSBTIHdpdGggTSwKICAgKiByZXR1cm5zIGEgY2xhc3MgbWlycm9yIG9uIE0uIE90aGVyd2lzZSByZXR1cm5zIGEgY2xhc3MgbWlycm9yIG9uCiAgICogdGhlIHJlZmxlY3RlZS4KICAgKi8KICBDbGFzc01pcnJvciBnZXQgbWl4aW47CgogIC8vIFRPRE8oYWhlKTogV2hhdCBhYm91dDoKICAvLyAvLy8gRmluZHMgdGhlIGluc3RhbmNlIG1lbWJlciBuYW1lZCBbbmFtZV0gZGVjbGFyZWQgb3IgaW5oZXJpdGVkIGluIHRoZQogIC8vIC8vLyByZWZsZWN0ZWQgY2xhc3MuCiAgLy8gRGVjbGFyYXRpb25NaXJyb3IgaW5zdGFuY2VMb29rdXAoU3ltYm9sIG5hbWUpOwoKICAvKioKICAgKiBJbnZva2VzIHRoZSBuYW1lZCBjb25zdHJ1Y3RvciBhbmQgcmV0dXJucyBhIG1pcnJvciBvbiB0aGUgcmVzdWx0LgogICAqCiAgICogTGV0ICpjKiBiZSB0aGUgY2xhc3MgcmVmbGVjdGVkIGJ5IHRoaXMgbWlycm9yLAogICAqIGxldCAqYTEsIC4uLiwgYW4qIGJlIHRoZSBlbGVtZW50cyBvZiBbcG9zaXRpb25hbEFyZ3VtZW50c10sCiAgICogbGV0ICprMSwgLi4uLCBrbSogYmUgdGhlIGlkZW50aWZpZXJzIGRlbm90ZWQgYnkgdGhlIGVsZW1lbnRzIG9mCiAgICogW25hbWVkQXJndW1lbnRzLmtleXNdLAogICAqIGFuZCBsZXQgKnYxLCAuLi4sIHZtKiBiZSB0aGUgZWxlbWVudHMgb2YgW25hbWVkQXJndW1lbnRzLnZhbHVlc10uCiAgICoKICAgKiBJZiBbY29uc3RydWN0b3JOYW1lXSB3YXMgY3JlYXRlZCBmcm9tIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gdGhpcyBtZXRob2QKICAgKiB3aWxsIGV4ZWN1dGUgdGhlIGluc3RhbmNlIGNyZWF0aW9uIGV4cHJlc3Npb24KICAgKiAqbmV3IGMoYTEsIC4uLiwgYW4sIGsxOiB2MSwgLi4uLCBrbTogdm0pKiBpbiBhIHNjb3BlIHRoYXQgaGFzIGFjY2VzcyB0bwogICAqIHRoZSBwcml2YXRlIG1lbWJlcnMgb2YgKmMqLgogICAqCiAgICogT3RoZXJ3aXNlLCBsZXQgKmYqIGJlIHRoZSBzaW1wbGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3IgZGVub3RlZCBieQogICAqIFtjb25zdHJ1Y3Rvck5hbWVdLiBUaGVuIHRoaXMgbWV0aG9kIHdpbGwgZXhlY3V0ZSB0aGUgaW5zdGFuY2UgY3JlYXRpb24KICAgKiBleHByZXNzaW9uICpuZXcgYy5mKGExLCAuLi4sIGFuLCBrMTogdjEsIC4uLiwga206IHZtKSogaW4gYSBzY29wZSB0aGF0IGhhcwogICAqIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mICpjKi4KICAgKgogICAqIEluIGVpdGhlciBjYXNlOgogICAqCiAgICogKiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSByZXN1bHQgKnIqLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZQogICAqICAgcmVzdWx0IG9mIGNhbGxpbmcgW3JlZmxlY3RdXCgqcipcKS4KICAgKiAqIElmIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gY2F1c2VzIGEgY29tcGlsYXRpb24gZXJyb3IsIHRoZSBlZmZlY3QgaXMKICAgKiAgIHRoZSBzYW1lIGFzIGlmIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICogKiBJZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uIHRocm93cyBhbiBleGNlcHRpb24gKmUqICh0aGF0IGl0IGRvZXMgbm90CiAgICogICBjYXRjaCksIHRoaXMgbWV0aG9kIHRocm93cyAqZSouCiAgICovCiAgSW5zdGFuY2VNaXJyb3IgbmV3SW5zdGFuY2UoU3ltYm9sIGNvbnN0cnVjdG9yTmFtZSwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFRoaXMgbWlycm9yIGFuZCBbb3RoZXJdIHJlZmxlY3QgdGhlIHNhbWUgY2xhc3MuCiAgICoKICAgKiBOb3RlIHRoYXQgaWYgdGhlIHJlZmxlY3RlZCBjbGFzcyBpcyBhbiBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYyBjbGFzcywgMi4KICAgKiBpbXBsaWVzIHRoYXQgdGhlIHJlZmxlY3RlZCBjbGFzcyBhbmQgW290aGVyXSBoYXZlIGVxdWFsIHR5cGUgYXJndW1lbnRzLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNsYXNzIGRlbm90ZWQgYnkgdGhlIHJlY2VpdmVyIGlzIGEgc3ViY2xhc3Mgb2YgdGhlCiAgICogY2xhc3MgZGVub3RlZCBieSB0aGUgYXJndW1lbnQuCiAgICoKICAgKiBOb3RlIHRoYXQgdGhlIHN1YmNsYXNzIHJlbGF0aW9uc2hpcCBpcyByZWZsZXhpdmUuCiAgICovCiAgYm9vbCBpc1N1YmNsYXNzT2YoQ2xhc3NNaXJyb3Igb3RoZXIpOwp9CgovKioKICogQSBbRnVuY3Rpb25UeXBlTWlycm9yXSByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gaW4gdGhlCiAqIERhcnQgbGFuZ3VhZ2UuCiAqLwphYnN0cmFjdCBjbGFzcyBGdW5jdGlvblR5cGVNaXJyb3IgaW1wbGVtZW50cyBDbGFzc01pcnJvciB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCByZXR1cm5UeXBlOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgcGFyYW1ldGVyIHR5cGVzIG9mIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgWzpjYWxsOl0gbWV0aG9kIGZvciB0aGUgcmVmbGVjdGVlLgogICAqLwogIC8vIFRoaXMgaXMgb25seSBoZXJlIGJlY2F1c2UgaW4gdGhlIHBhc3QgdGhlIFZNIGRpZCBub3QgaW1wbGVtZW50IGEgY2FsbAogIC8vIG1ldGhvZCBvbiBjbG9zdXJlcy4KICBNZXRob2RNaXJyb3IgZ2V0IGNhbGxNZXRob2Q7Cn0KCi8qKgogKiBBIFtUeXBlVmFyaWFibGVNaXJyb3JdIHJlcHJlc2VudHMgYSB0eXBlIHBhcmFtZXRlciBvZiBhIGdlbmVyaWMgdHlwZS4KICovCmFic3RyYWN0IGNsYXNzIFR5cGVWYXJpYWJsZU1pcnJvciBleHRlbmRzIFR5cGVNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSB0eXBlIHRoYXQgaXMgdGhlIHVwcGVyIGJvdW5kIG9mIHRoaXMgdHlwZSB2YXJpYWJsZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCB1cHBlckJvdW5kOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIHN0YXRpYz8KICAgKgogICAqIEZvciB0aGUgcHVycG9zZXMgb2YgdGhlIG1pcnJvcnMgbGlicmFyeSwgdHlwZSB2YXJpYWJsZXMgYXJlIGNvbnNpZGVyZWQKICAgKiBub24tc3RhdGljLgogICAqLwogIGJvb2wgZ2V0IGlzU3RhdGljOwoKICAvKioKICAgKiBXaGV0aGVyIFtvdGhlcl0gaXMgYSBbVHlwZVZhcmlhYmxlTWlycm9yXSBvbiB0aGUgc2FtZSB0eXBlIHZhcmlhYmxlIGFzIHRoaXMKICAgKiBtaXJyb3IuCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gWzpzaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWU6XSBhbmQgWzpvd25lciA9PSBvdGhlci5vd25lcjpdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwp9CgovKioKICogQSBbVHlwZWRlZk1pcnJvcl0gcmVwcmVzZW50cyBhIHR5cGVkZWYgaW4gYSBEYXJ0IGxhbmd1YWdlIHByb2dyYW0uCiAqLwphYnN0cmFjdCBjbGFzcyBUeXBlZGVmTWlycm9yIGltcGxlbWVudHMgVHlwZU1pcnJvciB7CiAgLyoqCiAgICogVGhlIGRlZmluaW5nIHR5cGUgZm9yIHRoaXMgdHlwZWRlZi4KICAgKgogICAqIElmIHRoZSB0eXBlIHJlZmVycmVkIHRvIGJ5IHRoZSByZWZsZWN0ZWUgaXMgYSBmdW5jdGlvbiB0eXBlICpGKiwgdGhlCiAgICogcmVzdWx0IHdpbGwgYmUgWzpGdW5jdGlvblR5cGVNaXJyb3I6XSByZWZsZWN0aW5nICpGKiB3aGljaCBpcyBhYnN0cmFjdAogICAqIGFuZCBoYXMgYW4gYWJzdHJhY3QgbWV0aG9kIFs6Y2FsbDpdIHdob3NlIHNpZ25hdHVyZSBjb3JyZXNwb25kcyB0byAqRiouCiAgICogRm9yIGluc3RhbmNlIFs6dm9pZCBmKGludCk6XSBpcyB0aGUgcmVmZXJlbnQgZm9yIFs6dHlwZWRlZiB2b2lkIGYoaW50KTpdLgogICAqLwogIEZ1bmN0aW9uVHlwZU1pcnJvciBnZXQgcmVmZXJlbnQ7Cn0KCi8qKgogKiBBIFtNZXRob2RNaXJyb3JdIHJlZmxlY3RzIGEgRGFydCBsYW5ndWFnZSBmdW5jdGlvbiwgbWV0aG9kLAogKiBjb25zdHJ1Y3RvciwgZ2V0dGVyLCBvciBzZXR0ZXIuCiAqLwphYnN0cmFjdCBjbGFzcyBNZXRob2RNaXJyb3IgaW1wbGVtZW50cyBEZWNsYXJhdGlvbk1pcnJvciB7CiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIHJldHVybiB0eXBlIGZvciB0aGUgcmVmbGVjdGVlLgogICAqLwogIFR5cGVNaXJyb3IgZ2V0IHJldHVyblR5cGU7CgogIC8qKgogICAqIFRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIHJlZmxlY3RlZSwgaWYgYXZhaWxhYmxlLiBPdGhlcndpc2UgbnVsbC4KICAgKi8KICBTdHJpbmcgZ2V0IHNvdXJjZTsKCiAgLyoqCiAgICogQSBsaXN0IG9mIG1pcnJvcnMgb24gdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzOwoKICAvKioKICAgKiBBIGZ1bmN0aW9uIGlzIGNvbnNpZGVyZWQgbm9uLXN0YXRpYyBpZmYgaXQgaXMgcGVybWl0ZWQgdG8gcmVmZXIgdG8gJ3RoaXMnLgogICAqCiAgICogTm90ZSB0aGF0IGdlbmVyYXRpdmUgY29uc3RydWN0b3JzIGFyZSBjb25zaWRlcmVkIG5vbi1zdGF0aWMsIHdoZXJlYXMKICAgKiBmYWN0b3J5IGNvbnN0cnVjdG9ycyBhcmUgY29uc2lkZXJlZCBzdGF0aWMuCiAgICovCiAgYm9vbCBnZXQgaXNTdGF0aWM7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYWJzdHJhY3Q/CiAgICovCiAgYm9vbCBnZXQgaXNBYnN0cmFjdDsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZsZWN0ZWUgaXMgc3ludGhldGljLCBhbmQgcmV0dXJucyBmYWxzZSBvdGhlcndpc2UuCiAgICoKICAgKiBBIHJlZmxlY3RlZSBpcyBzeW50aGV0aWMgaWYgaXQgaXMgYSBnZXR0ZXIgb3Igc2V0dGVyIGltcGxpY2l0bHkgaW50cm9kdWNlZAogICAqIGZvciBhIGZpZWxkIG9yIFR5cGUsIG9yIGlmIGl0IGlzIGEgY29uc3RydWN0b3IgdGhhdCB3YXMgaW1wbGljaXRseQogICAqIGludHJvZHVjZWQgYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9yIGFzIHBhcnQgb2YgYSBtaXhpbiBhcHBsaWNhdGlvbi4KICAgKi8KICBib29sIGdldCBpc1N5bnRoZXRpYzsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIHJlZ3VsYXIgZnVuY3Rpb24gb3IgbWV0aG9kPwogICAqCiAgICogQSBmdW5jdGlvbiBvciBtZXRob2QgaXMgcmVndWxhciBpZiBpdCBpcyBub3QgYSBnZXR0ZXIsIHNldHRlciwgb3IKICAgKiBjb25zdHJ1Y3Rvci4gIE5vdGUgdGhhdCBvcGVyYXRvcnMsIGJ5IHRoaXMgZGVmaW5pdGlvbiwgYXJlCiAgICogcmVndWxhciBtZXRob2RzLgogICAqLwogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZDsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhbiBvcGVyYXRvcj8KICAgKi8KICBib29sIGdldCBpc09wZXJhdG9yOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgZ2V0dGVyPwogICAqLwogIGJvb2wgZ2V0IGlzR2V0dGVyOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgc2V0dGVyPwogICAqLwogIGJvb2wgZ2V0IGlzU2V0dGVyOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgY29uc3RydWN0b3I/CiAgICovCiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvcjsKCiAgLyoqCiAgICogVGhlIGNvbnN0cnVjdG9yIG5hbWUgZm9yIG5hbWVkIGNvbnN0cnVjdG9ycyBhbmQgZmFjdG9yeSBtZXRob2RzLgogICAqCiAgICogRm9yIHVubmFtZWQgY29uc3RydWN0b3JzLCB0aGlzIGlzIHRoZSBlbXB0eSBzdHJpbmcuICBGb3IKICAgKiBub24tY29uc3RydWN0b3JzLCB0aGlzIGlzIHRoZSBlbXB0eSBzdHJpbmcuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgWzonYmFyJzpdIGlzIHRoZSBjb25zdHJ1Y3RvciBuYW1lIGZvciBjb25zdHJ1Y3RvcgogICAqIFs6Rm9vLmJhcjpdIG9mIHR5cGUgWzpGb286XS4KICAgKi8KICBTeW1ib2wgZ2V0IGNvbnN0cnVjdG9yTmFtZTsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIGNvbnN0IGNvbnN0cnVjdG9yPwogICAqLwogIGJvb2wgZ2V0IGlzQ29uc3RDb25zdHJ1Y3RvcjsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3I/CiAgICovCiAgYm9vbCBnZXQgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3I7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3Rvcj8KICAgKi8KICBib29sIGdldCBpc1JlZGlyZWN0aW5nQ29uc3RydWN0b3I7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYSBmYWN0b3J5IGNvbnN0cnVjdG9yPwogICAqLwogIGJvb2wgZ2V0IGlzRmFjdG9yeUNvbnN0cnVjdG9yOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgbWlycm9yIGlzIGVxdWFsIHRvIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gWzpzaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWU6XSBhbmQgWzpvd25lciA9PSBvdGhlci5vd25lcjpdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwp9CgovKioKICogQSBbVmFyaWFibGVNaXJyb3JdIHJlZmxlY3RzIGEgRGFydCBsYW5ndWFnZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIFZhcmlhYmxlTWlycm9yIGltcGxlbWVudHMgRGVjbGFyYXRpb25NaXJyb3IgewogIC8qKgogICAqIFJldHVybnMgYSBtaXJyb3Igb24gdGhlIHR5cGUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCB0eXBlOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaXMgYSBzdGF0aWMgdmFyaWFibGUuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgWzpmYWxzZTpdLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgbWlycm9yIGxpYnJhcnksIHRvcC1sZXZlbCB2YXJpYWJsZXMgYXJlCiAgICogaW1wbGljaXRseSBkZWNsYXJlZCBzdGF0aWMuCiAgICovCiAgYm9vbCBnZXQgaXNTdGF0aWM7CgogIC8qKgogICAqIFJldHVybnMgWzp0cnVlOl0gaWYgdGhlIHJlZmxlY3RlZSBpcyBhIGZpbmFsIHZhcmlhYmxlLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBpc0ZpbmFsOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaXMgZGVjbGFyZWQgWzpjb25zdDpdLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBpc0NvbnN0OwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgbWlycm9yIGlzIGVxdWFsIHRvIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gWzpzaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWU6XSBhbmQgWzpvd25lciA9PSBvdGhlci5vd25lcjpdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwp9CgovKioKICogQSBbUGFyYW1ldGVyTWlycm9yXSByZWZsZWN0cyBhIERhcnQgZm9ybWFsIHBhcmFtZXRlciBkZWNsYXJhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIFBhcmFtZXRlck1pcnJvciBpbXBsZW1lbnRzIFZhcmlhYmxlTWlycm9yIHsKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgdHlwZSBvZiB0aGlzIHBhcmFtZXRlci4KICAgKi8KICBUeXBlTWlycm9yIGdldCB0eXBlOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBpc09wdGlvbmFsOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaXMgYSBuYW1lZCBwYXJhbWV0ZXIuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgWzpmYWxzZTpdLgogICAqLwogIGJvb2wgZ2V0IGlzTmFtZWQ7CgogIC8qKgogICAqIFJldHVybnMgWzp0cnVlOl0gaWYgdGhlIHJlZmxlY3RlZSBoYXMgZXhwbGljaXRseSBkZWNsYXJlZCBhIGRlZmF1bHQgdmFsdWUuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgWzpmYWxzZTpdLgogICAqLwogIGJvb2wgZ2V0IGhhc0RlZmF1bHRWYWx1ZTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhbiBvcHRpb25hbCBwYXJhbWV0ZXIuCiAgICoKICAgKiBSZXR1cm5zIGFuIFtJbnN0YW5jZU1pcnJvcl0gb24gdGhlIChjb21waWxlLXRpbWUgY29uc3RhbnQpCiAgICogZGVmYXVsdCB2YWx1ZSBmb3IgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLgogICAqIElmIG5vIGRlZmF1bHQgdmFsdWUgaXMgZGVjbGFyZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYAogICAqIGFuZCBhIG1pcnJvciBvZiBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBSZXR1cm5zIGBudWxsYCBmb3IgYSByZXF1aXJlZCBwYXJhbWV0ZXIuCiAgICovCiAgSW5zdGFuY2VNaXJyb3IgZ2V0IGRlZmF1bHRWYWx1ZTsKfQoKLyoqCiAqIEEgW1NvdXJjZUxvY2F0aW9uXSBkZXNjcmliZXMgdGhlIHNwYW4gb2YgYW4gZW50aXR5IGluIERhcnQgc291cmNlIGNvZGUuCiAqLwphYnN0cmFjdCBjbGFzcyBTb3VyY2VMb2NhdGlvbiB7CiAgLyoqCiAgICogVGhlIDEtYmFzZWQgbGluZSBudW1iZXIgZm9yIHRoaXMgc291cmNlIGxvY2F0aW9uLgogICAqCiAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIHRoYXQgdGhlIGxpbmUgbnVtYmVyIGlzIHVua25vd24uCiAgICovCiAgaW50IGdldCBsaW5lOwoKICAvKioKICAgKiBUaGUgMS1iYXNlZCBjb2x1bW4gbnVtYmVyIGZvciB0aGlzIHNvdXJjZSBsb2NhdGlvbi4KICAgKgogICAqIEEgdmFsdWUgb2YgMCBtZWFucyB0aGF0IHRoZSBjb2x1bW4gbnVtYmVyIGlzIHVua25vd24uCiAgICovCiAgaW50IGdldCBjb2x1bW47CgogIC8qKgogICAqIFJldHVybnMgdGhlIFVSSSB3aGVyZSB0aGUgc291cmNlIG9yaWdpbmF0ZWQuCiAgICovCiAgVXJpIGdldCBzb3VyY2VVcmk7Cn0KCi8qKgogKiBDbGFzcyB1c2VkIGZvciBlbmNvZGluZyBjb21tZW50cyBhcyBtZXRhZGF0YSBhbm5vdGF0aW9ucy4KICovCmNsYXNzIENvbW1lbnQgewogIC8qKgogICAqIFRoZSBjb21tZW50IHRleHQgYXMgd3JpdHRlbiBpbiB0aGUgc291cmNlIHRleHQuCiAgICovCiAgZmluYWwgU3RyaW5nIHRleHQ7CgogIC8qKgogICAqIFRoZSBjb21tZW50IHRleHQgd2l0aG91dCB0aGUgc3RhcnQsIGVuZCwgYW5kIHBhZGRpbmcgdGV4dC4KICAgKgogICAqIEZvciBleGFtcGxlLCBpZiBbdGV4dF0gaXMgWzogLyoqIENvbW1lbnQgdGV4dC4gKi8gOl0gdGhlbiB0aGUgW3RyaW1tZWRUZXh0XQogICAqIGlzIFs6IENvbW1lbnQgdGV4dC4gOl0uCiAgICovCiAgZmluYWwgU3RyaW5nIHRyaW1tZWRUZXh0OwoKICAvKioKICAgKiBJcyBbOnRydWU6XSBpZiB0aGlzIGNvbW1lbnQgaXMgYSBkb2N1bWVudGF0aW9uIGNvbW1lbnQuCiAgICoKICAgKiBUaGF0IGlzLCB0aGF0IHRoZSBjb21tZW50IGlzIGVpdGhlciBlbmNsb3NlZCBpbiBbOiAvKiogLi4uICovIDpdIG9yIHN0YXJ0cwogICAqIHdpdGggWzogLy8vIDpdLgogICAqLwogIGZpbmFsIGJvb2wgaXNEb2NDb21tZW50OwoKICBjb25zdCBDb21tZW50KHRoaXMudGV4dCwgdGhpcy50cmltbWVkVGV4dCwgdGhpcy5pc0RvY0NvbW1lbnQpOwp9CgovKioKICogQW5ub3RhdGlvbiBkZXNjcmliaW5nIGhvdyAiZGFydDptaXJyb3JzIiBpcyB1c2VkIChFWFBFUklNRU5UQUwpLgogKgogKiBXaGVuIHVzZWQgYXMgbWV0YWRhdGEgb24gYW4gaW1wb3J0IG9mICJkYXJ0Om1pcnJvcnMiIGluIGxpYnJhcnkgKkwqLCB0aGlzCiAqIGNsYXNzIGRlc2NyaWJlcyBob3cgImRhcnQ6bWlycm9ycyIgaXMgdXNlZCBieSBsaWJyYXJ5ICpMKiB1bmxlc3Mgb3ZlcnJpZGRlbi4KICogU2VlIFtvdmVycmlkZV0uCiAqCiAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogKgogKiBJbiBzb21lIHNjZW5hcmlvcywgZm9yIGV4YW1wbGUsIHdoZW4gbWluaWZ5aW5nIERhcnQgY29kZSwgb3Igd2hlbiBnZW5lcmF0aW5nCiAqIEphdmFTY3JpcHQgY29kZSBmcm9tIGEgRGFydCBwcm9ncmFtLCB0aGUgc2l6ZSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIG91dHB1dAogKiBjYW4gc3VmZmVyIGZyb20gdXNlIG9mIHJlZmxlY3Rpb24uICBJbiB0aG9zZSBjYXNlcywgdGVsbGluZyB0aGUgY29tcGlsZXIKICogd2hhdCBpcyB1c2VkLCBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdC4KICoKICogRXhhbXBsZSB1c2FnZToKICoKICogICAgIEBNaXJyb3JzVXNlZChzeW1ib2xzOiAnZm9vJykKICogICAgIGltcG9ydCAnZGFydDptaXJyb3JzJzsKICoKICogICAgIGNsYXNzIEZvbyB7CiAqICAgICAgIG5vU3VjaE1ldGhvZChJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICogICAgICAgICBwcmludChNaXJyb3JTeXN0ZW0uZ2V0TmFtZShpbnZvY2F0aW9uLm1lbWJlck5hbWUpKTsKICogICAgICAgfQogKiAgICAgfQogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgbmV3IEZvbygpLmZvbygpOyAvLyBQcmludHMgImZvbyIuCiAqICAgICAgIG5ldyBGb28oKS5iYXIoKTsgLy8gTWlnaHQgcHJpbnQgYW4gYXJiaXRyYXJ5IChtYW5nbGVkKSBuYW1lLCAiYmFyIi4KICogICAgIH0KICoKICogRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIFtNaXJyb3JzVXNlZF0gY29uc3RydWN0b3IKICogc2VlIHRoZSBjb21tZW50cyBmb3IgW3N5bWJvbHNdLCBbdGFyZ2V0c10sIFttZXRhVGFyZ2V0c10gYW5kIFtvdmVycmlkZV0uCiAqCiAqIEFuIGltcG9ydCBvZiBgZGFydDptaXJyb3JzYCBtYXkgaGF2ZSBtdWx0aXBsZSBbTWlycm9yc1VzZWRdIGFubm90YXRpb25zLiBUaGlzCiAqIGlzIHBhcnRpY3VsYXJseSBoZWxwZnVsIHRvIHNwZWNpZnkgb3ZlcnJpZGVzIGZvciBzcGVjaWZpYyBsaWJyYXJpZXMuIEZvcgogKiBleGFtcGxlOgogKgogKiAgICAgQE1pcnJvcnNVc2VkKHRhcmdldHM6ICdmb28uQmFyJywgb3ZlcnJpZGU6ICdmb28nKQogKiAgICAgQE1pcnJvcnNVc2VkKHRhcmdldHM6ICdCYXInKQogKiAgICAgaW1wb3J0ICdkYXJ0Om1pcnJvcnMnOwogKgogKiB3aWxsIGVuc3VyZSB0aGF0IHRoZSB0YXJnZXQgYEJhcmAgZnJvbSB0aGUgY3VycmVudCBsaWJyYXJ5IGFuZCBmcm9tIGxpYnJhcnkKICogYGZvb2AgaXMgYXZhaWxhYmxlIGZvciByZWZsZWN0aW9uLiBTZWUgYWxzbyBbb3ZlcnJpZGVdLgogKi8KQERlcHJlY2F0ZWQoIk5vIGxvbmdlciBoYXMgYW55IGVmZmVjdC4gV2lsbCBiZSByZW1vdmVkIGluIGEgbGF0ZXIgcmVsZWFzZS4iKQpjbGFzcyBNaXJyb3JzVXNlZCB7CiAgLy8gTm90ZTogdGhlIGZpZWxkcyBvZiB0aGlzIGNsYXNzIGFyZSB1bnR5cGVkLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBtb3N0CiAgLy8gY29udmVuaWVudCB3YXkgdG8gc3BlY2lmeSBzeW1ib2xzIHRvZGF5IGlzIHVzaW5nIGEgc2luZ2xlIHN0cmluZy4gSW4KICAvLyBzb21lIGNhc2VzLCBhIGNvbnN0IGxpc3Qgb2YgY2xhc3NlcyBtaWdodCBiZSBjb252ZW5pZW50LiBTb21lCiAgLy8gbWlnaHQgcHJlZmVyIHRvIHVzZSBhIGNvbnN0IGxpc3Qgb2Ygc3ltYm9scy4KCiAgLyoqCiAgICogVGhlIGxpc3Qgb2Ygc3RyaW5ncyBwYXNzZWQgdG8gbmV3IFtTeW1ib2xdLCBhbmQgc3ltYm9scyB0aGF0IG1pZ2h0IGJlCiAgICogcGFzc2VkIHRvIFtNaXJyb3JTeXN0ZW0uZ2V0TmFtZV0uCiAgICoKICAgKiBDb21iaW5lZCB3aXRoIHRoZSBuYW1lcyBvZiBbdGFyZ2V0c10sIFttZXRhVGFyZ2V0c10gYW5kIHRoZWlyIG1lbWJlcnMsCiAgICogdGhpcyBmb3JtcyB0aGUgY29tcGxldGUgbGlzdCBvZiBzdHJpbmdzIHBhc3NlZCB0byBuZXcgW1N5bWJvbF0sIGFuZAogICAqIHN5bWJvbHMgdGhhdCBtaWdodCBiZSBwYXNzZWQgdG8gW01pcnJvclN5c3RlbS5nZXROYW1lXSBieSB0aGUgbGlicmFyeSB0bwogICAqIHdoaWNoIHRoaXMgbWV0YWRhdGEgYXBwbGllcy4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogRGFydDJqcyBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmb3JtYXRzIHRvIHNwZWNpZnkgc3ltYm9sczoKICAgKgogICAqICogQSBjb25zdGFudCBbTGlzdF0gb2YgW1N0cmluZ10gY29uc3RhbnRzIHJlcHJlc2VudGluZyBzeW1ib2wgbmFtZXMsCiAgICogICBlLmcuLCBgY29uc3QgWydmb28nLCAnYmFyJ11gLgogICAqICogQSBzaW5nbGUgW1N0cmluZ10gY29uc3RhbnQgd2hvc2UgdmFsdWUgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZgogICAqICAgc3ltYm9sIG5hbWVzLCBlLmcuLCBgImZvbywgYmFyImAuCiAgICoKICAgKiBTcGVjaWZ5aW5nIHRoZSBgc3ltYm9sc2AgZmllbGQgdHVybnMgb2ZmIHRoZSBmb2xsb3dpbmcgd2FybmluZ3MgZW1pdHRlZCBieQogICAqIGRhcnQyanM6CiAgICoKICAgKiAqIFVzaW5nICJNaXJyb3JTeXN0ZW0uZ2V0TmFtZSIgbWF5IHJlc3VsdCBpbiBsYXJnZXIgb3V0cHV0LgogICAqICogVXNpbmcgIm5ldyBTeW1ib2wiIG1heSByZXN1bHQgaW4gbGFyZ2VyIG91dHB1dC4KICAgKgogICAqIEZvciBleGFtcGxlLCBpZiB5b3UncmUgdXNpbmcgW25vU3VjaE1ldGhvZF0gdG8gaW50ZXJhY3Qgd2l0aCBhIGRhdGFiYXNlLAogICAqIGV4dHJhY3QgYWxsIHRoZSBwb3NzaWJsZSBjb2x1bW4gbmFtZXMgYW5kIGluY2x1ZGUgdGhlbSBpbiB0aGlzIGxpc3QuCiAgICogU2ltaWxhcmx5LCBpZiB5b3UncmUgdXNpbmcgW25vU3VjaE1ldGhvZF0gdG8gaW50ZXJhY3Qgd2l0aCBhbm90aGVyCiAgICogbGFuZ3VhZ2UgKEphdmFTY3JpcHQsIGZvciBleGFtcGxlKSBleHRyYWN0IGFsbCB0aGUgaWRlbnRpZmllcnMgZnJvbSB0aGUKICAgKiBBUEkgeW91IHVzZSBhbmQgaW5jbHVkZSB0aGVtIGluIHRoaXMgbGlzdC4KICAgKgogICAqIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIGEgc3ltYm9sIG9ubHkgZW5zdXJlcyB0aGF0IHRoZSBzeW1ib2wgd2lsbCBiZQogICAqIGF2YWlsYWJsZSB1bmRlciB0aGF0IG5hbWUgYXQgcnVudGltZS4gSXQgZG9lcyBub3QgbWFyayB0YXJnZXRzIHdpdGgKICAgKiB0aGF0IG5hbWUgYXMgYXZhaWxhYmxlIGZvciByZWZsZWN0aW9uLiBTZWUgW3RhcmdldHNdIGFuZCBbbWV0YVRhcmdldHNdCiAgICogZm9yIHRoYXQgcHVycG9zZS4KICAgKi8KICBmaW5hbCBzeW1ib2xzOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgcmVmbGVjdGl2ZSB0YXJnZXRzLgogICAqCiAgICogQ29tYmluZWQgd2l0aCBbbWV0YVRhcmdldHNdLCB0aGlzIHByb3ZpZGVzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHJlZmxlY3RpdmUKICAgKiB0YXJnZXRzIHVzZWQgYnkgdGhlIGxpYnJhcnkgdG8gd2hpY2ggdGhpcyBtZXRhZGF0YSBhcHBsaWVzLgogICAqCiAgICogVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgICoKICAgKiBGb3Igbm93LCB0aGVyZSBpcyBubyBmb3JtYWwgZGVzY3JpcHRpb24gb2Ygd2hhdCBhIHJlZmxlY3RpdmUgdGFyZ2V0IGlzLgogICAqIEluZm9ybWFsbHksIGEgdGFyZ2V0IGlzIGEgbGlicmFyeSwgYSBjbGFzcywgYSBtZXRob2Qgb3IgYSBmaWVsZC4KICAgKgogICAqIERhcnQyanMgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZm9ybWF0cyB0byBzcGVjaWZ5IHRhcmdldHM6CiAgICoKICAgKiAqIEEgY29uc3RhbnQgW0xpc3RdIGNvbnRhaW5pbmcgW1N0cmluZ10gY29uc3RhbnRzIHJlcHJlc2VudGluZyAocXVhbGlmaWVkKQogICAqICAgbmFtZXMgb2YgdGFyZ2V0cyBhbmQgRGFydCB0eXBlcy4KICAgKiAqIEEgc2luZ2xlIFtTdHJpbmddIGNvbnN0YW50IHdob3NlIHZhbHVlIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiAgIChxdWFsaWZpZWQpIG5hbWVzLgogICAqICogQSBzaW5nbGUgRGFydCB0eXBlLgogICAqCiAgICogQSAocXVhbGlmaWVkKSBuYW1lIGlzIHJlc29sdmVkIHRvIGEgdGFyZ2V0IGFzIGZvbGxvd3M6CiAgICoKICAgKiAxLiBJZiB0aGUgcXVhbGlmaWVkIG5hbWUgbWF0Y2hlcyBhIGxpYnJhcnkgbmFtZSwgdGhlIG1hdGNoaW5nIGxpYnJhcnkgaXMKICAgKiAgICB0aGUgdGFyZ2V0LgogICAqIDIuIEVsc2UsIGZpbmQgdGhlIGxvbmdlc3QgcHJlZml4IG9mIHRoZSBuYW1lIHN1Y2ggdGhhdCB0aGUgcHJlZml4IGVuZHMKICAgKiAgICBqdXN0IGJlZm9yZSBhIGAuYCBhbmQgaXMgYSBsaWJyYXJ5IG5hbWUuCiAgICogMy4gVXNlIHRoYXQgbGlicmFyeSBhcyBjdXJyZW50IHNjb3BlLiBJZiBubyBtYXRjaGluZyBwcmVmaXggd2FzIGZvdW5kLCB1c2UKICAgKiAgICB0aGUgY3VycmVudCBsaWJyYXJ5LCBpLmUuLCB0aGUgbGlicmFyeSB3aGVyZSB0aGUgW01pcnJvcnNVc2VkXQogICAqICAgIGFubm90YXRpb24gd2FzIHBsYWNlZC4KICAgKiA0LiBTcGxpdCB0aGUgcmVtYWluaW5nIHN1ZmZpeCAodGhlIGVudGlyZSBuYW1lIGlmIG5vIGxpYnJhcnkgbmFtZSB3YXMKICAgKiAgICBmb3VuZCBpbiBzdGVwIDMpIGludG8gYSBsaXN0IG9mIFtTdHJpbmddIHVzaW5nIGAuYCBhcyBhCiAgICogICAgc2VwYXJhdG9yLgogICAqIDUuIFNlbGVjdCBhbGwgdGFyZ2V0cyBpbiB0aGUgY3VycmVudCBzY29wZSB3aG9zZSBuYW1lIG1hdGNoZXMgYSBbU3RyaW5nXQogICAqICAgIGZyb20gdGhlIGxpc3QuCiAgICoKICAgKiBGb3IgZXhhbXBsZToKICAgKgogICAqICAgICBsaWJyYXJ5IG15LmxpYnJhcnkub25lOwogICAqCiAgICogICAgIGNsYXNzIEEgewogICAqICAgICAgIHZhciBhRmllbGQ7CiAgICogICAgIH0KICAgKgogICAqICAgICBsaWJyYXJ5IG1haW47CiAgICoKICAgKiAgICAgQE1pcnJvcnNVc2VkKHRhcmdldHM6ICJteS5saWJyYXJ5Lm9uZS5BLmFGaWVsZCIpCiAgICogICAgIGltcG9ydCAiZGFydDptaXJyb3JzIjsKICAgKgogICAqIFRoZSBbTWlycm9yc1VzZWRdIGFubm90YXRpb24gc3BlY2lmaWVzIGBBYCBhbmQgYGFGaWVsZGAgZnJvbSBsaWJyYXJ5CiAgICogYG15LmxpYnJhcnkub25lYCBhcyB0YXJnZXRzLiBUaGlzIHdpbGwgbWFyayB0aGUgY2xhc3MgYEFgIGFzIGEgcmVmbGVjdGl2ZQogICAqIHRhcmdldC4gVGhlIHRhcmdldCBzcGVjaWZpY2F0aW9uIGZvciBgYUZpZWxkYCBoYXMgbm8gZWZmZWN0LCBhcyB0aGVyZSBpcwogICAqIG5vIHRhcmdldCBpbiBgbXkubGlicmFyeS5vbmVgIHdpdGggdGhhdCBuYW1lLgogICAqCiAgICogTm90ZSB0aGF0IGV2ZXJ5dGhpbmcgd2l0aGluIGEgdGFyZ2V0IGFsc28gaXMgYXZhaWxhYmxlIGZvciByZWZsZWN0aW9uLgogICAqIFNvLCBpZiBhIGxpYnJhcnkgaXMgc3BlY2lmaWVkIGFzIHRhcmdldCwgYWxsIGNsYXNzZXMgaW4gdGhhdCBsaWJyYXJ5CiAgICogYmVjb21lIHRhcmdldHMgZm9yIHJlZmxlY3Rpb24uIExpa2V3aXNlLCBpZiBhIGNsYXNzIGlzIGEgdGFyZ2V0LCBhbGwKICAgKiBpdHMgbWV0aG9kcyBhbmQgZmllbGRzIGJlY29tZSB0YXJnZXRzIGZvciByZWZsZWN0aW9uLiBBcyBhIGNvbnNlcXVlbmNlLAogICAqIGBhRmllbGRgIGluIHRoZSBhYm92ZSBleGFtcGxlIGlzIGFsc28gYSByZWZsZWN0aXZlIHRhcmdldC4KICAgKgogICAqLwogIGZpbmFsIHRhcmdldHM7CgogIC8qKgogICAqIEEgbGlzdCBvZiBjbGFzc2VzIHRoYXQgd2hlbiB1c2VkIGFzIG1ldGFkYXRhIGluZGljYXRlcyBhIHJlZmxlY3RpdmUKICAgKiB0YXJnZXQuIFNlZSBhbHNvIFt0YXJnZXRzXS4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogVGhlIGZvcm1hdCBmb3Igc3BlY2lmeWluZyB0aGUgbGlzdCBvZiBjbGFzc2VzIGlzIHRoZSBzYW1lIGFzIHVzZWQgZm9yCiAgICogc3BlY2lmeWluZyBbdGFyZ2V0c10uIEhvd2V2ZXIsIGFzIGEgbGlicmFyeSBjYW5ub3QgYmUgdXNlZCBhcyBhIG1ldGFkYXRhCiAgICogYW5ub3RhdGlvbiBpbiBEYXJ0LCBhZGRpbmcgYSBsaWJyYXJ5IHRvIHRoZSBsaXN0IG9mIFttZXRhVGFyZ2V0c10gaGFzIG5vCiAgICogZWZmZWN0LiBJbiBwYXJ0aWN1bGFyLCBhZGRpbmcgYSBsaWJyYXJ5IHRvIFttZXRhVGFyZ2V0c10gZG9lcyBub3QgbWFrZQogICAqIHRoZSBsaWJyYXJ5J3MgY2xhc3NlcyB2YWxpZCBtZXRhZGF0YSBhbm5vdGF0aW9ucyB0byBlbmFibGUgcmVmbGVjdGlvbi4KICAgKgogICAqIElmIGFuIGluc3RhbmNlIG9mIGEgY2xhc3Mgc3BlY2lmaWVkIGluIFttZXRhVGFyZ2V0c10gaXMgdXNlZCBhcwogICAqIG1ldGFkYXRhIGFubm90YXRpb24gb24gYSBsaWJyYXJ5LCBjbGFzcywgZmllbGQgb3IgbWV0aG9kLCB0aGF0IGxpYnJhcnksCiAgICogY2xhc3MsIGZpZWxkIG9yICBtZXRob2QgaXMgYWRkZWQgdG8gdGhlIHNldCBvZiB0YXJnZXRzIGZvciByZWZsZWN0aW9uLgogICAqCiAgICogRXhhbXBsZSB1c2FnZToKICAgKgogICAqICAgICBsaWJyYXJ5IGV4YW1wbGU7CiAgICogICAgIEBNaXJyb3JzVXNlZChtZXRhVGFyZ2V0czogImV4YW1wbGUuUmVmbGVjdGFibGUiKQogICAqICAgICBpbXBvcnQgImRhcnQ6bWlycm9ycyI7CiAgICoKICAgKiAgICAgY2xhc3MgUmVmbGVjdGFibGUgewogICAqICAgICAgIGNvbnN0IFJlZmxlY3RhYmxlKCk7CiAgICogICAgIH0KICAgKgogICAqICAgICBjbGFzcyBGb28gewogICAqICAgICAgIEBSZWZsZWN0YWJsZSgpCiAgICogICAgICAgcmVmbGVjdGFibGVNZXRob2QoKSB7IC4uLiB9CiAgICoKICAgKiAgICAgICBub25SZWZsZWN0YWJsZU1ldGhvZCgpIHsgLi4uIH0KICAgKiAgICAgfQogICAqCiAgICogSW4gdGhlIGFib3ZlIGV4YW1wbGUuIGByZWZsZWN0YWJsZU1ldGhvZGAgaXMgbWFya2VkIGFzIHJlZmxlY3RhYmxlIGJ5CiAgICogdXNpbmcgdGhlIGBSZWZsZWN0YWJsZWAgY2xhc3MsIHdoaWNoIGluIHR1cm4gaXMgc3BlY2lmaWVkIGluIHRoZQogICAqIFttZXRhVGFyZ2V0c10gYW5ub3RhdGlvbi4KICAgKgogICAqIFRoZSBtZXRob2QgYG5vblJlZmxlY3RhYmxlTWV0aG9kYCBsYWNrcyBhIG1ldGFkYXRhIGFubm90YXRpb24gYW5kIHRodXMKICAgKiB3aWxsIG5vdCBiZSByZWZsZWN0YWJsZSBhdCBydW50aW1lLgogICAqLwogIGZpbmFsIG1ldGFUYXJnZXRzOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgbGlicmFyeSBuYW1lcyBvciAiKiIuCiAgICoKICAgKiBXaGVuIHVzZWQgYXMgbWV0YWRhdGEgb24gYW4gaW1wb3J0IG9mICJkYXJ0Om1pcnJvcnMiLCB0aGlzIG1ldGFkYXRhIGRvZXMKICAgKiBub3QgYXBwbHkgdG8gdGhlIGxpYnJhcnkgaW4gd2hpY2ggdGhlIGFubm90YXRpb24gaXMgdXNlZCwgYnV0IGluc3RlYWQKICAgKiBhcHBsaWVzIHRvIHRoZSBvdGhlciBsaWJyYXJpZXMgKGFsbCBsaWJyYXJpZXMgaWYgIioiIGlzIHVzZWQpLgogICAqCiAgICogVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgICoKICAgKiBEYXJ0MmpzIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZvcm1hdHMgdG8gc3BlY2lmeSBsaWJyYXJpZXM6CiAgICoKICAgKiAqIEEgY29uc3RhbnQgW0xpc3RdIGNvbnRhaW5pbmcgW1N0cmluZ10gY29uc3RhbnRzIHJlcHJlc2VudGluZyBuYW1lcyBvZgogICAqICAgbGlicmFyaWVzLgogICAqICogQSBzaW5nbGUgW1N0cmluZ10gY29uc3RhbnQgd2hvc2UgdmFsdWUgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZgogICAqICAgbGlicmFyeSBuYW1lcy4KICAgKgogICAqIENvbmNlcHR1YWxseSwgYSBbTWlycm9yc1VzZWRdIGFubm90YXRpb24gd2l0aCBbb3ZlcnJpZGVdIGhhcyB0aGUgc2FtZQogICAqIGVmZmVjdCBhcyBwbGFjaW5nIHRoZSBhbm5vdGF0aW9uIGRpcmVjdGx5IG9uIHRoZSBpbXBvcnQgb2YgYGRhcnQ6bWlycm9yc2AKICAgKiBpbiBlYWNoIG9mIHRoZSByZWZlcmVuY2VkIGxpYnJhcmllcy4gVGh1cywgaWYgdGhlIGxpYnJhcnkgaGFkIG5vCiAgICogW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9uIGJlZm9yZSwgaXRzIHVuY29uZGl0aW9uYWwgaW1wb3J0IG9mCiAgICogYGRhcnQ6bWlycm9yc2AgaXMgb3ZlcnJpZGRlbiBieSBhbiBhbm5vdGF0ZWQgaW1wb3J0LgogICAqCiAgICogTm90ZSB0aGF0LCBsaWtlIG11bHRpcGxlIGV4cGxpY2l0IFtNaXJyb3JzVXNlZF0gYW5ub3RhdGlvbnMsIHVzaW5nCiAgICogb3ZlcnJpZGUgb24gYSBsaWJyYXJ5IHdpdGggYW4gZXhpc3RpbmcgW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9uIGlzCiAgICogYWRkaXRpdmUuIFRoYXQgaXMsIHRoZSBvdmVyYWxsIHNldCBvZiByZWZsZWN0aXZlIHRhcmdldHMgaXMgdGhlIHVuaW9uCiAgICogb2YgdGhlIHJlZmxlY3RpdmUgdGFyZ2V0cyB0aGF0IGFyaXNlIGZyb20gdGhlIG9yaWdpbmFsIGFuZCB0aGUKICAgKiBvdmVycmlkaW5nIFtNaXJyb3JzVXNlZF0gYW5ub3RhdGlvbnMuCiAgICoKICAgKiBUaGUgdXNlIG9mIFtvdmVycmlkZV0gaXMgb25seSBtZWFuaW5nZnVsIGZvciBsaWJyYXJpZXMgdGhhdCBoYXZlIGFuCiAgICogaW1wb3J0IG9mIGBkYXJ0Om1pcnJvcnNgIHdpdGhvdXQgYW5ub3RhdGlvbiBiZWNhdXNlIG90aGVyd2lzZSBpdCB3b3VsZAogICAqIHdvcmsgZXhhY3RseSB0aGUgc2FtZSB3YXkgd2l0aG91dCB0aGUgW292ZXJyaWRlXSBwYXJhbWV0ZXIuCiAgICoKICAgKiBXaGlsZSB0aGUgYW5ub3RhdGlvbiB3aWxsIGFwcGx5IHRvIHRoZSBnaXZlbiB0YXJnZXQgbGlicmFyaWVzLCB0aGUKICAgKiBbc3ltYm9sc10sIFt0YXJnZXRzXSBhbmQgW21ldGFUYXJnZXRzXSBhcmUgc3RpbGwgZXZhbHVhdGVkIGluIHRoZQogICAqIHNjb3BlIG9mIHRoZSBhbm5vdGF0aW9uLiBUaHVzLCB0byBzZWxlY3QgYSB0YXJnZXQgZnJvbSBsaWJyYXJ5IGBmb29gLAogICAqIGEgcXVhbGlmaWVkIG5hbWUgaGFzIHRvIGJlIHVzZWQgb3IsIGlmIHRoZSB0YXJnZXQgaXMgdmlzaWJsZSBpbiB0aGUKICAgKiBjdXJyZW50IHNjb3BlLCBpdHMgdHlwZSBtYXkgYmUgcmVmZXJlbmNlZC4KICAgKgogICAqIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgbWFya3MgYWxsIHRhcmdldHMgaW4gdGhlIGxpYnJhcnkgYGZvb2AKICAgKiBhcyByZWZsZWN0YWJsZSB0aGF0IGhhdmUgYSBtZXRhZGF0YSBhbm5vdGF0aW9uIHVzaW5nIHRoZSBgUmVmbGVjdGFibGVgCiAgICogY2xhc3MgZnJvbSB0aGUgc2FtZSBsaWJyYXJ5LgogICAqCiAgICogICAgIEBNaXJyb3JzVXNlZChtZXRhVGFyZ2V0czogImZvby5SZWZsZWN0YWJsZSIsIG92ZXJyaWRlOiAiZm9vIikKICAgKgogICAqIEhvd2V2ZXIsIHRoZSBmb2xsb3dpbmcgY29kZSB3b3VsZCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIGBSZWZsZWN0YWJsZWAKICAgKiBjbGFzcyBmcm9tIHRoZSBjdXJyZW50IGxpYnJh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HwVMKQYVAQYlBU5LRAUqBUwFTRJLFgVLT0ZCOgVISEtEKwVJTEEFSEdLSTAFTEwiBUcFTC4FQwUGEgEGTUwYBhVGAgEMZGFydDptaXJyb3JzMW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvbWlycm9yc19pbXBsLmRhcnTAALjELy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgIm1pcnJvcnNfcGF0Y2guZGFydCI7Cgp2YXIgX2RpcnR5ID0gZmFsc2U7IC8vIFNldCB0byB0cnVlIGJ5IHRoZSBWTSB3aGVuIG1vcmUgbGlicmFyaWVzIGFyZSBsb2FkZWQuCgpjbGFzcyBfSW50ZXJuYWxNaXJyb3JFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX21zZzsKICBfSW50ZXJuYWxNaXJyb3JFcnJvcih0aGlzLl9tc2cpOwogIFN0cmluZyB0b1N0cmluZygpID0+IF9tc2c7Cn0KClN0cmluZyBfbihTeW1ib2wgc3ltYm9sKSA9PiBpbnRlcm5hbC5TeW1ib2wuZ2V0TmFtZShzeW1ib2wpOwoKU3ltYm9sIF9zKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIG5ldyBpbnRlcm5hbC5TeW1ib2wudW52YWxpZGF0ZWQobmFtZSk7Cn0KClN5bWJvbCBfY29tcHV0ZVF1YWxpZmllZE5hbWUoRGVjbGFyYXRpb25NaXJyb3Igb3duZXIsIFN5bWJvbCBzaW1wbGVOYW1lKSB7CiAgaWYgKG93bmVyID09IG51bGwpIHJldHVybiBzaW1wbGVOYW1lOwogIHJldHVybiBfcygnJHtfbihvd25lci5xdWFsaWZpZWROYW1lKX0uJHtfbihzaW1wbGVOYW1lKX0nKTsKfQoKU3RyaW5nIF9tYWtlU2lnbmF0dXJlU3RyaW5nKAogICAgVHlwZU1pcnJvciByZXR1cm5UeXBlLCBMaXN0PFBhcmFtZXRlck1pcnJvcj4gcGFyYW1ldGVycykgewogIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgYnVmLndyaXRlKCcoJyk7CiAgYm9vbCBmb3VuZF9vcHRpb25hbF9wb3NpdGlvbmFsID0gZmFsc2U7CiAgYm9vbCBmb3VuZF9vcHRpb25hbF9uYW1lZCA9IGZhbHNlOwoKICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBwYXJhbSA9IHBhcmFtZXRlcnNbaV07CiAgICBpZiAocGFyYW0uaXNPcHRpb25hbCAmJiBwYXJhbS5pc05hbWVkICYmICFmb3VuZF9vcHRpb25hbF9uYW1lZCkgewogICAgICBidWYud3JpdGUoJ3snKTsKICAgICAgZm91bmRfb3B0aW9uYWxfbmFtZWQgPSB0cnVlOwogICAgfQogICAgaWYgKHBhcmFtLmlzT3B0aW9uYWwgJiYgIXBhcmFtLmlzTmFtZWQgJiYgIWZvdW5kX29wdGlvbmFsX3Bvc2l0aW9uYWwpIHsKICAgICAgYnVmLndyaXRlKCdbJyk7CiAgICAgIGZvdW5kX29wdGlvbmFsX3Bvc2l0aW9uYWwgPSB0cnVlOwogICAgfQogICAgaWYgKHBhcmFtLmlzTmFtZWQpIHsKICAgICAgYnVmLndyaXRlKF9uKHBhcmFtLnNpbXBsZU5hbWUpKTsKICAgICAgYnVmLndyaXRlKCc6ICcpOwogICAgfQogICAgYnVmLndyaXRlKF9uKHBhcmFtLnR5cGUucXVhbGlmaWVkTmFtZSkpOwogICAgaWYgKGkgPCAocGFyYW1ldGVycy5sZW5ndGggLSAxKSkgewogICAgICBidWYud3JpdGUoJywgJyk7CiAgICB9CiAgfQogIGlmIChmb3VuZF9vcHRpb25hbF9uYW1lZCkgewogICAgYnVmLndyaXRlKCd9Jyk7CiAgfQogIGlmIChmb3VuZF9vcHRpb25hbF9wb3NpdGlvbmFsKSB7CiAgICBidWYud3JpdGUoJ10nKTsKICB9CiAgYnVmLndyaXRlKCcpIC0+ICcpOwogIGJ1Zi53cml0ZShfbihyZXR1cm5UeXBlLnF1YWxpZmllZE5hbWUpKTsKICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7Cn0KClNvdXJjZUxvY2F0aW9uIF9sb2NhdGlvbihyZWZsZWN0ZWUpIG5hdGl2ZSAiRGVjbGFyYXRpb25NaXJyb3JfbG9jYXRpb24iOwoKTGlzdDxkeW5hbWljPiBfbWV0YWRhdGEocmVmbGVjdGVlKSBuYXRpdmUgJ0RlY2xhcmF0aW9uTWlycm9yX21ldGFkYXRhJzsKCmJvb2wgX3N1YnR5cGVUZXN0KFR5cGUgYSwgVHlwZSBiKSBuYXRpdmUgJ1R5cGVNaXJyb3Jfc3VidHlwZVRlc3QnOwoKY2xhc3MgX0xvY2FsTWlycm9yU3lzdGVtIGV4dGVuZHMgTWlycm9yU3lzdGVtIHsKICBmaW5hbCBUeXBlTWlycm9yIGR5bmFtaWNUeXBlID0gbmV3IF9TcGVjaWFsVHlwZU1pcnJvci5fKCdkeW5hbWljJyk7CiAgZmluYWwgVHlwZU1pcnJvciB2b2lkVHlwZSA9IG5ldyBfU3BlY2lhbFR5cGVNaXJyb3IuXygndm9pZCcpOwoKICB2YXIgX2xpYnJhcmllczsKICBNYXA8VXJpLCBMaWJyYXJ5TWlycm9yPiBnZXQgbGlicmFyaWVzIHsKICAgIGlmICgoX2xpYnJhcmllcyA9PSBudWxsKSB8fCBfZGlydHkpIHsKICAgICAgX2xpYnJhcmllcyA9IG5ldyBNYXA8VXJpLCBMaWJyYXJ5TWlycm9yPigpOwogICAgICBmb3IgKExpYnJhcnlNaXJyb3IgbGliIGluIF9jb21wdXRlTGlicmFyaWVzKCkpIHsKICAgICAgICBfbGlicmFyaWVzW2xpYi51cmldID0gbGliOwogICAgICB9CiAgICAgIF9saWJyYXJpZXMgPSBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxVcmksIExpYnJhcnlNaXJyb3I+KF9saWJyYXJpZXMpOwogICAgICBfZGlydHkgPSBmYWxzZTsKICAgIH0KICAgIHJldHVybiBfbGlicmFyaWVzOwogIH0KCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX2NvbXB1dGVMaWJyYXJpZXMoKSBuYXRpdmUgIk1pcnJvclN5c3RlbV9saWJyYXJpZXMiOwoKICBJc29sYXRlTWlycm9yIF9pc29sYXRlOwogIElzb2xhdGVNaXJyb3IgZ2V0IGlzb2xhdGUgewogICAgaWYgKF9pc29sYXRlID09IG51bGwpIHsKICAgICAgX2lzb2xhdGUgPSBfY29tcHV0ZUlzb2xhdGUoKTsKICAgIH0KICAgIHJldHVybiBfaXNvbGF0ZTsKICB9CgogIHN0YXRpYyBJc29sYXRlTWlycm9yIF9jb21wdXRlSXNvbGF0ZSgpIG5hdGl2ZSAiTWlycm9yU3lzdGVtX2lzb2xhdGUiOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiTWlycm9yU3lzdGVtIGZvciBpc29sYXRlICcke2lzb2xhdGUuZGVidWdOYW1lfSciOwp9CgpjbGFzcyBfU291cmNlTG9jYXRpb24gaW1wbGVtZW50cyBTb3VyY2VMb2NhdGlvbiB7CiAgX1NvdXJjZUxvY2F0aW9uLl8odXJpU3RyaW5nLCB0aGlzLmxpbmUsIHRoaXMuY29sdW1uKQogICAgICA6IHRoaXMuc291cmNlVXJpID0gVXJpLnBhcnNlKHVyaVN0cmluZyk7CgogIC8vIExpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgYXJlIDEtb3JpZ2luLCBvciAwIGlmIHVua25vd24uCiAgZmluYWwgaW50IGxpbmU7CiAgZmluYWwgaW50IGNvbHVtbjsKCiAgZmluYWwgVXJpIHNvdXJjZVVyaTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuIGNvbHVtbiA9PSAwID8gIiRzb3VyY2VVcmk6JGxpbmUiIDogIiRzb3VyY2VVcmk6JGxpbmU6JGNvbHVtbiI7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfTG9jYWxNaXJyb3IgaW1wbGVtZW50cyBNaXJyb3Ige30KCmNsYXNzIF9Mb2NhbElzb2xhdGVNaXJyb3IgZXh0ZW5kcyBfTG9jYWxNaXJyb3IgaW1wbGVtZW50cyBJc29sYXRlTWlycm9yIHsKICBmaW5hbCBTdHJpbmcgZGVidWdOYW1lOwogIGZpbmFsIExpYnJhcnlNaXJyb3Igcm9vdExpYnJhcnk7CgogIF9Mb2NhbElzb2xhdGVNaXJyb3IuXyh0aGlzLmRlYnVnTmFtZSwgdGhpcy5yb290TGlicmFyeSk7CgogIGJvb2wgZ2V0IGlzQ3VycmVudCA9PiB0cnVlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiSXNvbGF0ZU1pcnJvciBvbiAnJGRlYnVnTmFtZSciOwoKICBGdXR1cmU8TGlicmFyeU1pcnJvcj4gbG9hZFVyaShVcmkgdXJpKSBhc3luYyB7CiAgICB2YXIgcmVzdWx0ID0gX2xvYWRVcmkodXJpLnRvU3RyaW5nKCkpOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIC8vIENlbnNvcmVkIGxpYnJhcnkuCiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbm5vdCBsb2FkICR1cmkiKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgTGlicmFyeU1pcnJvciBfbG9hZFVyaShTdHJpbmcgdXJpKSBuYXRpdmUgIklzb2xhdGVNaXJyb3JfbG9hZFVyaSI7Cn0KCmNsYXNzIF9TeW50aGV0aWNBY2Nlc3NvciBpbXBsZW1lbnRzIE1ldGhvZE1pcnJvciB7CiAgZmluYWwgRGVjbGFyYXRpb25NaXJyb3Igb3duZXI7CiAgZmluYWwgU3ltYm9sIHNpbXBsZU5hbWU7CiAgZmluYWwgYm9vbCBpc0dldHRlcjsKICBmaW5hbCBib29sIGlzU3RhdGljOwogIGZpbmFsIGJvb2wgaXNUb3BMZXZlbDsKICBmaW5hbCBfdGFyZ2V0OwoKICBfU3ludGhldGljQWNjZXNzb3IodGhpcy5vd25lciwgdGhpcy5zaW1wbGVOYW1lLCB0aGlzLmlzR2V0dGVyLCB0aGlzLmlzU3RhdGljLAogICAgICB0aGlzLmlzVG9wTGV2ZWwsIHRoaXMuX3RhcmdldCk7CgogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IHRydWU7CiAgYm9vbCBnZXQgaXNSZWd1bGFyTWV0aG9kID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzT3BlcmF0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvciA9PiBmYWxzZTsKICBib29sIGdldCBpc0NvbnN0Q29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNGYWN0b3J5Q29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiBmYWxzZTsKICBib29sIGdldCBpc1JlZGlyZWN0aW5nQ29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNBYnN0cmFjdCA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4gIWlzR2V0dGVyOwogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBfbihzaW1wbGVOYW1lKS5zdGFydHNXaXRoKCdfJyk7CgogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSA9PiBfY29tcHV0ZVF1YWxpZmllZE5hbWUob3duZXIsIHNpbXBsZU5hbWUpOwogIFN5bWJvbCBnZXQgY29uc3RydWN0b3JOYW1lID0+IFN5bWJvbC5lbXB0eTsKCiAgVHlwZU1pcnJvciBnZXQgcmV0dXJuVHlwZSA9PiBfdGFyZ2V0LnR5cGU7CiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzIHsKICAgIGlmIChpc0dldHRlcikgcmV0dXJuIGNvbnN0IDxQYXJhbWV0ZXJNaXJyb3I+W107CiAgICByZXR1cm4gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PFBhcmFtZXRlck1pcnJvcj4oCiAgICAgICAgPFBhcmFtZXRlck1pcnJvcj5bbmV3IF9TeW50aGV0aWNTZXR0ZXJQYXJhbWV0ZXIodGhpcywgdGhpcy5fdGFyZ2V0KV0pOwogIH0KCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uID0+IG51bGw7CiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhID0+IGNvbnN0IDxJbnN0YW5jZU1pcnJvcj5bXTsKICBTdHJpbmcgZ2V0IHNvdXJjZSA9PiBudWxsOwp9CgpjbGFzcyBfU3ludGhldGljU2V0dGVyUGFyYW1ldGVyIGltcGxlbWVudHMgUGFyYW1ldGVyTWlycm9yIHsKICBmaW5hbCBEZWNsYXJhdGlvbk1pcnJvciBvd25lcjsKICBmaW5hbCBWYXJpYWJsZU1pcnJvciBfdGFyZ2V0OwoKICBfU3ludGhldGljU2V0dGVyUGFyYW1ldGVyKHRoaXMub3duZXIsIHRoaXMuX3RhcmdldCk7CgogIFN5bWJvbCBnZXQgc2ltcGxlTmFtZSA9PiBfdGFyZ2V0LnNpbXBsZU5hbWU7CiAgU3ltYm9sIGdldCBxdWFsaWZpZWROYW1lID0+IF9jb21wdXRlUXVhbGlmaWVkTmFtZShvd25lciwgc2ltcGxlTmFtZSk7CiAgVHlwZU1pcnJvciBnZXQgdHlwZSA9PiBfdGFyZ2V0LnR5cGU7CgogIGJvb2wgZ2V0IGlzT3B0aW9uYWwgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNOYW1lZCA9PiBmYWxzZTsKICBib29sIGdldCBpc1N0YXRpYyA9PiBmYWxzZTsKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNGaW5hbCA9PiB0cnVlOwogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBmYWxzZTsKICBib29sIGdldCBoYXNEZWZhdWx0VmFsdWUgPT4gZmFsc2U7CiAgSW5zdGFuY2VNaXJyb3IgZ2V0IGRlZmF1bHRWYWx1ZSA9PiBudWxsOwogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiA9PiBudWxsOwogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSA9PiBjb25zdCA8SW5zdGFuY2VNaXJyb3I+W107Cn0KCmFic3RyYWN0IGNsYXNzIF9Mb2NhbE9iamVjdE1pcnJvciBleHRlbmRzIF9Mb2NhbE1pcnJvciBpbXBsZW1lbnRzIE9iamVjdE1pcnJvciB7CiAgX2ludm9rZShyZWZsZWN0ZWUsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCBhcmd1bWVudE5hbWVzKTsKICBfaW52b2tlR2V0dGVyKHJlZmxlY3RlZSwgZ2V0dGVyTmFtZSk7CiAgX2ludm9rZVNldHRlcihyZWZsZWN0ZWUsIHNldHRlck5hbWUsIHZhbHVlKTsKCiAgZmluYWwgX3JlZmxlY3RlZTsgLy8gTWF5IGJlIGEgTWlycm9yUmVmZXJlbmNlIG9yIGFuIG9yZGluYXJ5IG9iamVjdC4KCiAgX0xvY2FsT2JqZWN0TWlycm9yLl8odGhpcy5fcmVmbGVjdGVlKTsKCiAgSW5zdGFuY2VNaXJyb3IgaW52b2tlKFN5bWJvbCBtZW1iZXJOYW1lLCBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIGludCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzID0gcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGg7CiAgICBpbnQgbnVtTmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cyAhPSBudWxsID8gbmFtZWRBcmd1bWVudHMubGVuZ3RoIDogMDsKICAgIGludCBudW1Bcmd1bWVudHMgPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgbnVtTmFtZWRBcmd1bWVudHM7CiAgICBMaXN0IGFyZ3VtZW50cyA9IG5ldyBMaXN0KG51bUFyZ3VtZW50cyk7CiAgICBhcmd1bWVudHMuc2V0UmFuZ2UoMCwgbnVtUG9zaXRpb25hbEFyZ3VtZW50cywgcG9zaXRpb25hbEFyZ3VtZW50cyk7CiAgICBMaXN0IG5hbWVzID0gbmV3IExpc3QobnVtTmFtZWRBcmd1bWVudHMpOwogICAgaW50IGFyZ3VtZW50SW5kZXggPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzOwogICAgaW50IG5hbWVJbmRleCA9IDA7CiAgICBpZiAobnVtTmFtZWRBcmd1bWVudHMgPiAwKSB7CiAgICAgIG5hbWVkQXJndW1lbnRzLmZvckVhY2goKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50SW5kZXgrK10gPSB2YWx1ZTsKICAgICAgICBuYW1lc1tuYW1lSW5kZXgrK10gPSBfbihuYW1lKTsKICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIHJlZmxlY3QodGhpcy5faW52b2tlKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpLCBhcmd1bWVudHMsIG5hbWVzKSk7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBnZXRGaWVsZChTeW1ib2wgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIHJlZmxlY3QodGhpcy5faW52b2tlR2V0dGVyKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpKSk7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBzZXRGaWVsZChTeW1ib2wgbWVtYmVyTmFtZSwgT2JqZWN0IHZhbHVlKSB7CiAgICB0aGlzLl9pbnZva2VTZXR0ZXIoX3JlZmxlY3RlZSwgX24obWVtYmVyTmFtZSksIHZhbHVlKTsKICAgIHJldHVybiByZWZsZWN0KHZhbHVlKTsKICB9CgogIGRlbGVnYXRlKEludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKGludm9jYXRpb24uaXNNZXRob2QpIHsKICAgICAgcmV0dXJuIHRoaXMKICAgICAgICAgIC5pbnZva2UoaW52b2NhdGlvbi5tZW1iZXJOYW1lLCBpbnZvY2F0aW9uLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgICAgaW52b2NhdGlvbi5uYW1lZEFyZ3VtZW50cykKICAgICAgICAgIC5yZWZsZWN0ZWU7CiAgICB9CiAgICBpZiAoaW52b2NhdGlvbi5pc0dldHRlcikgewogICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZChpbnZvY2F0aW9uLm1lbWJlck5hbWUpLnJlZmxlY3RlZTsKICAgIH0KICAgIGlmIChpbnZvY2F0aW9uLmlzU2V0dGVyKSB7CiAgICAgIHZhciB1bndyYXBwZWQgPSBfbihpbnZvY2F0aW9uLm1lbWJlck5hbWUpOwogICAgICB2YXIgd2l0aG91dEVxdWFsID0gX3ModW53cmFwcGVkLnN1YnN0cmluZygwLCB1bndyYXBwZWQubGVuZ3RoIC0gMSkpOwogICAgICB2YXIgYXJnID0gaW52b2NhdGlvbi5wb3NpdGlvbmFsQXJndW1lbnRzWzBdOwogICAgICB0aGlzLnNldEZpZWxkKHdpdGhvdXRFcXVhbCwgYXJnKS5yZWZsZWN0ZWU7CiAgICAgIHJldHVybiBhcmc7CiAgICB9CiAgICB0aHJvdyAiVU5SRUFDSEFCTEUiOwogIH0KfQoKY2xhc3MgX0xvY2FsSW5zdGFuY2VNaXJyb3IgZXh0ZW5kcyBfTG9jYWxPYmplY3RNaXJyb3IKICAgIGltcGxlbWVudHMgSW5zdGFuY2VNaXJyb3IgewogIF9Mb2NhbEluc3RhbmNlTWlycm9yLl8ocmVmbGVjdGVlKSA6IHN1cGVyLl8ocmVmbGVjdGVlKTsKCiAgQ2xhc3NNaXJyb3IgX3R5cGU7CiAgQ2xhc3NNaXJyb3IgZ2V0IHR5cGUgewogICAgaWYgKF90eXBlID09IG51bGwpIHsKICAgICAgLy8gTm90ZSBpdCBub3Qgc2FmZSB0byB1c2UgcmVmbGVjdGVlLnJ1bnRpbWVUeXBlIGJlY2F1c2UgcnVudGltZVR5cGUgbWF5CiAgICAgIC8vIGJlIG92ZXJyaWRkZW4uCiAgICAgIF90eXBlID0gcmVmbGVjdFR5cGUoX2NvbXB1dGVUeXBlKHJlZmxlY3RlZSkpOwogICAgfQogICAgcmV0dXJuIF90eXBlOwogIH0KCiAgLy8gTG9jYWxJbnN0YW5jZU1pcnJvcnMgYWx3YXlzIHJlZmxlY3QgbG9jYWwgaW5zdGFuY2VzCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVlID0+IHRydWU7CgogIGdldCByZWZsZWN0ZWUgPT4gX3JlZmxlY3RlZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0luc3RhbmNlTWlycm9yIG9uICR7RXJyb3Iuc2FmZVRvU3RyaW5nKF9yZWZsZWN0ZWUpfSc7CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBfTG9jYWxJbnN0YW5jZU1pcnJvciAmJgogICAgICAgIGlkZW50aWNhbChfcmVmbGVjdGVlLCBvdGhlci5fcmVmbGVjdGVlKTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgLy8gQXZvaWQgaGFzaCBjb2xsaXNpb25zIHdpdGggdGhlIHJlZmxlY3RlZS4gVGhpcyBjb25zdGFudCBpcyBpbiBTbWkgcmFuZ2UKICAgIC8vIGFuZCBoYXBwZW5zIHRvIGJlIHRoZSBpbm5lciBwYWRkaW5nIGZyb20gUkZDIDIxMDQuCiAgICByZXR1cm4gaWRlbnRpdHlIYXNoQ29kZShfcmVmbGVjdGVlKSBeIDB4MzYzNjM2MzY7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBnZXRGaWVsZChTeW1ib2wgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIHJlZmxlY3QoX2ludm9rZUdldHRlcihfcmVmbGVjdGVlLCBfbihtZW1iZXJOYW1lKSkpOwogIH0KCiAgSW5zdGFuY2VNaXJyb3Igc2V0RmllbGQoU3ltYm9sIG1lbWJlck5hbWUsIGFyZykgewogICAgX2ludm9rZVNldHRlcihfcmVmbGVjdGVlLCBfbihtZW1iZXJOYW1lKSwgYXJnKTsKICAgIHJldHVybiByZWZsZWN0KGFyZyk7CiAgfQoKICAvLyBPdmVycmlkZSB0byBpbmNsdWRlIHRoZSByZWNlaXZlciBpbiB0aGUgYXJndW1lbnRzLgogIEluc3RhbmNlTWlycm9yIGludm9rZShTeW1ib2wgbWVtYmVyTmFtZSwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKSB7CiAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IHBvc2l0aW9uYWxBcmd1bWVudHMubGVuZ3RoICsgMTsgLy8gUmVjZWl2ZXIuCiAgICBpbnQgbnVtTmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cyAhPSBudWxsID8gbmFtZWRBcmd1bWVudHMubGVuZ3RoIDogMDsKICAgIGludCBudW1Bcmd1bWVudHMgPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgbnVtTmFtZWRBcmd1bWVudHM7CiAgICBMaXN0IGFyZ3VtZW50cyA9IG5ldyBMaXN0KG51bUFyZ3VtZW50cyk7CiAgICBhcmd1bWVudHNbMF0gPSBfcmVmbGVjdGVlOyAvLyBSZWNlaXZlci4KICAgIGFyZ3VtZW50cy5zZXRSYW5nZSgxLCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzLCBwb3NpdGlvbmFsQXJndW1lbnRzKTsKICAgIExpc3QgbmFtZXMgPSBuZXcgTGlzdChudW1OYW1lZEFyZ3VtZW50cyk7CiAgICBpbnQgYXJndW1lbnRJbmRleCA9IG51bVBvc2l0aW9uYWxBcmd1bWVudHM7CiAgICBpbnQgbmFtZUluZGV4ID0gMDsKICAgIGlmIChudW1OYW1lZEFyZ3VtZW50cyA+IDApIHsKICAgICAgbmFtZWRBcmd1bWVudHMuZm9yRWFjaCgobmFtZSwgdmFsdWUpIHsKICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRJbmRleCsrXSA9IHZhbHVlOwogICAgICAgIG5hbWVzW25hbWVJbmRleCsrXSA9IF9uKG5hbWUpOwogICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gcmVmbGVjdCh0aGlzLl9pbnZva2UoX3JlZmxlY3RlZSwgX24obWVtYmVyTmFtZSksIGFyZ3VtZW50cywgbmFtZXMpKTsKICB9CgogIF9pbnZva2UocmVmbGVjdGVlLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cywgYXJndW1lbnROYW1lcykKICAgICAgbmF0aXZlICdJbnN0YW5jZU1pcnJvcl9pbnZva2UnOwoKICBfaW52b2tlR2V0dGVyKHJlZmxlY3RlZSwgZ2V0dGVyTmFtZSkgbmF0aXZlICdJbnN0YW5jZU1pcnJvcl9pbnZva2VHZXR0ZXInOwoKICBfaW52b2tlU2V0dGVyKHJlZmxlY3RlZSwgc2V0dGVyTmFtZSwgdmFsdWUpCiAgICAgIG5hdGl2ZSAnSW5zdGFuY2VNaXJyb3JfaW52b2tlU2V0dGVyJzsKCiAgc3RhdGljIF9jb21wdXRlVHlwZShyZWZsZWN0ZWUpIG5hdGl2ZSAnSW5zdGFuY2VNaXJyb3JfY29tcHV0ZVR5cGUnOwp9CgpjbGFzcyBfTG9jYWxDbG9zdXJlTWlycm9yIGV4dGVuZHMgX0xvY2FsSW5zdGFuY2VNaXJyb3IKICAgIGltcGxlbWVudHMgQ2xvc3VyZU1pcnJvciB7CiAgX0xvY2FsQ2xvc3VyZU1pcnJvci5fKHJlZmxlY3RlZSkgOiBzdXBlci5fKHJlZmxlY3RlZSk7CgogIE1ldGhvZE1pcnJvciBfZnVuY3Rpb247CiAgTWV0aG9kTWlycm9yIGdldCBmdW5jdGlvbiB7CiAgICBpZiAoX2Z1bmN0aW9uID09IG51bGwpIHsKICAgICAgX2Z1bmN0aW9uID0gX2NvbXB1dGVGdW5jdGlvbihyZWZsZWN0ZWUpOwogICAgfQogICAgcmV0dXJuIF9mdW5jdGlvbjsKICB9CgogIEluc3RhbmNlTWlycm9yIGFwcGx5KExpc3Q8T2JqZWN0PiBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgT2JqZWN0PiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIHJldHVybiB0aGlzLmludm9rZSgjY2FsbCwgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkNsb3N1cmVNaXJyb3Igb24gJyR7RXJyb3Iuc2FmZVRvU3RyaW5nKF9yZWZsZWN0ZWUpfSciOwoKICBzdGF0aWMgX2NvbXB1dGVGdW5jdGlvbihyZWZsZWN0ZWUpIG5hdGl2ZSAnQ2xvc3VyZU1pcnJvcl9mdW5jdGlvbic7Cn0KCmFic3RyYWN0IGNsYXNzIF9Mb2NhbFR5cGVNaXJyb3IgewogIFR5cGUgZ2V0IF9yZWZsZWN0ZWRUeXBlOwp9CgpjbGFzcyBfTG9jYWxDbGFzc01pcnJvciBleHRlbmRzIF9Mb2NhbE9iamVjdE1pcnJvcgogICAgaW1wbGVtZW50cyBDbGFzc01pcnJvciwgX0xvY2FsVHlwZU1pcnJvciB7CiAgZmluYWwgVHlwZSBfcmVmbGVjdGVkVHlwZTsKICBTeW1ib2wgX3NpbXBsZU5hbWU7CiAgRGVjbGFyYXRpb25NaXJyb3IgX293bmVyOwogIGZpbmFsIGJvb2wgaXNBYnN0cmFjdDsKICBmaW5hbCBib29sIF9pc0dlbmVyaWM7CgogIC8vIFNpbmNlIERhcnQgMiwgbWl4aW5zIGFyZSBlcmFzZWQgYnkga2VybmVsIHRyYW5zZm9ybWF0aW9uLgogIC8vIFJlc3VsdGluZyBjbGFzc2VzIGhhdmUgdGhpcyBmbGFnIHNldCwgYW5kIG1peGVkLWluIHR5cGUgaXMgcHVsbGVkIGludG8KICAvLyB0aGUgZW5kIG9mIGludGVyZmFjZXMgbGlzdC4KICBmaW5hbCBib29sIF9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbjsKCiAgZmluYWwgYm9vbCBfaXNHZW5lcmljRGVjbGFyYXRpb247CiAgZmluYWwgYm9vbCBpc0VudW07CiAgVHlwZSBfaW5zdGFudGlhdG9yOwoKICBfTG9jYWxDbGFzc01pcnJvci5fKAogICAgICByZWZsZWN0ZWUsCiAgICAgIHJlZmxlY3RlZFR5cGUsCiAgICAgIFN0cmluZyBzaW1wbGVOYW1lLAogICAgICB0aGlzLl9vd25lciwKICAgICAgdGhpcy5pc0Fic3RyYWN0LAogICAgICB0aGlzLl9pc0dlbmVyaWMsCiAgICAgIHRoaXMuX2lzVHJhbnNmb3JtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICB0aGlzLl9pc0dlbmVyaWNEZWNsYXJhdGlvbiwKICAgICAgdGhpcy5pc0VudW0pCiAgICAgIDogdGhpcy5fc2ltcGxlTmFtZSA9IF9zKHNpbXBsZU5hbWUpLAogICAgICAgIHRoaXMuX3JlZmxlY3RlZFR5cGUgPSByZWZsZWN0ZWRUeXBlLAogICAgICAgIHRoaXMuX2luc3RhbnRpYXRvciA9IHJlZmxlY3RlZFR5cGUsCiAgICAgICAgc3VwZXIuXyhyZWZsZWN0ZWUpOwoKICBib29sIGdldCBoYXNSZWZsZWN0ZWRUeXBlID0+ICFfaXNHZW5lcmljRGVjbGFyYXRpb247CiAgVHlwZSBnZXQgcmVmbGVjdGVkVHlwZSB7CiAgICBpZiAoIWhhc1JlZmxlY3RlZFR5cGUpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiRGVjbGFyYXRpb25zIG9mIGdlbmVyaWNzIGhhdmUgbm8gcmVmbGVjdGVkIHR5cGUiKTsKICAgIH0KICAgIHJldHVybiBfcmVmbGVjdGVkVHlwZTsKICB9CgogIFN5bWJvbCBnZXQgc2ltcGxlTmFtZSB7CiAgICAvLyBBbGwgYnV0IGFub255bW91cyBtaXhpbiBhcHBsaWNhdGlvbnMgaGF2ZSB0aGVpciBuYW1lIHNldCBhdCBjb25zdHJ1Y3Rpb24uCiAgICBpZiAoX3NpbXBsZU5hbWUgPT0gbnVsbCkgewogICAgICBfc2ltcGxlTmFtZSA9IHRoaXMuX21peGluQXBwbGljYXRpb25OYW1lOwogICAgfQogICAgcmV0dXJuIF9zaW1wbGVOYW1lOwogIH0KCiAgU3ltYm9sIF9xdWFsaWZpZWROYW1lOwogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSB7CiAgICBpZiAoX3F1YWxpZmllZE5hbWUgPT0gbnVsbCkgewogICAgICBfcXVhbGlmaWVkTmFtZSA9IF9jb21wdXRlUXVhbGlmaWVkTmFtZShvd25lciwgc2ltcGxlTmFtZSk7CiAgICB9CiAgICByZXR1cm4gX3F1YWxpZmllZE5hbWU7CiAgfQoKICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXIgewogICAgaWYgKF9vd25lciA9PSBudWxsKSB7CiAgICAgIHZhciB1cmkgPSBfTG9jYWxDbGFzc01pcnJvci5fbGlicmFyeVVyaShfcmVmbGVjdGVlKTsKICAgICAgX293bmVyID0gY3VycmVudE1pcnJvclN5c3RlbSgpLmxpYnJhcmllc1tVcmkucGFyc2UodXJpKV07CiAgICB9CiAgICByZXR1cm4gX293bmVyOwogIH0KCiAgYm9vbCBnZXQgaXNQcml2YXRlID0+IF9uKHNpbXBsZU5hbWUpLnN0YXJ0c1dpdGgoJ18nKTsKCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiB0cnVlOwoKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gewogICAgcmV0dXJuIF9sb2NhdGlvbihfcmVmbGVjdGVlKTsKICB9CgogIF9Mb2NhbENsYXNzTWlycm9yIF90cnVlU3VwZXJjbGFzc0ZpZWxkOwogIF9Mb2NhbENsYXNzTWlycm9yIGdldCBfdHJ1ZVN1cGVyY2xhc3MgewogICAgaWYgKF90cnVlU3VwZXJjbGFzc0ZpZWxkID09IG51bGwpIHsKICAgICAgVHlwZSBzdXBlcnR5cGUgPSBpc09yaWdpbmFsRGVjbGFyYXRpb24KICAgICAgICAgID8gX3N1cGVydHlwZShfcmVmbGVjdGVkVHlwZSkKICAgICAgICAgIDogX3N1cGVydHlwZUluc3RhbnRpYXRlZChfcmVmbGVjdGVkVHlwZSk7CiAgICAgIGlmIChzdXBlcnR5cGUgPT0gbnVsbCkgewogICAgICAgIC8vIE9iamVjdCBoYXMgbm8gc3VwZXJjbGFzcy4KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBfdHJ1ZVN1cGVyY2xhc3NGaWVsZCA9IHJlZmxlY3RUeXBlKHN1cGVydHlwZSk7CiAgICAgIF90cnVlU3VwZXJjbGFzc0ZpZWxkLl9pbnN0YW50aWF0b3IgPSBfaW5zdGFudGlhdG9yOwogICAgfQogICAgcmV0dXJuIF90cnVlU3VwZXJjbGFzc0ZpZWxkOwogIH0KCiAgQ2xhc3NNaXJyb3IgZ2V0IHN1cGVyY2xhc3MgewogICAgcmV0dXJuIF90cnVlU3VwZXJjbGFzczsKICB9CgogIHZhciBfc3VwZXJpbnRlcmZhY2VzOwogIExpc3Q8Q2xhc3NNaXJyb3I+IGdldCBzdXBlcmludGVyZmFjZXMgewogICAgaWYgKF9zdXBlcmludGVyZmFjZXMgPT0gbnVsbCkgewogICAgICB2YXIgaW50ZXJmYWNlVHlwZXMgPSBpc09yaWdpbmFsRGVjbGFyYXRpb24KICAgICAgICAgID8gX25hdGl2ZUludGVyZmFjZXMoX3JlZmxlY3RlZFR5cGUpCiAgICAgICAgICA6IF9uYXRpdmVJbnRlcmZhY2VzSW5zdGFudGlhdGVkKF9yZWZsZWN0ZWRUeXBlKTsKICAgICAgaWYgKF9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgIGludGVyZmFjZVR5cGVzID0gaW50ZXJmYWNlVHlwZXMuc3VibGlzdCgwLCBpbnRlcmZhY2VUeXBlcy5sZW5ndGggLSAxKTsKICAgICAgfQogICAgICB2YXIgaW50ZXJmYWNlTWlycm9ycyA9IG5ldyBMaXN0PENsYXNzTWlycm9yPigpOwogICAgICBmb3IgKHZhciBpbnRlcmZhY2VUeXBlIGluIGludGVyZmFjZVR5cGVzKSB7CiAgICAgICAgaW50ZXJmYWNlTWlycm9ycy5hZGQocmVmbGVjdFR5cGUoaW50ZXJmYWNlVHlwZSkpOwogICAgICB9CiAgICAgIF9zdXBlcmludGVyZmFjZXMgPQogICAgICAgICAgbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PENsYXNzTWlycm9yPihpbnRlcmZhY2VNaXJyb3JzKTsKICAgIH0KICAgIHJldHVybiBfc3VwZXJpbnRlcmZhY2VzOwogIH0KCiAgZ2V0IF9taXhpbkFwcGxpY2F0aW9uTmFtZSB7CiAgICB2YXIgbWl4aW5zID0gbmV3IExpc3Q8Q2xhc3NNaXJyb3I+KCk7CiAgICB2YXIga2xhc3MgPSB0aGlzOwogICAgd2hpbGUgKF9uYXRpdmVNaXhpbihrbGFzcy5fcmVmbGVjdGVkVHlwZSkgIT0gbnVsbCkgewogICAgICBtaXhpbnMuYWRkKGtsYXNzLm1peGluKTsKICAgICAga2xhc3MgPSBrbGFzcy5zdXBlcmNsYXNzOwogICAgfQogICAgcmV0dXJuIF9zKF9uKGtsYXNzLnF1YWxpZmllZE5hbWUpICsKICAgICAgICAnIHdpdGggJyArCiAgICAgICAgbWl4aW5zLnJldmVyc2VkLm1hcCgobSkgPT4gX24obS5xdWFsaWZpZWROYW1lKSkuam9pbignLCAnKSk7CiAgfQoKICB2YXIgX21peGluOwogIENsYXNzTWlycm9yIGdldCBtaXhpbiB7CiAgICBpZiAoX21peGluID09IG51bGwpIHsKICAgICAgVHlwZSBtaXhpblR5cGUgPQogICAgICAgICAgX25hdGl2ZU1peGluSW5zdGFudGlhdGVkKF9yZWZsZWN0ZWRUeXBlLCBfaW5zdGFudGlhdG9yKTsKICAgICAgaWYgKG1peGluVHlwZSA9PSBudWxsKSB7CiAgICAgICAgLy8gVGhlIHJlZmxlY3RlZSBpcyBub3QgYSBtaXhpbiBhcHBsaWNhdGlvbi4KICAgICAgICBfbWl4aW4gPSB0aGlzOwogICAgICB9IGVsc2UgewogICAgICAgIF9taXhpbiA9IHJlZmxlY3RUeXBlKG1peGluVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfbWl4aW47CiAgfQoKICB2YXIgX2NhY2hlZFN0YXRpY01lbWJlcnM7CiAgTWFwPFN5bWJvbCwgTWV0aG9kTWlycm9yPiBnZXQgc3RhdGljTWVtYmVycyB7CiAgICBpZiAoX2NhY2hlZFN0YXRpY01lbWJlcnMgPT0gbnVsbCkgewogICAgICB2YXIgcmVzdWx0ID0gbmV3IE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4oKTsKICAgICAgZGVjbGFyYXRpb25zLnZhbHVlcy5mb3JFYWNoKChkZWNsKSB7CiAgICAgICAgaWYgKGRlY2wgaXMgTWV0aG9kTWlycm9yICYmIGRlY2wuaXNTdGF0aWMgJiYgIWRlY2wuaXNDb25zdHJ1Y3RvcikgewogICAgICAgICAgcmVzdWx0W2RlY2wuc2ltcGxlTmFtZV0gPSBkZWNsOwogICAgICAgIH0KICAgICAgICBpZiAoZGVjbCBpcyBWYXJpYWJsZU1pcnJvciAmJiBkZWNsLmlzU3RhdGljKSB7CiAgICAgICAgICB2YXIgZ2V0dGVyTmFtZSA9IGRlY2wuc2ltcGxlTmFtZTsKICAgICAgICAgIHJlc3VsdFtnZXR0ZXJOYW1lXSA9CiAgICAgICAgICAgICAgbmV3IF9TeW50aGV0aWNBY2Nlc3Nvcih0aGlzLCBnZXR0ZXJOYW1lLCB0cnVlLCB0cnVlLCBmYWxzZSwgZGVjbCk7CiAgICAgICAgICBpZiAoIWRlY2wuaXNGaW5hbCkgewogICAgICAgICAgICB2YXIgc2V0dGVyTmFtZSA9IF9hc1NldHRlcihkZWNsLnNpbXBsZU5hbWUsIHRoaXMub3duZXIpOwogICAgICAgICAgICByZXN1bHRbc2V0dGVyTmFtZV0gPSBuZXcgX1N5bnRoZXRpY0FjY2Vzc29yKAogICAgICAgICAgICAgICAgdGhpcywgc2V0dGVyTmFtZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBkZWNsKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICBfY2FjaGVkU3RhdGljTWVtYmVycyA9CiAgICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTeW1ib2wsIE1ldGhvZE1pcnJvcj4ocmVzdWx0KTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkU3RhdGljTWVtYmVyczsKICB9CgogIHZhciBfY2FjaGVkSW5zdGFuY2VNZW1iZXJzOwogIE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4gZ2V0IGluc3RhbmNlTWVtYmVycyB7CiAgICBpZiAoX2NhY2hlZEluc3RhbmNlTWVtYmVycyA9PSBudWxsKSB7CiAgICAgIHZhciByZXN1bHQgPSBuZXcgTWFwPFN5bWJvbCwgTWV0aG9kTWlycm9yPigpOwogICAgICBpZiAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgICAgcmVzdWx0LmFkZEFsbChzdXBlcmNsYXNzLmluc3RhbmNlTWVtYmVycyk7CiAgICAgIH0KICAgICAgZGVjbGFyYXRpb25zLnZhbHVlcy5mb3JFYWNoKChkZWNsKSB7CiAgICAgICAgaWYgKGRlY2wgaXMgTWV0aG9kTWlycm9yICYmCiAgICAgICAgICAgICFkZWNsLmlzU3RhdGljICYmCiAgICAgICAgICAgICFkZWNsLmlzQ29uc3RydWN0b3IgJiYKICAgICAgICAgICAgIWRlY2wuaXNBYnN0cmFjdCkgewogICAgICAgICAgcmVzdWx0W2RlY2wuc2ltcGxlTmFtZV0gPSBkZWNsOwogICAgICAgIH0KICAgICAgICBpZiAoZGVjbCBpcyBWYXJpYWJsZU1pcnJvciAmJiAhZGVjbC5pc1N0YXRpYykgewogICAgICAgICAgdmFyIGdldHRlck5hbWUgPSBkZWNsLnNpbXBsZU5hbWU7CiAgICAgICAgICByZXN1bHRbZ2V0dGVyTmFtZV0gPSBuZXcgX1N5bnRoZXRpY0FjY2Vzc29yKAogICAgICAgICAgICAgIHRoaXMsIGdldHRlck5hbWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZGVjbCk7CiAgICAgICAgICBpZiAoIWRlY2wuaXNGaW5hbCkgewogICAgICAgICAgICB2YXIgc2V0dGVyTmFtZSA9IF9hc1NldHRlcihkZWNsLnNpbXBsZU5hbWUsIHRoaXMub3duZXIpOwogICAgICAgICAgICByZXN1bHRbc2V0dGVyTmFtZV0gPSBuZXcgX1N5bnRoZXRpY0FjY2Vzc29yKAogICAgICAgICAgICAgICAgdGhpcywgc2V0dGVyTmFtZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZGVjbCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgX2NhY2hlZEluc3RhbmNlTWVtYmVycyA9CiAgICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTeW1ib2wsIE1ldGhvZE1pcnJvcj4ocmVzdWx0KTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkSW5zdGFuY2VNZW1iZXJzOwogIH0KCiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IF9kZWNsYXJhdGlvbnM7CiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IGdldCBkZWNsYXJhdGlvbnMgewogICAgaWYgKF9kZWNsYXJhdGlvbnMgIT0gbnVsbCkgcmV0dXJuIF9kZWNsYXJhdGlvbnM7CgogICAgdmFyIGRlY2xzID0gbmV3IE1hcDxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPigpOwoKICAgIHZhciBtZW1iZXJzID0gKG1peGluIGFzIF9Mb2NhbENsYXNzTWlycm9yKS5fY29tcHV0ZU1lbWJlcnMoCiAgICAgICAgX2luc3RhbnRpYXRvciwgKG1peGluIGFzIF9Mb2NhbENsYXNzTWlycm9yKS5fcmVmbGVjdGVlKTsKICAgIGZvciAodmFyIG1lbWJlciBpbiBtZW1iZXJzKSB7CiAgICAgIGRlY2xzW21lbWJlci5zaW1wbGVOYW1lXSA9IG1lbWJlcjsKICAgIH0KCiAgICB2YXIgY29uc3RydWN0b3JzID0gX2NvbXB1dGVDb25zdHJ1Y3RvcnMoX2luc3RhbnRpYXRvciwgX3JlZmxlY3RlZSk7CiAgICB2YXIgc3RyaW5nTmFtZSA9IF9uKHNpbXBsZU5hbWUpOwogICAgZm9yICh2YXIgY29uc3RydWN0b3IgaW4gY29uc3RydWN0b3JzKSB7CiAgICAgIGNvbnN0cnVjdG9yLl9wYXRjaENvbnN0cnVjdG9yTmFtZShzdHJpbmdOYW1lKTsKICAgICAgZGVjbHNbY29uc3RydWN0b3Iuc2ltcGxlTmFtZV0gPSBjb25zdHJ1Y3RvcjsKICAgIH0KCiAgICBmb3IgKHZhciB0eXBlVmFyaWFibGUgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICBkZWNsc1t0eXBlVmFyaWFibGUuc2ltcGxlTmFtZV0gPSB0eXBlVmFyaWFibGU7CiAgICB9CgogICAgcmV0dXJuIF9kZWNsYXJhdGlvbnMgPQogICAgICAgIG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+KGRlY2xzKTsKICB9CgogIC8vIE5vdGU6IHJldHVybnMgY29ycmVjdCByZXN1bHQgb25seSBmb3IgRGFydCAxIGFub255bW91cyBtaXhpbiBhcHBsaWNhdGlvbnMuCiAgYm9vbCBnZXQgX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbiB7CiAgICBpZiAobWl4aW4gPT0gdGhpcykgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYSBtaXhpbiBhcHBsaWNhdGlvbi4KICAgIHJldHVybiB0cnVlOwogIH0KCiAgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+IF90eXBlVmFyaWFibGVzOwogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBnZXQgdHlwZVZhcmlhYmxlcyB7CiAgICBpZiAoX3R5cGVWYXJpYWJsZXMgPT0gbnVsbCkgewogICAgICBpZiAoIV9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbiAmJiBfaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgcmV0dXJuIF90eXBlVmFyaWFibGVzID0gY29uc3QgPFR5cGVWYXJpYWJsZU1pcnJvcj5bXTsKICAgICAgfQogICAgICBfdHlwZVZhcmlhYmxlcyA9IG5ldyBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4oKTsKCiAgICAgIExpc3QgcGFyYW1zID0gX0NsYXNzTWlycm9yX3R5cGVfdmFyaWFibGVzKF9yZWZsZWN0ZWUpOwogICAgICBDbGFzc01pcnJvciBvd25lciA9IG9yaWdpbmFsRGVjbGFyYXRpb247CiAgICAgIHZhciBtaXJyb3I7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgICAgbWlycm9yID0gbmV3IF9Mb2NhbFR5cGVWYXJpYWJsZU1pcnJvci5fKHBhcmFtc1tpICsgMV0sIHBhcmFtc1tpXSwgb3duZXIpOwogICAgICAgIF90eXBlVmFyaWFibGVzLmFkZChtaXJyb3IpOwogICAgICB9CiAgICAgIF90eXBlVmFyaWFibGVzID0KICAgICAgICAgIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxUeXBlVmFyaWFibGVNaXJyb3I+KF90eXBlVmFyaWFibGVzKTsKICAgIH0KICAgIHJldHVybiBfdHlwZVZhcmlhYmxlczsKICB9CgogIExpc3Q8VHlwZU1pcnJvcj4gX3R5cGVBcmd1bWVudHM7CiAgTGlzdDxUeXBlTWlycm9yPiBnZXQgdHlwZUFyZ3VtZW50cyB7CiAgICBpZiAoX3R5cGVBcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBpZiAoX2lzR2VuZXJpY0RlY2xhcmF0aW9uIHx8CiAgICAgICAgICAoIV9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbiAmJiBfaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uKSkgewogICAgICAgIF90eXBlQXJndW1lbnRzID0gY29uc3QgPFR5cGVNaXJyb3I+W107CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3R5cGVBcmd1bWVudHMgPSBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8VHlwZU1pcnJvcj4oCiAgICAgICAgICAgIF9jb21wdXRlVHlwZUFyZ3VtZW50cyhfcmVmbGVjdGVkVHlwZSkuY2FzdDxUeXBlTWlycm9yPigpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF90eXBlQXJndW1lbnRzOwogIH0KCiAgYm9vbCBnZXQgaXNPcmlnaW5hbERlY2xhcmF0aW9uID0+ICFfaXNHZW5lcmljIHx8IF9pc0dlbmVyaWNEZWNsYXJhdGlvbjsKCiAgQ2xhc3NNaXJyb3IgZ2V0IG9yaWdpbmFsRGVjbGFyYXRpb24gewogICAgaWYgKGlzT3JpZ2luYWxEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiByZWZsZWN0Q2xhc3MoX3JlZmxlY3RlZFR5cGUpOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkNsYXNzTWlycm9yIG9uICcke01pcnJvclN5c3RlbS5nZXROYW1lKHNpbXBsZU5hbWUpfSciOwoKICBJbnN0YW5jZU1pcnJvciBuZXdJbnN0YW5jZShTeW1ib2wgY29uc3RydWN0b3JOYW1lLCBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIC8vIE5hdGl2ZSBjb2RlIHdpbGwgYWRkIHRoZSAxIG9yIDIgaW1wbGljaXQgYXJndW1lbnRzIGRlcGVuZGluZyBvbiB3aGV0aGVyCiAgICAvLyB3ZSBlbmQgdXAgaW52b2tpbmcgYSBmYWN0b3J5IG9yIGNvbnN0cnVjdG9yIHJlc3BlY3RpdmVseS4KICAgIGludCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzID0gcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGg7CiAgICBpbnQgbnVtTmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cyAhPSBudWxsID8gbmFtZWRBcmd1bWVudHMubGVuZ3RoIDogMDsKICAgIGludCBudW1Bcmd1bWVudHMgPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgbnVtTmFtZWRBcmd1bWVudHM7CiAgICBMaXN0IGFyZ3VtZW50cyA9IG5ldyBMaXN0KG51bUFyZ3VtZW50cyk7CiAgICBhcmd1bWVudHMuc2V0UmFuZ2UoMCwgbnVtUG9zaXRpb25hbEFyZ3VtZW50cywgcG9zaXRpb25hbEFyZ3VtZW50cyk7CiAgICBMaXN0IG5hbWVzID0gbmV3IExpc3QobnVtTmFtZWRBcmd1bWVudHMpOwogICAgaW50IGFyZ3VtZW50SW5kZXggPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzOwogICAgaW50IG5hbWVJbmRleCA9IDA7CiAgICBpZiAobnVtTmFtZWRBcmd1bWVudHMgPiAwKSB7CiAgICAgIG5hbWVkQXJndW1lbnRzLmZvckVhY2goKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50SW5kZXgrK10gPSB2YWx1ZTsKICAgICAgICBuYW1lc1tuYW1lSW5kZXgrK10gPSBfbihuYW1lKTsKICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIHJlZmxlY3QoX2ludm9rZUNvbnN0cnVjdG9yKAogICAgICAgIF9yZWZsZWN0ZWUsIF9yZWZsZWN0ZWRUeXBlLCBfbihjb25zdHJ1Y3Rvck5hbWUpLCBhcmd1bWVudHMsIG5hbWVzKSk7CiAgfQoKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgewogICAgLy8gR2V0IHRoZSBtZXRhZGF0YSBvYmplY3RzLCBjb252ZXJ0IHRoZW0gaW50byBJbnN0YW5jZU1pcnJvcnMgdXNpbmcKICAgIC8vIHJlZmxlY3QoKSBhbmQgdGhlbiBtYWtlIHRoZW0gaW50byBhIERhcnQgbGlzdC4KICAgIHJldHVybiBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8SW5zdGFuY2VNaXJyb3I+KAogICAgICAgIF9tZXRhZGF0YShfcmVmbGVjdGVlKS5tYXAocmVmbGVjdCkpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIHRoaXMucnVudGltZVR5cGUgPT0gb3RoZXIucnVudGltZVR5cGUgJiYKICAgICAgICB0aGlzLl9yZWZsZWN0ZWUgPT0gb3RoZXIuX3JlZmxlY3RlZSAmJgogICAgICAgIHRoaXMuX3JlZmxlY3RlZFR5cGUgPT0gb3RoZXIuX3JlZmxlY3RlZFR5cGUgJiYKICAgICAgICB0aGlzLl9pc0dlbmVyaWNEZWNsYXJhdGlvbiA9PSBvdGhlci5faXNHZW5lcmljRGVjbGFyYXRpb247CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHNpbXBsZU5hbWUuaGFzaENvZGU7CgogIGJvb2wgaXNTdWJ0eXBlT2YoVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KAogICAgICAgIF9yZWZsZWN0ZWRUeXBlLCAob3RoZXIgYXMgX0xvY2FsVHlwZU1pcnJvcikuX3JlZmxlY3RlZFR5cGUpOwogIH0KCiAgYm9vbCBpc0Fzc2lnbmFibGVUbyhUeXBlTWlycm9yIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLmR5bmFtaWNUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkudm9pZFR5cGUpIHJldHVybiBmYWxzZTsKICAgIGZpbmFsIG90aGVyUmVmbGVjdGVkVHlwZSA9IChvdGhlciBhcyBfTG9jYWxUeXBlTWlycm9yKS5fcmVmbGVjdGVkVHlwZTsKICAgIHJldHVybiBfc3VidHlwZVRlc3QoX3JlZmxlY3RlZFR5cGUsIG90aGVyUmVmbGVjdGVkVHlwZSkgfHwKICAgICAgICBfc3VidHlwZVRlc3Qob3RoZXJSZWZsZWN0ZWRUeXBlLCBfcmVmbGVjdGVkVHlwZSk7CiAgfQoKICBib29sIGlzU3ViY2xhc3NPZihDbGFzc01pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBDbGFzc01pcnJvcikgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iob3RoZXIpOwogICAgQ2xhc3NNaXJyb3Igb3RoZXJEZWNsYXJhdGlvbiA9IG90aGVyLm9yaWdpbmFsRGVjbGFyYXRpb247CiAgICBDbGFzc01pcnJvciBjID0gdGhpczsKICAgIHdoaWxlIChjICE9IG51bGwpIHsKICAgICAgYyA9IGMub3JpZ2luYWxEZWNsYXJhdGlvbjsKICAgICAgaWYgKGMgPT0gb3RoZXJEZWNsYXJhdGlvbikgcmV0dXJuIHRydWU7CiAgICAgIGMgPSBjLnN1cGVyY2xhc3M7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9saWJyYXJ5VXJpKHJlZmxlY3RlZSkgbmF0aXZlICJDbGFzc01pcnJvcl9saWJyYXJ5VXJpIjsKCiAgc3RhdGljIFR5cGUgX3N1cGVydHlwZShyZWZsZWN0ZWRUeXBlKSBuYXRpdmUgIkNsYXNzTWlycm9yX3N1cGVydHlwZSI7CgogIHN0YXRpYyBUeXBlIF9zdXBlcnR5cGVJbnN0YW50aWF0ZWQocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9zdXBlcnR5cGVfaW5zdGFudGlhdGVkIjsKCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX25hdGl2ZUludGVyZmFjZXMocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9pbnRlcmZhY2VzIjsKCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX25hdGl2ZUludGVyZmFjZXNJbnN0YW50aWF0ZWQocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9pbnRlcmZhY2VzX2luc3RhbnRpYXRlZCI7CgogIHN0YXRpYyBUeXBlIF9uYXRpdmVNaXhpbihyZWZsZWN0ZWRUeXBlKSBuYXRpdmUgIkNsYXNzTWlycm9yX21peGluIjsKCiAgc3RhdGljIFR5cGUgX25hdGl2ZU1peGluSW5zdGFudGlhdGVkKHJlZmxlY3RlZFR5cGUsIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9taXhpbl9pbnN0YW50aWF0ZWQiOwoKICBMaXN0PGR5bmFtaWM+IF9jb21wdXRlTWVtYmVycyhyZWZsZWN0ZWUsIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9tZW1iZXJzIjsKCiAgTGlzdDxkeW5hbWljPiBfY29tcHV0ZUNvbnN0cnVjdG9ycyhyZWZsZWN0ZWUsIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9jb25zdHJ1Y3RvcnMiOwoKICBfaW52b2tlKHJlZmxlY3RlZSwgbWVtYmVyTmFtZSwgYXJndW1lbnRzLCBhcmd1bWVudE5hbWVzKQogICAgICBuYXRpdmUgJ0NsYXNzTWlycm9yX2ludm9rZSc7CgogIF9pbnZva2VHZXR0ZXIocmVmbGVjdGVlLCBnZXR0ZXJOYW1lKSBuYXRpdmUgJ0NsYXNzTWlycm9yX2ludm9rZUdldHRlcic7CgogIF9pbnZva2VTZXR0ZXIocmVmbGVjdGVlLCBzZXR0ZXJOYW1lLCB2YWx1ZSkgbmF0aXZlICdDbGFzc01pcnJvcl9pbnZva2VTZXR0ZXInOwoKICBzdGF0aWMgX2ludm9rZUNvbnN0cnVjdG9yKHJlZmxlY3RlZSwgdHlwZSwgY29uc3RydWN0b3JOYW1lLCBhcmd1bWVudHMsCiAgICAgIGFyZ3VtZW50TmFtZXMpIG5hdGl2ZSAnQ2xhc3NNaXJyb3JfaW52b2tlQ29uc3RydWN0b3InOwoKICBzdGF0aWMgTGlzdDxkeW5hbWljPiBfQ2xhc3NNaXJyb3JfdHlwZV92YXJpYWJsZXMocmVmbGVjdGVlKQogICAgICBuYXRpdmUgIkNsYXNzTWlycm9yX3R5cGVfdmFyaWFibGVzIjsKCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX2NvbXB1dGVUeXBlQXJndW1lbnRzKHJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl90eXBlX2FyZ3VtZW50cyI7Cn0KCmNsYXNzIF9Mb2NhbEZ1bmN0aW9uVHlwZU1pcnJvciBleHRlbmRzIF9Mb2NhbENsYXNzTWlycm9yCiAgICBpbXBsZW1lbnRzIEZ1bmN0aW9uVHlwZU1pcnJvciB7CiAgZmluYWwgX2Z1bmN0aW9uUmVmbGVjdGVlOwogIF9Mb2NhbEZ1bmN0aW9uVHlwZU1pcnJvci5fKHJlZmxlY3RlZSwgdGhpcy5fZnVuY3Rpb25SZWZsZWN0ZWUsIHJlZmxlY3RlZFR5cGUpCiAgICAgIDogc3VwZXIuXyhyZWZsZWN0ZWUsIHJlZmxlY3RlZFR5cGUsIG51bGwsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAogICAgICAgICAgICBmYWxzZSk7CgogIGJvb2wgZ2V0IF9pc0Fub255bW91c01peGluQXBwbGljYXRpb24gPT4gZmFsc2U7CgogIC8vIEZ1bmN0aW9uVHlwZU1pcnJvcnMgaGF2ZSBhIHNpbXBsZU5hbWUgZ2VuZXJhdGVkIGZyb20gdGhlaXIgc2lnbmF0dXJlLgogIFN5bWJvbCBfc2ltcGxlTmFtZTsKICBTeW1ib2wgZ2V0IHNpbXBsZU5hbWUgewogICAgaWYgKF9zaW1wbGVOYW1lID09IG51bGwpIHsKICAgICAgX3NpbXBsZU5hbWUgPSBfcyhfbWFrZVNpZ25hdHVyZVN0cmluZyhyZXR1cm5UeXBlLCBwYXJhbWV0ZXJzKSk7CiAgICB9CiAgICByZXR1cm4gX3NpbXBsZU5hbWU7CiAgfQoKICBNZXRob2RNaXJyb3IgX2NhbGxNZXRob2Q7CiAgTWV0aG9kTWlycm9yIGdldCBjYWxsTWV0aG9kIHsKICAgIGlmIChfY2FsbE1ldGhvZCA9PSBudWxsKSB7CiAgICAgIF9jYWxsTWV0aG9kID0gX0Z1bmN0aW9uVHlwZU1pcnJvcl9jYWxsX21ldGhvZChfZnVuY3Rpb25SZWZsZWN0ZWUpOwogICAgfQogICAgcmV0dXJuIF9jYWxsTWV0aG9kOwogIH0KCiAgVHlwZU1pcnJvciBfcmV0dXJuVHlwZTsKICBUeXBlTWlycm9yIGdldCByZXR1cm5UeXBlIHsKICAgIGlmIChfcmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgIF9yZXR1cm5UeXBlID0KICAgICAgICAgIHJlZmxlY3RUeXBlKF9GdW5jdGlvblR5cGVNaXJyb3JfcmV0dXJuX3R5cGUoX2Z1bmN0aW9uUmVmbGVjdGVlKSk7CiAgICB9CiAgICByZXR1cm4gX3JldHVyblR5cGU7CiAgfQoKICBMaXN0PFBhcmFtZXRlck1pcnJvcj4gX3BhcmFtZXRlcnM7CiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzIHsKICAgIGlmIChfcGFyYW1ldGVycyA9PSBudWxsKSB7CiAgICAgIF9wYXJhbWV0ZXJzID0gX0Z1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzKF9mdW5jdGlvblJlZmxlY3RlZSkKICAgICAgICAgIC5jYXN0PFBhcmFtZXRlck1pcnJvcj4oKTsKICAgICAgX3BhcmFtZXRlcnMgPSBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8UGFyYW1ldGVyTWlycm9yPihfcGFyYW1ldGVycyk7CiAgICB9CiAgICByZXR1cm4gX3BhcmFtZXRlcnM7CiAgfQoKICBib29sIGdldCBpc09yaWdpbmFsRGVjbGFyYXRpb24gPT4gdHJ1ZTsKICBDbGFzc01pcnJvciBnZXQgb3JpZ2luYWxEZWNsYXJhdGlvbiA9PiB0aGlzOwogIGdldCB0eXBlVmFyaWFibGVzID0+IGNvbnN0IDxUeXBlVmFyaWFibGVNaXJyb3I+W107CiAgZ2V0IHR5cGVBcmd1bWVudHMgPT4gY29uc3QgPFR5cGVNaXJyb3I+W107CiAgZ2V0IG1ldGFkYXRhID0+IGNvbnN0IDxJbnN0YW5jZU1pcnJvcj5bXTsKICBnZXQgbG9jYXRpb24gPT4gbnVsbDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkZ1bmN0aW9uVHlwZU1pcnJvciBvbiAnJHtfbihzaW1wbGVOYW1lKX0nIjsKCiAgTWV0aG9kTWlycm9yIF9GdW5jdGlvblR5cGVNaXJyb3JfY2FsbF9tZXRob2QoZnVuY3Rpb25SZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAiRnVuY3Rpb25UeXBlTWlycm9yX2NhbGxfbWV0aG9kIjsKCiAgc3RhdGljIFR5cGUgX0Z1bmN0aW9uVHlwZU1pcnJvcl9yZXR1cm5fdHlwZShmdW5jdGlvblJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJGdW5jdGlvblR5cGVNaXJyb3JfcmV0dXJuX3R5cGUiOwoKICBMaXN0PGR5bmFtaWM+IF9GdW5jdGlvblR5cGVNaXJyb3JfcGFyYW1ldGVycyhmdW5jdGlvblJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJGdW5jdGlvblR5cGVNaXJyb3JfcGFyYW1ldGVycyI7Cn0KCmFic3RyYWN0IGNsYXNzIF9Mb2NhbERlY2xhcmF0aW9uTWlycm9yIGV4dGVuZHMgX0xvY2FsTWlycm9yCiAgICBpbXBsZW1lbnRzIERlY2xhcmF0aW9uTWlycm9yIHsKICBmaW5hbCBfcmVmbGVjdGVlOwogIFN5bWJvbCBfc2ltcGxlTmFtZTsKCiAgX0xvY2FsRGVjbGFyYXRpb25NaXJyb3IuXyh0aGlzLl9yZWZsZWN0ZWUsIHRoaXMuX3NpbXBsZU5hbWUpOwoKICBTeW1ib2wgZ2V0IHNpbXBsZU5hbWUgPT4gX3NpbXBsZU5hbWU7CgogIFN5bWJvbCBfcXVhbGlmaWVkTmFtZTsKICBTeW1ib2wgZ2V0IHF1YWxpZmllZE5hbWUgewogICAgaWYgKF9xdWFsaWZpZWROYW1lID09IG51bGwpIHsKICAgICAgX3F1YWxpZmllZE5hbWUgPSBfY29tcHV0ZVF1YWxpZmllZE5hbWUob3duZXIsIHNpbXBsZU5hbWUpOwogICAgfQogICAgcmV0dXJuIF9xdWFsaWZpZWROYW1lOwogIH0KCiAgYm9vbCBnZXQgaXNQcml2YXRlID0+IF9uKHNpbXBsZU5hbWUpLnN0YXJ0c1dpdGgoJ18nKTsKCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uIHsKICAgIHJldHVybiBfbG9jYXRpb24oX3JlZmxlY3RlZSk7CiAgfQoKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgewogICAgLy8gR2V0IHRoZSBtZXRhZGF0YSBvYmplY3RzLCBjb252ZXJ0IHRoZW0gaW50byBJbnN0YW5jZU1pcnJvcnMgdXNpbmcKICAgIC8vIHJlZmxlY3QoKSBhbmQgdGhlbiBtYWtlIHRoZW0gaW50byBhIERhcnQgbGlzdC4KICAgIHJldHVybiBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8SW5zdGFuY2VNaXJyb3I+KAogICAgICAgIF9tZXRhZGF0YShfcmVmbGVjdGVlKS5tYXAocmVmbGVjdCkpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIHRoaXMucnVudGltZVR5cGUgPT0gb3RoZXIucnVudGltZVR5cGUgJiYKICAgICAgICB0aGlzLl9yZWZsZWN0ZWUgPT0gb3RoZXIuX3JlZmxlY3RlZTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gc2ltcGxlTmFtZS5oYXNoQ29kZTsKfQoKY2xhc3MgX0xvY2FsVHlwZVZhcmlhYmxlTWlycm9yIGV4dGVuZHMgX0xvY2FsRGVjbGFyYXRpb25NaXJyb3IKICAgIGltcGxlbWVudHMgVHlwZVZhcmlhYmxlTWlycm9yLCBfTG9jYWxUeXBlTWlycm9yIHsKICBfTG9jYWxUeXBlVmFyaWFibGVNaXJyb3IuXyhyZWZsZWN0ZWUsIFN0cmluZyBzaW1wbGVOYW1lLCB0aGlzLl9vd25lcikKICAgICAgOiBzdXBlci5fKHJlZmxlY3RlZSwgX3Moc2ltcGxlTmFtZSkpOwoKICBEZWNsYXJhdGlvbk1pcnJvciBfb3duZXI7CiAgRGVjbGFyYXRpb25NaXJyb3IgZ2V0IG93bmVyIHsKICAgIGlmIChfb3duZXIgPT0gbnVsbCkgewogICAgICBfb3duZXIgPSAoX1R5cGVWYXJpYWJsZU1pcnJvcl9vd25lcihfcmVmbGVjdGVlKSBhcyBUeXBlTWlycm9yKQogICAgICAgICAgLm9yaWdpbmFsRGVjbGFyYXRpb247CiAgICB9CiAgICByZXR1cm4gX293bmVyOwogIH0KCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBmYWxzZTsKCiAgVHlwZU1pcnJvciBfdXBwZXJCb3VuZDsKICBUeXBlTWlycm9yIGdldCB1cHBlckJvdW5kIHsKICAgIGlmIChfdXBwZXJCb3VuZCA9PSBudWxsKSB7CiAgICAgIF91cHBlckJvdW5kID0gcmVmbGVjdFR5cGUoX1R5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZChfcmVmbGVjdGVlKSk7CiAgICB9CiAgICByZXR1cm4gX3VwcGVyQm91bmQ7CiAgfQoKICBib29sIGdldCBoYXNSZWZsZWN0ZWRUeXBlID0+IGZhbHNlOwogIFR5cGUgZ2V0IHJlZmxlY3RlZFR5cGUgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1R5cGUgdmFyaWFibGVzIGhhdmUgbm8gcmVmbGVjdGVkIHR5cGUnKTsKICB9CgogIFR5cGUgZ2V0IF9yZWZsZWN0ZWRUeXBlID0+IF9yZWZsZWN0ZWU7CgogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBnZXQgdHlwZVZhcmlhYmxlcyA9PiBjb25zdCA8VHlwZVZhcmlhYmxlTWlycm9yPltdOwogIExpc3Q8VHlwZU1pcnJvcj4gZ2V0IHR5cGVBcmd1bWVudHMgPT4gY29uc3QgPFR5cGVNaXJyb3I+W107CgogIGJvb2wgZ2V0IGlzT3JpZ2luYWxEZWNsYXJhdGlvbiA9PiB0cnVlOwogIFR5cGVNaXJyb3IgZ2V0IG9yaWdpbmFsRGVjbGFyYXRpb24gPT4gdGhpczsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlR5cGVWYXJpYWJsZU1pcnJvciBvbiAnJHtfbihzaW1wbGVOYW1lKX0nIjsKCiAgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBUeXBlVmFyaWFibGVNaXJyb3IgJiYKICAgICAgICBzaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWUgJiYKICAgICAgICBvd25lciA9PSBvdGhlci5vd25lcjsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gc2ltcGxlTmFtZS5oYXNoQ29kZTsKCiAgYm9vbCBpc1N1YnR5cGVPZihUeXBlTWlycm9yIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLmR5bmFtaWNUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkudm9pZFR5cGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfc3VidHlwZVRlc3QoCiAgICAgICAgX3JlZmxlY3RlZFR5cGUsIChvdGhlciBhcyBfTG9jYWxUeXBlTWlycm9yKS5fcmVmbGVjdGVkVHlwZSk7CiAgfQoKICBib29sIGlzQXNzaWduYWJsZVRvKFR5cGVNaXJyb3Igb3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkuZHluYW1pY1R5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS52b2lkVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgZmluYWwgb3RoZXJSZWZsZWN0ZWRUeXBlID0gKG90aGVyIGFzIF9Mb2NhbFR5cGVNaXJyb3IpLl9yZWZsZWN0ZWRUeXBlOwogICAgcmV0dXJuIF9zdWJ0eXBlVGVzdChfcmVmbGVjdGVkVHlwZSwgb3RoZXJSZWZsZWN0ZWRUeXBlKSB8fAogICAgICAgIF9zdWJ0eXBlVGVzdChvdGhlclJlZmxlY3RlZFR5cGUsIF9yZWZsZWN0ZWRUeXBlKTsKICB9CgogIHN0YXRpYyBEZWNsYXJhdGlvbk1pcnJvciBfVHlwZVZhcmlhYmxlTWlycm9yX293bmVyKHJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJUeXBlVmFyaWFibGVNaXJyb3Jfb3duZXIiOwoKICBzdGF0aWMgVHlwZSBfVHlwZVZhcmlhYmxlTWlycm9yX3VwcGVyX2JvdW5kKHJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJUeXBlVmFyaWFibGVNaXJyb3JfdXBwZXJfYm91bmQiOwp9CgpjbGFzcyBfTG9jYWxUeXBlZGVmTWlycm9yIGV4dGVuZHMgX0xvY2FsRGVjbGFyYXRpb25NaXJyb3IKICAgIGltcGxlbWVudHMgVHlwZWRlZk1pcnJvciwgX0xvY2FsVHlwZU1pcnJvciB7CiAgZmluYWwgVHlwZSBfcmVmbGVjdGVkVHlwZTsKICBmaW5hbCBib29sIF9pc0dlbmVyaWM7CiAgZmluYWwgYm9vbCBfaXNHZW5lcmljRGVjbGFyYXRpb247CgogIF9Mb2NhbFR5cGVkZWZNaXJyb3IocmVmbGVjdGVlLCB0aGlzLl9yZWZsZWN0ZWRUeXBlLCBTdHJpbmcgc2ltcGxlTmFtZSwKICAgICAgdGhpcy5faXNHZW5lcmljLCB0aGlzLl9pc0dlbmVyaWNEZWNsYXJhdGlvbiwgdGhpcy5fb3duZXIpCiAgICAgIDogc3VwZXIuXyhyZWZsZWN0ZWUsIF9zKHNpbXBsZU5hbWUpKTsKCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiB0cnVlOwoKICBEZWNsYXJhdGlvbk1pcnJvciBfb3duZXI7CiAgRGVjbGFyYXRpb25NaXJyb3IgZ2V0IG93bmVyIHsKICAgIGlmIChfb3duZXIgPT0gbnVsbCkgewogICAgICB2YXIgdXJpID0gX0xvY2FsQ2xhc3NNaXJyb3IuX2xpYnJhcnlVcmkoX3JlZmxlY3RlZSk7CiAgICAgIF9vd25lciA9IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5saWJyYXJpZXNbVXJpLnBhcnNlKHVyaSldOwogICAgfQogICAgcmV0dXJuIF9vd25lcjsKICB9CgogIF9Mb2NhbEZ1bmN0aW9uVHlwZU1pcnJvciBfcmVmZXJlbnQ7CiAgRnVuY3Rpb25UeXBlTWlycm9yIGdldCByZWZlcmVudCB7CiAgICBpZiAoX3JlZmVyZW50ID09IG51bGwpIHsKICAgICAgX3JlZmVyZW50ID0gX25hdGl2ZVJlZmVyZW50KF9yZWZsZWN0ZWRUeXBlKTsKICAgICAgX3JlZmVyZW50Ll9pbnN0YW50aWF0b3IgPSBfcmVmbGVjdGVkVHlwZTsKICAgIH0KICAgIHJldHVybiBfcmVmZXJlbnQ7CiAgfQoKICBib29sIGdldCBoYXNSZWZsZWN0ZWRUeXBlID0+ICFfaXNHZW5lcmljRGVjbGFyYXRpb247CiAgVHlwZSBnZXQgcmVmbGVjdGVkVHlwZSB7CiAgICBpZiAoIWhhc1JlZmxlY3RlZFR5cGUpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiRGVjbGFyYXRpb25zIG9mIGdlbmVyaWNzIGhhdmUgbm8gcmVmbGVjdGVkIHR5cGUiKTsKICAgIH0KICAgIHJldHVybiBfcmVmbGVjdGVkVHlwZTsKICB9CgogIGJvb2wgZ2V0IGlzT3JpZ2luYWxEZWNsYXJhdGlvbiA9PiAhX2lzR2VuZXJpYyB8fCBfaXNHZW5lcmljRGVjbGFyYXRpb247CgogIFR5cGVkZWZNaXJyb3IgZ2V0IG9yaWdpbmFsRGVjbGFyYXRpb24gewogICAgaWYgKGlzT3JpZ2luYWxEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfbmF0aXZlRGVjbGFyYXRpb24oX3JlZmxlY3RlZFR5cGUpOwogICAgfQogIH0KCiAgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+IF90eXBlVmFyaWFibGVzOwogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBnZXQgdHlwZVZhcmlhYmxlcyB7CiAgICBpZiAoX3R5cGVWYXJpYWJsZXMgPT0gbnVsbCkgewogICAgICBfdHlwZVZhcmlhYmxlcyA9IG5ldyBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4oKTsKICAgICAgTGlzdCBwYXJhbXMgPSBfTG9jYWxDbGFzc01pcnJvci5fQ2xhc3NNaXJyb3JfdHlwZV92YXJpYWJsZXMoX3JlZmxlY3RlZSk7CiAgICAgIFR5cGVkZWZNaXJyb3Igb3duZXIgPSBvcmlnaW5hbERlY2xhcmF0aW9uOwogICAgICB2YXIgbWlycm9yOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkgKz0gMikgewogICAgICAgIG1pcnJvciA9IG5ldyBfTG9jYWxUeXBlVmFyaWFibGVNaXJyb3IuXyhwYXJhbXNbaSArIDFdLCBwYXJhbXNbaV0sIG93bmVyKTsKICAgICAgICBfdHlwZVZhcmlhYmxlcy5hZGQobWlycm9yKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF90eXBlVmFyaWFibGVzOwogIH0KCiAgTGlzdDxUeXBlTWlycm9yPiBfdHlwZUFyZ3VtZW50czsKICBMaXN0PFR5cGVNaXJyb3I+IGdldCB0eXBlQXJndW1lbnRzIHsKICAgIGlmIChfdHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIGlmIChfaXNHZW5lcmljRGVjbGFyYXRpb24pIHsKICAgICAgICBfdHlwZUFyZ3VtZW50cyA9IGNvbnN0IDxUeXBlTWlycm9yPltdOwogICAgICB9IGVsc2UgewogICAgICAgIF90eXBlQXJndW1lbnRzID0gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PFR5cGVNaXJyb3I+KF9Mb2NhbENsYXNzTWlycm9yCiAgICAgICAgICAgIC5fY29tcHV0ZVR5cGVBcmd1bWVudHMoX3JlZmxlY3RlZFR5cGUpCiAgICAgICAgICAgIC5jYXN0PFR5cGVNaXJyb3I+KCkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX3R5cGVBcmd1bWVudHM7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVHlwZWRlZk1pcnJvciBvbiAnJHtfbihzaW1wbGVOYW1lKX0nIjsKCiAgYm9vbCBpc1N1YnR5cGVPZihUeXBlTWlycm9yIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLmR5bmFtaWNUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkudm9pZFR5cGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfc3VidHlwZVRlc3QoCiAgICAgICAgX3JlZmxlY3RlZFR5cGUsIChvdGhlciBhcyBfTG9jYWxUeXBlTWlycm9yKS5fcmVmbGVjdGVkVHlwZSk7CiAgfQoKICBib29sIGlzQXNzaWduYWJsZVRvKFR5cGVNaXJyb3Igb3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkuZHluYW1pY1R5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS52b2lkVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgZmluYWwgb3RoZXJSZWZsZWN0ZWRUeXBlID0gKG90aGVyIGFzIF9Mb2NhbFR5cGVNaXJyb3IpLl9yZWZsZWN0ZWRUeXBlOwogICAgcmV0dXJuIF9zdWJ0eXBlVGVzdChfcmVmbGVjdGVkVHlwZSwgb3RoZXJSZWZsZWN0ZWRUeXBlKSB8fAogICAgICAgIF9zdWJ0eXBlVGVzdChvdGhlclJlZmxlY3RlZFR5cGUsIF9yZWZsZWN0ZWRUeXBlKTsKICB9CgogIHN0YXRpYyBGdW5jdGlvblR5cGVNaXJyb3IgX25hdGl2ZVJlZmVyZW50KHJlZmxlY3RlZFR5cGUpCiAgICAgIG5hdGl2ZSAiVHlwZWRlZk1pcnJvcl9yZWZlcmVudCI7CgogIHN0YXRpYyBUeXBlZGVmTWlycm9yIF9uYXRpdmVEZWNsYXJhdGlvbihyZWZsZWN0ZWRUeXBlKQogICAgICBuYXRpdmUgIlR5cGVkZWZNaXJyb3JfZGVjbGFyYXRpb24iOwp9CgpTeW1ib2wgX2FzU2V0dGVyKFN5bWJvbCBnZXR0ZXIsIExpYnJhcnlNaXJyb3IgbGlicmFyeSkgewogIHZhciB1bndyYXBwZWQgPSBNaXJyb3JTeXN0ZW0uZ2V0TmFtZShnZXR0ZXIpOwogIHJldHVybiBNaXJyb3JTeXN0ZW0uZ2V0U3ltYm9sKCcke3Vud3JhcHBlZH09JywgbGlicmFyeSk7Cn0KCmNsYXNzIF9Mb2NhbExpYnJhcnlNaXJyb3IgZXh0ZW5kcyBfTG9jYWxPYmplY3RNaXJyb3IgaW1wbGVtZW50cyBMaWJyYXJ5TWlycm9yIHsKICBmaW5hbCBTeW1ib2wgc2ltcGxlTmFtZTsKICBmaW5hbCBVcmkgdXJpOwoKICBfTG9jYWxMaWJyYXJ5TWlycm9yLl8ocmVmbGVjdGVlLCBTdHJpbmcgc2ltcGxlTmFtZSwgU3RyaW5nIHVybCkKICAgICAgOiB0aGlzLnNpbXBsZU5hbWUgPSBfcyhzaW1wbGVOYW1lKSwKICAgICAgICB0aGlzLnVyaSA9IFVyaS5wYXJzZSh1cmwpLAogICAgICAgIHN1cGVyLl8ocmVmbGVjdGVlKTsKCiAgLy8gVGhlIHNpbXBsZSBuYW1lIGFuZCB0aGUgcXVhbGlmaWVkIG5hbWUgYXJlIHRoZSBzYW1lIGZvciBhIGxpYnJhcnkuCiAgU3ltYm9sIGdldCBxdWFsaWZpZWROYW1lID0+IHNpbXBsZU5hbWU7CgogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lciA9PiBudWxsOwoKICBib29sIGdldCBpc1ByaXZhdGUgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBmYWxzZTsKCiAgVHlwZSBnZXQgX2luc3RhbnRpYXRvciA9PiBudWxsOwoKICBNYXA8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4gX2RlY2xhcmF0aW9uczsKICBNYXA8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4gZ2V0IGRlY2xhcmF0aW9ucyB7CiAgICBpZiAoX2RlY2xhcmF0aW9ucyAhPSBudWxsKSByZXR1cm4gX2RlY2xhcmF0aW9uczsKCiAgICB2YXIgZGVjbHMgPSBuZXcgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+KCk7CiAgICB2YXIgbWVtYmVycyA9IF9jb21wdXRlTWVtYmVycyhfcmVmbGVjdGVlKTsKICAgIGZvciAodmFyIG1lbWJlciBpbiBtZW1iZXJzKSB7CiAgICAgIGRlY2xzW21lbWJlci5zaW1wbGVOYW1lXSA9IG1lbWJlcjsKICAgIH0KCiAgICByZXR1cm4gX2RlY2xhcmF0aW9ucyA9CiAgICAgICAgbmV3IFVubW9kaWZpYWJsZU1hcFZpZXc8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4oZGVjbHMpOwogIH0KCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uIHsKICAgIHJldHVybiBfbG9jYXRpb24oX3JlZmxlY3RlZSk7CiAgfQoKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgewogICAgLy8gR2V0IHRoZSBtZXRhZGF0YSBvYmplY3RzLCBjb252ZXJ0IHRoZW0gaW50byBJbnN0YW5jZU1pcnJvcnMgdXNpbmcKICAgIC8vIHJlZmxlY3QoKSBhbmQgdGhlbiBtYWtlIHRoZW0gaW50byBhIERhcnQgbGlzdC4KICAgIHJldHVybiBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8SW5zdGFuY2VNaXJyb3I+KAogICAgICAgIF9tZXRhZGF0YShfcmVmbGVjdGVlKS5tYXAocmVmbGVjdCkpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIHRoaXMucnVudGltZVR5cGUgPT0gb3RoZXIucnVudGltZVR5cGUgJiYKICAgICAgICB0aGlzLl9yZWZsZWN0ZWUgPT0gb3RoZXIuX3JlZmxlY3RlZTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gc2ltcGxlTmFtZS5oYXNoQ29kZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkxpYnJhcnlNaXJyb3Igb24gJyR7X24oc2ltcGxlTmFtZSl9JyI7CgogIHZhciBfY2FjaGVkTGlicmFyeURlcGVuZGVuY2llczsKICBnZXQgbGlicmFyeURlcGVuZGVuY2llcyB7CiAgICBpZiAoX2NhY2hlZExpYnJhcnlEZXBlbmRlbmNpZXMgPT0gbnVsbCkgewogICAgICBfY2FjaGVkTGlicmFyeURlcGVuZGVuY2llcyA9CiAgICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8TGlicmFyeURlcGVuZGVuY3lNaXJyb3I+KAogICAgICAgICAgICAgIF9saWJyYXJ5RGVwZW5kZW5jaWVzKF9yZWZsZWN0ZWUpLmNhc3Q8TGlicmFyeURlcGVuZGVuY3lNaXJyb3I+KCkpOwogICAgfQogICAgcmV0dXJuIF9jYWNoZWRMaWJyYXJ5RGVwZW5kZW5jaWVzOwogIH0KCiAgTGlzdDxkeW5hbWljPiBfbGlicmFyeURlcGVuZGVuY2llcyhyZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAnTGlicmFyeU1pcnJvcl9saWJyYXJ5RGVwZW5kZW5jaWVzJzsKCiAgX2ludm9rZShyZWZsZWN0ZWUsIG1lbWJlck5hbWUsIGFyZ3VtZW50cywgYXJndW1lbnROYW1lcykKICAgICAgbmF0aXZlICdMaWJyYXJ5TWlycm9yX2ludm9rZSc7CgogIF9pbnZva2VHZXR0ZXIocmVmbGVjdGVlLCBnZXR0ZXJOYW1lKSBuYXRpdmUgJ0xpYnJhcnlNaXJyb3JfaW52b2tlR2V0dGVyJzsKCiAgX2ludm9rZVNldHRlcihyZWZsZWN0ZWUsIHNldHRlck5hbWUsIHZhbHVlKQogICAgICBuYXRpdmUgJ0xpYnJhcnlNaXJyb3JfaW52b2tlU2V0dGVyJzsKCiAgTGlzdDxkeW5hbWljPiBfY29tcHV0ZU1lbWJlcnMocmVmbGVjdGVlKSBuYXRpdmUgIkxpYnJhcnlNaXJyb3JfbWVtYmVycyI7Cn0KCmNsYXNzIF9Mb2NhbExpYnJhcnlEZXBlbmRlbmN5TWlycm9yIGV4dGVuZHMgX0xvY2FsTWlycm9yCiAgICBpbXBsZW1lbnRzIExpYnJhcnlEZXBlbmRlbmN5TWlycm9yIHsKICBmaW5hbCBMaWJyYXJ5TWlycm9yIHNvdXJjZUxpYnJhcnk7CiAgdmFyIF90YXJnZXRNaXJyb3JPclByZWZpeDsKICBmaW5hbCBMaXN0PENvbWJpbmF0b3JNaXJyb3I+IGNvbWJpbmF0b3JzOwogIGZpbmFsIFN5bWJvbCBwcmVmaXg7CiAgZmluYWwgYm9vbCBpc0ltcG9ydDsKICBmaW5hbCBib29sIGlzRGVmZXJyZWQ7CiAgZmluYWwgTGlzdDxJbnN0YW5jZU1pcnJvcj4gbWV0YWRhdGE7CgogIF9Mb2NhbExpYnJhcnlEZXBlbmRlbmN5TWlycm9yLl8oCiAgICAgIHRoaXMuc291cmNlTGlicmFyeSwKICAgICAgdGhpcy5fdGFyZ2V0TWlycm9yT3JQcmVmaXgsCiAgICAgIExpc3Q8ZHluYW1pYz4gbXV0YWJsZUNvbWJpbmF0b3JzLAogICAgICBwcmVmaXhTdHJpbmcsCiAgICAgIHRoaXMuaXNJbXBvcnQsCiAgICAgIHRoaXMuaXNEZWZlcnJlZCwKICAgICAgTGlzdDxkeW5hbWljPiB1bndyYXBwZWRNZXRhZGF0YSkKICAgICAgOiBwcmVmaXggPSBfcyhwcmVmaXhTdHJpbmcpLAogICAgICAgIGNvbWJpbmF0b3JzID0gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PENvbWJpbmF0b3JNaXJyb3I+KAogICAgICAgICAgICBtdXRhYmxlQ29tYmluYXRvcnMuY2FzdDxDb21iaW5hdG9yTWlycm9yPigpKSwKICAgICAgICBtZXRhZGF0YSA9IG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxJbnN0YW5jZU1pcnJvcj4oCiAgICAgICAgICAgIHVud3JhcHBlZE1ldGFkYXRhLm1hcChyZWZsZWN0KSk7CgogIGJvb2wgZ2V0IGlzRXhwb3J0ID0+ICFpc0ltcG9ydDsKCiAgTGlicmFyeU1pcnJvciBnZXQgdGFyZ2V0TGlicmFyeSB7CiAgICBpZiAoX3RhcmdldE1pcnJvck9yUHJlZml4IGlzIF9Mb2NhbExpYnJhcnlNaXJyb3IpIHsKICAgICAgcmV0dXJuIF90YXJnZXRNaXJyb3JPclByZWZpeDsKICAgIH0KICAgIHZhciBtaXJyb3JPck51bGwgPSBfdHJ5VXBncmFkZVByZWZpeChfdGFyZ2V0TWlycm9yT3JQcmVmaXgpOwogICAgaWYgKG1pcnJvck9yTnVsbCAhPSBudWxsKSB7CiAgICAgIF90YXJnZXRNaXJyb3JPclByZWZpeCA9IG1pcnJvck9yTnVsbDsKICAgIH0KICAgIHJldHVybiBtaXJyb3JPck51bGw7CiAgfQoKICBGdXR1cmU8TGlicmFyeU1pcnJvcj4gbG9hZExpYnJhcnkoKSB7CiAgICBpZiAoX3RhcmdldE1pcnJvck9yUHJlZml4IGlzIF9Mb2NhbExpYnJhcnlNaXJyb3IpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoX3RhcmdldE1pcnJvck9yUHJlZml4KTsKICAgIH0KICAgIHZhciBzYXZlZFByZWZpeCA9IF90YXJnZXRNaXJyb3JPclByZWZpeDsKICAgIHJldHVybiBzYXZlZFByZWZpeC5sb2FkTGlicmFyeSgpLnRoZW4oKF8pIHsKICAgICAgcmV0dXJuIF90cnlVcGdyYWRlUHJlZml4KHNhdmVkUHJlZml4KTsKICAgIH0pOwogIH0KCiAgc3RhdGljIExpYnJhcnlNaXJyb3IgX3RyeVVwZ3JhZGVQcmVmaXgobGlicmFyeVByZWZpeCkKICAgICAgbmF0aXZlICJMaWJyYXJ5TWlycm9yX2Zyb21QcmVmaXgiOwoKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gPT4gbnVsbDsKfQoKY2xhc3MgX0xvY2FsQ29tYmluYXRvck1pcnJvciBleHRlbmRzIF9Mb2NhbE1pcnJvciBpbXBsZW1lbnRzIENvbWJpbmF0b3JNaXJyb3IgewogIGZpbmFsIExpc3Q8U3ltYm9sPiBpZGVudGlmaWVyczsKICBmaW5hbCBib29sIGlzU2hvdzsKCiAgX0xvY2FsQ29tYmluYXRvck1pcnJvci5fKGlkZW50aWZpZXJTdHJpbmcsIHRoaXMuaXNTaG93KQogICAgICA6IHRoaXMuaWRlbnRpZmllcnMgPQogICAgICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8U3ltYm9sPig8U3ltYm9sPltfcyhpZGVudGlmaWVyU3RyaW5nKV0pOwoKICBib29sIGdldCBpc0hpZGUgPT4gIWlzU2hvdzsKfQoKY2xhc3MgX0xvY2FsTWV0aG9kTWlycm9yIGV4dGVuZHMgX0xvY2FsRGVjbGFyYXRpb25NaXJyb3IKICAgIGltcGxlbWVudHMgTWV0aG9kTWlycm9yIHsKICBmaW5hbCBUeXBlIF9pbnN0YW50aWF0b3I7CiAgZmluYWwgYm9vbCBpc1N0YXRpYzsKICBmaW5hbCBpbnQgX2tpbmRGbGFnczsKCiAgX0xvY2FsTWV0aG9kTWlycm9yLl8ocmVmbGVjdGVlLCBTdHJpbmcgc2ltcGxlTmFtZSwgdGhpcy5fb3duZXIsCiAgICAgIHRoaXMuX2luc3RhbnRpYXRvciwgdGhpcy5pc1N0YXRpYywgdGhpcy5fa2luZEZsYWdzKQogICAgICA6IHN1cGVyLl8ocmVmbGVjdGVlLCBfcyhzaW1wbGVOYW1lKSk7CgogIHN0YXRpYyBjb25zdCBrQWJzdHJhY3QgPSAwOwogIHN0YXRpYyBjb25zdCBrR2V0dGVyID0gMTsKICBzdGF0aWMgY29uc3Qga1NldHRlciA9IDI7CiAgc3RhdGljIGNvbnN0IGtDb25zdHJ1Y3RvciA9IDM7CiAgc3RhdGljIGNvbnN0IGtDb25zdEN0b3IgPSA0OwogIHN0YXRpYyBjb25zdCBrR2VuZXJhdGl2ZUN0b3IgPSA1OwogIHN0YXRpYyBjb25zdCBrUmVkaXJlY3RpbmdDdG9yID0gNjsKICBzdGF0aWMgY29uc3Qga0ZhY3RvcnlDdG9yID0gNzsKICBzdGF0aWMgY29uc3Qga0V4dGVybmFsID0gODsKICBzdGF0aWMgY29uc3Qga1N5bnRoZXRpYyA9IDk7CgogIC8vIFRoZXNlIG9mZnNldHMgbXVjaCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aG9zZSBpbiBtaXJyb3JzLmguCiAgYm9vbCBnZXQgaXNBYnN0cmFjdCA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0Fic3RyYWN0KSk7CiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtHZXR0ZXIpKTsKICBib29sIGdldCBpc1NldHRlciA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga1NldHRlcikpOwogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtDb25zdHJ1Y3RvcikpOwogIGJvb2wgZ2V0IGlzQ29uc3RDb25zdHJ1Y3RvciA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0NvbnN0Q3RvcikpOwogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yID0+CiAgICAgIDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrR2VuZXJhdGl2ZUN0b3IpKTsKICBib29sIGdldCBpc1JlZGlyZWN0aW5nQ29uc3RydWN0b3IgPT4KICAgICAgMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtSZWRpcmVjdGluZ0N0b3IpKTsKICBib29sIGdldCBpc0ZhY3RvcnlDb25zdHJ1Y3RvciA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0ZhY3RvcnlDdG9yKSk7CiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0V4dGVybmFsKSk7CiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtTeW50aGV0aWMpKTsKCiAgc3RhdGljIGNvbnN0IF9vcGVyYXRvcnMgPSBjb25zdCBbCiAgICAiJSIsICImIiwgIioiLCAiKyIsICItIiwgIi8iLCAiPCIsICI8PCIsIC8vCiAgICAiPD0iLCAiPT0iLCAiPiIsICI+PSIsICI+PiIsICJbXSIsICJbXT0iLAogICAgIl4iLCAifCIsICJ+IiwgInVuYXJ5LSIsICJ+LyIsCiAgXTsKICBib29sIGdldCBpc09wZXJhdG9yID0+IF9vcGVyYXRvcnMuY29udGFpbnMoX24oc2ltcGxlTmFtZSkpOwoKICBEZWNsYXJhdGlvbk1pcnJvciBfb3duZXI7CiAgRGVjbGFyYXRpb25NaXJyb3IgZ2V0IG93bmVyIHsKICAgIC8vIEZvciBuZXN0ZWQgY2xvc3VyZXMgaXQgaXMgcG9zc2libGUsIHRoYXQgdGhlIG1pcnJvciBmb3IgdGhlIG93bmVyIGhhcyBub3QKICAgIC8vIGJlZW4gY3JlYXRlZCB5ZXQuCiAgICBpZiAoX293bmVyID09IG51bGwpIHsKICAgICAgX293bmVyID0gX01ldGhvZE1pcnJvcl9vd25lcihfcmVmbGVjdGVlLCBfaW5zdGFudGlhdG9yKTsKICAgIH0KICAgIHJldHVybiBfb3duZXI7CiAgfQoKICBib29sIGdldCBpc1ByaXZhdGUgPT4KICAgICAgX24oc2ltcGxlTmFtZSkuc3RhcnRzV2l0aCgnXycpIHx8IF9uKGNvbnN0cnVjdG9yTmFtZSkuc3RhcnRzV2l0aCgnXycpOwoKICBib29sIGdldCBpc1RvcExldmVsID0+IG93bmVyIGlzIExpYnJhcnlNaXJyb3I7CgogIFR5cGVNaXJyb3IgX3JldHVyblR5cGU7CiAgVHlwZU1pcnJvciBnZXQgcmV0dXJuVHlwZSB7CiAgICBpZiAoX3JldHVyblR5cGUgPT0gbnVsbCkgewogICAgICBpZiAoaXNDb25zdHJ1Y3RvcikgewogICAgICAgIF9yZXR1cm5UeXBlID0gb3duZXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3JldHVyblR5cGUgPQogICAgICAgICAgICByZWZsZWN0VHlwZShfTWV0aG9kTWlycm9yX3JldHVybl90eXBlKF9yZWZsZWN0ZWUsIF9pbnN0YW50aWF0b3IpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9yZXR1cm5UeXBlOwogIH0KCiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IF9wYXJhbWV0ZXJzOwogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBnZXQgcGFyYW1ldGVycyB7CiAgICBpZiAoX3BhcmFtZXRlcnMgPT0gbnVsbCkgewogICAgICBfcGFyYW1ldGVycyA9IG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxQYXJhbWV0ZXJNaXJyb3I+KAogICAgICAgICAgX01ldGhvZE1pcnJvcl9wYXJhbWV0ZXJzKF9yZWZsZWN0ZWUpLmNhc3Q8UGFyYW1ldGVyTWlycm9yPigpKTsKICAgIH0KICAgIHJldHVybiBfcGFyYW1ldGVyczsKICB9CgogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiAhaXNHZXR0ZXIgJiYgIWlzU2V0dGVyICYmICFpc0NvbnN0cnVjdG9yOwoKICBTeW1ib2wgX2NvbnN0cnVjdG9yTmFtZTsKICBTeW1ib2wgZ2V0IGNvbnN0cnVjdG9yTmFtZSB7CiAgICBpZiAoX2NvbnN0cnVjdG9yTmFtZSA9PSBudWxsKSB7CiAgICAgIGlmICghaXNDb25zdHJ1Y3RvcikgewogICAgICAgIF9jb25zdHJ1Y3Rvck5hbWUgPSBfcygnJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHBhcnRzID0gTWlycm9yU3lzdGVtLmdldE5hbWUoc2ltcGxlTmFtZSkuc3BsaXQoJy4nKTsKICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMikgewogICAgICAgICAgdGhyb3cgbmV3IF9JbnRlcm5hbE1pcnJvckVycm9yKAogICAgICAgICAgICAgICdJbnRlcm5hbCBlcnJvciBpbiBNZXRob2RNaXJyb3IuY29uc3RydWN0b3JOYW1lOiAnCiAgICAgICAgICAgICAgJ21hbGZvcm1lZCBuYW1lIDwkc2ltcGxlTmFtZT4nKTsKICAgICAgICB9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICBMaWJyYXJ5TWlycm9yIGRlZmluaW5nTGlicmFyeSA9IG93bmVyLm93bmVyOwogICAgICAgICAgX2NvbnN0cnVjdG9yTmFtZSA9IE1pcnJvclN5c3RlbS5nZXRTeW1ib2wocGFydHNbMV0sIGRlZmluaW5nTGlicmFyeSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9jb25zdHJ1Y3Rvck5hbWUgPSBfcygnJyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2NvbnN0cnVjdG9yTmFtZTsKICB9CgogIFN0cmluZyBnZXQgc291cmNlID0+IF9NZXRob2RNaXJyb3Jfc291cmNlKF9yZWZsZWN0ZWUpOwoKICB2b2lkIF9wYXRjaENvbnN0cnVjdG9yTmFtZShvd25lck5hbWUpIHsKICAgIHZhciBjbiA9IF9uKGNvbnN0cnVjdG9yTmFtZSk7CiAgICBpZiAoY24gPT0gJycpIHsKICAgICAgX3NpbXBsZU5hbWUgPSBfcyhvd25lck5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgX3NpbXBsZU5hbWUgPSBfcyhvd25lck5hbWUgKyAiLiIgKyBjbik7CiAgICB9CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiTWV0aG9kTWlycm9yIG9uICcke01pcnJvclN5c3RlbS5nZXROYW1lKHNpbXBsZU5hbWUpfSciOwoKICBzdGF0aWMgZHluYW1pYyBfTWV0aG9kTWlycm9yX293bmVyKHJlZmxlY3RlZSwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIk1ldGhvZE1pcnJvcl9vd25lciI7CgogIHN0YXRpYyBkeW5hbWljIF9NZXRob2RNaXJyb3JfcmV0dXJuX3R5cGUocmVmbGVjdGVlLCBpbnN0YW50aWF0b3IpCiAgICAgIG5hdGl2ZSAiTWV0aG9kTWlycm9yX3JldHVybl90eXBlIjsKCiAgTGlzdDxkeW5hbWljPiBfTWV0aG9kTWlycm9yX3BhcmFtZXRlcnMocmVmbGVjdGVlKQogICAgICBuYXRpdmUgIk1ldGhvZE1pcnJvcl9wYXJhbWV0ZXJzIjsKCiAgc3RhdGljIFN0cmluZyBfTWV0aG9kTWlycm9yX3NvdXJjZShyZWZsZWN0ZWUpIG5hdGl2ZSAiTWV0aG9kTWlycm9yX3NvdXJjZSI7Cn0KCmNsYXNzIF9Mb2NhbFZhcmlhYmxlTWlycm9yIGV4dGVuZHMgX0xvY2FsRGVjbGFyYXRpb25NaXJyb3IKICAgIGltcGxlbWVudHMgVmFyaWFibGVNaXJyb3IgewogIGZpbmFsIERlY2xhcmF0aW9uTWlycm9yIG93bmVyOwogIGZpbmFsIGJvb2wgaXNTdGF0aWM7CiAgZmluYWwgYm9vbCBpc0ZpbmFsOwogIGZpbmFsIGJvb2wgaXNDb25zdDsKCiAgX0xvY2FsVmFyaWFibGVNaXJyb3IuXyhyZWZsZWN0ZWUsIFN0cmluZyBzaW1wbGVOYW1lLCB0aGlzLm93bmVyLCB0aGlzLl90eXBlLAogICAgICB0aGlzLmlzU3RhdGljLCB0aGlzLmlzRmluYWwsIHRoaXMuaXNDb25zdCkKICAgICAgOiBzdXBlci5fKHJlZmxlY3RlZSwgX3Moc2ltcGxlTmFtZSkpOwoKICBib29sIGdldCBpc1RvcExldmVsID0+IG93bmVyIGlzIExpYnJhcnlNaXJyb3I7CgogIFR5cGUgZ2V0IF9pbnN0YW50aWF0b3IgewogICAgZmluYWwgbyA9IG93bmVyOyAvLyBOb3RlOiBuZWVkIGxvY2FsIHZhcmlhYmxlIGZvciBwcm9tb3Rpb24gdG8gaGFwcGVuLgogICAgaWYgKG8gaXMgX0xvY2FsQ2xhc3NNaXJyb3IpIHsKICAgICAgcmV0dXJuIG8uX2luc3RhbnRpYXRvcjsKICAgIH0gZWxzZSBpZiAobyBpcyBfTG9jYWxNZXRob2RNaXJyb3IpIHsKICAgICAgcmV0dXJuIG8uX2luc3RhbnRpYXRvcjsKICAgIH0gZWxzZSBpZiAobyBpcyBfTG9jYWxMaWJyYXJ5TWlycm9yKSB7CiAgICAgIHJldHVybiBvLl9pbnN0YW50aWF0b3I7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigidW5leHBlY3RlZCBvd25lciAke293bmVyfSIpOwogICAgfQogIH0KCiAgVHlwZU1pcnJvciBfdHlwZTsKICBUeXBlTWlycm9yIGdldCB0eXBlIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIF90eXBlID0gcmVmbGVjdFR5cGUoX1ZhcmlhYmxlTWlycm9yX3R5cGUoX3JlZmxlY3RlZSwgX2luc3RhbnRpYXRvcikpOwogICAgfQogICAgcmV0dXJuIF90eXBlOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgIlZhcmlhYmxlTWlycm9yIG9uICcke01pcnJvclN5c3RlbS5nZXROYW1lKHNpbXBsZU5hbWUpfSciOwoKICBzdGF0aWMgX1ZhcmlhYmxlTWlycm9yX3R5cGUocmVmbGVjdGVlLCBpbnN0YW50aWF0b3IpCiAgICAgIG5hdGl2ZSAiVmFyaWFibGVNaXJyb3JfdHlwZSI7Cn0KCmNsYXNzIF9Mb2NhbFBhcmFtZXRlck1pcnJvciBleHRlbmRzIF9Mb2NhbFZhcmlhYmxlTWlycm9yCiAgICBpbXBsZW1lbnRzIFBhcmFtZXRlck1pcnJvciB7CiAgZmluYWwgaW50IF9wb3NpdGlvbjsKICBmaW5hbCBib29sIGlzT3B0aW9uYWw7CiAgZmluYWwgYm9vbCBpc05hbWVkOwogIGZpbmFsIExpc3QgX3VubWlycm9yZWRNZXRhZGF0YTsKCiAgX0xvY2FsUGFyYW1ldGVyTWlycm9yLl8oCiAgICAgIHJlZmxlY3RlZSwKICAgICAgU3RyaW5nIHNpbXBsZU5hbWUsCiAgICAgIERlY2xhcmF0aW9uTWlycm9yIG93bmVyLAogICAgICB0aGlzLl9wb3NpdGlvbiwKICAgICAgdGhpcy5pc09wdGlvbmFsLAogICAgICB0aGlzLmlzTmFtZWQsCiAgICAgIGJvb2wgaXNGaW5hbCwKICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlUmVmbGVjdGVlLAogICAgICB0aGlzLl91bm1pcnJvcmVkTWV0YWRhdGEpCiAgICAgIDogc3VwZXIuXygKICAgICAgICAgICAgcmVmbGVjdGVlLAogICAgICAgICAgICBzaW1wbGVOYW1lLAogICAgICAgICAgICBvd25lciwKICAgICAgICAgICAgbnVsbCwgLy8gV2Ugb3ZlcnJpZGUgdGhlIHR5cGUuCiAgICAgICAgICAgIGZhbHNlLCAvLyBpc1N0YXRpYyBkb2VzIG5vdCBhcHBseS4KICAgICAgICAgICAgaXNGaW5hbCwKICAgICAgICAgICAgZmFsc2UgLy8gTm90IGNvbnN0LgogICAgICAgICAgICApOwoKICBPYmplY3QgX2RlZmF1bHRWYWx1ZVJlZmxlY3RlZTsKICBJbnN0YW5jZU1pcnJvciBfZGVmYXVsdFZhbHVlOwogIEluc3RhbmNlTWlycm9yIGdldCBkZWZhdWx0VmFsdWUgewogICAgaWYgKCFpc09wdGlvbmFsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKF9kZWZhdWx0VmFsdWUgPT0gbnVsbCkgewogICAgICBfZGVmYXVsdFZhbHVlID0gcmVmbGVjdChfZGVmYXVsdFZhbHVlUmVmbGVjdGVlKTsKICAgIH0KICAgIHJldHVybiBfZGVmYXVsdFZhbHVlOwogIH0KCiAgYm9vbCBnZXQgaGFzRGVmYXVsdFZhbHVlID0+IF9kZWZhdWx0VmFsdWVSZWZsZWN0ZWUgIT0gbnVsbDsKCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJQYXJhbWV0ZXJNaXJyb3IubG9jYXRpb24gdW5pbXBsZW1lbnRlZCIpOwogIH0KCiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhIHsKICAgIGlmIChfdW5taXJyb3JlZE1ldGFkYXRhID09IG51bGwpIHJldHVybiBjb25zdCA8SW5zdGFuY2VNaXJyb3I+W107CiAgICByZXR1cm4gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PEluc3RhbmNlTWlycm9yPigKICAgICAgICBfdW5taXJyb3JlZE1ldGFkYXRhLm1hcChyZWZsZWN0KSk7CiAgfQoKICBUeXBlTWlycm9yIF90eXBlOwogIFR5cGVNaXJyb3IgZ2V0IHR5cGUgewogICAgaWYgKF90eXBlID09IG51bGwpIHsKICAgICAgX3R5cGUgPSByZWZsZWN0VHlwZSgKICAgICAgICAgIF9QYXJhbWV0ZXJNaXJyb3JfdHlwZShfcmVmbGVjdGVlLCBfcG9zaXRpb24sIF9pbnN0YW50aWF0b3IpKTsKICAgIH0KICAgIHJldHVybiBfdHlwZTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJQYXJhbWV0ZXJNaXJyb3Igb24gJyR7X24oc2ltcGxlTmFtZSl9JyI7CgogIHN0YXRpYyBUeXBlIF9QYXJhbWV0ZXJNaXJyb3JfdHlwZShfcmVmbGVjdGVlLCBfcG9zaXRpb24sIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJQYXJhbWV0ZXJNaXJyb3JfdHlwZSI7Cn0KCmNsYXNzIF9TcGVjaWFsVHlwZU1pcnJvciBleHRlbmRzIF9Mb2NhbE1pcnJvcgogICAgaW1wbGVtZW50cyBUeXBlTWlycm9yLCBEZWNsYXJhdGlvbk1pcnJvciB7CiAgZmluYWwgU3ltYm9sIHNpbXBsZU5hbWU7CgogIF9TcGVjaWFsVHlwZU1pcnJvci5fKFN0cmluZyBuYW1lKSA6IHNpbXBsZU5hbWUgPSBfcyhuYW1lKTsKCiAgYm9vbCBnZXQgaXNQcml2YXRlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gdHJ1ZTsKCiAgRGVjbGFyYXRpb25NaXJyb3IgZ2V0IG93bmVyID0+IG51bGw7CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiA9PiBudWxsOwogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSA9PiBjb25zdCA8SW5zdGFuY2VNaXJyb3I+W107CgogIGJvb2wgZ2V0IGhhc1JlZmxlY3RlZFR5cGUgPT4gc2ltcGxlTmFtZSA9PSAjZHluYW1pYzsKICBUeXBlIGdldCByZWZsZWN0ZWRUeXBlIHsKICAgIGlmIChzaW1wbGVOYW1lID09ICNkeW5hbWljKSByZXR1cm4gZHluYW1pYzsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJ2b2lkIGhhcyBubyByZWZsZWN0ZWQgdHlwZSIpOwogIH0KCiAgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+IGdldCB0eXBlVmFyaWFibGVzID0+IGNvbnN0IDxUeXBlVmFyaWFibGVNaXJyb3I+W107CiAgTGlzdDxUeXBlTWlycm9yPiBnZXQgdHlwZUFyZ3VtZW50cyA9PiBjb25zdCA8VHlwZU1pcnJvcj5bXTsKCiAgYm9vbCBnZXQgaXNPcmlnaW5hbERlY2xhcmF0aW9uID0+IHRydWU7CiAgVHlwZU1pcnJvciBnZXQgb3JpZ2luYWxEZWNsYXJhdGlvbiA9PiB0aGlzOwoKICBTeW1ib2wgZ2V0IHF1YWxpZmllZE5hbWUgPT4gc2ltcGxlTmFtZTsKCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBfU3BlY2lhbFR5cGVNaXJyb3IpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRoaXMuc2ltcGxlTmFtZSA9PSBvdGhlci5zaW1wbGVOYW1lOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBzaW1wbGVOYW1lLmhhc2hDb2RlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVHlwZU1pcnJvciBvbiAnJHtfbihzaW1wbGVOYW1lKX0nIjsKCiAgYm9vbCBpc1N1YnR5cGVPZihUeXBlTWlycm9yIG90aGVyKSB7CiAgICByZXR1cm4gc2ltcGxlTmFtZSA9PSAjZHluYW1pYyB8fCBvdGhlciBpcyBfU3BlY2lhbFR5cGVNaXJyb3I7CiAgfQoKICBib29sIGlzQXNzaWduYWJsZVRvKFR5cGVNaXJyb3Igb3RoZXIpIHsKICAgIHJldHVybiBzaW1wbGVOYW1lID09ICNkeW5hbWljIHx8IG90aGVyIGlzIF9TcGVjaWFsVHlwZU1pcnJvcjsKICB9Cn0KCmNsYXNzIF9NaXJyb3JzIHsKICBzdGF0aWMgTWlycm9yU3lzdGVtIF9jdXJyZW50TWlycm9yU3lzdGVtID0gbmV3IF9Mb2NhbE1pcnJvclN5c3RlbSgpOwogIHN0YXRpYyBNaXJyb3JTeXN0ZW0gY3VycmVudE1pcnJvclN5c3RlbSgpIHsKICAgIHJldHVybiBfY3VycmVudE1pcnJvclN5c3RlbTsKICB9CgogIC8vIENyZWF0ZXMgYSBuZXcgbG9jYWwgbWlycm9yIGZvciBzb21lIE9iamVjdC4KICBzdGF0aWMgSW5zdGFuY2VNaXJyb3IgcmVmbGVjdChPYmplY3QgcmVmbGVjdGVlKSB7CiAgICByZXR1cm4gcmVmbGVjdGVlIGlzIEZ1bmN0aW9uCiAgICAgICAgPyBuZXcgX0xvY2FsQ2xvc3VyZU1pcnJvci5fKHJlZmxlY3RlZSkKICAgICAgICA6IG5ldyBfTG9jYWxJbnN0YW5jZU1pcnJvci5fKHJlZmxlY3RlZSk7CiAgfQoKICBzdGF0aWMgQ2xhc3NNaXJyb3IgX21ha2VMb2NhbENsYXNzTWlycm9yKFR5cGUga2V5KQogICAgICBuYXRpdmUgIk1pcnJvcnNfbWFrZUxvY2FsQ2xhc3NNaXJyb3IiOwogIHN0YXRpYyBUeXBlTWlycm9yIF9tYWtlTG9jYWxUeXBlTWlycm9yKFR5cGUga2V5KQogICAgICBuYXRpdmUgIk1pcnJvcnNfbWFrZUxvY2FsVHlwZU1pcnJvciI7CiAgc3RhdGljIFR5cGUgX2luc3RhbnRpYXRlR2VuZXJpY1R5cGUoVHlwZSBrZXksIHR5cGVBcmd1bWVudHMpCiAgICAgIG5hdGl2ZSAiTWlycm9yc19pbnN0YW50aWF0ZUdlbmVyaWNUeXBlIjsKCiAgc3RhdGljIEV4cGFuZG88X0xvY2FsQ2xhc3NNaXJyb3I+IF9kZWNsYXJhdGlvbkNhY2hlID0KICAgICAgbmV3IEV4cGFuZG8oIkNsYXNzTWlycm9yIik7CiAgc3RhdGljIEV4cGFuZG88VHlwZU1pcnJvcj4gX2luc3RhbnRpYXRpb25DYWNoZSA9IG5ldyBFeHBhbmRvKCJUeXBlTWlycm9yIik7CgogIHN0YXRpYyBDbGFzc01pcnJvciByZWZsZWN0Q2xhc3MoVHlwZSBrZXkpIHsKICAgIHZhciBjbGFzc01pcnJvciA9IF9kZWNsYXJhdGlvbkNhY2hlW2tleV07CiAgICBpZiAoY2xhc3NNaXJyb3IgPT0gbnVsbCkgewogICAgICBjbGFzc01pcnJvciA9IF9tYWtlTG9jYWxDbGFzc01pcnJvcihrZXkpOwogICAgICBfZGVjbGFyYXRpb25DYWNoZVtrZXldID0gY2xhc3NNaXJyb3I7CiAgICAgIGlmICghY2xhc3NNaXJyb3IuX2lzR2VuZXJpYykgewogICAgICAgIF9pbnN0YW50aWF0aW9uQ2FjaGVba2V5XSA9IGNsYXNzTWlycm9yOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2xhc3NNaXJyb3I7CiAgfQoKICBzdGF0aWMgVHlwZU1pcnJvciByZWZsZWN0VHlwZShUeXBlIGtleSwgW0xpc3Q8VHlwZT4gdHlwZUFyZ3VtZW50c10pIHsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAga2V5ID0gX2luc3RhbnRpYXRlVHlwZShrZXksIHR5cGVBcmd1bWVudHMpOwogICAgfQogICAg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Om1pcnJvcnMtcGF0Y2gvbWlycm9yX3JlZmVyZW5jZS5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvbWlycm9yc19wYXRjaC5kYXJ0irovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIE5vdGU6IHRoZSBWTSBjb25jYXRlbmF0ZXMgYWxsIHBhdGNoIGZpbGVzIGludG8gYSBzaW5nbGUgcGF0Y2ggZmlsZS4gVGhpcwovLy8gZmlsZSBpcyB0aGUgZmlyc3QgcGF0Y2ggaW4gImRhcnQ6X2ludGVybmFsIiB3aGljaCBjb250YWlucyBhbGwgdGhlIGltcG9ydHMKLy8vIHVzZWQgYnkgcGF0Y2hlcyBvZiB0aGF0IGxpYnJhcnkuIFdlIHBsYW4gdG8gY2hhbmdlIHRoaXMgd2hlbiB3ZSBoYXZlIGEKLy8vIHNoYXJlZCBmcm9udCBlbmQgYW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBhcyBpbnRlcm5hbDsKCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2g7CgppbXBvcnQgImRhcnQ6YXN5bmMiIHNob3cgRnV0dXJlOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iIHNob3cgVW5tb2RpZmlhYmxlTGlzdFZpZXcsIFVubW9kaWZpYWJsZU1hcFZpZXc7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAibWlycm9yc19pbXBsLmRhcnQiOwovLyBwYXJ0ICJtaXJyb3JfcmVmZXJlbmNlLmRhcnQiOwoKLyoqCiAqIFJldHVybnMgYSBbTWlycm9yU3lzdGVtXSBmb3IgdGhlIGN1cnJlbnQgaXNvbGF0ZS4KICovCkBwYXRjaApNaXJyb3JTeXN0ZW0gY3VycmVudE1pcnJvclN5c3RlbSgpIHsKICByZXR1cm4gX01pcnJvcnMuY3VycmVudE1pcnJvclN5c3RlbSgpOwp9CgovKioKICogUmV0dXJucyBhbiBbSW5zdGFuY2VNaXJyb3JdIGZvciBzb21lIERhcnQgbGFuZ3VhZ2Ugb2JqZWN0LgogKgogKiBUaGlzIG9ubHkgd29ya3MgaWYgdGhpcyBtaXJyb3Igc3lzdGVtIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUKICogY3VycmVudCBydW5uaW5nIGlzb2xhdGUuCiAqLwpAcGF0Y2gKSW5zdGFuY2VNaXJyb3IgcmVmbGVjdChPYmplY3QgcmVmbGVjdGVlKSB7CiAgcmV0dXJuIF9NaXJyb3JzLnJlZmxlY3QocmVmbGVjdGVlKTsKfQoKLyoqCiAqIFJldHVybnMgYSBbQ2xhc3NNaXJyb3JdIGZvciB0aGUgY2xhc3MgcmVwcmVzZW50ZWQgYnkgYSBEYXJ0CiAqIFR5cGUgb2JqZWN0LgogKgogKiBUaGlzIG9ubHkgd29ya3Mgd2l0aCBvYmplY3RzIGxvY2FsIHRvIHRoZSBjdXJyZW50IGlzb2xhdGUuCiAqLwpAcGF0Y2gKQ2xhc3NNaXJyb3IgcmVmbGVjdENsYXNzKFR5cGUga2V5KSB7CiAgcmV0dXJuIF9NaXJyb3JzLnJlZmxlY3RDbGFzcyhrZXkpOwp9CgpAcGF0Y2gKVHlwZU1pcnJvciByZWZsZWN0VHlwZShUeXBlIGtleSwgW0xpc3Q8VHlwZT4gdHlwZUFyZ3VtZW50c10pIHsKICByZXR1cm4gX01pcnJvcnMucmVmbGVjdFR5cGUoa2V5LCB0eXBlQXJndW1lbnRzKTsKfQoKQHBhdGNoCmNsYXNzIE1pcnJvclN5c3RlbSB7CiAgQHBhdGNoCiAgTGlicmFyeU1pcnJvciBmaW5kTGlicmFyeShTeW1ib2wgbGlicmFyeU5hbWUpIHsKICAgIHZhciBjYW5kaWRhdGVzID0KICAgICAgICBsaWJyYXJpZXMudmFsdWVzLndoZXJlKChsaWIpID0+IGxpYi5zaW1wbGVOYW1lID09IGxpYnJhcnlOYW1lKTsKICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHJldHVybiBjYW5kaWRhdGVzLnNpbmdsZTsKICAgIH0KICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA+IDEpIHsKICAgICAgdmFyIHVyaXMgPSBjYW5kaWRhdGVzLm1hcCgobGliKSA9PiBsaWIudXJpLnRvU3RyaW5nKCkpLnRvTGlzdCgpOwogICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUaGVyZSBhcmUgbXVsdGlwbGUgbGlicmFyaWVzIG5hbWVkICIKICAgICAgICAgICInJHtnZXROYW1lKGxpYnJhcnlOYW1lKX0nOiAkdXJpcyIpOwogICAgfQogICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGhlcmUgaXMgbm8gbGlicmFyeSBuYW1lZCAnJHtnZXROYW1lKGxpYnJhcnlOYW1lKX0nIik7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIGdldE5hbWUoU3ltYm9sIHN5bWJvbCkgewogICAgcmV0dXJuIGludGVybmFsLlN5bWJvbC5jb21wdXRlVW5tYW5nbGVkTmFtZShzeW1ib2wpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIFN5bWJvbCBnZXRTeW1ib2woU3RyaW5nIG5hbWUsIFtMaWJyYXJ5TWlycm9yIGxpYnJhcnldKSB7CiAgICBpZiAoKGxpYnJhcnkgIT0gbnVsbCAmJiBsaWJyYXJ5IGlzISBfTG9jYWxMaWJyYXJ5TWlycm9yKSB8fAogICAgICAgICgobmFtZS5sZW5ndGggPiAwKSAmJiAobmFtZVswXSA9PSAnXycpICYmIChsaWJyYXJ5ID09IG51bGwpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihsaWJyYXJ5KTsKICAgIH0KICAgIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgbmFtZSA9IF9tYW5nbGVOYW1lKG5hbWUsIChsaWJyYXJ5IGFzIF9Mb2NhbExpYnJhcnlNaXJyb3IpLl9yZWZsZWN0ZWUpOwogICAgfQogICAgcmV0dXJuIG5ldyBpbnRlcm5hbC5TeW1ib2wudW52YWxpZGF0ZWQobmFtZSk7CiAgfQoKICBzdGF0aWMgX21hbmdsZU5hbWUoU3RyaW5nIG5hbWUsIF9NaXJyb3JSZWZlcmVuY2UgbGliKQogICAgICBuYXRpdmUgIk1pcnJvcnNfbWFuZ2xlTmFtZSI7Cn0KXwBOTjwBTU9LKwElASQBIQFJATodIQEENQQHJSkCAQQ+A0AcBAcrJgIBBD8QAz4EByUlAgEHPzMCAQcVCTIVSCIgBiFHQC8GUAQBCSk5BAEJQkBIKAYbTQYyBAE4IwIBJWRhcnQ6bWlycm9ycy1wYXRjaC9taXJyb3JzX3BhdGNoLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3Byb2ZpbGVyL3Byb2ZpbGVyLmRhcnSBiS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gUGxlYXNlIHNlZSAnZGFydDpkZXZlbG9wZXInLgpARGVwcmVjYXRlZCgiRGFydCBTREsgMS4xMiIpCmxpYnJhcnkgZGFydC5wcm9maWxlcjsKCmV4cG9ydCAnZGFydDpkZXZlbG9wZXInCiAgICBzaG93IGdldEN1cnJlbnRUYWcsIENvdW50ZXIsIEdhdWdlLCBNZXRyaWMsIE1ldHJpY3MsIFVzZXJUYWc7CgwATk48ASEdFwEYQgENZGFydDpwcm9maWxlcjZvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvdHlwZWRfZGF0YS90eXBlZF9kYXRhLmRhcnTAAV2eLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBMaXN0cyB0aGF0IGVmZmljaWVudGx5IGhhbmRsZSBmaXhlZCBzaXplZCBkYXRhCi8vLyAoZm9yIGV4YW1wbGUsIHVuc2lnbmVkIDggYnl0ZSBpbnRlZ2VycykgYW5kIFNJTUQgbnVtZXJpYyB0eXBlcy4KLy8vCi8vLyBUbyB1c2UgdGhpcyBsaWJyYXJ5IGluIHlvdXIgY29kZToKLy8vCi8vLyAgICAgaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwovLy8KLy8vIHtAY2F0ZWdvcnkgQ29yZX0KbGlicmFyeSBkYXJ0LnR5cGVkX2RhdGE7CgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IFVubW9kaWZpYWJsZUxpc3RCYXNlOwoKcGFydCAidW5tb2RpZmlhYmxlX3R5cGVkX2RhdGEuZGFydCI7CgovKioKICogQSBzZXF1ZW5jZSBvZiBieXRlcyB1bmRlcmx5aW5nIGEgdHlwZWQgZGF0YSBvYmplY3QuCiAqCiAqIFVzZWQgdG8gcHJvY2VzcyBsYXJnZSBxdWFudGl0aWVzIG9mIGJpbmFyeSBvciBudW1lcmljYWwgZGF0YQogKiBtb3JlIGVmZmljaWVudGx5IHVzaW5nIGEgdHlwZWQgdmlldy4KICovCmFic3RyYWN0IGNsYXNzIEJ5dGVCdWZmZXIgewogIC8qKgogICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGlzIGJ5dGUgYnVmZmVyLCBpbiBieXRlcy4KICAgKi8KICBpbnQgZ2V0IGxlbmd0aEluQnl0ZXM7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDhMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgVWludDhMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10gYW5kIGNvbnRhaW5zIFtsZW5ndGhdIGJ5dGVzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCByYW5nZSBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBVaW50OExpc3QgYXNVaW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDhMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgSW50OExpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSBhbmQgY29udGFpbnMgW2xlbmd0aF0gYnl0ZXMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIHJhbmdlIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoYCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEludDhMaXN0IGFzSW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4Q2xhbXBlZExpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBVaW50OENsYW1wZWRMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10gYW5kIGNvbnRhaW5zIFtsZW5ndGhdIGJ5dGVzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCByYW5nZSBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBVaW50OENsYW1wZWRMaXN0IGFzVWludDhDbGFtcGVkTGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDE2TGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYFVpbnQxNkxpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSAxNi1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gMTYtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGV2ZW4sIHRoZSBsYXN0IGJ5dGUgY2FuJ3QgYmUgcGFydCBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAxNi1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSB0d28sCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aCAqIDJgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgVWludDE2TGlzdCBhc1VpbnQxNkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDE2TGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEludDE2TGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDE2LWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAxNi1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZXZlbiwgdGhlIGxhc3QgYnl0ZSBjYW4ndCBiZSBwYXJ0IG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDE2LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IHR3bywKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogMmAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBJbnQxNkxpc3QgYXNJbnQxNkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQzMkxpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBVaW50MzJMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10sIHdoaWNoIG11c3QgYmUgMzItYml0IGFsaWduZWQsCiAgICogYW5kIGNvbnRhaW5zIFtsZW5ndGhdIDMyLWJpdCBpbnRlZ2Vycy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyBhcyBmYXIgdG93YXJkcyB0aGUgZW5kIG9mCiAgICogdGhlIGJ1ZmZlciBhcyBwb3NzaWJsZSAtCiAgICogaWYgW2xlbmd0aEluQnl0ZXNdIGlzIG5vdCBkaXZpc2libGUgYnkgZm91ciwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDMyLWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGZvdXIsCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aCAqIDRgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgVWludDMyTGlzdCBhc1VpbnQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDMyTGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEludDMyTGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAzMi1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZGl2aXNpYmxlIGJ5IGZvdXIsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAzMi1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBmb3VyLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA0YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEludDMyTGlzdCBhc0ludDMyTGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDY0TGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYFVpbnQ2NExpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSA2NC1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gNjQtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSBlaWdodCwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDY0LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGVpZ2h0LAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA4YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIFVpbnQ2NExpc3QgYXNVaW50NjRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQ2NExpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBJbnQ2NExpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSA2NC1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gNjQtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSBlaWdodCwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDY0LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGVpZ2h0LAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA4YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEludDY0TGlzdCBhc0ludDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbSW50MzJ4NExpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBJbnQzMng0TGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDEyOC1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gMTI4LWJpdCBpbnRlZ2Vycy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyBhcyBmYXIgdG93YXJkcyB0aGUgZW5kIG9mCiAgICogdGhlIGJ1ZmZlciBhcyBwb3NzaWJsZSAtCiAgICogaWYgW2xlbmd0aEluQnl0ZXNdIGlzIG5vdCBkaXZpc2libGUgYnkgMTYsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAxMjgtYml0IGFsaWduZWQgcmFuZ2UKICAgKiBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBiZSBkaXZpc2libGUgYnkgc2l4dGVlbiwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogMTZgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgSW50MzJ4NExpc3QgYXNJbnQzMng0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQzMkxpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBGbG9hdDMyTGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAzMi1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZGl2aXNpYmxlIGJ5IGZvdXIsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAzMi1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBmb3VyLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA0YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEZsb2F0MzJMaXN0IGFzRmxvYXQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0NjRMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgRmxvYXQ2NExpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSA2NC1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gNjQtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSBlaWdodCwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDY0LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGVpZ2h0LAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA4YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEZsb2F0NjRMaXN0IGFzRmxvYXQ2NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0MzJ4NExpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBGbG9hdDMyeDRMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10sIHdoaWNoIG11c3QgYmUgMTI4LWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAxMjgtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSAxNiwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDEyOC1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBzaXh0ZWVuLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiAxNmAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBGbG9hdDMyeDRMaXN0IGFzRmxvYXQzMng0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQ2NHgyTGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEZsb2F0NjR4Mkxpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSAxMjgtYml0IGFsaWduZWQsCiAgICogYW5kIGNvbnRhaW5zIFtsZW5ndGhdIDEyOC1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZGl2aXNpYmxlIGJ5IDE2LCB0aGUgbGFzdCBieXRlcyBjYW4ndCBiZSBwYXJ0CiAgICogb2YgdGhlIHZpZXcuCiAgICoKICAgKiBUaGUgc3RhcnQgaW5kZXggYW5kIGxlbmd0aCBtdXN0IGRlc2NyaWJlIGEgdmFsaWQgMTI4LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IHNpeHRlZW4sCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aCAqIDE2YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEZsb2F0NjR4Mkxpc3QgYXNGbG9hdDY0eDJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtCeXRlRGF0YV0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEJ5dGVEYXRhYCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10gYW5kIGNvbnRhaW5zIFtsZW5ndGhdIGJ5dGVzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCByYW5nZSBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBCeXRlRGF0YSBhc0J5dGVEYXRhKFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKfQoKLyoqCiAqIEEgdHlwZWQgdmlldyBvZiBhIHNlcXVlbmNlIG9mIGJ5dGVzLgogKi8KYWJzdHJhY3QgY2xhc3MgVHlwZWREYXRhIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggZWxlbWVudCBpbiB0aGlzCiAgICogbGlzdC4KICAgKi8KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIHVuZGVybHlpbmcgYnl0ZSBidWZmZXIgb2YgdGhpcyB2aWV3LgogICAqLwogIGludCBnZXQgb2Zmc2V0SW5CeXRlczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoaXMgdmlldywgaW4gYnl0ZXMuCiAgICovCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBieXRlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCiAgICovCiAgQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyOwp9CgphYnN0cmFjdCBjbGFzcyBfVHlwZWRJbnRMaXN0IGV4dGVuZHMgVHlwZWREYXRhIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoaXMgbGlzdCBhbmQgW290aGVyXS4KICAgKgogICAqIElmIG90aGVyIGlzIGFsc28gYSB0eXBlZC1kYXRhIGludGVnZXIgbGlzdCwgdGhlIHJldHVybmVkIGxpc3Qgd2lsbAogICAqIGJlIGEgdHlwZS1kYXRhIGludGVnZXIgbGlzdCBjYXBhYmxlIG9mIGNvbnRhaW5pbmcgYWxsIHRoZSBlbGVtZW50cyBvZgogICAqIHRoaXMgbGlzdCBhbmQgb2YgW290aGVyXS4KICAgKiBPdGhlcndpc2UgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBiZSBhIG5vcm1hbCBncm93YWJsZSBgTGlzdDxpbnQ+YC4KICAgKi8KICBMaXN0PGludD4gb3BlcmF0b3IgKyhMaXN0PGludD4gb3RoZXIpOwp9CgphYnN0cmFjdCBjbGFzcyBfVHlwZWRGbG9hdExpc3QgZXh0ZW5kcyBUeXBlZERhdGEgewogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhpcyBsaXN0IGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgb3RoZXIgaXMgYWxzbyBhIHR5cGVkLWRhdGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGxpc3QsCiAgICogdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBiZSBhIHR5cGUtZGF0YSBmbG9hdCBsaXN0IGNhcGFibGUgb2YgY29udGFpbmluZwogICAqIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGFuZCBvZiBbb3RoZXJdLgogICAqIE90aGVyd2lzZSB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIGJlIGEgbm9ybWFsIGdyb3dhYmxlIGBMaXN0PGRvdWJsZT5gLgogICAqLwogIExpc3Q8ZG91YmxlPiBvcGVyYXRvciArKExpc3Q8ZG91YmxlPiBvdGhlcik7Cn0KCi8qKgogKiBEZXNjcmliZXMgZW5kaWFubmVzcyB0byBiZSB1c2VkIHdoZW4gYWNjZXNzaW5nIG9yIHVwZGF0aW5nIGEKICogc2VxdWVuY2Ugb2YgYnl0ZXMuCiAqLwpjbGFzcyBFbmRpYW4gewogIGZpbmFsIGJvb2wgX2xpdHRsZUVuZGlhbjsKICBjb25zdCBFbmRpYW4uXyh0aGlzLl9saXR0bGVFbmRpYW4pOwoKICBzdGF0aWMgY29uc3QgRW5kaWFuIGJpZyA9IGNvbnN0IEVuZGlhbi5fKGZhbHNlKTsKICBzdGF0aWMgY29uc3QgRW5kaWFuIGxpdHRsZSA9IGNvbnN0IEVuZGlhbi5fKHRydWUpOwogIHN0YXRpYyBmaW5hbCBFbmRpYW4gaG9zdCA9CiAgICAgIChuZXcgQnl0ZURhdGEudmlldyhuZXcgVWludDE2TGlzdC5mcm9tTGlzdChbMV0pLmJ1ZmZlcikpLmdldEludDgoMCkgPT0gMQogICAgICAgICAgPyBsaXR0bGUKICAgICAgICAgIDogYmlnOwp9CgovKioKICogQSBmaXhlZC1sZW5ndGgsIHJhbmRvbS1hY2Nlc3Mgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhbHNvIHByb3ZpZGVzIHJhbmRvbQogKiBhbmQgdW5hbGlnbmVkIGFjY2VzcyB0byB0aGUgZml4ZWQtd2lkdGggaW50ZWdlcnMgYW5kIGZsb2F0aW5nIHBvaW50CiAqIG51bWJlcnMgcmVwcmVzZW50ZWQgYnkgdGhvc2UgYnl0ZXMuCiAqCiAqIGBCeXRlRGF0YWAgbWF5IGJlIHVzZWQgdG8gcGFjayBhbmQgdW5wYWNrIGRhdGEgZnJvbSBleHRlcm5hbCBzb3VyY2VzCiAqIChzdWNoIGFzIG5ldHdvcmtzIG9yIGZpbGVzIHN5c3RlbXMpLCBhbmQgdG8gcHJvY2VzcyBsYXJnZSBxdWFudGl0aWVzCiAqIG9mIG51bWVyaWNhbCBkYXRhIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB3b3VsZCBiZSBwb3NzaWJsZQogKiB3aXRoIG9yZGluYXJ5IFtMaXN0XSBpbXBsZW1lbnRhdGlvbnMuCiAqIGBCeXRlRGF0YWAgY2FuIHNhdmUgc3BhY2UsIGJ5IGVsaW1pbmF0aW5nIHRoZSBuZWVkIGZvciBvYmplY3QgaGVhZGVycywKICogYW5kIHRpbWUsIGJ5IGVsaW1pbmF0aW5nIHRoZSBuZWVkIGZvciBkYXRhIGNvcGllcy4KICogRmluYWxseSwgYEJ5dGVEYXRhYCBtYXkgYmUgdXNlZCB0byBpbnRlbnRpb25hbGx5IHJlaW50ZXJwcmV0IHRoZSBieXRlcwogKiByZXByZXNlbnRpbmcgb25lIGFyaXRobWV0aWMgdHlwZSBhcyBhbm90aGVyLgogKiBGb3IgZXhhbXBsZSB0aGlzIGNvZGUgZnJhZ21lbnQgZGV0ZXJtaW5lIHdoYXQgMzItYml0IHNpZ25lZCBpbnRlZ2VyCiAqIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBieXRlcyBvZiBhIDMyLWJpdCBmbG9hdGluZyBwb2ludCBudW1iZXI6CiAqCiAqICAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4TGlzdCg4KS5idWZmZXI7CiAqICAgICB2YXIgYmRhdGEgPSBuZXcgQnl0ZURhdGEudmlldyhidWZmZXIpOwogKiAgICAgYmRhdGEuc2V0RmxvYXQzMigwLCAzLjA0KTsKICogICAgIGludCBodWggPSBiZGF0YS5nZXRJbnQzMigwKTsKICovCmFic3RyYWN0IGNsYXNzIEJ5dGVEYXRhIGltcGxlbWVudHMgVHlwZWREYXRhIHsKICAvKioKICAgKiBDcmVhdGVzIGEgW0J5dGVEYXRhXSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLCBhbGwgb2YKICAgKiB3aG9zZSBieXRlcyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGV4dGVybmFsIGZhY3RvcnkgQnl0ZURhdGEoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW0J5dGVEYXRhXSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4gW2J1ZmZlcl0uCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbQnl0ZURhdGFdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqLwogIGZhY3RvcnkgQnl0ZURhdGEudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNCeXRlRGF0YShvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgKHBvc3NpYmx5IG5lZ2F0aXZlKSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBieXRlIGF0IHRoZQogICAqIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIHR3bydzIGNvbXBsZW1lbnQgYmluYXJ5CiAgICogcmVwcmVzZW50YXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYmV0d2VlbiAtMTI4IGFuZCAxMjcsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGludCBnZXRJbnQ4KGludCBieXRlT2Zmc2V0KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgYnl0ZSBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCB0byB0aGUKICAgKiB0d28ncyBjb21wbGVtZW50IGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFt2YWx1ZV0sIHdoaWNoCiAgICogbXVzdCBmaXQgaW4gYSBzaW5nbGUgYnl0ZS4KICAgKgogICAqIEluIG90aGVyIHdvcmRzLCBbdmFsdWVdIG11c3QgYmUgYmV0d2VlbiAtMTI4IGFuZCAxMjcsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0SW50OChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9zaXRpdmUgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aGUgYnl0ZSBhdCB0aGUgc3BlY2lmaWVkCiAgICogW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiB1bnNpZ25lZCBiaW5hcnkgZm9ybS4KICAgKgogICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBiZXR3ZWVuIDAgYW5kIDI1NSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGdldFVpbnQ4KGludCBieXRlT2Zmc2V0KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgYnl0ZSBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCB0byB0aGUKICAgKiB1bnNpZ25lZCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBbdmFsdWVdLCB3aGljaCBtdXN0IGZpdAogICAqIGluIGEgc2luZ2xlIGJ5dGUuCiAgICoKICAgKiBJbiBvdGhlciB3b3JkcywgW3ZhbHVlXSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwKICAgKiBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldFVpbnQ4KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSAocG9zc2libHkgbmVnYXRpdmUpIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIHR3byBieXRlcyBhdAogICAqIHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiB0d28ncyBjb21wbGVtZW50IGJpbmFyeQogICAqIGZvcm0uCiAgICoKICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYmV0d2VlbiAtMjxzdXA+MTU8L3N1cD4gYW5kIDI8c3VwPjE1PC9zdXA+IC0gMSwKICAgKiBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDJgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGludCBnZXRJbnQxNihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFNldHMgdGhlIHR3byBieXRlcyBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzCiAgICogb2JqZWN0IHRvIHRoZSB0d28ncyBjb21wbGVtZW50IGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkCiAgICogW3ZhbHVlXSwgd2hpY2ggbXVzdCBmaXQgaW4gdHdvIGJ5dGVzLgogICAqCiAgICogSW4gb3RoZXIgd29yZHMsIFt2YWx1ZV0gbXVzdCBsaWUKICAgKiBiZXR3ZWVuIC0yPHN1cD4xNTwvc3VwPiBhbmQgMjxzdXA+MTU8L3N1cD4gLSAxLCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDJgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0SW50MTYoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvc2l0aXZlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIHR3byBieXRlcyBzdGFydGluZwogICAqIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiB1bnNpZ25lZCBiaW5hcnkKICAgKiBmb3JtLgogICAqCiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGJldHdlZW4gMCBhbmQgIDI8c3VwPjE2PC9zdXA+IC0gMSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyAyYCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBpbnQgZ2V0VWludDE2KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgdHdvIGJ5dGVzIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0CiAgICogdG8gdGhlIHVuc2lnbmVkIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFt2YWx1ZV0sCiAgICogd2hpY2ggbXVzdCBmaXQgaW4gdHdvIGJ5dGVzLgogICAqCiAgICogSW4gb3RoZXIgd29yZHMsIFt2YWx1ZV0gbXVzdCBiZSBiZXR3ZWVuCiAgICogMCBhbmQgMjxzdXA+MTY8L3N1cD4gLSAxLCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDJgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0VWludDE2KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSAocG9zc2libHkgbmVnYXRpdmUpIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGZvdXIgYnl0ZXMgYXQKICAgKiB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gdHdvJ3MgY29tcGxlbWVudCBiaW5hcnkKICAgKiBmb3JtLgogICAqCiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGJldHdlZW4gLTI8c3VwPjMxPC9zdXA+IGFuZCAyPHN1cD4zMTwvc3VwPiAtIDEsCiAgICogaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA0YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBpbnQgZ2V0SW50MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBTZXRzIHRoZSBmb3VyIGJ5dGVzIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMKICAgKiBvYmplY3QgdG8gdGhlIHR3bydzIGNvbXBsZW1lbnQgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQKICAgKiBbdmFsdWVdLCB3aGljaCBtdXN0IGZpdCBpbiBmb3VyIGJ5dGVzLgogICAqCiAgICogSW4gb3RoZXIgd29yZHMsIFt2YWx1ZV0gbXVzdCBsaWUKICAgKiBiZXR3ZWVuIC0yPHN1cD4zMTwvc3VwPiBhbmQgMjxzdXA+MzE8L3N1cD4gLSAxLCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDRgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0SW50MzIoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvc2l0aXZlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGZvdXIgYnl0ZXMgc3RhcnRpbmcKICAgKiBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gdW5zaWduZWQgYmluYXJ5CiAgICogZm9ybS4KICAgKgogICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBiZXR3ZWVuIDAgYW5kICAyPHN1cD4zMjwvc3VwPiAtIDEsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgNGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGdldFVpbnQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFNldHMgdGhlIGZvdXIgYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QKICAgKiB0byB0aGUgdW5zaWduZWQgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgW3ZhbHVlXSwKICAgKiB3aGljaCBtdXN0IGZpdCBpbiBmb3VyIGJ5dGVzLgogICAqCiAgICogSW4gb3RoZXIgd29yZHMsIFt2YWx1ZV0gbXVzdCBiZSBiZXR3ZWVuCiAgICogMCBhbmQgMjxzdXA+MzI8L3N1cD4gLSAxLCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDRgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0VWludDMyKGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSAocG9zc2libHkgbmVnYXRpdmUpIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGVpZ2h0IGJ5dGVzIGF0CiAgICogdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIHR3bydzIGNvbXBsZW1lbnQgYmluYXJ5CiAgICogZm9ybS4KICAgKgogICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBiZXR3ZWVuIC0yPHN1cD42Mzwvc3VwPiBhbmQgMjxzdXA+NjM8L3N1cD4gLSAxLAogICAqIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgOGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGdldEludDY0KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZWlnaHQgYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcwogICAqIG9iamVjdCB0byB0aGUgdHdvJ3MgY29tcGxlbWVudCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZAogICAqIFt2YWx1ZV0sIHdoaWNoIG11c3QgZml0IGluIGVpZ2h0IGJ5dGVzLgogICAqCiAgICogSW4gb3RoZXIgd29yZHMsIFt2YWx1ZV0gbXVzdCBsaWUKICAgKiBiZXR3ZWVuIC0yPHN1cD42Mzwvc3VwPiBhbmQgMjxzdXA+NjM8L3N1cD4gLSAxLCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDhgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0SW50NjQoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvc2l0aXZlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGVpZ2h0IGJ5dGVzIHN0YXJ0aW5nCiAgICogYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIHVuc2lnbmVkIGJpbmFyeQogICAqIGZvcm0uCiAgICoKICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYmV0d2VlbiAwIGFuZCAgMjxzdXA+NjQ8L3N1cD4gLSAxLCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDhgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGludCBnZXRVaW50NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBTZXRzIHRoZSBlaWdodCBieXRlcyBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdAogICAqIHRvIHRoZSB1bnNpZ25lZCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBbdmFsdWVdLAogICAqIHdoaWNoIG11c3QgZml0IGluIGVpZ2h0IGJ5dGVzLgogICAqCiAgICogSW4gb3RoZXIgd29yZHMsIFt2YWx1ZV0gbXVzdCBiZSBiZXR3ZWVuCiAgICogMCBhbmQgMjxzdXA+NjQ8L3N1cD4gLSAxLCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDhgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0VWludDY0KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGZvdXIgYnl0ZXMgYXQKICAgKiB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gSUVFRSA3NTQKICAgKiBzaW5nbGUtcHJlY2lzaW9uIGJpbmFyeSBmbG9hdGluZy1wb2ludCBmb3JtYXQgKGJpbmFyeTMyKS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgNGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgZG91YmxlIGdldEZsb2F0MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBTZXRzIHRoZSBmb3VyIGJ5dGVzIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMKICAgKiBvYmplY3QgdG8gdGhlIElFRUUgNzU0IHNpbmdsZS1wcmVjaXNpb24gYmluYXJ5IGZsb2F0aW5nLXBvaW50CiAgICogKGJpbmFyeTMyKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFt2YWx1ZV0uCiAgICoKICAgKiAqKk5vdGUgdGhhdCB0aGlzIG1ldGhvZCBjYW4gbG9zZSBwcmVjaXNpb24uKiogVGhlIGlucHV0IFt2YWx1ZV0gaXMKICAgKiBhIDY0LWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZSwgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gMzItYml0CiAgICogZmxvYXRpbmcgcG9pbnQgdmFsdWUgYnkgSUVFRSA3NTQgcm91bmRpbmcgcnVsZXMgYmVmb3JlIGl0IGlzIHN0b3JlZC4KICAgKiBJZiBbdmFsdWVdIGNhbm5vdCBiZSByZXByZXNlbnRlZCBleGFjdGx5IGFzIGEgYmluYXJ5MzIsIGl0IHdpbGwgYmUKICAgKiBjb252ZXJ0ZWQgdG8gdGhlIG5lYXJlc3QgYmluYXJ5MzIgdmFsdWUuICBJZiB0d28gYmluYXJ5MzIgdmFsdWVzIGFyZQogICAqIGVxdWFsbHkgY2xvc2UsIHRoZSBvbmUgd2hvc2UgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGlzIHplcm8gd2lsbCBiZSB1c2VkLgogICAqIE5vdGUgdGhhdCBmaW5pdGUgKGJ1dCBsYXJnZSkgdmFsdWVzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gaW5maW5pdHksIGFuZAogICAqIHNtYWxsIG5vbi16ZXJvIHZhbHVlcyBjYW4gYmUgY29udmVydGVkIHRvIHplcm8uCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDRgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0RmxvYXQzMihpbnQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHJlcHJlc2VudGVkIGJ5IHRoZSBlaWdodCBieXRlcyBhdAogICAqIHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiBJRUVFIDc1NAogICAqIGRvdWJsZS1wcmVjaXNpb24gYmluYXJ5IGZsb2F0aW5nLXBvaW50IGZvcm1hdCAoYmluYXJ5NjQpLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA4YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBkb3VibGUgZ2V0RmxvYXQ2NChpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFNldHMgdGhlIGVpZ2h0IGJ5dGVzIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMKICAgKiBvYmplY3QgdG8gdGhlIElFRUUgNzU0IGRvdWJsZS1wcmVjaXNpb24gYmluYXJ5IGZsb2F0aW5nLXBvaW50CiAgICogKGJpbmFyeTY0KSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFt2YWx1ZV0uCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDhgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIHZvaWQgc2V0RmxvYXQ2NChpbnQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgOC1iaXQgc2lnbmVkIGludGVnZXJzLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSB0cnVuY2F0ZWQgdG8gdGhlaXIgbG93IGVpZ2h0IGJpdHMsCiAqIGludGVycHJldGVkIGFzIGEgc2lnbmVkIDgtYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciB3aXRoIHZhbHVlcyBpbiB0aGUKICogcmFuZ2UgLTEyOCB0byArMTI3LgogKi8KYWJzdHJhY3QgY2xhc3MgSW50OExpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDhMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLCBhbGwgb2YKICAgKiB3aG9zZSBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnQ4TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQ4TGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBWYWx1ZXMgYXJlIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIGxpc3Qgd2hlbiB0aGV5IGFyZSBjb3BpZWQsCiAgICogdGhlIHNhbWUgd2F5IHN0b3JpbmcgdmFsdWVzIHRydW5jYXRlcyB0aGVtLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50OExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBbSW50OExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtJbnQ4TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICovCiAgZmFjdG9yeSBJbnQ4TGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc0ludDhMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhbiBgSW50OExpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMgbGlzdCBhdAogICAqIHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluIHRoZSBzYW1lCiAgICogb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBJbnQ4TGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIEludDhMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBJbnQ4TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSAxOwp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseQogKiBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIEludGVnZXJzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgdHJ1bmNhdGVkIHRvIHRoZWlyIGxvdyBlaWdodCBiaXRzLAogKiBpbnRlcnByZXRlZCBhcyBhbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIHdpdGggdmFsdWVzIGluIHRoZQogKiByYW5nZSAwIHRvIDI1NS4KICovCmFic3RyYWN0IGNsYXNzIFVpbnQ4TGlzdCBpbXBsZW1lbnRzIExpc3Q8aW50PiwgX1R5cGVkSW50TGlzdCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50OExpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFVpbnQ4TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50OExpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVmFsdWVzIGFyZSB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSBsaXN0IHdoZW4gdGhleSBhcmUgY29waWVkLAogICAqIHRoZSBzYW1lIHdheSBzdG9yaW5nIHZhbHVlcyB0cnVuY2F0ZXMgdGhlbS4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFVpbnQ4TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4TGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW1VpbnQ4TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICovCiAgZmFjdG9yeSBVaW50OExpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNVaW50OExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBjb25jYXRlbmF0aW9uIG9mIHRoaXMgbGlzdCBhbmQgW290aGVyXS4KICAgKgogICAqIElmIFtvdGhlcl0gaXMgYWxzbyBhIHR5cGVkLWRhdGEgbGlzdCwgdGhlbiB0aGUgcmV0dXJuIGxpc3Qgd2lsbCBiZSBhCiAgICogdHlwZWQgZGF0YSBsaXN0IGNhcGFibGUgb2YgaG9sZGluZyBib3RoIHVuc2lnbmVkIDgtYml0IGludGVnZXJzIGFuZAogICAqIHRoZSBlbGVtZW50cyBvZiBbb3RoZXJdLCBvdGhlcndpc2UgaXQnbGwgYmUgYSBub3JtYWwgbGlzdCBvZiBpbnRlZ2Vycy4KICAgKi8KICBMaXN0PGludD4gb3BlcmF0b3IgKyhMaXN0PGludD4gb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhIGBVaW50OExpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMgbGlzdCBhdAogICAqIHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluIHRoZSBzYW1lCiAgICogb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBVaW50OExpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBVaW50OExpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIFVpbnQ4TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSAxOwp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseQogKiBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIEludGVnZXJzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgY2xhbXBlZCB0byBhbiB1bnNpZ25lZCBlaWdodCBiaXQgdmFsdWUuCiAqIFRoYXQgaXMsIGFsbCB2YWx1ZXMgYmVsb3cgemVybyBhcmUgc3RvcmVkIGFzIHplcm8KICogYW5kIGFsbCB2YWx1ZXMgYWJvdmUgMjU1IGFyZSBzdG9yZWQgYXMgMjU1LgogKi8KYWJzdHJhY3QgY2xhc3MgVWludDhDbGFtcGVkTGlzdCBpbXBsZW1lbnRzIExpc3Q8aW50PiwgX1R5cGVkSW50TGlzdCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50OENsYW1wZWRMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLCBhbGwgb2YKICAgKiB3aG9zZSBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBVaW50OENsYW1wZWRMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4Q2xhbXBlZExpc3RdIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIFtlbGVtZW50c10KICAgKiBsaXN0IGFuZCBjb3BpZXMgb3ZlciB0aGUgdmFsdWVzIGNsYW1waW5nIHdoZW4gbmVlZGVkLgogICAqCiAgICogVmFsdWVzIGFyZSBjbGFtcGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgY2xhbXBzIHRoZW0uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBVaW50OENsYW1wZWRMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDhDbGFtcGVkTGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIHRoZQogICAqIHNwZWNpZmllZCBieXRlIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW1VpbnQ4TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlIGJ1ZmZlcgogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICovCiAgZmFjdG9yeSBVaW50OENsYW1wZWRMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzVWludDhDbGFtcGVkTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgVWludDhDbGFtcGVkTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IFVpbnQ4Q2xhbXBlZExpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBVaW50OENsYW1wZWRMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBVaW50OENsYW1wZWRMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDE2LWJpdCBzaWduZWQgaW50ZWdlcnMgdGhhdCBpcyB2aWV3YWJsZSBhcyBhCiAqIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSB0cnVuY2F0ZWQgdG8gdGhlaXIgbG93IDE2IGJpdHMsCiAqIGludGVycHJldGVkIGFzIGEgc2lnbmVkIDE2LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIC0zMjc2OCB0byArMzI3NjcuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnQxNkxpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDE2TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50MTZMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDE2TGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBWYWx1ZXMgYXJlIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIGxpc3Qgd2hlbiB0aGV5IGFyZSBjb3BpZWQsCiAgICogdGhlIHNhbWUgd2F5IHN0b3JpbmcgdmFsdWVzIHRydW5jYXRlcyB0aGVtLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50MTZMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDE2TGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0ludDE2TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqLwogIGZhY3RvcnkgSW50MTZMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzSW50MTZMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhbiBgSW50MTZMaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogbGlzdCBhdCBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbgogICAqIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gSW50MTZMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gSW50MTZMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBJbnQxNkxpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gMjsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgMTYtYml0IHVuc2lnbmVkIGludGVnZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYQogKiBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseQogKiBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIEludGVnZXJzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgdHJ1bmNhdGVkIHRvIHRoZWlyIGxvdyAxNiBiaXRzLAogKiBpbnRlcnByZXRlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlciB3aXRoIHZhbHVlcyBpbiB0aGUKICogcmFuZ2UgMCB0byA2NTUzNS4KICovCmFic3RyYWN0IGNsYXNzIFVpbnQxNkxpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDE2TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsCiAgICogb2Ygd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDE2TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50MTZMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBVaW50MTZMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDE2TGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluCiAgICogdGhlIHNwZWNpZmllZCBieXRlIGJ1ZmZlci4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtVaW50MTZMaXN0XSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGJ5dGUgYnVmZmVyCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICogSWYgdGhlIFtvZmZzZXRJbkJ5dGVzXSBpbmRleCBvZiB0aGUgcmVnaW9uIGlzIG5vdCBzcGVjaWZpZWQsCiAgICogaXQgZGVmYXVsdHMgdG8gemVybyAodGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ5dGUgYnVmZmVyKS4KICAgKiBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYCwKICAgKiB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gb3IgW2xlbmd0aF0gYXJlIG5lZ2F0aXZlLCBvcgogICAqIGlmIFtvZmZzZXRJbkJ5dGVzXSArIChbbGVuZ3RoXSAqIGVsZW1lbnRTaXplSW5CeXRlcykgaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGxlbmd0aCBvZiBbYnVmZmVyXS4KICAgKgogICAqIFRocm93cyBbQXJndW1lbnRFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIGlzIG5vdCBhIG11bHRpcGxlIG9mCiAgICogW2J5dGVzUGVyRWxlbWVudF0uCiAgICovCiAgZmFjdG9yeSBVaW50MTZMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzVWludDE2TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgVWludDE2TGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IFVpbnQxNkxpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBVaW50MTZMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBVaW50MTZMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDI7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDMyLWJpdCBzaWduZWQgaW50ZWdlcnMgdGhhdCBpcyB2aWV3YWJsZSBhcyBhCiAqIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSB0cnVuY2F0ZWQgdG8gdGhlaXIgbG93IDMyIGJpdHMsCiAqIGludGVycHJldGVkIGFzIGEgc2lnbmVkIDMyLWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIC0yMTQ3NDgzNjQ4IHRvIDIxNDc0ODM2NDcuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnQzMkxpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDMyTGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50MzJMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDMyTGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBWYWx1ZXMgYXJlIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIGxpc3Qgd2hlbiB0aGV5IGFyZSBjb3BpZWQsCiAgICogdGhlIHNhbWUgd2F5IHN0b3JpbmcgdmFsdWVzIHRydW5jYXRlcyB0aGVtLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50MzJMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDMyTGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0ludDMyTGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqLwogIGZhY3RvcnkgSW50MzJMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzSW50MzJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhbiBgSW50MzJMaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogbGlzdCBhdCBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbgogICAqIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gSW50MzJMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gSW50MzJMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBJbnQzMkxpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgMzItYml0IHVuc2lnbmVkIGludGVnZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYQogKiBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseQogKiBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIEludGVnZXJzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgdHJ1bmNhdGVkIHRvIHRoZWlyIGxvdyAzMiBiaXRzLAogKiBpbnRlcnByZXRlZCBhcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciB3aXRoIHZhbHVlcyBpbiB0aGUKICogcmFuZ2UgMCB0byA0Mjk0OTY3Mjk1LgogKi8KYWJzdHJhY3QgY2xhc3MgVWludDMyTGlzdCBpbXBsZW1lbnRzIExpc3Q8aW50PiwgX1R5cGVkSW50TGlzdCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50MzJMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLCBhbGwKICAgKiBvZiB3aG9zZSBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBVaW50MzJMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQzMkxpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVmFsdWVzIGFyZSB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSBsaXN0IHdoZW4gdGhleSBhcmUgY29waWVkLAogICAqIHRoZSBzYW1lIHdheSBzdG9yaW5nIHZhbHVlcyB0cnVuY2F0ZXMgdGhlbS4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFVpbnQzMkxpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50MzJMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4KICAgKiB0aGUgc3BlY2lmaWVkIGJ5dGUgYnVmZmVyLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW1VpbnQzMkxpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZSBidWZmZXIKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKi8KICBmYWN0b3J5IFVpbnQzMkxpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNVaW50MzJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhIGBVaW50MzJMaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogbGlzdCBhdCBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbgogICAqIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gVWludDMyTGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIFVpbnQzMkxpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIFVpbnQzMkxpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgNjQtYml0IHNpZ25lZCBpbnRlZ2VycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEKICogW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkKICogbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKgogKiBJbnRlZ2VycyBzdG9yZWQgaW4gdGhlIGxpc3QgYXJlIHRydW5jYXRlZCB0byB0aGVpciBsb3cgNjQgYml0cywKICogaW50ZXJwcmV0ZWQgYXMgYSBzaWduZWQgNjQtYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciB3aXRoIHZhbHVlcyBpbiB0aGUKICogcmFuZ2UgLTkyMjMzNzIwMzY4NTQ3NzU4MDggdG8gKzkyMjMzNzIwMzY4NTQ3NzU4MDcuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnQ2NExpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDY0TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50NjRMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDY0TGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBWYWx1ZXMgYXJlIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIGxpc3Qgd2hlbiB0aGV5IGFyZSBjb3BpZWQsCiAgICogdGhlIHNhbWUgd2F5IHN0b3JpbmcgdmFsdWVzIHRydW5jYXRlcyB0aGVtLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50NjRMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDY0TGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0ludDY0TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlIGJ1ZmZlcgogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqLwogIGZhY3RvcnkgSW50NjRMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzSW50NjRMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhbiBgSW50NjRMaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogbGlzdCBhdCBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbgogICAqIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gSW50NjRMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gSW50NjRMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBJbnQ2NExpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gODsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgNjQtYml0IHVuc2lnbmVkIGludGVnZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYQogKiBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseQogKiBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIEludGVnZXJzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgdHJ1bmNhdGVkIHRvIHRoZWlyIGxvdyA2NCBiaXRzLAogKiBpbnRlcnByZXRlZCBhcyBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB3aXRoIHZhbHVlcyBpbiB0aGUKICogcmFuZ2UgMCB0byAxODQ0Njc0NDA3MzcwOTU1MTYxNS4KICovCmFic3RyYWN0IGNsYXNzIFVpbnQ2NExpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDY0TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsCiAgICogb2Ygd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDY0TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50NjRMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBVaW50NjRMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW1VpbnQ2NExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbgogICAqIHRoZSBzcGVjaWZpZWQgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbVWludDY0TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlIGJ1ZmZlcgogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqLwogIGZhY3RvcnkgVWludDY0TGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc1VpbnQ2NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGEgYFVpbnQ2NExpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBVaW50NjRMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gVWludDY0TGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgVWludDY0TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSA4Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiBJRUVFIDc1NCBzaW5nbGUtcHJlY2lzaW9uIGJpbmFyeSBmbG9hdGluZy1wb2ludAogKiBudW1iZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYSBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMKICogaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseSBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbgogKiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIERvdWJsZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSBjb252ZXJ0ZWQgdG8gdGhlIG5lYXJlc3QKICogc2luZ2xlLXByZWNpc2lvbiB2YWx1ZS4gVmFsdWVzIHJlYWQgYXJlIGNvbnZlcnRlZCB0byBhIGRvdWJsZQogKiB2YWx1ZSB3aXRoIHRoZSBzYW1lIHZhbHVlLgogKi8KYWJzdHJhY3QgY2xhc3MgRmxvYXQzMkxpc3QgaW1wbGVtZW50cyBMaXN0PGRvdWJsZT4sIF9UeXBlZEZsb2F0TGlzdCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDMyTGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQzMkxpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQzMkxpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVmFsdWVzIGFyZSB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSBsaXN0IHdoZW4gdGhleSBhcmUgY29waWVkLAogICAqIHRoZSBzYW1lIHdheSBzdG9yaW5nIHZhbHVlcyB0cnVuY2F0ZXMgdGhlbS4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJMaXN0LmZyb21MaXN0KExpc3Q8ZG91YmxlPiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQzMkxpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtGbG9hdDMyTGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqLwogIGZhY3RvcnkgRmxvYXQzMkxpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNGbG9hdDMyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgRmxvYXQzMkxpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBGbG9hdDMyTGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIEZsb2F0MzJMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBGbG9hdDMyTGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSA0Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIGJpbmFyeSBmbG9hdGluZy1wb2ludAogKiBudW1iZXJzICB0aGF0IGlzIHZpZXdhYmxlIGFzIGEgW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzCiAqIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkgbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4KICogdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgRmxvYXQ2NExpc3QgaW1wbGVtZW50cyBMaXN0PGRvdWJsZT4sIF9UeXBlZEZsb2F0TGlzdCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDY0TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQ2NExpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NExpc3QuZnJvbUxpc3QoTGlzdDxkb3VibGU+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDY0TGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0Zsb2F0NjRMaXN0XSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGJ5dGUKICAgKiBidWZmZXIgYW5kIHZpY2UgdmVyc2EuCiAgICogSWYgdGhlIFtvZmZzZXRJbkJ5dGVzXSBpbmRleCBvZiB0aGUgcmVnaW9uIGlzIG5vdCBzcGVjaWZpZWQsCiAgICogaXQgZGVmYXVsdHMgdG8gemVybyAodGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ5dGUgYnVmZmVyKS4KICAgKiBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYCwKICAgKiB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gb3IgW2xlbmd0aF0gYXJlIG5lZ2F0aXZlLCBvcgogICAqIGlmIFtvZmZzZXRJbkJ5dGVzXSArIChbbGVuZ3RoXSAqIGVsZW1lbnRTaXplSW5CeXRlcykgaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGxlbmd0aCBvZiBbYnVmZmVyXS4KICAgKgogICAqIFRocm93cyBbQXJndW1lbnRFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIGlzIG5vdCBhIG11bHRpcGxlIG9mCiAgICogW2J5dGVzUGVyRWxlbWVudF0uCiAgICovCiAgZmFjdG9yeSBGbG9hdDY0TGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc0Zsb2F0NjRMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhIGBGbG9hdDY0TGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEZsb2F0NjRMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gRmxvYXQ2NExpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIEZsb2F0NjRMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDg7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIEZsb2F0MzJ4NCBudW1iZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYQogKiBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjb25zaWRlcmFibHkgbW9yZQogKiBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgRmxvYXQzMng0TGlzdCBpbXBsZW1lbnRzIExpc3Q8RmxvYXQzMng0PiwgVHlwZWREYXRhIHsKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0MzJ4NExpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksCiAgICogYWxsIG9mIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQzMng0TGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDMyeDRMaXN0LmZyb21MaXN0KExpc3Q8RmxvYXQzMng0PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQzMng0TGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0Zsb2F0MzJ4NExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKi8KICBmYWN0b3J5IEZsb2F0MzJ4NExpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNGbG9hdDMyeDRMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoaXMgbGlzdCBhbmQgW290aGVyXS4KICAgKgogICAqIElmIFtvdGhlcl0gaXMgYWxzbyBhIFtGbG9hdDMyeDRMaXN0XSwgdGhlIHJlc3VsdCBpcyBhIG5ldyBbRmxvYXQzMng0TGlzdF0sCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgYSBub3JtYWwgZ3Jvd2FibGUgYExpc3Q8RmxvYXQzMng0PmAuCiAgICovCiAgTGlzdDxGbG9hdDMyeDQ+IG9wZXJhdG9yICsoTGlzdDxGbG9hdDMyeDQ+IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgRmxvYXQzMng0TGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEZsb2F0MzJ4NExpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBGbG9hdDMyeDRMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBGbG9hdDMyeDRMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE2Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiBJbnQzMng0IG51bWJlcnMgdGhhdCBpcyB2aWV3YWJsZSBhcyBhCiAqIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGNvbnNpZGVyYWJseSBtb3JlCiAqIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBJbnQzMng0TGlzdCBpbXBsZW1lbnRzIExpc3Q8SW50MzJ4ND4sIFR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQzMng0TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwKICAgKiBhbGwgb2Ygd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50MzJ4NExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbSW50MzJ4NExpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50MzJ4NExpc3QuZnJvbUxpc3QoTGlzdDxJbnQzMng0PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbSW50MzJ4NExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtJbnQzMng0TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqLwogIGZhY3RvcnkgSW50MzJ4NExpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNJbnQzMng0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIGxpc3QgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBbb3RoZXJdIGlzIGFsc28gYSBbSW50MzJ4NExpc3RdLCB0aGUgcmVzdWx0IGlzIGEgbmV3IFtJbnQzMng0TGlzdF0sCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgYSBub3JtYWwgZ3Jvd2FibGUgYExpc3Q8SW50MzJ4ND5gLgogICAqLwogIExpc3Q8SW50MzJ4ND4gb3BlcmF0b3IgKyhMaXN0PEludDMyeDQ+IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYW4gYEludDMyeDRsaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogbGlzdCBhdCBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbgogICAqIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gSW50MzJ4NGxpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBJbnQzMng0bGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgSW50MzJ4NExpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gMTY7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIEZsb2F0NjR4MiBudW1iZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYQogKiBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjb25zaWRlcmFibHkgbW9yZQogKiBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgRmxvYXQ2NHgyTGlzdCBpbXBsZW1lbnRzIExpc3Q8RmxvYXQ2NHgyPiwgVHlwZWREYXRhIHsKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0NjR4Mkxpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksCiAgICogYWxsIG9mIHdob3NlIGVsZW1lbnRzIGhhdmUgYWxsIGxhbmVzIHNldCB0byB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyTGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDY0eDJMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0NjR4Mkxpc3QuZnJvbUxpc3QoTGlzdDxGbG9hdDY0eDI+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIGxpc3QgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBbb3RoZXJdIGlzIGFsc28gYSBbRmxvYXQ2NHgyTGlzdF0sIHRoZSByZXN1bHQgaXMgYSBuZXcgW0Zsb2F0NjR4Mkxpc3RdLAogICAqIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIGEgbm9ybWFsIGdyb3dhYmxlIGBMaXN0PEZsb2F0NjR4Mj5gLgogICAqLwogIExpc3Q8RmxvYXQ2NHgyPiBvcGVyYXRvciArKExpc3Q8RmxvYXQ2NHgyPiBvdGhlcik7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQ2NHgyTGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0Zsb2F0NjR4Mkxpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKi8KICBmYWN0b3J5IEZsb2F0NjR4Mkxpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNGbG9hdDY0eDJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhIGBGbG9hdDY0eDJMaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogbGlzdCBhdCBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbgogICAqIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gRmxvYXQ2NHgyTGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIEZsb2F0NjR4Mkxpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIEZsb2F0NjR4Mkxpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gMTY7Cn0KCi8qKgogKiBGbG9hdDMyeDQgaW1tdXRhYmxlIHZhbHVlIHR5cGUgYW5kIG9wZXJhdGlvbnMuCiAqCiAqIEZsb2F0MzJ4NCBzdG9yZXMgNCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGluICJsYW5lcyIuCiAqIFRoZSBsYW5lcyBhcmUgIngiLCAieSIsICJ6IiwgYW5kICJ3IiByZXNwZWN0aXZlbHkuCiAqLwphYnN0cmFjdCBjbGFzcyBGbG9hdDMyeDQgewogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQzMng0KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSB3KTsKICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NC5zcGxhdChkb3VibGUgdik7CiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDMyeDQuemVybygpOwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQzMng0LmZyb21JbnQzMng0Qml0cyhJbnQzMng0IHgpOwoKICAvLy8gU2V0cyB0aGUgeCBhbmQgeSBsYW5lcyB0byB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyBpbiBbdl0gYW5kIHNldHMgdGhlIHoKICAvLy8gYW5kIHcgbGFuZXMgdG8gMC4wLgogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQzMng0LmZyb21GbG9hdDY0eDIoRmxvYXQ2NHgyIHYpOwoKICAvLy8gQWRkaXRpb24gb3BlcmF0b3IuCiAgRmxvYXQzMng0IG9wZXJhdG9yICsoRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIE5lZ2F0ZSBvcGVyYXRvci4KICBGbG9hdDMyeDQgb3BlcmF0b3IgLSgpOwoKICAvLy8gU3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgRmxvYXQzMng0IG9wZXJhdG9yIC0oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIE11bHRpcGxpY2F0aW9uIG9wZXJhdG9yLgogIEZsb2F0MzJ4NCBvcGVyYXRvciAqKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBEaXZpc2lvbiBvcGVyYXRvci4KICBGbG9hdDMyeDQgb3BlcmF0b3IgLyhGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gUmVsYXRpb25hbCBsZXNzIHRoYW4uCiAgSW50MzJ4NCBsZXNzVGhhbihGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gUmVsYXRpb25hbCBsZXNzIHRoYW4gb3IgZXF1YWwuCiAgSW50MzJ4NCBsZXNzVGhhbk9yRXF1YWwoRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJlbGF0aW9uYWwgZ3JlYXRlciB0aGFuLgogIEludDMyeDQgZ3JlYXRlclRoYW4oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJlbGF0aW9uYWwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsLgogIEludDMyeDQgZ3JlYXRlclRoYW5PckVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIGVxdWFsLgogIEludDMyeDQgZXF1YWwoRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJlbGF0aW9uYWwgbm90LWVxdWFsLgogIEludDMyeDQgbm90RXF1YWwoRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJldHVybnMgYSBjb3B5IG9mIFt0aGlzXSBlYWNoIGxhbmUgYmVpbmcgc2NhbGVkIGJ5IFtzXS4KICAvLy8gRXF1aXZhbGVudCB0byB0aGlzICogbmV3IEZsb2F0MzJ4NC5zcGxhdChzKQogIEZsb2F0MzJ4NCBzY2FsZShkb3VibGUgcyk7CgogIC8vLyBSZXR1cm5zIHRoZSBsYW5lLXdpc2UgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBbRmxvYXQzMng0XS4KICBGbG9hdDMyeDQgYWJzKCk7CgogIC8vLyBMYW5lLXdpc2UgY2xhbXAgW3RoaXNdIHRvIGJlIGluIHRoZSByYW5nZSBbbG93ZXJMaW1pdF0tW3VwcGVyTGltaXRdLgogIEZsb2F0MzJ4NCBjbGFtcChGbG9hdDMyeDQgbG93ZXJMaW1pdCwgRmxvYXQzMng0IHVwcGVyTGltaXQpOwoKICAvLy8gRXh0cmFjdGVkIHggdmFsdWUuCiAgZG91YmxlIGdldCB4OwoKICAvLy8gRXh0cmFjdGVkIHkgdmFsdWUuCiAgZG91YmxlIGdldCB5OwoKICAvLy8gRXh0cmFjdGVkIHogdmFsdWUuCiAgZG91YmxlIGdldCB6OwoKICAvLy8gRXh0cmFjdGVkIHcgdmFsdWUuCiAgZG91YmxlIGdldCB3OwoKICAvLy8gRXh0cmFjdCB0aGUgc2lnbiBiaXRzIGZyb20gZWFjaCBsYW5lIHJldHVybiB0aGVtIGluIHRoZSBmaXJzdCA0IGJpdHMuCiAgLy8vICJ4IiBsYW5lIGlzIGJpdCAwLgogIC8vLyAieSIgbGFuZSBpcyBiaXQgMS4KICAvLy8gInoiIGxhbmUgaXMgYml0IDIuCiAgLy8vICJ3IiBsYW5lIGlzIGJpdCAzLgogIGludCBnZXQgc2lnbk1hc2s7CgogIC8vLyBNYXNrIHBhc3NlZCB0byBbc2h1ZmZsZV0gb3IgW3NodWZmbGVNaXhdLgogIHN0YXRpYyBjb25zdCBpbnQgeHh4eCA9IDB4MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eHkgPSAweDQwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh4eiA9IDB4ODA7CiAgc3RhdGljIGNvbnN0IGludCB4eHh3ID0gMHhDMDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXggPSAweDEwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh5eSA9IDB4NTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl6ID0gMHg5MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXcgPSAweEQwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6eCA9IDB4MjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHp5ID0gMHg2MDsKICBzdGF0aWMgY29uc3QgaW50IHh4enogPSAweEEwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6dyA9IDB4RTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd4ID0gMHgzMDsKICBzdGF0aWMgY29uc3QgaW50IHh4d3kgPSAweDcwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3eiA9IDB4QjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd3ID0gMHhGMDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHggPSAweDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXh5ID0gMHg0NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHogPSAweDg0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl4dyA9IDB4QzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl4ID0gMHgxNDsKICBzdGF0aWMgY29uc3QgaW50IHh5eXkgPSAweDU0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5eiA9IDB4OTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl3ID0gMHhENDsKICBzdGF0aWMgY29uc3QgaW50IHh5enggPSAweDI0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl6eSA9IDB4NjQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp6ID0gMHhBNDsKICBzdGF0aWMgY29uc3QgaW50IHh5encgPSAweEU0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3eCA9IDB4MzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXd5ID0gMHg3NDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3ogPSAweEI0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3dyA9IDB4RjQ7CiAgc3RhdGljIGNvbnN0IGludCB4enh4ID0gMHg4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eSA9IDB4NDg7CiAgc3RhdGljIGNvbnN0IGludCB4enh6ID0gMHg4ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eHcgPSAweEM4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5eCA9IDB4MTg7CiAgc3RhdGljIGNvbnN0IGludCB4enl5ID0gMHg1ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXogPSAweDk4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5dyA9IDB4RDg7CiAgc3RhdGljIGNvbnN0IGludCB4enp4ID0gMHgyODsKICBzdGF0aWMgY29uc3QgaW50IHh6enkgPSAweDY4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6eiA9IDB4QTg7CiAgc3RhdGljIGNvbnN0IGludCB4enp3ID0gMHhFODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3ggPSAweDM4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp3eSA9IDB4Nzg7CiAgc3RhdGljIGNvbnN0IGludCB4end6ID0gMHhCODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3cgPSAweEY4OwogIHN0YXRpYyBjb25zdCBpbnQgeHd4eCA9IDB4QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eHkgPSAweDRDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd4eiA9IDB4OEM7CiAgc3RhdGljIGNvbnN0IGludCB4d3h3ID0gMHhDQzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXggPSAweDFDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd5eSA9IDB4NUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3l6ID0gMHg5QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXcgPSAweERDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6eCA9IDB4MkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3p5ID0gMHg2QzsKICBzdGF0aWMgY29uc3QgaW50IHh3enogPSAweEFDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6dyA9IDB4RUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3d4ID0gMHgzQzsKICBzdGF0aWMgY29uc3QgaW50IHh3d3kgPSAweDdDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3eiA9IDB4QkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3d3ID0gMHhGQzsKICBzdGF0aWMgY29uc3QgaW50IHl4eHggPSAweDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHh5ID0gMHg0MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eHogPSAweDgxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh4dyA9IDB4QzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl4ID0gMHgxMTsKICBzdGF0aWMgY29uc3QgaW50IHl4eXkgPSAweDUxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5eiA9IDB4OTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl3ID0gMHhEMTsKICBzdGF0aWMgY29uc3QgaW50IHl4enggPSAweDIxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh6eSA9IDB4NjE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp6ID0gMHhBMTsKICBzdGF0aWMgY29uc3QgaW50IHl4encgPSAweEUxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3eCA9IDB4MzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHd5ID0gMHg3MTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3ogPSAweEIxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3dyA9IDB4RjE7CiAgc3RhdGljIGNvbnN0IGludCB5eXh4ID0gMHg1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eSA9IDB4NDU7CiAgc3RhdGljIGNvbnN0IGludCB5eXh6ID0gMHg4NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eHcgPSAweEM1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5eCA9IDB4MTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXl5ID0gMHg1NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXogPSAweDk1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5dyA9IDB4RDU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp4ID0gMHgyNTsKICBzdGF0aWMgY29uc3QgaW50IHl5enkgPSAweDY1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6eiA9IDB4QTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp3ID0gMHhFNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3ggPSAweDM1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl3eSA9IDB4NzU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd6ID0gMHhCNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3cgPSAweEY1OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4eCA9IDB4OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHkgPSAweDQ5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4eiA9IDB4ODk7CiAgc3RhdGljIGNvbnN0IGludCB5enh3ID0gMHhDOTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXggPSAweDE5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp5eSA9IDB4NTk7CiAgc3RhdGljIGNvbnN0IGludCB5enl6ID0gMHg5OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXcgPSAweEQ5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6eCA9IDB4Mjk7CiAgc3RhdGljIGNvbnN0IGludCB5enp5ID0gMHg2OTsKICBzdGF0aWMgY29uc3QgaW50IHl6enogPSAweEE5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6dyA9IDB4RTk7CiAgc3RhdGljIGNvbnN0IGludCB5end4ID0gMHgzOTsKICBzdGF0aWMgY29uc3QgaW50IHl6d3kgPSAweDc5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3eiA9IDB4Qjk7CiAgc3RhdGljIGNvbnN0IGludCB5end3ID0gMHhGOTsKICBzdGF0aWMgY29uc3QgaW50IHl3eHggPSAweEQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3h5ID0gMHg0RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eHogPSAweDhEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd4dyA9IDB4Q0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3l4ID0gMHgxRDsKICBzdGF0aWMgY29uc3QgaW50IHl3eXkgPSAweDVEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5eiA9IDB4OUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3l3ID0gMHhERDsKICBzdGF0aWMgY29uc3QgaW50IHl3enggPSAweDJEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd6eSA9IDB4NkQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p6ID0gMHhBRDsKICBzdGF0aWMgY29uc3QgaW50IHl3encgPSAweEVEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3eCA9IDB4M0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3d5ID0gMHg3RDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3ogPSAweEJEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3dyA9IDB4RkQ7CiAgc3RhdGljIGNvbnN0IGludCB6eHh4ID0gMHgyOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eSA9IDB4NDI7CiAgc3RhdGljIGNvbnN0IGludCB6eHh6ID0gMHg4MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eHcgPSAweEMyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5eCA9IDB4MTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHl5ID0gMHg1MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXogPSAweDkyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5dyA9IDB4RDI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp4ID0gMHgyMjsKICBzdGF0aWMgY29uc3QgaW50IHp4enkgPSAweDYyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6eiA9IDB4QTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp3ID0gMHhFMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3ggPSAweDMyOwogIHN0YXRpYyBjb25zdCBpbnQgenh3eSA9IDB4NzI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd6ID0gMHhCMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3cgPSAweEYyOwogIHN0YXRpYyBjb25zdCBpbnQgenl4eCA9IDB4NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHkgPSAweDQ2OwogIHN0YXRpYyBjb25zdCBpbnQgenl4eiA9IDB4ODY7CiAgc3RhdGljIGNvbnN0IGludCB6eXh3ID0gMHhDNjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXggPSAweDE2OwogIHN0YXRpYyBjb25zdCBpbnQgenl5eSA9IDB4NTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl6ID0gMHg5NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXcgPSAweEQ2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6eCA9IDB4MjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXp5ID0gMHg2NjsKICBzdGF0aWMgY29uc3QgaW50IHp5enogPSAweEE2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6dyA9IDB4RTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd4ID0gMHgzNjsKICBzdGF0aWMgY29uc3QgaW50IHp5d3kgPSAweDc2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3eiA9IDB4QjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd3ID0gMHhGNjsKICBzdGF0aWMgY29uc3QgaW50IHp6eHggPSAweEE7CiAgc3RhdGljIGNvbnN0IGludCB6enh5ID0gMHg0QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eHogPSAweDhBOwogIHN0YXRpYyBjb25zdCBpbnQgenp4dyA9IDB4Q0E7CiAgc3RhdGljIGNvbnN0IGludCB6enl4ID0gMHgxQTsKICBzdGF0aWMgY29uc3QgaW50IHp6eXkgPSAweDVBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5eiA9IDB4OUE7CiAgc3RhdGljIGNvbnN0IGludCB6enl3ID0gMHhEQTsKICBzdGF0aWMgY29uc3QgaW50IHp6enggPSAweDJBOwogIHN0YXRpYyBjb25zdCBpbnQgenp6eSA9IDB4NkE7CiAgc3RhdGljIGNvbnN0IGludCB6enp6ID0gMHhBQTsKICBzdGF0aWMgY29uc3QgaW50IHp6encgPSAweEVBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3eCA9IDB4M0E7CiAgc3RhdGljIGNvbnN0IGludCB6end5ID0gMHg3QTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3ogPSAweEJBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3dyA9IDB4RkE7CiAgc3RhdGljIGNvbnN0IGludCB6d3h4ID0gMHhFOwogIHN0YXRpYyBjb25zdCBpbnQgend4eSA9IDB4NEU7CiAgc3RhdGljIGNvbnN0IGludCB6d3h6ID0gMHg4RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eHcgPSAweENFOwogIHN0YXRpYyBjb25zdCBpbnQgend5eCA9IDB4MUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3l5ID0gMHg1RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXogPSAweDlFOwogIHN0YXRpYyBjb25zdCBpbnQgend5dyA9IDB4REU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p4ID0gMHgyRTsKICBzdGF0aWMgY29uc3QgaW50IHp3enkgPSAweDZFOwogIHN0YXRpYyBjb25zdCBpbnQgend6eiA9IDB4QUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p3ID0gMHhFRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3ggPSAweDNFOwogIHN0YXRpYyBjb25zdCBpbnQgend3eSA9IDB4N0U7CiAgc3RhdGljIGNvbnN0IGludCB6d3d6ID0gMHhCRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3cgPSAweEZFOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4eCA9IDB4MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eHkgPSAweDQzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4eiA9IDB4ODM7CiAgc3RhdGljIGNvbnN0IGludCB3eHh3ID0gMHhDMzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXggPSAweDEzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h5eSA9IDB4NTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl6ID0gMHg5MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXcgPSAweEQzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6eCA9IDB4MjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHp5ID0gMHg2MzsKICBzdGF0aWMgY29uc3QgaW50IHd4enogPSAweEEzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6dyA9IDB4RTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd4ID0gMHgzMzsKICBzdGF0aWMgY29uc3QgaW50IHd4d3kgPSAweDczOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3eiA9IDB4QjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd3ID0gMHhGMzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHggPSAweDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXh5ID0gMHg0NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHogPSAweDg3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l4dyA9IDB4Qzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl4ID0gMHgxNzsKICBzdGF0aWMgY29uc3QgaW50IHd5eXkgPSAweDU3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5eiA9IDB4OTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl3ID0gMHhENzsKICBzdGF0aWMgY29uc3QgaW50IHd5enggPSAweDI3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l6eSA9IDB4Njc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp6ID0gMHhBNzsKICBzdGF0aWMgY29uc3QgaW50IHd5encgPSAweEU3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3eCA9IDB4Mzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXd5ID0gMHg3NzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3ogPSAweEI3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3dyA9IDB4Rjc7CiAgc3RhdGljIGNvbnN0IGludCB3enh4ID0gMHhCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eSA9IDB4NEI7CiAgc3RhdGljIGNvbnN0IGludCB3enh6ID0gMHg4QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eHcgPSAweENCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5eCA9IDB4MUI7CiAgc3RhdGljIGNvbnN0IGludCB3enl5ID0gMHg1QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXogPSAweDlCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5dyA9IDB4REI7CiAgc3RhdGljIGNvbnN0IGludCB3enp4ID0gMHgyQjsKICBzdGF0aWMgY29uc3QgaW50IHd6enkgPSAweDZCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6eiA9IDB4QUI7CiAgc3RhdGljIGNvbnN0IGludCB3enp3ID0gMHhFQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3ggPSAweDNCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p3eSA9IDB4N0I7CiAgc3RhdGljIGNvbnN0IGludCB3end6ID0gMHhCQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3cgPSAweEZCOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4eCA9IDB4RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHkgPSAweDRGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4eiA9IDB4OEY7CiAgc3RhdGljIGNvbnN0IGludCB3d3h3ID0gMHhDRjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXggPSAweDFGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d5eSA9IDB4NUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3l6ID0gMHg5RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXcgPSAweERGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6eCA9IDB4MkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3p5ID0gMHg2RjsKICBzdGF0aWMgY29uc3QgaW50IHd3enogPSAweEFGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6dyA9IDB4RUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3d4ID0gMHgzRjsKICBzdGF0aWMgY29uc3QgaW50IHd3d3kgPSAweDdGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3eiA9IDB4QkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3d3ID0gMHhGRjsKCiAgLy8vIFNodWZmbGUgdGhlIGxhbmUgdmFsdWVzLiBbbWFza10gbXVzdCBiZSBvbmUgb2YgdGhlIDI1NiBzaHVmZmxlIGNvbnN0YW50cy4KICBGbG9hdDMyeDQgc2h1ZmZsZShpbnQgbWFzayk7CgogIC8vLyBTaHVmZmxlIHRoZSBsYW5lIHZhbHVlcyBpbiBbdGhpc10gYW5kIFtvdGhlcl0uIFRoZSByZXR1cm5lZAogIC8vLyBGbG9hdDMyeDQgd2lsbCBoYXZlIFhZIGxhbmVzIGZyb20gW3RoaXNdIGFuZCBaVyBsYW5lcyBmcm9tIFtvdGhlcl0uCiAgLy8vIFVzZXMgdGhlIHNhbWUgW21hc2tdIGFzIFtzaHVmZmxlXS4KICBGbG9hdDMyeDQgc2h1ZmZsZU1peChGbG9hdDMyeDQgb3RoZXIsIGludCBtYXNrKTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0Zsb2F0MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeCB2YWx1ZS4KICBGbG9hdDMyeDQgd2l0aFgoZG91YmxlIHgpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbRmxvYXQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB5IHZhbHVlLgogIEZsb2F0MzJ4NCB3aXRoWShkb3VibGUgeSk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtGbG9hdDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHogdmFsdWUuCiAgRmxvYXQzMng0IHdpdGhaKGRvdWJsZSB6KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0Zsb2F0MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgdyB2YWx1ZS4KICBGbG9hdDMyeDQgd2l0aFcoZG91YmxlIHcpOwoKICAvLy8gUmV0dXJucyB0aGUgbGFuZS13aXNlIG1pbmltdW0gdmFsdWUgaW4gW3RoaXNdIG9yIFtvdGhlcl0uCiAgRmxvYXQzMng0IG1pbihGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgbGFuZS13aXNlIG1heGltdW0gdmFsdWUgaW4gW3RoaXNdIG9yIFtvdGhlcl0uCiAgRmxvYXQzMng0IG1heChGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgc3F1YXJlIHJvb3Qgb2YgW3RoaXNdLgogIEZsb2F0MzJ4NCBzcXJ0KCk7CgogIC8vLyBSZXR1cm5zIHRoZSByZWNpcHJvY2FsIG9mIFt0aGlzXS4KICBGbG9hdDMyeDQgcmVjaXByb2NhbCgpOwoKICAvLy8gUmV0dXJucyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHJlY2lwcm9jYWwgb2YgW3RoaXNdLgogIEZsb2F0MzJ4NCByZWNpcHJvY2FsU3FydCgpOwp9CgovKioKICogSW50MzJ4NCBhbmQgb3BlcmF0aW9ucy4KICoKICogSW50MzJ4NCBzdG9yZXMgNCAzMi1iaXQgYml0LW1hc2tzIGluICJsYW5lcyIuCiAqIFRoZSBsYW5lcyBhcmUgIngiLCAieSIsICJ6IiwgYW5kICJ3IiByZXNwZWN0aXZlbHkuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnQzMng0IHsKICBleHRlcm5hbCBmYWN0b3J5IEludDMyeDQoaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpOwogIGV4dGVybmFsIGZhY3RvcnkgSW50MzJ4NC5ib29sKGJvb2wgeCwgYm9vbCB5LCBib29sIHosIGJvb2wgdyk7CiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnQzMng0LmZyb21GbG9hdDMyeDRCaXRzKEZsb2F0MzJ4NCB4KTsKCiAgLy8vIFRoZSBiaXQtd2lzZSBvciBvcGVyYXRvci4KICBJbnQzMng0IG9wZXJhdG9yIHwoSW50MzJ4NCBvdGhlcik7CgogIC8vLyBUaGUgYml0LXdpc2UgYW5kIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgJihJbnQzMng0IG90aGVyKTsKCiAgLy8vIFRoZSBiaXQtd2lzZSB4b3Igb3BlcmF0b3IuCiAgSW50MzJ4NCBvcGVyYXRvciBeKEludDMyeDQgb3RoZXIpOwoKICAvLy8gQWRkaXRpb24gb3BlcmF0b3IuCiAgSW50MzJ4NCBvcGVyYXRvciArKEludDMyeDQgb3RoZXIpOwoKICAvLy8gU3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgSW50MzJ4NCBvcGVyYXRvciAtKEludDMyeDQgb3RoZXIpOwoKICAvLy8gRXh0cmFjdCAzMi1iaXQgbWFzayBmcm9tIHggbGFuZS4KICBpbnQgZ2V0IHg7CgogIC8vLyBFeHRyYWN0IDMyLWJpdCBtYXNrIGZyb20geSBsYW5lLgogIGludCBnZXQgeTsKCiAgLy8vIEV4dHJhY3QgMzItYml0IG1hc2sgZnJvbSB6IGxhbmUuCiAgaW50IGdldCB6OwoKICAvLy8gRXh0cmFjdCAzMi1iaXQgbWFzayBmcm9tIHcgbGFuZS4KICBpbnQgZ2V0IHc7CgogIC8vLyBFeHRyYWN0IHRoZSB0b3AgYml0IGZyb20gZWFjaCBsYW5lIHJldHVybiB0aGVtIGluIHRoZSBmaXJzdCA0IGJpdHMuCiAgLy8vICJ4IiBsYW5lIGlzIGJpdCAwLgogIC8vLyAieSIgbGFuZSBpcyBiaXQgMS4KICAvLy8gInoiIGxhbmUgaXMgYml0IDIuCiAgLy8vICJ3IiBsYW5lIGlzIGJpdCAzLgogIGludCBnZXQgc2lnbk1hc2s7CgogIC8vLyBNYXNrIHBhc3NlZCB0byBbc2h1ZmZsZV0gb3IgW3NodWZmbGVNaXhdLgogIHN0YXRpYyBjb25zdCBpbnQgeHh4eCA9IDB4MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eHkgPSAweDQwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh4eiA9IDB4ODA7CiAgc3RhdGljIGNvbnN0IGludCB4eHh3ID0gMHhDMDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXggPSAweDEwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh5eSA9IDB4NTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl6ID0gMHg5MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXcgPSAweEQwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6eCA9IDB4MjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHp5ID0gMHg2MDsKICBzdGF0aWMgY29uc3QgaW50IHh4enogPSAweEEwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6dyA9IDB4RTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd4ID0gMHgzMDsKICBzdGF0aWMgY29uc3QgaW50IHh4d3kgPSAweDcwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3eiA9IDB4QjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd3ID0gMHhGMDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHggPSAweDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXh5ID0gMHg0NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHogPSAweDg0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl4dyA9IDB4QzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl4ID0gMHgxNDsKICBzdGF0aWMgY29uc3QgaW50IHh5eXkgPSAweDU0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5eiA9IDB4OTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl3ID0gMHhENDsKICBzdGF0aWMgY29uc3QgaW50IHh5enggPSAweDI0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl6eSA9IDB4NjQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp6ID0gMHhBNDsKICBzdGF0aWMgY29uc3QgaW50IHh5encgPSAweEU0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3eCA9IDB4MzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXd5ID0gMHg3NDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3ogPSAweEI0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3dyA9IDB4RjQ7CiAgc3RhdGljIGNvbnN0IGludCB4enh4ID0gMHg4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eSA9IDB4NDg7CiAgc3RhdGljIGNvbnN0IGludCB4enh6ID0gMHg4ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eHcgPSAweEM4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5eCA9IDB4MTg7CiAgc3RhdGljIGNvbnN0IGludCB4enl5ID0gMHg1ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXogPSAweDk4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5dyA9IDB4RDg7CiAgc3RhdGljIGNvbnN0IGludCB4enp4ID0gMHgyODsKICBzdGF0aWMgY29uc3QgaW50IHh6enkgPSAweDY4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6eiA9IDB4QTg7CiAgc3RhdGljIGNvbnN0IGludCB4enp3ID0gMHhFODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3ggPSAweDM4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp3eSA9IDB4Nzg7CiAgc3RhdGljIGNvbnN0IGludCB4end6ID0gMHhCODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3cgPSAweEY4OwogIHN0YXRpYyBjb25zdCBpbnQgeHd4eCA9IDB4QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eHkgPSAweDRDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd4eiA9IDB4OEM7CiAgc3RhdGljIGNvbnN0IGludCB4d3h3ID0gMHhDQzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXggPSAweDFDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd5eSA9IDB4NUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3l6ID0gMHg5QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXcgPSAweERDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6eCA9IDB4MkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3p5ID0gMHg2QzsKICBzdGF0aWMgY29uc3QgaW50IHh3enogPSAweEFDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6dyA9IDB4RUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3d4ID0gMHgzQzsKICBzdGF0aWMgY29uc3QgaW50IHh3d3kgPSAweDdDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3eiA9IDB4QkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3d3ID0gMHhGQzsKICBzdGF0aWMgY29uc3QgaW50IHl4eHggPSAweDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHh5ID0gMHg0MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eHogPSAweDgxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh4dyA9IDB4QzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl4ID0gMHgxMTsKICBzdGF0aWMgY29uc3QgaW50IHl4eXkgPSAweDUxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5eiA9IDB4OTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl3ID0gMHhEMTsKICBzdGF0aWMgY29uc3QgaW50IHl4enggPSAweDIxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh6eSA9IDB4NjE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp6ID0gMHhBMTsKICBzdGF0aWMgY29uc3QgaW50IHl4encgPSAweEUxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3eCA9IDB4MzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHd5ID0gMHg3MTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3ogPSAweEIxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3dyA9IDB4RjE7CiAgc3RhdGljIGNvbnN0IGludCB5eXh4ID0gMHg1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eSA9IDB4NDU7CiAgc3RhdGljIGNvbnN0IGludCB5eXh6ID0gMHg4NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eHcgPSAweEM1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5eCA9IDB4MTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXl5ID0gMHg1NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXogPSAweDk1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5dyA9IDB4RDU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp4ID0gMHgyNTsKICBzdGF0aWMgY29uc3QgaW50IHl5enkgPSAweDY1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6eiA9IDB4QTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp3ID0gMHhFNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3ggPSAweDM1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl3eSA9IDB4NzU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd6ID0gMHhCNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3cgPSAweEY1OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4eCA9IDB4OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHkgPSAweDQ5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4eiA9IDB4ODk7CiAgc3RhdGljIGNvbnN0IGludCB5enh3ID0gMHhDOTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXggPSAweDE5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp5eSA9IDB4NTk7CiAgc3RhdGljIGNvbnN0IGludCB5enl6ID0gMHg5OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXcgPSAweEQ5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6eCA9IDB4Mjk7CiAgc3RhdGljIGNvbnN0IGludCB5enp5ID0gMHg2OTsKICBzdGF0aWMgY29uc3QgaW50IHl6enogPSAweEE5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6dyA9IDB4RTk7CiAgc3RhdGljIGNvbnN0IGludCB5end4ID0gMHgzOTsKICBzdGF0aWMgY29uc3QgaW50IHl6d3kgPSAweDc5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3eiA9IDB4Qjk7CiAgc3RhdGljIGNvbnN0IGludCB5end3ID0gMHhGOTsKICBzdGF0aWMgY29uc3QgaW50IHl3eHggPSAweEQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3h5ID0gMHg0RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eHogPSAweDhEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd4dyA9IDB4Q0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3l4ID0gMHgxRDsKICBzdGF0aWMgY29uc3QgaW50IHl3eXkgPSAweDVEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5eiA9IDB4OUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3l3ID0gMHhERDsKICBzdGF0aWMgY29uc3QgaW50IHl3enggPSAweDJEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd6eSA9IDB4NkQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p6ID0gMHhBRDsKICBzdGF0aWMgY29uc3QgaW50IHl3encgPSAweEVEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3eCA9IDB4M0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3d5ID0gMHg3RDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3ogPSAweEJEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3dyA9IDB4RkQ7CiAgc3RhdGljIGNvbnN0IGludCB6eHh4ID0gMHgyOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eSA9IDB4NDI7CiAgc3RhdGljIGNvbnN0IGludCB6eHh6ID0gMHg4MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eHcgPSAweEMyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5eCA9IDB4MTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHl5ID0gMHg1MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXogPSAweDkyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5dyA9IDB4RDI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp4ID0gMHgyMjsKICBzdGF0aWMgY29uc3QgaW50IHp4enkgPSAweDYyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6eiA9IDB4QTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp3ID0gMHhFMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3ggPSAweDMyOwogIHN0YXRpYyBjb25zdCBpbnQgenh3eSA9IDB4NzI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd6ID0gMHhCMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3cgPSAweEYyOwogIHN0YXRpYyBjb25zdCBpbnQgenl4eCA9IDB4NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHkgPSAweDQ2OwogIHN0YXRpYyBjb25zdCBpbnQgenl4eiA9IDB4ODY7CiAgc3RhdGljIGNvbnN0IGludCB6eXh3ID0gMHhDNjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXggPSAweDE2OwogIHN0YXRpYyBjb25zdCBpbnQgenl5eSA9IDB4NTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl6ID0gMHg5NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXcgPSAweEQ2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6eCA9IDB4MjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXp5ID0gMHg2NjsKICBzdGF0aWMgY29uc3QgaW50IHp5enogPSAweEE2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6dyA9IDB4RTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd4ID0gMHgzNjsKICBzdGF0aWMgY29uc3QgaW50IHp5d3kgPSAweDc2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3eiA9IDB4QjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd3ID0gMHhGNjsKICBzdGF0aWMgY29uc3QgaW50IHp6eHggPSAweEE7CiAgc3RhdGljIGNvbnN0IGludCB6enh5ID0gMHg0QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eHogPSAweDhBOwogIHN0YXRpYyBjb25zdCBpbnQgenp4dyA9IDB4Q0E7CiAgc3RhdGljIGNvbnN0IGludCB6enl4ID0gMHgxQTsKICBzdGF0aWMgY29uc3QgaW50IHp6eXkgPSAweDVBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5eiA9IDB4OUE7CiAgc3RhdGljIGNvbnN0IGludCB6enl3ID0gMHhEQTsKICBzdGF0aWMgY29uc3QgaW50IHp6enggPSAweDJBOwogIHN0YXRpYyBjb25zdCBpbnQgenp6eSA9IDB4NkE7CiAgc3RhdGljIGNvbnN0IGludCB6enp6ID0gMHhBQTsKICBzdGF0aWMgY29uc3QgaW50IHp6encgPSAweEVBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3eCA9IDB4M0E7CiAgc3RhdGljIGNvbnN0IGludCB6end5ID0gMHg3QTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3ogPSAweEJBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3dyA9IDB4RkE7CiAgc3RhdGljIGNvbnN0IGludCB6d3h4ID0gMHhFOwogIHN0YXRpYyBjb25zdCBpbnQgend4eSA9IDB4NEU7CiAgc3RhdGljIGNvbnN0IGludCB6d3h6ID0gMHg4RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eHcgPSAweENFOwogIHN0YXRpYyBjb25zdCBpbnQgend5eCA9IDB4MUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3l5ID0gMHg1RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXogPSAweDlFOwogIHN0YXRpYyBjb25zdCBpbnQgend5dyA9IDB4REU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p4ID0gMHgyRTsKICBzdGF0aWMgY29uc3QgaW50IHp3enkgPSAweDZFOwogIHN0YXRpYyBjb25zdCBpbnQgend6eiA9IDB4QUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p3ID0gMHhFRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3ggPSAweDNFOwogIHN0YXRpYyBjb25zdCBpbnQgend3eSA9IDB4N0U7CiAgc3RhdGljIGNvbnN0IGludCB6d3d6ID0gMHhCRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3cgPSAweEZFOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4eCA9IDB4MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eHkgPSAweDQzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4eiA9IDB4ODM7CiAgc3RhdGljIGNvbnN0IGludCB3eHh3ID0gMHhDMzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXggPSAweDEzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h5eSA9IDB4NTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl6ID0gMHg5MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXcgPSAweEQzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6eCA9IDB4MjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHp5ID0gMHg2MzsKICBzdGF0aWMgY29uc3QgaW50IHd4enogPSAweEEzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6dyA9IDB4RTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd4ID0gMHgzMzsKICBzdGF0aWMgY29uc3QgaW50IHd4d3kgPSAweDczOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3eiA9IDB4QjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd3ID0gMHhGMzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHggPSAweDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXh5ID0gMHg0NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHogPSAweDg3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l4dyA9IDB4Qzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl4ID0gMHgxNzsKICBzdGF0aWMgY29uc3QgaW50IHd5eXkgPSAweDU3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5eiA9IDB4OTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl3ID0gMHhENzsKICBzdGF0aWMgY29uc3QgaW50IHd5enggPSAweDI3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l6eSA9IDB4Njc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp6ID0gMHhBNzsKICBzdGF0aWMgY29uc3QgaW50IHd5encgPSAweEU3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3eCA9IDB4Mzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXd5ID0gMHg3NzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3ogPSAweEI3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3dyA9IDB4Rjc7CiAgc3RhdGljIGNvbnN0IGludCB3enh4ID0gMHhCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eSA9IDB4NEI7CiAgc3RhdGljIGNvbnN0IGludCB3enh6ID0gMHg4QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eHcgPSAweENCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5eCA9IDB4MUI7CiAgc3RhdGljIGNvbnN0IGludCB3enl5ID0gMHg1QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXogPSAweDlCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5dyA9IDB4REI7CiAgc3RhdGljIGNvbnN0IGludCB3enp4ID0gMHgyQjsKICBzdGF0aWMgY29uc3QgaW50IHd6enkgPSAweDZCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6eiA9IDB4QUI7CiAgc3RhdGljIGNvbnN0IGludCB3enp3ID0gMHhFQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3ggPSAweDNCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p3eSA9IDB4N0I7CiAgc3RhdGljIGNvbnN0IGludCB3end6ID0gMHhCQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3cgPSAweEZCOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4eCA9IDB4RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHkgPSAweDRGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4eiA9IDB4OEY7CiAgc3RhdGljIGNvbnN0IGludCB3d3h3ID0gMHhDRjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXggPSAweDFGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d5eSA9IDB4NUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3l6ID0gMHg5RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXcgPSAweERGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6eCA9IDB4MkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3p5ID0gMHg2RjsKICBzdGF0aWMgY29uc3QgaW50IHd3enogPSAweEFGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6dyA9IDB4RUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3d4ID0gMHgzRjsKICBzdGF0aWMgY29uc3QgaW50IHd3d3kgPSAweDdGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3eiA9IDB4QkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3d3ID0gMHhGRjsKCiAgLy8vIFNodWZmbGUgdGhlIGxhbmUgdmFsdWVzLiBbbWFza10gbXVzdCBiZSBvbmUgb2YgdGhlIDI1NiBzaHVmZmxlIGNvbnN0YW50cy4KICBJbnQzMng0IHNodWZmbGUoaW50IG1hc2spOwoKICAvLy8gU2h1ZmZsZSB0aGUgbGFuZSB2YWx1ZXMgaW4gW3RoaXNdIGFuZCBbb3RoZXJdLiBUaGUgcmV0dXJuZWQKICAvLy8gSW50MzJ4NCB3aWxsIGhhdmUgWFkgbGFuZXMgZnJvbSBbdGhpc10gYW5kIFpXIGxhbmVzIGZyb20gW290aGVyXS4KICAvLy8gVXNlcyB0aGUgc2FtZSBbbWFza10gYXMgW3NodWZmbGVdLgogIEludDMyeDQgc2h1ZmZsZU1peChJbnQzMng0IG90aGVyLCBpbnQgbWFzayk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB4IHZhbHVlLgogIEludDMyeDQgd2l0aFgoaW50IHgpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbSW50MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeSB2YWx1ZS4KICBJbnQzMng0IHdpdGhZKGludCB5KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0ludDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHogdmFsdWUuCiAgSW50MzJ4NCB3aXRoWihpbnQgeik7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB3IHZhbHVlLgogIEludDMyeDQgd2l0aFcoaW50IHcpOwoKICAvLy8gRXh0cmFjdGVkIHggdmFsdWUuIFJldHVybnMgZmFsc2UgZm9yIDAsIHRydWUgZm9yIGFueSBvdGhlciB2YWx1ZS4KICBib29sIGdldCBmbGFnWDsKCiAgLy8vIEV4dHJhY3RlZCB5IHZhbHVlLiBSZXR1cm5zIGZhbHNlIGZvciAwLCB0cnVlIGZvciBhbnkgb3RoZXIgdmFsdWUuCiAgYm9vbCBnZXQgZmxhZ1k7CgogIC8vLyBFeHRyYWN0ZWQgeiB2YWx1ZS4gUmV0dXJucyBmYWxzZSBmb3IgMCwgdHJ1ZSBmb3IgYW55IG90aGVyIHZhbHVlLgogIGJvb2wgZ2V0IGZsYWdaOwoKICAvLy8gRXh0cmFjdGVkIHcgdmFsdWUuIFJldHVybnMgZmFsc2UgZm9yIDAsIHRydWUgZm9yIGFueSBvdGhlciB2YWx1ZS4KICBib29sIGdldCBmbGFnVzsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0ludDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHggdmFsdWUuCiAgSW50MzJ4NCB3aXRoRmxhZ1goYm9vbCB4KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0ludDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHkgdmFsdWUuCiAgSW50MzJ4NCB3aXRoRmxhZ1koYm9vbCB5KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0ludDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHogdmFsdWUuCiAgSW50MzJ4NCB3aXRoRmxhZ1ooYm9vbCB6KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0ludDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHcgdmFsdWUuCiAgSW50MzJ4NCB3aXRoRmxhZ1coYm9vbCB3KTsKCiAgLy8vIE1lcmdlIFt0cnVlVmFsdWVdIGFuZCBbZmFsc2VWYWx1ZV0gYmFzZWQgb24gW3RoaXNdJyBiaXQgbWFzazoKICAvLy8gU2VsZWN0IGJpdCBmcm9tIFt0cnVlVmFsdWVdIHdoZW4gYml0IGluIFt0aGlzXSBpcyBvbi4KICAvLy8gU2VsZWN0IGJpdCBmcm9tIFtmYWxzZVZhbHVlXSB3aGVuIGJpdCBpbiBbdGhpc10gaXMgb2ZmLgogIEZsb2F0MzJ4NCBzZWxlY3QoRmxvYXQzMng0IHRydWVWYWx1ZSwgRmxvYXQzMng0IGZhbHNlVmFsdWUpOwp9CgovKioKICogRmxvYXQ2NHgyIGltbXV0YWJsZSB2YWx1ZSB0eXBlIGFuZCBvcGVyYXRpb25zLgogKgogKiBGbG9hdDY0eDIgc3RvcmVzIDIgNjQtYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlcyBpbiAibGFuZXMiLgogKiBUaGUgbGFuZXMgYXJlICJ4IiBhbmQgInkiIHJlc3BlY3RpdmVseS4KICovCmFic3RyYWN0IGNsYXNzIEZsb2F0NjR4MiB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDY0eDIoZG91YmxlIHgsIGRvdWJsZSB5KTsKICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0NjR4Mi5zcGxhdChkb3VibGUgdik7CiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDY0eDIuemVybygpOwoKICAvLy8gVXNlcyB0aGUgIngiIGFuZCAieSIgbGFuZXMgZnJvbSBbdl0uCiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDY0eDIuZnJvbUZsb2F0MzJ4NChGbG9hdDMyeDQgdik7CgogIC8vLyBBZGRpdGlvbiBvcGVyYXRvci4KICBGbG9hdDY0eDIgb3BlcmF0b3IgKyhGbG9hdDY0eDIgb3RoZXIpOwoKICAvLy8gTmVnYXRlIG9wZXJhdG9yLgogIEZsb2F0NjR4MiBvcGVyYXRvciAtKCk7CgogIC8vLyBTdWJ0cmFjdGlvbiBvcGVyYXRvci4KICBGbG9hdDY0eDIgb3BlcmF0b3IgLShGbG9hdDY0eDIgb3RoZXIpOwoKICAvLy8gTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuCiAgRmxvYXQ2NHgyIG9wZXJhdG9yICooRmxvYXQ2NHgyIG90aGVyKTsKCiAgLy8vIERpdmlzaW9uIG9wZXJhdG9yLgogIEZsb2F0NjR4MiBvcGVyYXRvciAvKEZsb2F0NjR4MiBvdGhlcik7CgogIC8vLyBSZXR1cm5zIGEgY29weSBvZiBbdGhpc10gZWFjaCBsYW5lIGJlaW5nIHNjYWxlZCBieSBbc10uCiAgLy8vIEVxdWl2YWxlbnQgdG8gdGhpcyAqIG5ldyBGbG9hdDY0eDIuc3BsYXQocykKICBGbG9hdDY0eDIgc2NhbGUoZG91YmxlIHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbGFuZS13aXNlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgW0Zsb2F0NjR4Ml0uCiAgRmxvYXQ2NHgyIGFicygpOwoKICAvLy8gTGFuZS13aXNlIGNsYW1wIFt0aGlzXSB0byBiZSBpbiB0aGUgcmFuZ2UgW2xvd2VyTGltaXRdLVt1cHBlckxpbWl0XS4KICBGbG9hdDY0eDIgY2xhbXAoRmxvYXQ2NHgyIGxvd2VyTGltaXQsIEZsb2F0NjR4MiB1cHBlckxpbWl0KTsKCiAgLy8vIEV4dHJhY3RlZCB4IHZhbHVlLgogIGRvdWJsZSBnZXQgeDsKCiAgLy8vIEV4dHJhY3RlZCB5IHZhbHVlLgogIGRvdWJsZSBnZXQgeTsKCiAgLy8vIEV4dHJhY3QgdGhlIHNpZ24gYml0cyBmcm9tIGVhY2ggbGFuZSByZXR1cm4gdGhlbSBpbiB0aGUgZmlyc3QgMiBiaXRzLgogIC8vLyAieCIgbGFuZSBpcyBiaXQgMC4KICAvLy8gInkiIGxhbmUgaXMgYml0IDEuCiAgaW50IGdldCBzaWduTWFzazsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0Zsb2F0NjR4Ml0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeCB2YWx1ZS4KICBGbG9hdDY0eDIgd2l0aFgoZG91YmxlIHgpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbRmxvYXQ2NHgyXSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB5IHZhbHVlLgogIEZsb2F0NjR4MiB3aXRoWShkb3VibGUgeSk7CgogIC8vLyBSZXR1cm5zIHRoZSBsYW5lLXdpc2UgbWluaW11bSB2YWx1ZSBpbiBbdGhpc10gb3IgW290aGVyXS4KICBGbG9hdDY0eDIgbWluKEZsb2F0NjR4MiBvdGhlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBsYW5lLXdpc2UgbWF4aW11bSB2YWx1ZSBpbiBbdGhpc10gb3IgW290aGVyXS4KICBGbG9hdDY0eDIgbWF4KEZsb2F0NjR4MiBvdGhlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBsYW5lLXdpc2Ugc3F1YXJlIHJvb3Qgb2YgW3RoaXNdLgogIEZsb2F0NjR4MiBzcXJ0KCk7Cn0KiiYATk48ATNEBCYEIgQVGQEzASUBBDcDQCgEHAY3BhkBBkMFOkYVBU1JBUsFLSpKBj4BBkIFOkUVBU1JBUsFLSpKBjwBBkoFOk0VBU1JBUsFLSpKBkwBBkQFOkcVBU8sSR5OBUsUBS0xKk4GQAEGQwU6RhUFTyxJHk4FSxQFLTEqTgY+AQZEBTpHFQVPLEkeTxIFSxQFLTIqTgZAAQZDBTpGFQVPLEkeTxIFSxQFLTIqTgY+AQZEBTpHFQVPLEkeUBIFSxQFLTMqTgZAAQZDBTpGFQVPLEkeUBIFSxQFLTMqTgY+AQZFBTpIFQVQLUkeTRIFTBQFLTUqTwZCAQZFBTpIFQVPLEkeTxIFSxQFLTIqTgZCAQZFBTpIFQVPLEkeUBIFSxQFLTMqTgZCAQZHBTpKFQVQLUkeTRIFTBQFLTUqTwZGAQZHBTpKFQVQLUkeTRIFTBQFLTUqTwZGAQZCBTpFFQVNSQVLBS0qSgY8AgEEKAQbBk8LBh4BBk8GGQEGMAYZAQY6BhkCATEGOQVISx9IBikCATMGOQU/TDNLBi8CAQRAFgQPHCYBMzUdTxMRAgEETUcnA0hIPSlKNkowR0IDLS4iJAQvBkglBhwpAQZHBTscQj48SgVJSh0GKy01BAEGTEcVBT8FOTkGHwEGR0wgBUYFOTkGKwEGSzsFPAU5OQYgAQZHTRcFQwU2PAYsAQZNSwsFThAFOUEGPgEGR0srBSZABTlBBkoBBkhGCwVMBTlBBj8BBk5FIgUtKgU5QQZLAQZOSwsFThAFOUEGPgEGSEssBSZABTlBBkoBBklGCwVMBTlBBj8BBk9FIwUtKgU5QQZLAQZPSwsFThAFOUEGPgEGSUstBSZABTlBBkoBBkpGCwVMBTlBBj8BBlBFJAUtKgU5QQZLAQZIPD8FOUEGQwEGSEM5BUhGSkhKTks1BTlBBk8BBkk8PwU5QQZDAQZJQzkFOUEGTwIBBDEDO0oDRk0XBD4GSSgGKQEGRiMFQzEGOgEGRwU7HEI+PEoFSUodBistNQQBBksFS1AnBQ03LTsJBUQFDTAJBUApRAYqASgCAQQzAztKA0Y/EwQ/BkkoBioBBkcjBUMxBjsBBkcFPBxCPjxKBUlKHQYsLTYEAQY3BUpJTAYpAQZLBUtQJwUNOC08CQVEBQ0wCQVAKUQGKwEoAgEEMwM7SgNLNS8ERgZQKAYxAQZFOwVBLgZCAQZIHgVDFUI+PEoFSUodBjMtPQQBBksFSk8wBQ0/LUMJBUQFDTAJBUApRAYyASgCAQRHEAM7SgNDThsEPwZKKAYqAQZHIwVDMQY7AQZIBTwcQj48SgVJSh0FRBgGLC02BAEGSwVETzAFDTgtPAkFRAUNMAkFQClEBisBKAIBBEkQAztKA0NAFQRABkcrBisBBkgjBUMxBjwBBj4gBUQVQj48SgVJSh0FRBgGLS03BAEGSwVETzAFDTktPQkFRAUNMAkFQClEBiwBKAIBBEcQAztKA0NOJAQ/BkooBioBBkcjBUMxBjsBBkgFPBxCPjxKBUlKHQVEGAYsLTYEAQZLBURPMAUNOC08CQVEBQ0wCQVAKUQGKwEoAgEESRADO0oDQ0AaBEAGRysGKwEGSCMFQzEGPAEGPiAFRBVCPjxKBUlKHQVEGAYtLTcEAQZLBURPMAUNOS09CQVEBQ0wCQVAKUQGLAEoAgEERxADO0oDQ043BD8GSigGKgEGRyMFQzEGOwEGSAVDFUI+PEoFSUodBUQYBiwtNgQBBksFRE8wBQ04LTwJBUQFDTAJBUApRAYrASgCAQRJEAM7SgNDQCQEQAZHKwYrAQZIIwVDMQY8AQY/IAVEFUI+PEoFSUodBUQYBi0tNwQBBksFRE8wBQ05LT0JBUQFDTAJBUApRAYsASgCAQRKLgMYSiYDQUEeBEYGSygGLAEGSSMFQzEGQAEGSQU+HEI+PEoFSUodBUQYBi4tOAQBBksFRU8wBQ06LT4JBUQFDTAJBUApRAYtASgCAQRKLwMYSiYERgZLKAYsAQZJIwZAAQZJBT4cQj48SgVJSh0FRBgGLi04BAEGSwVFTzAFDTotPgkFRAUNMAkFQClEBi0BKAIBBEIQA0FFBEUGRi8GLgEGSyMGRQEGSwVAHEI+PEoFSUodBUQYBjAtOgQBBjkFUEIGNQEGSwVHTzAFDTwtQAkFRAUNMAkFQClEBi8BKQIBBEAQA0FFBEEGRC8GLAEGSSMGQQEGSQU+HEI+PEoFSUodBUQYBi4tOAQBBjkFTEAGMQEGSwVGTzAFDTotPgkFRAUNMAkFQClEBi0BKQIBBEIQA0FFBEUGRjcGLgEGSyMGRQEGOQVQQgY1AQZLBUAcQj48SgVJSh0FRBgGMC06BAEGSwVHTzAFDTwtQAkFRAUNMAkFQClEBi8BKQIBBDIDPzYEG0YuJTkBTho5ARkpARcaARwpAR8pARkpARwlASUsAR8oASgvARgiARwlAT4yHQFAEwFLPwEZEAEZEAEZEAEZEAFMGRkZGRQBMB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICABUB8BQkopMwFHHQFHHQFHHQFHHQFAIgFAIgEpFAEoGgE7HgIBBBsDMTYEGThBOwEgJQEhJQEhJQEZJQEcJQEnDQEnDQEnDQEnDQFKGRkZGRQBMB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICABUB0BQkgpLwFFGAFFGAFFGAFFGAFIEgFIEgFIEgFIEgFFHQFFHQFFHQFFHQFEPD4/AgEEMgM/KwQbMi4lASs5ARkpARcaARwpAR8pARkpAT4yHQFAEwFLPwEZEAEZEAFMGRkUAUcdAUcdAUAiAUAiATMUAgEPZGFydDp0eXBlZF9kYXRhNW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvdHlwZWRfZGF0YV9wYXRjaC5kYXJ0wAIYNy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDp0eXBlZF9kYXRhIiB3aGljaCBjb250YWlucyBhbGwgdGhlIGltcG9ydHMKLy8vIHVzZWQgYnkgcGF0Y2hlcyBvZiB0aGF0IGxpYnJhcnkuIFdlIHBsYW4gdG8gY2hhbmdlIHRoaXMgd2hlbiB3ZSBoYXZlIGEKLy8vIHNoYXJlZCBmcm9udCBlbmQgYW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIgogICAgc2hvdwogICAgICAgIENsYXNzSUQsCiAgICAgICAgQ29kZVVuaXRzLAogICAgICAgIEV4cGFuZEl0ZXJhYmxlLAogICAgICAgIEZvbGxvd2VkQnlJdGVyYWJsZSwKICAgICAgICBJdGVyYWJsZUVsZW1lbnRFcnJvciwKICAgICAgICBMaXN0TWFwVmlldywKICAgICAgICBMaXN0cywKICAgICAgICBNYXBwZWRJdGVyYWJsZSwKICAgICAgICBNYXBwZWRJdGVyYWJsZSwKICAgICAgICBSZXZlcnNlZExpc3RJdGVyYWJsZSwKICAgICAgICBTa2lwV2hpbGVJdGVyYWJsZSwKICAgICAgICBTb3J0LAogICAgICAgIFN1Ykxpc3RJdGVyYWJsZSwKICAgICAgICBUYWtlV2hpbGVJdGVyYWJsZSwKICAgICAgICBXaGVyZUl0ZXJhYmxlLAogICAgICAgIFdoZXJlVHlwZUl0ZXJhYmxlLAogICAgICAgIHBhdGNoOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iIHNob3cgTGlzdEJhc2U7CgppbXBvcnQgJ2RhcnQ6bWF0aCcgc2hvdyBSYW5kb207CgovLy8gVGhlcmUgYXJlIG5vIHBhcnRzIGluIHBhdGNoIGxpYnJhcnk6CgpAcGF0Y2gKY2xhc3MgQnl0ZURhdGEgaW1wbGVtZW50cyBUeXBlZERhdGEgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IEJ5dGVEYXRhKGludCBsZW5ndGgpIHsKICAgIGZpbmFsIGxpc3QgPSBuZXcgVWludDhMaXN0KGxlbmd0aCkgYXMgX1R5cGVkTGlzdDsKICAgIF9yYW5nZUNoZWNrKGxpc3QubGVuZ3RoSW5CeXRlcywgMCwgbGVuZ3RoKTsKICAgIHJldHVybiBuZXcgX0J5dGVEYXRhVmlldy5fKGxpc3QsIDAsIGxlbmd0aCk7CiAgfQoKICAvLyBDYWxsZWQgZGlyZWN0bHkgZnJvbSBDIGNvZGUuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgQnl0ZURhdGEuX3ZpZXcoX1R5cGVkTGlzdCB0eXBlZERhdGEsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKSB7CiAgICBfcmFuZ2VDaGVjayh0eXBlZERhdGEubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICAgIHJldHVybiBuZXcgX0J5dGVEYXRhVmlldy5fKHR5cGVkRGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9Cn0KCi8vIEJhc2VkIGNsYXNzIGZvciBfVHlwZWRMaXN0IHRoYXQgcHJvdmlkZXMgY29tbW9uIG1ldGhvZHMgZm9yIGltcGxlbWVudGluZwovLyB0aGUgY29sbGVjdGlvbiBhbmQgbGlzdCBpbnRlcmZhY2VzLgovLyBUaGlzIGNsYXNzIGRvZXMgbm90IGV4dGVuZCBMaXN0QmFzZTxUPiBzaW5jZSB0aGF0IHdvdWxkIGFkZCB0eXBlIGFyZ3VtZW50cwovLyB0byBpbnN0YW5jZXMgb2YgX1R5cGVMaXN0QmFzZS4gSW5zdGVhZCB0aGUgc3ViY2xhc3NlcyB1c2UgdHlwZSBzcGVjaWZpYwovLyBtaXhpbnMgKGxpa2UgX0ludExpc3RNaXhpbiwgX0RvdWJsZUxpc3RNaXhpbikgdG8gaW1wbGVtZW50IExpc3RCYXNlPFQ+LgphYnN0cmFjdCBjbGFzcyBfVHlwZWRMaXN0QmFzZSB7CiAgaW50IGdldCBsZW5ndGg7CiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzOwogIF9CeXRlQnVmZmVyIGdldCBidWZmZXI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIENvbGxlY3Rpb24gaW50ZXJmYWNlLgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlQWxsKHRoaXMgYXMgSXRlcmFibGUsIHNlcGFyYXRvcik7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PSAwOwogIH0KCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCgogIHNldCBsZW5ndGgobmV3TGVuZ3RoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlc2l6ZSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlIGl0ZXJhYmxlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgT2JqZWN0IGludGVyZmFjZS4KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBMaXN0QmFzZS5saXN0VG9TdHJpbmcodGhpcyBhcyBMaXN0KTsKCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgoKICAvLyBSZXR1cm5zIHRydWUgaWYgb3BlcmF0aW9uIHN1Y2NlZWRzLgogIC8vICdmcm9tQ2lkJyBhbmQgJ3RvQ2lkJyBtYXkgYmUgY2lkLXMgb2YgdGhlIHZpZXdzIGFuZCB0aGVyZWZvcmUgbWF5IG5vdAogIC8vIG1hdGNoIHRoZSBjaWRzIG9mICd0aGlzJyBhbmQgJ2Zyb20nLgogIC8vIFVzZXMgdG9DaWQgYW5kIGZyb21DaWQgdG8gZGVjaWRlIGlmIGNsYW1waW5nIGlzIG5lY2Vzc2FyeS4KICAvLyBFbGVtZW50IHNpemUgb2YgdG9DaWQgYW5kIGZyb21DaWQgbXVzdCBtYXRjaCAodGVzdCBhdCBjYWxsZXIpLgogIGJvb2wgX3NldFJhbmdlKGludCBzdGFydEluQnl0ZXMsIGludCBsZW5ndGhJbkJ5dGVzLCBfVHlwZWRMaXN0QmFzZSBmcm9tLAogICAgICBpbnQgc3RhcnRGcm9tSW5CeXRlcywgaW50IHRvQ2lkLCBpbnQgZnJvbUNpZCkgbmF0aXZlICJUeXBlZERhdGFfc2V0UmFuZ2UiOwp9CgptaXhpbiBfSW50TGlzdE1peGluIGltcGxlbWVudHMgTGlzdDxpbnQ+IHsKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlczsKICBpbnQgZ2V0IG9mZnNldEluQnl0ZXM7CiAgX0J5dGVCdWZmZXIgZ2V0IGJ1ZmZlcjsKCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gbmV3IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICBJdGVyYWJsZTxpbnQ+IGZvbGxvd2VkQnkoSXRlcmFibGU8aW50PiBvdGhlcikgPT4KICAgICAgbmV3IEZvbGxvd2VkQnlJdGVyYWJsZTxpbnQ+LmZpcnN0RWZmaWNpZW50KHRoaXMsIG90aGVyKTsKCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gTGlzdC5jYXN0RnJvbTxpbnQsIFI+KHRoaXMpOwogIHZvaWQgc2V0IGZpcnN0KGludCB2YWx1ZSkgewogICAgaWYgKHRoaXMubGVuZ3RoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1swXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBzZXQgbGFzdChpbnQgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbdGhpcy5sZW5ndGggLSAxXSA9IHZhbHVlOwogIH0KCiAgaW50IGluZGV4V2hlcmUoYm9vbCB0ZXN0KGludCBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KGludCBlbGVtZW50KSwgW2ludCBzdGFydF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgTGlzdDxpbnQ+IG9wZXJhdG9yICsoTGlzdDxpbnQ+IG90aGVyKSB7CiAgICBpbnQgdG90YWxMZW5ndGggPSB0aGlzLmxlbmd0aCArIG90aGVyLmxlbmd0aDsKICAgIHJldHVybiA8aW50PltdCiAgICAgIC4ubGVuZ3RoID0gdG90YWxMZW5ndGgKICAgICAgLi5zZXRSYW5nZSgwLCB0aGlzLmxlbmd0aCwgdGhpcykKICAgICAgLi5zZXRSYW5nZSh0aGlzLmxlbmd0aCwgdG90YWxMZW5ndGgsIG90aGVyKTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKSB7CiAgICByYW5kb20gPz89IG5ldyBSYW5kb20oKTsKICAgIHZhciBpID0gdGhpcy5sZW5ndGg7CiAgICB3aGlsZSAoaSA+IDEpIHsKICAgICAgaW50IHBvcyA9IHJhbmRvbS5uZXh0SW50KGkpOwogICAgICBpIC09IDE7CiAgICAgIHZhciB0bXAgPSB0aGlzW2ldOwogICAgICB0aGlzW2ldID0gdGhpc1twb3NdOwogICAgICB0aGlzW3Bvc10gPSB0bXA7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxpbnQ+IHdoZXJlKGJvb2wgZihpbnQgZWxlbWVudCkpID0+IG5ldyBXaGVyZUl0ZXJhYmxlPGludD4odGhpcywgZik7CgogIEl0ZXJhYmxlPGludD4gdGFrZShpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxpbnQ+KHRoaXMsIDAsIG4pOwoKICBJdGVyYWJsZTxpbnQ+IHRha2VXaGlsZShib29sIHRlc3QoaW50IGVsZW1lbnQpKSA9PgogICAgICBuZXcgVGFrZVdoaWxlSXRlcmFibGU8aW50Pih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8aW50PiBza2lwKGludCBuKSA9PiBuZXcgU3ViTGlzdEl0ZXJhYmxlPGludD4odGhpcywgbiwgbnVsbCk7CgogIEl0ZXJhYmxlPGludD4gc2tpcFdoaWxlKGJvb2wgdGVzdChpbnQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBTa2lwV2hpbGVJdGVyYWJsZTxpbnQ+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxpbnQ+IGdldCByZXZlcnNlZCA9PiBuZXcgUmV2ZXJzZWRMaXN0SXRlcmFibGU8aW50Pih0aGlzKTsKCiAgTWFwPGludCwgaW50PiBhc01hcCgpID0+IG5ldyBMaXN0TWFwVmlldzxpbnQ+KHRoaXMpOwoKICBJdGVyYWJsZTxpbnQ+IGdldFJhbmdlKGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxpbnQ+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSXRlcmF0b3I8aW50PiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9UeXBlZExpc3RJdGVyYXRvcjxpbnQ+KHRoaXMpOwoKICBMaXN0PGludD4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBMaXN0PGludD4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgU2V0PGludD4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxpbnQ+LmZyb20odGhpcyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKGludCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgaW50IHJlZHVjZShpbnQgY29tYmluZShpbnQgdmFsdWUsIGludCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHZhciB2YWx1ZSA9IHRoaXNbMF07CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIGluaXRpYWxWYWx1ZSwgaW50IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGluaXRpYWxWYWx1ZSA9IGNvbWJpbmUoaW5pdGlhbFZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKGludCBlbGVtZW50KSkgPT4gbmV3IE1hcHBlZEl0ZXJhYmxlPGludCwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKGludCBlbGVtZW50KSkgPT4KICAgICAgbmV3IEV4cGFuZEl0ZXJhYmxlPGludCwgVD4odGhpcywgZik7CgogIGJvb2wgZXZlcnkoYm9vbCBmKGludCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoIWYodGhpc1tpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCBmKGludCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoZih0aGlzW2ldKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpbnQgZmlyc3RXaGVyZShib29sIHRlc3QoaW50IGVsZW1lbnQpLCB7aW50IG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBpbnQgbGFzdFdoZXJlKGJvb2wgdGVzdChpbnQgZWxlbWVudCksIHtpbnQgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgaW50IHNpbmdsZVdoZXJlKGJvb2wgdGVzdChpbnQgZWxlbWVudCksIHtpbnQgb3JFbHNlKCl9KSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgaW50IGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIHJldHVybiB0aGlzW2luZGV4XTsKICB9CgogIHZvaWQgYWRkKGludCB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8aW50PiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxpbnQ+IHZhbHVlcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKGludCBhLCBpbnQgYildKSB7CiAgICBTb3J0LnNvcnQodGhpcywgY29tcGFyZSA/PyBDb21wYXJhYmxlLmNvbXBhcmUpOwogIH0KCiAgaW50IGluZGV4T2YoaW50IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHN0YXJ0ID0gMDsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4T2YoaW50IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSBudWxsXSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIGludCByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoaW50IGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KGludCBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBpbnQgZ2V0IGZpcnN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1swXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgaW50IGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgaW50IGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPGludD4gaXRlcmFibGUpIHsKICAgIGZpbmFsIGVuZCA9IGl0ZXJhYmxlLmxlbmd0aCArIGluZGV4OwogICAgc2V0UmFuZ2UoaW5kZXgsIGVuZCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbaW50IGZpbGxWYWx1ZV0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7CiAgICAgIHRoaXNbaV0gPSBmaWxsVmFsdWU7CiAgICB9CiAgfQp9CgptaXhpbiBfVHlwZWRJbnRMaXN0TWl4aW48U3Bhd25lZFR5cGUgZXh0ZW5kcyBMaXN0PGludD4+IG9uIF9JbnRMaXN0TWl4aW4KICAgIGltcGxlbWVudHMgTGlzdDxpbnQ+IHsKICBTcGF3bmVkVHlwZSBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKTsKCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPGludD4gZnJvbSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgLy8gQ2hlY2sgcmFuZ2VzLgogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IGVuZCB8fCBlbmQgPiBsZW5ndGgpIHsKICAgICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsgLy8gQWx3YXlzIHRocm93cy4KICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgIH0KICAgIGlmIChza2lwQ291bnQgPCAwKSB7CiAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2Uoc2tpcENvdW50LCAwLCBudWxsLCAic2tpcENvdW50Iik7CiAgICB9CgogICAgZmluYWwgY291bnQgPSBlbmQgLSBzdGFydDsKICAgIGlmICgoZnJvbS5sZW5ndGggLSBza2lwQ291bnQpIDwgY291bnQpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CgogICAgaWYgKGNvdW50ID09IDApIHJldHVybjsKCiAgICBpZiAoZnJvbSBpcyBfVHlwZWRMaXN0QmFzZSkgewogICAgICAvLyBOb3RlOiBfVHlwZWRMaXN0QmFzZSBpcyBub3QgcmVsYXRlZCB0byBJdGVyYWJsZTxpbnQ+IHNvIHRoZXJlIGlzCiAgICAgIC8vIG5vIHByb21vdGlvbiBoZXJlLgogICAgICBmaW5hbCBmcm9tQXNUeXBlZExpc3QgPSBmcm9tIGFzIF9UeXBlZExpc3RCYXNlOwogICAgICBpZiAodGhpcy5lbGVtZW50U2l6ZUluQnl0ZXMgPT0gZnJvbUFzVHlwZWRMaXN0LmVsZW1lbnRTaXplSW5CeXRlcykgewogICAgICAgIGlmICgoY291bnQgPCAxMCkgJiYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgIT0gdGhpcy5idWZmZXIpKSB7CiAgICAgICAgICBMaXN0cy5jb3B5KGZyb20gYXMgTGlzdDxpbnQ+LCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1ZmZlci5fZGF0YS5fc2V0UmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0ICogZWxlbWVudFNpemVJbkJ5dGVzICsgdGhpcy5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBjb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcywKICAgICAgICAgICAgZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlci5fZGF0YSwKICAgICAgICAgICAgc2tpcENvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzICsgZnJvbUFzVHlwZWRMaXN0Lm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQodGhpcyksCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQoZnJvbSkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgPT0gdGhpcy5idWZmZXIpIHsKICAgICAgICAvLyBEaWZmZXJlbnQgZWxlbWVudCBzaXplcywgYnV0IHNhbWUgYnVmZmVyIG1lYW5zIHRoYXQgd2UgbmVlZAogICAgICAgIC8vIGFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCiAgICAgICAgLy8gVE9ETyhzcmRqYW4pOiBPcHRpbWl6ZSB0byBza2lwIGNvcHlpbmcgaWYgdGhlIHJhbmdlIGRvZXMgbm90IG92ZXJsYXAuCiAgICAgICAgZmluYWwgZnJvbUFzTGlzdCA9IGZyb20gYXMgTGlzdDxpbnQ+OwogICAgICAgIGZpbmFsIHRlbXBCdWZmZXIgPSBfY3JlYXRlTGlzdChjb3VudCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICB0ZW1wQnVmZmVyW2ldID0gZnJvbUFzTGlzdFtza2lwQ291bnQgKyBpXTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgIHRoaXNbaV0gPSB0ZW1wQnVmZmVyW2kgLSBzdGFydF07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIExpc3Qgb3RoZXJMaXN0OwogICAgaW50IG90aGVyU3RhcnQ7CiAgICBpZiAoZnJvbSBpcyBMaXN0PGludD4pIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb20uc2tpcChza2lwQ291bnQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBvdGhlclN0YXJ0ID0gMDsKICAgIH0KICAgIGlmIChvdGhlclN0YXJ0ICsgY291bnQgPiBvdGhlckxpc3QubGVuZ3RoKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQogICAgTGlzdHMuY29weShvdGhlckxpc3QsIG90aGVyU3RhcnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgfQoKICBTcGF3bmVkVHlwZSBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBTcGF3bmVkVHlwZSByZXN1bHQgPSBfY3JlYXRlTGlzdChsZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGhpcywgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCm1peGluIF9Eb3VibGVMaXN0TWl4aW4gaW1wbGVtZW50cyBMaXN0PGRvdWJsZT4gewogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzOwogIGludCBnZXQgb2Zmc2V0SW5CeXRlczsKICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBuZXcgV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIEl0ZXJhYmxlPGRvdWJsZT4gZm9sbG93ZWRCeShJdGVyYWJsZTxkb3VibGU+IG90aGVyKSA9PgogICAgICBuZXcgRm9sbG93ZWRCeUl0ZXJhYmxlPGRvdWJsZT4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPGRvdWJsZSwgUj4odGhpcyk7CiAgdm9pZCBzZXQgZmlyc3QoZG91YmxlIHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzWzBdID0gdmFsdWU7CiAgfQoKICB2b2lkIHNldCBsYXN0KGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKHRoaXMubGVuZ3RoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1t0aGlzLmxlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoZG91YmxlIGVsZW1lbnQpLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoZG91YmxlIGVsZW1lbnQpLCBbaW50IHN0YXJ0XSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHN0YXJ0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBMaXN0PGRvdWJsZT4gb3BlcmF0b3IgKyhMaXN0PGRvdWJsZT4gb3RoZXIpIHsKICAgIGludCB0b3RhbExlbmd0aCA9IHRoaXMubGVuZ3RoICsgb3RoZXIubGVuZ3RoOwogICAgcmV0dXJuIDxkb3VibGU+W10KICAgICAgLi5sZW5ndGggPSB0b3RhbExlbmd0aAogICAgICAuLnNldFJhbmdlKDAsIHRoaXMubGVuZ3RoLCB0aGlzKQogICAgICAuLnNldFJhbmdlKHRoaXMubGVuZ3RoLCB0b3RhbExlbmd0aCwgb3RoZXIpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIHJhbmRvbSA/Pz0gbmV3IFJhbmRvbSgpOwogICAgdmFyIGkgPSB0aGlzLmxlbmd0aDsKICAgIHdoaWxlIChpID4gMSkgewogICAgICBpbnQgcG9zID0gcmFuZG9tLm5leHRJbnQoaSk7CiAgICAgIGkgLT0gMTsKICAgICAgdmFyIHRtcCA9IHRoaXNbaV07CiAgICAgIHRoaXNbaV0gPSB0aGlzW3Bvc107CiAgICAgIHRoaXNbcG9zXSA9IHRtcDsKICAgIH0KICB9CgogIEl0ZXJhYmxlPGRvdWJsZT4gd2hlcmUoYm9vbCBmKGRvdWJsZSBlbGVtZW50KSkgPT4KICAgICAgbmV3IFdoZXJlSXRlcmFibGU8ZG91YmxlPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8ZG91YmxlPiB0YWtlKGludCBuKSA9PiBuZXcgU3ViTGlzdEl0ZXJhYmxlPGRvdWJsZT4odGhpcywgMCwgbik7CgogIEl0ZXJhYmxlPGRvdWJsZT4gdGFrZVdoaWxlKGJvb2wgdGVzdChkb3VibGUgZWxlbWVudCkpID0+CiAgICAgIG5ldyBUYWtlV2hpbGVJdGVyYWJsZTxkb3VibGU+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxkb3VibGU+IHNraXAoaW50IG4pID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8ZG91YmxlPih0aGlzLCBuLCBudWxsKTsKCiAgSXRlcmFibGU8ZG91YmxlPiBza2lwV2hpbGUoYm9vbCB0ZXN0KGRvdWJsZSBlbGVtZW50KSkgPT4KICAgICAgbmV3IFNraXBXaGlsZUl0ZXJhYmxlPGRvdWJsZT4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPGRvdWJsZT4gZ2V0IHJldmVyc2VkID0+IG5ldyBSZXZlcnNlZExpc3RJdGVyYWJsZTxkb3VibGU+KHRoaXMpOwoKICBNYXA8aW50LCBkb3VibGU+IGFzTWFwKCkgPT4gbmV3IExpc3RNYXBWaWV3PGRvdWJsZT4odGhpcyk7CgogIEl0ZXJhYmxlPGRvdWJsZT4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIHJldHVybiBuZXcgU3ViTGlzdEl0ZXJhYmxlPGRvdWJsZT4odGhpcywgc3RhcnQsIGVuZCk7CiAgfQoKICBJdGVyYXRvcjxkb3VibGU+IGdldCBpdGVyYXRvciA9PiBuZXcgX1R5cGVkTGlzdEl0ZXJhdG9yPGRvdWJsZT4odGhpcyk7CgogIExpc3Q8ZG91YmxlPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICByZXR1cm4gbmV3IExpc3Q8ZG91YmxlPi5mcm9tKHRoaXMsIGdyb3dhYmxlOiBncm93YWJsZSk7CiAgfQoKICBTZXQ8ZG91YmxlPiB0b1NldCgpIHsKICAgIHJldHVybiBuZXcgU2V0PGRvdWJsZT4uZnJvbSh0aGlzKTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoZG91YmxlIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGYodGhpc1tpXSk7CiAgICB9CiAgfQoKICBkb3VibGUgcmVkdWNlKGRvdWJsZSBjb21iaW5lKGRvdWJsZSB2YWx1ZSwgZG91YmxlIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdmFyIHZhbHVlID0gdGhpc1swXTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgaW5pdGlhbFZhbHVlLCBkb3VibGUgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaW5pdGlhbFZhbHVlID0gY29tYmluZShpbml0aWFsVmFsdWUsIHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIGluaXRpYWxWYWx1ZTsKICB9CgogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoZG91YmxlIGVsZW1lbnQpKSA9PgogICAgICBuZXcgTWFwcGVkSXRlcmFibGU8ZG91YmxlLCBUPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoZG91YmxlIGVsZW1lbnQpKSA9PgogICAgICBuZXcgRXhwYW5kSXRlcmFibGU8ZG91YmxlLCBUPih0aGlzLCBmKTsKCiAgYm9vbCBldmVyeShib29sIGYoZG91YmxlIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICghZih0aGlzW2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIGFueShib29sIGYoZG91YmxlIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmIChmKHRoaXNbaV0pKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGRvdWJsZSBmaXJzdFdoZXJlKGJvb2wgdGVzdChkb3VibGUgZWxlbWVudCksIHtkb3VibGUgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIGRvdWJsZSBsYXN0V2hlcmUoYm9vbCB0ZXN0KGRvdWJsZSBlbGVtZW50KSwge2RvdWJsZSBvckVsc2UoKX0pIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIH0KICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBkb3VibGUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KGRvdWJsZSBlbGVtZW50KSwge2RvdWJsZSBvckVsc2UoKX0pIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICBpZiAoZm91bmRNYXRjaGluZykgewogICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgICAgIH0KICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBkb3VibGUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgcmV0dXJuIHRoaXNbaW5kZXhdOwogIH0KCiAgdm9pZCBhZGQoZG91YmxlIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxkb3VibGU+IHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGluc2VydChpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPGRvdWJsZT4gdmFsdWVzKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgc29ydChbaW50IGNvbXBhcmUoZG91YmxlIGEsIGRvdWJsZSBiKV0pIHsKICAgIFNvcnQuc29ydCh0aGlzLCBjb21wYXJlID8/IENvbXBhcmFibGUuY29tcGFyZSk7CiAgfQoKICBpbnQgaW5kZXhPZihkb3VibGUgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhPZihkb3VibGUgZWxlbWVudCwgW2ludCBzdGFydCA9IG51bGxdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBkb3VibGUgcmVtb3ZlTGFzdCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgZG91YmxlIHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChkb3VibGUgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoZG91YmxlIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIGRvdWJsZSBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBkb3VibGUgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBkb3VibGUgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiB0aGlzWzBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8ZG91YmxlPiBpdGVyYWJsZSkgewogICAgZmluYWwgZW5kID0gaXRlcmFibGUubGVuZ3RoICsgaW5kZXg7CiAgICBzZXRSYW5nZShpbmRleCwgZW5kLCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtkb3VibGUgZmlsbFZhbHVlXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgdGhpc1tpXSA9IGZpbGxWYWx1ZTsKICAgIH0KICB9Cn0KCm1peGluIF9UeXBlZERvdWJsZUxpc3RNaXhpbjxTcGF3bmVkVHlwZSBleHRlbmRzIExpc3Q8ZG91YmxlPj4KICAgIG9uIF9Eb3VibGVMaXN0TWl4aW4gaW1wbGVtZW50cyBMaXN0PGRvdWJsZT4gewogIFNwYXduZWRUeXBlIF9jcmVhdGVMaXN0KGludCBsZW5ndGgpOwoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8ZG91YmxlPiBmcm9tLAogICAgICBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICAvLyBDaGVjayByYW5nZXMuCiAgICBpZiAoMCA+IHN0YXJ0IHx8IHN0YXJ0ID4gZW5kIHx8IGVuZCA+IGxlbmd0aCkgewogICAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsZW5ndGgpOyAvLyBBbHdheXMgdGhyb3dzLgogICAgICBhc3NlcnQoZmFsc2UpOwogICAgfQogICAgaWYgKHNraXBDb3VudCA8IDApIHsKICAgICAgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZShza2lwQ291bnQsIDAsIG51bGwsICJza2lwQ291bnQiKTsKICAgIH0KCiAgICBmaW5hbCBjb3VudCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKChmcm9tLmxlbmd0aCAtIHNraXBDb3VudCkgPCBjb3VudCkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29GZXcoKTsKICAgIH0KCiAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuOwoKICAgIGlmIChmcm9tIGlzIF9UeXBlZExpc3RCYXNlKSB7CiAgICAgIC8vIE5vdGU6IF9UeXBlZExpc3RCYXNlIGlzIG5vdCByZWxhdGVkIHRvIEl0ZXJhYmxlPGRvdWJsZT4gc28gdGhlcmUgaXMKICAgICAgLy8gbm8gcHJvbW90aW9uIGhlcmUuCiAgICAgIGZpbmFsIGZyb21Bc1R5cGVkTGlzdCA9IGZyb20gYXMgX1R5cGVkTGlzdEJhc2U7CiAgICAgIGlmICh0aGlzLmVsZW1lbnRTaXplSW5CeXRlcyA9PSBmcm9tQXNUeXBlZExpc3QuZWxlbWVudFNpemVJbkJ5dGVzKSB7CiAgICAgICAgaWYgKChjb3VudCA8IDEwKSAmJiAoZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlciAhPSB0aGlzLmJ1ZmZlcikpIHsKICAgICAgICAgIExpc3RzLmNvcHkoZnJvbSBhcyBMaXN0PGRvdWJsZT4sIHNraXBDb3VudCwgdGhpcywgc3RhcnQsIGNvdW50KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYnVmZmVyLl9kYXRhLl9zZXRSYW5nZSgKICAgICAgICAgICAgc3RhcnQgKiBlbGVtZW50U2l6ZUluQnl0ZXMgKyB0aGlzLm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIGNvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzLAogICAgICAgICAgICBmcm9tQXNUeXBlZExpc3QuYnVmZmVyLl9kYXRhLAogICAgICAgICAgICBza2lwQ291bnQgKiBlbGVtZW50U2l6ZUluQnl0ZXMgKyBmcm9tQXNUeXBlZExpc3Qub2Zmc2V0SW5CeXRlcywKICAgICAgICAgICAgQ2xhc3NJRC5nZXRJRCh0aGlzKSwKICAgICAgICAgICAgQ2xhc3NJRC5nZXRJRChmcm9tKSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlciA9PSB0aGlzLmJ1ZmZlcikgewogICAgICAgIC8vIERpZmZlcmVudCBlbGVtZW50IHNpemVzLCBidXQgc2FtZSBidWZmZXIgbWVhbnMgdGhhdCB3ZSBuZWVkCiAgICAgICAgLy8gYW4gaW50ZXJtZWRpYXRlIHN0cnVjdHVyZS4KICAgICAgICAvLyBUT0RPKHNyZGphbik6IE9wdGltaXplIHRvIHNraXAgY29weWluZyBpZiB0aGUgcmFuZ2UgZG9lcyBub3Qgb3ZlcmxhcC4KICAgICAgICBmaW5hbCBmcm9tQXNMaXN0ID0gZnJvbSBhcyBMaXN0PGRvdWJsZT47CiAgICAgICAgZmluYWwgdGVtcEJ1ZmZlciA9IF9jcmVhdGVMaXN0KGNvdW50KTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgIHRlbXBCdWZmZXJbaV0gPSBmcm9tQXNMaXN0W3NraXBDb3VudCArIGldOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgdGhpc1tpXSA9IHRlbXBCdWZmZXJbaSAtIHN0YXJ0XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgTGlzdCBvdGhlckxpc3Q7CiAgICBpbnQgb3RoZXJTdGFydDsKICAgIGlmIChmcm9tIGlzIExpc3Q8ZG91YmxlPikgewogICAgICBvdGhlckxpc3QgPSBmcm9tOwogICAgICBvdGhlclN0YXJ0ID0gc2tpcENvdW50OwogICAgfSBlbHNlIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbS5za2lwKHNraXBDb3VudCkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIG90aGVyU3RhcnQgPSAwOwogICAgfQogICAgaWYgKG90aGVyU3RhcnQgKyBjb3VudCA+IG90aGVyTGlzdC5sZW5ndGgpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CiAgICBMaXN0cy5jb3B5KG90aGVyTGlzdCwgb3RoZXJTdGFydCwgdGhpcywgc3RhcnQsIGNvdW50KTsKICB9CgogIFNwYXduZWRUeXBlIHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIFNwYXduZWRUeXBlIHJlc3VsdCA9IF9jcmVhdGVMaXN0KGxlbmd0aCk7CiAgICByZXN1bHQuc2V0UmFuZ2UoMCwgbGVuZ3RoLCB0aGlzLCBzdGFydCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0Zsb2F0MzJ4NExpc3RNaXhpbiBpbXBsZW1lbnRzIExpc3Q8RmxvYXQzMng0PiB7CiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzOwogIF9CeXRlQnVmZmVyIGdldCBidWZmZXI7CgogIEZsb2F0MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCk7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IG5ldyBXaGVyZVR5cGVJdGVyYWJsZTxUPih0aGlzKTsKCiAgSXRlcmFibGU8RmxvYXQzMng0PiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEZsb2F0MzJ4ND4gb3RoZXIpID0+CiAgICAgIG5ldyBGb2xsb3dlZEJ5SXRlcmFibGU8RmxvYXQzMng0Pi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIExpc3Q8Uj4gY2FzdDxSPigpID0+IExpc3QuY2FzdEZyb208RmxvYXQzMng0LCBSPih0aGlzKTsKICB2b2lkIHNldCBmaXJzdChGbG9hdDMyeDQgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbMF0gPSB2YWx1ZTsKICB9CgogIHZvaWQgc2V0IGxhc3QoRmxvYXQzMng0IHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gPSB2YWx1ZTsKICB9CgogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleFdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCksIFtpbnQgc3RhcnRdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIExpc3Q8RmxvYXQzMng0PiBvcGVyYXRvciArKExpc3Q8RmxvYXQzMng0PiBvdGhlcikgewogICAgaW50IHRvdGFsTGVuZ3RoID0gdGhpcy5sZW5ndGggKyBvdGhlci5sZW5ndGg7CiAgICByZXR1cm4gPEZsb2F0MzJ4ND5bXQogICAgICAuLmxlbmd0aCA9IHRvdGFsTGVuZ3RoCiAgICAgIC4uc2V0UmFuZ2UoMCwgdGhpcy5sZW5ndGgsIHRoaXMpCiAgICAgIC4uc2V0UmFuZ2UodGhpcy5sZW5ndGgsIHRvdGFsTGVuZ3RoLCBvdGhlcik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgcmFuZG9tID8/PSBuZXcgUmFuZG9tKCk7CiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoOwogICAgd2hpbGUgKGkgPiAxKSB7CiAgICAgIGludCBwb3MgPSByYW5kb20ubmV4dEludChpKTsKICAgICAgaSAtPSAxOwogICAgICB2YXIgdG1wID0gdGhpc1tpXTsKICAgICAgdGhpc1tpXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEZsb2F0MzJ4ND4gZnJvbSwKICAgICAgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgLy8gQ2hlY2sgcmFuZ2VzLgogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IGVuZCB8fCBlbmQgPiBsZW5ndGgpIHsKICAgICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsgLy8gQWx3YXlzIHRocm93cy4KICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgIH0KICAgIGlmIChza2lwQ291bnQgPCAwKSB7CiAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2Uoc2tpcENvdW50LCAwLCBudWxsLCAic2tpcENvdW50Iik7CiAgICB9CgogICAgZmluYWwgY291bnQgPSBlbmQgLSBzdGFydDsKICAgIGlmICgoZnJvbS5sZW5ndGggLSBza2lwQ291bnQpIDwgY291bnQpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CgogICAgaWYgKGNvdW50ID09IDApIHJldHVybjsKCiAgICBpZiAoZnJvbSBpcyBfVHlwZWRMaXN0QmFzZSkgewogICAgICAvLyBOb3RlOiBfVHlwZWRMaXN0QmFzZSBpcyBub3QgcmVsYXRlZCB0byBJdGVyYWJsZTxGbG9hdDMyeDQ+IHNvIHRoZXJlIGlzCiAgICAgIC8vIG5vIHByb21vdGlvbiBoZXJlLgogICAgICBmaW5hbCBmcm9tQXNUeXBlZExpc3QgPSBmcm9tIGFzIF9UeXBlZExpc3RCYXNlOwogICAgICBpZiAodGhpcy5lbGVtZW50U2l6ZUluQnl0ZXMgPT0gZnJvbUFzVHlwZWRMaXN0LmVsZW1lbnRTaXplSW5CeXRlcykgewogICAgICAgIGlmICgoY291bnQgPCAxMCkgJiYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgIT0gdGhpcy5idWZmZXIpKSB7CiAgICAgICAgICBMaXN0cy5jb3B5KGZyb20gYXMgTGlzdDxGbG9hdDMyeDQ+LCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1ZmZlci5fZGF0YS5fc2V0UmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0ICogZWxlbWVudFNpemVJbkJ5dGVzICsgdGhpcy5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBjb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcywKICAgICAgICAgICAgZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlci5fZGF0YSwKICAgICAgICAgICAgc2tpcENvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzICsgZnJvbUFzVHlwZWRMaXN0Lm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQodGhpcyksCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQoZnJvbSkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgPT0gdGhpcy5idWZmZXIpIHsKICAgICAgICAvLyBEaWZmZXJlbnQgZWxlbWVudCBzaXplcywgYnV0IHNhbWUgYnVmZmVyIG1lYW5zIHRoYXQgd2UgbmVlZAogICAgICAgIC8vIGFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCiAgICAgICAgLy8gVE9ETyhzcmRqYW4pOiBPcHRpbWl6ZSB0byBza2lwIGNvcHlpbmcgaWYgdGhlIHJhbmdlIGRvZXMgbm90IG92ZXJsYXAuCiAgICAgICAgZmluYWwgZnJvbUFzTGlzdCA9IGZyb20gYXMgTGlzdDxGbG9hdDMyeDQ+OwogICAgICAgIGZpbmFsIHRlbXBCdWZmZXIgPSBfY3JlYXRlTGlzdChjb3VudCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICB0ZW1wQnVmZmVyW2ldID0gZnJvbUFzTGlzdFtza2lwQ291bnQgKyBpXTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgIHRoaXNbaV0gPSB0ZW1wQnVmZmVyW2kgLSBzdGFydF07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIExpc3Qgb3RoZXJMaXN0OwogICAgaW50IG90aGVyU3RhcnQ7CiAgICBpZiAoZnJvbSBpcyBMaXN0PEZsb2F0MzJ4ND4pIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb20uc2tpcChza2lwQ291bnQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBvdGhlclN0YXJ0ID0gMDsKICAgIH0KICAgIGlmIChvdGhlclN0YXJ0ICsgY291bnQgPiBvdGhlckxpc3QubGVuZ3RoKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQogICAgTGlzdHMuY29weShvdGhlckxpc3QsIG90aGVyU3RhcnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgfQoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IHdoZXJlKGJvb2wgZihGbG9hdDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBXaGVyZUl0ZXJhYmxlPEZsb2F0MzJ4ND4odGhpcywgZik7CgogIEl0ZXJhYmxlPEZsb2F0MzJ4ND4gdGFrZShpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDMyeDQ+KHRoaXMsIDAsIG4pOwoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IHRha2VXaGlsZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpKSA9PgogICAgICBuZXcgVGFrZVdoaWxlSXRlcmFibGU8RmxvYXQzMng0Pih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8RmxvYXQzMng0PiBza2lwKGludCBuKSA9PgogICAgICBuZXcgU3ViTGlzdEl0ZXJhYmxlPEZsb2F0MzJ4ND4odGhpcywgbiwgbnVsbCk7CgogIEl0ZXJhYmxlPEZsb2F0MzJ4ND4gc2tpcFdoaWxlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBTa2lwV2hpbGVJdGVyYWJsZTxGbG9hdDMyeDQ+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IGdldCByZXZlcnNlZCA9PiBuZXcgUmV2ZXJzZWRMaXN0SXRlcmFibGU8RmxvYXQzMng0Pih0aGlzKTsKCiAgTWFwPGludCwgRmxvYXQzMng0PiBhc01hcCgpID0+IG5ldyBMaXN0TWFwVmlldzxGbG9hdDMyeDQ+KHRoaXMpOwoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IGdldFJhbmdlKGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDMyeDQ+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSXRlcmF0b3I8RmxvYXQzMng0PiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9UeXBlZExpc3RJdGVyYXRvcjxGbG9hdDMyeDQ+KHRoaXMpOwoKICBMaXN0PEZsb2F0MzJ4ND4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBMaXN0PEZsb2F0MzJ4ND4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgU2V0PEZsb2F0MzJ4ND4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxGbG9hdDMyeDQ+LmZyb20odGhpcyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgRmxvYXQzMng0IHJlZHVjZShGbG9hdDMyeDQgY29tYmluZShGbG9hdDMyeDQgdmFsdWUsIEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHZhciB2YWx1ZSA9IHRoaXNbMF07CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIGluaXRpYWxWYWx1ZSwgRmxvYXQzMng0IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGluaXRpYWxWYWx1ZSA9IGNvbWJpbmUoaW5pdGlhbFZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IE1hcHBlZEl0ZXJhYmxlPEZsb2F0MzJ4NCwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IEV4cGFuZEl0ZXJhYmxlPEZsb2F0MzJ4NCwgVD4odGhpcywgZik7CgogIGJvb2wgZXZlcnkoYm9vbCBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoIWYodGhpc1tpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCBmKEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoZih0aGlzW2ldKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBGbG9hdDMyeDQgZmlyc3RXaGVyZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpLCB7RmxvYXQzMng0IG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDMyeDQgbGFzdFdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCksIHtGbG9hdDMyeDQgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQzMng0IHNpbmdsZVdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCksIHtGbG9hdDMyeDQgb3JFbHNlKCl9KSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQzMng0IGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIHJldHVybiB0aGlzW2luZGV4XTsKICB9CgogIHZvaWQgYWRkKEZsb2F0MzJ4NCB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RmxvYXQzMng0PiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBGbG9hdDMyeDQgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxGbG9hdDMyeDQ+IHZhbHVlcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKEZsb2F0MzJ4NCBhLCBGbG9hdDMyeDQgYildKSB7CiAgICBpZiAoY29tcGFyZSA9PSBudWxsKSB7CiAgICAgIHRocm93ICJTSU1EIGRvbid0IGhhdmUgZGVmYXVsdCBjb21wYXJlLiI7CiAgICB9CiAgICBTb3J0LnNvcnQodGhpcywgY29tcGFyZSk7CiAgfQoKICBpbnQgaW5kZXhPZihGbG9hdDMyeDQgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhPZihGbG9hdDMyeDQgZWxlbWVudCwgW2ludCBzdGFydCA9IG51bGxdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBGbG9hdDMyeDQgcmVtb3ZlTGFzdCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgRmxvYXQzMng0IHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChGbG9hdDMyeDQgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIEZsb2F0MzJ4NCBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDMyeDQgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDMyeDQgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiB0aGlzWzBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICB9CgogIEZsb2F0MzJ4NExpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgRmxvYXQzMng0TGlzdCByZXN1bHQgPSBfY3JlYXRlTGlzdChsZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGhpcywgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RmxvYXQzMng0PiBpdGVyYWJsZSkgewogICAgZmluYWwgZW5kID0gaXRlcmFibGUubGVuZ3RoICsgaW5kZXg7CiAgICBzZXRSYW5nZShpbmRleCwgZW5kLCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtGbG9hdDMyeDQgZmlsbFZhbHVlXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgdGhpc1tpXSA9IGZpbGxWYWx1ZTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9JbnQzMng0TGlzdE1peGluIGltcGxlbWVudHMgTGlzdDxJbnQzMng0PiB7CiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzOwogIF9CeXRlQnVmZmVyIGdldCBidWZmZXI7CgogIEludDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBuZXcgV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIEl0ZXJhYmxlPEludDMyeDQ+IGZvbGxvd2VkQnkoSXRlcmFibGU8SW50MzJ4ND4gb3RoZXIpID0+CiAgICAgIG5ldyBGb2xsb3dlZEJ5SXRlcmFibGU8SW50MzJ4ND4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPEludDMyeDQsIFI+KHRoaXMpOwogIHZvaWQgc2V0IGZpcnN0KEludDMyeDQgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbMF0gPSB2YWx1ZTsKICB9CgogIHZvaWQgc2V0IGxhc3QoSW50MzJ4NCB2YWx1ZSkgewogICAgaWYgKHRoaXMubGVuZ3RoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1t0aGlzLmxlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCksIFtpbnQgc3RhcnRdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIExpc3Q8SW50MzJ4ND4gb3BlcmF0b3IgKyhMaXN0PEludDMyeDQ+IG90aGVyKSB7CiAgICBpbnQgdG90YWxMZW5ndGggPSB0aGlzLmxlbmd0aCArIG90aGVyLmxlbmd0aDsKICAgIHJldHVybiA8SW50MzJ4ND5bXQogICAgICAuLmxlbmd0aCA9IHRvdGFsTGVuZ3RoCiAgICAgIC4uc2V0UmFuZ2UoMCwgdGhpcy5sZW5ndGgsIHRoaXMpCiAgICAgIC4uc2V0UmFuZ2UodGhpcy5sZW5ndGgsIHRvdGFsTGVuZ3RoLCBvdGhlcik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgcmFuZG9tID8/PSBuZXcgUmFuZG9tKCk7CiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoOwogICAgd2hpbGUgKGkgPiAxKSB7CiAgICAgIGludCBwb3MgPSByYW5kb20ubmV4dEludChpKTsKICAgICAgaSAtPSAxOwogICAgICB2YXIgdG1wID0gdGhpc1tpXTsKICAgICAgdGhpc1tpXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEludDMyeDQ+IGZyb20sCiAgICAgIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIC8vIENoZWNrIHJhbmdlcy4KICAgIGlmICgwID4gc3RhcnQgfHwgc3RhcnQgPiBlbmQgfHwgZW5kID4gbGVuZ3RoKSB7CiAgICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7IC8vIEFsd2F5cyB0aHJvd3MuCiAgICAgIGFzc2VydChmYWxzZSk7CiAgICB9CiAgICBpZiAoc2tpcENvdW50IDwgMCkgewogICAgICB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKHNraXBDb3VudCwgMCwgbnVsbCwgInNraXBDb3VudCIpOwogICAgfQoKICAgIGZpbmFsIGNvdW50ID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAoKGZyb20ubGVuZ3RoIC0gc2tpcENvdW50KSA8IGNvdW50KSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQoKICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm47CgogICAgaWYgKGZyb20gaXMgX1R5cGVkTGlzdEJhc2UpIHsKICAgICAgLy8gTm90ZTogX1R5cGVkTGlzdEJhc2UgaXMgbm90IHJlbGF0ZWQgdG8gSXRlcmFibGU8SW50MzJ4ND4gc28gdGhlcmUgaXMKICAgICAgLy8gbm8gcHJvbW90aW9uIGhlcmUuCiAgICAgIGZpbmFsIGZyb21Bc1R5cGVkTGlzdCA9IGZyb20gYXMgX1R5cGVkTGlzdEJhc2U7CiAgICAgIGlmICh0aGlzLmVsZW1lbnRTaXplSW5CeXRlcyA9PSBmcm9tQXNUeXBlZExpc3QuZWxlbWVudFNpemVJbkJ5dGVzKSB7CiAgICAgICAgaWYgKChjb3VudCA8IDEwKSAmJiAoZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlciAhPSB0aGlzLmJ1ZmZlcikpIHsKICAgICAgICAgIExpc3RzLmNvcHkoZnJvbSBhcyBMaXN0PEludDMyeDQ+LCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1ZmZlci5fZGF0YS5fc2V0UmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0ICogZWxlbWVudFNpemVJbkJ5dGVzICsgdGhpcy5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBjb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcywKICAgICAgICAgICAgZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlci5fZGF0YSwKICAgICAgICAgICAgc2tpcENvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzICsgZnJvbUFzVHlwZWRMaXN0Lm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQodGhpcyksCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQoZnJvbSkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgPT0gdGhpcy5idWZmZXIpIHsKICAgICAgICAvLyBEaWZmZXJlbnQgZWxlbWVudCBzaXplcywgYnV0IHNhbWUgYnVmZmVyIG1lYW5zIHRoYXQgd2UgbmVlZAogICAgICAgIC8vIGFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCiAgICAgICAgLy8gVE9ETyhzcmRqYW4pOiBPcHRpbWl6ZSB0byBza2lwIGNvcHlpbmcgaWYgdGhlIHJhbmdlIGRvZXMgbm90IG92ZXJsYXAuCiAgICAgICAgZmluYWwgZnJvbUFzTGlzdCA9IGZyb20gYXMgTGlzdDxJbnQzMng0PjsKICAgICAgICBmaW5hbCB0ZW1wQnVmZmVyID0gX2NyZWF0ZUxpc3QoY291bnQpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgdGVtcEJ1ZmZlcltpXSA9IGZyb21Bc0xpc3Rbc2tpcENvdW50ICsgaV07CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgICB0aGlzW2ldID0gdGVtcEJ1ZmZlcltpIC0gc3RhcnRdOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBMaXN0IG90aGVyTGlzdDsKICAgIGludCBvdGhlclN0YXJ0OwogICAgaWYgKGZyb20gaXMgTGlzdDxJbnQzMng0PikgewogICAgICBvdGhlckxpc3QgPSBmcm9tOwogICAgICBvdGhlclN0YXJ0ID0gc2tpcENvdW50OwogICAgfSBlbHNlIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbS5za2lwKHNraXBDb3VudCkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIG90aGVyU3RhcnQgPSAwOwogICAgfQogICAgaWYgKG90aGVyU3RhcnQgKyBjb3VudCA+IG90aGVyTGlzdC5sZW5ndGgpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CiAgICBMaXN0cy5jb3B5KG90aGVyTGlzdCwgb3RoZXJTdGFydCwgdGhpcywgc3RhcnQsIGNvdW50KTsKICB9CgogIEl0ZXJhYmxlPEludDMyeDQ+IHdoZXJlKGJvb2wgZihJbnQzMng0IGVsZW1lbnQpKSA9PgogICAgICBuZXcgV2hlcmVJdGVyYWJsZTxJbnQzMng0Pih0aGlzLCBmKTsKCiAgSXRlcmFibGU8SW50MzJ4ND4gdGFrZShpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxJbnQzMng0Pih0aGlzLCAwLCBuKTsKCiAgSXRlcmFibGU8SW50MzJ4ND4gdGFrZVdoaWxlKGJvb2wgdGVzdChJbnQzMng0IGVsZW1lbnQpKSA9PgogICAgICBuZXcgVGFrZVdoaWxlSXRlcmFibGU8SW50MzJ4ND4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPEludDMyeDQ+IHNraXAoaW50IG4pID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8SW50MzJ4ND4odGhpcywgbiwgbnVsbCk7CgogIEl0ZXJhYmxlPEludDMyeDQ+IHNraXBXaGlsZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IFNraXBXaGlsZUl0ZXJhYmxlPEludDMyeDQ+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxJbnQzMng0PiBnZXQgcmV2ZXJzZWQgPT4gbmV3IFJldmVyc2VkTGlzdEl0ZXJhYmxlPEludDMyeDQ+KHRoaXMpOwoKICBNYXA8aW50LCBJbnQzMng0PiBhc01hcCgpID0+IG5ldyBMaXN0TWFwVmlldzxJbnQzMng0Pih0aGlzKTsKCiAgSXRlcmFibGU8SW50MzJ4ND4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIHJldHVybiBuZXcgU3ViTGlzdEl0ZXJhYmxlPEludDMyeDQ+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSXRlcmF0b3I8SW50MzJ4ND4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfVHlwZWRMaXN0SXRlcmF0b3I8SW50MzJ4ND4odGhpcyk7CgogIExpc3Q8SW50MzJ4ND4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBMaXN0PEludDMyeDQ+LmZyb20odGhpcywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKICB9CgogIFNldDxJbnQzMng0PiB0b1NldCgpIHsKICAgIHJldHVybiBuZXcgU2V0PEludDMyeDQ+LmZyb20odGhpcyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEludDMyeDQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZih0aGlzW2ldKTsKICAgIH0KICB9CgogIEludDMyeDQgcmVkdWNlKEludDMyeDQgY29tYmluZShJbnQzMng0IHZhbHVlLCBJbnQzMng0IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdmFyIHZhbHVlID0gdGhpc1swXTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgaW5pdGlhbFZhbHVlLCBJbnQzMng0IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGluaXRpYWxWYWx1ZSA9IGNvbWJpbmUoaW5pdGlhbFZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEludDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBNYXBwZWRJdGVyYWJsZTxJbnQzMng0LCBUPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoSW50MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IEV4cGFuZEl0ZXJhYmxlPEludDMyeDQsIFQ+KHRoaXMsIGYpOwoKICBib29sIGV2ZXJ5KGJvb2wgZihJbnQzMng0IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICghZih0aGlzW2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIGFueShib29sIGYoSW50MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoZih0aGlzW2ldKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBJbnQzMng0IGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCksIHtJbnQzMng0IG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBJbnQzMng0IGxhc3RXaGVyZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSwge0ludDMyeDQgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgSW50MzJ4NCBzaW5nbGVXaGVyZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSwge0ludDMyeDQgb3JFbHNlKCl9KSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgSW50MzJ4NCBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gdGhpc1tpbmRleF07CiAgfQoKICB2b2lkIGFkZChJbnQzMng0IHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxJbnQzMng0PiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBJbnQzMng0IHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8SW50MzJ4ND4gdmFsdWVzKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgc29ydChbaW50IGNvbXBhcmUoSW50MzJ4NCBhLCBJbnQzMng0IGIpXSkgewogICAgaWYgKGNvbXBhcmUgPT0gbnVsbCkgewogICAgICB0aHJvdyAiU0lNRCBkb24ndCBoYXZlIGRlZmF1bHQgY29tcGFyZS4iOwogICAgfQogICAgU29ydC5zb3J0KHRoaXMsIGNvbXBhcmUpOwogIH0KCiAgaW50IGluZGV4T2YoSW50MzJ4NCBlbGVtZW50LCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICByZXR1cm4gLTE7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICBzdGFydCA9IDA7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleE9mKEludDMyeDQgZWxlbWVudCwgW2ludCBzdGFydCA9IG51bGxdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBJbnQzMng0IHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIEludDMyeDQgcmVtb3ZlQXQoaW50IGluZGV4KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBJbnQzMng0IGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbMF07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEludDMyeDQgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBJbnQzMng0IGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICBJbnQzMng0TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBJbnQzMng0TGlzdCByZXN1bHQgPSBfY3JlYXRlTGlzdChsZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGhpcywgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8SW50MzJ4ND4gaXRlcmFibGUpIHsKICAgIGZpbmFsIGVuZCA9IGl0ZXJhYmxlLmxlbmd0aCArIGluZGV4OwogICAgc2V0UmFuZ2UoaW5kZXgsIGVuZCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbSW50MzJ4NCBmaWxsVmFsdWVdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICB0aGlzW2ldID0gZmlsbFZhbHVlOwogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0Zsb2F0NjR4Mkxpc3RNaXhpbiBpbXBsZW1lbnRzIExpc3Q8RmxvYXQ2NHgyPiB7CiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzOwogIF9CeXRlQnVmZmVyIGdldCBidWZmZXI7CgogIEZsb2F0NjR4Mkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCk7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IG5ldyBXaGVyZVR5cGVJdGVyYWJsZTxUPih0aGlzKTsKCiAgSXRlcmFibGU8RmxvYXQ2NHgyPiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEZsb2F0NjR4Mj4gb3RoZXIpID0+CiAgICAgIG5ldyBGb2xsb3dlZEJ5SXRlcmFibGU8RmxvYXQ2NHgyPi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIExpc3Q8Uj4gY2FzdDxSPigpID0+IExpc3QuY2FzdEZyb208RmxvYXQ2NHgyLCBSPih0aGlzKTsKICB2b2lkIHNldCBmaXJzdChGbG9hdDY0eDIgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbMF0gPSB2YWx1ZTsKICB9CgogIHZvaWQgc2V0IGxhc3QoRmxvYXQ2NHgyIHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gPSB2YWx1ZTsKICB9CgogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleFdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCksIFtpbnQgc3RhcnRdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIExpc3Q8RmxvYXQ2NHgyPiBvcGVyYXRvciArKExpc3Q8RmxvYXQ2NHgyPiBvdGhlcikgewogICAgaW50IHRvdGFsTGVuZ3RoID0gdGhpcy5sZW5ndGggKyBvdGhlci5sZW5ndGg7CiAgICByZXR1cm4gPEZsb2F0NjR4Mj5bXQogICAgICAuLmxlbmd0aCA9IHRvdGFsTGVuZ3RoCiAgICAgIC4uc2V0UmFuZ2UoMCwgdGhpcy5sZW5ndGgsIHRoaXMpCiAgICAgIC4uc2V0UmFuZ2UodGhpcy5sZW5ndGgsIHRvdGFsTGVuZ3RoLCBvdGhlcik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgcmFuZG9tID8/PSBuZXcgUmFuZG9tKCk7CiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoOwogICAgd2hpbGUgKGkgPiAxKSB7CiAgICAgIGludCBwb3MgPSByYW5kb20ubmV4dEludChpKTsKICAgICAgaSAtPSAxOwogICAgICB2YXIgdG1wID0gdGhpc1tpXTsKICAgICAgdGhpc1tpXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEZsb2F0NjR4Mj4gZnJvbSwKICAgICAgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgLy8gQ2hlY2sgcmFuZ2VzLgogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IGVuZCB8fCBlbmQgPiBsZW5ndGgpIHsKICAgICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsgLy8gQWx3YXlzIHRocm93cy4KICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgIH0KICAgIGlmIChza2lwQ291bnQgPCAwKSB7CiAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2Uoc2tpcENvdW50LCAwLCBudWxsLCAic2tpcENvdW50Iik7CiAgICB9CgogICAgZmluYWwgY291bnQgPSBlbmQgLSBzdGFydDsKICAgIGlmICgoZnJvbS5sZW5ndGggLSBza2lwQ291bnQpIDwgY291bnQpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CgogICAgaWYgKGNvdW50ID09IDApIHJldHVybjsKCiAgICBpZiAoZnJvbSBpcyBfVHlwZWRMaXN0QmFzZSkgewogICAgICAvLyBOb3RlOiBfVHlwZWRMaXN0QmFzZSBpcyBub3QgcmVsYXRlZCB0byBJdGVyYWJsZTxGbG9hdDY0eDI+IHNvIHRoZXJlIGlzCiAgICAgIC8vIG5vIHByb21vdGlvbiBoZXJlLgogICAgICBmaW5hbCBmcm9tQXNUeXBlZExpc3QgPSBmcm9tIGFzIF9UeXBlZExpc3RCYXNlOwogICAgICBpZiAodGhpcy5lbGVtZW50U2l6ZUluQnl0ZXMgPT0gZnJvbUFzVHlwZWRMaXN0LmVsZW1lbnRTaXplSW5CeXRlcykgewogICAgICAgIGlmICgoY291bnQgPCAxMCkgJiYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgIT0gdGhpcy5idWZmZXIpKSB7CiAgICAgICAgICBMaXN0cy5jb3B5KGZyb20gYXMgTGlzdDxGbG9hdDY0eDI+LCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1ZmZlci5fZGF0YS5fc2V0UmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0ICogZWxlbWVudFNpemVJbkJ5dGVzICsgdGhpcy5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBjb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcywKICAgICAgICAgICAgZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlci5fZGF0YSwKICAgICAgICAgICAgc2tpcENvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzICsgZnJvbUFzVHlwZWRMaXN0Lm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQodGhpcyksCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQoZnJvbSkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgPT0gdGhpcy5idWZmZXIpIHsKICAgICAgICAvLyBEaWZmZXJlbnQgZWxlbWVudCBzaXplcywgYnV0IHNhbWUgYnVmZmVyIG1lYW5zIHRoYXQgd2UgbmVlZAogICAgICAgIC8vIGFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCiAgICAgICAgLy8gVE9ETyhzcmRqYW4pOiBPcHRpbWl6ZSB0byBza2lwIGNvcHlpbmcgaWYgdGhlIHJhbmdlIGRvZXMgbm90IG92ZXJsYXAuCiAgICAgICAgZmluYWwgZnJvbUFzTGlzdCA9IGZyb20gYXMgTGlzdDxGbG9hdDY0eDI+OwogICAgICAgIGZpbmFsIHRlbXBCdWZmZXIgPSBfY3JlYXRlTGlzdChjb3VudCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICB0ZW1wQnVmZmVyW2ldID0gZnJvbUFzTGlzdFtza2lwQ291bnQgKyBpXTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgIHRoaXNbaV0gPSB0ZW1wQnVmZmVyW2kgLSBzdGFydF07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIExpc3Qgb3RoZXJMaXN0OwogICAgaW50IG90aGVyU3RhcnQ7CiAgICBpZiAoZnJvbSBpcyBMaXN0PEZsb2F0NjR4Mj4pIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb20uc2tpcChza2lwQ291bnQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBvdGhlclN0YXJ0ID0gMDsKICAgIH0KICAgIGlmIChvdGhlclN0YXJ0ICsgY291bnQgPiBvdGhlckxpc3QubGVuZ3RoKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQogICAgTGlzdHMuY29weShvdGhlckxpc3QsIG90aGVyU3RhcnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgfQoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IHdoZXJlKGJvb2wgZihGbG9hdDY0eDIgZWxlbWVudCkpID0+CiAgICAgIG5ldyBXaGVyZUl0ZXJhYmxlPEZsb2F0NjR4Mj4odGhpcywgZik7CgogIEl0ZXJhYmxlPEZsb2F0NjR4Mj4gdGFrZShpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDY0eDI+KHRoaXMsIDAsIG4pOwoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IHRha2VXaGlsZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpKSA9PgogICAgICBuZXcgVGFrZVdoaWxlSXRlcmFibGU8RmxvYXQ2NHgyPih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8RmxvYXQ2NHgyPiBza2lwKGludCBuKSA9PgogICAgICBuZXcgU3ViTGlzdEl0ZXJhYmxlPEZsb2F0NjR4Mj4odGhpcywgbiwgbnVsbCk7CgogIEl0ZXJhYmxlPEZsb2F0NjR4Mj4gc2tpcFdoaWxlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCkpID0+CiAgICAgIG5ldyBTa2lwV2hpbGVJdGVyYWJsZTxGbG9hdDY0eDI+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IGdldCByZXZlcnNlZCA9PiBuZXcgUmV2ZXJzZWRMaXN0SXRlcmFibGU8RmxvYXQ2NHgyPih0aGlzKTsKCiAgTWFwPGludCwgRmxvYXQ2NHgyPiBhc01hcCgpID0+IG5ldyBMaXN0TWFwVmlldzxGbG9hdDY0eDI+KHRoaXMpOwoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IGdldFJhbmdlKGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDY0eDI+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSXRlcmF0b3I8RmxvYXQ2NHgyPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9UeXBlZExpc3RJdGVyYXRvcjxGbG9hdDY0eDI+KHRoaXMpOwoKICBMaXN0PEZsb2F0NjR4Mj4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBMaXN0PEZsb2F0NjR4Mj4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgU2V0PEZsb2F0NjR4Mj4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxGbG9hdDY0eDI+LmZyb20odGhpcyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgRmxvYXQ2NHgyIHJlZHVjZShGbG9hdDY0eDIgY29tYmluZShGbG9hdDY0eDIgdmFsdWUsIEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHZhciB2YWx1ZSA9IHRoaXNbMF07CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIGluaXRpYWxWYWx1ZSwgRmxvYXQ2NHgyIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGluaXRpYWxWYWx1ZSA9IGNvbWJpbmUoaW5pdGlhbFZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEZsb2F0NjR4MiBlbGVtZW50KSkgPT4KICAgICAgbmV3IE1hcHBlZEl0ZXJhYmxlPEZsb2F0NjR4MiwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEZsb2F0NjR4MiBlbGVtZW50KSkgPT4KICAgICAgbmV3IEV4cGFuZEl0ZXJhYmxlPEZsb2F0NjR4MiwgVD4odGhpcywgZik7CgogIGJvb2wgZXZlcnkoYm9vbCBmKEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoIWYodGhpc1tpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCBmKEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoZih0aGlzW2ldKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBGbG9hdDY0eDIgZmlyc3RXaGVyZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpLCB7RmxvYXQ2NHgyIG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDY0eDIgbGFzdFdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCksIHtGbG9hdDY0eDIgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQ2NHgyIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCksIHtGbG9hdDY0eDIgb3JFbHNlKCl9KSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQ2NHgyIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIHJldHVybiB0aGlzW2luZGV4XTsKICB9CgogIHZvaWQgYWRkKEZsb2F0NjR4MiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RmxvYXQ2NHgyPiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBGbG9hdDY0eDIgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxGbG9hdDY0eDI+IHZhbHVlcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKEZsb2F0NjR4MiBhLCBGbG9hdDY0eDIgYildKSB7CiAgICBpZiAoY29tcGFyZSA9PSBudWxsKSB7CiAgICAgIHRocm93ICJTSU1EIGRvbid0IGhhdmUgZGVmYXVsdCBjb21wYXJlLiI7CiAgICB9CiAgICBTb3J0LnNvcnQodGhpcywgY29tcGFyZSk7CiAgfQoKICBpbnQgaW5kZXhPZihGbG9hdDY0eDIgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhPZihGbG9hdDY0eDIgZWxlbWVudCwgW2ludCBzdGFydCA9IG51bGxdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBGbG9hdDY0eDIgcmVtb3ZlTGFzdCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgRmxvYXQ2NHgyIHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChGbG9hdDY0eDIgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIEZsb2F0NjR4MiBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDY0eDIgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBGbG9hdDY0eDIgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiB0aGlzWzBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICB9CgogIEZsb2F0NjR4Mkxpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgRmxvYXQ2NHgyTGlzdCByZXN1bHQgPSBfY3JlYXRlTGlzdChsZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGhpcywgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RmxvYXQ2NHgyPiBpdGVyYWJsZSkgewogICAgZmluYWwgZW5kID0gaXRlcmFibGUubGVuZ3RoICsgaW5kZXg7CiAgICBzZXRSYW5nZShpbmRleCwgZW5kLCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtGbG9hdDY0eDIgZmlsbFZhbHVlXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgdGhpc1tpXSA9IGZpbGxWYWx1ZTsKICAgIH0KICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0J5dGVCdWZmZXIgaW1wbGVtZW50cyBCeXRlQnVmZmVyIHsKICBmaW5hbCBfVHlwZWRMaXN0IF9kYXRhOwoKICBfQnl0ZUJ1ZmZlcih0aGlzLl9kYXRhKTsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgX0J5dGVCdWZmZXIuX05ldyhkYXRhKSA9PiBuZXcgX0J5dGVCdWZmZXIoZGF0YSk7CgogIC8vIEZvcndhcmQgY2FsbHMgdG8gX2RhdGEuCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzID0+IF9kYXRhLmxlbmd0aEluQnl0ZXM7CiAgaW50IGdldCBoYXNoQ29kZSA9PiBfZGF0YS5oYXNoQ29kZTsKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgKG90aGVyIGlzIF9CeXRlQnVmZmVyKSAmJiBpZGVudGljYWwoX2RhdGEsIG90aGVyLl9kYXRhKTsKCiAgQnl0ZURhdGEgYXNCeXRlRGF0YShbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PSB0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzOwogICAgX3JhbmdlQ2hlY2sodGhpcy5fZGF0YS5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogICAgcmV0dXJuIG5ldyBfQnl0ZURhdGFWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDhMaXN0IGFzSW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0gKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIEludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKAogICAgICAgIHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoICogSW50OExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDhBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgVWludDhMaXN0IGFzVWludDhMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjaygKICAgICAgICB0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCAqIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDhBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgVWludDhDbGFtcGVkTGlzdCBhc1VpbnQ4Q2xhbXBlZExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0gKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vCiAgICAgICAgVWludDhDbGFtcGVkTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjayh0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsCiAgICAgICAgbGVuZ3RoICogVWludDhDbGFtcGVkTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDhDbGFtcGVkQXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDE2TGlzdCBhc0ludDE2TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhvZmZzZXRJbkJ5dGVzLCBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDE2QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIFVpbnQxNkxpc3QgYXNVaW50MTZMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDE2QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDMyTGlzdCBhc0ludDMyTGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhvZmZzZXRJbkJ5dGVzLCBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDMyQXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIFVpbnQzMkxpc3QgYXNVaW50MzJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBVaW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDMyQXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDY0TGlzdCBhc0ludDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhvZmZzZXRJbkJ5dGVzLCBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDY0QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIFVpbnQ2NExpc3QgYXNVaW50NjRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfVWludDY0QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEZsb2F0MzJMaXN0IGFzRmxvYXQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2sodGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLAogICAgICAgIGxlbmd0aCAqIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0Zsb2F0MzJBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgRmxvYXQ2NExpc3QgYXNGbG9hdDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjayh0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsCiAgICAgICAgbGVuZ3RoICogRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhvZmZzZXRJbkJ5dGVzLCBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfRmxvYXQ2NEFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBGbG9hdDMyeDRMaXN0IGFzRmxvYXQzMng0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywKICAgICAgICBsZW5ndGggKiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgcmV0dXJuIG5ldyBfRmxvYXQzMng0QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEludDMyeDRMaXN0IGFzSW50MzJ4NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2sodGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLAogICAgICAgIGxlbmd0aCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0ludDMyeDRBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgRmxvYXQ2NHgyTGlzdCBhc0Zsb2F0NjR4Mkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gRmxvYXQ2NHgyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjayh0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsCiAgICAgICAgbGVuZ3RoICogRmxvYXQ2NHgyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgX29mZnNldEFsaWdubWVudENoZWNrKG9mZnNldEluQnl0ZXMsIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0Zsb2F0NjR4MkFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfVHlwZWRMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdEJhc2UgewogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzOwoKICAvLyBEZWZhdWx0IG1ldGhvZCBpbXBsZW1lbnRpbmcgcGFydHMgb2YgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzIHsKICAgIHJldHVybiAwOwogIH0KCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzIHsKICAgIHJldHVybiBsZW5ndGggKiBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgfQoKICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyID0+IG5ldyBfQnl0ZUJ1ZmZlcih0aGlzKTsKCiAgLy8gTWV0aG9kcyBpbXBsZW1lbnRpbmcgdGhlIGNvbGxlY3Rpb24gaW50ZXJmYWNlLgoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBsZW5ndGggbmF0aXZlICJUeXBlZERhdGFfbGVuZ3RoIjsKCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IF9nZXRJbnQ4KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRJbnQ4IjsKICB2b2lkIF9zZXRJbnQ4KGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgdmFsdWUpIG5hdGl2ZSAiVHlwZWREYXRhX1NldEludDgiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IF9nZXRVaW50OChpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0VWludDgiOwogIHZvaWQgX3NldFVpbnQ4KGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgdmFsdWUpIG5hdGl2ZSAiVHlwZWREYXRhX1NldFVpbnQ4IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBfZ2V0SW50MTYoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldEludDE2IjsKICB2b2lkIF9zZXRJbnQxNihpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRJbnQxNiI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgX2dldFVpbnQxNihpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0VWludDE2IjsKICB2b2lkIF9zZXRVaW50MTYoaW50IG9mZnNldEluQnl0ZXMsIGludCB2YWx1ZSkgbmF0aXZlICJUeXBlZERhdGFfU2V0VWludDE2IjsKCiAgaW50IF9nZXRJbnQzMihpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0SW50MzIiOwogIHZvaWQgX3NldEludDMyKGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgdmFsdWUpIG5hdGl2ZSAiVHlwZWREYXRhX1NldEludDMyIjsKCiAgaW50IF9nZXRVaW50MzIoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldFVpbnQzMiI7CiAgdm9pZCBfc2V0VWludDMyKGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgdmFsdWUpIG5hdGl2ZSAiVHlwZWREYXRhX1NldFVpbnQzMiI7CgogIGludCBfZ2V0SW50NjQoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldEludDY0IjsKICB2b2lkIF9zZXRJbnQ2NChpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRJbnQ2NCI7CgogIGludCBfZ2V0VWludDY0KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRVaW50NjQiOwogIHZvaWQgX3NldFVpbnQ2NChpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRVaW50NjQiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIF9nZXRGbG9hdDMyKGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRGbG9hdDMyIjsKICB2b2lkIF9zZXRGbG9hdDMyKGludCBvZmZzZXRJbkJ5dGVzLCBkb3VibGUgdmFsdWUpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhX1NldEZsb2F0MzIiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIF9nZXRGbG9hdDY0KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRGbG9hdDY0IjsKICB2b2lkIF9zZXRGbG9hdDY0KGludCBvZmZzZXRJbkJ5dGVzLCBkb3VibGUgdmFsdWUpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhX1NldEZsb2F0NjQiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IF9nZXRGbG9hdDMyeDQoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldEZsb2F0MzJ4NCI7CiAgdm9pZCBfc2V0RmxvYXQzMng0KGludCBvZmZzZXRJbkJ5dGVzLCBGbG9hdDMyeDQgdmFsdWUpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhX1NldEZsb2F0MzJ4NCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBfZ2V0SW50MzJ4NChpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0SW50MzJ4NCI7CiAgdm9pZCBfc2V0SW50MzJ4NChpbnQgb2Zmc2V0SW5CeXRlcywgSW50MzJ4NCB2YWx1ZSkKICAgICAgbmF0aXZlICJUeXBlZERhdGFfU2V0SW50MzJ4NCI7CgogIEZsb2F0NjR4MiBfZ2V0RmxvYXQ2NHgyKGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRGbG9hdDY0eDIiOwogIHZvaWQgX3NldEZsb2F0NjR4MihpbnQgb2Zmc2V0SW5CeXRlcywgRmxvYXQ2NHgyIHZhbHVlKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YV9TZXRGbG9hdDY0eDIiOwoKICAvKioKICAgKiBTdG9yZXMgdGhlIFtDb2RlVW5pdHNdIGFzIFVURi0xNiB1bml0cyBpbnRvIHRoaXMgVHlwZWREYXRhIGF0CiAgICogcG9zaXRpb25zIFtzdGFydF0uLltlbmRdICh1aW50MTYgaW5kaWNlcykuCiAgICovCiAgdm9pZCBfc2V0Q29kZVVuaXRzKAogICAgICBDb2RlVW5pdHMgdW5pdHMsIGludCBieXRlU3RhcnQsIGludCBsZW5ndGgsIGludCBza2lwQ291bnQpIHsKICAgIGFzc2VydChieXRlU3RhcnQgKyBsZW5ndGggKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCA8PSBsZW5ndGhJbkJ5dGVzKTsKICAgIFN0cmluZyBzdHJpbmcgPSBDb2RlVW5pdHMuc3RyaW5nT2YodW5pdHMpOwogICAgaW50IHNsaWNlRW5kID0gc2tpcENvdW50ICsgbGVuZ3RoOwogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2UoCiAgICAgICAgc2tpcENvdW50LCBzbGljZUVuZCwgc3RyaW5nLmxlbmd0aCwgInNraXBDb3VudCIsICJza2lwQ291bnQgKyBsZW5ndGgiKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgX3NldFVpbnQxNihieXRlU3RhcnQgKyBpICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQsCiAgICAgICAgICBzdHJpbmcuY29kZVVuaXRBdChza2lwQ291bnQgKyBpKSk7CiAgICB9CiAgfQp9CgpAcGF0Y2gKY2xhc3MgSW50OExpc3QgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDhMaXN0KQogIGZhY3RvcnkgSW50OExpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfSW50OEFycmF5X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgSW50OExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludDhMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDhMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50OExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDhMaXN0IHsKICBmYWN0b3J5IF9JbnQ4TGlzdC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbnQ4KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW50OChpbmRleCwgX3RvSW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50OExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQ4TGlzdChsZW5ndGgpOwogIH0KfQoKQHBhdGNoCmNsYXNzIFVpbnQ4TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDhMaXN0KQogIGZhY3RvcnkgVWludDhMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX1VpbnQ4QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBVaW50OExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9VaW50OExpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50OExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ4TGlzdCB7CiAgZmFjdG9yeSBfVWludDhMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2RzIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRVaW50OChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldFVpbnQ4KGluZGV4LCBfdG9VaW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kcyBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50OExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50OExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBVaW50OENsYW1wZWRMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50OENsYW1wZWRMaXN0KQogIGZhY3RvcnkgVWludDhDbGFtcGVkTGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9VaW50OENsYW1wZWRBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IFVpbnQ4Q2xhbXBlZExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZExpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDhDbGFtcGVkTGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ4Q2xhbXBlZExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ4Q2xhbXBlZExpc3QgewogIGZhY3RvcnkgX1VpbnQ4Q2xhbXBlZExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZHMgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldFVpbnQ4KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0VWludDgoaW5kZXgsIF90b0NsYW1wZWRVaW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kcyBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50OENsYW1wZWRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDhDbGFtcGVkTGlzdChsZW5ndGgpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEludDE2TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MTZMaXN0KQogIGZhY3RvcnkgSW50MTZMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0ludDE2QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBJbnQxNkxpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludDE2TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQxNkxpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDE2TGlzdCB7CiAgZmFjdG9yeSBfSW50MTZMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQxNihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQxNihpbmRleCwgX3RvSW50MTYodmFsdWUpKTsKICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZSBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgaWYgKGl0ZXJhYmxlIGlzIENvZGVVbml0cykgewogICAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgICAgaW50IGJ5dGVTdGFydCA9IHRoaXMub2Zmc2V0SW5CeXRlcyArIHN0YXJ0ICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgICAgX3NldENvZGVVbml0cyhpdGVyYWJsZSwgYnl0ZVN0YXJ0LCBsZW5ndGgsIHNraXBDb3VudCk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci5zZXRSYW5nZShzdGFydCwgZW5kLCBpdGVyYWJsZSwgc2tpcENvdW50KTsKICAgIH0KICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQxNkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQxNkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZEludDE2KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRJbnQxNihpbmRleCAqIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEludDE2KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBfc2V0SW50MTYoaW5kZXggKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgVWludDE2TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDE2TGlzdCkKICBmYWN0b3J5IFVpbnQxNkxpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfVWludDE2QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBVaW50MTZMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBVaW50MTZMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQxNkxpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50MTZMaXN0PgogICAgaW1wbGVtZW50cyBVaW50MTZMaXN0IHsKICBmYWN0b3J5IF9VaW50MTZMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkVWludDE2KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZFVpbnQxNihpbmRleCwgX3RvVWludDE2KHZhbHVlKSk7CiAgfQoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGUgaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIGlmIChpdGVyYWJsZSBpcyBDb2RlVW5pdHMpIHsKICAgICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICAgIGludCBieXRlU3RhcnQgPSB0aGlzLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgICBfc2V0Q29kZVVuaXRzKGl0ZXJhYmxlLCBieXRlU3RhcnQsIGxlbmd0aCwgc2tpcENvdW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnNldFJhbmdlKHN0YXJ0LCBlbmQsIGl0ZXJhYmxlLCBza2lwQ291bnQpOwogICAgfQogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDE2TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQxNkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQxNihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDE2KGluZGV4ICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQxNihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQxNihpbmRleCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgSW50MzJMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMkxpc3QpCiAgZmFjdG9yeSBJbnQzMkxpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfSW50MzJBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEludDMyTGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgSW50MzJMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDMyTGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPEludDMyTGlzdD4KICAgIGltcGxlbWVudHMgSW50MzJMaXN0IHsKICBmYWN0b3J5IF9JbnQzMkxpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEludDMyKGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEludDMyKGluZGV4LCBfdG9JbnQzMih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDMyTGlzdChsZW5ndGgpOwogIH0KCiAgaW50IF9nZXRJbmRleGVkSW50MzIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEludDMyKGluZGV4ICogSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50MzIoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRJbnQzMihpbmRleCAqIEludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBVaW50MzJMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50MzJMaXN0KQogIGZhY3RvcnkgVWludDMyTGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9VaW50MzJBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IFVpbnQzMkxpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFVpbnQzMkxpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDMyTGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQzMkxpc3QgewogIGZhY3RvcnkgX1VpbnQzMkxpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQzMihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50MzIoaW5kZXgsIF90b1VpbnQzMih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQzMkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQzMihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDMyKGluZGV4ICogVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQzMihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQzMihpbmRleCAqIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgSW50NjRMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQ2NExpc3QpCiAgZmFjdG9yeSBJbnQ2NExpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfSW50NjRBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEludDY0TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgSW50NjRMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDY0TGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPEludDY0TGlzdD4KICAgIGltcGxlbWVudHMgSW50NjRMaXN0IHsKICBmYWN0b3J5IF9JbnQ2NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEludDY0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEludDY0KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDY0TGlzdChsZW5ndGgpOwogIH0KCiAgaW50IF9nZXRJbmRleGVkSW50NjQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEludDY0KGluZGV4ICogSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50NjQoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRJbnQ2NChpbmRleCAqIEludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBVaW50NjRMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50NjRMaXN0KQogIGZhY3RvcnkgVWludDY0TGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9VaW50NjRBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IFVpbnQ2NExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ2NExpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDY0TGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ2NExpc3QgewogIGZhY3RvcnkgX1VpbnQ2NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQ2NChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50NjQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50NjRMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRVaW50NjQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldFVpbnQ2NChpbmRleCAqIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRVaW50NjQoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRVaW50NjQoaW5kZXggKiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEZsb2F0MzJMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyTGlzdCkKICBmYWN0b3J5IEZsb2F0MzJMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0Zsb2F0MzJBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEZsb2F0MzJMaXN0LmZyb21MaXN0KExpc3Q8ZG91YmxlPiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBGbG9hdDMyTGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDMyTGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0MzJMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDMyTGlzdCB7CiAgZmFjdG9yeSBfRmxvYXQzMkxpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDMyKGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEZsb2F0MzIoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0MzJMaXN0KGxlbmd0aCk7CiAgfQoKICBkb3VibGUgX2dldEluZGV4ZWRGbG9hdDMyKGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDMyKGluZGV4ICogRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDMyKGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBfc2V0RmxvYXQzMihpbmRleCAqIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEZsb2F0NjRMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0TGlzdCkKICBmYWN0b3J5IEZsb2F0NjRMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0Zsb2F0NjRBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEZsb2F0NjRMaXN0LmZyb21MaXN0KExpc3Q8ZG91YmxlPiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDY0TGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0NjRMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDY0TGlzdCB7CiAgZmFjdG9yeSBfRmxvYXQ2NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDY0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEZsb2F0NjQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0NjRMaXN0KGxlbmd0aCk7CiAgfQoKICBkb3VibGUgX2dldEluZGV4ZWRGbG9hdDY0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDY0KGluZGV4ICogRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDY0KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBfc2V0RmxvYXQ2NChpbmRleCAqIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEZsb2F0MzJ4NExpc3QgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NExpc3QpCiAgZmFjdG9yeSBGbG9hdDMyeDRMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0Zsb2F0MzJ4NEFycmF5X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgRmxvYXQzMng0TGlzdC5mcm9tTGlzdChMaXN0PEZsb2F0MzJ4ND4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMng0TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDMyeDRMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfRmxvYXQzMng0TGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEZsb2F0MzJ4NExpc3QgewogIGZhY3RvcnkgX0Zsb2F0MzJ4NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDMyeDQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBGbG9hdDMyeDQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkRmxvYXQzMng0KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMng0TGlzdChsZW5ndGgpOwogIH0KCiAgRmxvYXQzMng0IF9nZXRJbmRleGVkRmxvYXQzMng0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDMyeDQoaW5kZXggKiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkRmxvYXQzMng0KGludCBpbmRleCwgRmxvYXQzMng0IHZhbHVlKSB7CiAgICBfc2V0RmxvYXQzMng0KGluZGV4ICogRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBJbnQzMng0TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NExpc3QpCiAgZmFjdG9yeSBJbnQzMng0TGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9JbnQzMng0QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBJbnQzMng0TGlzdC5mcm9tTGlzdChMaXN0PEludDMyeDQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludDMyeDRMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDMyeDRMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50MzJ4NExpc3RNaXhpbgogICAgaW1wbGVtZW50cyBJbnQzMng0TGlzdCB7CiAgZmFjdG9yeSBfSW50MzJ4NExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEludDMyeDQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBJbnQzMng0IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEludDMyeDQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQzMng0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDMyeDRMaXN0KGxlbmd0aCk7CiAgfQoKICBJbnQzMng0IF9nZXRJbmRleGVkSW50MzJ4NChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50MzJ4NChpbmRleCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50MzJ4NChpbnQgaW5kZXgsIEludDMyeDQgdmFsdWUpIHsKICAgIF9zZXRJbnQzMng0KGluZGV4ICogSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgRmxvYXQ2NHgyTGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyTGlzdCkKICBmYWN0b3J5IEZsb2F0NjR4Mkxpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfRmxvYXQ2NHgyQXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBGbG9hdDY0eDJMaXN0LmZyb21MaXN0KExpc3Q8RmxvYXQ2NHgyPiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0eDJMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0Zsb2F0NjR4Mkxpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9GbG9hdDY0eDJMaXN0TWl4aW4KICAgIGltcGxlbWVudHMgRmxvYXQ2NHgyTGlzdCB7CiAgZmFjdG9yeSBfRmxvYXQ2NHgyTGlzdC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0NjR4MihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEZsb2F0NjR4MiB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRGbG9hdDY0eDIoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0NjR4Mkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0eDJMaXN0KGxlbmd0aCk7CiAgfQoKICBGbG9hdDY0eDIgX2dldEluZGV4ZWRGbG9hdDY0eDIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0NjR4MihpbmRleCAqIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDY0eDIoaW50IGluZGV4LCBGbG9hdDY0eDIgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDY0eDIoaW5kZXggKiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxJbnQ4QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQ4TGlzdD4KICAgIGltcGxlbWVudHMgSW50OExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsSW50OEFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEludDgoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbnQ4KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50OExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQ4TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxVaW50OEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDhMaXN0PgogICAgaW1wbGVtZW50cyBVaW50OExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsVWludDhBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0VWludDgoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRVaW50OChpbmRleCwgX3RvVWludDgodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDhMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbFVpbnQ4Q2xhbXBlZEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDhDbGFtcGVkTGlzdD4KICAgIGltcGxlbWVudHMgVWludDhDbGFtcGVkTGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxVaW50OENsYW1wZWRBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0VWludDgoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRVaW50OChpbmRleCwgX3RvQ2xhbXBlZFVpbnQ4KHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQ4Q2xhbXBlZExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50OENsYW1wZWRMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEludDE2QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDE2TGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxJbnQxNkFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQxNihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQxNihpbmRleCwgX3RvSW50MTYodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MTZMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50MTZMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRJbnQxNihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50MTYoaW5kZXggKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRJbnQxNihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldEludDE2KGluZGV4ICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxVaW50MTZBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQxNkxpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsVWludDE2QXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQxNihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50MTYoaW5kZXgsIF90b1VpbnQxNih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDE2TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQxNkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQxNihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDE2KGluZGV4ICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQxNihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQxNihpbmRleCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEludDMyQXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDMyTGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxJbnQzMkFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQzMihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQzMihpbmRleCwgX3RvSW50MzIodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50MzJMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRJbnQzMihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50MzIoaW5kZXggKiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRJbnQzMihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldEludDMyKGluZGV4ICogSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxVaW50MzJBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQzMkxpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsVWludDMyQXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQzMihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50MzIoaW5kZXgsIF90b1VpbnQzMih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQzMkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQzMihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDMyKGluZGV4ICogVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQzMihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQzMihpbmRleCAqIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEludDY0QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDY0TGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxJbnQ2NEFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQ2NChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQ2NChpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQ2NExpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZEludDY0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRJbnQ2NChpbmRleCAqIEludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEludDY0KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBfc2V0SW50NjQoaW5kZXggKiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbFVpbnQ2NEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDY0TGlzdD4KICAgIGltcGxlbWVudHMgVWludDY0TGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxVaW50NjRBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkVWludDY0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZFVpbnQ2NChpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ2NExpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZFVpbnQ2NChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0VWludDY0KGluZGV4ICogVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZFVpbnQ2NChpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldFVpbnQ2NChpbmRleCAqIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEZsb2F0MzJBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0MzJMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDMyTGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxGbG9hdDMyQXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGRvdWJsZSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0MzIoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkRmxvYXQzMihpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMkxpc3QobGVuZ3RoKTsKICB9CgogIGRvdWJsZSBfZ2V0SW5kZXhlZEZsb2F0MzIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0MzIoaW5kZXggKiBGbG9hdDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEZsb2F0MzIoaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDMyKGluZGV4ICogRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEZsb2F0NjRBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0NjRMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDY0TGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxGbG9hdDY0QXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGRvdWJsZSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0NjQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkRmxvYXQ2NChpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQ2NExpc3QobGVuZ3RoKTsKICB9CgogIGRvdWJsZSBfZ2V0SW5kZXhlZEZsb2F0NjQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0NjQoaW5kZXggKiBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEZsb2F0NjQoaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDY0KGluZGV4ICogRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEZsb2F0MzJ4NEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfRmxvYXQzMng0TGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEZsb2F0MzJ4NExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsRmxvYXQzMng0QXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEZsb2F0MzJ4NCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0MzJ4NChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEZsb2F0MzJ4NCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRGbG9hdDMyeDQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDMyeDRMaXN0KGxlbmd0aCk7CiAgfQoKICBGbG9hdDMyeDQgX2dldEluZGV4ZWRGbG9hdDMyeDQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0MzJ4NChpbmRleCAqIEZsb2F0MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDMyeDQoaW50IGluZGV4LCBGbG9hdDMyeDQgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDMyeDQoaW5kZXggKiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxJbnQzMng0QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnQzMng0TGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEludDMyeDRMaXN0IHsKICBmYWN0b3J5IF9FeHRlcm5hbEludDMyeDRBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgSW50MzJ4NCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEludDMyeDQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBJbnQzMng0IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEludDMyeDQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQzMng0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDMyeDRMaXN0KGxlbmd0aCk7CiAgfQoKICBJbnQzMng0IF9nZXRJbmRleGVkSW50MzJ4NChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50MzJ4NChpbmRleCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50MzJ4NChpbnQgaW5kZXgsIEludDMyeDQgdmFsdWUpIHsKICAgIF9zZXRJbnQzMng0KGluZGV4ICogSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbEZsb2F0NjR4MkFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfRmxvYXQ2NHgyTGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEZsb2F0NjR4Mkxpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsRmxvYXQ2NHgyQXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEZsb2F0NjR4MiBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZEZsb2F0NjR4MihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEZsb2F0NjR4MiB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRGbG9hdDY0eDIoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0NjR4Mkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0eDJMaXN0KGxlbmd0aCk7CiAgfQoKICBGbG9hdDY0eDIgX2dldEluZGV4ZWRGbG9hdDY0eDIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEZsb2F0NjR4MihpbmRleCAqIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDY0eDIoaW50IGluZGV4LCBGbG9hdDY0eDIgdmFsdWUpIHsKICAgIF9zZXRGbG9hdDY0eDIoaW5kZXggKiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEZsb2F0MzJ4NCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIGZhY3RvcnkgRmxvYXQzMng0KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSB3KQogICAgICBuYXRpdmUgIkZsb2F0MzJ4NF9mcm9tRG91YmxlcyI7CgogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBmYWN0b3J5IEZsb2F0MzJ4NC5zcGxhdChkb3VibGUgdikgbmF0aXZlICJGbG9hdDMyeDRfc3BsYXQiOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgZmFjdG9yeSBGbG9hdDMyeDQuemVybygpIG5hdGl2ZSAiRmxvYXQzMng0X3plcm8iOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgZmFjdG9yeSBGbG9hdDMyeDQuZnJvbUludDMyeDRCaXRzKEludDMyeDQgeCkKICAgICAgbmF0aXZlICJGbG9hdDMyeDRfZnJvbUludDMyeDRCaXRzIjsKCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIGZhY3RvcnkgRmxvYXQzMng0LmZyb21GbG9hdDY0eDIoRmxvYXQ2NHgyIHYpIG5hdGl2ZSAiRmxvYXQzMng0X2Zyb21GbG9hdDY0eDIiOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDMyeDQgaW1wbGVtZW50cyBGbG9hdDMyeDQgewogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgb3BlcmF0b3IgKyhGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X2FkZCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBvcGVyYXRvciAtKCkgbmF0aXZlICJGbG9hdDMyeDRfbmVnYXRlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IG9wZXJhdG9yIC0oRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9zdWIiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgb3BlcmF0b3IgKihGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X211bCI7CiAgRmxvYXQzMng0IG9wZXJhdG9yIC8oRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9kaXYiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBsZXNzVGhhbihGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X2NtcGx0IjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgbGVzc1RoYW5PckVxdWFsKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfY21wbHRlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgZ3JlYXRlclRoYW4oRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9jbXBndCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IGdyZWF0ZXJUaGFuT3JFcXVhbChGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X2NtcGd0ZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IGVxdWFsKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfY21wZXF1YWwiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBub3RFcXVhbChGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X2NtcG5lcXVhbCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBzY2FsZShkb3VibGUgcykgbmF0aXZlICJGbG9hdDMyeDRfc2NhbGUiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgYWJzKCkgbmF0aXZlICJGbG9hdDMyeDRfYWJzIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IGNsYW1wKEZsb2F0MzJ4NCBsb3dlckxpbWl0LCBGbG9hdDMyeDQgdXBwZXJMaW1pdCkKICAgICAgbmF0aXZlICJGbG9hdDMyeDRfY2xhbXAiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgZ2V0IHggbmF0aXZlICJGbG9hdDMyeDRfZ2V0WCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBnZXQgeSBuYXRpdmUgIkZsb2F0MzJ4NF9nZXRZIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIGdldCB6IG5hdGl2ZSAiRmxvYXQzMng0X2dldFoiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgZ2V0IHcgbmF0aXZlICJGbG9hdDMyeDRfZ2V0VyI7CiAgaW50IGdldCBzaWduTWFzayBuYXRpdmUgIkZsb2F0MzJ4NF9nZXRTaWduTWFzayI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgc2h1ZmZsZShpbnQgbWFzaykgbmF0aXZlICJGbG9hdDMyeDRfc2h1ZmZsZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBzaHVmZmxlTWl4KEZsb2F0MzJ4NCB6dywgaW50IG1hc2spIG5hdGl2ZSAiRmxvYXQzMng0X3NodWZmbGVNaXgiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHdpdGhYKGRvdWJsZSB4KSBuYXRpdmUgIkZsb2F0MzJ4NF9zZXRYIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHdpdGhZKGRvdWJsZSB5KSBuYXRpdmUgIkZsb2F0MzJ4NF9zZXRZIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHdpdGhaKGRvdWJsZSB6KSBuYXRpdmUgIkZsb2F0MzJ4NF9zZXRaIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHdpdGhXKGRvdWJsZSB3KSBuYXRpdmUgIkZsb2F0MzJ4NF9zZXRXIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IG1pbihGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X21pbiI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBtYXgoRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9tYXgiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgc3FydCgpIG5hdGl2ZSAiRmxvYXQzMng0X3NxcnQiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgcmVjaXByb2NhbCgpIG5hdGl2ZSAiRmxvYXQzMng0X3JlY2lwcm9jYWwiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgcmVjaXByb2NhbFNxcnQoKSBuYXRpdmUgIkZsb2F0MzJ4NF9yZWNpcHJvY2FsU3FydCI7Cn0KCkBwYXRjaApjbGFzcyBJbnQzMng0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIGZhY3RvcnkgSW50MzJ4NChpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdykgbmF0aXZlICJJbnQzMng0X2Zyb21JbnRzIjsKCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBmYWN0b3J5IEludDMyeDQuYm9vbChib29sIHgsIGJvb2wgeSwgYm9vbCB6LCBib29sIHcpCiAgICAgIG5hdGl2ZSAiSW50MzJ4NF9mcm9tQm9vbHMiOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIGZhY3RvcnkgSW50MzJ4NC5mcm9tRmxvYXQzMng0Qml0cyhGbG9hdDMyeDQgeCkKICAgICAgbmF0aXZlICJJbnQzMng0X2Zyb21GbG9hdDMyeDRCaXRzIjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW50MzJ4NCBpbXBsZW1lbnRzIEludDMyeDQgewogIEludDMyeDQgb3BlcmF0b3IgfChJbnQzMng0IG90aGVyKSBuYXRpdmUgIkludDMyeDRfb3IiOwogIEludDMyeDQgb3BlcmF0b3IgJihJbnQzMng0IG90aGVyKSBuYXRpdmUgIkludDMyeDRfYW5kIjsKICBJbnQzMng0IG9wZXJhdG9yIF4oSW50MzJ4NCBvdGhlcikgbmF0aXZlICJJbnQzMng0X3hvciI7CiAgSW50MzJ4NCBvcGVyYXRvciArKEludDMyeDQgb3RoZXIpIG5hdGl2ZSAiSW50MzJ4NF9hZGQiOwogIEludDMyeDQgb3BlcmF0b3IgLShJbnQzMng0IG90aGVyKSBuYXRpdmUgIkludDMyeDRfc3ViIjsKICBpbnQgZ2V0IHggbmF0aXZlICJJbnQzMng0X2dldFgiOwogIGludCBnZXQgeSBuYXRpdmUgIkludDMyeDRfZ2V0WSI7CiAgaW50IGdldCB6IG5hdGl2ZSAiSW50MzJ4NF9nZXRaIjsKICBpbnQgZ2V0IHcgbmF0aXZlICJJbnQzMng0X2dldFciOwogIGludCBnZXQgc2lnbk1hc2sgbmF0aXZlICJJbnQzMng0X2dldFNpZ25NYXNrIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgc2h1ZmZsZShpbnQgbWFzaykgbmF0aXZlICJJbnQzMng0X3NodWZmbGUiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBzaHVmZmxlTWl4KEludDMyeDQgencsIGludCBtYXNrKSBuYXRpdmUgIkludDMyeDRfc2h1ZmZsZU1peCI7CiAgSW50MzJ4NCB3aXRoWChpbnQgeCkgbmF0aXZlICJJbnQzMng0X3NldFgiOwogIEludDMyeDQgd2l0aFkoaW50IHkpIG5hdGl2ZSAiSW50MzJ4NF9zZXRZIjsKICBJbnQzMng0IHdpdGhaKGludCB6KSBuYXRpdmUgIkludDMyeDRfc2V0WiI7CiAgSW50MzJ4NCB3aXRoVyhpbnQgdykgbmF0aXZlICJJbnQzMng0X3NldFciOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIGdldCBmbGFnWCBuYXRpdmUgIkludDMyeDRfZ2V0RmxhZ1giOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIGdldCBmbGFnWSBuYXRpdmUgIkludDMyeDRfZ2V0RmxhZ1kiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIGdldCBmbGFnWiBuYXRpdmUgIkludDMyeDRfZ2V0RmxhZ1oiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIGdldCBmbGFnVyBuYXRpdmUgIkludDMyeDRfZ2V0RmxhZ1ciOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCB3aXRoRmxhZ1goYm9vbCB4KSBuYXRpdmUgIkludDMyeDRfc2V0RmxhZ1giOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCB3aXRoRmxhZ1koYm9vbCB5KSBuYXRpdmUgIkludDMyeDRfc2V0RmxhZ1kiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCB3aXRoRmxhZ1ooYm9vbCB6KSBuYXRpdmUgIkludDMyeDRfc2V0RmxhZ1oiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCB3aXRoRmxhZ1coYm9vbCB3KSBuYXRpdmUgIkludDMyeDRfc2V0RmxhZ1ciOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgc2VsZWN0KEZsb2F0MzJ4NCB0cnVlVmFsdWUsIEZsb2F0MzJ4NCBmYWxzZVZhbHVlKQogICAgICBuYXRpdmUgIkludDMyeDRfc2VsZWN0IjsKfQoKQHBhdGNoCmNsYXNzIEZsb2F0NjR4MiB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIGZhY3RvcnkgRmxvYXQ2NHgyKGRvdWJsZSB4LCBkb3VibGUgeSkgbmF0aXZlICJGbG9hdDY0eDJfZnJvbURvdWJsZXMiOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgZmFjdG9yeSBGbG9hdDY0eDIuc3BsYXQoZG91YmxlIHYpIG5hdGl2ZSAiRmxvYXQ2NHgyX3NwbGF0IjsKCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIGZhY3RvcnkgRmxvYXQ2NHgyLnplcm8oKSBuYXRpdmUgIkZsb2F0NjR4Ml96ZXJvIjsKCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIGZhY3RvcnkgRmxvYXQ2NHgyLmZyb21GbG9hdDMyeDQoRmxvYXQzMng0IHYpIG5hdGl2ZSAiRmxvYXQ2NHgyX2Zyb21GbG9hdDMyeDQiOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDY0eDIgaW1wbGVtZW50cyBGbG9hdDY0eDIgewogIEZsb2F0NjR4MiBvcGVyYXRvciArKEZsb2F0NjR4MiBvdGhlcikgbmF0aXZlICJGbG9hdDY0eDJfYWRkIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgRmxvYXQ2NHgyIG9wZXJhdG9yIC0oKSBuYXRpdmUgIkZsb2F0NjR4Ml9uZWdhdGUiOwogIEZsb2F0NjR4MiBvcGVyYXRvciAtKEZsb2F0NjR4MiBvdGhlcikgbmF0aXZlICJGbG9hdDY0eDJfc3ViIjsKICBGbG9hdDY0eDIgb3BlcmF0b3IgKihGbG9hdDY0eDIgb3RoZXIpIG5hdGl2ZSAiRmxvYXQ2NHgyX211bCI7CiAgRmxvYXQ2NHgyIG9wZXJhdG9yIC8oRmxvYXQ2NHgyIG90aGVyKSBuYXRpdmUgIkZsb2F0NjR4Ml9kaXYiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBGbG9hdDY0eDIgc2NhbGUoZG91YmxlIHMpIG5hdGl2ZSAiRmxvYXQ2NHgyX3NjYWxlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgRmxvYXQ2NHgyIGFicygpIG5hdGl2ZSAiRmxvYXQ2NHgyX2FicyI7CiAgRmxvYXQ2NHgyIGNsYW1wKEZsb2F0NjR4MiBsb3dlckxpbWl0LCBGbG9hdDY0eDIgdXBwZXJMaW1pdCkKICAgICAgbmF0aXZlICJGbG9hdDY0eDJfY2xhbXAiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgZ2V0IHggbmF0aXZlICJGbG9hdDY0eDJfZ2V0WCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBnZXQgeSBuYXRpdmUgIkZsb2F0NjR4Ml9nZXRZIjsKICBpbnQgZ2V0IHNpZ25NYXNrIG5hdGl2ZSAiRmxvYXQ2NHgyX2dldFNpZ25NYXNrIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgRmxvYXQ2NHgyIHdpdGhYKGRvdWJsZSB4KSBuYXRpdmUgIkZsb2F0NjR4Ml9zZXRYIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgRmxvYXQ2NHgyIHdpdGhZKGRvdWJsZSB5KSBuYXRpdmUgIkZsb2F0NjR4Ml9zZXRZIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgRmxvYXQ2NHgyIG1pbihGbG9hdDY0eDIgb3RoZXIpIG5hdGl2ZSAiRmxvYXQ2NHgyX21pbiI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiBtYXgoRmxvYXQ2NHgyIG90aGVyKSBuYXRpdmUgIkZsb2F0NjR4Ml9tYXgiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBGbG9hdDY0eDIgc3FydCgpIG5hdGl2ZSAiRmxvYXQ2NHgyX3NxcnQiOwp9CgpjbGFzcyBfVHlwZWRMaXN0SXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgTGlzdDxFPiBfYXJyYXk7CiAgZmluYWwgaW50IF9sZW5ndGg7CiAgaW50IF9wb3NpdGlvbjsKICBFIF9jdXJyZW50OwoKICBfVHlwZWRMaXN0SXRlcmF0b3IoTGlzdCBhcnJheSkKICAgICAgOiBfYXJyYXkgPSBhcnJheSwKICAgICAgICBfbGVuZ3RoID0gYXJyYXkubGVuZ3RoLAogICAgICAgIF9wb3NpdGlvbiA9IC0xIHsKICAgIGFzc2VydChhcnJheSBpcyBfVHlwZWRMaXN0IHx8IGFycmF5IGlzIF9UeXBlZExpc3RWaWV3KTsKICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpbnQgbmV4dFBvc2l0aW9uID0gX3Bvc2l0aW9uICsgMTsKICAgIGlmIChuZXh0UG9zaXRpb24gPCBfbGVuZ3RoKSB7CiAgICAgIF9jdXJyZW50ID0gX2FycmF5W25leHRQb3NpdGlvbl07CiAgICAgIF9wb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfcG9zaXRpb24gPSBfbGVuZ3RoOwogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKYWJzdHJhY3QgY2xhc3MgX1R5cGVkTGlzdFZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0QmFzZSBpbXBsZW1lbnRzIFR5cGVkRGF0YSB7CiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzIHsKICAgIHJldHVybiBsZW5ndGggKiBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgfQoKICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyIHsKICAgIHJldHVybiBfdHlwZWREYXRhLmJ1ZmZlcjsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgX1R5cGVkTGlzdCBnZXQgX3R5cGVkRGF0YSBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfdHlwZWREYXRhIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgb2Zmc2V0SW5CeXRlcyBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfb2Zmc2V0SW5CeXRlcyI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IGxlbmd0aCBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfbGVuZ3RoIjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW50OEFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQ4TGlzdD4KICAgIGltcGxlbWVudHMgSW50OExpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDhBcnJheVZpZXcpCiAgZmFjdG9yeSBfSW50OEFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X0ludDhBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0SW50OChvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50OExpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0SW50OCgKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50OExpc3QuYnl0ZXNQZXJFbGVtZW50KSwgX3RvSW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50OExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQ4TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDhBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDhMaXN0PgogICAgaW1wbGVtZW50cyBVaW50OExpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX1VpbnQ4QXJyYXlWaWV3KQogIGZhY3RvcnkgX1VpbnQ4QXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfVWludDhBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0VWludDgob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRVaW50OCgKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudCksIF90b1VpbnQ4KHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDhMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9VaW50OENsYW1wZWRBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDhDbGFtcGVkTGlzdD4KICAgIGltcGxlbWVudHMgVWludDhDbGFtcGVkTGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDhDbGFtcGVkQXJyYXlWaWV3KQogIGZhY3RvcnkgX1VpbnQ4Q2xhbXBlZEFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywKICAgICAgaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFWaWV3X1VpbnQ4Q2xhbXBlZEFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRVaW50OChvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldFVpbnQ4KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50KSwKICAgICAgICBfdG9DbGFtcGVkVWludDgodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50OENsYW1wZWRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDhDbGFtcGVkTGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW50MTZBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50MTZMaXN0PgogICAgaW1wbGVtZW50cyBJbnQxNkxpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDE2QXJyYXlWaWV3KQogIGZhY3RvcnkgX0ludDE2QXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfSW50MTZBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0SW50MTYob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRJbnQxNigKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCksIF90b0ludDE2KHZhbHVlKSk7CiAgfQoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGUgaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIGlmIChpdGVyYWJsZSBpcyBDb2RlVW5pdHMpIHsKICAgICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICAgIGludCBieXRlU3RhcnQgPSB0aGlzLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICAgIF90eXBlZERhdGEuX3NldENvZGVVbml0cyhpdGVyYWJsZSwgYnl0ZVN0YXJ0LCBsZW5ndGgsIHNraXBDb3VudCk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci5zZXRSYW5nZShzdGFydCwgZW5kLCBpdGVyYWJsZSwgc2tpcENvdW50KTsKICAgIH0KICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MTZMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50MTZMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9VaW50MTZBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDE2TGlzdD4KICAgIGltcGxlbWVudHMgVWludDE2TGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDE2QXJyYXlWaWV3KQogIGZhY3RvcnkgX1VpbnQxNkFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X1VpbnQxNkFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRVaW50MTYob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0VWludDE2KAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCksIF90b1VpbnQxNih2YWx1ZSkpOwogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlIGl0ZXJhYmxlLCBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICBpZiAoaXRlcmFibGUgaXMgQ29kZVVuaXRzKSB7CiAgICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgICBpbnQgYnl0ZVN0YXJ0ID0gdGhpcy5vZmZzZXRJbkJ5dGVzICsgc3RhcnQgKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgICAgX3R5cGVkRGF0YS5fc2V0Q29kZVVuaXRzKGl0ZXJhYmxlLCBieXRlU3RhcnQsIGxlbmd0aCwgc2tpcENvdW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnNldFJhbmdlKHN0YXJ0LCBlbmQsIGl0ZXJhYmxlLCBza2lwQ291bnQpOwogICAgfQogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgoKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCgogIFVpbnQxNkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50MTZMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQzMkFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDMyTGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJBcnJheVZpZXcpCiAgZmFjdG9yeSBfSW50MzJBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19JbnQzMkFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRJbnQzMihvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEludDMyKAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KSwgX3RvSW50MzIodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQzMkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQzMkxpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQzMkFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50MzJMaXN0PgogICAgaW1wbGVtZW50cyBVaW50MzJMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50MzJBcnJheVZpZXcpCiAgZmFjdG9yeSBfVWludDMyQXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfVWludDMyQXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldFVpbnQzMihvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRVaW50MzIoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KSwgX3RvVWludDMyKHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQzMkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50MzJMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQ2NEFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDY0TGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50NjRBcnJheVZpZXcpCiAgZmFjdG9yeSBfSW50NjRBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19JbnQ2NEFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRJbnQ2NChvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEludDY0KAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KSwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDY0TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDY0QXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ2NExpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX1VpbnQ2NEFycmF5VmlldykKICBmYWN0b3J5IF9VaW50NjRBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19VaW50NjRBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0VWludDY0KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldFVpbnQ2NCgKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpLCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50NjRMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDMyQXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0MzJMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDMyTGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMkFycmF5VmlldykKICBmYWN0b3J5IF9GbG9hdDMyQXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfRmxvYXQzMkFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGRvdWJsZSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRGbG9hdDMyKG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBGbG9hdDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRGbG9hdDMyKAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBGbG9hdDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpLCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0MzJMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDY0QXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0RvdWJsZUxpc3RNaXhpbiwgX1R5cGVkRG91YmxlTGlzdE1peGluPEZsb2F0NjRMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDY0TGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NEFycmF5VmlldykKICBmYWN0b3J5IF9GbG9hdDY0QXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfRmxvYXQ2NEFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGRvdWJsZSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRGbG9hdDY0KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRGbG9hdDY0KAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpLCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0NjRMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDMyeDRBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfRmxvYXQzMng0TGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEZsb2F0MzJ4NExpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NEFycmF5VmlldykKICBmYWN0b3J5IF9GbG9hdDMyeDRBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsCiAgICAgIGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhVmlld19GbG9hdDMyeDRBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBGbG9hdDMyeDQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0RmxvYXQzMng0KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBGbG9hdDMyeDQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEZsb2F0MzJ4NCgKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpLCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDMyeDRMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQzMng0QXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludDMyeDRMaXN0TWl4aW4KICAgIGltcGxlbWVudHMgSW50MzJ4NExpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDRBcnJheVZpZXcpCiAgZmFjdG9yeSBfSW50MzJ4NEFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X0ludDMyeDRBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBJbnQzMng0IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldEludDMyeDQob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBJbnQzMng0IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRJbnQzMng0KAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpLCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQzMng0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDMyeDRMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDY0eDJBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfRmxvYXQ2NHgyTGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEZsb2F0NjR4Mkxpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MkFycmF5VmlldykKICBmYWN0b3J5IF9GbG9hdDY0eDJBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsCiAgICAgIGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhVmlld19GbG9hdDY0eDJBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBGbG9hdDY0eDIgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0RmxvYXQ2NHgyKG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBGbG9hdDY0eDIgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEZsb2F0NjR4MigKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogRmxvYXQ2NHgyTGlzdC5ieXRlc1BlckVsZW1lbnQpLCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEZsb2F0NjR4Mkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0eDJMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9CeXRlRGF0YVZpZXcgaW1wbGVtZW50cyBCeXRlRGF0YSB7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfQnl0ZURhdGFWaWV3KQogIGZhY3RvcnkgX0J5dGVEYXRhVmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X0J5dGVEYXRhVmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgX0J5dGVCdWZmZXIgZ2V0IGJ1ZmZlciB7CiAgICByZXR1cm4gX3R5cGVkRGF0YS5idWZmZXI7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aEluQnl0ZXMgewogICAgcmV0dXJuIGxlbmd0aDsKICB9CgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiAxOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBCeXRlRGF0YSBpbnRlcmZhY2UuCgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXRJbnQ4KGludCBieXRlT2Zmc2V0KSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoYnl0ZU9mZnNldCwgdGhpcywgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhLl9nZXRJbnQ4KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0SW50OChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoYnl0ZU9mZnNldCwgdGhpcywgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEludDgob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsIHZhbHVlKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXRVaW50OChpbnQgYnl0ZU9mZnNldCkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGJ5dGVPZmZzZXQsIHRoaXMsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YS5fZ2V0VWludDgob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRVaW50OChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoYnl0ZU9mZnNldCwgdGhpcywgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldFVpbnQ4KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LCB2YWx1ZSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0SW50MTYoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMSA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gMiwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfdHlwZWREYXRhLl9nZXRJbnQxNihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2J5dGVTd2FwMTYocmVzdWx0KS50b1NpZ25lZCgxNik7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldEludDE2KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMSA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gMiwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEludDE2KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LAogICAgICAgIGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSA/IHZhbHVlIDogX2J5dGVTd2FwMTYodmFsdWUpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXRVaW50MTYoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMSA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gMiwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfdHlwZWREYXRhLl9nZXRVaW50MTYob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9ieXRlU3dhcDE2KHJlc3VsdCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldFVpbnQxNihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDEgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDIsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRVaW50MTYob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsCiAgICAgICAgaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpID8gdmFsdWUgOiBfYnl0ZVN3YXAxNih2YWx1ZSkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldEludDMyKGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDMgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDQsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3R5cGVkRGF0YS5fZ2V0SW50MzIob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9ieXRlU3dhcDMyKHJlc3VsdCkudG9TaWduZWQoMzIpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRJbnQzMihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDMgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDQsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRJbnQzMihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwKICAgICAgICBpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkgPyB2YWx1ZSA6IF9ieXRlU3dhcDMyKHZhbHVlKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0VWludDMyKGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDMgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDQsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3R5cGVkRGF0YS5fZ2V0VWludDMyKG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfYnl0ZVN3YXAzMihyZXN1bHQpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRVaW50MzIoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAzID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA0LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0VWludDMyKG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LAogICAgICAgIGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSA/IHZhbHVlIDogX2J5dGVTd2FwMzIodmFsdWUpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXRJbnQ2NChpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyA3ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA4LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF90eXBlZERhdGEuX2dldEludDY0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfYnl0ZVN3YXA2NChyZXN1bHQpLnRvU2lnbmVkKDY0KTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0SW50NjQoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyA3ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA4LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0SW50NjQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsCiAgICAgICAgaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpID8gdmFsdWUgOiBfYnl0ZVN3YXA2NCh2YWx1ZSkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldFVpbnQ2NChpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyA3ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA4LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF90eXBlZERhdGEuX2dldFVpbnQ2NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2J5dGVTd2FwNjQocmVzdWx0KTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0VWludDY0KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgNyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gOCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldFVpbnQ2NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwKICAgICAgICBpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkgPyB2YWx1ZSA6IF9ieXRlU3dhcDY0KHZhbHVlKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBkb3VibGUgZ2V0RmxvYXQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAzID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA0LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICByZXR1cm4gX3R5cGVkRGF0YS5fZ2V0RmxvYXQzMihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgICB9CiAgICBfY29udlUzMlswXSA9CiAgICAgICAgX2J5dGVTd2FwMzIoX3R5cGVkRGF0YS5fZ2V0VWludDMyKG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KSk7CiAgICByZXR1cm4gX2NvbnZGMzJbMF07CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldEZsb2F0MzIoaW50IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAzID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA0LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICBfdHlwZWREYXRhLl9zZXRGbG9hdDMyKG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LCB2YWx1ZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9jb252RjMyWzBdID0gdmFsdWU7CiAgICBfdHlwZWREYXRhLl9zZXRVaW50MzIob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsIF9ieXRlU3dhcDMyKF9jb252VTMyWzBdKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBkb3VibGUgZ2V0RmxvYXQ2NChpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyA3ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA4LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICByZXR1cm4gX3R5cGVkRGF0YS5fZ2V0RmxvYXQ2NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgICB9CiAgICBfY29udlU2NFswXSA9CiAgICAgICAgX2J5dGVTd2FwNjQoX3R5cGVkRGF0YS5fZ2V0VWludDY0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KSk7CiAgICByZXR1cm4gX2NvbnZGNjRbMF07CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldEZsb2F0NjQoaW50IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyA3ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA4LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICBfdHlwZWREYXRhLl9zZXRGbG9hdDY0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LCB2YWx1ZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9jb252RjY0WzBdID0gdmFsdWU7CiAgICBfdHlwZWREYXRhLl9zZXRVaW50NjQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsIF9ieXRlU3dhcDY0KF9jb252VTY0WzBdKSk7CiAgfQoKICBGbG9hdDMyeDQgZ2V0RmxvYXQzMng0KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDMgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDQsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICAvLyBUT0RPKGpvaG5tY2N1dGNoYW4pIDogTmVlZCB0byByZXNvbHZlIHRoaXMgZm9yIGVuZGlhbml0eS4KICAgIHJldHVybiBfdHlwZWREYXRhLl9nZXRGbG9hdDMyeDQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogIH0KCiAgdm9pZCBzZXRGbG9hdDMyeDQoaW50IGJ5dGVPZmZzZXQsIEZsb2F0MzJ4NCB2YWx1ZSwKICAgICAgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAzID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA0LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgLy8gVE9ETyhqb2hubWNjdXRjaGFuKSA6IE5lZWQgdG8gcmVzb2x2ZSB0aGlzIGZvciBlbmRpYW5pdHkuCiAgICBfdHlwZWREYXRhLl9zZXRGbG9hdDMyeDQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsIHZhbHVlKTsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgX1R5cGVkTGlzdCBnZXQgX3R5cGVkRGF0YSBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfdHlwZWREYXRhIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgb2Zmc2V0SW5CeXRlcyBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfb2Zmc2V0SW5CeXRlcyI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IGxlbmd0aCBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfbGVuZ3RoIjsKfQoKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfYnl0ZVN3YXAxNihpbnQgdmFsdWUpIHsKICByZXR1cm4gKCh2YWx1ZSAmIDB4RkYwMCkgPj4gOCkgfCAoKHZhbHVlICYgMHgwMEZGKSA8PCA4KTsKfQoKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfYnl0ZVN3YXAzMihpbnQgdmFsdWUpIHsKICB2YWx1ZSA9ICgodmFsdWUgJiAweEZGMDBGRjAwKSA+PiA4KSB8ICgodmFsdWUgJiAweDAwRkYwMEZGKSA8PCA4KTsKICB2YWx1ZSA9ICgodmFsdWUgJiAweEZGRkYwMDAwKSA+PiAxNikgfCAoKHZhbHVlICYgMHgwMDAwRkZGRikgPDwgMTYpOwogIHJldHVybiB2YWx1ZTsKfQoKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfYnl0ZVN3YXA2NChpbnQgdmFsdWUpIHsKICByZXR1cm4gKF9ieXRlU3dhcDMyKHZhbHVlKSA8PCAzMikgfCBfYnl0ZVN3YXAzMih2YWx1ZSA+PiAzMik7Cn0KCmZpbmFsIF9jb252VTMyID0gbmV3IFVpbnQzMkxpc3QoMik7CmZpbmFsIF9jb252VTY0ID0gbmV3IFVpbnQ2NExpc3QudmlldyhfY29udlUzMi5idWZmZXIpOwpmaW5hbCBfY29udkYzMiA9IG5ldyBGbG9hdDMyTGlzdC52aWV3KF9jb252VTMyLmJ1ZmZlcik7CmZpbmFsIF9jb252RjY0ID0gbmV3IEZsb2F0NjRMaXN0LnZpZXcoX2NvbnZVMzIuYnVmZmVyKTsKCi8vIFRvcCBsZXZlbCB1dGlsaXR5IG1ldGhvZHMuCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX3RvSW50KGludCB2YWx1ZSwgaW50IG1hc2spIHsKICB2YWx1ZSAmPSBtYXNrOwogIGlmICh2YWx1ZSA+IChtYXNrID4+IDEpKSB2YWx1ZSAtPSBtYXNrICsgMTsKICByZXR1cm4gdmFsdWU7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX3RvSW50OChpbnQgdmFsdWUpIHsKICByZXR1cm4gX3RvSW50KHZhbHVlLCAweEZGKTsKfQoKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfdG9VaW50OChpbnQgdmFsdWUpIHsKICByZXR1cm4gdmFsdWUgJiAweEZGOwp9CgpAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCmludCBfdG9DbGFtcGVkVWludDgoaW50IHZhbHVlKSB7CiAgaWYgKHZhbHVlIDwgMCkgcmV0dXJuIDA7CiAgaWYgKHZhbHVlID4gMHhGRikgcmV0dXJuIDB4RkY7CiAgcmV0dXJuIHZhbHVlOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF90b0ludDE2KGludCB2YWx1ZSkgewogIHJldHVybiBfdG9JbnQodmFsdWUsIDB4RkZGRik7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX3RvVWludDE2KGludCB2YWx1ZSkgewogIHJldHVybiB2YWx1ZSAmIDB4RkZGRjsKfQoKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfdG9JbnQzMihpbnQgdmFsdWUpIHsKICByZXR1cm4gX3RvSW50KHZhbHVlLCAweEZG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ZF9kYXRhLXBhdGNoL3R5cGVkX2RhdGFfcGF0Y2guZGFydENvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvdHlwZWRfZGF0YS91bm1vZGlmaWFibGVfdHlwZWRfZGF0YS5kYXJ0rD4vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LnR5cGVkX2RhdGE7CgovKioKICogQSByZWFkLW9ubHkgdmlldyBvZiBhIFtCeXRlQnVmZmVyXS4KICovCmNsYXNzIFVubW9kaWZpYWJsZUJ5dGVCdWZmZXJWaWV3IGltcGxlbWVudHMgQnl0ZUJ1ZmZlciB7CiAgZmluYWwgQnl0ZUJ1ZmZlciBfZGF0YTsKCiAgVW5tb2RpZmlhYmxlQnl0ZUJ1ZmZlclZpZXcoQnl0ZUJ1ZmZlciBkYXRhKSA6IF9kYXRhID0gZGF0YTsKCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzID0+IF9kYXRhLmxlbmd0aEluQnl0ZXM7CgogIFVpbnQ4TGlzdCBhc1VpbnQ4TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZVVpbnQ4TGlzdFZpZXcoX2RhdGEuYXNVaW50OExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEludDhMaXN0IGFzSW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVJbnQ4TGlzdFZpZXcoX2RhdGEuYXNJbnQ4TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgVWludDhDbGFtcGVkTGlzdCBhc1VpbnQ4Q2xhbXBlZExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVVaW50OENsYW1wZWRMaXN0VmlldygKICAgICAgICAgIF9kYXRhLmFzVWludDhDbGFtcGVkTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgVWludDE2TGlzdCBhc1VpbnQxNkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVVaW50MTZMaXN0VmlldyhfZGF0YS5hc1VpbnQxNkxpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEludDE2TGlzdCBhc0ludDE2TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZUludDE2TGlzdFZpZXcoX2RhdGEuYXNJbnQxNkxpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIFVpbnQzMkxpc3QgYXNVaW50MzJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlVWludDMyTGlzdFZpZXcoX2RhdGEuYXNVaW50MzJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBJbnQzMkxpc3QgYXNJbnQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVJbnQzMkxpc3RWaWV3KF9kYXRhLmFzSW50MzJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBVaW50NjRMaXN0IGFzVWludDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZVVpbnQ2NExpc3RWaWV3KF9kYXRhLmFzVWludDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgSW50NjRMaXN0IGFzSW50NjRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlSW50NjRMaXN0VmlldyhfZGF0YS5hc0ludDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgSW50MzJ4NExpc3QgYXNJbnQzMng0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZUludDMyeDRMaXN0VmlldygKICAgICAgICAgIF9kYXRhLmFzSW50MzJ4NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEZsb2F0MzJMaXN0IGFzRmxvYXQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVGbG9hdDMyTGlzdFZpZXcoCiAgICAgICAgICBfZGF0YS5hc0Zsb2F0MzJMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBGbG9hdDY0TGlzdCBhc0Zsb2F0NjRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlRmxvYXQ2NExpc3RWaWV3KAogICAgICAgICAgX2RhdGEuYXNGbG9hdDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgRmxvYXQzMng0TGlzdCBhc0Zsb2F0MzJ4NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVGbG9hdDMyeDRMaXN0VmlldygKICAgICAgICAgIF9kYXRhLmFzRmxvYXQzMng0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgRmxvYXQ2NHgyTGlzdCBhc0Zsb2F0NjR4Mkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVGbG9hdDY0eDJMaXN0VmlldygKICAgICAgICAgIF9kYXRhLmFzRmxvYXQ2NHgyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgQnl0ZURhdGEgYXNCeXRlRGF0YShbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZUJ5dGVEYXRhVmlldyhfZGF0YS5hc0J5dGVEYXRhKG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwp9CgovKioKICogQSByZWFkLW9ubHkgdmlldyBvZiBhIFtCeXRlRGF0YV0uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVCeXRlRGF0YVZpZXcgaW1wbGVtZW50cyBCeXRlRGF0YSB7CiAgZmluYWwgQnl0ZURhdGEgX2RhdGE7CgogIFVubW9kaWZpYWJsZUJ5dGVEYXRhVmlldyhCeXRlRGF0YSBkYXRhKSA6IF9kYXRhID0gZGF0YTsKCiAgaW50IGdldEludDgoaW50IGJ5dGVPZmZzZXQpID0+IF9kYXRhLmdldEludDgoYnl0ZU9mZnNldCk7CgogIHZvaWQgc2V0SW50OChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlKSA9PiBfdW5zdXBwb3J0ZWQoKTsKCiAgaW50IGdldFVpbnQ4KGludCBieXRlT2Zmc2V0KSA9PiBfZGF0YS5nZXRVaW50OChieXRlT2Zmc2V0KTsKCiAgdm9pZCBzZXRVaW50OChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlKSA9PiBfdW5zdXBwb3J0ZWQoKTsKCiAgaW50IGdldEludDE2KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfZGF0YS5nZXRJbnQxNihieXRlT2Zmc2V0LCBlbmRpYW4pOwoKICB2b2lkIHNldEludDE2KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF91bnN1cHBvcnRlZCgpOwoKICBpbnQgZ2V0VWludDE2KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfZGF0YS5nZXRVaW50MTYoYnl0ZU9mZnNldCwgZW5kaWFuKTsKCiAgdm9pZCBzZXRVaW50MTYoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX3Vuc3VwcG9ydGVkKCk7CgogIGludCBnZXRJbnQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX2RhdGEuZ2V0SW50MzIoYnl0ZU9mZnNldCwgZW5kaWFuKTsKCiAgdm9pZCBzZXRJbnQzMihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfdW5zdXBwb3J0ZWQoKTsKCiAgaW50IGdldFVpbnQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX2RhdGEuZ2V0VWludDMyKGJ5dGVPZmZzZXQsIGVuZGlhbik7CgogIHZvaWQgc2V0VWludDMyKGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF91bnN1cHBvcnRlZCgpOwoKICBpbnQgZ2V0SW50NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF9kYXRhLmdldEludDY0KGJ5dGVPZmZzZXQsIGVuZGlhbik7CgogIHZvaWQgc2V0SW50NjQoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX3Vuc3VwcG9ydGVkKCk7CgogIGludCBnZXRVaW50NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF9kYXRhLmdldFVpbnQ2NChieXRlT2Zmc2V0LCBlbmRpYW4pOwoKICB2b2lkIHNldFVpbnQ2NChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfdW5zdXBwb3J0ZWQoKTsKCiAgZG91YmxlIGdldEZsb2F0MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF9kYXRhLmdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZW5kaWFuKTsKCiAgdm9pZCBzZXRGbG9hdDMyKGludCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF91bnN1cHBvcnRlZCgpOwoKICBkb3VibGUgZ2V0RmxvYXQ2NChpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX2RhdGEuZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBlbmRpYW4pOwoKICB2b2lkIHNldEZsb2F0NjQoaW50IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX3Vuc3VwcG9ydGVkKCk7CgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzID0+IF9kYXRhLmVsZW1lbnRTaXplSW5CeXRlczsKCiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzID0+IF9kYXRhLm9mZnNldEluQnl0ZXM7CgogIGludCBnZXQgbGVuZ3RoSW5CeXRlcyA9PiBfZGF0YS5sZW5ndGhJbkJ5dGVzOwoKICBCeXRlQnVmZmVyIGdldCBidWZmZXIgPT4gbmV3IFVubW9kaWZpYWJsZUJ5dGVCdWZmZXJWaWV3KF9kYXRhLmJ1ZmZlcik7CgogIHZvaWQgX3Vuc3VwcG9ydGVkKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkFuIFVubW9kaWZpYWJsZUJ5dGVEYXRhVmlldyBtYXkgbm90IGJlIG1vZGlmaWVkIik7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfVW5tb2RpZmlhYmxlTGlzdE1peGluPE4sIEwgZXh0ZW5kcyBMaXN0PE4+LAogICAgVEQgZXh0ZW5kcyBUeXBlZERhdGE+IHsKICBMIGdldCBfbGlzdDsKICBURCBnZXQgX2RhdGEgPT4gKF9saXN0IGFzIFREKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2xpc3QubGVuZ3RoOwoKICBOIG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gX2xpc3RbaW5kZXhdOwoKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyA9PiBfZGF0YS5lbGVtZW50U2l6ZUluQnl0ZXM7CgogIGludCBnZXQgb2Zmc2V0SW5CeXRlcyA9PiBfZGF0YS5vZmZzZXRJbkJ5dGVzOwoKICBpbnQgZ2V0IGxlbmd0aEluQnl0ZXMgPT4gX2RhdGEubGVuZ3RoSW5CeXRlczsKCiAgQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyID0+IG5ldyBVbm1vZGlmaWFibGVCeXRlQnVmZmVyVmlldyhfZGF0YS5idWZmZXIpOwoKICBMIF9jcmVhdGVMaXN0KGludCBsZW5ndGgpOwoKICBMIHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CiAgICBpbnQgc3VibGlzdExlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgTCByZXN1bHQgPSBfY3JlYXRlTGlzdChzdWJsaXN0TGVuZ3RoKTsKICAgIHJlc3VsdC5zZXRSYW5nZSgwLCBzdWJsaXN0TGVuZ3RoLCBfbGlzdCwgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8qKgogKiBWaWV3IG9mIGEgW1VpbnQ4TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlVWludDhMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIFVpbnQ4TGlzdCwgVWludDhMaXN0PgogICAgaW1wbGVtZW50cyBVaW50OExpc3QgewogIGZpbmFsIFVpbnQ4TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVVaW50OExpc3RWaWV3KFVpbnQ4TGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgVWludDhMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IFVpbnQ4TGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtJbnQ4TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlSW50OExpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgSW50OExpc3QsIEludDhMaXN0PgogICAgaW1wbGVtZW50cyBJbnQ4TGlzdCB7CiAgZmluYWwgSW50OExpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlSW50OExpc3RWaWV3KEludDhMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBJbnQ4TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBJbnQ4TGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtVaW50OENsYW1wZWRMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVVaW50OENsYW1wZWRMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIFVpbnQ4Q2xhbXBlZExpc3QsIFVpbnQ4Q2xhbXBlZExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ4Q2xhbXBlZExpc3QgewogIGZpbmFsIFVpbnQ4Q2xhbXBlZExpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlVWludDhDbGFtcGVkTGlzdFZpZXcoVWludDhDbGFtcGVkTGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgVWludDhDbGFtcGVkTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBVaW50OENsYW1wZWRMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW1VpbnQxNkxpc3RdIHRoYXQgZGlzYWxsb3dzIG1vZGlmaWNhdGlvbi4KICovCmNsYXNzIFVubW9kaWZpYWJsZVVpbnQxNkxpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgVWludDE2TGlzdCwgVWludDE2TGlzdD4KICAgIGltcGxlbWVudHMgVWludDE2TGlzdCB7CiAgZmluYWwgVWludDE2TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVVaW50MTZMaXN0VmlldyhVaW50MTZMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBVaW50MTZMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IFVpbnQxNkxpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbSW50MTZMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVJbnQxNkxpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgSW50MTZMaXN0LCBJbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDE2TGlzdCB7CiAgZmluYWwgSW50MTZMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUludDE2TGlzdFZpZXcoSW50MTZMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBJbnQxNkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gSW50MTZMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW1VpbnQzMkxpc3RdIHRoYXQgZGlzYWxsb3dzIG1vZGlmaWNhdGlvbi4KICovCmNsYXNzIFVubW9kaWZpYWJsZVVpbnQzMkxpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgVWludDMyTGlzdCwgVWludDMyTGlzdD4KICAgIGltcGxlbWVudHMgVWludDMyTGlzdCB7CiAgZmluYWwgVWludDMyTGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVVaW50MzJMaXN0VmlldyhVaW50MzJMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBVaW50MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IFVpbnQzMkxpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbSW50MzJMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVJbnQzMkxpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgSW50MzJMaXN0LCBJbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDMyTGlzdCB7CiAgZmluYWwgSW50MzJMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUludDMyTGlzdFZpZXcoSW50MzJMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBJbnQzMkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gSW50MzJMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW1VpbnQ2NExpc3RdIHRoYXQgZGlzYWxsb3dzIG1vZGlmaWNhdGlvbi4KICovCmNsYXNzIFVubW9kaWZpYWJsZVVpbnQ2NExpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgVWludDY0TGlzdCwgVWludDY0TGlzdD4KICAgIGltcGxlbWVudHMgVWludDY0TGlzdCB7CiAgZmluYWwgVWludDY0TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVVaW50NjRMaXN0VmlldyhVaW50NjRMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBVaW50NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IFVpbnQ2NExpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbSW50NjRMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVJbnQ2NExpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGludCwgSW50NjRMaXN0LCBJbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDY0TGlzdCB7CiAgZmluYWwgSW50NjRMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUludDY0TGlzdFZpZXcoSW50NjRMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBJbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gSW50NjRMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0ludDMyeDRMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVJbnQzMng0TGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxJbnQzMng0PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPEludDMyeDQsIEludDMyeDRMaXN0LCBJbnQzMng0TGlzdD4KICAgIGltcGxlbWVudHMgSW50MzJ4NExpc3QgewogIGZpbmFsIEludDMyeDRMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUludDMyeDRMaXN0VmlldyhJbnQzMng0TGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgSW50MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gSW50MzJ4NExpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbRmxvYXQzMng0TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlRmxvYXQzMng0TGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxGbG9hdDMyeDQ+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVMaXN0TWl4aW48RmxvYXQzMng0LCBGbG9hdDMyeDRMaXN0LCBGbG9hdDMyeDRMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDMyeDRMaXN0IHsKICBmaW5hbCBGbG9hdDMyeDRMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUZsb2F0MzJ4NExpc3RWaWV3KEZsb2F0MzJ4NExpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIEZsb2F0MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gRmxvYXQzMng0TGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtGbG9hdDY0eDJMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVGbG9hdDY0eDJMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPEZsb2F0NjR4Mj4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxGbG9hdDY0eDIsIEZsb2F0NjR4Mkxpc3QsIEZsb2F0NjR4Mkxpc3Q+CiAgICBpbXBsZW1lbnRzIEZsb2F0NjR4Mkxpc3QgewogIGZpbmFsIEZsb2F0NjR4Mkxpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlRmxvYXQ2NHgyTGlzdFZpZXcoRmxvYXQ2NHgyTGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgRmxvYXQ2NHgyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBGbG9hdDY0eDJMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0Zsb2F0MzJMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVGbG9hdDMyTGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxkb3VibGU+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVMaXN0TWl4aW48ZG91YmxlLCBGbG9hdDMyTGlzdCwgRmxvYXQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIEZsb2F0MzJMaXN0IHsKICBmaW5hbCBGbG9hdDMyTGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVGbG9hdDMyTGlzdFZpZXcoRmxvYXQzMkxpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIEZsb2F0MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IEZsb2F0MzJMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0Zsb2F0NjRMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVGbG9hdDY0TGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxkb3VibGU+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVMaXN0TWl4aW48ZG91YmxlLCBGbG9hdDY0TGlzdCwgRmxvYXQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIEZsb2F0NjRMaXN0IHsKICBmaW5hbCBGbG9hdDY0TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVGbG9hdDY0TGlzdFZpZXcoRmxvYXQ2NExpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIEZsb2F0NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IEZsb2F0NjRMaXN0KGxlbmd0aCk7Cn0KgVcATk48ARkBBCcEORoBPgEwAUBPAT5NAU4sPAFCUQFATwFCUQFATwFCUQFATwFEJzcBRCc3AUQnNwFIKTkBSCk5AT5NAgEEJQQ1GAE6ATwBPQE+AT4BQCoBTBYBQSsBTRYBQCoBTBYBQSsBTRYBQCoBTBYBQSsBTRYBRSwBURYBRSwBURYBOgEwATABSQEYIDwEAgE8HA8hASIBLAE6ATABMAFJAR0BJDolKzUTBAIBBDYEQjsbGTwBOgIBBDUEQTkaGDoBOAIBBD0ESUkiIEoBSAIBBDcEQz0cGj4BPAIBBDYEQjsbGTwBOgIBBDcEQz0cGj4BPAIBBDYEQjsbGTwBOgIBBDcEQz0cGj4BPAIBBDYEQjsbGTwBOgIBBDgESEMdG0ABPgIBBDoETEkfHUQBQgIBBDoETEkfHUQBQgIBBDgER0IdG0ABPgIBBDgER0IdG0ABPgIBLGRhcnQ6dHlwZWRfZGF0YS91bm1vZGlmaWFibGVfdHlwZWRfZGF0YS5kYXJ0O29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vdm1zZXJ2aWNlL3Ztc2VydmljZV9pby5kYXJ0nVQvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSB2bXNlcnZpY2VfaW87CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdkYXJ0Omlzb2xhdGUnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CmltcG9ydCAnZGFydDpfdm1zZXJ2aWNlJzsKCnBhcnQgJ2xvYWRlci5kYXJ0JzsKcGFydCAnc2VydmVyLmRhcnQnOwoKLy8gVGhlIFRDUCBpcC9wb3J0IHRoYXQgdGhlIEhUVFAgc2VydmVyIGxpc3RlbnMgb24uCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKaW50IF9wb3J0OwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpClN0cmluZyBfaXA7Ci8vIFNob3VsZCB0aGUgSFRUUCBzZXJ2ZXIgYXV0byBzdGFydD8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpib29sIF9hdXRvU3RhcnQ7Ci8vIFNob3VsZCB0aGUgSFRUUCBzZXJ2ZXIgcmVxdWlyZSBhbiBhdXRoIGNvZGU/CkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYm9vbCBfYXV0aENvZGVzRGlzYWJsZWQ7Ci8vIFNob3VsZCB0aGUgSFRUUCBzZXJ2ZXIgcnVuIGluIGRldm1vZGU/CkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYm9vbCBfb3JpZ2luQ2hlY2tEaXNhYmxlZDsKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpib29sIF9pc1dpbmRvd3MgPSBmYWxzZTsKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpib29sIF9pc0Z1Y2hzaWEgPSBmYWxzZTsKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQp2YXIgX3NpZ25hbFdhdGNoOwp2YXIgX3NpZ25hbFN1YnNjcmlwdGlvbjsKCi8vIEhUVFAgc2VydmVyLgpTZXJ2ZXIgc2VydmVyOwpGdXR1cmU8U2VydmVyPiBzZXJ2ZXJGdXR1cmU7CgpfbGF6eVNlcnZlckJvb3QoKSB7CiAgaWYgKHNlcnZlciAhPSBudWxsKSB7CiAgICByZXR1cm47CiAgfQogIC8vIExhemlseSBjcmVhdGUgc2VydmljZS4KICB2YXIgc2VydmljZSA9IG5ldyBWTVNlcnZpY2UoKTsKICAvLyBMYXppbHkgY3JlYXRlIHNlcnZlci4KICBzZXJ2ZXIgPQogICAgICBuZXcgU2VydmVyKHNlcnZpY2UsIF9pcCwgX3BvcnQsIF9vcmlnaW5DaGVja0Rpc2FibGVkLCBfYXV0aENvZGVzRGlzYWJsZWQpOwp9CgpGdXR1cmUgY2xlYW51cENhbGxiYWNrKCkgYXN5bmMgewogIHNodXRkb3duTG9hZGVycygpOwogIC8vIENhbmNlbCB0aGUgc2lncXVpdCBzdWJzY3JpcHRpb24uCiAgaWYgKF9zaWduYWxTdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgYXdhaXQgX3NpZ25hbFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIF9zaWduYWxTdWJzY3JpcHRpb24gPSBudWxsOwogIH0KICBpZiAoc2VydmVyICE9IG51bGwpIHsKICAgIHRyeSB7CiAgICAgIGF3YWl0IHNlcnZlci5jbGVhbnVwKHRydWUpOwogICAgfSBjYXRjaCAoZSwgc3QpIHsKICAgICAgcHJpbnQoIkVycm9yIGluIHZtLXNlcnZpY2Ugc2h1dGRvd246ICRlXG4kc3RcbiIpOwogICAgfQogIH0KICBpZiAoX3JlZ2lzdGVyU2lnbmFsSGFuZGxlclRpbWVyICE9IG51bGwpIHsKICAgIF9yZWdpc3RlclNpZ25hbEhhbmRsZXJUaW1lci5jYW5jZWwoKTsKICAgIF9yZWdpc3RlclNpZ25hbEhhbmRsZXJUaW1lciA9IG51bGw7CiAgfQogIC8vIENhbGwgb3V0IHRvIGVtYmVkZGVyJ3Mgc2h1dGRvd24gY2FsbGJhY2suCiAgX3NodXRkb3duKCk7Cn0KCkZ1dHVyZTxVcmk+IGNyZWF0ZVRlbXBEaXJDYWxsYmFjayhTdHJpbmcgYmFzZSkgYXN5bmMgewogIERpcmVjdG9yeSB0ZW1wID0gYXdhaXQgRGlyZWN0b3J5LnN5c3RlbVRlbXAuY3JlYXRlVGVtcChiYXNlKTsKICAvLyBVbmRlcm5lYXRoIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBjcmVhdGUgYSBkaXJlY3Rvcnkgd2l0aCB0aGUKICAvLyBzYW1lIG5hbWUgYXMgdGhlIERldkZTIG5hbWUgW2Jhc2VdLgogIHZhciBmc1VyaSA9IHRlbXAudXJpLnJlc29sdmVVcmkobmV3IFVyaS5kaXJlY3RvcnkoYmFzZSkpOwogIGF3YWl0IG5ldyBEaXJlY3RvcnkuZnJvbVVyaShmc1VyaSkuY3JlYXRlKCk7CiAgcmV0dXJuIGZzVXJpOwp9CgpGdXR1cmUgZGVsZXRlRGlyQ2FsbGJhY2soVXJpIHBhdGgpIGFzeW5jIHsKICBEaXJlY3RvcnkgZGlyID0gbmV3IERpcmVjdG9yeS5mcm9tVXJpKHBhdGgpOwogIGF3YWl0IGRpci5kZWxldGUocmVjdXJzaXZlOiB0cnVlKTsKfQoKY2xhc3MgUGVuZGluZ1dyaXRlIHsKICBQZW5kaW5nV3JpdGUodGhpcy51cmksIHRoaXMuYnl0ZXMpOwogIGZpbmFsIENvbXBsZXRlciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgZmluYWwgVXJpIHVyaTsKICBmaW5hbCBMaXN0PGludD4gYnl0ZXM7CgogIEZ1dHVyZSB3cml0ZSgpIGFzeW5jIHsKICAgIHZhciBmaWxlID0gbmV3IEZpbGUuZnJvbVVyaSh1cmkpOwogICAgdmFyIHBhcmVudF9kaXJlY3RvcnkgPSBmaWxlLnBhcmVudDsKICAgIGF3YWl0IHBhcmVudF9kaXJlY3RvcnkuY3JlYXRlKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgICBpZiAoYXdhaXQgZmlsZS5leGlzdHMoKSkgewogICAgICBhd2FpdCBmaWxlLmRlbGV0ZSgpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IGF3YWl0IGZpbGUud3JpdGVBc0J5dGVzKGJ5dGVzKTsKICAgIGNvbXBsZXRlci5jb21wbGV0ZShudWxsKTsKICAgIFdyaXRlTGltaXRlci5fd3JpdGVDb21wbGV0ZWQoKTsKICB9Cn0KCmNsYXNzIFdyaXRlTGltaXRlciB7CiAgc3RhdGljIGZpbmFsIExpc3Q8UGVuZGluZ1dyaXRlPiBwZW5kaW5nV3JpdGVzID0gbmV3IExpc3Q8UGVuZGluZ1dyaXRlPigpOwoKICAvLyBub24tcm9vdGVkIEFuZHJvaWQgZGV2aWNlcyBoYXZlIGEgdmVyeSBsb3cgbGltaXQgZm9yIHRoZSBudW1iZXIgb2YKICAvLyBvcGVuIGZpbGVzLiBBcnRpZmljaWFsbHkgY2FwIG91cnNlbHZlcyB0byAxNi4KICBzdGF0aWMgY29uc3Qga01heE9wZW5Xcml0ZXMgPSAxNjsKICBzdGF0aWMgaW50IG9wZW5Xcml0ZXMgPSAwOwoKICBzdGF0aWMgRnV0dXJlIHNjaGVkdWxlV3JpdGUoVXJpIHBhdGgsIExpc3Q8aW50PiBieXRlcykgYXN5bmMgewogICAgLy8gQ3JlYXRlIGEgbmV3IHBlbmRpbmcgd3JpdGUuCiAgICBQZW5kaW5nV3JpdGUgcHcgPSBuZXcgUGVuZGluZ1dyaXRlKHBhdGgsIGJ5dGVzKTsKICAgIHBlbmRpbmdXcml0ZXMuYWRkKHB3KTsKICAgIF9tYXliZVdyaXRlRmlsZXMoKTsKICAgIHJldHVybiBwdy5jb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgc3RhdGljIF9tYXliZVdyaXRlRmlsZXMoKSB7CiAgICB3aGlsZSAob3BlbldyaXRlcyA8IGtNYXhPcGVuV3JpdGVzKSB7CiAgICAgIGlmIChwZW5kaW5nV3JpdGVzLmxlbmd0aCA+IDApIHsKICAgICAgICBQZW5kaW5nV3JpdGUgcHcgPSBwZW5kaW5nV3JpdGVzLnJlbW92ZUxhc3QoKTsKICAgICAgICBwdy53cml0ZSgpOwogICAgICAgIG9wZW5Xcml0ZXMrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgc3RhdGljIF93cml0ZUNvbXBsZXRlZCgpIHsKICAgIG9wZW5Xcml0ZXMtLTsKICAgIGFzc2VydChvcGVuV3JpdGVzID49IDApOwogICAgX21heWJlV3JpdGVGaWxlcygpOwogIH0KfQoKRnV0dXJlIHdyaXRlRmlsZUNhbGxiYWNrKFVyaSBwYXRoLCBMaXN0PGludD4gYnl0ZXMpIGFzeW5jIHsKICByZXR1cm4gV3JpdGVMaW1pdGVyLnNjaGVkdWxlV3JpdGUocGF0aCwgYnl0ZXMpOwp9CgpGdXR1cmUgd3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2soVXJpIHBhdGgsIFN0cmVhbTxMaXN0PGludD4+IGJ5dGVzKSBhc3luYyB7CiAgdmFyIGZpbGUgPSBuZXcgRmlsZS5mcm9tVXJpKHBhdGgpOwogIHZhciBwYXJlbnRfZGlyZWN0b3J5ID0gZmlsZS5wYXJlbnQ7CiAgYXdhaXQgcGFyZW50X2RpcmVjdG9yeS5jcmVhdGUocmVjdXJzaXZlOiB0cnVlKTsKICBpZiAoYXdhaXQgZmlsZS5leGlzdHMoKSkgewogICAgYXdhaXQgZmlsZS5kZWxldGUoKTsKICB9CiAgSU9TaW5rIHNpbmsgPSBhd2FpdCBmaWxlLm9wZW5Xcml0ZSgpOwogIGF3YWl0IHNpbmsuYWRkU3RyZWFtKGJ5dGVzKTsKICBhd2FpdCBzaW5rLmNsb3NlKCk7Cn0KCkZ1dHVyZTxMaXN0PGludD4+IHJlYWRGaWxlQ2FsbGJhY2soVXJpIHBhdGgpIGFzeW5jIHsKICB2YXIgZmlsZSA9IG5ldyBGaWxlLmZyb21VcmkocGF0aCk7CiAgcmV0dXJuIGF3YWl0IGZpbGUucmVhZEFzQnl0ZXMoKTsKfQoKRnV0dXJlPExpc3Q8TWFwPFN0cmluZywgZHluYW1pYz4+PiBsaXN0RmlsZXNDYWxsYmFjayhVcmkgZGlyUGF0aCkgYXN5bmMgewogIHZhciBkaXIgPSBuZXcgRGlyZWN0b3J5LmZyb21VcmkoZGlyUGF0aCk7CiAgdmFyIGRpclBhdGhTdHIgPSBkaXJQYXRoLnBhdGg7CiAgdmFyIHN0cmVhbSA9IGRpci5saXN0KHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgdmFyIHJlc3VsdCA9IDxNYXA8U3RyaW5nLCBkeW5hbWljPj5bXTsKICBhd2FpdCBmb3IgKHZhciBmaWxlRW50aXR5IGluIHN0cmVhbSkgewogICAgdmFyIGZpbGVQYXRoID0gbmV3IFVyaS5maWxlKGZpbGVFbnRpdHkucGF0aCkucGF0aDsKICAgIHZhciBzdGF0ID0gYXdhaXQgZmlsZUVudGl0eS5zdGF0KCk7CiAgICBpZiAoc3RhdC50eXBlID09IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLkZJTEUgJiYKICAgICAgICBmaWxlUGF0aC5zdGFydHNXaXRoKGRpclBhdGhTdHIpKSB7CiAgICAgIHZhciBtYXAgPSA8U3RyaW5nLCBkeW5hbWljPnt9OwogICAgICBtYXBbJ25hbWUnXSA9ICcvJyArIGZpbGVQYXRoLnN1YnN0cmluZyhkaXJQYXRoU3RyLmxlbmd0aCk7CiAgICAgIG1hcFsnc2l6ZSddID0gc3RhdC5zaXplOwogICAgICBtYXBbJ21vZGlmaWVkJ10gPSBzdGF0Lm1vZGlmaWVkLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CiAgICAgIHJlc3VsdC5hZGQobWFwKTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKRnV0dXJlPFVyaT4gc2VydmVySW5mb3JtYXRpb25DYWxsYmFjaygpIGFzeW5jIHsKICBfbGF6eVNlcnZlckJvb3QoKTsKICByZXR1cm4gc2VydmVyLnNlcnZlckFkZHJlc3M7Cn0KCkZ1dHVyZTxVcmk+IHdlYlNlcnZlckNvbnRyb2xDYWxsYmFjayhib29sIGVuYWJsZSkgYXN5bmMgewogIF9sYXp5U2VydmVyQm9vdCgpOwogIGlmIChzZXJ2ZXIucnVubmluZyA9PSBlbmFibGUpIHsKICAgIC8vIE5vIGNoYW5nZS4KICAgIHJldHVybiBzZXJ2ZXIuc2VydmVyQWRkcmVzczsKICB9CgogIGlmIChlbmFibGUpIHsKICAgIGF3YWl0IHNlcnZlci5zdGFydHVwKCk7CiAgICByZXR1cm4gc2VydmVyLnNlcnZlckFkZHJlc3M7CiAgfSBlbHNlIHsKICAgIGF3YWl0IHNlcnZlci5zaHV0ZG93bih0cnVlKTsKICAgIHJldHVybiBzZXJ2ZXIuc2VydmVyQWRkcmVzczsKICB9Cn0KCk51bGwgX2NsZWFyRnV0dXJlKF8pIHsKICBzZXJ2ZXJGdXR1cmUgPSBudWxsOwp9Cgpfb25TaWduYWwoUHJvY2Vzc1NpZ25hbCBzaWduYWwpIHsKICBpZiAoc2VydmVyRnV0dXJlICE9IG51bGwpIHsKICAgIC8vIFN0aWxsIHdhaXRpbmcuCiAgICByZXR1cm47CiAgfQogIF9sYXp5U2VydmVyQm9vdCgpOwogIC8vIFRvZ2dsZSBIVFRQIHNlcnZlci4KICBpZiAoc2VydmVyLnJ1bm5pbmcpIHsKICAgIHNlcnZlckZ1dHVyZSA9IHNlcnZlci5zaHV0ZG93bih0cnVlKS50aGVuKF9jbGVhckZ1dHVyZSk7CiAgfSBlbHNlIHsKICAgIHNlcnZlckZ1dHVyZSA9IHNlcnZlci5zdGFydHVwKCkudGhlbihfY2xlYXJGdXR1cmUpOwogIH0KfQoKVGltZXIgX3JlZ2lzdGVyU2lnbmFsSGFuZGxlclRpbWVyOwoKX3JlZ2lzdGVyU2lnbmFsSGFuZGxlcigpIHsKICBfcmVnaXN0ZXJTaWduYWxIYW5kbGVyVGltZXIgPSBudWxsOwogIGlmIChfc2lnbmFsV2F0Y2ggPT0gbnVsbCkgewogICAgLy8gQ2Fubm90IHJlZ2lzdGVyIGZvciBzaWduYWxzLgogICAgcmV0dXJuOwogIH0KICBpZiAoX2lzV2luZG93cyB8fCBfaXNGdWNoc2lhKSB7CiAgICAvLyBDYW5ub3QgcmVnaXN0ZXIgZm9yIHNpZ25hbHMgb24gV2luZG93cyBvciBGdWNoc2lhLgogICAgcmV0dXJuOwogIH0KICBfc2lnbmFsU3Vic2NyaXB0aW9uID0gX3NpZ25hbFdhdGNoKFByb2Nlc3NTaWduYWwuU0lHUVVJVCkubGlzdGVuKF9vblNpZ25hbCk7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgIWNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LnZtLnByb2R1Y3QiKSkKbWFpbigpIHsKICAvLyBTZXQgZW1iZWRkZXIgaG9va3MuCiAgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5jbGVhbnVwID0gY2xlYW51cENhbGxiYWNrOwogIFZNU2VydmljZUVtYmVkZGVySG9va3MuY3JlYXRlVGVtcERpciA9IGNyZWF0ZVRlbXBEaXJDYWxsYmFjazsKICBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLmRlbGV0ZURpciA9IGRlbGV0ZURpckNhbGxiYWNrOwogIFZNU2VydmljZUVtYmVkZGVySG9va3Mud3JpdGVGaWxlID0gd3JpdGVGaWxlQ2FsbGJhY2s7CiAgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy53cml0ZVN0cmVhbUZpbGUgPSB3cml0ZVN0cmVhbUZpbGVDYWxsYmFjazsKICBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLnJlYWRGaWxlID0gcmVhZEZpbGVDYWxsYmFjazsKICBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLmxpc3RGaWxlcyA9IGxpc3RGaWxlc0NhbGxiYWNrOwogIFZNU2VydmljZUVtYmVkZGVySG9va3Muc2VydmVySW5mb3JtYXRpb24gPSBzZXJ2ZXJJbmZvcm1hdGlvbkNhbGxiYWNrOwogIFZNU2VydmljZUVtYmVkZGVySG9va3Mud2ViU2VydmVyQ29udHJvbCA9IHdlYlNlcnZlckNvbnRyb2xDYWxsYmFjazsKICAvLyBBbHdheXMgaW5zdGFudGlhdGUgdGhlIHZtc2VydmljZSBvYmplY3Qgc28gdGhhdCB0aGUgZXhpdCBtZXNzYWdlCiAgLy8gY2FuIGJlIGRlbGl2ZXJlZCBhbmQgd2FpdGluZyBsb2FkZXJzIGNhbiBiZSBjYW5jZWxsZWQuCiAgbmV3IFZNU2VydmljZSgpOwogIGlmIChfYXV0b1N0YXJ0KSB7CiAgICBfbGF6eVNlcnZlckJvb3QoKTsKICAgIHNlcnZlci5zdGFydHVwKCk7CiAgICAvLyBJdCdzIGp1c3QgaGVyZSB0byBwdXNoIGFuIGV2ZW50IG9uIHRoZSBldmVudCBsb29wIHNvIHRoYXQgd2UgaW52b2tlIHRoZQogICAgLy8gc2NoZWR1bGVkIG1pY3JvdGFza3MuCiAgICBUaW1lci5ydW4oKCkge30pOwogIH0KICBzY3JpcHRMb2FkUG9ydC5oYW5kbGVyID0gX3Byb2Nlc3NMb2FkUmVxdWVzdDsKICAvLyBSZWdpc3RlciBzaWduYWwgaGFuZGxlciBhZnRlciBhIHNtYWxsIGRlbGF5IHRvIGF2b2lkIHN0YWxsaW5nIG1haW4KICAvLyBpc29sYXRlIHN0YXJ0dXAuCiAgX3JlZ2lzdGVyU2lnbmFsSGFuZGxlclRpbWVyID0gbmV3IFRpbWVyKHNob3J0RGVsYXksIF9yZWdpc3RlclNpZ25hbEhhbmRsZXIpOwogIHJldHVybiBzY3JpcHRMb2FkUG9ydDsKfQoKX3NodXRkb3duKCkgbmF0aXZlICJWTVNlcnZpY2VJT19TaHV0ZG93biI7CoEPAE5OPAEWARUaFxIXGhoBFBQBNBoLGgwmGhEwGhkqGhsaGRoZGhIZARAPHQEUGAwEHCEbC1ECASEVJiUoIAQYCiIWOAYELSooBC8PAgE3QEUpPC8QAgErLyUCARUmLxEZARkmKDQfGwYxHiQEAgEVTAFIMyQdAUEjNRsYIAQBHiomNhQWDw8IBgQBHRIdGAQCATwyAgFKJSYyHRkEKB8WAgE1JSMCAUosISopKTcoMislQR8+FwYEEQIBMBUfAgE6FSISIQQBEBwhCyEhBAIBFxcCASIeFgwEFRkYPQs4BAIBIwEbJh4kDAQiOgwETwIBSgkZNEA4OEQ2OEhGRjwTFBcWTx0WBDBIFk8ZAgErARFkYXJ0OnZtc2VydmljZV9pbzVvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL3Ztc2VydmljZS9sb2FkZXIuZGFydMAAiOsvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiB2bXNlcnZpY2VfaW87Cgpfc2FuaXRpemVXaW5kb3dzUGF0aChwYXRoKSB7CiAgLy8gRm9yIFdpbmRvd3Mgd2UgbmVlZCB0byBtYXNzYWdlIHRoZSBwYXRocyBhIGJpdCBhY2NvcmRpbmcgdG8KICAvLyBodHRwOi8vYmxvZ3MubXNkbi5jb20vYi9pZS9hcmNoaXZlLzIwMDYvMTIvMDYvZmlsZS11cmlzLWluLXdpbmRvd3MuYXNweAogIC8vCiAgLy8gQ29udmVydAogIC8vIEM6XG9uZVx0d29cdGhyZWUKICAvLyB0bwogIC8vIC9DOi9vbmUvdHdvL3RocmVlCgogIGlmIChfaXNXaW5kb3dzID09IGZhbHNlKSB7CiAgICAvLyBEbyBub3RoaW5nIHdoZW4gbm90IHJ1bm5pbmcgV2luZG93cy4KICAgIHJldHVybiBwYXRoOwogIH0KCiAgdmFyIGZpeGVkUGF0aCA9ICIke3BhdGgucmVwbGFjZUFsbCgnXFwnLCAnLycpfSI7CgogIGlmICgocGF0aC5sZW5ndGggPiAyKSAmJiAocGF0aFsxXSA9PSAnOicpKSB7CiAgICAvLyBQYXRoIGJlZ2lucyB3aXRoIGEgZHJpdmUgbGV0dGVyLgogICAgcmV0dXJuICcvJGZpeGVkUGF0aCc7CiAgfQoKICByZXR1cm4gZml4ZWRQYXRoOwp9CgpfdHJpbVdpbmRvd3NQYXRoKHBhdGgpIHsKICAvLyBDb252ZXJ0IC9YOi8gdG8gWDovLgogIGlmIChfaXNXaW5kb3dzID09IGZhbHNlKSB7CiAgICAvLyBEbyBub3RoaW5nIHdoZW4gbm90IHJ1bm5pbmcgV2luZG93cy4KICAgIHJldHVybiBwYXRoOwogIH0KICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpIHx8IChwYXRoLmxlbmd0aCA8IDMpKSB7CiAgICByZXR1cm4gcGF0aDsKICB9CiAgLy8gTWF0Y2ggJy8/OicuCiAgaWYgKChwYXRoWzBdID09ICcvJykgJiYgKHBhdGhbMl0gPT0gJzonKSkgewogICAgLy8gUmVtb3ZlIGxlYWRpbmcgJy8nLgogICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDEpOwogIH0KICByZXR1cm4gcGF0aDsKfQoKLy8gRW5zdXJlIHdlIGhhdmUgYSB0cmFpbGluZyBzbGFzaCBjaGFyYWN0ZXIuCl9lbmZvcmNlVHJhaWxpbmdTbGFzaCh1cmkpIHsKICBpZiAoIXVyaS5lbmRzV2l0aCgnLycpKSB7CiAgICByZXR1cm4gJyR1cmkvJzsKICB9CiAgcmV0dXJuIHVyaTsKfQoKY2xhc3MgRmlsZVJlcXVlc3QgewogIGZpbmFsIFNlbmRQb3J0IHNwOwogIGZpbmFsIGludCB0YWc7CiAgZmluYWwgVXJpIHVyaTsKICBmaW5hbCBVcmkgcmVzb2x2ZWRVcmk7CiAgZmluYWwgU3RyaW5nIGxpYnJhcnlVcmw7CiAgRmlsZVJlcXVlc3QodGhpcy5zcCwgdGhpcy50YWcsIHRoaXMudXJpLCB0aGlzLnJlc29sdmVkVXJpLCB0aGlzLmxpYnJhcnlVcmwpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmJvb2wgX3RyYWNlTG9hZGluZyA9IGZhbHNlOwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmJvb2wgX2RldGVybWluaXN0aWMgPSBmYWxzZTsKCi8vIFN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXNvbGF0ZSB0aGF0IGlzIHVzZWQgZm9yIGxvYWRpbmcuCmNsYXNzIElzb2xhdGVMb2FkZXJTdGF0ZSBleHRlbmRzIElzb2xhdGVFbWJlZGRlckRhdGEgewogIElzb2xhdGVMb2FkZXJTdGF0ZSh0aGlzLmlzb2xhdGVJZCk7CgogIGZpbmFsIGludCBpc29sYXRlSWQ7CiAgYm9vbCBfZGVhZCA9IGZhbHNlOwogIFNlbmRQb3J0IHNwOwoKICB2b2lkIGluaXQoU3RyaW5nIHBhY2thZ2VSb290RmxhZywgU3RyaW5nIHBhY2thZ2VzQ29uZmlnRmxhZywKICAgICAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksIFN0cmluZyByb290U2NyaXB0KSB7CiAgICBpZiAoX2RlYWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gX3dvcmtpbmdEaXJlY3RvcnkgbXVzdCBiZSBzZXQgZmlyc3QuCiAgICBfd29ya2luZ0RpcmVjdG9yeSA9IG5ldyBVcmkuZGlyZWN0b3J5KHdvcmtpbmdEaXJlY3RvcnkpOwogICAgaWYgKHJvb3RTY3JpcHQgIT0gbnVsbCkgewogICAgICBfcm9vdFNjcmlwdCA9IFVyaS5wYXJzZShyb290U2NyaXB0KTsKICAgIH0KICAgIC8vIElmIHRoZSAtLXBhY2thZ2Utcm9vdCBmbGFnIHdhcyBwYXNzZWQuCiAgICBpZiAocGFja2FnZVJvb3RGbGFnICE9IG51bGwpIHsKICAgICAgX3NldFBhY2thZ2VSb290KHBhY2thZ2VSb290RmxhZyk7CiAgICB9CiAgICAvLyBJZiB0aGUgLS1wYWNrYWdlcyBmbGFnIHdhcyBwYXNzZWQuCiAgICBpZiAocGFja2FnZXNDb25maWdGbGFnICE9IG51bGwpIHsKICAgICAgX3NldFBhY2thZ2VzQ29uZmlnKHBhY2thZ2VzQ29uZmlnRmxhZyk7CiAgICB9CiAgfQoKICB2b2lkIHVwZGF0ZVBhY2thZ2VNYXAoU3RyaW5nIHBhY2thZ2VzQ29uZmlnRmxhZykgewogICAgaWYgKHBhY2thZ2VzQ29uZmlnRmxhZyA9PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9wYWNrYWdlTWFwID0gbnVsbDsKICAgIF9zZXRQYWNrYWdlc0NvbmZpZyhwYWNrYWdlc0NvbmZpZ0ZsYWcpOwogIH0KCiAgdm9pZCBjbGVhbnVwKCkgewogICAgX2RlYWQgPSB0cnVlOwogICAgaWYgKF9wYWNrYWdlc1BvcnQgIT0gbnVsbCkgewogICAgICBfcGFja2FnZXNQb3J0LmNsb3NlKCk7CiAgICAgIF9wYWNrYWdlc1BvcnQgPSBudWxsOwogICAgfQogIH0KCiAgLy8gVGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gdGhlIGVtYmVkZGVyIHN0YXJ0ZWQuCiAgVXJpIF93b3JraW5nRGlyZWN0b3J5OwoKICAvLyBUaGUgcm9vdCBzY3JpcHQncyB1cmkuCiAgVXJpIF9yb290U2NyaXB0OwoKICAvLyBQYWNrYWdlcyBhcmUgZWl0aGVyIHJlc29sdmVkIGxvb2tpbmcgdXAgaW4gYSBtYXAgb3IgcmVzb2x2ZWQgZnJvbSB3aXRoaW4gYQogIC8vIHBhY2thZ2Ugcm9vdC4KICBib29sIGdldCBfcGFja2FnZXNSZWFkeSA9PgogICAgICAoX3BhY2thZ2VSb290ICE9IG51bGwpIHx8CiAgICAgIChfcGFja2FnZU1hcCAhPSBudWxsKSB8fAogICAgICAoX3BhY2thZ2VFcnJvciAhPSBudWxsKTsKCiAgLy8gRXJyb3Igc3RyaW5nIHNldCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcmVzb2x2aW5nIHBhY2thZ2UgY29uZmlndXJhdGlvbi4KICAvLyBGb3IgZXhhbXBsZSBub3QgZmluZGluZyBhIC5wYWNrYWdlcyBmaWxlIG9yIHBhY2thZ2VzLyBkaXJlY3RvcnksIG1hbGZvcm1lZAogIC8vIC5wYWNrYWdlcyBmaWxlIG9yIGFueSBvdGhlciByZWxhdGVkIGVycm9yLgogIFN0cmluZyBfcGFja2FnZUVycm9yID0gbnVsbDsKCiAgLy8gVGhlIGRpcmVjdG9yeSB0byBsb29rIGluIHRvIHJlc29sdmUgInBhY2thZ2U6IiBzY2hlbWUgVVJJcy4gQnkgZGVmYXVsdCBpdAogIC8vIGlzIHRoZSAncGFja2FnZXMnIGRpcmVjdG9yeSByaWdodCBuZXh0IHRvIHRoZSBzY3JpcHQuCiAgVXJpIF9wYWNrYWdlUm9vdCA9IG51bGw7CgogIC8vIFRoZSBtYXAgZGVzY3JpYmluZyBob3cgY2VydGFpbiBwYWNrYWdlIG5hbWVzIGFyZSBtYXBwZWQgdG8gVXJpcy4KICBVcmkgX3BhY2thZ2VDb25maWcgPSBudWxsOwogIE1hcDxTdHJpbmcsIFVyaT4gX3BhY2thZ2VNYXAgPSBudWxsOwoKICAvLyBXZSBpc3N1ZSBvbmx5IDE2IGNvbmN1cnJlbnQgY2FsbHMgdG8gRmlsZS5yZWFkQXNCeXRlcygpIHRvIHN0YXkgd2l0aGluCiAgLy8gcGxhdGZvcm0tc3BlY2lmaWMgcmVzb3VyY2UgbGltaXRzIChlLmcuIG1heCBvcGVuIGZpbGVzKS4gVGhlIHJlc3QgZ28gb24KICAvLyBfZmlsZVJlcXVlc3RRdWV1ZSBhbmQgYXJlIHByb2Nlc3NlZCB3aGVuIHdlIGNhbiBzYWZlbHkgaXNzdWUgdGhlbS4KICBzdGF0aWMgZmluYWwgaW50IF9tYXhGaWxlUmVxdWVzdHMgPSBfZGV0ZXJtaW5pc3RpYyA/IDEgOiAxNjsKICBpbnQgY3VycmVudEZpbGVSZXF1ZXN0cyA9IDA7CiAgZmluYWwgTGlzdDxGaWxlUmVxdWVzdD4gX2ZpbGVSZXF1ZXN0UXVldWUgPSBuZXcgTGlzdDxGaWxlUmVxdWVzdD4oKTsKCiAgYm9vbCBnZXQgc2hvdWxkSXNzdWVGaWxlUmVxdWVzdCA9PiBjdXJyZW50RmlsZVJlcXVlc3RzIDwgX21heEZpbGVSZXF1ZXN0czsKICB2b2lkIGVucXVldWVGaWxlUmVxdWVzdChGaWxlUmVxdWVzdCBmcikgewogICAgX2ZpbGVSZXF1ZXN0UXVldWUuYWRkKGZyKTsKICB9CgogIEZpbGVSZXF1ZXN0IGRlcXVldWVGaWxlUmVxdWVzdCgpIHsKICAgIGlmIChfZmlsZVJlcXVlc3RRdWV1ZS5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBfZmlsZVJlcXVlc3RRdWV1ZS5yZW1vdmVBdCgwKTsKICB9CgogIF9zZXRQYWNrYWdlUm9vdChTdHJpbmcgcGFja2FnZVJvb3QpIHsKICAgIHBhY2thZ2VSb290ID0gX3Nhbml0aXplV2luZG93c1BhdGgocGFja2FnZVJvb3QpOwogICAgaWYgKHBhY2thZ2VSb290LnN0YXJ0c1dpdGgoJ2ZpbGU6JykgfHwKICAgICAgICBwYWNrYWdlUm9vdC5zdGFydHNXaXRoKCdodHRwOicpIHx8CiAgICAgICAgcGFja2FnZVJvb3Quc3RhcnRzV2l0aCgnaHR0cHM6JykpIHsKICAgICAgcGFja2FnZVJvb3QgPSBfZW5mb3JjZVRyYWlsaW5nU2xhc2gocGFja2FnZVJvb3QpOwogICAgICBfcGFja2FnZVJvb3QgPSBfd29ya2luZ0RpcmVjdG9yeS5yZXNvbHZlKHBhY2thZ2VSb290KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhY2thZ2VSb290ID0gX3Nhbml0aXplV2luZG93c1BhdGgocGFja2FnZVJvb3QpOwogICAgICBwYWNrYWdlUm9vdCA9IF90cmltV2luZG93c1BhdGgocGFja2FnZVJvb3QpOwogICAgICBfcGFja2FnZVJvb3QgPQogICAgICAgICAgX3dvcmtpbmdEaXJlY3RvcnkucmVzb2x2ZVVyaShuZXcgVXJpLmRpcmVjdG9yeShwYWNrYWdlUm9vdCkpOwogICAgfQogIH0KCiAgX3NldFBhY2thZ2VzQ29uZmlnKFN0cmluZyBwYWNrYWdlc1BhcmFtKSB7CiAgICB2YXIgcGFja2FnZXNOYW1lID0gX3Nhbml0aXplV2luZG93c1BhdGgocGFja2FnZXNQYXJhbSk7CiAgICB2YXIgcGFja2FnZXNVcmkgPSBVcmkucGFyc2UocGFja2FnZXNOYW1lKTsKICAgIGlmIChwYWNrYWdlc1VyaS5zY2hlbWUgPT0gJycpIHsKICAgICAgLy8gU2NyaXB0IGRvZXMgbm90IGhhdmUgYSBzY2hlbWUsIGFzc3VtZSB0aGF0IGl0IGlzIGEgcGF0aCwKICAgICAgLy8gcmVzb2x2ZSBpdCBhZ2FpbnN0IHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KICAgICAgcGFja2FnZXNVcmkgPSBfd29ya2luZ0RpcmVjdG9yeS5yZXNvbHZlVXJpKHBhY2thZ2VzVXJpKTsKICAgIH0KICAgIF9yZXF1ZXN0UGFja2FnZXNNYXAocGFja2FnZXNVcmkpOwogICAgX3BlbmRpbmdQYWNrYWdlTG9hZHMuYWRkKCgpIHsKICAgICAgLy8gRHVtbXkgYWN0aW9uLgogICAgfSk7CiAgfQoKICAvLyBIYW5kbGluZyBvZiBhY2Nlc3MgdG8gdGhlIHBhY2thZ2Ugcm9vdCBvciBwYWNrYWdlIG1hcCBmcm9tIHVzZXIgY29kZS4KICBfdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uKGFjdGlvbikgewogICAgaWYgKF9wYWNrYWdlc1JlYWR5KSB7CiAgICAgIC8vIFBhY2thZ2VzIGFyZSByZWFkeS4gRXhlY3V0ZSB0aGUgYWN0aW9uIG5vdy4KICAgICAgYWN0aW9uKCk7CiAgICB9IGVsc2UgewogICAgICBpZiAoX3BlbmRpbmdQYWNrYWdlTG9hZHMuaXNFbXB0eSkgewogICAgICAgIC8vIFBhY2thZ2UgcmVzb2x1dGlvbiBoYXMgbm90IGJlZW4gc2V0dXAgeWV0LCBhbmQgdGhpcyBpcyB0aGUgZmlyc3QKICAgICAgICAvLyByZXF1ZXN0IGZvciBwYWNrYWdlIHJlc29sdXRpb24gJiBsb2FkaW5nLgogICAgICAgIF9yZXF1ZXN0UGFja2FnZXNNYXAoKTsKICAgICAgfQogICAgICAvLyBSZWdpc3RlciB0aGUgYWN0aW9uIGZvciB3aGVuIHRoZSBwYWNrYWdlIHJlc29sdXRpb24gaXMgcmVhZHkuCiAgICAgIF9wZW5kaW5nUGFja2FnZUxvYWRzLmFkZChhY3Rpb24pOwogICAgfQogIH0KCiAgLy8gQSBsaXN0IG9mIGNhbGxiYWNrcyB3aGljaCBzaG91bGQgYmUgaW52b2tlZCBhZnRlciB0aGUgcGFja2FnZSBtYXAgaGFzIGJlZW4KICAvLyBsb2FkZWQuCiAgTGlzdDxGdW5jdGlvbj4gX3BlbmRpbmdQYWNrYWdlTG9hZHMgPSBbXTsKCiAgLy8gR2l2ZW4gYSB1cmkgd2l0aCBhICdwYWNrYWdlJyBzY2hlbWUsIHJldHVybiBhIFVyaSB0aGF0IGlzIHByZWZpeGVkIHdpdGgKICAvLyB0aGUgcGFja2FnZSByb290IG9yIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZSBwYWNrYWdlIGNvbmZpZ3VyYXRpb24uCiAgVXJpIF9yZXNvbHZlUGFja2FnZVVyaShVcmkgdXJpKSB7CiAgICBhc3NlcnQodXJpLnNjaGVtZSA9PSAicGFja2FnZSIpOwogICAgYXNzZXJ0KF9wYWNrYWdlc1JlYWR5KTsKCiAgICBpZiAodXJpLmhvc3QuaXNOb3RFbXB0eSkgewogICAgICB2YXIgcGF0aCA9ICcke3VyaS5ob3N0fSR7dXJpLnBhdGh9JzsKICAgICAgdmFyIHJpZ2h0ID0gJ3BhY2thZ2U6JHBhdGgnOwogICAgICB2YXIgd3JvbmcgPSAncGFja2FnZTovLyRwYXRoJzsKCiAgICAgIHRocm93ICJVUklzIHVzaW5nIHRoZSAncGFja2FnZTonIHNjaGVtZSBzaG91bGQgbG9vayBsaWtlICIKICAgICAgICAgICInJHJpZ2h0Jywgbm90ICckd3JvbmcnLiI7CiAgICB9CgogICAgdmFyIHBhY2thZ2VOYW1lRW5kID0gdXJpLnBhdGguaW5kZXhPZignLycpOwogICAgaWYgKHBhY2thZ2VOYW1lRW5kID09IDApIHsKICAgICAgLy8gUGFja2FnZSBVUklzIG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBwYWNrYWdlIG5hbWUgKG5vdCBzdGFydCB3aXRoICIvIikuCiAgICAgIHRocm93ICJVUklTIHVzaW5nIHRoZSAncGFja2FnZTonIHNjaGVtZSBzaG91bGQgbG9vayBsaWtlICIKICAgICAgICAgICIncGFja2FnZTpwYWNrYWdlTmFtZSR7dXJpLnBhdGh9Jywgbm90ICdwYWNrYWdlOiR7dXJpLnBhdGh9JyI7CiAgICB9CiAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICBfbG9nKCdSZXNvbHZpbmcgcGFja2FnZSB3aXRoIHVyaSBwYXRoOiAke3VyaS5wYXRofScpOwogICAgfQogICAgdmFyIHJlc29sdmVkVXJpOwogICAgaWYgKF9wYWNrYWdlRXJyb3IgIT0gbnVsbCkgewogICAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coIlJlc29sdmluZyBwYWNrYWdlIHdpdGggcGVuZGluZyByZXNvbHV0aW9uIGVycm9yOiAkX3BhY2thZ2VFcnJvciIpOwogICAgICB9CiAgICAgIHRocm93IF9wYWNrYWdlRXJyb3I7CiAgICB9IGVsc2UgaWYgKF9wYWNrYWdlUm9vdCAhPSBudWxsKSB7CiAgICAgIHJlc29sdmVkVXJpID0gX3BhY2thZ2VSb290LnJlc29sdmUodXJpLnBhdGgpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKHBhY2thZ2VOYW1lRW5kIDwgMCkgewogICAgICAgIC8vIFBhY2thZ2UgVVJJcyBtdXN0IGhhdmUgYSBwYXRoIGFmdGVyIHRoZSBwYWNrYWdlIG5hbWUsIGV2ZW4gaWYgaXQncwogICAgICAgIC8vIGp1c3QgIi8iLgogICAgICAgIHRocm93ICJVUklTIHVzaW5nIHRoZSAncGFja2FnZTonIHNjaGVtZSBzaG91bGQgbG9vayBsaWtlICIKICAgICAgICAgICAgIidwYWNrYWdlOiR7dXJpLnBhdGh9LycsIG5vdCAncGFja2FnZToke3VyaS5wYXRofSciOwogICAgICB9CiAgICAgIHZhciBwYWNrYWdlTmFtZSA9IHVyaS5wYXRoLnN1YnN0cmluZygwLCBwYWNrYWdlTmFtZUVuZCk7CiAgICAgIHZhciBtYXBwaW5nID0gX3BhY2thZ2VNYXBbcGFja2FnZU5hbWVdOwogICAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coIk1hcHBlZCAnJHBhY2thZ2VOYW1lJyBwYWNrYWdlIHRvICckbWFwcGluZyciKTsKICAgICAgfQogICAgICBpZiAobWFwcGluZyA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgIk5vIG1hcHBpbmcgZm9yICckcGFja2FnZU5hbWUnIHBhY2thZ2Ugd2hlbiByZXNvbHZpbmcgJyR1cmknLiI7CiAgICAgIH0KICAgICAgdmFyIHBhdGg7CiAgICAgIGFzc2VydCh1cmkucGF0aC5sZW5ndGggPiBwYWNrYWdlTmFtZS5sZW5ndGgpOwogICAgICBwYXRoID0gdXJpLnBhdGguc3Vic3RyaW5nKHBhY2thZ2VOYW1lLmxlbmd0aCArIDEpOwogICAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coIlBhdGggdG8gYmUgcmVzb2x2ZWQgaW4gcGFja2FnZTogJHBhdGgiKTsKICAgICAgfQogICAgICByZXNvbHZlZFVyaSA9IG1hcHBpbmcucmVzb2x2ZShwYXRoKTsKICAgIH0KICAgIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIlJlc29sdmVkICckdXJpJyB0byAnJHJlc29sdmVkVXJpJy4iKTsKICAgIH0KICAgIHJldHVybiByZXNvbHZlZFVyaTsKICB9CgogIFJhd1JlY2VpdmVQb3J0IF9wYWNrYWdlc1BvcnQ7CgogIHZvaWQgX3JlcXVlc3RQYWNrYWdlc01hcChbVXJpIHBhY2thZ2VDb25maWddKSB7CiAgICBpZiAoX3BhY2thZ2VzUG9ydCAhPSBudWxsKSB7CiAgICAgIC8vIEFscmVhZHkgc2NoZWR1bGVkLgogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBDcmVhdGUgYSBwb3J0IHRvIHJlY2VpdmUgdGhlIHBhY2thZ2VzIG1hcCBvbi4KICAgIF9wYWNrYWdlc1BvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoX2hhbmRsZVBhY2thZ2VzUmVwbHkpOwogICAgdmFyIHNwID0gX3BhY2thZ2VzUG9ydC5zZW5kUG9ydDsKCiAgICBpZiAocGFja2FnZUNvbmZpZyAhPSBudWxsKSB7CiAgICAgIC8vIEV4cGxpY2l0bHkgc3BlY2lmaWVkIC5wYWNrYWdlcyBwYXRoLgogICAgICBfaGFuZGxlUGFja2FnZXNSZXF1ZXN0KHNwLCBfdHJhY2VMb2FkaW5nLCAtMiwgcGFja2FnZUNvbmZpZyk7CiAgICB9IGVsc2UgewogICAgICAvLyBTZWFyY2ggZm9yIC5wYWNrYWdlcyBzdGFydGluZyBhdCB0aGUgcm9vdCBzY3JpcHQuCiAgICAgIF9oYW5kbGVQYWNrYWdlc1JlcXVlc3Qoc3AsIF90cmFjZUxvYWRpbmcsIC0xLCBfcm9vdFNjcmlwdCk7CiAgICB9CgogICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygiUmVxdWVzdGVkIHBhY2thZ2VzIG1hcCBmb3IgJyRfcm9vdFNjcmlwdCcuIik7CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVQYWNrYWdlc1JlcGx5KG1zZykgewogICAgaWYgKF9wYWNrYWdlc1BvcnQgPT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBNYWtlIHN1cmUgdG8gY2xvc2UgdGhlIF9wYWNrYWdlUG9ydCBiZWZvcmUgYW55IG90aGVyIGFjdGlvbi4KICAgIF9wYWNrYWdlc1BvcnQuY2xvc2UoKTsKICAgIF9wYWNrYWdlc1BvcnQgPSBudWxsOwoKICAgIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIkdvdCBwYWNrYWdlcyByZXBseTogJG1zZyIpOwogICAgfQogICAgaWYgKG1zZyBpcyBTdHJpbmcpIHsKICAgICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJHb3QgZmFpbHVyZSByZXNwb25zZSBvbiBwYWNrYWdlIHBvcnQ6ICckbXNnJyIpOwogICAgICB9CiAgICAgIC8vIFJlbWVtYmVyIHRoZSBlcnJvciBtZXNzYWdlLgogICAgICBfcGFja2FnZUVycm9yID0gbXNnOwogICAgfSBlbHNlIGlmIChtc2cgaXMgTGlzdCkgewogICAgICBpZiAobXNnLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgICAgIF9sb2coIlJlY2VpdmVkIHBhY2thZ2Ugcm9vdDogJyR7bXNnWzBdfSciKTsKICAgICAgICB9CiAgICAgICAgX3BhY2thZ2VSb290ID0gVXJpLnBhcnNlKG1zZ1swXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRmlyc3QgZW50cnkgY29udGFpbnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb2FkZWQgLnBhY2thZ2VzIGZpbGUuCiAgICAgICAgYXNzZXJ0KChtc2cubGVuZ3RoICUgMikgPT0gMCk7CiAgICAgICAgYXNzZXJ0KG1zZy5sZW5ndGggPj0gMik7CiAgICAgICAgYXNzZXJ0KG1zZ1sxXSA9PSBudWxsKTsKICAgICAgICBfcGFja2FnZUNvbmZpZyA9IFVyaS5wYXJzZShtc2dbMF0pOwogICAgICAgIF9wYWNrYWdlTWFwID0gbmV3IE1hcDxTdHJpbmcsIFVyaT4oKTsKICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gMikgewogICAgICAgICAgLy8gVE9ETyhpcG9zdmEpOiBDb21wbGFpbiBhYm91dCBkdXBsaWNhdGUgZW50cmllcy4KICAgICAgICAgIF9wYWNrYWdlTWFwW21zZ1tpXV0gPSBVcmkucGFyc2UobXNnW2kgKyAxXSk7CiAgICAgICAgfQogICAgICAgIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICAgICAgICBfbG9nKCJTZXR1cCBwYWNrYWdlIG1hcDogJF9wYWNrYWdlTWFwIik7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBfcGFja2FnZUVycm9yID0gIkJhZCB0eXBlIG9mIHBhY2thZ2VzIHJlcGx5OiAke21zZy5ydW50aW1lVHlwZX0iOwogICAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coX3BhY2thZ2VFcnJvcik7CiAgICAgIH0KICAgIH0KCiAgICAvLyBSZXNvbHZlIGFsbCBwZW5kaW5nIHBhY2thZ2UgbG9hZHMgbm93IHRoYXQgd2Uga25vdyBob3cgdG8gcmVzb2x2ZSB0aGVtLgogICAgd2hpbGUgKF9wZW5kaW5nUGFja2FnZUxvYWRzLmxlbmd0aCA+IDApIHsKICAgICAgLy8gT3JkZXIgZG9lcyBub3QgbWF0dGVyIGFzIHdlIHF1ZXVlIGFsbCBvZiB0aGUgcmVxdWVzdHMgdXAgcmlnaHQgbm93LgogICAgICB2YXIgcmVxID0gX3BlbmRpbmdQYWNrYWdlTG9hZHMucmVtb3ZlTGFzdCgpOwogICAgICAvLyBDYWxsIHRoZSByZWdpc3RlcmVkIGNsb3N1cmUsIHRvIGhhbmRsZSB0aGUgZGVsYXllZCBhY3Rpb24uCiAgICAgIHJlcSgpOwogICAgfQogICAgLy8gUmVzZXQgdGhlIHBlbmRpbmcgcGFja2FnZSBsb2FkcyB0byBlbXB0eS4gU28gdGhhdCB3ZSBldmVudHVhbGx5IGNhbgogICAgLy8gZmluaXNoIGxvYWRpbmcuCiAgICBfcGVuZGluZ1BhY2thZ2VMb2FkcyA9IFtdOwogIH0KfQoKX2xvZyhtc2cpIHsKICBwcmludCgiJSAkbXNnIik7Cn0KCnZhciBfaHR0cENsaWVudDsKCi8vIFNlbmQgYSByZXNwb25zZSB0byB0aGUgcmVxdWVzdGluZyBpc29sYXRlLgp2b2lkIF9zZW5kUmVzb3VyY2VSZXNwb25zZShTZW5kUG9ydCBzcCwgaW50IHRhZywgVXJpIHVyaSwgVXJpIHJlc29sdmVkVXJpLAogICAgU3RyaW5nIGxpYnJhcnlVcmwsIGR5bmFtaWMgZGF0YSkgewogIGFzc2VydCgoZGF0YSBpcyBMaXN0PGludD4pIHx8IChkYXRhIGlzIFN0cmluZykpOwogIHZhciBtc2cgPSBuZXcgTGlzdCg1KTsKICBpZiAoZGF0YSBpcyBTdHJpbmcpIHsKICAgIC8vIFdlIGVuY291bnRlcmVkIGFuIGVycm9yLCBmbGlwIHRoZSBzaWduIG9mIHRoZSB0YWcgdG8gaW5kaWNhdGUgdGhhdC4KICAgIHRhZyA9IC10YWc7CiAgICBpZiAobGlicmFyeVVybCA9PSBudWxsKSB7CiAgICAgIGRhdGEgPSAnQ291bGQgbm90IGxvYWQgIiR1cmkiOiAkZGF0YSc7CiAgICB9IGVsc2UgewogICAgICBkYXRhID0gJ0NvdWxkIG5vdCBpbXBvcnQgIiR1cmkiIGZyb20gIiRsaWJyYXJ5VXJsIjogJGRhdGEnOwogICAgfQogIH0KICBtc2dbMF0gPSB0YWc7CiAgbXNnWzFdID0gdXJpLnRvU3RyaW5nKCk7CiAgbXNnWzJdID0gcmVzb2x2ZWRVcmkudG9TdHJpbmcoKTsKICBtc2dbM10gPSBsaWJyYXJ5VXJsOwogIG1zZ1s0XSA9IGRhdGE7CiAgc3Auc2VuZChtc2cpOwp9CgovLyBTZW5kIGEgcmVzcG9uc2UgdG8gdGhlIHJlcXVlc3RpbmcgaXNvbGF0ZS4Kdm9pZCBfc2VuZEV4dGVuc2lvbkltcG9ydFJlc3BvbnNlKAogICAgU2VuZFBvcnQgc3AsIFVyaSB1cmksIFN0cmluZyBsaWJyYXJ5VXJsLCBTdHJpbmcgcmVzb2x2ZWRVcmkpIHsKICB2YXIgbXNnID0gbmV3IExpc3QoNSk7CiAgaW50IHRhZyA9IF9EYXJ0X2tJbXBvcnRFeHRlbnNpb247CiAgaWYgKHJlc29sdmVkVXJpID09IG51bGwpIHsKICAgIC8vIFdlIGNvdWxkIG5vdCByZXNvbHZlIHRoZSBkYXJ0LWV4dDogdXJpLgogICAgdGFnID0gLXRhZzsKICAgIHJlc29sdmVkVXJpID0gJ0NvdWxkIG5vdCByZXNvbHZlICIkdXJpIiBmcm9tICIkbGlicmFyeVVybCInOwogIH0KICBtc2dbMF0gPSB0YWc7CiAgbXNnWzFdID0gdXJpLnRvU3RyaW5nKCk7CiAgbXNnWzJdID0gcmVzb2x2ZWRVcmk7CiAgbXNnWzNdID0gbGlicmFyeVVybDsKICBtc2dbNF0gPSByZXNvbHZlZFVyaTsKICBzcC5zZW5kKG1zZyk7Cn0KCnZvaWQgX2xvYWRIdHRwKAogICAgU2VuZFBvcnQgc3AsIGludCB0YWcsIFVyaSB1cmksIFVyaSByZXNvbHZlZFVyaSwgU3RyaW5nIGxpYnJhcnlVcmwpIHsKICBpZiAoX2h0dHBDbGllbnQgPT0gbnVsbCkgewogICAgX2h0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudCgpLi5tYXhDb25uZWN0aW9uc1Blckhvc3QgPSA2OwogIH0KICBfaHR0cENsaWVudAogICAgICAuZ2V0VXJsKHJlc29sdmVkVXJpKQogICAgICAudGhlbigoSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCkgPT4gcmVxdWVzdC5jbG9zZSgpKQogICAgICAudGhlbigoSHR0cENsaWVudFJlc3BvbnNlIHJlc3BvbnNlKSB7CiAgICB2YXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwogICAgcmVzcG9uc2UubGlzdGVuKGJ1aWxkZXIuYWRkLCBvbkRvbmU6ICgpIHsKICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT0gMjAwKSB7CiAgICAgICAgdmFyIG1zZyA9ICJGYWlsdXJlIGdldHRpbmcgJHJlc29sdmVkVXJpOlxuIgogICAgICAgICAgICAiICAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9ICR7cmVzcG9uc2UucmVhc29uUGhyYXNlfSI7CiAgICAgICAgX3NlbmRSZXNvdXJjZVJlc3BvbnNlKHNwLCB0YWcsIHVyaSwgcmVzb2x2ZWRVcmksIGxpYnJhcnlVcmwsIG1zZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3NlbmRSZXNvdXJjZVJlc3BvbnNlKAogICAgICAgICAgICBzcCwgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsLCBidWlsZGVyLnRha2VCeXRlcygpKTsKICAgICAgfQogICAgfSwgb25FcnJvcjogKGUpIHsKICAgICAgX3NlbmRSZXNvdXJjZVJlc3BvbnNlKAogICAgICAgICAgc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCwgZS50b1N0cmluZygpKTsKICAgIH0pOwogIH0pLmNhdGNoRXJyb3IoKGUpIHsKICAgIF9zZW5kUmVzb3VyY2VSZXNwb25zZShzcCwgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsLCBlLnRvU3RyaW5nKCkpOwogIH0pOwogIC8vIEl0J3MganVzdCBoZXJlIHRvIHB1c2ggYW4gZXZlbnQgb24gdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZSBpbnZva2UgdGhlCiAgLy8gc2NoZWR1bGVkIG1pY3JvdGFza3MuCiAgVGltZXIucnVuKCgpIHt9KTsKfQoKdm9pZCBfbG9hZEZpbGUoSXNvbGF0ZUxvYWRlclN0YXRlIGxvYWRlclN0YXRlLCBTZW5kUG9ydCBzcCwgaW50IHRhZywgVXJpIHVyaSwKICAgIFVyaSByZXNvbHZlZFVyaSwgU3RyaW5nIGxpYnJhcnlVcmwpIHsKICB2YXIgcGF0aCA9IHJlc29sdmVkVXJpLnRvRmlsZVBhdGgoKTsKICB2YXIgc291cmNlRmlsZSA9IG5ldyBGaWxlKHBhdGgpOwogIHNvdXJjZUZpbGUucmVhZEFzQnl0ZXMoKS50aGVuKChkYXRhKSB7CiAgICBfc2VuZFJlc291cmNlUmVzcG9uc2Uoc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCwgZGF0YSk7CiAgfSwgb25FcnJvcjogKGUpIHsKICAgIF9zZW5kUmVzb3VyY2VSZXNwb25zZShzcCwgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsLCBlLnRvU3RyaW5nKCkpOwogIH0pLndoZW5Db21wbGV0ZSgoKSB7CiAgICBsb2FkZXJTdGF0ZS5jdXJyZW50RmlsZVJlcXVlc3RzLS07CiAgICB3aGlsZSAobG9hZGVyU3RhdGUuc2hvdWxkSXNzdWVGaWxlUmVxdWVzdCkgewogICAgICBGaWxlUmVxdWVzdCBmciA9IGxvYWRlclN0YXRlLmRlcXVldWVGaWxlUmVxdWVzdCgpOwogICAgICBpZiAoZnIgPT0gbnVsbCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIF9sb2FkRmlsZSgKICAgICAgICAgIGxvYWRlclN0YXRlLCBmci5zcCwgZnIudGFnLCBmci51cmksIGZyLnJlc29sdmVkVXJpLCBmci5saWJyYXJ5VXJsKTsKICAgICAgbG9hZGVyU3RhdGUuY3VycmVudEZpbGVSZXF1ZXN0cysrOwogICAgfQogIH0pOwp9Cgp2b2lkIF9sb2FkRGF0YVVyaSgKICAgIFNlbmRQb3J0IHNwLCBpbnQgdGFnLCBVcmkgdXJpLCBVcmkgcmVzb2x2ZWRVcmksIFN0cmluZyBsaWJyYXJ5VXJsKSB7CiAgdHJ5IHsKICAgIHZhciBtaW1lID0gdXJpLmRhdGEubWltZVR5cGU7CiAgICBpZiAoKG1pbWUgIT0gImFwcGxpY2F0aW9uL2RhcnQiKSAmJiAobWltZSAhPSAidGV4dC9wbGFpbiIpKSB7CiAgICAgIHRocm93ICJNSU1FLXR5cGUgbXVzdCBiZSBhcHBsaWNhdGlvbi9kYXJ0IG9yIHRleHQvcGxhaW46ICRtaW1lIGdpdmVuLiI7CiAgICB9CiAgICB2YXIgY2hhcnNldCA9IHVyaS5kYXRhLmNoYXJzZXQ7CiAgICBpZiAoKGNoYXJzZXQgIT0gInV0Zi04IikgJiYgKGNoYXJzZXQgIT0gIlVTLUFTQ0lJIikpIHsKICAgICAgLy8gVGhlIEMrKyBwb3J0aW9uIG9mIHRoZSBlbWJlZGRlciBhc3N1bWVzIFVURi04LgogICAgICB0aHJvdyAiT25seSB1dGYtOCBvciBVUy1BU0NJSSBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZDogJGNoYXJzZXQgZ2l2ZW4uIjsKICAgIH0KICAgIF9zZW5kUmVzb3VyY2VSZXNwb25zZSgKICAgICAgICBzcCwgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsLCB1cmkuZGF0YS5jb250ZW50QXNCeXRlcygpKTsKICB9IGNhdGNoIChlKSB7CiAgICBfc2VuZFJlc291cmNlUmVzcG9uc2Uoc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCwKICAgICAgICAiSW52YWxpZCBkYXRhIHVyaSAoJHVyaSk6XG4gICRlIik7CiAgfQp9CgovLyBMb2FkaW5nIGEgcGFja2FnZSBVUkkgbmVlZHMgdG8gZmlyc3QgbWFwIHRoZSBwYWNrYWdlIG5hbWUgdG8gYSBsb2FkYWJsZQovLyBVUkkuCl9sb2FkUGFja2FnZShJc29sYXRlTG9hZGVyU3RhdGUgbG9hZGVyU3RhdGUsIFNlbmRQb3J0IHNwLCBib29sIHRyYWNlTG9hZGluZywKICAgIGludCB0YWcsIFVyaSB1cmksIFVyaSByZXNvbHZlZFVyaSwgU3RyaW5nIGxpYnJhcnlVcmwpIHsKICBpZiAobG9hZGVyU3RhdGUuX3BhY2thZ2VzUmVhZHkpIHsKICAgIHZhciByZXNvbHZlZFVyaTsKICAgIHRyeSB7CiAgICAgIHJlc29sdmVkVXJpID0gbG9hZGVyU3RhdGUuX3Jlc29sdmVQYWNrYWdlVXJpKHVyaSk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJFeGNlcHRpb24gKCRlKSB3aGVuIHJlc29sdmluZyBwYWNrYWdlIFVSSTogJHVyaSIpOwogICAgICB9CiAgICAgIC8vIFJlcG9ydCBlcnJvci4KICAgICAgX3NlbmRSZXNvdXJjZVJlc3BvbnNlKAogICAgICAgICAgc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCwgZS50b1N0cmluZygpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gUmVjdXJzaXZlbHkgY2FsbCB3aXRoIHRoZSBuZXcgcmVzb2x2ZWQgdXJpLgogICAgX2hhbmRsZVJlc291cmNlUmVxdWVzdCgKICAgICAgICBsb2FkZXJTdGF0ZSwgc3AsIHRyYWNlTG9hZGluZywgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsKTsKICB9IGVsc2UgewogICAgaWYgKGxvYWRlclN0YXRlLl9wZW5kaW5nUGFja2FnZUxvYWRzLmlzRW1wdHkpIHsKICAgICAgLy8gUGFja2FnZSByZXNvbHV0aW9uIGhhcyBub3QgYmVlbiBzZXR1cCB5ZXQsIGFuZCB0aGlzIGlzIHRoZSBmaXJzdAogICAgICAvLyByZXF1ZXN0IGZvciBwYWNrYWdlIHJlc29sdXRpb24gJiBsb2FkaW5nLgogICAgICBsb2FkZXJTdGF0ZS5fcmVxdWVzdFBhY2thZ2VzTWFwKCk7CiAgICB9CiAgICAvLyBSZWdpc3RlciB0aGUgYWN0aW9uIG9mIGxvYWRpbmcgdGhpcyBwYWNrYWdlIG9uY2UgdGhlIHBhY2thZ2UgcmVzb2x1dGlvbgogICAgLy8gaXMgcmVhZHkuCiAgICBsb2FkZXJTdGF0ZS5fcGVuZGluZ1BhY2thZ2VMb2Fkcy5hZGQoKCkgewogICAgICBfaGFuZGxlUmVzb3VyY2VSZXF1ZXN0KAogICAgICAgICAgbG9hZGVyU3RhdGUsIHNwLCB0cmFjZUxvYWRpbmcsIHRhZywgdXJpLCB1cmksIGxpYnJhcnlVcmwpOwogICAgfSk7CiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIlBlbmRpbmcgcGFja2FnZSBsb2FkIG9mICckdXJpJzogIgogICAgICAgICAgIiR7bG9hZGVyU3RhdGUuX3BlbmRpbmdQYWNrYWdlTG9hZHMubGVuZ3RofSBwZW5kaW5nIik7CiAgICB9CiAgfQp9CgovLyBUT0RPKGpvaG5tY2N1dGNoYW4pOiBUaGlzIGFuZCBtb3N0IG90aGVyIHRvcCBsZXZlbCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlCi8vIHNob3VsZCBiZSB0dXJuZWQgaW50byBtZXRob2RzIG9uIHRoZSBJc29sYXRlTG9hZGVyU3RhdGUgY2xhc3MuCl9oYW5kbGVSZXNvdXJjZVJlcXVlc3QoSXNvbGF0ZUxvYWRlclN0YXRlIGxvYWRlclN0YXRlLCBTZW5kUG9ydCBzcCwKICAgIGJvb2wgdHJhY2VMb2FkaW5nLCBpbnQgdGFnLCBVcmkgdXJpLCBVcmkgcmVzb2x2ZWRVcmksIFN0cmluZyBsaWJyYXJ5VXJsKSB7CiAgaWYgKHJlc29sdmVkVXJpLnNjaGVtZSA9PSAnJyB8fCByZXNvbHZlZFVyaS5zY2hlbWUgPT0gJ2ZpbGUnKSB7CiAgICBpZiAobG9hZGVyU3RhdGUuc2hvdWxkSXNzdWVGaWxlUmVxdWVzdCkgewogICAgICBfbG9hZEZpbGUobG9hZGVyU3RhdGUsIHNwLCB0YWcsIHVyaSwgcmVzb2x2ZWRVcmksIGxpYnJhcnlVcmwpOwogICAgICBsb2FkZXJTdGF0ZS5jdXJyZW50RmlsZVJlcXVlc3RzKys7CiAgICB9IGVsc2UgewogICAgICBGaWxlUmVxdWVzdCBmciA9IG5ldyBGaWxlUmVxdWVzdChzcCwgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsKTsKICAgICAgbG9hZGVyU3RhdGUuZW5xdWV1ZUZpbGVSZXF1ZXN0KGZyKTsKICAgIH0KICB9IGVsc2UgaWYgKChyZXNvbHZlZFVyaS5zY2hlbWUgPT0gJ2h0dHAnKSB8fAogICAgICAocmVzb2x2ZWRVcmkuc2NoZW1lID09ICdodHRwcycpKSB7CiAgICBfbG9hZEh0dHAoc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCk7CiAgfSBlbHNlIGlmICgocmVzb2x2ZWRVcmkuc2NoZW1lID09ICdkYXRhJykpIHsKICAgIF9sb2FkRGF0YVVyaShzcCwgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsKTsKICB9IGVsc2UgaWYgKChyZXNvbHZlZFVyaS5zY2hlbWUgPT0gJ3BhY2thZ2UnKSkgewogICAgX2xvYWRQYWNrYWdlKAogICAgICAgIGxvYWRlclN0YXRlLCBzcCwgdHJhY2VMb2FkaW5nLCB0YWcsIHVyaSwgcmVzb2x2ZWRVcmksIGxpYnJhcnlVcmwpOwogIH0gZWxzZSB7CiAgICBfc2VuZFJlc291cmNlUmVzcG9uc2UoCiAgICAgICAgc3AsCiAgICAgICAgdGFnLAogICAgICAgIHVyaSwKICAgICAgICByZXNvbHZlZFVyaSwKICAgICAgICBsaWJyYXJ5VXJsLAogICAgICAgICdVbmtub3duIHNjaGVtZSAoJHtyZXNvbHZlZFVyaS5zY2hlbWV9KSBmb3IgJwogICAgICAgICckcmVzb2x2ZWRVcmknKTsKICB9Cn0KCi8vIEhhbmRsaW5nIG9mIHBhY2thZ2VzIHJlcXVlc3RzLiBGaW5kaW5nIGFuZCBwYXJzaW5nIG9mIC5wYWNrYWdlcyBmaWxlIG9yCi8vIHBhY2thZ2VzLyBkaXJlY3Rvcmllcy4KY29uc3QgX0xGID0gMHgwQTsKY29uc3QgX0NSID0gMHgwRDsKY29uc3QgX1NQQUNFID0gMHgyMDsKY29uc3QgX0hBU0ggPSAweDIzOwpjb25zdCBfRE9UID0gMHgyRTsKY29uc3QgX0NPTE9OID0gMHgzQTsKY29uc3QgX0RFTCA9IDB4N0Y7Cgpjb25zdCBfaW52YWxpZFBhY2thZ2VOYW1lQ2hhcnMgPSBjb25zdCBbCiAgdHJ1ZSwgLy8gIHNwYWNlCiAgZmFsc2UsIC8vICEKICB0cnVlLCAvLyAgIgogIHRydWUsIC8vICAjCiAgZmFsc2UsIC8vICQKICB0cnVlLCAvLyAgJQogIGZhbHNlLCAvLyAmCiAgZmFsc2UsIC8vICcKICBmYWxzZSwgLy8gKAogIGZhbHNlLCAvLyApCiAgZmFsc2UsIC8vICoKICBmYWxzZSwgLy8gKwogIGZhbHNlLCAvLyAsCiAgZmFsc2UsIC8vIC0KICBmYWxzZSwgLy8gLgogIHRydWUsIC8vICAvCiAgZmFsc2UsIC8vIDAKICBmYWxzZSwgLy8gMQogIGZhbHNlLCAvLyAyCiAgZmFsc2UsIC8vIDMKICBmYWxzZSwgLy8gNAogIGZhbHNlLCAvLyA1CiAgZmFsc2UsIC8vIDYKICBmYWxzZSwgLy8gNwogIGZhbHNlLCAvLyA4CiAgZmFsc2UsIC8vIDkKICB0cnVlLCAvLyAgOgogIGZhbHNlLCAvLyA7CiAgdHJ1ZSwgLy8gIDwKICBmYWxzZSwgLy8gPQogIHRydWUsIC8vICA+CiAgdHJ1ZSwgLy8gID8KICBmYWxzZSwgLy8gQAogIGZhbHNlLCAvLyBBCiAgZmFsc2UsIC8vIEIKICBmYWxzZSwgLy8gQwogIGZhbHNlLCAvLyBECiAgZmFsc2UsIC8vIEUKICBmYWxzZSwgLy8gRgogIGZhbHNlLCAvLyBHCiAgZmFsc2UsIC8vIEgKICBmYWxzZSwgLy8gSQogIGZhbHNlLCAvLyBKCiAgZmFsc2UsIC8vIEsKICBmYWxzZSwgLy8gTAogIGZhbHNlLCAvLyBNCiAgZmFsc2UsIC8vIE4KICBmYWxzZSwgLy8gTwogIGZhbHNlLCAvLyBQCiAgZmFsc2UsIC8vIFEKICBmYWxzZSwgLy8gUgogIGZhbHNlLCAvLyBTCiAgZmFsc2UsIC8vIFQKICBmYWxzZSwgLy8gVQogIGZhbHNlLCAvLyBWCiAgZmFsc2UsIC8vIFcKICBmYWxzZSwgLy8gWAogIGZhbHNlLCAvLyBZCiAgZmFsc2UsIC8vIFoKICB0cnVlLCAvLyAgWwogIHRydWUsIC8vICBcCiAgdHJ1ZSwgLy8gIF0KICB0cnVlLCAvLyAgXgogIGZhbHNlLCAvLyBfCiAgdHJ1ZSwgLy8gIGAKICBmYWxzZSwgLy8gYQogIGZhbHNlLCAvLyBiCiAgZmFsc2UsIC8vIGMKICBmYWxzZSwgLy8gZAogIGZhbHNlLCAvLyBlCiAgZmFsc2UsIC8vIGYKICBmYWxzZSwgLy8gZwogIGZhbHNlLCAvLyBoCiAgZmFsc2UsIC8vIGkKICBmYWxzZSwgLy8gagogIGZhbHNlLCAvLyBrCiAgZmFsc2UsIC8vIGwKICBmYWxzZSwgLy8gbQogIGZhbHNlLCAvLyBuCiAgZmFsc2UsIC8vIG8KICBmYWxzZSwgLy8gcAogIGZhbHNlLCAvLyBxCiAgZmFsc2UsIC8vIHIKICBmYWxzZSwgLy8gcwogIGZhbHNlLCAvLyB0CiAgZmFsc2UsIC8vIHUKICBmYWxzZSwgLy8gdgogIGZhbHNlLCAvLyB3CiAgZmFsc2UsIC8vIHgKICBmYWxzZSwgLy8geQogIGZhbHNlLCAvLyB6CiAgdHJ1ZSwgLy8gIHsKICB0cnVlLCAvLyAgfAogIHRydWUsIC8vICB9CiAgZmFsc2UsIC8vIH4KICB0cnVlLCAvLyAgREVMCl07CgpfcGFyc2VQYWNrYWdlc0ZpbGUoCiAgICBTZW5kUG9ydCBzcCwgYm9vbCB0cmFjZUxvYWRpbmcsIFVyaSBwYWNrYWdlc0ZpbGUsIExpc3Q8aW50PiBkYXRhKSB7CiAgLy8gVGhlIGZpcnN0IGVudHJ5IGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgaWRlbnRpZmllZCAucGFja2FnZXMgZmlsZQogIC8vIGluc3RlYWQgb2YgYSBtYXBwaW5nLgogIHZhciByZXN1bHQgPSBbcGFja2FnZXNGaWxlLnRvU3RyaW5nKCksIG51bGxdOwogIHZhciBpbmRleCA9IDA7CiAgdmFyIGxlbiA9IGRhdGEubGVuZ3RoOwogIHdoaWxlIChpbmRleCA8IGxlbikgewogICAgdmFyIHN0YXJ0ID0gaW5kZXg7CiAgICB2YXIgY2hhciA9IGRhdGFbaW5kZXhdOwogICAgaWYgKChjaGFyID09IF9DUikgfHwgKGNoYXIgPT0gX0xGKSkgewogICAgICAvLyBTa2lwcGluZyBlbXB0eSBsaW5lcy4KICAgICAgaW5kZXgrKzsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gSWRlbnRpZnkgc3BsaXQgd2l0aGluIHRoZSBsaW5lIGFuZCBlbmQgb2YgdGhlIGxpbmUuCiAgICB2YXIgc2VwYXJhdG9yID0gLTE7CiAgICB2YXIgZW5kID0gbGVuOwogICAgLy8gVmVyaWZ5aW5nIHZhbGlkaXR5IG9mIHBhY2thZ2UgbmFtZSB3aGlsZSBzY2FubmluZyB0aGUgbGluZS4KICAgIHZhciBub25Eb3QgPSBmYWxzZTsKICAgIHZhciBpbnZhbGlkUGFja2FnZU5hbWUgPSBmYWxzZTsKCiAgICAvLyBTY2FuIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgb3IgZGF0YS4KICAgIHdoaWxlIChpbmRleCA8IGxlbikgewogICAgICBjaGFyID0gZGF0YVtpbmRleCsrXTsKICAgICAgLy8gSWYgd2UgaGF2ZSBub3QgcmVhY2hlZCB0aGUgc2VwYXJhdG9yIHlldCwgZGV0ZXJtaW5lIHdoZXRoZXIgd2UgYXJlCiAgICAgIC8vIHNjYW5uaW5nIGxlZ2FsIHBhY2thZ2UgbmFtZSBjaGFyYWN0ZXJzLgogICAgICBpZiAoc2VwYXJhdG9yID09IC0xKSB7CiAgICAgICAgaWYgKChjaGFyID09IF9DT0xPTikpIHsKICAgICAgICAgIC8vIFRoZSBmaXJzdCBjb2xvbiBvbiBhIGxpbmUgaXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHBhY2thZ2UgbmFtZSBhbmQKICAgICAgICAgIC8vIHJlbGF0ZWQgVVJJLgogICAgICAgICAgc2VwYXJhdG9yID0gaW5kZXggLSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBTdGlsbCBzY2FubmluZyB0aGUgcGFja2FnZSBuYW1lIHBhcnQuIENoZWNrIGZvciB0aGUgdmFsaWRpdHkgb2YKICAgICAgICAgIC8vIHRoZSBjaGFyYWN0ZXJzLgogICAgICAgICAgbm9uRG90ID0gbm9uRG90IHx8IChjaGFyICE9IF9ET1QpOwogICAgICAgICAgaW52YWxpZFBhY2thZ2VOYW1lID0gaW52YWxpZFBhY2thZ2VOYW1lIHx8CiAgICAgICAgICAgICAgKGNoYXIgPCBfU1BBQ0UpIHx8CiAgICAgICAgICAgICAgKGNoYXIgPiBfREVMKSB8fAogICAgICAgICAgICAgIF9pbnZhbGlkUGFja2FnZU5hbWVDaGFyc1tjaGFyIC0gX1NQQUNFXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gSWRlbnRpZnkgZW5kIG9mIGxpbmUuCiAgICAgIGlmICgoY2hhciA9PSBfQ1IpIHx8IChjaGFyID09IF9MRikpIHsKICAgICAgICBlbmQgPSBpbmRleCAtIDE7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyBObyBmdXJ0aGVyIGhhbmRsaW5nIG5lZWRlZCBmb3IgY29tbWVudCBsaW5lcy4KICAgIGlmIChkYXRhW3N0YXJ0XSA9PSBfSEFTSCkgewogICAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgICAgX2xvZygiU2tpcHBpbmcgY29tbWVudCBpbiAkcGFja2FnZXNGaWxlOlxuIgogICAgICAgICAgICAiJHtuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoZGF0YSwgc3RhcnQsIGVuZCl9Iik7CiAgICAgIH0KICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gQ2hlY2sgZm9yIGEgYmFkbHkgZm9ybWF0dGVkIGxpbmUsIHN0YXJ0aW5nIHdpdGggYSAnOicuCiAgICBpZiAoc2VwYXJhdG9yID09IHN0YXJ0KSB7CiAgICAgIHZhciBsaW5lID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEsIHN0YXJ0LCBlbmQpOwogICAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgICAgX2xvZygiTGluZSBzdGFydHMgd2l0aCAnOicgaW4gJHBhY2thZ2VzRmlsZTpcbiIKICAgICAgICAgICAgIiRsaW5lIik7CiAgICAgIH0KICAgICAgc3Auc2VuZCgiTWlzc2luZyBwYWNrYWdlIG5hbWUgaW4gJHBhY2thZ2VzRmlsZTpcbiIKICAgICAgICAgICIkbGluZSIpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gRW5zdXJlIHRoZXJlIGlzIGEgc2VwYXJhdG9yIG9uIHRoZSBsaW5lLgogICAgaWYgKHNlcGFyYXRvciA9PSAtMSkgewogICAgICB2YXIgbGluZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhLCBzdGFydCwgZW5kKTsKICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coIkxpbmUgaGFzIG5vICc6JyBpbiAkcGFja2FnZXNGaWxlOlxuIgogICAgICAgICAgICAiJGxpbmUiKTsKICAgICAgfQogICAgICBzcC5zZW5kKCJNaXNzaW5nICc6JyBzZXBhcmF0b3IgaW4gJHBhY2thZ2VzRmlsZTpcbiIKICAgICAgICAgICIkbGluZSIpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIHBhY2thZ2VOYW1lID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEsIHN0YXJ0LCBzZXBhcmF0b3IpOwoKICAgIC8vIENoZWNrIGZvciB2YWxpZCBwYWNrYWdlIG5hbWUuCiAgICBpZiAoaW52YWxpZFBhY2thZ2VOYW1lIHx8ICFub25Eb3QpIHsKICAgICAgdmFyIGxpbmUgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJJbnZhbGlkIHBhY2thZ2UgbmFtZSAkcGFja2FnZU5hbWUgaW4gJHBhY2thZ2VzRmlsZSIpOwogICAgICB9CiAgICAgIHNwLnNlbmQoIkludmFsaWQgcGFja2FnZSBuYW1lICckcGFja2FnZU5hbWUnIGluICRwYWNrYWdlc0ZpbGU6XG4iCiAgICAgICAgICAiJGxpbmUiKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygicGFja2FnZU5hbWU6ICRwYWNrYWdlTmFtZSIpOwogICAgfQogICAgdmFyIHBhY2thZ2VVcmkgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoZGF0YSwgc2VwYXJhdG9yICsgMSwgZW5kKTsKICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygib3JpZ2luYWwgcGFja2FnZVVyaTogJHBhY2thZ2VVcmkiKTsKICAgIH0KICAgIC8vIEVuc3VyZSB0aGUgcGFja2FnZSB1cmkgZW5kcyB3aXRoIGEgLy4KICAgIGlmICghcGFja2FnZVVyaS5lbmRzV2l0aCgiLyIpKSB7CiAgICAgIHBhY2thZ2VVcmkgPSAiJHBhY2thZ2VVcmkvIjsKICAgIH0KICAgIHBhY2thZ2VVcmkgPSBwYWNrYWdlc0ZpbGUucmVzb2x2ZShwYWNrYWdlVXJpKS50b1N0cmluZygpOwogICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJtYXBwaW5nOiAkcGFja2FnZU5hbWUgLT4gJHBhY2thZ2VVcmkiKTsKICAgIH0KICAgIHJlc3VsdC5hZGQocGFja2FnZU5hbWUpOwogICAgcmVzdWx0LmFkZChwYWNrYWdlVXJpKTsKICB9CgogIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coIlBhcnNlZCBwYWNrYWdlcyBmaWxlIGF0ICRwYWNrYWdlc0ZpbGUuIFNlbmRpbmc6XG4kcmVzdWx0Iik7CiAgfQogIHNwLnNlbmQocmVzdWx0KTsKfQoKX2xvYWRQYWNrYWdlc0ZpbGUoU2VuZFBvcnQgc3AsIGJvb2wgdHJhY2VMb2FkaW5nLCBVcmkgcGFja2FnZXNGaWxlKSBhc3luYyB7CiAgdHJ5IHsKICAgIHZhciBkYXRhID0gYXdhaXQgbmV3IEZpbGUuZnJvbVVyaShwYWNrYWdlc0ZpbGUpLnJlYWRBc0J5dGVzKCk7CiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIkxvYWRlZCBwYWNrYWdlcyBmaWxlIGZyb20gJHBhY2thZ2VzRmlsZTpcbiIKICAgICAgICAgICIke25ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhKX0iKTsKICAgIH0KICAgIF9wYXJzZVBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCBwYWNrYWdlc0ZpbGUsIGRhdGEpOwogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygiRXJyb3IgbG9hZGluZyBwYWNrYWdlczogJGVcbiRzIik7CiAgICB9CiAgICBzcC5zZW5kKCJVbmNhdWdodCBlcnJvciAoJGUpIGxvYWRpbmcgcGFja2FnZXMgZmlsZS4iKTsKICB9Cn0KCl9maW5kUGFja2FnZXNGaWxlKFNlbmRQb3J0IHNwLCBib29sIHRyYWNlTG9hZGluZywgVXJpIGJhc2UpIGFzeW5jIHsKICB0cnkgewogICAgLy8gV2FsayB1cCB0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeSB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZgogICAgLy8gLnBhY2thZ2VzIGZpbGVzIGluIHBhcmVudCBkaXJlY3RvcmllcyBhbmQgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYQogICAgLy8gcGFja2FnZXMvIGRpcmVjdG9yeSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uLgogICAgdmFyIGRpciA9IG5ldyBGaWxlLmZyb21VcmkoYmFzZSkucGFyZW50OwogICAgdmFyIHByZXYgPSBudWxsOwogICAgLy8gS2VlcCBzZWFyY2hpbmcgdW50aWwgd2UgcmVhY2ggdGhlIHJvb3QuCiAgICB3aGlsZSAoKHByZXYgPT0gbnVsbCkgfHwgKHByZXYucGF0aCAhPSBkaXIucGF0aCkpIHsKICAgICAgLy8gQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSAucGFja2FnZXMgZmlsZSBhbmQgaWYgaXQgZXhpc3RzIHRyeSB0bwogICAgICAvLyBsb2FkIGFuZCBwYXJzZSBpdC4KICAgICAgdmFyIGRpclVyaSA9IGRpci51cmk7CiAgICAgIHZhciBwYWNrYWdlc0ZpbGUgPSBkaXJVcmkucmVzb2x2ZSgiLnBhY2thZ2VzIik7CiAgICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJDaGVja2luZyBmb3IgJHBhY2thZ2VzRmlsZSBmaWxlLiIpOwogICAgICB9CiAgICAgIHZhciBleGlzdHMgPSBhd2FpdCBuZXcgRmlsZS5mcm9tVXJpKHBhY2thZ2VzRmlsZSkuZXhpc3RzKCk7CiAgICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCIkcGFja2FnZXNGaWxlIGV4aXN0czogJGV4aXN0cyIpOwogICAgICB9CiAgICAgIGlmIChleGlzdHMpIHsKICAgICAgICBfbG9hZFBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCBwYWNrYWdlc0ZpbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAvLyBNb3ZlIHVwIG9uZSBsZXZlbC4KICAgICAgcHJldiA9IGRpcjsKICAgICAgZGlyID0gZGlyLnBhcmVudDsKICAgIH0KCiAgICAvLyBObyAucGFja2FnZXMgZmlsZSB3YXMgZm91bmQuCiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIkNvdWxkIG5vdCByZXNvbHZlIGEgcGFja2FnZSBsb2NhdGlvbiBmcm9tICRiYXNlIik7CiAgICB9CiAgICBzcC5zZW5kKCJDb3VsZCBub3QgcmVzb2x2ZSBhIHBhY2thZ2UgbG9jYXRpb24gZm9yIGJhc2UgYXQgJGJhc2UiKTsKICB9IGNhdGNoIChlLCBzKSB7CiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIkVycm9yIGxvYWRpbmcgcGFja2FnZXM6ICRlXG4kcyIpOwogICAgfQogICAgc3Auc2VuZCgiVW5jYXVnaHQgZXJyb3IgKCRlKSBsb2FkaW5nIHBhY2thZ2VzIGZpbGUuIik7CiAgfQp9CgpGdXR1cmU8Ym9vbD4gX2xvYWRIdHRwUGFja2FnZXNGaWxlKAogICAgU2VuZFBvcnQgc3AsIGJvb2wgdHJhY2VMb2FkaW5nLCBVcmkgcmVzb3VyY2UpIGFzeW5jIHsKICB0cnkgewogICAgaWYgKF9odHRwQ2xpZW50ID09IG51bGwpIHsKICAgICAgX2h0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudCgpLi5tYXhDb25uZWN0aW9uc1Blckhvc3QgPSA2OwogICAgfQogICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJGZXRjaGluZyBwYWNrYWdlcyBmaWxlIGZyb20gJyRyZXNvdXJjZScuIik7CiAgICB9CiAgICB2YXIgcmVxID0gYXdhaXQgX2h0dHBDbGllbnQuZ2V0VXJsKHJlc291cmNlKTsKICAgIHZhciByc3AgPSBhd2FpdCByZXEuY2xvc2UoKTsKICAgIHZhciBidWlsZGVyID0gbmV3IEJ5dGVzQnVpbGRlcihjb3B5OiBmYWxzZSk7CiAgICBhd2FpdCBmb3IgKHZhciBieXRlcyBpbiByc3ApIHsKICAgICAgYnVpbGRlci5hZGQoYnl0ZXMpOwogICAgfQogICAgaWYgKHJzcC5zdGF0dXNDb2RlICE9IDIwMCkgewogICAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgICAgX2xvZygiR290IHN0YXR1cyAke3JzcC5zdGF0dXNDb2RlfSBmZXRjaGluZyAnJHJlc291cmNlJy4iKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB2YXIgZGF0YSA9IGJ1aWxkZXIudGFrZUJ5dGVzKCk7CiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIkxvYWRlZCBwYWNrYWdlcyBmaWxlIGZyb20gJyRyZXNvdXJjZSc6XG4iCiAgICAgICAgICAiJHtuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoZGF0YSl9Iik7CiAgICB9CiAgICBfcGFyc2VQYWNrYWdlc0ZpbGUoc3AsIHRyYWNlTG9hZGluZywgcmVzb3VyY2UsIGRhdGEpOwogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygiRXJyb3IgbG9hZGluZyBwYWNrYWdlcyBmaWxlIGZyb20gJyRyZXNvdXJjZSc6ICRlXG4kcyIpOwogICAgfQogICAgc3Auc2VuZCgiVW5jYXVnaHQgZXJyb3IgKCRlKSBsb2FkaW5nIHBhY2thZ2VzIGZpbGUgZnJvbSAnJHJlc291cmNlJy4iKTsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CgpfbG9hZFBhY2thZ2VzRGF0YShzcCwgdHJhY2VMb2FkaW5nLCByZXNvdXJjZSkgewogIHRyeSB7CiAgICB2YXIgZGF0YSA9IHJlc291cmNlLmRhdGE7CiAgICB2YXIgbWltZSA9IGRhdGEubWltZVR5cGU7CiAgICBpZiAobWltZSAhPSAidGV4dC9wbGFpbiIpIHsKICAgICAgdGhyb3cgIk1JTUUtdHlwZSBtdXN0IGJlIHRleHQvcGxhaW46ICRtaW1lIGdpdmVuLiI7CiAgICB9CiAgICB2YXIgY2hhcnNldCA9IGRhdGEuY2hhcnNldDsKICAgIGlmICgoY2hhcnNldCAhPSAidXRmLTgiKSAmJiAoY2hhcnNldCAhPSAiVVMtQVNDSUkiKSkgewogICAgICAvLyBUaGUgQysrIHBvcnRpb24gb2YgdGhlIGVtYmVkZGVyIGFzc3VtZXMgVVRGLTguCiAgICAgIHRocm93ICJPbmx5IHV0Zi04IG9yIFVTLUFTQ0lJIGVuY29kaW5ncyBhcmUgc3VwcG9ydGVkOiAkY2hhcnNldCBnaXZlbi4iOwogICAgfQogICAgX3BhcnNlUGFja2FnZXNGaWxlKHNwLCB0cmFjZUxvYWRpbmcsIHJlc291cmNlLCBkYXRhLmNvbnRlbnRBc0J5dGVzKCkpOwogIH0gY2F0Y2ggKGUpIHsKICAgIHNwLnNlbmQoIlVuY2F1Z2h0IGVycm9yICgkZSkgbG9hZGluZyBwYWNrYWdlcyBkYXRhLiIpOwogIH0KfQoKLy8gVGhpcyBjb2RlIHVzZWQgdG8gZXhpc3QgaW4gYSBzZWNvbmQgaXNvbGF0ZSBhbmQgc28gaXQgdXNlcyBhIFNlbmRQb3J0IHRvCi8vIHJlcG9ydCBpdCdzIHJldHVybiB2YWx1ZS4gVGhpcyBjb3VsZCBiZSByZWZhY3RvcmVkIHNvIHRoYXQgaXQgcmV0dXJucyBpdCdzCi8vIHZhbHVlIGFuZCB0aGUgY2FsbGVyIGNvdWxkIHdhaXQgb24gdGhlIGZ1dHVyZSByYXRoZXIgdGhhbiBhIG1lc3NhZ2Ugb24KLy8gU2VuZFBvcnQuCl9oYW5kbGVQYWNrYWdlc1JlcXVlc3QoCiAgICBTZW5kUG9ydCBzcCwgYm9vbCB0cmFjZUxvYWRpbmcsIGludCB0YWcsIFVyaSByZXNvdXJjZSkgYXN5bmMgewogIHRyeSB7CiAgICBpZiAodGFnID09IC0xKSB7CiAgICAgIGlmIChyZXNvdXJjZS5zY2hlbWUgPT0gJycgfHwgcmVzb3VyY2Uuc2NoZW1lID09ICdmaWxlJykgewogICAgICAgIF9maW5kUGFja2FnZXNGaWxlKHNwLCB0cmFjZUxvYWRpbmcsIHJlc291cmNlKTsKICAgICAgfSBlbHNlIGlmICgocmVzb3VyY2Uuc2NoZW1lID09ICdodHRwJykgfHwgKHJlc291cmNlLnNjaGVtZSA9PSAnaHR0cHMnKSkgewogICAgICAgIC8vIFRyeSB0byBsb2FkIHRoZSAucGFja2FnZXMgZmlsZSBuZXh0IHRvIHRoZSByZXNvdXJjZS4KICAgICAgICB2YXIgcGFja2FnZXNVcmkgPSByZXNvdXJjZS5yZXNvbHZlKCIucGFja2FnZXMiKTsKICAgICAgICB2YXIgZXhpc3RzID0gYXdhaXQgX2xvYWRIdHRwUGFja2FnZXNGaWxlKHNwLCB0cmFjZUxvYWRpbmcsIHBhY2thZ2VzVXJpKTsKICAgICAgICBpZiAoIWV4aXN0cykgewogICAgICAgICAgLy8gTG9hZGluZyBvZiB0aGUgLnBhY2thZ2VzIGZpbGUgZmFpbGVkIGZvciBodHRwL2h0dHBzIGJhc2VkIHNjcmlwdHMKICAgICAgICAgIHNwLnNlbmQoW251bGxdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3Auc2VuZCgiVW5zdXBwb3J0ZWQgc2NoZW1lIHVzZWQgdG8gbG9jYXRlIC5wYWNrYWdlcyBmaWxlOiAiCiAgICAgICAgICAgICInJHJlc291cmNlJy4iKTsKICAgICAgfQogICAgfSBlbHNlIGlmICh0YWcgPT0gLTIpIHsKICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coIkhhbmRsaW5nIGxvYWQgb2YgcGFja2FnZXMgbWFwOiAnJHJlc291cmNlJy4iKTsKICAgICAgfQogICAgICBpZiAocmVzb3VyY2Uuc2NoZW1lID09ICcnIHx8IHJlc291cmNlLnNjaGVtZSA9PSAnZmlsZScpIHsKICAgICAgICB2YXIgZXhpc3RzID0gYXdhaXQgbmV3IEZpbGUuZnJvbVVyaShyZXNvdXJjZSkuZXhpc3RzKCk7CiAgICAgICAgaWYgKGV4aXN0cykgewogICAgICAgICAgX2xvYWRQYWNrYWdlc0ZpbGUoc3AsIHRyYWNlTG9hZGluZywgcmVzb3VyY2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzcC5zZW5kKCJQYWNrYWdlcyBmaWxlICckcmVzb3VyY2UnIG5vdCBmb3VuZC4iKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKHJlc291cmNlLnNjaGVtZSA9PSAnaHR0cCcpIHx8IChyZXNvdXJjZS5zY2hlbWUgPT0gJ2h0dHBzJykpIHsKICAgICAgICB2YXIgZXhpc3RzID0gYXdhaXQgX2xvYWRIdHRwUGFja2FnZXNGaWxlKHNwLCB0cmFjZUxvYWRpbmcsIHJlc291cmNlKTsKICAgICAgICBpZiAoIWV4aXN0cykgewogICAgICAgICAgc3Auc2VuZCgiUGFja2FnZXMgZmlsZSAnJHJlc291cmNlJyBub3QgZm91bmQuIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJlc291cmNlLnNjaGVtZSA9PSAnZGF0YScpIHsKICAgICAgICBfbG9hZFBhY2thZ2VzRGF0YShzcCwgdHJhY2VMb2FkaW5nLCByZXNvdXJjZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3Auc2VuZCgiVW5rbm93biBzY2hlbWUgKCR7cmVzb3VyY2Uuc2NoZW1lfSkgZm9yIHBhY2thZ2UgZmlsZSBhdCAiCiAgICAgICAgICAgICInJHJlc291cmNlJy4iKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc3Auc2VuZCgiVW5rbm93biBwYWNrYWdlcyByZXF1ZXN0IHRhZzogJHRhZyBmb3IgJyRyZXNvdXJjZScuIik7CiAgICB9CiAgfSBjYXRjaCAoZSwgcykgewogICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJFcnJvciBoYW5kbGluZyBwYWNrYWdlcyByZXF1ZXN0OiAkZVxuJHMiKTsKICAgIH0KICAgIHNwLnNlbmQoIlVuY2F1Z2h0IGVycm9yICgkZSkgaGFuZGxpbmcgcGFja2FnZXMgcmVxdWVzdC4iKTsKICB9Cn0KCi8vIFNodXRkb3duIGFsbCBhY3RpdmUgbG9hZGVycyBieSBzZW5kaW5nIGFuIGVycm9yIG1lc3NhZ2UuCnZvaWQgc2h1dGRvd25Mb2FkZXJzKCkgewogIFN0cmluZyBtZXNzYWdlID0gJ1NlcnZpY2Ugc2h1dGRvd24nOwogIGlmIChfaHR0cENsaWVudCAhPSBudWxsKSB7CiAgICBfaHR0cENsaWVudC5jbG9zZShmb3JjZTogdHJ1ZSk7CiAgICBfaHR0cENsaWVudCA9IG51bGw7CiAgfQogIGlzb2xhdGVFbWJlZGRlckRhdGEudmFsdWVzLnRvTGlzdCgpLmZvckVhY2goKGllZCkgewogICAgSXNvbGF0ZUxvYWRlclN0YXRlIGlscyA9IGllZDsKICAgIGlscy5jbGVhbnVwKCk7CiAgICBhc3NlcnQoaWxzLnNwICE9IG51bGwpOwogICAgX3NlbmRSZXNvdXJjZVJlc3BvbnNlKGlscy5zcCwgMSwgbnVsbCwgbnVsbCwgbnVsbCwgbWVzc2FnZSk7CiAgfSk7Cn0KCi8vIFNlZSBEYXJ0X0xpYnJhcnlUYWcgaW4gZGFydF9hcGkuaApjb25zdCBfRGFydF9rQ2Fub25pY2FsaXplVXJsID0gMDsgLy8gQ2Fub25pY2FsaXplIHRoZSBVUkwuCmNvbnN0IF9EYXJ0X2tTY3JpcHRUYWcgPSAxOyAvLyBMb2FkIHRoZSByb290IHNjcmlwdC4KY29uc3QgX0RhcnRfa1NvdXJjZVRhZyA9IDI7IC8vIExvYWQgYSBwYXJ0IHNvdXJjZS4KY29uc3QgX0RhcnRfa0ltcG9ydFRhZyA9IDM7IC8vIEltcG9ydCBhIGxpYnJhcnkuCgovLyBFeHRyYSByZXF1ZXN0cy4gS2VlcCB0aGVzZSBpbiBzeW5jIGJldHdlZW4gbG9hZGVyLmRhcnQgYW5kIGJ1aWx0aW4uZGFydC4KY29uc3QgX0RhcnRfa0luaXRMb2FkZXIgPSA0OyAvLyBJbml0aWFsaXplIHRoZSBsb2FkZXIuCmNvbnN0IF9EYXJ0X2tSZXNvdXJjZUxvYWQgPSA1OyAvLyBSZXNvdXJjZSBjbGFzcyBzdXBwb3J0Lgpjb25zdCBfRGFydF9rR2V0UGFja2FnZVJvb3RVcmkgPSA2OyAvLyBVcmkgb2YgdGhlIHBhY2thZ2VzLyBkaXJlY3RvcnkuCmNvbnN0IF9EYXJ0X2tHZXRQYWNrYWdlQ29uZmlnVXJpID0gNzsgLy8gVXJpIG9mIHRoZSAucGFja2FnZXMgZmlsZS4KY29uc3QgX0RhcnRfa1Jlc29sdmVQYWNrYWdlVXJpID0gODsgLy8gUmVzb2x2ZSBhIHBhY2thZ2U6IHVyaS4KCi8vIEV4dHJhIHJlcXVlc3RzLiBLZWVwIHRoZXNlIGluIHN5bmMgYmV0d2VlbiBsb2FkZXIuZGFydCBhbmQgbG9hZGVyLmNjLgpjb25zdCBfRGFydF9rSW1wb3J0RXh0ZW5zaW9uID0gOTsgLy8gSW1wb3J0IGEgZGFydC1leHQ6IGZpbGUuCmNvbnN0IF9EYXJ0X2tSZXNvbHZlQXNGaWxlUGF0aCA9IDEwOyAvLyBSZXNvbHZlIHVyaSB0byBmaWxlIHBhdGguCgovLyBFeHRlcm5hbCBlbnRyeSBwb2ludCBmb3IgbG9hZGVyIHJlcXVlc3RzLgpfcHJvY2Vzc0xvYWRSZXF1ZXN0KHJlcXVlc3QpIHsKICBhc3NlcnQocmVxdWVzdCBpcyBMaXN0KTsKICBhc3NlcnQocmVxdWVzdC5sZW5ndGggPiA0KTsKCiAgLy8gU2hvdWxkIHdlIHRyYWNlIGxvYWRpbmc/CiAgYm9vbCB0cmFjZUxvYWRpbmcgPSByZXF1ZXN0WzBdOwoKICAvLyBUaGlzIGlzIHRoZSBzZW5kaW5nIGlzb2xhdGUncyBEYXJ0X0dldE1haW5Qb3J0SWQoKS4KICBpbnQgaXNvbGF0ZUlkID0gcmVxdWVzdFsxXTsKCiAgLy8gVGhlIHRhZyBkZXNjcmliaW5nIHRoZSBvcGVyYXRpb24uCiAgaW50IHRhZyA9IHJlcXVlc3RbMl07CgogIC8vIFRoZSBzZW5kIHBvcnQgdG8gc2VuZCB0aGUgcmVzcG9uc2Ugb24uCiAgU2VuZFBvcnQgc3AgPSByZXF1ZXN0WzNdOwoKICAvLyBHcmFiIHRoZSBsb2FkZXIgc3RhdGUgZm9yIHRoZSByZXF1ZXN0aW5nIGlzb2xhdGUuCiAgSXNvbGF0ZUxvYWRlclN0YXRlIGxvYWRlclN0YXRlID0gaXNvbGF0ZUVtYmVkZGVyRGF0YVtpc29sYXRlSWRdOwoKICAvLyBXZSBhcmUgZWl0aGVyIGFib3V0IHRvIGluaXRpYWxpemUgdGhlIGxvYWRlciwgb3IsIHdlIGFscmVhZHkgaGF2ZS4KICBhc3NlcnQoKHRhZyA9PSBfRGFydF9rSW5pdExvYWRlcikgfHwgKGxvYWRlclN0YXRlICE9IG51bGwpKTsKCiAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IHNwZWNpZmllZCBpbiB0aGUgdGFnLgogIHN3aXRjaCAodGFnKSB7CiAgICBjYXNlIF9EYXJ0X2tJbml0TG9hZGVyOgogICAgICB7CiAgICAgICAgU3RyaW5nIHBhY2thZ2VSb290ID0gcmVxdWVzdFs0XTsKICAgICAgICBTdHJpbmcgcGFja2FnZXNGaWxlID0gcmVxdWVzdFs1XTsKICAgICAgICBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSA9IHJlcXVlc3RbNl07CiAgICAgICAgU3RyaW5nIHJvb3RTY3JpcHQgPSByZXF1ZXN0WzddOwogICAgICAgIGJvb2wgaXNSZWxvYWRpbmcgPSByZXF1ZXN0WzhdOwogICAgICAgIGlmIChsb2FkZXJTdGF0ZSA9PSBudWxsKSB7CiAgICAgICAgICBsb2FkZXJTdGF0ZSA9IG5ldyBJc29sYXRlTG9hZGVyU3RhdGUoaXNvbGF0ZUlkKTsKICAgICAgICAgIGlzb2xhdGVFbWJlZGRlckRhdGFbaXNvbGF0ZUlkXSA9IGxvYWRlclN0YXRlOwogICAgICAgICAgbG9hZGVyU3RhdGUuaW5pdCgKICAgICAgICAgICAgICBwYWNrYWdlUm9vdCwgcGFja2FnZXNGaWxlLCB3b3JraW5nRGlyZWN0b3J5LCByb290U2NyaXB0KTsKICAgICAgICB9IGVsc2UgaWYgKGlzUmVsb2FkaW5nKSB7CiAgICAgICAgICBsb2FkZXJTdGF0ZS51cGRhdGVQYWNrYWdlTWFwKHBhY2thZ2VzRmlsZSk7CiAgICAgICAgfQogICAgICAgIGxvYWRlclN0YXRlLnNwID0gc3A7CiAgICAgICAgYXNzZXJ0KGlzb2xhdGVFbWJlZGRlckRhdGFbaXNvbGF0ZUlkXSA9PSBsb2FkZXJTdGF0ZSk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIF9EYXJ0X2tSZXNvdXJjZUxvYWQ6CiAgICAgIHsKICAgICAgICBVcmkgdXJpID0gVXJpLnBhcnNlKHJlcXVlc3RbNF0pOwogICAgICAgIF9oYW5kbGVSZXNvdXJjZVJlcXVlc3QoCiAgICAgICAgICAgIGxvYWRlclN0YXRlLCBzcCwgdHJhY2VMb2FkaW5nLCB0YWcsIHVyaSwgdXJpLCBudWxsKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgX0RhcnRfa0dldFBhY2thZ2VSb290VXJpOgogICAgICBsb2FkZXJTdGF0ZS5fdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uKCgpIHsKICAgICAgICAvLyBUaGUgcGFja2FnZSByb290IGlzIGRlcHJlY2F0ZWQgYW5kIG5vdyBhbHdheXMgcmV0dXJucyBudWxsLgogICAgICAgIHNwLnNlbmQobnVsbCk7CiAgICAgIH0pOwogICAgICBicmVhazsKICAgIGNhc2UgX0RhcnRfa0dldFBhY2thZ2VDb25maWdVcmk6CiAgICAgIGxvYWRlclN0YXRlLl90cmlnZ2VyUGFja2FnZVJlc29sdXRpb24oKCkgewogICAgICAgIC8vIFJlc3BvbmQgd2l0aCB0aGUgcGFja2FnZXMgY29uZmlnIChpZiBhbnkpIGFmdGVyIHBhY2thZ2UgcmVzb2x1dGlvbi4KICAgICAgICBzcC5zZW5kKGxvYWRlclN0YXRlLl9wYWNrYWdlQ29uZmlnKTsKICAgICAgfSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSBfRGFydF9rUmVzb2x2ZVBhY2thZ2VVcmk6CiAgICAgIFVyaSB1cmkgPSBVcmkucGFyc2UocmVxdWVzdFs0XSk7CiAgICAgIGxvYWRlclN0YXRlLl90cmlnZ2VyUGFja2FnZVJlc29sdXRpb24oKCkgewogICAgICAgIC8vIFJlc3BvbmQgd2l0aCB0aGUgcmVzb2x2ZWQgcGFja2FnZSB1cmkgYWZ0ZXIgcGFja2FnZSByZXNvbHV0aW9uLgogICAgICAgIFVyaSByZXNvbHZlZFVyaTsKICAgICAgICB0cnkgewogICAgICAgICAgcmVzb2x2ZWRVcmkgPSBsb2FkZXJTdGF0ZS5fcmVzb2x2ZVBhY2thZ2VVcmkodXJpKTsKICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgICAgICAgIF9sb2coIkV4Y2VwdGlvbiAoJGUpIHdoZW4gcmVzb2x2aW5nIHBhY2thZ2UgVVJJOiAkdXJpIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXNvbHZlZFVyaSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHNwLnNlbmQocmVzb2x2ZWRVcmkpOwogICAgICB9KTsKICAgICAgYnJlYWs7CiAgICBjYXNlIF9EYXJ0X2tJbXBvcnRFeHRlbnNpb246CiAgICAgIFVyaSB1cmkgPSBVcmkucGFyc2UocmVxdWVzdFs0XSk7CiAgICAgIFN0cmluZyBsaWJyYXJ5VXJpID0gcmVxdWVzdFs1XTsKICAgICAgLy8gU3RyaXAgYW55IGZpbGVuYW1lIG9mZiBvZiB0aGUgbGlicmFyeVVyaSdzIHBhdGguCiAgICAgIGludCBpbmRleCA9IGxpYnJhcnlVcmkubGFzdEluZGV4T2YoJy8nKTsKICAgICAgdmFyIHBhdGg7CiAgICAgIGlmIChpbmRleCA9PSAtMSkgewogICAgICAgIHBhdGggPSAnLi8nOwogICAgICB9IGVsc2UgewogICAgICAgIHBhdGggPSBsaWJyYXJ5VXJpLnN1YnN0cmluZygwLCBpbmRleCArIDEpOwogICAgICB9CiAgICAgIHZhciBwYXRoVXJpID0gVXJpLnBhcnNlKHBhdGgpOwogICAgICBzd2l0Y2ggKHBhdGhVcmkuc2NoZW1lKSB7CiAgICAgICAgY2FzZSAnJzoKICAgICAgICBjYXNlICdmaWxlJzoKICAgICAgICAgIF9zZW5kRXh0ZW5zaW9uSW1wb3J0UmVzcG9uc2UoCiAgICAgICAgICAgICAgc3AsIHVyaSwgbGlicmFyeVVyaSwgcGF0aFVyaS50b0ZpbGVQYXRoKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZGF0YSc6CiAgICAgICAgY2FzZSAnaHR0cCc6CiAgICAgICAgY2FzZSAnaHR0cHMnOgogICAgICAgICAgX3NlbmRFeHRlbnNpb25JbXBvcnRSZXNwb25zZShzcCwgdXJpLCBsaWJyYXJ5VXJpLCBwYXRoVXJpLnRvU3RyaW5nKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncGFja2FnZSc6CiAgICAgICAgICAvLyBTdGFydCBwYWNrYWdlIHJlc29sdXRpb24uCiAgICAgICAgICBsb2FkZXJTdGF0ZS5fdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uKCgpIHsKICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIHRoZSBmdWxseSByZXNvbHZlZCB1cmkgb2YgW3BhdGhdLgogICAgICAgICAgICBVcmkgcmVzb2x2ZWRVcmk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZWRVcmkgPSBsb2FkZXJTdGF0ZS5fcmVzb2x2ZVBhY2thZ2VVcmkocGF0aFVyaSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgICAgICAgICAgICBfbG9nKCJFeGNlcHRpb24gKCRlKSB3aGVuIHJlc29sdmluZyBwYWNrYWdlIFVSSTogJHVyaSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXNvbHZlZFVyaSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3NlbmRFeHRlbnNpb25JbXBvcnRSZXNwb25zZSgKICAgICAgICAgICAgICAgIHNwLCB1cmksIGxpYnJhcnlVcmksIHJlc29sdmVkVXJpLnRvU3RyaW5nKCkpOwogICAgICAgICAgfSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgICAgICBfbG9nKCdVbmtub3duIHNjaGVtZSAoJHtwYXRoVXJpLnNjaGVtZX0pIGluICRwYXRoVXJpLicpOwogICAgICAgICAgfQogICAgICAgICAgX3NlbmRFeHRlbnNpb25JbXBvcnRSZXNwb25zZShzcCwgdXJpLCBsaWJyYXJ5VXJpLCBudWxsKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBfRGFydF9rUmVzb2x2ZUFzRmlsZVBhdGg6CiAgICAgIGxvYWRlclN0YXRlLl90cmlnZ2VyUGFja2FnZVJlc29sdXRpb24oKCkgewogICAgICAgIFN0cmluZyB1cmkgPSByZXF1ZXN0WzRdOwogICAgICAgIFVyaSByZXNvbHZlZFVyaSA9IFVyaS5wYXJzZShfc2FuaXRpemVXaW5kb3dzUGF0aCh1cmkpKTsKICAgICAgICB0cnkgewogICAgICAgICAgaWYgKHJlc29sdmVkVXJpLnNjaGVtZSA9PSAncGFja2FnZScpIHsKICAgICAgICAgICAgcmVzb2x2ZWRVcmkgPSBsb2FkZXJTdGF0ZS5fcmVzb2x2ZVBhY2thZ2VVcmkocmVzb2x2ZWRVcmkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHJlc29sdmVkVXJpLnNjaGVtZSA9PSAnJyB8fCByZXNvbHZlZFVyaS5zY2hlbWUgPT0gJ2ZpbGUnKSB7CiAgICAgICAgICAgIHJl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NgodPwgNHggpIEEIDSMxRxcKDSUxTy0KDSMnMUsZDj0ZHkUMHgoeCg0hJyY6LxAZFQ8zCCUgERUoOhEVFRZRERgnNUEdEkUdIkkQIg4qPg4RER5FDEMRCA0jMSFADjFHDEpRIxoaLRsvGhNPJQwWIRkYKxkhGAoKDQ0/BAIBHWRhcnQ6dm1zZXJ2aWNlX2lvL2xvYWRlci5kYXJ0NW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vdm1zZXJ2aWNlL3NlcnZlci5kYXJ0uHUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiB2bXNlcnZpY2VfaW87CgpmaW5hbCBib29sIHNpbGVudE9ic2VydmF0b3J5ID0gbmV3IGJvb2wuZnJvbUVudmlyb25tZW50KCdTSUxFTlRfT0JTRVJWQVRPUlknKTsKCnZvaWQgc2VydmVyUHJpbnQoU3RyaW5nIHMpIHsKICBpZiAoc2lsZW50T2JzZXJ2YXRvcnkpIHsKICAgIC8vIFdlJ3ZlIGJlZW4gcmVxdWVzdGVkIHRvIGJlIHNpbGVudC4KICAgIHJldHVybjsKICB9CiAgcHJpbnQocyk7Cn0KCmNsYXNzIFdlYlNvY2tldENsaWVudCBleHRlbmRzIENsaWVudCB7CiAgc3RhdGljIGNvbnN0IGludCBQQVJTRV9FUlJPUl9DT0RFID0gNDAwMDsKICBzdGF0aWMgY29uc3QgaW50IEJJTkFSWV9NRVNTQUdFX0VSUk9SX0NPREUgPSA0MDAxOwogIHN0YXRpYyBjb25zdCBpbnQgTk9UX01BUF9FUlJPUl9DT0RFID0gNDAwMjsKICBzdGF0aWMgY29uc3QgaW50IElEX0VSUk9SX0NPREUgPSA0MDAzOwogIGZpbmFsIFdlYlNvY2tldCBzb2NrZXQ7CgogIFdlYlNvY2tldENsaWVudCh0aGlzLnNvY2tldCwgVk1TZXJ2aWNlIHNlcnZpY2UpIDogc3VwZXIoc2VydmljZSkgewogICAgc29ja2V0Lmxpc3RlbigobWVzc2FnZSkgPT4gb25XZWJTb2NrZXRNZXNzYWdlKG1lc3NhZ2UpKTsKICAgIHNvY2tldC5kb25lLnRoZW4oKF8pID0+IGNsb3NlKCkpOwogIH0KCiAgZGlzY29ubmVjdCgpIHsKICAgIGlmIChzb2NrZXQgIT0gbnVsbCkgewogICAgICBzb2NrZXQuY2xvc2UoKTsKICAgIH0KICB9CgogIHZvaWQgb25XZWJTb2NrZXRNZXNzYWdlKG1lc3NhZ2UpIHsKICAgIGlmIChtZXNzYWdlIGlzIFN0cmluZykgewogICAgICB2YXIgbWFwOwogICAgICB0cnkgewogICAgICAgIG1hcCA9IGpzb24uZGVjb2RlKG1lc3NhZ2UpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgc29ja2V0LmNsb3NlKFBBUlNFX0VSUk9SX0NPREUsICdNZXNzYWdlIHBhcnNlIGVycm9yOiAkZScpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobWFwIGlzISBNYXApIHsKICAgICAgICBzb2NrZXQuY2xvc2UoTk9UX01BUF9FUlJPUl9DT0RFLCAnTWVzc2FnZSBtdXN0IGJlIGEgSlNPTiBtYXAuJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgZmluYWwgcnBjID0gbmV3IE1lc3NhZ2UuZnJvbUpzb25ScGModGhpcywgbWFwKTsKICAgICAgICBzd2l0Y2ggKHJwYy50eXBlKSB7CiAgICAgICAgICBjYXNlIE1lc3NhZ2VUeXBlLlJlcXVlc3Q6CiAgICAgICAgICAgIG9uUmVxdWVzdChycGMpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgTWVzc2FnZVR5cGUuTm90aWZpY2F0aW9uOgogICAgICAgICAgICBvbk5vdGlmaWNhdGlvbihycGMpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgTWVzc2FnZVR5cGUuUmVzcG9uc2U6CiAgICAgICAgICAgIG9uUmVzcG9uc2UocnBjKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgc29ja2V0LmNsb3NlKElEX0VSUk9SX0NPREUsIGUubWVzc2FnZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHNvY2tldC5jbG9zZShCSU5BUllfTUVTU0FHRV9FUlJPUl9DT0RFLCAnTWVzc2FnZSBtdXN0IGJlIGEgc3RyaW5nLicpOwogICAgfQogIH0KCiAgdm9pZCBwb3N0KFJlc3BvbnNlIHJlc3VsdCkgewogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAgIHJldHVybjsKICAgIH0KICAgIHRyeSB7CiAgICAgIHN3aXRjaCAocmVzdWx0LmtpbmQpIHsKICAgICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nOgogICAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5CaW5hcnk6CiAgICAgICAgICBzb2NrZXQuYWRkKHJlc3VsdC5wYXlsb2FkKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5VdGY4U3RyaW5nOgogICAgICAgICAgc29ja2V0LmFkZFV0ZjhUZXh0KHJlc3VsdC5wYXlsb2FkKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IG9uIFN0YXRlRXJyb3IgY2F0Y2ggKF8pIHsKICAgICAgLy8gVk0gaGFzIHNodXRkb3duLCBkbyBub3RoaW5nLgogICAgICByZXR1cm47CiAgICB9CiAgfQoKICBkeW5hbWljIHRvSnNvbigpIHsKICAgIE1hcCBtYXAgPSBzdXBlci50b0pzb24oKTsKICAgIG1hcFsndHlwZSddID0gJ1dlYlNvY2tldENsaWVudCc7CiAgICBtYXBbJ3NvY2tldCddID0gJyRzb2NrZXQnOwogICAgcmV0dXJuIG1hcDsKICB9Cn0KCmNsYXNzIEh0dHBSZXF1ZXN0Q2xpZW50IGV4dGVuZHMgQ2xpZW50IHsKICBzdGF0aWMgQ29udGVudFR5cGUganNvbkNvbnRlbnRUeXBlID0KICAgICAgbmV3IENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbiIsICJqc29uIiwgY2hhcnNldDogInV0Zi04Iik7CiAgZmluYWwgSHR0cFJlcXVlc3QgcmVxdWVzdDsKCiAgSHR0cFJlcXVlc3RDbGllbnQodGhpcy5yZXF1ZXN0LCBWTVNlcnZpY2Ugc2VydmljZSkKICAgICAgOiBzdXBlcihzZXJ2aWNlLCBzZW5kRXZlbnRzOiBmYWxzZSk7CgogIGRpc2Nvbm5lY3QoKSB7CiAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAgICBjbG9zZSgpOwogIH0KCiAgdm9pZCBwb3N0KFJlc3BvbnNlIHJlc3VsdCkgewogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIGNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIEh0dHBSZXNwb25zZSByZXNwb25zZSA9IHJlcXVlc3QucmVzcG9uc2U7CiAgICAvLyBXZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gZm9yIGJhZCBvcmlnaW5zIGVhcmxpZXIuCiAgICByZXNwb25zZS5oZWFkZXJzLmFkZCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKTsKICAgIHJlc3BvbnNlLmhlYWRlcnMuY29udGVudFR5cGUgPSBqc29uQ29udGVudFR5cGU7CiAgICBzd2l0Y2ggKHJlc3VsdC5raW5kKSB7CiAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5TdHJpbmc6CiAgICAgICAgcmVzcG9uc2Uud3JpdGUocmVzdWx0LnBheWxvYWQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuVXRmOFN0cmluZzoKICAgICAgICByZXNwb25zZS5hZGQocmVzdWx0LnBheWxvYWQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5OgogICAgICAgIHRocm93ICdDYW4gbm90IGhhbmRsZSBiaW5hcnkgcmVzcG9uc2VzJzsKICAgIH0KICAgIHJlc3BvbnNlLmNsb3NlKCk7CiAgICBjbG9zZSgpOwogIH0KCiAgZHluYW1pYyB0b0pzb24oKSB7CiAgICBNYXAgbWFwID0gc3VwZXIudG9Kc29uKCk7CiAgICBtYXBbJ3R5cGUnXSA9ICdIdHRwUmVxdWVzdENsaWVudCc7CiAgICBtYXBbJ3JlcXVlc3QnXSA9ICckcmVxdWVzdCc7CiAgICByZXR1cm4gbWFwOwogIH0KfQoKY2xhc3MgU2VydmVyIHsKICBzdGF0aWMgY29uc3QgV0VCU09DS0VUX1BBVEggPSAnL3dzJzsKICBzdGF0aWMgY29uc3QgUk9PVF9SRURJUkVDVF9QQVRIID0gJy9pbmRleC5odG1sJzsKCiAgZmluYWwgVk1TZXJ2aWNlIF9zZXJ2aWNlOwogIGZpbmFsIFN0cmluZyBfaXA7CiAgZmluYWwgaW50IF9wb3J0OwogIGZpbmFsIGJvb2wgX29yaWdpbkNoZWNrRGlzYWJsZWQ7CiAgZmluYWwgYm9vbCBfYXV0aENvZGVzRGlzYWJsZWQ7CiAgSHR0cFNlcnZlciBfc2VydmVyOwogIGJvb2wgZ2V0IHJ1bm5pbmcgPT4gX3NlcnZlciAhPSBudWxsOwoKICAvLy8gUmV0dXJucyB0aGUgc2VydmVyIGFkZHJlc3MgaW5jbHVkaW5nIHRoZSBhdXRoIHRva2VuLgogIFVyaSBnZXQgc2VydmVyQWRkcmVzcyB7CiAgICBpZiAoIXJ1bm5pbmcpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB2YXIgaXAgPSBfc2VydmVyLmFkZHJlc3MuYWRkcmVzczsKICAgIHZhciBwb3J0ID0gX3NlcnZlci5wb3J0OwogICAgdmFyIHBhdGggPSAhX2F1dGhDb2Rlc0Rpc2FibGVkID8gIiRzZXJ2aWNlQXV0aFRva2VuLyIgOiAiLyI7CiAgICByZXR1cm4gbmV3IFVyaShzY2hlbWU6ICdodHRwJywgaG9zdDogaXAsIHBvcnQ6IHBvcnQsIHBhdGg6IHBhdGgpOwogIH0KCiAgLy8gT24gRnVjaHNpYSwgYXV0aGVudGljYXRpb24gY29kZXMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFRvIGVuYWJsZSwgdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuCiAgLy8gd291bGQgaGF2ZSB0byBiZSB3cml0dGVuIGludG8gdGhlIGh1YiBhbG9uZ3NpZGUgdGhlIHBvcnQgbnVtYmVyLgogIFNlcnZlcih0aGlzLl9zZXJ2aWNlLCB0aGlzLl9pcCwgdGhpcy5fcG9ydCwgdGhpcy5fb3JpZ2luQ2hlY2tEaXNhYmxlZCwKICAgICAgYm9vbCBhdXRoQ29kZXNEaXNhYmxlZCkKICAgICAgOiBfYXV0aENvZGVzRGlzYWJsZWQgPSAoYXV0aENvZGVzRGlzYWJsZWQgfHwgUGxhdGZvcm0uaXNGdWNoc2lhKTsKCiAgYm9vbCBfaXNBbGxvd2VkT3JpZ2luKFN0cmluZyBvcmlnaW4pIHsKICAgIFVyaSB1cmk7CiAgICB0cnkgewogICAgICB1cmkgPSBVcmkucGFyc2Uob3JpZ2luKTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIEV4cGxpY2l0bHkgYWRkIGxvY2FsaG9zdCBhbmQgMTI3LjAuMC4xIG9uIGFueSBwb3J0IChuZWNlc3NhcnkgZm9yCiAgICAvLyBhZGIgcG9ydCBmb3J3YXJkaW5nKS4KICAgIGlmICgodXJpLmhvc3QgPT0gJ2xvY2FsaG9zdCcpIHx8CiAgICAgICAgKHVyaS5ob3N0ID09ICc6OjEnKSB8fAogICAgICAgICh1cmkuaG9zdCA9PSAnMTI3LjAuMC4xJykpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgaWYgKCh1cmkucG9ydCA9PSBfc2VydmVyLnBvcnQpICYmCiAgICAgICAgKCh1cmkuaG9zdCA9PSBfc2VydmVyLmFkZHJlc3MuYWRkcmVzcykgfHwKICAgICAgICAgICAgKHVyaS5ob3N0ID09IF9zZXJ2ZXIuYWRkcmVzcy5ob3N0KSkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBfb3JpZ2luQ2hlY2soSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogICAgaWYgKF9vcmlnaW5DaGVja0Rpc2FibGVkKSB7CiAgICAgIC8vIEFsd2F5cyBhbGxvdy4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAvLyBGaXJzdCBjaGVjayB0aGUgd2ViLXNvY2tldCBzcGVjaWZpYyBvcmlnaW4uCiAgICBMaXN0PFN0cmluZz4gb3JpZ2lucyA9IHJlcXVlc3QuaGVhZGVyc1siU2VjLVdlYlNvY2tldC1PcmlnaW4iXTsKICAgIGlmIChvcmlnaW5zID09IG51bGwpIHsKICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBnZW5lcmFsIE9yaWdpbiBmaWVsZC4KICAgICAgb3JpZ2lucyA9IHJlcXVlc3QuaGVhZGVyc1siT3JpZ2luIl07CiAgICB9CiAgICBpZiAob3JpZ2lucyA9PSBudWxsKSB7CiAgICAgIC8vIE5vIG9yaWdpbiBzZW50LiBUaGlzIGlzIGEgbm9uLWJyb3dzZXIgY2xpZW50IG9yIGEgc2FtZS1vcmlnaW4gcmVxdWVzdC4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmb3IgKFN0cmluZyBvcmlnaW4gaW4gb3JpZ2lucykgewogICAgICBpZiAoX2lzQWxsb3dlZE9yaWdpbihvcmlnaW4pKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBDaGVja3MgdGhlIFtyZXF1ZXN0VXJpXSBmb3IgdGhlIHNlcnZpY2UgYXV0aCB0b2tlbiBhbmQgcmV0dXJucyB0aGUgcGF0aAogIC8vLyBhcyBhIFN0cmluZy4gSWYgdGhlIHNlcnZpY2UgYXV0aCB0b2tlbiBjaGVjayBmYWlscywgcmV0dXJucyBudWxsLgogIC8vLyBSZXR1cm5zIGEgVXJpIGlmIGEgcmVkaXJlY3QgaXMgcmVxdWlyZWQuCiAgZHluYW1pYyBfY2hlY2tBdXRoVG9rZW5BbmRHZXRQYXRoKFVyaSByZXF1ZXN0VXJpKSB7CiAgICBpZiAoX2F1dGhDb2Rlc0Rpc2FibGVkKSB7CiAgICAgIHJldHVybiByZXF1ZXN0VXJpLnBhdGggPT0gJy8nID8gUk9PVF9SRURJUkVDVF9QQVRIIDogcmVxdWVzdFVyaS5wYXRoOwogICAgfQogICAgZmluYWwgTGlzdDxTdHJpbmc+IHJlcXVlc3RQYXRoU2VnbWVudHMgPSByZXF1ZXN0VXJpLnBhdGhTZWdtZW50czsKICAgIGlmIChyZXF1ZXN0UGF0aFNlZ21lbnRzLmlzRW1wdHkpIHsKICAgICAgLy8gTWFsZm9ybWVkLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIC8vIENoZWNrIHRoYXQgd2Ugd2VyZSBnaXZlbiB0aGUgYXV0aCB0b2tlbi4KICAgIGZpbmFsIFN0cmluZyBhdXRoVG9rZW4gPSByZXF1ZXN0UGF0aFNlZ21lbnRzWzBdOwogICAgaWYgKGF1dGhUb2tlbiAhPSBzZXJ2aWNlQXV0aFRva2VuKSB7CiAgICAgIC8vIE1hbGZvcm1lZC4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAvLyBNaXNzaW5nIGEgdHJhaWxpbmcgJy8nLiBXZSdsbCBuZWVkIHRvIHJlZGlyZWN0IHRvIHNlcnZlCiAgICAvLyBST09UX1JFRElSRUNUX1BBVEggY29ycmVjdGx5LCBvdGhlcndpc2UgdGhlIHJlc3BvbnNlIGlzIG1pc2ludGVycHJldGVkLgogICAgaWYgKHJlcXVlc3RQYXRoU2VnbWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgLy8gcmVxdWVzdFBhdGhTZWdtZW50cyBpcyB1bm1vZGlmaWFibGUuIENvcHkgaXQuCiAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBwYXRoU2VnbWVudHMgPSA8U3RyaW5nPltdLi5hZGRBbGwocmVxdWVzdFBhdGhTZWdtZW50cyk7CgogICAgICAvLyBBZGRpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIHRoZSBwYXRoIHNlZ21lbnRzIHJlc3VsdHMgaW4gdGhlIHBhdGggaGF2aW5nCiAgICAgIC8vIGEgdHJhaWxpbmcgJy8nLgogICAgICBwYXRoU2VnbWVudHMuYWRkKCcnKTsKCiAgICAgIHJldHVybiByZXF1ZXN0VXJpLnJlcGxhY2UocGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMpOwogICAgfQogICAgLy8gQ29uc3RydWN0IHRoZSBhY3R1YWwgcmVxdWVzdCBwYXRoIGJ5IGNob3BwaW5nIG9mZiB0aGUgYXV0aCB0b2tlbi4KICAgIHJldHVybiAocmVxdWVzdFBhdGhTZWdtZW50c1sxXSA9PSAnJykKICAgICAgICA/IFJPT1RfUkVESVJFQ1RfUEFUSAogICAgICAgIDogJy8ke3JlcXVlc3RQYXRoU2VnbWVudHMuc3VibGlzdCgxKS5qb2luKCcvJyl9JzsKICB9CgogIEZ1dHVyZSBfcmVxdWVzdEhhbmRsZXIoSHR0cFJlcXVlc3QgcmVxdWVzdCkgYXN5bmMgewogICAgaWYgKCFfb3JpZ2luQ2hlY2socmVxdWVzdCkpIHsKICAgICAgLy8gVGhpcyBpcyBhIGNyb3NzIG9yaWdpbiBhdHRlbXB0IHRvIGNvbm5lY3QKICAgICAgcmVxdWVzdC5yZXNwb25zZS5zdGF0dXNDb2RlID0gSHR0cFN0YXR1cy5mb3JiaWRkZW47CiAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoImZvcmJpZGRlbiBvcmlnaW4iKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT0gJ1BVVCcpIHsKICAgICAgLy8gUFVUIHJlcXVlc3RzIGFyZSBmb3J3YXJkZWQgdG8gRGV2RlMgZm9yIHByb2Nlc3NpbmcuCgogICAgICBMaXN0IGZzTmFtZUxpc3Q7CiAgICAgIExpc3QgZnNQYXRoTGlzdDsKICAgICAgTGlzdCBmc1BhdGhCYXNlNjRMaXN0OwogICAgICBMaXN0IGZzVXJpQmFzZTY0TGlzdDsKICAgICAgT2JqZWN0IGZzTmFtZTsKICAgICAgT2JqZWN0IGZzUGF0aDsKICAgICAgT2JqZWN0IGZzVXJpOwoKICAgICAgdHJ5IHsKICAgICAgICAvLyBFeHRyYWN0IHRoZSBmcyBuYW1lIGFuZCBmcyBwYXRoIGZyb20gdGhlIHJlcXVlc3QgaGVhZGVycy4KICAgICAgICBmc05hbWVMaXN0ID0gcmVxdWVzdC5oZWFkZXJzWydkZXZfZnNfbmFtZSddOwogICAgICAgIGZzTmFtZSA9IGZzTmFtZUxpc3RbMF07CgogICAgICAgIC8vIFByZWZlciBVcmkgZW5jb2RpbmcgZmlyc3QuCiAgICAgICAgZnNVcmlCYXNlNjRMaXN0ID0gcmVxdWVzdC5oZWFkZXJzWydkZXZfZnNfdXJpX2I2NCddOwogICAgICAgIGlmICgoZnNVcmlCYXNlNjRMaXN0ICE9IG51bGwpICYmIChmc1VyaUJhc2U2NExpc3QubGVuZ3RoID4gMCkpIHsKICAgICAgICAgIFN0cmluZyBkZWNvZGVkRnNVcmkgPSB1dGY4LmRlY29kZShiYXNlNjQuZGVjb2RlKGZzVXJpQmFzZTY0TGlzdFswXSkpOwogICAgICAgICAgZnNVcmkgPSBVcmkucGFyc2UoZGVjb2RlZEZzVXJpKTsKICAgICAgICB9CgogICAgICAgIC8vIEZhbGxiYWNrIHRvIHBhdGggZW5jb2RpbmcuCiAgICAgICAgaWYgKGZzVXJpID09IG51bGwpIHsKICAgICAgICAgIGZzUGF0aExpc3QgPSByZXF1ZXN0LmhlYWRlcnNbJ2Rldl9mc19wYXRoJ107CiAgICAgICAgICBmc1BhdGhCYXNlNjRMaXN0ID0gcmVxdWVzdC5oZWFkZXJzWydkZXZfZnNfcGF0aF9iNjQnXTsKICAgICAgICAgIC8vIElmIHRoZSAnZGV2X2ZzX3BhdGhfYjY0JyBoZWFkZXIgZmllbGQgd2FzIHNlbnQsIHVzZSB0aGF0IGluc3RlYWQuCiAgICAgICAgICBpZiAoKGZzUGF0aEJhc2U2NExpc3QgIT0gbnVsbCkgJiYgKGZzUGF0aEJhc2U2NExpc3QubGVuZ3RoID4gMCkpIHsKICAgICAgICAgICAgZnNQYXRoID0gdXRmOC5kZWNvZGUoYmFzZTY0LmRlY29kZShmc1BhdGhCYXNlNjRMaXN0WzBdKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmc1BhdGggPSBmc1BhdGhMaXN0WzBdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgey8qIGlnbm9yZSAqL30KCiAgICAgIFN0cmluZyByZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzdWx0ID0gYXdhaXQgX3NlcnZpY2UuZGV2ZnMuaGFuZGxlUHV0U3RyZWFtKGZzTmFtZSwgZnNQYXRoLCBmc1VyaSwKICAgICAgICAgICAgcmVxdWVzdC5jYXN0PExpc3Q8aW50Pj4oKS50cmFuc2Zvcm0oR1pJUC5kZWNvZGVyKSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLmludGVybmFsU2VydmVyRXJyb3I7CiAgICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZShlKTsKICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLmhlYWRlcnMuY29udGVudFR5cGUgPQogICAgICAgICAgICBIdHRwUmVxdWVzdENsaWVudC5qc29uQ29udGVudFR5cGU7CiAgICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZShyZXN1bHQpOwogICAgICB9CiAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHJlcXVlc3QubWV0aG9kICE9ICdHRVQnKSB7CiAgICAgIC8vIE5vdCBhIEdFVCByZXF1ZXN0LiBEbyBub3RoaW5nLgogICAgICByZXF1ZXN0LnJlc3BvbnNlLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLm1ldGhvZE5vdEFsbG93ZWQ7CiAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoIm1ldGhvZCBub3QgYWxsb3dlZCIpOwogICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBmaW5hbCBkeW5hbWljIHJlc3VsdCA9IF9jaGVja0F1dGhUb2tlbkFuZEdldFBhdGgocmVxdWVzdC51cmkpOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIC8vIEVpdGhlciBubyBhdXRoZW50aWNhdGlvbiBjb2RlIHdhcyBwcm92aWRlZCB3aGVuIG9uZSB3YXMgZXhwZWN0ZWQgb3IgYW4KICAgICAgLy8gaW5jb3JyZWN0IGF1dGhlbnRpY2F0aW9uIGNvZGUgd2FzIHByb3ZpZGVkLgogICAgICByZXF1ZXN0LnJlc3BvbnNlLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLmZvcmJpZGRlbjsKICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZSgibWlzc2luZyBvciBpbnZhbGlkIGF1dGhlbnRpY2F0aW9uIGNvZGUiKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKHJlc3VsdCBpcyBVcmkpIHsKICAgICAgLy8gVGhlIFVSSSBjb250YWlucyB0aGUgdmFsaWQgYXV0aCB0b2tlbiBidXQgaXMgbWlzc2luZyBhIHRyYWlsaW5nICcvJy4KICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIHNhbWUgVVJJIHdpdGggdGhlIHRyYWlsaW5nICcvJyB0byBjb3JyZWN0bHkgc2VydmUKICAgICAgLy8gaW5kZXguaHRtbC4KICAgICAgcmVxdWVzdC5yZXNwb25zZS5yZWRpcmVjdChyZXN1bHQgYXMgVXJpKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgZmluYWwgU3RyaW5nIHBhdGggPSByZXN1bHQ7CiAgICBpZiAocGF0aCA9PSBXRUJTT0NLRVRfUEFUSCkgewogICAgICBXZWJTb2NrZXRUcmFuc2Zvcm1lci51cGdyYWRlKHJlcXVlc3QpLnRoZW4oKFdlYlNvY2tldCB3ZWJTb2NrZXQpIHsKICAgICAgICBuZXcgV2ViU29ja2V0Q2xpZW50KHdlYlNvY2tldCwgX3NlcnZpY2UpOwogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChhc3NldHMgPT0gbnVsbCkgewogICAgICByZXF1ZXN0LnJlc3BvbnNlLmhlYWRlcnMuY29udGVudFR5cGUgPSBDb250ZW50VHlwZS5URVhUOwogICAgICByZXF1ZXN0LnJlc3BvbnNlLndyaXRlKCJUaGlzIFZNIHdhcyBidWlsdCB3aXRob3V0IHRoZSBPYnNlcnZhdG9yeSBVSS4iKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBBc3NldCBhc3NldCA9IGFzc2V0c1twYXRoXTsKICAgIGlmIChhc3NldCAhPSBudWxsKSB7CiAgICAgIC8vIFNlcnZpbmcgdXAgYSBzdGF0aWMgYXNzZXQgKGUuZy4gLmNzcywgLmh0bWwsIC5wbmcpLgogICAgICByZXF1ZXN0LnJlc3BvbnNlLmhlYWRlcnMuY29udGVudFR5cGUgPSBDb250ZW50VHlwZS5wYXJzZShhc3NldC5taW1lVHlwZSk7CiAgICAgIHJlcXVlc3QucmVzcG9uc2UuYWRkKGFzc2V0LmRhdGEpOwogICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIEhUVFAgYmFzZWQgc2VydmljZSByZXF1ZXN0LgogICAgZmluYWwgY2xpZW50ID0gbmV3IEh0dHBSZXF1ZXN0Q2xpZW50KHJlcXVlc3QsIF9zZXJ2aWNlKTsKICAgIGZpbmFsIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZS5mcm9tVXJpKAogICAgICAgIGNsaWVudCwgVXJpKHBhdGg6IHBhdGgsIHF1ZXJ5UGFyYW1ldGVyczogcmVxdWVzdC51cmkucXVlcnlQYXJhbWV0ZXJzKSk7CiAgICBjbGllbnQub25SZXF1ZXN0KG1lc3NhZ2UpOyAvLyBleGNlcHRpb24gZnJlZSwgbm8gbmVlZCB0byB0cnkgY2F0Y2gKICB9CgogIEZ1dHVyZSBzdGFydHVwKCkgYXN5bmMgewogICAgaWYgKF9zZXJ2ZXIgIT0gbnVsbCkgewogICAgICAvLyBBbHJlYWR5IHJ1bm5pbmcuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIC8vIFN0YXJ0dXAgSFRUUCBzZXJ2ZXIuCiAgICB2YXIgcG9sbEVycm9yOwogICAgdmFyIHBvbGxTdGFjazsKICAgIEZ1dHVyZTxib29sPiBwb2xsKCkgYXN5bmMgewogICAgICB0cnkgewogICAgICAgIHZhciBhZGRyZXNzOwogICAgICAgIHZhciBhZGRyZXNzZXMgPSBhd2FpdCBJbnRlcm5ldEFkZHJlc3MubG9va3VwKF9pcCk7CiAgICAgICAgLy8gUHJlZmVyIElQdjQgYWRkcmVzc2VzLgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzc2VzW2ldOwogICAgICAgICAgaWYgKGFkZHJlc3MudHlwZSA9PSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQX1Y0KSBicmVhazsKICAgICAgICB9CiAgICAgICAgX3NlcnZlciA9IGF3YWl0IEh0dHBTZXJ2ZXIuYmluZChhZGRyZXNzLCBfcG9ydCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gY2F0Y2ggKGUsIHN0KSB7CiAgICAgICAgcG9sbEVycm9yID0gZTsKICAgICAgICBwb2xsU3RhY2sgPSBzdDsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICAvLyBwb2xsIGZvciB0aGUgbmV0d29yayBmb3IgfjEwIHNlY29uZHMuCiAgICBpbnQgYXR0ZW1wdHMgPSAwOwogICAgZmluYWwgaW50IG1heEF0dGVtcHRzID0gMTA7CiAgICB3aGlsZSAoIWF3YWl0IHBvbGwoKSkgewogICAgICBhdHRlbXB0cysrOwogICAgICBzZXJ2ZXJQcmludCgiT2JzZXJ2YXRvcnkgc2VydmVyIGZhaWxlZCB0byBzdGFydCBhZnRlciAkYXR0ZW1wdHMgdHJpZXMiKTsKICAgICAgaWYgKGF0dGVtcHRzID4gbWF4QXR0ZW1wdHMpIHsKICAgICAgICBzZXJ2ZXJQcmludCgnQ291bGQgbm90IHN0YXJ0IE9ic2VydmF0b3J5IEhUVFAgc2VydmVyOlxuJwogICAgICAgICAgICAnJHBvbGxFcnJvclxuJHBvbGxTdGFja1xuJyk7CiAgICAgICAgX25vdGlmeVNlcnZlclN0YXRlKCIiKTsKICAgICAgICBvblNlcnZlckFkZHJlc3NDaGFuZ2UobnVsbCk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgICAgYXdhaXQgbmV3IEZ1dHVyZTxOdWxsPi5kZWxheWVkKGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDEpKTsKICAgIH0KICAgIGlmIChfc2VydmljZS5pc0V4aXRpbmcpIHsKICAgICAgc2VydmVyUHJpbnQoJ09ic2VydmF0b3J5IEhUVFAgc2VydmVyIGV4aXRpbmcgYmVmb3JlIGxpc3RlbmluZyBhcyAnCiAgICAgICAgICAndm0gc2VydmljZSBoYXMgcmVjZWl2ZWQgZXhpdCByZXF1ZXN0XG4nKTsKICAgICAgYXdhaXQgc2h1dGRvd24odHJ1ZSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgX3NlcnZlci5saXN0ZW4oX3JlcXVlc3RIYW5kbGVyLCBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHNlcnZlclByaW50KCdPYnNlcnZhdG9yeSBsaXN0ZW5pbmcgb24gJHNlcnZlckFkZHJlc3MnKTsKICAgIGlmIChQbGF0Zm9ybS5pc0Z1Y2hzaWEpIHsKICAgICAgLy8gQ3JlYXRlIGEgZmlsZSB3aXRoIHRoZSBwb3J0IG51bWJlci4KICAgICAgU3RyaW5nIHRtcCA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLnBhdGg7CiAgICAgIFN0cmluZyBwYXRoID0gIiR0bXAvZGFydC5zZXJ2aWNlcy8ke19zZXJ2ZXIucG9ydH0iOwogICAgICBzZXJ2ZXJQcmludCgiQ3JlYXRpbmcgJHBhdGgiKTsKICAgICAgbmV3IEZpbGUocGF0aCkuLmNyZWF0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKICAgIH0KICAgIC8vIFNlcnZlciBpcyB1cCBhbmQgcnVubmluZy4KICAgIF9ub3RpZnlTZXJ2ZXJTdGF0ZShzZXJ2ZXJBZGRyZXNzLnRvU3RyaW5nKCkpOwogICAgb25TZXJ2ZXJBZGRyZXNzQ2hhbmdlKCckc2VydmVyQWRkcmVzcycpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBGdXR1cmUgY2xlYW51cChib29sIGZvcmNlKSB7CiAgICBpZiAoX3NlcnZlciA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG51bGwpOwogICAgfQogICAgaWYgKFBsYXRmb3JtLmlzRnVjaHNpYSkgewogICAgICAvLyBSZW1vdmUgdGhlIGZpbGUgd2l0aCB0aGUgcG9ydCBudW1iZXIuCiAgICAgIFN0cmluZyB0bXAgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5wYXRoOwogICAgICBTdHJpbmcgcGF0aCA9ICIkdG1wL2RhcnQuc2VydmljZXMvJHtfc2VydmVyLnBvcnR9IjsKICAgICAgc2VydmVyUHJpbnQoIkRlbGV0aW5nICRwYXRoIik7CiAgICAgIG5ldyBGaWxlKHBhdGgpLi5kZWxldGVTeW5jKCk7CiAgICB9CiAgICByZXR1cm4gX3NlcnZlci5jbG9zZShmb3JjZTogZm9yY2UpOwogIH0KCiAgRnV0dXJlIHNodXRkb3duKGJvb2wgZm9yY2VkKSB7CiAgICBpZiAoX3NlcnZlciA9PSBudWxsKSB7CiAgICAgIC8vIE5vdCBzdGFydGVkLgogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSh0aGlzKTsKICAgIH0KCiAgICAvLyBTaHV0ZG93biBIVFRQIHNlcnZlciBhbmQgc3Vic2NyaXB0aW9uLgogICAgVXJpIG9sZFNlcnZlckFkZHJlc3MgPSBzZXJ2ZXJBZGRyZXNzOwogICAgcmV0dXJuIGNsZWFudXAoZm9yY2VkKS50aGVuKChfKSB7CiAgICAgIHNlcnZlclByaW50KCdPYnNlcnZhdG9yeSBubyBsb25nZXIgbGlzdGVuaW5nIG9uICRvbGRTZXJ2ZXJBZGRyZXNzJyk7CiAgICAgIF9zZXJ2ZXIgPSBudWxsOwogICAgICBfbm90aWZ5U2VydmVyU3RhdGUoIiIpOwogICAgICBvblNlcnZlckFkZHJlc3NDaGFuZ2UobnVsbCk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSkuY2F0Y2hFcnJvcigoZSwgc3QpIHsKICAgICAgX3NlcnZlciA9IG51bGw7CiAgICAgIHNlcnZlclByaW50KCdDb3VsZCBub3Qgc2h1dGRvd24gT2JzZXJ2YXRvcnkgSFRUUCBzZXJ2ZXI6XG4kZVxuJHN0XG4nKTsKICAgICAgX25vdGlmeVNlcnZlclN0YXRlKCIiKTsKICAgICAgb25TZXJ2ZXJBZGRyZXNzQ2hhbmdlKG51bGwpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KfQoKdm9pZCBfbm90aWZ5U2VydmVyU3RhdGUoU3RyaW5nIHVyaSkgbmF0aXZlICJWTVNlcnZpY2VJT19Ob3RpZnlTZXJ2ZXJTdGF0ZSI7CoHbAE5OPAEWAU8BHRsqDAQMAgEnLDUuKRoBRT0mBAERGhYGBAElHQ8MJBRDEAgZSRAIDDgcJBwTKSETJR0TChQwCA1MBgQBHxoVDgYKHSkpJhEtLhEIICYOBgQBFR4lHxAEAgEpJ0AdATUrAREeDQQBHxoPDgYuOT40GycoDysmDycxBhYNBAEVHichEAQCAQ8nMwEcFBMjIRYnATsaFBMGJh1BRgQBY0ZJHkgBKQ0KHxIUBgFJHSUfJRMGASYyMxMGARIEASsgFxMGM0QbMCsGG1ATBiUmFQgGEgQBTkgvNh5MBkYnFBMGMDUpFBMGP08rN1EBUBkcAT0GSSodOgQBNiIzOjIgDgYjPQEXFx0cFRUUAQxFNSABJj1JUCsKASYdN0FPTUYTJAwKIQEVDE1AFEYjIhAIARwvLygIIA4GIyhBNCAOBgFDGlA1OkggDiBOSxUwIA4GASAiSTIKDgYBGj9PIA4GIBk9UCggDgYjPSlQRwQBGxsaEwYBHBMTIAwVOyI1IkAKORUYFxgWCAYBLRYgHBJPJEEpICUVCEIGHkk1HBMGOjweLS46JTMGITItEQQBHxslBh4vLjolJAYoBAEhGxYlBgEuKiZLFh4jExwWTR4jEwgEAgFMAR1kYXJ0OnZtc2VydmljZV9pby9zZXJ2ZXIuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvdm1zZXJ2aWNlL3Ztc2VydmljZS5kYXJ0wABTWy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQuX3Ztc2VydmljZTsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZSc7CmltcG9ydCAnZGFydDptYXRoJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKcGFydCAnYXNzZXQuZGFydCc7CnBhcnQgJ2NsaWVudC5kYXJ0JzsKcGFydCAnZGV2ZnMuZGFydCc7CnBhcnQgJ2NvbnN0YW50cy5kYXJ0JzsKcGFydCAncnVubmluZ19pc29sYXRlLmRhcnQnOwpwYXJ0ICdydW5uaW5nX2lzb2xhdGVzLmRhcnQnOwpwYXJ0ICdtZXNzYWdlLmRhcnQnOwpwYXJ0ICdtZXNzYWdlX3JvdXRlci5kYXJ0JzsKcGFydCAnbmFtZWRfbG9va3VwLmRhcnQnOwoKZmluYWwgUmF3UmVjZWl2ZVBvcnQgaXNvbGF0ZUNvbnRyb2xQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CmZpbmFsIFJhd1JlY2VpdmVQb3J0IHNjcmlwdExvYWRQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CgphYnN0cmFjdCBjbGFzcyBJc29sYXRlRW1iZWRkZXJEYXRhIHsKICB2b2lkIGNsZWFudXAoKTsKfQoKU3RyaW5nIF9tYWtlQXV0aFRva2VuKCkgewogIGZpbmFsIGtUb2tlbkJ5dGVTaXplID0gODsKICBVaW50OExpc3QgYnl0ZXMgPSBuZXcgVWludDhMaXN0KGtUb2tlbkJ5dGVTaXplKTsKICBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbS5zZWN1cmUoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IGtUb2tlbkJ5dGVTaXplOyBpKyspIHsKICAgIGJ5dGVzW2ldID0gcmFuZG9tLm5leHRJbnQoMjU2KTsKICB9CiAgcmV0dXJuIGJhc2U2NFVybC5lbmNvZGUoYnl0ZXMpOwp9CgovLyBUaGUgcmFuZG9tbHkgZ2VuZXJhdGVkIGF1dGggdG9rZW4gdXNlZCB0byBhY2Nlc3MgdGhlIFZNIHNlcnZpY2UuCmZpbmFsIFN0cmluZyBzZXJ2aWNlQXV0aFRva2VuID0gX21ha2VBdXRoVG9rZW4oKTsKCi8vIFRoaXMgaXMgZm9yIHVzZSBieSB0aGUgZW1iZWRkZXIuIEl0IGlzIGEgbWFwIGZyb20gdGhlIGlzb2xhdGVJZCB0bwovLyBhbnl0aGluZyBpbXBsZW1lbnRpbmcgSXNvbGF0ZUVtYmVkZGVyRGF0YS4gV2hlbiBhbiBpc29sYXRlIGdvZXMgYXdheSwKLy8gdGhlIGNsZWFudXAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBhZnRlciBiZWluZyByZW1vdmVkIGZyb20gdGhlIG1hcC4KZmluYWwgTWFwPGludCwgSXNvbGF0ZUVtYmVkZGVyRGF0YT4gaXNvbGF0ZUVtYmVkZGVyRGF0YSA9CiAgICBuZXcgTWFwPGludCwgSXNvbGF0ZUVtYmVkZGVyRGF0YT4oKTsKCi8vIFRoZXNlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGRlY2xhcmF0aW9ucyBpbiB2bS9qc29uX3N0cmVhbS5oLgpjb25zdCBrUGFyc2VFcnJvciA9IC0zMjcwMDsKY29uc3Qga0ludmFsaWRSZXF1ZXN0ID0gLTMyNjAwOwpjb25zdCBrTWV0aG9kTm90Rm91bmQgPSAtMzI2MDE7CmNvbnN0IGtJbnZhbGlkUGFyYW1zID0gLTMyNjAyOwpjb25zdCBrSW50ZXJuYWxFcnJvciA9IC0zMjYwMzsKCmNvbnN0IGtFeHRlbnNpb25FcnJvciA9IC0zMjAwMDsKCmNvbnN0IGtGZWF0dXJlRGlzYWJsZWQgPSAxMDA7CmNvbnN0IGtDYW5ub3RBZGRCcmVha3BvaW50ID0gMTAyOwpjb25zdCBrU3RyZWFtQWxyZWFkeVN1YnNjcmliZWQgPSAxMDM7CmNvbnN0IGtTdHJlYW1Ob3RTdWJzY3JpYmVkID0gMTA0Owpjb25zdCBrSXNvbGF0ZU11c3RCZVJ1bm5hYmxlID0gMTA1Owpjb25zdCBrSXNvbGF0ZU11c3RCZVBhdXNlZCA9IDEwNjsKY29uc3Qga0Nhbm5vdFJlc3VtZSA9IDEwNzsKY29uc3Qga0lzb2xhdGVJc1JlbG9hZGluZyA9IDEwODsKY29uc3Qga0lzb2xhdGVSZWxvYWRCYXJyZWQgPSAxMDk7CmNvbnN0IGtJc29sYXRlTXVzdEhhdmVSZWxvYWRlZCA9IDExMDsKY29uc3Qga1NlcnZpY2VBbHJlYWR5UmVnaXN0ZXJlZCA9IDExMTsKY29uc3Qga1NlcnZpY2VEaXNhcHBlYXJlZCA9IDExMjsKY29uc3Qga0V4cHJlc3Npb25Db21waWxhdGlvbkVycm9yID0gMTEzOwpjb25zdCBrSW52YWxpZFRpbWVsaW5lUmVxdWVzdCA9IDExNDsKCi8vIEV4cGVyaW1lbnRhbCAodXNlZCBpbiBwcml2YXRlIHJwY3MpLgpjb25zdCBrRmlsZVN5c3RlbUFscmVhZHlFeGlzdHMgPSAxMDAxOwpjb25zdCBrRmlsZVN5c3RlbURvZXNOb3RFeGlzdCA9IDEwMDI7CmNvbnN0IGtGaWxlRG9lc05vdEV4aXN0ID0gMTAwMzsKCnZhciBfZXJyb3JNZXNzYWdlcyA9IHsKICBrSW52YWxpZFBhcmFtczogJ0ludmFsaWQgcGFyYW1zJywKICBrSW50ZXJuYWxFcnJvcjogJ0ludGVybmFsIGVycm9yJywKICBrRmVhdHVyZURpc2FibGVkOiAnRmVhdHVyZSBpcyBkaXNhYmxlZCcsCiAga1N0cmVhbUFscmVhZHlTdWJzY3JpYmVkOiAnU3RyZWFtIGFscmVhZHkgc3Vic2NyaWJlZCcsCiAga1N0cmVhbU5vdFN1YnNjcmliZWQ6ICdTdHJlYW0gbm90IHN1YnNjcmliZWQnLAogIGtGaWxlU3lzdGVtQWxyZWFkeUV4aXN0czogJ0ZpbGUgc3lzdGVtIGFscmVhZHkgZXhpc3RzJywKICBrRmlsZVN5c3RlbURvZXNOb3RFeGlzdDogJ0ZpbGUgc3lzdGVtIGRvZXMgbm90IGV4aXN0JywKICBrRmlsZURvZXNOb3RFeGlzdDogJ0ZpbGUgZG9lcyBub3QgZXhpc3QnLAogIGtTZXJ2aWNlQWxyZWFkeVJlZ2lzdGVyZWQ6ICdTZXJ2aWNlIGFscmVhZHkgcmVnaXN0ZXJlZCcsCiAga1NlcnZpY2VEaXNhcHBlYXJlZDogJ1NlcnZpY2UgaGFzIGRpc2FwcGVhcmVkJywKICBrRXhwcmVzc2lvbkNvbXBpbGF0aW9uRXJyb3I6ICdFeHByZXNzaW9uIGNvbXBpbGF0aW9uIGVycm9yJywKICBrSW52YWxpZFRpbWVsaW5lUmVxdWVzdDogJ1RoZSB0aW1lbGluZSByZWxhdGVkIHJlcXVlc3QgY291bGQgbm90IGJlIGNvbXBsZXRlZCcKICAgICAgJ2R1ZSB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uJywKfTsKClN0cmluZyBlbmNvZGVScGNFcnJvcihNZXNzYWdlIG1lc3NhZ2UsIGludCBjb2RlLCB7U3RyaW5nIGRldGFpbHN9KSB7CiAgdmFyIHJlc3BvbnNlID0gewogICAgJ2pzb25ycGMnOiAnMi4wJywKICAgICdpZCc6IG1lc3NhZ2Uuc2VyaWFsLAogICAgJ2Vycm9yJzogewogICAgICAnY29kZSc6IGNvZGUsCiAgICAgICdtZXNzYWdlJzogX2Vycm9yTWVzc2FnZXNbY29kZV0sCiAgICB9LAogIH07CiAgaWYgKGRldGFpbHMgIT0gbnVsbCkgewogICAgcmVzcG9uc2VbJ2Vycm9yJ11bJ2RhdGEnXSA9IHsKICAgICAgJ2RldGFpbHMnOiBkZXRhaWxzLAogICAgfTsKICB9CiAgcmV0dXJuIGpzb24uZW5jb2RlKHJlc3BvbnNlKTsKfQoKU3RyaW5nIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIHBhcmFtKSB7CiAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnZhbGlkUGFyYW1zLAogICAgICBkZXRhaWxzOiAiJHttZXNzYWdlLm1ldGhvZH0gZXhwZWN0cyB0aGUgJyR7cGFyYW19JyBwYXJhbWV0ZXIiKTsKfQoKU3RyaW5nIGVuY29kZUludmFsaWRQYXJhbUVycm9yKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIHBhcmFtKSB7CiAgdmFyIHZhbHVlID0gbWVzc2FnZS5wYXJhbXNbcGFyYW1dOwogIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrSW52YWxpZFBhcmFtcywKICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9OiBpbnZhbGlkICcke3BhcmFtfScgcGFyYW1ldGVyOiAke3ZhbHVlfSIpOwp9CgpTdHJpbmcgZW5jb2RlQ29tcGlsYXRpb25FcnJvcihNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBkaWFnbm9zdGljKSB7CiAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtFeHByZXNzaW9uQ29tcGlsYXRpb25FcnJvciwKICAgICAgZGV0YWlsczogZGlhZ25vc3RpYyk7Cn0KClN0cmluZyBlbmNvZGVSZXN1bHQoTWVzc2FnZSBtZXNzYWdlLCBNYXAgcmVzdWx0KSB7CiAgdmFyIHJlc3BvbnNlID0gewogICAgJ2pzb25ycGMnOiAnMi4wJywKICAgICdpZCc6IG1lc3NhZ2Uuc2VyaWFsLAogICAgJ3Jlc3VsdCc6IHJlc3VsdCwKICB9OwogIHJldHVybiBqc29uLmVuY29kZShyZXNwb25zZSk7Cn0KClN0cmluZyBlbmNvZGVTdWNjZXNzKE1lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBlbmNvZGVSZXN1bHQobWVzc2FnZSwgeyd0eXBlJzogJ1N1Y2Nlc3MnfSk7Cn0KCmNvbnN0IHNob3J0RGVsYXkgPSBjb25zdCBEdXJhdGlvbihtaWxsaXNlY29uZHM6IDEwKTsKCi8vLyBDYWxsZWQgd2hlbiB0aGUgc2VydmVyIHNob3VsZCBiZSBzdGFydGVkLgp0eXBlZGVmIEZ1dHVyZSBTZXJ2ZXJTdGFydENhbGxiYWNrKCk7CgovLy8gQ2FsbGVkIHdoZW4gdGhlIHNlcnZlciBzaG91bGQgYmUgc3RvcHBlZC4KdHlwZWRlZiBGdXR1cmUgU2VydmVyU3RvcENhbGxiYWNrKCk7CgovLy8gQ2FsbGVkIHdoZW4gdGhlIHNlcnZpY2UgaXMgZXhpdGluZy4KdHlwZWRlZiBGdXR1cmUgQ2xlYW51cENhbGxiYWNrKCk7CgovLy8gQ2FsbGVkIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkKdHlwZWRlZiBGdXR1cmU8VXJpPiBDcmVhdGVUZW1wRGlyQ2FsbGJhY2soU3RyaW5nIGJhc2UpOwoKLy8vIENhbGxlZCB0byBkZWxldGUgYSBkaXJlY3RvcnkKdHlwZWRlZiBGdXR1cmUgRGVsZXRlRGlyQ2FsbGJhY2soVXJpIHBhdGgpOwoKLy8vIENhbGxlZCB0byB3cml0ZSBhIGZpbGUuCnR5cGVkZWYgRnV0dXJlIFdyaXRlRmlsZUNhbGxiYWNrKFVyaSBwYXRoLCBMaXN0PGludD4gYnl0ZXMpOwoKLy8vIENhbGxlZCB0byB3cml0ZSBhIHN0cmVhbSBpbnRvIGEgZmlsZS4KdHlwZWRlZiBGdXR1cmUgV3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2soVXJpIHBhdGgsIFN0cmVhbTxMaXN0PGludD4+IGJ5dGVzKTsKCi8vLyBDYWxsZWQgdG8gcmVhZCBhIGZpbGUuCnR5cGVkZWYgRnV0dXJlPExpc3Q8aW50Pj4gUmVhZEZpbGVDYWxsYmFjayhVcmkgcGF0aCk7CgovLy8gQ2FsbGVkIHRvIGxpc3QgYWxsIGZpbGVzIHVuZGVyIHNvbWUgcGF0aC4KdHlwZWRlZiBGdXR1cmU8TGlzdDxNYXA8U3RyaW5nLCBkeW5hbWljPj4+IExpc3RGaWxlc0NhbGxiYWNrKFVyaSBwYXRoKTsKCi8vLyBDYWxsZWQgd2hlbiB3ZSBuZWVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2ZXIuCnR5cGVkZWYgRnV0dXJlPFVyaT4gU2VydmVySW5mb3JtYW1lc3NhZ2Vfcm91dGVydGlvbkNhbGxiYWNrKCk7CgovLy8gQ2FsbGVkIHdoZW4gd2UgbmVlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmVyLgp0eXBlZGVmIEZ1dHVyZTxVcmk+IFNlcnZlckluZm9ybWF0aW9uQ2FsbGJhY2soKTsKCi8vLyBDYWxsZWQgd2hlbiB3ZSB3YW50IHRvIFtlbmFibGVdIG9yIGRpc2FibGUgdGhlIHdlYiBzZXJ2ZXIuCnR5cGVkZWYgRnV0dXJlPFVyaT4gV2ViU2VydmVyQ29udHJvbENhbGxiYWNrKGJvb2wgZW5hYmxlKTsKCi8vLyBIb29rcyB0aGF0IGFyZSBzZXR1cCBieSB0aGUgZW1iZWRkZXIuCmNsYXNzIFZNU2VydmljZUVtYmVkZGVySG9va3MgewogIHN0YXRpYyBTZXJ2ZXJTdGFydENhbGxiYWNrIHNlcnZlclN0YXJ0OwogIHN0YXRpYyBTZXJ2ZXJTdG9wQ2FsbGJhY2sgc2VydmVyU3RvcDsKICBzdGF0aWMgQ2xlYW51cENhbGxiYWNrIGNsZWFudXA7CiAgc3RhdGljIENyZWF0ZVRlbXBEaXJDYWxsYmFjayBjcmVhdGVUZW1wRGlyOwogIHN0YXRpYyBEZWxldGVEaXJDYWxsYmFjayBkZWxldGVEaXI7CiAgc3RhdGljIFdyaXRlRmlsZUNhbGxiYWNrIHdyaXRlRmlsZTsKICBzdGF0aWMgV3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2sgd3JpdGVTdHJlYW1GaWxlOwogIHN0YXRpYyBSZWFkRmlsZUNhbGxiYWNrIHJlYWRGaWxlOwogIHN0YXRpYyBMaXN0RmlsZXNDYWxsYmFjayBsaXN0RmlsZXM7CiAgc3RhdGljIFNlcnZlckluZm9ybWF0aW9uQ2FsbGJhY2sgc2VydmVySW5mb3JtYXRpb247CiAgc3RhdGljIFdlYlNlcnZlckNvbnRyb2xDYWxsYmFjayB3ZWJTZXJ2ZXJDb250cm9sOwp9CgpjbGFzcyBWTVNlcnZpY2UgZXh0ZW5kcyBNZXNzYWdlUm91dGVyIHsKICBzdGF0aWMgVk1TZXJ2aWNlIF9pbnN0YW5jZTsKCiAgc3RhdGljIGNvbnN0IHNlcnZpY2VOYW1lc3BhY2UgPSAncyc7CgogIC8vLyBDb2xsZWN0aW9uIG9mIGN1cnJlbnRseSBjb25uZWN0ZWQgY2xpZW50cy4KICBmaW5hbCBOYW1lZExvb2t1cDxDbGllbnQ+IGNsaWVudHMgPQogICAgICBuZXcgTmFtZWRMb29rdXA8Q2xpZW50Pihwcm9sb2d1ZTogc2VydmljZU5hbWVzcGFjZSk7CiAgZmluYWwgSWRHZW5lcmF0b3IgX3NlcnZpY2VSZXF1ZXN0cyA9IG5ldyBJZEdlbmVyYXRvcihwcm9sb2d1ZTogJ3NyJyk7CgogIC8vLyBDb2xsZWN0aW9uIG9mIGN1cnJlbnRseSBydW5uaW5nIGlzb2xhdGVzLgogIFJ1bm5pbmdJc29sYXRlcyBydW5uaW5nSXNvbGF0ZXMgPSBuZXcgUnVubmluZ0lzb2xhdGVzKCk7CgogIC8vLyBGbGFnIHRvIGluZGljYXRlIFZNIHNlcnZpY2UgaXMgZXhpdGluZy4KICBib29sIGlzRXhpdGluZyA9IGZhbHNlOwoKICAvLy8gQSBwb3J0IHVzZWQgdG8gcmVjZWl2ZSBldmVudHMgZnJvbSB0aGUgVk0uCiAgZmluYWwgUmF3UmVjZWl2ZVBvcnQgZXZlbnRQb3J0OwoKICBmaW5hbCBkZXZmcyA9IG5ldyBEZXZGUygpOwoKICB2b2lkIF9hZGRDbGllbnQoQ2xpZW50IGNsaWVudCkgewogICAgYXNzZXJ0KGNsaWVudC5zdHJlYW1zLmlzRW1wdHkpOwogICAgYXNzZXJ0KGNsaWVudC5zZXJ2aWNlcy5pc0VtcHR5KTsKICAgIGNsaWVudHMuYWRkKGNsaWVudCk7CiAgfQoKICB2b2lkIF9yZW1vdmVDbGllbnQoQ2xpZW50IGNsaWVudCkgewogICAgZmluYWwgbmFtZXNwYWNlID0gY2xpZW50cy5rZXlPZihjbGllbnQpOwogICAgY2xpZW50cy5yZW1vdmUoY2xpZW50KTsKICAgIGZvciAodmFyIHN0cmVhbUlkIGluIGNsaWVudC5zdHJlYW1zKSB7CiAgICAgIGlmICghX2lzQW55Q2xpZW50U3Vic2NyaWJlZChzdHJlYW1JZCkpIHsKICAgICAgICBfdm1DYW5jZWxTdHJlYW0oc3RyZWFtSWQpOwogICAgICB9CiAgICB9CiAgICBmb3IgKHZhciBzZXJ2aWNlIGluIGNsaWVudC5zZXJ2aWNlcy5rZXlzKSB7CiAgICAgIF9ldmVudE1lc3NhZ2VIYW5kbGVyKAogICAgICAgICAgJ1NlcnZpY2UnLAogICAgICAgICAgbmV3IFJlc3BvbnNlLmpzb24oewogICAgICAgICAgICAnanNvbnJwYyc6ICcyLjAnLAogICAgICAgICAgICAnbWV0aG9kJzogJ3N0cmVhbU5vdGlmeScsCiAgICAgICAgICAgICdwYXJhbXMnOiB7CiAgICAgICAgICAgICAgJ3N0cmVhbUlkJzogJ1NlcnZpY2UnLAogICAgICAgICAgICAgICdldmVudCc6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogIkV2ZW50IiwKICAgICAgICAgICAgICAgICJraW5kIjogIlNlcnZpY2VVbnJlZ2lzdGVyZWQiLAogICAgICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IG5ldyBEYXRlVGltZS5ub3coKS5taWxsaXNlY29uZHNTaW5jZUVwb2NoLAogICAgICAgICAgICAgICAgJ3NlcnZpY2UnOiBzZXJ2aWNlLAogICAgICAgICAgICAgICAgJ21ldGhvZCc6IG5hbWVzcGFjZSArICcuJyArIHNlcnZpY2UsCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KSk7CiAgICB9CiAgICAvLyBDb21wbGV0ZSBhbGwgcmVxdWVzdHMgYXMgZmFpbGVkCiAgICBmb3IgKHZhciBoYW5kbGUgaW4gY2xpZW50LnNlcnZpY2VIYW5kbGVzLnZhbHVlcykgewogICAgICBoYW5kbGUobnVsbCk7CiAgICB9CiAgfQoKICB2b2lkIF9ldmVudE1lc3NhZ2VIYW5kbGVyKFN0cmluZyBzdHJlYW1JZCwgUmVzcG9uc2UgZXZlbnQpIHsKICAgIGZvciAodmFyIGNsaWVudCBpbiBjbGllbnRzKSB7CiAgICAgIGlmIChjbGllbnQuc2VuZEV2ZW50cyAmJiBjbGllbnQuc3RyZWFtcy5jb250YWlucyhzdHJlYW1JZCkpIHsKICAgICAgICBjbGllbnQucG9zdChldmVudCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX2NvbnRyb2xNZXNzYWdlSGFuZGxlcihpbnQgY29kZSwgaW50IHBvcnRJZCwgU2VuZFBvcnQgc3AsIFN0cmluZyBuYW1lKSB7CiAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgY2FzZSBDb25zdGFudHMuSVNPTEFURV9TVEFSVFVQX01FU1NBR0VfSUQ6CiAgICAgICAgcnVubmluZ0lzb2xhdGVzLmlzb2xhdGVTdGFydHVwKHBvcnRJZCwgc3AsIG5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50cy5JU09MQVRFX1NIVVRET1dOX01FU1NBR0VfSUQ6CiAgICAgICAgcnVubmluZ0lzb2xhdGVzLmlzb2xhdGVTaHV0ZG93bihwb3J0SWQsIHNwKTsKICAgICAgICBJc29sYXRlRW1iZWRkZXJEYXRhIGllZCA9IGlzb2xhdGVFbWJlZGRlckRhdGEucmVtb3ZlKHBvcnRJZCk7CiAgICAgICAgaWYgKGllZCAhPSBudWxsKSB7CiAgICAgICAgICBpZWQuY2xlYW51cCgpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICB9CgogIEZ1dHVyZTxOdWxsPiBfc2VydmVyTWVzc2FnZUhhbmRsZXIoaW50IGNvZGUsIFNlbmRQb3J0IHNwLCBib29sIGVuYWJsZSkgYXN5bmMgewogICAgc3dpdGNoIChjb2RlKSB7CiAgICAgIGNhc2UgQ29uc3RhbnRzLldFQl9TRVJWRVJfQ09OVFJPTF9NRVNTQUdFX0lEOgogICAgICAgIGlmIChWTVNlcnZpY2VFbWJlZGRlckhvb2tzLndlYlNlcnZlckNvbnRyb2wgPT0gbnVsbCkgewogICAgICAgICAgc3Auc2VuZChudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgVXJpIHVyaSA9IGF3YWl0IFZNU2VydmljZUVtYmVkZGVySG9va3Mud2ViU2VydmVyQ29udHJvbChlbmFibGUpOwogICAgICAgIHNwLnNlbmQodXJpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudHMuU0VSVkVSX0lORk9fTUVTU0FHRV9JRDoKICAgICAgICBpZiAoVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5zZXJ2ZXJJbmZvcm1hdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICBzcC5zZW5kKG51bGwpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBVcmkgdXJpID0gYXdhaXQgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5zZXJ2ZXJJbmZvcm1hdGlvbigpOwogICAgICAgIHNwLnNlbmQodXJpKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CgogIEZ1dHVyZTxOdWxsPiBfaGFuZGxlTmF0aXZlUnBjQ2FsbChtZXNzYWdlLCBTZW5kUG9ydCByZXBseVBvcnQpIGFzeW5jIHsKICAgIC8vIEtlZXAgaW4gc3luYyB3aXRoICJydW50aW1lL3ZtL3NlcnZpY2VfaXNvbGF0ZS5jYzpJbnZva2VTZXJ2aWNlUnBjIi4KICAgIFJlc3BvbnNlIHJlc3BvbnNlOwoKICAgIHRyeSB7CiAgICAgIGZpbmFsIE1lc3NhZ2UgcnBjID0gbmV3IE1lc3NhZ2UuZnJvbUpzb25ScGMoCiAgICAgICAgICBudWxsLCBqc29uLmRlY29kZSh1dGY4LmRlY29kZShtZXNzYWdlIGFzIExpc3Q8aW50PikpKTsKICAgICAgaWYgKHJwYy50eXBlICE9IE1lc3NhZ2VUeXBlLlJlcXVlc3QpIHsKICAgICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZS5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICAnVGhlIGNsaWVudCBzZW50IGEgbm9uLXJlcXVlc3QganNvbi1ycGMgbWVzc2FnZS4nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXNwb25zZSA9IGF3YWl0IHJvdXRlUmVxdWVzdCh0aGlzLCBycGMpOwogICAgICB9CiAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UuaW50ZXJuYWxFcnJvcigKICAgICAgICAgICdUaGUgcnBjIGNhbGwgcmVzdWx0ZWQgaW4gZXhjZXB0aW9uOiAkZXhjZXB0aW9uLicpOwogICAgfQogICAgTGlzdDxpbnQ+IGJ5dGVzOwogICAgc3dpdGNoIChyZXNwb25zZS5raW5kKSB7CiAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5TdHJpbmc6CiAgICAgICAgYnl0ZXMgPSB1dGY4LmVuY29kZShyZXNwb25zZS5wYXlsb2FkKTsKICAgICAgICBieXRlcyA9IGJ5dGVzIGlzIFVpbnQ4TGlzdCA/IGJ5dGVzIDogbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChieXRlcyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5CaW5hcnk6CiAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5VdGY4U3RyaW5nOgogICAgICAgIGJ5dGVzID0gcmVzcG9uc2UucGF5bG9hZCBhcyBVaW50OExpc3Q7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXBseVBvcnQuc2VuZChieXRlcyk7CiAgfQoKICBGdXR1cmUgX2V4aXQoKSBhc3luYyB7CiAgICBpc0V4aXRpbmcgPSB0cnVlOwoKICAgIC8vIFN0b3AgdGhlIHNlcnZlci4KICAgIGlmIChWTVNlcnZpY2VFbWJlZGRlckhvb2tzLnNlcnZlclN0b3AgIT0gbnVsbCkgewogICAgICBhd2FpdCBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLnNlcnZlclN0b3AoKTsKICAgIH0KCiAgICAvLyBDbG9zZSByZWNlaXZlIHBvcnRzLgogICAgaXNvbGF0ZUNvbnRyb2xQb3J0LmNsb3NlKCk7CiAgICBzY3JpcHRMb2FkUG9ydC5jbG9zZSgpOwoKICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIHNldCBhcyBhIGxpc3QgYmVjYXVzZSBjbGllbnQuZGlzY29ubmVjdCgpIHdpbGwKICAgIC8vIGFsdGVyIHRoZSBjb25uZWN0ZWQgY2xpZW50cyBzZXQuCiAgICB2YXIgY2xpZW50c0xpc3QgPSBjbGllbnRzLnRvTGlzdCgpOwogICAgZm9yICh2YXIgY2xpZW50IGluIGNsaWVudHNMaXN0KSB7CiAgICAgIGNsaWVudC5kaXNjb25uZWN0KCk7CiAgICB9CiAgICBkZXZmcy5jbGVhbnVwKCk7CiAgICBpZiAoVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5jbGVhbnVwICE9IG51bGwpIHsKICAgICAgYXdhaXQgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5jbGVhbnVwKCk7CiAgICB9CgogICAgLy8gTm90aWZ5IHRoZSBWTSB0aGF0IHdlIGhhdmUgZXhpdGVkLgogICAgX29uRXhpdCgpOwogIH0KCiAgdm9pZCBtZXNzYWdlSGFuZGxlcihtZXNzYWdlKSB7CiAgICBpZiAobWVzc2FnZSBpcyBMaXN0KSB7CiAgICAgIGlmIChtZXNzYWdlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgLy8gVGhpcyBpcyBhbiBldmVudC4KICAgICAgICBfZXZlbnRNZXNzYWdlSGFuZGxlcihtZXNzYWdlWzBdLCBuZXcgUmVzcG9uc2UuZnJvbShtZXNzYWdlWzFdKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnRyb2wgbWVzc2FnZSBkaXJlY3RpbmcgdGhlIHZtIHNlcnZpY2UgdG8gZXhpdC4KICAgICAgICBhc3NlcnQobWVzc2FnZVswXSA9PSBDb25zdGFudHMuU0VSVklDRV9FWElUX01FU1NBR0VfSUQpOwogICAgICAgIF9leGl0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgZmluYWwgb3Bjb2RlID0gbWVzc2FnZVswXTsKICAgICAgICBpZiAob3Bjb2RlID09IENvbnN0YW50cy5NRVRIT0RfQ0FMTF9GUk9NX05BVElWRSkgewogICAgICAgICAgX2hhbmRsZU5hdGl2ZVJwY0NhbGwobWVzc2FnZVsxXSwgbWVzc2FnZVsyXSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFRoaXMgaXMgYSBtZXNzYWdlIGludGVyYWN0aW5nIHdpdGggdGhlIHdlYiBzZXJ2ZXIuCiAgICAgICAgICBhc3NlcnQoKG9wY29kZSA9PSBDb25zdGFudHMuV0VCX1NFUlZFUl9DT05UUk9MX01FU1NBR0VfSUQpIHx8CiAgICAgICAgICAgICAgKG9wY29kZSA9PSBDb25zdGFudHMuU0VSVkVSX0lORk9fTUVTU0FHRV9JRCkpOwogICAgICAgICAgX3NlcnZlck1lc3NhZ2VIYW5kbGVyKG1lc3NhZ2VbMF0sIG1lc3NhZ2VbMV0sIG1lc3NhZ2VbMl0pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobWVzc2FnZS5sZW5ndGggPT0gNCkgewogICAgICAgIC8vIFRoaXMgaXMgYSBtZXNzYWdlIGluZm9ybWluZyB1cyBvZiB0aGUgYmlydGggb3IgZGVhdGggb2YgYW4KICAgICAgICAvLyBpc29sYXRlLgogICAgICAgIF9jb250cm9sTWVzc2FnZUhhbmRsZXIobWVzc2FnZVswXSwgbWVzc2FnZVsxXSwgbWVzc2FnZVsyXSwgbWVzc2FnZVszXSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBwcmludCgnSW50ZXJuYWwgdm0tc2VydmljZSBlcnJvcjogaWdub3JpbmcgaWxsZWdhbCBtZXNzYWdlOiAkbWVzc2FnZScpOwogIH0KCiAgVk1TZXJ2aWNlLl9pbnRlcm5hbCgpIDogZXZlbnRQb3J0ID0gaXNvbGF0ZUNvbnRyb2xQb3J0IHsKICAgIGV2ZW50UG9ydC5oYW5kbGVyID0gbWVzc2FnZUhhbmRsZXI7CiAgfQoKICBmYWN0b3J5IFZNU2VydmljZSgpIHsKICAgIGlmIChWTVNlcnZpY2UuX2luc3RhbmNlID09IG51bGwpIHsKICAgICAgVk1TZXJ2aWNlLl9pbnN0YW5jZSA9IG5ldyBWTVNlcnZpY2UuX2ludGVybmFsKCk7CiAgICAgIF9vblN0YXJ0KCk7CiAgICB9CiAgICByZXR1cm4gX2luc3RhbmNlOwogIH0KCiAgYm9vbCBfaXNBbnlDbGllbnRTdWJzY3JpYmVkKFN0cmluZyBzdHJlYW1JZCkgewogICAgZm9yICh2YXIgY2xpZW50IGluIGNsaWVudHMpIHsKICAgICAgaWYgKGNsaWVudC5zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbUlkKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBDbGllbnQgX2ZpbmRGaXJzdENsaWVudFRoYXRIYW5kbGVzU2VydmljZShTdHJpbmcgc2VydmljZSkgewogICAgaWYgKGNsaWVudHMgIT0gbnVsbCkgewogICAgICBmb3IgKENsaWVudCBjIGluIGNsaWVudHMpIHsKICAgICAgICBpZiAoYy5zZXJ2aWNlcy5jb250YWluc0tleShzZXJ2aWNlKSkgewogICAgICAgICAgcmV0dXJuIGM7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBjb25zdCBrU2VydmljZVN0cmVhbSA9ICdTZXJ2aWNlJzsKICBzdGF0aWMgY29uc3Qgc2VydmljZVN0cmVhbXMgPSBjb25zdCBba1NlcnZpY2VTdHJlYW1dOwoKICBGdXR1cmU8U3RyaW5nPiBfc3RyZWFtTGlzdGVuKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIGNsaWVudCA9IG1lc3NhZ2UuY2xpZW50OwogICAgdmFyIHN0cmVhbUlkID0gbWVzc2FnZS5wYXJhbXNbJ3N0cmVhbUlkJ107CgogICAgaWYgKGNsaWVudC5zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbUlkKSkgewogICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga1N0cmVhbUFscmVhZHlTdWJzY3JpYmVkKTsKICAgIH0KICAgIGlmICghX2lzQW55Q2xpZW50U3Vic2NyaWJlZChzdHJlYW1JZCkpIHsKICAgICAgaWYgKCFzZXJ2aWNlU3RyZWFtcy5jb250YWlucyhzdHJlYW1JZCkgJiYgIV92bUxpc3RlblN0cmVhbShzdHJlYW1JZCkpIHsKICAgICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ludmFsaWRQYXJhbXMsCiAgICAgICAgICAgIGRldGFpbHM6ICJzdHJlYW1MaXN0ZW46IGludmFsaWQgJ3N0cmVhbUlkJyBwYXJhbWV0ZXI6ICR7c3RyZWFtSWR9Iik7CiAgICAgIH0KICAgIH0KCiAgICAvLyBTb21lIHN0cmVhbXMgY2FuIGdlbmVyYXRlIGV2ZW50cyBvciBzaWRlIGVmZmVjdHMgYWZ0ZXIgcmVnaXN0cmF0aW9uCiAgICBzd2l0Y2ggKHN0cmVhbUlkKSB7CiAgICAgIGNhc2Uga1NlcnZpY2VTdHJlYW06CiAgICAgICAgZm9yIChDbGllbnQgYyBpbiBjbGllbnRzKSB7CiAgICAgICAgICBpZiAoYyA9PSBjbGllbnQpIGNvbnRpbnVlOwogICAgICAgICAgZm9yIChTdHJpbmcgc2VydmljZSBpbiBjLnNlcnZpY2VzLmtleXMpIHsKICAgICAgICAgICAgX3NlbmRTZXJ2aWNlUmVnaXN0ZXJlZEV2ZW50KGMsIHNlcnZpY2UsIHRhcmdldDogY2xpZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGNsaWVudC5zdHJlYW1zLmFkZChzdHJlYW1JZCk7CiAgICByZXR1cm4gZW5jb2RlU3VjY2VzcyhtZXNzYWdlKTsKICB9CgogIEZ1dHVyZTxTdHJpbmc+IF9zdHJlYW1DYW5jZWwoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgY2xpZW50ID0gbWVzc2FnZS5jbGllbnQ7CiAgICB2YXIgc3RyZWFtSWQgPSBtZXNzYWdlLnBhcmFtc1snc3RyZWFtSWQnXTsKCiAgICBpZiAoIWNsaWVudC5zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbUlkKSkgewogICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga1N0cmVhbU5vdFN1YnNjcmliZWQpOwogICAgfQogICAgY2xpZW50LnN0cmVhbXMucmVtb3ZlKHN0cmVhbUlkKTsKICAgIGlmICghc2VydmljZVN0cmVhbXMuY29udGFpbnMoc3RyZWFtSWQpICYmCiAgICAgICAgIV9pc0FueUNsaWVudFN1YnNjcmliZWQoc3RyZWFtSWQpKSB7CiAgICAgIF92bUNhbmNlbFN0cmVhbShzdHJlYW1JZCk7CiAgICB9CgogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBzdGF0aWMgYm9vbCBfaGFzTmFtZXNwYWNlKFN0cmluZyBtZXRob2QpID0+CiAgICAgIG1ldGhvZC5jb250YWlucygnLicpICYmCiAgICAgIF9nZXROYW1lc3BhY2UobWV0aG9kKS5zdGFydHNXaXRoKHNlcnZpY2VOYW1lc3BhY2UpOwogIHN0YXRpYyBTdHJpbmcgX2dldE5hbWVzcGFjZShTdHJpbmcgbWV0aG9kKSA9PiBtZXRob2Quc3BsaXQoJy4nKS5maXJzdDsKICBzdGF0aWMgU3RyaW5nIF9nZXRNZXRob2QoU3RyaW5nIG1ldGhvZCkgPT4gbWV0aG9kLnNwbGl0KCcuJykubGFzdDsKCiAgRnV0dXJlPFN0cmluZz4gX3JlZ2lzdGVyU2VydmljZShNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIGZpbmFsIGNsaWVudCA9IG1lc3NhZ2UuY2xpZW50OwogICAgZmluYWwgc2VydmljZSA9IG1lc3NhZ2UucGFyYW1zWydzZXJ2aWNlJ107CiAgICBmaW5hbCBhbGlhcyA9IG1lc3NhZ2UucGFyYW1zWydhbGlhcyddOwoKICAgIGlmIChzZXJ2aWNlIGlzISBTdHJpbmcgfHwgc2VydmljZSA9PSAnJykgewogICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ludmFsaWRQYXJhbXMsCiAgICAgICAgICBkZXRhaWxzOiAicmVnaXN0ZXJTZXJ2aWNlOiBpbnZhbGlkICdzZXJ2aWNlJyBwYXJhbWV0ZXI6ICR7c2VydmljZX0iKTsKICAgIH0KICAgIGlmIChhbGlhcyBpcyEgU3RyaW5nIHx8IGFsaWFzID09ICcnKSB7CiAgICAgIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrSW52YWxpZFBhcmFtcywKICAgICAgICAgIGRldGFpbHM6ICJyZWdpc3RlclNlcnZpY2U6IGludmFsaWQgJ2FsaWFzJyBwYXJhbWV0ZXI6ICR7YWxpYXN9Iik7CiAgICB9CiAgICBpZiAoY2xpZW50LnNlcnZpY2VzLmNvbnRhaW5zS2V5KHNlcnZpY2UpKSB7CiAgICAgIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrU2VydmljZUFscmVhZHlSZWdpc3RlcmVkKTsKICAgIH0KICAgIGNsaWVudC5zZXJ2aWNlc1tzZXJ2aWNlXSA9IGFsaWFzOwoKICAgIGJvb2wgcmVtb3ZlZDsKICAgIHRyeSB7CiAgICAgIC8vIERvIG5vdCBzZW5kIHN0cmVhbWluZyBldmVudHMgdG8gdGhlIGNsaWVudCB3aGljaCByZWdpc3RlcnMgdGhlIHNlcnZpY2UKICAgICAgcmVtb3ZlZCA9IGNsaWVudC5zdHJlYW1zLnJlbW92ZShrU2VydmljZVN0cmVhbSk7CiAgICAgIGF3YWl0IF9zZW5kU2VydmljZVJlZ2lzdGVyZWRFdmVudChjbGllbnQsIHNlcnZpY2UpOwogICAgfSBmaW5hbGx5IHsKICAgICAgaWYgKHJlbW92ZWQpIGNsaWVudC5zdHJlYW1zLmFkZChrU2VydmljZVN0cmVhbSk7CiAgICB9CgogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBfc2VuZFNlcnZpY2VSZWdpc3RlcmVkRXZlbnQoQ2xpZW50IGNsaWVudCwgU3RyaW5nIHNlcnZpY2UsCiAgICAgIHtDbGllbnQgdGFyZ2V0fSkgYXN5bmMgewogICAgZmluYWwgbmFtZXNwYWNlID0gY2xpZW50cy5rZXlPZihjbGllbnQpOwogICAgZmluYWwgYWxpYXMgPSBjbGllbnQuc2VydmljZXNbc2VydmljZV07CiAgICBmaW5hbCBldmVudCA9IG5ldyBSZXNwb25zZS5qc29uKHsKICAgICAgJ2pzb25ycGMnOiAnMi4wJywKICAgICAgJ21ldGhvZCc6ICdzdHJlYW1Ob3RpZnknLAogICAgICAncGFyYW1zJzogewogICAgICAgICdzdHJlYW1JZCc6IGtTZXJ2aWNlU3RyZWFtLAogICAgICAgICdldmVudCc6IHsKICAgICAgICAgICJ0eXBlIjogIkV2ZW50IiwKICAgICAgICAgICJraW5kIjogIlNlcnZpY2VSZWdpc3RlcmVkIiwKICAgICAgICAgICd0aW1lc3RhbXAnOiBuZXcgRGF0ZVRpbWUubm93KCkubWlsbGlzZWNvbmRzU2luY2VFcG9jaCwKICAgICAgICAgICdzZXJ2aWNlJzogc2VydmljZSwKICAgICAgICAgICdtZXRob2QnOiBuYW1lc3BhY2UgKyAnLicgKyBzZXJ2aWNlLAogICAgICAgICAgJ2FsaWFzJzogYWxpYXMKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgaWYgKHRhcmdldCA9PSBudWxsKSB7CiAgICAgIF9ldmVudE1lc3NhZ2VIYW5kbGVyKGtTZXJ2aWNlU3RyZWFtLCBldmVudCk7CiAgICB9IGVsc2UgewogICAgICB0YXJnZXQucG9zdChldmVudCk7CiAgICB9CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfaGFuZGxlU2VydmljZShNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIGZpbmFsIG5hbWVzcGFjZSA9IF9nZXROYW1lc3BhY2UobWVzc2FnZS5tZXRob2QpOwogICAgZmluYWwgbWV0aG9kID0gX2dldE1ldGhvZChtZXNzYWdlLm1ldGhvZCk7CiAgICBmaW5hbCBjbGllbnQgPSBjbGllbnRzW25hbWVzcGFjZV07CiAgICBpZiAoY2xpZW50ICE9IG51bGwpIHsKICAgICAgaWYgKGNsaWVudC5zZXJ2aWNlcy5jb250YWluc0tleShtZXRob2QpKSB7CiAgICAgICAgZmluYWwgaWQgPSBfc2VydmljZVJlcXVlc3RzLm5ld0lkKCk7CiAgICAgICAgZmluYWwgb2xkSWQgPSBtZXNzYWdlLnNlcmlhbDsKICAgICAgICBmaW5hbCBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFN0cmluZz4oKTsKICAgICAgICBjbGllbnQuc2VydmljZUhhbmRsZXNbaWRdID0gKE1lc3NhZ2UgbSkgewogICAgICAgICAgaWYgKG0gIT0gbnVsbCkgewogICAgICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUoanNvbi5lbmNvZGUobS5mb3J3YXJkVG9Kc29uKHsnaWQnOiBvbGRJZH0pKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUoZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga1NlcnZpY2VEaXNhcHBlYXJlZCkpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY2xpZW50LnBvc3QobmV3IFJlc3BvbnNlLmpzb24oCiAgICAgICAgICAgIG1lc3NhZ2UuZm9yd2FyZFRvSnNvbih7J2lkJzogaWQsICdtZXRob2QnOiBtZXRob2R9KSkpOwogICAgICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga01ldGhvZE5vdEZvdW5kLAogICAgICAgIGRldGFpbHM6ICJVbmtub3duIHNlcnZpY2U6ICR7bWVzc2FnZS5tZXRob2R9Iik7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfc3Bhd25VcmkoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgdG9rZW4gPSBtZXNzYWdlLnBhcmFtc1sndG9rZW4nXTsKICAgIGlmICh0b2tlbiA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAndG9rZW4nKTsKICAgIH0KICAgIGlmICh0b2tlbiBpcyEgU3RyaW5nKSB7CiAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAndG9rZW4nKTsKICAgIH0KICAgIHZhciB1cmkgPSBtZXNzYWdlLnBhcmFtc1sndXJpJ107CiAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgIH0KICAgIGlmICh1cmkgaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3VyaScpOwogICAgfQogICAgdmFyIGFyZ3MgPSBtZXNzYWdlLnBhcmFtc1snYXJncyddOwogICAgdmFyIGFyZ3NPZlN0cmluZyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICAgIGlmIChhcmdzICE9IG51bGwpIHsKICAgICAgaWYgKGFyZ3MgaXMhIExpc3QpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2FyZ3MnKTsKICAgICAgfQogICAgICBmb3IgKHZhciBhcmcgaW4gYXJncykgewogICAgICAgIGlmIChhcmcgaXMhIFN0cmluZykgewogICAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdhcmdzJyk7CiAgICAgICAgfQogICAgICAgIGFyZ3NPZlN0cmluZy5hZGQoYXJnKTsKICAgICAgfQogICAgfQogICAgdmFyIG1zZyA9IG1lc3NhZ2UucGFyYW1zWydtZXNzYWdlJ107CgogICAgSXNvbGF0ZS5zcGF3blVyaShVcmkucGFyc2UodXJpKSwgYXJnc09mU3RyaW5nLCBtc2cpLnRoZW4oKGlzb2xhdGUpIHsKICAgICAgX3NwYXduVXJpTm90aWZ5KGlzb2xhdGUuY29udHJvbFBvcnQsIHRva2VuKTsKICAgIH0pLmNhdGNoRXJyb3IoKGUpIHsKICAgICAgX3NwYXduVXJpTm90aWZ5KGUudG9TdHJpbmcoKSwgdG9rZW4pOwogICAgfSk7CgogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBGdXR1cmU8UmVzcG9uc2U+IHJvdXRlUmVxdWVzdChWTVNlcnZpY2UgXywgTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICBmaW5hbCByZXNwb25zZSA9IGF3YWl0IF9yb3V0ZVJlcXVlc3RJbXBsKG1lc3NhZ2UpOwogICAgaWYgKHJlc3BvbnNlID09IG51bGwpIHsKICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgaGF2ZSBhIG51bGwgcmVzcG9uc2UgZm9yIE5vdGlmaWNhdGlvbnMuCiAgICAgIGFzc2VydChtZXNzYWdlLnR5cGUgPT0gTWVzc2FnZVR5cGUuTm90aWZpY2F0aW9uKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gbmV3IFJlc3BvbnNlLmZyb20ocmVzcG9uc2UpOwogIH0KCiAgRnV0dXJlIF9yb3V0ZVJlcXVlc3RJbXBsKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdHJ5IHsKICAgICAgaWYgKG1lc3NhZ2UuY29tcGxldGVkKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IG1lc3NhZ2UucmVzcG9uc2U7CiAgICAgIH0KICAgICAgaWYgKG1lc3NhZ2UubWV0aG9kID09ICdzdHJlYW1MaXN0ZW4nKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IF9zdHJlYW1MaXN0ZW4obWVzc2FnZSk7CiAgICAgIH0KICAgICAgaWYgKG1lc3NhZ2UubWV0aG9kID09ICdzdHJlYW1DYW5jZWwnKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IF9zdHJlYW1DYW5jZWwobWVzc2FnZSk7CiAgICAgIH0KICAgICAgaWYgKG1lc3NhZ2UubWV0aG9kID09ICdyZWdpc3RlclNlcnZpY2UnKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IF9yZWdpc3RlclNlcnZpY2UobWVzc2FnZSk7CiAgICAgIH0KICAgICAgaWYgKG1lc3NhZ2UubWV0aG9kID09ICdfc3Bhd25VcmknKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IF9zcGF3blVyaShtZXNzYWdlKTsKICAgICAgfQogICAgICBpZiAoZGV2ZnMuc2hvdWxkSGFuZGxlTWVzc2FnZShtZXNzYWdlKSkgewogICAgICAgIHJldHVybiBhd2FpdCBkZXZmcy5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGlmIChfaGFzTmFtZXNwYWNlKG1lc3NhZ2UubWV0aG9kKSkgewogICAgICAgIHJldHVybiBhd2FpdCBfaGFuZGxlU2VydmljZShtZXNzYWdlKTsKICAgICAgfQogICAgICBpZiAobWVzc2FnZS5wYXJhbXNbJ2lzb2xhdGVJZCddICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gYXdhaXQgcnVubmluZ0lzb2xhdGVzLnJvdXRlUmVxdWVzdCh0aGlzLCBtZXNzYWdlKTsKICAgICAgfQogICAgICByZXR1cm4gYXdhaXQgbWVzc2FnZS5zZW5kVG9WTSgpOwogICAgfSBjYXRjaCAoZSwgc3QpIHsKICAgICAgbWVzc2FnZS5zZXRFcnJvclJlc3BvbnNlKGtJbnRlcm5hbEVycm9yLCAnVW5leHBlY3RlZCBleGNlcHRpb246JGVcbiRzdCcpOwogICAgICByZXR1cm4gbWVzc2FnZS5yZXNwb25zZTsKICAgIH0KICB9CgogIHZvaWQgcm91dGVSZXNwb25zZShtZXNzYWdlKSB7CiAgICBmaW5hbCBjbGllbnQgPSBtZXNzYWdlLmNsaWVudDsKICAgIGlmIChjbGllbnQuc2VydmljZUhhbmRsZXMuY29udGFpbnNLZXkobWVzc2FnZS5zZXJpYWwpKSB7CiAgICAgIGNsaWVudC5zZXJ2aWNlSGFuZGxlcy5yZW1vdmUobWVzc2FnZS5zZXJpYWwpKG1lc3NhZ2UpOwogICAgICBfc2VydmljZVJlcXVlc3RzLnJlbGVhc2UobWVzc2FnZS5zZXJpYWwpOwogICAgfQogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpClJhd1JlY2VpdmVQb3J0IGJvb3QoKSB7CiAgLy8gUmV0dXJuIHRoZSBwb3J0IHdlIGV4cGVjdCBpc29sYXRlIGNvbnRyb2wgbWVzc2FnZXMgb24uCiAgcmV0dXJuIGlzb2xhdGVDb250cm9sUG9ydDsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAhY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQudm0ucHJvZHVjdCIpKQp2b2lkIF9yZWdpc3Rlcklzb2xhdGUoaW50IHBvcnRfaWQsIFNlbmRQb3J0IHNwLCBTdHJpbmcgbmFtZSkgewogIHZhciBzZXJ2aWNlID0gbmV3IFZNU2VydmljZSgpOwogIHNlcnZpY2UucnVubmluZ0lzb2xhdGVzLmlzb2xhdGVTdGFydHVwKHBvcnRfaWQsIHNwLCBuYW1lKTsKfQoKLy8vIE5vdGlmeSB0aGUgVk0gdGhhdCB0aGUgc2VydmljZSBpcyBydW5uaW5nLgp2b2lkIF9vblN0YXJ0KCkgbmF0aXZlICJWTVNlcnZpY2VfT25TdGFydCI7CgovLy8gTm90aWZ5IHRoZSBWTSB0aGF0IHRoZSBzZXJ2aWNlIGlzIG5vIGxvbmdlciBydW5uaW5nLgp2b2lkIF9vbkV4aXQoKSBuYXRpdmUgIlZNU2VydmljZV9PbkV4aXQiOwoKLy8vIE5vdGlmeSB0aGUgVk0gdGhhdCB0aGUgc2VydmVyJ3MgYWRkcmVzcyBoYXMg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bCBTZXQ8U3RyaW5nPiBzdHJlYW1zID0gbmV3IFNldDxTdHJpbmc+KCk7CgogIC8vLyBTZXJ2aWNlcyByZWdpc3RlcmVkIGFuZCB0aGVpciBhbGlhc2VzCiAgLy8vIGtleTogc2VydmljZQogIC8vLyB2YWx1ZTogYWxpYXMKICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHNlcnZpY2VzID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKCiAgLy8vIENhbGxiYWNrcyByZWdpc3RlcmVkIGZvciBzZXJ2aWNlIGludm9jYXRpb25zIHNldCB0byB0aGUgY2xpZW50CiAgLy8vIGtleTogUlBDIGlkIHVzZWQgZm9yIHRoZSByZXF1ZXN0CiAgLy8vIHZhbHVlOiBjYWxsYmFjayB0aGF0IHNob3VsZCBiZSBpbnZva2VkCiAgZmluYWwgTWFwPFN0cmluZywgQ2xpZW50U2VydmljZUhhbmRsZT4gc2VydmljZUhhbmRsZXMgPQogICAgICBuZXcgTWFwPFN0cmluZywgQ2xpZW50U2VydmljZUhhbmRsZT4oKTsKCiAgQ2xpZW50KHRoaXMuc2VydmljZSwge2Jvb2wgc2VuZEV2ZW50czogdHJ1ZX0pIDogdGhpcy5zZW5kRXZlbnRzID0gc2VuZEV2ZW50cyB7CiAgICBzZXJ2aWNlLl9hZGRDbGllbnQodGhpcyk7CiAgfQoKICAvLyBEaXNjb25uZWN0cyB0aGUgY2xpZW50LgogIGRpc2Nvbm5lY3QoKTsKCiAgLy8vIFdoZW4gaW1wbGVtZW50aW5nLCBjYWxsIFtjbG9zZV0gd2hlbiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGNsb3Nlcy4KICB2b2lkIGNsb3NlKCkgewogICAgc2VydmljZS5fcmVtb3ZlQ2xpZW50KHRoaXMpOwogIH0KCiAgLy8vIENhbGwgdG8gcHJvY2VzcyBhIHJlcXVlc3QuIFJlc3BvbnNlIHdpbGwgYmUgcG9zdGVkIHdpdGggJ3NlcScuCiAgdm9pZCBvblJlcXVlc3QoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAvLyBJbiBKU09OLVJQQyAyLjAgbWVzc2FnZXMgd2l0aCBhbmQgaWQgYXJlIFJlcXVlc3QgYW5kIG11c3QgYmUgYW5zd2VyZWQKICAgIC8vIGh0dHA6Ly93d3cuanNvbnJwYy5vcmcvc3BlY2lmaWNhdGlvbiNub3RpZmljYXRpb24KICAgIHNlcnZpY2Uucm91dGVSZXF1ZXN0KHNlcnZpY2UsIG1lc3NhZ2UpLnRoZW4ocG9zdCk7CiAgfQoKICB2b2lkIG9uUmVzcG9uc2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBzZXJ2aWNlLnJvdXRlUmVzcG9uc2UobWVzc2FnZSk7CiAgfQoKICAvLy8gQ2FsbCB0byBwcm9jZXNzIGEgbm90aWZpY2F0aW9uLiBSZXNwb25zZSB3aWxsIG5vdCBiZSBwb3N0ZWQuCiAgdm9pZCBvbk5vdGlmaWNhdGlvbihNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIC8vIEluIEpTT04tUlBDIDIuMCBtZXNzYWdlcyB3aXRob3V0IGFuIGlkIGFyZSBOb3RpZmljYXRpb24KICAgIC8vIGFuZCBzaG91bGQgbm90IGJlIGFuc3dlcmVkCiAgICAvLyBodHRwOi8vd3d3Lmpzb25ycGMub3JnL3NwZWNpZmljYXRpb24jbm90aWZpY2F0aW9uCiAgICBzZXJ2aWNlLnJvdXRlUmVxdWVzdChzZXJ2aWNlLCBtZXNzYWdlKTsKICB9CgogIC8vIFNlbmRzIGEgcmVzdWx0IHRvIHRoZSBjbGllbnQuICBJbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzLgogIHZvaWQgcG9zdChSZXNwb25zZSByZXN1bHQpOwoKICBkeW5hbWljIHRvSnNvbigpIHsKICAgIHJldHVybiB7fTsKICB9Cn0KQwBOTjwBGQE0ARUYGxkBTTEBLBMTQgFFJy06LgFRHgQBHRABShEhBAFFJE05NwQBJSQEAUMpPyI5LAQBPx4BFQ8EAgEbZGFydDpfdm1zZXJ2aWNlL2NsaWVudC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi92bXNlcnZpY2UvYXNzZXQuZGFydIcHLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKY2xhc3MgQXNzZXQgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFVpbnQ4TGlzdCBkYXRhOwoKICBBc3NldCh0aGlzLm5hbWUsIHRoaXMuZGF0YSk7CgogIFN0cmluZyBnZXQgbWltZVR5cGUgewogICAgdmFyIGV4dGVuc2lvblN0YXJ0ID0gbmFtZS5sYXN0SW5kZXhPZignLicpOwogICAgdmFyIGV4dGVuc2lvbiA9IG5hbWUuc3Vic3RyaW5nKGV4dGVuc2lvblN0YXJ0ICsgMSk7CiAgICBzd2l0Y2ggKGV4dGVuc2lvbikgewogICAgICBjYXNlICdodG1sJzoKICAgICAgICByZXR1cm4gJ3RleHQvaHRtbDsgY2hhcnNldD1VVEYtOCc7CiAgICAgIGNhc2UgJ2RhcnQnOgogICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vZGFydDsgY2hhcnNldD1VVEYtOCc7CiAgICAgIGNhc2UgJ2pzJzoKICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQ7IGNoYXJzZXQ9VVRGLTgnOwogICAgICBjYXNlICdjc3MnOgogICAgICAgIHJldHVybiAndGV4dC9jc3M7IGNoYXJzZXQ9VVRGLTgnOwogICAgICBjYXNlICdnaWYnOgogICAgICAgIHJldHVybiAnaW1hZ2UvZ2lmJzsKICAgICAgY2FzZSAncG5nJzoKICAgICAgICByZXR1cm4gJ2ltYWdlL3BuZyc7CiAgICAgIGNhc2UgJ2pwZyc6CiAgICAgICAgcmV0dXJuICdpbWFnZS9qcGVnJzsKICAgICAgY2FzZSAnanBlZyc6CiAgICAgICAgcmV0dXJuICdpbWFnZS9qcGVnJzsKICAgICAgY2FzZSAnc3ZnJzoKICAgICAgICByZXR1cm4gJ2ltYWdlL3N2Zyt4bWwnOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7CiAgICB9CiAgfQoKICBzdGF0aWMgTWFwPFN0cmluZywgQXNzZXQ+IHJlcXVlc3QoKSB7CiAgICBVaW50OExpc3QgdGFyQnl0ZXMgPSBfcmVxdWVzdEFzc2V0cygpOwogICAgaWYgKHRhckJ5dGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBMaXN0IGFzc2V0TGlzdCA9IF9kZWNvZGVBc3NldHModGFyQnl0ZXMpOwogICAgTWFwPFN0cmluZywgQXNzZXQ+IGFzc2V0cyA9IG5ldyBIYXNoTWFwPFN0cmluZywgQXNzZXQ+KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFzc2V0TGlzdC5sZW5ndGg7IGkgKz0gMikgewogICAgICB2YXIgYSA9IG5ldyBBc3NldChhc3NldExpc3RbaV0sIGFzc2V0TGlzdFtpICsgMV0pOwogICAgICBhc3NldHNbYS5uYW1lXSA9IGE7CiAgICB9CiAgICByZXR1cm4gYXNzZXRzOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRuYW1lICgkbWltZVR5cGUpJzsKfQoKTGlzdCBfZGVjb2RlQXNzZXRzKFVpbnQ4TGlzdCBkYXRhKSBuYXRpdmUgIlZNU2VydmljZV9EZWNvZGVBc3NldHMiOwoKTWFwPFN0cmluZywgQXNzZXQ+IF9hc3NldHM7Ck1hcDxTdHJpbmcsIEFzc2V0PiBnZXQgYXNzZXRzIHsKICBpZiAoX2Fzc2V0cyA9PSBudWxsKSB7CiAgICB0cnkgewogICAgICBfYXNzZXRzID0gQXNzZXQucmVxdWVzdCgpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBwcmludCgnQ291bGQgbm90IGxvYWQgT2JzZXJ2YXRvcnkgYXNzZXRzOiAkZScpOwogICAgfQogIH0KICByZXR1cm4gX2Fzc2V0czsKfQpHAE5OPAEZAQ4VGAEfARgwOBkTKxMyETgSKhIcEhwSHRMdEiAPHQYEASgrHBMGLj40ORoGEwQBLAIBRAEcIBkKIRI2BgQSAgEaZGFydDpfdm1zZXJ2aWNlL2Fzc2V0LmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3Ztc2VydmljZS9kZXZmcy5kYXJ0rxIvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll92bXNlcnZpY2U7CgpTdHJpbmcgX2VuY29kZURldkZTRGlzYWJsZWRFcnJvcihNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ZlYXR1cmVEaXNhYmxlZCwKICAgICAgZGV0YWlsczogIkRldkZTIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBEYXJ0IGltcGxlbWVudGF0aW9uIik7Cn0KClN0cmluZyBfZW5jb2RlRmlsZVN5c3RlbUFscmVhZHlFeGlzdHNFcnJvcihNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBmc05hbWUpIHsKICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ZpbGVTeXN0ZW1BbHJlYWR5RXhpc3RzLAogICAgICBkZXRhaWxzOiAiJHttZXNzYWdlLm1ldGhvZH06IGZpbGUgc3lzdGVtICcke2ZzTmFtZX0nIGFscmVhZHkgZXhpc3RzIik7Cn0KClN0cmluZyBfZW5jb2RlRmlsZVN5c3RlbURvZXNOb3RFeGlzdEVycm9yKE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIGZzTmFtZSkgewogIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrRmlsZVN5c3RlbURvZXNOb3RFeGlzdCwKICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9OiBmaWxlIHN5c3RlbSAnJHtmc05hbWV9JyBkb2VzIG5vdCBleGlzdCIpOwp9CgpjbGFzcyBfRmlsZVN5c3RlbSB7CiAgX0ZpbGVTeXN0ZW0odGhpcy5uYW1lLCB0aGlzLnVyaSk7CgogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFVyaSB1cmk7CgogIFVyaSByZXNvbHZlUGF0aChTdHJpbmcgcGF0aCkgewogICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsKICAgIH0KICAgIGlmIChwYXRoLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBVcmkgcGF0aFVyaTsKICAgIHRyeSB7CiAgICAgIHBhdGhVcmkgPSBuZXcgVXJpLmZpbGUocGF0aCk7CiAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXR1cm4gcmVzb2x2ZShwYXRoVXJpKTsKICB9CgogIFVyaSByZXNvbHZlKFVyaSBwYXRoVXJpKSB7CiAgICB0cnkgewogICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIHBhdGhVcmkgY2FuIGJlIGNvbnZlcnRlZCB0byBhIGZpbGUgcGF0aC4KICAgICAgcGF0aFVyaS50b0ZpbGVQYXRoKCk7CiAgICB9IG9uIFVuc3VwcG9ydGVkRXJyb3IgY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgVXJpIHJlc29sdmVkVXJpID0gdXJpLnJlc29sdmVVcmkocGF0aFVyaSk7CiAgICBpZiAoIXJlc29sdmVkVXJpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCh1cmkudG9TdHJpbmcoKSkpIHsKICAgICAgLy8gUmVzb2x2ZWQgdXJpIG11c3QgYmUgd2l0aGluIHRoZSBmaWxlc3lzdGVtJ3MgYmFzZSB1cmkuCiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIHJlc29sdmVkVXJpOwogIH0KCiAgTWFwIHRvTWFwKCkgewogICAgcmV0dXJuIHsKICAgICAgJ3R5cGUnOiAnRmlsZVN5c3RlbScsCiAgICAgICduYW1lJzogbmFtZSwKICAgICAgJ3VyaSc6IHVyaS50b1N0cmluZygpLAogICAgfTsKICB9Cn0KCmNsYXNzIERldkZTIHsKICBEZXZGUygpOwoKICBNYXA8U3RyaW5nLCBfRmlsZVN5c3RlbT4gX2ZzTWFwID0ge307CgogIGZpbmFsIFNldCBfcnBjTmFtZXMgPSBuZXcgU2V0LmZyb20oWwogICAgJ19saXN0RGV2RlMnLAogICAgJ19jcmVhdGVEZXZGUycsCiAgICAnX2RlbGV0ZURldkZTJywKICAgICdfcmVhZERldkZTRmlsZScsCiAgICAnX3dyaXRlRGV2RlNGaWxlJywKICAgICdfd3JpdGVEZXZGU0ZpbGVzJywKICAgICdfbGlzdERldkZTRmlsZXMnLAogIF0pOwoKICB2b2lkIGNsZWFudXAoKSB7CiAgICB2YXIgZGVsZXRlRGlyID0gVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5kZWxldGVEaXI7CiAgICBpZiAoZGVsZXRlRGlyID09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGRlbGV0aW9ucyA9IDxGdXR1cmU+W107CiAgICBmb3IgKHZhciBmcyBpbiBfZnNNYXAudmFsdWVzKSB7CiAgICAgIGRlbGV0aW9ucy5hZGQoZGVsZXRlRGlyKGZzLnVyaSkpOwogICAgfQogICAgRnV0dXJlLndhaXQoZGVsZXRpb25zKTsKICAgIF9mc01hcC5jbGVhcigpOwogIH0KCiAgYm9vbCBzaG91bGRIYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgcmV0dXJuIF9ycGNOYW1lcy5jb250YWlucyhtZXNzYWdlLm1ldGhvZCk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgc3dpdGNoIChtZXNzYWdlLm1ldGhvZCkgewogICAgICBjYXNlICdfbGlzdERldkZTJzoKICAgICAgICByZXR1cm4gX2xpc3REZXZGUyhtZXNzYWdlKTsKICAgICAgY2FzZSAnX2NyZWF0ZURldkZTJzoKICAgICAgICByZXR1cm4gX2NyZWF0ZURldkZTKG1lc3NhZ2UpOwogICAgICBjYXNlICdfZGVsZXRlRGV2RlMnOgogICAgICAgIHJldHVybiBfZGVsZXRlRGV2RlMobWVzc2FnZSk7CiAgICAgIGNhc2UgJ19yZWFkRGV2RlNGaWxlJzoKICAgICAgICByZXR1cm4gX3JlYWREZXZGU0ZpbGUobWVzc2FnZSk7CiAgICAgIGNhc2UgJ193cml0ZURldkZTRmlsZSc6CiAgICAgICAgcmV0dXJuIF93cml0ZURldkZTRmlsZShtZXNzYWdlKTsKICAgICAgY2FzZSAnX3dyaXRlRGV2RlNGaWxlcyc6CiAgICAgICAgcmV0dXJuIF93cml0ZURldkZTRmlsZXMobWVzc2FnZSk7CiAgICAgIGNhc2UgJ19saXN0RGV2RlNGaWxlcyc6CiAgICAgICAgcmV0dXJuIF9saXN0RGV2RlNGaWxlcyhtZXNzYWdlKTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ludGVybmFsRXJyb3IsCiAgICAgICAgICAgIGRldGFpbHM6ICdVbmV4cGVjdGVkIHJwYyAke21lc3NhZ2UubWV0aG9kfScpOwogICAgfQogIH0KCiAgRnV0dXJlPFN0cmluZz4gaGFuZGxlUHV0U3RyZWFtKAogICAgICBPYmplY3QgZnNOYW1lLCBPYmplY3QgcGF0aCwgVXJpIGZzVXJpLCBTdHJlYW08TGlzdDxpbnQ+PiBieXRlcykgYXN5bmMgewogICAgLy8gQSBkdW1teSBNZXNzYWdlIGZvciBlcnJvciBtZXNzYWdlIGNvbnN0cnVjdGlvbi4KICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNZXNzYWdlLmZvck1ldGhvZCgnX3dyaXRlRGV2RlNGaWxlJyk7CiAgICB2YXIgd3JpdGVTdHJlYW1GaWxlID0gVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy53cml0ZVN0cmVhbUZpbGU7CiAgICBpZiAod3JpdGVTdHJlYW1GaWxlID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IobWVzc2FnZSk7CiAgICB9CiAgICBpZiAoZnNOYW1lID09IG51bGwpIHsKICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIGlmIChmc05hbWUgaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgdmFyIGZzID0gX2ZzTWFwW2ZzTmFtZV07CiAgICBpZiAoZnMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZUZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RFcnJvcihtZXNzYWdlLCBmc05hbWUpOwogICAgfQogICAgVXJpIHVyaSA9IGZzVXJpOwogICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgIGlmIChwYXRoID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ3BhdGgnKTsKICAgICAgfQogICAgICBpZiAocGF0aCBpcyEgU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdwYXRoJyk7CiAgICAgIH0KICAgICAgdXJpID0gZnMucmVzb2x2ZVBhdGgocGF0aCk7CiAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAncGF0aCcpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB1cmkgPSBmcy5yZXNvbHZlKHVyaSk7CiAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAndXJpJyk7CiAgICAgIH0KICAgIH0KICAgIGF3YWl0IHdyaXRlU3RyZWFtRmlsZSh1cmksIGJ5dGVzKTsKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gX2xpc3REZXZGUyhNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHZhciByZXN1bHQgPSB7fTsKICAgIHJlc3VsdFsndHlwZSddID0gJ0ZpbGVTeXN0ZW1MaXN0JzsKICAgIHJlc3VsdFsnZnNOYW1lcyddID0gX2ZzTWFwLmtleXMudG9MaXN0KCk7CiAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG1lc3NhZ2UsIHJlc3VsdCk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfY3JlYXRlRGV2RlMoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgY3JlYXRlVGVtcERpciA9IFZNU2VydmljZUVtYmVkZGVySG9va3MuY3JlYXRlVGVtcERpcjsKICAgIGlmIChjcmVhdGVUZW1wRGlyID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IobWVzc2FnZSk7CiAgICB9CiAgICB2YXIgZnNOYW1lID0gbWVzc2FnZS5wYXJhbXNbJ2ZzTmFtZSddOwogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcFtmc05hbWVdOwogICAgaWYgKGZzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVGaWxlU3lzdGVtQWxyZWFkeUV4aXN0c0Vycm9yKG1lc3NhZ2UsIGZzTmFtZSk7CiAgICB9CiAgICB2YXIgdGVtcERpciA9IGF3YWl0IGNyZWF0ZVRlbXBEaXIoZnNOYW1lKTsKICAgIGZzID0gbmV3IF9GaWxlU3lzdGVtKGZzTmFtZSwgdGVtcERpcik7CiAgICBfZnNNYXBbZnNOYW1lXSA9IGZzOwogICAgcmV0dXJuIGVuY29kZVJlc3VsdChtZXNzYWdlLCBmcy50b01hcCgpKTsKICB9CgogIEZ1dHVyZTxTdHJpbmc+IF9kZWxldGVEZXZGUyhNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHZhciBkZWxldGVEaXIgPSBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLmRlbGV0ZURpcjsKICAgIGlmIChkZWxldGVEaXIgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZURldkZTRGlzYWJsZWRFcnJvcihtZXNzYWdlKTsKICAgIH0KICAgIHZhciBmc05hbWUgPSBtZXNzYWdlLnBhcmFtc1snZnNOYW1lJ107CiAgICBpZiAoZnNOYW1lID09IG51bGwpIHsKICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIGlmIChmc05hbWUgaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgdmFyIGZzID0gX2ZzTWFwLnJlbW92ZShmc05hbWUpOwogICAgaWYgKGZzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVGaWxlU3lzdGVtRG9lc05vdEV4aXN0RXJyb3IobWVzc2FnZSwgZnNOYW1lKTsKICAgIH0KICAgIGF3YWl0IGRlbGV0ZURpcihmcy51cmkpOwogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfcmVhZERldkZTRmlsZShNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHZhciByZWFkRmlsZSA9IFZNU2VydmljZUVtYmVkZGVySG9va3MucmVhZEZpbGU7CiAgICBpZiAocmVhZEZpbGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZURldkZTRGlzYWJsZWRFcnJvcihtZXNzYWdlKTsKICAgIH0KICAgIHZhciBmc05hbWUgPSBtZXNzYWdlLnBhcmFtc1snZnNOYW1lJ107CiAgICBpZiAoZnNOYW1lID09IG51bGwpIHsKICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIGlmIChmc05hbWUgaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgdmFyIGZzID0gX2ZzTWFwW2ZzTmFtZV07CiAgICBpZiAoZnMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZUZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RFcnJvcihtZXNzYWdlLCBmc05hbWUpOwogICAgfQogICAgVXJpIHVyaTsKICAgIGlmIChtZXNzYWdlLnBhcmFtc1sndXJpJ10gIT0gbnVsbCkgewogICAgICB0cnkgewogICAgICAgIHZhciB1cmlQYXJhbSA9IG1lc3NhZ2UucGFyYW1zWyd1cmknXTsKICAgICAgICBpZiAodXJpUGFyYW0gaXMhIFN0cmluZykgewogICAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgICAgICB9CiAgICAgICAgVXJpIHBhcnNlZFVyaSA9IFVyaS5wYXJzZSh1cmlQYXJhbSk7CiAgICAgICAgdXJpID0gZnMucmVzb2x2ZShwYXJzZWRVcmkpOwogICAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3VyaScpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB2YXIgcGF0aCA9IG1lc3NhZ2UucGFyYW1zWydwYXRoJ107CiAgICAgIGlmIChwYXRoID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ3BhdGgnKTsKICAgICAgfQogICAgICBpZiAocGF0aCBpcyEgU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdwYXRoJyk7CiAgICAgIH0KICAgICAgdXJpID0gZnMucmVzb2x2ZVBhdGgocGF0aCk7CiAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAncGF0aCcpOwogICAgICB9CiAgICB9CiAgICB0cnkgewogICAgICBMaXN0PGludD4gYnl0ZXMgPSBhd2FpdCByZWFkRmlsZSh1cmkpOwogICAgICB2YXIgcmVzdWx0ID0geyd0eXBlJzogJ0ZTRmlsZScsICdmaWxlQ29udGVudHMnOiBiYXNlNjQuZW5jb2RlKGJ5dGVzKX07CiAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobWVzc2FnZSwgcmVzdWx0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtGaWxlRG9lc05vdEV4aXN0LAogICAgICAgICAgZGV0YWlsczogIl9yZWFkRGV2RlNGaWxlOiAkZSIpOwogICAgfQogIH0KCiAgRnV0dXJlPFN0cmluZz4gX3dyaXRlRGV2RlNGaWxlKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIHdyaXRlRmlsZSA9IFZNU2VydmljZUVtYmVkZGVySG9va3Mud3JpdGVGaWxlOwogICAgaWYgKHdyaXRlRmlsZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRGV2RlNEaXNhYmxlZEVycm9yKG1lc3NhZ2UpOwogICAgfQogICAgdmFyIGZzTmFtZSA9IG1lc3NhZ2UucGFyYW1zWydmc05hbWUnXTsKICAgIGlmIChmc05hbWUgPT0gbnVsbCkgewogICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgaWYgKGZzTmFtZSBpcyEgU3RyaW5nKSB7CiAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICB2YXIgZnMgPSBfZnNNYXBbZnNOYW1lXTsKICAgIGlmIChmcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRmlsZVN5c3RlbURvZXNOb3RFeGlzdEVycm9yKG1lc3NhZ2UsIGZzTmFtZSk7CiAgICB9CiAgICBVcmkgdXJpOwogICAgaWYgKG1lc3NhZ2UucGFyYW1zWyd1cmknXSAhPSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIHVyaVBhcmFtID0gbWVzc2FnZS5wYXJhbXNbJ3VyaSddOwogICAgICAgIGlmICh1cmlQYXJhbSBpcyEgU3RyaW5nKSB7CiAgICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3VyaScpOwogICAgICAgIH0KICAgICAgICBVcmkgcGFyc2VkVXJpID0gVXJpLnBhcnNlKHVyaVBhcmFtKTsKICAgICAgICB1cmkgPSBmcy5yZXNvbHZlKHBhcnNlZFVyaSk7CiAgICAgICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3VyaScpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAndXJpJyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhciBwYXRoID0gbWVzc2FnZS5wYXJhbXNbJ3BhdGgnXTsKICAgICAgaWYgKHBhdGggPT0gbnVsbCkgewogICAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAncGF0aCcpOwogICAgICB9CiAgICAgIGlmIChwYXRoIGlzISBTdHJpbmcpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3BhdGgnKTsKICAgICAgfQogICAgICB1cmkgPSBmcy5yZXNvbHZlUGF0aChwYXRoKTsKICAgICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdwYXRoJyk7CiAgICAgIH0KICAgIH0KICAgIHZhciBmaWxlQ29udGVudHMgPSBtZXNzYWdlLnBhcmFtc1snZmlsZUNvbnRlbnRzJ107CiAgICBpZiAoZmlsZUNvbnRlbnRzID09IG51bGwpIHsKICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdmaWxlQ29udGVudHMnKTsKICAgIH0KICAgIGlmIChmaWxlQ29udGVudHMgaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2ZpbGVDb250ZW50cycpOwogICAgfQogICAgTGlzdDxpbnQ+IGRlY29kZWRGaWxlQ29udGVudHMgPSBiYXNlNjQuZGVjb2RlKGZpbGVDb250ZW50cyk7CgogICAgYXdhaXQgd3JpdGVGaWxlKHVyaSwgZGVjb2RlZEZpbGVDb250ZW50cyk7CiAgICByZXR1cm4gZW5jb2RlU3VjY2VzcyhtZXNzYWdlKTsKICB9CgogIEZ1dHVyZTxTdHJpbmc+IF93cml0ZURldkZTRmlsZXMoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgd3JpdGVGaWxlID0gVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy53cml0ZUZpbGU7CiAgICBpZiAod3JpdGVGaWxlID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IobWVzc2FnZSk7CiAgICB9CiAgICB2YXIgZnNOYW1lID0gbWVzc2FnZS5wYXJhbXNbJ2ZzTmFtZSddOwogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcFtmc05hbWVdOwogICAgaWYgKGZzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVGaWxlU3lzdGVtRG9lc05vdEV4aXN0RXJyb3IobWVzc2FnZSwgZnNOYW1lKTsKICAgIH0KICAgIHZhciBmaWxlcyA9IG1lc3NhZ2UucGFyYW1zWydmaWxlcyddOwogICAgaWYgKGZpbGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdmaWxlcycpOwogICAgfQogICAgaWYgKGZpbGVzIGlzISBMaXN0KSB7CiAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAnZmlsZXMnKTsKICAgIH0KICAgIHZhciB1cmlzID0gW107CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBmaWxlSW5mbyA9IGZpbGVzW2ldOwogICAgICBpZiAoZmlsZUluZm8gaXMhIExpc3QgfHwKICAgICAgICAgIGZpbGVJbmZvLmxlbmd0aCAhPSAyIHx8CiAgICAgICAgICBmaWxlSW5mb1swXSBpcyEgU3RyaW5nIHx8CiAgICAgICAgICBmaWxlSW5mb1sxXSBpcyEgU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnZhbGlkUGFyYW1zLAogICAgICAgICAgICBkZXRhaWxzOiAiJHttZXNzYWdlLm1ldGhvZH06IGludmFsaWQgJ2ZpbGVzJyBwYXJhbWV0ZXIgIgogICAgICAgICAgICAgICAgImF0IGluZGV4ICR7aX06ICR7ZmlsZUluZm99Iik7CiAgICAgIH0KICAgICAgdmFyIHVyaSA9IGZzLnJlc29sdmVQYXRoKGZpbGVJbmZvWzBdKTsKICAgICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnZhbGlkUGFyYW1zLAogICAgICAgICAgICBkZXRhaWxzOiAiJHttZXNzYWdlLm1ldGhvZH06IGludmFsaWQgJ2ZpbGVzJyBwYXJhbWV0ZXIgIgogICAgICAgICAgICAgICAgImF0IGluZGV4ICR7aX06ICR7ZmlsZUluZm99Iik7CiAgICAgIH0KICAgICAgdXJpcy5hZGQodXJpKTsKICAgIH0KICAgIHZhciBwZW5kaW5nV3JpdGVzID0gPEZ1dHVyZT5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXJpcy5sZW5ndGg7IGkrKykgewogICAgICBMaXN0PGludD4gZGVjb2RlZEZpbGVDb250ZW50cyA9IGJhc2U2NC5kZWNvZGUoZmlsZXNbaV1bMV0pOwogICAgICBwZW5kaW5nV3JpdGVzLmFkZCh3cml0ZUZpbGUodXJpc1tpXSwgZGVjb2RlZEZpbGVDb250ZW50cykpOwogICAgfQogICAgYXdhaXQgRnV0dXJlLndhaXQocGVuZGluZ1dyaXRlcyk7CiAgICByZXR1cm4gZW5jb2RlU3VjY2VzcyhtZXNzYWdlKTsKICB9CgogIEZ1dHVyZTxTdHJpbmc+IF9saXN0RGV2RlNGaWxlcyhNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHZhciBsaXN0RmlsZXMgPSBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLmxpc3RGaWxlczsKICAgIGlmIChsaXN0RmlsZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZURldkZTRGlzYWJsZWRFcnJvcihtZXNzYWdlKTsKICAgIH0KICAgIHZhciBmc05hbWUgPSBtZXNzYWdlLnBhcmFtc1snZnNOYW1lJ107CiAgICBpZiAoZnNOYW1lID09IG51bGwpIHsKICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIGlmIChmc05hbWUgaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgdmFyIGZzID0gX2ZzTWFwW2ZzTmFtZV07CiAgICBpZiAoZnMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZUZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RFcnJvcihtZXNzYWdlLCBmc05hbWUpOwogICAgfQogICAgdmFyIGZpbGVMaXN0ID0gYXdhaXQgbGlzdEZpbGVzKGZzLnVyaSk7CiAgICAvLyBSZW1vdmUgYW55IHVybC1lbmNvZGluZyBpbiB0aGUgZmlsZW5hbWVzLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBmaWxlTGlzdFtpXVsnbmFtZSddID0gVXJpLmRlY29kZUZ1bGwoZmlsZUxpc3RbaV1bJ25hbWUnXSk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0geyd0eXBlJzogJ0ZTRmlsZUxpc3QnLCAnZmlsZXMnOiBmaWxlTGlzdH07CiAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG1lc3NhZ2UsIHJlc3VsdCk7CiAgfQp9CoGRAE5OPAEZATQzRgIBTTtNAgFMOk0CARQkARURASEgIAYYEwYRCiQlEwYBHQQBHQpGHCYTBgEvPkATBhgEARANHBQdBwQCAQ4LASgBJxIUFBYXGBcGARM2HQ4GICQoBhwUBAEuLwQBOB4ZJBsmGyYdKB4pHyoeKQ83OgYEASJON0BCIzEGGjkGHTkGHRZCBhUXGjkIHTkIIhk5CA0dGTgIBicjBAE1FScuKgQBNz4hMQYrGjkGHTkGHRZDBi8rGS4EATc2HTEGKxo5Bh05BiQWQgYdIwQBOTQcMQYrGjkGHTkGHRZCBg0pDC4jOgotJRs6ChQ4CA0pGjkIHTkIIhk5CAYKLU0sEjgqBgQBOjYdMQYrGjkGHTkGHRZCBg0pDC4jOgotJRs6ChQ4CA0pGjkIHTkIIhk5CAY3ID8GIz8GQQEvIwQBOzYdMQYrGjkGHTkGHRZCBikZOAYaOAYTLR8fIiQkN0UvCC0ZN0UvCBUGJCxCQgYmIwQBOjYdMQYrGjkGHTkGHRZCBiwxMEEGPCoEAgEaZGFydDpfdm1zZXJ2aWNlL2RldmZzLmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3Ztc2VydmljZS9jb25zdGFudHMuZGFydIOvLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKLy8gVGhlc2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBydW50aW1lL3ZtL3NlcnZpY2UuY2MuCmNsYXNzIENvbnN0YW50cyB7CiAgc3RhdGljIGNvbnN0IGludCBTRVJWSUNFX0VYSVRfTUVTU0FHRV9JRCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBJU09MQVRFX1NUQVJUVVBfTUVTU0FHRV9JRCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBJU09MQVRFX1NIVVRET1dOX01FU1NBR0VfSUQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgV0VCX1NFUlZFUl9DT05UUk9MX01FU1NBR0VfSUQgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgU0VSVkVSX0lORk9fTUVTU0FHRV9JRCA9IDQ7CgogIC8vLyBTaWduYWxzIGFuIFJQQyBjb21pbmcgZnJvbSBuYXRpdmUgY29kZSAoaW5zdGVhZCBvZiBmcm9tIGEgd2Vic29ja2V0CiAgLy8vIGNvbm5lY3Rpb24pLiAgVGhlc2UgY2FsbHMgYXJlIGxpbWl0ZWQgdG8gc2ltcGxlIHJlcXVlc3QtcmVzcG9uc2UgYW5kIGRvCiAgLy8vIG5vdCBhbGxvdyBhcmJpdHJhcnkganNvbi1ycGMgbWVzc2FnZXMuCiAgLy8vCiAgLy8vIFRoZSBtZXNzYWdlcyBhcmUgYW4gYXJyYXkgb2YgbGVuZ3RoIDM6CiAgLy8vICAgKE1FVEhPRF9DQUxMX0ZST01fTkFUSVZFLCBTdHJpbmcganNvblJlcXVlc3QsIFBvcnRJZCByZXBseVBvcnQpLgogIHN0YXRpYyBjb25zdCBpbnQgTUVUSE9EX0NBTExfRlJPTV9OQVRJVkUgPSA1Owp9ChgATk48ARkBOhIwMzQ2LwFKTi0GLUkwAgEeZGFydDpfdm1zZXJ2aWNlL2NvbnN0YW50cy5kYXJ0Om9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi92bXNlcnZpY2UvcnVubmluZ19pc29sYXRlLmRhcnSCqy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX3Ztc2VydmljZTsKCmNsYXNzIFJ1bm5pbmdJc29sYXRlIGltcGxlbWVudHMgTWVzc2FnZVJvdXRlciB7CiAgZmluYWwgaW50IHBvcnRJZDsKICBmaW5hbCBTZW5kUG9ydCBzZW5kUG9ydDsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgUnVubmluZ0lzb2xhdGUodGhpcy5wb3J0SWQsIHRoaXMuc2VuZFBvcnQsIHRoaXMubmFtZSk7CgogIFN0cmluZyBnZXQgc2VydmljZUlkID0+ICdpc29sYXRlcy8kcG9ydElkJzsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPFJlc3BvbnNlPiByb3V0ZVJlcXVlc3QoVk1TZXJ2aWNlIHNlcnZpY2UsIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgLy8gU2VuZCBtZXNzYWdlIHRvIGlzb2xhdGUuCiAgICByZXR1cm4gbWVzc2FnZS5zZW5kVG9Jc29sYXRlKHNlbmRQb3J0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcm91dGVSZXNwb25zZShNZXNzYWdlIG1lc3NhZ2UpIHt9Cn0KGgBOTjwBGQEwFBsVATkBLgEMRiAsBAEMKQIBJGRhcnQ6X3Ztc2VydmljZS9ydW5uaW5nX2lzb2xhdGUuZGFydDtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvdm1zZXJ2aWNlL3J1bm5pbmdfaXNvbGF0ZXMuZGFydJx3Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKY2xhc3MgUnVubmluZ0lzb2xhdGVzIGltcGxlbWVudHMgTWVzc2FnZVJvdXRlciB7CiAgZmluYWwgTWFwPGludCwgUnVubmluZ0lzb2xhdGU+IGlzb2xhdGVzID0gbmV3IE1hcDxpbnQsIFJ1bm5pbmdJc29sYXRlPigpOwogIGludCBfcm9vdFBvcnRJZDsKCiAgUnVubmluZ0lzb2xhdGVzKCk7CgogIHZvaWQgaXNvbGF0ZVN0YXJ0dXAoaW50IHBvcnRJZCwgU2VuZFBvcnQgc3AsIFN0cmluZyBuYW1lKSB7CiAgICBpZiAoX3Jvb3RQb3J0SWQgPT0gbnVsbCkgewogICAgICBfcm9vdFBvcnRJZCA9IHBvcnRJZDsKICAgIH0KICAgIHZhciByaSA9IG5ldyBSdW5uaW5nSXNvbGF0ZShwb3J0SWQsIHNwLCBuYW1lKTsKICAgIGlzb2xhdGVzW3BvcnRJZF0gPSByaTsKICB9CgogIHZvaWQgaXNvbGF0ZVNodXRkb3duKGludCBwb3J0SWQsIFNlbmRQb3J0IHNwKSB7CiAgICBpZiAoX3Jvb3RQb3J0SWQgPT0gcG9ydElkKSB7CiAgICAgIF9yb290UG9ydElkID0gbnVsbDsKICAgIH0KICAgIGlzb2xhdGVzLnJlbW92ZShwb3J0SWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPFJlc3BvbnNlPiByb3V0ZVJlcXVlc3QoVk1TZXJ2aWNlIHNlcnZpY2UsIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgU3RyaW5nIGlzb2xhdGVQYXJhbSA9IG1lc3NhZ2UucGFyYW1zWydpc29sYXRlSWQnXTsKICAgIGludCBpc29sYXRlSWQ7CiAgICBpZiAoIWlzb2xhdGVQYXJhbS5zdGFydHNXaXRoKCdpc29sYXRlcy8nKSkgewogICAgICBtZXNzYWdlLnNldEVycm9yUmVzcG9uc2UoCiAgICAgICAgICBrSW52YWxpZFBhcmFtcywgImludmFsaWQgJ2lzb2xhdGVJZCcgcGFyYW1ldGVyOiAkaXNvbGF0ZVBhcmFtIik7CiAgICAgIHJldHVybiBtZXNzYWdlLnJlc3BvbnNlOwogICAgfQogICAgaXNvbGF0ZVBhcmFtID0gaXNvbGF0ZVBhcmFtLnN1YnN0cmluZygnaXNvbGF0ZXMvJy5sZW5ndGgpOwogICAgaWYgKGlzb2xhdGVQYXJhbSA9PSAncm9vdCcpIHsKICAgICAgaXNvbGF0ZUlkID0gX3Jvb3RQb3J0SWQ7CiAgICB9IGVsc2UgewogICAgICB0cnkgewogICAgICAgIGlzb2xhdGVJZCA9IGludC5wYXJzZShpc29sYXRlUGFyYW0pOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgbWVzc2FnZS5zZXRFcnJvclJlc3BvbnNlKAogICAgICAgICAgICBrSW52YWxpZFBhcmFtcywgImludmFsaWQgJ2lzb2xhdGVJZCcgcGFyYW1ldGVyOiAkaXNvbGF0ZVBhcmFtIik7CiAgICAgICAgcmV0dXJuIG1lc3NhZ2UucmVzcG9uc2U7CiAgICAgIH0KICAgIH0KICAgIHZhciBpc29sYXRlID0gaXNvbGF0ZXNbaXNvbGF0ZUlkXTsKICAgIGlmIChpc29sYXRlID09IG51bGwpIHsKICAgICAgLy8gVGhlcmUgaXMgc29tZSBjaGFuY2UgdGhhdCB0aGlzIGlzb2xhdGUgbWF5IGhhdmUgbGl2ZWQgYmVmb3JlLAogICAgICAvLyBzbyByZXR1cm4gYSBzZW50aW5lbCByYXRoZXIgdGhhbiBhbiBlcnJvci4KICAgICAgdmFyIHJlc3VsdCA9IHsKICAgICAgICAndHlwZSc6ICdTZW50aW5lbCcsCiAgICAgICAgJ2tpbmQnOiAnQ29sbGVjdGVkJywKICAgICAgICAndmFsdWVBc1N0cmluZyc6ICc8Y29sbGVjdGVkPicsCiAgICAgIH07CiAgICAgIG1lc3NhZ2Uuc2V0UmVzcG9uc2UoZW5jb2RlUmVzdWx0KG1lc3NhZ2UsIHJlc3VsdCkpOwogICAgICByZXR1cm4gbWVzc2FnZS5yZXNwb25zZTsKICAgIH0KCiAgICBpZiAobWVzc2FnZS5tZXRob2QgPT0gJ2V2YWx1YXRlSW5GcmFtZScgfHwgbWVzc2FnZS5tZXRob2QgPT0gJ2V2YWx1YXRlJykgewogICAgICByZXR1cm4gbmV3IF9FdmFsdWF0b3IobWVzc2FnZSwgaXNvbGF0ZSwgc2VydmljZSkucnVuKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaXNvbGF0ZS5yb3V0ZVJlcXVlc3Qoc2VydmljZSwgbWVzc2FnZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJvdXRlUmVzcG9uc2UoTWVzc2FnZSBtZXNzYWdlKSB7fQp9CgovLy8gQ2xhc3MgdGhhdCBrbm93cyBob3cgdG8gb3JjaGVzdHJhdGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGluIGRhcnQyIHdvcmxkLgpjbGFzcyBfRXZhbHVhdG9yIHsKICBfRXZhbHVhdG9yKHRoaXMuX21lc3NhZ2UsIHRoaXMuX2lzb2xhdGUsIHRoaXMuX3NlcnZpY2UpOwoKICBGdXR1cmU8UmVzcG9uc2U+IHJ1bigpIGFzeW5jIHsKICAgIFJlc3BvbnNlIGJ1aWxkU2NvcGVSZXNwb25zZSA9IGF3YWl0IF9idWlsZFNjb3BlKCk7CiAgICBNYXA8U3RyaW5nLCBkeW5hbWljPiByZXNwb25zZUpzb24gPSBidWlsZFNjb3BlUmVzcG9uc2UuZGVjb2RlSnNvbigpOwoKICAgIGlmIChyZXNwb25zZUpzb24uY29udGFpbnNLZXkoJ2Vycm9yJykpIHsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZS5mcm9tKGVuY29kZUNvbXBpbGF0aW9uRXJyb3IoCiAgICAgICAgICBfbWVzc2FnZSwgcmVzcG9uc2VKc29uWydlcnJvciddWydkYXRhJ11bJ2RldGFpbHMnXSkpOwogICAgfQoKICAgIFN0cmluZyBrZXJuZWxCYXNlNjQ7CiAgICB0cnkgewogICAgICBrZXJuZWxCYXNlNjQgPSBhd2FpdCBfY29tcGlsZUV4cHJlc3Npb24ocmVzcG9uc2VKc29uWydyZXN1bHQnXSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UuZnJvbShlbmNvZGVDb21waWxhdGlvbkVycm9yKF9tZXNzYWdlLCBlLnRvU3RyaW5nKCkpKTsKICAgIH0KICAgIHJldHVybiBfZXZhbHVhdGVDb21waWxlZEV4cHJlc3Npb24oa2VybmVsQmFzZTY0KTsKICB9CgogIE1lc3NhZ2UgX21lc3NhZ2U7CiAgUnVubmluZ0lzb2xhdGUgX2lzb2xhdGU7CiAgVk1TZXJ2aWNlIF9zZXJ2aWNlOwoKICBGdXR1cmU8UmVzcG9uc2U+IF9idWlsZFNjb3BlKCkgewogICAgTWFwPFN0cmluZywgZHluYW1pYz4gcGFyYW1zID0gX3NldHVwUGFyYW1zKCk7CiAgICBwYXJhbXNbJ2lzb2xhdGVJZCddID0gX21lc3NhZ2UucGFyYW1zWydpc29sYXRlSWQnXTsKICAgIE1hcCBidWlsZFNjb3BlUGFyYW1zID0gewogICAgICAnbWV0aG9kJzogJ19idWlsZEV4cHJlc3Npb25FdmFsdWF0aW9uU2NvcGUnLAogICAgICAnaWQnOiBfbWVzc2FnZS5zZXJpYWwsCiAgICAgICdwYXJhbXMnOiBwYXJhbXMsCiAgICB9OwogICAgaWYgKF9tZXNzYWdlLnBhcmFtc1snc2NvcGUnXSAhPSBudWxsKSB7CiAgICAgIGJ1aWxkU2NvcGVQYXJhbXNbJ3BhcmFtcyddWydzY29wZSddID0gX21lc3NhZ2UucGFyYW1zWydzY29wZSddOwogICAgfQogICAgdmFyIGJ1aWxkU2NvcGUgPQogICAgICAgIG5ldyBNZXNzYWdlLl9mcm9tSnNvblJwY1JlcXVlc3QoX21lc3NhZ2UuY2xpZW50LCBidWlsZFNjb3BlUGFyYW1zKTsKCiAgICAvLyBEZWNvZGUgdGhlIEpTT04gYW5kIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgbWFwLiBUaGUgbWFwIGtleQogICAgLy8gaXMgdGhlIHJlcXVlc3QgVXJpLgogICAgcmV0dXJuIF9pc29sYXRlLnJvdXRlUmVxdWVzdChfc2VydmljZSwgYnVpbGRTY29wZSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfY29tcGlsZUV4cHJlc3Npb24oCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdCkgewogICAgQ2xpZW50IGV4dGVybmFsQ2xpZW50ID0KICAgICAgICBfc2VydmljZS5fZmluZEZpcnN0Q2xpZW50VGhhdEhhbmRsZXNTZXJ2aWNlKCdjb21waWxlRXhwcmVzc2lvbicpOwoKICAgIE1hcCBjb21waWxlUGFyYW1zID0gewogICAgICAnaXNvbGF0ZUlkJzogX21lc3NhZ2UucGFyYW1zWydpc29sYXRlSWQnXSwKICAgICAgJ2V4cHJlc3Npb24nOiBfbWVzc2FnZS5wYXJhbXNbJ2V4cHJlc3Npb24nXSwKICAgICAgJ2RlZmluaXRpb25zJzogYnVpbGRTY29wZVJlc3BvbnNlUmVzdWx0WydwYXJhbV9uYW1lcyddLAogICAgICAndHlwZURlZmluaXRpb25zJzogYnVpbGRTY29wZVJlc3BvbnNlUmVzdWx0Wyd0eXBlX3BhcmFtc19uYW1lcyddLAogICAgICAnbGlicmFyeVVyaSc6IGJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdFsnbGlicmFyeVVyaSddLAogICAgICAnaXNTdGF0aWMnOiBidWlsZFNjb3BlUmVzcG9uc2VSZXN1bHRbJ2lzU3RhdGljJ10sCiAgICB9OwogICAgZHluYW1pYyBrbGFzcyA9IGJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdFsna2xhc3MnXTsKICAgIGlmIChrbGFzcyAhPSBudWxsKSB7CiAgICAgIGNvbXBpbGVQYXJhbXNbJ2tsYXNzJ10gPSBrbGFzczsKICAgIH0KICAgIGlmIChleHRlcm5hbENsaWVudCAhPSBudWxsKSB7CiAgICAgIHZhciBjb21waWxlRXhwcmVzc2lvbiA9IG5ldyBNZXNzYWdlLmZvck1ldGhvZCgnY29tcGlsZUV4cHJlc3Npb24nKTsKICAgICAgY29tcGlsZUV4cHJlc3Npb24uY2xpZW50ID0gZXh0ZXJuYWxDbGllbnQ7CiAgICAgIGNvbXBpbGVFeHByZXNzaW9uLnBhcmFtcy5hZGRBbGwoY29tcGlsZVBhcmFtcyk7CgogICAgICBmaW5hbCBpZCA9IF9zZXJ2aWNlLl9zZXJ2aWNlUmVxdWVzdHMubmV3SWQoKTsKICAgICAgZmluYWwgb2xkSWQgPSBfbWVzc2FnZS5zZXJpYWw7CiAgICAgIGZpbmFsIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8U3RyaW5nPigpOwogICAgICBleHRlcm5hbENsaWVudC5zZXJ2aWNlSGFuZGxlc1tpZF0gPSAoTWVzc2FnZSBtKSB7CiAgICAgICAgaWYgKG0gIT0gbnVsbCkgewogICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGpzb24uZW5jb2RlKG0uZm9yd2FyZFRvSnNvbih7J2lkJzogb2xkSWR9KSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUoZW5jb2RlUnBjRXJyb3IoX21lc3NhZ2UsIGtTZXJ2aWNlRGlzYXBwZWFyZWQpKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGV4dGVybmFsQ2xpZW50LnBvc3QobmV3IFJlc3BvbnNlLmpzb24oY29tcGlsZUV4cHJlc3Npb24KICAgICAgICAgIC5mb3J3YXJkVG9Kc29uKHsnaWQnOiBpZCwgJ21ldGhvZCc6ICdjb21waWxlRXhwcmVzc2lvbid9KSkpOwogICAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZQogICAgICAgICAgLnRoZW4oKFN0cmluZyBzKSA9PiBqc29uRGVjb2RlKHMpKQogICAgICAgICAgLnRoZW4oKGR5bmFtaWMganNvbikgewogICAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGpzb25NYXAgPSBqc29uOwogICAgICAgIGlmIChqc29uTWFwLmNvbnRhaW5zS2V5KCdlcnJvcicpKSB7CiAgICAgICAgICB0aHJvdyBqc29uTWFwWydlcnJvciddOwogICAgICAgIH0KICAgICAgICByZXR1cm4ganNvbk1hcFsncmVzdWx0J11bJ3Jlc3VsdCddWydrZXJuZWxCeXRlcyddOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGZhbGxiYWNrIHRvIGNvbXBpbGUgdXNpbmcga2VybmVsIHNlcnZpY2UKICAgICAgTWFwIGNvbXBpbGVFeHByZXNzaW9uUGFyYW1zID0gewogICAgICAgICdtZXRob2QnOiAnX2NvbXBpbGVFeHByZXNzaW9uJywKICAgICAgICAnaWQnOiBfbWVzc2FnZS5zZXJpYWwsCiAgICAgICAgJ3BhcmFtcyc6IGNvbXBpbGVQYXJhbXMsCiAgICAgIH07CiAgICAgIHZhciBjb21waWxlRXhwcmVzc2lvbiA9IG5ldyBNZXNzYWdlLl9mcm9tSnNvblJwY1JlcXVlc3QoCiAgICAgICAgICBfbWVzc2FnZS5jbGllbnQsIGNvbXBpbGVFeHByZXNzaW9uUGFyYW1zKTsKCiAgICAgIHJldHVybiBfaXNvbGF0ZQogICAgICAgICAgLnJvdXRlUmVxdWVzdChfc2VydmljZSwgY29tcGlsZUV4cHJlc3Npb24pCiAgICAgICAgICAudGhlbigoUmVzcG9uc2UgcmVzcG9uc2UpID0+IHJlc3BvbnNlLmRlY29kZUpzb24oKSkKICAgICAgICAgIC50aGVuKChkeW5hbWljIGpzb24pIHsKICAgICAgICBpZiAoanNvblsncmVzdWx0J10gIT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIGpzb25bJ3Jlc3VsdCddWydrZXJuZWxCeXRlcyddOwogICAgICAgIH0KICAgICAgICB0aHJvdyBqc29uWydlcnJvciddWydkYXRhJ11bJ2RldGFpbHMnXTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBGdXR1cmU8UmVzcG9uc2U+IF9ldmFsdWF0ZUNvbXBpbGVkRXhwcmVzc2lvbihTdHJpbmcga2VybmVsQmFzZTY0KSB7CiAgICBpZiAoa2VybmVsQmFzZTY0LmlzTm90RW1wdHkpIHsKICAgICAgTWFwPFN0cmluZywgZHluYW1pYz4gcGFyYW1zID0gX3NldHVwUGFyYW1zKCk7CiAgICAgIHBhcmFtc1snaXNvbGF0ZUlkJ10gPSBfbWVzc2FnZS5wYXJhbXNbJ2lzb2xhdGVJZCddOwogICAgICBwYXJhbXNbJ2tlcm5lbEJ5dGVzJ10gPSBrZXJuZWxCYXNlNjQ7CiAgICAgIHBhcmFtc1snZGlzYWJsZUJyZWFrcG9pbnRzJ10gPSBfbWVzc2FnZS5wYXJhbXNbJ2Rpc2FibGVCcmVha3BvaW50cyddOwogICAgICBNYXAgcnVuUGFyYW1zID0gewogICAgICAgICdtZXRob2QnOiAnX2V2YWx1YXRlQ29tcGlsZWRFeHByZXNzaW9uJywKICAgICAgICAnaWQnOiBfbWVzc2FnZS5zZXJpYWwsCiAgICAgICAgJ3BhcmFtcyc6IHBhcmFtcywKICAgICAgfTsKICAgICAgaWYgKF9tZXNzYWdlLnBhcmFtc1snc2NvcGUnXSAhPSBudWxsKSB7CiAgICAgICAgcnVuUGFyYW1zWydwYXJhbXMnXVsnc2NvcGUnXSA9IF9tZXNzYWdlLnBhcmFtc1snc2NvcGUnXTsKICAgICAgfQogICAgICB2YXIgcnVuRXhwcmVzc2lvbiA9CiAgICAgICAgICBuZXcgTWVzc2FnZS5fZnJvbUpzb25ScGNSZXF1ZXN0KF9tZXNzYWdlLmNsaWVudCwgcnVuUGFyYW1zKTsKICAgICAgcmV0dXJuIF9pc29sYXRlLnJvdXRlUmVxdWVzdChfc2VydmljZSwgcnVuRXhwcmVzc2lvbik7IC8vIF9tZXNzYWdlCiAgICB9IGVsc2UgewogICAgICAvLyBlbXB0eSBrZXJuZWwgaW5kaWNhdGVzIGRhcnQxIG1vZGUKICAgICAgcmV0dXJuIF9pc29sYXRlLnJvdXRlUmVxdWVzdChfc2VydmljZSwgX21lc3NhZ2UpOwogICAgfQogIH0KCiAgTWFwPFN0cmluZywgZHluYW1pYz4gX3NldHVwUGFyYW1zKCkgewogICAgaWYgKF9tZXNzYWdlLm1ldGhvZCA9PSAnZXZhbHVhdGVJbkZyYW1lJykgewogICAgICByZXR1cm4gPFN0cmluZywgZHluYW1pYz57J2ZyYW1lSW5kZXgnOiBfbWVzc2FnZS5wYXJhbXNbJ2ZyYW1lSW5kZXgnXX07CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoX21lc3NhZ2UubWV0aG9kID09ICdldmFsdWF0ZScpOwogICAgICByZXR1cm4gPFN0cmluZywgZHluYW1pYz57J3RhcmdldElkJzogX21lc3NhZ2UucGFyYW1zWyd0YXJnZXRJZCddfTsKICAgIH0KICB9Cn0KgNgATk48ARkBMUwTARUBPh8cBjMbBAEyIRoGHQQBDEY3EzEgSx8GPyIfDQwtFCJNIQgGJxtHNBUcHSgJOh8GAU8+DTUGBAEMKQIBThM7ASE3SQEtN0AGARkKRxJQBjYEARQbFgEjMjgdMx0YByxGBhVMAUMbOAQBJTccSgEaMTM+SDw4BzcZJgYiSjE2ATQlMTgZSxFNCgk+Rx4tIS0sIgo7Cg0yJigfIQk/NQEWNT4hJjAKMAoGBAFGIzQ6LEwYMR8aCS5BCBpHSQ0rOAYEASgwTQ0tSQYEAgElZGFydDpfdm1zZXJ2aWNlL3J1bm5pbmdfaXNvbGF0ZXMuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvdm1zZXJ2aWNlL21lc3NhZ2UuZGFydJ7qLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKZW51bSBNZXNzYWdlVHlwZSB7IFJlcXVlc3QsIE5vdGlmaWNhdGlvbiwgUmVzcG9uc2UgfQoKY2xhc3MgTWVzc2FnZSB7CiAgZmluYWwgQ29tcGxldGVyPFJlc3BvbnNlPiBfY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxSZXNwb25zZT4uc3luYygpOwogIGJvb2wgZ2V0IGNvbXBsZXRlZCA9PiBfY29tcGxldGVyLmlzQ29tcGxldGVkOwoKICAvLy8gRnV0dXJlIG9mIHJlc3BvbnNlLgogIEZ1dHVyZTxSZXNwb25zZT4gZ2V0IHJlc3BvbnNlID0+IF9jb21wbGV0ZXIuZnV0dXJlOwogIENsaWVudCBjbGllbnQ7CgogIC8vIElzIGEgbm90aWZpY2F0aW9uIG1lc3NhZ2UgKG5vIHNlcmlhbCkKICBmaW5hbCBNZXNzYWdlVHlwZSB0eXBlOwoKICAvLyBDbGllbnQtc2lkZSBpZGVudGlmaWVyIGZvciB0aGlzIG1lc3NhZ2UuCiAgZmluYWwgc2VyaWFsOwoKICBmaW5hbCBTdHJpbmcgbWV0aG9kOwoKICBmaW5hbCBNYXAgcGFyYW1zID0gbmV3IE1hcCgpOwogIGZpbmFsIE1hcCByZXN1bHQgPSBuZXcgTWFwKCk7CiAgZmluYWwgTWFwIGVycm9yID0gbmV3IE1hcCgpOwoKICBmYWN0b3J5IE1lc3NhZ2UuZnJvbUpzb25ScGMoQ2xpZW50IGNsaWVudCwgTWFwIG1hcCkgewogICAgaWYgKG1hcC5jb250YWluc0tleSgnaWQnKSkgewogICAgICBmaW5hbCBpZCA9IG1hcFsnaWQnXTsKICAgICAgaWYgKGlkICE9IG51bGwgJiYgaWQgaXMhIG51bSAmJiBpZCBpcyEgU3RyaW5nKSB7CiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignImlkIiBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcsIG9yIG51bGwuJyk7CiAgICAgIH0KICAgICAgaWYgKG1hcC5jb250YWluc0tleSgnbWV0aG9kJykpIHsKICAgICAgICByZXR1cm4gbmV3IE1lc3NhZ2UuX2Zyb21Kc29uUnBjUmVxdWVzdChjbGllbnQsIG1hcCk7CiAgICAgIH0KICAgICAgaWYgKG1hcC5jb250YWluc0tleSgncmVzdWx0JykpIHsKICAgICAgICByZXR1cm4gbmV3IE1lc3NhZ2UuX2Zyb21Kc29uUnBjUmVzdWx0KGNsaWVudCwgbWFwKTsKICAgICAgfQogICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KCdlcnJvcicpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlLl9mcm9tSnNvblJwY0Vycm9yKGNsaWVudCwgbWFwKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChtYXAuY29udGFpbnNLZXkoJ21ldGhvZCcpKSB7CiAgICAgIHJldHVybiBuZXcgTWVzc2FnZS5fZnJvbUpzb25ScGNOb3RpZmljYXRpb24oY2xpZW50LCBtYXApOwogICAgfQogICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBtZXNzYWdlIGZvcm1hdCcpOwogIH0KCiAgLy8gaHR0cDovL3d3dy5qc29ucnBjLm9yZy9zcGVjaWZpY2F0aW9uI3JlcXVlc3Rfb2JqZWN0CiAgTWVzc2FnZS5fZnJvbUpzb25ScGNSZXF1ZXN0KENsaWVudCBjbGllbnQsIE1hcCBtYXApCiAgICAgIDogY2xpZW50ID0gY2xpZW50LAogICAgICAgIHR5cGUgPSBNZXNzYWdlVHlwZS5SZXF1ZXN0LAogICAgICAgIHNlcmlhbCA9IG1hcFsnaWQnXSwKICAgICAgICBtZXRob2QgPSBtYXBbJ21ldGhvZCddIHsKICAgIGlmIChtYXBbJ3BhcmFtcyddICE9IG51bGwpIHsKICAgICAgcGFyYW1zLmFkZEFsbChtYXBbJ3BhcmFtcyddKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly93d3cuanNvbnJwYy5vcmcvc3BlY2lmaWNhdGlvbiNub3RpZmljYXRpb24KICBNZXNzYWdlLl9mcm9tSnNvblJwY05vdGlmaWNhdGlvbihDbGllbnQgY2xpZW50LCBNYXAgbWFwKQogICAgICA6IGNsaWVudCA9IGNsaWVudCwKICAgICAgICB0eXBlID0gTWVzc2FnZVR5cGUuTm90aWZpY2F0aW9uLAogICAgICAgIG1ldGhvZCA9IG1hcFsnbWV0aG9kJ10sCiAgICAgICAgc2VyaWFsID0gbnVsbCB7CiAgICBpZiAobWFwWydwYXJhbXMnXSAhPSBudWxsKSB7CiAgICAgIHBhcmFtcy5hZGRBbGwobWFwWydwYXJhbXMnXSk7CiAgICB9CiAgfQoKICAvLyBodHRwOi8vd3d3Lmpzb25ycGMub3JnL3NwZWNpZmljYXRpb24jcmVzcG9uc2Vfb2JqZWN0CiAgTWVzc2FnZS5fZnJvbUpzb25ScGNSZXN1bHQoQ2xpZW50IGNsaWVudCwgTWFwIG1hcCkKICAgICAgOiBjbGllbnQgPSBjbGllbnQsCiAgICAgICAgdHlwZSA9IE1lc3NhZ2VUeXBlLlJlc3BvbnNlLAogICAgICAgIHNlcmlhbCA9IG1hcFsnaWQnXSwKICAgICAgICBtZXRob2QgPSBudWxsIHsKICAgIHJlc3VsdC5hZGRBbGwobWFwWydyZXN1bHQnXSk7CiAgfQoKICAvLyBodHRwOi8vd3d3Lmpzb25ycGMub3JnL3NwZWNpZmljYXRpb24jcmVzcG9uc2Vfb2JqZWN0CiAgTWVzc2FnZS5fZnJvbUpzb25ScGNFcnJvcihDbGllbnQgY2xpZW50LCBNYXAgbWFwKQogICAgICA6IGNsaWVudCA9IGNsaWVudCwKICAgICAgICB0eXBlID0gTWVzc2FnZVR5cGUuUmVzcG9uc2UsCiAgICAgICAgc2VyaWFsID0gbWFwWydpZCddLAogICAgICAgIG1ldGhvZCA9IG51bGwgewogICAgZXJyb3IuYWRkQWxsKG1hcFsnZXJyb3InXSk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9tZXRob2ROYW1lRnJvbVVyaShVcmkgdXJpKSB7CiAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgcmV0dXJuICcnOwogICAgfQogICAgaWYgKHVyaS5wYXRoU2VnbWVudHMubGVuZ3RoID09IDApIHsKICAgICAgcmV0dXJuICcnOwogICAgfQogICAgcmV0dXJuIHVyaS5wYXRoU2VnbWVudHNbMF07CiAgfQoKICBNZXNzYWdlLmZvck1ldGhvZChTdHJpbmcgbWV0aG9kKQogICAgICA6IGNsaWVudCA9IG51bGwsCiAgICAgICAgbWV0aG9kID0gbWV0aG9kLAogICAgICAgIHR5cGUgPSBNZXNzYWdlVHlwZS5SZXF1ZXN0LAogICAgICAgIHNlcmlhbCA9ICcnOwoKICBNZXNzYWdlLmZyb21VcmkodGhpcy5jbGllbnQsIFVyaSB1cmkpCiAgICAgIDogdHlwZSA9IE1lc3NhZ2VUeXBlLlJlcXVlc3QsCiAgICAgICAgc2VyaWFsID0gJycsCiAgICAgICAgbWV0aG9kID0gX21ldGhvZE5hbWVGcm9tVXJpKHVyaSkgewogICAgcGFyYW1zLmFkZEFsbCh1cmkucXVlcnlQYXJhbWV0ZXJzKTsKICB9CgogIE1lc3NhZ2UuZm9ySXNvbGF0ZSh0aGlzLmNsaWVudCwgVXJpIHVyaSwgUnVubmluZ0lzb2xhdGUgaXNvbGF0ZSkKICAgICAgOiB0eXBlID0gTWVzc2FnZVR5cGUuUmVxdWVzdCwKICAgICAgICBzZXJpYWwgPSAnJywKICAgICAgICBtZXRob2QgPSBfbWV0aG9kTmFtZUZyb21VcmkodXJpKSB7CiAgICBwYXJhbXMuYWRkQWxsKHVyaS5xdWVyeVBhcmFtZXRlcnMpOwogICAgcGFyYW1zWydpc29sYXRlSWQnXSA9IGlzb2xhdGUuc2VydmljZUlkOwogIH0KCiAgVXJpIHRvVXJpKCkgewogICAgcmV0dXJuIG5ldyBVcmkocGF0aDogbWV0aG9kLCBxdWVyeVBhcmFtZXRlcnM6IHBhcmFtcyk7CiAgfQoKICBkeW5hbWljIHRvSnNvbigpIHsKICAgIHRocm93ICd1bnN1cHBvcnRlZCc7CiAgfQoKICBkeW5hbWljIGZvcndhcmRUb0pzb24oW01hcCBvdmVybG9hZHNdKSB7CiAgICBNYXA8ZHluYW1pYywgZHluYW1pYz4ganNvbiA9IHsnanNvbnJwYyc6ICcyLjAnLCAnaWQnOiBzZXJpYWx9OwogICAgc3dpdGNoICh0eXBlKSB7CiAgICAgIGNhc2UgTWVzc2FnZVR5cGUuUmVxdWVzdDoKICAgICAgY2FzZSBNZXNzYWdlVHlwZS5Ob3RpZmljYXRpb246CiAgICAgICAganNvblsnbWV0aG9kJ10gPSBtZXRob2Q7CiAgICAgICAgaWYgKHBhcmFtcy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBqc29uWydwYXJhbXMnXSA9IHBhcmFtczsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVzc2FnZVR5cGUuUmVzcG9uc2U6CiAgICAgICAgaWYgKHJlc3VsdC5pc05vdEVtcHR5KSB7CiAgICAgICAgICBqc29uWydyZXN1bHQnXSA9IHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yLmlzTm90RW1wdHkpIHsKICAgICAgICAgIGpzb25bJ2Vycm9yJ10gPSBlcnJvcjsKICAgICAgICB9CiAgICB9CiAgICBpZiAob3ZlcmxvYWRzICE9IG51bGwpIHsKICAgICAganNvbi5hZGRBbGwob3ZlcmxvYWRzKTsKICAgIH0KICAgIHJldHVybiBqc29uOwogIH0KCiAgLy8gQ2FsbHMgdG9TdHJpbmcgb24gYWxsIG5vbi1TdHJpbmcgZWxlbWVudHMgb2YgW2xpc3RdLiBXZSBkbyB0aGlzIHNvIGFsbAogIC8vIGVsZW1lbnRzIGluIHRoZSBsaXN0IGFyZSBzdHJpbmdzLCBtYWtpbmcgY29uc3VtcHRpb24gYnkgQysrIHNpbXBsZXIuCiAgLy8gVGhpcyBoYXMgYSBzaWRlIGVmZmVjdCB0aGF0IGJvb2xlYW4gbGl0ZXJhbCB2YWx1ZXMgbGlrZSB0cnVlIGJlY29tZSAndHJ1ZScKICAvLyBhbmQgdGh1cyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBzdHJpbmcgbGl0ZXJhbCAndHJ1ZScuCiAgTGlzdDxTdHJpbmc+IF9tYWtlQWxsU3RyaW5nKExpc3QgbGlzdCkgewogICAgaWYgKGxpc3QgPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciBuZXdfbGlzdCA9IG5ldyBMaXN0PFN0cmluZz4obGlzdC5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIG5ld19saXN0W2ldID0gbGlzdFtpXS50b1N0cmluZygpOwogICAgfQogICAgcmV0dXJuIG5ld19saXN0OwogIH0KCiAgRnV0dXJlPFJlc3BvbnNlPiBzZW5kVG9Jc29sYXRlKFNlbmRQb3J0IHNlbmRQb3J0KSB7CiAgICBmaW5hbCByZWNlaXZlUG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwogICAgcmVjZWl2ZVBvcnQuaGFuZGxlciA9ICh2YWx1ZSkgewogICAgICByZWNlaXZlUG9ydC5jbG9zZSgpOwogICAgICBfc2V0UmVzcG9uc2VGcm9tUG9ydCh2YWx1ZSk7CiAgICB9OwogICAgdmFyIGtleXMgPSBfbWFrZUFsbFN0cmluZyhwYXJhbXMua2V5cy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKSk7CiAgICB2YXIgdmFsdWVzID0gX21ha2VBbGxTdHJpbmcocGFyYW1zLnZhbHVlcy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKSk7CiAgICB2YXIgcmVxdWVzdCA9IG5ldyBMaXN0KDYpCiAgICAgIC4uWzBdID0gMCAvLyBNYWtlIHJvb20gZm9yIE9PQiBtZXNzYWdlIHR5cGUuCiAgICAgIC4uWzFdID0gcmVjZWl2ZVBvcnQuc2VuZFBvcnQKICAgICAgLi5bMl0gPSBzZXJpYWwKICAgICAgLi5bM10gPSBtZXRob2QKICAgICAgLi5bNF0gPSBrZXlzCiAgICAgIC4uWzVdID0gdmFsdWVzOwogICAgaWYgKCFzZW5kSXNvbGF0ZVNlcnZpY2VNZXNzYWdlKHNlbmRQb3J0LCByZXF1ZXN0KSkgewogICAgICByZWNlaXZlUG9ydC5jbG9zZSgpOwogICAgICBfY29tcGxldGVyLmNvbXBsZXRlKG5ldyBSZXNwb25zZS5pbnRlcm5hbEVycm9yKAogICAgICAgICAgJ2NvdWxkIG5vdCBzZW5kIG1lc3NhZ2UgWyR7c2VyaWFsfV0gdG8gaXNvbGF0ZScpKTsKICAgIH0KICAgIHJldHVybiBfY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIC8vIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byB3YXlzIG9mIHBhc3NpbmcgcGFyYW1ldGVycyBmcm9tIERhcnQgY29kZSB0byBDCiAgLy8gY29kZS4gVGhlIG9yaWdpbmFsIHdheSBhbHdheXMgY29udmVydHMgdGhlIHBhcmFtZXRlcnMgdG8gc3RyaW5ncyBiZWZvcmUKICAvLyBwYXNzaW5nIHRoZW0gb3Zlci4gT3VyIGdvYWwgaXMgdG8gY29udmVydCBhbGwgQyBoYW5kbGVycyB0byB0YWtlIHRoZQogIC8vIHBhcmFtZXRlcnMgYXMgRGFydCBvYmplY3RzIGJ1dCB1bnRpbCB0aGUgY29udmVyc2lvbiBpcyBjb21wbGV0ZSwgd2UKICAvLyBtYWludGFpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbWV0aG9kcyBiZWxvdy4KICBib29sIF9tZXRob2ROZWVkc09iamVjdFBhcmFtZXRlcnMoU3RyaW5nIG1ldGhvZCkgewogICAgc3dpdGNoIChtZXRob2QpIHsKICAgICAgY2FzZSAnX2xpc3REZXZGUyc6CiAgICAgIGNhc2UgJ19saXN0RGV2RlNGaWxlcyc6CiAgICAgIGNhc2UgJ19jcmVhdGVEZXZGUyc6CiAgICAgIGNhc2UgJ19kZWxldGVEZXZGUyc6CiAgICAgIGNhc2UgJ193cml0ZURldkZTRmlsZSc6CiAgICAgIGNhc2UgJ193cml0ZURldkZTRmlsZXMnOgogICAgICBjYXNlICdfcmVhZERldkZTRmlsZSc6CiAgICAgIGNhc2UgJ19zcGF3blVyaSc6CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgRnV0dXJlPFJlc3BvbnNlPiBzZW5kVG9WTSgpIHsKICAgIGZpbmFsIHJlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgICByZWNlaXZlUG9ydC5oYW5kbGVyID0gKHZhbHVlKSB7CiAgICAgIHJlY2VpdmVQb3J0LmNsb3NlKCk7CiAgICAgIF9zZXRSZXNwb25zZUZyb21Qb3J0KHZhbHVlKTsKICAgIH07CiAgICB2YXIga2V5cyA9IHBhcmFtcy5rZXlzLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgdmFyIHZhbHVlcyA9IHBhcmFtcy52YWx1ZXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICBpZiAoIV9tZXRob2ROZWVkc09iamVjdFBhcmFtZXRlcnMobWV0aG9kKSkgewogICAgICBrZXlzID0gX21ha2VBbGxTdHJpbmcoa2V5cyk7CiAgICAgIHZhbHVlcyA9IF9tYWtlQWxsU3RyaW5nKHZhbHVlcyk7CiAgICB9CgogICAgZmluYWwgcmVxdWVzdCA9IG5ldyBMaXN0KDYpCiAgICAgIC4uWzBdID0gMCAvLyBNYWtlIHJvb20gZm9yIE9PQiBtZXNzYWdlIHR5cGUuCiAgICAgIC4uWzFdID0gcmVjZWl2ZVBvcnQuc2VuZFBvcnQKICAgICAgLi5bMl0gPSBzZXJpYWwKICAgICAgLi5bM10gPSBtZXRob2QKICAgICAgLi5bNF0gPSBrZXlzCiAgICAgIC4uWzVdID0gdmFsdWVzOwoKICAgIGlmIChfbWV0aG9kTmVlZHNPYmplY3RQYXJhbWV0ZXJzKG1ldGhvZCkpIHsKICAgICAgLy8gV2UgdXNlIGEgZGlmZmVyZW50IG1ldGhvZCBpbnZvY2F0aW9uIHBhdGggaGVyZS4KICAgICAgc2VuZE9iamVjdFJvb3RTZXJ2aWNlTWVzc2FnZShyZXF1ZXN0KTsKICAgIH0gZWxzZSB7CiAgICAgIHNlbmRSb290U2VydmljZU1lc3NhZ2UocmVxdWVzdCk7CiAgICB9CgogICAgcmV0dXJuIF9jb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgdm9pZCBfc2V0UmVzcG9uc2VGcm9tUG9ydChkeW5hbWljIHJlc3BvbnNlKSB7CiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkgewogICAgICAvLyBXZSBzaG91bGQgb25seSBoYXZlIGEgbnVsbCByZXNwb25zZSBmb3IgTm90aWZpY2F0aW9ucy4KICAgICAgYXNzZXJ0KHR5cGUgPT0gTWVzc2FnZVR5cGUuTm90aWZpY2F0aW9uKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBfY29tcGxldGVyLmNvbXBsZXRlKFJlc3BvbnNlLmZyb20ocmVzcG9uc2UpKTsKICB9CgogIHZvaWQgc2V0UmVzcG9uc2UoU3RyaW5nIHJlc3BvbnNlKSB7CiAgICBfY29tcGxldGVyLmNvbXBsZXRlKG5ldyBSZXNwb25zZShSZXNwb25zZVBheWxvYWRLaW5kLlN0cmluZywgcmVzcG9uc2UpKTsKICB9CgogIHZvaWQgc2V0RXJyb3JSZXNwb25zZShpbnQgY29kZSwgU3RyaW5nIGRldGFpbHMpIHsKICAgIHNldFJlc3BvbnNlKGVuY29kZVJwY0Vycm9yKHRoaXMsIGNvZGUsIGRldGFpbHM6ICckbWV0aG9kOiAkZGV0YWlscycpKTsKICB9Cn0KCmJvb2wgc2VuZElzb2xhdGVTZXJ2aWNlTWVzc2FnZShTZW5kUG9ydCBzcCwgTGlzdCBtKQogICAgbmF0aXZlICJWTVNlcnZpY2VfU2VuZElzb2xhdGVTZXJ2aWNlTWVzc2FnZSI7Cgp2b2lkIHNlbmRSb290U2VydmljZU1lc3NhZ2UoTGlzdCBtKSBuYXRpdmUgIlZNU2VydmljZV9TZW5kUm9vdFNlcnZpY2VNZXNzYWdlIjsKCnZvaWQgc2VuZE9iamVjdFJvb3RTZXJ2aWNlTWVzc2FnZShMaXN0IG0pCiAgICBuYXRpdmUgIlZNU2VydmljZV9TZW5kT2JqZWN0Um9vdFNlcnZpY2VNZXNzYWdlIjsKgQ0ATk48ARkBNQEQSTABGjYRASsaAS4QARcBICAfATghHDdICCc9CCc8CCY7CCxABjMEATk2GSQcISEkBgQBNzsZKSAYISQGBAE6NRklHBgiBAE6NBklHBggBAEuFxEGKBEGIAQBIxcZJBUBKCQVKygEAUMkFSsoLQQBEDsEARUZBAErQxQgJSEhIwoPISEjCiAhCgYdHgYRBAFMSlBAKxgTBjIsKAYVBAE2LiQbIwdESB4zIxUVExY5GzY9Bh4EAU1NSkkzNRYZHhsbHh8dGBUPFgYEASAuJBsjBzQ4MSMnBgEgMyMVFRMWATA5LQ0nBgEeBAEwHEAwEwYyBAEmTQQBNEsEAgE0MgFPASo1ARxkYXJ0Ol92bXNlcnZpY2UvbWVzc2FnZS5kYXJ0OW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi92bXNlcnZpY2UvbWVzc2FnZV9yb3V0ZXIuZGFydInALy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKYWJzdHJhY3QgY2xhc3MgTWVzc2FnZVJvdXRlciB7CiAgRnV0dXJlPFJlc3BvbnNlPiByb3V0ZVJlcXVlc3QoVk1TZXJ2aWNlIHNlcnZpY2UsIE1lc3NhZ2UgbWVzc2FnZSk7CiAgdm9pZCByb3V0ZVJlc3BvbnNlKE1lc3NhZ2UgbWVzc2FnZSk7Cn0KCmVudW0gUmVzcG9uc2VQYXlsb2FkS2luZCB7CiAgLy8vIFJlc3BvbnNlIHBheWxvYWQgaXMgYSBEYXJ0IHN0cmluZy4KICBTdHJpbmcsCgogIC8vLyBSZXNwb25zZSBwYXlsb2FkIGlzIGEgYmluYXJ5IChVaW50OExpc3QpLgogIEJpbmFyeSwKCiAgLy8vIFJlc3BvbnNlIHBheWxvYWQgaXMgYSBzdHJpbmcgZW5jb2RlZCBhcyBVVEY4IGJ5dGVzIChVaW50OExpc3QpLgogIFV0ZjhTdHJpbmcsCn0KCmNsYXNzIFJlc3BvbnNlIHsKICBmaW5hbCBSZXNwb25zZVBheWxvYWRLaW5kIGtpbmQ7CiAgZmluYWwgcGF5bG9hZDsKCiAgLy8vIENvbnN0cnVjdCByZXNwb25zZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gW3BheWxvYWRdIGFuZCBba2luZF0uCiAgUmVzcG9uc2UodGhpcy5raW5kLCB0aGlzLnBheWxvYWQpIHsKICAgIGFzc2VydCgoKSB7CiAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5TdHJpbmc6CiAgICAgICAgICByZXR1cm4gcGF5bG9hZCBpcyBTdHJpbmc7CiAgICAgICAgY2FzZSBSZXNwb25zZVBheWxvYWRLaW5kLkJpbmFyeToKICAgICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuVXRmOFN0cmluZzoKICAgICAgICAgIHJldHVybiBwYXlsb2FkIGlzIFVpbnQ4TGlzdDsKICAgICAgfQogICAgfSgpKTsKICB9CgogIC8vLyBDb25zdHJ1Y3QgYSBzdHJpbmcgcmVzcG9uc2UgZnJvbSB0aGUgZ2l2ZW4gW3ZhbHVlXSBieSBlbmNvZGluZyBpdAogIC8vLyBhcyBKU09OLgogIFJlc3BvbnNlLmpzb24oT2JqZWN0IHZhbHVlKQogICAgICA6IHRoaXMoUmVzcG9uc2VQYXlsb2FkS2luZC5TdHJpbmcsIGpzb24uZW5jb2RlKHZhbHVlKSk7CgogIGZhY3RvcnkgUmVzcG9uc2UuaW50ZXJuYWxFcnJvcihTdHJpbmcgbWVzc2FnZSkgewogICAgcmV0dXJuIG5ldyBSZXNwb25zZS5qc29uKHsKICAgICAgJ3R5cGUnOiAnU2VydmljZUVycm9yJywKICAgICAgJ2lkJzogJycsCiAgICAgICdraW5kJzogJ0ludGVybmFsRXJyb3InLAogICAgICAnbWVzc2FnZSc6IG1lc3NhZ2UsCiAgICB9KTsKICB9CgogIC8vLyBDb25zdHJ1Y3QgcmVzcG9uc2UgZnJvbSB0aGUgcmVzcG9uc2UgW3ZhbHVlXSB3aGljaCBjYW4gYmUgZWl0aGVyOgogIC8vLyAgICAgU3RyaW5nOiBhIHN0cmluZwogIC8vLyAgICAgQmluYXJ5OiBhIFVpbnQ4TGlzdAogIC8vLyAgICAgVXRmOFN0cmluZzogYSBzaW5nbGUgZWxlbWVudCBsaXN0IGNvbnRhaW5pbmcgVWludDhMaXN0CiAgZmFjdG9yeSBSZXNwb25zZS5mcm9tKE9iamVjdCB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIFN0cmluZykgewogICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nLCB2YWx1ZSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFVpbnQ4TGlzdCkgewogICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFJlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5LCB2YWx1ZSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIExpc3QpIHsKICAgICAgYXNzZXJ0KHZhbHVlLmxlbmd0aCA9PSAxKTsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgKICAgICAgICAgIFJlc3BvbnNlUGF5bG9hZEtpbmQuVXRmOFN0cmluZywgdmFsdWVbMF0gYXMgVWludDhMaXN0KTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgUmVzcG9uc2UpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJ1VucmVjb2duaXplZCByZXNwb25zZTogJHt2YWx1ZX0nOwogICAgfQogIH0KCiAgLy8vIERlY29kZSBKU09OIGNvbnRhaW5lZCBpbiB0aGlzIHJlc3BvbnNlLgogIGR5bmFtaWMgZGVjb2RlSnNvbigpIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nOgogICAgICAgIHJldHVybiBqc29uLmRlY29kZShwYXlsb2FkKTsKICAgICAgY2FzZSBSZXNwb25zZVBheWxvYWRLaW5kLlV0ZjhTdHJpbmc6CiAgICAgICAgcmV0dXJuIGpzb24uZnVzZSh1dGY4KS5kZWNvZGUocGF5bG9hZCk7CiAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5CaW5hcnk6CiAgICAgICAgdGhyb3cgJ0JpbmFyeSByZXNwb25zZXMgY2FuIG5vdCBiZSBkZWNvZGVkJzsKICAgIH0KICB9Cn0KVwBOTjwBGQEfRScCARspCgEwCgFGDgIBESIRAUUmEBYpJCktJwgKBAFIDx4+ATMfHhAfGggEAUgbHkEoGz4lPiAhG0IkFA0vBgQBLhkUJyUrMCc1BgQCASNkYXJ0Ol92bXNlcnZpY2UvbWVzc2FnZV9yb3V0ZXIuZGFydDdvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvdm1zZXJ2aWNlL25hbWVkX2xvb2t1cC5kYXJ0hv0vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll92bXNlcnZpY2U7CgovLy8gU2V0IGxpa2UgY29udGFpbmVzIHdoaWNoIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFN0cmluZyBpZHMgZm9yIGl0cyBpdGVtcwpjbGFzcyBOYW1lZExvb2t1cDxFPiBleHRlbmRzIE9iamVjdCB3aXRoIEl0ZXJhYmxlTWl4aW48RT4gewogIGZpbmFsIElkR2VuZXJhdG9yIF9nZW5lcmF0b3I7CiAgZmluYWwgTWFwPFN0cmluZywgRT4gX2VsZW1lbnRzID0gbmV3IE1hcDxTdHJpbmcsIEU+KCk7CiAgZmluYWwgTWFwPEUsIFN0cmluZz4gX2lkcyA9IG5ldyBNYXA8RSwgU3RyaW5nPigpOwoKICBOYW1lZExvb2t1cCh7U3RyaW5nIHByb2xvZ3VlID0gJyd9KQogICAgICA6IF9nZW5lcmF0b3IgPSBuZXcgSWRHZW5lcmF0b3IocHJvbG9ndWU6IHByb2xvZ3VlKTsKCiAgdm9pZCBhZGQoRSBlKSB7CiAgICBmaW5hbCBpZCA9IF9nZW5lcmF0b3IubmV3SWQoKTsKICAgIF9lbGVtZW50c1tpZF0gPSBlOwogICAgX2lkc1tlXSA9IGlkOwogIH0KCiAgdm9pZCByZW1vdmUoRSBlKSB7CiAgICBmaW5hbCBpZCA9IF9pZHMucmVtb3ZlKGUpOwogICAgX2VsZW1lbnRzLnJlbW92ZShpZCk7CiAgICBfZ2VuZXJhdG9yLnJlbGVhc2UoaWQpOwogIH0KCiAgRSBvcGVyYXRvciBbXShTdHJpbmcgaWQpID0+IF9lbGVtZW50c1tpZF07CiAgU3RyaW5nIGtleU9mKEUgZSkgPT4gX2lkc1tlXTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IF9pZHMua2V5cy5pdGVyYXRvcjsKfQoKLy8vIEdlbmVyYXRvciBmb3IgdW5pcXVlIGlkcyB3aGljaCByZWN5Y2xlcyBleHBpcmVkIG9uZXMKY2xhc3MgSWRHZW5lcmF0b3IgewogIC8vLyBGaXhlZCBpbml0aWFsIHBhcnQgb2YgdGhlIGlkCiAgZmluYWwgU3RyaW5nIHByb2xvZ3VlOwogIC8vIElkcyBpbiB1c2UKICBmaW5hbCBTZXQ8U3RyaW5nPiBfdXNlZCA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICAvLy8gSWRzIHRoYXQgaGFzIGJlZW4gcmVsZWFzZWQgKHVzZSB0aGVzZSBiZWZvcmUgZ2VuZXJhdGUgbmV3IG9uZXMpCiAgZmluYWwgU2V0PFN0cmluZz4gX2ZyZWUgPSBuZXcgU2V0PFN0cmluZz4oKTsKCiAgLy8vIE5leHQgaWQgdG8gZ2VuZXJhdGUgaWYgbm8gb25lIGNhbiBiZSByZWN5Y2xlZCAoZmlyc3QgdXNlIF9mcmVlKTsKICBpbnQgX25leHQgPSAwOwoKICBJZEdlbmVyYXRvcih7dGhpcy5wcm9sb2d1ZSA9ICcnfSk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IElkIChwb3NzaWJseSByZWN5Y2xlZCkKICBTdHJpbmcgbmV3SWQoKSB7CiAgICB2YXIgaWQ7CiAgICBpZiAoX2ZyZWUuaXNFbXB0eSkgewogICAgICBpZCA9IHByb2xvZ3VlICsgKF9uZXh0KyspLnRvU3RyaW5nKCk7CiAgICB9IGVsc2UgewogICAgICBpZCA9IF9mcmVlLmZpcnN0OwogICAgfQogICAgX2ZyZWUucmVtb3ZlKGlkKTsKICAgIF91c2VkLmFkZChpZCk7CiAgICByZXR1cm4gaWQ7CiAgfQoKICAvLy8gUmVsZWFzZXMgdGhlIGlkIGFuZCBtYXJrIGl0IGZvciByZWN5Y2xlCiAgdm9pZCByZWxlYXNlKFN0cmluZyBpZCkgewogICAgaWYgKF91c2VkLnJlbW92ZShpZCkpIHsKICAgICAgX2ZyZWUuYWRkKGlkKTsKICAgIH0KICB9Cn0KRgBOTjwBGQFOPCA5NAEmOgESIxcSBAEVHxocBAEtIAEyAgE5FCMZEC8BRi8BRxEBJQErEwwZLA0YBhYTDwQBLhwcFQYEAgEhZGFydDpfdm1zZXJ2aWNlL25hbWVkX2xvb2t1cC5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vYnVpbHRpbi5kYXJ0qSQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBidWlsdGluOwoKLy8gTk9URTogRG8gbm90IGltcG9ydCAnZGFydDppbycgaW4gYnVpbHRpbi4KaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIGhpZGUgTGlua2VkTGlzdCwgTGlua2VkTGlzdEVudHJ5OwppbXBvcnQgJ2RhcnQ6X2ludGVybmFsJyBoaWRlIFN5bWJvbDsKaW1wb3J0ICdkYXJ0Omlzb2xhdGUnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgovLyBFbWJlZGRlciBzZXRzIHRoaXMgdG8gdHJ1ZSBpZiB0aGUgLS10cmFjZS1sb2FkaW5nIGZsYWcgd2FzIHBhc3NlZCBvbiB0aGUKLy8gY29tbWFuZCBsaW5lLgpib29sIF90cmFjZUxvYWRpbmcgPSBmYWxzZTsKCi8vIEJlZm9yZSBoYW5kbGluZyBhbiBlbWJlZGRlciBlbnRyeXBvaW50IHdlIGZpbmFsaXplIHRoZSBzZXR1cCBvZiB0aGUKLy8gZGFydDpfYnVpbHRpbiBsaWJyYXJ5Lgpib29sIF9zZXR1cENvbXBsZXRlZCA9IGZhbHNlOwoKLy8gJ3ByaW50JyBpbXBsZW1lbnRhdGlvbi4KLy8gVGhlIHN0YW5kYWxvbmUgZW1iZWRkZXIgcmVnaXN0ZXJzIHRoZSBjbG9zdXJpemVkIF9wcmludCBmdW5jdGlvbiB3aXRoIHRoZQovLyBkYXJ0OmNvcmUgbGlicmFyeS4Kdm9pZCBfcHJpbnRTdHJpbmcoU3RyaW5nIHMpIG5hdGl2ZSAiQnVpbHRpbl9QcmludFN0cmluZyI7Cgp2b2lkIF9wcmludChhcmcpIHsKICBfcHJpbnRTdHJpbmcoYXJnLnRvU3RyaW5nKCkpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCl9nZXRQcmludENsb3N1cmUoKSA9PiBfcHJpbnQ7CgovLyBBc3luY2hyb25vdXMgbG9hZGluZyBvZiByZXNvdXJjZXMuCi8vIFRoZSBlbWJlZGRlciBmb3J3YXJkcyBsb2FkaW5nIHJlcXVlc3RzIHRvIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCgovLyBBIHBvcnQgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgc2VydmljZSBpc29sYXRlIGZvciBJL08uCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKU2VuZFBvcnQgX2xvYWRQb3J0OwoKLy8gVGhlIGlzb2xhdGVJZCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHNlcnZpY2UgaXNvbGF0ZSBmb3IgSS9PLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmludCBfaXNvbGF0ZUlkOwoKLy8gUmVxdWVzdHMgbWFkZSB0byB0aGUgc2VydmljZSBpc29sYXRlIG92ZXIgdGhlIGxvYWQgcG9ydC4KCi8vIEV4dHJhIHJlcXVlc3RzLiBLZWVwIHRoZXNlIGluIHN5bmMgYmV0d2VlbiBsb2FkZXIuZGFydCBhbmQgYnVpbHRpbi5kYXJ0Lgpjb25zdCBfRGFydF9rSW5pdExvYWRlciA9IDQ7IC8vIEluaXRpYWxpemUgdGhlIGxvYWRlci4KY29uc3QgX0RhcnRfa1Jlc291cmNlTG9hZCA9IDU7IC8vIFJlc291cmNlIGNsYXNzIHN1cHBvcnQuCmNvbnN0IF9EYXJ0X2tHZXRQYWNrYWdlUm9vdFVyaSA9IDY7IC8vIFVyaSBvZiB0aGUgcGFja2FnZXMvIGRpcmVjdG9yeS4KY29uc3QgX0RhcnRfa0dldFBhY2thZ2VDb25maWdVcmkgPSA3OyAvLyBVcmkgb2YgdGhlIC5wYWNrYWdlcyBmaWxlLgpjb25zdCBfRGFydF9rUmVzb2x2ZVBhY2thZ2VVcmkgPSA4OyAvLyBSZXNvbHZlIGEgcGFja2FnZTogdXJpLgoKLy8gTWFrZSBhIHJlcXVlc3QgdG8gdGhlIGxvYWRlci4gRnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCByZXN1bHQgd2hpY2ggaXMKLy8gZWl0aGVyIGEgVXJpIG9yIGEgTGlzdDxpbnQ+LgpGdXR1cmU8VD4gX21ha2VMb2FkZXJSZXF1ZXN0PFQ+KGludCB0YWcsIFN0cmluZyB1cmkpIHsKICBhc3NlcnQoX2lzb2xhdGVJZCAhPSBudWxsKTsKICBpZiAoX2xvYWRQb3J0ID09IG51bGwpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJTZXJ2aWNlIGlzb2xhdGUgaXMgbm90IGF2YWlsYWJsZS4iKTsKICB9CiAgQ29tcGxldGVyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8VD4oKTsKICBSYXdSZWNlaXZlUG9ydCBwb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgcG9ydC5oYW5kbGVyID0gKG1zZykgewogICAgLy8gQ2xvc2UgdGhlIHBvcnQuCiAgICBwb3J0LmNsb3NlKCk7CiAgICBjb21wbGV0ZXIuY29tcGxldGUobXNnKTsKICB9OwogIF9sb2FkUG9ydC5zZW5kKFtfdHJhY2VMb2FkaW5nLCBfaXNvbGF0ZUlkLCB0YWcsIHBvcnQuc2VuZFBvcnQsIHVyaV0pOwogIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwp9CgovLyBUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHRoZSBlbWJlZGRlciB3YXMgbGF1bmNoZWQuClVyaSBfd29ya2luZ0RpcmVjdG9yeTsKLy8gVGhlIFVSSSB0aGF0IHRoZSByb290IHNjcmlwdCB3YXMgbG9hZGVkIGZyb20uIFJlbWVtYmVyZWQgc28gdGhhdAovLyBwYWNrYWdlIGltcG9ydHMgY2FuIGJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIGl0LiBUaGUgcm9vdCBzY3JpcHQgaXMgdGhlIGJhc2lzCi8vIGZvciB0aGUgcm9vdCBsaWJyYXJ5IGluIHRoZSBWTS4KVXJpIF9yb290U2NyaXB0OwovLyBUaGUgcGFja2FnZSByb290IHNldCBvbiB0aGUgY29tbWFuZCBsaW5lLgpVcmkgX3BhY2thZ2VSb290OwoKLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgV2luZG93cyBwYXRocyBzbyB0aGF0IHRoZXkgYXJlIGNvbXBhdGlibGUgd2l0aCBVUkkKLy8gaGFuZGxpbmcuCi8vIEVtYmVkZGVyIHNldHMgdGhpcyB0byB0cnVlIGlmIHdlIGFyZSBydW5uaW5nIG9uIFdpbmRvd3MuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYm9vbCBfaXNXaW5kb3dzID0gZmFsc2U7CgovLyBMb2dnaW5nIGZyb20gYnVpbHRpbi5kYXJ0IGlzIHByZWZpeGVkIHdpdGggYSAnKicuClN0cmluZyBfbG9nSWQgPSAoSXNvbGF0ZS5jdXJyZW50Lmhhc2hDb2RlICUgMHgxMDAwMDApLnRvUmFkaXhTdHJpbmcoMTYpOwpfbG9nKG1zZykgewogIF9wcmludCgiKiAkX2xvZ0lkICRtc2ciKTsKfQoKX3Nhbml0aXplV2luZG93c1BhdGgocGF0aCkgewogIC8vIEZvciBXaW5kb3dzIHdlIG5lZWQgdG8gbWFzc2FnZSB0aGUgcGF0aHMgYSBiaXQgYWNjb3JkaW5nIHRvCiAgLy8gaHR0cDovL2Jsb2dzLm1zZG4uY29tL2IvaWUvYXJjaGl2ZS8yMDA2LzEyLzA2L2ZpbGUtdXJpcy1pbi13aW5kb3dzLmFzcHgKICAvLwogIC8vIENvbnZlcnQKICAvLyBDOlxvbmVcdHdvXHRocmVlCiAgLy8gdG8KICAvLyAvQzovb25lL3R3by90aHJlZQoKICBpZiAoX2lzV2luZG93cyA9PSBmYWxzZSkgewogICAgLy8gRG8gbm90aGluZyB3aGVuIG5vdCBydW5uaW5nIFdpbmRvd3MuCiAgICByZXR1cm4gcGF0aDsKICB9CgogIHZhciBmaXhlZFBhdGggPSAiJHtwYXRoLnJlcGxhY2VBbGwoJ1xcJywgJy8nKX0iOwoKICBpZiAoKHBhdGgubGVuZ3RoID4gMikgJiYgKHBhdGhbMV0gPT0gJzonKSkgewogICAgLy8gUGF0aCBiZWdpbnMgd2l0aCBhIGRyaXZlIGxldHRlci4KICAgIHJldHVybiAnLyRmaXhlZFBhdGgnOwogIH0KCiAgcmV0dXJuIGZpeGVkUGF0aDsKfQoKX3RyaW1XaW5kb3dzUGF0aChwYXRoKSB7CiAgLy8gQ29udmVydCAvWDovIHRvIFg6Ly4KICBpZiAoX2lzV2luZG93cyA9PSBmYWxzZSkgewogICAgLy8gRG8gbm90aGluZyB3aGVuIG5vdCBydW5uaW5nIFdpbmRvd3MuCiAgICByZXR1cm4gcGF0aDsKICB9CiAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSB8fCAocGF0aC5sZW5ndGggPCAzKSkgewogICAgcmV0dXJuIHBhdGg7CiAgfQogIC8vIE1hdGNoICcvPzonLgogIGlmICgocGF0aFswXSA9PSAnLycpICYmIChwYXRoWzJdID09ICc6JykpIHsKICAgIC8vIFJlbW92ZSBsZWFkaW5nICcvJy4KICAgIHJldHVybiBwYXRoLnN1YnN0cmluZygxKTsKICB9CiAgcmV0dXJuIHBhdGg7Cn0KCi8vIEVuc3VyZSB3ZSBoYXZlIGEgdHJhaWxpbmcgc2xhc2ggY2hhcmFjdGVyLgpfZW5mb3JjZVRyYWlsaW5nU2xhc2godXJpKSB7CiAgaWYgKCF1cmkuZW5kc1dpdGgoJy8nKSkgewogICAgcmV0dXJuICckdXJpLyc7CiAgfQogIHJldHVybiB1cmk7Cn0KCi8vIEVtYmVkZGVyIEVudHJ5cG9pbnQ6Ci8vIFRoZSBlbWJlZGRlciBjYWxscyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCnZvaWQgX3NldFdvcmtpbmdEaXJlY3RvcnkoU3RyaW5nIGN3ZCkgewogIGlmICghX3NldHVwQ29tcGxldGVkKSB7CiAgICBfc2V0dXBIb29rcygpOwogIH0KICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgX2xvZygnU2V0dGluZyB3b3JraW5nIGRpcmVjdG9yeTogJGN3ZCcpOwogIH0KICBfd29ya2luZ0RpcmVjdG9yeSA9IG5ldyBVcmkuZGlyZWN0b3J5KGN3ZCk7CiAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coJ1dvcmtpbmcgZGlyZWN0b3J5IFVSSTogJF93b3JraW5nRGlyZWN0b3J5Jyk7CiAgfQp9CgovLyBFbWJlZGRlciBFbnRyeXBvaW50OgovLyBUaGUgZW1iZWRkZXIgY2FsbHMgdGhpcyBtZXRob2Qgd2l0aCBhIGN1c3RvbSBwYWNrYWdlIHJvb3QuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKU3RyaW5nIF9zZXRQYWNrYWdlUm9vdChTdHJpbmcgcGFja2FnZVJvb3QpIHsKICBpZiAoIV9zZXR1cENvbXBsZXRlZCkgewogICAgX3NldHVwSG9va3MoKTsKICB9CiAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coJ1NldHRpbmcgcGFja2FnZSByb290OiAkcGFja2FnZVJvb3QnKTsKICB9CiAgaWYgKHBhY2thZ2VSb290LnN0YXJ0c1dpdGgoJ2ZpbGU6JykgfHwKICAgICAgcGFja2FnZVJvb3Quc3RhcnRzV2l0aCgnaHR0cDonKSB8fAogICAgICBwYWNrYWdlUm9vdC5zdGFydHNXaXRoKCdodHRwczonKSkgewogICAgcGFja2FnZVJvb3QgPSBfZW5mb3JjZVRyYWlsaW5nU2xhc2gocGFja2FnZVJvb3QpOwogICAgX3BhY2thZ2VSb290ID0gX3dvcmtpbmdEaXJlY3RvcnkucmVzb2x2ZShwYWNrYWdlUm9vdCk7CiAgfSBlbHNlIHsKICAgIHBhY2thZ2VSb290ID0gX3Nhbml0aXplV2luZG93c1BhdGgocGFja2FnZVJvb3QpOwogICAgcGFja2FnZVJvb3QgPSBfdHJpbVdpbmRvd3NQYXRoKHBhY2thZ2VSb290KTsKICAgIF9wYWNrYWdlUm9vdCA9IF93b3JraW5nRGlyZWN0b3J5LnJlc29sdmVVcmkobmV3IFVyaS5kaXJlY3RvcnkocGFja2FnZVJvb3QpKTsKICB9CiAgLy8gTm93IHRoYXQgd2UgaGF2ZSBkZXRlcm1pbmVkIHRoZSBwYWNrYWdlUm9vdCB2YWx1ZSBiZWluZyB1c2VkLCBzZXQgaXQKICAvLyB1cCBmb3IgdXNlIGluIFBsYXRmb3JtLnBhY2thZ2VSb290LiBUaGlzIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGVtYmVkZGVyCiAgLy8gc2V0cyB1cCB0aGUgcGFja2FnZSByb290LiBBdXRvbWF0aWNhbGx5IGRpc2NvdmVyZWQgcGFja2FnZSByb290IHdpbGwKICAvLyBub3QgdXBkYXRlIHRoZSBWTUxpYnJhcnlIb29rcyB2YWx1ZS4KICB2YXIgcGFja2FnZVJvb3RTdHIgPSBfcGFja2FnZVJvb3QudG9TdHJpbmcoKTsKICBWTUxpYnJhcnlIb29rcy5wYWNrYWdlUm9vdFN0cmluZyA9IHBhY2thZ2VSb290U3RyOwogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCdQYWNrYWdlIHJvb3QgVVJJOiAkX3BhY2thZ2VSb290Jyk7CiAgfQogIHJldHVybiBwYWNrYWdlUm9vdFN0cjsKfQoKLy8gRW1iZWRkZXIgRW50cnlwb2ludDoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpTdHJpbmcgX3NldFBhY2thZ2VzTWFwKFN0cmluZyBwYWNrYWdlc1BhcmFtKSB7CiAgaWYgKCFfc2V0dXBDb21wbGV0ZWQpIHsKICAgIF9zZXR1cEhvb2tzKCk7CiAgfQogIC8vIEZpcnN0IGNvbnZlcnQgdGhlIHBhY2thZ2VzIHBhcmFtZXRlciBmcm9tIHRoZSBjb21tYW5kIGxpbmUgdG8gYSBVUkkgd2hpY2gKICAvLyBjYW4gYmUgaGFuZGxlZCBieSB0aGUgbG9hZGVyIGNvZGUuCiAgLy8gVE9ETyhpcG9zdmEpOiBDb25zaWRlciByZWZhY3RvcmluZyB0aGUgY29tbW9uIGNvZGUgYmVsb3cgd2hpY2ggaXMgYWxtb3N0CiAgLy8gc2hhcmVkIHdpdGggcmVzb2x1dGlvbiBvZiB0aGUgcm9vdCBzY3JpcHQuCiAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coIlJlc29sdmluZyBwYWNrYWdlcyBtYXA6ICRwYWNrYWdlc1BhcmFtIik7CiAgfQogIGlmIChfd29ya2luZ0RpcmVjdG9yeSA9PSBudWxsKSB7CiAgICB0aHJvdyAnTm8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzZXQuJzsKICB9CiAgdmFyIHBhY2thZ2VzTmFtZSA9IF9zYW5pdGl6ZVdpbmRvd3NQYXRoKHBhY2thZ2VzUGFyYW0pOwogIHZhciBwYWNrYWdlc1VyaSA9IFVyaS5wYXJzZShwYWNrYWdlc05hbWUpOwogIGlmIChwYWNrYWdlc1VyaS5zY2hlbWUgPT0gJycpIHsKICAgIC8vIFNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgc2NoZW1lLCBhc3N1bWUgdGhhdCBpdCBpcyBhIHBhdGgsCiAgICAvLyByZXNvbHZlIGl0IGFnYWluc3QgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgogICAgcGFja2FnZXNVcmkgPSBfd29ya2luZ0RpcmVjdG9yeS5yZXNvbHZlVXJpKHBhY2thZ2VzVXJpKTsKICB9CiAgdmFyIHBhY2thZ2VzVXJpU3RyID0gcGFja2FnZXNVcmkudG9TdHJpbmcoKTsKICBWTUxpYnJhcnlIb29rcy5wYWNrYWdlQ29uZmlnU3RyaW5nID0gcGFja2FnZXNVcmlTdHI7CiAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coJ1Jlc29sdmVkIHBhY2thZ2VzIG1hcCB0bzogJHBhY2thZ2VzVXJpJyk7CiAgfQogIHJldHVybiBwYWNrYWdlc1VyaVN0cjsKfQoKLy8gUmVzb2x2ZXMgdGhlIHNjcmlwdCB1cmkgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaWZmIHRoZSBnaXZlbiB1cmkKLy8gZGlkIG5vdCBzcGVjaWZ5IGEgc2NoZW1lIChlLmcuIGEgcGF0aCB0byBhIHNjcmlwdCBmaWxlIG9uIHRoZSBjb21tYW5kIGxpbmUpLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpClN0cmluZyBfcmVzb2x2ZVNjcmlwdFVyaShTdHJpbmcgc2NyaXB0TmFtZSkgewogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCJSZXNvbHZpbmcgc2NyaXB0OiAkc2NyaXB0TmFtZSIpOwogIH0KICBpZiAoX3dvcmtpbmdEaXJlY3RvcnkgPT0gbnVsbCkgewogICAgdGhyb3cgJ05vIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2V0Lic7CiAgfQogIHNjcmlwdE5hbWUgPSBfc2FuaXRpemVXaW5kb3dzUGF0aChzY3JpcHROYW1lKTsKCiAgdmFyIHNjcmlwdFVyaSA9IFVyaS5wYXJzZShzY3JpcHROYW1lKTsKICBpZiAoc2NyaXB0VXJpLnNjaGVtZSA9PSAnJykgewogICAgLy8gU2NyaXB0IGRvZXMgbm90IGhhdmUgYSBzY2hlbWUsIGFzc3VtZSB0aGF0IGl0IGlzIGEgcGF0aCwKICAgIC8vIHJlc29sdmUgaXQgYWdhaW5zdCB0aGUgd29ya2luZyBkaXJlY3RvcnkuCiAgICBzY3JpcHRVcmkgPSBfd29ya2luZ0RpcmVjdG9yeS5yZXNvbHZlVXJpKHNjcmlwdFVyaSk7CiAgfQoKICAvLyBSZW1lbWJlciB0aGUgcm9vdCBzY3JpcHQgVVJJIHNvIHRoYXQgd2UgY2FuIHJlc29sdmUgcGFja2FnZXMgYmFzZWQgb24KICAvLyB0aGlzIGxvY2F0aW9uLgogIF9yb290U2NyaXB0ID0gc2NyaXB0VXJpOwoKICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgX2xvZygnUmVzb2x2ZWQgZW50cnkgcG9pbnQgdG86ICRfcm9vdFNjcmlwdCcpOwogIH0KICByZXR1cm4gc2NyaXB0VXJpLnRvU3RyaW5nKCk7Cn0KCi8vIE9ubHkgdXNlZCBieSB2bS9jYyB1bml0IHRlc3RzLgpVcmkgX3Jlc29sdmVQYWNrYWdlVXJpKFVyaSB1cmkpIHsKICBhc3NlcnQoX3BhY2thZ2VSb290ICE9IG51bGwpOwogIHJldHVybiBfcGFja2FnZVJvb3QucmVzb2x2ZSh1cmkucGF0aCk7Cn0KCi8vIFJldHVybnMgZWl0aGVyIGEgZmlsZSBwYXRoIG9yIGEgVVJJIHN0YXJ0aW5nIHdpdGggaHR0cFtzXTosIGFzIGEgU3RyaW5nLgpTdHJpbmcgX2ZpbGVQYXRoRnJvbVVyaShTdHJpbmcgdXNlclVyaSkgewogIHZhciB1cmkgPSBVcmkucGFyc2UodXNlclVyaSk7CiAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coJ0dldHRpbmcgZmlsZSBwYXRoIGZyb206ICR1cmknKTsKICB9CgogIHZhciBwYXRoOwogIHN3aXRjaCAodXJpLnNjaGVtZSkgewogICAgY2FzZSAnJzoKICAgIGNhc2UgJ2ZpbGUnOgogICAgICByZXR1cm4gdXJpLnRvRmlsZVBhdGgoKTsKICAgIGNhc2UgJ3BhY2thZ2UnOgogICAgICByZXR1cm4gX2ZpbGVQYXRoRnJvbVVyaShfcmVzb2x2ZVBhY2thZ2VVcmkodXJpKS50b1N0cmluZygpKTsKICAgIGNhc2UgJ2RhdGEnOgogICAgY2FzZSAnaHR0cCc6CiAgICBjYXNlICdodHRwcyc6CiAgICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTsKICAgIGRlZmF1bHQ6CiAgICAgIC8vIE9ubHkgaGFuZGxpbmcgZmlsZSwgaHR0cCwgYW5kIHBhY2thZ2UgVVJJcwogICAgICAvLyBpbiBzdGFuZGFsb25lIGJpbmFyeS4KICAgICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCdVbmtub3duIHNjaGVtZSAoJHt1cmkuc2NoZW1lfSkgaW4gJHVyaS4nKTsKICAgICAgfQogICAgICB0aHJvdyAnTm90IGEga25vd24gc2NoZW1lOiAkdXJpJzsKICB9Cn0KCi8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBhbmQgaG9va3Mgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29yZSBsaWJyYXJpZXMuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKX3NldHVwSG9va3MoKSB7CiAgX3NldHVwQ29tcGxldGVkID0gdHJ1ZTsKICBWTUxpYnJhcnlIb29rcy5yZXNvdXJjZVJlYWRBc0J5dGVzID0gX3Jlc291cmNlUmVhZEFzQnl0ZXM7CgogIFZNTGlicmFyeUhvb2tzLnBhY2thZ2VSb290VXJpRnV0dXJlID0gX2dldFBhY2thZ2VSb290RnV0dXJlOwogIFZNTGlicmFyeUhvb2tzLnBhY2thZ2VDb25maWdVcmlGdXR1cmUgPSBfZ2V0UGFja2FnZUNvbmZpZ0Z1dHVyZTsKICBWTUxpYnJhcnlIb29rcy5yZXNvbHZlUGFja2FnZVVyaUZ1dHVyZSA9IF9yZXNvbHZlUGFja2FnZVVyaUZ1dHVyZTsKfQoKLy8gSGFuZGxpbmcgb2YgUmVzb3VyY2UgY2xhc3MgYnkgZGlzcGF0Y2hpbmcgdG8gdGhlIGxvYWQgcG9ydC4KRnV0dXJlPExpc3Q8aW50Pj4gX3Jlc291cmNlUmVhZEFzQnl0ZXMoVXJpIHVyaSkgYXN5bmMgewogIExpc3QgcmVzcG9uc2UgPQogICAgICBhd2FpdCBfbWFrZUxvYWRlclJlcXVlc3Q8TGlzdDxpbnQ+PihfRGFydF9rUmVzb3VyY2VMb2FkLCB1cmkudG9TdHJpbmcoKSk7CiAgaWYgKHJlc3BvbnNlWzRdIGlzIFN0cmluZykgewogICAgLy8gVGhyb3cgdGhlIGVycm9yLgogICAgdGhyb3cgcmVzcG9uc2VbNF07CiAgfSBlbHNlIHsKICAgIHJldHVybiByZXNwb25zZVs0XTsKICB9Cn0KCi8vIFRPRE8obWZhaXJodXJzdCk6IHJlbW92ZSB0aGlzCkZ1dHVyZTxVcmk+IF9nZXRQYWNrYWdlUm9vdEZ1dHVyZSgpIHsKICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgX2xvZygiUmVxdWVzdCBmb3IgcGFja2FnZSByb290IGZyb20gdXNlciBjb2RlLiIpOwogIH0KICAvLyBSZXR1cm4gbnVsbCwgYXMgdGhlIGBwYWNrYWdlcy9gIGRpcmVjdG9yeSBpcyBub3Qgc3VwcG9ydGVkIGluIGRhcnQgMi4KICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShudWxsKTsKfQoKRnV0dXJlPFVyaT4gX2dldFBhY2thZ2VDb25maWdGdXR1cmUoKSB7CiAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coIlJlcXVlc3QgZm9yIHBhY2thZ2UgY29uZmlnIGZyb20gdXNlciBjb2RlLiIpOwogIH0KICBhc3NlcnQoX2xvYWRQb3J0ICE9IG51bGwpOwogIHJldHVybiBfbWFrZUxvYWRlclJlcXVlc3Q8VXJpPihfRGFydF9rR2V0UGFja2FnZUNvbmZpZ1VyaSwgbnVsbCk7Cn0KCkZ1dHVyZTxVcmk+IF9yZXNvbHZlUGFja2FnZVVyaUZ1dHVyZShVcmkgcGFja2FnZVVyaSkgYXN5bmMgewogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCJSZXF1ZXN0IGZvciBwYWNrYWdlIFVyaSByZXNvbHV0aW9uIGZyb20gdXNlciBjb2RlOiAkcGFja2FnZVVyaSIpOwogIH0KICBpZiAocGFja2FnZVVyaS5zY2hlbWUgIT0gInBhY2thZ2UiKSB7CiAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJOb24tcGFja2FnZSBVcmksIHJldHVybmluZyB1bm1vZGlmaWVkOiAkcGFja2FnZVVyaSIpOwogICAgfQogICAgLy8gUmV0dXJuIHRoZSBpbmNvbWluZyBwYXJhbWV0ZXIgaWYgbm90IHBhc3NlZCBhIHBhY2thZ2U6IFVSSS4KICAgIHJldHVybiBwYWNrYWdlVXJpOwogIH0KICB2YXIgcmVzdWx0ID0gYXdhaXQgX21ha2VMb2FkZXJSZXF1ZXN0PFVyaT4oCiAgICAgIF9EYXJ0X2tSZXNvbHZlUGFja2FnZVVyaSwgcGFja2FnZVVyaS50b1N0cmluZygpKTsKICBpZiAocmVzdWx0IGlzISBVcmkpIHsKICAgIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIkV4Y2VwdGlvbiB3aGVuIHJlc29sdmluZyBwYWNrYWdlIFVSSTogJHBhY2thZ2VVcmkiKTsKICAgIH0KICAgIHJlc3VsdCA9IG51bGw7CiAgfQogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCJSZXNvbHZlZCAnJHBhY2thZ2VVcmknIHRvICckcmVzdWx0JyIpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CoFdAE5OPAERAS0VOyUXGgFMERwBRxoeARtNFjoBEyACARoeASZCAT4aFAFHGhABPAFMNzpHRD8BSyA3HhtFBCwuGRcSHQVIGwIBQRdEUCMRLRIBSw08GhkBNUkMHAIBHUFNBQ0WCBcBHSwRBAEzAS8oGgQBFAIBGRodLBEENBEEEi4bHgQPAgEuHRwUBA4CARhGGigaEwQXLQQuFzcEAgEYPhotGhMEFzAEKSkqNjsLNTFRBEpMSiowNRctBBkCARgaLxoTBE8oTjAXNAQjLwQ6LSJAMT0ELzcXNAQZAgFOUBouFysEIy8EMQEpIEAxOQQBSxQbARczBB8CASIiICkCAUwqIBcqBAEMGA0RHxRDERESHQ00Hxs5CCgEAgFFGhAaPQE/Q0UCAT84ElAfGBcLGAQCASEmFzYESyECASgXOAQdRAIBPRdMBCgZQgZDFwQuOBgZQQYTBBcxBBECAQ1kYXJ0Ol9idWlsdGluPG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9odG1sL2RhcnRpdW0vbmF0aXZld3JhcHBlcnMuZGFydIF9Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgbmF0aXZld3JhcHBlcnM7CgpjbGFzcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEge30KCmNsYXNzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMiB7fQoKY2xhc3MgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MzIHt9CgpjbGFzcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczQge30KDwBOTjwBGAEiASIBIgEiARNkYXJ0Om5hdGl2ZXdyYXBwZXJzJm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9pby5kYXJ0nxovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoqCiAqIEZpbGUsIHNvY2tldCwgSFRUUCwgYW5kIG90aGVyIEkvTyBzdXBwb3J0IGZvciBub24td2ViIGFwcGxpY2F0aW9ucy4KICoKICogKipJbXBvcnRhbnQ6KiogQnJvd3Nlci1iYXNlZCBhcHBsaWNhdGlvbnMgY2FuJ3QgdXNlIHRoaXMgbGlicmFyeS4KICogT25seSBzZXJ2ZXJzLCBjb21tYW5kLWxpbmUgc2NyaXB0cywgYW5kIEZsdXR0ZXIgbW9iaWxlIGFwcHMgY2FuIGltcG9ydAogKiBhbmQgdXNlIGRhcnQ6aW8uCiAqCiAqIFRoaXMgbGlicmFyeSBhbGxvd3MgeW91IHRvIHdvcmsgd2l0aCBmaWxlcywgZGlyZWN0b3JpZXMsCiAqIHNvY2tldHMsIHByb2Nlc3NlcywgSFRUUCBzZXJ2ZXJzIGFuZCBjbGllbnRzLCBhbmQgbW9yZS4KICogTWFueSBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gaW5wdXQgYW5kIG91dHB1dCBhcmUgYXN5bmNocm9ub3VzCiAqIGFuZCBhcmUgaGFuZGxlZCB1c2luZyBbRnV0dXJlXXMgb3IgW1N0cmVhbV1zLCBib3RoIG9mIHdoaWNoCiAqIGFyZSBkZWZpbmVkIGluIHRoZSBbZGFydDphc3luYwogKiBsaWJyYXJ5XSguLi9kYXJ0LWFzeW5jL2RhcnQtYXN5bmMtbGlicmFyeS5odG1sKS4KICoKICogVG8gdXNlIHRoZSBkYXJ0OmlvIGxpYnJhcnkgaW4geW91ciBjb2RlOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogRm9yIGFuIGludHJvZHVjdGlvbiB0byBJL08gaW4gRGFydCwgc2VlIHRoZSBbZGFydDppbyBsaWJyYXJ5CiAqIHRvdXJdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kYXJ0LXZtL2lvLWxpYnJhcnktdG91cikuCiAqCiAqICMjIEZpbGUsIERpcmVjdG9yeSwgYW5kIExpbmsKICoKICogQW4gaW5zdGFuY2Ugb2YgW0ZpbGVdLCBbRGlyZWN0b3J5XSwgb3IgW0xpbmtdIHJlcHJlc2VudHMgYSBmaWxlLAogKiBkaXJlY3RvcnksIG9yIGxpbmssIHJlc3BlY3RpdmVseSwgaW4gdGhlIG5hdGl2ZSBmaWxlIHN5c3RlbS4KICoKICogWW91IGNhbiBtYW5pcHVsYXRlIHRoZSBmaWxlIHN5c3RlbSB0aHJvdWdoIG9iamVjdHMgb2YgdGhlc2UgdHlwZXMuCiAqIEZvciBleGFtcGxlLCB5b3UgY2FuIHJlbmFtZSBhIGZpbGUgb3IgZGlyZWN0b3J5OgogKgogKiAgICAgRmlsZSBteUZpbGUgPSBuZXcgRmlsZSgnbXlGaWxlLnR4dCcpOwogKiAgICAgbXlGaWxlLnJlbmFtZSgneW91ckZpbGUudHh0JykudGhlbigoXykgPT4gcHJpbnQoJ2ZpbGUgcmVuYW1lZCcpKTsKICoKICogTWFueSBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBGaWxlLCBEaXJlY3RvcnksIGFuZCBMaW5rIGNsYXNzZXMKICogcnVuIGFzeW5jaHJvbm91c2x5IGFuZCByZXR1cm4gYSBGdXR1cmUuCiAqCiAqICMjIEZpbGVTeXN0ZW1FbnRpdHkKICoKICogRmlsZSwgRGlyZWN0b3J5LCBhbmQgTGluayBhbGwgZXh0ZW5kIFtGaWxlU3lzdGVtRW50aXR5XS4KICogSW4gYWRkaXRpb24gdG8gYmVpbmcgdGhlIHN1cGVyY2xhc3MgZm9yIHRoZXNlIGNsYXNzZXMsCiAqIEZpbGVTeXN0ZW1FbnRpdHkgaGFzIGEgbnVtYmVyIG9mIHN0YXRpYyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggcGF0aHMuCiAqCiAqIFRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhdGgsCiAqIHlvdSBjYW4gdXNlIHRoZSBGaWxlU3lzdGVtRW50aXR5IHN0YXRpYyBtZXRob2RzCiAqIHN1Y2ggYXMgJ2lzRGlyZWN0b3J5JywgJ2lzRmlsZScsIGFuZCAnZXhpc3RzJy4KICogQmVjYXVzZSBmaWxlIHN5c3RlbSBhY2Nlc3MgaW52b2x2ZXMgSS9PLCB0aGVzZSBtZXRob2RzCiAqIGFyZSBhc3luY2hyb25vdXMgYW5kIHJldHVybiBhIEZ1dHVyZS4KICoKICogICAgIEZpbGVTeXN0ZW1FbnRpdHkuaXNEaXJlY3RvcnkobXlQYXRoKS50aGVuKChpc0RpcikgewogKiAgICAgICBpZiAoaXNEaXIpIHsKICogICAgICAgICBwcmludCgnJG15UGF0aCBpcyBhIGRpcmVjdG9yeScpOwogKiAgICAgICB9IGVsc2UgewogKiAgICAgICAgIHByaW50KCckbXlQYXRoIGlzIG5vdCBhIGRpcmVjdG9yeScpOwogKiAgICAgICB9CiAqICAgICB9KTsKICoKICogIyMgSHR0cFNlcnZlciBhbmQgSHR0cENsaWVudAogKgogKiBUaGUgY2xhc3NlcyBbSHR0cFNlcnZlcl0gYW5kIFtIdHRwQ2xpZW50XQogKiBwcm92aWRlIEhUVFAgc2VydmVyIGFuZCBIVFRQIGNsaWVudCBmdW5jdGlvbmFsaXR5LgogKgogKiBUaGUgW0h0dHBTZXJ2ZXJdIGNsYXNzIHByb3ZpZGVzIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IGZvcgogKiBpbXBsZW1lbnRpbmcgYW4gSFRUUCBzZXJ2ZXIuCiAqIEZvciBzb21lIGhpZ2hlci1sZXZlbCBidWlsZGluZy1ibG9ja3MsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB0cnkKICogdGhlIFtzaGVsZl0oaHR0cHM6Ly9wdWIuZGFydGxhbmcub3JnL3BhY2thZ2VzL3NoZWxmKQogKiBwdWIgcGFja2FnZSwgd2hpY2ggY29udGFpbnMKICogYSBzZXQgb2YgaGlnaC1sZXZlbCBjbGFzc2VzIHRoYXQsIHRvZ2V0aGVyIHdpdGggdGhlIFtIdHRwU2VydmVyXSBjbGFzcwogKiBpbiB0aGlzIGxpYnJhcnksIG1ha2UgaXQgZWFzaWVyIHRvIGltcGxlbWVudCBIVFRQIHNlcnZlcnMuCiAqCiAqICMjIFByb2Nlc3MKICoKICogVGhlIFtQcm9jZXNzXSBjbGFzcyBwcm92aWRlcyBhIHdheSB0byBydW4gYSBwcm9jZXNzIG9uCiAqIHRoZSBuYXRpdmUgbWFjaGluZS4KICogRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBzcGF3bnMgYSBwcm9jZXNzIHRoYXQgcmVjdXJzaXZlbHkgbGlzdHMKICogdGhlIGZpbGVzIHVuZGVyIGB3ZWJgLgogKgogKiAgICAgUHJvY2Vzcy5zdGFydCgnbHMnLCBbJy1SJywgJ3dlYiddKS50aGVuKChwcm9jZXNzKSB7CiAqICAgICAgIHN0ZG91dC5hZGRTdHJlYW0ocHJvY2Vzcy5zdGRvdXQpOwogKiAgICAgICBzdGRlcnIuYWRkU3RyZWFtKHByb2Nlc3Muc3RkZXJyKTsKICogICAgICAgcHJvY2Vzcy5leGl0Q29kZS50aGVuKHByaW50KTsKICogICAgIH0pOwogKgogKiBVc2luZyBgc3RhcnQoKWAgcmV0dXJucyBhIEZ1dHVyZSwgd2hpY2ggY29tcGxldGVzIHdpdGggYSBbUHJvY2Vzc10gb2JqZWN0CiAqIHdoZW4gdGhlIHByb2Nlc3MgaGFzIHN0YXJ0ZWQuIFRoaXMgW1Byb2Nlc3NdIG9iamVjdCBhbGxvd3MgeW91IHRvIGludGVyYWN0CiAqIHdpdGggdGhlIHByb2Nlc3Mgd2hpbGUgaXQgaXMgcnVubmluZy4gVXNpbmcgYHJ1bigpYCByZXR1cm5zIGEgRnV0dXJlLCB3aGljaAogKiBjb21wbGV0ZXMgd2l0aCBhIFtQcm9jZXNzUmVzdWx0XSBvYmplY3Qgd2hlbiB0aGUgc3Bhd25lZCBwcm9jZXNzIGhhcwogKiB0ZXJtaW5hdGVkLiBUaGlzIFtQcm9jZXNzUmVzdWx0XSBvYmplY3QgY29sbGVjdHMgdGhlIG91dHB1dCBhbmQgZXhpdCBjb2RlCiAqIGZyb20gdGhlIHByb2Nlc3MuCiAqCiAqIFdoZW4gdXNpbmcgYHN0YXJ0KClgLAogKiB5b3UgbmVlZCB0byByZWFkIGFsbCBkYXRhIGNvbWluZyBvbiB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyBvdGhlcndpc2UKICogdGhlIHN5c3RlbSByZXNvdXJjZXMgd2lsbCBub3QgYmUgZnJlZWQuCiAqCiAqICMjIFdlYlNvY2tldAogKgogKiBUaGUgW1dlYlNvY2tldF0gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHdlYiBzb2NrZXQgcHJvdG9jb2wuIFRoaXMKICogYWxsb3dzIGZ1bGwtZHVwbGV4IGNvbW11bmljYXRpb25zIGJldHdlZW4gY2xpZW50IGFuZCBzZXJ2ZXIgYXBwbGljYXRpb25zLgogKgogKiBBIHdlYiBzb2NrZXQgc2VydmVyIHVzZXMgYSBub3JtYWwgSFRUUCBzZXJ2ZXIgZm9yIGFjY2VwdGluZyB3ZWIgc29ja2V0CiAqIGNvbm5lY3Rpb25zLiBUaGUgaW5pdGlhbCBoYW5kc2hha2UgaXMgYSBIVFRQIHJlcXVlc3Qgd2hpY2ggaXMgdGhlbiB1cGdyYWRlZCB0byBhCiAqIHdlYiBzb2NrZXQgY29ubmVjdGlvbi4KICogVGhlIHNlcnZlciB1cGdyYWRlcyB0aGUgcmVxdWVzdCB1c2luZyBbV2ViU29ja2V0VHJhbnNmb3JtZXJdCiAqIGFuZCBsaXN0ZW5zIGZvciB0aGUgZGF0YSBvbiB0aGUgcmV0dXJuZWQgd2ViIHNvY2tldC4KICogRm9yIGV4YW1wbGUsIGhlcmUncyBhIG1pbmkgc2VydmVyIHRoYXQgbGlzdGVucyBmb3IgJ3dzJyBkYXRhCiAqIG9uIGEgV2ViU29ja2V0OgogKgogKiAgICAgcnVuWm9uZWQoKCkgYXN5bmMgewogKiAgICAgICB2YXIgc2VydmVyID0gYXdhaXQgSHR0cFNlcnZlci5iaW5kKCcxMjcuMC4wLjEnLCA0MDQwKTsKICogICAgICAgc2VydmVyLmxpc3RlbigoSHR0cFJlcXVlc3QgcmVxKSBhc3luYyB7CiAqICAgICAgICAgaWYgKHJlcS51cmkucGF0aCA9PSAnL3dzJykgewogKiAgICAgICAgICAgdmFyIHNvY2tldCA9IGF3YWl0IFdlYlNvY2tldFRyYW5zZm9ybWVyLnVwZ3JhZGUocmVxKTsKICogICAgICAgICAgIHNvY2tldC5saXN0ZW4oaGFuZGxlTXNnKTsKICogICAgICAgICB9CiAqICAgICAgIH0pOwogKiAgICAgfSwgb25FcnJvcjogKGUpID0+IHByaW50KCJBbiBlcnJvciBvY2N1cnJlZC4iKSk7CiAqCiAqIFRoZSBjbGllbnQgY29ubmVjdHMgdG8gdGhlIFdlYlNvY2tldCB1c2luZyB0aGUgYGNvbm5lY3QoKWAgbWV0aG9kCiAqIGFuZCBhIFVSSSB0aGF0IHVzZXMgdGhlIFdlYiBTb2NrZXQgcHJvdG9jb2wuCiAqIFRoZSBjbGllbnQgY2FuIHdyaXRlIHRvIHRoZSBXZWJTb2NrZXQgd2l0aCB0aGUgYGFkZCgpYCBtZXRob2QuCiAqIEZvciBleGFtcGxlLAogKgogKiAgICAgdmFyIHNvY2tldCA9IGF3YWl0IFdlYlNvY2tldC5jb25uZWN0KCd3czovLzEyNy4wLjAuMTo0MDQwL3dzJyk7CiAqICAgICBzb2NrZXQuYWRkKCdIZWxsbywgV29ybGQhJyk7CiAqCiAqIENoZWNrIG91dCB0aGUKICogW3dlYnNvY2tldF9zYW1wbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvZGFydC1zYW1wbGVzL3RyZWUvbWFzdGVyL2h0bWw1L3dlYi93ZWJzb2NrZXRzL2Jhc2ljcykKICogYXBwLCB3aGljaCB1c2VzIFdlYlNvY2tldHMgdG8gY29tbXVuaWNhdGUgd2l0aCBhIHNlcnZlci4KICoKICogIyMgU29ja2V0IGFuZCBTZXJ2ZXJTb2NrZXQKICoKICogQ2xpZW50cyBhbmQgc2VydmVycyB1c2UgW1NvY2tldF1zIHRvIGNvbW11bmljYXRlIHVzaW5nIHRoZSBUQ1AgcHJvdG9jb2wuCiAqIFVzZSBbU2VydmVyU29ja2V0XSBvbiB0aGUgc2VydmVyIHNpZGUgYW5kIFtTb2NrZXRdIG9uIHRoZSBjbGllbnQuCiAqIFRoZSBzZXJ2ZXIgY3JlYXRlcyBhIGxpc3RlbmluZyBzb2NrZXQgdXNpbmcgdGhlIGBiaW5kKClgIG1ldGhvZCBhbmQKICogdGhlbiBsaXN0ZW5zIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucyBvbiB0aGUgc29ja2V0LiBGb3IgZXhhbXBsZToKICoKICogICAgIFNlcnZlclNvY2tldC5iaW5kKCcxMjcuMC4wLjEnLCA0MDQxKQogKiAgICAgICAudGhlbigoc2VydmVyU29ja2V0KSB7CiAqICAgICAgICAgc2VydmVyU29ja2V0Lmxpc3Rlbigoc29ja2V0KSB7CiAqICAgICAgICAgICBzb2NrZXQudHJhbnNmb3JtKHV0ZjguZGVjb2RlcikubGlzdGVuKHByaW50KTsKICogICAgICAgICB9KTsKICogICAgICAgfSk7CiAqCiAqIEEgY2xpZW50IGNvbm5lY3RzIGEgU29ja2V0IHVzaW5nIHRoZSBgY29ubmVjdCgpYCBtZXRob2QsCiAqIHdoaWNoIHJldHVybnMgYSBGdXR1cmUuCiAqIFVzaW5nIGB3cml0ZSgpYCwgYHdyaXRlbG4oKWAsIG9yIGB3cml0ZUFsbCgpYCBhcmUgdGhlIGVhc2llc3Qgd2F5cyB0bwogKiBzZW5kIGRhdGEgb3ZlciB0aGUgc29ja2V0LgogKiBGb3IgZXhhbXBsZToKICoKICogICAgIFNvY2tldC5jb25uZWN0KCcxMjcuMC4wLjEnLCA0MDQxKS50aGVuKChzb2NrZXQpIHsKICogICAgICAgc29ja2V0LndyaXRlKCdIZWxsbywgV29ybGQhJyk7CiAqICAgICB9KTsKICoKICogQmVzaWRlcyBbU29ja2V0XSBhbmQgW1NlcnZlclNvY2tldF0sIHRoZSBbUmF3U29ja2V0XSBhbmQKICogW1Jhd1NlcnZlclNvY2tldF0gY2xhc3NlcyBhcmUgYXZhaWxhYmxlIGZvciBsb3dlci1sZXZlbCBhY2Nlc3MKICogdG8gYXN5bmMgc29ja2V0IElPLgogKgogKiAjIyBTdGFuZGFyZCBvdXRwdXQsIGVycm9yLCBhbmQgaW5wdXQgc3RyZWFtcwogKgogKiBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgdGhlIHN0YW5kYXJkIG91dHB1dCwgZXJyb3IsIGFuZCBpbnB1dAogKiBzdHJlYW1zLCBuYW1lZCAnc3Rkb3V0JywgJ3N0ZGVycicsIGFuZCAnc3RkaW4nLCByZXNwZWN0aXZlbHkuCiAqCiAqIFRoZSBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zIGFyZSBib3RoIFtJT1NpbmtdcyBhbmQgaGF2ZSB0aGUgc2FtZSBzZXQKICogb2YgbWV0aG9kcyBhbmQgcHJvcGVydGllcy4KICoKICogVG8gd3JpdGUgYSBzdHJpbmcgdG8gJ3N0ZG91dCc6CiAqCiAqICAgICBzdGRvdXQud3JpdGVsbignSGVsbG8sIFdvcmxkIScpOwogKgogKiBUbyB3cml0ZSBhIGxpc3Qgb2Ygb2JqZWN0cyB0byAnc3RkZXJyJzoKICoKICogICAgIHN0ZGVyci53cml0ZUFsbChbICdUaGF0ICcsICdpcyAnLCAnYW4gJywgJ2Vycm9yLicsICdcbiddKTsKICoKICogVGhlIHN0YW5kYXJkIGlucHV0IHN0cmVhbSBpcyBhIHRydWUgW1N0cmVhbV0sIHNvIGl0IGluaGVyaXRzCiAqIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgZnJvbSB0aGUgU3RyZWFtIGNsYXNzLgogKgogKiBUbyByZWFkIHRleHQgc3luY2hyb25vdXNseSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKICogKHRoZSBwcm9ncmFtIGJsb2NrcyB3YWl0aW5nIGZvciB1c2VyIHRvIHR5cGUgaW5mb3JtYXRpb24pOgogKgogKiAgICAgIFN0cmluZyBpbnB1dFRleHQgPSBzdGRpbi5yZWFkTGluZVN5bmMoKTsKICoKICoge0BjYXRlZ29yeSBWTX0KICovCmxpYnJhcnkgZGFydC5pbzsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDpfaW50ZXJuYWwnIGhpZGUgU3ltYm9sOwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicKICAgIHNob3cgSGFzaE1hcCwgSGFzaFNldCwgUXVldWUsIExpc3RRdWV1ZSwgTWFwQmFzZSwgVW5tb2RpZmlhYmxlTWFwVmlldzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6ZGV2ZWxvcGVyJyBoaWRlIGxvZzsKaW1wb3J0ICdkYXJ0Omlzb2xhdGUnOwppbXBvcnQgJ2RhcnQ6bWF0aCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmV4cG9ydCAnZGFydDpfaHR0cCc7CmV4cG9ydCAnZGFydDpfaW50ZXJuYWwnIHNob3cgSHR0cFN0YXR1czsKCnBhcnQgJ2J5dGVzX2J1aWxkZXIuZGFydCc7CnBhcnQgJ2NvbW1vbi5kYXJ0JzsKcGFydCAnZGF0YV90cmFuc2Zvcm1lci5kYXJ0JzsKcGFydCAnZGlyZWN0b3J5LmRhcnQnOwpwYXJ0ICdkaXJlY3RvcnlfaW1wbC5kYXJ0JzsKcGFydCAnZW1iZWRkZXJfY29uZmlnLmRhcnQnOwpwYXJ0ICdldmVudGhhbmRsZXIuZGFydCc7CnBhcnQgJ2ZpbGUuZGFydCc7CnBhcnQgJ2ZpbGVfaW1wbC5kYXJ0JzsKcGFydCAnZmlsZV9zeXN0ZW1fZW50aXR5LmRhcnQnOwpwYXJ0ICdpb19yZXNvdXJjZV9pbmZvLmRhcnQnOwpwYXJ0ICdpb19zaW5rLmRhcnQnOwpwYXJ0ICdpb19zZXJ2aWNlLmRhcnQnOwpwYXJ0ICdsaW5rLmRhcnQnOwpwYXJ0ICduYW1lc3BhY2VfaW1wbC5kYXJ0JzsKcGFydCAnb3ZlcnJpZGVzLmRhcnQnOwpwYXJ0ICdwbGF0Zm9ybS5kYXJ0JzsKcGFydCAncGxhdGZvcm1faW1wbC5kYXJ0JzsKcGFydCAncHJvY2Vzcy5kYXJ0JzsKcGFydCAnc2VjdXJlX3NlcnZlcl9zb2NrZXQuZGFydCc7CnBhcnQgJ3NlY3VyZV9zb2NrZXQuZGFydCc7CnBhcnQgJ3NlY3VyaXR5X2NvbnRleHQuZGFydCc7CnBhcnQgJ3NlcnZpY2Vfb2JqZWN0LmRhcnQnOwpwYXJ0ICdzb2NrZXQuZGFydCc7CnBhcnQgJ3N0ZGlvLmRhcnQnOwpwYXJ0ICdzdHJpbmdfdHJhbnNmb3JtZXIuZGFydCc7CnBhcnQgJ3N5bmNfc29ja2V0LmRhcnQnOwqA5QBOTjwBBEcDRUoUAzw7QD8iNAMsAxkDQDwDIANEQANGNAMtSQNCKwMXAzw6SwMkMzI6KQM7FiwSMAsLAyADLTYDPyBEOB9KPgMOAzoXSxoDOysrJwsDTU5PSE0VAxlPKwMQA0xNA0pUGkA4QBMDG0AxKEMnDQ04A0UwQhADRyQDEWk8Ax4DTEVHRQMsICo7Dw0DPBtJHhADOSgLAzxCFwMwAz9BA0oeAyIDKAMrA0IDQDEDND4DMQMSBBEBFSUZSxciFxQaARUpARsUHhccHRoSFyAeFRgSHBcWGxUiGx4cFBMgGQEHZGFydDppbzRvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL2RpcmVjdG9yeV9wYXRjaC5kYXJ0iS4vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIF9EaXJlY3RvcnkgewogIEBwYXRjaAogIHN0YXRpYyBfY3VycmVudChfTmFtZXNwYWNlIG5hbWVzcGFjZSkgbmF0aXZlICJEaXJlY3RvcnlfQ3VycmVudCI7CiAgQHBhdGNoCiAgc3RhdGljIF9zZXRDdXJyZW50KF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJEaXJlY3RvcnlfU2V0Q3VycmVudCI7CiAgQHBhdGNoCiAgc3RhdGljIF9jcmVhdGVUZW1wKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJEaXJlY3RvcnlfQ3JlYXRlVGVtcCI7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfc3lzdGVtVGVtcChfTmFtZXNwYWNlIG5hbWVzcGFjZSkgbmF0aXZlICJEaXJlY3RvcnlfU3lzdGVtVGVtcCI7CiAgQHBhdGNoCiAgc3RhdGljIF9leGlzdHMoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkRpcmVjdG9yeV9FeGlzdHMiOwogIEBwYXRjaAogIHN0YXRpYyBfY3JlYXRlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJEaXJlY3RvcnlfQ3JlYXRlIjsKICBAcGF0Y2gKICBzdGF0aWMgX2RlbGV0ZU5hdGl2ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGJvb2wgcmVjdXJzaXZlKQogICAgICBuYXRpdmUgIkRpcmVjdG9yeV9EZWxldGUiOwogIEBwYXRjaAogIHN0YXRpYyBfcmVuYW1lKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgU3RyaW5nIG5ld1BhdGgpCiAgICAgIG5hdGl2ZSAiRGlyZWN0b3J5X1JlbmFtZSI7CiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX2ZpbGxXaXRoRGlyZWN0b3J5TGlzdGluZygKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsCiAgICAgIExpc3Q8RmlsZVN5c3RlbUVudGl0eT4gbGlzdCwKICAgICAgVWludDhMaXN0IHJhd1BhdGgsCiAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAgICBib29sIGZvbGxvd0xpbmtzKSBuYXRpdmUgIkRpcmVjdG9yeV9GaWxsV2l0aERpcmVjdG9yeUxpc3RpbmciOwp9CgpAcGF0Y2gKY2xhc3MgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzIHsKICBAcGF0Y2gKICBmYWN0b3J5IF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wcyhpbnQgcG9pbnRlcikgPT4KICAgICAgbmV3IF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wc0ltcGwocG9pbnRlcik7Cn0KCmNsYXNzIF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wc0ltcGwgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEKICAgIGltcGxlbWVudHMgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzIHsKICBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHNJbXBsLl8oKTsKCiAgZmFjdG9yeSBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHNJbXBsKGludCBwb2ludGVyKSA9PgogICAgICBuZXcgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzSW1wbC5fKCkuLl9zZXRQb2ludGVyKHBvaW50ZXIpOwoKICB2b2lkIF9zZXRQb2ludGVyKGludCBwb2ludGVyKQogICAgICBuYXRpdmUgIkRpcmVjdG9yeV9TZXRBc3luY0RpcmVjdG9yeUxpc3RlclBvaW50ZXIiOwogIGludCBnZXRQb2ludGVyKCkgbmF0aXZlICJEaXJlY3RvcnlfR2V0QXN5bmNEaXJlY3RvcnlMaXN0ZXJQb2ludGVyIjsKfQoKLy8gQ29yZWxpYiAnVXJpLmJhc2UnIGltcGxlbWVudGF0aW9uLgovLyBVcmkuYmFzZSBpcyBzdXNjZXB0aWJsZSB0byBjaGFuZ2VzIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgpVcmkgX3VyaUJhc2VDbG9zdXJlKCkgewogIHZhciByZXN1bHQgPSBfRGlyZWN0b3J5Ll9jdXJyZW50KF9OYW1lc3BhY2UuX25hbWVzcGFjZSk7CiAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAiR2V0dGluZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZhaWxlZCIsICIiLCByZXN1bHQpOwogIH0KICByZXR1cm4gbmV3IFVyaS5kaXJlY3RvcnkocmVzdWx0KTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCl9nZXRVcmlCYXNlQ2xvc3VyZSgpID0+IF91cmlCYXNlQ2xvc3VyZTsKSQBOTjwBIAEHEwlECT4lCT4lCVEJOiEJOiEJUCEJSiEJKRwjGRZFAgEHIQkzMQIBRCokATdCASA5RgIBJkgYOxsjQQQkAgEiKQEiZGFydDppby1wYXRjaC9kaXJlY3RvcnlfcGF0Y2guZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL2ZpbGVfcGF0Y2guZGFydLPZLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBfRmlsZSB7CiAgQHBhdGNoCiAgc3RhdGljIF9leGlzdHMoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKSBuYXRpdmUgIkZpbGVfRXhpc3RzIjsKICBAcGF0Y2gKICBzdGF0aWMgX2NyZWF0ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpIG5hdGl2ZSAiRmlsZV9DcmVhdGUiOwogIEBwYXRjaAogIHN0YXRpYyBfY3JlYXRlTGluayhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIFN0cmluZyB0YXJnZXQpCiAgICAgIG5hdGl2ZSAiRmlsZV9DcmVhdGVMaW5rIjsKICBAcGF0Y2gKICBzdGF0aWMgX2xpbmtUYXJnZXQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkZpbGVfTGlua1RhcmdldCI7CiAgQHBhdGNoCiAgc3RhdGljIF9kZWxldGVOYXRpdmUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkZpbGVfRGVsZXRlIjsKICBAcGF0Y2gKICBzdGF0aWMgX2RlbGV0ZUxpbmtOYXRpdmUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkZpbGVfRGVsZXRlTGluayI7CiAgQHBhdGNoCiAgc3RhdGljIF9yZW5hbWUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBvbGRQYXRoLCBTdHJpbmcgbmV3UGF0aCkKICAgICAgbmF0aXZlICJGaWxlX1JlbmFtZSI7CiAgQHBhdGNoCiAgc3RhdGljIF9yZW5hbWVMaW5rKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3Qgb2xkUGF0aCwgU3RyaW5nIG5ld1BhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9SZW5hbWVMaW5rIjsKICBAcGF0Y2gKICBzdGF0aWMgX2NvcHkoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBvbGRQYXRoLCBTdHJpbmcgbmV3UGF0aCkKICAgICAgbmF0aXZlICJGaWxlX0NvcHkiOwogIEBwYXRjaAogIHN0YXRpYyBfbGVuZ3RoRnJvbVBhdGgoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkZpbGVfTGVuZ3RoRnJvbVBhdGgiOwogIEBwYXRjaAogIHN0YXRpYyBfbGFzdE1vZGlmaWVkKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJGaWxlX0xhc3RNb2RpZmllZCI7CiAgQHBhdGNoCiAgc3RhdGljIF9zZXRMYXN0TW9kaWZpZWQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBpbnQgbWlsbGlzKQogICAgICBuYXRpdmUgIkZpbGVfU2V0TGFzdE1vZGlmaWVkIjsKICBAcGF0Y2gKICBzdGF0aWMgX2xhc3RBY2Nlc3NlZChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9MYXN0QWNjZXNzZWQiOwogIEBwYXRjaAogIHN0YXRpYyBfc2V0TGFzdEFjY2Vzc2VkKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgaW50IG1pbGxpcykKICAgICAgbmF0aXZlICJGaWxlX1NldExhc3RBY2Nlc3NlZCI7CiAgQHBhdGNoCiAgc3RhdGljIF9vcGVuKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgaW50IG1vZGUpCiAgICAgIG5hdGl2ZSAiRmlsZV9PcGVuIjsKICBAcGF0Y2gKICBzdGF0aWMgaW50IF9vcGVuU3RkaW8oaW50IGZkKSBuYXRpdmUgIkZpbGVfT3BlblN0ZGlvIjsKfQoKQHBhdGNoCmNsYXNzIF9SYW5kb21BY2Nlc3NGaWxlT3BzIHsKICBAcGF0Y2gKICBmYWN0b3J5IF9SYW5kb21BY2Nlc3NGaWxlT3BzKGludCBwb2ludGVyKSA9PgogICAgICBuZXcgX1JhbmRvbUFjY2Vzc0ZpbGVPcHNJbXBsKHBvaW50ZXIpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9SYW5kb21BY2Nlc3NGaWxlT3BzSW1wbCBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMQogICAgaW1wbGVtZW50cyBfUmFuZG9tQWNjZXNzRmlsZU9wcyB7CiAgX1JhbmRvbUFjY2Vzc0ZpbGVPcHNJbXBsLl8oKTsKCiAgZmFjdG9yeSBfUmFuZG9tQWNjZXNzRmlsZU9wc0ltcGwoaW50IHBvaW50ZXIpID0+CiAgICAgIG5ldyBfUmFuZG9tQWNjZXNzRmlsZU9wc0ltcGwuXygpLi5fc2V0UG9pbnRlcihwb2ludGVyKTsKCiAgdm9pZCBfc2V0UG9pbnRlcihpbnQgcG9pbnRlcikgbmF0aXZlICJGaWxlX1NldFBvaW50ZXIiOwoKICBpbnQgZ2V0UG9pbnRlcigpIG5hdGl2ZSAiRmlsZV9HZXRQb2ludGVyIjsKICBpbnQgY2xvc2UoKSBuYXRpdmUgIkZpbGVfQ2xvc2UiOwogIHJlYWRCeXRlKCkgbmF0aXZlICJGaWxlX1JlYWRCeXRlIjsKICByZWFkKGludCBieXRlcykgbmF0aXZlICJGaWxlX1JlYWQiOwogIHJlYWRJbnRvKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkgbmF0aXZlICJGaWxlX1JlYWRJbnRvIjsKICB3cml0ZUJ5dGUoaW50IHZhbHVlKSBuYXRpdmUgIkZpbGVfV3JpdGVCeXRlIjsKICB3cml0ZUZyb20oTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IHN0YXJ0LCBpbnQgZW5kKSBuYXRpdmUgIkZpbGVfV3JpdGVGcm9tIjsKICBwb3NpdGlvbigpIG5hdGl2ZSAiRmlsZV9Qb3NpdGlvbiI7CiAgc2V0UG9zaXRpb24oaW50IHBvc2l0aW9uKSBuYXRpdmUgIkZpbGVfU2V0UG9zaXRpb24iOwogIHRydW5jYXRlKGludCBsZW5ndGgpIG5hdGl2ZSAiRmlsZV9UcnVuY2F0ZSI7CiAgbGVuZ3RoKCkgbmF0aXZlICJGaWxlX0xlbmd0aCI7CiAgZmx1c2goKSBuYXRpdmUgIkZpbGVfRmx1c2giOwogIGxvY2soaW50IGxvY2ssIGludCBzdGFydCwgaW50IGVuZCkgbmF0aXZlICJGaWxlX0xvY2siOwp9CgpjbGFzcyBfV2F0Y2hlclBhdGggewogIGZpbmFsIGludCBwYXRoSWQ7CiAgZmluYWwgU3RyaW5nIHBhdGg7CiAgZmluYWwgaW50IGV2ZW50czsKICBpbnQgY291bnQgPSAwOwogIF9XYXRjaGVyUGF0aCh0aGlzLnBhdGhJZCwgdGhpcy5wYXRoLCB0aGlzLmV2ZW50cyk7Cn0KCkBwYXRjaApjbGFzcyBfRmlsZVN5c3RlbVdhdGNoZXIgewogIHZvaWQgX3BhdGhXYXRjaGVkRW5kKCk7CgogIHN0YXRpYyBpbnQgX2lkOwogIHN0YXRpYyBmaW5hbCBNYXA8aW50LCBfV2F0Y2hlclBhdGg+IF9pZE1hcCA9IHt9OwoKICBmaW5hbCBTdHJpbmcgX3BhdGg7CiAgZmluYWwgaW50IF9ldmVudHM7CiAgZmluYWwgYm9vbCBfcmVjdXJzaXZlOwoKICBfV2F0Y2hlclBhdGggX3dhdGNoZXJQYXRoOwoKICBTdHJlYW1Db250cm9sbGVyPEZpbGVTeXN0ZW1FdmVudD4gX2Jyb2FkY2FzdENvbnRyb2xsZXI7CgogIEBwYXRjaAogIHN0YXRpYyBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiBfd2F0Y2goCiAgICAgIFN0cmluZyBwYXRoLCBpbnQgZXZlbnRzLCBib29sIHJlY3Vyc2l2ZSkgewogICAgaWYgKFBsYXRmb3JtLmlzTGludXgpIHsKICAgICAgcmV0dXJuIG5ldyBfSW5vdGlmeUZpbGVTeXN0ZW1XYXRjaGVyKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKS5fc3RyZWFtOwogICAgfQogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICByZXR1cm4gbmV3IF9XaW4zMkZpbGVTeXN0ZW1XYXRjaGVyKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKS5fc3RyZWFtOwogICAgfQogICAgaWYgKFBsYXRmb3JtLmlzTWFjT1MpIHsKICAgICAgcmV0dXJuIG5ldyBfRlNFdmVudFN0cmVhbUZpbGVTeXN0ZW1XYXRjaGVyKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKQogICAgICAgICAgLl9zdHJlYW07CiAgICB9CiAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAiRmlsZSBzeXN0ZW0gd2F0Y2hpbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7CiAgfQoKICBfRmlsZVN5c3RlbVdhdGNoZXIuXyh0aGlzLl9wYXRoLCB0aGlzLl9ldmVudHMsIHRoaXMuX3JlY3Vyc2l2ZSkgewogICAgaWYgKCFpc1N1cHBvcnRlZCkgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJGaWxlIHN5c3RlbSB3YXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iLCBfcGF0aCk7CiAgICB9CiAgICBfYnJvYWRjYXN0Q29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEZpbGVTeXN0ZW1FdmVudD4uYnJvYWRjYXN0KAogICAgICAgIG9uTGlzdGVuOiBfbGlzdGVuLCBvbkNhbmNlbDogX2NhbmNlbCk7CiAgfQoKICBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiBnZXQgX3N0cmVhbSA9PiBfYnJvYWRjYXN0Q29udHJvbGxlci5zdHJlYW07CgogIHZvaWQgX2xpc3RlbigpIHsKICAgIGlmIChfaWQgPT0gbnVsbCkgewogICAgICB0cnkgewogICAgICAgIF9pZCA9IF9pbml0V2F0Y2hlcigpOwogICAgICAgIF9uZXdXYXRjaGVyKCk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBfYnJvYWRjYXN0Q29udHJvbGxlci5hZGRFcnJvcihuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICAgIkZhaWxlZCB0byBpbml0aWFsaXplIGZpbGUgc3lzdGVtIGVudGl0eSB3YXRjaGVyIiwgbnVsbCwgZSkpOwogICAgICAgIF9icm9hZGNhc3RDb250cm9sbGVyLmNsb3NlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICB2YXIgcGF0aElkOwogICAgdHJ5IHsKICAgICAgcGF0aElkID0KICAgICAgICAgIF93YXRjaFBhdGgoX2lkLCBfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9wYXRoLCBfZXZlbnRzLCBfcmVjdXJzaXZlKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgX2Jyb2FkY2FzdENvbnRyb2xsZXIKICAgICAgICAgIC5hZGRFcnJvcihuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiRmFpbGVkIHRvIHdhdGNoIHBhdGgiLCBfcGF0aCwgZSkpOwogICAgICBfYnJvYWRjYXN0Q29udHJvbGxlci5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIV9pZE1hcC5jb250YWluc0tleShwYXRoSWQpKSB7CiAgICAgIF9pZE1hcFtwYXRoSWRdID0gbmV3IF9XYXRjaGVyUGF0aChwYXRoSWQsIF9wYXRoLCBfZXZlbnRzKTsKICAgIH0KICAgIF93YXRjaGVyUGF0aCA9IF9pZE1hcFtwYXRoSWRdOwogICAgX3dhdGNoZXJQYXRoLmNvdW50Kys7CiAgICBfcGF0aFdhdGNoZWQoKS5waXBlKF9icm9hZGNhc3RDb250cm9sbGVyKTsKICB9CgogIHZvaWQgX2NhbmNlbCgpIHsKICAgIGlmIChfd2F0Y2hlclBhdGggIT0gbnVsbCkgewogICAgICBhc3NlcnQoX3dhdGNoZXJQYXRoLmNvdW50ID4gMCk7CiAgICAgIF93YXRjaGVyUGF0aC5jb3VudC0tOwogICAgICBpZiAoX3dhdGNoZXJQYXRoLmNvdW50ID09IDApIHsKICAgICAgICBfdW53YXRjaFBhdGgoX2lkLCBfd2F0Y2hlclBhdGgucGF0aElkKTsKICAgICAgICBfcGF0aFdhdGNoZWRFbmQoKTsKICAgICAgICBfaWRNYXAucmVtb3ZlKF93YXRjaGVyUGF0aC5wYXRoSWQpOwogICAgICB9CiAgICAgIF93YXRjaGVyUGF0aCA9IG51bGw7CiAgICB9CiAgICBpZiAoX2lkTWFwLmlzRW1wdHkgJiYgX2lkICE9IG51bGwpIHsKICAgICAgX2Nsb3NlV2F0Y2hlcihfaWQpOwogICAgICBfZG9uZVdhdGNoZXIoKTsKICAgICAgX2lkID0gbnVsbDsKICAgIH0KICB9CgogIC8vIENhbGxlZCB3aGVuIChhbmQgYWZ0ZXIpIGEgbmV3IHdhdGNoZXIgaW5zdGFuY2UgaXMgY3JlYXRlZCBhbmQgYXZhaWxhYmxlLgogIHZvaWQgX25ld1dhdGNoZXIoKSB7fQogIC8vIENhbGxlZCB3aGVuIGEgd2F0Y2hlciBpcyBubyBsb25nZXIgbmVlZGVkLgogIHZvaWQgX2RvbmVXYXRjaGVyKCkge30KICAvLyBDYWxsZWQgd2hlbiBhIG5ldyBwYXRoIGlzIGJlaW5nIHdhdGNoZWQuCiAgU3RyZWFtIF9wYXRoV2F0Y2hlZCgpIHt9CiAgLy8gQ2FsbGVkIHdoZW4gYSBwYXRoIGlzIG5vIGxvbmdlciBiZWluZyB3YXRjaGVkLgogIHZvaWQgX2RvbmVQYXRoV2F0Y2hlZCgpIHt9CgogIHN0YXRpYyBfV2F0Y2hlclBhdGggX3BhdGhGcm9tUGF0aElkKGludCBwYXRoSWQpIHsKICAgIHJldHVybiBfaWRNYXBbcGF0aElkXTsKICB9CgogIHN0YXRpYyBTdHJlYW0gX2xpc3Rlbk9uU29ja2V0KGludCBzb2NrZXRJZCwgaW50IGlkLCBpbnQgcGF0aElkKSB7CiAgICB2YXIgbmF0aXZlID0gbmV3IF9OYXRpdmVTb2NrZXQud2F0Y2goc29ja2V0SWQpOwogICAgdmFyIHNvY2tldCA9IG5ldyBfUmF3U29ja2V0KG5hdGl2ZSk7CiAgICByZXR1cm4gc29ja2V0LmV4cGFuZCgoZXZlbnQpIHsKICAgICAgdmFyIHN0b3BzID0gW107CiAgICAgIHZhciBldmVudHMgPSBbXTsKICAgICAgdmFyIHBhaXIgPSB7fTsKICAgICAgaWYgKGV2ZW50ID09IFJhd1NvY2tldEV2ZW50LnJlYWQpIHsKICAgICAgICBTdHJpbmcgZ2V0UGF0aChldmVudCkgewogICAgICAgICAgdmFyIHBhdGggPSBfcGF0aEZyb21QYXRoSWQoZXZlbnRbNF0pLnBhdGg7CiAgICAgICAgICBpZiAoZXZlbnRbMl0gIT0gbnVsbCAmJiBldmVudFsyXS5pc05vdEVtcHR5KSB7CiAgICAgICAgICAgIHBhdGggKz0gUGxhdGZvcm0ucGF0aFNlcGFyYXRvcjsKICAgICAgICAgICAgcGF0aCArPSBldmVudFsyXTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwYXRoOwogICAgICAgIH0KCiAgICAgICAgYm9vbCBnZXRJc0RpcihldmVudCkgewogICAgICAgICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICAgICAgICAvLyBXaW5kb3dzIGRvZXMgbm90IGdldCAnaXNEaXInIGFzIHBhcnQgb2YgdGhlIGV2ZW50LgogICAgICAgICAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eS5pc0RpcmVjdG9yeVN5bmMoZ2V0UGF0aChldmVudCkpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIChldmVudFswXSAmIEZpbGVTeXN0ZW1FdmVudC5faXNEaXIpICE9IDA7CiAgICAgICAgfQoKICAgICAgICB2b2lkIGFkZChpZCwgZXZlbnQpIHsKICAgICAgICAgIGlmICgoZXZlbnQudHlwZSAmIF9wYXRoRnJvbVBhdGhJZChpZCkuZXZlbnRzKSA9PSAwKSByZXR1cm47CiAgICAgICAgICBldmVudHMuYWRkKFtpZCwgZXZlbnRdKTsKICAgICAgICB9CgogICAgICAgIHZvaWQgcmV3cml0ZU1vdmUoZXZlbnQsIGlzRGlyKSB7CiAgICAgICAgICBpZiAoZXZlbnRbM10pIHsKICAgICAgICAgICAgYWRkKGV2ZW50WzRdLCBuZXcgRmlsZVN5c3RlbUNyZWF0ZUV2ZW50Ll8oZ2V0UGF0aChldmVudCksIGlzRGlyKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhZGQoZXZlbnRbNF0sIG5ldyBGaWxlU3lzdGVtRGVsZXRlRXZlbnQuXyhnZXRQYXRoKGV2ZW50KSwgaXNEaXIpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGludCBldmVudENvdW50OwogICAgICAgIGRvIHsKICAgICAgICAgIGV2ZW50Q291bnQgPSAwOwogICAgICAgICAgZm9yICh2YXIgZXZlbnQgaW4gX3JlYWRFdmVudHMoaWQsIHBhdGhJZCkpIHsKICAgICAgICAgICAgaWYgKGV2ZW50ID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgICBldmVudENvdW50Kys7CiAgICAgICAgICAgIGludCBwYXRoSWQgPSBldmVudFs0XTsKICAgICAgICAgICAgaWYgKCFfaWRNYXAuY29udGFpbnNLZXkocGF0aElkKSkgewogICAgICAgICAgICAgIC8vIFBhdGggaXMgbm8gbG9uZ2VyIGJlaW5nIHdhdGhlZC4KICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBib29sIGlzRGlyID0gZ2V0SXNEaXIoZXZlbnQpOwogICAgICAgICAgICB2YXIgcGF0aCA9IGdldFBhdGgoZXZlbnQpOwogICAgICAgICAgICBpZiAoKGV2ZW50WzBdICYgRmlsZVN5c3RlbUV2ZW50LmNyZWF0ZSkgIT0gMCkgewogICAgICAgICAgICAgIGFkZChldmVudFs0XSwgbmV3IEZpbGVTeXN0ZW1DcmVhdGVFdmVudC5fKHBhdGgsIGlzRGlyKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKChldmVudFswXSAmIEZpbGVTeXN0ZW1FdmVudC5tb2RpZnkpICE9IDApIHsKICAgICAgICAgICAgICBhZGQoZXZlbnRbNF0sIG5ldyBGaWxlU3lzdGVtTW9kaWZ5RXZlbnQuXyhwYXRoLCBpc0RpciwgdHJ1ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgoZXZlbnRbMF0gJiBGaWxlU3lzdGVtRXZlbnQuX21vZGlmeUF0dHJpYnV0ZXMpICE9IDApIHsKICAgICAgICAgICAgICBhZGQoZXZlbnRbNF0sIG5ldyBGaWxlU3lzdGVtTW9kaWZ5RXZlbnQuXyhwYXRoLCBpc0RpciwgZmFsc2UpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoKGV2ZW50WzBdICYgRmlsZVN5c3RlbUV2ZW50Lm1vdmUpICE9IDApIHsKICAgICAgICAgICAgICBpbnQgbGluayA9IGV2ZW50WzFdOwogICAgICAgICAgICAgIGlmIChsaW5rID4gMCkgewogICAgICAgICAgICAgICAgcGFpci5wdXRJZkFic2VudChwYXRoSWQsICgpID0+IHt9KTsKICAgICAgICAgICAgICAgIGlmIChwYWlyW3BhdGhJZF0uY29udGFpbnNLZXkobGluaykpIHsKICAgICAgICAgICAgICAgICAgYWRkKAogICAgICAgICAgICAgICAgICAgICAgZXZlbnRbNF0sCiAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZVN5c3RlbU1vdmVFdmVudC5fKAogICAgICAgICAgICAgICAgICAgICAgICAgIGdldFBhdGgocGFpcltwYXRoSWRdW2xpbmtdKSwgaXNEaXIsIHBhdGgpKTsKICAgICAgICAgICAgICAgICAgcGFpcltwYXRoSWRdLnJlbW92ZShsaW5rKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHBhaXJbcGF0aElkXVtsaW5rXSA9IGV2ZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXdyaXRlTW92ZShldmVudCwgaXNEaXIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoKGV2ZW50WzBdICYgRmlsZVN5c3RlbUV2ZW50LmRlbGV0ZSkgIT0gMCkgewogICAgICAgICAgICAgIGFkZChldmVudFs0XSwgbmV3IEZpbGVTeXN0ZW1EZWxldGVFdmVudC5fKHBhdGgsIGlzRGlyKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKChldmVudFswXSAmIEZpbGVTeXN0ZW1FdmVudC5fZGVsZXRlU2VsZikgIT0gMCkgewogICAgICAgICAgICAgIGFkZChldmVudFs0XSwgbmV3IEZpbGVTeXN0ZW1EZWxldGVFdmVudC5fKHBhdGgsIGlzRGlyKSk7CiAgICAgICAgICAgICAgLy8gU2lnbmFsIGRvbmUgZXZlbnQuCiAgICAgICAgICAgICAgc3RvcHMuYWRkKFtldmVudFs0XSwgbnVsbF0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoZXZlbnRDb3VudCA+IDApOwogICAgICAgIC8vIEJlIHN1cmUgdG8gY2xlYXIgdGhpcyBtYW51YWxseSwgYXMgdGhlIHNvY2tldHMgYXJlIG5vdCByZWFkIHRocm91Z2gKICAgICAgICAvLyB0aGUgX05hdGl2ZVNvY2tldCBpbnRlcmZhY2UuCiAgICAgICAgbmF0aXZlLmF2YWlsYWJsZSA9IDA7CiAgICAgICAgZm9yICh2YXIgbWFwIGluIHBhaXIudmFsdWVzKSB7CiAgICAgICAgICBmb3IgKHZhciBldmVudCBpbiBtYXAudmFsdWVzKSB7CiAgICAgICAgICAgIHJld3JpdGVNb3ZlKGV2ZW50LCBnZXRJc0RpcihldmVudCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBSYXdTb2NrZXRFdmVudC5jbG9zZWQpIHsKICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkKSB7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgfQogICAgICBldmVudHMuYWRkQWxsKHN0b3BzKTsKICAgICAgcmV0dXJuIGV2ZW50czsKICAgIH0pOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGJvb2wgZ2V0IGlzU3VwcG9ydGVkIG5hdGl2ZSAiRmlsZVN5c3RlbVdhdGNoZXJfSXNTdXBwb3J0ZWQiOwoKICBzdGF0aWMgaW50IF9pbml0V2F0Y2hlcigpIG5hdGl2ZSAiRmlsZVN5c3RlbVdhdGNoZXJfSW5pdFdhdGNoZXIiOwogIHN0YXRpYyB2b2lkIF9jbG9zZVdhdGNoZXIoaW50IGlkKSBuYXRpdmUgIkZpbGVTeXN0ZW1XYXRjaGVyX0Nsb3NlV2F0Y2hlciI7CgogIHN0YXRpYyBpbnQgX3dhdGNoUGF0aChpbnQgaWQsIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBTdHJpbmcgcGF0aCwgaW50IGV2ZW50cywKICAgICAgYm9vbCByZWN1cnNpdmUpIG5hdGl2ZSAiRmlsZVN5c3RlbVdhdGNoZXJfV2F0Y2hQYXRoIjsKICBzdGF0aWMgdm9pZCBfdW53YXRjaFBhdGgoaW50IGlkLCBpbnQgcGF0aF9pZCkKICAgICAgbmF0aXZlICJGaWxlU3lzdGVtV2F0Y2hlcl9VbndhdGNoUGF0aCI7CiAgc3RhdGljIExpc3QgX3JlYWRFdmVudHMoaW50IGlkLCBpbnQgcGF0aF9pZCkKICAgICAgbmF0aXZlICJGaWxlU3lzdGVtV2F0Y2hlcl9SZWFkRXZlbnRzIjsKICBzdGF0aWMgaW50IF9nZXRTb2NrZXRJZChpbnQgaWQsIGludCBwYXRoX2lkKQogICAgICBuYXRpdmUgIkZpbGVTeXN0ZW1XYXRjaGVyX0dldFNvY2tldElkIjsKfQoKY2xhc3MgX0lub3RpZnlGaWxlU3lzdGVtV2F0Y2hlciBleHRlbmRzIF9GaWxlU3lzdGVtV2F0Y2hlciB7CiAgc3RhdGljIGZpbmFsIE1hcDxpbnQsIFN0cmVhbUNvbnRyb2xsZXI+IF9pZE1hcCA9IHt9OwogIHN0YXRpYyBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKCiAgX0lub3RpZnlGaWxlU3lzdGVtV2F0Y2hlcihwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSkKICAgICAgOiBzdXBlci5fKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKCiAgdm9pZCBfbmV3V2F0Y2hlcigpIHsKICAgIGludCBpZCA9IF9GaWxlU3lzdGVtV2F0Y2hlci5faWQ7CiAgICBfc3Vic2NyaXB0aW9uID0KICAgICAgICBfRmlsZVN5c3RlbVdhdGNoZXIuX2xpc3Rlbk9uU29ja2V0KGlkLCBpZCwgMCkubGlzdGVuKChldmVudCkgewogICAgICBpZiAoX2lkTWFwLmNvbnRhaW5zS2V5KGV2ZW50WzBdKSkgewogICAgICAgIGlmIChldmVudFsxXSAhPSBudWxsKSB7CiAgICAgICAgICBfaWRNYXBbZXZlbnRbMF1dLmFkZChldmVudFsxXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9pZE1hcFtldmVudFswXV0uY2xvc2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBfZG9uZVdhdGNoZXIoKSB7CiAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogIH0KCiAgU3RyZWFtIF9wYXRoV2F0Y2hlZCgpIHsKICAgIHZhciBwYXRoSWQgPSBfd2F0Y2hlclBhdGgucGF0aElkOwogICAgaWYgKCFfaWRNYXAuY29udGFpbnNLZXkocGF0aElkKSkgewogICAgICBfaWRNYXBbcGF0aElkXSA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEZpbGVTeXN0ZW1FdmVudD4uYnJvYWRjYXN0KCk7CiAgICB9CiAgICByZXR1cm4gX2lkTWFwW3BhdGhJZF0uc3RyZWFtOwogIH0KCiAgdm9pZCBfcGF0aFdhdGNoZWRFbmQoKSB7CiAgICB2YXIgcGF0aElkID0gX3dhdGNoZXJQYXRoLnBhdGhJZDsKICAgIGlmICghX2lkTWFwLmNvbnRhaW5zS2V5KHBhdGhJZCkpIHJldHVybjsKICAgIF9pZE1hcFtwYXRoSWRdLmNsb3NlKCk7CiAgICBfaWRNYXAucmVtb3ZlKHBhdGhJZCk7CiAgfQp9CgpjbGFzcyBfV2luMzJGaWxlU3lzdGVtV2F0Y2hlciBleHRlbmRzIF9GaWxlU3lzdGVtV2F0Y2hlciB7CiAgU3RyZWFtU3Vic2NyaXB0aW9uIF9zdWJzY3JpcHRpb247CiAgU3RyZWFtQ29udHJvbGxlciBfY29udHJvbGxlcjsKCiAgX1dpbjMyRmlsZVN5c3RlbVdhdGNoZXIocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpCiAgICAgIDogc3VwZXIuXyhwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CgogIFN0cmVhbSBfcGF0aFdhdGNoZWQoKSB7CiAgICB2YXIgcGF0aElkID0gX3dhdGNoZXJQYXRoLnBhdGhJZDsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8RmlsZVN5c3RlbUV2ZW50PigpOwogICAgX3N1YnNjcmlwdGlvbiA9CiAgICAgICAgX0ZpbGVTeXN0ZW1XYXRjaGVyLl9saXN0ZW5PblNvY2tldChwYXRoSWQsIDAsIHBhdGhJZCkubGlzdGVuKChldmVudCkgewogICAgICBhc3NlcnQoZXZlbnRbMF0gPT0gcGF0aElkKTsKICAgICAgaWYgKGV2ZW50WzFdICE9IG51bGwpIHsKICAgICAgICBfY29udHJvbGxlci5hZGQoZXZlbnRbMV0pOwogICAgICB9IGVsc2UgewogICAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbTsKICB9CgogIHZvaWQgX3BhdGhXYXRjaGVkRW5kKCkgewogICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgfQp9CgpjbGFzcyBfRlNFdmVudFN0cmVhbUZpbGVTeXN0ZW1XYXRjaGVyIGV4dGVuZHMgX0ZpbGVTeXN0ZW1XYXRjaGVyIHsKICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKICBTdHJlYW1Db250cm9sbGVyIF9jb250cm9sbGVyOwoKICBfRlNFdmVudFN0cmVhbUZpbGVTeXN0ZW1XYXRjaGVyKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKQogICAgICA6IHN1cGVyLl8ocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwoKICBTdHJlYW0gX3BhdGhXYXRjaGVkKCkgewogICAgdmFyIHBhdGhJZCA9IF93YXRjaGVyUGF0aC5wYXRoSWQ7CiAgICB2YXIgc29ja2V0SWQgPSBfRmlsZVN5c3RlbVdhdGNoZXIuX2dldFNvY2tldElkKDAsIHBhdGhJZCk7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEZpbGVTeXN0ZW1FdmVudD4oKTsKICAgIF9zdWJzY3JpcHRpb24gPQogICAgICAgIF9GaWxlU3lzdGVtV2F0Y2hlci5fbGlzdGVuT25Tb2NrZXQoc29ja2V0SWQsIDAsIHBhdGhJZCkubGlzdGVuKChldmVudCkgewogICAgICBpZiAoZXZlbnRbMV0gIT0gbnVsbCkgewogICAgICAgIF9jb250cm9sbGVyLmFkZChldmVudFsxXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgdm9pZCBfcGF0aFdhdGNoZWRFbmQoKSB7CiAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpVaW50OExpc3QgX21ha2VVaW50OExpc3RWaWV3KFVpbnQ4TGlzdCBzb3VyY2UsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKSB7CiAgcmV0dXJuIG5ldyBVaW50OExpc3Qudmlldyhzb3VyY2UuYnVmZmVyLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwp9CoGnAE5OPAEgAQcOCVAJUAlNIAk+IAlAHAlEIAlKHAlOIAlIGglCJAlAIglPJQlAIglPJQlCGgk5AgEHHQkvLQIBGkAmIAEzPgE6AS0jJSZJMEslNy8hHzkCARUUFRQRNQIBBxsaARIzARYVGQEdAToBCSkxHE0GHksGHEoUBiNDBAFEGCVMBkwvBAFGARMXDB4XFD9KJhAIBhAKD04SG1AkDgYnQQYjGi8EARMgJhwlMBssCBsGKRoWEgYEAU4YMBkuGzQdATQbBAFENCkjFhcVKiA1OSweDBcKAR8kQkUMOwoBHkYjCgEpGk8TTwwKARgNGjcpGiMvMRgOKic8Rw48TQ5HTg46Ix40NhcgMUYtGS4SFysQDjxHDkFHJCsODCJPKB4nKjEMCjM3DxcIHBUIBAEJRgFETQFPPDAuLy0vLgIBPTcrATUqARclFEcqICoRJAoICAQBGBwEARomJ0oGIgQBGyYtHBsEAgE7JCABMyoBGiY7FE8iHiMPHQgIHwQBGxwZBAIBQyQgATsqARomPzsUUR4jDx0ICB8EARscGQQCASJQQwIBHWRhcnQ6aW8tcGF0Y2gvZmlsZV9wYXRjaC5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vZmlsdGVyX3BhdGNoLmRhcnSGri8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpjbGFzcyBfRmlsdGVySW1wbCBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSBpbXBsZW1lbnRzIFJhd1pMaWJGaWx0ZXIgewogIHZvaWQgcHJvY2VzcyhMaXN0PGludD4gZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kKSBuYXRpdmUgIkZpbHRlcl9Qcm9jZXNzIjsKCiAgTGlzdDxpbnQ+IHByb2Nlc3NlZCh7Ym9vbCBmbHVzaDogdHJ1ZSwgYm9vbCBlbmQ6IGZhbHNlfSkKICAgICAgbmF0aXZlICJGaWx0ZXJfUHJvY2Vzc2VkIjsKfQoKY2xhc3MgX1pMaWJJbmZsYXRlRmlsdGVyIGV4dGVuZHMgX0ZpbHRlckltcGwgewogIF9aTGliSW5mbGF0ZUZpbHRlcihpbnQgd2luZG93Qml0cywgTGlzdDxpbnQ+IGRpY3Rpb25hcnksIGJvb2wgcmF3KSB7CiAgICBfaW5pdCh3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5LCByYXcpOwogIH0KICB2b2lkIF9pbml0KGludCB3aW5kb3dCaXRzLCBMaXN0PGludD4gZGljdGlvbmFyeSwgYm9vbCByYXcpCiAgICAgIG5hdGl2ZSAiRmlsdGVyX0NyZWF0ZVpMaWJJbmZsYXRlIjsKfQoKY2xhc3MgX1pMaWJEZWZsYXRlRmlsdGVyIGV4dGVuZHMgX0ZpbHRlckltcGwgewogIF9aTGliRGVmbGF0ZUZpbHRlcihib29sIGd6aXAsIGludCBsZXZlbCwgaW50IHdpbmRvd0JpdHMsIGludCBtZW1MZXZlbCwKICAgICAgaW50IHN0cmF0ZWd5LCBMaXN0PGludD4gZGljdGlvbmFyeSwgYm9vbCByYXcpIHsKICAgIF9pbml0KGd6aXAsIGxldmVsLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksIGRpY3Rpb25hcnksIHJhdyk7CiAgfQogIHZvaWQgX2luaXQoYm9vbCBnemlwLCBpbnQgbGV2ZWwsIGludCB3aW5kb3dCaXRzLCBpbnQgbWVtTGV2ZWwsIGludCBzdHJhdGVneSwKICAgICAgTGlzdDxpbnQ+IGRpY3Rpb25hcnksIGJvb2wgcmF3KSBuYXRpdmUgIkZpbHRlcl9DcmVhdGVaTGliRGVmbGF0ZSI7Cn0KCkBwYXRjaApjbGFzcyBSYXdaTGliRmlsdGVyIHsKICBAcGF0Y2gKICBzdGF0aWMgUmF3WkxpYkZpbHRlciBfbWFrZVpMaWJEZWZsYXRlRmlsdGVyKAogICAgICAgICAgYm9vbCBnemlwLAogICAgICAgICAgaW50IGxldmVsLAogICAgICAgICAgaW50IHdpbmRvd0JpdHMsCiAgICAgICAgICBpbnQgbWVtTGV2ZWwsCiAgICAgICAgICBpbnQgc3RyYXRlZ3ksCiAgICAgICAgICBMaXN0PGludD4gZGljdGlvbmFyeSwKICAgICAgICAgIGJvb2wgcmF3KSA9PgogICAgICBuZXcgX1pMaWJEZWZsYXRlRmlsdGVyKAogICAgICAgICAgZ3ppcCwgbGV2ZWwsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwgZGljdGlvbmFyeSwgcmF3KTsKICBAcGF0Y2gKICBzdGF0aWMgUmF3WkxpYkZpbHRlciBfbWFrZVpMaWJJbmZsYXRlRmlsdGVyKAogICAgICAgICAgaW50IHdpbmRvd0JpdHMsIExpc3Q8aW50PiBkaWN0aW9uYXJ5LCBib29sIHJhdykgPT4KICAgICAgbmV3IF9aTGliSW5mbGF0ZUZpbHRlcih3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5LCByYXcpOwp9CjIATk48ASABTkwBOyECAS9HKAQ9KQIBL0k2SQRPSQIBBxYJLxUVGhgYIBceSQkvPTsCAR9kYXJ0OmlvLXBhdGNoL2ZpbHRlcl9wYXRjaC5kYXJ0NW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vaW9fc2VydmljZV9wYXRjaC5kYXJ0i30vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKY2xhc3MgX0lPU2VydmljZVBvcnRzIHsKICAvLyBXZSBsaW1pdCB0aGUgbnVtYmVyIG9mIElPIFNlcnZpY2UgcG9ydHMgcGVyIGlzb2xhdGUgc28gdGhhdCB3ZSBkb24ndAogIC8vIHNwYXduIHRvbyBtYW55IHRocmVhZHMgYWxsIGF0IG9uY2UsIHdoaWNoIGNhbiBjcmFzaCB0aGUgVk0gb24gV2luZG93cy4KICBzdGF0aWMgY29uc3QgaW50IG1heFBvcnRzID0gMzI7CiAgTGlzdDxTZW5kUG9ydD4gX3BvcnRzID0gPFNlbmRQb3J0PltdOwogIExpc3Q8U2VuZFBvcnQ+IF9mcmVlUG9ydHMgPSA8U2VuZFBvcnQ+W107CiAgTWFwPGludCwgU2VuZFBvcnQ+IF91c2VkUG9ydHMgPSBuZXcgSGFzaE1hcDxpbnQsIFNlbmRQb3J0PigpOwoKICBfSU9TZXJ2aWNlUG9ydHMoKTsKCiAgU2VuZFBvcnQgX2dldFBvcnQoaW50IGZvclJlcXVlc3RJZCkgewogICAgaWYgKF9mcmVlUG9ydHMuaXNFbXB0eSAmJiBfdXNlZFBvcnRzLmxlbmd0aCA8IG1heFBvcnRzKSB7CiAgICAgIGZpbmFsIFNlbmRQb3J0IHBvcnQgPSBfbmV3U2VydmljZVBvcnQoKTsKICAgICAgX3BvcnRzLmFkZChwb3J0KTsKICAgICAgX2ZyZWVQb3J0cy5hZGQocG9ydCk7CiAgICB9CiAgICBpZiAoIV9mcmVlUG9ydHMuaXNFbXB0eSkgewogICAgICBmaW5hbCBTZW5kUG9ydCBwb3J0ID0gX2ZyZWVQb3J0cy5yZW1vdmVMYXN0KCk7CiAgICAgIGFzc2VydCghX3VzZWRQb3J0cy5jb250YWluc0tleShmb3JSZXF1ZXN0SWQpKTsKICAgICAgX3VzZWRQb3J0c1tmb3JSZXF1ZXN0SWRdID0gcG9ydDsKICAgICAgcmV0dXJuIHBvcnQ7CiAgICB9CiAgICAvLyBXZSBoYXZlIGFscmVhZHkgYWxsb2NhdGVkIHRoZSBtYXggbnVtYmVyIG9mIHBvcnRzLiBSZS11c2UgYW4KICAgIC8vIGV4aXN0aW5nIG9uZS4KICAgIGZpbmFsIFNlbmRQb3J0IHBvcnQgPSBfcG9ydHNbZm9yUmVxdWVzdElkICUgbWF4UG9ydHNdOwogICAgX3VzZWRQb3J0c1tmb3JSZXF1ZXN0SWRdID0gcG9ydDsKICAgIHJldHVybiBwb3J0OwogIH0KCiAgdm9pZCBfcmV0dXJuUG9ydChpbnQgZm9yUmVxdWVzdElkKSB7CiAgICBmaW5hbCBTZW5kUG9ydCBwb3J0ID0gX3VzZWRQb3J0cy5yZW1vdmUoZm9yUmVxdWVzdElkKTsKICAgIGlmICghX3VzZWRQb3J0cy52YWx1ZXMuY29udGFpbnMocG9ydCkpIHsKICAgICAgX2ZyZWVQb3J0cy5hZGQocG9ydCk7CiAgICB9CiAgfQoKICBzdGF0aWMgU2VuZFBvcnQgX25ld1NlcnZpY2VQb3J0KCkgbmF0aXZlICJJT1NlcnZpY2VfTmV3U2VydmljZVBvcnQiOwp9CgpAcGF0Y2gKY2xhc3MgX0lPU2VydmljZSB7CiAgc3RhdGljIF9JT1NlcnZpY2VQb3J0cyBfc2VydmljZVBvcnRzID0gbmV3IF9JT1NlcnZpY2VQb3J0cygpOwogIHN0YXRpYyBSYXdSZWNlaXZlUG9ydCBfcmVjZWl2ZVBvcnQ7CiAgc3RhdGljIFNlbmRQb3J0IF9yZXBseVRvUG9ydDsKICBzdGF0aWMgSGFzaE1hcDxpbnQsIENvbXBsZXRlcj4gX21lc3NhZ2VNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIENvbXBsZXRlcj4oKTsKICBzdGF0aWMgaW50IF9pZCA9IDA7CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmUgX2Rpc3BhdGNoKGludCByZXF1ZXN0LCBMaXN0IGRhdGEpIHsKICAgIGludCBpZDsKICAgIGRvIHsKICAgICAgaWQgPSBfZ2V0TmV4dElkKCk7CiAgICB9IHdoaWxlIChfbWVzc2FnZU1hcC5jb250YWluc0tleShpZCkpOwogICAgZmluYWwgU2VuZFBvcnQgc2VydmljZVBvcnQgPSBfc2VydmljZVBvcnRzLl9nZXRQb3J0KGlkKTsKICAgIF9lbnN1cmVJbml0aWFsaXplKCk7CiAgICBmaW5hbCBDb21wbGV0ZXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogICAgX21lc3NhZ2VNYXBbaWRdID0gY29tcGxldGVyOwogICAgdHJ5IHsKICAgICAgc2VydmljZVBvcnQuc2VuZChbaWQsIF9yZXBseVRvUG9ydCwgcmVxdWVzdCwgZGF0YV0pOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgX21lc3NhZ2VNYXAucmVtb3ZlKGlkKS5jb21wbGV0ZShlcnJvcik7CiAgICAgIGlmIChfbWVzc2FnZU1hcC5sZW5ndGggPT0gMCkgewogICAgICAgIF9maW5hbGl6ZSgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIHN0YXRpYyB2b2lkIF9lbnN1cmVJbml0aWFsaXplKCkgewogICAgaWYgKF9yZWNlaXZlUG9ydCA9PSBudWxsKSB7CiAgICAgIF9yZWNlaXZlUG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwogICAgICBfcmVwbHlUb1BvcnQgPSBfcmVjZWl2ZVBvcnQuc2VuZFBvcnQ7CiAgICAgIF9yZWNlaXZlUG9ydC5oYW5kbGVyID0gKGRhdGEpIHsKICAgICAgICBhc3NlcnQoZGF0YSBpcyBMaXN0ICYmIGRhdGEubGVuZ3RoID09IDIpOwogICAgICAgIF9tZXNzYWdlTWFwLnJlbW92ZShkYXRhWzBdKS5jb21wbGV0ZShkYXRhWzFdKTsKICAgICAgICBfc2VydmljZVBvcnRzLl9yZXR1cm5Qb3J0KGRhdGFbMF0pOwogICAgICAgIGlmIChfbWVzc2FnZU1hcC5sZW5ndGggPT0gMCkgewogICAgICAgICAgX2ZpbmFsaXplKCk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0KCiAgc3RhdGljIHZvaWQgX2ZpbmFsaXplKCkgewogICAgX2lkID0gMDsKICAgIF9yZWNlaXZlUG9ydC5jbG9zZSgpOwogICAgX3JlY2VpdmVQb3J0ID0gbnVsbDsKICB9CgogIHN0YXRpYyBpbnQgX2dldE5leHRJZCgpIHsKICAgIGlmIChfaWQgPT0gMHg3RkZGRkZGRikgX2lkID0gMDsKICAgIHJldHVybiBfaWQrKzsKICB9Cn0KZgBOTjwBIAEYSkwiKCxAARUBKD4vGBwGHzU1JxMGRBU7JREEASc7LRwGBAFHAgEHE0AmIE4WAQk0DAkZKz0ZMSEKOxYuJRUIBh0EASQgKywmMjcsJxcKCQYEARwNGhkEARwkEgQCASNkYXJ0OmlvLXBhdGNoL2lvX3NlcnZpY2VfcGF0Y2guZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL25hbWVzcGFjZV9wYXRjaC5kYXJ0hlsvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfTmFtZXNwYWNlSW1wbCBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSBpbXBsZW1lbnRzIF9OYW1lc3BhY2UgewogIF9OYW1lc3BhY2VJbXBsLl8oKTsKCiAgc3RhdGljIF9OYW1lc3BhY2VJbXBsIF9jcmVhdGUoX05hbWVzcGFjZUltcGwgbmFtZXNwYWNlLCB2YXIgbikKICAgICAgbmF0aXZlICJOYW1lc3BhY2VfQ3JlYXRlIjsKICBzdGF0aWMgaW50IF9nZXRQb2ludGVyKF9OYW1lc3BhY2VJbXBsIG5hbWVzcGFjZSkKICAgICAgbmF0aXZlICJOYW1lc3BhY2VfR2V0UG9pbnRlciI7CiAgc3RhdGljIGludCBfZ2V0RGVmYXVsdCgpIG5hdGl2ZSAiTmFtZXNwYWNlX0dldERlZmF1bHQiOwoKICAvLyBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgIm5hbWVzcGFjZXMiLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlCiAgLy8gZW1iZWRkZXIgd2l0aCB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgbmFtZXNwYWNlIGluZm9ybWF0aW9uLgogIHN0YXRpYyBfTmFtZXNwYWNlSW1wbCBfY2FjaGVkTmFtZXNwYWNlID0gbnVsbDsKICBzdGF0aWMgdm9pZCBfc2V0dXBOYW1lc3BhY2UodmFyIG5hbWVzcGFjZSkgewogICAgX2NhY2hlZE5hbWVzcGFjZSA9IF9jcmVhdGUobmV3IF9OYW1lc3BhY2VJbXBsLl8oKSwgbmFtZXNwYWNlKTsKICB9CgogIHN0YXRpYyBfTmFtZXNwYWNlSW1wbCBnZXQgX25hbWVzcGFjZSB7CiAgICBpZiAoX2NhY2hlZE5hbWVzcGFjZSA9PSBudWxsKSB7CiAgICAgIC8vIFRoZSBlbWJlZGRlciBoYXMgbm90IHN1cHBsaWVkIGEgbmFtZXNwYWNlIGJlZm9yZSBvbmUgaXMgbmVlZGVkLCBzbwogICAgICAvLyBpbnN0ZWFkIHVzZSBhIHNhZmUtaXNoIGRlZmF1bHQgdmFsdWUuCiAgICAgIF9jYWNoZWROYW1lc3BhY2UgPSBfY3JlYXRlKG5ldyBfTmFtZXNwYWNlSW1wbC5fKCksIF9nZXREZWZhdWx0KCkpOwogICAgfQogICAgcmV0dXJuIF9jYWNoZWROYW1lc3BhY2U7CiAgfQoKICBzdGF0aWMgaW50IGdldCBfbmFtZXNwYWNlUG9pbnRlciA9PiBfZ2V0UG9pbnRlcihfbmFtZXNwYWNlKTsKfQoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX05hbWVzcGFjZSB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIHZvaWQgX3NldHVwTmFtZXNwYWNlKHZhciBuYW1lc3BhY2UpIHsKICAgIF9OYW1lc3BhY2VJbXBsLl9zZXR1cE5hbWVzcGFjZShuYW1lc3BhY2UpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIF9OYW1lc3BhY2UgZ2V0IF9uYW1lc3BhY2UgPT4gX05hbWVzcGFjZUltcGwuX25hbWVzcGFjZTsKCiAgQHBhdGNoCiAgc3RhdGljIGludCBnZXQgX25hbWVzcGFjZVBvaW50ZXIgPT4gX05hbWVzcGFjZUltcGwuX25hbWVzcGFjZVBvaW50ZXI7Cn0KMgBOTjwBGk4WAUEhMyU6AUlAMS9DBAEpJEwvSQYdBAE/AgEHGhMJJC8vBAEJQQEJSAIBImRhcnQ6aW8tcGF0Y2gvbmFtZXNwYWNlX3BhdGNoLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9wcm9jZXNzX3BhdGNoLmRhcnTAAEsjLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBfV2luZG93c0NvZGVQYWdlRGVjb2RlciB7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfZGVjb2RlQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzKSBuYXRpdmUgIlN5c3RlbUVuY29kaW5nVG9TdHJpbmciOwp9CgpAcGF0Y2gKY2xhc3MgX1dpbmRvd3NDb2RlUGFnZUVuY29kZXIgewogIEBwYXRjaAogIHN0YXRpYyBMaXN0PGludD4gX2VuY29kZVN0cmluZyhTdHJpbmcgc3RyaW5nKSBuYXRpdmUgIlN0cmluZ1RvU3lzdGVtRW5jb2RpbmciOwp9CgpAcGF0Y2gKY2xhc3MgUHJvY2VzcyB7CiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxQcm9jZXNzPiBzdGFydChTdHJpbmcgZXhlY3V0YWJsZSwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgICAge1N0cmluZyB3b3JraW5nRGlyZWN0b3J5LAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50LAogICAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudDogdHJ1ZSwKICAgICAgYm9vbCBydW5JblNoZWxsOiBmYWxzZSwKICAgICAgUHJvY2Vzc1N0YXJ0TW9kZSBtb2RlOiBQcm9jZXNzU3RhcnRNb2RlLm5vcm1hbH0pIHsKICAgIF9Qcm9jZXNzSW1wbCBwcm9jZXNzID0gbmV3IF9Qcm9jZXNzSW1wbCgKICAgICAgICBleGVjdXRhYmxlLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgIGVudmlyb25tZW50LAogICAgICAgIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgICAgICBydW5JblNoZWxsLAogICAgICAgIG1vZGUpOwogICAgcmV0dXJuIHByb2Nlc3MuX3N0YXJ0KCk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFByb2Nlc3NSZXN1bHQ+IHJ1bihTdHJpbmcgZXhlY3V0YWJsZSwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgICAge1N0cmluZyB3b3JraW5nRGlyZWN0b3J5LAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50LAogICAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudDogdHJ1ZSwKICAgICAgYm9vbCBydW5JblNoZWxsOiBmYWxzZSwKICAgICAgRW5jb2Rpbmcgc3Rkb3V0RW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nLAogICAgICBFbmNvZGluZyBzdGRlcnJFbmNvZGluZzogc3lzdGVtRW5jb2Rpbmd9KSB7CiAgICByZXR1cm4gX3J1bk5vbkludGVyYWN0aXZlUHJvY2VzcygKICAgICAgICBleGVjdXRhYmxlLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgIGVudmlyb25tZW50LAogICAgICAgIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgICAgICBydW5JblNoZWxsLAogICAgICAgIHN0ZG91dEVuY29kaW5nLAogICAgICAgIHN0ZGVyckVuY29kaW5nKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBQcm9jZXNzUmVzdWx0IHJ1blN5bmMoU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIEVuY29kaW5nIHN0ZG91dEVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZywKICAgICAgRW5jb2Rpbmcgc3RkZXJyRW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nfSkgewogICAgcmV0dXJuIF9ydW5Ob25JbnRlcmFjdGl2ZVByb2Nlc3NTeW5jKAogICAgICAgIGV4ZWN1dGFibGUsCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgaW5jbHVkZVBhcmVudEVudmlyb25tZW50LAogICAgICAgIHJ1bkluU2hlbGwsCiAgICAgICAgc3Rkb3V0RW5jb2RpbmcsCiAgICAgICAgc3RkZXJyRW5jb2RpbmcpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGJvb2wga2lsbFBpZChpbnQgcGlkLCBbUHJvY2Vzc1NpZ25hbCBzaWduYWwgPSBQcm9jZXNzU2lnbmFsLnNpZ3Rlcm1dKSB7CiAgICBpZiAoc2lnbmFsIGlzISBQcm9jZXNzU2lnbmFsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJBcmd1bWVudCAnc2lnbmFsJyBtdXN0IGJlIGEgUHJvY2Vzc1NpZ25hbCIpOwogICAgfQogICAgcmV0dXJuIF9Qcm9jZXNzVXRpbHMuX2tpbGxQaWQocGlkLCBzaWduYWwuX3NpZ25hbE51bWJlcik7CiAgfQp9CgpMaXN0PF9TaWduYWxDb250cm9sbGVyPiBfc2lnbmFsQ29udHJvbGxlcnMgPSBuZXcgTGlzdCgzMik7CgpjbGFzcyBfU2lnbmFsQ29udHJvbGxlciB7CiAgZmluYWwgUHJvY2Vzc1NpZ25hbCBzaWduYWw7CgogIFN0cmVhbUNvbnRyb2xsZXI8UHJvY2Vzc1NpZ25hbD4gX2NvbnRyb2xsZXI7CiAgdmFyIF9pZDsKCiAgX1NpZ25hbENvbnRyb2xsZXIodGhpcy5zaWduYWwpIHsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8UHJvY2Vzc1NpZ25hbD4uYnJvYWRjYXN0KAogICAgICAgIG9uTGlzdGVuOiBfbGlzdGVuLCBvbkNhbmNlbDogX2NhbmNlbCk7CiAgfQoKICBTdHJlYW08UHJvY2Vzc1NpZ25hbD4gZ2V0IHN0cmVhbSA9PiBfY29udHJvbGxlci5zdHJlYW07CgogIHZvaWQgX2xpc3RlbigpIHsKICAgIHZhciBpZCA9IF9zZXRTaWduYWxIYW5kbGVyKHNpZ25hbC5fc2lnbmFsTnVtYmVyKTsKICAgIGlmIChpZCBpcyEgaW50KSB7CiAgICAgIF9jb250cm9sbGVyCiAgICAgICAgICAuYWRkRXJyb3IobmV3IFNpZ25hbEV4Y2VwdGlvbigiRmFpbGVkIHRvIGxpc3RlbiBmb3IgJHNpZ25hbCIsIGlkKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9pZCA9IGlkOwogICAgdmFyIHNvY2tldCA9IG5ldyBfUmF3U29ja2V0KG5ldyBfTmF0aXZlU29ja2V0LndhdGNoU2lnbmFsKGlkKSk7CiAgICBzb2NrZXQubGlzdGVuKChldmVudCkgewogICAgICBpZiAoZXZlbnQgPT0gUmF3U29ja2V0RXZlbnQucmVhZCkgewogICAgICAgIHZhciBieXRlcyA9IHNvY2tldC5yZWFkKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKHNpZ25hbCk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgX2NhbmNlbCgpIHsKICAgIGlmIChfaWQgIT0gbnVsbCkgewogICAgICBfY2xlYXJTaWduYWxIYW5kbGVyKHNpZ25hbC5fc2lnbmFsTnVtYmVyKTsKICAgICAgX2lkID0gbnVsbDsKICAgIH0KICB9CgogIHN0YXRpYyBfc2V0U2lnbmFsSGFuZGxlcihpbnQgc2lnbmFsKSBuYXRpdmUgIlByb2Nlc3NfU2V0U2lnbmFsSGFuZGxlciI7CiAgc3RhdGljIGludCBfY2xlYXJTaWduYWxIYW5kbGVyKGludCBzaWduYWwpCiAgICAgIG5hdGl2ZSAiUHJvY2Vzc19DbGVhclNpZ25hbEhhbmRsZXIiOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKRnVuY3Rpb24gX2dldFdhdGNoU2lnbmFsSW50ZXJuYWwoKSA9PiBfUHJvY2Vzc1V0aWxzLl93YXRjaFNpZ25hbEludGVybmFsOwoKQHBhdGNoCmNsYXNzIF9Qcm9jZXNzVXRpbHMgewogIEBwYXRjaAogIHN0YXRpYyB2b2lkIF9leGl0KGludCBzdGF0dXMpIG5hdGl2ZSAiUHJvY2Vzc19FeGl0IjsKICBAcGF0Y2gKICBzdGF0aWMgdm9pZCBfc2V0RXhpdENvZGUoaW50IHN0YXR1cykgbmF0aXZlICJQcm9jZXNzX1NldEV4aXRDb2RlIjsKICBAcGF0Y2gKICBzdGF0aWMgaW50IF9nZXRFeGl0Q29kZSgpIG5hdGl2ZSAiUHJvY2Vzc19HZXRFeGl0Q29kZSI7CiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX3NsZWVwKGludCBtaWxsaXMpIG5hdGl2ZSAiUHJvY2Vzc19TbGVlcCI7CiAgQHBhdGNoCiAgc3RhdGljIGludCBfcGlkKFByb2Nlc3MgcHJvY2VzcykgbmF0aXZlICJQcm9jZXNzX1BpZCI7CiAgc3RhdGljIGJvb2wgX2tpbGxQaWQoaW50IHBpZCwgaW50IHNpZ25hbCkgbmF0aXZlICJQcm9jZXNzX0tpbGxQaWQiOwogIEBwYXRjaAogIHN0YXRpYyBTdHJlYW08UHJvY2Vzc1NpZ25hbD4gX3dhdGNoU2lnbmFsKFByb2Nlc3NTaWduYWwgc2lnbmFsKSB7CiAgICBpZiAoc2lnbmFsICE9IFByb2Nlc3NTaWduYWwuc2lnaHVwICYmCiAgICAgICAgc2lnbmFsICE9IFByb2Nlc3NTaWduYWwuc2lnaW50ICYmCiAgICAgICAgc2lnbmFsICE9IFByb2Nlc3NTaWduYWwuc2lndGVybSAmJgogICAgICAgIChQbGF0Zm9ybS5pc1dpbmRvd3MgfHwKICAgICAgICAgICAgKHNpZ25hbCAhPSBQcm9jZXNzU2lnbmFsLnNpZ3VzcjEgJiYKICAgICAgICAgICAgICAgIHNpZ25hbCAhPSBQcm9jZXNzU2lnbmFsLnNpZ3VzcjIgJiYKICAgICAgICAgICAgICAgIHNpZ25hbCAhPSBQcm9jZXNzU2lnbmFsLnNpZ3dpbmNoKSkpIHsKICAgICAgdGhyb3cgbmV3IFNpZ25hbEV4Y2VwdGlvbigKICAgICAgICAgICJMaXN0ZW5pbmcgZm9yIHNpZ25hbCAkc2lnbmFsIGlzIG5vdCBzdXBwb3J0ZWQiKTsKICAgIH0KICAgIHJldHVybiBfd2F0Y2hTaWduYWxJbnRlcm5hbChzaWduYWwpOwogIH0KCiAgc3RhdGljIFN0cmVhbTxQcm9jZXNzU2lnbmFsPiBfd2F0Y2hTaWduYWxJbnRlcm5hbChQcm9jZXNzU2lnbmFsIHNpZ25hbCkgewogICAgaWYgKF9zaWduYWxDb250cm9sbGVyc1tzaWduYWwuX3NpZ25hbE51bWJlcl0gPT0gbnVsbCkgewogICAgICBfc2lnbmFsQ29udHJvbGxlcnNbc2lnbmFsLl9zaWduYWxOdW1iZXJdID0gbmV3IF9TaWduYWxDb250cm9sbGVyKHNpZ25hbCk7CiAgICB9CiAgICByZXR1cm4gX3NpZ25hbENvbnRyb2xsZXJzW3NpZ25hbC5fc2lnbmFsTnVtYmVyXS5zdHJlYW07CiAgfQp9CgpAcGF0Y2gKY2xhc3MgUHJvY2Vzc0luZm8gewogIEBwYXRjaAogIHN0YXRpYyBpbnQgZ2V0IG1heFJzcyB7CiAgICB2YXIgcmVzdWx0ID0gX21heFJzcygpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgaW50IGdldCBjdXJyZW50UnNzIHsKICAgIHZhciByZXN1bHQgPSBfY3VycmVudFJzcygpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgX21heFJzcygpIG5hdGl2ZSAiUHJvY2Vzc0luZm9fTWF4UlNTIjsKICBzdGF0aWMgX2N1cnJlbnRSc3MoKSBuYXRpdmUgIlByb2Nlc3NJbmZvX0N1cnJlbnRSU1MiOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Qcm9jZXNzU3RhcnRTdGF0dXMgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgInNldCIpCiAgaW50IF9lcnJvckNvZGU7IC8vIFNldCB0byBPUyBlcnJvciBjb2RlIGlmIHByb2Nlc3Mgc3RhcnQgZmFpbGVkLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgInNldCIpCiAgU3RyaW5nIF9lcnJvck1lc3NhZ2U7IC8vIFNldCB0byBPUyBlcnJvciBtZXNzYWdlIGlmIHByb2Nlc3Mgc3RhcnQgZmFpbGVkLgp9CgovLyBUaGUgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxIGNhbiBub3QgYmUgdXNlZCB3aXRoIGEgbWl4aW4sIGR1ZSB0byBtaXNzaW5nCi8vIGltcGxpY2l0IGNvbnN0cnVjdG9yLgpjbGFzcyBfUHJvY2Vzc0ltcGxOYXRpdmVXcmFwcGVyIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxIHt9CgpjbGFzcyBfUHJvY2Vzc0ltcGwgZXh0ZW5kcyBfUHJvY2Vzc0ltcGxOYXRpdmVXcmFwcGVyIGltcGxlbWVudHMgUHJvY2VzcyB7CiAgX1Byb2Nlc3NSZXNvdXJjZUluZm8gX3Jlc291cmNlSW5mbzsKICBzdGF0aWMgYm9vbCBjb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIgPSBmYWxzZTsKCiAgX1Byb2Nlc3NJbXBsKAogICAgICBTdHJpbmcgcGF0aCwKICAgICAgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgICAgdGhpcy5fd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICAgIGJvb2wgcnVuSW5TaGVsbCwKICAgICAgUHJvY2Vzc1N0YXJ0TW9kZSBtb2RlKQogICAgICA6IHN1cGVyKCkgewogICAgaWYgKCFjb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIpIHsKICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oCiAgICAgICAgICAnZXh0LmRhcnQuaW8uZ2V0UHJvY2Vzc2VzJywgX1Byb2Nlc3NSZXNvdXJjZUluZm8uZ2V0U3RhcnRlZFByb2Nlc3Nlcyk7CiAgICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKCdleHQuZGFydC5pby5nZXRQcm9jZXNzQnlJZCcsCiAgICAgICAgICBfUHJvY2Vzc1Jlc291cmNlSW5mby5nZXRQcm9jZXNzSW5mb01hcEJ5SWQpOwogICAgICBjb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIgPSB0cnVlOwogICAgfQoKICAgIGlmIChydW5JblNoZWxsKSB7CiAgICAgIGFyZ3VtZW50cyA9IF9nZXRTaGVsbEFyZ3VtZW50cyhwYXRoLCBhcmd1bWVudHMpOwogICAgICBwYXRoID0gX2dldFNoZWxsQ29tbWFuZCgpOwogICAgfQoKICAgIGlmIChwYXRoIGlzISBTdHJpbmcpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlBhdGggaXMgbm90IGEgU3RyaW5nOiAkcGF0aCIpOwogICAgfQoKICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MgJiYgcGF0aC5jb250YWlucygnICcpICYmICFwYXRoLmNvbnRhaW5zKCciJykpIHsKICAgICAgLy8gRXNjYXBlIHBhdGhzIHRoYXQgbWF5IGNvbnRhaW4gc3BhY2VzCiAgICAgIC8vIEJ1ZzogaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzM3NzUxCiAgICAgIF9wYXRoID0gJyIkcGF0aCInOwogICAgfSBlbHNlIHsKICAgICAgX3BhdGggPSBwYXRoOwogICAgfQoKICAgIGlmIChhcmd1bWVudHMgaXMhIExpc3QpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkFyZ3VtZW50cyBpcyBub3QgYSBMaXN0OiAkYXJndW1lbnRzIik7CiAgICB9CiAgICBpbnQgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKICAgIF9hcmd1bWVudHMgPSBuZXcgTGlzdDxTdHJpbmc+KGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07CiAgICAgIGlmIChhcmcgaXMhIFN0cmluZykgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJOb24tc3RyaW5nIGFyZ3VtZW50OiAkYXJnIik7CiAgICAgIH0KICAgICAgX2FyZ3VtZW50c1tpXSA9IGFyZ3VtZW50c1tpXTsKICAgICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICAgIF9hcmd1bWVudHNbaV0gPSBfd2luZG93c0FyZ3VtZW50RXNjYXBlKF9hcmd1bWVudHNbaV0pOwogICAgICB9CiAgICB9CgogICAgaWYgKF93b3JraW5nRGlyZWN0b3J5ICE9IG51bGwgJiYgX3dvcmtpbmdEaXJlY3RvcnkgaXMhIFN0cmluZykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICJXb3JraW5nRGlyZWN0b3J5IGlzIG5vdCBhIFN0cmluZzogJF93b3JraW5nRGlyZWN0b3J5Iik7CiAgICB9CgogICAgX2Vudmlyb25tZW50ID0gW107CiAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgbm9uLW51bGwgZW52aXJvbm1lbnQuCiAgICBlbnZpcm9ubWVudCA9IChlbnZpcm9ubWVudCA9PSBudWxsKSA/IChjb25zdCB7fSkgOiBlbnZpcm9ubWVudDsKICAgIGlmIChlbnZpcm9ubWVudCBpcyEgTWFwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJFbnZpcm9ubWVudCBpcyBub3QgYSBtYXA6ICRlbnZpcm9ubWVudCIpOwogICAgfQogICAgZW52aXJvbm1lbnQuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBpZiAoa2V5IGlzISBTdHJpbmcgfHwgdmFsdWUgaXMhIFN0cmluZykgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAiRW52aXJvbm1lbnQga2V5IG9yIHZhbHVlIGlzIG5vdCBhIHN0cmluZzogKCRrZXksICR2YWx1ZSkiKTsKICAgICAgfQogICAgICBfZW52aXJvbm1lbnQuYWRkKCcka2V5PSR2YWx1ZScpOwogICAgfSk7CiAgICBpZiAoaW5jbHVkZVBhcmVudEVudmlyb25tZW50KSB7CiAgICAgIFBsYXRmb3JtLmVudmlyb25tZW50LmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgICBhc3NlcnQoa2V5IGlzIFN0cmluZyk7CiAgICAgICAgYXNzZXJ0KHZhbHVlIGlzIFN0cmluZyk7CiAgICAgICAgLy8gRG8gbm90IG92ZXJyaWRlIGtleXMgYWxyZWFkeSBzZXQgYXMgcGFydCBvZiBlbnZpcm9ubWVudC4KICAgICAgICBpZiAoIWVudmlyb25tZW50LmNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgICAgIF9lbnZpcm9ubWVudC5hZGQoJyRrZXk9JHZhbHVlJyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICBpZiAobW9kZSBpcyEgUHJvY2Vzc1N0YXJ0TW9kZSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiTW9kZSBpcyBub3QgYSBQcm9jZXNzU3RhcnRNb2RlOiAkbW9kZSIpOwogICAgfQogICAgX21vZGUgPSBtb2RlOwoKICAgIGlmIChfbW9kZUhhc1N0ZGlvKG1vZGUpKSB7CiAgICAgIC8vIHN0ZGluIGdvaW5nIHRvIHByb2Nlc3MuCiAgICAgIF9zdGRpbiA9IG5ldyBfU3RkU2luayhuZXcgX1NvY2tldC5fd3JpdGVQaXBlKCkuLl9vd25lciA9IHRoaXMpOwogICAgICAvLyBzdGRvdXQgY29taW5nIGZyb20gcHJvY2Vzcy4KICAgICAgX3N0ZG91dCA9IG5ldyBfU3RkU3RyZWFtKG5ldyBfU29ja2V0Ll9yZWFkUGlwZSgpLi5fb3duZXIgPSB0aGlzKTsKICAgICAgLy8gc3RkZXJyIGNvbWluZyBmcm9tIHByb2Nlc3MuCiAgICAgIF9zdGRlcnIgPSBuZXcgX1N0ZFN0cmVhbShuZXcgX1NvY2tldC5fcmVhZFBpcGUoKS4uX293bmVyID0gdGhpcyk7CiAgICB9CiAgICBpZiAoX21vZGVJc0F0dGFjaGVkKG1vZGUpKSB7CiAgICAgIF9leGl0SGFuZGxlciA9IG5ldyBfU29ja2V0Ll9yZWFkUGlwZSgpOwogICAgfQogICAgX2VuZGVkID0gZmFsc2U7CiAgICBfc3RhcnRlZCA9IGZhbHNlOwogIH0KCiAgX05hdGl2ZVNvY2tldCBnZXQgX3N0ZGluTmF0aXZlU29ja2V0ID0+CiAgICAgIChfc3RkaW4uX3NpbmsgYXMgX1NvY2tldCkuX25hdGl2ZVNvY2tldDsKICBfTmF0aXZlU29ja2V0IGdldCBfc3Rkb3V0TmF0aXZlU29ja2V0ID0+CiAgICAgIChfc3Rkb3V0Ll9zdHJlYW0gYXMgX1NvY2tldCkuX25hdGl2ZVNvY2tldDsKICBfTmF0aXZlU29ja2V0IGdldCBfc3RkZXJyTmF0aXZlU29ja2V0ID0+CiAgICAgIChfc3RkZXJyLl9zdHJlYW0gYXMgX1NvY2tldCkuX25hdGl2ZVNvY2tldDsKCiAgc3RhdGljIGJvb2wgX21vZGVJc0F0dGFjaGVkKFByb2Nlc3NTdGFydE1vZGUgbW9kZSkgewogICAgcmV0dXJuIChtb2RlID09IFByb2Nlc3NTdGFydE1vZGUubm9ybWFsKSB8fAogICAgICAgIChtb2RlID09IFByb2Nlc3NTdGFydE1vZGUuaW5oZXJpdFN0ZGlvKTsKICB9CgogIHN0YXRpYyBib29sIF9tb2RlSGFzU3RkaW8oUHJvY2Vzc1N0YXJ0TW9kZSBtb2RlKSB7CiAgICByZXR1cm4gKG1vZGUgPT0gUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWwpIHx8CiAgICAgICAgKG1vZGUgPT0gUHJvY2Vzc1N0YXJ0TW9kZS5kZXRhY2hlZFdpdGhTdGRpbyk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9nZXRTaGVsbENvbW1hbmQoKSB7CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHJldHVybiAnY21kLmV4ZSc7CiAgICB9CiAgICByZXR1cm4gJy9iaW4vc2gnOwogIH0KCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBfZ2V0U2hlbGxBcmd1bWVudHMoCiAgICAgIFN0cmluZyBleGVjdXRhYmxlLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzKSB7CiAgICBMaXN0PFN0cmluZz4gc2hlbGxBcmd1bWVudHMgPSBbXTsKICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgc2hlbGxBcmd1bWVudHMuYWRkKCcvYycpOwogICAgICBzaGVsbEFyZ3VtZW50cy5hZGQoZXhlY3V0YWJsZSk7CiAgICAgIGZvciAodmFyIGFyZyBpbiBhcmd1bWVudHMpIHsKICAgICAgICBzaGVsbEFyZ3VtZW50cy5hZGQoYXJnKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdmFyIGNvbW1hbmRMaW5lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICBleGVjdXRhYmxlID0gZXhlY3V0YWJsZS5yZXBsYWNlQWxsKCInIiwgIidcIidcIiciKTsKICAgICAgY29tbWFuZExpbmUud3JpdGUoIickZXhlY3V0YWJsZSciKTsKICAgICAgc2hlbGxBcmd1bWVudHMuYWRkKCItYyIpOwogICAgICBmb3IgKHZhciBhcmcgaW4gYXJndW1lbnRzKSB7CiAgICAgICAgYXJnID0gYXJnLnJlcGxhY2VBbGwoIiciLCAiJ1wiJ1wiJyIpOwogICAgICAgIGNvbW1hbmRMaW5lLndyaXRlKCIgJyRhcmcnIik7CiAgICAgIH0KICAgICAgc2hlbGxBcmd1bWVudHMuYWRkKGNvbW1hbmRMaW5lLnRvU3RyaW5nKCkpOwogICAgfQogICAgcmV0dXJuIHNoZWxsQXJndW1lbnRzOwogIH0KCiAgU3RyaW5nIF93aW5kb3dzQXJndW1lbnRFc2NhcGUoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICB2YXIgcmVzdWx0ID0gYXJndW1lbnQ7CiAgICBpZiAoYXJndW1lbnQuY29udGFpbnMoJ1x0JykgfHwKICAgICAgICBhcmd1bWVudC5jb250YWlucygnICcpIHx8CiAgICAgICAgYXJndW1lbnQuY29udGFpbnMoJyInKSkgewogICAgICAvLyBQcm9kdWNlIHNvbWV0aGluZyB0aGF0IHRoZSBDIHJ1bnRpbWUgb24gV2luZG93cyB3aWxsIHBhcnNlCiAgICAgIC8vIGJhY2sgYXMgdGhpcyBzdHJpbmcuCgogICAgICAvLyBSZXBsYWNlIGFueSBudW1iZXIgb2YgJ1wnIGZvbGxvd2VkIGJ5ICciJyB3aXRoCiAgICAgIC8vIHR3aWNlIGFzIG1hbnkgJ1wnIGZvbGxvd2VkIGJ5ICdcIicuCiAgICAgIHZhciBiYWNrc2xhc2ggPSAnXFwnLmNvZGVVbml0QXQoMCk7CiAgICAgIHZhciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgdmFyIG5leHRQb3MgPSAwOwogICAgICB2YXIgcXVvdGVQb3MgPSBhcmd1bWVudC5pbmRleE9mKCciJywgbmV4dFBvcyk7CiAgICAgIHdoaWxlIChxdW90ZVBvcyAhPSAtMSkgewogICAgICAgIHZhciBudW1CYWNrc2xhc2ggPSAwOwogICAgICAgIHZhciBwb3MgPSBxdW90ZVBvcyAtIDE7CiAgICAgICAgd2hpbGUgKHBvcyA+PSAwICYmIGFyZ3VtZW50LmNvZGVVbml0QXQocG9zKSA9PSBiYWNrc2xhc2gpIHsKICAgICAgICAgIG51bUJhY2tzbGFzaCsrOwogICAgICAgICAgcG9zLS07CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKGFyZ3VtZW50LnN1YnN0cmluZyhuZXh0UG9zLCBxdW90ZVBvcyAtIG51bUJhY2tzbGFzaCkpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQmFja3NsYXNoOyBpKyspIHsKICAgICAgICAgIHNiLndyaXRlKHInXFwnKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUocidcIicpOwogICAgICAgIG5leHRQb3MgPSBxdW90ZVBvcyArIDE7CiAgICAgICAgcXVvdGVQb3MgPSBhcmd1bWVudC5pbmRleE9mKCciJywgbmV4dFBvcyk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoYXJndW1lbnQuc3Vic3RyaW5nKG5leHRQb3MsIGFyZ3VtZW50Lmxlbmd0aCkpOwogICAgICByZXN1bHQgPSBzYi50b1N0cmluZygpOwoKICAgICAgLy8gQWRkICciJyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgYW5kIHJlcGxhY2UgYWxsICdcJyBhdAogICAgICAvLyB0aGUgZW5kIHdpdGggdHdvICdcJy4KICAgICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCciJyk7CiAgICAgIHNiLndyaXRlKHJlc3VsdCk7CiAgICAgIG5leHRQb3MgPSBhcmd1bWVudC5sZW5ndGggLSAxOwogICAgICB3aGlsZSAoYXJndW1lbnQuY29kZVVuaXRBdChuZXh0UG9zKSA9PSBiYWNrc2xhc2gpIHsKICAgICAgICBzYi53cml0ZSgnXFwnKTsKICAgICAgICBuZXh0UG9zLS07CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJyInKTsKICAgICAgcmVzdWx0ID0gc2IudG9TdHJpbmcoKTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgaW50IF9pbnRGcm9tQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzLCBpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gKGJ5dGVzW29mZnNldF0gKwogICAgICAgIChieXRlc1tvZmZzZXQgKyAxXSA8PCA4KSArCiAgICAgICAgKGJ5dGVzW29mZnNldCArIDJdIDw8IDE2KSArCiAgICAgICAgKGJ5dGVzW29mZnNldCArIDNdIDw8IDI0KSk7CiAgfQoKICBGdXR1cmU8UHJvY2Vzcz4gX3N0YXJ0KCkgewogICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8UHJvY2Vzcz4oKTsKICAgIGlmIChfbW9kZUlzQXR0YWNoZWQoX21vZGUpKSB7CiAgICAgIF9leGl0Q29kZSA9IG5ldyBDb21wbGV0ZXI8aW50PigpOwogICAgfQogICAgLy8gVE9ETyhhZ2VyKTogTWFrZSB0aGUgYWN0dWFsIHByb2Nlc3Mgc3RhcnRpbmcgcmVhbGx5IGFzeW5jIGluc3RlYWQgb2YKICAgIC8vIHNpbXVsYXRpbmcgaXQgd2l0aCBhIHRpbWVyLgogICAgVGltZXIucnVuKCgpIHsKICAgICAgdmFyIHN0YXR1cyA9IG5ldyBfUHJvY2Vzc1N0YXJ0U3RhdHVzKCk7CiAgICAgIGJvb2wgc3VjY2VzcyA9IF9zdGFydE5hdGl2ZSgKICAgICAgICAgIF9OYW1lc3BhY2UuX25hbWVzcGFjZSwKICAgICAgICAgIF9wYXRoLAogICAgICAgICAgX2FyZ3VtZW50cywKICAgICAgICAgIF93b3JraW5nRGlyZWN0b3J5LAogICAgICAgICAgX2Vudmlyb25tZW50LAogICAgICAgICAgX21vZGUuX21vZGUsCiAgICAgICAgICBfbW9kZUhhc1N0ZGlvKF9tb2RlKSA/IF9zdGRpbk5hdGl2ZVNvY2tldCA6IG51bGwsCiAgICAgICAgICBfbW9kZUhhc1N0ZGlvKF9tb2RlKSA/IF9zdGRvdXROYXRpdmVTb2NrZXQgOiBudWxsLAogICAgICAgICAgX21vZGVIYXNTdGRpbyhfbW9kZSkgPyBfc3RkZXJyTmF0aXZlU29ja2V0IDogbnVsbCwKICAgICAgICAgIF9tb2RlSXNBdHRhY2hlZChfbW9kZSkgPyBfZXhpdEhhbmRsZXIuX25hdGl2ZVNvY2tldCA6IG51bGwsCiAgICAgICAgICBzdGF0dXMpOwogICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihuZXcgUHJvY2Vzc0V4Y2VwdGlvbigKICAgICAgICAgICAgX3BhdGgsIF9hcmd1bWVudHMsIHN0YXR1cy5fZXJyb3JNZXNzYWdlLCBzdGF0dXMuX2Vycm9yQ29kZSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX3N0YXJ0ZWQgPSB0cnVlOwogICAgICBfcmVzb3VyY2VJbmZvID0gbmV3IF9Qcm9jZXNzUmVzb3VyY2VJbmZvKHRoaXMpOwoKICAgICAgLy8gU2V0dXAgYW4gZXhpdCBoYW5kbGVyIHRvIGhhbmRsZSBpbnRlcm5hbCBjbGVhbnVwIGFuZCBwb3NzaWJsZQogICAgICAvLyBjYWxsYmFjayB3aGVuIGEgcHJvY2VzcyB0ZXJtaW5hdGVzLgogICAgICBpZiAoX21vZGVJc0F0dGFjaGVkKF9tb2RlKSkgewogICAgICAgIGludCBleGl0RGF0YVJlYWQgPSAwOwogICAgICAgIGZpbmFsIGludCBFWElUX0RBVEFfU0laRSA9IDg7CiAgICAgICAgTGlzdDxpbnQ+IGV4aXREYXRhQnVmZmVyID0gbmV3IExpc3Q8aW50PihFWElUX0RBVEFfU0laRSk7CiAgICAgICAgX2V4aXRIYW5kbGVyLmxpc3RlbigoZGF0YSkgewogICAgICAgICAgaW50IGV4aXRDb2RlKExpc3Q8aW50PiBpbnRzKSB7CiAgICAgICAgICAgIHZhciBjb2RlID0gX2ludEZyb21CeXRlcyhpbnRzLCAwKTsKICAgICAgICAgICAgdmFyIG5lZ2F0aXZlID0gX2ludEZyb21CeXRlcyhpbnRzLCA0KTsKICAgICAgICAgICAgYXNzZXJ0KG5lZ2F0aXZlID09IDAgfHwgbmVnYXRpdmUgPT0gMSk7CiAgICAgICAgICAgIHJldHVybiAobmVnYXRpdmUgPT0gMCkgPyBjb2RlIDogLWNvZGU7CiAgICAgICAgICB9CgogICAgICAgICAgdm9pZCBoYW5kbGVFeGl0KCkgewogICAgICAgICAgICBfZW5kZWQgPSB0cnVlOwogICAgICAgICAgICBfZXhpdENvZGUuY29tcGxldGUoZXhpdENvZGUoZXhpdERhdGFCdWZmZXIpKTsKICAgICAgICAgICAgLy8gS2lsbCBzdGRpbiwgaGVscGluZyBoYW5kIGlmIHRoZSB1c2VyIGZvcmdvdCB0byBkbyBpdC4KICAgICAgICAgICAgaWYgKF9tb2RlSGFzU3RkaW8oX21vZGUpKSB7CiAgICAgICAgICAgICAgKF9zdGRpbi5fc2luayBhcyBfU29ja2V0KS5kZXN0cm95KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3Jlc291cmNlSW5mby5zdG9wcGVkKCk7CiAgICAgICAgICB9CgogICAgICAgICAgZXhpdERhdGFCdWZmZXIuc2V0UmFuZ2UoCiAgICAgICAgICAgICAgZXhpdERhdGFSZWFkLCBleGl0RGF0YVJlYWQgKyBkYXRhLmxlbmd0aCwgZGF0YSk7CiAgICAgICAgICBleGl0RGF0YVJlYWQgKz0gZGF0YS5sZW5ndGg7CiAgICAgICAgICBpZiAoZXhpdERhdGFSZWFkID09IEVYSVRfREFUQV9TSVpFKSB7CiAgICAgICAgICAgIGhhbmRsZUV4aXQoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQoKICAgICAgY29tcGxldGVyLmNvbXBsZXRlKHRoaXMpOwogICAgfSk7CiAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIFByb2Nlc3NSZXN1bHQgX3J1bkFuZFdhaXQoRW5jb2Rpbmcgc3Rkb3V0RW5jb2RpbmcsIEVuY29kaW5nIHN0ZGVyckVuY29kaW5nKSB7CiAgICB2YXIgc3RhdHVzID0gbmV3IF9Qcm9jZXNzU3RhcnRTdGF0dXMoKTsKICAgIF9leGl0Q29kZSA9IG5ldyBDb21wbGV0ZXI8aW50PigpOwogICAgYm9vbCBzdWNjZXNzID0gX3N0YXJ0TmF0aXZlKAogICAgICAgIF9OYW1lc3BhY2UuX25hbWVzcGFjZSwKICAgICAgICBfcGF0aCwKICAgICAgICBfYXJndW1lbnRzLAogICAgICAgIF93b3JraW5nRGlyZWN0b3J5LAogICAgICAgIF9lbnZpcm9ubWVudCwKICAgICAgICBQcm9jZXNzU3RhcnRNb2RlLm5vcm1hbC5fbW9kZSwKICAgICAgICBfc3RkaW5OYXRpdmVTb2NrZXQsCiAgICAgICAgX3N0ZG91dE5hdGl2ZVNvY2tldCwKICAgICAgICBfc3RkZXJyTmF0aXZlU29ja2V0LAogICAgICAgIF9leGl0SGFuZGxlci5fbmF0aXZlU29ja2V0LAogICAgICAgIHN0YXR1cyk7CiAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgdGhyb3cgbmV3IFByb2Nlc3NFeGNlcHRpb24oCiAgICAgICAgICBfcGF0aCwgX2FyZ3VtZW50cywgc3RhdHVzLl9lcnJvck1lc3NhZ2UsIHN0YXR1cy5fZXJyb3JDb2RlKTsKICAgIH0KCiAgICBfcmVzb3VyY2VJbmZvID0gbmV3IF9Qcm9jZXNzUmVzb3VyY2VJbmZvKHRoaXMpOwoKICAgIHZhciByZXN1bHQgPSBfd2FpdChfc3RkaW5OYXRpdmVTb2NrZXQsIF9zdGRvdXROYXRpdmVTb2NrZXQsCiAgICAgICAgX3N0ZGVyck5hdGl2ZVNvY2tldCwgX2V4aXRIYW5kbGVyLl9uYXRpdmVTb2NrZXQpOwoKICAgIGdldE91dHB1dChvdXRwdXQsIGVuY29kaW5nKSB7CiAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSByZXR1cm4gb3V0cHV0OwogICAgICByZXR1cm4gZW5jb2RpbmcuZGVjb2RlKG91dHB1dCk7CiAgICB9CgogICAgX3Jlc291cmNlSW5mby5zdG9wcGVkKCk7CgogICAgcmV0dXJuIG5ldyBQcm9jZXNzUmVzdWx0KAogICAgICAgIHJlc3VsdFswXSwKICAgICAgICByZXN1bHRbMV0sCiAgICAgICAgZ2V0T3V0cHV0KHJlc3VsdFsyXSwgc3Rkb3V0RW5jb2RpbmcpLAogICAgICAgIGdldE91dHB1dChyZXN1bHRbM10sIHN0ZGVyckVuY29kaW5nKSk7CiAgfQoKICBib29sIF9zdGFydE5hdGl2ZSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsCiAgICAgIFN0cmluZyBwYXRoLAogICAgICBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTGlzdDxTdHJpbmc+IGVudmlyb25tZW50LAogICAgICBpbnQgbW9kZSwKICAgICAgX05hdGl2ZVNvY2tldCBzdGRpbiwKICAgICAgX05hdGl2ZVNvY2tldCBzdGRvdXQsCiAgICAgIF9OYXRpdmVTb2NrZXQgc3RkZXJyLAogICAgICBfTmF0aXZlU29ja2V0IGV4aXRIYW5kbGVyLAogICAgICBfUHJvY2Vzc1N0YXJ0U3RhdHVzIHN0YXR1cykgbmF0aXZlICJQcm9jZXNzX1N0YXJ0IjsKCiAgX3dhaXQoX05hdGl2ZVNvY2tldCBzdGRpbiwgX05hdGl2ZVNvY2tldCBzdGRvdXQsIF9OYXRpdmVTb2NrZXQgc3RkZXJyLAogICAgICBfTmF0aXZlU29ja2V0IGV4aXRIYW5kbGVyKSBuYXRpdmUgIlByb2Nlc3NfV2FpdCI7CgogIFN0cmVhbTxMaXN0PGludD4+IGdldCBzdGRvdXQgewogICAgcmV0dXJuIF9zdGRvdXQ7CiAgfQoKICBTdHJlYW08TGlzdDxpbnQ+PiBnZXQgc3RkZXJyIHsKICAgIHJldHVybiBfc3RkZXJyOwogIH0KCiAgSU9TaW5rIGdldCBzdGRpbiB7CiAgICByZXR1cm4gX3N0ZGluOwogIH0KCiAgRnV0dXJlPGludD4gZ2V0IGV4aXRDb2RlID0+IF9leGl0Q29kZSAhPSBudWxsID8gX2V4aXRDb2RlLmZ1dHVyZSA6IG51bGw7CgogIGJvb2wga2lsbChbUHJvY2Vzc1NpZ25hbCBzaWduYWwgPSBQcm9jZXNzU2lnbmFsLnNpZ3Rlcm1dKSB7CiAgICBpZiAoc2lnbmFsIGlzISBQcm9jZXNzU2lnbmFsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJBcmd1bWVudCAnc2lnbmFsJyBtdXN0IGJlIGEgUHJvY2Vzc1NpZ25hbCIpOwogICAgfQogICAgYXNzZXJ0KF9zdGFydGVkKTsKICAgIGlmIChfZW5kZWQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfUHJvY2Vzc1V0aWxzLl9raWxsUGlkKHBpZCwgc2lnbmFsLl9zaWduYWxOdW1iZXIpOwogIH0KCiAgaW50IGdldCBwaWQgPT4gX1Byb2Nlc3NVdGlscy5fcGlkKHRoaXMpOwoKICBTdHJpbmcgX3BhdGg7CiAgTGlzdDxTdHJpbmc+IF9hcmd1bWVudHM7CiAgU3RyaW5nIF93b3JraW5nRGlyZWN0b3J5OwogIExpc3Q8U3RyaW5nPiBfZW52aXJvbm1lbnQ7CiAgUHJvY2Vzc1N0YXJ0TW9kZSBfbW9kZTsKICAvLyBQcml2YXRlIG1ldGhvZHMgb2YgU29ja2V0IGFyZSB1c2VkIGJ5IF9pbiwgX291dCwgYW5kIF9lcnIuCiAgX1N0ZFNpbmsgX3N0ZGluOwogIF9TdGRTdHJlYW0gX3N0ZG91dDsKICBfU3RkU3RyZWFtIF9zdGRlcnI7CiAgX1NvY2tldCBfZXhpdEhhbmRsZXI7CiAgYm9vbCBfZW5kZWQ7CiAgYm9vbCBfc3RhcnRlZDsKICBDb21wbGV0ZXI8aW50PiBfZXhpdENvZGU7Cn0KCi8vIF9Ob25JbnRlcmFjdGl2ZVByb2Nlc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbiBpbnRlcmFjdGl2ZSBwcm9jZXNzCi8vIHRoYXQgYnVmZmVycyBvdXRwdXQgc28gaXQgY2FuIGJlIGRlbGl2ZXJlZCB3aGVuIHRoZSBwcm9jZXNzIGV4aXRzLgovLyBfTm9uSW50ZXJhY3RpdmVQcm9jZXNzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBQcm9jZXNzLnJ1bgovLyBtZXRob2QuCkZ1dHVyZTxQcm9jZXNzUmVzdWx0PiBfcnVuTm9uSW50ZXJhY3RpdmVQcm9jZXNzKAogICAgU3RyaW5nIHBhdGgsCiAgICBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50LAogICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICBib29sIHJ1bkluU2hlbGwsCiAgICBFbmNvZGluZyBzdGRvdXRFbmNvZGluZywKICAgIEVuY29kaW5nIHN0ZGVyckVuY29kaW5nKSB7CiAgLy8gU3RhcnQgdGhlIHVuZGVybHlpbmcgcHJvY2Vzcy4KICByZXR1cm4gUHJvY2Vzcy5zdGFydChwYXRoLCBhcmd1bWVudHMsCiAgICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LAogICAgICAgICAgaW5jbHVkZVBhcmVudEVudmlyb25tZW50OiBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICAgICAgICBydW5JblNoZWxsOiBydW5JblNoZWxsKQogICAgICAudGhlbigoUHJvY2VzcyBwKSB7CiAgICBpbnQgcGlkID0gcC5waWQ7CgogICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9jZXNzIHN0ZGluIGlzIGNsb3NlZC4KICAgIHAuc3RkaW4uY2xvc2UoKTsKCiAgICAvLyBTZXR1cCBzdGRvdXQgYW5kIHN0ZGVyciBoYW5kbGluZy4KICAgIEZ1dHVyZSBmb2xkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSwgRW5jb2RpbmcgZW5jb2RpbmcpIHsKICAgICAgaWYgKGVuY29kaW5nID09IG51bGwpIHsKICAgICAgICByZXR1cm4gc3RyZWFtCiAgICAgICAgICAgIC5mb2xkKG5ldyBCeXRlc0J1aWxkZXIoKSwgKGJ1aWxkZXIsIGRhdGEpID0+IGJ1aWxkZXIuLmFkZChkYXRhKSkKICAgICAgICAgICAgLnRoZW4oKGJ1aWxkZXIpID0+IGJ1aWxkZXIudGFrZUJ5dGVzKCkpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBzdHJlYW0udHJhbnNmb3JtKGVuY29kaW5nLmRlY29kZXIpLmZvbGQobmV3IFN0cmluZ0J1ZmZlcigpLAogICAgICAgICAgICAoYnVmLCBkYXRhKSB7CiAgICAgICAgICBidWYud3JpdGUoZGF0YSk7CiAgICAgICAgICByZXR1cm4gYnVmOwogICAgICAgIH0pLnRoZW4oKHNiKSA9PiBzYi50b1N0cmluZygpKTsKICAgICAgfQogICAgfQoKICAgIEZ1dHVyZSBzdGRvdXQgPSBmb2xkU3RyZWFtKHAuc3Rkb3V0LCBzdGRvdXRFbmNvZGluZyk7CiAgICBGdXR1cmUgc3RkZXJyID0gZm9sZFN0cmVhbShwLnN0ZGVyciwgc3RkZXJyRW5jb2RpbmcpOwoKICAgIHJldHVybiBGdXR1cmUud2FpdChbcC5leGl0Q29kZSwgc3Rkb3V0LCBzdGRlcnJdKS50aGVuKChyZXN1bHQpIHsKICAgICAgcmV0dXJuIG5ldyBQ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YWNrbG9nLCB2Nk9ubHksIHNoYXJlZCk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgUmF3U29ja2V0IHsKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFJhd1NvY2tldD4gY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICByZXR1cm4gX1Jhd1NvY2tldC5jb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3MsIHRpbWVvdXQpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxSYXdTb2NrZXQ+PiBzdGFydENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzfSkgewogICAgcmV0dXJuIF9SYXdTb2NrZXQuc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3MpOwogIH0KfQoKQHBhdGNoCmNsYXNzIFJhd1NvY2tldE9wdGlvbiB7CiAgc3RhdGljIGZpbmFsIExpc3Q8aW50PiBfb3B0aW9uc0NhY2hlID0KICAgICAgTGlzdDxpbnQ+KF9SYXdTb2NrZXRPcHRpb25zLnZhbHVlcy5sZW5ndGgpOwoKICBAcGF0Y2gKICBzdGF0aWMgaW50IF9nZXRPcHRpb25WYWx1ZShpbnQga2V5KSB7CiAgICBpZiAoa2V5ID4gX1Jhd1NvY2tldE9wdGlvbnMudmFsdWVzLmxlbmd0aCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKGtleSwgJ2tleScpOwogICAgfQogICAgX29wdGlvbnNDYWNoZVtrZXldID8/PSBfZ2V0TmF0aXZlT3B0aW9uVmFsdWUoa2V5KTsKICAgIHJldHVybiBfb3B0aW9uc0NhY2hlW2tleV07CiAgfQoKICBzdGF0aWMgaW50IF9nZXROYXRpdmVPcHRpb25WYWx1ZShpbnQga2V5KQogICAgICBuYXRpdmUgIlJhd1NvY2tldE9wdGlvbl9HZXRPcHRpb25WYWx1ZSI7Cn0KCkBwYXRjaApjbGFzcyBJbnRlcm5ldEFkZHJlc3MgewogIEBwYXRjaAogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IExPT1BCQUNLX0lQX1Y0IHsKICAgIHJldHVybiBfSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IExPT1BCQUNLX0lQX1Y2IHsKICAgIHJldHVybiBfSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NjsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IEFOWV9JUF9WNCB7CiAgICByZXR1cm4gX0ludGVybmV0QWRkcmVzcy5hbnlJUHY0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgQU5ZX0lQX1Y2IHsKICAgIHJldHVybiBfSW50ZXJuZXRBZGRyZXNzLmFueUlQdjY7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IEludGVybmV0QWRkcmVzcyhTdHJpbmcgYWRkcmVzcykgewogICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzLnBhcnNlKGFkZHJlc3MpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxMaXN0PEludGVybmV0QWRkcmVzcz4+IGxvb2t1cChTdHJpbmcgaG9zdCwKICAgICAge0ludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5hbnl9KSB7CiAgICByZXR1cm4gX05hdGl2ZVNvY2tldC5sb29rdXAoaG9zdCwgdHlwZTogdHlwZSk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIF9jbG9uZVdpdGhOZXdIb3N0KAogICAgICBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgU3RyaW5nIGhvc3QpIHsKICAgIHJldHVybiAoYWRkcmVzcyBhcyBfSW50ZXJuZXRBZGRyZXNzKS5fY2xvbmVXaXRoTmV3SG9zdChob3N0KTsKICB9Cn0KCkBwYXRjaApjbGFzcyBOZXR3b3JrSW50ZXJmYWNlIHsKICBAcGF0Y2gKICBzdGF0aWMgYm9vbCBnZXQgbGlzdFN1cHBvcnRlZCB7CiAgICByZXR1cm4gX2xpc3RTdXBwb3J0ZWQoKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8TGlzdDxOZXR3b3JrSW50ZXJmYWNlPj4gbGlzdCgKICAgICAge2Jvb2wgaW5jbHVkZUxvb3BiYWNrOiBmYWxzZSwKICAgICAgYm9vbCBpbmNsdWRlTGlua0xvY2FsOiBmYWxzZSwKICAgICAgSW50ZXJuZXRBZGRyZXNzVHlwZSB0eXBlOiBJbnRlcm5ldEFkZHJlc3NUeXBlLmFueX0pIHsKICAgIHJldHVybiBfTmF0aXZlU29ja2V0Lmxpc3RJbnRlcmZhY2VzKAogICAgICAgIGluY2x1ZGVMb29wYmFjazogaW5jbHVkZUxvb3BiYWNrLAogICAgICAgIGluY2x1ZGVMaW5rTG9jYWw6IGluY2x1ZGVMaW5rTG9jYWwsCiAgICAgICAgdHlwZTogdHlwZSk7CiAgfQoKICBzdGF0aWMgYm9vbCBfbGlzdFN1cHBvcnRlZCgpIG5hdGl2ZSAiTmV0d29ya0ludGVyZmFjZV9MaXN0U3VwcG9ydGVkIjsKfQoKdm9pZCBfdGhyb3dPbkJhZFBvcnQoaW50IHBvcnQpIHsKICBpZiAoKHBvcnQgPT0gbnVsbCkgfHwgKHBvcnQgPCAwKSB8fCAocG9ydCA+IDB4RkZGRikpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIHBvcnQgJHBvcnQiKTsKICB9Cn0KCnZvaWQgX3Rocm93T25CYWRUdGwoaW50IHR0bCkgewogIGlmICh0dGwgPT0gbnVsbCB8fCB0dGwgPCAxIHx8IHR0bCA+IDI1NSkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgdHRsICR0dGwnKTsKICB9Cn0KCmNsYXNzIF9JbnRlcm5ldEFkZHJlc3MgaW1wbGVtZW50cyBJbnRlcm5ldEFkZHJlc3MgewogIHN0YXRpYyBjb25zdCBpbnQgX2FkZHJlc3NMb29wYmFja0lQdjQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX2FkZHJlc3NMb29wYmFja0lQdjYgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX2FkZHJlc3NBbnlJUHY0ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IF9hZGRyZXNzQW55SVB2NiA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBfSVB2NEFkZHJMZW5ndGggPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgX0lQdjZBZGRyTGVuZ3RoID0gMTY7CgogIHN0YXRpYyBfSW50ZXJuZXRBZGRyZXNzIGxvb3BiYWNrSVB2NCA9CiAgICAgIG5ldyBfSW50ZXJuZXRBZGRyZXNzLmZpeGVkKF9hZGRyZXNzTG9vcGJhY2tJUHY0KTsKICBzdGF0aWMgX0ludGVybmV0QWRkcmVzcyBsb29wYmFja0lQdjYgPQogICAgICBuZXcgX0ludGVybmV0QWRkcmVzcy5maXhlZChfYWRkcmVzc0xvb3BiYWNrSVB2Nik7CiAgc3RhdGljIF9JbnRlcm5ldEFkZHJlc3MgYW55SVB2NCA9IG5ldyBfSW50ZXJuZXRBZGRyZXNzLmZpeGVkKF9hZGRyZXNzQW55SVB2NCk7CiAgc3RhdGljIF9JbnRlcm5ldEFkZHJlc3MgYW55SVB2NiA9IG5ldyBfSW50ZXJuZXRBZGRyZXNzLmZpeGVkKF9hZGRyZXNzQW55SVB2Nik7CgogIGZpbmFsIFN0cmluZyBhZGRyZXNzOwogIGZpbmFsIFN0cmluZyBfaG9zdDsKICBmaW5hbCBVaW50OExpc3QgX2luX2FkZHI7CgogIEludGVybmV0QWRkcmVzc1R5cGUgZ2V0IHR5cGUgPT4gX2luX2FkZHIubGVuZ3RoID09IF9JUHY0QWRkckxlbmd0aAogICAgICA/IEludGVybmV0QWRkcmVzc1R5cGUuSVB2NAogICAgICA6IEludGVybmV0QWRkcmVzc1R5cGUuSVB2NjsKCiAgU3RyaW5nIGdldCBob3N0ID0+IF9ob3N0ICE9IG51bGwgPyBfaG9zdCA6IGFkZHJlc3M7CgogIFVpbnQ4TGlzdCBnZXQgcmF3QWRkcmVzcyA9PiBuZXcgVWludDhMaXN0LmZyb21MaXN0KF9pbl9hZGRyKTsKCiAgYm9vbCBnZXQgaXNMb29wYmFjayB7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQ6CiAgICAgICAgcmV0dXJuIF9pbl9hZGRyWzBdID09IDEyNzsKCiAgICAgIGNhc2UgSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY2OgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX0lQdjZBZGRyTGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgICAgICBpZiAoX2luX2FkZHJbaV0gIT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX2luX2FkZHJbX0lQdjZBZGRyTGVuZ3RoIC0gMV0gPT0gMTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzTGlua0xvY2FsIHsKICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlIEludGVybmV0QWRkcmVzc1R5cGUuSVB2NDoKICAgICAgICAvLyBDaGVja2luZyBmb3IgMTY5LjI1NC4wLjAvMTYuCiAgICAgICAgcmV0dXJuIF9pbl9hZGRyWzBdID09IDE2OSAmJiBfaW5fYWRkclsxXSA9PSAyNTQ7CgogICAgICBjYXNlIEludGVybmV0QWRkcmVzc1R5cGUuSVB2NjoKICAgICAgICAvLyBDaGVja2luZyBmb3IgZmU4MDo6LzEwLgogICAgICAgIHJldHVybiBfaW5fYWRkclswXSA9PSAweEZFICYmIChfaW5fYWRkclsxXSAmIDB4QjApID09IDB4ODA7CiAgICB9CiAgfQoKICBib29sIGdldCBpc011bHRpY2FzdCB7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQ6CiAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIDIyNC4wLjAuMCB0aHJvdWdoIDIzOS4yNTUuMjU1LjI1NS4KICAgICAgICByZXR1cm4gX2luX2FkZHJbMF0gPj0gMjI0ICYmIF9pbl9hZGRyWzBdIDwgMjQwOwoKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjY6CiAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIGZmMDA6Oi84LgogICAgICAgIHJldHVybiBfaW5fYWRkclswXSA9PSAweEZGOwogICAgfQogIH0KCiAgRnV0dXJlPEludGVybmV0QWRkcmVzcz4gcmV2ZXJzZSgpID0+IF9OYXRpdmVTb2NrZXQucmV2ZXJzZUxvb2t1cCh0aGlzKTsKCiAgX0ludGVybmV0QWRkcmVzcyh0aGlzLmFkZHJlc3MsIHRoaXMuX2hvc3QsIHRoaXMuX2luX2FkZHIpOwoKICBmYWN0b3J5IF9JbnRlcm5ldEFkZHJlc3MucGFyc2UoU3RyaW5nIGFkZHJlc3MpIHsKICAgIGlmIChhZGRyZXNzIGlzISBTdHJpbmcpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgaW50ZXJuZXQgYWRkcmVzcyAkYWRkcmVzcyIpOwogICAgfQogICAgdmFyIGluX2FkZHIgPSBfcGFyc2UoYWRkcmVzcyk7CiAgICBpZiAoaW5fYWRkciA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGludGVybmV0IGFkZHJlc3MgJGFkZHJlc3MiKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcyhhZGRyZXNzLCBudWxsLCBpbl9hZGRyKTsKICB9CgogIGZhY3RvcnkgX0ludGVybmV0QWRkcmVzcy5maXhlZChpbnQgaWQpIHsKICAgIHN3aXRjaCAoaWQpIHsKICAgICAgY2FzZSBfYWRkcmVzc0xvb3BiYWNrSVB2NDoKICAgICAgICB2YXIgaW5fYWRkciA9IG5ldyBVaW50OExpc3QoX0lQdjRBZGRyTGVuZ3RoKTsKICAgICAgICBpbl9hZGRyWzBdID0gMTI3OwogICAgICAgIGluX2FkZHJbX0lQdjRBZGRyTGVuZ3RoIC0gMV0gPSAxOwogICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygiMTI3LjAuMC4xIiwgbnVsbCwgaW5fYWRkcik7CiAgICAgIGNhc2UgX2FkZHJlc3NMb29wYmFja0lQdjY6CiAgICAgICAgdmFyIGluX2FkZHIgPSBuZXcgVWludDhMaXN0KF9JUHY2QWRkckxlbmd0aCk7CiAgICAgICAgaW5fYWRkcltfSVB2NkFkZHJMZW5ndGggLSAxXSA9IDE7CiAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKCI6OjEiLCBudWxsLCBpbl9hZGRyKTsKICAgICAgY2FzZSBfYWRkcmVzc0FueUlQdjQ6CiAgICAgICAgdmFyIGluX2FkZHIgPSBuZXcgVWludDhMaXN0KF9JUHY0QWRkckxlbmd0aCk7CiAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKCIwLjAuMC4wIiwgIjAuMC4wLjAiLCBpbl9hZGRyKTsKICAgICAgY2FzZSBfYWRkcmVzc0FueUlQdjY6CiAgICAgICAgdmFyIGluX2FkZHIgPSBuZXcgVWludDhMaXN0KF9JUHY2QWRkckxlbmd0aCk7CiAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKCI6OiIsICI6OiIsIGluX2FkZHIpOwogICAgICBkZWZhdWx0OgogICAgICAgIGFzc2VydChmYWxzZSk7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICB9CgogIC8vIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgX0ludGVybmV0QWRkcmVzcyByZXBsYWNpbmcgdGhlIGhvc3QuCiAgX0ludGVybmV0QWRkcmVzcyBfY2xvbmVXaXRoTmV3SG9zdChTdHJpbmcgaG9zdCkgewogICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKAogICAgICAgIGFkZHJlc3MsIGhvc3QsIG5ldyBVaW50OExpc3QuZnJvbUxpc3QoX2luX2FkZHIpKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmICghKG90aGVyIGlzIF9JbnRlcm5ldEFkZHJlc3MpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAob3RoZXIudHlwZSAhPSB0eXBlKSByZXR1cm4gZmFsc2U7CiAgICBib29sIGVxdWFscyA9IHRydWU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9pbl9hZGRyLmxlbmd0aCAmJiBlcXVhbHM7IGkrKykgewogICAgICBlcXVhbHMgPSBvdGhlci5faW5fYWRkcltpXSA9PSBfaW5fYWRkcltpXTsKICAgIH0KICAgIHJldHVybiBlcXVhbHM7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCByZXN1bHQgPSAxOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfaW5fYWRkci5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHQgPSAocmVzdWx0ICogMzEgKyBfaW5fYWRkcltpXSkgJiAweDNGRkZGRkZGOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiSW50ZXJuZXRBZGRyZXNzKCckYWRkcmVzcycsICR7dHlwZS5uYW1lfSkiOwogIH0KCiAgc3RhdGljIFVpbnQ4TGlzdCBfcGFyc2UoU3RyaW5nIGFkZHJlc3MpIG5hdGl2ZSAiSW50ZXJuZXRBZGRyZXNzX1BhcnNlIjsKfQoKY2xhc3MgX05ldHdvcmtJbnRlcmZhY2UgaW1wbGVtZW50cyBOZXR3b3JrSW50ZXJmYWNlIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBpbnQgaW5kZXg7CiAgZmluYWwgTGlzdDxJbnRlcm5ldEFkZHJlc3M+IGFkZHJlc3NlcyA9IFtdOwoKICBfTmV0d29ya0ludGVyZmFjZSh0aGlzLm5hbWUsIHRoaXMuaW5kZXgpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIk5ldHdvcmtJbnRlcmZhY2UoJyRuYW1lJywgJGFkZHJlc3NlcykiOwogIH0KfQoKLy8gVGhlIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSBjYW5ub3QgYmUgdXNlZCB3aXRoIGEgbWl4aW4sIGR1ZSB0byBtaXNzaW5nCi8vIGltcGxpY2l0IGNvbnN0cnVjdG9yLgpjbGFzcyBfTmF0aXZlU29ja2V0TmF0aXZlV3JhcHBlciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSB7fQoKLy8gVGhlIF9OYXRpdmVTb2NrZXQgY2xhc3MgZW5jYXBzdWxhdGVzIGFuIE9TIHNvY2tldC4KY2xhc3MgX05hdGl2ZVNvY2tldCBleHRlbmRzIF9OYXRpdmVTb2NrZXROYXRpdmVXcmFwcGVyIHdpdGggX1NlcnZpY2VPYmplY3QgewogIC8vIEJpdCBmbGFncyB1c2VkIHdoZW4gY29tbXVuaWNhdGluZyBiZXR3ZWVuIHRoZSBldmVudGhhbmRsZXIgYW5kCiAgLy8gZGFydCBjb2RlLiBUaGUgRVZFTlQgZmxhZ3MgYXJlIHVzZWQgdG8gaW5kaWNhdGUgZXZlbnRzIG9mCiAgLy8gaW50ZXJlc3Qgd2hlbiBzZW5kaW5nIGEgbWVzc2FnZSBmcm9tIGRhcnQgY29kZSB0byB0aGUKICAvLyBldmVudGhhbmRsZXIuIFdoZW4gcmVjZWl2aW5nIGEgbWVzc2FnZSBmcm9tIHRoZSBldmVudGhhbmRsZXIgdGhlCiAgLy8gRVZFTlQgZmxhZ3MgaW5kaWNhdGUgdGhlIGV2ZW50cyB0aGF0IGFjdHVhbGx5IGhhcHBlbmVkLiBUaGUKICAvLyBDT01NQU5EIGZsYWdzIGFyZSB1c2VkIHRvIHNlbmQgY29tbWFuZHMgZnJvbSBkYXJ0IHRvIHRoZQogIC8vIGV2ZW50aGFuZGxlci4gQ09NTUFORCBmbGFncyBhcmUgbmV2ZXIgcmVjZWl2ZWQgZnJvbSB0aGUKICAvLyBldmVudGhhbmRsZXIuIEFkZGl0aW9uYWwgZmxhZ3MgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgb3RoZXIKICAvLyBpbmZvcm1hdGlvbi4KICBzdGF0aWMgY29uc3QgaW50IHJlYWRFdmVudCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCB3cml0ZUV2ZW50ID0gMTsKICBzdGF0aWMgY29uc3QgaW50IGVycm9yRXZlbnQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgY2xvc2VkRXZlbnQgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgZGVzdHJveWVkRXZlbnQgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgZmlyc3RFdmVudCA9IHJlYWRFdmVudDsKICBzdGF0aWMgY29uc3QgaW50IGxhc3RFdmVudCA9IGRlc3Ryb3llZEV2ZW50OwogIHN0YXRpYyBjb25zdCBpbnQgZXZlbnRDb3VudCA9IGxhc3RFdmVudCAtIGZpcnN0RXZlbnQgKyAxOwoKICBzdGF0aWMgY29uc3QgaW50IGNsb3NlQ29tbWFuZCA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBzaHV0ZG93blJlYWRDb21tYW5kID0gOTsKICBzdGF0aWMgY29uc3QgaW50IHNodXRkb3duV3JpdGVDb21tYW5kID0gMTA7CiAgLy8gVGhlIGxvd2VyIGJpdHMgb2YgcmV0dXJuVG9rZW5Db21tYW5kIG1lc3NhZ2VzIGNvbnRhaW5zIHRoZSBudW1iZXIKICAvLyBvZiB0b2tlbnMgcmV0dXJuZWQuCiAgc3RhdGljIGNvbnN0IGludCByZXR1cm5Ub2tlbkNvbW1hbmQgPSAxMTsKICBzdGF0aWMgY29uc3QgaW50IHNldEV2ZW50TWFza0NvbW1hbmQgPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IGZpcnN0Q29tbWFuZCA9IGNsb3NlQ29tbWFuZDsKICBzdGF0aWMgY29uc3QgaW50IGxhc3RDb21tYW5kID0gc2V0RXZlbnRNYXNrQ29tbWFuZDsKCiAgLy8gVHlwZSBmbGFnIHNlbmQgdG8gdGhlIGV2ZW50aGFuZGxlciBwcm92aWRpbmcgYWRkaXRpb25hbAogIC8vIGluZm9ybWF0aW9uIG9uIHRoZSB0eXBlIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IuCiAgc3RhdGljIGNvbnN0IGludCBsaXN0ZW5pbmdTb2NrZXQgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IHBpcGVTb2NrZXQgPSAxNzsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVOb3JtYWxTb2NrZXQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZUxpc3RlbmluZ1NvY2tldCA9IDEgPDwgbGlzdGVuaW5nU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVBpcGUgPSAxIDw8IHBpcGVTb2NrZXQ7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlVHlwZU1hc2sgPSB0eXBlTGlzdGVuaW5nU29ja2V0IHwgcGlwZVNvY2tldDsKCiAgLy8gUHJvdG9jb2wgZmxhZ3MuCiAgLy8gS2VlcCBpbiBzeW5jIHdpdGggU29ja2V0VHlwZSBlbnVtIGluIHNvY2tldC5oLgogIHN0YXRpYyBjb25zdCBpbnQgdGNwU29ja2V0ID0gMTg7CiAgc3RhdGljIGNvbnN0IGludCB1ZHBTb2NrZXQgPSAxOTsKICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsU29ja2V0ID0gMjA7CiAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbFNpZ25hbFNvY2tldCA9IDIxOwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVRjcFNvY2tldCA9IDEgPDwgdGNwU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVVkcFNvY2tldCA9IDEgPDwgdWRwU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZUludGVybmFsU29ja2V0ID0gMSA8PCBpbnRlcm5hbFNvY2tldDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVJbnRlcm5hbFNpZ25hbFNvY2tldCA9IDEgPDwgaW50ZXJuYWxTaWduYWxTb2NrZXQ7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlUHJvdG9jb2xNYXNrID0gdHlwZVRjcFNvY2tldCB8CiAgICAgIHR5cGVVZHBTb2NrZXQgfAogICAgICB0eXBlSW50ZXJuYWxTb2NrZXQgfAogICAgICB0eXBlSW50ZXJuYWxTaWduYWxTb2NrZXQ7CgogIC8vIE5hdGl2ZSBwb3J0IG1lc3NhZ2VzLgogIHN0YXRpYyBjb25zdCBob3N0TmFtZUxvb2t1cE1lc3NhZ2UgPSAwOwogIHN0YXRpYyBjb25zdCBsaXN0SW50ZXJmYWNlc01lc3NhZ2UgPSAxOwogIHN0YXRpYyBjb25zdCByZXZlcnNlTG9va3VwTWVzc2FnZSA9IDI7CgogIC8vIFByb3RvY29sIGZsYWdzLgogIHN0YXRpYyBjb25zdCBpbnQgcHJvdG9jb2xJUHY0ID0gMSA8PCAwOwogIHN0YXRpYyBjb25zdCBpbnQgcHJvdG9jb2xJUHY2ID0gMSA8PCAxOwoKICBzdGF0aWMgY29uc3QgaW50IG5vcm1hbFRva2VuQmF0Y2hTaXplID0gODsKICBzdGF0aWMgY29uc3QgaW50IGxpc3RlbmluZ1Rva2VuQmF0Y2hTaXplID0gMjsKCiAgc3RhdGljIGNvbnN0IER1cmF0aW9uIF9yZXRyeUR1cmF0aW9uID0gY29uc3QgRHVyYXRpb24obWlsbGlzZWNvbmRzOiAyNTApOwogIHN0YXRpYyBjb25zdCBEdXJhdGlvbiBfcmV0cnlEdXJhdGlvbkxvb3BiYWNrID0KICAgICAgY29uc3QgRHVyYXRpb24obWlsbGlzZWNvbmRzOiAyNSk7CgogIC8vIFNvY2tldCBjbG9zZSBzdGF0ZQogIGJvb2wgaXNDbG9zZWQgPSBmYWxzZTsKICBib29sIGlzQ2xvc2luZyA9IGZhbHNlOwogIGJvb2wgaXNDbG9zZWRSZWFkID0gZmFsc2U7CiAgYm9vbCBjbG9zZWRSZWFkRXZlbnRTZW50ID0gZmFsc2U7CiAgYm9vbCBpc0Nsb3NlZFdyaXRlID0gZmFsc2U7CiAgQ29tcGxldGVyIGNsb3NlQ29tcGxldGVyID0gbmV3IENvbXBsZXRlci5zeW5jKCk7CgogIC8vIEhhbmRsZXJzIGFuZCByZWNlaXZlIHBvcnQgZm9yIHNvY2tldCBldmVudHMgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci4KICBmaW5hbCBMaXN0IGV2ZW50SGFuZGxlcnMgPSBuZXcgTGlzdChldmVudENvdW50ICsgMSk7CiAgUmF3UmVjZWl2ZVBvcnQgZXZlbnRQb3J0OwogIGJvb2wgZmxhZ3NTZW50ID0gZmFsc2U7CgogIC8vIFRoZSB0eXBlIGZsYWdzIGZvciB0aGlzIHNvY2tldC4KICBmaW5hbCBpbnQgdHlwZUZsYWdzOwoKICAvLyBIb2xkcyB0aGUgcG9ydCBvZiB0aGUgc29ja2V0LCAwIGlmIG5vdCBrbm93bi4KICBpbnQgbG9jYWxQb3J0ID0gMDsKCiAgLy8gSG9sZHMgdGhlIGFkZHJlc3MgdXNlZCB0byBjb25uZWN0IG9yIGJpbmQgdGhlIHNvY2tldC4KICBJbnRlcm5ldEFkZHJlc3MgbG9jYWxBZGRyZXNzOwoKICBpbnQgYXZhaWxhYmxlID0gMDsKCiAgaW50IHRva2VucyA9IDA7CgogIGJvb2wgc2VuZFJlYWRFdmVudHMgPSBmYWxzZTsKICBib29sIHJlYWRFdmVudElzc3VlZCA9IGZhbHNlOwoKICBib29sIHNlbmRXcml0ZUV2ZW50cyA9IGZhbHNlOwogIGJvb2wgd3JpdGVFdmVudElzc3VlZCA9IGZhbHNlOwogIGJvb2wgd3JpdGVBdmFpbGFibGUgPSBmYWxzZTsKCiAgc3RhdGljIGJvb2wgY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gZmFsc2U7CiAgX1JlYWRXcml0ZVJlc291cmNlSW5mbyByZXNvdXJjZUluZm87CgogIC8vIFRoZSBvd25lciBvYmplY3QgaXMgdGhlIG9iamVjdCB0aGF0IHRoZSBTb2NrZXQgaXMgYmVpbmcgdXNlZCBieSwgZS5nLgogIC8vIGEgSHR0cFNlcnZlciwgYSBXZWJTb2NrZXQgY29ubmVjdGlvbiwgYSBwcm9jZXNzIHBpcGUsIGV0Yy4KICBPYmplY3Qgb3duZXI7CgogIHN0YXRpYyBGdXR1cmU8TGlzdDxJbnRlcm5ldEFkZHJlc3M+PiBsb29rdXAoU3RyaW5nIGhvc3QsCiAgICAgIHtJbnRlcm5ldEFkZHJlc3NUeXBlIHR5cGU6IEludGVybmV0QWRkcmVzc1R5cGUuYW55fSkgewogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2Uuc29ja2V0TG9va3VwLCBbaG9zdCwgdHlwZS5fdmFsdWVdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHJlc3BvbnNlLCAiRmFpbGVkIGhvc3QgbG9va3VwOiAnJGhvc3QnIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnNraXAoMSkubWFwPEludGVybmV0QWRkcmVzcz4oKHJlc3VsdCkgewogICAgICAgICAgdmFyIHR5cGUgPSBuZXcgSW50ZXJuZXRBZGRyZXNzVHlwZS5fZnJvbShyZXN1bHRbMF0pOwogICAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKHJlc3VsdFsxXSwgaG9zdCwgcmVzdWx0WzJdKTsKICAgICAgICB9KS50b0xpc3QoKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPEludGVybmV0QWRkcmVzcz4gcmV2ZXJzZUxvb2t1cChJbnRlcm5ldEFkZHJlc3MgYWRkcikgewogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2Uuc29ja2V0UmV2ZXJzZUxvb2t1cCwKICAgICAgICBbKGFkZHIgYXMgX0ludGVybmV0QWRkcmVzcykuX2luX2FkZHJdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHJlc3BvbnNlLCAiRmFpbGVkIHJldmVyc2UgaG9zdCBsb29rdXAiLCBhZGRyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gKGFkZHIgYXMgX0ludGVybmV0QWRkcmVzcykuX2Nsb25lV2l0aE5ld0hvc3QocmVzcG9uc2UpOwogICAgICB9CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8TGlzdDxOZXR3b3JrSW50ZXJmYWNlPj4gbGlzdEludGVyZmFjZXMoCiAgICAgIHtib29sIGluY2x1ZGVMb29wYmFjazogZmFsc2UsCiAgICAgIGJvb2wgaW5jbHVkZUxpbmtMb2NhbDogZmFsc2UsCiAgICAgIEludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5hbnl9KSB7CiAgICByZXR1cm4gX0lPU2VydmljZS5fZGlzcGF0Y2goX0lPU2VydmljZS5zb2NrZXRMaXN0SW50ZXJmYWNlcywgW3R5cGUuX3ZhbHVlXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKGlzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihyZXNwb25zZSwgIkZhaWxlZCBsaXN0aW5nIGludGVyZmFjZXMiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbWFwID0gcmVzcG9uc2Uuc2tpcCgxKS5mb2xkKG5ldyBNYXA8U3RyaW5nLCBOZXR3b3JrSW50ZXJmYWNlPigpLAogICAgICAgICAgICAobWFwLCByZXN1bHQpIHsKICAgICAgICAgIHZhciB0eXBlID0gbmV3IEludGVybmV0QWRkcmVzc1R5cGUuX2Zyb20ocmVzdWx0WzBdKTsKICAgICAgICAgIHZhciBuYW1lID0gcmVzdWx0WzNdOwogICAgICAgICAgdmFyIGluZGV4ID0gcmVzdWx0WzRdOwogICAgICAgICAgdmFyIGFkZHJlc3MgPSBuZXcgX0ludGVybmV0QWRkcmVzcyhyZXN1bHRbMV0sICIiLCByZXN1bHRbMl0pOwogICAgICAgICAgaWYgKCFpbmNsdWRlTGlua0xvY2FsICYmIGFkZHJlc3MuaXNMaW5rTG9jYWwpIHJldHVybiBtYXA7CiAgICAgICAgICBpZiAoIWluY2x1ZGVMb29wYmFjayAmJiBhZGRyZXNzLmlzTG9vcGJhY2spIHJldHVybiBtYXA7CiAgICAgICAgICBtYXAucHV0SWZBYnNlbnQobmFtZSwgKCkgPT4gbmV3IF9OZXR3b3JrSW50ZXJmYWNlKG5hbWUsIGluZGV4KSk7CiAgICAgICAgICBtYXBbbmFtZV0uYWRkcmVzc2VzLmFkZChhZGRyZXNzKTsKICAgICAgICAgIHJldHVybiBtYXA7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIG1hcC52YWx1ZXMudG9MaXN0KCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxfTmF0aXZlU29ja2V0Pj4gc3RhcnRDb25uZWN0KAogICAgICBob3N0LCBpbnQgcG9ydCwgc291cmNlQWRkcmVzcykgewogICAgX3Rocm93T25CYWRQb3J0KHBvcnQpOwogICAgaWYgKHNvdXJjZUFkZHJlc3MgIT0gbnVsbCAmJiBzb3VyY2VBZGRyZXNzIGlzISBfSW50ZXJuZXRBZGRyZXNzKSB7CiAgICAgIGlmIChzb3VyY2VBZGRyZXNzIGlzIFN0cmluZykgewogICAgICAgIHNvdXJjZUFkZHJlc3MgPSBuZXcgSW50ZXJuZXRBZGRyZXNzKHNvdXJjZUFkZHJlc3MpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShob3N0KS50aGVuKChob3N0KSB7CiAgICAgIGlmIChob3N0IGlzIF9JbnRlcm5ldEFkZHJlc3MpIHJldHVybiBbaG9zdF07CiAgICAgIHJldHVybiBsb29rdXAoaG9zdCkudGhlbigoYWRkcmVzc2VzKSB7CiAgICAgICAgaWYgKGFkZHJlc3Nlcy5pc0VtcHR5KSB7CiAgICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihudWxsLCAiRmFpbGVkIGhvc3QgbG9va3VwOiAnJGhvc3QnIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRyZXNzZXM7CiAgICAgIH0pOwogICAgfSkudGhlbigoYWRkcmVzc2VzKSB7CiAgICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPF9OYXRpdmVTb2NrZXQ+KCk7CiAgICAgIHZhciBpdCA9IChhZGRyZXNzZXMgYXMgTGlzdDxJbnRlcm5ldEFkZHJlc3M+KS5pdGVyYXRvcjsKICAgICAgdmFyIGVycm9yID0gbnVsbDsKICAgICAgdmFyIGNvbm5lY3RpbmcgPSBuZXcgSGFzaE1hcCgpOwoKICAgICAgdm9pZCBjb25uZWN0TmV4dCgpIHsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgICAgIGlmIChjb25uZWN0aW5nLmlzRW1wdHkpIHsKICAgICAgICAgICAgYXNzZXJ0KGVycm9yICE9IG51bGwpOwogICAgICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZpbmFsIF9JbnRlcm5ldEFkZHJlc3MgYWRkcmVzcyA9IGl0LmN1cnJlbnQ7CiAgICAgICAgdmFyIHNvY2tldCA9IG5ldyBfTmF0aXZlU29ja2V0Lm5vcm1hbCgpOwogICAgICAgIHNvY2tldC5sb2NhbEFkZHJlc3MgPSBhZGRyZXNzOwogICAgICAgIHZhciByZXN1bHQ7CiAgICAgICAgaWYgKHNvdXJjZUFkZHJlc3MgPT0gbnVsbCkgewogICAgICAgICAgcmVzdWx0ID0gc29ja2V0Lm5hdGl2ZUNyZWF0ZUNvbm5lY3QoYWRkcmVzcy5faW5fYWRkciwgcG9ydCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChzb3VyY2VBZGRyZXNzIGlzIF9JbnRlcm5ldEFkZHJlc3MpOwogICAgICAgICAgcmVzdWx0ID0gc29ja2V0Lm5hdGl2ZUNyZWF0ZUJpbmRDb25uZWN0KAogICAgICAgICAgICAgIGFkZHJlc3MuX2luX2FkZHIsIHBvcnQsIHNvdXJjZUFkZHJlc3MuX2luX2FkZHIpOwogICAgICAgIH0KICAgICAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgICAgIC8vIEtlZXAgZmlyc3QgZXJyb3IsIGlmIHByZXNlbnQuCiAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgICBpbnQgZXJyb3JDb2RlID0gcmVzdWx0LmVycm9yQ29kZTsKICAgICAgICAgICAgaWYgKHNvdXJjZUFkZHJlc3MgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgZXJyb3JDb2RlICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIHNvY2tldC5pc0JpbmRFcnJvcihlcnJvckNvZGUpKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihyZXN1bHQsICJCaW5kIGZhaWxlZCIsIHNvdXJjZUFkZHJlc3MpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVycm9yID0gY3JlYXRlRXJyb3IocmVzdWx0LCAiQ29ubmVjdGlvbiBmYWlsZWQiLCBhZGRyZXNzLCBwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29ubmVjdE5leHQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUXVlcnkgdGhlIGxvY2FsIHBvcnQgZm9yIGVycm9yIG1lc3NhZ2VzLgogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgc29ja2V0LnBvcnQ7CiAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihlLCAiQ29ubmVjdGlvbiBmYWlsZWQiLCBhZGRyZXNzLCBwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25uZWN0TmV4dCgpOwogICAgICAgICAgfQogICAgICAgICAgLy8gU2V0IHVwIHRpbWVyIGZvciB3aGVuIHdlIHNob3VsZCByZXRyeSB0aGUgbmV4dCBhZGRyZXNzCiAgICAgICAgICAvLyAoaWYgYW55KS4KICAgICAgICAgIHZhciBkdXJhdGlvbiA9CiAgICAgICAgICAgICAgYWRkcmVzcy5pc0xvb3BiYWNrID8gX3JldHJ5RHVyYXRpb25Mb29wYmFjayA6IF9yZXRyeUR1cmF0aW9uOwogICAgICAgICAgdmFyIHRpbWVyID0gbmV3IFRpbWVyKGR1cmF0aW9uLCBjb25uZWN0TmV4dCk7CiAgICAgICAgICBzZXR1cFJlc291cmNlSW5mbyhzb2NrZXQpOwoKICAgICAgICAgIGNvbm5lY3Rpbmdbc29ja2V0XSA9IHRpbWVyOwogICAgICAgICAgLy8gU2V0dXAgaGFuZGxlcnMgZm9yIHJlY2VpdmluZyB0aGUgZmlyc3Qgd3JpdGUgZXZlbnQgd2hpY2gKICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQgdGhlIHNvY2tldCBpcyBmdWxseSBjb25uZWN0ZWQuCiAgICAgICAgICBzb2NrZXQuc2V0SGFuZGxlcnMod3JpdGU6ICgpIHsKICAgICAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICAgIGNvbm5lY3RpbmcucmVtb3ZlKHNvY2tldCk7CiAgICAgICAgICAgIC8vIEZyb20gJ21hbiAyIGNvbm5lY3QnOgogICAgICAgICAgICAvLyBBZnRlciBzZWxlY3QoMikgaW5kaWNhdGVzIHdyaXRhYmlsaXR5LCB1c2UgZ2V0c29ja29wdCgyKSB0byByZWFkCiAgICAgICAgICAgIC8vIHRoZSBTT19FUlJPUiBvcHRpb24gYXQgbGV2ZWwgU09MX1NPQ0tFVCB0byBkZXRlcm1pbmUgd2hldGhlcgogICAgICAgICAgICAvLyBjb25uZWN0KCkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAoU09fRVJST1IgaXMgemVybykgb3IKICAgICAgICAgICAgLy8gdW5zdWNjZXNzZnVsbHkuCiAgICAgICAgICAgIE9TRXJyb3Igb3NFcnJvciA9IHNvY2tldC5uYXRpdmVHZXRFcnJvcigpOwogICAgICAgICAgICBpZiAob3NFcnJvci5lcnJvckNvZGUgIT0gMCkgewogICAgICAgICAgICAgIHNvY2tldC5jbG9zZSgpOwogICAgICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSBlcnJvciA9IG9zRXJyb3I7CiAgICAgICAgICAgICAgaWYgKGNvbm5lY3RpbmcuaXNFbXB0eSkgY29ubmVjdE5leHQoKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKHNvY2tldCk7CiAgICAgICAgICAgIGNvbm5lY3RpbmcuZm9yRWFjaCgocywgdCkgewogICAgICAgICAgICAgIHQuY2FuY2VsKCk7CiAgICAgICAgICAgICAgcy5jbG9zZSgpOwogICAgICAgICAgICAgIHMuc2V0SGFuZGxlcnMoKTsKICAgICAgICAgICAgICBzLnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbm5lY3RpbmcuY2xlYXIoKTsKICAgICAgICAgIH0sIGVycm9yOiAoZSwgc3QpIHsKICAgICAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICAgIHNvY2tldC5jbG9zZSgpOwogICAgICAgICAgICAvLyBLZWVwIGZpcnN0IGVycm9yLCBpZiBwcmVzZW50LgogICAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgZXJyb3IgPSBlOwogICAgICAgICAgICBjb25uZWN0aW5nLnJlbW92ZShzb2NrZXQpOwogICAgICAgICAgICBpZiAoY29ubmVjdGluZy5pc0VtcHR5KSBjb25uZWN0TmV4dCgpOwogICAgICAgICAgfSk7CiAgICAgICAgICBzb2NrZXQuc2V0TGlzdGVuaW5nKHJlYWQ6IGZhbHNlLCB3cml0ZTogdHJ1ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICB2b2lkIG9uQ2FuY2VsKCkgewogICAgICAgIGNvbm5lY3RpbmcuZm9yRWFjaCgocywgdCkgewogICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgIHMuY2xvc2UoKTsKICAgICAgICAgIHMuc2V0SGFuZGxlcnMoKTsKICAgICAgICAgIHMuc2V0TGlzdGVuaW5nKHJlYWQ6IGZhbHNlLCB3cml0ZTogZmFsc2UpOwogICAgICAgICAgaWYgKGVycm9yID09IG51bGwpIHsKICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihudWxsLAogICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24gYXR0ZW1wdCBjYW5jZWxsZWQsIGhvc3Q6ICR7aG9zdH0sIHBvcnQ6ICR7cG9ydH0iKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjb25uZWN0aW5nLmNsZWFyKCk7CiAgICAgICAgaWYgKCFjb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGNvbm5lY3ROZXh0KCk7CiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRhc2s8X05hdGl2ZVNvY2tldD4uXygKICAgICAgICAgIHNvY2tldDogY29tcGxldGVyLmZ1dHVyZSwgb25DYW5jZWw6IG9uQ2FuY2VsKTsKICAgIH0pOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxfTmF0aXZlU29ja2V0PiBjb25uZWN0KAogICAgICBob3N0LCBpbnQgcG9ydCwgc291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dCkgewogICAgcmV0dXJuIHN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzKQogICAgICAgIC50aGVuKChDb25uZWN0aW9uVGFzazxfTmF0aXZlU29ja2V0PiB0YXNrKSB7CiAgICAgIEZ1dHVyZTxfTmF0aXZlU29ja2V0PiBzb2NrZXRGdXR1cmUgPSB0YXNrLnNvY2tldDsKICAgICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkgewogICAgICAgIHNvY2tldEZ1dHVyZSA9IHNvY2tldEZ1dHVyZS50aW1lb3V0KHRpbWVvdXQsIG9uVGltZW91dDogKCkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICAgIHRocm93IGNyZWF0ZUVycm9yKAogICAgICAgICAgICAgIG51bGwsICJDb25uZWN0aW9uIHRpbWVkIG91dCwgaG9zdDogJHtob3N0fSwgcG9ydDogJHtwb3J0fSIpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBzb2NrZXRGdXR1cmU7CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8X0ludGVybmV0QWRkcmVzcz4gX3Jlc29sdmVIb3N0KGhvc3QpIGFzeW5jIHsKICAgIGlmIChob3N0IGlzIF9JbnRlcm5ldEFkZHJlc3MpIHsKICAgICAgcmV0dXJuIGhvc3Q7CiAgICB9IGVsc2UgewogICAgICBmaW5hbCBsaXN0ID0gYXdhaXQgbG9va3VwKGhvc3QpOwogICAgICBpZiAobGlzdC5pc0VtcHR5KSB7CiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IobnVsbCwgIkZhaWxlZCBob3N0IGxvb2t1cDogJyRob3N0JyIpOwogICAgICB9CiAgICAgIHJldHVybiBsaXN0LmZpcnN0IGFzIF9JbnRlcm5ldEFkZHJlc3M7CiAgICB9CiAgfQoKICBzdGF0aWMgRnV0dXJlPF9OYXRpdmVTb2NrZXQ+IGJpbmQoCiAgICAgIGhvc3QsIGludCBwb3J0LCBpbnQgYmFja2xvZywgYm9vbCB2Nk9ubHksIGJvb2wgc2hhcmVkKSBhc3luYyB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CgogICAgZmluYWwgYWRkcmVzcyA9IGF3YWl0IF9yZXNvbHZlSG9zdChob3N0KTsKCiAgICB2YXIgc29ja2V0ID0gbmV3IF9OYXRpdmVTb2NrZXQubGlzdGVuKCk7CiAgICBzb2NrZXQubG9jYWxBZGRyZXNzID0gYWRkcmVzczsKICAgIHZhciByZXN1bHQgPSBzb2NrZXQubmF0aXZlQ3JlYXRlQmluZExpc3RlbigKICAgICAgICBhZGRyZXNzLl9pbl9hZGRyLCBwb3J0LCBiYWNrbG9nLCB2Nk9ubHksIHNoYXJlZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2ZXIgc29ja2V0IiwKICAgICAgICAgIG9zRXJyb3I6IHJlc3VsdCwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9CiAgICBpZiAocG9ydCAhPSAwKSBzb2NrZXQubG9jYWxQb3J0ID0gcG9ydDsKICAgIHNldHVwUmVzb3VyY2VJbmZvKHNvY2tldCk7CiAgICBzb2NrZXQuY29ubmVjdFRvRXZlbnRIYW5kbGVyKCk7CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgc3RhdGljIHZvaWQgc2V0dXBSZXNvdXJjZUluZm8oX05hdGl2ZVNvY2tldCBzb2NrZXQpIHsKICAgIHNvY2tldC5yZXNvdXJjZUluZm8gPSBuZXcgX1NvY2tldFJlc291cmNlSW5mbyhzb2NrZXQpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxfTmF0aXZlU29ja2V0PiBiaW5kRGF0YWdyYW0oCiAgICAgIGhvc3QsIGludCBwb3J0LCBib29sIHJldXNlQWRkcmVzcywgYm9vbCByZXVzZVBvcnQsIGludCB0dGwpIGFzeW5jIHsKICAgIF90aHJvd09uQmFkUG9ydChwb3J0KTsKICAgIF90aHJvd09uQmFkVHRsKHR0bCk7CgogICAgZmluYWwgYWRkcmVzcyA9IGF3YWl0IF9yZXNvbHZlSG9zdChob3N0KTsKCiAgICB2YXIgc29ja2V0ID0gbmV3IF9OYXRpdmVTb2NrZXQuZGF0YWdyYW0oYWRkcmVzcyk7CiAgICB2YXIgcmVzdWx0ID0gc29ja2V0Lm5hdGl2ZUNyZWF0ZUJpbmREYXRhZ3JhbSgKICAgICAgICBhZGRyZXNzLl9pbl9hZGRyLCBwb3J0LCByZXVzZUFkZHJlc3MsIHJldXNlUG9ydCwgdHRsKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIGRhdGFncmFtIHNvY2tldCIsCiAgICAgICAgICBvc0Vycm9yOiByZXN1bHQsIGFkZHJlc3M6IGFkZHJlc3MsIHBvcnQ6IHBvcnQpOwogICAgfQogICAgaWYgKHBvcnQgIT0gMCkgc29ja2V0LmxvY2FsUG9ydCA9IHBvcnQ7CiAgICBzZXR1cFJlc291cmNlSW5mbyhzb2NrZXQpOwogICAgcmV0dXJuIHNvY2tldDsKICB9CgogIF9OYXRpdmVTb2NrZXQuZGF0YWdyYW0odGhpcy5sb2NhbEFkZHJlc3MpCiAgICAgIDogdHlwZUZsYWdzID0gdHlwZU5vcm1hbFNvY2tldCB8IHR5cGVVZHBTb2NrZXQ7CgogIF9OYXRpdmVTb2NrZXQubm9ybWFsKCkgOiB0eXBlRmxhZ3MgPSB0eXBlTm9ybWFsU29ja2V0IHwgdHlwZVRjcFNvY2tldDsKCiAgX05hdGl2ZVNvY2tldC5saXN0ZW4oKSA6IHR5cGVGbGFncyA9IHR5cGVMaXN0ZW5pbmdTb2NrZXQgfCB0eXBlVGNwU29ja2V0IHsKICAgIGlzQ2xvc2VkV3JpdGUgPSB0cnVlOwogIH0KCiAgX05hdGl2ZVNvY2tldC5waXBlKCkgOiB0eXBlRmxhZ3MgPSB0eXBlUGlwZTsKCiAgX05hdGl2ZVNvY2tldC5fd2F0Y2hDb21tb24oaW50IGlkLCBpbnQgdHlwZSkKICAgICAgOiB0eXBlRmxhZ3MgPSB0eXBlTm9ybWFsU29ja2V0IHwgdHlwZSB7CiAgICBpc0Nsb3NlZFdyaXRlID0gdHJ1ZTsKICAgIG5hdGl2ZVNldFNvY2tldElkKGlkLCB0eXBlRmxhZ3MpOwogIH0KCiAgX05hdGl2ZVNvY2tldC53YXRjaFNpZ25hbChpbnQgaWQpCiAgICAgIDogdGhpcy5fd2F0Y2hDb21tb24oaWQsIHR5cGVJbnRlcm5hbFNpZ25hbFNvY2tldCk7CgogIF9OYXRpdmVTb2NrZXQud2F0Y2goaW50IGlkKSA6IHRoaXMuX3dhdGNoQ29tbW9uKGlkLCB0eXBlSW50ZXJuYWxTb2NrZXQpOwoKICBib29sIGdldCBpc0xpc3RlbmluZyA9PiAodHlwZUZsYWdzICYgdHlwZUxpc3RlbmluZ1NvY2tldCkgIT0gMDsKICBib29sIGdldCBpc1BpcGUgPT4gKHR5cGVGbGFncyAmIHR5cGVQaXBlKSAhPSAwOwogIGJvb2wgZ2V0IGlzSW50ZXJuYWwgPT4gKHR5cGVGbGFncyAmIHR5cGVJbnRlcm5hbFNvY2tldCkgIT0gMDsKICBib29sIGdldCBpc0ludGVybmFsU2lnbmFsID0+ICh0eXBlRmxhZ3MgJiB0eXBlSW50ZXJuYWxTaWduYWxTb2NrZXQpICE9IDA7CiAgYm9vbCBnZXQgaXNUY3AgPT4gKHR5cGVGbGFncyAmIHR5cGVUY3BTb2NrZXQpICE9IDA7CiAgYm9vbCBnZXQgaXNVZHAgPT4gKHR5cGVGbGFncyAmIHR5cGVVZHBTb2NrZXQpICE9IDA7CgogIE1hcCBfdG9KU09OKGJvb2wgcmVmKSA9PiB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCk7CiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVQYXRoID0+IHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoKTsKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZU5hbWUgPT4gdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigpOwoKICBVaW50OExpc3QgcmVhZChpbnQgbGVuKSB7CiAgICBpZiAobGVuICE9IG51bGwgJiYgbGVuIDw9IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIklsbGVnYWwgbGVuZ3RoICRsZW4iKTsKICAgIH0KICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHJldHVybiBudWxsOwogICAgbGVuID0gbWluKGF2YWlsYWJsZSwgbGVuID09IG51bGwgPyBhdmFpbGFibGUgOiBsZW4pOwogICAgaWYgKGxlbiA9PSAwKSByZXR1cm4gbnVsbDsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVSZWFkKGxlbik7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgcmVwb3J0RXJyb3IocmVzdWx0LCBTdGFja1RyYWNlLmN1cnJlbnQsICJSZWFkIGZhaWxlZCIpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICBhdmFpbGFibGUgLT0gcmVzdWx0Lmxlbmd0aDsKICAgICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgICAgcmVzb3VyY2VJbmZvLnRvdGFsUmVhZCArPSByZXN1bHQubGVuZ3RoOwogICAgICB9CiAgICB9CiAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uZGlkUmVhZCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIERhdGFncmFtIHJlY2VpdmUoKSB7CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSByZXR1cm4gbnVsbDsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVSZWN2RnJvbSgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHJlcG9ydEVycm9yKHJlc3VsdCwgU3RhY2tUcmFjZS5jdXJyZW50LCAiUmVjZWl2ZSBmYWlsZWQiKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgLy8gUmVhZCB0aGUgbmV4dCBhdmFpbGFibGUuIEF2YWlsYWJsZSBpcyBvbmx5IGZvciB0aGUgbmV4dCBkYXRhZ3JhbSwgbm90CiAgICAgIC8vIHRoZSBzdW0gb2YgYWxsIGRhdGFncmFtcyBwZW5kaW5nLCBzbyB3ZSBuZWVkIHRvIGNhbGwgYWZ0ZXIgZWFjaAogICAgICAvLyByZWNlaXZlLiBJZiBhdmFpbGFibGUgYmVjb21lcyA+IDAsIHRoZSBfTmF0aXZlU29ja2V0IHdpbGwgY29udGludWUgdG8KICAgICAgLy8gZW1pdCByZWFkIGV2ZW50cy4KICAgICAgYXZhaWxhYmxlID0gbmF0aXZlQXZhaWxhYmxlKCk7CiAgICAgIC8vIFRPRE8ocmljb3cpOiBSZW1vdmUgd2hlbiB3ZSB0cmFjayBpbnRlcm5hbCBhbmQgcGlwZSB1c2VzLgogICAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwgfHwgaXNQaXBlIHx8IGlzSW50ZXJuYWwgfHwgaXNJbnRlcm5hbFNpZ25hbCk7CiAgICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICAgIHJlc291cmNlSW5mby50b3RhbFJlYWQgKz0gcmVzdWx0LmRhdGEubGVuZ3RoOwogICAgICB9CiAgICB9CiAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uZGlkUmVhZCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGludCB3cml0ZShMaXN0PGludD4gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMpIHsKICAgIGlmIChidWZmZXIgaXMhIExpc3QpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICBpZiAob2Zmc2V0ID09IG51bGwpIG9mZnNldCA9IDA7CiAgICBpZiAoYnl0ZXMgPT0gbnVsbCkgewogICAgICBpZiAob2Zmc2V0ID4gYnVmZmVyLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKG9mZnNldCk7CiAgICAgIH0KICAgICAgYnl0ZXMgPSBidWZmZXIubGVuZ3RoIC0gb2Zmc2V0OwogICAgfQogICAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKG9mZnNldCk7CiAgICBpZiAoYnl0ZXMgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShieXRlcyk7CiAgICBpZiAoKG9mZnNldCArIGJ5dGVzKSA+IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUob2Zmc2V0ICsgYnl0ZXMpOwogICAgfQogICAgaWYgKG9mZnNldCBpcyEgaW50IHx8IGJ5dGVzIGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlIG9uIFNvY2tldCIpOwogICAgfQogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgcmV0dXJuIDA7CiAgICBpZiAoYnl0ZXMgPT0gMCkgcmV0dXJuIDA7CiAgICBfQnVmZmVyQW5kU3RhcnQgYnVmZmVyQW5kU3RhcnQgPQogICAgICAgIF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoYnVmZmVyLCBvZmZzZXQsIG9mZnNldCArIGJ5dGVzKTsKICAgIHZhciByZXN1bHQgPQogICAgICAgIG5hdGl2ZVdyaXRlKGJ1ZmZlckFuZFN0YXJ0LmJ1ZmZlciwgYnVmZmVyQW5kU3RhcnQuc3RhcnQsIGJ5dGVzKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICBPU0Vycm9yIG9zRXJyb3IgPSByZXN1bHQ7CiAgICAgIFN0YWNrVHJhY2Ugc3QgPSBTdGFja1RyYWNlLmN1cnJlbnQ7CiAgICAgIHNjaGVkdWxlTWljcm90YXNrKCgpID0+IHJlcG9ydEVycm9yKG9zRXJyb3IsIHN0LCAiV3JpdGUgZmFpbGVkIikpOwogICAgICByZXN1bHQgPSAwOwogICAgfQogICAgLy8gVGhlIHJlc3VsdCBtYXkgYmUgbmVnYXRpdmUsIGlmIHdlIGZvcmNlZCBhIHNob3J0IHdyaXRlIGZvciB0ZXN0aW5nCiAgICAvLyBwdXJwb3NlLiBJbiBzdWNoIGNhc2UsIGRvbid0IG1hcmsgd3JpdGVBdmFpbGFibGUgYXMgZmFsc2UsIGFzIHdlIGRvbid0CiAgICAvLyBrbm93IGlmIHdlJ2xsIHJlY2VpdmUgYW4gZXZlbnQuIEl0J3MgYmV0dGVyIHRvIGp1c3QgcmV0cnkuCiAgICBpZiAocmVzdWx0ID49IDAgJiYgcmVzdWx0IDwgYnl0ZXMpIHsKICAgICAgd3JpdGVBdmFpbGFibGUgPSBmYWxzZTsKICAgIH0KICAgIC8vIE5lZ2F0ZSB0aGUgcmVzdWx0LCBhcyBzdGF0ZWQgYWJvdmUuCiAgICBpZiAocmVzdWx0IDwgMCkgcmVzdWx0ID0gLXJlc3VsdDsKICAgIC8vIFRPRE8ocmljb3cpOiBSZW1vdmUgd2hlbiB3ZSB0cmFjayBpbnRlcm5hbCBhbmQgcGlwZSB1c2VzLgogICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsIHx8IGlzUGlwZSB8fCBpc0ludGVybmFsIHx8IGlzSW50ZXJuYWxTaWduYWwpOwogICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgIHJlc291cmNlSW5mby5hZGRXcml0ZShyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGludCBzZW5kKExpc3Q8aW50PiBidWZmZXIsIGludCBvZmZzZXQsIGludCBieXRlcywgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MsCiAgICAgIGludCBwb3J0KSB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSByZXR1cm4gMDsKICAgIF9CdWZmZXJBbmRTdGFydCBidWZmZXJBbmRTdGFydCA9CiAgICAgICAgX2Vuc3VyZUZhc3RBbmRTZXJpYWxpemFibGVCeXRlRGF0YShidWZmZXIsIG9mZnNldCwgYnl0ZXMpOwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZVNlbmRUbyhidWZmZXJBbmRTdGFydC5idWZmZXIsIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0LAogICAgICAgIGJ5dGVzLCAoYWRkcmVzcyBhcyBfSW50ZXJuZXRBZGRyZXNzKS5faW5fYWRkciwgcG9ydCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgT1NFcnJvciBvc0Vycm9yID0gcmVzdWx0OwogICAgICBTdGFja1RyYWNlIHN0ID0gU3RhY2tUcmFjZS5jdXJyZW50OwogICAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSA9PiByZXBvcnRFcnJvcihvc0Vycm9yLCBzdCwgIlNlbmQgZmFpbGVkIikpOwogICAgICByZXN1bHQgPSAwOwogICAgfQogICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwgfHwgaXNQaXBlIHx8IGlzSW50ZXJuYWwgfHwgaXNJbnRlcm5hbFNpZ25hbCk7CiAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgcmVzb3VyY2VJbmZvLmFkZFdyaXRlKHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgX05hdGl2ZVNvY2tldCBhY2NlcHQoKSB7CiAgICAvLyBEb24ndCBpc3N1ZSBhY2NlcHQgaWYgd2UncmUgY2xvc2luZy4KICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHJldHVybiBudWxsOwogICAgYXNzZXJ0KGF2YWlsYWJsZSA+IDApOwogICAgYXZhaWxhYmxlLS07CiAgICB0b2tlbnMrKzsKICAgIHJldHVyblRva2VucyhsaXN0ZW5pbmdUb2tlbkJhdGNoU2l6ZSk7CiAgICB2YXIgc29ja2V0ID0gbmV3IF9OYXRpdmVTb2NrZXQubm9ybWFsKCk7CiAgICBpZiAobmF0aXZlQWNjZXB0KHNvY2tldCkgIT0gdHJ1ZSkgcmV0dXJuIG51bGw7CiAgICBzb2NrZXQubG9jYWxQb3J0ID0gbG9jYWxQb3J0OwogICAgc29ja2V0LmxvY2FsQWRkcmVzcyA9IGFkZHJlc3M7CiAgICBzZXR1cFJlc291cmNlSW5mbyhzb2NrZXQpOwogICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwgfHwgaXNQaXBlIHx8IGlzSW50ZXJuYWwgfHwgaXNJbnRlcm5hbFNpZ25hbCk7CiAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgLy8gV2UgdHJhY2sgdGhpcyBhcyByZWFkIG9uZSBieXRlLgogICAgICByZXNvdXJjZUluZm8uYWRkUmVhZCgxKTsKICAgIH0KICAgIHJldHVybiBzb2NrZXQ7CiAgfQoKICBpbnQgZ2V0IHBvcnQgewogICAgaWYgKGxvY2FsUG9ydCAhPSAwKSByZXR1cm4gbG9jYWxQb3J0OwogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZUdldFBvcnQoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgdGhyb3cgcmVzdWx0OwogICAgcmV0dXJuIGxvY2FsUG9ydCA9IHJlc3VsdDsKICB9CgogIGludCBnZXQgcmVtb3RlUG9ydCB7CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlR2V0UmVtb3RlUGVlcigpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB0aHJvdyByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0WzFdOwogIH0KCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzID0+IGxvY2FsQWRkcmVzczsKCiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzIHsKICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVHZXRSZW1vdGVQZWVyKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHRocm93IHJlc3VsdDsKICAgIHZhciBhZGRyID0gcmVzdWx0WzBdOwogICAgdmFyIHR5cGUgPSBuZXcgSW50ZXJuZXRBZGRyZXNzVHlwZS5fZnJvbShhZGRyWzBdKTsKICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcyhhZGRyWzFdLCBudWxsLCBhZGRyWzJdKTsKICB9CgogIHZvaWQgaXNzdWVSZWFkRXZlbnQoKSB7CiAgICBpZiAoY2xvc2VkUmVhZEV2ZW50U2VudCkgcmV0dXJuOwogICAgaWYgKHJlYWRFdmVudElzc3VlZCkgcmV0dXJuOwogICAgcmVhZEV2ZW50SXNzdWVkID0gdHJ1ZTsKICAgIHZvaWQgaXNzdWUoKSB7CiAgICAgIHJlYWRFdmVudElzc3VlZCA9IGZhbHNlOwogICAgICBpZiAoaXNDbG9zaW5nKSByZXR1cm47CiAgICAgIGlmICghc2VuZFJlYWRFdmVudHMpIHJldHVybjsKICAgICAgaWYgKGF2YWlsYWJsZSA9PSAwKSB7CiAgICAgICAgaWYgKGlzQ2xvc2VkUmVhZCAmJiAhY2xvc2VkUmVhZEV2ZW50U2VudCkgewogICAgICAgICAgaWYgKGlzQ2xvc2VkV3JpdGUpIGNsb3NlKCk7CiAgICAgICAgICB2YXIgaGFuZGxlciA9IGV2ZW50SGFuZGxlcnNbY2xvc2VkRXZlbnRdOwogICAgICAgICAgaWYgKGhhbmRsZXIgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgY2xvc2VkUmVhZEV2ZW50U2VudCA9IHRydWU7CiAgICAgICAgICBoYW5kbGVyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgaGFuZGxlciA9IGV2ZW50SGFuZGxlcnNbcmVhZEV2ZW50XTsKICAgICAgaWYgKGhhbmRsZXIgPT0gbnVsbCkgcmV0dXJuOwogICAgICByZWFkRXZlbnRJc3N1ZWQgPSB0cnVlOwogICAgICBoYW5kbGVyKCk7CiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGlzc3VlKTsKICAgIH0KCiAgICBzY2hlZHVsZU1pY3JvdGFzayhpc3N1ZSk7CiAgfQoKICB2b2lkIGlzc3VlV3JpdGVFdmVudCh7Ym9vbCBkZWxheWVkOiB0cnVlfSkgewogICAgaWYgKHdyaXRlRXZlbnRJc3N1ZWQpIHJldHVybjsKICAgIGlmICghd3JpdGVBdmFpbGFibGUpIHJldHVybjsKICAgIHZvaWQgaXNzdWUoKSB7CiAgICAgIHdyaXRlRXZlbnRJc3N1ZWQgPSBmYWxzZTsKICAgICAgaWYgKCF3cml0ZUF2YWlsYWJsZSkgcmV0dXJuOwogICAgICBpZiAoaXNDbG9zaW5nKSByZXR1cm47CiAgICAgIGlmICghc2VuZFdyaXRlRXZlbnRzKSByZXR1cm47CiAgICAgIHNlbmRXcml0ZUV2ZW50cyA9IGZhbHNlOwogICAgICB2YXIgaGFuZGxlciA9IGV2ZW50SGFuZGxlcnNbd3JpdGVFdmVudF07CiAgICAgIGlmIChoYW5kbGVyID09IG51bGwpIHJldHVybjsKICAgICAgaGFuZGxlcigpOwogICAgfQoKICAgIGlmIChkZWxheWVkKSB7CiAgICAgIHdyaXRlRXZlbnRJc3N1ZWQgPSB0cnVlOwogICAgICBzY2hlZHVsZU1pY3JvdGFzayhpc3N1ZSk7CiAgICB9IGVsc2UgewogICAgICBpc3N1ZSgpOwogICAgfQogIH0KCiAgLy8gTXVsdGlwbGV4ZXMgc29ja2V0IGV2ZW50cyB0byB0aGUgc29ja2V0IGhhbmRsZXJzLgogIHZvaWQgbXVsdGlwbGV4KE9iamVjdCBldmVudHNPYmopIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogd2hlbiBpc3N1ZSAjMzEzMDUgaXMgZml4ZWQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNpbXBseQogICAgLy8gZGVjbGFyZSBgZXZlbnRzYCBhcyBhIGBjb3ZhcmlhbnQgaW50YCBwYXJhbWV0ZXIuCiAgICBpbnQgZXZlbnRzID0gZXZlbnRzT2JqOwogICAgZm9yIChpbnQgaSA9IGZpcnN0RXZlbnQ7IGkgPD0gbGFzdEV2ZW50OyBpKyspIHsKICAgICAgaWYgKCgoZXZlbnRzICYgKDEgPDwgaSkpICE9IDApKSB7CiAgICAgICAgaWYgKChpID09IGNsb3NlZEV2ZW50IHx8IGkgPT0gcmVhZEV2ZW50KSAmJiBpc0Nsb3NlZFJlYWQpIGNvbnRpbnVlOwogICAgICAgIGlmIChpc0Nsb3NpbmcgJiYgaSAhPSBkZXN0cm95ZWRFdmVudCkgY29udGludWU7CiAgICAgICAgaWYgKGkgPT0gY2xvc2VkRXZlbnQgJiYgIWlzTGlzdGVuaW5nICYmICFpc0Nsb3NpbmcgJiYgIWlzQ2xvc2VkKSB7CiAgICAgICAgICBpc0Nsb3NlZFJlYWQgPSB0cnVlOwogICAgICAgICAgaXNzdWVSZWFkRXZlbnQoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGkgPT0gd3JpdGVFdmVudCkgewogICAgICAgICAgd3JpdGVBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgaXNzdWVXcml0ZUV2ZW50KGRlbGF5ZWQ6IGZhbHNlKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGkgPT0gcmVhZEV2ZW50KSB7CiAgICAgICAgICBpZiAoaXNMaXN0ZW5pbmcpIHsKICAgICAgICAgICAgYXZhaWxhYmxlKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhdmFpbGFibGUgPSBuYXRpdmVBdmFpbGFibGUoKTsKICAgICAgICAgICAgaXNzdWVSZWFkRXZlbnQoKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgaGFuZGxlciA9IGV2ZW50SGFuZGxlcnNbaV07CiAgICAgICAgaWYgKGkgPT0gZGVzdHJveWVkRXZlbnQpIHsKICAgICAgICAgIGFzc2VydChpc0Nsb3NpbmcpOwogICAgICAgICAgYXNzZXJ0KCFpc0Nsb3NlZCk7CiAgICAgICAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlL3VwZGF0ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICAgcmVzb3VyY2VJbmZvICE9IG51bGwgfHwgaXNQaXBlIHx8IGlzSW50ZXJuYWwgfHwgaXNJbnRlcm5hbFNpZ25hbCk7CiAgICAgICAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgICAgICAgX1NvY2tldFJlc291cmNlSW5mby5Tb2NrZXRDbG9zZWQocmVzb3VyY2VJbmZvKTsKICAgICAgICAgIH0KICAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKICAgICAgICAgIGNsb3NlQ29tcGxldGVyLmNvbXBsZXRlKCk7CiAgICAgICAgICBkaXNjb25uZWN0RnJvbUV2ZW50SGFuZGxlcigpOwogICAgICAgICAgaWYgKGhhbmRsZXIgIT0gbnVsbCkgaGFuZGxlcigpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoaSA9PSBlcnJvckV2ZW50KSB7CiAgICAgICAgICBpZiAoIWlzQ2xvc2luZykgewogICAgICAgICAgICByZXBvcnRFcnJvcihuYXRpdmVHZXRFcnJvcigpLCBudWxsLCAiIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghaXNDbG9zZWQpIHsKICAgICAgICAgIC8vIElmIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCByaWdodCBhZnRlciBpdCdzIGFjY2VwdGVkLCB0aGVyZSdzIGEKICAgICAgICAgIC8vIGNoYW5jZSB0aGUgY2xvc2UtaGFuZGxlciBpcyBub3Qgc2V0LgogICAgICAgICAgaWYgKGhhbmRsZXIgIT0gbnVsbCkgaGFuZGxlcigpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKCFpc0xpc3RlbmluZykgewogICAgICB0b2tlbnMrKzsKICAgICAgcmV0dXJuVG9rZW5zKG5vcm1hbFRva2VuQmF0Y2hTaXplKTsKICAgIH0KICB9CgogIHZvaWQgcmV0dXJuVG9rZW5zKGludCB0b2tlbkJhdGNoU2l6ZSkgewogICAgaWYgKCFpc0Nsb3NpbmcgJiYgIWlzQ2xvc2VkKSB7CiAgICAgIGFzc2VydChldmVudFBvcnQgIT0gbnVsbCk7CiAgICAgIC8vIFJldHVybiBpbiBiYXRjaGVzLgogICAgICBpZiAodG9rZW5zID09IHRva2VuQmF0Y2hTaXplKSB7CiAgICAgICAgYXNzZXJ0KHRva2VucyA8ICgxIDw8IGZpcnN0Q29tbWFuZCkpOwogICAgICAgIHNlbmRUb0V2ZW50SGFuZGxlcigoMSA8PCByZXR1cm5Ub2tlbkNvbW1hbmQpIHwgdG9rZW5zKTsKICAgICAgICB0b2tlbnMgPSAwOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHNldEhhbmRsZXJzKHtyZWFkLCB3cml0ZSwgZXJyb3IsIGNsb3NlZCwgZGVzdHJveWVkfSkgewogICAgZXZlbnRIYW5kbGVyc1tyZWFkRXZlbnRdID0gcmVhZDsKICAgIGV2ZW50SGFuZGxlcnNbd3JpdGVFdmVudF0gPSB3cml0ZTsKICAgIGV2ZW50SGFuZGxlcnNbZXJyb3JFdmVudF0gPSBlcnJvcjsKICAgIGV2ZW50SGFuZGxlcnNbY2xvc2VkRXZlbnRdID0gY2xvc2VkOwogICAgZXZlbnRIYW5kbGVyc1tkZXN0cm95ZWRFdmVudF0gPSBkZXN0cm95ZWQ7CiAgfQoKICB2b2lkIHNldExpc3RlbmluZyh7cmVhZDogdHJ1ZSwgd3JpdGU6IHRydWV9KSB7CiAgICBzZW5kUmVhZEV2ZW50cyA9IHJlYWQ7CiAgICBzZW5kV3JpdGVFdmVudHMgPSB3cml0ZTsKICAgIGlmIChyZWFkKSBpc3N1ZVJlYWRFdmVudCgpOwogICAgaWYgKHdyaXRlKSBpc3N1ZVdyaXRlRXZlbnQoKTsKICAgIGlmICghZmxhZ3NTZW50ICYmICFpc0Nsb3NpbmcpIHsKICAgICAgZmxhZ3NTZW50ID0gdHJ1ZTsKICAgICAgaW50IGZsYWdzID0gMSA8PCBzZXRFdmVudE1hc2tDb21tYW5kOwogICAgICBpZiAoIWlzQ2xvc2VkUmVhZCkgZmxhZ3MgfD0gMSA8PCByZWFkRXZlbnQ7CiAgICAgIGlmICghaXNDbG9zZWRXcml0ZSkgZmxhZ3MgfD0gMSA8PCB3cml0ZUV2ZW50OwogICAgICBzZW5kVG9FdmVudEhhbmRsZXIoZmxhZ3MpOwogICAgfQogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgaWYgKCFpc0Nsb3NpbmcgJiYgIWlzQ2xvc2VkKSB7CiAgICAgIHNlbmRUb0V2ZW50SGFuZGxlcigxIDw8IGNsb3NlQ29tbWFuZCk7CiAgICAgIGlzQ2xvc2luZyA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gY2xvc2VDb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKSB7CiAgICBpZiAoIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICAgICBjYXNlIFNvY2tldERpcmVjdGlvbi5yZWNlaXZlOgogICAgICAgICAgc2h1dGRvd25SZWFkKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFNvY2tldERpcmVjdGlvbi5zZW5kOgogICAgICAgICAgc2h1dGRvd25Xcml0ZSgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBTb2NrZXREaXJlY3Rpb24uYm90aDoKICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoZGlyZWN0aW9uKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBzaHV0ZG93bldyaXRlKCkgewogICAgaWYgKCFpc0Nsb3NpbmcgJiYgIWlzQ2xvc2VkKSB7CiAgICAgIGlmIChjbG9zZWRSZWFkRXZlbnRTZW50KSB7CiAgICAgICAgY2xvc2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZW5kVG9FdmVudEhhbmRsZXIoMSA8PCBzaHV0ZG93bldyaXRlQ29tbWFuZCk7CiAgICAgIH0KICAgICAgaXNDbG9zZWRXcml0ZSA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHNodXRkb3duUmVhZCgpIHsKICAgIGlmICghaXNDbG9zaW5nICYmICFpc0Nsb3NlZCkgewogICAgICBpZiAoaXNDbG9zZWRXcml0ZSkgewogICAgICAgIGNsb3NlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2VuZFRvRXZlbnRIYW5kbGVyKDEgPDwgc2h1dGRvd25SZWFkQ29tbWFuZCk7CiAgICAgIH0KICAgICAgaXNDbG9zZWRSZWFkID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgc2VuZFRvRXZlbnRIYW5kbGVyKGludCBkYXRhKSB7CiAgICBpbnQgZnVsbERhdGEgPSAodHlwZUZsYWdzICYgdHlwZVR5cGVNYXNrKSB8IGRhdGE7CiAgICBhc3NlcnQoIWlzQ2xvc2luZyk7CiAgICBjb25uZWN0VG9FdmVudEhhbmRsZXIoKTsKICAgIF9FdmVudEhhbmRsZXIuX3NlbmREYXRhKHRoaXMsIGV2ZW50UG9ydC5zZW5kUG9ydCwgZnVsbERhdGEpOwogIH0KCiAgdm9pZCBjb25uZWN0VG9FdmVudEhhbmRsZXIoKSB7CiAgICBhc3NlcnQoIWlzQ2xvc2VkKTsKICAgIGlmIChldmVudFBvcnQgPT0gbnVsbCkgewogICAgICBldmVudFBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQobXVsdGlwbGV4KTsKICAgIH0KICAgIGlmICghY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyKSB7CiAgICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKAogICAgICAgICAgJ2V4dC5kYXJ0LmlvLmdldE9wZW5Tb2NrZXRzJywgX1NvY2tldFJlc291cmNlSW5mby5nZXRPcGVuU29ja2V0cyk7CiAgICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKCdleHQuZGFydC5pby5nZXRTb2NrZXRCeUlEJywKICAgICAgICAgIF9Tb2NrZXRSZXNvdXJjZUluZm8uZ2V0U29ja2V0SW5mb01hcEJ5SUQpOwoKICAgICAgY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgZGlzY29ubmVjdEZyb21FdmVudEhhbmRsZXIoKSB7CiAgICBhc3NlcnQoZXZlbnRQb3J0ICE9IG51bGwpOwogICAgZXZlbnRQb3J0LmNsb3NlKCk7CiAgICBldmVudFBvcnQgPSBudWxsOwogICAgLy8gTm93IHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhpcyBTb2NrZXQgYW55bW9yZSwgd2UgY2FuIGNsZWFyIHRoZSBvd25lcgogICAgLy8gZmllbGQuCiAgICBvd25lciA9IG51bGw7CiAgfQoKICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gZXJyb3IgcmVzcG9uc2UgZnJvbSBhIG5hdGl2ZSBwb3J0IGNhbGwuCiAgc3RhdGljIGJvb2wgaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSB7CiAgICByZXR1cm4gcmVzcG9uc2UgaXMgTGlzdCAmJiByZXNwb25zZVswXSAhPSBfc3VjY2Vzc1Jlc3BvbnNlOwogIH0KCiAgLy8gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBlcnJvci9leGNlcHRpb24gZnJvbSBkaWZmZXJlbnQgcmV0dXJuZWQKICAvLyBlcnJvciBvYmplY3RzLgogIHN0YXRpYyBjcmVhdGVFcnJvcihlcnJvciwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgIFtJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnRdKSB7CiAgICBpZiAoZXJyb3IgaXMgT1NFcnJvcikgewogICAgICByZXR1cm4gbmV3IFNvY2tldEV4Y2VwdGlvbihtZXNzYWdlLAogICAgICAgICAgb3NFcnJvcjogZXJyb3IsIGFkZHJlc3M6IGFkZHJlc3MsIHBvcnQ6IHBvcnQpOwogICAgfSBlbHNlIGlmIChlcnJvciBpcyBMaXN0KSB7CiAgICAgIGFzc2VydChpc0Vycm9yUmVzcG9uc2UoZXJyb3IpKTsKICAgICAgc3dpdGNoIChlcnJvclswXSkgewogICAgICAgIGNhc2UgX2lsbGVnYWxBcmd1bWVudFJlc3BvbnNlOgogICAgICAgICAgcmV0dXJuIG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICAgICAgY2FzZSBfb3NFcnJvclJlc3BvbnNlOgogICAgICAgICAgcmV0dXJuIG5ldyBTb2NrZXRFeGNlcHRpb24obWVzc2FnZSwKICAgICAgICAgICAgICBvc0Vycm9yOiBuZXcgT1NFcnJvcihlcnJvclsyXSwgZXJyb3JbMV0pLAogICAgICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsCiAgICAgICAgICAgICAgcG9ydDogcG9ydCk7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBuZXcgRXhjZXB0aW9uKCJVbmtub3duIGVycm9yIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgU29ja2V0RXhjZXB0aW9uKG1lc3NhZ2UsIGFkZHJlc3M6IGFkZHJlc3MsIHBvcnQ6IHBvcnQpOwogICAgfQogIH0KCiAgdm9pZCByZXBvcnRFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdCwgU3RyaW5nIG1lc3NhZ2UpIHsKICAgIHZhciBlID0gY3JlYXRlRXJyb3IoZXJyb3IsIG1lc3NhZ2UsIGFkZHJlc3MsIGxvY2FsUG9ydCk7CiAgICAvLyBJbnZva2UgdGhlIGVycm9yIGhhbmRsZXIgaWYgYW55LgogICAgaWYgKGV2ZW50SGFuZGxlcnNbZXJyb3JFdmVudF0gIT0gbnVsbCkgewogICAgICBldmVudEhhbmRsZXJzW2Vycm9yRXZlbnRdKGUsIHN0KTsKICAgIH0KICAgIC8vIEZvciBhbGwgZXJyb3JzIHdlIGNsb3NlIHRoZSBzb2NrZXQKICAgIGNsb3NlKCk7CiAgfQoKICBnZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgaWYgKG9wdGlvbiA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJvcHRpb24iKTsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVHZXRPcHRpb24ob3B0aW9uLl92YWx1ZSwgYWRkcmVzcy50eXBlLl92YWx1ZSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHRocm93IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIHNldE9wdGlvbihTb2NrZXRPcHRpb24gb3B0aW9uLCB2YWx1ZSkgewogICAgaWYgKG9wdGlvbiA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJvcHRpb24iKTsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVTZXRPcHRpb24ob3B0aW9uLl92YWx1ZSwgYWRkcmVzcy50eXBlLl92YWx1ZSwgdmFsdWUpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB0aHJvdyByZXN1bHQ7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgaWYgKG9wdGlvbiA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJvcHRpb24iKTsKICAgIGlmIChvcHRpb24udmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uLnZhbHVlIik7CgogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZUdldFJhd09wdGlvbihvcHRpb24ubGV2ZWwsIG9wdGlvbi5vcHRpb24sIG9wdGlvbi52YWx1ZSk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHRocm93IHJlc3VsdDsKICAgIHJldHVybiBvcHRpb24udmFsdWU7CiAgfQoKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSB7CiAgICBpZiAob3B0aW9uID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm9wdGlvbiIpOwogICAgaWYgKG9wdGlvbi52YWx1ZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJvcHRpb24udmFsdWUiKTsKCiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlU2V0UmF3T3B0aW9uKG9wdGlvbi5sZXZlbCwgb3B0aW9uLm9wdGlvbiwgb3B0aW9uLnZhbHVlKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgdGhyb3cgcmVzdWx0OwogIH0KCiAgSW50ZXJuZXRBZGRyZXNzIG11bHRpY2FzdEFkZHJlc3MoCiAgICAgIEludGVybmV0QWRkcmVzcyBhZGRyLCBOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZSkgewogICAgLy8gT24gTWFjIE9TIHVzaW5nIHRoZSBpbnRlcmZhY2UgaW5kZXggZm9yIGpvaW5pbmcgSVB2NCBtdWx0aWNhc3QgZ3JvdXBzCiAgICAvLyBpcyBub3Qgc3VwcG9ydGVkLiBIZXJlIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBpbnRlcmZhY2UgaXMgbmVlZGVkLgogICAgaWYgKFBsYXRmb3JtLmlzTWFjT1MgJiYgYWRkci50eXBlID09IEludGVybmV0QWRkcmVzc1R5cGUuSVB2NCkgewogICAgICBpZiAoaW50ZXJmYWNlICE9IG51bGwpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGludGVyZmFjZS5hZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGlmIChpbnRlcmZhY2UuYWRkcmVzc2VzW2ldLnR5cGUgPT0gSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY0KSB7CiAgICAgICAgICAgIHJldHVybiBpbnRlcmZhY2UuYWRkcmVzc2VzW2ldOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBObyBJUHY0IGFkZHJlc3MgZm91bmQgb24gdGhlIGludGVyZmFjZS4KICAgICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKAogICAgICAgICAgICAiVGhlIG5ldHdvcmsgaW50ZXJmYWNlIGRvZXMgbm90IGhhdmUgYW4gYWRkcmVzcyAiCiAgICAgICAgICAgICJvZiB0aGUgc2FtZSBmYW1pbHkgYXMgdGhlIG11bHRpY2FzdCBhZGRyZXNzIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRGVmYXVsdCB0byB0aGUgQU5ZIGFkZHJlc3MgaWYgbm8gaW50ZXJmYWNlIGlzIHNwZWNpZmllZC4KICAgICAgICByZXR1cm4gSW50ZXJuZXRBZGRyZXNzLmFueUlQdjQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgdm9pZCBqb2luTXVsdGljYXN0KEludGVybmV0QWRkcmVzcyBhZGRyLCBOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZSkgewogICAgX0ludGVybmV0QWRkcmVzcyBpbnRlcmZhY2VBZGRyID0gbXVsdGljYXN0QWRkcmVzcyhhZGRyLCBpbnRlcmZhY2UpOwogICAgdmFyIGludGVyZmFjZUluZGV4ID0gaW50ZXJmYWNlID09IG51bGwgPyAwIDogaW50ZXJmYWNlLmluZGV4OwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZUpvaW5NdWx0aWNhc3QoKGFkZHIgYXMgX0ludGVybmV0QWRkcmVzcykuX2luX2FkZHIsCiAgICAgICAgaW50ZXJmYWNlQWRkcj8uX2luX2FkZHIsIGludGVyZmFjZUluZGV4KTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgdGhyb3cgcmVzdWx0OwogIH0KCiAgdm9pZCBsZWF2ZU11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgYWRkciwgTmV0d29ya0ludGVyZmFjZSBpbnRlcmZhY2UpIHsKICAgIF9JbnRlcm5ldEFkZHJlc3MgaW50ZXJmYWNlQWRkciA9IG11bHRpY2FzdEFkZHJlc3MoYWRkciwgaW50ZXJmYWNlKTsKICAgIHZhciBpbnRlcmZhY2VJbmRleCA9IGludGVyZmFjZSA9PSBudWxsID8gMCA6IGludGVyZmFjZS5pbmRleDsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVMZWF2ZU11bHRpY2FzdCgoYWRkciBhcyBfSW50ZXJuZXRBZGRyZXNzKS5faW5fYWRkciwKICAgICAgICBpbnRlcmZhY2VBZGRyPy5faW5fYWRkciwgaW50ZXJmYWNlSW5kZXgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB0aHJvdyByZXN1bHQ7CiAgfQoKICB2b2lkIG5hdGl2ZVNldFNvY2tldElkKGludCBpZCwgaW50IHR5cGVGbGFncykgbmF0aXZlICJTb2NrZXRfU2V0U29ja2V0SWQiOwogIG5hdGl2ZUF2YWlsYWJsZSgpIG5hdGl2ZSAiU29ja2V0X0F2YWlsYWJsZSI7CiAgbmF0aXZlUmVhZChpbnQgbGVuKSBuYXRpdmUgIlNvY2tldF9SZWFkIjsKICBuYXRpdmVSZWN2RnJvbSgpIG5hdGl2ZSAiU29ja2V0X1JlY3ZGcm9tIjsKICBuYXRpdmVXcml0ZShMaXN0PGludD4gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMpCiAgICAgIG5hdGl2ZSAiU29ja2V0X1dyaXRlTGlzdCI7CiAgbmF0aXZlU2VuZFRvKExpc3Q8aW50PiBidWZmZXIsIGludCBvZmZzZXQsIGludCBieXRlcywgVWludDhMaXN0IGFkZHJlc3MsCiAgICAgIGludCBwb3J0KSBuYXRpdmUgIlNvY2tldF9TZW5kVG8iOwogIG5hdGl2ZUNyZWF0ZUNvbm5lY3QoVWludDhMaXN0IGFkZHIsIGludCBwb3J0KSBuYXRpdmUgIlNvY2tldF9DcmVhdGVDb25uZWN0IjsKICBuYXRpdmVDcmVhdGVCaW5kQ29ubmVjdChVaW50OExpc3QgYWRkciwgaW50IHBvcnQsIFVpbnQ4TGlzdCBzb3VyY2VBZGRyKQogICAgICBuYXRpdmUgIlNvY2tldF9DcmVhdGVCaW5kQ29ubmVjdCI7CiAgYm9vbCBpc0JpbmRFcnJvcihpbnQgZXJyb3JOdW1iZXIpIG5hdGl2ZSAiU29ja2V0QmFzZV9Jc0JpbmRFcnJvciI7CiAgbmF0aXZlQ3JlYXRlQmluZExpc3RlbihVaW50OExpc3QgYWRkciwgaW50IHBvcnQsIGludCBiYWNrbG9nLCBib29sIHY2T25seSwKICAgICAgYm9vbCBzaGFyZWQpIG5hdGl2ZSAiU2VydmVyU29ja2V0X0NyZWF0ZUJpbmRMaXN0ZW4iOwogIG5hdGl2ZUNyZWF0ZUJpbmREYXRhZ3JhbShVaW50OExpc3QgYWRkciwgaW50IHBvcnQsIGJvb2wgcmV1c2VBZGRyZXNzLAogICAgICBib29sIHJldXNlUG9ydCwgaW50IHR0bCkgbmF0aXZlICJTb2NrZXRfQ3JlYXRlQmluZERhdGFncmFtIjsKICBuYXRpdmVBY2NlcHQoX05hdGl2ZVNvY2tldCBzb2NrZXQpIG5hdGl2ZSAiU2VydmVyU29ja2V0X0FjY2VwdCI7CiAgaW50IG5hdGl2ZUdldFBvcnQoKSBuYXRpdmUgIlNvY2tldF9HZXRQb3J0IjsKICBMaXN0IG5hdGl2ZUdldFJlbW90ZVBlZXIoKSBuYXRpdmUgIlNvY2tldF9HZXRSZW1vdGVQZWVyIjsKICBpbnQgbmF0aXZlR2V0U29ja2V0SWQoKSBuYXRpdmUgIlNvY2tldF9HZXRTb2NrZXRJZCI7CiAgT1NFcnJvciBuYXRpdmVHZXRFcnJvcigpIG5hdGl2ZSAiU29ja2V0X0dldEVycm9yIjsKICBuYXRpdmVHZXRPcHRpb24oaW50IG9wdGlvbiwgaW50IHByb3RvY29sKSBuYXRpdmUgIlNvY2tldF9HZXRPcHRpb24iOwogIE9TRXJyb3IgbmF0aXZlR2V0UmF3T3B0aW9uKGludCBsZXZlbCwgaW50IG9wdGlvbiwgVWludDhMaXN0IGRhdGEpCiAgICAgIG5hdGl2ZSAiU29ja2V0X0dldFJhd09wdGlvbiI7CiAgT1NFcnJvciBuYXRpdmVTZXRPcHRpb24oaW50IG9wdGlvbiwgaW50IHByb3RvY29sLCB2YWx1ZSkKICAgICAgbmF0aXZlICJTb2NrZXRfU2V0T3B0aW9uIjsKICBPU0Vycm9yIG5hdGl2ZVNldFJhd09wdGlvbihpbnQgbGV2ZWwsIGludCBvcHRpb24sIFVpbnQ4TGlzdCBkYXRhKQogICAgICBuYXRpdmUgIlNvY2tldF9TZXRSYXdPcHRpb24iOwogIE9TRXJyb3IgbmF0aXZlSm9pbk11bHRpY2FzdChVaW50OExpc3QgYWRkciwgVWludDhMaXN0IGludGVyZmFjZUFkZHIsCiAgICAgIGludCBpbnRlcmZhY2VJbmRleCkgbmF0aXZlICJTb2NrZXRfSm9pbk11bHRpY2FzdCI7CiAgYm9vbCBuYXRpdmVMZWF2ZU11bHRpY2FzdChVaW50OExpc3QgYWRkciwgVWludDhMaXN0IGludGVyZmFjZUFkZHIsCiAgICAgIGludCBpbnRlcmZhY2VJbmRleCkgbmF0aXZlICJTb2NrZXRfTGVhdmVNdWx0aWNhc3QiOwp9CgpjbGFzcyBfUmF3U2VydmVyU29ja2V0IGV4dGVuZHMgU3RyZWFtPFJhd1NvY2tldD4gaW1wbGVtZW50cyBSYXdTZXJ2ZXJTb2NrZXQgewogIGZpbmFsIF9OYXRpdmVTb2NrZXQgX3NvY2tldDsKICBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldD4gX2NvbnRyb2xsZXI7CiAgUmVjZWl2ZVBvcnQgX3JlZmVyZW5jZVBvcnQ7CiAgYm9vbCBfdjZPbmx5OwoKICBzdGF0aWMgRnV0dXJlPF9SYXdTZXJ2ZXJTb2NrZXQ+IGJpbmQoCiAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBpbnQgYmFja2xvZywgYm9vbCB2Nk9ubHksIGJvb2wgc2hhcmVkKSB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBpZiAoYmFja2xvZyA8IDApIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGJhY2tsb2cgJGJhY2tsb2ciKTsKICAgIHJldHVybiBfTmF0aXZlU29ja2V0LmJpbmQoYWRkcmVzcywgcG9ydCwgYmFja2xvZywgdjZPbmx5LCBzaGFyZWQpCiAgICAgICAgLnRoZW4oKHNvY2tldCkgPT4gbmV3IF9SYXdTZXJ2ZXJTb2NrZXQoc29ja2V0LCB2Nk9ubHkpKTsKICB9CgogIF9SYXdTZXJ2ZXJTb2NrZXQodGhpcy5fc29ja2V0LCB0aGlzLl92Nk9ubHkpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0PiBsaXN0ZW4odm9pZCBvbkRhdGEoUmF3U29ja2V0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGlmIChfY29udHJvbGxlciAhPSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW0gd2FzIGFscmVhZHkgbGlzdGVuZWQgdG8iKTsKICAgIH0KICAgIHZhciB6b25lID0gWm9uZS5jdXJyZW50OwogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSk7CiAgICBfc29ja2V0LnNldEhhbmRsZXJzKHJlYWQ6IHpvbmUuYmluZENhbGxiYWNrR3VhcmRlZCgoKSB7CiAgICAgIHdoaWxlIChfc29ja2V0LmF2YWlsYWJsZSA+IDApIHsKICAgICAgICB2YXIgc29ja2V0ID0gX3NvY2tldC5hY2NlcHQoKTsKICAgICAgICBpZiAoc29ja2V0ID09IG51bGwpIHJldHVybjsKICAgICAgICBfY29udHJvbGxlci5hZGQobmV3IF9SYXdTb2NrZXQoc29ja2V0KSk7CiAgICAgICAgaWYgKF9jb250cm9sbGVyLmlzUGF1c2VkKSByZXR1cm47CiAgICAgIH0KICAgIH0pLCBlcnJvcjogem9uZS5iaW5kQmluYXJ5Q2FsbGJhY2tHdWFyZGVkKChlLCBzdCkgewogICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlLCBzdCk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICB9KSwgZGVzdHJveWVkOiAoKSB7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIGlmIChfcmVmZXJlbmNlUG9ydCAhPSBudWxsKSB7CiAgICAgICAgX3JlZmVyZW5jZVBvcnQuY2xvc2UoKTsKICAgICAgICBfcmVmZXJlbmNlUG9ydCA9IG51bGw7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIEZ1dHVyZTxSYXdTZXJ2ZXJTb2NrZXQ+IGNsb3NlKCkgewogICAgcmV0dXJuIF9zb2NrZXQuY2xvc2UoKS50aGVuPFJhd1NlcnZlclNvY2tldD4oKF8pIHsKICAgICAgaWYgKF9yZWZlcmVuY2VQb3J0ICE9IG51bGwpIHsKICAgICAgICBfcmVmZXJlbmNlUG9ydC5jbG9zZSgpOwogICAgICAgIF9yZWZlcmVuY2VQb3J0ID0gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBfcGF1c2UoKSB7CiAgICBfc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICB9CgogIHZvaWQgX3Jlc3VtZSgpIHsKICAgIF9zb2NrZXQuc2V0TGlzdGVuaW5nKHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSk7CiAgfQoKICB2b2lkIF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmhhc0xpc3RlbmVyKSB7CiAgICAgIF9yZXN1bWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zb2NrZXQuY2xvc2UoKTsKICAgIH0KICB9CgogIHZvaWQgX29uUGF1c2VTdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgewogICAgICBfcGF1c2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9yZXN1bWUoKTsKICAgIH0KICB9CgogIHZvaWQgc2V0IF9vd25lcihvd25lcikgewogICAgX3NvY2tldC5vd25lciA9IG93bmVyOwogIH0KfQoKY2xhc3MgX1Jhd1NvY2tldCBleHRlbmRzIFN0cmVhbTxSYXdTb2NrZXRFdmVudD4gaW1wbGVtZW50cyBSYXdTb2NrZXQgewogIGZpbmFsIF9OYXRpdmVTb2NrZXQgX3NvY2tldDsKICBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldEV2ZW50PiBfY29udHJvbGxlcjsKICBib29sIF9yZWFkRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgYm9vbCBfd3JpdGVFdmVudHNFbmFibGVkID0gdHJ1ZTsKCiAgLy8gRmxhZyB0byBoYW5kbGUgQ3RybC1EIGNsb3Npbmcgb2Ygc3RkaW8gb24gTWFjIE9TLgogIGJvb2wgX2lzTWFjT1NUZXJtaW5hbElucHV0ID0gZmFsc2U7CgogIHN0YXRpYyBGdXR1cmU8UmF3U29ja2V0PiBjb25uZWN0KAogICAgICBob3N0LCBpbnQgcG9ydCwgc291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dCkgewogICAgcmV0dXJuIF9OYXRpdmVTb2NrZXQuY29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0KQogICAgICAgIC50aGVuKChzb2NrZXQpID0+IG5ldyBfUmF3U29ja2V0KHNvY2tldCkpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxfUmF3U29ja2V0Pj4gc3RhcnRDb25uZWN0KAogICAgICBob3N0LCBpbnQgcG9ydCwgc291cmNlQWRkcmVzcykgewogICAgcmV0dXJuIF9OYXRpdmVTb2NrZXQuc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3MpCiAgICAgICAgLnRoZW4oKENvbm5lY3Rpb25UYXNrPF9OYXRpdmVTb2NrZXQ+IG5hdGl2ZVRhc2spIHsKICAgICAgZmluYWwgRnV0dXJlPF9SYXdTb2NrZXQ+IHJhdyA9IG5hdGl2ZVRhc2suc29ja2V0CiAgICAgICAgICAudGhlbigoX05hdGl2ZVNvY2tldCBuYXRpdmVTb2NrZXQpID0+IG5ldyBfUmF3U29ja2V0KG5hdGl2ZVNvY2tldCkpOwogICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25UYXNrPF9SYXdTb2NrZXQ+Ll8oCiAgICAgICAgICBzb2NrZXQ6IHJhdywgb25DYW5jZWw6IG5hdGl2ZVRhc2suX29uQ2FuY2VsKTsKICAgIH0pOwogIH0KCiAgX1Jhd1NvY2tldCh0aGlzLl9zb2NrZXQpIHsKICAgIHZhciB6b25lID0gWm9uZS5jdXJyZW50OwogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSk7CiAgICBfc29ja2V0LnNldEhhbmRsZXJzKAogICAgICAgIHJlYWQ6ICgpID0+IF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkKSwKICAgICAgICB3cml0ZTogKCkgewogICAgICAgICAgLy8gVGhlIHdyaXRlIGV2ZW50IGhhbmRsZXIgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCBieSB0aGUKICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIgd2hlbiBpdCBmaXJlcy4KICAgICAgICAgIHdyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LndyaXRlKTsKICAgICAgICB9LAogICAgICAgIGNsb3NlZDogKCkgPT4gX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpLAogICAgICAgIGRlc3Ryb3llZDogKCkgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LmNsb3NlZCk7CiAgICAgICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICAgIH0sCiAgICAgICAgZXJyb3I6IHpvbmUuYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZCgoZSwgc3QpIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUsIHN0KTsKICAgICAgICAgIF9zb2NrZXQuY2xvc2UoKTsKICAgICAgICB9KSk7CiAgfQoKICBmYWN0b3J5IF9SYXdTb2NrZXQuX3dyaXRlUGlwZSgpIHsKICAgIHZhciBuYXRpdmUgPSBuZXcgX05hdGl2ZVNvY2tldC5waXBlKCk7CiAgICBuYXRpdmUuaXNDbG9zZWRSZWFkID0gdHJ1ZTsKICAgIG5hdGl2ZS5jbG9zZWRSZWFkRXZlbnRTZW50ID0gdHJ1ZTsKICAgIHJldHVybiBuZXcgX1Jhd1NvY2tldChuYXRpdmUpOwogIH0KCiAgZmFjdG9yeSBfUmF3U29ja2V0Ll9yZWFkUGlwZShpbnQgZmQpIHsKICAgIHZhciBuYXRpdmUgPSBuZXcgX05hdGl2ZVNvY2tldC5waXBlKCk7CiAgICBuYXRpdmUuaXNDbG9zZWRXcml0ZSA9IHRydWU7CiAgICBpZiAoZmQgIT0gbnVsbCkgX2dldFN0ZGlvSGFuZGxlKG5hdGl2ZSwgZmQpOwogICAgdmFyIHJlc3VsdCA9IG5ldyBfUmF3U29ja2V0KG5hdGl2ZSk7CiAgICBpZiAoZmQgIT0gbnVsbCkgewogICAgICB2YXIgc29ja2V0VHlwZSA9IF9TdGRJT1V0aWxzLl9uYXRpdmVTb2NrZXRUeXBlKHJlc3VsdC5fc29ja2V0KTsKICAgICAgcmVzdWx0Ll9pc01hY09TVGVybWluYWxJbnB1dCA9CiAgICAgICAgICBQbGF0Zm9ybS5pc01hY09TICYmIHNvY2tldFR5cGUgPT0gX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gbGlzdGVuKHZvaWQgb25EYXRhKFJhd1NvY2tldEV2ZW50IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBpbnQgYXZhaWxhYmxlKCkgPT4gX3NvY2tldC5hdmFpbGFibGU7CgogIFVpbnQ4TGlzdCByZWFkKFtpbnQgbGVuXSkgewogICAgaWYgKF9pc01hY09TVGVybWluYWxJbnB1dCkgewogICAgICB2YXIgYXZhaWxhYmxlID0gdGhpcy5hdmFpbGFibGUoKTsKICAgICAgaWYgKGF2YWlsYWJsZSA9PSAwKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIGRhdGEgPSBfc29ja2V0LnJlYWQobGVuKTsKICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCBkYXRhLmxlbmd0aCA8IGF2YWlsYWJsZSkgewogICAgICAgIC8vIFJlYWRpbmcgbGVzcyB0aGFuIGF2YWlsYWJsZSBmcm9tIGEgTWFjIE9TIHRlcm1pbmFsIGluZGljYXRlIEN0cmwtRC4KICAgICAgICAvLyBUaGlzIGlzIGludGVycHJldGVkIGFzIHJlYWQgY2xvc2VkLgogICAgICAgIHNjaGVkdWxlTWljcm90YXNrKCgpID0+IF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3NvY2tldC5yZWFkKGxlbik7CiAgICB9CiAgfQoKICBpbnQgd3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBvZmZzZXQsIGludCBjb3VudF0pID0+CiAgICAgIF9zb2NrZXQud3JpdGUoYnVmZmVyLCBvZmZzZXQsIGNvdW50KTsKCiAgRnV0dXJlPFJhd1NvY2tldD4gY2xvc2UoKSA9PiBfc29ja2V0LmNsb3NlKCkudGhlbjxSYXdTb2NrZXQ+KChfKSA9PiB0aGlzKTsKCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKSA9PiBfc29ja2V0LnNodXRkb3duKGRpcmVjdGlvbik7CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIGludCBnZXQgcmVtb3RlUG9ydCA9PiBfc29ja2V0LnJlbW90ZVBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyA9PiBfc29ja2V0LnJlbW90ZUFkZHJlc3M7CgogIGJvb2wgZ2V0IHJlYWRFdmVudHNFbmFibGVkID0+IF9yZWFkRXZlbnRzRW5hYmxlZDsKICB2b2lkIHNldCByZWFkRXZlbnRzRW5hYmxlZChib29sIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgIT0gX3JlYWRFdmVudHNFbmFibGVkKSB7CiAgICAgIF9yZWFkRXZlbnRzRW5hYmxlZCA9IHZhbHVlOwogICAgICBpZiAoIV9jb250cm9sbGVyLmlzUGF1c2VkKSBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICBib29sIGdldCB3cml0ZUV2ZW50c0VuYWJsZWQgPT4gX3dyaXRlRXZlbnRzRW5hYmxlZDsKICB2b2lkIHNldCB3cml0ZUV2ZW50c0VuYWJsZWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlICE9IF93cml0ZUV2ZW50c0VuYWJsZWQpIHsKICAgICAgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IHZhbHVlOwogICAgICBpZiAoIV9jb250cm9sbGVyLmlzUGF1c2VkKSBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICBib29sIHNldE9wdGlvbihTb2NrZXRPcHRpb24gb3B0aW9uLCBib29sIGVuYWJsZWQpID0+CiAgICAgIF9zb2NrZXQuc2V0T3B0aW9uKG9wdGlvbiwgZW5hYmxlZCk7CgogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgPT4KICAgICAgX3NvY2tldC5nZXRSYXdPcHRpb24ob3B0aW9uKTsKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSA9PiBfc29ja2V0LnNldFJhd09wdGlvbihvcHRpb24pOwoKICBfcGF1c2UoKSB7CiAgICBfc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICB9CgogIHZvaWQgX3Jlc3VtZSgpIHsKICAgIF9zb2NrZXQuc2V0TGlzdGVuaW5nKHJlYWQ6IF9yZWFkRXZlbnRzRW5hYmxlZCwgd3JpdGU6IF93cml0ZUV2ZW50c0VuYWJsZWQpOwogIH0KCiAgdm9pZCBfb25QYXVzZVN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmlzUGF1c2VkKSB7CiAgICAgIF9wYXVzZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3Jlc3VtZSgpOwogICAgfQogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICBfcmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIHNldCBfb3duZXIob3duZXIpIHsKICAgIF9zb2NrZXQub3duZXIgPSBvd25lcjsKICB9Cn0KCkBwYXRjaApjbGFzcyBTZXJ2ZXJTb2NrZXQgewogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8U2VydmVyU29ja2V0PiBiaW5kKGFkZHJlc3MsIGludCBwb3J0LAogICAgICB7aW50IGJhY2tsb2c6IDAsIGJvb2wgdjZPbmx5OiBmYWxzZSwgYm9vbCBzaGFyZWQ6IGZhbHNlfSkgewogICAgcmV0dXJuIF9TZXJ2ZXJTb2NrZXQuYmluZChhZGRyZXNzLCBwb3J0LCBiYWNrbG9nLCB2Nk9ubHksIHNoYXJlZCk7CiAgfQp9CgpjbGFzcyBfU2VydmVyU29ja2V0IGV4dGVuZHMgU3RyZWFtPFNvY2tldD4gaW1wbGVtZW50cyBTZXJ2ZXJTb2NrZXQgewogIGZpbmFsIF9zb2NrZXQ7CgogIHN0YXRpYyBGdXR1cmU8X1NlcnZlclNvY2tldD4gYmluZCgKICAgICAgYWRkcmVzcywgaW50IHBvcnQsIGludCBiYWNrbG9nLCBib29sIHY2T25seSwgYm9vbCBzaGFyZWQpIHsKICAgIHJldHVybiBfUmF3U2VydmVyU29ja2V0LmJpbmQoYWRkcmVzcywgcG9ydCwgYmFja2xvZywgdjZPbmx5LCBzaGFyZWQpCiAgICAgICAgLnRoZW4oKHNvY2tldCkgPT4gbmV3IF9TZXJ2ZXJTb2NrZXQoc29ja2V0KSk7CiAgfQoKICBfU2VydmVyU29ja2V0KHRoaXMuX3NvY2tldCk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxTb2NrZXQ+IGxpc3Rlbih2b2lkIG9uRGF0YShTb2NrZXQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9zb2NrZXQubWFwPFNvY2tldD4oKHJhd1NvY2tldCkgPT4gbmV3IF9Tb2NrZXQocmF3U29ja2V0KSkubGlzdGVuKAogICAgICAgIG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLAogICAgICAgIG9uRG9uZTogb25Eb25lLAogICAgICAgIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgaW50IGdldCBwb3J0ID0+IF9zb2NrZXQucG9ydDsKCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzID0+IF9zb2NrZXQuYWRkcmVzczsKCiAgRnV0dXJlPFNlcnZlclNvY2tldD4gY2xvc2UoKSA9PgogICAgICBfc29ja2V0LmNsb3NlKCkudGhlbjxTZXJ2ZXJTb2NrZXQ+KChfKSA9PiB0aGlzKTsKCiAgdm9pZCBzZXQgX293bmVyKG93bmVyKSB7CiAgICBfc29ja2V0Ll9vd25lciA9IG93bmVyOwogIH0KfQoKQHBhdGNoCmNsYXNzIFNvY2tldCB7CiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxTb2NrZXQ+IF9jb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pIHsKICAgIHJldHVybiBSYXdTb2NrZXQuY29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0OiB0aW1lb3V0KQogICAgICAgIC50aGVuKChzb2NrZXQpID0+IG5ldyBfU29ja2V0KHNvY2tldCkpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxTb2NrZXQ+PiBfc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pIHsKICAgIHJldHVybiBSYXdTb2NrZXQuc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MpCiAgICAgICAgLnRoZW4oKHJhd1Rhc2spIHsKICAgICAgRnV0dXJlPFNvY2tldD4gc29ja2V0ID0KICAgICAgICAgIHJhd1Rhc2suc29ja2V0LnRoZW4oKHJhd1NvY2tldCkgPT4gbmV3IF9Tb2NrZXQocmF3U29ja2V0KSk7CiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRhc2s8U29ja2V0Pi5fKAogICAgICAgICAgc29ja2V0OiBzb2NrZXQsIG9uQ2FuY2VsOiByYXdUYXNrLl9vbkNhbmNlbCk7CiAgICB9KTsKICB9Cn0KCmNsYXNzIF9Tb2NrZXRTdHJlYW1Db25zdW1lciBleHRlbmRzIFN0cmVhbUNvbnN1bWVyPExpc3Q8aW50Pj4gewogIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgZmluYWwgX1NvY2tldCBzb2NrZXQ7CiAgaW50IG9mZnNldDsKICBMaXN0PGludD4gYnVmZmVyOwogIGJvb2wgcGF1c2VkID0gZmFsc2U7CiAgQ29tcGxldGVyIHN0cmVhbUNvbXBsZXRlcjsKCiAgX1NvY2tldFN0cmVhbUNvbnN1bWVyKHRoaXMuc29ja2V0KTsKCiAgRnV0dXJlPFNvY2tldD4gYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgewogICAgc29ja2V0Ll9lbnN1cmVSYXdTb2NrZXRTdWJzY3JpcHRpb24oKTsKICAgIHN0cmVhbUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8U29ja2V0PigpOwogICAgaWYgKHNvY2tldC5fcmF3ICE9IG51bGwpIHsKICAgICAgc3Vic2NyaXB0aW9uID0gc3RyZWFtLmxpc3RlbigoZGF0YSkgewogICAgICAgIGFzc2VydCghcGF1c2VkKTsKICAgICAgICBhc3NlcnQoYnVmZmVyID09IG51bGwpOwogICAgICAgIGJ1ZmZlciA9IGRhdGE7CiAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICB0cnkgewogICAgICAgICAgd3JpdGUoKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgICAgc3RvcCgpOwogICAgICAgICAgZG9uZShlKTsKICAgICAgICB9CiAgICAgIH0sIG9uRXJyb3I6IChlcnJvciwgW3N0YWNrVHJhY2VdKSB7CiAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICBkb25lKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSwgb25Eb25lOiAoKSB7CiAgICAgICAgZG9uZSgpOwogICAgICB9LCBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBzdHJlYW1Db21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgRnV0dXJlPFNvY2tldD4gY2xvc2UoKSB7CiAgICBzb2NrZXQuX2NvbnN1bWVyRG9uZSgpOwogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoc29ja2V0KTsKICB9CgogIHZvaWQgd3JpdGUoKSB7CiAgICBpZiAoc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybjsKICAgIGFzc2VydChidWZmZXIgIT0gbnVsbCk7CiAgICAvLyBXcml0ZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgogICAgb2Zmc2V0ICs9IHNvY2tldC5fd3JpdGUoYnVmZmVyLCBvZmZzZXQsIGJ1ZmZlci5sZW5ndGggLSBvZmZzZXQpOwogICAgaWYgKG9mZnNldCA8IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgaWYgKCFwYXVzZWQpIHsKICAgICAgICBwYXVzZWQgPSB0cnVlOwogICAgICAgIHN1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgICB9CiAgICAgIHNvY2tldC5fZW5hYmxlV3JpdGVFdmVudCgpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyID0gbnVsbDsKICAgICAgaWYgKHBhdXNlZCkgewogICAgICAgIHBhdXNlZCA9IGZhbHNlOwogICAgICAgIHN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBkb25lKFtlcnJvciwgc3RhY2tUcmFjZV0pIHsKICAgIGlmIChzdHJlYW1Db21wbGV0ZXIgIT0gbnVsbCkgewogICAgICBpZiAoZXJyb3IgIT0gbnVsbCkgewogICAgICAgIHN0cmVhbUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdHJlYW1Db21wbGV0ZXIuY29tcGxldGUoc29ja2V0KTsKICAgICAgfQogICAgICBzdHJlYW1Db21wbGV0ZXIgPSBudWxsOwogICAgfQogIH0KCiAgdm9pZCBzdG9wKCkgewogICAgaWYgKHN1YnNjcmlwdGlvbiA9PSBudWxsKSByZXR1cm47CiAgICBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICBzdWJzY3JpcHRpb24gPSBudWxsOwogICAgcGF1c2VkID0gZmFsc2U7CiAgICBzb2NrZXQuX2Rpc2FibGVXcml0ZUV2ZW50KCk7CiAgfQp9CgpjbGFzcyBfU29ja2V0IGV4dGVuZHMgU3RyZWFtPFVpbnQ4TGlzdD4gaW1wbGVtZW50cyBTb2NrZXQgewogIFJhd1NvY2tldCBfcmF3OyAvLyBTZXQgdG8gbnVsbCB3aGVuIHRoZSByYXcgc29ja2V0IGlzIGNsb3NlZC4KICBib29sIF9jbG9zZWQgPSBmYWxzZTsgLy8gU2V0IHRvIHRydWUgd2hlbiB0aGUgcmF3IHNvY2tldCBpcyBjbG9zZWQuCiAgU3RyZWFtQ29udHJvbGxlcjxVaW50OExpc3Q+IF9jb250cm9sbGVyOwogIGJvb2wgX2NvbnRyb2xsZXJDbG9zZWQgPSBmYWxzZTsKICBfU29ja2V0U3RyZWFtQ29uc3VtZXIgX2NvbnN1bWVyOwogIElPU2luayBfc2luazsKICB2YXIgX3N1YnNjcmlwdGlvbjsKICB2YXIgX2RldGFjaFJlYWR5OwoKICBfU29ja2V0KHRoaXMuX3JhdykgewogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxVaW50OExpc3Q+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlLAogICAgICAgIG9uQ2FuY2VsOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvblBhdXNlOiBfb25QYXVzZVN0YXRlQ2hhbmdlLAogICAgICAgIG9uUmVzdW1lOiBfb25QYXVzZVN0YXRlQ2hhbmdlKTsKICAgIF9jb25zdW1lciA9IG5ldyBfU29ja2V0U3RyZWFtQ29uc3VtZXIodGhpcyk7CiAgICBfc2luayA9IG5ldyBJT1NpbmsoX2NvbnN1bWVyKTsKCiAgICAvLyBEaXNhYmxlIHJlYWQgZXZlbnRzIHVudGlsIHRoZXJlIGlzIGEgc3Vic2NyaXB0aW9uLgogICAgX3Jhdy5yZWFkRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwoKICAgIC8vIERpc2FibGUgd3JpdGUgZXZlbnRzIHVudGlsIHRoZSBjb25zdW1lciBuZWVkcyBpdCBmb3IgcGVuZGluZyB3cml0ZXMuCiAgICBfcmF3LndyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogIH0KCiAgZmFjdG9yeSBfU29ja2V0Ll93cml0ZVBpcGUoKSB7CiAgICByZXR1cm4gbmV3IF9Tb2NrZXQobmV3IF9SYXdTb2NrZXQuX3dyaXRlUGlwZSgpKTsKICB9CgogIGZhY3RvcnkgX1NvY2tldC5fcmVhZFBpcGUoW2ludCBmZF0pIHsKICAgIHJldHVybiBuZXcgX1NvY2tldChuZXcgX1Jhd1NvY2tldC5fcmVhZFBpcGUoZmQpKTsKICB9CgogIC8vIE5vdGU6IHRoaXMgY29kZSBzZWVtcyBhIGJpdCBzdXNwaWNpb3VzIGJlY2F1c2UgX3JhdyBjYW4gYmUgX1Jhd1NvY2tldCBhbmQKICAvLyBpdCBjYW4gYmUgX1Jhd1NlY3VyZVNvY2tldCBiZWNhdXNlIF9TZWN1cmVTb2NrZXQgZXh0ZW5kcyBfU29ja2V0CiAgLy8gYW5kIHRoZXNlIHR3byB0eXBlcyBhcmUgaW5jb21wYXRpYmxlIGJlY2F1c2UgX1Jhd1NlY3VyZVNvY2tldC5fc29ja2V0CiAgLy8gaXMgU29ja2V0IGFuZCBub3QgX05hdGl2ZVNvY2tldC4KICBfTmF0aXZlU29ja2V0IGdldCBfbmF0aXZlU29ja2V0ID0+IChfcmF3IGFzIF9SYXdTb2NrZXQpLl9zb2NrZXQ7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIEVuY29kaW5nIGdldCBlbmNvZGluZyA9PiBfc2luay5lbmNvZGluZzsKCiAgdm9pZCBzZXQgZW5jb2RpbmcoRW5jb2RpbmcgdmFsdWUpIHsKICAgIF9zaW5rLmVuY29kaW5nID0gdmFsdWU7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopID0+IF9zaW5rLndyaXRlKG9iaik7CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG9iaiA9ICIiXSkgPT4gX3Npbmsud3JpdGVsbihvYmopOwoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSA9PiBfc2luay53cml0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbc2VwID0gIiJdKSA9PiBfc2luay53cml0ZUFsbChvYmplY3RzLCBzZXApOwoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpID0+IF9zaW5rLmFkZChieXRlcyk7CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBzZW5kIGVycm9ycyBvbiBzb2NrZXRzIik7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgewogICAgcmV0dXJuIF9zaW5rLmFkZFN0cmVhbShzdHJlYW0pOwogIH0KCiAgRnV0dXJlIGZsdXNoKCkgPT4gX3NpbmsuZmx1c2goKTsKCiAgRnV0dXJlIGNsb3NlKCkgPT4gX3NpbmsuY2xvc2UoKTsKCiAgRnV0dXJlIGdldCBkb25lID0+IF9zaW5rLmRvbmU7CgogIHZvaWQgZGVzdHJveSgpIHsKICAgIC8vIERlc3Ryb3kgY2FuIGFsd2F5cyBiZSBjYWxsZWQgdG8gZ2V0IHJpZCBvZiBhIHNvY2tldC4KICAgIGlmIChfcmF3ID09IG51bGwpIHJldHVybjsKICAgIF9jb25zdW1lci5zdG9wKCk7CiAgICBfY2xvc2VSYXdTb2NrZXQoKTsKICAgIF9jb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTsKICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgfQoKICBib29sIHNldE9wdGlvbihTb2NrZXRPcHRpb24gb3B0aW9uLCBib29sIGVuYWJsZWQpIHsKICAgIGlmIChfcmF3ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfcmF3LnNldE9wdGlvbihvcHRpb24sIGVuYWJsZWQpOwogIH0KCiAgVWludDhMaXN0IGdldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSB7CiAgICBpZiAoX3JhdyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfcmF3LmdldFJhd09wdGlvbihvcHRpb24pOwogIH0KCiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgX3Jhdz8uc2V0UmF3T3B0aW9uKG9wdGlvbik7CiAgfQoKICBpbnQgZ2V0IHBvcnQgewogICAgaWYgKF9yYXcgPT0gbnVsbCkgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgOwogICAgcmV0dXJuIF9yYXcucG9ydDsKICB9CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyB7CiAgICBpZiAoX3JhdyA9PSBudWxsKSB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICA7CiAgICByZXR1cm4gX3Jhdy5hZGRyZXNzOwogIH0KCiAgaW50IGdldCByZW1vdGVQb3J0IHsKICAgIGlmIChfcmF3ID09IG51bGwpIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIDsKICAgIHJldHVybiBfcmF3LnJlbW90ZVBvcnQ7CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3MgewogICAgaWYgKF9yYXcgPT0gbnVsbCkgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgOwogICAgcmV0dXJuIF9yYXcucmVtb3RlQWRkcmVzczsKICB9CgogIEZ1dHVyZSBfZGV0YWNoUmF3KCkgewogICAgX2RldGFjaFJlYWR5ID0gbmV3IENvbXBsZXRlcigpOwogICAgX3NpbmsuY2xvc2UoKTsKICAgIHJldHVybiBfZGV0YWNoUmVhZHkuZnV0dXJlLnRoZW4oKF8pIHsKICAgICAgYXNzZXJ0KF9jb25zdW1lci5idWZmZXIgPT0gbnVsbCk7CiAgICAgIHZhciByYXcgPSBfcmF3OwogICAgICBfcmF3ID0gbnVsbDsKICAgICAgcmV0dXJuIFtyYXcsIF9zdWJzY3JpcHRpb25dOwogICAgfSk7CiAgfQoKICAvLyBFbnN1cmUgYSBzdWJzY3JpcHRpb24gb24gdGhlIHJhdyBzb2NrZXQuIEJvdGggdGhlIHN0cmVhbSBhbmQgdGhlCiAgLy8gY29uc3VtZXIgbmVlZHMgYSBzdWJzY3JpcHRpb24gYXMgdGhleSBzaGFyZSB0aGUgZXJyb3IgYW5kIGRvbmUKICAvLyBldmVudHMgZnJvbSB0aGUgcmF3IHNvY2tldC4KICB2b2lkIF9lbnN1cmVSYXdTb2NrZXRTdWJzY3JpcHRpb24oKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiA9PSBudWxsICYmIF9yYXcgIT0gbnVsbCkgewogICAgICBfc3Vic2NyaXB0aW9uID0gX3Jhdy5saXN0ZW4oX29uRGF0YSwKICAgICAgICAgIG9uRXJyb3I6IF9vbkVycm9yLCBvbkRvbmU6IF9vbkRvbmUsIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgfQogIH0KCiAgX2Nsb3NlUmF3U29ja2V0KCkgewogICAgdmFyIHRtcCA9IF9yYXc7CiAgICBfcmF3ID0gbnVsbDsKICAgIF9jbG9zZWQgPSB0cnVlOwogICAgdG1wLmNsb3NlKCk7CiAgfQoKICB2b2lkIF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmhhc0xpc3RlbmVyKSB7CiAgICAgIF9lbnN1cmVSYXdTb2NrZXRTdWJzY3JpcHRpb24oKTsKICAgICAgLy8gRW5hYmxlIHJlYWQgZXZlbnRzIGZvciBwcm92aWRpbmcgZGF0YSB0byBzdWJzY3JpcHRpb24uCiAgICAgIGlmIChfcmF3ICE9IG51bGwpIHsKICAgICAgICBfcmF3LnJlYWRFdmVudHNFbmFibGVkID0gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX2NvbnRyb2xsZXJDbG9zZWQgPSB0cnVlOwogICAgICBpZiAoX3JhdyAhPSBudWxsKSB7CiAgICAgICAgX3Jhdy5zaHV0ZG93bihTb2NrZXREaXJlY3Rpb24ucmVjZWl2ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX29uUGF1c2VTdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfcmF3ICE9IG51bGwpIHsKICAgICAgX3Jhdy5yZWFkRXZlbnRzRW5hYmxlZCA9ICFfY29udHJvbGxlci5pc1BhdXNlZDsKICAgIH0KICB9CgogIHZvaWQgX29uRGF0YShldmVudCkgewogICAgc3dpdGNoIChldmVudCkgewogICAgICBjYXNlIFJhd1NvY2tldEV2ZW50LnJlYWQ6CiAgICAgICAgaWYgKF9yYXcgPT0gbnVsbCkgYnJlYWs7CiAgICAgICAgdmFyIGJ1ZmZlciA9IF9yYXcucmVhZCgpOwogICAgICAgIGlmIChidWZmZXIgIT0gbnVsbCkgX2NvbnRyb2xsZXIuYWRkKGJ1ZmZlcik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUmF3U29ja2V0RXZlbnQud3JpdGU6CiAgICAgICAgX2NvbnN1bWVyLndyaXRlKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZDoKICAgICAgICBfY29udHJvbGxlckNsb3NlZCA9IHRydWU7CiAgICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CgogIHZvaWQgX29uRG9uZSgpIHsKICAgIGlmICghX2NvbnRyb2xsZXJDbG9zZWQpIHsKICAgICAgX2NvbnRyb2xsZXJDbG9zZWQgPSB0cnVlOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfQogICAgX2NvbnN1bWVyLmRvbmUoKTsKICB9CgogIHZvaWQgX29uRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgIGlmICghX2NvbnRyb2xsZXJDbG9zZWQpIHsKICAgICAgX2NvbnRyb2xsZXJDbG9zZWQgPSB0cnVlOwogICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICB9CiAgICBfY29uc3VtZXIuZG9uZShlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBpbnQgX3dyaXRlKExpc3Q8aW50PiBkYXRhLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7CiAgICBpZiAoX3JhdyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfcmF3LndyaXRlKGRhdGEsIG9mZnNldCwgbGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgdm9pZCBfZW5hYmxlV3JpdGVFdmVudCgpIHsKICAgIGlmIChfcmF3ICE9IG51bGwpIHsKICAgICAgX3Jhdy53cml0ZUV2ZW50c0VuYWJsZWQgPSB0cnVlOwogICAgfQogIH0KCiAgdm9pZCBfZGlzYWJsZVdyaXRlRXZlbnQoKSB7CiAgICBpZiAoX3JhdyAhPSBudWxsKSB7CiAgICAgIF9yYXcud3JpdGVFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICB9CiAgfQoKICB2b2lkIF9jb25zdW1lckRvbmUoKSB7CiAgICBpZiAoX2RldGFjaFJlYWR5ICE9IG51bGwpIHsKICAgICAgX2RldGFjaFJlYWR5LmNvbXBsZXRlKG51bGwpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9yYXcgIT0gbnVsbCkgewogICAgICAgIF9yYXcuc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uLnNlbmQpOwogICAgICAgIF9kaXNhYmxlV3JpdGVFdmVudCgpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHNldCBfb3duZXIob3duZXIpIHsKICAgIC8vIE5vdGU6IF9yYXcgY2FuIGJlIF9SYXdTb2NrZXQgYW5kIF9SYXdTZWN1cmVTb2NrZXQgd2hpY2ggYXJlIHR3bwogICAgLy8gaW5jb21wYXRpYmxlIHR5cGVzLgogICAgKF9yYXcgYXMgZHluYW1pYykuX293bmVyID0gb3duZXI7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgUmF3RGF0YWdyYW1Tb2NrZXQgewogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8UmF3RGF0YWdyYW1Tb2NrZXQ+IGJpbmQoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtib29sIHJldXNlQWRkcmVzczogdHJ1ZSwgYm9vbCByZXVzZVBvcnQ6IGZhbHNlLCBpbnQgdHRsOiAxfSkgewogICAgcmV0dXJuIF9SYXdEYXRhZ3JhbVNvY2tldC5iaW5kKGhvc3QsIHBvcnQsIHJldXNlQWRkcmVzcywgcmV1c2VQb3J0LCB0dGwpOwogIH0KfQoKY2xhc3MgX1Jhd0RhdGFncmFtU29ja2V0IGV4dGVuZHMgU3RyZWFtPFJhd1NvY2tldEV2ZW50PgogICAgaW1wbGVtZW50cyBSYXdEYXRhZ3JhbVNvY2tldCB7CiAgX05hdGl2ZVNvY2tldCBfc29ja2V0OwogIFN0cmVhbUNvbnRyb2xsZXI8UmF3U29ja2V0RXZlbnQ+IF9jb250cm9sbGVyOwogIGJvb2wgX3JlYWRFdmVudHNFbmFibGVkID0gdHJ1ZTsKICBib29sIF93cml0ZUV2ZW50c0VuYWJsZWQgPSB0cnVlOwoKICBfUmF3RGF0YWdyYW1Tb2NrZXQodGhpcy5fc29ja2V0KSB7CiAgICB2YXIgem9uZSA9IFpvbmUuY3VycmVudDsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8UmF3U29ja2V0RXZlbnQ+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlLAogICAgICAgIG9uQ2FuY2VsOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvblBhdXNlOiBfb25QYXVzZVN0YXRlQ2hhbmdlLAogICAgICAgIG9uUmVzdW1lOiBfb25QYXVzZVN0YXRlQ2hhbmdlKTsKICAgIF9zb2NrZXQuc2V0SGFuZGxlcnMoCiAgICAgICAgcmVhZDogKCkgPT4gX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LnJlYWQpLAogICAgICAgIHdyaXRlOiAoKSB7CiAgICAgICAgICAvLyBUaGUgd3JpdGUgZXZlbnQgaGFuZGxlciBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGJ5IHRoZQogICAgICAgICAgLy8gZXZlbnQgaGFuZGxlciB3aGVuIGl0IGZpcmVzLgogICAgICAgICAgd3JpdGVFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICAgICAgICBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQud3JpdGUpOwogICAgICAgIH0sCiAgICAgICAgY2xvc2VkOiAoKSA9PiBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZCksCiAgICAgICAgZGVzdHJveWVkOiAoKSB7CiAgICAgICAgICBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQuY2xvc2VkKTsKICAgICAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgICAgfSwKICAgICAgICBlcnJvcjogem9uZS5iaW5kQmluYXJ5Q2FsbGJhY2tHdWFyZGVkKChlLCBzdCkgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSwgc3QpOwogICAgICAgICAgX3NvY2tldC5jbG9zZSgpOwogICAgICAgIH0pKTsKICB9CgogIHN0YXRpYyBGdXR1cmU8UmF3RGF0YWdyYW1Tb2NrZXQ+IGJpbmQoCiAgICAgIGhvc3QsIGludCBwb3J0LCBib29sIHJldXNlQWRkcmVzcywgYm9vbCByZXVzZVBvcnQsIGludCB0dGwpIHsKICAgIF90aHJvd09uQmFkUG9ydChwb3J0KTsKICAgIF90aHJvd09uQmFkVHRsKHR0bCk7CiAgICByZXR1cm4gX05hdGl2ZVNvY2tldC5iaW5kRGF0YWdyYW0oaG9zdCwgcG9ydCwgcmV1c2VBZGRyZXNzLCByZXVzZVBvcnQsIHR0bCkKICAgICAgICAudGhlbigoc29ja2V0KSA9PiBuZXcgX1Jhd0RhdGFncmFtU29ja2V0KHNvY2tldCkpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBsaXN0ZW4odm9pZCBvbkRhdGEoUmF3U29ja2V0RXZlbnQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpID0+IF9zb2NrZXQuY2xvc2UoKS50aGVuPFJhd0RhdGFncmFtU29ja2V0PigoXykgPT4gdGhpcyk7CgogIGludCBzZW5kKExpc3Q8aW50PiBidWZmZXIsIEludGVybmV0QWRkcmVzcyBhZGRyZXNzLCBpbnQgcG9ydCkgPT4KICAgICAgX3NvY2tldC5zZW5kKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCwgYWRkcmVzcywgcG9ydCk7CgogIERhdGFncmFtIHJlY2VpdmUoKSB7CiAgICByZXR1cm4gX3NvY2tldC5yZWNlaXZlKCk7CiAgfQoKICB2b2lkIGpvaW5NdWx0aWNhc3QoSW50ZXJuZXRBZGRyZXNzIGdyb3VwLCBbTmV0d29ya0ludGVyZmFjZSBpbnRlcmZhY2VdKSB7CiAgICBfc29ja2V0LmpvaW5NdWx0aWNhc3QoZ3JvdXAsIGludGVyZmFjZSk7CiAgfQoKICB2b2lkIGxlYXZlTXVsdGljYXN0KEludGVybmV0QWRkcmVzcyBncm91cCwgW05ldHdvcmtJbnRlcmZhY2UgaW50ZXJmYWNlXSkgewogICAgX3NvY2tldC5sZWF2ZU11bHRpY2FzdChncm91cCwgaW50ZXJmYWNlKTsKICB9CgogIGJvb2wgZ2V0IHJlYWRFdmVudHNFbmFibGVkID0+IF9yZWFkRXZlbnRzRW5hYmxlZDsKICB2b2lkIHNldCByZWFkRXZlbnRzRW5hYmxlZChib29sIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgIT0gX3JlYWRFdmVudHNFbmFibGVkKSB7CiAgICAgIF9yZWFkRXZlbnRzRW5hYmxlZCA9IHZhbHVlOwogICAgICBpZiAoIV9jb250cm9sbGVyLmlzUGF1c2VkKSBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICBib29sIGdldCB3cml0ZUV2ZW50c0VuYWJsZWQgPT4gX3dyaXRlRXZlbnRzRW5hYmxlZDsKICB2b2lkIHNldCB3cml0ZUV2ZW50c0VuYWJsZWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlICE9IF93cml0ZUV2ZW50c0VuYWJsZWQpIHsKICAgICAgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IHZhbHVlOwogICAgICBpZiAoIV9jb250cm9sbGVyLmlzUGF1c2VkKSBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICBib29sIGdldCBtdWx0aWNhc3RMb29wYmFjayA9PgogICAgICBfc29ja2V0LmdldE9wdGlvbihTb2NrZXRPcHRpb24uX2lwTXVsdGljYXN0TG9vcCk7CiAgdm9pZCBzZXQgbXVsdGljYXN0TG9vcGJhY2soYm9vbCB2YWx1ZSkgPT4KICAgICAgX3NvY2tldC5zZXRPcHRpb24oU29ja2V0T3B0aW9uLl9pcE11bHRpY2FzdExvb3AsIHZhbHVlKTsKCiAgaW50IGdldCBtdWx0aWNhc3RIb3BzID0+IF9zb2NrZXQuZ2V0T3B0aW9uKFNvY2tldE9wdGlvbi5faXBNdWx0aWNhc3RIb3BzKTsKICB2b2lkIHNldCBtdWx0aWNhc3RIb3BzKGludCB2YWx1ZSkgPT4KICAgICAgX3NvY2tldC5zZXRPcHRpb24oU29ja2V0T3B0aW9uLl9pcE11bHRpY2FzdEhvcHMsIHZhbHVlKTsKCiAgTmV0d29ya0ludGVyZmFjZSBnZXQgbXVsdGljYXN0SW50ZXJmYWNlID0+IHRocm93ICJOb3QgaW1wbGVtZW50ZWQiOwogIHZvaWQgc2V0IG11bHRpY2FzdEludGVyZmFjZShOZXR3b3JrSW50ZXJmYWNlIHZhbHVlKSA9PgogICAgICB0aHJvdyAiTm90IGltcGxlbWVudGVkIjsKCiAgYm9vbCBnZXQgYnJvYWRjYXN0RW5hYmxlZCA9PiBfc29ja2V0LmdldE9wdGlvbihTb2NrZXRPcHRpb24uX2lwQnJvYWRjYXN0KTsKICB2b2lkIHNldCBicm9hZGNhc3RFbmFibGVkKGJvb2wgdmFsdWUpID0+CiAgICAgIF9zb2NrZXQuc2V0T3B0aW9uKFNvY2tldE9wdGlvbi5faXBCcm9hZGNhc3QsIHZhbHVlKTsKCiAgaW50IGdldCBwb3J0ID0+IF9zb2NrZXQucG9ydDsKCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzID0+IF9zb2NrZXQuYWRkcmVzczsKCiAgX3BhdXNlKCkgewogICAgX3NvY2tldC5zZXRMaXN0ZW5pbmcocmVhZDogZmFsc2UsIHdyaXRlOiBmYWxzZSk7CiAgfQoKICB2b2lkIF9yZXN1bWUoKSB7CiAgICBfc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBfcmVhZEV2ZW50c0VuYWJsZWQsIHdyaXRlOiBfd3JpdGVFdmVudHNFbmFibGVkKTsKICB9CgogIHZvaWQgX29uUGF1c2VTdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgewogICAgICBfcGF1c2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9yZXN1bWUoKTsKICAgIH0KICB9CgogIHZvaWQgX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHsKICAgICAgX3Jlc3VtZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3NvY2tldC5jbG9zZSgpOwogICAgfQogIH0KCiAgVWludDhMaXN0IGdldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSA9PgogICAgICBfc29ja2V0LmdldFJhd09wdGlvbihvcHRpb24pOwogIHZvaWQgc2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pID0+IF9zb2NrZXQuc2V0UmF3T3B0aW9uKG9wdGlvbik7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpEYXRhZ3JhbSBfbWFrZURhdGFncmFtKAogICAgVWludDhMaXN0IGRhdGEsIFN0cmluZyBhZGRyZXNzLCBVaW50OExpc3QgaW5fYWRkciwgaW50IHBvcnQpIHsKICByZXR1cm4gbmV3IERhdGFncmFtKGRhdGEsIG5ldyBfSW50ZXJuZXRBZGRyZXNzKGFkZHJlc3MsIG51bGwsIGluX2FkZHIpLCBwb3J0KTsKfQqH0wBOTjwBIAEHGAk5QkoEAgEHEgkzK0MEAQlIGT8EAgEHGCkyAQkoMS0GNx8EASwvAgEHGAkuKgQBCS4qBAEJKSUEAQkpJQQBCSwwBAEJOz0zBAEJLC5CBAIBBxkJIh0EAQkuJCQ8KSosFQQBSAIBITkzBAIBHy0xBAIBNC0tKCgoKQEpOCk4UVEBGBYcAUUhIgE2AUABGBQlIwElOC4KMwYEARkUJSg5ASUjRAYEARkUJTs4ASUiJAYEAUoBPQEzHkQG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TQIBIhhDUQIBH2RhcnQ6aW8tcGF0Y2gvc29ja2V0X3BhdGNoLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3NlcnZpY2Vfb2JqZWN0LmRhcnSC6i8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgppbnQgX25leHRTZXJ2aWNlSWQgPSAxOwoKLy8gVE9ETyhham9obnNlbik6IFVzZSBvdGhlciB3YXkgb2YgZ2V0dGluZyBhIHVuaXF1ZSBpZC4KYWJzdHJhY3QgY2xhc3MgX1NlcnZpY2VPYmplY3QgewogIGludCBfX3NlcnZpY2VJZCA9IDA7CiAgaW50IGdldCBfc2VydmljZUlkIHsKICAgIGlmIChfX3NlcnZpY2VJZCA9PSAwKSBfX3NlcnZpY2VJZCA9IF9uZXh0U2VydmljZUlkKys7CiAgICByZXR1cm4gX19zZXJ2aWNlSWQ7CiAgfQoKICBNYXAgX3RvSlNPTihib29sIHJlZik7CgogIFN0cmluZyBnZXQgX3NlcnZpY2VQYXRoID0+ICIkX3NlcnZpY2VUeXBlUGF0aC8kX3NlcnZpY2VJZCI7CgogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlUGF0aDsKCiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVOYW1lOwoKICBTdHJpbmcgX3NlcnZpY2VUeXBlKGJvb2wgcmVmKSB7CiAgICBpZiAocmVmKSByZXR1cm4gIkAkX3NlcnZpY2VUeXBlTmFtZSI7CiAgICByZXR1cm4gX3NlcnZpY2VUeXBlTmFtZTsKICB9Cn0KHwBOTjwBEQEYATkgFxc6GAQBGQE+AR8BHwEiKh0EAgEbZGFydDppby9zZXJ2aWNlX29iamVjdC5kYXJ0OG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vc2VjdXJlX3NvY2tldF9wYXRjaC5kYXJ0nbEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFNlY3VyZVNvY2tldCB7CiAgQHBhdGNoCiAgZmFjdG9yeSBTZWN1cmVTb2NrZXQuXyhSYXdTZWN1cmVTb2NrZXQgcmF3U29ja2V0KSA9PgogICAgICBuZXcgX1NlY3VyZVNvY2tldChyYXdTb2NrZXQpOwp9CgpAcGF0Y2gKY2xhc3MgX1NlY3VyZUZpbHRlciB7CiAgQHBhdGNoCiAgZmFjdG9yeSBfU2VjdXJlRmlsdGVyLl8oKSA9PiBuZXcgX1NlY3VyZUZpbHRlckltcGwuXygpOwp9CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBYNTA5Q2VydGlmaWNhdGUgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IFg1MDlDZXJ0aWZpY2F0ZS5fKCkgPT4gbmV3IF9YNTA5Q2VydGlmaWNhdGVJbXBsLl8oKTsKfQoKY2xhc3MgX1NlY3VyZVNvY2tldCBleHRlbmRzIF9Tb2NrZXQgaW1wbGVtZW50cyBTZWN1cmVTb2NrZXQgewogIF9SYXdTZWN1cmVTb2NrZXQgZ2V0IF9yYXcgPT4gc3VwZXIuX3JhdyBhcyBfUmF3U2VjdXJlU29ja2V0OwoKICBfU2VjdXJlU29ja2V0KFJhd1NlY3VyZVNvY2tldCByYXcpIDogc3VwZXIocmF3KTsKCiAgdm9pZCByZW5lZ290aWF0ZSgKICAgICAge2Jvb2wgdXNlU2Vzc2lvbkNhY2hlOiB0cnVlLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZX0pIHsKICAgIF9yYXcucmVuZWdvdGlhdGUoCiAgICAgICAgdXNlU2Vzc2lvbkNhY2hlOiB1c2VTZXNzaW9uQ2FjaGUsCiAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUpOwogIH0KCiAgWDUwOUNlcnRpZmljYXRlIGdldCBwZWVyQ2VydGlmaWNhdGUgewogICAgaWYgKF9yYXcgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigicGVlckNlcnRpZmljYXRlIGNhbGxlZCBvbiBkZXN0cm95ZWQgU2VjdXJlU29ja2V0Iik7CiAgICB9CiAgICByZXR1cm4gX3Jhdy5wZWVyQ2VydGlmaWNhdGU7CiAgfQoKICBTdHJpbmcgZ2V0IHNlbGVjdGVkUHJvdG9jb2wgewogICAgaWYgKF9yYXcgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigic2VsZWN0ZWRQcm90b2NvbCBjYWxsZWQgb24gZGVzdHJveWVkIFNlY3VyZVNvY2tldCIpOwogICAgfQogICAgcmV0dXJuIF9yYXcuc2VsZWN0ZWRQcm90b2NvbDsKICB9Cn0KCi8qKgogKiBfU2VjdXJlRmlsdGVySW1wbCB3cmFwcyBhIGZpbHRlciB0aGF0IGVuY3J5cHRzIGFuZCBkZWNyeXB0cyBkYXRhIHRyYXZlbGxpbmcKICogb3ZlciBhbiBlbmNyeXB0ZWQgc29ja2V0LiAgVGhlIGZpbHRlciBhbHNvIGhhbmRsZXMgdGhlIGhhbmRzaGFraW5nCiAqIGFuZCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24uCiAqCiAqIFRoZSBmaWx0ZXIgZXhwb3NlcyBpdHMgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGFzIERhcnQgb2JqZWN0cyB0aGF0CiAqIGFyZSBiYWNrZWQgYnkgYW4gZXh0ZXJuYWwgQyBhcnJheSBvZiBieXRlcywgc28gdGhhdCBib3RoIERhcnQgY29kZSBhbmQKICogbmF0aXZlIGNvZGUgY2FuIGFjY2VzcyB0aGUgc2FtZSBkYXRhLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfU2VjdXJlRmlsdGVySW1wbCBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMQogICAgaW1wbGVtZW50cyBfU2VjdXJlRmlsdGVyIHsKICAvLyBQZXJmb3JtYW5jZSBpcyBpbXByb3ZlZCBpZiBhIGZ1bGwgYnVmZmVyIG9mIHBsYWludGV4dCBmaXRzCiAgLy8gaW4gdGhlIGVuY3J5cHRlZCBidWZmZXIsIHdoZW4gZW5jcnlwdGVkLgogIC8vIFNJWkUgYW5kIEVOQ1JZUFRFRF9TSVpFIGFyZSByZWZlcmVuY2VkIGZyb20gQysrLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgZmluYWwgaW50IFNJWkUgPSA4ICogMTAyNDsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBFTkNSWVBURURfU0laRSA9IDEwICogMTAyNDsKCiAgX1NlY3VyZUZpbHRlckltcGwuXygpIHsKICAgIGJ1ZmZlcnMgPSBuZXcgTGlzdDxfRXh0ZXJuYWxCdWZmZXI+KF9SYXdTZWN1cmVTb2NrZXQuYnVmZmVyQ291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfUmF3U2VjdXJlU29ja2V0LmJ1ZmZlckNvdW50OyArK2kpIHsKICAgICAgYnVmZmVyc1tpXSA9IG5ldyBfRXh0ZXJuYWxCdWZmZXIoCiAgICAgICAgICBfUmF3U2VjdXJlU29ja2V0Ll9pc0J1ZmZlckVuY3J5cHRlZChpKSA/IEVOQ1JZUFRFRF9TSVpFIDogU0laRSk7CiAgICB9CiAgfQoKICB2b2lkIGNvbm5lY3QoCiAgICAgIFN0cmluZyBob3N0TmFtZSwKICAgICAgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgaXNfc2VydmVyLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIFVpbnQ4TGlzdCBwcm90b2NvbHMpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X0Nvbm5lY3QiOwoKICB2b2lkIGRlc3Ryb3koKSB7CiAgICBidWZmZXJzID0gbnVsbDsKICAgIF9kZXN0cm95KCk7CiAgfQoKICB2b2lkIF9kZXN0cm95KCkgbmF0aXZlICJTZWN1cmVTb2NrZXRfRGVzdHJveSI7CgogIHZvaWQgaGFuZHNoYWtlKCkgbmF0aXZlICJTZWN1cmVTb2NrZXRfSGFuZHNoYWtlIjsKCiAgdm9pZCByZWhhbmRzaGFrZSgpID0+IHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoKTsKCiAgaW50IHByb2Nlc3NCdWZmZXIoaW50IGJ1ZmZlckluZGV4KSA9PiB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCk7CgogIFN0cmluZyBzZWxlY3RlZFByb3RvY29sKCkgbmF0aXZlICJTZWN1cmVTb2NrZXRfR2V0U2VsZWN0ZWRQcm90b2NvbCI7CgogIHZvaWQgcmVuZWdvdGlhdGUoYm9vbCB1c2VTZXNzaW9uQ2FjaGUsIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSkgbmF0aXZlICJTZWN1cmVTb2NrZXRfUmVuZWdvdGlhdGUiOwoKICB2b2lkIGluaXQoKSBuYXRpdmUgIlNlY3VyZVNvY2tldF9Jbml0IjsKCiAgWDUwOUNlcnRpZmljYXRlIGdldCBwZWVyQ2VydGlmaWNhdGUgbmF0aXZlICJTZWN1cmVTb2NrZXRfUGVlckNlcnRpZmljYXRlIjsKCiAgdm9pZCByZWdpc3RlckJhZENlcnRpZmljYXRlQ2FsbGJhY2soRnVuY3Rpb24gY2FsbGJhY2spCiAgICAgIG5hdGl2ZSAiU2VjdXJlU29ja2V0X1JlZ2lzdGVyQmFkQ2VydGlmaWNhdGVDYWxsYmFjayI7CgogIHZvaWQgcmVnaXN0ZXJIYW5kc2hha2VDb21wbGV0ZUNhbGxiYWNrKEZ1bmN0aW9uIGhhbmRzaGFrZUNvbXBsZXRlSGFuZGxlcikKICAgICAgbmF0aXZlICJTZWN1cmVTb2NrZXRfUmVnaXN0ZXJIYW5kc2hha2VDb21wbGV0ZUNhbGxiYWNrIjsKCiAgLy8gVGhpcyBpcyBhIHNlY3VyaXR5IGlzc3VlLCBhcyBpdCBleHBvc2VzIGEgcmF3IHBvaW50ZXIgdG8gRGFydCBjb2RlLgogIGludCBfcG9pbnRlcigpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X0ZpbHRlclBvaW50ZXIiOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJnZXQiKQogIExpc3Q8X0V4dGVybmFsQnVmZmVyPiBidWZmZXJzOwp9CgpAcGF0Y2gKY2xhc3MgU2VjdXJpdHlDb250ZXh0IHsKICBAcGF0Y2gKICBmYWN0b3J5IFNlY3VyaXR5Q29udGV4dCh7Ym9vbCB3aXRoVHJ1c3RlZFJvb3RzOiBmYWxzZX0pIHsKICAgIHJldHVybiBuZXcgX1NlY3VyaXR5Q29udGV4dCh3aXRoVHJ1c3RlZFJvb3RzKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBTZWN1cml0eUNvbnRleHQgZ2V0IGRlZmF1bHRDb250ZXh0IHsKICAgIHJldHVybiBfU2VjdXJpdHlDb250ZXh0LmRlZmF1bHRDb250ZXh0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGJvb2wgZ2V0IGFscG5TdXBwb3J0ZWQgPT4gdHJ1ZTsKfQoKY2xhc3MgX1NlY3VyaXR5Q29udGV4dCBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMQogICAgaW1wbGVtZW50cyBTZWN1cml0eUNvbnRleHQgewogIF9TZWN1cml0eUNvbnRleHQoYm9vbCB3aXRoVHJ1c3RlZFJvb3RzKSB7CiAgICBfY3JlYXRlTmF0aXZlQ29udGV4dCgpOwogICAgaWYgKHdpdGhUcnVzdGVkUm9vdHMpIHsKICAgICAgX3RydXN0QnVpbHRpblJvb3RzKCk7CiAgICB9CiAgfQoKICB2b2lkIF9jcmVhdGVOYXRpdmVDb250ZXh0KCkgbmF0aXZlICJTZWN1cml0eUNvbnRleHRfQWxsb2NhdGUiOwoKICBzdGF0aWMgZmluYWwgU2VjdXJpdHlDb250ZXh0IGRlZmF1bHRDb250ZXh0ID0gbmV3IF9TZWN1cml0eUNvbnRleHQodHJ1ZSk7CgogIHZvaWQgdXNlUHJpdmF0ZUtleShTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IChuZXcgRmlsZShmaWxlKSkucmVhZEFzQnl0ZXNTeW5jKCk7CiAgICB1c2VQcml2YXRlS2V5Qnl0ZXMoYnl0ZXMsIHBhc3N3b3JkOiBwYXNzd29yZCk7CiAgfQoKICB2b2lkIHVzZVByaXZhdGVLZXlCeXRlcyhMaXN0PGludD4ga2V5Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KQogICAgICBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9Vc2VQcml2YXRlS2V5Qnl0ZXMiOwoKICB2b2lkIHNldFRydXN0ZWRDZXJ0aWZpY2F0ZXMoU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSAobmV3IEZpbGUoZmlsZSkpLnJlYWRBc0J5dGVzU3luYygpOwogICAgc2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzKGJ5dGVzLCBwYXNzd29yZDogcGFzc3dvcmQpOwogIH0KCiAgdm9pZCBzZXRUcnVzdGVkQ2VydGlmaWNhdGVzQnl0ZXMoTGlzdDxpbnQ+IGNlcnRCeXRlcywge1N0cmluZyBwYXNzd29yZH0pCiAgICAgIG5hdGl2ZSAiU2VjdXJpdHlDb250ZXh0X1NldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlcyI7CgogIHZvaWQgdXNlQ2VydGlmaWNhdGVDaGFpbihTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IChuZXcgRmlsZShmaWxlKSkucmVhZEFzQnl0ZXNTeW5jKCk7CiAgICB1c2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXMoYnl0ZXMsIHBhc3N3b3JkOiBwYXNzd29yZCk7CiAgfQoKICB2b2lkIHVzZUNlcnRpZmljYXRlQ2hhaW5CeXRlcyhMaXN0PGludD4gY2hhaW5CeXRlcywge1N0cmluZyBwYXNzd29yZH0pCiAgICAgIG5hdGl2ZSAiU2VjdXJpdHlDb250ZXh0X1VzZUNlcnRpZmljYXRlQ2hhaW5CeXRlcyI7CgogIHZvaWQgc2V0Q2xpZW50QXV0aG9yaXRpZXMoU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSAobmV3IEZpbGUoZmlsZSkpLnJlYWRBc0J5dGVzU3luYygpOwogICAgc2V0Q2xpZW50QXV0aG9yaXRpZXNCeXRlcyhieXRlcywgcGFzc3dvcmQ6IHBhc3N3b3JkKTsKICB9CgogIHZvaWQgc2V0Q2xpZW50QXV0aG9yaXRpZXNCeXRlcyhMaXN0PGludD4gYXV0aENlcnRCeXRlcywge1N0cmluZyBwYXNzd29yZH0pCiAgICAgIG5hdGl2ZSAiU2VjdXJpdHlDb250ZXh0X1NldENsaWVudEF1dGhvcml0aWVzQnl0ZXMiOwoKICB2b2lkIHNldEFscG5Qcm90b2NvbHMoTGlzdDxTdHJpbmc+IHByb3RvY29scywgYm9vbCBpc1NlcnZlcikgewogICAgVWludDhMaXN0IGVuY29kZWRQcm90b2NvbHMgPQogICAgICAgIFNlY3VyaXR5Q29udGV4dC5fcHJvdG9jb2xzVG9MZW5ndGhFbmNvZGluZyhwcm90b2NvbHMpOwogICAgX3NldEFscG5Qcm90b2NvbHMoZW5jb2RlZFByb3RvY29scywgaXNTZXJ2ZXIpOwogIH0KCiAgdm9pZCBfc2V0QWxwblByb3RvY29scyhVaW50OExpc3QgcHJvdG9jb2xzLCBib29sIGlzU2VydmVyKQogICAgICBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9TZXRBbHBuUHJvdG9jb2xzIjsKICB2b2lkIF90cnVzdEJ1aWx0aW5Sb290cygpIG5hdGl2ZSAiU2VjdXJpdHlDb250ZXh0X1RydXN0QnVpbHRpblJvb3RzIjsKfQoKLyoqCiAqIF9YNTA5Q2VydGlmaWNhdGVJbXBsIHdyYXBzIGFuIFg1MDkgY2VydGlmaWNhdGUgb2JqZWN0IGhlbGQgYnkgdGhlIEJvcmluZ1NTTAogKiBsaWJyYXJ5LiBJdCBleHBvc2VzIHRoZSBmaWVsZHMgb2YgdGhlIGNlcnRpZmljYXRlIG9iamVjdC4KICovCmNsYXNzIF9YNTA5Q2VydGlmaWNhdGVJbXBsIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxCiAgICBpbXBsZW1lbnRzIFg1MDlDZXJ0aWZpY2F0ZSB7CiAgLy8gVGhlIG5hdGl2ZSBmaWVsZCBtdXN0IGJlIHNldCBtYW51YWxseSBvbiBhIG5ldyBvYmplY3QsIGluIG5hdGl2ZSBjb2RlLgogIC8vIFRoaXMgaXMgZG9uZSBieSBXcmFwcGVkWDUwOSBpbiBzZWN1cmVfc29ja2V0LmNjLgogIF9YNTA5Q2VydGlmaWNhdGVJbXBsLl8oKTsKCiAgVWludDhMaXN0IF9jYWNoZWREZXI7CiAgVWludDhMaXN0IGdldCBfZGVyIG5hdGl2ZSAiWDUwOV9EZXIiOwogIFVpbnQ4TGlzdCBnZXQgZGVyIHsKICAgIGlmIChfY2FjaGVkRGVyID09IG51bGwpIHsKICAgICAgX2NhY2hlZERlciA9IF9kZXI7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZERlcjsKICB9CgogIFN0cmluZyBfY2FjaGVkUGVtOwogIFN0cmluZyBnZXQgX3BlbSBuYXRpdmUgIlg1MDlfUGVtIjsKICBTdHJpbmcgZ2V0IHBlbSB7CiAgICBpZiAoX2NhY2hlZFBlbSA9PSBudWxsKSB7CiAgICAgIF9jYWNoZWRQZW0gPSBfcGVtOwogICAgfQogICAgcmV0dXJuIF9jYWNoZWRQZW07CiAgfQoKICBVaW50OExpc3QgX2NhY2hlZFNoYTE7CiAgVWludDhMaXN0IGdldCBfc2hhMSBuYXRpdmUgIlg1MDlfU2hhMSI7CiAgVWludDhMaXN0IGdldCBzaGExIHsKICAgIGlmIChfY2FjaGVkU2hhMSA9PSBudWxsKSB7CiAgICAgIF9jYWNoZWRTaGExID0gX3NoYTE7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZFNoYTE7CiAgfQoKICBTdHJpbmcgZ2V0IHN1YmplY3QgbmF0aXZlICJYNTA5X1N1YmplY3QiOwogIFN0cmluZyBnZXQgaXNzdWVyIG5hdGl2ZSAiWDUwOV9Jc3N1ZXIiOwogIERhdGVUaW1lIGdldCBzdGFydFZhbGlkaXR5IHsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goX3N0YXJ0VmFsaWRpdHkoKSwKICAgICAgICBpc1V0YzogdHJ1ZSk7CiAgfQoKICBEYXRlVGltZSBnZXQgZW5kVmFsaWRpdHkgewogICAgcmV0dXJuIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChfZW5kVmFsaWRpdHkoKSwgaXNVdGM6IHRydWUpOwogIH0KCiAgaW50IF9zdGFydFZhbGlkaXR5KCkgbmF0aXZlICJYNTA5X1N0YXJ0VmFsaWRpdHkiOwogIGludCBfZW5kVmFsaWRpdHkoKSBuYXRpdmUgIlg1MDlfRW5kVmFsaWRpdHkiOwp9CoD9AE5OPAEgAQcVCTckAgEHFgk6AgEHGhgJHD8CAT4/ATMBFCMsLxYqPD0EASgYUAYhBAEgGFEGIgQCAQRPRiEDSEopBBo5H0AuNhwkHC8BGkc9KEsGBAEQFx8WJSU6ARMUEAQBMQE0ATgBSAFHAUhIASoBTQE5PAFMPwFJNgEjIQIBBxgJPDMEAQkuLAQBCSkCATghLBwcHAYEAUEBTAE3OjMEAUEzAUA6PAQBSzwBPTo5BAFJOQE+OjoEAU06AUEhPzMEAT0xSAIBBE89BDwhTDYcARgoFh4ZBhcEARUlEx4ZBhcEARkqFx8bBhgEASwqH0UWBAEdUQQBNDACASZkYXJ0OmlvLXBhdGNoL3NlY3VyZV9zb2NrZXRfcGF0Y2guZGFydDZvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL3N5bmNfc29ja2V0X3BhdGNoLmRhcnSm4i8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgUmF3U3luY2hyb25vdXNTb2NrZXQgewogIEBwYXRjaAogIHN0YXRpYyBSYXdTeW5jaHJvbm91c1NvY2tldCBjb25uZWN0U3luYyhob3N0LCBpbnQgcG9ydCkgewogICAgcmV0dXJuIF9SYXdTeW5jaHJvbm91c1NvY2tldC5jb25uZWN0U3luYyhob3N0LCBwb3J0KTsKICB9Cn0KCmNsYXNzIF9SYXdTeW5jaHJvbm91c1NvY2tldCBpbXBsZW1lbnRzIFJhd1N5bmNocm9ub3VzU29ja2V0IHsKICBmaW5hbCBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQgX3NvY2tldDsKCiAgX1Jhd1N5bmNocm9ub3VzU29ja2V0KHRoaXMuX3NvY2tldCk7CgogIHN0YXRpYyBSYXdTeW5jaHJvbm91c1NvY2tldCBjb25uZWN0U3luYyhob3N0LCBpbnQgcG9ydCkgewogICAgX3Rocm93T25CYWRQb3J0KHBvcnQpOwogICAgcmV0dXJuIG5ldyBfUmF3U3luY2hyb25vdXNTb2NrZXQoCiAgICAgICAgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0LmNvbm5lY3RTeW5jKGhvc3QsIHBvcnQpKTsKICB9CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CiAgaW50IGdldCBwb3J0ID0+IF9zb2NrZXQucG9ydDsKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3MgPT4gX3NvY2tldC5yZW1vdGVBZGRyZXNzOwogIGludCBnZXQgcmVtb3RlUG9ydCA9PiBfc29ja2V0LnJlbW90ZVBvcnQ7CgogIGludCBhdmFpbGFibGUoKSA9PiBfc29ja2V0LmF2YWlsYWJsZTsKCiAgdm9pZCBjbG9zZVN5bmMoKSA9PiBfc29ja2V0LmNsb3NlU3luYygpOwoKICBpbnQgcmVhZEludG9TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgPT4KICAgICAgX3NvY2tldC5yZWFkSW50b1N5bmMoYnVmZmVyLCBzdGFydCwgZW5kKTsKCiAgTGlzdDxpbnQ+IHJlYWRTeW5jKGludCBieXRlcykgPT4gX3NvY2tldC5yZWFkU3luYyhieXRlcyk7CgogIHZvaWQgc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uIGRpcmVjdGlvbikgPT4gX3NvY2tldC5zaHV0ZG93bihkaXJlY3Rpb24pOwoKICB2b2lkIHdyaXRlRnJvbVN5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSA9PgogICAgICBfc29ja2V0LndyaXRlRnJvbVN5bmMoYnVmZmVyLCBzdGFydCwgZW5kKTsKfQoKLy8gVGhlIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIG1peGluLCBkdWUgdG8gbWlzc2luZwovLyBpbXBsaWNpdCBjb25zdHJ1Y3Rvci4KY2xhc3MgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0TmF0aXZlV3JhcHBlciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSB7fQoKLy8gVGhlIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCBjbGFzcyBlbmNhcHN1bGF0ZXMgYSBzeW5jaHJvbm91cyBPUyBzb2NrZXQuCmNsYXNzIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCBleHRlbmRzIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldE5hdGl2ZVdyYXBwZXIgewogIC8vIFNvY2tldCBjbG9zZSBzdGF0ZS4KICBib29sIGlzQ2xvc2VkID0gZmFsc2U7CiAgYm9vbCBpc0Nsb3NlZFJlYWQgPSBmYWxzZTsKICBib29sIGlzQ2xvc2VkV3JpdGUgPSBmYWxzZTsKCiAgLy8gSG9sZHMgdGhlIGFkZHJlc3MgdXNlZCB0byBjb25uZWN0IHRoZSBzb2NrZXQuCiAgSW50ZXJuZXRBZGRyZXNzIGxvY2FsQWRkcmVzczsKCiAgLy8gSG9sZHMgdGhlIHBvcnQgb2YgdGhlIHNvY2tldCwgMCBpZiBub3Qga25vd24uCiAgaW50IGxvY2FsUG9ydCA9IDA7CgogIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8gcmVzb3VyY2VJbmZvOwoKICBzdGF0aWMgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0IGNvbm5lY3RTeW5jKGhvc3QsIGludCBwb3J0KSB7CiAgICBpZiAoaG9zdCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJQYXJhbWV0ZXIgaG9zdCBjYW5ub3QgYmUgbnVsbCIpOwogICAgfQogICAgTGlzdDxfSW50ZXJuZXRBZGRyZXNzPiBhZGRyZXNzZXMgPSBudWxsOwogICAgdmFyIGVycm9yID0gbnVsbDsKICAgIGlmIChob3N0IGlzIF9JbnRlcm5ldEFkZHJlc3MpIHsKICAgICAgYWRkcmVzc2VzID0gW2hvc3RdOwogICAgfSBlbHNlIHsKICAgICAgdHJ5IHsKICAgICAgICBhZGRyZXNzZXMgPSBsb29rdXAoaG9zdCk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBlcnJvciA9IGU7CiAgICAgIH0KICAgICAgaWYgKGVycm9yICE9IG51bGwgfHwgYWRkcmVzc2VzID09IG51bGwgfHwgYWRkcmVzc2VzLmlzRW1wdHkpIHsKICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihlcnJvciwgIkZhaWxlZCBob3N0IGxvb2t1cDogJyRob3N0JyIpOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoYWRkcmVzc2VzIGlzIExpc3QpOwogICAgdmFyIGl0ID0gYWRkcmVzc2VzLml0ZXJhdG9yOwogICAgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0IGNvbm5lY3ROZXh0KCkgewogICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgICAvLyBDb3VsZCBub3QgY29ubmVjdC4gVGhyb3cgdGhlIGZpcnN0IGNvbm5lY3Rpb24gZXJyb3Igd2UgZW5jb3VudGVyZWQuCiAgICAgICAgYXNzZXJ0KGVycm9yICE9IG51bGwpOwogICAgICAgIHRocm93IGVycm9yOwogICAgICB9CiAgICAgIHZhciBhZGRyZXNzID0gaXQuY3VycmVudDsKICAgICAgdmFyIHNvY2tldCA9IG5ldyBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQoKTsKICAgICAgc29ja2V0LmxvY2FsQWRkcmVzcyA9IGFkZHJlc3M7CiAgICAgIHZhciByZXN1bHQgPSBzb2NrZXQuX25hdGl2ZUNyZWF0ZUNvbm5lY3RTeW5jKGFkZHJlc3MuX2luX2FkZHIsIHBvcnQpOwogICAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgICAvLyBLZWVwIGZpcnN0IGVycm9yLCBpZiBwcmVzZW50LgogICAgICAgIGlmIChlcnJvciA9PSBudWxsKSB7CiAgICAgICAgICBlcnJvciA9IGNyZWF0ZUVycm9yKHJlc3VsdCwgIkNvbm5lY3Rpb24gZmFpbGVkIiwgYWRkcmVzcywgcG9ydCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb25uZWN0TmV4dCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFF1ZXJ5IHRoZSBsb2NhbCBwb3J0LCBmb3IgZXJyb3IgbWVzc2FnZXMuCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHNvY2tldC5wb3J0OwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSB7CiAgICAgICAgICAgIGVycm9yID0gY3JlYXRlRXJyb3IoZSwgIkNvbm5lY3Rpb24gZmFpbGVkIiwgYWRkcmVzcywgcG9ydCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gY29ubmVjdE5leHQoKTsKICAgICAgICB9CiAgICAgICAgc2V0dXBSZXNvdXJjZUluZm8oc29ja2V0KTsKICAgICAgfQogICAgICByZXR1cm4gc29ja2V0OwogICAgfQoKICAgIHJldHVybiBjb25uZWN0TmV4dCgpOwogIH0KCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzID0+IGxvY2FsQWRkcmVzczsKICBpbnQgZ2V0IGF2YWlsYWJsZSA9PiBfbmF0aXZlQXZhaWxhYmxlKCk7CgogIGludCBnZXQgcG9ydCB7CiAgICBpZiAobG9jYWxQb3J0ICE9IDApIHsKICAgICAgcmV0dXJuIGxvY2FsUG9ydDsKICAgIH0KICAgIGlmIChpc0Nsb3NlZCkgewogICAgICB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX25hdGl2ZUdldFBvcnQoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gbG9jYWxQb3J0ID0gcmVzdWx0OwogIH0KCiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX25hdGl2ZUdldFJlbW90ZVBlZXIoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICB2YXIgYWRkciA9IHJlc3VsdFswXTsKICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcyhhZGRyWzFdLCBudWxsLCBhZGRyWzJdKTsKICB9CgogIGludCBnZXQgcmVtb3RlUG9ydCB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVHZXRSZW1vdGVQZWVyKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdFsxXTsKICB9CgogIHZvaWQgY2xvc2VTeW5jKCkgewogICAgaWYgKCFpc0Nsb3NlZCkgewogICAgICBfbmF0aXZlQ2xvc2VTeW5jKCk7CiAgICAgIF9Tb2NrZXRSZXNvdXJjZUluZm8uU29ja2V0Q2xvc2VkKHJlc291cmNlSW5mbyk7CiAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKICAgIH0KICB9CgogIC8vIENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IvZXhjZXB0aW9uIGZyb20gZGlmZmVyZW50IHJldHVybmVkCiAgLy8gZXJyb3Igb2JqZWN0cy4KICBzdGF0aWMgY3JlYXRlRXJyb3IoZXJyb3IsIFN0cmluZyBtZXNzYWdlLAogICAgICBbSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MsIGludCBwb3J0XSkgewogICAgaWYgKGVycm9yIGlzIE9TRXJyb3IpIHsKICAgICAgcmV0dXJuIG5ldyBTb2NrZXRFeGNlcHRpb24obWVzc2FnZSwKICAgICAgICAgIG9zRXJyb3I6IGVycm9yLCBhZGRyZXNzOiBhZGRyZXNzLCBwb3J0OiBwb3J0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgU29ja2V0RXhjZXB0aW9uKG1lc3NhZ2UsIGFkZHJlc3M6IGFkZHJlc3MsIHBvcnQ6IHBvcnQpOwogICAgfQogIH0KCiAgc3RhdGljIExpc3Q8X0ludGVybmV0QWRkcmVzcz4gbG9va3VwKFN0cmluZyBob3N0LAogICAgICB7SW50ZXJuZXRBZGRyZXNzVHlwZSB0eXBlOiBJbnRlcm5ldEFkZHJlc3NUeXBlLkFOWX0pIHsKICAgIHZhciByZXNwb25zZSA9IF9uYXRpdmVMb29rdXBSZXF1ZXN0KGhvc3QsIHR5cGUuX3ZhbHVlKTsKICAgIGlmIChyZXNwb25zZSBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3BvbnNlOwogICAgfQogICAgTGlzdDxfSW50ZXJuZXRBZGRyZXNzPiBhZGRyZXNzZXMgPQogICAgICAgIG5ldyBMaXN0PF9JbnRlcm5ldEFkZHJlc3M+KHJlc3BvbnNlLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3BvbnNlLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZVtpXTsKICAgICAgYWRkcmVzc2VzW2ldID0gbmV3IF9JbnRlcm5ldEFkZHJlc3MocmVzdWx0WzFdLCBob3N0LCByZXN1bHRbMl0pOwogICAgfQogICAgcmV0dXJuIGFkZHJlc3NlczsKICB9CgogIGludCByZWFkSW50b1N5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIGlmIChpc0Nsb3NlZFJlYWQpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigiU29ja2V0IGlzIGNsb3NlZCBmb3IgcmVhZGluZyIpOwogICAgfQoKICAgIGlmICgoYnVmZmVyIGlzISBMaXN0KSB8fAogICAgICAgICgoc3RhcnQgIT0gbnVsbCkgJiYgKHN0YXJ0IGlzISBpbnQpKSB8fAogICAgICAgICgoZW5kICE9IG51bGwpICYmIChlbmQgaXMhIGludCkpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byByZWFkSW50b1N5bmMiKTsKICAgIH0KICAgIGlmIChzdGFydCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJzdGFydCBjYW5ub3QgYmUgbnVsbCIpOwogICAgfQogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVSZWFkSW50byhidWZmZXIsIHN0YXJ0LCAoZW5kIC0gc3RhcnQpKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJyZWFkSW50b1N5bmMgZmFpbGVkIiwgb3NFcnJvcjogcmVzdWx0KTsKICAgIH0KICAgIHJlc291cmNlSW5mby5hZGRSZWFkKHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlzdDxpbnQ+IHJlYWRTeW5jKGludCBsZW4pIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgaWYgKGlzQ2xvc2VkUmVhZCkgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJTb2NrZXQgaXMgY2xvc2VkIGZvciByZWFkaW5nIik7CiAgICB9CgogICAgaWYgKChsZW4gIT0gbnVsbCkgJiYgKGxlbiA8IDApKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbGxlZ2FsIGxlbmd0aCAkbGVuIik7CiAgICB9CiAgICBpZiAobGVuID09IDApIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX25hdGl2ZVJlYWQobGVuKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICAgIHJlc291cmNlSW5mby50b3RhbFJlYWQgKz0gcmVzdWx0Lmxlbmd0aDsKICAgICAgfQogICAgfQogICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgIHJlc291cmNlSW5mby5kaWRSZWFkKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgc2V0dXBSZXNvdXJjZUluZm8oX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0IHNvY2tldCkgewogICAgc29ja2V0LnJlc291cmNlSW5mbyA9IG5ldyBfU29ja2V0UmVzb3VyY2VJbmZvKHNvY2tldCk7CiAgfQoKICB2b2lkIHNodXRkb3duKFNvY2tldERpcmVjdGlvbiBkaXJlY3Rpb24pIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgICBjYXNlIFNvY2tldERpcmVjdGlvbi5yZWNlaXZlOgogICAgICAgIHNodXRkb3duUmVhZCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFNvY2tldERpcmVjdGlvbi5zZW5kOgogICAgICAgIHNodXRkb3duV3JpdGUoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTb2NrZXREaXJlY3Rpb24uYm90aDoKICAgICAgICBjbG9zZVN5bmMoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihkaXJlY3Rpb24pOwogICAgfQogIH0KCiAgdm9pZCBzaHV0ZG93blJlYWQoKSB7CiAgICBpZiAoaXNDbG9zZWQgfHwgaXNDbG9zZWRSZWFkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChpc0Nsb3NlZFdyaXRlKSB7CiAgICAgIGNsb3NlU3luYygpOwogICAgfSBlbHNlIHsKICAgICAgX25hdGl2ZVNodXRkb3duUmVhZCgpOwogICAgfQogICAgaXNDbG9zZWRSZWFkID0gdHJ1ZTsKICB9CgogIHZvaWQgc2h1dGRvd25Xcml0ZSgpIHsKICAgIGlmIChpc0Nsb3NlZCB8fCBpc0Nsb3NlZFdyaXRlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChpc0Nsb3NlZFJlYWQpIHsKICAgICAgY2xvc2VTeW5jKCk7CiAgICB9IGVsc2UgewogICAgICBfbmF0aXZlU2h1dGRvd25Xcml0ZSgpOwogICAgfQogICAgaXNDbG9zZWRXcml0ZSA9IHRydWU7CiAgfQoKICB2b2lkIHdyaXRlRnJvbVN5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIGlmIChpc0Nsb3NlZFdyaXRlKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIlNvY2tldCBpcyBjbG9zZWQgZm9yIHdyaXRpbmciKTsKICAgIH0KICAgIGlmICgoYnVmZmVyIGlzISBMaXN0KSB8fAogICAgICAgICgoc3RhcnQgIT0gbnVsbCkgJiYgKHN0YXJ0IGlzISBpbnQpKSB8fAogICAgICAgICgoZW5kICE9IG51bGwpICYmIChlbmQgaXMhIGludCkpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZUZyb21TeW5jIik7CiAgICB9CiAgICBpZiAoc3RhcnQgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigic3RhcnQgY2Fubm90IGJlIGVxdWFsIHRvIG51bGwiKTsKICAgIH0KCiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBidWZmZXIubGVuZ3RoKTsKICAgIGlmIChlbmQgPT0gc3RhcnQpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIF9CdWZmZXJBbmRTdGFydCBidWZmZXJBbmRTdGFydCA9CiAgICAgICAgX2Vuc3VyZUZhc3RBbmRTZXJpYWxpemFibGVCeXRlRGF0YShidWZmZXIsIHN0YXJ0LCBlbmQpOwogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVXcml0ZShidWZmZXJBbmRTdGFydC5idWZmZXIsIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0LAogICAgICAgIGVuZCAtIChzdGFydCAtIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0KSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigid3JpdGVGcm9tU3luYyBmYWlsZWQiLCBvc0Vycm9yOiByZXN1bHQpOwogICAgfQogICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uYWRkV3JpdGUocmVzdWx0KTsKICAgIH0KICB9CgogIHZvaWQgX2NoZWNrQXZhaWxhYmxlKCkgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIH0KICB9CgogIC8vIE5hdGl2ZSBtZXRob2QgZGVjbGFyYXRpb25zLgogIHN0YXRpYyBfbmF0aXZlTG9va3VwUmVxdWVzdChob3N0LCBpbnQgdHlwZSkKICAgICAgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9Mb29rdXBSZXF1ZXN0IjsKICBfbmF0aXZlQ3JlYXRlQ29ubmVjdFN5bmMoaG9zdCwgaW50IHBvcnQpCiAgICAgIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfQ3JlYXRlQ29ubmVjdFN5bmMiOwogIF9uYXRpdmVBdmFpbGFibGUoKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X0F2YWlsYWJsZSI7CiAgX25hdGl2ZUNsb3NlU3luYygpIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfQ2xvc2VTeW5jIjsKICBpbnQgX25hdGl2ZUdldFBvcnQoKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X0dldFBvcnQiOwogIExpc3QgX25hdGl2ZUdldFJlbW90ZVBlZXIoKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X0dldFJlbW90ZVBlZXIiOwogIF9uYXRpdmVSZWFkKGludCBsZW4pIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfUmVhZCI7CiAgX25hdGl2ZVJlYWRJbnRvKExpc3Q8aW50PiBidWZmZXIsIGludCBvZmZzZXQsIGludCBieXRlcykKICAgICAgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9SZWFkTGlzdCI7CiAgX25hdGl2ZVNodXRkb3duUmVhZCgpIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfU2h1dGRvd25SZWFkIjsKICBfbmF0aXZlU2h1dGRvd25Xcml0ZSgpIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfU2h1dGRvd25Xcml0ZSI7CiAgX25hdGl2ZVdyaXRlKExpc3Q8aW50PiBidWZmZXIsIGludCBvZmZzZXQsIGludCBieXRlcykKICAgICAgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9Xcml0ZUxpc3QiOwp9CoFfAE5OPAEgAQcdCTw6BAIBPioBJwE8GyY7BAEyID4sASgBKwFCMAE8AUsBRDECAU0ZUAFMTxkZHR4BMyABMxUBJwFAGEAGLRYkGg0MIhQTCEVBCAYfIS0cTx8VCCAzJUwfKR1LCh4PNQ4XFh9IDCAKIwgVBgEaBAEvKwERGhgGFCwGIx0UBh8EASYULAYpHRQGGjkEARcULAYpHRQGFgQBFRUaNhcGBAFEFCwtHCo5DUkGBAE0PTwfFgYnNTAgRwYWBAE7FxhBBgEdMCxEBhk3BkEYEAZAHUkGIhMEASAXGEEGASY2BhQTBiMdFAYiGiIxCAYgHgYTBAFDOwQBLRQOBhkkGA8hGQ8hFQ8PLAYEARgkDgYZEw0dBhkEARklDgYYEw0eBhoEAT0XGUEGHTAsRQYZQAYBQRgOBgElQEsvHUoGIiAlBgQBGxQsBgQBIS4wKzQ7OztIODsrQUM4LAIBJGRhcnQ6aW8tcGF0Y2gvc3luY19zb2NrZXRfcGF0Y2guZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vYnl0ZXNfYnVpbGRlci5kYXJ0la4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIEJ1aWxkcyBhIGxpc3Qgb2YgYnl0ZXMsIGFsbG93aW5nIGJ5dGVzIGFuZCBsaXN0cyBvZiBieXRlcyB0byBiZSBhZGRlZCBhdCB0aGUKICogZW5kLgogKgogKiBVc2VkIHRvIGVmZmljaWVudGx5IGNvbGxlY3QgYnl0ZXMgYW5kIGxpc3RzIG9mIGJ5dGVzLgogKi8KYWJzdHJhY3QgY2xhc3MgQnl0ZXNCdWlsZGVyIHsKICAvKioKICAgKiBDb25zdHJ1Y3QgYSBuZXcgZW1wdHkgW0J5dGVzQnVpbGRlcl0uCiAgICoKICAgKiBJZiBbY29weV0gaXMgdHJ1ZSwgdGhlIGRhdGEgaXMgYWx3YXlzIGNvcGllZCB3aGVuIGFkZGVkIHRvIHRoZSBsaXN0LiBJZgogICAqIGl0IFtjb3B5XSBpcyBmYWxzZSwgdGhlIGRhdGEgaXMgb25seSBjb3BpZWQgaWYgbmVlZGVkLiBUaGF0IG1lYW5zIHRoYXQgaWYKICAgKiB0aGUgbGlzdHMgYXJlIGNoYW5nZWQgYWZ0ZXIgYWRkZWQgdG8gdGhlIFtCeXRlc0J1aWxkZXJdLCBpdCBtYXkgZWZmZWN0IHRoZQogICAqIG91dHB1dC4gRGVmYXVsdCBpcyBgdHJ1ZWAuCiAgICovCiAgZmFjdG9yeSBCeXRlc0J1aWxkZXIoe2Jvb2wgY29weTogdHJ1ZX0pIHsKICAgIGlmIChjb3B5KSB7CiAgICAgIHJldHVybiBuZXcgX0NvcHlpbmdCeXRlc0J1aWxkZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgX0J5dGVzQnVpbGRlcigpOwogICAgfQogIH0KCiAgLyoqCiAgICogQXBwZW5kcyBbYnl0ZXNdIHRvIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBidWlsZGVyLgogICAqCiAgICogRWFjaCB2YWx1ZSBvZiBbYnl0ZXNdIHdpbGwgYmUgYml0LXJlcHJlc2VudGF0aW9uIHRydW5jYXRlZCB0byB0aGUgcmFuZ2UKICAgKiAwIC4uIDI1NS4KICAgKi8KICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpOwoKICAvKioKICAgKiBBcHBlbmQgW2J5dGVdIHRvIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBidWlsZGVyLgogICAqCiAgICogVGhlIFtieXRlXSB3aWxsIGJlIGJpdC1yZXByZXNlbnRhdGlvbiB0cnVuY2F0ZWQgdG8gdGhlIHJhbmdlIDAgLi4gMjU1LgogICAqLwogIHZvaWQgYWRkQnl0ZShpbnQgYnl0ZSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGB0aGlzYCBhbmQgY2xlYXJzIGB0aGlzYC4KICAgKgogICAqIFRoZSBsaXN0IHJldHVybmVkIGlzIGEgdmlldyBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLCBsaW1pdGVkIHRvIHRoZQogICAqIFtsZW5ndGhdLgogICAqLwogIFVpbnQ4TGlzdCB0YWtlQnl0ZXMoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGJ1aWxkZXIuCiAgICoKICAgKiBMZWF2ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWlsZGVyIGludGFjdC4KICAgKi8KICBVaW50OExpc3QgdG9CeXRlcygpOwoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWlsZGVyLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzRW1wdHk7CgogIC8qKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBidWZmZXIgaXMgbm90IGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzTm90RW1wdHk7CgogIC8qKgogICAqIENsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgYnVpbGRlci4KICAgKi8KICB2b2lkIGNsZWFyKCk7Cn0KCmNsYXNzIF9Db3B5aW5nQnl0ZXNCdWlsZGVyIGltcGxlbWVudHMgQnl0ZXNCdWlsZGVyIHsKICAvLyBTdGFydCB3aXRoIDEwMjQgYnl0ZXMuCiAgc3RhdGljIGNvbnN0IGludCBfaW5pdFNpemUgPSAxMDI0OwoKICAvLyBTYWZlIGZvciByZXVzZSBiZWNhdXNlIGEgZml4ZWQtbGVuZ3RoIGVtcHR5IGxpc3QgaXMgaW1tdXRhYmxlLgogIHN0YXRpYyBmaW5hbCBfZW1wdHlMaXN0ID0gbmV3IFVpbnQ4TGlzdCgwKTsKCiAgaW50IF9sZW5ndGggPSAwOwogIFVpbnQ4TGlzdCBfYnVmZmVyOwoKICBfQ29weWluZ0J5dGVzQnVpbGRlcihbaW50IGluaXRpYWxDYXBhY2l0eSA9IDBdKQogICAgICA6IF9idWZmZXIgPSAoaW5pdGlhbENhcGFjaXR5IDw9IDApCiAgICAgICAgICAgID8gX2VtcHR5TGlzdAogICAgICAgICAgICA6IG5ldyBVaW50OExpc3QoX3BvdzJyb3VuZHVwKGluaXRpYWxDYXBhY2l0eSkpOwoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIGludCBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDsKICAgIGlmIChieXRlc0xlbmd0aCA9PSAwKSByZXR1cm47CiAgICBpbnQgcmVxdWlyZWQgPSBfbGVuZ3RoICsgYnl0ZXNMZW5ndGg7CiAgICBpZiAoX2J1ZmZlci5sZW5ndGggPCByZXF1aXJlZCkgewogICAgICBfZ3JvdyhyZXF1aXJlZCk7CiAgICB9CiAgICBhc3NlcnQoX2J1ZmZlci5sZW5ndGggPj0gcmVxdWlyZWQpOwogICAgaWYgKGJ5dGVzIGlzIFVpbnQ4TGlzdCkgewogICAgICBfYnVmZmVyLnNldFJhbmdlKF9sZW5ndGgsIHJlcXVpcmVkLCBieXRlcyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzTGVuZ3RoOyBpKyspIHsKICAgICAgICBfYnVmZmVyW19sZW5ndGggKyBpXSA9IGJ5dGVzW2ldOwogICAgICB9CiAgICB9CiAgICBfbGVuZ3RoID0gcmVxdWlyZWQ7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA9PSBfbGVuZ3RoKSB7CiAgICAgIC8vIFRoZSBncm93IGFsZ29yaXRobSBhbHdheXMgYXQgbGVhc3QgZG91Ymxlcy4KICAgICAgLy8gSWYgd2UgYWRkZWQgb25lIHRvIF9sZW5ndGggaXQgd291bGQgcXVhZHJ1cGxlIHVubmVjZXNzYXJpbHkuCiAgICAgIF9ncm93KF9sZW5ndGgpOwogICAgfQogICAgYXNzZXJ0KF9idWZmZXIubGVuZ3RoID4gX2xlbmd0aCk7CiAgICBfYnVmZmVyW19sZW5ndGhdID0gYnl0ZTsKICAgIF9sZW5ndGgrKzsKICB9CgogIHZvaWQgX2dyb3coaW50IHJlcXVpcmVkKSB7CiAgICAvLyBXZSB3aWxsIGNyZWF0ZSBhIGxpc3QgaW4gdGhlIHJhbmdlIG9mIDItNCB0aW1lcyBsYXJnZXIgdGhhbgogICAgLy8gcmVxdWlyZWQuCiAgICBpbnQgbmV3U2l6ZSA9IHJlcXVpcmVkICogMjsKICAgIGlmIChuZXdTaXplIDwgX2luaXRTaXplKSB7CiAgICAgIG5ld1NpemUgPSBfaW5pdFNpemU7CiAgICB9IGVsc2UgewogICAgICBuZXdTaXplID0gX3BvdzJyb3VuZHVwKG5ld1NpemUpOwogICAgfQogICAgdmFyIG5ld0J1ZmZlciA9IG5ldyBVaW50OExpc3QobmV3U2l6ZSk7CiAgICBuZXdCdWZmZXIuc2V0UmFuZ2UoMCwgX2J1ZmZlci5sZW5ndGgsIF9idWZmZXIpOwogICAgX2J1ZmZlciA9IG5ld0J1ZmZlcjsKICB9CgogIFVpbnQ4TGlzdCB0YWtlQnl0ZXMoKSB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSByZXR1cm4gX2VtcHR5TGlzdDsKICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhMaXN0LnZpZXcoX2J1ZmZlci5idWZmZXIsIDAsIF9sZW5ndGgpOwogICAgY2xlYXIoKTsKICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBVaW50OExpc3QgdG9CeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfZW1wdHlMaXN0OwogICAgcmV0dXJuIG5ldyBVaW50OExpc3QuZnJvbUxpc3QoCiAgICAgICAgbmV3IFVpbnQ4TGlzdC52aWV3KF9idWZmZXIuYnVmZmVyLCAwLCBfbGVuZ3RoKSk7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9sZW5ndGggPT0gMDsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbGVuZ3RoICE9IDA7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfbGVuZ3RoID0gMDsKICAgIF9idWZmZXIgPSBfZW1wdHlMaXN0OwogIH0KCiAgc3RhdGljIGludCBfcG93MnJvdW5kdXAoaW50IHgpIHsKICAgIGFzc2VydCh4ID4gMCk7CiAgICAtLXg7CiAgICB4IHw9IHggPj4gMTsKICAgIHggfD0geCA+PiAyOwogICAgeCB8PSB4ID4+IDQ7CiAgICB4IHw9IHggPj4gODsKICAgIHggfD0geCA+PiAxNjsKICAgIHJldHVybiB4ICsgMTsKICB9Cn0KCmNsYXNzIF9CeXRlc0J1aWxkZXIgaW1wbGVtZW50cyBCeXRlc0J1aWxkZXIgewogIGludCBfbGVuZ3RoID0gMDsKICBmaW5hbCBMaXN0PFVpbnQ4TGlzdD4gX2NodW5rcyA9IFtdOwoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIFVpbnQ4TGlzdCB0eXBlZEJ5dGVzOwogICAgaWYgKGJ5dGVzIGlzIFVpbnQ4TGlzdCkgewogICAgICB0eXBlZEJ5dGVzID0gYnl0ZXM7CiAgICB9IGVsc2UgewogICAgICB0eXBlZEJ5dGVzID0gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChieXRlcyk7CiAgICB9CiAgICBfY2h1bmtzLmFkZCh0eXBlZEJ5dGVzKTsKICAgIF9sZW5ndGggKz0gdHlwZWRCeXRlcy5sZW5ndGg7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIF9jaHVua3MuYWRkKG5ldyBVaW50OExpc3QoMSkuLlswXSA9IGJ5dGUpOwogICAgX2xlbmd0aCsrOwogIH0KCiAgVWludDhMaXN0IHRha2VCeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfQ29weWluZ0J5dGVzQnVpbGRlci5fZW1wdHlMaXN0OwogICAgaWYgKF9jaHVua3MubGVuZ3RoID09IDEpIHsKICAgICAgdmFyIGJ1ZmZlciA9IF9jaHVua3NbMF07CiAgICAgIGNsZWFyKCk7CiAgICAgIHJldHVybiBidWZmZXI7CiAgICB9CiAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChfbGVuZ3RoKTsKICAgIGludCBvZmZzZXQgPSAwOwogICAgZm9yICh2YXIgY2h1bmsgaW4gX2NodW5rcykgewogICAgICBidWZmZXIuc2V0UmFuZ2Uob2Zmc2V0LCBvZmZzZXQgKyBjaHVuay5sZW5ndGgsIGNodW5rKTsKICAgICAgb2Zmc2V0ICs9IGNodW5rLmxlbmd0aDsKICAgIH0KICAgIGNsZWFyKCk7CiAgICByZXR1cm4gYnVmZmVyOwogIH0KCiAgVWludDhMaXN0IHRvQnl0ZXMoKSB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSByZXR1cm4gX0NvcHlpbmdCeXRlc0J1aWxkZXIuX2VtcHR5TGlzdDsKICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhMaXN0KF9sZW5ndGgpOwogICAgaW50IG9mZnNldCA9IDA7CiAgICBmb3IgKHZhciBjaHVuayBpbiBfY2h1bmtzKSB7CiAgICAgIGJ1ZmZlci5zZXRSYW5nZShvZmZzZXQsIG9mZnNldCArIGNodW5rLmxlbmd0aCwgY2h1bmspOwogICAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2xlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9sZW5ndGggIT0gMDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9sZW5ndGggPSAwOwogICAgX2NodW5rcy5jbGVhcigpOwogIH0KfQqA6wBOTjwBEQEEUAgDOQQeBisFTU9QIAYsECkNIgYEAQY9BU0PBh0BBjsFTAYaAQY3BUgPBhkBBjwFMAYXAQYpBhIBBiwGFAEGMAYXAQYoBhACATUcJQFELgETFQEyKRk8AR4kIiolFwYoHjINLikIBhgEARslNUYWBiYdDwQBHUMRIB8bDScGLDQZBAEaKUENEwQBGCkjOQQBHQEkAScBEREaBAEjEwkREREREhIEAgEuEyYBHhoeGg0yBh0iBAEbLw8EARo+Hx8PFQYpFCE9HgYNEwQBGD4pFCE9HgYTBAEdASQBJwERERUEAgEaZGFydDppby9ieXRlc19idWlsZGVyLmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2NvbW1vbi5kYXJ0jsovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLy8gQ29uc3RhbnRzIHVzZWQgd2hlbiB3b3JraW5nIHdpdGggbmF0aXZlIHBvcnRzLgovLyBUaGVzZSBtdXN0IG1hdGNoIHRoZSBjb25zdGFudHMgaW4gcnVudGltZS9iaW4vZGFydHV0aWxzLmggY2xhc3MgQ09iamVjdC4KY29uc3QgaW50IF9zdWNjZXNzUmVzcG9uc2UgPSAwOwpjb25zdCBpbnQgX2lsbGVnYWxBcmd1bWVudFJlc3BvbnNlID0gMTsKY29uc3QgaW50IF9vc0Vycm9yUmVzcG9uc2UgPSAyOwpjb25zdCBpbnQgX2ZpbGVDbG9zZWRSZXNwb25zZSA9IDM7Cgpjb25zdCBpbnQgX2Vycm9yUmVzcG9uc2VFcnJvclR5cGUgPSAwOwpjb25zdCBpbnQgX29zRXJyb3JSZXNwb25zZUVycm9yQ29kZSA9IDE7CmNvbnN0IGludCBfb3NFcnJvclJlc3BvbnNlTWVzc2FnZSA9IDI7CgovLyBGdW5jdGlvbnMgdXNlZCB0byByZWNlaXZlIGV4Y2VwdGlvbnMgZnJvbSBuYXRpdmUgcG9ydHMuCmJvb2wgX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkgPT4KICAgIHJlc3BvbnNlIGlzIExpc3QgJiYgcmVzcG9uc2VbMF0gIT0gX3N1Y2Nlc3NSZXNwb25zZTsKCi8qKgogKiBSZXR1cm5zIGFuIEV4Y2VwdGlvbiBvciBhbiBFcnJvcgogKi8KX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBwYXRoKSB7CiAgYXNzZXJ0KF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKTsKICBzd2l0Y2ggKHJlc3BvbnNlW19lcnJvclJlc3BvbnNlRXJyb3JUeXBlXSkgewogICAgY2FzZSBfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2U6CiAgICAgIHJldHVybiBuZXcgQXJndW1lbnRFcnJvcigiJG1lc3NhZ2U6ICRwYXRoIik7CiAgICBjYXNlIF9vc0Vycm9yUmVzcG9uc2U6CiAgICAgIHZhciBlcnIgPSBuZXcgT1NFcnJvcihyZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlTWVzc2FnZV0sCiAgICAgICAgICByZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlRXJyb3JDb2RlXSk7CiAgICAgIHJldHVybiBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihtZXNzYWdlLCBwYXRoLCBlcnIpOwogICAgY2FzZSBfZmlsZUNsb3NlZFJlc3BvbnNlOgogICAgICByZXR1cm4gbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkZpbGUgY2xvc2VkIiwgcGF0aCk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gbmV3IEV4Y2VwdGlvbigiVW5rbm93biBlcnJvciIpOwogIH0KfQoKLyoqCiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBJTyByZWxhdGVkIGV4Y2VwdGlvbnMuCiAqLwphYnN0cmFjdCBjbGFzcyBJT0V4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIklPRXhjZXB0aW9uIjsKfQoKLyoqCiAgKiBBbiBbT1NFcnJvcl0gb2JqZWN0IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGFuIGVycm9yIGZyb20gdGhlCiAgKiBvcGVyYXRpbmcgc3lzdGVtLgogICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgT1NFcnJvciB7CiAgLyoqIENvbnN0YW50IHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBubyBPUyBlcnJvciBjb2RlIGlzIGF2YWlsYWJsZS4gKi8KICBzdGF0aWMgY29uc3QgaW50IG5vRXJyb3JDb2RlID0gLTE7CgogIC8vLyBFcnJvciBtZXNzYWdlIHN1cHBsaWVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBUaGlzIG1heSBiZSBgbnVsbGAgb3IKICAvLy8gZW1wdHkgaWYgbm8gbWVzc2FnZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yLgogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICAvLy8gRXJyb3IgY29kZSBzdXBwbGllZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KICAvLy8KICAvLy8gV2lsbCBoYXZlIHRoZSB2YWx1ZSBbT1NFcnJvci5ub0Vycm9yQ29kZV0gaWYgdGhlcmUgaXMgbm8gZXJyb3IgY29kZQogIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yLgogIGZpbmFsIGludCBlcnJvckNvZGU7CgogIC8qKiBDcmVhdGVzIGFuIE9TRXJyb3Igb2JqZWN0IGZyb20gYSBtZXNzYWdlIGFuZCBhbiBlcnJvckNvZGUuICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IE9TRXJyb3IoW3RoaXMubWVzc2FnZSA9ICIiLCB0aGlzLmVycm9yQ29kZSA9IG5vRXJyb3JDb2RlXSk7CgogIC8qKiBDb252ZXJ0cyBhbiBPU0Vycm9yIG9iamVjdCB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gKi8KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgiT1MgRXJyb3IiKTsKICAgIGlmIChtZXNzYWdlLmlzTm90RW1wdHkpIHsKICAgICAgc2IuLndyaXRlKCI6ICIpLi53cml0ZShtZXNzYWdlKTsKICAgICAgaWYgKGVycm9yQ29kZSAhPSBub0Vycm9yQ29kZSkgewogICAgICAgIHNiLi53cml0ZSgiLCBlcnJubyA9ICIpLi53cml0ZShlcnJvckNvZGUudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXJyb3JDb2RlICE9IG5vRXJyb3JDb2RlKSB7CiAgICAgIHNiLi53cml0ZSgiOiBlcnJubyA9ICIpLi53cml0ZShlcnJvckNvZGUudG9TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vIE9iamVjdCBmb3IgaG9sZGluZyBhIGJ1ZmZlciBhbmQgYW4gb2Zmc2V0LgpjbGFzcyBfQnVmZmVyQW5kU3RhcnQgewogIExpc3Q8aW50PiBidWZmZXI7CiAgaW50IHN0YXJ0OwogIF9CdWZmZXJBbmRTdGFydCh0aGlzLmJ1ZmZlciwgdGhpcy5zdGFydCk7Cn0KCi8vIEVuc3VyZSB0aGF0IHRoZSBpbnB1dCBMaXN0IGNhbiBiZSBzZXJpYWxpemVkIHRocm91Z2ggYSBuYXRpdmUgcG9ydC4KLy8gT25seSBJbnQ4TGlzdCBhbmQgVWludDhMaXN0IExpc3RzIGFyZSBzZXJpYWxpemVkIGRpcmVjdGx5LgovLyBBbGwgb3RoZXIgbGlzdHMgYXJlIGZpcnN0IGNvcGllZCBpbnRvIGEgVWludDhMaXN0LiBUaGlzIGhhcyB0aGUgYWRkZWQKLy8gYmVuZWZpdCB0aGF0IGl0IGlzIGZhc3RlciB0byBhY2Nlc3MgZnJvbSB0aGUgQyBjb2RlIGFzIHdlbGwuCl9CdWZmZXJBbmRTdGFydCBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKAogICAgTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgaWYgKGJ1ZmZlciBpcyBVaW50OExpc3QgfHwgYnVmZmVyIGlzIEludDhMaXN0KSB7CiAgICByZXR1cm4gbmV3IF9CdWZmZXJBbmRTdGFydChidWZmZXIsIHN0YXJ0KTsKICB9CiAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogIHZhciBuZXdCdWZmZXIgPSBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgaW50IGogPSBzdGFydDsKICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICBpbnQgdmFsdWUgPSBidWZmZXJbal07CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvcigiTGlzdCBlbGVtZW50IGlzIG51bGwgYXQgaW5kZXggJGoiKTsKICAgIG5ld0J1ZmZlcltpXSA9IHZhbHVlOwogICAgaisrOwogIH0KICByZXR1cm4gbmV3IF9CdWZmZXJBbmRTdGFydChuZXdCdWZmZXIsIDApOwp9CgpjbGFzcyBfSU9DcnlwdG8gewogIGV4dGVybmFsIHN0YXRpYyBVaW50OExpc3QgZ2V0UmFuZG9tQnl0ZXMoaW50IGNvdW50KTsKfQp3AE5OPAERATJMICggIwEnKScBOyM5AQQkBEAmLyMzGz8wOh47DS0EAgEELQQyJgIBBEIWBRoQRyUBTDgYATMGSiEXAUQcRAFAFioaHicmPggrPAYaBAIBLhgUDSwCAUc+SUA0LDMvBBwpESUbUBoJBCwCARI3AgETZGFydDppby9jb21tb24uZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL2NvbW1vbl9wYXRjaC5kYXJ0hzAvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIE5vdGU6IHRoZSBWTSBjb25jYXRlbmF0ZXMgYWxsIHBhdGNoIGZpbGVzIGludG8gYSBzaW5nbGUgcGF0Y2ggZmlsZS4gVGhpcwovLy8gZmlsZSBpcyB0aGUgZmlyc3QgcGF0Y2ggaW4gImRhcnQ6aW8iIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cyB1c2VkIGJ5Ci8vLyBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYSBzaGFyZWQgZnJvbnQKLy8vIGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgVk1MaWJyYXJ5SG9va3MsIHBhdGNoOwoKaW1wb3J0ICJkYXJ0OmFzeW5jIgogICAgc2hvdwogICAgICAgIENvbXBsZXRlciwKICAgICAgICBGdXR1cmUsCiAgICAgICAgU3RyZWFtLAogICAgICAgIFN0cmVhbUNvbnN1bWVyLAogICAgICAgIFN0cmVhbUNvbnRyb2xsZXIsCiAgICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uLAogICAgICAgIFRpbWVyLAogICAgICAgIFpvbmUsCiAgICAgICAgc2NoZWR1bGVNaWNyb3Rhc2s7CgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiIgc2hvdyBIYXNoTWFwOwoKaW1wb3J0ICJkYXJ0OmNvbnZlcnQiIHNob3cgRW5jb2RpbmcsIHV0Zjg7CgppbXBvcnQgImRhcnQ6ZGV2ZWxvcGVyIiBzaG93IHJlZ2lzdGVyRXh0ZW5zaW9uOwoKaW1wb3J0ICJkYXJ0Omlzb2xhdGUiIHNob3cgUmF3UmVjZWl2ZVBvcnQsIFJlY2VpdmVQb3J0LCBTZW5kUG9ydDsKCmltcG9ydCAiZGFydDptYXRoIiBzaG93IG1pbjsKCmltcG9ydCAiZGFydDpuYXRpdmV3cmFwcGVycyIgc2hvdyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczE7CgppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBVaW50OExpc3Q7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAiZGlyZWN0b3J5X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJldmVudGhhbmRsZXJfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImZpbGVfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImZpbGVfc3lzdGVtX2VudGl0eV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiZmlsdGVyX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJpb19zZXJ2aWNlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJwbGF0Zm9ybV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAicHJvY2Vzc19wYXRjaC5kYXJ0IjsKLy8gcGFydCAic29ja2V0X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJzdGRpb19wYXRjaC5kYXJ0IjsKLy8gcGFydCAic2VjdXJlX3NvY2tldF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3luY19zb2NrZXRfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgX0lPQ3J5cHRvIHsKICBAcGF0Y2gKICBzdGF0aWMgVWludDhMaXN0IGdldFJhbmRvbUJ5dGVzKGludCBjb3VudCkgbmF0aXZlICJDcnlwdG9fR2V0UmFuZG9tQnl0ZXMiOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX3NldHVwSG9va3MoKSB7CiAgVk1MaWJyYXJ5SG9va3MuZXZlbnRIYW5kbGVyU2VuZERhdGEgPSBfRXZlbnRIYW5kbGVyLl9zZW5kRGF0YTsKICBWTUxpYnJhcnlIb29rcy50aW1lck1pbGxpc2Vjb25kQ2xvY2sgPSBfRXZlbnRIYW5kbGVyLl90aW1lck1pbGxpc2Vjb25kQ2xvY2s7Cn0KQABOTjwBTVBQHgE0ARQJExAQGBocDw4bAScBKwEwAUIBHQE8ASkBOiAjGykdIR8eHRwkIgEHEglNAgEiEEFPAgEfZGFydDppby1wYXRjaC9jb21tb25fcGF0Y2guZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vZGF0YV90cmFuc2Zvcm1lci5kYXJ0wABVlS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogRXhwb3NlcyBaTGliIG9wdGlvbnMgZm9yIGlucHV0IHBhcmFtZXRlcnMuCiAqCiAqIFNlZSBodHRwOi8vd3d3LnpsaWIubmV0L21hbnVhbC5odG1sIGZvciBtb3JlIGRvY3VtZW50YXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBaTGliT3B0aW9uIHsKICAvLy8gTWluaW1hbCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy53aW5kb3dCaXRzXSwgW1pMaWJFbmNvZGVyLndpbmRvd0JpdHNdCiAgLy8vIGFuZCBbWkxpYkRlY29kZXIud2luZG93Qml0c10uCiAgc3RhdGljIGNvbnN0IGludCBtaW5XaW5kb3dCaXRzID0gODsKICBARGVwcmVjYXRlZCgiVXNlIG1pbldpbmRvd0JpdHMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNSU5fV0lORE9XX0JJVFMgPSA4OwoKICAvLy8gTWF4aW1hbCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy53aW5kb3dCaXRzXSwgW1pMaWJFbmNvZGVyLndpbmRvd0JpdHNdCiAgLy8vIGFuZCBbWkxpYkRlY29kZXIud2luZG93Qml0c10uCiAgc3RhdGljIGNvbnN0IGludCBtYXhXaW5kb3dCaXRzID0gMTU7CiAgQERlcHJlY2F0ZWQoIlVzZSBtYXhXaW5kb3dCaXRzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTUFYX1dJTkRPV19CSVRTID0gMTU7CgogIC8vLyBEZWZhdWx0IHZhbHVlIGZvciBbWkxpYkNvZGVjLndpbmRvd0JpdHNdLCBbWkxpYkVuY29kZXIud2luZG93Qml0c10KICAvLy8gYW5kIFtaTGliRGVjb2Rlci53aW5kb3dCaXRzXS4KICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRXaW5kb3dCaXRzID0gMTU7CiAgQERlcHJlY2F0ZWQoIlVzZSBkZWZhdWx0V2luZG93Qml0cyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfV0lORE9XX0JJVFMgPSAxNTsKCiAgLy8vIE1pbmltYWwgdmFsdWUgZm9yIFtaTGliQ29kZWMubGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubGV2ZWxdLgogIHN0YXRpYyBjb25zdCBpbnQgbWluTGV2ZWwgPSAtMTsKICBARGVwcmVjYXRlZCgiVXNlIG1pbkxldmVsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTUlOX0xFVkVMID0gLTE7CgogIC8vLyBNYXhpbWFsIHZhbHVlIGZvciBbWkxpYkNvZGVjLmxldmVsXSBhbmQgW1pMaWJFbmNvZGVyLmxldmVsXQogIHN0YXRpYyBjb25zdCBpbnQgbWF4TGV2ZWwgPSA5OwogIEBEZXByZWNhdGVkKCJVc2UgbWF4TGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNQVhfTEVWRUwgPSA5OwoKICAvLy8gRGVmYXVsdCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy5sZXZlbF0gYW5kIFtaTGliRW5jb2Rlci5sZXZlbF0uCiAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0TGV2ZWwgPSA2OwogIEBEZXByZWNhdGVkKCJVc2UgZGVmYXVsdExldmVsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9MRVZFTCA9IDY7CgogIC8vLyBNaW5pbWFsIHZhbHVlIGZvciBbWkxpYkNvZGVjLm1lbUxldmVsXSBhbmQgW1pMaWJFbmNvZGVyLm1lbUxldmVsXS4KICBzdGF0aWMgY29uc3QgaW50IG1pbk1lbUxldmVsID0gMTsKICBARGVwcmVjYXRlZCgiVXNlIG1pbk1lbUxldmVsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTUlOX01FTV9MRVZFTCA9IDE7CgogIC8vLyBNYXhpbWFsIHZhbHVlIGZvciBbWkxpYkNvZGVjLm1lbUxldmVsXSBhbmQgW1pMaWJFbmNvZGVyLm1lbUxldmVsXS4KICBzdGF0aWMgY29uc3QgaW50IG1heE1lbUxldmVsID0gOTsKICBARGVwcmVjYXRlZCgiVXNlIG1heE1lbUxldmVsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTUFYX01FTV9MRVZFTCA9IDk7CgogIC8vLyBEZWZhdWx0IHZhbHVlIGZvciBbWkxpYkNvZGVjLm1lbUxldmVsXSBhbmQgW1pMaWJFbmNvZGVyLm1lbUxldmVsXS4KICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRNZW1MZXZlbCA9IDg7CiAgQERlcHJlY2F0ZWQoIlVzZSBkZWZhdWx0TWVtTGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX01FTV9MRVZFTCA9IDg7CgogIC8vLyBSZWNvbW1lbmRlZCBzdHJhdGVneSBmb3IgZGF0YSBwcm9kdWNlZCBieSBhIGZpbHRlciAob3IgcHJlZGljdG9yKQogIHN0YXRpYyBjb25zdCBpbnQgc3RyYXRlZ3lGaWx0ZXJlZCA9IDE7CiAgQERlcHJlY2F0ZWQoIlVzZSBzdHJhdGVneUZpbHRlcmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgU1RSQVRFR1lfRklMVEVSRUQgPSAxOwoKICAvLy8gVXNlIHRoaXMgc3RyYXRlZ3kgdG8gZm9yY2UgSHVmZm1hbiBlbmNvZGluZyBvbmx5IChubyBzdHJpbmcgbWF0Y2gpCiAgc3RhdGljIGNvbnN0IGludCBzdHJhdGVneUh1ZmZtYW5Pbmx5ID0gMjsKICBARGVwcmVjYXRlZCgiVXNlIHN0cmF0ZWd5SHVmZm1hbk9ubHkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTVFJBVEVHWV9IVUZGTUFOX09OTFkgPSAyOwoKICAvLy8gVXNlIHRoaXMgc3RyYXRlZ3kgdG8gbGltaXQgbWF0Y2ggZGlzdGFuY2VzIHRvIG9uZSAocnVuLWxlbmd0aCBlbmNvZGluZykKICBzdGF0aWMgY29uc3QgaW50IHN0cmF0ZWd5UmxlID0gMzsKICBARGVwcmVjYXRlZCgiVXNlIHN0cmF0ZWd5UmxlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgU1RSQVRFR1lfUkxFID0gMzsKCiAgLy8vIFRoaXMgc3RyYXRlZ3kgcHJldmVudHMgdGhlIHVzZSBvZiBkeW5hbWljIEh1ZmZtYW4gY29kZXMsIGFsbG93aW5nIGZvciBhCiAgLy8vIHNpbXBsZXIgZGVjb2RlcgogIHN0YXRpYyBjb25zdCBpbnQgc3RyYXRlZ3lGaXhlZCA9IDQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBzdHJhdGVneUZpeGVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgU1RSQVRFR1lfRklYRUQgPSA0OwoKICAvLy8gUmVjb21tZW5kZWQgc3RyYXRlZ3kgZm9yIG5vcm1hbCBkYXRhCiAgc3RhdGljIGNvbnN0IGludCBzdHJhdGVneURlZmF1bHQgPSAwOwogIEBEZXByZWNhdGVkKCJVc2Ugc3RyYXRlZ3lEZWZhdWx0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgU1RSQVRFR1lfREVGQVVMVCA9IDA7Cn0KCi8qKgogKiBBbiBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1pMaWJDb2RlY10uCiAqLwpjb25zdCBaTGliQ29kZWMgemxpYiA9IGNvbnN0IFpMaWJDb2RlYy5fZGVmYXVsdCgpOwpARGVwcmVjYXRlZCgiVXNlIHpsaWIgaW5zdGVhZCIpCmNvbnN0IFpMaWJDb2RlYyBaTElCID0gemxpYjsKCi8qKgogKiBUaGUgW1pMaWJDb2RlY10gZW5jb2RlcyByYXcgYnl0ZXMgdG8gWkxpYiBjb21wcmVzc2VkIGJ5dGVzIGFuZCBkZWNvZGVzIFpMaWIKICogY29tcHJlc3NlZCBieXRlcyB0byByYXcgYnl0ZXMuCiAqLwpjbGFzcyBaTGliQ29kZWMgZXh0ZW5kcyBDb2RlYzxMaXN0PGludD4sIExpc3Q8aW50Pj4gewogIC8qKgogICAqIFdoZW4gdHJ1ZSwgYEdaaXBgIGZyYW1lcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgZmluYWwgYm9vbCBnemlwOwoKICAvKioKICAgKiBUaGUgY29tcHJlc3Npb24tW2xldmVsXSBjYW4gYmUgc2V0IGluIHRoZSByYW5nZSBvZiBgLTEuLjlgLCB3aXRoIGA2YCBiZWluZwogICAqIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsLiBMZXZlbHMgYWJvdmUgYDZgIHdpbGwgaGF2ZSBoaWdoZXIKICAgKiBjb21wcmVzc2lvbiByYXRlcyBhdCB0aGUgY29zdCBvZiBtb3JlIENQVSBhbmQgbWVtb3J5IHVzYWdlLiBMZXZlbHMgYmVsb3cKICAgKiBgNmAgd2lsbCB1c2UgbGVzcyBDUFUgYW5kIG1lbW9yeSBhdCB0aGUgY29zdCBvZiBsb3dlciBjb21wcmVzc2lvbiByYXRlcy4KICAgKi8KICBmaW5hbCBpbnQgbGV2ZWw7CgogIC8qKgogICAqIFNwZWNpZmllcyBob3cgbXVjaCBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZCBmb3IgdGhlIGludGVybmFsIGNvbXByZXNzaW9uCiAgICogc3RhdGUuIGAxYCB1c2VzIG1pbmltdW0gbWVtb3J5IGJ1dCBpcyBzbG93IGFuZCByZWR1Y2VzIGNvbXByZXNzaW9uIHJhdGlvOwogICAqIGA5YCB1c2VzIG1heGltdW0gbWVtb3J5IGZvciBvcHRpbWFsIHNwZWVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgOGAuCiAgICoKICAgKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKICAgKgogICAqICAgICAoMSA8PCAod2luZG93Qml0cyArIDIpKSArICAoMSA8PCAobWVtTGV2ZWwgKyA5KSkKICAgKiB0aGF0IGlzOiAxMjhLIGZvciB3aW5kb3dCaXRzID0gMTUgKyAxMjhLIGZvciBtZW1MZXZlbCA9IDggKGRlZmF1bHQgdmFsdWVzKQogICAqLwogIGZpbmFsIGludCBtZW1MZXZlbDsKCiAgLyoqCiAgICogVHVuZXMgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVXNlIHRoZSB2YWx1ZSBzdHJhdGVneURlZmF1bHQgZm9yIG5vcm1hbAogICAqIGRhdGEsIHN0cmF0ZWd5RmlsdGVyZWQgZm9yIGRhdGEgcHJvZHVjZWQgYnkgYSBmaWx0ZXIgKG9yIHByZWRpY3RvciksCiAgICogc3RyYXRlZ3lIdWZmbWFuT25seSB0byBmb3JjZSBIdWZmbWFuIGVuY29kaW5nIG9ubHkgKG5vIHN0cmluZyBtYXRjaCksIG9yCiAgICogc3RyYXRlZ3lSbGUgdG8gbGltaXQgbWF0Y2ggZGlzdGFuY2VzIHRvIG9uZSAocnVuLWxlbmd0aCBlbmNvZGluZykuCiAgICovCiAgZmluYWwgaW50IHN0cmF0ZWd5OwoKICAvKioKICAgKiBCYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiBJdAogICAqIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgOC4uMTUuIExhcmdlciB2YWx1ZXMgcmVzdWx0IGluIGJldHRlciBjb21wcmVzc2lvbiBhdAogICAqIHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUKICAgKi8KICBmaW5hbCBpbnQgd2luZG93Qml0czsKCiAgLyoqCiAgICogV2hlbiB0cnVlLCBkZWZsYXRlIGdlbmVyYXRlcyByYXcgZGF0YSB3aXRoIG5vIHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZAogICAqIHdpbGwgbm90IGNvbXB1dGUgYW4gYWRsZXIzMiBjaGVjayB2YWx1ZQogICAqLwogIGZpbmFsIGJvb2wgcmF3OwoKICAvKioKICAgKiBJbml0aWFsIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkuCiAgICoKICAgKiBJdCBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5IHRvIGJlCiAgICogZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seSB1c2VkCiAgICogc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKICAgKiBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuCiAgICogYmUgcHJlZGljdGVkIHdpdGggZ29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIKICAgKiB0aGFuIHdpdGggdGhlIGRlZmF1bHQgZW1wdHkgZGljdGlvbmFyeS4KICAgKi8KICBmaW5hbCBMaXN0PGludD4gZGljdGlvbmFyeTsKCiAgWkxpYkNvZGVjKAogICAgICB7dGhpcy5sZXZlbDogWkxpYk9wdGlvbi5kZWZhdWx0TGV2ZWwsCiAgICAgIHRoaXMud2luZG93Qml0czogWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgICAgdGhpcy5tZW1MZXZlbDogWkxpYk9wdGlvbi5kZWZhdWx0TWVtTGV2ZWwsCiAgICAgIHRoaXMuc3RyYXRlZ3k6IFpMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0LAogICAgICB0aGlzLmRpY3Rpb25hcnksCiAgICAgIHRoaXMucmF3OiBmYWxzZSwKICAgICAgdGhpcy5nemlwOiBmYWxzZX0pIHsKICAgIF92YWxpZGF0ZVpMaWJlTGV2ZWwobGV2ZWwpOwogICAgX3ZhbGlkYXRlWkxpYk1lbUxldmVsKG1lbUxldmVsKTsKICAgIF92YWxpZGF0ZVpMaWJTdHJhdGVneShzdHJhdGVneSk7CiAgICBfdmFsaWRhdGVaTGliV2luZG93Qml0cyh3aW5kb3dCaXRzKTsKICB9CgogIGNvbnN0IFpMaWJDb2RlYy5fZGVmYXVsdCgpCiAgICAgIDogbGV2ZWwgPSBaTGliT3B0aW9uLmRlZmF1bHRMZXZlbCwKICAgICAgICB3aW5kb3dCaXRzID0gWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgICAgICBtZW1MZXZlbCA9IFpMaWJPcHRpb24uZGVmYXVsdE1lbUxldmVsLAogICAgICAgIHN0cmF0ZWd5ID0gWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQsCiAgICAgICAgcmF3ID0gZmFsc2UsCiAgICAgICAgZ3ppcCA9IGZhbHNlLAogICAgICAgIGRpY3Rpb25hcnkgPSBudWxsOwoKICAvKioKICAgKiBHZXQgYSBbWkxpYkVuY29kZXJdIGZvciBlbmNvZGluZyB0byBgWkxpYmAgY29tcHJlc3NlZCBkYXRhLgogICAqLwogIFpMaWJFbmNvZGVyIGdldCBlbmNvZGVyID0+IG5ldyBaTGliRW5jb2RlcigKICAgICAgZ3ppcDogZmFsc2UsCiAgICAgIGxldmVsOiBsZXZlbCwKICAgICAgd2luZG93Qml0czogd2luZG93Qml0cywKICAgICAgbWVtTGV2ZWw6IG1lbUxldmVsLAogICAgICBzdHJhdGVneTogc3RyYXRlZ3ksCiAgICAgIGRpY3Rpb25hcnk6IGRpY3Rpb25hcnksCiAgICAgIHJhdzogcmF3KTsKCiAgLyoqCiAgICogR2V0IGEgW1pMaWJEZWNvZGVyXSBmb3IgZGVjb2RpbmcgYFpMaWJgIGNvbXByZXNzZWQgZGF0YS4KICAgKi8KICBaTGliRGVjb2RlciBnZXQgZGVjb2RlciA9PgogICAgICBuZXcgWkxpYkRlY29kZXIod2luZG93Qml0czogd2luZG93Qml0cywgZGljdGlvbmFyeTogZGljdGlvbmFyeSwgcmF3OiByYXcpOwp9CgovKioKICogQW4gaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFtHWmlwQ29kZWNdLgogKi8KY29uc3QgR1ppcENvZGVjIGd6aXAgPSBjb25zdCBHWmlwQ29kZWMuX2RlZmF1bHQoKTsKQERlcHJlY2F0ZWQoIlVzZSBnemlwIGluc3RlYWQiKQpjb25zdCBHWmlwQ29kZWMgR1pJUCA9IGd6aXA7CgovKioKICogVGhlIFtHWmlwQ29kZWNdIGVuY29kZXMgcmF3IGJ5dGVzIHRvIEdaaXAgY29tcHJlc3NlZCBieXRlcyBhbmQgZGVjb2RlcyBHWmlwCiAqIGNvbXByZXNzZWQgYnl0ZXMgdG8gcmF3IGJ5dGVzLgogKgogKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFtaTGliQ29kZWNdIGFuZCBbR1ppcENvZGVjXSBpcyB0aGF0IHRoZSBbR1ppcENvZGVjXQogKiB3cmFwcyB0aGUgYFpMaWJgIGNvbXByZXNzZWQgYnl0ZXMgaW4gYEdaaXBgIGZyYW1lcy4KICovCmNsYXNzIEdaaXBDb2RlYyBleHRlbmRzIENvZGVjPExpc3Q8aW50PiwgTGlzdDxpbnQ+PiB7CiAgLyoqCiAgICogV2hlbiB0cnVlLCBgR1ppcGAgZnJhbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbXByZXNzZWQgZGF0YS4KICAgKi8KICBmaW5hbCBib29sIGd6aXA7CgogIC8qKgogICAqIFRoZSBjb21wcmVzc2lvbi1bbGV2ZWxdIGNhbiBiZSBzZXQgaW4gdGhlIHJhbmdlIG9mIGAtMS4uOWAsIHdpdGggYDZgIGJlaW5nCiAgICogdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwuIExldmVscyBhYm92ZSBgNmAgd2lsbCBoYXZlIGhpZ2hlcgogICAqIGNvbXByZXNzaW9uIHJhdGVzIGF0IHRoZSBjb3N0IG9mIG1vcmUgQ1BVIGFuZCBtZW1vcnkgdXNhZ2UuIExldmVscyBiZWxvdwogICAqIGA2YCB3aWxsIHVzZSBsZXNzIENQVSBhbmQgbWVtb3J5IGF0IHRoZSBjb3N0IG9mIGxvd2VyIGNvbXByZXNzaW9uIHJhdGVzLgogICAqLwogIGZpbmFsIGludCBsZXZlbDsKCiAgLyoqCiAgICogU3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkIGZvciB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24KICAgKiBzdGF0ZS4gYDFgIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0IGlzIHNsb3cgYW5kIHJlZHVjZXMgY29tcHJlc3Npb24gcmF0aW87CiAgICogYDlgIHVzZXMgbWF4aW11bSBtZW1vcnkgZm9yIG9wdGltYWwgc3BlZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA4YC4KICAgKgogICAqIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgogICAqCiAgICogICAgICgxIDw8ICh3aW5kb3dCaXRzICsgMikpICsgICgxIDw8IChtZW1MZXZlbCArIDkpKQogICAqIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHMgPSAxNSArIDEyOEsgZm9yIG1lbUxldmVsID0gOCAoZGVmYXVsdCB2YWx1ZXMpCiAgICovCiAgZmluYWwgaW50IG1lbUxldmVsOwoKICAvKioKICAgKiBUdW5lcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBVc2UgdGhlIHZhbHVlCiAgICogW1pMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0XSBmb3Igbm9ybWFsIGRhdGEsCiAgICogW1pMaWJPcHRpb24uc3RyYXRlZ3lGaWx0ZXJlZF0gZm9yIGRhdGEgcHJvZHVjZWQgYnkgYSBmaWx0ZXIKICAgKiAob3IgcHJlZGljdG9yKSwgW1pMaWJPcHRpb24uc3RyYXRlZ3lIdWZmbWFuT25seV0gdG8gZm9yY2UgSHVmZm1hbgogICAqIGVuY29kaW5nIG9ubHkgKG5vIHN0cmluZyBtYXRjaCksIG9yIFtaTGliT3B0aW9uLnN0cmF0ZWd5UmxlXSB0byBsaW1pdAogICAqIG1hdGNoIGRpc3RhbmNlcyB0byBvbmUgKHJ1bi1sZW5ndGggZW5jb2RpbmcpLgogICAqLwogIGZpbmFsIGludCBzdHJhdGVneTsKCiAgLyoqCiAgICogQmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gSXQKICAgKiBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIGA4Li4xNWAuIExhcmdlciB2YWx1ZXMgcmVzdWx0IGluIGJldHRlciBjb21wcmVzc2lvbgogICAqIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDE1YAogICAqLwogIGZpbmFsIGludCB3aW5kb3dCaXRzOwoKICAvKioKICAgKiBJbml0aWFsIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkuCiAgICoKICAgKiBJdCBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5IHRvIGJlCiAgICogZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seSB1c2VkCiAgICogc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKICAgKiBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuCiAgICogYmUgcHJlZGljdGVkIHdpdGggZ29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIKICAgKiB0aGFuIHdpdGggdGhlIGRlZmF1bHQgZW1wdHkgZGljdGlvbmFyeS4KICAgKi8KICBmaW5hbCBMaXN0PGludD4gZGljdGlvbmFyeTsKCiAgLyoqCiAgICogV2hlbiB0cnVlLCBkZWZsYXRlIGdlbmVyYXRlcyByYXcgZGF0YSB3aXRoIG5vIHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZAogICAqIHdpbGwgbm90IGNvbXB1dGUgYW4gYWRsZXIzMiBjaGVjayB2YWx1ZQogICAqLwogIGZpbmFsIGJvb2wgcmF3OwoKICBHWmlwQ29kZWMoCiAgICAgIHt0aGlzLmxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRMZXZlbCwKICAgICAgdGhpcy53aW5kb3dCaXRzOiBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgICB0aGlzLm1lbUxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRNZW1MZXZlbCwKICAgICAgdGhpcy5zdHJhdGVneTogWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQsCiAgICAgIHRoaXMuZGljdGlvbmFyeSwKICAgICAgdGhpcy5yYXc6IGZhbHNlLAogICAgICB0aGlzLmd6aXA6IHRydWV9KSB7CiAgICBfdmFsaWRhdGVaTGliZUxldmVsKGxldmVsKTsKICAgIF92YWxpZGF0ZVpMaWJNZW1MZXZlbChtZW1MZXZlbCk7CiAgICBfdmFsaWRhdGVaTGliU3RyYXRlZ3koc3RyYXRlZ3kpOwogICAgX3ZhbGlkYXRlWkxpYldpbmRvd0JpdHMod2luZG93Qml0cyk7CiAgfQoKICBjb25zdCBHWmlwQ29kZWMuX2RlZmF1bHQoKQogICAgICA6IGxldmVsID0gWkxpYk9wdGlvbi5kZWZhdWx0TGV2ZWwsCiAgICAgICAgd2luZG93Qml0cyA9IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICAgICAgbWVtTGV2ZWwgPSBaTGliT3B0aW9uLmRlZmF1bHRNZW1MZXZlbCwKICAgICAgICBzdHJhdGVneSA9IFpMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0LAogICAgICAgIHJhdyA9IGZhbHNlLAogICAgICAgIGd6aXAgPSB0cnVlLAogICAgICAgIGRpY3Rpb25hcnkgPSBudWxsOwoKICAvKioKICAgKiBHZXQgYSBbWkxpYkVuY29kZXJdIGZvciBlbmNvZGluZyB0byBgR1ppcGAgY29tcHJlc3NlZCBkYXRhLgogICAqLwogIFpMaWJFbmNvZGVyIGdldCBlbmNvZGVyID0+IG5ldyBaTGliRW5jb2RlcigKICAgICAgZ3ppcDogdHJ1ZSwKICAgICAgbGV2ZWw6IGxldmVsLAogICAgICB3aW5kb3dCaXRzOiB3aW5kb3dCaXRzLAogICAgICBtZW1MZXZlbDogbWVtTGV2ZWwsCiAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneSwKICAgICAgZGljdGlvbmFyeTogZGljdGlvbmFyeSwKICAgICAgcmF3OiByYXcpOwoKICAvKioKICAgKiBHZXQgYSBbWkxpYkRlY29kZXJdIGZvciBkZWNvZGluZyBgR1ppcGAgY29tcHJlc3NlZCBkYXRhLgogICAqLwogIFpMaWJEZWNvZGVyIGdldCBkZWNvZGVyID0+CiAgICAgIG5ldyBaTGliRGVjb2Rlcih3aW5kb3dCaXRzOiB3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5OiBkaWN0aW9uYXJ5LCByYXc6IHJhdyk7Cn0KCi8qKgogKiBUaGUgW1pMaWJFbmNvZGVyXSBlbmNvZGVyIGlzIHVzZWQgYnkgW1pMaWJDb2RlY10gYW5kIFtHWmlwQ29kZWNdIHRvIGNvbXByZXNzCiAqIGRhdGEuCiAqLwpjbGFzcyBaTGliRW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIExpc3Q8aW50Pj4gewogIC8qKgogICAqIFdoZW4gdHJ1ZSwgYEdaaXBgIGZyYW1lcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgZmluYWwgYm9vbCBnemlwOwoKICAvKioKICAgKiBUaGUgY29tcHJlc3Npb24tW2xldmVsXSBjYW4gYmUgc2V0IGluIHRoZSByYW5nZSBvZiBgLTEuLjlgLCB3aXRoIGA2YCBiZWluZwogICAqIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsLiBMZXZlbHMgYWJvdmUgYDZgIHdpbGwgaGF2ZSBoaWdoZXIKICAgKiBjb21wcmVzc2lvbiByYXRlcyBhdCB0aGUgY29zdCBvZiBtb3JlIENQVSBhbmQgbWVtb3J5IHVzYWdlLiBMZXZlbHMgYmVsb3cKICAgKiBgNmAgd2lsbCB1c2UgbGVzcyBDUFUgYW5kIG1lbW9yeSBhdCB0aGUgY29zdCBvZiBsb3dlciBjb21wcmVzc2lvbiByYXRlcy4KICAgKi8KICBmaW5hbCBpbnQgbGV2ZWw7CgogIC8qKgogICAqIFNwZWNpZmllcyBob3cgbXVjaCBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZCBmb3IgdGhlIGludGVybmFsIGNvbXByZXNzaW9uCiAgICogc3RhdGUuIGAxYCB1c2VzIG1pbmltdW0gbWVtb3J5IGJ1dCBpcyBzbG93IGFuZCByZWR1Y2VzIGNvbXByZXNzaW9uIHJhdGlvOwogICAqIGA5YCB1c2VzIG1heGltdW0gbWVtb3J5IGZvciBvcHRpbWFsIHNwZWVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgOGAuCiAgICoKICAgKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKICAgKgogICAqICAgICAoMSA8PCAod2luZG93Qml0cyArIDIpKSArICAoMSA8PCAobWVtTGV2ZWwgKyA5KSkKICAgKiB0aGF0IGlzOiAxMjhLIGZvciB3aW5kb3dCaXRzID0gMTUgKyAxMjhLIGZvciBtZW1MZXZlbCA9IDggKGRlZmF1bHQgdmFsdWVzKQogICAqLwogIGZpbmFsIGludCBtZW1MZXZlbDsKCiAgLyoqCiAgICogVHVuZXMgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVXNlIHRoZSB2YWx1ZQogICAqIFtaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdF0gZm9yIG5vcm1hbCBkYXRhLAogICAqIFtaTGliT3B0aW9uLnN0cmF0ZWd5RmlsdGVyZWRdIGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEgZmlsdGVyCiAgICogKG9yIHByZWRpY3RvciksIFtaTGliT3B0aW9uLnN0cmF0ZWd5SHVmZm1hbk9ubHldIHRvIGZvcmNlIEh1ZmZtYW4KICAgKiBlbmNvZGluZyBvbmx5IChubyBzdHJpbmcgbWF0Y2gpLCBvciBbWkxpYk9wdGlvbi5zdHJhdGVneVJsZV0gdG8gbGltaXQKICAgKiBtYXRjaCBkaXN0YW5jZXMgdG8gb25lIChydW4tbGVuZ3RoIGVuY29kaW5nKS4KICAgKi8KICBmaW5hbCBpbnQgc3RyYXRlZ3k7CgogIC8qKgogICAqIEJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuIEl0CiAgICogc2hvdWxkIGJlIGluIHRoZSByYW5nZSBgOC4uMTVgLiBMYXJnZXIgdmFsdWVzIHJlc3VsdCBpbiBiZXR0ZXIgY29tcHJlc3Npb24KICAgKiBhdCB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgdXNhZ2UuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAxNWAKICAgKi8KICBmaW5hbCBpbnQgd2luZG93Qml0czsKCiAgLyoqCiAgICogSW5pdGlhbCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LgogICAqCiAgICogSXQgc2hvdWxkIGNvbnNpc3Qgb2Ygc3RyaW5ncyAoYnl0ZSBzZXF1ZW5jZXMpIHRoYXQgYXJlIGxpa2VseSB0byBiZQogICAqIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkgdXNlZAogICAqIHN0cmluZ3MgcHJlZmVyYWJseSBwdXQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LiBVc2luZyBhCiAgICogZGljdGlvbmFyeSBpcyBtb3N0IHVzZWZ1bCB3aGVuIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQgaXMgc2hvcnQgYW5kIGNhbgogICAqIGJlIHByZWRpY3RlZCB3aXRoIGdvb2QgYWNjdXJhY3k7IHRoZSBkYXRhIGNhbiB0aGVuIGJlIGNvbXByZXNzZWQgYmV0dGVyCiAgICogdGhhbiB3aXRoIHRoZSBkZWZhdWx0IGVtcHR5IGRpY3Rpb25hcnkuCiAgICovCiAgZmluYWwgTGlzdDxpbnQ+IGRpY3Rpb25hcnk7CgogIC8qKgogICAqIFdoZW4gdHJ1ZSwgZGVmbGF0ZSBnZW5lcmF0ZXMgcmF3IGRhdGEgd2l0aCBubyB6bGliIGhlYWRlciBvciB0cmFpbGVyLCBhbmQKICAgKiB3aWxsIG5vdCBjb21wdXRlIGFuIGFkbGVyMzIgY2hlY2sgdmFsdWUKICAgKi8KICBmaW5hbCBib29sIHJhdzsKCiAgWkxpYkVuY29kZXIoCiAgICAgIHt0aGlzLmd6aXA6IGZhbHNlLAogICAgICB0aGlzLmxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRMZXZlbCwKICAgICAgdGhpcy53aW5kb3dCaXRzOiBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgICB0aGlzLm1lbUxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRNZW1MZXZlbCwKICAgICAgdGhpcy5zdHJhdGVneTogWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQsCiAgICAgIHRoaXMuZGljdGlvbmFyeSwKICAgICAgdGhpcy5yYXc6IGZhbHNlfSkgewogICAgX3ZhbGlkYXRlWkxpYmVMZXZlbChsZXZlbCk7CiAgICBfdmFsaWRhdGVaTGliTWVtTGV2ZWwobWVtTGV2ZWwpOwogICAgX3ZhbGlkYXRlWkxpYlN0cmF0ZWd5KHN0cmF0ZWd5KTsKICAgIF92YWxpZGF0ZVpMaWJXaW5kb3dCaXRzKHdpbmRvd0JpdHMpOwogIH0KCiAgLyoqCiAgICogQ29udmVydCBhIGxpc3Qgb2YgYnl0ZXMgdXNpbmcgdGhlIG9wdGlvbnMgZ2l2ZW4gdG8gdGhlIFpMaWJFbmNvZGVyCiAgICogY29uc3RydWN0b3IuCiAgICovCiAgTGlzdDxpbnQ+IGNvbnZlcnQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBfQnVmZmVyU2luayBzaW5rID0gbmV3IF9CdWZmZXJTaW5rKCk7CiAgICBzdGFydENodW5rZWRDb252ZXJzaW9uKHNpbmspCiAgICAgIC4uYWRkKGJ5dGVzKQogICAgICAuLmNsb3NlKCk7CiAgICByZXR1cm4gc2luay5idWlsZGVyLnRha2VCeXRlcygpOwogIH0KCiAgLyoqCiAgICogU3RhcnQgYSBjaHVua2VkIGNvbnZlcnNpb24gdXNpbmcgdGhlIG9wdGlvbnMgZ2l2ZW4gdG8gdGhlIFtaTGliRW5jb2Rlcl0KICAgKiBjb25zdHJ1Y3Rvci4gV2hpbGUgaXQgYWNjZXB0cyBhbnkgW1NpbmtdIHRha2luZyBbTGlzdDxpbnQ+XSdzLAogICAqIHRoZSBvcHRpbWFsIHNpbmsgdG8gYmUgcGFzc2VkIGFzIFtzaW5rXSBpcyBhIFtCeXRlQ29udmVyc2lvblNpbmtdLgogICAqLwogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICBpZiAoc2luayBpcyEgQnl0ZUNvbnZlcnNpb25TaW5rKSB7CiAgICAgIHNpbmsgPSBuZXcgQnl0ZUNvbnZlcnNpb25TaW5rLmZyb20oc2luayk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9aTGliRW5jb2RlclNpbmsuXygKICAgICAgICBzaW5rLCBnemlwLCBsZXZlbCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5LCBkaWN0aW9uYXJ5LCByYXcpOwogIH0KfQoKLyoqCiAqIFRoZSBbWkxpYkRlY29kZXJdIGlzIHVzZWQgYnkgW1pMaWJDb2RlY10gYW5kIFtHWmlwQ29kZWNdIHRvIGRlY29tcHJlc3MgZGF0YS4KICovCmNsYXNzIFpMaWJEZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgTGlzdDxpbnQ+PiB7CiAgLyoqCiAgICogQmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gSXQKICAgKiBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIGA4Li4xNWAuIExhcmdlciB2YWx1ZXMgcmVzdWx0IGluIGJldHRlciBjb21wcmVzc2lvbgogICAqIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDE1YC4KICAgKi8KICBmaW5hbCBpbnQgd2luZG93Qml0czsKCiAgLyoqCiAgICogSW5pdGlhbCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LgogICAqCiAgICogSXQgc2hvdWxkIGNvbnNpc3Qgb2Ygc3RyaW5ncyAoYnl0ZSBzZXF1ZW5jZXMpIHRoYXQgYXJlIGxpa2VseSB0byBiZQogICAqIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkgdXNlZAogICAqIHN0cmluZ3MgcHJlZmVyYWJseSBwdXQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LiBVc2luZyBhCiAgICogZGljdGlvbmFyeSBpcyBtb3N0IHVzZWZ1bCB3aGVuIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQgaXMgc2hvcnQgYW5kIGNhbgogICAqIGJlIHByZWRpY3RlZCB3aXRoIGdvb2QgYWNjdXJhY3k7IHRoZSBkYXRhIGNhbiB0aGVuIGJlIGNvbXByZXNzZWQgYmV0dGVyCiAgICogdGhhbiB3aXRoIHRoZSBkZWZhdWx0IGVtcHR5IGRpY3Rpb25hcnkuCiAgICovCiAgZmluYWwgTGlzdDxpbnQ+IGRpY3Rpb25hcnk7CgogIC8qKgogICAqIFdoZW4gdHJ1ZSwgZGVmbGF0ZSBnZW5lcmF0ZXMgcmF3IGRhdGEgd2l0aCBubyB6bGliIGhlYWRlciBvciB0cmFpbGVyLCBhbmQKICAgKiB3aWxsIG5vdCBjb21wdXRlIGFuIGFkbGVyMzIgY2hlY2sgdmFsdWUKICAgKi8KICBmaW5hbCBib29sIHJhdzsKCiAgWkxpYkRlY29kZXIoCiAgICAgIHt0aGlzLndpbmRvd0JpdHM6IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICAgIHRoaXMuZGljdGlvbmFyeSwKICAgICAgdGhpcy5yYXc6IGZhbHNlfSkgewogICAgX3ZhbGlkYXRlWkxpYldpbmRvd0JpdHMod2luZG93Qml0cyk7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0IGEgbGlzdCBvZiBieXRlcyB1c2luZyB0aGUgb3B0aW9ucyBnaXZlbiB0byB0aGUgW1pMaWJEZWNvZGVyXQogICAqIGNvbnN0cnVjdG9yLgogICAqLwogIExpc3Q8aW50PiBjb252ZXJ0KExpc3Q8aW50PiBieXRlcykgewogICAgX0J1ZmZlclNpbmsgc2luayA9IG5ldyBfQnVmZmVyU2luaygpOwogICAgc3RhcnRDaHVua2VkQ29udmVyc2lvbihzaW5rKQogICAgICAuLmFkZChieXRlcykKICAgICAgLi5jbG9zZSgpOwogICAgcmV0dXJuIHNpbmsuYnVpbGRlci50YWtlQnl0ZXMoKTsKICB9CgogIC8qKgogICAqIFN0YXJ0IGEgY2h1bmtlZCBjb252ZXJzaW9uLiBXaGlsZSBpdCBhY2NlcHRzIGFueSBbU2lua10KICAgKiB0YWtpbmcgW0xpc3Q8aW50Pl0ncywgdGhlIG9wdGltYWwgc2luayB0byBiZSBwYXNzZWQgYXMgW3NpbmtdIGlzIGEKICAgKiBbQnl0ZUNvbnZlcnNpb25TaW5rXS4KICAgKi8KICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPExpc3Q8aW50Pj4gc2luaykgewogICAgaWYgKHNpbmsgaXMhIEJ5dGVDb252ZXJzaW9uU2luaykgewogICAgICBzaW5rID0gbmV3IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKHNpbmspOwogICAgfQogICAgcmV0dXJuIG5ldyBfWkxpYkRlY29kZXJTaW5rLl8oc2luaywgd2luZG93Qml0cywgZGljdGlvbmFyeSwgcmF3KTsKICB9Cn0KCi8qKgogKiBUaGUgW1Jhd1pMaWJGaWx0ZXJdIGNsYXNzIHByb3ZpZGVzIGEgbG93LWxldmVsIGludGVyZmFjZSB0byB6bGliLgogKi8KYWJzdHJhY3QgY2xhc3MgUmF3WkxpYkZpbHRlciB7CiAgLyoqCiAgICogUmV0dXJucyBhIGEgW1Jhd1pMaWJGaWx0ZXJdIHdob3NlIFtwcm9jZXNzXSBhbmQgW3Byb2Nlc3NlZF0gbWV0aG9kcwogICAqIGNvbXByZXNzIGRhdGEuCiAgICovCiAgZmFjdG9yeSBSYXdaTGliRmlsdGVyLmRlZmxhdGVGaWx0ZXIoewogICAgYm9vbCBnemlwOiBmYWxzZSwKICAgIGludCBsZXZlbDogWkxpYk9wdGlvbi5kZWZhdWx0TGV2ZWwsCiAgICBpbnQgd2luZG93Qml0czogWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgIGludCBtZW1MZXZlbDogWkxpYk9wdGlvbi5kZWZhdWx0TWVtTGV2ZWwsCiAgICBpbnQgc3RyYXRlZ3k6IFpMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0LAogICAgTGlzdDxpbnQ+IGRpY3Rpb25hcnksCiAgICBib29sIHJhdzogZmFsc2UsCiAgfSkgewogICAgcmV0dXJuIF9tYWtlWkxpYkRlZmxhdGVGaWx0ZXIoCiAgICAgICAgZ3ppcCwgbGV2ZWwsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwgZGljdGlvbmFyeSwgcmF3KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBhIFtSYXdaTGliRmlsdGVyXSB3aG9zZSBbcHJvY2Vzc10gYW5kIFtwcm9jZXNzZWRdIG1ldGhvZHMKICAgKiBkZWNvbXByZXNzIGRhdGEuCiAgICovCiAgZmFjdG9yeSBSYXdaTGliRmlsdGVyLmluZmxhdGVGaWx0ZXIoewogICAgaW50IHdpbmRvd0JpdHM6IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICBMaXN0PGludD4gZGljdGlvbmFyeSwKICAgIGJvb2wgcmF3OiBmYWxzZSwKICB9KSB7CiAgICByZXR1cm4gX21ha2VaTGliSW5mbGF0ZUZpbHRlcih3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5LCByYXcpOwogIH0KCiAgLyoqCiAgICogQ2FsbCB0byBwcm9jZXNzIGEgY2h1bmsgb2YgZGF0YS4gQSBjYWxsIHRvIFtwcm9jZXNzXSBzaG91bGQgb25seSBiZSBtYWRlCiAgICogd2hlbiBbcHJvY2Vzc2VkXSByZXR1cm5zIFs6bnVsbDpdLgogICAqLwogIHZvaWQgcHJvY2VzcyhMaXN0PGludD4gZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKCiAgLyoqCiAgICogR2V0IGEgY2h1bmsgb2YgcHJvY2Vzc2VkIGRhdGEuIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgZGF0YSBhdmFpbGFibGUsCiAgICogW3Byb2Nlc3NlZF0gd2lsbCByZXR1cm4gWzpudWxsOl0uIFNldCBbZmx1c2hdIHRvIFs6ZmFsc2U6XSBmb3Igbm9uLWZpbmFsCiAgICogY2FsbHMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBzb21lIGZpbHRlcnMuCiAgICoKICAgKiBUaGUgbGFzdCBjYWxsIHRvIFtwcm9jZXNzZWRdIHNob3VsZCBoYXZlIFtlbmRdIHNldCB0byBbOnRydWU6XS4gVGhpcyB3aWxsCiAgICogbWFrZSBzdXJlIGFuICdlbmQnIHBhY2tldCBpcyB3cml0dGVuIG9uIHRoZSBzdHJlYW0uCiAgICovCiAgTGlzdDxpbnQ+IHByb2Nlc3NlZCh7Ym9vbCBmbHVzaDogdHJ1ZSwgYm9vbCBlbmQ6IGZhbHNlfSk7CgogIGV4dGVybmFsIHN0YXRpYyBSYXdaTGliRmlsdGVyIF9tYWtlWkxpYkRlZmxhdGVGaWx0ZXIoCiAgICAgIGJvb2wgZ3ppcCwKICAgICAgaW50IGxldmVsLAogICAgICBpbnQgd2luZG93Qml0cywKICAgICAgaW50IG1lbUxldmVsLAogICAgICBpbnQgc3RyYXRlZ3ksCiAgICAgIExpc3Q8aW50PiBkaWN0aW9uYXJ5LAogICAgICBib29sIHJhdyk7CgogIGV4dGVybmFsIHN0YXRpYyBSYXdaTGliRmlsdGVyIF9tYWtlWkxpYkluZmxhdGVGaWx0ZXIoCiAgICAgIGludCB3aW5kb3dCaXRzLCBMaXN0PGludD4gZGljdGlvbmFyeSwgYm9vbCByYXcpOwp9CgpjbGFzcyBfQnVmZmVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgZmluYWwgQnl0ZXNCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQnl0ZXNCdWlsZGVyKGNvcHk6IGZhbHNlKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKSB7CiAgICBidWlsZGVyLmFkZChjaHVuayk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgaWYgKGNodW5rIGlzIFVpbnQ4TGlzdCkgewogICAgICBVaW50OExpc3QgbGlzdCA9IGNodW5rOwogICAgICBidWlsZGVyLmFkZChuZXcgVWludDhMaXN0LnZpZXcobGlzdC5idWZmZXIsIHN0YXJ0LCBlbmQgLSBzdGFydCkpOwogICAgfSBlbHNlIHsKICAgICAgYnVpbGRlci5hZGQoY2h1bmsuc3VibGlzdChzdGFydCwgZW5kKSk7CiAgICB9CiAgfQoKICB2b2lkIGNsb3NlKCkge30KfQoKY2xhc3MgX1pMaWJFbmNvZGVyU2luayBleHRlbmRzIF9GaWx0ZXJTaW5rIHsKICBfWkxpYkVuY29kZXJTaW5rLl8oCiAgICAgIEJ5dGVDb252ZXJzaW9uU2luayBzaW5rLAogICAgICBib29sIGd6aXAsCiAgICAgIGludCBsZXZlbCwKICAgICAgaW50IHdpbmRvd0JpdHMsCiAgICAgIGludCBtZW1MZXZlbCwKICAgICAgaW50IHN0cmF0ZWd5LAogICAgICBMaXN0PGludD4gZGljdGlvbmFyeSwKICAgICAgYm9vbCByYXcpCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIHNpbmssCiAgICAgICAgICAgIFJhd1pMaWJGaWx0ZXIuX21ha2VaTGliRGVmbGF0ZUZpbHRlcigKICAgICAgICAgICAgICAgIGd6aXAsIGxldmVsLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksIGRpY3Rpb25hcnksIHJhdykpOwp9CgpjbGFzcyBfWkxpYkRlY29kZXJTaW5rIGV4dGVuZHMgX0ZpbHRlclNpbmsgewogIF9aTGliRGVjb2RlclNpbmsuXygKICAgICAgQnl0ZUNvbnZlcnNpb25TaW5rIHNpbmssIGludCB3aW5kb3dCaXRzLCBMaXN0PGludD4gZGljdGlvbmFyeSwgYm9vbCByYXcpCiAgICAgIDogc3VwZXIoc2luaywKICAgICAgICAgICAgUmF3WkxpYkZpbHRlci5fbWFrZVpMaWJJbmZsYXRlRmlsdGVyKHdpbmRvd0JpdHMsIGRpY3Rpb25hcnksIHJhdykpOwp9CgpjbGFzcyBfRmlsdGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgZmluYWwgUmF3WkxpYkZpbHRlciBfZmlsdGVyOwogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfc2luazsKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKICBib29sIF9lbXB0eSA9IHRydWU7CgogIF9GaWx0ZXJTaW5rKHRoaXMuX3NpbmssIHRoaXMuX2ZpbHRlcik7CgogIHZvaWQgYWRkKExpc3Q8aW50PiBkYXRhKSB7CiAgICBhZGRTbGljZShkYXRhLCAwLCBkYXRhLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgaWYgKF9jbG9zZWQpIHJldHVybjsKICAgIGlmIChlbmQgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgiZW5kIik7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBkYXRhLmxlbmd0aCk7CiAgICB0cnkgewogICAgICBfZW1wdHkgPSBmYWxzZTsKICAgICAgX0J1ZmZlckFuZFN0YXJ0IGJ1ZmZlckFuZFN0YXJ0ID0KICAgICAgICAgIF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICAgIF9maWx0ZXIucHJvY2VzcyhidWZmZXJBbmRTdGFydC5idWZmZXIsIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0LAogICAgICAgICAgZW5kIC0gKHN0YXJ0IC0gYnVmZmVyQW5kU3RhcnQuc3RhcnQpKTsKICAgICAgTGlzdDxpbnQ+IG91dDsKICAgICAgd2hpbGUgKChvdXQgPSBfZmlsdGVyLnByb2Nlc3NlZChmbHVzaDogZmFsc2UpKSAhPSBudWxsKSB7CiAgICAgICAgX3NpbmsuYWRkKG91dCk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgX2Nsb3NlZCA9IHRydWU7CiAgICAgIHJldGhyb3c7CiAgICB9CgogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoX2Nsb3NlZCkgcmV0dXJuOwogICAgLy8gQmUgc3VyZSB0byBzZW5kIHByb2Nlc3MgYW4gZW1wdHkgY2h1bmsgb2YgZGF0YS4gV2l0aG91dCB0aGlzLCB0aGUgZW1wdHkKICAgIC8vIG1lc3NhZ2Ugd291bGQgbm90IGhhdmUgYSBHWmlwIGZyYW1lIChpZiBjb21wcmVzc2VkIHdpdGggR1ppcCkuCiAgICBpZiAoX2VtcHR5KSBfZmlsdGVyLnByb2Nlc3MoY29uc3QgW10sIDAsIDApOwogICAgdHJ5IHsKICAgICAgTGlzdDxpbnQ+IG91dDsKICAgICAgd2hpbGUgKChvdXQgPSBfZmlsdGVyLnByb2Nlc3NlZChlbmQ6IHRydWUpKSAhPSBudWxsKSB7CiAgICAgICAgX3NpbmsuYWRkKG91dCk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgLy8gVE9ETyhrZXZtb28pOiBub3Qgc3VyZSB3aHkgdGhpcyBpc24ndCBhIHRyeS9maW5hbGx5CiAgICAgIF9jbG9zZWQgPSB0cnVlOwogICAgICB0aHJvdyBlOwogICAgfQogICAgX2Nsb3NlZCA9IHRydWU7CiAgICBfc2luay5jbG9zZSgpOwogIH0KfQoKdm9pZCBfdmFsaWRhdGVaTGliV2luZG93Qml0cyhpbnQgd2luZG93Qml0cykgewogIGlmIChaTGliT3B0aW9uLm1pbldpbmRvd0JpdHMgPiB3aW5kb3dCaXRzIHx8CiAgICAgIFpMaWJPcHRpb24ubWF4V2luZG93Qml0cyA8IHdpbmRvd0JpdHMpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKAogICAgICAgIHdpbmRvd0JpdHMsIFpMaWJPcHRpb24ubWluV2luZG93Qml0cywgWkxpYk9wdGlvbi5tYXhXaW5kb3dCaXRzKTsKICB9Cn0KCnZvaWQgX3ZhbGlkYXRlWkxpYmVMZXZlbChpbnQgbGV2ZWwpIHsKICBpZiAoWkxpYk9wdGlvbi5taW5MZXZlbCA+IGxldmVsIHx8IFpMaWJPcHRpb24ubWF4TGV2ZWwgPCBsZXZlbCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UobGV2ZWwsIFpMaWJPcHRpb24ubWluTGV2ZWwsIFpMaWJPcHRpb24ubWF4TGV2ZWwpOwogIH0KfQoKdm9pZCBfdmFsaWRhdGVaTGliTWVtTGV2ZWwoaW50IG1lbUxldmVsKSB7CiAgaWYgKFpMaWJPcHRpb24ubWluTWVtTGV2ZWwgPiBtZW1MZXZlbCB8fCBaTGliT3B0aW9uLm1heE1lbUxldmVsIDwgbWVtTGV2ZWwpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKAogICAgICAgIG1lbUxldmVsLCBaTGliT3B0aW9uLm1pbk1lbUxldmVsLCBaTGliT3B0aW9uLm1heE1lbUxldmVsKTsKICB9Cn0KCnZvaWQgX3ZhbGlkYXRlWkxpYlN0cmF0ZWd5KGludCBzdHJhdGVneSkgewogIGNvbnN0IHN0cmF0ZWdpZXMgPSBjb25zdCA8aW50PlsKICAgIFpMaWJPcHRpb24uc3RyYXRlZ3lGaWx0ZXJlZCwKICAgIFpMaWJPcHRpb24uc3RyYXRlZ3lIdWZmbWFuT25seSwKICAgIFpMaWJPcHRpb24uc3RyYXRlZ3lSbGUsCiAgICBaTGliT3B0aW9uLnN0cmF0ZWd5Rml4ZWQsCiAgICBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdAogIF07CiAgaWYgKHN0cmF0ZWdpZXMuaW5kZXhPZihzdHJhdGVneSkgPT0gLTEpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJVbnN1cHBvcnRlZCAnc3RyYXRlZ3knIik7CiAgfQp9CoKjAE5OPAERAQQuAz8EHEkkJisoAUkkJyspAUkkKy8tAUMiJiMBQiEmIgFDJSomAUkkKSYBSSQpJgFJKC0qAUgpLioBSSwxLgFOJCklAU4WJisnASsoLSkCAQRBBDMgHQEETyIENgZEBhMBBlBGTk4GEwEGUE9KBTkFOlAGFgEGT0pOSAYWAQZQUToGGAEGTy0GEgEGJQVJUUdPTS0GHgENLDUxMRcXGyAlJSkEAR0pMy8vFRYbAQZBBi4TFB4aGh4RAQY+Bh1RAgEEQQQzIB0BBE8iA043BDYGRAYTAQZQRk5OBhMBBlBPSgU5BTpQBhYBBjQzQUdLMwYWAQZQUD8GGAEGJQVJUUdPTS0GHgEGTy0GEgENLDUxMRcXGiAlJSkEAR0pMy8vFRUbAQZBBi4SFB4aGh4RAQY+Bh1RAgEEUAkEPAZEBhMBBlBGTk4GEwEGUE9KBTkFOlAGFgEGNDNBR0szBhYBBlBQPwYYAQYlBUlRR09NLQYeAQZPLQYSAQ8ZKzUxMRcaICUlKQQBBkgSBicqIRMRJQQBBk1ESAZEJzAGI00EAgEEUAQ8BlBQQAYYAQYlBUlRR09NLQYeAQZPLQYSAQ82FxopBAEGShIGJyohExElBAEGPUgbBkQnMAZGBAIBBEUEHwZJFAYoFigyLi4aFQcjRwQBBkkWBigyGhUHQAQBBk4oBjQBBktOMwVPOQY8ATgRERYUFBwRATg3AgEvPgEeGAQBRB4eSA0uBgQBEgIBLRYfEREWFBQcEA8SMlACAS0WTxRQAgEvHyIYFgEpAR0rBAFDGT05ChYnQEMxFUAYCBIWDwYBGQQBERlPRjEKFT0YCBI9Fg8GFBMEAgEvLy8gSQQCASZEUQQCAStQIEMEAgErIiEkHB4fBSw3BAIBHWRhcnQ6aW8vZGF0YV90cmFuc2Zvcm1lci5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9kaXJlY3RvcnkuZGFydK+oLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBBIHJlZmVyZW5jZSB0byBhIGRpcmVjdG9yeSAob3IgX2ZvbGRlcl8pIG9uIHRoZSBmaWxlIHN5c3RlbS4KICoKICogQSBEaXJlY3RvcnkgaW5zdGFuY2UgaXMgYW4gb2JqZWN0IGhvbGRpbmcgYSBbcGF0aF0gb24gd2hpY2ggb3BlcmF0aW9ucyBjYW4KICogYmUgcGVyZm9ybWVkLiBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNhbiBiZSBbYWJzb2x1dGVdIG9yIHJlbGF0aXZlLgogKiBZb3UgY2FuIGdldCB0aGUgcGFyZW50IGRpcmVjdG9yeSB1c2luZyB0aGUgZ2V0dGVyIFtwYXJlbnRdLAogKiBhIHByb3BlcnR5IGluaGVyaXRlZCBmcm9tIFtGaWxlU3lzdGVtRW50aXR5XS4KICoKICogSW4gYWRkaXRpb24gdG8gYmVpbmcgdXNlZCBhcyBhbiBpbnN0YW5jZSB0byBhY2Nlc3MgdGhlIGZpbGUgc3lzdGVtLAogKiBEaXJlY3RvcnkgaGFzIGEgbnVtYmVyIG9mIHN0YXRpYyBwcm9wZXJ0aWVzLCBzdWNoIGFzIFtzeXN0ZW1UZW1wXSwKICogd2hpY2ggZ2V0cyB0aGUgc3lzdGVtJ3MgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgYW5kIHRoZSBnZXR0ZXIgYW5kIHNldHRlcgogKiBbY3VycmVudF0sIHdoaWNoIHlvdSBjYW4gdXNlIHRvIGFjY2VzcyBvciBjaGFuZ2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogKgogKiBDcmVhdGUgYSBuZXcgRGlyZWN0b3J5IG9iamVjdCB3aXRoIGEgcGF0aG5hbWUgdG8gYWNjZXNzIHRoZSBzcGVjaWZpZWQKICogZGlyZWN0b3J5IG9uIHRoZSBmaWxlIHN5c3RlbSBmcm9tIHlvdXIgcHJvZ3JhbS4KICoKICogICAgIHZhciBteURpciA9IG5ldyBEaXJlY3RvcnkoJ215RGlyJyk7CiAqCiAqIE1vc3QgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIG9jY3VyIGluIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcGFpcnMsCiAqIGZvciBleGFtcGxlLCBbY3JlYXRlXSBhbmQgW2NyZWF0ZVN5bmNdLgogKiBVbmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyByZWFzb24gZm9yIHVzaW5nIHRoZSBzeW5jaHJvbm91cyB2ZXJzaW9uCiAqIG9mIGEgbWV0aG9kLCBwcmVmZXIgdGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9uIHRvIGF2b2lkIGJsb2NraW5nIHlvdXIgcHJvZ3JhbS4KICoKICogIyMgQ3JlYXRlIGEgZGlyZWN0b3J5CiAqCiAqIFRoZSBmb2xsb3dpbmcgY29kZSBzYW1wbGUgY3JlYXRlcyBhIGRpcmVjdG9yeSB1c2luZyB0aGUgW2NyZWF0ZV0gbWV0aG9kLgogKiBCeSBzZXR0aW5nIHRoZSBgcmVjdXJzaXZlYCBwYXJhbWV0ZXIgdG8gdHJ1ZSwgeW91IGNhbiBjcmVhdGUgdGhlCiAqIG5hbWVkIGRpcmVjdG9yeSBhbmQgYWxsIGl0cyBuZWNlc3NhcnkgcGFyZW50IGRpcmVjdG9yaWVzLAogKiBpZiB0aGV5IGRvIG5vdCBhbHJlYWR5IGV4aXN0LgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgLy8gQ3JlYXRlcyBkaXIvIGFuZCBkaXIvc3ViZGlyLy4KICogICAgICAgbmV3IERpcmVjdG9yeSgnZGlyL3N1YmRpcicpLmNyZWF0ZShyZWN1cnNpdmU6IHRydWUpCiAqICAgICAgICAgLy8gVGhlIGNyZWF0ZWQgZGlyZWN0b3J5IGlzIHJldHVybmVkIGFzIGEgRnV0dXJlLgogKiAgICAgICAgIC50aGVuKChEaXJlY3RvcnkgZGlyZWN0b3J5KSB7CiAqICAgICAgICAgICBwcmludChkaXJlY3RvcnkucGF0aCk7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKiAjIyBMaXN0IGEgZGlyZWN0b3J5CiAqCiAqIFVzZSB0aGUgW2xpc3RdIG9yIFtsaXN0U3luY10gbWV0aG9kcyB0byBnZXQgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcwogKiBjb250YWluZWQgYnkgYSBkaXJlY3RvcnkuCiAqIFNldCBgcmVjdXJzaXZlYCB0byB0cnVlIHRvIHJlY3Vyc2l2ZWx5IGxpc3QgYWxsIHN1YmRpcmVjdG9yaWVzLgogKiBTZXQgYGZvbGxvd0xpbmtzYCB0byB0cnVlIHRvIGZvbGxvdyBzeW1ib2xpYyBsaW5rcy4KICogVGhlIGxpc3QgbWV0aG9kIHJldHVybnMgYSBbU3RyZWFtXSB0aGF0IHByb3ZpZGVzIEZpbGVTeXN0ZW1FbnRpdHkKICogb2JqZWN0cy4gVXNlIHRoZSBsaXN0ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gcHJvY2VzcyBlYWNoIG9iamVjdAogKiBhcyBpdCBiZWNvbWUgYXZhaWxhYmxlLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgLy8gR2V0IHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnkuCiAqICAgICAgIHZhciBzeXN0ZW1UZW1wRGlyID0gRGlyZWN0b3J5LnN5c3RlbVRlbXA7CiAqCiAqICAgICAgIC8vIExpc3QgZGlyZWN0b3J5IGNvbnRlbnRzLCByZWN1cnNpbmcgaW50byBzdWItZGlyZWN0b3JpZXMsCiAqICAgICAgIC8vIGJ1dCBub3QgZm9sbG93aW5nIHN5bWJvbGljIGxpbmtzLgogKiAgICAgICBzeXN0ZW1UZW1wRGlyLmxpc3QocmVjdXJzaXZlOiB0cnVlLCBmb2xsb3dMaW5rczogZmFsc2UpCiAqICAgICAgICAgLmxpc3RlbigoRmlsZVN5c3RlbUVudGl0eSBlbnRpdHkpIHsKICogICAgICAgICAgIHByaW50KGVudGl0eS5wYXRoKTsKICogICAgICAgICB9KTsKICogICAgIH0KICoKICogIyMgVGhlIHVzZSBvZiBGdXR1cmVzCiAqCiAqIEkvTyBvcGVyYXRpb25zIGNhbiBibG9jayBhIHByb2dyYW0gZm9yIHNvbWUgcGVyaW9kIG9mIHRpbWUgd2hpbGUgaXQgd2FpdHMgZm9yCiAqIHRoZSBvcGVyYXRpb24gdG8gY29tcGxldGUuIFRvIGF2b2lkIHRoaXMsIGFsbAogKiBtZXRob2RzIGludm9sdmluZyBJL08gaGF2ZSBhbiBhc3luY2hyb25vdXMgdmFyaWFudCB3aGljaCByZXR1cm5zIGEgW0Z1dHVyZV0uCiAqIFRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aGVuIHRoZSBJL08gb3BlcmF0aW9uIGZpbmlzaGVzLiBXaGlsZSB0aGUgSS9PCiAqIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcywgdGhlIERhcnQgcHJvZ3JhbSBpcyBub3QgYmxvY2tlZCwKICogYW5kIGNhbiBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMuCiAqCiAqIEZvciBleGFtcGxlLAogKiB0aGUgW2V4aXN0c10gbWV0aG9kLCB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRpcmVjdG9yeSBleGlzdHMsCiAqIHJldHVybnMgYSBib29sZWFuIHZhbHVlIHVzaW5nIGEgRnV0dXJlLgogKiBVc2UgYHRoZW5gIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCB3aGVuCiAqIHRoZSB2YWx1ZSBpcyByZWFkeS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBmaW5hbCBteURpciA9IG5ldyBEaXJlY3RvcnkoJ2RpcicpOwogKiAgICAgICBteURpci5leGlzdHMoKS50aGVuKChpc1RoZXJlKSB7CiAqICAgICAgICAgaXNUaGVyZSA/IHByaW50KCdleGlzdHMnKSA6IHByaW50KCdub24tZXhpc3RlbnQnKTsKICogICAgICAgfSk7CiAqICAgICB9CiAqCiAqCiAqIEluIGFkZGl0aW9uIHRvIGV4aXN0cywgdGhlIFtzdGF0XSwgW3JlbmFtZV0sIGFuZAogKiBvdGhlciBtZXRob2RzLCByZXR1cm4gRnV0dXJlcy4KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqICogW0RhcnQgYnkgRXhhbXBsZV0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RhcnQtYnktZXhhbXBsZS8jZmlsZXMtZGlyZWN0b3JpZXMtYW5kLXN5bWxpbmtzKQogKiAgIHByb3ZpZGVzIGFkZGl0aW9uYWwgdGFzay1vcmllbnRlZCBjb2RlIHNhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UKICogICB2YXJpb3VzIEFQSSBmcm9tIHRoZSBEaXJlY3RvcnkgY2xhc3MgYW5kIHRoZSByZWxhdGVkIFtGaWxlXSBjbGFzcy4KICoKICogKiBbSS9PIGZvciBDb21tYW5kLUxpbmUKICogICBBcHBzXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NoMDMuaHRtbCNkYXJ0aW8tLS1pby1mb3ItY29tbWFuZC1saW5lLWFwcHMpCiAqICAgYSBzZWN0aW9uIGZyb20gX0EgVG91ciBvZiB0aGUgRGFydCBMaWJyYXJpZXNfIGNvdmVycyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAqCiAqICogW1dyaXRlIENvbW1hbmQtTGluZSBBcHBzXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy90dXRvcmlhbHMvY21kbGluZS8pLAogKiAgIGEgdHV0b3JpYWwgYWJvdXQgd3JpdGluZyBjb21tYW5kLWxpbmUgYXBwcywgaW5jbHVkZXMgaW5mb3JtYXRpb24gYWJvdXQKICogICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmFic3RyYWN0IGNsYXNzIERpcmVjdG9yeSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW1FbnRpdHkgewogIC8qKgogICAqIEdldHMgdGhlIHBhdGggb2YgdGhpcyBkaXJlY3RvcnkuCiAgICovCiAgU3RyaW5nIGdldCBwYXRoOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0RpcmVjdG9yeV0gb2JqZWN0LgogICAqCiAgICogSWYgW3BhdGhdIGlzIGEgcmVsYXRpdmUgcGF0aCwgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IChzZWUgW0RpcmVjdG9yeS5jdXJyZW50XSksIHdoZW4gdXNlZC4KICAgKgogICAqIElmIFtwYXRoXSBpcyBhbiBhYnNvbHV0ZSBwYXRoLCBpdCB3aWxsIGJlIGltbXVuZSB0byBjaGFuZ2VzIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgRGlyZWN0b3J5KFN0cmluZyBwYXRoKSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgX0RpcmVjdG9yeShwYXRoKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuY3JlYXRlRGlyZWN0b3J5KHBhdGgpOwogIH0KCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgRGlyZWN0b3J5LmZyb21SYXdQYXRoKFVpbnQ4TGlzdCBwYXRoKSB7CiAgICAvLyBUT0RPKGJrb255aSk6IEhhbmRsZSBvdmVycmlkZXMuCiAgICByZXR1cm4gbmV3IF9EaXJlY3RvcnkuZnJvbVJhd1BhdGgocGF0aCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBEaXJlY3Rvcnkgb2JqZWN0IGZyb20gYSBVUkkuCiAgICoKICAgKiBJZiBbdXJpXSBjYW5ub3QgcmVmZXJlbmNlIGEgZGlyZWN0b3J5IHRoaXMgdGhyb3dzIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBmYWN0b3J5IERpcmVjdG9yeS5mcm9tVXJpKFVyaSB1cmkpID0+IG5ldyBEaXJlY3RvcnkodXJpLnRvRmlsZVBhdGgoKSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBkaXJlY3Rvcnkgb2JqZWN0IHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgKiBkaXJlY3RvcnkuCiAgICovCiAgc3RhdGljIERpcmVjdG9yeSBnZXQgY3VycmVudCB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfRGlyZWN0b3J5LmN1cnJlbnQ7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmdldEN1cnJlbnREaXJlY3RvcnkoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBbVXJpXSByZXByZXNlbnRpbmcgdGhlIGRpcmVjdG9yeSdzIGxvY2F0aW9uLgogICAqCiAgICogVGhlIHJldHVybmVkIFVSSSdzIHNjaGVtZSBpcyBhbHdheXMgImZpbGUiIGlmIHRoZSBlbnRpdHkncyBbcGF0aF0gaXMKICAgKiBhYnNvbHV0ZSwgb3RoZXJ3aXNlIHRoZSBzY2hlbWUgd2lsbCBiZSBlbXB0eS4KICAgKiBUaGUgcmV0dXJuZWQgVVJJJ3MgcGF0aCBhbHdheXMgZW5kcyBpbiBhIHNsYXNoICgnLycpLgogICAqLwogIFVyaSBnZXQgdXJpOwoKICAvKioKICAgKiBTZXRzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZSBEYXJ0IHByb2Nlc3MgaW5jbHVkaW5nCiAgICogYWxsIHJ1bm5pbmcgaXNvbGF0ZXMuIFRoZSBuZXcgdmFsdWUgc2V0IGNhbiBiZSBlaXRoZXIgYSBbRGlyZWN0b3J5XQogICAqIG9yIGEgW1N0cmluZ10uCiAgICoKICAgKiBUaGUgbmV3IHZhbHVlIGlzIHBhc3NlZCB0byB0aGUgT1MncyBzeXN0ZW0gY2FsbCB1bmNoYW5nZWQsIHNvIGEKICAgKiByZWxhdGl2ZSBwYXRoIHBhc3NlZCBhcyB0aGUgbmV3IHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYmUKICAgKiByZXNvbHZlZCBieSB0aGUgT1MuCiAgICoKICAgKiBOb3RlIHRoYXQgc2V0dGluZyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBhIHN5bmNocm9ub3VzCiAgICogb3BlcmF0aW9uIGFuZCB0aGF0IGl0IGNoYW5nZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mICphbGwqCiAgICogaXNvbGF0ZXMuCiAgICoKICAgKiBVc2UgdGhpcyB3aXRoIGNhcmUgLSBlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIGFzeW5jaHJvbm91cwogICAqIG9wZXJhdGlvbnMgYW5kIG11bHRpcGxlIGlzb2xhdGVzLiBDaGFuZ2luZyB0aGUgd29ya2luZyBkaXJlY3RvcnksCiAgICogd2hpbGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYXJlIHBlbmRpbmcgb3Igd2hlbiBvdGhlciBpc29sYXRlcwogICAqIGFyZSB3b3JraW5nIHdpdGggdGhlIGZpbGUgc3lzdGVtLCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMuCiAgICovCiAgc3RhdGljIHZvaWQgc2V0IGN1cnJlbnQocGF0aCkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICBfRGlyZWN0b3J5LmN1cnJlbnQgPSBwYXRoOwogICAgICByZXR1cm47CiAgICB9CiAgICBvdmVycmlkZXMuc2V0Q3VycmVudERpcmVjdG9yeShwYXRoKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgdGhlIGRpcmVjdG9yeSB3aXRoIHRoaXMgbmFtZS4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLCBvbmx5IHRoZSBsYXN0IGRpcmVjdG9yeSBpbiB0aGUgcGF0aCBpcwogICAqIGNyZWF0ZWQuIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIGFsbCBub24tZXhpc3RpbmcgcGF0aCBjb21wb25lbnRzCiAgICogYXJlIGNyZWF0ZWQuIElmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgbm90aGluZyBpcyBkb25lLgogICAqCiAgICogUmV0dXJucyBhIFs6RnV0dXJlPERpcmVjdG9yeT46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBkaXJlY3Rvcnkgb25jZSBpdCBoYXMgYmVlbiBjcmVhdGVkLiBJZiB0aGUgZGlyZWN0b3J5IGNhbm5vdCBiZQogICAqIGNyZWF0ZWQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPERpcmVjdG9yeT4gY3JlYXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjcmVhdGVzIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGlzIG5hbWUuCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwgb25seSB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMKICAgKiBjcmVhdGVkLiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCBhbGwgbm9uLWV4aXN0aW5nIHBhdGggY29tcG9uZW50cwogICAqIGFyZSBjcmVhdGVkLiBJZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIG5vdGhpbmcgaXMgZG9uZS4KICAgKgogICAqIElmIHRoZSBkaXJlY3RvcnkgY2Fubm90IGJlIGNyZWF0ZWQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICB2b2lkIGNyZWF0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwoKICAvKioKICAgKiBHZXRzIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnkuCiAgICoKICAgKiBHZXRzIHRoZSBkaXJlY3RvcnkgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZm9yIGNyZWF0aW5nCiAgICogdGVtcG9yYXJ5IGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbi4KICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeSBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQsCiAgICogYW5kIG1heSBiZSBzZXQgYnkgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCiAgICovCiAgc3RhdGljIERpcmVjdG9yeSBnZXQgc3lzdGVtVGVtcCB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfRGlyZWN0b3J5LnN5c3RlbVRlbXA7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmdldFN5c3RlbVRlbXBEaXJlY3RvcnkoKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIHRoaXMgZGlyZWN0b3J5LiBBZGRpdGlvbmFsIHJhbmRvbQogICAqIGNoYXJhY3RlcnMgYXJlIGFwcGVuZGVkIHRvIFtwcmVmaXhdIHRvIHByb2R1Y2UgYSB1bmlxdWUgZGlyZWN0b3J5CiAgICogbmFtZS4gSWYgW3ByZWZpeF0gaXMgbWlzc2luZyBvciBudWxsLCB0aGUgZW1wdHkgc3RyaW5nIGlzIHVzZWQKICAgKiBmb3IgW3ByZWZpeF0uCiAgICoKICAgKiBSZXR1cm5zIGEgWzpGdXR1cmU8RGlyZWN0b3J5PjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIG5ld2x5CiAgICogY3JlYXRlZCB0ZW1wb3JhcnkgZGlyZWN0b3J5LgogICAqLwogIEZ1dHVyZTxEaXJlY3Rvcnk+IGNyZWF0ZVRlbXAoW1N0cmluZyBwcmVmaXhdKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjcmVhdGVzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiB0aGlzIGRpcmVjdG9yeS4KICAgKiBBZGRpdGlvbmFsIHJhbmRvbSBjaGFyYWN0ZXJzIGFyZSBhcHBlbmRlZCB0byBbcHJlZml4XSB0byBwcm9kdWNlCiAgICogYSB1bmlxdWUgZGlyZWN0b3J5IG5hbWUuIElmIFtwcmVmaXhdIGlzIG1pc3Npbmcgb3IgbnVsbCwgdGhlIGVtcHR5CiAgICogc3RyaW5nIGlzIHVzZWQgZm9yIFtwcmVmaXhdLgogICAqCiAgICogUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCB0ZW1wb3JhcnkgZGlyZWN0b3J5LgogICAqLwogIERpcmVjdG9yeSBjcmVhdGVUZW1wU3luYyhbU3RyaW5nIHByZWZpeF0pOwoKICBGdXR1cmU8U3RyaW5nPiByZXNvbHZlU3ltYm9saWNMaW5rcygpOwoKICBTdHJpbmcgcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jKCk7CgogIC8qKgogICAqIFJlbmFtZXMgdGhpcyBkaXJlY3RvcnkuIFJldHVybnMgYSBbOkZ1dHVyZTxEaXJlY3Rvcnk+Ol0gdGhhdCBjb21wbGV0ZXMKICAgKiB3aXRoIGEgW0RpcmVjdG9yeV0gaW5zdGFuY2UgZm9yIHRoZSByZW5hbWVkIGRpcmVjdG9yeS4KICAgKgogICAqIElmIG5ld1BhdGggaWRlbnRpZmllcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHRoYXQgZGlyZWN0b3J5IGlzCiAgICogcmVwbGFjZWQuIElmIG5ld1BhdGggaWRlbnRpZmllcyBhbiBleGlzdGluZyBmaWxlLCB0aGUgb3BlcmF0aW9uCiAgICogZmFpbHMgYW5kIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxEaXJlY3Rvcnk+IHJlbmFtZShTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVuYW1lcyB0aGlzIGRpcmVjdG9yeS4gUmV0dXJucyBhIFtEaXJlY3RvcnldCiAgICogaW5zdGFuY2UgZm9yIHRoZSByZW5hbWVkIGRpcmVjdG9yeS4KICAgKgogICAqIElmIG5ld1BhdGggaWRlbnRpZmllcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHRoYXQgZGlyZWN0b3J5IGlzCiAgICogcmVwbGFjZWQuIElmIG5ld1BhdGggaWRlbnRpZmllcyBhbiBleGlzdGluZyBmaWxlIHRoZSBvcGVyYXRpb24KICAgKiBmYWlscyBhbmQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICBEaXJlY3RvcnkgcmVuYW1lU3luYyhTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIFJldHVybnMgYSBbRGlyZWN0b3J5XSBpbnN0YW5jZSB3aG9zZSBwYXRoIGlzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIFt0aGlzXS4KICAgKgogICAqIFRoZSBhYnNvbHV0ZSBwYXRoIGlzIGNvbXB1dGVkIGJ5IHByZWZpeGluZwogICAqIGEgcmVsYXRpdmUgcGF0aCB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgcmV0dXJuaW5nCiAgICogYW4gYWJzb2x1dGUgcGF0aCB1bmNoYW5nZWQuCiAgICovCiAgRGlyZWN0b3J5IGdldCBhYnNvbHV0ZTsKCiAgLyoqCiAgICogTGlzdHMgdGhlIHN1Yi1kaXJlY3RvcmllcyBhbmQgZmlsZXMgb2YgdGhpcyBbRGlyZWN0b3J5XS4KICAgKiBPcHRpb25hbGx5IHJlY3Vyc2VzIGludG8gc3ViLWRpcmVjdG9yaWVzLgogICAqCiAgICogSWYgW2ZvbGxvd0xpbmtzXSBpcyBmYWxzZSwgdGhlbiBhbnkgc3ltYm9saWMgbGlua3MgZm91bmQKICAgKiBhcmUgcmVwb3J0ZWQgYXMgW0xpbmtdIG9iamVjdHMsIHJhdGhlciB0aGFuIGFzIGRpcmVjdG9yaWVzIG9yIGZpbGVzLAogICAqIGFuZCBhcmUgbm90IHJlY3Vyc2VkIGludG8uCiAgICoKICAgKiBJZiBbZm9sbG93TGlua3NdIGlzIHRydWUsIHRoZW4gd29ya2luZyBsaW5rcyBhcmUgcmVwb3J0ZWQgYXMKICAgKiBkaXJlY3RvcmllcyBvciBmaWxlcywgZGVwZW5kaW5nIG9uCiAgICogdGhlaXIgdHlwZSwgYW5kIGxpbmtzIHRvIGRpcmVjdG9yaWVzIGFyZSByZWN1cnNlZCBpbnRvLgogICAqIEJyb2tlbiBsaW5rcyBhcmUgcmVwb3J0ZWQgYXMgW0xpbmtdIG9iamVjdHMuCiAgICogSWYgYSBzeW1ib2xpYyBsaW5rIG1ha2VzIGEgbG9vcCBpbiB0aGUgZmlsZSBzeXN0ZW0sIHRoZW4gYSByZWN1cnNpdmUKICAgKiBsaXN0aW5nIHdpbGwgbm90IGZvbGxvdyBhIGxpbmsgdHdpY2UgaW4gdGhlCiAgICogc2FtZSByZWN1cnNpdmUgZGVzY2VudCwgYnV0IHdpbGwgcmVwb3J0IGl0IGFzIGEgW0xpbmtdCiAgICogdGhlIHNlY29uZCB0aW1lIGl0IGlzIHNlZW4uCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGEgc3RyZWFtIG9mIFtGaWxlU3lzdGVtRW50aXR5XSBvYmplY3RzCiAgICogZm9yIHRoZSBkaXJlY3RvcmllcywgZmlsZXMsIGFuZCBsaW5rcy4KICAgKi8KICBTdHJlYW08RmlsZVN5c3RlbUVudGl0eT4gbGlzdCgKICAgICAge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZSwgYm9vbCBmb2xsb3dMaW5rczogdHJ1ZX0pOwoKICAvKioKICAgKiBMaXN0cyB0aGUgc3ViLWRpcmVjdG9yaWVzIGFuZCBmaWxlcyBvZiB0aGlzIFtEaXJlY3RvcnldLgogICAqIE9wdGlvbmFsbHkgcmVjdXJzZXMgaW50byBzdWItZGlyZWN0b3JpZXMuCiAgICoKICAgKiBJZiBbZm9sbG93TGlua3NdIGlzIGZhbHNlLCB0aGVuIGFueSBzeW1ib2xpYyBsaW5rcyBmb3VuZAogICAqIGFyZSByZXBvcnRlZCBhcyBbTGlua10gb2JqZWN0cywgcmF0aGVyIHRoYW4gYXMgZGlyZWN0b3JpZXMgb3IgZmlsZXMsCiAgICogYW5kIGFyZSBub3QgcmVjdXJzZWQgaW50by4KICAgKgogICAqIElmIFtmb2xsb3dMaW5rc10gaXMgdHJ1ZSwgdGhlbiB3b3JraW5nIGxpbmtzIGFyZSByZXBvcnRlZCBhcwogICAqIGRpcmVjdG9yaWVzIG9yIGZpbGVzLCBkZXBlbmRpbmcgb24KICAgKiB0aGVpciB0eXBlLCBhbmQgbGlua3MgdG8gZGlyZWN0b3JpZXMgYXJlIHJlY3Vyc2VkIGludG8uCiAgICogQnJva2VuIGxpbmtzIGFyZSByZXBvcnRlZCBhcyBbTGlua10gb2JqZWN0cy4KICAgKiBJZiBhIGxpbmsgbWFrZXMgYSBsb29wIGluIHRoZSBmaWxlIHN5c3RlbSwgdGhlbiBhIHJlY3Vyc2l2ZQogICAqIGxpc3Rpbmcgd2lsbCBub3QgZm9sbG93IGEgbGluayB0d2ljZSBpbiB0aGUKICAgKiBzYW1lIHJlY3Vyc2l2ZSBkZXNjZW50LCBidXQgd2lsbCByZXBvcnQgaXQgYXMgYSBbTGlua10KICAgKiB0aGUgc2Vjb25kIHRpbWUgaXQgaXMgc2Vlbi4KICAgKgogICAqIFJldHVybnMgYSBbTGlzdF0gY29udGFpbmluZyBbRmlsZVN5c3RlbUVudGl0eV0gb2JqZWN0cyBmb3IgdGhlCiAgICogZGlyZWN0b3JpZXMsIGZpbGVzLCBhbmQgbGlua3MuCiAgICovCiAgTGlzdDxGaWxlU3lzdGVtRW50aXR5PiBsaXN0U3luYygKICAgICAge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZSwgYm9vbCBmb2xsb3dMaW5rczogdHJ1ZX0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIGZvciB0aGlzIERpcmVjdG9yeSBpbnN0YW5jZS4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKTsKfQqBWgBOTjwBEQEEQANOSj8xA0dGSksDSTMDKwNLK0dQAxkDTEQ9IQMZAxUqPT0pJA0JAxcDSR1DN0VEGwMZAxUrMwNFLkEvIQ8JAxkDUTFQSD4lAxBHK0QXAxkDEC0pPg0JAwM0IgMWA2FJSAMbalEDUkwcBBo3BiYGEwEGIwVKRQVIIAYcIzcdIwYsBAEcMictBAEGKwVLBkkBBkAQBiE3HSEGLAQBBjwFSjM7Bg8BBkZJFAVFPxkFRkIPBURHRkcGIjcdIQ4GKQQBBisFRUdDBT5ENQY1AQY5BUVHQwVABiwBBiUFRilGMAYkNx0kBi8EAQZIR0QTBUMiBjEBBkRGSCIFNAYtASkBJQEGTDwFREU3BiwBBkEpBUREJwYoAQZPBTBHIQYaAQY+LwU+SiAFQig9MkoxPCEFOiwGITgBBj4vBT5KIAVCKD0yQTE8IQVEJAYjOAEGQgYVAgEWZGFydDppby9kaXJlY3RvcnkuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vZGlyZWN0b3J5X2ltcGwuZGFydLaaLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCmNsYXNzIF9EaXJlY3RvcnkgZXh0ZW5kcyBGaWxlU3lzdGVtRW50aXR5IGltcGxlbWVudHMgRGlyZWN0b3J5IHsKICBTdHJpbmcgX3BhdGg7CiAgVWludDhMaXN0IF9yYXdQYXRoOwoKICBfRGlyZWN0b3J5KFN0cmluZyBwYXRoKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChwYXRoLCAncGF0aCcpOwogICAgX3BhdGggPSBwYXRoOwogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShfcGF0aCk7CiAgfQoKICBfRGlyZWN0b3J5LmZyb21SYXdQYXRoKFVpbnQ4TGlzdCByYXdQYXRoKSB7CiAgICBpZiAocmF3UGF0aCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdyYXdQYXRoIGNhbm5vdCBiZSBudWxsJyk7CiAgICB9CiAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvTnVsbFRlcm1pbmF0ZWRVdGY4QXJyYXkocmF3UGF0aCk7CiAgICBfcGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvU3RyaW5nRnJvbVV0ZjhBcnJheShyYXdQYXRoKTsKICB9CgogIFN0cmluZyBnZXQgcGF0aCA9PiBfcGF0aDsKCiAgZXh0ZXJuYWwgc3RhdGljIF9jdXJyZW50KF9OYW1lc3BhY2UgbmFtZXNwYWNlKTsKICBleHRlcm5hbCBzdGF0aWMgX3NldEN1cnJlbnQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKICBleHRlcm5hbCBzdGF0aWMgX2NyZWF0ZVRlbXAoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9zeXN0ZW1UZW1wKF9OYW1lc3BhY2UgbmFtZXNwYWNlKTsKICBleHRlcm5hbCBzdGF0aWMgX2V4aXN0cyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwogIGV4dGVybmFsIHN0YXRpYyBfY3JlYXRlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CiAgZXh0ZXJuYWwgc3RhdGljIF9kZWxldGVOYXRpdmUoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgYm9vbCByZWN1cnNpdmUpOwogIGV4dGVybmFsIHN0YXRpYyBfcmVuYW1lKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIFN0cmluZyBuZXdQYXRoKTsKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfZmlsbFdpdGhEaXJlY3RvcnlMaXN0aW5nKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwKICAgICAgTGlzdDxGaWxlU3lzdGVtRW50aXR5PiBsaXN0LAogICAgICBVaW50OExpc3QgcmF3UGF0aCwKICAgICAgYm9vbCByZWN1cnNpdmUsCiAgICAgIGJvb2wgZm9sbG93TGlua3MpOwoKICBzdGF0aWMgRGlyZWN0b3J5IGdldCBjdXJyZW50IHsKICAgIHZhciByZXN1bHQgPSBfY3VycmVudChfTmFtZXNwYWNlLl9uYW1lc3BhY2UpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkdldHRpbmcgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmYWlsZWQiLCAiIiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiBuZXcgX0RpcmVjdG9yeShyZXN1bHQpOwogIH0KCiAgc3RhdGljIHZvaWQgc2V0IGN1cnJlbnQocGF0aCkgewogICAgVWludDhMaXN0IF9yYXdQYXRoOwogICAgaWYgKHBhdGggaXMgX0RpcmVjdG9yeSkgewogICAgICAvLyBGb3Igb3VyIGludGVybmFsIERpcmVjdG9yeSBpbXBsZW1lbnRhdGlvbiwgZ28gYWhlYWQgYW5kIHVzZSB0aGUgcmF3CiAgICAgIC8vIHBhdGguCiAgICAgIF9yYXdQYXRoID0gcGF0aC5fcmF3UGF0aDsKICAgIH0gZWxzZSBpZiAocGF0aCBpcyBEaXJlY3RvcnkpIHsKICAgICAgLy8gRklYTUUoYmtvbnlpKTogcGFja2FnZTpmaWxlIHBhc3NlcyBpbiBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aGljaCBkbwogICAgICAvLyBub3QgaGF2ZSBfcGF0aCBkZWZpbmVkLCBzbyB3ZSB3aWxsIGZhbGxiYWNrIHRvIHVzaW5nIHRoZSBleGlzdGluZwogICAgICAvLyBwYXRoIFN0cmluZyBmb3Igbm93LgogICAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KHBhdGgucGF0aCk7CiAgICB9IGVsc2UgaWYgKHBhdGggaXMgU3RyaW5nKSB7CiAgICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkocGF0aCk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignJHtFcnJvci5zYWZlVG9TdHJpbmcocGF0aCl9IGlzIG5vdCBhIFN0cmluZyBvcicKICAgICAgICAgICcgRGlyZWN0b3J5Jyk7CiAgICB9CiAgICBpZiAoIV9FbWJlZGRlckNvbmZpZy5fbWF5Q2hkaXIpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVGhpcyBlbWJlZGRlciBkaXNhbGxvd3Mgc2V0dGluZyBEaXJlY3RvcnkuY3VycmVudCIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9zZXRDdXJyZW50KF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgaWYgKHJlc3VsdCBpcyBBcmd1bWVudEVycm9yKSB0aHJvdyByZXN1bHQ7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiU2V0dGluZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBVcmkgZ2V0IHVyaSB7CiAgICByZXR1cm4gbmV3IFVyaS5kaXJlY3RvcnkocGF0aCk7CiAgfQoKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5kaXJlY3RvcnlFeGlzdHMsIFtudWxsLCBfcmF3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25PckVycm9yRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiRXhpc3RzIGZhaWxlZCIpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZSA9PSAxOwogICAgfSk7CiAgfQoKICBib29sIGV4aXN0c1N5bmMoKSB7CiAgICB2YXIgcmVzdWx0ID0gX2V4aXN0cyhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiRXhpc3RzIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gKHJlc3VsdCA9PSAxKTsKICB9CgogIERpcmVjdG9yeSBnZXQgYWJzb2x1dGUgPT4gbmV3IERpcmVjdG9yeShfYWJzb2x1dGVQYXRoKTsKCiAgRnV0dXJlPERpcmVjdG9yeT4gY3JlYXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICBpZiAocmVjdXJzaXZlKSB7CiAgICAgIHJldHVybiBleGlzdHMoKS50aGVuKChleGlzdHMpIHsKICAgICAgICBpZiAoZXhpc3RzKSByZXR1cm4gdGhpczsKICAgICAgICBpZiAocGF0aCAhPSBwYXJlbnQucGF0aCkgewogICAgICAgICAgcmV0dXJuIHBhcmVudC5jcmVhdGUocmVjdXJzaXZlOiB0cnVlKS50aGVuKChfKSB7CiAgICAgICAgICAgIHJldHVybiBjcmVhdGUoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY3JlYXRlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgICAgX0lPU2VydmljZS5kaXJlY3RvcnlDcmVhdGUsIFtudWxsLCBfcmF3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgICB0aHJvdyBfZXhjZXB0aW9uT3JFcnJvckZyb21SZXNwb25zZShyZXNwb25zZSwgIkNyZWF0aW9uIGZhaWxlZCIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIGNyZWF0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgaWYgKGV4aXN0c1N5bmMoKSkgcmV0dXJuOwogICAgICBpZiAocGF0aCAhPSBwYXJlbnQucGF0aCkgewogICAgICAgIHBhcmVudC5jcmVhdGVTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIHZhciByZXN1bHQgPSBfY3JlYXRlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJDcmVhdGlvbiBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgc3RhdGljIERpcmVjdG9yeSBnZXQgc3lzdGVtVGVtcCA9PgogICAgICBuZXcgRGlyZWN0b3J5KF9zeXN0ZW1UZW1wKF9OYW1lc3BhY2UuX25hbWVzcGFjZSkpOwoKICBGdXR1cmU8RGlyZWN0b3J5PiBjcmVhdGVUZW1wKFtTdHJpbmcgcHJlZml4XSkgewogICAgcHJlZml4ID8/PSAnJzsKICAgIGlmIChwYXRoID09ICcnKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJEaXJlY3RvcnkuY3JlYXRlVGVtcCBjYWxsZWQgd2l0aCBhbiBlbXB0eSBwYXRoLiAiCiAgICAgICAgICAiVG8gdXNlIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnksIHVzZSBEaXJlY3Rvcnkuc3lzdGVtVGVtcCIpOwogICAgfQogICAgU3RyaW5nIGZ1bGxQcmVmaXg7CiAgICAvLyBGSVhNRShia29ueWkpOiBoZXJlIHdlJ3JlIHVzaW5nIGBwYXRoYCBkaXJlY3RseSwgd2hpY2ggbWlnaHQgY2F1c2UKICAgIC8vIGlzc3VlcyBpZiBpdCBpcyBub3QgVVRGLTggZW5jb2RlZC4KICAgIGlmIChwYXRoLmVuZHNXaXRoKCcvJykgfHwgKFBsYXRmb3JtLmlzV2luZG93cyAmJiBwYXRoLmVuZHNXaXRoKCdcXCcpKSkgewogICAgICBmdWxsUHJlZml4ID0gIiRwYXRoJHByZWZpeCI7CiAgICB9IGVsc2UgewogICAgICBmdWxsUHJlZml4ID0gIiRwYXRoJHtQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yfSRwcmVmaXgiOwogICAgfQogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5kaXJlY3RvcnlDcmVhdGVUZW1wLAogICAgICAgIFtudWxsLCBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShmdWxsUHJlZml4KV0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25PckVycm9yRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNyZWF0aW9uIG9mIHRlbXBvcmFyeSBkaXJlY3RvcnkgZmFpbGVkIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkocmVzcG9uc2UpOwogICAgfSk7CiAgfQoKICBEaXJlY3RvcnkgY3JlYXRlVGVtcFN5bmMoW1N0cmluZyBwcmVmaXhdKSB7CiAgICBwcmVmaXggPz89ICcnOwogICAgaWYgKHBhdGggPT0gJycpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkRpcmVjdG9yeS5jcmVhdGVUZW1wIGNhbGxlZCB3aXRoIGFuIGVtcHR5IHBhdGguICIKICAgICAgICAgICJUbyB1c2UgdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeSwgdXNlIERpcmVjdG9yeS5zeXN0ZW1UZW1wIik7CiAgICB9CiAgICBTdHJpbmcgZnVsbFByZWZpeDsKICAgIC8vIEZJWE1FKGJrb255aSk6IGhlcmUgd2UncmUgdXNpbmcgYHBhdGhgIGRpcmVjdGx5LCB3aGljaCBtaWdodCBjYXVzZQogICAgLy8gaXNzdWVzIGlmIGl0IGlzIG5vdCBVVEYtOCBlbmNvZGVkLgogICAgaWYgKHBhdGguZW5kc1dpdGgoJy8nKSB8fCAoUGxhdGZvcm0uaXNXaW5kb3dzICYmIHBhdGguZW5kc1dpdGgoJ1xcJykpKSB7CiAgICAgIGZ1bGxQcmVmaXggPSAiJHBhdGgkcHJlZml4IjsKICAgIH0gZWxzZSB7CiAgICAgIGZ1bGxQcmVmaXggPSAiJHBhdGgke1BsYXRmb3JtLnBhdGhTZXBhcmF0b3J9JHByZWZpeCI7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX2NyZWF0ZVRlbXAoCiAgICAgICAgX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShmdWxsUHJlZml4KSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiQ3JlYXRpb24gb2YgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmYWlsZWQiLCBmdWxsUHJlZml4LCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkocmVzdWx0KTsKICB9CgogIEZ1dHVyZTxEaXJlY3Rvcnk+IF9kZWxldGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgICAgICBfSU9TZXJ2aWNlLmRpcmVjdG9yeURlbGV0ZSwgW251bGwsIF9yYXdQYXRoLCByZWN1cnNpdmVdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uT3JFcnJvckZyb21SZXNwb25zZShyZXNwb25zZSwgIkRlbGV0aW9uIGZhaWxlZCIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIF9kZWxldGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICB2YXIgcmVzdWx0ID0gX2RlbGV0ZU5hdGl2ZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCByZWN1cnNpdmUpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJEZWxldGlvbiBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgRnV0dXJlPERpcmVjdG9yeT4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmRpcmVjdG9yeVJlbmFtZSwgW251bGwsIF9yYXdQYXRoLCBuZXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UsICJSZW5hbWUgZmFpbGVkIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkobmV3UGF0aCk7CiAgICB9KTsKICB9CgogIERpcmVjdG9yeSByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKSB7CiAgICBpZiAobmV3UGF0aCBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3JlbmFtZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBuZXdQYXRoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiUmVuYW1lIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gbmV3IERpcmVjdG9yeShuZXdQYXRoKTsKICB9CgogIFN0cmVhbTxGaWxlU3lzdGVtRW50aXR5PiBsaXN0KAogICAgICB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlLCBib29sIGZvbGxvd0xpbmtzOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXIoCiAgICAgICAgICAgIC8vIEZJWE1FKGJrb255aSk6IGhlcmUgd2UncmUgdXNpbmcgYHBhdGhgIGRpcmVjdGx5LCB3aGljaCBtaWdodCBjYXVzZSBpc3N1ZXMKICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IFVURi04IGVuY29kZWQuCiAgICAgICAgICAgIEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KAogICAgICAgICAgICAgICAgRmlsZVN5c3RlbUVudGl0eS5fZW5zdXJlVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhwYXRoKSksCiAgICAgICAgICAgIHJlY3Vyc2l2ZSwKICAgICAgICAgICAgZm9sbG93TGlua3MpCiAgICAgICAgLnN0cmVhbTsKICB9CgogIExpc3Q8RmlsZVN5c3RlbUVudGl0eT4gbGlzdFN5bmMoCiAgICAgIHtib29sIHJlY3Vyc2l2ZTogZmFsc2UsIGJvb2wgZm9sbG93TGlua3M6IHRydWV9KSB7CiAgICBpZiAocmVjdXJzaXZlIGlzISBib29sIHx8IGZvbGxvd0xpbmtzIGlzISBib29sKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gPEZpbGVTeXN0ZW1FbnRpdHk+W107CiAgICBfZmlsbFdpdGhEaXJlY3RvcnlMaXN0aW5nKAogICAgICAgIF9OYW1lc3BhY2UuX25hbWVzcGFjZSwKICAgICAgICByZXN1bHQsCiAgICAgICAgLy8gRklYTUUoYmtvbnlpKTogaGVyZSB3ZSdyZSB1c2luZyBgcGF0aGAgZGlyZWN0bHksIHdoaWNoIG1pZ2h0IGNhdXNlIGlzc3VlcwogICAgICAgIC8vIGlmIGl0IGlzIG5vdCBVVEYtOCBlbmNvZGVkLgogICAgICAgIEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KAogICAgICAgICAgICBGaWxlU3lzdGVtRW50aXR5Ll9lbnN1cmVUcmFpbGluZ1BhdGhTZXBhcmF0b3JzKHBhdGgpKSwKICAgICAgICByZWN1cnNpdmUsCiAgICAgICAgZm9sbG93TGlua3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJEaXJlY3Rvcnk6ICckcGF0aCciOwoKICBib29sIF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpID0+CiAgICAgIHJlc3BvbnNlIGlzIExpc3QgJiYgcmVzcG9uc2VbMF0gIT0gX3N1Y2Nlc3NSZXNwb25zZTsKCiAgX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UsIFN0cmluZyBtZXNzYWdlKSB7CiAgICBhc3NlcnQoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpOwogICAgc3dpdGNoIChyZXNwb25zZVtfZXJyb3JSZXNwb25zZUVycm9yVHlwZV0pIHsKICAgICAgY2FzZSBfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2U6CiAgICAgICAgcmV0dXJuIG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICAgIGNhc2UgX29zRXJyb3JSZXNwb25zZToKICAgICAgICB2YXIgZXJyID0gbmV3IE9TRXJyb3IocmVzcG9uc2VbX29zRXJyb3JSZXNwb25zZU1lc3NhZ2VdLAogICAgICAgICAgICByZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlRXJyb3JDb2RlXSk7CiAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKG1lc3NhZ2UsIHBhdGgsIGVycik7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG5ldyBFeGNlcHRpb24oIlVua25vd24gZXJyb3IiKTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wcyB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMoaW50IHBvaW50ZXIpOwoKICBpbnQgZ2V0UG9pbnRlcigpOwp9CgpjbGFzcyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXIgewogIHN0YXRpYyBjb25zdCBpbnQgbGlzdEZpbGUgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgbGlzdERpcmVjdG9yeSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBsaXN0TGluayA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBsaXN0RXJyb3IgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgbGlzdERvbmUgPSA0OwoKICBzdGF0aWMgY29uc3QgaW50IHJlc3BvbnNlVHlwZSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCByZXNwb25zZVBhdGggPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgcmVzcG9uc2VDb21wbGV0ZSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCByZXNwb25zZUVycm9yID0gMjsKCiAgZmluYWwgVWludDhMaXN0IHJhd1BhdGg7CiAgZmluYWwgYm9vbCByZWN1cnNpdmU7CiAgZmluYWwgYm9vbCBmb2xsb3dMaW5rczsKCiAgU3RyZWFtQ29udHJvbGxlcjxGaWxlU3lzdGVtRW50aXR5PiBjb250cm9sbGVyOwogIGJvb2wgY2FuY2VsZWQgPSBmYWxzZTsKICBib29sIG5leHRSdW5uaW5nID0gZmFsc2U7CiAgYm9vbCBjbG9zZWQgPSBmYWxzZTsKICBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMgX29wczsKICBDb21wbGV0ZXIgY2xvc2VDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CgogIF9Bc3luY0RpcmVjdG9yeUxpc3Rlcih0aGlzLnJhd1BhdGgsIHRoaXMucmVjdXJzaXZlLCB0aGlzLmZvbGxvd0xpbmtzKSB7CiAgICBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8RmlsZVN5c3RlbUVudGl0eT4oCiAgICAgICAgb25MaXN0ZW46IG9uTGlzdGVuLCBvblJlc3VtZTogb25SZXN1bWUsIG9uQ2FuY2VsOiBvbkNhbmNlbCwgc3luYzogdHJ1ZSk7CiAgfQoKICAvLyBXQVJOSU5HOgogIC8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIG5hdGl2ZQogIC8vIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGFzeW5jIGRpcmVjdG9yeSBsaXN0ZXIgb3BlcmF0aW9ucy4gSXQgc2hvdWxkCiAgLy8gb25seSBiZSBjYWxsZWQgdG8gcGFzcyB0aGUgcG9pbnRlciB0byB0aGUgSU8gU2VydmljZSwgd2hpY2ggd2lsbCBkZWNyZW1lbnQKICAvLyB0aGUgcmVmZXJlbmNlIGNvdW50IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdC4KICBpbnQgX3BvaW50ZXIoKSB7CiAgICByZXR1cm4gKF9vcHMgPT0gbnVsbCkgPyBudWxsIDogX29wcy5nZXRQb2ludGVyKCk7CiAgfQoKICBTdHJlYW08RmlsZVN5c3RlbUVudGl0eT4gZ2V0IHN0cmVhbSA9PiBjb250cm9sbGVyLnN0cmVhbTsKCiAgdm9pZCBvbkxpc3RlbigpIHsKICAgIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5kaXJlY3RvcnlMaXN0U3RhcnQsCiAgICAgICAgW251bGwsIHJhd1BhdGgsIHJlY3Vyc2l2ZSwgZm9sbG93TGlua3NdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2UgaXMgaW50KSB7CiAgICAgICAgX29wcyA9IG5ldyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMocmVzcG9uc2UpOwogICAgICAgIG5leHQoKTsKICAgICAgfSBlbHNlIGlmIChyZXNwb25zZSBpcyBFcnJvcikgewogICAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IocmVzcG9uc2UsIHJlc3BvbnNlLnN0YWNrVHJhY2UpOwogICAgICAgIGNsb3NlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZXJyb3IocmVzcG9uc2UpOwogICAgICAgIGNsb3NlKCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBvblJlc3VtZSgpIHsKICAgIGlmICghbmV4dFJ1bm5pbmcpIHsKICAgICAgbmV4dCgpOwogICAgfQogIH0KCiAgRnV0dXJlIG9uQ2FuY2VsKCkgewogICAgY2FuY2VsZWQgPSB0cnVlOwogICAgLy8gSWYgd2UgYXJlIGFjdGl2ZSwgYnV0IG5vdCByZXF1ZXN0aW5nLCBjbG9zZS4KICAgIGlmICghbmV4dFJ1bm5pbmcpIHsKICAgICAgY2xvc2UoKTsKICAgIH0KCiAgICByZXR1cm4gY2xvc2VDb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgdm9pZCBuZXh0KCkgewogICAgaWYgKGNhbmNlbGVkKSB7CiAgICAgIGNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChjb250cm9sbGVyLmlzUGF1c2VkIHx8IG5leHRSdW5uaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBwb2ludGVyID0gX3BvaW50ZXIoKTsKICAgIGlmIChwb2ludGVyID09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgbmV4dFJ1bm5pbmcgPSB0cnVlOwogICAgX0lPU2VydmljZS5fZGlzcGF0Y2goX0lPU2VydmljZS5kaXJlY3RvcnlMaXN0TmV4dCwgW3BvaW50ZXJdKQogICAgICAgIC50aGVuKChyZXN1bHQpIHsKICAgICAgbmV4dFJ1bm5pbmcgPSBmYWxzZTsKICAgICAgaWYgKHJlc3VsdCBpcyBMaXN0KSB7CiAgICAgICAgbmV4dCgpOwogICAgICAgIGFzc2VydChyZXN1bHQubGVuZ3RoICUgMiA9PSAwKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgYXNzZXJ0KGkgJSAyID09IDApOwogICAgICAgICAgc3dpdGNoIChyZXN1bHRbaSsrXSkgewogICAgICAgICAgICBjYXNlIGxpc3RGaWxlOgogICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWRkKG5ldyBGaWxlLmZyb21SYXdQYXRoKHJlc3VsdFtpXSkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGxpc3REaXJlY3Rvcnk6CiAgICAgICAgICAgICAgY29udHJvbGxlci5hZGQobmV3IERpcmVjdG9yeS5mcm9tUmF3UGF0aChyZXN1bHRbaV0pKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBsaXN0TGluazoKICAgICAgICAgICAgICBjb250cm9sbGVyLmFkZChuZXcgTGluay5mcm9tUmF3UGF0aChyZXN1bHRbaV0pKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBsaXN0RXJyb3I6CiAgICAgICAgICAgICAgZXJyb3IocmVzdWx0W2ldKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBsaXN0RG9uZToKICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb250cm9sbGVyLmFkZEVycm9yKG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciIpKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIF9jbGVhbnVwKCkgewogICAgY29udHJvbGxlci5jbG9zZSgpOwogICAgY2xvc2VDb21wbGV0ZXIuY29tcGxldGUoKTsKICAgIF9vcHMgPSBudWxsOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChjbG9zZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG5leHRSdW5uaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNsb3NlZCA9IHRydWU7CgogICAgdmFyIHBvaW50ZXIgPSBfcG9pbnRlcigpOwogICAgaWYgKHBvaW50ZXIgPT0gbnVsbCkgewogICAgICBfY2xlYW51cCgpOwogICAgfSBlbHNlIHsKICAgICAgX0lPU2VydmljZS5fZGlzcGF0Y2goX0lPU2VydmljZS5kaXJlY3RvcnlMaXN0U3RvcCwgW3BvaW50ZXJdKQogICAgICAgICAgLndoZW5Db21wbGV0ZShfY2xlYW51cCk7CiAgICB9CiAgfQoKICB2b2lkIGVycm9yKG1lc3NhZ2UpIHsKICAgIHZhciBlcnJvclR5cGUgPSBtZXNzYWdlW3Jlc3BvbnNlRXJyb3JdW19lcnJvclJlc3BvbnNlRXJyb3JUeXBlXTsKICAgIGlmIChlcnJvclR5cGUgPT0gX2lsbGVnYWxBcmd1bWVudFJlc3BvbnNlKSB7CiAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IobmV3IEFyZ3VtZW50RXJyb3IoKSk7CiAgICB9IGVsc2UgaWYgKGVycm9yVHlwZSA9PSBfb3NFcnJvclJlc3BvbnNlKSB7CiAgICAgIHZhciByZXNwb25zZUVycm9ySW5mbyA9IG1lc3NhZ2VbcmVzcG9uc2VFcnJvcl07CiAgICAgIHZhciBlcnIgPSBuZXcgT1NFcnJvcihyZXNwb25zZUVycm9ySW5mb1tfb3NFcnJvclJlc3BvbnNlTWVzc2FnZV0sCiAgICAgICAgICByZXNwb25zZUVycm9ySW5mb1tfb3NFcnJvclJlc3BvbnNlRXJyb3JDb2RlXSk7CiAgICAgIHZhciBlcnJvclBhdGggPSBtZXNzYWdlW3Jlc3BvbnNlUGF0aF07CiAgICAgIGlmIChlcnJvclBhdGggPT0gbnVsbCkgewogICAgICAgIGVycm9yUGF0aCA9IHV0ZjguZGVjb2RlKHJhd1BhdGgsIGFsbG93TWFsZm9ybWVkOiB0cnVlKTsKICAgICAgfSBlbHNlIGlmIChlcnJvclBhdGggaXMgVWludDhMaXN0KSB7CiAgICAgICAgZXJyb3JQYXRoID0gdXRmOC5kZWNvZGUobWVzc2FnZVtyZXNwb25zZVBhdGhdLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSk7CiAgICAgIH0KICAgICAgY29udHJvbGxlci5hZGRFcnJvcigKICAgICAgICAgIG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJEaXJlY3RvcnkgbGlzdGluZyBmYWlsZWQiLCBlcnJvclBhdGgsIGVycikpOwogICAgfSBlbHNlIHsKICAgICAgY29udHJvbGxlci5hZGRFcnJvcihuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3IiKSk7CiAgICB9CiAgfQp9CoHBAE5OPAERAUEQFgEcLhI1BAEuGzkGRT4EARwBMkhIPEREIUAbQDIcIxkWGQEhMh0lQwYjBAEiGB5NDyAkTUseOyE2DU8ZBiYiQAY/Lx0lRQYEARAkBAEaKUgoSAgcCAQBFjsdRAYaBAE6ATYVJiEjOx0OERsKCg0rSipMChUKBgQBLRUgISwIBjsdRgYEASU5ATITFlFJBhdKKk0jDTwGSE0oLUEIJggEAS4TFlFJBhdKKk0jDTwGHksdJUkGIgQBNylFGyhKCBMIBAEuTB1GBgQBLSlRKEgIJQgEASkeIQZEHUQGIwQBITkmWSsrRxcZEQQBIzk2IQYnHx8QVScnQxMWEwQBLQElOwE8KDElJB1BMjwPLwYEAgEqOgEUAgEeISYhIiEBJSUpJgEbGBoBMRkcFyEuAUo5UQQBDktNUDYTNgQBPAEUQEMdNxAmPBEPGREICAQBFBgOBgQBFhU0GA8GASIEARAUDw4GLg4GHhsOBhhCGRscECgyHiEbPxUgRBUbPxUcIBUbHxYMCg9ICAgEARQYHxEEARESDgYXDgYTAR4bEg1EIwYEARhFMTAwNkg5LR9AK04IG1ANRgYEAgEbZGFydDppby9kaXJlY3RvcnlfaW1wbC5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9lbWJlZGRlcl9jb25maWcuZGFydIUoLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8vLyBFbWJlZGRlci1zcGVjaWZpYywgZmluZS1ncmFpbmVkIGRhcnQ6aW8gY29uZmlndXJhdGlvbi4KLy8vCi8vLyBUaGlzIGNsYXNzIGNvbnRhaW5zIHBlci1Jc29sYXRlIGZsYWdzIHRoYXQgYW4gZW1iZWRkZXIgY2FuIHNldCB0byBwdXQKLy8vIGZpbmUtZ3JhaW5lZCBsaW1pdGF0aW9ucyBvbiB3aGF0IHByb2Nlc3MtdmlzaWJsZSBvcGVyYXRpb25zIElzb2xhdGVzIGFyZQovLy8gcGVybWl0dGVkIHRvIHVzZSAoZS5nLiBleGl0KCkpLiBCeSBkZWZhdWx0LCB0aGUgd2hvbGUgZGFydDppbyBBUEkgaXMKLy8vIGVuYWJsZWQuIFdoZW4gYSBkaXNhbGxvd2VkIG9wZXJhdGlvbiBpcyBhdHRlbXB0ZWQsIGFuIGBVbnN1cHBvcnRlZEVycm9yYCBpcwovLy8gdGhyb3duLgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCmFic3RyYWN0IGNsYXNzIF9FbWJlZGRlckNvbmZpZyB7CiAgLy8vIFRoZSBJc29sYXRlIG1heSBzZXQgRGlyZWN0b3J5LmN1cnJlbnQuCiAgc3RhdGljIGJvb2wgX21heUNoZGlyID0gdHJ1ZTsKCiAgLy8vIFRoZSBJc29sYXRlIG1heSBjYWxsIGV4aXQoKS4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGJvb2wgX21heUV4aXQgPSB0cnVlOwoKICAvLyBUaGUgSXNvbGF0ZSBtYXkgc2V0IFN0ZGluLmVjaG9Nb2RlLgogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBzdGF0aWMgYm9vbCBfbWF5U2V0RWNob01vZGUgPSB0cnVlOwoKICAvLyBUaGUgSXNvbGF0ZSBtYXkgc2V0IFN0ZGluLmxpbmVNb2RlLgogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBzdGF0aWMgYm9vbCBfbWF5U2V0TGluZU1vZGUgPSB0cnVlOwoKICAvLy8gVGhlIElzb2xhdGUgbWF5IGNhbGwgc2xlZXAoKS4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgc3RhdGljIGJvb2wgX21heVNsZWVwID0gdHJ1ZTsKCiAgLy8gVE9ETyh6cmEpOiBDb25zaWRlciBhZGRpbmc6CiAgLy8gLSBhbiBvcHRpb24gdG8gZGlzYWxsb3cgbW9kaWZ5aW5nIFNlY3VyaXR5Q29udGV4dC5kZWZhdWx0Q29udGV4dAogIC8vIC0gYW4gb3B0aW9uIHRvIGRpc2FsbG93IGNsb3Npbmcgc3Rkb3V0IGFuZCBzdGRlcnIuCn0KKABOTjwBEQE7BEpNSVAMGiEtIAEjHB8BKRwmASkcJgEkHCABIUY4AgEcZGFydDppby9lbWJlZGRlcl9jb25maWcuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vZXZlbnRoYW5kbGVyLmRhcnSBUS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgpjbGFzcyBfRXZlbnRIYW5kbGVyIHsKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfc2VuZERhdGEoT2JqZWN0IHNlbmRlciwgU2VuZFBvcnQgc2VuZFBvcnQsIGludCBkYXRhKTsKfQoLAE5OPAERARZOAgEZZGFydDppby9ldmVudGhhbmRsZXIuZGFydDdvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL2V2ZW50aGFuZGxlcl9wYXRjaC5kYXJ0geYvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIF9FdmVudEhhbmRsZXIgewogIEBwYXRjaAogIHN0YXRpYyB2b2lkIF9zZW5kRGF0YShPYmplY3Qgc2VuZGVyLCBTZW5kUG9ydCBzZW5kUG9ydCwgaW50IGRhdGEpCiAgICAgIG5hdGl2ZSAiRXZlbnRIYW5kbGVyX1NlbmREYXRhIjsKCiAgc3RhdGljIGludCBfdGltZXJNaWxsaXNlY29uZENsb2NrKCkKICAgICAgbmF0aXZlICJFdmVudEhhbmRsZXJfVGltZXJNaWxsaXNlY29uZENsb2NrIjsKfQoRAE5OPAEgAQcWCUQmASYzAgElZGFydDppby1wYXRjaC9ldmVudGhhbmRsZXJfcGF0Y2guZGFydChvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vZmlsZS5kYXJ0wACFAS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogVGhlIG1vZGVzIGluIHdoaWNoIGEgRmlsZSBjYW4gYmUgb3BlbmVkLgogKi8KY2xhc3MgRmlsZU1vZGUgewogIC8vLyBUaGUgbW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgb25seSBmb3IgcmVhZGluZy4KICBzdGF0aWMgY29uc3QgcmVhZCA9IGNvbnN0IEZpbGVNb2RlLl9pbnRlcm5hbCgwKTsKICBARGVwcmVjYXRlZCgiVXNlIHJlYWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFQUQgPSByZWFkOwoKICAvLy8gTW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIFRoZSBmaWxlIGlzCiAgLy8vIG92ZXJ3cml0dGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90CiAgLy8vIGFscmVhZHkgZXhpc3QuCiAgc3RhdGljIGNvbnN0IHdyaXRlID0gY29uc3QgRmlsZU1vZGUuX2ludGVybmFsKDEpOwogIEBEZXByZWNhdGVkKCJVc2Ugd3JpdGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdSSVRFID0gd3JpdGU7CgogIC8vLyBNb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUKICAvLy8gZW5kIG9mIGl0LiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCiAgc3RhdGljIGNvbnN0IGFwcGVuZCA9IGNvbnN0IEZpbGVNb2RlLl9pbnRlcm5hbCgyKTsKICBARGVwcmVjYXRlZCgiVXNlIGFwcGVuZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQVBQRU5EID0gYXBwZW5kOwoKICAvLy8gTW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHdyaXRpbmcgKm9ubHkqLiBUaGUgZmlsZSBpcwogIC8vLyBvdmVyd3JpdHRlbiBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdAogIC8vLyBhbHJlYWR5IGV4aXN0LgogIHN0YXRpYyBjb25zdCB3cml0ZU9ubHkgPSBjb25zdCBGaWxlTW9kZS5faW50ZXJuYWwoMyk7CiAgQERlcHJlY2F0ZWQoIlVzZSB3cml0ZU9ubHkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdSSVRFX09OTFkgPSB3cml0ZU9ubHk7CgogIC8vLyBNb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGluZyAqb25seSogdG8gdGhlCiAgLy8vIGVuZCBvZiBpdC4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogIHN0YXRpYyBjb25zdCB3cml0ZU9ubHlBcHBlbmQgPSBjb25zdCBGaWxlTW9kZS5faW50ZXJuYWwoNCk7CiAgQERlcHJlY2F0ZWQoIlVzZSB3cml0ZU9ubHlBcHBlbmQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdSSVRFX09OTFlfQVBQRU5EID0gd3JpdGVPbmx5QXBwZW5kOwoKICBmaW5hbCBpbnQgX21vZGU7CgogIGNvbnN0IEZpbGVNb2RlLl9pbnRlcm5hbCh0aGlzLl9tb2RlKTsKfQoKLy8vIFRoZSBtb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBvbmx5IGZvciByZWFkaW5nLgpARGVwcmVjYXRlZCgiVXNlIEZpbGVNb2RlLnJlYWQgaW5zdGVhZCIpCmNvbnN0IFJFQUQgPSBGaWxlTW9kZS5yZWFkOwoKLy8vIFRoZSBtb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4gVGhlIGZpbGUgaXMKLy8vIG92ZXJ3cml0dGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90Ci8vLyBhbHJlYWR5IGV4aXN0LgpARGVwcmVjYXRlZCgiVXNlIEZpbGVNb2RlLndyaXRlIGluc3RlYWQiKQpjb25zdCBXUklURSA9IEZpbGVNb2RlLndyaXRlOwoKLy8vIFRoZSBtb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUKLy8vIGVuZCBvZiBpdC4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgpARGVwcmVjYXRlZCgiVXNlIEZpbGVNb2RlLmFwcGVuZCBpbnN0ZWFkIikKY29uc3QgQVBQRU5EID0gRmlsZU1vZGUuYXBwZW5kOwoKLy8vIE1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIGZvciB3cml0aW5nICpvbmx5Ki4gVGhlIGZpbGUgaXMKLy8vIG92ZXJ3cml0dGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90Ci8vLyBhbHJlYWR5IGV4aXN0LgpARGVwcmVjYXRlZCgiVXNlIEZpbGVNb2RlLndyaXRlT25seSBpbnN0ZWFkIikKY29uc3QgV1JJVEVfT05MWSA9IEZpbGVNb2RlLndyaXRlT25seTsKCi8vLyBNb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGluZyAqb25seSogdG8gdGhlCi8vLyBlbmQgb2YgaXQuIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KQERlcHJlY2F0ZWQoIlVzZSBGaWxlTW9kZS53cml0ZU9ubHlBcHBlbmQgaW5zdGVhZCIpCmNvbnN0IFdSSVRFX09OTFlfQVBQRU5EID0gRmlsZU1vZGUud3JpdGVPbmx5QXBwZW5kOwoKLy8vIFR5cGUgb2YgbG9jayB3aGVuIHJlcXVlc3RpbmcgYSBsb2NrIG9uIGEgZmlsZS4KY2xhc3MgRmlsZUxvY2sgewogIC8vLyBTaGFyZWQgZmlsZSBsb2NrLgogIHN0YXRpYyBjb25zdCBzaGFyZWQgPSBjb25zdCBGaWxlTG9jay5faW50ZXJuYWwoMSk7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaGFyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFNIQVJFRCA9IHNoYXJlZDsKCiAgLy8vIEV4Y2x1c2l2ZSBmaWxlIGxvY2suCiAgc3RhdGljIGNvbnN0IGV4Y2x1c2l2ZSA9IGNvbnN0IEZpbGVMb2NrLl9pbnRlcm5hbCgyKTsKICBARGVwcmVjYXRlZCgiVXNlIGV4Y2x1c2l2ZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgRVhDTFVTSVZFID0gZXhjbHVzaXZlOwoKICAvLy8gQmxvY2tpbmcgc2hhcmVkIGZpbGUgbG9jay4KICBzdGF0aWMgY29uc3QgYmxvY2tpbmdTaGFyZWQgPSBjb25zdCBGaWxlTG9jay5faW50ZXJuYWwoMyk7CiAgQERlcHJlY2F0ZWQoIlVzZSBibG9ja2luZ1NoYXJlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQkxPQ0tJTkdfU0hBUkVEID0gYmxvY2tpbmdTaGFyZWQ7CgogIC8vLyBCbG9ja2luZyBleGNsdXNpdmUgZmlsZSBsb2NrLgogIHN0YXRpYyBjb25zdCBibG9ja2luZ0V4Y2x1c2l2ZSA9IGNvbnN0IEZpbGVMb2NrLl9pbnRlcm5hbCg0KTsKICBARGVwcmVjYXRlZCgiVXNlIGJsb2NraW5nRXhjbHVzaXZlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBCTE9DS0lOR19FWENMVVNJVkUgPSBibG9ja2luZ0V4Y2x1c2l2ZTsKCiAgZmluYWwgaW50IF90eXBlOwoKICBjb25zdCBGaWxlTG9jay5faW50ZXJuYWwodGhpcy5fdHlwZSk7Cn0KCi8qKgogKiBBIHJlZmVyZW5jZSB0byBhIGZpbGUgb24gdGhlIGZpbGUgc3lzdGVtLgogKgogKiBBIEZpbGUgaW5zdGFuY2UgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgYSBbcGF0aF0gb24gd2hpY2ggb3BlcmF0aW9ucyBjYW4KICogYmUgcGVyZm9ybWVkLgogKiBZb3UgY2FuIGdldCB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB1c2luZyB0aGUgZ2V0dGVyIFtwYXJlbnRdLAogKiBhIHByb3BlcnR5IGluaGVyaXRlZCBmcm9tIFtGaWxlU3lzdGVtRW50aXR5XS4KICoKICogQ3JlYXRlIGEgbmV3IEZpbGUgb2JqZWN0IHdpdGggYSBwYXRobmFtZSB0byBhY2Nlc3MgdGhlIHNwZWNpZmllZCBmaWxlIG9uIHRoZQogKiBmaWxlIHN5c3RlbSBmcm9tIHlvdXIgcHJvZ3JhbS4KICoKICogICAgIHZhciBteUZpbGUgPSBuZXcgRmlsZSgnZmlsZS50eHQnKTsKICoKICogVGhlIEZpbGUgY2xhc3MgY29udGFpbnMgbWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIGZpbGVzIGFuZCB0aGVpciBjb250ZW50cy4KICogVXNpbmcgbWV0aG9kcyBpbiB0aGlzIGNsYXNzLCB5b3UgY2FuIG9wZW4gYW5kIGNsb3NlIGZpbGVzLCByZWFkIHRvIGFuZCB3cml0ZQogKiBmcm9tIHRoZW0sIGNyZWF0ZSBhbmQgZGVsZXRlIHRoZW0sIGFuZCBjaGVjayBmb3IgdGhlaXIgZXhpc3RlbmNlLgogKgogKiBXaGVuIHJlYWRpbmcgb3Igd3JpdGluZyBhIGZpbGUsIHlvdSBjYW4gdXNlIHN0cmVhbXMgKHdpdGggW29wZW5SZWFkXSksCiAqIHJhbmRvbSBhY2Nlc3Mgb3BlcmF0aW9ucyAod2l0aCBbb3Blbl0pLAogKiBvciBjb252ZW5pZW5jZSBtZXRob2RzIHN1Y2ggYXMgW3JlYWRBc1N0cmluZ10sCiAqCiAqIE1vc3QgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIG9jY3VyIGluIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcGFpcnMsCiAqIGZvciBleGFtcGxlLCBbcmVhZEFzU3RyaW5nXSBhbmQgW3JlYWRBc1N0cmluZ1N5bmNdLgogKiBVbmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyByZWFzb24gZm9yIHVzaW5nIHRoZSBzeW5jaHJvbm91cyB2ZXJzaW9uCiAqIG9mIGEgbWV0aG9kLCBwcmVmZXIgdGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9uIHRvIGF2b2lkIGJsb2NraW5nIHlvdXIgcHJvZ3JhbS4KICoKICogIyMgSWYgcGF0aCBpcyBhIGxpbmsKICoKICogSWYgW3BhdGhdIGlzIGEgc3ltYm9saWMgbGluaywgcmF0aGVyIHRoYW4gYSBmaWxlLAogKiB0aGVuIHRoZSBtZXRob2RzIG9mIEZpbGUgb3BlcmF0ZSBvbiB0aGUgdWx0aW1hdGUgdGFyZ2V0IG9mIHRoZQogKiBsaW5rLCBleGNlcHQgZm9yIFtkZWxldGVdIGFuZCBbZGVsZXRlU3luY10sIHdoaWNoIG9wZXJhdGUgb24KICogdGhlIGxpbmsuCiAqCiAqICMjIFJlYWQgZnJvbSBhIGZpbGUKICoKICogVGhlIGZvbGxvd2luZyBjb2RlIHNhbXBsZSByZWFkcyB0aGUgZW50aXJlIGNvbnRlbnRzIGZyb20gYSBmaWxlIGFzIGEgc3RyaW5nCiAqIHVzaW5nIHRoZSBhc3luY2hyb25vdXMgW3JlYWRBc1N0cmluZ10gbWV0aG9kOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIG5ldyBGaWxlKCdmaWxlLnR4dCcpLnJlYWRBc1N0cmluZygpLnRoZW4oKFN0cmluZyBjb250ZW50cykgewogKiAgICAgICAgIHByaW50KGNvbnRlbnRzKTsKICogICAgICAgfSk7CiAqICAgICB9CiAqCiAqIEEgbW9yZSBmbGV4aWJsZSBhbmQgdXNlZnVsIHdheSB0byByZWFkIGEgZmlsZSBpcyB3aXRoIGEgW1N0cmVhbV0uCiAqIE9wZW4gdGhlIGZpbGUgd2l0aCBbb3BlblJlYWRdLCB3aGljaCByZXR1cm5zIGEgc3RyZWFtIHRoYXQKICogcHJvdmlkZXMgdGhlIGRhdGEgaW4gdGhlIGZpbGUgYXMgY2h1bmtzIG9mIGJ5dGVzLgogKiBMaXN0ZW4gdG8gdGhlIHN0cmVhbSBmb3IgZGF0YSBhbmQgcHJvY2VzcyBhcyBuZWVkZWQuCiAqIFlvdSBjYW4gdXNlIHZhcmlvdXMgdHJhbnNmb3JtZXJzIGluIHN1Y2Nlc3Npb24gdG8gbWFuaXB1bGF0ZSB0aGUKICogZGF0YSBpbnRvIHRoZSByZXF1aXJlZCBmb3JtYXQgb3IgdG8gcHJlcGFyZSBpdCBmb3Igb3V0cHV0LgogKgogKiBZb3UgbWlnaHQgd2FudCB0byB1c2UgYSBzdHJlYW0gdG8gcmVhZCBsYXJnZSBmaWxlcywKICogdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSB3aXRoIHRyYW5zZm9ybWVycywKICogb3IgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhbm90aGVyIEFQSSwgc3VjaCBhcyBbV2ViU29ja2V0XXMuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKiAgICAgaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwogKiAgICAgaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIGZpbmFsIGZpbGUgPSBuZXcgRmlsZSgnZmlsZS50eHQnKTsKICogICAgICAgU3RyZWFtPExpc3Q8aW50Pj4gaW5wdXRTdHJlYW0gPSBmaWxlLm9wZW5SZWFkKCk7CiAqCiAqICAgICAgIGlucHV0U3RyZWFtCiAqICAgICAgICAgLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpICAgICAgIC8vIERlY29kZSBieXRlcyB0byBVVEYtOC4KICogICAgICAgICAudHJhbnNmb3JtKG5ldyBMaW5lU3BsaXR0ZXIoKSkgLy8gQ29udmVydCBzdHJlYW0gdG8gaW5kaXZpZHVhbCBsaW5lcy4KICogICAgICAgICAubGlzdGVuKChTdHJpbmcgbGluZSkgeyAgICAgICAgLy8gUHJvY2VzcyByZXN1bHRzLgogKiAgICAgICAgICAgICBwcmludCgnJGxpbmU6ICR7bGluZS5sZW5ndGh9IGJ5dGVzJyk7CiAqICAgICAgICAgICB9LAogKiAgICAgICAgICAgb25Eb25lOiAoKSB7IHByaW50KCdGaWxlIGlzIG5vdyBjbG9zZWQuJyk7IH0sCiAqICAgICAgICAgICBvbkVycm9yOiAoZSkgeyBwcmludChlLnRvU3RyaW5nKCkpOyB9KTsKICogICAgIH0KICoKICogIyMgV3JpdGUgdG8gYSBmaWxlCiAqCiAqIFRvIHdyaXRlIGEgc3RyaW5nIHRvIGEgZmlsZSwgdXNlIHRoZSBbd3JpdGVBc1N0cmluZ10gbWV0aG9kOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgZmluYWwgZmlsZW5hbWUgPSAnZmlsZS50eHQnOwogKiAgICAgICBuZXcgRmlsZShmaWxlbmFtZSkud3JpdGVBc1N0cmluZygnc29tZSBjb250ZW50JykKICogICAgICAgICAudGhlbigoRmlsZSBmaWxlKSB7CiAqICAgICAgICAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCB0aGUgZmlsZS4KICogICAgICAgICB9KTsKICogICAgIH0KICoKICogWW91IGNhbiBhbHNvIHdyaXRlIHRvIGEgZmlsZSB1c2luZyBhIFtTdHJlYW1dLiBPcGVuIHRoZSBmaWxlIHdpdGgKICogW29wZW5Xcml0ZV0sIHdoaWNoIHJldHVybnMgYW4gW0lPU2lua10gdG8gd2hpY2ggeW91IGNhbiB3cml0ZSBkYXRhLgogKiBCZSBzdXJlIHRvIGNsb3NlIHRoZSBzaW5rIHdpdGggdGhlIFtJT1NpbmsuY2xvc2VdIG1ldGhvZC4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIHZhciBmaWxlID0gbmV3IEZpbGUoJ2ZpbGUudHh0Jyk7CiAqICAgICAgIHZhciBzaW5rID0gZmlsZS5vcGVuV3JpdGUoKTsKICogICAgICAgc2luay53cml0ZSgnRklMRSBBQ0NFU1NFRCAke25ldyBEYXRlVGltZS5ub3coKX1cbicpOwogKgogKiAgICAgICAvLyBDbG9zZSB0aGUgSU9TaW5rIHRvIGZyZWUgc3lzdGVtIHJlc291cmNlcy4KICogICAgICAgc2luay5jbG9zZSgpOwogKiAgICAgfQogKgogKiAjIyBUaGUgdXNlIG9mIEZ1dHVyZXMKICoKICogVG8gYXZvaWQgdW5pbnRlbnRpb25hbCBibG9ja2luZyBvZiB0aGUgcHJvZ3JhbSwKICogc2V2ZXJhbCBtZXRob2RzIHVzZSBhIFtGdXR1cmVdIHRvIHJldHVybiBhIHZhbHVlLiBGb3IgZXhhbXBsZSwKICogdGhlIFtsZW5ndGhdIG1ldGhvZCwgd2hpY2ggZ2V0cyB0aGUgbGVuZ3RoIG9mIGEgZmlsZSwgcmV0dXJucyBhIEZ1dHVyZS4KICogVXNlIGB0aGVuYCB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgd2hlbgogKiB0aGUgdmFsdWUgaXMgcmVhZHkuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgZmluYWwgZmlsZSA9IG5ldyBGaWxlKCdmaWxlLnR4dCcpOwogKgogKiAgICAgICBmaWxlLmxlbmd0aCgpLnRoZW4oKGxlbikgewogKiAgICAgICAgIHByaW50KGxlbik7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKiBJbiBhZGRpdGlvbiB0byBsZW5ndGgsIHRoZSBbZXhpc3RzXSwgW2xhc3RNb2RpZmllZF0sIFtzdGF0XSwgYW5kCiAqIG90aGVyIG1ldGhvZHMsIHJldHVybiBGdXR1cmVzLgogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogKiBbRGFydCBieSBFeGFtcGxlXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZGFydC1ieS1leGFtcGxlLyNmaWxlcy1kaXJlY3Rvcmllcy1hbmQtc3ltbGlua3MpCiAqICAgcHJvdmlkZXMgYWRkaXRpb25hbCB0YXNrLW9yaWVudGVkIGNvZGUgc2FtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZQogKiAgIHZhcmlvdXMgQVBJIGZyb20gdGhlIERpcmVjdG9yeSBjbGFzcyBhbmQgdGhlIHJlbGF0ZWQgW0ZpbGVdIGNsYXNzLgogKgogKiAqIFtJL08gZm9yIENvbW1hbmQtTGluZQogKiAgIEFwcHNdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI2RhcnRpby0tLWlvLWZvci1jb21tYW5kLWxpbmUtYXBwcykKICogICBhIHNlY3Rpb24gZnJvbSBfQSBUb3VyIG9mIHRoZSBEYXJ0IExpYnJhcmllc18gY292ZXJzIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICoKICogKiBbV3JpdGUgQ29tbWFuZC1MaW5lIEFwcHNdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL3R1dG9yaWFscy9jbWRsaW5lLyksCiAqICAgYSB0dXRvcmlhbCBhYm91dCB3cml0aW5nIGNvbW1hbmQtbGluZSBhcHBzLCBpbmNsdWRlcyBpbmZvcm1hdGlvbiBhYm91dAogKiAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYWJzdHJhY3QgY2xhc3MgRmlsZSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW1FbnRpdHkgewogIC8qKgogICAqIENyZWF0ZXMgYSBbRmlsZV0gb2JqZWN0LgogICAqCiAgICogSWYgW3BhdGhdIGlzIGEgcmVsYXRpdmUgcGF0aCwgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IChzZWUgW0RpcmVjdG9yeS5jdXJyZW50XSksIHdoZW4gdXNlZC4KICAgKgogICAqIElmIFtwYXRoXSBpcyBhbiBhYnNvbHV0ZSBwYXRoLCBpdCB3aWxsIGJlIGltbXVuZSB0byBjaGFuZ2VzIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgRmlsZShTdHJpbmcgcGF0aCkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9GaWxlKHBhdGgpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5jcmVhdGVGaWxlKHBhdGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIGEgRmlsZSBvYmplY3QgZnJvbSBhIFVSSS4KICAgKgogICAqIElmIFt1cmldIGNhbm5vdCByZWZlcmVuY2UgYSBmaWxlIHRoaXMgdGhyb3dzIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBmYWN0b3J5IEZpbGUuZnJvbVVyaShVcmkgdXJpKSA9PiBuZXcgRmlsZSh1cmkudG9GaWxlUGF0aCgpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIEZpbGUgb2JqZWN0IGZyb20gYSByYXcgcGF0aCwgdGhhdCBpcywgYSBzZXF1ZW5jZSBvZiBieXRlcwogICAqIGFzIHJlcHJlc2VudGVkIGJ5IHRoZSBPUy4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBGaWxlLmZyb21SYXdQYXRoKFVpbnQ4TGlzdCByYXdQYXRoKSB7CiAgICAvLyBUT0RPKGJrb255aSk6IEhhbmRsZSBvdmVycmlkZXMuCiAgICByZXR1cm4gbmV3IF9GaWxlLmZyb21SYXdQYXRoKHJhd1BhdGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIHRoZSBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aAogICAqIHRoZSBmaWxlIHdoZW4gaXQgaGFzIGJlZW4gY3JlYXRlZC4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLCB0aGUgZGVmYXVsdCwgdGhlIGZpbGUgaXMgY3JlYXRlZCBvbmx5IGlmCiAgICogYWxsIGRpcmVjdG9yaWVzIGluIHRoZSBwYXRoIGV4aXN0LiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCBhbGwKICAgKiBub24tZXhpc3RpbmcgcGF0aCBjb21wb25lbnRzIGFyZSBjcmVhdGVkLgogICAqCiAgICogRXhpc3RpbmcgZmlsZXMgYXJlIGxlZnQgdW50b3VjaGVkIGJ5IFtjcmVhdGVdLiBDYWxsaW5nIFtjcmVhdGVdIG9uIGFuCiAgICogZXhpc3RpbmcgZmlsZSBtaWdodCBmYWlsIGlmIHRoZXJlIGFyZSByZXN0cmljdGl2ZSBwZXJtaXNzaW9ucyBvbgogICAqIHRoZSBmaWxlLgogICAqCiAgICogQ29tcGxldGVzIHRoZSBmdXR1cmUgd2l0aCBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIEZ1dHVyZTxGaWxlPiBjcmVhdGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNyZWF0ZSB0aGUgZmlsZS4gRXhpc3RpbmcgZmlsZXMgYXJlIGxlZnQgdW50b3VjaGVkCiAgICogYnkgW2NyZWF0ZVN5bmNdLiBDYWxsaW5nIFtjcmVhdGVTeW5jXSBvbiBhbiBleGlzdGluZyBmaWxlIG1pZ2h0IGZhaWwKICAgKiBpZiB0aGVyZSBhcmUgcmVzdHJpY3RpdmUgcGVybWlzc2lvbnMgb24gdGhlIGZpbGUuCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwgdGhlIGRlZmF1bHQsIHRoZSBmaWxlIGlzIGNyZWF0ZWQKICAgKiBvbmx5IGlmIGFsbCBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aCBleGlzdC4KICAgKiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCBhbGwgbm9uLWV4aXN0aW5nIHBhdGggY29tcG9uZW50cyBhcmUgY3JlYXRlZC4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgY3JlYXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIC8qKgogICAqIFJlbmFtZXMgdGhpcyBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxGaWxlPmAgdGhhdCBjb21wbGV0ZXMKICAgKiB3aXRoIGEgW0ZpbGVdIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBmaWxlLgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSwgdGhhdCBmaWxlIGlzCiAgICogcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgdGhlCiAgICogb3BlcmF0aW9uIGZhaWxzIGFuZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RmlsZT4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZW5hbWVzIHRoaXMgZmlsZS4gUmV0dXJucyBhIFtGaWxlXQogICAqIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBmaWxlLgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSwgdGhhdCBmaWxlIGlzCiAgICogcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSB0aGUKICAgKiBvcGVyYXRpb24gZmFpbHMgYW5kIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgRmlsZSByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogQ29weSB0aGlzIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlPEZpbGU+YCB0aGF0IGNvbXBsZXRlcwogICAqIHdpdGggYSBbRmlsZV0gaW5zdGFuY2UgZm9yIHRoZSBjb3BpZWQgZmlsZS4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUsIHRoYXQgZmlsZSBpcwogICAqIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHRoZQogICAqIG9wZXJhdGlvbiBmYWlscyBhbmQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPEZpbGU+IGNvcHkoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNvcHkgdGhpcyBmaWxlLiBSZXR1cm5zIGEgW0ZpbGVdCiAgICogaW5zdGFuY2UgZm9yIHRoZSBjb3BpZWQgZmlsZS4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUsIHRoYXQgZmlsZSBpcwogICAqIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBkaXJlY3RvcnkgdGhlCiAgICogb3BlcmF0aW9uIGZhaWxzIGFuZCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIEZpbGUgY29weVN5bmMoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZS4gUmV0dXJucyBhIGBGdXR1cmU8aW50PmAgdGhhdAogICAqIGNvbXBsZXRlcyB3aXRoIHRoZSBsZW5ndGggaW4gYnl0ZXMuCiAgICovCiAgRnV0dXJlPGludD4gbGVuZ3RoKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZ2V0IHRoZSBsZW5ndGggb2YgdGhlIGZpbGUuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBpbnQgbGVuZ3RoU3luYygpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW0ZpbGVdIGluc3RhbmNlIHdob3NlIHBhdGggaXMgdGhlIGFic29sdXRlIHBhdGggdG8gW3RoaXNdLgogICAqCiAgICogVGhlIGFic29sdXRlIHBhdGggaXMgY29tcHV0ZWQgYnkgcHJlZml4aW5nCiAgICogYSByZWxhdGl2ZSBwYXRoIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFuZCByZXR1cm5pbmcKICAgKiBhbiBhYnNvbHV0ZSBwYXRoIHVuY2hhbmdlZC4KICAgKi8KICBGaWxlIGdldCBhYnNvbHV0ZTsKCi8qKgogKiBHZXQgdGhlIGxhc3QtYWNjZXNzZWQgdGltZSBvZiB0aGUgZmlsZS4KICoKICogUmV0dXJucyBhIGBGdXR1cmU8RGF0ZVRpbWU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlCiAqIGZpbGUgd2FzIGxhc3QgYWNjZXNzZWQsIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuCiAqCiAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogKi8KICBGdXR1cmU8RGF0ZVRpbWU+IGxhc3RBY2Nlc3NlZCgpOwoKLyoqCiAqIEdldCB0aGUgbGFzdC1hY2Nlc3NlZCB0aW1lIG9mIHRoZSBmaWxlLgogKgogKiBSZXR1cm5zIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlIGZpbGUgd2FzIGxhc3QgYWNjZXNzZWQsCiAqIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuIEJsb2NrcyB1bnRpbCB0aGUgaW5mb3JtYXRpb24gY2FuIGJlIHJldHVybmVkCiAqIG9yIGl0IGlzIGRldGVybWluZWQgdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KICoKICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAqLwogIERhdGVUaW1lIGxhc3RBY2Nlc3NlZFN5bmMoKTsKCiAgLyoqCiAgICogTW9kaWZpZXMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgYWNjZXNzZWQuCiAgICoKICAgKiBSZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgb25jZSB0aGUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIHRpbWUgY2Fubm90IGJlIHNldC4KICAgKi8KICBGdXR1cmUgc2V0TGFzdEFjY2Vzc2VkKERhdGVUaW1lIHRpbWUpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IG1vZGlmaWVzIHRoZSB0aW1lIHRoZSBmaWxlIHdhcyBsYXN0IGFjY2Vzc2VkLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSB0aW1lIGNhbm5vdCBiZSBzZXQuCiAgICovCiAgdm9pZCBzZXRMYXN0QWNjZXNzZWRTeW5jKERhdGVUaW1lIHRpbWUpOwoKLyoqCiAqIEdldCB0aGUgbGFzdC1tb2RpZmllZCB0aW1lIG9mIHRoZSBmaWxlLgogKgogKiBSZXR1cm5zIGEgYEZ1dHVyZTxEYXRlVGltZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUKICogZmlsZSB3YXMgbGFzdCBtb2RpZmllZCwgaWYgdGhlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KICoKICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAqLwogIEZ1dHVyZTxEYXRlVGltZT4gbGFzdE1vZGlmaWVkKCk7CgovKioKICogR2V0IHRoZSBsYXN0LW1vZGlmaWVkIHRpbWUgb2YgdGhlIGZpbGUuCiAqCiAqIFJldHVybnMgdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgZmlsZSB3YXMgbGFzdCBtb2RpZmllZCwKICogaWYgdGhlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4gQmxvY2tzIHVudGlsIHRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgcmV0dXJuZWQKICogb3IgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLgogKgogKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICovCiAgRGF0ZVRpbWUgbGFzdE1vZGlmaWVkU3luYygpOwoKICAvKioKICAgKiBNb2RpZmllcyB0aGUgdGltZSB0aGUgZmlsZSB3YXMgbGFzdCBtb2RpZmllZC4KICAgKgogICAqIFJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyBvbmNlIHRoZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgdGltZSBjYW5ub3QgYmUgc2V0LgogICAqLwogIEZ1dHVyZSBzZXRMYXN0TW9kaWZpZWQoRGF0ZVRpbWUgdGltZSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgbW9kaWZpZXMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQuCiAgICoKICAgKiBJZiB0aGUgYXR0cmlidXRlcyBjYW5ub3QgYmUgc2V0LCB0aHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0uCiAgICovCiAgdm9pZCBzZXRMYXN0TW9kaWZpZWRTeW5jKERhdGVUaW1lIHRpbWUpOwoKICAvKioKICAgKiBPcGVuIHRoZSBmaWxlIGZvciByYW5kb20gYWNjZXNzIG9wZXJhdGlvbnMuIFJldHVybnMgYQogICAqIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIG9wZW5lZAogICAqIHJhbmRvbSBhY2Nlc3MgZmlsZS4gW1JhbmRvbUFjY2Vzc0ZpbGVdcyBtdXN0IGJlIGNsb3NlZCB1c2luZyB0aGUKICAgKiBbUmFuZG9tQWNjZXNzRmlsZS5jbG9zZV0gbWV0aG9kLgogICAqCiAgICogRmlsZXMgY2FuIGJlIG9wZW5lZCBpbiB0aHJlZSBtb2RlczoKICAgKgogICAqIFtGaWxlTW9kZS5yZWFkXTogb3BlbiB0aGUgZmlsZSBmb3IgcmVhZGluZy4KICAgKgogICAqIFtGaWxlTW9kZS53cml0ZV06IG9wZW4gdGhlIGZpbGUgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZyBhbmQKICAgKiB0cnVuY2F0ZSB0aGUgZmlsZSB0byBsZW5ndGggemVyby4gSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgdGhlCiAgICogZmlsZSBpcyBjcmVhdGVkLgogICAqCiAgICogW0ZpbGVNb2RlLmFwcGVuZF06IHNhbWUgYXMgW0ZpbGVNb2RlLndyaXRlXSBleGNlcHQgdGhhdCB0aGUgZmlsZSBpcwogICAqIG5vdCB0cnVuY2F0ZWQuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IG9wZW4oe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLnJlYWR9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBvcGVuIHRoZSBmaWxlIGZvciByYW5kb20gYWNjZXNzIG9wZXJhdGlvbnMuIFRoZQogICAqIHJlc3VsdCBpcyBhIFtSYW5kb21BY2Nlc3NGaWxlXSBvbiB3aGljaCByYW5kb20gYWNjZXNzIG9wZXJhdGlvbnMKICAgKiBjYW4gYmUgcGVyZm9ybWVkLiBPcGVuZWQgW1JhbmRvbUFjY2Vzc0ZpbGVdcyBtdXN0IGJlIGNsb3NlZCB1c2luZwogICAqIHRoZSBbUmFuZG9tQWNjZXNzRmlsZS5jbG9zZV0gbWV0aG9kLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgaW5mb3JtYXRpb24gb24gdGhlIFttb2RlXSBhcmd1bWVudC4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIFJhbmRvbUFjY2Vzc0ZpbGUgb3BlblN5bmMoe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLnJlYWR9KTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IGluZGVwZW5kZW50IFtTdHJlYW1dIGZvciB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlLgogICAqCiAgICogSWYgW3N0YXJ0XSBpcyBwcmVzZW50LCB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgZnJvbSBieXRlLW9mZnNldCBbc3RhcnRdLgogICAqIE90aGVyd2lzZSBmcm9tIHRoZSBiZWdpbm5pbmcgKGluZGV4IDApLgogICAqCiAgICogSWYgW2VuZF0gaXMgcHJlc2VudCwgb25seSB1cCB0byBieXRlLWluZGV4IFtlbmRdIHdpbGwgYmUgcmVhZC4gT3RoZXJ3aXNlLAogICAqIHVudGlsIGVuZCBvZiBmaWxlLgogICAqCiAgICogSW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoYXQgc3lzdGVtIHJlc291cmNlcyBhcmUgZnJlZWQsIHRoZSBzdHJlYW0KICAgKiBtdXN0IGJlIHJlYWQgdG8gY29tcGxldGlvbiBvciB0aGUgc3Vic2NyaXB0aW9uIG9uIHRoZSBzdHJlYW0gbXVzdAogICAqIGJlIGNhbmNlbGxlZC4KICAgKi8KICBTdHJlYW08TGlzdDxpbnQ+PiBvcGVuUmVhZChbaW50IHN0YXJ0LCBpbnQgZW5kXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgaW5kZXBlbmRlbnQgW0lPU2lua10gZm9yIHRoZSBmaWxlLiBUaGUKICAgKiBbSU9TaW5rXSBtdXN0IGJlIGNsb3NlZCB3aGVuIG5vIGxvbmdlciB1c2VkLCB0byBmcmVlCiAgICogc3lzdGVtIHJlc291cmNlcy4KICAgKgogICAqIEFuIFtJT1NpbmtdIGZvciBhIGZpbGUgY2FuIGJlIG9wZW5lZCBpbiB0d28gbW9kZXM6CiAgICoKICAgKiAqIFtGaWxlTW9kZS53cml0ZV06IHRydW5jYXRlcyB0aGUgZmlsZSB0byBsZW5ndGggemVyby4KICAgKiAqIFtGaWxlTW9kZS5hcHBlbmRdOiBzZXRzIHRoZSBpbml0aWFsIHdyaXRlIHBvc2l0aW9uIHRvIHRoZSBlbmQKICAgKiAgIG9mIHRoZSBmaWxlLgogICAqCiAgICogIFdoZW4gd3JpdGluZyBzdHJpbmdzIHRocm91Z2ggdGhlIHJldHVybmVkIFtJT1NpbmtdIHRoZSBlbmNvZGluZwogICAqICBzcGVjaWZpZWQgdXNpbmcgW2VuY29kaW5nXSB3aWxsIGJlIHVzZWQuIFRoZSByZXR1cm5lZCBbSU9TaW5rXQogICAqICBoYXMgYW4gYGVuY29kaW5nYCBwcm9wZXJ0eSB3aGljaCBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGUKICAgKiAgW0lPU2lua10gaGFzIGJlZW4gY3JlYXRlZC4KICAgKi8KICBJT1Npbmsgb3BlbldyaXRlKHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KTsKCiAgLyoqCiAgICogUmVhZCB0aGUgZW50aXJlIGZpbGUgY29udGVudHMgYXMgYSBsaXN0IG9mIGJ5dGVzLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPFVpbnQ4TGlzdD5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIGxpc3Qgb2YgYnl0ZXMgdGhhdAogICAqIGlzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KICAgKi8KICBGdXR1cmU8VWludDhMaXN0PiByZWFkQXNCeXRlcygpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlYWQgdGhlIGVudGlyZSBmaWxlIGNvbnRlbnRzIGFzIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIFVpbnQ4TGlzdCByZWFkQXNCeXRlc1N5bmMoKTsKCiAgLyoqCiAgICogUmVhZCB0aGUgZW50aXJlIGZpbGUgY29udGVudHMgYXMgYSBzdHJpbmcgdXNpbmcgdGhlIGdpdmVuCiAgICogW0VuY29kaW5nXS4KICAgKgogICAqIFJldHVybnMgYSBgRnV0dXJlPFN0cmluZz5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHN0cmluZyBvbmNlCiAgICogdGhlIGZpbGUgY29udGVudHMgaGFzIGJlZW4gcmVhZC4KICAgKi8KICBGdXR1cmU8U3RyaW5nPiByZWFkQXNTdHJpbmcoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVhZCB0aGUgZW50aXJlIGZpbGUgY29udGVudHMgYXMgYSBzdHJpbmcgdXNpbmcgdGhlCiAgICogZ2l2ZW4gW0VuY29kaW5nXS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIFN0cmluZyByZWFkQXNTdHJpbmdTeW5jKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBSZWFkIHRoZSBlbnRpcmUgZmlsZSBjb250ZW50cyBhcyBsaW5lcyBvZiB0ZXh0IHVzaW5nIHRoZSBnaXZlbgogICAqIFtFbmNvZGluZ10uCiAgICoKICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxMaXN0PFN0cmluZz4+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBsaW5lcwogICAqIG9uY2UgdGhlIGZpbGUgY29udGVudHMgaGFzIGJlZW4gcmVhZC4KICAgKi8KICBGdXR1cmU8TGlzdDxTdHJpbmc+PiByZWFkQXNMaW5lcyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkIHRoZSBlbnRpcmUgZmlsZSBjb250ZW50cyBhcyBsaW5lcyBvZiB0ZXh0CiAgICogdXNpbmcgdGhlIGdpdmVuIFtFbmNvZGluZ10uCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBMaXN0PFN0cmluZz4gcmVhZEFzTGluZXNTeW5jKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBXcml0ZSBhIGxpc3Qgb2YgYnl0ZXMgdG8gYSBmaWxlLgogICAqCiAgICogT3BlbnMgdGhlIGZpbGUsIHdyaXRlcyB0aGUgbGlzdCBvZiBieXRlcyB0byBpdCwgYW5kIGNsb3NlcyB0aGUgZmlsZS4KICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzIFtGaWxlXSBvYmplY3Qgb25jZQogICAqIHRoZSBlbnRpcmUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBCeSBkZWZhdWx0IFt3cml0ZUFzQnl0ZXNdIGNyZWF0ZXMgdGhlIGZpbGUgZm9yIHdyaXRpbmcgYW5kIHRydW5jYXRlcyB0aGUKICAgKiBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBJbiBvcmRlciB0byBhcHBlbmQgdGhlIGJ5dGVzIHRvIGFuIGV4aXN0aW5nCiAgICogZmlsZSwgcGFzcyBbRmlsZU1vZGUuYXBwZW5kXSBhcyB0aGUgb3B0aW9uYWwgbW9kZSBwYXJhbWV0ZXIuCiAgICoKICAgKiBJZiB0aGUgYXJndW1lbnQgW2ZsdXNoXSBpcyBzZXQgdG8gYHRydWVgLCB0aGUgZGF0YSB3cml0dGVuIHdpbGwgYmUKICAgKiBmbHVzaGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBiZWZvcmUgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICovCiAgRnV0dXJlPEZpbGU+IHdyaXRlQXNCeXRlcyhMaXN0PGludD4gYnl0ZXMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwgYm9vbCBmbHVzaDogZmFsc2V9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB3cml0ZSBhIGxpc3Qgb2YgYnl0ZXMgdG8gYSBmaWxlLgogICAqCiAgICogT3BlbnMgdGhlIGZpbGUsIHdyaXRlcyB0aGUgbGlzdCBvZiBieXRlcyB0byBpdCBhbmQgY2xvc2VzIHRoZSBmaWxlLgogICAqCiAgICogQnkgZGVmYXVsdCBbd3JpdGVBc0J5dGVzU3luY10gY3JlYXRlcyB0aGUgZmlsZSBmb3Igd3JpdGluZyBhbmQgdHJ1bmNhdGVzCiAgICogdGhlIGZpbGUgaWYgaXQgYWxyZWFkeSBleGlzdHMuIEluIG9yZGVyIHRvIGFwcGVuZCB0aGUgYnl0ZXMgdG8gYW4gZXhpc3RpbmcKICAgKiBmaWxlLCBwYXNzIFtGaWxlTW9kZS5hcHBlbmRdIGFzIHRoZSBvcHRpb25hbCBtb2RlIHBhcmFtZXRlci4KICAgKgogICAqIElmIHRoZSBbZmx1c2hdIGFyZ3VtZW50IGlzIHNldCB0byBgdHJ1ZWAgZGF0YSB3cml0dGVuIHdpbGwgYmUKICAgKiBmbHVzaGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBiZWZvcmUgcmV0dXJuaW5nLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCB3cml0ZUFzQnl0ZXNTeW5jKExpc3Q8aW50PiBieXRlcywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLCBib29sIGZsdXNoOiBmYWxzZX0pOwoKICAvKioKICAgKiBXcml0ZSBhIHN0cmluZyB0byBhIGZpbGUuCiAgICoKICAgKiBPcGVucyB0aGUgZmlsZSwgd3JpdGVzIHRoZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGVuY29kaW5nLCBhbmQgY2xvc2VzIHRoZQogICAqIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlPEZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMgW0ZpbGVdIG9iamVjdAogICAqIG9uY2UgdGhlIGVudGlyZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KICAgKgogICAqIEJ5IGRlZmF1bHQgW3dyaXRlQXNTdHJpbmddIGNyZWF0ZXMgdGhlIGZpbGUgZm9yIHdyaXRpbmcgYW5kIHRydW5jYXRlcyB0aGUKICAgKiBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBJbiBvcmRlciB0byBhcHBlbmQgdGhlIGJ5dGVzIHRvIGFuIGV4aXN0aW5nCiAgICogZmlsZSwgcGFzcyBbRmlsZU1vZGUuYXBwZW5kXSBhcyB0aGUgb3B0aW9uYWwgbW9kZSBwYXJhbWV0ZXIuCiAgICoKICAgKiBJZiB0aGUgYXJndW1lbnQgW2ZsdXNoXSBpcyBzZXQgdG8gYHRydWVgLCB0aGUgZGF0YSB3cml0dGVuIHdpbGwgYmUKICAgKiBmbHVzaGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBiZWZvcmUgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKi8KICBGdXR1cmU8RmlsZT4gd3JpdGVBc1N0cmluZyhTdHJpbmcgY29udGVudHMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwKICAgICAgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0ZjgsCiAgICAgIGJvb2wgZmx1c2g6IGZhbHNlfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgd3JpdGUgYSBzdHJpbmcgdG8gYSBmaWxlLgogICAqCiAgICogT3BlbnMgdGhlIGZpbGUsIHdyaXRlcyB0aGUgc3RyaW5nIGluIHRoZSBnaXZlbiBlbmNvZGluZywgYW5kIGNsb3NlcyB0aGUKICAgKiBmaWxlLgogICAqCiAgICogQnkgZGVmYXVsdCBbd3JpdGVBc1N0cmluZ1N5bmNdIGNyZWF0ZXMgdGhlIGZpbGUgZm9yIHdyaXRpbmcgYW5kCiAgICogdHJ1bmNhdGVzIHRoZSBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBJbiBvcmRlciB0byBhcHBlbmQgdGhlIGJ5dGVzCiAgICogdG8gYW4gZXhpc3RpbmcgZmlsZSwgcGFzcyBbRmlsZU1vZGUuYXBwZW5kXSBhcyB0aGUgb3B0aW9uYWwgbW9kZQogICAqIHBhcmFtZXRlci4KICAgKgogICAqIElmIHRoZSBbZmx1c2hdIGFyZ3VtZW50IGlzIHNldCB0byBgdHJ1ZWAgZGF0YSB3cml0dGVuIHdpbGwgYmUKICAgKiBmbHVzaGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBiZWZvcmUgcmV0dXJuaW5nLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCB3cml0ZUFzU3RyaW5nU3luYyhTdHJpbmcgY29udGVudHMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwKICAgICAgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0ZjgsCiAgICAgIGJvb2wgZmx1c2g6IGZhbHNlfSk7CgogIC8qKgogICAqIEdldCB0aGUgcGF0aCBvZiB0aGUgZmlsZS4KICAgKi8KICBTdHJpbmcgZ2V0IHBhdGg7Cn0KCi8qKgogKiBgUmFuZG9tQWNjZXNzRmlsZWAgcHJvdmlkZXMgcmFuZG9tIGFjY2VzcyB0byB0aGUgZGF0YSBpbiBhCiAqIGZpbGUuCiAqCiAqIGBSYW5kb21BY2Nlc3NGaWxlYCBvYmplY3RzIGFyZSBvYnRhaW5lZCBieSBjYWxsaW5nIHRoZQogKiBgb3BlbmAgbWV0aG9kIG9uIGEgW0ZpbGVdIG9iamVjdC4KICoKICogQSBgUmFuZG9tQWNjZXNzRmlsZWAgaGF2ZSBib3RoIGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMKICogbWV0aG9kcy4gVGhlIGFzeW5jaHJvbm91cyBtZXRob2RzIGFsbCByZXR1cm4gYSBgRnV0dXJlYAogKiB3aGVyZWFzIHRoZSBzeW5jaHJvbm91cyBtZXRob2RzIHdpbGwgcmV0dXJuIHRoZSByZXN1bHQgZGlyZWN0bHksCiAqIGFuZCBibG9jayB0aGUgY3VycmVudCBpc29sYXRlIHVudGlsIHRoZSByZXN1bHQgaXMgcmVhZHkuCiAqCiAqIEF0IG1vc3Qgb25lIGFzeW5jaHJvbm91cyBtZXRob2QgY2FuIGJlIHBlbmRpbmcgb24gYSBnaXZlbiBgUmFuZG9tQWNjZXNzRmlsZWAKICogaW5zdGFuY2UgYXQgdGhlIHRpbWUuIElmIGFuIGFzeW5jaHJvbm91cyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gb25lIGlzCiAqIGFscmVhZHkgaW4gcHJvZ3Jlc3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaXMgdGhyb3duLgogKgogKiBJZiBhbiBhc3luY2hyb25vdXMgbWV0aG9kIGlzIHBlbmRpbmcgaXQgaXMgYWxzbyBub3QgcG9zc2libGUgdG8gY2FsbCBhbnkKICogc3luY2hyb25vdXMgbWV0aG9kcy4gVGhpcyB3aWxsIGFsc28gdGhyb3cgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0uCiAqLwphYnN0cmFjdCBjbGFzcyBSYW5kb21BY2Nlc3NGaWxlIHsKICAvKioKICAgKiBDbG9zZXMgdGhlIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlYCB0aGF0CiAgICogY29tcGxldGVzIHdoZW4gaXQgaGFzIGJlZW4gY2xvc2VkLgogICAqLwogIEZ1dHVyZTx2b2lkPiBjbG9zZSgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNsb3NlcyB0aGUgZmlsZS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgY2xvc2VTeW5jKCk7CgogIC8qKgogICAqIFJlYWRzIGEgYnl0ZSBmcm9tIHRoZSBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxpbnQ+YCB0aGF0CiAgICogY29tcGxldGVzIHdpdGggdGhlIGJ5dGUsIG9yIHdpdGggLTEgaWYgZW5kLW9mLWZpbGUgaGFzIGJlZW4gcmVhY2hlZC4KICAgKi8KICBGdXR1cmU8aW50PiByZWFkQnl0ZSgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlYWRzIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgZmlsZS4gSWYgZW5kLW9mLWZpbGUKICAgKiBoYXMgYmVlbiByZWFjaGVkIC0xIGlzIHJldHVybmVkLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgaW50IHJlYWRCeXRlU3luYygpOwoKICAvKioKICAgKiBSZWFkcyBbYnl0ZXNdIGJ5dGVzIGZyb20gYSBmaWxlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYSBsaXN0IG9mIGJ5dGVzLgogICAqLwogIEZ1dHVyZTxVaW50OExpc3Q+IHJlYWQoaW50IGJ5dGVzKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkcyBhIG1heGltdW0gb2YgW2J5dGVzXSBieXRlcyBmcm9tIGEgZmlsZSBhbmQKICAgKiByZXR1cm5zIHRoZSByZXN1bHQgaW4gYSBsaXN0IG9mIGJ5dGVzLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgVWludDhMaXN0IHJlYWRTeW5jKGludCBieXRlcyk7CgogIC8qKgogICAqIFJlYWRzIGludG8gYW4gZXhpc3RpbmcgW0xpc3Q8aW50Pl0gZnJvbSB0aGUgZmlsZS4gSWYgW3N0YXJ0XSBpcyBwcmVzZW50LAogICAqIHRoZSBieXRlcyB3aWxsIGJlIGZpbGxlZCBpbnRvIFtidWZmZXJdIGZyb20gYXQgaW5kZXggW3N0YXJ0XSwgb3RoZXJ3aXNlCiAgICogaW5kZXggMC4gSWYgW2VuZF0gaXMgcHJlc2VudCwgdGhlIFtlbmRdIC0gW3N0YXJ0XSBieXRlcyB3aWxsIGJlIHJlYWQgaW50bwogICAqIFtidWZmZXJdLCBvdGhlcndpc2UgdXAgdG8gW2J1ZmZlci5sZW5ndGhdLiBJZiBbZW5kXSA9PSBbc3RhcnRdIG5vdGhpbmcKICAgKiBoYXBwZW5zLgogICAqCiAgICogUmV0dXJucyBhIGBGdXR1cmU8aW50PmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCiAgICovCiAgRnV0dXJlPGludD4gcmVhZEludG8oTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkcyBpbnRvIGFuIGV4aXN0aW5nIFtMaXN0PGludD5dIGZyb20gdGhlIGZpbGUuIElmIFtzdGFydF0KICAgKiBpcyBwcmVzZW50LCB0aGUgYnl0ZXMgd2lsbCBiZSBmaWxsZWQgaW50byBbYnVmZmVyXSBmcm9tIGF0IGluZGV4IFtzdGFydF0sCiAgICogb3RoZXJ3aXNlIGluZGV4IDAuICBJZiBbZW5kXSBpcyBwcmVzZW50LCB0aGUgW2VuZF0gLSBbc3RhcnRdIGJ5dGVzIHdpbGwgYmUKICAgKiByZWFkIGludG8gW2J1ZmZlcl0sIG90aGVyd2lzZSB1cCB0byBbYnVmZmVyLmxlbmd0aF0uIElmIFtlbmRdID09IFtzdGFydF0KICAgKiBub3RoaW5nIGhhcHBlbnMuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBpbnQgcmVhZEludG9TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSk7CgogIC8qKgogICAqIFdyaXRlcyBhIHNpbmdsZSBieXRlIHRvIHRoZSBmaWxlLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBSYW5kb21BY2Nlc3NGaWxlIHdoZW4gdGhlIHdyaXRlIGNvbXBsZXRlcy4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gd3JpdGVCeXRlKGludCB2YWx1ZSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgd3JpdGVzIGEgc2luZ2xlIGJ5dGUgdG8gdGhlIGZpbGUuIFJldHVybnMgdGhlCiAgICogbnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgaW50IHdyaXRlQnl0ZVN5bmMoaW50IHZhbHVlKTsKCiAgLyoqCiAgICogV3JpdGVzIGZyb20gYSBbTGlzdDxpbnQ+XSB0byB0aGUgZmlsZS4gSXQgd2lsbCByZWFkIHRoZSBidWZmZXIgZnJvbSBpbmRleAogICAqIFtzdGFydF0gdG8gaW5kZXggW2VuZF0uIElmIFtzdGFydF0gaXMgb21pdHRlZCwgaXQnbGwgc3RhcnQgZnJvbSBpbmRleCAwLgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IHdpbGwgd3JpdGUgdG8gZW5kIG9mIFtidWZmZXJdLgogICAqCiAgICogUmV0dXJucyBhIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIFtSYW5kb21BY2Nlc3NGaWxlXSB3aGVuIHRoZSB3cml0ZSBjb21wbGV0ZXMuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHdyaXRlRnJvbShMaXN0PGludD4gYnVmZmVyLAogICAgICBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHdyaXRlcyBmcm9tIGEgW0xpc3Q8aW50Pl0gdG8gdGhlIGZpbGUuIEl0IHdpbGwgcmVhZCB0aGUKICAgKiBidWZmZXIgZnJvbSBpbmRleCBbc3RhcnRdIHRvIGluZGV4IFtlbmRdLiBJZiBbc3RhcnRdIGlzIG9taXR0ZWQsIGl0J2xsCiAgICogc3RhcnQgZnJvbSBpbmRleCAwLiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCB3aWxsIHdyaXRlIHRvIHRoZSBlbmQgb2YKICAgKiBbYnVmZmVyXS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgd3JpdGVGcm9tU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvKioKICAgKiBXcml0ZXMgYSBzdHJpbmcgdG8gdGhlIGZpbGUgdXNpbmcgdGhlIGdpdmVuIFtFbmNvZGluZ10uIFJldHVybnMgYQogICAqIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIFJhbmRvbUFjY2Vzc0ZpbGUgd2hlbiB0aGUgd3JpdGUgY29tcGxldGVzLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB3cml0ZVN0cmluZyhTdHJpbmcgc3RyaW5nLAogICAgICB7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB3cml0ZXMgYSBzaW5nbGUgc3RyaW5nIHRvIHRoZSBmaWxlIHVzaW5nIHRoZSBnaXZlbgogICAqIFtFbmNvZGluZ10uCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIHdyaXRlU3RyaW5nU3luYyhTdHJpbmcgc3RyaW5nLCB7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KTsKCiAgLyoqCiAgICogR2V0cyB0aGUgY3VycmVudCBieXRlIHBvc2l0aW9uIGluIHRoZSBmaWxlLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPGludD5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHBvc2l0aW9uLgogICAqLwogIEZ1dHVyZTxpbnQ+IHBvc2l0aW9uKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZ2V0cyB0aGUgY3VycmVudCBieXRlIHBvc2l0aW9uIGluIHRoZSBmaWxlLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgaW50IHBvc2l0aW9uU3luYygpOwoKICAvKioKICAgKiBTZXRzIHRoZSBieXRlIHBvc2l0aW9uIGluIHRoZSBmaWxlLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBSYW5kb21BY2Nlc3NGaWxlIHdoZW4gdGhlIHBvc2l0aW9uIGhhcyBiZWVuIHNldC4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gc2V0UG9zaXRpb24oaW50IHBvc2l0aW9uKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBzZXRzIHRoZSBieXRlIHBvc2l0aW9uIGluIHRoZSBmaWxlLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCBzZXRQb3NpdGlvblN5bmMoaW50IHBvc2l0aW9uKTsKCiAgLyoqCiAgICogVHJ1bmNhdGVzIChvciBleHRlbmRzKSB0aGUgZmlsZSB0byBbbGVuZ3RoXSBieXRlcy4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogUmFuZG9tQWNjZXNzRmlsZSB3aGVuIHRoZSB0cnVuY2F0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZC4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gdHJ1bmNhdGUoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgdHJ1bmNhdGVzIChvciBleHRlbmRzKSB0aGUgZmlsZSB0byBbbGVuZ3RoXSBieXRlcy4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgdHJ1bmNhdGVTeW5jKGludCBsZW5ndGgpOwoKICAvKioKICAgKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlPGludD5gIHRoYXQKICAgKiBjb21wbGV0ZXMgd2l0aCB0aGUgbGVuZ3RoIGluIGJ5dGVzLgogICAqLwogIEZ1dHVyZTxpbnQ+IGxlbmd0aCgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGdldHMgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIGludCBsZW5ndGhTeW5jKCk7CgogIC8qKgogICAqIEZsdXNoZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHRvIGRpc2suIFJldHVybnMgYQogICAqIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIFJhbmRvbUFjY2Vzc0ZpbGUgd2hlbiB0aGUgZmx1c2ggb3BlcmF0aW9uIGNvbXBsZXRlcy4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gZmx1c2goKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBmbHVzaGVzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSB0byBkaXNrLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCBmbHVzaFN5bmMoKTsKCiAgLyoqCiAgICogTG9ja3MgdGhlIGZpbGUgb3IgcGFydCBvZiB0aGUgZmlsZS4KICAgKgogICAqIEJ5IGRlZmF1bHQgYW4gZXhjbHVzaXZlIGxvY2sgd2lsbCBiZSBvYnRhaW5lZCwgYnV0IHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4KICAgKiBieSB0aGUgW21vZGVdIGFyZ3VtZW50LgogICAqCiAgICogTG9ja3MgdGhlIGJ5dGUgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIG9mIHRoZSBmaWxlLCB3aXRoIHRoZQogICAqIGJ5dGUgYXQgcG9zaXRpb24gYGVuZGAgbm90IGluY2x1ZGVkLiBJZiBubyBhcmd1bWVudHMgYXJlCiAgICogc3BlY2lmaWVkLCB0aGUgZnVsbCBmaWxlIGlzIGxvY2tlZCwgSWYgb25seSBgc3RhcnRgIGlzIHNwZWNpZmllZAogICAqIHRoZSBmaWxlIGlzIGxvY2tlZCBmcm9tIGJ5dGUgcG9zaXRpb24gYHN0YXJ0YCB0byB0aGUgZW5kIG9mIHRoZQogICAqIGZpbGUsIG5vIG1hdHRlciBob3cgbGFyZ2UgaXQgZ3Jvd3MuIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgYW4KICAgKiBleHBsaWNpdCB2YWx1ZSBvZiBgZW5kYCB3aGljaCBpcyBwYXN0IHRoZSBjdXJyZW50IGxlbmd0aCBvZiB0aGUgZmlsZS4KICAgKgogICAqIFRvIG9idGFpbiBhbiBleGNsdXNpdmUgbG9jayBvbiBhIGZpbGUgaXQgbXVzdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuCiAgICoKICAgKiBJZiBbbW9kZV0gaXMgW0ZpbGVMb2NrLmV4Y2x1c2l2ZV0gb3IgW0ZpbGVMb2NrLnNoYXJlZF0sIGFuIGVycm9yIGlzCiAgICogc2lnbmFsZWQgaWYgdGhlIGxvY2sgY2Fubm90IGJlIG9idGFpbmVkLiBJZiBbbW9kZV0gaXMKICAgKiBbRmlsZUxvY2suYmxvY2tpbmdFeGNsdXNpdmVdIG9yIFtGaWxlTG9jay5ibG9ja2luZ1NoYXJlZF0sIHRoZQogICAqIHJldHVybmVkIFtGdXR1cmVdIGlzIHJlc29sdmVkIG9ubHkgd2hlbiB0aGUgbG9jayBoYXMgYmVlbiBvYnRhaW5lZC4KICAgKgogICAqICpOT1RFKiBmaWxlIGxvY2tpbmcgZG9lcyBoYXZlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBhY3Jvc3MKICAgKiBwbGF0Zm9ybXM6CiAgICoKICAgKiBPbiBMaW51eCBhbmQgT1MgWCB0aGlzIHVzZXMgYWR2aXNvcnkgbG9ja3MsIHdoaWNoIGhhdmUgdGhlCiAgICogc3VycHJpc2luZyBzZW1hbnRpY3MgdGhhdCBhbGwgbG9ja3MgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZmlsZQogICAqIGFyZSByZW1vdmVkIHdoZW4gKmFueSogZmlsZSBkZXNjcmlwdG9yIGZvciB0aGF0IGZpbGUgaXMgY2xvc2VkIGJ5CiAgICogdGhlIHByb2Nlc3MuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5IGxvY2sgdGhlIGZpbGUgZm9yCiAgICogYWNjZXNzLiBBbHNvIG5vdGUgdGhhdCBhZHZpc29yeSBsb2NrcyBhcmUgb24gYSBwcm9jZXNzCiAgICogbGV2ZWwuIFRoaXMgbWVhbnMgdGhhdCBzZXZlcmFsIGlzb2xhdGVzIGluIHRoZSBzYW1lIHByb2Nlc3MgY2FuCiAgICogb2J0YWluIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBzYW1lIGZpbGUuCiAgICoKICAgKiBPbiBXaW5kb3dzIHRoZSByZWdpb25zIHVzZWQgZm9yIGxvY2sgYW5kIHVubG9jayBuZWVkcyB0byBtYXRjaC4gSWYgdGhhdAogICAqIGlzIG5vdCB0aGUgY2FzZSB1bmxvY2tpbmcgd2lsbCByZXN1bHQgaW4gdGhlIE9TIGVycm9yICJUaGUgc2VnbWVudCBpcwogICAqIGFscmVhZHkgdW5sb2NrZWQiLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBsb2NrKAogICAgICBbRmlsZUxvY2sgbW9kZSA9IEZpbGVMb2NrLmV4Y2x1c2l2ZSwgaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgbG9ja3MgdGhlIGZpbGUgb3IgcGFydCBvZiB0aGUgZmlsZS4KICAgKgogICAqIEJ5IGRlZmF1bHQgYW4gZXhjbHVzaXZlIGxvY2sgd2lsbCBiZSBvYnRhaW5lZCwgYnV0IHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4KICAgKiBieSB0aGUgW21vZGVdIGFyZ3VtZW50LgogICAqCiAgICogTG9ja3MgdGhlIGJ5dGUgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIG9mIHRoZSBmaWxlICx3aXRoIHRoZQogICAqIGJ5dGUgYXQgcG9zaXRpb24gYGVuZGAgbm90IGluY2x1ZGVkLiBJZiBubyBhcmd1bWVudHMgYXJlCiAgICogc3BlY2lmaWVkLCB0aGUgZnVsbCBmaWxlIGlzIGxvY2tlZCwgSWYgb25seSBgc3RhcnRgIGlzIHNwZWNpZmllZAogICAqIHRoZSBmaWxlIGlzIGxvY2tlZCBmcm9tIGJ5dGUgcG9zaXRpb24gYHN0YXJ0YCB0byB0aGUgZW5kIG9mIHRoZQogICAqIGZpbGUsIG5vIG1hdHRlciBob3cgbGFyZ2UgaXQgZ3Jvd3MuIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgYW4KICAgKiBleHBsaWNpdCB2YWx1ZSBvZiBgZW5kYCB3aGljaCBpcyBwYXN0IHRoZSBjdXJyZW50IGxlbmd0aCBvZiB0aGUgZmlsZS4KICAgKgogICAqIFRvIG9idGFpbiBhbiBleGNsdXNpdmUgbG9jayBvbiBhIGZpbGUgaXQgbXVzdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuCiAgICoKICAgKiBJZiBbbW9kZV0gaXMgW0ZpbGVMb2NrLmV4Y2x1c2l2ZV0gb3IgW0ZpbGVMb2NrLnNoYXJlZF0sIGFuIGV4Y2VwdGlvbiBpcwogICAqIHRocm93biBpZiB0aGUgbG9jayBjYW5ub3QgYmUgb2J0YWluZWQuIElmIFttb2RlXSBpcwogICAqIFtGaWxlTG9jay5ibG9ja2luZ0V4Y2x1c2l2ZV0gb3IgW0ZpbGVMb2NrLmJsb2NraW5nU2hhcmVkXSwgdGhlCiAgICogY2FsbCByZXR1cm5zIG9ubHkgYWZ0ZXIgdGhlIGxvY2sgaGFzIGJlZW4gb2J0YWluZWQuCiAgICoKICAgKiAqTk9URSogZmlsZSBsb2NraW5nIGRvZXMgaGF2ZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYWNyb3NzCiAgICogcGxhdGZvcm1zOgogICAqCiAgICogT24gTGludXggYW5kIE9TIFggdGhpcyB1c2VzIGFkdmlzb3J5IGxvY2tzLCB3aGljaCBoYXZlIHRoZQogICAqIHN1cnByaXNpbmcgc2VtYW50aWNzIHRoYXQgYWxsIGxvY2tzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGZpbGUKICAgKiBhcmUgcmVtb3ZlZCB3aGVuICphbnkqIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhhdCBmaWxlIGlzIGNsb3NlZCBieQogICAqIHRoZSBwcm9jZXNzLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhY3R1YWxseSBsb2NrIHRoZSBmaWxlIGZvcgogICAqIGFjY2Vzcy4gQWxzbyBub3RlIHRoYXQgYWR2aXNvcnkgbG9ja3MgYXJlIG9uIGEgcHJvY2VzcwogICAqIGxldmVsLiBUaGlzIG1lYW5zIHRoYXQgc2V2ZXJhbCBpc29sYXRlcyBpbiB0aGUgc2FtZSBwcm9jZXNzIGNhbgogICAqIG9idGFpbiBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgc2FtZSBmaWxlLgogICAqCiAgICogT24gV2luZG93cyB0aGUgcmVnaW9ucyB1c2VkIGZvciBsb2NrIGFuZCB1bmxvY2sgbmVlZHMgdG8gbWF0Y2guIElmIHRoYXQKICAgKiBpcyBub3QgdGhlIGNhc2UgdW5sb2NraW5nIHdpbGwgcmVzdWx0IGluIHRoZSBPUyBlcnJvciAiVGhlIHNlZ21lbnQgaXMKICAgKiBhbHJlYWR5IHVubG9ja2VkIi4KICAgKgogICAqLwogIHZvaWQgbG9ja1N5bmMoCiAgICAgIFtGaWxlTG9jayBtb2RlID0gRmlsZUxvY2suZXhjbHVzaXZlLCBpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKTsKCiAgLyoqCiAgICogVW5sb2NrcyB0aGUgZmlsZSBvciBwYXJ0IG9mIHRoZSBmaWxlLgogICAqCiAgICogVW5sb2NrcyB0aGUgYnl0ZSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gb2YgdGhlIGZpbGUsIHdpdGgKICAgKiB0aGUgYnl0ZSBhdCBwb3NpdGlvbiBgZW5kYCBub3QgaW5jbHVkZWQuIElmIG5vIGFyZ3VtZW50cyBhcmUKICAgKiBzcGVjaWZpZWQsIHRoZSBmdWxsIGZpbGUgaXMgdW5sb2NrZWQsIElmIG9ubHkgYHN0YXJ0YCBpcwogICAqIHNwZWNpZmllZCB0aGUgZmlsZSBpcyB1bmxvY2tlZCBmcm9tIGJ5dGUgcG9zaXRpb24gYHN0YXJ0YCB0byB0aGUKICAgKiBlbmQgb2YgdGhlIGZpbGUuCiAgICoKICAgKiAqTk9URSogZmlsZSBsb2NraW5nIGRvZXMgaGF2ZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYWNyb3NzCiAgICogcGxhdGZvcm1zOgogICAqCiAgICogU2VlIFtsb2NrXSBmb3IgbW9yZSBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB1bmxvY2soW2ludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHVubG9ja3MgdGhlIGZpbGUgb3IgcGFydCBvZiB0aGUgZmlsZS4KICAgKgogICAqIFVubG9ja3MgdGhlIGJ5dGUgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIG9mIHRoZSBmaWxlLCB3aXRoCiAgICogdGhlIGJ5dGUgYXQgcG9zaXRpb24gYGVuZGAgbm90IGluY2x1ZGVkLiBJZiBubyBhcmd1bWVudHMgYXJlCiAgICogc3BlY2lmaWVkLCB0aGUgZnVsbCBmaWxlIGlzIHVubG9ja2VkLCBJZiBvbmx5IGBzdGFydGAgaXMKICAgKiBzcGVjaWZpZWQgdGhlIGZpbGUgaXMgdW5sb2NrZWQgZnJvbSBieXRlIHBvc2l0aW9uIGBzdGFydGAgdG8gdGhlCiAgICogZW5kIG9mIHRoZSBmaWxlLgogICAqCiAgICogKk5PVEUqIGZpbGUgbG9ja2luZyBkb2VzIGhhdmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGFjcm9zcwogICAqIHBsYXRmb3JtczoKICAgKgogICAqIFNlZSBbbG9ja1N5bmNdIGZvciBtb3JlIGRldGFpbHMuCiAgICovCiAgdm9pZCB1bmxvY2tTeW5jKFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBmb3IgdGhpcyBSYW5kb21BY2Nlc3NGaWxlIGluc3RhbmNlLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwoKICAvKioKICAgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBmaWxlIHVuZGVybHlpbmcgdGhpcyBSYW5kb21BY2Nlc3NGaWxlLgogICAqLwogIFN0cmluZyBnZXQgcGF0aDsKfQoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhIGZpbGUgb3BlcmF0aW9uIGZhaWxzLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBGaWxlU3lzdGVtRXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIC8qKgogICAqIE1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgZXJyb3IuIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBhbnkgZGV0YWlsZWQKICAgKiBpbmZvcm1hdGlvbiBmb3JtIHRoZSB1bmRlcmx5aW5nIE9TIGVycm9yLiBDaGVjayBbb3NFcnJvcl0gZm9yCiAgICogdGhhdCBpbmZvcm1hdGlvbi4KICAgKi8KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgLyoqCiAgICogVGhlIGZpbGUgc3lzdGVtIHBhdGggb24gd2hpY2ggdGhlIGVycm9yIG9jY3VycmVkLiBDYW4gYmUgYG51bGxgCiAgICogaWYgdGhlIGV4Y2VwdGlvbiBkb2VzIG5vdCByZWxhdGUgZGlyZWN0bHkgdG8gYSBmaWxlIHN5c3RlbSBwYXRoLgogICAqLwogIGZpbmFsIFN0cmluZyBwYXRoOwoKICAvKioKICAgKiBUaGUgdW5kZXJseWluZyBPUyBlcnJvci4gQ2FuIGJlIGBudWxsYCBpZiB0aGUgZXhjZXB0aW9uIGlzIG5vdAogICAqIHJhaXNlZCBkdWUgdG8gYW4gT1MgZXJyb3IuCiAgICovCiAgZmluYWwgT1NFcnJvciBvc0Vycm9yOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24gd2l0aCBhbiBvcHRpb25hbCBlcnJvciBtZXNzYWdlCiAgICogW21lc3NhZ2VdLCBvcHRpb25hbCBmaWxlIHN5c3RlbSBwYXRoIFtwYXRoXSBhbmQgb3B0aW9uYWwgT1MgZXJyb3IKICAgKiBbb3NFcnJvcl0uCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IEZpbGVTeXN0ZW1FeGNlcHRpb24oW3RoaXMubWVzc2FnZSA9ICIiLCB0aGlzLnBhdGggPSAiIiwgdGhpcy5vc0Vycm9yXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCJGaWxlU3lzdGVt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NGsuCmNvbnN0IGludCBfYmxvY2tTaXplID0gNjQgKiAxMDI0OwoKY2xhc3MgX0ZpbGVTdHJlYW0gZXh0ZW5kcyBTdHJlYW08TGlzdDxpbnQ+PiB7CiAgLy8gU3RyZWFtIGNvbnRyb2xsZXIuCiAgU3RyZWFtQ29udHJvbGxlcjxVaW50OExpc3Q+IF9jb250cm9sbGVyOwoKICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgdW5kZXJseWluZyBmaWxlLgogIFN0cmluZyBfcGF0aDsKICBSYW5kb21BY2Nlc3NGaWxlIF9vcGVuZWRGaWxlOwogIGludCBfcG9zaXRpb247CiAgaW50IF9lbmQ7CiAgZmluYWwgQ29tcGxldGVyIF9jbG9zZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKCiAgLy8gSGFzIHRoZSBzdHJlYW0gYmVlbiBwYXVzZWQgb3IgdW5zdWJzY3JpYmVkPwogIGJvb2wgX3Vuc3Vic2NyaWJlZCA9IGZhbHNlOwoKICAvLyBJcyB0aGVyZSBhIHJlYWQgY3VycmVudGx5IGluIHByb2dyZXNzPwogIGJvb2wgX3JlYWRJblByb2dyZXNzID0gdHJ1ZTsKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKCiAgYm9vbCBfYXRFbmQgPSBmYWxzZTsKCiAgX0ZpbGVTdHJlYW0odGhpcy5fcGF0aCwgdGhpcy5fcG9zaXRpb24sIHRoaXMuX2VuZCkgewogICAgX3Bvc2l0aW9uID8/PSAwOwogIH0KCiAgX0ZpbGVTdHJlYW0uZm9yU3RkaW4oKSA6IF9wb3NpdGlvbiA9IDA7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgX3NldHVwQ29udHJvbGxlcigpOwogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIHZvaWQgX3NldHVwQ29udHJvbGxlcigpIHsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfc3RhcnQsCiAgICAgICAgb25SZXN1bWU6IF9yZWFkQmxvY2ssCiAgICAgICAgb25DYW5jZWw6ICgpIHsKICAgICAgICAgIF91bnN1YnNjcmliZWQgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIF9jbG9zZUZpbGUoKTsKICAgICAgICB9KTsKICB9CgogIEZ1dHVyZSBfY2xvc2VGaWxlKCkgewogICAgaWYgKF9yZWFkSW5Qcm9ncmVzcyB8fCBfY2xvc2VkKSB7CiAgICAgIHJldHVybiBfY2xvc2VDb21wbGV0ZXIuZnV0dXJlOwogICAgfQogICAgX2Nsb3NlZCA9IHRydWU7CgogICAgdm9pZCBkb25lKCkgewogICAgICBfY2xvc2VDb21wbGV0ZXIuY29tcGxldGUoKTsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0KCiAgICBfb3BlbmVkRmlsZS5jbG9zZSgpLmNhdGNoRXJyb3IoX2NvbnRyb2xsZXIuYWRkRXJyb3IpLndoZW5Db21wbGV0ZShkb25lKTsKICAgIHJldHVybiBfY2xvc2VDb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgdm9pZCBfcmVhZEJsb2NrKCkgewogICAgLy8gRG9uJ3Qgc3RhcnQgYSBuZXcgcmVhZCBpZiBvbmUgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4KICAgIGlmIChfcmVhZEluUHJvZ3Jlc3MpIHJldHVybjsKICAgIGlmIChfYXRFbmQpIHsKICAgICAgX2Nsb3NlRmlsZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfcmVhZEluUHJvZ3Jlc3MgPSB0cnVlOwogICAgaW50IHJlYWRCeXRlcyA9IF9ibG9ja1NpemU7CiAgICBpZiAoX2VuZCAhPSBudWxsKSB7CiAgICAgIHJlYWRCeXRlcyA9IG1pbihyZWFkQnl0ZXMsIF9lbmQgLSBfcG9zaXRpb24pOwogICAgICBpZiAocmVhZEJ5dGVzIDwgMCkgewogICAgICAgIF9yZWFkSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAgIGlmICghX3Vuc3Vic2NyaWJlZCkgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IobmV3IFJhbmdlRXJyb3IoIkJhZCBlbmQgcG9zaXRpb246ICRfZW5kIikpOwogICAgICAgICAgX2Nsb3NlRmlsZSgpOwogICAgICAgICAgX3Vuc3Vic2NyaWJlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgX29wZW5lZEZpbGUucmVhZChyZWFkQnl0ZXMpLnRoZW4oKGJsb2NrKSB7CiAgICAgIF9yZWFkSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICBpZiAoX3Vuc3Vic2NyaWJlZCkgewogICAgICAgIF9jbG9zZUZpbGUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX3Bvc2l0aW9uICs9IGJsb2NrLmxlbmd0aDsKICAgICAgaWYgKGJsb2NrLmxlbmd0aCA8IHJlYWRCeXRlcyB8fCAoX2VuZCAhPSBudWxsICYmIF9wb3NpdGlvbiA9PSBfZW5kKSkgewogICAgICAgIF9hdEVuZCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKCFfYXRFbmQgJiYgIV9jb250cm9sbGVyLmlzUGF1c2VkKSB7CiAgICAgICAgX3JlYWRCbG9jaygpOwogICAgICB9CiAgICAgIF9jb250cm9sbGVyLmFkZChibG9jayk7CiAgICAgIGlmIChfYXRFbmQpIHsKICAgICAgICBfY2xvc2VGaWxlKCk7CiAgICAgIH0KICAgIH0pLmNhdGNoRXJyb3IoKGUsIHMpIHsKICAgICAgaWYgKCFfdW5zdWJzY3JpYmVkKSB7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSwgcyk7CiAgICAgICAgX2Nsb3NlRmlsZSgpOwogICAgICAgIF91bnN1YnNjcmliZWQgPSB0cnVlOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgX3N0YXJ0KCkgewogICAgaWYgKF9wb3NpdGlvbiA8IDApIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IobmV3IFJhbmdlRXJyb3IoIkJhZCBzdGFydCBwb3NpdGlvbjogJF9wb3NpdGlvbiIpKTsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2b2lkIG9uUmVhZHkoUmFuZG9tQWNjZXNzRmlsZSBmaWxlKSB7CiAgICAgIF9vcGVuZWRGaWxlID0gZmlsZTsKICAgICAgX3JlYWRJblByb2dyZXNzID0gZmFsc2U7CiAgICAgIF9yZWFkQmxvY2soKTsKICAgIH0KCiAgICB2b2lkIG9uT3BlbkZpbGUoUmFuZG9tQWNjZXNzRmlsZSBmaWxlKSB7CiAgICAgIGlmIChfcG9zaXRpb24gPiAwKSB7CiAgICAgICAgZmlsZS5zZXRQb3NpdGlvbihfcG9zaXRpb24pLnRoZW4ob25SZWFkeSwgb25FcnJvcjogKGUsIHMpIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUsIHMpOwogICAgICAgICAgX3JlYWRJblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgICBfY2xvc2VGaWxlKCk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb25SZWFkeShmaWxlKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgb3BlbkZhaWxlZChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIF9jbG9zZUNvbXBsZXRlci5jb21wbGV0ZSgpOwogICAgfQoKICAgIGlmIChfcGF0aCAhPSBudWxsKSB7CiAgICAgIG5ldyBGaWxlKF9wYXRoKQogICAgICAgICAgLm9wZW4obW9kZTogRmlsZU1vZGUucmVhZCkKICAgICAgICAgIC50aGVuKG9uT3BlbkZpbGUsIG9uRXJyb3I6IG9wZW5GYWlsZWQpOwogICAgfSBlbHNlIHsKICAgICAgdHJ5IHsKICAgICAgICBvbk9wZW5GaWxlKF9GaWxlLl9vcGVuU3RkaW9TeW5jKDApKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIG9wZW5GYWlsZWQoZSwgcyk7CiAgICAgIH0KICAgIH0KICB9Cn0KCmNsYXNzIF9GaWxlU3RyZWFtQ29uc3VtZXIgZXh0ZW5kcyBTdHJlYW1Db25zdW1lcjxMaXN0PGludD4+IHsKICBGaWxlIF9maWxlOwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBfb3BlbkZ1dHVyZTsKCiAgX0ZpbGVTdHJlYW1Db25zdW1lcih0aGlzLl9maWxlLCBGaWxlTW9kZSBtb2RlKSB7CiAgICBfb3BlbkZ1dHVyZSA9IF9maWxlLm9wZW4obW9kZTogbW9kZSk7CiAgfQoKICBfRmlsZVN0cmVhbUNvbnN1bWVyLmZyb21TdGRpbyhpbnQgZmQpIHsKICAgIF9vcGVuRnV0dXJlID0gbmV3IEZ1dHVyZS52YWx1ZShfRmlsZS5fb3BlblN0ZGlvU3luYyhmZCkpOwogIH0KCiAgRnV0dXJlPEZpbGU+IGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pIHsKICAgIENvbXBsZXRlcjxGaWxlPiBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPEZpbGU+LnN5bmMoKTsKICAgIF9vcGVuRnV0dXJlLnRoZW4oKG9wZW5lZEZpbGUpIHsKICAgICAgdmFyIF9zdWJzY3JpcHRpb247CiAgICAgIHZvaWQgZXJyb3IoZSwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgICAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgIG9wZW5lZEZpbGUuY2xvc2UoKTsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihlLCBzdGFja1RyYWNlKTsKICAgICAgfQoKICAgICAgX3N1YnNjcmlwdGlvbiA9IHN0cmVhbS5saXN0ZW4oKGQpIHsKICAgICAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIG9wZW5lZEZpbGUKICAgICAgICAgICAgICAud3JpdGVGcm9tKGQsIDAsIGQubGVuZ3RoKQogICAgICAgICAgICAgIC50aGVuKChfKSA9PiBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpLCBvbkVycm9yOiBlcnJvcik7CiAgICAgICAgfSBjYXRjaCAoZSwgc3RhY2tUcmFjZSkgewogICAgICAgICAgZXJyb3IoZSwgc3RhY2tUcmFjZSk7CiAgICAgICAgfQogICAgICB9LCBvbkRvbmU6ICgpIHsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUoX2ZpbGUpOwogICAgICB9LCBvbkVycm9yOiBlcnJvciwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICB9KS5jYXRjaEVycm9yKGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKTsKICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgRnV0dXJlPEZpbGU+IGNsb3NlKCkgPT4KICAgICAgX29wZW5GdXR1cmUudGhlbigob3BlbmVkRmlsZSkgPT4gb3BlbmVkRmlsZS5jbG9zZSgpKS50aGVuKChfKSA9PiBfZmlsZSk7Cn0KCi8vIENsYXNzIGZvciBlbmNhcHN1bGF0aW5nIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgZmlsZXMuCmNsYXNzIF9GaWxlIGV4dGVuZHMgRmlsZVN5c3RlbUVudGl0eSBpbXBsZW1lbnRzIEZpbGUgewogIFN0cmluZyBfcGF0aDsKICBVaW50OExpc3QgX3Jhd1BhdGg7CgogIF9GaWxlKFN0cmluZyBwYXRoKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChwYXRoLCAncGF0aCcpOwogICAgX3BhdGggPSBwYXRoOwogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShwYXRoKTsKICB9CgogIF9GaWxlLmZyb21SYXdQYXRoKFVpbnQ4TGlzdCByYXdQYXRoKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChyYXdQYXRoLCAncmF3UGF0aCcpOwogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b051bGxUZXJtaW5hdGVkVXRmOEFycmF5KHJhd1BhdGgpOwogICAgX3BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1N0cmluZ0Zyb21VdGY4QXJyYXkocmF3UGF0aCk7CiAgfQoKICBTdHJpbmcgZ2V0IHBhdGggPT4gX3BhdGg7CgogIC8vIFdBUk5JTkc6CiAgLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgbmF0aXZlCiAgLy8gbmFtZXNwYWNlIG9iamVjdC4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHRvIHBhc3MgdGhlIHBvaW50ZXIgdG8gdGhlCiAgLy8gSU9TZXJ2aWNlLCB3aGljaCB3aWxsIGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IHdoZW4gaXQgaXMgZmluaXNoZWQKICAvLyB3aXRoIGl0LgogIHN0YXRpYyBpbnQgX25hbWVzcGFjZVBvaW50ZXIoKSA9PiBfTmFtZXNwYWNlLl9uYW1lc3BhY2VQb2ludGVyOwoKICBzdGF0aWMgRnV0dXJlIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoaW50IHJlcXVlc3QsIExpc3QgZGF0YSkgewogICAgZGF0YVswXSA9IF9uYW1lc3BhY2VQb2ludGVyKCk7CiAgICByZXR1cm4gX0lPU2VydmljZS5fZGlzcGF0Y2gocmVxdWVzdCwgZGF0YSk7CiAgfQoKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlRXhpc3RzLCBbbnVsbCwgX3Jhd1BhdGhdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiQ2Fubm90IGNoZWNrIGV4aXN0ZW5jZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9leGlzdHMoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgYm9vbCBleGlzdHNTeW5jKCkgewogICAgdmFyIHJlc3VsdCA9IF9leGlzdHMoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IGNoZWNrIGV4aXN0ZW5jZSBvZiBmaWxlIiwgcGF0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRmlsZSBnZXQgYWJzb2x1dGUgPT4gbmV3IEZpbGUoX2Fic29sdXRlUGF0aCk7CgogIEZ1dHVyZTxGaWxlPiBjcmVhdGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIHZhciByZXN1bHQgPQogICAgICAgIHJlY3Vyc2l2ZSA/IHBhcmVudC5jcmVhdGUocmVjdXJzaXZlOiB0cnVlKSA6IG5ldyBGdXR1cmUudmFsdWUobnVsbCk7CiAgICByZXR1cm4gcmVzdWx0CiAgICAgICAgLnRoZW4oKF8pID0+CiAgICAgICAgICAgIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlQ3JlYXRlLCBbbnVsbCwgX3Jhd1BhdGhdKSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIkNhbm5vdCBjcmVhdGUgZmlsZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2NyZWF0ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICBleHRlcm5hbCBzdGF0aWMgX2NyZWF0ZUxpbmsoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgU3RyaW5nIHRhcmdldCk7CgogIGV4dGVybmFsIHN0YXRpYyBfbGlua1RhcmdldChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICB2b2lkIGNyZWF0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcGFyZW50LmNyZWF0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfY3JlYXRlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBjcmVhdGUgZmlsZSIsIHBhdGgpOwogIH0KCiAgRnV0dXJlPEZpbGU+IF9kZWxldGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkocGF0aCkuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSkudGhlbigoXykgPT4gdGhpcyk7CiAgICB9CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmZpbGVEZWxldGUsIFtudWxsLCBfcmF3UGF0aF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDYW5ub3QgZGVsZXRlIGZpbGUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9kZWxldGVOYXRpdmUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgZXh0ZXJuYWwgc3RhdGljIF9kZWxldGVMaW5rTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CgogIHZvaWQgX2RlbGV0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkuZnJvbVJhd1BhdGgoX3Jhd1BhdGgpLmRlbGV0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfZGVsZXRlTmF0aXZlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBkZWxldGUgZmlsZSIsIHBhdGgpOwogIH0KCiAgRnV0dXJlPEZpbGU+IHJlbmFtZShTdHJpbmcgbmV3UGF0aCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlUmVuYW1lLCBbbnVsbCwgX3Jhd1BhdGgsIG5ld1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCByZW5hbWUgZmlsZSB0byAnJG5ld1BhdGgnIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBGaWxlKG5ld1BhdGgpOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX3JlbmFtZSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBvbGRQYXRoLCBTdHJpbmcgbmV3UGF0aCk7CgogIGV4dGVybmFsIHN0YXRpYyBfcmVuYW1lTGluaygKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBvbGRQYXRoLCBTdHJpbmcgbmV3UGF0aCk7CgogIEZpbGUgcmVuYW1lU3luYyhTdHJpbmcgbmV3UGF0aCkgewogICAgdmFyIHJlc3VsdCA9IF9yZW5hbWUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgbmV3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IHJlbmFtZSBmaWxlIHRvICckbmV3UGF0aCciLCBwYXRoKTsKICAgIHJldHVybiBuZXcgRmlsZShuZXdQYXRoKTsKICB9CgogIEZ1dHVyZTxGaWxlPiBjb3B5KFN0cmluZyBuZXdQYXRoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVDb3B5LCBbbnVsbCwgX3Jhd1BhdGgsIG5ld1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCBjb3B5IGZpbGUgdG8gJyRuZXdQYXRoJyIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRmlsZShuZXdQYXRoKTsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9jb3B5KAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IG9sZFBhdGgsIFN0cmluZyBuZXdQYXRoKTsKCiAgRmlsZSBjb3B5U3luYyhTdHJpbmcgbmV3UGF0aCkgewogICAgdmFyIHJlc3VsdCA9IF9jb3B5KF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIG5ld1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBjb3B5IGZpbGUgdG8gJyRuZXdQYXRoJyIsIHBhdGgpOwogICAgcmV0dXJuIG5ldyBGaWxlKG5ld1BhdGgpOwogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IG9wZW4oe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLnJlYWR9KSB7CiAgICBpZiAobW9kZSAhPSBGaWxlTW9kZS5yZWFkICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZSAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUuYXBwZW5kICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZU9ubHkgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlT25seUFwcGVuZCkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcigKICAgICAgICAgIG5ldyBBcmd1bWVudEVycm9yKCdJbnZhbGlkIGZpbGUgbW9kZSBmb3IgdGhpcyBvcGVyYXRpb24nKSk7CiAgICB9CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVPcGVuLCBbbnVsbCwgX3Jhd1BhdGgsIG1vZGUuX21vZGVdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiQ2Fubm90IG9wZW4gZmlsZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgX1JhbmRvbUFjY2Vzc0ZpbGUocmVzcG9uc2UsIHBhdGgpOwogICAgfSk7CiAgfQoKICBGdXR1cmU8aW50PiBsZW5ndGgoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVMZW5ndGhGcm9tUGF0aCwgW251bGwsIF9yYXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgcmV0cmlldmUgbGVuZ3RoIG9mIGZpbGUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfbGVuZ3RoRnJvbVBhdGgoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgaW50IGxlbmd0aFN5bmMoKSB7CiAgICB2YXIgcmVzdWx0ID0gX2xlbmd0aEZyb21QYXRoKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCByZXRyaWV2ZSBsZW5ndGggb2YgZmlsZSIsIHBhdGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxEYXRlVGltZT4gbGFzdEFjY2Vzc2VkKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlTGFzdEFjY2Vzc2VkLCBbbnVsbCwgX3Jhd1BhdGhdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCByZXRyaWV2ZSBhY2Nlc3MgdGltZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2gocmVzcG9uc2UpOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2xhc3RBY2Nlc3NlZChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICBEYXRlVGltZSBsYXN0QWNjZXNzZWRTeW5jKCkgewogICAgdmFyIG1zID0gX2xhc3RBY2Nlc3NlZChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihtcywgIkNhbm5vdCByZXRyaWV2ZSBhY2Nlc3MgdGltZSIsIHBhdGgpOwogICAgcmV0dXJuIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChtcyk7CiAgfQoKICBGdXR1cmUgc2V0TGFzdEFjY2Vzc2VkKERhdGVUaW1lIHRpbWUpIHsKICAgIGludCBtaWxsaXMgPSB0aW1lLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICAgICAgX0lPU2VydmljZS5maWxlU2V0TGFzdEFjY2Vzc2VkLCBbbnVsbCwgX3Jhd1BhdGgsIG1pbGxpc10pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDYW5ub3Qgc2V0IGFjY2VzcyB0aW1lIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfc2V0TGFzdEFjY2Vzc2VkKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGludCBtaWxsaXMpOwoKICB2b2lkIHNldExhc3RBY2Nlc3NlZFN5bmMoRGF0ZVRpbWUgdGltZSkgewogICAgaW50IG1pbGxpcyA9IHRpbWUubWlsbGlzZWNvbmRzU2luY2VFcG9jaDsKICAgIHZhciByZXN1bHQgPSBfc2V0TGFzdEFjY2Vzc2VkKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIG1pbGxpcyk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiRmFpbGVkIHRvIHNldCBmaWxlIGFjY2VzcyB0aW1lIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIEZ1dHVyZTxEYXRlVGltZT4gbGFzdE1vZGlmaWVkKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlTGFzdE1vZGlmaWVkLCBbbnVsbCwgX3Jhd1BhdGhdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCByZXRyaWV2ZSBtb2RpZmljYXRpb24gdGltZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2gocmVzcG9uc2UpOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2xhc3RNb2RpZmllZChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICBEYXRlVGltZSBsYXN0TW9kaWZpZWRTeW5jKCkgewogICAgdmFyIG1zID0gX2xhc3RNb2RpZmllZChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihtcywgIkNhbm5vdCByZXRyaWV2ZSBtb2RpZmljYXRpb24gdGltZSIsIHBhdGgpOwogICAgcmV0dXJuIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChtcyk7CiAgfQoKICBGdXR1cmUgc2V0TGFzdE1vZGlmaWVkKERhdGVUaW1lIHRpbWUpIHsKICAgIGludCBtaWxsaXMgPSB0aW1lLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICAgICAgX0lPU2VydmljZS5maWxlU2V0TGFzdE1vZGlmaWVkLCBbbnVsbCwgX3Jhd1BhdGgsIG1pbGxpc10pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IHNldCBtb2RpZmljYXRpb24gdGltZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX3NldExhc3RNb2RpZmllZCgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBpbnQgbWlsbGlzKTsKCiAgdm9pZCBzZXRMYXN0TW9kaWZpZWRTeW5jKERhdGVUaW1lIHRpbWUpIHsKICAgIGludCBtaWxsaXMgPSB0aW1lLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CiAgICB2YXIgcmVzdWx0ID0gX3NldExhc3RNb2RpZmllZChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBtaWxsaXMpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkZhaWxlZCB0byBzZXQgZmlsZSBtb2RpZmljYXRpb24gdGltZSIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX29wZW4oX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBpbnQgbW9kZSk7CgogIFJhbmRvbUFjY2Vzc0ZpbGUgb3BlblN5bmMoe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLnJlYWR9KSB7CiAgICBpZiAobW9kZSAhPSBGaWxlTW9kZS5yZWFkICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZSAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUuYXBwZW5kICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZU9ubHkgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlT25seUFwcGVuZCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignSW52YWxpZCBmaWxlIG1vZGUgZm9yIHRoaXMgb3BlcmF0aW9uJyk7CiAgICB9CiAgICB2YXIgaWQgPSBfb3BlbihfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBtb2RlLl9tb2RlKTsKICAgIHRocm93SWZFcnJvcihpZCwgIkNhbm5vdCBvcGVuIGZpbGUiLCBwYXRoKTsKICAgIHJldHVybiBuZXcgX1JhbmRvbUFjY2Vzc0ZpbGUoaWQsIF9wYXRoKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBpbnQgX29wZW5TdGRpbyhpbnQgZmQpOwoKICBzdGF0aWMgUmFuZG9tQWNjZXNzRmlsZSBfb3BlblN0ZGlvU3luYyhpbnQgZmQpIHsKICAgIHZhciBpZCA9IF9vcGVuU3RkaW8oZmQpOwogICAgaWYgKGlkID09IDApIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkNhbm5vdCBvcGVuIHN0ZGlvIGZpbGUgZm9yOiAkZmQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1JhbmRvbUFjY2Vzc0ZpbGUoaWQsICIiKTsKICB9CgogIFN0cmVhbTxMaXN0PGludD4+IG9wZW5SZWFkKFtpbnQgc3RhcnQsIGludCBlbmRdKSB7CiAgICByZXR1cm4gbmV3IF9GaWxlU3RyZWFtKHBhdGgsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSU9TaW5rIG9wZW5Xcml0ZSh7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsIEVuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgewogICAgaWYgKG1vZGUgIT0gRmlsZU1vZGUud3JpdGUgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLmFwcGVuZCAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUud3JpdGVPbmx5ICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZU9ubHlBcHBlbmQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgZmlsZSBtb2RlIGZvciB0aGlzIG9wZXJhdGlvbicpOwogICAgfQogICAgdmFyIGNvbnN1bWVyID0gbmV3IF9GaWxlU3RyZWFtQ29uc3VtZXIodGhpcywgbW9kZSk7CiAgICByZXR1cm4gbmV3IElPU2luayhjb25zdW1lciwgZW5jb2Rpbmc6IGVuY29kaW5nKTsKICB9CgogIEZ1dHVyZTxVaW50OExpc3Q+IHJlYWRBc0J5dGVzKCkgewogICAgRnV0dXJlPFVpbnQ4TGlzdD4gcmVhZERhdGFDaHVua2VkKFJhbmRvbUFjY2Vzc0ZpbGUgZmlsZSkgewogICAgICB2YXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwogICAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxVaW50OExpc3Q+KCk7CiAgICAgIHZvaWQgcmVhZCgpIHsKICAgICAgICBmaWxlLnJlYWQoX2Jsb2NrU2l6ZSkudGhlbigoZGF0YSkgewogICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkgewogICAgICAgICAgICBidWlsZGVyLmFkZChkYXRhKTsKICAgICAgICAgICAgcmVhZCgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGJ1aWxkZXIudGFrZUJ5dGVzKCkpOwogICAgICAgICAgfQogICAgICAgIH0sIG9uRXJyb3I6IGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKTsKICAgICAgfQoKICAgICAgcmVhZCgpOwogICAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICAgIH0KCiAgICByZXR1cm4gb3BlbigpLnRoZW4oKGZpbGUpIHsKICAgICAgcmV0dXJuIGZpbGUubGVuZ3RoKCkudGhlbigobGVuZ3RoKSB7CiAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAvLyBNYXkgYmUgY2hhcmFjdGVyIGRldmljZSwgdHJ5IHRvIHJlYWQgaXQgaW4gY2h1bmtzLgogICAgICAgICAgcmV0dXJuIHJlYWREYXRhQ2h1bmtlZChmaWxlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZpbGUucmVhZChsZW5ndGgpOwogICAgICB9KS53aGVuQ29tcGxldGUoZmlsZS5jbG9zZSk7CiAgICB9KTsKICB9CgogIFVpbnQ4TGlzdCByZWFkQXNCeXRlc1N5bmMoKSB7CiAgICB2YXIgb3BlbmVkID0gb3BlblN5bmMoKTsKICAgIHRyeSB7CiAgICAgIFVpbnQ4TGlzdCBkYXRhOwogICAgICB2YXIgbGVuZ3RoID0gb3BlbmVkLmxlbmd0aFN5bmMoKTsKICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgLy8gTWF5IGJlIGNoYXJhY3RlciBkZXZpY2UsIHRyeSB0byByZWFkIGl0IGluIGNodW5rcy4KICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwogICAgICAgIGRvIHsKICAgICAgICAgIGRhdGEgPSBvcGVuZWQucmVhZFN5bmMoX2Jsb2NrU2l6ZSk7CiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSBidWlsZGVyLmFkZChkYXRhKTsKICAgICAgICB9IHdoaWxlIChkYXRhLmxlbmd0aCA+IDApOwogICAgICAgIGRhdGEgPSBidWlsZGVyLnRha2VCeXRlcygpOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEgPSBvcGVuZWQucmVhZFN5bmMobGVuZ3RoKTsKICAgICAgfQogICAgICByZXR1cm4gZGF0YTsKICAgIH0gZmluYWxseSB7CiAgICAgIG9wZW5lZC5jbG9zZVN5bmMoKTsKICAgIH0KICB9CgogIFN0cmluZyBfdHJ5RGVjb2RlKExpc3Q8aW50PiBieXRlcywgRW5jb2RpbmcgZW5jb2RpbmcpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBlbmNvZGluZy5kZWNvZGUoYnl0ZXMpOwogICAgfSBjYXRjaCAoXykgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJGYWlsZWQgdG8gZGVjb2RlIGRhdGEgdXNpbmcgZW5jb2RpbmcgJyR7ZW5jb2RpbmcubmFtZX0nIiwgcGF0aCk7CiAgICB9CiAgfQoKICBGdXR1cmU8U3RyaW5nPiByZWFkQXNTdHJpbmcoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgewogICAgLy8gVE9ETyhkYXJ0OmlvKTogSWYgdGhlIGNoYW5nZSBpbiBhc3luYyBzZW1hbnRpY3MgdG8gcnVuIHN5bmNocm9ub3VzbHkKICAgIC8vIHVudGlsIGF3YWl0IGxhbmRzLCB0aGlzIGlzIGFzIGVmZmljaWVudCBhcwogICAgLy8gcmV0dXJuIF90cnlEZWNvZGUoYXdhaXQgcmVhZEFzQnl0ZXMoKSwgZW5jb2RpbmcpOwogICAgdmFyIHN0YWNrID0gU3RhY2tUcmFjZS5jdXJyZW50OwogICAgcmV0dXJuIHJlYWRBc0J5dGVzKCkudGhlbigoYnl0ZXMpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gX3RyeURlY29kZShieXRlcywgZW5jb2RpbmcpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZSwgc3RhY2spOwogICAgICB9CiAgICB9KTsKICB9CgogIFN0cmluZyByZWFkQXNTdHJpbmdTeW5jKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pID0+CiAgICAgIF90cnlEZWNvZGUocmVhZEFzQnl0ZXNTeW5jKCksIGVuY29kaW5nKTsKCiAgRnV0dXJlPExpc3Q8U3RyaW5nPj4gcmVhZEFzTGluZXMoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgPT4KICAgICAgcmVhZEFzU3RyaW5nKGVuY29kaW5nOiBlbmNvZGluZykudGhlbihjb25zdCBMaW5lU3BsaXR0ZXIoKS5jb252ZXJ0KTsKCiAgTGlzdDxTdHJpbmc+IHJlYWRBc0xpbmVzU3luYyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KSA9PgogICAgICBjb25zdCBMaW5lU3BsaXR0ZXIoKS5jb252ZXJ0KHJlYWRBc1N0cmluZ1N5bmMoZW5jb2Rpbmc6IGVuY29kaW5nKSk7CgogIEZ1dHVyZTxGaWxlPiB3cml0ZUFzQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsIGJvb2wgZmx1c2g6IGZhbHNlfSkgewogICAgcmV0dXJuIG9wZW4obW9kZTogbW9kZSkudGhlbigoZmlsZSkgewogICAgICByZXR1cm4gZmlsZS53cml0ZUZyb20oYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCkudGhlbjxGaWxlPigoXykgewogICAgICAgIGlmIChmbHVzaCkgcmV0dXJuIGZpbGUuZmx1c2goKS50aGVuKChfKSA9PiB0aGlzKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSkud2hlbkNvbXBsZXRlKGZpbGUuY2xvc2UpOwogICAgfSk7CiAgfQoKICB2b2lkIHdyaXRlQXNCeXRlc1N5bmMoTGlzdDxpbnQ+IGJ5dGVzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsIGJvb2wgZmx1c2g6IGZhbHNlfSkgewogICAgUmFuZG9tQWNjZXNzRmlsZSBvcGVuZWQgPSBvcGVuU3luYyhtb2RlOiBtb2RlKTsKICAgIHRyeSB7CiAgICAgIG9wZW5lZC53cml0ZUZyb21TeW5jKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpOwogICAgICBpZiAoZmx1c2gpIG9wZW5lZC5mbHVzaFN5bmMoKTsKICAgIH0gZmluYWxseSB7CiAgICAgIG9wZW5lZC5jbG9zZVN5bmMoKTsKICAgIH0KICB9CgogIEZ1dHVyZTxGaWxlPiB3cml0ZUFzU3RyaW5nKFN0cmluZyBjb250ZW50cywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLAogICAgICBFbmNvZGluZyBlbmNvZGluZzogdXRmOCwKICAgICAgYm9vbCBmbHVzaDogZmFsc2V9KSB7CiAgICB0cnkgewogICAgICByZXR1cm4gd3JpdGVBc0J5dGVzKGVuY29kaW5nLmVuY29kZShjb250ZW50cyksIG1vZGU6IG1vZGUsIGZsdXNoOiBmbHVzaCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUFzU3RyaW5nU3luYyhTdHJpbmcgY29udGVudHMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwKICAgICAgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0ZjgsCiAgICAgIGJvb2wgZmx1c2g6IGZhbHNlfSkgewogICAgd3JpdGVBc0J5dGVzU3luYyhlbmNvZGluZy5lbmNvZGUoY29udGVudHMpLCBtb2RlOiBtb2RlLCBmbHVzaDogZmx1c2gpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkZpbGU6ICckcGF0aCciOwoKICBzdGF0aWMgdGhyb3dJZkVycm9yKE9iamVjdCByZXN1bHQsIFN0cmluZyBtc2csIFN0cmluZyBwYXRoKSB7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obXNnLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMgewogIGV4dGVybmFsIGZhY3RvcnkgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMoaW50IHBvaW50ZXIpOwoKICBpbnQgZ2V0UG9pbnRlcigpOwogIGludCBjbG9zZSgpOwogIHJlYWRCeXRlKCk7CiAgcmVhZChpbnQgYnl0ZXMpOwogIHJlYWRJbnRvKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCk7CiAgd3JpdGVCeXRlKGludCB2YWx1ZSk7CiAgd3JpdGVGcm9tKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCk7CiAgcG9zaXRpb24oKTsKICBzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pOwogIHRydW5jYXRlKGludCBsZW5ndGgpOwogIGxlbmd0aCgpOwogIGZsdXNoKCk7CiAgbG9jayhpbnQgbG9jaywgaW50IHN0YXJ0LCBpbnQgZW5kKTsKfQoKY2xhc3MgX1JhbmRvbUFjY2Vzc0ZpbGUgaW1wbGVtZW50cyBSYW5kb21BY2Nlc3NGaWxlIHsKICBzdGF0aWMgYm9vbCBfY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gZmFsc2U7CgogIGZpbmFsIFN0cmluZyBwYXRoOwoKICBib29sIF9hc3luY0Rpc3BhdGNoZWQgPSBmYWxzZTsKICBTZW5kUG9ydCBfZmlsZVNlcnZpY2U7CgogIF9GaWxlUmVzb3VyY2VJbmZvIF9yZXNvdXJjZUluZm87CiAgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMgX29wczsKCiAgX1JhbmRvbUFjY2Vzc0ZpbGUoaW50IHBvaW50ZXIsIHRoaXMucGF0aCkgewogICAgX29wcyA9IG5ldyBfUmFuZG9tQWNjZXNzRmlsZU9wcyhwb2ludGVyKTsKICAgIF9yZXNvdXJjZUluZm8gPSBuZXcgX0ZpbGVSZXNvdXJjZUluZm8odGhpcyk7CiAgICBfbWF5YmVDb25uZWN0SGFuZGxlcigpOwogIH0KCiAgdm9pZCBfbWF5YmVQZXJmb3JtQ2xlYW51cCgpIHsKICAgIGlmIChjbG9zZWQpIHsKICAgICAgX0ZpbGVSZXNvdXJjZUluZm8uRmlsZUNsb3NlZChfcmVzb3VyY2VJbmZvKTsKICAgIH0KICB9CgogIF9tYXliZUNvbm5lY3RIYW5kbGVyKCkgewogICAgaWYgKCFfY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyKSB7CiAgICAgIC8vIFRPRE8ocmljb3cpOiBXZSBwcm9iYWJseSBuZWVkIHRvIHNldCB0aGVzZSBpbiBzb21lIGluaXRpYWxpemF0aW9uIGNvZGUuCiAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsd2F5cyBhdmFpbGFibGUgZnJvbSB0aGUKICAgICAgLy8gb2JzZXJ2YXRvcnkgZXZlbiBpZiBubyBmaWxlcyAob3Igc29ja2V0cyBmb3IgdGhlIHNvY2tldCBvbmVzKSBhcmUKICAgICAgLy8gb3Blbi4KICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oCiAgICAgICAgICAnZXh0LmRhcnQuaW8uZ2V0T3BlbkZpbGVzJywgX0ZpbGVSZXNvdXJjZUluZm8uZ2V0T3BlbkZpbGVzKTsKICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oCiAgICAgICAgICAnZXh0LmRhcnQuaW8uZ2V0RmlsZUJ5SUQnLCBfRmlsZVJlc291cmNlSW5mby5nZXRGaWxlSW5mb01hcEJ5SUQpOwogICAgICBfY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gdHJ1ZTsKICAgIH0KICB9CgogIEZ1dHVyZTx2b2lkPiBjbG9zZSgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlQ2xvc2UsIFtudWxsXSwgbWFya0Nsb3NlZDogdHJ1ZSkKICAgICAgICAudGhlbigocmVzdWx0KSB7CiAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKICAgICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiQ2Fubm90IGNsb3NlIGZpbGUiLCBwYXRoKTsKICAgICAgfQogICAgICBjbG9zZWQgPSBjbG9zZWQgfHwgKHJlc3VsdCA9PSAwKTsKICAgICAgX21heWJlUGVyZm9ybUNsZWFudXAoKTsKICAgIH0pOwogIH0KCiAgdm9pZCBjbG9zZVN5bmMoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciBpZCA9IF9vcHMuY2xvc2UoKTsKICAgIGlmIChpZCA9PSAtMSkgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiQ2Fubm90IGNsb3NlIGZpbGUiLCBwYXRoKTsKICAgIH0KICAgIGNsb3NlZCA9IGNsb3NlZCB8fCAoaWQgPT0gMCk7CiAgICBfbWF5YmVQZXJmb3JtQ2xlYW51cCgpOwogIH0KCiAgRnV0dXJlPGludD4gcmVhZEJ5dGUoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVJlYWRCeXRlLCBbbnVsbF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJyZWFkQnl0ZSBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICBfcmVzb3VyY2VJbmZvLmFkZFJlYWQoMSk7CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgaW50IHJlYWRCeXRlU3luYygpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMucmVhZEJ5dGUoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigicmVhZEJ5dGUgZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIF9yZXNvdXJjZUluZm8uYWRkUmVhZCgxKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8VWludDhMaXN0PiByZWFkKGludCBieXRlcykgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoYnl0ZXMsICdieXRlcycpOwogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVSZWFkLCBbbnVsbCwgYnl0ZXNdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAicmVhZCBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICBfcmVzb3VyY2VJbmZvLmFkZFJlYWQocmVzcG9uc2VbMV0ubGVuZ3RoKTsKICAgICAgVWludDhMaXN0IHJlc3VsdCA9IHJlc3BvbnNlWzFdOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSk7CiAgfQoKICBVaW50OExpc3QgcmVhZFN5bmMoaW50IGJ5dGVzKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGJ5dGVzLCAnYnl0ZXMnKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLnJlYWQoYnl0ZXMpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJyZWFkU3luYyBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgX3Jlc291cmNlSW5mby5hZGRSZWFkKHJlc3VsdC5sZW5ndGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxpbnQ+IHJlYWRJbnRvKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaWYgKChidWZmZXIgaXMhIExpc3QpIHx8CiAgICAgICAgKChzdGFydCAhPSBudWxsKSAmJiAoc3RhcnQgaXMhIGludCkpIHx8CiAgICAgICAgKChlbmQgIT0gbnVsbCkgJiYgKGVuZCBpcyEgaW50KSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGVuZCA9PSBzdGFydCkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSgwKTsKICAgIH0KICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlUmVhZEludG8sIFtudWxsLCBsZW5ndGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAicmVhZEludG8gZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgaW50IHJlYWQgPSByZXNwb25zZVsxXTsKICAgICAgTGlzdDxpbnQ+IGRhdGEgPSByZXNwb25zZVsyXTsKICAgICAgYnVmZmVyLnNldFJhbmdlKHN0YXJ0LCBzdGFydCArIHJlYWQsIGRhdGEpOwogICAgICBfcmVzb3VyY2VJbmZvLmFkZFJlYWQocmVhZCk7CiAgICAgIHJldHVybiByZWFkOwogICAgfSk7CiAgfQoKICBpbnQgcmVhZEludG9TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoKGJ1ZmZlciBpcyEgTGlzdCkgfHwKICAgICAgICAoKHN0YXJ0ICE9IG51bGwpICYmIChzdGFydCBpcyEgaW50KSkgfHwKICAgICAgICAoKGVuZCAhPSBudWxsKSAmJiAoZW5kIGlzISBpbnQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9vcHMucmVhZEludG8oYnVmZmVyLCBzdGFydCwgZW5kKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigicmVhZEludG8gZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIF9yZXNvdXJjZUluZm8uYWRkUmVhZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB3cml0ZUJ5dGUoaW50IHZhbHVlKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbCh2YWx1ZSwgJ3ZhbHVlJyk7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVdyaXRlQnl0ZSwgW251bGwsIHZhbHVlXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIndyaXRlQnl0ZSBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICBfcmVzb3VyY2VJbmZvLmFkZFdyaXRlKDEpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgaW50IHdyaXRlQnl0ZVN5bmMoaW50IHZhbHVlKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHZhbHVlLCAndmFsdWUnKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLndyaXRlQnl0ZSh2YWx1ZSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIndyaXRlQnl0ZSBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgX3Jlc291cmNlSW5mby5hZGRXcml0ZSgxKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gd3JpdGVGcm9tKExpc3Q8aW50PiBidWZmZXIsCiAgICAgIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaWYgKChidWZmZXIgaXMhIExpc3QpIHx8CiAgICAgICAgKChzdGFydCAhPSBudWxsKSAmJiAoc3RhcnQgaXMhIGludCkpIHx8CiAgICAgICAgKChlbmQgIT0gbnVsbCkgJiYgKGVuZCBpcyEgaW50KSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlRnJvbSIpOwogICAgfQogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKHRoaXMpOwogICAgfQogICAgX0J1ZmZlckFuZFN0YXJ0IHJlc3VsdDsKICAgIHRyeSB7CiAgICAgIHJlc3VsdCA9IF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoYnVmZmVyLCBzdGFydCwgZW5kKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZSk7CiAgICB9CgogICAgTGlzdCByZXF1ZXN0ID0gbmV3IExpc3QoNCk7CiAgICByZXF1ZXN0WzBdID0gbnVsbDsKICAgIHJlcXVlc3RbMV0gPSByZXN1bHQuYnVmZmVyOwogICAgcmVxdWVzdFsyXSA9IHJlc3VsdC5zdGFydDsKICAgIHJlcXVlc3RbM10gPSBlbmQgLSAoc3RhcnQgLSByZXN1bHQuc3RhcnQpOwogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVXcml0ZUZyb20sIHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJ3cml0ZUZyb20gZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgX3Jlc291cmNlSW5mby5hZGRXcml0ZShlbmQgLSAoc3RhcnQgLSByZXN1bHQuc3RhcnQpKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgd3JpdGVGcm9tU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgaWYgKChidWZmZXIgaXMhIExpc3QpIHx8CiAgICAgICAgKChzdGFydCAhPSBudWxsKSAmJiAoc3RhcnQgaXMhIGludCkpIHx8CiAgICAgICAgKChlbmQgIT0gbnVsbCkgJiYgKGVuZCBpcyEgaW50KSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlRnJvbVN5bmMiKTsKICAgIH0KICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGVuZCA9PSBzdGFydCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBfQnVmZmVyQW5kU3RhcnQgYnVmZmVyQW5kU3RhcnQgPQogICAgICAgIF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoYnVmZmVyLCBzdGFydCwgZW5kKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLndyaXRlRnJvbShidWZmZXJBbmRTdGFydC5idWZmZXIsIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0LAogICAgICAgIGVuZCAtIChzdGFydCAtIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0KSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIndyaXRlRnJvbSBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgX3Jlc291cmNlSW5mby5hZGRXcml0ZShlbmQgLSAoc3RhcnQgLSBidWZmZXJBbmRTdGFydC5zdGFydCkpOwogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHdyaXRlU3RyaW5nKFN0cmluZyBzdHJpbmcsCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGVuY29kaW5nLCAnZW5jb2RpbmcnKTsKICAgIHZhciBkYXRhID0gZW5jb2RpbmcuZW5jb2RlKHN0cmluZyk7CiAgICByZXR1cm4gd3JpdGVGcm9tKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsKICB9CgogIHZvaWQgd3JpdGVTdHJpbmdTeW5jKFN0cmluZyBzdHJpbmcsIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGVuY29kaW5nLCAnZW5jb2RpbmcnKTsKICAgIHZhciBkYXRhID0gZW5jb2RpbmcuZW5jb2RlKHN0cmluZyk7CiAgICB3cml0ZUZyb21TeW5jKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsKICB9CgogIEZ1dHVyZTxpbnQ+IHBvc2l0aW9uKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVQb3NpdGlvbiwgW251bGxdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAicG9zaXRpb24gZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICBpbnQgcG9zaXRpb25TeW5jKCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy5wb3NpdGlvbigpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJwb3NpdGlvbiBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pIHsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlU2V0UG9zaXRpb24sIFtudWxsLCBwb3NpdGlvbl0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJzZXRQb3NpdGlvbiBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBzZXRQb3NpdGlvblN5bmMoaW50IHBvc2l0aW9uKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigic2V0UG9zaXRpb24gZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB0cnVuY2F0ZShpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVRydW5jYXRlLCBbbnVsbCwgbGVuZ3RoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgInRydW5jYXRlIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIHRydW5jYXRlU3luYyhpbnQgbGVuZ3RoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLnRydW5jYXRlKGxlbmd0aCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oInRydW5jYXRlIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBGdXR1cmU8aW50PiBsZW5ndGgoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZUxlbmd0aCwgW251bGxdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAibGVuZ3RoIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgaW50IGxlbmd0aFN5bmMoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLmxlbmd0aCgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJsZW5ndGggZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gZmx1c2goKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZUZsdXNoLCBbbnVsbF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJmbHVzaCBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBmbHVzaFN5bmMoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLmZsdXNoKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oImZsdXNoIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IGxvY2tVbmxvY2sgPSAwOwogIC8vIHN0YXRpYyBjb25zdCBpbnQgbG9ja1NoYXJlZCA9IDE7CiAgLy8gc3RhdGljIGNvbnN0IGludCBsb2NrRXhjbHVzaXZlID0gMjsKICAvLyBzdGF0aWMgY29uc3QgaW50IGxvY2tCbG9ja2luZ1NoYXJlZCA9IDM7CiAgLy8gc3RhdGljIGNvbnN0IGludCBsb2NrQmxvY2tpbmdFeGNsdXNpdmUgPSA0OwoKICBpbnQgX2ZpbGVMb2NrVmFsdWUoRmlsZUxvY2sgZmwpID0+IGZsLl90eXBlOwoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gbG9jaygKICAgICAgW0ZpbGVMb2NrIG1vZGUgPSBGaWxlTG9jay5leGNsdXNpdmUsIGludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pIHsKICAgIGlmICgobW9kZSBpcyEgRmlsZUxvY2spIHx8IChzdGFydCBpcyEgaW50KSB8fCAoZW5kIGlzISBpbnQpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBpZiAoKHN0YXJ0IDwgMCkgfHwgKGVuZCA8IC0xKSB8fCAoKGVuZCAhPSAtMSkgJiYgKHN0YXJ0ID49IGVuZCkpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBpbnQgbG9jayA9IF9maWxlTG9ja1ZhbHVlKG1vZGUpOwogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVMb2NrLCBbbnVsbCwgbG9jaywgc3RhcnQsIGVuZF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICdsb2NrIGZhaWxlZCcsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gdW5sb2NrKFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKSB7CiAgICBpZiAoKHN0YXJ0IGlzISBpbnQpIHx8IChlbmQgaXMhIGludCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlTG9jaywgW251bGwsIGxvY2tVbmxvY2ssIHN0YXJ0LCBlbmRdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAndW5sb2NrIGZhaWxlZCcsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIGxvY2tTeW5jKAogICAgICBbRmlsZUxvY2sgbW9kZSA9IEZpbGVMb2NrLmV4Y2x1c2l2ZSwgaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoKG1vZGUgaXMhIEZpbGVMb2NrKSB8fCAoc3RhcnQgaXMhIGludCkgfHwgKGVuZCBpcyEgaW50KSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgaWYgKChzdGFydCA8IDApIHx8IChlbmQgPCAtMSkgfHwgKChlbmQgIT0gLTEpICYmIChzdGFydCA+PSBlbmQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgaW50IGxvY2sgPSBfZmlsZUxvY2tWYWx1ZShtb2RlKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLmxvY2sobG9jaywgc3RhcnQsIGVuZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oJ2xvY2sgZmFpbGVkJywgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIHZvaWQgdW5sb2NrU3luYyhbaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoKHN0YXJ0IGlzISBpbnQpIHx8IChlbmQgaXMhIGludCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfb3BzLmxvY2sobG9ja1VubG9jaywgc3RhcnQsIGVuZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oJ3VubG9jayBmYWlsZWQnLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgYm9vbCBjbG9zZWQgPSBmYWxzZTsKCiAgLy8gV0FSTklORzoKICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBuYXRpdmUKICAvLyBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBmaWxlIG9wZXJhdGlvbnMuIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB0bwogIC8vIHBhc3MgdGhlIHBvaW50ZXIgdG8gdGhlIElPIFNlcnZpY2UsIHdoaWNoIHdpbGwgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UKICAvLyBjb3VudCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggaXQuCiAgaW50IF9wb2ludGVyKCkgPT4gX29wcy5nZXRQb2ludGVyKCk7CgogIEZ1dHVyZSBfZGlzcGF0Y2goaW50IHJlcXVlc3QsIExpc3QgZGF0YSwge2Jvb2wgbWFya0Nsb3NlZDogZmFsc2V9KSB7CiAgICBpZiAoY2xvc2VkKSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJGaWxlIGNsb3NlZCIsIHBhdGgpKTsKICAgIH0KICAgIGlmIChfYXN5bmNEaXNwYXRjaGVkKSB7CiAgICAgIHZhciBtc2cgPSAiQW4gYXN5bmMgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBwZW5kaW5nIjsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IobmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obXNnLCBwYXRoKSk7CiAgICB9CiAgICBpZiAobWFya0Nsb3NlZCkgewogICAgICAvLyBTZXQgY2xvc2VkIHRvIHRydWUgdG8gZW5zdXJlIHRoYXQgbm8gbW9yZSBhc3luYyByZXF1ZXN0cyBjYW4gYmUgaXNzdWVkCiAgICAgIC8vIGZvciB0aGlzIGZpbGUuCiAgICAgIGNsb3NlZCA9IHRydWU7CiAgICB9CiAgICBfYXN5bmNEaXNwYXRjaGVkID0gdHJ1ZTsKICAgIGRhdGFbMF0gPSBfcG9pbnRlcigpOwogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKHJlcXVlc3QsIGRhdGEpLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgIF9hc3luY0Rpc3BhdGNoZWQgPSBmYWxzZTsKICAgIH0pOwogIH0KCiAgdm9pZCBfY2hlY2tBdmFpbGFibGUoKSB7CiAgICBpZiAoX2FzeW5jRGlzcGF0Y2hlZCkgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJBbiBhc3luYyBvcGVyYXRpb24g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aXR5VHlwZS5faW50ZXJuYWwoMCk7CiAgQERlcHJlY2F0ZWQoIlVzZSBmaWxlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBGSUxFID0gZmlsZTsKCiAgc3RhdGljIGNvbnN0IGRpcmVjdG9yeSA9IGNvbnN0IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9pbnRlcm5hbCgxKTsKICBARGVwcmVjYXRlZCgiVXNlIGRpcmVjdG9yeSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgRElSRUNUT1JZID0gZGlyZWN0b3J5OwoKICBzdGF0aWMgY29uc3QgbGluayA9IGNvbnN0IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9pbnRlcm5hbCgyKTsKICBARGVwcmVjYXRlZCgiVXNlIGxpbmsgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IExJTksgPSBsaW5rOwoKICBzdGF0aWMgY29uc3Qgbm90Rm91bmQgPSBjb25zdCBGaWxlU3lzdGVtRW50aXR5VHlwZS5faW50ZXJuYWwoMyk7CiAgQERlcHJlY2F0ZWQoIlVzZSBub3RGb3VuZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgTk9UX0ZPVU5EID0gbm90Rm91bmQ7CgogIHN0YXRpYyBjb25zdCBfdHlwZUxpc3QgPSBjb25zdCBbCiAgICBGaWxlU3lzdGVtRW50aXR5VHlwZS5maWxlLAogICAgRmlsZVN5c3RlbUVudGl0eVR5cGUuZGlyZWN0b3J5LAogICAgRmlsZVN5c3RlbUVudGl0eVR5cGUubGluaywKICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kLAogIF07CiAgZmluYWwgaW50IF90eXBlOwoKICBjb25zdCBGaWxlU3lzdGVtRW50aXR5VHlwZS5faW50ZXJuYWwodGhpcy5fdHlwZSk7CgogIHN0YXRpYyBGaWxlU3lzdGVtRW50aXR5VHlwZSBfbG9va3VwKGludCB0eXBlKSA9PiBfdHlwZUxpc3RbdHlwZV07CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gY29uc3QgWydmaWxlJywgJ2RpcmVjdG9yeScsICdsaW5rJywgJ25vdEZvdW5kJ11bX3R5cGVdOwp9CgovKioKICogQSBGaWxlU3RhdCBvYmplY3QgcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFBPU0lYIHN0YXQoKSBmdW5jdGlvbgogKiBvbiBhIGZpbGUgc3lzdGVtIG9iamVjdC4gIEl0IGlzIGFuIGltbXV0YWJsZSBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUKICogc25hcHNob3R0ZWQgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBzdGF0KCkgY2FsbC4KICovCmNsYXNzIEZpbGVTdGF0IHsKICAvLyBUaGVzZSBtdXN0IGFncmVlIHdpdGggZW51bSBGaWxlU3RhdCBpbiBmaWxlLmguCiAgc3RhdGljIGNvbnN0IF90eXBlID0gMDsKICBzdGF0aWMgY29uc3QgX2NoYW5nZWRUaW1lID0gMTsKICBzdGF0aWMgY29uc3QgX21vZGlmaWVkVGltZSA9IDI7CiAgc3RhdGljIGNvbnN0IF9hY2Nlc3NlZFRpbWUgPSAzOwogIHN0YXRpYyBjb25zdCBfbW9kZSA9IDQ7CiAgc3RhdGljIGNvbnN0IF9zaXplID0gNTsKCiAgc3RhdGljIGNvbnN0IF9ub3RGb3VuZCA9IGNvbnN0IEZpbGVTdGF0Ll9pbnRlcm5hbE5vdEZvdW5kKCk7CgogIC8qKgogICAqIFRoZSB0aW1lIG9mIHRoZSBsYXN0IGNoYW5nZSB0byB0aGUgZGF0YSBvciBtZXRhZGF0YSBvZiB0aGUgZmlsZSBzeXN0ZW0KICAgKiBvYmplY3QuCiAgICoKICAgKiBPbiBXaW5kb3dzIHBsYXRmb3JtcywgdGhpcyBpcyBpbnN0ZWFkIHRoZSBmaWxlIGNyZWF0aW9uIHRpbWUuCiAgICovCiAgZmluYWwgRGF0ZVRpbWUgY2hhbmdlZDsKCiAgLyoqCiAgICogVGhlIHRpbWUgb2YgdGhlIGxhc3QgY2hhbmdlIHRvIHRoZSBkYXRhIG9mIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QuCiAgICovCiAgZmluYWwgRGF0ZVRpbWUgbW9kaWZpZWQ7CgogIC8qKgogICAqIFRoZSB0aW1lIG9mIHRoZSBsYXN0IGFjY2VzcyB0byB0aGUgZGF0YSBvZiB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqCiAgICogT24gV2luZG93cyBwbGF0Zm9ybXMsIHRoaXMgbWF5IGhhdmUgMSBkYXkgZ3JhbnVsYXJpdHksIGFuZCBiZQogICAqIG91dCBvZiBkYXRlIGJ5IGFuIGhvdXIuCiAgICovCiAgZmluYWwgRGF0ZVRpbWUgYWNjZXNzZWQ7CgogIC8qKgogICAqIFRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKgogICAqIFtGaWxlU3lzdGVtRW50aXR5VHlwZS5ub3RGb3VuZF0gaWYgW3N0YXRdIG9yIFtzdGF0U3luY10gZmFpbGVkLgogICAqLwogIGZpbmFsIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIHR5cGU7CgogIC8qKgogICAqIFRoZSBtb2RlIG9mIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QuCiAgICoKICAgKiBQZXJtaXNzaW9ucyBhcmUgZW5jb2RlZCBpbiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGlzIG51bWJlciwgYW5kIGNhbiBiZQogICAqIGRlY29kZWQgdXNpbmcgdGhlIFttb2RlU3RyaW5nXSBnZXR0ZXIuCiAgICovCiAgZmluYWwgaW50IG1vZGU7CgogIC8qKgogICAqIFRoZSBzaXplIG9mIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QuCiAgICovCiAgZmluYWwgaW50IHNpemU7CgogIEZpbGVTdGF0Ll9pbnRlcm5hbCh0aGlzLmNoYW5nZWQsIHRoaXMubW9kaWZpZWQsIHRoaXMuYWNjZXNzZWQsIHRoaXMudHlwZSwKICAgICAgdGhpcy5tb2RlLCB0aGlzLnNpemUpOwoKICBjb25zdCBGaWxlU3RhdC5faW50ZXJuYWxOb3RGb3VuZCgpCiAgICAgIDogY2hhbmdlZCA9IG51bGwsCiAgICAgICAgbW9kaWZpZWQgPSBudWxsLAogICAgICAgIGFjY2Vzc2VkID0gbnVsbCwKICAgICAgICB0eXBlID0gRmlsZVN5c3RlbUVudGl0eVR5cGUubm90Rm91bmQsCiAgICAgICAgbW9kZSA9IDAsCiAgICAgICAgc2l6ZSA9IC0xOwoKICBleHRlcm5hbCBzdGF0aWMgX3N0YXRTeW5jKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBTdHJpbmcgcGF0aCk7CgogIC8qKgogICAqIENhbGxzIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgYHN0YXQoKWAgZnVuY3Rpb24gKG9yIGVxdWl2YWxlbnQpIG9uIFtwYXRoXS4KICAgKgogICAqIFJldHVybnMgYSBbRmlsZVN0YXRdIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhIHJldHVybmVkIGJ5IGBzdGF0KClgLgogICAqIElmIHRoZSBjYWxsIGZhaWxzLCByZXR1cm5zIGEgW0ZpbGVTdGF0XSBvYmplY3Qgd2l0aCBbRmlsZVN0YXQudHlwZV0gc2V0IHRvCiAgICogW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kXSBhbmQgdGhlIG90aGVyIGZpZWxkcyBpbnZhbGlkLgogICAqLwogIHN0YXRpYyBGaWxlU3RhdCBzdGF0U3luYyhTdHJpbmcgcGF0aCkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX3N0YXRTeW5jSW50ZXJuYWwocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLnN0YXRTeW5jKHBhdGgpOwogIH0KCiAgc3RhdGljIEZpbGVTdGF0IF9zdGF0U3luY0ludGVybmFsKFN0cmluZyBwYXRoKSB7CiAgICAvLyBUcmFpbGluZyBwYXRoIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cy4KICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgcGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RyaW1UcmFpbGluZ1BhdGhTZXBhcmF0b3JzKHBhdGgpOwogICAgfQogICAgdmFyIGRhdGEgPSBfc3RhdFN5bmMoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBwYXRoKTsKICAgIGlmIChkYXRhIGlzIE9TRXJyb3IpIHJldHVybiBGaWxlU3RhdC5fbm90Rm91bmQ7CiAgICByZXR1cm4gbmV3IEZpbGVTdGF0Ll9pbnRlcm5hbCgKICAgICAgICBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goZGF0YVtfY2hhbmdlZFRpbWVdKSwKICAgICAgICBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goZGF0YVtfbW9kaWZpZWRUaW1lXSksCiAgICAgICAgbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGRhdGFbX2FjY2Vzc2VkVGltZV0pLAogICAgICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9sb29rdXAoZGF0YVtfdHlwZV0pLAogICAgICAgIGRhdGFbX21vZGVdLAogICAgICAgIGRhdGFbX3NpemVdKTsKICB9CgogIC8qKgogICAqIEFzeW5jaHJvbm91c2x5IGNhbGxzIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgYHN0YXQoKWAgZnVuY3Rpb24gKG9yCiAgICogZXF1aXZhbGVudCkgb24gW3BhdGhdLgogICAqCiAgICogUmV0dXJucyBhIFtGdXR1cmVdIHdoaWNoIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIHJlc3VsdHMgYXMgW3N0YXRTeW5jXS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPEZpbGVTdGF0PiBzdGF0KFN0cmluZyBwYXRoKSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfc3RhdChwYXRoKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuc3RhdChwYXRoKTsKICB9CgogIHN0YXRpYyBGdXR1cmU8RmlsZVN0YXQ+IF9zdGF0KFN0cmluZyBwYXRoKSB7CiAgICAvLyBUcmFpbGluZyBwYXRoIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cy4KICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgcGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RyaW1UcmFpbGluZ1BhdGhTZXBhcmF0b3JzKHBhdGgpOwogICAgfQogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlU3RhdCwgW251bGwsIHBhdGhdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICByZXR1cm4gRmlsZVN0YXQuX25vdEZvdW5kOwogICAgICB9CiAgICAgIC8vIFVud3JhcCB0aGUgcmVhbCBsaXN0IGZyb20gdGhlICJJJ20gbm90IGFuIGVycm9yIiB3cmFwcGVyLgogICAgICBMaXN0IGRhdGEgPSByZXNwb25zZVsxXTsKICAgICAgcmV0dXJuIG5ldyBGaWxlU3RhdC5faW50ZXJuYWwoCiAgICAgICAgICBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goZGF0YVtfY2hhbmdlZFRpbWVdKSwKICAgICAgICAgIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChkYXRhW19tb2RpZmllZFRpbWVdKSwKICAgICAgICAgIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChkYXRhW19hY2Nlc3NlZFRpbWVdKSwKICAgICAgICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9sb29rdXAoZGF0YVtfdHlwZV0pLAogICAgICAgICAgZGF0YVtfbW9kZV0sCiAgICAgICAgICBkYXRhW19zaXplXSk7CiAgICB9KTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICIiIgpGaWxlU3RhdDogdHlwZSAkdHlwZQogICAgICAgICAgY2hhbmdlZCAkY2hhbmdlZAogICAgICAgICAgbW9kaWZpZWQgJG1vZGlmaWVkCiAgICAgICAgICBhY2Nlc3NlZCAkYWNjZXNzZWQKICAgICAgICAgIG1vZGUgJHttb2RlU3RyaW5nKCl9CiAgICAgICAgICBzaXplICRzaXplIiIiOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtb2RlIHZhbHVlIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLgogICAqCiAgICogVGhlIHN0cmluZyBpcyBpbiB0aGUgZm9ybWF0ICJyd3hyd3hyd3giLCByZWZsZWN0aW5nIHRoZSB1c2VyLCBncm91cCwgYW5kCiAgICogd29ybGQgcGVybWlzc2lvbnMgdG8gcmVhZCwgd3JpdGUsIGFuZCBleGVjdXRlIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QsIHdpdGgKICAgKiAiLSIgcmVwbGFjaW5nIHRoZSBsZXR0ZXIgZm9yIG1pc3NpbmcgcGVybWlzc2lvbnMuICBFeHRyYSBwZXJtaXNzaW9uIGJpdHMKICAgKiBtYXkgYmUgcmVwcmVzZW50ZWQgYnkgcHJlcGVuZGluZyAiKHN1aWQpIiwgIihndWlkKSIsIGFuZC9vciAiKHN0aWNreSkiIHRvCiAgICogdGhlIG1vZGUgc3RyaW5nLgogICAqLwogIFN0cmluZyBtb2RlU3RyaW5nKCkgewogICAgdmFyIHBlcm1pc3Npb25zID0gbW9kZSAmIDB4RkZGOwogICAgdmFyIGNvZGVzID0gY29uc3QgWyctLS0nLCAnLS14JywgJy13LScsICctd3gnLCAnci0tJywgJ3IteCcsICdydy0nLCAncnd4J107CiAgICB2YXIgcmVzdWx0ID0gW107CiAgICBpZiAoKHBlcm1pc3Npb25zICYgMHg4MDApICE9IDApIHJlc3VsdC5hZGQoIihzdWlkKSAiKTsKICAgIGlmICgocGVybWlzc2lvbnMgJiAweDQwMCkgIT0gMCkgcmVzdWx0LmFkZCgiKGd1aWQpICIpOwogICAgaWYgKChwZXJtaXNzaW9ucyAmIDB4MjAwKSAhPSAwKSByZXN1bHQuYWRkKCIoc3RpY2t5KSAiKTsKICAgIHJlc3VsdAogICAgICAuLmFkZChjb2Rlc1socGVybWlzc2lvbnMgPj4gNikgJiAweDddKQogICAgICAuLmFkZChjb2Rlc1socGVybWlzc2lvbnMgPj4gMykgJiAweDddKQogICAgICAuLmFkZChjb2Rlc1twZXJtaXNzaW9ucyAmIDB4N10pOwogICAgcmV0dXJuIHJlc3VsdC5qb2luKCk7CiAgfQp9CgovKioKICogVGhlIGNvbW1vbiBzdXBlciBjbGFzcyBmb3IgW0ZpbGVdLCBbRGlyZWN0b3J5XSwgYW5kIFtMaW5rXSBvYmplY3RzLgogKgogKiBbRmlsZVN5c3RlbUVudGl0eV0gb2JqZWN0cyBhcmUgcmV0dXJuZWQgZnJvbSBkaXJlY3RvcnkgbGlzdGluZwogKiBvcGVyYXRpb25zLiBUbyBkZXRlcm1pbmUgaWYgYSBGaWxlU3lzdGVtRW50aXR5IGlzIGEgW0ZpbGVdLCBhCiAqIFtEaXJlY3RvcnldLCBvciBhIFtMaW5rXSBwZXJmb3JtIGEgdHlwZSBjaGVjazoKICoKICogICAgIGlmIChlbnRpdHkgaXMgRmlsZSkgKGVudGl0eSBhcyBGaWxlKS5yZWFkQXNTdHJpbmdTeW5jKCk7CiAqCiAqIFlvdSBjYW4gYWxzbyB1c2UgdGhlIFt0eXBlXSBvciBbdHlwZVN5bmNdIG1ldGhvZHMgdG8gZGV0ZXJtaW5lCiAqIHRoZSB0eXBlIG9mIGEgZmlsZSBzeXN0ZW0gb2JqZWN0LgogKgogKiBNb3N0IG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBvY2N1ciBpbiBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHBhaXJzLAogKiBmb3IgZXhhbXBsZSwgW2V4aXN0c10gYW5kIFtleGlzdHNTeW5jXS4KICogVW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgcmVhc29uIGZvciB1c2luZyB0aGUgc3luY2hyb25vdXMgdmVyc2lvbgogKiBvZiBhIG1ldGhvZCwgcHJlZmVyIHRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiB0byBhdm9pZCBibG9ja2luZyB5b3VyIHByb2dyYW0uCiAqCiAqIEhlcmUncyB0aGUgZXhpc3RzIG1ldGhvZCBpbiBhY3Rpb246CiAqCiAqICAgICBlbnRpdHkuZXhpc3RzKCkudGhlbigoaXNUaGVyZSkgewogKiAgICAgICBpc1RoZXJlID8gcHJpbnQoJ2V4aXN0cycpIDogcHJpbnQoJ25vbi1leGlzdGVudCcpOwogKiAgICAgfSk7CiAqCiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiAqIFtEYXJ0IGJ5CiAqICAgRXhhbXBsZV0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RhcnQtYnktZXhhbXBsZS8jZmlsZXMtZGlyZWN0b3JpZXMtYW5kLXN5bWxpbmtzKQogKiAgIHByb3ZpZGVzIGFkZGl0aW9uYWwgdGFzay1vcmllbnRlZCBjb2RlIHNhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UgdmFyaW91cwogKiAgIEFQSSBmcm9tIHRoZSBbRGlyZWN0b3J5XSBjbGFzcyBhbmQgdGhlIFtGaWxlXSBjbGFzcywgYm90aCBzdWJjbGFzc2VzIG9mCiAqICAgRmlsZVN5c3RlbUVudGl0eS4KICoKICogKiBbSS9PIGZvciBDb21tYW5kLUxpbmUKICogICBBcHBzXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NoMDMuaHRtbCNkYXJ0aW8tLS1pby1mb3ItY29tbWFuZC1saW5lLWFwcHMpLAogKiAgIGEgc2VjdGlvbiBmcm9tIF9BIFRvdXIgb2YgdGhlIERhcnQgTGlicmFyaWVzXyBjb3ZlcnMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgogKgogKiAqIFtXcml0ZSBDb21tYW5kLUxpbmUgQXBwc10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvdHV0b3JpYWxzL2NtZGxpbmUvKSwKICogICBhIHR1dG9yaWFsIGFib3V0IHdyaXRpbmcgY29tbWFuZC1saW5lIGFwcHMsIGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0CiAqICAgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgogKi8KYWJzdHJhY3QgY2xhc3MgRmlsZVN5c3RlbUVudGl0eSB7CiAgU3RyaW5nIF9wYXRoOwogIFVpbnQ4TGlzdCBfcmF3UGF0aDsKCiAgU3RyaW5nIGdldCBwYXRoOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW1VyaV0gcmVwcmVzZW50aW5nIHRoZSBmaWxlIHN5c3RlbSBlbnRpdHkncyBsb2NhdGlvbi4KICAgKgogICAqIFRoZSByZXR1cm5lZCBVUkkncyBzY2hlbWUgaXMgYWx3YXlzICJmaWxlIiBpZiB0aGUgZW50aXR5J3MgW3BhdGhdIGlzCiAgICogYWJzb2x1dGUsIG90aGVyd2lzZSB0aGUgc2NoZW1lIHdpbGwgYmUgZW1wdHkuCiAgICovCiAgVXJpIGdldCB1cmkgPT4gbmV3IFVyaS5maWxlKHBhdGgpOwoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZmlsZSBzeXN0ZW0gZW50aXR5IHdpdGggdGhpcyBwYXRoIGV4aXN0cy4gUmV0dXJucwogICAqIGEgWzpGdXR1cmU8Ym9vbD46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSByZXN1bHQuCiAgICoKICAgKiBTaW5jZSBGaWxlU3lzdGVtRW50aXR5IGlzIGFic3RyYWN0LCBldmVyeSBGaWxlU3lzdGVtRW50aXR5IG9iamVjdAogICAqIGlzIGFjdHVhbGx5IGFuIGluc3RhbmNlIG9mIG9uZSBvZiB0aGUgc3ViY2xhc3NlcyBbRmlsZV0sCiAgICogW0RpcmVjdG9yeV0sIGFuZCBbTGlua10uICBDYWxsaW5nIFtleGlzdHNdIG9uIGFuIGluc3RhbmNlIG9mIG9uZQogICAqIG9mIHRoZXNlIHN1YmNsYXNzZXMgY2hlY2tzIHdoZXRoZXIgdGhlIG9iamVjdCBleGlzdHMgaW4gdGhlIGZpbGUKICAgKiBzeXN0ZW0gb2JqZWN0IGV4aXN0cyBhbmQgaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSAoZmlsZSwgZGlyZWN0b3J5LAogICAqIG9yIGxpbmspLiAgVG8gY2hlY2sgd2hldGhlciBhIHBhdGggcG9pbnRzIHRvIGFuIG9iamVjdCBvbiB0aGUKICAgKiBmaWxlIHN5c3RlbSwgcmVnYXJkbGVzcyBvZiB0aGUgb2JqZWN0J3MgdHlwZSwgdXNlIHRoZSBbdHlwZV0KICAgKiBzdGF0aWMgbWV0aG9kLgogICAqCiAgICovCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNoZWNrcyB3aGV0aGVyIHRoZSBmaWxlIHN5c3RlbSBlbnRpdHkgd2l0aCB0aGlzIHBhdGgKICAgKiBleGlzdHMuCiAgICoKICAgKiBTaW5jZSBGaWxlU3lzdGVtRW50aXR5IGlzIGFic3RyYWN0LCBldmVyeSBGaWxlU3lzdGVtRW50aXR5IG9iamVjdAogICAqIGlzIGFjdHVhbGx5IGFuIGluc3RhbmNlIG9mIG9uZSBvZiB0aGUgc3ViY2xhc3NlcyBbRmlsZV0sCiAgICogW0RpcmVjdG9yeV0sIGFuZCBbTGlua10uICBDYWxsaW5nIFtleGlzdHNTeW5jXSBvbiBhbiBpbnN0YW5jZSBvZgogICAqIG9uZSBvZiB0aGVzZSBzdWJjbGFzc2VzIGNoZWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgZXhpc3RzIGluIHRoZQogICAqIGZpbGUgc3lzdGVtIG9iamVjdCBleGlzdHMgYW5kIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgKGZpbGUsCiAgICogZGlyZWN0b3J5LCBvciBsaW5rKS4gIFRvIGNoZWNrIHdoZXRoZXIgYSBwYXRoIHBvaW50cyB0byBhbiBvYmplY3QKICAgKiBvbiB0aGUgZmlsZSBzeXN0ZW0sIHJlZ2FyZGxlc3Mgb2YgdGhlIG9iamVjdCdzIHR5cGUsIHVzZSB0aGUKICAgKiBbdHlwZVN5bmNdIHN0YXRpYyBtZXRob2QuCiAgICovCiAgYm9vbCBleGlzdHNTeW5jKCk7CgogIC8qKgogICAqIFJlbmFtZXMgdGhpcyBmaWxlIHN5c3RlbSBlbnRpdHkuCiAgICoKICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5PmAgdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgICogW0ZpbGVTeXN0ZW1FbnRpdHldIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBmaWxlIHN5c3RlbSBlbnRpdHkuCiAgICoKICAgKiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBlbnRpdHkgb2YgdGhlIHNhbWUgdHlwZSwgdGhhdCBlbnRpdHkKICAgKiBpcyByZXBsYWNlZC4gSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZW50aXR5IG9mIGEgZGlmZmVyZW50CiAgICogdHlwZSwgdGhlIG9wZXJhdGlvbiBmYWlscyBhbmQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHk+IHJlbmFtZShTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVuYW1lcyB0aGlzIGZpbGUgc3lzdGVtIGVudGl0eS4KICAgKgogICAqIFJldHVybnMgYSBbRmlsZVN5c3RlbUVudGl0eV0gaW5zdGFuY2UgZm9yIHRoZSByZW5hbWVkIGVudGl0eS4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGVudGl0eSBvZiB0aGUgc2FtZSB0eXBlLCB0aGF0IGVudGl0eQogICAqIGlzIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBlbnRpdHkgb2YgYSBkaWZmZXJlbnQKICAgKiB0eXBlLCB0aGUgb3BlcmF0aW9uIGZhaWxzIGFuZCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIEZpbGVTeXN0ZW1FbnRpdHkgcmVuYW1lU3luYyhTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIFJlc29sdmVzIHRoZSBwYXRoIG9mIGEgZmlsZSBzeXN0ZW0gb2JqZWN0IHJlbGF0aXZlIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICoKICAgKiBSZXNvbHZlcyBhbGwgc3ltYm9saWMgbGlua3Mgb24gdGhlIHBhdGggYW5kIHJlc29sdmVzIGFsbCBgLi5gIGFuZCBgLmAgcGF0aAogICAqIHNlZ21lbnRzLgogICAqCiAgICogW3Jlc29sdmVTeW1ib2xpY0xpbmtzXSB1c2VzIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmF0aXZlCiAgICogZmlsZSBzeXN0ZW0gQVBJIHRvIHJlc29sdmUgdGhlIHBhdGgsIHVzaW5nIHRoZSBgcmVhbHBhdGhgIGZ1bmN0aW9uCiAgICogb24gbGludXggYW5kIE9TIFgsIGFuZCB0aGUgYEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZWAgZnVuY3Rpb24gb24KICAgKiBXaW5kb3dzLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBwb2ludCB0byBhbiBleGlzdGluZyBmaWxlIHN5c3RlbSBvYmplY3QsCiAgICogYHJlc29sdmVTeW1ib2xpY0xpbmtzYCB0aHJvd3MgYSBgRmlsZVN5c3RlbUV4Y2VwdGlvbmAuCiAgICoKICAgKiBPbiBXaW5kb3dzIHRoZSBgLi5gIHNlZ21lbnRzIGFyZSByZXNvbHZlZCBfYmVmb3JlXyByZXNvbHZpbmcgdGhlIHN5bWJvbGljCiAgICogbGluaywgYW5kIG9uIG90aGVyIHBsYXRmb3JtcyB0aGUgc3ltYm9saWMgbGlua3MgYXJlIF9yZXNvbHZlZCB0byB0aGVpcgogICAqIHRhcmdldF8gYmVmb3JlIGFwcGx5aW5nIGEgYC4uYCB0aGF0IGZvbGxvd3MuCiAgICoKICAgKiBUbyBlbnN1cmUgdGhlIHNhbWUgYmVoYXZpb3Igb24gYWxsIHBsYXRmb3JtcyByZXNvbHZlIGAuLmAgc2VnbWVudHMgYmVmb3JlCiAgICogY2FsbGluZyBgcmVzb2x2ZVN5bWJvbGljTGlua3NgLiBPbmUgd2F5IG9mIGRvaW5nIHRoaXMgaXMgd2l0aCB0aGUgYFVyaWAKICAgKiBjbGFzczoKICAgKgogICAqICAgICB2YXIgcGF0aCA9IFVyaS5wYXJzZSgnLicpLnJlc29sdmVVcmkobmV3IFVyaS5maWxlKGlucHV0KSkudG9GaWxlUGF0aCgpOwogICAqICAgICBpZiAocGF0aCA9PSAnJykgcGF0aCA9ICcuJzsKICAgKiAgICAgbmV3IEZpbGUocGF0aCkucmVzb2x2ZVN5bWJvbGljTGlua3MoKS50aGVuKChyZXNvbHZlZCkgewogICAqICAgICAgIHByaW50KHJlc29sdmVkKTsKICAgKiAgICAgfSk7CiAgICoKICAgKiBzaW5jZSBgVXJpLnJlc29sdmVgIHJlbW92ZXMgYC4uYCBzZWdtZW50cy4gVGhpcyB3aWxsIHJlc3VsdCBpbiB0aGUgV2luZG93cwogICAqIGJlaGF2aW9yLgogICAqLwogIEZ1dHVyZTxTdHJpbmc+IHJlc29sdmVTeW1ib2xpY0xpbmtzKCkgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlUmVzb2x2ZVN5bWJvbGljTGlua3MsIFtudWxsLCBfcmF3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IHJlc29sdmUgc3ltYm9saWMgbGlua3MiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9KTsKICB9CgogIC8qKgogICAqIFJlc29sdmVzIHRoZSBwYXRoIG9mIGEgZmlsZSBzeXN0ZW0gb2JqZWN0IHJlbGF0aXZlIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICoKICAgKiBSZXNvbHZlcyBhbGwgc3ltYm9saWMgbGlua3Mgb24gdGhlIHBhdGggYW5kIHJlc29sdmVzIGFsbCBgLi5gIGFuZCBgLmAgcGF0aAogICAqIHNlZ21lbnRzLgogICAqCiAgICogW3Jlc29sdmVTeW1ib2xpY0xpbmtzU3luY10gdXNlcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIG5hdGl2ZQogICAqIGZpbGUgc3lzdGVtIEFQSSB0byByZXNvbHZlIHRoZSBwYXRoLCB1c2luZyB0aGUgYHJlYWxwYXRoYCBmdW5jdGlvbgogICAqIG9uIGxpbnV4IGFuZCBPUyBYLCBhbmQgdGhlIGBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVgIGZ1bmN0aW9uIG9uCiAgICogV2luZG93cy4gSWYgdGhlIHBhdGggZG9lcyBub3QgcG9pbnQgdG8gYW4gZXhpc3RpbmcgZmlsZSBzeXN0ZW0gb2JqZWN0LAogICAqIGByZXNvbHZlU3ltYm9saWNMaW5rc1N5bmNgIHRocm93cyBhIGBGaWxlU3lzdGVtRXhjZXB0aW9uYC4KICAgKgogICAqIE9uIFdpbmRvd3MgdGhlIGAuLmAgc2VnbWVudHMgYXJlIHJlc29sdmVkIF9iZWZvcmVfIHJlc29sdmluZyB0aGUgc3ltYm9saWMKICAgKiBsaW5rLCBhbmQgb24gb3RoZXIgcGxhdGZvcm1zIHRoZSBzeW1ib2xpYyBsaW5rcyBhcmUgX3Jlc29sdmVkIHRvIHRoZWlyCiAgICogdGFyZ2V0XyBiZWZvcmUgYXBwbHlpbmcgYSBgLi5gIHRoYXQgZm9sbG93cy4KICAgKgogICAqIFRvIGVuc3VyZSB0aGUgc2FtZSBiZWhhdmlvciBvbiBhbGwgcGxhdGZvcm1zIHJlc29sdmUgYC4uYCBzZWdtZW50cyBiZWZvcmUKICAgKiBjYWxsaW5nIGByZXNvbHZlU3ltYm9saWNMaW5rc1N5bmNgLiBPbmUgd2F5IG9mIGRvaW5nIHRoaXMgaXMgd2l0aCB0aGUgYFVyaWAKICAgKiBjbGFzczoKICAgKgogICAqICAgICB2YXIgcGF0aCA9IFVyaS5wYXJzZSgnLicpLnJlc29sdmVVcmkobmV3IFVyaS5maWxlKGlucHV0KSkudG9GaWxlUGF0aCgpOwogICAqICAgICBpZiAocGF0aCA9PSAnJykgcGF0aCA9ICcuJzsKICAgKiAgICAgdmFyIHJlc29sdmVkID0gbmV3IEZpbGUocGF0aCkucmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jKCk7CiAgICogICAgIHByaW50KHJlc29sdmVkKTsKICAgKgogICAqIHNpbmNlIGBVcmkucmVzb2x2ZWAgcmVtb3ZlcyBgLi5gIHNlZ21lbnRzLiBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBXaW5kb3dzCiAgICogYmVoYXZpb3IuCiAgICovCiAgU3RyaW5nIHJlc29sdmVTeW1ib2xpY0xpbmtzU3luYygpIHsKICAgIHZhciByZXN1bHQgPSBfcmVzb2x2ZVN5bWJvbGljTGlua3MoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICBfdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCByZXNvbHZlIHN5bWJvbGljIGxpbmtzIiwgcGF0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ2FsbHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBzdGF0KCkgZnVuY3Rpb24gb24gdGhlIFtwYXRoXSBvZiB0aGlzCiAgICogW0ZpbGVTeXN0ZW1FbnRpdHldLgogICAqCiAgICogSWRlbnRpY2FsIHRvIFs6RmlsZVN0YXQuc3RhdCh0aGlzLnBhdGgpOl0uCiAgICoKICAgKiBSZXR1cm5zIGEgWzpGdXR1cmU8RmlsZVN0YXQ+Ol0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkKICAgKiBzdGF0KCkuCiAgICoKICAgKiBJZiB0aGUgY2FsbCBmYWlscywgY29tcGxldGVzIHRoZSBmdXR1cmUgd2l0aCBhIFtGaWxlU3RhdF0gb2JqZWN0CiAgICogd2l0aCBgLnR5cGVgIHNldCB0byBbRmlsZVN5c3RlbUVudGl0eVR5cGUubm90Rm91bmRdIGFuZCB0aGUgb3RoZXIgZmllbGRzCiAgICogaW52YWxpZC4KICAgKi8KICBGdXR1cmU8RmlsZVN0YXQ+IHN0YXQoKSA9PiBGaWxlU3RhdC5zdGF0KHBhdGgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNhbGxzIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3Mgc3RhdCgpIGZ1bmN0aW9uIG9uIHRoZQogICAqIFtwYXRoXSBvZiB0aGlzIFtGaWxlU3lzdGVtRW50aXR5XS4KICAgKgogICAqIElkZW50aWNhbCB0byBbOkZpbGVTdGF0LnN0YXRTeW5jKHRoaXMucGF0aCk6XS4KICAgKgogICAqIFJldHVybnMgYSBbRmlsZVN0YXRdIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhIHJldHVybmVkIGJ5IHN0YXQoKS4KICAgKgogICAqIElmIHRoZSBjYWxsIGZhaWxzLCByZXR1cm5zIGEgW0ZpbGVTdGF0XSBvYmplY3Qgd2l0aCBgLnR5cGVgIHNldCB0bwogICAqIFtGaWxlU3lzdGVtRW50aXR5VHlwZS5ub3RGb3VuZF0gYW5kIHRoZSBvdGhlciBmaWVsZHMgaW52YWxpZC4KICAgKi8KICBGaWxlU3RhdCBzdGF0U3luYygpID0+IEZpbGVTdGF0LnN0YXRTeW5jKHBhdGgpOwoKICAvKioKICAgKiBEZWxldGVzIHRoaXMgW0ZpbGVTeXN0ZW1FbnRpdHldLgogICAqCiAgICogSWYgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBpcyBhIGRpcmVjdG9yeSwgYW5kIGlmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLAogICAqIHRoZSBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eS4gT3RoZXJ3aXNlLCBpZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCB0aGUKICAgKiBkaXJlY3RvcnkgYW5kIGFsbCBzdWItZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSBkaXJlY3RvcmllcyBhcmUKICAgKiBkZWxldGVkLiBMaW5rcyBhcmUgbm90IGZvbGxvd2VkIHdoZW4gZGVsZXRpbmcgcmVjdXJzaXZlbHkuIE9ubHkgdGhlIGxpbmsKICAgKiBpcyBkZWxldGVkLCBub3QgaXRzIHRhcmdldC4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gaXMgZGVsZXRlZCBldmVuIGlmIHRoZSB0eXBlCiAgICogb2YgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBkb2Vzbid0IG1hdGNoIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIHN5c3RlbS4KICAgKiBUaGlzIGJlaGF2aW9yIGFsbG93cyBbZGVsZXRlXSB0byBiZSB1c2VkIHRvIHVuY29uZGl0aW9uYWxseSBkZWxldGUgYW55IGZpbGUKICAgKiBzeXN0ZW0gb2JqZWN0LgogICAqCiAgICogUmV0dXJucyBhIFs6RnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHk+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogW0ZpbGVTeXN0ZW1FbnRpdHldIHdoZW4gdGhlIGRlbGV0aW9uIGlzIGRvbmUuIElmIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0KICAgKiBjYW5ub3QgYmUgZGVsZXRlZCwgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHk+IGRlbGV0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgPT4KICAgICAgX2RlbGV0ZShyZWN1cnNpdmU6IHJlY3Vyc2l2ZSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZGVsZXRlcyB0aGlzIFtGaWxlU3lzdGVtRW50aXR5XS4KICAgKgogICAqIElmIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gaXMgYSBkaXJlY3RvcnksIGFuZCBpZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwKICAgKiB0aGUgZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkuIE90aGVyd2lzZSwgaWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgdGhlCiAgICogZGlyZWN0b3J5IGFuZCBhbGwgc3ViLWRpcmVjdG9yaWVzIGFuZCBmaWxlcyBpbiB0aGUgZGlyZWN0b3JpZXMgYXJlCiAgICogZGVsZXRlZC4gTGlua3MgYXJlIG5vdCBmb2xsb3dlZCB3aGVuIGRlbGV0aW5nIHJlY3Vyc2l2ZWx5LiBPbmx5IHRoZSBsaW5rCiAgICogaXMgZGVsZXRlZCwgbm90IGl0cyB0YXJnZXQuCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGlzIGRlbGV0ZWQgZXZlbiBpZiB0aGUgdHlwZQogICAqIG9mIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gZG9lc24ndCBtYXRjaCB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBzeXN0ZW0uCiAgICogVGhpcyBiZWhhdmlvciBhbGxvd3MgW2RlbGV0ZVN5bmNdIHRvIGJlIHVzZWQgdG8gdW5jb25kaXRpb25hbGx5IGRlbGV0ZSBhbnkKICAgKiBmaWxlIHN5c3RlbSBvYmplY3QuCiAgICoKICAgKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gY2Fubm90IGJlIGRlbGV0ZWQuCiAgICovCiAgdm9pZCBkZWxldGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSA9PiBfZGVsZXRlU3luYyhyZWN1cnNpdmU6IHJlY3Vyc2l2ZSk7CgogIC8qKgogICAqIFN0YXJ0IHdhdGNoaW5nIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gZm9yIGNoYW5nZXMuCiAgICoKICAgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBwbGF0Zm9ybS1kZXBlbmRlbnQgZXZlbnQtYmFzZWQgQVBJcyBmb3IgcmVjZWl2aW5nCiAgICogZmlsZS1zeXN0ZW0gbm90aWZpY2F0aW9ucywgdGh1cyBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBwbGF0Zm9ybS4KICAgKgogICAqICAgKiBgV2luZG93c2A6IFVzZXMgYFJlYWREaXJlY3RvcnlDaGFuZ2VzV2AuIFRoZSBpbXBsZW1lbnRhdGlvbiBvbmx5CiAgICogICAgIHN1cHBvcnRzIHdhdGNoaW5nIGRpcmVjdG9yaWVzLiBSZWN1cnNpdmUgd2F0Y2hpbmcgaXMgc3VwcG9ydGVkLgogICAqICAgKiBgTGludXhgOiBVc2VzIGBpbm90aWZ5YC4gVGhlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHdhdGNoaW5nIGJvdGgKICAgKiAgICAgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiBSZWN1cnNpdmUgd2F0Y2hpbmcgaXMgbm90IHN1cHBvcnRlZC4KICAgKiAgICAgTm90ZTogV2hlbiB3YXRjaGluZyBmaWxlcyBkaXJlY3RseSwgZGVsZXRlIGV2ZW50cyBtaWdodCBub3QgaGFwcGVuCiAgICogICAgIGFzIGV4cGVjdGVkLgogICAqICAgKiBgT1MgWGA6IFVzZXMgYEZTRXZlbnRzYC4gVGhlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHdhdGNoaW5nIGJvdGgKICAgKiAgICAgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiBSZWN1cnNpdmUgd2F0Y2hpbmcgaXMgc3VwcG9ydGVkLgogICAqCiAgICogVGhlIHN5c3RlbSB3aWxsIHN0YXJ0IGxpc3RlbmluZyBmb3IgZXZlbnRzIG9uY2UgdGhlIHJldHVybmVkIFtTdHJlYW1dIGlzCiAgICogYmVpbmcgbGlzdGVuZWQgdG8sIG5vdCB3aGVuIHRoZSBjYWxsIHRvIFt3YXRjaF0gaXMgaXNzdWVkLgogICAqCiAgICogVGhlIHJldHVybmVkIHZhbHVlIGlzIGFuIGVuZGxlc3MgYnJvYWRjYXN0IFtTdHJlYW1dLCB0aGF0IG9ubHkgc3RvcHMgd2hlbgogICAqIG9uZSBvZiB0aGUgZm9sbG93aW5nIGhhcHBlbnM6CiAgICoKICAgKiAgICogVGhlIFtTdHJlYW1dIGlzIGNhbmNlbGVkLCBlLmcuIGJ5IGNhbGxpbmcgYGNhbmNlbGAgb24gdGhlCiAgICogICAgICBbU3RyZWFtU3Vic2NyaXB0aW9uXS4KICAgKiAgICogVGhlIFtGaWxlU3lzdGVtRW50aXR5XSBiZWluZyB3YXRjaGVzLCBpcyBkZWxldGVkLgogICAqCiAgICogVXNlIGBldmVudHNgIHRvIHNwZWNpZnkgd2hhdCBldmVudHMgdG8gbGlzdGVuIGZvci4gVGhlIGNvbnN0YW50cyBpbgogICAqIFtGaWxlU3lzdGVtRXZlbnRdIGNhbiBiZSBvcidlZCB0b2dldGhlciB0byBtaXggZXZlbnRzLiBEZWZhdWx0IGlzCiAgICogW0ZpbGVTeXN0ZW1FdmVudC5BTExdLgogICAqCiAgICogQSBtb3ZlIGV2ZW50IG1heSBiZSByZXBvcnRlZCBhcyBzZXBlcmF0ZSBkZWxldGUgYW5kIGNyZWF0ZSBldmVudHMuCiAgICovCiAgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gd2F0Y2goCiAgICAgIHtpbnQgZXZlbnRzOiBGaWxlU3lzdGVtRXZlbnQuYWxsLCBib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICAvLyBGSVhNRShia29ueWkpOiBmaW5kIGEgd2F5IHRvIGRvIHRoaXMgdXNpbmcgdGhlIHJhdyBwYXRoLgogICAgZmluYWwgU3RyaW5nIHRyaW1tZWRQYXRoID0gX3RyaW1UcmFpbGluZ1BhdGhTZXBhcmF0b3JzKHBhdGgpOwogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0ZpbGVTeXN0ZW1XYXRjaGVyLl93YXRjaCh0cmltbWVkUGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5mc1dhdGNoKHRyaW1tZWRQYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CiAgfQoKICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eT4gX2RlbGV0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CiAgdm9pZCBfZGVsZXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIHN0YXRpYyBGdXR1cmU8Ym9vbD4gX2lkZW50aWNhbChTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlSWRlbnRpY2FsLCBbbnVsbCwgcGF0aDEsIHBhdGgyXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwKICAgICAgICAgICAgIkVycm9yIGluIEZpbGVTeXN0ZW1FbnRpdHkuaWRlbnRpY2FsKCRwYXRoMSwgJHBhdGgyKSIsICIiKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9KTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIHR3byBwYXRocyByZWZlciB0byB0aGUgc2FtZSBvYmplY3QgaW4gdGhlCiAgICogZmlsZSBzeXN0ZW0uCiAgICoKICAgKiBSZXR1cm5zIGEgWzpGdXR1cmU8Ym9vbD46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSByZXN1bHQuCiAgICoKICAgKiBDb21wYXJpbmcgYSBsaW5rIHRvIGl0cyB0YXJnZXQgcmV0dXJucyBmYWxzZSwgYXMgZG9lcyBjb21wYXJpbmcgdHdvIGxpbmtzCiAgICogdGhhdCBwb2ludCB0byB0aGUgc2FtZSB0YXJnZXQuICBUbyBjaGVjayB0aGUgdGFyZ2V0IG9mIGEgbGluaywgdXNlCiAgICogTGluay50YXJnZXQgZXhwbGljaXRseSB0byBmZXRjaCBpdC4gIERpcmVjdG9yeSBsaW5rcyBhcHBlYXJpbmcKICAgKiBpbnNpZGUgYSBwYXRoIGFyZSBmb2xsb3dlZCwgdGhvdWdoLCB0byBmaW5kIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QuCiAgICoKICAgKiBDb21wbGV0ZXMgdGhlIHJldHVybmVkIEZ1dHVyZSB3aXRoIGFuIGVycm9yIGlmIG9uZSBvZiB0aGUgcGF0aHMgcG9pbnRzCiAgICogdG8gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgZXhpc3QuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxib29sPiBpZGVudGljYWwoU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpIHsKICAgIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9pZGVudGljYWwocGF0aDEsIHBhdGgyKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZnNlSWRlbnRpY2FsKHBhdGgxLCBwYXRoMik7CiAgfQoKICBzdGF0aWMgZmluYWwgUmVnRXhwIF9hYnNvbHV0ZVdpbmRvd3NQYXRoUGF0dGVybiA9CiAgICAgIG5ldyBSZWdFeHAocideKFxcXFx8W2EtekEtWl06Wy9cXF0pJyk7CgogIC8qKgogICAqIFJldHVybnMgYSBbYm9vbF0gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgb2JqZWN0J3MgcGF0aCBpcyBhYnNvbHV0ZS4KICAgKgogICAqIE9uIFdpbmRvd3MsIGEgcGF0aCBpcyBhYnNvbHV0ZSBpZiBpdCBzdGFydHMgd2l0aCBcXFxcIG9yIGEgZHJpdmUgbGV0dGVyCiAgICogYmV0d2VlbiBhIGFuZCB6ICh1cHBlciBvciBsb3dlciBjYXNlKSBmb2xsb3dlZCBieSA6XFwgb3IgOi8uCiAgICogT24gbm9uLVdpbmRvd3MsIGEgcGF0aCBpcyBhYnNvbHV0ZSBpZiBpdCBzdGFydHMgd2l0aCAvLgogICAqLwogIGJvb2wgZ2V0IGlzQWJzb2x1dGUgewogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKF9hYnNvbHV0ZVdpbmRvd3NQYXRoUGF0dGVybik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKCcvJyk7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgW0ZpbGVTeXN0ZW1FbnRpdHldIHdob3NlIHBhdGggaXMgdGhlIGFic29sdXRlIHBhdGggdG8gW3RoaXNdLgogICAqCiAgICogVGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIGluc3RhbmNlIGlzIHRoZSB0eXBlIG9mIFt0aGlzXS4KICAgKgogICAqIFRoZSBhYnNvbHV0ZSBwYXRoIGlzIGNvbXB1dGVkIGJ5IHByZWZpeGluZwogICAqIGEgcmVsYXRpdmUgcGF0aCB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgcmV0dXJuaW5nCiAgICogYW4gYWJzb2x1dGUgcGF0aCB1bmNoYW5nZWQuCiAgICovCiAgRmlsZVN5c3RlbUVudGl0eSBnZXQgYWJzb2x1dGU7CgogIFN0cmluZyBnZXQgX2Fic29sdXRlUGF0aCB7CiAgICBpZiAoaXNBYnNvbHV0ZSkgcmV0dXJuIHBhdGg7CiAgICBTdHJpbmcgY3VycmVudCA9IERpcmVjdG9yeS5jdXJyZW50LnBhdGg7CiAgICBpZiAoY3VycmVudC5lbmRzV2l0aCgnLycpIHx8CiAgICAgICAgKFBsYXRmb3JtLmlzV2luZG93cyAmJiBjdXJyZW50LmVuZHNXaXRoKCdcXCcpKSkgewogICAgICByZXR1cm4gJyRjdXJyZW50JHBhdGgnOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICckY3VycmVudCR7UGxhdGZvcm0ucGF0aFNlcGFyYXRvcn0kcGF0aCc7CiAgICB9CiAgfQoKICBVaW50OExpc3QgZ2V0IF9yYXdBYnNvbHV0ZVBhdGggewogICAgaWYgKGlzQWJzb2x1dGUpIHJldHVybiBfcmF3UGF0aDsKICAgIHZhciBjdXJyZW50ID0gRGlyZWN0b3J5LmN1cnJlbnQuX3Jhd1BhdGgudG9MaXN0KCk7CiAgICBhc3NlcnQoY3VycmVudC5sYXN0ID09IDApOwogICAgY3VycmVudC5yZW1vdmVMYXN0KCk7IC8vIFJlbW92ZSBudWxsIHRlcm1pbmF0b3IuCiAgICBpZiAoKGN1cnJlbnQubGFzdCA9PSAnLycuY29kZVVuaXRBdCgwKSkgfHwKICAgICAgICAoUGxhdGZvcm0uaXNXaW5kb3dzICYmIChjdXJyZW50Lmxhc3QgPT0gJ1xcJy5jb2RlVW5pdEF0KDApKSkpIHsKICAgICAgY3VycmVudC5hZGRBbGwoX3Jhd1BhdGgpOwogICAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChjdXJyZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGN1cnJlbnQuYWRkQWxsKHV0ZjguZW5jb2RlKFBsYXRmb3JtLnBhdGhTZXBhcmF0b3IpKTsKICAgICAgY3VycmVudC5hZGRBbGwoX3Jhd1BhdGgpOwogICAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChjdXJyZW50KTsKICAgIH0KICB9CgogIHN0YXRpYyBib29sIF9pZGVudGljYWxTeW5jKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICB2YXIgcmVzdWx0ID0gX2lkZW50aWNhbE5hdGl2ZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIHBhdGgxLCBwYXRoMik7CiAgICBfdGhyb3dJZkVycm9yKHJlc3VsdCwgJ0Vycm9yIGluIEZpbGVTeXN0ZW1FbnRpdHkuaWRlbnRpY2FsU3luYycpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2hlY2tzIHdoZXRoZXIgdHdvIHBhdGhzIHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCBpbiB0aGUKICAgKiBmaWxlIHN5c3RlbS4KICAgKgogICAqIENvbXBhcmluZyBhIGxpbmsgdG8gaXRzIHRhcmdldCByZXR1cm5zIGZhbHNlLCBhcyBkb2VzIGNvbXBhcmluZyB0d28gbGlua3MKICAgKiB0aGF0IHBvaW50IHRvIHRoZSBzYW1lIHRhcmdldC4gIFRvIGNoZWNrIHRoZSB0YXJnZXQgb2YgYSBsaW5rLCB1c2UKICAgKiBMaW5rLnRhcmdldCBleHBsaWNpdGx5IHRvIGZldGNoIGl0LiAgRGlyZWN0b3J5IGxpbmtzIGFwcGVhcmluZwogICAqIGluc2lkZSBhIHBhdGggYXJlIGZvbGxvd2VkLCB0aG91Z2gsIHRvIGZpbmQgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKgogICAqIFRocm93cyBhbiBlcnJvciBpZiBvbmUgb2YgdGhlIHBhdGhzIHBvaW50cyB0byBhbiBvYmplY3QgdGhhdCBkb2VzIG5vdAogICAqIGV4aXN0LgogICAqLwogIHN0YXRpYyBib29sIGlkZW50aWNhbFN5bmMoU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpIHsKICAgIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9pZGVudGljYWxTeW5jKHBhdGgxLCBwYXRoMik7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmZzZUlkZW50aWNhbFN5bmMocGF0aDEsIHBhdGgyKTsKICB9CgogIC8qKgogICAqIFRlc3QgaWYgW3dhdGNoXSBpcyBzdXBwb3J0ZWQgb24gdGhlIGN1cnJlbnQgc3lzdGVtLgogICAqCiAgICogT1MgWCAxMC42IGFuZCBiZWxvdyBpcyBub3Qgc3VwcG9ydGVkLgogICAqLwogIHN0YXRpYyBib29sIGdldCBpc1dhdGNoU3VwcG9ydGVkIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9GaWxlU3lzdGVtV2F0Y2hlci5pc1N1cHBvcnRlZDsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZnNXYXRjaElzU3VwcG9ydGVkKCk7CiAgfQoKICAvLyBUaGUgbmF0aXZlIG1ldGhvZHMgd2hpY2ggZGV0ZXJtaW5lIHR5cGUgb2YgdGhlIEZpbGVTeXN0ZW1FbnRpdHkgcmVxdWlyZQogIC8vIHRoYXQgdGhlIGJ1ZmZlciBwcm92aWRlZCBpcyBudWxsIHRlcm1pbmF0ZWQuCiAgc3RhdGljIFVpbnQ4TGlzdCBfdG9VdGY4QXJyYXkoU3RyaW5nIHMpID0+CiAgICAgIF90b051bGxUZXJtaW5hdGVkVXRmOEFycmF5KHV0ZjguZW5jb2RlKHMpKTsKCiAgc3RhdGljIFVpbnQ4TGlzdCBfdG9OdWxsVGVybWluYXRlZFV0ZjhBcnJheShVaW50OExpc3QgbCkgewogICAgaWYgKGwgPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChsLmlzTm90RW1wdHkgJiYgbC5sYXN0ICE9IDApIHsKICAgICAgZmluYWwgdG1wID0gbmV3IFVpbnQ4TGlzdChsLmxlbmd0aCArIDEpOwogICAgICB0bXAuc2V0UmFuZ2UoMCwgbC5sZW5ndGgsIGwpOwogICAgICByZXR1cm4gdG1wOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGw7CiAgICB9CiAgfQoKICBzdGF0aWMgU3RyaW5nIF90b1N0cmluZ0Zyb21VdGY4QXJyYXkoVWludDhMaXN0IGwpIHsKICAgIGlmIChsID09IG51bGwpIHsKICAgICAgcmV0dXJuICcnOwogICAgfQogICAgVWludDhMaXN0IG5vbk51bGxUZXJtaW5hdGVkID0gbDsKICAgIGlmIChsLmxhc3QgPT0gMCkgewogICAgICBub25OdWxsVGVybWluYXRlZCA9IG5ldyBVaW50OExpc3QudmlldyhsLmJ1ZmZlciwgMCwgbC5sZW5ndGggLSAxKTsKICAgIH0KICAgIHJldHVybiB1dGY4LmRlY29kZShub25OdWxsVGVybWluYXRlZCwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpOwogIH0KCiAgLyoqCiAgICogRmluZHMgdGhlIHR5cGUgb2YgZmlsZSBzeXN0ZW0gb2JqZWN0IHRoYXQgYSBwYXRoIHBvaW50cyB0by4KICAgKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lCiAgICogcmVzdWx0cyBhcyBbdHlwZVN5bmNdLgogICAqLwogIHN0YXRpYyBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eVR5cGU+IHR5cGUoU3RyaW5nIHBhdGgsCiAgICAgIHtib29sIGZvbGxvd0xpbmtzOiB0cnVlfSkgewogICAgcmV0dXJuIF9nZXRUeXBlKF90b1V0ZjhBcnJheShwYXRoKSwgZm9sbG93TGlua3MpOwogIH0KCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBmaW5kcyB0aGUgdHlwZSBvZiBmaWxlIHN5c3RlbSBvYmplY3QgdGhhdCBhIHBhdGggcG9pbnRzIHRvLgogICAqCiAgICogUmV0dXJucyBhIFtGaWxlU3lzdGVtRW50aXR5VHlwZV0uCiAgICoKICAgKiBSZXR1cm5zIFtGaWxlU3lzdGVtRW50aXR5VHlwZS5saW5rXSBvbmx5IGlmIFtmb2xsb3dMaW5rc10gaXMgZmFsc2UgYW5kIGlmCiAgICogW3BhdGhdIHBvaW50cyB0byBhIGxpbmsuCiAgICoKICAgKiBSZXR1cm5zIFtGaWxlU3lzdGVtRW50aXR5VHlwZS5ub3RGb3VuZF0gaWYgW3BhdGhdIGRvZXMgbm90IHBvaW50IHRvIGEgZmlsZQogICAqIHN5c3RlbSBvYmplY3Qgb3IgaWYgYW55IG90aGVyIGVycm9yIG9jY3VycyBpbiBsb29raW5nIHVwIHRoZSBwYXRoLgogICAqLwogIHN0YXRpYyBGaWxlU3lzdGVtRW50aXR5VHlwZSB0eXBlU3luYyhTdHJpbmcgcGF0aCwge2Jvb2wgZm9sbG93TGlua3M6IHRydWV9KSB7CiAgICByZXR1cm4gX2dldFR5cGVTeW5jKF90b1V0ZjhBcnJheShwYXRoKSwgZm9sbG93TGlua3MpOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIGlmIHR5cGUocGF0aCwgZm9sbG93TGlua3M6IGZhbHNlKSByZXR1cm5zIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmxpbmsuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxib29sPiBpc0xpbmsoU3RyaW5nIHBhdGgpID0+IF9pc0xpbmtSYXcoX3RvVXRmOEFycmF5KHBhdGgpKTsKCiAgc3RhdGljIEZ1dHVyZTxib29sPiBfaXNMaW5rUmF3KFVpbnQ4TGlzdCByYXdQYXRoKSA9PiBfZ2V0VHlwZShyYXdQYXRoLCBmYWxzZSkKICAgICAgLnRoZW4oKHR5cGUpID0+ICh0eXBlID09IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmxpbmspKTsKCiAgLyoqCiAgICogQ2hlY2tzIGlmIHR5cGUocGF0aCkgcmV0dXJucyBGaWxlU3lzdGVtRW50aXR5VHlwZS5maWxlLgogICAqLwogIHN0YXRpYyBGdXR1cmU8Ym9vbD4gaXNGaWxlKFN0cmluZyBwYXRoKSA9PiBfZ2V0VHlwZShfdG9VdGY4QXJyYXkocGF0aCksIHRydWUpCiAgICAgIC50aGVuKCh0eXBlKSA9PiAodHlwZSA9PSBGaWxlU3lzdGVtRW50aXR5VHlwZS5maWxlKSk7CgogIC8qKgogICAqIENoZWNrcyBpZiB0eXBlKHBhdGgpIHJldHVybnMgRmlsZVN5c3RlbUVudGl0eVR5cGUuZGlyZWN0b3J5LgogICAqLwogIHN0YXRpYyBGdXR1cmU8Ym9vbD4gaXNEaXJlY3RvcnkoU3RyaW5nIHBhdGgpID0+CiAgICAgIF9nZXRUeXBlKF90b1V0ZjhBcnJheShwYXRoKSwgdHJ1ZSkKICAgICAgICAgIC50aGVuKCh0eXBlKSA9PiAodHlwZSA9PSBGaWxlU3lzdGVtRW50aXR5VHlwZS5kaXJlY3RvcnkpKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjaGVja3MgaWYgdHlwZVN5bmMocGF0aCwgZm9sbG93TGlua3M6IGZhbHNlKSByZXR1cm5zCiAgICogRmlsZVN5c3RlbUVudGl0eVR5cGUubGluay4KICAgKi8KICBzdGF0aWMgYm9vbCBpc0xpbmtTeW5jKFN0cmluZyBwYXRoKSA9PiBfaXNMaW5rUmF3U3luYyhfdG9VdGY4QXJyYXkocGF0aCkpOwoKICBzdGF0aWMgYm9vbCBfaXNMaW5rUmF3U3luYyhyYXdQYXRoKSA9PgogICAgICAoX2dldFR5cGVTeW5jKHJhd1BhdGgsIGZhbHNlKSA9PSBGaWxlU3lzdGVtRW50aXR5VHlwZS5saW5rKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjaGVja3MgaWYgdHlwZVN5bmMocGF0aCkgcmV0dXJucwogICAqIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmZpbGUuCiAgICovCiAgc3RhdGljIGJvb2wgaXNGaWxlU3luYyhTdHJpbmcgcGF0aCkgPT4KICAgICAgKF9nZXRUeXBlU3luYyhfdG9VdGY4QXJyYXkocGF0aCksIHRydWUpID09IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmZpbGUpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNoZWNrcyBpZiB0eXBlU3luYyhwYXRoKSByZXR1cm5zCiAgICogRmlsZVN5c3RlbUVudGl0eVR5cGUuZGlyZWN0b3J5LgogICAqLwogIHN0YXRpYyBib29sIGlzRGlyZWN0b3J5U3luYyhTdHJpbmcgcGF0aCkgPT4KICAgICAgKF9nZXRUeXBlU3luYyhfdG9VdGY4QXJyYXkocGF0aCksIHRydWUpID09CiAgICAgICAgICBGaWxlU3lzdGVtRW50aXR5VHlwZS5kaXJlY3RvcnkpOwoKICBleHRlcm5hbCBzdGF0aWMgX2dldFR5cGVOYXRpdmUoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgYm9vbCBmb2xsb3dMaW5rcyk7CiAgZXh0ZXJuYWwgc3RhdGljIF9pZGVudGljYWxOYXRpdmUoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMik7CiAgZXh0ZXJuYWwgc3RhdGljIF9yZXNvbHZlU3ltYm9saWNMaW5rcyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHBhdGgpOwoKICAvLyBGaW5kcyB0aGUgbmV4dC10by1sYXN0IGNvbXBvbmVudCB3aGVuIGRpdmlkaW5nIGF0IHBhdGggc2VwYXJhdG9ycy4KICBzdGF0aWMgZmluYWwgUmVnRXhwIF9wYXJlbnRSZWdFeHAgPSBQbGF0Zm9ybS5pc1dpbmRvd3MKICAgICAgPyBuZXcgUmVnRXhwKHInW14vXFxdWy9cXF0rW14vXFxdJykKICAgICAgOiBuZXcgUmVnRXhwKHInW14vXS8rW14vXScpOwoKICAvKioKICAgKiBSZW1vdmVzIHRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudCBvZiBhIHBhdGgsIHVzaW5nIHRoZSBwbGF0Zm9ybSdzCiAgICogcGF0aCBzZXBhcmF0b3IgdG8gc3BsaXQgdGhlIHBhdGguCiAgICoKICAgKiBXaWxsIG5vdCByZW1vdmUgdGhlIHJvb3QgY29tcG9uZW50IG9mIGEgV2luZG93cyBwYXRoLCBsaWtlICJDOlxcIiBvcgogICAqICJcXFxcc2VydmVyX25hbWVcXCIuIElnbm9yZXMgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3JzLCBhbmQgbGVhdmVzIG5vCiAgICogdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3JzLgogICAqLwogIHN0YXRpYyBTdHJpbmcgcGFyZW50T2YoU3RyaW5nIHBhdGgpIHsKICAgIGludCByb290RW5kID0gLTE7CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoX2Fic29sdXRlV2luZG93c1BhdGhQYXR0ZXJuKSkgewogICAgICAgIC8vIFJvb3QgZW5kcyBhdCBmaXJzdCAvIG9yIFwgYWZ0ZXIgdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzLgogICAgICAgIHJvb3RFbmQgPSBwYXRoLmluZGV4T2YobmV3IFJlZ0V4cChyJ1svXFxdJyksIDIpOwogICAgICAgIGlmIChyb290RW5kID09IC0xKSByZXR1cm4gcGF0aDsKICAgICAgfSBlbHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoJ1xcJykgfHwgcGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgICAgICByb290RW5kID0gMDsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICByb290RW5kID0gMDsKICAgIH0KICAgIC8vIElnbm9yZSB0cmFpbGluZyBzbGFzaGVzLgogICAgLy8gQWxsIG5vbi10cml2aWFsIGNhc2VzIGhhdmUgc2VwYXJhdG9ycyBiZXR3ZWVuIHR3byBub24tc2VwYXJhdG9ycy4KICAgIGludCBwb3MgPSBwYXRoLmxhc3RJbmRleE9mKF9wYXJlbnRSZWdFeHApOwogICAgaWYgKHBvcyA+IHJvb3RFbmQpIHsKICAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDAsIHBvcyArIDEpOwogICAgfSBlbHNlIGlmIChyb290RW5kID4gLTEpIHsKICAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDAsIHJvb3RFbmQgKyAxKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAnLic7CiAgICB9CiAgfQoKICAvKioKICAgKiBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgW3RoaXNdLgogICAqLwogIERpcmVjdG9yeSBnZXQgcGFyZW50ID0+IG5ldyBEaXJlY3RvcnkocGFyZW50T2YocGF0aCkpOwoKICBzdGF0aWMgRmlsZVN5c3RlbUVudGl0eVR5cGUgX2dldFR5cGVTeW5jSGVscGVyKAogICAgICBVaW50OExpc3QgcmF3UGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgdmFyIHJlc3VsdCA9IF9nZXRUeXBlTmF0aXZlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgcmF3UGF0aCwgZm9sbG93TGlua3MpOwogICAgX3Rocm93SWZFcnJvcihyZXN1bHQsICdFcnJvciBnZXR0aW5nIHR5cGUgb2YgRmlsZVN5c3RlbUVudGl0eScpOwogICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9sb29rdXAocmVzdWx0KTsKICB9CgogIHN0YXRpYyBGaWxlU3lzdGVtRW50aXR5VHlwZSBfZ2V0VHlwZVN5bmMoCiAgICAgIFVpbnQ4TGlzdCByYXdQYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZ2V0VHlwZVN5bmNIZWxwZXIocmF3UGF0aCwgZm9sbG93TGlua3MpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5mc2VHZXRUeXBlU3luYygKICAgICAgICB1dGY4LmRlY29kZShyYXdQYXRoLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSksIGZvbGxvd0xpbmtzKTsKICB9CgogIHN0YXRpYyBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eVR5cGU+IF9nZXRUeXBlUmVxdWVzdCgKICAgICAgVWludDhMaXN0IHJhd1BhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZVR5cGUsIFtudWxsLCByYXdQYXRoLCBmb2xsb3dMaW5rc10pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJFcnJvciBnZXR0aW5nIHR5cGUiLAogICAgICAgICAgICB1dGY4LmRlY29kZShyYXdQYXRoLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSkpOwogICAgICB9CiAgICAgIHJldHVybiBGaWxlU3lzdGVtRW50aXR5VHlwZS5fbG9va3VwKHJlc3BvbnNlKTsKICAgIH0pOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gX2dldFR5cGUoCiAgICAgIFVpbnQ4TGlzdCByYXdQYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZ2V0VHlwZVJlcXVlc3QocmF3UGF0aCwgZm9sbG93TGlua3MpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5mc2VHZXRUeXBlKAogICAgICAgIHV0ZjguZGVjb2RlKHJhd1BhdGgsIGFsbG93TWFsZm9ybWVkOiB0cnVlKSwgZm9sbG93TGlua3MpOwogIH0KCiAgc3RhdGljIF90aHJvd0lmRXJyb3IoT2JqZWN0IHJlc3VsdCwgU3RyaW5nIG1zZywgW1N0cmluZyBwYXRoXSkgewogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKG1zZywgcGF0aCwgcmVzdWx0KTsKICAgIH0gZWxzZSBpZiAocmVzdWx0IGlzIEFyZ3VtZW50RXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogIH0KCiAgLy8gVE9ETyhia29ueWkpOiBmaW5kIGEgd2F5IHRvIGRvIHRoaXMgd2l0aCByYXcgcGF0aHMuCiAgc3RhdGljIFN0cmluZyBfdHJpbVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMoU3RyaW5nIHBhdGgpIHsKICAgIC8vIERvbid0IGhhbmRsZSBhcmd1bWVudCBlcnJvcnMgaGVyZS4KICAgIGlmIChwYXRoID09IG51bGwpIHJldHVybiBwYXRoOwogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICB3aGlsZSAocGF0aC5sZW5ndGggPiAxICYmCiAgICAgICAgICAocGF0aC5lbmRzV2l0aChQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yKSB8fCBwYXRoLmVuZHNXaXRoKCcvJykpKSB7CiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHdoaWxlIChwYXRoLmxlbmd0aCA+IDEgJiYgcGF0aC5lbmRzV2l0aChQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yKSkgewogICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDEpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGF0aDsKICB9CgogIC8vIFRPRE8oYmtvbnlpKTogZmluZCBhIHdheSB0byBkbyB0aGlzIHdpdGggcmF3IHBhdGhzLgogIHN0YXRpYyBTdHJpbmcgX2Vuc3VyZVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMoU3RyaW5nIHBhdGgpIHsKICAgIC8vIERvbid0IGhhbmRsZSBhcmd1bWVudCBlcnJvcnMgaGVyZS4KICAgIGlmIChwYXRoID09IG51bGwpIHJldHVybiBwYXRoOwogICAgaWYgKHBhdGguaXNFbXB0eSkgcGF0aCA9ICcuJzsKICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgd2hpbGUgKCFwYXRoLmVuZHNXaXRoKFBsYXRmb3JtLnBhdGhTZXBhcmF0b3IpICYmICFwYXRoLmVuZHNXaXRoKCcvJykpIHsKICAgICAgICBwYXRoID0gIiRwYXRoJHtQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yfSI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHdoaWxlICghcGF0aC5lbmRzV2l0aChQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yKSkgewogICAgICAgIHBhdGggPSAiJHBhdGgke1BsYXRmb3JtLnBhdGhTZXBhcmF0b3J9IjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhdGg7CiAgfQp9CgovKioKICogQmFzZSBldmVudCBjbGFzcyBlbWl0dGVkIGJ5IFtGaWxlU3lzdGVtRW50aXR5LndhdGNoXS4KICovCmNsYXNzIEZpbGVTeXN0ZW1FdmVudCB7CiAgLyoqCiAgICogQml0ZmllbGQgZm9yIFtGaWxlU3lzdGVtRW50aXR5LndhdGNoXSwgdG8gZW5hYmxlIFtGaWxlU3lzdGVtQ3JlYXRlRXZlbnRdcy4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IGNyZWF0ZSA9IDEgPDwgMDsKICBARGVwcmVjYXRlZCgiVXNlIGNyZWF0ZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IENSRUFURSA9IDEgPDwgMDsKCiAgLyoqCiAgICogQml0ZmllbGQgZm9yIFtGaWxlU3lzdGVtRW50aXR5LndhdGNoXSwgdG8gZW5hYmxlIFtGaWxlU3lzdGVtTW9kaWZ5RXZlbnRdcy4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IG1vZGlmeSA9IDEgPDwgMTsKICBARGVwcmVjYXRlZCgiVXNlIG1vZGlmeSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1PRElGWSA9IDEgPDwgMTsKCiAgLyoqCiAgICogQml0ZmllbGQgZm9yIFtGaWxlU3lzdGVtRW50aXR5LndhdGNoXSwgdG8gZW5hYmxlIFtGaWxlU3lzdGVtRGVsZXRlRXZlbnRdcy4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IGRlbGV0ZSA9IDEgPDwgMjsKICBARGVwcmVjYXRlZCgiVXNlIGRlbGV0ZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IERFTEVURSA9IDEgPDwgMjsKCiAgLyoqCiAgICogQml0ZmllbGQgZm9yIFtGaWxlU3lzdGVtRW50aXR5LndhdGNoXSwgdG8gZW5hYmxlIFtGaWxlU3lzdGVtTW92ZUV2ZW50XXMuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBtb3ZlID0gMSA8PCAzOwogIEBEZXByZWNhdGVkKCJVc2UgbW92ZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1PVkUgPSAxIDw8IDM7CgogIC8qKgogICAqIEJpdGZpZWxkIGZvciBbRmlsZVN5c3RlbUVudGl0eS53YXRjaF0sIGZvciBlbmFibGluZyBhbGwgb2YgW2NyZWF0ZV0sCiAgICogW21vZGlmeV0sIFtkZWxldGVdIGFuZCBbbW92ZV0uCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBhbGwgPSBjcmVhdGUgfCBtb2RpZnkgfCBkZWxldGUgfCBtb3ZlOwogIEBEZXByZWNhdGVkKCJVc2UgYWxsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQUxMID0gY3JlYXRlIHwgbW9kaWZ5IHwgZGVsZXRlIHwgbW92ZTsKCiAgc3RhdGljIGNvbnN0IGludCBfbW9kaWZ5QXR0cmlidXRlcyA9IDEgPDwgNDsKICBzdGF0aWMgY29uc3QgaW50IF9kZWxldGVTZWxmID0gMSA8PCA1OwogIHN0YXRpYyBjb25zdCBpbnQgX2lzRGlyID0gMSA8PCA2OwoKICAvKioKICAgKiBUaGUgdHlwZSBvZiBldmVudC4gU2VlIFtGaWxlU3lzdGVtRXZlbnRdIGZvciBhIGxpc3Qgb2YgZXZlbnRzLgogICAqLwogIGZpbmFsIGludCB0eXBlOwoKICAvKioKICAgKiBUaGUgcGF0aCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuCiAgICoKICAgKiBEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGFuZCB0aGUgRmlsZVN5c3RlbUVudGl0eSwgdGhlIHBhdGggbWF5IGJlCiAgICogcmVsYXRpdmUuCiAgICovCiAgZmluYWwgU3RyaW5nIHBhdGg7CgogIC8qKgogICAqIElzIGB0cnVlYCBpZiB0aGUgZXZlbnQgdGFyZ2V0IHdhcyBhIGRpcmVjdG9yeS4KICAgKgogICAqIE5vdGUgdGhhdCBpZiB0aGUgZmlsZSBoYXMgYmVlbiBkZWxldGVkIGJ5IHRoZSB0aW1lIHRoZSBldmVudCBoYXMgYXJyaXZlZCwKICAgKiB0aGlzIHdpbGwgYWx3YXlzIGJlIGBmYWxzZWAgb24gV2luZG93cy4gSW4gcGFydGljdWxhciwgaXQgd2lsbCBhbHdheXMgYmUKICAgKiBgZmFsc2VgIGZvciBgZGVsZXRlYCBldmVudHMuCiAgICovCiAgZmluYWwgYm9vbCBpc0RpcmVjdG9yeTsKCiAgRmlsZVN5c3RlbUV2ZW50Ll8odGhpcy50eXBlLCB0aGlzLnBhdGgsIHRoaXMuaXNEaXJlY3RvcnkpOwp9CgovKioKICogRmlsZSBzeXN0ZW0gZXZlbnQgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSBzeXN0ZW0gb2JqZWN0cy4KICovCmNsYXNzIEZpbGVTeXN0ZW1DcmVhdGVFdmVudCBleHRlbmRzIEZpbGVTeXN0ZW1FdmVudCB7CiAgRmlsZVN5c3RlbUNyZWF0ZUV2ZW50Ll8ocGF0aCwgaXNEaXJlY3RvcnkpCiAgICAgIDogc3VwZXIuXyhGaWxlU3lzdGVtRXZlbnQuY3JlYXRlLCBwYXRoLCBpc0RpcmVjdG9yeSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJGaWxlU3lzdGVtQ3JlYXRlRXZlbnQoJyRwYXRoJykiOwp9CgovKioKICogRmlsZSBzeXN0ZW0gZXZlbnQgZm9yIG1vZGlmaWNhdGlvbnMgb2YgZmlsZSBzeXN0ZW0gb2JqZWN0cy4KICovCmNsYXNzIEZpbGVTeXN0ZW1Nb2RpZnlFdmVudCBleHRlbmRzIEZpbGVTeXN0ZW1FdmVudCB7CiAgLyoqCiAgICogSWYgdGhlIGNvbnRlbnQgd2FzIGNoYW5nZWQgYW5kIG5vdCBvbmx5IHRoZSBhdHRyaWJ1dGVzLCBbY29udGVudENoYW5nZWRdCiAgICogaXMgYHRydWVgLgogICAqLwogIGZpbmFsIGJvb2wgY29udGVudENoYW5nZWQ7CgogIEZpbGVTeXN0ZW1Nb2RpZnlFdmVudC5fKHBhdGgsIGlzRGlyZWN0b3J5LCB0aGlzLmNvbnRlbnRDaGFuZ2VkKQogICAgICA6IHN1cGVyLl8oRmlsZVN5c3RlbUV2ZW50Lm1vZGlmeSwgcGF0aCwgaXNEaXJlY3RvcnkpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAiRmlsZVN5c3RlbU1vZGlmeUV2ZW50KCckcGF0aCcsIGNvbnRlbnRDaGFuZ2VkPSRjb250ZW50Q2hhbmdlZCkiOwp9CgovKioKICogRmlsZSBzeXN0ZW0gZXZlbnQgZm9yIGRlbGV0aW9uIG9mIGZpbGUgc3lzdGVtIG9iamVjdHMuCiAqLwpjbGFzcyBGaWxlU3lzdGVtRGVsZXRlRXZlbnQgZXh0ZW5kcyBGaWxlU3lzdGVtRXZlbnQgewogIEZpbGVTeXN0ZW1EZWxldGVFdmVudC5fKHBhdGgsIGlzRGlyZWN0b3J5KQogICAgICA6IHN1cGVyLl8oRmlsZVN5c3RlbUV2ZW50LmRlbGV0ZSwgcGF0aCwgaXNEaXJlY3RvcnkpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRmlsZVN5c3RlbURlbGV0ZUV2ZW50KCckcGF0aCcpIjsKfQoKLyoqCiAqIEZpbGUgc3lzdGVtIGV2ZW50IGZvciBtb3Zpbmcgb2YgZmlsZSBzeXN0ZW0gb2JqZWN0cy4KICovCmNsYXNzIEZpbGVTeXN0ZW1Nb3ZlRXZlbnQgZXh0ZW5kcyBGaWxlU3lzdGVtRXZlbnQgewogIC8qKgogICAqIElmIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGlzIGFibGUgdG8gaWRlbnRpZnkgdGhlIGRlc3RpbmF0aW9uIG9mCiAgICogdGhlIG1vdmVkIGZpbGUsIFtkZXN0aW5hdGlvbl0gd2lsbCBiZSBzZXQuIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBgbnVsbGAuCiAgICovCiAgZmluYWwgU3RyaW5nIGRlc3RpbmF0aW9uOwoKICBGaWxlU3lzdGVtTW92ZUV2ZW50Ll8ocGF0aCwgaXNEaXJlY3RvcnksIHRoaXMuZGVzdGluYXRpb24pCiAgICAgIDogc3VwZXIuXyhGaWxlU3lzdGVtRXZlbnQubW92ZSwgcGF0aCwgaXNEaXJlY3RvcnkpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICB2YXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlKCJGaWxlU3lzdGVtTW92ZUV2ZW50KCckcGF0aCciKTsKICAgIGlmIChkZXN0aW5hdGlvbiAhPSBudWxsKSBidWZmZXIud3JpdGUoIiwgJyRkZXN0aW5hdGlvbiciKTsKICAgIGJ1ZmZlci53cml0ZSgnKScpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgX0ZpbGVTeXN0ZW1XYXRjaGVyIHsKICBleHRlcm5hbCBzdGF0aWMgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gX3dhdGNoKAogICAgICBTdHJpbmcgcGF0aCwgaW50IGV2ZW50cywgYm9vbCByZWN1cnNpdmUpOwogIGV4dGVybmFsIHN0YXRpYyBib29sIGdldCBpc1N1cHBvcnRlZDsKfQqD7ABOTjwBEQEEUQM8IgMEAR0/IhwBRCcmAT8iHAFDJiUBIx8kHyMFEwE0AURPAgEEUEkzBBE0GiEiIhoaAT8BBkwNBUMGGgEGSAYbAQZIBUMdBhsBBjQFRQYjAQYpBU0sBhIBBikGEgFMHQElGBkZLhITAUABBk8FS1BDBio3HSYGJQQBMzIeQQY3NCNFRkYzFRYEAQZHHAVNBi43HRoGIQQBLzIeQQZLGygjCEMfJUdISDUXGAgEARsVGx0dHxkBBjgFTlBOTxYGGCRQFTs7PQstLScaBAIBBEcDQkEyA0ADQiUDSytHUAMnAyg8CwMDFgMOWFFNFwMba1EDUkwcBCIQFgETAQZFBUozBiUBBko4BUc+RkZHQ0IUBQYZAQZIDQVHPkZFQUdCHwYVAQYmBUBFBU5MSwYzAQY0BUMFTkw7Bi8BBj8gBVAPBT9IR0w8BU9MMgVPTQwFUSVBHA0FUA8GKilRKCY+CBcIBAEGPyAFUA8FQ0hHTEAFT0wyBU9RDAVRJUMaBVAPBiZJQhMEAQZIGQUwBUsNBUZODgYyAQZHKAU0BUkFSEMGMgEGJgVMSUhOIQVQTVEUBUVNQAY+JQEGNAVMSUhOIQVQTVAZBUYGUQEGOAVPRwVKSUxFTBZMQQVOQAVPIwVDIDsFSUccBUgGIUJAQjcdSAY+BAE9LQE/KUooL0gIFwgEAQY+EgVABU9IREkFTCcGPjEdJwYxBAE0LQEGSQVNQj0GGB47DSMGBAEGTQU+BTBHIQYhAR0hLSE6Hg03BgQBIyU3HzUvSCAuDTsgLgYEATtIRhMEAQZMEgVPSERJBUsMBjoxHSsGNQQBBjkFKwYlNx0tBisEAU0yLTIBPRUTBicvJBINEAYEATYVEQYlF0kGQQQBBkEFTRwGOCI2BAEGTwUnBU8eBVBIBlA6BAEGUQZNAVA8AQY9BlA8AQZCBjIpRQEGSCAGTQEpQwEGNCAGKU0BBjQlBi4xKwEiQiQ5TwFIOSojAQZGJwVKSh8GKBYeOkU5KEIVCCcTBiBJLxkpHy0NEgYEAQYmBjkBMi1ORTEEASwtMR03BiVCBAE3LSlNKEU5CDUIBAEwLTEdNAYhQgQBQx04KhQGBAE5OyojHiBLMwgNSTMIBhEEATk9KiMiHk4xCA03MQgGEQQCAQQ5BBgGUAYkJCQBBlAGJCQkAQZQBiQkJAEGTgYiIiIBBkokBjohOgEvKSQBBkQGEgEGKAVJDwYVAQY0BU9OIgYaAT0CAQQ8BDYtPAE5AgEEPwQ2Bk4QBh0BQjwBF0gCAQQ6BDYtPAE5AgEEOAQ0Bk1OBhwBPToBFiUxPxceBAIBGzIwKAIBH2RhcnQ6aW8vZmlsZV9zeXN0ZW1fZW50aXR5LmRhcnQ9b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9maWxlX3N5c3RlbV9lbnRpdHlfcGF0Y2guZGFydILyLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBGaWxlU3RhdCB7CiAgQHBhdGNoCiAgc3RhdGljIF9zdGF0U3luYyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgU3RyaW5nIHBhdGgpIG5hdGl2ZSAiRmlsZV9TdGF0IjsKfQoKQHBhdGNoCmNsYXNzIEZpbGVTeXN0ZW1FbnRpdHkgewogIEBwYXRjaAogIHN0YXRpYyBfZ2V0VHlwZU5hdGl2ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsCiAgICAgIGJvb2wgZm9sbG93TGlua3MpIG5hdGl2ZSAiRmlsZV9HZXRUeXBlIjsKICBAcGF0Y2gKICBzdGF0aWMgX2lkZW50aWNhbE5hdGl2ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpCiAgICAgIG5hdGl2ZSAiRmlsZV9BcmVJZGVudGljYWwiOwogIEBwYXRjaAogIHN0YXRpYyBfcmVzb2x2ZVN5bWJvbGljTGlua3MoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBwYXRoKQogICAgICBuYXRpdmUgIkZpbGVfUmVzb2x2ZVN5bWJvbGljTGlua3MiOwp9ChoATk48ASABBxEJSgIBBxkJQS8JTCIJRSoCAStkYXJ0OmlvLXBhdGNoL2ZpbGVfc3lzdGVtX2VudGl0eV9wYXRjaC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9pb19yZXNvdXJjZV9pbmZvLmRhcnSh/i8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgphYnN0cmFjdCBjbGFzcyBfSU9SZXNvdXJjZUluZm8gewogIGZpbmFsIFN0cmluZyB0eXBlOwogIGZpbmFsIGludCBpZDsKICBTdHJpbmcgZ2V0IG5hbWU7CiAgc3RhdGljIGludCBfY291bnQgPSAwOwoKICBzdGF0aWMgZmluYWwgU3RvcHdhdGNoIF9zdyA9IG5ldyBTdG9wd2F0Y2goKS4uc3RhcnQoKTsKICBzdGF0aWMgZmluYWwgX3N0YXJ0VGltZSA9IG5ldyBEYXRlVGltZS5ub3coKS5taWxsaXNlY29uZHNTaW5jZUVwb2NoOwoKICBzdGF0aWMgZG91YmxlIGdldCB0aW1lc3RhbXAgPT4gX3N0YXJ0VGltZSArIF9zdy5lbGFwc2VkTWljcm9zZWNvbmRzIC8gMTAwMDsKCiAgX0lPUmVzb3VyY2VJbmZvKHRoaXMudHlwZSkgOiBpZCA9IF9JT1Jlc291cmNlSW5mby5nZXROZXh0SUQoKTsKCiAgLy8vIEdldCB0aGUgZnVsbCBzZXQgb2YgdmFsdWVzIGZvciBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIG5vcm1hbGx5CiAgLy8vIGxvb2tlZCB1cCBiYXNlZCBvbiBhbiBpZCBmcm9tIGEgcmVmZXJlbmNlVmFsdWVNYXAuCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IGZ1bGxWYWx1ZU1hcDsKCiAgLy8vIFRoZSByZWZlcmVuY2UgbWFwLCB1c2VkIHRvIHJldHVybiBhIGxpc3Qgb2YgdmFsdWVzLCBlLmcuLCBnZXR0aW5nCiAgLy8vIGFsbCBvcGVuIHNvY2tldHMuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBpcyBzaGFyZWQgYW1vbmcgYWxsIHN1YmNsYXNzZXMuCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IHJlZmVyZW5jZVZhbHVlTWFwID0+IHsKICAgICAgICAvLyBUaGUgdHlwZSBmb3IgYSByZWZlcmVuY2Ugb2JqZWN0IGlzIHByZWZpeGVkIHdpdGggQCBpbiBvYnNlcnZhdG9yeS4KICAgICAgICAndHlwZSc6ICdAJHR5cGUnLAogICAgICAgICdpZCc6IGlkLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgfTsKCiAgc3RhdGljIGludCBnZXROZXh0SUQoKSA9PiBfY291bnQrKzsKfQoKYWJzdHJhY3QgY2xhc3MgX1JlYWRXcml0ZVJlc291cmNlSW5mbyBleHRlbmRzIF9JT1Jlc291cmNlSW5mbyB7CiAgaW50IHRvdGFsUmVhZDsKICBpbnQgdG90YWxXcml0dGVuOwogIGludCByZWFkQ291bnQ7CiAgaW50IHdyaXRlQ291bnQ7CiAgZG91YmxlIGxhc3RSZWFkOwogIGRvdWJsZSBsYXN0V3JpdGU7CgogIC8vIE5vdCBhbGwgY2FsbCBzaXRlcyB1c2UgdGhpcy4gSW4gc29tZSBjYXNlcywgZS5nLiwgYSBzb2NrZXQsIGEgcmVhZCBkb2VzCiAgLy8gbm90IGFsd2F5cyBtZWFuIHRoYXQgd2UgYWN0dWFsbHkgcmVhZCBzb21lIGJ5dGVzICh3ZSBtYXkgZG8gYSByZWFkIHRvIHNlZQogIC8vIGlmIHRoZXJlIGFyZSBzb21lIGJ5dGVzIGF2YWlsYWJsZSkuCiAgdm9pZCBhZGRSZWFkKGludCBieXRlcykgewogICAgdG90YWxSZWFkICs9IGJ5dGVzOwogICAgcmVhZENvdW50Kys7CiAgICBsYXN0UmVhZCA9IF9JT1Jlc291cmNlSW5mby50aW1lc3RhbXA7CiAgfQoKICAvLyBJbiBjYXNlcyB3aGVyZSB3ZSByZWFkIGJ1dCBkaWQgbm90IG5lY2Vzc2FyaWx5IGdldCBhbnkgYnl0ZXMsIHVzZSB0aGlzIHRvCiAgLy8gdXBkYXRlIHRoZSByZWFkQ291bnQgYW5kIHRpbWVzdGFtcC4gTWFudWFsbHkgdXBkYXRlIHRvdGFsUmVhZCBpZiBhbnkgYnl0ZXMKICAvLyB3aGVyZSBhY3R1YWxseSByZWFkLgogIHZvaWQgZGlkUmVhZCgpIHsKICAgIGFkZFJlYWQoMCk7CiAgfQoKICB2b2lkIGFkZFdyaXRlKGludCBieXRlcykgewogICAgdG90YWxXcml0dGVuICs9IGJ5dGVzOwogICAgd3JpdGVDb3VudCsrOwogICAgbGFzdFdyaXRlID0gX0lPUmVzb3VyY2VJbmZvLnRpbWVzdGFtcDsKICB9CgogIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8oU3RyaW5nIHR5cGUpCiAgICAgIDogdG90YWxSZWFkID0gMCwKICAgICAgICB0b3RhbFdyaXR0ZW4gPSAwLAogICAgICAgIHJlYWRDb3VudCA9IDAsCiAgICAgICAgd3JpdGVDb3VudCA9IDAsCiAgICAgICAgbGFzdFJlYWQgPSAwLjAsCiAgICAgICAgbGFzdFdyaXRlID0gMC4wLAogICAgICAgIHN1cGVyKHR5cGUpOwoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgZnVsbFZhbHVlTWFwID0+IHsKICAgICAgICAndHlwZSc6IHR5cGUsCiAgICAgICAgJ2lkJzogaWQsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICd0b3RhbFJlYWQnOiB0b3RhbFJlYWQsCiAgICAgICAgJ3RvdGFsV3JpdHRlbic6IHRvdGFsV3JpdHRlbiwKICAgICAgICAncmVhZENvdW50JzogcmVhZENvdW50LAogICAgICAgICd3cml0ZUNvdW50Jzogd3JpdGVDb3VudCwKICAgICAgICAnbGFzdFJlYWQnOiBsYXN0UmVhZCwKICAgICAgICAnbGFzdFdyaXRlJzogbGFzdFdyaXRlCiAgICAgIH07Cn0KCmNsYXNzIF9GaWxlUmVzb3VyY2VJbmZvIGV4dGVuZHMgX1JlYWRXcml0ZVJlc291cmNlSW5mbyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdHlwZSA9ICdfZmlsZSc7CgogIGZpbmFsIGZpbGU7CgogIHN0YXRpYyBNYXA8aW50LCBfRmlsZVJlc291cmNlSW5mbz4gb3BlbkZpbGVzID0KICAgICAgbmV3IE1hcDxpbnQsIF9GaWxlUmVzb3VyY2VJbmZvPigpOwoKICBfRmlsZVJlc291cmNlSW5mbyh0aGlzLmZpbGUpIDogc3VwZXIoX3R5cGUpIHsKICAgIEZpbGVPcGVuZWQodGhpcyk7CiAgfQoKICBzdGF0aWMgRmlsZU9wZW5lZChfRmlsZVJlc291cmNlSW5mbyBpbmZvKSB7CiAgICBhc3NlcnQoIW9wZW5GaWxlcy5jb250YWluc0tleShpbmZvLmlkKSk7CiAgICBvcGVuRmlsZXNbaW5mby5pZF0gPSBpbmZvOwogIH0KCiAgc3RhdGljIEZpbGVDbG9zZWQoX0ZpbGVSZXNvdXJjZUluZm8gaW5mbykgewogICAgYXNzZXJ0KG9wZW5GaWxlcy5jb250YWluc0tleShpbmZvLmlkKSk7CiAgICBvcGVuRmlsZXMucmVtb3ZlKGluZm8uaWQpOwogIH0KCiAgc3RhdGljIEl0ZXJhYmxlPE1hcDxTdHJpbmcsIGR5bmFtaWM+PiBnZXRPcGVuRmlsZXNMaXN0KCkgewogICAgcmV0dXJuIG5ldyBMaXN0LmZyb20ob3BlbkZpbGVzLnZhbHVlcy5tYXAoKGUpID0+IGUucmVmZXJlbmNlVmFsdWVNYXApKTsKICB9CgogIHN0YXRpYyBGdXR1cmU8U2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBnZXRPcGVuRmlsZXMoZnVuY3Rpb24sIHBhcmFtcykgewogICAgYXNzZXJ0KGZ1bmN0aW9uID09ICdleHQuZGFydC5pby5nZXRPcGVuRmlsZXMnKTsKICAgIHZhciBkYXRhID0geyd0eXBlJzogJ19vcGVuZmlsZXMnLCAnZGF0YSc6IGdldE9wZW5GaWxlc0xpc3QoKX07CiAgICB2YXIganNvblZhbHVlID0ganNvbi5lbmNvZGUoZGF0YSk7CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChqc29uVmFsdWUpKTsKICB9CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldEZpbGVJbmZvTWFwKCkgewogICAgcmV0dXJuIGZ1bGxWYWx1ZU1hcDsKICB9CgogIHN0YXRpYyBGdXR1cmU8U2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBnZXRGaWxlSW5mb01hcEJ5SUQoZnVuY3Rpb24sIHBhcmFtcykgewogICAgYXNzZXJ0KHBhcmFtcy5jb250YWluc0tleSgnaWQnKSk7CiAgICB2YXIgaWQgPSBpbnQucGFyc2UocGFyYW1zWydpZCddKTsKICAgIHZhciByZXN1bHQgPQogICAgICAgIG9wZW5GaWxlcy5jb250YWluc0tleShpZCkgPyBvcGVuRmlsZXNbaWRdLmdldEZpbGVJbmZvTWFwKCkgOiB7fTsKICAgIHZhciBqc29uVmFsdWUgPSBqc29uLmVuY29kZShyZXN1bHQpOwogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUobmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQoanNvblZhbHVlKSk7CiAgfQoKICBTdHJpbmcgZ2V0IG5hbWUgewogICAgcmV0dXJuICcke2ZpbGUucGF0aH0nOwogIH0KfQoKY2xhc3MgX1Byb2Nlc3NSZXNvdXJjZUluZm8gZXh0ZW5kcyBfSU9SZXNvdXJjZUluZm8gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3R5cGUgPSAnX3Byb2Nlc3MnOwogIGZpbmFsIHByb2Nlc3M7CiAgZmluYWwgZG91YmxlIHN0YXJ0ZWRBdDsKCiAgc3RhdGljIE1hcDxpbnQsIF9Qcm9jZXNzUmVzb3VyY2VJbmZvPiBzdGFydGVkUHJvY2Vzc2VzID0KICAgICAgbmV3IE1hcDxpbnQsIF9Qcm9jZXNzUmVzb3VyY2VJbmZvPigpOwoKICBfUHJvY2Vzc1Jlc291cmNlSW5mbyh0aGlzLnByb2Nlc3MpCiAgICAgIDogc3RhcnRlZEF0ID0gX0lPUmVzb3VyY2VJbmZvLnRpbWVzdGFtcCwKICAgICAgICBzdXBlcihfdHlwZSkgewogICAgUHJvY2Vzc1N0YXJ0ZWQodGhpcyk7CiAgfQoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gcHJvY2Vzcy5fcGF0aDsKCiAgdm9pZCBzdG9wcGVkKCkgewogICAgUHJvY2Vzc1N0b3BwZWQodGhpcyk7CiAgfQoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgZnVsbFZhbHVlTWFwID0+IHsKICAgICAgICAndHlwZSc6IHR5cGUsCiAgICAgICAgJ2lkJzogaWQsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICdwaWQnOiBwcm9jZXNzLnBpZCwKICAgICAgICAnc3RhcnRlZEF0Jzogc3RhcnRlZEF0LAogICAgICAgICdhcmd1bWVudHMnOiBwcm9jZXNzLl9hcmd1bWVudHMsCiAgICAgICAgJ3dvcmtpbmdEaXJlY3RvcnknOgogICAgICAgICAgICBwcm9jZXNzLl93b3JraW5nRGlyZWN0b3J5ID09IG51bGwgPyAnLicgOiBwcm9jZXNzLl93b3JraW5nRGlyZWN0b3J5LAogICAgICB9OwoKICBzdGF0aWMgUHJvY2Vzc1N0YXJ0ZWQoX1Byb2Nlc3NSZXNvdXJjZUluZm8gaW5mbykgewogICAgYXNzZXJ0KCFzdGFydGVkUHJvY2Vzc2VzLmNvbnRhaW5zS2V5KGluZm8uaWQpKTsKICAgIHN0YXJ0ZWRQcm9jZXNzZXNbaW5mby5pZF0gPSBpbmZvOwogIH0KCiAgc3RhdGljIFByb2Nlc3NTdG9wcGVkKF9Qcm9jZXNzUmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydChzdGFydGVkUHJvY2Vzc2VzLmNvbnRhaW5zS2V5KGluZm8uaWQpKTsKICAgIHN0YXJ0ZWRQcm9jZXNzZXMucmVtb3ZlKGluZm8uaWQpOwogIH0KCiAgc3RhdGljIEl0ZXJhYmxlPE1hcDxTdHJpbmcsIGR5bmFtaWM+PiBnZXRTdGFydGVkUHJvY2Vzc2VzTGlzdCgpID0+CiAgICAgIG5ldyBMaXN0LmZyb20oc3RhcnRlZFByb2Nlc3Nlcy52YWx1ZXMubWFwKChlKSA9PiBlLnJlZmVyZW5jZVZhbHVlTWFwKSk7CgogIHN0YXRpYyBGdXR1cmU8U2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBnZXRTdGFydGVkUHJvY2Vzc2VzKAogICAgICBTdHJpbmcgZnVuY3Rpb24sIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1zKSB7CiAgICBhc3NlcnQoZnVuY3Rpb24gPT0gJ2V4dC5kYXJ0LmlvLmdldFByb2Nlc3NlcycpOwogICAgdmFyIGRhdGEgPSB7J3R5cGUnOiAnX3N0YXJ0ZWRwcm9jZXNzZXMnLCAnZGF0YSc6IGdldFN0YXJ0ZWRQcm9jZXNzZXNMaXN0KCl9OwogICAgdmFyIGpzb25WYWx1ZSA9IGpzb24uZW5jb2RlKGRhdGEpOwogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUobmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQoanNvblZhbHVlKSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gZ2V0UHJvY2Vzc0luZm9NYXBCeUlkKAogICAgICBTdHJpbmcgZnVuY3Rpb24sIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1zKSB7CiAgICB2YXIgaWQgPSBpbnQucGFyc2UocGFyYW1zWydpZCddKTsKICAgIHZhciByZXN1bHQgPSBzdGFydGVkUHJvY2Vzc2VzLmNvbnRhaW5zS2V5KGlkKQogICAgICAgID8gc3RhcnRlZFByb2Nlc3Nlc1tpZF0uZnVsbFZhbHVlTWFwCiAgICAgICAgOiB7fTsKICAgIHZhciBqc29uVmFsdWUgPSBqc29uLmVuY29kZShyZXN1bHQpOwogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUobmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQoanNvblZhbHVlKSk7CiAgfQp9CgpjbGFzcyBfU29ja2V0UmVzb3VyY2VJbmZvIGV4dGVuZHMgX1JlYWRXcml0ZVJlc291cmNlSW5mbyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdGNwU3RyaW5nID0gJ1RDUCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdWRwU3RyaW5nID0gJ1VEUCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdHlwZSA9ICdfc29ja2V0JzsKCiAgZmluYWwgLypfTmF0aXZlU29ja2V0fCovIHNvY2tldDsKCiAgc3RhdGljIE1hcDxpbnQsIF9Tb2NrZXRSZXNvdXJjZUluZm8+IG9wZW5Tb2NrZXRzID0KICAgICAgbmV3IE1hcDxpbnQsIF9Tb2NrZXRSZXNvdXJjZUluZm8+KCk7CgogIF9Tb2NrZXRSZXNvdXJjZUluZm8odGhpcy5zb2NrZXQpIDogc3VwZXIoX3R5cGUpIHsKICAgIFNvY2tldE9wZW5lZCh0aGlzKTsKICB9CgogIFN0cmluZyBnZXQgbmFtZSB7CiAgICBpZiAoc29ja2V0LmlzTGlzdGVuaW5nKSB7CiAgICAgIHJldHVybiAnbGlzdGVuaW5nOiR7c29ja2V0LmFkZHJlc3MuaG9zdH06JHtzb2NrZXQucG9ydH0nOwogICAgfQogICAgdmFyIHJlbW90ZSA9ICcnOwogICAgdHJ5IHsKICAgICAgdmFyIHJlbW90ZUhvc3QgPSBzb2NrZXQucmVtb3RlQWRkcmVzcy5ob3N0OwogICAgICB2YXIgcmVtb3RlUG9ydCA9IHNvY2tldC5yZW1vdGVQb3J0OwogICAgICByZW1vdGUgPSAnIC0+ICRyZW1vdGVIb3N0OiRyZW1vdGVQb3J0JzsKICAgIH0gY2F0Y2ggKGUpIHt9IC8vIGlnbm9yZWQgaWYgd2UgY2FuJ3QgZ2V0IHRoZSBpbmZvcm1hdGlvbgogICAgcmV0dXJuICcke3NvY2tldC5hZGRyZXNzLmhvc3R9OiR7c29ja2V0LnBvcnR9JHJlbW90ZSc7CiAgfQoKICBzdGF0aWMgSXRlcmFibGU8TWFwPFN0cmluZywgZHluYW1pYz4+IGdldE9wZW5Tb2NrZXRzTGlzdCgpIHsKICAgIHJldHVybiBuZXcgTGlzdC5mcm9tKG9wZW5Tb2NrZXRzLnZhbHVlcy5tYXAoKGUpID0+IGUucmVmZXJlbmNlVmFsdWVNYXApKTsKICB9CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldFNvY2tldEluZm9NYXAoKSB7CiAgICB2YXIgcmVzdWx0ID0gZnVsbFZhbHVlTWFwOwogICAgcmVzdWx0Wydzb2NrZXRUeXBlJ10gPSBzb2NrZXQuaXNUY3AgPyBfdGNwU3RyaW5nIDogX3VkcFN0cmluZzsKICAgIHJlc3VsdFsnbGlzdGVuaW5nJ10gPSBzb2NrZXQuaXNMaXN0ZW5pbmc7CiAgICByZXN1bHRbJ2hvc3QnXSA9IHNvY2tldC5hZGRyZXNzLmhvc3Q7CiAgICByZXN1bHRbJ3BvcnQnXSA9IHNvY2tldC5wb3J0OwogICAgaWYgKCFzb2NrZXQuaXNMaXN0ZW5pbmcpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXN1bHRbJ3JlbW90ZUhvc3QnXSA9IHNvY2tldC5yZW1vdGVBZGRyZXNzLmhvc3Q7CiAgICAgICAgcmVzdWx0WydyZW1vdGVQb3J0J10gPSBzb2NrZXQucmVtb3RlUG9ydDsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIC8vIFVEUC4KICAgICAgICByZXN1bHRbJ3JlbW90ZVBvcnQnXSA9ICdOQSc7CiAgICAgICAgcmVzdWx0WydyZW1vdGVIb3N0J10gPSAnTkEnOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXN1bHRbJ3JlbW90ZVBvcnQnXSA9ICdOQSc7CiAgICAgIHJlc3VsdFsncmVtb3RlSG9zdCddID0gJ05BJzsKICAgIH0KICAgIHJlc3VsdFsnYWRkcmVzc1R5cGUnXSA9IHNvY2tldC5hZGRyZXNzLnR5cGUubmFtZTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gZ2V0U29ja2V0SW5mb01hcEJ5SUQoCiAgICAgIFN0cmluZyBmdW5jdGlvbiwgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbXMpIHsKICAgIGFzc2VydChwYXJhbXMuY29udGFpbnNLZXkoJ2lkJykpOwogICAgdmFyIGlkID0gaW50LnBhcnNlKHBhcmFtc1snaWQnXSk7CiAgICB2YXIgcmVzdWx0ID0KICAgICAgICBvcGVuU29ja2V0cy5jb250YWluc0tleShpZCkgPyBvcGVuU29ja2V0c1tpZF0uZ2V0U29ja2V0SW5mb01hcCgpIDoge307CiAgICB2YXIganNvblZhbHVlID0ganNvbi5lbmNvZGUocmVzdWx0KTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2U+IGdldE9wZW5Tb2NrZXRzKGZ1bmN0aW9uLCBwYXJhbXMpIHsKICAgIGFzc2VydChmdW5jdGlvbiA9PSAnZXh0LmRhcnQuaW8uZ2V0T3BlblNvY2tldHMnKTsKICAgIHZhciBkYXRhID0geyd0eXBlJzogJ19vcGVuc29ja2V0cycsICdkYXRhJzogZ2V0T3BlblNvY2tldHNMaXN0KCl9OwogICAgdmFyIGpzb25WYWx1ZSA9IGpzb24uZW5jb2RlKGRhdGEpOwogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUobmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQoanNvblZhbHVlKSk7CiAgfQoKICBzdGF0aWMgU29ja2V0T3BlbmVkKF9Tb2NrZXRSZXNvdXJjZUluZm8gaW5mbykgewogICAgYXNzZXJ0KCFvcGVuU29ja2V0cy5jb250YWluc0tleShpbmZvLmlkKSk7CiAgICBvcGVuU29ja2V0c1tpbmZvLmlkXSA9IGluZm87CiAgfQoKICBzdGF0aWMgU29ja2V0Q2xvc2VkKF9Tb2NrZXRSZXNvdXJjZUluZm8gaW5mbykgewogICAgYXNzZXJ0KG9wZW5Tb2NrZXRzLmNvbnRhaW5zS2V5KGluZm8uaWQpKTsKICAgIG9wZW5Tb2NrZXRzLnJlbW92ZShpbmZvLmlkKTsKICB9Cn0KgRwATk48AREBIRUQExkBOUcBTgFBAVE5KQFITjJOGhIWCQEmAgFAERQREhMUAU1PKRwYESoEAU9QGhMQBAEdGxIrBAEmFxoXGBgZFQEtFhIWICYgIh4fCQIBOScBDgExKQEwFgQBLi0fBAEuLB8EAT1MBAFLNEMnTQQBKhkEAVEmJhFJKU0EARQbBAIBNSoRGgE7LAElLxcaBAEkARMaBAEtFhIWHCApHFEJATU0JgQBNTMmBAFFTgE/NTRRJ00EAUE1JjIsDilNBAIBOyoqKQEjATUrATQYBAEUHkAGFQoyKi4+OwQBP04EASwfQy4qIh8MOjIUECUlCA0jIwY2EwQBQDUmJhFPKU0EAU02RydNBAEyLyEEATIuIQQCAR1kYXJ0OmlvL2lvX3Jlc291cmNlX2luZm8uZGFydCtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vaW9fc2luay5kYXJ0pF8vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIEEgY29tYmluZWQgYnl0ZSBhbmQgdGV4dCBvdXRwdXQuCiAqCiAqIEFuIFtJT1NpbmtdIGNvbWJpbmVzIGEgW1N0cmVhbVNpbmtdIG9mIGJ5dGVzIHdpdGggYSBbU3RyaW5nU2lua10sCiAqIGFuZCBhbGxvd3MgZWFzeSBvdXRwdXQgb2YgYm90aCBieXRlcyBhbmQgdGV4dC4KICoKICogV3JpdGluZyB0ZXh0IChbd3JpdGVdKSBhbmQgYWRkaW5nIGJ5dGVzIChbYWRkXSkgbWF5IGJlIGludGVybGVhdmVkIGZyZWVseS4KICoKICogV2hpbGUgYSBzdHJlYW0gaXMgYmVpbmcgYWRkZWQgdXNpbmcgW2FkZFN0cmVhbV0sIGFueSBmdXJ0aGVyIGF0dGVtcHRzCiAqIHRvIGFkZCBvciB3cml0ZSB0byB0aGUgW0lPU2lua10gd2lsbCBmYWlsIHVudGlsIHRoZSBbYWRkU3RyZWFtXSBjb21wbGV0ZXMuCiAqCiAqIEl0IGlzIGFuIGVycm9yIHRvIGFkZCBkYXRhIHRvIHRoZSBbSU9TaW5rXSBhZnRlciB0aGUgc2luayBpcyBjbG9zZWQuCiAqLwphYnN0cmFjdCBjbGFzcyBJT1NpbmsgaW1wbGVtZW50cyBTdHJlYW1TaW5rPExpc3Q8aW50Pj4sIFN0cmluZ1NpbmsgewogIC8qKgogICAqIENyZWF0ZSBhbiBbSU9TaW5rXSB0aGF0IG91dHB1dHMgdG8gYSBbdGFyZ2V0XSBbU3RyZWFtQ29uc3VtZXJdIG9mIGJ5dGVzLgogICAqCiAgICogVGV4dCB3cml0dGVuIHRvIFtTdHJlYW1TaW5rXSBtZXRob2RzIGlzIGVuY29kZWQgdG8gYnl0ZXMgdXNpbmcgW2VuY29kaW5nXQogICAqIGJlZm9yZSBiZWluZyBvdXRwdXQgb24gW3RhcmdldF0uCiAgICovCiAgZmFjdG9yeSBJT1NpbmsoU3RyZWFtQ29uc3VtZXI8TGlzdDxpbnQ+PiB0YXJnZXQsIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pID0+CiAgICAgIG5ldyBfSU9TaW5rSW1wbCh0YXJnZXQsIGVuY29kaW5nKTsKCiAgLyoqCiAgICogVGhlIFtFbmNvZGluZ10gdXNlZCB3aGVuIHdyaXRpbmcgc3RyaW5ncy4gRGVwZW5kaW5nIG9uIHRoZQogICAqIHVuZGVybHlpbmcgY29uc3VtZXIgdGhpcyBwcm9wZXJ0eSBtaWdodCBiZSBtdXRhYmxlLgogICAqLwogIEVuY29kaW5nIGVuY29kaW5nOwoKICAvKioKICAgKiBBZGRzIGJ5dGUgW2RhdGFdIHRvIHRoZSB0YXJnZXQgY29uc3VtZXIsIGlnbm9yaW5nIFtlbmNvZGluZ10uCiAgICoKICAgKiBUaGUgW2VuY29kaW5nXSBkb2VzIG5vdCBhcHBseSB0byB0aGlzIG1ldGhvZCwgYW5kIHRoZSBgZGF0YWAgbGlzdCBpcyBwYXNzZWQKICAgKiBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IGNvbnN1bWVyIGFzIGEgc3RyZWFtIGV2ZW50LgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgd2hlbiBhIHN0cmVhbSBpcyBjdXJyZW50bHkgYmVpbmcgYWRkZWQKICAgKiB1c2luZyBbYWRkU3RyZWFtXS4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1ibG9ja2luZy4gU2VlIFtmbHVzaF0gb3IgW2RvbmVdIGZvciBob3cgdG8gZ2V0IGFueQogICAqIGVycm9ycyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxsLgogICAqCiAgICogVGhlIGRhdGEgbGlzdCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGFmdGVyIGl0IGhhcyBiZWVuIHBhc3NlZCB0byBgYWRkYC4KICAgKi8KICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSk7CgogIC8qKgogICAqIENvbnZlcnRzIFtvYmpdIHRvIGEgU3RyaW5nIGJ5IGludm9raW5nIFtPYmplY3QudG9TdHJpbmddIGFuZAogICAqIFthZGRdcyB0aGUgZW5jb2Rpbmcgb2YgdGhlIHJlc3VsdCB0byB0aGUgdGFyZ2V0IGNvbnN1bWVyLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWJsb2NraW5nLiBTZWUgW2ZsdXNoXSBvciBbZG9uZV0gZm9yIGhvdyB0byBnZXQgYW55CiAgICogZXJyb3JzIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwuCiAgICovCiAgdm9pZCB3cml0ZShPYmplY3Qgb2JqKTsKCiAgLyoqCiAgICogSXRlcmF0ZXMgb3ZlciB0aGUgZ2l2ZW4gW29iamVjdHNdIGFuZCBbd3JpdGVdcyB0aGVtIGluIHNlcXVlbmNlLgogICAqCiAgICogSWYgW3NlcGFyYXRvcl0gaXMgcHJvdmlkZWQsIGEgYHdyaXRlYCB3aXRoIHRoZSBgc2VwYXJhdG9yYCBpcyBwZXJmb3JtZWQKICAgKiBiZXR3ZWVuIGFueSB0d28gZWxlbWVudHMgb2Ygb2JqZWN0c2AuCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYmxvY2tpbmcuIFNlZSBbZmx1c2hdIG9yIFtkb25lXSBmb3IgaG93IHRvIGdldCBhbnkKICAgKiBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbC4KICAgKi8KICB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKTsKCiAgLyoqCiAgICogQ29udmVydHMgW29ial0gdG8gYSBTdHJpbmcgYnkgaW52b2tpbmcgW09iamVjdC50b1N0cmluZ10gYW5kCiAgICogd3JpdGVzIHRoZSByZXN1bHQgdG8gYHRoaXNgLCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYmxvY2tpbmcuIFNlZSBbZmx1c2hdIG9yIFtkb25lXSBmb3IgaG93IHRvIGdldCBhbnkKICAgKiBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbC4KICAgKi8KICB2b2lkIHdyaXRlbG4oW09iamVjdCBvYmogPSAiIl0pOwoKICAvKioKICAgKiBXcml0ZXMgdGhlIGNoYXJhY3RlciBvZiBbY2hhckNvZGVdLgogICAqCiAgICogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgd3JpdGUobmV3IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKWAuCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYmxvY2tpbmcuIFNlZSBbZmx1c2hdIG9yIFtkb25lXSBmb3IgaG93IHRvIGdldCBhbnkKICAgKiBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbC4KICAgKi8KICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKTsKCiAgLyoqCiAgICogUGFzc2VzIHRoZSBlcnJvciB0byB0aGUgdGFyZ2V0IGNvbnN1bWVyIGFzIGFuIGVycm9yIGV2ZW50LgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgd2hlbiBhIHN0cmVhbSBpcyBjdXJyZW50bHkgYmVpbmcgYWRkZWQKICAgKiB1c2luZyBbYWRkU3RyZWFtXS4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1ibG9ja2luZy4gU2VlIFtmbHVzaF0gb3IgW2RvbmVdIGZvciBob3cgdG8gZ2V0IGFueQogICAqIGVycm9ycyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxsLgogICAqLwogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKTsKCiAgLyoqCiAgICogQWRkcyBhbGwgZWxlbWVudHMgb2YgdGhlIGdpdmVuIFtzdHJlYW1dIHRvIGB0aGlzYC4KICAgKgogICAqIFJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyB3aGVuCiAgICogYWxsIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBbc3RyZWFtXSBhcmUgYWRkZWQgdG8gYHRoaXNgLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgd2hlbiBhIHN0cmVhbSBpcyBjdXJyZW50bHkgYmVpbmcgYWRkZWQKICAgKiB1c2luZyB0aGlzIGZ1bmN0aW9uLgogICAqLwogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIG9uY2UgYWxsIGJ1ZmZlcmVkIGRhdGEgaXMgYWNjZXB0ZWQgYnkgdGhlCiAgICogdW5kZXJseWluZyBbU3RyZWFtQ29uc3VtZXJdLgogICAqCiAgICogVGhpcyBtZXRob2QgbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIGFuIFthZGRTdHJlYW1dIGlzIGluY29tcGxldGUuCiAgICoKICAgKiBOT1RFOiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgZGF0YSBiZWluZyBmbHVzaGVkIGJ5IHRoZQogICAqIG9wZXJhdGluZyBzeXN0ZW0uCiAgICovCiAgRnV0dXJlIGZsdXNoKCk7CgogIC8qKgogICAqIENsb3NlIHRoZSB0YXJnZXQgY29uc3VtZXIuCiAgICoKICAgKiBOT1RFOiBXcml0ZXMgdG8gdGhlIFtJT1NpbmtdIG1heSBiZSBidWZmZXJlZCwgYW5kIG1heSBub3QgYmUgZmx1c2hlZCBieQogICAqIGEgY2FsbCB0byBgY2xvc2UoKWAuIFRvIGZsdXNoIGFsbCBidWZmZXJlZCB3cml0ZXMsIGNhbGwgYGZsdXNoKClgIGJlZm9yZQogICAqIGNhbGxpbmcgYGNsb3NlKClgLgogICAqLwogIEZ1dHVyZSBjbG9zZSgpOwoKICAvKioKICAgKiBHZXQgYSBmdXR1cmUgdGhhdCB3aWxsIGNvbXBsZXRlIHdoZW4gdGhlIGNvbnN1bWVyIGNsb3Nlcywgb3Igd2hlbiBhbgogICAqIGVycm9yIG9jY3Vycy4gVGhpcyBmdXR1cmUgaXMgaWRlbnRpY2FsIHRvIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkKICAgKiBbY2xvc2VdLgogICAqLwogIEZ1dHVyZSBnZXQgZG9uZTsKfQoKY2xhc3MgX1N0cmVhbVNpbmtJbXBsPFQ+IGltcGxlbWVudHMgU3RyZWFtU2luazxUPiB7CiAgZmluYWwgU3RyZWFtQ29uc3VtZXI8VD4gX3RhcmdldDsKICBmaW5hbCBDb21wbGV0ZXIgX2RvbmVDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgU3RyZWFtQ29udHJvbGxlcjxUPiBfY29udHJvbGxlckluc3RhbmNlOwogIENvbXBsZXRlciBfY29udHJvbGxlckNvbXBsZXRlcjsKICBib29sIF9pc0Nsb3NlZCA9IGZhbHNlOwogIGJvb2wgX2lzQm91bmQgPSBmYWxzZTsKICBib29sIF9oYXNFcnJvciA9IGZhbHNlOwoKICBfU3RyZWFtU2lua0ltcGwodGhpcy5fdGFyZ2V0KTsKCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBfY29udHJvbGxlci5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc3RyZWFtKSB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYWxyZWFkeSBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgaWYgKF9oYXNFcnJvcikgcmV0dXJuIGRvbmU7CgogICAgX2lzQm91bmQgPSB0cnVlOwogICAgdmFyIGZ1dHVyZSA9IF9jb250cm9sbGVyQ29tcGxldGVyID09IG51bGwKICAgICAgICA/IF90YXJnZXQuYWRkU3RyZWFtKHN0cmVhbSkKICAgICAgICA6IF9jb250cm9sbGVyQ29tcGxldGVyLmZ1dHVyZS50aGVuKChfKSA9PiBfdGFyZ2V0LmFkZFN0cmVhbShzdHJlYW0pKTsKICAgIF9jb250cm9sbGVySW5zdGFuY2U/LmNsb3NlKCk7CgogICAgLy8gV2FpdCBmb3IgYW55IHBlbmRpbmcgZXZlbnRzIGluIFtfY29udHJvbGxlcl0gdG8gYmUgZGlzcGF0Y2hlZCBiZWZvcmUKICAgIC8vIGFkZGluZyBbc3RyZWFtXS4KICAgIHJldHVybiBmdXR1cmUud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgX2lzQm91bmQgPSBmYWxzZTsKICAgIH0pOwogIH0KCiAgRnV0dXJlIGZsdXNoKCkgewogICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGJvdW5kIHRvIGEgc3RyZWFtIik7CiAgICB9CiAgICBpZiAoX2NvbnRyb2xsZXJJbnN0YW5jZSA9PSBudWxsKSByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSh0aGlzKTsKICAgIC8vIEFkZGluZyBhbiBlbXB0eSBzdHJlYW0tY29udHJvbGxlciB3aWxsIHJldHVybiBhIGZ1dHVyZSB0aGF0IHdpbGwgY29tcGxldGUKICAgIC8vIHdoZW4gYWxsIGRhdGEgaXMgZG9uZS4KICAgIF9pc0JvdW5kID0gdHJ1ZTsKICAgIHZhciBmdXR1cmUgPSBfY29udHJvbGxlckNvbXBsZXRlci5mdXR1cmU7CiAgICBfY29udHJvbGxlckluc3RhbmNlLmNsb3NlKCk7CiAgICByZXR1cm4gZnV0dXJlLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgIF9pc0JvdW5kID0gZmFsc2U7CiAgICB9KTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIGlmIChfaXNCb3VuZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgaWYgKCFfaXNDbG9zZWQpIHsKICAgICAgX2lzQ2xvc2VkID0gdHJ1ZTsKICAgICAgaWYgKF9jb250cm9sbGVySW5zdGFuY2UgIT0gbnVsbCkgewogICAgICAgIF9jb250cm9sbGVySW5zdGFuY2UuY2xvc2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY2xvc2VUYXJnZXQoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2b2lkIF9jbG9zZVRhcmdldCgpIHsKICAgIF90YXJnZXQuY2xvc2UoKS50aGVuKF9jb21wbGV0ZURvbmVWYWx1ZSwgb25FcnJvcjogX2NvbXBsZXRlRG9uZUVycm9yKTsKICB9CgogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfZG9uZUNvbXBsZXRlci5mdXR1cmU7CgogIHZvaWQgX2NvbXBsZXRlRG9uZVZhbHVlKHZhbHVlKSB7CiAgICBpZiAoIV9kb25lQ29tcGxldGVyLmlzQ29tcGxldGVkKSB7CiAgICAgIF9kb25lQ29tcGxldGVyLmNvbXBsZXRlKHZhbHVlKTsKICAgIH0KICB9CgogIHZvaWQgX2NvbXBsZXRlRG9uZUVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmICghX2RvbmVDb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgX2hhc0Vycm9yID0gdHJ1ZTsKICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9CiAgfQoKICBTdHJlYW1Db250cm9sbGVyPFQ+IGdldCBfY29udHJvbGxlciB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYm91bmQgdG8gYSBzdHJlYW0iKTsKICAgIH0KICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBpZiAoX2NvbnRyb2xsZXJJbnN0YW5jZSA9PSBudWxsKSB7CiAgICAgIF9jb250cm9sbGVySW5zdGFuY2UgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxUPihzeW5jOiB0cnVlKTsKICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgICAgIF90YXJnZXQuYWRkU3RyZWFtKF9jb250cm9sbGVyLnN0cmVhbSkudGhlbigoXykgewogICAgICAgIGlmIChfaXNCb3VuZCkgewogICAgICAgICAgLy8gQSBuZXcgc3RyZWFtIHRha2VzIG92ZXIgLSBmb3J3YXJkIHZhbHVlcyB0byB0aGF0IHN0cmVhbS4KICAgICAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyLmNvbXBsZXRlKHRoaXMpOwogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIgPSBudWxsOwogICAgICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZSA9IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE5vIG5ldyBzdHJlYW0sIC5jbG9zZSB3YXMgY2FsbGVkLiBDbG9zZSBfdGFyZ2V0LgogICAgICAgICAgX2Nsb3NlVGFyZ2V0KCk7CiAgICAgICAgfQogICAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgICAgIC8vIEEgbmV3IHN0cmVhbSB0YWtlcyBvdmVyIC0gZm9yd2FyZCBlcnJvcnMgdG8gdGhhdCBzdHJlYW0uCiAgICAgICAgICBfY29udHJvbGxlckNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyID0gbnVsbDsKICAgICAgICAgIF9jb250cm9sbGVySW5zdGFuY2UgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBObyBuZXcgc3RyZWFtLiBObyBuZWVkIHRvIGNsb3NlIHRhcmdldCwgYXMgaXQgaGFzIGFscmVhZHkKICAgICAgICAgIC8vIGZhaWxlZC4KICAgICAgICAgIF9jb21wbGV0ZURvbmVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBfY29udHJvbGxlckluc3RhbmNlOwogIH0KfQoKY2xhc3MgX0lPU2lua0ltcGwgZXh0ZW5kcyBfU3RyZWFtU2lua0ltcGw8TGlzdDxpbnQ+PiBpbXBsZW1lbnRzIElPU2luayB7CiAgRW5jb2RpbmcgX2VuY29kaW5nOwogIGJvb2wgX2VuY29kaW5nTXV0YWJsZSA9IHRydWU7CgogIF9JT1NpbmtJbXBsKFN0cmVhbUNvbnN1bWVyPExpc3Q8aW50Pj4gdGFyZ2V0LCB0aGlzLl9lbmNvZGluZykgOiBzdXBlcih0YXJnZXQpOwoKICBFbmNvZGluZyBnZXQgZW5jb2RpbmcgPT4gX2VuY29kaW5nOwoKICB2b2lkIHNldCBlbmNvZGluZyhFbmNvZGluZyB2YWx1ZSkgewogICAgaWYgKCFfZW5jb2RpbmdNdXRhYmxlKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJJT1NpbmsgZW5jb2RpbmcgaXMgbm90IG11dGFibGUiKTsKICAgIH0KICAgIF9lbmNvZGluZyA9IHZhbHVlOwogIH0KCiAgdm9pZCB3cml0ZShPYmplY3Qgb2JqKSB7CiAgICBTdHJpbmcgc3RyaW5nID0gJyRvYmonOwogICAgaWYgKHN0cmluZy5pc0VtcHR5KSByZXR1cm47CiAgICBhZGQoX2VuY29kaW5nLmVuY29kZShzdHJpbmcpKTsKICB9CgogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gb2JqZWN0cy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuOwogICAgaWYgKHNlcGFyYXRvci5pc0VtcHR5KSB7CiAgICAgIGRvIHsKICAgICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICB3cml0ZShzZXBhcmF0b3IpOwogICAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvYmplY3QgPSAiIl0pIHsKICAgIHdyaXRlKG9iamVjdCk7CiAgICB3cml0ZSgiXG4iKTsKICB9CgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIHdyaXRlKG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSk7CiAgfQp9CoE+AE5OPAERAQQkA0UyA04DSU4DSARFBk4FTyYGUSkBBkA5BhUBBkMFUTgFTRgFTiQFTQYcAQZCPwVOJAYaAQZGBU0rBU4kBjwBBkI5BU4kBiMBBikFTgVOJAYkAQZABU0YBU4kBjEBBjgFLD0FTRoGLgEGUSIFSAVNFwYSAQYgBU1OGAYSAQZKRg4GEwIBNCM0KyIaGRoBIQEVFTAGGwQBMhUwBi0EAScURwYgARUuJE4iAUwYJBgIBAETFD8GRFEeFS4hJBgIBAETFD8GFhgpJQ8YCAYRBAEYSwQBLAEjJyYGBAE6Jxg3BgQBKBQ/BhU0BidBLjcYRi8nJhE+GgooGEZBJyYRRxUxCgoGIAQCAUkWIAFRASYBJh0+BhcEARscICMEAT0qJh0LISUNHyQaIQgGBAEnExEEASUuBAIBFGRhcnQ6aW8vaW9fc2luay5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9pb19zZXJ2aWNlLmRhcnSIJy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgpjbGFzcyBfSU9TZXJ2aWNlIHsKICAvLyBUaGlzIGxpc3QgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgbGlzdCBpbiBydW50aW1lL2Jpbi9pb19zZXJ2aWNlLmgKICBzdGF0aWMgY29uc3QgaW50IGZpbGVFeGlzdHMgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUNyZWF0ZSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlRGVsZXRlID0gMjsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVSZW5hbWUgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUNvcHkgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZU9wZW4gPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVJlc29sdmVTeW1ib2xpY0xpbmtzID0gNjsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVDbG9zZSA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlUG9zaXRpb24gPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVNldFBvc2l0aW9uID0gOTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVUcnVuY2F0ZSA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUxlbmd0aCA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUxlbmd0aEZyb21QYXRoID0gMTI7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTGFzdEFjY2Vzc2VkID0gMTM7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlU2V0TGFzdEFjY2Vzc2VkID0gMTQ7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTGFzdE1vZGlmaWVkID0gMTU7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlU2V0TGFzdE1vZGlmaWVkID0gMTY7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlRmx1c2ggPSAxNzsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVSZWFkQnl0ZSA9IDE4OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVdyaXRlQnl0ZSA9IDE5OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVJlYWQgPSAyMDsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVSZWFkSW50byA9IDIxOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVdyaXRlRnJvbSA9IDIyOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUNyZWF0ZUxpbmsgPSAyMzsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVEZWxldGVMaW5rID0gMjQ7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlUmVuYW1lTGluayA9IDI1OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUxpbmtUYXJnZXQgPSAyNjsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVUeXBlID0gMjc7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlSWRlbnRpY2FsID0gMjg7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlU3RhdCA9IDI5OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUxvY2sgPSAzMDsKICBzdGF0aWMgY29uc3QgaW50IHNvY2tldExvb2t1cCA9IDMxOwogIHN0YXRpYyBjb25zdCBpbnQgc29ja2V0TGlzdEludGVyZmFjZXMgPSAzMjsKICBzdGF0aWMgY29uc3QgaW50IHNvY2tldFJldmVyc2VMb29rdXAgPSAzMzsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeUNyZWF0ZSA9IDM0OwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5RGVsZXRlID0gMzU7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlFeGlzdHMgPSAzNjsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeUNyZWF0ZVRlbXAgPSAzNzsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeUxpc3RTdGFydCA9IDM4OwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5TGlzdE5leHQgPSAzOTsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeUxpc3RTdG9wID0gNDA7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlSZW5hbWUgPSA0MTsKICBzdGF0aWMgY29uc3QgaW50IHNzbFByb2Nlc3NGaWx0ZXIgPSA0MjsKCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZSBfZGlzcGF0Y2goaW50IHJlcXVlc3QsIExpc3QgZGF0YSk7Cn0KOABOTjwBEQETTiMjIyMhITEiJSgmJCwqLSotIyYnIiYnKCgoKCInIiImLi0pKSktLCsrKSoBPAIBF2RhcnQ6aW8vaW9fc2VydmljZS5kYXJ0KG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9saW5rLmRhcnSoIy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogW0xpbmtdIG9iamVjdHMgYXJlIHJlZmVyZW5jZXMgdG8gZmlsZXN5c3RlbSBsaW5rcy4KICoKICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYWJzdHJhY3QgY2xhc3MgTGluayBpbXBsZW1lbnRzIEZpbGVTeXN0ZW1FbnRpdHkgewogIC8qKgogICAqIENyZWF0ZXMgYSBMaW5rIG9iamVjdC4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBMaW5rKFN0cmluZyBwYXRoKSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgX0xpbmsocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmNyZWF0ZUxpbmsocGF0aCk7CiAgfQoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBMaW5rLmZyb21SYXdQYXRoKFVpbnQ4TGlzdCByYXdQYXRoKSB7CiAgICAvLyBUT0RPKGJrb255aSk6IGhhbmRsZSBvdmVycmlkZXMKICAgIHJldHVybiBuZXcgX0xpbmsuZnJvbVJhd1BhdGgocmF3UGF0aCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgW0xpbmtdIG9iamVjdC4KICAgKgogICAqIElmIFtwYXRoXSBpcyBhIHJlbGF0aXZlIHBhdGgsIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAoc2VlIFtEaXJlY3RvcnkuY3VycmVudF0pLCB3aGVuIHVzZWQuCiAgICoKICAgKiBJZiBbcGF0aF0gaXMgYW4gYWJzb2x1dGUgcGF0aCwgaXQgd2lsbCBiZSBpbW11bmUgdG8gY2hhbmdlcyB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAqLwogIGZhY3RvcnkgTGluay5mcm9tVXJpKFVyaSB1cmkpID0+IG5ldyBMaW5rKHVyaS50b0ZpbGVQYXRoKCkpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgc3ltYm9saWMgbGluay4gUmV0dXJucyBhIFs6RnV0dXJlPExpbms+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aAogICAqIHRoZSBsaW5rIHdoZW4gaXQgaGFzIGJlZW4gY3JlYXRlZC4gSWYgdGhlIGxpbmsgZXhpc3RzLAogICAqIHRoZSBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsIHRoZSBkZWZhdWx0LCB0aGUgbGluayBpcyBjcmVhdGVkCiAgICogb25seSBpZiBhbGwgZGlyZWN0b3JpZXMgaW4gaXRzIHBhdGggZXhpc3QuCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgYWxsIG5vbi1leGlzdGluZyBwYXRoCiAgICogY29tcG9uZW50cyBhcmUgY3JlYXRlZC4gVGhlIGRpcmVjdG9yaWVzIGluIHRoZSBwYXRoIG9mIFt0YXJnZXRdIGFyZQogICAqIG5vdCBhZmZlY3RlZCwgdW5sZXNzIHRoZXkgYXJlIGFsc28gaW4gW3BhdGhdLgogICAqCiAgICogT24gdGhlIFdpbmRvd3MgcGxhdGZvcm0sIHRoaXMgY2FsbCB3aWxsIGNyZWF0ZSBhIHRydWUgc3ltYm9saWMgbGluawogICAqIGluc3RlYWQgb2YgYSBKdW5jdGlvbi4gSW4gb3JkZXIgdG8gY3JlYXRlIGEgc3ltYm9saWMgbGluayBvbiBXaW5kb3dzLCBEYXJ0CiAgICogbXVzdCBiZSBydW4gaW4gQWRtaW5pc3RyYXRvciBtb2RlIG9yIHRoZSBzeXN0ZW0gbXVzdCBoYXZlIERldmVsb3BlciBNb2RlCiAgICogZW5hYmxlZCwgb3RoZXJ3aXNlIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIHdpbGwgYmUgcmFpc2VkIHdpdGggCiAgICogYEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRGAgc2V0IGFzIHRoZSBlcnJubyB3aGVuIHRoaXMgY2FsbCBpcyBtYWRlLgogICAqCiAgICogT24gb3RoZXIgcGxhdGZvcm1zLCB0aGUgcG9zaXggc3ltbGluaygpIGNhbGwgaXMgdXNlZCB0byBtYWtlIGEgc3ltYm9saWMKICAgKiBsaW5rIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBbdGFyZ2V0XS4gIElmIFt0YXJnZXRdIGlzIGEgcmVsYXRpdmUgcGF0aCwKICAgKiBpdCB3aWxsIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgbGluay4KICAgKi8KICBGdXR1cmU8TGluaz4gY3JlYXRlKFN0cmluZyB0YXJnZXQsIHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjcmVhdGUgdGhlIGxpbmsuIENhbGxpbmcgW2NyZWF0ZVN5bmNdIG9uIGFuIGV4aXN0aW5nIGxpbmsKICAgKiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLCB0aGUgZGVmYXVsdCwgdGhlIGxpbmsgaXMgY3JlYXRlZCBvbmx5IGlmIGFsbAogICAqIGRpcmVjdG9yaWVzIGluIGl0cyBwYXRoIGV4aXN0LiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCBhbGwKICAgKiBub24tZXhpc3RpbmcgcGF0aCBjb21wb25lbnRzIGFyZSBjcmVhdGVkLiBUaGUgZGlyZWN0b3JpZXMgaW4KICAgKiB0aGUgcGF0aCBvZiBbdGFyZ2V0XSBhcmUgbm90IGFmZmVjdGVkLCB1bmxlc3MgdGhleSBhcmUgYWxzbyBpbiBbcGF0aF0uCiAgICoKICAgKiBPbiB0aGUgV2luZG93cyBwbGF0Zm9ybSwgdGhpcyBjYWxsIHdpbGwgY3JlYXRlIGEgdHJ1ZSBzeW1ib2xpYyBsaW5rCiAgICogaW5zdGVhZCBvZiBhIEp1bmN0aW9uLiBJbiBvcmRlciB0byBjcmVhdGUgYSBzeW1ib2xpYyBsaW5rIG9uIFdpbmRvd3MsIERhcnQKICAgKiBtdXN0IGJlIHJ1biBpbiBBZG1pbmlzdHJhdG9yIG1vZGUgb3IgdGhlIHN5c3RlbSBtdXN0IGhhdmUgRGV2ZWxvcGVyIE1vZGUKICAgKiBlbmFibGVkLCBvdGhlcndpc2UgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gd2lsbCBiZSByYWlzZWQgd2l0aCAKICAgKiBgRVJST1JfUFJJVklMRUdFX05PVF9IRUxEYCBzZXQgYXMgdGhlIGVycm5vIHdoZW4gdGhpcyBjYWxsIGlzIG1hZGUuCiAgICoKICAgKiBPbiBvdGhlciBwbGF0Zm9ybXMsIHRoZSBwb3NpeCBzeW1saW5rKCkgY2FsbCBpcyB1c2VkIHRvIG1ha2UgYSBzeW1ib2xpYwogICAqIGxpbmsgY29udGFpbmluZyB0aGUgc3RyaW5nIFt0YXJnZXRdLiAgSWYgW3RhcmdldF0gaXMgYSByZWxhdGl2ZSBwYXRoLAogICAqIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBsaW5rLgogICAqLwogIHZvaWQgY3JlYXRlU3luYyhTdHJpbmcgdGFyZ2V0LCB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgdXBkYXRlcyB0aGUgbGluay4gQ2FsbGluZyBbdXBkYXRlU3luY10gb24gYSBub24tZXhpc3RpbmcgbGluawogICAqIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAqLwogIHZvaWQgdXBkYXRlU3luYyhTdHJpbmcgdGFyZ2V0KTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgbGluay4gUmV0dXJucyBhIFs6RnV0dXJlPExpbms+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUKICAgKiBsaW5rIHdoZW4gaXQgaGFzIGJlZW4gdXBkYXRlZC4gIENhbGxpbmcgW3VwZGF0ZV0gb24gYSBub24tZXhpc3RpbmcgbGluawogICAqIHdpbGwgY29tcGxldGUgaXRzIHJldHVybmVkIGZ1dHVyZSB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8TGluaz4gdXBkYXRlKFN0cmluZyB0YXJnZXQpOwoKICBGdXR1cmU8U3RyaW5nPiByZXNvbHZlU3ltYm9saWNMaW5rcygpOwoKICBTdHJpbmcgcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jKCk7CgogIC8qKgogICAqIFJlbmFtZXMgdGhpcyBsaW5rLiBSZXR1cm5zIGEgYEZ1dHVyZTxMaW5rPmAgdGhhdCBjb21wbGV0ZXMKICAgKiB3aXRoIGEgW0xpbmtdIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBsaW5rLgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgbGluaywgdGhhdCBsaW5rIGlzCiAgICogcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5LAogICAqIHRoZSBvcGVyYXRpb24gZmFpbHMgYW5kIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxMaW5rPiByZW5hbWUoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlbmFtZXMgdGhpcyBsaW5rLiBSZXR1cm5zIGEgW0xpbmtdCiAgICogaW5zdGFuY2UgZm9yIHRoZSByZW5hbWVkIGxpbmsuCiAgICoKICAgKiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBsaW5rLCB0aGF0IGxpbmsgaXMKICAgKiByZXBsYWNlZC4gSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnkKICAgKiB0aGUgb3BlcmF0aW9uIGZhaWxzIGFuZCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIExpbmsgcmVuYW1lU3luYyhTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIFJldHVybnMgYSBbTGlua10gaW5zdGFuY2Ugd2hvc2UgcGF0aCBpcyB0aGUgYWJzb2x1dGUgcGF0aCB0byBbdGhpc10uCiAgICoKICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBpcyBjb21wdXRlZCBieSBwcmVmaXhpbmcKICAgKiBhIHJlbGF0aXZlIHBhdGggd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHJldHVybmluZwogICAqIGFuIGFic29sdXRlIHBhdGggdW5jaGFuZ2VkLgogICAqLwogIExpbmsgZ2V0IGFic29sdXRlOwoKICAvKioKICAgKiBHZXRzIHRoZSB0YXJnZXQgb2YgdGhlIGxpbmsuIFJldHVybnMgYSBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgd2l0aAogICAqIHRoZSBwYXRoIHRvIHRoZSB0YXJnZXQuCiAgICoKICAgKiBJZiB0aGUgcmV0dXJuZWQgdGFyZ2V0IGlzIGEgcmVsYXRpdmUgcGF0aCwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlCiAgICogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGxpbmsuCiAgICoKICAgKiBJZiB0aGUgbGluayBkb2VzIG5vdCBleGlzdCwgb3IgaXMgbm90IGEgbGluaywgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aAogICAqIGEgRmlsZVN5c3RlbUV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8U3RyaW5nPiB0YXJnZXQoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBnZXRzIHRoZSB0YXJnZXQgb2YgdGhlIGxpbmsuIFJldHVybnMgdGhlIHBhdGggdG8gdGhlIHRhcmdldC4KICAgKgogICAqIElmIHRoZSByZXR1cm5lZCB0YXJnZXQgaXMgYSByZWxhdGl2ZSBwYXRoLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUKICAgKiBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgbGluay4KICAgKgogICAqIElmIHRoZSBsaW5rIGRvZXMgbm90IGV4aXN0LCBvciBpcyBub3QgYSBsaW5rLCB0aHJvd3MgYSBGaWxlU3lzdGVtRXhjZXB0aW9uLgogICAqLwogIFN0cmluZyB0YXJnZXRTeW5jKCk7Cn0KCmNsYXNzIF9MaW5rIGV4dGVuZHMgRmlsZVN5c3RlbUVudGl0eSBpbXBsZW1lbnRzIExpbmsgewogIFN0cmluZyBfcGF0aDsKICBVaW50OExpc3QgX3Jhd1BhdGg7CgogIF9MaW5rKFN0cmluZyBwYXRoKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChwYXRoLCAncGF0aCcpOwogICAgX3BhdGggPSBwYXRoOwogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShwYXRoKTsKICB9CgogIF9MaW5rLmZyb21SYXdQYXRoKFVpbnQ4TGlzdCByYXdQYXRoKSB7CiAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvTnVsbFRlcm1pbmF0ZWRVdGY4QXJyYXkocmF3UGF0aCk7CiAgICBfcGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvU3RyaW5nRnJvbVV0ZjhBcnJheShyYXdQYXRoKTsKICB9CgogIFN0cmluZyBnZXQgcGF0aCA9PiBfcGF0aDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkxpbms6ICckcGF0aCciOwoKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgPT4gRmlsZVN5c3RlbUVudGl0eS5faXNMaW5rUmF3KF9yYXdQYXRoKTsKCiAgYm9vbCBleGlzdHNTeW5jKCkgPT4gRmlsZVN5c3RlbUVudGl0eS5faXNMaW5rUmF3U3luYyhfcmF3UGF0aCk7CgogIExpbmsgZ2V0IGFic29sdXRlID0+IG5ldyBMaW5rLmZyb21SYXdQYXRoKF9yYXdBYnNvbHV0ZVBhdGgpOwoKICBGdXR1cmU8TGluaz4gY3JlYXRlKFN0cmluZyB0YXJnZXQsIHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICB2YXIgcmVzdWx0ID0KICAgICAgICByZWN1cnNpdmUgPyBwYXJlbnQuY3JlYXRlKHJlY3Vyc2l2ZTogdHJ1ZSkgOiBuZXcgRnV0dXJlLnZhbHVlKG51bGwpOwogICAgcmV0dXJuIHJlc3VsdAogICAgICAgIC50aGVuKChfKSA9PiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgICAgICBfSU9TZXJ2aWNlLmZpbGVDcmVhdGVMaW5rLCBbbnVsbCwgX3Jhd1BhdGgsIHRhcmdldF0pKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCBjcmVhdGUgbGluayB0byB0YXJnZXQgJyR0YXJnZXQnIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgY3JlYXRlU3luYyhTdHJpbmcgdGFyZ2V0LCB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICBwYXJlbnQuY3JlYXRlU3luYyhyZWN1cnNpdmU6IHRydWUpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9GaWxlLl9jcmVhdGVMaW5rKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIHRhcmdldCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IGNyZWF0ZSBsaW5rIiwgcGF0aCk7CiAgfQoKICB2b2lkIHVwZGF0ZVN5bmMoU3RyaW5nIHRhcmdldCkgewogICAgLy8gVE9ETygxMjQxNCk6IFJlcGxhY2Ugd2l0aCBhdG9taWMgdXBkYXRlLCB3aGVyZSBzdXBwb3J0ZWQgYnkgcGxhdGZvcm0uCiAgICAvLyBBdG9taWNhbGx5IGNoYW5naW5nIGEgbGluayBjYW4gYmUgZG9uZSBieSBjcmVhdGluZyB0aGUgbmV3IGxpbmssIHdpdGgKICAgIC8vIGEgZGlmZmVyZW50IG5hbWUsIGFuZCB1c2luZyB0aGUgcmVuYW1lKCkgcG9zaXggY2FsbCB0byBtb3ZlIGl0IHRvCiAgICAvLyB0aGUgb2xkIG5hbWUgYXRvbWljYWxseS4KICAgIGRlbGV0ZVN5bmMoKTsKICAgIGNyZWF0ZVN5bmModGFyZ2V0KTsKICB9CgogIEZ1dHVyZTxMaW5rPiB1cGRhdGUoU3RyaW5nIHRhcmdldCkgewogICAgLy8gVE9ETygxMjQxNCk6IFJlcGxhY2Ugd2l0aCBhdG9taWMgdXBkYXRlLCB3aGVyZSBzdXBwb3J0ZWQgYnkgcGxhdGZvcm0uCiAgICAvLyBBdG9taWNhbGx5IGNoYW5naW5nIGEgbGluayBjYW4gYmUgZG9uZSBieSBjcmVhdGluZyB0aGUgbmV3IGxpbmssIHdpdGgKICAgIC8vIGEgZGlmZmVyZW50IG5hbWUsIGFuZCB1c2luZyB0aGUgcmVuYW1lKCkgcG9zaXggY2FsbCB0byBtb3ZlIGl0IHRvCiAgICAvLyB0aGUgb2xkIG5hbWUgYXRvbWljYWxseS4KICAgIHJldHVybiBkZWxldGUoKS50aGVuPExpbms+KChfKSA9PiBjcmVhdGUodGFyZ2V0KSk7CiAgfQoKICBGdXR1cmU8TGluaz4gX2RlbGV0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICByZXR1cm4gbmV3IERpcmVjdG9yeS5mcm9tUmF3UGF0aChfcmF3UGF0aCkKICAgICAgICAgIC5kZWxldGUocmVjdXJzaXZlOiB0cnVlKQogICAgICAgICAgLnRoZW4oKF8pID0+IHRoaXMpOwogICAgfQogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlRGVsZXRlTGluaywgW251bGwsIF9yYXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIkNhbm5vdCBkZWxldGUgbGluayIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIF9kZWxldGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICBpZiAocmVjdXJzaXZlKSB7CiAgICAgIHJldHVybiBuZXcgRGlyZWN0b3J5LmZyb21SYXdQYXRoKF9yYXdQYXRoKS5kZWxldGVTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX0ZpbGUuX2RlbGV0ZUxpbmtOYXRpdmUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IGRlbGV0ZSBsaW5rIiwgcGF0aCk7CiAgfQoKICBGdXR1cmU8TGluaz4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVSZW5hbWVMaW5rLCBbbnVsbCwgX3Jhd1BhdGgsIG5ld1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCByZW5hbWUgbGluayB0byAnJG5ld1BhdGgnIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBMaW5rKG5ld1BhdGgpOwogICAgfSk7CiAgfQoKICBMaW5rIHJlbmFtZVN5bmMoU3RyaW5nIG5ld1BhdGgpIHsKICAgIHZhciByZXN1bHQgPSBfRmlsZS5fcmVuYW1lTGluayhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBuZXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgcmVuYW1lIGxpbmsgJyRwYXRoJyB0byAnJG5ld1BhdGgnIik7CiAgICByZXR1cm4gbmV3IExpbmsobmV3UGF0aCk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiB0YXJnZXQoKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVMaW5rVGFyZ2V0LCBbbnVsbCwgX3Jhd1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCBnZXQgdGFyZ2V0IG9mIGxpbmsiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9KTsKICB9CgogIFN0cmluZyB0YXJnZXRTeW5jKCkgewogICAgdmFyIHJlc3VsdCA9IF9GaWxlLl9saW5rVGFyZ2V0KF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCByZWFkIGxpbmsiLCBwYXRoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgdGhyb3dJZkVycm9yKE9iamVjdCByZXN1bHQsIFN0cmluZyBtc2csIFtTdHJpbmcgcGF0aCA9ICIiXSkgewogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKG1zZywgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIGJvb2wgX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkgewogICAgcmV0dXJuIHJlc3BvbnNlIGlzIExpc3QgJiYgcmVzcG9uc2VbMF0gIT0gX3N1Y2Nlc3NSZXNwb25zZTsKICB9CgogIF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsIFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgcGF0aCkgewogICAgYXNzZXJ0KF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKTsKICAgIHN3aXRjaCAocmVzcG9uc2VbX2Vycm9yUmVzcG9uc2VFcnJvclR5cGVdKSB7CiAgICAgIGNhc2UgX2lsbGVnYWxBcmd1bWVudFJlc3BvbnNlOgogICAgICAgIHJldHVybiBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgICBjYXNlIF9vc0Vycm9yUmVzcG9uc2U6CiAgICAgICAgdmFyIGVyciA9IG5ldyBPU0Vycm9yKHJlc3BvbnNlW19vc0Vycm9yUmVzcG9uc2VNZXNzYWdlXSwKICAgICAgICAgICAgcmVzcG9uc2VbX29zRXJyb3JSZXNwb25zZUVycm9yQ29kZV0pOwogICAgICAgIHJldHVybiBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihtZXNzYWdlLCBwYXRoLCBlcnIpOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBuZXcgRXhjZXB0aW9uKCJVbmtub3duIGVycm9yIik7CiAgICB9CiAgfQp9CoEuAE5OPAERAQQ2AwQaMgYcBhweNx0eBicEARwwJisEAQYeBUpFBUggBj8BBk08LQU/MDNJMwVJUE5FSQVNS0sGPwEGTR4FS0BCTAVJUE5FSQVNS0sGOwEGUR4GIgEGSk06BiYBKQElAQZAMgU8RkUGJwEGNyQFPEU1BiMBBkoFMEchBhUBBkcdBUYkBU0cBhsBBlAFRiQFUQYXAgE3EBYBFy4SNAQBKUU+BAEcASgBQgFCAT8BQBFNEjNCGygmRwgTCAQBPBUqBk02BAEjTU1JIBIYBAEnTU1JIDcEATIVMSMeBilHKEwIEwgEAS4VTgZLNgQBKClQKCZBCCAIBAEkTkYeBAEcKUcoJjoIFwgEARhFNBMEAUcdOAYEASRABAFCKDElJB1BMjwPLwYEAgERZGFydDppby9saW5rLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL25hbWVzcGFjZV9pbXBsLmRhcnSEfi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovLyBFYWNoIElzb2xhdGUgbWF5IHJ1biBpbiBhIGRpZmZlcmVudCAibmFtZXNwYWNlIiwgd2hpY2ggcHJvdmlkZXMgdGhlIHNjb3BlIGluCi8vIHdoaWNoIGZpbGUgcGF0aHMgYXJlIHJlc29sdmVkLgphYnN0cmFjdCBjbGFzcyBfTmFtZXNwYWNlIHsKICAvLyBUaGlzIGdldHRlciBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZQogIC8vIG9iamVjdC4gSXQgY2Fubm90IGJlIHBhc3NlZCBpbiBhIGRpc3BhdGNoIG1lc3NhZ2UgdG8gdGhlIElPU2VydmljZSB0aHJlYWQuCiAgZXh0ZXJuYWwgc3RhdGljIF9OYW1lc3BhY2UgZ2V0IF9uYW1lc3BhY2U7CgogIC8vIFRoaXMgZ2V0dGVyIGRvZXMgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgdW5kZXJseWluZyBuYXRpdmUKICAvLyBvYmplY3QuIEl0IG11c3QgYmUgcGFzc2VkIGluIGEgZGlzcGF0Y2ggbWVzc2FnZSB0byB0aGUgSU9TZXJ2aWNlIHRocmVhZC4KICBleHRlcm5hbCBzdGF0aWMgaW50IGdldCBfbmFtZXNwYWNlUG9pbnRlcjsKCiAgLy8gVGhpcyBzZXRzIHVwIHRoZSBJc29sYXRlJ3MgbmFtZXNwYWNlLiBJdCBzaG91bGQgYmUgc2V0IHVwIGJ5IHRoZSBlbWJlZGRlci4KICAvLyBJZiBpdCBpcyBub3Qgc2V0IHVwIGJ5IHRoZSBlbWJlZGRlciwgcmVsYXRpdmUgcGF0aHMgd2lsbCBiZSByZXNvbHZlZAogIC8vIHJlbGF0aXZlIHRvIHRoZSBwcm9jZXNzJ3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgYWJzb2x1dGUgcGF0aHMgd2lsbAogIC8vIGJlIGxlZnQgcmVsYXRpdmUgdG8gdGhlIGZpbGUgc3lzdGVtIHJvb3QuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGV4dGVybmFsIHN0YXRpYyB2b2lkIF9zZXR1cE5hbWVzcGFjZSh2YXIgbmFtZXNwYWNlKTsKfQoaAE5OPAERAVAiHFBQLQFMTi0BUEpRLxw3AgEbZGFydDppby9uYW1lc3BhY2VfaW1wbC5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9vdmVycmlkZXMuZGFydLqlLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCmZpbmFsIF9pb092ZXJyaWRlc1Rva2VuID0gbmV3IE9iamVjdCgpOwoKY29uc3QgX2FzeW5jUnVuWm9uZWQgPSBydW5ab25lZDsKCi8vLyBUaGlzIGNsYXNzIGZhY2lsaXRhdGVzIG92ZXJyaWRpbmcgdmFyaW91cyBBUElzIG9mIGRhcnQ6aW8gd2l0aCBtb2NrCi8vLyBpbXBsZW1lbnRhdGlvbnMuCi8vLwovLy8gVGhpcyBhYnN0cmFjdCBiYXNlIGNsYXNzIHNob3VsZCBiZSBleHRlbmRlZCB3aXRoIG92ZXJyaWRlcyBmb3IgdGhlCi8vLyBvcGVyYXRpb25zIG5lZWRlZCB0byBjb25zdHJ1Y3QgbW9ja3MuIFRoZSBpbXBsZW1lbnRhdGlvbnMgaW4gdGhpcyBiYXNlIGNsYXNzCi8vLyBkZWZhdWx0IHRvIHRoZSBhY3R1YWwgZGFydDppbyBpbXBsZW1lbnRhdGlvbi4gRm9yIGV4YW1wbGU6Ci8vLwovLy8gYGBgCi8vLyBjbGFzcyBNeURpcmVjdG9yeSBpbXBsZW1lbnRzIERpcmVjdG9yeSB7Ci8vLyAgIC4uLgovLy8gICAvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRGlyZWN0b3J5IGludGVyZmFjZQovLy8gICAuLi4KLy8vIH0KLy8vCi8vLyBtYWluKCkgewovLy8gICBJT092ZXJyaWRlcy5ydW5ab25lZCgoKSB7Ci8vLyAgICAgLi4uCi8vLyAgICAgLy8gT3BlcmF0aW9ucyB3aWxsIHVzZSBNeURpcmVjdG9yeSBpbnN0ZWFkIG9mIGRhcnQ6aW8ncyBEaXJlY3RvcnkKLy8vICAgICAvLyBpbXBsZW1lbnRhdGlvbiB3aGVuZXZlciBEaXJlY3RvcnkgaXMgdXNlZC4KLy8vICAgICAuLi4KLy8vICAgfSwgY3JlYXRlRGlyZWN0b3J5OiAoU3RyaW5nIHBhdGgpID0+IG5ldyBNeURpcmVjdG9yeShwYXRoKSk7Ci8vLyB9Ci8vLyBgYGAKYWJzdHJhY3QgY2xhc3MgSU9PdmVycmlkZXMgewogIHN0YXRpYyBJT092ZXJyaWRlcyBfZ2xvYmFsOwoKICBzdGF0aWMgSU9PdmVycmlkZXMgZ2V0IGN1cnJlbnQgewogICAgcmV0dXJuIFpvbmUuY3VycmVudFtfaW9PdmVycmlkZXNUb2tlbl0gPz8gX2dsb2JhbDsKICB9CgogIC8vLyBUaGUgW0lPT3ZlcnJpZGVzXSB0byB1c2UgaW4gdGhlIHJvb3QgW1pvbmVdLgogIC8vLwogIC8vLyBUaGVzZSBhcmUgdGhlIFtJT092ZXJyaWRlc10gdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHJvb3QgWm9uZSwgYW5kIGluCiAgLy8vIFpvbmUncyB0aGF0IGRvIG5vdCBzZXQgW0lPT3ZlcnJpZGVzXSBhbmQgd2hvc2UgYW5jZXN0b3JzIHVwIHRvIHRoZSByb290CiAgLy8vIFpvbmUgZG8gbm90IHNldCBbSU9PdmVycmlkZXNdLgogIHN0YXRpYyBzZXQgZ2xvYmFsKElPT3ZlcnJpZGVzIG92ZXJyaWRlcykgewogICAgX2dsb2JhbCA9IG92ZXJyaWRlczsKICB9CgogIC8vLyBSdW5zIFtib2R5XSBpbiBhIGZyZXNoIFtab25lXSB1c2luZyB0aGUgcHJvdmlkZWQgb3ZlcnJpZGVzLgogIC8vLwogIC8vLyBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvZiBJT092ZXJyaWRlcyBmb3IKICAvLy8gaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgb3B0aW9uYWwgYXJndW1lbnRzIGRvLgogIHN0YXRpYyBSIHJ1blpvbmVkPFI+KFIgYm9keSgpLAogICAgICB7CiAgICAgIC8vIERpcmVjdG9yeQogICAgICBEaXJlY3RvcnkgRnVuY3Rpb24oU3RyaW5nKSBjcmVhdGVEaXJlY3RvcnksCiAgICAgIERpcmVjdG9yeSBGdW5jdGlvbigpIGdldEN1cnJlbnREaXJlY3RvcnksCiAgICAgIHZvaWQgRnVuY3Rpb24oU3RyaW5nKSBzZXRDdXJyZW50RGlyZWN0b3J5LAogICAgICBEaXJlY3RvcnkgRnVuY3Rpb24oKSBnZXRTeXN0ZW1UZW1wRGlyZWN0b3J5LAoKICAgICAgLy8gRmlsZQogICAgICBGaWxlIEZ1bmN0aW9uKFN0cmluZykgY3JlYXRlRmlsZSwKCiAgICAgIC8vIEZpbGVTdGF0CiAgICAgIEZ1dHVyZTxGaWxlU3RhdD4gRnVuY3Rpb24oU3RyaW5nKSBzdGF0LAogICAgICBGaWxlU3RhdCBGdW5jdGlvbihTdHJpbmcpIHN0YXRTeW5jLAoKICAgICAgLy8gRmlsZVN5c3RlbUVudGl0eQogICAgICBGdXR1cmU8Ym9vbD4gRnVuY3Rpb24oU3RyaW5nLCBTdHJpbmcpIGZzZUlkZW50aWNhbCwKICAgICAgYm9vbCBGdW5jdGlvbihTdHJpbmcsIFN0cmluZykgZnNlSWRlbnRpY2FsU3luYywKICAgICAgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPiBGdW5jdGlvbihTdHJpbmcsIGJvb2wpIGZzZUdldFR5cGUsCiAgICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIEZ1bmN0aW9uKFN0cmluZywgYm9vbCkgZnNlR2V0VHlwZVN5bmMsCgogICAgICAvLyBfRmlsZVN5c3RlbVdhdGNoZXIKICAgICAgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gRnVuY3Rpb24oU3RyaW5nLCBpbnQsIGJvb2wpIGZzV2F0Y2gsCiAgICAgIGJvb2wgRnVuY3Rpb24oKSBmc1dhdGNoSXNTdXBwb3J0ZWQsCgogICAgICAvLyBMaW5rCiAgICAgIExpbmsgRnVuY3Rpb24oU3RyaW5nKSBjcmVhdGVMaW5rLAoKICAgICAgLy8gU29ja2V0CiAgICAgIEZ1dHVyZTxTb2NrZXQ+IEZ1bmN0aW9uKGR5bmFtaWMsIGludCwKICAgICAgICAgICAgICB7ZHluYW1pYyBzb3VyY2VBZGRyZXNzLCBEdXJhdGlvbiB0aW1lb3V0fSkKICAgICAgICAgIHNvY2tldENvbm5lY3QsCiAgICAgIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxTb2NrZXQ+PiBGdW5jdGlvbihkeW5hbWljLCBpbnQsCiAgICAgICAgICAgICAge2R5bmFtaWMgc291cmNlQWRkcmVzc30pCiAgICAgICAgICBzb2NrZXRTdGFydENvbm5lY3QsCgogICAgICAvLyBPcHRpb25hbCBab25lIHBhcmFtZXRlcnMKICAgICAgWm9uZVNwZWNpZmljYXRpb24gem9uZVNwZWNpZmljYXRpb24sCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3J9KSB7CiAgICBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBuZXcgX0lPT3ZlcnJpZGVzU2NvcGUoCiAgICAgIC8vIERpcmVjdG9yeQogICAgICBjcmVhdGVEaXJlY3RvcnksCiAgICAgIGdldEN1cnJlbnREaXJlY3RvcnksCiAgICAgIHNldEN1cnJlbnREaXJlY3RvcnksCiAgICAgIGdldFN5c3RlbVRlbXBEaXJlY3RvcnksCgogICAgICAvLyBGaWxlCiAgICAgIGNyZWF0ZUZpbGUsCgogICAgICAvLyBGaWxlU3RhdAogICAgICBzdGF0LAogICAgICBzdGF0U3luYywKCiAgICAgIC8vIEZpbGVTeXN0ZW1FbnRpdHkKICAgICAgZnNlSWRlbnRpY2FsLAogICAgICBmc2VJZGVudGljYWxTeW5jLAogICAgICBmc2VHZXRUeXBlLAogICAgICBmc2VHZXRUeXBlU3luYywKCiAgICAgIC8vIF9GaWxlU3lzdGVtV2F0Y2hlcgogICAgICBmc1dhdGNoLAogICAgICBmc1dhdGNoSXNTdXBwb3J0ZWQsCgogICAgICAvLyBMaW5rCiAgICAgIGNyZWF0ZUxpbmssCgogICAgICAvLyBTb2NrZXQKICAgICAgc29ja2V0Q29ubmVjdCwKICAgICAgc29ja2V0U3RhcnRDb25uZWN0LAogICAgKTsKICAgIHJldHVybiBfYXN5bmNSdW5ab25lZDxSPihib2R5LAogICAgICAgIHpvbmVWYWx1ZXM6IHtfaW9PdmVycmlkZXNUb2tlbjogb3ZlcnJpZGVzfSwKICAgICAgICB6b25lU3BlY2lmaWNhdGlvbjogem9uZVNwZWNpZmljYXRpb24sCiAgICAgICAgb25FcnJvcjogb25FcnJvcik7CiAgfQoKICAvLy8gUnVucyBbYm9keV0gaW4gYSBmcmVzaCBbWm9uZV0gdXNpbmcgdGhlIG92ZXJyaWRlcyBmb3VuZCBpbiBbb3ZlcnJpZGVzXS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IFtvdmVycmlkZXNdIHNob3VsZCBiZSBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgZXh0ZW5kcwogIC8vLyBbSU9PdmVycmlkZXNdLgogIHN0YXRpYyBSIHJ1bldpdGhJT092ZXJyaWRlczxSPihSIGJvZHkoKSwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzLAogICAgICB7Wm9uZVNwZWNpZmljYXRpb24gem9uZVNwZWNpZmljYXRpb24sIEZ1bmN0aW9uIG9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2FzeW5jUnVuWm9uZWQ8Uj4oYm9keSwKICAgICAgICB6b25lVmFsdWVzOiB7X2lvT3ZlcnJpZGVzVG9rZW46IG92ZXJyaWRlc30sCiAgICAgICAgem9uZVNwZWNpZmljYXRpb246IHpvbmVTcGVjaWZpY2F0aW9uLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IpOwogIH0KCiAgLy8gRGlyZWN0b3J5CgogIC8vLyBDcmVhdGVzIGEgbmV3IFtEaXJlY3RvcnldIG9iamVjdCBmb3IgdGhlIGdpdmVuIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBuZXcgRGlyZWN0b3J5KClgIGFuZCBgbmV3IERpcmVjdG9yeS5mcm9tVXJpKClgLgogIERpcmVjdG9yeSBjcmVhdGVEaXJlY3RvcnkoU3RyaW5nIHBhdGgpID0+IG5ldyBfRGlyZWN0b3J5KHBhdGgpOwoKICAvLy8gUmV0dXJucyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIHRoZSBzdGF0aWMgZ2V0dGVyIGBEaXJlY3RvcnkuY3VycmVudGAKICBEaXJlY3RvcnkgZ2V0Q3VycmVudERpcmVjdG9yeSgpID0+IF9EaXJlY3RvcnkuY3VycmVudDsKCiAgLy8vIFNldHMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gYmUgW3BhdGhdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gdGhlIHNldHRlciBgRGlyZWN0b3J5LmN1cnJlbnRgLgogIHZvaWQgc2V0Q3VycmVudERpcmVjdG9yeShTdHJpbmcgcGF0aCkgewogICAgX0RpcmVjdG9yeS5jdXJyZW50ID0gcGF0aDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzeXN0ZW0gdGVtcG9yYXJ5IGRpcmVjdG9yeS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBEaXJlY3Rvcnkuc3lzdGVtVGVtcGAuCiAgRGlyZWN0b3J5IGdldFN5c3RlbVRlbXBEaXJlY3RvcnkoKSA9PiBfRGlyZWN0b3J5LnN5c3RlbVRlbXA7CgogIC8vIEZpbGUKCiAgLy8vIENyZWF0ZXMgYSBuZXcgW0ZpbGVdIG9iamVjdCBmb3IgdGhlIGdpdmVuIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBuZXcgRmlsZSgpYCBhbmQgYG5ldyBGaWxlLmZyb21VcmkoKWAuCiAgRmlsZSBjcmVhdGVGaWxlKFN0cmluZyBwYXRoKSA9PiBuZXcgX0ZpbGUocGF0aCk7CgogIC8vIEZpbGVTdGF0CgogIC8vLyBBc3luY2hyb25vdXNseSByZXR1cm5zIFtGaWxlU3RhdF0gaW5mb3JtYXRpb24gZm9yIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3RhdC5zdGF0KClgLgogIEZ1dHVyZTxGaWxlU3RhdD4gc3RhdChTdHJpbmcgcGF0aCkgewogICAgcmV0dXJuIEZpbGVTdGF0Ll9zdGF0KHBhdGgpOwogIH0KCiAgLy8vIFJldHVybnMgW0ZpbGVTdGF0XSBpbmZvcm1hdGlvbiBmb3IgW3BhdGhdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTdGF0LnN0YXRTeW5jKClgLgogIEZpbGVTdGF0IHN0YXRTeW5jKFN0cmluZyBwYXRoKSB7CiAgICByZXR1cm4gRmlsZVN0YXQuX3N0YXRTeW5jSW50ZXJuYWwocGF0aCk7CiAgfQoKICAvLyBGaWxlU3lzdGVtRW50aXR5CgogIC8vLyBBc3luY2hyb25vdXNseSByZXR1cm5zIGB0cnVlYCBpZiBbcGF0aDFdIGFuZCBbcGF0aDJdIGFyZSBwYXRocyB0byB0aGUKICAvLy8gc2FtZSBmaWxlIHN5c3RlbSBvYmplY3QuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRmlsZVN5c3RlbUVudGl0eS5pZGVudGljYWxgLgogIEZ1dHVyZTxib29sPiBmc2VJZGVudGljYWwoU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpIHsKICAgIHJldHVybiBGaWxlU3lzdGVtRW50aXR5Ll9pZGVudGljYWwocGF0aDEsIHBhdGgyKTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbcGF0aDFdIGFuZCBbcGF0aDJdIGFyZSBwYXRocyB0byB0aGUKICAvLy8gc2FtZSBmaWxlIHN5c3RlbSBvYmplY3QuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRmlsZVN5c3RlbUVudGl0eS5pZGVudGljYWxTeW5jYC4KICBib29sIGZzZUlkZW50aWNhbFN5bmMoU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpIHsKICAgIHJldHVybiBGaWxlU3lzdGVtRW50aXR5Ll9pZGVudGljYWxTeW5jKHBhdGgxLCBwYXRoMik7CiAgfQoKICAvLy8gQXN5bmNocm9ub3VzbHkgcmV0dXJucyB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlXSBmb3IgW3BhdGhdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkudHlwZWAuCiAgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPiBmc2VHZXRUeXBlKFN0cmluZyBwYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eS5fZ2V0VHlwZVJlcXVlc3QodXRmOC5lbmNvZGUocGF0aCksIGZvbGxvd0xpbmtzKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbRmlsZVN5c3RlbUVudGl0eVR5cGVdIGZvciBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRmlsZVN5c3RlbUVudGl0eS50eXBlU3luY2AuCiAgRmlsZVN5c3RlbUVudGl0eVR5cGUgZnNlR2V0VHlwZVN5bmMoU3RyaW5nIHBhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIHJldHVybiBGaWxlU3lzdGVtRW50aXR5Ll9nZXRUeXBlU3luY0hlbHBlcih1dGY4LmVuY29kZShwYXRoKSwgZm9sbG93TGlua3MpOwogIH0KCiAgLy8gX0ZpbGVTeXN0ZW1XYXRjaGVyCgogIC8vLyBSZXR1cm5zIGEgW1N0cmVhbV0gb2YgW0ZpbGVTeXN0ZW1FdmVudF1zLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkud2F0Y2goKWAuCiAgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gZnNXYXRjaChTdHJpbmcgcGF0aCwgaW50IGV2ZW50cywgYm9vbCByZWN1cnNpdmUpIHsKICAgIHJldHVybiBfRmlsZVN5c3RlbVdhdGNoZXIuX3dhdGNoKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCB3aGVuIFtGaWxlU3lzdGVtRW50aXR5LndhdGNoXSBpcyBzdXBwb3J0ZWQuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRmlsZVN5c3RlbUVudGl0eS5pc1dhdGNoU3VwcG9ydGVkYC4KICBib29sIGZzV2F0Y2hJc1N1cHBvcnRlZCgpID0+IF9GaWxlU3lzdGVtV2F0Y2hlci5pc1N1cHBvcnRlZDsKCiAgLy8gTGluawoKICAvLy8gUmV0dXJucyBhIG5ldyBbTGlua10gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gW3BhdGhdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYG5ldyBMaW5rKClgIGFuZCBgbmV3IExpbmsuZnJvbVVyaSgpYC4KICBMaW5rIGNyZWF0ZUxpbmsoU3RyaW5nIHBhdGgpID0+IG5ldyBfTGluayhwYXRoKTsKCiAgLy8gU29ja2V0CgogIC8vLyBBc3luY2hyb25vdXNseSByZXR1cm5zIGEgW1NvY2tldF0gY29ubmVjdGVkIHRvIHRoZSBnaXZlbiBob3N0IGFuZCBwb3J0LgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9ucyBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBTb2NrZXQuY29ubmVjdCguLi4pYC4KICBGdXR1cmU8U29ja2V0PiBzb2NrZXRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pIHsKICAgIHJldHVybiBTb2NrZXQuX2Nvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0OiB0aW1lb3V0KTsKICB9CgogIC8vLyBBc3luY2hyb25vdXNseSByZXR1cm5zIGEgW0Nvbm5lY3Rpb25UYXNrXSB0aGF0IGNvbm5lY3RzIHRvIHRoZSBnaXZlbiBob3N0CiAgLy8vIGFuZCBwb3J0IHdoZW4gc3VjY2Vzc2Z1bC4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbnMgb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgU29ja2V0LnN0YXJ0Q29ubmVjdCguLi4pYC4KICBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gc29ja2V0U3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pIHsKICAgIHJldHVybiBTb2NrZXQuX3N0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKTsKICB9Cn0KCmNsYXNzIF9JT092ZXJyaWRlc1Njb3BlIGV4dGVuZHMgSU9PdmVycmlkZXMgewogIGZpbmFsIElPT3ZlcnJpZGVzIF9wcmV2aW91cyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CgogIC8vIERpcmVjdG9yeQogIERpcmVjdG9yeSBGdW5jdGlvbihTdHJpbmcpIF9jcmVhdGVEaXJlY3Rvcnk7CiAgRGlyZWN0b3J5IEZ1bmN0aW9uKCkgX2dldEN1cnJlbnREaXJlY3Rvcnk7CiAgdm9pZCBGdW5jdGlvbihTdHJpbmcpIF9zZXRDdXJyZW50RGlyZWN0b3J5OwogIERpcmVjdG9yeSBGdW5jdGlvbigpIF9nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5OwoKICAvLyBGaWxlCiAgRmlsZSBGdW5jdGlvbihTdHJpbmcpIF9jcmVhdGVGaWxlOwoKICAvLyBGaWxlU3RhdAogIEZ1dHVyZTxGaWxlU3RhdD4gRnVuY3Rpb24oU3RyaW5nKSBfc3RhdDsKICBGaWxlU3RhdCBGdW5jdGlvbihTdHJpbmcpIF9zdGF0U3luYzsKCiAgLy8gRmlsZVN5c3RlbUVudGl0eQogIEZ1dHVyZTxib29sPiBGdW5jdGlvbihTdHJpbmcsIFN0cmluZykgX2ZzZUlkZW50aWNhbDsKICBib29sIEZ1bmN0aW9uKFN0cmluZywgU3RyaW5nKSBfZnNlSWRlbnRpY2FsU3luYzsKICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eVR5cGU+IEZ1bmN0aW9uKFN0cmluZywgYm9vbCkgX2ZzZUdldFR5cGU7CiAgRmlsZVN5c3RlbUVudGl0eVR5cGUgRnVuY3Rpb24oU3RyaW5nLCBib29sKSBfZnNlR2V0VHlwZVN5bmM7CgogIC8vIF9GaWxlU3lzdGVtV2F0Y2hlcgogIFN0cmVhbTxGaWxlU3lzdGVtRXZlbnQ+IEZ1bmN0aW9uKFN0cmluZywgaW50LCBib29sKSBfZnNXYXRjaDsKICBib29sIEZ1bmN0aW9uKCkgX2ZzV2F0Y2hJc1N1cHBvcnRlZDsKCiAgLy8gTGluawogIExpbmsgRnVuY3Rpb24oU3RyaW5nKSBfY3JlYXRlTGluazsKCiAgLy8gU29ja2V0CiAgRnV0dXJlPFNvY2tldD4gRnVuY3Rpb24oZHluYW1pYywgaW50LAogICAgICB7ZHluYW1pYyBzb3VyY2VBZGRyZXNzLCBEdXJhdGlvbiB0aW1lb3V0fSkgX3NvY2tldENvbm5lY3Q7CiAgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFNvY2tldD4+IEZ1bmN0aW9uKGR5bmFtaWMsIGludCwge2R5bmFtaWMgc291cmNlQWRkcmVzc30pCiAgICAgIF9zb2NrZXRTdGFydENvbm5lY3Q7CgogIF9JT092ZXJyaWRlc1Njb3BlKAogICAgLy8gRGlyZWN0b3J5CiAgICB0aGlzLl9jcmVhdGVEaXJlY3RvcnksCiAgICB0aGlzLl9nZXRDdXJyZW50RGlyZWN0b3J5LAogICAgdGhpcy5fc2V0Q3VycmVudERpcmVjdG9yeSwKICAgIHRoaXMuX2dldFN5c3RlbVRlbXBEaXJlY3RvcnksCgogICAgLy8gRmlsZQogICAgdGhpcy5fY3JlYXRlRmlsZSwKCiAgICAvLyBGaWxlU3RhdAogICAgdGhpcy5fc3RhdCwKICAgIHRoaXMuX3N0YXRTeW5jLAoKICAgIC8vIEZpbGVTeXN0ZW1FbnRpdHkKICAgIHRoaXMuX2ZzZUlkZW50aWNhbCwKICAgIHRoaXMuX2ZzZUlkZW50aWNhbFN5bmMsCiAgICB0aGlzLl9mc2VHZXRUeXBlLAogICAgdGhpcy5fZnNlR2V0VHlwZVN5bmMsCgogICAgLy8gX0ZpbGVTeXN0ZW1XYXRjaGVyCiAgICB0aGlzLl9mc1dhdGNoLAogICAgdGhpcy5fZnNXYXRjaElzU3VwcG9ydGVkLAoKICAgIC8vIExpbmsKICAgIHRoaXMuX2NyZWF0ZUxpbmssCgogICAgLy8gU29ja2V0CiAgICB0aGlzLl9zb2NrZXRDb25uZWN0LAogICAgdGhpcy5fc29ja2V0U3RhcnRDb25uZWN0LAogICk7CgogIC8vIERpcmVjdG9yeQogIEBvdmVycmlkZQogIERpcmVjdG9yeSBjcmVhdGVEaXJlY3RvcnkoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChfY3JlYXRlRGlyZWN0b3J5ICE9IG51bGwpIHJldHVybiBfY3JlYXRlRGlyZWN0b3J5KHBhdGgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmNyZWF0ZURpcmVjdG9yeShwYXRoKTsKICAgIHJldHVybiBzdXBlci5jcmVhdGVEaXJlY3RvcnkocGF0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEaXJlY3RvcnkgZ2V0Q3VycmVudERpcmVjdG9yeSgpIHsKICAgIGlmIChfZ2V0Q3VycmVudERpcmVjdG9yeSAhPSBudWxsKSByZXR1cm4gX2dldEN1cnJlbnREaXJlY3RvcnkoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5nZXRDdXJyZW50RGlyZWN0b3J5KCk7CiAgICByZXR1cm4gc3VwZXIuZ2V0Q3VycmVudERpcmVjdG9yeSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRDdXJyZW50RGlyZWN0b3J5KFN0cmluZyBwYXRoKSB7CiAgICBpZiAoX3NldEN1cnJlbnREaXJlY3RvcnkgIT0gbnVsbCkKICAgICAgX3NldEN1cnJlbnREaXJlY3RvcnkocGF0aCk7CiAgICBlbHNlIGlmIChfcHJldmlvdXMgIT0gbnVsbCkKICAgICAgX3ByZXZpb3VzLnNldEN1cnJlbnREaXJlY3RvcnkocGF0aCk7CiAgICBlbHNlCiAgICAgIHN1cGVyLnNldEN1cnJlbnREaXJlY3RvcnkocGF0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEaXJlY3RvcnkgZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSgpIHsKICAgIGlmIChfZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSAhPSBudWxsKSByZXR1cm4gX2dldFN5c3RlbVRlbXBEaXJlY3RvcnkoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCk7CiAgICByZXR1cm4gc3VwZXIuZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSgpOwogIH0KCiAgLy8gRmlsZQogIEBvdmVycmlkZQogIEZpbGUgY3JlYXRlRmlsZShTdHJpbmcgcGF0aCkgewogICAgaWYgKF9jcmVhdGVGaWxlICE9IG51bGwpIHJldHVybiBfY3JlYXRlRmlsZShwYXRoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5jcmVhdGVGaWxlKHBhdGgpOwogICAgcmV0dXJuIHN1cGVyLmNyZWF0ZUZpbGUocGF0aCk7CiAgfQoKICAvLyBGaWxlU3RhdAogIEBvdmVycmlkZQogIEZ1dHVyZTxGaWxlU3RhdD4gc3RhdChTdHJpbmcgcGF0aCkgewogICAgaWYgKF9zdGF0ICE9IG51bGwpIHJldHVybiBfc3RhdChwYXRoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5zdGF0KHBhdGgpOwogICAgcmV0dXJuIHN1cGVyLnN0YXQocGF0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGaWxlU3RhdCBzdGF0U3luYyhTdHJpbmcgcGF0aCkgewogICAgaWYgKF9zdGF0ICE9IG51bGwpIHJldHVybiBfc3RhdFN5bmMocGF0aCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuc3RhdFN5bmMocGF0aCk7CiAgICByZXR1cm4gc3VwZXIuc3RhdFN5bmMocGF0aCk7CiAgfQoKICAvLyBGaWxlU3lzdGVtRW50aXR5CiAgQG92ZXJyaWRlCiAgRnV0dXJlPGJvb2w+IGZzZUlkZW50aWNhbChTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgaWYgKF9mc2VJZGVudGljYWwgIT0gbnVsbCkgcmV0dXJuIF9mc2VJZGVudGljYWwocGF0aDEsIHBhdGgyKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5mc2VJZGVudGljYWwocGF0aDEsIHBhdGgyKTsKICAgIHJldHVybiBzdXBlci5mc2VJZGVudGljYWwocGF0aDEsIHBhdGgyKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZnNlSWRlbnRpY2FsU3luYyhTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgaWYgKF9mc2VJZGVudGljYWxTeW5jICE9IG51bGwpIHJldHVybiBfZnNlSWRlbnRpY2FsU3luYyhwYXRoMSwgcGF0aDIpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmZzZUlkZW50aWNhbFN5bmMocGF0aDEsIHBhdGgyKTsKICAgIHJldHVybiBzdXBlci5mc2VJZGVudGljYWxTeW5jKHBhdGgxLCBwYXRoMik7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eVR5cGU+IGZzZUdldFR5cGUoU3RyaW5nIHBhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIGlmIChfZnNlR2V0VHlwZSAhPSBudWxsKSByZXR1cm4gX2ZzZUdldFR5cGUocGF0aCwgZm9sbG93TGlua3MpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmZzZUdldFR5cGUocGF0aCwgZm9sbG93TGlua3MpOwogICAgcmV0dXJuIHN1cGVyLmZzZUdldFR5cGUocGF0aCwgZm9sbG93TGlua3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgRmlsZVN5c3RlbUVudGl0eVR5cGUgZnNlR2V0VHlwZVN5bmMoU3RyaW5nIHBhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIGlmIChfZnNlR2V0VHlwZVN5bmMgIT0gbnVsbCkgcmV0dXJuIF9mc2VHZXRUeXBlU3luYyhwYXRoLCBmb2xsb3dMaW5rcyk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZnNlR2V0VHlwZVN5bmMocGF0aCwgZm9sbG93TGlua3MpOwogICAgcmV0dXJuIHN1cGVyLmZzZUdldFR5cGVTeW5jKHBhdGgsIGZvbGxvd0xpbmtzKTsKICB9CgogIC8vIF9GaWxlU3lzdGVtV2F0Y2hlcgogIEBvdmVycmlkZQogIFN0cmVhbTxGaWxlU3lzdGVtRXZlbnQ+IGZzV2F0Y2goU3RyaW5nIHBhdGgsIGludCBldmVudHMsIGJvb2wgcmVjdXJzaXZlKSB7CiAgICBpZiAoX2ZzV2F0Y2ggIT0gbnVsbCkgcmV0dXJuIF9mc1dhdGNoKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5mc1dhdGNoKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKICAgIHJldHVybiBzdXBlci5mc1dhdGNoKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZnNXYXRjaElzU3VwcG9ydGVkKCkgewogICAgaWYgKF9mc1dhdGNoSXNTdXBwb3J0ZWQgIT0gbnVsbCkgcmV0dXJuIF9mc1dhdGNoSXNTdXBwb3J0ZWQoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5mc1dhdGNoSXNTdXBwb3J0ZWQoKTsKICAgIHJldHVybiBzdXBlci5mc1dhdGNoSXNTdXBwb3J0ZWQoKTsKICB9CgogIC8vIExpbmsKICBAb3ZlcnJpZGUKICBMaW5rIGNyZWF0ZUxpbmsoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChfY3JlYXRlTGluayAhPSBudWxsKSByZXR1cm4gX2NyZWF0ZUxpbmsocGF0aCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuY3JlYXRlTGluayhwYXRoKTsKICAgIHJldHVybiBzdXBlci5jcmVhdGVMaW5rKHBhdGgpOwogIH0KCiAgLy8gU29ja2V0CiAgQG92ZXJyaWRlCiAgRnV0dXJlPFNvY2tldD4gc29ja2V0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICBpZiAoX3NvY2tldENvbm5lY3QgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3NvY2tldENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MsIHRpbWVvdXQ6IHRpbWVvdXQpOwogICAgfQogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfcHJldmlvdXMuc29ja2V0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuc29ja2V0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MsIHRpbWVvdXQ6IHRpbWVvdXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFNvY2tldD4+IHNvY2tldFN0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KSB7CiAgICBpZiAoX3NvY2tldFN0YXJ0Q29ubmVjdCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfc29ja2V0U3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MpOwogICAgfQogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfcHJldmlvdXMuc29ja2V0U3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKTsKICAgIH0KICAgIHJldHVybiBzdXBlci5zb2NrZXRTdGFydENvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcyk7CiAgfQp9CoHjAE5OPAERASgBIQFIFQRHUT8ECC0KNgoGBA0gDEo2DEMGCB0eASM3BAEzBk1OJS0ZBAFCBkw4IQgTMjAxMwEOKAESLioBGjo2RkIBHEMqAQ4oARAsORk8Jx4BIisbMxMXGxseAQ4SARIMEAEaFBgSFgEcDxoBDhIBEBUaByM0LhsEAU4GShVCQSM0LhsEAQ8BPQZPN0IBLQZPLDkBNwZPJiofBAEuBk8ePwEKATgGTy0zAQ4BQAZPGSchBAExBk8dIy0EARYBTB8GTyQ6NgQBPR8GTyg2OgQBRAZPH0tNBAE1Bk8jR1AEARgBMAZPIk0/BAFBBk8rPwEKATgGTy0zAQwBTgZQHS8rJzkEAVAgBlAiRBlLBAIBLjUBDy8tLjABCiUBDisnARY3M0M/ARhAJwEKJQEMKEFRGwEVERsfHyIBDBYBEBAUARgYHBYaARoTHgEMFgEOGR4FAQ8MK0FDKAQBDCRFQygEAQwqJiIgKwknBAEMJ0tGKwQBCgwhNz4jBAEODCcrOB0EAQwjLzwhBAEWDDpDSC0EAQw2S0wxBAEMS0RLMAQBDEdMTzQEARgMTUROMwQBDB5DQicEAQoMITc+IwQBDAwvKyIoOwYdMTsGKzkEAQxEGSdMBh02KQZPBAIBFmRhcnQ6aW8vb3ZlcnJpZGVzLmRhcnQsb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3BsYXRmb3JtLmRhcnSd7C8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBjdXJyZW50IHByb2dyYW0gaXMgcnVubmluZy4KICoKICogUGxhdGZvcm0gcHJvdmlkZXMgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSwKICogdGhlIGhvc3RuYW1lIG9mIHRoZSBjb21wdXRlciwgdGhlIHZhbHVlIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcywKICogdGhlIHBhdGggdG8gdGhlIHJ1bm5pbmcgcHJvZ3JhbSwKICogYW5kIHNvIG9uLgogKgogKiAjIyBHZXQgdGhlIFVSSSB0byB0aGUgY3VycmVudCBEYXJ0IHNjcmlwdAogKgogKiBVc2UgdGhlIFtzY3JpcHRdIGdldHRlciB0byBnZXQgdGhlIFVSSSB0byB0aGUgY3VycmVudGx5IHJ1bm5pbmcKICogRGFydCBzY3JpcHQuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nIHNob3cgUGxhdGZvcm07CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIC8vIEdldCB0aGUgVVJJIG9mIHRoZSBzY3JpcHQgYmVpbmcgcnVuLgogKiAgICAgICB2YXIgdXJpID0gUGxhdGZvcm0uc2NyaXB0OwogKiAgICAgICAvLyBDb252ZXJ0IHRoZSBVUkkgdG8gYSBwYXRoLgogKiAgICAgICB2YXIgcGF0aCA9IHVyaS50b0ZpbGVQYXRoKCk7CiAqICAgICB9CiAqCiAqICMjIEdldCB0aGUgdmFsdWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKICoKICogVGhlIFtlbnZpcm9ubWVudF0gZ2V0dGVyIHJldHVybnMgYSB0aGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBlbnZpcm9ubWVudAogKiB2YXJpYWJsZXMgaW4gYSBbTWFwXSB0aGF0IGNvbnRhaW5zIGtleS12YWx1ZSBwYWlycyBvZiBzdHJpbmdzLiBUaGUgTWFwIGlzCiAqIHVubW9kaWZpYWJsZS4gVGhpcyBzYW1wbGUgc2hvd3MgaG93IHRvIGdldCB0aGUgdmFsdWUgb2YgdGhlIGBQQVRIYAogKiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICoKICogICAgIGltcG9ydCAnZGFydDppbycgc2hvdyBQbGF0Zm9ybTsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZWYXJzID0gUGxhdGZvcm0uZW52aXJvbm1lbnQ7CiAqICAgICAgIHByaW50KGVudlZhcnNbJ1BBVEgnXSk7CiAqICAgICB9CiAqCiAqICMjIERldGVybWluZSB0aGUgT1MKICoKICogWW91IGNhbiBnZXQgdGhlIG5hbWUgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYXMgYSBzdHJpbmcgd2l0aCB0aGUKICogW29wZXJhdGluZ1N5c3RlbV0gZ2V0dGVyLiBZb3UgY2FuIGFsc28gdXNlIG9uZSBvZiB0aGUgc3RhdGljIGJvb2xlYW4KICogZ2V0dGVyczogW2lzTWFjT1NdLCBbaXNMaW51eF0sIGFuZCBbaXNXaW5kb3dzXS4KICoKICogICAgIGltcG9ydCAnZGFydDppbycgc2hvdyBQbGF0Zm9ybSwgc3Rkb3V0OwogKgogKiAgICAgdm9pZCBtYWluKCkgewogKiAgICAgICAvLyBHZXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYXMgYSBzdHJpbmcuCiAqICAgICAgIFN0cmluZyBvcyA9IFBsYXRmb3JtLm9wZXJhdGluZ1N5c3RlbTsKICogICAgICAgLy8gT3IsIHVzZSBhIHByZWRpY2F0ZSBnZXR0ZXIuCiAqICAgICAgIGlmIChQbGF0Zm9ybS5pc01hY09TKSB7CiAqICAgICAgICAgcHJpbnQoJ2lzIGEgTWFjJyk7CiAqICAgICAgIH0gZWxzZSB7CiAqICAgICAgICAgcHJpbnQoJ2lzIG5vdCBhIE1hYycpOwogKiAgICAgICB9CiAqICAgICB9CiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiBbRGFydCBieSBFeGFtcGxlXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZGFydC1ieS1leGFtcGxlLyNkYXJ0LWlvLWFuZC1jb21tYW5kLWxpbmUtYXBwcykKICogcHJvdmlkZXMgYWRkaXRpb25hbCB0YXNrLW9yaWVudGVkIGNvZGUgc2FtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZQogKiB2YXJpb3VzIEFQSSBmcm9tIHRoZSBbZGFydDppb10gbGlicmFyeS4KICovCmNsYXNzIFBsYXRmb3JtIHsKICBzdGF0aWMgZmluYWwgX251bWJlck9mUHJvY2Vzc29ycyA9IF9QbGF0Zm9ybS5udW1iZXJPZlByb2Nlc3NvcnM7CiAgc3RhdGljIGZpbmFsIF9wYXRoU2VwYXJhdG9yID0gX1BsYXRmb3JtLnBhdGhTZXBhcmF0b3I7CiAgc3RhdGljIGZpbmFsIF9vcGVyYXRpbmdTeXN0ZW0gPSBfUGxhdGZvcm0ub3BlcmF0aW5nU3lzdGVtOwogIHN0YXRpYyBmaW5hbCBfb3BlcmF0aW5nU3lzdGVtVmVyc2lvbiA9IF9QbGF0Zm9ybS5vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uOwogIHN0YXRpYyBmaW5hbCBfbG9jYWxIb3N0bmFtZSA9IF9QbGF0Zm9ybS5sb2NhbEhvc3RuYW1lOwogIHN0YXRpYyBmaW5hbCBfdmVyc2lvbiA9IF9QbGF0Zm9ybS52ZXJzaW9uOwoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGluZGl2aWR1YWwgZXhlY3V0aW9uIHVuaXRzIG9mIHRoZSBtYWNoaW5lLgogICAqLwogIHN0YXRpYyBpbnQgZ2V0IG51bWJlck9mUHJvY2Vzc29ycyA9PiBfbnVtYmVyT2ZQcm9jZXNzb3JzOwoKICAvKioKICAgKiBUaGUgcGF0aCBzZXBhcmF0b3IgdXNlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBzZXBhcmF0ZQogICAqIGNvbXBvbmVudHMgaW4gZmlsZSBwYXRocy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCBwYXRoU2VwYXJhdG9yID0+IF9wYXRoU2VwYXJhdG9yOwoKICAvKioKICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IGxvY2FsZU5hbWUgPT4gX1BsYXRmb3JtLmxvY2FsZU5hbWUoKTsKCiAgLyoqCiAgICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9yIHBsYXRmb3JtLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IG9wZXJhdGluZ1N5c3RlbSA9PiBfb3BlcmF0aW5nU3lzdGVtOwoKICAvKioKICAgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24gb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3IgcGxhdGZvcm0uCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgb3BlcmF0aW5nU3lzdGVtVmVyc2lvbiA9PiBfb3BlcmF0aW5nU3lzdGVtVmVyc2lvbjsKCiAgLyoqCiAgICogVGhlIGxvY2FsIGhvc3RuYW1lIGZvciB0aGUgc3lzdGVtLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IGxvY2FsSG9zdG5hbWUgPT4gX2xvY2FsSG9zdG5hbWU7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgYSB2ZXJzaW9uIG9mCiAgICogW0xpbnV4XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaW51eCkuCiAgICoKICAgKiBUaGlzIHZhbHVlIGlzIGBmYWxzZWAgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgYSBzcGVjaWFsaXplZAogICAqIHZlcnNpb24gb2YgTGludXggdGhhdCBpZGVudGlmaWVzIGl0c2VsZiBieSBhIGRpZmZlcmVudCBuYW1lLAogICAqIGZvciBleGFtcGxlIEFuZHJvaWQgKHNlZSBbaXNBbmRyb2lkXSkuCiAgICovCiAgc3RhdGljIGZpbmFsIGJvb2wgaXNMaW51eCA9IChfb3BlcmF0aW5nU3lzdGVtID09ICJsaW51eCIpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGEgdmVyc2lvbiBvZgogICAqIFttYWNPU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWFjT1MpLgogICAqLwogIHN0YXRpYyBmaW5hbCBib29sIGlzTWFjT1MgPSAoX29wZXJhdGluZ1N5c3RlbSA9PSAibWFjb3MiKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHZlcnNpb24gb2YKICAgKiBbTWljcm9zb2Z0IFdpbmRvd3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01pY3Jvc29mdF9XaW5kb3dzKS4KICAgKi8KICBzdGF0aWMgZmluYWwgYm9vbCBpc1dpbmRvd3MgPSAoX29wZXJhdGluZ1N5c3RlbSA9PSAid2luZG93cyIpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGEgdmVyc2lvbiBvZgogICAqIFtBbmRyb2lkXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BbmRyb2lkXyUyOG9wZXJhdGluZ19zeXN0ZW0lMjkpLgogICAqLwogIHN0YXRpYyBmaW5hbCBib29sIGlzQW5kcm9pZCA9IChfb3BlcmF0aW5nU3lzdGVtID09ICJhbmRyb2lkIik7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgYSB2ZXJzaW9uIG9mCiAgICogW2lPU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSU9TKS4KICAgKi8KICBzdGF0aWMgZmluYWwgYm9vbCBpc0lPUyA9IChfb3BlcmF0aW5nU3lzdGVtID09ICJpb3MiKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHZlcnNpb24gb2YKICAgKiBbRnVjaHNpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR29vZ2xlX0Z1Y2hzaWEpLgogICAqLwogIHN0YXRpYyBmaW5hbCBib29sIGlzRnVjaHNpYSA9IChfb3BlcmF0aW5nU3lzdGVtID09ICJmdWNoc2lhIik7CgogIC8qKgogICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhpcyBwcm9jZXNzIGFzIGEgbWFwIGZyb20gc3RyaW5nIGtleSB0byBzdHJpbmcgdmFsdWUuCiAgICoKICAgKiBUaGUgbWFwIGlzIHVubW9kaWZpYWJsZSwKICAgKiBhbmQgaXRzIGNvbnRlbnQgaXMgcmV0cmlldmVkIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gaXRzIGZpcnN0IHVzZS4KICAgKgogICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyBvbiBXaW5kb3dzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLAogICAqIHNvIG9uIFdpbmRvd3MgdGhlIG1hcCBpcyBjYXNlLWluc2Vuc2l0aXZlIGFuZCB3aWxsIGNvbnZlcnQKICAgKiBhbGwga2V5cyB0byB1cHBlciBjYXNlLgogICAqIE9uIG90aGVyIHBsYXRmb3Jtcywga2V5cyBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBieSBjYXNlLgogICAqLwogIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBlbnZpcm9ubWVudCA9PiBfUGxhdGZvcm0uZW52aXJvbm1lbnQ7CgogIC8qKgogICAqIFRoZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlIHVzZWQgdG8gcnVuIHRoZSBzY3JpcHQgaW4gdGhpcyBpc29sYXRlLgogICAqCiAgICogVGhlIGxpdGVyYWwgcGF0aCB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzY3JpcHQuCiAgICogVGhpcyBwYXRoIG1pZ2h0IGJlIHJlbGF0aXZlIG9yIGp1c3QgYmUgYSBuYW1lIGZyb20gd2hpY2ggdGhlIGV4ZWN1dGFibGUKICAgKiB3YXMgZm91bmQgYnkgc2VhcmNoaW5nIHRoZSBzeXN0ZW0gcGF0aC4KICAgKgogICAqIFVzZSBbcmVzb2x2ZWRFeGVjdXRhYmxlXSB0byBnZXQgYW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCBleGVjdXRhYmxlID0+IF9QbGF0Zm9ybS5leGVjdXRhYmxlOwoKICAvKioKICAgKiBUaGUgcGF0aCBvZiB0aGUgZXhlY3V0YWJsZSB1c2VkIHRvIHJ1biB0aGUgc2NyaXB0IGluIHRoaXMKICAgKiBpc29sYXRlIGFmdGVyIGl0IGhhcyBiZWVuIHJlc29sdmVkIGJ5IHRoZSBPUy4KICAgKgogICAqIFRoaXMgaXMgdGhlIGFic29sdXRlIHBhdGgsIHdpdGggYWxsIHN5bWxpbmtzIHJlc29sdmVkLCB0byB0aGUKICAgKiBleGVjdXRhYmxlIHVzZWQgdG8gcnVuIHRoZSBzY3JpcHQuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgcmVzb2x2ZWRFeGVjdXRhYmxlID0+IF9QbGF0Zm9ybS5yZXNvbHZlZEV4ZWN1dGFibGU7CgogIC8qKgogICAqIFRoZSBhYnNvbHV0ZSBVUkkgb2YgdGhlIHNjcmlwdCBiZWluZyBydW4gaW4gdGhpcyBpc29sYXRlLgogICAqCiAgICogSWYgdGhlIHNjcmlwdCBhcmd1bWVudCBvbiB0aGUgY29tbWFuZCBsaW5lIGlzIHJlbGF0aXZlLAogICAqIGl0IGlzIHJlc29sdmVkIHRvIGFuIGFic29sdXRlIFVSSSBiZWZvcmUgZmV0Y2hpbmcgdGhlIHNjcmlwdCwgYW5kCiAgICogdGhhdCBhYnNvbHV0ZSBVUkkgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBVUkkgcmVzb2x1dGlvbiBvbmx5IGRvZXMgc3RyaW5nIG1hbmlwdWxhdGlvbiBvbiB0aGUgc2NyaXB0IHBhdGgsIGFuZCB0aGlzCiAgICogbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBmaWxlIHN5c3RlbSdzIHBhdGggcmVzb2x1dGlvbiBiZWhhdmlvci4gRm9yCiAgICogZXhhbXBsZSwgYSBzeW1ib2xpYyBsaW5rIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5ICcuLicgd2lsbCBub3QgYmUKICAgKiBsb29rZWQgdXAuCiAgICoKICAgKiBJZiB0aGUgZXhlY3V0YWJsZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IFtzY3JpcHRdLAogICAqIHRoZSBVUkkgaXMgZW1wdHkuCiAgICovCiAgc3RhdGljIFVyaSBnZXQgc2NyaXB0ID0+IF9QbGF0Zm9ybS5zY3JpcHQ7CgogIC8qKgogICAqIFRoZSBmbGFncyBwYXNzZWQgdG8gdGhlIGV4ZWN1dGFibGUgdXNlZCB0byBydW4gdGhlIHNjcmlwdCBpbiB0aGlzIGlzb2xhdGUuCiAgICoKICAgKiBUaGVzZSBhcmUgdGhlIGNvbW1hbmQtbGluZSBmbGFncyB0byB0aGUgZXhlY3V0YWJsZSB0aGF0IHByZWNlZGVzCiAgICogdGhlIHNjcmlwdCBuYW1lLgogICAqIFByb3ZpZGVzIGEgbmV3IGxpc3QgZXZlcnkgdGltZSB0aGUgdmFsdWUgaXMgcmVhZC4KICAgKi8KICBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldCBleGVjdXRhYmxlQXJndW1lbnRzID0+IF9QbGF0Zm9ybS5leGVjdXRhYmxlQXJndW1lbnRzOwoKICAvKioKICAgKiBUaGlzIHJldHVybnMgYG51bGxgLCBhcyBgcGFja2FnZXMvYCBkaXJlY3RvcmllcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KICAgKgogICAqLwogIEBEZXByZWNhdGVkKCdwYWNrYWdlcy8gZGlyZWN0b3J5IHJlc29sdXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBEYXJ0IDInKQogIHN0YXRpYyBTdHJpbmcgZ2V0IHBhY2thZ2VSb290ID0+IG51bGw7IC8vIFRPRE8obWZhaXJodXJzdCk6IHJlbW92ZSB0aGlzCgogIC8qKgogICAqIFRoZSBgLS1wYWNrYWdlc2AgZmxhZyBwYXNzZWQgdG8gdGhlIGV4ZWN1dGFibGUgdXNlZCB0byBydW4gdGhlIHNjcmlwdAogICAqIGluIHRoaXMgaXNvbGF0ZS4KICAgKgogICAqIElmIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIGZpbGUgZGVzY3JpYmluZyBob3cgRGFydCBwYWNrYWdlcyBhcmUgbG9va2VkIHVwLgogICAqCiAgICogSXMgYG51bGxgIGlmIHRoZXJlIGlzIG5vIGAtLXBhY2thZ2VzYCBmbGFnLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IHBhY2thZ2VDb25maWcgPT4gX1BsYXRmb3JtLnBhY2thZ2VDb25maWc7CgogIC8qKgogICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IERhcnQgcnVudGltZS4KICAgKgogICAqIFRoZSB2YWx1ZSBpcyBhIFtzZW1hbnRpYyB2ZXJzaW9uaW5nXShodHRwOi8vc2VtdmVyLm9yZykKICAgKiBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IERhcnQgcnVudGltZSwKICAgKiBwb3NzaWJseSBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlIGFuZCBvdGhlciB2ZXJzaW9uIGFuZAogICAqIGJ1aWxkIGRldGFpbHMuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgdmVyc2lvbiA9PiBfdmVyc2lvbjsKfQqA6gBOTjwBEQEETgM/RSQOAy0DQxADJwMVMSQnJgkDLwNKTUYZAycDFT0hCQMXA0VIMwMvAxUyLyghHhIiCwkDFgNeRysEEUM5PUs5LQEGPgY8AQZBHwY1AQYpBjoBBj0GOQEGTAZHAQYoBjUBBjIzBURCLAY9AQYyMwY9AQYySwZBAQYyTgZBAQYyLwY5AQYyPgZBAQZQBR5OBTxAHTwGRwEGSAUzTS0FSQY4AQY/MwVDKAZIAQY/BT1HJAVPS0cQBT4XBi0BBlAFRhY3BlABBk4FBktKAQZLFgVRBTEGPgEGLgU9QjsUBikCARVkYXJ0OmlvL3BsYXRmb3JtLmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3BsYXRmb3JtX2ltcGwuZGFydJaNLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCmNsYXNzIF9QbGF0Zm9ybSB7CiAgZXh0ZXJuYWwgc3RhdGljIGludCBfbnVtYmVyT2ZQcm9jZXNzb3JzKCk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfcGF0aFNlcGFyYXRvcigpOwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX29wZXJhdGluZ1N5c3RlbSgpOwogIGV4dGVybmFsIHN0YXRpYyBfb3BlcmF0aW5nU3lzdGVtVmVyc2lvbigpOwogIGV4dGVybmFsIHN0YXRpYyBfbG9jYWxIb3N0bmFtZSgpOwogIGV4dGVybmFsIHN0YXRpYyBfZXhlY3V0YWJsZSgpOwogIGV4dGVybmFsIHN0YXRpYyBfcmVzb2x2ZWRFeGVjdXRhYmxlKCk7CgogIC8qKgogICAqIFJldHJpZXZlIHRoZSBlbnRyaWVzIG9mIHRoZSBwcm9jZXNzIGVudmlyb25tZW50LgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhbiBbSXRlcmFibGVdIG9mIHN0cmluZ3MsIHdoZXJlIGVhY2ggc3RyaW5nIHJlcHJlc2VudHMKICAgKiBhbiBlbnZpcm9ubWVudCBlbnRyeS4KICAgKgogICAqIEVudmlyb25tZW50IGVudHJpZXMgc2hvdWxkIGJlIHN0cmluZ3MgY29udGFpbmluZwogICAqIGEgbm9uLWVtcHR5IG5hbWUgYW5kIGEgdmFsdWUgc2VwYXJhdGVkIGJ5IGEgJz0nIGNoYXJhY3Rlci4KICAgKiBUaGUgbmFtZSBkb2VzIG5vdCBjb250YWluIGEgJz0nIGNoYXJhY3RlciwKICAgKiBzbyB0aGUgbmFtZSBpcyBldmVyeXRoaW5nIHVwIHRvIHRoZSBmaXJzdCAnPScgY2hhcmFjdGVyLgogICAqIFZhbHVlcyBhcmUgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgJz0nIGNoYXJhY3Rlci4KICAgKiBBIHZhbHVlIG1heSBjb250YWluIGZ1cnRoZXIgJz0nIGNoYXJhY3RlcnMsIGFuZCBpdCBtYXkgYmUgZW1wdHkuCiAgICoKICAgKiBSZXR1cm5zIGFuIFtPU0Vycm9yXSBpZiByZXRyaWV2aW5nIHRoZSBlbnZpcm9ubWVudCBmYWlscy4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgX2Vudmlyb25tZW50KCk7CiAgZXh0ZXJuYWwgc3RhdGljIExpc3Q8U3RyaW5nPiBfZXhlY3V0YWJsZUFyZ3VtZW50cygpOwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3BhY2thZ2VSb290KCk7IC8vIFRPRE8obWZhaXJodXJzdCk6IHJlbW92ZSB0aGlzCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfcGFja2FnZUNvbmZpZygpOwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3ZlcnNpb24oKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9sb2NhbGVOYW1lKCk7CiAgZXh0ZXJuYWwgc3RhdGljIFVyaSBfc2NyaXB0KCk7CgogIHN0YXRpYyBTdHJpbmcgZXhlY3V0YWJsZSA9IF9leGVjdXRhYmxlKCk7CiAgc3RhdGljIFN0cmluZyByZXNvbHZlZEV4ZWN1dGFibGUgPSBfcmVzb2x2ZWRFeGVjdXRhYmxlKCk7CiAgc3RhdGljIFN0cmluZyBwYWNrYWdlUm9vdDsgLy8gVE9ETyhtZmFpcmh1cnN0KTogcmVtb3ZlIHRoaXMKICBzdGF0aWMgU3RyaW5nIHBhY2thZ2VDb25maWcgPSBfcGFja2FnZUNvbmZpZygpOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIFN0cmluZyBGdW5jdGlvbigpIF9sb2NhbGVDbG9zdXJlOwogIHN0YXRpYyBTdHJpbmcgbG9jYWxlTmFtZSgpIHsKICAgIGZpbmFsIHJlc3VsdCA9IChfbG9jYWxlQ2xvc3VyZSA9PSBudWxsKSA/IF9sb2NhbGVOYW1lKCkgOiBfbG9jYWxlQ2xvc3VyZSgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBDYWNoZSB0aGUgT1MgZW52aXJvbm1lbnQuIFRoaXMgY2FuIGJlIGFuIE9TRXJyb3IgaW5zdGFuY2UgaWYKICAvLyByZXRyaWV2aW5nIHRoZSBlbnZpcm9ubWVudCBmYWlsZWQuCiAgc3RhdGljIHZhciAvKk9TRXJyb3J8TWFwPFN0cmluZyxTdHJpbmc+Ki8gX2Vudmlyb25tZW50Q2FjaGU7CgogIHN0YXRpYyBpbnQgZ2V0IG51bWJlck9mUHJvY2Vzc29ycyA9PiBfbnVtYmVyT2ZQcm9jZXNzb3JzKCk7CiAgc3RhdGljIFN0cmluZyBnZXQgcGF0aFNlcGFyYXRvciA9PiBfcGF0aFNlcGFyYXRvcigpOwogIHN0YXRpYyBTdHJpbmcgZ2V0IG9wZXJhdGluZ1N5c3RlbSA9PiBfb3BlcmF0aW5nU3lzdGVtKCk7CiAgc3RhdGljIFVyaSBnZXQgc2NyaXB0ID0+IF9zY3JpcHQoKTsKCiAgc3RhdGljIFN0cmluZyBfY2FjaGVkT1NWZXJzaW9uOwogIHN0YXRpYyBTdHJpbmcgZ2V0IG9wZXJhdGluZ1N5c3RlbVZlcnNpb24gewogICAgaWYgKF9jYWNoZWRPU1ZlcnNpb24gPT0gbnVsbCkgewogICAgICB2YXIgcmVzdWx0ID0gX29wZXJhdGluZ1N5c3RlbVZlcnNpb24oKTsKICAgICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgICAgdGhyb3cgcmVzdWx0OwogICAgICB9CiAgICAgIF9jYWNoZWRPU1ZlcnNpb24gPSByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZE9TVmVyc2lvbjsKICB9CgogIHN0YXRpYyBTdHJpbmcgZ2V0IGxvY2FsSG9zdG5hbWUgewogICAgdmFyIHJlc3VsdCA9IF9sb2NhbEhvc3RuYW1lKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0IGV4ZWN1dGFibGVBcmd1bWVudHMgPT4gX2V4ZWN1dGFibGVBcmd1bWVudHMoKTsKCiAgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IGVudmlyb25tZW50IHsKICAgIGlmIChfZW52aXJvbm1lbnRDYWNoZSA9PSBudWxsKSB7CiAgICAgIHZhciBlbnYgPSBfZW52aXJvbm1lbnQoKTsKICAgICAgaWYgKGVudiBpcyEgT1NFcnJvcikgewogICAgICAgIHZhciBpc1dpbmRvd3MgPSBvcGVyYXRpbmdTeXN0ZW0gPT0gJ3dpbmRvd3MnOwogICAgICAgIHZhciByZXN1bHQgPSBpc1dpbmRvd3MKICAgICAgICAgICAgPyBuZXcgX0Nhc2VJbnNlbnNpdGl2ZVN0cmluZ01hcDxTdHJpbmc+KCkKICAgICAgICAgICAgOiBuZXcgTWFwPFN0cmluZywgU3RyaW5nPigpOwogICAgICAgIGZvciAodmFyIHN0ciBpbiBlbnYpIHsKICAgICAgICAgIGlmIChzdHIgPT0gbnVsbCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFRoZSBTdHJpbmdzIHJldHVybmVkIGJ5IFtfZW52aXJvbm1lbnQoKV0gYXJlIGV4cGVjdGVkIHRvIGJlCiAgICAgICAgICAvLyB2YWxpZCBlbnZpcm9ubWVudCBlbnRyaWVzLCBidXQgZXhjZXB0aW9ucyBoYXZlIGJlZW4gc2VlbgogICAgICAgICAgLy8gKGUuZy4sIGFuIGVudHJ5IG9mIGp1c3QgJz0nIGhhcyBiZWVuIHNlZW4gb24gT1MvWCkuCiAgICAgICAgICAvLyBJbnZhbGlkIGVudHJpZXMgKGxpbmVzIHdpdGhvdXQgYSAnPScgb3Igd2l0aCBhbiBlbXB0eSBuYW1lKQogICAgICAgICAgLy8gYXJlIGRpc2NhcmRlZC4KICAgICAgICAgIHZhciBlcXVhbHNJbmRleCA9IHN0ci5pbmRleE9mKCc9Jyk7CiAgICAgICAgICBpZiAoZXF1YWxzSW5kZXggPiAwKSB7CiAgICAgICAgICAgIHJlc3VsdFtzdHIuc3Vic3RyaW5nKDAsIGVxdWFsc0luZGV4KV0gPQogICAgICAgICAgICAgICAgc3RyLnN1YnN0cmluZyhlcXVhbHNJbmRleCArIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfZW52aXJvbm1lbnRDYWNoZSA9IG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PFN0cmluZywgU3RyaW5nPihyZXN1bHQpOwogICAgICB9IGVsc2UgewogICAgICAgIF9lbnZpcm9ubWVudENhY2hlID0gZW52OwogICAgICB9CiAgICB9CgogICAgaWYgKF9lbnZpcm9ubWVudENhY2hlIGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgX2Vudmlyb25tZW50Q2FjaGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2Vudmlyb25tZW50Q2FjaGU7CiAgICB9CiAgfQoKICBzdGF0aWMgU3RyaW5nIGdldCB2ZXJzaW9uID0+IF92ZXJzaW9uKCk7Cn0KCi8vIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBvbiBXaW5kb3dzLiBJbiBvcmRlcgovLyB0byByZWZsZWN0IHRoYXQgd2UgdXNlIGEgY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgbWFwIG9uIFdpbmRvd3MuCmNsYXNzIF9DYXNlSW5zZW5zaXRpdmVTdHJpbmdNYXA8Vj4gZXh0ZW5kcyBNYXBCYXNlPFN0cmluZywgVj4gewogIGZpbmFsIE1hcDxTdHJpbmcsIFY+IF9tYXAgPSBuZXcgTWFwPFN0cmluZywgVj4oKTsKCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PgogICAgICBrZXkgaXMgU3RyaW5nICYmIF9tYXAuY29udGFpbnNLZXkoa2V5LnRvVXBwZXJDYXNlKCkpOwogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+IF9tYXAuY29udGFpbnNWYWx1ZSh2YWx1ZSk7CiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSA9PiBrZXkgaXMgU3RyaW5nID8gX21hcFtrZXkudG9VcHBlckNhc2UoKV0gOiBudWxsOwogIHZvaWQgb3BlcmF0b3IgW109KFN0cmluZyBrZXksIFYgdmFsdWUpIHsKICAgIF9tYXBba2V5LnRvVXBwZXJDYXNlKCldID0gdmFsdWU7CiAgfQoKICBWIHB1dElmQWJzZW50KFN0cmluZyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgcmV0dXJuIF9tYXAucHV0SWZBYnNlbnQoa2V5LnRvVXBwZXJDYXNlKCksIGlmQWJzZW50KTsKICB9CgogIHZvaWQgYWRkQWxsKE1hcDxTdHJpbmcsIFY+IG90aGVyKSB7CiAgICBvdGhlci5mb3JFYWNoKChrZXksIHZhbHVlKSA9PiB0aGlzW2tleS50b1VwcGVyQ2FzZSgpXSA9IHZhbHVlKTsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpID0+IGtleSBpcyBTdHJpbmcgPyBfbWFwLnJlbW92ZShrZXkudG9VcHBlckNhc2UoKSkgOiBudWxsOwoKICB2b2lkIGNsZWFyKCkgewogICAgX21hcC5jbGVhcigpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihTdHJpbmcga2V5LCBWIHZhbHVlKSkgewogICAgX21hcC5mb3JFYWNoKGYpOwogIH0KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQga2V5cyA9PiBfbWFwLmtleXM7CiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBfbWFwLnZhbHVlczsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9tYXAuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9tYXAuaXNOb3RFbXB0eTsKCiAgSXRlcmFibGU8TWFwRW50cnk8U3RyaW5nLCBWPj4gZ2V0IGVudHJpZXMgPT4gX21hcC5lbnRyaWVzOwoKICBNYXA8SzIsIFYyPiBtYXA8SzIsIFYyPihNYXBFbnRyeTxLMiwgVjI+IHRyYW5zZm9ybShTdHJpbmcga2V5LCBWIHZhbHVlKSkgPT4KICAgICAgX21hcC5tYXAodHJhbnNmb3JtKTsKCiAgViB1cGRhdGUoU3RyaW5nIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSA9PgogICAgICBfbWFwLnVwZGF0ZShrZXkudG9VcHBlckNhc2UoKSwgdXBkYXRlLCBpZkFic2VudDogaWZBYnNlbnQpOwoKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShTdHJpbmcga2V5LCBWIHZhbHVlKSkgewogICAgX21hcC51cGRhdGVBbGwodXBkYXRlKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KFN0cmluZyBrZXksIFYgdmFsdWUpKSB7CiAgICBfbWFwLnJlbW92ZVdoZXJlKHRlc3QpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX21hcC50b1N0cmluZygpOwp9CoC0AE5OPAERARItKy0tJCEpAQY2BUobBTZAMD46RgU/BiI3SislKCEBLDw+MgEcKx9QHRQGEwQBQig/AT43OyYBIi0kLh8WCCEGHQQBJCMdFAYTBAFJAS8lIB02HzYpHx0WDElGQUkcLiE0MAwKTQ8hCAYBKB8NIAYEASsCAUNEQDQBIjxBTyslBAEsOgQBJkQEAVEBERIEAS4VBAEqKSEkKgE9AU4bAT1CATIcBAE1HAQBKAIBGmRhcnQ6aW8vcGxhdGZvcm1faW1wbC5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vcGxhdGZvcm1fcGF0Y2guZGFydId3Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9QbGF0Zm9ybSB7CiAgQHBhdGNoCiAgc3RhdGljIGludCBfbnVtYmVyT2ZQcm9jZXNzb3JzKCkgbmF0aXZlICJQbGF0Zm9ybV9OdW1iZXJPZlByb2Nlc3NvcnMiOwogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX3BhdGhTZXBhcmF0b3IoKSBuYXRpdmUgIlBsYXRmb3JtX1BhdGhTZXBhcmF0b3IiOwogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX29wZXJhdGluZ1N5c3RlbSgpIG5hdGl2ZSAiUGxhdGZvcm1fT3BlcmF0aW5nU3lzdGVtIjsKICBAcGF0Y2gKICBzdGF0aWMgX29wZXJhdGluZ1N5c3RlbVZlcnNpb24oKSBuYXRpdmUgIlBsYXRmb3JtX09wZXJhdGluZ1N5c3RlbVZlcnNpb24iOwogIEBwYXRjaAogIHN0YXRpYyBfbG9jYWxIb3N0bmFtZSgpIG5hdGl2ZSAiUGxhdGZvcm1fTG9jYWxIb3N0bmFtZSI7CiAgQHBhdGNoCiAgc3RhdGljIF9leGVjdXRhYmxlKCkgbmF0aXZlICJQbGF0Zm9ybV9FeGVjdXRhYmxlTmFtZSI7CiAgQHBhdGNoCiAgc3RhdGljIF9yZXNvbHZlZEV4ZWN1dGFibGUoKSBuYXRpdmUgIlBsYXRmb3JtX1Jlc29sdmVkRXhlY3V0YWJsZU5hbWUiOwogIEBwYXRjaAogIHN0YXRpYyBfZW52aXJvbm1lbnQoKSBuYXRpdmUgIlBsYXRmb3JtX0Vudmlyb25tZW50IjsKICBAcGF0Y2gKICBzdGF0aWMgTGlzdDxTdHJpbmc+IF9leGVjdXRhYmxlQXJndW1lbnRzKCkKICAgICAgbmF0aXZlICJQbGF0Zm9ybV9FeGVjdXRhYmxlQXJndW1lbnRzIjsKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF92ZXJzaW9uKCkgbmF0aXZlICJQbGF0Zm9ybV9HZXRWZXJzaW9uIjsKCiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfbG9jYWxlTmFtZSgpIG5hdGl2ZSAiUGxhdGZvcm1fTG9jYWxlTmFtZSI7CgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX3BhY2thZ2VSb290KCkgPT4gVk1MaWJyYXJ5SG9va3MucGFja2FnZVJvb3RTdHJpbmc7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfcGFja2FnZUNvbmZpZygpID0+IFZNTGlicmFyeUhvb2tzLnBhY2thZ2VDb25maWdTdHJpbmc7CgogIEBwYXRjaAogIHN0YXRpYyBVcmkgX3NjcmlwdCgpID0+IFZNTGlicmFyeUhvb2tzLnBsYXRmb3JtU2NyaXB0OwoKICAvLyBUaGlzIHNjcmlwdCBzaW5nbGV0b24gaXMgd3JpdHRlbiB0byBieSB0aGUgZW1iZWRkZXIgaWYgYXBwbGljYWJsZS4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIHZvaWQgc2V0IF9uYXRpdmVTY3JpcHQoU3RyaW5nIHBhdGgpIHsKICAgIFZNTGlicmFyeUhvb2tzLnBsYXRmb3JtU2NyaXB0ID0gKCgpIHsKICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnaHR0cDonKSB8fAogICAgICAgICAgcGF0aC5zdGFydHNXaXRoKCdodHRwczonKSB8fAogICAgICAgICAgcGF0aC5zdGFydHNXaXRoKCdwYWNrYWdlOicpIHx8CiAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoJ2RhcnQ6JykgfHwKICAgICAgICAgIHBhdGguc3RhcnRzV2l0aCgnZGF0YTonKSB8fAogICAgICAgICAgcGF0aC5zdGFydHNXaXRoKCdmaWxlOicpKSB7CiAgICAgICAgcmV0dXJuIFVyaS5wYXJzZShwYXRoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gVXJpLmJhc2UucmVzb2x2ZVVyaShuZXcgVXJpLmZpbGUocGF0aCkpOwogICAgICB9CiAgICB9KTsKICB9Cn0KPQBOTjwBIAEHGhIJSQlCCUYJTQk7CTkJSQk3CS0tCTkBCTwBCUQJSAEJOQFIHC8qJicpJiYmIA84CAgEAgEhZGFydDppby1wYXRjaC9wbGF0Zm9ybV9wYXRjaC5kYXJ0K29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9wcm9jZXNzLmRhcnTAAGftLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8vIFRPRE8oYWdlcik6IFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhpcyBjbGFzcyBpcyB0aGF0IHdlCi8vIGNhbm5vdCBwYXRjaCBhIHRvcC1sZXZlbCBhdCB0aGlzIHBvaW50LgpjbGFzcyBfUHJvY2Vzc1V0aWxzIHsKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfZXhpdChpbnQgc3RhdHVzKTsKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfc2V0RXhpdENvZGUoaW50IHN0YXR1cyk7CiAgZXh0ZXJuYWwgc3RhdGljIGludCBfZ2V0RXhpdENvZGUoKTsKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfc2xlZXAoaW50IG1pbGxpcyk7CiAgZXh0ZXJuYWwgc3RhdGljIGludCBfcGlkKFByb2Nlc3MgcHJvY2Vzcyk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmVhbTxQcm9jZXNzU2lnbmFsPiBfd2F0Y2hTaWduYWwoUHJvY2Vzc1NpZ25hbCBzaWduYWwpOwp9CgovKioKICogRXhpdCB0aGUgRGFydCBWTSBwcm9jZXNzIGltbWVkaWF0ZWx5IHdpdGggdGhlIGdpdmVuIGV4aXQgY29kZS4KICoKICogVGhpcyBkb2VzIG5vdCB3YWl0IGZvciBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgdG8gdGVybWluYXRlLiBVc2luZwogKiBbZXhpdF0gaXMgdGhlcmVmb3JlIHZlcnkgbGlrZWx5IHRvIGxvc2UgZGF0YS4KICoKICogV2hpbGUgZGVidWdnaW5nLCB0aGUgVk0gd2lsbCBub3QgcmVzcGVjdCB0aGUgYC0tcGF1c2UtaXNvbGF0ZXMtb24tZXhpdGAKICogZmxhZyBpZiBbZXhpdF0gaXMgY2FsbGVkIGFzIGludm9raW5nIHRoaXMgbWV0aG9kIGNhdXNlcyB0aGUgRGFydCBWTQogKiBwcm9jZXNzIHRvIHNodXRkb3duIGltbWVkaWF0ZWx5LiBUbyBwcm9wZXJseSBicmVhayBvbiBleGl0LCBjb25zaWRlcgogKiBjYWxsaW5nIFtkZWJ1Z2dlcl0gZnJvbSBgZGFydDpkZXZlbG9wZXJgIG9yIFtJc29sYXRlLnBhdXNlXSBmcm9tCiAqIGBkYXJ0Omlzb2xhdGVgIG9uIFtJc29sYXRlLmN1cnJlbnRdIHRvIHBhdXNlIHRoZSBpc29sYXRlIGJlZm9yZQogKiBpbnZva2luZyBbZXhpdF0uCiAqCiAqIFRoZSBoYW5kbGluZyBvZiBleGl0IGNvZGVzIGlzIHBsYXRmb3JtIHNwZWNpZmljLgogKgogKiBPbiBMaW51eCBhbmQgT1MgWCBhbiBleGl0IGNvZGUgZm9yIG5vcm1hbCB0ZXJtaW5hdGlvbiB3aWxsIGFsd2F5cwogKiBiZSBpbiB0aGUgcmFuZ2UgWzAuLjI1NV0uIElmIGFuIGV4aXQgY29kZSBvdXRzaWRlIHRoaXMgcmFuZ2UgaXMKICogc2V0IHRoZSBhY3R1YWwgZXhpdCBjb2RlIHdpbGwgYmUgdGhlIGxvd2VyIDggYml0cyBtYXNrZWQgb2ZmIGFuZAogKiB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIHZhbHVlLiBFLmcuIHVzaW5nIGFuIGV4aXQgY29kZSBvZiAtMSB3aWxsCiAqIHJlc3VsdCBpbiBhbiBhY3R1YWwgZXhpdCBjb2RlIG9mIDI1NSBiZWluZyByZXBvcnRlZC4KICoKICogT24gV2luZG93cyB0aGUgZXhpdCBjb2RlIGNhbiBiZSBzZXQgdG8gYW55IDMyLWJpdCB2YWx1ZS4gSG93ZXZlcgogKiBzb21lIG9mIHRoZXNlIHZhbHVlcyBhcmUgcmVzZXJ2ZWQgZm9yIHJlcG9ydGluZyBzeXN0ZW0gZXJyb3JzIGxpa2UKICogY3Jhc2hlcy4KICoKICogQmVzaWRlcyB0aGlzIHRoZSBEYXJ0IGV4ZWN1dGFibGUgaXRzZWxmIHVzZXMgYW4gZXhpdCBjb2RlIG9mIGAyNTRgCiAqIGZvciByZXBvcnRpbmcgY29tcGlsZSB0aW1lIGVycm9ycyBhbmQgYW4gZXhpdCBjb2RlIG9mIGAyNTVgIGZvcgogKiByZXBvcnRpbmcgcnVudGltZSBlcnJvciAodW5oYW5kbGVkIGV4Y2VwdGlvbikuCiAqCiAqIER1ZSB0byB0aGVzZSBmYWN0cyBpdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHVzZSBleGl0IGNvZGVzIGluIHRoZQogKiByYW5nZSBbMC4uMTI3XSBmb3IgY29tbXVuaWNhdGluZyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBEYXJ0CiAqIHByb2dyYW0gdG8gdGhlIHN1cnJvdW5kaW5nIGVudmlyb25tZW50LiBUaGlzIHdpbGwgYXZvaWQgYW55CiAqIGNyb3NzLXBsYXRmb3JtIGlzc3Vlcy4KICovCnZvaWQgZXhpdChpbnQgY29kZSkgewogIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGNvZGUsICJjb2RlIik7CiAgaWYgKCFfRW1iZWRkZXJDb25maWcuX21heUV4aXQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBjYWxsaW5nIGRhcnQ6aW8ncyBleGl0KCkiKTsKICB9CiAgX1Byb2Nlc3NVdGlscy5fZXhpdChjb2RlKTsKfQoKLyoqCiAqIFNldCB0aGUgZ2xvYmFsIGV4aXQgY29kZSBmb3IgdGhlIERhcnQgVk0uCiAqCiAqIFRoZSBleGl0IGNvZGUgaXMgZ2xvYmFsIGZvciB0aGUgRGFydCBWTSBhbmQgdGhlIGxhc3QgYXNzaWdubWVudCB0bwogKiBleGl0Q29kZSBmcm9tIGFueSBpc29sYXRlIGRldGVybWluZXMgdGhlIGV4aXQgY29kZSBvZiB0aGUgRGFydCBWTQogKiBvbiBub3JtYWwgdGVybWluYXRpb24uCiAqCiAqIERlZmF1bHQgdmFsdWUgaXMgYDBgLgogKgogKiBTZWUgW2V4aXRdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjaG9zZSBhIHZhbHVlIGZvciB0aGUKICogZXhpdCBjb2RlLgogKi8Kdm9pZCBzZXQgZXhpdENvZGUoaW50IGNvZGUpIHsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChjb2RlLCAiY29kZSIpOwogIF9Qcm9jZXNzVXRpbHMuX3NldEV4aXRDb2RlKGNvZGUpOwp9CgovKioKICogR2V0IHRoZSBnbG9iYWwgZXhpdCBjb2RlIGZvciB0aGUgRGFydCBWTS4KICoKICogVGhlIGV4aXQgY29kZSBpcyBnbG9iYWwgZm9yIHRoZSBEYXJ0IFZNIGFuZCB0aGUgbGFzdCBhc3NpZ25tZW50IHRvCiAqIGV4aXRDb2RlIGZyb20gYW55IGlzb2xhdGUgZGV0ZXJtaW5lcyB0aGUgZXhpdCBjb2RlIG9mIHRoZSBEYXJ0IFZNCiAqIG9uIG5vcm1hbCB0ZXJtaW5hdGlvbi4KICoKICogU2VlIFtleGl0XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY2hvc2UgYSB2YWx1ZSBmb3IgdGhlCiAqIGV4aXQgY29kZS4KICovCmludCBnZXQgZXhpdENvZGUgPT4gX1Byb2Nlc3NVdGlscy5fZ2V0RXhpdENvZGUoKTsKCi8qKgogKiBTbGVlcCBmb3IgdGhlIGR1cmF0aW9uIHNwZWNpZmllZCBpbiBbZHVyYXRpb25dLgogKgogKiBVc2UgdGhpcyB3aXRoIGNhcmUsIGFzIG5vIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGNhbiBiZSBwcm9jZXNzZWQKICogaW4gYSBpc29sYXRlIHdoaWxlIGl0IGlzIGJsb2NrZWQgaW4gYSBbc2xlZXBdIGNhbGwuCiAqLwp2b2lkIHNsZWVwKER1cmF0aW9uIGR1cmF0aW9uKSB7CiAgaW50IG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogIGlmIChtaWxsaXNlY29uZHMgPCAwKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigic2xlZXA6IGR1cmF0aW9uIGNhbm5vdCBiZSBuZWdhdGl2ZSIpOwogIH0KICBpZiAoIV9FbWJlZGRlckNvbmZpZy5fbWF5U2xlZXApIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBjYWxsaW5nIGRhcnQ6aW8ncyBzbGVlcCgpIik7CiAgfQogIF9Qcm9jZXNzVXRpbHMuX3NsZWVwKG1pbGxpc2Vjb25kcyk7Cn0KCi8qKgogKiBSZXR1cm5zIHRoZSBQSUQgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KICovCmludCBnZXQgcGlkID0+IF9Qcm9jZXNzVXRpbHMuX3BpZChudWxsKTsKCi8qKgogKiBbUHJvY2Vzc0luZm9dIHByb3ZpZGVzIG1ldGhvZHMgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAqIGN1cnJlbnQgcHJvY2Vzcy4KICovCmNsYXNzIFByb2Nlc3NJbmZvIHsKICAvKioKICAgKiBUaGUgY3VycmVudCByZXNpZGVudCBzZXQgc2l6ZSBvZiBtZW1vcnkgZm9yIHRoZSBwcm9jZXNzLgogICAqCiAgICogTm90ZSB0aGF0IHRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50LiBGb3IgZXhhbXBsZSwKICAgKiBzb21lIG1lbW9yeSBhY2NvdW50ZWQgZm9yIGhlcmUgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyIHByb2Nlc3Nlcywgb3IgaWYKICAgKiB0aGUgc2FtZSBwYWdlIGlzIG1hcHBlZCBpbnRvIGEgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UsIGl0IG1heSBiZSBjb3VudGVkCiAgICogdHdpY2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGludCBnZXQgY3VycmVudFJzczsKCiAgLyoqCiAgICogVGhlIGhpZ2gtd2F0ZXJtYXJrIGluIGJ5dGVzIGZvciB0aGUgcmVzaWRlbnQgc2V0IHNpemUgb2YgbWVtb3J5IGZvciB0aGUKICAgKiBwcm9jZXNzLgogICAqCiAgICogTm90ZSB0aGF0IHRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgaXMgcGxhdGZvcm0gZGVwZW5kZW50LiBGb3IgZXhhbXBsZSwKICAgKiBzb21lIG1lbW9yeSBhY2NvdW50ZWQgZm9yIGhlcmUgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyIHByb2Nlc3Nlcywgb3IgaWYKICAgKiB0aGUgc2FtZSBwYWdlIGlzIG1hcHBlZCBpbnRvIGEgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UsIGl0IG1heSBiZSBjb3VudGVkCiAgICogdHdpY2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGludCBnZXQgbWF4UnNzOwp9CgovKioKICogTW9kZXMgZm9yIHJ1bm5pbmcgYSBuZXcgcHJvY2Vzcy4KICovCmNsYXNzIFByb2Nlc3NTdGFydE1vZGUgewogIC8vLyBOb3JtYWwgY2hpbGQgcHJvY2Vzcy4KICBzdGF0aWMgY29uc3Qgbm9ybWFsID0gY29uc3QgUHJvY2Vzc1N0YXJ0TW9kZS5faW50ZXJuYWwoMCk7CiAgQERlcHJlY2F0ZWQoIlVzZSBub3JtYWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IE5PUk1BTCA9IG5vcm1hbDsKCiAgLy8vIFN0ZGlvIGhhbmRsZXMgYXJlIGluaGVyaXRlZCBieSB0aGUgY2hpbGQgcHJvY2Vzcy4KICBzdGF0aWMgY29uc3QgaW5oZXJpdFN0ZGlvID0gY29uc3QgUHJvY2Vzc1N0YXJ0TW9kZS5faW50ZXJuYWwoMSk7CiAgQERlcHJlY2F0ZWQoIlVzZSBpbmhlcml0U3RkaW8gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElOSEVSSVRfU1RESU8gPSBpbmhlcml0U3RkaW87CgogIC8vLyBEZXRhY2hlZCBjaGlsZCBwcm9jZXNzIHdpdGggbm8gb3BlbiBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCiAgc3RhdGljIGNvbnN0IGRldGFjaGVkID0gY29uc3QgUHJvY2Vzc1N0YXJ0TW9kZS5faW50ZXJuYWwoMik7CiAgQERlcHJlY2F0ZWQoIlVzZSBkZXRhY2hlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgREVUQUNIRUQgPSBkZXRhY2hlZDsKCiAgLy8vIERldGFjaGVkIGNoaWxkIHByb2Nlc3Mgd2l0aCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgc3RpbGwgb3BlbgogIC8vLyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBjaGlsZC4KICBzdGF0aWMgY29uc3QgZGV0YWNoZWRXaXRoU3RkaW8gPSBjb25zdCBQcm9jZXNzU3RhcnRNb2RlLl9pbnRlcm5hbCgzKTsKICBARGVwcmVjYXRlZCgiVXNlIGRldGFjaGVkV2l0aFN0ZGlvIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBERVRBQ0hFRF9XSVRIX1NURElPID0gZGV0YWNoZWRXaXRoU3RkaW87CgogIHN0YXRpYyBMaXN0PFByb2Nlc3NTdGFydE1vZGU+IGdldCB2YWx1ZXMgPT4gY29uc3QgPFByb2Nlc3NTdGFydE1vZGU+WwogICAgICAgIG5vcm1hbCwKICAgICAgICBpbmhlcml0U3RkaW8sCiAgICAgICAgZGV0YWNoZWQsCiAgICAgICAgZGV0YWNoZWRXaXRoU3RkaW8KICAgICAgXTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICBjb25zdCBbIm5vcm1hbCIsICJpbmhlcml0U3RkaW8iLCAiZGV0YWNoZWQiLCAiZGV0YWNoZWRXaXRoU3RkaW8iXVtfbW9kZV07CgogIGZpbmFsIGludCBfbW9kZTsKICBjb25zdCBQcm9jZXNzU3RhcnRNb2RlLl9pbnRlcm5hbCh0aGlzLl9tb2RlKTsKfQoKLyoqCiAqIFRoZSBtZWFucyB0byBleGVjdXRlIGEgcHJvZ3JhbS4KICoKICogVXNlIHRoZSBzdGF0aWMgW3N0YXJ0XSBhbmQgW3J1bl0gbWV0aG9kcyB0byBzdGFydCBhIG5ldyBwcm9jZXNzLgogKiBUaGUgcnVuIG1ldGhvZCBleGVjdXRlcyB0aGUgcHJvY2VzcyBub24taW50ZXJhY3RpdmVseSB0byBjb21wbGV0aW9uLgogKiBJbiBjb250cmFzdCwgdGhlIHN0YXJ0IG1ldGhvZCBhbGxvd3MgeW91ciBjb2RlIHRvIGludGVyYWN0IHdpdGggdGhlCiAqIHJ1bm5pbmcgcHJvY2Vzcy4KICoKICogIyMgU3RhcnQgYSBwcm9jZXNzIHdpdGggdGhlIHJ1biBtZXRob2QKICoKICogVGhlIGZvbGxvd2luZyBjb2RlIHNhbXBsZSB1c2VzIHRoZSBydW4gbWV0aG9kIHRvIGNyZWF0ZSBhIHByb2Nlc3MKICogdGhhdCBydW5zIHRoZSBVTklYIGNvbW1hbmQgYGxzYCwgd2hpY2ggbGlzdHMgdGhlIGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5LgogKiBUaGUgcnVuIG1ldGhvZCBjb21wbGV0ZXMgd2l0aCBhIFtQcm9jZXNzUmVzdWx0XSBvYmplY3Qgd2hlbiB0aGUgcHJvY2VzcwogKiB0ZXJtaW5hdGVzLiBUaGlzIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgb3V0cHV0IGFuZCBleGl0IGNvZGUgZnJvbSB0aGUKICogcHJvY2Vzcy4gVGhlIHJ1biBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGEgUHJvY2VzcyBvYmplY3Q7IHRoaXMgcHJldmVudHMgeW91cgogKiBjb2RlIGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcnVubmluZyBwcm9jZXNzLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIC8vIExpc3QgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpbiBVTklYLWxpa2Ugc3lzdGVtcy4KICogICAgICAgUHJvY2Vzcy5ydW4oJ2xzJywgWyctbCddKS50aGVuKChQcm9jZXNzUmVzdWx0IHJlc3VsdHMpIHsKICogICAgICAgICBwcmludChyZXN1bHRzLnN0ZG91dCk7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKiAjIyBTdGFydCBhIHByb2Nlc3Mgd2l0aCB0aGUgc3RhcnQgbWV0aG9kCiAqCiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIHN0YXJ0IHRvIGNyZWF0ZSB0aGUgcHJvY2Vzcy4KICogVGhlIHN0YXJ0IG1ldGhvZCByZXR1cm5zIGEgW0Z1dHVyZV0gZm9yIGEgUHJvY2VzcyBvYmplY3QuCiAqIFdoZW4gdGhlIGZ1dHVyZSBjb21wbGV0ZXMgdGhlIHByb2Nlc3MgaXMgc3RhcnRlZCBhbmQKICogeW91ciBjb2RlIGNhbiBpbnRlcmFjdCB3aXRoIHRoZQogKiBQcm9jZXNzOiB3cml0aW5nIHRvIHN0ZGluLCBsaXN0ZW5pbmcgdG8gc3Rkb3V0LCBhbmQgc28gb24uCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2FtcGxlIHN0YXJ0cyB0aGUgVU5JWCBgY2F0YCB1dGlsaXR5LCB3aGljaCB3aGVuIGdpdmVuIG5vCiAqIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGVjaG9zIGl0cyBpbnB1dC4KICogVGhlIHByb2dyYW0gd3JpdGVzIHRvIHRoZSBwcm9jZXNzJ3Mgc3RhbmRhcmQgaW5wdXQgc3RyZWFtCiAqIGFuZCBwcmludHMgZGF0YSBmcm9tIGl0cyBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICogICAgIGltcG9ydCAnZGFydDpjb252ZXJ0JzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIFByb2Nlc3Muc3RhcnQoJ2NhdCcsIFtdKS50aGVuKChQcm9jZXNzIHByb2Nlc3MpIHsKICogICAgICAgICBwcm9jZXNzLnN0ZG91dAogKiAgICAgICAgICAgICAudHJhbnNmb3JtKHV0ZjguZGVjb2RlcikKICogICAgICAgICAgICAgLmxpc3RlbigoZGF0YSkgeyBwcmludChkYXRhKTsgfSk7CiAqICAgICAgICAgcHJvY2Vzcy5zdGRpbi53cml0ZWxuKCdIZWxsbywgd29ybGQhJyk7CiAqICAgICAgICAgcHJvY2Vzcy5zdGRpbi53cml0ZWxuKCdIZWxsbywgZ2FsYXh5IScpOwogKiAgICAgICAgIHByb2Nlc3Muc3RkaW4ud3JpdGVsbignSGVsbG8sIHVuaXZlcnNlIScpOwogKiAgICAgICB9KTsKICogICAgIH0KICoKICogIyMgU3RhbmRhcmQgSS9PIHN0cmVhbXMKICoKICogQXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgY29kZSBzYW1wbGUsIHlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgUHJvY2VzcydzCiAqIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0gdGhyb3VnaCB0aGUgZ2V0dGVyIFtzdGRvdXRdLAogKiBhbmQgeW91IGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBQcm9jZXNzJ3Mgc3RhbmRhcmQgaW5wdXQgc3RyZWFtIHRocm91Z2gKICogdGhlIGdldHRlciBbc3RkaW5dLgogKiBJbiBhZGRpdGlvbiwgUHJvY2VzcyBwcm92aWRlcyBhIGdldHRlciBbc3RkZXJyXSBmb3IgdXNpbmcgdGhlIFByb2Nlc3MncwogKiBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCiAqCiAqIEEgUHJvY2VzcydzIHN0cmVhbXMgYXJlIGRpc3RpbmN0IGZyb20gdGhlIHRvcC1sZXZlbCBzdHJlYW1zCiAqIGZvciB0aGUgY3VycmVudCBwcm9ncmFtLgogKgogKiAjIyBFeGl0IGNvZGVzCiAqCiAqIENhbGwgdGhlIFtleGl0Q29kZV0gbWV0aG9kIHRvIGdldCB0aGUgZXhpdCBjb2RlIG9mIHRoZSBwcm9jZXNzLgogKiBUaGUgZXhpdCBjb2RlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm9ncmFtIHRlcm1pbmF0ZWQgc3VjY2Vzc2Z1bGx5CiAqICh1c3VhbGx5IGluZGljYXRlZCB3aXRoIGFuIGV4aXQgY29kZSBvZiAwKSBvciB3aXRoIGFuIGVycm9yLgogKgogKiBJZiB0aGUgc3RhcnQgbWV0aG9kIGlzIHVzZWQsIHRoZSBleGl0Q29kZSBpcyBhdmFpbGFibGUgdGhyb3VnaCBhIGZ1dHVyZQogKiBvbiB0aGUgUHJvY2VzcyBvYmplY3QgKGFzIHNob3duIGluIHRoZSBleGFtcGxlIGJlbG93KS4KICogSWYgdGhlIHJ1biBtZXRob2QgaXMgdXNlZCwgdGhlIGV4aXRDb2RlIGlzIGF2YWlsYWJsZQogKiB0aHJvdWdoIGEgZ2V0dGVyIG9uIHRoZSBQcm9jZXNzUmVzdWx0IGluc3RhbmNlLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIFByb2Nlc3Muc3RhcnQoJ2xzJywgWyctbCddKS50aGVuKChwcm9jZXNzKSB7CiAqICAgICAgICAgLy8gR2V0IHRoZSBleGl0IGNvZGUgZnJvbSB0aGUgbmV3IHByb2Nlc3MuCiAqICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZS50aGVuKChleGl0Q29kZSkgewogKiAgICAgICAgICAgcHJpbnQoJ2V4aXQgY29kZTogJGV4aXRDb2RlJyk7CiAqICAgICAgICAgfSk7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogW0RhcnQgYnkgRXhhbXBsZV0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RhcnQtYnktZXhhbXBsZS8jZGFydC1pby1hbmQtY29tbWFuZC1saW5lLWFwcHMpCiAqIHByb3ZpZGVzIGFkZGl0aW9uYWwgdGFzay1vcmllbnRlZCBjb2RlIHNhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UKICogdmFyaW91cyBBUEkgZnJvbSB0aGUgW2RhcnQ6aW9dIGxpYnJhcnkuCiAqLwphYnN0cmFjdCBjbGFzcyBQcm9jZXNzIHsKICAvKioKICAgKiBSZXR1cm5zIGEgWzpGdXR1cmU6XSB3aGljaCBjb21wbGV0ZXMgd2l0aCB0aGUgZXhpdCBjb2RlIG9mIHRoZSBwcm9jZXNzCiAgICogd2hlbiB0aGUgcHJvY2VzcyBjb21wbGV0ZXMuCiAgICoKICAgKiBUaGUgaGFuZGxpbmcgb2YgZXhpdCBjb2RlcyBpcyBwbGF0Zm9ybSBzcGVjaWZpYy4KICAgKgogICAqIE9uIExpbnV4IGFuZCBPUyBYIGEgbm9ybWFsIGV4aXQgY29kZSB3aWxsIGJlIGEgcG9zaXRpdmUgdmFsdWUgaW4KICAgKiB0aGUgcmFuZ2UgWzAuLjI1NV0uIElmIHRoZSBwcm9jZXNzIHdhcyB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbAogICAqIHRoZSBleGl0IGNvZGUgd2lsbCBiZSBhIG5lZ2F0aXZlIHZhbHVlIGluIHRoZSByYW5nZSBbLTI1NS4uLTFdLAogICAqIHdoZXJlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZXhpdCBjb2RlIGlzIHRoZSBzaWduYWwKICAgKiBudW1iZXIuIEZvciBleGFtcGxlLCBpZiBhIHByb2Nlc3MgY3Jhc2hlcyBkdWUgdG8gYSBzZWdtZW50YXRpb24KICAgKiB2aW9sYXRpb24gdGhlIGV4aXQgY29kZSB3aWxsIGJlIC0xMSwgYXMgdGhlIHNpZ25hbCBTSUdTRUdWIGhhcyB0aGUKICAgKiBudW1iZXIgMTEuCiAgICoKICAgKiBPbiBXaW5kb3dzIGEgcHJvY2VzcyBjYW4gcmVwb3J0IGFueSAzMi1iaXQgdmFsdWUgYXMgYW4gZXhpdAogICAqIGNvZGUuIFdoZW4gcmV0dXJuaW5nIHRoZSBleGl0IGNvZGUgdGhpcyBleGl0IGNvZGUgaXMgdHVybmVkIGludG8KICAgKiBhIHNpZ25lZCB2YWx1ZS4gU29tZSBzcGVjaWFsIHZhbHVlcyBhcmUgdXNlZCB0byByZXBvcnQKICAgKiB0ZXJtaW5hdGlvbiBkdWUgdG8gc29tZSBzeXN0ZW0gZXZlbnQuIEUuZy4gaWYgYSBwcm9jZXNzIGNyYXNoZXMKICAgKiBkdWUgdG8gYW4gYWNjZXNzIHZpb2xhdGlvbiB0aGUgMzItYml0IGV4aXQgY29kZSBpcyBgMHhjMDAwMDAwNWAsCiAgICogd2hpY2ggd2lsbCBiZSByZXR1cm5lZCBhcyB0aGUgbmVnYXRpdmUgbnVtYmVyIGAtMTA3Mzc0MTgxOWAuIFRvCiAgICogZ2V0IHRoZSBvcmlnaW5hbCAzMi1iaXQgdmFsdWUgdXNlIGAoMHgxMDAwMDAwMDAgKyBleGl0Q29kZSkgJgogICAqIDB4ZmZmZmZmZmZgLgogICAqCiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgW3N0ZG91dF0gYW5kIFtzdGRlcnJdIGhhdmUgZmluaXNoZWQgcmVwb3J0aW5nCiAgICogdGhlIGJ1ZmZlcmVkIG91dHB1dCBvZiB0aGUgcHJvY2VzcyB3aGVuIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzLgogICAqIFRvIGJlIHN1cmUgdGhhdCBhbGwgb3V0cHV0IGlzIGNhcHR1cmVkLAogICAqIHdhaXQgZm9yIHRoZSBkb25lIGV2ZW50IG9uIHRoZSBzdHJlYW1zLgogICAqLwogIEZ1dHVyZTxpbnQ+IGdldCBleGl0Q29kZTsKCiAgLyoqCiAgICogU3RhcnRzIGEgcHJvY2VzcyBydW5uaW5nIHRoZSBbZXhlY3V0YWJsZV0gd2l0aCB0aGUgc3BlY2lmaWVkCiAgICogW2FyZ3VtZW50c10uIFJldHVybnMgYSBbOkZ1dHVyZTxQcm9jZXNzPjpdIHRoYXQgY29tcGxldGVzIHdpdGggYQogICAqIFByb2Nlc3MgaW5zdGFuY2Ugd2hlbiB0aGUgcHJvY2VzcyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkKICAgKiBzdGFydGVkLiBUaGF0IFtQcm9jZXNzXSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUKICAgKiBwcm9jZXNzLiBJZiB0aGUgcHJvY2VzcyBjYW5ub3QgYmUgc3RhcnRlZCB0aGUgcmV0dXJuZWQgW0Z1dHVyZV0KICAgKiBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICoKICAgKiBVc2UgW3dvcmtpbmdEaXJlY3RvcnldIHRvIHNldCB0aGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBwcm9jZXNzLiBOb3RlCiAgICogdGhhdCB0aGUgY2hhbmdlIG9mIGRpcmVjdG9yeSBvY2N1cnMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgcHJvY2VzcyBvbiBzb21lCiAgICogcGxhdGZvcm1zLCB3aGljaCBtYXkgaGF2ZSBpbXBhY3Qgd2hlbiB1c2luZyByZWxhdGl2ZSBwYXRocyBmb3IgdGhlCiAgICogZXhlY3V0YWJsZSBhbmQgdGhlIGFyZ3VtZW50cy4KICAgKgogICAqIFVzZSBbZW52aXJvbm1lbnRdIHRvIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgcHJvY2Vzcy4gSWYgbm90CiAgICogc2V0IHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgaW5oZXJpdGVkLiBDdXJyZW50bHksIG9ubHkKICAgKiBVUy1BU0NJSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHN1cHBvcnRlZCBhbmQgZXJyb3JzIGFyZSBsaWtlbHkgdG8gb2NjdXIKICAgKiBpZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIGNvZGUtcG9pbnRzIG91dHNpZGUgdGhlIFVTLUFTQ0lJIHJhbmdlIGlzCiAgICogcGFzc2VkIGluLgogICAqCiAgICogSWYgW2luY2x1ZGVQYXJlbnRFbnZpcm9ubWVudF0gaXMgYHRydWVgLCB0aGUgcHJvY2VzcydzIGVudmlyb25tZW50IHdpbGwKICAgKiBpbmNsdWRlIHRoZSBwYXJlbnQgcHJvY2VzcydzIGVudmlyb25tZW50LCB3aXRoIFtlbnZpcm9ubWVudF0gdGFraW5nCiAgICogcHJlY2VkZW5jZS4gRGVmYXVsdCBpcyBgdHJ1ZWAuCiAgICoKICAgKiBJZiBbcnVuSW5TaGVsbF0gaXMgYHRydWVgLCB0aGUgcHJvY2VzcyB3aWxsIGJlIHNwYXduZWQgdGhyb3VnaCBhIHN5c3RlbQogICAqIHNoZWxsLiBPbiBMaW51eCBhbmQgT1MgWCwgWzovYmluL3NoOl0gaXMgdXNlZCwgd2hpbGUKICAgKiBbOiVXSU5ESVIlXHN5c3RlbTMyXGNtZC5leGU6XSBpcyB1c2VkIG9uIFdpbmRvd3MuCiAgICoKICAgKiBVc2VycyBtdXN0IHJlYWQgYWxsIGRhdGEgY29taW5nIG9uIHRoZSBbc3Rkb3V0XSBhbmQgW3N0ZGVycl0KICAgKiBzdHJlYW1zIG9mIHByb2Nlc3NlcyBzdGFydGVkIHdpdGggWzpQcm9jZXNzLnN0YXJ0Ol0uIElmIHRoZSB1c2VyCiAgICogZG9lcyBub3QgcmVhZCBhbGwgZGF0YSBvbiB0aGUgc3RyZWFtcyB0aGUgdW5kZXJseWluZyBzeXN0ZW0KICAgKiByZXNvdXJjZXMgd2lsbCBub3QgYmUgcmVsZWFzZWQgc2luY2UgdGhlcmUgaXMgc3RpbGwgcGVuZGluZyBkYXRhLgogICAqCiAgICogVGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgYFByb2Nlc3Muc3RhcnRgIHRvIGdyZXAgZm9yIGBtYWluYCBpbiB0aGUKICAgKiBmaWxlIGB0ZXN0LmRhcnRgIG9uIExpbnV4LgogICAqCiAgICogICAgIFByb2Nlc3Muc3RhcnQoJ2dyZXAnLCBbJy1pJywgJ21haW4nLCAndGVzdC5kYXJ0J10pLnRoZW4oKHByb2Nlc3MpIHsKICAgKiAgICAgICBzdGRvdXQuYWRkU3RyZWFtKHByb2Nlc3Muc3Rkb3V0KTsKICAgKiAgICAgICBzdGRlcnIuYWRkU3RyZWFtKHByb2Nlc3Muc3RkZXJyKTsKICAgKiAgICAgfSk7CiAgICoKICAgKiBJZiBbbW9kZV0gaXMgW1Byb2Nlc3NTdGFydE1vZGUubm9ybWFsXSAodGhlIGRlZmF1bHQpIGEgY2hpbGQKICAgKiBwcm9jZXNzIHdpbGwgYmUgc3RhcnRlZCB3aXRoIGBzdGRpbmAsIGBzdGRvdXRgIGFuZCBgc3RkZXJyYAogICAqIGNvbm5lY3RlZC4KICAgKgogICAqIElmIGBtb2RlYCBpcyBbUHJvY2Vzc1N0YXJ0TW9kZS5kZXRhY2hlZF0gYSBkZXRhY2hlZCBwcm9jZXNzIHdpbGwKICAgKiBiZSBjcmVhdGVkLiBBIGRldGFjaGVkIHByb2Nlc3MgaGFzIG5vIGNvbm5lY3Rpb24gdG8gaXRzIHBhcmVudCwKICAgKiBhbmQgY2FuIGtlZXAgcnVubmluZyBvbiBpdHMgb3duIHdoZW4gdGhlIHBhcmVudCBkaWVzLiBUaGUgb25seQogICAqIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBmcm9tIGEgZGV0YWNoZWQgcHJvY2VzcyBpcyBpdHMgYHBpZGAuIFRoZXJlCiAgICogaXMgbm8gY29ubmVjdGlvbiB0byBpdHMgYHN0ZGluYCwgYHN0ZG91dGAgb3IgYHN0ZGVycmAsIG5vciB3aWxsCiAgICogdGhlIHByb2Nlc3MnIGV4aXQgY29kZSBiZWNvbWUgYXZhaWxhYmxlIHdoZW4gaXQgdGVybWluYXRlcy4KICAgKgogICAqIElmIGBtb2RlYCBpcyBbUHJvY2Vzc1N0YXJ0TW9kZS5kZXRhY2hlZFdpdGhTdGRpb10gYSBkZXRhY2hlZAogICAqIHByb2Nlc3Mgd2lsbCBiZSBjcmVhdGVkIHdoZXJlIHRoZSBgc3RkaW5gLCBgc3Rkb3V0YCBhbmQgYHN0ZGVycmAKICAgKiBhcmUgY29ubmVjdGVkLiBUaGUgY3JlYXRvciBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2hpbGQgdGhyb3VnaAogICAqIHRoZXNlLiBUaGUgZGV0YWNoZWQgcHJvY2VzcyB3aWxsIGtlZXAgcnVubmluZyBldmVuIGlmIHRoZXNlCiAgICogY29tbXVuaWNhdGlvbiBjaGFubmVscyBhcmUgY2xvc2VkLiBUaGUgcHJvY2VzcycgZXhpdCBjb2RlIHdpbGwKICAgKiBub3QgYmVjb21lIGF2YWlsYWJsZSB3aGVuIGl0IHRlcm1pbmF0ZWQuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYG1vZGVgIGlzIGBQcm9jZXNzU3RhcnRNb2RlLm5vcm1hbGAuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxQcm9jZXNzPiBzdGFydCgKICAgICAgU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIFByb2Nlc3NTdGFydE1vZGUgbW9kZTogUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWx9KTsKCiAgLyoqCiAgICogU3RhcnRzIGEgcHJvY2VzcyBhbmQgcnVucyBpdCBub24taW50ZXJhY3RpdmVseSB0byBjb21wbGV0aW9uLiBUaGUKICAgKiBwcm9jZXNzIHJ1biBpcyBbZXhlY3V0YWJsZV0gd2l0aCB0aGUgc3BlY2lmaWVkIFthcmd1bWVudHNdLgogICAqCiAgICogVXNlIFt3b3JraW5nRGlyZWN0b3J5XSB0byBzZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgcHJvY2Vzcy4gTm90ZQogICAqIHRoYXQgdGhlIGNoYW5nZSBvZiBkaXJlY3Rvcnkgb2NjdXJzIGJlZm9yZSBleGVjdXRpbmcgdGhlIHByb2Nlc3Mgb24gc29tZQogICAqIHBsYXRmb3Jtcywgd2hpY2ggbWF5IGhhdmUgaW1wYWN0IHdoZW4gdXNpbmcgcmVsYXRpdmUgcGF0aHMgZm9yIHRoZQogICAqIGV4ZWN1dGFibGUgYW5kIHRoZSBhcmd1bWVudHMuCiAgICoKICAgKiBVc2UgW2Vudmlyb25tZW50XSB0byBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHByb2Nlc3MuIElmIG5vdAogICAqIHNldCB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIHBhcmVudCBwcm9jZXNzIGlzIGluaGVyaXRlZC4gQ3VycmVudGx5LCBvbmx5CiAgICogVVMtQVNDSUkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQgYW5kIGVycm9ycyBhcmUgbGlrZWx5IHRvIG9jY3VyCiAgICogaWYgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBjb2RlLXBvaW50cyBvdXRzaWRlIHRoZSBVUy1BU0NJSSByYW5nZSBpcwogICAqIHBhc3NlZCBpbi4KICAgKgogICAqIElmIFtpbmNsdWRlUGFyZW50RW52aXJvbm1lbnRdIGlzIGB0cnVlYCwgdGhlIHByb2Nlc3MncyBlbnZpcm9ubWVudCB3aWxsCiAgICogaW5jbHVkZSB0aGUgcGFyZW50IHByb2Nlc3MncyBlbnZpcm9ubWVudCwgd2l0aCBbZW52aXJvbm1lbnRdIHRha2luZwogICAqIHByZWNlZGVuY2UuIERlZmF1bHQgaXMgYHRydWVgLgogICAqCiAgICogSWYgW3J1bkluU2hlbGxdIGlzIHRydWUsIHRoZSBwcm9jZXNzIHdpbGwgYmUgc3Bhd25lZCB0aHJvdWdoIGEgc3lzdGVtCiAgICogc2hlbGwuIE9uIExpbnV4IGFuZCBPUyBYLCBgL2Jpbi9zaGAgaXMgdXNlZCwgd2hpbGUKICAgKiBgJVdJTkRJUiVcc3lzdGVtMzJcY21kLmV4ZWAgaXMgdXNlZCBvbiBXaW5kb3dzLgogICAqCiAgICogVGhlIGVuY29kaW5nIHVzZWQgZm9yIGRlY29kaW5nIGBzdGRvdXRgIGFuZCBgc3RkZXJyYCBpbnRvIHRleHQgaXMKICAgKiBjb250cm9sbGVkIHRocm91Z2ggW3N0ZG91dEVuY29kaW5nXSBhbmQgW3N0ZGVyckVuY29kaW5nXS4gVGhlCiAgICogZGVmYXVsdCBlbmNvZGluZyBpcyBbc3lzdGVtRW5jb2RpbmddLiBJZiBgbnVsbGAgaXMgdXNlZCBubwogICAqIGRlY29kaW5nIHdpbGwgaGFwcGVuIGFuZCB0aGUgW1Byb2Nlc3NSZXN1bHRdIHdpbGwgaG9sZCBiaW5hcnkKICAgKiBkYXRhLgogICAqCiAgICogUmV0dXJucyBhIGBGdXR1cmU8UHJvY2Vzc1Jlc3VsdD5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlCiAgICogcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIHByb2Nlc3MsIGkuZS4sIGV4aXQgY29kZSwgc3RhbmRhcmQgb3V0IGFuZAogICAqIHN0YW5kYXJkIGluLgogICAqCiAgICogVGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgYFByb2Nlc3MucnVuYCB0byBncmVwIGZvciBgbWFpbmAgaW4gdGhlCiAgICogZmlsZSBgdGVzdC5kYXJ0YCBvbiBMaW51eC4KICAgKgogICAqICAgICBQcm9jZXNzLnJ1bignZ3JlcCcsIFsnLWknLCAnbWFpbicsICd0ZXN0LmRhcnQnXSkudGhlbigocmVzdWx0KSB7CiAgICogICAgICAgc3Rkb3V0LndyaXRlKHJlc3VsdC5zdGRvdXQpOwogICAqICAgICAgIHN0ZGVyci53cml0ZShyZXN1bHQuc3RkZXJyKTsKICAgKiAgICAgfSk7CiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxQcm9jZXNzUmVzdWx0PiBydW4oCiAgICAgIFN0cmluZyBleGVjdXRhYmxlLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICB7U3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50OiB0cnVlLAogICAgICBib29sIHJ1bkluU2hlbGw6IGZhbHNlLAogICAgICBFbmNvZGluZyBzdGRvdXRFbmNvZGluZzogc3lzdGVtRW5jb2RpbmcsCiAgICAgIEVuY29kaW5nIHN0ZGVyckVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZ30pOwoKICAvKioKICAgKiBTdGFydHMgYSBwcm9jZXNzIGFuZCBydW5zIGl0IHRvIGNvbXBsZXRpb24uIFRoaXMgaXMgYSBzeW5jaHJvbm91cwogICAqIGNhbGwgYW5kIHdpbGwgYmxvY2sgdW50aWwgdGhlIGNoaWxkIHByb2Nlc3MgdGVybWluYXRlcy4KICAgKgogICAqIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciBgUHJvY2Vzcy5ydW5gLgogICAqCiAgICogUmV0dXJucyBhIGBQcm9jZXNzUmVzdWx0YCB3aXRoIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgcHJvY2VzcywKICAgKiBpLmUuLCBleGl0IGNvZGUsIHN0YW5kYXJkIG91dCBhbmQgc3RhbmRhcmQgaW4uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFByb2Nlc3NSZXN1bHQgcnVuU3luYygKICAgICAgU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIEVuY29kaW5nIHN0ZG91dEVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZywKICAgICAgRW5jb2Rpbmcgc3RkZXJyRW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nfSk7CgogIC8qKgogICAqIEtpbGxzIHRoZSBwcm9jZXNzIHdpdGggaWQgW3BpZF0uCiAgICoKICAgKiBXaGVyZSBwb3NzaWJsZSwgc2VuZHMgdGhlIFtzaWduYWxdIHRvIHRoZSBwcm9jZXNzIHdpdGggaWQKICAgKiBgcGlkYC4gVGhpcyBpbmNsdWRlcyBMaW51eCBhbmQgT1MgWC4gVGhlIGRlZmF1bHQgc2lnbmFsIGlzCiAgICogW1Byb2Nlc3NTaWduYWwuc2lndGVybV0gd2hpY2ggd2lsbCBub3JtYWxseSB0ZXJtaW5hdGUgdGhlCiAgICogcHJvY2Vzcy4KICAgKgogICAqIE9uIHBsYXRmb3JtcyB3aXRob3V0IHNpZ25hbCBzdXBwb3J0LCBpbmNsdWRpbmcgV2luZG93cywgdGhlIGNhbGwKICAgKiBqdXN0IHRlcm1pbmF0ZXMgdGhlIHByb2Nlc3Mgd2l0aCBpZCBgcGlkYCBpbiBhIHBsYXRmb3JtIHNwZWNpZmljCiAgICogd2F5LCBhbmQgdGhlIGBzaWduYWxgIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogICAqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNpZ25hbCBpcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkIHRvIHRoZQogICAqIHByb2Nlc3MuIE90aGVyd2lzZSB0aGUgc2lnbmFsIGNvdWxkIG5vdCBiZSBzZW50LCB1c3VhbGx5IG1lYW5pbmcKICAgKiB0aGF0IHRoZSBwcm9jZXNzIGlzIGFscmVhZHkgZGVhZC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgYm9vbCBraWxsUGlkKGludCBwaWQsCiAgICAgIFtQcm9jZXNzU2lnbmFsIHNpZ25hbCA9IFByb2Nlc3NTaWduYWwuc2lndGVybV0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtIG9mIHRoZSBwcm9jZXNzIGFzIGEgWzpTdHJlYW06XS4KICAgKi8KICBTdHJlYW08TGlzdDxpbnQ+PiBnZXQgc3Rkb3V0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gb2YgdGhlIHByb2Nlc3MgYXMgYSBbOlN0cmVhbTpdLgogICAqLwogIFN0cmVhbTxMaXN0PGludD4+IGdldCBzdGRlcnI7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0YW5kYXJkIGlucHV0IHN0cmVhbSBvZiB0aGUgcHJvY2VzcyBhcyBhbiBbSU9TaW5rXS4KICAgKi8KICBJT1NpbmsgZ2V0IHN0ZGluOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwcm9jZXNzIGlkIG9mIHRoZSBwcm9jZXNzLgogICAqLwogIGludCBnZXQgcGlkOwoKICAvKioKICAgKiBLaWxscyB0aGUgcHJvY2Vzcy4KICAgKgogICAqIFdoZXJlIHBvc3NpYmxlLCBzZW5kcyB0aGUgW3NpZ25hbF0gdG8gdGhlIHByb2Nlc3MuIFRoaXMgaW5jbHVkZXMKICAgKiBMaW51eCBhbmQgT1MgWC4gVGhlIGRlZmF1bHQgc2lnbmFsIGlzIFtQcm9jZXNzU2lnbmFsLnNpZ3Rlcm1dCiAgICogd2hpY2ggd2lsbCBub3JtYWxseSB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MuCiAgICoKICAgKiBPbiBwbGF0Zm9ybXMgd2l0aG91dCBzaWduYWwgc3VwcG9ydCwgaW5jbHVkaW5nIFdpbmRvd3MsIHRoZSBjYWxsCiAgICoganVzdCB0ZXJtaW5hdGVzIHRoZSBwcm9jZXNzIGluIGEgcGxhdGZvcm0gc3BlY2lmaWMgd2F5LCBhbmQgdGhlCiAgICogYHNpZ25hbGAgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCiAgICoKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2lnbmFsIGlzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgdG8gdGhlCiAgICogcHJvY2Vzcy4gT3RoZXJ3aXNlIHRoZSBzaWduYWwgY291bGQgbm90IGJlIHNlbnQsIHVzdWFsbHkgbWVhbmluZwogICAqIHRoYXQgdGhlIHByb2Nlc3MgaXMgYWxyZWFkeSBkZWFkLgogICAqLwogIGJvb2wga2lsbChbUHJvY2Vzc1NpZ25hbCBzaWduYWwgPSBQcm9jZXNzU2lnbmFsLnNpZ3Rlcm1dKTsKfQoKLyoqCiAqIFtQcm9jZXNzUmVzdWx0XSByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIG5vbi1pbnRlcmFjdGl2ZQogKiBwcm9jZXNzIHN0YXJ0ZWQgd2l0aCBbUHJvY2Vzcy5ydW5dIG9yIFtQcm9jZXNzLnJ1blN5bmNdLgogKi8KY2xhc3MgUHJvY2Vzc1Jlc3VsdCB7CiAgLyoqCiAgICogRXhpdCBjb2RlIGZvciB0aGUgcHJvY2Vzcy4KICAgKgogICAqIFNlZSBbUHJvY2Vzcy5leGl0Q29kZV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlIGV4aXQgY29kZQogICAqIHZhbHVlLgogICAqLwogIGZpbmFsIGludCBleGl0Q29kZTsKCiAgLyoqCiAgICogU3RhbmRhcmQgb3V0cHV0IGZyb20gdGhlIHByb2Nlc3MuIFRoZSB2YWx1ZSB1c2VkIGZvciB0aGUKICAgKiBgc3Rkb3V0RW5jb2RpbmdgIGFyZ3VtZW50IHRvIGBQcm9jZXNzLnJ1bmAgZGV0ZXJtaW5lcyB0aGUgdHlwZS4gSWYKICAgKiBgbnVsbGAgd2FzIHVzZWQgdGhpcyB2YWx1ZSBpcyBvZiB0eXBlIGBMaXN0PGludD5gIG90aGVyd2lzZSBpdCBpcwogICAqIG9mIHR5cGUgYFN0cmluZ2AuCiAgICovCiAgZmluYWwgc3Rkb3V0OwoKICAvKioKICAgKiBTdGFuZGFyZCBlcnJvciBmcm9tIHRoZSBwcm9jZXNzLiBUaGUgdmFsdWUgdXNlZCBmb3IgdGhlCiAgICogYHN0ZGVyckVuY29kaW5nYCBhcmd1bWVudCB0byBgUHJvY2Vzcy5ydW5gIGRldGVybWluZXMgdGhlIHR5cGUuIElmCiAgICogYG51bGxgIHdhcyB1c2VkIHRoaXMgdmFsdWUgaXMgb2YgdHlwZSBgTGlzdDxpbnQ+YAogICAqIG90aGVyd2lzZSBpdCBpcyBvZiB0eXBlIGBTdHJpbmdgLgogICAqLwogIGZpbmFsIHN0ZGVycjsKCiAgLyoqCiAgICogUHJvY2VzcyBpZCBvZiB0aGUgcHJvY2Vzcy4KICAgKi8KICBmaW5hbCBpbnQgcGlkOwoKICBQcm9jZXNzUmVzdWx0KHRoaXMucGlkLCB0aGlzLmV4aXRDb2RlLCB0aGlzLnN0ZG91dCwgdGhpcy5zdGRlcnIpOwp9CgovKioKICogT24gUG9zaXggc3lzdGVtcywgW1Byb2Nlc3NTaWduYWxdIGlzIHVzZWQgdG8gc2VuZCBhIHNwZWNpZmljIHNpZ25hbAogKiB0byBhIGNoaWxkIHByb2Nlc3MsIHNlZSBbOlByb2Nlc3Mua2lsbDpdLgogKgogKiBTb21lIFtQcm9jZXNzU2lnbmFsXXMgY2FuIGFsc28gYmUgd2F0Y2hlZCwgYXMgYSB3YXkgdG8gaW50ZXJjZXB0IHRoZSBkZWZhdWx0CiAqIHNpZ25hbCBoYW5kbGVyIGFuZCBpbXBsZW1lbnQgYW5vdGhlci4gU2VlIFtQcm9jZXNzU2lnbmFsLndhdGNoXSBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbi4KICovCmNsYXNzIFByb2Nlc3NTaWduYWwgewogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2h1cCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxLCAiU0lHSFVQIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnaW50ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDIsICJTSUdJTlQiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdxdWl0ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDMsICJTSUdRVUlUIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnaWxsID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDQsICJTSUdJTEwiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd0cmFwID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDUsICJTSUdUUkFQIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnYWJydCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXyg2LCAiU0lHQUJSVCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2J1cyA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXyg3LCAiU0lHQlVTIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnZnBlID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDgsICJTSUdGUEUiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdraWxsID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDksICJTSUdLSUxMIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndXNyMSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxMCwgIlNJR1VTUjEiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdzZWd2ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDExLCAiU0lHU0VHViIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3VzcjIgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTIsICJTSUdVU1IyIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lncGlwZSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxMywgIlNJR1BJUEUiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdhbHJtID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDE0LCAiU0lHQUxSTSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3Rlcm0gPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTUsICJTSUdURVJNIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnY2hsZCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxNywgIlNJR0NITEQiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdjb250ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDE4LCAiU0lHQ09OVCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3N0b3AgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTksICJTSUdTVE9QIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndHN0cCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyMCwgIlNJR1RTVFAiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd0dGluID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDIxLCAiU0lHVFRJTiIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3R0b3UgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjIsICJTSUdUVE9VIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndXJnID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDIzLCAiU0lHVVJHIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lneGNwdSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyNCwgIlNJR1hDUFUiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd4ZnN6ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDI1LCAiU0lHWEZTWiIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3Z0YWxybSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyNiwgIlNJR1ZUQUxSTSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3Byb2YgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjcsICJTSUdQUk9GIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnd2luY2ggPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjgsICJTSUdXSU5DSCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3BvbGwgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjksICJTSUdQT0xMIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnc3lzID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDMxLCAiU0lHU1lTIik7CgogIEBEZXByZWNhdGVkKCJVc2Ugc2lnaHVwIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0hVUCA9IHNpZ2h1cDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2ludCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdJTlQgPSBzaWdpbnQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdxdWl0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1FVSVQgPSBzaWdxdWl0OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnaWxsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0lMTCA9IHNpZ2lsbDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3RyYXAgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVFJBUCA9IHNpZ3RyYXA7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdhYnJ0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0FCUlQgPSBzaWdhYnJ0OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnYnVzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0JVUyA9IHNpZ2J1czsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2ZwZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdGUEUgPSBzaWdmcGU7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdraWxsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0tJTEwgPSBzaWdraWxsOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndXNyMSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdVU1IxID0gc2lndXNyMTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3NlZ3YgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHU0VHViA9IHNpZ3NlZ3Y7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd1c3IyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1VTUjIgPSBzaWd1c3IyOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lncGlwZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdQSVBFID0gc2lncGlwZTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2Fscm0gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHQUxSTSA9IHNpZ2Fscm07CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd0ZXJtIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1RFUk0gPSBzaWd0ZXJtOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnY2hsZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdDSExEID0gc2lnY2hsZDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2NvbnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHQ09OVCA9IHNpZ2NvbnQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdzdG9wIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1NUT1AgPSBzaWdzdG9wOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndHN0cCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdUU1RQID0gc2lndHN0cDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3R0aW4gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVFRJTiA9IHNpZ3R0aW47CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd0dG91IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1RUT1UgPSBzaWd0dG91OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndXJnIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1VSRyA9IHNpZ3VyZzsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3hjcHUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHWENQVSA9IHNpZ3hjcHU7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd4ZnN6IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1hGU1ogPSBzaWd4ZnN6OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndnRhbHJtIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1ZUQUxSTSA9IHNpZ3Z0YWxybTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3Byb2YgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHUFJPRiA9IHNpZ3Byb2Y7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd3aW5jaCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdXSU5DSCA9IHNpZ3dpbmNoOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lncG9sbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdQT0xMID0gc2lncG9sbDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3N5cyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdTWVMgPSBzaWdzeXM7CgogIGZpbmFsIGludCBfc2lnbmFsTnVtYmVyOwogIGZpbmFsIFN0cmluZyBfbmFtZTsKCiAgY29uc3QgUHJvY2Vzc1NpZ25hbC5fKHRoaXMuX3NpZ25hbE51bWJlciwgdGhpcy5fbmFtZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9uYW1lOwoKICAvKioKICAgKiBXYXRjaCBmb3IgcHJvY2VzcyBzaWduYWxzLgogICAqCiAgICogVGhlIGZvbGxvd2luZyBbUHJvY2Vzc1NpZ25hbF1zIGNhbiBiZSBsaXN0ZW5lZCB0bzoKICAgKgogICAqICAgKiBbUHJvY2Vzc1NpZ25hbC5zaWdodXBdLgogICAqICAgKiBbUHJvY2Vzc1NpZ25hbC5zaWdpbnRdLiBTaWduYWwgc2VudCBieSBlLmcuIENUUkwtQy4KICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lndGVybV0uIE5vdCBhdmFpbGFibGUgb24gV2luZG93cy4KICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lndXNyMV0uIE5vdCBhdmFpbGFibGUgb24gV2luZG93cy4KICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lndXNyMl0uIE5vdCBhdmFpbGFibGUgb24gV2luZG93cy4KICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lnd2luY2hdLiBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCiAgICoKICAgKiBPdGhlciBzaWduYWxzIGFyZSBkaXNhbGxvd2VkLCBhcyB0aGV5IG1heSBiZSB1c2VkIGJ5IHRoZSBWTS4KICAgKgogICAqIEEgc2lnbmFsIGNhbiBiZSB3YXRjaGVkIG11bHRpcGxlIHRpbWVzLCBmcm9tIG11bHRpcGxlIGlzb2xhdGVzLCB3aGVyZSBhbGwKICAgKiBjYWxsYmFja3MgYXJlIGludm9rZWQgd2hlbiBzaWduYWxlZCwgaW4gbm8gc3BlY2lmaWMgb3JkZXIuCiAgICovCiAgU3RyZWFtPFByb2Nlc3NTaWduYWw+IHdhdGNoKCkgPT4gX1Byb2Nlc3NVdGlscy5fd2F0Y2hTaWduYWwodGhpcyk7Cn0KCmNsYXNzIFNpZ25hbEV4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBmaW5hbCBvc0Vycm9yOwoKICBjb25zdCBTaWduYWxFeGNlcHRpb24odGhpcy5tZXNzYWdlLCBbdGhpcy5vc0Vycm9yXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHZhciBtc2cgPSAiIjsKICAgIGlmIChvc0Vycm9yICE9IG51bGwpIHsKICAgICAgbXNnID0gIiwgb3NFcnJvcjogJG9zRXJyb3IiOwogICAgfQogICAgcmV0dXJuICJTaWduYWxFeGNlcHRpb246ICRtZXNzYWdlJG1zZyI7CiAgfQp9CgpjbGFzcyBQcm9jZXNzRXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIC8qKgogICAqIENvbnRhaW5zIHRoZSBleGVjdXRhYmxlIHByb3ZpZGVkIGZvciB0aGUgcHJvY2Vzcy4KICAgKi8KICBmaW5hbCBTdHJpbmcgZXhlY3V0YWJsZTsKCiAgLyoqCiAgICogQ29udGFpbnMgdGhlIGFyZ3VtZW50cyBwcm92aWRlZCBmb3IgdGhlIHByb2Nlc3MuCiAgICovCiAgZmluYWwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50czsKCiAgLyoqCiAgICogQ29udGFpbnMgdGhlIHN5c3RlbSBtZXNzYWdlIGZvciB0aGUgcHJvY2VzcyBleGNlcHRpb24gaWYgYW55LgogICAqLwogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICAvKioKICAgKiBDb250YWlucyB0aGUgT1MgZXJyb3IgY29kZSBmb3IgdGhlIHByb2Nlc3MgZXhjZXB0aW9uIGlmIGFueS4KICAgKi8KICBmaW5hbCBpbnQgZXJyb3JDb2RlOwoKICBjb25zdCBQcm9jZXNzRXhjZXB0aW9uKHRoaXMuZXhlY3V0YWJsZSwgdGhpcy5hcmd1bWVudHMsCiAgICAgIFt0aGlzLm1lc3NhZ2UgPSAiIiwgdGhpcy5lcnJvckNvZGUgPSAwXSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgdmFyIG1zZyA9IChtZXNzYWdlID09IG51bGwpID8gJ09TIGVycm9yIGNvZGU6ICRlcnJvckNvZGUnIDogbWVzc2FnZTsKICAgIHZhciBhcmdzID0gYXJndW1lbnRzLmpvaW4oJyAnKTsKICAgIHJldHVybiAiUHJvY2Vzc0V4Y2VwdGlvbjogJG1zZ1xuICBDb21tYW5kOiAkZXhlY3V0YWJsZSAkYXJncyI7CiAgfQp9CoK+AE5OPAERATkrFioxJistTAIBBEIDSjEDS0dIREMUAzQDRUNERDgDREYMA0ZDMgNGQT8aBBYsIyA9BB0CAQQtA0ZFGgMZA0MOBB4sJAIBBC0DRkUaA0MOBDIBBDMDRjcEIC4aQwQkID4EJgIBBCsEKQEERxQEFAY+BU1OTwwGJgEGTQ4FTU5PDAYiAgEEJAQZHD0kIAE4QyotAUE/JiQBRihILzgBSBAWEhoJF1ABEzACAQQjA0RIRxQDKgNFTUtJUDMDGQMQSkIiDQkDLAM7PTgjPgNLLD00AxkeAxA7GigxMzQ2DQkDGwNMN0kXSxoDPxwDEQNDR0ADSzo4MwMZAxA2Ni4sDw0JAxYDXkcrBBkGTCEFNgVGR0U9RUgQBUFGPEVGRUMSBU5MLS0GHAEGQkY9RUUiBU9OSCMFUE1RTxAFTUkkBU06NwVCRkFHBUcgBU0tLQ0FQkEQBUZFREdFQQVCRkdBRC4FQAYpMSAnKx44AQZHQQVPTkgjBVBNUU8QBU1JJAVLODUFR0NAQwsFP0YSBUUgBUooKA0GLTEgJyseLzEBBkc9BTYFRzQGKTEgJyseLzEBBiYFP0A/DgVGRjEFQ0YnBig3AQZIBiABBkcGIAEGRgYUAQYsBg8BBhgFRkMwBUZFJAVDRicGPQIBBEY8BBYGIAVCDAYWAQY+SEcXBhABBj1INycGEAEGIAYRAUQCAQRHLQNQTBAEFkpKTEpMTEpKTE1NTU1NTU1NTU1NTUtNTVFNT01LASQuJC4lMCQuJTAlMCQuJC4lMCUwJTAlMCUwJTAlMCUwJTAlMCUwJTAlMCQuJTAlMCc0JTAmMiUwJC4BGxYBOQEeAQYgBTgFIT08PDw9BUIFT0AGRQIBLxgRATcBFhIbIwYsBAIBMAY3BhsBBjYGIAEGQwYYAQZCBhcBOjAWSSRDBAIBFGRhcnQ6aW8vcHJvY2Vzcy5kYXJ0OG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9zZWN1cmVfc2VydmVyX3NvY2tldC5kYXJ0qokvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIFRoZSBbU2VjdXJlU2VydmVyU29ja2V0XSBpcyBhIHNlcnZlciBzb2NrZXQsIHByb3ZpZGluZyBhIHN0cmVhbSBvZiBoaWdoLWxldmVsCiAqIFtTb2NrZXRdcy4KICoKICogU2VlIFtTZWN1cmVTb2NrZXRdIGZvciBtb3JlIGluZm8uCiAqLwpjbGFzcyBTZWN1cmVTZXJ2ZXJTb2NrZXQgZXh0ZW5kcyBTdHJlYW08U2VjdXJlU29ja2V0PiB7CiAgZmluYWwgUmF3U2VjdXJlU2VydmVyU29ja2V0IF9zb2NrZXQ7CgogIFNlY3VyZVNlcnZlclNvY2tldC5fKHRoaXMuX3NvY2tldCk7CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgZm9yIGEgW1NlY3VyZVNlcnZlclNvY2tldF0uIFdoZW4gdGhlIGZ1dHVyZQogICAqIGNvbXBsZXRlcyB0aGUgc2VydmVyIHNvY2tldCBpcyBib3VuZCB0byB0aGUgZ2l2ZW4gW2FkZHJlc3NdIGFuZAogICAqIFtwb3J0XSBhbmQgaGFzIHN0YXJ0ZWQgbGlzdGVuaW5nIG9uIGl0LgogICAqCiAgICogVGhlIFthZGRyZXNzXSBjYW4gZWl0aGVyIGJlIGEgW1N0cmluZ10gb3IgYW4KICAgKiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2FkZHJlc3NdIGlzIGEgW1N0cmluZ10sIFtiaW5kXSB3aWxsCiAgICogcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdXNlIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUKICAgKiBsaXN0LiBUbyBsaXN0ZW4gb24gdGhlIGxvb3BiYWNrIGFkYXB0ZXIsIHdoaWNoIHdpbGwgYWxsb3cgb25seQogICAqIGluY29taW5nIGNvbm5lY3Rpb25zIGZyb20gdGhlIGxvY2FsIGhvc3QsIHVzZSB0aGUgdmFsdWUKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NF0gb3IKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2Nl0uIFRvIGFsbG93IGZvciBpbmNvbWluZwogICAqIGNvbm5lY3Rpb24gZnJvbSB0aGUgbmV0d29yayB1c2UgZWl0aGVyIG9uZSBvZiB0aGUgdmFsdWVzCiAgICogW0ludGVybmV0QWRkcmVzcy5hbnlJUHY0XSBvciBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjZdIHRvCiAgICogYmluZCB0byBhbGwgaW50ZXJmYWNlcyBvciB0aGUgSVAgYWRkcmVzcyBvZiBhIHNwZWNpZmljIGludGVyZmFjZS4KICAgKgogICAqIElmIFtwb3J0XSBoYXMgdGhlIHZhbHVlIFs6MDpdIGFuIGVwaGVtZXJhbCBwb3J0IHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4gVGhlIGFjdHVhbCBwb3J0IHVzZWQgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUKICAgKiBbcG9ydF0gZ2V0dGVyLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtiYWNrbG9nXSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsaXN0ZW4KICAgKiBiYWNrbG9nIGZvciB0aGUgdW5kZXJseWluZyBPUyBsaXN0ZW4gc2V0dXAuIElmIFtiYWNrbG9nXSBoYXMgdGhlCiAgICogdmFsdWUgb2YgWzowOl0gKHRoZSBkZWZhdWx0KSBhIHJlYXNvbmFibGUgdmFsdWUgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLgogICAqCiAgICogSW5jb21pbmcgY2xpZW50IGNvbm5lY3Rpb25zIGFyZSBwcm9tb3RlZCB0byBzZWN1cmUgY29ubmVjdGlvbnMsIHVzaW5nCiAgICogdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBhbmQga2V5IHNldCBpbiBbY29udGV4dF0uCiAgICoKICAgKiBbYWRkcmVzc10gbXVzdCBiZSBnaXZlbiBhcyBhIG51bWVyaWMgYWRkcmVzcywgbm90IGEgaG9zdCBuYW1lLgogICAqCiAgICogVG8gcmVxdWVzdCBvciByZXF1aXJlIHRoYXQgY2xpZW50cyBhdXRoZW50aWNhdGUgYnkgcHJvdmlkaW5nIGFuIFNTTCAoVExTKQogICAqIGNsaWVudCBjZXJ0aWZpY2F0ZSwgc2V0IHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgW3JlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZV0KICAgKiBvciBbcmVxdWlyZUNsaWVudENlcnRpZmljYXRlXSB0byB0cnVlLiAgUmVxdWlyaW5nIGEgY2VydGlmaWNhdGUgaW1wbGllcwogICAqIHJlcXVlc3RpbmcgYSBjZXJ0aWZpY2F0ZSwgc28gc2V0dGluZyBib3RoIGlzIHJlZHVuZGFudC4KICAgKiBUbyBjaGVjayB3aGV0aGVyIGEgY2xpZW50IGNlcnRpZmljYXRlIHdhcyByZWNlaXZlZCwgY2hlY2sKICAgKiBTZWN1cmVTb2NrZXQucGVlckNlcnRpZmljYXRlIGFmdGVyIGNvbm5lY3RpbmcuICBJZiBubyBjZXJ0aWZpY2F0ZQogICAqIHdhcyByZWNlaXZlZCwgdGhlIHJlc3VsdCB3aWxsIGJlIG51bGwuCiAgICoKICAgKiBbc3VwcG9ydGVkUHJvdG9jb2xzXSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIHByb3RvY29scyAoaW4gZGVjcmVhc2luZwogICAqIG9yZGVyIG9mIHByZWZlcmVuY2UpIHRvIHVzZSBkdXJpbmcgdGhlIEFMUE4gcHJvdG9jb2wgbmVnb2dpYXRpb24gd2l0aAogICAqIGNsaWVudHMuICBFeGFtcGxlIHZhbHVlcyBhcmUgImh0dHAvMS4xIiBvciAiaDIiLiAgVGhlIHNlbGVjdGVkIHByb3RvY29sCiAgICogY2FuIGJlIG9idGFpbmVkIHZpYSBbU2VjdXJlU29ja2V0LnNlbGVjdGVkUHJvdG9jb2xdLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtzaGFyZWRdIHNwZWNpZmllcyB3aGV0aGVyIGFkZGl0aW9uYWwKICAgKiBTZWN1cmVTZXJ2ZXJTb2NrZXQgb2JqZWN0cyBjYW4gYmluZCB0byB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZiBgYWRkcmVzc2AsCiAgICogYHBvcnRgIGFuZCBgdjZPbmx5YC4gIElmIGBzaGFyZWRgIGlzIGB0cnVlYCBhbmQgbW9yZSBgU2VjdXJlU2VydmVyU29ja2V0YHMKICAgKiBmcm9tIHRoaXMgaXNvbGF0ZSBvciBvdGhlciBpc29sYXRlcyBhcmUgYm91bmQgdG8gdGhlIHBvcnQsIHRoZW4gdGhlCiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgd2lsbCBiZSBkaXN0cmlidXRlZCBhbW9uZyBhbGwgdGhlIGJvdW5kCiAgICogYFNlY3VyZVNlcnZlclNvY2tldGBzLiBDb25uZWN0aW9ucyBjYW4gYmUgZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZQogICAqIGlzb2xhdGVzIHRoaXMgd2F5LgogICAqLwogIHN0YXRpYyBGdXR1cmU8U2VjdXJlU2VydmVyU29ja2V0PiBiaW5kKAogICAgICBhZGRyZXNzLCBpbnQgcG9ydCwgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIHtpbnQgYmFja2xvZzogMCwKICAgICAgYm9vbCB2Nk9ubHk6IGZhbHNlLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29scywKICAgICAgYm9vbCBzaGFyZWQ6IGZhbHNlfSkgewogICAgcmV0dXJuIFJhd1NlY3VyZVNlcnZlclNvY2tldAogICAgICAgIC5iaW5kKGFkZHJlc3MsIHBvcnQsIGNvbnRleHQsCiAgICAgICAgICAgIGJhY2tsb2c6IGJhY2tsb2csCiAgICAgICAgICAgIHY2T25seTogdjZPbmx5LAogICAgICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICAgICAgICBzaGFyZWQ6IHNoYXJlZCkKICAgICAgICAudGhlbigoc2VydmVyU29ja2V0KSA9PiBuZXcgU2VjdXJlU2VydmVyU29ja2V0Ll8oc2VydmVyU29ja2V0KSk7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248U2VjdXJlU29ja2V0PiBsaXN0ZW4odm9pZCBvbkRhdGEoU2VjdXJlU29ja2V0IHNvY2tldCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX3NvY2tldC5tYXAoKHJhd1NvY2tldCkgPT4gbmV3IFNlY3VyZVNvY2tldC5fKHJhd1NvY2tldCkpLmxpc3RlbigKICAgICAgICBvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwKICAgICAgICBvbkRvbmU6IG9uRG9uZSwKICAgICAgICBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzID0+IF9zb2NrZXQuYWRkcmVzczsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzb2NrZXQuIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHNvY2tldAogICAqIGlzIGZ1bGx5IGNsb3NlZCBhbmQgaXMgbm8gbG9uZ2VyIGJvdW5kLgogICAqLwogIEZ1dHVyZTxTZWN1cmVTZXJ2ZXJTb2NrZXQ+IGNsb3NlKCkgPT4gX3NvY2tldC5jbG9zZSgpLnRoZW4oKF8pID0+IHRoaXMpOwoKICB2b2lkIHNldCBfb3duZXIob3duZXIpIHsKICAgIF9zb2NrZXQuX293bmVyID0gb3duZXI7CiAgfQp9CgovKioKICogVGhlIFJhd1NlY3VyZVNlcnZlclNvY2tldCBpcyBhIHNlcnZlciBzb2NrZXQsIHByb3ZpZGluZyBhIHN0cmVhbSBvZiBsb3ctbGV2ZWwKICogW1Jhd1NlY3VyZVNvY2tldF1zLgogKgogKiBTZWUgW1Jhd1NlY3VyZVNvY2tldF0gZm9yIG1vcmUgaW5mby4KICovCmNsYXNzIFJhd1NlY3VyZVNlcnZlclNvY2tldCBleHRlbmRzIFN0cmVhbTxSYXdTZWN1cmVTb2NrZXQ+IHsKICBmaW5hbCBSYXdTZXJ2ZXJTb2NrZXQgX3NvY2tldDsKICBTdHJlYW1Db250cm9sbGVyPFJhd1NlY3VyZVNvY2tldD4gX2NvbnRyb2xsZXI7CiAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldD4gX3N1YnNjcmlwdGlvbjsKICBmaW5hbCBTZWN1cml0eUNvbnRleHQgX2NvbnRleHQ7CiAgZmluYWwgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU7CiAgZmluYWwgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU7CiAgZmluYWwgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sczsKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKCiAgUmF3U2VjdXJlU2VydmVyU29ja2V0Ll8oCiAgICAgIHRoaXMuX3NvY2tldCwKICAgICAgdGhpcy5fY29udGV4dCwKICAgICAgdGhpcy5yZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIHRoaXMucmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICB0aGlzLnN1cHBvcnRlZFByb3RvY29scykgewogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxSYXdTZWN1cmVTb2NrZXQ+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlLAogICAgICAgIG9uUGF1c2U6IF9vblBhdXNlU3RhdGVDaGFuZ2UsCiAgICAgICAgb25SZXN1bWU6IF9vblBhdXNlU3RhdGVDaGFuZ2UsCiAgICAgICAgb25DYW5jZWw6IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgZm9yIGEgW1Jhd1NlY3VyZVNlcnZlclNvY2tldF0uIFdoZW4gdGhlIGZ1dHVyZQogICAqIGNvbXBsZXRlcyB0aGUgc2VydmVyIHNvY2tldCBpcyBib3VuZCB0byB0aGUgZ2l2ZW4gW2FkZHJlc3NdIGFuZAogICAqIFtwb3J0XSBhbmQgaGFzIHN0YXJ0ZWQgbGlzdGVuaW5nIG9uIGl0LgogICAqCiAgICogVGhlIFthZGRyZXNzXSBjYW4gZWl0aGVyIGJlIGEgW1N0cmluZ10gb3IgYW4KICAgKiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2FkZHJlc3NdIGlzIGEgW1N0cmluZ10sIFtiaW5kXSB3aWxsCiAgICogcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdXNlIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUKICAgKiBsaXN0LiBUbyBsaXN0ZW4gb24gdGhlIGxvb3BiYWNrIGFkYXB0ZXIsIHdoaWNoIHdpbGwgYWxsb3cgb25seQogICAqIGluY29taW5nIGNvbm5lY3Rpb25zIGZyb20gdGhlIGxvY2FsIGhvc3QsIHVzZSB0aGUgdmFsdWUKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NF0gb3IKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2Nl0uIFRvIGFsbG93IGZvciBpbmNvbWluZwogICAqIGNvbm5lY3Rpb24gZnJvbSB0aGUgbmV0d29yayB1c2UgZWl0aGVyIG9uZSBvZiB0aGUgdmFsdWVzCiAgICogW0ludGVybmV0QWRkcmVzcy5hbnlJUHY0XSBvciBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjZdIHRvCiAgICogYmluZCB0byBhbGwgaW50ZXJmYWNlcyBvciB0aGUgSVAgYWRkcmVzcyBvZiBhIHNwZWNpZmljIGludGVyZmFjZS4KICAgKgogICAqIElmIFtwb3J0XSBoYXMgdGhlIHZhbHVlIFs6MDpdIGFuIGVwaGVtZXJhbCBwb3J0IHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4gVGhlIGFjdHVhbCBwb3J0IHVzZWQgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUKICAgKiBbcG9ydF0gZ2V0dGVyLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtiYWNrbG9nXSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsaXN0ZW4KICAgKiBiYWNrbG9nIGZvciB0aGUgdW5kZXJseWluZyBPUyBsaXN0ZW4gc2V0dXAuIElmIFtiYWNrbG9nXSBoYXMgdGhlCiAgICogdmFsdWUgb2YgWzowOl0gKHRoZSBkZWZhdWx0KSBhIHJlYXNvbmFibGUgdmFsdWUgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLgogICAqCiAgICogSW5jb21pbmcgY2xpZW50IGNvbm5lY3Rpb25zIGFyZSBwcm9tb3RlZCB0byBzZWN1cmUgY29ubmVjdGlvbnMsCiAgICogdXNpbmcgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBhbmQga2V5IHNldCBpbiBbY29udGV4dF0uCiAgICoKICAgKiBbYWRkcmVzc10gbXVzdCBiZSBnaXZlbiBhcyBhIG51bWVyaWMgYWRkcmVzcywgbm90IGEgaG9zdCBuYW1lLgogICAqCiAgICogVG8gcmVxdWVzdCBvciByZXF1aXJlIHRoYXQgY2xpZW50cyBhdXRoZW50aWNhdGUgYnkgcHJvdmlkaW5nIGFuIFNTTCAoVExTKQogICAqIGNsaWVudCBjZXJ0aWZpY2F0ZSwgc2V0IHRoZSBvcHRpb25hbCBwYXJhbWV0ZXJzIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSBvcgogICAqIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSB0byB0cnVlLiAgUmVxdWlyZSBpbXBsaWVzIHJlcXVlc3QsIHNvIG9uZSBkb2Vzbid0CiAgICogbmVlZCB0byBzcGVjaWZ5IGJvdGguICBUbyBjaGVjayB3aGV0aGVyIGEgY2xpZW50IGNlcnRpZmljYXRlIHdhcyByZWNlaXZlZCwKICAgKiBjaGVjayBTZWN1cmVTb2NrZXQucGVlckNlcnRpZmljYXRlIGFmdGVyIGNvbm5lY3RpbmcuICBJZiBubyBjZXJ0aWZpY2F0ZQogICAqIHdhcyByZWNlaXZlZCwgdGhlIHJlc3VsdCB3aWxsIGJlIG51bGwuCiAgICoKICAgKiBbc3VwcG9ydGVkUHJvdG9jb2xzXSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIHByb3RvY29scyAoaW4gZGVjcmVhc2luZwogICAqIG9yZGVyIG9mIHByZWZlcmVuY2UpIHRvIHVzZSBkdXJpbmcgdGhlIEFMUE4gcHJvdG9jb2wgbmVnb3RpYXRpb24gd2l0aAogICAqIGNsaWVudHMuICBFeGFtcGxlIHZhbHVlcyBhcmUgImh0dHAvMS4xIiBvciAiaDIiLiAgVGhlIHNlbGVjdGVkIHByb3RvY29sCiAgICogY2FuIGJlIG9idGFpbmVkIHZpYSBbUmF3U2VjdXJlU29ja2V0LnNlbGVjdGVkUHJvdG9jb2xdLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtzaGFyZWRdIHNwZWNpZmllcyB3aGV0aGVyIGFkZGl0aW9uYWwKICAgKiBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQgb2JqZWN0cyBjYW4gYmluZCB0byB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZgogICAqIGBhZGRyZXNzYCwgYHBvcnRgIGFuZCBgdjZPbmx5YC4gIElmIGBzaGFyZWRgIGlzIGB0cnVlYCBhbmQgbW9yZQogICAqIGBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXRgcyBmcm9tIHRoaXMgaXNvbGF0ZSBvciBvdGhlciBpc29sYXRlcyBhcmUgYm91bmQgdG8KICAgKiB0aGUgcG9ydCwgdGhlbiB0aGUgaW5jb21pbmcgY29ubmVjdGlvbnMgd2lsbCBiZSBkaXN0cmlidXRlZCBhbW9uZyBhbGwgdGhlCiAgICogYm91bmQgYFJhd1NlY3VyZVNlcnZlclNvY2tldGBzLiBDb25uZWN0aW9ucyBjYW4gYmUgZGlzdHJpYnV0ZWQgb3ZlcgogICAqIG11bHRpcGxlIGlzb2xhdGVzIHRoaXMgd2F5LgogICAqLwogIHN0YXRpYyBGdXR1cmU8UmF3U2VjdXJlU2VydmVyU29ja2V0PiBiaW5kKAogICAgICBhZGRyZXNzLCBpbnQgcG9ydCwgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIHtpbnQgYmFja2xvZzogMCwKICAgICAgYm9vbCB2Nk9ubHk6IGZhbHNlLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29scywKICAgICAgYm9vbCBzaGFyZWQ6IGZhbHNlfSkgewogICAgcmV0dXJuIFJhd1NlcnZlclNvY2tldAogICAgICAgIC5iaW5kKGFkZHJlc3MsIHBvcnQsIGJhY2tsb2c6IGJhY2tsb2csIHY2T25seTogdjZPbmx5LCBzaGFyZWQ6IHNoYXJlZCkKICAgICAgICAudGhlbigoc2VydmVyU29ja2V0KSA9PiBuZXcgUmF3U2VjdXJlU2VydmVyU29ja2V0Ll8oCiAgICAgICAgICAgIHNlcnZlclNvY2tldCwKICAgICAgICAgICAgY29udGV4dCwKICAgICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29scykpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NlY3VyZVNvY2tldD4gbGlzdGVuKHZvaWQgb25EYXRhKFJhd1NlY3VyZVNvY2tldCBzKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCBwb3J0ID0+IF9zb2NrZXQucG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWRkcmVzcyB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc29ja2V0LiBUaGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aGVuIHRoZSBzb2NrZXQKICAgKiBpcyBmdWxseSBjbG9zZWQgYW5kIGlzIG5vIGxvbmdlciBib3VuZC4KICAgKi8KICBGdXR1cmU8UmF3U2VjdXJlU2VydmVyU29ja2V0PiBjbG9zZSgpIHsKICAgIF9jbG9zZWQgPSB0cnVlOwogICAgcmV0dXJuIF9zb2NrZXQuY2xvc2UoKS50aGVuKChfKSA9PiB0aGlzKTsKICB9CgogIHZvaWQgX29uRGF0YShSYXdTb2NrZXQgY29ubmVjdGlvbikgewogICAgdmFyIHJlbW90ZVBvcnQ7CiAgICB0cnkgewogICAgICByZW1vdGVQb3J0ID0gY29ubmVjdGlvbi5yZW1vdGVQb3J0OwogICAgfSBjYXRjaCAoZSkgewogICAgICAvLyBJZiBjb25uZWN0aW9uIGlzIGFscmVhZHkgY2xvc2VkLCByZW1vdGVQb3J0IHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgIC8vIERvIG5vdGhpbmcgLSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KICAgICAgcmV0dXJuOwogICAgfQogICAgX1Jhd1NlY3VyZVNvY2tldAogICAgICAgIC5jb25uZWN0KGNvbm5lY3Rpb24uYWRkcmVzcywgcmVtb3RlUG9ydCwKICAgICAgICAgICAgY29udGV4dDogX2NvbnRleHQsCiAgICAgICAgICAgIGlzX3NlcnZlcjogdHJ1ZSwKICAgICAgICAgICAgc29ja2V0OiBjb25uZWN0aW9uLAogICAgICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKQogICAgICAgIC50aGVuKChSYXdTZWN1cmVTb2NrZXQgc2VjdXJlQ29ubmVjdGlvbikgewogICAgICBpZiAoX2Nsb3NlZCkgewogICAgICAgIHNlY3VyZUNvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY29udHJvbGxlci5hZGQoc2VjdXJlQ29ubmVjdGlvbik7CiAgICAgIH0KICAgIH0pLmNhdGNoRXJyb3IoKGUsIHMpIHsKICAgICAgaWYgKCFfY2xvc2VkKSB7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSwgcyk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBfb25QYXVzZVN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmlzUGF1c2VkKSB7CiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICB9CiAgfQoKICB2b2lkIF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmhhc0xpc3RlbmVyKSB7CiAgICAgIF9zdWJzY3JpcHRpb24gPSBfc29ja2V0Lmxpc3Rlbihfb25EYXRhLAogICAgICAgICAgb25FcnJvcjogX2NvbnRyb2xsZXIuYWRkRXJyb3IsIG9uRG9uZTogX2NvbnRyb2xsZXIuY2xvc2UpOwogICAgfSBlbHNlIHsKICAgICAgY2xvc2UoKTsKICAgIH0KICB9CgogIHZvaWQgc2V0IF9vd25lcihvd25lcikgewogICAgKF9zb2NrZXQgYXMgZHluYW1pYykuX293bmVyID0gb3duZXI7CiAgfQp9CoElAE5OPAERAQRRDgMlBDgnASYBBkJFLQUyQEdEPSc7Pj9HBUdBFAVHRkcRBUs2BUQFT09NPT9HLAVKS006BUFPUElCSRgGKjIXGiwsJx0hJh4cQEA0HEkEAUw/TRAaGCcEAQYrBiABBi4GMgEGRi0GSwEbHAQCAQRRFwMoBD4hMS8iJycpGAEbFBUlJSE5FC4mJy8EAQZFRS0FMkBHRD0nOz4/RwVHQRQFR0ZHEQVFPAVEBU9RUFBNLAVKS009BUFHRU9PSSEGLTIXGiwsJx0bTz0aFSYmIgQBTT8tSQQBBisGIAEGLgYyAQZGLQYqFC4EAScUCioSSiwOBhUxHx0gQEA0MxUiDysIGxYkCAgEAR8gHQ0eBgQBJiMuRQ0PBgQBGykEAgEhZGFydDppby9zZWN1cmVfc2VydmVyX3NvY2tldC5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9zZWN1cmVfc29ja2V0LmRhcnTAAKw7Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBBIGhpZ2gtbGV2ZWwgY2xhc3MgZm9yIGNvbW11bmljYXRpbmcgc2VjdXJlbHkgb3ZlciBhIFRDUCBzb2NrZXQsIHVzaW5nCiAqIFRMUyBhbmQgU1NMLiBUaGUgW1NlY3VyZVNvY2tldF0gZXhwb3NlcyBib3RoIGEgW1N0cmVhbV0gYW5kIGFuCiAqIFtJT1NpbmtdIGludGVyZmFjZSwgbWFraW5nIGl0IGlkZWFsIGZvciB1c2luZyB0b2dldGhlciB3aXRoCiAqIG90aGVyIFtTdHJlYW1dcy4KICovCmFic3RyYWN0IGNsYXNzIFNlY3VyZVNvY2tldCBpbXBsZW1lbnRzIFNvY2tldCB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBTZWN1cmVTb2NrZXQuXyhSYXdTZWN1cmVTb2NrZXQgcmF3U29ja2V0KTsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBzZWN1cmUgY2xpZW50IHNvY2tldCBhbmQgY29ubmVjdHMgaXQgdG8gdGhlIGdpdmVuCiAgICogW2hvc3RdIG9uIHBvcnQgW3BvcnRdLiBUaGUgcmV0dXJuZWQgRnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCBhCiAgICogW1NlY3VyZVNvY2tldF0gdGhhdCBpcyBjb25uZWN0ZWQgYW5kIHJlYWR5IGZvciBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgY2VydGlmaWNhdGUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBpcyBjaGVja2VkCiAgICogdXNpbmcgdGhlIHRydXN0ZWQgY2VydGlmaWNhdGVzIHNldCBpbiB0aGUgU2VjdXJpdHlDb250ZXh0IG9iamVjdC4KICAgKiBUaGUgZGVmYXVsdCBTZWN1cml0eUNvbnRleHQgb2JqZWN0IGNvbnRhaW5zIGEgYnVpbHQtaW4gc2V0IG9mIHRydXN0ZWQKICAgKiByb290IGNlcnRpZmljYXRlcyBmb3Igd2VsbC1rbm93biBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcy4KICAgKgogICAqIFtvbkJhZENlcnRpZmljYXRlXSBpcyBhbiBvcHRpb25hbCBoYW5kbGVyIGZvciB1bnZlcmlmaWFibGUgY2VydGlmaWNhdGVzLgogICAqIFRoZSBoYW5kbGVyIHJlY2VpdmVzIHRoZSBbWDUwOUNlcnRpZmljYXRlXSwgYW5kIGNhbiBpbnNwZWN0IGl0IGFuZAogICAqIGRlY2lkZSAob3IgbGV0IHRoZSB1c2VyIGRlY2lkZSkgd2hldGhlciB0byBhY2NlcHQKICAgKiB0aGUgY29ubmVjdGlvbiBvciBub3QuICBUaGUgaGFuZGxlciBzaG91bGQgcmV0dXJuIHRydWUKICAgKiB0byBjb250aW51ZSB0aGUgW1NlY3VyZVNvY2tldF0gY29ubmVjdGlvbi4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbiB3aXRoIHRoZQogICAqIHNlcnZlci4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICoKICAgKiBUaGUgYXJndW1lbnQgW3RpbWVvdXRdIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBhbGxvd2VkIHRpbWUgdG8gd2FpdAogICAqIGZvciBhIGNvbm5lY3Rpb24gdG8gYmUgZXN0YWJsaXNoZWQuIElmIFt0aW1lb3V0XSBpcyBsb25nZXIgdGhhbiB0aGUgc3lzdGVtCiAgICogbGV2ZWwgdGltZW91dCBkdXJhdGlvbiwgYSB0aW1lb3V0IG1heSBvY2N1ciBzb29uZXIgdGhhbiBzcGVjaWZpZWQgaW4KICAgKiBbdGltZW91dF0uIE9uIHRpbWVvdXQsIGEgW1NvY2tldEV4Y2VwdGlvbl0gaXMgdGhyb3duIGFuZCBhbGwgb25nb2luZwogICAqIGNvbm5lY3Rpb24gYXR0ZW1wdHMgdG8gW2hvc3RdIGFyZSBjYW5jZWxsZWQuCgogICAqLwogIHN0YXRpYyBGdXR1cmU8U2VjdXJlU29ja2V0PiBjb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7U2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICBEdXJhdGlvbiB0aW1lb3V0fSkgewogICAgcmV0dXJuIFJhd1NlY3VyZVNvY2tldC5jb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICAgIG9uQmFkQ2VydGlmaWNhdGU6IG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICAgICAgICB0aW1lb3V0OiB0aW1lb3V0KQogICAgICAgIC50aGVuKChyYXdTb2NrZXQpID0+IG5ldyBTZWN1cmVTb2NrZXQuXyhyYXdTb2NrZXQpKTsKICB9CgogIC8vLyBMaWtlIFtjb25uZWN0XSwgYnV0IHJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyB3aXRoIGEKICAvLy8gW0Nvbm5lY3Rpb25UYXNrXSB0aGF0IGNhbiBiZSBjYW5jZWxsZWQgaWYgdGhlIFtTZWN1cmVTb2NrZXRdIGlzIG5vCiAgLy8vIGxvbmdlciBuZWVkZWQuCiAgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxTZWN1cmVTb2NrZXQ+PiBzdGFydENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBvbkJhZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSksCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHN9KSB7CiAgICByZXR1cm4gUmF3U2VjdXJlU29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgICAgICBvbkJhZENlcnRpZmljYXRlOiBvbkJhZENlcnRpZmljYXRlLAogICAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scykKICAgICAgICAudGhlbigocmF3U3RhdGUpIHsKICAgICAgRnV0dXJlPFNlY3VyZVNvY2tldD4gc29ja2V0ID0KICAgICAgICAgIHJhd1N0YXRlLnNvY2tldC50aGVuKChyYXdTb2NrZXQpID0+IG5ldyBTZWN1cmVTb2NrZXQuXyhyYXdTb2NrZXQpKTsKICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVGFzazxTZWN1cmVTb2NrZXQ+Ll8oCiAgICAgICAgICBzb2NrZXQ6IHNvY2tldCwgb25DYW5jZWw6IHJhd1N0YXRlLl9vbkNhbmNlbCk7CiAgICB9KTsKICB9CgogIC8qKgogICAqIFRha2VzIGFuIGFscmVhZHkgY29ubmVjdGVkIFtzb2NrZXRdIGFuZCBzdGFydHMgY2xpZW50IHNpZGUgVExTCiAgICogaGFuZHNoYWtlIHRvIG1ha2UgdGhlIGNvbW11bmljYXRpb24gc2VjdXJlLiBXaGVuIHRoZSByZXR1cm5lZAogICAqIGZ1dHVyZSBjb21wbGV0ZXMgdGhlIFtTZWN1cmVTb2NrZXRdIGhhcyBjb21wbGV0ZWQgdGhlIFRMUwogICAqIGhhbmRzaGFrZS4gVXNpbmcgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlCiAgICogY29ubmVjdGlvbiBpcyBwcmVwYXJlZCBmb3IgVExTIGhhbmRzaGFrZS4KICAgKgogICAqIElmIHRoZSBbc29ja2V0XSBhbHJlYWR5IGhhcyBhIHN1YnNjcmlwdGlvbiwgdGhpcyBzdWJzY3JpcHRpb24KICAgKiB3aWxsIG5vIGxvbmdlciByZWNlaXZlIGFuZCBldmVudHMuIEluIG1vc3QgY2FzZXMgY2FsbGluZwogICAqIGBwYXVzZWAgb24gdGhpcyBzdWJzY3JpcHRpb24gYmVmb3JlIHN0YXJ0aW5nIFRMUyBoYW5kc2hha2UgaXMKICAgKiB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCiAgICoKICAgKiBUaGUgZ2l2ZW4gW3NvY2tldF0gaXMgY2xvc2VkIGFuZCBtYXkgbm90IGJlIHVzZWQgYW55bW9yZS4KICAgKgogICAqIElmIHRoZSBbaG9zdF0gYXJndW1lbnQgaXMgcGFzc2VkIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaG9zdCBuYW1lCiAgICogZm9yIHRoZSBUTFMgaGFuZHNoYWtlLiBJZiBbaG9zdF0gaXMgbm90IHBhc3NlZCB0aGUgaG9zdCBuYW1lIGZyb20KICAgKiB0aGUgW3NvY2tldF0gd2lsbCBiZSB1c2VkLiBUaGUgW2hvc3RdIGNhbiBiZSBlaXRoZXIgYSBbU3RyaW5nXSBvcgogICAqIGFuIFtJbnRlcm5ldEFkZHJlc3NdLgogICAqCiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgX25vdF8gY2F1c2UgYSBETlMgaG9zdCBsb29rdXAuIElmIHRoZQogICAqIFtob3N0XSBwYXNzZWQgaXMgYSBbU3RyaW5nXSB0aGUgW0ludGVybmV0QWRkcmVzc10gZm9yIHRoZQogICAqIHJlc3VsdGluZyBbU2VjdXJlU29ja2V0XSB3aWxsIGhhdmUgdGhlIHBhc3NlZCBpbiBbaG9zdF0gYXMgaXRzCiAgICogaG9zdCB2YWx1ZSBhbmQgdGhlIGludGVybmV0IGFkZHJlc3Mgb2YgdGhlIGFscmVhZHkgY29ubmVjdGVkCiAgICogc29ja2V0IGFzIGl0cyBhZGRyZXNzIHZhbHVlLgogICAqCiAgICogU2VlIFtjb25uZWN0XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYXJndW1lbnRzLgogICAqCiAgICovCiAgc3RhdGljIEZ1dHVyZTxTZWN1cmVTb2NrZXQ+IHNlY3VyZShTb2NrZXQgc29ja2V0LAogICAgICB7aG9zdCwKICAgICAgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpfSkgewogICAgcmV0dXJuICgoc29ja2V0IGFzIGR5bmFtaWMgLypfU29ja2V0Ki8pLl9kZXRhY2hSYXcoKSBhcyBGdXR1cmUpCiAgICAgICAgLnRoZW48UmF3U2VjdXJlU29ja2V0PigoZGV0YWNoZWRSYXcpIHsKICAgICAgcmV0dXJuIFJhd1NlY3VyZVNvY2tldC5zZWN1cmUoZGV0YWNoZWRSYXdbMF0gYXMgUmF3U29ja2V0LAogICAgICAgICAgc3Vic2NyaXB0aW9uOiBkZXRhY2hlZFJhd1sxXSBhcyBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0RXZlbnQ+LAogICAgICAgICAgaG9zdDogaG9zdCwKICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICBvbkJhZENlcnRpZmljYXRlOiBvbkJhZENlcnRpZmljYXRlKTsKICAgIH0pLnRoZW48U2VjdXJlU29ja2V0PigocmF3KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3KSk7CiAgfQoKICAvKioKICAgKiBUYWtlcyBhbiBhbHJlYWR5IGNvbm5lY3RlZCBbc29ja2V0XSBhbmQgc3RhcnRzIHNlcnZlciBzaWRlIFRMUwogICAqIGhhbmRzaGFrZSB0byBtYWtlIHRoZSBjb21tdW5pY2F0aW9uIHNlY3VyZS4gV2hlbiB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgY29tcGxldGVzIHRoZSBbU2VjdXJlU29ja2V0XSBoYXMgY29tcGxldGVkIHRoZSBUTFMKICAgKiBoYW5kc2hha2UuIFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQogICAqIGNvbm5lY3Rpb24gaXMgZ29pbmcgdG8gc3RhcnQgdGhlIFRMUyBoYW5kc2hha2UuCiAgICoKICAgKiBJZiB0aGUgW3NvY2tldF0gYWxyZWFkeSBoYXMgYSBzdWJzY3JpcHRpb24sIHRoaXMgc3Vic2NyaXB0aW9uCiAgICogd2lsbCBubyBsb25nZXIgcmVjZWl2ZSBhbmQgZXZlbnRzLiBJbiBtb3N0IGNhc2VzIGNhbGxpbmcKICAgKiBbOnBhdXNlOl0gb24gdGhpcyBzdWJzY3JpcHRpb24gYmVmb3JlIHN0YXJ0aW5nIFRMUyBoYW5kc2hha2UgaXMKICAgKiB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCiAgICoKICAgKiBJZiBzb21lIG9mIHRoZSBkYXRhIG9mIHRoZSBUTFMgaGFuZHNoYWtlIGhhcyBhbHJlYWR5IGJlZW4gcmVhZAogICAqIGZyb20gdGhlIHNvY2tldCB0aGlzIGRhdGEgY2FuIGJlIHBhc3NlZCBpbiB0aGUgW2J1ZmZlcmVkRGF0YV0KICAgKiBwYXJhbWV0ZXIuIFRoaXMgZGF0YSB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IG90aGVyIGRhdGEKICAgKiBhdmFpbGFibGUgb24gdGhlIHNvY2tldC4KICAgKgogICAqIFNlZSBbU2VjdXJlU2VydmVyU29ja2V0LmJpbmRdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQogICAqIGFyZ3VtZW50cy4KICAgKgogICAqLwogIHN0YXRpYyBGdXR1cmU8U2VjdXJlU29ja2V0PiBzZWN1cmVTZXJ2ZXIoCiAgICAgIFNvY2tldCBzb2NrZXQsIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICB7TGlzdDxpbnQ+IGJ1ZmZlcmVkRGF0YSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHN9KSB7CiAgICByZXR1cm4gKChzb2NrZXQgYXMgZHluYW1pYyAvKl9Tb2NrZXQqLykuX2RldGFjaFJhdygpIGFzIEZ1dHVyZSkKICAgICAgICAudGhlbjxSYXdTZWN1cmVTb2NrZXQ+KChkZXRhY2hlZFJhdykgewogICAgICByZXR1cm4gUmF3U2VjdXJlU29ja2V0LnNlY3VyZVNlcnZlcihkZXRhY2hlZFJhd1swXSBhcyBSYXdTb2NrZXQsIGNvbnRleHQsCiAgICAgICAgICBzdWJzY3JpcHRpb246IGRldGFjaGVkUmF3WzFdIGFzIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4sCiAgICAgICAgICBidWZmZXJlZERhdGE6IGJ1ZmZlcmVkRGF0YSwKICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scyk7CiAgICB9KS50aGVuPFNlY3VyZVNvY2tldD4oKHJhdykgPT4gbmV3IFNlY3VyZVNvY2tldC5fKHJhdykpOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBwZWVyIGNlcnRpZmljYXRlIGZvciBhIGNvbm5lY3RlZCBTZWN1cmVTb2NrZXQuICBJZiB0aGlzCiAgICogU2VjdXJlU29ja2V0IGlzIHRoZSBzZXJ2ZXIgZW5kIG9mIGEgc2VjdXJlIHNvY2tldCBjb25uZWN0aW9uLAogICAqIFtwZWVyQ2VydGlmaWNhdGVdIHdpbGwgcmV0dXJuIHRoZSBjbGllbnQgY2VydGlmaWNhdGUsIG9yIG51bGwsIGlmIG5vCiAgICogY2xpZW50IGNlcnRpZmljYXRlIHdhcyByZWNlaXZlZC4gIElmIGl0IGlzIHRoZSBjbGllbnQgZW5kLAogICAqIFtwZWVyQ2VydGlmaWNhdGVdIHdpbGwgcmV0dXJuIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4KICAgKi8KICBYNTA5Q2VydGlmaWNhdGUgZ2V0IHBlZXJDZXJ0aWZpY2F0ZTsKCiAgLyoqCiAgICogVGhlIHByb3RvY29sIHdoaWNoIHdhcyBzZWxlY3RlZCBkdXJpbmcgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbi4KICAgKgogICAqIFJldHVybnMgbnVsbCBpZiBvbmUgb2YgdGhlIHBlZXJzIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgQUxQTiwgZGlkIG5vdAogICAqIHNwZWNpZnkgYSBsaXN0IG9mIHN1cHBvcnRlZCBBTFBOIHByb3RvY29scyBvciB0aGVyZSB3YXMgbm8gY29tbW9uCiAgICogcHJvdG9jb2wgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlci4KICAgKi8KICBTdHJpbmcgZ2V0IHNlbGVjdGVkUHJvdG9jb2w7CgogIC8qKgogICAqIFJlbmVnb3RpYXRlIGFuIGV4aXN0aW5nIHNlY3VyZSBjb25uZWN0aW9uLCByZW5ld2luZyB0aGUgc2Vzc2lvbiBrZXlzCiAgICogYW5kIHBvc3NpYmx5IGNoYW5naW5nIHRoZSBjb25uZWN0aW9uIHByb3BlcnRpZXMuCiAgICoKICAgKiBUaGlzIHJlcGVhdHMgdGhlIFNTTCBvciBUTFMgaGFuZHNoYWtlLCB3aXRoIG9wdGlvbnMgdGhhdCBhbGxvdyBjbGVhcmluZwogICAqIHRoZSBzZXNzaW9uIGNhY2hlIGFuZCByZXF1ZXN0aW5nIGEgY2xpZW50IGNlcnRpZmljYXRlLgogICAqLwogIHZvaWQgcmVuZWdvdGlhdGUoCiAgICAgIHtib29sIHVzZVNlc3Npb25DYWNoZTogdHJ1ZSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2V9KTsKfQoKLyoqCiAqIFJhd1NlY3VyZVNvY2tldCBwcm92aWRlcyBhIHNlY3VyZSAoU1NMIG9yIFRMUykgbmV0d29yayBjb25uZWN0aW9uLgogKiBDbGllbnQgY29ubmVjdGlvbnMgdG8gYSBzZXJ2ZXIgYXJlIHByb3ZpZGVkIGJ5IGNhbGxpbmcKICogUmF3U2VjdXJlU29ja2V0LmNvbm5lY3QuICBBIHNlY3VyZSBzZXJ2ZXIsIGNyZWF0ZWQgd2l0aAogKiBbUmF3U2VjdXJlU2VydmVyU29ja2V0XSwgYWxzbyByZXR1cm5zIFJhd1NlY3VyZVNvY2tldCBvYmplY3RzIHJlcHJlc2VudGluZwogKiB0aGUgc2VydmVyIGVuZCBvZiBhIHNlY3VyZSBjb25uZWN0aW9uLgogKiBUaGUgY2VydGlmaWNhdGUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBpcyBjaGVja2VkCiAqIHVzaW5nIHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlcyBzZXQgaW4gdGhlIFNlY3VyaXR5Q29udGV4dCBvYmplY3QuCiAqIFRoZSBkZWZhdWx0IFtTZWN1cml0eUNvbnRleHRdIG9iamVjdCBjb250YWlucyBhIGJ1aWx0LWluIHNldCBvZiB0cnVzdGVkCiAqIHJvb3QgY2VydGlmaWNhdGVzIGZvciB3ZWxsLWtub3duIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzLgogKi8KYWJzdHJhY3QgY2xhc3MgUmF3U2VjdXJlU29ja2V0IGltcGxlbWVudHMgUmF3U29ja2V0IHsKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHNlY3VyZSBjbGllbnQgc29ja2V0IGFuZCBjb25uZWN0IGl0IHRvIHRoZSBnaXZlbgogICAqIGhvc3Qgb24gdGhlIGdpdmVuIHBvcnQuIFRoZSByZXR1cm5lZCBbRnV0dXJlXSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUKICAgKiBSYXdTZWN1cmVTb2NrZXQgd2hlbiBpdCBpcyBjb25uZWN0ZWQgYW5kIHJlYWR5IGZvciBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgY2VydGlmaWNhdGUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBpcyBjaGVja2VkIHVzaW5nIHRoZSB0cnVzdGVkCiAgICogY2VydGlmaWNhdGVzIHNldCBpbiB0aGUgU2VjdXJpdHlDb250ZXh0IG9iamVjdCBJZiBhIGNlcnRpZmljYXRlIGFuZCBrZXkgYXJlCiAgICogc2V0IG9uIHRoZSBjbGllbnQsIHVzaW5nIFtTZWN1cml0eUNvbnRleHQudXNlQ2VydGlmaWNhdGVDaGFpbl0gYW5kCiAgICogW1NlY3VyaXR5Q29udGV4dC51c2VQcml2YXRlS2V5XSwgYW5kIHRoZSBzZXJ2ZXIgYXNrcyBmb3IgYSBjbGllbnQKICAgKiBjZXJ0aWZpY2F0ZSwgdGhlbiB0aGF0IGNsaWVudCBjZXJ0aWZpY2F0ZSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuCiAgICoKICAgKiBbb25CYWRDZXJ0aWZpY2F0ZV0gaXMgYW4gb3B0aW9uYWwgaGFuZGxlciBmb3IgdW52ZXJpZmlhYmxlIGNlcnRpZmljYXRlcy4KICAgKiBUaGUgaGFuZGxlciByZWNlaXZlcyB0aGUgW1g1MDlDZXJ0aWZpY2F0ZV0sIGFuZCBjYW4gaW5zcGVjdCBpdCBhbmQKICAgKiBkZWNpZGUgKG9yIGxldCB0aGUgdXNlciBkZWNpZGUpIHdoZXRoZXIgdG8gYWNjZXB0CiAgICogdGhlIGNvbm5lY3Rpb24gb3Igbm90LiAgVGhlIGhhbmRsZXIgc2hvdWxkIHJldHVybiB0cnVlCiAgICogdG8gY29udGludWUgdGhlIFtSYXdTZWN1cmVTb2NrZXRdIGNvbm5lY3Rpb24uCiAgICoKICAgKiBbc3VwcG9ydGVkUHJvdG9jb2xzXSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIHByb3RvY29scyAoaW4gZGVjcmVhc2luZwogICAqIG9yZGVyIG9mIHByZWZlcmVuY2UpIHRvIHVzZSBkdXJpbmcgdGhlIEFMUE4gcHJvdG9jb2wgbmVnb3RpYXRpb24gd2l0aCB0aGUKICAgKiBzZXJ2ZXIuICBFeGFtcGxlIHZhbHVlcyBhcmUgImh0dHAvMS4xIiBvciAiaDIiLiAgVGhlIHNlbGVjdGVkIHByb3RvY29sCiAgICogY2FuIGJlIG9idGFpbmVkIHZpYSBbUmF3U2VjdXJlU29ja2V0LnNlbGVjdGVkUHJvdG9jb2xdLgogICAqLwogIHN0YXRpYyBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBjb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7U2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICBEdXJhdGlvbiB0aW1lb3V0fSkgewogICAgX1Jhd1NlY3VyZVNvY2tldC5fdmVyaWZ5RmllbGRzKAogICAgICAgIGhvc3QsIHBvcnQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIG9uQmFkQ2VydGlmaWNhdGUpOwogICAgcmV0dXJuIFJhd1NvY2tldC5jb25uZWN0KGhvc3QsIHBvcnQsIHRpbWVvdXQ6IHRpbWVvdXQpLnRoZW4oKHNvY2tldCkgewogICAgICByZXR1cm4gc2VjdXJlKHNvY2tldCwKICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICBvbkJhZENlcnRpZmljYXRlOiBvbkJhZENlcnRpZmljYXRlLAogICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpOwogICAgfSk7CiAgfQoKICAvLy8gTGlrZSBbY29ubmVjdF0sIGJ1dCByZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgLy8vIFtDb25uZWN0aW9uVGFza10gdGhhdCBjYW4gYmUgY2FuY2VsbGVkIGlmIHRoZSBbUmF3U2VjdXJlU29ja2V0XSBpcyBubwogIC8vLyBsb25nZXIgbmVlZGVkLgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8UmF3U2VjdXJlU29ja2V0Pj4gc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7U2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzfSkgewogICAgcmV0dXJuIFJhd1NvY2tldC5zdGFydENvbm5lY3QoaG9zdCwgcG9ydCkKICAgICAgICAudGhlbigoQ29ubmVjdGlvblRhc2s8UmF3U29ja2V0PiByYXdTdGF0ZSkgewogICAgICBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBzb2NrZXQgPSByYXdTdGF0ZS5zb2NrZXQudGhlbigocmF3U29ja2V0KSB7CiAgICAgICAgcmV0dXJuIHNlY3VyZShyYXdTb2NrZXQsCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICAgIG9uQmFkQ2VydGlmaWNhdGU6IG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRhc2s8UmF3U2VjdXJlU29ja2V0Pi5fKAogICAgICAgICAgc29ja2V0OiBzb2NrZXQsIG9uQ2FuY2VsOiByYXdTdGF0ZS5fb25DYW5jZWwpOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBUYWtlcyBhbiBhbHJlYWR5IGNvbm5lY3RlZCBbc29ja2V0XSBhbmQgc3RhcnRzIGNsaWVudCBzaWRlIFRMUwogICAqIGhhbmRzaGFrZSB0byBtYWtlIHRoZSBjb21tdW5pY2F0aW9uIHNlY3VyZS4gV2hlbiB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgY29tcGxldGVzIHRoZSBbUmF3U2VjdXJlU29ja2V0XSBoYXMgY29tcGxldGVkIHRoZSBUTFMKICAgKiBoYW5kc2hha2UuIFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQogICAqIGNvbm5lY3Rpb24gaXMgcHJlcGFyZWQgZm9yIFRMUyBoYW5kc2hha2UuCiAgICoKICAgKiBJZiB0aGUgW3NvY2tldF0gYWxyZWFkeSBoYXMgYSBzdWJzY3JpcHRpb24sIHBhc3MgdGhlIGV4aXN0aW5nCiAgICogc3Vic2NyaXB0aW9uIGluIHRoZSBbc3Vic2NyaXB0aW9uXSBwYXJhbWV0ZXIuIFRoZSBbc2VjdXJlXQogICAqIG9wZXJhdGlvbiB3aWxsIHRha2Ugb3ZlciB0aGUgc3Vic2NyaXB0aW9uIGJ5IHJlcGxhY2luZyB0aGUKICAgKiBoYW5kbGVycyB3aXRoIGl0IG93biBzZWN1cmUgcHJvY2Vzc2luZy4gVGhlIGNhbGxlciBtdXN0IG5vdCB0b3VjaAogICAqIHRoaXMgc3Vic2NyaXB0aW9uIGFueW1vcmUuIFBhc3NpbmcgYSBwYXVzZWQgc3Vic2NyaXB0aW9uIGlzIGFuCiAgICogZXJyb3IuCiAgICoKICAgKiBJZiB0aGUgW2hvc3RdIGFyZ3VtZW50IGlzIHBhc3NlZCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGhvc3QgbmFtZQogICAqIGZvciB0aGUgVExTIGhhbmRzaGFrZS4gSWYgW2hvc3RdIGlzIG5vdCBwYXNzZWQgdGhlIGhvc3QgbmFtZSBmcm9tCiAgICogdGhlIFtzb2NrZXRdIHdpbGwgYmUgdXNlZC4gVGhlIFtob3N0XSBjYW4gYmUgZWl0aGVyIGEgW1N0cmluZ10gb3IKICAgKiBhbiBbSW50ZXJuZXRBZGRyZXNzXS4KICAgKgogICAqIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIF9ub3RfIGNhdXNlIGEgRE5TIGhvc3QgbG9va3VwLiBJZiB0aGUKICAgKiBbaG9zdF0gcGFzc2VkIGlzIGEgW1N0cmluZ10gdGhlIFtJbnRlcm5ldEFkZHJlc3NdIGZvciB0aGUKICAgKiByZXN1bHRpbmcgW1NlY3VyZVNvY2tldF0gd2lsbCBoYXZlIHRoaXMgcGFzc2VkIGluIFtob3N0XSBhcyBpdHMKICAgKiBob3N0IHZhbHVlIGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyBvZiB0aGUgYWxyZWFkeSBjb25uZWN0ZWQKICAgKiBzb2NrZXQgYXMgaXRzIGFkZHJlc3MgdmFsdWUuCiAgICoKICAgKiBTZWUgW2Nvbm5lY3RdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCiAgICoKICAgKi8KICBzdGF0aWMgRnV0dXJlPFJhd1NlY3VyZVNvY2tldD4gc2VjdXJlKFJhd1NvY2tldCBzb2NrZXQsCiAgICAgIHtTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0RXZlbnQ+IHN1YnNjcmlwdGlvbiwKICAgICAgaG9zdCwKICAgICAgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzfSkgewogICAgc29ja2V0LnJlYWRFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICBzb2NrZXQud3JpdGVFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICByZXR1cm4gX1Jhd1NlY3VyZVNvY2tldC5jb25uZWN0KAogICAgICAgIGhvc3QgIT0gbnVsbCA/IGhvc3QgOiBzb2NrZXQuYWRkcmVzcy5ob3N0LCBzb2NrZXQucG9ydCwKICAgICAgICBpc19zZXJ2ZXI6IGZhbHNlLAogICAgICAgIHNvY2tldDogc29ja2V0LAogICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgb25CYWRDZXJ0aWZpY2F0ZTogb25CYWRDZXJ0aWZpY2F0ZSwKICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scyk7CiAgfQoKICAvKioKICAgKiBUYWtlcyBhbiBhbHJlYWR5IGNvbm5lY3RlZCBbc29ja2V0XSBhbmQgc3RhcnRzIHNlcnZlciBzaWRlIFRMUwogICAqIGhhbmRzaGFrZSB0byBtYWtlIHRoZSBjb21tdW5pY2F0aW9uIHNlY3VyZS4gV2hlbiB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgY29tcGxldGVzIHRoZSBbUmF3U2VjdXJlU29ja2V0XSBoYXMgY29tcGxldGVkIHRoZSBUTFMKICAgKiBoYW5kc2hha2UuIFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQogICAqIGNvbm5lY3Rpb24gaXMgZ29pbmcgdG8gc3RhcnQgdGhlIFRMUyBoYW5kc2hha2UuCiAgICoKICAgKiBJZiB0aGUgW3NvY2tldF0gYWxyZWFkeSBoYXMgYSBzdWJzY3JpcHRpb24sIHBhc3MgdGhlIGV4aXN0aW5nCiAgICogc3Vic2NyaXB0aW9uIGluIHRoZSBbc3Vic2NyaXB0aW9uXSBwYXJhbWV0ZXIuIFRoZSBbc2VjdXJlU2VydmVyXQogICAqIG9wZXJhdGlvbiB3aWxsIHRha2Ugb3ZlciB0aGUgc3Vic2NyaXB0aW9uIGJ5IHJlcGxhY2luZyB0aGUKICAgKiBoYW5kbGVycyB3aXRoIGl0IG93biBzZWN1cmUgcHJvY2Vzc2luZy4gVGhlIGNhbGxlciBtdXN0IG5vdCB0b3VjaAogICAqIHRoaXMgc3Vic2NyaXB0aW9uIGFueW1vcmUuIFBhc3NpbmcgYSBwYXVzZWQgc3Vic2NyaXB0aW9uIGlzIGFuCiAgICogZXJyb3IuCiAgICoKICAgKiBJZiBzb21lIG9mIHRoZSBkYXRhIG9mIHRoZSBUTFMgaGFuZHNoYWtlIGhhcyBhbHJlYWR5IGJlZW4gcmVhZAogICAqIGZyb20gdGhlIHNvY2tldCB0aGlzIGRhdGEgY2FuIGJlIHBhc3NlZCBpbiB0aGUgW2J1ZmZlcmVkRGF0YV0KICAgKiBwYXJhbWV0ZXIuIFRoaXMgZGF0YSB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IG90aGVyIGRhdGEKICAgKiBhdmFpbGFibGUgb24gdGhlIHNvY2tldC4KICAgKgogICAqIFNlZSBbUmF3U2VjdXJlU2VydmVyU29ja2V0LmJpbmRdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQogICAqIGFyZ3VtZW50cy4KICAgKgogICAqLwogIHN0YXRpYyBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBzZWN1cmVTZXJ2ZXIoCiAgICAgIFJhd1NvY2tldCBzb2NrZXQsIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICB7U3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBzdWJzY3JpcHRpb24sCiAgICAgIExpc3Q8aW50PiBidWZmZXJlZERhdGEsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzfSkgewogICAgc29ja2V0LnJlYWRFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICBzb2NrZXQud3JpdGVFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICByZXR1cm4gX1Jhd1NlY3VyZVNvY2tldC5jb25uZWN0KHNvY2tldC5hZGRyZXNzLCBzb2NrZXQucmVtb3RlUG9ydCwKICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgIGlzX3NlcnZlcjogdHJ1ZSwKICAgICAgICBzb2NrZXQ6IHNvY2tldCwKICAgICAgICBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbiwKICAgICAgICBidWZmZXJlZERhdGE6IGJ1ZmZlcmVkRGF0YSwKICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scyk7CiAgfQoKICAvKioKICAgKiBSZW5lZ290aWF0ZSBhbiBleGlzdGluZyBzZWN1cmUgY29ubmVjdGlvbiwgcmVuZXdpbmcgdGhlIHNlc3Npb24ga2V5cwogICAqIGFuZCBwb3NzaWJseSBjaGFuZ2luZyB0aGUgY29ubmVjdGlvbiBwcm9wZXJ0aWVzLgogICAqCiAgICogVGhpcyByZXBlYXRzIHRoZSBTU0wgb3IgVExTIGhhbmRzaGFrZSwgd2l0aCBvcHRpb25zIHRoYXQgYWxsb3cgY2xlYXJpbmcKICAgKiB0aGUgc2Vzc2lvbiBjYWNoZSBhbmQgcmVxdWVzdGluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZS4KICAgKi8KICB2b2lkIHJlbmVnb3RpYXRlKAogICAgICB7Ym9vbCB1c2VTZXNzaW9uQ2FjaGU6IHRydWUsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlfSk7CgogIC8qKgogICAqIEdldCB0aGUgcGVlciBjZXJ0aWZpY2F0ZSBmb3IgYSBjb25uZWN0ZWQgUmF3U2VjdXJlU29ja2V0LiAgSWYgdGhpcwogICAqIFJhd1NlY3VyZVNvY2tldCBpcyB0aGUgc2VydmVyIGVuZCBvZiBhIHNlY3VyZSBzb2NrZXQgY29ubmVjdGlvbiwKICAgKiBbcGVlckNlcnRpZmljYXRlXSB3aWxsIHJldHVybiB0aGUgY2xpZW50IGNlcnRpZmljYXRlLCBvciBudWxsLCBpZiBubwogICAqIGNsaWVudCBjZXJ0aWZpY2F0ZSB3YXMgcmVjZWl2ZWQuICBJZiBpdCBpcyB0aGUgY2xpZW50IGVuZCwKICAgKiBbcGVlckNlcnRpZmljYXRlXSB3aWxsIHJldHVybiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuCiAgICovCiAgWDUwOUNlcnRpZmljYXRlIGdldCBwZWVyQ2VydGlmaWNhdGU7CgogIC8qKgogICAqIFRoZSBwcm90b2NvbCB3aGljaCB3YXMgc2VsZWN0ZWQgZHVyaW5nIHByb3RvY29sIG5lZ290aWF0aW9uLgogICAqCiAgICogUmV0dXJucyBudWxsIGlmIG9uZSBvZiB0aGUgcGVlcnMgZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBBTFBOLCBkaWQgbm90CiAgICogc3BlY2lmeSBhIGxpc3Qgb2Ygc3VwcG9ydGVkIEFMUE4gcHJvdG9jb2xzIG9yIHRoZXJlIHdhcyBubyBjb21tb24KICAgKiBwcm90b2NvbCBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyLgogICAqLwogIFN0cmluZyBnZXQgc2VsZWN0ZWRQcm90b2NvbDsKfQoKLyoqCiAqIFg1MDlDZXJ0aWZpY2F0ZSByZXByZXNlbnRzIGFuIFNTTCBjZXJ0aWZpY2F0ZSwgd2l0aCBhY2Nlc3NvcnMgdG8KICogZ2V0IHRoZSBmaWVsZHMgb2YgdGhlIGNlcnRpZmljYXRlLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQphYnN0cmFjdCBjbGFzcyBYNTA5Q2VydGlmaWNhdGUgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBleHRlcm5hbCBmYWN0b3J5IFg1MDlDZXJ0aWZpY2F0ZS5fKCk7CgogIC8vLyBUaGUgREVSIGVuY29kZWQgYnl0ZXMgb2YgdGhlIGNlcnRpZmljYXRlLgogIFVpbnQ4TGlzdCBnZXQgZGVyOwoKICAvLy8gVGhlIFBFTSBlbmNvZGVkIFN0cmluZyBvZiB0aGUgY2VydGlmaWNhdGUuCiAgU3RyaW5nIGdldCBwZW07CgogIC8vLyBUaGUgU0hBMSBoYXNoIG9mIHRoZSBjZXJ0aWZpY2F0ZS4KICBVaW50OExpc3QgZ2V0IHNoYTE7CgogIFN0cmluZyBnZXQgc3ViamVjdDsKICBTdHJpbmcgZ2V0IGlzc3VlcjsKICBEYXRlVGltZSBnZXQgc3RhcnRWYWxpZGl0eTsKICBEYXRlVGltZSBnZXQgZW5kVmFsaWRpdHk7Cn0KCmNsYXNzIF9GaWx0ZXJTdGF0dXMgewogIGJvb2wgcHJvZ3Jlc3MgPSBmYWxzZTsgLy8gVGhlIGZpbHRlciByZWFkIG9yIHdyb3RlIGRhdGEgdG8gdGhlIGJ1ZmZlcnMuCiAgYm9vbCByZWFkRW1wdHkgPSB0cnVlOyAvLyBUaGUgcmVhZCBidWZmZXJzIGFuZCBkZWNyeXB0aW9uIGZpbHRlciBhcmUgZW1wdHkuCiAgYm9vbCB3cml0ZUVtcHR5ID0gdHJ1ZTsgLy8gVGhlIHdyaXRlIGJ1ZmZlcnMgYW5kIGVuY3J5cHRpb24gZmlsdGVyIGFyZSBlbXB0eS4KICAvLyBUaGVzZSBhcmUgc2V0IGlmIGEgYnVmZmVyIGNoYW5nZXMgc3RhdGUgZnJvbSBlbXB0eSBvciBmdWxsLgogIGJvb2wgcmVhZFBsYWludGV4dE5vTG9uZ2VyRW1wdHkgPSBmYWxzZTsKICBib29sIHdyaXRlUGxhaW50ZXh0Tm9Mb25nZXJGdWxsID0gZmFsc2U7CiAgYm9vbCByZWFkRW5jcnlwdGVkTm9Mb25nZXJGdWxsID0gZmFsc2U7CiAgYm9vbCB3cml0ZUVuY3J5cHRlZE5vTG9uZ2VyRW1wdHkgPSBmYWxzZTsKCiAgX0ZpbHRlclN0YXR1cygpOwp9CgpjbGFzcyBfUmF3U2VjdXJlU29ja2V0IGV4dGVuZHMgU3RyZWFtPFJhd1NvY2tldEV2ZW50PgogICAgaW1wbGVtZW50cyBSYXdTZWN1cmVTb2NrZXQgewogIC8vIFN0YXR1cyBzdGF0ZXMKICBzdGF0aWMgY29uc3QgaW50IGhhbmRzaGFrZVN0YXR1cyA9IDIwMTsKICBzdGF0aWMgY29uc3QgaW50IGNvbm5lY3RlZFN0YXR1cyA9IDIwMjsKICBzdGF0aWMgY29uc3QgaW50IGNsb3NlZFN0YXR1cyA9IDIwMzsKCiAgLy8gQnVmZmVyIGlkZW50aWZpZXJzLgogIC8vIFRoZXNlIG11c3QgYWdyZWUgd2l0aCB0aG9zZSBpbiB0aGUgbmF0aXZlIEMrKyBpbXBsZW1lbnRhdGlvbi4KICBzdGF0aWMgY29uc3QgaW50IHJlYWRQbGFpbnRleHRJZCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCB3cml0ZVBsYWludGV4dElkID0gMTsKICBzdGF0aWMgY29uc3QgaW50IHJlYWRFbmNyeXB0ZWRJZCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCB3cml0ZUVuY3J5cHRlZElkID0gMzsKICBzdGF0aWMgY29uc3QgaW50IGJ1ZmZlckNvdW50ID0gNDsKCiAgLy8gSXMgYSBidWZmZXIgaWRlbnRpZmllciBmb3IgYW4gZW5jcnlwdGVkIGJ1ZmZlcj8KICBzdGF0aWMgYm9vbCBfaXNCdWZmZXJFbmNyeXB0ZWQoaW50IGlkZW50aWZpZXIpID0+CiAgICAgIGlkZW50aWZpZXIgPj0gcmVhZEVuY3J5cHRlZElkOwoKICBSYXdTb2NrZXQgX3NvY2tldDsKICBmaW5hbCBDb21wbGV0ZXI8X1Jhd1NlY3VyZVNvY2tldD4gX2hhbmRzaGFrZUNvbXBsZXRlID0KICAgICAgbmV3IENvbXBsZXRlcjxfUmF3U2VjdXJlU29ja2V0PigpOwogIFN0cmVhbUNvbnRyb2xsZXI8UmF3U29ja2V0RXZlbnQ+IF9jb250cm9sbGVyOwogIFN0cmVhbTxSYXdTb2NrZXRFdmVudD4gX3N0cmVhbTsKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0RXZlbnQ+IF9zb2NrZXRTdWJzY3JpcHRpb247CiAgTGlzdDxpbnQ+IF9idWZmZXJlZERhdGE7CiAgaW50IF9idWZmZXJlZERhdGFJbmRleCA9IDA7CiAgZmluYWwgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3M7CiAgZmluYWwgYm9vbCBpc19zZXJ2ZXI7CiAgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQ7CiAgZmluYWwgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU7CiAgZmluYWwgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU7CiAgZmluYWwgRnVuY3Rpb24gb25CYWRDZXJ0aWZpY2F0ZTsKCiAgdmFyIF9zdGF0dXMgPSBoYW5kc2hha2VTdGF0dXM7CiAgYm9vbCBfd3JpdGVFdmVudHNFbmFibGVkID0gdHJ1ZTsKICBib29sIF9yZWFkRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgaW50IF9wYXVzZUNvdW50ID0gMDsKICBib29sIF9wZW5kaW5nUmVhZEV2ZW50ID0gZmFsc2U7CiAgYm9vbCBfc29ja2V0Q2xvc2VkUmVhZCA9IGZhbHNlOyAvLyBUaGUgbmV0d29yayBzb2NrZXQgaXMgY2xvc2VkIGZvciByZWFkaW5nLgogIGJvb2wgX3NvY2tldENsb3NlZFdyaXRlID0gZmFsc2U7IC8vIFRoZSBuZXR3b3JrIHNvY2tldCBpcyBjbG9zZWQgZm9yIHdyaXRpbmcuCiAgYm9vbCBfY2xvc2VkUmVhZCA9IGZhbHNlOyAvLyBUaGUgc2VjdXJlIHNvY2tldCBoYXMgZmlyZWQgYW4gb25DbG9zZWQgZXZlbnQuCiAgYm9vbCBfY2xvc2VkV3JpdGUgPSBmYWxzZTsgLy8gVGhlIHNlY3VyZSBzb2NrZXQgaGFzIGJlZW4gY2xvc2VkIGZvciB3cml0aW5nLgogIC8vIFRoZSBuZXR3b3JrIHNvY2tldCBpcyBnb25lLgogIENvbXBsZXRlcjxSYXdTZWN1cmVTb2NrZXQ+IF9jbG9zZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8UmF3U2VjdXJlU29ja2V0PigpOwogIF9GaWx0ZXJTdGF0dXMgX2ZpbHRlclN0YXR1cyA9IG5ldyBfRmlsdGVyU3RhdHVzKCk7CiAgYm9vbCBfY29ubmVjdFBlbmRpbmcgPSB0cnVlOwogIGJvb2wgX2ZpbHRlclBlbmRpbmcgPSBmYWxzZTsKICBib29sIF9maWx0ZXJBY3RpdmUgPSBmYWxzZTsKCiAgX1NlY3VyZUZpbHRlciBfc2VjdXJlRmlsdGVyID0gbmV3IF9TZWN1cmVGaWx0ZXIuXygpOwogIFN0cmluZyBfc2VsZWN0ZWRQcm90b2NvbDsKCiAgc3RhdGljIEZ1dHVyZTxfUmF3U2VjdXJlU29ja2V0PiBjb25uZWN0KAogICAgICBkeW5hbWljIC8qU3RyaW5nfEludGVybmV0QWRkcmVzcyovIGhvc3QsIGludCByZXF1ZXN0ZWRQb3J0LAogICAgICB7Ym9vbCBpc19zZXJ2ZXIsCiAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBSYXdTb2NrZXQgc29ja2V0LAogICAgICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0RXZlbnQ+IHN1YnNjcmlwdGlvbiwKICAgICAgTGlzdDxpbnQ+IGJ1ZmZlcmVkRGF0YSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzfSkgewogICAgX3ZlcmlmeUZpZWxkcyhob3N0LCByZXF1ZXN0ZWRQb3J0LCBpc19zZXJ2ZXIsIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsIG9uQmFkQ2VydGlmaWNhdGUpOwogICAgaWYgKGhvc3QgaXMgSW50ZXJuZXRBZGRyZXNzKSBob3N0ID0gaG9zdC5ob3N0OwogICAgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MgPSBzb2NrZXQuYWRkcmVzczsKICAgIGlmIChob3N0ICE9IG51bGwpIHsKICAgICAgYWRkcmVzcyA9IEludGVybmV0QWRkcmVzcy5fY2xvbmVXaXRoTmV3SG9zdChhZGRyZXNzLCBob3N0KTsKICAgIH0KICAgIHJldHVybiBuZXcgX1Jhd1NlY3VyZVNvY2tldCgKICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgcmVxdWVzdGVkUG9ydCwKICAgICAgICAgICAgaXNfc2VydmVyLAogICAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgICBzb2NrZXQsCiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiwKICAgICAgICAgICAgYnVmZmVyZWREYXRhLAogICAgICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgb25CYWRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzKQogICAgICAgIC5faGFuZHNoYWtlQ29tcGxldGUKICAgICAgICAuZnV0dXJlOwogIH0KCiAgX1Jhd1NlY3VyZVNvY2tldCgKICAgICAgdGhpcy5hZGRyZXNzLAogICAgICBpbnQgcmVxdWVzdGVkUG9ydCwKICAgICAgdGhpcy5pc19zZXJ2ZXIsCiAgICAgIHRoaXMuY29udGV4dCwKICAgICAgdGhpcy5fc29ja2V0LAogICAgICB0aGlzLl9zb2NrZXRTdWJzY3JpcHRpb24sCiAgICAgIHRoaXMuX2J1ZmZlcmVkRGF0YSwKICAgICAgdGhpcy5yZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIHRoaXMucmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICB0aGlzLm9uQmFkQ2VydGlmaWNhdGUsCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHMpIHsKICAgIGNvbnRleHQgPz89IFNlY3VyaXR5Q29udGV4dC5kZWZhdWx0Q29udGV4dDsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8UmF3U29ja2V0RXZlbnQ+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlLAogICAgICAgIG9uUGF1c2U6IF9vblBhdXNlU3RhdGVDaGFuZ2UsCiAgICAgICAgb25SZXN1bWU6IF9vblBhdXNlU3RhdGVDaGFuZ2UsCiAgICAgICAgb25DYW5jZWw6IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlKTsKICAgIF9zdHJlYW0gPSBfY29udHJvbGxlci5zdHJlYW07CiAgICAvLyBUaHJvdyBhbiBBcmd1bWVudEVycm9yIGlmIGFueSBmaWVsZCBpcyBpbnZhbGlkLiAgQWZ0ZXIgdGhpcywgYWxsCiAgICAvLyBlcnJvcnMgd2lsbCBiZSByZXBvcnRlZCB0aHJvdWdoIHRoZSBmdXR1cmUgb3IgdGhlIHN0cmVhbS4KICAgIF9zZWN1cmVGaWx0ZXIuaW5pdCgpOwogICAgX3NlY3VyZUZpbHRlcgogICAgICAgIC5yZWdpc3RlckhhbmRzaGFrZUNvbXBsZXRlQ2FsbGJhY2soX3NlY3VyZUhhbmRzaGFrZUNvbXBsZXRlSGFuZGxlcik7CiAgICBpZiAob25CYWRDZXJ0aWZpY2F0ZSAhPSBudWxsKSB7CiAgICAgIF9zZWN1cmVGaWx0ZXIucmVnaXN0ZXJCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrKF9vbkJhZENlcnRpZmljYXRlV3JhcHBlcik7CiAgICB9CiAgICBfc29ja2V0LnJlYWRFdmVudHNFbmFibGVkID0gdHJ1ZTsKICAgIF9zb2NrZXQud3JpdGVFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICBpZiAoX3NvY2tldFN1YnNjcmlwdGlvbiA9PSBudWxsKSB7CiAgICAgIC8vIElmIGEgY3VycmVudCBzdWJzY3JpcHRpb24gaXMgcHJvdmlkZWQgdXNlIHRoaXMgb3RoZXJ3aXNlCiAgICAgIC8vIGNyZWF0ZSBhIG5ldyBvbmUuCiAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24gPSBfc29ja2V0Lmxpc3RlbihfZXZlbnREaXNwYXRjaGVyLAogICAgICAgICAgb25FcnJvcjogX3JlcG9ydEVycm9yLCBvbkRvbmU6IF9kb25lSGFuZGxlcik7CiAgICB9IGVsc2UgewogICAgICBpZiAoX3NvY2tldFN1YnNjcmlwdGlvbi5pc1BhdXNlZCkgewogICAgICAgIF9zb2NrZXQuY2xvc2UoKTsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiU3Vic2NyaXB0aW9uIHBhc3NlZCB0byBUTFMgdXBncmFkZSBpcyBwYXVzZWQiKTsKICAgICAgfQogICAgICAvLyBJZiB3ZSBhcmUgdXBncmFkaW5nIGEgc29ja2V0IHRoYXQgaXMgYWxyZWFkeSBjbG9zZWQgZm9yIHJlYWQsCiAgICAgIC8vIHJlcG9ydCBhbiBlcnJvciBhcyBpZiB3ZSByZWNlaXZlZCByZWFkQ2xvc2VkIGR1cmluZyB0aGUgaGFuZHNoYWtlLgogICAgICBkeW5hbWljIHMgPSBfc29ja2V0OyAvLyBDYXN0IHRvIGR5bmFtaWMgdG8gYXZvaWQgd2FybmluZy4KICAgICAgaWYgKHMuX3NvY2tldC5jbG9zZWRSZWFkRXZlbnRTZW50KSB7CiAgICAgICAgX2V2ZW50RGlzcGF0Y2hlcihSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkKTsKICAgICAgfQogICAgICBfc29ja2V0U3Vic2NyaXB0aW9uCiAgICAgICAgLi5vbkRhdGEoX2V2ZW50RGlzcGF0Y2hlcikKICAgICAgICAuLm9uRXJyb3IoX3JlcG9ydEVycm9yKQogICAgICAgIC4ub25Eb25lKF9kb25lSGFuZGxlcik7CiAgICB9CiAgICB0cnkgewogICAgICB2YXIgZW5jb2RlZFByb3RvY29scyA9CiAgICAgICAgICBTZWN1cml0eUNvbnRleHQuX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2Rpbmcoc3VwcG9ydGVkUHJvdG9jb2xzKTsKICAgICAgX3NlY3VyZUZpbHRlci5jb25uZWN0KAogICAgICAgICAgYWRkcmVzcy5ob3N0LAogICAgICAgICAgY29udGV4dCwKICAgICAgICAgIGlzX3NlcnZlciwKICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSB8fCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICBlbmNvZGVkUHJvdG9jb2xzKTsKICAgICAgX3NlY3VyZUhhbmRzaGFrZSgpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBfcmVwb3J0RXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0RXZlbnQ+IGxpc3Rlbih2b2lkIG9uRGF0YShSYXdTb2NrZXRFdmVudCBkYXRhKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIF9zZW5kV3JpdGVFdmVudCgpOwogICAgcmV0dXJuIF9zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBzdGF0aWMgdm9pZCBfdmVyaWZ5RmllbGRzKAogICAgICBob3N0LAogICAgICBpbnQgcmVxdWVzdGVkUG9ydCwKICAgICAgYm9vbCBpc19zZXJ2ZXIsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgRnVuY3Rpb24gb25CYWRDZXJ0aWZpY2F0ZSkgewogICAgaWYgKGhvc3QgaXMhIFN0cmluZyAmJiBob3N0IGlzISBJbnRlcm5ldEFkZHJlc3MpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoImhvc3QgaXMgbm90IGEgU3RyaW5nIG9yIGFuIEludGVybmV0QWRkcmVzcyIpOwogICAgfQogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwocmVxdWVzdGVkUG9ydCwgInJlcXVlc3RlZFBvcnQiKTsKICAgIGlmIChyZXF1ZXN0ZWRQb3J0IDwgMCB8fCByZXF1ZXN0ZWRQb3J0ID4gNjU1MzUpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigicmVxdWVzdGVkUG9ydCBpcyBub3QgaW4gdGhlIHJhbmdlIDAuLjY1NTM1Iik7CiAgICB9CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbCgKICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsICJyZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUiKTsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKAogICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwgInJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSIpOwogIH0KCiAgaW50IGdldCBwb3J0ID0+IF9zb2NrZXQucG9ydDsKCiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzID0+IF9zb2NrZXQucmVtb3RlQWRkcmVzczsKCiAgaW50IGdldCByZW1vdGVQb3J0ID0+IF9zb2NrZXQucmVtb3RlUG9ydDsKCiAgdm9pZCBzZXQgX293bmVyKG93bmVyKSB7CiAgICAoX3NvY2tldCBhcyBkeW5hbWljKS5fb3duZXIgPSBvd25lcjsKICB9CgogIGludCBhdmFpbGFibGUoKSB7CiAgICByZXR1cm4gX3N0YXR1cyAhPSBjb25uZWN0ZWRTdGF0dXMKICAgICAgICA/IDAKICAgICAgICA6IF9zZWN1cmVGaWx0ZXIuYnVmZmVyc1tyZWFkUGxhaW50ZXh0SWRdLmxlbmd0aDsKICB9CgogIEZ1dHVyZTxSYXdTZWN1cmVTb2NrZXQ+IGNsb3NlKCkgewogICAgc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uLmJvdGgpOwogICAgcmV0dXJuIF9jbG9zZUNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICB2b2lkIF9jb21wbGV0ZUNsb3NlQ29tcGxldGVyKFtSYXdTb2NrZXQgZHVtbXldKSB7CiAgICBpZiAoIV9jbG9zZUNvbXBsZXRlci5pc0NvbXBsZXRlZCkgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlKHRoaXMpOwogIH0KCiAgdm9pZCBfY2xvc2UoKSB7CiAgICBfY2xvc2VkV3JpdGUgPSB0cnVlOwogICAgX2Nsb3NlZFJlYWQgPSB0cnVlOwogICAgaWYgKF9zb2NrZXQgIT0gbnVsbCkgewogICAgICBfc29ja2V0LmNsb3NlKCkudGhlbihfY29tcGxldGVDbG9zZUNvbXBsZXRlcik7CiAgICB9IGVsc2UgewogICAgICBfY29tcGxldGVDbG9zZUNvbXBsZXRlcigpOwogICAgfQogICAgX3NvY2tldENsb3NlZFdyaXRlID0gdHJ1ZTsKICAgIF9zb2NrZXRDbG9zZWRSZWFkID0gdHJ1ZTsKICAgIGlmICghX2ZpbHRlckFjdGl2ZSAmJiBfc2VjdXJlRmlsdGVyICE9IG51bGwpIHsKICAgICAgX3NlY3VyZUZpbHRlci5kZXN0cm95KCk7CiAgICAgIF9zZWN1cmVGaWx0ZXIgPSBudWxsOwogICAgfQogICAgaWYgKF9zb2NrZXRTdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBfc29ja2V0U3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgfQogICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIF9zdGF0dXMgPSBjbG9zZWRTdGF0dXM7CiAgfQoKICB2b2lkIHNodXRkb3duKFNvY2tldERpcmVjdGlvbiBkaXJlY3Rpb24pIHsKICAgIGlmIChkaXJlY3Rpb24gPT0gU29ja2V0RGlyZWN0aW9uLnNlbmQgfHwKICAgICAgICBkaXJlY3Rpb24gPT0gU29ja2V0RGlyZWN0aW9uLmJvdGgpIHsKICAgICAgX2Nsb3NlZFdyaXRlID0gdHJ1ZTsKICAgICAgaWYgKF9maWx0ZXJTdGF0dXMud3JpdGVFbXB0eSkgewogICAgICAgIF9zb2NrZXQuc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uLnNlbmQpOwogICAgICAgIF9zb2NrZXRDbG9zZWRXcml0ZSA9IHRydWU7CiAgICAgICAgaWYgKF9jbG9zZWRSZWFkKSB7CiAgICAgICAgICBfY2xvc2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChkaXJlY3Rpb24gPT0gU29ja2V0RGlyZWN0aW9uLnJlY2VpdmUgfHwKICAgICAgICBkaXJlY3Rpb24gPT0gU29ja2V0RGlyZWN0aW9uLmJvdGgpIHsKICAgICAgX2Nsb3NlZFJlYWQgPSB0cnVlOwogICAgICBfc29ja2V0Q2xvc2VkUmVhZCA9IHRydWU7CiAgICAgIF9zb2NrZXQuc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uLnJlY2VpdmUpOwogICAgICBpZiAoX3NvY2tldENsb3NlZFdyaXRlKSB7CiAgICAgICAgX2Nsb3NlKCk7CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgZ2V0IHdyaXRlRXZlbnRzRW5hYmxlZCA9PiBfd3JpdGVFdmVudHNFbmFibGVkOwoKICB2b2lkIHNldCB3cml0ZUV2ZW50c0VuYWJsZWQoYm9vbCB2YWx1ZSkgewogICAgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IHZhbHVlOwogICAgaWYgKHZhbHVlKSB7CiAgICAgIFRpbWVyLnJ1bigoKSA9PiBfc2VuZFdyaXRlRXZlbnQoKSk7CiAgICB9CiAgfQoKICBib29sIGdldCByZWFkRXZlbnRzRW5hYmxlZCA9PiBfcmVhZEV2ZW50c0VuYWJsZWQ7CgogIHZvaWQgc2V0IHJlYWRFdmVudHNFbmFibGVkKGJvb2wgdmFsdWUpIHsKICAgIF9yZWFkRXZlbnRzRW5hYmxlZCA9IHZhbHVlOwogICAgX3NjaGVkdWxlUmVhZEV2ZW50KCk7CiAgfQoKICBVaW50OExpc3QgcmVhZChbaW50IGxlbmd0aF0pIHsKICAgIGlmIChsZW5ndGggIT0gbnVsbCAmJiAobGVuZ3RoIGlzISBpbnQgfHwgbGVuZ3RoIDwgMCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiSW52YWxpZCBsZW5ndGggcGFyYW1ldGVyIGluIFNlY3VyZVNvY2tldC5yZWFkIChsZW5ndGg6ICRsZW5ndGgpIik7CiAgICB9CiAgICBpZiAoX2Nsb3NlZFJlYWQpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigiUmVhZGluZyBmcm9tIGEgY2xvc2VkIHNvY2tldCIpOwogICAgfQogICAgaWYgKF9zdGF0dXMgIT0gY29ubmVjdGVkU3RhdHVzKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9zZWN1cmVGaWx0ZXIuYnVmZmVyc1tyZWFkUGxhaW50ZXh0SWRdLnJlYWQobGVuZ3RoKTsKICAgIF9zY2hlZHVsZUZpbHRlcigpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBzb2NrZXQsIGFuZCBzY2hlZHVsZSB0aGUgZmlsdGVyIHRvIGVuY3J5cHQgaXQuCiAgaW50IHdyaXRlKExpc3Q8aW50PiBkYXRhLCBbaW50IG9mZnNldCwgaW50IGJ5dGVzXSkgewogICAgaWYgKGJ5dGVzICE9IG51bGwgJiYgKGJ5dGVzIGlzISBpbnQgfHwgYnl0ZXMgPCAwKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICJJbnZhbGlkIGJ5dGVzIHBhcmFtZXRlciBpbiBTZWN1cmVTb2NrZXQucmVhZCAoYnl0ZXM6ICRieXRlcykiKTsKICAgIH0KICAgIGlmIChvZmZzZXQgIT0gbnVsbCAmJiAob2Zmc2V0IGlzISBpbnQgfHwgb2Zmc2V0IDwgMCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiSW52YWxpZCBvZmZzZXQgcGFyYW1ldGVyIGluIFNlY3VyZVNvY2tldC5yZWFkIChvZmZzZXQ6ICRvZmZzZXQpIik7CiAgICB9CiAgICBpZiAoX2Nsb3NlZFdyaXRlKSB7CiAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKG5ldyBTb2NrZXRFeGNlcHRpb24oIldyaXRpbmcgdG8gYSBjbG9zZWQgc29ja2V0IikpOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmIChfc3RhdHVzICE9IGNvbm5lY3RlZFN0YXR1cykgcmV0dXJuIDA7CiAgICBvZmZzZXQgPz89IDA7CiAgICBieXRlcyA/Pz0gZGF0YS5sZW5ndGggLSBvZmZzZXQ7CgogICAgaW50IHdyaXR0ZW4gPQogICAgICAgIF9zZWN1cmVGaWx0ZXIuYnVmZmVyc1t3cml0ZVBsYWludGV4dElkXS53cml0ZShkYXRhLCBvZmZzZXQsIGJ5dGVzKTsKICAgIGlmICh3cml0dGVuID4gMCkgewogICAgICBfZmlsdGVyU3RhdHVzLndyaXRlRW1wdHkgPSBmYWxzZTsKICAgIH0KICAgIF9zY2hlZHVsZUZpbHRlcigpOwogICAgcmV0dXJuIHdyaXR0ZW47CiAgfQoKICBYNTA5Q2VydGlmaWNhdGUgZ2V0IHBlZXJDZXJ0aWZpY2F0ZSA9PiBfc2VjdXJlRmlsdGVyLnBlZXJDZXJ0aWZpY2F0ZTsKCiAgU3RyaW5nIGdldCBzZWxlY3RlZFByb3RvY29sID0+IF9zZWxlY3RlZFByb3RvY29sOwoKICBib29sIF9vbkJhZENlcnRpZmljYXRlV3JhcHBlcihYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpIHsKICAgIGlmIChvbkJhZENlcnRpZmljYXRlID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHZhciByZXN1bHQgPSBvbkJhZENlcnRpZmljYXRlKGNlcnRpZmljYXRlKTsKICAgIGlmIChyZXN1bHQgaXMgYm9vbCkgcmV0dXJuIHJlc3VsdDsKICAgIHRocm93IG5ldyBIYW5kc2hha2VFeGNlcHRpb24oCiAgICAgICAgIm9uQmFkQ2VydGlmaWNhdGUgY2FsbGJhY2sgcmV0dXJuZWQgbm9uLWJvb2xlYW4gJHJlc3VsdCIpOwogIH0KCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgYm9vbCBlbmFibGVkKSB7CiAgICBpZiAoX3NvY2tldCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3NvY2tldC5zZXRPcHRpb24ob3B0aW9uLCBlbmFibGVkKTsKICB9CgogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgcmV0dXJuIF9zb2NrZXQ/LmdldFJhd09wdGlvbihvcHRpb24pOwogIH0KCiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgX3NvY2tldD8uc2V0UmF3T3B0aW9uKG9wdGlvbik7CiAgfQoKICB2b2lkIF9ldmVudERpc3BhdGNoZXIoUmF3U29ja2V0RXZlbnQgZXZlbnQpIHsKICAgIHRyeSB7CiAgICAgIGlmIChldmVudCA9PSBSYXdTb2NrZXRFdmVudC5yZWFkKSB7CiAgICAgICAgX3JlYWRIYW5kbGVyKCk7CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gUmF3U29ja2V0RXZlbnQud3JpdGUpIHsKICAgICAgICBfd3JpdGVIYW5kbGVyKCk7CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZCkgewogICAgICAgIF9jbG9zZUhhbmRsZXIoKTsKICAgICAgfQogICAgfSBjYXRjaCAoZSwgc3RhY2tUcmFjZSkgewogICAgICBfcmVwb3J0RXJyb3IoZSwgc3RhY2tUcmFjZSk7CiAgICB9CiAgfQoKICB2b2lkIF9yZWFkSGFuZGxlcigpIHsKICAgIF9yZWFkU29ja2V0KCk7CiAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICB9CgogIHZvaWQgX3dyaXRlSGFuZGxlcigpIHsKICAgIF93cml0ZVNvY2tldCgpOwogICAgX3NjaGVkdWxlRmlsdGVyKCk7CiAgfQoKICB2b2lkIF9kb25lSGFuZGxlcigpIHsKICAgIGlmIChfZmlsdGVyU3RhdHVzLnJlYWRFbXB0eSkgewogICAgICBfY2xvc2UoKTsKICAgIH0KICB9CgogIHZvaWQgX3JlcG9ydEVycm9yKGUsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBpZiAoX3N0YXR1cyA9PSBjbG9zZWRTdGF0dXMpIHsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChfY29ubmVjdFBlbmRpbmcpIHsKICAgICAgLy8gX2Nvbm5lY3RQZW5kaW5nIGlzIHRydWUgdW50aWwgdGhlIGhhbmRzaGFrZSBoYXMgY29tcGxldGVkLCBhbmQgdGhlCiAgICAgIC8vIF9oYW5kc2hha2VDb21wbGV0ZSBmdXR1cmUgcmV0dXJuZWQgZnJvbSBTZWN1cmVTb2NrZXQuY29ubmVjdCBoYXMKICAgICAgLy8gY29tcGxldGVkLiAgQmVmb3JlIHRoaXMgcG9pbnQsIHdlIG11c3QgY29tcGxldGUgaXQgd2l0aCBhbiBlcnJvci4KICAgICAgX2hhbmRzaGFrZUNvbXBsZXRlLmNvbXBsZXRlRXJyb3IoZSwgc3RhY2tUcmFjZSk7CiAgICB9IGVsc2UgewogICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlLCBzdGFja1RyYWNlKTsKICAgIH0KICAgIF9jbG9zZSgpOwogIH0KCiAgdm9pZCBfY2xvc2VIYW5kbGVyKCkgewogICAgaWYgKF9zdGF0dXMgPT0gY29ubmVjdGVkU3RhdHVzKSB7CiAgICAgIGlmIChfY2xvc2VkUmVhZCkgcmV0dXJuOwogICAgICBfc29ja2V0Q2xvc2VkUmVhZCA9IHRydWU7CiAgICAgIGlmIChfZmlsdGVyU3RhdHVzLnJlYWRFbXB0eSkgewogICAgICAgIF9jbG9zZWRSZWFkID0gdHJ1ZTsKICAgICAgICBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZCk7CiAgICAgICAgaWYgKF9zb2NrZXRDbG9zZWRXcml0ZSkgewogICAgICAgICAgX2Nsb3NlKCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF9zY2hlZHVsZUZpbHRlcigpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKF9zdGF0dXMgPT0gaGFuZHNoYWtlU3RhdHVzKSB7CiAgICAgIF9zb2NrZXRDbG9zZWRSZWFkID0gdHJ1ZTsKICAgICAgaWYgKF9maWx0ZXJTdGF0dXMucmVhZEVtcHR5KSB7CiAgICAgICAgX3JlcG9ydEVycm9yKAogICAgICAgICAgICBuZXcgSGFuZHNoYWtlRXhjZXB0aW9uKCdDb25uZWN0aW9uIHRlcm1pbmF0ZWQgZHVyaW5nIGhhbmRzaGFrZScpLAogICAgICAgICAgICBudWxsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfc2VjdXJlSGFuZHNoYWtlKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX3NlY3VyZUhhbmRzaGFrZSgpIHsKICAgIHRyeSB7CiAgICAgIF9zZWN1cmVGaWx0ZXIuaGFuZHNoYWtlKCk7CiAgICAgIF9maWx0ZXJTdGF0dXMud3JpdGVFbXB0eSA9IGZhbHNlOwogICAgICBfcmVhZFNvY2tldCgpOwogICAgICBfd3JpdGVTb2NrZXQoKTsKICAgICAgX3NjaGVkdWxlRmlsdGVyKCk7CiAgICB9IGNhdGNoIChlLCBzdGFja1RyYWNlKSB7CiAgICAgIF9yZXBvcnRFcnJvcihlLCBzdGFja1RyYWNlKTsKICAgIH0KICB9CgogIHZvaWQgcmVuZWdvdGlhdGUoCiAgICAgIHtib29sIHVzZVNlc3Npb25DYWNoZTogdHJ1ZSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2V9KSB7CiAgICBpZiAoX3N0YXR1cyAhPSBjb25uZWN0ZWRTdGF0dXMpIHsKICAgICAgdGhyb3cgbmV3IEhhbmRzaGFrZUV4Y2VwdGlvbigKICAgICAgICAgICJDYWxsZWQgcmVuZWdvdGlhdGUgb24gYSBub24tY29ubmVjdGVkIHNvY2tldCIpOwogICAgfQogICAgX3NlY3VyZUZpbHRlci5yZW5lZ290aWF0ZSgKICAgICAgICB1c2VTZXNzaW9uQ2FjaGUsIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlKTsKICAgIF9zdGF0dXMgPSBoYW5kc2hha2VTdGF0dXM7CiAgICBfZmlsdGVyU3RhdHVzLndyaXRlRW1wdHkgPSBmYWxzZTsKICAgIF9zY2hlZHVsZUZpbHRlcigpOwogIH0KCiAgdm9pZCBfc2VjdXJlSGFuZHNoYWtlQ29tcGxldGVIYW5kbGVyKCkgewogICAgX3N0YXR1cyA9IGNvbm5lY3RlZFN0YXR1czsKICAgIGlmIChfY29ubmVjdFBlbmRpbmcpIHsKICAgICAgX2Nvbm5lY3RQZW5kaW5nID0gZmFsc2U7CiAgICAgIHRyeSB7CiAgICAgICAgX3NlbGVjdGVkUHJvdG9jb2wgPSBfc2VjdXJlRmlsdGVyLnNlbGVjdGVkUHJvdG9jb2woKTsKICAgICAgICAvLyBXZSBkb24ndCB3YW50IHVzZXIgY29kZSB0byBydW4gc3luY2hyb25vdXNseSBpbiB0aGlzIGNhbGxiYWNrLgogICAgICAgIFRpbWVyLnJ1bigoKSA9PiBfaGFuZHNoYWtlQ29tcGxldGUuY29tcGxldGUodGhpcykpOwogICAgICB9IGNhdGNoIChlcnJvciwgc3RhY2spIHsKICAgICAgICBfaGFuZHNoYWtlQ29tcGxldGUuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2spOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgX3BhdXNlQ291bnQrKzsKICAgIH0gZWxzZSB7CiAgICAgIF9wYXVzZUNvdW50LS07CiAgICAgIGlmIChfcGF1c2VDb3VudCA9PSAwKSB7CiAgICAgICAgX3NjaGVkdWxlUmVhZEV2ZW50KCk7CiAgICAgICAgX3NlbmRXcml0ZUV2ZW50KCk7IC8vIENhbiBzZW5kIGV2ZW50IHN5bmNocm9ub3VzbHkuCiAgICAgIH0KICAgIH0KCiAgICBpZiAoIV9zb2NrZXRDbG9zZWRSZWFkIHx8ICFfc29ja2V0Q2xvc2VkV3JpdGUpIHsKICAgICAgaWYgKF9jb250cm9sbGVyLmlzUGF1c2VkKSB7CiAgICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHsKICAgICAgLy8gVE9ETyhham9obnNlbik6IERvIHNvbWV0aGluZyBoZXJlPwogICAgfQogIH0KCiAgdm9pZCBfc2NoZWR1bGVGaWx0ZXIoKSB7CiAgICBfZmlsdGVyUGVuZGluZyA9IHRydWU7CiAgICBfdHJ5RmlsdGVyKCk7CiAgfQoKICB2b2lkIF90cnlGaWx0ZXIoKSB7CiAgICBpZiAoX3N0YXR1cyA9PSBjbG9zZWRTdGF0dXMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKF9maWx0ZXJQZW5kaW5nICYmICFfZmlsdGVyQWN0aXZlKSB7CiAgICAgIF9maWx0ZXJBY3RpdmUgPSB0cnVlOwogICAgICBfZmlsdGVyUGVuZGluZyA9IGZhbHNlOwogICAgICBfcHVzaEFsbEZpbHRlclN0YWdlcygpLnRoZW4oKHN0YXR1cykgewogICAgICAgIF9maWx0ZXJTdGF0dXMgPSBzdGF0dXM7CiAgICAgICAgX2ZpbHRlckFjdGl2ZSA9IGZhbHNlOwogICAgICAgIGlmIChfc3RhdHVzID09IGNsb3NlZFN0YXR1cykgewogICAgICAgICAgX3NlY3VyZUZpbHRlci5kZXN0cm95KCk7CiAgICAgICAgICBfc2VjdXJlRmlsdGVyID0gbnVsbDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX3NvY2tldC5yZWFkRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMud3JpdGVFbXB0eSAmJiBfY2xvc2VkV3JpdGUgJiYgIV9zb2NrZXRDbG9zZWRXcml0ZSkgewogICAgICAgICAgLy8gQ2hlY2tzIGZvciBhbmQgaGFuZGxlcyBhbGwgY2FzZXMgb2YgcGFydGlhbGx5IGNsb3NlZCBzb2NrZXRzLgogICAgICAgICAgc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uLnNlbmQpOwogICAgICAgICAgaWYgKF9zdGF0dXMgPT0gY2xvc2VkU3RhdHVzKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMucmVhZEVtcHR5ICYmIF9zb2NrZXRDbG9zZWRSZWFkICYmICFfY2xvc2VkUmVhZCkgewogICAgICAgICAgaWYgKF9zdGF0dXMgPT0gaGFuZHNoYWtlU3RhdHVzKSB7CiAgICAgICAgICAgIF9zZWN1cmVGaWx0ZXIuaGFuZHNoYWtlKCk7CiAgICAgICAgICAgIGlmIChfc3RhdHVzID09IGhhbmRzaGFrZVN0YXR1cykgewogICAgICAgICAgICAgIHRocm93IG5ldyBIYW5kc2hha2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICdDb25uZWN0aW9uIHRlcm1pbmF0ZWQgZHVyaW5nIGhhbmRzaGFrZScpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBfY2xvc2VIYW5kbGVyKCk7CiAgICAgICAgfQogICAgICAgIGlmIChfc3RhdHVzID09IGNsb3NlZFN0YXR1cykgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoX2ZpbHRlclN0YXR1cy5wcm9ncmVzcykgewogICAgICAgICAgX2ZpbHRlclBlbmRpbmcgPSB0cnVlOwogICAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMud3JpdGVFbmNyeXB0ZWROb0xvbmdlckVtcHR5KSB7CiAgICAgICAgICAgIF93cml0ZVNvY2tldCgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMud3JpdGVQbGFpbnRleHROb0xvbmdlckZ1bGwpIHsKICAgICAgICAgICAgX3NlbmRXcml0ZUV2ZW50KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX2ZpbHRlclN0YXR1cy5yZWFkRW5jcnlwdGVkTm9Mb25nZXJGdWxsKSB7CiAgICAgICAgICAgIF9yZWFkU29ja2V0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX2ZpbHRlclN0YXR1cy5yZWFkUGxhaW50ZXh0Tm9Mb25nZXJFbXB0eSkgewogICAgICAgICAgICBfc2NoZWR1bGVSZWFkRXZlbnQoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfc3RhdHVzID09IGhhbmRzaGFrZVN0YXR1cykgewogICAgICAgICAgICBfc2VjdXJlSGFuZHNoYWtlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF90cnlGaWx0ZXIoKTsKICAgICAgfSkuY2F0Y2hFcnJvcihfcmVwb3J0RXJyb3IpOwogICAgfQogIH0KCiAgTGlzdDxpbnQ+IF9yZWFkU29ja2V0T3JCdWZmZXJlZERhdGEoaW50IGJ5dGVzKSB7CiAgICBpZiAoX2J1ZmZlcmVkRGF0YSAhPSBudWxsKSB7CiAgICAgIGlmIChieXRlcyA+IF9idWZmZXJlZERhdGEubGVuZ3RoIC0gX2J1ZmZlcmVkRGF0YUluZGV4KSB7CiAgICAgICAgYnl0ZXMgPSBfYnVmZmVyZWREYXRhLmxlbmd0aCAtIF9idWZmZXJlZERhdGFJbmRleDsKICAgICAgfQogICAgICB2YXIgcmVzdWx0ID0KICAgICAgICAgIF9idWZmZXJlZERhdGEuc3VibGlzdChfYnVmZmVyZWREYXRhSW5kZXgsIF9idWZmZXJlZERhdGFJbmRleCArIGJ5dGVzKTsKICAgICAgX2J1ZmZlcmVkRGF0YUluZGV4ICs9IGJ5dGVzOwogICAgICBpZiAoX2J1ZmZlcmVkRGF0YS5sZW5ndGggPT0gX2J1ZmZlcmVkRGF0YUluZGV4KSB7CiAgICAgICAgX2J1ZmZlcmVkRGF0YSA9IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSBpZiAoIV9zb2NrZXRDbG9zZWRSZWFkKSB7CiAgICAgIHJldHVybiBfc29ja2V0LnJlYWQoYnl0ZXMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICB2b2lkIF9yZWFkU29ja2V0KCkgewogICAgaWYgKF9zdGF0dXMgPT0gY2xvc2VkU3RhdHVzKSByZXR1cm47CiAgICB2YXIgYnVmZmVyID0gX3NlY3VyZUZpbHRlci5idWZmZXJzW3JlYWRFbmNyeXB0ZWRJZF07CiAgICBpZiAoYnVmZmVyLndyaXRlRnJvbVNvdXJjZShfcmVhZFNvY2tldE9yQnVmZmVyZWREYXRhKSA+IDApIHsKICAgICAgX2ZpbHRlclN0YXR1cy5yZWFkRW1wdHkgPSBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIF9zb2NrZXQucmVhZEV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICAgIH0KICB9CgogIHZvaWQgX3dyaXRlU29ja2V0KCkgewogICAgaWYgKF9zb2NrZXRDbG9zZWRXcml0ZSkgcmV0dXJuOwogICAgdmFyIGJ1ZmZlciA9IF9zZWN1cmVGaWx0ZXIuYnVmZmVyc1t3cml0ZUVuY3J5cHRlZElkXTsKICAgIGlmIChidWZmZXIucmVhZFRvU29ja2V0KF9zb2NrZXQpKSB7CiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBibG9ja2VkCiAgICAgIF9zb2NrZXQud3JpdGVFdmVudHNFbmFibGVkID0gdHJ1ZTsKICAgIH0KICB9CgogIC8vIElmIGEgcmVhZCBldmVudCBzaG91bGQgYmUgc2VudCwgYWRkIGl0IHRvIHRoZSBjb250cm9sbGVyLgogIF9zY2hlZHVsZVJlYWRFdmVudCgpIHsKICAgIGlmICghX3BlbmRpbmdSZWFkRXZlbnQgJiYKICAgICAgICBfcmVhZEV2ZW50c0VuYWJsZWQgJiYKICAgICAgICBfcGF1c2VDb3VudCA9PSAwICYmCiAgICAgICAgX3NlY3VyZUZpbHRlciAhPSBudWxsICYmCiAgICAgICAgIV9zZWN1cmVGaWx0ZXIuYnVmZmVyc1tyZWFkUGxhaW50ZXh0SWRdLmlzRW1wdHkpIHsKICAgICAgX3BlbmRpbmdSZWFkRXZlbnQgPSB0cnVlOwogICAgICBUaW1lci5ydW4oX3NlbmRSZWFkRXZlbnQpOwogICAgfQogIH0KCiAgX3NlbmRSZWFkRXZlbnQoKSB7CiAgICBfcGVuZGluZ1JlYWRFdmVudCA9IGZhbHNlOwogICAgaWYgKF9zdGF0dXMgIT0gY2xvc2VkU3RhdHVzICYmCiAgICAgICAgX3JlYWRFdmVudHNFbmFibGVkICYmCiAgICAgICAgX3BhdXNlQ291bnQgPT0gMCAmJgogICAgICAgIF9zZWN1cmVGaWx0ZXIgIT0gbnVsbCAmJgogICAgICAgICFfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbcmVhZFBsYWludGV4dElkXS5pc0VtcHR5KSB7CiAgICAgIF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkKTsKICAgICAgX3NjaGVkdWxlUmVhZEV2ZW50KCk7CiAgICB9CiAgfQoKICAvLyBJZiBhIHdyaXRlIGV2ZW50IHNob3VsZCBiZSBzZW50LCBhZGQgaXQgdG8gdGhlIGNvbnRyb2xsZXIuCiAgX3NlbmRXcml0ZUV2ZW50KCkgewogICAgaWYgKCFfY2xvc2VkV3JpdGUgJiYKICAgICAgICBfd3JpdGVFdmVudHNFbmFibGVkICYmCiAgICAgICAgX3BhdXNlQ291bnQgPT0gMCAmJgogICAgICAgIF9zZWN1cmVGaWx0ZXIgIT0gbnVsbCAmJgogICAgICAgIF9zZWN1cmVGaWx0ZXIuYnVmZmVyc1t3cml0ZVBsYWludGV4dElkXS5mcmVlID4gMCkgewogICAgICBfd3JpdGVFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICAgIF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC53cml0ZSk7CiAgICB9CiAgfQoKICBGdXR1cmU8X0ZpbHRlclN0YXR1cz4gX3B1c2hBbGxGaWx0ZXJTdGFnZXMoKSB7CiAgICBib29sIHdhc0luSGFuZHNoYWtlID0gX3N0YXR1cyAhPSBjb25uZWN0ZWRTdGF0dXM7CiAgICBMaXN0IGFyZ3MgPSBuZXcgTGlzdCgyICsgYnVmZmVyQ291bnQgKiAyKTsKICAgIGFyZ3NbMF0gPSBfc2VjdXJlRmlsdGVyLl9wb2ludGVyKCk7CiAgICBhcmdzWzFdID0gd2FzSW5IYW5kc2hha2U7CiAgICB2YXIgYnVmcyA9IF9zZWN1cmVGaWx0ZXIuYnVmZmVyczsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyQ291bnQ7ICsraSkgewogICAgICBhcmdzWzIgKiBpICsgMl0gPSBidWZzW2ldLnN0YXJ0OwogICAgICBhcmdzWzIgKiBpICsgM10gPSBidWZzW2ldLmVuZDsKICAgIH0KCiAgICByZXR1cm4gX0lPU2VydmljZS5fZGlzcGF0Y2goX0lPU2VydmljZS5zc2xQcm9jZXNzRmlsdGVyLCBhcmdzKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2UubGVuZ3RoID09IDIpIHsKICAgICAgICBpZiAod2FzSW5IYW5kc2hha2UpIHsKICAgICAgICAgIC8vIElmIHdlJ3JlIGluIGhhbmRzaGFrZSwgdGhyb3cgYSBoYW5kc2hha2UgZXJyb3IuCiAgICAgICAgICBfcmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgbmV3IEhhbmRzaGFrZUV4Y2VwdGlvbignJHtyZXNwb25zZVsxXX0gZXJyb3IgJHtyZXNwb25zZVswXX0nKSwKICAgICAgICAgICAgICBudWxsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gSWYgd2UncmUgY29ubmVjdGVkLCB0aHJvdyBhIFRMUyBlcnJvci4KICAgICAgICAgIF9yZXBvcnRFcnJvcigKICAgICAgICAgICAgICBuZXcgVGxzRXhjZXB0aW9uKCcke3Jlc3BvbnNlWzFdfSBlcnJvciAke3Jlc3BvbnNlWzBdfScpLCBudWxsKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaW50IHN0YXJ0KGludCBpbmRleCkgPT4gcmVzcG9uc2VbMiAqIGluZGV4XTsKICAgICAgaW50IGVuZChpbnQgaW5kZXgpID0+IHJlc3BvbnNlWzIgKiBpbmRleCArIDFdOwoKICAgICAgX0ZpbHRlclN0YXR1cyBzdGF0dXMgPSBuZXcgX0ZpbHRlclN0YXR1cygpOwogICAgICAvLyBDb21wdXRlIHdyaXRlRW1wdHkgYXMgIndyaXRlIHBsYWludGV4dCBidWZmZXIgYW5kIHdyaXRlIGVuY3J5cHRlZAogICAgICAvLyBidWZmZXIgd2VyZSBlbXB0eSB3aGVuIHdlIHN0YXJ0ZWQgYW5kIGFyZSBlbXB0eSBub3ciLgogICAgICBzdGF0dXMud3JpdGVFbXB0eSA9IGJ1ZnNbd3JpdGVQbGFpbnRleHRJZF0uaXNFbXB0eSAmJgogICAgICAgICAgc3RhcnQod3JpdGVFbmNyeXB0ZWRJZCkgPT0gZW5kKHdyaXRlRW5jcnlwdGVkSWQpOwogICAgICAvLyBJZiB3ZSB3ZXJlIGluIGhhbmRzaGFrZSB3aGVuIHRoaXMgc3RhcnRlZCwgX3dyaXRlRW1wdHkgbWF5IGJlIGZhbHNlCiAgICAgIC8vIGJlY2F1c2UgdGhlIGhhbmRzaGFrZSB3cm90ZSBkYXRhIGFmdGVyIHdlIGNoZWNrZWQuCiAgICAgIGlmICh3YXNJbkhhbmRzaGFrZSkgc3RhdHVzLndyaXRlRW1wdHkgPSBmYWxzZTsKCiAgICAgIC8vIENvbXB1dGUgcmVhZEVtcHR5IGFzICJib3RoIHJlYWQgYnVmZmVycyB3ZXJlIGVtcHR5IHdoZW4gd2Ugc3RhcnRlZAogICAgICAvLyBhbmQgYXJlIGVtcHR5IG5vdyIuCiAgICAgIHN0YXR1cy5yZWFkRW1wdHkgPSBidWZzW3JlYWRFbmNyeXB0ZWRJZF0uaXNFbXB0eSAmJgogICAgICAgICAgc3RhcnQocmVhZFBsYWludGV4dElkKSA9PSBlbmQocmVhZFBsYWludGV4dElkKTsKCiAgICAgIF9FeHRlcm5hbEJ1ZmZlciBidWZmZXIgPSBidWZzW3dyaXRlUGxhaW50ZXh0SWRdOwogICAgICBpbnQgbmV3X3N0YXJ0ID0gc3RhcnQod3JpdGVQbGFpbnRleHRJZCk7CiAgICAgIGlmIChuZXdfc3RhcnQgIT0gYnVmZmVyLnN0YXJ0KSB7CiAgICAgICAgc3RhdHVzLnByb2dyZXNzID0gdHJ1ZTsKICAgICAgICBpZiAoYnVmZmVyLmZyZWUgPT0gMCkgewogICAgICAgICAgc3RhdHVzLndyaXRlUGxhaW50ZXh0Tm9Mb25nZXJGdWxsID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyLnN0YXJ0ID0gbmV3X3N0YXJ0OwogICAgICB9CiAgICAgIGJ1ZmZlciA9IGJ1ZnNbcmVhZEVuY3J5cHRlZElkXTsKICAgICAgbmV3X3N0YXJ0ID0gc3RhcnQocmVhZEVuY3J5cHRlZElkKTsKICAgICAgaWYgKG5ld19zdGFydCAhPSBidWZmZXIuc3RhcnQpIHsKICAgICAgICBzdGF0dXMucHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgIGlmIChidWZmZXIuZnJlZSA9PSAwKSB7CiAgICAgICAgICBzdGF0dXMucmVhZEVuY3J5cHRlZE5vTG9uZ2VyRnVsbCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlci5zdGFydCA9IG5ld19zdGFydDsKICAgICAgfQogICAgICBidWZmZXIgPSBidWZzW3dyaXRlRW5jcnlwdGVkSWRdOwogICAgICBpbnQgbmV3X2VuZCA9IGVuZCh3cml0ZUVuY3J5cHRlZElkKTsKICAgICAgaWYgKG5ld19lbmQgIT0gYnVmZmVyLmVuZCkgewogICAgICAgIHN0YXR1cy5wcm9ncmVzcyA9IHRydWU7CiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT0gMCkgewogICAgICAgICAgc3RhdHVzLndyaXRlRW5jcnlwdGVkTm9Mb25nZXJFbXB0eSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlci5lbmQgPSBuZXdfZW5kOwogICAgICB9CiAgICAgIGJ1ZmZlciA9IGJ1ZnNbcmVhZFBsYWludGV4dElkXTsKICAgICAgbmV3X2VuZCA9IGVuZChyZWFkUGxhaW50ZXh0SWQpOwogICAgICBpZiAobmV3X2VuZCAhPSBidWZmZXIuZW5kKSB7CiAgICAgICAgc3RhdHVzLnByb2dyZXNzID0gdHJ1ZTsKICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICBzdGF0dXMucmVhZFBsYWludGV4dE5vTG9uZ2VyRW1wdHkgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBidWZmZXIuZW5kID0gbmV3X2VuZDsKICAgICAgfQogICAgICByZXR1cm4gc3RhdHVzOwogICAgfSk7CiAgfQp9CgovKioKICogQSBjaXJjdWxhciBidWZmZXIgYmFja2VkIGJ5IGFuIGV4dGVybmFsIGJ5dGUgYXJyYXkuICBBY2Nlc3NlZCBmcm9tCiAqIGJvdGggQysrIGFuZCBEYXJ0IGNvZGUgaW4gYW4gdW5zeW5jaHJvbml6ZWQgd2F5LCB3aXRoIG9uZSByZWFkaW5nCiAqIGFuZCBvbmUgd3JpdGluZy4gIEFsbCB1cGRhdGVzIHRvIHN0YXJ0IGFuZCBlbmQgYXJlIGRvbmUgYnkgRGFydCBjb2RlLgogKi8KY2xhc3MgX0V4dGVybmFsQnVmZmVyIHsKICAvLyBUaGlzIHdpbGwgYmUgYW4gRXh0ZXJuYWxCeXRlQXJyYXksIGJhY2tlZCBieSBDIGFsbG9jYXRlZCBkYXRhLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgInNldCIpCiAgTGlzdDxpbnQ+IGRhdGE7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBpbnQgc3RhcnQ7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBpbnQgZW5kOwoKICBmaW5hbCBzaXplOwoKICBfRXh0ZXJuYWxCdWZmZXIodGhpcy5zaXplKSB7CiAgICBzdGFydCA9IGVuZCA9IHNpemUgfi8gMjsKICB9CgogIHZvaWQgYWR2YW5jZVN0YXJ0KGludCBieXRlcykgewogICAgYXNzZXJ0KHN0YXJ0ID4gZW5kIHx8IHN0YXJ0ICsgYnl0ZXMgPD0gZW5kKTsKICAgIHN0YXJ0ICs9IGJ5dGVzOwogICAgaWYgKHN0YXJ0ID49IHNpemUpIHsKICAgICAgc3RhcnQgLT0gc2l6ZTsKICAgICAgYXNzZXJ0KHN0YXJ0IDw9IGVuZCk7CiAgICAgIGFzc2VydChzdGFydCA8IHNpemUpOwogICAgfQogIH0KCiAgdm9pZCBhZHZhbmNlRW5kKGludCBieXRlcykgewogICAgYXNzZXJ0KHN0YXJ0IDw9IGVuZCB8fCBzdGFydCA+IGVuZCArIGJ5dGVzKTsKICAgIGVuZCArPSBieXRlczsKICAgIGlmIChlbmQgPj0gc2l6ZSkgewogICAgICBlbmQgLT0gc2l6ZTsKICAgICAgYXNzZXJ0KGVuZCA8IHN0YXJ0KTsKICAgICAgYXNzZXJ0KGVuZCA8IHNpemUpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBlbmQgPT0gc3RhcnQ7CgogIGludCBnZXQgbGVuZ3RoID0+IHN0YXJ0ID4gZW5kID8gc2l6ZSArIGVuZCAtIHN0YXJ0IDogZW5kIC0gc3RhcnQ7CgogIGludCBnZXQgbGluZWFyTGVuZ3RoID0+IHN0YXJ0ID4gZW5kID8gc2l6ZSAtIHN0YXJ0IDogZW5kIC0gc3RhcnQ7CgogIGludCBnZXQgZnJlZSA9PiBzdGFydCA+IGVuZCA/IHN0YXJ0IC0gZW5kIC0gMSA6IHNpemUgKyBzdGFydCAtIGVuZCAtIDE7CgogIGludCBnZXQgbGluZWFyRnJlZSB7CiAgICBpZiAoc3RhcnQgPiBlbmQpIHJldHVybiBzdGFydCAtIGVuZCAtIDE7CiAgICBpZiAoc3RhcnQgPT0gMCkgcmV0dXJuIHNpemUgLSBlbmQgLSAxOwogICAgcmV0dXJuIHNpemUgLSBlbmQ7CiAgfQoKICBVaW50OExpc3QgcmVhZChpbnQgYnl0ZXMpIHsKICAgIGlmIChieXRlcyA9PSBudWxsKSB7CiAgICAgIGJ5dGVzID0gbGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgYnl0ZXMgPSBtaW4oYnl0ZXMsIGxlbmd0aCk7CiAgICB9CiAgICBpZiAoYnl0ZXMgPT0gMCkgcmV0dXJuIG51bGw7CiAgICBVaW50OExpc3QgcmVzdWx0ID0gbmV3IFVpbnQ4TGlzdChieXRlcyk7CiAgICBpbnQgYnl0ZXNSZWFkID0gMDsKICAgIC8vIExvb3Agb3ZlciB6ZXJvLCBvbmUsIG9yIHR3byBsaW5lYXIgZGF0YSByYW5nZXMuCiAgICB3aGlsZSAoYnl0ZXNSZWFkIDwgYnl0ZXMpIHsKICAgICAgaW50IHRvUmVhZCA9IG1pbihieXRlcyAtIGJ5dGVzUmVhZCwgbGluZWFyTGVuZ3RoKTsKICAgICAgcmVzdWx0LnNldFJhbmdlKGJ5dGVzUmVhZCwgYnl0ZXNSZWFkICsgdG9SZWFkLCBkYXRhLCBzdGFydCk7CiAgICAgIGFkdmFuY2VTdGFydCh0b1JlYWQpOwogICAgICBieXRlc1JlYWQgKz0gdG9SZWFkOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGludCB3cml0ZShMaXN0PGludD4gaW5wdXREYXRhLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMpIHsKICAgIGlmIChieXRlcyA+IGZyZWUpIHsKICAgICAgYnl0ZXMgPSBmcmVlOwogICAgfQogICAgaW50IHdyaXR0ZW4gPSAwOwogICAgaW50IHRvV3JpdGUgPSBtaW4oYnl0ZXMsIGxpbmVhckZyZWUpOwogICAgLy8gTG9vcCBvdmVyIHplcm8sIG9uZSwgb3IgdHdvIGxpbmVhciBkYXRhIHJhbmdlcy4KICAgIHdoaWxlICh0b1dyaXRlID4gMCkgewogICAgICBkYXRhLnNldFJhbmdlKGVuZCwgZW5kICsgdG9Xcml0ZSwgaW5wdXREYXRhLCBvZmZzZXQpOwogICAgICBhZHZhbmNlRW5kKHRvV3JpdGUpOwogICAgICBvZmZzZXQgKz0gdG9Xcml0ZTsKICAgICAgd3JpdHRlbiArPSB0b1dyaXRlOwogICAgICB0b1dyaXRlID0gbWluKGJ5dGVzIC0gd3JpdHRlbiwgbGluZWFyRnJlZSk7CiAgICB9CiAgICByZXR1cm4gd3JpdHRlbjsKICB9CgogIGludCB3cml0ZUZyb21Tb3VyY2UoTGlzdDxpbnQ+IGdldERhdGEoaW50IHJlcXVlc3RlZCkpIHsKICAgIGludCB3cml0dGVuID0gMDsKICAgIGludCB0b1dyaXRlID0gbGluZWFyRnJlZTsKICAgIC8vIExvb3Agb3ZlciB6ZXJvLCBvbmUsIG9yIHR3byBsaW5lYXIgZGF0YSByYW5nZXMuCiAgICB3aGlsZSAodG9Xcml0ZSA+IDApIHsKICAgICAgLy8gU291cmNlIHJldHVybnMgYXQgbW9zdCB0b1dyaXRlIGJ5dGVzLCBhbmQgaXQgcmV0dXJucyBudWxsIHdoZW4gZW1wdHkuCiAgICAgIHZhciBpbnB1dERhdGEgPSBnZXREYXRhKHRvV3JpdGUpOwogICAgICBpZiAoaW5wdXREYXRhID09IG51bGwgfHwgaW5wdXREYXRhLmxlbmd0aCA9PSAwKSBicmVhazsKICAgICAgdmFyIGxlbiA9IGlucHV0RGF0YS5sZW5ndGg7CiAgICAgIGRhdGEuc2V0UmFuZ2UoZW5kLCBlbmQgKyBsZW4sIGlucHV0RGF0YSk7CiAgICAgIGFkdmFuY2VFbmQobGVuKTsKICAgICAgd3JpdHRlbiArPSBsZW47CiAgICAgIHRvV3JpdGUgPSBsaW5lYXJGcmVlOwogICAgfQogICAgcmV0dXJuIHdyaXR0ZW47CiAgfQoKICBib29sIHJlYWRUb1NvY2tldChSYXdTb2NrZXQgc29ja2V0KSB7CiAgICAvLyBMb29wIG92ZXIgemVybywgb25lLCBvciB0d28gbGluZWFyIGRhdGEgcmFuZ2VzLgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgdmFyIHRvV3JpdGUgPSBsaW5lYXJMZW5ndGg7CiAgICAgIGlmICh0b1dyaXRlID09IDApIHJldHVybiBmYWxzZTsKICAgICAgaW50IGJ5dGVzID0gc29ja2V0LndyaXRlKGRhdGEsIHN0YXJ0LCB0b1dyaXRlKTsKICAgICAgYWR2YW5jZVN0YXJ0KGJ5dGVzKTsKICAgICAgaWYgKGJ5dGVzIDwgdG9Xcml0ZSkgewogICAgICAgIC8vIFRoZSBzb2NrZXQgaGFzIGJsb2NrZWQgd2hpbGUgd2UgaGF2ZSBkYXRhIHRvIHdyaXRlLgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfU2VjdXJlRmlsdGVyIHsKICBleHRlcm5hbCBmYWN0b3J5IF9TZWN1cmVGaWx0ZXIuXygpOwoKICB2b2lkIGNvbm5lY3QoCiAgICAgIFN0cmluZyBob3N0TmFtZSwKICAgICAgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgaXNfc2VydmVyLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIFVpbnQ4TGlzdCBwcm90b2NvbHMpOwogIHZvaWQgZGVzdHJveSgpOwogIHZvaWQgaGFuZHNoYWtlKCk7CiAgU3RyaW5nIHNlbGVjdGVkUHJvdG9jb2woKTsKICB2b2lkIHJlaGFuZHNoYWtlKCk7CiAgdm9pZCByZW5lZ290aWF0ZShib29sIHVzZVNlc3Npb25DYWNoZSwgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlKTsKICB2b2lkIGluaXQoKTsKICBYNTA5Q2VydGlmaWNhdGUgZ2V0IHBlZXJDZXJ0aWZpY2F0ZTsKICBpbnQgcHJvY2Vzc0J1ZmZlcihpbnQgYnVmZmVySW5kZXgpOwogIHZvaWQgcmVnaXN0ZXJCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrKEZ1bmN0aW9uIGNhbGxiYWNrKTsKICB2b2lkIHJlZ2lzdGVySGFuZHNoYWtlQ29tcGxldGVDYWxsYmFjayhGdW5jdGlvbiBoYW5kc2hha2VDb21wbGV0ZUhhbmRsZXIpOwoKICAvLyBUaGlzIGNhbGwgbWF5IGNhdXNlIGEgcmVmZXJlbmNlIGNvdW50ZWQgcG9pbnRlciBpbiB0aGUgbmF0aXZlCiAgLy8gaW1wbGVtZW50YXRpb24gdG8gYmUgcmV0YWluZWQuIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSByZXN1bHRpbmcKICAvLyB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhlIElPIHNlcnZpY2UgdGhyb3VnaCBhIGNhbGwgdG8gZGlzcGF0Y2goKS4KICBpbnQgX3BvaW50ZXIoKTsKCiAgTGlzdDxfRXh0ZXJuYWxCdWZmZXI+IGdldCBidWZmZXJzOwp9CgovKiogQSBzZWN1cmUgbmV0d29ya2luZyBleGNlcHRpb24gY2F1c2VkIGJ5IGEgZmFpbHVyZSBpbiB0aGUKICogIFRMUy9TU0wgcHJvdG9jb2wuCiAqLwpjbGFzcyBUbHNFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIHR5cGU7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgZmluYWwgT1NFcnJvciBvc0Vycm9yOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgVGxzRXhjZXB0aW9uKFtTdHJpbmcgbWVzc2FnZSA9ICIiLCBPU0Vycm9yIG9zRXJyb3JdKQogICAgICA6IHRoaXMuXygiVGxzRXhjZXB0aW9uIiwgbWVzc2FnZSwgb3NFcnJvcik7CgogIGNvbnN0IFRsc0V4Y2VwdGlvbi5fKHRoaXMudHlwZSwgdGhpcy5tZXNzYWdlLCB0aGlzLm9zRXJyb3IpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSh0eXBlKTsKICAgIGlmIChtZXNzYWdlLmlzTm90RW1wdHkpIHsKICAgICAgc2Iud3JpdGUoIjogJG1lc3NhZ2UiKTsKICAgICAgaWYgKG9zRXJyb3IgIT0gbnVsbCkgewogICAgICAgIHNiLndyaXRlKCIgKCRvc0Vycm9yKSIpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG9zRXJyb3IgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgiOiAkb3NFcnJvciIpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovKioKICogQW4gZXhjZXB0aW9uIHRoYXQgaGFwcGVucyBpbiB0aGUgaGFuZHNoYWtlIHBoYXNlIG9mIGVzdGFibGlzaGluZwogKiBhIHNlY3VyZSBuZXR3b3JrIGNvbm5lY3Rpb24uCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIEhhbmRzaGFrZUV4Y2VwdGlvbiBleHRlbmRzIFRsc0V4Y2VwdGlvbiB7CiAgQHByYWdtYSgidm06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QzkCAQREPxAEMhxFOwIBGmRhcnQ6aW8vc2VjdXJlX3NvY2tldC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9zZWN1cml0eV9jb250ZXh0LmRhcnSrxC8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBjZXJ0aWZpY2F0ZXMgdG8gdHJ1c3Qgd2hlbiBtYWtpbmcKICogYSBzZWN1cmUgY2xpZW50IGNvbm5lY3Rpb24sIGFuZCB0aGUgY2VydGlmaWNhdGUgY2hhaW4gYW5kCiAqIHByaXZhdGUga2V5IHRvIHNlcnZlIGZyb20gYSBzZWN1cmUgc2VydmVyLgogKgogKiBUaGUgW1NlY3VyZVNvY2tldF0gIGFuZCBbU2VjdXJlU2VydmVyU29ja2V0XSBjbGFzc2VzIHRha2UgYSBTZWN1cml0eUNvbnRleHQKICogYXMgYW4gYXJndW1lbnQgdG8gdGhlaXIgY29ubmVjdCBhbmQgYmluZCBtZXRob2RzLgogKgogKiBDZXJ0aWZpY2F0ZXMgYW5kIGtleXMgY2FuIGJlIGFkZGVkIHRvIGEgU2VjdXJpdHlDb250ZXh0IGZyb20gZWl0aGVyIFBFTQogKiBvciBQS0NTMTIgY29udGFpbmVycy4KICoKICogaU9TIG5vdGU6IFNvbWUgbWV0aG9kcyB0byBhZGQsIHJlbW92ZSwgYW5kIGluc3BlY3QgY2VydGlmaWNhdGVzIGFyZSBub3QgeWV0CiAqIGltcGxlbWVudGVkLiBIb3dldmVyLCB0aGUgcGxhdGZvcm0ncyBidWlsdC1pbiB0cnVzdGVkIGNlcnRpZmljYXRlcyBjYW4KICogYmUgdXNlZCwgYnkgd2F5IG9mIFtTZWN1cml0eUNvbnRleHQuZGVmYXVsdENvbnRleHRdLgogKi8KYWJzdHJhY3QgY2xhc3MgU2VjdXJpdHlDb250ZXh0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtTZWN1cml0eUNvbnRleHRdLgogICAqCiAgICogQnkgZGVmYXVsdCwgdGhlIGNyZWF0ZWQgW1NlY3VyaXR5Q29udGV4dF0gY29udGFpbnMgbm8ga2V5cyBvciBjZXJ0aWZpY2F0ZXMuCiAgICogVGhlc2UgY2FuIGJlIGFkZGVkIGJ5IGNhbGxpbmcgdGhlIG1ldGhvZHMgb2YgdGhpcyBjbGFzcy4KICAgKgogICAqIElmIGB3aXRoVHJ1c3RlZFJvb3RzYCBpcyBwYXNzZWQgYXMgYHRydWVgLCB0aGUgW1NlY3VyaXR5Q29udGV4dF0gd2lsbCBiZQogICAqIHNlZWRlZCBieSB0aGUgdHJ1c3RlZCByb290IGNlcnRpZmljYXRlcyBwcm92aWRlZCBhcyBleHBsYWluZWQgYmVsb3cuIFRvCiAgICogb2J0YWluIGEgW1NlY3VyaXR5Q29udGV4dF0gY29udGFpbmluZyB0cnVzdGVkIHJvb3QgY2VydGlmaWNhdGVzLAogICAqIFtTZWN1cml0eUNvbnRleHQuZGVmYXVsdENvbnRleHRdIGlzIHVzdWFsbHkgc3VmZmljaWVudCwgYW5kIHNob3VsZAogICAqIGJlIHVzZWQgaW5zdGVhZC4gSG93ZXZlciwgaWYgdGhlIFtTZWN1cml0eUNvbnRleHRdIGNvbnRhaW5pbmcgdGhlIHRydXN0ZWQKICAgKiByb290IGNlcnRpZmljYXRlcyBtdXN0IGJlIG1vZGlmaWVkIHBlci1jb25uZWN0aW9uLCB0aGVuIGB3aXRoVHJ1c3RlZFJvb3RzYAogICAqIHNob3VsZCBiZSB1c2VkLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgU2VjdXJpdHlDb250ZXh0KHtib29sIHdpdGhUcnVzdGVkUm9vdHM6IGZhbHNlfSk7CgogIC8qKgogICAqIFNlY3VyZSBuZXR3b3JraW5nIGNsYXNzZXMgd2l0aCBhbiBvcHRpb25hbCBgY29udGV4dGAgcGFyYW1ldGVyCiAgICogdXNlIHRoZSBbZGVmYXVsdENvbnRleHRdIG9iamVjdCBpZiB0aGUgcGFyYW1ldGVyIGlzIG9taXR0ZWQuCiAgICogVGhpcyBvYmplY3QgY2FuIGFsc28gYmUgYWNjZXNzZWQsIGFuZCBtb2RpZmllZCwgZGlyZWN0bHkuCiAgICogRWFjaCBpc29sYXRlIGhhcyBhIGRpZmZlcmVudCBbZGVmYXVsdENvbnRleHRdIG9iamVjdC4KICAgKiBUaGUgW2RlZmF1bHRDb250ZXh0XSBvYmplY3QgdXNlcyBhIGxpc3Qgb2Ygd2VsbC1rbm93biB0cnVzdGVkCiAgICogY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgYXMgaXRzIHRydXN0ZWQgcm9vdHMuIE9uIExpbnV4IGFuZCBXaW5kb3dzLCB0aGlzCiAgICogbGlzdCBpcyB0YWtlbiBmcm9tIE1vemlsbGEsIHdobyBtYWludGFpbnMgaXQgYXMgcGFydCBvZiBGaXJlZm94LiBPbiwKICAgKiBNYWNPUywgaU9TLCBhbmQgQW5kcm9pZCwgdGhpcyBsaXN0IGNvbWVzIGZyb20gdGhlIHRydXN0ZWQgY2VydGlmaWNhdGVzCiAgICogc3RvcmVzIGJ1aWx0IGluIHRvIHRoZSBwbGF0Zm9ybXMuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFNlY3VyaXR5Q29udGV4dCBnZXQgZGVmYXVsdENvbnRleHQ7CgogIC8qKgogICAqIFNldHMgdGhlIHByaXZhdGUga2V5IGZvciBhIHNlcnZlciBjZXJ0aWZpY2F0ZSBvciBjbGllbnQgY2VydGlmaWNhdGUuCiAgICoKICAgKiBBIHNlY3VyZSBjb25uZWN0aW9uIHVzaW5nIHRoaXMgU2VjdXJpdHlDb250ZXh0IHdpbGwgdXNlIHRoaXMga2V5IHdpdGgKICAgKiB0aGUgc2VydmVyIG9yIGNsaWVudCBjZXJ0aWZpY2F0ZSB0byBzaWduIGFuZCBkZWNyeXB0IG1lc3NhZ2VzLgogICAqIFtmaWxlXSBpcyB0aGUgcGF0aCB0byBhIFBFTSBvciBQS0NTMTIgZmlsZSBjb250YWluaW5nIGFuIGVuY3J5cHRlZAogICAqIHByaXZhdGUga2V5LCBlbmNyeXB0ZWQgd2l0aCBbcGFzc3dvcmRdLiBBc3N1bWluZyBpdCBpcyB3ZWxsLWZvcm1hdHRlZCwgYWxsCiAgICogb3RoZXIgY29udGVudHMgb2YgW2ZpbGVdIGFyZSBpZ25vcmVkLiBBbiB1bmVuY3J5cHRlZCBmaWxlIGNhbiBiZSB1c2VkLAogICAqIGJ1dCB0aGlzIGlzIG5vdCB1c3VhbC4KICAgKgogICAqIE5COiBUaGlzIGZ1bmN0aW9uIGNhbGxzIFtGaWxlLnJlYWRBc0J5dGVzU3luY10sIGFuZCB3aWxsIGJsb2NrIG9uIGZpbGUgSU8uCiAgICogUHJlZmVyIHVzaW5nIFt1c2VQcml2YXRlS2V5Qnl0ZXNdLgogICAqCiAgICogaU9TIG5vdGU6IE9ubHkgUEtDUzEyIGRhdGEgaXMgc3VwcG9ydGVkLiBJdCBzaG91bGQgY29udGFpbiBib3RoIHRoZSBwcml2YXRlCiAgICoga2V5IGFuZCB0aGUgY2VydGlmaWNhdGUgY2hhaW4uIE9uIGlPUyBvbmUgY2FsbCB0byBbdXNlUHJpdmF0ZUtleV0gd2l0aCB0aGlzCiAgICogZGF0YSBpcyB1c2VkIGluc3RlYWQgb2YgdHdvIGNhbGxzIHRvIFt1c2VDZXJ0aWZpY2F0ZUNoYWluXSBhbmQKICAgKiBbdXNlUHJpdmF0ZUtleV0uCiAgICovCiAgdm9pZCB1c2VQcml2YXRlS2V5KFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFNldHMgdGhlIHByaXZhdGUga2V5IGZvciBhIHNlcnZlciBjZXJ0aWZpY2F0ZSBvciBjbGllbnQgY2VydGlmaWNhdGUuCiAgICoKICAgKiBMaWtlIFt1c2VQcml2YXRlS2V5XSwgYnV0IHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcyBhIGxpc3QKICAgKiBvZiBieXRlcy4KICAgKi8KICB2b2lkIHVzZVByaXZhdGVLZXlCeXRlcyhMaXN0PGludD4ga2V5Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgc2V0IG9mIHRydXN0ZWQgWDUwOSBjZXJ0aWZpY2F0ZXMgdXNlZCBieSBbU2VjdXJlU29ja2V0XQogICAqIGNsaWVudCBjb25uZWN0aW9ucywgd2hlbiBjb25uZWN0aW5nIHRvIGEgc2VjdXJlIHNlcnZlci4KICAgKgogICAqIFtmaWxlXSBpcyB0aGUgcGF0aCB0byBhIFBFTSBvciBQS0NTMTIgZmlsZSBjb250YWluaW5nIFg1MDkgY2VydGlmaWNhdGVzLAogICAqIHVzdWFsbHkgcm9vdCBjZXJ0aWZpY2F0ZXMgZnJvbSBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcy4gRm9yIFBLQ1MxMiBmaWxlcywKICAgKiBbcGFzc3dvcmRdIGlzIHRoZSBwYXNzd29yZCBmb3IgdGhlIGZpbGUuIEZvciBQRU0gZmlsZXMsIFtwYXNzd29yZF0gaXMKICAgKiBpZ25vcmVkLiBBc3N1bWluZyBpdCBpcyB3ZWxsLWZvcm1hdHRlZCwgYWxsIG90aGVyIGNvbnRlbnRzIG9mIFtmaWxlXSBhcmUKICAgKiBpZ25vcmVkLgogICAqCiAgICogTkI6IFRoaXMgZnVuY3Rpb24gY2FsbHMgW0ZpbGUucmVhZEFzQnl0ZXNTeW5jXSwgYW5kIHdpbGwgYmxvY2sgb24gZmlsZSBJTy4KICAgKiBQcmVmZXIgdXNpbmcgW3NldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlc10uCiAgICoKICAgKiBpT1Mgbm90ZTogT24gaU9TLCB0aGlzIGNhbGwgdGFrZXMgb25seSB0aGUgYnl0ZXMgZm9yIGEgc2luZ2xlIERFUgogICAqIGVuY29kZWQgWDUwOSBjZXJ0aWZpY2F0ZS4gSXQgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBhZGQKICAgKiBtdWx0aXBsZSB0cnVzdGVkIGNlcnRpZmljYXRlcyB0byB0aGUgY29udGV4dC4gQSBERVIgZW5jb2RlZCBjZXJ0aWZpY2F0ZQogICAqIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgUEVNIGVuY29kZWQgY2VydGlmaWNhdGUgYnkgdXNpbmcgdGhlIG9wZW5zc2wgdG9vbDoKICAgKgogICAqICAgJCBvcGVuc3NsIHg1MDkgLW91dGZvcm0gZGVyIC1pbiBjZXJ0LnBlbSAtb3V0IGNlcnQuZGVyCiAgICovCiAgdm9pZCBzZXRUcnVzdGVkQ2VydGlmaWNhdGVzKFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFNldHMgdGhlIHNldCBvZiB0cnVzdGVkIFg1MDkgY2VydGlmaWNhdGVzIHVzZWQgYnkgW1NlY3VyZVNvY2tldF0KICAgKiBjbGllbnQgY29ubmVjdGlvbnMsIHdoZW4gY29ubmVjdGluZyB0byBhIHNlY3VyZSBzZXJ2ZXIuCiAgICoKICAgKiBMaWtlIFtzZXRUcnVzdGVkQ2VydGlmaWNhdGVzXSBidXQgdGFrZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgogICAqLwogIHZvaWQgc2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzKExpc3Q8aW50PiBjZXJ0Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgY2hhaW4gb2YgWDUwOSBjZXJ0aWZpY2F0ZXMgc2VydmVkIGJ5IFtTZWN1cmVTZXJ2ZXJTb2NrZXRdCiAgICogd2hlbiBtYWtpbmcgc2VjdXJlIGNvbm5lY3Rpb25zLCBpbmNsdWRpbmcgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS4KICAgKgogICAqIFtmaWxlXSBpcyBhIFBFTSBvciBQS0NTMTIgZmlsZSBjb250YWluaW5nIFg1MDkgY2VydGlmaWNhdGVzLCBzdGFydGluZyB3aXRoCiAgICogdGhlIHJvb3QgYXV0aG9yaXR5IGFuZCBpbnRlcm1lZGlhdGUgYXV0aG9yaXRpZXMgZm9ybWluZyB0aGUgc2lnbmVkCiAgICogY2hhaW4gdG8gdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSwgYW5kIGVuZGluZyB3aXRoIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuCiAgICogVGhlIHByaXZhdGUga2V5IGZvciB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGlzIHNldCBieSBbdXNlUHJpdmF0ZUtleV0uIEZvcgogICAqIFBLQ1MxMiBmaWxlcywgW3Bhc3N3b3JkXSBpcyB0aGUgcGFzc3dvcmQgZm9yIHRoZSBmaWxlLiBGb3IgUEVNIGZpbGVzLAogICAqIFtwYXNzd29yZF0gaXMgaWdub3JlZC4gQXNzdW1pbmcgaXQgaXMgd2VsbC1mb3JtYXR0ZWQsIGFsbAogICAqIG90aGVyIGNvbnRlbnRzIG9mIFtmaWxlXSBhcmUgaWdub3JlZC4KICAgKgogICAqIE5COiBUaGlzIGZ1bmN0aW9uIGNhbGxzIFtGaWxlLnJlYWRBc0J5dGVzU3luY10sIGFuZCB3aWxsIGJsb2NrIG9uIGZpbGUgSU8uCiAgICogUHJlZmVyIHVzaW5nIFt1c2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXNdLgogICAqCiAgICogaU9TIG5vdGU6IEFzIG5vdGVkIGFib3ZlLCBbdXNlUHJpdmF0ZUtleV0gZG9lcyB0aGUgam9iIG9mIGJvdGgKICAgKiB0aGF0IGNhbGwgYW5kIHRoaXMgb25lLiBPbiBpT1MsIHRoaXMgY2FsbCBpcyBhIG5vLW9wLgogICAqLwogIHZvaWQgdXNlQ2VydGlmaWNhdGVDaGFpbihTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBjaGFpbiBvZiBYNTA5IGNlcnRpZmljYXRlcyBzZXJ2ZWQgYnkgW1NlY3VyZVNlcnZlclNvY2tldF0KICAgKiB3aGVuIG1ha2luZyBzZWN1cmUgY29ubmVjdGlvbnMsIGluY2x1ZGluZyB0aGUgc2VydmVyIGNlcnRpZmljYXRlLgogICAqCiAgICogTGlrZSBbdXNlQ2VydGlmaWNhdGVDaGFpbl0gYnV0IHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KICAgKi8KICB2b2lkIHVzZUNlcnRpZmljYXRlQ2hhaW5CeXRlcyhMaXN0PGludD4gY2hhaW5CeXRlcywge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBsaXN0IG9mIGF1dGhvcml0eSBuYW1lcyB0aGF0IGEgW1NlY3VyZVNlcnZlclNvY2tldF0gd2lsbCBhZHZlcnRpc2UKICAgKiBhcyBhY2NlcHRlZCB3aGVuIHJlcXVlc3RpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUgZnJvbSBhIGNvbm5lY3RpbmcKICAgKiBjbGllbnQuCiAgICoKICAgKiBbZmlsZV0gaXMgYSBQRU0gb3IgUEtDUzEyIGZpbGUgY29udGFpbmluZyB0aGUgYWNjZXB0ZWQgc2lnbmluZwogICAqIGF1dGhvcml0eSBjZXJ0aWZpY2F0ZXMgLSB0aGUgYXV0aG9yaXR5IG5hbWVzIGFyZSBleHRyYWN0ZWQgZnJvbSB0aGUKICAgKiBjZXJ0aWZpY2F0ZXMuIEZvciBQS0NTMTIgZmlsZXMsIFtwYXNzd29yZF0gaXMgdGhlIHBhc3N3b3JkIGZvciB0aGUgZmlsZS4KICAgKiBGb3IgUEVNIGZpbGVzLCBbcGFzc3dvcmRdIGlzIGlnbm9yZWQuIEFzc3VtaW5nIGl0IGlzIHdlbGwtZm9ybWF0dGVkLCBhbGwKICAgKiBvdGhlciBjb250ZW50cyBvZiBbZmlsZV0gYXJlIGlnbm9yZWQuCiAgICoKICAgKiBOQjogVGhpcyBmdW5jdGlvbiBjYWxscyBbRmlsZS5yZWFkQXNCeXRlc1N5bmNdLCBhbmQgd2lsbCBibG9jayBvbiBmaWxlIElPLgogICAqIFByZWZlciB1c2luZyBbc2V0Q2xpZW50QXV0aG9yaXRpZXNCeXRlc10uCiAgICoKICAgKiBpT1Mgbm90ZTogVGhpcyBjYWxsIGlzIG5vdCBzdXBwb3J0ZWQuCiAgICovCiAgdm9pZCBzZXRDbGllbnRBdXRob3JpdGllcyhTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBsaXN0IG9mIGF1dGhvcml0eSBuYW1lcyB0aGF0IGEgW1NlY3VyZVNlcnZlclNvY2tldF0gd2lsbCBhZHZlcnRpc2UKICAgKiBhcyBhY2NlcHRlZCwgd2hlbiByZXF1ZXN0aW5nIGEgY2xpZW50IGNlcnRpZmljYXRlIGZyb20gYSBjb25uZWN0aW5nCiAgICogY2xpZW50LgogICAqCiAgICogTGlrZSBbc2V0Q2xpZW50QXV0aG9yaXRpZXNdIGJ1dCB0YWtlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCiAgICovCiAgdm9pZCBzZXRDbGllbnRBdXRob3JpdGllc0J5dGVzKExpc3Q8aW50PiBhdXRoQ2VydEJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIEFMUE4uIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBhbmQgd2lsbCBiZQogICAqIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KICAgKi8KICBAZGVwcmVjYXRlZAogIGV4dGVybmFsIHN0YXRpYyBib29sIGdldCBhbHBuU3VwcG9ydGVkOwoKICAvKioKICAgKiBTZXRzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uLWxldmVsIHByb3RvY29scyBzdXBwb3J0ZWQgYnkgYSBjbGllbnQKICAgKiBjb25uZWN0aW9uIG9yIHNlcnZlciBjb25uZWN0aW9uLiBUaGUgQUxQTiAoYXBwbGljYXRpb24gbGV2ZWwgcHJvdG9jb2wKICAgKiBuZWdvdGlhdGlvbikgZXh0ZW5zaW9uIHRvIFRMUyBhbGxvd3MgYSBjbGllbnQgdG8gc2VuZCBhIGxpc3Qgb2YKICAgKiBwcm90b2NvbHMgaW4gdGhlIFRMUyBjbGllbnQgaGVsbG8gbWVzc2FnZSwgYW5kIHRoZSBzZXJ2ZXIgdG8gcGljawogICAqIG9uZSBhbmQgc2VuZCB0aGUgc2VsZWN0ZWQgb25lIGJhY2sgaW4gaXRzIHNlcnZlciBoZWxsbyBtZXNzYWdlLgogICAqCiAgICogU2VwYXJhdGUgbGlzdHMgb2YgcHJvdG9jb2xzIGNhbiBiZSBzZW50IGZvciBjbGllbnQgY29ubmVjdGlvbnMgYW5kCiAgICogZm9yIHNlcnZlciBjb25uZWN0aW9ucywgdXNpbmcgdGhlIHNhbWUgU2VjdXJpdHlDb250ZXh0LiAgVGhlIFtpc1NlcnZlcl0KICAgKiBib29sZWFuIGFyZ3VtZW50IHNwZWNpZmllcyB3aGV0aGVyIHRvIHNldCB0aGUgbGlzdCBmb3Igc2VydmVyIGNvbm5lY3Rpb25zCiAgICogb3IgY2xpZW50IGNvbm5lY3Rpb25zLgogICAqLwogIHZvaWQgc2V0QWxwblByb3RvY29scyhMaXN0PFN0cmluZz4gcHJvdG9jb2xzLCBib29sIGlzU2VydmVyKTsKCiAgLy8vIEVuY29kZXMgYSBzZXQgb2Ygc3VwcG9ydGVkIHByb3RvY29scyBmb3IgQUxQTi9OUE4gdXNhZ2UuCiAgLy8vCiAgLy8vIFRoZSBgcHJvdG9jb2xzYCBsaXN0IGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gcHJvdG9jb2xzIGluIGRlc2NlbmRpbmcgb3JkZXIKICAvLy8gb2YgcHJlZmVyZW5jZS4KICAvLy8KICAvLy8gU2VlIFJGQyA3MzAxIChodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzMwMSkgZm9yIHRoZSBlbmNvZGluZyBvZgogIC8vLyBgTGlzdDxTdHJpbmc+IHByb3RvY29sc2A6CiAgLy8vICAgICBvcGFxdWUgUHJvdG9jb2xOYW1lPDEuLjJeOC0xPjsKICAvLy8KICAvLy8gICAgIHN0cnVjdCB7CiAgLy8vICAgICAgICAgUHJvdG9jb2xOYW1lIHByb3RvY29sX25hbWVfbGlzdDwyLi4yXjE2LTE+CiAgLy8vICAgICB9IFByb3RvY29sTmFtZUxpc3Q7CiAgLy8vCiAgLy8vIFRoZSBlbmNvZGluZyBvZiB0aGUgb3BhcXVlIGBQcm90b2NvbE5hbWU8bG93ZXIuLnVwcGVyPmAgdmVjdG9yIGlzCiAgLy8vIGRlc2NyaWJlZCBpbiBSRkMgMjI0NjogNC4zIFZlY3RvcnMuCiAgLy8vCiAgLy8vIE5vdGU6IEV2ZW4gdGhvdWdoIHRoaXMgZW5jb2Rpbmcgc2NoZW1lIHdvdWxkIGFsbG93IGEgdG90YWwKICAvLy8gYFByb3RvY29sTmFtZUxpc3RgIGxlbmd0aCBvZiA2NTUzNSwgdGhpcyBsaW1pdCBjYW5ub3QgYmUgcmVhY2hlZC4gVGVzdGluZwogIC8vLyBzaG93ZWQgdGhhdCBtb3JlIHRoYW4gfiAyXjE0ICBieXRlcyB3aWxsIGZhaWwgdG8gbmVnb3RpYXRlIGEgcHJvdG9jb2wuCiAgLy8vIFdlIHdpbGwgYmUgY29uc2VydmF0aXZlIGFuZCBzdXBwb3J0IG9ubHkgbWVzc2FnZXMgdXAgdG8gKDE8PDEzKS0xIGJ5dGVzLgogIHN0YXRpYyBVaW50OExpc3QgX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2RpbmcoTGlzdDxTdHJpbmc+IHByb3RvY29scykgewogICAgaWYgKHByb3RvY29scyA9PSBudWxsIHx8IHByb3RvY29scy5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdCgwKTsKICAgIH0KICAgIGludCBwcm90b2NvbHNMZW5ndGggPSBwcm90b2NvbHMubGVuZ3RoOwoKICAgIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIHdpbGwgbmVlZCBpZiBpdCBpcyBBU0NJSS4KICAgIGludCBleHBlY3RlZExlbmd0aCA9IHByb3RvY29sc0xlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvdG9jb2xzTGVuZ3RoOyBpKyspIHsKICAgICAgaW50IGxlbmd0aCA9IHByb3RvY29sc1tpXS5sZW5ndGg7CiAgICAgIGlmIChsZW5ndGggPiAwICYmIGxlbmd0aCA8PSAyNTUpIHsKICAgICAgICBleHBlY3RlZExlbmd0aCArPSBsZW5ndGg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICdMZW5ndGggb2YgcHJvdG9jb2wgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSAod2FzOiAkbGVuZ3RoKS4nKTsKICAgICAgfQogICAgfQoKICAgIGlmIChleHBlY3RlZExlbmd0aCA+PSAoMSA8PCAxMykpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnVGhlIG1heGltdW0gbWVzc2FnZSBsZW5ndGggc3VwcG9ydGVkIGlzIDJeMTMtMS4nKTsKICAgIH0KCiAgICAvLyBUcnkgZW5jb2RpbmcgdGhlIGBMaXN0PFN0cmluZz4gcHJvdG9jb2xzYCBhcnJheSB1c2luZyBmYXN0IEFTQ0lJIHBhdGguCiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhMaXN0KGV4cGVjdGVkTGVuZ3RoKTsKICAgIGludCBieXRlc09mZnNldCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvY29sc0xlbmd0aDsgaSsrKSB7CiAgICAgIFN0cmluZyBwcm90byA9IHByb3RvY29sc1tpXTsKCiAgICAgIC8vIEFkZCBsZW5ndGggYnl0ZS4KICAgICAgYnl0ZXNbYnl0ZXNPZmZzZXQrK10gPSBwcm90by5sZW5ndGg7CiAgICAgIGludCBiaXRzID0gMDsKCiAgICAgIC8vIEFkZCBwcm90b2NvbCBieXRlcy4KICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwcm90by5sZW5ndGg7IGorKykgewogICAgICAgIHZhciBjaGFyID0gcHJvdG8uY29kZVVuaXRBdChqKTsKICAgICAgICBiaXRzIHw9IGNoYXI7CiAgICAgICAgYnl0ZXNbYnl0ZXNPZmZzZXQrK10gPSBjaGFyICYgMHhmZjsKICAgICAgfQoKICAgICAgLy8gR28gc2xvdyBjYXNlIGlmIHdlIGhhdmUgZW5jb3VudGVyZWQgYW55dGhpbmcgbm9uLWFzY2lpLgogICAgICBpZiAoYml0cyA+IDB4N2YpIHsKICAgICAgICByZXR1cm4gX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2RpbmdOb25Bc2NpaUJhaWxvdXQocHJvdG9jb2xzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ5dGVzOwogIH0KCiAgc3RhdGljIFVpbnQ4TGlzdCBfcHJvdG9jb2xzVG9MZW5ndGhFbmNvZGluZ05vbkFzY2lpQmFpbG91dCgKICAgICAgTGlzdDxTdHJpbmc+IHByb3RvY29scykgewogICAgdm9pZCBhZGRQcm90b2NvbChMaXN0PGludD4gb3V0Qnl0ZXMsIFN0cmluZyBwcm90b2NvbCkgewogICAgICB2YXIgcHJvdG9jb2xCeXRlcyA9IHV0ZjguZW5jb2RlKHByb3RvY29sKTsKICAgICAgdmFyIGxlbiA9IHByb3RvY29sQnl0ZXMubGVuZ3RoOwoKICAgICAgaWYgKGxlbiA+IDI1NSkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAnTGVuZ3RoIG9mIHByb3RvY29sIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgKHdhczogJGxlbiknKTsKICAgICAgfQogICAgICAvLyBBZGQgbGVuZ3RoIGJ5dGUuCiAgICAgIG91dEJ5dGVzLmFkZChsZW4pOwoKICAgICAgLy8gQWRkIHByb3RvY29sIGJ5dGVzLgogICAgICBvdXRCeXRlcy5hZGRBbGwocHJvdG9jb2xCeXRlcyk7CiAgICB9CgogICAgTGlzdDxpbnQ+IGJ5dGVzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3RvY29scy5sZW5ndGg7IGkrKykgewogICAgICBhZGRQcm90b2NvbChieXRlcywgcHJvdG9jb2xzW2ldKTsKICAgIH0KCiAgICBpZiAoYnl0ZXMubGVuZ3RoID49ICgxIDw8IDEzKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICdUaGUgbWF4aW11bSBtZXNzYWdlIGxlbmd0aCBzdXBwb3J0ZWQgaXMgMl4xMy0xLicpOwogICAgfQoKICAgIHJldHVybiBuZXcgVWludDhMaXN0LmZyb21MaXN0KGJ5dGVzKTsKICB9Cn0KgR0ATk48AREBBD89LgNPNQNLGQNPSjgEIQYmBVE+BU5NRkhPUBUGRAEGREI/O0NOSkwnBjYBBkoFS0RIUEwcBVAoBVFRRBYGNgEGSgVIDwZCAQZGPQVOT0tODgVQMQVHRk1PBT4GPwEGRj0FRwZMAQZIRwVQSE5PSz8rBVAuBUQ7BjwBBkhHBUQGSgEGUUgNBURJTk4rBVAvBSsGPQEGUUkNBUUGTgEGTiIGDioBBkhLRUdFBUhNTxwGQAE/BlAVBk0gKQYTOR4GSCoGQVBNT0g2HwYsAUIqMCgpIg8hTQgGAScfPgYBTi8ZMCMBGisUAR0vKBYsCAFBGUUIBhIEAT4gPDEmARchSQgaGQEdJgYBGjEoBgElHz4GASoEAgEdZGFydDppby9zZWN1cml0eV9jb250ZXh0LmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3NvY2tldC5kYXJ0wACA2S8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogW0ludGVybmV0QWRkcmVzc1R5cGVdIGlzIHRoZSB0eXBlIGFuIFtJbnRlcm5ldEFkZHJlc3NdLiBDdXJyZW50bHksCiAqIElQIHZlcnNpb24gNCAoSVB2NCkgYW5kIElQIHZlcnNpb24gNiAoSVB2NikgYXJlIHN1cHBvcnRlZC4KICovCmNsYXNzIEludGVybmV0QWRkcmVzc1R5cGUgewogIHN0YXRpYyBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlIElQdjQgPSBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlLl8oMCk7CiAgc3RhdGljIGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUgSVB2NiA9IGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUuXygxKTsKICBzdGF0aWMgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZSBhbnkgPSBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlLl8oLTEpOwoKICBARGVwcmVjYXRlZCgiVXNlIElQdjQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUgSVBfVjQgPSBJUHY0OwogIEBEZXByZWNhdGVkKCJVc2UgSVB2NiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZSBJUF9WNiA9IElQdjY7CiAgQERlcHJlY2F0ZWQoIlVzZSBhbnkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUgQU5ZID0gYW55OwoKICBmaW5hbCBpbnQgX3ZhbHVlOwoKICBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlLl8odGhpcy5fdmFsdWUpOwoKICBmYWN0b3J5IEludGVybmV0QWRkcmVzc1R5cGUuX2Zyb20oaW50IHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuIElQdjQ7CiAgICBpZiAodmFsdWUgPT0gMSkgcmV0dXJuIElQdjY7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCB0eXBlOiAkdmFsdWUiKTsKICB9CgogIC8qKgogICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgdHlwZSwgZS5nLiAiSVB2NCIgb3IgIklQdjYiLgogICAqLwogIFN0cmluZyBnZXQgbmFtZSB7CiAgICBzd2l0Y2ggKF92YWx1ZSkgewogICAgICBjYXNlIC0xOgogICAgICAgIHJldHVybiAiQU5ZIjsKICAgICAgY2FzZSAwOgogICAgICAgIHJldHVybiAiSVB2NCI7CiAgICAgIGNhc2UgMToKICAgICAgICByZXR1cm4gIklQdjYiOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIEludGVybmV0QWRkcmVzcyIpOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkludGVybmV0QWRkcmVzc1R5cGU6ICRuYW1lIjsKfQoKLyoqCiAqIEFuIGludGVybmV0IGFkZHJlc3MuCiAqCiAqIFRoaXMgb2JqZWN0IGhvbGRzIGFuIGludGVybmV0IGFkZHJlc3MuIElmIHRoaXMgaW50ZXJuZXQgYWRkcmVzcwogKiBpcyB0aGUgcmVzdWx0IG9mIGEgRE5TIGxvb2t1cCwgdGhlIGFkZHJlc3MgYWxzbyBob2xkcyB0aGUgaG9zdG5hbWUKICogdXNlZCB0byBtYWtlIHRoZSBsb29rdXAuCiAqIEFuIEludGVybmV0IGFkZHJlc3MgY29tYmluZWQgd2l0aCBhIHBvcnQgbnVtYmVyIHJlcHJlc2VudHMgYW4KICogZW5kcG9pbnQgdG8gd2hpY2ggYSBzb2NrZXQgY2FuIGNvbm5lY3Qgb3IgYSBsaXN0ZW5pbmcgc29ja2V0IGNhbgogKiBiaW5kLgogKi8KYWJzdHJhY3QgY2xhc3MgSW50ZXJuZXRBZGRyZXNzIHsKICAvKioKICAgKiBJUCB2ZXJzaW9uIDQgbG9vcGJhY2sgYWRkcmVzcy4gVXNlIHRoaXMgYWRkcmVzcyB3aGVuIGxpc3RlbmluZyBvbgogICAqIG9yIGNvbm5lY3RpbmcgdG8gdGhlIGxvb3BiYWNrIGFkYXB0ZXIgdXNpbmcgSVAgdmVyc2lvbiA0IChJUHY0KS4KICAgKi8KICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBsb29wYmFja0lQdjQgPT4gTE9PUEJBQ0tfSVBfVjQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBsb29wYmFja0lQdjQgaW5zdGVhZCIpCiAgZXh0ZXJuYWwgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgTE9PUEJBQ0tfSVBfVjQ7CgogIC8qKgogICAqIElQIHZlcnNpb24gNiBsb29wYmFjayBhZGRyZXNzLiBVc2UgdGhpcyBhZGRyZXNzIHdoZW4gbGlzdGVuaW5nIG9uCiAgICogb3IgY29ubmVjdGluZyB0byB0aGUgbG9vcGJhY2sgYWRhcHRlciB1c2luZyBJUCB2ZXJzaW9uIDYgKElQdjYpLgogICAqLwogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IGxvb3BiYWNrSVB2NiA9PiBMT09QQkFDS19JUF9WNjsKICBARGVwcmVjYXRlZCgiVXNlIGxvb3BiYWNrSVB2NiBpbnN0ZWFkIikKICBleHRlcm5hbCBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBMT09QQkFDS19JUF9WNjsKCiAgLyoqCiAgICogSVAgdmVyc2lvbiA0IGFueSBhZGRyZXNzLiBVc2UgdGhpcyBhZGRyZXNzIHdoZW4gbGlzdGVuaW5nIG9uCiAgICogYWxsIGFkYXB0ZXJzIElQIGFkZHJlc3NlcyB1c2luZyBJUCB2ZXJzaW9uIDQgKElQdjQpLgogICAqLwogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFueUlQdjQgPT4gQU5ZX0lQX1Y0OwogIEBEZXByZWNhdGVkKCJVc2UgYW55SVB2NCBpbnN0ZWFkIikKICBleHRlcm5hbCBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBBTllfSVBfVjQ7CgogIC8qKgogICAqIElQIHZlcnNpb24gNiBhbnkgYWRkcmVzcy4gVXNlIHRoaXMgYWRkcmVzcyB3aGVuIGxpc3RlbmluZyBvbgogICAqIGFsbCBhZGFwdGVycyBJUCBhZGRyZXNzZXMgdXNpbmcgSVAgdmVyc2lvbiA2IChJUHY2KS4KICAgKi8KICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBhbnlJUHY2ID0+IEFOWV9JUF9WNjsKICBARGVwcmVjYXRlZCgiVXNlIGFueUlQdjYgaW5zdGVhZCIpCiAgZXh0ZXJuYWwgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgQU5ZX0lQX1Y2OwoKICAvKioKICAgKiBUaGUgW3R5cGVdIG9mIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSBzcGVjaWZpZWQgd2hhdCBJUCBwcm90b2NvbC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3NUeXBlIGdldCB0eXBlOwoKICAvKioKICAgKiBUaGUgbnVtZXJpYyBhZGRyZXNzIG9mIHRoZSBob3N0LiBGb3IgSVB2NCBhZGRyZXNzZXMgdGhpcyBpcyB1c2luZwogICAqIHRoZSBkb3R0ZWQtZGVjaW1hbCBub3RhdGlvbi4gRm9yIElQdjYgaXQgaXMgdXNpbmcgdGhlCiAgICogaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uCiAgICovCiAgU3RyaW5nIGdldCBhZGRyZXNzOwoKICAvKioKICAgKiBUaGUgaG9zdCB1c2VkIHRvIGxvb2t1cCB0aGUgYWRkcmVzcy4gSWYgdGhlcmUgaXMgbm8gaG9zdAogICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWRkcmVzcyB0aGlzIHJldHVybnMgdGhlIG51bWVyaWMgYWRkcmVzcy4KICAgKi8KICBTdHJpbmcgZ2V0IGhvc3Q7CgogIC8qKgogICAqIEdldCB0aGUgcmF3IGFkZHJlc3Mgb2YgdGhpcyBbSW50ZXJuZXRBZGRyZXNzXS4gVGhlIHJlc3VsdCBpcyBlaXRoZXIgYQogICAqIDQgb3IgMTYgYnl0ZSBsb25nIGxpc3QuIFRoZSByZXR1cm5lZCBsaXN0IGlzIGEgY29weSwgbWFraW5nIGl0IHBvc3NpYmxlCiAgICogdG8gY2hhbmdlIHRoZSBsaXN0IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBbSW50ZXJuZXRBZGRyZXNzXS4KICAgKi8KICBVaW50OExpc3QgZ2V0IHJhd0FkZHJlc3M7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgW0ludGVybmV0QWRkcmVzc10gaXMgYSBsb29wYmFjayBhZGRyZXNzLgogICAqLwogIGJvb2wgZ2V0IGlzTG9vcGJhY2s7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgW0ludGVybmV0QWRkcmVzc11zIHNjb3BlIGlzIGEgbGluay1sb2NhbC4KICAgKi8KICBib29sIGdldCBpc0xpbmtMb2NhbDsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBbSW50ZXJuZXRBZGRyZXNzXXMgc2NvcGUgaXMgbXVsdGljYXN0LgogICAqLwogIGJvb2wgZ2V0IGlzTXVsdGljYXN0OwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtJbnRlcm5ldEFkZHJlc3NdIGZyb20gYSBudW1lcmljIGFkZHJlc3MuCiAgICoKICAgKiBJZiB0aGUgYWRkcmVzcyBpbiBbYWRkcmVzc10gaXMgbm90IGEgbnVtZXJpYyBJUHY0CiAgICogKGRvdHRlZC1kZWNpbWFsIG5vdGF0aW9uKSBvciBJUHY2IChoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbikuCiAgICogYWRkcmVzcyBbQXJndW1lbnRFcnJvcl0gaXMgdGhyb3duLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50ZXJuZXRBZGRyZXNzKFN0cmluZyBhZGRyZXNzKTsKCiAgLyoqCiAgICogUGVyZm9ybSBhIHJldmVyc2UgZG5zIGxvb2t1cCBvbiB0aGUgW2FkZHJlc3NdLCBjcmVhdGluZyBhIG5ldwogICAqIFtJbnRlcm5ldEFkZHJlc3NdIHdoZXJlIHRoZSBob3N0IGZpZWxkIHNldCB0byB0aGUgcmVzdWx0LgogICAqLwogIEZ1dHVyZTxJbnRlcm5ldEFkZHJlc3M+IHJldmVyc2UoKTsKCiAgLyoqCiAgICogTG9va3VwIGEgaG9zdCwgcmV0dXJuaW5nIGEgRnV0dXJlIG9mIGEgbGlzdCBvZgogICAqIFtJbnRlcm5ldEFkZHJlc3Ndcy4gSWYgW3R5cGVdIGlzIFtJbnRlcm5ldEFkZHJlc3NUeXBlLkFOWV0sIGl0CiAgICogd2lsbCBsb29rdXAgYm90aCBJUCB2ZXJzaW9uIDQgKElQdjQpIGFuZCBJUCB2ZXJzaW9uIDYgKElQdjYpCiAgICogYWRkcmVzc2VzLiBJZiBbdHlwZV0gaXMgZWl0aGVyIFtJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzc1R5cGUuSVB2Nl0gaXQgd2lsbCBvbmx5IGxvb2t1cCBhZGRyZXNzZXMgb2YgdGhlCiAgICogc3BlY2lmaWVkIHR5cGUuIFRoZSBvcmRlciBvZiB0aGUgbGlzdCBjYW4sIGFuZCBtb3N0IGxpa2VseSB3aWxsLAogICAqIGNoYW5nZSBvdmVyIHRpbWUuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxMaXN0PEludGVybmV0QWRkcmVzcz4+IGxvb2t1cChTdHJpbmcgaG9zdCwKICAgICAge0ludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5hbnl9KTsKCiAgLyoqCiAgICogQ2xvbmVzIHRoZSBnaXZlbiBbYWRkcmVzc10gd2l0aCB0aGUgbmV3IFtob3N0XS4KICAgKgogICAqIFRoZSBbYWRkcmVzc10gbXVzdCBiZSBhbiBbSW50ZXJuZXRBZGRyZXNzXSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggb25lCiAgICogb2YgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHRoaXMgY2xhc3MuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEludGVybmV0QWRkcmVzcyBfY2xvbmVXaXRoTmV3SG9zdCgKICAgICAgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MsIFN0cmluZyBob3N0KTsKfQoKLyoqCiAqIEEgW05ldHdvcmtJbnRlcmZhY2VdIHJlcHJlc2VudHMgYW4gYWN0aXZlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHRoZSBjdXJyZW50CiAqIHN5c3RlbS4gSXQgY29udGFpbnMgYSBsaXN0IG9mIFtJbnRlcm5ldEFkZHJlc3NdZXMgdGhhdCBhcmUgYm91bmQgdG8gdGhlCiAqIGludGVyZmFjZS4KICovCmFic3RyYWN0IGNsYXNzIE5ldHdvcmtJbnRlcmZhY2UgewogIC8qKgogICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgW05ldHdvcmtJbnRlcmZhY2VdLgogICAqLwogIFN0cmluZyBnZXQgbmFtZTsKCiAgLyoqCiAgICogR2V0IHRoZSBpbmRleCBvZiB0aGUgW05ldHdvcmtJbnRlcmZhY2VdLgogICAqLwogIGludCBnZXQgaW5kZXg7CgogIC8qKgogICAqIEdldCBhIGxpc3Qgb2YgW0ludGVybmV0QWRkcmVzc11lcyBjdXJyZW50bHkgYm91bmQgdG8gdGhpcwogICAqIFtOZXR3b3JrSW50ZXJmYWNlXS4KICAgKi8KICBMaXN0PEludGVybmV0QWRkcmVzcz4gZ2V0IGFkZHJlc3NlczsKCiAgLyoqCiAgICogV2hldGhlciBbbGlzdF0gaXMgc3VwcG9ydGVkLgogICAqCiAgICogW2xpc3RdIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBvbiBBbmRyb2lkLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBib29sIGdldCBsaXN0U3VwcG9ydGVkOwoKICAvKioKICAgKiBRdWVyeSB0aGUgc3lzdGVtIGZvciBbTmV0d29ya0ludGVyZmFjZV1zLgogICAqCiAgICogSWYgW2luY2x1ZGVMb29wYmFja10gaXMgYHRydWVgLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIGluY2x1ZGUgdGhlCiAgICogbG9vcGJhY2sgZGV2aWNlLiBEZWZhdWx0IGlzIGBmYWxzZWAuCiAgICoKICAgKiBJZiBbaW5jbHVkZUxpbmtMb2NhbF0gaXMgYHRydWVgLCB0aGUgbGlzdCBvZiBhZGRyZXNzZXMgb2YgdGhlIHJldHVybmVkCiAgICogW05ldHdvcmtJbnRlcmZhY2VdcywgbWF5IGluY2x1ZGUgbGluayBsb2NhbCBhZGRyZXNzZXMuIERlZmF1bHQgaXMgYGZhbHNlYC4KICAgKgogICAqIElmIFt0eXBlXSBpcyBlaXRoZXIgW0ludGVybmV0QWRkcmVzc1R5cGUuSVB2NF0gb3IKICAgKiBbSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY2XSBpdCB3aWxsIG9ubHkgbG9va3VwIGFkZHJlc3NlcyBvZiB0aGUKICAgKiBzcGVjaWZpZWQgdHlwZS4gRGVmYXVsdCBpcyBbSW50ZXJuZXRBZGRyZXNzVHlwZS5hbnldLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8TGlzdDxOZXR3b3JrSW50ZXJmYWNlPj4gbGlzdCgKICAgICAge2Jvb2wgaW5jbHVkZUxvb3BiYWNrOiBmYWxzZSwKICAgICAgYm9vbCBpbmNsdWRlTGlua0xvY2FsOiBmYWxzZSwKICAgICAgSW50ZXJuZXRBZGRyZXNzVHlwZSB0eXBlOiBJbnRlcm5ldEFkZHJlc3NUeXBlLmFueX0pOwp9CgovKioKICogQSBbUmF3U2VydmVyU29ja2V0XSByZXByZXNlbnRzIGEgbGlzdGVuaW5nIHNvY2tldCwgYW5kIHByb3ZpZGVzIGEKICogc3RyZWFtIG9mIGxvdy1sZXZlbCBbUmF3U29ja2V0XSBvYmplY3RzLCBvbmUgZm9yIGVhY2ggY29ubmVjdGlvbgogKiBtYWRlIHRvIHRoZSBsaXN0ZW5pbmcgc29ja2V0LgogKgogKiBTZWUgW1Jhd1NvY2tldF0gZm9yIG1vcmUgaW5mby4KICovCmFic3RyYWN0IGNsYXNzIFJhd1NlcnZlclNvY2tldCBpbXBsZW1lbnRzIFN0cmVhbTxSYXdTb2NrZXQ+IHsKICAvKioKICAgKiBSZXR1cm5zIGEgZnV0dXJlIGZvciBhIFs6UmF3U2VydmVyU29ja2V0Ol0uIFdoZW4gdGhlIGZ1dHVyZQogICAqIGNvbXBsZXRlcyB0aGUgc2VydmVyIHNvY2tldCBpcyBib3VuZCB0byB0aGUgZ2l2ZW4gW2FkZHJlc3NdIGFuZAogICAqIFtwb3J0XSBhbmQgaGFzIHN0YXJ0ZWQgbGlzdGVuaW5nIG9uIGl0LgogICAqCiAgICogVGhlIFthZGRyZXNzXSBjYW4gZWl0aGVyIGJlIGEgW1N0cmluZ10gb3IgYW4KICAgKiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2FkZHJlc3NdIGlzIGEgW1N0cmluZ10sIFtiaW5kXSB3aWxsCiAgICogcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdXNlIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUKICAgKiBsaXN0LiBUbyBsaXN0ZW4gb24gdGhlIGxvb3BiYWNrIGFkYXB0ZXIsIHdoaWNoIHdpbGwgYWxsb3cgb25seQogICAqIGluY29taW5nIGNvbm5lY3Rpb25zIGZyb20gdGhlIGxvY2FsIGhvc3QsIHVzZSB0aGUgdmFsdWUKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NF0gb3IKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2Nl0uIFRvIGFsbG93IGZvciBpbmNvbWluZwogICAqIGNvbm5lY3Rpb24gZnJvbSB0aGUgbmV0d29yayB1c2UgZWl0aGVyIG9uZSBvZiB0aGUgdmFsdWVzCiAgICogW0ludGVybmV0QWRkcmVzcy5hbnlJUHY0XSBvciBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjZdIHRvCiAgICogYmluZCB0byBhbGwgaW50ZXJmYWNlcyBvciB0aGUgSVAgYWRkcmVzcyBvZiBhIHNwZWNpZmljIGludGVyZmFjZS4KICAgKgogICAqIElmIGFuIElQIHZlcnNpb24gNiAoSVB2NikgYWRkcmVzcyBpcyB1c2VkLCBib3RoIElQIHZlcnNpb24gNgogICAqIChJUHY2KSBhbmQgdmVyc2lvbiA0IChJUHY0KSBjb25uZWN0aW9ucyB3aWxsIGJlIGFjY2VwdGVkLiBUbwogICAqIHJlc3RyaWN0IHRoaXMgdG8gdmVyc2lvbiA2IChJUHY2KSBvbmx5LCB1c2UgW3Y2T25seV0gdG8gc2V0CiAgICogdmVyc2lvbiA2IG9ubHkuCiAgICoKICAgKiBJZiBbcG9ydF0gaGFzIHRoZSB2YWx1ZSBbOjA6XSBhbiBlcGhlbWVyYWwgcG9ydCB3aWxsCiAgICogYmUgY2hvc2VuIGJ5IHRoZSBzeXN0ZW0uIFRoZSBhY3R1YWwgcG9ydCB1c2VkIGNhbiBiZSByZXRyaWV2ZWQKICAgKiB1c2luZyB0aGUgWzpwb3J0Ol0gZ2V0dGVyLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtiYWNrbG9nXSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsaXN0ZW4KICAgKiBiYWNrbG9nIGZvciB0aGUgdW5kZXJseWluZyBPUyBsaXN0ZW4gc2V0dXAuIElmIFtiYWNrbG9nXSBoYXMgdGhlCiAgICogdmFsdWUgb2YgWzowOl0gKHRoZSBkZWZhdWx0KSBhIHJlYXNvbmFibGUgdmFsdWUgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtzaGFyZWRdIHNwZWNpZmllcyB3aGV0aGVyIGFkZGl0aW9uYWwgUmF3U2VydmVyU29ja2V0CiAgICogb2JqZWN0cyBjYW4gYmluZCB0byB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZiBgYWRkcmVzc2AsIGBwb3J0YCBhbmQgYHY2T25seWAuCiAgICogSWYgYHNoYXJlZGAgaXMgYHRydWVgIGFuZCBtb3JlIGBSYXdTZXJ2ZXJTb2NrZXRgcyBmcm9tIHRoaXMgaXNvbGF0ZSBvcgogICAqIG90aGVyIGlzb2xhdGVzIGFyZSBib3VuZCB0byB0aGUgcG9ydCwgdGhlbiB0aGUgaW5jb21pbmcgY29ubmVjdGlvbnMgd2lsbCBiZQogICAqIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUgYm91bmQgYFJhd1NlcnZlclNvY2tldGBzLiBDb25uZWN0aW9ucyBjYW4gYmUKICAgKiBkaXN0cmlidXRlZCBvdmVyIG11bHRpcGxlIGlzb2xhdGVzIHRoaXMgd2F5LgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8UmF3U2VydmVyU29ja2V0PiBiaW5kKGFkZHJlc3MsIGludCBwb3J0LAogICAgICB7aW50IGJhY2tsb2c6IDAsIGJvb2wgdjZPbmx5OiBmYWxzZSwgYm9vbCBzaGFyZWQ6IGZhbHNlfSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFkZHJlc3MgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc29ja2V0LiBUaGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aGVuIHRoZSBzb2NrZXQKICAgKiBpcyBmdWxseSBjbG9zZWQgYW5kIGlzIG5vIGxvbmdlciBib3VuZC4KICAgKi8KICBGdXR1cmU8UmF3U2VydmVyU29ja2V0PiBjbG9zZSgpOwp9CgovKioKICogQSBbU2VydmVyU29ja2V0XSByZXByZXNlbnRzIGEgbGlzdGVuaW5nIHNvY2tldCwgYW5kIHByb3ZpZGVzIGEKICogc3RyZWFtIG9mIFtTb2NrZXRdIG9iamVjdHMsIG9uZSBmb3IgZWFjaCBjb25uZWN0aW9uIG1hZGUgdG8gdGhlCiAqIGxpc3RlbmluZyBzb2NrZXQuCiAqCiAqIFNlZSBbU29ja2V0XSBmb3IgbW9yZSBpbmZvLgogKi8KYWJzdHJhY3QgY2xhc3MgU2VydmVyU29ja2V0IGltcGxlbWVudHMgU3RyZWFtPFNvY2tldD4gewogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgZm9yIGEgWzpTZXJ2ZXJTb2NrZXQ6XS4gV2hlbiB0aGUgZnV0dXJlCiAgICogY29tcGxldGVzIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIGJvdW5kIHRvIHRoZSBnaXZlbiBbYWRkcmVzc10gYW5kCiAgICogW3BvcnRdIGFuZCBoYXMgc3RhcnRlZCBsaXN0ZW5pbmcgb24gaXQuCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgYW4gSVAgdmVyc2lvbiA2IChJUHY2KSBhZGRyZXNzIGlzIHVzZWQsIGJvdGggSVAgdmVyc2lvbiA2CiAgICogKElQdjYpIGFuZCB2ZXJzaW9uIDQgKElQdjQpIGNvbm5lY3Rpb25zIHdpbGwgYmUgYWNjZXB0ZWQuIFRvCiAgICogcmVzdHJpY3QgdGhpcyB0byB2ZXJzaW9uIDYgKElQdjYpIG9ubHksIHVzZSBbdjZPbmx5XSB0byBzZXQKICAgKiB2ZXJzaW9uIDYgb25seS4KICAgKgogICAqIElmIFtwb3J0XSBoYXMgdGhlIHZhbHVlIFs6MDpdIGFuIGVwaGVtZXJhbCBwb3J0IHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4gVGhlIGFjdHVhbCBwb3J0IHVzZWQgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUKICAgKiBbcG9ydF0gZ2V0dGVyLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtiYWNrbG9nXSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsaXN0ZW4KICAgKiBiYWNrbG9nIGZvciB0aGUgdW5kZXJseWluZyBPUyBsaXN0ZW4gc2V0dXAuIElmIFtiYWNrbG9nXSBoYXMgdGhlCiAgICogdmFsdWUgb2YgWzowOl0gKHRoZSBkZWZhdWx0KSBhIHJlYXNvbmFibGUgdmFsdWUgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLgogICAqCiAgICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFtzaGFyZWRdIHNwZWNpZmllcyB3aGV0aGVyIGFkZGl0aW9uYWwgU2VydmVyU29ja2V0CiAgICogb2JqZWN0cyBjYW4gYmluZCB0byB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZiBgYWRkcmVzc2AsIGBwb3J0YCBhbmQgYHY2T25seWAuCiAgICogSWYgYHNoYXJlZGAgaXMgYHRydWVgIGFuZCBtb3JlIGBTZXJ2ZXJTb2NrZXRgcyBmcm9tIHRoaXMgaXNvbGF0ZSBvciBvdGhlcgogICAqIGlzb2xhdGVzIGFyZSBib3VuZCB0byB0aGUgcG9ydCwgdGhlbiB0aGUgaW5jb21pbmcgY29ubmVjdGlvbnMgd2lsbCBiZQogICAqIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUgYm91bmQgYFNlcnZlclNvY2tldGBzLiBDb25uZWN0aW9ucyBjYW4gYmUKICAgKiBkaXN0cmlidXRlZCBvdmVyIG11bHRpcGxlIGlzb2xhdGVzIHRoaXMgd2F5LgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8U2VydmVyU29ja2V0PiBiaW5kKGFkZHJlc3MsIGludCBwb3J0LAogICAgICB7aW50IGJhY2tsb2c6IDAsIGJvb2wgdjZPbmx5OiBmYWxzZSwgYm9vbCBzaGFyZWQ6IGZhbHNlfSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFkZHJlc3MgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc29ja2V0LiBUaGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aGVuIHRoZSBzb2NrZXQKICAgKiBpcyBmdWxseSBjbG9zZWQgYW5kIGlzIG5vIGxvbmdlciBib3VuZC4KICAgKi8KICBGdXR1cmU8U2VydmVyU29ja2V0PiBjbG9zZSgpOwp9CgovKioKICogVGhlIFtTb2NrZXREaXJlY3Rpb25dIGlzIHVzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gW1NvY2tldC5jbG9zZV0gYW5kCiAqIFtSYXdTb2NrZXQuY2xvc2VdIHRvIGNsb3NlIGEgc29ja2V0IGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uKHMpLgogKi8KY2xhc3MgU29ja2V0RGlyZWN0aW9uIHsKICBzdGF0aWMgY29uc3QgU29ja2V0RGlyZWN0aW9uIHJlY2VpdmUgPSBjb25zdCBTb2NrZXREaXJlY3Rpb24uXygwKTsKICBzdGF0aWMgY29uc3QgU29ja2V0RGlyZWN0aW9uIHNlbmQgPSBjb25zdCBTb2NrZXREaXJlY3Rpb24uXygxKTsKICBzdGF0aWMgY29uc3QgU29ja2V0RGlyZWN0aW9uIGJvdGggPSBjb25zdCBTb2NrZXREaXJlY3Rpb24uXygyKTsKCiAgQERlcHJlY2F0ZWQoIlVzZSByZWNlaXZlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTb2NrZXREaXJlY3Rpb24gUkVDRUlWRSA9IHJlY2VpdmU7CiAgQERlcHJlY2F0ZWQoIlVzZSBzZW5kIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTb2NrZXREaXJlY3Rpb24gU0VORCA9IHNlbmQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBib3RoIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTb2NrZXREaXJlY3Rpb24gQk9USCA9IGJvdGg7CgogIGZpbmFsIF92YWx1ZTsKCiAgY29uc3QgU29ja2V0RGlyZWN0aW9uLl8odGhpcy5fdmFsdWUpOwp9CgovKioKICogVGhlIFtTb2NrZXRPcHRpb25dIGlzIHVzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gW1NvY2tldC5zZXRPcHRpb25dIGFuZAogKiBbUmF3U29ja2V0LnNldE9wdGlvbl0gdG8gc2V0IGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3VyIG9mIHRoZSB1bmRlcmx5aW5nCiAqIHNvY2tldC4KICovCmNsYXNzIFNvY2tldE9wdGlvbiB7CiAgLyoqCiAgICogRW5hYmxlIG9yIGRpc2FibGUgbm8tZGVsYXkgb24gdGhlIHNvY2tldC4gSWYgdGNwTm9EZWxheSBpcyBlbmFibGVkLCB0aGUKICAgKiBzb2NrZXQgd2lsbCBub3QgYnVmZmVyIGRhdGEgaW50ZXJuYWxseSwgYnV0IGluc3RlYWQgd3JpdGUgZWFjaCBkYXRhIGNodW5rCiAgICogYXMgYW4gaW5kaXZpZHVhbCBUQ1AgcGFja2V0LgogICAqCiAgICogdGNwTm9EZWxheSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgogICAqLwogIHN0YXRpYyBjb25zdCBTb2NrZXRPcHRpb24gdGNwTm9EZWxheSA9IGNvbnN0IFNvY2tldE9wdGlvbi5fKDApOwogIEBEZXByZWNhdGVkKCJVc2UgdGNwTm9EZWxheSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU29ja2V0T3B0aW9uIFRDUF9OT0RFTEFZID0gdGNwTm9EZWxheTsKCiAgc3RhdGljIGNvbnN0IFNvY2tldE9wdGlvbiBfaXBNdWx0aWNhc3RMb29wID0gY29uc3QgU29ja2V0T3B0aW9uLl8oMSk7CiAgc3RhdGljIGNvbnN0IFNvY2tldE9wdGlvbiBfaXBNdWx0aWNhc3RIb3BzID0gY29uc3QgU29ja2V0T3B0aW9uLl8oMik7CiAgc3RhdGljIGNvbnN0IFNvY2tldE9wdGlvbiBfaXBNdWx0aWNhc3RJZiA9IGNvbnN0IFNvY2tldE9wdGlvbi5fKDMpOwogIHN0YXRpYyBjb25zdCBTb2NrZXRPcHRpb24gX2lwQnJvYWRjYXN0ID0gY29uc3QgU29ja2V0T3B0aW9uLl8oNCk7CgogIGZpbmFsIF92YWx1ZTsKCiAgY29uc3QgU29ja2V0T3B0aW9uLl8odGhpcy5fdmFsdWUpOwp9CgovLyBNdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIGVudW0gaW4gc29ja2V0LmNjCmVudW0gX1Jhd1NvY2tldE9wdGlvbnMgewogIFNPTF9TT0NLRVQsIC8vIDAKICBJUFBST1RPX0lQLCAvLyAxCiAgSVBfTVVMVElDQVNUX0lGLCAvLyAyCiAgSVBQUk9UT19JUFY2LCAvLyAzCiAgSVBWNl9NVUxUSUNBU1RfSUYsIC8vIDQKICBJUFBST1RPX1RDUCwgLy8gNQogIElQUFJPVE9fVURQLCAvLyA2Cn0KCi8vLyBUaGUgW1Jhd1NvY2tldE9wdGlvbl0gaXMgdXNlZCBhcyBhIHBhcmFtZXRlciB0byBbU29ja2V0LnNldFJhd09wdGlvbl0gYW5kCi8vLyBbUmF3U29ja2V0LnNldFJhd09wdGlvbl0gdG8gc2V0IGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3VyIG9mIHRoZSB1bmRlcmx5aW5nCi8vLyBzb2NrZXQuCi8vLwovLy8gSXQgYWxsb3dzIGZvciBmaW5lIGdyYWluZWQgY29udHJvbCBvZiB0aGUgc29ja2V0IG9wdGlvbnMsIGFuZCBpdHMgdmFsdWVzIHdpbGwKLy8vIGJlIHBhc3NlZCB0byB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSdzIGltcGxlbWVudGF0aW9uIG9mIHNldHNvY2tvcHQgYW5kCi8vLyBnZXRzb2Nrb3B0LgpAU2luY2UoIjIuMiIpCmNsYXNzIFJhd1NvY2tldE9wdGlvbiB7CiAgLy8vIENyZWF0ZXMgYSBSYXdTb2NrZXRPcHRpb24gZm9yIGdldFJhd09wdGlvbiBhbmRTZXRSYXdPcHRpb24uCiAgLy8vCiAgLy8vIEFsbCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIGFuZCBtdXN0IG5vdCBiZSBudWxsLgogIC8vLwogIC8vLyBUaGUgbGV2ZWwgYW5kIG9wdGlvbiBhcmd1bWVudHMgY29ycmVzcG9uZCB0byBsZXZlbCBhbmQgb3B0bmFtZSBhcmd1bWVudHMKICAvLy8gb24gdGhlIGdldC9zZXRzb2Nrb3B0IG5hdGl2ZSBjYWxscy4KICAvLy8KICAvLy8gVGhlIHZhbHVlIGFyZ3VtZW50IGFuZCBpdHMgbGVuZ3RoIGNvcnJlc3BvbmQgdG8gdGhlIG9wdHZhbCBhbmQgbGVuZ3RoCiAgLy8vIGFyZ3VtZW50cyBvbiB0aGUgbmF0aXZlIGNhbGwuCiAgLy8vCiAgLy8vIEZvciBhIFtnZXRSYXdPcHRpb25dIGNhbGwsIHRoZSB2YWx1ZSBwYXJhbWV0ZXIgd2lsbCBiZSB1cGRhdGVkIGFmdGVyIGEKICAvLy8gc3VjY2Vzc2Z1bCBjYWxsIChhbHRob3VnaCBpdHMgbGVuZ3RoIHdpbGwgbm90IGJlIGNoYW5nZWQpLgogIC8vLwogIC8vLyBGb3IgYSBbc2V0UmF3T3B0aW9uXSBjYWxsLCB0aGUgdmFsdWUgcGFyYW1ldGVyIHdpbGwgYmUgdXNlZCBzZXQgdGhlCiAgLy8vIG9wdGlvbi4KICBjb25zdCBSYXdTb2NrZXRPcHRpb24odGhpcy5sZXZlbCwgdGhpcy5vcHRpb24sIHRoaXMudmFsdWUpOwoKICAvLy8gQ29udmVuaWVuY2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGFuIGludCBiYXNlZCBSYXdTb2NrZXRPcHRpb24uCiAgZmFjdG9yeSBSYXdTb2NrZXRPcHRpb24uZnJvbUludChpbnQgbGV2ZWwsIGludCBvcHRpb24sIGludCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgdmFsdWUgPSAwOwogICAgfQogICAgZmluYWwgVWludDhMaXN0IGxpc3QgPSBVaW50OExpc3QoNCk7CiAgICBmaW5hbCBidWZmZXIgPSBCeXRlRGF0YS52aWV3KGxpc3QuYnVmZmVyKTsKICAgIGJ1ZmZlci5zZXRJbnQzMigwLCB2YWx1ZSk7CiAgICByZXR1cm4gUmF3U29ja2V0T3B0aW9uKGxldmVsLCBvcHRpb24sIGxpc3QpOwogIH0KCiAgLy8vIENvbnZlbmllbmNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBhIGJvb2wgYmFzZWQgUmF3U29ja2V0T3B0aW9uLgogIGZhY3RvcnkgUmF3U29ja2V0T3B0aW9uLmZyb21Cb29sKGludCBsZXZlbCwgaW50IG9wdGlvbiwgYm9vbCB2YWx1ZSkgPT4KICAgICAgUmF3U29ja2V0T3B0aW9uLmZyb21JbnQobGV2ZWwsIG9wdGlvbiwgdmFsdWUgPT0gdHJ1ZSA/IDEgOiAwKTsKCiAgLy8vIFRoZSBsZXZlbCBmb3IgdGhlIG9wdGlvbiB0byBzZXQgb3IgZ2V0LgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8gICAqIFtSYXdTb2NrZXRPcHRpb24ubGV2ZWxTb2NrZXRdCiAgLy8vICAgKiBbUmF3U29ja2V0T3B0aW9uLmxldmVsSVB2NF0KICAvLy8gICAqIFtSYXdTb2NrZXRPcHRpb24ubGV2ZWxJUHY2XQogIC8vLyAgICogW1Jhd1NvY2tldE9wdGlvbi5sZXZlbFRjcF0KICAvLy8gICAqIFtSYXdTb2NrZXRPcHRpb24ubGV2ZWxVZHBdCiAgZmluYWwgaW50IGxldmVsOwoKICAvLy8gVGhlIG9wdGlvbiB0byBzZXQgb3IgZ2V0LgogIGZpbmFsIGludCBvcHRpb247CgogIC8vLyBUaGUgcmF3IGRhdGEgdG8gc2V0LCBvciB0aGUgYXJyYXkgdG8gd3JpdGUgdGhlIGN1cnJlbnQgb3B0aW9uIHZhbHVlIGludG8uCiAgLy8vCiAgLy8vIFRoaXMgbGlzdCBtdXN0IGJlIHRoZSBjb3JyZWN0IGxlbmd0aCBmb3IgdGhlIGV4cGVjdGVkIG9wdGlvbi4gRm9yIG1vc3QKICAvLy8gb3B0aW9ucyB0aGF0IHRha2UgaW50IG9yIGJvb2wgdmFsdWVzLCB0aGUgbGVuZ3RoIHNob3VsZCBiZSA0LiBGb3Igb3B0aW9ucwogIC8vLyB0aGF0IGV4cGVjdCBhIHN0cnVjdCAoc3VjaCBhcyBhbiBpbl9hZGRyX3QpLCB0aGUgbGVuZ3RoIHNob3VsZCBiZSB0aGUKICAvLy8gY29ycmVjdCBsZW5ndGggZm9yIHRoYXQgc3RydWN0LgogIGZpbmFsIFVpbnQ4TGlzdCB2YWx1ZTsKCiAgLy8vIFNvY2tldCBsZXZlbCBvcHRpb24gZm9yIFNPTF9TT0NLRVQuCiAgc3RhdGljIGludCBnZXQgbGV2ZWxTb2NrZXQgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLlNPTF9TT0NLRVQuaW5kZXgpOwoKICAvLy8gU29ja2V0IGxldmVsIG9wdGlvbiBmb3IgSVBQUk9UT19JUC4KICBzdGF0aWMgaW50IGdldCBsZXZlbElQdjQgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fSVAuaW5kZXgpOwoKICAvLy8gU29ja2V0IG9wdGlvbiBmb3IgSVBfTVVMVElDQVNUX0lGLgogIHN0YXRpYyBpbnQgZ2V0IElQdjRNdWx0aWNhc3RJbnRlcmZhY2UgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLklQX01VTFRJQ0FTVF9JRi5pbmRleCk7CgogIC8vLyBTb2NrZXQgbGV2ZWwgb3B0aW9uIGZvciBJUFBST1RPX0lQVjYuCiAgc3RhdGljIGludCBnZXQgbGV2ZWxJUHY2ID0+CiAgICAgIF9nZXRPcHRpb25WYWx1ZShfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX0lQVjYuaW5kZXgpOwoKICAvLy8gU29ja2V0IG9wdGlvbiBmb3IgSVBWNl9NVUxUSUNBU1RfSUYuCiAgc3RhdGljIGludCBnZXQgSVB2Nk11bHRpY2FzdEludGVyZmFjZSA9PgogICAgICBfZ2V0T3B0aW9uVmFsdWUoX1Jhd1NvY2tldE9wdGlvbnMuSVBWNl9NVUxUSUNBU1RfSUYuaW5kZXgpOwoKICAvLy8gU29ja2V0IGxldmVsIG9wdGlvbiBmb3IgSVBQUk9UT19UQ1AuCiAgc3RhdGljIGludCBnZXQgbGV2ZWxUY3AgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fVENQLmluZGV4KTsKCiAgLy8vIFNvY2tldCBsZXZlbCBvcHRpb24gZm9yIElQUFJPVE9fVURQLgogIHN0YXRpYyBpbnQgZ2V0IGxldmVsVWRwID0+CiAgICAgIF9nZXRPcHRpb25WYWx1ZShfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX1VEUC5pbmRleCk7CgogIGV4dGVybmFsIHN0YXRpYyBpbnQgX2dldE9wdGlvblZhbHVlKGludCBrZXkpOwp9CgovKioKICogRXZlbnRzIGZvciB0aGUgW1Jhd1NvY2tldF0uCiAqLwpjbGFzcyBSYXdTb2NrZXRFdmVudCB7CiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IHJlYWQgPSBjb25zdCBSYXdTb2NrZXRFdmVudC5fKDApOwogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCB3cml0ZSA9IGNvbnN0IFJhd1NvY2tldEV2ZW50Ll8oMSk7CiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IHJlYWRDbG9zZWQgPSBjb25zdCBSYXdTb2NrZXRFdmVudC5fKDIpOwogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCBjbG9zZWQgPSBjb25zdCBSYXdTb2NrZXRFdmVudC5fKDMpOwoKICBARGVwcmVjYXRlZCgiVXNlIHJlYWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IFJFQUQgPSByZWFkOwogIEBEZXByZWNhdGVkKCJVc2Ugd3JpdGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IFdSSVRFID0gd3JpdGU7CiAgQERlcHJlY2F0ZWQoIlVzZSByZWFkQ2xvc2VkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCBSRUFEX0NMT1NFRCA9IHJlYWRDbG9zZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBjbG9zZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IENMT1NFRCA9IGNsb3NlZDsKCiAgZmluYWwgaW50IF92YWx1ZTsKCiAgY29uc3QgUmF3U29ja2V0RXZlbnQuXyh0aGlzLl92YWx1ZSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuIGNvbnN0IFsKICAgICAgJ1Jhd1NvY2tldEV2ZW50LnJlYWQnLAogICAgICAnUmF3U29ja2V0RXZlbnQud3JpdGUnLAogICAgICAnUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZCcsCiAgICAgICdSYXdTb2NrZXRFdmVudC5jbG9zZWQnCiAgICBdW192YWx1ZV07CiAgfQp9CgovLy8gUmV0dXJuZWQgYnkgdGhlIGBzdGFydENvbm5lY3RgIG1ldGhvZHMgb24gY2xpZW50LXNpZGUgc29ja2V0IHR5cGVzIGBTYCwKLy8vIGBDb25uZWN0aW9uVGFzazxTPmAgYWxsb3dzIGNhbmNlbGxpbmcgYW4gYXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgaG9zdC4KY2xhc3MgQ29ubmVjdGlvblRhc2s8Uz4gewogIC8vLyBBIGBGdXR1cmVgIHRoYXQgY29tcGxldGVzIHdpdGggdmFsdWUgdGhhdCBgUy5jb25uZWN0KClgIHdvdWxkIHJldHVybgogIC8vLyB1bmxlc3MgW2NhbmNlbF0gaXMgY2FsbGVkIG9uIHRoaXMgW0Nvbm5lY3Rpb25UYXNrXS4KICAvLy8KICAvLy8gSWYgW2NhbmNlbF0gaXMgY2FsbGVkLCB0aGUgYEZ1dHVyZWAgY29tcGxldGVzIHdpdGggYSBbU29ja2V0RXhjZXB0aW9uXQogIC8vLyBlcnJvciB3aG9zZSBtZXNzYWdlIGluZGljYXRlcyB0aGF0IHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgd2FzIGNhbmNlbGxlZC4KICBmaW5hbCBGdXR1cmU8Uz4gc29ja2V0OwogIGZpbmFsIHZvaWQgRnVuY3Rpb24oKSBfb25DYW5jZWw7CgogIENvbm5lY3Rpb25UYXNrLl8oe0Z1dHVyZTxTPiBzb2NrZXQsIHZvaWQgRnVuY3Rpb24oKSBvbkNhbmNlbH0pCiAgICAgIDogYXNzZXJ0KHNvY2tldCAhPSBudWxsKSwKICAgICAgICBhc3NlcnQob25DYW5jZWwgIT0gbnVsbCksCiAgICAgICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQsCiAgICAgICAgdGhpcy5fb25DYW5jZWwgPSBvbkNhbmNlbDsKCiAgLy8vIENhbmNlbHMgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdC4KICAvLy8KICAvLy8gVGhpcyBhbHNvIGNhdXNlcyB0aGUgW3NvY2tldF0gYEZ1dHVyZWAgdG8gY29tcGxldGUgd2l0aCBhCiAgLy8vIFtTb2NrZXRFeGNlcHRpb25dIGVycm9yLgogIHZvaWQgY2FuY2VsKCkgewogICAgX29uQ2FuY2VsKCk7CiAgfQp9CgovKioKICogQSBbUmF3U29ja2V0XSBpcyBhbiB1bmJ1ZmZlcmVkIGludGVyZmFjZSB0byBhIFRDUCBzb2NrZXQuCiAqCiAqIFRoZSByYXcgc29ja2V0IGRlbGl2ZXJzIHRoZSBkYXRhIHN0cmVhbSBpbiB0aGUgc2FtZSBjaHVua3MgYXMgdGhlIHVuZGVybHlpbmcKICogb3BlcmF0aW5nIHN5c3RlbS4KICoKICogSXQgaXMgbm90IHRoZSBzYW1lIGFzIGEKICogW1BPU0lYIHJhdyBzb2NrZXRdKGh0dHA6Ly9tYW43Lm9yZy9saW51eC9tYW4tcGFnZXMvbWFuNy9yYXcuNy5odG1sKS4KICovCmFic3RyYWN0IGNsYXNzIFJhd1NvY2tldCBpbXBsZW1lbnRzIFN0cmVhbTxSYXdTb2NrZXRFdmVudD4gewogIC8qKgogICAqIFNldCBvciBnZXQsIGlmIHRoZSBbUmF3U29ja2V0XSBzaG91bGQgbGlzdGVuIGZvciBbUmF3U29ja2V0RXZlbnQucmVhZF0KICAgKiBldmVudHMuIERlZmF1bHQgaXMgWzp0cnVlOl0uCiAgICovCiAgYm9vbCByZWFkRXZlbnRzRW5hYmxlZDsKCiAgLyoqCiAgICogU2V0IG9yIGdldCwgaWYgdGhlIFtSYXdTb2NrZXRdIHNob3VsZCBsaXN0ZW4gZm9yIFtSYXdTb2NrZXRFdmVudC53cml0ZV0KICAgKiBldmVudHMuIERlZmF1bHQgaXMgWzp0cnVlOl0uCiAgICogVGhpcyBpcyBhIG9uZS1zaG90IGxpc3RlbmVyLCBhbmQgd3JpdGVFdmVudHNFbmFibGVkIG11c3QgYmUgc2V0CiAgICogdG8gdHJ1ZSBhZ2FpbiB0byByZWNlaXZlIGFub3RoZXIgd3JpdGUgZXZlbnQuCiAgICovCiAgYm9vbCB3cml0ZUV2ZW50c0VuYWJsZWQ7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIHBvcnQgYW5kIHJldHVybnMgYSBbRnV0dXJlXQogICAqIHRoYXQgd2lsbCBjb21wbGV0ZSB3aXRoIGVpdGhlciBhIFtSYXdTb2NrZXRdIG9uY2UgY29ubmVjdGVkIG9yIGFuIGVycm9yCiAgICogaWYgdGhlIGhvc3QtbG9va3VwIG9yIGNvbm5lY3Rpb24gZmFpbGVkLgogICAqCiAgICogW2hvc3RdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2hvc3RdIGlzIGEKICAgKiBbU3RyaW5nXSwgW2Nvbm5lY3RdIHdpbGwgcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdHJ5CiAgICogYWxsIHJldHVybmVkIFtJbnRlcm5ldEFkZHJlc3NdZXMsIHVudGlsIGNvbm5lY3RlZC4gVW5sZXNzIGEKICAgKiBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCwgdGhlIGVycm9yIGZyb20gdGhlIGZpcnN0IGZhaWxpbmcgY29ubmVjdGlvbiBpcwogICAqIHJldHVybmVkLgogICAqCiAgICogVGhlIGFyZ3VtZW50IFtzb3VyY2VBZGRyZXNzXSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhbAogICAqIGFkZHJlc3MgdG8gYmluZCB3aGVuIG1ha2luZyB0aGUgY29ubmVjdGlvbi4gYHNvdXJjZUFkZHJlc3NgIGNhbiBlaXRoZXIKICAgKiBiZSBhIGBTdHJpbmdgIG9yIGFuIGBJbnRlcm5ldEFkZHJlc3NgLiBJZiBhIGBTdHJpbmdgIGlzIHBhc3NlZCBpdCBtdXN0CiAgICogaG9sZCBhIG51bWVyaWMgSVAgYWRkcmVzcy4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbdGltZW91dF0gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIGFsbG93ZWQgdGltZSB0byB3YWl0CiAgICogZm9yIGEgY29ubmVjdGlvbiB0byBiZSBlc3RhYmxpc2hlZC4gSWYgW3RpbWVvdXRdIGlzIGxvbmdlciB0aGFuIHRoZSBzeXN0ZW0KICAgKiBsZXZlbCB0aW1lb3V0IGR1cmF0aW9uLCBhIHRpbWVvdXQgbWF5IG9jY3VyIHNvb25lciB0aGFuIHNwZWNpZmllZCBpbgogICAqIFt0aW1lb3V0XS4gT24gdGltZW91dCwgYSBbU29ja2V0RXhjZXB0aW9uXSBpcyB0aHJvd24gYW5kIGFsbCBvbmdvaW5nCiAgICogY29ubmVjdGlvbiBhdHRlbXB0cyB0byBbaG9zdF0gYXJlIGNhbmNlbGxlZC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFJhd1NvY2tldD4gY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KTsKCiAgLy8vIExpa2UgW2Nvbm5lY3RdLCBidXQgcmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIHdpdGggYQogIC8vLyBbQ29ubmVjdGlvblRhc2tdIHRoYXQgY2FuIGJlIGNhbmNlbGxlZCBpZiB0aGUgW1Jhd1NvY2tldF0gaXMgbm8KICAvLy8gbG9uZ2VyIG5lZWRlZC4KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFJhd1NvY2tldD4+IHN0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGFuZCBub24tcmVhZCBieXRlcyBpbiB0aGUgc29ja2V0IHRoYXQKICAgKiBjYW4gYmUgcmVhZC4KICAgKi8KICBpbnQgYXZhaWxhYmxlKCk7CgogIC8qKgogICAqIFJlYWQgdXAgdG8gW2xlbl0gYnl0ZXMgZnJvbSB0aGUgc29ja2V0LiBUaGlzIGZ1bmN0aW9uIGlzCiAgICogbm9uLWJsb2NraW5nIGFuZCB3aWxsIG9ubHkgcmV0dXJuIGRhdGEgaWYgZGF0YSBpcyBhdmFpbGFibGUuIFRoZQogICAqIG51bWJlciBvZiBieXRlcyByZWFkIGNhbiBiZSBsZXNzIHRoZW4gW2xlbl0gaWYgZmV3ZXIgYnl0ZXMgYXJlCiAgICogYXZhaWxhYmxlIGZvciBpbW1lZGlhdGUgcmVhZGluZy4gSWYgbm8gZGF0YSBpcyBhdmFpbGFibGUgWzpudWxsOl0KICAgKiBpcyByZXR1cm5lZC4KICAgKi8KICBVaW50OExpc3QgcmVhZChbaW50IGxlbl0pOwoKICAvKioKICAgKiBXcml0ZXMgdXAgdG8gW2NvdW50XSBieXRlcyBvZiB0aGUgYnVmZmVyIGZyb20gW29mZnNldF0gYnVmZmVyIG9mZnNldCB0bwogICAqIHRoZSBzb2NrZXQuIFRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gYnl0ZXMgaXMgcmV0dXJuZWQuIFRoaXMKICAgKiBmdW5jdGlvbiBpcyBub24tYmxvY2tpbmcgYW5kIHdpbGwgb25seSB3cml0ZSBkYXRhIGlmIGJ1ZmZlciBzcGFjZSBpcwogICAqIGF2YWlsYWJsZSBpbiB0aGUgc29ja2V0LgogICAqCiAgICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFtvZmZzZXRdIGlzIDAsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgW2NvdW50XSBpcwogICAqIFs6YnVmZmVyLmxlbmd0aCAtIG9mZnNldDpdLgogICAqLwogIGludCB3cml0ZShMaXN0PGludD4gYnVmZmVyLCBbaW50IG9mZnNldCwgaW50IGNvdW50XSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlbW90ZSBwb3J0IGNvbm5lY3RlZCB0byBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHJlbW90ZVBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIFtJbnRlcm5ldEFkZHJlc3NdIHVzZWQgdG8gY29ubmVjdCB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlbW90ZSBbSW50ZXJuZXRBZGRyZXNzXSBjb25uZWN0ZWQgdG8gYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIHNvY2tldC4gUmV0dXJucyBhIEZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoIFt0aGlzXSB3aGVuIHRoZQogICAqIHVuZGVybHlpbmcgY29ubmVjdGlvbiBpcyBjb21wbGV0ZWx5IGRlc3Ryb3llZC4KICAgKgogICAqIENhbGxpbmcgW2Nsb3NlXSB3aWxsIG5ldmVyIHRocm93IGFuIGV4Y2VwdGlvbgogICAqIGFuZCBjYWxsaW5nIGl0IHNldmVyYWwgdGltZXMgaXMgc3VwcG9ydGVkLiBDYWxsaW5nIFtjbG9zZV0gY2FuIHJlc3VsdCBpbgogICAqIGEgW1Jhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWRdIGV2ZW50LgogICAqLwogIEZ1dHVyZTxSYXdTb2NrZXQ+IGNsb3NlKCk7CgogIC8qKgogICAqIFNodXRkb3duIHRoZSBzb2NrZXQgaW4gdGhlIFtkaXJlY3Rpb25dLiBDYWxsaW5nIFtzaHV0ZG93bl0gd2lsbCBuZXZlcgogICAqIHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgY2FsbGluZyBpdCBzZXZlcmFsIHRpbWVzIGlzIHN1cHBvcnRlZC4gQ2FsbGluZwogICAqIHNodXRkb3duIHdpdGggZWl0aGVyIFtTb2NrZXREaXJlY3Rpb24uYm90aF0gb3IgW1NvY2tldERpcmVjdGlvbi5yZWNlaXZlXQogICAqIGNhbiByZXN1bHQgaW4gYSBbUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZF0gZXZlbnQuCiAgICovCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKTsKCiAgLyoqCiAgICogVXNlIFtzZXRPcHRpb25dIHRvIGN1c3RvbWl6ZSB0aGUgW1Jhd1NvY2tldF0uIFNlZSBbU29ja2V0T3B0aW9uXSBmb3IKICAgKiBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFJldHVybnMgWzp0cnVlOl0gaWYgdGhlIG9wdGlvbiB3YXMgc2V0IHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlLgogICAqLwogIGJvb2wgc2V0T3B0aW9uKFNvY2tldE9wdGlvbiBvcHRpb24sIGJvb2wgZW5hYmxlZCk7CgogIC8qKgogICAqIFVzZSBbZ2V0UmF3T3B0aW9uXSB0byBnZXQgbG93IGxldmVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBbUmF3U29ja2V0XS4gU2VlCiAgICogW1Jhd1NvY2tldE9wdGlvbl0gZm9yIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogUmV0dXJucyB0aGUgW1Jhd1NvY2tldE9wdGlvbi52YWx1ZV0gb24gc3VjY2Vzcy4KICAgKgogICAqIFRocm93cyBhbiBbT1NFcnJvcl0gb24gZmFpbHVyZS4KICAgKi8KICBAU2luY2UoIjIuMiIpCiAgVWludDhMaXN0IGdldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKTsKCiAgLyoqCiAgICogVXNlIFtzZXRSYXdPcHRpb25dIHRvIGN1c3RvbWl6ZSB0aGUgW1Jhd1NvY2tldF0uIFNlZSBbUmF3U29ja2V0T3B0aW9uXSBmb3IKICAgKiBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFRocm93cyBhbiBbT1NFcnJvcl0gb24gZmFpbHVyZS4KICAgKi8KICBAU2luY2UoIjIuMiIpCiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbik7Cn0KCi8qKgogKiBBIGhpZ2gtbGV2ZWwgY2xhc3MgZm9yIGNvbW11bmljYXRpbmcgb3ZlciBhIFRDUCBzb2NrZXQuCiAqCiAqIFRoZSBbU29ja2V0XSBleHBvc2VzIGJvdGggYSBbU3RyZWFtXSBhbmQgYSBbSU9TaW5rXSBpbnRlcmZhY2UsIG1ha2luZyBpdAogKiBpZGVhbCBmb3IgdXNpbmcgdG9nZXRoZXIgd2l0aCBvdGhlciBbU3RyZWFtXXMuCiAqLwphYnN0cmFjdCBjbGFzcyBTb2NrZXQgaW1wbGVtZW50cyBTdHJlYW08VWludDhMaXN0PiwgSU9TaW5rIHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHNvY2tldCBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZCBwb3J0IGFuZCByZXR1cm5zIGEgW0Z1dHVyZV0KICAgKiB0aGF0IHdpbGwgY29tcGxldGUgd2l0aCBlaXRoZXIgYSBbU29ja2V0XSBvbmNlIGNvbm5lY3RlZCBvciBhbiBlcnJvcgogICAqIGlmIHRoZSBob3N0LWxvb2t1cCBvciBjb25uZWN0aW9uIGZhaWxlZC4KICAgKgogICAqIFtob3N0XSBjYW4gZWl0aGVyIGJlIGEgW1N0cmluZ10gb3IgYW4gW0ludGVybmV0QWRkcmVzc10uIElmIFtob3N0XSBpcyBhCiAgICogW1N0cmluZ10sIFtjb25uZWN0XSB3aWxsIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHRyeQogICAqIGFsbCByZXR1cm5lZCBbSW50ZXJuZXRBZGRyZXNzXWVzLCB1bnRpbCBjb25uZWN0ZWQuIFVubGVzcyBhCiAgICogY29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQsIHRoZSBlcnJvciBmcm9tIHRoZSBmaXJzdCBmYWlsaW5nIGNvbm5lY3Rpb24gaXMKICAgKiByZXR1cm5lZC4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbc291cmNlQWRkcmVzc10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYWwKICAgKiBhZGRyZXNzIHRvIGJpbmQgd2hlbiBtYWtpbmcgdGhlIGNvbm5lY3Rpb24uIGBzb3VyY2VBZGRyZXNzYCBjYW4gZWl0aGVyCiAgICogYmUgYSBgU3RyaW5nYCBvciBhbiBgSW50ZXJuZXRBZGRyZXNzYC4gSWYgYSBgU3RyaW5nYCBpcyBwYXNzZWQgaXQgbXVzdAogICAqIGhvbGQgYSBudW1lcmljIElQIGFkZHJlc3MuCiAgICoKICAgKiBUaGUgYXJndW1lbnQgW3RpbWVvdXRdIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBhbGxvd2VkIHRpbWUgdG8gd2FpdAogICAqIGZvciBhIGNvbm5lY3Rpb24gdG8gYmUgZXN0YWJsaXNoZWQuIElmIFt0aW1lb3V0XSBpcyBsb25nZXIgdGhhbiB0aGUgc3lzdGVtCiAgICogbGV2ZWwgdGltZW91dCBkdXJhdGlvbiwgYSB0aW1lb3V0IG1heSBvY2N1ciBzb29uZXIgdGhhbiBzcGVjaWZpZWQgaW4KICAgKiBbdGltZW91dF0uIE9uIHRpbWVvdXQsIGEgW1NvY2tldEV4Y2VwdGlvbl0gaXMgdGhyb3duIGFuZCBhbGwgb25nb2luZwogICAqIGNvbm5lY3Rpb24gYXR0ZW1wdHMgdG8gW2hvc3RdIGFyZSBjYW5jZWxsZWQuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxTb2NrZXQ+IGNvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzLCBEdXJhdGlvbiB0aW1lb3V0fSkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gU29ja2V0Ll9jb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0OiB0aW1lb3V0KTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuc29ja2V0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MsIHRpbWVvdXQ6IHRpbWVvdXQpOwogIH0KCiAgLy8vIExpa2UgW2Nvbm5lY3RdLCBidXQgcmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIHdpdGggYQogIC8vLyBbQ29ubmVjdGlvblRhc2tdIHRoYXQgY2FuIGJlIGNhbmNlbGxlZCBpZiB0aGUgW1NvY2tldF0gaXMgbm8KICAvLy8gbG9uZ2VyIG5lZWRlZC4KICBzdGF0aWMgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFNvY2tldD4+IHN0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBTb2NrZXQuX3N0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuc29ja2V0U3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcyk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFNvY2tldD4gX2Nvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzLCBEdXJhdGlvbiB0aW1lb3V0fSk7CgogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gX3N0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KTsKCiAgLyoqCiAgICogRGVzdHJveSB0aGUgc29ja2V0IGluIGJvdGggZGlyZWN0aW9ucy4gQ2FsbGluZyBbZGVzdHJveV0gd2lsbCBtYWtlIHRoZQogICAqIHNlbmQgYSBjbG9zZSBldmVudCBvbiB0aGUgc3RyZWFtIGFuZCB3aWxsIG5vIGxvbmdlciByZWFjdCBvbiBkYXRhIGJlaW5nCiAgICogcGlwZWQgdG8gaXQuCiAgICoKICAgKiBDYWxsIFtjbG9zZV0oaW5oZXJpdGVkIGZyb20gW0lPU2lua10pIHRvIG9ubHkgY2xvc2UgdGhlIFtTb2NrZXRdCiAgICogZm9yIHNlbmRpbmcgZGF0YS4KICAgKi8KICB2b2lkIGRlc3Ryb3koKTsKCiAgLyoqCiAgICogVXNlIFtzZXRPcHRpb25dIHRvIGN1c3RvbWl6ZSB0aGUgW1Jhd1NvY2tldF0uIFNlZSBbU29ja2V0T3B0aW9uXSBmb3IKICAgKiBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFJldHVybnMgWzp0cnVlOl0gaWYgdGhlIG9wdGlvbiB3YXMgc2V0IHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlLgogICAqLwogIGJvb2wgc2V0T3B0aW9uKFNvY2tldE9wdGlvbiBvcHRpb24sIGJvb2wgZW5hYmxlZCk7CgogIC8qKgogICAqIFVzZSBbZ2V0UmF3T3B0aW9uXSB0byBnZXQgbG93IGxldmVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBbUmF3U29ja2V0XS4gU2VlCiAgICogW1Jhd1NvY2tldE9wdGlvbl0gZm9yIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogUmV0dXJucyB0aGUgW1Jhd1NvY2tldE9wdGlvbi52YWx1ZV0gb24gc3VjY2Vzcy4KICAgKgogICAqIFRocm93cyBhbiBbT1NFcnJvcl0gb24gZmFpbHVyZS4KICAgKi8KICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pOwoKICAvKioKICAgKiBVc2UgW3NldFJhd09wdGlvbl0gdG8gY3VzdG9taXplIHRoZSBbUmF3U29ja2V0XS4gU2VlIFtSYXdTb2NrZXRPcHRpb25dIGZvcgogICAqIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogVGhyb3dzIGFuIFtPU0Vycm9yXSBvbiBmYWlsdXJlLgogICAqLwogIHZvaWQgc2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSByZW1vdGUgcG9ydCBjb25uZWN0ZWQgdG8gYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCByZW1vdGVQb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSB1c2VkIHRvIGNvbm5lY3QgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSByZW1vdGUgW0ludGVybmV0QWRkcmVzc10gY29ubmVjdGVkIHRvIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzczsKCiAgRnV0dXJlIGNsb3NlKCk7CgogIEZ1dHVyZSBnZXQgZG9uZTsKfQoKLyoqCiAqIERhdGFncmFtIHBhY2thZ2UuIERhdGEgc2VudCB0byBhbmQgcmVjZWl2ZWQgZnJvbSBkYXRhZ3JhbSBzb2NrZXRzCiAqIGNvbnRhaW5zIHRoZSBpbnRlcm5ldCBhZGRyZXNzIGFuZCBwb3J0IG9mIHRoZSBkZXN0aW5hdGlvbiBvciBzb3VyY2UKICogdG9nZXRlciB3aXRoIHRoZSBkYXRhLgogKi8KY2xhc3MgRGF0YWdyYW0gewogIFVpbnQ4TGlzdCBkYXRhOwogIEludGVybmV0QWRkcmVzcyBhZGRyZXNzOwogIGludCBwb3J0OwoKICBEYXRhZ3JhbSh0aGlzLmRhdGEsIHRoaXMuYWRkcmVzcywgdGhpcy5wb3J0KTsKfQoKLyoqCiAqIEEgW1Jhd0RhdGFncmFtU29ja2V0XSBpcyBhbiB1bmJ1ZmZlcmVkIGludGVyZmFjZSB0byBhIFVEUCBzb2NrZXQuCiAqCiAqIFRoZSByYXcgZGF0YWdyYW0gc29ja2V0IGRlbGl2ZXJzIHRoZSBkYXRhZ3JhbXMgaW4gdGhlIHNhbWUgY2h1bmtzIGFzIHRoZQogKiB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0uIEl0J3MgYSBbU3RyZWFtXSBvZiBbUmF3U29ja2V0RXZlbnRdcy4KICoKICogTm90ZSB0aGF0IHRoZSBldmVudCBbUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZF0gd2lsbCBuZXZlciBiZQogKiByZWNlaXZlZCBhcyBhbiBVRFAgc29ja2V0IGNhbm5vdCBiZSBjbG9zZWQgYnkgYSByZW1vdGUgcGVlci4KICoKICogSXQgaXMgbm90IHRoZSBzYW1lIGFzIGEKICogW1BPU0lYIHJhdyBzb2NrZXRdKGh0dHA6Ly9tYW43Lm9yZy9saW51eC9tYW4tcGFnZXMvbWFuNy9yYXcuNy5odG1sKS4KICovCmFic3RyYWN0IGNsYXNzIFJhd0RhdGFncmFtU29ja2V0IGV4dGVuZHMgU3RyZWFtPFJhd1NvY2tldEV2ZW50PiB7CiAgLyoqCiAgICogU2V0IG9yIGdldCwgaWYgdGhlIFtSYXdEYXRhZ3JhbVNvY2tldF0gc2hvdWxkIGxpc3RlbiBmb3IKICAgKiBbUmF3U29ja2V0RXZlbnQucmVhZF0gZXZlbnRzLiBEZWZhdWx0IGlzIFs6dHJ1ZTpdLgogICAqLwogIGJvb2wgcmVhZEV2ZW50c0VuYWJsZWQ7CgogIC8qKgogICAqIFNldCBvciBnZXQsIGlmIHRoZSBbUmF3RGF0YWdyYW1Tb2NrZXRdIHNob3VsZCBsaXN0ZW4gZm9yCiAgICogW1Jhd1NvY2tldEV2ZW50LndyaXRlXSBldmVudHMuIERlZmF1bHQgaXMgWzp0cnVlOl0uICBUaGlzIGlzIGEKICAgKiBvbmUtc2hvdCBsaXN0ZW5lciwgYW5kIHdyaXRlRXZlbnRzRW5hYmxlZCBtdXN0IGJlIHNldCB0byB0cnVlCiAgICogYWdhaW4gdG8gcmVjZWl2ZSBhbm90aGVyIHdyaXRlIGV2ZW50LgogICAqLwogIGJvb2wgd3JpdGVFdmVudHNFbmFibGVkOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCB3aGV0aGVyIG11bHRpY2FzdCB0cmFmZmljIGlzIGxvb3BlZCBiYWNrIHRvIHRoZSBob3N0LgogICAqCiAgICogQnkgZGVmYXVsdCBtdWx0aWNhc3QgbG9vcGJhY2sgaXMgZW5hYmxlZC4KICAgKi8KICBib29sIG11bHRpY2FzdExvb3BiYWNrOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCB0aGUgbWF4aW11bSBuZXR3b3JrIGhvcHMgZm9yIG11bHRpY2FzdCBwYWNrYWdlcwogICAqIG9yaWdpbmF0aW5nIGZyb20gdGhpcyBzb2NrZXQuCiAgICoKICAgKiBGb3IgSVB2NCB0aGlzIGlzIHJlZmVycmVkIHRvIGFzIFRUTCAodGltZSB0byBsaXZlKS4KICAgKgogICAqIEJ5IGRlZmF1bHQgdGhpcyB2YWx1ZSBpcyAxIGNhdXNpbmcgbXVsdGljYXN0IHRyYWZmaWMgdG8gc3RheSBvbgogICAqIHRoZSBsb2NhbCBuZXR3b3JrLgogICAqLwogIGludCBtdWx0aWNhc3RIb3BzOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdXNlZCBmb3Igb3V0Z29pbmcgbXVsdGljYXN0IHBhY2thZ2VzLgogICAqCiAgICogQSB2YWx1ZSBvZiBgbnVsbGBpbmRpY2F0ZSB0aGF0IHRoZSBzeXN0ZW0gY2hvb3NlcyB0aGUgbmV0d29yawogICAqIGludGVyZmFjZSB0byB1c2UuCiAgICoKICAgKiBCeSBkZWZhdWx0IHRoaXMgdmFsdWUgaXMgYG51bGxgCiAgICovCiAgQERlcHJlY2F0ZWQoIlRoaXMgcHJvcGVydHkgaXMgbm90IGltcGxlbWVudGVkLiBVc2UgZ2V0UmF3T3B0aW9uIGFuZCAiCiAgICAgICJzZXRSYXdPcHRpb24gaW5zdGVhZC4iKQogIE5ldHdvcmtJbnRlcmZhY2UgbXVsdGljYXN0SW50ZXJmYWNlOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCB3aGV0aGVyIElQdjQgYnJvYWRjYXN0IGlzIGVuYWJsZWQuCiAgICoKICAgKiBJUHY0IGJyb2FkY2FzdCBuZWVkcyB0byBiZSBlbmFibGVkIGJ5IHRoZSBzZW5kZXIgZm9yIHNlbmRpbmcgSVB2NAogICAqIGJyb2FkY2FzdCBwYWNrYWdlcy4gQnkgZGVmYXVsdCBJUHY0IGJyb2FkY2FzdCBpcyBkaXNhYmxlZC4KICAgKgogICAqIEZvciBJUHY2IHRoZXJlIGlzIG5vIGdlbmVyYWwgYnJvYWRjYXN0IG1lY2hhbmlzbS4gVXNlIG11bHRpY2FzdAogICAqIGluc3RlYWQuCiAgICovCiAgYm9vbCBicm9hZGNhc3RFbmFibGVkOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHJhdyBkYXRhZ3JhbSBzb2NrZXQgYmluZGluZyBpdCB0byBhbiBhZGRyZXNzIGFuZAogICAqIHBvcnQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxSYXdEYXRhZ3JhbVNvY2tldD4gYmluZChob3N0LCBpbnQgcG9ydCwKICAgICAge2Jvb2wgcmV1c2VBZGRyZXNzOiB0cnVlLCBib29sIHJldXNlUG9ydDogZmFsc2UsIGludCB0dGw6IDF9KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWRkcmVzcyB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogQ2xvc2UgdGhlIGRhdGFncmFtIHNvY2tldC4KICAgKi8KICB2b2lkIGNsb3NlKCk7CgogIC8qKgogICAqIFNlbmQgYSBkYXRhZ3JhbS4KICAgKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiBUaGlzIHdpbGwgYWx3YXlzIGJlIGVpdGhlcgogICAqIHRoZSBzaXplIG9mIFtidWZmZXJdIG9yIGAwYC4KICAgKi8KICBpbnQgc2VuZChMaXN0PGludD4gYnVmZmVyLCBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnQpOwoKICAvKioKICAgKiBSZWNlaXZlIGEgZGF0YWdyYW0uIElmIHRoZXJlIGFyZSBubyBkYXRhZ3JhbXMgYXZhaWxhYmxlIGBudWxsYCBpcwogICAqIHJldHVybmVkLgogICAqCiAgICogVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBkYXRhZ3JhbSB0aGF0IGNhbiBiZSByZWNlaXZlZCBpcyA2NTUwMyBieXRlcy4KICAgKi8KICBEYXRhZ3JhbSByZWNlaXZlKCk7CgogIC8qKgogICAqIEpvaW4gYSBtdWx0aWNhc3QgZ3JvdXAuCiAgICoKICAgKiBJZiBhbiBlcnJvciBvY2N1ciB3aGVuIHRyeWluZyB0byBqb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAgYW4KICAgKiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIHZvaWQgam9pbk11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgZ3JvdXAsIFtOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZV0pOwoKICAvKioKICAgKiBMZWF2ZSBhIG11bHRpY2FzdCBncm91cC4KICAgKgogICAqIElmIGFuIGVycm9yIG9jY3VyIHdoZW4gdHJ5aW5nIHRvIGpvaW4gdGhlIG11bHRpY2FzZSBncm91cCBhbgogICAqIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgdm9pZCBsZWF2ZU11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgZ3JvdXAsIFtOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZV0pOwoKICAvKioKICAgKiBVc2UgW2dldFJhd09wdGlvbl0gdG8gZ2V0IGxvdyBsZXZlbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgW1Jhd1NvY2tldF0uIFNlZQogICAqIFtSYXdTb2NrZXRPcHRpb25dIGZvciBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFJldHVybnMgW1Jhd1NvY2tldE9wdGlvbi52YWx1ZV0gb24gc3VjY2Vzcy4KICAgKgogICAqIFRocm93cyBhbiBbT1NFcnJvcl0gb24gZmFpbHVyZS4KICAgKi8KICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pOwoKICAvKioKICAgKiBVc2UgW3NldFJhd09wdGlvbl0gdG8gY3VzdG9taXplIHRoZSBbUmF3U29ja2V0XS4gU2VlIFtSYXdTb2NrZXRPcHRpb25dIGZvcgogICAqIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogVGhyb3dzIGFuIFtPU0Vycm9yXSBvbiBmYWlsdXJlLgogICAqLwogIHZvaWQgc2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pOwp9CgpjbGFzcyBTb2NrZXRFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgZmluYWwgT1NFcnJvciBvc0Vycm9yOwogIGZpbmFsIEludGVybmV0QWRkcmVzcyBhZGRyZXNzOwogIGZpbmFsIGludCBwb3J0OwoKICBjb25zdCBTb2NrZXRFeGNlcHRpb24odGhpcy5tZXNzYWdlLCB7dGhpcy5vc0Vycm9yLCB0aGlzLmFkZHJlc3MsIHRoaXMucG9ydH0pOwogIGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKQogICAgICA6IG1lc3NhZ2UgPSAnU29ja2V0IGhhcyBiZWVuIGNs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bGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKY29uc3QgaW50IF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbCA9IDA7CmNvbnN0IGludCBfc3RkaW9IYW5kbGVUeXBlUGlwZSA9IDE7CmNvbnN0IGludCBfc3RkaW9IYW5kbGVUeXBlRmlsZSA9IDI7CmNvbnN0IGludCBfc3RkaW9IYW5kbGVUeXBlU29ja2V0ID0gMzsKY29uc3QgaW50IF9zdGRpb0hhbmRsZVR5cGVPdGhlciA9IDQ7CgpjbGFzcyBfU3RkU3RyZWFtIGV4dGVuZHMgU3RyZWFtPExpc3Q8aW50Pj4gewogIGZpbmFsIFN0cmVhbTxMaXN0PGludD4+IF9zdHJlYW07CgogIF9TdGRTdHJlYW0odGhpcy5fc3RyZWFtKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPExpc3Q8aW50Pj4gbGlzdGVuKHZvaWQgb25EYXRhKExpc3Q8aW50PiBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX3N0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9Cn0KCi8qKgogKiBbU3RkaW5dIGFsbG93cyBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVhZHMgZnJvbSB0aGUgc3RhbmRhcmQKICogaW5wdXQgc3RyZWFtLgogKgogKiBNaXhpbmcgc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyByZWFkcyBpcyB1bmRlZmluZWQuCiAqLwpjbGFzcyBTdGRpbiBleHRlbmRzIF9TdGRTdHJlYW0gaW1wbGVtZW50cyBTdHJlYW08TGlzdDxpbnQ+PiB7CiAgaW50IF9mZDsKCiAgU3RkaW4uXyhTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0sIHRoaXMuX2ZkKSA6IHN1cGVyKHN0cmVhbSk7CgogIC8qKgogICAqIFJlYWQgYSBsaW5lIGZyb20gc3RkaW4uCiAgICoKICAgKiBCbG9ja3MgdW50aWwgYSBmdWxsIGxpbmUgaXMgYXZhaWxhYmxlLgogICAqCiAgICogTGluZXMgbXkgYmUgdGVybWluYXRlZCBieSBlaXRoZXIgYDxDUj48TEY+YCBvciBgPExGPmAuIE9uIFdpbmRvd3MgaW4gY2FzZXMKICAgKiB3aGVyZSB0aGUgW3N0ZGlvVHlwZV0gb2Ygc3RkaW4gaXMgW1N0ZGlvVHlwZS50ZXJtaW1hbF0gdGhlIHRlcm1pbmF0b3IgbWF5CiAgICogYWxzbyBiZSBhIHNpbmdsZSBgPENSPmAuCiAgICoKICAgKiBJbnB1dCBieXRlcyBhcmUgY29udmVydGVkIHRvIGEgc3RyaW5nIGJ5IFtlbmNvZGluZ10uCiAgICogSWYgW2VuY29kaW5nXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBbc3lzdGVtRW5jb2RpbmddLgogICAqCiAgICogSWYgW3JldGFpbk5ld2xpbmVzXSBpcyBgZmFsc2VgLCB0aGUgcmV0dXJuZWQgU3RyaW5nIHdpbGwgbm90IGluY2x1ZGUgdGhlCiAgICogZmluYWwgbGluZSB0ZXJtaW5hdG9yLiBJZiBgdHJ1ZWAsIHRoZSByZXR1cm5lZCBTdHJpbmcgd2lsbCBpbmNsdWRlIHRoZSBsaW5lCiAgICogdGVybWluYXRvci4gRGVmYXVsdCBpcyBgZmFsc2VgLgogICAqCiAgICogSWYgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCBhZnRlciBhbnkgYnl0ZXMgaGF2ZSBiZWVuIHJlYWQgZnJvbSBzdGRpbiwKICAgKiB0aGF0IGRhdGEgaXMgcmV0dXJuZWQgd2l0aG91dCBhIGxpbmUgdGVybWluYXRvci4KICAgKiBSZXR1cm5zIGBudWxsYCBpZiBubyBieXRlcyBwcmVjZWRlZCB0aGUgZW5kIG9mIGlucHV0LgogICAqLwogIFN0cmluZyByZWFkTGluZVN5bmMoCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZzogc3lzdGVtRW5jb2RpbmcsIGJvb2wgcmV0YWluTmV3bGluZXM6IGZhbHNlfSkgewogICAgY29uc3QgQ1IgPSAxMzsKICAgIGNvbnN0IExGID0gMTA7CiAgICBmaW5hbCBMaXN0PGludD4gbGluZSA9IDxpbnQ+W107CiAgICAvLyBPbiBXaW5kb3dzLCBpZiBsaW5lTW9kZSBpcyBkaXNhYmxlZCwgb25seSBDUiBpcyByZWNlaXZlZC4KICAgIGJvb2wgY3JJc05ld2xpbmUgPSBQbGF0Zm9ybS5pc1dpbmRvd3MgJiYKICAgICAgICAoc3RkaW9UeXBlKHN0ZGluKSA9PSBTdGRpb1R5cGUudGVybWluYWwpICYmCiAgICAgICAgIWxpbmVNb2RlOwogICAgaWYgKHJldGFpbk5ld2xpbmVzKSB7CiAgICAgIGludCBieXRlOwogICAgICBkbyB7CiAgICAgICAgYnl0ZSA9IHJlYWRCeXRlU3luYygpOwogICAgICAgIGlmIChieXRlIDwgMCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGxpbmUuYWRkKGJ5dGUpOwogICAgICB9IHdoaWxlIChieXRlICE9IExGICYmICEoYnl0ZSA9PSBDUiAmJiBjcklzTmV3bGluZSkpOwogICAgICBpZiAobGluZS5pc0VtcHR5KSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY3JJc05ld2xpbmUpIHsKICAgICAgLy8gQ1IgYW5kIExGIGFyZSBib3RoIGxpbmUgdGVybWluYXRvcnMsIG5laXRoZXIgaXMgcmV0YWluZWQuCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaW50IGJ5dGUgPSByZWFkQnl0ZVN5bmMoKTsKICAgICAgICBpZiAoYnl0ZSA8IDApIHsKICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChieXRlID09IExGIHx8IGJ5dGUgPT0gQ1IpIGJyZWFrOwogICAgICAgIGxpbmUuYWRkKGJ5dGUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBDYXNlIGhhdmluZyB0byBoYW5kbGUgQ1IgTEYgYXMgYSBzaW5nbGUgdW5yZXRhaW5lZCBsaW5lIHRlcm1pbmF0b3IuCiAgICAgIG91dGVyOgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGludCBieXRlID0gcmVhZEJ5dGVTeW5jKCk7CiAgICAgICAgaWYgKGJ5dGUgPT0gTEYpIGJyZWFrOwogICAgICAgIGlmIChieXRlID09IENSKSB7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGJ5dGUgPSByZWFkQnl0ZVN5bmMoKTsKICAgICAgICAgICAgaWYgKGJ5dGUgPT0gTEYpIGJyZWFrIG91dGVyOwoKICAgICAgICAgICAgbGluZS5hZGQoQ1IpOwogICAgICAgICAgfSB3aGlsZSAoYnl0ZSA9PSBDUik7CiAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggYW5kIGhhbmRsZSBub24tQ1IgY2hhcmFjdGVyLgogICAgICAgIH0KICAgICAgICBpZiAoYnl0ZSA8IDApIHsKICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGxpbmUuYWRkKGJ5dGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZW5jb2RpbmcuZGVjb2RlKGxpbmUpOwogIH0KCiAgLyoqCiAgICogQ2hlY2sgaWYgZWNobyBtb2RlIGlzIGVuYWJsZWQgb24gW3N0ZGluXS4KICAgKi8KICBleHRlcm5hbCBib29sIGdldCBlY2hvTW9kZTsKCiAgLyoqCiAgICogRW5hYmxlIG9yIGRpc2FibGUgZWNobyBtb2RlIG9uIFtzdGRpbl0uCiAgICoKICAgKiBJZiBkaXNhYmxlZCwgaW5wdXQgZnJvbSB0byBjb25zb2xlIHdpbGwgbm90IGJlIGVjaG9lZC4KICAgKgogICAqIERlZmF1bHQgZGVwZW5kcyBvbiB0aGUgcGFyZW50IHByb2Nlc3MsIGJ1dCB1c3VhbGx5IGVuYWJsZWQuCiAgICoKICAgKiBPbiBXaW5kb3dzIHRoaXMgbW9kZSBjYW4gb25seSBiZSBlbmFibGVkIGlmIFtsaW5lTW9kZV0gaXMgZW5hYmxlZCBhcyB3ZWxsLgogICAqLwogIGV4dGVybmFsIHZvaWQgc2V0IGVjaG9Nb2RlKGJvb2wgZW5hYmxlZCk7CgogIC8qKgogICAqIENoZWNrIGlmIGxpbmUgbW9kZSBpcyBlbmFibGVkIG9uIFtzdGRpbl0uCiAgICovCiAgZXh0ZXJuYWwgYm9vbCBnZXQgbGluZU1vZGU7CgogIC8qKgogICAqIEVuYWJsZSBvciBkaXNhYmxlIGxpbmUgbW9kZSBvbiBbc3RkaW5dLgogICAqCiAgICogSWYgZW5hYmxlZCwgY2hhcmFjdGVycyBhcmUgZGVsYXllZCB1bnRpbCBhIG5ldy1saW5lIGNoYXJhY3RlciBpcyBlbnRlcmVkLgogICAqIElmIGRpc2FibGVkLCBjaGFyYWN0ZXJzIHdpbGwgYmUgYXZhaWxhYmxlIGFzIHR5cGVkLgogICAqCiAgICogRGVmYXVsdCBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgcHJvY2VzcywgYnV0IHVzdWFsbHkgZW5hYmxlZC4KICAgKgogICAqIE9uIFdpbmRvd3MgdGhpcyBtb2RlIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIFtlY2hvTW9kZV0gaXMgZGlzYWJsZWQgYXMgd2VsbC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHNldCBsaW5lTW9kZShib29sIGVuYWJsZWQpOwoKICAvKioKICAgICogV2hldGhlciBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbCB0aGF0IHN1cHBvcnRzIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4KICAgICoKICAgICogTm90IGFsbCB0ZXJtaW5hbHMgYXJlIHJlY29nbml6ZWQsIGFuZCBub3QgYWxsIHJlY29nbml6ZWQgdGVybWluYWxzIGNhbgogICAgKiByZXBvcnQgd2hldGhlciB0aGV5IHN1cHBvcnQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLCBzbyB0aGlzIHZhbHVlIGlzIGEKICAgICogYmVzdC1lZmZvcnQgYXR0ZW1wdCBhdCBkZXRlY3RpbmcgdGhlIHN1cHBvcnQuCiAgICAqCiAgICAqIFRoZSBhY3R1YWwgZXNjYXBlIHNlcXVlbmNlIHN1cHBvcnQgbWF5IGRpZmZlciBiZXR3ZWVuIHRlcm1pbmFscywKICAgICogd2l0aCBzb21lIHRlcm1pbmFscyBzdXBwb3J0aW5nIG1vcmUgZXNjYXBlIHNlcXVlbmNlcyB0aGFuIG90aGVycywKICAgICogYW5kIHNvbWUgdGVybWluYWxzIGV2ZW4gZGlmZmVyaW5nIGluIGJlaGF2aW9yIGZvciB0aGUgc2FtZSBlc2NhcGUKICAgICogc2VxdWVuY2UuCiAgICAqCiAgICAqIFRoZSBBTlNJIGNvbG9yIHNlbGVjdGlvbiBpcyBnZW5lcmFsbHkgc3VwcG9ydGVkLgogICAgKgogICAgKiBDdXJyZW50bHksIGEgYFRFUk1gIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBgeHRlcm1gCiAgICAqIHdpbGwgYmUgdGFrZW4gYXMgZXZpZGVuY2UgdGhhdCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIHN1cHBvcnRlZC4KICAgICogT24gV2luZG93cywgb25seSB2ZXJzaW9ucyBvZiBXaW5kb3dzIDEwIGFmdGVyIHYuMTUxMQogICAgKiAoIlRIMiIsIE9TIGJ1aWxkIDEwNTg2KSB3aWxsIGJlIGRldGVjdGVkIGFzIHN1cHBvcnRpbmcgdGhlIG91dHB1dCBvZgogICAgKiBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMsIGFuZCBvbmx5IHZlcnNpb25zIGFmdGVyIHYuMTYwNyAoIkFubml2ZXJzYXJ5CiAgICAqIFVwZGF0ZSIsIE9TIGJ1aWxkIDE0MzkzKSB3aWxsIGJlIGRldGVjdGVkIGFzIHN1cHBvcnRpbmcgdGhlIGlucHV0IG9mCiAgICAqIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4KICAgICovCiAgZXh0ZXJuYWwgYm9vbCBnZXQgc3VwcG9ydHNBbnNpRXNjYXBlczsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkIGEgYnl0ZSBmcm9tIHN0ZGluLiBUaGlzIGNhbGwgd2lsbCBibG9jayB1bnRpbCBhIGJ5dGUgaXMKICAgKiBhdmFpbGFibGUuCiAgICoKICAgKiBJZiBhdCBlbmQgb2YgZmlsZSwgLTEgaXMgcmV0dXJuZWQuCiAgICovCiAgZXh0ZXJuYWwgaW50IHJlYWRCeXRlU3luYygpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSB0ZXJtaW5hbCBhdHRhY2hlZCB0byBzdGRpbi4KICAgKi8KICBib29sIGdldCBoYXNUZXJtaW5hbCB7CiAgICB0cnkgewogICAgICByZXR1cm4gc3RkaW9UeXBlKHRoaXMpID09IFN0ZGlvVHlwZS50ZXJtaW5hbDsKICAgIH0gb24gRmlsZVN5c3RlbUV4Y2VwdGlvbiBjYXRjaCAoXykgewogICAgICAvLyBJZiBzdGRpb1R5cGUgdGhyb3dzIGEgRmlsZVN5c3RlbUV4Y2VwdGlvbiwgdGhlbiBpdCBpcyBub3QgaG9va2VkIHVwIHRvCiAgICAgIC8vIGEgdGVybWluYWwsIHByb2JhYmx5IGJlY2F1c2UgaXQgaXMgY2xvc2VkLCBidXQgbGV0IG90aGVyIGV4Y2VwdGlvbgogICAgICAvLyB0eXBlcyBidWJibGUgdXAuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCi8qKgogKiBbU3Rkb3V0XSByZXByZXNlbnRzIHRoZSBbSU9TaW5rXSBmb3IgZWl0aGVyIGBzdGRvdXRgIG9yIGBzdGRlcnJgLgogKgogKiBJdCBwcm92aWRlcyBhICpibG9ja2luZyogYElPU2lua2AsIHNvIHVzaW5nIHRoaXMgdG8gd3JpdGUgd2lsbCBibG9jayB1bnRpbAogKiB0aGUgb3V0cHV0IGlzIHdyaXR0ZW4uCiAqCiAqIEluIHNvbWUgc2l0dWF0aW9ucyB0aGlzIGJsb2NraW5nIGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlIGFzIGl0IGRvZXMgbm90CiAqIHByb3ZpZGUgdGhlIHNhbWUgbm9uLWJsb2NraW5nIGJlaGF2aW9yIGFzIGRhcnQ6aW8gaW4gZ2VuZXJhbCBleHBvc2VzLgogKiBVc2UgdGhlIHByb3BlcnR5IFtub25CbG9ja2luZ10gdG8gZ2V0IGFuIGBJT1NpbmtgIHdoaWNoIGhhcyB0aGUgbm9uLWJsb2NraW5nCiAqIGJlaGF2aW9yLgogKgogKiBUaGlzIGNsYXNzIGNhbiBhbHNvIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBgc3Rkb3V0YCBvciBgc3RkZXJyYCBpcwogKiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbCBhbmQgcXVlcnkgc29tZSB0ZXJtaW5hbCBwcm9wZXJ0aWVzLgogKgogKiBUaGUgW2FkZEVycm9yXSBBUEkgaXMgaW5oZXJpdGVkIGZyb20gIFtTdHJlYW1TaW5rXSBhbmQgY2FsbGluZyBpdCB3aWxsIHJlc3VsdAogKiBpbiBhbiB1bmhhbmRsZWQgYXN5bmNocm9ub3VzIGVycm9yIHVubGVzcyB0aGVyZSBpcyBhbiBlcnJvciBoYW5kbGVyIG9uCiAqIFtkb25lXS4KICovCmNsYXNzIFN0ZG91dCBleHRlbmRzIF9TdGRTaW5rIGltcGxlbWVudHMgSU9TaW5rIHsKICBmaW5hbCBpbnQgX2ZkOwogIElPU2luayBfbm9uQmxvY2tpbmc7CgogIFN0ZG91dC5fKElPU2luayBzaW5rLCB0aGlzLl9mZCkgOiBzdXBlcihzaW5rKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgdGVybWluYWwgYXR0YWNoZWQgdG8gc3Rkb3V0LgogICAqLwogIGJvb2wgZ2V0IGhhc1Rlcm1pbmFsID0+IF9oYXNUZXJtaW5hbChfZmQpOwoKICAvKioKICAgKiBHZXQgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSB0ZXJtaW5hbC4KICAgKgogICAqIElmIG5vIHRlcm1pbmFsIGlzIGF0dGFjaGVkIHRvIHN0ZG91dCwgYSBbU3Rkb3V0RXhjZXB0aW9uXSBpcyB0aHJvd24uIFNlZQogICAqIFtoYXNUZXJtaW5hbF0gZm9yIG1vcmUgaW5mby4KICAgKi8KICBpbnQgZ2V0IHRlcm1pbmFsQ29sdW1ucyA9PiBfdGVybWluYWxDb2x1bW5zKF9mZCk7CgogIC8qKgogICAqIEdldCB0aGUgbnVtYmVyIG9mIGxpbmVzIG9mIHRoZSB0ZXJtaW5hbC4KICAgKgogICAqIElmIG5vIHRlcm1pbmFsIGlzIGF0dGFjaGVkIHRvIHN0ZG91dCwgYSBbU3Rkb3V0RXhjZXB0aW9uXSBpcyB0aHJvd24uIFNlZQogICAqIFtoYXNUZXJtaW5hbF0gZm9yIG1vcmUgaW5mby4KICAgKi8KICBpbnQgZ2V0IHRlcm1pbmFsTGluZXMgPT4gX3Rlcm1pbmFsTGluZXMoX2ZkKTsKCiAgLyoqCiAgICAqIFdoZXRoZXIgY29ubmVjdGVkIHRvIGEgdGVybWluYWwgdGhhdCBzdXBwb3J0cyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuCiAgICAqCiAgICAqIE5vdCBhbGwgdGVybWluYWxzIGFyZSByZWNvZ25pemVkLCBhbmQgbm90IGFsbCByZWNvZ25pemVkIHRlcm1pbmFscyBjYW4KICAgICogcmVwb3J0IHdoZXRoZXIgdGhleSBzdXBwb3J0IEFOU0kgZXNjYXBlIHNlcXVlbmNlcywgc28gdGhpcyB2YWx1ZSBpcyBhCiAgICAqIGJlc3QtZWZmb3J0IGF0dGVtcHQgYXQgZGV0ZWN0aW5nIHRoZSBzdXBwb3J0LgogICAgKgogICAgKiBUaGUgYWN0dWFsIGVzY2FwZSBzZXF1ZW5jZSBzdXBwb3J0IG1heSBkaWZmZXIgYmV0d2VlbiB0ZXJtaW5hbHMsCiAgICAqIHdpdGggc29tZSB0ZXJtaW5hbHMgc3VwcG9ydGluZyBtb3JlIGVzY2FwZSBzZXF1ZW5jZXMgdGhhbiBvdGhlcnMsCiAgICAqIGFuZCBzb21lIHRlcm1pbmFscyBldmVuIGRpZmZlcmluZyBpbiBiZWhhdmlvciBmb3IgdGhlIHNhbWUgZXNjYXBlCiAgICAqIHNlcXVlbmNlLgogICAgKgogICAgKiBUaGUgQU5TSSBjb2xvciBzZWxlY3Rpb24gaXMgZ2VuZXJhbGx5IHN1cHBvcnRlZC4KICAgICoKICAgICogQ3VycmVudGx5LCBhIGBURVJNYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgYHh0ZXJtYAogICAgKiB3aWxsIGJlIHRha2VuIGFzIGV2aWRlbmNlIHRoYXQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQuCiAgICAqIE9uIFdpbmRvd3MsIG9ubHkgdmVyc2lvbnMgb2YgV2luZG93cyAxMCBhZnRlciB2LjE1MTEKICAgICogKCJUSDIiLCBPUyBidWlsZCAxMDU4Nikgd2lsbCBiZSBkZXRlY3RlZCBhcyBzdXBwb3J0aW5nIHRoZSBvdXRwdXQgb2YKICAgICogQU5TSSBlc2NhcGUgc2VxdWVuY2VzLCBhbmQgb25seSB2ZXJzaW9ucyBhZnRlciB2LjE2MDcgKCJBbm5pdmVyc2FyeQogICAgKiBVcGRhdGUiLCBPUyBidWlsZCAxNDM5Mykgd2lsbCBiZSBkZXRlY3RlZCBhcyBzdXBwb3J0aW5nIHRoZSBpbnB1dCBvZgogICAgKiBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuCiAgICAqLwogIGJvb2wgZ2V0IHN1cHBvcnRzQW5zaUVzY2FwZXMgPT4gX3N1cHBvcnRzQW5zaUVzY2FwZXMoX2ZkKTsKCiAgZXh0ZXJuYWwgYm9vbCBfaGFzVGVybWluYWwoaW50IGZkKTsKICBleHRlcm5hbCBpbnQgX3Rlcm1pbmFsQ29sdW1ucyhpbnQgZmQpOwogIGV4dGVybmFsIGludCBfdGVybWluYWxMaW5lcyhpbnQgZmQpOwogIGV4dGVybmFsIHN0YXRpYyBib29sIF9zdXBwb3J0c0Fuc2lFc2NhcGVzKGludCBmZCk7CgogIC8qKgogICAqIEdldCBhIG5vbi1ibG9ja2luZyBgSU9TaW5rYC4KICAgKi8KICBJT1NpbmsgZ2V0IG5vbkJsb2NraW5nIHsKICAgIF9ub25CbG9ja2luZyA/Pz0gbmV3IElPU2luayhuZXcgX0ZpbGVTdHJlYW1Db25zdW1lci5mcm9tU3RkaW8oX2ZkKSk7CiAgICByZXR1cm4gX25vbkJsb2NraW5nOwogIH0KfQoKY2xhc3MgU3Rkb3V0RXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIGZpbmFsIE9TRXJyb3Igb3NFcnJvcjsKCiAgY29uc3QgU3Rkb3V0RXhjZXB0aW9uKHRoaXMubWVzc2FnZSwgW3RoaXMub3NFcnJvcl0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIlN0ZG91dEV4Y2VwdGlvbjogJG1lc3NhZ2Uke29zRXJyb3IgPT0gbnVsbCA/ICIiIDogIiwgJG9zRXJyb3IifSI7CiAgfQp9CgpjbGFzcyBTdGRpbkV4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBmaW5hbCBPU0Vycm9yIG9zRXJyb3I7CgogIGNvbnN0IFN0ZGluRXhjZXB0aW9uKHRoaXMubWVzc2FnZSwgW3RoaXMub3NFcnJvcl0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIlN0ZGluRXhjZXB0aW9uOiAkbWVzc2FnZSR7b3NFcnJvciA9PSBudWxsID8gIiIgOiAiLCAkb3NFcnJvciJ9IjsKICB9Cn0KCmNsYXNzIF9TdGRDb25zdW1lciBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyPExpc3Q8aW50Pj4gewogIGZpbmFsIF9maWxlOwoKICBfU3RkQ29uc3VtZXIoaW50IGZkKSA6IF9maWxlID0gX0ZpbGUuX29wZW5TdGRpb1N5bmMoZmQpOwoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgewogICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgIHZhciBzdWI7CiAgICBzdWIgPSBzdHJlYW0ubGlzdGVuKChkYXRhKSB7CiAgICAgIHRyeSB7CiAgICAgICAgX2ZpbGUud3JpdGVGcm9tU3luYyhkYXRhKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIHN1Yi5jYW5jZWwoKTsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgfQogICAgfSwKICAgICAgICBvbkVycm9yOiBjb21wbGV0ZXIuY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6IGNvbXBsZXRlci5jb21wbGV0ZSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgX2ZpbGUuY2xvc2VTeW5jKCk7CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSgpOwogIH0KfQoKY2xhc3MgX1N0ZFNpbmsgaW1wbGVtZW50cyBJT1NpbmsgewogIGZpbmFsIElPU2luayBfc2luazsKCiAgX1N0ZFNpbmsodGhpcy5fc2luayk7CgogIEVuY29kaW5nIGdldCBlbmNvZGluZyA9PiBfc2luay5lbmNvZGluZzsKICB2b2lkIHNldCBlbmNvZGluZyhFbmNvZGluZyBlbmNvZGluZykgewogICAgX3NpbmsuZW5jb2RpbmcgPSBlbmNvZGluZzsKICB9CgogIHZvaWQgd3JpdGUob2JqZWN0KSB7CiAgICBfc2luay53cml0ZShvYmplY3QpOwogIH0KCiAgdm9pZCB3cml0ZWxuKFtvYmplY3QgPSAiIl0pIHsKICAgIF9zaW5rLndyaXRlbG4ob2JqZWN0KTsKICB9CgogIHZvaWQgd3JpdGVBbGwob2JqZWN0cywgW3NlcCA9ICIiXSkgewogICAgX3Npbmsud3JpdGVBbGwob2JqZWN0cywgc2VwKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBkYXRhKSB7CiAgICBfc2luay5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgX3NpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgX3Npbmsud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgPT4gX3NpbmsuYWRkU3RyZWFtKHN0cmVhbSk7CiAgRnV0dXJlIGZsdXNoKCkgPT4gX3NpbmsuZmx1c2goKTsKICBGdXR1cmUgY2xvc2UoKSA9PiBfc2luay5jbG9zZSgpOwogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfc2luay5kb25lOwp9CgovLy8gVGhlIHR5cGUgb2Ygb2JqZWN0IGEgc3RhbmRhcmQgSU8gc3RyZWFtIGlzIGF0dGFjaGVkIHRvLgpjbGFzcyBTdGRpb1R5cGUgewogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgdGVybWluYWwgPSBjb25zdCBTdGRpb1R5cGUuXygidGVybWluYWwiKTsKICBzdGF0aWMgY29uc3QgU3RkaW9UeXBlIHBpcGUgPSBjb25zdCBTdGRpb1R5cGUuXygicGlwZSIpOwogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgZmlsZSA9IGNvbnN0IFN0ZGlvVHlwZS5fKCJmaWxlIik7CiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBvdGhlciA9IGNvbnN0IFN0ZGlvVHlwZS5fKCJvdGhlciIpOwoKICBARGVwcmVjYXRlZCgiVXNlIHRlcm1pbmFsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgVEVSTUlOQUwgPSB0ZXJtaW5hbDsKICBARGVwcmVjYXRlZCgiVXNlIHBpcGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBQSVBFID0gcGlwZTsKICBARGVwcmVjYXRlZCgiVXNlIGZpbGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBGSUxFID0gZmlsZTsKICBARGVwcmVjYXRlZCgiVXNlIG90aGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgT1RIRVIgPSBvdGhlcjsKCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgY29uc3QgU3RkaW9UeXBlLl8odGhpcy5uYW1lKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiU3RkaW9UeXBlOiAkbmFtZSI7Cn0KClN0ZGluIF9zdGRpbjsKU3Rkb3V0IF9zdGRvdXQ7ClN0ZG91dCBfc3RkZXJyOwoKLy8gVGhlc2UgbWF5IGJlIHNldCB0byBkaWZmZXJlbnQgdmFsdWVzIGJ5IHRoZSBlbWJlZGRlciBieSBjYWxsaW5nCi8vIF9zZXRTdGRpb0ZEcyB3aGVuIGluaXRpYWxpemluZyBkYXJ0OmlvLgppbnQgX3N0ZGluRkQgPSAwOwppbnQgX3N0ZG91dEZEID0gMTsKaW50IF9zdGRlcnJGRCA9IDI7CgpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcsICdjYWxsJykKdm9pZCBfc2V0U3RkaW9GRHMoaW50IHN0ZGluLCBpbnQgc3Rkb3V0LCBpbnQgc3RkZXJyKSB7CiAgX3N0ZGluRkQgPSBzdGRpbjsKICBfc3Rkb3V0RkQgPSBzdGRvdXQ7CiAgX3N0ZGVyckZEID0gc3RkZXJyOwp9CgovLy8gVGhlIHN0YW5kYXJkIGlucHV0IHN0cmVhbSBvZiBkYXRhIHJlYWQgYnkgdGhpcyBwcm9ncmFtLgpTdGRpbiBnZXQgc3RkaW4gewogIF9zdGRpbiA/Pz0gX1N0ZElPVXRpbHMuX2dldFN0ZGlvSW5wdXRTdHJlYW0oX3N0ZGluRkQpOwogIHJldHVybiBfc3RkaW47Cn0KCi8vLyBUaGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSBvZiBkYXRhIHdyaXR0ZW4gYnkgdGhpcyBwcm9ncmFtLgovLy8KLy8vIFRoZSBgYWRkRXJyb3JgIEFQSSBpcyBpbmhlcml0ZWQgZnJvbSAgYFN0cmVhbVNpbmtgIGFuZCBjYWxsaW5nIGl0IHdpbGwKLy8vIHJlc3VsdCBpbiBhbiB1bmhhbmRsZWQgYXN5bmNocm9ub3VzIGVycm9yIHVubGVzcyB0aGVyZSBpcyBhbiBlcnJvciBoYW5kbGVyCi8vLyBvbiBgZG9uZWAuClN0ZG91dCBnZXQgc3Rkb3V0IHsKICBfc3Rkb3V0ID8/PSBfU3RkSU9VdGlscy5fZ2V0U3RkaW9PdXRwdXRTdHJlYW0oX3N0ZG91dEZEKTsKICByZXR1cm4gX3N0ZG91dDsKfQoKLy8vIFRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtIG9mIGVycm9ycyB3cml0dGVuIGJ5IHRoaXMgcHJvZ3JhbS4KLy8vCi8vLyBUaGUgYGFkZEVycm9yYCBBUEkgaXMgaW5oZXJpdGVkIGZyb20gIGBTdHJlYW1TaW5rYCBhbmQgY2FsbGluZyBpdCB3aWxsCi8vLyByZXN1bHQgaW4gYW4gdW5oYW5kbGVkIGFzeW5jaHJvbm91cyBlcnJvciB1bmxlc3MgdGhlcmUgaXMgYW4gZXJyb3IgaGFuZGxlcgovLy8gb24gYGRvbmVgLgpTdGRvdXQgZ2V0IHN0ZGVyciB7CiAgX3N0ZGVyciA/Pz0gX1N0ZElPVXRpbHMuX2dldFN0ZGlvT3V0cHV0U3RyZWFtKF9zdGRlcnJGRCk7CiAgcmV0dXJuIF9zdGRlcnI7Cn0KCi8vLyBGb3IgYSBzdHJlYW0sIHJldHVybnMgd2hldGhlciBpdCBpcyBhdHRhY2hlZCB0byBhIGZpbGUsIHBpcGUsIHRlcm1pbmFsLCBvcgovLy8gc29tZXRoaW5nIGVsc2UuClN0ZGlvVHlwZSBzdGRpb1R5cGUob2JqZWN0KSB7CiAgaWYgKG9iamVjdCBpcyBfU3RkU3RyZWFtKSB7CiAgICBvYmplY3QgPSBvYmplY3QuX3N0cmVhbTsKICB9IGVsc2UgaWYgKG9iamVjdCA9PSBzdGRvdXQgfHwgb2JqZWN0ID09IHN0ZGVycikgewogICAgaW50IHN0ZGlvZmQgPSBvYmplY3QgPT0gc3Rkb3V0ID8gX3N0ZG91dEZEIDogX3N0ZGVyckZEOwogICAgc3dpdGNoIChfU3RkSU9VdGlscy5fZ2V0U3RkaW9IYW5kbGVUeXBlKHN0ZGlvZmQpKSB7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsOgogICAgICAgIHJldHVybiBTdGRpb1R5cGUudGVybWluYWw7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVBpcGU6CiAgICAgICAgcmV0dXJuIFN0ZGlvVHlwZS5waXBlOwogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVGaWxlOgogICAgICAgIHJldHVybiBTdGRpb1R5cGUuZmlsZTsKICAgIH0KICB9CiAgaWYgKG9iamVjdCBpcyBfRmlsZVN0cmVhbSkgewogICAgcmV0dXJuIFN0ZGlvVHlwZS5maWxlOwogIH0KICBpZiAob2JqZWN0IGlzIFNvY2tldCkgewogICAgaW50IHNvY2tldFR5cGUgPSBfU3RkSU9VdGlscy5fc29ja2V0VHlwZShvYmplY3QpOwogICAgaWYgKHNvY2tldFR5cGUgPT0gbnVsbCkgcmV0dXJuIFN0ZGlvVHlwZS5vdGhlcjsKICAgIHN3aXRjaCAoc29ja2V0VHlwZSkgewogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbDoKICAgICAgICByZXR1cm4gU3RkaW9UeXBlLnRlcm1pbmFsOwogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVQaXBlOgogICAgICAgIHJldHVybiBTdGRpb1R5cGUucGlwZTsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlRmlsZToKICAgICAgICByZXR1cm4gU3RkaW9UeXBlLmZpbGU7CiAgICB9CiAgfQogIGlmIChvYmplY3QgaXMgX0lPU2lua0ltcGwpIHsKICAgIHRyeSB7CiAgICAgIGlmIChvYmplY3QuX3RhcmdldCBpcyBfRmlsZVN0cmVhbUNvbnN1bWVyKSB7CiAgICAgICAgcmV0dXJuIFN0ZGlvVHlwZS5maWxlOwogICAgICB9CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIC8vIE9ubHkgdGhlIGludGVyZmFjZSBpbXBsZW1lbnRlZCwgX3Npbmsgbm90IGF2YWlsYWJsZS4KICAgIH0KICB9CiAgcmV0dXJuIFN0ZGlvVHlwZS5vdGhlcjsKfQoKY2xhc3MgX1N0ZElPVXRpbHMgewogIGV4dGVybmFsIHN0YXRpYyBfZ2V0U3RkaW9PdXRwdXRTdHJlYW0oaW50IGZkKTsKICBleHRlcm5hbCBzdGF0aWMgU3RkaW4gX2dldFN0ZGlvSW5wdXRTdHJlYW0oaW50IGZkKTsKCiAgLy8vIFJldHVybnMgdGhlIHNvY2tldCB0eXBlIG9yIGBudWxsYCBpZiBbc29ja2V0XSBpcyBub3QgYSBidWlsdGluIHNvY2tldC4KICBleHRlcm5hbCBzdGF0aWMgaW50IF9zb2NrZXRUeXBlKFNvY2tldCBzb2NrZXQpOwogIGV4dGVybmFsIHN0YXRpYyBfZ2V0U3RkaW9IYW5kbGVUeXBlKGludCBmZCk7Cn0KgeIATk48AREBKCQkJiUBLSMBHAFFPyJJBAIBBEwRAzsEPgsBPwEGHQUsBVBPHgU6QAVOUSUFSjY7BhdJExMkQS00ExoQCx8YEQoYPBoVCB5DFSMYKREKLRgIDU0NFSMfGg8jKQEaIDcKGCkRChgIBiIEAQYvBh4BBi0FPAVBBVAGLAEGLwYeAQYtBU85BUEFUgYsAQZLBk1MNAZHSEgQBjcGTUo7S0pLHQcpAQZQEAUoBh8BBjwGGQo0KVBMGhQGBAIBBEUDThoDS0lQDQNIPwNRSgsEMhEXATEBBj0GLQEGMAVOIgY0AQYuBU4iBjABBksGTUw0BkdISBAGNwZNSjtLSksdBz0BJiknNQEGIgYbSRkEAgEvGBkBNwEWTgQCAS4YGQE2ARZNBAIBOg8BOwEvJQ0hDCMXFicIByokHh0EARMXHwQCASMWARgBKykfBAEXGQQBIBsEASciBAEdFQQBMicEASUjBAFJIyMhAgE8EkM7Oz0BJi4iJiImIygBFSArAgEOEBABQysSExMBIjcUFhYCATwSORECAUAES08PFDwSAgFCBEtPDxQ8EgIBTxQeHh01PDglIyEfIR8GBB8bBBo2NBolIyEfIR8GBB8KMx8IEj4GBBoCARQxNgFNMi8CARJkYXJ0OmlvL3N0ZGlvLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9zdGRpb19wYXRjaC5kYXJ0keMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIF9TdGRJT1V0aWxzIHsKICBAcGF0Y2gKICBzdGF0aWMgU3RkaW4gX2dldFN0ZGlvSW5wdXRTdHJlYW0oaW50IGZkKSB7CiAgICBzd2l0Y2ggKF9nZXRTdGRpb0hhbmRsZVR5cGUoZmQpKSB7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsOgogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVQaXBlOgogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVTb2NrZXQ6CiAgICAgICAgcmV0dXJuIG5ldyBTdGRpbi5fKG5ldyBfU29ja2V0Ll9yZWFkUGlwZShmZCksIGZkKTsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlRmlsZToKICAgICAgICByZXR1cm4gbmV3IFN0ZGluLl8obmV3IF9GaWxlU3RyZWFtLmZvclN0ZGluKCksIGZkKTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICAgIkNvdWxkbid0IGRldGVybWluZSBmaWxlIHR5cGUgb2Ygc3RkaW4gKGZkICRmZCkiKTsKICAgIH0KICB9CgogIEBwYXRjaAogIHN0YXRpYyBfZ2V0U3RkaW9PdXRwdXRTdHJlYW0oaW50IGZkKSB7CiAgICBzd2l0Y2ggKF9nZXRTdGRpb0hhbmRsZVR5cGUoZmQpKSB7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsOgogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVQaXBlOgogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVTb2NrZXQ6CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZUZpbGU6CiAgICAgICAgcmV0dXJuIG5ldyBTdGRvdXQuXyhuZXcgSU9TaW5rKG5ldyBfU3RkQ29uc3VtZXIoZmQpKSwgZmQpOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgICAiQ291bGRuJ3QgZGV0ZXJtaW5lIGZpbGUgdHlwZSBvZiBzdGRpbyBoYW5kbGUgKGZkICRmZCkiKTsKICAgIH0KICB9CgogIEBwYXRjaAogIHN0YXRpYyBpbnQgX3NvY2tldFR5cGUoU29ja2V0IHNvY2tldCkgewogICAgaWYgKHNvY2tldCBpcyBfU29ja2V0KSByZXR1cm4gX25hdGl2ZVNvY2tldFR5cGUoc29ja2V0Ll9uYXRpdmVTb2NrZXQpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgaW50IF9uYXRpdmVTb2NrZXRUeXBlKF9OYXRpdmVTb2NrZXQgbmF0aXZlU29ja2V0KSB7CiAgICB2YXIgcmVzdWx0ID0gX2dldFNvY2tldFR5cGUobmF0aXZlU29ja2V0KTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiRXJyb3IgcmV0cmlldmluZyBzb2NrZXQgdHlwZSIsICIiLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBfZ2V0U3RkaW9IYW5kbGVUeXBlKGludCBmZCkgbmF0aXZlICJGaWxlX0dldFN0ZGlvSGFuZGxlVHlwZSI7Cn0KCkBwYXRjaApjbGFzcyBTdGRpbiB7CiAgQHBhdGNoCiAgaW50IHJlYWRCeXRlU3luYygpIHsKICAgIHZhciByZXN1bHQgPSBfcmVhZEJ5dGUoX2ZkKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU3RkaW5FeGNlcHRpb24oIkVycm9yIHJlYWRpbmcgYnl0ZSBmcm9tIHN0ZGluIiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBib29sIGdldCBlY2hvTW9kZSB7CiAgICB2YXIgcmVzdWx0ID0gX2VjaG9Nb2RlKF9mZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFN0ZGluRXhjZXB0aW9uKCJFcnJvciBnZXR0aW5nIHRlcm1pbmFsIGVjaG8gbW9kZSIsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgdm9pZCBzZXQgZWNob01vZGUoYm9vbCBlbmFibGVkKSB7CiAgICBpZiAoIV9FbWJlZGRlckNvbmZpZy5fbWF5U2V0RWNob01vZGUpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVGhpcyBlbWJlZGRlciBkaXNhbGxvd3Mgc2V0dGluZyBTdGRpbi5lY2hvTW9kZSIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9zZXRFY2hvTW9kZShfZmQsIGVuYWJsZWQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTdGRpbkV4Y2VwdGlvbigiRXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBlY2hvIG1vZGUiLCByZXN1bHQpOwogICAgfQogIH0KCiAgQHBhdGNoCiAgYm9vbCBnZXQgbGluZU1vZGUgewogICAgdmFyIHJlc3VsdCA9IF9saW5lTW9kZShfZmQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTdGRpbkV4Y2VwdGlvbigiRXJyb3IgZ2V0dGluZyB0ZXJtaW5hbCBsaW5lIG1vZGUiLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIHZvaWQgc2V0IGxpbmVNb2RlKGJvb2wgZW5hYmxlZCkgewogICAgaWYgKCFfRW1iZWRkZXJDb25maWcuX21heVNldExpbmVNb2RlKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIlRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIHNldHRpbmcgU3RkaW4ubGluZU1vZGUiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfc2V0TGluZU1vZGUoX2ZkLCBlbmFibGVkKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU3RkaW5FeGNlcHRpb24oIkVycm9yIHNldHRpbmcgdGVybWluYWwgbGluZSBtb2RlIiwgcmVzdWx0KTsKICAgIH0KICB9CgogIEBwYXRjaAogIGJvb2wgZ2V0IHN1cHBvcnRzQW5zaUVzY2FwZXMgewogICAgdmFyIHJlc3VsdCA9IF9zdXBwb3J0c0Fuc2lFc2NhcGVzKF9mZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFN0ZGluRXhjZXB0aW9uKCJFcnJvciBkZXRlcm1pbmluZyBBTlNJIHN1cHBvcnQiLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBfZWNob01vZGUoaW50IGZkKSBuYXRpdmUgIlN0ZGluX0dldEVjaG9Nb2RlIjsKICBzdGF0aWMgX3NldEVjaG9Nb2RlKGludCBmZCwgYm9vbCBlbmFibGVkKSBuYXRpdmUgIlN0ZGluX1NldEVjaG9Nb2RlIjsKICBzdGF0aWMgX2xpbmVNb2RlKGludCBmZCkgbmF0aXZlICJTdGRpbl9HZXRMaW5lTW9kZSI7CiAgc3RhdGljIF9zZXRMaW5lTW9kZShpbnQgZmQsIGJvb2wgZW5hYmxlZCkgbmF0aXZlICJTdGRpbl9TZXRMaW5lTW9kZSI7CiAgc3RhdGljIF9yZWFkQnl0ZShpbnQgZmQpIG5hdGl2ZSAiU3RkaW5fUmVhZEJ5dGUiOwogIHN0YXRpYyBfc3VwcG9ydHNBbnNpRXNjYXBlcyhpbnQgZmQpIG5hdGl2ZSAiU3RkaW5fQW5zaVN1cHBvcnRlZCI7Cn0KCkBwYXRjaApjbGFzcyBTdGRvdXQgewogIEBwYXRjaAogIGJvb2wgX2hhc1Rlcm1pbmFsKGludCBmZCkgewogICAgdHJ5IHsKICAgICAgX3Rlcm1pbmFsU2l6ZShmZCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBjYXRjaCAoXykgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBAcGF0Y2gKICBpbnQgX3Rlcm1pbmFsQ29sdW1ucyhpbnQgZmQpID0+IF90ZXJtaW5hbFNpemUoZmQpWzBdOwogIEBwYXRjaAogIGludCBfdGVybWluYWxMaW5lcyhpbnQgZmQpID0+IF90ZXJtaW5hbFNpemUoZmQpWzFdOwoKICBzdGF0aWMgTGlzdCBfdGVybWluYWxTaXplKGludCBmZCkgewogICAgdmFyIHNpemUgPSBfZ2V0VGVybWluYWxTaXplKGZkKTsKICAgIGlmIChzaXplIGlzISBMaXN0KSB7CiAgICAgIHRocm93IG5ldyBTdGRvdXRFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgdGVybWluYWwgc2l6ZSIsIHNpemUpOwogICAgfQogICAgcmV0dXJuIHNpemU7CiAgfQoKICBzdGF0aWMgX2dldFRlcm1pbmFsU2l6ZShpbnQgZmQpIG5hdGl2ZSAiU3Rkb3V0X0dldFRlcm1pbmFsU2l6ZSI7CgogIEBwYXRjaAogIHN0YXRpYyBib29sIF9zdXBwb3J0c0Fuc2lFc2NhcGVzKGludCBmZCkgewogICAgdmFyIHJlc3VsdCA9IF9nZXRBbnNpU3VwcG9ydGVkKGZkKTsKICAgIGlmIChyZXN1bHQgaXMhIGJvb2wpIHsKICAgICAgdGhyb3cgbmV3IFN0ZG91dEV4Y2VwdGlvbigiRXJyb3IgZGV0ZXJtaW5pbmcgQU5TSSBzdXBwb3J0IiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgX2dldEFuc2lTdXBwb3J0ZWQoaW50IGZkKSBuYXRpdmUgIlN0ZG91dF9BbnNpU3VwcG9ydGVkIjsKfQoKX2dldFN0ZGlvSGFuZGxlKF9OYXRpdmVTb2NrZXQgc29ja2V0LCBpbnQgbnVtKSBuYXRpdmUgIlNvY2tldF9HZXRTdGRpb0hhbmRsZSI7Cl9nZXRTb2NrZXRUeXBlKF9OYXRpdmVTb2NrZXQgbmF0aXZlU29ja2V0KSBuYXRpdmUgIlNvY2tldF9HZXRUeXBlIjsKgKgATk48ASABBxQJLiclISM7ITwPJz8GBAEJKSclISMhQw8nRgYEAQkqSxEEAT0vHVEGEwQBCUcCAQcOCRchHUkGEwQBCRYhHUwGEwQBCSQsIj0GLR1MBgQBCRYhHUwGEwQBCSQsIj0GLR1MBgQBCSEsHUoGEwQBN0g3SDREAgEHDwkeChkTEhQGBAEJOAk2ASYlGUYGEQQBQwEJLSgbSwYTBAFCAgFPRAEeZGFydDppby1wYXRjaC9zdGRpb19wYXRjaC5kYXJ0Nm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9zdHJpbmdfdHJhbnNmb3JtZXIuZGFydI3aLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8vLyBUaGUgY3VycmVudCBzeXN0ZW0gZW5jb2RpbmcuCi8vLwovLy8gVGhpcyBpcyB1c2VkIGZvciBjb252ZXJ0aW5nIGZyb20gYnl0ZXMgdG8gYW5kIGZyb20gU3RyaW5ncyB3aGVuCi8vLyBjb21tdW5pY2F0aW5nIG9uIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KLy8vCi8vLyBPbiBXaW5kb3dzIHRoaXMgd2lsbCB1c2UgdGhlIGN1cnJlbnRseSBhY3RpdmUgY29kZSBwYWdlIGZvciB0aGUgY29udmVyc2lvbi4KLy8vIE9uIGFsbCBvdGhlciBzeXN0ZW1zIGl0IHdpbGwgYWx3YXlzIHVzZSBVVEYtOC4KY29uc3QgU3lzdGVtRW5jb2Rpbmcgc3lzdGVtRW5jb2RpbmcgPSBjb25zdCBTeXN0ZW1FbmNvZGluZygpOwpARGVwcmVjYXRlZCgiVXNlIHN5c3RlbUVuY29kaW5nIGluc3RlYWQiKQpjb25zdCBTeXN0ZW1FbmNvZGluZyBTWVNURU1fRU5DT0RJTkcgPSBjb25zdCBTeXN0ZW1FbmNvZGluZygpOwoKLy8vIFRoZSBzeXN0ZW0gZW5jb2RpbmcgaXMgdGhlIGN1cnJlbnQgY29kZSBwYWdlIG9uIFdpbmRvd3MgYW5kIFVURi04IG9uIExpbnV4Ci8vLyBhbmQgTWFjLgpjbGFzcyBTeXN0ZW1FbmNvZGluZyBleHRlbmRzIEVuY29kaW5nIHsKICAvLy8gQ3JlYXRlcyBhIGNvbnN0IFN5c3RlbUVuY29kaW5nLgogIC8vLwogIC8vLyBVc2VycyBzaG91bGQgdXNlIHRoZSB0b3AtbGV2ZWwgY29uc3RhbnQsIFtzeXN0ZW1FbmNvZGluZ10uCiAgY29uc3QgU3lzdGVtRW5jb2RpbmcoKTsKCiAgU3RyaW5nIGdldCBuYW1lID0+ICdzeXN0ZW0nOwoKICBMaXN0PGludD4gZW5jb2RlKFN0cmluZyBpbnB1dCkgPT4gZW5jb2Rlci5jb252ZXJ0KGlucHV0KTsKICBTdHJpbmcgZGVjb2RlKExpc3Q8aW50PiBlbmNvZGVkKSA9PiBkZWNvZGVyLmNvbnZlcnQoZW5jb2RlZCk7CgogIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gZ2V0IGVuY29kZXIgewogICAgaWYgKFBsYXRmb3JtLm9wZXJhdGluZ1N5c3RlbSA9PSAid2luZG93cyIpIHsKICAgICAgcmV0dXJuIGNvbnN0IF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29uc3QgVXRmOEVuY29kZXIoKTsKICAgIH0KICB9CgogIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gZ2V0IGRlY29kZXIgewogICAgaWYgKFBsYXRmb3JtLm9wZXJhdGluZ1N5c3RlbSA9PSAid2luZG93cyIpIHsKICAgICAgcmV0dXJuIGNvbnN0IF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29uc3QgVXRmOERlY29kZXIoKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPFN0cmluZywgTGlzdDxpbnQ+PiB7CiAgY29uc3QgX1dpbmRvd3NDb2RlUGFnZUVuY29kZXIoKTsKCiAgTGlzdDxpbnQ+IGNvbnZlcnQoU3RyaW5nIGlucHV0KSB7CiAgICBMaXN0PGludD4gZW5jb2RlZCA9IF9lbmNvZGVTdHJpbmcoaW5wdXQpOwogICAgaWYgKGVuY29kZWQgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGNoYXJhY3RlciBmb3IgZW5jb2RpbmciKTsKICAgIH0KICAgIHJldHVybiBlbmNvZGVkOwogIH0KCiAgLyoqCiAgICogU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogICAqLwogIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIHJldHVybiBuZXcgX1dpbmRvd3NDb2RlUGFnZUVuY29kZXJTaW5rKHNpbmspOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIExpc3Q8aW50PiBfZW5jb2RlU3RyaW5nKFN0cmluZyBzdHJpbmcpOwp9CgpjbGFzcyBfV2luZG93c0NvZGVQYWdlRW5jb2RlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vIFRPRE8oZmxvaXRzY2gpOiBwcm92aWRlIG1vcmUgZWZmaWNpZW50IGNvbnZlcnNpb25zIHdoZW4gdGhlIGlucHV0IGlzCiAgLy8gbm90IGEgU3RyaW5nLgoKICBmaW5hbCBTaW5rPExpc3Q8aW50Pj4gX3Npbms7CgogIF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZChTdHJpbmcgc3RyaW5nKSB7CiAgICBMaXN0PGludD4gZW5jb2RlZCA9IF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyLl9lbmNvZGVTdHJpbmcoc3RyaW5nKTsKICAgIGlmIChlbmNvZGVkID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBjaGFyYWN0ZXIgZm9yIGVuY29kaW5nIik7CiAgICB9CiAgICBfc2luay5hZGQoZW5jb2RlZCk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChzdGFydCAhPSAwIHx8IGVuZCAhPSBzb3VyY2UubGVuZ3RoKSB7CiAgICAgIHNvdXJjZSA9IHNvdXJjZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICB9CiAgICBhZGQoc291cmNlKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQp9CgpjbGFzcyBfV2luZG93c0NvZGVQYWdlRGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gewogIGNvbnN0IF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyKCk7CgogIFN0cmluZyBjb252ZXJ0KExpc3Q8aW50PiBpbnB1dCkgewogICAgcmV0dXJuIF9kZWNvZGVCeXRlcyhpbnB1dCk7CiAgfQoKICAvKioKICAgKiBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgICovCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIHJldHVybiBuZXcgX1dpbmRvd3NDb2RlUGFnZURlY29kZXJTaW5rKHNpbmspOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfZGVjb2RlQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzKTsKfQoKY2xhc3MgX1dpbmRvd3NDb2RlUGFnZURlY29kZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgLy8gVE9ETyhmbG9pdHNjaCk6IHByb3ZpZGUgbW9yZSBlZmZpY2llbnQgY29udmVyc2lvbnMgd2hlbiB0aGUgaW5wdXQgaXMKICAvLyBhIHNsaWNlLgoKICBmaW5hbCBTaW5rPFN0cmluZz4gX3Npbms7CgogIF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIF9zaW5rLmFkZChfV2luZG93c0NvZGVQYWdlRGVjb2Rlci5fZGVjb2RlQnl0ZXMoYnl0ZXMpKTsKICB9Cn0KgIQATk48AREBIQRELwRQMz4qPwFPDSgmBkEaAR8BPEABLTEuDSIGBAEtMS4NIgYEAgFFIwEkLhtDBhQEAQYiBkYyBAE6AgFFShMBHwErARETBAEcRxtDBhgEAUIuLQYRGQQCAUUjASQgBAEGIgZBMgQBOAIBQ0oOARwBKwEREwQBHjwEAgEfZGFydDppby9zdHJpbmdfdHJhbnNmb3JtZXIuZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vc3luY19zb2NrZXQuZGFydI/SLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBBIGxvdy1sZXZlbCBjbGFzcyBmb3IgY29tbXVuaWNhdGluZyBzeW5jaHJvbm91c2x5IG92ZXIgYSBUQ1Agc29ja2V0LgogKgogKiBXYXJuaW5nOiBbUmF3U3luY2hyb25vdXNTb2NrZXRdIHNob3VsZCBwcm9iYWJseSBvbmx5IGJlIHVzZWQgdG8gY29ubmVjdCB0bwogKiAnbG9jYWxob3N0Jy4gVGhlIG9wZXJhdGlvbnMgYmVsb3cgd2lsbCBibG9jayB0aGUgY2FsbGluZyB0aHJlYWQgdG8gd2FpdCBmb3IKICogYSByZXNwb25zZSBmcm9tIHRoZSBuZXR3b3JrLiBUaGUgdGhyZWFkIGNhbiBwcm9jZXNzIG5vIG90aGVyIGV2ZW50cyB3aGlsZQogKiB3YWl0aW5nIGZvciB0aGVzZSBvcGVyYXRpb25zIHRvIGNvbXBsZXRlLiBbUmF3U3luY2hyb25vdXNTb2NrZXRdIGlzIG5vdAogKiBzdWl0YWJsZSBmb3IgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBoaWdoIHBlcmZvcm1hbmNlIG9yIGFzeW5jaHJvbm91cyBJL08KICogc3VjaCBhcyBhIHNlcnZlci4gSW5zdGVhZCBzdWNoIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBub24tYmxvY2tpbmcKICogc29ja2V0cyBhbmQgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgaW4gdGhlIFNvY2tldCBvciBSYXdTb2NrZXQgY2xhc3Nlcy4KICovCmFic3RyYWN0IGNsYXNzIFJhd1N5bmNocm9ub3VzU29ja2V0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHNvY2tldCBjb25uZWN0aW9uIGFuZCByZXR1cm5zIGEgW1Jhd1N5bmNocm9ub3VzU29ja2V0XS4KICAgKgogICAqIFtob3N0XSBjYW4gZWl0aGVyIGJlIGEgW1N0cmluZ10gb3IgYW4gW0ludGVybmV0QWRkcmVzc10uIElmIFtob3N0XSBpcyBhCiAgICogW1N0cmluZ10sIFtjb25uZWN0U3luY10gd2lsbCBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB0cnkKICAgKiBhbGwgcmV0dXJuZWQgW0ludGVybmV0QWRkcmVzc11lcywgdW50aWwgY29ubmVjdGVkLiBVbmxlc3MgYQogICAqIGNvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLCB0aGUgZXJyb3IgZnJvbSB0aGUgZmlyc3QgZmFpbGluZyBjb25uZWN0aW9uIGlzCiAgICogcmV0dXJuZWQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFJhd1N5bmNocm9ub3VzU29ja2V0IGNvbm5lY3RTeW5jKGhvc3QsIGludCBwb3J0KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGFuZCB1bnJlYWQgYnl0ZXMgaW4gdGhlIHNvY2tldCB0aGF0IGNhbiBiZQogICAqIHJlYWQuCiAgICovCiAgaW50IGF2YWlsYWJsZSgpOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIFtSYXdTeW5jaHJvbm91c1NvY2tldF0uCiAgICoKICAgKiBPbmNlIFtjbG9zZVN5bmNdIGhhcyBiZWVuIGNhbGxlZCwgYXR0ZW1wdGluZyB0byBjYWxsIFtyZWFkU3luY10sCiAgICogW3JlYWRJbnRvU3luY10sIFt3cml0ZUZyb21TeW5jXSwgW3JlbW90ZUFkZHJlc3NdLCBhbmQgW3JlbW90ZVBvcnRdIHdpbGwKICAgKiBjYXVzZSBhIFtTb2NrZXRFeGNlcHRpb25dIHRvIGJlIHRocm93bi4KICAgKi8KICB2b2lkIGNsb3NlU3luYygpOwoKICAvKioKICAgKiBSZWFkcyBpbnRvIGFuIGV4aXN0aW5nIFtMaXN0PGludD5dIGZyb20gdGhlIHNvY2tldCBpbnRvIHRoZSByYW5nZToKICAgKiBbW3N0YXJ0XSxbZW5kXSkuCiAgICoKICAgKiBSZWFkcyBpbnRvIGFuIGV4aXN0aW5nIFtMaXN0PGludD5dIGZyb20gdGhlIHNvY2tldC4gSWYgW3N0YXJ0XSBpcyBwcmVzZW50LAogICAqIHRoZSBieXRlcyB3aWxsIGJlIGZpbGxlZCBpbnRvIFtidWZmZXJdIGZyb20gaW5kZXggW3N0YXJ0XSwgb3RoZXJ3aXNlIGluZGV4CiAgICogMC4gSWYgW2VuZF0gaXMgcHJlc2VudCwgW2VuZF0gLSBbc3RhcnRdIGJ5dGVzIHdpbGwgYmUgcmVhZCBpbnRvIFtidWZmZXJdLAogICAqIG90aGVyd2lzZSB1cCB0byBbYnVmZmVyLmxlbmd0aF0uIElmIFtlbmRdID09IFtzdGFydF0sIG5vIGJ5dGVzIGFyZSByZWFkLgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLgogICAqLwogIGludCByZWFkSW50b1N5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogUmVhZHMgdXAgdG8gW2J5dGVzXSBieXRlcyBmcm9tIHRoZSBzb2NrZXQuCiAgICoKICAgKiBCbG9ja3MgYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlIG9mIHVwIHRvIGEgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcwogICAqIHNlbnQgYnkgdGhlIHNvY2tldC4gW2J5dGVzXSBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvCiAgICogYmUgcmVhZC4gUmV0dXJucyB0aGUgbGlzdCBvZiBieXRlcyByZWFkLCB3aGljaCBjb3VsZCBiZSBsZXNzIHRoYW4gdGhlCiAgICogdmFsdWUgc3BlY2lmaWVkIGJ5IFtieXRlc10uCiAgICovCiAgTGlzdDxpbnQ+IHJlYWRTeW5jKGludCBieXRlcyk7CgogIC8qKgogICAqIFNodXRkb3duIGEgc29ja2V0IGluIHRoZSBwcm92aWRlZCBkaXJlY3Rpb24uCiAgICoKICAgKiBDYWxsaW5nIHNodXRkb3duIHdpbGwgbmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uIGFuZCBjYWxsaW5nIGl0IHNldmVyYWwgdGltZXMKICAgKiBpcyBzdXBwb3J0ZWQuIElmIGJvdGggW1NvY2tldERpcmVjdGlvbi5SRUNFSVZFXSBhbmQgW1NvY2tldERpcmVjdGlvbi5TRU5EXQogICAqIGRpcmVjdGlvbnMgYXJlIGNsb3NlZCwgdGhlIHNvY2tldCBpcyBjbG9zZWQgY29tcGxldGVseSwgdGhlIHNhbWUgYXMgaWYKICAgKiBbY2xvc2VTeW5jXSBoYXMgYmVlbiBjYWxsZWQuCiAgICovCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKTsKCiAgLyoqCiAgICogV3JpdGVzIGRhdGEgZnJvbSBhIHNwZWNpZmllZCByYW5nZSBpbiBhIFtMaXN0PGludD5dIHRvIHRoZSBzb2NrZXQuCiAgICoKICAgKiBXcml0ZXMgaW50byB0aGUgc29ja2V0IGZyb20gYSBbTGlzdDxpbnQ+XS4gSWYgW3N0YXJ0XSBpcyBwcmVzZW50LCB0aGUgYnl0ZXMKICAgKiB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHNvY2tldCBzdGFydGluZyBmcm9tIGluZGV4IFtzdGFydF0uIElmIFtzdGFydF0gaXMKICAgKiBub3QgcHJlc2VudCwgdGhlIGJ5dGVzIHdpbGwgYmUgd3JpdHRlbiBzdGFydGluZyBmcm9tIGluZGV4IDAuIElmIFtlbmRdIGlzCiAgICogcHJlc2VudCwgdGhlIFtlbmRdIC0gW3N0YXJ0XSBieXRlcyB3aWxsIGJlIHdyaXR0ZW4gaW50byB0aGUgc29ja2V0IHN0YXJ0aW5nCiAgICogYXQgaW5kZXggW3N0YXJ0XS4gSWYgW2VuZF0gaXMgbm90IHByb3ZpZGVkLCBbYnVmZmVyLmxlbmd0aF0gZWxlbWVudHMgd2lsbAogICAqIGJlIHdyaXR0ZW4gdG8gdGhlIHNvY2tldCBzdGFydGluZyBmcm9tIGluZGV4IFtzdGFydF0uIElmIFtlbmRdID09IFtzdGFydF0sCiAgICogbm90aGluZyBoYXBwZW5zLgogICAqLwogIHZvaWQgd3JpdGVGcm9tU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvKioKICAgKiBUaGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogVGhlIHJlbW90ZSBwb3J0IGNvbm5lY3RlZCB0byBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHJlbW90ZVBvcnQ7CgogIC8qKgogICAqIFRoZSBbSW50ZXJuZXRBZGRyZXNzXSB1c2VkIHRvIGNvbm5lY3QgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzOwoKICAvKioKICAgKiBUaGUgcmVtb3RlIFtJbnRlcm5ldEFkZHJlc3NdIGNvbm5lY3RlZCB0byBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3M7Cn0KbwBOTjwBEQEESANOT01LT0tLBCYGSwVNTUFQDwZEAQZPCwYTAQYoBUZNLQYUAQZIFgVQUE9OJwZAAQYwBUpKSyEGIQEGMgVRUEwiBiwBBkgFUU5PUU9QFgZCAQYjBhABBjIGFgEGOAYfAQY/BiUCARhkYXJ0OmlvL3N5bmNfc29ja2V0LmRhcnQob3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NsaS9jbGkuZGFydIE/Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyB7QGNhdGVnb3J5IFZNfQpsaWJyYXJ5IGRhcnQuY2xpOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0Om1hdGgnOwoKcGFydCAnd2FpdF9mb3IuZGFydCc7Cg0ATk48ARMSARUUARYBCGRhcnQ6Y2xpLW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jbGkvd2FpdF9mb3IuZGFydJhdLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jbGk7CgovKioKICogU3luY2hyb25vdXNseSBibG9ja3MgdGhlIGNhbGxpbmcgaXNvbGF0ZSB0byB3YWl0IGZvciBhc3luY2hyb25vdXMgZXZlbnRzIHRvCiAqIGNvbXBsZXRlLgogKgogKiBJZiB0aGUgW3RpbWVvdXRdIHBhcmFtZXRlciBpcyBzdXBwbGllZCwgW3dhaXRGb3JFdmVudF0gd2lsbCByZXR1cm4gYWZ0ZXIKICogdGhlIHNwZWNpZmllZCB0aW1lb3V0IGV2ZW4gaWYgbm8gZXZlbnRzIGhhdmUgb2NjdXJyZWQuCiAqCiAqIFRoaXMgY2FsbCBkb2VzIHRoZSBmb2xsb3dpbmc6CiAqIC0gc3VzcGVuZHMgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIHN0YWNrLAogKiAtIHJ1bnMgdGhlIG1pY3JvdGFzayBxdWV1ZSB1bnRpbCBpdCBpcyBlbXB0eSwKICogLSB3YWl0cyB1bnRpbCB0aGUgbWVzc2FnZSBxdWV1ZSBpcyBub3QgZW1wdHksCiAqIC0gaGFuZGxlcyBtZXNzYWdlcyBvbiB0aGUgbWVzc2FnZSBxdWV1ZSwgcGx1cyB0aGVpciBhc3NvY2lhdGVkIG1pY3JvdGFza3MsCiAqICAgdW50aWwgdGhlIG1lc3NhZ2UgcXVldWUgaXMgZW1wdHksCiAqIC0gcmVzdW1lcyB0aGUgb3JpZ2luYWwgc3RhY2suCiAqCiAqIFRoaXMgZnVuY3Rpb24gYnJlYWtzIHRoZSB1c3VhbCBwcm9taXNlIG9mZmVyZWQgYnkgRGFydCBzZW1hbnRpY3MgdGhhdAogKiBtZXNzYWdlIGhhbmRsZXJzIGFuZCBtaWNyb3Rhc2tzIHJ1biB0byBjb21wbGV0aW9uIGJlZm9yZSB0aGUgbmV4dCBtZXNzYWdlCiAqIGhhbmRsZXIgb3IgbWljcm90YXNrIGJlZ2lucyB0byBydW4uIE9mIHBhcnRpY3VsYXIgbm90ZSBpcyB0aGF0IHVzZSBvZiB0aGlzCiAqIGZ1bmN0aW9uIGluIGEgZmluYWxseSBibG9jayB3aWxsIGFsbG93IG1pY3JvdGFza3MgYW5kIG1lc3NhZ2UgaGFuZGxlcnMgdG8KICogcnVuIGJlZm9yZSBhbGwgZmluYWxseSBibG9ja3MgZm9yIGFuIGV4Y2VwdGlvbiBoYXZlIGNvbXBsZXRlZCwgcG9zc2libHkKICogYnJlYWtpbmcgaW52YXJpYW50cyBpbiB5b3VyIHByb2dyYW0uCiAqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzeW5jaHJvbm91c2x5IHRocm93IHRoZSBmaXJzdCB1bmhhbmRsZWQgZXhjZXB0aW9uIGl0CiAqIGVuY291bnRlcnMgaW4gcnVubmluZyB0aGUgbWljcm90YXNrcyBhbmQgbWVzc2FnZSBoYW5kbGVycyBhcyB0aG91Z2ggdGhlCiAqIHRocm93aW5nIG1pY3JvdGFzayBvciBtZXNzYWdlIGhhbmRsZXIgd2FzIHRoZSBvbmx5IERhcnQgaW52b2NhdGlvbiBvbiB0aGUKICogc3RhY2suIFRoYXQgaXMsIHVuaGFuZGxlZCBleGNlcHRpb25zIGluIGEgbWljcm90YXNrIG9yIG1lc3NhZ2UgaGFuZGxlciB3aWxsCiAqIHNraXAgb3ZlciBzdGFja3Mgc3VzcGVuZGVkIGluIGEgY2FsbCB0byBbd2FpdEZvckV2ZW50XS4KICoKICogQ2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBtYXkgYmUgbmVzdGVkLiBFYXJsaWVyIGludm9jYXRpb25zIHdpbGwgbm90CiAqIGJlIGFibGUgdG8gY29tcGxldGUgdW50aWwgc3Vic2VxdWVudCBvbmVzIGRvLiBNZXNzYWdlcyB0aGF0IGFycml2ZSBhZnRlcgogKiBhIHN1YnNlcXVlbnQgaW52b2NhdGlvbiBhcmUgImNvbnN1bWVkIiBieSB0aGF0IGludm9jYXRpb24sIGFuZCBkbyBub3QKICogdW5ibG9jayBhbiBlYXJsaWVyIGludm9jYXRpb24uIFBsZWFzZSBiZSBhd2FyZSB0aGF0IG5lc3RpbmcgY2FsbHMgdG8KICogW3dhaXRGb3JFdmVudF0gY2FuIGxlYWQgdG8gZGVhZGxvY2sgd2hlbiBzdWJzZXF1ZW50IGNhbGxzIGJsb2NrIHRvIHdhaXQgZm9yCiAqIGEgY29uZGl0aW9uIHRoYXQgaXMgb25seSBzYXRpc2ZpZWQgYWZ0ZXIgYW4gZWFybGllciBjYWxsIHJldHVybnMuCiAqCiAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBjYWxsIGlzIG9ubHkgYXZhaWxhYmxlIGluIHRoZSBzdGFuZGFsb25lIGNvbW1hbmQtbGluZQogKiBEYXJ0IFZNLiBGdXJ0aGVyLCBiZWNhdXNlIGl0IHN1c3BlbmRzIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGFjayB1bnRpbCB0aGUKICogbWVzc2FnZSBxdWV1ZSBpcyBlbXB0eSwgZXZlbiB3aGVuIHJ1bm5pbmcgaW4gdGhlIHN0YW5kYWxvbmUgY29tbWFuZC1saW5lIFZNCiAqIHRoZXJlIGV4aXN0cyBhIHJpc2sgdGhhdCB0aGUgY3VycmVudCBleGVjdXRpb24gc3RhY2sgd2lsbCBiZSBzdGFydmVkLgogKi8KZXh0ZXJuYWwgdm9pZCBfd2FpdEZvckV2ZW50KGludCB0aW1lb3V0TWlsbGlzKTsKCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKdm9pZCBGdW5jdGlvbihpbnQpIF9nZXRXYWl0Rm9yRXZlbnQoKSA9PiBfd2FpdEZvckV2ZW50OwoKLy8gVGhpcyBzaG91bGQgYmUgc2V0IGZyb20gQysrIGNvZGUgYnkgdGhlIGVtYmVkZGVyIHRvIHdpcmUgdXAgd2FpdEZvcigpIHRvIHRoZQovLyBuYXRpdmUgaW1wbGVtZW50YXRpb24uIEluIHRoZSBzdGFuZGFsb25lIFZNIHRoaXMgaXMgc2V0IHRvIF93YWl0Rm9yRXZlbnQoKQovLyBhYm92ZS4gSWYgaXQgaXMgbnVsbCwgY2FsbGluZyB3YWl0Rm9yKCkgd2lsbCB0aHJvdyBhbiBVbnN1cHBvcnRlZEVycm9yLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCnZvaWQgRnVuY3Rpb24oaW50KSBfd2FpdEZvckV2ZW50Q2xvc3VyZTsKCmNsYXNzIF9XYWl0Rm9yVXRpbHMgewogIHN0YXRpYyB2b2lkIHdhaXRGb3JFdmVudCh7RHVyYXRpb24gdGltZW91dH0pIHsKICAgIGlmIChfd2FpdEZvckV2ZW50Q2xvc3VyZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJ3YWl0Rm9yIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbWJlZGRlciIpOwogICAgfQogICAgX3dhaXRGb3JFdmVudENsb3N1cmUodGltZW91dCA9PSBudWxsID8gMCA6IG1heCgxLCB0aW1lb3V0LmluTWlsbGlzZWNvbmRzKSk7CiAgfQp9CgovKioKICogU3VzcGVuZHMgdGhlIHN0YWNrLCBydW5zIG1pY3JvdGFza3MsIGFuZCBoYW5kbGVzIGluY29taW5nIGV2ZW50cyB1bnRpbAogKiBbZnV0dXJlXSBjb21wbGV0ZXMuCiAqCiAqIFdBUk5JTkc6IEVYUEVSSU1FTlRBTC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suCiAqCiAqIFRoaXMgY2FsbCBkb2VzIHRoZSBmb2xsb3dpbmc6CiAqIC0gV2hpbGUgW2Z1dHVyZV0gaXMgbm90IGNvbXBsZXRlZDoKICogICAtIHN1c3BlbmRzIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGFjaywKICogICAtIHJ1bnMgdGhlIG1pY3JvdGFzayBxdWV1ZSB1bnRpbCBpdCBpcyBlbXB0eSwKICogICAtIHdhaXRzIHVudGlsIHRoZSBtZXNzYWdlIHF1ZXVlIGlzIG5vdCBlbXB0eSwKICogICAtIGhhbmRsZXMgbWVzc2FnZXMgb24gdGhlIG1lc3NhZ2UgcXVldWUsIHBsdXMgdGhlaXIgYXNzb2NpYXRlZCBtaWNyb3Rhc2tzLAogKiAgICAgdW50aWwgdGhlIG1lc3NhZ2UgcXVldWUgaXMgZW1wdHksCiAqICAgLSByZXN1bWVzIHRoZSBvcmlnaW5hbCBzdGFjay4KICoKICogVGhpcyBmdW5jdGlvbiBicmVha3MgdGhlIHVzdWFsIHByb21pc2Ugb2ZmZXJlZCBieSBEYXJ0IHNlbWFudGljcyB0aGF0CiAqIG1lc3NhZ2UgaGFuZGxlcnMgYW5kIG1pY3JvdGFza3MgcnVuIHRvIGNvbXBsZXRpb24gYmVmb3JlIHRoZSBuZXh0IG1lc3NhZ2UKICogaGFuZGxlciBvciBtaWNyb3Rhc2sgYmVnaW5zIHRvIHJ1bi4gT2YgcGFydGljdWxhciBub3RlIGlzIHRoYXQgdXNlIG9mIHRoaXMKICogZnVuY3Rpb24gaW4gYSBmaW5hbGx5IGJsb2NrIHdpbGwgYWxsb3cgbWljcm90YXNrcyBhbmQgbWVzc2FnZSBoYW5kbGVycyB0bwogKiBydW4gYmVmb3JlIGFsbCBmaW5hbGx5IGJsb2NrcyBmb3IgYW4gZXhjZXB0aW9uIGhhdmUgY29tcGxldGVkLCBwb3NzaWJseQogKiBicmVha2luZyBpbnZhcmlhbnRzIGluIHlvdXIgcHJvZ3JhbS4KICoKICogVXNlIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBsYXN0IHJlc29ydCB3aGVuIGl0IGlzIG5vdAogKiBwb3NzaWJsZSB0byBjb252ZXJ0IGEgRGFydCBwcm9ncmFtIGVudGlyZWx5IHRvIGFuIGFzeW5jaHJvbm91cyBzdHlsZSB1c2luZwogKiBgYXN5bmNgIGFuZCBgYXdhaXRgLgogKgogKiBJZiB0aGUgW0Z1dHVyZV0gY29tcGxldGVzIG5vcm1hbGx5LCBpdHMgcmVzdWx0IGlzIHJldHVybmVkLiBJZiB0aGUgW0Z1dHVyZV0KICogY29tcGxldGVzIHdpdGggYW4gZXJyb3IsIHRoZSBlcnJvciBhbmQgc3RhY2sgdHJhY2UgYXJlIHdyYXBwZWQgaW4gYW4KICogW0FzeW5jRXJyb3JdIGFuZCB0aHJvd24uIElmIGEgbWljcm90YXNrIG9yIG1lc3NhZ2UgaGFuZGxlciBydW4gZHVyaW5nIHRoaXMKICogY2FsbCByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24sIHRoYXQgZXhjZXB0aW9uIHdpbGwgYmUgcHJvcGFnYXRlZAogKiBhcyB0aG91Z2ggdGhlIG1pY3JvdGFzayBvciBtZXNzYWdlIGhhbmRsZXIgd2FzIHRoZSBvbmx5IERhcnQgaW52b2NhdGlvbiBvbgogKiB0aGUgc3RhY2suIFRoYXQgaXMsIHVuaGFuZGxlZCBleGNlcHRpb25zIGluIGEgbWljcm90YXNrIG9yIG1lc3NhZ2UgaGFuZGxlcgogKiB3aWxsIHNraXAgb3ZlciBzdGFja3Mgc3VzcGVuZGVkIGluIGEgY2FsbCB0byBbd2FpdEZvcl0uCiAqCiAqIElmIHRoZSBvcHRpb25hbCBgdGltZW91dGAgcGFyYW1ldGVyIGlzIHBhc3NlZCwgW3dhaXRGb3JdIHRocm93cyBhCiAqIFtUaW1lb3V0RXhjZXB0aW9uXSBpZiB0aGUgW0Z1dHVyZV0gaXMgbm90IGNvbXBsZXRlZCB3aXRoaW4gdGhlIHNwZWNpZmllZAogKiBwZXJpb2QuCiAqCiAqIENhbGxzIHRvIFt3YWl0Rm9yXSBtYXkgYmUgbmVzdGVkLiBFYXJsaWVyIGludm9jYXRpb25zIHdpbGwgbm90IGNvbXBsZXRlCiAqIHVudGlsIHN1YnNlcXVlbnQgb25lcyBkbywgYnV0IHRoZSBjb21wbGV0aW9uIG9mIGEgc3Vic2VxdWVudCBpbnZvY2F0aW9uIHdpbGwKICogY2F1c2UgdGhlIHByZXZpb3VzIGludm9jYXRpb24gdG8gd2FrZSB1cCBhbmQgY2hlY2sgaXRzIFtGdXR1cmVdIGZvcgogKiBjb21wbGV0aW9uLgogKgogKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCBuZXN0aW5nIGNhbGxzIHRvIFt3YWl0Rm9yXSBjYW4gbGVhZCB0byBkZWFkbG9jayBpZgogKiBzdWJzZXF1ZW50IGNhbGxzIGJsb2NrIHdhaXRpbmcgZm9yIGEgY29uZGl0aW9uIHRoYXQgaXMgb25seSBzYXRpc2ZpZWQgd2hlbgogKiBhbiBlYXJsaWVyIGNhbGwgcmV0dXJucy4KICovClQgd2FpdEZvcjxUPihGdXR1cmU8VD4gZnV0dXJlLCB7RHVyYXRpb24gdGltZW91dH0pIHsKICBUIHJlc3VsdDsKICBib29sIGZ1dHVyZUNvbXBsZXRlZCA9IGZhbHNlOwogIE9iamVjdCBlcnJvcjsKICBTdGFja1RyYWNlIHN0YWNrdHJhY2U7CiAgZnV0dXJlLnRoZW4oKHIpIHsKICAgIGZ1dHVyZUNvbXBsZXRlZCA9IHRydWU7CiAgICByZXN1bHQgPSByOwogIH0sIG9uRXJyb3I6IChlLCBzdCkgewogICAgZXJyb3IgPSBlOwogICAgc3RhY2t0cmFjZSA9IHN0OwogIH0pOwoKICBTdG9wd2F0Y2ggczsKICBpZiAodGltZW91dCAhPSBudWxsKSB7CiAgICBzID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwogIH0KICBUaW1lci5ydW4oKCkge30pOyAvLyBFbnVzcmUgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG1lc3NhZ2UuCiAgd2hpbGUgKCFmdXR1cmVDb21wbGV0ZWQgJiYgKGVycm9yID09IG51bGwpKSB7CiAgICBEdXJhdGlvbiByZW1haW5pbmc7CiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7CiAgICAgIGlmIChzLmVsYXBzZWQgPj0gdGltZW91dCkgewogICAgICAgIHRocm93IG5ldyBUaW1lb3V0RXhjZXB0aW9uKCJ3YWl0Rm9yKCkgdGltZWQgb3V0IiwgdGltZW91dCk7CiAgICAgIH0KICAgICAgcmVtYWluaW5nID0gdGltZW91dCAtIHMuZWxhcHNlZDsKICAgIH0KICAgIF9XYWl0Rm9yVXRpbHMud2FpdEZvckV2ZW50KHRpbWVvdXQ6IHJlbWFpbmluZyk7CiAgfQogIGlmICh0aW1lb3V0ICE9IG51bGwpIHsKICAgIHMuc3RvcCgpOwogIH0KICBUaW1lci5ydW4oKCkge30pOyAvLyBFbnN1cmUgdGhhdCBwcmV2aW91cyBjYWxscyB0byB3YWl0Rm9yIGFyZSB3b2tlbiB1cC4KCiAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgIHRocm93IG5ldyBBc3luY0Vycm9yKGVycm9yLCBzdGFja3RyYWNlKTsKICB9CgogIHJldHVybiByZXN1bHQ7Cn0KgJoATk48ARIBBE8NA0w6AyErMTFOJyEDSU1OTUsoA0tLTU87A0ZMSUhPRQNPT09JBDABGjgBUE5LGikBFjEoTwZQBAIBBEoXAzADISYtMzNQKSMDSU1OTUsoA0pOGANPSE5NTk47A0VMCwNLUEcPA0tOHAQ1DCAQGRQcEBgPFQYBDxkiBD0wGBsiRAgnBjQEGQ4ESwEXLQQBEQIBFmRhcnQ6Y2xpL3dhaXRfZm9yLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9jbGlfcGF0Y2guZGFydIFGLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2g7CgpAcGF0Y2gKdm9pZCBfd2FpdEZvckV2ZW50KGludCB0aW1lb3V0TWlsbGlzKSBuYXRpdmUgIkNMSV9XYWl0Rm9yRXZlbnQiOwoKAE5OPAEkAQdBAR1kYXJ0OmNsaS1wYXRjaC9jbGlfcGF0Y2guZGFydCpvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9jb3JlLmRhcnSZ7S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovKioKICoKICogQnVpbHQtaW4gdHlwZXMsIGNvbGxlY3Rpb25zLAogKiBhbmQgb3RoZXIgY29yZSBmdW5jdGlvbmFsaXR5IGZvciBldmVyeSBEYXJ0IHByb2dyYW0uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBhdXRvbWF0aWNhbGx5IGltcG9ydGVkLgogKgogKiBTb21lIGNsYXNzZXMgaW4gdGhpcyBsaWJyYXJ5LAogKiBzdWNoIGFzIFtTdHJpbmddIGFuZCBbbnVtXSwKICogc3VwcG9ydCBEYXJ0J3MgYnVpbHQtaW4gZGF0YSB0eXBlcy4KICogT3RoZXIgY2xhc3Nlcywgc3VjaCBhcyBbTGlzdF0gYW5kIFtNYXBdLCBwcm92aWRlIGRhdGEgc3RydWN0dXJlcwogKiBmb3IgbWFuYWdpbmcgY29sbGVjdGlvbnMgb2Ygb2JqZWN0cy4KICogQW5kIHN0aWxsIG90aGVyIGNsYXNzZXMgcmVwcmVzZW50IGNvbW1vbmx5IHVzZWQgdHlwZXMgb2YgZGF0YQogKiBzdWNoIGFzIFVSSXMsIGRhdGVzIGFuZCB0aW1lcywgYW5kIGVycm9ycy4KICoKICogIyMgTnVtYmVycyBhbmQgYm9vbGVhbnMKICoKICogW2ludF0gYW5kIFtkb3VibGVdIHByb3ZpZGUgc3VwcG9ydCBmb3IgRGFydCdzIGJ1aWx0LWluIG51bWVyaWNhbCBkYXRhIHR5cGVzOgogKiBpbnRlZ2VycyBhbmQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzLCByZXNwZWN0aXZlbHkuCiAqIEFuIG9iamVjdCBvZiB0eXBlIFtib29sXSBpcyBlaXRoZXIgdHJ1ZSBvciBmYWxzZS4KICogVmFyaWFibGVzIG9mIHRoZXNlIHR5cGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGxpdGVyYWxzOgogKgogKiAgICAgaW50IG1lYW5pbmdPZkxpZmUgPSA0MjsKICogICAgIGRvdWJsZSB2YWx1ZU9mUGkgID0gMy4xNDE1OTI7CiAqICAgICBib29sIHZpc2libGUgICAgICA9IHRydWU7CiAqCiAqICMjIFN0cmluZ3MgYW5kIHJlZ3VsYXIgZXhwcmVzc2lvbnMKICoKICogQSBbU3RyaW5nXSBpcyBpbW11dGFibGUgYW5kIHJlcHJlc2VudHMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLgogKgogKiAgICAgU3RyaW5nIHNoYWtlc3BlYXJlUXVvdGUgPSAiQWxsIHRoZSB3b3JsZCdzIGEgc3RhZ2UsIC4uLiI7CiAqCiAqIFtTdHJpbmdCdWZmZXJdIHByb3ZpZGVzIGEgd2F5IHRvIGNvbnN0cnVjdCBzdHJpbmdzIGVmZmljaWVudGx5LgogKgogKiAgICAgU3RyaW5nQnVmZmVyIG1vcmVTaGFrZXNwZWFyZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICogICAgIG1vcmVTaGFrZXNwZWFyZS53cml0ZSgnQW5kIGFsbCB0aGUgbWVuIGFuZCB3b21lbiAnKTsKICogICAgIG1vcmVTaGFrZXNwZWFyZS53cml0ZSgnbWVyZWx5IHBsYXllcnM7IC4uLicpOwogKgogKiBUaGUgU3RyaW5nIGFuZCBTdHJpbmdCdWZmZXIgY2xhc3NlcyBpbXBsZW1lbnQgc3RyaW5nIGNvbmNhdGVuYXRpb24sCiAqIGludGVycG9sYXRpb24sIGFuZCBvdGhlciBzdHJpbmcgbWFuaXB1bGF0aW9uIGZlYXR1cmVzLgogKgogKiAgICAgU3RyaW5nIHBoaWxvc29waHkgPSAnTGl2ZSBvbiAnOwogKiAgICAgU3RyaW5nIGdldCBwYWxpbmRyb21lID0+IHBoaWxvc29waHkgKyBwaGlsb3NvcGh5LnNwbGl0KCcnKS5yZXZlcnNlZC5qb2luKCk7CiAqCiAqIFtSZWdFeHBdIGltcGxlbWVudHMgRGFydCByZWd1bGFyIGV4cHJlc3Npb25zLAogKiB3aGljaCBwcm92aWRlIGEgZ3JhbW1hciBmb3IgbWF0Y2hpbmcgcGF0dGVybnMgd2l0aGluIHRleHQuCiAqIEZvciBleGFtcGxlLCBoZXJlJ3MgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzCiAqIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlIGRpZ2l0czoKICoKICogICAgIHZhciBudW1iZXJzID0gbmV3IFJlZ0V4cChyJ1xkKycpOwogKgogKiBEYXJ0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgaGF2ZSB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcwogKiBKYXZhU2NyaXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMuIFNlZQogKiA8aHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtMTUuMTA+CiAqIGZvciB0aGUgc3BlY2lmaWNhdGlvbiBvZiBKYXZhU2NyaXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAqCiAqICMjIENvbGxlY3Rpb25zCiAqCiAqIFRoZSBkYXJ0OmNvcmUgbGlicmFyeSBwcm92aWRlcyBiYXNpYyBjb2xsZWN0aW9ucywKICogc3VjaCBhcyBbTGlzdF0sIFtNYXBdLCBhbmQgW1NldF0uCiAqCiAqIEEgTGlzdCBpcyBhbiBvcmRlcmVkIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cywgd2l0aCBhIGxlbmd0aC4KICogTGlzdHMgYXJlIHNvbWV0aW1lcyBjYWxsZWQgYXJyYXlzLgogKiBVc2UgYSBMaXN0IHdoZW4geW91IG5lZWQgdG8gYWNjZXNzIG9iamVjdHMgYnkgaW5kZXguCiAqCiAqICAgICBMaXN0IHN1cGVyaGVyb2VzID0gWyAnQmF0bWFuJywgJ1N1cGVybWFuJywgJ0hhcnJ5IFBvdHRlcicgXTsKICoKICogQSBTZXQgaXMgYW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24gb2YgdW5pcXVlIG9iamVjdHMuCiAqIFlvdSBjYW5ub3QgZ2V0IGFuIGl0ZW0gYnkgaW5kZXggKHBvc2l0aW9uKS4KICogQWRkaW5nIGEgZHVwbGljYXRlIGl0ZW0gaGFzIG5vIGVmZmVjdC4KICoKICogICAgIFNldCB2aWxsYWlucyA9IG5ldyBTZXQoKTsKICogICAgIHZpbGxhaW5zLmFkZCgnSm9rZXInKTsKICogICAgIHZpbGxhaW5zLmFkZEFsbCggWydMZXggTHV0aGVyJywgJ1ZvbGRlbW9ydCddICk7CiAqCiAqIEEgTWFwIGlzIGFuIHVub3JkZXJlZCBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycy4KICogTWFwcyBhcmUgc29tZXRpbWVzIGNhbGxlZCBhc3NvY2lhdGl2ZSBhcnJheXMgYmVjYXVzZQogKiBtYXBzIGFzc29jaWF0ZSBhIGtleSB0byBzb21lIHZhbHVlIGZvciBlYXN5IHJldHJpZXZhbC4KICogS2V5cyBhcmUgdW5pcXVlLgogKiBVc2UgYSBNYXAgd2hlbiB5b3UgbmVlZCB0byBhY2Nlc3Mgb2JqZWN0cwogKiBieSBhIHVuaXF1ZSBpZGVudGlmaWVyLgogKgogKiAgICAgTWFwIHNpZGVraWNrcyA9IHsgJ0JhdG1hbic6ICdSb2JpbicsCiAqICAgICAgICAgICAgICAgICAgICAgICAnU3VwZXJtYW4nOiAnTG9pcyBMYW5lJywKICogICAgICAgICAgICAgICAgICAgICAgICdIYXJyeSBQb3R0ZXInOiAnUm9uIGFuZCBIZXJtaW9uZScgfTsKICoKICogSW4gYWRkaXRpb24gdG8gdGhlc2UgY2xhc3NlcywKICogZGFydDpjb3JlIGNvbnRhaW5zIFtJdGVyYWJsZV0sCiAqIGFuIGludGVyZmFjZSB0aGF0IGRlZmluZXMgZnVuY3Rpb25hbGl0eQogKiBjb21tb24gaW4gY29sbGVjdGlvbnMgb2Ygb2JqZWN0cy4KICogRXhhbXBsZXMgaW5jbHVkZSB0aGUgYWJpbGl0eQogKiB0byBydW4gYSBmdW5jdGlvbiBvbiBlYWNoIGVsZW1lbnQgaW4gdGhlIGNvbGxlY3Rpb24sCiAqIHRvIGFwcGx5IGEgdGVzdCB0byBlYWNoIGVsZW1lbnQsCiAqIHRvIHJldHJpZXZlIGFuIG9iamVjdCwgYW5kIHRvIGRldGVybWluZSBsZW5ndGguCiAqCiAqIEl0ZXJhYmxlIGlzIGltcGxlbWVudGVkIGJ5IExpc3QgYW5kIFNldCwKICogYW5kIHVzZWQgYnkgTWFwIGZvciBpdHMga2V5cyBhbmQgdmFsdWVzLgogKgogKiBGb3Igb3RoZXIga2luZHMgb2YgY29sbGVjdGlvbnMsIGNoZWNrIG91dCB0aGUKICogYGRhcnQ6Y29sbGVjdGlvbmAgbGlicmFyeS4KICoKICogIyMgRGF0ZSBhbmQgdGltZQogKgogKiBVc2UgW0RhdGVUaW1lXSB0byByZXByZXNlbnQgYSBwb2ludCBpbiB0aW1lCiAqIGFuZCBbRHVyYXRpb25dIHRvIHJlcHJlc2VudCBhIHNwYW4gb2YgdGltZS4KICoKICogWW91IGNhbiBjcmVhdGUgRGF0ZVRpbWUgb2JqZWN0cyB3aXRoIGNvbnN0cnVjdG9ycwogKiBvciBieSBwYXJzaW5nIGEgY29ycmVjdGx5IGZvcm1hdHRlZCBzdHJpbmcuCiAqCiAqICAgICBEYXRlVGltZSBub3cgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAqICAgICBEYXRlVGltZSBiZXJsaW5XYWxsRmVsbCA9IG5ldyBEYXRlVGltZSgxOTg5LCAxMSwgOSk7CiAqICAgICBEYXRlVGltZSBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIik7CiAqCiAqIENyZWF0ZSBhIER1cmF0aW9uIG9iamVjdCBzcGVjaWZ5aW5nIHRoZSBpbmRpdmlkdWFsIHRpbWUgdW5pdHMuCiAqCiAqICAgICBEdXJhdGlvbiB0aW1lUmVtYWluaW5nID0gbmV3IER1cmF0aW9uKGhvdXJzOjU2LCBtaW51dGVzOjE0KTsKICoKICogSW4gYWRkaXRpb24gdG8gRGF0ZVRpbWUgYW5kIER1cmF0aW9uLAogKiBkYXJ0OmNvcmUgY29udGFpbnMgdGhlIFtTdG9wd2F0Y2hdIGNsYXNzIGZvciBtZWFzdXJpbmcgZWxhcHNlZCB0aW1lLgogKgogKiAjIyBVcmkKICoKICogQSBbVXJpXSBvYmplY3QgcmVwcmVzZW50cyBhIHVuaWZvcm0gcmVzb3VyY2UgaWRlbnRpZmllciwKICogd2hpY2ggaWRlbnRpZmllcyBhIHJlc291cmNlIG9uIHRoZSB3ZWIuCiAqCiAqICAgICBVcmkgZGFydGxhbmcgPSBVcmkucGFyc2UoJ2h0dHA6Ly9kYXJ0bGFuZy5vcmcvJyk7CiAqCiAqICMjIEVycm9ycwogKgogKiBUaGUgW0Vycm9yXSBjbGFzcyByZXByZXNlbnRzIHRoZSBvY2N1cnJlbmNlIG9mIGFuIGVycm9yCiAqIGR1cmluZyBydW50aW1lLgogKiBTdWJjbGFzc2VzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IHNwZWNpZmljIGtpbmRzIG9mIGVycm9ycy4KICoKICogIyMgT3RoZXIgZG9jdW1lbnRhdGlvbgogKgogKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gdXNlIHRoZSBidWlsdC1pbiB0eXBlcywgcmVmZXIgdG8gW0J1aWx0LWluCiAqIFR5cGVzXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY29udGVudHMvY2gwMi5odG1sI2J1aWx0LWluLXR5cGVzKQogKiBpbiBDaGFwdGVyIDIgb2YKICogW0RhcnQ6IFVwIGFuZCBSdW5uaW5nXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvKS4KICoKICogQWxzbywgc2VlIFtkYXJ0OmNvcmUgLSBOdW1iZXJzLCBDb2xsZWN0aW9ucywgU3RyaW5ncywgYW5kCiAqIE1vcmVdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI2RhcnRjb3JlLS0tbnVtYmVycy1jb2xsZWN0aW9ucy1zdHJpbmdzLWFuZC1tb3JlKQogKiBmb3IgbW9yZSBjb3ZlcmFnZSBvZiBjbGFzc2VzIGluIHRoaXMgcGFja2FnZS4KICoKICogVGhlCiAqIFtEYXJ0IExhbmd1YWdlIFNwZWNpZmljYXRpb25dKGh0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3Mvc3BlYy8pCiAqIHByb3ZpZGVzIHRlY2huaWNhbCBkZXRhaWxzLgogKgogKiB7QGNhdGVnb3J5IENvcmV9CiAqLwpsaWJyYXJ5IGRhcnQuY29yZTsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIjsKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgaGlkZSBTeW1ib2wsIExpbmtlZExpc3QsIExpbmtlZExpc3RFbnRyeTsKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgYXMgaW50ZXJuYWwgc2hvdyBTeW1ib2w7CmltcG9ydCAiZGFydDpjb252ZXJ0IgogICAgc2hvdwogICAgICAgIGFzY2lpLAogICAgICAgIGJhc2U2NCwKICAgICAgICBCYXNlNjRDb2RlYywKICAgICAgICBFbmNvZGluZywKICAgICAgICBsYXRpbjEsCiAgICAgICAgU3RyaW5nQ29udmVyc2lvblNpbmssCiAgICAgICAgdXRmODsKaW1wb3J0ICJkYXJ0Om1hdGgiIHNob3cgUmFuZG9tOyAvLyBVc2VkIGJ5IExpc3Quc2h1ZmZsZS4KaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgVWludDhMaXN0LCBVaW50MTZMaXN0LCBFbmRpYW47CgpAU2luY2UoIjIuMSIpCmV4cG9ydCAiZGFydDphc3luYyIgc2hvdyBGdXR1cmUsIFN0cmVhbTsKCnBhcnQgImFubm90YXRpb25zLmRhcnQiOwpwYXJ0ICJiaWdpbnQuZGFydCI7CnBhcnQgImJvb2wuZGFydCI7CnBhcnQgImNvbXBhcmFibGUuZGFydCI7CnBhcnQgImRhdGVfdGltZS5kYXJ0IjsKcGFydCAiZG91YmxlLmRhcnQiOwpwYXJ0ICJkdXJhdGlvbi5kYXJ0IjsKcGFydCAiZXJyb3JzLmRhcnQiOwpwYXJ0ICJleGNlcHRpb25zLmRhcnQiOwpwYXJ0ICJleHBhbmRvLmRhcnQiOwpwYXJ0ICJmdW5jdGlvbi5kYXJ0IjsKcGFydCAiaWRlbnRpY2FsLmRhcnQiOwpwYXJ0ICJpbnQuZGFydCI7CnBhcnQgImludm9jYXRpb24uZGFydCI7CnBhcnQgIml0ZXJhYmxlLmRhcnQiOwpwYXJ0ICJpdGVyYXRvci5kYXJ0IjsKcGFydCAibGlzdC5kYXJ0IjsKcGFydCAibWFwLmRhcnQiOwpwYXJ0ICJudWxsLmRhcnQiOwpwYXJ0ICJudW0uZGFydCI7CnBhcnQgIm9iamVjdC5kYXJ0IjsKcGFydCAicGF0dGVybi5kYXJ0IjsKcGFydCAicHJpbnQuZGFydCI7CnBhcnQgInJlZ2V4cC5kYXJ0IjsKcGFydCAic2V0LmRhcnQiOwpwYXJ0ICJzaW5rLmRhcnQiOwpwYXJ0ICJzdGFja3RyYWNlLmRhcnQiOwpwYXJ0ICJzdG9wd2F0Y2guZGFydCI7CnBhcnQgInN0cmluZy5kYXJ0IjsKcGFydCAic3RyaW5nX2J1ZmZlci5kYXJ0IjsKcGFydCAic3RyaW5nX3NpbmsuZGFydCI7CnBhcnQgInN5bWJvbC5kYXJ0IjsKcGFydCAidHlwZS5kYXJ0IjsKcGFydCAidXJpLmRhcnQiOwqA0gBOTjwBBAMgOAMrAyEfJ0QoQS4DGwNQRzU+Ax8lIQMmA0QDQQNDAzo8NQNHOgMnUwMxPjkjAykDQic7PAMSAzUlAz4mOANEAzcvKgMhHjcDODg6FC0bAywyPwMhIislIDgkMwMsLAMxHgMUAy8vAzUvAyo8PANCA0QDKUgDCgM8KwM5Aw0DOxNAAxoDUF4TTgM9djEDB0UfAxQEEwEaQjEWCQ8QFRIQHg45PQEOKQEZFBIYFxQWFBgVFhcRGBYWEhESERQVExQREhgXFBsZFBIRAQlkYXJ0OmNvcmUwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvY29tcGFyYWJsZS5kYXJ0jlUvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogVGhlIHNpZ25hdHVyZSBvZiBhIGdlbmVyaWMgY29tcGFyaXNvbiBmdW5jdGlvbi4KICoKICogQSBjb21wYXJpc29uIGZ1bmN0aW9uIHJlcHJlc2VudHMgYW4gb3JkZXJpbmcgb24gYSB0eXBlIG9mIG9iamVjdHMuCiAqIEEgdG90YWwgb3JkZXJpbmcgb24gYSB0eXBlIG1lYW5zIHRoYXQgZm9yIHR3byB2YWx1ZXMsIGVpdGhlciB0aGV5CiAqIGFyZSBlcXVhbCBvciBvbmUgaXMgZ3JlYXRlciB0aGFuIHRoZSBvdGhlciAoYW5kIHRoZSBsYXR0ZXIgbXVzdCB0aGVuIGJlCiAqIHNtYWxsZXIgdGhhbiB0aGUgZm9ybWVyKS4KICoKICogQSBbQ29tcGFyYXRvcl0gZnVuY3Rpb24gcmVwcmVzZW50cyBzdWNoIGEgdG90YWwgb3JkZXJpbmcgYnkgcmV0dXJuaW5nCiAqCiAqICogYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIFthXSBpcyBzbWFsbGVyIHRoYW4gW2JdLAogKiAqIHplcm8gaWYgW2FdIGlzIGVxdWFsIHRvIFtiXSwgYW5kCiAqICogYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIFthXSBpcyBncmVhdGVyIHRoYW4gW2JdLgogKi8KdHlwZWRlZiBDb21wYXJhdG9yPFQ+ID0gaW50IEZ1bmN0aW9uKFQgYSwgVCBiKTsKCi8qKgogKiBJbnRlcmZhY2UgdXNlZCBieSB0eXBlcyB0aGF0IGhhdmUgYW4gaW50cmluc2ljIG9yZGVyaW5nLgogKgogKiBUaGUgW2NvbXBhcmVUb10gb3BlcmF0aW9uIGRlZmluZXMgYSB0b3RhbCBvcmRlcmluZyBvZiBvYmplY3RzLAogKiB3aGljaCBjYW4gYmUgdXNlZCBmb3Igb3JkZXJpbmcgYW5kIHNvcnRpbmcuCiAqCiAqIFRoZSBbQ29tcGFyYWJsZV0gaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmF0dXJhbCBvcmRlcmluZyBvZiBhIHR5cGUuCiAqIElmIGEgdHlwZSBjYW4gYmUgb3JkZXJlZCBpbiBtb3JlIHRoYW4gb25lIHdheSwKICogYW5kIG5vbmUgb2YgdGhlbSBpcyB0aGUgb2J2aW91cyBuYXR1cmFsIG9yZGVyaW5nLAogKiB0aGVuIGl0IG1pZ2h0IGJlIGJldHRlciBub3QgdG8gdXNlIHRoZSBbQ29tcGFyYWJsZV0gaW50ZXJmYWNlLAogKiBhbmQgdG8gcHJvdmlkZSBzZXBhcmF0ZSBbQ29tcGFyYXRvcl1zIGluc3RlYWQuCiAqCiAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIG9yZGVyIG9mIGEgW0NvbXBhcmFibGVdIGFncmVlcwogKiB3aXRoIGl0cyBvcGVyYXRvciBbb3BlcmF0b3IgPT1dIGVxdWFsaXR5IChgYS5jb21wYXJlVG8oYikgPT0gMGAgaWZmIGBhID09IGJgKSwKICogYnV0IHRoaXMgaXMgbm90IGEgcmVxdWlyZW1lbnQuCiAqIEZvciBleGFtcGxlLCBbZG91YmxlXSBhbmQgW0RhdGVUaW1lXSBoYXZlIGBjb21wYXJlVG9gIG1ldGhvZHMKICogdGhhdCBkbyBub3QgYWdyZWUgd2l0aCBvcGVyYXRvciBbb3BlcmF0b3IgPT1dLgogKiBGb3IgZG91YmxlcyB0aGUgW2NvbXBhcmVUb10gbWV0aG9kIGlzIG1vcmUgcHJlY2lzZSB0aGFuIHRoZSBlcXVhbGl0eSwKICogYW5kIGZvciBbRGF0ZVRpbWVdIGl0IGlzIGxlc3MgcHJlY2lzZS4KICoKICogRXhhbXBsZXM6CiAqCiAqICAgICAgKDAuMCkuY29tcGFyZVRvKC0wLjApOyAgLy8gPT4gMQogKiAgICAgIDAuMCA9PSAtMC4wOyAgICAgICAgICAgIC8vID0+IHRydWUKICogICAgICB2YXIgZHQgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAqICAgICAgdmFyIGR0MiA9IGR0LnRvVXRjKCk7CiAqICAgICAgZHQgPT0gZHQyOyAgICAgICAgICAgICAgLy8gPT4gZmFsc2UKICogICAgICBkdC5jb21wYXJlVG8oZHQyKTsgICAgICAvLyA9PiAwCiAqCiAqIFRoZSBbQ29tcGFyYWJsZV0gaW50ZXJmYWNlIGRvZXMgbm90IGltcGx5IHRoZSBleGlzdGVuY2UKICogb2YgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzIGA8YCwgYDw9YCwgYD5gIGFuZCBgPj1gLgogKiBUaGVzZSBzaG91bGQgb25seSBiZSBkZWZpbmVkCiAqIGlmIHRoZSBvcmRlcmluZyBpcyBhIGxlc3MtdGhhbi9ncmVhdGVyLXRoYW4gb3JkZXJpbmcsCiAqIHRoYXQgaXMsIGFuIG9yZGVyaW5nIHdoZXJlIHlvdSB3b3VsZCBuYXR1cmFsbHkKICogdXNlIHRoZSB3b3JkcyAibGVzcyB0aGFuIiBhYm91dCB0aGUgb3JkZXIgb2YgdHdvIGVsZW1lbnRzLgogKgogKiBJZiB0aGUgZXF1YWxpdHkgb3BlcmF0b3IgYW5kIFtjb21wYXJlVG9dIGRpc2FncmVlLAogKiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgc2hvdWxkIGZvbGxvdyB0aGUgZXF1YWxpdHkgb3BlcmF0b3IsCiAqIGFuZCB3aWxsIGxpa2VseSBhbHNvIGRpc2FncmVlIHdpdGggW2NvbXBhcmVUb10uCiAqIE90aGVyd2lzZSB0aGV5IHNob3VsZCBtYXRjaCB0aGUgW2NvbXBhcmVUb10gbWV0aG9kLAogKiBzbyB0aGF0IGBhIDwgYmAgaWZmIGBhLmNvbXBhcmVUbyhiKSA8IDBgLgogKgogKiBUaGUgW2RvdWJsZV0gY2xhc3MgZGVmaW5lcyBjb21wYXJpc29uIG9wZXJhdG9ycwogKiB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggZXF1YWxpdHkuCiAqIFRoZSBvcGVyYXRvcnMgZGlmZmVyIGZyb20gYGRvdWJsZS5jb21wYXJlVG9gIG9uIC0wLjAgYW5kIE5hTi4KICoKICogVGhlIFtEYXRlVGltZV0gY2xhc3MgaGFzIG5vIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBpbnN0ZWFkIGl0IGhhcyB0aGUgbW9yZQogKiBwcmVjaXNlbHkgbmFtZWQgW0RhdGVUaW1lLmlzQmVmb3JlXSBhbmQgW0RhdGVUaW1lLmlzQWZ0ZXJdLgogKi8KYWJzdHJhY3QgY2xhc3MgQ29tcGFyYWJsZTxUPiB7CiAgLyoqCiAgICogQ29tcGFyZXMgdGhpcyBvYmplY3QgdG8gYW5vdGhlciBbQ29tcGFyYWJsZV0KICAgKgogICAqIFJldHVybnMgYSB2YWx1ZSBsaWtlIGEgW0NvbXBhcmF0b3JdIHdoZW4gY29tcGFyaW5nIGB0aGlzYCB0byBbb3RoZXJdLgogICAqIFRoYXQgaXMsIGl0IHJldHVybnMgYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIGB0aGlzYCBpcyBvcmRlcmVkIGJlZm9yZSBbb3RoZXJdLAogICAqIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBgdGhpc2AgaXMgb3JkZXJlZCBhZnRlciBbb3RoZXJdLAogICAqIGFuZCB6ZXJvIGlmIGB0aGlzYCBhbmQgW290aGVyXSBhcmUgb3JkZXJlZCB0b2dldGhlci4KICAgKgogICAqIFRoZSBbb3RoZXJdIGFyZ3VtZW50IG11c3QgYmUgYSB2YWx1ZSB0aGF0IGlzIGNvbXBhcmFibGUgdG8gdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGNvbXBhcmVUbyhUIG90aGVyKTsKCiAgLyoqCiAgICogQSBbQ29tcGFyYXRvcl0gdGhhdCBjb21wYXJlcyBvbmUgY29tcGFyYWJsZSB0byBhbm90aGVyLgogICAqCiAgICogSXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGBhLmNvbXBhcmVUbyhiKWAuCiAgICoKICAgKiBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBjb21wYXJhdG9yCiAgICogZm9yIG9yZGVyaW5nIGNvbGxlY3Rpb25zLCBmb3IgZXhhbXBsZSBpbiB0aGUgW0xpc3RdIHNvcnQgZnVuY3Rpb24uCiAgICovCiAgc3RhdGljIGludCBjb21wYXJlKENvbXBhcmFibGUgYSwgQ29tcGFyYWJsZSBiKSA9PiBhLmNvbXBhcmVUbyhiKTsKfQpgAE5OPAETAQQzA0ZFSx0DSQM0JjQEMAEEPANCLwNRMjVCMgM9UiJBMkkqAw0DKCslHiwoAzs4IDkyPgM2QTM3LQMzJkEDTT8EHwYyBUtRPDoFTQYaAQY9BTAFPUgGRAIBGWRhcnQ6Y29yZS9jb21wYXJhYmxlLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvaXRlcmFibGUuZGFydMAAYswvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBjb2xsZWN0aW9uIG9mIHZhbHVlcywgb3IgImVsZW1lbnRzIiwgdGhhdCBjYW4gYmUgYWNjZXNzZWQgc2VxdWVudGlhbGx5LgogKgogKiBUaGUgZWxlbWVudHMgb2YgdGhlIGl0ZXJhYmxlIGFyZSBhY2Nlc3NlZCBieSBnZXR0aW5nIGFuIFtJdGVyYXRvcl0KICogdXNpbmcgdGhlIFtpdGVyYXRvcl0gZ2V0dGVyLCBhbmQgdXNpbmcgaXQgdG8gc3RlcCB0aHJvdWdoIHRoZSB2YWx1ZXMuCiAqIFN0ZXBwaW5nIHdpdGggdGhlIGl0ZXJhdG9yIGlzIGRvbmUgYnkgY2FsbGluZyBbSXRlcmF0b3IubW92ZU5leHRdLAogKiBhbmQgaWYgdGhlIGNhbGwgcmV0dXJucyBgdHJ1ZWAsCiAqIHRoZSBpdGVyYXRvciBoYXMgbm93IG1vdmVkIHRvIHRoZSBuZXh0IGVsZW1lbnQsCiAqIHdoaWNoIGlzIHRoZW4gYXZhaWxhYmxlIGFzIFtJdGVyYXRvci5jdXJyZW50XS4KICogSWYgdGhlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGVyZSBhcmUgbm8gbW9yZSBlbGVtZW50cywKICogYW5kIGBpdGVyYXRvci5jdXJyZW50YCByZXR1cm5zIGBudWxsYC4KICoKICogWW91IGNhbiBjcmVhdGUgbW9yZSB0aGFuIG9uZSBpdGVyYXRvciBmcm9tIHRoZSBzYW1lIGBJdGVyYWJsZWAuCiAqIEVhY2ggdGltZSBgaXRlcmF0b3JgIGlzIHJlYWQsIGl0IHJldHVybnMgYSBuZXcgaXRlcmF0b3IsCiAqIGFuZCBkaWZmZXJlbnQgaXRlcmF0b3JzIGNhbiBiZSBzdGVwcGVkIHRocm91Z2ggaW5kZXBlbmRlbnRseSwKICogZWFjaCBnaXZpbmcgYWNjZXNzIHRvIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGl0ZXJhYmxlLgogKiBUaGUgaXRlcmF0b3JzIG9mIHRoZSBzYW1lIGl0ZXJhYmxlICpzaG91bGQqIHByb3ZpZGUgdGhlIHNhbWUgdmFsdWVzCiAqIGluIHRoZSBzYW1lIG9yZGVyICh1bmxlc3MgdGhlIHVuZGVybHlpbmcgY29sbGVjdGlvbiBpcyBtb2RpZmllZCBiZXR3ZWVuCiAqIHRoZSBpdGVyYXRpb25zLCB3aGljaCBzb21lIGNvbGxlY3Rpb25zIGFsbG93KS4KICoKICogWW91IGNhbiBhbHNvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYW4gYEl0ZXJhYmxlYAogKiB1c2luZyB0aGUgZm9yLWluIGxvb3AgY29uc3RydWN0LCB3aGljaCB1c2VzIHRoZSBgaXRlcmF0b3JgIGdldHRlciBiZWhpbmQgdGhlCiAqIHNjZW5lcy4KICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gaXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUga2V5cyBvZiBhIFtNYXBdLAogKiBiZWNhdXNlIGBNYXBgIGtleXMgYXJlIGl0ZXJhYmxlLgogKgogKiAgICAgTWFwIGtpZHNCb29rcyA9IHsnTWF0aWxkYSc6ICdSb2FsZCBEYWhsJywKICogICAgICAgICAgICAgICAgICAgICAgJ0dyZWVuIEVnZ3MgYW5kIEhhbSc6ICdEciBTZXVzcycsCiAqICAgICAgICAgICAgICAgICAgICAgICdXaGVyZSB0aGUgV2lsZCBUaGluZ3MgQXJlJzogJ01hdXJpY2UgU2VuZGFrJ307CiAqICAgICBmb3IgKHZhciBib29rIGluIGtpZHNCb29rcy5rZXlzKSB7CiAqICAgICAgIHByaW50KCckYm9vayB3YXMgd3JpdHRlbiBieSAke2tpZHNCb29rc1tib29rXX0nKTsKICogICAgIH0KICoKICogVGhlIFtMaXN0XSBhbmQgW1NldF0gY2xhc3NlcyBhcmUgYm90aCBgSXRlcmFibGVgLAogKiBhcyBhcmUgbW9zdCBjbGFzc2VzIGluIHRoZSBgZGFydDpjb2xsZWN0aW9uYCBsaWJyYXJ5LgogKgogKiBTb21lIFtJdGVyYWJsZV0gY29sbGVjdGlvbnMgY2FuIGJlIG1vZGlmaWVkLgogKiBBZGRpbmcgYW4gZWxlbWVudCB0byBhIGBMaXN0YCBvciBgU2V0YCB3aWxsIGNoYW5nZSB3aGljaCBlbGVtZW50cyBpdAogKiBjb250YWlucywgYW5kIGFkZGluZyBhIG5ldyBrZXkgdG8gYSBgTWFwYCBjaGFuZ2VzIHRoZSBlbGVtZW50cyBvZiBbTWFwLmtleXNdLgogKiBJdGVyYXRvcnMgY3JlYXRlZCBhZnRlciB0aGUgY2hhbmdlIHdpbGwgcHJvdmlkZSB0aGUgbmV3IGVsZW1lbnRzLCBhbmQgbWF5CiAqIG9yIG1heSBub3QgcHJlc2VydmUgdGhlIG9yZGVyIG9mIGV4aXN0aW5nIGVsZW1lbnRzCiAqIChmb3IgZXhhbXBsZSwgYSBbSGFzaFNldF0gbWF5IGNvbXBsZXRlbHkgY2hhbmdlIGl0cyBvcmRlciB3aGVuIGEgc2luZ2xlCiAqIGVsZW1lbnQgaXMgYWRkZWQpLgogKgogKiBDaGFuZ2luZyBhIGNvbGxlY3Rpb24gKndoaWxlKiBpdCBpcyBiZWluZyBpdGVyYXRlZAogKiBpcyBnZW5lcmFsbHkgKm5vdCogYWxsb3dlZC4KICogRG9pbmcgc28gd2lsbCBicmVhayB0aGUgaXRlcmF0aW9uLCB3aGljaCBpcyB0eXBpY2FsbHkgc2lnbmFsbGVkCiAqIGJ5IHRocm93aW5nIGEgW0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcl0KICogdGhlIG5leHQgdGltZSBbSXRlcmF0b3IubW92ZU5leHRdIGlzIGNhbGxlZC4KICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgW0l0ZXJhdG9yLmN1cnJlbnRdIGdldHRlcgogKiBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UgaW4gdGhlIGNvbGxlY3Rpb24sCiAqIHRoZSBgY3VycmVudGAgdmFsdWUgd2FzIHNldCBieSB0aGUgcHJldmlvdXMgY2FsbCB0byBbSXRlcmF0b3IubW92ZU5leHRdLgogKgogKiBTb21lIGl0ZXJhYmxlcyBjb21wdXRlIHRoZWlyIGVsZW1lbnRzIGR5bmFtaWNhbGx5IGV2ZXJ5IHRpbWUgdGhleSBhcmUKICogaXRlcmF0ZWQsIGxpa2UgdGhlIG9uZSByZXR1cm5lZCBieSBbSXRlcmFibGUuZ2VuZXJhdGVdIG9yIHRoZSBpdGVyYWJsZQogKiByZXR1cm5lZCBieSBhIGBzeW5jKmAgZ2VuZXJhdG9yIGZ1bmN0aW9uLiBJZiB0aGUgY29tcHV0YXRpb24gZG9lc24ndCBkZXBlbmQKICogb24gb3RoZXIgb2JqZWN0cyB0aGF0IG1heSBjaGFuZ2UsIHRoZW4gdGhlIGdlbmVyYXRlZCBzZXF1ZW5jZSBzaG91bGQgYmUKICogdGhlIHNhbWUgb25lIGV2ZXJ5IHRpbWUgaXQncyBpdGVyYXRlZC4KICoKICogVGhlIG1lbWJlcnMgb2YgYEl0ZXJhYmxlYCwgb3RoZXIgdGhhbiBgaXRlcmF0b3JgIGl0c2VsZiwKICogd29yayBieSBsb29raW5nIGF0IHRoZSBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUuCiAqIFRoaXMgY2FuIGJlIGltcGxlbWVudGVkIGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgW2l0ZXJhdG9yXSwgYnV0IHNvbWUgY2xhc3NlcwogKiBtYXkgaGF2ZSBtb3JlIGVmZmljaWVudCB3YXlzIG9mIGZpbmRpbmcgdGhlIHJlc3VsdAogKiAobGlrZSBbbGFzdF0gb3IgW2xlbmd0aF0gb24gYSBbTGlzdF0sIG9yIFtjb250YWluc10gb24gYSBbU2V0XSkuCiAqCiAqIFRoZSBtZXRob2RzIHRoYXQgcmV0dXJuIGFub3RoZXIgYEl0ZXJhYmxlYCAobGlrZSBbbWFwXSBhbmQgW3doZXJlXSkKICogYXJlIGFsbCAqbGF6eSogLSB0aGV5IHdpbGwgaXRlcmF0ZSB0aGUgb3JpZ2luYWwgKGFzIG5lY2Vzc2FyeSkKICogZXZlcnkgdGltZSB0aGUgcmV0dXJuZWQgaXRlcmFibGUgaXMgaXRlcmF0ZWQsIGFuZCBub3QgYmVmb3JlLgogKgogKiBTaW5jZSBhbiBpdGVyYWJsZSBtYXkgYmUgaXRlcmF0ZWQgbW9yZSB0aGFuIG9uY2UsIGl0J3Mgbm90IHJlY29tbWVuZGVkIHRvCiAqIGhhdmUgZGV0ZWN0YWJsZSBzaWRlLWVmZmVjdHMgaW4gdGhlIGl0ZXJhdG9yLgogKiBGb3IgbWV0aG9kcyBsaWtlIFttYXBdIGFuZCBbd2hlcmVdLCB0aGUgcmV0dXJuZWQgaXRlcmFibGUgd2lsbCBleGVjdXRlIHRoZQogKiBhcmd1bWVudCBmdW5jdGlvbiBvbiBldmVyeSBpdGVyYXRpb24sIHNvIHRob3NlIGZ1bmN0aW9ucyBzaG91bGQgYWxzbyBub3QKICogaGF2ZSBzaWRlIGVmZmVjdHMuCiAqLwphYnN0cmFjdCBjbGFzcyBJdGVyYWJsZTxFPiB7CiAgLy8gVE9ETyhscm4pOiBXaGVuIHdlIGFsbG93IGZvcndhcmRpbmcgY29uc3QgY29uc3RydWN0b3JzIHRocm91Z2gKICAvLyBtaXhpbiBhcHBsaWNhdGlvbnMsIG1ha2UgdGhpcyBjbGFzcyBpbXBsZW1lbnQgW0l0ZXJhYmxlTWl4aW5dLgogIGNvbnN0IEl0ZXJhYmxlKCk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gYEl0ZXJhYmxlYCB3aGljaCBnZW5lcmF0ZXMgaXRzIGVsZW1lbnRzIGR5bmFtaWNhbGx5LgogICAqCiAgICogVGhlIGdlbmVyYXRlZCBpdGVyYWJsZSBoYXMgW2NvdW50XSBlbGVtZW50cywKICAgKiBhbmQgdGhlIGVsZW1lbnQgYXQgaW5kZXggYG5gIGlzIGNvbXB1dGVkIGJ5IGNhbGxpbmcgYGdlbmVyYXRvcihuKWAuCiAgICogVmFsdWVzIGFyZSBub3QgY2FjaGVkLCBzbyBlYWNoIGl0ZXJhdGlvbiBjb21wdXRlcyB0aGUgdmFsdWVzIGFnYWluLgogICAqCiAgICogSWYgW2dlbmVyYXRvcl0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYW4gaWRlbnRpdHkgZnVuY3Rpb24KICAgKiBvbiBpbnRlZ2VycyBgKGludCB4KSA9PiB4YCwgc28gaXQgbWF5IG9ubHkgYmUgb21pdHRlZCBpZiB0aGUgdHlwZQogICAqIHBhcmFtZXRlciBhbGxvd3MgaW50ZWdlciB2YWx1ZXMuIFRoYXQgaXMsIGlmIFtFXSBpcyBhIHN1cGVyLXR5cGUKICAgKiBvZiBbaW50XS4KICAgKgogICAqIEFzIGFuIGBJdGVyYWJsZWAsIGBuZXcgSXRlcmFibGUuZ2VuZXJhdGUobiwgZ2VuZXJhdG9yKSlgIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBgY29uc3QgWzAsIC4uLiwgbiAtIDFdLm1hcChnZW5lcmF0b3IpYC4KICAgKi8KICBmYWN0b3J5IEl0ZXJhYmxlLmdlbmVyYXRlKGludCBjb3VudCwgW0UgZ2VuZXJhdG9yKGludCBpbmRleCldKSB7CiAgICBpZiAoY291bnQgPD0gMCkgcmV0dXJuIEVtcHR5SXRlcmFibGU8RT4oKTsKICAgIHJldHVybiBfR2VuZXJhdG9ySXRlcmFibGU8RT4oY291bnQsIGdlbmVyYXRvcik7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGFuIGVtcHR5IGl0ZXJhYmxlLgogICAqCiAgICogVGhlIGVtcHR5IGl0ZXJhYmxlIGhhcyBubyBlbGVtZW50cywgYW5kIGl0ZXJhdGluZyBpdCBhbHdheXMgc3RvcHMKICAgKiBpbW1lZGlhdGVseS4KICAgKi8KICBjb25zdCBmYWN0b3J5IEl0ZXJhYmxlLmVtcHR5KCkgPSBFbXB0eUl0ZXJhYmxlPEU+OwoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYW4gYEl0ZXJhYmxlPFQ+YC4KICAgKgogICAqIEFueSB0aW1lIHRoZSBpdGVyYWJsZSB3b3VsZCBwcm9kdWNlIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYSBbVF0sCiAgICogdGhlIGVsZW1lbnQgYWNjZXNzIHdpbGwgdGhyb3cuIElmIGFsbCBlbGVtZW50cyBvZiBbc291cmNlXSBhcmUgYWN0dWFsbHkKICAgKiBpbnN0YW5jZXMgb2YgW1RdLCBvciBpZiBvbmx5IGVsZW1lbnRzIHRoYXQgYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbVF0KICAgKiBhcmUgYWNjZXNzZWQsIHRoZW4gdGhlIHJlc3VsdGluZyBpdGVyYWJsZSBjYW4gYmUgdXNlZCBhcyBhbiBgSXRlcmFibGU8VD5gLgogICAqLwogIHN0YXRpYyBJdGVyYWJsZTxUPiBjYXN0RnJvbTxTLCBUPihJdGVyYWJsZTxTPiBzb3VyY2UpID0+CiAgICAgIENhc3RJdGVyYWJsZTxTLCBUPihzb3VyY2UpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGBJdGVyYXRvcmAgdGhhdCBhbGxvd3MgaXRlcmF0aW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogYEl0ZXJhYmxlYC4KICAgKgogICAqIEl0ZXJhYmxlIGNsYXNzZXMgbWF5IHNwZWNpZnkgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGVpciBlbGVtZW50cwogICAqIChmb3IgZXhhbXBsZSBbTGlzdF0gYWx3YXlzIGl0ZXJhdGUgaW4gaW5kZXggb3JkZXIpLAogICAqIG9yIHRoZXkgbWF5IGxlYXZlIGl0IHVuc3BlY2lmaWVkIChmb3IgZXhhbXBsZSBhIGhhc2gtYmFzZWQgW1NldF0KICAgKiBtYXkgaXRlcmF0ZSBpbiBhbnkgb3JkZXIpLgogICAqCiAgICogRWFjaCB0aW1lIGBpdGVyYXRvcmAgaXMgcmVhZCwgaXQgcmV0dXJucyBhIG5ldyBpdGVyYXRvciwKICAgKiB3aGljaCBjYW4gYmUgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBlbGVtZW50cyBhZ2Fpbi4KICAgKiBUaGUgaXRlcmF0b3JzIG9mIHRoZSBzYW1lIGl0ZXJhYmxlIGNhbiBiZSBzdGVwcGVkIHRocm91Z2ggaW5kZXBlbmRlbnRseSwKICAgKiBidXQgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRlciwKICAgKiBhcyBsb25nIGFzIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gaXNuJ3QgY2hhbmdlZC4KICAgKgogICAqIE1vZGlmeWluZyB0aGUgY29sbGVjdGlvbiBtYXkgY2F1c2UgbmV3IGl0ZXJhdG9ycyB0byBwcm9kdWNlCiAgICogZGlmZmVyZW50IGVsZW1lbnRzLCBhbmQgbWF5IGNoYW5nZSB0aGUgb3JkZXIgb2YgZXhpc3RpbmcgZWxlbWVudHMuCiAgICogQSBbTGlzdF0gc3BlY2lmaWVzIGl0cyBpdGVyYXRpb24gb3JkZXIgcHJlY2lzZWx5LAogICAqIHNvIG1vZGlmeWluZyB0aGUgbGlzdCBjaGFuZ2VzIHRoZSBpdGVyYXRpb24gb3JkZXIgcHJlZGljdGFibHkuCiAgICogQSBoYXNoLWJhc2VkIFtTZXRdIG1heSBjaGFuZ2UgaXRzIGl0ZXJhdGlvbiBvcmRlciBjb21wbGV0ZWx5CiAgICogd2hlbiBhZGRpbmcgYSBuZXcgZWxlbWVudCB0byB0aGUgc2V0LgogICAqCiAgICogTW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gYWZ0ZXIgY3JlYXRpbmcgdGhlIG5ldyBpdGVyYXRvcgogICAqIG1heSBjYXVzZSBhbiBlcnJvciB0aGUgbmV4dCB0aW1lIFtJdGVyYXRvci5tb3ZlTmV4dF0gaXMgY2FsbGVkCiAgICogb24gdGhhdCBpdGVyYXRvci4KICAgKiBBbnkgKm1vZGlmaWFibGUqIGl0ZXJhYmxlIGNsYXNzIHNob3VsZCBzcGVjaWZ5IHdoaWNoIG9wZXJhdGlvbnMgd2lsbAogICAqIGJyZWFrIGl0ZXJhdGlvbi4KICAgKi8KICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3I7CgogIC8qKgogICAqIFByb3ZpZGVzIGEgdmlldyBvZiB0aGlzIGl0ZXJhYmxlIGFzIGFuIGl0ZXJhYmxlIG9mIFtSXSBpbnN0YW5jZXMuCiAgICoKICAgKiBJZiB0aGlzIGl0ZXJhYmxlIG9ubHkgY29udGFpbnMgaW5zdGFuY2VzIG9mIFtSXSwgYWxsIG9wZXJhdGlvbnMKICAgKiB3aWxsIHdvcmsgY29ycmVjdGx5LiBJZiBhbnkgb3BlcmF0aW9uIHRyaWVzIHRvIGFjY2VzcyBhbiBlbGVtZW50CiAgICogdGhhdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgW1JdLCB0aGUgYWNjZXNzIHdpbGwgdGhyb3cgaW5zdGVhZC4KICAgKgogICAqIFdoZW4gdGhlIHJldHVybmVkIGl0ZXJhYmxlIGNyZWF0ZXMgYSBuZXcgb2JqZWN0IHRoYXQgZGVwZW5kcyBvbgogICAqIHRoZSB0eXBlIFtSXSwgZS5nLiwgZnJvbSBbdG9MaXN0XSwgaXQgd2lsbCBoYXZlIGV4YWN0bHkgdGhlIHR5cGUgW1JdLgogICAqLwogIEl0ZXJhYmxlPFI+IGNhc3Q8Uj4oKSA9PiBJdGVyYWJsZS5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsYXp5IGNvbmNhdGVudGF0aW9uIG9mIHRoaXMgaXRlcmFibGUgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgaXRlcmFibGUgd2lsbCBwcm92aWRlIHRoZSBzYW1lIGVsZW1lbnRzIGFzIHRoaXMgaXRlcmFibGUsCiAgICogYW5kLCBhZnRlciB0aGF0LCB0aGUgZWxlbWVudHMgb2YgW290aGVyXSwgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlCiAgICogb3JpZ2luYWwgaXRlcmFibGVzLgogICAqLwogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpIHsKICAgIGlmICh0aGlzIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+KSB7CiAgICAgIHJldHVybiBGb2xsb3dlZEJ5SXRlcmFibGU8RT4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwogICAgfQogICAgcmV0dXJuIEZvbGxvd2VkQnlJdGVyYWJsZTxFPih0aGlzLCBvdGhlcik7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxhenkgW0l0ZXJhYmxlXSB3aXRoIGVsZW1lbnRzIHRoYXQgYXJlIGNyZWF0ZWQgYnkKICAgKiBjYWxsaW5nIGBmYCBvbiBlYWNoIGVsZW1lbnQgb2YgdGhpcyBgSXRlcmFibGVgIGluIGl0ZXJhdGlvbiBvcmRlci4KICAgKgogICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSB2aWV3IG9mIHRoZSBtYXBwZWQgZWxlbWVudHMuIEFzIGxvbmcgYXMgdGhlCiAgICogcmV0dXJuZWQgW0l0ZXJhYmxlXSBpcyBub3QgaXRlcmF0ZWQgb3ZlciwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIFtmXSB3aWxsCiAgICogbm90IGJlIGludm9rZWQuIFRoZSB0cmFuc2Zvcm1lZCBlbGVtZW50cyB3aWxsIG5vdCBiZSBjYWNoZWQuIEl0ZXJhdGluZwogICAqIG11bHRpcGxlIHRpbWVzIG92ZXIgdGhlIHJldHVybmVkIFtJdGVyYWJsZV0gd2lsbCBpbnZva2UgdGhlIHN1cHBsaWVkCiAgICogZnVuY3Rpb24gW2ZdIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIGVsZW1lbnQuCiAgICoKICAgKiBNZXRob2RzIG9uIHRoZSByZXR1cm5lZCBpdGVyYWJsZSBhcmUgYWxsb3dlZCB0byBvbWl0IGNhbGxpbmcgYGZgCiAgICogb24gYW55IGVsZW1lbnQgd2hlcmUgdGhlIHJlc3VsdCBpc24ndCBuZWVkZWQuCiAgICogRm9yIGV4YW1wbGUsIFtlbGVtZW50QXRdIG1heSBjYWxsIGBmYCBvbmx5IG9uY2UuCiAgICovCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGUpKSA9PiBNYXBwZWRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsYXp5IFtJdGVyYWJsZV0gd2l0aCBhbGwgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZQogICAqIHByZWRpY2F0ZSBbdGVzdF0uCiAgICoKICAgKiBUaGUgbWF0Y2hpbmcgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSBvcmRlciBpbiB0aGUgcmV0dXJuZWQgaXRlcmFibGUKICAgKiBhcyB0aGV5IGhhdmUgaW4gW2l0ZXJhdG9yXS4KICAgKgogICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSB2aWV3IG9mIHRoZSBtYXBwZWQgZWxlbWVudHMuCiAgICogQXMgbG9uZyBhcyB0aGUgcmV0dXJuZWQgW0l0ZXJhYmxlXSBpcyBub3QgaXRlcmF0ZWQgb3ZlciwKICAgKiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gW3Rlc3RdIHdpbGwgbm90IGJlIGludm9rZWQuCiAgICogSXRlcmF0aW5nIHdpbGwgbm90IGNhY2hlIHJlc3VsdHMsIGFuZCB0aHVzIGl0ZXJhdGluZyBtdWx0aXBsZSB0aW1lcyBvdmVyCiAgICogdGhlIHJldHVybmVkIFtJdGVyYWJsZV0gbWF5IGludm9rZSB0aGUgc3VwcGxpZWQKICAgKiBmdW5jdGlvbiBbdGVzdF0gbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgZWxlbWVudC4KICAgKi8KICBJdGVyYWJsZTxFPiB3aGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gV2hlcmVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsYXp5IFtJdGVyYWJsZV0gd2l0aCBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIHR5cGUgW1RdLgogICAqCiAgICogVGhlIG1hdGNoaW5nIGVsZW1lbnRzIGhhdmUgdGhlIHNhbWUgb3JkZXIgaW4gdGhlIHJldHVybmVkIGl0ZXJhYmxlCiAgICogYXMgdGhleSBoYXZlIGluIFtpdGVyYXRvcl0uCiAgICoKICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgdmlldyBvZiB0aGUgbWFwcGVkIGVsZW1lbnRzLgogICAqIEl0ZXJhdGluZyB3aWxsIG5vdCBjYWNoZSByZXN1bHRzLCBhbmQgdGh1cyBpdGVyYXRpbmcgbXVsdGlwbGUgdGltZXMgb3ZlcgogICAqIHRoZSByZXR1cm5lZCBbSXRlcmFibGVdIG1heSB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cywKICAgKiBpZiB0aGUgdW5kZXJseWluZyBlbGVtZW50cyBjaGFuZ2UgYmV0d2VlbiBpdGVyYXRpb25zLgogICAqLwogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICAvKioKICAgKiBFeHBhbmRzIGVhY2ggZWxlbWVudCBvZiB0aGlzIFtJdGVyYWJsZV0gaW50byB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCiAgICoKICAgKiBUaGUgcmVzdWx0aW5nIEl0ZXJhYmxlIHJ1bnMgdGhyb3VnaCB0aGUgZWxlbWVudHMgcmV0dXJuZWQKICAgKiBieSBbZl0gZm9yIGVhY2ggZWxlbWVudCBvZiB0aGlzLCBpbiBpdGVyYXRpb24gb3JkZXIuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgW0l0ZXJhYmxlXSBpcyBsYXp5LCBhbmQgY2FsbHMgW2ZdIGZvciBlYWNoIGVsZW1lbnQKICAgKiBvZiB0aGlzIGV2ZXJ5IHRpbWUgaXQncyBpdGVyYXRlZC4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgdmFyIHBhaXJzID0gW1sxLCAyXSwgWzMsIDRdXTsKICAgKiAgICAgdmFyIGZsYXR0ZW5lZCA9IHBhaXJzLmV4cGFuZCgocGFpcikgPT4gcGFpcikudG9MaXN0KCk7CiAgICogICAgIHByaW50KGZsYXR0ZW5lZCk7IC8vID0+IFsxLCAyLCAzLCA0XTsKICAgKgogICAqICAgICB2YXIgaW5wdXQgPSBbMSwgMiwgM107CiAgICogICAgIHZhciBkdXBsaWNhdGVkID0gaW5wdXQuZXhwYW5kKChpKSA9PiBbaSwgaV0pLnRvTGlzdCgpOwogICAqICAgICBwcmludChkdXBsaWNhdGVkKTsgLy8gPT4gWzEsIDEsIDIsIDIsIDMsIDNdCiAgICoKICAgKi8KICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihFIGVsZW1lbnQpKSA9PgogICAgICBFeHBhbmRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb2xsZWN0aW9uIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8gW2VsZW1lbnRdLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gd2lsbCBjaGVjayBlYWNoIGVsZW1lbnQgaW4gb3JkZXIgZm9yIGJlaW5nIGVxdWFsIHRvCiAgICogW2VsZW1lbnRdLCB1bmxlc3MgaXQgaGFzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGZpbmQgYW4gZWxlbWVudAogICAqIGVxdWFsIHRvIFtlbGVtZW50XS4KICAgKgogICAqIFRoZSBlcXVhbGl0eSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIFtlbGVtZW50XSBpcyBlcXVhbCB0byBhbiBlbGVtZW50IG9mCiAgICogdGhlIGl0ZXJhYmxlIGRlZmF1bHRzIHRvIHRoZSBbT2JqZWN0Lj09XSBvZiB0aGUgZWxlbWVudC4KICAgKgogICAqIFNvbWUgdHlwZXMgb2YgaXRlcmFibGUgbWF5IGhhdmUgYSBkaWZmZXJlbnQgZXF1YWxpdHkgdXNlZCBmb3IgaXRzIGVsZW1lbnRzLgogICAqIEZvciBleGFtcGxlLCBhIFtTZXRdIG1heSBoYXZlIGEgY3VzdG9tIGVxdWFsaXR5CiAgICogKHNlZSBbU2V0LmlkZW50aXR5XSkgdGhhdCBpdHMgYGNvbnRhaW5zYCB1c2VzLgogICAqIExpa2V3aXNlIHRoZSBgSXRlcmFibGVgIHJldHVybmVkIGJ5IGEgW01hcC5rZXlzXSBjYWxsCiAgICogc2hvdWxkIHVzZSB0aGUgc2FtZSBlcXVhbGl0eSB0aGF0IHRoZSBgTWFwYCB1c2VzIGZvciBrZXlzLgogICAqLwogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGZvciAoRSBlIGluIHRoaXMpIHsKICAgICAgaWYgKGUgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvKioKICAgKiBBcHBsaWVzIHRoZSBmdW5jdGlvbiBbZl0gdG8gZWFjaCBlbGVtZW50IG9mIHRoaXMgY29sbGVjdGlvbiBpbiBpdGVyYXRpb24KICAgKiBvcmRlci4KICAgKi8KICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIGYoZWxlbWVudCk7CiAgfQoKICAvKioKICAgKiBSZWR1Y2VzIGEgY29sbGVjdGlvbiB0byBhIHNpbmdsZSB2YWx1ZSBieSBpdGVyYXRpdmVseSBjb21iaW5pbmcgZWxlbWVudHMKICAgKiBvZiB0aGUgY29sbGVjdGlvbiB1c2luZyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgaXRlcmFibGUgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50LgogICAqIElmIGl0IGhhcyBvbmx5IG9uZSBlbGVtZW50LCB0aGF0IGVsZW1lbnQgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBPdGhlcndpc2UgdGhpcyBtZXRob2Qgc3RhcnRzIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSB0aGUgaXRlcmF0b3IsCiAgICogYW5kIHRoZW4gY29tYmluZXMgaXQgd2l0aCB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIGl0ZXJhdGlvbiBvcmRlciwKICAgKiBhcyBpZiBieToKICAgKgogICAqICAgICBFIHZhbHVlID0gaXRlcmFibGUuZmlyc3Q7CiAgICogICAgIGl0ZXJhYmxlLnNraXAoMSkuZm9yRWFjaCgoZWxlbWVudCkgewogICAqICAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudCk7CiAgICogICAgIH0pOwogICAqICAgICByZXR1cm4gdmFsdWU7CiAgICoKICAgKiBFeGFtcGxlIG9mIGNhbGN1bGF0aW5nIHRoZSBzdW0gb2YgYW4gaXRlcmFibGU6CiAgICoKICAgKiAgICAgaXRlcmFibGUucmVkdWNlKCh2YWx1ZSwgZWxlbWVudCkgPT4gdmFsdWUgKyBlbGVtZW50KTsKICAgKgogICAqLwogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHZhbHVlID0gaXRlcmF0b3IuY3VycmVudDsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgaXRlcmF0b3IuY3VycmVudCk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvKioKICAgKiBSZWR1Y2VzIGEgY29sbGVjdGlvbiB0byBhIHNpbmdsZSB2YWx1ZSBieSBpdGVyYXRpdmVseSBjb21iaW5pbmcgZWFjaAogICAqIGVsZW1lbnQgb2YgdGhlIGNvbGxlY3Rpb24gd2l0aCBhbiBleGlzdGluZyB2YWx1ZQogICAqCiAgICogVXNlcyBbaW5pdGlhbFZhbHVlXSBhcyB0aGUgaW5pdGlhbCB2YWx1ZSwKICAgKiB0aGVuIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCB1cGRhdGVzIHRoZSB2YWx1ZSB3aXRoCiAgICogZWFjaCBlbGVtZW50IHVzaW5nIHRoZSBbY29tYmluZV0gZnVuY3Rpb24sIGFzIGlmIGJ5OgogICAqCiAgICogICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgKiAgICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAqICAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudCk7CiAgICogICAgIH0KICAgKiAgICAgcmV0dXJuIHZhbHVlOwogICAqCiAgICogRXhhbXBsZSBvZiBjYWxjdWxhdGluZyB0aGUgc3VtIG9mIGFuIGl0ZXJhYmxlOgogICAqCiAgICogICAgIGl0ZXJhYmxlLmZvbGQoMCwgKHByZXYsIGVsZW1lbnQpID0+IHByZXYgKyBlbGVtZW50KTsKICAgKgogICAqLwogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50KTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIGV2ZXJ5IGVsZW1lbnQgb2YgdGhpcyBpdGVyYWJsZSBzYXRpc2ZpZXMgW3Rlc3RdLgogICAqCiAgICogQ2hlY2tzIGV2ZXJ5IGVsZW1lbnQgaW4gaXRlcmF0aW9uIG9yZGVyLCBhbmQgcmV0dXJucyBgZmFsc2VgIGlmCiAgICogYW55IG9mIHRoZW0gbWFrZSBbdGVzdF0gcmV0dXJuIGBmYWxzZWAsIG90aGVyd2lzZSByZXR1cm5zIGB0cnVlYC4KICAgKi8KICBib29sIGV2ZXJ5KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghdGVzdChlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0cyBlYWNoIGVsZW1lbnQgdG8gYSBbU3RyaW5nXSBhbmQgY29uY2F0ZW5hdGVzIHRoZSBzdHJpbmdzLgogICAqCiAgICogSXRlcmF0ZXMgdGhyb3VnaCBlbGVtZW50cyBvZiB0aGlzIGl0ZXJhYmxlLAogICAqIGNvbnZlcnRzIGVhY2ggb25lIHRvIGEgW1N0cmluZ10gYnkgY2FsbGluZyBbT2JqZWN0LnRvU3RyaW5nXSwKICAgKiBhbmQgdGhlbiBjb25jYXRlbmF0ZXMgdGhlIHN0cmluZ3MsIHdpdGggdGhlCiAgICogW3NlcGFyYXRvcl0gc3RyaW5nIGludGVybGVhdmVkIGJldHdlZW4gdGhlIGVsZW1lbnRzLgogICAqLwogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiAiIjsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChzZXBhcmF0b3IgPT0gbnVsbCB8fCBzZXBhcmF0b3IgPT0gIiIpIHsKICAgICAgZG8gewogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciBhbnkgZWxlbWVudCBvZiB0aGlzIGl0ZXJhYmxlIHNhdGlzZmllcyBbdGVzdF0uCiAgICoKICAgKiBDaGVja3MgZXZlcnkgZWxlbWVudCBpbiBpdGVyYXRpb24gb3JkZXIsIGFuZCByZXR1cm5zIGB0cnVlYCBpZgogICAqIGFueSBvZiB0aGVtIG1ha2UgW3Rlc3RdIHJldHVybiBgdHJ1ZWAsIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgogICAqLwogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBbTGlzdF0gY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBbSXRlcmFibGVdLgogICAqCiAgICogVGhlIGVsZW1lbnRzIGFyZSBpbiBpdGVyYXRpb24gb3JkZXIuCiAgICogVGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoIGlmIFtncm93YWJsZV0gaXMgZmFsc2UuCiAgICovCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgcmV0dXJuIExpc3Q8RT4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTZXRdIGNvbnRhaW5pbmcgdGhlIHNhbWUgZWxlbWVudHMgYXMgdGhpcyBpdGVyYWJsZS4KICAgKgogICAqIFRoZSBzZXQgbWF5IGNvbnRhaW4gZmV3ZXIgZWxlbWVudHMgdGhhbiB0aGUgaXRlcmFibGUsCiAgICogaWYgdGhlIGl0ZXJhYmxlIGNvbnRhaW5zIGFuIGVsZW1lbnQgbW9yZSB0aGFuIG9uY2UsCiAgICogb3IgaXQgY29udGFpbnMgb25lIG9yIG1vcmUgZWxlbWVudHMgdGhhdCBhcmUgZXF1YWwuCiAgICogVGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc2V0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lCiAgICogYXMgZm9yIHRoZSBpdGVyYWJsZS4KICAgKi8KICBTZXQ8RT4gdG9TZXQoKSA9PiBTZXQ8RT4uZnJvbSh0aGlzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIFt0aGlzXS4KICAgKgogICAqIENvdW50aW5nIGFsbCBlbGVtZW50cyBtYXkgaW52b2x2ZSBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgZWxlbWVudHMgYW5kIGNhbgogICAqIHRoZXJlZm9yZSBiZSBzbG93LgogICAqIFNvbWUgaXRlcmFibGVzIGhhdmUgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgogICAqLwogIGludCBnZXQgbGVuZ3RoIHsKICAgIGFzc2VydCh0aGlzIGlzISBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSk7CiAgICBpbnQgY291bnQgPSAwOwogICAgSXRlcmF0b3IgaXQgPSBpdGVyYXRvcjsKICAgIHdoaWxlIChpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAqCiAgICogTWF5IGJlIGNvbXB1dGVkIGJ5IGNoZWNraW5nIGlmIGBpdGVyYXRvci5tb3ZlTmV4dCgpYCByZXR1cm5zIGBmYWxzZWAuCiAgICovCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiAhaXRlcmF0b3IubW92ZU5leHQoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoaXMgY29sbGVjdGlvbi4KICAgKgogICAqIE1heSBiZSBjb21wdXRlZCBieSBjaGVja2luZyBpZiBgaXRlcmF0b3IubW92ZU5leHQoKWAgcmV0dXJucyBgdHJ1ZWAuCiAgICovCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGxhenkgaXRlcmFibGUgb2YgdGhlIFtjb3VudF0gZmlyc3QgZWxlbWVudHMgb2YgdGhpcyBpdGVyYWJsZS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBgSXRlcmFibGVgIG1heSBjb250YWluIGZld2VyIHRoYW4gYGNvdW50YCBlbGVtZW50cywgaWYgYHRoaXNgCiAgICogY29udGFpbnMgZmV3ZXIgdGhhbiBgY291bnRgIGVsZW1lbnRzLgogICAqCiAgICogVGhlIGVsZW1lbnRzIGNhbiBiZSBjb21wdXRlZCBieSBzdGVwcGluZyB0aHJvdWdoIFtpdGVyYXRvcl0gdW50aWwgW2NvdW50XQogICAqIGVsZW1lbnRzIGhhdmUgYmVlbiBzZWVuLgogICAqCiAgICogVGhlIGBjb3VudGAgbXVzdCBub3QgYmUgbmVnYXRpdmUuCiAgICovCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgY291bnQpIHsKICAgIHJldHVybiBUYWtlSXRlcmFibGU8RT4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGxhenkgaXRlcmFibGUgb2YgdGhlIGxlYWRpbmcgZWxlbWVudHMgc2F0aXNmeWluZyBbdGVzdF0uCiAgICoKICAgKiBUaGUgZmlsdGVyaW5nIGhhcHBlbnMgbGF6aWx5LiBFdmVyeSBuZXcgaXRlcmF0b3Igb2YgdGhlIHJldHVybmVkCiAgICogaXRlcmFibGUgc3RhcnRzIGl0ZXJhdGluZyBvdmVyIHRoZSBlbGVtZW50cyBvZiBgdGhpc2AuCiAgICoKICAgKiBUaGUgZWxlbWVudHMgY2FuIGJlIGNvbXB1dGVkIGJ5IHN0ZXBwaW5nIHRocm91Z2ggW2l0ZXJhdG9yXSB1bnRpbCBhbgogICAqIGVsZW1lbnQgaXMgZm91bmQgd2hlcmUgYHRlc3QoZWxlbWVudClgIGlzIGZhbHNlLiBBdCB0aGF0IHBvaW50LAogICAqIHRoZSByZXR1cm5lZCBpdGVyYWJsZSBzdG9wcyAoaXRzIGBtb3ZlTmV4dCgpYCByZXR1cm5zIGZhbHNlKS4KICAgKi8KICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gdGhhdCBwcm92aWRlcyBhbGwgYnV0IHRoZSBmaXJzdCBbY291bnRdIGVsZW1lbnRzLgogICAqCiAgICogV2hlbiB0aGUgcmV0dXJuZWQgaXRlcmFibGUgaXMgaXRlcmF0ZWQsIGl0IHN0YXJ0cyBpdGVyYXRpbmcgb3ZlciBgdGhpc2AsCiAgICogZmlyc3Qgc2tpcHBpbmcgcGFzdCB0aGUgaW5pdGlhbCBbY291bnRdIGVsZW1lbnRzLgogICAqIElmIGB0aGlzYCBoYXMgZmV3ZXIgdGhhbiBgY291bnRgIGVsZW1lbnRzLCB0aGVuIHRoZSByZXN1bHRpbmcgSXRlcmFibGUgaXMKICAgKiBlbXB0eS4KICAgKiBBZnRlciB0aGF0LCB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGFyZSBpdGVyYXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcwogICAqIGluIHRoaXMgaXRlcmFibGUuCiAgICoKICAgKiBTb21lIGl0ZXJhYmxlcyBtYXkgYmUgYWJsZSB0byBmaW5kIGxhdGVyIGVsZW1lbnRzIHdpdGhvdXQgZmlyc3QgaXRlcmF0aW5nCiAgICogdGhyb3VnaCBlYXJsaWVyIGVsZW1lbnRzLCBmb3IgZXhhbXBsZSB3aGVuIGl0ZXJhdGluZyBhIFtMaXN0XS4KICAgKiBTdWNoIGl0ZXJhYmxlcyBhcmUgYWxsb3dlZCB0byBpZ25vcmUgdGhlIGluaXRpYWwgc2tpcHBlZCBlbGVtZW50cy4KICAgKgogICAqIFRoZSBbY291bnRdIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgogICAqLwogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICByZXR1cm4gU2tpcEl0ZXJhYmxlPEU+KHRoaXMsIGNvdW50KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYW4gYEl0ZXJhYmxlYCB0aGF0IHNraXBzIGxlYWRpbmcgZWxlbWVudHMgd2hpbGUgW3Rlc3RdIGlzIHNhdGlzZmllZC4KICAgKgogICAqIFRoZSBmaWx0ZXJpbmcgaGFwcGVucyBsYXppbHkuIEV2ZXJ5IG5ldyBbSXRlcmF0b3JdIG9mIHRoZSByZXR1cm5lZAogICAqIGl0ZXJhYmxlIGl0ZXJhdGVzIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGB0aGlzYC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBpdGVyYWJsZSBwcm92aWRlcyBlbGVtZW50cyBieSBpdGVyYXRpbmcgdGhpcyBpdGVyYWJsZSwKICAgKiBidXQgc2tpcHBpbmcgb3ZlciBhbGwgaW5pdGlhbCBlbGVtZW50cyB3aGVyZSBgdGVzdChlbGVtZW50KWAgcmV0dXJucwogICAqIHRydWUuIElmIGFsbCBlbGVtZW50cyBzYXRpc2Z5IGB0ZXN0YCB0aGUgcmVzdWx0aW5nIGl0ZXJhYmxlIGlzIGVtcHR5LAogICAqIG90aGVyd2lzZSBpdCBpdGVyYXRlcyB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLAogICAqIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIGB0ZXN0KGVsZW1lbnQpYCByZXR1cm5zIGBmYWxzZWAuCiAgICovCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFNraXBXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudC4KICAgKgogICAqIFRocm93cyBhIFtTdGF0ZUVycm9yXSBpZiBgdGhpc2AgaXMgZW1wdHkuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGl0ZXJhdGlvbiBvcmRlciwKICAgKiBlcXVpdmFsZW50IHRvIGB0aGlzLmVsZW1lbnRBdCgwKWAuCiAgICovCiAgRSBnZXQgZmlyc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiBpdC5jdXJyZW50OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50LgogICAqCiAgICogVGhyb3dzIGEgW1N0YXRlRXJyb3JdIGlmIGB0aGlzYCBpcyBlbXB0eS4KICAgKiBPdGhlcndpc2UgbWF5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgYW5kIHJldHVybnMgdGhlIGxhc3Qgb25lCiAgICogc2Vlbi4KICAgKiBTb21lIGl0ZXJhYmxlcyBtYXkgaGF2ZSBtb3JlIGVmZmljaWVudCB3YXlzIHRvIGZpbmQgdGhlIGxhc3QgZWxlbWVudAogICAqIChmb3IgZXhhbXBsZSBhIGxpc3QgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbGFzdCBlbGVtZW50LAogICAqIHdpdGhvdXQgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHByZXZpb3VzIG9uZXMpLgogICAqLwogIEUgZ2V0IGxhc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgcmVzdWx0OwogICAgZG8gewogICAgICByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgfSB3aGlsZSAoaXQubW92ZU5leHQoKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHRoYXQgdGhpcyBpdGVyYWJsZSBoYXMgb25seSBvbmUgZWxlbWVudCwgYW5kIHJldHVybnMgdGhhdCBlbGVtZW50LgogICAqCiAgICogVGhyb3dzIGEgW1N0YXRlRXJyb3JdIGlmIGB0aGlzYCBpcyBlbXB0eSBvciBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50LgogICAqLwogIEUgZ2V0IHNpbmdsZSB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIEUgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIGlmIChpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IHNhdGlzZmllcyB0aGUgZ2l2ZW4gcHJlZGljYXRlIFt0ZXN0XS4KICAgKgogICAqIEl0ZXJhdGVzIHRocm91Z2ggZWxlbWVudHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IHRvIHNhdGlzZnkgW3Rlc3RdLgogICAqCiAgICogSWYgbm8gZWxlbWVudCBzYXRpc2ZpZXMgW3Rlc3RdLCB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBbb3JFbHNlXQogICAqIGZ1bmN0aW9uIGlzIHJldHVybmVkLgogICAqIElmIFtvckVsc2VdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRocm93aW5nIGEgW1N0YXRlRXJyb3JdLgogICAqLwogIEUgZmlyc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgdGhlIGdpdmVuIHByZWRpY2F0ZSBbdGVzdF0uCiAgICoKICAgKiBBbiBpdGVyYWJsZSB0aGF0IGNhbiBhY2Nlc3MgaXRzIGVsZW1lbnRzIGRpcmVjdGx5IG1heSBjaGVjayBpdHMKICAgKiBlbGVtZW50cyBpbiBhbnkgb3JkZXIgKGZvciBleGFtcGxlIGEgbGlzdCBzdGFydHMgYnkgY2hlY2tpbmcgdGhlCiAgICogbGFzdCBlbGVtZW50IGFuZCB0aGVuIG1vdmVzIHRvd2FyZHMgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0KS4KICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpdGVyYXRlcyBlbGVtZW50cyBpbiBpdGVyYXRpb24gb3JkZXIsCiAgICogY2hlY2tzIGB0ZXN0KGVsZW1lbnQpYCBmb3IgZWFjaCwKICAgKiBhbmQgZmluYWxseSByZXR1cm5zIHRoYXQgbGFzdCBvbmUgdGhhdCBtYXRjaGVkLgogICAqCiAgICogSWYgbm8gZWxlbWVudCBzYXRpc2ZpZXMgW3Rlc3RdLCB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBbb3JFbHNlXQogICAqIGZ1bmN0aW9uIGlzIHJldHVybmVkLgogICAqIElmIFtvckVsc2VdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRocm93aW5nIGEgW1N0YXRlRXJyb3JdLgogICAqLwogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2luZ2xlIGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgW3Rlc3RdLgogICAqCiAgICogQ2hlY2tzIGVsZW1lbnRzIHRvIHNlZSBpZiBgdGVzdChlbGVtZW50KWAgcmV0dXJucyB0cnVlLgogICAqIElmIGV4YWN0bHkgb25lIGVsZW1lbnQgc2F0aXNmaWVzIFt0ZXN0XSwgdGhhdCBlbGVtZW50IGlzIHJldHVybmVkLgogICAqIElmIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZCwgdGhyb3dzIFtTdGF0ZUVycm9yXS4KICAgKiBJZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kLCByZXR1cm5zIHRoZSByZXN1bHQgb2YgW29yRWxzZV0uCiAgICogSWYgW29yRWxzZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhyb3dpbmcgYSBbU3RhdGVFcnJvcl0uCiAgICovCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIFtpbmRleF10aCBlbGVtZW50LgogICAqCiAgICogVGhlIFtpbmRleF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIGxlc3MgdGhhbiBbbGVuZ3RoXS4KICAgKiBJbmRleCB6ZXJvIHJlcHJlc2VudHMgdGhlIGZpcnN0IGVsZW1lbnQgKHNvIGBpdGVyYWJsZS5lbGVtZW50QXQoMClgIGlzCiAgICogZXF1aXZhbGVudCB0byBgaXRlcmFibGUuZmlyc3RgKS4KICAgKgogICAqIE1heSBpdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGluIGl0ZXJhdGlvbiBvcmRlciwgaWdub3JpbmcgdGhlCiAgICogZmlyc3QgW2luZGV4XSBlbGVtZW50cyBhbmQgdGhlbiByZXR1cm5pbmcgdGhlIG5leHQuCiAgICogU29tZSBpdGVyYWJsZXMgbWF5IGhhdmUgbW9yZSBhIGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUgZWxlbWVudC4KICAgKi8KICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGluZGV4LCAiaW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShpbmRleCwgImluZGV4Iik7CiAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKGluZGV4ID09IGVsZW1lbnRJbmRleCkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGVsZW1lbnRJbmRleCsrOwogICAgfQogICAgdGhyb3cgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4IiwgbnVsbCwgZWxlbWVudEluZGV4KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgKHNvbWUgb2YpIHRoZSBlbGVtZW50cyBvZiBgdGhpc2AuCiAgICoKICAgKiBFbGVtZW50cyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlaXIgb3duIGB0b1N0cmluZ2AgcmVzdWx0cy4KICAgKgogICAqIFRoZSBkZWZhdWx0IHJlcHJlc2VudGF0aW9uIGFsd2F5cyBjb250YWlucyB0aGUgZmlyc3QgdGhyZWUgZWxlbWVudHMuCiAgICogSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiBhIGh1bmRyZWQgZWxlbWVudHMgaW4gdGhlIGl0ZXJhYmxlLCBpdCBhbHNvCiAgICogY29udGFpbnMgdGhlIGxhc3QgdHdvIGVsZW1lbnRzLgogICAqCiAgICogSWYgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXNuJ3QgYWJvdmUgODAgY2hhcmFjdGVycywgbW9yZSBlbGVtZW50cyBhcmUKICAgKiBpbmNsdWRlZCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgaXRlcmFibGUuCiAgICoKICAgKiBUaGUgY29udmVyc2lvbiBtYXkgb21pdCBjYWxsaW5nIGB0b1N0cmluZ2Agb24gc29tZSBlbGVtZW50cyBpZiB0aGV5CiAgICogYXJlIGtub3duIHRvIG5vdCBvY2N1ciBpbiB0aGUgb3V0cHV0LCBhbmQgaXQgbWF5IHN0b3AgaXRlcmF0aW5nIGFmdGVyCiAgICogYSBodW5kcmVkIGVsZW1lbnRzLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvU2hvcnRTdHJpbmcodGhpcywgJygnLCAnKScpOwp9Cgp0eXBlZGVmIF9HZW5lcmF0b3I8RT4gPSBFIEZ1bmN0aW9uKGludCBpbmRleCk7CgpjbGFzcyBfR2VuZXJhdG9ySXRlcmFibGU8RT4gZXh0ZW5kcyBMaXN0SXRlcmFibGU8RT4gewogIC8vLyBUaGUgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQgaXRlcmFibGUuCiAgZmluYWwgaW50IGxlbmd0aDsKCiAgLy8vIFRoZSBmdW5jdGlvbiBtYXBwaW5nIGluZGljZXMgdG8gdmFsdWVzLgogIGZpbmFsIF9HZW5lcmF0b3I8RT4gX2dlbmVyYXRvcjsKCiAgLy8vIENyZWF0ZXMgdGhlIGdlbmVyYXRlZCBpdGVyYWJsZS4KICAvLy8KICAvLy8gSWYgW2dlbmVyYXRvcl0gaXMgYG51bGxgLCBpdCBpcyBjaGVja2VkIHRoYXQgYGludGAgaXMgYXNzaWduYWJsZSB0byBbRV0uCiAgX0dlbmVyYXRvckl0ZXJhYmxlKHRoaXMubGVuZ3RoLCBFIGdlbmVyYXRvcihpbnQgaW5kZXgpKQogICAgICA6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aXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0OmNvcmUiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIGFzIGludGVybmFsIHNob3cgU3ltYm9sOwoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIKICAgIHNob3cKICAgICAgICBDbGFzc0lELAogICAgICAgIENvZGVVbml0cywKICAgICAgICBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSwKICAgICAgICBGaXhlZExlbmd0aExpc3RCYXNlLAogICAgICAgIEl0ZXJhYmxlRWxlbWVudEVycm9yLAogICAgICAgIExpc3RJdGVyYXRvciwKICAgICAgICBMaXN0cywKICAgICAgICBQT1dFUlNfT0ZfVEVOLAogICAgICAgIFN1Ykxpc3RJdGVyYWJsZSwKICAgICAgICBVbm1vZGlmaWFibGVMaXN0QmFzZSwKICAgICAgICBpczY0Qml0LAogICAgICAgIG1ha2VGaXhlZExpc3RVbm1vZGlmaWFibGUsCiAgICAgICAgbWFrZUxpc3RGaXhlZExlbmd0aCwKICAgICAgICBwYXRjaCwKICAgICAgICB1bnNhZmVDYXN0OwoKaW1wb3J0ICJkYXJ0OmFzeW5jIiBzaG93IENvbXBsZXRlciwgRnV0dXJlLCBUaW1lcjsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIgogICAgc2hvdwogICAgICAgIEhhc2hNYXAsCiAgICAgICAgSXRlcmFibGVCYXNlLAogICAgICAgIExpbmtlZEhhc2hNYXAsCiAgICAgICAgTGlua2VkTGlzdCwKICAgICAgICBMaW5rZWRMaXN0RW50cnksCiAgICAgICAgTGlzdEJhc2UsCiAgICAgICAgTWFwQmFzZSwKICAgICAgICBNYXBzLAogICAgICAgIFVubW9kaWZpYWJsZU1hcEJhc2UsCiAgICAgICAgVW5tb2RpZmlhYmxlTWFwVmlldzsKCmltcG9ydCAiZGFydDpjb252ZXJ0IiBzaG93IGFzY2lpLCBFbmNvZGluZywganNvbiwgbGF0aW4xLCB1dGY4OwoKaW1wb3J0ICJkYXJ0Omlzb2xhdGUiIHNob3cgSXNvbGF0ZTsKCmltcG9ydCAiZGFydDptYXRoIiBzaG93IFJhbmRvbTsKCmltcG9ydCAiZGFydDp0eXBlZF9kYXRhIgogICAgc2hvdyBFbmRpYW4sIFVpbnQ4TGlzdCwgSW50NjRMaXN0LCBVaW50MTZMaXN0LCBVaW50MzJMaXN0OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImFycmF5LmRhcnQiOwovLyBwYXJ0ICJhcnJheV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiYmlnaW50X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJib29sX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJkYXRlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJkb3VibGUuZGFydCI7Ci8vIHBhcnQgImRvdWJsZV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiZXJyb3JzX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJleHBhbmRvX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJmdW5jdGlvbi5kYXJ0IjsKLy8gcGFydCAiZnVuY3Rpb25fcGF0Y2guZGFydCI7Ci8vIHBhcnQgImdyb3dhYmxlX2FycmF5LmRhcnQiOwovLyBwYXJ0ICJpZGVudGljYWxfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImltbXV0YWJsZV9tYXAuZGFydCI7Ci8vIHBhcnQgImludGVnZXJzLmRhcnQiOwovLyBwYXJ0ICJpbnRlZ2Vyc19wYXRjaC5kYXJ0IjsKLy8gcGFydCAiaW52b2NhdGlvbl9taXJyb3JfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImxpYl9wcmVmaXguZGFydCI7Ci8vIHBhcnQgIm1hcF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAibnVsbF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAib2JqZWN0X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJyZWdleHBfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInN0YWNrdHJhY2UuZGFydCI7Ci8vIHBhcnQgInN0b3B3YXRjaF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3RyaW5nX2J1ZmZlcl9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3RyaW5nX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJ0eXBlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJ1cmlfcGF0Y2guZGFydCI7Ci8vIHBhcnQgIndlYWtfcHJvcGVydHkuZGFydCI7CgpAcGF0Y2gKY2xhc3MgbnVtIHsKICBudW0gX2FkZEZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgbnVtIF9zdWJGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIG51bSBfbXVsRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBpbnQgX3RydW5jRGl2RnJvbUludGVnZXIoaW50IG90aGVyKTsKICBudW0gX21vZHVsb0Zyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgbnVtIF9yZW1haW5kZXJGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGJvb2wgX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBib29sIF9lcXVhbFRvSW50ZWdlcihpbnQgb3RoZXIpOwp9CgovLyBfU3luY0l0ZXJhYmxlIGFuZCBfc3luY0l0ZXJhdG9yIGFyZSB1c2VkIGJ5IHRoZSBjb21waWxlciB0bwovLyBpbXBsZW1lbnQgc3luYyogZ2VuZXJhdG9yIGZ1bmN0aW9ucy4gQSBzeW5jKiBnZW5lcmF0b3IgYWxsb2NhdGVzCi8vIGFuZCByZXR1cm5zIGEgbmV3IF9TeW5jSXRlcmFibGUgb2JqZWN0LgoKdHlwZWRlZiBib29sIF9TeW5jR2VuZXJhdG9yQ2FsbGJhY2s8VD4oX1N5bmNJdGVyYXRvcjxUPiBpdGVyYXRvcik7CgpjbGFzcyBfU3luY0l0ZXJhYmxlPFQ+IGV4dGVuZHMgSXRlcmFibGVCYXNlPFQ+IHsKICAvLyBfbW92ZU5leHRGbiBpcyB0aGUgY2xvc3VyaXplZCBib2R5IG9mIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24uCiAgZmluYWwgX1N5bmNHZW5lcmF0b3JDYWxsYmFjazxUPiBfbW92ZU5leHRGbjsKCiAgY29uc3QgX1N5bmNJdGVyYWJsZSh0aGlzLl9tb3ZlTmV4dEZuKTsKCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yIHsKICAgIC8vIE5vdGU6IF9DbG9zdXJlLl9jbG9uZSByZXR1cm5zIF9DbG9zdXJlIHdoaWNoIGlzIG5vdCByZWxhdGVkIHRvCiAgICAvLyBfU3luY0dlbmVyYXRvckNhbGxiYWNrLCB3aGljaCBtZWFucyB3ZSBuZWVkIGV4cGxpY2l0IGNhc3QuCiAgICByZXR1cm4gbmV3IF9TeW5jSXRlcmF0b3I8VD4odW5zYWZlQ2FzdDxfU3luY0dlbmVyYXRvckNhbGxiYWNrPFQ+PigKICAgICAgICB1bnNhZmVDYXN0PF9DbG9zdXJlPihfbW92ZU5leHRGbikuX2Nsb25lKCkpKTsKICB9Cn0KCmNsYXNzIF9TeW5jSXRlcmF0b3I8VD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgX1N5bmNHZW5lcmF0b3JDYWxsYmFjazxUPiBfbW92ZU5leHRGbjsKICBJdGVyYXRvcjxUPiBfeWllbGRFYWNoSXRlcmF0b3I7CgogIC8vIFRoZXNlIHR3byBmaWVsZHMgYXJlIHNldCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIHlpZWxkIGFuZCB5aWVsZCoKICAvLyBzdGF0ZW1lbnQuCiAgVCBfY3VycmVudDsKICBJdGVyYWJsZTxUPiBfeWllbGRFYWNoSXRlcmFibGU7CgogIFQgZ2V0IGN1cnJlbnQgPT4KICAgICAgX3lpZWxkRWFjaEl0ZXJhdG9yICE9IG51bGwgPyBfeWllbGRFYWNoSXRlcmF0b3IuY3VycmVudCA6IF9jdXJyZW50OwoKICBfU3luY0l0ZXJhdG9yKHRoaXMuX21vdmVOZXh0Rm4pOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9tb3ZlTmV4dEZuID09IG51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKF95aWVsZEVhY2hJdGVyYXRvciAhPSBudWxsKSB7CiAgICAgICAgaWYgKF95aWVsZEVhY2hJdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgX3lpZWxkRWFjaEl0ZXJhdG9yID0gbnVsbDsKICAgICAgfQogICAgICAvLyBfbW92ZU5leHRGbigpIHdpbGwgdXBkYXRlIHRoZSB2YWx1ZXMgb2YgX3lpZWxkRWFjaEl0ZXJhYmxlCiAgICAgIC8vICBhbmQgX2N1cnJlbnQuCiAgICAgIGlmICghX21vdmVOZXh0Rm4odGhpcykpIHsKICAgICAgICBfbW92ZU5leHRGbiA9IG51bGw7CiAgICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoX3lpZWxkRWFjaEl0ZXJhYmxlICE9IG51bGwpIHsKICAgICAgICAvLyBTcGVjIG1hbmRhdGVzOiBpdCBpcyBhIGR5bmFtaWMgZXJyb3IgaWYgdGhlIGNsYXNzIG9mIFt0aGUgb2JqZWN0CiAgICAgICAgLy8gcmV0dXJuZWQgYnkgeWllbGQqXSBkb2VzIG5vdCBpbXBsZW1lbnQgSXRlcmFibGUuCiAgICAgICAgX3lpZWxkRWFjaEl0ZXJhdG9yID0gX3lpZWxkRWFjaEl0ZXJhYmxlLml0ZXJhdG9yOwogICAgICAgIF95aWVsZEVhY2hJdGVyYWJsZSA9IG51bGw7CiAgICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfQoKQHBhdGNoCmNsYXNzIFN0YWNrVHJhY2UgewogIEBwYXRjaAogIHN0YXRpYyBTdGFja1RyYWNlIGdldCBjdXJyZW50IG5hdGl2ZSAiU3RhY2tUcmFjZV9jdXJyZW50IjsKfQqAqABOTjwBTUpLKwExARgJERMhHR4WDxcZHhEjHQ8UATMBGQkRFhcUGRIRDh0dAUABJAEgARk/AToWHB0bGxcdHR4ZHx8gHhkfKBsaGx0dGyAkHRsaHgEHDCIiIiclKCsjAgE/RCsBQwExQy8BKQEdRkJHNgQCATApIgFJEA4iARNKASMBFB8UBhMoLRcKIwhEGCAcGRYIKEw8OiMZEggTBgQCAQcTCT0CAR9kYXJ0OmNvcmUtcGF0Y2gvY29yZV9wYXRjaC5kYXJ0Km9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvYXJyYXkuZGFydJ0gLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9MaXN0PEU+IGV4dGVuZHMgRml4ZWRMZW5ndGhMaXN0QmFzZTxFPiB7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfTGlzdCkKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBmYWN0b3J5IF9MaXN0KGxlbmd0aCkgbmF0aXZlICJMaXN0X2FsbG9jYXRlIjsKCiAgRSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiTGlzdF9nZXRJbmRleGVkIjsKCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKSB7CiAgICBfc2V0SW5kZXhlZChpbmRleCwgdmFsdWUpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZChpbnQgaW5kZXgsIEUgdmFsdWUpIG5hdGl2ZSAiTGlzdF9zZXRJbmRleGVkIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgbGVuZ3RoIG5hdGl2ZSAiTGlzdF9nZXRMZW5ndGgiOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBMaXN0IF9zbGljZShpbnQgc3RhcnQsIGludCBjb3VudCwgYm9vbCBuZWVkc1R5cGVBcmd1bWVudCkgewogICAgaWYgKGNvdW50IDw9IDY0KSB7CiAgICAgIGZpbmFsIHJlc3VsdCA9IG5lZWRzVHlwZUFyZ3VtZW50ID8gbmV3IF9MaXN0PEU+KGNvdW50KSA6IG5ldyBfTGlzdChjb3VudCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmVzdWx0W2ldID0gdGhpc1tzdGFydCArIGldOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3NsaWNlSW50ZXJuYWwoc3RhcnQsIGNvdW50LCBuZWVkc1R5cGVBcmd1bWVudCk7CiAgICB9CiAgfQoKICBMaXN0IF9zbGljZUludGVybmFsKGludCBzdGFydCwgaW50IGNvdW50LCBib29sIG5lZWRzVHlwZUFyZ3VtZW50KQogICAgICBuYXRpdmUgIkxpc3Rfc2xpY2UiOwoKICAvLyBMaXN0IGludGVyZmFjZS4KICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiB0aGlzLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgaWYgKGVuZCA8IHN0YXJ0IHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIHRoaXMubGVuZ3RoKTsKICAgIH0KICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuOwogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBpdGVyYWJsZSkpIHsKICAgICAgTGlzdHMuY29weSh0aGlzLCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBsZW5ndGgpOwogICAgfSBlbHNlIGlmIChDbGFzc0lELmdldElEKGl0ZXJhYmxlKSA9PSBDbGFzc0lELmNpZEFycmF5KSB7CiAgICAgIGZpbmFsIF9MaXN0PEU+IGl0ZXJhYmxlQXNMaXN0ID0gaXRlcmFibGU7CiAgICAgIExpc3RzLmNvcHkoaXRlcmFibGVBc0xpc3QsIHNraXBDb3VudCwgdGhpcywgc3RhcnQsIGxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKGl0ZXJhYmxlIGlzIExpc3Q8RT4pIHsKICAgICAgTGlzdHMuY29weShpdGVyYWJsZSwgc2tpcENvdW50LCB0aGlzLCBzdGFydCwgbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIEl0ZXJhdG9yIGl0ID0gaXRlcmFibGUuaXRlcmF0b3I7CiAgICAgIHdoaWxlIChza2lwQ291bnQgPiAwKSB7CiAgICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICAgICAgc2tpcENvdW50LS07CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHJldHVybjsKICAgICAgICB0aGlzW2ldID0gaXQuY3VycmVudDsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCB0aGlzLmxlbmd0aCwgImluZGV4Iik7CiAgICB9CiAgICBMaXN0PEU+IGl0ZXJhYmxlQXNMaXN0OwogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBpdGVyYWJsZSkpIHsKICAgICAgaXRlcmFibGVBc0xpc3QgPSB0aGlzOwogICAgfSBlbHNlIGlmIChDbGFzc0lELmdldElEKGl0ZXJhYmxlKSA9PSBDbGFzc0lELmNpZEFycmF5KSB7CiAgICAgIGl0ZXJhYmxlQXNMaXN0ID0gaXRlcmFibGU7CiAgICB9IGVsc2UgaWYgKGl0ZXJhYmxlIGlzIExpc3Q8RT4pIHsKICAgICAgaXRlcmFibGVBc0xpc3QgPSBpdGVyYWJsZTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAodmFyIHZhbHVlIGluIGl0ZXJhYmxlKSB7CiAgICAgICAgdGhpc1tpbmRleCsrXSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBsZW5ndGggPSBpdGVyYWJsZUFzTGlzdC5sZW5ndGg7CiAgICBpZiAoaW5kZXggKyBsZW5ndGggPiB0aGlzLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShpbmRleCArIGxlbmd0aCwgMCwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgTGlzdHMuY29weShpdGVyYWJsZUFzTGlzdCwgMCwgdGhpcywgaW5kZXgsIGxlbmd0aCk7CiAgfQoKICBMaXN0PEU+IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIDxFPltdOwogICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PEU+Ll93aXRoRGF0YShfc2xpY2Uoc3RhcnQsIGxlbmd0aCwgZmFsc2UpKTsKICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gSXRlcmFibGUgaW50ZXJmYWNlLgoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIGZvckVhY2goZihFIGVsZW1lbnQpKSB7CiAgICBmaW5hbCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgZih0aGlzW2ldKTsKICAgIH0KICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9GaXhlZFNpemVBcnJheUl0ZXJhdG9yPEU+KHRoaXMpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPT0gMSkgcmV0dXJuIHRoaXNbMF07CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICB2YXIgcmVzdWx0ID0gX3NsaWNlKDAsIGxlbmd0aCwgIWdyb3dhYmxlKTsKICAgICAgaWYgKGdyb3dhYmxlKSB7CiAgICAgICAgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKHJlc3VsdCkuLl9zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgLy8gX0dyb3dhYmxlTGlzdC5fd2l0aERhdGEgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggZW1wdHkgbGlzdC4KICAgIHJldHVybiBncm93YWJsZSA/IDxFPltdIDogbmV3IExpc3Q8RT4oMCk7CiAgfQp9CgovLyBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGNsYXNzIGFzIF9MaXN0LCBidXQgaXQgZG9lcyBub3QKLy8gcGVybWl0IGFueSBtb2RpZmljYXRpb24gb2YgYXJyYXkgZWxlbWVudHMgZnJvbSBEYXJ0IGNvZGUuIFdlIHVzZQovLyB0aGlzIGNsYXNzIGZvciBhcnJheXMgY29uc3RydWN0ZWQgZnJvbSBEYXJ0IGFycmF5IGxpdGVyYWxzLgovLyBUT0RPKGhhdXNuZXIpOiBXZSBzaG91bGQgY29uc2lkZXIgdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiB0d28KLy8gY2xhc3NlcyAoYW5kIGlubGluZSBjYWNoZSBtaXNzZXMpIHZlcnN1cyBhIGZpZWxkIGluIHRoZSBuYXRpdmUKLy8gaW1wbGVtZW50YXRpb24gKGNoZWNrcyB3aGVuIG1vZGlmeWluZykuIFdlIHNob3VsZCBrZWVwIHdhdGNoaW5nCi8vIHRoZSBpbmxpbmUgY2FjaGUgbWlzc2VzLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbW11dGFibGVMaXN0PEU+IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8RT4gewogIGZhY3RvcnkgX0ltbXV0YWJsZUxpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkltbXV0YWJsZUFycmF5IGNhbiBvbmx5IGJlIGFsbG9jYXRlZCBieSB0aGUgVk0iKTsKICB9CgogIGZhY3RvcnkgX0ltbXV0YWJsZUxpc3QuX2Zyb20oTGlzdCBmcm9tLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIkltbXV0YWJsZUxpc3RfZnJvbSI7CgogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KSBuYXRpdmUgIkxpc3RfZ2V0SW5kZXhlZCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IGxlbmd0aCBuYXRpdmUgIkxpc3RfZ2V0TGVuZ3RoIjsKCiAgTGlzdDxFPiBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiA8RT5bXTsKICAgIExpc3QgbGlzdCA9IG5ldyBfTGlzdChsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBsaXN0W2ldID0gdGhpc1tzdGFydCArIGldOwogICAgfQogICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PEU+Ll93aXRoRGF0YShsaXN0KTsKICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gQ29sbGVjdGlvbiBpbnRlcmZhY2UuCgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgZm9yRWFjaChmKEUgZWxlbWVudCkpIHsKICAgIGZpbmFsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgX0ZpeGVkU2l6ZUFycmF5SXRlcmF0b3I8RT4odGhpcyk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbMF07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPiAwKSB7CiAgICAgIExpc3QgbGlzdCA9IGdyb3dhYmxlID8gbmV3IF9MaXN0KGxlbmd0aCkgOiBuZXcgX0xpc3Q8RT4obGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGxpc3RbaV0gPSB0aGlzW2ldOwogICAgICB9CiAgICAgIGlmICghZ3Jvd2FibGUpIHJldHVybiBsaXN0OwogICAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKGxpc3QpOwogICAgICByZXN1bHQuX3NldExlbmd0aChsZW5ndGgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIGdyb3dhYmxlID8gPEU+W10gOiBuZXcgX0xpc3Q8RT4oMCk7CiAgfQp9CgovLyBJdGVyYXRvciBmb3IgYXJyYXlzIHdpdGggZml4ZWQgc2l6ZS4KY2xhc3MgX0ZpeGVkU2l6ZUFycmF5SXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgTGlzdDxFPiBfYXJyYXk7CiAgZmluYWwgaW50IF9sZW5ndGg7IC8vIENhY2hlIGFycmF5IGxlbmd0aCBmb3IgZmFzdGVyIGFjY2Vzcy4KICBpbnQgX2luZGV4OwogIEUgX2N1cnJlbnQ7CgogIF9GaXhlZFNpemVBcnJheUl0ZXJhdG9yKExpc3Q8RT4gYXJyYXkpCiAgICAgIDogX2FycmF5ID0gYXJyYXksCiAgICAgICAgX2xlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICBfaW5kZXggPSAwIHsKICAgIGFzc2VydChhcnJheSBpcyBfTGlzdDxFPiB8fCBhcnJheSBpcyBfSW1tdXRhYmxlTGlzdDxFPik7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9pbmRleCA+PSBfbGVuZ3RoKSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfYXJyYXlbX2luZGV4XTsKICAgIF9pbmRleCsrOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CoEEAE5OPAEeARowKR4wATUBKh8EAUEBNB4qAR4+F1EwJQgVDT4GBAFEGwEVUSw5Biw7Bh4dJTg+MEImPA0nHiQVCCokHggGBAExLEIGHCUdPiEmIQ0kHwgOBigoQgY4BAEqPx4jTx8TBAEZAR4fICcSBgQBHh0xBAEQJCwEAQ8tLAQBESU9KgQBKh4WMRZNCBUGQy4EAgFARD9AQkMcGjotIDsEAUIjATUBNB4qASo/HiMjJyEGNx8TBAEbAR4fICcSBgQBHh0xBAEQJCwEAQ8tLAQBESU9KgQBKh4WRykbCCI5IRUGLwQCASg6GD4ODgEpGCAVPQQBHQEeFB0XFAYfDhEEAgEaZGFydDpjb3JlLXBhdGNoL2FycmF5LmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9iaWdpbnRfcGF0Y2guZGFydMABfR4vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiBkYXJ0LmNvcmU7CgovLyBDb3B5cmlnaHQgMjAwOSBUaGUgR28gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoKICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgIFRvbSBXdQogKiBDb3B5cmlnaHQgKGMpIDIwMTIgQWRhbSBTaW5nZXIgKGFkYW1Ac29sdnIuaW8pCiAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQogKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUy1JUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MsIElNUExJRUQgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKICogV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKgogKiBJTiBOTyBFVkVOVCBTSEFMTCBUT00gV1UgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwKICogSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCiAqIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgT1IgTk9UIEFEVklTRUQgT0YKICogVEhFIFBPU1NJQklMSVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVAogKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogKgogKiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBjb25kaXRpb24gYXBwbGllczoKICoKICogQWxsIHJlZGlzdHJpYnV0aW9ucyBtdXN0IHJldGFpbiBhbiBpbnRhY3QgY29weSBvZiB0aGlzIGNvcHlyaWdodCBub3RpY2UKICogYW5kIGRpc2NsYWltZXIuCiAqLwoKQHBhdGNoCmNsYXNzIEJpZ0ludCBpbXBsZW1lbnRzIENvbXBhcmFibGU8QmlnSW50PiB7CiAgQHBhdGNoCiAgc3RhdGljIEJpZ0ludCBnZXQgemVybyA9PiBfQmlnSW50SW1wbC56ZXJvOwogIEBwYXRjaAogIHN0YXRpYyBCaWdJbnQgZ2V0IG9uZSA9PiBfQmlnSW50SW1wbC5vbmU7CiAgQHBhdGNoCiAgc3RhdGljIEJpZ0ludCBnZXQgdHdvID0+IF9CaWdJbnRJbXBsLnR3bzsKCiAgQHBhdGNoCiAgc3RhdGljIEJpZ0ludCBwYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSkgPT4KICAgICAgX0JpZ0ludEltcGwucGFyc2Uoc291cmNlLCByYWRpeDogcmFkaXgpOwoKICBAcGF0Y2gKICBzdGF0aWMgQmlnSW50IHRyeVBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KSA9PgogICAgICBfQmlnSW50SW1wbC5fdHJ5UGFyc2Uoc291cmNlLCByYWRpeDogcmFkaXgpOwoKICBAcGF0Y2gKICBmYWN0b3J5IEJpZ0ludC5mcm9tKG51bSB2YWx1ZSkgPT4gbmV3IF9CaWdJbnRJbXBsLmZyb20odmFsdWUpOwp9CgppbnQgX21heChpbnQgYSwgaW50IGIpID0+IGEgPiBiID8gYSA6IGI7CmludCBfbWluKGludCBhLCBpbnQgYikgPT4gYSA8IGIgPyBhIDogYjsKCi8vLyBBbGxvY2F0ZSBhIG5ldyBkaWdpdHMgbGlzdCBvZiBldmVuIGxlbmd0aC4KVWludDMyTGlzdCBfbmV3RGlnaXRzKGludCBsZW5ndGgpID0+IG5ldyBVaW50MzJMaXN0KGxlbmd0aCArIChsZW5ndGggJiAxKSk7CgovKioKICogQW4gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBhcmJpdHJhcmlseSBsYXJnZSBpbnRlZ2VyLgogKgogKiBUaGUgaW50ZWdlciBudW1iZXIgaXMgcmVwcmVzZW50ZWQgYnkgYSBzaWduLCBhbiBhcnJheSBvZiAzMi1iaXQgdW5zaWduZWQKICogaW50ZWdlcnMgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsIGFuZCBhIG51bWJlciBvZiB1c2VkIGRpZ2l0cyBpbiB0aGF0IGFycmF5LgogKi8KY2xhc3MgX0JpZ0ludEltcGwgaW1wbGVtZW50cyBCaWdJbnQgewogIC8vIEJpdHMgcGVyIGRpZ2l0LgogIHN0YXRpYyBjb25zdCBpbnQgX2RpZ2l0Qml0cyA9IDMyOwogIHN0YXRpYyBjb25zdCBpbnQgX2RpZ2l0QmFzZSA9IDEgPDwgX2RpZ2l0Qml0czsKICBzdGF0aWMgY29uc3QgaW50IF9kaWdpdE1hc2sgPSAoMSA8PCBfZGlnaXRCaXRzKSAtIDE7CgogIC8vIEJpdHMgcGVyIGhhbGYgZGlnaXQuCiAgc3RhdGljIGNvbnN0IGludCBfaGFsZkRpZ2l0Qml0cyA9IF9kaWdpdEJpdHMgPj4gMTsKICBzdGF0aWMgY29uc3QgaW50IF9oYWxmRGlnaXRNYXNrID0gKDEgPDwgX2hhbGZEaWdpdEJpdHMpIC0gMTsKCiAgc3RhdGljIGZpbmFsIF9CaWdJbnRJbXBsIHplcm8gPSBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQoMCk7CiAgc3RhdGljIGZpbmFsIF9CaWdJbnRJbXBsIG9uZSA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludCgxKTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgdHdvID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KDIpOwoKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgX21pbnVzT25lID0gLW9uZTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgX29uZURpZ2l0TWFzayA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludChfZGlnaXRNYXNrKTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgX3R3b0RpZ2l0TWFzayA9IChvbmUgPDwgKDIgKiBfZGlnaXRCaXRzKSkgLSBvbmU7CiAgc3RhdGljIGZpbmFsIF9CaWdJbnRJbXBsIF9vbmVCaWxsaW9uID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KDEwMDAwMDAwMDApOwogIHN0YXRpYyBjb25zdCBpbnQgX21pbkludCA9IC0weDgwMDAwMDAwMDAwMDAwMDA7CiAgc3RhdGljIGNvbnN0IGludCBfbWF4SW50ID0gMHg3ZmZmZmZmZmZmZmZmZmZmOwoKICAvLyBSZXN1bHQgY2FjaGUgZm9yIGxhc3QgX2RpdlJlbSBjYWxsLgogIC8vIFJlc3VsdCBjYWNoZSBmb3IgbGFzdCBfZGl2UmVtIGNhbGwuCiAgc3RhdGljIFVpbnQzMkxpc3QgX2xhc3REaXZpZGVuZERpZ2l0czsKICBzdGF0aWMgaW50IF9sYXN0RGl2aWRlbmRVc2VkOwogIHN0YXRpYyBVaW50MzJMaXN0IF9sYXN0RGl2aXNvckRpZ2l0czsKICBzdGF0aWMgaW50IF9sYXN0RGl2aXNvclVzZWQ7CiAgc3RhdGljIFVpbnQzMkxpc3QgX2xhc3RRdW9SZW1EaWdpdHM7CiAgc3RhdGljIGludCBfbGFzdFF1b1JlbVVzZWQ7CiAgc3RhdGljIGludCBfbGFzdFJlbVVzZWQ7CiAgc3RhdGljIGludCBfbGFzdFJlbV9uc2g7CgogIC8vLyBXaGV0aGVyIHRoaXMgYmlnaW50IGlzIG5lZ2F0aXZlLgogIGZpbmFsIGJvb2wgX2lzTmVnYXRpdmU7CgogIC8vLyBUaGUgdW5zaWduZWQgZGlnaXRzIG9mIHRoaXMgYmlnaW50LgogIC8vLwogIC8vLyBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgZGlnaXQgaXMgaW4gc2xvdCAwLgogIC8vLyBUaGUgbGlzdCBtYXkgaGF2ZSBtb3JlIGRpZ2l0cyB0aGFuIG5lZWRlZC4gVGhhdCBpcywgYF9kaWdpdHMubGVuZ3RoYCBtYXkKICAvLy8gYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIGBfdXNlZGAuCiAgLy8vIEFsc28sIGBfZGlnaXRzLmxlbmd0aGAgbXVzdCBhbHdheXMgYmUgZXZlbiwgYmVjYXVzZSBpbnRyaW5zaWNzIG9uIDY0LWJpdAogIC8vLyBwbGF0Zm9ybXMgbWF5IHByb2Nlc3MgYSBkaWdpdCBwYWlyIGFzIGEgNjQtYml0IHZhbHVlLgogIGZpbmFsIFVpbnQzMkxpc3QgX2RpZ2l0czsKCiAgLy8vIFRoZSBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIGluIFtfZGlnaXRzXS4KICAvLy8KICAvLy8gVG8gYXZvaWQgcmVhbGxvY2F0aW5nIFtVaW50MzJMaXN0XXMsIGxpc3RzIHRoYXQgYXJlIHRvbyBiaWcgYXJlIG5vdAogIC8vLyByZXBsYWNlZCwgYnV0IGBfdXNlZGAgcmVmbGVjdHMgdGhlIHNtYWxsZXIgbnVtYmVyIG9mIGRpZ2l0cyBhY3R1YWxseSB1c2VkLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgZnVuY3Rpb25zIHNob3J0ZW5pbmcgYW4gZXhpc3RpbmcgbGlzdCBvZiBkaWdpdHMgdG8gYSBzbWFsbGVyCiAgLy8vIGBfdXNlZGAgbnVtYmVyIG9mIGRpZ2l0cyBtdXN0IGVuc3VyZSB0aGF0IHRoZSBoaWdoZXJtb3N0IHBhaXIgb2YgZGlnaXRzCiAgLy8vIGlzIGNvcnJlY3Qgd2hlbiByZWFkIGFzIGEgNjQtYml0IHZhbHVlIGJ5IGludHJpbnNpY3MuIFRoZXJlZm9yZSwgaWYgdGhlCiAgLy8vIHNtYWxsZXIgJ191c2VkJyBudW1iZXIgaXMgb2RkLCB0aGUgaGlnaCBkaWdpdCBvZiB0aGF0IHBhaXIgbXVzdCBiZQogIC8vLyBleHBsaWNpdGx5IGNsZWFyZWQsIGkuZS4gX2RpZ2l0c1tfdXNlZF0gPSAwLCB3aGljaCBjYW5ub3QgcmVzdWx0IGluIGFuCiAgLy8vIG91dCBvZiBib3VuZHMgYWNjZXNzLCBzaW5jZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGlzIGd1YXJhbnRlZWQgdG8gYmUKICAvLy8gZXZlbi4KICBmaW5hbCBpbnQgX3VzZWQ7CgogIC8qKgogICAqIFBhcnNlcyBbc291cmNlXSBhcyBhLCBwb3NzaWJseSBzaWduZWQsIGludGVnZXIgbGl0ZXJhbCBhbmQgcmV0dXJucyBpdHMKICAgKiB2YWx1ZS4KICAgKgogICAqIFRoZSBbc291cmNlXSBtdXN0IGJlIGEgbm9uLWVtcHR5IHNlcXVlbmNlIG9mIGJhc2UtW3JhZGl4XSBkaWdpdHMsCiAgICogb3B0aW9uYWxseSBwcmVmaXhlZCB3aXRoIGEgbWludXMgb3IgcGx1cyBzaWduICgnLScgb3IgJysnKS4KICAgKgogICAqIFRoZSBbcmFkaXhdIG11c3QgYmUgaW4gdGhlIHJhbmdlIDIuLjM2LiBUaGUgZGlnaXRzIHVzZWQgYXJlCiAgICogZmlyc3QgdGhlIGRlY2ltYWwgZGlnaXRzIDAuLjksIGFuZCB0aGVuIHRoZSBsZXR0ZXJzICdhJy4uJ3onIHdpdGgKICAgKiB2YWx1ZXMgMTAgdGhyb3VnaCAzNS4gQWxzbyBhY2NlcHRzIHVwcGVyLWNhc2UgbGV0dGVycyB3aXRoIHRoZSBzYW1lCiAgICogdmFsdWVzIGFzIHRoZSBsb3dlci1jYXNlIG9uZXMuCiAgICoKICAgKiBJZiBubyBbcmFkaXhdIGlzIGdpdmVuIHRoZW4gaXQgZGVmYXVsdHMgdG8gMTAuIEluIHRoaXMgY2FzZSwgdGhlIFtzb3VyY2VdCiAgICogZGlnaXRzIG1heSBhbHNvIHN0YXJ0IHdpdGggYDB4YCwgaW4gd2hpY2ggY2FzZSB0aGUgbnVtYmVyIGlzIGludGVycHJldGVkCiAgICogYXMgYSBoZXhhZGVjaW1hbCBsaXRlcmFsLCB3aGljaCBlZmZlY3RpdmVseSBtZWFucyB0aGF0IHRoZSBgMHhgIGlzIGlnbm9yZWQKICAgKiBhbmQgdGhlIHJhZGl4IGlzIGluc3RlYWQgc2V0IHRvIDE2LgogICAqCiAgICogRm9yIGFueSBpbnQgYG5gIGFuZCByYWRpeCBgcmAsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAogICAqIGBuID09IGludC5wYXJzZShuLnRvUmFkaXhTdHJpbmcociksIHJhZGl4OiByKWAuCiAgICoKICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiB0aGUgW3NvdXJjZV0gaXMgbm90IGEgdmFsaWQgaW50ZWdlciBsaXRlcmFsLAogICAqIG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgYSBzaWduLgogICAqLwogIHN0YXRpYyBfQmlnSW50SW1wbCBwYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSkgewogICAgdmFyIHJlc3VsdCA9IF90cnlQYXJzZShzb3VyY2UsIHJhZGl4OiByYWRpeCk7CiAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiQ291bGQgbm90IHBhcnNlIEJpZ0ludCIsIHNvdXJjZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFBhcnNlcyBhIGRlY2ltYWwgYmlnaW50IGxpdGVyYWwuCiAgLy8vCiAgLy8vIFRoZSBbc291cmNlXSBtdXN0IG5vdCBjb250YWluIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4KICBzdGF0aWMgX0JpZ0ludEltcGwgX3BhcnNlRGVjaW1hbChTdHJpbmcgc291cmNlLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIGNvbnN0IF8wID0gNDg7CgogICAgaW50IHBhcnQgPSAwOwogICAgX0JpZ0ludEltcGwgcmVzdWx0ID0gemVybzsKICAgIC8vIFJlYWQgaW4gdGhlIHNvdXJjZSA5IGRpZ2l0cyBhdCBhIHRpbWUuCiAgICAvLyBUaGUgZmlyc3QgcGFydCBtYXkgaGF2ZSBhIGZldyBsZWFkaW5nIHZpcnR1YWwgJzAncyB0byBtYWtlIHRoZSByZW1haW5pbmcKICAgIC8vIHBhcnRzIGFsbCBoYXZlIGV4YWN0bHkgOSBkaWdpdHMuCiAgICBpbnQgZGlnaXRJblBhcnRDb3VudCA9IDkgLSBzb3VyY2UubGVuZ3RoLnJlbWFpbmRlcig5KTsKICAgIGlmIChkaWdpdEluUGFydENvdW50ID09IDkpIGRpZ2l0SW5QYXJ0Q291bnQgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsKICAgICAgcGFydCA9IHBhcnQgKiAxMCArIHNvdXJjZS5jb2RlVW5pdEF0KGkpIC0gXzA7CiAgICAgIGlmICgrK2RpZ2l0SW5QYXJ0Q291bnQgPT0gOSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIF9vbmVCaWxsaW9uICsgbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHBhcnQpOwogICAgICAgIHBhcnQgPSAwOwogICAgICAgIGRpZ2l0SW5QYXJ0Q291bnQgPSAwOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNOZWdhdGl2ZSkgcmV0dXJuIC1yZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZ2l2ZW4gc291cmNlIGRpZ2l0LgogIC8vLwogIC8vLyBTb3VyY2UgZGlnaXRzIGJldHdlZW4gIjAiIGFuZCAiOSIgKGluY2x1c2l2ZSkgcmV0dXJuIHRoZWlyIGRlY2ltYWwgdmFsdWUuCiAgLy8vCiAgLy8vIFNvdXJjZSBkaWdpdHMgYmV0d2VlbiAiYSIgYW5kICJ6Iiwgb3IgIkEiIGFuZCAiWiIgKGluY2x1c2l2ZSkgcmV0dXJuCiAgLy8vIDEwICsgdGhlaXIgcG9zaXRpb24gaW4gdGhlIEFTQ0lJIGFscGhhYmV0LgogIC8vLwogIC8vLyBUaGUgaW5jb21pbmcgW2NvZGVVbml0XSBtdXN0IGJlIGFuIEFTQ0lJIGNvZGUtdW5pdC4KICBzdGF0aWMgaW50IF9jb2RlVW5pdFRvUmFkaXhWYWx1ZShpbnQgY29kZVVuaXQpIHsKICAgIC8vIFdlIGtub3cgdGhhdCB0aGUgY2hhcmFjdGVycyBtdXN0IGJlIEFTQ0lJIGFzIG90aGVyd2lzZSB0aGUKICAgIC8vIHJlZ2V4cCB3b3VsZG4ndCBoYXZlIG1hdGNoZWQuIExvd2VyY2FzaW5nIGJ5IGRvaW5nIGB8IDB4MjBgIGlzIHRodXMKICAgIC8vIGd1YXJhbnRlZWQgdG8gYmUgYSBzYWZlIG9wZXJhdGlvbiwgc2luY2UgaXQgcHJlc2VydmVzIGRpZ2l0cwogICAgLy8gYW5kIGxvd2VyLWNhc2VzIEFTQ0lJIGxldHRlcnMuCiAgICBjb25zdCBpbnQgXzAgPSA0ODsKICAgIGNvbnN0IGludCBfOSA9IDU3OwogICAgY29uc3QgaW50IF9hID0gOTc7CiAgICBpZiAoXzAgPD0gY29kZVVuaXQgJiYgY29kZVVuaXQgPD0gXzkpIHJldHVybiBjb2RlVW5pdCAtIF8wOwogICAgY29kZVVuaXQgfD0gMHgyMDsKICAgIHZhciByZXN1bHQgPSBjb2RlVW5pdCAtIF9hICsgMTA7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFBhcnNlcyB0aGUgZ2l2ZW4gW3NvdXJjZV0gc3RyaW5nLCBzdGFydGluZyBhdCBbc3RhcnRQb3NdLCBhcyBhIGhleAogIC8vLyBsaXRlcmFsLgogIC8vLwogIC8vLyBJZiBbaXNOZWdhdGl2ZV0gaXMgdHJ1ZSwgbmVnYXRlcyB0aGUgcmVzdWx0IGJlZm9yZSByZXR1cm5pbmcgaXQuCiAgLy8vCiAgLy8vIFRoZSBbc291cmNlXSAoc3Vic3RyaW5nKSBtdXN0IGJlIGEgdmFsaWQgaGV4IGxpdGVyYWwuCiAgc3RhdGljIF9CaWdJbnRJbXBsIF9wYXJzZUhleChTdHJpbmcgc291cmNlLCBpbnQgc3RhcnRQb3MsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgaW50IGhleENoYXJzUGVyRGlnaXQgPSBfZGlnaXRCaXRzIH4vIDQ7CiAgICBpbnQgc291cmNlTGVuZ3RoID0gc291cmNlLmxlbmd0aCAtIHN0YXJ0UG9zOwogICAgaW50IHVzZWQgPSAoc291cmNlTGVuZ3RoICsgaGV4Q2hhcnNQZXJEaWdpdCAtIDEpIH4vIGhleENoYXJzUGVyRGlnaXQ7CiAgICB2YXIgZGlnaXRzID0gX25ld0RpZ2l0cyh1c2VkKTsKCiAgICBpbnQgbGFzdERpZ2l0TGVuZ3RoID0gc291cmNlTGVuZ3RoIC0gKHVzZWQgLSAxKSAqIGhleENoYXJzUGVyRGlnaXQ7CiAgICBpbnQgZGlnaXRJbmRleCA9IHVzZWQgLSAxOwogICAgaW50IGkgPSBzdGFydFBvczsKICAgIGludCBkaWdpdCA9IDA7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IGxhc3REaWdpdExlbmd0aDsgaisrKSB7CiAgICAgIHZhciB2YWx1ZSA9IF9jb2RlVW5pdFRvUmFkaXhWYWx1ZShzb3VyY2UuY29kZVVuaXRBdChpKyspKTsKICAgICAgaWYgKHZhbHVlID49IDE2KSByZXR1cm4gbnVsbDsKICAgICAgZGlnaXQgPSBkaWdpdCAqIDE2ICsgdmFsdWU7CiAgICB9CiAgICBkaWdpdHNbZGlnaXRJbmRleC0tXSA9IGRpZ2l0OwoKICAgIHdoaWxlIChpIDwgc291cmNlLmxlbmd0aCkgewogICAgICBkaWdpdCA9IDA7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaGV4Q2hhcnNQZXJEaWdpdDsgaisrKSB7CiAgICAgICAgdmFyIHZhbHVlID0gX2NvZGVVbml0VG9SYWRpeFZhbHVlKHNvdXJjZS5jb2RlVW5pdEF0KGkrKykpOwogICAgICAgIGlmICh2YWx1ZSA+PSAxNikgcmV0dXJuIG51bGw7CiAgICAgICAgZGlnaXQgPSBkaWdpdCAqIDE2ICsgdmFsdWU7CiAgICAgIH0KICAgICAgZGlnaXRzW2RpZ2l0SW5kZXgtLV0gPSBkaWdpdDsKICAgIH0KICAgIGlmICh1c2VkID09IDEgJiYgZGlnaXRzWzBdID09IDApIHJldHVybiB6ZXJvOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHVzZWQsIGRpZ2l0cyk7CiAgfQoKICAvLy8gUGFyc2VzIHRoZSBnaXZlbiBbc291cmNlXSBhcyBhIFtyYWRpeF0gbGl0ZXJhbC4KICAvLy8KICAvLy8gVGhlIFtzb3VyY2VdIHdpbGwgYmUgY2hlY2tlZCBmb3IgaW52YWxpZCBjaGFyYWN0ZXJzLiBJZiBpdCBpcyBpbnZhbGlkLAogIC8vLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgLgogIHN0YXRpYyBfQmlnSW50SW1wbCBfcGFyc2VSYWRpeChTdHJpbmcgc291cmNlLCBpbnQgcmFkaXgsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgdmFyIHJlc3VsdCA9IHplcm87CiAgICB2YXIgYmFzZSA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludChyYWRpeCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgdmFsdWUgPSBfY29kZVVuaXRUb1JhZGl4VmFsdWUoc291cmNlLmNvZGVVbml0QXQoaSkpOwogICAgICBpZiAodmFsdWUgPj0gcmFkaXgpIHJldHVybiBudWxsOwogICAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHZhbHVlKTsKICAgIH0KICAgIGlmIChpc05lZ2F0aXZlKSByZXR1cm4gLXJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gVHJpZXMgdG8gcGFyc2UgdGhlIGdpdmVuIFtzb3VyY2VdIGFzIGEgW3JhZGl4XSBsaXRlcmFsLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBwYXJzZWQgYmlnIGludGVnZXIsIG9yIGBudWxsYCBpZiBpdCBmYWlsZWQuCiAgLy8vCiAgLy8vIElmIHRoZSBbcmFkaXhdIGlzIGBudWxsYCBhY2NlcHRzIGRlY2ltYWwgbGl0ZXJhbHMgb3IgYDB4YCBoZXggbGl0ZXJhbHMuCiAgc3RhdGljIF9CaWdJbnRJbXBsIF90cnlQYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSkgewogICAgaWYgKHNvdXJjZSA9PSAiIikgcmV0dXJuIG51bGw7CgogICAgdmFyIHJlID0gbmV3IFJlZ0V4cChyJ15ccyooWystXT8pKCgweFthLWYwLTldKyl8KFxkKyl8KFthLXowLTldKykpXHMqJCcsCiAgICAgICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UpOwogICAgdmFyIG1hdGNoID0gcmUuZmlyc3RNYXRjaChzb3VyY2UpOwogICAgaW50IHNpZ25JbmRleCA9IDE7CiAgICBpbnQgaGV4SW5kZXggPSAzOwogICAgaW50IGRlY2ltYWxJbmRleCA9IDQ7CiAgICBpbnQgbm9uRGVjaW1hbEhleEluZGV4ID0gNTsKICAgIGlmIChtYXRjaCA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICBib29sIGlzTmVnYXRpdmUgPSBtYXRjaFtzaWduSW5kZXhdID09ICItIjsKCiAgICBTdHJpbmcgZGVjaW1hbE1hdGNoID0gbWF0Y2hbZGVjaW1hbEluZGV4XTsKICAgIFN0cmluZyBoZXhNYXRjaCA9IG1hdGNoW2hleEluZGV4XTsKICAgIFN0cmluZyBub25EZWNpbWFsTWF0Y2ggPSBtYXRjaFtub25EZWNpbWFsSGV4SW5kZXhdOwoKICAgIGlmIChyYWRpeCA9PSBudWxsKSB7CiAgICAgIGlmIChkZWNpbWFsTWF0Y2ggIT0gbnVsbCkgewogICAgICAgIC8vIENhbm5vdCBmYWlsIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBkaWdpdHMgYXJlIGFsbCBkZWNpbWFsLgogICAgICAgIHJldHVybiBfcGFyc2VEZWNpbWFsKGRlY2ltYWxNYXRjaCwgaXNOZWdhdGl2ZSk7CiAgICAgIH0KICAgICAgaWYgKGhleE1hdGNoICE9IG51bGwpIHsKICAgICAgICAvLyBDYW5ub3QgZmFpbCBiZWNhdXNlIHdlIGtub3cgdGhhdCB0aGUgZGlnaXRzIGFyZSBhbGwgaGV4LgogICAgICAgIHJldHVybiBfcGFyc2VIZXgoaGV4TWF0Y2gsIDIsIGlzTmVnYXRpdmUpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmIChyYWRpeCBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKHJhZGl4LCAncmFkaXgnLCAnaXMgbm90IGFuIGludGVnZXInKTsKICAgIH0KICAgIGlmIChyYWRpeCA8IDIgfHwgcmFkaXggPiAzNikgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShyYWRpeCwgMiwgMzYsICdyYWRpeCcpOwogICAgfQogICAgaWYgKHJhZGl4ID09IDEwICYmIGRlY2ltYWxNYXRjaCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfcGFyc2VEZWNpbWFsKGRlY2ltYWxNYXRjaCwgaXNOZWdhdGl2ZSk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gMTYgJiYgKGRlY2ltYWxNYXRjaCAhPSBudWxsIHx8IG5vbkRlY2ltYWxNYXRjaCAhPSBudWxsKSkgewogICAgICByZXR1cm4gX3BhcnNlSGV4KGRlY2ltYWxNYXRjaCA/PyBub25EZWNpbWFsTWF0Y2gsIDAsIGlzTmVnYXRpdmUpOwogICAgfQoKICAgIHJldHVybiBfcGFyc2VSYWRpeCgKICAgICAgICBkZWNpbWFsTWF0Y2ggPz8gbm9uRGVjaW1hbE1hdGNoID8/IGhleE1hdGNoLCByYWRpeCwgaXNOZWdhdGl2ZSk7CiAgfQoKICAvLy8gRmluZHMgdGhlIGFtb3VudCBzaWduaWZpY2FudCBkaWdpdHMgaW4gdGhlIHByb3ZpZGVkIFtkaWdpdHNdIGFycmF5LgogIHN0YXRpYyBpbnQgX25vcm1hbGl6ZShpbnQgdXNlZCwgVWludDMyTGlzdCBkaWdpdHMpIHsKICAgIHdoaWxlICh1c2VkID4gMCAmJiBkaWdpdHNbdXNlZCAtIDFdID09IDApIHVzZWQtLTsKICAgIHJldHVybiB1c2VkOwogIH0KCiAgLy8vIEZhY3RvcnkgcmV0dXJuaW5nIGFuIGluc3RhbmNlIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIGZpZWxkIHZhbHVlcy4KICAvLy8gSWYgdGhlIFtkaWdpdHNdIGFycmF5IGNvbnRhaW5zIGxlYWRpbmcgMHMsIHRoZSBbdXNlZF0gdmFsdWUgaXMgYWRqdXN0ZWQKICAvLy8gYWNjb3JkaW5nbHkuIFRoZSBbZGlnaXRzXSBhcnJheSBpcyBub3QgbW9kaWZpZWQuCiAgX0JpZ0ludEltcGwuXyhib29sIGlzTmVnYXRpdmUsIGludCB1c2VkLCBVaW50MzJMaXN0IGRpZ2l0cykKICAgICAgOiB0aGlzLl9ub3JtYWxpemVkKGlzTmVnYXRpdmUsIF9ub3JtYWxpemUodXNlZCwgZGlnaXRzKSwgZGlnaXRzKTsKCiAgX0JpZ0ludEltcGwuX25vcm1hbGl6ZWQoYm9vbCBpc05lZ2F0aXZlLCB0aGlzLl91c2VkLCB0aGlzLl9kaWdpdHMpCiAgICAgIDogX2lzTmVnYXRpdmUgPSBfdXNlZCA9PSAwID8gZmFsc2UgOiBpc05lZ2F0aXZlIHsKICAgIGFzc2VydChfZGlnaXRzLmxlbmd0aC5pc0V2ZW4pOwogICAgYXNzZXJ0KF91c2VkLmlzRXZlbiB8fCBfZGlnaXRzW191c2VkXSA9PSAwKTsgLy8gTGVhZGluZyB6ZXJvIGZvciA2NC1iaXQuCiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGJpZyBpbnRlZ2VyIGlzIHplcm8uCiAgYm9vbCBnZXQgX2lzWmVybyA9PiBfdXNlZCA9PSAwOwoKICAvLy8gQWxsb2NhdGVzIGFuIGFycmF5IG9mIHRoZSBnaXZlbiBbbGVuZ3RoXSBhbmQgY29waWVzIHRoZSBbZGlnaXRzXSBpbiB0aGUKICAvLy8gcmFuZ2UgW2Zyb21dIHRvIFt0by0xXSwgc3RhcnRpbmcgYXQgaW5kZXggMCwgZm9sbG93ZWQgYnkgbGVhZGluZyB6ZXJvCiAgLy8vIGRpZ2l0cy4KICBzdGF0aWMgVWludDMyTGlzdCBfY2xvbmVEaWdpdHMoCiAgICAgIFVpbnQzMkxpc3QgZGlnaXRzLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgbGVuZ3RoKSB7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhsZW5ndGgpOwogICAgdmFyIG4gPSB0byAtIGZyb207CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbZnJvbSArIGldOwogICAgfQogICAgcmV0dXJuIHJlc3VsdERpZ2l0czsKICB9CgogIC8vLyBBbGxvY2F0ZXMgYSBiaWcgaW50ZWdlciBmcm9tIHRoZSBwcm92aWRlZCBbdmFsdWVdIG51bWJlci4KICBmYWN0b3J5IF9CaWdJbnRJbXBsLmZyb20obnVtIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuIHplcm87CiAgICBpZiAodmFsdWUgPT0gMSkgcmV0dXJuIG9uZTsKICAgIGlmICh2YWx1ZSA9PSAyKSByZXR1cm4gdHdvOwoKICAgIGlmICh2YWx1ZS5hYnMoKSA8IDB4MTAwMDAwMDAwKQogICAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHZhbHVlLnRvSW50KCkpOwogICAgaWYgKHZhbHVlIGlzIGRvdWJsZSkgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fZnJvbURvdWJsZSh2YWx1ZSk7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHZhbHVlKTsKICB9CgogIGZhY3RvcnkgX0JpZ0ludEltcGwuX2Zyb21JbnQoaW50IHZhbHVlKSB7CiAgICBib29sIGlzTmVnYXRpdmUgPSB2YWx1ZSA8IDA7CiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICB2YXIgZGlnaXRzID0gX25ld0RpZ2l0cygyKTsKICAgIGlmIChpc05lZ2F0aXZlKSB7CiAgICAgIC8vIEhhbmRsZSB0aGUgbWluIDY0LWJpdCB2YWx1ZSBkaWZmZXJlbnRseSwgc2luY2UgaXRzIG5lZ2F0aW9uIGlzIG5vdAogICAgICAvLyBwb3NpdGl2ZS4KICAgICAgaWYgKHZhbHVlID09IF9taW5JbnQpIHsKICAgICAgICBkaWdpdHNbMV0gPSAweDgwMDAwMDAwOwogICAgICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyh0cnVlLCAyLCBkaWdpdHMpOwogICAgICB9CiAgICAgIHZhbHVlID0gLXZhbHVlOwogICAgfQogICAgaWYgKHZhbHVlIDwgX2RpZ2l0QmFzZSkgewogICAgICBkaWdpdHNbMF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIDEsIGRpZ2l0cyk7CiAgICB9CiAgICBkaWdpdHNbMF0gPSB2YWx1ZSAmIF9kaWdpdE1hc2s7CiAgICBkaWdpdHNbMV0gPSB2YWx1ZSA+PiBfZGlnaXRCaXRzOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIDIsIGRpZ2l0cyk7CiAgfQoKICAvLy8gQW4gOC1ieXRlIFVpbnQ4TGlzdCB3ZSBjYW4gcmV1c2UgZm9yIFtfZnJvbURvdWJsZV0gdG8gYXZvaWQgZ2VuZXJhdGluZwogIC8vLyBnYXJiYWdlLgogIHN0YXRpYyBmaW5hbCBVaW50OExpc3QgX2JpdHNGb3JGcm9tRG91YmxlID0gbmV3IFVpbnQ4TGlzdCg4KTsKCiAgZmFjdG9yeSBfQmlnSW50SW1wbC5fZnJvbURvdWJsZShkb3VibGUgdmFsdWUpIHsKICAgIGNvbnN0IGludCBleHBvbmVudEJpYXMgPSAxMDc1OwoKICAgIGlmICh2YWx1ZS5pc05hTiB8fCB2YWx1ZS5pc0luZmluaXRlKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJWYWx1ZSBtdXN0IGJlIGZpbml0ZTogJHZhbHVlIik7CiAgICB9CiAgICBib29sIGlzTmVnYXRpdmUgPSB2YWx1ZSA8IDA7CiAgICBpZiAoaXNOZWdhdGl2ZSkgdmFsdWUgPSAtdmFsdWU7CgogICAgdmFsdWUgPSB2YWx1ZS5mbG9vclRvRG91YmxlKCk7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuIHplcm87CgogICAgdmFyIGJpdHMgPSBfYml0c0ZvckZyb21Eb3VibGU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewogICAgICBiaXRzW2ldID0gMDsKICAgIH0KICAgIGJpdHMuYnVmZmVyLmFzQnl0ZURhdGEoKS5zZXRGbG9hdDY0KDAsIHZhbHVlLCBFbmRpYW4ubGl0dGxlKTsKICAgIC8vIFRoZSBleHBvbmVudCBpcyBpbiBiaXRzIDUzLi42My4KICAgIHZhciBiaWFzZWRFeHBvbmVudCA9IChiaXRzWzddIDw8IDQpICsgKGJpdHNbNl0gPj4gNCk7CiAgICB2YXIgZXhwb25lbnQgPSBiaWFzZWRFeHBvbmVudCAtIGV4cG9uZW50QmlhczsKCiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICAvLyBUaGUgc2lnbmlmaWNhbnQgYml0cyBhcmUgaW4gMCAuLiA1Mi4KICAgIHZhciB1bnNoaWZ0ZWREaWdpdHMgPSBfbmV3RGlnaXRzKDIpOwogICAgdW5zaGlmdGVkRGlnaXRzWzBdID0KICAgICAgICAoYml0c1szXSA8PCAyNCkgKyAoYml0c1syXSA8PCAxNikgKyAoYml0c1sxXSA8PCA4KSArIGJpdHNbMF07CiAgICAvLyBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBoaWRkZW4gYml0LgogICAgdW5zaGlmdGVkRGlnaXRzWzFdID0KICAgICAgICAoKDB4MTAgfCAoYml0c1s2XSAmIDB4RikpIDw8IDE2KSArIChiaXRzWzVdIDw8IDgpICsgYml0c1s0XTsKCiAgICB2YXIgdW5zaGlmdGVkQmlnID0gbmV3IF9CaWdJbnRJbXBsLl9ub3JtYWxpemVkKGZhbHNlLCAyLCB1bnNoaWZ0ZWREaWdpdHMpOwogICAgX0JpZ0ludEltcGwgYWJzUmVzdWx0ID0gdW5zaGlmdGVkQmlnOwogICAgaWYgKGV4cG9uZW50IDwgMCkgewogICAgICBhYnNSZXN1bHQgPSB1bnNoaWZ0ZWRCaWcgPj4gLWV4cG9uZW50OwogICAgfSBlbHNlIGlmIChleHBvbmVudCA+IDApIHsKICAgICAgYWJzUmVzdWx0ID0gdW5zaGlmdGVkQmlnIDw8IGV4cG9uZW50OwogICAgfQogICAgaWYgKGlzTmVnYXRpdmUpIHJldHVybiAtYWJzUmVzdWx0OwogICAgcmV0dXJuIGFic1Jlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybiB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJlc3VsdCBvZiBuZWdhdGluZyBhbiBpbnRlZ2VyIGFsd2F5cyBoYXMgdGhlIG9wcG9zaXRlIHNpZ24sIGV4Y2VwdAogICAqIGZvciB6ZXJvLCB3aGljaCBpcyBpdHMgb3duIG5lZ2F0aW9uLgogICAqLwogIF9CaWdJbnRJbXBsIG9wZXJhdG9yIC0oKSB7CiAgICBpZiAoX3VzZWQgPT0gMCkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oIV9pc05lZ2F0aXZlLCBfdXNlZCwgX2RpZ2l0cyk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBGb3IgYW55IGludGVnZXIgYHhgLCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGB4IDwgMCA/IC14IDogeGAuCiAgICovCiAgX0JpZ0ludEltcGwgYWJzKCkgPT4gX2lzTmVnYXRpdmUgPyAtdGhpcyA6IHRoaXM7CgogIC8vLyBSZXR1cm5zIHRoaXMgPDwgbipfZGlnaXRCaXRzLgogIF9CaWdJbnRJbXBsIF9kbFNoaWZ0KGludCBuKSB7CiAgICBmaW5hbCB1c2VkID0gX3VzZWQ7CiAgICBpZiAodXNlZCA9PSAwKSB7CiAgICAgIHJldHVybiB6ZXJvOwogICAgfQogICAgZmluYWwgcmVzdWx0VXNlZCA9IHVzZWQgKyBuOwogICAgZmluYWwgZGlnaXRzID0gX2RpZ2l0czsKICAgIGZpbmFsIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICBmb3IgKGludCBpID0gdXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpICsgbl0gPSBkaWdpdHNbaV07CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oX2lzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gU2FtZSBhcyBbX2RsU2hpZnRdIGJ1dCB3b3JrcyBvbiB0aGUgZGVjb21wb3NlZCBiaWcgaW50ZWdlcnMuCiAgLy8vCiAgLy8vIFJldHVybnMgYHJlc3VsdFVzZWRgLgogIC8vLwogIC8vLyBgcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPSB4RGlnaXRzWzAuLnhVc2VkLTFdIDw8IG4qX2RpZ2l0Qml0c2AuCiAgc3RhdGljIGludCBfZGxTaGlmdERpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgaWYgKHhVc2VkID09IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAobiA9PSAwICYmIGlkZW50aWNhbChyZXN1bHREaWdpdHMsIHhEaWdpdHMpKSB7CiAgICAgIHJldHVybiB4VXNlZDsKICAgIH0KICAgIGZpbmFsIHJlc3VsdFVzZWQgPSB4VXNlZCArIG47CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKSk7CiAgICBmb3IgKGludCBpID0geFVzZWQgLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXN1bHREaWdpdHNbaSArIG5dID0geERpZ2l0c1tpXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gMDsKICAgIH0KICAgIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vLyBSZXR1cm5zIGB0aGlzID4+IG4qX2RpZ2l0Qml0c2AuCiAgX0JpZ0ludEltcGwgX2RyU2hpZnQoaW50IG4pIHsKICAgIGZpbmFsIHVzZWQgPSBfdXNlZDsKICAgIGlmICh1c2VkID09IDApIHsKICAgICAgcmV0dXJuIHplcm87CiAgICB9CiAgICBmaW5hbCByZXN1bHRVc2VkID0gdXNlZCAtIG47CiAgICBpZiAocmVzdWx0VXNlZCA8PSAwKSB7CiAgICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IF9taW51c09uZSA6IHplcm87CiAgICB9CiAgICBmaW5hbCBkaWdpdHMgPSBfZGlnaXRzOwogICAgZmluYWwgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIGZvciAodmFyIGkgPSBuOyBpIDwgdXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpIC0gbl0gPSBkaWdpdHNbaV07CiAgICB9CiAgICBmaW5hbCByZXN1bHQgPSBuZXcgX0JpZ0ludEltcGwuXyhfaXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICAvLyBSb3VuZCBkb3duIGlmIGFueSBiaXQgd2FzIHNoaWZ0ZWQgb3V0LgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGlmIChkaWdpdHNbaV0gIT0gMCkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdCAtIG9uZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gU2FtZSBhcyBbX2RyU2hpZnRdIGJ1dCB3b3JrcyBvbiB0aGUgZGVjb21wb3NlZCBiaWcgaW50ZWdlcnMuCiAgLy8vCiAgLy8vIFJldHVybnMgYHJlc3VsdFVzZWRgLgogIC8vLwogIC8vLyBgcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPSB4RGlnaXRzWzAuLnhVc2VkLTFdID4+IG4qX2RpZ2l0Qml0c2AuCiAgc3RhdGljIGludCBfZHJTaGlmdERpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgZmluYWwgcmVzdWx0VXNlZCA9IHhVc2VkIC0gbjsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKSk7CiAgICBmb3IgKHZhciBpID0gbjsgaSA8IHhVc2VkOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2kgLSBuXSA9IHhEaWdpdHNbaV07CiAgICB9CiAgICBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOwogICAgfQogICAgcmV0dXJuIHJlc3VsdFVzZWQ7CiAgfQoKICAvLy8gU2hpZnRzIHRoZSBkaWdpdHMgb2YgW3hEaWdpdHNdIGludG8gdGhlIHJpZ2h0IHBsYWNlIGluIFtyZXN1bHREaWdpdHNdLgogIC8vLwogIC8vLyBgcmVzdWx0RGlnaXRzW2RzLi54VXNlZCtkc10gPSB4RGlnaXRzWzAuLnhVc2VkLTFdIDw8IChuICUgX2RpZ2l0Qml0cylgCiAgLy8vICAgd2hlcmUgYGRzID0gbiB+LyBfZGlnaXRCaXRzYAogIC8vLwogIC8vLyBEb2VzICpub3QqIGNsZWFyIGRpZ2l0cyBiZWxvdyBkcy4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX2xzaCgKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgYXNzZXJ0KHhVc2VkID4gMCk7CiAgICBmaW5hbCBkaWdpdFNoaWZ0ID0gbiB+LyBfZGlnaXRCaXRzOwogICAgZmluYWwgYml0U2hpZnQgPSBuICUgX2RpZ2l0Qml0czsKICAgIGZpbmFsIGNhcnJ5Qml0U2hpZnQgPSBfZGlnaXRCaXRzIC0gYml0U2hpZnQ7CiAgICBmaW5hbCBiaXRNYXNrID0gKDEgPDwgY2FycnlCaXRTaGlmdCkgLSAxOwogICAgdmFyIGNhcnJ5ID0gMDsKICAgIGZvciAoaW50IGkgPSB4VXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGZpbmFsIGRpZ2l0ID0geERpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2kgKyBkaWdpdFNoaWZ0ICsgMV0gPSAoZGlnaXQgPj4gY2FycnlCaXRTaGlmdCkgfCBjYXJyeTsKICAgICAgY2FycnkgPSAoZGlnaXQgJiBiaXRNYXNrKSA8PCBiaXRTaGlmdDsKICAgIH0KICAgIHJlc3VsdERpZ2l0c1tkaWdpdFNoaWZ0XSA9IGNhcnJ5OwogIH0KCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSBsZWZ0IGJ5IFtzaGlmdEFtb3VudF0uCiAgICoKICAgKiBTaGlmdGluZyB0byB0aGUgbGVmdCBtYWtlcyB0aGUgbnVtYmVyIGxhcmdlciwgZWZmZWN0aXZlbHkgbXVsdGlwbHlpbmcKICAgKiB0aGUgbnVtYmVyIGJ5IGBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogVGhlcmUgaXMgbm8gbGltaXQgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdC4gSXQgbWF5IGJlIHJlbGV2YW50IHRvCiAgICogbGltaXQgaW50ZXJtZWRpYXRlIHZhbHVlcyBieSB1c2luZyB0aGUgImFuZCIgb3BlcmF0b3Igd2l0aCBhIHN1aXRhYmxlCiAgICogbWFzay4KICAgKgogICAqIEl0IGlzIGFuIGVycm9yIGlmIFtzaGlmdEFtb3VudF0gaXMgbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgPDwoaW50IHNoaWZ0QW1vdW50KSB7CiAgICBpZiAoc2hpZnRBbW91bnQgPCAwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJzaGlmdC1hbW91bnQgbXVzdCBiZSBwb3NpdGl2ZSAkc2hpZnRBbW91bnQiKTsKICAgIH0KICAgIGlmIChfaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGZpbmFsIGRpZ2l0U2hpZnQgPSBzaGlmdEFtb3VudCB+LyBfZGlnaXRCaXRzOwogICAgZmluYWwgYml0U2hpZnQgPSBzaGlmdEFtb3VudCAlIF9kaWdpdEJpdHM7CiAgICBpZiAoYml0U2hpZnQgPT0gMCkgewogICAgICByZXR1cm4gX2RsU2hpZnQoZGlnaXRTaGlmdCk7CiAgICB9CiAgICAvLyBOZWVkIG9uZSBleHRyYSBkaWdpdCB0byBob2xkIGJpdHMgc2hpZnRlZCBieSBiaXRTaGlmdC4KICAgIHZhciByZXN1bHRVc2VkID0gX3VzZWQgKyBkaWdpdFNoaWZ0ICsgMTsKICAgIC8vIFRoZSA2NC1iaXQgaW50cmluc2ljIHJlcXVpcmVzIG9uZSBleHRyYSBwYWlyIHRvIHdvcmsgd2l0aC4KICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQgKyAxKTsKICAgIF9sc2goX2RpZ2l0cywgX3VzZWQsIHNoaWZ0QW1vdW50LCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKF9pc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi5yZXN1bHRVc2VkLTFdID0geERpZ2l0c1swLi54VXNlZC0xXSA8PCBuLgogIC8vLyBSZXR1cm5zIHJlc3VsdFVzZWQuCiAgc3RhdGljIGludCBfbFNoaWZ0RGlnaXRzKAogICAgICBVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgaW50IG4sIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBmaW5hbCBkaWdpdHNTaGlmdCA9IG4gfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gbiAlIF9kaWdpdEJpdHM7CiAgICBpZiAoYml0U2hpZnQgPT0gMCkgewogICAgICByZXR1cm4gX2RsU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIGRpZ2l0c1NoaWZ0LCByZXN1bHREaWdpdHMpOwogICAgfQogICAgLy8gTmVlZCBvbmUgZXh0cmEgZGlnaXQgdG8gaG9sZCBiaXRzIHNoaWZ0ZWQgYnkgYml0U2hpZnQuCiAgICB2YXIgcmVzdWx0VXNlZCA9IHhVc2VkICsgZGlnaXRzU2hpZnQgKyAxOwogICAgLy8gVGhlIDY0LWJpdCBpbnRyaW5zaWMgcmVxdWlyZXMgb25lIGV4dHJhIHBhaXIgdG8gd29yayB3aXRoLgogICAgYXNzZXJ0KHJlc3VsdERpZ2l0cy5sZW5ndGggPj0gcmVzdWx0VXNlZCArIDIgLSAocmVzdWx0VXNlZCAmIDEpKTsKICAgIF9sc2goeERpZ2l0cywgeFVzZWQsIG4sIHJlc3VsdERpZ2l0cyk7CiAgICB2YXIgaSA9IGRpZ2l0c1NoaWZ0OwogICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IDA7CiAgICB9CiAgICBpZiAocmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWQgLSAxXSA9PSAwKSB7CiAgICAgIHJlc3VsdFVzZWQtLTsgLy8gQ2xhbXAgcmVzdWx0LgogICAgfSBlbHNlIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vLyByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV0gPj4gbi4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX3JzaCgKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgYXNzZXJ0KHhVc2VkID4gMCk7CiAgICBmaW5hbCBkaWdpdHNTaGlmdCA9IG4gfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gbiAlIF9kaWdpdEJpdHM7CiAgICBmaW5hbCBjYXJyeUJpdFNoaWZ0ID0gX2RpZ2l0Qml0cyAtIGJpdFNoaWZ0OwogICAgZmluYWwgYml0TWFzayA9ICgxIDw8IGJpdFNoaWZ0KSAtIDE7CiAgICB2YXIgY2FycnkgPSB4RGlnaXRzW2RpZ2l0c1NoaWZ0XSA+PiBiaXRTaGlmdDsKICAgIGZpbmFsIGxhc3QgPSB4VXNlZCAtIGRpZ2l0c1NoaWZ0IC0gMTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CiAgICAgIGZpbmFsIGRpZ2l0ID0geERpZ2l0c1tpICsgZGlnaXRzU2hpZnQgKyAxXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gKChkaWdpdCAmIGJpdE1hc2spIDw8IGNhcnJ5Qml0U2hpZnQpIHwgY2Fycnk7CiAgICAgIGNhcnJ5ID0gZGlnaXQgPj4gYml0U2hpZnQ7CiAgICB9CiAgICByZXN1bHREaWdpdHNbbGFzdF0gPSBjYXJyeTsKICB9CgogIC8qKgogICAqIFNoaWZ0IHRoZSBiaXRzIG9mIHRoaXMgaW50ZWdlciB0byB0aGUgcmlnaHQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSByaWdodCBtYWtlcyB0aGUgbnVtYmVyIHNtYWxsZXIgYW5kIGRyb3BzIHRoZSBsZWFzdAogICAqIHNpZ25pZmljYW50IGJpdHMsIGVmZmVjdGl2ZWx5IGRvaW5nIGFuIGludGVnZXIgZGl2aXNpb24gYnkKICAgKmBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciA+PihpbnQgc2hpZnRBbW91bnQpIHsKICAgIGlmIChzaGlmdEFtb3VudCA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoInNoaWZ0LWFtb3VudCBtdXN0IGJlIHBvc2l0aXZlICRzaGlmdEFtb3VudCIpOwogICAgfQogICAgaWYgKF9pc1plcm8pIHJldHVybiB0aGlzOwogICAgZmluYWwgZGlnaXRTaGlmdCA9IHNoaWZ0QW1vdW50IH4vIF9kaWdpdEJpdHM7CiAgICBmaW5hbCBiaXRTaGlmdCA9IHNoaWZ0QW1vdW50ICUgX2RpZ2l0Qml0czsKICAgIGlmIChiaXRTaGlmdCA9PSAwKSB7CiAgICAgIHJldHVybiBfZHJTaGlmdChkaWdpdFNoaWZ0KTsKICAgIH0KICAgIGZpbmFsIHVzZWQgPSBfdXNlZDsKICAgIGZpbmFsIHJlc3VsdFVzZWQgPSB1c2VkIC0gZGlnaXRTaGlmdDsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gX21pbnVzT25lIDogemVybzsKICAgIH0KICAgIGZpbmFsIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICBmaW5hbCByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgX3JzaChkaWdpdHMsIHVzZWQsIHNoaWZ0QW1vdW50LCByZXN1bHREaWdpdHMpOwogICAgZmluYWwgcmVzdWx0ID0gbmV3IF9CaWdJbnRJbXBsLl8oX2lzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgLy8gUm91bmQgZG93biBpZiBhbnkgYml0IHdhcyBzaGlmdGVkIG91dC4KICAgICAgaWYgKChkaWdpdHNbZGlnaXRTaGlmdF0gJiAoKDEgPDwgYml0U2hpZnQpIC0gMSkpICE9IDApIHsKICAgICAgICByZXR1cm4gcmVzdWx0IC0gb25lOwogICAgICB9CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlnaXRTaGlmdDsgaSsrKSB7CiAgICAgICAgaWYgKGRpZ2l0c1tpXSAhPSAwKSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0IC0gb25lOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV0gPj4gbi4KICAvLy8gUmV0dXJucyByZXN1bHRVc2VkLgogIHN0YXRpYyBpbnQgX3JTaGlmdERpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgZmluYWwgZGlnaXRTaGlmdCA9IG4gfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gbiAlIF9kaWdpdEJpdHM7CiAgICBpZiAoYml0U2hpZnQgPT0gMCkgewogICAgICByZXR1cm4gX2RyU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIGRpZ2l0U2hpZnQsIHJlc3VsdERpZ2l0cyk7CiAgICB9CiAgICB2YXIgcmVzdWx0VXNlZCA9IHhVc2VkIC0gZGlnaXRTaGlmdDsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKSk7CiAgICBfcnNoKHhEaWdpdHMsIHhVc2VkLCBuLCByZXN1bHREaWdpdHMpOwogICAgaWYgKHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkIC0gMV0gPT0gMCkgewogICAgICByZXN1bHRVc2VkLS07IC8vIENsYW1wIHJlc3VsdC4KICAgIH0gZWxzZSBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOwogICAgfQogICAgcmV0dXJuIHJlc3VsdFVzZWQ7CiAgfQoKICAvLy8gQ29tcGFyZXMgdGhpcyB0byBbb3RoZXJdIHRha2luZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYm90aCBvcGVyYW5kcy4KICAvLy8KICAvLy8gUmV0dXJucyAwIGlmIGFicyh0aGlzKSA9PSBhYnMob3RoZXIpOyBhIHBvc2l0aXZlIG51bWJlciBpZgogIC8vLyBhYnModGhpcykgPiBhYnMob3RoZXIpOyBhbmQgYSBuZWdhdGl2ZSBudW1iZXIgaWYgYWJzKHRoaXMpIDwgYWJzKG90aGVyKS4KICBpbnQgX2Fic0NvbXBhcmUoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICByZXR1cm4gX2NvbXBhcmVEaWdpdHMoX2RpZ2l0cywgX3VzZWQsIG90aGVyLl9kaWdpdHMsIG90aGVyLl91c2VkKTsKICB9CgogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgdG8gYG90aGVyYC4KICAgKgogICAqIFJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgaWYgYHRoaXNgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLCB6ZXJvIGlmIHRoZXkgYXJlCiAgICogZXF1YWwsIGFuZCBhIHBvc2l0aXZlIG51bWJlciBpZiBgdGhpc2AgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAuCiAgICovCiAgaW50IGNvbXBhcmVUbyhCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNOZWdhdGl2ZSA9PSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICB2YXIgcmVzdWx0ID0gX2Fic0NvbXBhcmUob3RoZXIpOwogICAgICAvLyBVc2UgMCAtIHJlc3VsdCB0byBhdm9pZCBuZWdhdGl2ZSB6ZXJvIGluIEphdmFTY3JpcHQuCiAgICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IDAgLSByZXN1bHQgOiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2lzTmVnYXRpdmUgPyAtMSA6IDE7CiAgfQoKICAvLy8gQ29tcGFyZXMgYGRpZ2l0c1swLi51c2VkLTFdYCB3aXRoIGBvdGhlckRpZ2l0c1swLi5vdGhlclVzZWQtMV1gLgogIC8vLwogIC8vLyBSZXR1cm5zIDAgaWYgZXF1YWw7IGEgcG9zaXRpdmUgbnVtYmVyIGlmIGxhcmdlcjsKICAvLy8gYW5kIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHNtYWxsZXIuCiAgc3RhdGljIGludCBfY29tcGFyZURpZ2l0cygKICAgICAgVWludDMyTGlzdCBkaWdpdHMsIGludCB1c2VkLCBVaW50MzJMaXN0IG90aGVyRGlnaXRzLCBpbnQgb3RoZXJVc2VkKSB7CiAgICB2YXIgcmVzdWx0ID0gdXNlZCAtIG90aGVyVXNlZDsKICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICBmb3IgKGludCBpID0gdXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgcmVzdWx0ID0gZGlnaXRzW2ldIC0gb3RoZXJEaWdpdHNbaV07CiAgICAgICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi51c2VkXSA9IGRpZ2l0c1swLi51c2VkLTFdICsgb3RoZXJEaWdpdHNbMC4ub3RoZXJVc2VkLTFdLgogIC8vLyB1c2VkID49IG90aGVyVXNlZCA+IDAuCiAgLy8vCiAgLy8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludHJpbnNpZmllZC4KICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIHN0YXRpYyB2b2lkIF9hYnNBZGQoVWludDMyTGlzdCBkaWdpdHMsIGludCB1c2VkLCBVaW50MzJMaXN0IG90aGVyRGlnaXRzLAogICAgICBpbnQgb3RoZXJVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgYXNzZXJ0KHVzZWQgPj0gb3RoZXJVc2VkICYmIG90aGVyVXNlZCA+IDApOwogICAgdmFyIGNhcnJ5ID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3RoZXJVc2VkOyBpKyspIHsKICAgICAgY2FycnkgKz0gZGlnaXRzW2ldICsgb3RoZXJEaWdpdHNbaV07CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGNhcnJ5ICYgX2RpZ2l0TWFzazsKICAgICAgY2FycnkgPj49IF9kaWdpdEJpdHM7CiAgICB9CiAgICBmb3IgKHZhciBpID0gb3RoZXJVc2VkOyBpIDwgdXNlZDsgaSsrKSB7CiAgICAgIGNhcnJ5ICs9IGRpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gY2FycnkgJiBfZGlnaXRNYXNrOwogICAgICBjYXJyeSA+Pj0gX2RpZ2l0Qml0czsKICAgIH0KICAgIHJlc3VsdERpZ2l0c1t1c2VkXSA9IGNhcnJ5OwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi51c2VkLTFdID0gZGlnaXRzWzAuLnVzZWQtMV0gLSBvdGhlckRpZ2l0c1swLi5vdGhlclVzZWQtMV0uCiAgLy8vIHVzZWQgPj0gb3RoZXJVc2VkID4gMC4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX2Fic1N1YihVaW50MzJMaXN0IGRpZ2l0cywgaW50IHVzZWQsIFVpbnQzMkxpc3Qgb3RoZXJEaWdpdHMsCiAgICAgIGludCBvdGhlclVzZWQsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBhc3NlcnQodXNlZCA+PSBvdGhlclVzZWQgJiYgb3RoZXJVc2VkID4gMCk7CiAgICB2YXIgY2FycnkgPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdGhlclVzZWQ7IGkrKykgewogICAgICBjYXJyeSArPSBkaWdpdHNbaV0gLSBvdGhlckRpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gY2FycnkgJiBfZGlnaXRNYXNrOwogICAgICBjYXJyeSA+Pj0gX2RpZ2l0Qml0czsKICAgIH0KICAgIGZvciAodmFyIGkgPSBvdGhlclVzZWQ7IGkgPCB1c2VkOyBpKyspIHsKICAgICAgY2FycnkgKz0gZGlnaXRzW2ldOwogICAgICByZXN1bHREaWdpdHNbaV0gPSBjYXJyeSAmIF9kaWdpdE1hc2s7CiAgICAgIGNhcnJ5ID4+PSBfZGlnaXRCaXRzOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSArIGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzQWRkU2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICB2YXIgdXNlZCA9IF91c2VkOwogICAgdmFyIG90aGVyVXNlZCA9IG90aGVyLl91c2VkOwogICAgaWYgKHVzZWQgPCBvdGhlclVzZWQpIHsKICAgICAgcmV0dXJuIG90aGVyLl9hYnNBZGRTZXRTaWduKHRoaXMsIGlzTmVnYXRpdmUpOwogICAgfQogICAgaWYgKHVzZWQgPT0gMCkgewogICAgICBhc3NlcnQoIWlzTmVnYXRpdmUpOwogICAgICByZXR1cm4gemVybzsKICAgIH0KICAgIGlmIChvdGhlclVzZWQgPT0gMCkgewogICAgICByZXR1cm4gX2lzTmVnYXRpdmUgPT0gaXNOZWdhdGl2ZSA/IHRoaXMgOiAtdGhpczsKICAgIH0KICAgIHZhciByZXN1bHRVc2VkID0gdXNlZCArIDE7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIF9hYnNBZGQoX2RpZ2l0cywgdXNlZCwgb3RoZXIuX2RpZ2l0cywgb3RoZXJVc2VkLCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpIC0gYWJzKG90aGVyKWAgd2l0aCBzaWduIHNldCBhY2NvcmRpbmcgdG8gW2lzTmVnYXRpdmVdLgogIC8vLwogIC8vLyBSZXF1aXJlbWVudDogYGFicyh0aGlzKSA+PSBhYnMob3RoZXIpYC4KICBfQmlnSW50SW1wbCBfYWJzU3ViU2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICBhc3NlcnQoX2Fic0NvbXBhcmUob3RoZXIpID49IDApOwogICAgdmFyIHVzZWQgPSBfdXNlZDsKICAgIGlmICh1c2VkID09IDApIHsKICAgICAgYXNzZXJ0KCFpc05lZ2F0aXZlKTsKICAgICAgcmV0dXJuIHplcm87CiAgICB9CiAgICB2YXIgb3RoZXJVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICBpZiAob3RoZXJVc2VkID09IDApIHsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID09IGlzTmVnYXRpdmUgPyB0aGlzIDogLXRoaXM7CiAgICB9CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyh1c2VkKTsKICAgIF9hYnNTdWIoX2RpZ2l0cywgdXNlZCwgb3RoZXIuX2RpZ2l0cywgb3RoZXJVc2VkLCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpICYgYWJzKG90aGVyKWAgd2l0aCBzaWduIHNldCBhY2NvcmRpbmcgdG8gW2lzTmVnYXRpdmVdLgogIF9CaWdJbnRJbXBsIF9hYnNBbmRTZXRTaWduKF9CaWdJbnRJbXBsIG90aGVyLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIHZhciByZXN1bHRVc2VkID0gX21pbihfdXNlZCwgb3RoZXIuX3VzZWQpOwogICAgdmFyIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICB2YXIgb3RoZXJEaWdpdHMgPSBvdGhlci5fZGlnaXRzOwogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdFVzZWQ7IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbaV0gJiBvdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSAmfiBhYnMob3RoZXIpYCB3aXRoIHNpZ24gc2V0IGFjY29yZGluZyB0byBbaXNOZWdhdGl2ZV0uCiAgX0JpZ0ludEltcGwgX2Fic0FuZE5vdFNldFNpZ24oX0JpZ0ludEltcGwgb3RoZXIsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgdmFyIHJlc3VsdFVzZWQgPSBfdXNlZDsKICAgIHZhciBkaWdpdHMgPSBfZGlnaXRzOwogICAgdmFyIG90aGVyRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgdmFyIG0gPSBfbWluKHJlc3VsdFVzZWQsIG90aGVyLl91c2VkKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXSAmIH5vdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIGZvciAodmFyIGkgPSBtOyBpIDwgcmVzdWx0VXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSB8IGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzT3JTZXRTaWduKF9CaWdJbnRJbXBsIG90aGVyLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIHZhciB1c2VkID0gX3VzZWQ7CiAgICB2YXIgb3RoZXJVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICB2YXIgcmVzdWx0VXNlZCA9IF9tYXgodXNlZCwgb3RoZXJVc2VkKTsKICAgIHZhciBkaWdpdHMgPSBfZGlnaXRzOwogICAgdmFyIG90aGVyRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgdmFyIGwsIG07CiAgICBpZiAodXNlZCA8IG90aGVyVXNlZCkgewogICAgICBsID0gb3RoZXI7CiAgICAgIG0gPSB1c2VkOwogICAgfSBlbHNlIHsKICAgICAgbCA9IHRoaXM7CiAgICAgIG0gPSBvdGhlclVzZWQ7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG07IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbaV0gfCBvdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIHZhciBsRGlnaXRzID0gbC5fZGlnaXRzOwogICAgZm9yICh2YXIgaSA9IG07IGkgPCByZXN1bHRVc2VkOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gbERpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSBeIGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzWG9yU2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICB2YXIgdXNlZCA9IF91c2VkOwogICAgdmFyIG90aGVyVXNlZCA9IG90aGVyLl91c2VkOwogICAgdmFyIHJlc3VsdFVzZWQgPSBfbWF4KHVzZWQsIG90aGVyVXNlZCk7CiAgICB2YXIgZGlnaXRzID0gX2RpZ2l0czsKICAgIHZhciBvdGhlckRpZ2l0cyA9IG90aGVyLl9kaWdpdHM7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIHZhciBsLCBtOwogICAgaWYgKHVzZWQgPCBvdGhlclVzZWQpIHsKICAgICAgbCA9IG90aGVyOwogICAgICBtID0gdXNlZDsKICAgIH0gZWxzZSB7CiAgICAgIGwgPSB0aGlzOwogICAgICBtID0gb3RoZXJVc2VkOwogICAgfQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gZGlnaXRzW2ldIF4gb3RoZXJEaWdpdHNbaV07CiAgICB9CiAgICB2YXIgbERpZ2l0cyA9IGwuX2RpZ2l0czsKICAgIGZvciAodmFyIGkgPSBtOyBpIDwgcmVzdWx0VXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGxEaWdpdHNbaV07CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oaXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICB9CgogIC8qKgogICAqIEJpdC13aXNlIGFuZCBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIG9ubHkgdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbgogICAqIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBPZiBib3RoIG9wZXJhbmRzIGFyZSBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlCiAgICogdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgJihCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvIHx8IG90aGVyLl9pc1plcm8pIHJldHVybiB6ZXJvOwogICAgaWYgKF9pc05lZ2F0aXZlID09IG90aGVyLl9pc05lZ2F0aXZlKSB7CiAgICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICAgIC8vICgtdGhpcykgJiAoLW90aGVyKSA9PSB+KHRoaXMtMSkgJiB+KG90aGVyLTEpCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgID09IH4oKHRoaXMtMSkgfCAob3RoZXItMSkpCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgID09IC0oKCh0aGlzLTEpIHwgKG90aGVyLTEpKSArIDEpCiAgICAgICAgX0JpZ0ludEltcGwgdGhpczEgPSBfYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIF9CaWdJbnRJbXBsIG90aGVyMSA9IG90aGVyLl9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIHRoaXMgYW5kIG90aGVyIGFyZSBuZWdhdGl2ZS4KICAgICAgICByZXR1cm4gdGhpczEuX2Fic09yU2V0U2lnbihvdGhlcjEsIHRydWUpLl9hYnNBZGRTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIF9hYnNBbmRTZXRTaWduKG90aGVyLCBmYWxzZSk7CiAgICB9CiAgICAvLyBfaXNOZWdhdGl2ZSAhPSBvdGhlci5faXNOZWdhdGl2ZQogICAgdmFyIHAsIG47CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgcCA9IG90aGVyOwogICAgICBuID0gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIC8vICYgaXMgc3ltbWV0cmljLgogICAgICBwID0gdGhpczsKICAgICAgbiA9IG90aGVyOwogICAgfQogICAgLy8gcCAmICgtbikgPT0gcCAmIH4obi0xKSA9PSBwICZ+IChuLTEpCiAgICB2YXIgbjEgPSBuLl9hYnNTdWJTZXRTaWduKG9uZSwgZmFsc2UpOwogICAgcmV0dXJuIHAuX2Fic0FuZE5vdFNldFNpZ24objEsIGZhbHNlKTsKICB9CgogIC8qKgogICAqIEJpdC13aXNlIG9yIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbiBlaXRoZXIKICAgKiBvZiBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIElmIGJvdGggb3BlcmFuZHMgYXJlIG5vbi1uZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgdXMgbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgfChCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gb3RoZXI7CiAgICBpZiAob3RoZXIuX2lzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAoX2lzTmVnYXRpdmUgPT0gb3RoZXIuX2lzTmVnYXRpdmUpIHsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgICAgLy8gKC10aGlzKSB8ICgtb3RoZXIpID09IH4odGhpcy0xKSB8IH4ob3RoZXItMSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgPT0gfigodGhpcy0xKSAmIChvdGhlci0xKSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgPT0gLSgoKHRoaXMtMSkgJiAob3RoZXItMSkpICsgMSkKICAgICAgICB2YXIgdGhpczEgPSBfYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIHZhciBvdGhlcjEgPSBvdGhlci5fYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIC8vIFJlc3VsdCBjYW5ub3QgYmUgemVybyBpZiB0aGlzIGFuZCBhIGFyZSBuZWdhdGl2ZS4KICAgICAgICByZXR1cm4gdGhpczEuX2Fic0FuZFNldFNpZ24ob3RoZXIxLCB0cnVlKS5fYWJzQWRkU2V0U2lnbihvbmUsIHRydWUpOwogICAgICB9CiAgICAgIHJldHVybiBfYWJzT3JTZXRTaWduKG90aGVyLCBmYWxzZSk7CiAgICB9CiAgICAvLyBfbmVnICE9IGEuX25lZwogICAgdmFyIHAsIG47CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgcCA9IG90aGVyOwogICAgICBuID0gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIC8vIHwgaXMgc3ltbWV0cmljLgogICAgICBwID0gdGhpczsKICAgICAgbiA9IG90aGVyOwogICAgfQogICAgLy8gcCB8ICgtbikgPT0gcCB8IH4obi0xKSA9PSB+KChuLTEpICZ+IHApID09IC0ofigobi0xKSAmfiBwKSArIDEpCiAgICB2YXIgbjEgPSBuLl9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAvLyBSZXN1bHQgY2Fubm90IGJlIHplcm8gaWYgb25seSBvbmUgb2YgdGhpcyBvciBhIGlzIG5lZ2F0aXZlLgogICAgcmV0dXJuIG4xLl9hYnNBbmROb3RTZXRTaWduKHAsIHRydWUpLl9hYnNBZGRTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBCaXQtd2lzZSBleGNsdXNpdmUtb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIG9uZSwKICAgKiBidXQgbm90IGJvdGgsIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgdGhlIG9wZXJhbmRzIGhhdmUgdGhlIHNhbWUgc2lnbiwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgXihCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gb3RoZXI7CiAgICBpZiAob3RoZXIuX2lzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAoX2lzTmVnYXRpdmUgPT0gb3RoZXIuX2lzTmVnYXRpdmUpIHsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgICAgLy8gKC10aGlzKSBeICgtb3RoZXIpID09IH4odGhpcy0xKSBeIH4ob3RoZXItMSkgPT0gKHRoaXMtMSkgXiAob3RoZXItMSkKICAgICAgICB2YXIgdGhpczEgPSBfYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIHZhciBvdGhlcjEgPSBvdGhlci5fYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIHJldHVybiB0aGlzMS5fYWJzWG9yU2V0U2lnbihvdGhlcjEsIGZhbHNlKTsKICAgICAgfQogICAgICByZXR1cm4gX2Fic1hvclNldFNpZ24ob3RoZXIsIGZhbHNlKTsKICAgIH0KICAgIC8vIF9pc05lZ2F0aXZlICE9IGEuX2lzTmVnYXRpdmUKICAgIHZhciBwLCBuOwogICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgIHAgPSBvdGhlcjsKICAgICAgbiA9IHRoaXM7CiAgICB9IGVsc2UgewogICAgICAvLyBeIGlzIHN5bW1ldHJpYy4KICAgICAgcCA9IHRoaXM7CiAgICAgIG4gPSBvdGhlcjsKICAgIH0KICAgIC8vIHAgXiAoLW4pID09IHAgXiB+KG4tMSkgPT0gfihwIF4gKG4tMSkpID09IC0oKHAgXiAobi0xKSkgKyAxKQogICAgdmFyIG4xID0gbi5fYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIG9ubHkgb25lIG9mIHRoaXMgb3IgYSBpcyBuZWdhdGl2ZS4KICAgIHJldHVybiBwLl9hYnNYb3JTZXRTaWduKG4xLCB0cnVlKS5fYWJzQWRkU2V0U2lnbihvbmUsIHRydWUpOwogIH0KCiAgLyoqCiAgICogVGhlIGJpdC13aXNlIG5lZ2F0ZSBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGB0aGlzYCBhcyBhIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQgaW50ZWdlciwKICAgKiB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIG9wcG9zaXRlIGJpdHMgc2V0LgogICAqCiAgICogVGhpcyBtYXBzIGFueSBpbnRlZ2VyIGB4YCB0byBgLXggLSAxYC4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciB+KCkgewogICAgaWYgKF9pc1plcm8pIHJldHVybiBfbWludXNPbmU7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgLy8gfigtdGhpcykgPT0gfih+KHRoaXMtMSkpID09IHRoaXMtMQogICAgICByZXR1cm4gX2Fic1N1YlNldFNpZ24ob25lLCBmYWxzZSk7CiAgICB9CiAgICAvLyB+dGhpcyA9PSAtdGhpcy0xID09IC0odGhpcysxKQogICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIHRoaXMgaXMgcG9zaXRpdmUuCiAgICByZXR1cm4gX2Fic0FkZFNldFNpZ24ob25lLCB0cnVlKTsKICB9CgogIC8vLyBBZGRpdGlvbiBvcGVyYXRvci4KICBfQmlnSW50SW1wbCBvcGVyYXRvciArKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKF9pc1plcm8pIHJldHVybiBvdGhlcjsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpczsKICAgIHZhciBpc05lZ2F0aXZlID0gX2lzTmVnYXRpdmU7CiAgICBpZiAoaXNOZWdhdGl2ZSA9PSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICAvLyB0aGlzICsgb3RoZXIgPT0gdGhpcyArIG90aGVyCiAgICAgIC8vICgtdGhpcykgKyAoLW90aGVyKSA9PSAtKHRoaXMgKyBvdGhlcikKICAgICAgcmV0dXJuIF9hYnNBZGRTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIC8vIHRoaXMgKyAoLW90aGVyKSA9PSB0aGlzIC0gb3RoZXIgPT0gLSh0aGlzIC0gb3RoZXIpCiAgICAvLyAoLXRoaXMpICsgb3RoZXIgPT0gb3RoZXIgLSB0aGlzID09IC0odGhpcyAtIG90aGVyKQogICAgaWYgKF9hYnNDb21wYXJlKG90aGVyKSA+PSAwKSB7CiAgICAgIHJldHVybiBfYWJzU3ViU2V0U2lnbihvdGhlciwgaXNOZWdhdGl2ZSk7CiAgICB9CiAgICByZXR1cm4gb3RoZXIuX2Fic1N1YlNldFNpZ24odGhpcywgIWlzTmVnYXRpdmUpOwogIH0KCiAgLy8vIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgogIF9CaWdJbnRJbXBsIG9wZXJhdG9yIC0oQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAoX2lzWmVybykgcmV0dXJuIC1vdGhlcjsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpczsKICAgIHZhciBpc05lZ2F0aXZlID0gX2lzTmVnYXRpdmU7CiAgICBpZiAoaXNOZWdhdGl2ZSAhPSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICAvLyB0aGlzIC0gKC1vdGhlcikgPT0gdGhpcyArIG90aGVyCiAgICAgIC8vICgtdGhpcykgLSBvdGhlciA9PSAtKHRoaXMgKyBvdGhlcikKICAgICAgcmV0dXJuIF9hYnNBZGRTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIC8vIHRoaXMgLSBvdGhlciA9PSB0aGlzIC0gYSA9PSAtKHRoaXMgLSBvdGhlcikKICAgIC8vICgtdGhpcykgLSAoLW90aGVyKSA9PSBvdGhlciAtIHRoaXMgPT0gLSh0aGlzIC0gb3RoZXIpCiAgICBpZiAoX2Fic0NvbXBhcmUob3RoZXIpID49IDApIHsKICAgICAgcmV0dXJuIF9hYnNTdWJTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIHJldHVybiBvdGhlci5fYWJzU3ViU2V0U2lnbih0aGlzLCAhaXNOZWdhdGl2ZSk7CiAgfQoKICAvLy8gTXVsdGlwbGllcyBgeERpZ2l0c1t4SW5kZXhdYCB3aXRoIGBtdWx0aXBsaWNhbmREaWdpdHNgIGFuZCBhZGRzIHRoZSByZXN1bHQKICAvLy8gdG8gYGFjY3VtdWxhdG9yRGlnaXRzYC4KICAvLy8KICAvLy8gVGhlIGBtdWx0aXBsaWNhbmREaWdpdHNgIGluIHRoZSByYW5nZSBgaWAgdG8gYGlgK2BuYC0xIGFyZSB0aGUKICAvLy8gbXVsdGlwbGljYW5kIGRpZ2l0cy4KICAvLy8KICAvLy8gVGhlIGBhY2N1bXVsYXRvckRpZ2l0c2AgaW4gdGhlIHJhbmdlIGBqYCB0byBgamArYG5gLTEgYXJlIHRoZSBhY2N1bXVsYXRvcgogIC8vLyBkaWdpdHMuCiAgLy8vCiAgLy8vIENvbmNyZXRlbHk6CiAgLy8vIGBhY2N1bXVsYXRvckRpZ2l0c1tqLi5qK25dICs9IHhEaWdpdHNbeEluZGV4XSAqIG1fZGlnaXRzW2kuLmkrbi0xXWAuCiAgLy8vIFJldHVybnMgMS4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLiBJbnRyaW5zaWNzIG9uIDY0LWJpdCBwbGF0Zm9ybXMKICAvLy8gcHJvY2VzcyBkaWdpdCBwYWlycyBhdCBldmVuIGluZGljZXMgYW5kIHJldHVybnMgMi4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgaW50IF9tdWxBZGQoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywKICAgICAgaW50IHhJbmRleCwKICAgICAgVWludDMyTGlzdCBtdWx0aXBsaWNhbmREaWdpdHMsCiAgICAgIGludCBpLAogICAgICBVaW50MzJMaXN0IGFjY3VtdWxhdG9yRGlnaXRzLAogICAgICBpbnQgaiwKICAgICAgaW50IG4pIHsKICAgIGludCB4ID0geERpZ2l0c1t4SW5kZXhdOwogICAgaWYgKHggPT0gMCkgewogICAgICAvLyBOby1vcCBpZiB4IGlzIDAuCiAgICAgIHJldHVybiAxOwogICAgfQogICAgaW50IGNhcnJ5ID0gMDsKICAgIGludCB4bCA9IHggJiBfaGFsZkRpZ2l0TWFzazsKICAgIGludCB4aCA9IHggPj4gX2hhbGZEaWdpdEJpdHM7CiAgICB3aGlsZSAoLS1uID49IDApIHsKICAgICAgaW50IG1sID0gbXVsdGlwbGljYW5kRGlnaXRzW2ldICYgX2hhbGZEaWdpdE1hc2s7CiAgICAgIGludCBtaCA9IG11bHRpcGxpY2FuZERpZ2l0c1tpKytdID4+IF9oYWxmRGlnaXRCaXRzOwogICAgICBpbnQgcGggPSB4aCAqIG1sICsgbWggKiB4bDsKICAgICAgaW50IHBsID0geGwgKiBtbCArCiAgICAgICAgICAoKHBoICYgX2hhbGZEaWdpdE1hc2spIDw8IF9oYWxmRGlnaXRCaXRzKSArCiAgICAgICAgICBhY2N1bXVsYXRvckRpZ2l0c1tqXSArCiAgICAgICAgICBjYXJyeTsKICAgICAgY2FycnkgPSAocGwgPj4gX2RpZ2l0Qml0cykgKyAocGggPj4gX2hhbGZEaWdpdEJpdHMpICsgeGggKiBtaDsKICAgICAgYWNjdW11bGF0b3JEaWdpdHNbaisrXSA9IHBsICYgX2RpZ2l0TWFzazsKICAgIH0KICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7CiAgICAgIGludCBsID0gYWNjdW11bGF0b3JEaWdpdHNbal0gKyBjYXJyeTsKICAgICAgY2FycnkgPSBsID4+IF9kaWdpdEJpdHM7CiAgICAgIGFjY3VtdWxhdG9yRGlnaXRzW2orK10gPSBsICYgX2RpZ2l0TWFzazsKICAgIH0KICAgIHJldHVybiAxOwogIH0KCiAgLy8vIE11bHRpcGxpZXMgYHhEaWdpdHNbaV1gIHdpdGggYHhEaWdpdHNgIGFuZCBhZGRzIHRoZSByZXN1bHQgdG8KICAvLy8gYGFjY3VtdWxhdG9yRGlnaXRzYC4KICAvLy8KICAvLy8gVGhlIGB4RGlnaXRzYCBpbiB0aGUgcmFuZ2UgYGlgIHRvIGB1c2VkYC0xIGFyZSB0aGUgbXVsdGlwbGljYW5kIGRpZ2l0cy4KICAvLy8KICAvLy8gVGhlIGBhY2N1bXVsYXRvckRpZ2l0c2AgaW4gdGhlIHJhbmdlIDIqYGlgIHRvIGBpYCtgdXNlZGAtMSBhcmUgdGhlCiAgLy8vIGFjY3VtdWxhdG9yIGRpZ2l0cy4KICAvLy8KICAvLy8gQ29uY3JldGVseToKICAvLy8gYGFjY3VtdWxhdG9yRGlnaXRzWzIqaS4uaSt1c2VkLTFdICs9IHhEaWdpdHNbaV0qeERpZ2l0c1tpXSArCiAgLy8vIDIqeERpZ2l0c1tpXSp4RGlnaXRzW2krMS4udXNlZC0xXWAuCiAgLy8vIFJldHVybnMgMS4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLiBJbnRyaW5zaWNzIG9uIDY0LWJpdCBwbGF0Zm9ybXMKICAvLy8gcHJvY2VzcyBkaWdpdCBwYWlycyBhdCBldmVuIGluZGljZXMgYW5kIHJldHVybnMgMi4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgaW50IF9zcXJBZGQoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IGksIFVpbnQzMkxpc3QgYWNjdWx1bWF0b3JEaWdpdHMsIGludCB1c2VkKSB7CiAgICBpbnQgeCA9IHhEaWdpdHNbaV07CiAgICBpZiAoeCA9PSAwKSByZXR1cm4gMTsKICAgIGludCBqID0gMiAqIGk7CiAgICBpbnQgY2FycnkgPSAwOwogICAgaW50IHhsID0geCAmIF9oYWxmRGlnaXRNYXNrOwogICAgaW50IHhoID0geCA+PiBfaGFsZkRpZ2l0Qml0czsKICAgIGludCBwaCA9IDIgKiB4aCAqIHhsOwogICAgaW50IHBsID0geGwgKiB4bCArCiAgICAgICAgKChwaCAmIF9oYWxmRGlnaXRNYXNrKSA8PCBfaGFsZkRpZ2l0Qml0cykgKwogICAgICAgIGFjY3VsdW1hdG9yRGlnaXRzW2pdOwogICAgY2FycnkgPSAocGwgPj4gX2RpZ2l0Qml0cykgKyAocGggPj4gX2hhbGZEaWdpdEJpdHMpICsgeGggKiB4aDsKICAgIGFjY3VsdW1hdG9yRGlnaXRzW2pdID0gcGwgJiBfZGlnaXRNYXNrOwogICAgeCA8PD0gMTsKICAgIHhsID0geCAmIF9oYWxmRGlnaXRNYXNrOwogICAgeGggPSB4ID4+IF9oYWxmRGlnaXRCaXRzOwogICAgaW50IG4gPSB1c2VkIC0gaSAtIDE7CiAgICBpbnQgayA9IGkgKyAxOwogICAgaisrOwogICAgd2hpbGUgKC0tbiA+PSAwKSB7CiAgICAgIGludCBsID0geERpZ2l0c1trXSAmIF9oYWxmRGlnaXRNYXNrOwogICAgICBpbnQgaCA9IHhEaWdpdHNbaysrXSA+PiBfaGFsZkRpZ2l0Qml0czsKICAgICAgaW50IHBoID0geGggKiBsICsgaCAqIHhsOwogICAgICBpbnQgcGwgPSB4bCAqIGwgKwogICAgICAgICAgKChwaCAmIF9oYWxmRGlnaXRNYXNrKSA8PCBfaGFsZkRpZ2l0Qml0cykgKwogICAgICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbal0gKwogICAgICAgICAgY2Fycnk7CiAgICAgIGNhcnJ5ID0gKHBsID4+IF9kaWdpdEJpdHMpICsgKHBoID4+IF9oYWxmRGlnaXRCaXRzKSArIHhoICogaDsKICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbaisrXSA9IHBsICYgX2RpZ2l0TWFzazsKICAgIH0KICAgIGNhcnJ5ICs9IGFjY3VsdW1hdG9yRGlnaXRzW2kgKyB1c2VkXTsKICAgIGlmIChjYXJyeSA+PSBfZGlnaXRCYXNlKSB7CiAgICAgIGFjY3VsdW1hdG9yRGlnaXRzW2kgKyB1c2VkXSA9IGNhcnJ5IC0gX2RpZ2l0QmFzZTsKICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbaSArIHVzZWQgKyAxXSA9IDE7CiAgICB9IGVsc2UgewogICAgICBhY2N1bHVtYXRvckRpZ2l0c1tpICsgdXNlZF0gPSBjYXJyeTsKICAgIH0KICAgIHJldHVybiAxOwogIH0KCiAgLy8vIE11bHRpcGxpY2F0aW9uIG9wZXJhdG9yLgogIF9CaWdJbnRJbXBsIG9wZXJhdG9yICooQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICB2YXIgdXNlZCA9IF91c2VkOwogICAgdmFyIG90aGVyVXNlZCA9IG90aGVyLl91c2VkOwogICAgaWYgKHVzZWQgPT0gMCB8fCBvdGhlclVzZWQgPT0gMCkgewogICAgICByZXR1cm4gemVybzsKICAgIH0KICAgIHZhciByZXN1bHRVc2VkID0gdXNlZCArIG90aGVyVXNlZDsKICAgIHZhciBkaWdpdHMgPSBfZGlnaXRzOwogICAgdmFyIG90aGVyRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgdmFyIGkgPSAwOwogICAgd2hpbGUgKGkgPCBvdGhlclVzZWQpIHsKICAgICAgaSArPSBfbXVsQWRkKG90aGVyRGlnaXRzLCBpLCBkaWdpdHMsIDAsIHJlc3VsdERpZ2l0cywgaSwgdXNlZCk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oCiAgICAgICAgX2lzTmVnYXRpdmUgIT0gb3RoZXIuX2lzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLyByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9CiAgLy8gICAgIHhEaWdpdHNbMC4ueFVzZWQtMV0qb3RoZXJEaWdpdHNbMC4ub3RoZXJVc2VkLTFdLgogIC8vIFJldHVybnMgcmVzdWx0VXNlZCA9IHhVc2VkICsgb3RoZXJVc2VkLgogIHN0YXRpYyBpbnQgX211bERpZ2l0cyhVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCBvdGhlckRpZ2l0cywKICAgICAgaW50IG90aGVyVXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0geFVzZWQgKyBvdGhlclVzZWQ7CiAgICB2YXIgaSA9IHJlc3VsdFVzZWQgKyAocmVzdWx0VXNlZCAmIDEpOwogICAgYXNzZXJ0KHJlc3VsdERpZ2l0cy5sZW5ndGggPj0gaSk7CiAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gMDsKICAgIH0KICAgIGkgPSAwOwogICAgd2hpbGUgKGkgPCBvdGhlclVzZWQpIHsKICAgICAgaSArPSBfbXVsQWRkKG90aGVyRGlnaXRzLCBpLCB4RGlnaXRzLCAwLCByZXN1bHREaWdpdHMsIGksIHhVc2VkKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRVc2VkOwogIH0KCiAgLy8gcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPSB4RGlnaXRzWzAuLnhVc2VkLTFdXjIuCiAgLy8gUmV0dXJucyByZXN1bHRVc2VkID0gMip4VXNlZC4KICBzdGF0aWMgaW50IF9zcXJEaWdpdHMoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgdmFyIHJlc3VsdFVzZWQgPSAyICogeFVzZWQ7CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkKTsKICAgIC8vIFNpbmNlIHJlc3VsdFVzZWQgaXMgZXZlbiwgbm8gbmVlZCBmb3IgYSBsZWFkaW5nIHplcm8gZm9yCiAgICAvLyA2NC1iaXQgcHJvY2Vzc2luZy4KICAgIHZhciBpID0gcmVzdWx0VXNlZDsKICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICByZXN1bHREaWdpdHNbaV0gPSAwOwogICAgfQogICAgaSA9IDA7CiAgICB3aGlsZSAoaSA8IHhVc2VkIC0gMSkgewogICAgICBpICs9IF9zcXJBZGQoeERpZ2l0cywgaSwgcmVzdWx0RGlnaXRzLCB4VXNlZCk7CiAgICB9CiAgICAvLyBUaGUgbGFzdCBzdGVwIGlzIGFscmVhZHkgZG9uZSBpZiBkaWdpdCBwYWlycyB3ZXJlIHByb2Nlc3NlZCBhYm92ZS4KICAgIGlmIChpIDwgeFVzZWQpIHsKICAgICAgX211bEFkZCh4RGlnaXRzLCBpLCB4RGlnaXRzLCBpLCByZXN1bHREaWdpdHMsIDIgKiBpLCAxKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRVc2VkOwogIH0KCiAgLy8gSW5kaWNlcyBvZiB0aGUgYXJndW1lbnRzIG9mIF9lc3RpbWF0ZVF1b3RpZW50RGlnaXQuCiAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nIGJ5IGludHJpbnNpY3Mgb24gNjQtYml0IHBsYXRmb3JtcywgdGhlIHRvcCBkaWdpdCBwYWlyCiAgLy8gb2YgdGhlIGRpdmlzb3IgaXMgcHJvdmlkZWQgaW4gdGhlIGFyZ3MgYXJyYXksIGFuZCBhIDY0LWJpdCBlc3RpbWF0ZWQKICAvLyBxdW90aWVudCBpcyByZXR1cm5lZC4gSG93ZXZlciwgb24gMzItYml0IHBsYXRmb3JtcywgdGhlIGxvdyAzMi1iaXQgZGlnaXQgaXMKICAvLyBpZ25vcmVkIGFuZCBvbmx5IG9uZSAzMi1iaXQgZGlnaXQgaXMgcmV0dXJuZWQgYXMgdGhlIGVzdGltYXRlZCBxdW90aWVudC4KICBzdGF0aWMgY29uc3QgaW50IF9kaXZpc29yTG93VG9wRGlnaXQgPSAwOyAvLyBMb3cgZGlnaXQgb2YgdG9wIHBhaXIgb2YgZGl2aXNvci4KICBzdGF0aWMgY29uc3QgaW50IF9kaXZpc29yVG9wRGlnaXQgPSAxOyAvLyBUb3AgZGlnaXQgb2YgZGl2aXNvci4KICBzdGF0aWMgY29uc3QgaW50IF9xdW90aWVudERpZ2l0ID0gMjsgLy8gRXN0aW1hdGVkIHF1b3RpZW50LgogIHN0YXRpYyBjb25zdCBpbnQgX3F1b3RpZW50SGlnaERpZ2l0ID0gMzsgLy8gSGlnaCBkaWdpdCBvZiBlc3RpbWF0ZWQgcXVvdGllbnQuCgogIC8vLyBFc3RpbWF0ZSBgYXJnc1tfcXVvdGllbnREaWdpdF0gPSBkaWdpdHNbaS0xLi5pXSB+LyBhcmdzW19kaXZpc29yVG9wRGlnaXRdYAogIC8vLyBSZXR1cm5zIDEuCiAgLy8vCiAgLy8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludHJpbnNpZmllZC4gSW50cmluc2ljcyBvbiA2NC1iaXQgcGxhdGZvcm1zCiAgLy8vIHByb2Nlc3MgYSBkaWdpdCBwYWlyIChpIGFsd2F5cyBvZGQpOgogIC8vLyBFc3RpbWF0ZSBgYXJnc1tfcXVvdGllbnREaWdpdC4uX3F1b3RpZW50SGlnaERpZ2l0XSA9IGRpZ2l0c1tpLTMuLmldIH4vCiAgLy8vIGFyZ3NbX2Rpdmlzb3JMb3dUb3BEaWdpdC4uX2Rpdmlzb3JUb3BEaWdpdF1gLgogIC8vLyBSZXR1cm5zIDIuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIGludCBfZXN0aW1hdGVRdW90aWVudERpZ2l0KFVpbnQzMkxpc3QgYXJncywgVWludDMyTGlzdCBkaWdpdHMsIGludCBpKSB7CiAgICAvLyBWZXJpZnkgdGhhdCBkaWdpdCBwYWlycyBhcmUgYWNjZXNzaWJsZSBmb3IgNjQtYml0IHByb2Nlc3NpbmcuCiAgICBhc3NlcnQoZGlnaXRzLmxlbmd0aCA+PSA0KTsKICAgIGlmIChkaWdpdHNbaV0gPT0gYXJnc1tfZGl2aXNvclRvcERpZ2l0XSkgewogICAgICBhcmdzW19xdW90aWVudERpZ2l0XSA9IF9kaWdpdE1hc2s7CiAgICB9IGVsc2UgewogICAgICAvLyBDaG9wIG9mZiBvbmUgYml0LCBzaW5jZSBhIE1pbnQgY2Fubm90IGhvbGQgMiBkaWdpdHMuCiAgICAgIHZhciBxdW90aWVudERpZ2l0ID0KICAgICAgICAgICgoZGlnaXRzW2ldIDw8IChfZGlnaXRCaXRzIC0gMSkpIHwgKGRpZ2l0c1tpIC0gMV0gPj4gMSkpIH4vCiAgICAgICAgICAgICAgKGFyZ3NbX2Rpdmlzb3JUb3BEaWdpdF0gPj4gMSk7CiAgICAgIGlmIChxdW90aWVudERpZ2l0ID4gX2RpZ2l0TWFzaykgewogICAgICAgIGFyZ3NbX3F1b3RpZW50RGlnaXRdID0gX2RpZ2l0TWFzazsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcmdzW19xdW90aWVudERpZ2l0XSA9IHF1b3RpZW50RGlnaXQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwogIH0KCiAgLy8vIFJldHVybnMgYHRydW5jKHRoaXMgLyBvdGhlcilgLCB3aXRoIGBvdGhlciAhPSAwYC4KICBfQmlnSW50SW1wbCBfZGl2KEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgYXNzZXJ0KG90aGVyLl91c2VkID4gMCk7CiAgICBpZiAoX3VzZWQgPCBvdGhlci5fdXNlZCkgewogICAgICByZXR1cm4gemVybzsKICAgIH0KICAgIF9kaXZSZW0ob3RoZXIpOwogICAgLy8gUmV0dXJuIHF1b3RpZW50LCBpLmUuCiAgICAvLyBfbGFzdFF1b1JlbV9kaWdpdHNbX2xhc3RSZW1fdXNlZC4uX2xhc3RRdW9SZW1fdXNlZC0xXSB3aXRoIHByb3BlciBzaWduLgogICAgdmFyIGxhc3RRdW9fdXNlZCA9IF9sYXN0UXVvUmVtVXNlZCAtIF9sYXN0UmVtVXNlZDsKICAgIHZhciBxdW9fZGlnaXRzID0gX2Nsb25lRGlnaXRzKAogICAgICAgIF9sYXN0UXVvUmVtRGlnaXRzLCBfbGFzdFJlbVVzZWQsIF9sYXN0UXVvUmVtVXNlZCwgbGFzdFF1b191c2VkKTsKICAgIHZhciBxdW8gPSBuZXcgX0JpZ0ludEltcGwuXyhmYWxzZSwgbGFzdFF1b191c2VkLCBxdW9fZGlnaXRzKTsKICAgIGlmICgoX2lzTmVnYXRpdmUgIT0gb3RoZXIuX2lzTmVnYXRpdmUpICYmIChxdW8uX3VzZWQgPiAwKSkgewogICAgICBxdW8gPSAtcXVvOwogICAgfQogICAgcmV0dXJuIHF1bzsKICB9CgogIC8vLyBSZXR1cm5zIGB0aGlzIC0gb3RoZXIgKiB0cnVuYyh0aGlzIC8gb3RoZXIpYCwgd2l0aCBgb3RoZXIgIT0gMGAuCiAgX0JpZ0ludEltcGwgX3JlbShCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGFzc2VydChvdGhlci5fdXNlZCA+IDApOwogICAgaWYgKF91c2VkIDwgb3RoZXIuX3VzZWQpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBfZGl2UmVtKG90aGVyKTsKICAgIC8vIFJldHVybiByZW1haW5kZXIsIGkuZS4KICAgIC8vIGRlbm9ybWFsaXplZCBfbGFzdFF1b1JlbV9kaWdpdHNbMC4uX2xhc3RSZW1fdXNlZC0xXSB3aXRoIHByb3BlciBzaWduLgogICAgdmFyIHJlbURpZ2l0cyA9CiAgICAgICAgX2Nsb25lRGlnaXRzKF9sYXN0UXVvUmVtRGlnaXRzLCAwLCBfbGFzdFJlbVVzZWQsIF9sYXN0UmVtVXNlZCk7CiAgICB2YXIgcmVtID0gbmV3IF9CaWdJbnRJbXBsLl8oZmFsc2UsIF9sYXN0UmVtVXNlZCwgcmVtRGlnaXRzKTsKICAgIGlmIChfbGFzdFJlbV9uc2ggPiAwKSB7CiAgICAgIHJlbSA9IHJlbSA+PiBfbGFzdFJlbV9uc2g7IC8vIERlbm9ybWFsaXplIHJlbWFpbmRlci4KICAgIH0KICAgIGlmIChfaXNOZWdhdGl2ZSAmJiAocmVtLl91c2VkID4gMCkpIHsKICAgICAgcmVtID0gLXJlbTsKICAgIH0KICAgIHJldHVybiByZW07CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhpcyB+LyBvdGhlciBhbmQgdGhpcy5yZW1haW5kZXIob3RoZXIpLgogIC8vLwogIC8vLyBTdG9yZXMgdGhlIHJlc3VsdCBpbiBbX2xhc3RRdW9SZW1EaWdpdHNdLCBbX2xhc3RRdW9SZW1Vc2VkXSBhbmQKICAvLy8gW19sYXN0UmVtVXNlZF0uIFRoZSBbX2xhc3RRdW9SZW1EaWdpdHNdIGNvbnRhaW5zIHRoZSBkaWdpdHMgb2YgKmJvdGgqLCB0aGUKICAvLy8gcXVvdGllbnQgYW5kIHRoZSByZW1haW5kZXIuCiAgLy8vCiAgLy8vIENhY2hlcyB0aGUgaW5wdXQgdG8gYXZvaWQgZG9pbmcgdGhlIHdvcmsgYWdhaW4gd2hlbiB1c2VycyB3cml0ZQogIC8vLyBgYSB+LyBiYCBmb2xsb3dlZCBieSBhIGBhICUgYmAuCiAgdm9pZCBfZGl2UmVtKF9CaWdJbnRJbXBsIG90aGVyKSB7CiAgICAvLyBDaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQuCiAgICBpZiAoKHRoaXMuX3VzZWQgPT0gX2xhc3REaXZpZGVuZFVzZWQpICYmCiAgICAgICAgKG90aGVyLl91c2VkID09IF9sYXN0RGl2aXNvclVzZWQpICYmCiAgICAgICAgaWRlbnRpY2FsKHRoaXMuX2RpZ2l0cywgX2xhc3REaXZpZGVuZERpZ2l0cykgJiYKICAgICAgICBpZGVudGljYWwob3RoZXIuX2RpZ2l0cywgX2xhc3REaXZpc29yRGlnaXRzKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBhc3NlcnQoX3VzZWQgPj0gb3RoZXIuX3VzZWQpOwoKICAgIHZhciBuc2ggPSBfZGlnaXRCaXRzIC0gb3RoZXIuX2RpZ2l0c1tvdGhlci5fdXNlZCAtIDFdLmJpdExlbmd0aDsKICAgIC8vIEZvciA2NC1iaXQgcHJvY2Vzc2luZywgbWFrZSBzdXJlIG90aGVyIGhhcyBhbiBldmVuIG51bWJlciBvZiBkaWdpdHMuCiAgICBpZiAob3RoZXIuX3VzZWQuaXNPZGQpIHsKICAgICAgbnNoICs9IF9kaWdpdEJpdHM7CiAgICB9CiAgICAvLyBDb25jYXRlbmF0ZWQgcG9zaXRpdmUgcXVvdGllbnQgYW5kIG5vcm1hbGl6ZWQgcG9zaXRpdmUgcmVtYWluZGVyLgogICAgLy8gVGhlIHJlc3VsdERpZ2l0cyBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBtb3JlIGRpZ2l0IHRoYW4gdGhlIGRpdmlkZW5kLgogICAgVWludDMyTGlzdCByZXN1bHREaWdpdHM7CiAgICBpbnQgcmVzdWx0VXNlZDsKICAgIC8vIE5vcm1hbGl6ZWQgcG9zaXRpdmUgZGl2aXNvciAocmVmZXJyZWQgdG8gYXMgJ3knKS4KICAgIC8vIFRoZSBub3JtYWxpemVkIGRpdmlzb3IgaGFzIHRoZSBtb3N0LXNpZ25pZmljYW50IGJpdCBvZiBpdHMgbW9zdAogICAgLy8gc2lnbmlmaWNhbnQgZGlnaXQgc2V0LgogICAgLy8gVGhpcyBtYWtlcyBlc3RpbWF0aW5nIHRoZSBxdW90aWVudCBlYXNpZXIuCiAgICBVaW50MzJMaXN0IHlEaWdpdHM7CiAgICBpbnQgeVVzZWQ7CiAgICBpZiAobnNoID4gMCkgewogICAgICAvLyBFeHRyYSBkaWdpdHMgZm9yIG5vcm1hbGl6YXRpb24sIGFsc28gdXNlZCBmb3IgcG9zc2libGUgX211bEFkZCBjYXJyeS4KICAgICAgdmFyIG51bUV4dHJhRGlnaXRzID0gKG5zaCArIF9kaWdpdEJpdHMgLSAxKSB+LyBfZGlnaXRCaXRzICsgMTsKICAgICAgeURpZ2l0cyA9IF9uZXdEaWdpdHMob3RoZXIuX3VzZWQgKyBudW1FeHRyYURpZ2l0cyk7CiAgICAgIHlVc2VkID0gX2xTaGlmdERpZ2l0cyhvdGhlci5fZGlnaXRzLCBvdGhlci5fdXNlZCwgbnNoLCB5RGlnaXRzKTsKICAgICAgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhfdXNlZCArIG51bUV4dHJhRGlnaXRzKTsKICAgICAgcmVzdWx0VXNlZCA9IF9sU2hpZnREaWdpdHMoX2RpZ2l0cywgX3VzZWQsIG5zaCwgcmVzdWx0RGlnaXRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHlEaWdpdHMgPSBvdGhlci5fZGlnaXRzOwogICAgICB5VXNlZCA9IG90aGVyLl91c2VkOwogICAgICAvLyBFeHRyYSBkaWdpdCB0byBob2xkIHBvc3NpYmxlIF9tdWxBZGQgY2FycnkuCiAgICAgIHJlc3VsdERpZ2l0cyA9IF9jbG9uZURpZ2l0cyhfZGlnaXRzLCAwLCBfdXNlZCwgX3VzZWQgKyAxKTsKICAgICAgcmVzdWx0VXNlZCA9IF91c2VkOwogICAgfQogICAgVWludDMyTGlzdCBhcmdzID0gX25ld0RpZ2l0cyg0KTsKICAgIGFyZ3NbX2Rpdmlzb3JMb3dUb3BEaWdpdF0gPSB5RGlnaXRzW3lVc2VkIC0gMl07CiAgICBhcmdzW19kaXZpc29yVG9wRGlnaXRdID0geURpZ2l0c1t5VXNlZCAtIDFdOwogICAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nLCBtYWtlIHN1cmUgeVVzZWQsIGksIGFuZCBqIGFyZSBldmVuLgogICAgYXNzZXJ0KHlVc2VkLmlzRXZlbik7CiAgICB2YXIgaSA9IHJlc3VsdFVzZWQgKyAocmVzdWx0VXNlZCAmIDEpOwogICAgdmFyIGogPSBpIC0geVVzZWQ7CiAgICAvLyB0bXBEaWdpdHMgaXMgYSB0ZW1wb3JhcnkgYXJyYXkgb2YgaSAoZXZlbiByZXN1bHRVc2VkKSBkaWdpdHMuCiAgICB2YXIgdG1wRGlnaXRzID0gX25ld0RpZ2l0cyhpKTsKICAgIHZhciB0bXBVc2VkID0gX2RsU2hpZnREaWdpdHMoeURpZ2l0cywgeVVzZWQsIGosIHRtcERpZ2l0cyk7CiAgICAvLyBFeHBsaWNpdCBmaXJzdCBkaXZpc2lvbiBzdGVwIGluIGNhc2Ugbm9ybWFsaXplZCBkaXZpZGVuZCBpcyBsYXJnZXIgb3IKICAgIC8vIGVxdWFsIHRvIHNoaWZ0ZWQgbm9ybWFsaXplZCBkaXZpc29yLgogICAgaWYgKF9jb21wYXJlRGlnaXRzKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkKSA+PSAwKSB7CiAgICAgIGFzc2VydChpID09IHJlc3VsdFVzZWQpOwogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZCsrXSA9IDE7IC8vIFF1b3RpZW50ID0gMS4KICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci4KICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEFjY291bnQgZm9yIHBvc3NpYmxlIGNhcnJ5IGluIF9tdWxBZGQgc3RlcC4KICAgICAgcmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWQrK10gPSAwOwogICAgfQogICAgaWYgKHJlc3VsdFVzZWQuaXNPZGQpIHsKICAgICAgcmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWRdID0gMDsgLy8gTGVhZGluZyB6ZXJvIGZvciA2NC1iaXQgcHJvY2Vzc2luZy4KICAgIH0KICAgIC8vIE5lZ2F0ZSB5IHNvIHdlIGNhbiBsYXRlciB1c2UgX211bEFkZCBpbnN0ZWFkIG9mIG5vbi1leGlzdGVudCBfbXVsU3ViLgogICAgdmFyIG55RGlnaXRzID0gX25ld0RpZ2l0cyh5VXNlZCArIDIpOwogICAgbnlEaWdpdHNbeVVzZWRdID0gMTsKICAgIF9hYnNTdWIobnlEaWdpdHMsIHlVc2VkICsgMSwgeURpZ2l0cywgeVVzZWQsIG55RGlnaXRzKTsKICAgIC8vIG55RGlnaXRzIGlzIHJlYWQtb25seSBhbmQgaGFzIHlVc2VkIGRpZ2l0cyAocG9zc2libHkgaW5jbHVkaW5nIHNldmVyYWwKICAgIC8vIGxlYWRpbmcgemVyb3MpIHBsdXMgYSBsZWFkaW5nIHplcm8gZm9yIDY0LWJpdCBwcm9jZXNzaW5nLgogICAgLy8gcmVzdWx0RGlnaXRzIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uCiAgICAvLyByZXN1bHREaWdpdHNbMC4ueVVzZWQtMV0gaXMgdGhlIGN1cnJlbnQgcmVtYWluZGVyLgogICAgLy8gcmVzdWx0RGlnaXRzW3lVc2VkLi5yZXN1bHRVc2VkLTFdIGlzIHRoZSBjdXJyZW50IHF1b3RpZW50LgogICAgLS1pOwogICAgd2hpbGUgKGogPiAwKSB7CiAgICAgIHZhciBkMCA9IF9lc3RpbWF0ZVF1b3RpZW50RGlnaXQoYXJncywgcmVzdWx0RGlnaXRzLCBpKTsKICAgICAgaiAtPSBkMDsKICAgICAgdmFyIGQxID0KICAgICAgICAgIF9tdWxBZGQoYXJncywgX3F1b3RpZW50RGlnaXQsIG55RGlnaXRzLCAwLCByZXN1bHREaWdpdHMsIGosIHlVc2VkKTsKICAgICAgLy8gX2VzdGltYXRlUXVvdGllbnREaWdpdCBhbmQgX211bEFkZCBtdXN0IGFncmVlIG9uIHRoZSBudW1iZXIgb2YgZGlnaXRzCiAgICAgIC8vIHRvIHByb2Nlc3MuCiAgICAgIGFzc2VydChkMCA9PSBkMSk7CiAgICAgIGlmIChkMCA9PSAxKSB7CiAgICAgICAgaWYgKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50RGlnaXRdKSB7CiAgICAgICAgICAvLyBSZXVzaW5nIHRoZSBhbHJlYWR5IGV4aXN0aW5nIHRtcERpZ2l0cyBhcnJheS4KICAgICAgICAgIHZhciB0bXBVc2VkID0gX2RsU2hpZnREaWdpdHMobnlEaWdpdHMsIHlVc2VkLCBqLCB0bXBEaWdpdHMpOwogICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIHdoaWxlIChyZXN1bHREaWdpdHNbaV0gPCAtLWFyZ3NbX3F1b3RpZW50RGlnaXRdKSB7CiAgICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChkMCA9PSAyKTsKICAgICAgICBhc3NlcnQocmVzdWx0RGlnaXRzW2ldIDw9IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSk7CiAgICAgICAgaWYgKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSB8fAogICAgICAgICAgICByZXN1bHREaWdpdHNbaSAtIDFdIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgIC8vIFJldXNpbmcgdGhlIGFscmVhZHkgZXhpc3RpbmcgdG1wRGlnaXRzIGFycmF5LgogICAgICAgICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyhueURpZ2l0cywgeVVzZWQsIGosIHRtcERpZ2l0cyk7CiAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgaWYgKGFyZ3NbX3F1b3RpZW50RGlnaXRdID09IDApIHsKICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudEhpZ2hEaWdpdF07CiAgICAgICAgICB9CiAgICAgICAgICAtLWFyZ3NbX3F1b3RpZW50RGlnaXRdOwogICAgICAgICAgYXNzZXJ0KHJlc3VsdERpZ2l0c1tpXSA8PSBhcmdzW19xdW90aWVudEhpZ2hEaWdpdF0pOwogICAgICAgICAgd2hpbGUgKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSB8fAogICAgICAgICAgICAgIHJlc3VsdERpZ2l0c1tpIC0gMV0gPCBhcmdzW19xdW90aWVudERpZ2l0XSkgewogICAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgICBpZiAoYXJnc1tfcXVvdGllbnREaWdpdF0gPT0gMCkgewogICAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnREaWdpdF07CiAgICAgICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaSAtPSBkMDsKICAgIH0KICAgIC8vIENhY2hlIHJlc3VsdC4KICAgIF9sYXN0RGl2aWRlbmREaWdpdHMgPSBfZGlnaXRzOwogICAgX2xhc3REaXZpZGVuZFVzZWQgPSBfdXNlZDsKICAgIF9sYXN0RGl2aXNvckRpZ2l0cyA9IG90aGVyLl9kaWdpdHM7CiAgICBfbGFzdERpdmlzb3JVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICBfbGFzdFF1b1JlbURpZ2l0cyA9IHJlc3VsdERpZ2l0czsKICAgIF9sYXN0UXVvUmVtVXNlZCA9IHJlc3VsdFVzZWQ7CiAgICBfbGFzdFJlbVVzZWQgPSB5VXNlZDsKICAgIF9sYXN0UmVtX25zaCA9IG5zaDsKICB9CgogIC8vIEN1c3RvbWl6ZWQgdmVyc2lvbiBvZiBfcmVtKCkgbWluaW1pemluZyBhbGxvY2F0aW9ucyBmb3IgdXNlIGluIHJlZHVjdGlvbi4KICAvLyBJbnB1dDoKICAvLyAgIHhEaWdpdHNbMC4ueFVzZWQtMV06IHBvc2l0aXZlIGRpdmlkZW5kLgogIC8vICAgeURpZ2l0c1swLi55VXNlZC0xXTogbm9ybWFsaXplZCBwb3NpdGl2ZSBkaXZpc29yLgogIC8vICAgbnlEaWdpdHNbMC4ueVVzZWQtMV06IG5lZ2F0ZWQgeURpZ2l0cy4KICAvLyAgIG5zaDogbm9ybWFsaXphdGlvbiBzaGlmdCBhbW91bnQuCiAgLy8gICBhcmdzOiB0b3AgeSBkaWdpdChzKSBhbmQgcGxhY2UgaG9sZGVyIGZvciBlc3RpbWF0ZWQgcXVvdGllbnQgZGlnaXQocykuCiAgLy8gICB0bXBEaWdpdHM6IHRlbXAgYXJyYXkgb2YgMip5VXNlZCBkaWdpdHMuCiAgLy8gICByZXN1bHREaWdpdHM6IHJlc3VsdCBkaWdpdHMgYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIHRlbXBvcmFyaWx5IGhvbGQKICAvLyAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVkIHF1b3RpZW50IGFuZCBub3JtYWxpemVkIHJlbWFpbmRlci4KICAvLyBPdXRwdXQ6CiAgLy8gICByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXTogcG9zaXRpdmUgcmVtYWluZGVyLgogIC8vIFJldHVybnMgcmVzdWx0VXNlZC4KICBzdGF0aWMgaW50IF9yZW1EaWdpdHMoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywKICAgICAgaW50IHhVc2VkLAogICAgICBVaW50MzJMaXN0IHlEaWdpdHMsCiAgICAgIGludCB5VXNlZCwKICAgICAgVWludDMyTGlzdCBueURpZ2l0cywKICAgICAgaW50IG5zaCwKICAgICAgVWludDMyTGlzdCBhcmdzLAogICAgICBVaW50MzJMaXN0IHRtcERpZ2l0cywKICAgICAgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIC8vIEluaXRpYWxpemUgcmVzdWx0RGlnaXRzIHRvIG5vcm1hbGl6ZWQgcG9zaXRpdmUgZGl2aWRlbmQuCiAgICB2YXIgcmVzdWx0VXNlZCA9IF9sU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIG5zaCwgcmVzdWx0RGlnaXRzKTsKICAgIC8vIEZvciA2NC1iaXQgcHJvY2Vzc2luZywgbWFrZSBzdXJlIHlVc2VkLCBpLCBhbmQgaiBhcmUgZXZlbi4KICAgIGFzc2VydCh5VXNlZC5pc0V2ZW4pOwogICAgdmFyIGkgPSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKTsKICAgIHZhciBqID0gaSAtIHlVc2VkOwogICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyh5RGlnaXRzLCB5VXNlZCwgaiwgdG1wRGlnaXRzKTsKICAgIC8vIEV4cGxpY2l0IGZpcnN0IGRpdmlzaW9uIHN0ZXAgaW4gY2FzZSBub3JtYWxpemVkIGRpdmlkZW5kIGlzIGxhcmdlciBvcgogICAgLy8gZXF1YWwgdG8gc2hpZnRlZCBub3JtYWxpemVkIGRpdmlzb3IuCiAgICBpZiAoX2NvbXBhcmVEaWdpdHMocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQpID49IDApIHsKICAgICAgYXNzZXJ0KGkgPT0gcmVzdWx0VXNlZCk7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkKytdID0gMTsgLy8gUXVvdGllbnQgPSAxLgogICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLgogICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gQWNjb3VudCBmb3IgcG9zc2libGUgY2FycnkgaW4gX211bEFkZCBzdGVwLgogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZCsrXSA9IDA7CiAgICB9CiAgICBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOyAvLyBMZWFkaW5nIHplcm8gZm9yIDY0LWJpdCBwcm9jZXNzaW5nLgogICAgfQogICAgLy8gTmVnYXRlZCB5RGlnaXRzIHBhc3NlZCBpbiBueURpZ2l0cyBhbGxvdyB0aGUgdXNlIG9mIF9tdWxBZGQgaW5zdGVhZCBvZgogICAgLy8gdW5pbXBsZW1lbnRlZCBfbXVsU3ViLgogICAgLy8gbnlEaWdpdHMgaXMgcmVhZC1vbmx5IGFuZCBoYXMgeVVzZWQgZGlnaXRzIChwb3NzaWJseSBpbmNsdWRpbmcgc2V2ZXJhbAogICAgLy8gbGVhZGluZyB6ZXJvcykgcGx1cyBhIGxlYWRpbmcgemVybyBmb3IgNjQtYml0IHByb2Nlc3NpbmcuCiAgICAvLyByZXN1bHREaWdpdHMgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4KICAgIC8vIHJlc3VsdERpZ2l0c1swLi55VXNlZC0xXSBpcyB0aGUgY3VycmVudCByZW1haW5kZXIuCiAgICAvLyByZXN1bHREaWdpdHNbeVVzZWQuLnJlc3VsdFVzZWQtMV0gaXMgdGhlIGN1cnJlbnQgcXVvdGllbnQuCiAgICAtLWk7CiAgICB3aGlsZSAoaiA+IDApIHsKICAgICAgdmFyIGQwID0gX2VzdGltYXRlUXVvdGllbnREaWdpdChhcmdzLCByZXN1bHREaWdpdHMsIGkpOwogICAgICBqIC09IGQwOwogICAgICB2YXIgZDEgPQogICAgICAgICAgX211bEFkZChhcmdzLCBfcXVvdGllbnREaWdpdCwgbnlEaWdpdHMsIDAsIHJlc3VsdERpZ2l0cywgaiwgeVVzZWQpOwogICAgICAvLyBfZXN0aW1hdGVRdW90aWVudERpZ2l0IGFuZCBfbXVsQWRkIG11c3QgYWdyZWUgb24gdGhlIG51bWJlciBvZiBkaWdpdHMKICAgICAgLy8gdG8gcHJvY2Vzcy4KICAgICAgYXNzZXJ0KGQwID09IGQxKTsKICAgICAgaWYgKGQwID09IDEpIHsKICAgICAgICBpZiAocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgIHZhciB0bXBVc2VkID0gX2RsU2hpZnREaWdpdHMobnlEaWdpdHMsIHlVc2VkLCBqLCB0bXBEaWdpdHMpOwogICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIHdoaWxlIChyZXN1bHREaWdpdHNbaV0gPCAtLWFyZ3NbX3F1b3RpZW50RGlnaXRdKSB7CiAgICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChkMCA9PSAyKTsKICAgICAgICBhc3NlcnQocmVzdWx0RGlnaXRzW2ldIDw9IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSk7CiAgICAgICAgaWYgKChyZXN1bHREaWdpdHNbaV0gPCBhcmdzW19xdW90aWVudEhpZ2hEaWdpdF0pIHx8CiAgICAgICAgICAgIChyZXN1bHREaWdpdHNbaSAtIDFdIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pKSB7CiAgICAgICAgICB2YXIgdG1wVXNlZCA9IF9kbFNoaWZ0RGlnaXRzKG55RGlnaXRzLCB5VXNlZCwgaiwgdG1wRGlnaXRzKTsKICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICBpZiAoYXJnc1tfcXVvdGllbnREaWdpdF0gPT0gMCkgewogICAgICAgICAgICAtLWFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XTsKICAgICAgICAgIH0KICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnREaWdpdF07CiAgICAgICAgICBhc3NlcnQocmVzdWx0RGlnaXRzW2ldIDw9IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSk7CiAgICAgICAgICB3aGlsZSAoKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSkgfHwKICAgICAgICAgICAgICAocmVzdWx0RGlnaXRzW2kgLSAxXSA8IGFyZ3NbX3F1b3RpZW50RGlnaXRdKSkgewogICAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgICBpZiAoYXJnc1tfcXVvdGllbnREaWdpdF0gPT0gMCkgewogICAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnREaWdpdF07CiAgICAgICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaSAtPSBkMDsKICAgIH0KICAgIC8vIFJldHVybiByZW1haW5kZXIsIGkuZS4gZGVub3JtYWxpemVkIHJlc3VsdERpZ2l0c1swLi55VXNlZC0xXS4KICAgIHJlc3VsdFVzZWQgPSB5VXNlZDsKICAgIGlmIChuc2ggPiAwKSB7CiAgICAgIC8vIERlbm9ybWFsaXplIHJlbWFpbmRlci4KICAgICAgcmVzdWx0VXNlZCA9IF9yU2hpZnREaWdpdHMocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCBuc2gsIHJlc3VsdERpZ2l0cyk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgLy8gVGhpcyBpcyB0aGUgW0plbmtpbnMgaGFzaCBmdW5jdGlvbl1bMV0gYnV0IHVzaW5nIG1hc2tpbmcgdG8ga2VlcAogICAgLy8gdmFsdWVzIGluIFNNSSByYW5nZS4KICAgIC8vCiAgICAvLyBbMV06IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmVua2luc19oYXNoX2Z1bmN0aW9uCgogICAgaW50IGNvbWJpbmUoaW50IGhhc2gsIGludCB2YWx1ZSkgewogICAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgdmFsdWUpOwogICAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDdmZmZmICYgaGFzaCkgPDwgMTApKTsKICAgICAgcmV0dXJuIGhhc2ggXiAoaGFzaCA+PiA2KTsKICAgIH0KCiAgICBpbnQgZmluaXNoKGludCBoYXNoKSB7CiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDNmZmZmZmYgJiBoYXNoKSA8PCAzKSk7CiAgICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4gMTEpOwogICAgICByZXR1cm4gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDAzZmZmICYgaGFzaCkgPDwgMTUpKTsKICAgIH0KCiAgICBpZiAoX2lzWmVybykgcmV0dXJuIDY3MDc7IC8vIEp1c3QgYSByYW5kb20gbnVtYmVyLgogICAgdmFyIGhhc2ggPSBfaXNOZWdhdGl2ZSA/IDgzNTg1IDogNDI5Njg5OyAvLyBBbHNvIHJhbmRvbS4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3VzZWQ7IGkrKykgewogICAgICBoYXNoID0gY29tYmluZShoYXNoLCBfZGlnaXRzW2ldKTsKICAgIH0KICAgIHJldHVybiBmaW5pc2goaGFzaCk7CiAgfQoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdGhpcyB2YWx1ZSBpcyBudW1lcmljYWxseSBlcXVhbCB0byBgb3RoZXJgLgogICAqCiAgICogSWYgW290aGVyXSBpcyBhIFtfQmlnSW50SW1wbF0gcmV0dXJucyB3aGV0aGVyIHRoZSB0d28gb3BlcmFuZHMgaGF2ZSB0aGUKICAgKiBzYW1lIHZhbHVlLgogICAqCiAgICogUmV0dXJucyBmYWxzZSBpZiBgb3RoZXJgIGlzIG5vdCBhIFtfQmlnSW50SW1wbF0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIF9CaWdJbnRJbXBsICYmIGNvbXBhcmVUbyhvdGhlcikgPT0gMDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCB0byBzdG9yZSB0aGlzIGJpZyBpbnRlZ2VyLgogICAqCiAgICogVGhlIG51bWJlciBvZiBiaXRzIGV4Y2x1ZGVzIHRoZSBzaWduIGJpdCwgd2hpY2ggZ2l2ZXMgdGhlIG5hdHVyYWwgbGVuZ3RoCiAgICogZm9yIG5vbi1uZWdhdGl2ZSAodW5zaWduZWQpIHZhbHVlcy4gIE5lZ2F0aXZlIHZhbHVlcyBhcmUgY29tcGxlbWVudGVkIHRvCiAgICogcmV0dXJuIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJpdCB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgc2lnbiBiaXQuCiAgICoKICAgKiBUbyBmaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gc3RvcmUgdGhlIHZhbHVlIGFzIGEgc2lnbmVkIHZhbHVlLAogICAqIGFkZCBvbmUsIGkuZS4gdXNlIGB4LmJpdExlbmd0aCArIDFgLgogICAqCiAgICogYGBgCiAgICogeC5iaXRMZW5ndGggPT0gKC14LTEpLmJpdExlbmd0aAogICAqCiAgICogbmV3IEJpZ0ludC5mcm9tKDMpLmJpdExlbmd0aCA9PSAyOyAgIC8vIDAwMDAwMDExCiAgICogbmV3IEJpZ0ludC5mcm9tKDIpLmJpdExlbmd0aCA9PSAyOyAgIC8vIDAwMDAwMDEwCiAgICogbmV3IEJpZ0ludC5mcm9tKDEpLmJpdExlbmd0aCA9PSAxOyAgIC8vIDAwMDAwMDAxCiAgICogbmV3IEJpZ0ludC5mcm9tKDApLmJpdExlbmd0aCA9PSAwOyAgIC8vIDAwMDAwMDAwCiAgICogbmV3IEJpZ0ludC5mcm9tKC0xKS5iaXRMZW5ndGggPT0gMDsgIC8vIDExMTExMTExCiAgICogbmV3IEJpZ0ludC5mcm9tKC0yKS5iaXRMZW5ndGggPT0gMTsgIC8vIDExMTExMTEwCiAgICogbmV3IEJpZ0ludC5mcm9tKC0zKS5iaXRMZW5ndGggPT0gMjsgIC8vIDExMTExMTAxCiAgICogbmV3IEJpZ0ludC5mcm9tKC00KS5iaXRMZW5ndGggPT0gMjsgIC8vIDExMTExMTAwCiAgICogYGBgCiAgICovCiAgaW50IGdldCBiaXRMZW5ndGggewogICAgaWYgKF91c2VkID09IDApIHJldHVybiAwOwogICAgaWYgKF9pc05lZ2F0aXZlKSByZXR1cm4gKH50aGlzKS5iaXRMZW5ndGg7CiAgICByZXR1cm4gX2RpZ2l0Qml0cyAqIChfdXNlZCAtIDEpICsgX2RpZ2l0c1tfdXNlZCAtIDFdLmJpdExlbmd0aDsKICB9CgogIC8qKgogICAqIFRydW5jYXRpbmcgZGl2aXNpb24gb3BlcmF0b3IuCiAgICoKICAgKiBQZXJmb3JtcyBhIHRydW5jYXRpbmcgaW50ZWdlciBkaXZpc2lvbiwgd2hlcmUgdGhlIHJlbWFpbmRlciBpcyBkaXNjYXJkZWQuCiAgICoKICAgKiBUaGUgcmVtYWluZGVyIGNhbiBiZSBjb21wdXRlZCB1c2luZyB0aGUgW3JlbWFpbmRlcl0gbWV0aG9kLgogICAqCiAgICogRXhhbXBsZXM6CiAgICogYGBgCiAgICogdmFyIHNldmVuID0gbmV3IEJpZ0ludC5mcm9tKDcpOwogICAqIHZhciB0aHJlZSA9IG5ldyBCaWdJbnQuZnJvbSgzKTsKICAgKiBzZXZlbiB+LyB0aHJlZTsgICAgLy8gPT4gMgogICAqICgtc2V2ZW4pIH4vIHRocmVlOyAvLyA9PiAtMgogICAqIHNldmVuIH4vIC10aHJlZTsgICAvLyA9PiAtMgogICAqIHNldmVuLnJlbWFpbmRlcih0aHJlZSk7ICAgIC8vID0+IDEKICAgKiAoLXNldmVuKS5yZW1haW5kZXIodGhyZWUpOyAvLyA9PiAtMQogICAqIHNldmVuLnJlbWFpbmRlcigtdGhyZWUpOyAgIC8vID0+IDEKICAgKiBgYGAKICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciB+LyhCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChvdGhlci5fdXNlZCA9PSAwKSB7CiAgICAgIHRocm93IGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogICAgfQogICAgcmV0dXJuIF9kaXYob3RoZXIpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uIG9mIGB0aGlzYCBieSBbb3RoZXJdLgogICAqCiAgICogVGhlIHJlc3VsdCBgcmAgb2YgdGhpcyBvcGVyYXRpb24gc2F0aXNmaWVzOgogICAqIGB0aGlzID09ICh0aGlzIH4vIG90aGVyKSAqIG90aGVyICsgcmAuCiAgICogQXMgYSBjb25zZXF1ZW5jZSB0aGUgcmVtYWluZGVyIGByYCBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aWRlciBgdGhpc2AuCiAgICovCiAgX0JpZ0ludEltcGwgcmVtYWluZGVyKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKG90aGVyLl91c2VkID09IDApIHsKICAgICAgdGhyb3cgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gX3JlbShvdGhlcik7CiAgfQoKICAvLy8gRGl2aXNpb24gb3BlcmF0b3IuCiAgZG91YmxlIG9wZXJhdG9yIC8oQmlnSW50IG90aGVyKSA9PiB0aGlzLnRvRG91YmxlKCkgLyBvdGhlci50b0RvdWJsZSgpOwoKICAvKiogUmVsYXRpb25hbCBsZXNzIHRoYW4gb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA8KEJpZ0ludCBvdGhlcikgPT4gY29tcGFyZVRvKG90aGVyKSA8IDA7CgogIC8qKiBSZWxhdGlvbmFsIGxlc3MgdGhhbiBvciBlcXVhbCBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yIDw9KEJpZ0ludCBvdGhlcikgPT4gY29tcGFyZVRvKG90aGVyKSA8PSAwOwoKICAvKiogUmVsYXRpb25hbCBncmVhdGVyIHRoYW4gb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA+KEJpZ0ludCBvdGhlcikgPT4gY29tcGFyZVRvKG90aGVyKSA+IDA7CgogIC8qKiBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yID49KEJpZ0ludCBvdGhlcikgPT4gY29tcGFyZVRvKG90aGVyKSA+PSAwOwoKICAvKioKICAgKiBFdWNsaWRlYW4gbW9kdWxvIG9wZXJhdG9yLgogICAqCiAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBFdWNsaWRlYW4gZGl2aXNpb24uIFRoZSBFdWNsaWRlYW4gZGl2aXNpb24gb2YKICAgKiB0d28gaW50ZWdlcnMgYGFgIGFuZCBgYmAgeWllbGRzIHR3byBpbnRlZ2VycyBgcWAgYW5kIGByYCBzdWNoIHRoYXQKICAgKiBgYSA9PSBiICogcSArIHJgIGFuZCBgMCA8PSByIDwgYi5hYnMoKWAuCiAgICoKICAgKiBUaGUgc2lnbiBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgYHJgIGlzIGFsd2F5cyBwb3NpdGl2ZS4KICAgKgogICAqIFNlZSBbcmVtYWluZGVyXSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgdHJ1bmNhdGluZyBkaXZpc2lvbi4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciAlKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKG90aGVyLl91c2VkID09IDApIHsKICAgICAgdGhyb3cgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3JlbShvdGhlcik7CiAgICBpZiAocmVzdWx0Ll9pc05lZ2F0aXZlKSB7CiAgICAgIGlmIChvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdCAtIG90aGVyOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIG90aGVyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiB0aGlzIGJpZyBpbnRlZ2VyLgogICAqCiAgICogUmV0dXJucyAwIGZvciB6ZXJvLCAtMSBmb3IgdmFsdWVzIGxlc3MgdGhhbiB6ZXJvIGFuZAogICAqICsxIGZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8uCiAgICovCiAgaW50IGdldCBzaWduIHsKICAgIGlmIChfdXNlZCA9PSAwKSByZXR1cm4gMDsKICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IC0xIDogMTsKICB9CgogIC8vLyBXaGV0aGVyIHRoaXMgYmlnIGludGVnZXIgaXMgZXZlbi4KICBib29sIGdldCBpc0V2ZW4gPT4gX3VzZWQgPT0gMCB8fCAoX2RpZ2l0c1swXSAmIDEpID09IDA7CgogIC8vLyBXaGV0aGVyIHRoaXMgYmlnIGludGVnZXIgaXMgb2RkLgogIGJvb2wgZ2V0IGlzT2RkID0+ICFpc0V2ZW47CgogIC8vLyBXaGV0aGVyIHRoaXMgbnVtYmVyIGlzIG5lZ2F0aXZlLgogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gX2lzTmVnYXRpdmU7CgogIF9CaWdJbnRJbXBsIHBvdyhpbnQgZXhwb25lbnQpIHsKICAgIGlmIChleHBvbmVudCA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkV4cG9uZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlOiAkZXhwb25lbnQiKTsKICAgIH0KICAgIGlmIChleHBvbmVudCA9PSAwKSByZXR1cm4gb25lOwoKICAgIC8vIEV4cG9uZW50aWF0aW9uIGJ5IHNxdWFyaW5nLgogICAgdmFyIHJlc3VsdCA9IG9uZTsKICAgIHZhciBiYXNlID0gdGhpczsKICAgIHdoaWxlIChleHBvbmVudCAhPSAwKSB7CiAgICAgIGlmICgoZXhwb25lbnQgJiAxKSA9PSAxKSB7CiAgICAgICAgcmVzdWx0ICo9IGJhc2U7CiAgICAgIH0KICAgICAgZXhwb25lbnQgPj49IDE7CiAgICAgIC8vIFNraXAgdW5uZWNlc3Nhcnkgb3BlcmF0aW9uLgogICAgICBpZiAoZXhwb25lbnQgIT0gMCkgewogICAgICAgIGJhc2UgKj0gYmFzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBpbnRlZ2VyIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW2V4cG9uZW50XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgW21vZHVsdXNdIG11c3QgYmUKICAgKiBwb3NpdGl2ZS4KICAgKi8KICBfQmlnSW50SW1wbCBtb2RQb3coQmlnSW50IGJpZ0V4cG9uZW50LCBCaWdJbnQgYmlnTW9kdWx1cykgewogICAgX0JpZ0ludEltcGwgZXhwb25lbnQgPSBiaWdFeHBvbmVudDsKICAgIF9CaWdJbnRJbXBsIG1vZHVsdXMgPSBiaWdNb2R1bHVzOwogICAgaWYgKGV4cG9uZW50Ll9pc05lZ2F0aXZlKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJleHBvbmVudCBtdXN0IGJlIHBvc2l0aXZlOiAkZXhwb25lbnQiKTsKICAgIH0KICAgIGlmIChtb2R1bHVzIDw9IHplcm8pIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIm1vZHVsdXMgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZTogJG1vZHVsdXMiKTsKICAgIH0KICAgIGlmIChleHBvbmVudC5faXNaZXJvKSByZXR1cm4gb25lOwoKICAgIGZpbmFsIGV4cG9uZW50Qml0bGVuID0gZXhwb25lbnQuYml0TGVuZ3RoOwogICAgaWYgKGV4cG9uZW50Qml0bGVuIDw9IDApIHJldHVybiBvbmU7CiAgICBmaW5hbCBib29sIGNhbm5vdFVzZU1vbnRnb21lcnkgPSBtb2R1bHVzLmlzRXZlbiB8fCBhYnMoKSA+PSBtb2R1bHVzOwogICAgaWYgKGNhbm5vdFVzZU1vbnRnb21lcnkgfHwgZXhwb25lbnRCaXRsZW4gPCA2NCkgewogICAgICBfQmlnSW50UmVkdWN0aW9uIHogPSAoY2Fubm90VXNlTW9udGdvbWVyeSB8fCBleHBvbmVudEJpdGxlbiA8IDgpCiAgICAgICAgICA/IG5ldyBfQmlnSW50Q2xhc3NpY1JlZHVjdGlvbihtb2R1bHVzKQogICAgICAgICAgOiBuZXcgX0JpZ0ludE1vbnRnb21lcnlSZWR1Y3Rpb24obW9kdWx1cyk7CiAgICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgdmFyIHJlc3VsdDJEaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgdmFyIGdEaWdpdHMgPSBfbmV3RGlnaXRzKHouX25vcm1Nb2R1bHVzVXNlZCk7CiAgICAgIHZhciBnVXNlZCA9IHouX2NvbnZlcnQodGhpcywgZ0RpZ2l0cyk7CiAgICAgIC8vIEluaXRpYWxpemUgcmVzdWx0IHdpdGggZy4KICAgICAgLy8gQ29weSBsZWFkaW5nIHplcm8gaWYgYW55LgogICAgICBmb3IgKGludCBqID0gZ1VzZWQgKyAoZ1VzZWQgJiAxKSAtIDE7IGogPj0gMDsgai0tKSB7CiAgICAgICAgcmVzdWx0RGlnaXRzW2pdID0gZ0RpZ2l0c1tqXTsKICAgICAgfQogICAgICB2YXIgcmVzdWx0VXNlZCA9IGdVc2VkOwogICAgICB2YXIgcmVzdWx0MlVzZWQ7CiAgICAgIGZvciAoaW50IGkgPSBleHBvbmVudEJpdGxlbiAtIDI7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgcmVzdWx0MlVzZWQgPSB6Ll9zcXIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCByZXN1bHQyRGlnaXRzKTsKICAgICAgICBpZiAoZXhwb25lbnQuX2RpZ2l0c1tpIH4vIF9kaWdpdEJpdHNdICYgKDEgPDwgKGkgJSBfZGlnaXRCaXRzKSkgIT0gMCkgewogICAgICAgICAgcmVzdWx0VXNlZCA9CiAgICAgICAgICAgICAgei5fbXVsKHJlc3VsdDJEaWdpdHMsIHJlc3VsdDJVc2VkLCBnRGlnaXRzLCBnVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gU3dhcCByZXN1bHQgYW5kIHJlc3VsdDIuCiAgICAgICAgICB2YXIgdG1wRGlnaXRzID0gcmVzdWx0RGlnaXRzOwogICAgICAgICAgdmFyIHRtcFVzZWQgPSByZXN1bHRVc2VkOwogICAgICAgICAgcmVzdWx0RGlnaXRzID0gcmVzdWx0MkRpZ2l0czsKICAgICAgICAgIHJlc3VsdFVzZWQgPSByZXN1bHQyVXNlZDsKICAgICAgICAgIHJlc3VsdDJEaWdpdHMgPSB0bXBEaWdpdHM7CiAgICAgICAgICByZXN1bHQyVXNlZCA9IHRtcFVzZWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB6Ll9yZXZlcnQocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkKTsKICAgIH0KICAgIHZhciBrOwogICAgaWYgKGV4cG9uZW50Qml0bGVuIDwgMTgpCiAgICAgIGsgPSAxOwogICAgZWxzZSBpZiAoZXhwb25lbnRCaXRsZW4gPCA0OCkKICAgICAgayA9IDM7CiAgICBlbHNlIGlmIChleHBvbmVudEJpdGxlbiA8IDE0NCkKICAgICAgayA9IDQ7CiAgICBlbHNlIGlmIChleHBvbmVudEJpdGxlbiA8IDc2OCkKICAgICAgayA9IDU7CiAgICBlbHNlCiAgICAgIGsgPSA2OwogICAgX0JpZ0ludFJlZHVjdGlvbiB6ID0gbmV3IF9CaWdJbnRNb250Z29tZXJ5UmVkdWN0aW9uKG1vZHVsdXMpOwogICAgdmFyIG4gPSAzOwogICAgZmluYWwgazEgPSBrIC0gMTsKICAgIGZpbmFsIGttID0gKDEgPDwgaykgLSAxOwogICAgTGlzdCBnRGlnaXRzID0gbmV3IExpc3Qoa20gKyAxKTsKICAgIExpc3QgZ1VzZWQgPSBuZXcgTGlzdChrbSArIDEpOwogICAgZ0RpZ2l0c1sxXSA9IF9uZXdEaWdpdHMoei5fbm9ybU1vZHVsdXNVc2VkKTsKICAgIGdVc2VkWzFdID0gei5fY29udmVydCh0aGlzLCBnRGlnaXRzWzFdKTsKICAgIGlmIChrID4gMSkgewogICAgICB2YXIgZzJEaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgdmFyIGcyVXNlZCA9IHouX3NxcihnRGlnaXRzWzFdLCBnVXNlZFsxXSwgZzJEaWdpdHMpOwogICAgICB3aGlsZSAobiA8PSBrbSkgewogICAgICAgIGdEaWdpdHNbbl0gPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgICBnVXNlZFtuXSA9CiAgICAgICAgICAgIHouX211bChnMkRpZ2l0cywgZzJVc2VkLCBnRGlnaXRzW24gLSAyXSwgZ1VzZWRbbiAtIDJdLCBnRGlnaXRzW25dKTsKICAgICAgICBuICs9IDI7CiAgICAgIH0KICAgIH0KICAgIHZhciB3OwogICAgdmFyIGlzT25lID0gdHJ1ZTsKICAgIHZhciByZXN1bHREaWdpdHMgPSBvbmUuX2RpZ2l0czsKICAgIHZhciByZXN1bHRVc2VkID0gb25lLl91c2VkOwogICAgdmFyIHJlc3VsdDJEaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgIHZhciByZXN1bHQyVXNlZDsKICAgIHZhciBleHBvbmVudERpZ2l0cyA9IGV4cG9uZW50Ll9kaWdpdHM7CiAgICB2YXIgaiA9IGV4cG9uZW50Ll91c2VkIC0gMTsKICAgIHZhciBpID0gZXhwb25lbnREaWdpdHNbal0uYml0TGVuZ3RoIC0gMTsKICAgIHdoaWxlIChqID49IDApIHsKICAgICAgaWYgKGkgPj0gazEpIHsKICAgICAgICB3ID0gKGV4cG9uZW50RGlnaXRzW2pdID4+IChpIC0gazEpKSAmIGttOwogICAgICB9IGVsc2UgewogICAgICAgIHcgPSAoZXhwb25lbnREaWdpdHNbal0gJiAoKDEgPDwgKGkgKyAxKSkgLSAxKSkgPDwgKGsxIC0gaSk7CiAgICAgICAgaWYgKGogPiAwKSB7CiAgICAgICAgICB3IHw9IGV4cG9uZW50RGlnaXRzW2ogLSAxXSA+PiAoX2RpZ2l0Qml0cyArIGkgLSBrMSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG4gPSBrOwogICAgICB3aGlsZSAoKHcgJiAxKSA9PSAwKSB7CiAgICAgICAgdyA+Pj0gMTsKICAgICAgICAtLW47CiAgICAgIH0KICAgICAgaWYgKChpIC09IG4pIDwgMCkgewogICAgICAgIGkgKz0gX2RpZ2l0Qml0czsKICAgICAgICAtLWo7CiAgICAgIH0KICAgICAgaWYgKGlzT25lKSB7CiAgICAgICAgLy8gciA9PSAxLCBkb24ndCBib3RoZXIgc3F1YXJpbmcgb3IgbXVsdGlwbHlpbmcgaXQuCiAgICAgICAgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cygyICogei5fbm9ybU1vZHVsdXNVc2VkICsgMik7CiAgICAgICAgcmVzdWx0VXNlZCA9IGdVc2VkW3ddOwogICAgICAgIHZhciBnd0RpZ2l0cyA9IGdEaWdpdHNbd107CiAgICAgICAgdmFyIHJpID0gcmVzdWx0VXNlZCArIChyZXN1bHRVc2VkICYgMSk7IC8vIENvcHkgbGVhZGluZyB6ZXJvIGlmIGFueS4KICAgICAgICB3aGlsZSAoLS1yaSA+PSAwKSB7CiAgICAgICAgICByZXN1bHREaWdpdHNbcmldID0gZ3dEaWdpdHNbcmldOwogICAgICAgIH0KICAgICAgICBpc09uZSA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHdoaWxlIChuID4gMSkgewogICAgICAgICAgcmVzdWx0MlVzZWQgPSB6Ll9zcXIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCByZXN1bHQyRGlnaXRzKTsKICAgICAgICAgIHJlc3VsdFVzZWQgPSB6Ll9zcXIocmVzdWx0MkRpZ2l0cywgcmVzdWx0MlVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICBuIC09IDI7CiAgICAgICAgfQogICAgICAgIGlmIChuID4gMCkgewogICAgICAgICAgcmVzdWx0MlVzZWQgPSB6Ll9zcXIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCByZXN1bHQyRGlnaXRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHN3YXBEaWdpdHMgPSByZXN1bHREaWdpdHM7CiAgICAgICAgICB2YXIgc3dhcFVzZWQgPSByZXN1bHRVc2VkOwogICAgICAgICAgcmVzdWx0RGlnaXRzID0gcmVzdWx0MkRpZ2l0czsKICAgICAgICAgIHJlc3VsdFVzZWQgPSByZXN1bHQyVXNlZDsKICAgICAgICAgIHJlc3VsdDJEaWdpdHMgPSBzd2FwRGlnaXRzOwogICAgICAgICAgcmVzdWx0MlVzZWQgPSBzd2FwVXNlZDsKICAgICAgICB9CiAgICAgICAgcmVzdWx0VXNlZCA9IHouX211bCgKICAgICAgICAgICAgcmVzdWx0MkRpZ2l0cywgcmVzdWx0MlVzZWQsIGdEaWdpdHNbd10sIGdVc2VkW3ddLCByZXN1bHREaWdpdHMpOwogICAgICB9CiAgICAgIHdoaWxlIChqID49IDAgJiYgKGV4cG9uZW50RGlnaXRzW2pdICYgKDEgPDwgaSkpID09IDApIHsKICAgICAgICByZXN1bHQyVXNlZCA9IHouX3NxcihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHJlc3VsdDJEaWdpdHMpOwogICAgICAgIHZhciBzd2FwRGlnaXRzID0gcmVzdWx0RGlnaXRzOwogICAgICAgIHZhciBzd2FwVXNlZCA9IHJlc3VsdFVzZWQ7CiAgICAgICAgcmVzdWx0RGlnaXRzID0gcmVzdWx0MkRpZ2l0czsKICAgICAgICByZXN1bHRVc2VkID0gcmVzdWx0MlVzZWQ7CiAgICAgICAgcmVzdWx0MkRpZ2l0cyA9IHN3YXBEaWdpdHM7CiAgICAgICAgcmVzdWx0MlVzZWQgPSBzd2FwVXNlZDsKICAgICAgICBpZiAoLS1pIDwgMCkgewogICAgICAgICAgaSA9IF9kaWdpdEJpdHMgLSAxOwogICAgICAgICAgLS1qOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXNzZXJ0KCFpc09uZSk7CiAgICByZXR1cm4gei5fcmV2ZXJ0KHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCk7CiAgfQoKICAvLyBJZiBpbnYgaXMgZmFsc2UsIHJldHVybnMgZ2NkKHgsIHkpLgogIC8vIElmIGludiBpcyB0cnVlIGFuZCBnY2QoeCwgeSkgPSAxLCByZXR1cm5zIGQsIHNvIHRoYXQgYyp4ICsgZCp5ID0gMS4KICAvLyBJZiBpbnYgaXMgdHJ1ZSBhbmQgZ2NkKHgsIHkpICE9IDEsIHRocm93cyBFeGNlcHRpb24oIk5vdCBjb3ByaW1lIikuCiAgc3RhdGljIF9CaWdJbnRJbXBsIF9iaW5hcnlHY2QoX0JpZ0ludEltcGwgeCwgX0JpZ0ludEltcGwgeSwgYm9vbCBpbnYpIHsKICAgIHZhciB4RGlnaXRzID0geC5fZGlnaXRzOwogICAgdmFyIHlEaWdpdHMgPSB5Ll9kaWdpdHM7CiAgICB2YXIgeFVzZWQgPSB4Ll91c2VkOwogICAgdmFyIHlVc2VkID0geS5fdXNlZDsKICAgIHZhciBtYXhVc2VkID0gX21heCh4VXNlZCwgeVVzZWQpOwogICAgZmluYWwgbWF4TGVuID0gbWF4VXNlZCArIChtYXhVc2VkICYgMSk7CiAgICB4RGlnaXRzID0gX2Nsb25lRGlnaXRzKHhEaWdpdHMsIDAsIHhVc2VkLCBtYXhMZW4pOwogICAgeURpZ2l0cyA9IF9jbG9uZURpZ2l0cyh5RGlnaXRzLCAwLCB5VXNlZCwgbWF4TGVuKTsKICAgIGludCBzaGlmdEFtb3VudCA9IDA7CiAgICBpZiAoaW52KSB7CiAgICAgIGlmICgoeVVzZWQgPT0gMSkgJiYgKHlEaWdpdHNbMF0gPT0gMSkpIHJldHVybiBvbmU7CiAgICAgIGlmICgoeVVzZWQgPT0gMCkgfHwgKHlEaWdpdHNbMF0uaXNFdmVuICYmIHhEaWdpdHNbMF0uaXNFdmVuKSkgewogICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk5vdCBjb3ByaW1lIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmICh4Ll9pc1plcm8pIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgwLCAidGhpcyIsICJtdXN0IG5vdCBiZSB6ZXJvIik7CiAgICAgIH0KICAgICAgaWYgKHkuX2lzWmVybykgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKDAsICJvdGhlciIsICJtdXN0IG5vdCBiZSB6ZXJvIik7CiAgICAgIH0KICAgICAgaWYgKCgoeFVzZWQgPT0gMSkgJiYgKHhEaWdpdHNbMF0gPT0gMSkpIHx8CiAgICAgICAgICAoKHlVc2VkID09IDEpICYmICh5RGlnaXRzWzBdID09IDEpKSkgcmV0dXJuIG9uZTsKICAgICAgd2hpbGUgKCgoeERpZ2l0c1swXSAmIDEpID09IDApICYmICgoeURpZ2l0c1swXSAmIDEpID09IDApKSB7CiAgICAgICAgX3JzaCh4RGlnaXRzLCB4VXNlZCwgMSwgeERpZ2l0cyk7CiAgICAgICAgX3JzaCh5RGlnaXRzLCB5VXNlZCwgMSwgeURpZ2l0cyk7CiAgICAgICAgc2hpZnRBbW91bnQrKzsKICAgICAgfQogICAgICBpZiAoc2hpZnRBbW91bnQgPj0gX2RpZ2l0Qml0cykgewogICAgICAgIHZhciBkaWdpdFNoaWZ0QW1vdW50ID0gc2hpZnRBbW91bnQgfi8gX2RpZ2l0Qml0czsKICAgICAgICB4VXNlZCAtPSBkaWdpdFNoaWZ0QW1vdW50OwogICAgICAgIHlVc2VkIC09IGRpZ2l0U2hpZnRBbW91bnQ7CiAgICAgICAgbWF4VXNlZCAtPSBkaWdpdFNoaWZ0QW1vdW50OwogICAgICB9CiAgICAgIGlmICgoeURpZ2l0c1swXSAmIDEpID09IDEpIHsKICAgICAgICAvLyBTd2FwIHggYW5kIHkuCiAgICAgICAgdmFyIHRtcERpZ2l0cyA9IHhEaWdpdHM7CiAgICAgICAgdmFyIHRtcFVzZWQgPSB4VXNlZDsKICAgICAgICB4RGlnaXRzID0geURpZ2l0czsKICAgICAgICB4VXNlZCA9IHlVc2VkOwogICAgICAgIHlEaWdpdHMgPSB0bXBEaWdpdHM7CiAgICAgICAgeVVzZWQgPSB0bXBVc2VkOwogICAgICB9CiAgICB9CiAgICB2YXIgdURpZ2l0cyA9IF9jbG9uZURpZ2l0cyh4RGlnaXRzLCAwLCB4VXNlZCwgbWF4TGVuKTsKICAgIHZhciB2RGlnaXRzID0gX2Nsb25lRGlnaXRzKHlEaWdpdHMsIDAsIHlVc2VkLCBtYXhMZW4gKyAyKTsgLy8gKzIgZm9yIGxzaC4KICAgIGZpbmFsIGJvb2wgYWMgPSAoeERpZ2l0c1swXSAmIDEpID09IDA7CgogICAgLy8gVmFyaWFibGVzIGEsIGIsIGMsIGFuZCBkIHJlcXVpcmUgb25lIG1vcmUgZGlnaXQuCiAgICBmaW5hbCBhYmNkVXNlZCA9IG1heFVzZWQgKyAxOwogICAgZmluYWwgYWJjZExlbiA9IGFiY2RVc2VkICsgKGFiY2RVc2VkICYgMSkgKyAyOyAvLyArMiB0byBzYXRpc2Z5IF9hYnNBZGQuCiAgICB2YXIgYURpZ2l0cywgYkRpZ2l0cywgY0RpZ2l0cywgZERpZ2l0czsKICAgIGJvb2wgYUlzTmVnYXRpdmUsIGJJc05lZ2F0aXZlLCBjSXNOZWdhdGl2ZSwgZElzTmVnYXRpdmU7CiAgICBpZiAoYWMpIHsKICAgICAgYURpZ2l0cyA9IF9uZXdEaWdpdHMoYWJjZExlbik7CiAgICAgIGFJc05lZ2F0aXZlID0gZmFsc2U7CiAgICAgIGFEaWdpdHNbMF0gPSAxOwogICAgICBjRGlnaXRzID0gX25ld0RpZ2l0cyhhYmNkTGVuKTsKICAgICAgY0lzTmVnYXRpdmUgPSBmYWxzZTsKICAgIH0KICAgIGJEaWdpdHMgPSBfbmV3RGlnaXRzKGFiY2RMZW4pOwogICAgYklzTmVnYXRpdmUgPSBmYWxzZTsKICAgIGREaWdpdHMgPSBfbmV3RGlnaXRzKGFiY2RMZW4pOwogICAgZElzTmVnYXRpdmUgPSBmYWxzZTsKICAgIGREaWdpdHNbMF0gPSAxOwoKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHdoaWxlICgodURpZ2l0c1swXSAmIDEpID09IDApIHsKICAgICAgICBfcnNoKHVEaWdpdHMsIG1heFVzZWQsIDEsIHVEaWdpdHMpOwogICAgICAgIGlmIChhYykgewogICAgICAgICAgaWYgKCgoYURpZ2l0c1swXSAmIDEpID09IDEpIHx8ICgoYkRpZ2l0c1swXSAmIDEpID09IDEpKSB7CiAgICAgICAgICAgIC8vIGEgKz0geQogICAgICAgICAgICBpZiAoYUlzTmVnYXRpdmUpIHsKICAgICAgICAgICAgICBpZiAoKGFEaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAgICAgKF9jb21wYXJlRGlnaXRzKGFEaWdpdHMsIG1heFVzZWQsIHlEaWdpdHMsIG1heFVzZWQpKSA+IDApIHsKICAgICAgICAgICAgICAgIF9hYnNTdWIoYURpZ2l0cywgYWJjZFVzZWQsIHlEaWdpdHMsIG1heFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfYWJzU3ViKHlEaWdpdHMsIG1heFVzZWQsIGFEaWdpdHMsIG1heFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgICAgICAgYUlzTmVnYXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic0FkZChhRGlnaXRzLCBhYmNkVXNlZCwgeURpZ2l0cywgbWF4VXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gYiAtPSB4CiAgICAgICAgICAgIGlmIChiSXNOZWdhdGl2ZSkgewogICAgICAgICAgICAgIF9hYnNBZGQoYkRpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGJEaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKChiRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoYkRpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICAgIF9hYnNTdWIoYkRpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGJEaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgICAgYklzTmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBfcnNoKGFEaWdpdHMsIGFiY2RVc2VkLCAxLCBhRGlnaXRzKTsKICAgICAgICB9IGVsc2UgaWYgKChiRGlnaXRzWzBdICYgMSkgPT0gMSkgewogICAgICAgICAgLy8gYiAtPSB4CiAgICAgICAgICBpZiAoYklzTmVnYXRpdmUpIHsKICAgICAgICAgICAgX2Fic0FkZChiRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgaWYgKChiRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAgICAgKF9jb21wYXJlRGlnaXRzKGJEaWdpdHMsIG1heFVzZWQsIHhEaWdpdHMsIG1heFVzZWQpID4gMCkpIHsKICAgICAgICAgICAgX2Fic1N1YihiRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzU3ViKHhEaWdpdHMsIG1heFVzZWQsIGJEaWdpdHMsIG1heFVzZWQsIGJEaWdpdHMpOwogICAgICAgICAgICBiSXNOZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9yc2goYkRpZ2l0cywgYWJjZFVzZWQsIDEsIGJEaWdpdHMpOwogICAgICB9CiAgICAgIHdoaWxlICgodkRpZ2l0c1swXSAmIDEpID09IDApIHsKICAgICAgICBfcnNoKHZEaWdpdHMsIG1heFVzZWQsIDEsIHZEaWdpdHMpOwogICAgICAgIGlmIChhYykgewogICAgICAgICAgaWYgKCgoY0RpZ2l0c1swXSAmIDEpID09IDEpIHx8ICgoZERpZ2l0c1swXSAmIDEpID09IDEpKSB7CiAgICAgICAgICAgIC8vIGMgKz0geQogICAgICAgICAgICBpZiAoY0lzTmVnYXRpdmUpIHsKICAgICAgICAgICAgICBpZiAoKGNEaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAgICAgKF9jb21wYXJlRGlnaXRzKGNEaWdpdHMsIG1heFVzZWQsIHlEaWdpdHMsIG1heFVzZWQpID4gMCkpIHsKICAgICAgICAgICAgICAgIF9hYnNTdWIoY0RpZ2l0cywgYWJjZFVzZWQsIHlEaWdpdHMsIG1heFVzZWQsIGNEaWdpdHMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfYWJzU3ViKHlEaWdpdHMsIG1heFVzZWQsIGNEaWdpdHMsIG1heFVzZWQsIGNEaWdpdHMpOwogICAgICAgICAgICAgICAgY0lzTmVnYXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic0FkZChjRGlnaXRzLCBhYmNkVXNlZCwgeURpZ2l0cywgbWF4VXNlZCwgY0RpZ2l0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZCAtPSB4CiAgICAgICAgICAgIGlmIChkSXNOZWdhdGl2ZSkgewogICAgICAgICAgICAgIF9hYnNBZGQoZERpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKChkRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICAgIF9hYnNTdWIoZERpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgICAgZElzTmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBfcnNoKGNEaWdpdHMsIGFiY2RVc2VkLCAxLCBjRGlnaXRzKTsKICAgICAgICB9IGVsc2UgaWYgKChkRGlnaXRzWzBdICYgMSkgPT0gMSkgewogICAgICAgICAgLy8gZCAtPSB4CiAgICAgICAgICBpZiAoZElzTmVnYXRpdmUpIHsKICAgICAgICAgICAgX2Fic0FkZChkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgaWYgKChkRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAgICAgKF9jb21wYXJlRGlnaXRzKGREaWdpdHMsIG1heFVzZWQsIHhEaWdpdHMsIG1heFVzZWQpID4gMCkpIHsKICAgICAgICAgICAgX2Fic1N1YihkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzU3ViKHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgICBkSXNOZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9yc2goZERpZ2l0cywgYWJjZFVzZWQsIDEsIGREaWdpdHMpOwogICAgICB9CiAgICAgIGlmIChfY29tcGFyZURpZ2l0cyh1RGlnaXRzLCBtYXhVc2VkLCB2RGlnaXRzLCBtYXhVc2VkKSA+PSAwKSB7CiAgICAgICAgLy8gdSAtPSB2CiAgICAgICAgX2Fic1N1Yih1RGlnaXRzLCBtYXhVc2VkLCB2RGlnaXRzLCBtYXhVc2VkLCB1RGlnaXRzKTsKICAgICAgICBpZiAoYWMpIHsKICAgICAgICAgIC8vIGEgLT0gYwogICAgICAgICAgaWYgKGFJc05lZ2F0aXZlID09IGNJc05lZ2F0aXZlKSB7CiAgICAgICAgICAgIHZhciBhX2NtcF9jID0gX2NvbXBhcmVEaWdpdHMoYURpZ2l0cywgYWJjZFVzZWQsIGNEaWdpdHMsIGFiY2RVc2VkKTsKICAgICAgICAgICAgaWYgKGFfY21wX2MgPiAwKSB7CiAgICAgICAgICAgICAgX2Fic1N1YihhRGlnaXRzLCBhYmNkVXNlZCwgY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9hYnNTdWIoY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMsIGFiY2RVc2VkLCBhRGlnaXRzKTsKICAgICAgICAgICAgICBhSXNOZWdhdGl2ZSA9ICFhSXNOZWdhdGl2ZSAmJiAoYV9jbXBfYyAhPSAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2Fic0FkZChhRGlnaXRzLCBhYmNkVXNlZCwgY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBiIC09IGQKICAgICAgICBpZiAoYklzTmVnYXRpdmUgPT0gZElzTmVnYXRpdmUpIHsKICAgICAgICAgIHZhciBiX2NtcF9kID0gX2NvbXBhcmVEaWdpdHMoYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMsIGFiY2RVc2VkKTsKICAgICAgICAgIGlmIChiX2NtcF9kID4gMCkgewogICAgICAgICAgICBfYWJzU3ViKGJEaWdpdHMsIGFiY2RVc2VkLCBkRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzU3ViKGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgIGJJc05lZ2F0aXZlID0gIWJJc05lZ2F0aXZlICYmIChiX2NtcF9kICE9IDApOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfYWJzQWRkKGJEaWdpdHMsIGFiY2RVc2VkLCBkRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIHYgLT0gdQogICAgICAgIF9hYnNTdWIodkRpZ2l0cywgbWF4VXNlZCwgdURpZ2l0cywgbWF4VXNlZCwgdkRpZ2l0cyk7CiAgICAgICAgaWYgKGFjKSB7CiAgICAgICAgICAvLyBjIC09IGEKICAgICAgICAgIGlmIChjSXNOZWdhdGl2ZSA9PSBhSXNOZWdhdGl2ZSkgewogICAgICAgICAgICB2YXIgY19jbXBfYSA9IF9jb21wYXJlRGlnaXRzKGNEaWdpdHMsIGFiY2RVc2VkLCBhRGlnaXRzLCBhYmNkVXNlZCk7CiAgICAgICAgICAgIGlmIChjX2NtcF9hID4gMCkgewogICAgICAgICAgICAgIF9hYnNTdWIoY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfYWJzU3ViKGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzLCBhYmNkVXNlZCwgY0RpZ2l0cyk7CiAgICAgICAgICAgICAgY0lzTmVnYXRpdmUgPSAhY0lzTmVnYXRpdmUgJiYgKGNfY21wX2EgIT0gMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hYnNBZGQoY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gZCAtPSBiCiAgICAgICAgaWYgKGRJc05lZ2F0aXZlID09IGJJc05lZ2F0aXZlKSB7CiAgICAgICAgICB2YXIgZF9jbXBfYiA9IF9jb21wYXJlRGlnaXRzKGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzLCBhYmNkVXNlZCk7CiAgICAgICAgICBpZiAoZF9jbXBfYiA+IDApIHsKICAgICAgICAgICAgX2Fic1N1YihkRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2Fic1N1YihiRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgICBkSXNOZWdhdGl2ZSA9ICFkSXNOZWdhdGl2ZSAmJiAoZF9jbXBfYiAhPSAwKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2Fic0FkZChkRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBFeGl0IGxvb3AgaWYgdSA9PSAwLgogICAgICB2YXIgaSA9IG1heFVzZWQ7CiAgICAgIHdoaWxlICgoaSA+IDApICYmICh1RGlnaXRzW2kgLSAxXSA9PSAwKSkgLS1pOwogICAgICBpZiAoaSA9PSAwKSBicmVhazsKICAgIH0KICAgIGlmICghaW52KSB7CiAgICAgIGlmIChzaGlmdEFtb3VudCA+IDApIHsKICAgICAgICBtYXhVc2VkID0gX2xTaGlmdERpZ2l0cyh2RGlnaXRzLCBtYXhVc2VkLCBzaGlmdEFtb3VudCwgdkRpZ2l0cyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCBtYXhVc2VkLCB2RGlnaXRzKTsKICAgIH0KICAgIC8vIE5vIGludmVyc2UgaWYgdiAhPSAxLgogICAgdmFyIGkgPSBtYXhVc2VkIC0gMTsKICAgIHdoaWxlICgoaSA+IDApICYmICh2RGlnaXRzW2ldID09IDApKSAtLWk7CiAgICBpZiAoKGkgIT0gMCkgfHwgKHZEaWdpdHNbMF0gIT0gMSkpIHsKICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKTsKICAgIH0KCiAgICBpZiAoZElzTmVnYXRpdmUpIHsKICAgICAgd2hpbGUgKChkRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgIC8vIGQgKz0geCwgZCBzdGlsbCBuZWdhdGl2ZQogICAgICAgIF9hYnNTdWIoZERpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICB9CiAgICAgIC8vIGQgKz0geAogICAgICBfYWJzU3ViKHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICBkSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKChkRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPj0gMCkpIHsKICAgICAgICAvLyBkIC09IHgKICAgICAgICBfYWJzU3ViKGREaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCBtYXhVc2VkLCBkRGlnaXRzKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIG1vZHVsYXIgbXVsdGlwbGljYXRpdmUgaW52ZXJzZSBvZiB0aGlzIGJpZyBpbnRlZ2VyCiAgICogbW9kdWxvIFttb2R1bHVzXS4KICAgKgogICAqIFRoZSBbbW9kdWx1c10gbXVzdCBiZSBwb3NpdGl2ZS4KICAgKgogICAqIEl0IGlzIGFuIGVycm9yIGlmIG5vIG1vZHVsYXIgaW52ZXJzZSBleGlzdHMuCiAgICovCiAgLy8gUmV0dXJucyAxL3RoaXMgJSBtb2R1bHVzLCB3aXRoIG1vZHVsdXMgPiAwLgogIF9CaWdJbnRJbXBsIG1vZEludmVyc2UoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgbW9kdWx1cyA9IGJpZ0ludDsKICAgIGlmIChtb2R1bHVzIDw9IHplcm8pIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIk1vZHVsdXMgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZTogJG1vZHVsdXMiKTsKICAgIH0KICAgIGlmIChtb2R1bHVzID09IG9uZSkgcmV0dXJuIHplcm87CiAgICB2YXIgdG1wID0gdGhpczsKICAgIGlmICh0bXAuX2lzTmVnYXRpdmUgfHwgKHRtcC5fYWJzQ29tcGFyZShtb2R1bHVzKSA+PSAwKSkgewogICAgICB0bXAgJT0gbW9kdWx1czsKICAgIH0KICAgIHJldHVybiBfYmluYXJ5R2NkKG1vZHVsdXMsIHRtcCwgdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0aGlzIGJpZyBpbnRlZ2VyIGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgZWl0aGVyIG51bWJlciBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB0aGUgbnVtZXJpY2FsbHkgZ3JlYXRlc3QKICAgKiBpbnRlZ2VyIGRpdmlkaW5nIGJvdGggYHRoaXNgIGFuZCBgb3RoZXJgLgogICAqCiAgICogVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIGlzIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciwKICAgKiBzbyBgeC5nY2QoeSlgIGlzICBhbHdheXMgdGhlIHNhbWUgYXMgYHkuZ2NkKHgpYC4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIGB4LmdjZCh4KWAgaXMgYHguYWJzKClgLgogICAqCiAgICogSWYgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAgaXMgemVybywgdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCiAgICovCiAgX0JpZ0ludEltcGwgZ2NkKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKF9pc1plcm8pIHJldHVybiBvdGhlci5hYnMoKTsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpcy5hYnMoKTsKICAgIHJldHVybiBfYmluYXJ5R2NkKHRoaXMsIG90aGVyLCBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBzaWduaWZpY2FudCBbd2lkdGhdIGJpdHMgb2YgdGhpcyBiaWcgaW50ZWdlciBhcyBhCiAgICogbm9uLW5lZ2F0aXZlIG51bWJlciAoaS5lLiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbikuICBUaGUgcmV0dXJuZWQgdmFsdWUgaGFzCiAgICogemVyb3MgaW4gYWxsIGJpdCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIGBgYAogICAqIG5ldyBCaWdJbnQuZnJvbSgtMSkudG9VbnNpZ25lZCg1KSA9PSAzMSAgIC8vIDExMTExMTExICAtPiAgMDAwMTExMTEKICAgKiBgYGAKICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIGFyaXRobWV0aWMgZnJvbSBsb3cgbGV2ZWwgbGFuZ3VhZ2VzLgogICAqIEZvciBleGFtcGxlLCB0byBpbmNyZW1lbnQgYW4gOCBiaXQgcXVhbnRpdHk6CiAgICoKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1Vuc2lnbmVkKDgpOwogICAqIGBgYAogICAqCiAgICogYHFgIHdpbGwgY291bnQgZnJvbSBgMGAgdXAgdG8gYDI1NWAgYW5kIHRoZW4gd3JhcCBhcm91bmQgdG8gYDBgLgogICAqCiAgICogSWYgdGhlIGlucHV0IGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcyB0aGUKICAgKiBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YCBpcwogICAqIGdpdmVuIGJ5IGB4LmJpdExlbmd0aGAsIGkuZS4KICAgKgogICAqIGBgYAogICAqIHggPT0geC50b1Vuc2lnbmVkKHguYml0TGVuZ3RoKTsKICAgKiBgYGAKICAgKi8KICBfQmlnSW50SW1wbCB0b1Vuc2lnbmVkKGludCB3aWR0aCkgewogICAgcmV0dXJuIHRoaXMgJiAoKG9uZSA8PCB3aWR0aCkgLSBvbmUpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgW3dpZHRoXSBiaXRzIG9mIHRoaXMgaW50ZWdlciwgZXh0ZW5kaW5nIHRoZQogICAqIGhpZ2hlc3QgcmV0YWluZWQgYml0IHRvIHRoZSBzaWduLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0cnVuY2F0aW5nIHRoZSB2YWx1ZQogICAqIHRvIGZpdCBpbiBbd2lkdGhdIGJpdHMgdXNpbmcgYW4gc2lnbmVkIDItcyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLiAgVGhlCiAgICogcmV0dXJuZWQgdmFsdWUgaGFzIHRoZSBzYW1lIGJpdCB2YWx1ZSBpbiBhbGwgcG9zaXRpb25zIGhpZ2hlciB0aGFuIFt3aWR0aF0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgYmlnMTUgPSBuZXcgQmlnSW50LmZyb20oMTUpOwogICAqIHZhciBiaWcxNiA9IG5ldyBCaWdJbnQuZnJvbSgxNik7CiAgICogdmFyIGJpZzIzOSA9IG5ldyBCaWdJbnQuZnJvbSgyMzkpOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWLS1zaWduIGJpdC1WCiAgICogYmlnMTYudG9TaWduZWQoNSkgPT0gLWJpZzE2ICAgLy8gIDAwMDEwMDAwIC0+IDExMTEwMDAwCiAgICogYmlnMjM5LnRvU2lnbmVkKDUpID09IGJpZzE1ICAgLy8gIDExMTAxMTExIC0+IDAwMDAxMTExCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIF4KICAgKiBgYGAKICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIGFyaXRobWV0aWMgZnJvbSBsb3cgbGV2ZWwgbGFuZ3VhZ2VzLgogICAqIEZvciBleGFtcGxlLCB0byBpbmNyZW1lbnQgYW4gOCBiaXQgc2lnbmVkIHF1YW50aXR5OgogICAqCiAgICogYGBgCiAgICogcSA9IChxICsgMSkudG9TaWduZWQoOCk7CiAgICogYGBgCiAgICoKICAgKiBgcWAgd2lsbCBjb3VudCBmcm9tIGAwYCB1cCB0byBgMTI3YCwgd3JhcCB0byBgLTEyOGAgYW5kIGNvdW50IGJhY2sgdXAgdG8KICAgKiBgMTI3YC4KICAgKgogICAqIElmIHRoZSBpbnB1dCB2YWx1ZSBmaXRzIGluIFt3aWR0aF0gYml0cyB3aXRob3V0IHRydW5jYXRpb24sIHRoZSByZXN1bHQgaXMKICAgKiB0aGUgc2FtZSBhcyB0aGUgaW5wdXQuICBUaGUgbWluaW11bSB3aWR0aCBuZWVkZWQgdG8gYXZvaWQgdHJ1bmNhdGlvbiBvZiBgeGAKICAgKiBpcyBgeC5iaXRMZW5ndGggKyAxYCwgaS5lLgogICAqCiAgICogYGBgCiAgICogeCA9PSB4LnRvU2lnbmVkKHguYml0TGVuZ3RoICsgMSk7CiAgICogYGBgCiAgICovCiAgX0JpZ0ludEltcGwgdG9TaWduZWQoaW50IHdpZHRoKSB7CiAgICAvLyBUaGUgdmFsdWUgb2YgYmluYXJ5IG51bWJlciB3ZWlnaHRzIGVhY2ggYml0IGJ5IGEgcG93ZXIgb2YgdHdvLiAgVGhlCiAgICAvLyB0d29zLWNvbXBsZW1lbnQgdmFsdWUgd2VpZ2h0cyB0aGUgc2lnbiBiaXQgbmVnYXRpdmVseS4gIFdlIGNvbXB1dGUgdGhlCiAgICAvLyB2YWx1ZSBvZiB0aGUgbmVnYXRpdmUgd2VpZ2h0aW5nIGJ5IGlzb2xhdGluZyB0aGUgc2lnbiBiaXQgd2l0aCB0aGUKICAgIC8vIGNvcnJlY3QgcG93ZXIgb2YgdHdvIHdlaWdodGluZyBhbmQgc3VidHJhY3RpbmcgaXQgZnJvbSB0aGUgdmFsdWUgb2YgdGhlCiAgICAvLyBsb3dlciBiaXRzLgogICAgdmFyIHNpZ25NYXNrID0gb25lIDw8ICh3aWR0aCAtIDEpOwogICAgcmV0dXJuICh0aGlzICYgKHNpZ25NYXNrIC0gb25lKSkgLSAodGhpcyAmIHNpZ25NYXNrKTsKICB9CgogIGJvb2wgZ2V0IGlzVmFsaWRJbnQgewogICAgYXNzZXJ0KF9kaWdpdEJpdHMgPT0gMzIpOwogICAgcmV0dXJuIF91c2VkIDwgMiB8fAogICAgICAgIChfdXNlZCA9PSAyICYmCiAgICAgICAgICAgIChfZGlnaXRzWzFdIDwgMHg4MDAwMDAwMCB8fAogICAgICAgICAgICAgICAgKF9pc05lZ2F0aXZlICYmIF9kaWdpdHNbMV0gPT0gMHg4MDAwMDAwMCAmJiBfZGlnaXRzWzBdID09IDApKSk7CiAgfQoKICBpbnQgdG9JbnQoKSB7CiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICBpZiAoX3VzZWQgPT0gMCkgcmV0dXJuIDA7CiAgICBpZiAoX3VzZWQgPT0gMSkgcmV0dXJuIF9pc05lZ2F0aXZlID8gLV9kaWdpdHNbMF0gOiBfZGlnaXRzWzBdOwogICAgaWYgKF91c2VkID09IDIgJiYgX2RpZ2l0c1sxXSA8IDB4ODAwMDAwMDApIHsKICAgICAgdmFyIHJlc3VsdCA9IChfZGlnaXRzWzFdIDw8IF9kaWdpdEJpdHMpIHwgX2RpZ2l0c1swXTsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gLXJlc3VsdCA6IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IF9taW5JbnQgOiBfbWF4SW50OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIFtfQmlnSW50SW1wbF0gYXMgYSBbZG91YmxlXS4KICAgKgogICAqIElmIHRoZSBudW1iZXIgaXMgbm90IHJlcHJlc2VudGFibGUgYXMgYSBbZG91YmxlXSwgYW4KICAgKiBhcHByb3hpbWF0aW9uIGlzIHJldHVybmVkLiBGb3IgbnVtZXJpY2FsbHkgbGFyZ2UgaW50ZWdlcnMsIHRoZQogICAqIGFwcHJveGltYXRpb24gbWF5IGJlIGluZmluaXRlLgogICAqLwogIGRvdWJsZSB0b0RvdWJsZSgpIHsKICAgIGNvbnN0IGludCBleHBvbmVudEJpYXMgPSAxMDc1OwogICAgLy8gVGhlcmUgYXJlIDExIGJpdHMgZm9yIHRoZSBleHBvbmVudC4KICAgIC8vIDIwNDcgKGFsbCBiaXRzIHNldCB0byAxKSBpcyByZXNlcnZlZCBmb3IgaW5maW5pdHkgYW5kIE5hTi4KICAgIC8vIFdoZW4gc3RvcmluZyB0aGUgZXhwb25lbnQgaW4gdGhlIDExIGJpdHMsIGl0IGlzIGJpYXNlZCBieSBleHBvbmVudEJpYXMKICAgIC8vIHRvIHN1cHBvcnQgbmVnYXRpdmUgZXhwb25lbnRzLgogICAgY29uc3QgaW50IG1heERvdWJsZUV4cG9uZW50ID0gMjA0NiAtIGV4cG9uZW50QmlhczsKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gMC4wOwoKICAgIC8vIFdlIGZpbGwgdGhlIDUzIGJpdHMgbGl0dGxlLWVuZGlhbi4KICAgIHZhciByZXN1bHRCaXRzID0gbmV3IFVpbnQ4TGlzdCg4KTsKCiAgICB2YXIgbGVuZ3RoID0gX2RpZ2l0Qml0cyAqIChfdXNlZCAtIDEpICsgX2RpZ2l0c1tfdXNlZCAtIDFdLmJpdExlbmd0aDsKICAgIGlmIChsZW5ndGggPiBtYXhEb3VibGVFeHBvbmVudCArIDUzKSB7CiAgICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IGRvdWJsZS5uZWdhdGl2ZUluZmluaXR5IDogZG91YmxlLmluZmluaXR5OwogICAgfQoKICAgIC8vIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBmb3IgdGhlIHNpZ24uCiAgICBpZiAoX2lzTmVnYXRpdmUpIHJlc3VsdEJpdHNbN10gPSAweDgwOwoKICAgIC8vIFdyaXRlIHRoZSBleHBvbmVudCBpbnRvIGJpdHMgMS4uMTI6CiAgICB2YXIgYmlhc2VkRXhwb25lbnQgPSBsZW5ndGggLSA1MyArIGV4cG9uZW50QmlhczsKICAgIHJlc3VsdEJpdHNbNl0gPSAoYmlhc2VkRXhwb25lbnQgJiAweEYpIDw8IDQ7CiAgICByZXN1bHRCaXRzWzddIHw9IGJpYXNlZEV4cG9uZW50ID4+IDQ7CgogICAgaW50IGNhY2hlZEJpdHMgPSAwOwogICAgaW50IGNhY2hlZEJpdHNMZW5ndGggPSAwOwogICAgaW50IGRpZ2l0SW5kZXggPSBfdXNlZCAtIDE7CiAgICBpbnQgcmVhZEJpdHMoaW50IG4pIHsKICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggYml0cyBpbiBbY2FjaGVkQml0c10uCiAgICAgIHdoaWxlIChjYWNoZWRCaXRzTGVuZ3RoIDwgbikgewogICAgICAgIGludCBuZXh0RGlnaXQ7CiAgICAgICAgaW50IG5leHREaWdpdExlbmd0aCA9IF9kaWdpdEJpdHM7IC8vIE1heSBnZXQgdXBkYXRlZC4KICAgICAgICBpZiAoZGlnaXRJbmRleCA8IDApIHsKICAgICAgICAgIG5leHREaWdpdCA9IDA7CiAgICAgICAgICBkaWdpdEluZGV4LS07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5leHREaWdpdCA9IF9kaWdpdHNbZGlnaXRJbmRleF07CiAgICAgICAgICBpZiAoZGlnaXRJbmRleCA9PSBfdXNlZCAtIDEpIG5leHREaWdpdExlbmd0aCA9IG5leHREaWdpdC5iaXRMZW5ndGg7CiAgICAgICAgICBkaWdpdEluZGV4LS07CiAgICAgICAgfQogICAgICAgIGNhY2hlZEJpdHMgPSAoY2FjaGVkQml0cyA8PCBuZXh0RGlnaXRMZW5ndGgpICsgbmV4dERpZ2l0OwogICAgICAgIGNhY2hlZEJpdHNMZW5ndGggKz0gbmV4dERpZ2l0TGVuZ3RoOwogICAgICB9CiAgICAgIC8vIFJlYWQgdGhlIHRvcCBbbl0gYml0cy4KICAgICAgdmFyIHJlc3VsdCA9IGNhY2hlZEJpdHMgPj4gKGNhY2hlZEJpdHNMZW5ndGggLSBuKTsKICAgICAgLy8gUmVtb3ZlIHRoZSBiaXRzIGZyb20gdGhlIGNhY2hlLgogICAgICBjYWNoZWRCaXRzIC09IHJlc3VsdCA8PCAoY2FjaGVkQml0c0xlbmd0aCAtIG4pOwogICAgICBjYWNoZWRCaXRzTGVuZ3RoIC09IG47CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgLy8gVGhlIGZpcnN0IGxlYWRpbmcgMSBiaXQgaXMgaW1wbGljaXQgaW4gdGhlIGRvdWJsZS1yZXByZXNlbnRhdGlvbiBhbmQgY2FuCiAgICAvLyBiZSBkaXNjYXJkZWQuCiAgICB2YXIgbGVhZGluZ0JpdHMgPSByZWFkQml0cyg1KSAmIDB4RjsKICAgIHJlc3VsdEJpdHNbNl0gfD0gbGVhZGluZ0JpdHM7CgogICAgZm9yIChpbnQgaSA9IDU7IGkgPj0gMDsgaS0tKSB7CiAgICAgIC8vIEdldCB0aGUgcmVtYWluaW5nIDQ4IGJpdHMuCiAgICAgIHJlc3VsdEJpdHNbaV0gPSByZWFkQml0cyg4KTsKICAgIH0KCiAgICB2b2lkIHJvdW5kVXAoKSB7CiAgICAgIC8vIFNpbXBseSBjb25zaXN0cyBvZiBhZGRpbmcgMSB0byB0aGUgd2hvbGUgNjQgYml0ICJudW1iZXIiLgogICAgICAvLyBJdCB3aWxsIHVwZGF0ZSB0aGUgZXhwb25lbnQsIGlmIG5lY2Vzc2FyeS4KICAgICAgLy8gSXQgbWlnaHQgZXZlbiByb3VuZCB1cCB0byBpbmZpbml0eSAod2hpY2ggaXMgd2hhdCB3ZSB3YW50KS4KICAgICAgdmFyIGNhcnJ5ID0gMTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKICAgICAgICBpZiAoY2FycnkgPT0gMCkgYnJlYWs7CiAgICAgICAgdmFyIHN1bSA9IHJlc3VsdEJpdHNbaV0gKyBjYXJyeTsKICAgICAgICByZXN1bHRCaXRzW2ldID0gc3VtICYgMHhGRjsKICAgICAgICBjYXJyeSA9IHN1bSA+PiA4OwogICAgICB9CiAgICB9CgogICAgaWYgKHJlYWRCaXRzKDEpID09IDEpIHsKICAgICAgaWYgKHJlc3VsdEJpdHNbMF0uaXNPZGQpIHsKICAgICAgICAvLyBSb3VuZHMgdG8gZXZlbiBhbGwgdGhlIHRpbWUuCiAgICAgICAgcm91bmRVcCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFJvdW5kIHVwLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIgZGlnaXQgdGhhdCBpcyBub3QgMC4KICAgICAgICBpZiAoY2FjaGVkQml0cyAhPSAwKSB7CiAgICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IG9uZSBpbiB0aGUgY2FjaGVkQml0cy4KICAgICAgICAgIHJvdW5kVXAoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yIChpbnQgaSA9IGRpZ2l0SW5kZXg7IGRpZ2l0SW5kZXggPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGlmIChfZGlnaXRzW2ldICE9IDApIHsKICAgICAgICAgICAgICByb3VuZFVwKCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHRCaXRzLmJ1ZmZlci5hc0J5dGVEYXRhKCkuZ2V0RmxvYXQ2NCgwLCBFbmRpYW4ubGl0dGxlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBTdHJpbmctcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmluZyBpcyBwYXJzYWJsZSBieSBbcGFyc2VdLgogICAqIEZvciBhbnkgYF9CaWdJbnRJbXBsYCBgaWAsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAogICAqIGBpID09IF9CaWdJbnRJbXBsLnBhcnNlKGkudG9TdHJpbmcoKSlgLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChfdXNlZCA9PSAwKSByZXR1cm4gIjAiOwogICAgaWYgKF91c2VkID09IDEpIHsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSByZXR1cm4gKC1fZGlnaXRzWzBdKS50b1N0cmluZygpOwogICAgICByZXR1cm4gX2RpZ2l0c1swXS50b1N0cmluZygpOwogICAgfQoKICAgIC8vIEdlbmVyYXRlIGluIGNodW5rcyBvZiA5IGRpZ2l0cy4KICAgIC8vIFRoZSBjaHVua3MgYXJlIGluIHJldmVyc2VkIG9yZGVyLgogICAgdmFyIGRlY2ltYWxEaWdpdENodW5rcyA9IDxTdHJpbmc+W107CiAgICB2YXIgcmVzdCA9IGlzTmVnYXRpdmUgPyAtdGhpcyA6IHRoaXM7CiAgICB3aGlsZSAocmVzdC5fdXNlZCA+IDEpIHsKICAgICAgdmFyIGRpZ2l0czkgPSByZXN0LnJlbWFpbmRlcihfb25lQmlsbGlvbikudG9TdHJpbmcoKTsKICAgICAgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZChkaWdpdHM5KTsKICAgICAgdmFyIHplcm9zID0gOSAtIGRpZ2l0czkubGVuZ3RoOwogICAgICBpZiAoemVyb3MgPT0gOCkgewogICAgICAgIGRlY2ltYWxEaWdpdENodW5rcy5hZGQoIjAwMDAwMDAwIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHplcm9zID49IDQpIHsKICAgICAgICAgIHplcm9zIC09IDQ7CiAgICAgICAgICBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKCIwMDAwIik7CiAgICAgICAgfQogICAgICAgIGlmICh6ZXJvcyA+PSAyKSB7CiAgICAgICAgICB6ZXJvcyAtPSAyOwogICAgICAgICAgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZCgiMDAiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHplcm9zID49IDEpIHsKICAgICAgICAgIGRlY2ltYWxEaWdpdENodW5rcy5hZGQoIjAiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdCA9IHJlc3Qgfi8gX29uZUJpbGxpb247CiAgICB9CiAgICBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKHJlc3QuX2RpZ2l0c1swXS50b1N0cmluZygpKTsKICAgIGlmIChfaXNOZWdhdGl2ZSkgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZCgiLSIpOwogICAgcmV0dXJuIGRlY2ltYWxEaWdpdENodW5rcy5yZXZlcnNlZC5qb2luKCk7CiAgfQoKICBpbnQgX3RvUmFkaXhDb2RlVW5pdChpbnQgZGlnaXQpIHsKICAgIGNvbnN0IGludCBfMCA9IDQ4OwogICAgY29uc3QgaW50IF9hID0gOTc7CiAgICBpZiAoZGlnaXQgPCAxMCkgcmV0dXJuIF8wICsgZGlnaXQ7CiAgICByZXR1cm4gX2EgKyBkaWdpdCAtIDEwOwogIH0KCiAgLyoqCiAgICogQ29udmVydHMgW3RoaXNdIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluIHRoZSBnaXZlbiBbcmFkaXhdLgogICAqCiAgICogSW4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiwgbG93ZXItY2FzZSBsZXR0ZXJzIGFyZSB1c2VkIGZvciBkaWdpdHMgYWJvdmUKICAgKiAnOScsIHdpdGggJ2EnIGJlaW5nIDEwIGFuICd6JyBiZWluZyAzNS4KICAgKgogICAqIFRoZSBbcmFkaXhdIGFyZ3VtZW50IG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMiB0byAzNi4KICAgKi8KICBTdHJpbmcgdG9SYWRpeFN0cmluZyhpbnQgcmFkaXgpIHsKICAgIGlmIChyYWRpeCA+IDM2KSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShyYWRpeCwgMiwgMzYpOwoKICAgIGlmIChfdXNlZCA9PSAwKSByZXR1cm4gIjAiOwoKICAgIGlmIChfdXNlZCA9PSAxKSB7CiAgICAgIHZhciBkaWdpdFN0cmluZyA9IF9kaWdpdHNbMF0udG9SYWRpeFN0cmluZyhyYWRpeCk7CiAgICAgIGlmIChfaXNOZWdhdGl2ZSkgcmV0dXJuICItIiArIGRpZ2l0U3RyaW5nOwogICAgICByZXR1cm4gZGlnaXRTdHJpbmc7CiAgICB9CgogICAgaWYgKHJhZGl4ID09IDE2KSByZXR1cm4gX3RvSGV4U3RyaW5nKCk7CgogICAgdmFyIGJhc2UgPSBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQocmFkaXgpOwogICAgdmFyIHJldmVyc2VkRGlnaXRDb2RlVW5pdHMgPSA8aW50PltdOwogICAgdmFyIHJlc3QgPSB0aGlzLmFicygpOwogICAgd2hpbGUgKCFyZXN0Ll9pc1plcm8pIHsKICAgICAgdmFyIGRpZ2l0ID0gcmVzdC5yZW1haW5kZXIoYmFzZSkudG9JbnQoKTsKICAgICAgcmVzdCA9IHJlc3Qgfi8gYmFzZTsKICAgICAgcmV2ZXJzZWREaWdpdENvZGVVbml0cy5hZGQoX3RvUmFkaXhDb2RlVW5pdChkaWdpdCkpOwogICAgfQogICAgdmFyIGRpZ2l0U3RyaW5nID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKHJldmVyc2VkRGlnaXRDb2RlVW5pdHMucmV2ZXJzZWQpOwogICAgaWYgKF9pc05lZ2F0aXZlKSByZXR1cm4gIi0iICsgZGlnaXRTdHJpbmc7CiAgICByZXR1cm4gZGlnaXRTdHJpbmc7CiAgfQoKICBTdHJpbmcgX3RvSGV4U3RyaW5nKCkgewogICAgdmFyIGNoYXJzID0gPGludD5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3VzZWQgLSAxOyBpKyspIHsKICAgICAgaW50IGNodW5rID0gX2RpZ2l0c1tpXTsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAoX2RpZ2l0Qml0cyB+LyA0KTsgaisrKSB7CiAgICAgICAgY2hhcnMuYWRkKF90b1JhZGl4Q29kZVVuaXQoY2h1bmsgJiAweEYpKTsKICAgICAgICBjaHVuayA+Pj0gNDsKICAgICAgfQogICAgfQogICAgdmFyIG1zYkNodW5rID0gX2RpZ2l0c1tfdXNlZCAtIDFdOwogICAgd2hpbGUgKG1zYkNodW5rICE9IDApIHsKICAgICAgY2hhcnMuYWRkKF90b1JhZGl4Q29kZVVuaXQobXNiQ2h1bmsgJiAweEYpKTsKICAgICAgbXNiQ2h1bmsgPj49IDQ7CiAgICB9CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgY29uc3QgX2Rhc2ggPSA0NTsKICAgICAgY2hhcnMuYWRkKF9kYXNoKTsKICAgIH0KICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY2hhcnMucmV2ZXJzZWQpOwogIH0KfQoKLy8gSW50ZXJmYWNlIGZvciBtb2R1bGFyIHJlZHVjdGlvbi4KYWJzdHJhY3QgY2xhc3MgX0JpZ0ludFJlZHVjdGlvbiB7CiAgaW50IGdldCBfbm9ybU1vZHVsdXNVc2VkOwogIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB1c2VkIGJ5IHJlc3VsdERpZ2l0cy4KICBpbnQgX2NvbnZlcnQoX0JpZ0ludEltcGwgeCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpOwogIGludCBfbXVsKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IHlEaWdpdHMsIGludCB5VXNlZCwKICAgICAgVWludDMyTGlzdCByZXN1bHREaWdpdHMpOwogIGludCBfc3FyKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cyk7CgogIC8vIFJldHVybiB4IHJldmVydGVkIHRvIF9CaWdJbnRJbXBsLgogIF9CaWdJbnRJbXBsIF9yZXZlcnQoVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQpOwp9CgovLyBNb250Z29tZXJ5IHJlZHVjdGlvbiBvbiBfQmlnSW50SW1wbC4KY2xhc3MgX0JpZ0ludE1vbnRnb21lcnlSZWR1Y3Rpb24gaW1wbGVtZW50cyBfQmlnSW50UmVkdWN0aW9uIHsKICBmaW5hbCBfQmlnSW50SW1wbCBfbW9kdWx1czsKICBpbnQgX25vcm1Nb2R1bHVzVXNlZDsgLy8gRXZlbiBpZiBwcm9jZXNzaW5nIDY0LWJpdCAoZGlnaXQgcGFpcnMpLgogIFVpbnQzMkxpc3QgX21vZHVsdXNEaWdpdHM7CiAgVWludDMyTGlzdCBfYXJnczsKICBpbnQgX2RpZ2l0c1BlclN0ZXA7IC8vIE51bWJlciBvZiBkaWdpdHMgcHJvY2Vzc2VkIGluIG9uZSBzdGVwLiAxIG9yIDIuCiAgc3RhdGljIGNvbnN0IGludCBfeERpZ2l0ID0gMDsgLy8gSW5kZXggb2YgZGlnaXQgb2YgeC4KICBzdGF0aWMgY29uc3QgaW50IF94SGlnaERpZ2l0ID0gMTsgLy8gSW5kZXggb2YgaGlnaCBkaWdpdCBvZiB4ICg2NC1iaXQgb25seSkuCiAgc3RhdGljIGNvbnN0IGludCBfcmhvRGlnaXQgPSAyOyAvLyBJbmRleCBvZiBkaWdpdCBvZiByaG8uCiAgc3RhdGljIGNvbnN0IGludCBfcmhvSGlnaERpZ2l0ID0gMzsgLy8gSW5kZXggb2YgaGlnaCBkaWdpdCBvZiByaG8gKDY0LWJpdCkuCiAgc3RhdGljIGNvbnN0IGludCBfbXVEaWdpdCA9IDQ7IC8vIEluZGV4IG9mIG11LgogIHN0YXRpYyBjb25zdCBpbnQgX211SGlnaERpZ2l0ID0gNTsgLy8gSW5kZXggb2YgaGlnaCAzMi1iaXRzIG9mIG11ICg2NC1iaXQpLgoKICBfQmlnSW50TW9udGdvbWVyeVJlZHVjdGlvbih0aGlzLl9tb2R1bHVzKSB7CiAgICBfbW9kdWx1c0RpZ2l0cyA9IF9tb2R1bHVzLl9kaWdpdHM7CiAgICBfYXJncyA9IF9uZXdEaWdpdHMoNik7CiAgICAvLyBEZXRlcm1pbmUgaWYgd2UgY2FuIHByb2Nlc3MgZGlnaXQgcGFpcnMgYnkgY2FsbGluZyBhbiBpbnRyaW5zaWMuCiAgICBfZGlnaXRzUGVyU3RlcCA9IF9tdWxNb2QoX2FyZ3MsIF9hcmdzLCAwKTsKICAgIF9hcmdzW194RGlnaXRdID0gX21vZHVsdXNEaWdpdHNbMF07CiAgICBpZiAoX2RpZ2l0c1BlclN0ZXAgPT0gMSkgewogICAgICBfbm9ybU1vZHVsdXNVc2VkID0gX21vZHVsdXMuX3VzZWQ7CiAgICAgIF9pbnZEaWdpdChfYXJncyk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoX2RpZ2l0c1BlclN0ZXAgPT0gMik7CiAgICAgIF9ub3JtTW9kdWx1c1VzZWQgPSBfbW9kdWx1cy5fdXNlZCArIChfbW9kdWx1cy5fdXNlZCAmIDEpOwogICAgICBfYXJnc1tfeEhpZ2hEaWdpdF0gPSBfbW9kdWx1c0RpZ2l0c1sxXTsKICAgICAgX2ludkRpZ2l0UGFpcihfYXJncyk7CiAgICB9CiAgfQoKICAvLyBDYWxjdWxhdGVzIC0xL3ggJSBfZGlnaXRCYXNlLCB4IGlzIDMyLWJpdCBkaWdpdC4KICAvLyAgICAgICAgIHh5ID09IDEgKG1vZCBtKQogIC8vICAgICAgICAgeHkgPSAgMStrbQogIC8vICAgeHkoMi14eSkgPSAoMStrbSkoMS1rbSkKICAvLyB4KHkoMi14eSkpID0gMS1rXjIgbV4yCiAgLy8geCh5KDIteHkpKSA9PSAxIChtb2QgbV4yKQogIC8vIGlmIHkgaXMgMS94IG1vZCBtLCB0aGVuIHkoMi14eSkgaXMgMS94IG1vZCBtXjIKICAvLyBTaG91bGQgcmVkdWNlIHggYW5kIHkoMi14eSkgYnkgbV4yIGF0IGVhY2ggc3RlcCB0byBrZWVwIHNpemUgYm91bmRlZC4KICAvLwogIC8vIE9wZXJhdGlvbjoKICAvLyAgIGFyZ3NbX3Job0RpZ2l0XSA9IDEvYXJnc1tfeERpZ2l0XSBtb2QgX2RpZ2l0QmFzZS4KICBzdGF0aWMgdm9pZCBfaW52RGlnaXQoVWludDMyTGlzdCBhcmdzKSB7CiAgICB2YXIgeCA9IGFyZ3NbX3hEaWdpdF07CiAgICB2YXIgeSA9IHggJiAzOyAvLyB5ID09IDEveCBtb2QgMl4yCiAgICB5ID0gKHkgKiAoMiAtICh4ICYgMHhmKSAqIHkpKSAmIDB4ZjsgLy8geSA9PSAxL3ggbW9kIDJeNAogICAgeSA9ICh5ICogKDIgLSAoeCAmIDB4ZmYpICogeSkpICYgMHhmZjsgLy8geSA9PSAxL3ggbW9kIDJeOAogICAgeSA9ICh5ICogKDIgLSAoKCh4ICYgMHhmZmZmKSAqIHkpICYgMHhmZmZmKSkpICYgMHhmZmZmOyAvLyB5ID09IDEveCBtb2QgMl4xNgogICAgeSA9ICh5ICogKDIgLSB4ICogeSAlIF9CaWdJbnRJbXBsLl9kaWdpdEJhc2UpKSAlIF9CaWdJbnRJbXBsLl9kaWdpdEJhc2U7CiAgICAvLyB5ID09IDEveCBtb2QgX2RpZ2l0QmFzZQogICAgeSA9IC15OyAvLyBXZSByZWFsbHkgd2FudCB0aGUgbmVnYXRpdmUgaW52ZXJzZS4KICAgIGFyZ3NbX3Job0RpZ2l0XSA9IHkgJiBfQmlnSW50SW1wbC5fZGlnaXRNYXNrOwogICAgYXNzZXJ0KCgoeCAqIHkpICYgX0JpZ0ludEltcGwuX2RpZ2l0TWFzaykgPT0gX0JpZ0ludEltcGwuX2RpZ2l0TWFzayk7CiAgfQoKICAvLyBDYWxjdWxhdGVzIC0xL3ggJSBfZGlnaXRCYXNlXjIsIHggaXMgYSBwYWlyIG9mIDMyLWJpdCBkaWdpdHMuCiAgLy8gT3BlcmF0aW9uOgogIC8vICAgYXJnc1tfcmhvRGlnaXQuLl9yaG9IaWdoRGlnaXRdID0KICAvLyAgICAgMS9hcmdzW194RGlnaXQuLl94SGlnaERpZ2l0XSBtb2QgX2RpZ2l0QmFzZV4yLgogIHN0YXRpYyB2b2lkIF9pbnZEaWdpdFBhaXIoVWludDMyTGlzdCBhcmdzKSB7CiAgICB2YXIgeGwgPSBhcmdzW194RGlnaXRdOyAvLyBMb3dlciAzMi1iaXQgZGlnaXQgb2YgeC4KICAgIHZhciB5ID0geGwgJiAzOyAvLyB5ID09IDEveCBtb2QgMl4yCiAgICB5ID0gKHkgKiAoMiAtICh4bCAmIDB4ZikgKiB5KSkgJiAweGY7IC8vIHkgPT0gMS94IG1vZCAyXjQKICAgIHkgPSAoeSAqICgyIC0gKHhsICYgMHhmZikgKiB5KSkgJiAweGZmOyAvLyB5ID09IDEveCBtb2QgMl44CiAgICB5ID0gKHkgKiAoMiAtICgoKHhsICYgMHhmZmZmKSAqIHkpICYgMHhmZmZmKSkpICYgMHhmZmZmOwogICAgLy8geSA9PSAxL3ggbW9kIDJeMTYKICAgIHkgPSAoeSAqICgyIC0gKCh4bCAqIHkpICYgMHhmZmZmZmZmZikpKSAmIDB4ZmZmZmZmZmY7IC8vIHkgPT0gMS94IG1vZCAyXjMyCiAgICB2YXIgeCA9IChhcmdzW194SGlnaERpZ2l0XSA8PCBfQmlnSW50SW1wbC5fZGlnaXRCaXRzKSB8IHhsOwogICAgeSAqPSAyIC0geCAqIHk7IC8vIE1hc2tpbmcgd2l0aCAyXjY0LTEgaXMgaW1wbGllZCBieSA2NC1iaXQgYXJpdGhtZXRpYy4KICAgIC8vIHkgPT0gMS94IG1vZCBfZGlnaXRCYXNlXjIKICAgIHkgPSAteTsgLy8gV2UgcmVhbGx5IHdhbnQgdGhlIG5lZ2F0aXZlIGludmVyc2UuCiAgICBhcmdzW19yaG9EaWdpdF0gPSB5ICYgX0JpZ0ludEltcGwuX2RpZ2l0TWFzazsKICAgIGFyZ3NbX3Job0hpZ2hEaWdpdF0gPQogICAgICAgICh5ID4+IF9CaWdJbnRJbXBsLl9kaWdpdEJpdHMpICYgX0JpZ0ludEltcGwuX2RpZ2l0TWFzazsKICAgIGFzc2VydCh4ICogeSA9PSAtMSk7CiAgfQoKICAvLyBPcGVyYXRpb246CiAgLy8gICBhcmdzW19tdURpZ2l0XSA9IGFyZ3NbX3Job0RpZ2l0XSpkaWdpdHNbaV0gbW9kIF9kaWdpdEJhc2UuCiAgLy8gICBSZXR1cm5zIDEuCiAgLy8gTm90ZTogSW50cmluc2ljcyBvbiA2NC1iaXQgcGxhdGZvcm1zIHByb2Nlc3MgZGlnaXQgcGFpcnMgYXQgZXZlbiBpbmRpY2VzOgogIC8vICAgYXJnc1tfbXVEaWdpdC4uX211SGlnaERpZ2l0XSA9CiAgLy8gICAgIGFyZ3NbX3Job0RpZ2l0Li5fcmhvSGlnaERpZ2l0XSAqIGRpZ2l0c1tpLi5pKzFdIG1vZCBfZGlnaXRCYXNlXjIuCiAgLy8gICBSZXR1cm5zIDIuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIGludCBfbXVsTW9kKFVpbnQzMkxpc3QgYXJncywgVWludDMyTGlzdCBkaWdpdHMsIGludCBpKSB7CiAgICB2YXIgcmhvbCA9IGFyZ3NbX3Job0RpZ2l0XSAmIF9CaWdJbnRJbXBsLl9oYWxmRGlnaXRNYXNrOwogICAgdmFyIHJob2ggPSBhcmdzW19yaG9EaWdpdF0gPj4gX0JpZ0ludEltcGwuX2hhbGZEaWdpdEJpdHM7CiAgICB2YXIgZGggPSBkaWdpdHNbaV0gPj4gX0JpZ0ludEltcGwuX2hhbGZEaWdpdEJpdHM7CiAgICB2YXIgZGwgPSBkaWdpdHNbaV0gJiBfQmlnSW50SW1wbC5faGFsZkRpZ2l0TWFzazsKICAgIGFyZ3NbX211RGlnaXRdID0gKGRsICogcmhvbCArCiAgICAgICAgICAgICgoKGRsICogcmhvaCArIGRoICogcmhvbCkgJiBfQmlnSW50SW1wbC5faGFsZkRpZ2l0TWFzaykgPDwKICAgICAgICAgICAgICAgIF9CaWdJbnRJbXBsLl9oYWxmRGlnaXRCaXRzKSkgJgogICAgICAgIF9CaWdJbnRJbXBsLl9kaWdpdE1hc2s7CiAgICByZXR1cm4gMTsKICB9CgogIC8vIHJlc3VsdCA9IHgqUiBtb2QgX21vZHVsdXMuCiAgLy8gUmV0dXJucyByZXN1bHRVc2VkLgogIGludCBfY29udmVydChfQmlnSW50SW1wbCB4LCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgLy8gTW9udGdvbWVyeSByZWR1Y3Rpb24gb25seSB3b3JrcyBpZiBhYnMoeCkgPCBfbW9kdWx1cy4KICAgIGFzc2VydCh4LmFicygpIDwgX21vZHVsdXMpOwogICAgYXNzZXJ0KF9kaWdpdHNQZXJTdGVwID09IDEgfHwgX25vcm1Nb2R1bHVzVXNlZC5pc0V2ZW4pOwogICAgdmFyIHJlc3VsdCA9IHguYWJzKCkuX2RsU2hpZnQoX25vcm1Nb2R1bHVzVXNlZCkuX3JlbShfbW9kdWx1cyk7CiAgICBpZiAoeC5faXNOZWdhdGl2ZSAmJiAhcmVzdWx0Ll9pc05lZ2F0aXZlICYmIHJlc3VsdC5fdXNlZCA+IDApIHsKICAgICAgcmVzdWx0ID0gX21vZHVsdXMgLSByZXN1bHQ7CiAgICB9CiAgICB2YXIgdXNlZCA9IHJlc3VsdC5fdXNlZDsKICAgIHZhciBkaWdpdHMgPSByZXN1bHQuX2RpZ2l0czsKICAgIHZhciBpID0gdXNlZCArICh1c2VkICYgMSk7CiAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gZGlnaXRzW2ldOwogICAgfQogICAgcmV0dXJuIHVzZWQ7CiAgfQoKICBfQmlnSW50SW1wbCBfcmV2ZXJ0KFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkKSB7CiAgICAvLyBSZXNlcnZlIGVub3VnaCBkaWdpdHMgZm9yIG1vZHVsdXMgc3F1YXJpbmcgYW5kIGFjY3VtdWxhdG9yIGNhcnJ5LgogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIF9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgIHZhciBpID0geFVzZWQgKyAoeFVzZWQgJiAxKTsKICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICByZXN1bHREaWdpdHNbaV0gPSB4RGlnaXRzW2ldOwogICAgfQogICAgdmFyIHJlc3VsdFVzZWQgPSBfcmVkdWNlKHJlc3VsdERpZ2l0cywgeFVzZWQpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8geCA9IHgvUiBtb2QgX21vZHVsdXMuCiAgLy8gUmV0dXJucyB4VXNlZC4KICBpbnQgX3JlZHVjZShVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCkgewogICAgd2hpbGUgKHhVc2VkIDwgMiAqIF9ub3JtTW9kdWx1c1VzZWQgKyAyKSB7CiAgICAgIC8vIFBhZCB4IHNvIF9tdWxBZGQgaGFzIGVub3VnaCByb29tIGxhdGVyIGZvciBhIHBvc3NpYmxlIGNhcnJ5LgogICAgICB4RGlnaXRzW3hVc2VkKytdID0gMDsKICAgIH0KICAgIHZhciBpID0gMDsKICAgIHdoaWxlIChpIDwgX25vcm1Nb2R1bHVzVXNlZCkgewogICAgICB2YXIgZCA9IF9tdWxNb2QoX2FyZ3MsIHhEaWdpdHMsIGkpOwogICAgICBhc3NlcnQoZCA9PSBfZGlnaXRzUGVyU3RlcCk7CiAgICAgIGQgPSBfQmlnSW50SW1wbC5fbXVsQWRkKAogICAgICAgICAgX2FyZ3MsIF9tdURpZ2l0LCBfbW9kdWx1c0RpZ2l0cywgMCwgeERpZ2l0cywgaSwgX25vcm1Nb2R1bHVzVXNlZCk7CiAgICAgIGFzc2VydChkID09IF9kaWdpdHNQZXJTdGVwKTsKICAgICAgaSArPSBkOwogICAgfQogICAgLy8gQ2xhbXAgeC4KICAgIHdoaWxlICh4VXNlZCA+IDAgJiYgeERpZ2l0c1t4VXNlZCAtIDFdID09IDApIHsKICAgICAgLS14VXNlZDsKICAgIH0KICAgIHhVc2VkID0gX0JpZ0ludEltcGwuX2RyU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIGksIHhEaWdpdHMpOwogICAgaWYgKF9CaWdJbnRJbXBsLl9jb21wYXJlRGlnaXRzKAogICAgICAgICAgICB4RGlnaXRzLCB4VXNlZCwgX21vZHVsdXNEaWdpdHMsIF9ub3JtTW9kdWx1c1VzZWQpID49CiAgICAgICAgMCkgewogICAgICBfQmlnSW50SW1wbC5fYWJzU3ViKAogICAgICAgICAgeERpZ2l0cywgeFVzZWQsIF9tb2R1bHVzRGlnaXRzLCBfbm9ybU1vZHVsdXNVc2VkLCB4RGlnaXRzKTsKICAgIH0KICAgIC8vIENsYW1wIHguCiAgICB3aGlsZSAoeFVzZWQgPiAwICYmIHhEaWdpdHNbeFVzZWQgLSAxXSA9PSAwKSB7CiAgICAgIC0teFVzZWQ7CiAgICB9CiAgICByZXR1cm4geFVzZWQ7CiAgfQoKICBpbnQgX3NxcihVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0gX0JpZ0ludEltcGwuX3NxckRpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIHJldHVybiBfcmVkdWNlKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCk7CiAgfQoKICBpbnQgX211bChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCB5RGlnaXRzLCBpbnQgeVVzZWQsCiAgICAgIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICB2YXIgcmVzdWx0VXNlZCA9CiAgICAgICAgX0JpZ0ludEltcGwuX211bERpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgeURpZ2l0cywgeVVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICByZXR1cm4gX3JlZHVjZShyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQpOwogIH0KfQoKLy8gTW9kdWxhciByZWR1Y3Rpb24gdXNpbmcgImNsYXNzaWMiIGFsZ29yaXRobS4KY2xhc3MgX0JpZ0ludENsYXNzaWNSZWR1Y3Rpb24gaW1wbGVtZW50cyBfQmlnSW50UmVkdWN0aW9uIHsKICBmaW5hbCBfQmlnSW50SW1wbCBfbW9kdWx1czsgLy8gTW9kdWx1cy4KICBpbnQgX25vcm1Nb2R1bHVzVXNlZDsKICBfQmlnSW50SW1wbCBfbm9ybU1vZHVsdXM7IC8vIE5vcm1hbGl6ZWQgX21vZHVsdXMuCiAgVWludDMyTGlzdCBfbm9ybU1vZHVsdXNEaWdpdHM7CiAgVWludDMyTGlzdCBfbmVnTm9ybU1vZHVsdXNEaWdpdHM7IC8vIE5lZ2F0ZWQgX25vcm1Nb2R1bHVzIGRpZ2l0cy4KICBpbnQgX21vZHVsdXNOc2g7IC8vIE5vcm1hbGl6YXRpb24gc2hpZnQgYW1vdW50LgogIFVpbnQzMkxpc3QgX2FyZ3M7IC8vIFRvcCBfbm9ybU1vZHVsdXMgZGlnaXQocykgYW5kIHBsYWNlIGhvbGRlciBmb3IgZXN0aW1hdGVkCiAgLy8gcXVvdGllbnQgZGlnaXQocykuCiAgVWludDMyTGlzdCBfdG1wRGlnaXRzOyAvLyBUZW1wb3JhcnkgZGlnaXRzIHVzZWQgZHVyaW5nIHJlZHVjdGlvbi4KCiAgX0JpZ0ludENsYXNzaWNSZWR1Y3Rpb24odGhpcy5fbW9kdWx1cykgewogICAgLy8gUHJlcHJvY2VzcyBhcmd1bWVudHMgdG8gX3JlbURpZ2l0cy4KICAgIHZhciBuc2ggPQogICAgICAgIF9CaWdJbnRJbXBsLl9kaWdpdEJpdHMgLSBfbW9kdWx1cy5fZGlnaXRzW19tb2R1bHVzLl91c2VkIC0gMV0uYml0TGVuZ3RoOwogICAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nLCBtYWtlIHN1cmUgX25lZ05vcm1Nb2R1bHVzRGlnaXRzIGhhcyBhbiBldmVuIG51bWJlcgogICAgLy8gb2YgZGlnaXRzLgogICAgaWYgKF9tb2R1bHVzLl91c2VkLmlzT2RkKSB7CiAgICAgIG5zaCArPSBfQmlnSW50SW1wbC5fZGlnaXRCaXRzOwogICAgfQogICAgX21vZHVsdXNOc2ggPSBuc2g7CiAgICBfbm9ybU1vZHVsdXMgPSBfbW9kdWx1cyA8PCBuc2g7CiAgICBfbm9ybU1vZHVsdXNVc2VkID0gX25vcm1Nb2R1bHVzLl91c2VkOwogICAgX25vcm1Nb2R1bHVzRGlnaXRzID0gX25vcm1Nb2R1bHVzLl9kaWdpdHM7CiAgICBhc3NlcnQoX25vcm1Nb2R1bHVzVXNlZC5pc0V2ZW4pOwogICAgX2FyZ3MgPSBfbmV3RGlnaXRzKDQpOwogICAgX2FyZ3NbX0JpZ0ludEltcGwuX2Rpdmlzb3JMb3dUb3BEaWdpdF0gPQogICAgICAgIF9ub3JtTW9kdWx1c0RpZ2l0c1tfbm9ybU1vZHVsdXNVc2VkIC0gMl07CiAgICBfYXJnc1tfQmlnSW50SW1wbC5fZGl2aXNvclRvcERpZ2l0XSA9CiAgICAgICAgX25vcm1Nb2R1bHVzRGlnaXRzW19ub3JtTW9kdWx1c1VzZWQgLSAxXTsKICAgIC8vIE5lZ2F0ZSBfbm9ybU1vZHVsdXMgc28gd2UgY2FuIHVzZSBfbXVsQWRkIGluc3RlYWQgb2YKICAgIC8vIHVuaW1wbGVtZW50ZWQgIF9tdWxTdWIuCiAgICB2YXIgbmVnTm9ybU1vZHVsdXMgPQogICAgICAgIF9CaWdJbnRJbXBsLm9uZS5fZGxTaGlmdChfbm9ybU1vZHVsdXNVc2VkKSAtIF9ub3JtTW9kdWx1czsKICAgIGlmIChuZWdOb3JtTW9kdWx1cy5fdXNlZCA8IF9ub3JtTW9kdWx1c1VzZWQpIHsKICAgICAgX25lZ05vcm1Nb2R1bHVzRGlnaXRzID0gX0JpZ0ludEltcGwuX2Nsb25lRGlnaXRzKAogICAgICAgICAgbmVnTm9ybU1vZHVsdXMuX2RpZ2l0cywgMCwgX25vcm1Nb2R1bHVzVXNlZCwgX25vcm1Nb2R1bHVzVXNlZCk7CiAgICB9IGVsc2UgewogICAgICBfbmVnTm9ybU1vZHVsdXNEaWdpdHMgPSBuZWdOb3JtTW9kdWx1cy5fZGlnaXRzOwogICAgfQogICAgLy8gX25lZ05vcm1Nb2R1bHVzRGlnaXRzIGlzIHJlYWQtb25seSBhbmQgaGFzIF9ub3JtTW9kdWx1c1VzZWQgZGlnaXRzIChwb3NzaWJseQogICAgLy8gaW5jbHVkaW5nIHNldmVyYWwgbGVhZGluZyB6ZXJvcykgcGx1cyBhIGxlYWRpbmcgemVybyBmb3IgNjQtYml0CiAgICAvLyBwcm9jZXNzaW5nLgogICAgX3RtcERpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIF9ub3JtTW9kdWx1c1VzZWQpOwogIH0KCiAgaW50IF9jb252ZXJ0KF9CaWdJbnRJbXBsIHgsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICB2YXIgZGlnaXRzOwogICAgdmFyIHVzZWQ7CiAgICBpZiAoeC5faXNOZWdhdGl2ZSB8fCB4Ll9hYnNDb21wYXJlKF9tb2R1bHVzKSA+PSAwKSB7CiAgICAgIHZhciByZW1haW5kZXIgPSB4Ll9yZW0oX21vZHVsdXMpOwogICAgICBpZiAoeC5faXNOZWdhdGl2ZSAmJiByZW1haW5kZXIuX3VzZWQgPiAwKSB7CiAgICAgICAgYXNzZXJ0KHJlbWFpbmRlci5faXNOZWdhdGl2ZSk7CiAgICAgICAgcmVtYWluZGVyICs9IF9tb2R1bHVzOwogICAgICB9CiAgICAgIGFzc2VydCghcmVtYWluZGVyLl9pc05lZ2F0aXZlKTsKICAgICAgdXNlZCA9IHJlbWFpbmRlci5fdXNlZDsKICAgICAgZGlnaXRzID0gcmVtYWluZGVyLl9kaWdpdHM7CiAgICB9IGVsc2UgewogICAgICB1c2VkID0geC5fdXNlZDsKICAgICAgZGlnaXRzID0geC5fZGlnaXRzOwogICAgfQogICAgdmFyIGkgPSB1c2VkICsgKHVzZWQgJiAxKTsgLy8gQ29weSBsZWFkaW5nIHplcm8gaWYgYW55LgogICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiB1c2VkOwogIH0KCiAgX0JpZ0ludEltcGwgX3JldmVydChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCkgewogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCB4VXNlZCwgeERpZ2l0cyk7CiAgfQoKICBpbnQgX3JlZHVjZShVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCkgewogICAgaWYgKHhVc2VkIDwgX21vZHVsdXMuX3VzZWQpIHsKICAgICAgcmV0dXJuIHhVc2VkOwogICAgfQogICAgLy8gVGhlIGZ1bmN0aW9uIF9CaWdJbnRJbXBsLl9yZW1EaWdpdHMoLi4uKSBpcyBvcHRpbWl6ZWQgZm9yIHJlZHVjdGlvbiBhbmQKICAgIC8vIGVxdWl2YWxlbnQgdG8gY2FsbGluZwogICAgLy8gJ2NvbnZlcnQocmV2ZXJ0KHhEaWdpdHMsIHhVc2VkKS5fcmVtKF9ub3JtTW9kdWx1cyksIHhEaWdpdHMpOycKICAgIHJldHVybiBfQmlnSW50SW1wbC5fcmVtRGlnaXRzKAogICAgICAgIHhEaWdpdHMsCiAgICAgICAgeFVzZWQsCiAgICAgICAgX25vcm1Nb2R1bHVzRGlnaXRzLAogICAgICAgIF9ub3JtTW9kdWx1c1VzZWQsCiAgICAgICAgX25lZ05vcm1Nb2R1bHVzRGlnaXRzLAogICAgICAgIF9tb2R1bHVzTnNoLAogICAgICAgIF9hcmdzLAogICAgICAgIF90bXBEaWdpdHMsCiAgICAgICAgeERpZ2l0cyk7CiAgfQoKICBpbnQgX3NxcihVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0gX0JpZ0ludEltcGwuX3NxckRpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIHJldHVybiBfcmVkdWNlKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCk7CiAgfQoKICBpbnQgX211bChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCB5RGlnaXRzLCBpbnQgeVVzZWQsCiAgICAgIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICB2YXIgcmVzdWx0VXNlZCA9CiAgICAgICAgX0JpZ0ludEltcGwuX211bERpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgeURpZ2l0cywgeVVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICByZXR1cm4gX3JlZHVjZShyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQpOwogIH0KfQqK/ABOTjwBFgE3NjIBAyMyGANJQ0dHRkkdA0JDA0ZERANDTEpKRQMxA0sTBAEHLQkuCSwJLAEJNS8BCTgzAQlBAgEpKQEvTAEEOANMUAQmFSQxNwEaNT8BPz4+AS1RTE8yMQEpKSkgKB8nHhsbAScaASoGME8oTzwcAS8GSlEGTU5OSU1NDBMBBkwMBUdBBUFHSSQFT05QKQU6NQVQJAY5MhpDBhMEAScGREUTARIfLlAoOzUuNCVIEh4IBiQTBAExBlAGSzEGOjNCS0QmFxcXQBYlEwQBSQ8GRwY8TywxSiMBSB8WEzBBJCIGIgEgETNDJiQIJAYyOAQBNgZNJE4XMC4/J0AGJBMEAT4GPgZOPSMBTR8nFxYaICQBLwEvJzgBGSJIOAgeRDMIEwYBGUoGIzkGLzYGTEgGARhJBAFKNzYRBAFNTjc+SAFFOCNNBAEoIgFOTA4iOSsXIioGGQQBQCghICABIzZELAQBLCEeIBZMEx4gMwgWBh4ZNwYkJTUEAU0PQAEyIwErPwYhJAEjIQEjIhMGQic6MgEeLCkZRisZRQFPKhgtHywGJxYEAQYwBUwqBh0hPAQBBjEFRgYzASQgGBUTBiEcMSonBkUEAUMGHAZNHUcWEAY2FAYiQisoBicbBhwkBhcEASYgGBUTBiEbLQYcMSUnBk0XMCQeHwoIBhMEAUMGHAZNHUciGxAGQiYoBhwkBhcEAU0GTSUGKAYvHRRHFyglMS4TKyBLLQYmBAEGQgVLKQVISwsFMgYtG00GHjIvGSMGPi1CMzVFBAFAGhxHKSUZSAY+LkJGKxkXGwYtJSMkBhcEAUAGLx0URxcpJTEpMiolMkYhBiAEAQZDBUhAGgUyBi0bTQYeMi8ZIwYYKhstBhwxM00XMD8dCC0eHwoIBhMEAUAaHEcoJRlHBikbEAZCKy0lIyQGFwQBSwZBTyMgRwQBBh8FUEUGISAsJz4wBiEEAUcGNygdTCMXLC0oCAYTBAFPHQYvHUswMBMqKywcBi0aLBwGIAQBUR0GLx1LMDATKissHAYtGiwcBgQBUEMWIRw1BhUbEwYaNwYfL0REBAFQBi5DJRYVGxMGIRo3BilEPgQBUEMvGiUvKzQGRAQBUUYcGiUvKyI1BisjBkQEAVBCFiEsGiUvDhwREA0QFQYiNAYdKyQGRAQBUEMWISwaJS8OHBEQDRAVBiI0Bh0rJAZEBAEGHAVMTR0FRiEGKiAvLBk4OT83PkFMCCsGKA4XERANGRARBiwrKwQBBhsFTE8bBUQnBiogHyQsGTg5Py82PU0IKgYWDhcREA0ZEBEGRypDRAQBBiUFTE0pBUUnBiogHyQsGVAvNjQIKwYkDhcREA0ZEBEGRCpDQQQBBiMFRjgFLAYdIxcsKQYlMiYEARkqIB8kIismLzAGOjojMAY0BAEcKiAgJCIrKSwwBjM9IzAGNAQBUR4GRRsGUA4GEksRBk45NB0WGhIlDSQNDx0SGhAGEyEiFzc6Ihk2IRFFMAYZLB8vBg4EAUQbBk4GSRoGEkMqEQZOOTQdFksYGhMTISIaFzQeQywNHR4aEwkXKy4gGDYhEUQwBiofOCsNKwYOBAEfKiAWIScTBicaJS8PHEYGHkUEASU6LU8wKCsmFxsGCxxIBhcEATwjGUAgL0AaGBcbBgscNQZKFT8GFwQBOVFKUU5RQj5QAVERBk4rTTQRNB1RRSAvKQ0+GkYtKCsPLggGDgQBOCQgHR8TBhQdTzcjSUJBEgYQBAFHJCAdHxMGFB5NFEhBHDsGKhIGEAQBOAZGUSIGRiYkKi0tODgOBiIBRUwdGQZJSx0UOUceMhgPE09FOkc5RQ0fGzVBGgYlNDFCGisXRSNATSxNHzcqSw01JgYcSwZNKhk8TkEyOkIJFD4PD05PFRgVNjtHTz1RDAoPGT06OjtHTysoDCI/PzxRLSoOJEEMCggPBhUjHygkJiIaGAQBTwwvOS4oTjBKRQ06GRkaERoRGw8XHCFAR0IaKxdATSxNHzcqSw01JgYcSwZOHk5BMjpCCRQ+Dw9OTxUYFTZHTz1RDAoPGT08PEdPKygMIj9BPlEtKg4kQQwKCA8GRRgTIE8GFwQBFUgcBz8BJypAIQYBGz8iQAYBNz0mKAYZBAEGPgVNEQU2BiQ1AQZMBU5OTgVNKgUJJQU2NjY2NjY2NgkGFh4vRAQBBiMFTwVBBQ8JJSUgISEoKSgJBisgHDQGGAQBBkwFMSxRBikgHDQGGAQBGUkBKDkBMTsBKzkBNDsBBiAFUEguBTwFQwYqIBw0Bh4eHyEPIQgGEwQBBisFOiYGER4hBAEoOgEnHQEnJgEiGEsGIwEjFhUcIRgIFiUbFggGEwQBBkcFPw8GPigmIEcGG04GJgEvKUk2RzE1QUI0LSMjOyYIHhc2R1AXUBEmKCQoJCUhCggyBgsdDSINIw0jDQkNQg8WHSUjMS0RPTsYPRNQEAgGCxYkIEAVKyAtFRUyD0QVPwoIDR0RDQgaGQ0IEzw/HyNNHCsKFw8YSUkSChVJESklKCQmIgodTQg+RycjJiIkIBceDwoIBhQwBAEpSUlKHR0ZGSYsNzcZDzlGLAgNF0YIF0cIMTtDKioXCCc6IyMlCCMZIR0bFx0ZCAY7TisBOCJNLD0OJRsWJRsGIxkjGRQBEyYsEkQWHy1ORxdGJRAVRQ4WH0UyTEUVRCIODC8sFB1DMEpDE0IgDAotCCYsEkQWHy1ORxdGJRAVRQ4WH0UyTEUVRCIODC8sFB1DMEpDE0IgDAotCEUSPhIULFAfRhVGPA4TRAwKEipOHUQTRDoMEUIKDxI+EhQsUB9GFUY8DhNEDAoSKk4dRBNEOgwRQgoIHhc0GQYQHUkIOQYdGS4pKgYBFyhGJD8IEDwbDShHEj8IBjcEAQZEFwUlBTIGMSoiG04GJRQ+FgYrBAEGSgVKLwU+NgUzBUIGIyAlKisEAQZJUTUFCUkJBVEyBQkgCQVGBU1QIgUJJQkGJioEAQZPUVBRBQkmJig4PDw4CQVROQUJHgkFTgwFT1EgBQknCQYkS05KTxMnOgQBGB4YFyhQBAEQHh5DMTwtBiwEAQYvBTpEJAYWIytCTiY3HQEqJwFKK0YGATErASs1MSoBGB4gGjolFz4eGRgRK04YCkItCCA5KTYdFQYBUBUpIgEjJCMGARVDNEUVJB8pJBoIBgEcISgTD0kfNRUROyMZFQ4MCggGSAQBBjYFMTYtBhYgFjgkBgEnKSkqHTwnJhgsDxoWKgoaFigKGicKCCIGODIvBAEkFxcnHAQBBkYFUC0FQwYkPgEgARY5MRoGASwBMCobHDAbOwZRLxgEARoZKh40MhUIBiccMxYGFxgYBjUEAgEkIhw3OEkgRAEnNgIBKD8eRB0USThPPE4xTgEuJxtILygfKRgNI0AuHAYEATYdGB8cHzRLBRA5KxsnPT9RTR80MkoEAUMQKDgvOCg+QD0ZT0BMITQyGkAZBAEQQhJPJksSNB1CPT42NSJHLyAOBAEgGTk9IDxERCIGHSEfFyMGEQQBN0k9IRckBjM/BAEbFC8vRhwGDyMqIx9NIw4GEDMPBkQkQQ0bRgYQMw8GEgQBRUsuBAFJIRVOLgQCATA8Khg0IUQyUBhEASsrDlFREiAlBhckKy8lGy0yKjI8HxlDMzhKDTYGVEcTMwQBORAOOSgyJx8IJh4iDRYaBjwXIwYRBAE3NQQBLyIUBk8dRiMRDxwaHxUPFBIEAUVLLgQBSSEVTi4EAgEhZGFydDpjb3JlLXBhdGNoL2JpZ2ludF9wYXRjaC5kYXJ0K29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZG91YmxlLmRhcnSsEy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRG91YmxlIGltcGxlbWVudHMgZG91YmxlIHsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZmFjdG9yeSBfRG91YmxlLmZyb21JbnRlZ2VyKGludCB2YWx1ZSkgbmF0aXZlICJEb3VibGVfZG91YmxlRnJvbUludGVnZXIiOwoKICBpbnQgZ2V0IGhhc2hDb2RlIG5hdGl2ZSAiRG91YmxlX2hhc2hDb2RlIjsKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlIG5hdGl2ZSAiRG91YmxlX2hhc2hDb2RlIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgZG91YmxlIG9wZXJhdG9yICsobnVtIG90aGVyKSB7CiAgICByZXR1cm4gX2FkZChvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgX2FkZChkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX2FkZCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGRvdWJsZSBvcGVyYXRvciAtKG51bSBvdGhlcikgewogICAgcmV0dXJuIF9zdWIob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIF9zdWIoZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV9zdWIiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBkb3VibGUgb3BlcmF0b3IgKihudW0gb3RoZXIpIHsKICAgIHJldHVybiBfbXVsKG90aGVyLnRvRG91YmxlKCkpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBfbXVsKGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfbXVsIjsKCiAgaW50IG9wZXJhdG9yIH4vKG51bSBvdGhlcikgewogICAgcmV0dXJuIF90cnVuY19kaXYob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfdHJ1bmNfZGl2KGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfdHJ1bmNfZGl2IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgZG91YmxlIG9wZXJhdG9yIC8obnVtIG90aGVyKSB7CiAgICByZXR1cm4gX2RpdihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgX2Rpdihkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX2RpdiI7CgogIGRvdWJsZSBvcGVyYXRvciAlKG51bSBvdGhlcikgewogICAgcmV0dXJuIF9tb2R1bG8ob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIF9tb2R1bG8oZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV9tb2R1bG8iOwoKICBkb3VibGUgcmVtYWluZGVyKG51bSBvdGhlcikgewogICAgcmV0dXJuIF9yZW1haW5kZXIob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBkb3VibGUgX3JlbWFpbmRlcihkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX3JlbWFpbmRlciI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgb3BlcmF0b3IgLSgpIG5hdGl2ZSAiRG91YmxlX2ZsaXBTaWduQml0IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIHJldHVybiAob3RoZXIgaXMgbnVtKSAmJiBfZXF1YWwob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBfZXF1YWwoZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV9lcXVhbCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgX2VxdWFsVG9JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJEb3VibGVfZXF1YWxUb0ludGVnZXIiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yIDwobnVtIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgPiB0aGlzOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgYm9vbCBvcGVyYXRvciA+KG51bSBvdGhlcikgewogICAgcmV0dXJuIF9ncmVhdGVyVGhhbihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIF9ncmVhdGVyVGhhbihkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX2dyZWF0ZXJUaGFuIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgYm9vbCBvcGVyYXRvciA+PShudW0gb3RoZXIpIHsKICAgIHJldHVybiAodGhpcyA9PSBvdGhlcikgfHwgKHRoaXMgPiBvdGhlcik7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yIDw9KG51bSBvdGhlcikgewogICAgcmV0dXJuICh0aGlzID09IG90aGVyKSB8fCAodGhpcyA8IG90aGVyKTsKICB9CgogIGRvdWJsZSBfYWRkRnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl9hZGQodGhpcyk7CiAgfQoKICBkb3VibGUgX3N1YkZyb21JbnRlZ2VyKGludCBvdGhlcikgewogICAgcmV0dXJuIG5ldyBfRG91YmxlLmZyb21JbnRlZ2VyKG90aGVyKS5fc3ViKHRoaXMpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBfbXVsRnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl9tdWwodGhpcyk7CiAgfQoKICBpbnQgX3RydW5jRGl2RnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl90cnVuY19kaXYodGhpcyk7CiAgfQoKICBkb3VibGUgX21vZHVsb0Zyb21JbnRlZ2VyKGludCBvdGhlcikgewogICAgcmV0dXJuIG5ldyBfRG91YmxlLmZyb21JbnRlZ2VyKG90aGVyKS5fbW9kdWxvKHRoaXMpOwogIH0KCiAgZG91YmxlIF9yZW1haW5kZXJGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBuZXcgX0RvdWJsZS5mcm9tSW50ZWdlcihvdGhlcikuX3JlbWFpbmRlcih0aGlzKTsKICB9CgogIGJvb2wgX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIoaW50IG90aGVyKQogICAgICBuYXRpdmUgIkRvdWJsZV9ncmVhdGVyVGhhbkZyb21JbnRlZ2VyIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgbmF0aXZlICJEb3VibGVfZ2V0SXNOZWdhdGl2ZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgZ2V0IGlzSW5maW5pdGUgbmF0aXZlICJEb3VibGVfZ2V0SXNJbmZpbml0ZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgZ2V0IGlzTmFOIG5hdGl2ZSAiRG91YmxlX2dldElzTmFOIjsKICBib29sIGdldCBpc0Zpbml0ZSA9PiAhaXNJbmZpbml0ZSAmJiAhaXNOYU47IC8vIENhbiBiZSBvcHRpbWl6ZWQuCgogIGRvdWJsZSBhYnMoKSB7CiAgICAvLyBIYW5kbGUgbmVnYXRpdmUgMC4wLgogICAgaWYgKHRoaXMgPT0gMC4wKSByZXR1cm4gMC4wOwogICAgcmV0dXJuIHRoaXMgPCAwLjAgPyAtdGhpcyA6IHRoaXM7CiAgfQoKICBkb3VibGUgZ2V0IHNpZ24gewogICAgaWYgKHRoaXMgPiAwLjApIHJldHVybiAxLjA7CiAgICBpZiAodGhpcyA8IDAuMCkgcmV0dXJuIC0xLjA7CiAgICByZXR1cm4gdGhpczsgLy8gKy8tMC4wIG9yIE5hTi4KICB9CgogIGludCByb3VuZCgpID0+IHJvdW5kVG9Eb3VibGUoKS50b0ludCgpOwogIGludCBmbG9vcigpID0+IGZsb29yVG9Eb3VibGUoKS50b0ludCgpOwogIGludCBjZWlsKCkgPT4gY2VpbFRvRG91YmxlKCkudG9JbnQoKTsKICBpbnQgdHJ1bmNhdGUoKSA9PiB0cnVuY2F0ZVRvRG91YmxlKCkudG9JbnQoKTsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSByb3VuZFRvRG91YmxlKCkgbmF0aXZlICJEb3VibGVfcm91bmQiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgZmxvb3JUb0RvdWJsZSgpIG5hdGl2ZSAiRG91YmxlX2Zsb29yIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIGNlaWxUb0RvdWJsZSgpIG5hdGl2ZSAiRG91YmxlX2NlaWwiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgdHJ1bmNhdGVUb0RvdWJsZSgpIG5hdGl2ZSAiRG91YmxlX3RydW5jYXRlIjsKCiAgbnVtIGNsYW1wKG51bSBsb3dlckxpbWl0LCBudW0gdXBwZXJMaW1pdCkgewogICAgaWYgKGxvd2VyTGltaXQgaXMhIG51bSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShsb3dlckxpbWl0LCAibG93ZXJMaW1pdCIsICJub3QgYSBudW1iZXIiKTsKICAgIH0KICAgIGlmICh1cHBlckxpbWl0IGlzISBudW0pIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUodXBwZXJMaW1pdCwgInVwcGVyTGltaXQiLCAibm90IGEgbnVtYmVyIik7CiAgICB9CgogICAgaWYgKGxvd2VyTGltaXQuY29tcGFyZVRvKHVwcGVyTGltaXQpID4gMCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihsb3dlckxpbWl0KTsKICAgIH0KICAgIGlmIChsb3dlckxpbWl0LmlzTmFOKSByZXR1cm4gbG93ZXJMaW1pdDsKICAgIGlmICh0aGlzLmNvbXBhcmVUbyhsb3dlckxpbWl0KSA8IDApIHJldHVybiBsb3dlckxpbWl0OwogICAgaWYgKHRoaXMuY29tcGFyZVRvKHVwcGVyTGltaXQpID4gMCkgcmV0dXJuIHVwcGVyTGltaXQ7CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IHRvSW50KCkgbmF0aXZlICJEb3VibGVfdG9JbnQiOwoKICBkb3VibGUgdG9Eb3VibGUoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgQ0FDSEVfU0laRV9MT0cyID0gMzsKICBzdGF0aWMgY29uc3QgaW50IENBQ0hFX0xFTkdUSCA9IDEgPDwgKENBQ0hFX1NJWkVfTE9HMiArIDEpOwogIHN0YXRpYyBjb25zdCBpbnQgQ0FDSEVfTUFTSyA9IENBQ0hFX0xFTkdUSCAtIDE7CiAgLy8gRWFjaCBrZXkgKGRvdWJsZSkgZm9sbG93ZWQgYnkgaXRzIHRvU3RyaW5nIHJlc3VsdC4KICBzdGF0aWMgZmluYWwgTGlzdCBfY2FjaGUgPSBuZXcgTGlzdChDQUNIRV9MRU5HVEgpOwogIHN0YXRpYyBpbnQgX2NhY2hlRXZpY3RJbmRleCA9IDA7CgogIFN0cmluZyBfdG9TdHJpbmcoKSBuYXRpdmUgIkRvdWJsZV90b1N0cmluZyI7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIHN0YXJ0aW5nIGF0IG1vc3QgcmVjZW50bHkgaW5zZXJ0ZWQuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IENBQ0hFX0xFTkdUSDsgaSArPSAyKSB7CiAgICAgIC8vIE5lZWQgJ2lkZW50aWNhbCcgdG8gaGFuZGxlIG5lZ2F0aXZlIHplcm8sIGV0Yy4KICAgICAgaWYgKGlkZW50aWNhbChfY2FjaGVbaV0sIHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIF9jYWNoZVtpICsgMV07CiAgICAgIH0KICAgIH0KICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIG9wdGltaXppbmcgYWxsIHNtYWxsIGludGVncmFsIHZhbHVlcy4KICAgIGlmIChpZGVudGljYWwoMC4wLCB0aGlzKSkgewogICAgICByZXR1cm4gIjAuMCI7CiAgICB9CiAgICBTdHJpbmcgcmVzdWx0ID0gX3RvU3RyaW5nKCk7CiAgICAvLyBSZXBsYWNlIHRoZSBsZWFzdCByZWNlbnRseSBpbnNlcnRlZCBlbnRyeS4KICAgIF9jYWNoZVtfY2FjaGVFdmljdEluZGV4XSA9IHRoaXM7CiAgICBfY2FjaGVbX2NhY2hlRXZpY3RJbmRleCArIDFdID0gcmVzdWx0OwogICAgX2NhY2hlRXZpY3RJbmRleCA9IChfY2FjaGVFdmljdEluZGV4ICsgMikgJiBDQUNIRV9NQVNLOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZ0FzRml4ZWQoaW50IGZyYWN0aW9uRGlnaXRzKSB7CiAgICAvLyBTZWUgRUNNQVNjcmlwdC0yNjIsIDE1LjcuNC41IGZvciBkZXRhaWxzLgoKICAgIGlmIChmcmFjdGlvbkRpZ2l0cyBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgICAgZnJhY3Rpb25EaWdpdHMsICJmcmFjdGlvbkRpZ2l0cyIsICJub3QgYW4gaW50ZWdlciIpOwogICAgfQogICAgLy8gU3RlcCAyLgogICAgaWYgKGZyYWN0aW9uRGlnaXRzIDwgMCB8fCBmcmFjdGlvbkRpZ2l0cyA+IDIwKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGZyYWN0aW9uRGlnaXRzLCAwLCAyMCwgImZyYWN0aW9uRGlnaXRzIik7CiAgICB9CgogICAgLy8gU3RlcCAzLgogICAgZG91YmxlIHggPSB0aGlzOwoKICAgIC8vIFN0ZXAgNC4KICAgIGlmIChpc05hTikgcmV0dXJuICJOYU4iOwoKICAgIC8vIFN0ZXAgNSBhbmQgNiBza2lwcGVkLiBXaWxsIGJlIGRlYWx0IHdpdGggYnkgbmF0aXZlIGZ1bmN0aW9uLgoKICAgIC8vIFN0ZXAgNy4KICAgIGlmICh4ID49IDFlMjEgfHwgeCA8PSAtMWUyMSkgewogICAgICByZXR1cm4geC50b1N0cmluZygpOwogICAgfQoKICAgIHJldHVybiBfdG9TdHJpbmdBc0ZpeGVkKGZyYWN0aW9uRGlnaXRzKTsKICB9CgogIFN0cmluZyBfdG9TdHJpbmdBc0ZpeGVkKGludCBmcmFjdGlvbkRpZ2l0cykgbmF0aXZlICJEb3VibGVfdG9TdHJpbmdBc0ZpeGVkIjsKCiAgU3RyaW5nIHRvU3RyaW5nQXNFeHBvbmVudGlhbChbaW50IGZyYWN0aW9uRGlnaXRzXSkgewogICAgLy8gU2VlIEVDTUFTY3JpcHQtMjYyLCAxNS43LjQuNiBmb3IgZGV0YWlscy4KCiAgICAvLyBUaGUgRWNtYVNjcmlwdCBzcGVjaWZpY2F0aW9uIGNoZWNrcyBmb3IgTmFOIGFuZCBJbmZpbml0eSBiZWZvcmUgbG9va2luZwogICAgLy8gYXQgdGhlIGZyYWN0aW9uRGlnaXRzLiBJbiBEYXJ0IHdlIGFyZSBjb25zaXN0ZW50IHdpdGggdG9TdHJpbmdBc0ZpeGVkIGFuZAogICAgLy8gbG9vayBhdCB0aGUgZnJhY3Rpb25EaWdpdHMgZmlyc3QuCgogICAgLy8gU3RlcCA3LgogICAgaWYgKGZyYWN0aW9uRGlnaXRzICE9IG51bGwpIHsKICAgICAgaWYgKGZyYWN0aW9uRGlnaXRzIGlzISBpbnQpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgICAgZnJhY3Rpb25EaWdpdHMsICJmcmFjdGlvbkRpZ2l0cyIsICJub3QgYW4gaW50ZWdlciIpOwogICAgICB9CiAgICAgIGlmIChmcmFjdGlvbkRpZ2l0cyA8IDAgfHwgZnJhY3Rpb25EaWdpdHMgPiAyMCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGZyYWN0aW9uRGlnaXRzLCAwLCAyMCwgImZyYWN0aW9uRGlnaXRzIik7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoaXNOYU4pIHJldHVybiAiTmFOIjsKICAgIGlmICh0aGlzID09IGRvdWJsZS5pbmZpbml0eSkgcmV0dXJuICJJbmZpbml0eSI7CiAgICBpZiAodGhpcyA9PSAtZG91YmxlLmluZmluaXR5KSByZXR1cm4gIi1JbmZpbml0eSI7CgogICAgLy8gVGhlIGRhcnQgZnVuY3Rpb24gcHJpbnRzIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiB3aGVuIGZyYWN0aW9uRGlnaXRzCiAgICAvLyBlcXVhbHMgbnVsbC4gVGhlIG5hdGl2ZSBmdW5jdGlvbiB3YW50cyAtMSBpbnN0ZWFkLgogICAgZnJhY3Rpb25EaWdpdHMgPSAoZnJhY3Rpb25EaWdpdHMgPT0gbnVsbCkgPyAtMSA6IGZyYWN0aW9uRGlnaXRzOwoKICAgIHJldHVybiBfdG9TdHJpbmdBc0V4cG9uZW50aWFsKGZyYWN0aW9uRGlnaXRzKTsKICB9CgogIFN0cmluZyBfdG9TdHJpbmdBc0V4cG9uZW50aWFsKGludCBmcmFjdGlvbkRpZ2l0cykKICAgICAgbmF0aXZlICJEb3VibGVfdG9TdHJpbmdBc0V4cG9uZW50aWFsIjsKCiAgU3RyaW5nIHRvU3RyaW5nQXNQcmVjaXNpb24oaW50IHByZWNpc2lvbikgewogICAgLy8gU2VlIEVDTUFTY3JpcHQtMjYyLCAxNS43LjQuNyBmb3IgZGV0YWlscy4KCiAgICAvLyBUaGUgRWNtYVNjcmlwdCBzcGVjaWZpY2F0aW9uIGNoZWNrcyBmb3IgTmFOIGFuZCBJbmZpbml0eSBiZWZvcmUgbG9va2luZwogICAgLy8gYXQgdGhlIGZyYWN0aW9uRGlnaXRzLiBJbiBEYXJ0IHdlIGFyZSBjb25zaXN0ZW50IHdpdGggdG9TdHJpbmdBc0ZpeGVkIGFuZAogICAgLy8gbG9vayBhdCB0aGUgZnJhY3Rpb25EaWdpdHMgZmlyc3QuCgogICAgaWYgKHByZWNpc2lvbiBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKHByZWNpc2lvbiwgInByZWNpc2lvbiIsICJub3QgYW4gaW50ZWdlciIpOwogICAgfQogICAgLy8gU3RlcCA4LgogICAgaWYgKHByZWNpc2lvbiA8IDEgfHwgcHJlY2lzaW9uID4gMjEpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UocHJlY2lzaW9uLCAxLCAyMSwgInByZWNpc2lvbiIpOwogICAgfQoKICAgIGlmIChpc05hTikgcmV0dXJuICJOYU4iOwogICAgaWYgKHRoaXMgPT0gZG91YmxlLmluZmluaXR5KSByZXR1cm4gIkluZmluaXR5IjsKICAgIGlmICh0aGlzID09IC1kb3VibGUuaW5maW5pdHkpIHJldHVybiAiLUluZmluaXR5IjsKCiAgICByZXR1cm4gX3RvU3RyaW5nQXNQcmVjaXNpb24ocHJlY2lzaW9uKTsKICB9CgogIFN0cmluZyBfdG9TdHJpbmdBc1ByZWNpc2lvbihpbnQgZnJhY3Rpb25EaWdpdHMpCiAgICAgIG5hdGl2ZSAiRG91YmxlX3RvU3RyaW5nQXNQcmVjaXNpb24iOwoKICAvLyBPcmRlciBpczogTmFOID4gSW5maW5pdHkgPiAuLi4gPiAwLjAgPiAtMC4wID4gLi4uID4gLUluZmluaXR5LgogIGludCBjb21wYXJlVG8obnVtIG90aGVyKSB7CiAgICBjb25zdCBpbnQgRVFVQUwgPSAwLCBMRVNTID0gLTEsIEdSRUFURVIgPSAxOwogICAgaWYgKHRoaXMgPCBvdGhlcikgewogICAgICByZXR1cm4gTEVTUzsKICAgIH0gZWxzZSBpZiAodGhpcyA+IG90aGVyKSB7CiAgICAgIHJldHVybiBHUkVBVEVSOwogICAgfSBlbHNlIGlmICh0aGlzID09IG90aGVyKSB7CiAgICAgIGlmICh0aGlzID09IDAuMCkgewogICAgICAgIGJvb2wgdGhpc0lzTmVnYXRpdmUgPSBpc05lZ2F0aXZlOwogICAgICAgIGJvb2wgb3RoZXJJc05lZ2F0aXZlID0gb3RoZXIuaXNOZWdhdGl2ZTsKICAgICAgICBpZiAodGhpc0lzTmVnYXRpdmUgPT0gb3RoZXJJc05lZ2F0aXZlKSB7CiAgICAgICAgICByZXR1cm4gRVFVQUw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzSXNOZWdhdGl2ZSA/IExFU1MgOiBHUkVBVEVSOwogICAgICB9IGVsc2UgaWYgKG90aGVyIGlzIGludCkgewogICAgICAgIC8vIENvbXBhcmUgYXMgaW50ZWdlcnMgYXMgaXQgaXMgbW9yZSBwcmVjaXNlIGlmIHRoZSBpbnRlZ2VyIHZhbHVlIGlzCiAgICAgICAgLy8gb3V0c2lkZSBvZiBNSU5fRVhBQ1RfSU5UX1RPX0RPVUJMRS4uTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUgcmFuZ2UuCiAgICAgICAgY29uc3QgaW50IE1BWF9FWEFDVF9JTlRfVE9fRE9VQkxFID0gOTAwNzE5OTI1NDc0MDk5MjsgLy8gMl41My4KICAgICAgICBjb25zdCBpbnQgTUlOX0VYQUNUX0lOVF9UT19ET1VCTEUgPSAtTUFYX0VYQUNUX0lOVF9UT19ET1VCTEU7CiAgICAgICAgaWYgKChNSU5fRVhBQ1RfSU5UX1RPX0RPVUJMRSA8PSBvdGhlcikgJiYKICAgICAgICAgICAgKG90aGVyIDw9IE1BWF9FWEFDVF9JTlRfVE9fRE9VQkxFKSkgewogICAgICAgICAgcmV0dXJuIEVRVUFMOwogICAgICAgIH0KICAgICAgICBjb25zdCBib29sIGxpbWl0SW50c1RvNjRCaXRzID0gKCgxIDw8IDY0KSA9PSAwKTsKICAgICAgICBpZiAobGltaXRJbnRzVG82NEJpdHMpIHsKICAgICAgICAgIC8vIFdpdGggaW50ZWdlcnMgbGltaXRlZCB0byA2NCBiaXRzLCBkb3VibGUudG9JbnQoKSBjbGFtcHMKICAgICAgICAgIC8vIGRvdWJsZSB2YWx1ZSB0byBmaXQgaW50byB0aGUgTUlOX0lOVDY0Li5NQVhfSU5UNjQgcmFuZ2UuCiAgICAgICAgICAvLyBNQVhfSU5UNjQgaXMgbm90IHByZWNpc2VseSByZXByZXNlbnRhYmxlIGFzIGRvdWJsZSwgc28KICAgICAgICAgIC8vIGludGVnZXJzIG5lYXIgTUFYX0lOVDY0IGNvbXBhcmUgYXMgZXF1YWwgdG8gKE1BWF9JTlQ2NCArIDEpIHdoZW4KICAgICAgICAgIC8vIHJlcHJlc2VudGVkIGFzIGRvdWJsZXMuCiAgICAgICAgICAvLyBUaGVyZSBpcyBubyBzaW1pbGFyIHByb2JsZW0gd2l0aCBNSU5fSU5UNjQgYXMgaXQgaXMgcHJlY2lzZWx5CiAgICAgICAgICAvLyByZXByZXNlbnRhYmxlIGFzIGRvdWJsZS4KICAgICAgICAgIGNvbnN0IGRvdWJsZSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUgPSA5MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgICBpZiAodGhpcyA+PSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUpIHsKICAgICAgICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0b0ludCgpLmNvbXBhcmVUbyhvdGhlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIEVRVUFMOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzTmFOKSB7CiAgICAgIHJldHVybiBvdGhlci5pc05hTiA/IEVRVUFMIDogR1JFQVRFUjsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE90aGVyIGlzIE5hTi4KICAgICAgcmV0dXJuIExFU1M7CiAgICB9CiAgfQp9CoFtAE5OPAEeARoiK0wBLTYBKx0hIwQBKzEBKx0hIwQBKzEBKx0hIwQBKzEBHykEASk6ASsdISMEASsxASEmBAErNwEgKQQBPQErMwEoHSM3BAEoMyhCASgdHxkEASgdHysEASg/ASgdIC4EASgdIC4EASY2BAEmNgQBNyY2BAEoPAQBKTkEASw8BAEqLgEoNSg1KCtDAREcISYEARQgISMEASoqKDABKzArMCsuKzYBLh5PBh5PBgEwKwYtOzsRBAEpJQEWEQQBKD4yODUjAS8BFkAwOCgeCAZCIBQGITIlKzwTBAEvMQEiJT8GDzVLBgEPFQEPHQFEAQ8jGwYBLQQBTwE3MQFPUSkBDyIkJ0EIN00IBgEdNDYBUDpFATMEATQtAS4xAU9RKQEdTwYPK0EGAR00NgEsBAEyKwFEHTEYEx8WIBkqMTEYCjAhTU5HRjIyGAo5IUVGRE4lSyZGLxwMCikPFggYLA0XEwYEAgEbZGFydDpjb3JlLXBhdGNoL2RvdWJsZS5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZnVuY3Rpb24uZGFydIdlLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9DbG9zdXJlIGltcGxlbWVudHMgRnVuY3Rpb24gewogIGZhY3RvcnkgX0Nsb3N1cmUuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSBuYXRpdmUgIkNsb3N1cmVfZXF1YWxzIjsKCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBfaGFzaCA/Pz0gX2NvbXB1dGVIYXNoKCk7CiAgICByZXR1cm4gX2hhc2g7CiAgfQoKICBfQ2xvc3VyZSBnZXQgY2FsbCA9PiB0aGlzOwoKICBfQ2xvc3VyZSBfY2xvbmUoKSBuYXRpdmUgIkNsb3N1cmVfY2xvbmUiOwoKICBpbnQgX2NvbXB1dGVIYXNoKCkgbmF0aXZlICJDbG9zdXJlX2NvbXB1dGVIYXNoIjsKCiAgLy8gTm8gaW5zdGFuY2UgZmllbGRzIHNob3VsZCBiZSBkZWNsYXJlZCBiZWZvcmUgdGhlIGZvbGxvd2luZyBmaWVsZHMgd2hvc2UKICAvLyBvZmZzZXRzIG11c3QgYmUgaWRlbnRpY2FsIGluIERhcnQgYW5kIEMrKy4KCiAgLy8gVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIGRlY2xhcmVkIGJvdGggaW4gcmF3X29iamVjdC5oIChmb3IgZGlyZWN0IGFjY2VzcwogIC8vIGZyb20gQysrIGNvZGUpIGFuZCBhbHNvIGhlcmUgc28gdGhhdCB0aGUgb2Zmc2V0LXRvLWZpZWxkIG1hcCB1c2VkIGJ5CiAgLy8gZGVmZXJyZWQgb2JqZWN0cyBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KICAvLyBDYXV0aW9uOiBUaGVzZSBmaWVsZHMgYXJlIG5vdCBEYXJ0IGluc3RhbmNlcywgYnV0IFZNIG9iamVjdHMuIFRoZWlyIERhcnQKICAvLyBuYW1lcyBkbyBub3QgbmVlZCB0byBtYXRjaCB0aGUgQysrIG5hbWVzLCBidXQgdGhleSBtdXN0IGJlIHByaXZhdGUuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfaW5zdGFudGlhdG9yX3R5cGVfYXJndW1lbnRzOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICB2YXIgX2Z1bmN0aW9uX3R5cGVfYXJndW1lbnRzOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICB2YXIgX2RlbGF5ZWRfdHlwZV9hcmd1bWVudHM7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfZnVuY3Rpb247CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfY29udGV4dDsKCiAgLy8gTm90ZTogX0Nsb3N1cmUgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBWTSAibWFnaWNhbGx5Iiwgd2l0aG91dCBpbnZva2luZwogIC8vIGNvbnN0cnVjdG9yLiBTbywgX0Nsb3N1cmUgZGVmYXVsdCBjb25zdHJ1Y3RvciBpcyBuZXZlciBjb21waWxlZCBhbmQKICAvLyBkZXRlY3Rpb24gb2YgZGVmYXVsdC1pbml0aWFsaXplZCBmaWVsZHMgaXMgbm90IHBlcmZvcm1lZC4KICAvLyBBcyBhIGNvbnNlcXVlbmNlLCBWTSBpbmNvcnJlY3RseSBhc3N1bWVzIHRoYXQgX2hhc2ggZmllbGQgaXMgbm90CiAgLy8gbnVsbGFibGUgYW5kIG1heSBpbmNvcnJlY3RseSByZW1vdmUgJ2lmIChfaGFzaCA9PSBudWxsKScgaW4gZ2V0Omhhc2hDb2RlLgogIC8vIFRoaXMgaW5pdGlhbGl6ZXIgbWFrZXMgX2hhc2ggZmllbGQgbnVsbGFibGUgZXZlbiB3aXRob3V0IGNvbnN0cnVjdG9yCiAgLy8gY29tcGlsYXRpb24uCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfaGFzaCA9IG51bGw7Cn0KOABOTjwBHgEaJScZBAE6ARUeEgQBHQEsATMBTTABT0ovTkkcJBwgHB8cERwQAUxJP0ZPShIcFAIBHWRhcnQ6Y29yZS1wYXRjaC9mdW5jdGlvbi5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZ3Jvd2FibGVfYXJyYXkuZGFydK3LLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Hcm93YWJsZUxpc3Q8VD4gZXh0ZW5kcyBMaXN0QmFzZTxUPiB7CiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBUIGVsZW1lbnQpIHsKICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPiBsZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCBsZW5ndGgpOwogICAgfQogICAgaWYgKGluZGV4ID09IHRoaXMubGVuZ3RoKSB7CiAgICAgIGFkZChlbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG9sZExlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgLy8gV2UgYXJlIG1vZGlmeWluZyB0aGUgbGVuZ3RoIGp1c3QgYmVsb3cgdGhlIGlzLWNoZWNrLiBXaXRob3V0IHRoZSBjaGVjawogICAgLy8gQXJyYXkuY29weSBjb3VsZCB0aHJvdyBhbiBleGNlcHRpb24sIGxlYXZpbmcgdGhlIGxpc3QgaW4gYSBiYWQgc3RhdGUKICAgIC8vICh3aXRoIGEgbGVuZ3RoIHRoYXQgaGFzIGJlZW4gaW5jcmVhc2VkLCBidXQgd2l0aG91dCBhIG5ldyBlbGVtZW50KS4KICAgIGlmIChpbmRleCBpcyEgaW50KSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihpbmRleCk7CiAgICB0aGlzLmxlbmd0aCsrOwogICAgTGlzdHMuY29weSh0aGlzLCBpbmRleCwgdGhpcywgaW5kZXggKyAxLCBvbGRMZW5ndGggLSBpbmRleCk7CiAgICB0aGlzW2luZGV4XSA9IGVsZW1lbnQ7CiAgfQoKICBUIHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdmFyIHJlc3VsdCA9IHRoaXNbaW5kZXhdOwogICAgaW50IG5ld0xlbmd0aCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIGlmIChpbmRleCA8IG5ld0xlbmd0aCkgewogICAgICBMaXN0cy5jb3B5KHRoaXMsIGluZGV4ICsgMSwgdGhpcywgaW5kZXgsIG5ld0xlbmd0aCAtIGluZGV4KTsKICAgIH0KICAgIHRoaXMubGVuZ3RoID0gbmV3TGVuZ3RoOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgewogICAgICAgIHJlbW92ZUF0KGkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPFQ+IGl0ZXJhYmxlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCBsZW5ndGgpOwogICAgfQogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIGNhbiBwcm9iYWJseSBkZXRlY3QgbW9yZSBjYXNlcy4KICAgIGlmIChpdGVyYWJsZSBpcyEgTGlzdCAmJiBpdGVyYWJsZSBpcyEgU2V0ICYmIGl0ZXJhYmxlIGlzISBTdWJMaXN0SXRlcmFibGUpIHsKICAgICAgaXRlcmFibGUgPSBpdGVyYWJsZS50b0xpc3QoKTsKICAgIH0KICAgIGludCBpbnNlcnRpb25MZW5ndGggPSBpdGVyYWJsZS5sZW5ndGg7CiAgICAvLyBUaGVyZSBtaWdodCBiZSBlcnJvcnMgYWZ0ZXIgdGhlIGxlbmd0aCBjaGFuZ2UsIGluIHdoaWNoIGNhc2UgdGhlIGxpc3QKICAgIC8vIHdpbGwgZW5kIHVwIGJlaW5nIG1vZGlmaWVkIGJ1dCB0aGUgb3BlcmF0aW9uIG5vdCBjb21wbGV0ZS4gVW5sZXNzIHdlCiAgICAvLyBhbHdheXMgZ28gdGhyb3VnaCBhICJ0b0xpc3QiIHdlIGNhbid0IHJlYWxseSBhdm9pZCB0aGF0LgogICAgdGhpcy5sZW5ndGggKz0gaW5zZXJ0aW9uTGVuZ3RoOwogICAgc2V0UmFuZ2UoaW5kZXggKyBpbnNlcnRpb25MZW5ndGgsIHRoaXMubGVuZ3RoLCB0aGlzLCBpbmRleCk7CiAgICBzZXRBbGwoaW5kZXgsIGl0ZXJhYmxlKTsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8VD4gaXRlcmFibGUpIHsKICAgIGlmIChpdGVyYWJsZSBpcyBMaXN0KSB7CiAgICAgIHNldFJhbmdlKGluZGV4LCBpbmRleCArIGl0ZXJhYmxlLmxlbmd0aCwgaXRlcmFibGUpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChUIGVsZW1lbnQgaW4gaXRlcmFibGUpIHsKICAgICAgICB0aGlzW2luZGV4KytdID0gZWxlbWVudDsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIExpc3RzLmNvcHkodGhpcywgZW5kLCB0aGlzLCBzdGFydCwgdGhpcy5sZW5ndGggLSBlbmQpOwogICAgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aCAtIChlbmQgLSBzdGFydCk7CiAgfQoKICBMaXN0PFQ+IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIDxUPltdOwogICAgTGlzdCBsaXN0ID0gbmV3IF9MaXN0KGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSB0aGlzW3N0YXJ0ICsgaV07CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8VD4uX3dpdGhEYXRhKGxpc3QpOwogICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmYWN0b3J5IF9Hcm93YWJsZUxpc3QoaW50IGxlbmd0aCkgewogICAgdmFyIGRhdGEgPSBfYWxsb2NhdGVEYXRhKGxlbmd0aCk7CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8VD4uX3dpdGhEYXRhKGRhdGEpOwogICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmYWN0b3J5IF9Hcm93YWJsZUxpc3Qud2l0aENhcGFjaXR5KGludCBjYXBhY2l0eSkgewogICAgdmFyIGRhdGEgPSBfYWxsb2NhdGVEYXRhKGNhcGFjaXR5KTsKICAgIHJldHVybiBuZXcgX0dyb3dhYmxlTGlzdDxUPi5fd2l0aERhdGEoZGF0YSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Hcm93YWJsZUxpc3QpCiAgZmFjdG9yeSBfR3Jvd2FibGVMaXN0Ll93aXRoRGF0YShfTGlzdCBkYXRhKSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9hbGxvY2F0ZSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IF9jYXBhY2l0eSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9nZXRDYXBhY2l0eSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IGxlbmd0aCBuYXRpdmUgIkdyb3dhYmxlTGlzdF9nZXRMZW5ndGgiOwoKICB2b2lkIHNldCBsZW5ndGgoaW50IG5ld19sZW5ndGgpIHsKICAgIGludCBvbGRfY2FwYWNpdHkgPSBfY2FwYWNpdHk7CiAgICBpbnQgbmV3X2NhcGFjaXR5ID0gbmV3X2xlbmd0aDsKICAgIGlmIChuZXdfY2FwYWNpdHkgPiBvbGRfY2FwYWNpdHkpIHsKICAgICAgX2dyb3cobmV3X2NhcGFjaXR5KTsKICAgICAgX3NldExlbmd0aChuZXdfbGVuZ3RoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gV2UgYXJlIHNocmlua2luZy4gUGljayB0aGUgbWV0aG9kIHdoaWNoIGhhcyBmZXdlciB3cml0ZXMuCiAgICAvLyBJbiB0aGUgc2hyaW5rLXRvLWZpdCBwYXRoLCB3ZSB3cml0ZSB8bmV3X2NhcGFjaXR5ICsgbmV3X2xlbmd0aHwgd29yZHMKICAgIC8vIChudWxsIGluaXQgKyBjb3B5KS4KICAgIC8vIEluIHRoZSBub24tc2hyaW5rLXRvLWZpdCBwYXRoLCB3ZSB3cml0ZSB8bGVuZ3RoIC0gbmV3X2xlbmd0aHwgd29yZHMKICAgIC8vIChudWxsIG92ZXJ3cml0ZSkuCiAgICBmaW5hbCBib29sIHNob3VsZFNocmlua1RvRml0ID0KICAgICAgICAobmV3X2NhcGFjaXR5ICsgbmV3X2xlbmd0aCkgPCAobGVuZ3RoIC0gbmV3X2xlbmd0aCk7CiAgICBpZiAoc2hvdWxkU2hyaW5rVG9GaXQpIHsKICAgICAgX3NocmluayhuZXdfY2FwYWNpdHksIG5ld19sZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IG5ld19sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHRoaXNbaV0gPSBudWxsOwogICAgICB9CiAgICB9CiAgICBfc2V0TGVuZ3RoKG5ld19sZW5ndGgpOwogIH0KCiAgdm9pZCBfc2V0TGVuZ3RoKGludCBuZXdfbGVuZ3RoKSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9zZXRMZW5ndGgiOwoKICB2b2lkIF9zZXREYXRhKF9MaXN0IGFycmF5KSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9zZXREYXRhIjsKCiAgVCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiR3Jvd2FibGVMaXN0X2dldEluZGV4ZWQiOwoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIFQgdmFsdWUpIHsKICAgIF9zZXRJbmRleGVkKGluZGV4LCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkKGludCBpbmRleCwgVCB2YWx1ZSkgbmF0aXZlICJHcm93YWJsZUxpc3Rfc2V0SW5kZXhlZCI7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgYWRkKFQgdmFsdWUpIHsKICAgIHZhciBsZW4gPSBsZW5ndGg7CiAgICBpZiAobGVuID09IF9jYXBhY2l0eSkgewogICAgICBfZ3JvdyhfbmV4dENhcGFjaXR5KGxlbikpOwogICAgfQogICAgX3NldExlbmd0aChsZW4gKyAxKTsKICAgIHRoaXNbbGVuXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8VD4gaXRlcmFibGUpIHsKICAgIHZhciBsZW4gPSBsZW5ndGg7CiAgICBmaW5hbCBjaWQgPSBDbGFzc0lELmdldElEKGl0ZXJhYmxlKTsKICAgIGZpbmFsIGlzVk1MaXN0ID0gKGNpZCA9PSBDbGFzc0lELmNpZEFycmF5KSB8fAogICAgICAgIChjaWQgPT0gQ2xhc3NJRC5jaWRHcm93YWJsZU9iamVjdEFycmF5KSB8fAogICAgICAgIChjaWQgPT0gQ2xhc3NJRC5jaWRJbW11dGFibGVBcnJheSk7CiAgICBpZiAoaXNWTUxpc3QgfHwgKGl0ZXJhYmxlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSkgewogICAgICB2YXIgY2FwID0gX2NhcGFjaXR5OwogICAgICAvLyBQcmVncm93IGlmIHdlIGtub3cgaXRlcmFibGUubGVuZ3RoLgogICAgICB2YXIgaXRlckxlbiA9IGl0ZXJhYmxlLmxlbmd0aDsKICAgICAgdmFyIG5ld0xlbiA9IGxlbiArIGl0ZXJMZW47CiAgICAgIGlmIChuZXdMZW4gPiBjYXApIHsKICAgICAgICBkbyB7CiAgICAgICAgICBjYXAgPSBfbmV4dENhcGFjaXR5KGNhcCk7CiAgICAgICAgfSB3aGlsZSAobmV3TGVuID4gY2FwKTsKICAgICAgICBfZ3JvdyhjYXApOwogICAgICB9CiAgICAgIGlmIChpc1ZNTGlzdCkgewogICAgICAgIGlmIChpZGVudGljYWwoaXRlcmFibGUsIHRoaXMpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9zZXRMZW5ndGgobmV3TGVuKTsKICAgICAgICBmaW5hbCBMaXN0QmFzZTxUPiBpdGVyYWJsZUFzTGlzdCA9IGl0ZXJhYmxlOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlckxlbjsgaSsrKSB7CiAgICAgICAgICB0aGlzW2xlbisrXSA9IGl0ZXJhYmxlQXNMaXN0W2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIEl0ZXJhdG9yIGl0ID0gaXRlcmFibGUuaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHJldHVybjsKICAgIGRvIHsKICAgICAgd2hpbGUgKGxlbiA8IF9jYXBhY2l0eSkgewogICAgICAgIGludCBuZXdMZW4gPSBsZW4gKyAxOwogICAgICAgIHRoaXMuX3NldExlbmd0aChuZXdMZW4pOwogICAgICAgIHRoaXNbbGVuXSA9IGl0LmN1cnJlbnQ7CiAgICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMubGVuZ3RoICE9IG5ld0xlbikgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgICBsZW4gPSBuZXdMZW47CiAgICAgIH0KICAgICAgX2dyb3coX25leHRDYXBhY2l0eShfY2FwYWNpdHkpKTsKICAgIH0gd2hpbGUgKHRydWUpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgVCByZW1vdmVMYXN0KCkgewogICAgdmFyIGxlbiA9IGxlbmd0aCAtIDE7CiAgICB2YXIgZWxlbSA9IHRoaXNbbGVuXTsKICAgIHRoaXMubGVuZ3RoID0gbGVuOwogICAgcmV0dXJuIGVsZW07CiAgfQoKICBUIGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbMF07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIFQgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBUIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICAvLyBTaGFyZWQgYXJyYXkgdXNlZCBhcyBiYWNraW5nIGZvciBuZXcgZW1wdHkgZ3Jvd2FibGUgYXJyYXlzLgogIHN0YXRpYyBmaW5hbCBfTGlzdCBfZW1wdHlMaXN0ID0gbmV3IF9MaXN0KDApOwoKICBzdGF0aWMgX0xpc3QgX2FsbG9jYXRlRGF0YShpbnQgY2FwYWNpdHkpIHsKICAgIGlmIChjYXBhY2l0eSA9PSAwKSB7CiAgICAgIC8vIFVzZSBzaGFyZWQgZW1wdHkgbGlzdCBhcyBiYWNraW5nLgogICAgICByZXR1cm4gX2VtcHR5TGlzdDsKICAgIH0KICAgIC8vIFJvdW5kIHVwIHNpemUgdG8gdGhlIG5leHQgb2RkIG51bWJlciwgc2luY2UgdGhpcyBpcyBmcmVlCiAgICAvLyBiZWNhdXNlIG9mIGFsaWdubWVudCByZXF1aXJlbWVudHMgb2YgdGhlIEdDLgogICAgcmV0dXJuIG5ldyBfTGlzdChjYXBhY2l0eSB8IDEpOwogIH0KCiAgLy8gR3JvdyBmcm9tIDAgdG8gMywgYW5kIHRoZW4gZG91YmxlICsgMS4KICBpbnQgX25leHRDYXBhY2l0eShpbnQgb2xkX2NhcGFjaXR5KSA9PiAob2xkX2NhcGFjaXR5ICogMikgfCAzOwoKICB2b2lkIF9ncm93KGludCBuZXdfY2FwYWNpdHkpIHsKICAgIHZhciBuZXdEYXRhID0gX2FsbG9jYXRlRGF0YShuZXdfY2FwYWNpdHkpOwogICAgLy8gVGhpcyBpcyBhIHdvcmstYXJvdW5kIGZvciBkYXJ0YnVnLmNvbS8zMDA5MDogYXJyYXktYm91bmQtY2hlY2sKICAgIC8vIGdlbmVyYWxpemF0aW9uIGNhdXNlcyBleGNlc3NpdmUgZGVvcHRpbWl6YXRpb25zIGJlY2F1c2UgaXQKICAgIC8vIGhvaXN0cyBDaGVja0FycmF5Qm91bmQoaSwgLi4uKSBvdXQgb2YgdGhlIGxvb3AgYmVsb3cgYW5kIHR1cm5zIGl0CiAgICAvLyBpbnRvIENoZWNrQXJyYXlCb3VuZChsZW5ndGggLSAxLCAuLi4pLiBXaGljaCBkZW9wdGltaXplcwogICAgLy8gaWYgbGVuZ3RoID09IDAuIEhvd2V2ZXIgdGhlIGxvb3AgaXRzZWxmIGRvZXMgbm90IGV4ZWN1dGUKICAgIC8vIGlmIGxlbmd0aCA9PSAwLgogICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIG5ld0RhdGFbaV0gPSB0aGlzW2ldOwogICAgICB9CiAgICB9CiAgICBfc2V0RGF0YShuZXdEYXRhKTsKICB9CgogIHZvaWQgX3NocmluayhpbnQgbmV3X2NhcGFjaXR5LCBpbnQgbmV3X2xlbmd0aCkgewogICAgdmFyIG5ld0RhdGEgPSBfYWxsb2NhdGVEYXRhKG5ld19jYXBhY2l0eSk7CiAgICAvLyBUaGlzIGlzIGEgd29yay1hcm91bmQgZm9yIGRhcnRidWcuY29tLzMwMDkwLiBTZWUgdGhlIGNvbW1lbnQgaW4gX2dyb3cuCiAgICBpZiAobmV3X2xlbmd0aCA+IDApIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdfbGVuZ3RoOyBpKyspIHsKICAgICAgICBuZXdEYXRhW2ldID0gdGhpc1tpXTsKICAgICAgfQogICAgfQogICAgX3NldERhdGEobmV3RGF0YSk7CiAgfQoKICAvLyBJdGVyYWJsZSBpbnRlcmZhY2UuCgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgZm9yRWFjaChmKFQgZWxlbWVudCkpIHsKICAgIGludCBpbml0aWFsTGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgICBpZiAobGVuZ3RoICE9IGluaXRpYWxMZW5ndGgpIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICB9CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgZmluYWwgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gIiI7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiAiJHt0aGlzWzBdfSI7CiAgICBpZiAoc2VwYXJhdG9yLmlzTm90RW1wdHkpIHJldHVybiBfam9pbldpdGhTZXBhcmF0b3Ioc2VwYXJhdG9yKTsKICAgIHZhciBpID0gMDsKICAgIHZhciBjb2RlVW5pdENvdW50ID0gMDsKICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CiAgICAgIGZpbmFsIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICAvLyBXaGlsZSBsaXN0IGNvbnRhaW5zIG9uZS1ieXRlIHN0cmluZ3MuCiAgICAgIGlmIChlbGVtZW50IGlzIF9PbmVCeXRlU3RyaW5nKSB7CiAgICAgICAgY29kZVVuaXRDb3VudCArPSBlbGVtZW50Lmxlbmd0aDsKICAgICAgICBpKys7CiAgICAgICAgLy8gTG9vcCBiYWNrIHdoaWxlIHN0cmluZ3MgYXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgLy8gT3RoZXJ3aXNlLCBuZXZlciBsb29wIGJhY2sgdG8gdGhlIG91dGVyIGxvb3AsIGFuZAogICAgICAvLyBoYW5kbGUgdGhlIHJlbWFpbmluZyBzdHJpbmdzIGJlbG93LgoKICAgICAgLy8gTG9vcCB3aGlsZSBlbGVtZW50cyBhcmUgc3RyaW5ncywKICAgICAgZmluYWwgaW50IGZpcnN0Tm9uT25lQnl0ZVN0cmluZ0xpbWl0ID0gaTsKICAgICAgdmFyIG5leHRFbGVtZW50ID0gZWxlbWVudDsKICAgICAgd2hpbGUgKG5leHRFbGVtZW50IGlzIFN0cmluZykgewogICAgICAgIGkrKzsKICAgICAgICBpZiAoaSA9PSBsZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBfU3RyaW5nQmFzZS5fY29uY2F0UmFuZ2VOYXRpdmUodGhpcywgMCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgbmV4dEVsZW1lbnQgPSB0aGlzW2ldOwogICAgICB9CgogICAgICAvLyBOb3QgYWxsIGVsZW1lbnRzIGFyZSBzdHJpbmdzLCBzbyBhbGxvY2F0ZSBhIG5ldyBiYWNraW5nIGFycmF5LgogICAgICBmaW5hbCBsaXN0ID0gbmV3IF9MaXN0KGxlbmd0aCk7CiAgICAgIGZvciAoaW50IGNvcHlJbmRleCA9IDA7IGNvcHlJbmRleCA8IGk7IGNvcHlJbmRleCsrKSB7CiAgICAgICAgbGlzdFtjb3B5SW5kZXhdID0gdGhpc1tjb3B5SW5kZXhdOwogICAgICB9CiAgICAgIC8vIElzIG5vbi16ZXJvIGlmIGxpc3QgY29udGFpbnMgYSBub24tb25lYnl0ZSBzdHJpbmcuCiAgICAgIHZhciBvbmVieXRlQ2FuYXJ5ID0gaSAtIGZpcnN0Tm9uT25lQnl0ZVN0cmluZ0xpbWl0OwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGZpbmFsIFN0cmluZyBlbGVtZW50U3RyaW5nID0gIiRuZXh0RWxlbWVudCI7CiAgICAgICAgb25lYnl0ZUNhbmFyeSB8PQogICAgICAgICAgICAoQ2xhc3NJRC5nZXRJRChlbGVtZW50U3RyaW5nKSBeIENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZyk7CiAgICAgICAgbGlzdFtpXSA9IGVsZW1lbnRTdHJpbmc7CiAgICAgICAgY29kZVVuaXRDb3VudCArPSBlbGVtZW50U3RyaW5nLmxlbmd0aDsKICAgICAgICBpKys7CiAgICAgICAgaWYgKGkgPT0gbGVuZ3RoKSBicmVhazsKICAgICAgICBuZXh0RWxlbWVudCA9IHRoaXNbaV07CiAgICAgIH0KICAgICAgaWYgKG9uZWJ5dGVDYW5hcnkgPT0gMCkgewogICAgICAgIC8vIEFsbCBlbGVtZW50cyByZXR1cm5lZCBhIG9uZS1ieXRlIHN0cmluZyBmcm9tIHRvU3RyaW5nLgogICAgICAgIHJldHVybiBfT25lQnl0ZVN0cmluZy5fY29uY2F0QWxsKGxpc3QsIGNvZGVVbml0Q291bnQpOwogICAgICB9CiAgICAgIHJldHVybiBfU3RyaW5nQmFzZS5fY29uY2F0UmFuZ2VOYXRpdmUobGlzdCwgMCwgbGVuZ3RoKTsKICAgIH0KICAgIC8vIEFsbCBlbGVtZW50cyB3ZXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICByZXR1cm4gX09uZUJ5dGVTdHJpbmcuX2NvbmNhdEFsbCh0aGlzLCBjb2RlVW5pdENvdW50KTsKICB9CgogIFN0cmluZyBfam9pbldpdGhTZXBhcmF0b3IoU3RyaW5nIHNlcGFyYXRvcikgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZSh0aGlzWzBdKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBidWZmZXIud3JpdGUoc2VwYXJhdG9yKTsKICAgICAgYnVmZmVyLndyaXRlKHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgVCBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gdGhpc1tpbmRleF07CiAgfQoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PSAwOwogIH0KCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIHRoaXMubGVuZ3RoID0gMDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IExpc3RCYXNlLmxpc3RUb1N0cmluZyh0aGlzKTsKCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgTGlzdEl0ZXJhdG9yPFQ+KHRoaXMpOwogIH0KCiAgTGlzdDxUPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICBMaXN0IGxpc3QgPSBncm93YWJsZSA/IG5ldyBfTGlzdChsZW5ndGgpIDogbmV3IF9MaXN0PFQ+KGxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0W2ldID0gdGhpc1tpXTsKICAgICAgfQogICAgICBpZiAoIWdyb3dhYmxlKSByZXR1cm4gbGlzdDsKICAgICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PFQ+Ll93aXRoRGF0YShsaXN0KTsKICAgICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBncm93YWJsZSA/IDxUPltdIDogbmV3IExpc3Q8VD4oMCk7CiAgfQoKICBTZXQ8VD4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxUPi5mcm9tKHRoaXMpOwogIH0KfQqBjABOTjwBHgEaLSYrNAYgFA4GIU5MSzcTQRsEARoeJR1DBh0TBAEgLCAVFQgGEgQBNCc0BjpRJAYrTUxAJEEdBAExHDoNJCEIBgQBKTk7LwQBKj8eIyMnIQY3HxMEASYmNxYhBhMEATUoMQQBMU4BNB43ATQeMgEkIiMnGx4OBkFNG0sZIz0dKQ0yGAgGHAQBQwE8AT0BKh8EAUkBJB4WFhwhBhkXBAEmFikyMyw9Gy0lIhoNJCAUCBYpNwohNSwrChAIBiUgCSAeISAkUBYIJxQEAR4TGhoXEQQBECQsBAEPLSwEARElPSoEAUEwAS0ZKxkGQDQkBAEsQQEhL0ZCSUBAFxYpHggGFwQBMy9OGi0eCAYXBAEZAR4fICcSUAYEASkkICpEDxsZHy8nKQ05Egg7LQEqMCEmDRtCCh8IAUgmPCsIPDoVNRlHIS8NIB8IIEI/CD4GKzsEATAuGywfHQYeBAEbGAQBFR0EASMBERUEATQBHh0mBAEqHhZHKRsIIjkhFQYuBAETIgQCASNkYXJ0OmNvcmUtcGF0Y2gvZ3Jvd2FibGVfYXJyYXkuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2ltbXV0YWJsZV9tYXAuZGFydJWdLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLy8gSW1tdXRhYmxlIG1hcCBjbGFzcyBmb3IgY29tcGlsZXIgZ2VuZXJhdGVkIG1hcCBsaXRlcmFscy4KLy8gVE9ETyhscm4pOiBFeHRlbmQgTWFwQmFzZSB3aXRoIFVubW9kaWZpYWJsZU1hcE1peGluIHdoZW4gbWl4aW5zCi8vIHN1cHBvcnQgZm9yd2FyZGluZyBjb25zdCBjb25zdHJ1Y3RvcnMuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ltbXV0YWJsZU1hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgZmluYWwgX0ltbXV0YWJsZUxpc3QgX2t2UGFpcnM7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBfSW1tdXRhYmxlTWFwLl9jcmVhdGUoX0ltbXV0YWJsZUxpc3Qga2V5VmFsdWVQYWlycykKICAgICAgOiBfa3ZQYWlycyA9IGtleVZhbHVlUGFpcnM7CgogIE1hcDxLMiwgVjI+IGNhc3Q8SzIsIFYyPigpID0+IE1hcC5jYXN0RnJvbTxLLCBWLCBLMiwgVjI+KHRoaXMpOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgLy8gVG8gcHJlc2VydmUgdGhlIGtleS12YWx1ZSBvcmRlciBvZiB0aGUgbWFwIGxpdGVyYWwsIHRoZSBrZXlzIGFyZQogICAgLy8gbm90IHNvcnRlZC4gTmVlZCB0byBkbyBsaW5lYXIgc2VhcmNoIG9yIGltcGxlbWVudCBhbiBhZGRpdGlvbmFsCiAgICAvLyBsb29rdXAgdGFibGUuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9rdlBhaXJzLmxlbmd0aCAtIDE7IGkgKz0gMikgewogICAgICBpZiAoa2V5ID09IF9rdlBhaXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIF9rdlBhaXJzW2kgKyAxXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiBfa3ZQYWlycy5sZW5ndGggPT0gMDsKICB9CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIHJldHVybiBfa3ZQYWlycy5sZW5ndGggfi8gMjsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9rdlBhaXJzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIGYoX2t2UGFpcnNbaV0sIF9rdlBhaXJzW2kgKyAxXSk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBLZXlJdGVyYWJsZTxLPih0aGlzKTsKICB9CgogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgewogICAgcmV0dXJuIG5ldyBfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYWJsZTxWPih0aGlzKTsKICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfa3ZQYWlycy5sZW5ndGg7IGkgKz0gMikgewogICAgICBpZiAoa2V5ID09IF9rdlBhaXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgX2t2UGFpcnMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgaWYgKHZhbHVlID09IF9rdlBhaXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHNldCB2YWx1ZSBpbiB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3Qgc2V0IHZhbHVlIGluIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBzZXQgdmFsdWUgaW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2xlYXIgdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgViByZW1vdmUoT2JqZWN0IGtleSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgPT4KICAgICAgbmV3IF9JbW11dGFibGVNYXBFbnRyeUl0ZXJhYmxlPEssIFY+KHRoaXMpOwoKICBNYXA8SzIsIFYyPiBtYXA8SzIsIFYyPihNYXBFbnRyeTxLMiwgVjI+IGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB2YXIgcmVzdWx0ID0gPEsyLCBWMj57fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2t2UGFpcnMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgdmFyIGVudHJ5ID0gZihfa3ZQYWlyc1tpXSwgX2t2UGFpcnNbaSArIDFdKTsKICAgICAgcmVzdWx0W2VudHJ5LmtleV0gPSBlbnRyeS52YWx1ZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IG5ld0VudHJpZXMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHByZWRpY2F0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IE1hcEJhc2UubWFwVG9TdHJpbmcodGhpcyk7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBLZXlJdGVyYWJsZTxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgX0ltbXV0YWJsZU1hcEtleUl0ZXJhYmxlKHRoaXMuX21hcCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBLZXlJdGVyYXRvcjxFPihfbWFwKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwp9CgpjbGFzcyBfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYWJsZTxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmFibGUodGhpcy5fbWFwKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmF0b3I8RT4oX21hcCk7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKfQoKY2xhc3MgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmFibGU8SywgVj4KICAgIGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IHsKICBmaW5hbCBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmFibGUodGhpcy5fbWFwKTsKCiAgSXRlcmF0b3I8TWFwRW50cnk8SywgVj4+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBFbnRyeUl0ZXJhdG9yPEssIFY+KF9tYXApOwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBLZXlJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgaW50IF9uZXh0SW5kZXggPSAwOwogIEUgX2N1cnJlbnQ7CgogIF9JbW11dGFibGVNYXBLZXlJdGVyYXRvcih0aGlzLl9tYXApOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaW50IG5ld0luZGV4ID0gX25leHRJbmRleDsKICAgIGlmIChuZXdJbmRleCA8IF9tYXAubGVuZ3RoKSB7CiAgICAgIF9uZXh0SW5kZXggPSBuZXdJbmRleCArIDE7CiAgICAgIF9jdXJyZW50ID0gX21hcC5fa3ZQYWlyc1tuZXdJbmRleCAqIDJdOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBWYWx1ZUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIF9JbW11dGFibGVNYXAgX21hcDsKICBpbnQgX25leHRJbmRleCA9IDA7CiAgRSBfY3VycmVudDsKCiAgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmF0b3IodGhpcy5fbWFwKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGludCBuZXdJbmRleCA9IF9uZXh0SW5kZXg7CiAgICBpZiAobmV3SW5kZXggPCBfbWFwLmxlbmd0aCkgewogICAgICBfbmV4dEluZGV4ID0gbmV3SW5kZXggKyAxOwogICAgICBfY3VycmVudCA9IF9tYXAuX2t2UGFpcnNbbmV3SW5kZXggKiAyICsgMV07CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKY2xhc3MgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmF0b3I8SywgVj4gaW1wbGVtZW50cyBJdGVyYXRvcjxNYXBFbnRyeTxLLCBWPj4gewogIF9JbW11dGFibGVNYXAgX21hcDsKICBpbnQgX25leHRJbmRleCA9IDA7CiAgTWFwRW50cnk8SywgVj4gX2N1cnJlbnQ7CgogIF9JbW11dGFibGVNYXBFbnRyeUl0ZXJhdG9yKHRoaXMuX21hcCk7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpbnQgbmV3SW5kZXggPSBfbmV4dEluZGV4OwogICAgaWYgKG5ld0luZGV4IDwgX21hcC5sZW5ndGgpIHsKICAgICAgX25leHRJbmRleCA9IG5ld0luZGV4ICsgMTsKICAgICAgX2N1cnJlbnQgPSBuZXcgTWFwRW50cnk8SywgVj4oCiAgICAgICAgICBfbWFwLl9rdlBhaXJzW25ld0luZGV4ICogMl0sIF9tYXAuX2t2UGFpcnNbbmV3SW5kZXggKiAyICsgMV0pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIE1hcEVudHJ5PEssIFY+IGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CoDeAE5OPAEeAT1DKhoxIQEcPCIBQh5IRxU3ICAIBhEEARUhBAEjARMhBAEpMycGBAEZMgQBGzQEASEzIBUIBhIEASUzIhUIBhIEASZIBAEhSAQBJ0gEARFBBAEZRwQBKjIBQB0zMycGEwQBOUUEATdFBAEtRQQBNUUEATICAUccJwEdMgQBIQIBSRwpAR00BAEhAgEnNhwpASo3BAEhAgE7FhYOAScBFB8iIS4TBhUSBAEdAgE9FhYOASkBFB8iITITBhUSBAEdAgFNFhYbASkBFB8iISVJEwYVEgQBKgIBImRhcnQ6Y29yZS1wYXRjaC9pbW11dGFibGVfbWFwLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9pbnRlZ2Vycy5kYXJ0wABa0y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKYWJzdHJhY3QgY2xhc3MgX0ludGVnZXJJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIGludCB7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIG51bSBvcGVyYXRvciArKG51bSBvdGhlcikgPT4gb3RoZXIuX2FkZEZyb21JbnRlZ2VyKHRoaXMpOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBudW0gb3BlcmF0b3IgLShudW0gb3RoZXIpID0+IG90aGVyLl9zdWJGcm9tSW50ZWdlcih0aGlzKTsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgbnVtIG9wZXJhdG9yICoobnVtIG90aGVyKSA9PiBvdGhlci5fbXVsRnJvbUludGVnZXIodGhpcyk7CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3Igfi8obnVtIG90aGVyKSB7CiAgICBpZiAoKG90aGVyIGlzIGludCkgJiYgKG90aGVyID09IDApKSB7CiAgICAgIHRocm93IGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogICAgfQogICAgcmV0dXJuIG90aGVyLl90cnVuY0RpdkZyb21JbnRlZ2VyKHRoaXMpOwogIH0KCiAgZG91YmxlIG9wZXJhdG9yIC8obnVtIG90aGVyKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpIC8gb3RoZXIudG9Eb3VibGUoKTsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgbnVtIG9wZXJhdG9yICUobnVtIG90aGVyKSB7CiAgICBpZiAoKG90aGVyIGlzIGludCkgJiYgKG90aGVyID09IDApKSB7CiAgICAgIHRocm93IGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogICAgfQogICAgcmV0dXJuIG90aGVyLl9tb2R1bG9Gcm9tSW50ZWdlcih0aGlzKTsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgLSgpIHsKICAgIHJldHVybiAwIC0gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgJihpbnQgb3RoZXIpID0+IG90aGVyLl9iaXRBbmRGcm9tSW50ZWdlcih0aGlzKTsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIHwoaW50IG90aGVyKSA9PiBvdGhlci5fYml0T3JGcm9tSW50ZWdlcih0aGlzKTsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIF4oaW50IG90aGVyKSA9PiBvdGhlci5fYml0WG9yRnJvbUludGVnZXIodGhpcyk7CgogIG51bSByZW1haW5kZXIobnVtIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIuX3JlbWFpbmRlckZyb21JbnRlZ2VyKHRoaXMpOwogIH0KCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX2JpdEFuZEZyb21TbWkoX1NtaSBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX2JpdEFuZEZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfYml0QW5kRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfYml0QW5kRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9iaXRPckZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX2JpdE9yRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9iaXRYb3JGcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9iaXRYb3JGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX3NockZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX3NockZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfc2hsRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfc2hsRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9hZGRGcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9hZGRGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX3N1YkZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX3N1YkZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfbXVsRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfbXVsRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF90cnVuY0RpdkZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX3RydW5jRGl2RnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9tb2R1bG9Gcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9tb2R1bG9Gcm9tSW50ZWdlciI7CiAgaW50IF9yZW1haW5kZXJGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciAtIChvdGhlciB+LyB0aGlzKSAqIHRoaXM7CiAgfQoKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yID4+KGludCBvdGhlcikgPT4gb3RoZXIuX3NockZyb21JbnRlZ2VyKHRoaXMpOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgPDwoaW50IG90aGVyKSA9PiBvdGhlci5fc2hsRnJvbUludGVnZXIodGhpcyk7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPChudW0gb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciA+IHRoaXM7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID4obnVtIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIuX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIodGhpcyk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID49KG51bSBvdGhlcikgewogICAgcmV0dXJuICh0aGlzID09IG90aGVyKSB8fCAodGhpcyA+IG90aGVyKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPD0obnVtIG90aGVyKSB7CiAgICByZXR1cm4gKHRoaXMgPT0gb3RoZXIpIHx8ICh0aGlzIDwgb3RoZXIpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIoaW50IG90aGVyKQogICAgICBuYXRpdmUgIkludGVnZXJfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlciI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMgbnVtKSB7CiAgICAgIHJldHVybiBvdGhlci5fZXF1YWxUb0ludGVnZXIodGhpcyk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBfZXF1YWxUb0ludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfZXF1YWxUb0ludGVnZXIiOwogIGludCBhYnMoKSB7CiAgICByZXR1cm4gdGhpcyA8IDAgPyAtdGhpcyA6IHRoaXM7CiAgfQoKICBpbnQgZ2V0IHNpZ24gewogICAgcmV0dXJuICh0aGlzID4gMCkgPyAxIDogKHRoaXMgPCAwKSA/IC0xIDogMDsKICB9CgogIGJvb2wgZ2V0IGlzRXZlbiA9PiAoKHRoaXMgJiAxKSA9PSAwKTsKICBib29sIGdldCBpc09kZCA9PiAhaXNFdmVuOwogIGJvb2wgZ2V0IGlzTmFOID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gdGhpcyA8IDA7CiAgYm9vbCBnZXQgaXNJbmZpbml0ZSA9PiBmYWxzZTsKICBib29sIGdldCBpc0Zpbml0ZSA9PiB0cnVlOwoKICBpbnQgdG9VbnNpZ25lZChpbnQgd2lkdGgpIHsKICAgIHJldHVybiB0aGlzICYgKCgxIDw8IHdpZHRoKSAtIDEpOwogIH0KCiAgaW50IHRvU2lnbmVkKGludCB3aWR0aCkgewogICAgLy8gVGhlIHZhbHVlIG9mIGJpbmFyeSBudW1iZXIgd2VpZ2h0cyBlYWNoIGJpdCBieSBhIHBvd2VyIG9mIHR3by4gIFRoZQogICAgLy8gdHdvcy1jb21wbGVtZW50IHZhbHVlIHdlaWdodHMgdGhlIHNpZ24gYml0IG5lZ2F0aXZlbHkuICBXZSBjb21wdXRlIHRoZQogICAgLy8gdmFsdWUgb2YgdGhlIG5lZ2F0aXZlIHdlaWdodGluZyBieSBpc29sYXRpbmcgdGhlIHNpZ24gYml0IHdpdGggdGhlCiAgICAvLyBjb3JyZWN0IHBvd2VyIG9mIHR3byB3ZWlnaHRpbmcgYW5kIHN1YnRyYWN0aW5nIGl0IGZyb20gdGhlIHZhbHVlIG9mIHRoZQogICAgLy8gbG93ZXIgYml0cy4KICAgIGludCBzaWduTWFzayA9IDEgPDwgKHdpZHRoIC0gMSk7CiAgICByZXR1cm4gKHRoaXMgJiAoc2lnbk1hc2sgLSAxKSkgLSAodGhpcyAmIHNpZ25NYXNrKTsKICB9CgogIGludCBjb21wYXJlVG8obnVtIG90aGVyKSB7CiAgICBjb25zdCBpbnQgRVFVQUwgPSAwLCBMRVNTID0gLTEsIEdSRUFURVIgPSAxOwogICAgaWYgKG90aGVyIGlzIGRvdWJsZSkgewogICAgICBjb25zdCBpbnQgTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUgPSA5MDA3MTk5MjU0NzQwOTkyOyAvLyAyXjUzLgogICAgICBjb25zdCBpbnQgTUlOX0VYQUNUX0lOVF9UT19ET1VCTEUgPSAtTUFYX0VYQUNUX0lOVF9UT19ET1VCTEU7CiAgICAgIGNvbnN0IGJvb2wgbGltaXRJbnRzVG82NEJpdHMgPSAoKDEgPDwgNjQpID09IDApOwogICAgICBpZiAobGltaXRJbnRzVG82NEJpdHMpIHsKICAgICAgICAvLyBXaXRoIGludGVnZXJzIGxpbWl0ZWQgdG8gNjQgYml0cywgZG91YmxlLnRvSW50KCkgY2xhbXBzCiAgICAgICAgLy8gZG91YmxlIHZhbHVlIHRvIGZpdCBpbnRvIHRoZSBNSU5fSU5UNjQuLk1BWF9JTlQ2NCByYW5nZS4KICAgICAgICAvLyBDaGVjayBpZiB0aGUgZG91YmxlIHZhbHVlIGlzIG91dHNpZGUgb2YgdGhpcyByYW5nZS4KICAgICAgICAvLyBUaGlzIGNoZWNrIGhhbmRsZXMgKy8taW5maW5pdHkgYXMgd2VsbC4KICAgICAgICBjb25zdCBkb3VibGUgbWluSW50NjRBc0RvdWJsZSA9IC05MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgLy8gTUFYX0lOVDY0IGlzIG5vdCBwcmVjaXNlbHkgcmVwcmVzZW50YWJsZSBpbiBkb3VibGVzLCBzbwogICAgICAgIC8vIGNoZWNrIGFnYWluc3QgKE1BWF9JTlQ2NCArIDEpLgogICAgICAgIGNvbnN0IGRvdWJsZSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUgPSA5MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgaWYgKG90aGVyIDwgbWluSW50NjRBc0RvdWJsZSkgewogICAgICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICAgICAgfSBlbHNlIGlmIChvdGhlciA+PSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUpIHsKICAgICAgICAgIHJldHVybiBMRVNTOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAob3RoZXIuaXNJbmZpbml0ZSkgewogICAgICAgICAgcmV0dXJuIG90aGVyLmlzTmVnYXRpdmUgPyBHUkVBVEVSIDogTEVTUzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG90aGVyLmlzTmFOKSB7CiAgICAgICAgcmV0dXJuIExFU1M7CiAgICAgIH0KICAgICAgaWYgKE1JTl9FWEFDVF9JTlRfVE9fRE9VQkxFIDw9IHRoaXMgJiYgdGhpcyA8PSBNQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRSkgewogICAgICAgIC8vIExldCB0aGUgZG91YmxlIGltcGxlbWVudGF0aW9uIGRlYWwgd2l0aCAtMC4wLgogICAgICAgIHJldHVybiAtKG90aGVyLmNvbXBhcmVUbyh0aGlzLnRvRG91YmxlKCkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBJZiBhYnMob3RoZXIpID4gTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUsIHRoZW4gb3RoZXIgaGFzIGFuIGludGVnZXIKICAgICAgICAvLyB2YWx1ZSAobm8gYml0cyBiZWxvdyB0aGUgZGVjaW1hbCBwb2ludCkuCiAgICAgICAgb3RoZXIgPSBvdGhlci50b0ludCgpOwogICAgICB9CiAgICB9CiAgICBpZiAodGhpcyA8IG90aGVyKSB7CiAgICAgIHJldHVybiBMRVNTOwogICAgfSBlbHNlIGlmICh0aGlzID4gb3RoZXIpIHsKICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gRVFVQUw7CiAgICB9CiAgfQoKICBpbnQgcm91bmQoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGludCBmbG9vcigpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgaW50IGNlaWwoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGludCB0cnVuY2F0ZSgpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpOwogIH0KCiAgZG91YmxlIGZsb29yVG9Eb3VibGUoKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpOwogIH0KCiAgZG91YmxlIGNlaWxUb0RvdWJsZSgpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCk7CiAgfQoKICBkb3VibGUgdHJ1bmNhdGVUb0RvdWJsZSgpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCk7CiAgfQoKICBudW0gY2xhbXAobnVtIGxvd2VyTGltaXQsIG51bSB1cHBlckxpbWl0KSB7CiAgICBpZiAobG93ZXJMaW1pdCBpcyEgbnVtKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKGxvd2VyTGltaXQsICJsb3dlckxpbWl0IiwgIm5vdCBhIG51bWJlciIpOwogICAgfQogICAgaWYgKHVwcGVyTGltaXQgaXMhIG51bSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSh1cHBlckxpbWl0LCAidXBwZXJMaW1pdCIsICJub3QgYSBudW1iZXIiKTsKICAgIH0KCiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGludGVnZXJzLgogICAgaWYgKGxvd2VyTGltaXQgaXMgaW50ICYmIHVwcGVyTGltaXQgaXMgaW50ICYmIGxvd2VyTGltaXQgPD0gdXBwZXJMaW1pdCkgewogICAgICBpZiAodGhpcyA8IGxvd2VyTGltaXQpIHJldHVybiBsb3dlckxpbWl0OwogICAgICBpZiAodGhpcyA+IHVwcGVyTGltaXQpIHJldHVybiB1cHBlckxpbWl0OwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIC8vIEdlbmVyaWMgY2FzZSBpbnZvbHZpbmcgZG91YmxlcywgYW5kIGludmFsaWQgaW50ZWdlciByYW5nZXMuCiAgICBpZiAobG93ZXJMaW1pdC5jb21wYXJlVG8odXBwZXJMaW1pdCkgPiAwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGxvd2VyTGltaXQpOwogICAgfQogICAgaWYgKGxvd2VyTGltaXQuaXNOYU4pIHJldHVybiBsb3dlckxpbWl0OwogICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY2FyZSBmb3IgLTAuMCBmb3IgdGhlIGxvd2VyIGxpbWl0LgogICAgaWYgKHRoaXMgPCBsb3dlckxpbWl0KSByZXR1cm4gbG93ZXJMaW1pdDsKICAgIGlmICh0aGlzLmNvbXBhcmVUbyh1cHBlckxpbWl0KSA+IDApIHJldHVybiB1cHBlckxpbWl0OwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBpbnQgdG9JbnQoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgdG9Eb3VibGUoKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIodGhpcyk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmdBc0ZpeGVkKGludCBmcmFjdGlvbkRpZ2l0cykgewogICAgcmV0dXJuIHRoaXMudG9Eb3VibGUoKS50b1N0cmluZ0FzRml4ZWQoZnJhY3Rpb25EaWdpdHMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nQXNFeHBvbmVudGlhbChbaW50IGZyYWN0aW9uRGlnaXRzXSkgewogICAgcmV0dXJuIHRoaXMudG9Eb3VibGUoKS50b1N0cmluZ0FzRXhwb25lbnRpYWwoZnJhY3Rpb25EaWdpdHMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nQXNQcmVjaXNpb24oaW50IHByZWNpc2lvbikgewogICAgcmV0dXJuIHRoaXMudG9Eb3VibGUoKS50b1N0cmluZ0FzUHJlY2lzaW9uKHByZWNpc2lvbik7CiAgfQoKICBzdGF0aWMgY29uc3QgX2RpZ2l0cyA9ICIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwoKICBTdHJpbmcgdG9SYWRpeFN0cmluZyhpbnQgcmFkaXgpIHsKICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShyYWRpeCwgMiwgMzYsICJyYWRpeCIpOwogICAgfQogICAgaWYgKHJhZGl4ICYgKHJhZGl4IC0gMSkgPT0gMCkgewogICAgICByZXR1cm4gX3RvUG93MlN0cmluZyhyYWRpeCk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gMTApIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7CiAgICBmaW5hbCBib29sIGlzTmVnYXRpdmUgPSB0aGlzIDwgMDsKICAgIGludCB2YWx1ZSA9IGlzTmVnYXRpdmUgPyAtdGhpcyA6IHRoaXM7CiAgICBpZiAodmFsdWUgPCAwKSB7CiAgICAgIC8vIFdpdGggaW50ZWdlcnMgbGltaXRlZCB0byA2NCBiaXRzLCB0aGUgdmFsdWUKICAgICAgLy8gTUlOX0lOVDY0ID0gLTB4ODAwMDAwMDAwMDAwMDAwMCBvdmVyZmxvd3MgYXQgbmVnYXRpb246CiAgICAgIC8vIC1NSU5fSU5UNjQgPT0gTUlOX0lOVDY0LCBzbyBpdCByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nLgogICAgICByZXR1cm4gX21pbkludDY0VG9SYWRpeFN0cmluZyhyYWRpeCk7CiAgICB9CiAgICBMaXN0IHRlbXAgPSBuZXcgTGlzdCgpOwogICAgZG8gewogICAgICBpbnQgZGlnaXQgPSB2YWx1ZSAlIHJhZGl4OwogICAgICB2YWx1ZSB+Lz0gcmFkaXg7CiAgICAgIHRlbXAuYWRkKF9kaWdpdHMuY29kZVVuaXRBdChkaWdpdCkpOwogICAgfSB3aGlsZSAodmFsdWUgPiAwKTsKICAgIGlmIChpc05lZ2F0aXZlKSB0ZW1wLmFkZCgweDJkKTsgLy8gJy0nLgoKICAgIF9PbmVCeXRlU3RyaW5nIHN0cmluZyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSh0ZW1wLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMCwgaiA9IHRlbXAubGVuZ3RoOyBqID4gMDsgaSsrKSB7CiAgICAgIHN0cmluZy5fc2V0QXQoaSwgdGVtcFstLWpdKTsKICAgIH0KICAgIHJldHVybiBzdHJpbmc7CiAgfQoKICBTdHJpbmcgX3RvUG93MlN0cmluZyhpbnQgcmFkaXgpIHsKICAgIGludCB2YWx1ZSA9IHRoaXM7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuICIwIjsKICAgIGFzc2VydChyYWRpeCAmIChyYWRpeCAtIDEpID09IDApOwogICAgdmFyIG5lZ2F0aXZlID0gdmFsdWUgPCAwOwogICAgdmFyIGJpdHNQZXJEaWdpdCA9IHJhZGl4LmJpdExlbmd0aCAtIDE7CiAgICB2YXIgbGVuZ3RoID0gMDsKICAgIGlmIChuZWdhdGl2ZSkgewogICAgICB2YWx1ZSA9IC12YWx1ZTsKICAgICAgbGVuZ3RoID0gMTsKICAgICAgaWYgKHZhbHVlIDwgMCkgewogICAgICAgIC8vIFdpdGggaW50ZWdlcnMgbGltaXRlZCB0byA2NCBiaXRzLCB0aGUgdmFsdWUKICAgICAgICAvLyBNSU5fSU5UNjQgPSAtMHg4MDAwMDAwMDAwMDAwMDAwIG92ZXJmbG93cyBhdCBuZWdhdGlvbjoKICAgICAgICAvLyAtTUlOX0lOVDY0ID09IE1JTl9JTlQ2NCwgc28gaXQgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZy4KICAgICAgICByZXR1cm4gX21pbkludDY0VG9SYWRpeFN0cmluZyhyYWRpeCk7CiAgICAgIH0KICAgIH0KICAgIC8vIEludGVnZXIgZGl2aXNpb24sIHJvdW5kaW5nIHVwLCB0byBmaW5kIG51bWJlciBvZiBfZGlnaXRzLgogICAgbGVuZ3RoICs9ICh2YWx1ZS5iaXRMZW5ndGggKyBiaXRzUGVyRGlnaXQgLSAxKSB+LyBiaXRzUGVyRGlnaXQ7CiAgICBfT25lQnl0ZVN0cmluZyBzdHJpbmcgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUobGVuZ3RoKTsKICAgIHN0cmluZy5fc2V0QXQoMCwgMHgyZCk7IC8vICctJy4gSXMgb3ZlcndyaXR0ZW4gaWYgbm90IG5lZ2F0aXZlLgogICAgdmFyIG1hc2sgPSByYWRpeCAtIDE7CiAgICBkbyB7CiAgICAgIHN0cmluZy5fc2V0QXQoLS1sZW5ndGgsIF9kaWdpdHMuY29kZVVuaXRBdCh2YWx1ZSAmIG1hc2spKTsKICAgICAgdmFsdWUgPj49IGJpdHNQZXJEaWdpdDsKICAgIH0gd2hpbGUgKHZhbHVlID4gMCk7CiAgICByZXR1cm4gc3RyaW5nOwogIH0KCiAgLy8vIENvbnZlcnRzIG5lZ2F0aXZlIHZhbHVlIHRvIHJhZGl4IHN0cmluZy4KICAvLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGhhbmRsZSBjb3JuZXIgY2FzZSBvZgogIC8vLyBNSU5fSU5UNjQgPSAtMHg4MDAwMDAwMDAwMDAwMDAwLgogIFN0cmluZyBfbWluSW50NjRUb1JhZGl4U3RyaW5nKGludCByYWRpeCkgewogICAgTGlzdCB0ZW1wID0gbmV3IExpc3QoKTsKICAgIGludCB2YWx1ZSA9IHRoaXM7CiAgICBhc3NlcnQodmFsdWUgPCAwKTsKICAgIGRvIHsKICAgICAgaW50IGRpZ2l0ID0gLXZhbHVlLnJlbWFpbmRlcihyYWRpeCk7CiAgICAgIHZhbHVlIH4vPSByYWRpeDsKICAgICAgdGVtcC5hZGQoX2RpZ2l0cy5jb2RlVW5pdEF0KGRpZ2l0KSk7CiAgICB9IHdoaWxlICh2YWx1ZSAhPSAwKTsKICAgIHRlbXAuYWRkKDB4MmQpOyAvLyAnLScuCgogICAgX09uZUJ5dGVTdHJpbmcgc3RyaW5nID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKHRlbXAubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwLCBqID0gdGVtcC5sZW5ndGg7IGogPiAwOyBpKyspIHsKICAgICAgc3RyaW5nLl9zZXRBdChpLCB0ZW1wWy0tal0pOwogICAgfQogICAgcmV0dXJuIHN0cmluZzsKICB9CgogIC8vIFJldHVybnMgcG93KHRoaXMsIGUpICUgbS4KICBpbnQgbW9kUG93KGludCBlLCBpbnQgbSkgewogICAgaWYgKGUgaXMhIGludCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShlLCAiZXhwb25lbnQiLCAibm90IGFuIGludGVnZXIiKTsKICAgIH0KICAgIGlmIChtIGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUobSwgIm1vZHVsdXMiLCAibm90IGFuIGludGVnZXIiKTsKICAgIH0KICAgIGlmIChlIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZSwgMCwgbnVsbCwgImV4cG9uZW50Iik7CiAgICBpZiAobSA8PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShtLCAxLCBudWxsLCAibW9kdWx1cyIpOwogICAgaWYgKGUgPT0gMCkgcmV0dXJuIDE7CgogICAgLy8gVGhpcyBpcyBmbG9vcihzcXJ0KDJeNjMpKS4KICAgIGNvbnN0IGludCBtYXhWYWx1ZVRoYXRDYW5CZVNxdWFyZWRXaXRob3V0VHJ1bmNhdGlvbiA9IDMwMzcwMDA0OTk7CiAgICBpZiAobSA+IG1heFZhbHVlVGhhdENhbkJlU3F1YXJlZFdpdGhvdXRUcnVuY2F0aW9uKSB7CiAgICAgIC8vIFVzZSBCaWdJbnQgdmVyc2lvbiB0byBhdm9pZCB0cnVuY2F0aW9uIGluIG11bHRpcGxpY2F0aW9ucyBiZWxvdy4KICAgICAgcmV0dXJuIEJpZ0ludC5mcm9tKHRoaXMpLm1vZFBvdyhCaWdJbnQuZnJvbShlKSwgQmlnSW50LmZyb20obSkpLnRvSW50KCk7CiAgICB9CgogICAgaW50IGIgPSB0aGlzOwogICAgaWYgKGIgPCAwIHx8IGIgPiBtKSB7CiAgICAgIGIgJT0gbTsKICAgIH0KICAgIGludCByID0gMTsKICAgIHdoaWxlIChlID4gMCkgewogICAgICBpZiAoZS5pc09kZCkgewogICAgICAgIHIgPSAociAqIGIpICUgbTsKICAgICAgfQogICAgICBlID4+PSAxOwogICAgICBiID0gKGIgKiBiKSAlIG07CiAgICB9CiAgICByZXR1cm4gcjsKICB9CgogIC8vIElmIGludiBpcyBmYWxzZSwgcmV0dXJucyBnY2QoeCwgeSkuCiAgLy8gSWYgaW52IGlzIHRydWUgYW5kIGdjZCh4LCB5KSA9IDEsIHJldHVybnMgZCwgc28gdGhhdCBjKnggKyBkKnkgPSAxLgogIC8vIElmIGludiBpcyB0cnVlIGFuZCBnY2QoeCwgeSkgIT0gMSwgdGhyb3dzIEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKS4KICBzdGF0aWMgaW50IF9iaW5hcnlHY2QoaW50IHgsIGludCB5LCBib29sIGludikgewogICAgaW50IHMgPSAwOwogICAgaWYgKCFpbnYpIHsKICAgICAgd2hpbGUgKHguaXNFdmVuICYmIHkuaXNFdmVuKSB7CiAgICAgICAgeCA+Pj0gMTsKICAgICAgICB5ID4+PSAxOwogICAgICAgIHMrKzsKICAgICAgfQogICAgICBpZiAoeS5pc09kZCkgewogICAgICAgIHZhciB0ID0geDsKICAgICAgICB4ID0geTsKICAgICAgICB5ID0gdDsKICAgICAgfQogICAgfQogICAgZmluYWwgYm9vbCBhYyA9IHguaXNFdmVuOwogICAgaW50IHUgPSB4OwogICAgaW50IHYgPSB5OwogICAgaW50IGEgPSAxLCBiID0gMCwgYyA9IDAsIGQgPSAxOwogICAgZG8gewogICAgICB3aGlsZSAodS5pc0V2ZW4pIHsKICAgICAgICB1ID4+PSAxOwogICAgICAgIGlmIChhYykgewogICAgICAgICAgaWYgKCFhLmlzRXZlbiB8fCAhYi5pc0V2ZW4pIHsKICAgICAgICAgICAgYSArPSB5OwogICAgICAgICAgICBiIC09IHg7CiAgICAgICAgICB9CiAgICAgICAgICBhID4+PSAxOwogICAgICAgIH0gZWxzZSBpZiAoIWIuaXNFdmVuKSB7CiAgICAgICAgICBiIC09IHg7CiAgICAgICAgfQogICAgICAgIGIgPj49IDE7CiAgICAgIH0KICAgICAgd2hpbGUgKHYuaXNFdmVuKSB7CiAgICAgICAgdiA+Pj0gMTsKICAgICAgICBpZiAoYWMpIHsKICAgICAgICAgIGlmICghYy5pc0V2ZW4gfHwgIWQuaXNFdmVuKSB7CiAgICAgICAgICAgIGMgKz0geTsKICAgICAgICAgICAgZCAtPSB4OwogICAgICAgICAgfQogICAgICAgICAgYyA+Pj0gMTsKICAgICAgICB9IGVsc2UgaWYgKCFkLmlzRXZlbikgewogICAgICAgICAgZCAtPSB4OwogICAgICAgIH0KICAgICAgICBkID4+PSAxOwogICAgICB9CiAgICAgIGlmICh1ID49IHYpIHsKICAgICAgICB1IC09IHY7CiAgICAgICAgaWYgKGFjKSBhIC09IGM7CiAgICAgICAgYiAtPSBkOwogICAgICB9IGVsc2UgewogICAgICAgIHYgLT0gdTsKICAgICAgICBpZiAoYWMpIGMgLT0gYTsKICAgICAgICBkIC09IGI7CiAgICAgIH0KICAgIH0gd2hpbGUgKHUgIT0gMCk7CiAgICBpZiAoIWludikgcmV0dXJuIHYgPDwgczsKICAgIGlmICh2ICE9IDEpIHsKICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKTsKICAgIH0KICAgIGlmIChkIDwgMCkgewogICAgICBkICs9IHg7CiAgICAgIGlmIChkIDwgMCkgZCArPSB4OwogICAgfSBlbHNlIGlmIChkID4geCkgewogICAgICBkIC09IHg7CiAgICAgIGlmIChkID4geCkgZCAtPSB4OwogICAgfQogICAgcmV0dXJuIGQ7CiAgfQoKICAvLyBSZXR1cm5zIDEvdGhpcyAlIG0sIHdpdGggbSA+IDAuCiAgaW50IG1vZEludmVyc2UoaW50IG0pIHsKICAgIGlmIChtIGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUobSwgIm1vZHVsdXMiLCAibm90IGFuIGludGVnZXIiKTsKICAgIH0KICAgIGlmIChtIDw9IDApIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKG0sIDEsIG51bGwsICJtb2R1bHVzIik7CiAgICBpZiAobSA9PSAxKSByZXR1cm4gMDsKICAgIGludCB0ID0gdGhpczsKICAgIGlmICgodCA8IDApIHx8ICh0ID49IG0pKSB0ICU9IG07CiAgICBpZiAodCA9PSAxKSByZXR1cm4gMTsKICAgIGlmICgodCA9PSAwKSB8fCAodC5pc0V2ZW4gJiYgbS5pc0V2ZW4pKSB7CiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk5vdCBjb3ByaW1lIik7CiAgICB9CiAgICByZXR1cm4gX2JpbmFyeUdjZChtLCB0LCB0cnVlKTsKICB9CgogIC8vIFJldHVybnMgZ2NkIG9mIGFicyh0aGlzKSBhbmQgYWJzKG90aGVyKS4KICBpbnQgZ2NkKGludCBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUob3RoZXIsICJvdGhlciIsICJub3QgYW4gaW50ZWdlciIpOwogICAgfQogICAgaW50IHggPSB0aGlzLmFicygpOwogICAgaW50IHkgPSBvdGhlci5hYnMoKTsKICAgIGlmICh4ID09IDApIHJldHVybiB5OwogICAgaWYgKHkgPT0gMCkgcmV0dXJuIHg7CiAgICBpZiAoKHggPT0gMSkgfHwgKHkgPT0gMSkpIHJldHVybiAxOwogICAgcmV0dXJuIF9iaW5hcnlHY2QoeCwgeSwgZmFsc2UpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfU21pIGV4dGVuZHMgX0ludGVnZXJJbXBsZW1lbnRhdGlvbiB7CiAgZmFjdG9yeSBfU21pLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRoaXM7CiAgaW50IGdldCBfaWRlbnRpdHlIYXNoQ29kZSA9PiB0aGlzOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgb3BlcmF0b3IgfigpIG5hdGl2ZSAiU21pX2JpdE5lZ2F0ZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBnZXQgYml0TGVuZ3RoIG5hdGl2ZSAiU21pX2JpdExlbmd0aCI7CgogIGludCBvcGVyYXRvciAmKGludCBvdGhlcikgPT4gb3RoZXIuX2JpdEFuZEZyb21TbWkodGhpcyk7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgX2JpdEFuZEZyb21TbWkoX1NtaSBvdGhlcikgbmF0aXZlICJTbWlfYml0QW5kRnJvbVNtaSI7CgogIC8qKgogICAqIFRoZSBkaWdpdHMgb2YgJzAwJywgJzAxJywgLi4uICc5OScgYXMgYSBzaW5nbGUgYXJyYXkuCiAgICoKICAgKiBHZXQgdGhlIGRpZ2l0cyBvZiBgbmAsIHdpdGggYDAgPD0gbiA8IDEwMGAsIGFzCiAgICogYF9kaWdpdFRhYmxlW24gKiAyXWAgYW5kIGBfZGlnaXRUYWJsZVtuICogMiArIDFdYC4KICAgKi8KICBzdGF0aWMgY29uc3QgX2RpZ2l0VGFibGUgPSBjb25zdCBbCiAgICAweDMwLCAweDMwLCAweDMwLCAweDMxLCAweDMwLCAweDMyLCAweDMwLCAweDMzLCAvLwogICAgMHgzMCwgMHgzNCwgMHgzMCwgMHgzNSwgMHgzMCwgMHgzNiwgMHgzMCwgMHgzNywgLy8KICAgIDB4MzAsIDB4MzgsIDB4MzAsIDB4MzksIDB4MzEsIDB4MzAsIDB4MzEsIDB4MzEsIC8vCiAgICAweDMxLCAweDMyLCAweDMxLCAweDMzLCAweDMxLCAweDM0LCAweDMxLCAweDM1LCAvLwogICAgMHgzMSwgMHgzNiwgMHgzMSwgMHgzNywgMHgzMSwgMHgzOCwgMHgzMSwgMHgzOSwgLy8KICAgIDB4MzIsIDB4MzAsIDB4MzIsIDB4MzEsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzMsIC8vCiAgICAweDMyLCAweDM0LCAweDMyLCAweDM1LCAweDMyLCAweDM2LCAweDMyLCAweDM3LCAvLwogICAgMHgzMiwgMHgzOCwgMHgzMiwgMHgzOSwgMHgzMywgMHgzMCwgMHgzMywgMHgzMSwgLy8KICAgIDB4MzMsIDB4MzIsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MzQsIDB4MzMsIDB4MzUsIC8vCiAgICAweDMzLCAweDM2LCAweDMzLCAweDM3LCAweDMzLCAweDM4LCAweDMzLCAweDM5LCAvLwogICAgMHgzNCwgMHgzMCwgMHgzNCwgMHgzMSwgMHgzNCwgMHgzMiwgMHgzNCwgMHgzMywgLy8KICAgIDB4MzQsIDB4MzQsIDB4MzQsIDB4MzUsIDB4MzQsIDB4MzYsIDB4MzQsIDB4MzcsIC8vCiAgICAweDM0LCAweDM4LCAweDM0LCAweDM5LCAweDM1LCAweDMwLCAweDM1LCAweDMxLCAvLwogICAgMHgzNSwgMHgzMiwgMHgzNSwgMHgzMywgMHgzNSwgMHgzNCwgMHgzNSwgMHgzNSwgLy8KICAgIDB4MzUsIDB4MzYsIDB4MzUsIDB4MzcsIDB4MzUsIDB4MzgsIDB4MzUsIDB4MzksIC8vCiAgICAweDM2LCAweDMwLCAweDM2LCAweDMxLCAweDM2LCAweDMyLCAweDM2LCAweDMzLCAvLwogICAgMHgzNiwgMHgzNCwgMHgzNiwgMHgzNSwgMHgzNiwgMHgzNiwgMHgzNiwgMHgzNywgLy8KICAgIDB4MzYsIDB4MzgsIDB4MzYsIDB4MzksIDB4MzcsIDB4MzAsIDB4MzcsIDB4MzEsIC8vCiAgICAweDM3LCAweDMyLCAweDM3LCAweDMzLCAweDM3LCAweDM0LCAweDM3LCAweDM1LCAvLwogICAgMHgzNywgMHgzNiwgMHgzNywgMHgzNywgMHgzNywgMHgzOCwgMHgzNywgMHgzOSwgLy8KICAgIDB4MzgsIDB4MzAsIDB4MzgsIDB4MzEsIDB4MzgsIDB4MzIsIDB4MzgsIDB4MzMsIC8vCiAgICAweDM4LCAweDM0LCAweDM4LCAweDM1LCAweDM4LCAweDM2LCAweDM4LCAweDM3LCAvLwogICAgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOSwgMHgzOSwgMHgzMCwgMHgzOSwgMHgzMSwgLy8KICAgIDB4MzksIDB4MzIsIDB4MzksIDB4MzMsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsIC8vCiAgICAweDM5LCAweDM2LCAweDM5LCAweDM3LCAweDM5LCAweDM4LCAweDM5LCAweDM5LCAvLwogIF07CgogIC8qKgogICAqIFJlc3VsdCBvZiBpbnQudG9TdHJpbmcgZm9yIC05OSwgLTk4LCAuLi4sIDk4LCA5OS4KICAgKi8KICBzdGF0aWMgY29uc3QgX3NtYWxsTG9va3VwVGFibGUgPSBjb25zdCBbCiAgICAiLTk5IiwgIi05OCIsICItOTciLCAiLTk2IiwgIi05NSIsICItOTQiLCAiLTkzIiwgIi05MiIsICItOTEiLCAiLTkwIiwgLy8KICAgICItODkiLCAiLTg4IiwgIi04NyIsICItODYiLCAiLTg1IiwgIi04NCIsICItODMiLCAiLTgyIiwgIi04MSIsICItODAiLCAvLwogICAgIi03OSIsICItNzgiLCAiLTc3IiwgIi03NiIsICItNzUiLCAiLTc0IiwgIi03MyIsICItNzIiLCAiLTcxIiwgIi03MCIsIC8vCiAgICAiLTY5IiwgIi02OCIsICItNjciLCAiLTY2IiwgIi02NSIsICItNjQiLCAiLTYzIiwgIi02MiIsICItNjEiLCAiLTYwIiwgLy8KICAgICItNTkiLCAiLTU4IiwgIi01NyIsICItNTYiLCAiLTU1IiwgIi01NCIsICItNTMiLCAiLTUyIiwgIi01MSIsICItNTAiLCAvLwogICAgIi00OSIsICItNDgiLCAiLTQ3IiwgIi00NiIsICItNDUiLCAiLTQ0IiwgIi00MyIsICItNDIiLCAiLTQxIiwgIi00MCIsIC8vCiAgICAiLTM5IiwgIi0zOCIsICItMzciLCAiLTM2IiwgIi0zNSIsICItMzQiLCAiLTMzIiwgIi0zMiIsICItMzEiLCAiLTMwIiwgLy8KICAgICItMjkiLCAiLTI4IiwgIi0yNyIsICItMjYiLCAiLTI1IiwgIi0yNCIsICItMjMiLCAiLTIyIiwgIi0yMSIsICItMjAiLCAvLwogICAgIi0xOSIsICItMTgiLCAiLTE3IiwgIi0xNiIsICItMTUiLCAiLTE0IiwgIi0xMyIsICItMTIiLCAiLTExIiwgIi0xMCIsIC8vCiAgICAiLTkiLCAiLTgiLCAiLTciLCAiLTYiLCAiLTUiLCAiLTQiLCAiLTMiLCAiLTIiLCAiLTEiLCAiMCIsIC8vCiAgICAiMSIsICIyIiwgIjMiLCAiNCIsICI1IiwgIjYiLCAiNyIsICI4IiwgIjkiLCAiMTAiLCAvLwogICAgIjExIiwgIjEyIiwgIjEzIiwgIjE0IiwgIjE1IiwgIjE2IiwgIjE3IiwgIjE4IiwgIjE5IiwgIjIwIiwgLy8KICAgICIyMSIsICIyMiIsICIyMyIsICIyNCIsICIyNSIsICIyNiIsICIyNyIsICIyOCIsICIyOSIsICIzMCIsIC8vCiAgICAiMzEiLCAiMzIiLCAiMzMiLCAiMzQiLCAiMzUiLCAiMzYiLCAiMzciLCAiMzgiLCAiMzkiLCAiNDAiLCAvLwogICAgIjQxIiwgIjQyIiwgIjQzIiwgIjQ0IiwgIjQ1IiwgIjQ2IiwgIjQ3IiwgIjQ4IiwgIjQ5IiwgIjUwIiwgLy8KICAgICI1MSIsICI1MiIsICI1MyIsICI1NCIsICI1NSIsICI1NiIsICI1NyIsICI1OCIsICI1OSIsICI2MCIsIC8vCiAgICAiNjEiLCAiNjIiLCAiNjMiLCAiNjQiLCAiNjUiLCAiNjYiLCAiNjciLCAiNjgiLCAiNjkiLCAiNzAiLCAvLwogICAgIjcxIiwgIjcyIiwgIjczIiwgIjc0IiwgIjc1IiwgIjc2IiwgIjc3IiwgIjc4IiwgIjc5IiwgIjgwIiwgLy8KICAgICI4MSIsICI4MiIsICI4MyIsICI4NCIsICI4NSIsICI4NiIsICI4NyIsICI4OCIsICI4OSIsICI5MCIsIC8vCiAgICAiOTEiLCAiOTIiLCAiOTMiLCAiOTQiLCAiOTUiLCAiOTYiLCAiOTciLCAiOTgiLCAiOTkiIC8vCiAgXTsKCiAgLy8gUG93ZXJzIG9mIDEwIGFib3ZlIDEwMDAwMDAgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGJ5IGV5ZS4KICBzdGF0aWMgY29uc3QgaW50IF9QT1dfMTBfNyA9IDEwMDAwMDAwOwogIHN0YXRpYyBjb25zdCBpbnQgX1BPV18xMF84ID0gMTAwMDAwMDAwOwogIHN0YXRpYyBjb25zdCBpbnQgX1BPV18xMF85ID0gMTAwMDAwMDAwMDsKCiAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzIGluIGEgcG9zaXRpdmUgc21pLgogIC8vIE5ldmVyIGNhbGxlZCB3aXRoIG51bWJlcnMgPCAxMDAuIFRoZXNlIGFyZSBoYW5kbGVkIGJlZm9yZSBjYWxsaW5nLgogIHN0YXRpYyBpbnQgX3Bvc2l0aXZlQmFzZTEwTGVuZ3RoKHZhciBzbWkpIHsKICAgIC8vIEEgcG9zaXRpdmUgc21pIGhhcyBsZW5ndGggPD0gMTkgaWYgNjMtYml0LCAgPD0xMCBpZiAzMS1iaXQuCiAgICAvLyBBdm9pZCBjb21wYXJpbmcgYSAzMS1iaXQgc21pIHRvIGEgbm9uLXNtaS4KICAgIGlmIChzbWkgPCAxMDAwKSByZXR1cm4gMzsKICAgIGlmIChzbWkgPCAxMDAwMCkgcmV0dXJuIDQ7CiAgICBpZiAoc21pIDwgX1BPV18xMF83KSB7CiAgICAgIGlmIChzbWkgPCAxMDAwMDApIHJldHVybiA1OwogICAgICBpZiAoc21pIDwgMTAwMDAwMCkgcmV0dXJuIDY7CiAgICAgIHJldHVybiA3OwogICAgfQogICAgaWYgKHNtaSA8IF9QT1dfMTBfOCkgcmV0dXJuIDg7CiAgICBpZiAoc21pIDwgX1BPV18xMF85KSByZXR1cm4gOTsKICAgIHNtaSA9IHNtaSB+LyBfUE9XXzEwXzk7CiAgICAvLyBIYW5kbGUgbnVtYmVycyA8IDEwMCBiZWZvcmUgY2FsbGluZyByZWN1cnNpdmVseS4KICAgIGlmIChzbWkgPCAxMCkgcmV0dXJuIDEwOwogICAgaWYgKHNtaSA8IDEwMCkgcmV0dXJuIDExOwogICAgcmV0dXJuIDkgKyBfcG9zaXRpdmVCYXNlMTBMZW5ndGgoc21pKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmICh0aGlzIDwgMTAwICYmIHRoaXMgPiAtMTAwKSByZXR1cm4gX3NtYWxsTG9va3VwVGFibGVbdGhpcyArIDk5XTsKICAgIGlmICh0aGlzIDwgMCkgcmV0dXJuIF9uZWdhdGl2ZVRvU3RyaW5nKHRoaXMpOwogICAgLy8gSW5zcGlyZWQgYnkgQW5kcmVpIEFsZXhhbmRyZXNjdTogIlRocmVlIE9wdGltaXphdGlvbiBUaXBzIGZvciBDKysiCiAgICAvLyBBdm9pZCBleHBlbnNpdmUgcmVtYWluZGVyIG9wZXJhdGlvbiBieSBkb2luZyBpdCBvbiBtb3JlIHRoYW4KICAgIC8vIG9uZSBkaWdpdCBhdCBhIHRpbWUuCiAgICBjb25zdCBpbnQgRElHSVRfWkVSTyA9IDB4MzA7CiAgICBpbnQgbGVuZ3RoID0gX3Bvc2l0aXZlQmFzZTEwTGVuZ3RoKHRoaXMpOwogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKGxlbmd0aCk7CiAgICBpbnQgaW5kZXggPSBsZW5ndGggLSAxOwogICAgdmFyIHNtaSA9IHRoaXM7CiAgICBkbyB7CiAgICAgIC8vIFR3byBkaWdpdHMgYXQgYSB0aW1lLgogICAgICB2YXIgdHdvRGlnaXRzID0gc21pLnJlbWFpbmRlcigxMDApOwogICAgICBzbWkgPSBzbWkgfi8gMTAwOwogICAgICBpbnQgZGlnaXRJbmRleCA9IHR3b0RpZ2l0cyAqIDI7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXggKyAxXSk7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXggLSAxLCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4XSk7CiAgICAgIGluZGV4IC09IDI7CiAgICB9IHdoaWxlIChzbWkgPj0gMTAwKTsKICAgIGlmIChzbWkgPCAxMCkgewogICAgICAvLyBDaGFyYWN0ZXIgY29kZSBmb3IgJzAnLgogICAgICByZXN1bHQuX3NldEF0KGluZGV4LCBESUdJVF9aRVJPICsgc21pKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE5vIHJlbWFpbmRlciBmb3IgdGhpcyBjYXNlLgogICAgICBpbnQgZGlnaXRJbmRleCA9IHNtaSAqIDI7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXggKyAxXSk7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXggLSAxLCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4XSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzIGluIGEgbmVnYXRpdmUgc21pLgogIC8vIE5ldmVyIGNhbGxlZCB3aXRoIG51bWJlcnMgPiAtMTAwLiBUaGVzZSBhcmUgaGFuZGxlZCBiZWZvcmUgY2FsbGluZy4KICBzdGF0aWMgaW50IF9uZWdhdGl2ZUJhc2UxMExlbmd0aCh2YXIgbmVnU21pKSB7CiAgICAvLyBBIG5lZ2F0aXZlIHNtaSBoYXMgbGVuZ3RoIDw9IDE5IGlmIDYzLWJpdCwgPD0xMCBpZiAzMS1iaXQuCiAgICAvLyBBdm9pZCBjb21wYXJpbmcgYSAzMS1iaXQgc21pIHRvIGEgbm9uLXNtaS4KICAgIGlmIChuZWdTbWkgPiAtMTAwMCkgcmV0dXJuIDM7CiAgICBpZiAobmVnU21pID4gLTEwMDAwKSByZXR1cm4gNDsKICAgIGlmIChuZWdTbWkgPiAtX1BPV18xMF83KSB7CiAgICAgIGlmIChuZWdTbWkgPiAtMTAwMDAwKSByZXR1cm4gNTsKICAgICAgaWYgKG5lZ1NtaSA+IC0xMDAwMDAwKSByZXR1cm4gNjsKICAgICAgcmV0dXJuIDc7CiAgICB9CiAgICBpZiAobmVnU21pID4gLV9QT1dfMTBfOCkgcmV0dXJuIDg7CiAgICBpZiAobmVnU21pID4gLV9QT1dfMTBfOSkgcmV0dXJuIDk7CiAgICBuZWdTbWkgPSBuZWdTbWkgfi8gX1BPV18xMF85OwogICAgLy8gSGFuZGxlIG51bWJlcnMgPiAtMTAwIGJlZm9yZSBjYWxsaW5nIHJlY3Vyc2l2ZWx5LgogICAgaWYgKG5lZ1NtaSA+IC0xMCkgcmV0dXJuIDEwOwogICAgaWYgKG5lZ1NtaSA+IC0xMDApIHJldHVybiAxMTsKICAgIHJldHVybiA5ICsgX25lZ2F0aXZlQmFzZTEwTGVuZ3RoKG5lZ1NtaSk7CiAgfQoKICAvLyBDb252ZXJ0IGEgbmVnYXRpdmUgc21pIHRvIGEgc3RyaW5nLgogIC8vIERvZXNuJ3QgbmVnYXRlIHRoZSBzbWkgdG8gYXZvaWQgbmVnYXRpbmcgdGhlIG1vc3QgbmVnYXRpdmUgc21pLCB3aGljaAogIC8vIHdvdWxkIGJlY29tZSBhIG5vbi1zbWkuCiAgc3RhdGljIFN0cmluZyBfbmVnYXRpdmVUb1N0cmluZyhpbnQgbmVnU21pKSB7CiAgICAvLyBDaGFyYWN0ZXIgY29kZSBmb3IgJy0nCiAgICBjb25zdCBpbnQgTUlOVVNfU0lHTiA9IDB4MmQ7CiAgICAvLyBDaGFyYWN0ZXIgY29kZSBmb3IgJzAnLgogICAgY29uc3QgaW50IERJR0lUX1pFUk8gPSAweDMwOwogICAgaWYgKG5lZ1NtaSA+IC0xMCkgewogICAgICByZXR1cm4gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKDIpCiAgICAgICAgLi5fc2V0QXQoMCwgTUlOVVNfU0lHTikKICAgICAgICAuLl9zZXRBdCgxLCBESUdJVF9aRVJPIC0gbmVnU21pKTsKICAgIH0KICAgIGlmIChuZWdTbWkgPiAtMTAwKSB7CiAgICAgIGludCBkaWdpdEluZGV4ID0gMiAqIC1uZWdTbWk7CiAgICAgIHJldHVybiBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUoMykKICAgICAgICAuLl9zZXRBdCgwLCBNSU5VU19TSUdOKQogICAgICAgIC4uX3NldEF0KDEsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXhdKQogICAgICAgIC4uX3NldEF0KDIsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXggKyAxXSk7CiAgICB9CiAgICAvLyBOdW1iZXIgb2YgZGlnaXRzLCBub3QgaW5jbHVkaW5nIG1pbnVzLgogICAgaW50IGRpZ2l0Q291bnQgPSBfbmVnYXRpdmVCYXNlMTBMZW5ndGgobmVnU21pKTsKICAgIF9PbmVCeXRlU3RyaW5nIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShkaWdpdENvdW50ICsgMSk7CiAgICByZXN1bHQuX3NldEF0KDAsIE1JTlVTX1NJR04pOyAvLyAnLScuCiAgICBpbnQgaW5kZXggPSBkaWdpdENvdW50OwogICAgZG8gewogICAgICB2YXIgdHdvRGlnaXRzID0gbmVnU21pLnJlbWFpbmRlcigxMDApOwogICAgICBuZWdTbWkgPSBuZWdTbWkgfi8gMTAwOwogICAgICBpbnQgZGlnaXRJbmRleCA9IC10d29EaWdpdHMgKiAyOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4LCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4ICsgMV0pOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4IC0gMSwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleF0pOwogICAgICBpbmRleCAtPSAyOwogICAgfSB3aGlsZSAobmVnU21pIDw9IC0xMDApOwogICAgaWYgKG5lZ1NtaSA+IC0xMCkgewogICAgICByZXN1bHQuX3NldEF0KGluZGV4LCBESUdJVF9aRVJPIC0gbmVnU21pKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE5vIHJlbWFpbmRlciBuZWNlc3NhcnkgZm9yIHRoaXMgY2FzZS4KICAgICAgaW50IGRpZ2l0SW5kZXggPSAtbmVnU21pICogMjsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleCArIDFdKTsKICAgICAgcmVzdWx0Ll9zZXRBdChp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Zy9rZXJuZWwvbGliL3RhcmdldC92bS5kYXJ0YC4KY2xhc3MgX0ludm9jYXRpb25NaXJyb3IgaW1wbGVtZW50cyBJbnZvY2F0aW9uIHsKICAvLyBDb25zdGFudHMgZGVzY3JpYmluZyB0aGUgaW52b2NhdGlvbiBraW5kLgogIC8vIF9GSUVMRCBjYW5ub3QgYmUgZ2VuZXJhdGVkIGJ5IHJlZ3VsYXIgaW52b2NhdGlvbiBtaXJyb3JzLgogIHN0YXRpYyBjb25zdCBpbnQgX01FVEhPRCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfR0VUVEVSID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9TRVRURVIgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX0ZJRUxEID0gMzsKICBzdGF0aWMgY29uc3QgaW50IF9MT0NBTF9WQVIgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgX0tJTkRfU0hJRlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX0tJTkRfQklUUyA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBfS0lORF9NQVNLID0gKDEgPDwgX0tJTkRfQklUUykgLSAxOwoKICAvLyBUaGVzZSB2YWx1ZXMsIGV4Y2VwdCBfRFlOQU1JQyBhbmQgX1NVUEVSLCBhcmUgb25seSB1c2VkIHdoZW4gdGhyb3dpbmcKICAvLyBOb1N1Y2hNZXRob2RFcnJvciBmb3IgY29tcGlsZS10aW1lIHJlc29sdXRpb24gZmFpbHVyZXMuCiAgc3RhdGljIGNvbnN0IGludCBfRFlOQU1JQyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfU1VQRVIgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRJQyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBfQ09OU1RSVUNUT1IgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX1RPUF9MRVZFTCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfTEVWRUxfU0hJRlQgPSBfS0lORF9CSVRTOwogIHN0YXRpYyBjb25zdCBpbnQgX0xFVkVMX0JJVFMgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX0xFVkVMX01BU0sgPSAoMSA8PCBfTEVWRUxfQklUUykgLSAxOwoKICAvLyBBcmd1bWVudHNEZXNjcmlwdG9yIGxheW91dC4gS2VlcCBpbiBzeW5jIHdpdGggZW51bSBpbiBkYXJ0X2VudHJ5LmguCiAgc3RhdGljIGNvbnN0IGludCBfVFlQRV9BUkdTX0xFTiA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfQ09VTlQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX1BPU0lUSU9OQUxfQ09VTlQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX0ZJUlNUX05BTUVEX0VOVFJZID0gMzsKCiAgLy8gSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludm9jYXRpb24gbWlycm9yLgogIFN0cmluZyBfZnVuY3Rpb25OYW1lOwogIExpc3QgX2FyZ3VtZW50c0Rlc2NyaXB0b3I7CiAgTGlzdCBfYXJndW1lbnRzOwogIGJvb2wgX2lzU3VwZXJJbnZvY2F0aW9uOwogIGludCBfZGVsYXllZFR5cGVBcmd1bWVudHNMZW47CgogIC8vIEV4dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnZvY2F0aW9uIG1pcnJvcjsgcG9wdWxhdGVkIG9uIGRlbWFuZC4KICBTeW1ib2wgX21lbWJlck5hbWU7CiAgaW50IF90eXBlOwogIExpc3Q8VHlwZT4gX3R5cGVBcmd1bWVudHM7CiAgTGlzdCBfcG9zaXRpb25hbEFyZ3VtZW50czsKICBNYXA8U3ltYm9sLCBkeW5hbWljPiBfbmFtZWRBcmd1bWVudHM7CgogIF9JbnZvY2F0aW9uTWlycm9yLl93aXRoVHlwZSh0aGlzLl9tZW1iZXJOYW1lLCB0aGlzLl90eXBlLCB0aGlzLl90eXBlQXJndW1lbnRzLAogICAgICB0aGlzLl9wb3NpdGlvbmFsQXJndW1lbnRzLCB0aGlzLl9uYW1lZEFyZ3VtZW50cykgewogICAgX3R5cGVBcmd1bWVudHMgPz89IGNvbnN0IDxUeXBlPltdOwogICAgX3Bvc2l0aW9uYWxBcmd1bWVudHMgPz89IGNvbnN0IFtdOwogICAgX25hbWVkQXJndW1lbnRzID8/PSBjb25zdCB7fTsKICB9CgogIHZvaWQgX3NldE1lbWJlck5hbWVBbmRUeXBlKCkgewogICAgX3R5cGUgPz89IDA7CiAgICBpZiAoX2Z1bmN0aW9uTmFtZS5zdGFydHNXaXRoKCJnZXQ6IikpIHsKICAgICAgX3R5cGUgfD0gX0dFVFRFUjsKICAgICAgX21lbWJlck5hbWUgPSBuZXcgaW50ZXJuYWwuU3ltYm9sLnVudmFsaWRhdGVkKF9mdW5jdGlvbk5hbWUuc3Vic3RyaW5nKDQpKTsKICAgIH0gZWxzZSBpZiAoX2Z1bmN0aW9uTmFtZS5zdGFydHNXaXRoKCJzZXQ6IikpIHsKICAgICAgX3R5cGUgfD0gX1NFVFRFUjsKICAgICAgX21lbWJlck5hbWUgPQogICAgICAgICAgbmV3IGludGVybmFsLlN5bWJvbC51bnZhbGlkYXRlZChfZnVuY3Rpb25OYW1lLnN1YnN0cmluZyg0KSArICI9Iik7CiAgICB9IGVsc2UgewogICAgICBfdHlwZSB8PQogICAgICAgICAgX2lzU3VwZXJJbnZvY2F0aW9uID8gKF9TVVBFUiA8PCBfTEVWRUxfU0hJRlQpIHwgX01FVEhPRCA6IF9NRVRIT0Q7CiAgICAgIF9tZW1iZXJOYW1lID0gbmV3IGludGVybmFsLlN5bWJvbC51bnZhbGlkYXRlZChfZnVuY3Rpb25OYW1lKTsKICAgIH0KICB9CgogIFN5bWJvbCBnZXQgbWVtYmVyTmFtZSB7CiAgICBpZiAoX21lbWJlck5hbWUgPT0gbnVsbCkgewogICAgICBfc2V0TWVtYmVyTmFtZUFuZFR5cGUoKTsKICAgIH0KICAgIHJldHVybiBfbWVtYmVyTmFtZTsKICB9CgogIGludCBnZXQgX3R5cGVBcmdzTGVuIHsKICAgIGludCB0eXBlQXJnc0xlbiA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19UWVBFX0FSR1NfTEVOXTsKICAgIHJldHVybiB0eXBlQXJnc0xlbiA9PSAwID8gX2RlbGF5ZWRUeXBlQXJndW1lbnRzTGVuIDogdHlwZUFyZ3NMZW47CiAgfQoKICBMaXN0PFR5cGU+IGdldCB0eXBlQXJndW1lbnRzIHsKICAgIGlmIChfdHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIGlmIChfdHlwZUFyZ3NMZW4gPT0gMCkgewogICAgICAgIHJldHVybiBfdHlwZUFyZ3VtZW50cyA9IGNvbnN0IDxUeXBlPltdOwogICAgICB9CiAgICAgIC8vIEEgVHlwZUFyZ3VtZW50cyBvYmplY3QgZG9lcyBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgRGFydCBjbGFzcyBhbmQKICAgICAgLy8gY2Fubm90IGJlIGFjY2Vzc2VkIGFzIGFuIGFycmF5IGluIERhcnQuIFRoZXJlZm9yZSwgd2UgbmVlZCBhIG5hdGl2ZQogICAgICAvLyBjYWxsIHRvIHVucGFjayB0aGUgaW5kaXZpZHVhbCB0eXBlcyBpbnRvIGEgbGlzdC4KICAgICAgX3R5cGVBcmd1bWVudHMgPSBfdW5wYWNrVHlwZUFyZ3VtZW50cyhfYXJndW1lbnRzWzBdLCBfdHlwZUFyZ3NMZW4pOwogICAgfQogICAgcmV0dXJuIF90eXBlQXJndW1lbnRzOwogIH0KCiAgLy8gVW5wYWNrIHRoZSBnaXZlbiBUeXBlQXJndW1lbnRzIG9iamVjdCBpbnRvIGEgbmV3IGxpc3Qgb2YgaW5kaXZpZHVhbCB0eXBlcy4KICBzdGF0aWMgTGlzdDxUeXBlPiBfdW5wYWNrVHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzLCBpbnQgbnVtVHlwZUFyZ3VtZW50cykKICAgICAgbmF0aXZlICJJbnZvY2F0aW9uTWlycm9yX3VucGFja1R5cGVBcmd1bWVudHMiOwoKICBMaXN0IGdldCBwb3NpdGlvbmFsQXJndW1lbnRzIHsKICAgIGlmIChfcG9zaXRpb25hbEFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIC8vIFRoZSBhcmd1bWVudCBkZXNjcmlwdG9yIGNvdW50cyB0aGUgcmVjZWl2ZXIsIGJ1dCBub3QgdGhlIHR5cGUgYXJndW1lbnRzCiAgICAgIC8vIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLgogICAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19QT1NJVElPTkFMX0NPVU5UXSAtIDE7CiAgICAgIGlmIChudW1Qb3NpdGlvbmFsQXJndW1lbnRzID09IDApIHsKICAgICAgICByZXR1cm4gX3Bvc2l0aW9uYWxBcmd1bWVudHMgPSBjb25zdCBbXTsKICAgICAgfQogICAgICAvLyBFeGNsdWRlIHJlY2VpdmVyIGFuZCB0eXBlIGFyZ3MgaW4gdGhlIHJldHVybmVkIGxpc3QuCiAgICAgIGludCByZWNlaXZlckluZGV4ID0gX3R5cGVBcmdzTGVuID4gMCA/IDEgOiAwOwogICAgICBfcG9zaXRpb25hbEFyZ3VtZW50cyA9IG5ldyBfSW1tdXRhYmxlTGlzdC5fZnJvbSgKICAgICAgICAgIF9hcmd1bWVudHMsIHJlY2VpdmVySW5kZXggKyAxLCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzKTsKICAgIH0KICAgIHJldHVybiBfcG9zaXRpb25hbEFyZ3VtZW50czsKICB9CgogIE1hcDxTeW1ib2wsIGR5bmFtaWM+IGdldCBuYW1lZEFyZ3VtZW50cyB7CiAgICBpZiAoX25hbWVkQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgaW50IG51bUFyZ3VtZW50cyA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19DT1VOVF0gLSAxOyAvLyBFeGNsdWRlIHJlY2VpdmVyLgogICAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19QT1NJVElPTkFMX0NPVU5UXSAtIDE7CiAgICAgIGludCBudW1OYW1lZEFyZ3VtZW50cyA9IG51bUFyZ3VtZW50cyAtIG51bVBvc2l0aW9uYWxBcmd1bWVudHM7CiAgICAgIGlmIChudW1OYW1lZEFyZ3VtZW50cyA9PSAwKSB7CiAgICAgICAgcmV0dXJuIF9uYW1lZEFyZ3VtZW50cyA9IGNvbnN0IHt9OwogICAgICB9CiAgICAgIGludCByZWNlaXZlckluZGV4ID0gX3R5cGVBcmdzTGVuID4gMCA/IDEgOiAwOwogICAgICBfbmFtZWRBcmd1bWVudHMgPSBuZXcgTWFwPFN5bWJvbCwgZHluYW1pYz4oKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1OYW1lZEFyZ3VtZW50czsgaSsrKSB7CiAgICAgICAgaW50IG5hbWVkRW50cnlJbmRleCA9IF9GSVJTVF9OQU1FRF9FTlRSWSArIDIgKiBpOwogICAgICAgIFN0cmluZyBhcmdfbmFtZSA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW25hbWVkRW50cnlJbmRleF07CiAgICAgICAgdmFyIGFyZ192YWx1ZSA9IF9hcmd1bWVudHNbCiAgICAgICAgICAgIHJlY2VpdmVySW5kZXggKyBfYXJndW1lbnRzRGVzY3JpcHRvcltuYW1lZEVudHJ5SW5kZXggKyAxXV07CiAgICAgICAgX25hbWVkQXJndW1lbnRzW25ldyBpbnRlcm5hbC5TeW1ib2wudW52YWxpZGF0ZWQoYXJnX25hbWUpXSA9IGFyZ192YWx1ZTsKICAgICAgfQogICAgICBfbmFtZWRBcmd1bWVudHMgPSBuZXcgTWFwLnVubW9kaWZpYWJsZShfbmFtZWRBcmd1bWVudHMpOwogICAgfQogICAgcmV0dXJuIF9uYW1lZEFyZ3VtZW50czsKICB9CgogIGJvb2wgZ2V0IGlzTWV0aG9kIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIF9zZXRNZW1iZXJOYW1lQW5kVHlwZSgpOwogICAgfQogICAgcmV0dXJuIChfdHlwZSAmIF9LSU5EX01BU0spID09IF9NRVRIT0Q7CiAgfQoKICBib29sIGdldCBpc0FjY2Vzc29yIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIF9zZXRNZW1iZXJOYW1lQW5kVHlwZSgpOwogICAgfQogICAgcmV0dXJuIChfdHlwZSAmIF9LSU5EX01BU0spICE9IF9NRVRIT0Q7CiAgfQoKICBib29sIGdldCBpc0dldHRlciB7CiAgICBpZiAoX3R5cGUgPT0gbnVsbCkgewogICAgICBfc2V0TWVtYmVyTmFtZUFuZFR5cGUoKTsKICAgIH0KICAgIHJldHVybiAoX3R5cGUgJiBfS0lORF9NQVNLKSA9PSBfR0VUVEVSOwogIH0KCiAgYm9vbCBnZXQgaXNTZXR0ZXIgewogICAgaWYgKF90eXBlID09IG51bGwpIHsKICAgICAgX3NldE1lbWJlck5hbWVBbmRUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gKF90eXBlICYgX0tJTkRfTUFTSykgPT0gX1NFVFRFUjsKICB9CgogIF9JbnZvY2F0aW9uTWlycm9yKHRoaXMuX2Z1bmN0aW9uTmFtZSwgdGhpcy5fYXJndW1lbnRzRGVzY3JpcHRvciwKICAgICAgdGhpcy5fYXJndW1lbnRzLCB0aGlzLl9pc1N1cGVySW52b2NhdGlvbiwgdGhpcy5fdHlwZSwKICAgICAgW3RoaXMuX2RlbGF5ZWRUeXBlQXJndW1lbnRzTGVuID0gMF0pOwoKICBfSW52b2NhdGlvbk1pcnJvci5fd2l0aG91dFR5cGUodGhpcy5fZnVuY3Rpb25OYW1lLCB0aGlzLl90eXBlQXJndW1lbnRzLAogICAgICB0aGlzLl9wb3NpdGlvbmFsQXJndW1lbnRzLCB0aGlzLl9uYW1lZEFyZ3VtZW50cywgdGhpcy5faXNTdXBlckludm9jYXRpb24sCiAgICAgIFt0aGlzLl9kZWxheWVkVHlwZUFyZ3VtZW50c0xlbiA9IDBdKTsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9hbGxvY2F0ZUludm9jYXRpb25NaXJyb3IoU3RyaW5nIGZ1bmN0aW9uTmFtZSwKICAgICAgTGlzdCBhcmd1bWVudHNEZXNjcmlwdG9yLCBMaXN0IGFyZ3VtZW50cywgYm9vbCBpc1N1cGVySW52b2NhdGlvbiwKICAgICAgW2ludCB0eXBlID0gbnVsbF0pIHsKICAgIHJldHVybiBuZXcgX0ludm9jYXRpb25NaXJyb3IoCiAgICAgICAgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHNEZXNjcmlwdG9yLCBhcmd1bWVudHMsIGlzU3VwZXJJbnZvY2F0aW9uLCB0eXBlKTsKICB9CgogIC8vIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgYW4gYEludm9jYXRpb25gIGZvciBhIGNsb3N1cmUgY2FsbCB3aGljaAogIC8vIG1heSBoYXZlIGRlbGF5ZWQgdHlwZSBhcmd1bWVudHMuIEluIHRoYXQgY2FzZSwgdGhlIGFyZ3VtZW50cyBkZXNjcmlwdG9yIHdpbGwKICAvLyBpbmRpY2F0ZSAwIHR5cGUgYXJndW1lbnRzLCBidXQgdGhlIGFjdHVhbCBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgYXJlCiAgLy8gcGFzc2VkIGluIGBkZWxheWVkVHlwZUFyZ3VtZW50c0xlbmAuIElmIGFueSB0eXBlIGFyZ3VtZW50cyBhcmUgYXZhaWxhYmxlLAogIC8vIHRoZSB0eXBlIGFyZ3VtZW50cyB2ZWN0b3Igd2lsbCBiZSB0aGUgZmlyc3QgZW50cnkgaW4gYGFyZ3VtZW50c2AuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9hbGxvY2F0ZUludm9jYXRpb25NaXJyb3JGb3JDbG9zdXJlKAogICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lLAogICAgICBMaXN0IGFyZ3VtZW50c0Rlc2NyaXB0b3IsCiAgICAgIExpc3QgYXJndW1lbnRzLAogICAgICBpbnQgdHlwZSwKICAgICAgaW50IGRlbGF5ZWRUeXBlQXJndW1lbnRzTGVuKSB7CiAgICByZXR1cm4gbmV3IF9JbnZvY2F0aW9uTWlycm9yKGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzRGVzY3JpcHRvciwgYXJndW1lbnRzLAogICAgICAgIGZhbHNlLCB0eXBlLCBkZWxheWVkVHlwZUFyZ3VtZW50c0xlbik7CiAgfQp9CoDMAE5OPAEeAT9GJDAvPyAgIB8jJCM3AUs9IR8gJSMuJDkBSScfKisBNxgdExsgAUwWDR0dKAFROScnIgQBIREsGFEzGBRNDQ9NRAYEARofHwYYBAEZPEYEASEiHzAITU06SgYbBAFQTjUBIShRIlApMAg+NDdCBiEEASwjUFBFJCsINDQ0OkEkSFAIPwYcBAEWGR8GLAQBGBkfBiwEARYZHwYsBAEWGR8GLAQBQzwsAUpQLAEkOEgbIlAEAVFSTE9HJC4bIBYQJU8vBAIBLGRhcnQ6Y29yZS1wYXRjaC9pbnZvY2F0aW9uX21pcnJvcl9wYXRjaC5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvbGliX3ByZWZpeC5kYXJ0jB4vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vIFRoaXMgdHlwZSBjb3JyZXNwb25kcyB0byB0aGUgVk0taW50ZXJuYWwgY2xhc3MgTGlicmFyeVByZWZpeC4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfTGlicmFyeVByZWZpeCB7CiAgZmFjdG9yeSBfTGlicmFyeVByZWZpeC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgYm9vbCBfbG9hZCgpIG5hdGl2ZSAiTGlicmFyeVByZWZpeF9sb2FkIjsKICBPYmplY3QgX2xvYWRFcnJvcigpIG5hdGl2ZSAiTGlicmFyeVByZWZpeF9sb2FkRXJyb3IiOwogIGJvb2wgaXNMb2FkZWQoKSBuYXRpdmUgIkxpYnJhcnlQcmVmaXhfaXNMb2FkZWQiOwogIGJvb2wgX2ludmFsaWRhdGVEZXBlbmRlbnRDb2RlKCkKICAgICAgbmF0aXZlICJMaWJyYXJ5UHJlZml4X2ludmFsaWRhdGVEZXBlbmRlbnRDb2RlIjsKCiAgbG9hZExpYnJhcnkoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9vdXRzdGFuZGluZ0xvYWRSZXF1ZXN0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzW2ldWzBdID09IHRoaXMpIHsKICAgICAgICByZXR1cm4gX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzW2ldWzFdLmZ1dHVyZTsKICAgICAgfQogICAgfQoKICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPGJvb2w+KCk7CiAgICB2YXIgcGFpciA9IG5ldyBMaXN0KCk7CiAgICBwYWlyLmFkZCh0aGlzKTsKICAgIHBhaXIuYWRkKGNvbXBsZXRlcik7CiAgICBfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHMuYWRkKHBhaXIpOwogICAgVGltZXIucnVuKCgpIHsKICAgICAgdmFyIGhhc0NvbXBsZXRlZCA9IHRoaXMuX2xvYWQoKTsKICAgICAgLy8gTG9hZGluZyBjYW4gY29tcGxldGUgaW1tZWRpYXRlbHksIGZvciBleGFtcGxlIHdoZW4gdGhlIHNhbWUKICAgICAgLy8gbGlicmFyeSBoYXMgYmVlbiBsb2FkZWQgZWFnZXJseSBvciB0aHJvdWdoIGFub3RoZXIgZGVmZXJyZWQKICAgICAgLy8gcHJlZml4LiBJZiB0aGF0IGlzIHRoZSBjYXNlLCB3ZSBtdXN0IGludmFsaWRhdGUgdGhlIGRlcGVuZGVudAogICAgICAvLyBjb2RlIGFuZCBjb21wbGV0ZSB0aGUgZnV0dXJlIG5vdyBzaW5jZSB0aGVyZSB3aWxsIGJlIG5vIGNhbGxiYWNrCiAgICAgIC8vIGZyb20gdGhlIFZNLgogICAgICBpZiAoaGFzQ29tcGxldGVkICYmICFjb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgICBfaW52YWxpZGF0ZURlcGVuZGVudENvZGUoKTsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUodHJ1ZSk7CiAgICAgICAgX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzLnJlbW92ZShwYWlyKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICB9Cn0KCi8vIEEgbGlzdCBvZiB0d28gZWxlbWVudCBsaXN0cy4gVGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIF9MaWJyYXJ5UHJlZml4LiBUaGUKLy8gc2Vjb25kIGVsZW1lbnQgaXMgdGhlIENvbXBsZXRlciBmb3IgdGhlIGxvYWQgcmVxdWVzdC4KdmFyIF9vdXRzdGFuZGluZ0xvYWRSZXF1ZXN0cyA9IG5ldyBMaXN0PExpc3Q+KCk7CgovLyBDYWxsZWQgZnJvbSB0aGUgVk0gd2hlbiBhbiBvdXRzdGFuZGluZyBsb2FkIHJlcXVlc3QgaGFzIGZpbmlzaGVkLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX2NvbXBsZXRlRGVmZXJyZWRMb2FkcygpIHsKICAvLyBEZXRlcm1pbmUgd2hpY2ggb3V0c3RhbmRpbmcgbG9hZCByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZCBhbmQgY29tcGxldGUKICAvLyB0aGVpciBjb21wbGV0ZXIgKHdpdGggYW4gZXJyb3Igb3IgdHJ1ZSkuIEZvciBvdXRzdGFuZGluZyBsb2FkIHJlcXVlc3RzCiAgLy8gd2hpY2ggaGF2ZSBub3QgY29tcGxldGVkLCByZW1lbWJlciB0aGVtIGZvciBuZXh0IHRpbWUgaW4KICAvLyBzdGlsbE91dHN0YW5kaW5nTG9hZFJlcXVlc3RzLgogIHZhciBzdGlsbE91dHN0YW5kaW5nTG9hZFJlcXVlc3RzID0gbmV3IExpc3Q8TGlzdD4oKTsKCiAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIG91dHN0YW5kaW5nUmVxdWVzdHMgYmVjYXVzZSB0aGUgY2FsbCB0byBfbG9hZCBiZWxvdwogIC8vIG1heSByZWN1cnNpdmVseSB0cmlnZ2VyIGFub3RoZXIgY2FsbCB0byB8X2NvbXBsZXRlRGVmZXJyZWRMb2Fkc3wsIHdoaWNoCiAgLy8gY2FuIGNhdXNlIHxfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHN8IHRvIGJlIG1vZGlmaWVkLgogIHZhciBvdXRzdGFuZGluZ1JlcXVlc3RzID0gX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzLnRvTGlzdCgpOwogIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0c3RhbmRpbmdSZXF1ZXN0cy5sZW5ndGg7IGkrKykgewogICAgdmFyIHByZWZpeCA9IG91dHN0YW5kaW5nUmVxdWVzdHNbaV1bMF07CiAgICB2YXIgY29tcGxldGVyID0gb3V0c3RhbmRpbmdSZXF1ZXN0c1tpXVsxXTsKICAgIHZhciBlcnJvciA9IHByZWZpeC5fbG9hZEVycm9yKCk7CiAgICBpZiAoY29tcGxldGVyLmlzQ29tcGxldGVkKSB7CiAgICAgIC8vIEFscmVhZHkgY29tcGxldGVkLiBTa2lwLgogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICAgIH0gZWxzZSBpZiAocHJlZml4Ll9sb2FkKCkpIHsKICAgICAgcHJlZml4Ll9pbnZhbGlkYXRlRGVwZW5kZW50Q29kZSgpOwogICAgICBjb21wbGV0ZXIuY29tcGxldGUodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBzdGlsbE91dHN0YW5kaW5nTG9hZFJlcXVlc3RzLmFkZChvdXRzdGFuZGluZ1JlcXVlc3RzW2ldKTsKICAgIH0KICB9CiAgX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzID0gc3RpbGxPdXRzdGFuZGluZ0xvYWRSZXF1ZXN0czsKfQpWAE5OPAEeAUEaFy0ZBAEsODMiNgESQDQ2CAYBKxsUGSgTJ0VFR0oWNCQiLwgIHQQCAU05MQFFIhtLTD4jNwFMTTo/OSwvJSEiEAYZJiEpIA1ABgQ7AgEfZGFydDpjb3JlLXBhdGNoL2xpYl9wcmVmaXguZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3JlZ2V4cF9wYXRjaC5kYXJ0tRIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBSZWdFeHAgewogIEBwYXRjaAogIGZhY3RvcnkgUmVnRXhwKFN0cmluZyBzb3VyY2UsCiAgICAgIHtib29sIG11bHRpTGluZTogZmFsc2UsCiAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgYm9vbCB1bmljb2RlOiBmYWxzZSwKICAgICAgYm9vbCBkb3RBbGw6IGZhbHNlfSkgewogICAgX1JlZ0V4cEhhc2hLZXkga2V5ID0KICAgICAgICBuZXcgX1JlZ0V4cEhhc2hLZXkoc291cmNlLCBtdWx0aUxpbmUsIGNhc2VTZW5zaXRpdmUsIHVuaWNvZGUsIGRvdEFsbCk7CiAgICBfUmVnRXhwSGFzaFZhbHVlIHZhbHVlID0gX2NhY2hlW2tleV07CgogICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgaWYgKF9jYWNoZS5sZW5ndGggPiBfTUFYX0NBQ0hFX1NJWkUpIHsKICAgICAgICBfUmVnRXhwSGFzaEtleSBsYXN0S2V5ID0gX3JlY2VudGx5VXNlZC5sYXN0OwogICAgICAgIF9yZWNlbnRseVVzZWQucmVtb3ZlKGxhc3RLZXkpOwogICAgICAgIF9jYWNoZS5yZW1vdmUobGFzdEtleSk7CiAgICAgIH0KCiAgICAgIHZhbHVlID0gbmV3IF9SZWdFeHBIYXNoVmFsdWUoCiAgICAgICAgICBuZXcgX1JlZ0V4cChzb3VyY2UsCiAgICAgICAgICAgICAgbXVsdGlMaW5lOiBtdWx0aUxpbmUsCiAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZSwKICAgICAgICAgICAgICB1bmljb2RlOiB1bmljb2RlLAogICAgICAgICAgICAgIGRvdEFsbDogZG90QWxsKSwKICAgICAgICAgIGtleSk7CiAgICAgIF9jYWNoZVtrZXldID0gdmFsdWU7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZS5rZXkudW5saW5rKCk7CiAgICB9CgogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwoKICAgIF9yZWNlbnRseVVzZWQuYWRkRmlyc3QodmFsdWUua2V5KTsKICAgIGFzc2VydChfcmVjZW50bHlVc2VkLmxlbmd0aCA9PSBfY2FjaGUubGVuZ3RoKTsKCiAgICAvLyBUT0RPKHplcm55KTogV2UgbWlnaHQgbm90IHdhbnQgdG8gY2Fub25pY2FsaXplIHJlZ2V4cCBvYmplY3RzLgogICAgcmV0dXJuIHZhbHVlLnJlZ2V4cDsKICB9CgogIC8qKgogICAqIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgUmVnRXhwLXNpZ25pZmljYW50IGNoYXIgaW4gW3RleHRdLgogICAqCiAgICogU3RhcnRzIGxvb2tpbmcgZnJvbSBbc3RhcnRdLiBSZXR1cm5zIGB0ZXh0Lmxlbmd0aGAgaWYgbm8gY2hhcmFjdGVyCiAgICogaXMgZm91bmQgdGhhdCBoYXMgc3BlY2lhbCBtZWFuaW5nIGluIFJlZ0V4cCBzeW50YXguCiAgICovCiAgc3RhdGljIGludCBfZmluZEVzY2FwZUNoYXIoU3RyaW5nIHRleHQsIGludCBzdGFydCkgewogICAgLy8gVGFibGUgd2hlcmUgZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIHJhbmdlIFUrMDAwMCB0byBVKzAwN2YgaXMgcmVwcmVzZW50ZWQKICAgIC8vIGJ5IHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgZXNjYXBlZCBpbiBhIHJlZ2V4cC4KICAgIC8vIFRoZSBceDAwIGNoYXJhY3RlcnMgbWVhbnMgZXNjYWNwZWQsIGFuZCBceDAxIG1lYW5zIG5vbi1lc2NhcGVkLgogICAgY29uc3QgZXNjYXBlcyA9CiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICQgICAgICAgICAgICAgICAoICAgKSAgICogICArICAgICAgICAgICAuCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAwXHgwMVx4MDFceDAxXHgwMFx4MDBceDAwXHgwMFx4MDFceDAxXHgwMFx4MDEiCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPwogICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAwIgogICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAgIFwgICBdICAgXgogICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDBceDAwXHgwMFx4MDBceDAxIgogICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgIHwgICB9CiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMFx4MDBceDAwXHgwMVx4MDEiOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICBpbnQgY2hhciA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPD0gMHg3ZiAmJiBlc2NhcGVzLmNvZGVVbml0QXQoY2hhcikgPT0gMCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gdGV4dC5sZW5ndGg7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIGVzY2FwZShTdHJpbmcgdGV4dCkgewogICAgaW50IGVzY2FwZUNoYXJJbmRleCA9IF9maW5kRXNjYXBlQ2hhcih0ZXh0LCAwKTsKICAgIC8vIElmIHRoZSB0ZXh0IGNvbnRhaW5zIG5vIGNoYXJhY3RlcnMgbmVlZGluZyBlc2NhcGUsIHJldHVybiBpdCBkaXJlY3RseS4KICAgIGlmIChlc2NhcGVDaGFySW5kZXggPT0gdGV4dC5sZW5ndGgpIHJldHVybiB0ZXh0OwoKICAgIHZhciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgcHJldmlvdXNTbGljZUVuZEluZGV4ID0gMDsKICAgIGRvIHsKICAgICAgLy8gQ29weSBjaGFyYWN0ZXJzIGZyb20gcHJldmlvdXMgZXNjYXBlIHRvIGN1cnJlbnQgZXNjYXBlIGludG8gcmVzdWx0LgogICAgICAvLyBUaGlzIGluY2x1ZGVzIHRoZSBwcmV2aW91c2x5IGVzY2FwZWQgY2hhcmFjdGVyLgogICAgICBidWZmZXIud3JpdGUodGV4dC5zdWJzdHJpbmcocHJldmlvdXNTbGljZUVuZEluZGV4LCBlc2NhcGVDaGFySW5kZXgpKTsKICAgICAgLy8gUHJlcGFyZSB0aGUgY3VycmVudCBjaGFyYWN0ZXIgdG8gYmUgZXNjYXBlZCBieSBwcmVmaXhpbmcgaXQgd2l0aCBhICdcJy4KICAgICAgYnVmZmVyLndyaXRlKHIiXCIpOwogICAgICBwcmV2aW91c1NsaWNlRW5kSW5kZXggPSBlc2NhcGVDaGFySW5kZXg7CiAgICAgIGVzY2FwZUNoYXJJbmRleCA9IF9maW5kRXNjYXBlQ2hhcih0ZXh0LCBlc2NhcGVDaGFySW5kZXggKyAxKTsKICAgIH0gd2hpbGUgKGVzY2FwZUNoYXJJbmRleCA8IHRleHQubGVuZ3RoKTsKICAgIC8vIENvcHkgdGFpbCBvZiBzdHJpbmcgaW50byByZXN1bHQuCiAgICBidWZmZXIud3JpdGUodGV4dC5zdWJzdHJpbmcocHJldmlvdXNTbGljZUVuZEluZGV4LCBlc2NhcGVDaGFySW5kZXgpKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzIGFyZSBzdG9yZWQgaW4gYSBjYWNoZSBvZiB1cCB0byBfTUFYX0NBQ0hFX1NJWkUKICAvLyBlbGVtZW50cyB1c2luZyBhbiBMUlUgZXZpY3Rpb24gc3RyYXRlZ3kuCiAgLy8gVE9ETyh6ZXJueSk6IERvIG5vdCBpbXBvc2UgYSBmaXhlZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGNhY2hlZCBvYmplY3RzLgogIC8vIE90aGVyIHBvc3NpYmlsaXRpZXMgY291bGQgYmUgbGltaXRpbmcgYnkgdGhlIHNpemUgb2YgdGhlIHJlZ2V4cCBvYmplY3RzLAogIC8vIG9yIGltcG9zaW5nIGEgbG93ZXIgdGltZSBib3VuZCBmb3IgdGhlIG1vc3QgcmVjZW50IHVzZSB1bmRlciB3aGljaCBhIHJlZ2V4cAogIC8vIG1heSBub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4KICAvLyBUT0RPKHplcm55KTogVXNlIHNlbGYtc2l6aW5nIGNhY2hlIHNpbWlsYXIgdG8gX0FjY2Vzc29yQ2FjaGUgaW4KICAvLyBtaXJyb3JzX2ltcGwuZGFydC4KICBzdGF0aWMgY29uc3QgaW50IF9NQVhfQ0FDSEVfU0laRSA9IDI1NjsKICBzdGF0aWMgZmluYWwgTWFwPF9SZWdFeHBIYXNoS2V5LCBfUmVnRXhwSGFzaFZhbHVlPiBfY2FjaGUgPQogICAgICBuZXcgSGFzaE1hcDxfUmVnRXhwSGFzaEtleSwgX1JlZ0V4cEhhc2hWYWx1ZT4oKTsKICBzdGF0aWMgZmluYWwgTGlua2VkTGlzdDxfUmVnRXhwSGFzaEtleT4gX3JlY2VudGx5VXNlZCA9CiAgICAgIG5ldyBMaW5rZWRMaXN0PF9SZWdFeHBIYXNoS2V5PigpOwoKICBpbnQgZ2V0IF9ncm91cENvdW50OwogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IF9ncm91cE5hbWVzOwogIGludCBfZ3JvdXBOYW1lSW5kZXgoU3RyaW5nIG5hbWUpOwp9CgovLyBSZXByZXNlbnRzIGJvdGggYSBrZXkgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZSBhcyB3ZWxsIGFzIGl0cwovLyBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBMUlUgbGlzdC4KY2xhc3MgX1JlZ0V4cEhhc2hLZXkgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8X1JlZ0V4cEhhc2hLZXk+IHsKICBmaW5hbCBTdHJpbmcgcGF0dGVybjsKICBmaW5hbCBib29sIG11bHRpTGluZTsKICBmaW5hbCBib29sIGNhc2VTZW5zaXRpdmU7CiAgZmluYWwgYm9vbCB1bmljb2RlOwogIGZpbmFsIGJvb2wgZG90QWxsOwoKICBfUmVnRXhwSGFzaEtleSh0aGlzLnBhdHRlcm4sIHRoaXMubXVsdGlMaW5lLCB0aGlzLmNhc2VTZW5zaXRpdmUsIHRoaXMudW5pY29kZSwKICAgICAgdGhpcy5kb3RBbGwpOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHBhdHRlcm4uaGFzaENvZGU7CiAgYm9vbCBvcGVyYXRvciA9PSh0aGF0KSB7CiAgICByZXR1cm4gKHRoYXQgaXMgX1JlZ0V4cEhhc2hLZXkpICYmCiAgICAgICAgKHRoaXMucGF0dGVybiA9PSB0aGF0LnBhdHRlcm4pICYmCiAgICAgICAgKHRoaXMubXVsdGlMaW5lID09IHRoYXQubXVsdGlMaW5lKSAmJgogICAgICAgICh0aGlzLmNhc2VTZW5zaXRpdmUgPT0gdGhhdC5jYXNlU2Vuc2l0aXZlKSAmJgogICAgICAgICh0aGlzLnVuaWNvZGUgPT0gdGhhdC51bmljb2RlKSAmJgogICAgICAgICh0aGlzLmRvdEFsbCA9PSB0aGF0LmRvdEFsbCk7CiAgfQp9CgovLyBSZXByZXNlbnRzIGEgdmFsdWUgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZS4gQ29udGFpbnMgYSBwb2ludGVyCi8vIGJhY2sgdG8gdGhlIGtleSBpbiBvcmRlciB0byBhY2Nlc3MgdGhlIGNvcnJlc3BvbmRpbmcgTFJVIGVudHJ5LgpjbGFzcyBfUmVnRXhwSGFzaFZhbHVlIHsKICBmaW5hbCBfUmVnRXhwIHJlZ2V4cDsKICBmaW5hbCBfUmVnRXhwSGFzaEtleSBrZXk7CgogIF9SZWdFeHBIYXNoVmFsdWUodGhpcy5yZWdleHAsIHRoaXMua2V5KTsKfQoKY2xhc3MgX1JlZ0V4cE1hdGNoIGltcGxlbWVudHMgUmVnRXhwTWF0Y2ggewogIF9SZWdFeHBNYXRjaC5fKHRoaXMuX3JlZ2V4cCwgdGhpcy5pbnB1dCwgdGhpcy5fbWF0Y2gpOwoKICBpbnQgZ2V0IHN0YXJ0ID0+IF9zdGFydCgwKTsKICBpbnQgZ2V0IGVuZCA9PiBfZW5kKDApOwoKICBpbnQgX3N0YXJ0KGludCBncm91cElkeCkgewogICAgcmV0dXJuIF9tYXRjaFsoZ3JvdXBJZHggKiBfTUFUQ0hfUEFJUildOwogIH0KCiAgaW50IF9lbmQoaW50IGdyb3VwSWR4KSB7CiAgICByZXR1cm4gX21hdGNoWyhncm91cElkeCAqIF9NQVRDSF9QQUlSKSArIDFdOwogIH0KCiAgU3RyaW5nIGdyb3VwKGludCBncm91cElkeCkgewogICAgaWYgKGdyb3VwSWR4IDwgMCB8fCBncm91cElkeCA+IF9yZWdleHAuX2dyb3VwQ291bnQpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoZ3JvdXBJZHgpOwogICAgfQogICAgaW50IHN0YXJ0SW5kZXggPSBfc3RhcnQoZ3JvdXBJZHgpOwogICAgaW50IGVuZEluZGV4ID0gX2VuZChncm91cElkeCk7CiAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkgewogICAgICBhc3NlcnQoZW5kSW5kZXggPT0gLTEpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBpbnB1dC5fc3Vic3RyaW5nVW5jaGVja2VkKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICB9CgogIFN0cmluZyBvcGVyYXRvciBbXShpbnQgZ3JvdXBJZHgpIHsKICAgIHJldHVybiB0aGlzLmdyb3VwKGdyb3VwSWR4KTsKICB9CgogIExpc3Q8U3RyaW5nPiBncm91cHMoTGlzdDxpbnQ+IGdyb3Vwc1NwZWMpIHsKICAgIHZhciBncm91cHNMaXN0ID0gbmV3IExpc3Q8U3RyaW5nPihncm91cHNTcGVjLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3Vwc1NwZWMubGVuZ3RoOyBpKyspIHsKICAgICAgZ3JvdXBzTGlzdFtpXSA9IGdyb3VwKGdyb3Vwc1NwZWNbaV0pOwogICAgfQogICAgcmV0dXJuIGdyb3Vwc0xpc3Q7CiAgfQoKICBpbnQgZ2V0IGdyb3VwQ291bnQgPT4gX3JlZ2V4cC5fZ3JvdXBDb3VudDsKCiAgUGF0dGVybiBnZXQgcGF0dGVybiA9PiBfcmVnZXhwOwoKICBTdHJpbmcgbmFtZWRHcm91cChTdHJpbmcgbmFtZSkgewogICAgdmFyIGlkeCA9IF9yZWdleHAuX2dyb3VwTmFtZUluZGV4KG5hbWUpOwogICAgaWYgKGlkeCA8IDApIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiTm90IGEgY2FwdHVyZSBncm91cCBuYW1lOiAke25hbWV9Iik7CiAgICB9CiAgICByZXR1cm4gZ3JvdXAoaWR4KTsKICB9CgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGdyb3VwTmFtZXMgewogICAgcmV0dXJuIF9yZWdleHAuX2dyb3VwTmFtZXM7CiAgfQoKICBmaW5hbCBSZWdFeHAgX3JlZ2V4cDsKICBmaW5hbCBTdHJpbmcgaW5wdXQ7CiAgZmluYWwgTGlzdDxpbnQ+IF9tYXRjaDsKICBzdGF0aWMgY29uc3QgaW50IF9NQVRDSF9QQUlSID0gMjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfUmVnRXhwIGltcGxlbWVudHMgUmVnRXhwIHsKICBmYWN0b3J5IF9SZWdFeHAoU3RyaW5nIHBhdHRlcm4sCiAgICAgIHtib29sIG11bHRpTGluZTogZmFsc2UsCiAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgYm9vbCB1bmljb2RlOiBmYWxzZSwKICAgICAgYm9vbCBkb3RBbGw6IGZhbHNlfSkgbmF0aXZlICJSZWdFeHBfZmFjdG9yeSI7CgogIFJlZ0V4cE1hdGNoIGZpcnN0TWF0Y2goU3RyaW5nIHN0cikgewogICAgaWYgKHN0ciBpcyEgU3RyaW5nKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzdHIpOwogICAgTGlzdCBtYXRjaCA9IF9FeGVjdXRlTWF0Y2goc3RyLCAwKTsKICAgIGlmIChtYXRjaCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIG5ldyBfUmVnRXhwTWF0Y2guXyh0aGlzLCBzdHIsIG1hdGNoKTsKICB9CgogIEl0ZXJhYmxlPFJlZ0V4cE1hdGNoPiBhbGxNYXRjaGVzKFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0cmluZyBpcyEgU3RyaW5nKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzdHJpbmcpOwogICAgaWYgKHN0YXJ0IGlzISBpbnQpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHN0YXJ0KTsKICAgIGlmICgwID4gc3RhcnQgfHwgc3RhcnQgPiBzdHJpbmcubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCBzdHJpbmcubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0FsbE1hdGNoZXNJdGVyYWJsZSh0aGlzLCBzdHJpbmcsIHN0YXJ0KTsKICB9CgogIFJlZ0V4cE1hdGNoIG1hdGNoQXNQcmVmaXgoU3RyaW5nIHN0cmluZywgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RyaW5nIGlzISBTdHJpbmcpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHN0cmluZyk7CiAgICBpZiAoc3RhcnQgaXMhIGludCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Ioc3RhcnQpOwogICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IHN0cmluZy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIHN0cmluZy5sZW5ndGgpOwogICAgfQogICAgTGlzdDxpbnQ+IGxpc3QgPSBfRXhlY3V0ZU1hdGNoU3RpY2t5KHN0cmluZywgc3RhcnQpOwogICAgaWYgKGxpc3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IF9SZWdFeHBNYXRjaC5fKHRoaXMsIHN0cmluZywgbGlzdCk7CiAgfQoKICBib29sIGhhc01hdGNoKFN0cmluZyBzdHIpIHsKICAgIGlmIChzdHIgaXMhIFN0cmluZykgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Ioc3RyKTsKICAgIExpc3QgbWF0Y2ggPSBfRXhlY3V0ZU1hdGNoKHN0ciwgMCk7CiAgICByZXR1cm4gKG1hdGNoID09IG51bGwpID8gZmFsc2UgOiB0cnVlOwogIH0KCiAgU3RyaW5nIHN0cmluZ01hdGNoKFN0cmluZyBzdHIpIHsKICAgIGlmIChzdHIgaXMhIFN0cmluZykgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Ioc3RyKTsKICAgIExpc3QgbWF0Y2ggPSBfRXhlY3V0ZU1hdGNoKHN0ciwgMCk7CiAgICBpZiAobWF0Y2ggPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBzdHIuX3N1YnN0cmluZ1VuY2hlY2tlZChtYXRjaFswXSwgbWF0Y2hbMV0pOwogIH0KCiAgU3RyaW5nIGdldCBwYXR0ZXJuIG5hdGl2ZSAiUmVnRXhwX2dldFBhdHRlcm4iOwoKICBib29sIGdldCBpc011bHRpTGluZSBuYXRpdmUgIlJlZ0V4cF9nZXRJc011bHRpTGluZSI7CgogIGJvb2wgZ2V0IGlzQ2FzZVNlbnNpdGl2ZSBuYXRpdmUgIlJlZ0V4cF9nZXRJc0Nhc2VTZW5zaXRpdmUiOwoKICBib29sIGdldCBpc1VuaWNvZGUgbmF0aXZlICJSZWdFeHBfZ2V0SXNVbmljb2RlIjsKCiAgYm9vbCBnZXQgaXNEb3RBbGwgbmF0aXZlICJSZWdFeHBfZ2V0SXNEb3RBbGwiOwoKICBpbnQgZ2V0IF9ncm91cENvdW50IG5hdGl2ZSAiUmVnRXhwX2dldEdyb3VwQ291bnQiOwoKICAvLyBSZXR1cm5zIGEgTGlzdCBbU3RyaW5nLCBpbnQsIFN0cmluZywgaW50LCAuLi5dIHdoZXJlIGVhY2gKICAvLyBTdHJpbmcgaXMgdGhlIG5hbWUgb2YgYSBjYXB0dXJlIGdyb3VwIGFuZCB0aGUgZm9sbG93aW5nCiAgLy8gaW50IGlzIHRoYXQgY2FwdHVyZSBncm91cCdzIGluZGV4LgogIExpc3QgZ2V0IF9ncm91cE5hbWVMaXN0IG5hdGl2ZSAiUmVnRXhwX2dldEdyb3VwTmFtZU1hcCI7CgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IF9ncm91cE5hbWVzIHN5bmMqIHsKICAgIGZpbmFsIG5hbWVMaXN0ID0gX2dyb3VwTmFtZUxpc3Q7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVMaXN0Lmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIHlpZWxkIG5hbWVMaXN0W2ldIGFzIFN0cmluZzsKICAgIH0KICB9CgogIGludCBfZ3JvdXBOYW1lSW5kZXgoU3RyaW5nIG5hbWUpIHsKICAgIHZhciBuYW1lTGlzdCA9IF9ncm91cE5hbWVMaXN0OwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lTGlzdC5sZW5ndGg7IGkgKz0gMikgewogICAgICBpZiAobmFtZSA9PSBuYW1lTGlzdFtpXSkgewogICAgICAgIHJldHVybiBuYW1lTGlzdFtpICsgMV07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIC8vIEJ5dGUgbWFwIG9mIG9uZSBieXRlIGNoYXJhY3RlcnMgd2l0aCBhIDB4ZmYgaWYgdGhlIGNoYXJhY3RlciBpcyBhIHdvcmQKICAvLyBjaGFyYWN0ZXIgKGRpZ2l0LCBsZXR0ZXIgb3IgdW5kZXJzY29yZSkgYW5kIDB4MDAgb3RoZXJ3aXNlLgogIC8vIFVzZWQgYnkgZ2VuZXJhdGVkIFJlZ0V4cCBjb2RlLgogIHN0YXRpYyBjb25zdCBMaXN0PGludD4gX3dvcmRDaGFyYWN0ZXJNYXAgPSBjb25zdCA8aW50PlsKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCgogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAnMCcgLSAnNycKICAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vICc4JyAtICc5JwoKICAgIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8vICdBJyAtICdHJwogICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLy8gJ0gnIC0gJ08nCiAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAnUCcgLSAnVycKICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIC8vICdYJyAtICdaJywgJ18nCgogICAgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLy8gJ2EnIC0gJ2cnCiAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAnaCcgLSAnbycKICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8vICdwJyAtICd3JwogICAgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gJ3gnIC0gJ3onCiAgICAvLyBMYXRpbi0xIHJhbmdlCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAoKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCgogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogIF07CgogIExpc3QgX0V4ZWN1dGVNYXRjaChTdHJpbmcgc3RyLCBpbnQgc3RhcnRfaW5kZXgpIG5hdGl2ZSAiUmVnRXhwX0V4ZWN1dGVNYXRjaCI7CgogIExpc3QgX0V4ZWN1dGVNYXRjaFN0aWNreShTdHJpbmcgc3RyLCBpbnQgc3RhcnRfaW5kZXgpCiAgICAgIG5hdGl2ZSAiUmVnRXhwX0V4ZWN1dGVNYXRjaFN0aWNreSI7Cn0KCmNsYXNzIF9BbGxNYXRjaGVzSXRlcmFibGUgZXh0ZW5kcyBJdGVyYWJsZUJhc2U8UmVnRXhwTWF0Y2g+IHsKICBmaW5hbCBfUmVnRXhwIF9yZTsKICBmaW5hbCBTdHJpbmcgX3N0cjsKICBmaW5hbCBpbnQgX3N0YXJ0OwoKICBfQWxsTWF0Y2hlc0l0ZXJhYmxlKHRoaXMuX3JlLCB0aGlzLl9zdHIsIHRoaXMuX3N0YXJ0KTsKCiAgSXRlcmF0b3I8UmVnRXhwTWF0Y2g+IGdldCBpdGVyYXRvciA9PgogICAgICBuZXcgX0FsbE1hdGNoZXNJdGVyYXRvcihfcmUsIF9zdHIsIF9zdGFydCk7Cn0KCmNsYXNzIF9BbGxNYXRjaGVzSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxSZWdFeHBNYXRjaD4gewogIGZpbmFsIFN0cmluZyBfc3RyOwogIGludCBfbmV4dEluZGV4OwogIF9SZWdFeHAgX3JlOwogIFJlZ0V4cE1hdGNoIF9jdXJyZW50OwoKICBfQWxsTWF0Y2hlc0l0ZXJhdG9yKHRoaXMuX3JlLCB0aGlzLl9zdHIsIHRoaXMuX25leHRJbmRleCk7CgogIFJlZ0V4cE1hdGNoIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBzdGF0aWMgYm9vbCBfaXNMZWFkU3Vycm9nYXRlKGludCBjKSB7CiAgICByZXR1cm4gYyA+PSAweGQ4MDAgJiYgYyA8PSAweGRiZmY7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNUcmFpbFN1cnJvZ2F0ZShpbnQgYykgewogICAgcmV0dXJuIGMgPj0gMHhkYzAwICYmIGMgPD0gMHhkZmZmOwogIH0KCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfcmUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOyAvLyBDbGVhcmVkIGFmdGVyIGEgZmFpbGVkIG1hdGNoLgogICAgaWYgKF9uZXh0SW5kZXggPD0gX3N0ci5sZW5ndGgpIHsKICAgICAgdmFyIG1hdGNoID0gX3JlLl9FeGVjdXRlTWF0Y2goX3N0ciwgX25leHRJbmRleCk7CiAgICAgIGlmIChtYXRjaCAhPSBudWxsKSB7CiAgICAgICAgX2N1cnJlbnQgPSBuZXcgX1JlZ0V4cE1hdGNoLl8oX3JlLCBfc3RyLCBtYXRjaCk7CiAgICAgICAgX25leHRJbmRleCA9IF9jdXJyZW50LmVuZDsKICAgICAgICBpZiAoX25leHRJbmRleCA9PSBfY3VycmVudC5zdGFydCkgewogICAgICAgICAgLy8gWmVyby13aWR0aCBtYXRjaC4gQWR2YW5jZSBieSBvbmUgbW9yZSwgdW5sZXNzIHRoZSByZWdleHAKICAgICAgICAgIC8vIGlzIGluIHVuaWNvZGUgbW9kZSBhbmQgaXQgd291bGQgcHV0IHVzIHdpdGhpbiBhIHN1cnJvZ2F0ZQogICAgICAgICAgLy8gcGFpci4gSW4gdGhhdCBjYXNlLCBhZHZhbmNlIHBhc3QgdGhlIGNvZGUgcG9pbnQgYXMgYSB3aG9sZS4KICAgICAgICAgIGlmIChfcmUuaXNVbmljb2RlICYmCiAgICAgICAgICAgICAgX25leHRJbmRleCArIDEgPCBfc3RyLmxlbmd0aCAmJgogICAgICAgICAgICAgIF9pc0xlYWRTdXJyb2dhdGUoX3N0ci5jb2RlVW5pdEF0KF9uZXh0SW5kZXgpKSAmJgogICAgICAgICAgICAgIF9pc1RyYWlsU3Vycm9nYXRlKF9zdHIuY29kZVVuaXRBdChfbmV4dEluZGV4ICsgMSkpKSB7CiAgICAgICAgICAgIF9uZXh0SW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICAgIF9uZXh0SW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIF9yZSA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CoGVAE5OPAEeAQcPCSAeIBsdGU8qARktNScgCAEkHiQsIB8QGw0aBgEbASczAUYZBAEGRQVIOQY3TzZHFEtLRUtJS0tFS0tBTDAlQwYYBAEJJjRONQElIwlNOUxRGi9ELShKHgQBTy5PTlEoRRgqPjc6KAEXJCQCAUgoPxgYHBYVAVEUASgbJyouNiomBAIBSkMZGBwBKwIBLDkBHhoBHS0EARsxBAEfOiwGJyMcHhMGPAQBJSEEAS46MiwGFwQBLQEiASMtE0AGFwQBJCAEARgWGiQCARoiIh4gGzQBJzYoGRMGMQQBRTw3LjsGOQQBPjw3LjsGOSMzBAEeNigrBAEjNigZEwY4BAExATcBPwEzATEBNQE/PSg7ASslMyMGBAElIzMhIAgGDwQBTEEkOjQ0NDQBNDRBQQFBQUFGAUFBQUEVNDQ0NAE0NDQ0ATQ0NDQBNDQ0NAUBUAE4KgIBPhUVFAE5ASgyAgE9FRIPGAE9AScBKCcEASknBAEURCU3GzkjLEZHSR8uP0QaDBgKFQgGFRASBAIBIWRhcnQ6Y29yZS1wYXRjaC9yZWdleHBfcGF0Y2guZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3N0YWNrdHJhY2UuZGFydIGYLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLy8gVk0gaW50ZXJuYWwgU3RhY2tUcmFjZSBpbXBsZW1lbnRhdGlvbi4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfU3RhY2tUcmFjZSBpbXBsZW1lbnRzIFN0YWNrVHJhY2UgewogIC8vIHRvU3RyaW5nKCkgaXMgb3ZlcnJpZGRlbiBvbiB0aGUgQysrIHNpZGUuCn0KDQBOTjwBHgErGiovAgEfZGFydDpjb3JlLXBhdGNoL3N0YWNrdHJhY2UuZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3N0cmluZ19wYXRjaC5kYXJ0wAC2NC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKY29uc3QgaW50IF9tYXhBc2NpaSA9IDB4N2Y7CmNvbnN0IGludCBfbWF4TGF0aW4xID0gMHhmZjsKY29uc3QgaW50IF9tYXhVdGYxNiA9IDB4ZmZmZjsKY29uc3QgaW50IF9tYXhVbmljb2RlID0gMHgxMGZmZmY7CgpAcGF0Y2gKY2xhc3MgU3RyaW5nIHsKICBAcGF0Y2gKICBmYWN0b3J5IFN0cmluZy5mcm9tQ2hhckNvZGVzKEl0ZXJhYmxlPGludD4gY2hhckNvZGVzLAogICAgICBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGlmIChjaGFyQ29kZXMgaXMhIEl0ZXJhYmxlKQogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShjaGFyQ29kZXMsICJjaGFyQ29kZXMiKTsKICAgIGlmIChzdGFydCBpcyEgaW50KSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShzdGFydCwgInN0YXJ0Iik7CiAgICBpZiAoZW5kICE9IG51bGwgJiYgZW5kIGlzISBpbnQpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKGVuZCwgImVuZCIpOwogICAgcmV0dXJuIF9TdHJpbmdCYXNlLmNyZWF0ZUZyb21DaGFyQ29kZXMoY2hhckNvZGVzLCBzdGFydCwgZW5kLCBudWxsKTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgU3RyaW5nLmZyb21DaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIGlmIChjaGFyQ29kZSA+PSAwKSB7CiAgICAgIGlmIChjaGFyQ29kZSA8PSAweGZmKSB7CiAgICAgICAgcmV0dXJuIF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSgxKS4uX3NldEF0KDAsIGNoYXJDb2RlKTsKICAgICAgfQogICAgICBpZiAoY2hhckNvZGUgPD0gMHhmZmZmKSB7CiAgICAgICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9jcmVhdGVGcm9tQ29kZVBvaW50cygKICAgICAgICAgICAgbmV3IF9MaXN0KDEpLi5bMF0gPSBjaGFyQ29kZSwgMCwgMSk7CiAgICAgIH0KICAgICAgaWYgKGNoYXJDb2RlIDw9IDB4MTBmZmZmKSB7CiAgICAgICAgdmFyIGxvdyA9IDB4REMwMCB8IChjaGFyQ29kZSAmIDB4M2ZmKTsKICAgICAgICBpbnQgYml0cyA9IGNoYXJDb2RlIC0gMHgxMDAwMDsKICAgICAgICB2YXIgaGlnaCA9IDB4RDgwMCB8IChiaXRzID4+IDEwKTsKICAgICAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2NyZWF0ZUZyb21Db2RlUG9pbnRzKAogICAgICAgICAgICBuZXcgX0xpc3QoMikKICAgICAgICAgICAgICAuLlswXSA9IGhpZ2gKICAgICAgICAgICAgICAuLlsxXSA9IGxvdywKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMik7CiAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGNoYXJDb2RlLCAwLCAweDEwZmZmZik7CiAgfQoKICBAcGF0Y2gKICBjb25zdCBmYWN0b3J5IFN0cmluZy5mcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUsIHtTdHJpbmcgZGVmYXVsdFZhbHVlfSkKICAgICAgbmF0aXZlICJTdHJpbmdfZnJvbUVudmlyb25tZW50IjsKCiAgYm9vbCBnZXQgX2lzT25lQnl0ZTsKICBTdHJpbmcgX3N1YnN0cmluZ1VuY2hlY2tlZChpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KTsKfQoKLyoqCiAqIFtfU3RyaW5nQmFzZV0gY29udGFpbnMgY29tbW9uIG1ldGhvZHMgdXNlZCBieSBjb25jcmV0ZSBTdHJpbmcKICogaW1wbGVtZW50YXRpb25zLCBlLmcuLCBfT25lQnl0ZVN0cmluZy4KICovCmFic3RyYWN0IGNsYXNzIF9TdHJpbmdCYXNlIGltcGxlbWVudHMgU3RyaW5nIHsKICBib29sIF9pc1doaXRlc3BhY2UoaW50IGNvZGVVbml0KTsKCiAgLy8gQ29uc3RhbnRzIHVzZWQgYnkgcmVwbGFjZUFsbCBlbmNvZGluZyBvZiBzdHJpbmcgc2xpY2VzIGJldHdlZW4gbWF0Y2hlcy4KICAvLyBBIHN0cmluZyBzbGljZSAoc3RhcnQrbGVuZ3RoKSBpcyBlbmNvZGVkIGluIGEgc2luZ2xlIFNtaSB0byBzYXZlIG1lbW9yeQogIC8vIG92ZXJoZWFkIGluIHRoZSBjb21tb24gY2FzZS4KICAvLyBXZSB1c2UgZmV3ZXIgYml0cyBmb3IgbGVuZ3RoICgxMSBiaXRzKSB0aGFuIGZvciB0aGUgc3RhcnQgaW5kZXggKDE5KyBiaXRzKS4KICAvLyBGb3IgbG9uZyBzdHJpbmdzLCBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgbWFueSBsYXJnZSBpbmRpY2VzLAogIC8vIGJ1dCBpdCdzIHVubGlrZWx5IHRvIGhhdmUgbWFueSBsb25nIGxlbmd0aHMgc2luY2Ugc2xpY2VzIGRvbid0IG92ZXJsYXAuCiAgLy8gSWYgdGhlcmUgYXJlIGZldyBtYXRjaGVzIGluIGEgbG9uZyBzdHJpbmcsIHRoZW4gdGhlcmUgYXJlIGZldyBsb25nIHNsaWNlcywKICAvLyBhbmQgaWYgdGhlcmUgYXJlIG1hbnkgbWF0Y2hlcywgdGhlcmUnbGwgbGlrZWx5IGJlIG1hbnkgc2hvcnQgc2xpY2VzLgogIC8vCiAgLy8gRW5jb2RpbmcgaXM6IDAoKHN0YXJ0IDw8IF9sZW5ndGhCaXRzKSB8IGxlbmd0aCkKCiAgLy8gTnVtYmVyIG9mIGJpdHMgdXNlZCBieSBsZW5ndGguCiAgLy8gVGhpcyBpcyB0aGUgc2hpZnQgdXNlZCB0byBlbmNvZGUgYW5kIGRlY29kZSB0aGUgc3RhcnQgaW5kZXguCiAgc3RhdGljIGNvbnN0IGludCBfbGVuZ3RoQml0cyA9IDExOwogIC8vIFRoZSBtYXhpbWFsIGFsbG93ZWQgbGVuZ3RoIHZhbHVlIGluIGFuIGVuY29kZWQgc2xpY2UuCiAgc3RhdGljIGNvbnN0IGludCBfbWF4TGVuZ3RoVmFsdWUgPSAoMSA8PCBfbGVuZ3RoQml0cykgLSAxOwogIC8vIE1hc2sgb2YgbGVuZ3RoIGluIGVuY29kZWQgc21pIHZhbHVlLgogIHN0YXRpYyBjb25zdCBpbnQgX2xlbmd0aE1hc2sgPSBfbWF4TGVuZ3RoVmFsdWU7CiAgc3RhdGljIGNvbnN0IGludCBfc3RhcnRCaXRzID0gX21heFVuc2lnbmVkU21pQml0cyAtIF9sZW5ndGhCaXRzOwogIC8vIE1heGltYWwgYWxsb3dlZCBzdGFydCBpbmRleCB2YWx1ZSBpbiBhbiBlbmNvZGVkIHNsaWNlLgogIHN0YXRpYyBjb25zdCBpbnQgX21heFN0YXJ0VmFsdWUgPSAoMSA8PCBfc3RhcnRCaXRzKSAtIDE7CiAgLy8gV2UgcGljayAzMCBhcyBhIHNhZmUgbG93ZXIgYm91bmQgb24gYXZhaWxhYmxlIGJpdHMgaW4gYSBuZWdhdGl2ZSBzbWkuCiAgLy8gVE9ETyhscm4pOiBDb25zaWRlciBhbGxvd2luZyBtb3JlIGJpdHMgZm9yIHN0YXJ0IG9uIDY0LWJpdCBzeXN0ZW1zLgogIHN0YXRpYyBjb25zdCBpbnQgX21heFVuc2lnbmVkU21pQml0cyA9IDMwOwoKICAvLyBGb3IgbG9uZ2VyIHN0cmluZ3MsIGNhbGxpbmcgaW50byBDKysgdG8gY3JlYXRlIHRoZSByZXN1bHQgb2YgYQogIC8vIFtyZXBsYWNlQWxsXSBpcyBmYXN0ZXIgdGhhbiBbX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdF0uCiAgLy8gVE9ETyhscm4pOiBTZWUgaWYgdGhpcyBsaW1pdCBjYW4gYmUgdHdlYWtlZC4KICBzdGF0aWMgY29uc3QgaW50IF9tYXhKb2luUmVwbGFjZU9uZUJ5dGVTdHJpbmdMZW5ndGggPSA1MDA7CgogIGZhY3RvcnkgX1N0cmluZ0Jhc2UuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIl9TdHJpbmdCYXNlIGNhbid0IGJlIGluc3RhbmlhdGVkIik7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGdldCBoYXNoQ29kZSBuYXRpdmUgIlN0cmluZ19nZXRIYXNoQ29kZSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlIG5hdGl2ZSAiU3RyaW5nX2dldEhhc2hDb2RlIjsKCiAgYm9vbCBnZXQgX2lzT25lQnl0ZSB7CiAgICAvLyBBbHRlcm5hdGl2ZWx5IHJldHVybiBmYWxzZSBhbmQgb3ZlcnJpZGUgaXQgb24gb25lLWJ5dGUgc3RyaW5nIGNsYXNzZXMuCiAgICBpbnQgaWQgPSBDbGFzc0lELmdldElEKHRoaXMpOwogICAgcmV0dXJuIGlkID09IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZyB8fAogICAgICAgIGlkID09IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIHRoZSBtb3N0IGVmZmljaWVudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHNwZWNpZmllZAogICAqIFtjaGFyQ29kZXNdLgogICAqCiAgICogT25seSB1c2VzIHRoZSBjaGFyYWN0ZXIgY29kZXMgYmV0d2VlbiBpbmRleCBbc3RhcnRdIGFuZCBpbmRleCBbZW5kXSBvZgogICAqIGBjaGFyQ29kZXNgLiBUaGV5IG11c3Qgc2F0aXNmeSBgMCA8PSBzdGFydCA8PSBlbmQgPD0gY2hhckNvZGVzLmxlbmd0aGAuCiAgICoKICAgKiBUaGUgW2xpbWl0XSBpcyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgY2hhcmFjdGVyIGNvZGVzIGluIHRoZSBpdGVyYWJsZS4KICAgKiBJdCdzIGBudWxsYCBpZiB1bmtub3duLgogICAqLwogIHN0YXRpYyBTdHJpbmcgY3JlYXRlRnJvbUNoYXJDb2RlcygKICAgICAgSXRlcmFibGU8aW50PiBjaGFyQ29kZXMsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGxpbWl0KSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgic3RhcnQiKTsKICAgIGlmIChjaGFyQ29kZXMgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoY2hhckNvZGVzKTsKICAgIC8vIFRPRE8oc3JkamFuKTogQWxzbyBza2lwIGNvcHlpbmcgb2Ygd2lkZSB0eXBlZCBhcnJheXMuCiAgICBmaW5hbCBjY2lkID0gQ2xhc3NJRC5nZXRJRChjaGFyQ29kZXMpOwogICAgaWYgKChjY2lkICE9IENsYXNzSUQuY2lkQXJyYXkpICYmCiAgICAgICAgKGNjaWQgIT0gQ2xhc3NJRC5jaWRHcm93YWJsZU9iamVjdEFycmF5KSAmJgogICAgICAgIChjY2lkICE9IENsYXNzSUQuY2lkSW1tdXRhYmxlQXJyYXkpKSB7CiAgICAgIGlmIChjaGFyQ29kZXMgaXMgVWludDhMaXN0KSB7CiAgICAgICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgY2hhckNvZGVzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIF9jcmVhdGVPbmVCeXRlU3RyaW5nKGNoYXJDb2Rlcywgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKICAgICAgfSBlbHNlIGlmIChjaGFyQ29kZXMgaXMhIFVpbnQxNkxpc3QpIHsKICAgICAgICByZXR1cm4gX2NyZWF0ZVN0cmluZ0Zyb21JdGVyYWJsZShjaGFyQ29kZXMsIHN0YXJ0LCBlbmQpOwogICAgICB9CiAgICB9CiAgICBpbnQgY29kZUNvdW50ID0gY2hhckNvZGVzLmxlbmd0aDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGNvZGVDb3VudCk7CiAgICBmaW5hbCBsZW4gPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuICIiOwogICAgbGltaXQgPz89IF9zY2FuQ29kZVVuaXRzKGNoYXJDb2Rlcywgc3RhcnQsIGVuZCk7CiAgICBpZiAobGltaXQgPCAwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGNoYXJDb2Rlcyk7CiAgICB9CiAgICBpZiAobGltaXQgPD0gX21heExhdGluMSkgewogICAgICByZXR1cm4gX2NyZWF0ZU9uZUJ5dGVTdHJpbmcoY2hhckNvZGVzLCBzdGFydCwgbGVuKTsKICAgIH0KICAgIGlmIChsaW1pdCA8PSBfbWF4VXRmMTYpIHsKICAgICAgcmV0dXJuIF9Ud29CeXRlU3RyaW5nLl9hbGxvY2F0ZUZyb21Ud29CeXRlTGlzdChjaGFyQ29kZXMsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgLy8gVE9ETyhscm4pOiBDb25zaWRlciBwYXNzaW5nIGxpbWl0IHRvIF9jcmVhdGVGcm9tQ29kZVBvaW50cywgYmVjYXVzZQogICAgLy8gdGhlIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBmdWxseSBnZW5lcmljIGFuZCBkb2Vzbid0IGtub3cgdGhhdCBpdHMKICAgIC8vIGNoYXJDb2RlcyBhcmUgbm90IGFsbCBMYXRpbi0xIG9yIFV0Zi0xNi4KICAgIHJldHVybiBfY3JlYXRlRnJvbUNvZGVQb2ludHMoY2hhckNvZGVzLCBzdGFydCwgZW5kKTsKICB9CgogIHN0YXRpYyBpbnQgX3NjYW5Db2RlVW5pdHMoTGlzdDxpbnQ+IGNoYXJDb2RlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpbnQgYml0cyA9IDA7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBpbnQgY29kZSA9IGNoYXJDb2Rlc1tpXTsKICAgICAgaWYgKGNvZGUgaXMhIF9TbWkpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGNoYXJDb2Rlcyk7CiAgICAgIGJpdHMgfD0gY29kZTsKICAgIH0KICAgIHJldHVybiBiaXRzOwogIH0KCiAgc3RhdGljIFN0cmluZyBfY3JlYXRlU3RyaW5nRnJvbUl0ZXJhYmxlKAogICAgICBJdGVyYWJsZTxpbnQ+IGNoYXJDb2RlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAvLyBUcmVhdCBjaGFyQ29kZXMgYXMgSXRlcmFibGUuCiAgICBpZiAoY2hhckNvZGVzIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIGludCBsZW5ndGggPSBjaGFyQ29kZXMubGVuZ3RoOwogICAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsZW5ndGgpOwogICAgICBmaW5hbCBjaGFyQ29kZUxpc3QgPQogICAgICAgICAgbmV3IExpc3Q8aW50Pi5mcm9tKGNoYXJDb2Rlcy50YWtlKGVuZCkuc2tpcChzdGFydCksIGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIHJldHVybiBjcmVhdGVGcm9tQ2hhckNvZGVzKGNoYXJDb2RlTGlzdCwgMCwgY2hhckNvZGVMaXN0Lmxlbmd0aCwgbnVsbCk7CiAgICB9CiAgICAvLyBEb24ndCBrbm93IGxlbmd0aCBvZiBpdGVyYWJsZSwgc28gaXRlcmF0ZSBhbmQgc2VlIGlmIGFsbCB0aGUgdmFsdWVzCiAgICAvLyBhcmUgdGhlcmUuCiAgICBpZiAoc3RhcnQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgY2hhckNvZGVzLmxlbmd0aCk7CiAgICB2YXIgaXQgPSBjaGFyQ29kZXMuaXRlcmF0b3I7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXJ0OyBpKyspIHsKICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIGkpOwogICAgICB9CiAgICB9CiAgICBMaXN0PGludD4gY2hhckNvZGVMaXN0OwogICAgaW50IGJpdHMgPSAwOyAvLyBCaXR3aXNlLW9yIG9mIGFsbCBjaGFyIGNvZGVzIGluIGxpc3QuCiAgICBpZiAoZW5kID09IG51bGwpIHsKICAgICAgdmFyIGxpc3QgPSA8aW50PltdOwogICAgICB3aGlsZSAoaXQubW92ZU5leHQoKSkgewogICAgICAgIGludCBjb2RlID0gaXQuY3VycmVudDsKICAgICAgICBiaXRzIHw9IGNvZGU7CiAgICAgICAgbGlzdC5hZGQoY29kZSk7CiAgICAgIH0KICAgICAgY2hhckNvZGVMaXN0ID0gbWFrZUxpc3RGaXhlZExlbmd0aDxpbnQ+KGxpc3QpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGVuZCA8IHN0YXJ0KSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZW5kLCBzdGFydCwgY2hhckNvZGVzLmxlbmd0aCk7CiAgICAgIH0KICAgICAgaW50IGxlbiA9IGVuZCAtIHN0YXJ0OwogICAgICBjaGFyQ29kZUxpc3QgPSBuZXcgTGlzdDxpbnQ+KGxlbik7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIHN0YXJ0ICsgaSk7CiAgICAgICAgfQogICAgICAgIGludCBjb2RlID0gaXQuY3VycmVudDsKICAgICAgICBiaXRzIHw9IGNvZGU7CiAgICAgICAgY2hhckNvZGVMaXN0W2ldID0gY29kZTsKICAgICAgfQogICAgfQogICAgaW50IGxlbmd0aCA9IGNoYXJDb2RlTGlzdC5sZW5ndGg7CiAgICBpZiAoYml0cyA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoY2hhckNvZGVzKTsKICAgIH0KICAgIGJvb2wgaXNPbmVCeXRlU3RyaW5nID0gKGJpdHMgPD0gX21heExhdGluMSk7CiAgICBpZiAoaXNPbmVCeXRlU3RyaW5nKSB7CiAgICAgIHJldHVybiBfY3JlYXRlT25lQnl0ZVN0cmluZyhjaGFyQ29kZUxpc3QsIDAsIGxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gY3JlYXRlRnJvbUNoYXJDb2RlcyhjaGFyQ29kZUxpc3QsIDAsIGxlbmd0aCwgYml0cyk7CiAgfQoKICAvLyBJbmxpbmluZyBpcyBkaXNhYmxlZCBhcyBhIHdvcmthcm91bmQgdG8gaHR0cDovL2RhcnRidWcuY29tLzM3ODAwLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIFN0cmluZyBfY3JlYXRlT25lQnl0ZVN0cmluZyhMaXN0PGludD4gY2hhckNvZGVzLCBpbnQgc3RhcnQsIGludCBsZW4pIHsKICAgIC8vIEl0J3MgYWx3YXlzIGZhc3RlciB0byBkbyB0aGlzIGluIERhcnQgdGhhbiB0byBjYWxsIGludG8gdGhlIHJ1bnRpbWUuCiAgICB2YXIgcyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW4pOwoKICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgX1VpbnQ4QXJyYXlWaWV3LgogICAgaWYgKGNoYXJDb2RlcyBpcyBVaW50OExpc3QpIHsKICAgICAgaWYgKHN0YXJ0ID49IDAgJiYgbGVuID49IDApIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICBzLl9zZXRBdChpLCBjaGFyQ29kZXNbc3RhcnQgKyBpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzOwogICAgICB9CiAgICB9CgogICAgLy8gRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBjYXNlLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBzLl9zZXRBdChpLCBjaGFyQ29kZXNbc3RhcnQgKyBpXSk7CiAgICB9CiAgICByZXR1cm4gczsKICB9CgogIHN0YXRpYyBTdHJpbmcgX2NyZWF0ZUZyb21Db2RlUG9pbnRzKExpc3Q8aW50PiBjb2RlUG9pbnRzLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgIG5hdGl2ZSAiU3RyaW5nQmFzZV9jcmVhdGVGcm9tQ29kZVBvaW50cyI7CgogIFN0cmluZyBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiU3RyaW5nX2NoYXJBdCI7CgogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCk7IC8vIEltcGxlbWVudGVkIGluIHRoZSBzdWJjbGFzc2VzLgoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBsZW5ndGggbmF0aXZlICJTdHJpbmdfZ2V0TGVuZ3RoIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIHRoaXMubGVuZ3RoID09IDA7CiAgfQoKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBTdHJpbmcgb3BlcmF0b3IgKyhTdHJpbmcgb3RoZXIpIG5hdGl2ZSAiU3RyaW5nX2NvbmNhdCI7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChvdGhlciBpcyBTdHJpbmcgJiYgdGhpcy5sZW5ndGggPT0gb3RoZXIubGVuZ3RoKSB7CiAgICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgaWYgKHRoaXMuY29kZVVuaXRBdChpKSAhPSBvdGhlci5jb2RlVW5pdEF0KGkpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaW50IGNvbXBhcmVUbyhTdHJpbmcgb3RoZXIpIHsKICAgIGludCB0aGlzTGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgb3RoZXJMZW5ndGggPSBvdGhlci5sZW5ndGg7CiAgICBpbnQgbGVuID0gKHRoaXNMZW5ndGggPCBvdGhlckxlbmd0aCkgPyB0aGlzTGVuZ3RoIDogb3RoZXJMZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGludCB0aGlzQ29kZVVuaXQgPSB0aGlzLmNvZGVVbml0QXQoaSk7CiAgICAgIGludCBvdGhlckNvZGVVbml0ID0gb3RoZXIuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKHRoaXNDb2RlVW5pdCA8IG90aGVyQ29kZVVuaXQpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgaWYgKHRoaXNDb2RlVW5pdCA+IG90aGVyQ29kZVVuaXQpIHsKICAgICAgICByZXR1cm4gMTsKICAgICAgfQogICAgfQogICAgaWYgKHRoaXNMZW5ndGggPCBvdGhlckxlbmd0aCkgcmV0dXJuIC0xOwogICAgaWYgKHRoaXNMZW5ndGggPiBvdGhlckxlbmd0aCkgcmV0dXJuIDE7CiAgICByZXR1cm4gMDsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIF9zdWJzdHJpbmdNYXRjaGVzKGludCBzdGFydCwgU3RyaW5nIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNFbXB0eSkgcmV0dXJuIHRydWU7CiAgICBmaW5hbCBsZW4gPSBvdGhlci5sZW5ndGg7CiAgICBpZiAoKHN0YXJ0IDwgMCkgfHwgKHN0YXJ0ICsgbGVuID4gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgaWYgKHRoaXMuY29kZVVuaXRBdChpICsgc3RhcnQpICE9IG90aGVyLmNvZGVVbml0QXQoaSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBlbmRzV2l0aChTdHJpbmcgb3RoZXIpIHsKICAgIHJldHVybiBfc3Vic3RyaW5nTWF0Y2hlcyh0aGlzLmxlbmd0aCAtIG90aGVyLmxlbmd0aCwgb3RoZXIpOwogIH0KCiAgYm9vbCBzdGFydHNXaXRoKFBhdHRlcm4gcGF0dGVybiwgW2ludCBpbmRleCA9IDBdKSB7CiAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID4gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBpZiAocGF0dGVybiBpcyBTdHJpbmcpIHsKICAgICAgcmV0dXJuIF9zdWJzdHJpbmdNYXRjaGVzKGluZGV4LCBwYXR0ZXJuKTsKICAgIH0KICAgIHJldHVybiBwYXR0ZXJuLm1hdGNoQXNQcmVmaXgodGhpcywgaW5kZXgpICE9IG51bGw7CiAgfQoKICBpbnQgaW5kZXhPZihQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKChzdGFydCA8IDApIHx8IChzdGFydCA+IHRoaXMubGVuZ3RoKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgdGhpcy5sZW5ndGgsICJzdGFydCIpOwogICAgfQogICAgaWYgKHBhdHRlcm4gaXMgU3RyaW5nKSB7CiAgICAgIFN0cmluZyBvdGhlciA9IHBhdHRlcm47CiAgICAgIGludCBtYXhJbmRleCA9IHRoaXMubGVuZ3RoIC0gb3RoZXIubGVuZ3RoOwogICAgICAvLyBUT0RPOiBVc2UgYW4gZWZmaWNpZW50IHN0cmluZyBzZWFyY2ggKGUuZy4gQk1IKS4KICAgICAgZm9yIChpbnQgaW5kZXggPSBzdGFydDsgaW5kZXggPD0gbWF4SW5kZXg7IGluZGV4KyspIHsKICAgICAgICBpZiAoX3N1YnN0cmluZ01hdGNoZXMoaW5kZXgsIG90aGVyKSkgewogICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPD0gdGhpcy5sZW5ndGg7IGkrKykgewogICAgICAvLyBUT0RPKDExMjc2KTsgVGhpcyBoYXMgcXVhZHJhdGljIGJlaGF2aW9yIGJlY2F1c2UgbWF0Y2hBc1ByZWZpeCB0cmllcwogICAgICAvLyB0byBmaW5kIGEgbGF0ZXIgbWF0Y2ggdG9vLiBPcHRpbWl6ZSBtYXRjaEFzUHJlZml4IHRvIGF2b2lkIHRoaXMuCiAgICAgIGlmIChwYXR0ZXJuLm1hdGNoQXNQcmVmaXgodGhpcywgaSkgIT0gbnVsbCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4T2YoUGF0dGVybiBwYXR0ZXJuLCBbaW50IHN0YXJ0ID0gbnVsbF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsKSB7CiAgICAgIHN0YXJ0ID0gdGhpcy5sZW5ndGg7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBpZiAocGF0dGVybiBpcyBTdHJpbmcpIHsKICAgICAgU3RyaW5nIG90aGVyID0gcGF0dGVybjsKICAgICAgaW50IG1heEluZGV4ID0gdGhpcy5sZW5ndGggLSBvdGhlci5sZW5ndGg7CiAgICAgIGlmIChtYXhJbmRleCA8IHN0YXJ0KSBzdGFydCA9IG1heEluZGV4OwogICAgICBmb3IgKGludCBpbmRleCA9IHN0YXJ0OyBpbmRleCA+PSAwOyBpbmRleC0tKSB7CiAgICAgICAgaWYgKF9zdWJzdHJpbmdNYXRjaGVzKGluZGV4LCBvdGhlcikpIHsKICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICAvLyBUT0RPKDExMjc2KTsgVGhpcyBoYXMgcXVhZHJhdGljIGJlaGF2aW9yIGJlY2F1c2UgbWF0Y2hBc1ByZWZpeCB0cmllcwogICAgICAvLyB0byBmaW5kIGEgbGF0ZXIgbWF0Y2ggdG9vLiBPcHRpbWl6ZSBtYXRjaEFzUHJlZml4IHRvIGF2b2lkIHRoaXMuCiAgICAgIGlmIChwYXR0ZXJuLm1hdGNoQXNQcmVmaXgodGhpcywgaSkgIT0gbnVsbCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBTdHJpbmcgc3Vic3RyaW5nKGludCBzdGFydEluZGV4LCBbaW50IGVuZEluZGV4XSkgewogICAgZW5kSW5kZXggPz89IHRoaXMubGVuZ3RoOwoKICAgIGlmICgoc3RhcnRJbmRleCA8IDApIHx8IChzdGFydEluZGV4ID4gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKHN0YXJ0SW5kZXgpOwogICAgfQogICAgaWYgKChlbmRJbmRleCA8IDApIHx8IChlbmRJbmRleCA+IHRoaXMubGVuZ3RoKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShlbmRJbmRleCk7CiAgICB9CiAgICBpZiAoc3RhcnRJbmRleCA+IGVuZEluZGV4KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKHN0YXJ0SW5kZXgpOwogICAgfQogICAgcmV0dXJuIF9zdWJzdHJpbmdVbmNoZWNrZWQoc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogIH0KCiAgU3RyaW5nIF9zdWJzdHJpbmdVbmNoZWNrZWQoaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkgewogICAgYXNzZXJ0KGVuZEluZGV4ICE9IG51bGwpOwogICAgYXNzZXJ0KChzdGFydEluZGV4ID49IDApICYmIChzdGFydEluZGV4IDw9IHRoaXMubGVuZ3RoKSk7CiAgICBhc3NlcnQoKGVuZEluZGV4ID49IDApICYmIChlbmRJbmRleCA8PSB0aGlzLmxlbmd0aCkpOwogICAgYXNzZXJ0KHN0YXJ0SW5kZXggPD0gZW5kSW5kZXgpOwoKICAgIGlmIChzdGFydEluZGV4ID09IGVuZEluZGV4KSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGlmICgoc3RhcnRJbmRleCA9PSAwKSAmJiAoZW5kSW5kZXggPT0gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgaWYgKChzdGFydEluZGV4ICsgMSkgPT0gZW5kSW5kZXgpIHsKICAgICAgcmV0dXJuIHRoaXNbc3RhcnRJbmRleF07CiAgICB9CiAgICByZXR1cm4gX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZShzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgfQoKICBTdHJpbmcgX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZShpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KQogICAgICBuYXRpdmUgIlN0cmluZ0Jhc2Vfc3Vic3RyaW5nVW5jaGVja2VkIjsKCiAgLy8gQ2hlY2tzIGZvciBvbmUtYnl0ZSB3aGl0ZXNwYWNlcyBvbmx5LgogIHN0YXRpYyBib29sIF9pc09uZUJ5dGVXaGl0ZXNwYWNlKGludCBjb2RlVW5pdCkgewogICAgaWYgKGNvZGVVbml0IDw9IDMyKSB7CiAgICAgIHJldHVybiAoKGNvZGVVbml0ID09IDMyKSB8fCAvLyBTcGFjZS4KICAgICAgICAgICgoY29kZVVuaXQgPD0gMTMpICYmIChjb2RlVW5pdCA+PSA5KSkpOyAvLyBDUiwgTEYsIFRBQiwgZXRjLgogICAgfQogICAgcmV0dXJuIChjb2RlVW5pdCA9PSAweDg1KSB8fCAoY29kZVVuaXQgPT0gMHhBMCk7IC8vIE5FTCwgTkJTUC4KICB9CgogIC8vIENoYXJhY3RlcnMgd2l0aCBXaGl0ZXNwYWNlIHByb3BlcnR5IChVbmljb2RlIDYuMykuCiAgLy8gMDAwOS4uMDAwRCAgICA7IFdoaXRlX1NwYWNlICMgQ2MgICAgICAgPGNvbnRyb2wtMDAwOT4uLjxjb250cm9sLTAwMEQ+CiAgLy8gMDAyMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgU1BBQ0UKICAvLyAwMDg1ICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBDYyAgICAgICA8Y29udHJvbC0wMDg1PgogIC8vIDAwQTAgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgICAgIE5PLUJSRUFLIFNQQUNFCiAgLy8gMTY4MCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgT0dIQU0gU1BBQ0UgTUFSSwogIC8vIDIwMDAuLjIwMEEgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgICAgIEVOIFFVQUQuLkhBSVIgU1BBQ0UKICAvLyAyMDI4ICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBabCAgICAgICBMSU5FIFNFUEFSQVRPUgogIC8vIDIwMjkgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpwICAgICAgIFBBUkFHUkFQSCBTRVBBUkFUT1IKICAvLyAyMDJGICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgICAgICBOQVJST1cgTk8tQlJFQUsgU1BBQ0UKICAvLyAyMDVGICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgICAgICBNRURJVU0gTUFUSEVNQVRJQ0FMIFNQQUNFCiAgLy8gMzAwMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgSURFT0dSQVBISUMgU1BBQ0UKICAvLwogIC8vIEJPTTogMHhGRUZGCiAgc3RhdGljIGJvb2wgX2lzVHdvQnl0ZVdoaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICBpZiAoY29kZVVuaXQgPD0gMzIpIHsKICAgICAgcmV0dXJuIChjb2RlVW5pdCA9PSAzMikgfHwgKChjb2RlVW5pdCA8PSAxMykgJiYgKGNvZGVVbml0ID49IDkpKTsKICAgIH0KICAgIGlmIChjb2RlVW5pdCA8IDB4ODUpIHJldHVybiBmYWxzZTsKICAgIGlmICgoY29kZVVuaXQgPT0gMHg4NSkgfHwgKGNvZGVVbml0ID09IDB4QTApKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiAoY29kZVVuaXQgPD0gMHgyMDBBKQogICAgICAgID8gKChjb2RlVW5pdCA9PSAweDE2ODApIHx8ICgweDIwMDAgPD0gY29kZVVuaXQpKQogICAgICAgIDogKChjb2RlVW5pdCA9PSAweDIwMjgpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDIwMjkpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDIwMkYpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDIwNUYpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDMwMDApIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweEZFRkYpKTsKICB9CgogIGludCBfZmlyc3ROb25XaGl0ZXNwYWNlKCkgewogICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgZmlyc3QgPSAwOwogICAgZm9yICg7IGZpcnN0IDwgbGVuOyBmaXJzdCsrKSB7CiAgICAgIGlmICghX2lzV2hpdGVzcGFjZSh0aGlzLmNvZGVVbml0QXQoZmlyc3QpKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmlyc3Q7CiAgfQoKICBpbnQgX2xhc3ROb25XaGl0ZXNwYWNlKCkgewogICAgaW50IGxhc3QgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKDsgbGFzdCA+PSAwOyBsYXN0LS0pIHsKICAgICAgaWYgKCFfaXNXaGl0ZXNwYWNlKHRoaXMuY29kZVVuaXRBdChsYXN0KSkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGxhc3Q7CiAgfQoKICBTdHJpbmcgdHJpbSgpIHsKICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaW50IGZpcnN0ID0gX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpOwogICAgaWYgKGxlbiA9PSBmaXJzdCkgewogICAgICAvLyBTdHJpbmcgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuICIiOwogICAgfQogICAgaW50IGxhc3QgPSBfbGFzdE5vbldoaXRlc3BhY2UoKSArIDE7CiAgICBpZiAoKGZpcnN0ID09IDApICYmIChsYXN0ID09IGxlbikpIHsKICAgICAgLy8gUmV0dXJucyB0aGlzIHN0cmluZyBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGxlYWRpbmcgb3IgdHJhaWxpbmcKICAgICAgLy8gd2hpdGVzcGFjZXMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgcmV0dXJuIF9zdWJzdHJpbmdVbmNoZWNrZWQoZmlyc3QsIGxhc3QpOwogIH0KCiAgU3RyaW5nIHRyaW1MZWZ0KCkgewogICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgZmlyc3QgPSAwOwogICAgZm9yICg7IGZpcnN0IDwgbGVuOyBmaXJzdCsrKSB7CiAgICAgIGlmICghX2lzV2hpdGVzcGFjZSh0aGlzLmNvZGVVbml0QXQoZmlyc3QpKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAobGVuID09IGZpcnN0KSB7CiAgICAgIC8vIFN0cmluZyBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VzLgogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBpZiAoZmlyc3QgPT0gMCkgewogICAgICAvLyBSZXR1cm5zIHRoaXMgc3RyaW5nIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgbGVhZGluZyBvciB0cmFpbGluZwogICAgICAvLyB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICByZXR1cm4gX3N1YnN0cmluZ1VuY2hlY2tlZChmaXJzdCwgbGVuKTsKICB9CgogIFN0cmluZyB0cmltUmlnaHQoKSB7CiAgICBmaW5hbCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGludCBsYXN0ID0gbGVuIC0gMTsKICAgIGZvciAoOyBsYXN0ID49IDA7IGxhc3QtLSkgewogICAgICBpZiAoIV9pc1doaXRlc3BhY2UodGhpcy5jb2RlVW5pdEF0KGxhc3QpKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAobGFzdCA9PSAtMSkgewogICAgICAvLyBTdHJpbmcgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuICIiOwogICAgfQogICAgaWYgKGxhc3QgPT0gKGxlbiAtIDEpKSB7CiAgICAgIC8vIFJldHVybnMgdGhpcyBzdHJpbmcgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICByZXR1cm4gX3N1YnN0cmluZ1VuY2hlY2tlZCgwLCBsYXN0ICsgMSk7CiAgfQoKICBTdHJpbmcgb3BlcmF0b3IgKihpbnQgdGltZXMpIHsKICAgIGlmICh0aW1lcyA8PSAwKSByZXR1cm4gIiI7CiAgICBpZiAodGltZXMgPT0gMSkgcmV0dXJuIHRoaXM7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcih0aGlzKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdGltZXM7IGkrKykgewogICAgICBidWZmZXIud3JpdGUodGhpcyk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBTdHJpbmcgcGFkTGVmdChpbnQgd2lkdGgsIFtTdHJpbmcgcGFkZGluZyA9ICcgJ10pIHsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gdGhpcy5sZW5ndGg7CiAgICBpZiAoZGVsdGEgPD0gMCkgcmV0dXJuIHRoaXM7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgIGJ1ZmZlci53cml0ZShwYWRkaW5nKTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZSh0aGlzKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIFN0cmluZyBwYWRSaWdodChpbnQgd2lkdGgsIFtTdHJpbmcgcGFkZGluZyA9ICcgJ10pIHsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gdGhpcy5sZW5ndGg7CiAgICBpZiAoZGVsdGEgPD0gMCkgcmV0dXJuIHRoaXM7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcih0aGlzKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsdGE7IGkrKykgewogICAgICBidWZmZXIud3JpdGUocGFkZGluZyk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGNvbnRhaW5zKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydEluZGV4ID0gMF0pIHsKICAgIGlmIChwYXR0ZXJuIGlzIFN0cmluZykgewogICAgICBpZiAoc3RhcnRJbmRleCA8IDAgfHwgc3RhcnRJbmRleCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnRJbmRleCwgMCwgdGhpcy5sZW5ndGgpOwogICAgICB9CiAgICAgIHJldHVybiBpbmRleE9mKHBhdHRlcm4sIHN0YXJ0SW5kZXgpID49IDA7CiAgICB9CiAgICByZXR1cm4gcGF0dGVybi5hbGxNYXRjaGVzKHRoaXMuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpKS5pc05vdEVtcHR5OwogIH0KCiAgU3RyaW5nIHJlcGxhY2VGaXJzdChQYXR0ZXJuIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlbWVudCwKICAgICAgW2ludCBzdGFydEluZGV4ID0gMF0pIHsKICAgIGlmIChwYXR0ZXJuIGlzISBQYXR0ZXJuKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCIke3BhdHRlcm59IGlzIG5vdCBhIFBhdHRlcm4iKTsKICAgIH0KICAgIGlmIChyZXBsYWNlbWVudCBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCIke3JlcGxhY2VtZW50fSBpcyBub3QgYSBTdHJpbmciKTsKICAgIH0KICAgIGlmIChzdGFydEluZGV4IGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIiR7c3RhcnRJbmRleH0gaXMgbm90IGFuIGludCIpOwogICAgfQogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChzdGFydEluZGV4LCAwLCB0aGlzLmxlbmd0aCwgInN0YXJ0SW5kZXgiKTsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc3RhcnRJbmRleCA9PSAwCiAgICAgICAgPyBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcykuaXRlcmF0b3IKICAgICAgICA6IHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzLCBzdGFydEluZGV4KS5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIHRoaXM7CiAgICBNYXRjaCBtYXRjaCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICByZXR1cm4gcmVwbGFjZVJhbmdlKG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQsIHJlcGxhY2VtZW50KTsKICB9CgogIFN0cmluZyByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CiAgICBib29sIHJlcGxhY2VtZW50SXNPbmVCeXRlID0gcmVwbGFjZW1lbnQuX2lzT25lQnl0ZTsKICAgIGlmIChzdGFydCA9PSAwICYmIGVuZCA9PSBsZW5ndGgpIHJldHVybiByZXBsYWNlbWVudDsKICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IHJlcGxhY2VtZW50Lmxlbmd0aDsKICAgIGludCB0b3RhbExlbmd0aCA9IHN0YXJ0ICsgKGxlbmd0aCAtIGVuZCkgKyByZXBsYWNlbWVudExlbmd0aDsKICAgIGlmIChyZXBsYWNlbWVudElzT25lQnl0ZSAmJiB0aGlzLl9pc09uZUJ5dGUpIHsKICAgICAgdmFyIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSh0b3RhbExlbmd0aCk7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIGluZGV4ID0gcmVzdWx0Ll9zZXRSYW5nZShpbmRleCwgdGhpcywgMCwgc3RhcnQpOwogICAgICBpbmRleCA9IHJlc3VsdC5fc2V0UmFuZ2Uoc3RhcnQsIHJlcGxhY2VtZW50LCAwLCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgIHJlc3VsdC5fc2V0UmFuZ2UoaW5kZXgsIHRoaXMsIGVuZCwgbGVuZ3RoKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIExpc3Qgc2xpY2VzID0gW107CiAgICBfYWRkUmVwbGFjZVNsaWNlKHNsaWNlcywgMCwgc3RhcnQpOwogICAgaWYgKHJlcGxhY2VtZW50Lmxlbmd0aCA+IDApIHNsaWNlcy5hZGQocmVwbGFjZW1lbnQpOwogICAgX2FkZFJlcGxhY2VTbGljZShzbGljZXMsIGVuZCwgbGVuZ3RoKTsKICAgIHJldHVybiBfam9pblJlcGxhY2VBbGxSZXN1bHQoCiAgICAgICAgdGhpcywgc2xpY2VzLCB0b3RhbExlbmd0aCwgcmVwbGFjZW1lbnRJc09uZUJ5dGUpOwogIH0KCiAgc3RhdGljIGludCBfYWRkUmVwbGFjZVNsaWNlKExpc3QgbWF0Y2hlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICBpZiAobGVuZ3RoIDw9IF9tYXhMZW5ndGhWYWx1ZSAmJiBzdGFydCA8PSBfbWF4U3RhcnRWYWx1ZSkgewogICAgICAgIG1hdGNoZXMuYWRkKC0oKHN0YXJ0IDw8IF9sZW5ndGhCaXRzKSB8IGxlbmd0aCkpOwogICAgICB9IGVsc2UgewogICAgICAgIG1hdGNoZXMuYWRkKHN0YXJ0KTsKICAgICAgICBtYXRjaGVzLmFkZChlbmQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KCiAgU3RyaW5nIHJlcGxhY2VBbGwoUGF0dGVybiBwYXR0ZXJuLCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKICAgIGlmIChwYXR0ZXJuID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInBhdHRlcm4iKTsKICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJyZXBsYWNlbWVudCIpOwoKICAgIGludCBzdGFydEluZGV4ID0gMDsKICAgIC8vIFN0cmluZyBmcmFnbWVudHMgdGhhdCByZXBsYWNlIHRoZSB0aGUgcHJlZml4IFt0aGlzXSB1cCB0byBbc3RhcnRJbmRleF0uCiAgICBMaXN0IG1hdGNoZXMgPSBbXTsKICAgIGludCBsZW5ndGggPSAwOyAvLyBMZW5ndGggb2YgYWxsIGZyYWdtZW50cy4KICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IHJlcGxhY2VtZW50Lmxlbmd0aDsKCiAgICBpZiAocmVwbGFjZW1lbnRMZW5ndGggPT0gMCkgewogICAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIG1hdGNoLnN0YXJ0KTsKICAgICAgICBzdGFydEluZGV4ID0gbWF0Y2guZW5kOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIG1hdGNoLnN0YXJ0KTsKICAgICAgICBtYXRjaGVzLmFkZChyZXBsYWNlbWVudCk7CiAgICAgICAgbGVuZ3RoICs9IHJlcGxhY2VtZW50TGVuZ3RoOwogICAgICAgIHN0YXJ0SW5kZXggPSBtYXRjaC5lbmQ7CiAgICAgIH0KICAgIH0KICAgIC8vIE5vIG1hdGNoLCBvciBhIHplcm8tbGVuZ3RoIG1hdGNoIGF0IHN0YXJ0IHdpdGggemVyby1sZW5ndGggcmVwbGFjZW1lbnQuCiAgICBpZiAoc3RhcnRJbmRleCA9PSAwICYmIGxlbmd0aCA9PSAwKSByZXR1cm4gdGhpczsKICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIHRoaXMubGVuZ3RoKTsKICAgIGJvb2wgcmVwbGFjZW1lbnRJc09uZUJ5dGUgPSByZXBsYWNlbWVudC5faXNPbmVCeXRlOwogICAgaWYgKHJlcGxhY2VtZW50SXNPbmVCeXRlICYmCiAgICAgICAgbGVuZ3RoIDwgX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aCAmJgogICAgICAgIHRoaXMuX2lzT25lQnl0ZSkgewogICAgICAvLyBUT0RPKGxybik6IElzIHRoZXJlIGEgY3V0LW9mZiBwb2ludCwgb3IgaXMgcnVudGltZSBhbHdheXMgZmFzdGVyPwogICAgICByZXR1cm4gX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdCh0aGlzLCBtYXRjaGVzLCBsZW5ndGgpOwogICAgfQogICAgcmV0dXJuIF9qb2luUmVwbGFjZUFsbFJlc3VsdCh0aGlzLCBtYXRjaGVzLCBsZW5ndGgsIHJlcGxhY2VtZW50SXNPbmVCeXRlKTsKICB9CgogIC8qKgogICAqIEFzIFtfam9pblJlcGxhY2VBbGxSZXN1bHRdLCBidXQga25vd2luZyB0aGF0IHRoZSByZXN1bHQKICAgKiBpcyBhbHdheXMgYSBbX09uZUJ5dGVTdHJpbmddLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdCgKICAgICAgU3RyaW5nIGJhc2UsIExpc3QgbWF0Y2hlcywgaW50IGxlbmd0aCkgewogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKGxlbmd0aCk7CiAgICBpbnQgd3JpdGVJbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gbWF0Y2hlc1tpXTsKICAgICAgaWYgKGVudHJ5IGlzIF9TbWkpIHsKICAgICAgICBpbnQgc2xpY2VTdGFydCA9IGVudHJ5OwogICAgICAgIGludCBzbGljZUVuZDsKICAgICAgICBpZiAoc2xpY2VTdGFydCA8IDApIHsKICAgICAgICAgIGludCBiaXRzID0gLXNsaWNlU3RhcnQ7CiAgICAgICAgICBpbnQgc2xpY2VMZW5ndGggPSBiaXRzICYgX2xlbmd0aE1hc2s7CiAgICAgICAgICBzbGljZVN0YXJ0ID0gYml0cyA+PiBfbGVuZ3RoQml0czsKICAgICAgICAgIHNsaWNlRW5kID0gc2xpY2VTdGFydCArIHNsaWNlTGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpKys7CiAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIHZhbGlkIG1hdGNoZXMgbGlzdHMuCiAgICAgICAgICAvLyBJZiB0aGUgbGlzdCBpcyBzaG9ydCwgb3Igc2xpY2VFbmQgaXMgbm90IGFuIGludGVnZXIsIG9uZSBvZgogICAgICAgICAgLy8gdGhlIG5leHQgZmV3IGxpbmVzIHdpbGwgdGhyb3cgYW55d2F5LgogICAgICAgICAgYXNzZXJ0KGkgPCBtYXRjaGVzLmxlbmd0aCk7CiAgICAgICAgICBzbGljZUVuZCA9IG1hdGNoZXNbaV07CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGogPSBzbGljZVN0YXJ0OyBqIDwgc2xpY2VFbmQ7IGorKykgewogICAgICAgICAgcmVzdWx0Ll9zZXRBdCh3cml0ZUluZGV4KyssIGJhc2UuY29kZVVuaXRBdChqKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIFJlcGxhY2VtZW50IGlzIGEgb25lLWJ5dGUgc3RyaW5nLgogICAgICAgIFN0cmluZyByZXBsYWNlbWVudCA9IGVudHJ5OwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVwbGFjZW1lbnQubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHJlc3VsdC5fc2V0QXQod3JpdGVJbmRleCsrLCByZXBsYWNlbWVudC5jb2RlVW5pdEF0KGopKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzc2VydCh3cml0ZUluZGV4ID09IGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ29tYmluZSB0aGUgcmVzdWx0cyBvZiBhIFtyZXBsYWNlQWxsXSBtYXRjaCBpbnRvIGEgbmV3IHN0cmluZy4KICAgKgogICAqIFRoZSBbbWF0Y2hlc10gbGlzdHMgY29udGFpbnMgU21pIGluZGV4IHBhaXJzIHJlcHJlc2VudGluZyBzbGljZXMgb2YKICAgKiBbYmFzZV0gYW5kIFtTdHJpbmddcyB0byBiZSBwdXQgaW4gYmV0d2VlbiB0aGUgc2xpY2VzLgogICAqCiAgICogVGhlIHRvdGFsIFtsZW5ndGhdIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIGtub3duLCBhcyBpcwogICAqIHdoZXRoZXIgdGhlIHJlcGxhY2VtZW50IHN0cmluZ3MgYXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICogSWYgdGhleSBhcmUsIHRoZW4gd2UgaGF2ZSB0byBjaGVjayB0aGUgYmFzZSBzdHJpbmcgc2xpY2VzIHRvIGtub3cKICAgKiB3aGV0aGVyIHRoZSByZXN1bHQgbXVzdCBiZSBhIG9uZS1ieXRlIHN0cmluZy4KICAgKi8KICBzdGF0aWMgU3RyaW5nCiAgICAgIF9qb2luUmVwbGFjZUFsbFJlc3VsdChTdHJpbmcgYmFzZSwgTGlzdCBtYXRjaGVzLCBpbnQgbGVuZ3RoLAogICAgICAgICAgYm9vbCByZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlKQogICAgICBuYXRpdmUgIlN0cmluZ0Jhc2Vfam9pblJlcGxhY2VBbGxSZXN1bHQiOwoKICBTdHJpbmcgcmVwbGFjZUFsbE1hcHBlZChQYXR0ZXJuIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlKE1hdGNoIG1hdGNoKSkgewogICAgaWYgKHBhdHRlcm4gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgicGF0dGVybiIpOwogICAgaWYgKHJlcGxhY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgicmVwbGFjZSIpOwogICAgTGlzdCBtYXRjaGVzID0gW107CiAgICBpbnQgbGVuZ3RoID0gMDsKICAgIGludCBzdGFydEluZGV4ID0gMDsKICAgIGJvb2wgcmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZSA9IHRydWU7CiAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICBsZW5ndGggKz0gX2FkZFJlcGxhY2VTbGljZShtYXRjaGVzLCBzdGFydEluZGV4LCBtYXRjaC5zdGFydCk7CiAgICAgIHZhciByZXBsYWNlbWVudCA9ICIke3JlcGxhY2UobWF0Y2gpfSI7CiAgICAgIG1hdGNoZXMuYWRkKHJlcGxhY2VtZW50KTsKICAgICAgbGVuZ3RoICs9IHJlcGxhY2VtZW50Lmxlbmd0aDsKICAgICAgcmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZSA9CiAgICAgICAgICByZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlICYmIHJlcGxhY2VtZW50Ll9pc09uZUJ5dGU7CiAgICAgIHN0YXJ0SW5kZXggPSBtYXRjaC5lbmQ7CiAgICB9CiAgICBpZiAobWF0Y2hlcy5pc0VtcHR5KSByZXR1cm4gdGhpczsKICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIHRoaXMubGVuZ3RoKTsKICAgIGlmIChyZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlICYmCiAgICAgICAgbGVuZ3RoIDwgX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aCAmJgogICAgICAgIHRoaXMuX2lzT25lQnl0ZSkgewogICAgICByZXR1cm4gX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdCh0aGlzLCBtYXRjaGVzLCBsZW5ndGgpOwogICAgfQogICAgcmV0dXJuIF9qb2luUmVwbGFjZUFsbFJlc3VsdCgKICAgICAgICB0aGlzLCBtYXRjaGVzLCBsZW5ndGgsIHJlcGxhY2VtZW50U3RyaW5nc0FyZU9uZUJ5dGUpOwogIH0KCiAgU3RyaW5nIHJlcGxhY2VGaXJzdE1hcHBlZChQYXR0ZXJuIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlKE1hdGNoIG1hdGNoKSwKICAgICAgW2ludCBzdGFydEluZGV4ID0gMF0pIHsKICAgIGlmIChwYXR0ZXJuID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInBhdHRlcm4iKTsKICAgIGlmIChyZXBsYWNlID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInJlcGxhY2UiKTsKICAgIGlmIChzdGFydEluZGV4ID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInN0YXJ0SW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoc3RhcnRJbmRleCwgMCwgdGhpcy5sZW5ndGgsICJzdGFydEluZGV4Iik7CgogICAgdmFyIG1hdGNoZXMgPSBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcywgc3RhcnRJbmRleCkuaXRlcmF0b3I7CiAgICBpZiAoIW1hdGNoZXMubW92ZU5leHQoKSkgcmV0dXJuIHRoaXM7CiAgICB2YXIgbWF0Y2ggPSBtYXRjaGVzLmN1cnJlbnQ7CiAgICB2YXIgcmVwbGFjZW1lbnQgPSAiJHtyZXBsYWNlKG1hdGNoKX0iOwogICAgcmV0dXJuIHJlcGxhY2VSYW5nZShtYXRjaC5zdGFydCwgbWF0Y2guZW5kLCByZXBsYWNlbWVudCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9tYXRjaFN0cmluZyhNYXRjaCBtYXRjaCkgPT4gbWF0Y2hbMF07CiAgc3RhdGljIFN0cmluZyBfc3RyaW5nSWRlbnRpdHkoU3RyaW5nIHN0cmluZykgPT4gc3RyaW5nOwoKICBTdHJpbmcgX3NwbGl0TWFwSm9pbkVtcHR5U3RyaW5nKAogICAgICBTdHJpbmcgb25NYXRjaChNYXRjaCBtYXRjaCksIFN0cmluZyBvbk5vbk1hdGNoKFN0cmluZyBub25NYXRjaCkpIHsKICAgIC8vIFBhdHRlcm4gaXMgdGhlIGVtcHR5IHN0cmluZy4KICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgaSA9IDA7CiAgICBidWZmZXIud3JpdGUob25Ob25NYXRjaCgiIikpOwogICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAgYnVmZmVyLndyaXRlKG9uTWF0Y2gobmV3IF9TdHJpbmdNYXRjaChpLCB0aGlzLCAiIikpKTsKICAgICAgLy8gU3BlY2lhbCBjYXNlIHRvIGF2b2lkIHNwbGl0dGluZyBhIHN1cnJvZ2F0ZSBwYWlyLgogICAgICBpbnQgY29kZSA9IHRoaXMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKChjb2RlICYgfjB4M0ZGKSA9PSAweEQ4MDAgJiYgbGVuZ3RoID4gaSArIDEpIHsKICAgICAgICAvLyBMZWFkaW5nIHN1cnJvZ2F0ZTsKICAgICAgICBjb2RlID0gdGhpcy5jb2RlVW5pdEF0KGkgKyAxKTsKICAgICAgICBpZiAoKGNvZGUgJiB+MHgzRkYpID09IDB4REMwMCkgewogICAgICAgICAgLy8gTWF0Y2hpbmcgdHJhaWxpbmcgc3Vycm9nYXRlLgogICAgICAgICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2godGhpcy5zdWJzdHJpbmcoaSwgaSArIDIpKSk7CiAgICAgICAgICBpICs9IDI7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2godGhpc1tpXSkpOwogICAgICBpKys7CiAgICB9CiAgICBidWZmZXIud3JpdGUob25NYXRjaChuZXcgX1N0cmluZ01hdGNoKGksIHRoaXMsICIiKSkpOwogICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2goIiIpKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIFN0cmluZyBzcGxpdE1hcEpvaW4oUGF0dGVybiBwYXR0ZXJuLAogICAgICB7U3RyaW5nIG9uTWF0Y2goTWF0Y2ggbWF0Y2gpLCBTdHJpbmcgb25Ob25NYXRjaChTdHJpbmcgbm9uTWF0Y2gpfSkgewogICAgaWYgKHBhdHRlcm4gaXMhIFBhdHRlcm4pIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIiR7cGF0dGVybn0gaXMgbm90IGEgUGF0dGVybiIpOwogICAgfQogICAgb25NYXRjaCA/Pz0gX21hdGNoU3RyaW5nOwogICAgb25Ob25NYXRjaCA/Pz0gX3N0cmluZ0lkZW50aXR5OwogICAgaWYgKHBhdHRlcm4gaXMgU3RyaW5nKSB7CiAgICAgIFN0cmluZyBzdHJpbmdQYXR0ZXJuID0gcGF0dGVybjsKICAgICAgaWYgKHN0cmluZ1BhdHRlcm4uaXNFbXB0eSkgewogICAgICAgIHJldHVybiBfc3BsaXRNYXBKb2luRW1wdHlTdHJpbmcob25NYXRjaCwgb25Ob25NYXRjaCk7CiAgICAgIH0KICAgIH0KICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgc3RhcnRJbmRleCA9IDA7CiAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICBidWZmZXIud3JpdGUob25Ob25NYXRjaCh0aGlzLnN1YnN0cmluZyhzdGFydEluZGV4LCBtYXRjaC5zdGFydCkpKTsKICAgICAgYnVmZmVyLndyaXRlKG9uTWF0Y2gobWF0Y2gpLnRvU3RyaW5nKCkpOwogICAgICBzdGFydEluZGV4ID0gbWF0Y2guZW5kOwogICAgfQogICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2godGhpcy5zdWJzdHJpbmcoc3RhcnRJbmRleCkpKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8vIENvbnZlcnQgc2luZ2xlIG9iamVjdCB0byBzdHJpbmcuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIFN0cmluZyBfaW50ZXJwb2xhdGVTaW5nbGUoT2JqZWN0IG8pIHsKICAgIGlmIChvIGlzIFN0cmluZykgcmV0dXJuIG87CiAgICBmaW5hbCBzID0gby50b1N0cmluZygpOwogICAgaWYgKHMgaXMhIFN0cmluZykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzKTsKICAgIH0KICAgIHJldHVybiBzOwogIH0KCiAgLyoqCiAgICogQ29udmVydCBhbGwgb2JqZWN0cyBpbiBbdmFsdWVzXSB0byBzdHJpbmdzIGFuZCBjb25jYXQgdGhlbQogICAqIGludG8gYSByZXN1bHQgc3RyaW5nLgogICAqIE1vZGlmaWVzIHRoZSBpbnB1dCBsaXN0IGlmIGl0IGNvbnRhaW5zIG5vbi1gU3RyaW5nYCB2YWx1ZXMuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIFN0cmluZyBfaW50ZXJwb2xhdGUoZmluYWwgTGlzdCB2YWx1ZXMpIHsKICAgIGZpbmFsIG51bVZhbHVlcyA9IHZhbHVlcy5sZW5ndGg7CiAgICBpbnQgdG90YWxMZW5ndGggPSAwOwogICAgaW50IGkgPSAwOwogICAgd2hpbGUgKGkgPCBudW1WYWx1ZXMpIHsKICAgICAgZmluYWwgZSA9IHZhbHVlc1tpXTsKICAgICAgZmluYWwgcyA9IGUudG9TdHJpbmcoKTsKICAgICAgdmFsdWVzW2ldID0gczsKICAgICAgaWYgKENsYXNzSUQuZ2V0SUQocykgPT0gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nKSB7CiAgICAgICAgdG90YWxMZW5ndGggKz0gcy5sZW5ndGg7CiAgICAgICAgaSsrOwogICAgICB9IGVsc2UgaWYgKHMgaXMhIFN0cmluZykgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEhhbmRsZSByZW1haW5pbmcgZWxlbWVudHMgd2l0aG91dCBjaGVja2luZyBmb3Igb25lLWJ5dGUtbmVzcy4KICAgICAgICB3aGlsZSAoKytpIDwgbnVtVmFsdWVzKSB7CiAgICAgICAgICBmaW5hbCBlID0gdmFsdWVzW2ldOwogICAgICAgICAgZmluYWwgcyA9IGUudG9TdHJpbmcoKTsKICAgICAgICAgIHZhbHVlc1tpXSA9IHM7CiAgICAgICAgICBpZiAocyBpcyEgU3RyaW5nKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX2NvbmNhdFJhbmdlTmF0aXZlKHZhbHVlcywgMCwgbnVtVmFsdWVzKTsKICAgICAgfQogICAgfQogICAgLy8gQWxsIHN0cmluZ3Mgd2VyZSBvbmUtYnl0ZSBzdHJpbmdzLgogICAgcmV0dXJuIF9PbmVCeXRlU3RyaW5nLl9jb25jYXRBbGwodmFsdWVzLCB0b3RhbExlbmd0aCk7CiAgfQoKICBJdGVyYWJsZTxNYXRjaD4gYWxsTWF0Y2hlcyhTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiBzdHJpbmcubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCBzdHJpbmcubGVuZ3RoLCAic3RhcnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1N0cmluZ0FsbE1hdGNoZXNJdGVyYWJsZShzdHJpbmcsIHRoaXMsIHN0YXJ0KTsKICB9CgogIE1hdGNoIG1hdGNoQXNQcmVmaXgoU3RyaW5nIHN0cmluZywgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gc3RyaW5nLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgc3RyaW5nLmxlbmd0aCk7CiAgICB9CiAgICBpZiAoc3RhcnQgKyB0aGlzLmxlbmd0aCA+IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChzdHJpbmcuY29kZVVuaXRBdChzdGFydCArIGkpICE9IHRoaXMuY29kZVVuaXRBdChpKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IF9TdHJpbmdNYXRjaChzdGFydCwgc3RyaW5nLCB0aGlzKTsKICB9CgogIExpc3Q8U3RyaW5nPiBzcGxpdChQYXR0ZXJuIHBhdHRlcm4pIHsKICAgIGlmICgocGF0dGVybiBpcyBTdHJpbmcpICYmIHBhdHRlcm4uaXNFbXB0eSkgewogICAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gbmV3IExpc3Q8U3RyaW5nPih0aGlzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICAgIHJlc3VsdFtpXSA9IHRoaXNbaV07CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcGF0dGVybi5hbGxNYXRjaGVzKHRoaXMpLml0ZXJhdG9yOwogICAgaWYgKGxlbmd0aCA9PSAwICYmIGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgLy8gQSBtYXRjaGVkIGVtcHR5IHN0cmluZyBpbnB1dCByZXR1cm5zIHRoZSBlbXB0eSBsaXN0LgogICAgICByZXR1cm4gPFN0cmluZz5bXTsKICAgIH0KICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBpbnQgc3RhcnRJbmRleCA9IDA7CiAgICBpbnQgcHJldmlvdXNJbmRleCA9IDA7CiAgICAvLyAncGF0dGVybicgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QKICAgIC8vIGNhbGwgX3N1YnN0cmluZ1VuaGNoZWNrZWQgdW5sZXNzIGl0IGlzIGEgdHJ1c3R3b3J0aHkgdHlwZSAoZS5nLiBTdHJpbmcpLgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gbGVuZ3RoIHx8ICFpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgcmVzdWx0LmFkZCh0aGlzLnN1YnN0cmluZyhwcmV2aW91c0luZGV4LCBsZW5ndGgpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBNYXRjaCBtYXRjaCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIGlmIChtYXRjaC5zdGFydCA9PSBsZW5ndGgpIHsKICAgICAgICByZXN1bHQuYWRkKHRoaXMuc3Vic3RyaW5nKHByZXZpb3VzSW5kZXgsIGxlbmd0aCkpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGludCBlbmRJbmRleCA9IG1hdGNoLmVuZDsKICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gZW5kSW5kZXggJiYgZW5kSW5kZXggPT0gcHJldmlvdXNJbmRleCkgewogICAgICAgICsrc3RhcnRJbmRleDsgLy8gZW1wdHkgbWF0Y2gsIGFkdmFuY2UgYW5kIHJlc3RhcnQKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXN1bHQuYWRkKHRoaXMuc3Vic3RyaW5nKHByZXZpb3VzSW5kZXgsIG1hdGNoLnN0YXJ0KSk7CiAgICAgIHN0YXJ0SW5kZXggPSBwcmV2aW91c0luZGV4ID0gZW5kSW5kZXg7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlzdDxpbnQ+IGdldCBjb2RlVW5pdHMgPT4gbmV3IENvZGVVbml0cyh0aGlzKTsKCiAgUnVuZXMgZ2V0IHJ1bmVzID0+IG5ldyBSdW5lcyh0aGlzKTsKCiAgU3RyaW5nIHRvVXBwZXJDYXNlKCkgbmF0aXZlICJTdHJpbmdfdG9VcHBlckNhc2UiOwoKICBTdHJpbmcgdG9Mb3dlckNhc2UoKSBuYXRpdmUgIlN0cmluZ190b0xvd2VyQ2FzZSI7CgogIC8vIENvbmNhdGVuYXRlIFsnc3RhcnQnLCAnZW5kJ1sgZWxlbWVudHMgb2YgJ3N0cmluZ3MnLgogIHN0YXRpYyBTdHJpbmcgX2NvbmNhdFJhbmdlKExpc3Q8U3RyaW5nPiBzdHJpbmdzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGlmICgoZW5kIC0gc3RhcnQpID09IDEpIHsKICAgICAgcmV0dXJuIHN0cmluZ3Nbc3RhcnRdOwogICAgfQogICAgcmV0dXJuIF9jb25jYXRSYW5nZU5hdGl2ZShzdHJpbmdzLCBzdGFydCwgZW5kKTsKICB9CgogIC8vIENhbGwgdGhpcyBtZXRob2QgaWYgYWxsIGVsZW1lbnRzIG9mIFtzdHJpbmdzXSBhcmUga25vd24gdG8gYmUgc3RyaW5ncwogIC8vIGJ1dCBub3QgYWxsIGFyZSBrbm93biB0byBiZSBPbmVCeXRlU3RyaW5nKHMpLgogIHN0YXRpYyBTdHJpbmcgX2NvbmNhdFJhbmdlTmF0aXZlKExpc3Qgc3RyaW5ncywgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgICBuYXRpdmUgIlN0cmluZ19jb25jYXRSYW5nZSI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX09uZUJ5dGVTdHJpbmcgZXh0ZW5kcyBfU3RyaW5nQmFzZSB7CiAgZmFjdG9yeSBfT25lQnl0ZVN0cmluZy5fdW5pbnN0YW50aWFibGUoKSB7IHRocm93ICJVbnJlYWNoYWJsZSI7IH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBnZXQgaGFzaENvZGUgbmF0aXZlICJTdHJpbmdfZ2V0SGFzaENvZGUiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGNvZGVVbml0QXQoaW50IGluZGV4KSBuYXRpdmUgIlN0cmluZ19jb2RlVW5pdEF0IjsKCiAgYm9vbCBfaXNXaGl0ZXNwYWNlKGludCBjb2RlVW5pdCkgewogICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9pc09uZUJ5dGVXaGl0ZXNwYWNlKGNvZGVVbml0KTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIHN1cGVyID09IG90aGVyOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfT25lQnl0ZVN0cmluZykKICBTdHJpbmcgX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZShpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KQogICAgICBuYXRpdmUgIk9uZUJ5dGVTdHJpbmdfc3Vic3RyaW5nVW5jaGVja2VkIjsKCiAgTGlzdDxTdHJpbmc+IF9zcGxpdFdpdGhDaGFyQ29kZShpbnQgY2hhckNvZGUpCiAgICAgIG5hdGl2ZSAiT25lQnl0ZVN0cmluZ19zcGxpdFdpdGhDaGFyQ29kZSI7CgogIExpc3Q8U3RyaW5nPiBzcGxpdChQYXR0ZXJuIHBhdHRlcm4pIHsKICAgIC8vIFRPRE8odmVnb3JvdikgaW52ZXN0aWdhdGUgaWYgdGhpcyBjYW4gYmUgcmV3cml0dGVuIGFzIGBpcyBfT25lQnl0ZVN0cmluZ2AKICAgIC8vIGNoZWNrIHdpdGhvdXQgcGVyZm9ybWFuY2UgcGVuYWx0eS4gRnJvbnQtZW5kIHdvdWxkIHRoZW4gcHJvbW90ZQogICAgLy8gcGF0dGVybiB2YXJpYWJsZSB0byBfT25lQnl0ZVN0cmluZy4KICAgIGlmIChDbGFzc0lELmdldElEKHBhdHRlcm4pID09IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZykgewogICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybkFzU3RyaW5nID0gcGF0dGVybjsKICAgICAgaWYgKHBhdHRlcm5Bc1N0cmluZy5sZW5ndGggPT0gMSkgewogICAgICAgIHJldHVybiBfc3BsaXRXaXRoQ2hhckNvZGUocGF0dGVybkFzU3RyaW5nLmNvZGVVbml0QXQoMCkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuc3BsaXQocGF0dGVybik7CiAgfQoKICAvLyBBbGwgZWxlbWVudCBvZiAnc3RyaW5ncycgbXVzdCBiZSBPbmVCeXRlU3RyaW5ncy4KICBzdGF0aWMgX2NvbmNhdEFsbChMaXN0IHN0cmluZ3MsIGludCB0b3RhbExlbmd0aCkgewogICAgaWYgKHRvdGFsTGVuZ3RoID4gMTI4KSB7CiAgICAgIC8vIE5hdGl2ZSBpcyBxdWlja2VyLgogICAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2NvbmNhdFJhbmdlTmF0aXZlKHN0cmluZ3MsIDAsIHN0cmluZ3MubGVuZ3RoKTsKICAgIH0KICAgIGZpbmFsIHJlcyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSh0b3RhbExlbmd0aCk7CiAgICBmaW5hbCBzdHJpbmdzTGVuZ3RoID0gc3RyaW5ncy5sZW5ndGg7CiAgICBpbnQgckl4ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nc0xlbmd0aDsgaSsrKSB7CiAgICAgIGZpbmFsIF9PbmVCeXRlU3RyaW5nIGUgPSBzdHJpbmdzW2ldOwogICAgICBmaW5hbCBlTGVuZ3RoID0gZS5sZW5ndGg7CiAgICAgIGZvciAoaW50IHMgPSAwOyBzIDwgZUxlbmd0aDsgcysrKSB7CiAgICAgICAgcmVzLl9zZXRBdChySXgrKywgZS5jb2RlVW5pdEF0KHMpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKICB9CgogIGludCBpbmRleE9mKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydCA9IDBdKSB7CiAgICAvLyBTcGVjaWFsaXplIGZvciBzaW5nbGUgY2hhcmFjdGVyIHBhdHRlcm4uCiAgICBmaW5hbCBwQ2lkID0gQ2xhc3NJRC5nZXRJRChwYXR0ZXJuKTsKICAgIGlmICgocENpZCA9PSBDbGFzc0lELmNpZE9uZUJ5dGVTdHJpbmcpIHx8CiAgICAgICAgKHBDaWQgPT0gQ2xhc3NJRC5jaWRUd29CeXRlU3RyaW5nKSB8fAogICAgICAgIChwQ2lkID09IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybkFzU3RyaW5nID0gcGF0dGVybjsKICAgICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgIGlmICgocGF0dGVybkFzU3RyaW5nLmxlbmd0aCA9PSAxKSAmJiAoc3RhcnQgPj0gMCkgJiYgKHN0YXJ0IDwgbGVuKSkgewogICAgICAgIGZpbmFsIHBhdHRlcm5DdTAgPSBwYXR0ZXJuQXNTdHJpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgICBpZiAocGF0dGVybkN1MCA+IDB4RkYpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLmNvZGVVbml0QXQoaSkgPT0gcGF0dGVybkN1MCkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuaW5kZXhPZihwYXR0ZXJuLCBzdGFydCk7CiAgfQoKICBib29sIGNvbnRhaW5zKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBmaW5hbCBwQ2lkID0gQ2xhc3NJRC5nZXRJRChwYXR0ZXJuKTsKICAgIGlmICgocENpZCA9PSBDbGFzc0lELmNpZE9uZUJ5dGVTdHJpbmcpIHx8CiAgICAgICAgKHBDaWQgPT0gQ2xhc3NJRC5jaWRUd29CeXRlU3RyaW5nKSB8fAogICAgICAgIChwQ2lkID09IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybkFzU3RyaW5nID0gcGF0dGVybjsKICAgICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgIGlmICgocGF0dGVybkFzU3RyaW5nLmxlbmd0aCA9PSAxKSAmJiAoc3RhcnQgPj0gMCkgJiYgKHN0YXJ0IDwgbGVuKSkgewogICAgICAgIGZpbmFsIHBhdHRlcm5DdTAgPSBwYXR0ZXJuQXNTdHJpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgICBpZiAocGF0dGVybkN1MCA+IDB4RkYpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLmNvZGVVbml0QXQoaSkgPT0gcGF0dGVybkN1MCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29udGFpbnMocGF0dGVybiwgc3RhcnQpOwogIH0KCiAgU3RyaW5nIG9wZXJhdG9yICooaW50IHRpbWVzKSB7CiAgICBpZiAodGltZXMgPD0gMCkgcmV0dXJuICIiOwogICAgaWYgKHRpbWVzID09IDEpIHJldHVybiB0aGlzOwogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKHRoaXMuaXNFbXB0eSkgcmV0dXJuIHRoaXM7IC8vIERvbid0IGNsb25lIGVtcHR5IHN0cmluZy4KICAgIF9PbmVCeXRlU3RyaW5nIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW5ndGggKiB0aW1lcyk7CiAgICBpbnQgaW5kZXggPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aW1lczsgaSsrKSB7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHRoaXMuY29kZVVuaXRBdChqKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgcGFkTGVmdChpbnQgd2lkdGgsIFtTdHJpbmcgcGFkZGluZyA9ICcgJ10pIHsKICAgIGludCBwYWRDaWQgPSBDbGFzc0lELmdldElEKHBhZGRpbmcpOwogICAgaWYgKChwYWRDaWQgIT0gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nKSAmJgogICAgICAgIChwYWRDaWQgIT0gQ2xhc3NJRC5jaWRFeHRlcm5hbE9uZUJ5dGVTdHJpbmcpKSB7CiAgICAgIHJldHVybiBzdXBlci5wYWRMZWZ0KHdpZHRoLCBwYWRkaW5nKTsKICAgIH0KICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gbGVuZ3RoOwogICAgaWYgKGRlbHRhIDw9IDApIHJldHVybiB0aGlzOwogICAgaW50IHBhZExlbmd0aCA9IHBhZGRpbmcubGVuZ3RoOwogICAgaW50IHJlc3VsdExlbmd0aCA9IHBhZExlbmd0aCAqIGRlbHRhICsgbGVuZ3RoOwogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKHJlc3VsdExlbmd0aCk7CiAgICBpbnQgaW5kZXggPSAwOwogICAgaWYgKHBhZExlbmd0aCA9PSAxKSB7CiAgICAgIGludCBwYWRDaGFyID0gcGFkZGluZy5jb2RlVW5pdEF0KDApOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHBhZENoYXIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhZExlbmd0aDsgaisrKSB7CiAgICAgICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHBhZGRpbmcuY29kZVVuaXRBdChqKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgrKywgdGhpcy5jb2RlVW5pdEF0KGkpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgcGFkUmlnaHQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKSB7CiAgICBpbnQgcGFkQ2lkID0gQ2xhc3NJRC5nZXRJRChwYWRkaW5nKTsKICAgIGlmICgocGFkQ2lkICE9IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZykgJiYKICAgICAgICAocGFkQ2lkICE9IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICByZXR1cm4gc3VwZXIucGFkUmlnaHQod2lkdGgsIHBhZGRpbmcpOwogICAgfQogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaW50IGRlbHRhID0gd2lkdGggLSBsZW5ndGg7CiAgICBpZiAoZGVsdGEgPD0gMCkgcmV0dXJuIHRoaXM7CiAgICBpbnQgcGFkTGVuZ3RoID0gcGFkZGluZy5sZW5ndGg7CiAgICBpbnQgcmVzdWx0TGVuZ3RoID0gbGVuZ3RoICsgcGFkTGVuZ3RoICogZGVsdGE7CiAgICBfT25lQnl0ZVN0cmluZyByZXN1bHQgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUocmVzdWx0TGVuZ3RoKTsKICAgIGludCBpbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgrKywgdGhpcy5jb2RlVW5pdEF0KGkpKTsKICAgIH0KICAgIGlmIChwYWRMZW5ndGggPT0gMSkgewogICAgICBpbnQgcGFkQ2hhciA9IHBhZGRpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCsrLCBwYWRDaGFyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwYWRMZW5ndGg7IGorKykgewogICAgICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCsrLCBwYWRkaW5nLmNvZGVVbml0QXQoaikpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIExvd2VyLWNhc2UgY29udmVyc2lvbiB0YWJsZSBmb3IgTGF0aW4tMSBhcyBzdHJpbmcuCiAgLy8gVXBwZXItY2FzZSByYW5nZXM6IDB4NDEtMHg1YSAoJ0EnIC0gJ1onKSwgMHhjMC0weGQ2LCAweGQ4LTB4ZGUuCiAgLy8gQ29udmVyc2lvbiB0byBsb3dlciBjYXNlIHBlcmZvcm1lZCBieSBhZGRpbmcgMHgyMC4KICBzdGF0aWMgY29uc3QgX0xDX1RBQkxFID0KICAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCiAgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIgogICAgICAiXHgyMFx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjdceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZiIKICAgICAgIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3XHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2YiCiAgICAgICJceDQwXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmIgogICAgICAiXHg3MFx4NzFceDcyXHg3M1x4NzRceDc1XHg3Nlx4NzdceDc4XHg3OVx4N2FceDViXHg1Y1x4NWRceDVlXHg1ZiIKICAgICAgIlx4NjBceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmYiCiAgICAgICJceDcwXHg3MVx4NzJceDczXHg3NFx4NzVceDc2XHg3N1x4NzhceDc5XHg3YVx4N2JceDdjXHg3ZFx4N2VceDdmIgogICAgICAiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4ZiIKICAgICAgIlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWYiCiAgICAgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmIgogICAgICAiXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZiIKICAgICAgIlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWYiCiAgICAgICJceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhkN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGRmIgogICAgICAiXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZiIKICAgICAgIlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiOwoKICAvLyBVcHBlci1jYXNlIGNvbnZlcnNpb24gdGFibGUgZm9yIExhdGluLTEgYXMgc3RyaW5nLgogIC8vIExvd2VyLWNhc2UgcmFuZ2VzOiAweDYxLTB4N2EgKCdhJyAtICd6JyksIDB4ZTAtMHhmZi4KICAvLyBUaGUgY2hhcmFjdGVycyAweGI1ICjCtSkgYW5kIDB4ZmYgKMO/KSBoYXZlIHVwcGVyIGNhc2UgdmFyaWFudHMKICAvLyB0aGF0IGFyZSBub3QgTGF0aW4tMS4gVGhlc2UgYXJlIGJvdGggbWFya2VkIGFzIDB4MDAgaW4gdGhlIHRhYmxlLgogIC8vIFRoZSBHZXJtYW4gInNoYXJwIHMiIFx4ZGYgKMOfKSBzaG91bGQgYmUgY29udmVydGVkIGludG8gdHdvIGNoYXJhY3RlcnMgKFNTKSwKICAvLyBhbmQgaXMgYWxzbyBtYXJrZWQgd2l0aCAweDAwLgogIC8vIENvbnZlcnNpb24gdG8gbG93ZXIgY2FzZSBwZXJmb3JtZWQgYnkgc3VidHJhY3RpbmcgMHgyMC4KICBzdGF0aWMgY29uc3QgX1VDX1RBQkxFID0KICAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCiAgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIgogICAgICAiXHgyMFx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjdceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZiIKICAgICAgIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3XHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2YiCiAgICAgICJceDQwXHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2XHg0N1x4NDhceDQ5XHg0YVx4NGJceDRjXHg0ZFx4NGVceDRmIgogICAgICAiXHg1MFx4NTFceDUyXHg1M1x4NTRceDU1XHg1Nlx4NTdceDU4XHg1OVx4NWFceDViXHg1Y1x4NWRceDVlXHg1ZiIKICAgICAgIlx4NjBceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDZceDQ3XHg0OFx4NDlceDRhXHg0Ylx4NGNceDRkXHg0ZVx4NGYiCiAgICAgICJceDUwXHg1MVx4NTJceDUzXHg1NFx4NTVceDU2XHg1N1x4NThceDU5XHg1YVx4N2JceDdjXHg3ZFx4N2VceDdmIgogICAgICAiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4ZiIKICAgICAgIlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWYiCiAgICAgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmIgogICAgICAiXHhiMFx4YjFceGIyXHhiM1x4YjRceDAwXHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZiIKICAgICAgIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiCiAgICAgICJceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceDAwIgogICAgICAiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZiIKICAgICAgIlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGY3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4MDAiOwoKICBTdHJpbmcgdG9Mb3dlckNhc2UoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgZmluYWwgYyA9IHRoaXMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGMgPT0gX0xDX1RBQkxFLmNvZGVVbml0QXQoYykpIGNvbnRpbnVlOwogICAgICAvLyBVcHBlci1jYXNlIGNoYXJhY3RlciBmb3VuZC4KICAgICAgZmluYWwgcmVzdWx0ID0gX2FsbG9jYXRlKHRoaXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGosIHRoaXMuY29kZVVuaXRBdChqKSk7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCB0aGlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChqLCBfTENfVEFCTEUuY29kZVVuaXRBdCh0aGlzLmNvZGVVbml0QXQoaikpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBTdHJpbmcgdG9VcHBlckNhc2UoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgZmluYWwgYyA9IHRoaXMuY29kZVVuaXRBdChpKTsKICAgICAgLy8gQ29udGludWUgbG9vcCBpZiBjaGFyYWN0ZXIgaXMgdW5jaGFuZ2VkIGJ5IHVwcGVyLWNhc2UgY29udmVyc2lvbi4KICAgICAgaWYgKGMgPT0gX1VDX1RBQkxFLmNvZGVVbml0QXQoYykpIGNvbnRpbnVlOwoKICAgICAgLy8gQ2hlY2sgcmVzdCBvZiBzdHJpbmcgZm9yIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QgY29udmVydCB0bwogICAgICAvLyBzaW5nbGUtY2hhcmFjdGVycyBpbiB0aGUgTGF0aW4tMSByYW5nZS4KICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCB0aGlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgZmluYWwgYyA9IHRoaXMuY29kZVVuaXRBdChqKTsKICAgICAgICBpZiAoKF9VQ19UQUJMRS5jb2RlVW5pdEF0KGMpID09IDB4MDApICYmIChjICE9IDB4MDApKSB7CiAgICAgICAgICAvLyBXZSB1c2UgdGhlIDB4MDAgdmFsdWUgZm9yIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiB0aGUgbnVsbCBjaGFyYWN0ZXIsCiAgICAgICAgICAvLyB0aGF0IGRvbid0IGNvbnZlcnQgdG8gYSBzaW5nbGUgTGF0aW4tMSBjaGFyYWN0ZXIgd2hlbiB1cHBlci1jYXNlZC4KICAgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgY2FsbCB0aGUgZ2VuZXJpYyBzdXBlci1jbGFzcyBtZXRob2QuCiAgICAgICAgICByZXR1cm4gc3VwZXIudG9VcHBlckNhc2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gU29tZSBsb3dlci1jYXNlIGNoYXJhY3RlcnMgZm91bmQsIGJ1dCBhbGwgdXBwZXItY2FzZSB0byBzaW5nbGUgTGF0aW4tMQogICAgICAvLyBjaGFyYWN0ZXJzLgogICAgICBmaW5hbCByZXN1bHQgPSBfYWxsb2NhdGUodGhpcy5sZW5ndGgpOwogICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewogICAgICAgIHJlc3VsdC5fc2V0QXQoaiwgdGhpcy5jb2RlVW5pdEF0KGopKTsKICAgICAgfQogICAgICBmb3IgKGludCBqID0gaTsgaiA8IHRoaXMubGVuZ3RoOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGosIF9VQ19UQUJMRS5jb2RlVW5pdEF0KHRoaXMuY29kZVVuaXRBdChqKSkpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vIEFsbG9jYXRlcyBhIHN0cmluZyBvZiBnaXZlbiBsZW5ndGgsIGV4cGVjdGluZyBpdHMgY29udGVudCB0byBiZQogIC8vIHNldCB1c2luZyBfc2V0QXQuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfT25lQnl0ZVN0cmluZykKICBzdGF0aWMgX09uZUJ5dGVTdHJpbmcgX2FsbG9jYXRlKGludCBsZW5ndGgpIG5hdGl2ZSAiT25lQnl0ZVN0cmluZ19hbGxvY2F0ZSI7CgogIHN0YXRpYyBfT25lQnl0ZVN0cmluZyBfYWxsb2NhdGVGcm9tT25lQnl0ZUxpc3QoTGlzdDxpbnQ+IGxpc3QsIGludCBzdGFydCwKICAgICAgaW50IGVuZCkgbmF0aXZlICJPbmVCeXRlU3RyaW5nX2FsbG9jYXRlRnJvbU9uZUJ5dGVMaXN0IjsKCiAgLy8gVGhpcyBpcyBpbnRlcm5hbCBoZWxwZXIgbWV0aG9kLiBDb2RlIHBvaW50IHZhbHVlIG11c3QgYmUgYSB2YWxpZAogIC8vIExhdGluMSB2YWx1ZSAoMC4uMHhGRiksIGluZGV4IG11c3QgYmUgdmFsaWQuCiAgdm9pZCBfc2V0QXQoaW50IGluZGV4LCBpbnQgY29kZVBvaW50KSBuYXRpdmUgIk9uZUJ5dGVTdHJpbmdfc2V0QXQiOwoKICAvLyBTaG91bGQgYmUgb3B0aW1pemFibGUgdG8gYSBtZW1vcnkgbW92ZS4KICAvLyBBY2NlcHRzIGJvdGggX09uZUJ5dGVTdHJpbmcgYW5kIF9FeHRlcm5hbE9uZUJ5dGVTdHJpbmcgYXMgYXJndW1lbnQuCiAgLy8gUmV0dXJucyBpbmRleCBhZnRlciBsYXN0IGNoYXJhY3RlciB3cml0dGVuLgogIGludCBfc2V0UmFuZ2UoaW50IGluZGV4LCBTdHJpbmcgb25lQnl0ZVN0cmluZywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBhc3NlcnQob25lQnl0ZVN0cmluZy5faXNPbmVCeXRlKTsKICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogICAgYXNzZXJ0KGVuZCA8PSBvbmVCeXRlU3RyaW5nLmxlbmd0aCk7CiAgICBhc3NlcnQoMCA8PSBpbmRleCk7CiAgICBhc3NlcnQoaW5kZXggKyAoZW5kIC0gc3RhcnQpIDw9IGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBfc2V0QXQoaW5kZXgsIG9uZUJ5dGVTdHJpbmcuY29kZVVuaXRBdChpKSk7CiAgICAgIGluZGV4ICs9IDE7CiAgICB9CiAgICByZXR1cm4gaW5kZXg7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Ud29CeXRlU3RyaW5nIGV4dGVuZHMgX1N0cmluZ0Jhc2UgewogIGZhY3RvcnkgX1R3b0J5dGVTdHJpbmcuX3VuaW5zdGFudGlhYmxlKCkgeyB0aHJvdyAiVW5yZWFjaGFibGUiOyB9CgogIHN0YXRpYyBTdHJpbmcgX2FsbG9jYXRlRnJvbVR3b0J5dGVMaXN0KExpc3Q8aW50PiBsaXN0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgIG5hdGl2ZSAiVHdvQnl0ZVN0cmluZ19hbGxvY2F0ZUZyb21Ud29CeXRlTGlzdCI7CgogIGJvb2wgX2lzV2hpdGVzcGFjZShpbnQgY29kZVVuaXQpIHsKICAgIHJldHVybiBfU3RyaW5nQmFzZS5faXNUd29CeXRlV2hpdGVzcGFjZShjb2RlVW5pdCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGNvZGVVbml0QXQoaW50IGluZGV4KSBuYXRpdmUgIlN0cmluZ19jb2RlVW5pdEF0IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gc3VwZXIgPT0gb3RoZXI7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbE9uZUJ5dGVTdHJpbmcgZXh0ZW5kcyBfU3RyaW5nQmFzZSB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxPbmVCeXRlU3RyaW5nLl91bmluc3RhbnRpYWJsZSgpIHsgdGhyb3cgIlVucmVhY2hhYmxlIjsgfQoKICBib29sIF9pc1doaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2lzT25lQnl0ZVdoaXRlc3BhY2UoY29kZVVuaXQpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCkgbmF0aXZlICJTdHJpbmdfY29kZVVuaXRBdCI7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gc3VwZXIgPT0gb3RoZXI7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbFR3b0J5dGVTdHJpbmcgZXh0ZW5kcyBfU3RyaW5nQmFzZSB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxUd29CeXRlU3RyaW5nLl91bmluc3RhbnRpYWJsZSgpIHsgdGhyb3cgIlVucmVhY2hhYmxlIjsgfQoKICBib29sIF9pc1doaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2lzVHdvQnl0ZVdoaXRlc3BhY2UoY29kZVVuaXQpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCkgbmF0aXZlICJTdHJpbmdfY29kZVVuaXRBdCI7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gc3VwZXIgPT0gb3RoZXI7CiAgfQp9CgpjbGFzcyBfU3RyaW5nTWF0Y2ggaW1wbGVtZW50cyBNYXRjaCB7CiAgY29uc3QgX1N0cmluZ01hdGNoKHRoaXMuc3RhcnQsIHRoaXMuaW5wdXQsIHRoaXMucGF0dGVybik7CgogIGludCBnZXQgZW5kID0+IHN0YXJ0ICsgcGF0dGVybi5sZW5ndGg7CiAgU3RyaW5nIG9wZXJhdG9yIFtdKGludCBnKSA9PiBncm91cChnKTsKICBpbnQgZ2V0IGdyb3VwQ291bnQgPT4gMDsKCiAgU3RyaW5nIGdyb3VwKGludCBncm91cCkgewogICAgaWYgKGdyb3VwICE9IDApIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoZ3JvdXApOwogICAgfQogICAgcmV0dXJuIHBhdHRlcm47CiAgfQoKICBMaXN0PFN0cmluZz4gZ3JvdXBzKExpc3Q8aW50PiBncm91cHMpIHsKICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBmb3IgKGludCBnIGluIGdyb3VwcykgewogICAgICByZXN1bHQuYWRkKGdyb3VwKGcpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmaW5hbCBpbnQgc3RhcnQ7CiAgZmluYWwgU3RyaW5nIGlucHV0OwogIGZpbmFsIFN0cmluZyBwYXR0ZXJuOwp9CgpjbGFzcyBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhYmxlIGV4dGVuZHMgSXRlcmFibGU8TWF0Y2g+IHsKICBmaW5hbCBTdHJpbmcgX2lucHV0OwogIGZpbmFsIFN0cmluZyBfcGF0dGVybjsKICBmaW5hbCBpbnQgX2luZGV4OwoKICBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhYmxlKHRoaXMuX2lucHV0LCB0aGlzLl9wYXR0ZXJuLCB0aGlzLl9pbmRleCk7CgogIEl0ZXJhdG9yPE1hdGNoPiBnZXQgaXRlcmF0b3IgPT4KICAgICAgbmV3IF9TdHJpbmdBbGxNYXRjaGVzSXRlcmF0b3IoX2lucHV0LCBfcGF0dGVybiwgX2luZGV4KTsKCiAgTWF0Y2ggZ2V0IGZpcnN0IHsKICAgIGludCBpbmRleCA9IF9pbnB1dC5pbmRleE9mKF9wYXR0ZXJuLCBfaW5kZXgpOwogICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgcmV0dXJuIG5ldyBfU3RyaW5nTWF0Y2goaW5kZXgsIF9pbnB1dCwgX3BhdHRlcm4pOwogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQp9CgpjbGFzcyBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3I8TWF0Y2g+IHsKICBmaW5hbCBTdHJpbmcgX2lucHV0OwogIGZpbmFsIFN0cmluZyBfcGF0dGVybjsKICBpbnQgX2luZGV4OwogIE1hdGNoIF9jdXJyZW50OwoKICBf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SzIBRDEuJkBRUEAmCghQFS0kLgguRAgVBhEEAUUXMk8BTD8BRjJGAS1JMUcmGBopGC0oMhIGEgQCARorRAFNNgElNwQBNDgBKCMbBAIBGjNMASU3BAE0OAEjGwQCARozTAElNwQBNDgBIxsEAgEmPAEpKRsBHBYpBhQEASouHBwGEwQBExYYAgE6FxkUAUYBIj8BFDIWOAYsBAIBPRcZDhIBRgEUNBcUBjIVIhcUBic6OB4SEQQBIQIBIWRhcnQ6Y29yZS1wYXRjaC9zdHJpbmdfcGF0Y2guZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3R5cGVfcGF0Y2guZGFydIQnLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLyBUaGVzZSBEYXJ0IGNsYXNzZXMgY29ycmVzcG9uZCB0byB0aGUgVk0gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy4KCi8vIEVxdWl2YWxlbnQgb2YgUmF3QWJzdHJhY3RUeXBlLgphYnN0cmFjdCBjbGFzcyBfQWJzdHJhY3RUeXBlIGltcGxlbWVudHMgVHlwZSB7CiAgU3RyaW5nIHRvU3RyaW5nKCkgbmF0aXZlICJBYnN0cmFjdFR5cGVfdG9TdHJpbmciOwp9CgovLyBFcXVpdmFsZW50IG9mIFJhd1R5cGUuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1R5cGUgZXh0ZW5kcyBfQWJzdHJhY3RUeXBlIHsKICBmYWN0b3J5IF9UeXBlLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGdldCBoYXNoQ29kZSBuYXRpdmUgIlR5cGVfZ2V0SGFzaENvZGUiOwp9CgovLyBFcXVpdmFsZW50IG9mIFJhd1R5cGVSZWYuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1R5cGVSZWYgZXh0ZW5kcyBfQWJzdHJhY3RUeXBlIHsKICBmYWN0b3J5IF9UeXBlUmVmLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQp9CgovLyBFcXVpdmFsZW50IG9mIFJhd1R5cGVQYXJhbWV0ZXIuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1R5cGVQYXJhbWV0ZXIgZXh0ZW5kcyBfQWJzdHJhY3RUeXBlIHsKICBmYWN0b3J5IF9UeXBlUGFyYW1ldGVyLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQp9CikATk48AR4BTAEiLzQCARoaJCQZBAE0LgIBHRonJxkEAgEjGi0tGQQCAR9kYXJ0OmNvcmUtcGF0Y2gvdHlwZV9wYXRjaC5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvd2Vha19wcm9wZXJ0eS5kYXJ0gpAvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1dlYWtQcm9wZXJ0eSB7CiAgZmFjdG9yeSBfV2Vha1Byb3BlcnR5KGtleSwgdmFsdWUpID0+IF9uZXcoa2V5LCB2YWx1ZSk7CgogIGdldCBrZXkgPT4gX2dldEtleSgpOwogIGdldCB2YWx1ZSA9PiBfZ2V0VmFsdWUoKTsKICBzZXQgdmFsdWUodmFsdWUpID0+IF9zZXRWYWx1ZSh2YWx1ZSk7CgogIHN0YXRpYyBfV2Vha1Byb3BlcnR5IF9uZXcoa2V5LCB2YWx1ZSkgbmF0aXZlICJXZWFrUHJvcGVydHlfbmV3IjsKCiAgX2dldEtleSgpIG5hdGl2ZSAiV2Vha1Byb3BlcnR5X2dldEtleSI7CiAgX2dldFZhbHVlKCkgbmF0aXZlICJXZWFrUHJvcGVydHlfZ2V0VmFsdWUiOwogIF9zZXRWYWx1ZSh2YWx1ZSkgbmF0aXZlICJXZWFrUHJvcGVydHlfc2V0VmFsdWUiOwp9ChYATk48AR4BGhY5ARgcKAFDASouMwIBImRhcnQ6Y29yZS1wYXRjaC93ZWFrX3Byb3BlcnR5LmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvYW5ub3RhdGlvbnMuZGFydKNzLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIFRoZSBhbm5vdGF0aW9uIGBARGVwcmVjYXRlZCgnbWlncmF0aW9uJylgIG1hcmtzIGEgZmVhdHVyZSBhcyBkZXByZWNhdGVkLgogKgogKiBUaGUgYW5ub3RhdGlvbiBbZGVwcmVjYXRlZF0gaXMgYSBzaG9ydGhhbmQgZm9yIGRlcHJlY2F0aW5nIHVudGlsCiAqIGFuIHVuc3BlY2lmaWVkICJuZXh0IHJlbGVhc2UiIHdpdGhvdXQgbWlncmF0aW9uIGluc3RydWN0aW9ucy4KICoKICogVGhlIGludGVudCBvZiB0aGUgYEBEZXByZWNhdGVkYCBhbm5vdGF0aW9uIGlzIHRvIGluZm9ybSB1c2VycyBvZiBhIGZlYXR1cmUKICogdGhhdCB0aGV5IHNob3VsZCBjaGFuZ2UgdGhlaXIgY29kZSwgZXZlbiBpZiBpdCBpcyBjdXJyZW50bHkgc3RpbGwgd29ya2luZwogKiBjb3JyZWN0bHkuCiAqCiAqIEEgZGVwcmVjYXRlZCBmZWF0dXJlIGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIGF0IGEgbGF0ZXIgdGltZSwgcG9zc2libHkKICogc3BlY2lmaWVkIGluIFttZXNzYWdlXS4gQSBkZXByZWNhdGVkIGZlYXR1cmUgc2hvdWxkIG5vdCBiZSB1c2VkLCBjb2RlIHVzaW5nCiAqIGl0IHdpbGwgYnJlYWsgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLiBJZiBleGlzdGluZyBjb2RlIGlzIHVzaW5nIHRoZQogKiBmZWF0dXJlIGl0IHNob3VsZCBiZSByZXdyaXR0ZW4gdG8gbm90IHVzZSB0aGUgZGVwcmVjYXRlZCBmZWF0dXJlLgogKgogKiBBIGRlcHJlY2F0ZWQgZmVhdHVyZSBzaG91bGQgZG9jdW1lbnQgaG93IHRoZSBzYW1lIGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgaW4KICogW21lc3NhZ2VdLCBzbyB0aGUgcHJvZ3JhbW1lciBrbm93cyBob3cgdG8gcmV3cml0ZSB0aGUgY29kZS4KICoKICogVGhlIGBARGVwcmVjYXRlZGAgYW5ub3RhdGlvbiBhcHBsaWVzIHRvIGxpYnJhcmllcywgdG9wLWxldmVsIGRlY2xhcmF0aW9ucwogKiAodmFyaWFibGVzLCBnZXR0ZXJzLCBzZXR0ZXJzLCBmdW5jdGlvbnMsIGNsYXNzZXMgYW5kIHR5cGVkZWZzKSwKICogY2xhc3MtbGV2ZWwgZGVjbGFyYXRpb25zICh2YXJpYWJsZXMsIGdldHRlcnMsIHNldHRlcnMsIG1ldGhvZHMsIG9wZXJhdG9ycyBvcgogKiBjb25zdHJ1Y3RvcnMsIHdoZXRoZXIgc3RhdGljIG9yIG5vdCksIG5hbWVkIG9wdGlvbmFsIGFyZ3VtZW50cyBhbmQKICogdHJhaWxpbmcgb3B0aW9uYWwgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogKgogKiBEZXByZWNhdGlvbiBpcyB0cmFuc2l0aXZlOgogKgogKiAgLSBJZiBhIGxpYnJhcnkgaXMgZGVwcmVjYXRlZCwgc28gaXMgZXZlcnkgbWVtYmVyIG9mIGl0LgogKiAgLSBJZiBhIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHNvIGlzIGV2ZXJ5IG1lbWJlciBvZiBpdC4KICogIC0gSWYgYSB2YXJpYWJsZSBpcyBkZXByZWNhdGVkLCBzbyBhcmUgaXRzIGltcGxpY2l0IGdldHRlciBhbmQgc2V0dGVyLgogKgogKgogKiBBIHRvb2wgdGhhdCBwcm9jZXNzZXMgRGFydCBzb3VyY2UgY29kZSBtYXkgcmVwb3J0IHdoZW46CiAqCiAqIC0gdGhlIGNvZGUgaW1wb3J0cyBhIGRlcHJlY2F0ZWQgbGlicmFyeS4KICogLSB0aGUgY29kZSBleHBvcnRzIGEgZGVwcmVjYXRlZCBsaWJyYXJ5LCBvciBhbnkgZGVwcmVjYXRlZCBtZW1iZXIgb2YKICogIMKgYSBub24tZGVwcmVjYXRlZCBsaWJyYXJ5LgogKiAtIHRoZSBjb2RlIHJlZmVycyBzdGF0aWNhbGx5IHRvIGEgZGVwcmVjYXRlZCBkZWNsYXJhdGlvbi4KICogLSB0aGUgY29kZSBkeW5hbWljYWxseSB1c2VzIGEgbWVtYmVyIG9mIGFuIG9iamVjdCB3aXRoIGEgc3RhdGljYWxseSBrbm93bgogKiAgIHR5cGUsIHdoZXJlIHRoZSBtZW1iZXIgaXMgZGVwcmVjYXRlZCBvbiB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIG9iamVjdC4KICogLSB0aGUgY29kZSBkeW5hbWljYWxseSBjYWxscyBhIG1ldGhvZCB3aXRoIGFuIGFyZ3VtZW50IHdoZXJlIHRoZQogKiAgIGNvcnJlc3BvbmRpbmcgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgb24gdGhlIG9iamVjdCdzIHN0YXRpYyB0eXBlLgogKgogKgogKiBJZiB0aGUgZGVwcmVjYXRlZCB1c2UgaXMgaW5zaWRlIGEgbGlicmFyeSwgY2xhc3Mgb3IgbWV0aG9kIHdoaWNoIGlzIGl0c2VsZgogKiBkZXByZWNhdGVkLCB0aGUgdG9vbCBzaG91bGQgbm90IGJvdGhlciB0aGUgdXNlciBhYm91dCBpdC4KICogQSBkZXByZWNhdGVkIGZlYXR1cmUgaXMgZXhwZWN0ZWQgdG8gdXNlIG90aGVyIGRlcHJlY2F0ZWQgZmVhdHVyZXMuCiAqLwpjbGFzcyBEZXByZWNhdGVkIHsKICAvKioKICAgKiBNZXNzYWdlIHByb3ZpZGVkIHRvIHRoZSB1c2VyIHdoZW4gdGhleSB1c2UgdGhlIGRlcHJlY2F0ZWQgZmVhdHVyZS4KICAgKgogICAqIFRoZSBtZXNzYWdlIHNob3VsZCBleHBsYWluIGhvdyB0byBtaWdyYXRlIGF3YXkgZnJvbSB0aGUgZmVhdHVyZSBpZiBhbgogICAqIGFsdGVybmF0aXZlIGlzIGF2YWlsYWJsZSwgYW5kIHdoZW4gdGhlIGRlcHJlY2F0ZWQgZmVhdHVyZSBpcyBleHBlY3RlZCB0byBiZQogICAqIHJlbW92ZWQuCiAgICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIC8qKgogICAqIENyZWF0ZSBhIGRlcHJlY2F0aW9uIGFubm90YXRpb24gd2hpY2ggc3BlY2lmaWVzIHRoZSBtaWdyYXRpb24gcGF0aCBhbmQKICAgKiBleHBpcmF0aW9uIG9mIHRoZSBhbm5vdGF0ZWQgZmVhdHVyZS4KICAgKgogICAqIFRoZSBbbWVzc2FnZV0gYXJndW1lbnQgc2hvdWxkIGJlIHJlYWRhYmxlIGJ5IHByb2dyYW1tZXJzLCBhbmQgc2hvdWxkIHN0YXRlCiAgICogYW4gYWx0ZXJuYXRpdmUgZmVhdHVyZSAoaWYgYXZhaWxhYmxlKSBhcyB3ZWxsIGFzIHdoZW4gYW4gYW5ub3RhdGVkIGZlYXR1cmUKICAgKiBpcyBleHBlY3RlZCB0byBiZSByZW1vdmVkLgogICAqLwogIGNvbnN0IERlcHJlY2F0ZWQodGhpcy5tZXNzYWdlKTsKCiAgQERlcHJlY2F0ZWQoJ1VzZSBgbWVzc2FnZWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIERhcnQgMy4wLjAnKQogIFN0cmluZyBnZXQgZXhwaXJlcyA9PiBtZXNzYWdlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRGVwcmVjYXRlZCBmZWF0dXJlOiAkbWVzc2FnZSI7Cn0KCi8qKgogKiBNYXJrcyBhIGZlYXR1cmUgYXMgW0RlcHJlY2F0ZWRdIHVudGlsIHRoZSBuZXh0IHJlbGVhc2UuCiAqLwpjb25zdCBEZXByZWNhdGVkIGRlcHJlY2F0ZWQgPSBEZXByZWNhdGVkKCJuZXh0IHJlbGVhc2UiKTsKCmNsYXNzIF9PdmVycmlkZSB7CiAgY29uc3QgX092ZXJyaWRlKCk7Cn0KCi8qKgogKiBUaGUgYW5ub3RhdGlvbiBgQG92ZXJyaWRlYCBtYXJrcyBhbiBpbnN0YW5jZSBtZW1iZXIgYXMgb3ZlcnJpZGluZyBhCiAqIHN1cGVyY2xhc3MgbWVtYmVyIHdpdGggdGhlIHNhbWUgbmFtZS4KICoKICogVGhlIGFubm90YXRpb24gYXBwbGllcyB0byBpbnN0YW5jZSBtZXRob2RzLCBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCBhbmQgdG8KICogaW5zdGFuY2UgZmllbGRzLCB3aGVyZSBpdCBtZWFucyB0aGF0IHRoZSBpbXBsaWNpdCBnZXR0ZXIgYW5kIHNldHRlciBvZiB0aGUKICogZmllbGQgaXMgbWFya2VkIGFzIG92ZXJyaWRpbmcsIGJ1dCB0aGUgZmllbGQgaXRzZWxmIGlzIG5vdC4KICoKICogVGhlIGludGVudCBvZiB0aGUgYEBvdmVycmlkZWAgbm90YXRpb24gaXMgdG8gY2F0Y2ggc2l0dWF0aW9ucyB3aGVyZSBhCiAqIHN1cGVyY2xhc3MgcmVuYW1lcyBhIG1lbWJlciwgYW5kIGFuIGluZGVwZW5kZW50IHN1YmNsYXNzIHdoaWNoIHVzZWQgdG8KICogb3ZlcnJpZGUgdGhlIG1lbWJlciwgY291bGQgc2lsZW50bHkgY29udGludWUgd29ya2luZyB1c2luZyB0aGUKICogc3VwZXJjbGFzcyBpbXBsZW1lbnRhdGlvbi4KICoKICogVGhlIGVkaXRvciwgb3IgYSBzaW1pbGFyIHRvb2wgYWltZWQgYXQgdGhlIHByb2dyYW1tZXIsIG1heSByZXBvcnQgaWYgbm8KICogZGVjbGFyYXRpb24gb2YgYW4gYW5ub3RhdGVkIG1lbWJlciBpcyBpbmhlcml0ZWQgYnkgdGhlIGNsYXNzIGZyb20gZWl0aGVyIGEKICogc3VwZXJjbGFzcyBvciBhbiBpbnRlcmZhY2UuCiAqCiAqIFVzZSB0aGUgYEBvdmVycmlkZWAgYW5ub3RhdGlvbiBqdWRpY2lvdXNseSBhbmQgb25seSBmb3IgbWV0aG9kcyB3aGVyZQogKiB0aGUgc3VwZXJjbGFzcyBpcyBub3QgdW5kZXIgdGhlIHByb2dyYW1tZXIncyBjb250cm9sLCB0aGUgc3VwZXJjbGFzcyBpcyBpbiBhCiAqIGRpZmZlcmVudCBsaWJyYXJ5IG9yIHBhY2thZ2UsIGFuZCBpdCBpcyBub3QgY29uc2lkZXJlZCBzdGFibGUuCiAqIEluIGFueSBjYXNlLCB0aGUgdXNlIG9mIGBAb3ZlcnJpZGVgIGlzIG9wdGlvbmFsLgogKgogKiBGb3IgZXhhbXBsZSwgdGhlIGFubm90YXRpb24gaXMgaW50ZW50aW9uYWxseSBub3QgdXNlZCBpbiB0aGUgRGFydCBwbGF0Zm9ybQogKiBsaWJyYXJpZXMsIHNpbmNlIHRoZXkgb25seSBkZXBlbmQgb24gdGhlbXNlbHZlcy4KICovCmNvbnN0IE9iamVjdCBvdmVycmlkZSA9IF9PdmVycmlkZSgpOwoKLyoqCiAqIEFuIGFubm90YXRpb24gY2xhc3MgdGhhdCB3YXMgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQgb2YgRGFydCAyLgogKgogKiBTaG91bGQgbm90IGJlIHVzZWQgYW55IG1vcmUuCiAqLwpAZGVwcmVjYXRlZApjbGFzcyBQcm92aXNpb25hbCB7CiAgU3RyaW5nIGdldCBtZXNzYWdlID0+IG51bGw7CiAgY29uc3QgUHJvdmlzaW9uYWwoe1N0cmluZyBtZXNzYWdlfSk7Cn0KCi8qKgogKiBBbiBhbm5vdGF0aW9uIHRoYXQgd2FzIHVzZWQgZHVyaW5nIGRldmVsb3BtZW50IG9mIERhcnQgMi4KICoKICogU2hvdWxkIG5vdCBiZSB1c2VkIGFueSBtb3JlLgogKi8KQGRlcHJlY2F0ZWQKY29uc3QgTnVsbCBwcm92aXNpb25hbCA9IG51bGw7CgpjbGFzcyBfUHJveHkgewogIGNvbnN0IF9Qcm94eSgpOwp9CgovKioKICogVGhpcyBhbm5vdGF0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBEYXJ0IDIuCiAqCiAqIERhcnQgMiBoYXMgYSBtb3JlIHJlc3RyaWN0aXZlIHR5cGUgc3lzdGVtIHRoYW4gRGFydCAxLCBhbmQgaXQgcmVxdWlyZXMKICogbWV0aG9kIGFjY2VzcyB0byBiZSBlaXRoZXIgdGhyb3VnaCBhIGtub3duIGludGVyZmFjZSBvciBieSB1c2luZwogKiBkeW5hbWljIGludm9jYXRpb25zLiBUaGUgb3JpZ2luYWwgaW50ZW50IG9mIGBAcHJveHlgICh0byBpbXBsZW1lbnQgYSBjbGFzcwogKiB0aGF0IGlzbid0IGtub3duIHN0YXRpY2FsbHksIGFzIGRvY3VtZW50ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIHRleHQpLAogKiBpcyBub3Qgc3VwcG9ydGVkIGJ5IERhcnQgMi4KICogVG8gY29udGludWUgdG8gcGVyZm9ybSBkeW5hbWljIGludm9jYXRpb25zIG9uIGFuIG9iamVjdCwKICogaXQgc2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggYSByZWZlcmVuY2Ugb2YgdHlwZSBgZHluYW1pY2AuCiAqCiAqIFRoZSBhbm5vdGF0aW9uIGBAcHJveHlgIG1hcmtzIGEgY2xhc3MgYXMgaW1wbGVtZW50aW5nIG1lbWJlcnMgZHluYW1pY2FsbHkKICogdGhyb3VnaCBgbm9TdWNoTWV0aG9kYC4KICoKICogVGhlIGFubm90YXRpb24gYXBwbGllcyB0byBhbnkgY2xhc3MuIEl0IGlzIGluaGVyaXRlZCBieSBzdWJjbGFzc2VzIGZyb20gYm90aAogKiBzdXBlcmNsYXNzIGFuZCBpbnRlcmZhY2VzLgogKgogKiBJZiBhIGNsYXNzIGlzIGFubm90YXRlZCB3aXRoIGBAcHJveHlgLCBvciBpdCBpbXBsZW1lbnRzIGFueSBjbGFzcyB0aGF0IGlzCiAqIGFubm90YXRlZCwgdGhlbiBhbGwgbWVtYmVyIGFjY2Vzc2VzIGFyZSBhbGxvd2VkIG9uIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCiAqIEFzIHN1Y2gsIGl0IGlzIG5vdCBhIHN0YXRpYyB0eXBlIHdhcm5pbmcgdG8gYWNjZXNzIGFueSBtZW1iZXIgb2YgdGhlIG9iamVjdAogKiB3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIGNsYXNzLCBvciB0byBjYWxsIGEgbWV0aG9kIHdpdGggYSBkaWZmZXJlbnQKICogbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhbiBpdCBpcyBkZWNsYXJlZCB3aXRoLgogKgogKiBUaGUgYW5ub3RhdGlvbiBkb2VzIG5vdCBjaGFuZ2Ugd2hpY2ggY2xhc3NlcyB0aGUgYW5ub3RhdGVkIGNsYXNzIGltcGxlbWVudHMsCiAqIGFuZCBkb2VzIG5vdCBwcmV2ZW50IHN0YXRpYyB3YXJuaW5ncyBmb3IgYXNzaWduaW5nIGFuIG9iamVjdCB0byBhIHZhcmlhYmxlCiAqIHdpdGggYSBzdGF0aWMgdHlwZSBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIG9iamVjdC4KICoKICogVGhlIHN1cHByZXNzaW9uIG9mIHdhcm5pbmdzIG9ubHkgYWZmZWN0IHN0YXRpYyB0eXBlIHdhcm5pbmdzIGFib3V0CiAqIG1lbWJlciBhY2Nlc3MuCiAqIFRoZSBydW50aW1lIHR5cGUgb2YgdGhlIG9iamVjdCBpcyB1bmFmZmVjdGVkLgogKiBJdCBpcyBub3QgY29uc2lkZXJlZCB0byBpbXBsZW1lbnQgYW55IHNwZWNpYWwgaW50ZXJmYWNlcywKICogc28gYXNzaWduaW5nIGl0IHRvIGEgdHlwZWQgdmFyaWFibGUgbWF5IGZhaWwgaW4gY2hlY2tlZCBtb2RlLAogKiBhbmQgdGVzdGluZyBpdCB3aXRoIHRoZSBgaXNgIG9wZXJhdG9yCiAqIHdpbGwgb25seSByZXR1cm4gdHJ1ZSBmb3IgdHlwZXMgaXQgYWN0dWFsbHkgaW1wbGVtZW50cyBvciBleHRlbmRzLgogKiBBY2Nlc3NpbmcgYSBtZW1iZXIgd2hpY2ggaXNuJ3QgaW1wbGVtZW50ZWQgYnkgdGhlIGNsYXNzCiAqIHdpbGwgY2F1c2UgdGhlIGBub1N1Y2hNZXRob2RgIG1ldGhvZCB0byBiZSBjYWxsZWQgbm9ybWFsbHksCiAqIHRoZSBgQHByb3h5YCBhbm5vdGF0aW9uIG1lcmVseSBzdGF0ZXMgdGhlIGludGVudCB0byBoYW5kbGUgKHNvbWUgb2YpIHRob3NlCiAqIGBub1N1Y2hNZXRob2RgIGNhbGxzIGdyYWNlZnVsbHkuCiAqCiAqIEEgY2xhc3MgdGhhdCBtYXJrZWQgYXMgYEBwcm94eWAgc2hvdWxkIG92ZXJyaWRlIHRoZSBgbm9TdWNoTWV0aG9kYAogKiBkZWNsYXJlZCBvbiBbT2JqZWN0XS4KICoKICogVGhlIGludGVudCBvZiB0aGUgYEBwcm94eWAgbm90YXRpb24gaXMgdG8gY3JlYXRlIG9iamVjdHMgdGhhdCBpbXBsZW1lbnQgYQogKiB0eXBlIChvciBtdWx0aXBsZSB0eXBlcykgdGhhdCBhcmUgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS4gSWYgdGhlIHR5cGVzCiAqIGFyZSBrbm93biBhdCBjb21waWxlIHRpbWUsIGEgY2xhc3MgY2FuIGJlIHdyaXR0ZW4gdGhhdCBpbXBsZW1lbnRzIHRoZXNlCiAqIHR5cGVzLgogKi8KQGRlcHJlY2F0ZWQKY29uc3QgT2JqZWN0IHByb3h5ID0gX1Byb3h5KCk7CgovKioKICogQSBoaW50IHRvIHRvb2xzLgogKgogKiBUb29scyB0aGF0IHdvcmsgd2l0aCBEYXJ0IHByb2dyYW1zIG1heSBhY2NlcHQgaGludHMgdG8gZ3VpZGUgdGhlaXIgYmVoYXZpb3IKICogYXMgYHByYWdtYWAgYW5ub3RhdGlvbnMgb24gZGVjbGFyYXRpb25zLgogKiBFYWNoIHRvb2wgZGVjaWRlcyB3aGljaCBoaW50cyBpdCBhY2NlcHRzLCB3aGF0IHRoZXkgbWVhbiwgYW5kIHdoZXRoZXIgYW5kCiAqIGhvdyB0aGV5IGFwcGx5IHRvIHN1Yi1wYXJ0cyBvZiB0aGUgYW5ub3RhdGVkIGVudGl0eS4KICoKICogVG9vbHMgdGhhdCByZWNvZ25pemUgcHJhZ21hIGhpbnRzIHNob3VsZCBwaWNrIGEgcHJhZ21hIHByZWZpeCB0byBpZGVudGlmeQogKiB0aGUgdG9vbC4gVGhleSBzaG91bGQgcmVjb2duaXplIGFueSBoaW50IHdpdGggYSBbbmFtZV0gc3RhcnRpbmcgd2l0aCB0aGVpcgogKiBwcmVmaXggZm9sbG93ZWQgYnkgYDpgIGFzIGlmIGl0IHdhcyBpbnRlbmRlZCBmb3IgdGhhdCB0b29sLiBBIGhpbnQgd2l0aCBhCiAqIHByZWZpeCBmb3IgYW5vdGhlciB0b29sIHNob3VsZCBiZSBpZ25vcmVkICh1bmxlc3MgY29tcGF0aWJpbGl0eSB3aXRoIHRoYXQKICogb3RoZXIgdG9vbCBpcyBhIGdvYWwpLgogKgogKiBBIHRvb2wgbWF5IHJlY29nbml6ZSB1bnByZWZpeGVkIG5hbWVzIGFzIHdlbGwsIGlmIHRoZXkgd291bGQgcmVjb2duaXplIHRoYXQKICogbmFtZSB3aXRoIHRoZWlyIG93biBwcmVmaXggaW4gZnJvbnQuCiAqCiAqIElmIHRoZSBoaW50IGNhbiBiZSBwYXJhbWV0ZXJpemVkLCBhbiBleHRyYSBbb3B0aW9uc10gb2JqZWN0IGNhbiBiZSBhZGRlZCBhcyB3ZWxsLgogKgogKiBGb3IgZXhhbXBsZToKICoKICogYGBgZGFydAogKiBAcHJhZ21hKCdUb29sOnByYWdtYS1uYW1lJywgW3BhcmFtMSwgcGFyYW0yLCAuLi5dKQogKiBjbGFzcyBGb28geyB9CiAqCiAqIEBwcmFnbWEoJ090aGVyVG9vbDpvdGhlci1wcmFnbWEnKQogKiB2b2lkIGZvbygpIHsgfQogKiBgYGAKICoKICogSGVyZSBjbGFzcyBGb28gaXMgYW5ub3RhdGVkIHdpdGggYSBUb29sIHNwZWNpZmljIHByYWdtYSAncHJhZ21hLW5hbWUnIGFuZAogKiBmdW5jdGlvbiBmb28gaXMgYW5ub3RhdGVkIHdpdGggYSBwcmFnbWEgJ290aGVyLXByYWdtYScgc3BlY2lmaWMgdG8gT3RoZXJUb29sLgogKgogKi8KQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBwcmFnbWEgewogIC8qKgogICAqIFRoZSBuYW1lIG9mIHRoZSBoaW50LgogICAqCiAgICogQSBzdHJpbmcgdGhhdCBpcyByZWNvZ25pemVkIGJ5IG9uZSBvciBtb3JlIHRvb2xzLCBvciBzdWNoIGEgc3RyaW5nIHByZWZpeGVkCiAgICogYnkgYSB0b29sIGlkZW50aWZpZXIgYW5kIGEgY29sb24sIHdoaWNoIGlzIG9ubHkgcmVjb2duaXplZCBieSB0aGF0CiAgICogcGFydGljdWxhciB0b29sLgogICAqLwogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvKiogT3B0aW9uYWwgZXh0cmEgZGF0YSBwYXJhbWV0ZXJpemluZyB0aGUgaGludC4gKi8KICBmaW5hbCBPYmplY3Qgb3B0aW9uczsKCiAgLyoqIENyZWF0ZXMgYSBoaW50IG5hbWVkIFtuYW1lXSB3aXRoIG9wdGlvbmFsIFtvcHRpb25zXS4gKi8KICBjb25zdCBmYWN0b3J5IHByYWdtYShTdHJpbmcgbmFtZSwgW09iamVjdCBvcHRpb25zXSkgPSBwcmFnbWEuXzsKCiAgY29uc3QgcHJhZ21hLl8odGhpcy5uYW1lLCBbdGhpcy5vcHRpb25zXSk7Cn0KgPIATk48ARMBBEwDREEDTk0OA01PTEUDTz8DTUNQRiwDHgM8OkoDAzsDLEgfPU1MRFEDA049RgQTBkgFS1EOBhgBBkwqBVBQIAYiAUYhATcCAQQ7BDoBEhUCAQRHKQNLTj8DSUpCHgNLTh8DSVBCNANONAQlAQRDAyAEDBQeJwIBBD0DIAQMHwEPEgIBBEADSkROSB88QANNGwNQHgNNTk9PMgNQTjUDRhIxPUEpRjs/TiQDRhkDTU1LCgQMHwEEFANPLE04A01OTU0aA08oA1UDEAMLNhEDJRIHA01RAwQaDwYbBVFIFgYVATYYAT5CAS0CARpkYXJ0OmNvcmUvYW5ub3RhdGlvbnMuZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9iaWdpbnQuZGFydLGULy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEFuIGFyYml0cmFyaWx5IGxhcmdlIGludGVnZXIuCiAqLwphYnN0cmFjdCBjbGFzcyBCaWdJbnQgaW1wbGVtZW50cyBDb21wYXJhYmxlPEJpZ0ludD4gewogIGV4dGVybmFsIHN0YXRpYyBCaWdJbnQgZ2V0IHplcm87CiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCBnZXQgb25lOwogIGV4dGVybmFsIHN0YXRpYyBCaWdJbnQgZ2V0IHR3bzsKCiAgLyoqCiAgICogUGFyc2VzIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm5zIGl0cwogICAqIHZhbHVlLgogICAqCiAgICogVGhlIFtzb3VyY2VdIG11c3QgYmUgYSBub24tZW1wdHkgc2VxdWVuY2Ugb2YgYmFzZS1bcmFkaXhdIGRpZ2l0cywKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYSBtaW51cyBvciBwbHVzIHNpZ24gKCctJyBvciAnKycpLgogICAqCiAgICogVGhlIFtyYWRpeF0gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMi4uMzYuIFRoZSBkaWdpdHMgdXNlZCBhcmUKICAgKiBmaXJzdCB0aGUgZGVjaW1hbCBkaWdpdHMgMC4uOSwgYW5kIHRoZW4gdGhlIGxldHRlcnMgJ2EnLi4neicgd2l0aAogICAqIHZhbHVlcyAxMCB0aHJvdWdoIDM1LiBBbHNvIGFjY2VwdHMgdXBwZXItY2FzZSBsZXR0ZXJzIHdpdGggdGhlIHNhbWUKICAgKiB2YWx1ZXMgYXMgdGhlIGxvd2VyLWNhc2Ugb25lcy4KICAgKgogICAqIElmIG5vIFtyYWRpeF0gaXMgZ2l2ZW4gdGhlbiBpdCBkZWZhdWx0cyB0byAxMC4gSW4gdGhpcyBjYXNlLCB0aGUgW3NvdXJjZV0KICAgKiBkaWdpdHMgbWF5IGFsc28gc3RhcnQgd2l0aCBgMHhgLCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgaXMgaW50ZXJwcmV0ZWQKICAgKiBhcyBhIGhleGFkZWNpbWFsIGxpdGVyYWwsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW5zIHRoYXQgdGhlIGAweGAgaXMgaWdub3JlZAogICAqIGFuZCB0aGUgcmFkaXggaXMgaW5zdGVhZCBzZXQgdG8gMTYuCiAgICoKICAgKiBGb3IgYW55IGludCBgbmAgYW5kIHJhZGl4IGByYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYG4gPT0gaW50LnBhcnNlKG4udG9SYWRpeFN0cmluZyhyKSwgcmFkaXg6IHIpYC4KICAgKgogICAqIFRocm93cyBhIFtGb3JtYXRFeGNlcHRpb25dIGlmIHRoZSBbc291cmNlXSBpcyBub3QgYSB2YWxpZCBpbnRlZ2VyIGxpdGVyYWwsCiAgICogb3B0aW9uYWxseSBwcmVmaXhlZCBieSBhIHNpZ24uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCBwYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSk7CgogIC8qKgogICAqIFBhcnNlcyBbc291cmNlXSBhcyBhLCBwb3NzaWJseSBzaWduZWQsIGludGVnZXIgbGl0ZXJhbCBhbmQgcmV0dXJucyBpdHMKICAgKiB2YWx1ZS4KICAgKgogICAqIEFzIFtwYXJzZV0gZXhjZXB0IHRoYXQgdGhpcyBtZXRob2QgcmV0dXJucyBgbnVsbGAgaWYgdGhlIGlucHV0IGlzIG5vdAogICAqIHZhbGlkCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCB0cnlQYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSk7CgogIC8vLyBBbGxvY2F0ZXMgYSBiaWcgaW50ZWdlciBmcm9tIHRoZSBwcm92aWRlZCBbdmFsdWVdIG51bWJlci4KICBleHRlcm5hbCBmYWN0b3J5IEJpZ0ludC5mcm9tKG51bSB2YWx1ZSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgaW50ZWdlci4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgYHggPCAwID8gLXggOiB4YC4KICAgKi8KICBCaWdJbnQgYWJzKCk7CgogIC8qKgogICAqIFJldHVybiB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJlc3VsdCBvZiBuZWdhdGluZyBhbiBpbnRlZ2VyIGFsd2F5cyBoYXMgdGhlIG9wcG9zaXRlIHNpZ24sIGV4Y2VwdAogICAqIGZvciB6ZXJvLCB3aGljaCBpcyBpdHMgb3duIG5lZ2F0aW9uLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciAtKCk7CgogIC8vLyBBZGRpdGlvbiBvcGVyYXRvci4KICBCaWdJbnQgb3BlcmF0b3IgKyhCaWdJbnQgb3RoZXIpOwoKICAvLy8gU3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgQmlnSW50IG9wZXJhdG9yIC0oQmlnSW50IG90aGVyKTsKCiAgLy8vIE11bHRpcGxpY2F0aW9uIG9wZXJhdG9yLgogIEJpZ0ludCBvcGVyYXRvciAqKEJpZ0ludCBvdGhlcik7CgogIC8vLyBEaXZpc2lvbiBvcGVyYXRvci4KICBkb3VibGUgb3BlcmF0b3IgLyhCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBUcnVuY2F0aW5nIGRpdmlzaW9uIG9wZXJhdG9yLgogICAqCiAgICogUGVyZm9ybXMgYSB0cnVuY2F0aW5nIGludGVnZXIgZGl2aXNpb24sIHdoZXJlIHRoZSByZW1haW5kZXIgaXMgZGlzY2FyZGVkLgogICAqCiAgICogVGhlIHJlbWFpbmRlciBjYW4gYmUgY29tcHV0ZWQgdXNpbmcgdGhlIFtyZW1haW5kZXJdIG1ldGhvZC4KICAgKgogICAqIEV4YW1wbGVzOgogICAqIGBgYAogICAqIHZhciBzZXZlbiA9IG5ldyBCaWdJbnQuZnJvbSg3KTsKICAgKiB2YXIgdGhyZWUgPSBuZXcgQmlnSW50LmZyb20oMyk7CiAgICogc2V2ZW4gfi8gdGhyZWU7ICAgIC8vID0+IDIKICAgKiAoLXNldmVuKSB+LyB0aHJlZTsgLy8gPT4gLTIKICAgKiBzZXZlbiB+LyAtdGhyZWU7ICAgLy8gPT4gLTIKICAgKiBzZXZlbi5yZW1haW5kZXIodGhyZWUpOyAgICAvLyA9PiAxCiAgICogKC1zZXZlbikucmVtYWluZGVyKHRocmVlKTsgLy8gPT4gLTEKICAgKiBzZXZlbi5yZW1haW5kZXIoLXRocmVlKTsgICAvLyA9PiAxCiAgICogYGBgCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIH4vKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIEV1Y2xpZGVhbiBtb2R1bG8gb3BlcmF0b3IuCiAgICoKICAgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIEV1Y2xpZGVhbiBkaXZpc2lvbi4gVGhlIEV1Y2xpZGVhbiBkaXZpc2lvbiBvZgogICAqIHR3byBpbnRlZ2VycyBgYWAgYW5kIGBiYCB5aWVsZHMgdHdvIGludGVnZXJzIGBxYCBhbmQgYHJgIHN1Y2ggdGhhdAogICAqIGBhID09IGIgKiBxICsgcmAgYW5kIGAwIDw9IHIgPCBiLmFicygpYC4KICAgKgogICAqIFRoZSBzaWduIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBgcmAgaXMgYWx3YXlzIHBvc2l0aXZlLgogICAqCiAgICogU2VlIFtyZW1haW5kZXJdIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciAlKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgdHJ1bmNhdGluZyBkaXZpc2lvbiBvZiBgdGhpc2AgYnkgW290aGVyXS4KICAgKgogICAqIFRoZSByZXN1bHQgYHJgIG9mIHRoaXMgb3BlcmF0aW9uIHNhdGlzZmllczoKICAgKiBgdGhpcyA9PSAodGhpcyB+LyBvdGhlcikgKiBvdGhlciArIHJgLgogICAqIEFzIGEgY29uc2VxdWVuY2UgdGhlIHJlbWFpbmRlciBgcmAgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZXIgYHRoaXNgLgogICAqLwogIEJpZ0ludCByZW1haW5kZXIoQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSBsZWZ0IGJ5IFtzaGlmdEFtb3VudF0uCiAgICoKICAgKiBTaGlmdGluZyB0byB0aGUgbGVmdCBtYWtlcyB0aGUgbnVtYmVyIGxhcmdlciwgZWZmZWN0aXZlbHkgbXVsdGlwbHlpbmcKICAgKiB0aGUgbnVtYmVyIGJ5IGBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogVGhlcmUgaXMgbm8gbGltaXQgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdC4gSXQgbWF5IGJlIHJlbGV2YW50IHRvCiAgICogbGltaXQgaW50ZXJtZWRpYXRlIHZhbHVlcyBieSB1c2luZyB0aGUgImFuZCIgb3BlcmF0b3Igd2l0aCBhIHN1aXRhYmxlCiAgICogbWFzay4KICAgKgogICAqIEl0IGlzIGFuIGVycm9yIGlmIFtzaGlmdEFtb3VudF0gaXMgbmVnYXRpdmUuCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIDw8KGludCBzaGlmdEFtb3VudCk7CgogIC8qKgogICAqIFNoaWZ0IHRoZSBiaXRzIG9mIHRoaXMgaW50ZWdlciB0byB0aGUgcmlnaHQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSByaWdodCBtYWtlcyB0aGUgbnVtYmVyIHNtYWxsZXIgYW5kIGRyb3BzIHRoZSBsZWFzdAogICAqIHNpZ25pZmljYW50IGJpdHMsIGVmZmVjdGl2ZWx5IGRvaW5nIGFuIGludGVnZXIgZGl2aXNpb24gYnkKICAgKmBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBCaWdJbnQgb3BlcmF0b3IgPj4oaW50IHNoaWZ0QW1vdW50KTsKCiAgLyoqCiAgICogQml0LXdpc2UgYW5kIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggb25seSB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluCiAgICogYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIE9mIGJvdGggb3BlcmFuZHMgYXJlIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UKICAgKiB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZS4KICAgKi8KICBCaWdJbnQgb3BlcmF0b3IgJihCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBCaXQtd2lzZSBvciBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIHRoZSBiaXRzIHNldCB0aGF0IGFyZSBzZXQgaW4gZWl0aGVyCiAgICogb2YgYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBJZiBib3RoIG9wZXJhbmRzIGFyZSBub24tbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgbm9uLW5lZ2F0aXZlLAogICAqIG90aGVyd2lzZSB0aGUgcmVzdWx0IHVzIG5lZ2F0aXZlLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciB8KEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIEJpdC13aXNlIGV4Y2x1c2l2ZS1vciBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIHRoZSBiaXRzIHNldCB0aGF0IGFyZSBzZXQgaW4gb25lLAogICAqIGJ1dCBub3QgYm90aCwgb2YgYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBJZiB0aGUgb3BlcmFuZHMgaGF2ZSB0aGUgc2FtZSBzaWduLCB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZSwKICAgKiBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KICAgKi8KICBCaWdJbnQgb3BlcmF0b3IgXihCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBUaGUgYml0LXdpc2UgbmVnYXRlIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYHRoaXNgIGFzIGEgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudCBpbnRlZ2VyLAogICAqIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgb3Bwb3NpdGUgYml0cyBzZXQuCiAgICoKICAgKiBUaGlzIG1hcHMgYW55IGludGVnZXIgYHhgIHRvIGAteCAtIDFgLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciB+KCk7CgogIC8qKiBSZWxhdGlvbmFsIGxlc3MgdGhhbiBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yIDwoQmlnSW50IG90aGVyKTsKCiAgLyoqIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPD0oQmlnSW50IG90aGVyKTsKCiAgLyoqIFJlbGF0aW9uYWwgZ3JlYXRlciB0aGFuIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPihCaWdJbnQgb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA+PShCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIHRvIGBvdGhlcmAuCiAgICoKICAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIGlmIGB0aGlzYCBpcyBsZXNzIHRoYW4gYG90aGVyYCwgemVybyBpZiB0aGV5IGFyZQogICAqIGVxdWFsLCBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgaWYgYHRoaXNgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLgogICAqLwogIGludCBjb21wYXJlVG8oQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCB0byBzdG9yZSB0aGlzIGJpZyBpbnRlZ2VyLgogICAqCiAgICogVGhlIG51bWJlciBvZiBiaXRzIGV4Y2x1ZGVzIHRoZSBzaWduIGJpdCwgd2hpY2ggZ2l2ZXMgdGhlIG5hdHVyYWwgbGVuZ3RoCiAgICogZm9yIG5vbi1uZWdhdGl2ZSAodW5zaWduZWQpIHZhbHVlcy4gIE5lZ2F0aXZlIHZhbHVlcyBhcmUgY29tcGxlbWVudGVkIHRvCiAgICogcmV0dXJuIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJpdCB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgc2lnbiBiaXQuCiAgICoKICAgKiBUbyBmaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gc3RvcmUgdGhlIHZhbHVlIGFzIGEgc2lnbmVkIHZhbHVlLAogICAqIGFkZCBvbmUsIGkuZS4gdXNlIGB4LmJpdExlbmd0aCArIDFgLgogICAqCiAgICogYGBgCiAgICogeC5iaXRMZW5ndGggPT0gKC14LTEpLmJpdExlbmd0aAogICAqCiAgICogbmV3IEJpZ0ludC5mcm9tKDMpLmJpdExlbmd0aCA9PSAyOyAgIC8vIDAwMDAwMDExCiAgICogbmV3IEJpZ0ludC5mcm9tKDIpLmJpdExlbmd0aCA9PSAyOyAgIC8vIDAwMDAwMDEwCiAgICogbmV3IEJpZ0ludC5mcm9tKDEpLmJpdExlbmd0aCA9PSAxOyAgIC8vIDAwMDAwMDAxCiAgICogbmV3IEJpZ0ludC5mcm9tKDApLmJpdExlbmd0aCA9PSAwOyAgIC8vIDAwMDAwMDAwCiAgICogbmV3IEJpZ0ludC5mcm9tKC0xKS5iaXRMZW5ndGggPT0gMDsgIC8vIDExMTExMTExCiAgICogbmV3IEJpZ0ludC5mcm9tKC0yKS5iaXRMZW5ndGggPT0gMTsgIC8vIDExMTExMTEwCiAgICogbmV3IEJpZ0ludC5mcm9tKC0zKS5iaXRMZW5ndGggPT0gMjsgIC8vIDExMTExMTAxCiAgICogbmV3IEJpZ0ludC5mcm9tKC00KS5iaXRMZW5ndGggPT0gMjsgIC8vIDExMTExMTAwCiAgICogYGBgCiAgICovCiAgaW50IGdldCBiaXRMZW5ndGg7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNpZ24gb2YgdGhpcyBiaWcgaW50ZWdlci4KICAgKgogICAqIFJldHVybnMgMCBmb3IgemVybywgLTEgZm9yIHZhbHVlcyBsZXNzIHRoYW4gemVybyBhbmQKICAgKiArMSBmb3IgdmFsdWVzIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqLwogIGludCBnZXQgc2lnbjsKCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWcgaW50ZWdlciBpcyBldmVuLgogIGJvb2wgZ2V0IGlzRXZlbjsKCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWcgaW50ZWdlciBpcyBvZGQuCiAgYm9vbCBnZXQgaXNPZGQ7CgogIC8vLyBXaGV0aGVyIHRoaXMgbnVtYmVyIGlzIG5lZ2F0aXZlLgogIGJvb2wgZ2V0IGlzTmVnYXRpdmU7CgogIC8qKgogICAqIFJldHVybnMgYHRoaXNgIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdLgogICAqCiAgICogUmV0dXJucyBbb25lXSBpZiB0aGUgW2V4cG9uZW50XSBlcXVhbHMgMC4KICAgKgogICAqIFRoZSBbZXhwb25lbnRdIG11c3Qgb3RoZXJ3aXNlIGJlIHBvc2l0aXZlLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1hdGhlbWF0aWNhbCByZXN1bHQgb2YgdGhpcyB0byB0aGUgcG93ZXIKICAgKiBbZXhwb25lbnRdLCBvbmx5IGxpbWl0ZWQgYnkgdGhlIGF2YWlsYWJsZSBtZW1vcnkuCiAgICovCiAgQmlnSW50IHBvdyhpbnQgZXhwb25lbnQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgaW50ZWdlciB0byB0aGUgcG93ZXIgb2YgW2V4cG9uZW50XSBtb2R1bG8gW21vZHVsdXNdLgogICAqCiAgICogVGhlIFtleHBvbmVudF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIFttb2R1bHVzXSBtdXN0IGJlCiAgICogcG9zaXRpdmUuCiAgICovCiAgQmlnSW50IG1vZFBvdyhCaWdJbnQgZXhwb25lbnQsIEJpZ0ludCBtb2R1bHVzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHRoaXMgYmlnIGludGVnZXIKICAgKiBtb2R1bG8gW21vZHVsdXNdLgogICAqCiAgICogVGhlIFttb2R1bHVzXSBtdXN0IGJlIHBvc2l0aXZlLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgbm8gbW9kdWxhciBpbnZlcnNlIGV4aXN0cy4KICAgKi8KICAvLyBSZXR1cm5zIDEvdGhpcyAlIG1vZHVsdXMsIHdpdGggbW9kdWx1cyA+IDAuCiAgQmlnSW50IG1vZEludmVyc2UoQmlnSW50IG1vZHVsdXMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0aGlzIGJpZyBpbnRlZ2VyIGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgZWl0aGVyIG51bWJlciBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB0aGUgbnVtZXJpY2FsbHkgZ3JlYXRlc3QKICAgKiBpbnRlZ2VyIGRpdmlkaW5nIGJvdGggYHRoaXNgIGFuZCBgb3RoZXJgLgogICAqCiAgICogVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIGlzIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciwKICAgKiBzbyBgeC5nY2QoeSlgIGlzICBhbHdheXMgdGhlIHNhbWUgYXMgYHkuZ2NkKHgpYC4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIGB4LmdjZCh4KWAgaXMgYHguYWJzKClgLgogICAqCiAgICogSWYgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAgaXMgemVybywgdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCiAgICovCiAgQmlnSW50IGdjZChCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBzaWduaWZpY2FudCBbd2lkdGhdIGJpdHMgb2YgdGhpcyBiaWcgaW50ZWdlciBhcyBhCiAgICogbm9uLW5lZ2F0aXZlIG51bWJlciAoaS5lLiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbikuICBUaGUgcmV0dXJuZWQgdmFsdWUgaGFzCiAgICogemVyb3MgaW4gYWxsIGJpdCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIGBgYAogICAqIG5ldyBCaWdJbnQuZnJvbSgtMSkudG9VbnNpZ25lZCg1KSA9PSAzMSAgIC8vIDExMTExMTExICAtPiAgMDAwMTExMTEKICAgKiBgYGAKICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIGFyaXRobWV0aWMgZnJvbSBsb3cgbGV2ZWwgbGFuZ3VhZ2VzLgogICAqIEZvciBleGFtcGxlLCB0byBpbmNyZW1lbnQgYW4gOCBiaXQgcXVhbnRpdHk6CiAgICoKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1Vuc2lnbmVkKDgpOwogICAqIGBgYAogICAqCiAgICogYHFgIHdpbGwgY291bnQgZnJvbSBgMGAgdXAgdG8gYDI1NWAgYW5kIHRoZW4gd3JhcCBhcm91bmQgdG8gYDBgLgogICAqCiAgICogSWYgdGhlIGlucHV0IGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcyB0aGUKICAgKiBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YCBpcwogICAqIGdpdmVuIGJ5IGB4LmJpdExlbmd0aGAsIGkuZS4KICAgKgogICAqIGBgYAogICAqIHggPT0geC50b1Vuc2lnbmVkKHguYml0TGVuZ3RoKTsKICAgKiBgYGAKICAgKi8KICBCaWdJbnQgdG9VbnNpZ25lZChpbnQgd2lkdGgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBzaWduaWZpY2FudCBbd2lkdGhdIGJpdHMgb2YgdGhpcyBpbnRlZ2VyLCBleHRlbmRpbmcgdGhlCiAgICogaGlnaGVzdCByZXRhaW5lZCBiaXQgdG8gdGhlIHNpZ24uICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRydW5jYXRpbmcgdGhlIHZhbHVlCiAgICogdG8gZml0IGluIFt3aWR0aF0gYml0cyB1c2luZyBhbiBzaWduZWQgMi1zIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uICBUaGUKICAgKiByZXR1cm5lZCB2YWx1ZSBoYXMgdGhlIHNhbWUgYml0IHZhbHVlIGluIGFsbCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIGBgYAogICAqIHZhciBiaWcxNSA9IG5ldyBCaWdJbnQuZnJvbSgxNSk7CiAgICogdmFyIGJpZzE2ID0gbmV3IEJpZ0ludC5mcm9tKDE2KTsKICAgKiB2YXIgYmlnMjM5ID0gbmV3IEJpZ0ludC5mcm9tKDIzOSk7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYtLXNpZ24gYml0LVYKICAgKiBiaWcxNi50b1NpZ25lZCg1KSA9PSAtYmlnMTYgICAvLyAgMDAwMTAwMDAgLT4gMTExMTAwMDAKICAgKiBiaWcyMzkudG9TaWduZWQoNSkgPT0gYmlnMTUgICAvLyAgMTExMDExMTEgLT4gMDAwMDExMTEKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXgogICAqIGBgYAogICAqCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBzaWduZWQgcXVhbnRpdHk6CiAgICoKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1NpZ25lZCg4KTsKICAgKiBgYGAKICAgKgogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAxMjdgLCB3cmFwIHRvIGAtMTI4YCBhbmQgY291bnQgYmFjayB1cCB0bwogICAqIGAxMjdgLgogICAqCiAgICogSWYgdGhlIGlucHV0IHZhbHVlIGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcwogICAqIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YAogICAqIGlzIGB4LmJpdExlbmd0aCArIDFgLCBpLmUuCiAgICoKICAgKiBgYGAKICAgKiB4ID09IHgudG9TaWduZWQoeC5iaXRMZW5ndGggKyAxKTsKICAgKiBgYGAKICAgKi8KICBCaWdJbnQgdG9TaWduZWQoaW50IHdpZHRoKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIGJpZyBpbnRlZ2VyIGNhbiBiZSByZXByZXNlbnRlZCBhcyBhbiBgaW50YCB3aXRob3V0IGxvc2luZwogICAqIHByZWNpc2lvbi4KICAgKgogICAqIFdhcm5pbmc6IHRoaXMgZnVuY3Rpb24gbWF5IGdpdmUgYSBkaWZmZXJlbnQgcmVzdWx0IG9uCiAgICogZGFydDJqcywgZGV2IGNvbXBpbGVyLCBhbmQgdGhlIFZNLCBkdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGluCiAgICogaW50ZWdlciBwcmVjaXNpb24uCiAgICovCiAgYm9vbCBnZXQgaXNWYWxpZEludDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIFtCaWdJbnRdIGFzIGFuIFtpbnRdLgogICAqCiAgICogSWYgdGhlIG51bWJlciBkb2VzIG5vdCBmaXQsIGNsYW1wcyB0byB0aGUgbWF4IChvciBtaW4pCiAgICogaW50ZWdlci4KICAgKgogICAqIFdhcm5pbmc6IHRoZSBjbGFtcGluZyBiZWhhdmVzIGRpZmZlcmVudGx5IG9uIGRhcnQyanMsIGRldgogICAqIGNvbXBpbGVyLCBhbmQgdGhlIFZNLCBkdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGluIGludGVnZXIKICAgKiBwcmVjaXNpb24uCiAgICovCiAgaW50IHRvSW50KCk7CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBbQmlnSW50XSBhcyBhIFtkb3VibGVdLgogICAqCiAgICogSWYgdGhlIG51bWJlciBpcyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIFtkb3VibGVdLCBhbgogICAqIGFwcHJveGltYXRpb24gaXMgcmV0dXJuZWQuIEZvciBudW1lcmljYWxseSBsYXJnZSBpbnRlZ2VycywgdGhlCiAgICogYXBwcm94aW1hdGlvbiBtYXkgYmUgaW5maW5pdGUuCiAgICovCiAgZG91YmxlIHRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgYSBTdHJpbmctcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmluZyBpcyBwYXJzYWJsZSBieSBbcGFyc2VdLgogICAqIEZvciBhbnkgYEJpZ0ludGAgYGlgLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQKICAgKiBgaSA9PSBCaWdJbnQucGFyc2UoaS50b1N0cmluZygpKWAuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIENvbnZlcnRzIFt0aGlzXSB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBpbiB0aGUgZ2l2ZW4gW3JhZGl4XS4KICAgKgogICAqIEluIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGxvd2VyLWNhc2UgbGV0dGVycyBhcmUgdXNlZCBmb3IgZGlnaXRzIGFib3ZlCiAgICogJzknLCB3aXRoICdhJyBiZWluZyAxMCBhbiAneicgYmVpbmcgMzUuCiAgICoKICAgKiBUaGUgW3JhZGl4XSBhcmd1bWVudCBtdXN0IGJlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDIgdG8gMzYuCiAgICovCiAgU3RyaW5nIHRvUmFkaXhTdHJpbmcoaW50IHJhZGl4KTsKfQqBoABOTjwBEwEEIQQ2IyIiAQZMDAVHQQVBR0kkBU9OUCkFOjUFUCQGPAEGTAwFSwsGPwFAKwEGMQVGBhABBjAFTCoGFwEZIwEcIwEfIwEZIwEGIwVPBUEFDwklJSAhISgpKAkGJAEGIAVQSC4FPAVDBiMBBkwFMSxRBiIBBkIFSykFSEsLBTIGJwEGQwVIQBoFMgYnAQYcBUxNHQVGIQYjAQYbBUxPGwVEJwYjAQYlBUxNKQVFJwYjAQYjBUY4BSwGFwEoIQExIgErIQE0IgEGHwVQRQYfAQZMBU5OTgVNKgUJJQU2NjY2NjY2NgkGFQEGKwU6JgYQASgTAScSAScXAQYwBS8FMAVQNwYcAQZHBT8PBjIBBkQXBSUFMgYxJQEGSgVKLwU+NgUzBUIGHAEGSVE1BQlJCQVRMgUJIAkFRgVNUCIFCSUJBiABBk9RUFEFCSYmKDg8PDgJBVE5BQkeCQVODAVPUSAFCScJBh4BBkwQBTtCGAYXAQYoBTwOBT89EAYPAQYqBTpEJAYVAQY2BTExKAYVAQZGBVAtBUMGIwIBFWRhcnQ6Y29yZS9iaWdpbnQuZGFydCpvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9ib29sLmRhcnSKvS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBUaGUgcmVzZXJ2ZWQgd29yZHMgYHRydWVgIGFuZCBgZmFsc2VgIGRlbm90ZSBvYmplY3RzIHRoYXQgYXJlIHRoZSBvbmx5IHR3bwogKiBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcy4KICoKICogSXQgaXMgYSBjb21waWxlLXRpbWUgZXJyb3IgZm9yIGEgY2xhc3MgdG8gYXR0ZW1wdCB0byBleHRlbmQgb3IgaW1wbGVtZW50CiAqIGJvb2wuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIGJvb2wgewogIC8qKgogICAqIFJldHVybnMgdGhlIGJvb2xlYW4gdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IGRlY2xhcmF0aW9uIFtuYW1lXS4KICAgKgogICAqIFRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBkZWNsYXJhdGlvbiBpcyBgdHJ1ZWAgaWYgdGhlIGRlY2xhcmVkIHZhbHVlIGlzCiAgICogdGhlIHN0cmluZyBgInRydWUiYCwgYW5kIGBmYWxzZWAgaWYgdGhlIHZhbHVlIGlzIGAiZmFsc2UiYC4KICAgKgogICAqIEluIGFsbCBvdGhlciBjYXNlcywgaW5jbHVkaW5nIHdoZW4gdGhlcmUgaXMgbm8gZGVjbGFyYXRpb24gZm9yIGBuYW1lYCwKICAgKiB0aGUgcmVzdWx0IGlzIHRoZSBbZGVmYXVsdFZhbHVlXS4KICAgKgogICAqIFRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgd291bGQgYmUgcmV0dXJuZWQgYnk6CiAgICogYGBgZGFydAogICAqIChjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KG5hbWUpID09ICJ0cnVlIikKICAgKiAgICAgPyB0cnVlCiAgICogICAgIDogKGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnQobmFtZSkgPT0gImZhbHNlIikKICAgKiAgICAgICAgID8gZmFsc2UKICAgKiAgICAgICAgIDogZGVmYXVsdFZhbHVlCiAgICogYGBgCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogY29uc3QgbG9nZ2luZ0ZsYWcgPSBjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgibG9nZ2luZyIpOwogICAqIGBgYAogICAqIElmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCB0cnV0aC1zdHJpbmcgdGhhbiBgInRydWUiYCwgeW91IGNhbiB1c2UgdGhlCiAgICogW1N0cmluZy5mcm9tRW52aXJvbm1lbnRdIGNvbnN0cnVjdG9yIGRpcmVjdGx5OgogICAqIGBgYGRhcnQKICAgKiBjb25zdCBpc0xvZ2dpbmdPbiA9IChjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KCJsb2dnaW5nIikgPT0gIm9uIik7CiAgICogYGBgCiAgICovCiAgLy8gVGhlIC5mcm9tRW52aXJvbm1lbnQoKSBjb25zdHJ1Y3RvcnMgYXJlIHNwZWNpYWwgaW4gdGhhdCB3ZSBkbyBub3Qgd2FudAogIC8vIHVzZXJzIHRvIGNhbGwgdGhlbSB1c2luZyAibmV3Ii4gV2UgcHJvaGliaXQgdGhhdCBieSBnaXZpbmcgdGhlbSBib2RpZXMKICAvLyB0aGF0IHRocm93LCBldmVuIHRob3VnaCBjb25zdCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgYm9kaWVzLgogIC8vIERpc2FibGUgdGhvc2Ugc3RhdGljIGVycm9ycy4KICAvL2lnbm9yZTogY29uc3RfY29uc3RydWN0b3Jfd2l0aF9ib2R5CiAgLy9pZ25vcmU6IGNvbnN0X2ZhY3RvcnkKICBleHRlcm5hbCBjb25zdCBmYWN0b3J5IGJvb2wuZnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZX0pOwoKICBleHRlcm5hbCBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvLy8gVGhlIGxvZ2ljYWwgY29uanVuY3Rpb24gKCJhbmQiKSBvZiB0aGlzIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBib3RoIHRoaXMgYW5kIFtvdGhlcl0gYXJlIGB0cnVlYCwgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLgogIC8vVE9ETyhscm4pOiBSZW1vdmUgImFzIGJvb2wiIGluIERhcnQgMi4KICBAU2luY2UoIjIuMSIpCiAgYm9vbCBvcGVyYXRvciAmKGJvb2wgb3RoZXIpID0+IChvdGhlciBhcyBib29sKSAmJiB0aGlzOwoKICAvLy8gVGhlIGxvZ2ljYWwgZGlzanVuY3Rpb24gKCJpbmNsdXNpdmUgb3IiKSBvZiB0aGlzIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBlaXRoZXIgdGhpcyBvciBbb3RoZXJdIGlzIGB0cnVlYCwgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLgogIEBTaW5jZSgiMi4xIikKICBib29sIG9wZXJhdG9yIHwoYm9vbCBvdGhlcikgPT4gKG90aGVyIGFzIGJvb2wpIHx8IHRoaXM7CgogIC8vLyBUaGUgbG9naWNhbCBleGNsdXNpdmUgZGlzanVuY3Rpb24gKCJleGNsdXNpdmUgb3IiKSBvZiB0aGlzIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhpcyBhbmQgW290aGVyXSBhcmUgbmVpdGhlciBib3RoIGB0cnVlYCBub3IgYm90aCBgZmFsc2VgLgogIEBTaW5jZSgiMi4xIikKICBib29sIG9wZXJhdG9yIF4oYm9vbCBvdGhlcikgPT4gIShvdGhlciBhcyBib29sKSA9PSB0aGlzOwoKICAvKioKICAgKiBSZXR1cm5zIGVpdGhlciBgInRydWUiYCBmb3IgYHRydWVgIGFuZCBgImZhbHNlImAgZm9yIGBmYWxzZWAuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuIHRoaXMgPyAidHJ1ZSIgOiAiZmFsc2UiOwogIH0KfQpRAE5OPAETAQROHANMCQQaDQZGBU1BBUwnBTUNNBA7FRwJDg1ACVA0DUwJBkxMUCIoGjskAR0BOwZRKxA6AUQGURA6AU4GURA7AQZDBhYkBAIBE2RhcnQ6Y29yZS9ib29sLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9ib29sX3BhdGNoLmRhcnSCDC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgYm9vbCB7CiAgQHBhdGNoCiAgY29uc3QgZmFjdG9yeSBib29sLmZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSwge2Jvb2wgZGVmYXVsdFZhbHVlOiBmYWxzZX0pCiAgICAgIG5hdGl2ZSAiQm9vbF9mcm9tRW52aXJvbm1lbnQiOwoKICBAcGF0Y2gKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRoaXMgPyAxMjMxIDogMTIzNzsKCiAgaW50IGdldCBfaWRlbnRpdHlIYXNoQ29kZSA9PiB0aGlzID8gMTIzMSA6IDEyMzc7Cn0KFABOTjwBHgEHGg0JTiUBCSoBMwIBH2RhcnQ6Y29yZS1wYXRjaC9ib29sX3BhdGNoLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvZGF0ZV90aW1lLmRhcnTAAGvyLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEFuIGluc3RhbnQgaW4gdGltZSwgc3VjaCBhcyBKdWx5IDIwLCAxOTY5LCA4OjE4cG0gR01ULgogKgogKiBEYXRlVGltZXMgY2FuIHJlcHJlc2VudCB0aW1lIHZhbHVlcyB0aGF0IGFyZSBhdCBhIGRpc3RhbmNlIG9mIGF0IG1vc3QKICogMTAwLDAwMCwwMDAgZGF5cyBmcm9tIGVwb2NoICgxOTcwLTAxLTAxIFVUQyk6IC0yNzE4MjEtMDQtMjAgdG8gMjc1NzYwLTA5LTEzLgogKgogKiBDcmVhdGUgYSBEYXRlVGltZSBvYmplY3QgYnkgdXNpbmcgb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMKICogb3IgYnkgcGFyc2luZyBhIGNvcnJlY3RseSBmb3JtYXR0ZWQgc3RyaW5nLAogKiB3aGljaCBjb21wbGllcyB3aXRoIGEgc3Vic2V0IG9mIElTTyA4NjAxLgogKiBOb3RlIHRoYXQgaG91cnMgYXJlIHNwZWNpZmllZCBiZXR3ZWVuIDAgYW5kIDIzLAogKiBhcyBpbiBhIDI0LWhvdXIgY2xvY2suCiAqIEZvciBleGFtcGxlOgogKgogKiBgYGAKICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICogdmFyIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lLnV0YygxOTg5LCAxMSwgOSk7CiAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOyAgLy8gODoxOHBtCiAqIGBgYAogKgogKiBBIERhdGVUaW1lIG9iamVjdCBpcyBhbmNob3JlZCBlaXRoZXIgaW4gdGhlIFVUQyB0aW1lIHpvbmUKICogb3IgaW4gdGhlIGxvY2FsIHRpbWUgem9uZSBvZiB0aGUgY3VycmVudCBjb21wdXRlcgogKiB3aGVuIHRoZSBvYmplY3QgaXMgY3JlYXRlZC4KICoKICogT25jZSBjcmVhdGVkLCBuZWl0aGVyIHRoZSB2YWx1ZSBub3IgdGhlIHRpbWUgem9uZQogKiBvZiBhIERhdGVUaW1lIG9iamVjdCBtYXkgYmUgY2hhbmdlZC4KICoKICogWW91IGNhbiB1c2UgcHJvcGVydGllcyB0byBnZXQKICogdGhlIGluZGl2aWR1YWwgdW5pdHMgb2YgYSBEYXRlVGltZSBvYmplY3QuCiAqCiAqIGBgYAogKiBhc3NlcnQoYmVybGluV2FsbEZlbGwubW9udGggPT0gMTEpOwogKiBhc3NlcnQobW9vbkxhbmRpbmcuaG91ciA9PSAyMCk7CiAqIGBgYAogKgogKiBGb3IgY29udmVuaWVuY2UgYW5kIHJlYWRhYmlsaXR5LAogKiB0aGUgRGF0ZVRpbWUgY2xhc3MgcHJvdmlkZXMgYSBjb25zdGFudCBmb3IgZWFjaCBkYXkgYW5kIG1vbnRoCiAqIG5hbWUgLSBmb3IgZXhhbXBsZSwgW2F1Z3VzdF0gYW5kIFtmcmlkYXldLgogKiBZb3UgY2FuIHVzZSB0aGVzZSBjb25zdGFudHMgdG8gaW1wcm92ZSBjb2RlIHJlYWRhYmlsaXR5OgogKgogKiBgYGAKICogdmFyIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lLnV0YygxOTg5LCBEYXRlVGltZS5ub3ZlbWJlciwgOSk7CiAqIGFzc2VydChiZXJsaW5XYWxsRmVsbC53ZWVrZGF5ID09IERhdGVUaW1lLnRodXJzZGF5KTsKICogYGBgCiAqCiAqIERheSBhbmQgbW9udGggdmFsdWVzIGJlZ2luIGF0IDEsIGFuZCB0aGUgd2VlayBzdGFydHMgb24gTW9uZGF5LgogKiBUaGF0IGlzLCB0aGUgY29uc3RhbnRzIFtqYW51YXJ5XSBhbmQgW21vbmRheV0gYXJlIGJvdGggMS4KICoKICogIyMgV29ya2luZyB3aXRoIFVUQyBhbmQgbG9jYWwgdGltZQogKgogKiBBIERhdGVUaW1lIG9iamVjdCBpcyBpbiB0aGUgbG9jYWwgdGltZSB6b25lCiAqIHVubGVzcyBleHBsaWNpdGx5IGNyZWF0ZWQgaW4gdGhlIFVUQyB0aW1lIHpvbmUuCiAqCiAqIGBgYAogKiB2YXIgZERheSA9IG5ldyBEYXRlVGltZS51dGMoMTk0NCwgNiwgNik7CiAqIGBgYAogKgogKiBVc2UgW2lzVXRjXSB0byBkZXRlcm1pbmUgd2hldGhlciBhIERhdGVUaW1lIG9iamVjdCBpcyBiYXNlZCBpbiBVVEMuCiAqIFVzZSB0aGUgbWV0aG9kcyBbdG9Mb2NhbF0gYW5kIFt0b1V0Y10KICogdG8gZ2V0IHRoZSBlcXVpdmFsZW50IGRhdGUvdGltZSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIG90aGVyIHRpbWUgem9uZS4KICogVXNlIFt0aW1lWm9uZU5hbWVdIHRvIGdldCBhbiBhYmJyZXZpYXRlZCBuYW1lIG9mIHRoZSB0aW1lIHpvbmUKICogZm9yIHRoZSBEYXRlVGltZSBvYmplY3QuCiAqIFRvIGZpbmQgdGhlIGRpZmZlcmVuY2UKICogYmV0d2VlbiBVVEMgYW5kIHRoZSB0aW1lIHpvbmUgb2YgYSBEYXRlVGltZSBvYmplY3QKICogY2FsbCBbdGltZVpvbmVPZmZzZXRdLgogKgogKiAjIyBDb21wYXJpbmcgRGF0ZVRpbWUgb2JqZWN0cwogKgogKiBUaGUgRGF0ZVRpbWUgY2xhc3MgY29udGFpbnMgc2V2ZXJhbCBoYW5keSBtZXRob2RzLAogKiBzdWNoIGFzIFtpc0FmdGVyXSwgW2lzQmVmb3JlXSwgYW5kIFtpc0F0U2FtZU1vbWVudEFzXSwKICogZm9yIGNvbXBhcmluZyBEYXRlVGltZSBvYmplY3RzLgogKgogKiBgYGAKICogYXNzZXJ0KGJlcmxpbldhbGxGZWxsLmlzQWZ0ZXIobW9vbkxhbmRpbmcpID09IHRydWUpOwogKiBhc3NlcnQoYmVybGluV2FsbEZlbGwuaXNCZWZvcmUobW9vbkxhbmRpbmcpID09IGZhbHNlKTsKICogYGBgCiAqCiAqICMjIFVzaW5nIERhdGVUaW1lIHdpdGggRHVyYXRpb24KICoKICogVXNlIHRoZSBbYWRkXSBhbmQgW3N1YnRyYWN0XSBtZXRob2RzIHdpdGggYSBbRHVyYXRpb25dIG9iamVjdAogKiB0byBjcmVhdGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IGJhc2VkIG9uIGFub3RoZXIuCiAqIEZvciBleGFtcGxlLCB0byBmaW5kIHRoZSBkYXRlIHRoYXQgaXMgc2l4dHkgZGF5cyAoMjQgKiA2MCBob3VycykgYWZ0ZXIgdG9kYXksCiAqIHdyaXRlOgogKgogKiBgYGAKICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICogdmFyIHNpeHR5RGF5c0Zyb21Ob3cgPSBub3cuYWRkKG5ldyBEdXJhdGlvbihkYXlzOiA2MCkpOwogKiBgYGAKICoKICogVG8gZmluZCBvdXQgaG93IG11Y2ggdGltZSBpcyBiZXR3ZWVuIHR3byBEYXRlVGltZSBvYmplY3RzIHVzZQogKiBbZGlmZmVyZW5jZV0sIHdoaWNoIHJldHVybnMgYSBbRHVyYXRpb25dIG9iamVjdDoKICoKICogYGBgCiAqIHZhciBkaWZmZXJlbmNlID0gYmVybGluV2FsbEZlbGwuZGlmZmVyZW5jZShtb29uTGFuZGluZyk7CiAqIGFzc2VydChkaWZmZXJlbmNlLmluRGF5cyA9PSA3NDE2KTsKICogYGBgCiAqCiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGVzIGluIGRpZmZlcmVudCB0aW1lIHpvbmVzCiAqIGlzIGp1c3QgdGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBiZXR3ZWVuIHRoZSB0d28gcG9pbnRzIGluIHRpbWUuCiAqIEl0IGRvZXNuJ3QgdGFrZSBjYWxlbmRhciBkYXlzIGludG8gYWNjb3VudC4KICogVGhhdCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG1pZG5pZ2h0cyBpbiBsb2NhbCB0aW1lIG1heSBiZQogKiBsZXNzIHRoYW4gMjQgaG91cnMgdGltZXMgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdGhlbSwKICogaWYgdGhlcmUgaXMgYSBkYXlsaWdodCBzYXZpbmcgY2hhbmdlIGluIGJldHdlZW4uCiAqIElmIHRoZSBkaWZmZXJlbmNlIGFib3ZlIGlzIGNhbGN1bGF0ZWQgdXNpbmcgQXVzdHJhbGlhbiBsb2NhbCB0aW1lLCB0aGUKICogZGlmZmVyZW5jZSBpcyA3NDE1IGRheXMgYW5kIDIzIGhvdXJzLCB3aGljaCBpcyBvbmx5IDc0MTUgd2hvbGUgZGF5cyBhcwogKiByZXBvcnRlZCBieSBgaW5EYXlzYC4KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqIFNlZSBbRHVyYXRpb25dIHRvIHJlcHJlc2VudCBhIHNwYW4gb2YgdGltZS4KICogU2VlIFtTdG9wd2F0Y2hdIHRvIG1lYXN1cmUgdGltZXNwYW5zLgogKgogKiBUaGUgRGF0ZVRpbWUgY2xhc3MgZG9lcyBub3QgcHJvdmlkZSBpbnRlcm5hdGlvbmFsaXphdGlvbi4KICogVG8gaW50ZXJuYXRpb25hbGl6ZSB5b3VyIGNvZGUsIHVzZQogKiB0aGUgW2ludGxdKGh0dHBzOi8vcHViLmRhcnRsYW5nLm9yZy9wYWNrYWdlcy9pbnRsKSBwYWNrYWdlLgogKgogKi8KY2xhc3MgRGF0ZVRpbWUgaW1wbGVtZW50cyBDb21wYXJhYmxlPERhdGVUaW1lPiB7CiAgLy8gV2Vla2RheSBjb25zdGFudHMgdGhhdCBhcmUgcmV0dXJuZWQgYnkgW3dlZWtkYXldIG1ldGhvZDoKICBzdGF0aWMgY29uc3QgaW50IG1vbmRheSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCB0dWVzZGF5ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IHdlZG5lc2RheSA9IDM7CiAgc3RhdGljIGNvbnN0IGludCB0aHVyc2RheSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBmcmlkYXkgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgc2F0dXJkYXkgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgc3VuZGF5ID0gNzsKICBzdGF0aWMgY29uc3QgaW50IGRheXNQZXJXZWVrID0gNzsKCiAgLy8gTW9udGggY29uc3RhbnRzIHRoYXQgYXJlIHJldHVybmVkIGJ5IHRoZSBbbW9udGhdIGdldHRlci4KICBzdGF0aWMgY29uc3QgaW50IGphbnVhcnkgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgZmVicnVhcnkgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgbWFyY2ggPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgYXByaWwgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgbWF5ID0gNTsKICBzdGF0aWMgY29uc3QgaW50IGp1bmUgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQganVseSA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBhdWd1c3QgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgc2VwdGVtYmVyID0gOTsKICBzdGF0aWMgY29uc3QgaW50IG9jdG9iZXIgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IG5vdmVtYmVyID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBkZWNlbWJlciA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgbW9udGhzUGVyWWVhciA9IDEyOwoKICAvKioKICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBEYXRlVGltZS4KICAgKgogICAqIFRoZSBjb250ZW50IG9mIHRoaXMgZmllbGQgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiBPbiBKYXZhU2NyaXB0IGl0IGlzCiAgICogZXF1YWwgdG8gW21pbGxpc2Vjb25kc1NpbmNlRXBvY2hdLiBPbiB0aGUgVk0gaXQgaXMgZXF1YWwgdG8KICAgKiBbbWljcm9zZWNvbmRzU2luY2VFcG9jaF0uCiAgICovCiAgZmluYWwgaW50IF92YWx1ZTsKCiAgLyoqCiAgICogVHJ1ZSBpZiB0aGlzIFtEYXRlVGltZV0gaXMgc2V0IHRvIFVUQyB0aW1lLgogICAqCiAgICogYGBgCiAgICogdmFyIGREYXkgPSBuZXcgRGF0ZVRpbWUudXRjKDE5NDQsIDYsIDYpOwogICAqIGFzc2VydChkRGF5LmlzVXRjKTsKICAgKiBgYGAKICAgKgogICAqLwogIGZpbmFsIGJvb2wgaXNVdGM7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBbRGF0ZVRpbWVdIGluc3RhbmNlIHNwZWNpZmllZCBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogRm9yIGV4YW1wbGUsCiAgICogdG8gY3JlYXRlIGEgbmV3IERhdGVUaW1lIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIDd0aCBvZiBTZXB0ZW1iZXIgMjAxNywKICAgKiA1OjMwcG0KICAgKgogICAqIGBgYAogICAqIHZhciBkZW50aXN0QXBwb2ludG1lbnQgPSBuZXcgRGF0ZVRpbWUoMjAxNywgOSwgNywgMTcsIDMwKTsKICAgKiBgYGAKICAgKi8KICBEYXRlVGltZShpbnQgeWVhciwKICAgICAgW2ludCBtb250aCA9IDEsCiAgICAgIGludCBkYXkgPSAxLAogICAgICBpbnQgaG91ciA9IDAsCiAgICAgIGludCBtaW51dGUgPSAwLAogICAgICBpbnQgc2Vjb25kID0gMCwKICAgICAgaW50IG1pbGxpc2Vjb25kID0gMCwKICAgICAgaW50IG1pY3Jvc2Vjb25kID0gMF0pCiAgICAgIDogdGhpcy5faW50ZXJuYWwoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLAogICAgICAgICAgICBtaWNyb3NlY29uZCwgZmFsc2UpOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgW0RhdGVUaW1lXSBpbnN0YW5jZSBzcGVjaWZpZWQgaW4gdGhlIFVUQyB0aW1lIHpvbmUuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBuZXcgRGF0ZVRpbWUudXRjKDE5NjksIDcsIDIwLCAyMCwgMTgsIDA0KTsKICAgKiBgYGAKICAgKgogICAqIFdoZW4gZGVhbGluZyB3aXRoIGRhdGVzIG9yIGhpc3RvcmljIGV2ZW50cyBwcmVmZXIgdG8gdXNlIFVUQyBEYXRlVGltZXMsCiAgICogc2luY2UgdGhleSBhcmUgdW5hZmZlY3RlZCBieSBkYXlsaWdodC1zYXZpbmcgY2hhbmdlcyBhbmQgYXJlIHVuYWZmZWN0ZWQKICAgKiBieSB0aGUgbG9jYWwgdGltZXpvbmUuCiAgICovCiAgRGF0ZVRpbWUudXRjKGludCB5ZWFyLAogICAgICBbaW50IG1vbnRoID0gMSwKICAgICAgaW50IGRheSA9IDEsCiAgICAgIGludCBob3VyID0gMCwKICAgICAgaW50IG1pbnV0ZSA9IDAsCiAgICAgIGludCBzZWNvbmQgPSAwLAogICAgICBpbnQgbWlsbGlzZWNvbmQgPSAwLAogICAgICBpbnQgbWljcm9zZWNvbmQgPSAwXSkKICAgICAgOiB0aGlzLl9pbnRlcm5hbCh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kLCB0cnVlKTsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIFtEYXRlVGltZV0gaW5zdGFuY2Ugd2l0aCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgaW4gdGhlCiAgICogbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogYGBgCiAgICogdmFyIHRoaXNJbnN0YW50ID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAqIGBgYAogICAqLwogIERhdGVUaW1lLm5vdygpIDogdGhpcy5fbm93KCk7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZSBiYXNlZCBvbiBbZm9ybWF0dGVkU3RyaW5nXS4KICAgKgogICAqIFRoZSBbZm9ybWF0dGVkU3RyaW5nXSBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICogVGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgdGhlIGlucHV0IHN0cmluZyBjYW5ub3QgYmUgcGFyc2VkLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIHBhcnNlcyBhIHN1YnNldCBvZiBJU08gODYwMQogICAqIHdoaWNoIGluY2x1ZGVzIHRoZSBzdWJzZXQgYWNjZXB0ZWQgYnkgUkZDIDMzMzkuCiAgICoKICAgKiBUaGUgYWNjZXB0ZWQgaW5wdXRzIGFyZSBjdXJyZW50bHk6CiAgICoKICAgKiAqIEEgZGF0ZTogQSBzaWduZWQgZm91ci10by1zaXggZGlnaXQgeWVhciwgdHdvIGRpZ2l0IG1vbnRoIGFuZAogICAqICAgdHdvIGRpZ2l0IGRheSwgb3B0aW9uYWxseSBzZXBhcmF0ZWQgYnkgYC1gIGNoYXJhY3RlcnMuCiAgICogICBFeGFtcGxlczogIjE5NzAwMTAxIiwgIi0wMDA0LTEyLTI0IiwgIjgxMDMwLTA0LTAxIi4KICAgKiAqIEFuIG9wdGlvbmFsIHRpbWUgcGFydCwgc2VwYXJhdGVkIGZyb20gdGhlIGRhdGUgYnkgZWl0aGVyIGBUYCBvciBhIHNwYWNlLgogICAqICAgVGhlIHRpbWUgcGFydCBpcyBhIHR3byBkaWdpdCBob3VyLAogICAqICAgdGhlbiBvcHRpb25hbGx5IGEgdHdvIGRpZ2l0IG1pbnV0ZXMgdmFsdWUsCiAgICogICB0aGVuIG9wdGlvbmFsbHkgYSB0d28gZGlnaXQgc2Vjb25kcyB2YWx1ZSwgYW5kCiAgICogICB0aGVuIG9wdGlvbmFsbHkgYSAnLicgb3IgJywnIGZvbGxvd2VkIGJ5IGEgb25lLXRvLXNpeCBkaWdpdCBzZWNvbmQgZnJhY3Rpb24uCiAgICogICBUaGUgbWludXRlcyBhbmQgc2Vjb25kcyBtYXkgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIHBhcnRzIGJ5IGEKICAgKiAgICc6Jy4KICAgKiAgIEV4YW1wbGVzOiAiMTIiLCAiMTI6MzA6MjQuMTI0IiwgIjEyOjMwOjI0LDEyNCIsICIxMjMwMTAuNTAiLgogICAqICogQW4gb3B0aW9uYWwgdGltZS16b25lIG9mZnNldCBwYXJ0LAogICAqICAgcG9zc2libHkgc2VwYXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIGJ5IGEgc3BhY2UuCiAgICogICBUaGUgdGltZSB6b25lIGlzIGVpdGhlciAneicgb3IgJ1onLCBvciBpdCBpcyBhIHNpZ25lZCB0d28gZGlnaXQgaG91cgogICAqICAgcGFydCBhbmQgYW4gb3B0aW9uYWwgdHdvIGRpZ2l0IG1pbnV0ZSBwYXJ0LiBUaGUgc2lnbiBtdXN0IGJlIGVpdGhlcgogICAqICAgIisiIG9yICItIiwgYW5kIGNhbiBub3QgYmUgb21pdHRlZC4KICAgKiAgIFRoZSBtaW51dGVzIG1heSBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgaG91cnMgYnkgYSAnOicuCiAgICogICBFeGFtcGxlczogIloiLCAiLTEwIiwgIiswMTozMCIsICIrMTEzMCIuCiAgICoKICAgKiBUaGlzIGluY2x1ZGVzIHRoZSBvdXRwdXQgb2YgYm90aCBbdG9TdHJpbmddIGFuZCBbdG9Jc284NjAxU3RyaW5nXSwgd2hpY2gKICAgKiB3aWxsIGJlIHBhcnNlZCBiYWNrIGludG8gYSBgRGF0ZVRpbWVgIG9iamVjdCB3aXRoIHRoZSBzYW1lIHRpbWUgYXMgdGhlCiAgICogb3JpZ2luYWwuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBpbiBlaXRoZXIgbG9jYWwgdGltZSBvciBVVEMuCiAgICogSWYgYSB0aW1lIHpvbmUgb2Zmc2V0IG90aGVyIHRoYW4gVVRDIGlzIHNwZWNpZmllZCwKICAgKiB0aGUgdGltZSBpcyBjb252ZXJ0ZWQgdG8gdGhlIGVxdWl2YWxlbnQgVVRDIHRpbWUuCiAgICoKICAgKiBFeGFtcGxlcyBvZiBhY2NlcHRlZCBzdHJpbmdzOgogICAqCiAgICogKiBgIjIwMTItMDItMjcgMTM6Mjc6MDAiYAogICAqICogYCIyMDEyLTAyLTI3IDEzOjI3OjAwLjEyMzQ1NnoiYAogICAqICogYCIyMDEyLTAyLTI3IDEzOjI3OjAwLDEyMzQ1NnoiYAogICAqICogYCIyMDEyMDIyNyAxMzoyNzowMCJgCiAgICogKiBgIjIwMTIwMjI3VDEzMjcwMCJgCiAgICogKiBgIjIwMTIwMjI3ImAKICAgKiAqIGAiKzIwMTIwMjI3ImAKICAgKiAqIGAiMjAxMi0wMi0yN1QxNFoiYAogICAqICogYCIyMDEyLTAyLTI3VDE0KzAwOjAwImAKICAgKiAqIGAiLTEyMzQ1MDEwMSAwMDowMDowMCBaImA6IGluIHRoZSB5ZWFyIC0xMjM0NS4KICAgKiAqIGAiMjAwMi0wMi0yN1QxNDowMDowMC0wNTAwImA6IFNhbWUgYXMgYCIyMDAyLTAyLTI3VDE5OjAwOjAwWiJgCiAgICovCiAgLy8gVE9ETyhscm4pOiByZXN0cmljdCBpbmNvcnJlY3QgdmFsdWVzIGxpa2UgIDIwMDMtMDItMjlUNTA6NzA6ODAuCiAgLy8gT3Igbm90LCB0aGF0IG1heSBiZSBhIGJyZWFraW5nIGNoYW5nZS4KICBzdGF0aWMgRGF0ZVRpbWUgcGFyc2UoU3RyaW5nIGZvcm1hdHRlZFN0cmluZykgewogICAgdmFyIHJlID0gX3BhcnNlRm9ybWF0OwogICAgTWF0Y2ggbWF0Y2ggPSByZS5maXJzdE1hdGNoKGZvcm1hdHRlZFN0cmluZyk7CiAgICBpZiAobWF0Y2ggIT0gbnVsbCkgewogICAgICBpbnQgcGFyc2VJbnRPclplcm8oU3RyaW5nIG1hdGNoZWQpIHsKICAgICAgICBpZiAobWF0Y2hlZCA9PSBudWxsKSByZXR1cm4gMDsKICAgICAgICByZXR1cm4gaW50LnBhcnNlKG1hdGNoZWQpOwogICAgICB9CgogICAgICAvLyBQYXJzZXMgZnJhY3Rpb25hbCBzZWNvbmQgZGlnaXRzIG9mICcuKFxkezEsNn0pJyBpbnRvIHRoZSBjb21iaW5lZAogICAgICAvLyBtaWNyb3NlY29uZHMuCiAgICAgIGludCBwYXJzZU1pbGxpQW5kTWljcm9zZWNvbmRzKFN0cmluZyBtYXRjaGVkKSB7CiAgICAgICAgaWYgKG1hdGNoZWQgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICAgICAgaW50IGxlbmd0aCA9IG1hdGNoZWQubGVuZ3RoOwogICAgICAgIGFzc2VydChsZW5ndGggPj0gMSk7CiAgICAgICAgYXNzZXJ0KGxlbmd0aCA8PSA2KTsKCiAgICAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKICAgICAgICAgIHJlc3VsdCAqPSAxMDsKICAgICAgICAgIGlmIChpIDwgbWF0Y2hlZC5sZW5ndGgpIHsKICAgICAgICAgICAgcmVzdWx0ICs9IG1hdGNoZWQuY29kZVVuaXRBdChpKSBeIDB4MzA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICAgIGludCB5ZWFycyA9IGludC5wYXJzZShtYXRjaFsxXSk7CiAgICAgIGludCBtb250aCA9IGludC5wYXJzZShtYXRjaFsyXSk7CiAgICAgIGludCBkYXkgPSBpbnQucGFyc2UobWF0Y2hbM10pOwogICAgICBpbnQgaG91ciA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzRdKTsKICAgICAgaW50IG1pbnV0ZSA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzVdKTsKICAgICAgaW50IHNlY29uZCA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzZdKTsKICAgICAgYm9vbCBhZGRPbmVNaWxsaXNlY29uZCA9IGZhbHNlOwogICAgICBpbnQgbWlsbGlBbmRNaWNyb3NlY29uZHMgPSBwYXJzZU1pbGxpQW5kTWljcm9zZWNvbmRzKG1hdGNoWzddKTsKICAgICAgaW50IG1pbGxpc2Vjb25kID0KICAgICAgICAgIG1pbGxpQW5kTWljcm9zZWNvbmRzIH4vIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwogICAgICBpbnQgbWljcm9zZWNvbmQgPQogICAgICAgICAgbWlsbGlBbmRNaWNyb3NlY29uZHMucmVtYWluZGVyKER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kKTsKICAgICAgYm9vbCBpc1V0YyA9IGZhbHNlOwogICAgICBpZiAobWF0Y2hbOF0gIT0gbnVsbCkgewogICAgICAgIC8vIHRpbWV6b25lIHBhcnQKICAgICAgICBpc1V0YyA9IHRydWU7CiAgICAgICAgaWYgKG1hdGNoWzldICE9IG51bGwpIHsKICAgICAgICAgIC8vIHRpbWV6b25lIG90aGVyIHRoYW4gJ1onIGFuZCAneicuCiAgICAgICAgICBpbnQgc2lnbiA9IChtYXRjaFs5XSA9PSAnLScpID8gLTEgOiAxOwogICAgICAgICAgaW50IGhvdXJEaWZmZXJlbmNlID0gaW50LnBhcnNlKG1hdGNoWzEwXSk7CiAgICAgICAgICBpbnQgbWludXRlRGlmZmVyZW5jZSA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzExXSk7CiAgICAgICAgICBtaW51dGVEaWZmZXJlbmNlICs9IDYwICogaG91ckRpZmZlcmVuY2U7CiAgICAgICAgICBtaW51dGUgLT0gc2lnbiAqIG1pbnV0ZURpZmZlcmVuY2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGludCB2YWx1ZSA9IF9icm9rZW5Eb3duRGF0ZVRvVmFsdWUoeWVhcnMsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwKICAgICAgICAgIHNlY29uZCwgbWlsbGlzZWNvbmQsIG1pY3Jvc2Vjb25kLCBpc1V0Yyk7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJUaW1lIG91dCBvZiByYW5nZSIsIGZvcm1hdHRlZFN0cmluZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIERhdGVUaW1lLl93aXRoVmFsdWUodmFsdWUsIGlzVXRjOiBpc1V0Yyk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgZGF0ZSBmb3JtYXQiLCBmb3JtYXR0ZWRTdHJpbmcpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlIGJhc2VkIG9uIFtmb3JtYXR0ZWRTdHJpbmddLgogICAqCiAgICogV29ya3MgbGlrZSBbcGFyc2VdIGV4Y2VwdCB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgbnVsbGAKICAgKiB3aGVyZSBbcGFyc2VdIHdvdWxkIHRocm93IGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgICovCiAgc3RhdGljIERhdGVUaW1lIHRyeVBhcnNlKFN0cmluZyBmb3JtYXR0ZWRTdHJpbmcpIHsKICAgIC8vIFRPRE86IE9wdGltaXplIHRvIGF2b2lkIHRocm93aW5nLgogICAgdHJ5IHsKICAgICAgcmV0dXJuIHBhcnNlKGZvcm1hdHRlZFN0cmluZyk7CiAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgc3RhdGljIGNvbnN0IGludCBfbWF4TWlsbGlzZWNvbmRzU2luY2VFcG9jaCA9IDg2NDAwMDAwMDAwMDAwMDA7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZQogICAqIHdpdGggdGhlIGdpdmVuIFttaWxsaXNlY29uZHNTaW5jZUVwb2NoXS4KICAgKgogICAqIElmIFtpc1V0Y10gaXMgZmFsc2UgdGhlbiB0aGUgZGF0ZSBpcyBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogVGhlIGNvbnN0cnVjdGVkIFtEYXRlVGltZV0gcmVwcmVzZW50cwogICAqIDE5NzAtMDEtMDFUMDA6MDA6MDBaICsgW21pbGxpc2Vjb25kc1NpbmNlRXBvY2hdIG1zIGluIHRoZSBnaXZlbgogICAqIHRpbWUgem9uZSAobG9jYWwgb3IgVVRDKS4KICAgKi8KICBleHRlcm5hbCBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChpbnQgbWlsbGlzZWNvbmRzU2luY2VFcG9jaCwKICAgICAge2Jvb2wgaXNVdGMgPSBmYWxzZX0pOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFtEYXRlVGltZV0gaW5zdGFuY2UKICAgKiB3aXRoIHRoZSBnaXZlbiBbbWljcm9zZWNvbmRzU2luY2VFcG9jaF0uCiAgICoKICAgKiBJZiBbaXNVdGNdIGlzIGZhbHNlIHRoZW4gdGhlIGRhdGUgaXMgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKgogICAqIFRoZSBjb25zdHJ1Y3RlZCBbRGF0ZVRpbWVdIHJlcHJlc2VudHMKICAgKiAxOTcwLTAxLTAxVDAwOjAwOjAwWiArIFttaWNyb3NlY29uZHNTaW5jZUVwb2NoXSB1cyBpbiB0aGUgZ2l2ZW4KICAgKiB0aW1lIHpvbmUgKGxvY2FsIG9yIFVUQykuCiAgICovCiAgZXh0ZXJuYWwgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2goaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsCiAgICAgIHtib29sIGlzVXRjID0gZmFsc2V9KTsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIHZhbHVlLgogICAqCiAgICogSWYgW2lzVXRjXSBpcyBmYWxzZSB0aGVuIHRoZSBkYXRlIGlzIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICovCiAgRGF0ZVRpbWUuX3dpdGhWYWx1ZSh0aGlzLl92YWx1ZSwge3RoaXMuaXNVdGN9KSB7CiAgICBpZiAobWlsbGlzZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA+IF9tYXhNaWxsaXNlY29uZHNTaW5jZUVwb2NoIHx8CiAgICAgICAgKG1pbGxpc2Vjb25kc1NpbmNlRXBvY2guYWJzKCkgPT0gX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggJiYKICAgICAgICAgICAgbWljcm9zZWNvbmQgIT0gMCkpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigKICAgICAgICAgICJEYXRlVGltZSBpcyBvdXRzaWRlIHZhbGlkIHJhbmdlOiAkbWlsbGlzZWNvbmRzU2luY2VFcG9jaCIpOwogICAgfQogICAgaWYgKGlzVXRjID09IG51bGwpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiJ2lzVXRjJyBmbGFnIG1heSBub3QgYmUgJ251bGwnIik7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgW290aGVyXSBpcyBhIFtEYXRlVGltZV0gYXQgdGhlIHNhbWUgbW9tZW50IGFuZCBpbiB0aGUKICAgKiBzYW1lIHRpbWUgem9uZSAoVVRDIG9yIGxvY2FsKS4KICAgKgogICAqIGBgYAogICAqIHZhciBkRGF5VXRjID0gbmV3IERhdGVUaW1lLnV0YygxOTQ0LCA2LCA2KTsKICAgKiB2YXIgZERheUxvY2FsID0gZERheVV0Yy50b0xvY2FsKCk7CiAgICoKICAgKiAvLyBUaGVzZSB0d28gZGF0ZXMgYXJlIGF0IHRoZSBzYW1lIG1vbWVudCwgYnV0IGFyZSBpbiBkaWZmZXJlbnQgem9uZXMuCiAgICogYXNzZXJ0KGREYXlVdGMgIT0gZERheUxvY2FsKTsKICAgKiBgYGAKICAgKgogICAqIFNlZSBbaXNBdFNhbWVNb21lbnRBc10gZm9yIGEgY29tcGFyaXNvbiB0aGF0IGNvbXBhcmVzIG1vbWVudHMgaW4gdGltZQogICAqIGluZGVwZW5kZW50bHkgb2YgdGhlaXIgem9uZXMuCiAgICovCiAgZXh0ZXJuYWwgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIFt0aGlzXSBvY2N1cnMgYmVmb3JlIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgY29tcGFyaXNvbiBpcyBpbmRlcGVuZGVudAogICAqIG9mIHdoZXRoZXIgdGhlIHRpbWUgaXMgaW4gVVRDIG9yIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbm93ID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAqIHZhciBlYXJsaWVyID0gbm93LnN1YnRyYWN0KGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDUpKTsKICAgKiBhc3NlcnQoZWFybGllci5pc0JlZm9yZShub3cpKTsKICAgKiBhc3NlcnQoIW5vdy5pc0JlZm9yZShub3cpKTsKICAgKgogICAqIC8vIFRoaXMgcmVsYXRpb24gc3RheXMgdGhlIHNhbWUsIGV2ZW4gd2hlbiBjaGFuZ2luZyB0aW1lem9uZXMuCiAgICogYXNzZXJ0KGVhcmxpZXIuaXNCZWZvcmUobm93LnRvVXRjKCkpKTsKICAgKiBhc3NlcnQoZWFybGllci50b1V0YygpLmlzQmVmb3JlKG5vdykpOwogICAqCiAgICogYXNzZXJ0KCFub3cudG9VdGMoKS5pc0JlZm9yZShub3cpKTsKICAgKiBhc3NlcnQoIW5vdy5pc0JlZm9yZShub3cudG9VdGMoKSkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGJvb2wgaXNCZWZvcmUoRGF0ZVRpbWUgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgW3RoaXNdIG9jY3VycyBhZnRlciBbb3RoZXJdLgogICAqCiAgICogVGhlIGNvbXBhcmlzb24gaXMgaW5kZXBlbmRlbnQKICAgKiBvZiB3aGV0aGVyIHRoZSB0aW1lIGlzIGluIFVUQyBvciBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogYGBgCiAgICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICAgKiB2YXIgbGF0ZXIgPSBub3cuYWRkKGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDUpKTsKICAgKiBhc3NlcnQobGF0ZXIuaXNBZnRlcihub3cpKTsKICAgKiBhc3NlcnQoIW5vdy5pc0JlZm9yZShub3cpKTsKICAgKgogICAqIC8vIFRoaXMgcmVsYXRpb24gc3RheXMgdGhlIHNhbWUsIGV2ZW4gd2hlbiBjaGFuZ2luZyB0aW1lem9uZXMuCiAgICogYXNzZXJ0KGxhdGVyLmlzQWZ0ZXIobm93LnRvVXRjKCkpKTsKICAgKiBhc3NlcnQobGF0ZXIudG9VdGMoKS5pc0FmdGVyKG5vdykpOwogICAqCiAgICogYXNzZXJ0KCFub3cudG9VdGMoKS5pc0JlZm9yZShub3cpKTsKICAgKiBhc3NlcnQoIW5vdy5pc0JlZm9yZShub3cudG9VdGMoKSkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGJvb2wgaXNBZnRlcihEYXRlVGltZSBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiBbdGhpc10gb2NjdXJzIGF0IHRoZSBzYW1lIG1vbWVudCBhcyBbb3RoZXJdLgogICAqCiAgICogVGhlIGNvbXBhcmlzb24gaXMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgdGltZSBpcyBpbiBVVEMgb3IgaW4gdGhlIGxvY2FsCiAgICogdGltZSB6b25lLgogICAqCiAgICogYGBgCiAgICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICAgKiB2YXIgbGF0ZXIgPSBub3cuYWRkKGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDUpKTsKICAgKiBhc3NlcnQoIWxhdGVyLmlzQXRTYW1lTW9tZW50QXMobm93KSk7CiAgICogYXNzZXJ0KG5vdy5pc0F0U2FtZU1vbWVudEFzKG5vdykpOwogICAqCiAgICogLy8gVGhpcyByZWxhdGlvbiBzdGF5cyB0aGUgc2FtZSwgZXZlbiB3aGVuIGNoYW5naW5nIHRpbWV6b25lcy4KICAgKiBhc3NlcnQoIWxhdGVyLmlzQXRTYW1lTW9tZW50QXMobm93LnRvVXRjKCkpKTsKICAgKiBhc3NlcnQoIWxhdGVyLnRvVXRjKCkuaXNBdFNhbWVNb21lbnRBcyhub3cpKTsKICAgKgogICAqIGFzc2VydChub3cudG9VdGMoKS5pc0F0U2FtZU1vbWVudEFzKG5vdykpOwogICAqIGFzc2VydChub3cuaXNBdFNhbWVNb21lbnRBcyhub3cudG9VdGMoKSkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGJvb2wgaXNBdFNhbWVNb21lbnRBcyhEYXRlVGltZSBvdGhlcik7CgogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgRGF0ZVRpbWUgb2JqZWN0IHRvIFtvdGhlcl0sCiAgICogcmV0dXJuaW5nIHplcm8gaWYgdGhlIHZhbHVlcyBhcmUgZXF1YWwuCiAgICoKICAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgdGhpcyBEYXRlVGltZSBbaXNCZWZvcmVdIFtvdGhlcl0uIEl0IHJldHVybnMgMAogICAqIGlmIGl0IFtpc0F0U2FtZU1vbWVudEFzXSBbb3RoZXJdLCBhbmQgcmV0dXJucyBhIHBvc2l0aXZlIHZhbHVlIG90aGVyd2lzZQogICAqICh3aGVuIHRoaXMgW2lzQWZ0ZXJdIFtvdGhlcl0pLgogICAqLwogIGV4dGVybmFsIGludCBjb21wYXJlVG8oRGF0ZVRpbWUgb3RoZXIpOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IChfdmFsdWUgXiAoX3ZhbHVlID4+IDMwKSkgJiAweDNGRkZGRkZGOwoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgRGF0ZVRpbWUgdmFsdWUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKgogICAqIFJldHVybnMgW3RoaXNdIGlmIGl0IGlzIGFscmVhZHkgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKiBPdGhlcndpc2UgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0bzoKICAgKgogICAqIGBgYAogICAqIG5ldyBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaChtaWNyb3NlY29uZHNTaW5jZUVwb2NoLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1V0YzogZmFsc2UpCiAgICogYGBgCiAgICovCiAgRGF0ZVRpbWUgdG9Mb2NhbCgpIHsKICAgIGlmIChpc1V0YykgewogICAgICByZXR1cm4gRGF0ZVRpbWUuX3dpdGhWYWx1ZShfdmFsdWUsIGlzVXRjOiBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBEYXRlVGltZSB2YWx1ZSBpbiB0aGUgVVRDIHRpbWUgem9uZS4KICAgKgogICAqIFJldHVybnMgW3RoaXNdIGlmIGl0IGlzIGFscmVhZHkgaW4gVVRDLgogICAqIE90aGVyd2lzZSB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvOgogICAqCiAgICogYGBgCiAgICogbmV3IERhdGVUaW1lLmZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NoKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVXRjOiB0cnVlKQogICAqIGBgYAogICAqLwogIERhdGVUaW1lIHRvVXRjKCkgewogICAgaWYgKGlzVXRjKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBEYXRlVGltZS5fd2l0aFZhbHVlKF92YWx1ZSwgaXNVdGM6IHRydWUpOwogIH0KCiAgc3RhdGljIFN0cmluZyBfZm91ckRpZ2l0cyhpbnQgbikgewogICAgaW50IGFic04gPSBuLmFicygpOwogICAgU3RyaW5nIHNpZ24gPSBuIDwgMCA/ICItIiA6ICIiOwogICAgaWYgKGFic04gPj0gMTAwMCkgcmV0dXJuICIkbiI7CiAgICBpZiAoYWJzTiA+PSAxMDApIHJldHVybiAiJHtzaWdufTAkYWJzTiI7CiAgICBpZiAoYWJzTiA+PSAxMCkgcmV0dXJuICIke3NpZ259MDAkYWJzTiI7CiAgICByZXR1cm4gIiR7c2lnbn0wMDAkYWJzTiI7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9zaXhEaWdpdHMoaW50IG4pIHsKICAgIGFzc2VydChuIDwgLTk5OTkgfHwgbiA+IDk5OTkpOwogICAgaW50IGFic04gPSBuLmFicygpOwogICAgU3RyaW5nIHNpZ24gPSBuIDwgMCA/ICItIiA6ICIrIjsKICAgIGlmIChhYnNOID49IDEwMDAwMCkgcmV0dXJuICIkc2lnbiRhYnNOIjsKICAgIHJldHVybiAiJHtzaWdufTAkYWJzTiI7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF90aHJlZURpZ2l0cyhpbnQgbikgewogICAgaWYgKG4gPj0gMTAwKSByZXR1cm4gIiR7bn0iOwogICAgaWYgKG4gPj0gMTApIHJldHVybiAiMCR7bn0iOwogICAgcmV0dXJuICIwMCR7bn0iOwogIH0KCiAgc3RhdGljIFN0cmluZyBfdHdvRGlnaXRzKGludCBuKSB7CiAgICBpZiAobiA+PSAxMCkgcmV0dXJuICIke259IjsKICAgIHJldHVybiAiMCR7bn0iOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBmb3IgdGhpcyBpbnN0YW5jZS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgY29uc3RydWN0ZWQgZm9yIHRoZSB0aW1lIHpvbmUgb2YgdGhpcyBpbnN0YW5jZS4KICAgKiBUaGUgYHRvU3RyaW5nKClgIG1ldGhvZCBwcm92aWRlcyBhIHNpbXBseSBmb3JtYXR0ZWQgc3RyaW5nLgogICAqIEl0IGRvZXMgbm90IHN1cHBvcnQgaW50ZXJuYXRpb25hbGl6ZWQgc3RyaW5ncy4KICAgKiBVc2UgdGhlIFtpbnRsXShodHRwczovL3B1Yi5kYXJ0bGFuZy5vcmcvcGFja2FnZXMvaW50bCkgcGFja2FnZQogICAqIGF0IHRoZSBwdWIgc2hhcmVkIHBhY2thZ2VzIHJlcG8uCiAgICoKICAgKiBUaGUgcmVzdWx0aW5nIHN0cmluZyBjYW4gYmUgcGFyc2VkIGJhY2sgdXNpbmcgW3BhcnNlXS4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgeSA9IF9mb3VyRGlnaXRzKHllYXIpOwogICAgU3RyaW5nIG0gPSBfdHdvRGlnaXRzKG1vbnRoKTsKICAgIFN0cmluZyBkID0gX3R3b0RpZ2l0cyhkYXkpOwogICAgU3RyaW5nIGggPSBfdHdvRGlnaXRzKGhvdXIpOwogICAgU3RyaW5nIG1pbiA9IF90d29EaWdpdHMobWludXRlKTsKICAgIFN0cmluZyBzZWMgPSBfdHdvRGlnaXRzKHNlY29uZCk7CiAgICBTdHJpbmcgbXMgPSBfdGhyZWVEaWdpdHMobWlsbGlzZWNvbmQpOwogICAgU3RyaW5nIHVzID0gbWljcm9zZWNvbmQgPT0gMCA/ICIiIDogX3RocmVlRGlnaXRzKG1pY3Jvc2Vjb25kKTsKICAgIGlmIChpc1V0YykgewogICAgICByZXR1cm4gIiR5LSRtLSRkICRoOiRtaW46JHNlYy4kbXMke3VzfVoiOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIkeS0kbS0kZCAkaDokbWluOiRzZWMuJG1zJHVzIjsKICAgIH0KICB9CgogIC8qKgogICAqIFJldHVybnMgYW4gSVNPLTg2MDEgZnVsbC1wcmVjaXNpb24gZXh0ZW5kZWQgZm9ybWF0IHJlcHJlc2VudGF0aW9uLgogICAqCiAgICogVGhlIGZvcm1hdCBpcyBgeXl5eS1NTS1kZFRISDptbTpzcy5tbW11dXVaYCBmb3IgVVRDIHRpbWUsIGFuZAogICAqIGB5eXl5LU1NLWRkVEhIOm1tOnNzLm1tbXV1dWAgKG5vIHRyYWlsaW5nICJaIikgZm9yIGxvY2FsL25vbi1VVEMgdGltZSwKICAgKiB3aGVyZToKICAgKgogICAqICogYHl5eXlgIGlzIGEsIHBvc3NpYmx5IG5lZ2F0aXZlLCBmb3VyIGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyLAogICAqICAgaWYgdGhlIHllYXIgaXMgaW4gdGhlIHJhbmdlIC05OTk5IHRvIDk5OTksCiAgICogICBvdGhlcndpc2UgaXQgaXMgYSBzaWduZWQgc2l4IGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyLgogICAqICogYE1NYCBpcyB0aGUgbW9udGggaW4gdGhlIHJhbmdlIDAxIHRvIDEyLAogICAqICogYGRkYCBpcyB0aGUgZGF5IG9mIHRoZSBtb250aCBpbiB0aGUgcmFuZ2UgMDEgdG8gMzEsCiAgICogKiBgSEhgIGFyZSBob3VycyBpbiB0aGUgcmFuZ2UgMDAgdG8gMjMsCiAgICogKiBgbW1gIGFyZSBtaW51dGVzIGluIHRoZSByYW5nZSAwMCB0byA1OSwKICAgKiAqIGBzc2AgYXJlIHNlY29uZHMgaW4gdGhlIHJhbmdlIDAwIHRvIDU5IChubyBsZWFwIHNlY29uZHMpLAogICAqICogYG1tbWAgYXJlIG1pbGxpc2Vjb25kcyBpbiB0aGUgcmFuZ2UgMDAwIHRvIDk5OSwgYW5kCiAgICogKiBgdXV1YCBhcmUgbWljcm9zZWNvbmRzIGluIHRoZSByYW5nZSAwMDEgdG8gOTk5LiBJZiBbbWljcm9zZWNvbmRdIGVxdWFscwogICAqICAgMCwgdGhlbiB0aGlzIHBhcnQgaXMgb21pdHRlZC4KICAgKgogICAqIFRoZSByZXN1bHRpbmcgc3RyaW5nIGNhbiBiZSBwYXJzZWQgYmFjayB1c2luZyBbcGFyc2VdLgogICAqLwogIFN0cmluZyB0b0lzbzg2MDFTdHJpbmcoKSB7CiAgICBTdHJpbmcgeSA9CiAgICAgICAgKHllYXIgPj0gLTk5OTkgJiYgeWVhciA8PSA5OTk5KSA/IF9mb3VyRGlnaXRzKHllYXIpIDogX3NpeERpZ2l0cyh5ZWFyKTsKICAgIFN0cmluZyBtID0gX3R3b0RpZ2l0cyhtb250aCk7CiAgICBTdHJpbmcgZCA9IF90d29EaWdpdHMoZGF5KTsKICAgIFN0cmluZyBoID0gX3R3b0RpZ2l0cyhob3VyKTsKICAgIFN0cmluZyBtaW4gPSBfdHdvRGlnaXRzKG1pbnV0ZSk7CiAgICBTdHJpbmcgc2VjID0gX3R3b0RpZ2l0cyhzZWNvbmQpOwogICAgU3RyaW5nIG1zID0gX3RocmVlRGlnaXRzKG1pbGxpc2Vjb25kKTsKICAgIFN0cmluZyB1cyA9IG1pY3Jvc2Vjb25kID09IDAgPyAiIiA6IF90aHJlZURpZ2l0cyhtaWNyb3NlY29uZCk7CiAgICBpZiAoaXNVdGMpIHsKICAgICAgcmV0dXJuICIkeS0kbS0ke2R9VCRoOiRtaW46JHNlYy4kbXMke3VzfVoiOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIkeS0kbS0ke2R9VCRoOiRtaW46JHNlYy4kbXMkdXMiOwogICAgfQogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlIHdpdGggW2R1cmF0aW9uXSBhZGRlZCB0byBbdGhpc10uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgdG9kYXkgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgICogdmFyIGZpZnR5RGF5c0Zyb21Ob3cgPSB0b2RheS5hZGQobmV3IER1cmF0aW9uKGRheXM6IDUwKSk7CiAgICogYGBgCiAgICoKICAgKiBOb3RpY2UgdGhhdCB0aGUgZHVyYXRpb24gYmVpbmcgYWRkZWQgaXMgYWN0dWFsbHkgNTAgKiAyNCAqIDYwICogNjAKICAgKiBzZWNvbmRzLiBJZiB0aGUgcmVzdWx0aW5nIGBEYXRlVGltZWAgaGFzIGEgZGlmZmVyZW50IGRheWxpZ2h0IHNhdmluZyBvZmZzZXQKICAgKiB0aGFuIGB0aGlzYCwgdGhlbiB0aGUgcmVzdWx0IHdvbid0IGhhdmUgdGhlIHNhbWUgdGltZS1vZi1kYXkgYXMgYHRoaXNgLCBhbmQKICAgKiBtYXkgbm90IGV2ZW4gaGl0IHRoZSBjYWxlbmRhciBkYXRlIDUwIGRheXMgbGF0ZXIuCiAgICoKICAgKiBCZSBjYXJlZnVsIHdoZW4gd29ya2luZyB3aXRoIGRhdGVzIGluIGxvY2FsIHRpbWUuCiAgICovCiAgZXh0ZXJuYWwgRGF0ZVRpbWUgYWRkKER1cmF0aW9uIGR1cmF0aW9uKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlIHdpdGggW2R1cmF0aW9uXSBzdWJ0cmFjdGVkIGZyb20gW3RoaXNdLgogICAqCiAgICogYGBgCiAgICogRGF0ZVRpbWUgdG9kYXkgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgICogRGF0ZVRpbWUgZmlmdHlEYXlzQWdvID0gdG9kYXkuc3VidHJhY3QobmV3IER1cmF0aW9uKGRheXM6IDUwKSk7CiAgICogYGBgCiAgICoKICAgKiBOb3RpY2UgdGhhdCB0aGUgZHVyYXRpb24gYmVpbmcgc3VidHJhY3RlZCBpcyBhY3R1YWxseSA1MCAqIDI0ICogNjAgKiA2MAogICAqIHNlY29uZHMuIElmIHRoZSByZXN1bHRpbmcgYERhdGVUaW1lYCBoYXMgYSBkaWZmZXJlbnQgZGF5bGlnaHQgc2F2aW5nIG9mZnNldAogICAqIHRoYW4gYHRoaXNgLCB0aGVuIHRoZSByZXN1bHQgd29uJ3QgaGF2ZSB0aGUgc2FtZSB0aW1lLW9mLWRheSBhcyBgdGhpc2AsIGFuZAogICAqIG1heSBub3QgZXZlbiBoaXQgdGhlIGNhbGVuZGFyIGRhdGUgNTAgZGF5cyBlYXJsaWVyLgogICAqCiAgICogQmUgY2FyZWZ1bCB3aGVuIHdvcmtpbmcgd2l0aCBkYXRlcyBpbiBsb2NhbCB0aW1lLgogICAqLwogIGV4dGVybmFsIERhdGVUaW1lIHN1YnRyYWN0KER1cmF0aW9uIGR1cmF0aW9uKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtEdXJhdGlvbl0gd2l0aCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFt0aGlzXSBhbmQgW290aGVyXS4KICAgKgogICAqIGBgYAogICAqIHZhciBiZXJsaW5XYWxsRmVsbCA9IG5ldyBEYXRlVGltZS51dGMoMTk4OSwgRGF0ZVRpbWUubm92ZW1iZXIsIDkpOwogICAqIHZhciBkRGF5ID0gbmV3IERhdGVUaW1lLnV0YygxOTQ0LCBEYXRlVGltZS5qdW5lLCA2KTsKICAgKgogICAqIER1cmF0aW9uIGRpZmZlcmVuY2UgPSBiZXJsaW5XYWxsRmVsbC5kaWZmZXJlbmNlKGREYXkpOwogICAqIGFzc2VydChkaWZmZXJlbmNlLmluRGF5cyA9PSAxNjU5Mik7CiAgICogYGBgCiAgICoKICAgKiBUaGUgZGlmZmVyZW5jZSBpcyBtZWFzdXJlZCBpbiBzZWNvbmRzIGFuZCBmcmFjdGlvbnMgb2Ygc2Vjb25kcy4KICAgKiBUaGUgZGlmZmVyZW5jZSBhYm92ZSBjb3VudHMgdGhlIG51bWJlciBvZiBmcmFjdGlvbmFsIHNlY29uZHMgYmV0d2VlbgogICAqIG1pZG5pZ2h0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhvc2UgZGF0ZXMuCiAgICogSWYgdGhlIGRhdGVzIGFib3ZlIGhhZCBiZWVuIGluIGxvY2FsIHRpbWUsIG5vdCBVVEMsIHRoZW4gdGhlIGRpZmZlcmVuY2UKICAgKiBiZXR3ZWVuIHR3byBtaWRuaWdodHMgbWF5IG5vdCBiZSBhIG11bHRpcGxlIG9mIDI0IGhvdXJzIGR1ZSB0byBkYXlsaWdodAogICAqIHNhdmluZyBkaWZmZXJlbmNlcy4KICAgKgogICAqIEZvciBleGFtcGxlLCBpbiBBdXN0cmFsaWEsIHNpbWlsYXIgY29kZSB1c2luZyBsb2NhbCB0aW1lIGluc3RlYWQgb2YgVVRDOgogICAqCiAgICogYGBgCiAgICogdmFyIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lKDE5ODksIERhdGVUaW1lLm5vdmVtYmVyLCA5KTsKICAgKiB2YXIgZERheSA9IG5ldyBEYXRlVGltZSgxOTQ0LCBEYXRlVGltZS5qdW5lLCA2KTsKICAgKiBEdXJhdGlvbiBkaWZmZXJlbmNlID0gYmVybGluV2FsbEZlbGwuZGlmZmVyZW5jZShkRGF5KTsKICAgKiBhc3NlcnQoZGlmZmVyZW5jZS5pbkRheXMgPT0gMTY1OTIpOwogICAqIGBgYAogICAqIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSBkaWZmZXJlbmNlIGlzIGFjdHVhbGx5IDE2NTkxIGRheXMgYW5kIDIzIGhvdXJzLCBhbmQKICAgKiBbRHVyYXRpb24uaW5EYXlzXSBvbmx5IHJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBkYXlzLgogICAqLwogIGV4dGVybmFsIER1cmF0aW9uIGRpZmZlcmVuY2UoRGF0ZVRpbWUgb3RoZXIpOwoKICBleHRlcm5hbCBEYXRlVGltZS5faW50ZXJuYWwoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgaW50IGhvdXIsCiAgICAgIGludCBtaW51dGUsIGludCBzZWNvbmQsIGludCBtaWxsaXNlY29uZCwgaW50IG1pY3Jvc2Vjb25kLCBib29sIGlzVXRjKTsKCiAgZXh0ZXJuYWwgRGF0ZVRpbWUuX25vdygpOwoKICAvLy8gUmV0dXJucyB0aGUgdGltZSBhcyB2YWx1ZSAobWlsbGlzZWNvbmQgb3IgbWljcm9zZWNvbmQgc2luY2UgZXBvY2gpLCBvcgogIC8vLyBudWxsIGlmIHRoZSB2YWx1ZXMgYXJlIG91dCBvZiByYW5nZS4KICBleHRlcm5hbCBzdGF0aWMgaW50IF9icm9rZW5Eb3duRGF0ZVRvVmFsdWUoCiAgICAgIGludCB5ZWFyLAogICAgICBpbnQgbW9udGgsCiAgICAgIGludCBkYXksCiAgICAgIGludCBob3VyLAogICAgICBpbnQgbWludXRlLAogICAgICBpbnQgc2Vjb25kLAogICAgICBpbnQgbWlsbGlzZWNvbmQsCiAgICAgIGludCBtaWNyb3NlY29uZCwKICAgICAgYm9vbCBpc1V0Yyk7CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlCiAgICogdGhlICJVbml4IGVwb2NoIiAxOTcwLTAxLTAxVDAwOjAwOjAwWiAoVVRDKS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHRpbWUgem9uZS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgYXQgbW9zdAogICAqIDgsNjQwLDAwMCwwMDAsMDAwLDAwMG1zICgxMDAsMDAwLDAwMCBkYXlzKSBmcm9tIHRoZSBVbml4IGVwb2NoLgogICAqIEluIG90aGVyIHdvcmRzOiBgbWlsbGlzZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA8PSA4NjQwMDAwMDAwMDAwMDAwYC4KICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IG1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIHNpbmNlCiAgICogdGhlICJVbml4IGVwb2NoIiAxOTcwLTAxLTAxVDAwOjAwOjAwWiAoVVRDKS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHRpbWUgem9uZS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgYXQgbW9zdAogICAqIDgsNjQwLDAwMCwwMDAsMDAwLDAwMCwwMDB1cyAoMTAwLDAwMCwwMDAgZGF5cykgZnJvbSB0aGUgVW5peCBlcG9jaC4KICAgKiBJbiBvdGhlciB3b3JkczogYG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2guYWJzKCkgPD0gODY0MDAwMDAwMDAwMDAwMDAwMGAuCiAgICoKICAgKiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBkb2VzIG5vdCBmaXQgaW50byA1MyBiaXRzICh0aGUgc2l6ZSBvZiBhIElFRUUgZG91YmxlKS4KICAgKiBBIEphdmFTY3JpcHQgbnVtYmVyIGlzIG5vdCBhYmxlIHRvIGhvbGQgdGhpcyB2YWx1ZS4KICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2g7CgogIC8qKgogICAqIFRoZSB0aW1lIHpvbmUgbmFtZS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIG1heSBiZSBhbgogICAqIGFiYnJldmlhdGlvbiBvciBhIGZ1bGwgbmFtZS4KICAgKgogICAqIEluIHRoZSBicm93c2VyIG9yIG9uIFVuaXgtbGlrZSBzeXN0ZW1zIGNvbW1vbmx5IHJldHVybnMgYWJicmV2aWF0aW9ucywKICAgKiBzdWNoIGFzICJDRVQiIG9yICJDRVNUIi4gT24gV2luZG93cyByZXR1cm5zIHRoZSBmdWxsIG5hbWUsIGZvciBleGFtcGxlCiAgICogIlBhY2lmaWMgU3RhbmRhcmQgVGltZSIuCiAgICovCiAgZXh0ZXJuYWwgU3RyaW5nIGdldCB0aW1lWm9uZU5hbWU7CgogIC8qKgogICAqIFRoZSB0aW1lIHpvbmUgb2Zmc2V0LCB3aGljaAogICAqIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbG9jYWwgdGltZSBhbmQgVVRDLgogICAqCiAgICogVGhlIG9mZnNldCBpcyBwb3NpdGl2ZSBmb3IgdGltZSB6b25lcyBlYXN0IG9mIFVUQy4KICAgKgogICAqIE5vdGUsIHRoYXQgSmF2YVNjcmlwdCwgUHl0aG9uIGFuZCBDIHJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFVUQyBhbmQKICAgKiBsb2NhbCB0aW1lLiBKYXZhLCBDIyBhbmQgUnVieSByZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsb2NhbCB0aW1lIGFuZAogICAqIFVUQy4KICAgKi8KICBleHRlcm5hbCBEdXJhdGlvbiBnZXQgdGltZVpvbmVPZmZzZXQ7CgogIC8qKgogICAqIFRoZSB5ZWFyLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLnllYXIgPT0gMTk2OSk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCB5ZWFyOwoKICAvKioKICAgKiBUaGUgbW9udGggWzEuLjEyXS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5tb250aCA9PSA3KTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcubW9udGggPT0gRGF0ZVRpbWUuanVseSk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBtb250aDsKCiAgLyoqCiAgICogVGhlIGRheSBvZiB0aGUgbW9udGggWzEuLjMxXS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5kYXkgPT0gMjApOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgZGF5OwoKICAvKioKICAgKiBUaGUgaG91ciBvZiB0aGUgZGF5LCBleHByZXNzZWQgYXMgaW4gYSAyNC1ob3VyIGNsb2NrIFswLi4yM10uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcuaG91ciA9PSAyMCk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBob3VyOwoKICAvKioKICAgKiBUaGUgbWludXRlIFswLi4uNTldLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLm1pbnV0ZSA9PSAxOCk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBtaW51dGU7CgogIC8qKgogICAqIFRoZSBzZWNvbmQgWzAuLi41OV0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcuc2Vjb25kID09IDQpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgc2Vjb25kOwoKICAvKioKICAgKiBUaGUgbWlsbGlzZWNvbmQgWzAuLi45OTldLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLm1pbGxpc2Vjb25kID09IDApOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgbWlsbGlzZWNvbmQ7CgogIC8qKgogICAqIFRoZSBtaWNyb3NlY29uZCBbMC4uLjk5OV0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcubWljcm9zZWNvbmQgPT0gMCk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBtaWNyb3NlY29uZDsKCiAgLyoqCiAgICogVGhlIGRheSBvZiB0aGUgd2VlayBbbW9uZGF5XS4uW3N1bmRheV0uCiAgICoKICAgKiBJbiBhY2NvcmRhbmNlIHdpdGggSVNPIDg2MDEKICAgKiBhIHdlZWsgc3RhcnRzIHdpdGggTW9uZGF5LCB3aGljaCBoYXMgdGhlIHZhbHVlIDEuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcud2Vla2RheSA9PSA3KTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcud2Vla2RheSA9PSBEYXRlVGltZS5zdW5kYXkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgd2Vla2RheTsKCiAgLyoKICAgKiBkYXRlIDo6PSB5ZWFyZGF0ZSB0aW1lX29wdCB0aW1lem9uZV9vcHQKICAgKiB5ZWFyZGF0ZSA6Oj0geWVhciBjb2xvbl9vcHQgbW9udGggY29sb25fb3B0IGRheQogICAqIHllYXIgOjo9IHNpZ25fb3B0IGRpZ2l0ezQsNn0KICAgKiBjb2xvbl9vcHQgOjogPGVtcHR5PiB8ICc6JwogICAqIHNpZ24gOjo9ICcrJyB8ICctJwogICAqIHNpZ25fb3B0IDo6PSAgPGVtcHR5PiB8IHNpZ24KICAgKiBtb250aCA6Oj0gZGlnaXR7Mn0KICAgKiBkYXkgOjo9IGRpZ2l0ezJ9CiAgICogdGltZV9vcHQgOjo9IDxlbXB0eT4gfCAoJyAnIHwgJ1QnKSBob3VyIG1pbnV0ZXNfb3B0CiAgICogbWludXRlc19vcHQgOjo9IDxlbXB0eT4gfCBjb2xvbl9vcHQgZGlnaXR7Mn0gc2Vjb25kc19vcHQKICAgKiBzZWNvbmRzX29wdCA6Oj0gPGVtcHR5PiB8IGNvbG9uX29wdCBkaWdpdHsyfSBtaWxsaXNfb3B0CiAgICogbWljcm9zX29wdCA6Oj0gPGVtcHR5PiB8ICgnLicgfCAnLCcpIGRpZ2l0ezEsNn0KICAgKiB0aW1lem9uZV9vcHQgOjo9IDxlbXB0eT4gfCBzcGFjZV9vcHQgdGltZXpvbmUKICAgKiBzcGFjZV9vcHQgOjogJyAnIHwgPGVtcHR5PgogICAqIHRpbWV6b25lIDo6PSAneicgfCAnWicgfCBzaWduIGRpZ2l0ezJ9IHRpbWV6b25lbWluc19vcHQKICAgKiB0aW1lem9uZW1pbnNfb3B0IDo6PSA8ZW1wdHk+IHwgY29sb25fb3B0IGRpZ2l0ezJ9CiAgICovCiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBfcGFyc2VGb3JtYXQgPSBSZWdFeHAoCiAgICAgIHInXihbKy1dP1xkezQsNn0pLT8oXGRcZCktPyhcZFxkKScgLy8gRGF5IHBhcnQuCiAgICAgIHInKD86WyBUXShcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCkoPzpbLixdKFxkezEsNn0pKT8pPyk/JyAvLyBUaW1lIHBhcnQuCiAgICAgIHInKCA/W3paXXwgPyhbLStdKShcZFxkKSg/Ojo/KFxkXGQpKT8pPyk/JCcpOyAvLyBUaW1lem9uZSBwYXJ0Lgp9CoNrAE5OPAETAQQ6A0lQAz0vLTMaEAMHITdIBwM9NR8DNSgDIS4DBycjBwMkQS48AwdGOAcDQz0DJgMvMwMHLAcDRylLQhwaNhoDIQM2OiMDBzg6BwMjA0E1UQoDByE7BwNBNAMHPCYHAzxFL009NEpKGQMWAy8pAz0mPwMEMT4fICIhHyEfJAE+ICEeHhwdHR8iISIiJwEGIQVQQR8GFAEGMQUJLhkJBQYUAQZIBRJNDAUJQAkGFRYTFBYWGxxMIQEGRgUJQgkFTU0cBhkWExQWFhscTCABBkgWBQkrCQYgAQZGBS9GBS41BSgFRD47UCoyNlRNDEQqOExLKz0wBU5MDwU3ODcFIwUfJycdGxQVGh82RgZFLDIbMhkrJyMIAUsXNiclHR0BGCYYJDQMChcIAScnJSstLSZGGEcYTxoeGRYgLjE1PDMtCghKNBtFCDcNRQYEAQZGBUE0BjUpCiUbEwYEAUIBBiouBUIFK0UfBksdAQYqLgVCBStFHwZLHQEGQAVCBjNFRyEbRwYZPQYEAQZLJAUJMSgFTCMJBUsjBiwBBjMFIz4FCSM9JCEFRCwsBSkpCQYqAQYyBSM+BQkjNiEhBUQpKQUpKQkGKQEGQgVREAUJIzYrKAVEMzMFMDAJBjIBBi8tBVBOJAYqAT4BBjkFPS0FCUU7CQYXETgGEQQBBjcFLS0FCUU6CQYVHDUEASUYJCMtLR4EASQjGCUtHAQBJiEhFQQBJCAUBAEGOAVMQTREJgU8BhYiIiAhJSUrQxEwDS0GBAEGSAVDTAwFTjJGMDstL0E7TyUFPAYdD1AiICElJStDETINLwYEAQZIBQklPwkFSFFRNwU3BiwBBk8FCSpFCQVNUVE5BTcGMQEGSgUJSDoFPCkJBUVKL01NGQVOBQlENjwpCU8+BjABRk0BHAFNKy4QEQ8QEhIXFxMBBiYyBTEFG0VJBisBBiYyBTEFG0lMBVE5BisBBhkFQiIFTEweBiQBBiEzBTgFT1AKBigBBg8FCT8nCQYZAQYYBQk/JTEJBhoBBiMFCT8kCQYYAQZDBQk/JQkGGQEGGgUJPycJBhsBBhoFCT8mCQYbAQYgBQk/KwkGIAEGIAUJPysJBiABBi0FITcFCT8nNQkGHAEFLTUiIBgiGBY5Pj01MyA9NwYtNlFGAgEYZGFydDpjb3JlL2RhdGVfdGltZS5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZGF0ZV9wYXRjaC5kYXJ0vfUvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vIFZNIGltcGxlbWVudGF0aW9uIG9mIERhdGVUaW1lLgpAcGF0Y2gKY2xhc3MgRGF0ZVRpbWUgewogIC8vIE5hdGl2ZXMuCiAgLy8gVGhlIG5hdGl2ZXMgaGF2ZSBiZWVuIG1vdmVkIHVwIGhlcmUgdG8gd29yayBhcm91bmQgSXNzdWUgMTA0MDEuCiAgc3RhdGljIGludCBfZ2V0Q3VycmVudE1pY3JvcygpIG5hdGl2ZSAiRGF0ZVRpbWVfY3VycmVudFRpbWVNaWNyb3MiOwoKICBzdGF0aWMgU3RyaW5nIF90aW1lWm9uZU5hbWVGb3JDbGFtcGVkU2Vjb25kcyhpbnQgc2Vjb25kc1NpbmNlRXBvY2gpCiAgICAgIG5hdGl2ZSAiRGF0ZVRpbWVfdGltZVpvbmVOYW1lIjsKCiAgc3RhdGljIGludCBfdGltZVpvbmVPZmZzZXRJblNlY29uZHNGb3JDbGFtcGVkU2Vjb25kcyhpbnQgc2Vjb25kc1NpbmNlRXBvY2gpCiAgICAgIG5hdGl2ZSAiRGF0ZVRpbWVfdGltZVpvbmVPZmZzZXRJblNlY29uZHMiOwoKICBzdGF0aWMgaW50IF9sb2NhbFRpbWVab25lQWRqdXN0bWVudEluU2Vjb25kcygpCiAgICAgIG5hdGl2ZSAiRGF0ZVRpbWVfbG9jYWxUaW1lWm9uZUFkanVzdG1lbnRJblNlY29uZHMiOwoKICBzdGF0aWMgY29uc3QgX01JQ1JPU0VDT05EX0lOREVYID0gMDsKICBzdGF0aWMgY29uc3QgX01JTExJU0VDT05EX0lOREVYID0gMTsKICBzdGF0aWMgY29uc3QgX1NFQ09ORF9JTkRFWCA9IDI7CiAgc3RhdGljIGNvbnN0IF9NSU5VVEVfSU5ERVggPSAzOwogIHN0YXRpYyBjb25zdCBfSE9VUl9JTkRFWCA9IDQ7CiAgc3RhdGljIGNvbnN0IF9EQVlfSU5ERVggPSA1OwogIHN0YXRpYyBjb25zdCBfV0VFS0RBWV9JTkRFWCA9IDY7CiAgc3RhdGljIGNvbnN0IF9NT05USF9JTkRFWCA9IDc7CiAgc3RhdGljIGNvbnN0IF9ZRUFSX0lOREVYID0gODsKCiAgTGlzdCBfX3BhcnRzOwoKICBAcGF0Y2gKICBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChpbnQgbWlsbGlzZWNvbmRzU2luY2VFcG9jaCwKICAgICAge2Jvb2wgaXNVdGM6IGZhbHNlfSkKICAgICAgOiB0aGlzLl93aXRoVmFsdWUoCiAgICAgICAgICAgIG1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCwKICAgICAgICAgICAgaXNVdGM6IGlzVXRjKTsKCiAgQHBhdGNoCiAgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2goaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsCiAgICAgIHtib29sIGlzVXRjOiBmYWxzZX0pCiAgICAgIDogdGhpcy5fd2l0aFZhbHVlKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsIGlzVXRjOiBpc1V0Yyk7CgogIEBwYXRjaAogIERhdGVUaW1lLl9pbnRlcm5hbChpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwKICAgICAgaW50IHNlY29uZCwgaW50IG1pbGxpc2Vjb25kLCBpbnQgbWljcm9zZWNvbmQsIGJvb2wgaXNVdGMpCiAgICAgIDogdGhpcy5pc1V0YyA9IGlzVXRjLAogICAgICAgIHRoaXMuX3ZhbHVlID0gX2Jyb2tlbkRvd25EYXRlVG9WYWx1ZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsCiAgICAgICAgICAgIHNlY29uZCwgbWlsbGlzZWNvbmQsIG1pY3Jvc2Vjb25kLCBpc1V0YykgewogICAgaWYgKF92YWx1ZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgaWYgKGlzVXRjID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgfQoKICBAcGF0Y2gKICBEYXRlVGltZS5fbm93KCkKICAgICAgOiBpc1V0YyA9IGZhbHNlLAogICAgICAgIF92YWx1ZSA9IF9nZXRDdXJyZW50TWljcm9zKCk7CgogIEBwYXRjaAogIFN0cmluZyBnZXQgdGltZVpvbmVOYW1lIHsKICAgIGlmIChpc1V0YykgcmV0dXJuICJVVEMiOwogICAgcmV0dXJuIF90aW1lWm9uZU5hbWUobWljcm9zZWNvbmRzU2luY2VFcG9jaCk7CiAgfQoKICBAcGF0Y2gKICBEdXJhdGlvbiBnZXQgdGltZVpvbmVPZmZzZXQgewogICAgaWYgKGlzVXRjKSByZXR1cm4gbmV3IER1cmF0aW9uKCk7CiAgICBpbnQgb2Zmc2V0SW5TZWNvbmRzID0gX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpOwogICAgcmV0dXJuIG5ldyBEdXJhdGlvbihzZWNvbmRzOiBvZmZzZXRJblNlY29uZHMpOwogIH0KCiAgQHBhdGNoCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSA9PgogICAgICBvdGhlciBpcyBEYXRlVGltZSAmJgogICAgICBfdmFsdWUgPT0gb3RoZXIubWljcm9zZWNvbmRzU2luY2VFcG9jaCAmJgogICAgICBpc1V0YyA9PSBvdGhlci5pc1V0YzsKCiAgQHBhdGNoCiAgYm9vbCBpc0JlZm9yZShEYXRlVGltZSBvdGhlcikgPT4gX3ZhbHVlIDwgb3RoZXIubWljcm9zZWNvbmRzU2luY2VFcG9jaDsKCiAgQHBhdGNoCiAgYm9vbCBpc0FmdGVyKERhdGVUaW1lIG90aGVyKSA9PiBfdmFsdWUgPiBvdGhlci5taWNyb3NlY29uZHNTaW5jZUVwb2NoOwoKICBAcGF0Y2gKICBib29sIGlzQXRTYW1lTW9tZW50QXMoRGF0ZVRpbWUgb3RoZXIpID0+CiAgICAgIF92YWx1ZSA9PSBvdGhlci5taWNyb3NlY29uZHNTaW5jZUVwb2NoOwoKICBAcGF0Y2gKICBpbnQgY29tcGFyZVRvKERhdGVUaW1lIG90aGVyKSA9PgogICAgICBfdmFsdWUuY29tcGFyZVRvKG90aGVyLm1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpOwoKICAvKiogVGhlIGZpcnN0IGxpc3QgY29udGFpbnMgdGhlIGRheXMgdW50aWwgZWFjaCBtb250aCBpbiBub24tbGVhcCB5ZWFycy4gVGhlCiAgICAqIHNlY29uZCBsaXN0IGNvbnRhaW5zIHRoZSBkYXlzIGluIGxlYXAgeWVhcnMuICovCiAgc3RhdGljIGNvbnN0IExpc3Q8TGlzdDxpbnQ+PiBfREFZU19VTlRJTF9NT05USCA9IGNvbnN0IFsKICAgIGNvbnN0IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF0sCiAgICBjb25zdCBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdCiAgXTsKCiAgc3RhdGljIExpc3QgX2NvbXB1dGVVcHBlclBhcnQoaW50IGxvY2FsTWljcm9zKSB7CiAgICBjb25zdCBpbnQgREFZU19JTl80X1lFQVJTID0gNCAqIDM2NSArIDE7CiAgICBjb25zdCBpbnQgREFZU19JTl8xMDBfWUVBUlMgPSAyNSAqIERBWVNfSU5fNF9ZRUFSUyAtIDE7CiAgICBjb25zdCBpbnQgREFZU19JTl80MDBfWUVBUlMgPSA0ICogREFZU19JTl8xMDBfWUVBUlMgKyAxOwogICAgY29uc3QgaW50IERBWVNfMTk3MF9UT18yMDAwID0gMzAgKiAzNjUgKyA3OwogICAgY29uc3QgaW50IERBWVNfT0ZGU0VUID0KICAgICAgICAxMDAwICogREFZU19JTl80MDBfWUVBUlMgKyA1ICogREFZU19JTl80MDBfWUVBUlMgLSBEQVlTXzE5NzBfVE9fMjAwMDsKICAgIGNvbnN0IGludCBZRUFSU19PRkZTRVQgPSA0MDAwMDA7CgogICAgaW50IHJlc3VsdFllYXIgPSAwOwogICAgaW50IHJlc3VsdE1vbnRoID0gMDsKICAgIGludCByZXN1bHREYXkgPSAwOwoKICAgIC8vIEFsd2F5cyByb3VuZCBkb3duLgogICAgZmluYWwgaW50IGRheXNTaW5jZTE5NzAgPQogICAgICAgIF9mbG9vcmVkRGl2aXNpb24obG9jYWxNaWNyb3MsIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlckRheSk7CiAgICBpbnQgZGF5cyA9IGRheXNTaW5jZTE5NzA7CiAgICBkYXlzICs9IERBWVNfT0ZGU0VUOwogICAgcmVzdWx0WWVhciA9IDQwMCAqIChkYXlzIH4vIERBWVNfSU5fNDAwX1lFQVJTKSAtIFlFQVJTX09GRlNFVDsKICAgIGRheXMgPSBkYXlzLnJlbWFpbmRlcihEQVlTX0lOXzQwMF9ZRUFSUyk7CiAgICBkYXlzLS07CiAgICBpbnQgeWQxID0gZGF5cyB+LyBEQVlTX0lOXzEwMF9ZRUFSUzsKICAgIGRheXMgPSBkYXlzLnJlbWFpbmRlcihEQVlTX0lOXzEwMF9ZRUFSUyk7CiAgICByZXN1bHRZZWFyICs9IDEwMCAqIHlkMTsKICAgIGRheXMrKzsKICAgIGludCB5ZDIgPSBkYXlzIH4vIERBWVNfSU5fNF9ZRUFSUzsKICAgIGRheXMgPSBkYXlzLnJlbWFpbmRlcihEQVlTX0lOXzRfWUVBUlMpOwogICAgcmVzdWx0WWVhciArPSA0ICogeWQyOwogICAgZGF5cy0tOwogICAgaW50IHlkMyA9IGRheXMgfi8gMzY1OwogICAgZGF5cyA9IGRheXMucmVtYWluZGVyKDM2NSk7CiAgICByZXN1bHRZZWFyICs9IHlkMzsKCiAgICBib29sIGlzTGVhcCA9ICh5ZDEgPT0gMCB8fCB5ZDIgIT0gMCkgJiYgeWQzID09IDA7CiAgICBpZiAoaXNMZWFwKSBkYXlzKys7CgogICAgTGlzdDxpbnQ+IGRheXNVbnRpbE1vbnRoID0gX0RBWVNfVU5USUxfTU9OVEhbaXNMZWFwID8gMSA6IDBdOwogICAgZm9yIChyZXN1bHRNb250aCA9IDEyOwogICAgICAgIGRheXNVbnRpbE1vbnRoW3Jlc3VsdE1vbnRoIC0gMV0gPiBkYXlzOwogICAgICAgIHJlc3VsdE1vbnRoLS0pIHsKICAgICAgLy8gRG8gbm90aGluZy4KICAgIH0KICAgIHJlc3VsdERheSA9IGRheXMgLSBkYXlzVW50aWxNb250aFtyZXN1bHRNb250aCAtIDFdICsgMTsKCiAgICBpbnQgcmVzdWx0TWljcm9zZWNvbmQgPSBsb2NhbE1pY3JvcyAlIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwogICAgaW50IHJlc3VsdE1pbGxpc2Vjb25kID0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKGxvY2FsTWljcm9zLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCkgJQogICAgICAgICAgICBEdXJhdGlvbi5taWxsaXNlY29uZHNQZXJTZWNvbmQ7CiAgICBpbnQgcmVzdWx0U2Vjb25kID0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKGxvY2FsTWljcm9zLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQpICUKICAgICAgICAgICAgRHVyYXRpb24uc2Vjb25kc1Blck1pbnV0ZTsKCiAgICBpbnQgcmVzdWx0TWludXRlID0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKGxvY2FsTWljcm9zLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaW51dGUpOwogICAgcmVzdWx0TWludXRlICU9IER1cmF0aW9uLm1pbnV0ZXNQZXJIb3VyOwoKICAgIGludCByZXN1bHRIb3VyID0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKGxvY2FsTWljcm9zLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJIb3VyKTsKICAgIHJlc3VsdEhvdXIgJT0gRHVyYXRpb24uaG91cnNQZXJEYXk7CgogICAgLy8gSW4gYWNjb3JkYW5jZSB3aXRoIElTTyA4NjAxIGEgd2VlawogICAgLy8gc3RhcnRzIHdpdGggTW9uZGF5LiBNb25kYXkgaGFzIHRoZSB2YWx1ZSAxIHVwIHRvIFN1bmRheSB3aXRoIDcuCiAgICAvLyAxOTcwLTEtMSB3YXMgYSBUaHVyc2RheS4KICAgIGludCByZXN1bHRXZWVrZGF5ID0gKChkYXlzU2luY2UxOTcwICsgRGF0ZVRpbWUudGh1cnNkYXkgLSBEYXRlVGltZS5tb25kYXkpICUKICAgICAgICAgICAgRGF0ZVRpbWUuZGF5c1BlcldlZWspICsKICAgICAgICBEYXRlVGltZS5tb25kYXk7CgogICAgTGlzdCBsaXN0ID0gbmV3IExpc3QoX1lFQVJfSU5ERVggKyAxKTsKICAgIGxpc3RbX01JQ1JPU0VDT05EX0lOREVYXSA9IHJlc3VsdE1pY3Jvc2Vjb25kOwogICAgbGlzdFtfTUlMTElTRUNPTkRfSU5ERVhdID0gcmVzdWx0TWlsbGlzZWNvbmQ7CiAgICBsaXN0W19TRUNPTkRfSU5ERVhdID0gcmVzdWx0U2Vjb25kOwogICAgbGlzdFtfTUlOVVRFX0lOREVYXSA9IHJlc3VsdE1pbnV0ZTsKICAgIGxpc3RbX0hPVVJfSU5ERVhdID0gcmVzdWx0SG91cjsKICAgIGxpc3RbX0RBWV9JTkRFWF0gPSByZXN1bHREYXk7CiAgICBsaXN0W19XRUVLREFZX0lOREVYXSA9IHJlc3VsdFdlZWtkYXk7CiAgICBsaXN0W19NT05USF9JTkRFWF0gPSByZXN1bHRNb250aDsKICAgIGxpc3RbX1lFQVJfSU5ERVhdID0gcmVzdWx0WWVhcjsKICAgIHJldHVybiBsaXN0OwogIH0KCiAgZ2V0IF9wYXJ0cyB7CiAgICBfX3BhcnRzID8/PSBfY29tcHV0ZVVwcGVyUGFydChfbG9jYWxEYXRlSW5VdGNNaWNyb3MpOwogICAgcmV0dXJuIF9fcGFydHM7CiAgfQoKICBAcGF0Y2gKICBEYXRlVGltZSBhZGQoRHVyYXRpb24gZHVyYXRpb24pIHsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuX3dpdGhWYWx1ZShfdmFsdWUgKyBkdXJhdGlvbi5pbk1pY3Jvc2Vjb25kcywKICAgICAgICBpc1V0YzogaXNVdGMpOwogIH0KCiAgQHBhdGNoCiAgRGF0ZVRpbWUgc3VidHJhY3QoRHVyYXRpb24gZHVyYXRpb24pIHsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuX3dpdGhWYWx1ZShfdmFsdWUgLSBkdXJhdGlvbi5pbk1pY3Jvc2Vjb25kcywKICAgICAgICBpc1V0YzogaXNVdGMpOwogIH0KCiAgQHBhdGNoCiAgRHVyYXRpb24gZGlmZmVyZW5jZShEYXRlVGltZSBvdGhlcikgewogICAgcmV0dXJuIG5ldyBEdXJhdGlvbihtaWNyb3NlY29uZHM6IF92YWx1ZSAtIG90aGVyLl92YWx1ZSk7CiAgfQoKICBAcGF0Y2gKICBpbnQgZ2V0IG1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggPT4KICAgICAgX3ZhbHVlIH4vIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwoKICBAcGF0Y2gKICBpbnQgZ2V0IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2ggPT4gX3ZhbHVlOwoKICBAcGF0Y2gKICBpbnQgZ2V0IG1pY3Jvc2Vjb25kID0+IF9wYXJ0c1tfTUlDUk9TRUNPTkRfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IG1pbGxpc2Vjb25kID0+IF9wYXJ0c1tfTUlMTElTRUNPTkRfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IHNlY29uZCA9PiBfcGFydHNbX1NFQ09ORF9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgbWludXRlID0+IF9wYXJ0c1tfTUlOVVRFX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCBob3VyID0+IF9wYXJ0c1tfSE9VUl9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgZGF5ID0+IF9wYXJ0c1tfREFZX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCB3ZWVrZGF5ID0+IF9wYXJ0c1tfV0VFS0RBWV9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgbW9udGggPT4gX3BhcnRzW19NT05USF9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgeWVhciA9PiBfcGFydHNbX1lFQVJfSU5ERVhdOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgbWljcm9zZWNvbmRzIGluIFVUQyB0aGF0IHJlcHJlc2VudCB0aGUgc2FtZSB2YWx1ZXMKICAgKiBhcyBbdGhpc10uCiAgICoKICAgKiBTYXkgYHRgIGlzIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiwgdGhlbgogICAqICogYHRoaXMueWVhciA9PSBuZXcgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2godCwgdHJ1ZSkueWVhcmAsCiAgICogKiBgdGhpcy5tb250aCA9PSBuZXcgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2godCwgdHJ1ZSkubW9udGhgLAogICAqICogYHRoaXMuZGF5ID09IG5ldyBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaCh0LCB0cnVlKS5kYXlgLAogICAqICogYHRoaXMuaG91ciA9PSBuZXcgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2godCwgdHJ1ZSkuaG91cmAsCiAgICogKiAuLi4KICAgKgogICAqIERheWxpZ2h0IHNhdmluZ3MgaXMgY29tcHV0ZWQgYXMgaWYgdGhlIGRhdGUgd2FzIGNvbXB1dGVkIGluIFsxOTcwLi4yMDM3XS4KICAgKiBJZiBbdGhpc10gbGllcyBvdXRzaWRlIHRoaXMgcmFuZ2UgdGhlbiBpdCBpcyBhIHllYXIgd2l0aCBzaW1pbGFyCiAgICogcHJvcGVydGllcyAobGVhcCB5ZWFyLCB3ZWVrZGF5cykgaXMgdXNlZCBpbnN0ZWFkLgogICAqLwogIGludCBnZXQgX2xvY2FsRGF0ZUluVXRjTWljcm9zIHsKICAgIGludCBtaWNyb3MgPSBfdmFsdWU7CiAgICBpZiAoaXNVdGMpIHJldHVybiBtaWNyb3M7CiAgICBpbnQgb2Zmc2V0ID0KICAgICAgICBfdGltZVpvbmVPZmZzZXRJblNlY29uZHMobWljcm9zKSAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZDsKICAgIHJldHVybiBtaWNyb3MgKyBvZmZzZXQ7CiAgfQoKICBzdGF0aWMgaW50IF9mbG9vcmVkRGl2aXNpb24oaW50IGEsIGludCBiKSB7CiAgICByZXR1cm4gKGEgLSAoYSA8IDAgPyBiIC0gMSA6IDApKSB+LyBiOwogIH0KCiAgLy8gUmV0dXJucyB0aGUgZGF5cyBzaW5jZSAxOTcwIGZvciB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuIFt5ZWFyXS4KICAvLyBbeWVhcl0gbWF5IGJlIGJlZm9yZSBlcG9jaC4KICBzdGF0aWMgaW50IF9kYXlGcm9tWWVhcihpbnQgeWVhcikgewogICAgcmV0dXJuIDM2NSAqICh5ZWFyIC0gMTk3MCkgKwogICAgICAgIF9mbG9vcmVkRGl2aXNpb24oeWVhciAtIDE5NjksIDQpIC0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKHllYXIgLSAxOTAxLCAxMDApICsKICAgICAgICBfZmxvb3JlZERpdmlzaW9uKHllYXIgLSAxNjAxLCA0MDApOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzTGVhcFllYXIoeSkgewogICAgLy8gKHkgJSAxNiA9PSAwKSBtYXRjaGVzIG11bHRpcGxlcyBvZiA0MDAsIGFuZCBpcyBmYXN0ZXIgdGhhbiAlIDQwMC4KICAgIHJldHVybiAoeSAlIDQgPT0gMCkgJiYgKCh5ICUgMTYgPT0gMCkgfHwgKHkgJSAxMDAgIT0gMCkpOwogIH0KCiAgLy8vIENvbnZlcnRzIHRoZSBnaXZlbiBicm9rZW4gZG93biBkYXRlIHRvIG1pY3Jvc2Vjb25kcy4KICBAcGF0Y2gKICBzdGF0aWMgaW50IF9icm9rZW5Eb3duRGF0ZVRvVmFsdWUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgaW50IGhvdXIsCiAgICAgIGludCBtaW51dGUsIGludCBzZWNvbmQsIGludCBtaWxsaXNlY29uZCwgaW50IG1pY3Jvc2Vjb25kLCBib29sIGlzVXRjKSB7CiAgICAvLyBTaW1wbGlmeSBjYWxjdWxhdGlvbnMgYnkgd29ya2luZyB3aXRoIHplcm8tYmFzZWQgbW9udGguCiAgICAtLW1vbnRoOwogICAgLy8gRGVhbCB3aXRoIHVuZGVyIGFuZCBvdmVyZmxvdy4KICAgIGlmIChtb250aCA+PSAxMikgewogICAgICB5ZWFyICs9IG1vbnRoIH4vIDEyOwogICAgICBtb250aCA9IG1vbnRoICUgMTI7CiAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkgewogICAgICBpbnQgcmVhbE1vbnRoID0gbW9udGggJSAxMjsKICAgICAgeWVhciArPSAobW9udGggLSByZWFsTW9udGgpIH4vIDEyOwogICAgICBtb250aCA9IHJlYWxNb250aDsKICAgIH0KCiAgICAvLyBGaXJzdCBjb21wdXRlIHRoZSBzZWNvbmRzIGluIFVUQywgaW5kZXBlbmRlbnQgb2YgdGhlIFtpc1V0Y10gZmxhZy4gSWYKICAgIC8vIG5lY2Vzc2FyeSB3ZSB3aWxsIGFkZCB0aGUgdGltZS16b25lIG9mZnNldCBsYXRlciBvbi4KICAgIGludCBkYXlzID0gZGF5IC0gMTsKICAgIGRheXMgKz0gX0RBWVNfVU5USUxfTU9OVEhbX2lzTGVhcFllYXIoeWVhcikgPyAxIDogMF1bbW9udGhdOwogICAgZGF5cyArPSBfZGF5RnJvbVllYXIoeWVhcik7CiAgICBpbnQgbWljcm9zZWNvbmRzU2luY2VFcG9jaCA9IGRheXMgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJEYXkgKwogICAgICAgIGhvdXIgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJIb3VyICsKICAgICAgICBtaW51dGUgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaW51dGUgKwogICAgICAgIHNlY29uZCAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZCArCiAgICAgICAgbWlsbGlzZWNvbmQgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCArCiAgICAgICAgbWljcm9zZWNvbmQ7CgogICAgLy8gU2luY2UgW190aW1lWm9uZU9mZnNldEluU2Vjb25kc10gd2lsbCBjcmFzaCBpZiB0aGUgaW5wdXQgaXMgZmFyIG91dCBvZgogICAgLy8gdGhlIHZhbGlkIHJhbmdlIHdlIGRvIGEgcHJlbGltaW5hcnkgdGVzdCB0aGF0IHdlZWRzIG91dCB2YWx1ZXMgdGhhdCBjYW4KICAgIC8vIG5vdCBiZWNvbWUgdmFsaWQgZXZlbiB3aXRoIHRpbWV6b25lIGFkanVzdG1lbnRzLgogICAgLy8gVGhlIHRpbWV6b25lIGFkanVzdG1lbnQgaXMgYWx3YXlzIGxlc3MgdGhhbiBhIGRheSwgc28gYWRkaW5nIGEgc2VjdXJpdHkKICAgIC8vIG1hcmdpbiBvZiBvbmUgZGF5IHNob3VsZCBiZSBlbm91Z2guCiAgICBpZiAobWljcm9zZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA+CiAgICAgICAgX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggKiAxMDAwICsgRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyRGF5KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmICghaXNVdGMpIHsKICAgICAgLy8gTm90ZSB0aGF0IHdlIGNhbid0IGxpdGVyYWxseSBmb2xsb3cgdGhlIEVDTUFTY3JpcHQgc3BlYyAod2hpY2ggdGhpcwogICAgICAvLyBjb2RlIGlzIGJhc2VkIG9uKSwgYmVjYXVzZSBpdCBsZWFkcyB0byBpbmNvcnJlY3QgY29tcHV0YXRpb25zIGF0CiAgICAgIC8vIHRoZSBEU1QgdHJhbnNpdGlvbiBwb2ludHMuCiAgICAgIC8vCiAgICAgIC8vIFNlZSBWOCdzIGNvbW1lbnQgaGVyZToKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Y4L3Y4L2Jsb2IvMDg5ZGQ3ZDI0NDdkNmVhZjU3YzhiYTZkOGYzNzk1N2YzYTI2OTc3Ny9zcmMvZGF0ZS5oI0wxMTgKCiAgICAgIC8vIFdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBsb2NhbCB0aW1lem9uZSBhZGp1c3RtZW50IGJlZm9yZSBhc2tpbmcgZm9yIHRoZQogICAgICAvLyBjb3JyZWN0IHpvbmUgb2Zmc2V0LgogICAgICBpbnQgYWRqdXN0bWVudCA9CiAgICAgICAgICBfbG9jYWxUaW1lWm9uZUFkanVzdG1lbnRJblNlY29uZHMoKSAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZDsKICAgICAgLy8gVGhlIGFkanVzdG1lbnQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGFjdHVhbCBkYXRlIGFuZCBvZiB0aGUgZGF5bGlnaHQKICAgICAgLy8gc2F2aW5nIHRpbWUuIEl0IGlzIHBvc2l0aXZlIGVhc3Qgb2YgdGhlIFByaW1lIE1lcmlkaWFuIGFuZCBuZWdhdGl2ZQogICAgICAvLyB3ZXN0IG9mIGl0LCBlLmcuIC0yODgwMCBzZWMgZm9yIEFtZXJpY2EvTG9zX0FuZ2VsZXMgdGltZXpvbmUuCgogICAgICAvLyBXZSByZW1vdmUgb25lIGhvdXIgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgY29ycmVjdCBvZmZzZXQgYXQKICAgICAgLy8gRFNUIHRyYW5zaXRpb25pbmcgcG9pbnRzLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIGFuZCBvbmx5CiAgICAgIC8vIGNvcnJlY3QgaW4gdGltZXpvbmVzIHRoYXQgc2hpZnQgZm9yIGV4YWN0bHkgb25lIGhvdXIuCiAgICAgIGFkanVzdG1lbnQgKz0gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVySG91cjsKICAgICAgaW50IHpvbmVPZmZzZXQgPQogICAgICAgICAgX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2ggLSBhZGp1c3RtZW50KTsKCiAgICAgIC8vIFRoZSB6b25lT2Zmc2V0IGRlcGVuZHMgb24gdGhlIGFjdHVhbCBkYXRlIGFuZCByZWZsZWN0cyBhbnkgZGF5bGlnaHQKICAgICAgLy8gc2F2aW5nIHRpbWUgYW5kL29yIGhpc3RvcmljYWwgZGV2aWF0aW9uIHJlbGF0aXZlIHRvIFVUQyB0aW1lLgogICAgICAvLyBJdCBpcyBwb3NpdGl2ZSBlYXN0IG9mIHRoZSBQcmltZSBNZXJpZGlhbiBhbmQgbmVnYXRpdmUgd2VzdCBvZiBpdCwKICAgICAgLy8gZS5nLiAtMjUyMDAgc2VjIGZvciBBbWVyaWNhL0xvc19BbmdlbGVzIHRpbWV6b25lIGR1cmluZyBEU1QuCiAgICAgIG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2ggLT0gem9uZU9mZnNldCAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZDsKICAgICAgLy8gVGhlIHJlc3VsdGluZyBtaWNyb3NlY29uZHNTaW5jZUVwb2NoIHZhbHVlIGlzIHRoZXJlZm9yZSB0aGUgY2FsY3VsYXRlZAogICAgICAvLyBVVEMgdmFsdWUgZGVjcmVhc2VkIGJ5IGEgKHBvc2l0aXZlIGlmIGVhc3Qgb2YgR01UKSB0aW1lem9uZSBhZGp1c3RtZW50CiAgICAgIC8vIGFuZCBkZWNyZWFzZWQgYnkgdHlwaWNhbGx5IG9uZSBob3VyIGlmIERTVCBpcyBpbiBlZmZlY3QuCiAgICB9CiAgICBpZiAobWljcm9zZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA+CiAgICAgICAgX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBtaWNyb3NlY29uZHNTaW5jZUVwb2NoOwogIH0KCiAgc3RhdGljIGludCBfd2Vla0RheSh5KSB7CiAgICAvLyAxLzEvMTk3MCB3YXMgYSBUaHVyc2RheS4KICAgIHJldHVybiAoX2RheUZyb21ZZWFyKHkpICsgNCkgJSA3OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIHllYXIgaW4gdGhlIHJhbmdlIDIwMDgtMjAzNSBtYXRjaGluZwogICAqICogbGVhcCB5ZWFyLCBhbmQKICAgKiAqIHdlZWsgZGF5IG9mIGZpcnN0IGRheS4KICAgKgogICAqIExlYXAgc2Vjb25kcyBhcmUgaWdub3JlZC4KICAgKiBBZGFwdGVkIGZyb20gVjgncyBkYXRlIGltcGxlbWVudGF0aW9uLiBTZWUgRUNNQSAyNjIgLSAxNS45LjEuOS4KICAgKi8KICBzdGF0aWMgaW50IF9lcXVpdmFsZW50WWVhcihpbnQgeWVhcikgewogICAgLy8gUmV0dXJucyB5ZWFyIHkgc28gdGhhdCBfd2Vla0RheSh5KSA9PSBfd2Vla0RheSh5ZWFyKS4KICAgIC8vIF93ZWVrRGF5IHJldHVybnMgdGhlIHdlZWsgZGF5IChpbiByYW5nZSAwIC0gNikuCiAgICAvLyAxLzEvMTk1NiB3YXMgYSBTdW5kYXkgKGkuZS4gd2Vla2RheSAwKS4gMTk1NiB3YXMgYSBsZWFwLXllYXIuCiAgICAvLyAxLzEvMTk2NyB3YXMgYSBTdW5kYXkgKGkuZS4gd2Vla2RheSAwKS4KICAgIC8vIFdpdGhvdXQgbGVhcCB5ZWFycyBhIHN1YnNlcXVlbnQgeWVhciBoYXMgYSB3ZWVrIGRheSArIDEgKGZvciBleGFtcGxlCiAgICAvLyAxLzEvMTk2OCB3YXMgYSBNb25kYXkpLiBXaXRoIGxlYXAteWVhcnMgaXQganVtcHMgb3ZlciBvbmUgd2VlayBkYXkKICAgIC8vIChlLmcuIDEvMS8xOTU3IHdhcyBhIFR1ZXNkYXkpLgogICAgLy8gQWZ0ZXIgMTIgeWVhcnMgdGhlIHdlZWtkYXlzIGhhdmUgYWR2YW5jZWQgYnkgMTIgZGF5cyArIDMgbGVhcCBkYXlzID0KICAgIC8vIDE1IGRheXMuIDE1ICUgNyA9IDEuIFNvIGFmdGVyIDEyIHllYXJzIHRoZSB3ZWVrIGRheSBoYXMgYWx3YXlzCiAgICAvLyAobm93IGluZGVwZW5kZW50bHkgb2YgbGVhcC15ZWFycykgYWR2YW5jZWQgYnkgb25lLgogICAgLy8gd2Vla0RheSAqIDEyIGdpdmVzIHRodXMgYSB5ZWFyIHN0YXJ0aW5nIHdpdGggdGhlIHdhbnRlZCB3ZWVrRGF5LgogICAgaW50IHJlY2VudFllYXIgPSAoX2lzTGVhcFllYXIoeWVhcikgPyAxOTU2IDogMTk2NykgKyAoX3dlZWtEYXkoeWVhcikgKiAxMik7CiAgICAvLyBDbG9zZSB0byB0aGUgeWVhciAyMDA4IHRoZSBjYWxlbmRhciBjeWNsZXMgZXZlcnkgNCAqIDcgeWVhcnMgKDQgZm9yIHRoZQogICAgLy8gbGVhcCB5ZWFycywgNyBmb3IgdGhlIHdlZWtkYXlzKS4KICAgIC8vIEZpbmQgdGhlIHllYXIgaW4gdGhlIHJhbmdlIDIwMDguLjIwMzcgdGhhdCBpcyBlcXVpdmFsZW50IG1vZCAyOC4KICAgIHJldHVybiAyMDA4ICsgKHJlY2VudFllYXIgLSAyMDA4KSAlIDI4OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgVVRDIHllYXIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIFtzZWNvbmRzU2luY2VFcG9jaF0uCiAgICogSXQgaXMgcmVsYXRpdmVseSBmYXN0IGZvciB2YWx1ZXMgaW4gdGhlIHJhbmdlIDAgdG8geWVhciAyMDk4LgogICAqCiAgICogQ29kZSBpcyBhZGFwdGVkIGZyb20gVjguCiAgICovCiAgc3RhdGljIGludCBfeWVhcnNGcm9tU2Vjb25kc1NpbmNlRXBvY2goaW50IHNlY29uZHNTaW5jZUVwb2NoKSB7CiAgICBjb25zdCBpbnQgREFZU19JTl80X1lFQVJTID0gNCAqIDM2NSArIDE7CiAgICBjb25zdCBpbnQgREFZU19JTl8xMDBfWUVBUlMgPSAyNSAqIERBWVNfSU5fNF9ZRUFSUyAtIDE7CiAgICBjb25zdCBpbnQgREFZU19ZRUFSXzIwOTggPSBEQVlTX0lOXzEwMF9ZRUFSUyArIDYgKiBEQVlTX0lOXzRfWUVBUlM7CgogICAgaW50IGRheXMgPSBzZWNvbmRzU2luY2VFcG9jaCB+LyBEdXJhdGlvbi5zZWNvbmRzUGVyRGF5OwogICAgaWYgKGRheXMgPiAwICYmIGRheXMgPCBEQVlTX1lFQVJfMjA5OCkgewogICAgICAvLyBBY2NvcmRpbmcgdG8gVjggdGhpcyBmYXN0IGNhc2Ugd29ya3MgZm9yIGRhdGVzIGZyb20gMTk3MCB0byAyMDk5LgogICAgICByZXR1cm4gMTk3MCArICg0ICogZGF5cyArIDIpIH4vIERBWVNfSU5fNF9ZRUFSUzsKICAgIH0KICAgIGludCBtaWNyb3MgPSBzZWNvbmRzU2luY2VFcG9jaCAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZDsKICAgIHJldHVybiBfY29tcHV0ZVVwcGVyUGFydChtaWNyb3MpW19ZRUFSX0lOREVYXTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBkYXRlIGluIHNlY29uZHMgdGhhdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBnaXZlbgogICAqIGRhdGUgaW4gbWljcm9zZWNvbmRzIFttaWNyb3NlY29uZHNTaW5jZUVwb2NoXS4gQW4gZXF1aXZhbGVudAogICAqIGRhdGUgaGFzIHRoZSBzYW1lIGZpZWxkcyAoYG1vbnRoYCwgYGRheWAsIGV0Yy4pIGFzIHRoZSBnaXZlbgogICAqIGRhdGUsIGJ1dCB0aGUgYHllYXJgIGlzIGluIHRoZSByYW5nZSBbMTkwMS4uMjAzOF0uCiAgICoKICAgKiAqIFRoZSB0aW1lIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHllYXIgaXMgdGhlIHNhbWUuCiAgICogKiBJZiB0aGUgZ2l2ZW4gZGF0ZSBpcyBpbiBhIGxlYXAgeWVhciB0aGVuIHRoZSByZXR1cm5lZAogICAqICAgc2Vjb25kcyBhcmUgaW4gYSBsZWFwIHllYXIsIHRvby4KICAgKiAqIFRoZSB3ZWVrIGRheSBvZiBnaXZlbiBkYXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgZm9yIHRoZQogICAqICAgcmV0dXJuZWQgZGF0ZS4KICAgKi8KICBzdGF0aWMgaW50IF9lcXVpdmFsZW50U2Vjb25kcyhpbnQgbWljcm9zZWNvbmRzU2luY2VFcG9jaCkgewogICAgY29uc3QgaW50IENVVF9PRkZfU0VDT05EUyA9IDB4N0ZGRkZGRkY7CgogICAgaW50IHNlY29uZHNTaW5jZUVwb2NoID0gX2Zsb29yZWREaXZpc2lvbigKICAgICAgICBtaWNyb3NlY29uZHNTaW5jZUVwb2NoLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQpOwoKICAgIGlmIChzZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA+IENVVF9PRkZfU0VDT05EUykgewogICAgICBpbnQgeWVhciA9IF95ZWFyc0Zyb21TZWNvbmRzU2luY2VFcG9jaChzZWNvbmRzU2luY2VFcG9jaCk7CiAgICAgIGludCBkYXlzID0gX2RheUZyb21ZZWFyKHllYXIpOwogICAgICBpbnQgZXF1aXZhbGVudFllYXIgPSBfZXF1aXZhbGVudFllYXIoeWVhcik7CiAgICAgIGludCBlcXVpdmFsZW50RGF5cyA9IF9kYXlGcm9tWWVhcihlcXVpdmFsZW50WWVhcik7CiAgICAgIGludCBkaWZmRGF5cyA9IGVxdWl2YWxlbnREYXlzIC0gZGF5czsKICAgICAgc2Vjb25kc1NpbmNlRXBvY2ggKz0gZGlmZkRheXMgKiBEdXJhdGlvbi5zZWNvbmRzUGVyRGF5OwogICAgfQogICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoOwogIH0KCiAgc3RhdGljIGludCBfdGltZVpvbmVPZmZzZXRJblNlY29uZHMoaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpIHsKICAgIGludCBlcXVpdmFsZW50U2Vjb25kcyA9IF9lcXVpdmFsZW50U2Vjb25kcyhtaWNyb3NlY29uZHNTaW5jZUVwb2NoKTsKICAgIHJldHVybiBfdGltZVpvbmVPZmZzZXRJblNlY29uZHNGb3JDbGFtcGVkU2Vjb25kcyhlcXVpdmFsZW50U2Vjb25kcyk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF90aW1lWm9uZU5hbWUoaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpIHsKICAgIGludCBlcXVpdmFsZW50U2Vjb25kcyA9IF9lcXVpdmFsZW50U2Vjb25kcyhtaWNyb3NlY29uZHNTaW5jZUVwb2NoKTsKICAgIHJldHVybiBfdGltZVpvbmVOYW1lRm9yQ2xhbXBlZFNlY29uZHMoZXF1aXZhbGVudFNlY29uZHMpOwogIH0KfQqBwABOTjwBHgEiBxEORUYBRiYBTjEBMToBJyciIiAfIyEgARABCUIbGUobAQlCGz8BCUlAHE03MzIEAQkSFyYBCRwdMgQBCSAmTDMEAQklGzAcAQlKAQlJAQkrLgEJIzYBTzY7Q0IFATMtPD0wHE4lARgZFwEaHkQeGUMuDCkuHQwnLBsMGyAXATYYAUIbMBkVBjwBTxxNLBdIJwEXRy0BFUUoASpHIFEkGQErMjIoKCQiKiYkEQQBDzoUBAEJJEUXBAEJKUUXBAEJKD4EAQkkNQEJLAEJNQEJNQEJKwEJKwEJJwEJJQEJLQEJKQEJJwEGThAFMk1PS00LBU9GNwYiGR4RSxwEAS4rBAFEISYhKy0sBAEfST4EATsJTE4/DSUXGxocIikZBgFNPBhBIEYuMjI8FQFOTzhPKydLEwYBEk1KJAkgYAFPHhdQTk1HAUlJPzIXSQFNR0xGTVBQQgYnTBMGIwQBGyAmBAEGNBYeBR9FBik9N0UvTEomTEY6SFBPKEgsBAEGRUMFHgZCLTxIATwtSzcGRTMEAQY/QkI4BT09KEEWBj4sAS5BATVBJTI5LD4GHgQBREhJBAE8SD4EAgEfZGFydDpjb3JlLXBhdGNoL2RhdGVfcGF0Y2guZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9kb3VibGUuZGFydJwRLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLy8gVE9ETzogQ29udmVydCB0aGlzIGFic3RyYWN0IGNsYXNzIGludG8gYSBjb25jcmV0ZSBjbGFzcyBkb3VibGUKLy8gdGhhdCB1c2VzIHRoZSBwYXRjaCBjbGFzcyBmdW5jdGlvbmFsaXR5IHRvIGFjY291bnQgZm9yIHRoZQovLyBkaWZmZXJlbnQgcGxhdGZvcm0gaW1wbGVtZW50YXRpb25zLgoKLyoqCiAqIEEgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXIuCiAqCiAqIFJlcHJlc2VudGF0aW9uIG9mIERhcnQgZG91YmxlcyBjb250YWluaW5nIGRvdWJsZSBzcGVjaWZpYyBjb25zdGFudHMKICogYW5kIG9wZXJhdGlvbnMgYW5kIHNwZWNpYWxpemF0aW9ucyBvZiBvcGVyYXRpb25zIGluaGVyaXRlZCBmcm9tCiAqIFtudW1dLiBEYXJ0IGRvdWJsZXMgYXJlIDY0LWJpdCBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUKICogSUVFRSA3NTQgc3RhbmRhcmQuCiAqCiAqIFRoZSBbZG91YmxlXSB0eXBlIGlzIGNvbnRhZ2lvdXMuIE9wZXJhdGlvbnMgb24gW2RvdWJsZV1zIHJldHVybgogKiBbZG91YmxlXSByZXN1bHRzLgogKgogKiBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYSBjbGFzcyB0byBhdHRlbXB0IHRvIGV4dGVuZCBvciBpbXBsZW1lbnQKICogZG91YmxlLgogKi8KYWJzdHJhY3QgY2xhc3MgZG91YmxlIGV4dGVuZHMgbnVtIHsKICBzdGF0aWMgY29uc3QgZG91YmxlIG5hbiA9IDAuMCAvIDAuMDsKICBzdGF0aWMgY29uc3QgZG91YmxlIGluZmluaXR5ID0gMS4wIC8gMC4wOwogIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVJbmZpbml0eSA9IC1pbmZpbml0eTsKICBzdGF0aWMgY29uc3QgZG91YmxlIG1pblBvc2l0aXZlID0gNWUtMzI0OwogIHN0YXRpYyBjb25zdCBkb3VibGUgbWF4RmluaXRlID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7CgogIGRvdWJsZSByZW1haW5kZXIobnVtIG90aGVyKTsKCiAgLyoqIEFkZGl0aW9uIG9wZXJhdG9yLiAqLwogIGRvdWJsZSBvcGVyYXRvciArKG51bSBvdGhlcik7CgogIC8qKiBTdWJ0cmFjdGlvbiBvcGVyYXRvci4gKi8KICBkb3VibGUgb3BlcmF0b3IgLShudW0gb3RoZXIpOwoKICAvKiogTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuICovCiAgZG91YmxlIG9wZXJhdG9yICoobnVtIG90aGVyKTsKCiAgZG91YmxlIG9wZXJhdG9yICUobnVtIG90aGVyKTsKCiAgLyoqIERpdmlzaW9uIG9wZXJhdG9yLiAqLwogIGRvdWJsZSBvcGVyYXRvciAvKG51bSBvdGhlcik7CgogIC8qKgogICAqIFRydW5jYXRpbmcgZGl2aXNpb24gb3BlcmF0b3IuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uIGBhIH4vIGJgIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBgKGEgLyBiKS50cnVuY2F0ZSgpYC4KICAgKi8KICBpbnQgb3BlcmF0b3Igfi8obnVtIG90aGVyKTsKCiAgLyoqIE5lZ2F0ZSBvcGVyYXRvci4gKi8KICBkb3VibGUgb3BlcmF0b3IgLSgpOwoKICAvKiogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBbZG91YmxlXS4gKi8KICBkb3VibGUgYWJzKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNpZ24gb2YgdGhlIGRvdWJsZSdzIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFJldHVybnMgLTEuMCBpZiB0aGUgdmFsdWUgaXMgbGVzcyB0aGFuIHplcm8sCiAgICogKzEuMCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHplcm8sCiAgICogYW5kIHRoZSB2YWx1ZSBpdHNlbGYgaWYgaXQgaXMgLTAuMCwgMC4wIG9yIE5hTi4KICAgKi8KICBkb3VibGUgZ2V0IHNpZ247CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgY2xvc2VzdCB0byBgdGhpc2AuCiAgICoKICAgKiBSb3VuZHMgYXdheSBmcm9tIHplcm8gd2hlbiB0aGVyZSBpcyBubyBjbG9zZXN0IGludGVnZXI6CiAgICogIGAoMy41KS5yb3VuZCgpID09IDRgIGFuZCBgKC0zLjUpLnJvdW5kKCkgPT0gLTRgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgcm91bmQoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgZmxvb3IoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3QgaW50ZWdlciBubyBzbWFsbGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgY2VpbCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIG9idGFpbmVkIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwKICAgKiBkaWdpdHMgZnJvbSBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCB0cnVuY2F0ZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIGRvdWJsZSB2YWx1ZSBjbG9zZXN0IHRvIGB0aGlzYC4KICAgKgogICAqIFJvdW5kcyBhd2F5IGZyb20gemVybyB3aGVuIHRoZXJlIGlzIG5vIGNsb3Nlc3QgaW50ZWdlcjoKICAgKiAgYCgzLjUpLnJvdW5kVG9Eb3VibGUoKSA9PSA0YCBhbmQgYCgtMy41KS5yb3VuZFRvRG91YmxlKCkgPT0gLTRgLgogICAqCiAgICogSWYgdGhpcyBpcyBhbHJlYWR5IGFuIGludGVnZXIgdmFsdWVkIGRvdWJsZSwgaW5jbHVkaW5nIGAtMC4wYCwgb3IgaXQgaXMgbm90CiAgICogYSBmaW5pdGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYCwKICAgKiBhbmQgYC0wLjBgIGlzIHRoZXJlZm9yZSBjb25zaWRlcmVkIGNsb3NlciB0byBuZWdhdGl2ZSBudW1iZXJzIHRoYW4gYDAuMGAuCiAgICogVGhpcyBtZWFucyB0aGF0IGZvciBhIHZhbHVlLCBgZGAgaW4gdGhlIHJhbmdlIGAtMC41IDwgZCA8IDAuMGAsCiAgICogdGhlIHJlc3VsdCBpcyBgLTAuMGAuCiAgICovCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgaW50ZWdlciBkb3VibGUgdmFsdWUgbm8gZ3JlYXRlciB0aGFuIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIG5vdAogICAqIGEgZmluaXRlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgMC4wIDwgZCA8IDEuMGAgd2lsbCByZXR1cm4gYDAuMGAuCiAgICovCiAgZG91YmxlIGZsb29yVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3QgaW50ZWdlciBkb3VibGUgdmFsdWUgbm8gc21hbGxlciB0aGFuIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIG5vdAogICAqIGEgZmluaXRlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgLTEuMCA8IGQgPCAwLjBgIHdpbGwgcmV0dXJuIGAtMC4wYC4KICAgKi8KICBkb3VibGUgY2VpbFRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgZG91YmxlIHZhbHVlIG9idGFpbmVkIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwKICAgKiBkaWdpdHMgZnJvbSBgdGhpc2AuCiAgICoKICAgKiBJZiB0aGlzIGlzIGFscmVhZHkgYW4gaW50ZWdlciB2YWx1ZWQgZG91YmxlLCBpbmNsdWRpbmcgYC0wLjBgLCBvciBpdCBpcyBub3QKICAgKiBhIGZpbml0ZSB2YWx1ZSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIHVubW9kaWZpZWQuCiAgICoKICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygcm91bmRpbmcsIGAtMC4wYCBpcyBjb25zaWRlcmVkIHRvIGJlIGJlbG93IGAwLjBgLgogICAqIEEgbnVtYmVyIGBkYCBpbiB0aGUgcmFuZ2UgYC0xLjAgPCBkIDwgMC4wYCB3aWxsIHJldHVybiBgLTAuMGAsIGFuZAogICAqIGluIHRoZSByYW5nZSBgMC4wIDwgZCA8IDEuMGAgaXQgd2lsbCByZXR1cm4gMC4wLgogICAqLwogIGRvdWJsZSB0cnVuY2F0ZVRvRG91YmxlKCk7CgogIC8qKgogICAqIFByb3ZpZGUgYSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFtkb3VibGVdIHZhbHVlLgogICAqCiAgICogVGhlIHJlcHJlc2VudGF0aW9uIGlzIGEgbnVtYmVyIGxpdGVyYWwgc3VjaCB0aGF0IHRoZSBjbG9zZXN0IGRvdWJsZSB2YWx1ZQogICAqIHRvIHRoZSByZXByZXNlbnRhdGlvbidzIG1hdGhlbWF0aWNhbCB2YWx1ZSBpcyB0aGlzIFtkb3VibGVdLgogICAqCiAgICogUmV0dXJucyAiTmFOIiBmb3IgdGhlIE5vdC1hLU51bWJlciB2YWx1ZS4KICAgKiBSZXR1cm5zICJJbmZpbml0eSIgYW5kICItSW5maW5pdHkiIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgSW5maW5pdHkuCiAgICogUmV0dXJucyAiLTAuMCIgZm9yIG5lZ2F0aXZlIHplcm8uCiAgICoKICAgKiBGb3IgYWxsIGRvdWJsZXMsIGBkYCwgY29udmVydGluZyB0byBhIHN0cmluZyBhbmQgcGFyc2luZyB0aGUgc3RyaW5nIGJhY2sKICAgKiBnaXZlcyB0aGUgc2FtZSB2YWx1ZSBhZ2FpbjogYGQgPT0gZG91YmxlLnBhcnNlKGQudG9TdHJpbmcoKSlgIChleGNlcHQgd2hlbgogICAqIGBkYCBpcyBOYU4pLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwoKICAvKioKICAgKiBQYXJzZSBbc291cmNlXSBhcyBhbiBkb3VibGUgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KICAgKgogICAqIEFjY2VwdHMgYW4gb3B0aW9uYWwgc2lnbiAoYCtgIG9yIGAtYCkgZm9sbG93ZWQgYnkgZWl0aGVyIHRoZSBjaGFyYWN0ZXJzCiAgICogIkluZmluaXR5IiwgdGhlIGNoYXJhY3RlcnMgIk5hTiIgb3IgYSBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbi4KICAgKiBBIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIGlzIGNvbXBvc2VkIG9mIGEgbWFudGlzc2EgYW5kIGFuIG9wdGlvbmFsCiAgICogZXhwb25lbnQgcGFydC4gVGhlIG1hbnRpc3NhIGlzIGVpdGhlciBhIGRlY2ltYWwgcG9pbnQgKGAuYCkgZm9sbG93ZWQgYnkgYQogICAqIHNlcXVlbmNlIG9mIChkZWNpbWFsKSBkaWdpdHMsIG9yIGEgc2VxdWVuY2Ugb2YgZGlnaXRzCiAgICogb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIGRlY2ltYWwgcG9pbnQgYW5kIG9wdGlvbmFsbHkgbW9yZSBkaWdpdHMuIFRoZQogICAqIChvcHRpb25hbCkgZXhwb25lbnQgcGFydCBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVyICJlIiBvciAiRSIsIGFuIG9wdGlvbmFsCiAgICogc2lnbiwgYW5kIG9uZSBvciBtb3JlIGRpZ2l0cy4KICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBub3QgYmUgYG51bGxgLgogICAqCiAgICogTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkLgogICAqCiAgICogSWYgdGhlIFtzb3VyY2VdIHN0cmluZyBpcyBub3QgYSB2YWxpZCBkb3VibGUgbGl0ZXJhbCwgdGhlIFtvbkVycm9yXQogICAqIGlzIGNhbGxlZCB3aXRoIHRoZSBbc291cmNlXSBhcyBhcmd1bWVudCwgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMKICAgKiB1c2VkIGluc3RlYWQuIElmIG5vIGBvbkVycm9yYCBpcyBwcm92aWRlZCwgYSBbRm9ybWF0RXhjZXB0aW9uXQogICAqIGlzIHRocm93biBpbnN0ZWFkLgogICAqCiAgICogVGhlIFtvbkVycm9yXSBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgaWYgW3NvdXJjZV0gaXMgYSBbU3RyaW5nXSB3aXRoIGFuCiAgICogaW52YWxpZCBmb3JtYXQuIEl0IGlzIG5vdCBpbnZva2VkIGlmIFtzb3VyY2VdIGlzIGBudWxsYC4KICAgKgogICAqIEV4YW1wbGVzIG9mIGFjY2VwdGVkIHN0cmluZ3M6CiAgICoKICAgKiAgICAgIjMuMTQiCiAgICogICAgICIgIDMuMTQgXHhBMCIKICAgKiAgICAgIjAuIgogICAqICAgICAiLjAiCiAgICogICAgICItMS5lMyIKICAgKiAgICAgIjEyMzRFKzciCiAgICogICAgICIrLjEyZS05IgogICAqICAgICAiLU5hTiIKICAgKgogICAqIFRoZSBbb25FcnJvcl0gcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KICAgKiBJbnN0ZWFkIG9mIGBkb3VibGUucGFyc2Uoc3RyaW5nLCAoc3RyaW5nKSB7IC4uLiB9KWAsCiAgICogeW91IHNob3VsZCB1c2UgYGRvdWJsZS50cnlQYXJzZShzdHJpbmcpID8/ICguLi4pYC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgZG91YmxlIHBhcnNlKFN0cmluZyBzb3VyY2UsCiAgICAgIFtAZGVwcmVjYXRlZCBkb3VibGUgb25FcnJvcihTdHJpbmcgc291cmNlKV0pOwoKICAvKioKICAgKiBQYXJzZSBbc291cmNlXSBhcyBhbiBkb3VibGUgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KICAgKgogICAqIExpa2UgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgIGZvciBpbnZhbGlkIGlucHV0cwogICAqIGluc3RlYWQgb2YgdGhyb3dpbmcsIGFuZCB0aGUgW3NvdXJjZV0gbXVzdCBzdGlsbCBub3QgYmUgYG51bGxgLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBkb3VibGUgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSk7Cn0KgNwATk48ARMBQj4nAQQtA0dDTRYDQxUDTAsEJCcsNCw7AR8BHCABHyABIiABIAEcIAEGIwVFGwYeARoXATYQAQY3BTItNQYTAQYsBT03BVAGDwEGOgVQBg8BBjcFUAYOAQY/GQVQBhIBBjkFPUcFUTcFSk9FGwYaAQZHBVE3BUpCBhoBBkQFUTcFSkQGGQEGTBkFUTcFSkg2Bh0BBjYFT0IFL0wnBU5QEgYVAQY/BU1KT087TFAjJgUxBUlGRBgFTj4FIwUQFw4OERMTEAVAOjgGLjQBBj8FTkUGMgIBFWRhcnQ6Y29yZS9kb3VibGUuZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2RvdWJsZV9wYXRjaC5kYXJ0jq0vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vIFZNIGltcGxlbWVudGF0aW9uIG9mIGRvdWJsZS4KCkBwYXRjaApjbGFzcyBkb3VibGUgewogIHN0YXRpYyBkb3VibGUgX25hdGl2ZVBhcnNlKFN0cmluZyBzdHIsIGludCBzdGFydCwgaW50IGVuZCkKICAgICAgbmF0aXZlICJEb3VibGVfcGFyc2UiOwoKICBzdGF0aWMgZG91YmxlIF90cnlQYXJzZURvdWJsZSh2YXIgc3RyLCB2YXIgc3RhcnQsIHZhciBlbmQpIHsKICAgIGFzc2VydChzdGFydCA8IGVuZCk7CiAgICBjb25zdCBpbnQgX0RPVCA9IDB4MmU7IC8vICcuJwogICAgY29uc3QgaW50IF9aRVJPID0gMHgzMDsgLy8gJzAnCiAgICBjb25zdCBpbnQgX01JTlVTID0gMHgyZDsgLy8gJy0nCiAgICBjb25zdCBpbnQgX04gPSAweDRlOyAvLyAnTicKICAgIGNvbnN0IGludCBfYSA9IDB4NjE7IC8vICdhJwogICAgY29uc3QgaW50IF9JID0gMHg0OTsgLy8gJ0knCiAgICBjb25zdCBpbnQgX2UgPSAweDY1OyAvLyAnZScKICAgIGludCBleHBvbmVudCA9IDA7CiAgICAvLyBTZXQgdG8gbm9uLXplcm8gaWYgYSBkaWdpdCBpcyBzZWVuLiBBdm9pZHMgYWNjZXB0aW5nICIuIi4KICAgIGJvb2wgZGlnaXRzU2VlbiA9IGZhbHNlOwogICAgLy8gQWRkZWQgdG8gZXhwb25lbnQgZm9yIGVhY2ggZGlnaXQuIFNldCB0byAtMSB3aGVuIHNlZWluZyAnLicuCiAgICBpbnQgZXhwb25lbnREZWx0YSA9IDA7CiAgICBkb3VibGUgZG91YmxlVmFsdWUgPSAwLjA7CiAgICBkb3VibGUgc2lnbiA9IDEuMDsKICAgIGludCBmaXJzdENoYXIgPSBzdHIuY29kZVVuaXRBdChzdGFydCk7CiAgICBpZiAoZmlyc3RDaGFyID09IF9NSU5VUykgewogICAgICBzaWduID0gLTEuMDsKICAgICAgc3RhcnQrKzsKICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuIG51bGw7CiAgICAgIGZpcnN0Q2hhciA9IHN0ci5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgIH0KICAgIGlmIChmaXJzdENoYXIgPT0gX0kpIHsKICAgICAgaWYgKGVuZCA9PSBzdGFydCArIDggJiYgc3RyLnN0YXJ0c1dpdGgoIm5maW5pdHkiLCBzdGFydCArIDEpKSB7CiAgICAgICAgcmV0dXJuIHNpZ24gKiBkb3VibGUuaW5maW5pdHk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoZmlyc3RDaGFyID09IF9OKSB7CiAgICAgIGlmIChlbmQgPT0gc3RhcnQgKyAzICYmCiAgICAgICAgICBzdHIuY29kZVVuaXRBdChzdGFydCArIDEpID09IF9hICYmCiAgICAgICAgICBzdHIuY29kZVVuaXRBdChzdGFydCArIDIpID09IF9OKSB7CiAgICAgICAgcmV0dXJuIGRvdWJsZS5uYW47CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaW50IGZpcnN0RGlnaXQgPSBmaXJzdENoYXIgXiBfWkVSTzsKICAgIGlmIChmaXJzdERpZ2l0IDw9IDkpIHsKICAgICAgc3RhcnQrKzsKICAgICAgZG91YmxlVmFsdWUgPSBmaXJzdERpZ2l0LnRvRG91YmxlKCk7CiAgICAgIGRpZ2l0c1NlZW4gPSB0cnVlOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaW50IGMgPSBzdHIuY29kZVVuaXRBdChpKTsKICAgICAgaW50IGRpZ2l0ID0gYyBeIF9aRVJPOyAvLyAnMCctJzknIGNoYXJhY3RlcnMgYXJlIG5vdyAwLTkgaW50ZWdlcnMuCiAgICAgIGlmIChkaWdpdCA8PSA5KSB7CiAgICAgICAgZG91YmxlVmFsdWUgPSAxMC4wICogZG91YmxlVmFsdWUgKyBkaWdpdDsKICAgICAgICAvLyBEb3VibGVzIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUgKDIqKjUzKSBtaWdodCBoYXZlIGxvc3QgcHJlY2lzc2lvbi4KICAgICAgICBjb25zdCBkb3VibGUgTUFYX0VYQUNUX0RPVUJMRSA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKICAgICAgICBpZiAoZG91YmxlVmFsdWUgPj0gTUFYX0VYQUNUX0RPVUJMRSkgcmV0dXJuIG51bGw7CiAgICAgICAgZXhwb25lbnQgKz0gZXhwb25lbnREZWx0YTsKICAgICAgICBkaWdpdHNTZWVuID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChjID09IF9ET1QgJiYgZXhwb25lbnREZWx0YSA9PSAwKSB7CiAgICAgICAgZXhwb25lbnREZWx0YSA9IC0xOwogICAgICB9IGVsc2UgaWYgKChjIHwgMHgyMCkgPT0gX2UpIHsKICAgICAgICBpKys7CiAgICAgICAgaWYgKGkgPT0gZW5kKSByZXR1cm4gbnVsbDsKICAgICAgICAvLyBpbnQuX3RyeVBhcnNlU21pIHRyZWF0cyBpdHMgZW5kIGFyZ3VtZW50IGFzIGluY2x1c2l2ZS4KICAgICAgICBpbnQgZXhwUGFydCA9IGludC5fdHJ5UGFyc2VTbWkoc3RyLCBpLCBlbmQgLSAxKTsKICAgICAgICBpZiAoZXhwUGFydCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICBleHBvbmVudCArPSBleHBQYXJ0OwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAoIWRpZ2l0c1NlZW4pIHJldHVybiBudWxsOyAvLyBObyBkaWdpdHMuCiAgICBpZiAoZXhwb25lbnQgPT0gMCkgcmV0dXJuIHNpZ24gKiBkb3VibGVWYWx1ZTsKICAgIGNvbnN0IFAxMCA9IFBPV0VSU19PRl9URU47IC8vIEZyb20gc2hhcmVkIGxpYnJhcnkKICAgIGlmIChleHBvbmVudCA8IDApIHsKICAgICAgaW50IG5lZ0V4cG9uZW50ID0gLWV4cG9uZW50OwogICAgICBpZiAobmVnRXhwb25lbnQgPj0gUDEwLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBzaWduICogKGRvdWJsZVZhbHVlIC8gUDEwW25lZ0V4cG9uZW50XSk7CiAgICB9CiAgICBpZiAoZXhwb25lbnQgPj0gUDEwLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gc2lnbiAqIChkb3VibGVWYWx1ZSAqIFAxMFtleHBvbmVudF0pOwogIH0KCiAgc3RhdGljIGRvdWJsZSBfcGFyc2UodmFyIHN0cikgewogICAgaW50IGxlbiA9IHN0ci5sZW5ndGg7CiAgICBpbnQgc3RhcnQgPSBzdHIuX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpOwogICAgaWYgKHN0YXJ0ID09IGxlbikgcmV0dXJuIG51bGw7IC8vIEFsbCB3aGl0ZXNwYWNlLgogICAgaW50IGVuZCA9IHN0ci5fbGFzdE5vbldoaXRlc3BhY2UoKSArIDE7CiAgICBhc3NlcnQoc3RhcnQgPCBlbmQpOwogICAgdmFyIHJlc3VsdCA9IF90cnlQYXJzZURvdWJsZShzdHIsIHN0YXJ0LCBlbmQpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgcmV0dXJuIF9uYXRpdmVQYXJzZShzdHIsIHN0YXJ0LCBlbmQpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGRvdWJsZSBwYXJzZShTdHJpbmcgc291cmNlLAogICAgICBbQGRlcHJlY2F0ZWQgZG91YmxlIG9uRXJyb3IoU3RyaW5nIHNvdXJjZSldKSB7CiAgICB2YXIgcmVzdWx0ID0gX3BhcnNlKHNvdXJjZSk7CiAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBkb3VibGUiLCBzb3VyY2UpOwogICAgICByZXR1cm4gb25FcnJvcihzb3VyY2UpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBkb3VibGUgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSkgPT4gX3BhcnNlKHNvdXJjZSk7Cn0KeABOTjwBHgEgAQcPPR0BPxkiIyQgICAgFkEdRBseFysfEw8lKQYbRicIEwYbHi0tGwgTBgEoGw8rGQYoIUkYMk48OiMbNBwlDSNCOSodDw8VCAYwMjYYIzI2Bi0xBAEiGis2LBkzJyoEAQklNSEaUB4GEwQBCTsCASFkYXJ0OmNvcmUtcGF0Y2gvZG91YmxlX3BhdGNoLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvZHVyYXRpb24uZGFydKagLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgc3BhbiBvZiB0aW1lLCBzdWNoIGFzIDI3IGRheXMsIDQgaG91cnMsIDEyIG1pbnV0ZXMsIGFuZCAzIHNlY29uZHMuCiAqCiAqIEEgYER1cmF0aW9uYCByZXByZXNlbnRzIGEgZGlmZmVyZW5jZSBmcm9tIG9uZSBwb2ludCBpbiB0aW1lIHRvIGFub3RoZXIuIFRoZQogKiBkdXJhdGlvbiBtYXkgYmUgIm5lZ2F0aXZlIiBpZiB0aGUgZGlmZmVyZW5jZSBpcyBmcm9tIGEgbGF0ZXIgdGltZSB0byBhbgogKiBlYXJsaWVyLgogKgogKiBEdXJhdGlvbnMgYXJlIGNvbnRleHQgaW5kZXBlbmRlbnQuIEZvciBleGFtcGxlLCBhIGR1cmF0aW9uIG9mIDIgZGF5cyBpcwogKiBhbHdheXMgNDggaG91cnMsIGV2ZW4gd2hlbiBpdCBpcyBhZGRlZCB0byBhIGBEYXRlVGltZWAganVzdCB3aGVuIHRoZQogKiB0aW1lIHpvbmUgaXMgYWJvdXQgdG8gZG8gYSBkYXlsaWdodC1zYXZpbmdzIHN3aXRjaC4gKFNlZSBbRGF0ZVRpbWUuYWRkXSkuCiAqCiAqIERlc3BpdGUgdGhlIHNhbWUgbmFtZSwgYSBgRHVyYXRpb25gIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgIkR1cmF0aW9ucyIKICogYXMgc3BlY2lmaWVkIGJ5IElTTyA4NjAxLiBJbiBwYXJ0aWN1bGFyLCBhIGR1cmF0aW9uIG9iamVjdCBkb2VzIG5vdCBrZWVwCiAqIHRyYWNrIG9mIHRoZSBpbmRpdmlkdWFsbHkgcHJvdmlkZWQgbWVtYmVycyAoc3VjaCBhcyAiZGF5cyIgb3IgImhvdXJzIiksIGJ1dAogKiBvbmx5IHVzZXMgdGhlc2UgYXJndW1lbnRzIHRvIGNvbXB1dGUgdGhlIGxlbmd0aCBvZiB0aGUgY29ycmVzcG9uZGluZyB0aW1lCiAqIGludGVydmFsLgogKgogKiBUbyBjcmVhdGUgYSBuZXcgRHVyYXRpb24gb2JqZWN0LCB1c2UgdGhpcyBjbGFzcydzIHNpbmdsZSBjb25zdHJ1Y3RvcgogKiBnaXZpbmcgdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50czoKICogYGBgZGFydAogKiBEdXJhdGlvbiBmYXN0ZXN0TWFyYXRob24gPSBuZXcgRHVyYXRpb24oaG91cnM6MiwgbWludXRlczozLCBzZWNvbmRzOjIpOwogKiBgYGAKICogVGhlIFtEdXJhdGlvbl0gaXMgdGhlIHN1bSBvZiBhbGwgaW5kaXZpZHVhbCBwYXJ0cy4KICogVGhpcyBtZWFucyB0aGF0IGluZGl2aWR1YWwgcGFydHMgY2FuIGJlIGxhcmdlciB0aGFuIHRoZSBuZXh0LWJpZ2dlciB1bml0LgogKiBGb3IgZXhhbXBsZSwgW2luTWludXRlc10gY2FuIGJlIGdyZWF0ZXIgdGhhbiA1OS4KICogYGBgZGFydAogKiBhc3NlcnQoZmFzdGVzdE1hcmF0aG9uLmluTWludXRlcyA9PSAxMjMpOwogKiBgYGAKICogQWxsIGluZGl2aWR1YWwgcGFydHMgYXJlIGFsbG93ZWQgdG8gYmUgbmVnYXRpdmUuCiAqCiAqIFVzZSBvbmUgb2YgdGhlIHByb3BlcnRpZXMsIHN1Y2ggYXMgW2luRGF5c10sCiAqIHRvIHJldHJpZXZlIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBEdXJhdGlvbiBpbiB0aGUgc3BlY2lmaWVkIHRpbWUgdW5pdC4KICogTm90ZSB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyByb3VuZGVkIGRvd24uCiAqIEZvciBleGFtcGxlLAogKiBgYGBkYXJ0CiAqIER1cmF0aW9uIGFMb25nV2Vla2VuZCA9IG5ldyBEdXJhdGlvbihob3Vyczo4OCk7CiAqIGFzc2VydChhTG9uZ1dlZWtlbmQuaW5EYXlzID09IDMpOwogKiBgYGAKICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgYXJpdGhtZXRpYwogKiBhbmQgY29tcGFyaXNvbiBvcGVyYXRvcnMsCiAqIHBsdXMgYSBzZXQgb2YgY29uc3RhbnRzIHVzZWZ1bCBmb3IgY29udmVydGluZyB0aW1lIHVuaXRzLgogKgogKiBTZWUgW0RhdGVUaW1lXSB0byByZXByZXNlbnQgYSBwb2ludCBpbiB0aW1lLgogKiBTZWUgW1N0b3B3YXRjaF0gdG8gbWVhc3VyZSB0aW1lLXNwYW5zLgogKi8KY2xhc3MgRHVyYXRpb24gaW1wbGVtZW50cyBDb21wYXJhYmxlPER1cmF0aW9uPiB7CiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCA9IDEwMDA7CiAgc3RhdGljIGNvbnN0IGludCBtaWxsaXNlY29uZHNQZXJTZWNvbmQgPSAxMDAwOwogIHN0YXRpYyBjb25zdCBpbnQgc2Vjb25kc1Blck1pbnV0ZSA9IDYwOwogIHN0YXRpYyBjb25zdCBpbnQgbWludXRlc1BlckhvdXIgPSA2MDsKICBzdGF0aWMgY29uc3QgaW50IGhvdXJzUGVyRGF5ID0gMjQ7CgogIHN0YXRpYyBjb25zdCBpbnQgbWljcm9zZWNvbmRzUGVyU2Vjb25kID0KICAgICAgbWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQgKiBtaWxsaXNlY29uZHNQZXJTZWNvbmQ7CiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJNaW51dGUgPQogICAgICBtaWNyb3NlY29uZHNQZXJTZWNvbmQgKiBzZWNvbmRzUGVyTWludXRlOwogIHN0YXRpYyBjb25zdCBpbnQgbWljcm9zZWNvbmRzUGVySG91ciA9IG1pY3Jvc2Vjb25kc1Blck1pbnV0ZSAqIG1pbnV0ZXNQZXJIb3VyOwogIHN0YXRpYyBjb25zdCBpbnQgbWljcm9zZWNvbmRzUGVyRGF5ID0gbWljcm9zZWNvbmRzUGVySG91ciAqIGhvdXJzUGVyRGF5OwoKICBzdGF0aWMgY29uc3QgaW50IG1pbGxpc2Vjb25kc1Blck1pbnV0ZSA9CiAgICAgIG1pbGxpc2Vjb25kc1BlclNlY29uZCAqIHNlY29uZHNQZXJNaW51dGU7CiAgc3RhdGljIGNvbnN0IGludCBtaWxsaXNlY29uZHNQZXJIb3VyID0gbWlsbGlzZWNvbmRzUGVyTWludXRlICogbWludXRlc1BlckhvdXI7CiAgc3RhdGljIGNvbnN0IGludCBtaWxsaXNlY29uZHNQZXJEYXkgPSBtaWxsaXNlY29uZHNQZXJIb3VyICogaG91cnNQZXJEYXk7CgogIHN0YXRpYyBjb25zdCBpbnQgc2Vjb25kc1BlckhvdXIgPSBzZWNvbmRzUGVyTWludXRlICogbWludXRlc1BlckhvdXI7CiAgc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVyRGF5ID0gc2Vjb25kc1BlckhvdXIgKiBob3Vyc1BlckRheTsKCiAgc3RhdGljIGNvbnN0IGludCBtaW51dGVzUGVyRGF5ID0gbWludXRlc1BlckhvdXIgKiBob3Vyc1BlckRheTsKCiAgc3RhdGljIGNvbnN0IER1cmF0aW9uIHplcm8gPSBEdXJhdGlvbihzZWNvbmRzOiAwKTsKCiAgLyoKICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbiBvYmplY3QgaW4gbWljcm9zZWNvbmRzLgogICAqLwogIGZpbmFsIGludCBfZHVyYXRpb247CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgRHVyYXRpb24gb2JqZWN0IHdob3NlIHZhbHVlCiAgICogaXMgdGhlIHN1bSBvZiBhbGwgaW5kaXZpZHVhbCBwYXJ0cy4KICAgKgogICAqIEluZGl2aWR1YWwgcGFydHMgY2FuIGJlIGxhcmdlciB0aGFuIHRoZSBuZXh0LWJpZ2dlciB1bml0LgogICAqIEZvciBleGFtcGxlLCBbaG91cnNdIGNhbiBiZSBncmVhdGVyIHRoYW4gMjMuCiAgICoKICAgKiBBbGwgaW5kaXZpZHVhbCBwYXJ0cyBhcmUgYWxsb3dlZCB0byBiZSBuZWdhdGl2ZS4KICAgKiBBbGwgYXJndW1lbnRzIGFyZSAwIGJ5IGRlZmF1bHQuCiAgICovCiAgY29uc3QgRHVyYXRpb24oCiAgICAgIHtpbnQgZGF5cyA9IDAsCiAgICAgIGludCBob3VycyA9IDAsCiAgICAgIGludCBtaW51dGVzID0gMCwKICAgICAgaW50IHNlY29uZHMgPSAwLAogICAgICBpbnQgbWlsbGlzZWNvbmRzID0gMCwKICAgICAgaW50IG1pY3Jvc2Vjb25kcyA9IDB9KQogICAgICA6IHRoaXMuX21pY3Jvc2Vjb25kcyhtaWNyb3NlY29uZHNQZXJEYXkgKiBkYXlzICsKICAgICAgICAgICAgbWljcm9zZWNvbmRzUGVySG91ciAqIGhvdXJzICsKICAgICAgICAgICAgbWljcm9zZWNvbmRzUGVyTWludXRlICogbWludXRlcyArCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kc1BlclNlY29uZCAqIHNlY29uZHMgKwogICAgICAgICAgICBtaWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCAqIG1pbGxpc2Vjb25kcyArCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kcyk7CgogIC8vIEZhc3QgcGF0aCBpbnRlcm5hbCBkaXJlY3QgY29uc3RydWN0b3IgdG8gYXZvaWRzIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgYW5kCiAgLy8gW19taWNyb3NlY29uZHNdIHJlY29tcHV0YXRpb24uCiAgY29uc3QgRHVyYXRpb24uX21pY3Jvc2Vjb25kcyh0aGlzLl9kdXJhdGlvbik7CgogIC8qKgogICAqIEFkZHMgdGhpcyBEdXJhdGlvbiBhbmQgW290aGVyXSBhbmQKICAgKiByZXR1cm5zIHRoZSBzdW0gYXMgYSBuZXcgRHVyYXRpb24gb2JqZWN0LgogICAqLwogIER1cmF0aW9uIG9wZXJhdG9yICsoRHVyYXRpb24gb3RoZXIpIHsKICAgIHJldHVybiBEdXJhdGlvbi5fbWljcm9zZWNvbmRzKF9kdXJhdGlvbiArIG90aGVyLl9kdXJhdGlvbik7CiAgfQoKICAvKioKICAgKiBTdWJ0cmFjdHMgW290aGVyXSBmcm9tIHRoaXMgRHVyYXRpb24gYW5kCiAgICogcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBhcyBhIG5ldyBEdXJhdGlvbiBvYmplY3QuCiAgICovCiAgRHVyYXRpb24gb3BlcmF0b3IgLShEdXJhdGlvbiBvdGhlcikgewogICAgcmV0dXJuIER1cmF0aW9uLl9taWNyb3NlY29uZHMoX2R1cmF0aW9uIC0gb3RoZXIuX2R1cmF0aW9uKTsKICB9CgogIC8qKgogICAqIE11bHRpcGxpZXMgdGhpcyBEdXJhdGlvbiBieSB0aGUgZ2l2ZW4gW2ZhY3Rvcl0gYW5kIHJldHVybnMgdGhlIHJlc3VsdAogICAqIGFzIGEgbmV3IER1cmF0aW9uIG9iamVjdC4KICAgKgogICAqIE5vdGUgdGhhdCB3aGVuIFtmYWN0b3JdIGlzIGEgZG91YmxlLCBhbmQgdGhlIGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbgogICAqIDUzIGJpdHMsIHByZWNpc2lvbiBpcyBsb3N0IGJlY2F1c2Ugb2YgZG91YmxlLXByZWNpc2lvbiBhcml0aG1ldGljLgogICAqLwogIER1cmF0aW9uIG9wZXJhdG9yICoobnVtIGZhY3RvcikgewogICAgcmV0dXJuIER1cmF0aW9uLl9taWNyb3NlY29uZHMoKF9kdXJhdGlvbiAqIGZhY3Rvcikucm91bmQoKSk7CiAgfQoKICAvKioKICAgKiBEaXZpZGVzIHRoaXMgRHVyYXRpb24gYnkgdGhlIGdpdmVuIFtxdW90aWVudF0gYW5kIHJldHVybnMgdGhlIHRydW5jYXRlZAogICAqIHJlc3VsdCBhcyBhIG5ldyBEdXJhdGlvbiBvYmplY3QuCiAgICoKICAgKiBUaHJvd3MgYW4gW0ludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbl0gaWYgW3F1b3RpZW50XSBpcyBgMGAuCiAgICovCiAgRHVyYXRpb24gb3BlcmF0b3Igfi8oaW50IHF1b3RpZW50KSB7CiAgICAvLyBCeSBkb2luZyB0aGUgY2hlY2sgaGVyZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gIn4vIiBiZWxvdyB3ZSBnZXQgdGhlCiAgICAvLyBleGNlcHRpb24gZXZlbiB3aXRoIGRhcnQyanMuCiAgICBpZiAocXVvdGllbnQgPT0gMCkgdGhyb3cgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICByZXR1cm4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcyhfZHVyYXRpb24gfi8gcXVvdGllbnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24KICAgKiBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIFtvdGhlcl0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA8KER1cmF0aW9uIG90aGVyKSA9PiB0aGlzLl9kdXJhdGlvbiA8IG90aGVyLl9kdXJhdGlvbjsKCiAgLyoqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24KICAgKiBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIFtvdGhlcl0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA+KER1cmF0aW9uIG90aGVyKSA9PiB0aGlzLl9kdXJhdGlvbiA+IG90aGVyLl9kdXJhdGlvbjsKCiAgLyoqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24KICAgKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIFtvdGhlcl0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA8PShEdXJhdGlvbiBvdGhlcikgPT4gdGhpcy5fZHVyYXRpb24gPD0gb3RoZXIuX2R1cmF0aW9uOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbgogICAqIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2YgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yID49KER1cmF0aW9uIG90aGVyKSA9PiB0aGlzLl9kdXJhdGlvbiA+PSBvdGhlci5fZHVyYXRpb247CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBkYXlzIHNwYW5uZWQgYnkgdGhpcyBEdXJhdGlvbi4KICAgKi8KICBpbnQgZ2V0IGluRGF5cyA9PiBfZHVyYXRpb24gfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyRGF5OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2hvbGUgaG91cnMgc3Bhbm5lZCBieSB0aGlzIER1cmF0aW9uLgogICAqCiAgICogVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSBncmVhdGVyIHRoYW4gMjMuCiAgICovCiAgaW50IGdldCBpbkhvdXJzID0+IF9kdXJhdGlvbiB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJIb3VyOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2hvbGUgbWludXRlcyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIGdyZWF0ZXIgdGhhbiA1OS4KICAgKi8KICBpbnQgZ2V0IGluTWludXRlcyA9PiBfZHVyYXRpb24gfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWludXRlOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2hvbGUgc2Vjb25kcyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIGdyZWF0ZXIgdGhhbiA1OS4KICAgKi8KICBpbnQgZ2V0IGluU2Vjb25kcyA9PiBfZHVyYXRpb24gfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyU2Vjb25kOwoKICAvKioKICAgKiBSZXR1cm5zIG51bWJlciBvZiB3aG9sZSBtaWxsaXNlY29uZHMgc3Bhbm5lZCBieSB0aGlzIER1cmF0aW9uLgogICAqCiAgICogVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSBncmVhdGVyIHRoYW4gOTk5LgogICAqLwogIGludCBnZXQgaW5NaWxsaXNlY29uZHMgPT4gX2R1cmF0aW9uIH4vIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwoKICAvKioKICAgKiBSZXR1cm5zIG51bWJlciBvZiB3aG9sZSBtaWNyb3NlY29uZHMgc3Bhbm5lZCBieSB0aGlzIER1cmF0aW9uLgogICAqLwogIGludCBnZXQgaW5NaWNyb3NlY29uZHMgPT4gX2R1cmF0aW9uOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIFtEdXJhdGlvbl0gaGFzIHRoZSBzYW1lIHZhbHVlIGFzIFtvdGhlcl0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSA9PgogICAgICBvdGhlciBpcyBEdXJhdGlvbiAmJiBfZHVyYXRpb24gPT0gb3RoZXIuaW5NaWNyb3NlY29uZHM7CgogIGludCBnZXQgaGFzaENvZGUgPT4gX2R1cmF0aW9uLmhhc2hDb2RlOwoKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIFtEdXJhdGlvbl0gdG8gW290aGVyXSwgcmV0dXJuaW5nIHplcm8gaWYgdGhlIHZhbHVlcyBhcmUgZXF1YWwuCiAgICoKICAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgaW50ZWdlciBpZiB0aGlzIGBEdXJhdGlvbmAgaXMgc2hvcnRlciB0aGFuCiAgICogW290aGVyXSwgb3IgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIGl0IGlzIGxvbmdlci4KICAgKgogICAqIEEgbmVnYXRpdmUgYER1cmF0aW9uYCBpcyBhbHdheXMgY29uc2lkZXJlZCBzaG9ydGVyIHRoYW4gYSBwb3NpdGl2ZSBvbmUuCiAgICoKICAgKiBJdCBpcyBhbHdheXMgdGhlIGNhc2UgdGhhdCBgZHVyYXRpb24xLmNvbXBhcmVUbyhkdXJhdGlvbjIpIDwgMGAgaWZmCiAgICogYChzb21lRGF0ZSArIGR1cmF0aW9uMSkuY29tcGFyZVRvKHNvbWVEYXRlICsgZHVyYXRpb24yKSA8IDBgLgogICAqLwogIGludCBjb21wYXJlVG8oRHVyYXRpb24gb3RoZXIpID0+IF9kdXJhdGlvbi5jb21wYXJlVG8ob3RoZXIuX2R1cmF0aW9uKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGBEdXJhdGlvbmAuCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyaW5nIHdpdGggaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBtaWNyb3NlY29uZHMsIGluIHRoZQogICAqIGZvbGxvd2luZyBmb3JtYXQ6IGBISDpNTTpTUy5tbW1tbW1gLiBGb3IgZXhhbXBsZSwKICAgKgogICAqICAgICB2YXIgZCA9IG5ldyBEdXJhdGlvbihkYXlzOjEsIGhvdXJzOjEsIG1pbnV0ZXM6MzMsIG1pY3Jvc2Vjb25kczogNTAwKTsKICAgKiAgICAgZC50b1N0cmluZygpOyAgLy8gIjI1OjMzOjAwLjAwMDUwMCIKICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgc2l4RGlnaXRzKGludCBuKSB7CiAgICAgIGlmIChuID49IDEwMDAwMCkgcmV0dXJuICIkbiI7CiAgICAgIGlmIChuID49IDEwMDAwKSByZXR1cm4gIjAkbiI7CiAgICAgIGlmIChuID49IDEwMDApIHJldHVybiAiMDAkbiI7CiAgICAgIGlmIChuID49IDEwMCkgcmV0dXJuICIwMDAkbiI7CiAgICAgIGlmIChuID49IDEwKSByZXR1cm4gIjAwMDAkbiI7CiAgICAgIHJldHVybiAiMDAwMDAkbiI7CiAgICB9CgogICAgU3RyaW5nIHR3b0RpZ2l0cyhpbnQgbikgewogICAgICBpZiAobiA+PSAxMCkgcmV0dXJuICIkbiI7CiAgICAgIHJldHVybiAiMCRuIjsKICAgIH0KCiAgICBpZiAoaW5NaWNyb3NlY29uZHMgPCAwKSB7CiAgICAgIHJldHVybiAiLSR7LXRoaXN9IjsKICAgIH0KICAgIFN0cmluZyB0d29EaWdpdE1pbnV0ZXMgPSB0d29EaWdpdHMoaW5NaW51dGVzLnJlbWFpbmRlcihtaW51dGVzUGVySG91cikpOwogICAgU3RyaW5nIHR3b0RpZ2l0U2Vjb25kcyA9IHR3b0RpZ2l0cyhpblNlY29uZHMucmVtYWluZGVyKHNlY29uZHNQZXJNaW51dGUpKTsKICAgIFN0cmluZyBzaXhEaWdpdFVzID0KICAgICAgICBzaXhEaWdpdHMoaW5NaWNyb3NlY29uZHMucmVtYWluZGVyKG1pY3Jvc2Vjb25kc1BlclNlY29uZCkpOwogICAgcmV0dXJuICIkaW5Ib3VyczokdHdvRGlnaXRNaW51dGVzOiR0d29EaWdpdFNlY29uZHMuJHNpeERpZ2l0VXMiOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgYER1cmF0aW9uYCBpcyBuZWdhdGl2ZS4KICAgKgogICAqIEEgbmVnYXRpdmUgYER1cmF0aW9uYCByZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGZyb20gYSBsYXRlciB0aW1lIHRvIGFuCiAgICogZWFybGllciB0aW1lLgogICAqLwogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gX2R1cmF0aW9uIDwgMDsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBgRHVyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcwogICAqIGBEdXJhdGlvbmAuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgYER1cmF0aW9uYCBoYXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoaXMgb25lLCBidXQgaXMgYWx3YXlzCiAgICogcG9zaXRpdmUuCiAgICovCiAgRHVyYXRpb24gYWJzKCkgPT4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcyhfZHVyYXRpb24uYWJzKCkpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGBEdXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoaXMgYER1cmF0aW9uYCBuZWdhdGVkLgogICAqCiAgICogVGhlIHJldHVybmVkIGBEdXJhdGlvbmAgaGFzIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGlzIG9uZSwgYnV0IHdpbGwgaGF2ZSB0aGUKICAgKiBvcHBvc2l0ZSBzaWduIG9mIHRoaXMgb25lLgogICAqLwogIC8vIFVzaW5nIHN1YnRyYWN0aW9uIGhlbHBzIGRhcnQyanMgYXZvaWQgbmVnYXRpdmUgemVyb3MuCiAgRHVyYXRpb24gb3BlcmF0b3IgLSgpID0+IER1cmF0aW9uLl9taWNyb3NlY29uZHMoMCAtIF9kdXJhdGlvbik7Cn0KgScATk48ARMBBEgDT0sMA0tITQNNTE9NDQNIJQtLBzZNNAstBzQDME0xEAszJQcyHT0DMCoEMTYxKiglASs6KzBRSwErMFFLAUdBAUEBNQEFOAYXAQYvKQU/MgU2JQYSFRUXFxwdNyouLjgbAVAkMAEGKC8GKEAEAQYuNgYoQAQBBksfBUtIBiRBBAEGTSYFRgYnSyQ/OgQBBjIoBkcBBjIrBkcBBjI0BkkBBjI3BkkBBkAGPgEGQQUwBkABBkMFMAZEAQZDBTAGRAEGRAUxBk4BBkQGJwEGRgYlPgEqAQZSBUM1BU0FSUMGSQEGOQVNNwVPLQYWHiQkJCQkGAYBHiAUBgEeGgZNTxhERQQBBjIFTRMGKAEGRhEFTA8GPQEGRAVQIAY7QgIBF2RhcnQ6Y29yZS9kdXJhdGlvbi5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2Vycm9ycy5kYXJ0wABL/S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBFcnJvciBvYmplY3RzIHRocm93biBpbiB0aGUgY2FzZSBvZiBhIHByb2dyYW0gZmFpbHVyZS4KICoKICogQW4gYEVycm9yYCBvYmplY3QgcmVwcmVzZW50cyBhIHByb2dyYW0gZmFpbHVyZSB0aGF0IHRoZSBwcm9ncmFtbWVyCiAqIHNob3VsZCBoYXZlIGF2b2lkZWQuCiAqCiAqIEV4YW1wbGVzIGluY2x1ZGUgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBhcmd1bWVudHMsCiAqIG9yIGV2ZW4gd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywKICogb3IgY2FsbGluZyBpdCBhdCBhIHRpbWUgd2hlbiBpdCBpcyBub3QgYWxsb3dlZC4KICoKICogVGhlc2UgYXJlIG5vdCBlcnJvcnMgdGhhdCBhIGNhbGxlciBzaG91bGQgZXhwZWN0IG9yIGNhdGNoIC0KICogaWYgdGhleSBvY2N1ciwgdGhlIHByb2dyYW0gaXMgZXJyb25lb3VzLAogKiBhbmQgdGVybWluYXRpbmcgdGhlIHByb2dyYW0gbWF5IGJlIHRoZSBzYWZlc3QgcmVzcG9uc2UuCiAqCiAqIFdoZW4gZGVjaWRpbmcgdGhhdCBhIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvciwKICogdGhlIGNvbmRpdGlvbnMgd2hlcmUgaXQgaGFwcGVucyBzaG91bGQgYmUgY2xlYXJseSBkZXNjcmliZWQsCiAqIGFuZCB0aGV5IHNob3VsZCBiZSBkZXRlY3RhYmxlIGFuZCBwcmVkaWN0YWJsZSwKICogc28gdGhlIHByb2dyYW1tZXIgdXNpbmcgdGhlIGZ1bmN0aW9uIGNhbiBhdm9pZCB0cmlnZ2VyaW5nIHRoZSBlcnJvci4KICoKICogU3VjaCBkZXNjcmlwdGlvbnMgb2Z0ZW4gdXNlcyB3b3JkcyBsaWtlCiAqICJtdXN0IiBvciAibXVzdCBub3QiIHRvIGRlc2NyaWJlIHRoZSBjb25kaXRpb24sCiAqIGFuZCBpZiB5b3Ugc2VlIHdvcmRzIGxpa2UgdGhhdCBpbiBhIGZ1bmN0aW9uJ3MgZG9jdW1lbnRhdGlvbiwKICogdGhlbiBub3Qgc2F0aXNmeWluZyB0aGUgcmVxdWlyZW1lbnQKICogaXMgdmVyeSBsaWtlbHkgdG8gY2F1c2UgYW4gZXJyb3IgdG8gYmUgdGhyb3duLgogKgogKiBFeGFtcGxlIChmcm9tIFtTdHJpbmcuY29udGFpbnNdKToKICoKICogICAgICAgIGBzdGFydEluZGV4YCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gYGxlbmd0aGAuCiAqCiAqIEluIHRoaXMgY2FzZSwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24gaWYgYHN0YXJ0SW5kZXhgIGlzIG5lZ2F0aXZlCiAqIG9yIHRvbyBsYXJnZS4KICoKICogSWYgdGhlIGNvbmRpdGlvbnMgYXJlIG5vdCBkZXRlY3RhYmxlIGJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24sCiAqIHRoZSBjYWxsZWQgZnVuY3Rpb24gc2hvdWxkIG5vdCB0aHJvdyBhbiBgRXJyb3JgLgogKiBJdCBtYXkgc3RpbGwgdGhyb3cgYSB2YWx1ZSwKICogYnV0IHRoZSBjYWxsZXIgd2lsbCBoYXZlIHRvIGNhdGNoIHRoZSB0aHJvd24gdmFsdWUsCiAqIGVmZmVjdGl2ZWx5IG1ha2luZyBpdCBhbiBhbHRlcm5hdGl2ZSByZXN1bHQgcmF0aGVyIHRoYW4gYW4gZXJyb3IuCiAqIFRoZSB0aHJvd24gb2JqZWN0IGNhbiBjaG9vc2UgdG8gaW1wbGVtZW50IFtFeGNlcHRpb25dCiAqIHRvIGRvY3VtZW50IHRoYXQgaXQgcmVwcmVzZW50cyBhbiBleGNlcHRpb25hbCwgYnV0IG5vdCBlcnJvbmVvdXMsIG9jY3VycmVuY2UsCiAqIGJ1dCBpdCBoYXMgbm8gb3RoZXIgZWZmZWN0IHRoYW4gZG9jdW1lbnRhdGlvbi4KICoKICogQWxsIG5vbi1gbnVsbGAgdmFsdWVzIGNhbiBiZSB0aHJvd24gaW4gRGFydC4KICogT2JqZWN0cyBleHRlbmRpbmcgYEVycm9yYCBhcmUgaGFuZGxlZCBzcGVjaWFsbHk6CiAqIFRoZSBmaXJzdCB0aW1lIHRoZXkgYXJlIHRocm93biwKICogdGhlIHN0YWNrIHRyYWNlIGF0IHRoZSB0aHJvdyBwb2ludCBpcyByZWNvcmRlZAogKiBhbmQgc3RvcmVkIGluIHRoZSBlcnJvciBvYmplY3QuCiAqIEl0IGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlIFtzdGFja1RyYWNlXSBnZXR0ZXIuCiAqIEFuIGVycm9yIG9iamVjdCB0aGF0IG1lcmVseSBpbXBsZW1lbnRzIGBFcnJvcmAsIGFuZCBkb2Vzbid0IGV4dGVuZCBpdCwKICogd2lsbCBub3Qgc3RvcmUgdGhlIHN0YWNrIHRyYWNlIGF1dG9tYXRpY2FsbHkuCiAqCiAqIEVycm9yIG9iamVjdHMgYXJlIGFsc28gdXNlZCBmb3Igc3lzdGVtIHdpZGUgZmFpbHVyZXMKICogbGlrZSBzdGFjayBvdmVyZmxvdyBvciBhbiBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbi4KICoKICogU2luY2UgZXJyb3JzIGFyZSBub3QgY3JlYXRlZCB0byBiZSBjYXVnaHQsCiAqIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHN1YmNsYXNzZXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGVycm9ycy4KICogSW5zdGVhZCBzdWJjbGFzc2VzIGhhdmUgYmVlbiBjcmVhdGVkIGluIG9yZGVyIHRvIG1ha2UgZ3JvdXBzCiAqIG9mIHJlbGF0ZWQgZXJyb3JzIGVhc3kgdG8gY3JlYXRlIHdpdGggY29uc2lzdGVudCBlcnJvciBtZXNzYWdlcy4KICogRm9yIGV4YW1wbGUsIHRoZSBbU3RyaW5nLmNvbnRhaW5zXSBtZXRob2Qgd2lsbCB1c2UgYSBbUmFuZ2VFcnJvcl0KICogaWYgaXRzIGBzdGFydEluZGV4YCBpc24ndCBpbiB0aGUgcmFuZ2UgYDAuLmxlbmd0aGAsCiAqIHdoaWNoIGlzIGVhc2lseSBjcmVhdGVkIGJ5IGBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydEluZGV4LCAwLCBsZW5ndGgpYC4KICovCmNsYXNzIEVycm9yIHsKICBFcnJvcigpOyAvLyBQcmV2ZW50IHVzZSBhcyBtaXhpbi4KCiAgLyoqCiAgICogU2FmZWx5IGNvbnZlcnQgYSB2YWx1ZSB0byBhIFtTdHJpbmddIGRlc2NyaXB0aW9uLgogICAqCiAgICogVGhlIGNvbnZlcnNpb24gaXMgZ3VhcmFudGVlZCB0byBub3QgdGhyb3csIHNvIGl0IHdvbid0IHVzZSB0aGUgb2JqZWN0J3MKICAgKiB0b1N0cmluZyBtZXRob2QuCiAgICovCiAgc3RhdGljIFN0cmluZyBzYWZlVG9TdHJpbmcoT2JqZWN0IG9iamVjdCkgewogICAgaWYgKG9iamVjdCBpcyBudW0gfHwgb2JqZWN0IGlzIGJvb2wgfHwgbnVsbCA9PSBvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdC50b1N0cmluZygpOwogICAgfQogICAgaWYgKG9iamVjdCBpcyBTdHJpbmcpIHsKICAgICAgcmV0dXJuIF9zdHJpbmdUb1NhZmVTdHJpbmcob2JqZWN0KTsKICAgIH0KICAgIHJldHVybiBfb2JqZWN0VG9TdHJpbmcob2JqZWN0KTsKICB9CgogIC8qKiBDb252ZXJ0IHN0cmluZyB0byBhIHZhbGlkIHN0cmluZyBsaXRlcmFsIHdpdGggbm8gY29udHJvbCBjaGFyYWN0ZXJzLiAqLwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3N0cmluZ1RvU2FmZVN0cmluZyhTdHJpbmcgc3RyaW5nKTsKCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfb2JqZWN0VG9TdHJpbmcoT2JqZWN0IG9iamVjdCk7CgogIGV4dGVybmFsIFN0YWNrVHJhY2UgZ2V0IHN0YWNrVHJhY2U7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gYnkgdGhlIHJ1bnRpbWUgc3lzdGVtIHdoZW4gYW4gYXNzZXJ0IHN0YXRlbWVudCBmYWlscy4KICovCmNsYXNzIEFzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3IgewogIC8qKiBNZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGFzc2VydGlvbiBlcnJvci4gKi8KICBmaW5hbCBPYmplY3QgbWVzc2FnZTsKICBBc3NlcnRpb25FcnJvcihbdGhpcy5tZXNzYWdlXSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkFzc2VydGlvbiBmYWlsZWQiOwp9CgovKioKICogRXJyb3IgdGhyb3duIGJ5IHRoZSBydW50aW1lIHN5c3RlbSB3aGVuIGEgdHlwZSBhc3NlcnRpb24gZmFpbHMuCiAqLwpjbGFzcyBUeXBlRXJyb3IgZXh0ZW5kcyBBc3NlcnRpb25FcnJvciB7fQoKLyoqCiAqIEVycm9yIHRocm93biBieSB0aGUgcnVudGltZSBzeXN0ZW0gd2hlbiBhIGNhc3Qgb3BlcmF0aW9uIGZhaWxzLgogKi8KY2xhc3MgQ2FzdEVycm9yIGV4dGVuZHMgRXJyb3Ige30KCi8qKgogKiBFcnJvciB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIHRocm93IFs6bnVsbDpdLgogKi8KY2xhc3MgTnVsbFRocm93bkVycm9yIGV4dGVuZHMgRXJyb3IgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBOdWxsVGhyb3duRXJyb3IoKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVGhyb3cgb2YgbnVsbC4iOwp9CgovKioKICogRXJyb3IgdGhyb3duIHdoZW4gYSBmdW5jdGlvbiBpcyBwYXNzZWQgYW4gdW5hY2NlcHRhYmxlIGFyZ3VtZW50LgogKi8KY2xhc3MgQXJndW1lbnRFcnJvciBleHRlbmRzIEVycm9yIHsKICAvKiogV2hldGhlciB2YWx1ZSB3YXMgcHJvdmlkZWQuICovCiAgZmluYWwgYm9vbCBfaGFzVmFsdWU7CiAgLyoqIFRoZSBpbnZhbGlkIHZhbHVlLiAqLwogIGZpbmFsIGludmFsaWRWYWx1ZTsKICAvKiogTmFtZSBvZiB0aGUgaW52YWxpZCBhcmd1bWVudCwgaWYgYXZhaWxhYmxlLiAqLwogIGZpbmFsIFN0cmluZyBuYW1lOwogIC8qKiBNZXNzYWdlIGRlc2NyaWJpbmcgdGhlIHByb2JsZW0uICovCiAgZmluYWwgbWVzc2FnZTsKCiAgLyoqCiAgICogVGhlIFttZXNzYWdlXSBkZXNjcmliZXMgdGhlIGVycm9uZW91cyBhcmd1bWVudC4KICAgKgogICAqIEV4aXN0aW5nIGNvZGUgbWF5IGJlIHVzaW5nIGBtZXNzYWdlYCB0byBob2xkIHRoZSBpbnZhbGlkIHZhbHVlLgogICAqIElmIHRoZSBgbWVzc2FnZWAgaXMgbm90IGEgW1N0cmluZ10sIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSB2YWx1ZSBpbnN0ZWFkCiAgICogb2YgYSBtZXNzYWdlLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBBcmd1bWVudEVycm9yKFt0aGlzLm1lc3NhZ2VdKQogICAgICA6IGludmFsaWRWYWx1ZSA9IG51bGwsCiAgICAgICAgX2hhc1ZhbHVlID0gZmFsc2UsCiAgICAgICAgbmFtZSA9IG51bGw7CgogIC8qKgogICAqIENyZWF0ZXMgZXJyb3IgY29udGFpbmluZyB0aGUgaW52YWxpZCBbdmFsdWVdLgogICAqCiAgICogQSBtZXNzYWdlIGlzIGJ1aWx0IGJ5IHN1ZmZpeGluZyB0aGUgW21lc3NhZ2VdIGFyZ3VtZW50IHdpdGgKICAgKiB0aGUgW25hbWVdIGFyZ3VtZW50IChpZiBwcm92aWRlZCkgYW5kIHRoZSB2YWx1ZS4gRXhhbXBsZQogICAqCiAgICogICAgIkludmFsaWQgYXJndW1lbnQgKGZvbyk6IG51bGwiCiAgICoKICAgKiBUaGUgYG5hbWVgIHNob3VsZCBtYXRjaCB0aGUgYXJndW1lbnQgbmFtZSBvZiB0aGUgZnVuY3Rpb24sIGJ1dCBpZgogICAqIHRoZSBmdW5jdGlvbiBpcyBhIG1ldGhvZCBpbXBsZW1lbnRpbmcgYW4gaW50ZXJmYWNlLCBhbmQgaXRzIGFyZ3VtZW50CiAgICogbmFtZXMgZGlmZmVyIGZyb20gdGhlIGludGVyZmFjZSwgaXQgbWlnaHQgYmUgbW9yZSB1c2VmdWwgdG8gdXNlIHRoZQogICAqIGludGVyZmFjZSBtZXRob2QncyBhcmd1bWVudCBuYW1lIChvciBqdXN0IHJlbmFtZSBhcmd1bWVudHMgdG8gbWF0Y2gpLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBBcmd1bWVudEVycm9yLnZhbHVlKHZhbHVlLCBbdGhpcy5uYW1lLCB0aGlzLm1lc3NhZ2VdKQogICAgICA6IGludmFsaWRWYWx1ZSA9IHZhbHVlLAogICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7CgogIC8qKgogICAqIENyZWF0ZSBhbiBhcmd1bWVudCBlcnJvciBmb3IgYSBgbnVsbGAgYXJndW1lbnQgdGhhdCBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICovCiAgQXJndW1lbnRFcnJvci5ub3ROdWxsKFt0aGlzLm5hbWVdKQogICAgICA6IF9oYXNWYWx1ZSA9IGZhbHNlLAogICAgICAgIG1lc3NhZ2UgPSAiTXVzdCBub3QgYmUgbnVsbCIsCiAgICAgICAgaW52YWxpZFZhbHVlID0gbnVsbDsKCiAgLyoqCiAgICogVGhyb3dzIGlmIFthcmd1bWVudF0gaXMgYG51bGxgLgogICAqLwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgdm9pZCBjaGVja05vdE51bGwoT2JqZWN0IGFyZ3VtZW50LCBbU3RyaW5nIG5hbWVdKSB7CiAgICBpZiAoYXJndW1lbnQgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvci5ub3ROdWxsKG5hbWUpOwogIH0KCiAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdG9TdHJpbmcgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzLgogIFN0cmluZyBnZXQgX2Vycm9yTmFtZSA9PiAiSW52YWxpZCBhcmd1bWVudCR7IV9oYXNWYWx1ZSA/ICIocykiIDogIiJ9IjsKICBTdHJpbmcgZ2V0IF9lcnJvckV4cGxhbmF0aW9uID0+ICIiOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgbmFtZVN0cmluZyA9ICIiOwogICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICBuYW1lU3RyaW5nID0gIiAoJG5hbWUpIjsKICAgIH0KICAgIHZhciBtZXNzYWdlID0gKHRoaXMubWVzc2FnZSA9PSBudWxsKSA/ICIiIDogIjogJHt0aGlzLm1lc3NhZ2V9IjsKICAgIFN0cmluZyBwcmVmaXggPSAiJF9lcnJvck5hbWUkbmFtZVN0cmluZyRtZXNzYWdlIjsKICAgIGlmICghX2hhc1ZhbHVlKSByZXR1cm4gcHJlZml4OwogICAgLy8gSWYgd2Uga25vdyB0aGUgaW52YWxpZCB2YWx1ZSwgd2UgY2FuIHRyeSB0byBkZXNjcmliZSB0aGUgcHJvYmxlbS4KICAgIFN0cmluZyBleHBsYW5hdGlvbiA9IF9lcnJvckV4cGxhbmF0aW9uOwogICAgU3RyaW5nIGVycm9yVmFsdWUgPSBFcnJvci5zYWZlVG9TdHJpbmcoaW52YWxpZFZhbHVlKTsKICAgIHJldHVybiAiJHByZWZpeCRleHBsYW5hdGlvbjogJGVycm9yVmFsdWUiOwogIH0KfQoKLyoqCiAqIEVycm9yIHRocm93biBkdWUgdG8gYW4gaW5kZXggYmVpbmcgb3V0c2lkZSBhIHZhbGlkIHJhbmdlLgogKi8KY2xhc3MgUmFuZ2VFcnJvciBleHRlbmRzIEFyZ3VtZW50RXJyb3IgewogIC8qKiBUaGUgbWluaW11bSB2YWx1ZSB0aGF0IFt2YWx1ZV0gaXMgYWxsb3dlZCB0byBhc3N1bWUuICovCiAgZmluYWwgbnVtIHN0YXJ0OwogIC8qKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGF0IFt2YWx1ZV0gaXMgYWxsb3dlZCB0byBhc3N1bWUuICovCiAgZmluYWwgbnVtIGVuZDsKCiAgLy8gVE9ETyhscm4pOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBiZSBjYWxsZWQgb25seSB3aXRoIHN0cmluZyB2YWx1ZXMuCiAgLy8gSXQgY3VycmVudGx5IGlzbid0IGluIGFsbCBjYXNlcy4KICAvKioKICAgKiBDcmVhdGUgYSBuZXcgW1JhbmdlRXJyb3JdIHdpdGggdGhlIGdpdmVuIFttZXNzYWdlXS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgUmFuZ2VFcnJvcih2YXIgbWVzc2FnZSkKICAgICAgOiBzdGFydCA9IG51bGwsCiAgICAgICAgZW5kID0gbnVsbCwKICAgICAgICBzdXBlcihtZXNzYWdlKTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFtSYW5nZUVycm9yXSB3aXRoIGEgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFt2YWx1ZV0uCiAgICoKICAgKiBBbiBvcHRpb25hbCBbbmFtZV0gY2FuIHNwZWNpZnkgdGhlIGFyZ3VtZW50IG5hbWUgdGhhdCBoYXMgdGhlCiAgICogaW52YWxpZCB2YWx1ZSwgYW5kIHRoZSBbbWVzc2FnZV0gY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVycm9yCiAgICogZGVzY3JpcHRpb24uCiAgICovCiAgUmFuZ2VFcnJvci52YWx1ZShudW0gdmFsdWUsIFtTdHJpbmcgbmFtZSwgU3RyaW5nIG1lc3NhZ2VdKQogICAgICA6IHN0YXJ0ID0gbnVsbCwKICAgICAgICBlbmQgPSBudWxsLAogICAgICAgIHN1cGVyLnZhbHVlKAogICAgICAgICAgICB2YWx1ZSwgbmFtZSwgKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIlZhbHVlIG5vdCBpbiByYW5nZSIpOwoKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgW1JhbmdlRXJyb3JdIGZvciBhIHZhbHVlIGJlaW5nIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlLgogICAqCiAgICogVGhlIGFsbG93ZWQgcmFuZ2UgaXMgZnJvbSBbbWluVmFsdWVdIHRvIFttYXhWYWx1ZV0sIGluY2x1c2l2ZS4KICAgKiBJZiBgbWluVmFsdWVgIG9yIGBtYXhWYWx1ZWAgYXJlIGBudWxsYCwgdGhlIHJhbmdlIGlzIGluZmluaXRlIGluCiAgICogdGhhdCBkaXJlY3Rpb24uCiAgICoKICAgKiBGb3IgYSByYW5nZSBmcm9tIDAgdG8gdGhlIGxlbmd0aCBvZiBzb21ldGhpbmcsIGVuZCBleGNsdXNpdmUsIHVzZQogICAqIFtSYW5nZUVycm9yLmluZGV4XS4KICAgKgogICAqIEFuIG9wdGlvbmFsIFtuYW1lXSBjYW4gc3BlY2lmeSB0aGUgYXJndW1lbnQgbmFtZSB0aGF0IGhhcyB0aGUKICAgKiBpbnZhbGlkIHZhbHVlLCBhbmQgdGhlIFttZXNzYWdlXSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZXJyb3IKICAgKiBkZXNjcmlwdGlvbi4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgUmFuZ2VFcnJvci5yYW5nZShudW0gaW52YWxpZFZhbHVlLCBpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSwKICAgICAgW1N0cmluZyBuYW1lLCBTdHJpbmcgbWVzc2FnZV0pCiAgICAgIDogc3RhcnQgPSBtaW5WYWx1ZSwKICAgICAgICBlbmQgPSBtYXhWYWx1ZSwKICAgICAgICBzdXBlci52YWx1ZSgKICAgICAgICAgICAgaW52YWxpZFZhbHVlLCBuYW1lLCAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAiSW52YWxpZCB2YWx1ZSIpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtSYW5nZUVycm9yXSBzdGF0aW5nIHRoYXQgW2luZGV4XSBpcyBub3QgYSB2YWxpZCBpbmRleAogICAqIGludG8gW2luZGV4YWJsZV0uCiAgICoKICAgKiBBbiBvcHRpb25hbCBbbmFtZV0gY2FuIHNwZWNpZnkgdGhlIGFyZ3VtZW50IG5hbWUgdGhhdCBoYXMgdGhlCiAgICogaW52YWxpZCB2YWx1ZSwgYW5kIHRoZSBbbWVzc2FnZV0gY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVycm9yCiAgICogZGVzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgW2xlbmd0aF0gaXMgdGhlIGxlbmd0aCBvZiBbaW5kZXhhYmxlXSBhdCB0aGUgdGltZSBvZiB0aGUgZXJyb3IuCiAgICogSWYgYGxlbmd0aGAgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGluZGV4YWJsZS5sZW5ndGhgLgogICAqLwogIGZhY3RvcnkgUmFuZ2VFcnJvci5pbmRleChpbnQgaW5kZXgsIGR5bmFtaWMgaW5kZXhhYmxlLAogICAgICBbU3RyaW5nIG5hbWUsIFN0cmluZyBtZXNzYWdlLCBpbnQgbGVuZ3RoXSkgPSBJbmRleEVycm9yOwoKICAvKioKICAgKiBDaGVjayB0aGF0IGEgW3ZhbHVlXSBsaWVzIGluIGEgc3BlY2lmaWMgaW50ZXJ2YWwuCiAgICoKICAgKiBUaHJvd3MgaWYgW3ZhbHVlXSBpcyBub3QgaW4gdGhlIGludGVydmFsLgogICAqIFRoZSBpbnRlcnZhbCBpcyBmcm9tIFttaW5WYWx1ZV0gdG8gW21heFZhbHVlXSwgYm90aCBpbmNsdXNpdmUuCiAgICovCiAgc3RhdGljIHZvaWQgY2hlY2tWYWx1ZUluSW50ZXJ2YWwoaW50IHZhbHVlLCBpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSwKICAgICAgW1N0cmluZyBuYW1lLCBTdHJpbmcgbWVzc2FnZV0pIHsKICAgIGlmICh2YWx1ZSA8IG1pblZhbHVlIHx8IHZhbHVlID4gbWF4VmFsdWUpIHsKICAgICAgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZSh2YWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlLCBuYW1lLCBtZXNzYWdlKTsKICAgIH0KICB9CgogIC8qKgogICAqIENoZWNrIHRoYXQgYSB2YWx1ZSBpcyBhIHZhbGlkIGluZGV4IGludG8gYW4gaW5kZXhhYmxlIG9iamVjdC4KICAgKgogICAqIFRocm93cyBpZiBbaW5kZXhdIGlzIG5vdCBhIHZhbGlkIGluZGV4IGludG8gW2luZGV4YWJsZV0uCiAgICoKICAgKiBBbiBpbmRleGFibGUgb2JqZWN0IGlzIG9uZSB0aGF0IGhhcyBhIGBsZW5ndGhgIGFuZCBhIGFuZCBpbmRleC1vcGVyYXRvcgogICAqIGBbXWAgdGhhdCBhY2NlcHRzIGFuIGluZGV4IGlmIGAwIDw9IGluZGV4IDwgbGVuZ3RoYC4KICAgKgogICAqIElmIFtsZW5ndGhdIGlzIHByb3ZpZGVkLCBpdCBpcyB1c2VkIGFzIHRoZSBsZW5ndGggb2YgdGhlIGluZGV4YWJsZSBvYmplY3QsCiAgICogb3RoZXJ3aXNlIHRoZSBsZW5ndGggaXMgZm91bmQgYXMgYGluZGV4YWJsZS5sZW5ndGhgLgogICAqLwogIHN0YXRpYyB2b2lkIGNoZWNrVmFsaWRJbmRleChpbnQgaW5kZXgsIGR5bmFtaWMgaW5kZXhhYmxlLAogICAgICBbU3RyaW5nIG5hbWUsIGludCBsZW5ndGgsIFN0cmluZyBtZXNzYWdlXSkgewogICAgbGVuZ3RoID8/PSBpbmRleGFibGUubGVuZ3RoOwogICAgLy8gQ29tcGFyaW5nIHdpdGggYDBgIGFzIHJlY2VpdmVyIHByb2R1Y2VzIGJldHRlciBkYXJ0MmpzIHR5cGUgaW5mZXJlbmNlLgogICAgaWYgKDAgPiBpbmRleCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgbmFtZSA/Pz0gImluZGV4IjsKICAgICAgdGhyb3cgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgaW5kZXhhYmxlLCBuYW1lLCBtZXNzYWdlLCBsZW5ndGgpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2hlY2sgdGhhdCBhIHJhbmdlIHJlcHJlc2VudHMgYSBzbGljZSBvZiBhbiBpbmRleGFibGUgb2JqZWN0LgogICAqCiAgICogVGhyb3dzIGlmIHRoZSByYW5nZSBpcyBub3QgdmFsaWQgZm9yIGFuIGluZGV4YWJsZSBvYmplY3Qgd2l0aAogICAqIHRoZSBnaXZlbiBbbGVuZ3RoXS4KICAgKiBBIHJhbmdlIGlzIHZhbGlkIGZvciBhbiBpbmRleGFibGUgb2JqZWN0IHdpdGggYSBnaXZlbiBbbGVuZ3RoXQogICAqCiAgICogaWYgYDAgPD0gW3N0YXJ0XSA8PSBbZW5kXSA8PSBbbGVuZ3RoXWAuCiAgICogQW4gYGVuZGAgb2YgYG51bGxgIGlzIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBgbGVuZ3RoYC4KICAgKgogICAqIFRoZSBbc3RhcnROYW1lXSBhbmQgW2VuZE5hbWVdIGRlZmF1bHRzIHRvIGAic3RhcnQiYCBhbmQgYCJlbmQiYCwKICAgKiByZXNwZWN0aXZlbHkuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgYGVuZGAgdmFsdWUsIHdoaWNoIGlzIGBsZW5ndGhgIGlmIGBlbmRgIGlzIGBudWxsYCwKICAgKiBhbmQgYGVuZGAgb3RoZXJ3aXNlLgogICAqLwogIHN0YXRpYyBpbnQgY2hlY2tWYWxpZFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgaW50IGxlbmd0aCwKICAgICAgW1N0cmluZyBzdGFydE5hbWUsIFN0cmluZyBlbmROYW1lLCBTdHJpbmcgbWVzc2FnZV0pIHsKICAgIC8vIENvbXBhcmluZyB3aXRoIGAwYCBhcyByZWNlaXZlciBwcm9kdWNlcyBiZXR0ZXIgZGFydDJqcyB0eXBlIGluZmVyZW5jZS4KICAgIC8vIERpdHRvIGBzdGFydCA+IGVuZGAgYmVsb3cuCiAgICBpZiAoMCA+IHN0YXJ0IHx8IHN0YXJ0ID4gbGVuZ3RoKSB7CiAgICAgIHN0YXJ0TmFtZSA/Pz0gInN0YXJ0IjsKICAgICAgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgbGVuZ3RoLCBzdGFydE5hbWUsIG1lc3NhZ2UpOwogICAgfQogICAgaWYgKGVuZCAhPSBudWxsKSB7CiAgICAgIGlmIChzdGFydCA+IGVuZCB8fCBlbmQgPiBsZW5ndGgpIHsKICAgICAgICBlbmROYW1lID8/PSAiZW5kIjsKICAgICAgICB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIGxlbmd0aCwgZW5kTmFtZSwgbWVzc2FnZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGVuZDsKICAgIH0KICAgIHJldHVybiBsZW5ndGg7CiAgfQoKICAvKioKICAgKiBDaGVjayB0aGF0IGFuIGludGVnZXIgdmFsdWUgaXNuJ3QgbmVnYXRpdmUuCiAgICoKICAgKiBUaHJvd3MgaWYgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLgogICAqLwogIHN0YXRpYyB2b2lkIGNoZWNrTm90TmVnYXRpdmUoaW50IHZhbHVlLCBbU3RyaW5nIG5hbWUsIFN0cmluZyBtZXNzYWdlXSkgewogICAgaWYgKHZhbHVlIDwgMCkgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZSh2YWx1ZSwgMCwgbnVsbCwgbmFtZSwgbWVzc2FnZSk7CiAgfQoKICBTdHJpbmcgZ2V0IF9lcnJvck5hbWUgPT4gIlJhbmdlRXJyb3IiOwogIFN0cmluZyBnZXQgX2Vycm9yRXhwbGFuYXRpb24gewogICAgYXNzZXJ0KF9oYXNWYWx1ZSk7CiAgICBTdHJpbmcgZXhwbGFuYXRpb24gPSAiIjsKICAgIGlmIChzdGFydCA9PSBudWxsKSB7CiAgICAgIGlmIChlbmQgIT0gbnVsbCkgewogICAgICAgIGV4cGxhbmF0aW9uID0gIjogTm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAkZW5kIjsKICAgICAgfQogICAgICAvLyBJZiBib3RoIGFyZSBudWxsLCB3ZSBkb24ndCBhZGQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbGltaXRzLgogICAgfSBlbHNlIGlmIChlbmQgPT0gbnVsbCkgewogICAgICBleHBsYW5hdGlvbiA9ICI6IE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHN0YXJ0IjsKICAgIH0gZWxzZSBpZiAoZW5kID4gc3RhcnQpIHsKICAgICAgZXhwbGFuYXRpb24gPSAiOiBOb3QgaW4gcmFuZ2UgJHN0YXJ0Li4kZW5kLCBpbmNsdXNpdmUiOwogICAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkgewogICAgICBleHBsYW5hdGlvbiA9ICI6IFZhbGlkIHZhbHVlIHJhbmdlIGlzIGVtcHR5IjsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGVuZCA9PSBzdGFydC4KICAgICAgZXhwbGFuYXRpb24gPSAiOiBPbmx5IHZhbGlkIHZhbHVlIGlzICRzdGFydCI7CiAgICB9CiAgICByZXR1cm4gZXhwbGFuYXRpb247CiAgfQp9CgovKioKICogQSBzcGVjaWFsaXplZCBbUmFuZ2VFcnJvcl0gdXNlZCB3aGVuIGFuIGluZGV4IGlzIG5vdCBpbiB0aGUgcmFuZ2UKICogYDAuLmluZGV4YWJsZS5sZW5ndGgtMWAuCiAqCiAqIEFsc28gY29udGFpbnMgdGhlIGluZGV4YWJsZSBvYmplY3QsIGl0cyBsZW5ndGggYXQgdGhlIHRpbWUgb2YgdGhlIGVycm9yLAogKiBhbmQgdGhlIGludmFsaWQgaW5kZXggaXRzZWxmLgogKi8KY2xhc3MgSW5kZXhFcnJvciBleHRlbmRzIEFyZ3VtZW50RXJyb3IgaW1wbGVtZW50cyBSYW5nZUVycm9yIHsKICAvKiogVGhlIGluZGV4YWJsZSBvYmplY3QgdGhhdCBbaW52YWxpZFZhbHVlXSB3YXMgbm90IGEgdmFsaWQgaW5kZXggaW50by4gKi8KICBmaW5hbCBpbmRleGFibGU7CiAgLyoqIFRoZSBsZW5ndGggb2YgW2luZGV4YWJsZV0gYXQgdGhlIHRpbWUgb2YgdGhlIGVycm9yLiAqLwogIGZpbmFsIGludCBsZW5ndGg7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgW0luZGV4RXJyb3JdIHN0YXRpbmcgdGhhdCBbaW52YWxpZFZhbHVlXSBpcyBub3QgYSB2YWxpZCBpbmRleAogICAqIGludG8gW2luZGV4YWJsZV0uCiAgICoKICAgKiBUaGUgW2xlbmd0aF0gaXMgdGhlIGxlbmd0aCBvZiBbaW5kZXhhYmxlXSBhdCB0aGUgdGltZSBvZiB0aGUgZXJyb3IuCiAgICogSWYgYGxlbmd0aGAgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGluZGV4YWJsZS5sZW5ndGhgLgogICAqCiAgICogVGhlIG1lc3NhZ2UgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLgogICAqLwogIEluZGV4RXJyb3IoaW50IGludmFsaWRWYWx1ZSwgZHluYW1pYyBpbmRleGFibGUsCiAgICAgIFtTdHJpbmcgbmFtZSwgU3RyaW5nIG1lc3NhZ2UsIGludCBsZW5ndGhdKQogICAgICA6IHRoaXMuaW5kZXhhYmxlID0gaW5kZXhhYmxlLAogICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoID8/IGluZGV4YWJsZS5sZW5ndGgsCiAgICAgICAgc3VwZXIudmFsdWUoaW52YWxpZFZhbHVlLCBuYW1lLAogICAgICAgICAgICAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAiSW5kZXggb3V0IG9mIHJhbmdlIik7CgogIC8vIEdldHRlcnMgaW5oZXJpdGVkIGZyb20gUmFuZ2VFcnJvci4KICBpbnQgZ2V0IHN0YXJ0ID0+IDA7CiAgaW50IGdldCBlbmQgPT4gbGVuZ3RoIC0gMTsKCiAgU3RyaW5nIGdldCBfZXJyb3JOYW1lID0+ICJSYW5nZUVycm9yIjsKICBTdHJpbmcgZ2V0IF9lcnJvckV4cGxhbmF0aW9uIHsKICAgIGFzc2VydChfaGFzVmFsdWUpOwogICAgaW50IGludmFsaWRWYWx1ZSA9IHRoaXMuaW52YWxpZFZhbHVlOwogICAgaWYgKGludmFsaWRWYWx1ZSA8IDApIHsKICAgICAgcmV0dXJuICI6IGluZGV4IG11c3Qgbm90IGJlIG5lZ2F0aXZlIjsKICAgIH0KICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gIjogbm8gaW5kaWNlcyBhcmUgdmFsaWQiOwogICAgfQogICAgcmV0dXJuICI6IGluZGV4IHNob3VsZCBiZSBsZXNzIHRoYW4gJGxlbmd0aCI7CiAgfQp9CgovKioKICogRXJyb3IgdGhyb3duIHdoZW4gY29udHJvbCByZWFjaGVzIHRoZSBlbmQgb2YgYSBzd2l0Y2ggY2FzZS4KICoKICogVGhlIERhcnQgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGlzIGVycm9yIHRvIGJlIHRocm93biB3aGVuCiAqIGNvbnRyb2wgcmVhY2hlcyB0aGUgZW5kIG9mIGEgc3dpdGNoIGNhc2UgKGV4Y2VwdCB0aGUgbGFzdCBjYXNlCiAqIG9mIGEgc3dpdGNoKSB3aXRob3V0IG1lZXRpbmcgYSBicmVhayBvciBzaW1pbGFyIGVuZCBvZiB0aGUgY29udHJvbAogKiBmbG93LgogKi8KY2xhc3MgRmFsbFRocm91Z2hFcnJvciBleHRlbmRzIEVycm9yIHsKICBGYWxsVGhyb3VnaEVycm9yKCk7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGV4dGVybmFsIEZhbGxUaHJvdWdoRXJyb3IuX2NyZWF0ZShTdHJpbmcgdXJsLCBpbnQgbGluZSk7CgogIGV4dGVybmFsIFN0cmluZyB0b1N0cmluZygpOwp9CgovKioKICogRXJyb3IgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGluc3RhbnRpYXRlIGFuIGFic3RyYWN0IGNsYXNzLgogKi8KY2xhc3MgQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX2NsYXNzTmFtZTsKICBBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKFN0cmluZyBjbGFzc05hbWUpIDogX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTsKCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gYnkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgWzpub1N1Y2hNZXRob2Q6XSBvbiBbT2JqZWN0XS4KICovCmNsYXNzIE5vU3VjaE1ldGhvZEVycm9yIGV4dGVuZHMgRXJyb3IgewogIC8qKgogICAqIENyZWF0ZSBhIFtOb1N1Y2hNZXRob2RFcnJvcl0gY29ycmVzcG9uZGluZyB0byBhIGZhaWxlZCBtZXRob2QgY2FsbC4KICAgKgogICAqIFRoZSBbcmVjZWl2ZXJdIGlzIHRoZSByZWNlaXZlciBvZiB0aGUgbWV0aG9kIGNhbGwuCiAgICogVGhhdCBpcywgdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHdhcyBhdHRlbXB0ZWQgY2FsbGVkLgogICAqCiAgICogVGhlIFtpbnZvY2F0aW9uXSByZXByZXNlbnRzIHRoZSBtZXRob2QgY2FsbCB0aGF0IGZhaWxlZC4gSXQKICAgKiBzaG91bGQgbm90IGJlIGBudWxsYC4KICAgKi8KICBleHRlcm5hbCBOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbigKICAgICAgT2JqZWN0IHJlY2VpdmVyLCBJbnZvY2F0aW9uIGludm9jYXRpb24pOwoKICAvLyBEZXByZWNhdGVkIGNvbnN0cnVjdG9yIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgZGFydDJqcyB1cGRhdGVzIHRvIHRoZSBhYm92ZS4KICAvKioKICAgKiBDcmVhdGUgYSBbTm9TdWNoTWV0aG9kRXJyb3JdIGNvcnJlc3BvbmRpbmcgdG8gYSBmYWlsZWQgbWV0aG9kIGNhbGwuCiAgICoKICAgKiBUaGUgW3JlY2VpdmVyXSBpcyB0aGUgcmVjZWl2ZXIgb2YgdGhlIG1ldGhvZCBjYWxsLgogICAqIFRoYXQgaXMsIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB3YXMgYXR0ZW1wdGVkIGNhbGxlZC4KICAgKiBJZiB0aGUgcmVjZWl2ZXIgaXMgYG51bGxgLCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNhbGwgdG8gYSB0b3AtbGV2ZWwKICAgKiBmdW5jdGlvbiBvZiBhIGxpYnJhcnkuCiAgICoKICAgKiBUaGUgW21lbWJlck5hbWVdIGlzIGEgW1N5bWJvbF0gcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBjYWxsZWQgbWV0aG9kCiAgICogb3IgYWNjZXNzb3IuIEl0IHNob3VsZCBub3QgYmUgYG51bGxgLgogICAqCiAgICogVGhlIFtwb3NpdGlvbmFsQXJndW1lbnRzXSBpcyBhIGxpc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYXQgdGhlCiAgICogbWV0aG9kIHdhcyBjYWxsZWQgd2l0aC4gSWYgYG51bGxgLCBpdCBpcyBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gdGhlCiAgICogZW1wdHkgbGlzdC4KICAgKgogICAqIFRoZSBbbmFtZWRBcmd1bWVudHNdIGlzIGEgbWFwIGZyb20gW1N5bWJvbF1zIHRvIHRoZSB2YWx1ZXMgb2YgbmFtZWQKICAgKiBhcmd1bWVudHMgdGhhdCB0aGUgbWV0aG9kIHdhcyBjYWxsZWQgd2l0aC4KICAgKgogICAqIFRoaXMgY29uc3RydWN0b3IgZG9lcyBub3QgaGFuZGxlIHR5cGUgYXJndW1lbnRzLgogICAqIFRvIGluY2x1ZGUgdHlwZSB2YXJpYWJsZXMsIGNyZWF0ZSBhbiBbSW52b2NhdGlvbl0gYW5kIHVzZQogICAqIFtOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbl0uCiAgICovCiAgQERlcHJlY2F0ZWQoIlVzZSBOb1N1Y2hNZXRob2Qud2l0aEludm9jYXRpb24gaW5zdGVhZCIpCiAgZXh0ZXJuYWwgTm9TdWNoTWV0aG9kRXJyb3IoT2JqZWN0IHJlY2VpdmVyLCBTeW1ib2wgbWVtYmVyTmFtZSwKICAgICAgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLCBNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50cywKICAgICAgW0BkZXByZWNhdGVkIExpc3QgZXhpc3RpbmdBcmd1bWVudE5hbWVzXSk7CgogIGV4dGVybmFsIFN0cmluZyB0b1N0cmluZygpOwp9CgovKioKICogVGhlIG9wZXJhdGlvbiB3YXMgbm90IGFsbG93ZWQgYnkgdGhlIG9iamVjdC4KICoKICogVGhpcyBbRXJyb3JdIGlzIHRocm93biB3aGVuIGFuIGluc3RhbmNlIGNhbm5vdCBpbXBsZW1lbnQgb25lIG9mIHRoZSBtZXRob2RzCiAqIGluIGl0cyBzaWduYXR1cmUuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIFVuc3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIFVuc3VwcG9ydGVkRXJyb3IodGhpcy5tZXNzYWdlKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAkbWVzc2FnZSI7Cn0KCi8qKgogKiBUaHJvd24gYnkgb3BlcmF0aW9ucyB0aGF0IGhhdmUgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LgogKgogKiBUaGlzIFtFcnJvcl0gaXMgdGhyb3duIGJ5IHVuZmluaXNoZWQgY29kZSB0aGF0IGhhc24ndCB5ZXQgaW1wbGVtZW50ZWQKICogYWxsIHRoZSBmZWF0dXJlcyBpdCBuZWVkcy4KICoKICogSWYgYSBjbGFzcyBpcyBub3QgaW50ZW5kaW5nIHRvIGltcGxlbWVudCB0aGUgZmVhdHVyZSwgaXQgc2hvdWxkIHRocm93CiAqIGFuIFtVbnN1cHBvcnRlZEVycm9yXSBpbnN0ZWFkLiBUaGlzIGVycm9yIGlzIG9ubHkgaW50ZW5kZWQgZm9yCiAqIHVzZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAqLwpjbGFzcyBVbmltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIFVuc3VwcG9ydGVkRXJyb3IgewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIFVuaW1wbGVtZW50ZWRFcnJvcihbdGhpcy5tZXNzYWdlXSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gKHRoaXMubWVzc2FnZSAhPSBudWxsCiAgICAgID8gIlVuaW1wbGVtZW50ZWRFcnJvcjogJG1lc3NhZ2UiCiAgICAgIDogIlVuaW1wbGVtZW50ZWRFcnJvciIpOwp9CgovKioKICogVGhlIG9wZXJhdGlvbiB3YXMgbm90IGFsbG93ZWQgYnkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIG9iamVjdC4KICoKICogVGhpcyBpcyBhIGdlbmVyaWMgZXJyb3IgdXNlZCBmb3IgYSB2YXJpZXR5IG9mIGRpZmZlcmVudCBlcnJvbmVvdXMKICogYWN0aW9ucy4gVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRlc2NyaXB0aXZlLgogKi8KY2xhc3MgU3RhdGVFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBTdGF0ZUVycm9yKHRoaXMubWVzc2FnZSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkJhZCBzdGF0ZTogJG1lc3NhZ2UiOwp9CgovKioKICogRXJyb3Igb2NjdXJyaW5nIHdoZW4gYSBjb2xsZWN0aW9uIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uCiAqCiAqIFNvbWUgbW9kaWZpY2F0aW9ucyBtYXkgYmUgYWxsb3dlZCBmb3Igc29tZSBjb2xsZWN0aW9ucywgc28gZWFjaCBjb2xsZWN0aW9uCiAqIChbSXRlcmFibGVdIG9yIHNpbWlsYXIgY29sbGVjdGlvbiBvZiB2YWx1ZXMpIHNob3VsZCBkZWNsYXJlIHdoaWNoIG9wZXJhdGlvbnMKICogYXJlIGFsbG93ZWQgZHVyaW5nIGFuIGl0ZXJhdGlvbi4KICovCmNsYXNzIENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHsKICAvKiogVGhlIG9iamVjdCB0aGF0IHdhcyBtb2RpZmllZCBpbiBhbiBpbmNvbXBhdGlibGUgd2F5LiAqLwogIGZpbmFsIE9iamVjdCBtb2RpZmllZE9iamVjdDsKCiAgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKFt0aGlzLm1vZGlmaWVkT2JqZWN0XSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChtb2RpZmllZE9iamVjdCA9PSBudWxsKSB7CiAgICAgIHJldHVybiAiQ29uY3VycmVudCBtb2RpZmljYXRpb24gZHVyaW5nIGl0ZXJhdGlvbi4iOwogICAgfQogICAgcmV0dXJuICJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uOiAiCiAgICAgICAgIiR7RXJyb3Iuc2FmZVRvU3RyaW5nKG1vZGlmaWVkT2JqZWN0KX0uIjsKICB9Cn0KCmNsYXNzIE91dE9mTWVtb3J5RXJyb3IgaW1wbGVtZW50cyBFcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IE91dE9mTWVtb3J5RXJyb3IoKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiT3V0IG9mIE1lbW9yeSI7CgogIFN0YWNrVHJhY2UgZ2V0IHN0YWNrVHJhY2UgPT4gbnVsbDsKfQoKY2xhc3MgU3RhY2tPdmVyZmxvd0Vycm9yIGltcGxlbWVudHMgRXJyb3IgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBTdGFja092ZXJmbG93RXJyb3IoKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiU3RhY2sgT3ZlcmZsb3ciOwoKICBTdGFja1RyYWNlIGdldCBzdGFja1RyYWNlID0+IG51bGw7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gd2hlbiBhIGxhemlseSBpbml0aWFsaXplZCB2YXJpYWJsZSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQuCiAqCiAqIEEgc3RhdGljL2xpYnJhcnkgdmFyaWFibGUgd2l0aCBhbiBpbml0aWFsaXplciBleHByZXNzaW9uIGlzIGluaXRpYWxpemVkCiAqIHRoZSBmaXJzdCB0aW1lIGl0IGlzIHJlYWQuIElmIGV2YWx1YXRpbmcgdGhlIGluaXRpYWxpemVyIGV4cHJlc3Npb24gY2F1c2VzCiAqIGFub3RoZXIgcmVhZCBvZiB0aGUgdmFyaWFibGUsIHRoaXMgZXJyb3IgaXMgdGhyb3duLgogKi8KY2xhc3MgQ3ljbGljSW5pdGlhbGl6YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgdmFyaWFibGVOYW1lOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBDeWNsaWNJbml0aWFsaXphdGlvbkVycm9yKFt0aGlzLnZhcmlhYmxlTmFtZV0pOwogIFN0cmluZyB0b1N0cmluZygpID0+IHZhcmlhYmxlTmFtZSA9PSBudWxsCiAgICAgID8gIlJlYWRpbmcgc3RhdGljIHZhcmlhYmxlIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb24iCiAgICAgIDogIlJlYWRpbmcgc3RhdGljIHZhcmlhYmxlICckdmFyaWFibGVOYW1lJyBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uIjsKfQqCTgBOTjwBEwEEOgNGGAM/LzMDPyw7AzJAMkgDKzNBJzIDJQNGA0URA0M0HzdFOVEyAzA0IzIjNkoxAzg2Ay4+QERFN00EDiQBBjcFTRYGLj0gBhwqBiQEAU49ATkBJgIBBEYEJTEYIisCAQRDBCoBBEMEIQEEMwQmHBUpAgEERAQkJRgcFjUVKREBBjUFRU0TBhwgHRsVAQYzBUE+BScFR0pJSwYcOB4aAQZNBiUbJh0BBiUGED09BAE9SSYBFhwYHwZFNiNJLDovBAIBBD0EKT4TPhEBSyYGOQYcGhYUGAEGRQVDRRIGPRYUFU4BBkoFREYVBUcZBUNFEgYcQSUaGBVQAQZKFwVDRRIFSUAGOT8BBjcFL0QGSicwSAYEAQZDBT4FTToFUDoGPDMhTigYRwYEAQZDBUMZRAUtPgVGEwVLGgY9PE4iJx1EBhcpG0YIEgYTBAEGMQUmBktKBAEpIRcdGRk6CEUePR4+HjQNFzQGGAQCAQRFHANMIQQ/ThM9FAEGURcFSUAFTAYyMSQyKEEBKBYdASkhFyocLQYXJwYyBAIBBD8DQEJGCQQnFhw7AR4CAQQ+BDYbTgEeAgEETwQoBkkFOEMFQRsGLS8BTgZJBThDSxwFTysFTksRBUkwBTY/KQY5QUUxAR4CAQQwA08VBBonGBwiOgIBBDwDSR4DSUIbBEUYJi0nHwIBBEUDRS8EIRgcLgIBBEMDTlAkBDI+HwE2ARYiOgY4MgQCASocHCgBJQIBLBweKQElAgEESgNLTjcEMB0cMiw8TQIBFWRhcnQ6Y29yZS9lcnJvcnMuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9leGNlcHRpb25zLmRhcnSXji8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8vIEV4Y2VwdGlvbnMgYXJlIHRocm93biBlaXRoZXIgYnkgdGhlIFZNIG9yIGZyb20gRGFydCBjb2RlLgoKLyoqCiAqIEEgbWFya2VyIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSBhbGwgY29yZSBsaWJyYXJ5IGV4Y2VwdGlvbnMuCiAqCiAqIEFuIFtFeGNlcHRpb25dIGlzIGludGVuZGVkIHRvIGNvbnZleSBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciBhYm91dCBhIGZhaWx1cmUsCiAqIHNvIHRoYXQgdGhlIGVycm9yIGNhbiBiZSBhZGRyZXNzZWQgcHJvZ3JhbW1hdGljYWxseS4gSXQgaXMgaW50ZW5kZWQgdG8gYmUKICogY2F1Z2h0LCBhbmQgaXQgc2hvdWxkIGNvbnRhaW4gdXNlZnVsIGRhdGEgZmllbGRzLgogKgogKiBDcmVhdGluZyBpbnN0YW5jZXMgb2YgW0V4Y2VwdGlvbl0gZGlyZWN0bHkgd2l0aCBbOm5ldyBFeGNlcHRpb24oIm1lc3NhZ2UiKTpdCiAqIGlzIGRpc2NvdXJhZ2VkLCBhbmQgb25seSBpbmNsdWRlZCBhcyBhIHRlbXBvcmFyeSBtZWFzdXJlIGR1cmluZyBkZXZlbG9wbWVudCwKICogdW50aWwgdGhlIGFjdHVhbCBleGNlcHRpb25zIHVzZWQgYnkgYSBsaWJyYXJ5IGFyZSBkb25lLgogKi8KYWJzdHJhY3QgY2xhc3MgRXhjZXB0aW9uIHsKICBmYWN0b3J5IEV4Y2VwdGlvbihbdmFyIG1lc3NhZ2VdKSA9PiBfRXhjZXB0aW9uKG1lc3NhZ2UpOwp9CgovKiogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBbRXhjZXB0aW9uXSB3aGljaCBjYXJyaWVzIGEgbWVzc2FnZS4gKi8KY2xhc3MgX0V4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgZmluYWwgbWVzc2FnZTsKCiAgX0V4Y2VwdGlvbihbdGhpcy5tZXNzYWdlXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChtZXNzYWdlID09IG51bGwpIHJldHVybiAiRXhjZXB0aW9uIjsKICAgIHJldHVybiAiRXhjZXB0aW9uOiAkbWVzc2FnZSI7CiAgfQp9CgovKioKICogRXhjZXB0aW9uIHRocm93biB3aGVuIGEgc3RyaW5nIG9yIHNvbWUgb3RoZXIgZGF0YSBkb2VzIG5vdCBoYXZlIGFuIGV4cGVjdGVkCiAqIGZvcm1hdCBhbmQgY2Fubm90IGJlIHBhcnNlZCBvciBwcm9jZXNzZWQuCiAqLwpjbGFzcyBGb3JtYXRFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIC8qKgogICAqIEEgbWVzc2FnZSBkZXNjcmliaW5nIHRoZSBmb3JtYXQgZXJyb3IuCiAgICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIC8qKgogICAqIFRoZSBhY3R1YWwgc291cmNlIGlucHV0IHdoaWNoIGNhdXNlZCB0aGUgZXJyb3IuCiAgICoKICAgKiBUaGlzIGlzIHVzdWFsbHkgYSBbU3RyaW5nXSwgYnV0IGNhbiBiZSBvdGhlciB0eXBlcyB0b28uCiAgICogSWYgaXQgaXMgYSBzdHJpbmcsIHBhcnRzIG9mIGl0IG1heSBiZSBpbmNsdWRlZCBpbiB0aGUgW3RvU3RyaW5nXSBtZXNzYWdlLgogICAqCiAgICogVGhlIHNvdXJjZSBpcyBgbnVsbGAgaWYgb21pdHRlZCBvciB1bmtub3duLgogICAqLwogIGZpbmFsIHNvdXJjZTsKCiAgLyoqCiAgICogVGhlIG9mZnNldCBpbiBbc291cmNlXSB3aGVyZSB0aGUgZXJyb3Igd2FzIGRldGVjdGVkLgogICAqCiAgICogQSB6ZXJvLWJhc2VkIG9mZnNldCBpbnRvIHRoZSBzb3VyY2UgdGhhdCBtYXJrcyB0aGUgZm9ybWF0IGVycm9yIGNhdXNpbmcKICAgKiB0aGlzIGV4Y2VwdGlvbiB0byBiZSBjcmVhdGVkLiBJZiBgc291cmNlYCBpcyBhIHN0cmluZywgdGhpcyBzaG91bGQgYmUgYQogICAqIHN0cmluZyBpbmRleCBpbiB0aGUgcmFuZ2UgYDAgPD0gb2Zmc2V0IDw9IHNvdXJjZS5sZW5ndGhgLgogICAqCiAgICogSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZSBbdG9TdHJpbmddIG1ldGhvZCBtYXkgcmVwcmVzZW50IHRoaXMgb2Zmc2V0IGFzCiAgICogYSBsaW5lIGFuZCBjaGFyYWN0ZXIgcG9zaXRpb24uIFRoZSBvZmZzZXQgc2hvdWxkIGJlIGluc2lkZSB0aGUgc3RyaW5nLAogICAqIG9yIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KICAgKgogICAqIE1heSBiZSBvbWl0dGVkLiBJZiBwcmVzZW50LCBbc291cmNlXSBzaG91bGQgYWxzbyBiZSBwcmVzZW50IGlmIHBvc3NpYmxlLgogICAqLwogIGZpbmFsIGludCBvZmZzZXQ7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgRm9ybWF0RXhjZXB0aW9uIHdpdGggYW4gb3B0aW9uYWwgZXJyb3IgW21lc3NhZ2VdLgogICAqCiAgICogT3B0aW9uYWxseSBhbHNvIHN1cHBseSB0aGUgYWN0dWFsIFtzb3VyY2VdIHdpdGggdGhlIGluY29ycmVjdCBmb3JtYXQsCiAgICogYW5kIHRoZSBbb2Zmc2V0XSBpbiB0aGUgZm9ybWF0IHdoZXJlIGEgcHJvYmxlbSB3YXMgZGV0ZWN0ZWQuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IEZvcm1hdEV4Y2VwdGlvbihbdGhpcy5tZXNzYWdlID0gIiIsIHRoaXMuc291cmNlLCB0aGlzLm9mZnNldF0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdCBleGNlcHRpb24uCiAgICoKICAgKiBUaGUgZGVzY3JpcHRpb24gYWx3YXlzIGNvbnRhaW5zIHRoZSBbbWVzc2FnZV0uCiAgICoKICAgKiBJZiBbc291cmNlXSBpcyBwcmVzZW50IGFuZCBpcyBhIHN0cmluZywgdGhlIGRlc2NyaXB0aW9uIHdpbGwgY29udGFpbgogICAqIChhdCBsZWFzdCBhIHBhcnQgb2YpIHRoZSBzb3VyY2UuCiAgICogSWYgW29mZnNldF0gaXMgYWxzbyBwcm92aWRlZCwgdGhlIHBhcnQgb2YgdGhlIHNvdXJjZSBpbmNsdWRlZCB3aWxsCiAgICogY29udGFpbiB0aGF0IG9mZnNldCwgYW5kIHRoZSBvZmZzZXQgd2lsbCBiZSBtYXJrZWQuCiAgICoKICAgKiBJZiB0aGUgc291cmNlIGlzIGEgc3RyaW5nIGFuZCBpdCBjb250YWlucyBhIGxpbmUgYnJlYWsgYmVmb3JlIG9mZnNldCwKICAgKiBvbmx5IHRoZSBsaW5lIGNvbnRhaW5pbmcgb2Zmc2V0IHdpbGwgYmUgaW5jbHVkZWQsIGFuZCBpdHMgbGluZSBudW1iZXIKICAgKiB3aWxsIGFsc28gYmUgcGFydCBvZiB0aGUgZGVzY3JpcHRpb24uIExpbmUgYW5kIGNoYXJhY3RlciBvZmZzZXRzIGFyZQogICAqIDEtYmFzZWQuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nIHJlcG9ydCA9ICJGb3JtYXRFeGNlcHRpb24iOwogICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCAmJiAiIiAhPSBtZXNzYWdlKSB7CiAgICAgIHJlcG9ydCA9ICIkcmVwb3J0OiAkbWVzc2FnZSI7CiAgICB9CiAgICBpbnQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7CiAgICBPYmplY3Qgb2JqZWN0U291cmNlID0gdGhpcy5zb3VyY2U7CiAgICBpZiAob2JqZWN0U291cmNlIGlzIFN0cmluZykgewogICAgICBTdHJpbmcgc291cmNlID0gb2JqZWN0U291cmNlOwogICAgICBpZiAob2Zmc2V0ICE9IG51bGwgJiYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gc291cmNlLmxlbmd0aCkpIHsKICAgICAgICBvZmZzZXQgPSBudWxsOwogICAgICB9CiAgICAgIC8vIFNvdXJjZSBpcyBzdHJpbmcgYW5kIG9mZnNldCBpcyBudWxsIG9yIHZhbGlkLgogICAgICBpZiAob2Zmc2V0ID09IG51bGwpIHsKICAgICAgICBpZiAoc291cmNlLmxlbmd0aCA+IDc4KSB7CiAgICAgICAgICBzb3VyY2UgPSBzb3VyY2Uuc3Vic3RyaW5nKDAsIDc1KSArICIuLi4iOwogICAgICAgIH0KICAgICAgICByZXR1cm4gIiRyZXBvcnRcbiRzb3VyY2UiOwogICAgICB9CiAgICAgIGludCBsaW5lTnVtID0gMTsKICAgICAgaW50IGxpbmVTdGFydCA9IDA7CiAgICAgIGJvb2wgcHJldmlvdXNDaGFyV2FzQ1IgPSBmYWxzZTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgewogICAgICAgIGludCBjaGFyID0gc291cmNlLmNvZGVVbml0QXQoaSk7CiAgICAgICAgaWYgKGNoYXIgPT0gMHgwYSkgewogICAgICAgICAgaWYgKGxpbmVTdGFydCAhPSBpIHx8ICFwcmV2aW91c0NoYXJXYXNDUikgewogICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgICB9CiAgICAgICAgICBsaW5lU3RhcnQgPSBpICsgMTsKICAgICAgICAgIHByZXZpb3VzQ2hhcldhc0NSID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIGlmIChjaGFyID09IDB4MGQpIHsKICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOwogICAgICAgICAgcHJldmlvdXNDaGFyV2FzQ1IgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobGluZU51bSA+IDEpIHsKICAgICAgICByZXBvcnQgKz0gIiAoYXQgbGluZSAkbGluZU51bSwgY2hhcmFjdGVyICR7b2Zmc2V0IC0gbGluZVN0YXJ0ICsgMX0pXG4iOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcG9ydCArPSAiIChhdCBjaGFyYWN0ZXIgJHtvZmZzZXQgKyAxfSlcbiI7CiAgICAgIH0KICAgICAgaW50IGxpbmVFbmQgPSBzb3VyY2UubGVuZ3RoOwogICAgICBmb3IgKGludCBpID0gb2Zmc2V0OyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaW50IGNoYXIgPSBzb3VyY2UuY29kZVVuaXRBdChpKTsKICAgICAgICBpZiAoY2hhciA9PSAweDBhIHx8IGNoYXIgPT0gMHgwZCkgewogICAgICAgICAgbGluZUVuZCA9IGk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaW50IGxlbmd0aCA9IGxpbmVFbmQgLSBsaW5lU3RhcnQ7CiAgICAgIGludCBzdGFydCA9IGxpbmVTdGFydDsKICAgICAgaW50IGVuZCA9IGxpbmVFbmQ7CiAgICAgIFN0cmluZyBwcmVmaXggPSAiIjsKICAgICAgU3RyaW5nIHBvc3RmaXggPSAiIjsKICAgICAgaWYgKGxlbmd0aCA+IDc4KSB7CiAgICAgICAgLy8gQ2FuJ3Qgc2hvdyBlbnRpcmUgbGluZS4gVHJ5IHRvIGFuY2hvciBhdCB0aGUgbmVhcmVzdCBlbmQsIGlmCiAgICAgICAgLy8gb25lIGlzIHdpdGhpbiByZWFjaC4KICAgICAgICBpbnQgaW5kZXggPSBvZmZzZXQgLSBsaW5lU3RhcnQ7CiAgICAgICAgaWYgKGluZGV4IDwgNzUpIHsKICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgNzU7CiAgICAgICAgICBwb3N0Zml4ID0gIi4uLiI7CiAgICAgICAgfSBlbHNlIGlmIChlbmQgLSBvZmZzZXQgPCA3NSkgewogICAgICAgICAgc3RhcnQgPSBlbmQgLSA3NTsKICAgICAgICAgIHByZWZpeCA9ICIuLi4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBOZWl0aGVyIGVuZCBpcyBuZWFyLCBqdXN0IHBpY2sgYW4gYXJlYSBhcm91bmQgdGhlIG9mZnNldC4KICAgICAgICAgIHN0YXJ0ID0gb2Zmc2V0IC0gMzY7CiAgICAgICAgICBlbmQgPSBvZmZzZXQgKyAzNjsKICAgICAgICAgIHByZWZpeCA9IHBvc3RmaXggPSAiLi4uIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgU3RyaW5nIHNsaWNlID0gc291cmNlLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgICAgaW50IG1hcmtPZmZzZXQgPSBvZmZzZXQgLSBzdGFydCArIHByZWZpeC5sZW5ndGg7CiAgICAgIHJldHVybiAiJHJlcG9ydCRwcmVmaXgkc2xpY2UkcG9zdGZpeFxuJHsiICIgKiBtYXJrT2Zmc2V0fV5cbiI7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGUgc291cmNlIGlzIG5vdCBhIHN0cmluZy4KICAgICAgaWYgKG9mZnNldCAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0ICs9ICIgKGF0IG9mZnNldCAkb2Zmc2V0KSI7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlcG9ydDsKICAgIH0KICB9Cn0KCi8vIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBkb2luZyBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggYSB6ZXJvIGRpdmlzb3IuCmNsYXNzIEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJJbnRlZ2VyRGl2aXNpb25CeVplcm9FeGNlcHRpb24iOwp9CoC6AE5OPAETAT0BBEIDUU01A1BQOwQbOwIBRigRAR4BFi0iBAIBBE8tBC0GLAYYAQY1BT1PBTEGEAEGOgVNTT8FTkwiBU4GFAEGRQVLQgYcSAEGNAU0BUomSDkFS0tKDgYWJywkBh4nIiRGFwg3HCI0CiMIFxkmKSkcNhcMHSUjFR0kCggZUA81CCM1KSwXEQoIKB0ZGhsZSCAoGhwbKBwaEUcfHSQKCDM3RQ0lHCoIFQYEAgFFPBwqOQIBGWRhcnQ6Y29yZS9leGNlcHRpb25zLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvZXhwYW5kby5kYXJ0iIgvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gW0V4cGFuZG9dIGFsbG93cyBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gb2JqZWN0cy4KICoKICogRG9lcyBub3Qgd29yayBvbiBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucyBvciBudWxsLgogKgogKiBBbiBgRXhwYW5kb2AgZG9lcyBub3QgaG9sZCBvbiB0byB0aGUgYWRkZWQgcHJvcGVydHkgdmFsdWUgYWZ0ZXIgYW4gb2JqZWN0CiAqIGJlY29tZXMgaW5hY2Nlc3NpYmxlLgogKgogKiBTaW5jZSB5b3UgY2FuIGFsd2F5cyBjcmVhdGUgYSBuZXcgbnVtYmVyIHRoYXQgaXMgaWRlbnRpY2FsIHRvIGFuIGV4aXN0aW5nCiAqIG51bWJlciwgaXQgbWVhbnMgdGhhdCBhbiBleHBhbmRvIHByb3BlcnR5IG9uIGEgbnVtYmVyIGNvdWxkIG5ldmVyIGJlCiAqIHJlbGVhc2VkLiBUbyBhdm9pZCB0aGlzLCBleHBhbmRvIHByb3BlcnRpZXMgY2Fubm90IGJlIGFkZGVkIHRvIG51bWJlcnMuCiAqIFRoZSBzYW1lIGFyZ3VtZW50IGFwcGxpZXMgdG8gc3RyaW5ncywgYm9vbGVhbnMgYW5kIG51bGwsIHdoaWNoIGFsc28gaGF2ZQogKiBsaXRlcmFscyB0aGF0IGV2YWx1YXRlIHRvIGlkZW50aWNhbCB2YWx1ZXMgd2hlbiB0aGV5IG9jY3VyIG1vcmUgdGhhbiBvbmNlLgogKgogKiBUaGVyZSBpcyBubyByZXN0cmljdGlvbiBvbiBvdGhlciBjbGFzc2VzLCBldmVuIGZvciBjb21waWxlIHRpbWUgY29uc3RhbnQKICogb2JqZWN0cy4gQmUgY2FyZWZ1bCBpZiBhZGRpbmcgZXhwYW5kbyBwcm9wZXJ0aWVzIHRvIGNvbXBpbGUgdGltZSBjb25zdGFudHMsCiAqIHNpbmNlIHRoZXkgd2lsbCBzdGF5IGFsaXZlIGZvcmV2ZXIuCiAqLwpjbGFzcyBFeHBhbmRvPFQ+IHsKICAvKioKICAgKiBUaGUgbmFtZSBvZiB0aGUgdGhpcyBbRXhwYW5kb10gYXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4gSWYKICAgKiBubyBuYW1lIHdhcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLCB0aGUgbmFtZSBpcyBbOm51bGw6XS4KICAgKi8KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbRXhwYW5kb10uIFRoZSBvcHRpb25hbCBuYW1lIGlzIG9ubHkgdXNlZCBmb3IKICAgKiBkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kIGNyZWF0aW5nIHR3byBkaWZmZXJlbnQgW0V4cGFuZG9dcyB3aXRoIHRoZQogICAqIHNhbWUgbmFtZSB5aWVsZHMgdHdvIFtFeHBhbmRvXXMgdGhhdCB3b3JrIG9uIGRpZmZlcmVudCBwcm9wZXJ0aWVzCiAgICogb2YgdGhlIG9iamVjdHMgdGhleSBhcmUgdXNlZCBvbi4KICAgKi8KICBleHRlcm5hbCBFeHBhbmRvKFtTdHJpbmcgbmFtZV0pOwoKICAvKioKICAgKiBFeHBhbmRvIHRvU3RyaW5nIG1ldGhvZCBvdmVycmlkZS4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRXhwYW5kbzokbmFtZSI7CgogIC8qKgogICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoaXMgW0V4cGFuZG9dJ3MgcHJvcGVydHkgb24gdGhlIGdpdmVuCiAgICogb2JqZWN0LiBJZiB0aGUgb2JqZWN0IGhhc24ndCBiZWVuIGV4cGFuZGVkLCB0aGUgbWV0aG9kIHJldHVybnMKICAgKiBbOm51bGw6XS4KICAgKgogICAqIFRoZSBvYmplY3QgbXVzdCBub3QgYmUgYSBudW1iZXIsIGEgc3RyaW5nLCBhIGJvb2xlYW4gb3IgbnVsbC4KICAgKi8KICBleHRlcm5hbCBUIG9wZXJhdG9yIFtdKE9iamVjdCBvYmplY3QpOwoKICAvKioKICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGlzIFtFeHBhbmRvXSdzIHByb3BlcnR5IG9uIHRoZSBnaXZlbgogICAqIG9iamVjdC4gUHJvcGVydGllcyBjYW4gZWZmZWN0aXZlbHkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBzZXR0aW5nCiAgICogdGhlaXIgdmFsdWUgdG8gbnVsbC4KICAgKgogICAqIFRoZSBvYmplY3QgbXVzdCBub3QgYmUgYSBudW1iZXIsIGEgc3RyaW5nLCBhIGJvb2xlYW4gb3IgbnVsbC4KICAgKi8KICBleHRlcm5hbCB2b2lkIG9wZXJhdG9yIFtdPShPYmplY3Qgb2JqZWN0LCBUIHZhbHVlKTsKfQpAAE5OPAETAQQ5AzgDTRkDTUhLTE4DTE8nBBMGRUIGFQEGQUdHJgYjAQYnBigBBj5EDwVDBikBBj5EGgVDBjYCARZkYXJ0OmNvcmUvZXhwYW5kby5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZXhwYW5kb19wYXRjaC5kYXJ0j2YvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBFeHBhbmRvPFQ+IHsKICBAcGF0Y2gKICBFeHBhbmRvKFtTdHJpbmcgbmFtZV0pCiAgICAgIDogbmFtZSA9IG5hbWUsCiAgICAgICAgX2RhdGEgPSBuZXcgTGlzdChfbWluU2l6ZSksCiAgICAgICAgX3VzZWQgPSAwOwoKICBzdGF0aWMgY29uc3QgX21pblNpemUgPSA4OwogIHN0YXRpYyBmaW5hbCBfZGVsZXRlZEVudHJ5ID0gbmV3IF9XZWFrUHJvcGVydHkobnVsbCwgbnVsbCk7CgogIEBwYXRjaAogIFQgb3BlcmF0b3IgW10oT2JqZWN0IG9iamVjdCkgewogICAgX2NoZWNrVHlwZShvYmplY3QpOwoKICAgIHZhciBtYXNrID0gX3NpemUgLSAxOwogICAgdmFyIGlkeCA9IG9iamVjdC5faWRlbnRpdHlIYXNoQ29kZSAmIG1hc2s7CiAgICB2YXIgd3AgPSBfZGF0YVtpZHhdOwoKICAgIHdoaWxlICh3cCAhPSBudWxsKSB7CiAgICAgIGlmIChpZGVudGljYWwod3Aua2V5LCBvYmplY3QpKSB7CiAgICAgICAgcmV0dXJuIHdwLnZhbHVlOwogICAgICB9IGVsc2UgaWYgKHdwLmtleSA9PSBudWxsKSB7CiAgICAgICAgLy8gVGhpcyBlbnRyeSBoYXMgYmVlbiBjbGVhcmVkIGJ5IHRoZSBHQy4KICAgICAgICBfZGF0YVtpZHhdID0gX2RlbGV0ZWRFbnRyeTsKICAgICAgfQogICAgICBpZHggPSAoaWR4ICsgMSkgJiBtYXNrOwogICAgICB3cCA9IF9kYXRhW2lkeF07CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAcGF0Y2gKICB2b2lkIG9wZXJhdG9yIFtdPShPYmplY3Qgb2JqZWN0LCBUIHZhbHVlKSB7CiAgICBfY2hlY2tUeXBlKG9iamVjdCk7CgogICAgdmFyIG1hc2sgPSBfc2l6ZSAtIDE7CiAgICB2YXIgaWR4ID0gb2JqZWN0Ll9pZGVudGl0eUhhc2hDb2RlICYgbWFzazsKICAgIHZhciBlbXB0eV9pZHggPSAtMTsKICAgIHZhciB3cCA9IF9kYXRhW2lkeF07CgogICAgd2hpbGUgKHdwICE9IG51bGwpIHsKICAgICAgaWYgKGlkZW50aWNhbCh3cC5rZXksIG9iamVjdCkpIHsKICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgLy8gVXBkYXRlIHRoZSBhc3NvY2lhdGVkIHZhbHVlLgogICAgICAgICAgd3AudmFsdWUgPSB2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTWFyayB0aGUgZW50cnkgYXMgZGVsZXRlZC4KICAgICAgICAgIF9kYXRhW2lkeF0gPSBfZGVsZXRlZEVudHJ5OwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSBpZiAoKGVtcHR5X2lkeCA8IDApICYmIGlkZW50aWNhbCh3cCwgX2RlbGV0ZWRFbnRyeSkpIHsKICAgICAgICBlbXB0eV9pZHggPSBpZHg7IC8vIEluc2VydCBhdCB0aGlzIGxvY2F0aW9uIGlmIG5vdCBmb3VuZC4KICAgICAgfSBlbHNlIGlmICh3cC5rZXkgPT0gbnVsbCkgewogICAgICAgIC8vIFRoaXMgZW50cnkgaGFzIGJlZW4gY2xlYXJlZCBieSB0aGUgR0MuCiAgICAgICAgX2RhdGFbaWR4XSA9IF9kZWxldGVkRW50cnk7CiAgICAgICAgaWYgKGVtcHR5X2lkeCA8IDApIHsKICAgICAgICAgIGVtcHR5X2lkeCA9IGlkeDsgLy8gSW5zZXJ0IGF0IHRoaXMgbG9jYXRpb24gaWYgbm90IGZvdW5kLgogICAgICAgIH0KICAgICAgfQogICAgICBpZHggPSAoaWR4ICsgMSkgJiBtYXNrOwogICAgICB3cCA9IF9kYXRhW2lkeF07CiAgICB9CgogICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgLy8gTm90IGVudGVyaW5nIGEgbnVsbCB2YWx1ZS4gV2UganVzdCBuZWVkZWQgdG8gbWFrZSBzdXJlIHRvIGNsZWFyIGFuCiAgICAgIC8vIGV4aXN0aW5nIHZhbHVlIGlmIGl0IGV4aXN0ZWQuCiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZW1wdHlfaWR4ID49IDApIHsKICAgICAgLy8gV2Ugd2lsbCBiZSByZXVzaW5nIHRoZSBlbXB0eSBzbG90IGJlbG93LgogICAgICBfdXNlZC0tOwogICAgICBpZHggPSBlbXB0eV9pZHg7CiAgICB9CgogICAgaWYgKF91c2VkIDwgX2xpbWl0KSB7CiAgICAgIF9kYXRhW2lkeF0gPSBuZXcgX1dlYWtQcm9wZXJ0eShvYmplY3QsIHZhbHVlKTsKICAgICAgX3VzZWQrKzsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIEdyb3cvcmVhbGxvY2F0ZSBpZiB0b28gbWFueSBzbG90cyBoYXZlIGJlZW4gdXNlZC4KICAgIF9yZWhhc2goKTsKICAgIHRoaXNbb2JqZWN0XSA9IHZhbHVlOyAvLyBSZWN1cnNpdmVseSBhZGQgdGhlIHZhbHVlLgogIH0KCiAgX3JlaGFzaCgpIHsKICAgIC8vIERldGVybWluZSB0aGUgcG9wdWxhdGlvbiBjb3VudCBvZiB0aGUgbWFwIHRvIGFsbG9jYXRlIGFuIGFwcHJvcHJpYXRlbHkKICAgIC8vIHNpemVkIG1hcCBiZWxvdy4KICAgIHZhciBjb3VudCA9IDA7CiAgICB2YXIgb2xkX2RhdGEgPSBfZGF0YTsKICAgIHZhciBsZW4gPSBvbGRfZGF0YS5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIHZhciBlbnRyeSA9IG9sZF9kYXRhW2ldOwogICAgICBpZiAoKGVudHJ5ICE9IG51bGwpICYmIChlbnRyeS5rZXkgIT0gbnVsbCkpIHsKICAgICAgICAvLyBPbmx5IGNvdW50IG5vbi1jbGVhcmVkIGVudHJpZXMuCiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQoKICAgIHZhciBuZXdfc2l6ZSA9IF9zaXplOwogICAgaWYgKGNvdW50IDw9IChuZXdfc2l6ZSA+PiAyKSkgewogICAgICBuZXdfc2l6ZSA9IG5ld19zaXplID4+IDE7CiAgICB9IGVsc2UgaWYgKGNvdW50ID4gKG5ld19zaXplID4+IDEpKSB7CiAgICAgIG5ld19zaXplID0gbmV3X3NpemUgPDwgMTsKICAgIH0KICAgIG5ld19zaXplID0gKG5ld19zaXplIDwgX21pblNpemUpID8gX21pblNpemUgOiBuZXdfc2l6ZTsKCiAgICAvLyBSZXNldCB0aGUgbWFwcGluZ3MgdG8gZW1wdHkgc28gdGhhdCB3ZSBjYW4ganVzdCBhZGQgdGhlIGV4aXN0aW5nCiAgICAvLyB2YWxpZCBlbnRyaWVzLgogICAgX2RhdGEgPSBuZXcgTGlzdChuZXdfc2l6ZSk7CiAgICBfdXNlZCA9IDA7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGRfZGF0YS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBvbGRfZGF0YVtpXTsKICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZW50cnkua2V5IGlzIG5vdCBjbGVhcmVkIGJldHdlZW4gY2hlY2tpbmcgZm9yIGl0IGFuZAogICAgICAgIC8vIGluc2VydGluZyBpdCBpbnRvIHRoZSBuZXcgdGFibGUuCiAgICAgICAgdmFyIHZhbCA9IGVudHJ5LnZhbHVlOwogICAgICAgIHZhciBrZXkgPSBlbnRyeS5rZXk7CiAgICAgICAgaWYgKGtleSAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzW2tleV0gPSB2YWw7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBzdGF0aWMgX2NoZWNrVHlwZShvYmplY3QpIHsKICAgIGlmICgob2JqZWN0ID09IG51bGwpIHx8CiAgICAgICAgKG9iamVjdCBpcyBib29sKSB8fAogICAgICAgIChvYmplY3QgaXMgbnVtKSB8fAogICAgICAgIChvYmplY3QgaXMgU3RyaW5nKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShvYmplY3QsCiAgICAgICAgICAiRXhwYW5kb3MgYXJlIG5vdCBhbGxvd2VkIG9uIHN0cmluZ3MsIG51bWJlcnMsIGJvb2xlYW5zIG9yIG51bGwiKTsKICAgIH0KICB9CgogIGdldCBfc2l6ZSA9PiBfZGF0YS5sZW5ndGg7CiAgZ2V0IF9saW1pdCA9PiAoMyAqIChfc2l6ZSB+LyA0KSk7CgogIExpc3QgX2RhdGE7CiAgaW50IF91c2VkOyAvLyBOdW1iZXIgb2YgdXNlZCAoYWN0aXZlIGFuZCBkZWxldGVkKSBzbG90cy4KfQqAmQBOTjwBHgEHEwkZFSQTAR0+AQkhGAEaLxkBGScZIzIkCB4XBgERBAEJLhgBGi8YGQEZJx0qHBEoJgoQREIjMiQdRAoIHhcGARlMJw4GARoyDxcGARo1Dw4GATkPOAQBDk4YExofJB80KxEIBgEaJCAqIAY8AUgWIA8BMB8bUCwfHRsbCggGBAEeHBwbHixNBgQBHSQBDjsCASJkYXJ0OmNvcmUtcGF0Y2gvZXhwYW5kb19wYXRjaC5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2Z1bmN0aW9uLmRhcnSJoS8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIGZ1bmN0aW9uIHR5cGVzLgogKgogKiBBIGZ1bmN0aW9uIHZhbHVlLCBvciBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHdpdGggYSAiY2FsbCIgbWV0aG9kLCBpcyBhCiAqIHN1YnR5cGUgb2YgYSBmdW5jdGlvbiB0eXBlLCBhbmQgYXMgc3VjaCwgYSBzdWJ0eXBlIG9mIFtGdW5jdGlvbl0uCiAqLwphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbiB7CiAgLyoqCiAgICogRHluYW1pY2FsbHkgY2FsbCBbZnVuY3Rpb25dIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuCiAgICoKICAgKiBBY3RzIHRoZSBzYW1lIGFzIGNhbGxpbmcgZnVuY3Rpb24gd2l0aCBwb3NpdGlvbmFsIGFyZ3VtZW50cwogICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVsZW1lbnRzIG9mIFtwb3NpdGlvbmFsQXJndW1lbnRzXSBhbmQKICAgKiBuYW1lZCBhcmd1bWVudHMgY29ycmVzcG9uZGluZyB0byB0aGUgZWxlbWVudHMgb2YgW25hbWVkQXJndW1lbnRzXS4KICAgKgogICAqIFRoaXMgaW5jbHVkZXMgZ2l2aW5nIHRoZSBzYW1lIGVycm9ycyBpZiBbZnVuY3Rpb25dIGlzbid0IGNhbGxhYmxlIG9yCiAgICogaWYgaXQgZXhwZWN0cyBkaWZmZXJlbnQgcGFyYW1ldGVycy4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgCiAgICogRnVuY3Rpb24uYXBwbHkoZm9vLCBbMSwyLDNdLCB7I2Y6IDQsICNnOiA1fSk7CiAgICogYGBgCiAgICoKICAgKiBnaXZlcyBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdCBhcwogICAqIGBgYAogICAqIGZvbygxLCAyLCAzLCBmOiA0LCBnOiA1KS4KICAgKiBgYGAKICAgKgogICAqIElmIFtwb3NpdGlvbmFsQXJndW1lbnRzXSBpcyBudWxsLCBpdCdzIGNvbnNpZGVyZWQgYW4gZW1wdHkgbGlzdC4KICAgKiBJZiBbbmFtZWRBcmd1bWVudHNdIGlzIG9taXR0ZWQgb3IgbnVsbCwgaXQgaXMgY29uc2lkZXJlZCBhbiBlbXB0eSBtYXAuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGFwcGx5KEZ1bmN0aW9uIGZ1bmN0aW9uLCBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgaGFzaCBjb2RlIHZhbHVlIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGBvcGVyYXRvcj09YC4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgYW5vdGhlciBvYmplY3QgaXMgZXF1YWwgdG8gdGhpcyBmdW5jdGlvbi4KICAgKgogICAqIFN5c3RlbS1jcmVhdGVkIGZ1bmN0aW9uIG9iamVjdHMgYXJlIG9ubHkgZXF1YWwgdG8gb3RoZXIgZnVuY3Rpb25zLgogICAqCiAgICogVHdvIGZ1bmN0aW9uIG9iamVjdHMgYXJlIGtub3duIHRvIHJlcHJlc2VudCB0aGUgc2FtZSBmdW5jdGlvbiBpZgogICAqCiAgICogLSBJdCBpcyB0aGUgc2FtZSBvYmplY3QuIFN0YXRpYyBhbmQgdG9wLWxldmVsIGZ1bmN0aW9ucyBhcmUgY29tcGlsZSB0aW1lCiAgICogICBjb25zdGFudHMgd2hlbiB1c2VkIGFzIHZhbHVlcywgc28gcmVmZXJyaW5nIHRvIHRoZSBzYW1lIGZ1bmN0aW9uIHR3aWNlCiAgICogICBhbHdheXMgZ2l2ZSB0aGUgc2FtZSBvYmplY3QsCiAgICogLSBvciBpZiB0aGV5IHJlZmVyIHRvIHRoZSBzYW1lIG1lbWJlciBtZXRob2QgZXh0cmFjdGVkIGZyb20gdGhlIHNhbWUgb2JqZWN0LgogICAqICAgRXh0cmFjdGluZyBhIG1lbWJlciBtZXRob2QgYXMgYSBmdW5jdGlvbiB2YWx1ZSB0d2ljZSBnaXZlcyBlcXVhbCwgYnV0CiAgICogICBub3QgbmVjZXNzYXJpbHkgaWRlbnRpY2FsLCBmdW5jdGlvbiB2YWx1ZXMuCiAgICoKICAgKiBGdW5jdGlvbiBleHByZXNzaW9ucyBuZXZlciBnaXZlIHJpc2UgdG8gZXF1YWwgZnVuY3Rpb24gb2JqZWN0cy4gRWFjaCB0aW1lCiAgICogYSBmdW5jdGlvbiBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCwgaXQgY3JlYXRlcyBhIG5ldyBjbG9zdXJlIHZhbHVlIHRoYXQKICAgKiBpcyBub3Qga25vd24gdG8gYmUgZXF1YWwgdG8gb3RoZXIgY2xvc3VyZXMgY3JlYXRlZCBieSB0aGUgc2FtZSBleHByZXNzaW9uLgogICAqCiAgICogQ2xhc3NlcyBpbXBsZW1lbnRpbmcgYEZ1bmN0aW9uYCBieSBoYXZpbmcgYSBgY2FsbGAgbWV0aG9kIHNob3VsZCBoYXZlIHRoZWlyCiAgICogb3duIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCBkZXBlbmRpbmcgb24gdGhlIG9iamVjdC4KICAgKi8KICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcik7Cn0KRQBOTjwBEwEEKgNKRQQaBj8FQUBIBUopBQ4JMwkFJgkfCQVGTAZFLgEGRQYUAQY8BUgFRgVOTiRSTTMFT01QBVE+BiICARdkYXJ0OmNvcmUvZnVuY3Rpb24uZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2Z1bmN0aW9uX3BhdGNoLmRhcnSFOS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIEZ1bmN0aW9uIHsKICAvLyBUT0RPKHJlZ2lzKTogUGFzcyB0eXBlIGFyZ3VtZW50cyB0byBnZW5lcmljIGZ1bmN0aW9ucy4gV2FpdCBmb3IgQVBJIHNwZWMuCiAgc3RhdGljIF9hcHBseShMaXN0IGFyZ3VtZW50cywgTGlzdCBuYW1lcykgbmF0aXZlICJGdW5jdGlvbl9hcHBseSI7CgogIEBwYXRjaAogIHN0YXRpYyBhcHBseShGdW5jdGlvbiBmdW5jdGlvbiwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKSB7CiAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IDEgKyAvLyBGdW5jdGlvbiBpcyBmaXJzdCBpbXBsaWNpdCBhcmd1bWVudC4KICAgICAgICAocG9zaXRpb25hbEFyZ3VtZW50cyAhPSBudWxsID8gcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGggOiAwKTsKICAgIGludCBudW1OYW1lZEFyZ3VtZW50cyA9IG5hbWVkQXJndW1lbnRzICE9IG51bGwgPyBuYW1lZEFyZ3VtZW50cy5sZW5ndGggOiAwOwogICAgaW50IG51bUFyZ3VtZW50cyA9IG51bVBvc2l0aW9uYWxBcmd1bWVudHMgKyBudW1OYW1lZEFyZ3VtZW50czsKICAgIExpc3QgYXJndW1lbnRzID0gbmV3IExpc3QobnVtQXJndW1lbnRzKTsKICAgIGFyZ3VtZW50c1swXSA9IGZ1bmN0aW9uOwogICAgYXJndW1lbnRzLnNldFJhbmdlKDEsIG51bVBvc2l0aW9uYWxBcmd1bWVudHMsIHBvc2l0aW9uYWxBcmd1bWVudHMpOwogICAgTGlzdCBuYW1lcyA9IG5ldyBMaXN0KG51bU5hbWVkQXJndW1lbnRzKTsKICAgIGludCBhcmd1bWVudEluZGV4ID0gbnVtUG9zaXRpb25hbEFyZ3VtZW50czsKICAgIGludCBuYW1lSW5kZXggPSAwOwogICAgaWYgKG51bU5hbWVkQXJndW1lbnRzID4gMCkgewogICAgICBuYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChuYW1lLCB2YWx1ZSkgewogICAgICAgIGFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdID0gdmFsdWU7CiAgICAgICAgbmFtZXNbbmFtZUluZGV4KytdID0gaW50ZXJuYWwuU3ltYm9sLmdldE5hbWUobmFtZSk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9hcHBseShhcmd1bWVudHMsIG5hbWVzKTsKICB9Cn0KIwBOTjwBHgEHEU9FAQk8L01IUEMtHUguMBchLSw8CgYlBAIBI2RhcnQ6Y29yZS1wYXRjaC9mdW5jdGlvbl9wYXRjaC5kYXJ0KW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2ludC5kYXJ0risvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gaW50ZWdlciBudW1iZXIuCiAqCiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBpbnRgIGlzIDY0LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXJzCiAqIHdpdGggb3BlcmF0aW9ucyB0aGF0IHdyYXAgdG8gdGhhdCByYW5nZSBvbiBvdmVyZmxvdy4KICoKICogKipOb3RlOioqIFdoZW4gY29tcGlsaW5nIHRvIEphdmFTY3JpcHQsIGludGVnZXJzIGFyZSByZXN0cmljdGVkIHRvIHZhbHVlcwogKiB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5IGJ5IGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWVzLgogKiBUaGUgYXZhaWxhYmxlIGludGVnZXIgdmFsdWVzIGluY2x1ZGUgYWxsIGludGVnZXJzIGJldHdlZW4gLTJeNTMgYW5kIDJeNTMsCiAqIGFuZCBzb21lIGludGVnZXJzIHdpdGggbGFyZ2VyIG1hZ25pdHVkZS4gVGhhdCBpbmNsdWRlcyBzb21lIGludGVnZXJzIGxhcmdlcgogKiB0aGFuIDJeNjMuCiAqIFRoZSBiZWhhdmlvciBvZiB0aGUgb3BlcmF0b3JzIGFuZCBtZXRob2RzIGluIHRoZSBbaW50XQogKiBjbGFzcyB0aGVyZWZvcmUgc29tZXRpbWVzIGRpZmZlcnMgYmV0d2VlbiB0aGUgRGFydCBWTSBhbmQgRGFydCBjb2RlCiAqIGNvbXBpbGVkIHRvIEphdmFTY3JpcHQuIEZvciBleGFtcGxlLCB0aGUgYml0d2lzZSBvcGVyYXRvcnMgdHJ1bmNhdGUgdGhlaXIKICogb3BlcmFuZHMgdG8gMzItYml0IGludGVnZXJzIHdoZW4gY29tcGlsZWQgdG8gSmF2YVNjcmlwdC4KICoKICogQ2xhc3NlcyBjYW5ub3QgZXh0ZW5kLCBpbXBsZW1lbnQsIG9yIG1peCBpbiBgaW50YC4KICovCmFic3RyYWN0IGNsYXNzIGludCBleHRlbmRzIG51bSB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQgZGVjbGFyYXRpb24gW25hbWVdLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyB3b3VsZCBiZSByZXR1cm5lZCBieToKICAgKiBgYGAKICAgKiBpbnQudHJ5UGFyc2UoY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudChuYW1lLCBkZWZhdWx0VmFsdWU6ICIiKSkKICAgKiAgICAgPz8gZGVmYXVsdFZhbHVlCiAgICogYGBgCiAgICogRXhhbXBsZToKICAgKiBgYGAKICAgKiBjb25zdCBpbnQuZnJvbUVudmlyb25tZW50KCJkZWZhdWx0UG9ydCIsIGRlZmF1bHRWYWx1ZTogODApCiAgICogYGBgCiAgICovCiAgLy8gVGhlIC5mcm9tRW52aXJvbm1lbnQoKSBjb25zdHJ1Y3RvcnMgYXJlIHNwZWNpYWwgaW4gdGhhdCB3ZSBkbyBub3Qgd2FudAogIC8vIHVzZXJzIHRvIGNhbGwgdGhlbSB1c2luZyAibmV3Ii4gV2UgcHJvaGliaXQgdGhhdCBieSBnaXZpbmcgdGhlbSBib2RpZXMKICAvLyB0aGF0IHRocm93LCBldmVuIHRob3VnaCBjb25zdCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgYm9kaWVzLgogIC8vIERpc2FibGUgdGhvc2Ugc3RhdGljIGVycm9ycy4KICAvL2lnbm9yZTogY29uc3RfY29uc3RydWN0b3Jfd2l0aF9ib2R5CiAgLy9pZ25vcmU6IGNvbnN0X2ZhY3RvcnkKICBleHRlcm5hbCBjb25zdCBmYWN0b3J5IGludC5mcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUsIHtpbnQgZGVmYXVsdFZhbHVlfSk7CgogIC8qKgogICAqIEJpdC13aXNlIGFuZCBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIG9ubHkgdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbgogICAqIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBPZiBib3RoIG9wZXJhbmRzIGFyZSBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlCiAgICogdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUuCiAgICovCiAgaW50IG9wZXJhdG9yICYoaW50IG90aGVyKTsKCiAgLyoqCiAgICogQml0LXdpc2Ugb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIGVpdGhlcgogICAqIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgYm90aCBvcGVyYW5kcyBhcmUgbm9uLW5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZSwKICAgKiBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KICAgKi8KICBpbnQgb3BlcmF0b3IgfChpbnQgb3RoZXIpOwoKICAvKioKICAgKiBCaXQtd2lzZSBleGNsdXNpdmUtb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIG9uZSwKICAgKiBidXQgbm90IGJvdGgsIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgdGhlIG9wZXJhbmRzIGhhdmUgdGhlIHNhbWUgc2lnbiwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCiAgICovCiAgaW50IG9wZXJhdG9yIF4oaW50IG90aGVyKTsKCiAgLyoqCiAgICogVGhlIGJpdC13aXNlIG5lZ2F0ZSBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGB0aGlzYCBhcyBhIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQgaW50ZWdlciwKICAgKiB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIG9wcG9zaXRlIGJpdHMgc2V0LgogICAqCiAgICogVGhpcyBtYXBzIGFueSBpbnRlZ2VyIGB4YCB0byBgLXggLSAxYC4KICAgKi8KICBpbnQgb3BlcmF0b3IgfigpOwoKICAvKioKICAgKiBTaGlmdCB0aGUgYml0cyBvZiB0aGlzIGludGVnZXIgdG8gdGhlIGxlZnQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSBsZWZ0IG1ha2VzIHRoZSBudW1iZXIgbGFyZ2VyLCBlZmZlY3RpdmVseSBtdWx0aXBseWluZwogICAqIHRoZSBudW1iZXIgYnkgYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBUaGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0LiBJdCBtYXkgYmUgcmVsZXZhbnQgdG8KICAgKiBsaW1pdCBpbnRlcm1lZGlhdGUgdmFsdWVzIGJ5IHVzaW5nIHRoZSAiYW5kIiBvcGVyYXRvciB3aXRoIGEgc3VpdGFibGUKICAgKiBtYXNrLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBpbnQgb3BlcmF0b3IgPDwoaW50IHNoaWZ0QW1vdW50KTsKCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSByaWdodCBieSBbc2hpZnRBbW91bnRdLgogICAqCiAgICogU2hpZnRpbmcgdG8gdGhlIHJpZ2h0IG1ha2VzIHRoZSBudW1iZXIgc21hbGxlciBhbmQgZHJvcHMgdGhlIGxlYXN0CiAgICogc2lnbmlmaWNhbnQgYml0cywgZWZmZWN0aXZlbHkgZG9pbmcgYW4gaW50ZWdlciBkaXZpc2lvbiBieQogICAqYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBbc2hpZnRBbW91bnRdIGlzIG5lZ2F0aXZlLgogICAqLwogIGludCBvcGVyYXRvciA+PihpbnQgc2hpZnRBbW91bnQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgaW50ZWdlciB0byB0aGUgcG93ZXIgb2YgW2V4cG9uZW50XSBtb2R1bG8gW21vZHVsdXNdLgogICAqCiAgICogVGhlIFtleHBvbmVudF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIFttb2R1bHVzXSBtdXN0IGJlCiAgICogcG9zaXRpdmUuCiAgICovCiAgaW50IG1vZFBvdyhpbnQgZXhwb25lbnQsIGludCBtb2R1bHVzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHRoaXMgaW50ZWdlcgogICAqIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW21vZHVsdXNdIG11c3QgYmUgcG9zaXRpdmUuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBubyBtb2R1bGFyIGludmVyc2UgZXhpc3RzLgogICAqLwogIGludCBtb2RJbnZlcnNlKGludCBtb2R1bHVzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgdGhpcyBpbnRlZ2VyIGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgZWl0aGVyIG51bWJlciBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB0aGUgbnVtZXJpY2FsbHkgZ3JlYXRlc3QKICAgKiBpbnRlZ2VyIGRpdmlkaW5nIGJvdGggYHRoaXNgIGFuZCBgb3RoZXJgLgogICAqCiAgICogVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIGlzIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciwKICAgKiBzbyBgeC5nY2QoeSlgIGlzICBhbHdheXMgdGhlIHNhbWUgYXMgYHkuZ2NkKHgpYC4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIGB4LmdjZCh4KWAgaXMgYHguYWJzKClgLgogICAqCiAgICogSWYgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAgaXMgemVybywgdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCiAgICovCiAgaW50IGdjZChpbnQgb3RoZXIpOwoKICAvKiogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgaW50ZWdlciBpcyBldmVuLiAqLwogIGJvb2wgZ2V0IGlzRXZlbjsKCiAgLyoqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIGludGVnZXIgaXMgb2RkLiAqLwogIGJvb2wgZ2V0IGlzT2RkOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHN0b3JlIHRoaXMgaW50ZWdlci4KICAgKgogICAqIFRoZSBudW1iZXIgb2YgYml0cyBleGNsdWRlcyB0aGUgc2lnbiBiaXQsIHdoaWNoIGdpdmVzIHRoZSBuYXR1cmFsIGxlbmd0aAogICAqIGZvciBub24tbmVnYXRpdmUgKHVuc2lnbmVkKSB2YWx1ZXMuICBOZWdhdGl2ZSB2YWx1ZXMgYXJlIGNvbXBsZW1lbnRlZCB0bwogICAqIHJldHVybiB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBiaXQgdGhhdCBkaWZmZXJzIGZyb20gdGhlIHNpZ24gYml0LgogICAqCiAgICogVG8gZmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHN0b3JlIHRoZSB2YWx1ZSBhcyBhIHNpZ25lZCB2YWx1ZSwKICAgKiBhZGQgb25lLCBpLmUuIHVzZSBgeC5iaXRMZW5ndGggKyAxYC4KICAgKiBgYGAKICAgKiB4LmJpdExlbmd0aCA9PSAoLXgtMSkuYml0TGVuZ3RoCiAgICoKICAgKiAzLmJpdExlbmd0aCA9PSAyOyAgICAgLy8gMDAwMDAwMTEKICAgKiAyLmJpdExlbmd0aCA9PSAyOyAgICAgLy8gMDAwMDAwMTAKICAgKiAxLmJpdExlbmd0aCA9PSAxOyAgICAgLy8gMDAwMDAwMDEKICAgKiAwLmJpdExlbmd0aCA9PSAwOyAgICAgLy8gMDAwMDAwMDAKICAgKiAoLTEpLmJpdExlbmd0aCA9PSAwOyAgLy8gMTExMTExMTEKICAgKiAoLTIpLmJpdExlbmd0aCA9PSAxOyAgLy8gMTExMTExMTAKICAgKiAoLTMpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDEKICAgKiAoLTQpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDAKICAgKiBgYGAKICAgKi8KICBpbnQgZ2V0IGJpdExlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgW3dpZHRoXSBiaXRzIG9mIHRoaXMgaW50ZWdlciBhcyBhCiAgICogbm9uLW5lZ2F0aXZlIG51bWJlciAoaS5lLiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbikuICBUaGUgcmV0dXJuZWQgdmFsdWUgaGFzCiAgICogemVyb3MgaW4gYWxsIGJpdCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKiBgYGAKICAgKiAoLTEpLnRvVW5zaWduZWQoNSkgPT0gMzEgICAvLyAxMTExMTExMSAgLT4gIDAwMDExMTExCiAgICogYGBgCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBxdWFudGl0eToKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1Vuc2lnbmVkKDgpOwogICAqIGBgYAogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAyNTVgIGFuZCB0aGVuIHdyYXAgYXJvdW5kIHRvIGAwYC4KICAgKgogICAqIElmIHRoZSBpbnB1dCBmaXRzIGluIFt3aWR0aF0gYml0cyB3aXRob3V0IHRydW5jYXRpb24sIHRoZSByZXN1bHQgaXMgdGhlCiAgICogc2FtZSBhcyB0aGUgaW5wdXQuICBUaGUgbWluaW11bSB3aWR0aCBuZWVkZWQgdG8gYXZvaWQgdHJ1bmNhdGlvbiBvZiBgeGAgaXMKICAgKiBnaXZlbiBieSBgeC5iaXRMZW5ndGhgLCBpLmUuCiAgICogYGBgCiAgICogeCA9PSB4LnRvVW5zaWduZWQoeC5iaXRMZW5ndGgpOwogICAqIGBgYAogICAqLwogIGludCB0b1Vuc2lnbmVkKGludCB3aWR0aCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IFt3aWR0aF0gYml0cyBvZiB0aGlzIGludGVnZXIsIGV4dGVuZGluZyB0aGUKICAgKiBoaWdoZXN0IHJldGFpbmVkIGJpdCB0byB0aGUgc2lnbi4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdHJ1bmNhdGluZyB0aGUgdmFsdWUKICAgKiB0byBmaXQgaW4gW3dpZHRoXSBiaXRzIHVzaW5nIGFuIHNpZ25lZCAyLXMgY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4gIFRoZQogICAqIHJldHVybmVkIHZhbHVlIGhhcyB0aGUgc2FtZSBiaXQgdmFsdWUgaW4gYWxsIHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogYGBgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYtLXNpZ24gYml0LVYKICAgKiAxNi50b1NpZ25lZCg1KSA9PSAtMTYgICAvLyAgMDAwMTAwMDAgLT4gMTExMTAwMDAKICAgKiAyMzkudG9TaWduZWQoNSkgPT0gMTUgICAvLyAgMTExMDExMTEgLT4gMDAwMDExMTEKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXgogICAqIGBgYAogICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIGFyaXRobWV0aWMgZnJvbSBsb3cgbGV2ZWwgbGFuZ3VhZ2VzLgogICAqIEZvciBleGFtcGxlLCB0byBpbmNyZW1lbnQgYW4gOCBiaXQgc2lnbmVkIHF1YW50aXR5OgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvU2lnbmVkKDgpOwogICAqIGBgYAogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAxMjdgLCB3cmFwIHRvIGAtMTI4YCBhbmQgY291bnQgYmFjayB1cCB0bwogICAqIGAxMjdgLgogICAqCiAgICogSWYgdGhlIGlucHV0IHZhbHVlIGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcwogICAqIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YAogICAqIGlzIGB4LmJpdExlbmd0aCArIDFgLCBpLmUuCiAgICogYGBgCiAgICogeCA9PSB4LnRvU2lnbmVkKHguYml0TGVuZ3RoICsgMSk7CiAgICogYGBgCiAgICovCiAgaW50IHRvU2lnbmVkKGludCB3aWR0aCk7CgogIC8qKgogICAqIFJldHVybiB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJlc3VsdCBvZiBuZWdhdGluZyBhbiBpbnRlZ2VyIGFsd2F5cyBoYXMgdGhlIG9wcG9zaXRlIHNpZ24sIGV4Y2VwdAogICAqIGZvciB6ZXJvLCB3aGljaCBpcyBpdHMgb3duIG5lZ2F0aW9uLgogICAqLwogIGludCBvcGVyYXRvciAtKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgaW50ZWdlci4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgYHggPCAwID8gLXggOiB4YC4KICAgKi8KICBpbnQgYWJzKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNpZ24gb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogUmV0dXJucyAwIGZvciB6ZXJvLCAtMSBmb3IgdmFsdWVzIGxlc3MgdGhhbiB6ZXJvIGFuZAogICAqICsxIGZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8uCiAgICovCiAgaW50IGdldCBzaWduOwoKICAvKiogUmV0dXJucyBgdGhpc2AuICovCiAgaW50IHJvdW5kKCk7CgogIC8qKiBSZXR1cm5zIGB0aGlzYC4gKi8KICBpbnQgZmxvb3IoKTsKCiAgLyoqIFJldHVybnMgYHRoaXNgLiAqLwogIGludCBjZWlsKCk7CgogIC8qKiBSZXR1cm5zIGB0aGlzYC4gKi8KICBpbnQgdHJ1bmNhdGUoKTsKCiAgLyoqIFJldHVybnMgYHRoaXMudG9Eb3VibGUoKWAuICovCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKTsKCiAgLyoqIFJldHVybnMgYHRoaXMudG9Eb3VibGUoKWAuICovCiAgZG91YmxlIGZsb29yVG9Eb3VibGUoKTsKCiAgLyoqIFJldHVybnMgYHRoaXMudG9Eb3VibGUoKWAuICovCiAgZG91YmxlIGNlaWxUb0RvdWJsZSgpOwoKICAvKiogUmV0dXJucyBgdGhpcy50b0RvdWJsZSgpYC4gKi8KICBkb3VibGUgdHJ1bmNhdGVUb0RvdWJsZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgaW50ZWdlci4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgcGFyc2FibGUgYnkgW3BhcnNlXS4KICAgKiBGb3IgYW55IGBpbnRgIGBpYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYGkgPT0gaW50LnBhcnNlKGkudG9TdHJpbmcoKSlgLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwoKICAvKioKICAgKiBDb252ZXJ0cyBbdGhpc10gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIGdpdmVuIFtyYWRpeF0uCiAgICoKICAgKiBJbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBsb3dlci1jYXNlIGxldHRlcnMgYXJlIHVzZWQgZm9yIGRpZ2l0cyBhYm92ZQogICAqICc5Jywgd2l0aCAnYScgYmVpbmcgMTAgYW4gJ3onIGJlaW5nIDM1LgogICAqCiAgICogVGhlIFtyYWRpeF0gYXJndW1lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAyIHRvIDM2LgogICAqLwogIFN0cmluZyB0b1JhZGl4U3RyaW5nKGludCByYWRpeCk7CgogIC8qKgogICAqIFBhcnNlIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIHZhbHVlLgogICAqCiAgICogVGhlIFtzb3VyY2VdIG11c3QgYmUgYSBub24tZW1wdHkgc2VxdWVuY2Ugb2YgYmFzZS1bcmFkaXhdIGRpZ2l0cywKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYSBtaW51cyBvciBwbHVzIHNpZ24gKCctJyBvciAnKycpLgogICAqIEl0IG11c3Qgbm90IGJlIGBudWxsYC4KICAgKgogICAqIFRoZSBbcmFkaXhdIG11c3QgYmUgaW4gdGhlIHJhbmdlIDIuLjM2LiBUaGUgZGlnaXRzIHVzZWQgYXJlCiAgICogZmlyc3QgdGhlIGRlY2ltYWwgZGlnaXRzIDAuLjksIGFuZCB0aGVuIHRoZSBsZXR0ZXJzICdhJy4uJ3onIHdpdGgKICAgKiB2YWx1ZXMgMTAgdGhyb3VnaCAzNS4gQWxzbyBhY2NlcHRzIHVwcGVyLWNhc2UgbGV0dGVycyB3aXRoIHRoZSBzYW1lCiAgICogdmFsdWVzIGFzIHRoZSBsb3dlci1jYXNlIG9uZXMuCiAgICoKICAgKiBJZiBubyBbcmFkaXhdIGlzIGdpdmVuIHRoZW4gaXQgZGVmYXVsdHMgdG8gMTAuIEluIHRoaXMgY2FzZSwgdGhlIFtzb3VyY2VdCiAgICogZGlnaXRzIG1heSBhbHNvIHN0YXJ0IHdpdGggYDB4YCwgaW4gd2hpY2ggY2FzZSB0aGUgbnVtYmVyIGlzIGludGVycHJldGVkCiAgICogYXMgYSBoZXhhZGVjaW1hbCBpbnRlZ2VyIGxpdGVyYWwsCiAgICogV2hlbiBgaW50YCBpcyBpbXBsZW1lbnRlZCBieSA2NC1iaXQgc2lnbmVkIGludGVnZXJzLAogICAqIGhleGFkZWNpbWFsIGludGVnZXIgbGl0ZXJhbHMgbWF5IHJlcHJlc2VudCB2YWx1ZXMgbGFyZ2VyIHRoYW4KICAgKiAyPHN1cD42Mzwvc3VwPiwgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgcGFyc2VkIGFzIGlmIGl0IGlzIGFuCiAgICogKnVuc2lnbmVkKiBudW1iZXIsIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIHRoZSBjb3JyZXNwb25kaW5nCiAgICogc2lnbmVkIGludGVnZXIgdmFsdWUuCiAgICoKICAgKiBGb3IgYW55IGludCBgbmAgYW5kIHZhbGlkIHJhZGl4IGByYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYG4gPT0gaW50LnBhcnNlKG4udG9SYWRpeFN0cmluZyhyKSwgcmFkaXg6IHIpYC4KICAgKgogICAqIElmIHRoZSBbc291cmNlXSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGludGVnZXIgbGl0ZXJhbCwKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIGJ5IGEgc2lnbiwgYSBbRm9ybWF0RXhjZXB0aW9uXSBpcyB0aHJvd24KICAgKiAodW5sZXNzIHRoZSBkZXByZWNhdGVkIFtvbkVycm9yXSBwYXJhbWV0ZXIgaXMgdXNlZCwgc2VlIGJlbG93KS4KICAgKgogICAqIEluc3RlYWQgb2YgdGhyb3dpbmcgYW5kIGltbWVkaWF0ZWx5IGNhdGNoaW5nIHRoZSBbRm9ybWF0RXhjZXB0aW9uXSwKICAgKiBpbnN0ZWFkIHVzZSBbdHJ5UGFyc2VdIHRvIGhhbmRsZSBhIHBhcnNpbmcgZXJyb3IuCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogdmFyIHZhbHVlID0gaW50LnRyeVBhcnNlKHRleHQpOwogICAqIGlmICh2YWx1ZSA9PSBudWxsKSAuLi4gaGFuZGxlIHRoZSBwcm9ibGVtCiAgICogYGBgCiAgICoKICAgKiBUaGUgW29uRXJyb3JdIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuCiAgICogSW5zdGVhZCBvZiBgaW50LnBhcnNlKHN0cmluZywgb25FcnJvcjogKHN0cmluZykgPT4gLi4uKWAsCiAgICogeW91IHNob3VsZCB1c2UgYGludC50cnlQYXJzZShzdHJpbmcpID8/ICguLi4pYC4KICAgKgogICAqIFdoZW4gdGhlIHNvdXJjZSBzdHJpbmcgaXMgbm90IHZhbGlkIGFuZCBbb25FcnJvcl0gaXMgcHJvdmlkZWQsCiAgICogd2hlbmV2ZXIgYSBbRm9ybWF0RXhjZXB0aW9uXSB3b3VsZCBiZSB0aHJvd24sCiAgICogW29uRXJyb3JdIGlzIGluc3RlYWQgY2FsbGVkIHdpdGggW3NvdXJjZV0gYXMgYXJndW1lbnQsCiAgICogYW5kIHRoZSByZXN1bHQgb2YgdGhhdCBjYWxsIGlzIHJldHVybmVkIGJ5IFtwYXJzZV0uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGludCBwYXJzZShTdHJpbmcgc291cmNlLAogICAgICB7aW50IHJhZGl4LCBAZGVwcmVjYXRlZCBpbnQgb25FcnJvcihTdHJpbmcgc291cmNlKX0pOwoKICAvKioKICAgKiBQYXJzZSBbc291cmNlXSBhcyBhLCBwb3NzaWJseSBzaWduZWQsIGludGVnZXIgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KICAgKgogICAqIExpa2UgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgIHdoZXJlIGEKICAgKiBzaW1pbGFyIGNhbGwgdG8gW3BhcnNlXSB3b3VsZCB0aHJvdyBhIFtGb3JtYXRFeGNlcHRpb25dLAogICAqIGFuZCB0aGUgW3NvdXJjZV0gbXVzdCBzdGlsbCBub3QgYmUgYG51bGxgLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBpbnQgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSwge2ludCByYWRpeH0pOwp9CoFlAE5OPAETAQQWA0s4A01OTU8OOkdNPAM2BCEGTAU1CUgZCQ4JQAkGTExQIigaTwEGHAVMTR0FRiEGHQEGGwVMTxsFRCcGHQEGJQVMTSkFRScGHQEGIwVGOAUsBhQBBkIFSykFSEsLBTIGJAEGQwVIQBoFMgYkAQZHBT8PBikBBkAXBSUFMgYfAQZGBUovBT42BTMFQgYWATsTAToSAQZIBU5OTgVNKgklBScnJycnJycnCQYVAQZFUTUJOglRMgkgCUYFTVAiCSUJBh0BBk9RUFEFCTI2NjIJUTkJHglODAVPUSAJJwkGGwEGMAVMKgYUAQYxBUYGDQEGJwU6JgYQARkPARkPARkOARkSASQaASQaASQZASQdAQY2BTEuJQYVAQZGBVAtBUMGIwEGUQVHQRwFQUdJJAVPTic6Q0ZFGwVANQVGQkUFSTcODSUvCQVAPzUFRDM8OQYrPAEGUQVDPjAGPAIBEmRhcnQ6Y29yZS9pbnQuZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2ludGVnZXJzX3BhdGNoLmRhcnSsIy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKLy8vIFZNIGltcGxlbWVudGF0aW9uIG9mIGludC4KQHBhdGNoCmNsYXNzIGludCB7CiAgQHBhdGNoCiAgY29uc3QgZmFjdG9yeSBpbnQuZnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lLCB7aW50IGRlZmF1bHRWYWx1ZX0pCiAgICAgIG5hdGl2ZSAiSW50ZWdlcl9mcm9tRW52aXJvbm1lbnQiOwoKICBpbnQgX2JpdEFuZEZyb21TbWkoX1NtaSBvdGhlcik7CiAgaW50IF9iaXRBbmRGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGludCBfYml0T3JGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGludCBfYml0WG9yRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBpbnQgX3NockZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgaW50IF9zaGxGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwoKICBzdGF0aWMgaW50IF90cnlQYXJzZVNtaShTdHJpbmcgc3RyLCBpbnQgZmlyc3QsIGludCBsYXN0KSB7CiAgICBhc3NlcnQoZmlyc3QgPD0gbGFzdCk7CiAgICB2YXIgaXggPSBmaXJzdDsKICAgIHZhciBzaWduID0gMTsKICAgIHZhciBjID0gc3RyLmNvZGVVbml0QXQoaXgpOwogICAgLy8gQ2hlY2sgZm9yIGxlYWRpbmcgJysnIG9yICctJy4KICAgIGlmICgoYyA9PSAweDJiKSB8fCAoYyA9PSAweDJkKSkgewogICAgICBpeCsrOwogICAgICBzaWduID0gMHgyYyAtIGM7IC8vIC0xIGZvciAnLScsICsxIGZvciAnKycuCiAgICAgIGlmIChpeCA+IGxhc3QpIHsKICAgICAgICByZXR1cm4gbnVsbDsgLy8gRW1wdHkuCiAgICAgIH0KICAgIH0KICAgIHZhciBzbWlMaW1pdCA9IGlzNjRCaXQgPyAxOCA6IDk7CiAgICBpZiAoKGxhc3QgLSBpeCkgPj0gc21pTGltaXQpIHsKICAgICAgcmV0dXJuIG51bGw7IC8vIE1heSBub3QgZml0IGludG8gYSBTbWkuCiAgICB9CiAgICB2YXIgcmVzdWx0ID0gMDsKICAgIGZvciAoaW50IGkgPSBpeDsgaSA8PSBsYXN0OyBpKyspIHsKICAgICAgdmFyIGMgPSAweDMwIF4gc3RyLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmICg5IDwgYykgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJlc3VsdCA9IDEwICogcmVzdWx0ICsgYzsKICAgIH0KICAgIHJldHVybiBzaWduICogcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGludCBwYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4LCBpbnQgb25FcnJvcihTdHJpbmcgc291cmNlKX0pIHsKICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBzb3VyY2UgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgaWYgKHNvdXJjZS5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCAwLCByYWRpeCwgbnVsbCk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gbnVsbCB8fCByYWRpeCA9PSAxMCkgewogICAgICAvLyBUcnkgcGFyc2luZyBpbW1lZGlhdGVseSwgd2l0aG91dCB0cmltbWluZyB3aGl0ZXNwYWNlLgogICAgICBpbnQgcmVzdWx0ID0gX3RyeVBhcnNlU21pKHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aCAtIDEpOwogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDM2KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJSYWRpeCAkcmFkaXggbm90IGluIHJhbmdlIDIuLjM2Iik7CiAgICB9CiAgICAvLyBTcGxpdCBoZXJlIHNvIGltcHJvdmUgb2RkcyBvZiBwYXJzZSBiZWluZyBpbmxpbmVkIGFuZCB0aGUgY2hlY2tzIG9taXR0ZWQuCiAgICByZXR1cm4gX3BhcnNlKHNvdXJjZSwgcmFkaXgsIG9uRXJyb3IpOwogIH0KCiAgc3RhdGljIGludCBfcGFyc2UoX1N0cmluZ0Jhc2Ugc291cmNlLCBpbnQgcmFkaXgsIG9uRXJyb3IpIHsKICAgIGludCBlbmQgPSBzb3VyY2UuX2xhc3ROb25XaGl0ZXNwYWNlKCkgKyAxOwogICAgaWYgKGVuZCA9PSAwKSB7CiAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBzb3VyY2UubGVuZ3RoLCByYWRpeCwgbnVsbCk7CiAgICB9CiAgICBpbnQgc3RhcnQgPSBzb3VyY2UuX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpOwoKICAgIGludCBmaXJzdCA9IHNvdXJjZS5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgIGludCBzaWduID0gMTsKICAgIGlmIChmaXJzdCA9PSAweDJiIC8qICsgKi8gfHwgZmlyc3QgPT0gMHgyZCAvKiAtICovKSB7CiAgICAgIHNpZ24gPSAweDJjIC0gZmlyc3Q7IC8vIC0xIGlmICctJywgKzEgaWYgJysnLgogICAgICBzdGFydCsrOwogICAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIGVuZCwgcmFkaXgsIG51bGwpOwogICAgICB9CiAgICAgIGZpcnN0ID0gc291cmNlLmNvZGVVbml0QXQoc3RhcnQpOwogICAgfQogICAgaWYgKHJhZGl4ID09IG51bGwpIHsKICAgICAgLy8gY2hlY2sgZm9yIDB4IHByZWZpeC4KICAgICAgaW50IGluZGV4ID0gc3RhcnQ7CiAgICAgIGlmIChmaXJzdCA9PSAweDMwIC8qIDAgKi8pIHsKICAgICAgICBpbmRleCsrOwogICAgICAgIGlmIChpbmRleCA9PSBlbmQpIHJldHVybiAwOwogICAgICAgIGZpcnN0ID0gc291cmNlLmNvZGVVbml0QXQoaW5kZXgpOwogICAgICAgIGlmICgoZmlyc3QgfCAweDIwKSA9PSAweDc4IC8qIHggKi8pIHsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICBpZiAoaW5kZXggPT0gZW5kKSB7CiAgICAgICAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBpbmRleCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gX3BhcnNlUmFkaXgoc291cmNlLCAxNiwgaW5kZXgsIGVuZCwgc2lnbiwgc2lnbiA+IDAsIG9uRXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICByYWRpeCA9IDEwOwogICAgfQogICAgcmV0dXJuIF9wYXJzZVJhZGl4KHNvdXJjZSwgcmFkaXgsIHN0YXJ0LCBlbmQsIHNpZ24sIGZhbHNlLCBvbkVycm9yKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBpbnQgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSwge2ludCByYWRpeH0pIHsKICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBzb3VyY2UgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgaWYgKHNvdXJjZS5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgIGlmIChyYWRpeCA9PSBudWxsIHx8IHJhZGl4ID09IDEwKSB7CiAgICAgIC8vIFRyeSBwYXJzaW5nIGltbWVkaWF0ZWx5LCB3aXRob3V0IHRyaW1taW5nIHdoaXRlc3BhY2UuCiAgICAgIGludCByZXN1bHQgPSBfdHJ5UGFyc2VTbWkoc291cmNlLCAwLCBzb3VyY2UubGVuZ3RoIC0gMSk7CiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4gMzYpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJhZGl4ICRyYWRpeCBub3QgaW4gcmFuZ2UgMi4uMzYiKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIHJldHVybiBfcGFyc2Uoc291cmNlLCByYWRpeCwgX2tOdWxsKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBzdGF0aWMgTnVsbCBfa051bGwoXykgPT4gbnVsbDsKCiAgc3RhdGljIGludCBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBpbmRleCwgcmFkaXgsIG1lc3NhZ2UpIHsKICAgIGlmIChvbkVycm9yICE9IG51bGwpIHJldHVybiBvbkVycm9yKHNvdXJjZSk7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24obWVzc2FnZSwgc291cmNlLCBpbmRleCk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIG51bWJlciIsIHNvdXJjZSwgaW5kZXgpOwogICAgfQogICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCByYWRpeC0kcmFkaXggbnVtYmVyIiwgc291cmNlLCBpbmRleCk7CiAgfQoKICBzdGF0aWMgaW50IF9wYXJzZVJhZGl4KFN0cmluZyBzb3VyY2UsIGludCByYWRpeCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc2lnbiwKICAgICAgYm9vbCBhbGxvd1U2NCwgb25FcnJvcikgewogICAgaW50IHRhYmxlSW5kZXggPSAocmFkaXggLSAyKSAqIDQgKyAoaXM2NEJpdCA/IDIgOiAwKTsKICAgIGludCBibG9ja1NpemUgPSBfUEFSU0VfTElNSVRTW3RhYmxlSW5kZXhdOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA8PSBibG9ja1NpemUpIHsKICAgICAgX1NtaSBzbWkgPSBfcGFyc2VCbG9jayhzb3VyY2UsIHJhZGl4LCBzdGFydCwgZW5kKTsKICAgICAgaWYgKHNtaSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIHN0YXJ0LCByYWRpeCwgbnVsbCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNpZ24gKiBzbWk7CiAgICB9CgogICAgLy8gT2Z0ZW4gY2hlYXBlciB0aGFuOiBpbnQgc21hbGxCbG9ja1NpemUgPSBsZW5ndGggJSBibG9ja1NpemU7CiAgICAvLyBiZWNhdXNlIGRpZ2l0IGNvdW50IGdlbmVyYWxseSB0ZW5kcyB0b3dhcmRzIHNtYWxsZXIuIHJhdGhlcgogICAgLy8gdGhhbiBsYXJnZXIuCiAgICBpbnQgc21hbGxCbG9ja1NpemUgPSBsZW5ndGg7CiAgICB3aGlsZSAoc21hbGxCbG9ja1NpemUgPj0gYmxvY2tTaXplKSBzbWFsbEJsb2NrU2l6ZSAtPSBibG9ja1NpemU7CiAgICBpbnQgcmVzdWx0ID0gMDsKICAgIGlmIChzbWFsbEJsb2NrU2l6ZSA+IDApIHsKICAgICAgaW50IGJsb2NrRW5kID0gc3RhcnQgKyBzbWFsbEJsb2NrU2l6ZTsKICAgICAgX1NtaSBzbWkgPSBfcGFyc2VCbG9jayhzb3VyY2UsIHJhZGl4LCBzdGFydCwgYmxvY2tFbmQpOwogICAgICBpZiAoc21pID09IG51bGwpIHsKICAgICAgICByZXR1cm4gX3Rocm93Rm9ybWF0RXhjZXB0aW9uKG9uRXJyb3IsIHNvdXJjZSwgc3RhcnQsIHJhZGl4LCBudWxsKTsKICAgICAgfQogICAgICByZXN1bHQgPSBzaWduICogc21pOwogICAgICBzdGFydCA9IGJsb2NrRW5kOwogICAgfQogICAgaW50IG11bHRpcGxpZXIgPSBfUEFSU0VfTElNSVRTW3RhYmxlSW5kZXggKyAxXTsKICAgIGludCBwb3NpdGl2ZU92ZXJmbG93TGltaXQgPSAwOwogICAgaW50IG5lZ2F0aXZlT3ZlcmZsb3dMaW1pdCA9IDA7CiAgICB0YWJsZUluZGV4ID0gdGFibGVJbmRleCA8PCAxOyAvLyBwcmUtbXVsdGlwbHkgYnkgMiBmb3Igc2ltcGxlciBpbmRleGluZwogICAgcG9zaXRpdmVPdmVyZmxvd0xpbWl0ID0gX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleF07CiAgICBpZiAocG9zaXRpdmVPdmVyZmxvd0xpbWl0ID09IDApIHsKICAgICAgcG9zaXRpdmVPdmVyZmxvd0xpbWl0ID0gX2luaXRJbnQ2NE92ZXJmbG93TGltaXRzKHRhYmxlSW5kZXgsIG11bHRpcGxpZXIpOwogICAgfQogICAgbmVnYXRpdmVPdmVyZmxvd0xpbWl0ID0gX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleCArIDFdOwogICAgaW50IGJsb2NrRW5kID0gc3RhcnQgKyBibG9ja1NpemU7CiAgICBkbyB7CiAgICAgIF9TbWkgc21pID0gX3BhcnNlQmxvY2soc291cmNlLCByYWRpeCwgc3RhcnQsIGJsb2NrRW5kKTsKICAgICAgaWYgKHNtaSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIHN0YXJ0LCByYWRpeCwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKHJlc3VsdCA+PSBwb3NpdGl2ZU92ZXJmbG93TGltaXQpIHsKICAgICAgICBpZiAoKHJlc3VsdCA+IHBvc2l0aXZlT3ZlcmZsb3dMaW1pdCkgfHwKICAgICAgICAgICAgKHNtaSA+IF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAyXSkpIHsKICAgICAgICAgIC8vIEFsdGhvdWdoIHRoZSB1bnNpZ25lZCBvdmVyZmxvdyBsaW1pdHMgZG8gbm90IGRlcGVuZCBvbiB0aGUKICAgICAgICAgIC8vIHBsYXRmb3JtLCB0aGUgbXVsdGlwbGllciBhbmQgYmxvY2sgc2l6ZSwgd2hpY2ggYXJlIHVzZWQgdG8KICAgICAgICAgIC8vIGNvbXB1dGUgaXQsIGRvLgogICAgICAgICAgaW50IFggPSBpczY0Qml0ID8gMSA6IDA7CiAgICAgICAgICBpZiAoYWxsb3dVNjQgJiYKICAgICAgICAgICAgICAhKHJlc3VsdCA+PSBfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzW1hdICYmCiAgICAgICAgICAgICAgICAgIChyZXN1bHQgPiBfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzW1hdIHx8CiAgICAgICAgICAgICAgICAgICAgICBzbWkgPiBfaW50NjRVbnNpZ25lZFNtaU92ZXJmbG93TGltaXRzW1hdKSkgJiYKICAgICAgICAgICAgICBibG9ja0VuZCArIGJsb2NrU2l6ZSA+IGVuZCkgewogICAgICAgICAgICByZXR1cm4gKHJlc3VsdCAqIG11bHRpcGxpZXIpICsgc21pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIG51bGwsIHJhZGl4LAogICAgICAgICAgICAgICJQb3NpdGl2ZSBpbnB1dCBleGNlZWRzIHRoZSBsaW1pdCBvZiBpbnRlZ2VyIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJlc3VsdCA8PSBuZWdhdGl2ZU92ZXJmbG93TGltaXQpIHsKICAgICAgICBpZiAoKHJlc3VsdCA8IG5lZ2F0aXZlT3ZlcmZsb3dMaW1pdCkgfHwKICAgICAgICAgICAgKHNtaSA+IF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAzXSkpIHsKICAgICAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBudWxsLCByYWRpeCwKICAgICAgICAgICAgICAiTmVnYXRpdmUgaW5wdXQgZXhjZWVkcyB0aGUgbGltaXQgb2YgaW50ZWdlciIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXN1bHQgPSAocmVzdWx0ICogbXVsdGlwbGllcikgKyAoc2lnbiAqIHNtaSk7CiAgICAgIHN0YXJ0ID0gYmxvY2tFbmQ7CiAgICAgIGJsb2NrRW5kID0gc3RhcnQgKyBibG9ja1NpemU7CiAgICB9IHdoaWxlIChibG9ja0VuZCA8PSBlbmQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFBhcnNlIGJsb2NrIG9mIGRpZ2l0cyBpbnRvIGEgU21pLgogIHN0YXRpYyBfU21pIF9wYXJzZUJsb2NrKFN0cmluZyBzb3VyY2UsIGludCByYWRpeCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfU21pIHJlc3VsdCA9IDA7CiAgICBpZiAocmFkaXggPD0gMTApIHsKICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICBpbnQgZGlnaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpKSBeIDB4MzA7CiAgICAgICAgaWYgKGRpZ2l0ID49IHJhZGl4KSByZXR1cm4gbnVsbDsKICAgICAgICByZXN1bHQgPSByYWRpeCAqIHJlc3VsdCArIGRpZ2l0OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIGludCBjaGFyID0gc291cmNlLmNvZGVVbml0QXQoaSk7CiAgICAgICAgaW50IGRpZ2l0ID0gY2hhciBeIDB4MzA7CiAgICAgICAgaWYgKGRpZ2l0ID4gOSkgewogICAgICAgICAgZGlnaXQgPSAoY2hhciB8IDB4MjApIC0gKDB4NjEgLSAxMCk7CiAgICAgICAgICBpZiAoZGlnaXQgPCAxMCB8fCBkaWdpdCA+PSByYWRpeCkgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IHJhZGl4ICogcmVzdWx0ICsgZGlnaXQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBGb3IgZWFjaCByYWRpeCwgMi0zNiwgaG93IG1hbnkgZGlnaXRzIGFyZSBndWFyYW50ZWVkIHRvIGZpdCBpbiBhIHNtaSwKICAvLyBhbmQgbWFnbml0dWRlIG9mIHN1Y2ggYSBibG9jayAocmFkaXggKiogZGlnaXQtY291bnQpLgogIC8vIDMyLWJpdCBsaW1pdC9tdWx0aXBsaWVyIGF0IChyYWRpeCAtIDIpKjQsIDY0LWJpdCBsaW1pdCBhdCAocmFkaXgtMikqNCsyCiAgc3RhdGljIGNvbnN0IF9QQVJTRV9MSU1JVFMgPSBjb25zdCBbCiAgICAzMCwgMTA3Mzc0MTgyNCwgNjIsIDQ2MTE2ODYwMTg0MjczODc5MDQsIC8vIHJhZGl4OiAyCiAgICAxOCwgMzg3NDIwNDg5LCAzOSwgNDA1MjU1NTE1MzAxODk3NjI2NywKICAgIDE1LCAxMDczNzQxODI0LCAzMCwgMTE1MjkyMTUwNDYwNjg0Njk3NiwKICAgIDEyLCAyNDQxNDA2MjUsIDI2LCAxNDkwMTE2MTE5Mzg0NzY1NjI1LCAvLyAgcmFkaXg6IDUKICAgIDExLCAzNjI3OTcwNTYsIDIzLCA3ODk3MzAyMjMwNTM2MDI4MTYsCiAgICAxMCwgMjgyNDc1MjQ5LCAyMiwgMzkwOTgyMTA0ODU4Mjk4ODA0OSwKICAgIDEwLCAxMDczNzQxODI0LCAyMCwgMTE1MjkyMTUwNDYwNjg0Njk3NiwKICAgIDksIDM4NzQyMDQ4OSwgMTksIDEzNTA4NTE3MTc2NzI5OTIwODksCiAgICA5LCAxMDAwMDAwMDAwLCAxOCwgMTAwMDAwMDAwMDAwMDAwMDAwMCwgLy8gIHJhZGl4OiAxMAogICAgOCwgMjE0MzU4ODgxLCAxNywgNTA1NDQ3MDI4NDk5MjkzNzcxLAogICAgOCwgNDI5OTgxNjk2LCAxNywgMjIxODYxMTEwNjc0MDQzNjk5MiwKICAgIDgsIDgxNTczMDcyMSwgMTYsIDY2NTQxNjYwOTE4MzE3OTg0MSwKICAgIDcsIDEwNTQxMzUwNCwgMTYsIDIxNzc5NTMzMzc4MDkzNzExMzYsCiAgICA3LCAxNzA4NTkzNzUsIDE1LCA0Mzc4OTM4OTAzODA4NTkzNzUsIC8vICAgIHJhZGl4OiAxNQogICAgNywgMjY4NDM1NDU2LCAxNSwgMTE1MjkyMTUwNDYwNjg0Njk3NiwKICAgIDcsIDQxMDMzODY3MywgMTUsIDI4NjI0MjMwNTE1MDk4MTU3OTMsCiAgICA3LCA2MTIyMjAwMzIsIDE0LCAzNzQ4MTMzNjc1ODIwODEwMjQsCiAgICA3LCA4OTM4NzE3MzksIDE0LCA3OTkwMDY2ODU3ODI4ODQxMjEsCiAgICA2LCA2NDAwMDAwMCwgMTQsIDE2Mzg0MDAwMDAwMDAwMDAwMDAsIC8vICAgIHJhZGl4OiAyMAogICAgNiwgODU3NjYxMjEsIDE0LCAzMjQzOTE5OTMyNTIxNTA4NjgxLAogICAgNiwgMTEzMzc5OTA0LCAxMywgMjgyODEwMDU3ODgzMDgyNzUyLAogICAgNiwgMTQ4MDM1ODg5LCAxMywgNTA0MDM2MzYxOTM2NDY3MzgzLAogICAgNiwgMTkxMTAyOTc2LCAxMywgODc2NDg4MzM4NDY1MzU3ODI0LAogICAgNiwgMjQ0MTQwNjI1LCAxMywgMTQ5MDExNjExOTM4NDc2NTYyNSwgLy8gICByYWRpeDogMjUKICAgIDYsIDMwODkxNTc3NiwgMTMsIDI0ODExNTI4NzMyMDM3MzY1NzYsCiAgICA2LCAzODc0MjA0ODksIDEzLCA0MDUyNTU1MTUzMDE4OTc2MjY3LAogICAgNiwgNDgxODkwMzA0LCAxMiwgMjMyMjE4MjY1MDg5MjEyNDE2LAogICAgNiwgNTk0ODIzMzIxLCAxMiwgMzUzODE0NzgzMjA1NDY5MDQxLAogICAgNiwgNzI5MDAwMDAwLCAxMiwgNTMxNDQxMDAwMDAwMDAwMDAwLCAvLyAgICByYWRpeDogMzAKICAgIDYsIDg4NzUwMzY4MSwgMTIsIDc4NzY2Mjc4Mzc4ODU0OTc2MSwKICAgIDYsIDEwNzM3NDE4MjQsIDEyLCAxMTUyOTIxNTA0NjA2ODQ2OTc2LAogICAgNSwgMzkxMzUzOTMsIDEyLCAxNjY3ODg5NTE0OTUyOTg0OTYxLAogICAgNSwgNDU0MzU0MjQsIDEyLCAyMzg2NDIwNjgzNjkzMTAxMDU2LAogICAgNSwgNTI1MjE4NzUsIDEyLCAzMzc5MjIwNTA4MDU2NjQwNjI1LCAvLyAgICByYWRpeDogMzUKICAgIDUsIDYwNDY2MTc2LCAxMSwgMTMxNjIxNzAzODQyMjY3MTM2LAogIF07CgogIHN0YXRpYyBjb25zdCBfbWF4SW50NjQgPSAweDdmZmZmZmZmZmZmZmZmZmY7CiAgc3RhdGljIGNvbnN0IF9taW5JbnQ2NCA9IC0weDgwMDAwMDAwMDAwMDAwMDA7CgogIHN0YXRpYyBjb25zdCBfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzID0gY29uc3QgWzB4ZmZmZmZmZmZmLCAweGZdOwogIHN0YXRpYyBjb25zdCBfaW50NjRVbnNpZ25lZFNtaU92ZXJmbG93TGltaXRzID0gY29uc3QgWwogICAgMHhmZmZmZmZmLAogICAgMHhmZmZmZmZmZmZmZmZmZmYKICBdOwoKICAvLy8gQ2FsY3VsYXRpb24gb2YgdGhlIGV4cHJlc3Npb24KICAvLy8KICAvLy8gICByZXN1bHQgPSAocmVzdWx0ICogbXVsdGlwbGllcikgKyAoc2lnbiAqIHNtaSkKICAvLy8KICAvLy8gaW4gYF9wYXJzZVJhZGl4KClgIG1heSBvdmVyZmxvdyA2NC1iaXQgaW50ZWdlcnMuIEluIHN1Y2ggY2FzZSwKICAvLy8gYGludC5wYXJzZSgpYCBzaG91bGQgc3RvcCB3aXRoIGFuIGVycm9yLgogIC8vLwogIC8vLyBUaGlzIHRhYmxlIGlzIGxhemlseSBmaWxsZWQgd2l0aCBpbnQ2NCBvdmVyZmxvdyBsaW1pdHMgZm9yIHJlc3VsdCBhbmQgc21pLgogIC8vLyBGb3IgZWFjaCBtdWx0aXBsaWVyIGZyb20gYF9QQVJTRV9MSU1JVFNbdGFibGVJbmRleCArIDFdYCB0aGlzIHRhYmxlCiAgLy8vIGNvbnRhaW5zCiAgLy8vCiAgLy8vICogYFt0YWJsZUluZGV4KjJdYCA9IHBvc2l0aXZlIGxpbWl0IGZvciByZXN1bHQKICAvLy8gKiBgW3RhYmxlSW5kZXgqMiArIDFdYCA9IG5lZ2F0aXZlIGxpbWl0IGZvciByZXN1bHQKICAvLy8gKiBgW3RhYmxlSW5kZXgqMiArIDJdYCA9IGxpbWl0IGZvciBzbWkgaWYgcmVzdWx0IGlzIGV4YWN0bHkgYXQgcG9zaXRpdmUgbGltaXQKICAvLy8gKiBgW3RhYmxlSW5kZXgqMiArIDNdYCA9IGxpbWl0IGZvciBzbWkgaWYgcmVzdWx0IGlzIGV4YWN0bHkgYXQgbmVnYXRpdmUgbGltaXQKICBzdGF0aWMgZmluYWwgSW50NjRMaXN0IF9pbnQ2NE92ZXJmbG93TGltaXRzID0KICAgICAgbmV3IEludDY0TGlzdChfUEFSU0VfTElNSVRTLmxlbmd0aCAqIDIpOwoKICBzdGF0aWMgaW50IF9pbml0SW50NjRPdmVyZmxvd0xpbWl0cyhpbnQgdGFibGVJbmRleCwgaW50IG11bHRpcGxpZXIpIHsKICAgIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXhdID0gX21heEludDY0IH4vIG11bHRpcGxpZXI7CiAgICBfaW50NjRPdmVyZmxvd0xpbWl0c1t0YWJsZUluZGV4ICsgMV0gPSBfbWluSW50NjQgfi8gbXVsdGlwbGllcjsKICAgIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAyXSA9IF9tYXhJbnQ2NC5yZW1haW5kZXIobXVsdGlwbGllcik7CiAgICBfaW50NjRPdmVyZmxvd0xpbWl0c1t0YWJsZUluZGV4ICsgM10gPSAtKF9taW5JbnQ2NC5yZW1haW5kZXIobXVsdGlwbGllcikpOwogICAgcmV0dXJuIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXhdOwogIH0KfQqBNABOTjwBHgEeBwwJRSgBIiUkJSIiAT0bFBIgJSYMMhcfCAYlIy4GFCcoExUIIAYaBAEJTVAaRQYoPz8pKj8GUSsEAT4vFFEGLgEqEjo0DxpJCCgGGR4ZIxEkKi4THk4MTwoIEgZJBAEJNFAlKD8/KSo/BgosEhMGBAEhAU0xGzkGGUIGTQQBUSA6Lx4fORlLCBkGAURDFCFFFB4tPhlLCBsYBjQjI0w+JlAGQiYJPhlLCC0wPEhIHSMaPT9ELDAMRT4KNDA8RT4KCDUYJB8TBAEnShUXKjEpKQgNKikhGS85CikIBhMEAUs7TSc5LC05KywtKzoqKyorOisrKio6KioqKjorKyoqOiosKio6KQUBLzABSDkPFgUBJAY2BkUvBlFKDwY1OVRUMC8BSEBETE8tBAIBI2RhcnQ6Y29yZS1wYXRjaC9pbnRlZ2Vyc19wYXRjaC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2ludm9jYXRpb24uZGFydJUXLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnZvY2F0aW9uIG9mIGEgbWVtYmVyIG9uIGFuIG9iamVjdC4KICoKICogVGhpcyBpcyB0aGUgdHlwZSBvZiBvYmplY3RzIHBhc3NlZCB0byBbT2JqZWN0Lm5vU3VjaE1ldGhvZF0gd2hlbgogKiBhbiBvYmplY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBtZW1iZXIgaW52b2NhdGlvbiB0aGF0IHdhcyBhdHRlbXB0ZWQKICogb24gaXQuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnZvY2F0aW9uIHsKICBJbnZvY2F0aW9uKCk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgbWV0aG9kIGludm9jYXRpb24uCiAgICoKICAgKiBUaGUgbWV0aG9kIGludm9jYXRpb24gaGFzIG5vIHR5cGUgYXJndW1lbnRzLgogICAqIElmIHRoZSBuYW1lZCBhcmd1bWVudHMgYXJlIG9taXR0ZWQsIHRoZXkgZGVmYXVsdCB0byBubyBuYW1lZCBhcmd1bWVudHMuCiAgICovCiAgZmFjdG9yeSBJbnZvY2F0aW9uLm1ldGhvZCgKICAgICAgICAgIFN5bWJvbCBtZW1iZXJOYW1lLCBJdGVyYWJsZTxPYmplY3Q+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICBbTWFwPFN5bWJvbCwgT2JqZWN0PiBuYW1lZEFyZ3VtZW50c10pID0+CiAgICAgIF9JbnZvY2F0aW9uLm1ldGhvZChtZW1iZXJOYW1lLCBudWxsLCBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgZ2VuZXJpYyBtZXRob2QgaW52b2NhdGlvbi4KICAgKgogICAqIElmIFt0eXBlQXJndW1lbnRzXSBpcyBgbnVsbGAgb3IgZW1wdHksIHRoZSBjb25zdHJ1Y3RvciBpcyBlcXVpdmFsZW50IHRvCiAgICogY2FsbGluZyBbSW52b2NhdGlvbi5tZXRob2RdIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCiAgICogQWxsIHRoZSBpbmRpdmlkdWFsIHR5cGUgYXJndW1lbnRzIG11c3QgYmUgbm9uLW51bGwuCiAgICoKICAgKiBJZiB0aGUgbmFtZWQgYXJndW1lbnRzIGFyZSBvbWl0dGVkLCB0aGV5IGRlZmF1bHQgdG8gbm8gbmFtZWQgYXJndW1lbnRzLgogICAqLwogIGZhY3RvcnkgSW52b2NhdGlvbi5nZW5lcmljTWV0aG9kKFN5bWJvbCBtZW1iZXJOYW1lLAogICAgICAgICAgSXRlcmFibGU8VHlwZT4gdHlwZUFyZ3VtZW50cywgSXRlcmFibGU8T2JqZWN0PiBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgW01hcDxTeW1ib2wsIE9iamVjdD4gbmFtZWRBcmd1bWVudHNdKSA9PgogICAgICBfSW52b2NhdGlvbi5tZXRob2QoCiAgICAgICAgICBtZW1iZXJOYW1lLCB0eXBlQXJndW1lbnRzLCBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgZ2V0dGVyIGludm9jYXRpb24uCiAgICovCiAgZmFjdG9yeSBJbnZvY2F0aW9uLmdldHRlcihTeW1ib2wgbmFtZSkgPSBfSW52b2NhdGlvbi5nZXR0ZXI7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgc2V0dGVyIGludm9jYXRpb24uCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW55IFtTeW1ib2xdIGFzIFttZW1iZXJOYW1lXSwgYnV0IHJlbWVtYmVyIHRoYXQKICAgKiAqYWN0dWFsIHNldHRlciBuYW1lcyogZW5kIGluIGA9YCwgc28gdGhlIGludm9jYXRpb24gY29ycmVzcG9uZGluZwogICAqIHRvIGBvYmplY3QubWVtYmVyID0gdmFsdWVgIGlzCiAgICogYGBgZGFydAogICAqIEludm9jYXRpb24uc2V0dGVyKGNvbnN0IFN5bWJvbCgibWVtYmVyPSIpLCB2YWx1ZSkKICAgKiBgYGAKICAgKi8KICBmYWN0b3J5IEludm9jYXRpb24uc2V0dGVyKFN5bWJvbCBtZW1iZXJOYW1lLCBPYmplY3QgYXJndW1lbnQpID0KICAgICAgX0ludm9jYXRpb24uc2V0dGVyOwoKICAvKiogVGhlIG5hbWUgb2YgdGhlIGludm9rZWQgbWVtYmVyLiAqLwogIFN5bWJvbCBnZXQgbWVtYmVyTmFtZTsKCiAgLyoqCiAgICogQW4gdW5tb2RpZmlhYmxlIHZpZXcgb2YgdGhlIHR5cGUgYXJndW1lbnRzIG9mIHRoZSBjYWxsLgogICAqCiAgICogSWYgdGhlIG1lbWJlciBpcyBhIGdldHRlciwgc2V0dGVyIG9yIG9wZXJhdG9yLAogICAqIHRoZSB0eXBlIGFyZ3VtZW50IGxpc3QgaXMgYWx3YXlzIGVtcHR5LgogICAqLwogIExpc3Q8VHlwZT4gZ2V0IHR5cGVBcmd1bWVudHMgPT4gY29uc3QgPFR5cGU+W107CgogIC8qKgogICAqIEFuIHVubW9kaWZpYWJsZSB2aWV3IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBvZiB0aGUgY2FsbC4KICAgKgogICAqIElmIHRoZSBtZW1iZXIgaXMgYSBnZXR0ZXIsIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBsaXN0IGlzCiAgICogYWx3YXlzIGVtcHR5LgogICAqLwogIExpc3Q8ZHluYW1pYz4gZ2V0IHBvc2l0aW9uYWxBcmd1bWVudHM7CgogIC8qKgogICAqIEFuIHVubW9kaWZpYWJsZSB2aWV3IG9mIHRoZSBuYW1lZCBhcmd1bWVudHMgb2YgdGhlIGNhbGwuCiAgICoKICAgKiBJZiB0aGUgbWVtYmVyIGlzIGEgZ2V0dGVyLCBzZXR0ZXIgb3Igb3BlcmF0b3IsCiAgICogdGhlIG5hbWVkIGFyZ3VtZW50cyBtYXAgaXMgYWx3YXlzIGVtcHR5LgogICAqLwogIE1hcDxTeW1ib2wsIGR5bmFtaWM+IGdldCBuYW1lZEFyZ3VtZW50czsKCiAgLyoqIFdoZXRoZXIgdGhlIGludm9jYXRpb24gd2FzIGEgbWV0aG9kIGNhbGwuICovCiAgYm9vbCBnZXQgaXNNZXRob2Q7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIGludm9jYXRpb24gd2FzIGEgZ2V0dGVyIGNhbGwuCiAgICogSWYgc28sIGFsbCB0aHJlZSB0eXBlcyBvZiBhcmd1bWVudHMgbGlzdHMgYXJlIGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzR2V0dGVyOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBpbnZvY2F0aW9uIHdhcyBhIHNldHRlciBjYWxsLgogICAqCiAgICogSWYgc28sIFtwb3NpdGlvbmFsQXJndW1lbnRzXSBoYXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbAogICAqIGFyZ3VtZW50LCBbbmFtZWRBcmd1bWVudHNdIGlzIGVtcHR5LCBhbmQgdHlwZUFyZ3VtZW50cyBpcwogICAqIGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzU2V0dGVyOwoKICAvKiogV2hldGhlciB0aGUgaW52b2NhdGlvbiB3YXMgYSBnZXR0ZXIgb3IgYSBzZXR0ZXIgY2FsbC4gKi8KICBib29sIGdldCBpc0FjY2Vzc29yID0+IGlzR2V0dGVyIHx8IGlzU2V0dGVyOwp9CgovKiogSW1wbGVtZW50YXRpb24gb2YgW0ludm9jYXRpb25dIHVzZWQgYnkgaXRzIGZhY3RvcnkgY29uc3RydWN0b3JzLiAqLwpjbGFzcyBfSW52b2NhdGlvbiBpbXBsZW1lbnRzIEludm9jYXRpb24gewogIGZpbmFsIFN5bWJvbCBtZW1iZXJOYW1lOwogIGZpbmFsIExpc3Q8VHlwZT4gdHlwZUFyZ3VtZW50czsKICAvLyBQb3NpdGlvbmFsIGFyZ3VtZW50cyBpcyBgbnVsbGAgZm9yIGdldHRlcnMgb25seS4KICBmaW5hbCBMaXN0PE9iamVjdD4gX3Bvc2l0aW9uYWw7CiAgLy8gTmFtZWQgYXJndW1lbnRzIGlzIGBudWxsYCBmb3IgYWNjZXNzb3JzIG9ubHkuCiAgZmluYWwgTWFwPFN5bWJvbCwgT2JqZWN0PiBfbmFtZWQ7CgogIF9JbnZvY2F0aW9uLm1ldGhvZCh0aGlzLm1lbWJlck5hbWUsIEl0ZXJhYmxlPFR5cGU+IHR5cGVzLAogICAgICBJdGVyYWJsZTxPYmplY3Q+IHBvc2l0aW9uYWwsIE1hcDxTeW1ib2wsIE9iamVjdD4gbmFtZWQpCiAgICAgIDogdHlwZUFyZ3VtZW50cyA9IF9lbnN1cmVOb25OdWxsVHlwZXMoX21ha2VVbm1vZGlmaWFibGU8VHlwZT4odHlwZXMpKSwKICAgICAgICBfcG9zaXRpb25hbCA9IF9tYWtlVW5tb2RpZmlhYmxlPE9iamVjdD4ocG9zaXRpb25hbCkgPz8gY29uc3QgPE9iamVjdD5bXSwKICAgICAgICBfbmFtZWQgPSAobmFtZWQgPT0gbnVsbCB8fCBuYW1lZC5pc0VtcHR5KQogICAgICAgICAgICA/IGNvbnN0IDxTeW1ib2wsIE9iamVjdD57fQogICAgICAgICAgICA6IE1hcDxTeW1ib2wsIE9iamVjdD4udW5tb2RpZmlhYmxlKG5hbWVkKTsKCiAgX0ludm9jYXRpb24uZ2V0dGVyKHRoaXMubWVtYmVyTmFtZSkKICAgICAgOiB0eXBlQXJndW1lbnRzID0gY29uc3QgPFR5cGU+W10sCiAgICAgICAgX3Bvc2l0aW9uYWwgPSBudWxsLAogICAgICAgIF9uYW1lZCA9IG51bGw7CgogIF9JbnZvY2F0aW9uLnNldHRlcih0aGlzLm1lbWJlck5hbWUsIE9iamVjdCBhcmd1bWVudCkKICAgICAgOiB0eXBlQXJndW1lbnRzID0gY29uc3QgPFR5cGU+W10sCiAgICAgICAgX3Bvc2l0aW9uYWwgPSBMaXN0PE9iamVjdD4udW5tb2RpZmlhYmxlKFthcmd1bWVudF0pLAogICAgICAgIF9uYW1lZCA9IG51bGw7CgogIExpc3Q8ZHluYW1pYz4gZ2V0IHBvc2l0aW9uYWxBcmd1bWVudHMgPT4gX3Bvc2l0aW9uYWwgPz8gY29uc3QgPE9iamVjdD5bXTsKCiAgTWFwPFN5bWJvbCwgZHluYW1pYz4gZ2V0IG5hbWVkQXJndW1lbnRzID0+IF9uYW1lZCA/PyBjb25zdCA8U3ltYm9sLCBPYmplY3Q+e307CgogIGJvb2wgZ2V0IGlzTWV0aG9kID0+IF9uYW1lZCAhPSBudWxsOwogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IF9wb3NpdGlvbmFsID09IG51bGw7CiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4gX3Bvc2l0aW9uYWwgIT0gbnVsbCAmJiBfbmFtZWQgPT0gbnVsbDsKICBib29sIGdldCBpc0FjY2Vzc29yID0+IF9uYW1lZCA9PSBudWxsOwoKICAvLy8gQ2hlY2tzIHRoYXQgdGhlIGVsZW1lbnRzIG9mIFt0eXBlc10gYXJlIG5vdCBudWxsLgogIHN0YXRpYyBMaXN0PFR5cGU+IF9lbnN1cmVOb25OdWxsVHlwZXMoTGlzdDxUeXBlPiB0eXBlcykgewogICAgaWYgKHR5cGVzID09IG51bGwpIHJldHVybiBjb25zdCA8VHlwZT5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHR5cGVzW2ldID09IG51bGwpIHsKICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAiVHlwZSBhcmd1bWVudHMgbXVzdCBiZSBub24tbnVsbCwgd2FzIG51bGwgYXQgaW5kZXggJGkuIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0eXBlczsKICB9CgogIHN0YXRpYyBMaXN0PFQ+IF9tYWtlVW5tb2RpZmlhYmxlPFQ+KEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gTGlzdDxUPi51bm1vZGlmaWFibGUoZWxlbWVudHMpOwogIH0KfQqApABOTjwBEwEEPgNERgoEHBABBkEFMk0GHUMzUQEGSQVNPzkFTQY2TjMaSwEGQQY/AQZBBU5HIw03CQZCGgEpGQEGPQU0LQYyAQZDBUETBikBBj4FNC4GKwEzFQEGLzoGFQEGLwU9PwwGFQE/LwIBSCobIjYiMyQBPD5NUTInNwEmKBwXATcoPRcBTAFRAScsPikBODwuLR4dRwgGEgQBPicrBAIBGWRhcnQ6Y29yZS9pbnZvY2F0aW9uLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvaXRlcmF0b3IuZGFydIjTLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEFuIGludGVyZmFjZSBmb3IgZ2V0dGluZyBpdGVtcywgb25lIGF0IGEgdGltZSwgZnJvbSBhbiBvYmplY3QuCiAqCiAqIFRoZSBmb3ItaW4gY29uc3RydWN0IHRyYW5zcGFyZW50bHkgdXNlcyBgSXRlcmF0b3JgIHRvIHRlc3QgZm9yIHRoZSBlbmQKICogb2YgdGhlIGl0ZXJhdGlvbiwgYW5kIHRvIGdldCBlYWNoIGl0ZW0gKG9yIF9lbGVtZW50XykuCiAqCiAqIElmIHRoZSBvYmplY3QgaXRlcmF0ZWQgb3ZlciBpcyBjaGFuZ2VkIGR1cmluZyB0aGUgaXRlcmF0aW9uLCB0aGUKICogYmVoYXZpb3IgaXMgdW5zcGVjaWZpZWQuCiAqCiAqIFRoZSBgSXRlcmF0b3JgIGlzIGluaXRpYWxseSBwb3NpdGlvbmVkIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudC4KICogQmVmb3JlIGFjY2Vzc2luZyB0aGUgZmlyc3QgZWxlbWVudCB0aGUgaXRlcmF0b3IgbXVzdCB0aHVzIGJlIGFkdmFuY2VkIHVzaW5nCiAqIFttb3ZlTmV4dF0gdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGVsZW1lbnQuCiAqIElmIG5vIGVsZW1lbnQgaXMgbGVmdCwgdGhlbiBbbW92ZU5leHRdIHJldHVybnMgZmFsc2UsIFtjdXJyZW50XQogKiByZXR1cm5zIGBudWxsYCwgYW5kIGFsbCBmdXJ0aGVyIGNhbGxzIHRvIFttb3ZlTmV4dF0gd2lsbCBhbHNvIHJldHVybiBmYWxzZS4KICoKICogQSB0eXBpY2FsIHVzYWdlIG9mIGFuIEl0ZXJhdG9yIGxvb2tzIGFzIGZvbGxvd3M6CiAqCiAqICAgICB2YXIgaXQgPSBvYmouaXRlcmF0b3I7CiAqICAgICB3aGlsZSAoaXQubW92ZU5leHQoKSkgewogKiAgICAgICB1c2UoaXQuY3VycmVudCk7CiAqICAgICB9CiAqCiAqICoqU2VlIGFsc286KioKICogW0l0ZXJhdGlvbl0oaHR0cDovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NvbnRlbnRzL2NoMDMuaHRtbCNpdGVyYXRpb24pCiAqIGluIHRoZSBbbGlicmFyeSB0b3VyXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY29udGVudHMvY2gwMy5odG1sKQogKi8KYWJzdHJhY3QgY2xhc3MgSXRlcmF0b3I8RT4gewogIC8qKgogICAqIE1vdmVzIHRvIHRoZSBuZXh0IGVsZW1lbnQuCiAgICoKICAgKiBSZXR1cm5zIHRydWUgaWYgW2N1cnJlbnRdIGNvbnRhaW5zIHRoZSBuZXh0IGVsZW1lbnQuCiAgICogUmV0dXJucyBmYWxzZSBpZiBubyBlbGVtZW50cyBhcmUgbGVmdC4KICAgKgogICAqIEl0IGlzIHNhZmUgdG8gaW52b2tlIFttb3ZlTmV4dF0gZXZlbiB3aGVuIHRoZSBpdGVyYXRvciBpcyBhbHJlYWR5CiAgICogcG9zaXRpb25lZCBhZnRlciB0aGUgbGFzdCBlbGVtZW50LgogICAqIEluIHRoaXMgY2FzZSBbbW92ZU5leHRdIHJldHVybnMgZmFsc2UgYWdhaW4gYW5kIGhhcyBubyBlZmZlY3QuCiAgICoKICAgKiBBIGNhbGwgdG8gYG1vdmVOZXh0YCBtYXkgdGhyb3cgaWYgaXRlcmF0aW9uIGhhcyBiZWVuIGJyb2tlbiBieQogICAqIGNoYW5naW5nIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24uCiAgICovCiAgYm9vbCBtb3ZlTmV4dCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICoKICAgKiBSZXR1cm5zIGBudWxsYCBpZiB0aGUgaXRlcmF0b3IgaGFzIG5vdCB5ZXQgYmVlbiBtb3ZlZCB0byB0aGUgZmlyc3QKICAgKiBlbGVtZW50LCBvciBpZiB0aGUgaXRlcmF0b3IgaGFzIGJlZW4gbW92ZWQgcGFzdCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZQogICAqIFtJdGVyYWJsZV0uCiAgICoKICAgKiBUaGUgYGN1cnJlbnRgIGdldHRlciBzaG91bGQga2VlcCBpdHMgdmFsdWUgdW50aWwgdGhlIG5leHQgY2FsbCB0bwogICAqIFttb3ZlTmV4dF0sIGV2ZW4gaWYgYW4gdW5kZXJseWluZyBjb2xsZWN0aW9uIGNoYW5nZXMuCiAgICogQWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8gYG1vdmVOZXh0YCwgdGhlIHVzZXIgZG9lc24ndCBuZWVkIHRvIGNhY2hlCiAgICogdGhlIGN1cnJlbnQgdmFsdWUsIGJ1dCBjYW4ga2VlcCByZWFkaW5nIGl0IGZyb20gdGhlIGl0ZXJhdG9yLgogICAqLwogIEUgZ2V0IGN1cnJlbnQ7Cn0KQABOTjwBEwEEQgNKOgNEHANETy1DTwM0Ax4fGgkDEV5eBB0GIAU6LAVHKEQFRCkGEwEGIgVITREFRztLQwYRAgEXZGFydDpjb3JlL2l0ZXJhdG9yLmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvbGlzdC5kYXJ0wABhWS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBpbmRleGFibGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIHdpdGggYSBsZW5ndGguCiAqCiAqIFN1YmNsYXNzZXMgb2YgdGhpcyBjbGFzcyBpbXBsZW1lbnQgZGlmZmVyZW50IGtpbmRzIG9mIGxpc3RzLgogKiBUaGUgbW9zdCBjb21tb24ga2luZHMgb2YgbGlzdHMgYXJlOgogKgogKiAqIEZpeGVkLWxlbmd0aCBsaXN0LgogKiAgIEFuIGVycm9yIG9jY3VycyB3aGVuIGF0dGVtcHRpbmcgdG8gdXNlIG9wZXJhdGlvbnMKICogICB0aGF0IGNhbiBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdC4KICoKICogKiBHcm93YWJsZSBsaXN0LiBGdWxsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkgZGVmaW5lZCBpbiB0aGlzIGNsYXNzLgogKgogKiBUaGUgZGVmYXVsdCBncm93YWJsZSBsaXN0LCBhcyByZXR1cm5lZCBieSBgbmV3IExpc3QoKWAgb3IgYFtdYCwga2VlcHMKICogYW4gaW50ZXJuYWwgYnVmZmVyLCBhbmQgZ3Jvd3MgdGhhdCBidWZmZXIgd2hlbiBuZWNlc3NhcnkuIFRoaXMgZ3VhcmFudGVlcwogKiB0aGF0IGEgc2VxdWVuY2Ugb2YgW2FkZF0gb3BlcmF0aW9ucyB3aWxsIGVhY2ggZXhlY3V0ZSBpbiBhbW9ydGl6ZWQgY29uc3RhbnQKICogdGltZS4gU2V0dGluZyB0aGUgbGVuZ3RoIGRpcmVjdGx5IG1heSB0YWtlIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBuZXcKICogbGVuZ3RoLCBhbmQgbWF5IGNoYW5nZSB0aGUgaW50ZXJuYWwgY2FwYWNpdHkgc28gdGhhdCBhIGZvbGxvd2luZyBhZGQKICogb3BlcmF0aW9uIHdpbGwgbmVlZCB0byBpbW1lZGlhdGVseSBpbmNyZWFzZSB0aGUgYnVmZmVyIGNhcGFjaXR5LgogKiBPdGhlciBsaXN0IGltcGxlbWVudGF0aW9ucyBtYXkgaGF2ZSBkaWZmZXJlbnQgcGVyZm9ybWFuY2UgYmVoYXZpb3IuCiAqCiAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbGx1c3RyYXRlcyB0aGF0IHNvbWUgTGlzdCBpbXBsZW1lbnRhdGlvbnMgc3VwcG9ydAogKiBvbmx5IGEgc3Vic2V0IG9mIHRoZSBBUEkuCiAqCiAqICAgICBMaXN0PGludD4gZml4ZWRMZW5ndGhMaXN0ID0gbmV3IExpc3QoNSk7CiAqICAgICBmaXhlZExlbmd0aExpc3QubGVuZ3RoID0gMDsgIC8vIEVycm9yCiAqICAgICBmaXhlZExlbmd0aExpc3QuYWRkKDQ5OSk7ICAgIC8vIEVycm9yCiAqICAgICBmaXhlZExlbmd0aExpc3RbMF0gPSA4NzsKICogICAgIExpc3Q8aW50PiBncm93YWJsZUxpc3QgPSBbMSwgMl07CiAqICAgICBncm93YWJsZUxpc3QubGVuZ3RoID0gMDsKICogICAgIGdyb3dhYmxlTGlzdC5hZGQoNDk5KTsKICogICAgIGdyb3dhYmxlTGlzdFswXSA9IDg3OwogKgogKiBMaXN0cyBhcmUgW0l0ZXJhYmxlXS4gSXRlcmF0aW9uIG9jY3VycyBvdmVyIHZhbHVlcyBpbiBpbmRleCBvcmRlci4gQ2hhbmdpbmcKICogdGhlIHZhbHVlcyBkb2VzIG5vdCBhZmZlY3QgaXRlcmF0aW9uLCBidXQgY2hhbmdpbmcgdGhlIHZhbGlkCiAqIGluZGljZXMmbWRhc2g7dGhhdCBpcywgY2hhbmdpbmcgdGhlIGxpc3QncyBsZW5ndGgmbWRhc2g7YmV0d2VlbiBpdGVyYXRpb24KICogc3RlcHMgY2F1c2VzIGEgW0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcl0uIFRoaXMgbWVhbnMgdGhhdCBvbmx5IGdyb3dhYmxlCiAqIGxpc3RzIGNhbiB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IuIElmIHRoZSBsZW5ndGggY2hhbmdlcwogKiB0ZW1wb3JhcmlseSBhbmQgaXMgcmVzdG9yZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGl0ZXJhdGlvbiwgdGhlIGl0ZXJhdG9yCiAqIGRvZXMgbm90IGRldGVjdCBpdC4KICoKICogSXQgaXMgZ2VuZXJhbGx5IG5vdCBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgbGlzdCdzIGxlbmd0aCAoYWRkaW5nIG9yIHJlbW92aW5nCiAqIGVsZW1lbnRzKSB3aGlsZSBhbiBvcGVyYXRpb24gb24gdGhlIGxpc3QgaXMgYmVpbmcgcGVyZm9ybWVkLAogKiBmb3IgZXhhbXBsZSBkdXJpbmcgYSBjYWxsIHRvIFtmb3JFYWNoXSBvciBbc29ydF0uCiAqIENoYW5naW5nIHRoZSBsaXN0J3MgbGVuZ3RoIHdoaWxlIGl0IGlzIGJlaW5nIGl0ZXJhdGVkLCBlaXRoZXIgYnkgaXRlcmF0aW5nIGl0CiAqIGRpcmVjdGx5IG9yIHRocm91Z2ggaXRlcmF0aW5nIGFuIFtJdGVyYWJsZV0gdGhhdCBpcyBiYWNrZWQgYnkgdGhlIGxpc3QsIHdpbGwKICogYnJlYWsgdGhlIGl0ZXJhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIExpc3Q8RT4gaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIGxpc3Qgb2YgdGhlIGdpdmVuIGxlbmd0aC4KICAgKgogICAqIFRoZSBjcmVhdGVkIGxpc3QgaXMgZml4ZWQtbGVuZ3RoIGlmIFtsZW5ndGhdIGlzIHByb3ZpZGVkLgogICAqCiAgICogICAgIExpc3QgZml4ZWRMZW5ndGhMaXN0ID0gbmV3IExpc3QoMyk7CiAgICogICAgIGZpeGVkTGVuZ3RoTGlzdC5sZW5ndGg7ICAgICAvLyAzCiAgICogICAgIGZpeGVkTGVuZ3RoTGlzdC5sZW5ndGggPSAxOyAvLyBFcnJvcgogICAqCiAgICogVGhlIGxpc3QgaGFzIGxlbmd0aCAwIGFuZCBpcyBncm93YWJsZSBpZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLgogICAqCiAgICogICAgIExpc3QgZ3Jvd2FibGVMaXN0ID0gbmV3IExpc3QoKTsKICAgKiAgICAgZ3Jvd2FibGVMaXN0Lmxlbmd0aDsgLy8gMDsKICAgKiAgICAgZ3Jvd2FibGVMaXN0Lmxlbmd0aCA9IDM7CiAgICoKICAgKiBUbyBjcmVhdGUgYSBncm93YWJsZSBsaXN0IHdpdGggYSBnaXZlbiBsZW5ndGgsIGp1c3QgYXNzaWduIHRoZSBsZW5ndGgKICAgKiByaWdodCBhZnRlciBjcmVhdGlvbjoKICAgKgogICAqICAgICBMaXN0IGdyb3dhYmxlTGlzdCA9IG5ldyBMaXN0KCkuLmxlbmd0aCA9IDUwMDsKICAgKgogICAqIFRoZSBbbGVuZ3RoXSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSBvciBudWxsLCBpZiBpdCBpcyBwcm92aWRlZC4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IExpc3QoW2ludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGxpc3Qgb2YgdGhlIGdpdmVuIGxlbmd0aCB3aXRoIFtmaWxsXSBhdCBlYWNoIHBvc2l0aW9uLgogICAqCiAgICogVGhlIFtsZW5ndGhdIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqIG5ldyBMaXN0PGludD4uZmlsbGVkKDMsIDAsIGdyb3dhYmxlOiB0cnVlKTsgLy8gWzAsIDAsIDBdCiAgICogYGBgCiAgICoKICAgKiBUaGUgY3JlYXRlZCBsaXN0IGlzIGZpeGVkLWxlbmd0aCBpZiBbZ3Jvd2FibGVdIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkKICAgKiBhbmQgZ3Jvd2FibGUgaWYgW2dyb3dhYmxlXSBpcyB0cnVlLgogICAqIElmIHRoZSBsaXN0IGlzIGdyb3dhYmxlLCBjaGFuZ2luZyBpdHMgbGVuZ3RoIHdpbGwgbm90IGluaXRpYWxpemUgbmV3CiAgICogZW50cmllcyB3aXRoIFtmaWxsXS4KICAgKiBBZnRlciBiZWluZyBjcmVhdGVkIGFuZCBmaWxsZWQsIHRoZSBsaXN0IGlzIG5vIGRpZmZlcmVudCBmcm9tIGFueSBvdGhlcgogICAqIGdyb3dhYmxlIG9yIGZpeGVkLWxlbmd0aCBsaXN0IGNyZWF0ZWQgdXNpbmcgW0xpc3RdLgogICAqCiAgICogQWxsIGVsZW1lbnRzIG9mIHRoZSByZXR1cm5lZCBsaXN0IHNoYXJlIHRoZSBzYW1lIFtmaWxsXSB2YWx1ZS4KICAgKiBgYGAKICAgKiB2YXIgc2hhcmVkID0gbmV3IExpc3QuZmlsbGVkKDMsIFtdKTsKICAgKiBzaGFyZWRbMF0uYWRkKDQ5OSk7CiAgICogcHJpbnQoc2hhcmVkKTsgIC8vID0+IFtbNDk5XSwgWzQ5OV0sIFs0OTldXQogICAqIGBgYAogICAqCiAgICogWW91IGNhbiB1c2UgW0xpc3QuZ2VuZXJhdGVdIHRvIGNyZWF0ZSBhIGxpc3Qgd2l0aCBhIG5ldyBvYmplY3QgYXQKICAgKiBlYWNoIHBvc2l0aW9uLgogICAqIGBgYAogICAqIHZhciB1bmlxdWUgPSBuZXcgTGlzdC5nZW5lcmF0ZSgzLCAoXykgPT4gW10pOwogICAqIHVuaXF1ZVswXS5hZGQoNDk5KTsKICAgKiBwcmludCh1bmlxdWUpOyAvLyA9PiBbWzQ5OV0sIFtdLCBbXV0KICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IExpc3QuZmlsbGVkKGludCBsZW5ndGgsIEUgZmlsbCwge2Jvb2wgZ3Jvd2FibGUgPSBmYWxzZX0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGlzdCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogICAqCiAgICogVGhlIFtJdGVyYXRvcl0gb2YgW2VsZW1lbnRzXSBwcm92aWRlcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzLgogICAqCiAgICogQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdLgogICAqIFRoZSBgZWxlbWVudHNgIGl0ZXJhYmxlIGl0c2VsZiBtYXkgaGF2ZSBhbnkgZWxlbWVudCB0eXBlLCBzbyB0aGlzCiAgICogY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYExpc3RgLCBmb3IgZXhhbXBsZSBhczoKICAgKiBgYGBkYXJ0CiAgICogTGlzdDxTdXBlclR5cGU+IHN1cGVyTGlzdCA9IC4uLjsKICAgKiBMaXN0PFN1YlR5cGU+IHN1Ykxpc3QgPQogICAqICAgICBuZXcgTGlzdDxTdWJUeXBlPi5mcm9tKHN1cGVyTGlzdC53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgICogYGBgCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBncm93YWJsZSBsaXN0IHdoZW4gW2dyb3dhYmxlXSBpcyB0cnVlOwogICAqIG90aGVyd2lzZSwgaXQgcmV0dXJucyBhIGZpeGVkLWxlbmd0aCBsaXN0LgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgTGlzdC5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzLCB7Ym9vbCBncm93YWJsZSA9IHRydWV9KTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGxpc3QgZnJvbSBbZWxlbWVudHNdLgogICAqCiAgICogVGhlIFtJdGVyYXRvcl0gb2YgW2VsZW1lbnRzXSBwcm92aWRlcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgZ3Jvd2FibGUgbGlzdCB3aGVuIFtncm93YWJsZV0gaXMgdHJ1ZTsKICAgKiBvdGhlcndpc2UsIGl0IHJldHVybnMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICBmYWN0b3J5IExpc3Qub2YoSXRlcmFibGU8RT4gZWxlbWVudHMsIHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pID0+CiAgICAgIExpc3Q8RT4uZnJvbShlbGVtZW50cywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKCiAgLyoqCiAgICogR2VuZXJhdGVzIGEgbGlzdCBvZiB2YWx1ZXMuCiAgICoKICAgKiBDcmVhdGVzIGEgbGlzdCB3aXRoIFtsZW5ndGhdIHBvc2l0aW9ucyBhbmQgZmlsbHMgaXQgd2l0aCB2YWx1ZXMgY3JlYXRlZCBieQogICAqIGNhbGxpbmcgW2dlbmVyYXRvcl0gZm9yIGVhY2ggaW5kZXggaW4gdGhlIHJhbmdlIGAwYCAuLiBgbGVuZ3RoIC0gMWAKICAgKiBpbiBpbmNyZWFzaW5nIG9yZGVyLgogICAqCiAgICogICAgIG5ldyBMaXN0PGludD4uZ2VuZXJhdGUoMywgKGludCBpbmRleCkgPT4gaW5kZXggKiBpbmRleCk7IC8vIFswLCAxLCA0XQogICAqCiAgICogVGhlIGNyZWF0ZWQgbGlzdCBpcyBmaXhlZC1sZW5ndGggdW5sZXNzIFtncm93YWJsZV0gaXMgdHJ1ZS4KICAgKi8KICBmYWN0b3J5IExpc3QuZ2VuZXJhdGUoaW50IGxlbmd0aCwgRSBnZW5lcmF0b3IoaW50IGluZGV4KSwKICAgICAge2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgTGlzdDxFPiByZXN1bHQ7CiAgICBpZiAoZ3Jvd2FibGUpIHsKICAgICAgcmVzdWx0ID0gPEU+W10uLmxlbmd0aCA9IGxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IExpc3Q8RT4obGVuZ3RoKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0W2ldID0gZ2VuZXJhdG9yKGkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYW4gdW5tb2RpZmlhYmxlIGxpc3QgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAgKgogICAqIFRoZSBbSXRlcmF0b3JdIG9mIFtlbGVtZW50c10gcHJvdmlkZXMgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cy4KICAgKgogICAqIEFuIHVubW9kaWZpYWJsZSBsaXN0IGNhbm5vdCBoYXZlIGl0cyBsZW5ndGggb3IgZWxlbWVudHMgY2hhbmdlZC4KICAgKiBJZiB0aGUgZWxlbWVudHMgYXJlIHRoZW1zZWx2ZXMgaW1tdXRhYmxlLCB0aGVuIHRoZSByZXN1bHRpbmcgbGlzdAogICAqIGlzIGFsc28gaW1tdXRhYmxlLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgTGlzdC51bm1vZGlmaWFibGUoSXRlcmFibGUgZWxlbWVudHMpOwoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgTGlzdDxUPmAuCiAgICoKICAgKiBBbnkgdGltZSB0aGUgbGlzdCB3b3VsZCBwcm9kdWNlIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYSBbVF0sCiAgICogdGhlIGVsZW1lbnQgYWNjZXNzIHdpbGwgdGhyb3cuCiAgICoKICAgKiBBbnkgdGltZSBhIFtUXSB2YWx1ZSBpcyBhdHRlbXB0ZWQgc3RvcmVkIGludG8gdGhlIGFkYXB0ZWQgbGlzdCwKICAgKiB0aGUgc3RvcmUgd2lsbCB0aHJvdyB1bmxlc3MgdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1NdLgogICAqCiAgICogSWYgYWxsIGFjY2Vzc2VkIGVsZW1lbnRzIG9mIFtzb3VyY2VdIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1RdLAogICAqIGFuZCBpZiBhbGwgZWxlbWVudHMgc3RvcmVkIGludG8gdGhlIHJldHVybmVkIGxpc3QgYXJlIGFjdHVhbGx5IGluc3RhbmNlCiAgICogb2YgW1NdLAogICAqIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgY2FuIGJlIHVzZWQgYXMgYSBgTGlzdDxUPmAuCiAgICovCiAgc3RhdGljIExpc3Q8VD4gY2FzdEZyb208UywgVD4oTGlzdDxTPiBzb3VyY2UpID0+IENhc3RMaXN0PFMsIFQ+KHNvdXJjZSk7CgogIC8qKgogICAqIENvcHkgYSByYW5nZSBvZiBvbmUgbGlzdCBpbnRvIGFub3RoZXIgbGlzdC4KICAgKgogICAqIFRoaXMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IG1ldGhvZHMgbGlrZQogICAqIFtzZXRSYW5nZV0uCiAgICoKICAgKiBUaGUgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIG11c3QgYmUgYSB2YWxpZCByYW5nZSBvZiBbc291cmNlXSwKICAgKiBhbmQgdGhlcmUgbXVzdCBiZSByb29tIGZvciBgZW5kIC0gc3RhcnRgIGVsZW1lbnRzIGZyb20gcG9zaXRpb24gW2F0XS4KICAgKiBJZiBbc3RhcnRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHplcm8uCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gW3NvdXJjZS5sZW5ndGhdLgogICAqCiAgICogSWYgW3NvdXJjZV0gYW5kIFt0YXJnZXRdIGlzIHRoZSBzYW1lIGxpc3QsIG92ZXJsYXBwaW5nIHNvdXJjZSBhbmQgdGFyZ2V0CiAgICogcmFuZ2VzIGFyZSByZXNwZWN0ZWQgc28gdGhhdCB0aGUgdGFyZ2V0IHJhbmdlIGVuZHMgdXAgY29udGFpbmluZyB0aGUKICAgKiBpbml0aWFsIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSByYW5nZS4KICAgKiBPdGhlcndpc2UgdGhlIG9yZGVyIG9mIGVsZW1lbnQgY29weWluZyBpcyBub3QgZ3VhcmFudGVlZC4KICAgKi8KICBzdGF0aWMgdm9pZCBjb3B5UmFuZ2U8VD4oTGlzdDxUPiB0YXJnZXQsIGludCBhdCwgTGlzdDxUPiBzb3VyY2UsCiAgICAgIFtpbnQgc3RhcnQsIGludCBlbmRdKSB7CiAgICBzdGFydCA/Pz0gMDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKHRhcmdldC5sZW5ndGggPCBhdCArIGxlbmd0aCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKHRhcmdldCwgInRhcmdldCIsCiAgICAgICAgICAiTm90IGJpZyBlbm91Z2ggdG8gaG9sZCAkbGVuZ3RoIGVsZW1lbnRzIGF0IHBvc2l0aW9uICRhdCIpOwogICAgfQogICAgaWYgKCFpZGVudGljYWwoc291cmNlLCB0YXJnZXQpIHx8IHN0YXJ0ID49IGF0KSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICB0YXJnZXRbYXQgKyBpXSA9IHNvdXJjZVtzdGFydCArIGldOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gbGVuZ3RoOyAtLWkgPj0gMDspIHsKICAgICAgICB0YXJnZXRbYXQgKyBpXSA9IHNvdXJjZVtzdGFydCArIGldOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBXcml0ZSB0aGUgZWxlbWVudHMgb2YgYW4gaXRlcmFibGUgaW50byBhIGxpc3QuCiAgICoKICAgKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBtZXRob2RzIGxpa2UKICAgKiBbc2V0QWxsXS4KICAgKgogICAqIFRoZSBlbGVtZW50cyBvZiBbc291cmNlXSBhcmUgd3JpdHRlbiBpbnRvIFt0YXJnZXRdIGZyb20gcG9zaXRpb24gW2F0XS4KICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBub3QgY29udGFpbiBtb3JlIGVsZW1lbnRzIGFmdGVyIHdyaXRpbmcgdGhlIGxhc3QKICAgKiBwb3NpdGlvbiBvZiBbdGFyZ2V0XS4KICAgKgogICAqIElmIHRoZSBzb3VyY2UgaXMgYSBsaXN0LCB0aGUgW2NvcHlSYW5nZV0gZnVuY3Rpb24gaXMgbGlrZWx5IHRvIGJlIG1vcmUKICAgKiBlZmZpY2llbnQuCiAgICovCiAgc3RhdGljIHZvaWQgd3JpdGVJdGVyYWJsZTxUPihMaXN0PFQ+IHRhcmdldCwgaW50IGF0LCBJdGVyYWJsZTxUPiBzb3VyY2UpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoYXQsIDAsIHRhcmdldC5sZW5ndGgsICJhdCIpOwogICAgaW50IGluZGV4ID0gYXQ7CiAgICBpbnQgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0Lmxlbmd0aDsKICAgIGZvciAodmFyIGVsZW1lbnQgaW4gc291cmNlKSB7CiAgICAgIGlmIChpbmRleCA9PSB0YXJnZXRMZW5ndGgpIHsKICAgICAgICB0aHJvdyBJbmRleEVycm9yKHRhcmdldExlbmd0aCwgdGFyZ2V0KTsKICAgICAgfQogICAgICB0YXJnZXRbaW5kZXhdID0gZWxlbWVudDsKICAgICAgaW5kZXgrKzsKICAgIH0KICB9CgogIC8qKgogICAqIFJldHVybnMgYSB2aWV3IG9mIHRoaXMgbGlzdCBhcyBhIGxpc3Qgb2YgW1JdIGluc3RhbmNlcy4KICAgKgogICAqIElmIHRoaXMgbGlzdCBjb250YWlucyBvbmx5IGluc3RhbmNlcyBvZiBbUl0sIGFsbCByZWFkIG9wZXJhdGlvbnMKICAgKiB3aWxsIHdvcmsgY29ycmVjdGx5LiBJZiBhbnkgb3BlcmF0aW9uIHRyaWVzIHRvIGFjY2VzcyBhbiBlbGVtZW50CiAgICogdGhhdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgW1JdLCB0aGUgYWNjZXNzIHdpbGwgdGhyb3cgaW5zdGVhZC4KICAgKgogICAqIEVsZW1lbnRzIGFkZGVkIHRvIHRoZSBsaXN0IChlLmcuLCBieSB1c2luZyBbYWRkXSBvciBbYWRkQWxsXSkKICAgKiBtdXN0IGJlIGluc3RhbmNlIG9mIFtSXSB0byBiZSB2YWxpZCBhcmd1bWVudHMgdG8gdGhlIGFkZGluZyBmdW5jdGlvbiwKICAgKiBhbmQgdGhleSBtdXN0IGJlIGluc3RhbmNlcyBvZiBbRV0gYXMgd2VsbCB0byBiZSBhY2NlcHRlZCBieQogICAqIHRoaXMgbGlzdCBhcyB3ZWxsLgogICAqCiAgICogVHlwaWNhbGx5IGltcGxlbWVudGVkIGFzIGBMaXN0LmNhc3RGcm9tPEUsIFI+KHRoaXMpYC4KICAgKi8KICBMaXN0PFI+IGNhc3Q8Uj4oKTsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBvYmplY3QgYXQgdGhlIGdpdmVuIFtpbmRleF0gaW4gdGhlIGxpc3QKICAgKiBvciB0aHJvd3MgYSBbUmFuZ2VFcnJvcl0gaWYgW2luZGV4XSBpcyBvdXQgb2YgYm91bmRzLgogICAqLwogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIFtpbmRleF0gaW4gdGhlIGxpc3QgdG8gW3ZhbHVlXQogICAqIG9yIHRocm93cyBhIFtSYW5nZUVycm9yXSBpZiBbaW5kZXhdIGlzIG91dCBvZiBib3VuZHMuCiAgICovCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgZmlyc3QgcG9zaXRpb24gb2YgdGhlIGxpc3QgdG8gY29udGFpbiBbdmFsdWVdLgogICAqCiAgICogRXF1aXZhbGVudCB0byBgdGhlTGlzdFswXSA9IHZhbHVlO2AuCiAgICoKICAgKiBUaGUgbGlzdCBtdXN0IGJlIG5vbi1lbXB0eS4KICAgKi8KICB2b2lkIHNldCBmaXJzdChFIHZhbHVlKTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgbGlzdCB0byBjb250YWluIFt2YWx1ZV0uCiAgICoKICAgKiBFcXVpdmFsZW50IHRvIGB0aGVMaXN0W3RoZUxpc3QubGVuZ3RoIC0gMV0gPSB2YWx1ZTtgLgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBiZSBub24tZW1wdHkuCiAgICovCiAgdm9pZCBzZXQgbGFzdChFIHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhlIHZhbGlkIGluZGljZXMgZm9yIGEgbGlzdCBhcmUgYDBgIHRocm91Z2ggYGxlbmd0aCAtIDFgLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBDaGFuZ2VzIHRoZSBsZW5ndGggb2YgdGhpcyBsaXN0LgogICAqCiAgICogSWYgW25ld0xlbmd0aF0gaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGN1cnJlbnQgbGVuZ3RoLCBlbnRyaWVzIGFyZSBpbml0aWFsaXplZCB0byBbOm51bGw6XS4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoLgogICAqLwogIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCk7CgogIC8qKgogICAqIEFkZHMgW3ZhbHVlXSB0byB0aGUgZW5kIG9mIHRoaXMgbGlzdCwKICAgKiBleHRlbmRpbmcgdGhlIGxlbmd0aCBieSBvbmUuCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoZSBsaXN0IGlzIGZpeGVkLWxlbmd0aC4KICAgKi8KICB2b2lkIGFkZChFIHZhbHVlKTsKCiAgLyoqCiAgICogQXBwZW5kcyBhbGwgb2JqZWN0cyBvZiBbaXRlcmFibGVdIHRvIHRoZSBlbmQgb2YgdGhpcyBsaXN0LgogICAqCiAgICogRXh0ZW5kcyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJ5IHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiBbaXRlcmFibGVdLgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBsaXN0IGlzIGZpeGVkLWxlbmd0aC4KICAgKi8KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSk7CgogIC8qKgogICAqIFJldHVybnMgYW4gW0l0ZXJhYmxlXSBvZiB0aGUgb2JqZWN0cyBpbiB0aGlzIGxpc3QgaW4gcmV2ZXJzZSBvcmRlci4KICAgKi8KICBJdGVyYWJsZTxFPiBnZXQgcmV2ZXJzZWQ7CgogIC8qKgogICAqIFNvcnRzIHRoaXMgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyIHNwZWNpZmllZCBieSB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIFtjb21wYXJlXSBmdW5jdGlvbiBtdXN0IGFjdCBhcyBhIFtDb21wYXJhdG9yXS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbnVtYmVycyA9IFsndHdvJywgJ3RocmVlJywgJ2ZvdXInXTsKICAgKiAgICAgLy8gU29ydCBmcm9tIHNob3J0ZXN0IHRvIGxvbmdlc3QuCiAgICogICAgIG51bWJlcnMuc29ydCgoYSwgYikgPT4gYS5sZW5ndGguY29tcGFyZVRvKGIubGVuZ3RoKSk7CiAgICogICAgIHByaW50KG51bWJlcnMpOyAgLy8gW3R3bywgZm91ciwgdGhyZWVdCiAgICoKICAgKiBUaGUgZGVmYXVsdCBMaXN0IGltcGxlbWVudGF0aW9ucyB1c2UgW0NvbXBhcmFibGUuY29tcGFyZV0gaWYKICAgKiBbY29tcGFyZV0gaXMgb21pdHRlZC4KICAgKgogICAqICAgICBMaXN0PGludD4gbnVtcyA9IFsxMywgMiwgLTExXTsKICAgKiAgICAgbnVtcy5zb3J0KCk7CiAgICogICAgIHByaW50KG51bXMpOyAgLy8gWy0xMSwgMiwgMTNdCiAgICoKICAgKiBBIFtDb21wYXJhdG9yXSBtYXkgY29tcGFyZSBvYmplY3RzIGFzIGVxdWFsIChyZXR1cm4gemVybyksIGV2ZW4gaWYgdGhleQogICAqIGFyZSBkaXN0aW5jdCBvYmplY3RzLgogICAqIFRoZSBzb3J0IGZ1bmN0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZSwgc28gZGlzdGluY3Qgb2JqZWN0cwogICAqIHRoYXQgY29tcGFyZSBhcyBlcXVhbCBtYXkgb2NjdXIgaW4gYW55IG9yZGVyIGluIHRoZSByZXN1bHQ6CiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG51bWJlcnMgPSBbJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91ciddOwogICAqICAgICBudW1iZXJzLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoLmNvbXBhcmVUbyhiLmxlbmd0aCkpOwogICAqICAgICBwcmludChudW1iZXJzKTsgIC8vIFtvbmUsIHR3bywgZm91ciwgdGhyZWVdIE9SIFt0d28sIG9uZSwgZm91ciwgdGhyZWVdCiAgICovCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShFIGEsIEUgYildKTsKCiAgLyoqCiAgICogU2h1ZmZsZXMgdGhlIGVsZW1lbnRzIG9mIHRoaXMgbGlzdCByYW5kb21seS4KICAgKi8KICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb2YgW2VsZW1lbnRdIGluIHRoaXMgbGlzdC4KICAgKgogICAqIFNlYXJjaGVzIHRoZSBsaXN0IGZyb20gaW5kZXggW3N0YXJ0XSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAqIFRoZSBmaXJzdCB0aW1lIGFuIG9iamVjdCBbOm86XSBpcyBlbmNvdW50ZXJlZCBzbyB0aGF0IFs6byA9PSBlbGVtZW50Ol0sCiAgICogdGhlIGluZGV4IG9mIFs6bzpdIGlzIHJldHVybmVkLgogICAqCiAgICogICAgIExpc3Q8U3RyaW5nPiBub3RlcyA9IFsnZG8nLCAncmUnLCAnbWknLCAncmUnXTsKICAgKiAgICAgbm90ZXMuaW5kZXhPZigncmUnKTsgICAgLy8gMQogICAqICAgICBub3Rlcy5pbmRleE9mKCdyZScsIDIpOyAvLyAzCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtlbGVtZW50XSBpcyBub3QgZm91bmQuCiAgICoKICAgKiAgICAgbm90ZXMuaW5kZXhPZignZmEnKTsgICAgLy8gLTEKICAgKi8KICBpbnQgaW5kZXhPZihFIGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IGluIHRoZSBsaXN0IHRoYXQgc2F0aXNmaWVzIHRoZSBwcm92aWRlZCBbdGVzdF0uCiAgICoKICAgKiBTZWFyY2hlcyB0aGUgbGlzdCBmcm9tIGluZGV4IFtzdGFydF0gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgKiBUaGUgZmlyc3QgdGltZSBhbiBvYmplY3QgYG9gIGlzIGVuY291bnRlcmVkIHNvIHRoYXQgYHRlc3QobylgIGlzIHRydWUsCiAgICogdGhlIGluZGV4IG9mIGBvYCBpcyByZXR1cm5lZC4KICAgKgogICAqIGBgYAogICAqIExpc3Q8U3RyaW5nPiBub3RlcyA9IFsnZG8nLCAncmUnLCAnbWknLCAncmUnXTsKICAgKiBub3Rlcy5pbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSk7ICAgICAgIC8vIDEKICAgKiBub3Rlcy5pbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSwgMik7ICAgIC8vIDMKICAgKiBgYGAKICAgKgogICAqIFJldHVybnMgLTEgaWYgW2VsZW1lbnRdIGlzIG5vdCBmb3VuZC4KICAgKiBgYGAKICAgKiBub3Rlcy5pbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ2snKSk7ICAgIC8vIC0xCiAgICogYGBgCiAgICovCiAgaW50IGluZGV4V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxhc3QgaW5kZXggaW4gdGhlIGxpc3QgdGhhdCBzYXRpc2ZpZXMgdGhlIHByb3ZpZGVkIFt0ZXN0XS4KICAgKgogICAqIFNlYXJjaGVzIHRoZSBsaXN0IGZyb20gaW5kZXggW3N0YXJ0XSB0byAwLgogICAqIFRoZSBmaXJzdCB0aW1lIGFuIG9iamVjdCBgb2AgaXMgZW5jb3VudGVyZWQgc28gdGhhdCBgdGVzdChvKWAgaXMgdHJ1ZSwKICAgKiB0aGUgaW5kZXggb2YgYG9gIGlzIHJldHVybmVkLgogICAqCiAgICogYGBgCiAgICogTGlzdDxTdHJpbmc+IG5vdGVzID0gWydkbycsICdyZScsICdtaScsICdyZSddOwogICAqIG5vdGVzLmxhc3RJbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSk7ICAgICAgIC8vIDMKICAgKiBub3Rlcy5sYXN0SW5kZXhXaGVyZSgobm90ZSkgPT4gbm90ZS5zdGFydHNXaXRoKCdyJyksIDIpOyAgICAvLyAxCiAgICogYGBgCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtlbGVtZW50XSBpcyBub3QgZm91bmQuCiAgICogYGBgCiAgICogbm90ZXMubGFzdEluZGV4V2hlcmUoKG5vdGUpID0+IG5vdGUuc3RhcnRzV2l0aCgnaycpKTsgICAgLy8gLTEKICAgKiBgYGAKICAgKi8KICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIFtpbnQgc3RhcnRdKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGFzdCBpbmRleCBvZiBbZWxlbWVudF0gaW4gdGhpcyBsaXN0LgogICAqCiAgICogU2VhcmNoZXMgdGhlIGxpc3QgYmFja3dhcmRzIGZyb20gaW5kZXggW3N0YXJ0XSB0byAwLgogICAqCiAgICogVGhlIGZpcnN0IHRpbWUgYW4gb2JqZWN0IFs6bzpdIGlzIGVuY291bnRlcmVkIHNvIHRoYXQgWzpvID09IGVsZW1lbnQ6XSwKICAgKiB0aGUgaW5kZXggb2YgWzpvOl0gaXMgcmV0dXJuZWQuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG5vdGVzID0gWydkbycsICdyZScsICdtaScsICdyZSddOwogICAqICAgICBub3Rlcy5sYXN0SW5kZXhPZigncmUnLCAyKTsgLy8gMQogICAqCiAgICogSWYgW3N0YXJ0XSBpcyBub3QgcHJvdmlkZWQsIHRoaXMgbWV0aG9kIHNlYXJjaGVzIGZyb20gdGhlIGVuZCBvZiB0aGUKICAgKiBsaXN0Li9SZXR1cm5zCiAgICoKICAgKiAgICAgbm90ZXMubGFzdEluZGV4T2YoJ3JlJyk7ICAvLyAzCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtlbGVtZW50XSBpcyBub3QgZm91bmQuCiAgICoKICAgKiAgICAgbm90ZXMubGFzdEluZGV4T2YoJ2ZhJyk7ICAvLyAtMQogICAqLwogIGludCBsYXN0SW5kZXhPZihFIGVsZW1lbnQsIFtpbnQgc3RhcnRdKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgb2JqZWN0cyBmcm9tIHRoaXMgbGlzdDsKICAgKiB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJlY29tZXMgemVyby4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0sIGFuZCByZXRhaW5zIGFsbCBvYmplY3RzLCBpZiB0aGlzCiAgICogaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICB2b2lkIGNsZWFyKCk7CgogIC8qKgogICAqIEluc2VydHMgdGhlIG9iamVjdCBhdCBwb3NpdGlvbiBbaW5kZXhdIGluIHRoaXMgbGlzdC4KICAgKgogICAqIFRoaXMgaW5jcmVhc2VzIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYnkgb25lIGFuZCBzaGlmdHMgYWxsIG9iamVjdHMKICAgKiBhdCBvciBhZnRlciB0aGUgaW5kZXggdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBiZSBncm93YWJsZS4KICAgKiBUaGUgW2luZGV4XSB2YWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbm8gZ3JlYXRlciB0aGFuIFtsZW5ndGhdLgogICAqLwogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSBlbGVtZW50KTsKCiAgLyoqCiAgICogSW5zZXJ0cyBhbGwgb2JqZWN0cyBvZiBbaXRlcmFibGVdIGF0IHBvc2l0aW9uIFtpbmRleF0gaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhpcyBpbmNyZWFzZXMgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBieSB0aGUgbGVuZ3RoIG9mIFtpdGVyYWJsZV0gYW5kCiAgICogc2hpZnRzIGFsbCBsYXRlciBvYmplY3RzIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgKgogICAqIFRoZSBsaXN0IG11c3QgYmUgZ3Jvd2FibGUuCiAgICogVGhlIFtpbmRleF0gdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIG5vIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoXS4KICAgKi8KICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKTsKCiAgLyoqCiAgICogT3ZlcndyaXRlcyBvYmplY3RzIG9mIGB0aGlzYCB3aXRoIHRoZSBvYmplY3RzIG9mIFtpdGVyYWJsZV0sIHN0YXJ0aW5nCiAgICogYXQgcG9zaXRpb24gW2luZGV4XSBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBbJ2EnLCAnYicsICdjJ107CiAgICogICAgIGxpc3Quc2V0QWxsKDEsIFsnYmVlJywgJ3NlYSddKTsKICAgKiAgICAgbGlzdC5qb2luKCcsICcpOyAvLyAnYSwgYmVlLCBzZWEnCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIGB0aGlzYC4KICAgKgogICAqIFRoZSBbaW5kZXhdIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBubyBncmVhdGVyIHRoYW4gW2xlbmd0aF0uCiAgICoKICAgKiBUaGUgW2l0ZXJhYmxlXSBtdXN0IG5vdCBoYXZlIG1vcmUgZWxlbWVudHMgdGhhbiB3aGF0IGNhbiBmaXQgZnJvbSBbaW5kZXhdCiAgICogdG8gW2xlbmd0aF0uCiAgICoKICAgKiBJZiBgaXRlcmFibGVgIGlzIGJhc2VkIG9uIHRoaXMgbGlzdCwgaXRzIHZhbHVlcyBtYXkgY2hhbmdlIC9kdXJpbmcvIHRoZQogICAqIGBzZXRBbGxgIG9wZXJhdGlvbi4KICAgKi8KICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKTsKCiAgLyoqCiAgICogUmVtb3ZlcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBbdmFsdWVdIGZyb20gdGhpcyBsaXN0LgogICAqCiAgICogUmV0dXJucyB0cnVlIGlmIFt2YWx1ZV0gd2FzIGluIHRoZSBsaXN0LCBmYWxzZSBvdGhlcndpc2UuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gWydoZWFkJywgJ3Nob3VsZGVycycsICdrbmVlcycsICd0b2VzJ107CiAgICogICAgIHBhcnRzLnJlbW92ZSgnaGVhZCcpOyAvLyB0cnVlCiAgICogICAgIHBhcnRzLmpvaW4oJywgJyk7ICAgICAvLyAnc2hvdWxkZXJzLCBrbmVlcywgdG9lcycKICAgKgogICAqIFRoZSBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiBbdmFsdWVdIHdhcyBub3QgaW4gdGhlIGxpc3QuCiAgICoKICAgKiAgICAgLy8gTm90ZTogJ2hlYWQnIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KICAgKiAgICAgcGFydHMucmVtb3ZlKCdoZWFkJyk7IC8vIGZhbHNlCiAgICogICAgIHBhcnRzLmpvaW4oJywgJyk7ICAgICAvLyAnc2hvdWxkZXJzLCBrbmVlcywgdG9lcycKICAgKgogICAqIEFuIFtVbnN1cHBvcnRlZEVycm9yXSBvY2N1cnMgaWYgdGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoLgogICAqLwogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSk7CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIG9iamVjdCBhdCBwb3NpdGlvbiBbaW5kZXhdIGZyb20gdGhpcyBsaXN0LgogICAqCiAgICogVGhpcyBtZXRob2QgcmVkdWNlcyB0aGUgbGVuZ3RoIG9mIGB0aGlzYCBieSBvbmUgYW5kIG1vdmVzIGFsbCBsYXRlciBvYmplY3RzCiAgICogZG93biBieSBvbmUgcG9zaXRpb24uCiAgICoKICAgKiBSZXR1cm5zIHRoZSByZW1vdmVkIG9iamVjdC4KICAgKgogICAqIFRoZSBbaW5kZXhdIG11c3QgYmUgaW4gdGhlIHJhbmdlIGAwIOKJpCBpbmRleCA8IGxlbmd0aGAuCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoaXMgaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4gSW4gdGhhdCBjYXNlCiAgICogdGhlIGxpc3QgaXMgbm90IG1vZGlmaWVkLgogICAqLwogIEUgcmVtb3ZlQXQoaW50IGluZGV4KTsKCiAgLyoqCiAgICogUG9wcyBhbmQgcmV0dXJucyB0aGUgbGFzdCBvYmplY3QgaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBub3QgYmUgZW1wdHkuCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoaXMgaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICBFIHJlbW92ZUxhc3QoKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgb2JqZWN0cyBmcm9tIHRoaXMgbGlzdCB0aGF0IHNhdGlzZnkgW3Rlc3RdLgogICAqCiAgICogQW4gb2JqZWN0IFs6bzpdIHNhdGlzZmllcyBbdGVzdF0gaWYgWzp0ZXN0KG8pOl0gaXMgdHJ1ZS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbnVtYmVycyA9IFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ107CiAgICogICAgIG51bWJlcnMucmVtb3ZlV2hlcmUoKGl0ZW0pID0+IGl0ZW0ubGVuZ3RoID09IDMpOwogICAqICAgICBudW1iZXJzLmpvaW4oJywgJyk7IC8vICd0aHJlZSwgZm91cicKICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LgogICAqLwogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBvYmplY3RzIGZyb20gdGhpcyBsaXN0IHRoYXQgZmFpbCB0byBzYXRpc2Z5IFt0ZXN0XS4KICAgKgogICAqIEFuIG9iamVjdCBbOm86XSBzYXRpc2ZpZXMgW3Rlc3RdIGlmIFs6dGVzdChvKTpdIGlzIHRydWUuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG51bWJlcnMgPSBbJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91ciddOwogICAqICAgICBudW1iZXJzLnJldGFpbldoZXJlKChpdGVtKSA9PiBpdGVtLmxlbmd0aCA9PSAzKTsKICAgKiAgICAgbnVtYmVycy5qb2luKCcsICcpOyAvLyAnb25lLCB0d28nCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoaXMgaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIGxpc3QgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGZvbGxvd2VkIGJ5CiAgICogdGhlIGVsZW1lbnRzIG9mIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byByZXR1cm4gYSBub3JtYWwgZ3Jvd2FibGUgbGlzdC4KICAgKiBTb21lIGxpc3QgdHlwZXMgbWF5IGNob29zZSB0byByZXR1cm4gYSBsaXN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlbXNlbHZlcwogICAqIChzZWUgW1VpbnQ4TGlzdC4rXSk7CiAgICovCiAgTGlzdDxFPiBvcGVyYXRvciArKExpc3Q8RT4gb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhIGBMaXN0PEU+YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzIGxpc3QgYXQKICAgKiBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbiB0aGUgc2FtZQogICAqIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBjb2xvcnMgPSBbInJlZCIsICJncmVlbiIsICJibHVlIiwgIm9yYW5nZSIsICJwaW5rIl07CiAgICogcHJpbnQoY29sb3JzLnN1Ymxpc3QoMSwgMykpOyAvLyBbZ3JlZW4sIGJsdWVdCiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KGNvbG9ycy5zdWJsaXN0KDEpKTsgLy8gW2dyZWVuLCBibHVlLCBvcmFuZ2UsIHBpbmtdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIC8qKgogICAqIFJldHVybnMgYW4gW0l0ZXJhYmxlXSB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIG9iamVjdHMgaW4gdGhlIHJhbmdlCiAgICogW3N0YXJ0XSBpbmNsdXNpdmUgdG8gW2VuZF0gZXhjbHVzaXZlLgogICAqCiAgICogVGhlIHByb3ZpZGVkIHJhbmdlLCBnaXZlbiBieSBbc3RhcnRdIGFuZCBbZW5kXSwgbXVzdCBiZSB2YWxpZCBhdCB0aGUgdGltZQogICAqIG9mIHRoZSBjYWxsLgogICAqCiAgICogQSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gaXMgdmFsaWQgaWYgYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxlbmAsIHdoZXJlCiAgICogYGxlbmAgaXMgdGhpcyBsaXN0J3MgYGxlbmd0aGAuIFRoZSByYW5nZSBzdGFydHMgYXQgYHN0YXJ0YCBhbmQgaGFzIGxlbmd0aAogICAqIGBlbmQgLSBzdGFydGAuIEFuIGVtcHR5IHJhbmdlICh3aXRoIGBlbmQgPT0gc3RhcnRgKSBpcyB2YWxpZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBbSXRlcmFibGVdIGJlaGF2ZXMgbGlrZSBgc2tpcChzdGFydCkudGFrZShlbmQgLSBzdGFydClgLgogICAqIFRoYXQgaXMsIGl0IGRvZXMgKm5vdCogdGhyb3cgaWYgdGhpcyBsaXN0IGNoYW5nZXMgc2l6ZS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gY29sb3JzID0gWydyZWQnLCAnZ3JlZW4nLCAnYmx1ZScsICdvcmFuZ2UnLCAncGluayddOwogICAqICAgICBJdGVyYWJsZTxTdHJpbmc+IHJhbmdlID0gY29sb3JzLmdldFJhbmdlKDEsIDQpOwogICAqICAgICByYW5nZS5qb2luKCcsICcpOyAgLy8gJ2dyZWVuLCBibHVlLCBvcmFuZ2UnCiAgICogICAgIGNvbG9ycy5sZW5ndGggPSAzOwogICAqICAgICByYW5nZS5qb2luKCcsICcpOyAgLy8gJ2dyZWVuLCBibHVlJwogICAqLwogIEl0ZXJhYmxlPEU+IGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCk7CgogIC8qKgogICAqIENvcGllcyB0aGUgb2JqZWN0cyBvZiBbaXRlcmFibGVdLCBza2lwcGluZyBbc2tpcENvdW50XSBvYmplY3RzIGZpcnN0LAogICAqIGludG8gdGhlIHJhbmdlIFtzdGFydF0sIGluY2x1c2l2ZSwgdG8gW2VuZF0sIGV4Y2x1c2l2ZSwgb2YgdGhlIGxpc3QuCiAgICoKICAgKiAgICAgTGlzdDxpbnQ+IGxpc3QxID0gWzEsIDIsIDMsIDRdOwogICAqICAgICBMaXN0PGludD4gbGlzdDIgPSBbNSwgNiwgNywgOCwgOV07CiAgICogICAgIC8vIENvcGllcyB0aGUgNHRoIGFuZCA1dGggaXRlbXMgaW4gbGlzdDIgYXMgdGhlIDJuZCBhbmQgM3JkIGl0ZW1zCiAgICogICAgIC8vIG9mIGxpc3QxLgogICAqICAgICBsaXN0MS5zZXRSYW5nZSgxLCAzLCBsaXN0MiwgMyk7CiAgICogICAgIGxpc3QxLmpvaW4oJywgJyk7IC8vICcxLCA4LCA5LCA0JwogICAqCiAgICogVGhlIHByb3ZpZGVkIHJhbmdlLCBnaXZlbiBieSBbc3RhcnRdIGFuZCBbZW5kXSwgbXVzdCBiZSB2YWxpZC4KICAgKiBBIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBpcyB2YWxpZCBpZiBgMCA8PSBzdGFydCA8PSBlbmQgPD0gbGVuYCwgd2hlcmUKICAgKiBgbGVuYCBpcyB0aGlzIGxpc3QncyBgbGVuZ3RoYC4gVGhlIHJhbmdlIHN0YXJ0cyBhdCBgc3RhcnRgIGFuZCBoYXMgbGVuZ3RoCiAgICogYGVuZCAtIHN0YXJ0YC4gQW4gZW1wdHkgcmFuZ2UgKHdpdGggYGVuZCA9PSBzdGFydGApIGlzIHZhbGlkLgogICAqCiAgICogVGhlIFtpdGVyYWJsZV0gbXVzdCBoYXZlIGVub3VnaCBvYmplY3RzIHRvIGZpbGwgdGhlIHJhbmdlIGZyb20gYHN0YXJ0YAogICAqIHRvIGBlbmRgIGFmdGVyIHNraXBwaW5nIFtza2lwQ291bnRdIG9iamVjdHMuCiAgICoKICAgKiBJZiBgaXRlcmFibGVgIGlzIHRoaXMgbGlzdCwgdGhlIG9wZXJhdGlvbiBjb3BpZXMgdGhlIGVsZW1lbnRzCiAgICogb3JpZ2luYWxseSBpbiB0aGUgcmFuZ2UgZnJvbSBgc2tpcENvdW50YCB0byBgc2tpcENvdW50ICsgKGVuZCAtIHN0YXJ0KWAgdG8KICAgKiB0aGUgcmFuZ2UgYHN0YXJ0YCB0byBgZW5kYCwgZXZlbiBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLgogICAqCiAgICogSWYgYGl0ZXJhYmxlYCBkZXBlbmRzIG9uIHRoaXMgbGlzdCBpbiBzb21lIG90aGVyIHdheSwgbm8gZ3VhcmFudGVlcyBhcmUKICAgKiBtYWRlLgogICAqLwogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSk7CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIG9iamVjdHMgaW4gdGhlIHJhbmdlIFtzdGFydF0gaW5jbHVzaXZlIHRvIFtlbmRdIGV4Y2x1c2l2ZS4KICAgKgogICAqIFRoZSBwcm92aWRlZCByYW5nZSwgZ2l2ZW4gYnkgW3N0YXJ0XSBhbmQgW2VuZF0sIG11c3QgYmUgdmFsaWQuCiAgICogQSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gaXMgdmFsaWQgaWYgYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxlbmAsIHdoZXJlCiAgICogYGxlbmAgaXMgdGhpcyBsaXN0J3MgYGxlbmd0aGAuIFRoZSByYW5nZSBzdGFydHMgYXQgYHN0YXJ0YCBhbmQgaGFzIGxlbmd0aAogICAqIGBlbmQgLSBzdGFydGAuIEFuIGVtcHR5IHJhbmdlICh3aXRoIGBlbmQgPT0gc3RhcnRgKSBpcyB2YWxpZC4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LiBJbiB0aGF0IGNhc2UKICAgKiB0aGUgbGlzdCBpcyBub3QgbW9kaWZpZWQuCiAgICovCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvKioKICAgKiBTZXRzIHRoZSBvYmplY3RzIGluIHRoZSByYW5nZSBbc3RhcnRdIGluY2x1c2l2ZSB0byBbZW5kXSBleGNsdXNpdmUKICAgKiB0byB0aGUgZ2l2ZW4gW2ZpbGxWYWx1ZV0uCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgcmFuZ2UsIGdpdmVuIGJ5IFtzdGFydF0gYW5kIFtlbmRdLCBtdXN0IGJlIHZhbGlkLgogICAqIEEgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGlzIHZhbGlkIGlmIGAwIDw9IHN0YXJ0IDw9IGVuZCA8PSBsZW5gLCB3aGVyZQogICAqIGBsZW5gIGlzIHRoaXMgbGlzdCdzIGBsZW5ndGhgLiBUaGUgcmFuZ2Ugc3RhcnRzIGF0IGBzdGFydGAgYW5kIGhhcyBsZW5ndGgKICAgKiBgZW5kIC0gc3RhcnRgLiBBbiBlbXB0eSByYW5nZSAod2l0aCBgZW5kID09IHN0YXJ0YCkgaXMgdmFsaWQuCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYGRhcnQKICAgKiAgTGlzdDxpbnQ+IGxpc3QgPSBuZXcgTGlzdCgzKTsKICAgKiAgICAgbGlzdC5maWxsUmFuZ2UoMCwgMiwgMSk7CiAgICogICAgIHByaW50KGxpc3QpOyAvLyAgWzEsIDEsIG51bGxdCiAgICogYGBgCiAgICoKICAgKi8KICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtFIGZpbGxWYWx1ZV0pOwoKICAvKioKICAgKiBSZW1vdmVzIHRoZSBvYmplY3RzIGluIHRoZSByYW5nZSBbc3RhcnRdIGluY2x1c2l2ZSB0byBbZW5kXSBleGNsdXNpdmUKICAgKiBhbmQgaW5zZXJ0cyB0aGUgY29udGVudHMgb2YgW3JlcGxhY2VtZW50XSBpbiBpdHMgcGxhY2UuCiAgICoKICAgKiAgICAgTGlzdDxpbnQ+IGxpc3QgPSBbMSwgMiwgMywgNCwgNV07CiAgICogICAgIGxpc3QucmVwbGFjZVJhbmdlKDEsIDQsIFs2LCA3XSk7CiAgICogICAgIGxpc3Quam9pbignLCAnKTsgLy8gJzEsIDYsIDcsIDUnCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgcmFuZ2UsIGdpdmVuIGJ5IFtzdGFydF0gYW5kIFtlbmRdLCBtdXN0IGJlIHZhbGlkLgogICAqIEEgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGlzIHZhbGlkIGlmIGAwIDw9IHN0YXJ0IDw9IGVuZCA8PSBsZW5gLCB3aGVyZQogICAqIGBsZW5gIGlzIHRoaXMgbGlzdCdzIGBsZW5ndGhgLiBUaGUgcmFuZ2Ugc3RhcnRzIGF0IGBzdGFydGAgYW5kIGhhcyBsZW5ndGgKICAgKiBgZW5kIC0gc3RhcnRgLiBBbiBlbXB0eSByYW5nZSAod2l0aCBgZW5kID09IHN0YXJ0YCkgaXMgdmFsaWQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB3b3JrIG9uIGZpeGVkLWxlbmd0aCBsaXN0cywgZXZlbiB3aGVuIFtyZXBsYWNlbWVudF0KICAgKiBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzIGFzIHRoZSByZXBsYWNlZCByYW5nZS4gSW4gdGhhdCBjYXNlIHVzZQogICAqIFtzZXRSYW5nZV0gaW5zdGVhZC4KICAgKi8KICB2b2lk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U0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgTGlzdDxFPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBMaXN0KFtpbnQgbGVuZ3RoXSkgbmF0aXZlICJMaXN0X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgTGlzdC5maWxsZWQoaW50IGxlbmd0aCwgRSBmaWxsLCB7Ym9vbCBncm93YWJsZTogZmFsc2V9KSB7CiAgICAvLyBBbGwgZXJyb3IgaGFuZGxpbmcgb24gdGhlIGxlbmd0aCBwYXJhbWV0ZXIgaXMgZG9uZSBhdCB0aGUgaW1wbGVtZW50YXRpb24KICAgIC8vIG9mIG5ldyBfTGlzdC4KICAgIHZhciByZXN1bHQgPSBncm93YWJsZSA/IG5ldyBfR3Jvd2FibGVMaXN0PEU+KGxlbmd0aCkgOiBuZXcgX0xpc3Q8RT4obGVuZ3RoKTsKICAgIGlmIChmaWxsICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHJlc3VsdFtpXSA9IGZpbGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IExpc3QuZnJvbShJdGVyYWJsZSBlbGVtZW50cywge2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBpZiAoZWxlbWVudHMgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4pIHsKICAgICAgaW50IGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKICAgICAgdmFyIGxpc3QgPSBncm93YWJsZSA/IG5ldyBfR3Jvd2FibGVMaXN0PEU+KGxlbmd0aCkgOiBuZXcgX0xpc3Q8RT4obGVuZ3RoKTsKICAgICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgICAvLyBBdm9pZCBjcmVhdGluZyBpdGVyYXRvciB1bmxlc3MgbmVjZXNzYXJ5LgogICAgICAgIGludCBpID0gMDsKICAgICAgICBmb3IgKHZhciBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgICAgICBsaXN0W2krK10gPSBlbGVtZW50OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbGlzdDsKICAgIH0KICAgIC8vIElmIGVsZW1lbnRzIGlzIGFuIEl0ZXJhYmxlPEU+LCB3ZSB3b24ndCBuZWVkIGEgdHlwZS10ZXN0IGZvciBlYWNoCiAgICAvLyBlbGVtZW50LiBJbiB0aGUgImNvbW1vbiBjYXNlIiB0aGF0IGVsZW1lbnRzIGlzIGFuIEl0ZXJhYmxlPEU+LCB0aGlzCiAgICAvLyByZXBsYWNlcyBhIHR5cGUtdGVzdCBvbiBldmVyeSBlbGVtZW50IHdpdGggYSBzaW5nbGUgdHlwZS10ZXN0IGJlZm9yZQogICAgLy8gc3RhcnRpbmcgdGhlIGxvb3AuCiAgICBpZiAoZWxlbWVudHMgaXMgSXRlcmFibGU8RT4pIHsKICAgICAgTGlzdDxFPiBsaXN0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4oMCk7CiAgICAgIGZvciAoRSBlIGluIGVsZW1lbnRzKSB7CiAgICAgICAgbGlzdC5hZGQoZSk7CiAgICAgIH0KICAgICAgaWYgKGdyb3dhYmxlKSByZXR1cm4gbGlzdDsKICAgICAgcmV0dXJuIG1ha2VMaXN0Rml4ZWRMZW5ndGgobGlzdCk7CiAgICB9IGVsc2UgewogICAgICBMaXN0PEU+IGxpc3QgPSBuZXcgX0dyb3dhYmxlTGlzdDxFPigwKTsKICAgICAgZm9yIChFIGUgaW4gZWxlbWVudHMpIHsKICAgICAgICBsaXN0LmFkZChlKTsKICAgICAgfQogICAgICBpZiAoZ3Jvd2FibGUpIHJldHVybiBsaXN0OwogICAgICByZXR1cm4gbWFrZUxpc3RGaXhlZExlbmd0aChsaXN0KTsKICAgIH0KICB9CgogIEBwYXRjaAogIGZhY3RvcnkgTGlzdC51bm1vZGlmaWFibGUoSXRlcmFibGUgZWxlbWVudHMpIHsKICAgIGZpbmFsIHJlc3VsdCA9IG5ldyBMaXN0PEU+LmZyb20oZWxlbWVudHMsIGdyb3dhYmxlOiBmYWxzZSk7CiAgICByZXR1cm4gbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZShyZXN1bHQpOwogIH0KCiAgLy8gRmFjdG9yeSBjb25zdHJ1Y3RpbmcgYSBtdXRhYmxlIExpc3QgZnJvbSBhIHBhcnNlciBnZW5lcmF0ZWQgTGlzdCBsaXRlcmFsLgogIC8vIFtlbGVtZW50c10gY29udGFpbnMgZWxlbWVudHMgdGhhdCBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgZmFjdG9yeSBMaXN0Ll9mcm9tTGl0ZXJhbChMaXN0IGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMuaXNFbXB0eSkgewogICAgICByZXR1cm4gbmV3IF9Hcm93YWJsZUxpc3Q8RT4oMCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKGVsZW1lbnRzKTsKICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGVsZW1lbnRzLmxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQpPAE5OPAEeAQcQCTABCURQFVEYKRoIBhMEAQlAMiRRGDUTKB8KCBMGSUtMGiMuHhUIISgNLh4VCCEoBgQBCTFALgQBT0EkLRwmBjsoEwQCASBkYXJ0OmNvcmUtcGF0Y2gvYXJyYXlfcGF0Y2guZGFydClvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9tYXAuZGFydLRnLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgY29sbGVjdGlvbiBvZiBrZXkvdmFsdWUgcGFpcnMsIGZyb20gd2hpY2ggeW91IHJldHJpZXZlIGEgdmFsdWUKICogdXNpbmcgaXRzIGFzc29jaWF0ZWQga2V5LgogKgogKiBUaGVyZSBpcyBhIGZpbml0ZSBudW1iZXIgb2Yga2V5cyBpbiB0aGUgbWFwLAogKiBhbmQgZWFjaCBrZXkgaGFzIGV4YWN0bHkgb25lIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdC4KICoKICogTWFwcywgYW5kIHRoZWlyIGtleXMgYW5kIHZhbHVlcywgY2FuIGJlIGl0ZXJhdGVkLgogKiBUaGUgb3JkZXIgb2YgaXRlcmF0aW9uIGlzIGRlZmluZWQgYnkgdGhlIGluZGl2aWR1YWwgdHlwZSBvZiBtYXAuCiAqIEV4YW1wbGVzOgogKgogKiAqIFRoZSBwbGFpbiBbSGFzaE1hcF0gaXMgdW5vcmRlcmVkIChubyBvcmRlciBpcyBndWFyYW50ZWVkKSwKICogKiB0aGUgW0xpbmtlZEhhc2hNYXBdIGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIsCiAqICogYW5kIGEgc29ydGVkIG1hcCBsaWtlIFtTcGxheVRyZWVNYXBdIGl0ZXJhdGVzIHRoZSBrZXlzIGluIHNvcnRlZCBvcmRlci4KICoKICogSXQgaXMgZ2VuZXJhbGx5IG5vdCBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgbWFwIChhZGQgb3IgcmVtb3ZlIGtleXMpIHdoaWxlCiAqIGFuIG9wZXJhdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQgb24gdGhlIG1hcCwgZm9yIGV4YW1wbGUgaW4gZnVuY3Rpb25zIGNhbGxlZAogKiBkdXJpbmcgYSBbZm9yRWFjaF0gb3IgW3B1dElmQWJzZW50XSBjYWxsLgogKiBNb2RpZnlpbmcgdGhlIG1hcCB3aGlsZSBpdGVyYXRpbmcgdGhlIGtleXMgb3IgdmFsdWVzCiAqIG1heSBhbHNvIGJyZWFrIHRoZSBpdGVyYXRpb24uCiAqCiAqIEl0IGlzIGdlbmVyYWxseSBub3QgYWxsb3dlZCB0byBtb2RpZnkgdGhlIGVxdWFsaXR5IG9mIGtleXMgKGFuZCB0aHVzIG5vdAogKiB0aGVpciBoYXNoY29kZSkgd2hpbGUgdGhleSBhcmUgaW4gdGhlIG1hcC4gU29tZSBzcGVjaWFsaXplZCBzdWJ0eXBlcyBtYXkgYmUKICogbW9yZSBwZXJtaXNzaXZlLCBpbiB3aGljaCBjYXNlIHRoZXkgc2hvdWxkIGRvY3VtZW50IHRoaXMgYmVoYXZpb3IuCiAqLwphYnN0cmFjdCBjbGFzcyBNYXA8SywgVj4gewogIC8qKgogICAqIENyZWF0ZXMgYSBNYXAgaW5zdGFuY2Ugd2l0aCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgW0xpbmtlZEhhc2hNYXBdLgogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBpcyBlcXVpdmFsZW50IHRvIHRoZSBub24tY29uc3QgbWFwIGxpdGVyYWwgYDxLLFY+e31gLgogICAqCiAgICogQSBgTGlua2VkSGFzaE1hcGAgcmVxdWlyZXMgdGhlIGtleXMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUKICAgKiBgb3BlcmF0b3I9PWAgYW5kIGBoYXNoQ29kZWAsIGFuZCBpdCBhbGxvd3MgbnVsbCBhcyBhIGtleS4KICAgKiBJdCBpdGVyYXRlcyBpbiBrZXkgaW5zZXJ0aW9uIG9yZGVyLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgTWFwKCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gaW5zdGFuY2UgdGhhdCBjb250YWlucyBhbGwga2V5L3ZhbHVlIHBhaXJzIG9mCiAgICogW290aGVyXS4KICAgKgogICAqIFRoZSBrZXlzIG11c3QgYWxsIGJlIGluc3RhbmNlcyBvZiBbS10gYW5kIHRoZSB2YWx1ZXMgb2YgW1ZdLgogICAqIFRoZSBbb3RoZXJdIG1hcCBpdHNlbGYgY2FuIGhhdmUgYW55IHR5cGUuCiAgICoKICAgKiBBIGBMaW5rZWRIYXNoTWFwYCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBgbnVsbGAgYXMgYSBrZXkuCiAgICogSXQgaXRlcmF0ZXMgaW4ga2V5IGluc2VydGlvbiBvcmRlci4KICAgKi8KICBmYWN0b3J5IE1hcC5mcm9tKE1hcCBvdGhlcikgPSBMaW5rZWRIYXNoTWFwPEssIFY+LmZyb207CgogIC8qKgogICAqIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgW290aGVyXS4KICAgKgogICAqIEEgYExpbmtlZEhhc2hNYXBgIHJlcXVpcmVzIHRoZSBrZXlzIHRvIGltcGxlbWVudCBjb21wYXRpYmxlCiAgICogYG9wZXJhdG9yPT1gIGFuZCBgaGFzaENvZGVgLCBhbmQgaXQgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KICAgKiBJdCBpdGVyYXRlcyBpbiBrZXkgaW5zZXJ0aW9uIG9yZGVyLgogICAqLwogIGZhY3RvcnkgTWFwLm9mKE1hcDxLLCBWPiBvdGhlcikgPSBMaW5rZWRIYXNoTWFwPEssIFY+Lm9mOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIHVubW9kaWZpYWJsZSBoYXNoIGJhc2VkIG1hcCBjb250YWluaW5nIHRoZSBlbnRyaWVzIG9mIFtvdGhlcl0uCiAgICoKICAgKiBUaGUga2V5cyBtdXN0IGFsbCBiZSBpbnN0YW5jZXMgb2YgW0tdIGFuZCB0aGUgdmFsdWVzIG9mIFtWXS4KICAgKiBUaGUgW290aGVyXSBtYXAgaXRzZWxmIGNhbiBoYXZlIGFueSB0eXBlLgogICAqCiAgICogVGhlIG1hcCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBgbnVsbGAgYXMgYSBrZXkuCiAgICogVGhlIGNyZWF0ZWQgbWFwIGl0ZXJhdGVzIGtleXMgaW4gYSBmaXhlZCBvcmRlciwKICAgKiBwcmVzZXJ2aW5nIHRoZSBvcmRlciBwcm92aWRlZCBieSBbb3RoZXJdLgogICAqCiAgICogVGhlIHJlc3VsdGluZyBtYXAgYmVoYXZlcyBsaWtlIHRoZSByZXN1bHQgb2YgW01hcC5mcm9tXSwKICAgKiBleGNlcHQgdGhhdCB0aGUgbWFwIHJldHVybmVkIGJ5IHRoaXMgY29uc3RydWN0b3IgaXMgbm90IG1vZGlmaWFibGUuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBNYXAudW5tb2RpZmlhYmxlKE1hcCBvdGhlcik7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgbWFwIHdpdGggdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIFtMaW5rZWRIYXNoTWFwXS4KICAgKgogICAqIEFuIGlkZW50aXR5IG1hcCB1c2VzIFtpZGVudGljYWxdIGZvciBlcXVhbGl0eSBhbmQgW2lkZW50aXR5SGFzaENvZGVdCiAgICogZm9yIGhhc2ggY29kZXMgb2Yga2V5cyBpbnN0ZWFkIG9mIHRoZSBpbnRyaW5zaWMgW09iamVjdC5vcGVyYXRvcj09XSBhbmQKICAgKiBbT2JqZWN0Lmhhc2hDb2RlXSBvZiB0aGUga2V5cy4KICAgKgogICAqIFRoZSByZXR1cm5lZCBtYXAgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KICAgKiBJdCBpdGVyYXRlcyBpbiBrZXkgaW5zZXJ0aW9uIG9yZGVyLgogICAqLwogIGZhY3RvcnkgTWFwLmlkZW50aXR5KCkgPSBMaW5rZWRIYXNoTWFwPEssIFY+LmlkZW50aXR5OwoKICAvKioKICAgKiBDcmVhdGVzIGEgTWFwIGluc3RhbmNlIGluIHdoaWNoIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgICogW2l0ZXJhYmxlXS4KICAgKgogICAqIFRoZSBjcmVhdGVkIG1hcCBpcyBhIFtMaW5rZWRIYXNoTWFwXS4KICAgKiBBIGBMaW5rZWRIYXNoTWFwYCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBudWxsIGFzIGEga2V5LgogICAqIEl0IGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAgICoKICAgKiBGb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBbaXRlcmFibGVdIHRoaXMgY29uc3RydWN0b3IgY29tcHV0ZXMgYSBrZXkvdmFsdWUKICAgKiBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgICoKICAgKiBUaGUgZXhhbXBsZSBiZWxvdyBjcmVhdGVzIGEgbmV3IE1hcCBmcm9tIGEgTGlzdC4gVGhlIGtleXMgb2YgYG1hcGAgYXJlCiAgICogYGxpc3RgIHZhbHVlcyBjb252ZXJ0ZWQgdG8gc3RyaW5ncywgYW5kIHRoZSB2YWx1ZXMgb2YgdGhlIGBtYXBgIGFyZSB0aGUKICAgKiBzcXVhcmVzIG9mIHRoZSBgbGlzdGAgdmFsdWVzOgogICAqCiAgICogICAgIExpc3Q8aW50PiBsaXN0ID0gWzEsIDIsIDNdOwogICAqICAgICBNYXA8U3RyaW5nLCBpbnQ+IG1hcCA9IG5ldyBNYXAuZnJvbUl0ZXJhYmxlKGxpc3QsCiAgICogICAgICAgICBrZXk6IChpdGVtKSA9PiBpdGVtLnRvU3RyaW5nKCksCiAgICogICAgICAgICB2YWx1ZTogKGl0ZW0pID0+IGl0ZW0gKiBpdGVtKTsKICAgKgogICAqICAgICBtYXBbJzEnXSArIG1hcFsnMiddOyAvLyAxICsgNAogICAqICAgICBtYXBbJzMnXSAtIG1hcFsnMiddOyAvLyA5IC0gNAogICAqCiAgICogSWYgbm8gdmFsdWVzIGFyZSBzcGVjaWZpZWQgZm9yIFtrZXldIGFuZCBbdmFsdWVdIHRoZSBkZWZhdWx0IGlzIHRoZQogICAqIGlkZW50aXR5IGZ1bmN0aW9uLgogICAqCiAgICogSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUga2V5cyBhbmQgY29ycmVzcG9uZGluZyB2YWx1ZXMgb2YgYG1hcGAKICAgKiBhcmUgYGxpc3RgIHZhbHVlczoKICAgKgogICAqICAgICBtYXAgPSBuZXcgTWFwLmZyb21JdGVyYWJsZShsaXN0KTsKICAgKiAgICAgbWFwWzFdICsgbWFwWzJdOyAvLyAxICsgMgogICAqICAgICBtYXBbM10gLSBtYXBbMl07IC8vIDMgLSAyCiAgICoKICAgKiBUaGUga2V5cyBjb21wdXRlZCBieSB0aGUgc291cmNlIFtpdGVyYWJsZV0gZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUKICAgKiBsYXN0IG9jY3VycmVuY2Ugb2YgYSBrZXkgd2lsbCBzaW1wbHkgb3ZlcndyaXRlIGFueSBwcmV2aW91cyB2YWx1ZS4KICAgKi8KICBmYWN0b3J5IE1hcC5mcm9tSXRlcmFibGUoSXRlcmFibGUgaXRlcmFibGUsCiAgICAgIHtLIGtleShlbGVtZW50KSwgViB2YWx1ZShlbGVtZW50KX0pID0gTGlua2VkSGFzaE1hcDxLLCBWPi5mcm9tSXRlcmFibGU7CgogIC8qKgogICAqIENyZWF0ZXMgYSBNYXAgaW5zdGFuY2UgYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAgKgogICAqIFRoZSBjcmVhdGVkIG1hcCBpcyBhIFtMaW5rZWRIYXNoTWFwXS4KICAgKiBBIGBMaW5rZWRIYXNoTWFwYCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBudWxsIGFzIGEga2V5LgogICAqIEl0IGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGl0ZXJhdGVzIG92ZXIgW2tleXNdIGFuZCBbdmFsdWVzXSBhbmQgbWFwcyBlYWNoIGVsZW1lbnQgb2YKICAgKiBba2V5c10gdG8gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBbdmFsdWVzXS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbGV0dGVycyA9IFsnYicsICdjJ107CiAgICogICAgIExpc3Q8U3RyaW5nPiB3b3JkcyA9IFsnYmFkJywgJ2NhdCddOwogICAqICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG5ldyBNYXAuZnJvbUl0ZXJhYmxlcyhsZXR0ZXJzLCB3b3Jkcyk7CiAgICogICAgIG1hcFsnYiddICsgbWFwWydjJ107ICAvLyBiYWRjYXQKICAgKgogICAqIElmIFtrZXlzXSBjb250YWlucyB0aGUgc2FtZSBvYmplY3QgbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9jY3VycmVuY2UKICAgKiBvdmVyd3JpdGVzIHRoZSBwcmV2aW91cyB2YWx1ZS4KICAgKgogICAqIFRoZSB0d28gW0l0ZXJhYmxlXXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4KICAgKi8KICBmYWN0b3J5IE1hcC5mcm9tSXRlcmFibGVzKEl0ZXJhYmxlPEs+IGtleXMsIEl0ZXJhYmxlPFY+IHZhbHVlcykgPQogICAgICBMaW5rZWRIYXNoTWFwPEssIFY+LmZyb21JdGVyYWJsZXM7CgogIC8qKgogICAqIEFkYXB0cyBbc291cmNlXSB0byBiZSBhIGBNYXA8SzIsIFYyPmAuCiAgICoKICAgKiBBbnkgdGltZSB0aGUgc2V0IHdvdWxkIHByb2R1Y2UgYSBrZXkgb3IgdmFsdWUgdGhhdCBpcyBub3QgYSBbSzJdIG9yIFtWMl0sCiAgICogdGhlIGFjY2VzcyB3aWxsIHRocm93LgogICAqCiAgICogQW55IHRpbWUgW0syXSBrZXkgb3IgW1YyXSB2YWx1ZSBpcyBhdHRlbXB0ZWQgYWRkZWQgaW50byB0aGUgYWRhcHRlZCBtYXAsCiAgICogdGhlIHN0b3JlIHdpbGwgdGhyb3cgdW5sZXNzIHRoZSBrZXkgaXMgYWxzbyBhbiBpbnN0YW5jZSBvZiBbS10gYW5kCiAgICogdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1ZdLgogICAqCiAgICogSWYgYWxsIGFjY2Vzc2VkIGVudHJpZXMgb2YgW3NvdXJjZV0gYXJlIGhhdmUgW0syXSBrZXlzIGFuZCBbVjJdIHZhbHVlcwogICAqIGFuZCBpZiBhbGwgZW50cmllcyBhZGRlZCB0byB0aGUgcmV0dXJuZWQgbWFwIGhhdmUgW0tdIGtleXMgYW5kIFtWXV0gdmFsdWVzLAogICAqIHRoZW4gdGhlIHJldHVybmVkIG1hcCBjYW4gYmUgdXNlZCBhcyBhIGBNYXA8SzIsIFYyPmAuCiAgICovCiAgc3RhdGljIE1hcDxLMiwgVjI+IGNhc3RGcm9tPEssIFYsIEsyLCBWMj4oTWFwPEssIFY+IHNvdXJjZSkgPT4KICAgICAgQ2FzdE1hcDxLLCBWLCBLMiwgVjI+KHNvdXJjZSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgbWFwIGFuZCBhZGRzIGFsbCBlbnRyaWVzLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBgTWFwPEssIFY+YCB3aGVyZSBhbGwgZW50cmllcyBvZiBbZW50cmllc10KICAgKiBoYXZlIGJlZW4gYWRkZWQgaW4gaXRlcmF0aW9uIG9yZGVyLgogICAqCiAgICogSWYgbXVsdGlwbGUgW2VudHJpZXNdIGhhdmUgdGhlIHNhbWUga2V5LAogICAqIGxhdGVyIG9jY3VycmVuY2VzIG92ZXJ3cml0ZSB0aGUgZWFybGllciBvbmVzLgogICAqLwogIGZhY3RvcnkgTWFwLmZyb21FbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSA9PgogICAgICA8SywgVj57fS4uYWRkRW50cmllcyhlbnRyaWVzKTsKCiAgLyoqCiAgICogUHJvdmlkZXMgYSB2aWV3IG9mIHRoaXMgbWFwIGFzIGhhdmluZyBbUktdIGtleXMgYW5kIFtSVl0gaW5zdGFuY2VzLAogICAqIGlmIG5lY2Vzc2FyeS4KICAgKgogICAqIElmIHRoaXMgbWFwIGlzIGFscmVhZHkgYSBgTWFwPFJLLCBSVj5gLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuCiAgICoKICAgKiBJZiB0aGlzIHNldCBjb250YWlucyBvbmx5IGtleXMgb2YgdHlwZSBbUktdIGFuZCB2YWx1ZXMgb2YgdHlwZSBbUlZdLAogICAqIGFsbCByZWFkIG9wZXJhdGlvbnMgd2lsbCB3b3JrIGNvcnJlY3RseS4KICAgKiBJZiBhbnkgb3BlcmF0aW9uIGV4cG9zZXMgYSBub24tW1JLXSBrZXkgb3Igbm9uLVtSVl0gdmFsdWUsCiAgICogdGhlIG9wZXJhdGlvbiB3aWxsIHRocm93IGluc3RlYWQuCiAgICoKICAgKiBFbnRyaWVzIGFkZGVkIHRvIHRoZSBtYXAgbXVzdCBiZSB2YWxpZCBmb3IgYm90aCBhIGBNYXA8SywgVj5gIGFuZCBhCiAgICogYE1hcDxSSywgUlY+YC4KICAgKi8KICBNYXA8UkssIFJWPiBjYXN0PFJLLCBSVj4oKTsKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBtYXAgY29udGFpbnMgdGhlIGdpdmVuIFt2YWx1ZV0uCiAgICoKICAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gdGhlIG1hcCBhcmUgZXF1YWwgdG8gYHZhbHVlYAogICAqIGFjY29yZGluZyB0byB0aGUgYD09YCBvcGVyYXRvci4KICAgKi8KICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgbWFwIGNvbnRhaW5zIHRoZSBnaXZlbiBba2V5XS4KICAgKgogICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGtleXMgaW4gdGhlIG1hcCBhcmUgZXF1YWwgdG8gYGtleWAKICAgKiBhY2NvcmRpbmcgdG8gdGhlIGVxdWFsaXR5IHVzZWQgYnkgdGhlIG1hcC4KICAgKi8KICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIFtrZXldIG9yIG51bGwgaWYgW2tleV0gaXMgbm90IGluIHRoZSBtYXAuCiAgICoKICAgKiBTb21lIG1hcHMgYWxsb3cga2V5cyB0byBoYXZlIGBudWxsYCBhcyBhIHZhbHVlLgogICAqIEZvciB0aG9zZSBtYXBzLCBhIGxvb2t1cCB1c2luZyB0aGlzIG9wZXJhdG9yIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEKICAgKiBrZXkgbm90IGJlaW5nIGluIHRoZSBtYXAgYW5kIHRoZSBrZXkgaGF2aW5nIGEgYG51bGxgIHZhbHVlLgogICAqIE1ldGhvZHMgbGlrZSBbY29udGFpbnNLZXldIG9yIFtwdXRJZkFic2VudF0gY2FuIGJlIHVzZWQgaWYgdGhlIGRpc3RpbmN0aW9uCiAgICogaXMgaW1wb3J0YW50LgogICAqLwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSk7CgogIC8qKgogICAqIEFzc29jaWF0ZXMgdGhlIFtrZXldIHdpdGggdGhlIGdpdmVuIFt2YWx1ZV0uCiAgICoKICAgKiBJZiB0aGUga2V5IHdhcyBhbHJlYWR5IGluIHRoZSBtYXAsIGl0cyBhc3NvY2lhdGVkIHZhbHVlIGlzIGNoYW5nZWQuCiAgICogT3RoZXJ3aXNlIHRoZSBrZXkvdmFsdWUgcGFpciBpcyBhZGRlZCB0byB0aGUgbWFwLgogICAqLwogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKTsKCiAgLyoqCiAgICogVGhlIG1hcCBlbnRyaWVzIG9mIFt0aGlzXS4KICAgKi8KICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXM7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbWFwIHdoZXJlIGFsbCBlbnRyaWVzIG9mIHRoaXMgbWFwIGFyZSB0cmFuc2Zvcm1lZCBieQogICAqIHRoZSBnaXZlbiBbZl0gZnVuY3Rpb24uCiAgICovCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiBmKEsga2V5LCBWIHZhbHVlKSk7CgogIC8qKgogICAqIEFkZHMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbbmV3RW50cmllc10gdG8gdGhpcyBtYXAuCiAgICoKICAgKiBJZiBhIGtleSBvZiBbbmV3RW50cmllc10gaXMgYWxyZWFkeSBpbiB0aGlzIG1hcCwKICAgKiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyBvdmVyd3JpdHRlbi4KICAgKgogICAqIFRoZSBvcGVyYXRpb24gaXMgZXF1aXZhbGVudCB0byBkb2luZyBgdGhpc1tlbnRyeS5rZXldID0gZW50cnkudmFsdWVgCiAgICogZm9yIGVhY2ggW01hcEVudHJ5XSBvZiB0aGUgaXRlcmFibGUuCiAgICovCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBuZXdFbnRyaWVzKTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBba2V5XS4KICAgKgogICAqIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUga2V5LgogICAqCiAgICogSWYgdGhlIGtleSBpcyBwcmVzZW50LCBpbnZva2VzIFt1cGRhdGVdIHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgYW5kIHN0b3JlcwogICAqIHRoZSBuZXcgdmFsdWUgaW4gdGhlIG1hcC4KICAgKgogICAqIElmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQgYW5kIFtpZkFic2VudF0gaXMgcHJvdmlkZWQsIGNhbGxzIFtpZkFic2VudF0KICAgKiBhbmQgYWRkcyB0aGUga2V5IHdpdGggdGhlIHJldHVybmVkIHZhbHVlIHRvIHRoZSBtYXAuCiAgICoKICAgKiBJdCdzIGFuIGVycm9yIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQgYW5kIFtpZkFic2VudF0gaXMgbm90IHByb3ZpZGVkLgogICAqLwogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pOwoKICAvKioKICAgKiBVcGRhdGVzIGFsbCB2YWx1ZXMuCiAgICoKICAgKiBJdGVyYXRlcyBvdmVyIGFsbCBlbnRyaWVzIGluIHRoZSBtYXAgYW5kIHVwZGF0ZXMgdGhlbSB3aXRoIHRoZSByZXN1bHQKICAgKiBvZiBpbnZva2luZyBbdXBkYXRlXS4KICAgKi8KICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBlbnRyaWVzIG9mIHRoaXMgbWFwIHRoYXQgc2F0aXNmeSB0aGUgZ2l2ZW4gW3ByZWRpY2F0ZV0uCiAgICovCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHByZWRpY2F0ZShLIGtleSwgViB2YWx1ZSkpOwoKICAvKioKICAgKiBMb29rIHVwIHRoZSB2YWx1ZSBvZiBba2V5XSwgb3IgYWRkIGEgbmV3IHZhbHVlIGlmIGl0IGlzbid0IHRoZXJlLgogICAqCiAgICogUmV0dXJucyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byBba2V5XSwgaWYgdGhlcmUgaXMgb25lLgogICAqIE90aGVyd2lzZSBjYWxscyBbaWZBYnNlbnRdIHRvIGdldCBhIG5ldyB2YWx1ZSwgYXNzb2NpYXRlcyBba2V5XSB0bwogICAqIHRoYXQgdmFsdWUsIGFuZCB0aGVuIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4KICAgKgogICAqICAgICBNYXA8U3RyaW5nLCBpbnQ+IHNjb3JlcyA9IHsnQm9iJzogMzZ9OwogICAqICAgICBmb3IgKHZhciBrZXkgaW4gWydCb2InLCAnUm9oYW4nLCAnU29waGVuYSddKSB7CiAgICogICAgICAgc2NvcmVzLnB1dElmQWJzZW50KGtleSwgKCkgPT4ga2V5Lmxlbmd0aCk7CiAgICogICAgIH0KICAgKiAgICAgc2NvcmVzWydCb2InXTsgICAgICAvLyAzNgogICAqICAgICBzY29yZXNbJ1JvaGFuJ107ICAgIC8vICA1CiAgICogICAgIHNjb3Jlc1snU29waGVuYSddOyAgLy8gIDcKICAgKgogICAqIENhbGxpbmcgW2lmQWJzZW50XSBtdXN0IG5vdCBhZGQgb3IgcmVtb3ZlIGtleXMgZnJvbSB0aGUgbWFwLgogICAqLwogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSk7CgogIC8qKgogICAqIEFkZHMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbb3RoZXJdIHRvIHRoaXMgbWFwLgogICAqCiAgICogSWYgYSBrZXkgb2YgW290aGVyXSBpcyBhbHJlYWR5IGluIHRoaXMgbWFwLCBpdHMgdmFsdWUgaXMgb3ZlcndyaXR0ZW4uCiAgICoKICAgKiBUaGUgb3BlcmF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcgYHRoaXNba2V5XSA9IHZhbHVlYCBmb3IgZWFjaCBrZXkKICAgKiBhbmQgYXNzb2NpYXRlZCB2YWx1ZSBpbiBvdGhlci4gSXQgaXRlcmF0ZXMgb3ZlciBbb3RoZXJdLCB3aGljaCBtdXN0CiAgICogdGhlcmVmb3JlIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBpdGVyYXRpb24uCiAgICovCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBba2V5XSBhbmQgaXRzIGFzc29jaWF0ZWQgdmFsdWUsIGlmIHByZXNlbnQsIGZyb20gdGhlIG1hcC4KICAgKgogICAqIFJldHVybnMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBga2V5YCBiZWZvcmUgaXQgd2FzIHJlbW92ZWQuCiAgICogUmV0dXJucyBgbnVsbGAgaWYgYGtleWAgd2FzIG5vdCBpbiB0aGUgbWFwLgogICAqCiAgICogTm90ZSB0aGF0IHZhbHVlcyBjYW4gYmUgYG51bGxgIGFuZCBhIHJldHVybmVkIGBudWxsYCB2YWx1ZSBkb2Vzbid0CiAgICogYWx3YXlzIG1lYW4gdGhhdCB0aGUga2V5IHdhcyBhYnNlbnQuCiAgICovCiAgViByZW1vdmUoT2JqZWN0IGtleSk7CgogIC8qKgogICAqIFJlbW92ZXMgYWxsIHBhaXJzIGZyb20gdGhlIG1hcC4KICAgKgogICAqIEFmdGVyIHRoaXMsIHRoZSBtYXAgaXMgZW1wdHkuCiAgICovCiAgdm9pZCBjbGVhcigpOwoKICAvKioKICAgKiBBcHBsaWVzIFtmXSB0byBlYWNoIGtleS92YWx1ZSBwYWlyIG9mIHRoZSBtYXAuCiAgICoKICAgKiBDYWxsaW5nIGBmYCBtdXN0IG5vdCBhZGQgb3IgcmVtb3ZlIGtleXMgZnJvbSB0aGUgbWFwLgogICAqLwogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKTsKCiAgLyoqCiAgICogVGhlIGtleXMgb2YgW3RoaXNdLgogICAqCiAgICogVGhlIHJldHVybmVkIGl0ZXJhYmxlIGhhcyBlZmZpY2llbnQgYGxlbmd0aGAgYW5kIGBjb250YWluc2Agb3BlcmF0aW9ucywKICAgKiBiYXNlZCBvbiBbbGVuZ3RoXSBhbmQgW2NvbnRhaW5zS2V5XSBvZiB0aGUgbWFwLgogICAqCiAgICogVGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBpcyBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIGBNYXBgIGltcGxlbWVudGF0aW9uLAogICAqIGJ1dCBtdXN0IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBjaGFuZ2VzIHRvIHRoZSBtYXAuCiAgICoKICAgKiBNb2RpZnlpbmcgdGhlIG1hcCB3aGlsZSBpdGVyYXRpbmcgdGhlIGtleXMKICAgKiBtYXkgYnJlYWsgdGhlIGl0ZXJhdGlvbi4KICAgKi8KICBJdGVyYWJsZTxLPiBnZXQga2V5czsKCiAgLyoqCiAgICogVGhlIHZhbHVlcyBvZiBbdGhpc10uCiAgICoKICAgKiBUaGUgdmFsdWVzIGFyZSBpdGVyYXRlZCBpbiB0aGUgb3JkZXIgb2YgdGhlaXIgY29ycmVzcG9uZGluZyBrZXlzLgogICAqIFRoaXMgbWVhbnMgdGhhdCBpdGVyYXRpbmcgW2tleXNdIGFuZCBbdmFsdWVzXSBpbiBwYXJhbGxlbCB3aWxsCiAgICogcHJvdmlkZSBtYXRjaGluZyBwYWlycyBvZiBrZXlzIGFuZCB2YWx1ZXMuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgaXRlcmFibGUgaGFzIGFuIGVmZmljaWVudCBgbGVuZ3RoYCBtZXRob2QgYmFzZWQgb24gdGhlCiAgICogW2xlbmd0aF0gb2YgdGhlIG1hcC4gSXRzIFtJdGVyYWJsZS5jb250YWluc10gbWV0aG9kIGlzIGJhc2VkIG9uCiAgICogYD09YCBjb21wYXJpc29uLgogICAqCiAgICogTW9kaWZ5aW5nIHRoZSBtYXAgd2hpbGUgaXRlcmF0aW5nIHRoZQogICAqIHZhbHVlcyBtYXkgYnJlYWsgdGhlIGl0ZXJhdGlvbi4KICAgKi8KICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzOwoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGtleS92YWx1ZSBwYWlycyBpbiB0aGUgbWFwLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbm8ga2V5L3ZhbHVlIHBhaXIgaW4gdGhlIG1hcC4KICAgKi8KICBib29sIGdldCBpc0VtcHR5OwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGtleS92YWx1ZSBwYWlyIGluIHRoZSBtYXAuCiAgICovCiAgYm9vbCBnZXQgaXNOb3RFbXB0eTsKfQoKLyoqCiAqIEEga2V5L3ZhbHVlIHBhaXIgcmVwcmVzZW50aW5nIGFuIGVudHJ5IGluIGEgW01hcF0uCiAqLwpjbGFzcyBNYXBFbnRyeTxLLCBWPiB7CiAgLyoqIFRoZSBrZXkgb2YgdGhlIGVudHJ5LiAqLwogIGZpbmFsIEsga2V5OwoKICAvKiogVGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gW2tleV0gaW4gdGhlIG1hcC4gKi8KICBmaW5hbCBWIHZhbHVlOwoKICAvKiogQ3JlYXRlcyBhbiBlbnRyeSB3aXRoIFtrZXldIGFuZCBbdmFsdWVdLiAqLwogIGNvbnN0IGZhY3RvcnkgTWFwRW50cnkoSyBrZXksIFYgdmFsdWUpID0gTWFwRW50cnk8SywgVj4uXzsKCiAgY29uc3QgTWFwRW50cnkuXyh0aGlzLmtleSwgdGhpcy52YWx1ZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJNYXBFbnRyeSgka2V5OiAkdmFsdWUpIjsKfQqBlgBOTjwBEwEERB0DMDoDNUQNA0A6TQNMTy04IQNMT0YEGwZOBUwFQT8pBhoBBk0OBUIvBUFBKQY6AQZJBUFBKQY8AQZPBUIvBTdBNS8FPkkGMAEGTwVKTSQFLikGOQEGTxEFK0E/KQVONwVMTSMFJTstLAUnJwVJGAVKGAUrIyMFTkgGLk4BBkYFK0E/KQVRNgUsLkopBUwkBTQGRCkBBiwFTxwFTkgrBUxROwZBJQEGLQU+KQUuMwY/JQEGSRMFRwVKLkAnBUkUBh4GOgVHJQYkAQY4BUMwBiABBk8FNU9BUBMGHQEGMgVJNwYlAQYgBigBBkgdBj8BBjsFNi0FSioGOAEGLwUnBU8fBUw6BU0GNgEGGQVLGwYsAQZJBjQBBkcFPUgxBTA4NgsjIyMFQgYmAQY2BUsFS0kwBiABBkcFRDEFSCoGGAEGJQUjBhABBjQFOwYoAQYZBU01BU84BTAeBhgBBhsFR0QwBUlFFgUrJQYaAQYvBhIBBjwGFAEGRgYXAgEENgQXHw8BMxEBMj0BKgExAgESZGFydDpjb3JlL21hcC5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvbWFwX3BhdGNoLmRhcnSD4S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIE1hcDxLLCBWPiB7CiAgLy8gRmFjdG9yeSBjb25zdHJ1Y3RpbmcgYSBNYXAgZnJvbSBhIHBhcnNlciBnZW5lcmF0ZWQgTWFwIGxpdGVyYWwuCiAgLy8gW2VsZW1lbnRzXSBjb250YWlucyBuIGtleS12YWx1ZSBwYWlycy4KICAvLyBUaGUga2V5cyBhcmUgYXQgcG9zaXRpb24gMipuIGFuZCBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQgYnkgdGhlIHBhcnNlcgogIC8vIGluIGNoZWNrZWQgbW9kZS4KICAvLyBUaGUgdmFsdWVzIGFyZSBhdCBwb3NpdGlvbiAyKm4rMSBhbmQgYXJlIG5vdCB5ZXQgdHlwZSBjaGVja2VkLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIGZhY3RvcnkgTWFwLl9mcm9tTGl0ZXJhbChMaXN0IGVsZW1lbnRzKSB7CiAgICB2YXIgbWFwID0gbmV3IExpbmtlZEhhc2hNYXA8SywgVj4oKTsKICAgIHZhciBsZW4gPSBlbGVtZW50cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgaSArPSAyKSB7CiAgICAgIG1hcFtlbGVtZW50c1tpIC0gMV1dID0gZWxlbWVudHNbaV07CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBNYXAudW5tb2RpZmlhYmxlKE1hcCBvdGhlcikgewogICAgcmV0dXJuIG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PEssIFY+KG5ldyBNYXA8SywgVj4uZnJvbShvdGhlcikpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBNYXAoKSA9PiBuZXcgTGlua2VkSGFzaE1hcDxLLCBWPigpOwp9CiEATk48AR4BBxJFLE0WRCQsKR8nKgYQBAEJKEUEAQkuAgEeZGFydDpjb3JlLXBhdGNoL21hcF9wYXRjaC5kYXJ0Km9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL251bGwuZGFydIKgLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIFRoZSByZXNlcnZlZCB3b3JkIFs6bnVsbDpdIGRlbm90ZXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhlIHNvbGUgaW5zdGFuY2Ugb2YgCiAqIHRoaXMgY2xhc3MuCiAqIAogKiBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYSBjbGFzcyB0byBhdHRlbXB0IHRvIGV4dGVuZCBvciBpbXBsZW1lbnQKICogTnVsbC4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgTnVsbCB7CiAgZmFjdG9yeSBOdWxsLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoJ2NsYXNzIE51bGwgY2Fubm90IGJlIGluc3RhbnRpYXRlZCcpOwogIH0KCiAgZXh0ZXJuYWwgaW50IGdldCBoYXNoQ29kZTsKCiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyBgIm51bGwiYC4gKi8KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAibnVsbCI7Cn0KGgBOTjwBEwEETg8ETAkEGg0jQQQBHQEmHwIBE2RhcnQ6Y29yZS9udWxsLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9udWxsX3BhdGNoLmRhcnSBzi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgTnVsbCB7CiAgc3RhdGljIGNvbnN0IF9IQVNIX0NPREUgPSAyMDExOyAvLyBUaGUgeWVhciBEYXJ0IHdhcyBhbm5vdW5jZWQgYW5kIGEgcHJpbWUuCgogIEBwYXRjaAogIGludCBnZXQgaGFzaENvZGUgPT4gX0hBU0hfQ09ERTsKCiAgaW50IGdldCBfaWRlbnRpdHlIYXNoQ29kZSA9PiBfSEFTSF9DT0RFOwp9ChIATk48AR4BBxoNTgEJIgErAgEfZGFydDpjb3JlLXBhdGNoL251bGxfcGF0Y2guZGFydClvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9udW0uZGFydMAARNYvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAqCiAqIEl0IGlzIGEgY29tcGlsZS10aW1lIGVycm9yIGZvciBhbnkgdHlwZSBvdGhlciB0aGFuIFtpbnRdIG9yIFtkb3VibGVdCiAqIHRvIGF0dGVtcHQgdG8gZXh0ZW5kIG9yIGltcGxlbWVudCBudW0uCiAqLwphYnN0cmFjdCBjbGFzcyBudW0gaW1wbGVtZW50cyBDb21wYXJhYmxlPG51bT4gewogIC8qKgogICAqIFRlc3Qgd2hldGhlciB0aGlzIHZhbHVlIGlzIG51bWVyaWNhbGx5IGVxdWFsIHRvIGBvdGhlcmAuCiAgICoKICAgKiBJZiBib3RoIG9wZXJhbmRzIGFyZSBkb3VibGVzLCB0aGV5IGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUKICAgKiByZXByZXNlbnRhdGlvbiwgZXhjZXB0IHRoYXQ6CiAgICoKICAgKiAgICogemVybyBhbmQgbWludXMgemVybyAoMC4wIGFuZCAtMC4wKSBhcmUgY29uc2lkZXJlZCBlcXVhbC4gVGhleQogICAqICAgICBib3RoIGhhdmUgdGhlIG51bWVyaWNhbCB2YWx1ZSB6ZXJvLgogICAqICAgKiBOYU4gaXMgbm90IGVxdWFsIHRvIGFueXRoaW5nLCBpbmNsdWRpbmcgTmFOLiBJZiBlaXRoZXIgb3BlcmFuZCBpcwogICAqICAgICBOYU4sIHRoZSByZXN1bHQgaXMgYWx3YXlzIGZhbHNlLgogICAqCiAgICogSWYgb25lIG9wZXJhbmQgaXMgYSBkb3VibGUgYW5kIHRoZSBvdGhlciBpcyBhbiBpbnQsIHRoZXkgYXJlIGVxdWFsIGlmCiAgICogdGhlIGRvdWJsZSBoYXMgYW4gaW50ZWdlciB2YWx1ZSAoZmluaXRlIHdpdGggbm8gZnJhY3Rpb25hbCBwYXJ0KSBhbmQKICAgKiBgaWRlbnRpY2FsKGRvdWJsZVZhbHVlLnRvSW50KCksIGludFZhbHVlKWAgaXMgdHJ1ZS4KICAgKgogICAqIElmIGJvdGggb3BlcmFuZHMgYXJlIGludGVnZXJzLCB0aGV5IGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUuCiAgICoKICAgKiBSZXR1cm5zIGZhbHNlIGlmIGBvdGhlcmAgaXMgbm90IGEgW251bV0uCiAgICoKICAgKiBOb3RpY2UgdGhhdCB0aGUgYmVoYXZpb3IgZm9yIE5hTiBpcyBub24tcmVmbGV4aXZlLiBUaGlzIG1lYW5zIHRoYXQKICAgKiBlcXVhbGl0eSBvZiBkb3VibGUgdmFsdWVzIGlzIG5vdCBhIHByb3BlciBlcXVhbGl0eSByZWxhdGlvbiwgYXMgaXMKICAgKiBvdGhlcndpc2UgcmVxdWlyZWQgb2YgYG9wZXJhdG9yPT1gLiBVc2luZyBOYU4gaW4sIGUuZy4sIGEgW0hhc2hTZXRdCiAgICogd2lsbCBmYWlsIHRvIHdvcmsuIFRoZSBiZWhhdmlvciBpcyB0aGUgc3RhbmRhcmQgSUVFRS03NTQgZXF1YWxpdHkgb2YKICAgKiBkb3VibGVzLgogICAqCiAgICogSWYgeW91IGNhbiBhdm9pZCBOYU4gdmFsdWVzLCB0aGUgcmVtYWluaW5nIGRvdWJsZXMgZG8gaGF2ZSBhIHByb3BlcgogICAqIGVxdWFsaXR5IHJlbGF0aW9uLCBhbmQgY2FuIGJlIHVzZWQgc2FmZWx5LgogICAqCiAgICogVXNlIFtjb21wYXJlVG9dIGZvciBhIGNvbXBhcmlzb24gdGhhdCBkaXN0aW5ndWlzaGVzIHplcm8gYW5kIG1pbnVzIHplcm8sCiAgICogYW5kIHRoYXQgY29uc2lkZXJzIE5hTiB2YWx1ZXMgYXMgZXF1YWwuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgaGFzaCBjb2RlIGZvciBhIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFRoZSBoYXNoIGNvZGUgaXMgY29tcGF0aWJsZSB3aXRoIGVxdWFsaXR5LiBJdCByZXR1cm5zIHRoZSBzYW1lIHZhbHVlCiAgICogZm9yIGFuIFtpbnRdIGFuZCBhIFtkb3VibGVdIHdpdGggdGhlIHNhbWUgbnVtZXJpY2FsIHZhbHVlLCBhbmQgdGhlcmVmb3JlCiAgICogdGhlIHNhbWUgdmFsdWUgZm9yIHRoZSBkb3VibGVzIHplcm8gYW5kIG1pbnVzIHplcm8uCiAgICoKICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGFib3V0IHRoZSBoYXNoIGNvZGUgb2YgTmFOIHZhbHVlcy4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIHRvIGBvdGhlcmAuCiAgICoKICAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIGlmIGB0aGlzYCBpcyBsZXNzIHRoYW4gYG90aGVyYCwgemVybyBpZiB0aGV5IGFyZQogICAqIGVxdWFsLCBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgaWYgYHRoaXNgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLgogICAqCiAgICogVGhlIG9yZGVyaW5nIHJlcHJlc2VudGVkIGJ5IHRoaXMgbWV0aG9kIGlzIGEgdG90YWwgb3JkZXJpbmcgb2YgW251bV0KICAgKiB2YWx1ZXMuIEFsbCBkaXN0aW5jdCBkb3VibGVzIGFyZSBub24tZXF1YWwsIGFzIGFyZSBhbGwgZGlzdGluY3QgaW50ZWdlcnMsCiAgICogYnV0IGludGVnZXJzIGFyZSBlcXVhbCB0byBkb3VibGVzIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBudW1lcmljYWwKICAgKiB2YWx1ZS4KICAgKgogICAqIEZvciBkb3VibGVzLCB0aGUgYGNvbXBhcmVUb2Agb3BlcmF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwYXJ0aWFsCiAgICogb3JkZXJpbmcgZ2l2ZW4gYnkgW29wZXJhdG9yPT1dLCBbb3BlcmF0b3I8XSBhbmQgW29wZXJhdG9yPl0uIEZvciBleGFtcGxlLAogICAqIElFRUUgZG91YmxlcyBpbXBvc2UgdGhhdCBgMC4wID09IC0wLjBgIGFuZCBhbGwgY29tcGFyaXNvbiBvcGVyYXRpb25zIG9uCiAgICogTmFOIHJldHVybiBmYWxzZS4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gaW1wb3NlcyBhIGNvbXBsZXRlIG9yZGVyaW5nIGZvciBkb3VibGVzLiBXaGVuIHVzaW5nCiAgICogYGNvbXBhcmVUb2AgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGhvbGQ6CiAgICoKICAgKiAtIEFsbCBOYU4gdmFsdWVzIGFyZSBjb25zaWRlcmVkIGVxdWFsLCBhbmQgZ3JlYXRlciB0aGFuIGFueSBudW1lcmljIHZhbHVlLgogICAqIC0gLTAuMCBpcyBsZXNzIHRoYW4gMC4wIChhbmQgdGhlIGludGVnZXIgMCksIGJ1dCBncmVhdGVyIHRoYW4gYW55IG5vbi16ZXJvCiAgICogICAgbmVnYXRpdmUgdmFsdWUuCiAgICogLSBOZWdhdGl2ZSBpbmZpbml0eSBpcyBsZXNzIHRoYW4gYWxsIG90aGVyIHZhbHVlcyBhbmQgcG9zaXRpdmUgaW5maW5pdHkgaXMKICAgKiAgIGdyZWF0ZXIgdGhhbiBhbGwgbm9uLU5hTiB2YWx1ZXMuCiAgICogLSBBbGwgb3RoZXIgdmFsdWVzIGFyZSBjb21wYXJlZCB1c2luZyB0aGVpciBudW1lcmljIHZhbHVlLgogICAqCiAgICogRXhhbXBsZXM6CiAgICogYGBgCiAgICogcHJpbnQoMS5jb21wYXJlVG8oMikpOyAvLyA9PiAtMQogICAqIHByaW50KDIuY29tcGFyZVRvKDEpKTsgLy8gPT4gMQogICAqIHByaW50KDEuY29tcGFyZVRvKDEpKTsgLy8gPT4gMAogICAqCiAgICogLy8gVGhlIGZvbGxvd2luZyBjb21wYXJpc29ucyB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cyB0aGFuIHRoZQogICAqIC8vIGNvcnJlc3BvbmRpbmcgY29tcGFyaXNvbiBvcGVyYXRvcnMuCiAgICogcHJpbnQoKC0wLjApLmNvbXBhcmVUbygwLjApKTsgIC8vID0+IC0xCiAgICogcHJpbnQoZG91YmxlLm5hbi5jb21wYXJlVG8oZG91YmxlLm5hbikpOyAgLy8gPT4gMAogICAqIHByaW50KGRvdWJsZS5pbmZpbml0eS5jb21wYXJlVG8oZG91YmxlLm5hbikpOyAvLyA9PiAtMQogICAqCiAgICogLy8gLTAuMCwgYW5kIE5hTiBjb21wYXJpc29uIG9wZXJhdG9ycyBoYXZlIHJ1bGVzIGltcG9zZWQgYnkgdGhlIElFRUUKICAgKiAvLyBzdGFuZGFyZC4KICAgKiBwcmludCgtMC4wID09IDAuMCk7IC8vID0+IHRydWUKICAgKiBwcmludChkb3VibGUubmFuID09IGRvdWJsZS5uYW4pOyAgLy8gPT4gZmFsc2UKICAgKiBwcmludChkb3VibGUuaW5maW5pdHkgPCBkb3VibGUubmFuKTsgIC8vID0+IGZhbHNlCiAgICogcHJpbnQoZG91YmxlLm5hbiA8IGRvdWJsZS5pbmZpbml0eSk7ICAvLyA9PiBmYWxzZQogICAqIHByaW50KGRvdWJsZS5uYW4gPT0gZG91YmxlLmluZmluaXR5KTsgIC8vID0+IGZhbHNlCiAgICogYGBgCiAgICovCiAgaW50IGNvbXBhcmVUbyhudW0gb3RoZXIpOwoKICAvKiogQWRkaXRpb24gb3BlcmF0b3IuICovCiAgbnVtIG9wZXJhdG9yICsobnVtIG90aGVyKTsKCiAgLyoqIFN1YnRyYWN0aW9uIG9wZXJhdG9yLiAqLwogIG51bSBvcGVyYXRvciAtKG51bSBvdGhlcik7CgogIC8qKiBNdWx0aXBsaWNhdGlvbiBvcGVyYXRvci4gKi8KICBudW0gb3BlcmF0b3IgKihudW0gb3RoZXIpOwoKICAvKioKICAgKiBFdWNsaWRlYW4gbW9kdWxvIG9wZXJhdG9yLgogICAqCiAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBFdWNsaWRlYW4gZGl2aXNpb24uIFRoZSBFdWNsaWRlYW4gZGl2aXNpb24gb2YKICAgKiB0d28gaW50ZWdlcnMgYGFgIGFuZCBgYmAgeWllbGRzIHR3byBpbnRlZ2VycyBgcWAgYW5kIGByYCBzdWNoIHRoYXQKICAgKiBgYSA9PSBiICogcSArIHJgIGFuZCBgMCA8PSByIDwgYi5hYnMoKWAuCiAgICoKICAgKiBUaGUgRXVjbGlkZWFuIGRpdmlzaW9uIGlzIG9ubHkgZGVmaW5lZCBmb3IgaW50ZWdlcnMsIGJ1dCBjYW4gYmUgZWFzaWx5CiAgICogZXh0ZW5kZWQgdG8gd29yayB3aXRoIGRvdWJsZXMuIEluIHRoYXQgY2FzZSBgcmAgbWF5IGhhdmUgYSBub24taW50ZWdlcgogICAqIHZhbHVlLCBidXQgaXQgc3RpbGwgdmVyaWZpZXMgYDAgPD0gciA8IHxifGAuCiAgICoKICAgKiBUaGUgc2lnbiBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgYHJgIGlzIGFsd2F5cyBwb3NpdGl2ZS4KICAgKgogICAqIFNlZSBbcmVtYWluZGVyXSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgdHJ1bmNhdGluZyBkaXZpc2lvbi4KICAgKi8KICBudW0gb3BlcmF0b3IgJShudW0gb3RoZXIpOwoKICAvKiogRGl2aXNpb24gb3BlcmF0b3IuICovCiAgZG91YmxlIG9wZXJhdG9yIC8obnVtIG90aGVyKTsKCiAgLyoqCiAgICogVHJ1bmNhdGluZyBkaXZpc2lvbiBvcGVyYXRvci4KICAgKgogICAqIElmIGVpdGhlciBvcGVyYW5kIGlzIGEgW2RvdWJsZV0gdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uCiAgICogYGEgfi8gYmAgaXMgZXF1aXZhbGVudCB0byBgKGEgLyBiKS50cnVuY2F0ZSgpLnRvSW50KClgLgogICAqCiAgICogSWYgYm90aCBvcGVyYW5kcyBhcmUgW2ludF1zIHRoZW4gYGEgfi8gYmAgcGVyZm9ybXMgdGhlIHRydW5jYXRpbmcKICAgKiBpbnRlZ2VyIGRpdmlzaW9uLgogICAqLwogIGludCBvcGVyYXRvciB+LyhudW0gb3RoZXIpOwoKICAvKiogTmVnYXRlIG9wZXJhdG9yLiAqLwogIG51bSBvcGVyYXRvciAtKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgdHJ1bmNhdGluZyBkaXZpc2lvbiBvZiBgdGhpc2AgYnkgW290aGVyXS4KICAgKgogICAqIFRoZSByZXN1bHQgYHJgIG9mIHRoaXMgb3BlcmF0aW9uIHNhdGlzZmllczoKICAgKiBgdGhpcyA9PSAodGhpcyB+LyBvdGhlcikgKiBvdGhlciArIHJgLgogICAqIEFzIGEgY29uc2VxdWVuY2UgdGhlIHJlbWFpbmRlciBgcmAgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZXIgYHRoaXNgLgogICAqLwogIG51bSByZW1haW5kZXIobnVtIG90aGVyKTsKCiAgLyoqIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPChudW0gb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBsZXNzIHRoYW4gb3IgZXF1YWwgb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA8PShudW0gb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBncmVhdGVyIHRoYW4gb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA+KG51bSBvdGhlcik7CgogIC8qKiBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yID49KG51bSBvdGhlcik7CgogIC8qKiBUcnVlIGlmIHRoZSBudW1iZXIgaXMgdGhlIGRvdWJsZSBOb3QtYS1OdW1iZXIgdmFsdWU7IG90aGVyd2lzZSwgZmFsc2UuICovCiAgYm9vbCBnZXQgaXNOYU47CgogIC8qKgogICAqIFRydWUgaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZTsgb3RoZXJ3aXNlLCBmYWxzZS4KICAgKgogICAqIE5lZ2F0aXZlIG51bWJlcnMgYXJlIHRob3NlIGxlc3MgdGhhbiB6ZXJvLCBhbmQgdGhlIGRvdWJsZSBgLTAuMGAuCiAgICovCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZTsKCiAgLyoqCiAgICogVHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlIGluZmluaXR5IG9yIG5lZ2F0aXZlIGluZmluaXR5OyBvdGhlcndpc2UsCiAgICogZmFsc2UuCiAgICovCiAgYm9vbCBnZXQgaXNJbmZpbml0ZTsKCiAgLyoqCiAgICogVHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIGZpbml0ZTsgb3RoZXJ3aXNlLCBmYWxzZS4KICAgKgogICAqIFRoZSBvbmx5IG5vbi1maW5pdGUgbnVtYmVycyBhcmUgTmFOLCBwb3NpdGl2ZSBpbmZpbml0eSwgYW5kCiAgICogbmVnYXRpdmUgaW5maW5pdHkuCiAgICovCiAgYm9vbCBnZXQgaXNGaW5pdGU7CgogIC8qKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIFtudW1dLiAqLwogIG51bSBhYnMoKTsKCiAgLyoqCiAgICogUmV0dXJucyBtaW51cyBvbmUsIHplcm8gb3IgcGx1cyBvbmUgZGVwZW5kaW5nIG9uIHRoZSBzaWduIGFuZAogICAqIG51bWVyaWNhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyLgogICAqCiAgICogUmV0dXJucyBtaW51cyBvbmUgaWYgdGhlIG51bWJlciBpcyBsZXNzIHRoYW4gemVybywKICAgKiBwbHVzIG9uZSBpZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLAogICAqIGFuZCB6ZXJvIGlmIHRoZSBudW1iZXIgaXMgZXF1YWwgdG8gemVyby4KICAgKgogICAqIFJldHVybnMgTmFOIGlmIHRoZSBudW1iZXIgaXMgdGhlIGRvdWJsZSBOYU4gdmFsdWUuCiAgICoKICAgKiBSZXR1cm5zIGEgbnVtYmVyIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBudW1iZXIuCiAgICogRm9yIGRvdWJsZXMsIGAtMC4wLnNpZ24gPT0gLTAuMGAuCgogICAqIFRoZSByZXN1bHQgc2F0aXNmaWVzOgogICAqCiAgICogICAgIG4gPT0gbi5zaWduICogbi5hYnMoKQogICAqCiAgICogZm9yIGFsbCBudW1iZXJzIGBuYCAoZXhjZXB0IE5hTiwgYmVjYXVzZSBOYU4gaXNuJ3QgYD09YCB0byBpdHNlbGYpLgogICAqLwogIG51bSBnZXQgc2lnbjsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgaW50ZWdlciBjbG9zZXN0IHRvIGB0aGlzYC4KICAgKgogICAqIFJvdW5kcyBhd2F5IGZyb20gemVybyB3aGVuIHRoZXJlIGlzIG5vIGNsb3Nlc3QgaW50ZWdlcjoKICAgKiAgYCgzLjUpLnJvdW5kKCkgPT0gNGAgYW5kIGAoLTMuNSkucm91bmQoKSA9PSAtNGAuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCByb3VuZCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCBmbG9vcigpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBpbnRlZ2VyIG5vIHNtYWxsZXIgdGhhbiBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCBjZWlsKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgb2J0YWluZWQgYnkgZGlzY2FyZGluZyBhbnkgZnJhY3Rpb25hbAogICAqIGRpZ2l0cyBmcm9tIGB0aGlzYC4KICAgKgogICAqIElmIGB0aGlzYCBpcyBub3QgZmluaXRlIChgTmFOYCBvciBpbmZpbml0eSksIHRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgaW50IHRydW5jYXRlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGRvdWJsZSBpbnRlZ2VyIHZhbHVlIGNsb3Nlc3QgdG8gYHRoaXNgLgogICAqCiAgICogUm91bmRzIGF3YXkgZnJvbSB6ZXJvIHdoZW4gdGhlcmUgaXMgbm8gY2xvc2VzdCBpbnRlZ2VyOgogICAqICBgKDMuNSkucm91bmRUb0RvdWJsZSgpID09IDRgIGFuZCBgKC0zLjUpLnJvdW5kVG9Eb3VibGUoKSA9PSAtNGAuCiAgICoKICAgKiBJZiB0aGlzIGlzIGFscmVhZHkgYW4gaW50ZWdlciB2YWx1ZWQgZG91YmxlLCBpbmNsdWRpbmcgYC0wLjBgLCBvciBpdCBpcyBhCiAgICogbm9uLWZpbml0ZSBkb3VibGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYCwKICAgKiBhbmQgYC0wLjBgIGlzIHRoZXJlZm9yZSBjb25zaWRlcmVkIGNsb3NlciB0byBuZWdhdGl2ZSBudW1iZXJzIHRoYW4gYDAuMGAuCiAgICogVGhpcyBtZWFucyB0aGF0IGZvciBhIHZhbHVlLCBgZGAgaW4gdGhlIHJhbmdlIGAtMC41IDwgZCA8IDAuMGAsCiAgICogdGhlIHJlc3VsdCBpcyBgLTAuMGAuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBhIGRvdWJsZS4KICAgKiBJZiB0aGlzIGlzIGEgbnVtZXJpY2FsbHkgbGFyZ2UgaW50ZWdlciwgdGhlIHJlc3VsdCBtYXkgYmUgYW4gaW5maW5pdGUKICAgKiBkb3VibGUuCiAgICovCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgZG91YmxlIGludGVnZXIgdmFsdWUgbm8gZ3JlYXRlciB0aGFuIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIGEKICAgKiBub24tZmluaXRlIGRvdWJsZSB2YWx1ZSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIHVubW9kaWZpZWQuCiAgICoKICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygcm91bmRpbmcsIGAtMC4wYCBpcyBjb25zaWRlcmVkIHRvIGJlIGJlbG93IGAwLjBgLgogICAqIEEgbnVtYmVyIGBkYCBpbiB0aGUgcmFuZ2UgYDAuMCA8IGQgPCAxLjBgIHdpbGwgcmV0dXJuIGAwLjBgLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSBkb3VibGUuCiAgICogSWYgdGhpcyBpcyBhIG51bWVyaWNhbGx5IGxhcmdlIGludGVnZXIsIHRoZSByZXN1bHQgbWF5IGJlIGFuIGluZmluaXRlCiAgICogZG91YmxlLgogICAqLwogIGRvdWJsZSBmbG9vclRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IGRvdWJsZSBpbnRlZ2VyIHZhbHVlIG5vIHNtYWxsZXIgdGhhbiBgdGhpc2AuCiAgICoKICAgKiBJZiB0aGlzIGlzIGFscmVhZHkgYW4gaW50ZWdlciB2YWx1ZWQgZG91YmxlLCBpbmNsdWRpbmcgYC0wLjBgLCBvciBpdCBpcyBhCiAgICogbm9uLWZpbml0ZSBkb3VibGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYC4KICAgKiBBIG51bWJlciBgZGAgaW4gdGhlIHJhbmdlIGAtMS4wIDwgZCA8IDAuMGAgd2lsbCByZXR1cm4gYC0wLjBgLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSBkb3VibGUuCiAgICogSWYgdGhpcyBpcyBhIG51bWVyaWNhbGx5IGxhcmdlIGludGVnZXIsIHRoZSByZXN1bHQgbWF5IGJlIGFuIGluZmluaXRlCiAgICogZG91YmxlLgogICAqLwogIGRvdWJsZSBjZWlsVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZG91YmxlIGludGVnZXIgdmFsdWUgb2J0YWluZWQgYnkgZGlzY2FyZGluZyBhbnkgZnJhY3Rpb25hbAogICAqIGRpZ2l0cyBmcm9tIHRoZSBkb3VibGUgdmFsdWUgb2YgYHRoaXNgLgogICAqCiAgICogSWYgdGhpcyBpcyBhbHJlYWR5IGFuIGludGVnZXIgdmFsdWVkIGRvdWJsZSwgaW5jbHVkaW5nIGAtMC4wYCwgb3IgaXQgaXMgYQogICAqIG5vbi1maW5pdGUgZG91YmxlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgLTEuMCA8IGQgPCAwLjBgIHdpbGwgcmV0dXJuIGAtMC4wYCwgYW5kCiAgICogaW4gdGhlIHJhbmdlIGAwLjAgPCBkIDwgMS4wYCBpdCB3aWxsIHJldHVybiAwLjAuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBhIGRvdWJsZS4KICAgKiBJZiB0aGlzIGlzIGEgbnVtZXJpY2FsbHkgbGFyZ2UgaW50ZWdlciwgdGhlIHJlc3VsdCBtYXkgYmUgYW4gaW5maW5pdGUKICAgKiBkb3VibGUuCiAgICovCiAgZG91YmxlIHRydW5jYXRlVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIFtudW1dIGNsYW1wZWQgdG8gYmUgaW4gdGhlIHJhbmdlIFtsb3dlckxpbWl0XS1bdXBwZXJMaW1pdF0uCiAgICoKICAgKiBUaGUgY29tcGFyaXNvbiBpcyBkb25lIHVzaW5nIFtjb21wYXJlVG9dIGFuZCB0aGVyZWZvcmUgdGFrZXMgYC0wLjBgIGludG8KICAgKiBhY2NvdW50LiBUaGlzIGFsc28gaW1wbGllcyB0aGF0IFtkb3VibGUubmFuXSBpcyB0cmVhdGVkIGFzIHRoZSBtYXhpbWFsCiAgICogZG91YmxlIHZhbHVlLgogICAqCiAgICogVGhlIGFyZ3VtZW50cyBbbG93ZXJMaW1pdF0gYW5kIFt1cHBlckxpbWl0XSBtdXN0IGZvcm0gYSB2YWxpZCByYW5nZSB3aGVyZQogICAqIGBsb3dlckxpbWl0LmNvbXBhcmVUbyh1cHBlckxpbWl0KSA8PSAwYC4KICAgKi8KICBudW0gY2xhbXAobnVtIGxvd2VyTGltaXQsIG51bSB1cHBlckxpbWl0KTsKCiAgLyoqIFRydW5jYXRlcyB0aGlzIFtudW1dIHRvIGFuIGludGVnZXIgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhbiBbaW50XS4gKi8KICBpbnQgdG9JbnQoKTsKCiAgLyoqCiAgICogUmV0dXJuIHRoaXMgW251bV0gYXMgYSBbZG91YmxlXS4KICAgKgogICAqIElmIHRoZSBudW1iZXIgaXMgbm90IHJlcHJlc2VudGFibGUgYXMgYSBbZG91YmxlXSwgYW4KICAgKiBhcHByb3hpbWF0aW9uIGlzIHJldHVybmVkLiBGb3IgbnVtZXJpY2FsbHkgbGFyZ2UgaW50ZWdlcnMsIHRoZQogICAqIGFwcHJveGltYXRpb24gbWF5IGJlIGluZmluaXRlLgogICAqLwogIGRvdWJsZSB0b0RvdWJsZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgZGVjaW1hbC1wb2ludCBzdHJpbmctcmVwcmVzZW50YXRpb24gb2YgYHRoaXNgLgogICAqCiAgICogQ29udmVydHMgYHRoaXNgIHRvIGEgW2RvdWJsZV0gYmVmb3JlIGNvbXB1dGluZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogICAqCiAgICogSWYgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB0aGlzYCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIGAxMF4yMWAgdGhlbiB0aGlzCiAgICogbWV0aG9kcyByZXR1cm5zIGFuIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uIGNvbXB1dGVkIGJ5CiAgICogYHRoaXMudG9TdHJpbmdBc0V4cG9uZW50aWFsKClgLiBPdGhlcndpc2UgdGhlIHJlc3VsdAogICAqIGlzIHRoZSBjbG9zZXN0IHN0cmluZyByZXByZXNlbnRhdGlvbiB3aXRoIGV4YWN0bHkgW2ZyYWN0aW9uRGlnaXRzXSBkaWdpdHMKICAgKiBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gSWYgW2ZyYWN0aW9uRGlnaXRzXSBlcXVhbHMgMCB0aGVuIHRoZSBkZWNpbWFsCiAgICogcG9pbnQgaXMgb21pdHRlZC4KICAgKgogICAqIFRoZSBwYXJhbWV0ZXIgW2ZyYWN0aW9uRGlnaXRzXSBtdXN0IGJlIGFuIGludGVnZXIgc2F0aXNmeWluZzoKICAgKiBgMCA8PSBmcmFjdGlvbkRpZ2l0cyA8PSAyMGAuCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICAxLnRvU3RyaW5nQXNGaXhlZCgzKTsgIC8vIDEuMDAwCiAgICogICAgICg0MzIxLjEyMzQ1Njc4KS50b1N0cmluZ0FzRml4ZWQoMyk7ICAvLyA0MzIxLjEyMwogICAqICAgICAoNDMyMS4xMjM0NTY3OCkudG9TdHJpbmdBc0ZpeGVkKDUpOyAgLy8gNDMyMS4xMjM0NgogICAqICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEudG9TdHJpbmdBc0ZpeGVkKDMpOyAgLy8gMTIzNDU2Nzg5MDEyMzQ1NjgzOTY4LjAwMAogICAqICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLnRvU3RyaW5nQXNGaXhlZCgzKTsgLy8gMWUrMjEKICAgKiAgICAgNS4yNS50b1N0cmluZ0FzRml4ZWQoMCk7IC8vIDUKICAgKi8KICBTdHJpbmcgdG9TdHJpbmdBc0ZpeGVkKGludCBmcmFjdGlvbkRpZ2l0cyk7CgogIC8qKgogICAqIFJldHVybnMgYW4gZXhwb25lbnRpYWwgc3RyaW5nLXJlcHJlc2VudGF0aW9uIG9mIGB0aGlzYC4KICAgKgogICAqIENvbnZlcnRzIGB0aGlzYCB0byBhIFtkb3VibGVdIGJlZm9yZSBjb21wdXRpbmcgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KICAgKgogICAqIElmIFtmcmFjdGlvbkRpZ2l0c10gaXMgZ2l2ZW4gdGhlbiBpdCBtdXN0IGJlIGFuIGludGVnZXIgc2F0aXNmeWluZzoKICAgKiBgMCA8PSBmcmFjdGlvbkRpZ2l0cyA8PSAyMGAuIEluIHRoaXMgY2FzZSB0aGUgc3RyaW5nIGNvbnRhaW5zIGV4YWN0bHkKICAgKiBbZnJhY3Rpb25EaWdpdHNdIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBPdGhlcndpc2UsIHdpdGhvdXQgdGhlIHBhcmFtZXRlciwKICAgKiB0aGUgcmV0dXJuZWQgc3RyaW5nIHVzZXMgdGhlIHNob3J0ZXN0IG51bWJlciBvZiBkaWdpdHMgdGhhdCBhY2N1cmF0ZWx5CiAgICogcmVwcmVzZW50IFt0aGlzXS4KICAgKgogICAqIElmIFtmcmFjdGlvbkRpZ2l0c10gZXF1YWxzIDAgdGhlbiB0aGUgZGVjaW1hbCBwb2ludCBpcyBvbWl0dGVkLgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIDEudG9TdHJpbmdBc0V4cG9uZW50aWFsKCk7ICAgICAgIC8vIDFlKzAKICAgKiAgICAgMS50b1N0cmluZ0FzRXhwb25lbnRpYWwoMyk7ICAgICAgLy8gMS4wMDBlKzAKICAgKiAgICAgMTIzNDU2LnRvU3RyaW5nQXNFeHBvbmVudGlhbCgpOyAgLy8gMS4yMzQ1NmUrNQogICAqICAgICAxMjM0NTYudG9TdHJpbmdBc0V4cG9uZW50aWFsKDMpOyAvLyAxLjIzNWUrNQogICAqICAgICAxMjMudG9TdHJpbmdBc0V4cG9uZW50aWFsKDApOyAgICAvLyAxZSsyCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nQXNFeHBvbmVudGlhbChbaW50IGZyYWN0aW9uRGlnaXRzXSk7CgogIC8qKgogICAqIENvbnZlcnRzIGB0aGlzYCB0byBhIGRvdWJsZSBhbmQgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB3aXRoCiAgICogZXhhY3RseSBbcHJlY2lzaW9uXSBzaWduaWZpY2FudCBkaWdpdHMuCiAgICoKICAgKiBUaGUgcGFyYW1ldGVyIFtwcmVjaXNpb25dIG11c3QgYmUgYW4gaW50ZWdlciBzYXRpc2Z5aW5nOgogICAqIGAxIDw9IHByZWNpc2lvbiA8PSAyMWAuCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICAxLnRvU3RyaW5nQXNQcmVjaXNpb24oMik7ICAgICAgIC8vIDEuMAogICAqICAgICAxZTE1LnRvU3RyaW5nQXNQcmVjaXNpb24oMyk7ICAgIC8vIDEuMDBlKzE1CiAgICogICAgIDEyMzQ1NjcudG9TdHJpbmdBc1ByZWNpc2lvbigzKTsgLy8gMS4yM2UrNgogICAqICAgICAxMjM0NTY3LnRvU3RyaW5nQXNQcmVjaXNpb24oOSk7IC8vIDEyMzQ1NjcuMDAKICAgKiAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAudG9TdHJpbmdBc1ByZWNpc2lvbigyMCk7IC8vIDEyMzQ1Njc4OTAxMjM0NTY3MTY4CiAgICogICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwLnRvU3RyaW5nQXNQcmVjaXNpb24oMTQpOyAvLyAxLjIzNDU2Nzg5MDEyMzVlKzE5CiAgICogICAgIDAuMDAwMDAwMTIzNDUudG9TdHJpbmdBc1ByZWNpc2lvbigxNSk7IC8vIDEuMjM0NTAwMDAwMDAwMDBlLTcKICAgKiAgICAgMC4wMDAwMDEyMzQ1LnRvU3RyaW5nQXNQcmVjaXNpb24oMTUpOyAgLy8gMC4wMDAwMDEyMzQ1MDAwMDAwMDAwMAogICAqLwogIFN0cmluZyB0b1N0cmluZ0FzUHJlY2lzaW9uKGludCBwcmVjaXNpb24pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzaG9ydGVzdCBzdHJpbmcgdGhhdCBjb3JyZWN0bHkgcmVwcmVzZW50IHRoZSBpbnB1dCBudW1iZXIuCiAgICoKICAgKiBBbGwgW2RvdWJsZV1zIGluIHRoZSByYW5nZSBgMTBeLTZgIChpbmNsdXNpdmUpIHRvIGAxMF4yMWAgKGV4Y2x1c2l2ZSkKICAgKiBhcmUgY29udmVydGVkIHRvIHRoZWlyIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQKICAgKiBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gRm9yIGFsbCBvdGhlciBkb3VibGVzLAogICAqIGV4Y2VwdCBmb3Igc3BlY2lhbCB2YWx1ZXMgbGlrZSBgTmFOYCBvciBgSW5maW5pdHlgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCiAgICogZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24gKHNlZSBbdG9TdHJpbmdBc0V4cG9uZW50aWFsXSkuCiAgICoKICAgKiBSZXR1cm5zIGAiTmFOImAgZm9yIFtkb3VibGUubmFuXSwgYCJJbmZpbml0eSJgIGZvciBbZG91YmxlLmluZmluaXR5XSwgYW5kCiAgICogYCItSW5maW5pdHkiYCBmb3IgW2RvdWJsZS5uZWdhdGl2ZUluZmluaXR5XS4KICAgKgogICAqIEFuIFtpbnRdIGlzIGNvbnZlcnRlZCB0byBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gd2l0aCBubyBkZWNpbWFsIHBvaW50LgogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgKDAuMDAwMDAxKS50b1N0cmluZygpOyAgLy8gIjAuMDAwMDAxIgogICAqICAgICAoMC4wMDAwMDAxKS50b1N0cmluZygpOyAvLyAiMWUtNyIKICAgKiAgICAgKDExMTExMTExMTExMTExMTExMTExMS4wKS50b1N0cmluZygpOyAgLy8gIjExMTExMTExMTExMTExMTExMDAwMC4wIgogICAqICAgICAoMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjApLnRvU3RyaW5nKCk7ICAvLyAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAiCiAgICogICAgICgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjApLnRvU3RyaW5nKCk7IC8vICIxZSsyMSIKICAgKiAgICAgKDExMTExMTExMTExMTExMTExMTExMTEuMCkudG9TdHJpbmcoKTsgLy8gIjEuMTExMTExMTExMTExMTExMWUrMjEiCiAgICogICAgIDEudG9TdHJpbmcoKTsgLy8gIjEiCiAgICogICAgIDExMTExMTExMTExMTExMTExMTExMS50b1N0cmluZygpOyAgLy8gIjExMTExMTExMTExMTExMTExMDAwMCIKICAgKiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwLnRvU3RyaW5nKCk7ICAvLyAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgogICAqICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLnRvU3RyaW5nKCk7IC8vICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgogICAqICAgICAxMTExMTExMTExMTExMTExMTExMTExLnRvU3RyaW5nKCk7IC8vICIxMTExMTExMTExMTExMTExMTExMTExIgogICAqICAgICAxLjIzNGU1LnRvU3RyaW5nKCk7ICAgLy8gMTIzNDAwCiAgICogICAgIDEyMzQuNWU2LnRvU3RyaW5nKCk7ICAvLyAxMjM0NTAwMDAwCiAgICogICAgIDEyLjM0NWU2Ny50b1N0cmluZygpOyAvLyAxLjIzNDVlKzY4CiAgICoKICAgKiBOb3RlOiB0aGUgY29udmVyc2lvbiBtYXkgcm91bmQgdGhlIG91dHB1dCBpZiB0aGUgcmV0dXJuZWQgc3RyaW5nCiAgICogaXMgYWNjdXJhdGUgZW5vdWdoIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBpbnB1dC1udW1iZXIuCiAgICogRm9yIGV4YW1wbGUgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgW2RvdWJsZV0gYDllNTlgIGVxdWFscwogICAqIGAiODk5OTk5OTk5OTk5OTk5OTE4NzY3MjI5NDQ5NzE3NjE5OTUzODEwMTMxMjczNjc0NjkwNjU2MjA2ODQ4ImAsIGJ1dAogICAqIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNob3J0ZXIgKGJ1dCBzdGlsbCB1bmlxdWVseSBpZGVudGlmeWluZykgYCI5ZTU5ImAuCiAgICoKICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKTsKCiAgLyoqCiAgICogUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBudW1iZXIgbGl0ZXJhbCBpbnRvIGEgbnVtYmVyLgogICAqCiAgICogVGhlIG1ldGhvZCBmaXJzdCB0cmllcyB0byByZWFkIHRoZSBbaW5wdXRdIGFzIGludGVnZXIgKHNpbWlsYXIgdG8KICAgKiBbaW50LnBhcnNlXSB3aXRob3V0IGEgcmFkaXgpLgogICAqIElmIHRoYXQgZmFpbHMsIGl0IHRyaWVzIHRvIHBhcnNlIHRoZSBbaW5wdXRdIGFzIGEgZG91YmxlIChzaW1pbGFyIHRvCiAgICogW2RvdWJsZS5wYXJzZV0pLgogICAqIElmIHRoYXQgZmFpbHMsIHRvbywgaXQgaW52b2tlcyBbb25FcnJvcl0gd2l0aCBbaW5wdXRdLCBhbmQgdGhlIHJlc3VsdAogICAqIG9mIHRoYXQgaW52b2NhdGlvbiBiZWNvbWVzIHRoZSByZXN1bHQgb2YgY2FsbGluZyBgcGFyc2VgLgogICAqCiAgICogSWYgbm8gW29uRXJyb3JdIGlzIHN1cHBsaWVkLCBpdCBkZWZhdWx0cyB0byBhIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIGEKICAgKiBbRm9ybWF0RXhjZXB0aW9uXS4KICAgKgogICAqIEZvciBhbnkgbnVtYmVyIGBuYCwgdGhpcyBmdW5jdGlvbiBzYXRpc2ZpZXMKICAgKiBgaWRlbnRpY2FsKG4sIG51bS5wYXJzZShuLnRvU3RyaW5nKCkpKWAgKGV4Y2VwdCB3aGVuIGBuYCBpcyBhIE5hTiBgZG91YmxlYAogICAqIHdpdGggYSBwYXlsb2FkKS4KICAgKgogICAqIFRoZSBbb25FcnJvcl0gcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KICAgKiBJbnN0ZWFkIG9mIGBudW0ucGFyc2Uoc3RyaW5nLCAoc3RyaW5nKSB7IC4uLiB9KWAsCiAgICogeW91IHNob3VsZCB1c2UgYG51bS50cnlQYXJzZShzdHJpbmcpID8/ICguLi4pYC4KICAgKi8KICBzdGF0aWMgbnVtIHBhcnNlKFN0cmluZyBpbnB1dCwgW0BkZXByZWNhdGVkIG51bSBvbkVycm9yKFN0cmluZyBpbnB1dCldKSB7CiAgICBudW0gcmVzdWx0ID0gdHJ5UGFyc2UoaW5wdXQpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKGlucHV0KTsKICAgIHJldHVybiBvbkVycm9yKGlucHV0KTsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtYmVyIGxpdGVyYWwgaW50byBhIG51bWJlci4KICAgKgogICAqIExpa2UgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgIGZvciBpbnZhbGlkIGlucHV0cwogICAqIGluc3RlYWQgb2YgdGhyb3dpbmcuCiAgICovCiAgc3RhdGljIG51bSB0cnlQYXJzZShTdHJpbmcgaW5wdXQpIHsKICAgIFN0cmluZyBzb3VyY2UgPSBpbnB1dC50cmltKCk7CiAgICAvLyBUT0RPKGxybik6IE9wdGltaXplIHRvIGRldGVjdCBmb3JtYXQgYW5kIHJlc3VsdCB0eXBlIGluIG9uZSBjaGVjay4KICAgIHJldHVybiBpbnQudHJ5UGFyc2Uoc291cmNlKSA/PyBkb3VibGUudHJ5UGFyc2Uoc291cmNlKTsKICB9CgogIC8qKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBbcGFyc2VdLiAqLwogIHN0YXRpYyBpbnQgX3JldHVybkludE51bGwoU3RyaW5nIF8pID0+IG51bGw7CiAgc3RhdGljIGRvdWJsZSBfcmV0dXJuRG91YmxlTnVsbChTdHJpbmcgXykgPT4gbnVsbDsKfQqB7wBOTjwBEwEEKANIKgQwBj4FSCIFRy1LKgVLSjkFUAUuBUhISUoOBUkwBU4tBiIBBjAFSk45BT8GFAEGHwVQRQVKT0cMBUpPTRcFRzAFUFAYUChABQ8JJSQkBUMsLTc8BUoSJDM3NzgJBhwBHB0BHx0BIh0BBiAFUEguBUxMMgU8BUMGHQEcIAEGIwVQPQVHFwYeARoUAQZMBTEsUQYcASgeATEfASseATQfAVASAQY3BUcGFwEGTgwGFwEGNQVBGAYVATMNAQZDJAU4Mi4FOAU3JwEbBR8FSQYQAQYsBT03BVAGDwEGOgVQBg8BBjcFUAYOAQY/GQVQBhIBBjkFPUcFT0AFSk9FGwUkSw0GGgEGRwVPQAVKQgUkSw0GGgEGRAVPQAVKRAUkSw0GGQEGTC0FT0AFSkg2BSRLDQYdAQZOBU5MEwVPLgYtAVAPAQYmBTpEJAYVAQY+BU8FTj86T0wXBUMiBQ8FKTo8UT0nBi4BBj0FTwVJS1FMFwVFDwUyNjg2MgY2AQZKLQU+HQUPBTA1NDdPTkdKBi0BBkwFS0s1UD8FTzIFTgUPBS8rTU07TB5HR0hIKS0tBUY/T0tQBQYVAQZABUcjShZLPwVKGAUxUBYFQDc1BkwiJzcbBAEGQAVOGgYmIko8BAEnLzUCARJkYXJ0OmNvcmUvbnVtLmRhcnQsb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvb2JqZWN0LmRhcnSQfy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIERhcnQgb2JqZWN0cy4KICoKICogQmVjYXVzZSBPYmplY3QgaXMgdGhlIHJvb3Qgb2YgdGhlIERhcnQgY2xhc3MgaGllcmFyY2h5LAogKiBldmVyeSBvdGhlciBEYXJ0IGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgT2JqZWN0LgogKgogKiBXaGVuIHlvdSBkZWZpbmUgYSBjbGFzcywgeW91IHNob3VsZCBvdmVycmlkZSBbdG9TdHJpbmddCiAqIHRvIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MuCiAqIFlvdSBtaWdodCBhbHNvIG5lZWQgdG8gZGVmaW5lIFtoYXNoQ29kZV0gYW5kIFtvcGVyYXRvciA9PV0sIGFzIGRlc2NyaWJlZCBpbiB0aGUKICogW0ltcGxlbWVudGluZyBtYXAKICoga2V5c10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjaW1wbGVtZW50aW5nLW1hcC1rZXlzKQogKiBzZWN0aW9uIG9mIHRoZSBbbGlicmFyeQogKiB0b3VyXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY29udGVudHMvY2gwMy5odG1sKS4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgT2JqZWN0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtPYmplY3RdIGluc3RhbmNlLgogICAqCiAgICogW09iamVjdF0gaW5zdGFuY2VzIGhhdmUgbm8gbWVhbmluZ2Z1bCBzdGF0ZSwgYW5kIGFyZSBvbmx5IHVzZWZ1bAogICAqIHRocm91Z2ggdGhlaXIgaWRlbnRpdHkuIEFuIFtPYmplY3RdIGluc3RhbmNlIGlzIGVxdWFsIHRvIGl0c2VsZgogICAqIG9ubHkuCiAgICovCiAgY29uc3QgT2JqZWN0KCk7CgogIC8qKgogICAqIFRoZSBlcXVhbGl0eSBvcGVyYXRvci4KICAgKgogICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhbGwgW09iamVjdF1zIGlzIHRvIHJldHVybiB0cnVlIGlmIGFuZAogICAqIG9ubHkgaWYgYHRoaXNgIGFuZCBbb3RoZXJdIGFyZSB0aGUgc2FtZSBvYmplY3QuCiAgICoKICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IGVxdWFsaXR5IHJlbGF0aW9uIG9uCiAgICogYSBjbGFzcy4gVGhlIG92ZXJyaWRpbmcgbWV0aG9kIG11c3Qgc3RpbGwgYmUgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uCiAgICogVGhhdCBpcywgaXQgbXVzdCBiZToKICAgKgogICAqICAqIFRvdGFsOiBJdCBtdXN0IHJldHVybiBhIGJvb2xlYW4gZm9yIGFsbCBhcmd1bWVudHMuIEl0IHNob3VsZCBuZXZlciB0aHJvdwogICAqICAgIG9yIHJldHVybiBgbnVsbGAuCiAgICoKICAgKiAgKiBSZWZsZXhpdmU6IEZvciBhbGwgb2JqZWN0cyBgb2AsIGBvID09IG9gIG11c3QgYmUgdHJ1ZS4KICAgKgogICAqICAqIFN5bW1ldHJpYzogRm9yIGFsbCBvYmplY3RzIGBvMWAgYW5kIGBvMmAsIGBvMSA9PSBvMmAgYW5kIGBvMiA9PSBvMWAgbXVzdAogICAqICAgIGVpdGhlciBib3RoIGJlIHRydWUsIG9yIGJvdGggYmUgZmFsc2UuCiAgICoKICAgKiAgKiBUcmFuc2l0aXZlOiBGb3IgYWxsIG9iamVjdHMgYG8xYCwgYG8yYCwgYW5kIGBvM2AsIGlmIGBvMSA9PSBvMmAgYW5kCiAgICogICAgYG8yID09IG8zYCBhcmUgdHJ1ZSwgdGhlbiBgbzEgPT0gbzNgIG11c3QgYmUgdHJ1ZS4KICAgKgogICAqIFRoZSBtZXRob2Qgc2hvdWxkIGFsc28gYmUgY29uc2lzdGVudCBvdmVyIHRpbWUsCiAgICogc28gd2hldGhlciB0d28gb2JqZWN0cyBhcmUgZXF1YWwgc2hvdWxkIG9ubHkgY2hhbmdlCiAgICogaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBvYmplY3RzIHdhcyBtb2RpZmllZC4KICAgKgogICAqIElmIGEgc3ViY2xhc3Mgb3ZlcnJpZGVzIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBpdCBzaG91bGQgb3ZlcnJpZGUKICAgKiB0aGUgW2hhc2hDb2RlXSBtZXRob2QgYXMgd2VsbCB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4KICAgKi8KICBleHRlcm5hbCBib29sIG9wZXJhdG9yID09KG90aGVyKTsKCiAgLyoqCiAgICogVGhlIGhhc2ggY29kZSBmb3IgdGhpcyBvYmplY3QuCiAgICoKICAgKiBBIGhhc2ggY29kZSBpcyBhIHNpbmdsZSBpbnRlZ2VyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QKICAgKiB0aGF0IGFmZmVjdHMgW29wZXJhdG9yID09XSBjb21wYXJpc29ucy4KICAgKgogICAqIEFsbCBvYmplY3RzIGhhdmUgaGFzaCBjb2Rlcy4KICAgKiBUaGUgZGVmYXVsdCBoYXNoIGNvZGUgcmVwcmVzZW50cyBvbmx5IHRoZSBpZGVudGl0eSBvZiB0aGUgb2JqZWN0LAogICAqIHRoZSBzYW1lIHdheSBhcyB0aGUgZGVmYXVsdCBbb3BlcmF0b3IgPT1dIGltcGxlbWVudGF0aW9uIG9ubHkgY29uc2lkZXJzIG9iamVjdHMKICAgKiBlcXVhbCBpZiB0aGV5IGFyZSBpZGVudGljYWwgKHNlZSBbaWRlbnRpdHlIYXNoQ29kZV0pLgogICAqCiAgICogSWYgW29wZXJhdG9yID09XSBpcyBvdmVycmlkZGVuIHRvIHVzZSB0aGUgb2JqZWN0IHN0YXRlIGluc3RlYWQsCiAgICogdGhlIGhhc2ggY29kZSBtdXN0IGFsc28gYmUgY2hhbmdlZCB0byByZXByZXNlbnQgdGhhdCBzdGF0ZS4KICAgKgogICAqIEhhc2ggY29kZXMgbXVzdCBiZSB0aGUgc2FtZSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBlcXVhbCB0byBlYWNoIG90aGVyCiAgICogYWNjb3JkaW5nIHRvIFtvcGVyYXRvciA9PV0uCiAgICogVGhlIGhhc2ggY29kZSBvZiBhbiBvYmplY3Qgc2hvdWxkIG9ubHkgY2hhbmdlIGlmIHRoZSBvYmplY3QgY2hhbmdlcwogICAqIGluIGEgd2F5IHRoYXQgYWZmZWN0cyBlcXVhbGl0eS4KICAgKiBUaGVyZSBhcmUgbm8gZnVydGhlciByZXF1aXJlbWVudHMgZm9yIHRoZSBoYXNoIGNvZGVzLgogICAqIFRoZXkgbmVlZCBub3QgYmUgY29uc2lzdGVudCBiZXR3ZWVuIGV4ZWN1dGlvbnMgb2YgdGhlIHNhbWUgcHJvZ3JhbQogICAqIGFuZCB0aGVyZSBhcmUgbm8gZGlzdHJpYnV0aW9uIGd1YXJhbnRlZXMuCiAgICoKICAgKiBPYmplY3RzIHRoYXQgYXJlIG5vdCBlcXVhbCBhcmUgYWxsb3dlZCB0byBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZSwKICAgKiBpdCBpcyBldmVuIHRlY2huaWNhbGx5IGFsbG93ZWQgdGhhdCBhbGwgaW5zdGFuY2VzIGhhdmUgdGhlIHNhbWUgaGFzaCBjb2RlLAogICAqIGJ1dCBpZiBjbGFzaGVzIGhhcHBlbiB0b28gb2Z0ZW4sIGl0IG1heSByZWR1Y2UgdGhlIGVmZmljaWVuY3kgb2YgaGFzaC1iYXNlZAogICAqIGRhdGEgc3RydWN0dXJlcyBsaWtlIFtIYXNoU2V0XSBvciBbSGFzaE1hcF0uCiAgICoKICAgKiBJZiBhIHN1YmNsYXNzIG92ZXJyaWRlcyBbaGFzaENvZGVdLCBpdCBzaG91bGQgb3ZlcnJpZGUgdGhlCiAgICogW29wZXJhdG9yID09XSBvcGVyYXRvciBhcyB3ZWxsIHRvIG1haW50YWluIGNvbnNpc3RlbmN5LgogICAqLwogIGV4dGVybmFsIGludCBnZXQgaGFzaENvZGU7CgogIC8qKgogICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCiAgICovCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIEludm9rZWQgd2hlbiBhIG5vbi1leGlzdGVudCBtZXRob2Qgb3IgcHJvcGVydHkgaXMgYWNjZXNzZWQuCiAgICoKICAgKiBDbGFzc2VzIGNhbiBvdmVycmlkZSBbbm9TdWNoTWV0aG9kXSB0byBwcm92aWRlIGN1c3RvbSBiZWhhdmlvci4KICAgKgogICAqIElmIGEgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IGJlY29tZXMgdGhlIHJlc3VsdCBvZiB0aGUgb3JpZ2luYWwgaW52b2NhdGlvbi4KICAgKgogICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHRocm93IGEgW05vU3VjaE1ldGhvZEVycm9yXS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZXh0ZXJuYWwgZHluYW1pYyBub1N1Y2hNZXRob2QoSW52b2NhdGlvbiBpbnZvY2F0aW9uKTsKCiAgLyoqCiAgICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcnVudGltZSB0eXBlIG9mIHRoZSBvYmplY3QuCiAgICovCiAgZXh0ZXJuYWwgVHlwZSBnZXQgcnVudGltZVR5cGU7Cn0KdQBOTjwBEwEEKAM7MwM7PFMVXBtPBBoPBiYFRkULBhIBBhwFRTUFRksaBVEaBT8FUS8FTDsFNTkyBUY8BiQBBiQFTi0FIkdVOwVFQQVKIUklO0gvBUhQUTIFQD0GHQEGNQYeAQZBBUUFTwU9Bhw4AQY5BiECARVkYXJ0OmNvcmUvb2JqZWN0LmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9vYmplY3RfcGF0Y2guZGFydIpWLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCmludCBfZ2V0SGFzaChvYmopIG5hdGl2ZSAiT2JqZWN0X2dldEhhc2giOwp2b2lkIF9zZXRIYXNoKG9iaiwgaGFzaCkgbmF0aXZlICJPYmplY3Rfc2V0SGFzaCI7CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBPYmplY3QgewogIC8vIFRoZSBWTSBoYXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBvZiBlcXVhbHMuCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIG5hdGl2ZSAiT2JqZWN0X2VxdWFscyI7CgogIC8vIEhlbHBlcnMgdXNlZCB0byBpbXBsZW1lbnQgaGFzaENvZGUuIElmIGEgaGFzaENvZGUgaXMgdXNlZCwgd2UgcmVtZW1iZXIgaXQKICAvLyBpbiBhIHdlYWsgdGFibGUgaW4gdGhlIFZNICgzMiBiaXQpIG9yIGluIHRoZSBoZWFkZXIgb2YgdGhlIG9iamVjdCAoNjQKICAvLyBiaXQpLiBBIG5ldyBoYXNoQ29kZSB2YWx1ZSBpcyBjYWxjdWxhdGVkIHVzaW5nIGEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCiAgc3RhdGljIGZpbmFsIF9oYXNoQ29kZVJuZCA9IG5ldyBSYW5kb20oKTsKCiAgc3RhdGljIGludCBfb2JqZWN0SGFzaENvZGUob2JqKSB7CiAgICB2YXIgcmVzdWx0ID0gX2dldEhhc2gob2JqKTsKICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICAvLyBXZSB3YW50IHRoZSBoYXNoIHRvIGJlIGEgU21pIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLgogICAgICByZXN1bHQgPSBfaGFzaENvZGVSbmQubmV4dEludCgweDQwMDAwMDAwKTsKICAgICAgZG8gewogICAgICAgIHJlc3VsdCA9IF9oYXNoQ29kZVJuZC5uZXh0SW50KDB4NDAwMDAwMDApOwogICAgICB9IHdoaWxlIChyZXN1bHQgPT0gMCk7CiAgICAgIF9zZXRIYXNoKG9iaiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9vYmplY3RIYXNoQ29kZSh0aGlzKTsKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlID0+IF9vYmplY3RIYXNoQ29kZSh0aGlzKTsKCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgbmF0aXZlICJPYmplY3RfdG9TdHJpbmciOwogIC8vIEEgc3RhdGljYWxseSBkaXNwYXRjaGVkIHZlcnNpb24gb2YgT2JqZWN0LnRvU3RyaW5nLgogIHN0YXRpYyBTdHJpbmcgX3RvU3RyaW5nKG9iaikgbmF0aXZlICJPYmplY3RfdG9TdHJpbmciOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBkeW5hbWljIG5vU3VjaE1ldGhvZChJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIC8vIFRPRE8ocmVnaXMpOiBSZW1vdmUgdGVtcCBjb25zdHJ1Y3RvciBpZGVudGlmaWVyICd3aXRoSW52b2NhdGlvbicuCiAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3Iud2l0aEludm9jYXRpb24odGhpcywgaW52b2NhdGlvbik7CiAgfQoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1R5cGUiKQogIFR5cGUgZ2V0IHJ1bnRpbWVUeXBlIG5hdGl2ZSAiT2JqZWN0X3J1bnRpbWVUeXBlIjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIHN0YXRpYyBib29sIF9oYXZlU2FtZVJ1bnRpbWVUeXBlKGEsIGIpIG5hdGl2ZSAiT2JqZWN0X2hhdmVTYW1lUnVudGltZVR5cGUiOwoKICAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBpbmxpbmluZyBpbnN0YW5jZW9mLCB0aHVzIGNvbGxlY3RpbmcKICAvLyB0eXBlIGZlZWRiYWNrIGFuZCByZWR1Y2luZyBjb2RlIHNpemUgb2YgdW5vcHRpbWl6ZWQgY29kZS4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBib29sIF9pbnN0YW5jZU9mKGluc3RhbnRpYXRvclR5cGVBcmd1bWVudHMsIGZ1bmN0aW9uVHlwZUFyZ3VtZW50cywgdHlwZSkKICAgICAgbmF0aXZlICJPYmplY3RfaW5zdGFuY2VPZiI7CgogIC8vIEdyb3VwIG9mIGZ1bmN0aW9ucyBmb3IgaW1wbGVtZW50aW5nIGZhc3Qgc2ltcGxlIGluc3RhbmNlIG9mLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIGJvb2wgX3NpbXBsZUluc3RhbmNlT2YodHlwZSkgbmF0aXZlICJPYmplY3Rfc2ltcGxlSW5zdGFuY2VPZiI7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgYm9vbCBfc2ltcGxlSW5zdGFuY2VPZlRydWUodHlwZSkgPT4gdHJ1ZTsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBib29sIF9zaW1wbGVJbnN0YW5jZU9mRmFsc2UodHlwZSkgPT4gZmFsc2U7Cn0KTQBOTjwBHgEyKzIBBxoPMgkoHjIBT0tPLAEkIBc8MQszHR0GEwQBCS02AQkuOTkBCSQwSUIEAQk1NAEkKE4BSD8kSyIBQiRBJCwkLgIBIWRhcnQ6Y29yZS1wYXRjaC9vYmplY3RfcGF0Y2guZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9wYXR0ZXJuLmRhcnSP0C8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBpbnRlcmZhY2UgZm9yIGJhc2ljIHNlYXJjaGVzIHdpdGhpbiBzdHJpbmdzLgogKi8KYWJzdHJhY3QgY2xhc3MgUGF0dGVybiB7CiAgLy8gTk9URTogV2hlbiB1c2luZyAic3RhcnQiIGluZGV4IGZyb20gdGhlIGxhbmd1YWdlIGxpYnJhcnksIGNhbGwKICAvLyB3aXRob3V0IGFuIGFyZ3VtZW50IGlmIHN0YXJ0IGlzIHplcm8uIFRoaXMgYWxsb3dzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgLy8gd2l0aCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG9sZGVyIGludGVyZmFjZSB0aGF0IGRpZG4ndCBoYXZlIHRoZSBzdGFydAogIC8vIGluZGV4IGFyZ3VtZW50LgogIC8qKgogICAqIE1hdGNoIHRoaXMgcGF0dGVybiBhZ2FpbnN0IHRoZSBzdHJpbmcgcmVwZWF0ZWRseS4KICAgKgogICAqIElmIFtzdGFydF0gaXMgcHJvdmlkZWQsIG1hdGNoaW5nIHdpbGwgc3RhcnQgYXQgdGhhdCBpbmRleC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBpdGVyYWJsZSBsYXppbHkgY29tcHV0ZXMgYWxsIHRoZSBub24tb3ZlcmxhcHBpbmcgbWF0Y2hlcwogICAqIG9mIHRoZSBwYXR0ZXJuIG9uIHRoZSBzdHJpbmcsIG9yZGVyZWQgYnkgc3RhcnQgaW5kZXguCiAgICogSWYgYSB1c2VyIG9ubHkgcmVxdWVzdHMgdGhlIGZpcnN0CiAgICogbWF0Y2gsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBjb21wdXRlIGFsbCBwb3NzaWJsZSBtYXRjaGVzLgogICAqCiAgICogVGhlIG1hdGNoZXMgYXJlIGZvdW5kIGJ5IHJlcGVhdGVkbHkgZmluZGluZyB0aGUgZmlyc3QgbWF0Y2gKICAgKiBvZiB0aGUgcGF0dGVybiBvbiB0aGUgc3RyaW5nLCBzdGFydGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzCiAgICogbWF0Y2gsIGFuZCBpbml0aWFsbHkgc3RhcnRpbmcgZnJvbSBpbmRleCB6ZXJvLgogICAqCiAgICogSWYgdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUgZW1wdHkgc3RyaW5nIGF0IHNvbWUgcG9pbnQsIHRoZSBuZXh0CiAgICogbWF0Y2ggaXMgZm91bmQgYnkgc3RhcnRpbmcgYXQgdGhlIHByZXZpb3VzIG1hdGNoJ3MgZW5kIHBsdXMgb25lLgogICAqLwogIEl0ZXJhYmxlPE1hdGNoPiBhbGxNYXRjaGVzKFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwXSk7CgogIC8qKgogICAqIE1hdGNoIHRoaXMgcGF0dGVybiBhZ2FpbnN0IHRoZSBzdGFydCBvZiBgc3RyaW5nYC4KICAgKgogICAqIElmIFtzdGFydF0gaXMgcHJvdmlkZWQsIGl0IG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgYDBgIC4uCiAgICogYHN0cmluZy5sZW5ndGhgLiBJbiB0aGF0IGNhc2UsIHRoaXMgcGF0dGVuIGlzIHRlc3RlZCBhZ2FpbnN0IHRoZQogICAqIHN0cmluZyBhdCB0aGUgW3N0YXJ0XSBwb3NpdGlvbi4gVGhhdCBpcywgYSBbTWF0Y2hdIGlzIHJldHVybmVkIGlmIHRoZQogICAqIHBhdHRlcm4gY2FuIG1hdGNoIGEgcGFydCBvZiB0aGUgc3RyaW5nIHN0YXJ0aW5nIGZyb20gcG9zaXRpb24gW3N0YXJ0XS4KICAgKiBSZXR1cm5zIGBudWxsYCBpZiB0aGUgcGF0dGVybiBkb2Vzbid0IG1hdGNoLgogICAqLwogIE1hdGNoIG1hdGNoQXNQcmVmaXgoU3RyaW5nIHN0cmluZywgW2ludCBzdGFydCA9IDBdKTsKfQoKLyoqCiAqIEEgcmVzdWx0IGZyb20gc2VhcmNoaW5nIHdpdGhpbiBhIHN0cmluZy4KICoKICogQSBNYXRjaCBvciBhbiBbSXRlcmFibGVdIG9mIE1hdGNoIG9iamVjdHMgaXMgcmV0dXJuZWQgZnJvbSBbUGF0dGVybl0KICogbWF0Y2hpbmcgbWV0aG9kcy4KICoKICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGZpbmRzIGFsbCBtYXRjaGVzIG9mIGEgW1JlZ0V4cF0gaW4gYSBbU3RyaW5nXQogKiBhbmQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgcmV0dXJuZWQgaXRlcmFibGUgb2YgTWF0Y2ggb2JqZWN0cy4KICoKICogICAgIFJlZ0V4cCBleHAgPSBuZXcgUmVnRXhwKHIiKFx3KykiKTsKICogICAgIFN0cmluZyBzdHIgPSAiUGFyc2UgbXkgc3RyaW5nIjsKICogICAgIEl0ZXJhYmxlPE1hdGNoPiBtYXRjaGVzID0gZXhwLmFsbE1hdGNoZXMoc3RyKTsKICogICAgIGZvciAoTWF0Y2ggbSBpbiBtYXRjaGVzKSB7CiAqICAgICAgIFN0cmluZyBtYXRjaCA9IG0uZ3JvdXAoMCk7CiAqICAgICAgIHByaW50KG1hdGNoKTsKICogICAgIH0KICoKICogVGhlIG91dHB1dCBvZiB0aGUgZXhhbXBsZSBpczoKICoKICogICAgIFBhcnNlCiAqICAgICBteQogKiAgICAgc3RyaW5nCiAqCiAqIFNvbWUgcGF0dGVybnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gcGFydGljdWxhciwgbWF5IHJlY29yZCBzdWJzdHJpbmdzCiAqIHRoYXQgd2VyZSBwYXJ0IG9mIHRoZSBtYXRjaGluZy4gVGhlc2UgYXJlIGNhbGxlZCBfZ3JvdXBzXyBpbiB0aGUgTWF0Y2gKICogb2JqZWN0LiBTb21lIHBhdHRlcm5zIG1heSBuZXZlciBoYXZlIGFueSBncm91cHMsIGFuZCB0aGVpciBtYXRjaGVzIGFsd2F5cwogKiBoYXZlIHplcm8gW2dyb3VwQ291bnRdLgogKi8KYWJzdHJhY3QgY2xhc3MgTWF0Y2ggewogIC8qKgogICAqIFJldHVybnMgdGhlIGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgdGhlIG1hdGNoIHN0YXJ0cy4KICAgKi8KICBpbnQgZ2V0IHN0YXJ0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbmRleCBpbiB0aGUgc3RyaW5nIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUKICAgKiBtYXRjaC4KICAgKi8KICBpbnQgZ2V0IGVuZDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoZWQgYnkgdGhlIGdpdmVuIFtncm91cF0uCiAgICoKICAgKiBJZiBbZ3JvdXBdIGlzIDAsIHJldHVybnMgdGhlIG1hdGNoIG9mIHRoZSBwYXR0ZXJuLgogICAqCiAgICogVGhlIHJlc3VsdCBtYXkgYmUgYG51bGxgIGlmIHRoZSBwYXR0ZXJuIGRpZG4ndCBhc3NpZ24gYSB2YWx1ZSB0byBpdAogICAqIGFzIHBhcnQgb2YgdGhpcyBtYXRjaC4KICAgKi8KICBTdHJpbmcgZ3JvdXAoaW50IGdyb3VwKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoZWQgYnkgdGhlIGdpdmVuIFtncm91cF0uCiAgICoKICAgKiBJZiBbZ3JvdXBdIGlzIDAsIHJldHVybnMgdGhlIG1hdGNoIG9mIHRoZSBwYXR0ZXJuLgogICAqCiAgICogU2hvcnQgYWxpYXMgZm9yIFtNYXRjaC5ncm91cF0uCiAgICovCiAgU3RyaW5nIG9wZXJhdG9yIFtdKGludCBncm91cCk7CgogIC8qKgogICAqIFJldHVybnMgYSBsaXN0IG9mIHRoZSBncm91cHMgd2l0aCB0aGUgZ2l2ZW4gaW5kaWNlcy4KICAgKgogICAqIFRoZSBsaXN0IGNvbnRhaW5zIHRoZSBzdHJpbmdzIHJldHVybmVkIGJ5IFtncm91cF0gZm9yIGVhY2ggaW5kZXggaW4KICAgKiBbZ3JvdXBJbmRpY2VzXS4KICAgKi8KICBMaXN0PFN0cmluZz4gZ3JvdXBzKExpc3Q8aW50PiBncm91cEluZGljZXMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2FwdHVyZWQgZ3JvdXBzIGluIHRoZSBtYXRjaC4KICAgKgogICAqIFNvbWUgcGF0dGVybnMgbWF5IGNhcHR1cmUgcGFydHMgb2YgdGhlIGlucHV0IHRoYXQgd2FzIHVzZWQgdG8KICAgKiBjb21wdXRlIHRoZSBmdWxsIG1hdGNoLiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY2FwdHVyZWQgZ3JvdXBzLAogICAqIHdoaWNoIGlzIGFsc28gdGhlIG1heGltYWwgYWxsb3dlZCBhcmd1bWVudCB0byB0aGUgW2dyb3VwXSBtZXRob2QuCiAgICovCiAgaW50IGdldCBncm91cENvdW50OwoKICAvKioKICAgKiBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXMgbWF0Y2ggd2FzIGNvbXB1dGVkLgogICAqLwogIFN0cmluZyBnZXQgaW5wdXQ7CgogIC8qKgogICAqIFRoZSBwYXR0ZXJuIHVzZWQgdG8gc2VhcmNoIGluIFtpbnB1dF0uCiAgICovCiAgUGF0dGVybiBnZXQgcGF0dGVybjsKfQqAhQBOTjwBEwEEMwQZRE9MFQY3BUAFSzsnQwVBSTQFRUYGPgEGNwVHRktMMgY3AgEELANIFQNHQAMqJzYiJBcJAyEDDQoOA0tKTRsEFwY9BhEBBkUMBg8BBjYFOAVJHAYbAQY2BTgFJAYhAQY6BUkVBi8BBjkFQ0RHBhYBBjIGFAEGLAYXAgEWZGFydDpjb3JlL3BhdHRlcm4uZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9yZWdleHAuZGFydJkgLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCiAqCiAqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIFtQYXR0ZXJuXXMsIGFuZCBjYW4gYXMgc3VjaCBiZSB1c2VkIHRvIG1hdGNoIHN0cmluZ3MKICogb3IgcGFydHMgb2Ygc3RyaW5ncy4KICoKICogRGFydCByZWd1bGFyIGV4cHJlc3Npb25zIGhhdmUgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMKICogSmF2YVNjcmlwdCByZWd1bGFyIGV4cHJlc3Npb25zLiBTZWUKICogPGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi85LjAvI3NlYy1yZWdleHAtcmVndWxhci1leHByZXNzaW9uLW9iamVjdHM+CiAqIGZvciB0aGUgc3BlY2lmaWNhdGlvbiBvZiBKYXZhU2NyaXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAqCiAqIFtmaXJzdE1hdGNoXSBpcyB0aGUgbWFpbiBpbXBsZW1lbnRhdGlvbiBtZXRob2QgdGhhdCBhcHBsaWVzIGEgcmVndWxhcgogKiBleHByZXNzaW9uIHRvIGEgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBbUmVnRXhwTWF0Y2hdLiBBbGwKICogb3RoZXIgbWV0aG9kcyBpbiBbUmVnRXhwXSBjYW4gYnVpbGQgb24gaXQuCiAqCiAqIFVzZSBbYWxsTWF0Y2hlc10gdG8gbG9vayBmb3IgYWxsIG1hdGNoZXMgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gaW4KICogYSBzdHJpbmcuCiAqCiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmaW5kcyBhbGwgbWF0Y2hlcyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbgogKiBhIHN0cmluZy4KICogYGBgZGFydAogKiBSZWdFeHAgZXhwID0gbmV3IFJlZ0V4cChyIihcdyspIik7CiAqIFN0cmluZyBzdHIgPSAiUGFyc2UgbXkgc3RyaW5nIjsKICogSXRlcmFibGU8UmVnRXhwTWF0Y2g+IG1hdGNoZXMgPSBleHAuYWxsTWF0Y2hlcyhzdHIpOwogKiBgYGAKICoKICogTm90ZSB0aGUgdXNlIG9mIGEgX3JhdyBzdHJpbmdfIChhIHN0cmluZyBwcmVmaXhlZCB3aXRoIGByYCkKICogaW4gdGhlIGV4YW1wbGUgYWJvdmUuIFVzZSBhIHJhdyBzdHJpbmcgdG8gdHJlYXQgZWFjaCBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcKICogYXMgYSBsaXRlcmFsIGNoYXJhY3Rlci4KICovCmFic3RyYWN0IGNsYXNzIFJlZ0V4cCBpbXBsZW1lbnRzIFBhdHRlcm4gewogIC8qKgogICAqIENvbnN0cnVjdHMgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICoKICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiBbc291cmNlXSBpcyBub3QgdmFsaWQgcmVndWxhcgogICAqIGV4cHJlc3Npb24gc3ludGF4LgogICAqCiAgICogSWYgYG11bHRpTGluZWAgaXMgZW5hYmxlZCwgdGhlbiBgXmAgYW5kIGAkYCB3aWxsIG1hdGNoIHRoZSBiZWdpbm5pbmcgYW5kCiAgICogZW5kIG9mIGEgX2xpbmVfLCBpbiBhZGRpdGlvbiB0byBtYXRjaGluZyBiZWdpbm5pbmcgYW5kIGVuZCBvZiBpbnB1dCwKICAgKiByZXNwZWN0aXZlbHkuCiAgICoKICAgKiBJZiBgY2FzZVNlbnNpdGl2ZWAgaXMgZGlzYWJsZWQsIHRoZW4gY2FzZSBpcyBpZ25vcmVkLgogICAqCiAgICogSWYgYHVuaWNvZGVgIGlzIGVuYWJsZWQsIHRoZW4gdGhlIHBhdHRlcm4gaXMgdHJlYXRlZCBhcyBhIFVuaWNvZGUKICAgKiBwYXR0ZXJuIGFzIGRlc2NyaWJlZCBieSB0aGUgRUNNQVNjcmlwdCBzdGFuZGFyZC4KICAgKgogICAqIElmIGBkb3RBbGxgIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGAuYCBwYXR0ZXJuIHdpbGwgbWF0Y2ggX2FsbF8gY2hhcmFjdGVycywKICAgKiBpbmNsdWRpbmcgbGluZSB0ZXJtaW5hdG9ycy4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIHdvcmRQYXR0ZXJuID0gUmVnRXhwKHIiKFx3KykiKTsKICAgKiB2YXIgYnJhY2tldGVkTnVtYmVyVmFsdWUgPSBSZWdFeHAoIiRrZXk6IFxcW1xcZCtcXF0iKTsKICAgKiBgYGAKICAgKgogICAqIE5vdGljZSB0aGUgdXNlIG9mIGEgX3JhdyBzdHJpbmdfIGluIHRoZSBmaXJzdCBleGFtcGxlLCBhbmQgYSByZWd1bGFyCiAgICogc3RyaW5nIGluIHRoZSBzZWNvbmQuIEJlY2F1c2Ugb2YgdGhlIG1hbnkgY2hhcmFjdGVyIGNsYXNzZXMgdXNlZCBpbgogICAqIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGl0IGlzIGNvbW1vbiB0byB1c2UgYSByYXcgc3RyaW5nIGhlcmUsIHVubGVzcyBzdHJpbmcKICAgKiBpbnRlcnBvbGF0aW9uIGlzIHJlcXVpcmVkLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgUmVnRXhwKFN0cmluZyBzb3VyY2UsCiAgICAgIHtib29sIG11bHRpTGluZSA9IGZhbHNlLAogICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlLAogICAgICBAU2luY2UoIjIuNCIpIGJvb2wgdW5pY29kZSA9IGZhbHNlLAogICAgICBAU2luY2UoIjIuNCIpIGJvb2wgZG90QWxsID0gZmFsc2V9KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgW3RleHRdLgogICAqCiAgICogSWYgW3RleHRdIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBpbiByZWd1bGFyIGV4cHJlc3Npb25zLAogICAqIHRoZSByZXN1bHRpbmcgcmVndWxhciBleHByZXNzaW9uIHdpbGwgbWF0Y2ggdGhvc2UgY2hhcmFjdGVycyBsaXRlcmFsbHkuCiAgICogSWYgW3RleHRdIGNvbnRhaW5zIG5vIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHNwZWNpYWwgbWVhbmluZyBpbiBhIHJlZ3VsYXIKICAgKiBleHByZXNzaW9uLCBpdCBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogVGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHNwZWNpYWwgbWVhbmluZyBpbiByZWd1bGFyIGV4cHJlc3Npb25zIGFyZToKICAgKiBgKGAsIGApYCwgYFtgLCBgXWAsIGB7YCwgYH1gLCBgKmAsIGArYCwgYD9gLCBgLmAsIGBeYCwgYCRgLCBgfGAgYW5kIGBcYC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIGVzY2FwZShTdHJpbmcgdGV4dCk7CgogIC8qKgogICAqIFNlYXJjaGVzIGZvciB0aGUgZmlyc3QgbWF0Y2ggb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAqIGluIHRoZSBzdHJpbmcgW2lucHV0XS4gUmV0dXJucyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gbWF0Y2guCiAgICovCiAgUmVnRXhwTWF0Y2ggZmlyc3RNYXRjaChTdHJpbmcgaW5wdXQpOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGl0ZXJhYmxlIG9mIHRoZSBtYXRjaGVzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gb24gW2lucHV0XS4KICAgKgogICAqIElmIFtzdGFydF0gaXMgcHJvdmlkZWQsIG9ubHkgc3RhcnQgbG9va2luZyBmb3IgbWF0Y2hlcyBhdCBgc3RhcnRgLgogICAqLwogIEl0ZXJhYmxlPFJlZ0V4cE1hdGNoPiBhbGxNYXRjaGVzKFN0cmluZyBpbnB1dCwgW2ludCBzdGFydCA9IDBdKTsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGEgbWF0Y2ggaW4gdGhlIHN0cmluZyBbaW5wdXRdLgogICAqLwogIGJvb2wgaGFzTWF0Y2goU3RyaW5nIGlucHV0KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3Qgc3Vic3RyaW5nIG1hdGNoIG9mIHRoaXMgcmVndWxhciBleHByZXNzaW9uIGluIFtpbnB1dF0uCiAgICovCiAgU3RyaW5nIHN0cmluZ01hdGNoKFN0cmluZyBpbnB1dCk7CgogIC8qKgogICAqIFRoZSBzb3VyY2UgcmVndWxhciBleHByZXNzaW9uIHN0cmluZyB1c2VkIHRvIGNyZWF0ZSB0aGlzIGBSZWdFeHBgLgogICAqLwogIFN0cmluZyBnZXQgcGF0dGVybjsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGVzIG11bHRpcGxlIGxpbmVzLgogICAqCiAgICogSWYgdGhlIHJlZ2V4cCBkb2VzIG1hdGNoIG11bHRpcGxlIGxpbmVzLCB0aGUgIl4iIGFuZCAiJCIgY2hhcmFjdGVycwogICAqIG1hdGNoIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBsaW5lcy4gSWYgbm90LCB0aGUgY2hhcmFjdGVyIG1hdGNoIHRoZQogICAqIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnB1dC4KICAgKi8KICBib29sIGdldCBpc011bHRpTGluZTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBjYXNlIHNlbnNpdGl2ZS4KICAgKgogICAqIElmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbm90IGNhc2Ugc2Vuc2l0aXZlLCBpdCB3aWxsIG1hdGNoIGFuIGlucHV0CiAgICogbGV0dGVyIHdpdGggYSBwYXR0ZXJuIGxldHRlciBldmVuIGlmIHRoZSB0d28gbGV0dGVycyBhcmUgZGlmZmVyZW50IGNhc2UKICAgKiB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsZXR0ZXIuCiAgICovCiAgYm9vbCBnZXQgaXNDYXNlU2Vuc2l0aXZlOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGluIFVuaWNvZGUgbW9kZS4KICAgKgogICAqIEluIFVuaWNvZGUgbW9kZSwgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlycyBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIHdpbGwgYmUKICAgKiB0cmVhdGVkIGFzIGEgc2luZ2xlIGNvZGUgcG9pbnQgYW5kIHdpbGwgbm90IG1hdGNoIHNlcGFyYXRlbHkuIE90aGVyd2lzZSwKICAgKiB0aGUgdGFyZ2V0IHN0cmluZyB3aWxsIGJlIHRyZWF0ZWQgcHVyZWx5IGFzIGEgc2VxdWVuY2Ugb2YgaW5kaXZpZHVhbCBjb2RlCiAgICogdW5pdHMgYW5kIHN1cnJvZ2F0ZXMgd2lsbCBub3QgYmUgdHJlYXRlZCBzcGVjaWFsbHkuCiAgICoKICAgKiBJbiBVbmljb2RlIG1vZGUsIHRoZSBzeW50YXggb2YgdGhlIFJlZ0V4cCBwYXR0ZXJuIGlzIG1vcmUgcmVzdHJpY3RlZCwgYnV0CiAgICogc29tZSBwYXR0ZXJuIGZlYXR1cmVzLCBsaWtlIFVuaWNvZGUgcHJvcGVydHkgZXNjYXBlcywgYXJlIG9ubHkgYXZhaWxhYmxlIGluCiAgICogdGhpcyBtb2RlLgogICAqLwogIEBTaW5jZSgiMi40IikKICBib29sIGdldCBpc1VuaWNvZGU7CgogIC8qKgogICAqIFdoZXRoZXIgIi4iIGluIHRoaXMgcmVndWxhciBleHByZXNzaW9uIG1hdGNoZXMgbGluZSB0ZXJtaW5hdG9ycy4KICAgKgogICAqIFdoZW4gZmFsc2UsIHRoZSAiLiIgY2hhcmFjdGVyIG1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyLCB1bmxlc3MgdGhhdAogICAqIGNoYXJhY3RlciBpcyBhIGxpbmUgdGVybWluYXRvci4gV2hlbiB0cnVlLCB0aGVuIHRoZSAiLiIgY2hhcmFjdGVyIHdpbGwKICAgKiBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBpbmNsdWRpbmcgbGluZSB0ZXJtaW5hdG9ycy4KICAgKgogICAqIFRoaXMgZmVhdHVyZSBpcyBkaXN0aW5jdCBmcm9tIFtpc011bHRpbGluZV0sIGFzIHRoZXkgYWZmZWN0IHRoZSBiZWhhdmlvcgogICAqIG9mIGRpZmZlcmVudCBwYXR0ZXJuIGNoYXJhY3RlcnMsIGFuZCBzbyB0aGV5IGNhbiBiZSB1c2VkIHRvZ2V0aGVyIG9yCiAgICogc2VwYXJhdGVseS4KICAgKi8KICBAU2luY2UoIjIuNCIpCiAgYm9vbCBnZXQgaXNEb3RBbGw7Cn0KCi8qKgogKiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaC4KICoKICogUmVndWxhciBleHByZXNzaW9uIG1hdGNoZXMgYXJlIFtNYXRjaF1lcywgYnV0IGFsc28gaW5jbHVkZSB0aGUgYWJpbGl0eQogKiB0byByZXRyaWV2ZSB0aGUgbmFtZXMgZm9yIGFueSBuYW1lZCBjYXB0dXJlIGdyb3VwcyBhbmQgdG8gcmV0cmlldmUKICogbWF0Y2hlcyBmb3IgbmFtZWQgY2FwdHVyZSBncm91cHMgYnkgbmFtZSBpbnN0ZWFkIG9mIHRoZWlyIGluZGV4LgogKi8KQFNpbmNlKCIyLjMiKQphYnN0cmFjdCBjbGFzcyBSZWdFeHBNYXRjaCBpbXBsZW1lbnRzIE1hdGNoIHsKICAvKioKICAgKiBUaGUgc3RyaW5nIG1hdGNoZWQgYnkgdGhlIGdyb3VwIG5hbWVkIFtuYW1lXS4KICAgKgogICAqIFJldHVybnMgdGhlIHN0cmluZyBtYXRjaGVkIGJ5IHRoZSBjYXB0dXJlIGdyb3VwIG5hbWVkIFtuYW1lXSwgb3IKICAgKiBgbnVsbGAgaWYgbm8gc3RyaW5nIHdhcyBtYXRjaGVkIGJ5IHRoYXQgY2FwdHVyZSBncm91cCBhcyBwYXJ0IG9mCiAgICogdGhpcyBtYXRjaC4KICAgKgogICAqIFRoZSBbbmFtZV0gbXVzdCBiZSB0aGUgbmFtZSBvZiBhIG5hbWVkIGNhcHR1cmUgZ3JvdXAgaW4gdGhlIHJlZ3VsYXIKICAgKiBleHByZXNzaW9uIGNyZWF0aW5nIHRoaXMgbWF0Y2ggKHRoYXQgaXMsIHRoZSBuYW1lIG11c3QgYmUgaW4KICAgKiBbZ3JvdXBOYW1lc10pLgogICAqLwogIFN0cmluZyBuYW1lZEdyb3VwKFN0cmluZyBuYW1lKTsKCiAgLyoqCiAgICogVGhlIG5hbWVzIG9mIHRoZSBjYXB0dXJlZCBncm91cHMgaW4gdGhlIG1hdGNoLgogICAqLwogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGdyb3VwTmFtZXM7Cn0KgL8ATk48ARMBBCEDUBgDQidYPANJQy4DRw0DRg0LJiM4BwM/ThsEKwYmBUEYBU5KEwU7BUc2BU8hBQ4FDSk8CQVKSU8gBikfISorAQY3BU9NTSwFSk4GLgEGPEEGKAEGTgVIBkMBBk8GHwEGTgYkAQZIBhYBBj0FSUslBhgBBjgFTU0iBhwBBjkFTE5POQVPURAGEBYBBkYFS0w8BU5KEQYQFQIBBB8DSkZEBA4uBjMFRkYRBUlCFAYiAQY0BiMCARVkYXJ0OmNvcmUvcmVnZXhwLmRhcnQpb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvc2V0LmRhcnSlNy8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBpbiB3aGljaCBlYWNoIG9iamVjdCBjYW4gb2NjdXIgb25seSBvbmNlLgogKgogKiBUaGF0IGlzLCBmb3IgZWFjaCBvYmplY3Qgb2YgdGhlIGVsZW1lbnQgdHlwZSwgdGhlIG9iamVjdCBpcyBlaXRoZXIgY29uc2lkZXJlZAogKiB0byBiZSBpbiB0aGUgc2V0LCBvciB0byBfbm90XyBiZSBpbiB0aGUgc2V0LgogKgogKiBTZXQgaW1wbGVtZW50YXRpb25zIG1heSBjb25zaWRlciBzb21lIGVsZW1lbnRzIGluZGlzdGluZ3Vpc2hhYmxlLiBUaGVzZQogKiBlbGVtZW50cyBhcmUgdHJlYXRlZCBhcyBiZWluZyB0aGUgc2FtZSBmb3IgYW55IG9wZXJhdGlvbiBvbiB0aGUgc2V0LgogKgogKiBUaGUgZGVmYXVsdCBbU2V0XSBpbXBsZW1lbnRhdGlvbiwgW0xpbmtlZEhhc2hTZXRdLCBjb25zaWRlcnMgb2JqZWN0cwogKiBpbmRpc3Rpbmd1aXNoYWJsZSBpZiB0aGV5IGFyZSBlcXVhbCB3aXRoIHJlZ2FyZCB0bwogKiBvcGVyYXRvciBbT2JqZWN0Lj09XS4KICoKICogSXRlcmF0aW5nIG92ZXIgZWxlbWVudHMgb2YgYSBzZXQgbWF5IGJlIGVpdGhlciB1bm9yZGVyZWQKICogb3Igb3JkZXJlZCBpbiBzb21lIHdheS4gRXhhbXBsZXM6CiAqCiAqICogQSBbSGFzaFNldF0gaXMgdW5vcmRlcmVkLCB3aGljaCBtZWFucyB0aGF0IGl0cyBpdGVyYXRpb24gb3JkZXIgaXMKICogICB1bnNwZWNpZmllZCwKICogKiBbTGlua2VkSGFzaFNldF0gaXRlcmF0ZXMgaW4gdGhlIGluc2VydGlvbiBvcmRlciBvZiBpdHMgZWxlbWVudHMsIGFuZAogKiAqIGEgc29ydGVkIHNldCBsaWtlIFtTcGxheVRyZWVTZXRdIGl0ZXJhdGVzIHRoZSBlbGVtZW50cyBpbiBzb3J0ZWQgb3JkZXIuCiAqCiAqIEl0IGlzIGdlbmVyYWxseSBub3QgYWxsb3dlZCB0byBtb2RpZnkgdGhlIHNldCAoYWRkIG9yIHJlbW92ZSBlbGVtZW50cykgd2hpbGUKICogYW4gb3BlcmF0aW9uIG9uIHRoZSBzZXQgaXMgYmVpbmcgcGVyZm9ybWVkLCBmb3IgZXhhbXBsZSBkdXJpbmcgYSBjYWxsIHRvCiAqIFtmb3JFYWNoXSBvciBbY29udGFpbnNBbGxdLiBOb3IgaXMgaXQgYWxsb3dlZCB0byBtb2RpZnkgdGhlIHNldCB3aGlsZQogKiBpdGVyYXRpbmcgZWl0aGVyIHRoZSBzZXQgaXRzZWxmIG9yIGFueSBbSXRlcmFibGVdIHRoYXQgaXMgYmFja2VkIGJ5IHRoZSBzZXQsCiAqIHN1Y2ggYXMgdGhlIG9uZXMgcmV0dXJuZWQgYnkgbWV0aG9kcyBsaWtlIFt3aGVyZV0gYW5kIFttYXBdLgogKgogKiBJdCBpcyBnZW5lcmFsbHkgbm90IGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSBlcXVhbGl0eSBvZiBlbGVtZW50cyAoYW5kIHRodXMgbm90CiAqIHRoZWlyIGhhc2hjb2RlKSB3aGlsZSB0aGV5IGFyZSBpbiB0aGUgc2V0LiBTb21lIHNwZWNpYWxpemVkIHN1YnR5cGVzIG1heSBiZQogKiBtb3JlIHBlcm1pc3NpdmUsIGluIHdoaWNoIGNhc2UgdGhleSBzaG91bGQgZG9jdW1lbnQgdGhpcyBiZWhhdmlvci4KICovCmFic3RyYWN0IGNsYXNzIFNldDxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICAvKioKICAgKiBDcmVhdGVzIGFuIGVtcHR5IFtTZXRdLgogICAqCiAgICogVGhlIGNyZWF0ZWQgW1NldF0gaXMgYSBwbGFpbiBbTGlua2VkSGFzaFNldF0uCiAgICogQXMgc3VjaCwgaXQgY29uc2lkZXJzIGVsZW1lbnRzIHRoYXQgYXJlIGVxdWFsICh1c2luZyBbb3BlcmF0b3IgPT1dKSB0byBiZQogICAqIGluZGlzdGluZ3Vpc2hhYmxlLCBhbmQgcmVxdWlyZXMgdGhlbSB0byBoYXZlIGEgY29tcGF0aWJsZQogICAqIFtPYmplY3QuaGFzaENvZGVdIGltcGxlbWVudGF0aW9uLgogICAqCiAgICogVGhlIHNldCBpcyBlcXVpdmFsZW50IHRvIG9uZSBjcmVhdGVkIGJ5IGBuZXcgTGlua2VkSGFzaFNldDxFPigpYC4KICAgKi8KICBmYWN0b3J5IFNldCgpID0gTGlua2VkSGFzaFNldDxFPjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBlbXB0eSBpZGVudGl0eSBbU2V0XS4KICAgKgogICAqIFRoZSBjcmVhdGVkIFtTZXRdIGlzIGEgW0xpbmtlZEhhc2hTZXRdIHRoYXQgdXNlcyBpZGVudGl0eSBhcyBlcXVhbGl0eQogICAqIHJlbGF0aW9uLgogICAqCiAgICogVGhlIHNldCBpcyBlcXVpdmFsZW50IHRvIG9uZSBjcmVhdGVkIGJ5IGBuZXcgTGlua2VkSGFzaFNldDxFPi5pZGVudGl0eSgpYC4KICAgKi8KICBmYWN0b3J5IFNldC5pZGVudGl0eSgpID0gTGlua2VkSGFzaFNldDxFPi5pZGVudGl0eTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTZXRdIHRoYXQgY29udGFpbnMgYWxsIFtlbGVtZW50c10uCiAgICoKICAgKiBBbGwgdGhlIFtlbGVtZW50c10gc2hvdWxkIGJlIGluc3RhbmNlcyBvZiBbRV0uCiAgICogVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIGNhbiBoYXZlIGFueSB0eXBlLAogICAqIHNvIHRoaXMgY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFNldGAsIGZvciBleGFtcGxlIGFzOgogICAqCiAgICogICAgIFNldDxTdXBlclR5cGU+IHN1cGVyU2V0ID0gLi4uOwogICAqICAgICBTZXQ8U3ViVHlwZT4gc3ViU2V0ID0KICAgKiAgICAgICAgIG5ldyBTZXQ8U3ViVHlwZT4uZnJvbShzdXBlclNldC53aGVyZSgoZSkgPT4gZSBpcyBTdWJUeXBlKSk7CiAgICoKICAgKiBUaGUgY3JlYXRlZCBbU2V0XSBpcyBhIFtMaW5rZWRIYXNoU2V0XS4gQXMgc3VjaCwgaXQgY29uc2lkZXJzIGVsZW1lbnRzIHRoYXQKICAgKiBhcmUgZXF1YWwgKHVzaW5nIFtvcGVyYXRvciA9PV0pIHRvIGJlIGluZGlzdGluZ3Vpc2hhYmxlLCBhbmQgcmVxdWlyZXMgdGhlbSB0bwogICAqIGhhdmUgYSBjb21wYXRpYmxlIFtPYmplY3QuaGFzaENvZGVdIGltcGxlbWVudGF0aW9uLgogICAqCiAgICogVGhlIHNldCBpcyBlcXVpdmFsZW50IHRvIG9uZSBjcmVhdGVkIGJ5CiAgICogYG5ldyBMaW5rZWRIYXNoU2V0PEU+LmZyb20oZWxlbWVudHMpYC4KICAgKi8KICBmYWN0b3J5IFNldC5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSA9IExpbmtlZEhhc2hTZXQ8RT4uZnJvbTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTZXRdIGZyb20gW2VsZW1lbnRzXS4KICAgKgogICAqIFRoZSBjcmVhdGVkIFtTZXRdIGlzIGEgW0xpbmtlZEhhc2hTZXRdLiBBcyBzdWNoLCBpdCBjb25zaWRlcnMgZWxlbWVudHMgdGhhdAogICAqIGFyZSBlcXVhbCAodXNpbmcgW29wZXJhdG9yID09XSkgdG8gYmUgaW5kaXN0aW5ndWlzaGFibGUsIGFuZCByZXF1aXJlcyB0aGVtIHRvCiAgICogaGF2ZSBhIGNvbXBhdGlibGUgW09iamVjdC5oYXNoQ29kZV0gaW1wbGVtZW50YXRpb24uCiAgICoKICAgKiBUaGUgc2V0IGlzIGVxdWl2YWxlbnQgdG8gb25lIGNyZWF0ZWQgYnkKICAgKiBgbmV3IExpbmtlZEhhc2hTZXQ8RT4ub2YoZWxlbWVudHMpYC4KICAgKi8KICBmYWN0b3J5IFNldC5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPSBMaW5rZWRIYXNoU2V0PEU+Lm9mOwoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgU2V0PFQ+YC4KICAgKgogICAqIElmIFtuZXdTZXRdIGlzIHByb3ZpZGVkLCBpdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgbmV3IHNldHMgcmV0dXJuZWQKICAgKiBieSBbdG9TZXRdLCBbdW5pb25dLCBhbmQgaXMgYWxzbyB1c2VkIGZvciBbaW50ZXJzZWN0aW9uXSBhbmQgW2RpZmZlcmVuY2VdLgogICAqIElmIFtuZXdTZXRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGNyZWF0aW5nIGEgbmV3IHNldCB1c2luZyB0aGUKICAgKiBkZWZhdWx0IFtTZXRdIGNvbnN0cnVjdG9yLCBhbmQgW2ludGVyc2VjdGlvbl0gYW5kIFtkaWZmZXJlbmNlXQogICAqIHJldHVybnMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIGNhbGxpbmcgdGhlIHNhbWUgbWV0aG9kIG9uIHRoZSBzb3VyY2UuCiAgICoKICAgKiBBbnkgdGltZSB0aGUgc2V0IHdvdWxkIHByb2R1Y2UgYW4gZWxlbWVudCB0aGF0IGlzIG5vdCBhIFtUXSwKICAgKiB0aGUgZWxlbWVudCBhY2Nlc3Mgd2lsbCB0aHJvdy4KICAgKgogICAqIEFueSB0aW1lIGEgW1RdIHZhbHVlIGlzIGF0dGVtcHRlZCBhZGRlZCBpbnRvIHRoZSBhZGFwdGVkIHNldCwKICAgKiB0aGUgc3RvcmUgd2lsbCB0aHJvdyB1bmxlc3MgdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1NdLgogICAqCiAgICogSWYgYWxsIGFjY2Vzc2VkIGVsZW1lbnRzIG9mIFtzb3VyY2VdIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1RdLAogICAqIGFuZCBpZiBhbGwgZWxlbWVudHMgYWRkZWQgdG8gdGhlIHJldHVybmVkIHNldCBhcmUgYWN0dWFsbHkgaW5zdGFuY2UKICAgKiBvZiBbU10sCiAgICogdGhlbiB0aGUgcmV0dXJuZWQgc2V0IGNhbiBiZSB1c2VkIGFzIGEgYFNldDxUPmAuCiAgICovCiAgc3RhdGljIFNldDxUPiBjYXN0RnJvbTxTLCBUPihTZXQ8Uz4gc291cmNlLCB7U2V0PFI+IEZ1bmN0aW9uPFI+KCkgbmV3U2V0fSkgPT4KICAgICAgQ2FzdFNldDxTLCBUPihzb3VyY2UsIG5ld1NldCk7CgogIC8qKgogICAqIFByb3ZpZGVzIGEgdmlldyBvZiB0aGlzIHNldCBhcyBhIHNldCBvZiBbUl0gaW5zdGFuY2VzLgogICAqCiAgICogSWYgdGhpcyBzZXQgY29udGFpbnMgb25seSBpbnN0YW5jZXMgb2YgW1JdLCBhbGwgcmVhZCBvcGVyYXRpb25zCiAgICogd2lsbCB3b3JrIGNvcnJlY3RseS4gSWYgYW55IG9wZXJhdGlvbiB0cmllcyB0byBhY2Nlc3MgYW4gZWxlbWVudAogICAqIHRoYXQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFtSXSwgdGhlIGFjY2VzcyB3aWxsIHRocm93IGluc3RlYWQuCiAgICoKICAgKiBFbGVtZW50cyBhZGRlZCB0byB0aGUgc2V0IChlLmcuLCBieSB1c2luZyBbYWRkXSBvciBbYWRkQWxsXSkKICAgKiBtdXN0IGJlIGluc3RhbmNlIG9mIFtSXSB0byBiZSB2YWxpZCBhcmd1bWVudHMgdG8gdGhlIGFkZGluZyBmdW5jdGlvbiwKICAgKiBhbmQgdGhleSBtdXN0IGJlIGluc3RhbmNlcyBvZiBbRV0gYXMgd2VsbCB0byBiZSBhY2NlcHRlZCBieQogICAqIHRoaXMgc2V0IGFzIHdlbGwuCiAgICovCiAgU2V0PFI+IGNhc3Q8Uj4oKTsKICAvKioKICAgKiBQcm92aWRlcyBhbiBpdGVyYXRvciB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIGVsZW1lbnRzIG9mIHRoaXMgc2V0LgogICAqCiAgICogVGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBpcyBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIGBTZXRgIGltcGxlbWVudGF0aW9uLAogICAqIGJ1dCBtdXN0IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBjaGFuZ2VzIHRvIHRoZSBzZXQuCiAgICovCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgW3ZhbHVlXSBpcyBpbiB0aGUgc2V0LgogICAqLwogIGJvb2wgY29udGFpbnMoT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogQWRkcyBbdmFsdWVdIHRvIHRoZSBzZXQuCiAgICoKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIChvciBhbiBlcXVhbCB2YWx1ZSkgd2FzIG5vdCB5ZXQgaW4gdGhlIHNldC4KICAgKiBPdGhlcndpc2UgcmV0dXJucyBgZmFsc2VgIGFuZCB0aGUgc2V0IGlzIG5vdCBjaGFuZ2VkLgogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqICAgICB2YXIgc2V0ID0gbmV3IFNldCgpOwogICAqICAgICB2YXIgdGltZTEgPSBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goMCk7CiAgICogICAgIHZhciB0aW1lMiA9IG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaCgwKTsKICAgKiAgICAgLy8gdGltZTEgYW5kIHRpbWUyIGFyZSBlcXVhbCwgYnV0IG5vdCBpZGVudGljYWwuCiAgICogICAgIEV4cGVjdC5pc1RydWUodGltZTEgPT0gdGltZTIpOwogICAqICAgICBFeHBlY3QuaXNGYWxzZShpZGVudGljYWwodGltZTEsIHRpbWUyKSk7CiAgICogICAgIHNldC5hZGQodGltZTEpOyAgLy8gPT4gdHJ1ZS4KICAgKiAgICAgLy8gQSB2YWx1ZSBlcXVhbCB0byB0aW1lMiBleGlzdHMgYWxyZWFkeSBpbiB0aGUgc2V0LCBhbmQgdGhlIGNhbGwgdG8KICAgKiAgICAgLy8gYWRkIGRvZXNuJ3QgY2hhbmdlIHRoZSBzZXQuCiAgICogICAgIHNldC5hZGQodGltZTIpOyAgLy8gPT4gZmFsc2UuCiAgICogICAgIEV4cGVjdC5pc1RydWUoc2V0Lmxlbmd0aCA9PSAxKTsKICAgKiAgICAgRXhwZWN0LmlzVHJ1ZShpZGVudGljYWwodGltZTEsIHNldC5maXJzdCkpOwogICAqLwogIGJvb2wgYWRkKEUgdmFsdWUpOwoKICAvKioKICAgKiBBZGRzIGFsbCBbZWxlbWVudHNdIHRvIHRoaXMgU2V0LgogICAqCiAgICogRXF1aXZhbGVudCB0byBhZGRpbmcgZWFjaCBlbGVtZW50IGluIFtlbGVtZW50c10gdXNpbmcgW2FkZF0sCiAgICogYnV0IHNvbWUgY29sbGVjdGlvbnMgbWF5IGJlIGFibGUgdG8gb3B0aW1pemUgaXQuCiAgICovCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpOwoKICAvKioKICAgKiBSZW1vdmVzIFt2YWx1ZV0gZnJvbSB0aGUgc2V0LiBSZXR1cm5zIHRydWUgaWYgW3ZhbHVlXSB3YXMKICAgKiBpbiB0aGUgc2V0LiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4gVGhlIG1ldGhvZCBoYXMgbm8gZWZmZWN0CiAgICogaWYgW3ZhbHVlXSB2YWx1ZSB3YXMgbm90IGluIHRoZSBzZXQuCiAgICovCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogSWYgYW4gb2JqZWN0IGVxdWFsIHRvIFtvYmplY3RdIGlzIGluIHRoZSBzZXQsIHJldHVybiBpdC4KICAgKgogICAqIENoZWNrcyB3aGV0aGVyIFtvYmplY3RdIGlzIGluIHRoZSBzZXQsIGxpa2UgW2NvbnRhaW5zXSwgYW5kIGlmIHNvLAogICAqIHJldHVybnMgdGhlIG9iamVjdCBpbiB0aGUgc2V0LCBvdGhlcndpc2UgcmV0dXJucyBgbnVsbGAuCiAgICoKICAgKiBJZiB0aGUgZXF1YWxpdHkgcmVsYXRpb24gdXNlZCBieSB0aGUgc2V0IGlzIG5vdCBpZGVudGl0eSwKICAgKiB0aGVuIHRoZSByZXR1cm5lZCBvYmplY3QgbWF5IG5vdCBiZSAqaWRlbnRpY2FsKiB0byBbb2JqZWN0XS4KICAgKiBTb21lIHNldCBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBiZSBhYmxlIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZC4KICAgKiBJZiB0aGUgW2NvbnRhaW5zXSBtZXRob2QgaXMgY29tcHV0ZWQsCiAgICogcmF0aGVyIHRoYW4gYmVpbmcgYmFzZWQgb24gYW4gYWN0dWFsIG9iamVjdCBpbnN0YW5jZSwKICAgKiB0aGVuIHRoZXJlIG1heSBub3QgYmUgYSBzcGVjaWZpYyBvYmplY3QgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZQogICAqIHNldCBlbGVtZW50LgogICAqLwogIEUgbG9va3VwKE9iamVjdCBvYmplY3QpOwoKICAvKioKICAgKiBSZW1vdmVzIGVhY2ggZWxlbWVudCBvZiBbZWxlbWVudHNdIGZyb20gdGhpcyBzZXQuCiAgICovCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cyk7CgogIC8qKgogICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIG9mIHRoaXMgc2V0IHRoYXQgYXJlIG5vdCBlbGVtZW50cyBpbiBbZWxlbWVudHNdLgogICAqCiAgICogQ2hlY2tzIGZvciBlYWNoIGVsZW1lbnQgb2YgW2VsZW1lbnRzXSB3aGV0aGVyIHRoZXJlIGlzIGFuIGVsZW1lbnQgaW4gdGhpcwogICAqIHNldCB0aGF0IGlzIGVxdWFsIHRvIGl0IChhY2NvcmRpbmcgdG8gYHRoaXMuY29udGFpbnNgKSwgYW5kIGlmIHNvLCB0aGUKICAgKiBlcXVhbCBlbGVtZW50IGluIHRoaXMgc2V0IGlzIHJldGFpbmVkLCBhbmQgZWxlbWVudHMgdGhhdCBhcmUgbm90IGVxdWFsCiAgICogdG8gYW55IGVsZW1lbnQgaW4gYGVsZW1lbnRzYCBhcmUgcmVtb3ZlZC4KICAgKi8KICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgb2YgdGhpcyBzZXQgdGhhdCBzYXRpc2Z5IFt0ZXN0XS4KICAgKi8KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgb2YgdGhpcyBzZXQgdGhhdCBmYWlsIHRvIHNhdGlzZnkgW3Rlc3RdLgogICAqLwogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBTZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiBbb3RoZXJdLgogICAqLwogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgc2V0IHdoaWNoIGlzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGlzIHNldCBhbmQgW290aGVyXS4KICAgKgogICAqIFRoYXQgaXMsIHRoZSByZXR1cm5lZCBzZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGlzIFtTZXRdIHRoYXQKICAgKiBhcmUgYWxzbyBlbGVtZW50cyBvZiBbb3RoZXJdIGFjY29yZGluZyB0byBgb3RoZXIuY29udGFpbnNgLgogICAqLwogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IHNldCB3aGljaCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgc2V0IGFuZCBbb3RoZXJdLgogICAqCiAgICogVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gYW5kCiAgICogYWxsIHRoZSBlbGVtZW50cyBvZiBbb3RoZXJdLgogICAqLwogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IHNldCB3aXRoIHRoZSBlbGVtZW50cyBvZiB0aGlzIHRoYXQgYXJlIG5vdCBpbiBbb3RoZXJdLgogICAqCiAgICogVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gdGhhdAogICAqIGFyZSBub3QgZWxlbWVudHMgb2YgW290aGVyXSBhY2NvcmRpbmcgdG8gYG90aGVyLmNvbnRhaW5zYC4KICAgKi8KICBTZXQ8RT4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcik7CgogIC8qKgogICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGluIHRoZSBzZXQuCiAgICovCiAgdm9pZCBjbGVhcigpOwoKICAvKiBDcmVhdGVzIGEgW1NldF0gd2l0aCB0aGUgc2FtZSBlbGVtZW50cyBhbmQgYmVoYXZpb3IgYXMgdGhpcyBgU2V0YC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzZXQgYmVoYXZlcyB0aGUgc2FtZSBhcyB0aGlzIHNldAogICAqIHdpdGggcmVnYXJkIHRvIGFkZGluZyBhbmQgcmVtb3ZpbmcgZWxlbWVudHMuCiAgICogSXQgaW5pdGlhbGx5IGNvbnRhaW5zIHRoZSBzYW1lIGVsZW1lbnRzLgogICAqIElmIHRoaXMgc2V0IHNwZWNpZmllcyBhbiBvcmRlcmluZyBvZiB0aGUgZWxlbWVudHMsCiAgICogdGhlIHJldHVybmVkIHNldCB3aWxsIGhhdmUgdGhlIHNhbWUgb3JkZXIuCiAgICovCiAgU2V0PEU+IHRvU2V0KCk7Cn0KgQoATk48ARMBBEUDUTADS0gDSDYZAzwlA0cSSk0DUExJUEADUE9GBDsGHQUzTz8nBUcGJAEGJgVLDwVQBjYBBjMFNDdLBSgfSQVRUzkFLSwGPwEGJgVRUzkFLSoGPgEGJwVJUElESgVCJAVDRwVJSQ02BlAlAQY8BUVGRAVCS0EXBhQGRwVPOAYcAQYsBh8BBh4FSzsFDgUeQUE6KDImTignKTUGFQEGJgVCNgYlAQY/QyoGHQEGPgVIPgU/QkgrO0cSBhsBBjcGLQEGSwVPTEwvBi0BBjsGKgEGQwYqAQZEBiwBBk8FTEEGKgEGUAVLIgYeAQZKBUxABigBBiYGEAFIBTMyLjgwBhICARJkYXJ0OmNvcmUvc2V0LmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvc2luay5kYXJ0gyYvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBnZW5lcmljIGRlc3RpbmF0aW9uIGZvciBkYXRhLgogKgogKiBNdWx0aXBsZSBkYXRhIHZhbHVlcyBjYW4gYmUgcHV0IGludG8gYSBzaW5rLCBhbmQgd2hlbiBubyBtb3JlIGRhdGEgaXMKICogYXZhaWxhYmxlLCB0aGUgc2luayBzaG91bGQgYmUgY2xvc2VkLgogKgogKiBUaGlzIGlzIGEgZ2VuZXJpYyBpbnRlcmZhY2UgdGhhdCBvdGhlciBkYXRhIHJlY2VpdmVycyBjYW4gaW1wbGVtZW50LgogKi8KYWJzdHJhY3QgY2xhc3MgU2luazxUPiB7CiAgLyoqCiAgICogQWRkcyBbZGF0YV0gdG8gdGhlIHNpbmsuCiAgICoKICAgKiBNdXN0IG5vdCBiZSBjYWxsZWQgYWZ0ZXIgYSBjYWxsIHRvIFtjbG9zZV0uCiAgICovCiAgdm9pZCBhZGQoVCBkYXRhKTsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzaW5rLgogICAqCiAgICogVGhlIFthZGRdIG1ldGhvZCBtdXN0IG5vdCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBtZXRob2QuCiAgICoKICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIG1vcmUgdGhhbiBvbmNlIGlzIGFsbG93ZWQsIGJ1dCBkb2VzIG5vdGhpbmcuCiAgICovCiAgdm9pZCBjbG9zZSgpOwp9CiEATk48ARMBBCMDSSkDSAQZBh4FMQYUAQYWBTwFRgYQAgETZGFydDpjb3JlL3NpbmsuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9zdGFja3RyYWNlLmRhcnSHui8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgYWxsIHN0YWNrIHRyYWNlIG9iamVjdHMuCiAqCiAqIEEgW1N0YWNrVHJhY2VdIGlzIGludGVuZGVkIHRvIGNvbnZleSBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciBhYm91dCB0aGUgY2FsbAogKiBzZXF1ZW5jZSB0aGF0IHRyaWdnZXJlZCBhbiBleGNlcHRpb24uCiAqCiAqIFRoZXNlIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIHJ1bnRpbWUsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUKICogdGhlbSBwcm9ncmFtbWF0aWNhbGx5LgogKi8KYWJzdHJhY3QgY2xhc3MgU3RhY2tUcmFjZSB7CiAgU3RhY2tUcmFjZSgpOyAvLyBJbiBjYXNlIGV4aXN0aW5nIGNsYXNzZXMgZXh0ZW5kIFN0YWNrVHJhY2UuCgogIC8qKgogICAqIENyZWF0ZSBhIGBTdGFja1RyYWNlYCBvYmplY3QgZnJvbSBbc3RhY2tUcmFjZVN0cmluZ10uCiAgICoKICAgKiBUaGUgY3JlYXRlZCBzdGFjayB0cmFjZSB3aWxsIGhhdmUgYSBgdG9TdHJpbmdgIG1ldGhvZCByZXR1cm5pbmcKICAgKiBgc3RhY2tUcmFjZVN0cmluZ2AuCiAgICoKICAgKiBUaGUgYHN0YWNrVHJhY2VTdHJpbmdgIGNhbiBiZSBhIHN0cmluZyByZXR1cm5lZCBieSBzb21lIG90aGVyCiAgICogc3RhY2sgdHJhY2UsIG9yIGl0IGNhbiBiZSBhbnkgc3RyaW5nIGF0IGFsbC4KICAgKiBJZiB0aGUgc3RyaW5nIGRvZXNuJ3QgbG9vayBsaWtlIGEgc3RhY2sgdHJhY2UsIGNvZGUgdGhhdCBpbnRlcnByZXRzCiAgICogc3RhY2sgdHJhY2VzIGlzIGxpa2VseSB0byBmYWlsLCBzbyBmYWtlIHN0YWNrIHRyYWNlcyBzaG91bGQgYmUgdXNlZAogICAqIHdpdGggY2FyZS4KICAgKi8KICBmYWN0b3J5IFN0YWNrVHJhY2UuZnJvbVN0cmluZyhTdHJpbmcgc3RhY2tUcmFjZVN0cmluZykgPSBfU3RyaW5nU3RhY2tUcmFjZTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlLgogICAqCiAgICogVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgY2FuIGJlIGFjaGlldmVkIGJ5IGRvaW5nOgogICAqCiAgICogICAgIHRyeSB7IHRocm93IDA7IH0gY2F0Y2ggKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfQogICAqCiAgICogVGhlIGdldHRlciBhY2hpZXZlcyB0aGlzIHdpdGhvdXQgdGhyb3dpbmcsIGV4Y2VwdCBvbiBwbGF0Zm9ybXMgdGhhdAogICAqIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGdldCBhIHN0YWNrIHRyYWNlLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBTdGFja1RyYWNlIGdldCBjdXJyZW50OwoKICAvKioKICAgKiBSZXR1cm5zIGEgW1N0cmluZ10gcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YWNrIHRyYWNlLgogICAqCiAgICogVGhlIHN0cmluZyByZXByZXNlbnRzIHRoZSBmdWxsIHN0YWNrIHRyYWNlIHN0YXJ0aW5nIGZyb20KICAgKiB0aGUgcG9pbnQgd2hlcmUgYSB0aHJvdyBvY2N1cnJlZCB0byB0aGUgdG9wIG9mIHRoZSBjdXJyZW50IGNhbGwgc2VxdWVuY2UuCiAgICoKICAgKiBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgbm90IGZpbmFsLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwp9CgpjbGFzcyBfU3RyaW5nU3RhY2tUcmFjZSBpbXBsZW1lbnRzIFN0YWNrVHJhY2UgewogIGZpbmFsIFN0cmluZyBfc3RhY2tUcmFjZTsKICBfU3RyaW5nU3RhY2tUcmFjZSh0aGlzLl9zdGFja1RyYWNlKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfc3RhY2tUcmFjZTsKfQo+AE5OPAETAQQ4A08pA0oaBBw/AQY7BUUZBUMySUkQBk4BBjoFNwU9BUktBioBBjsFPk8FQQYVAgEwHCckAgEZZGFydDpjb3JlL3N0YWNrdHJhY2UuZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9zdG9wd2F0Y2guZGFydIwCLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgc2ltcGxlIHN0b3B3YXRjaCBpbnRlcmZhY2UgdG8gbWVhc3VyZSBlbGFwc2VkIHRpbWUuCiAqLwpjbGFzcyBTdG9wd2F0Y2ggewogIC8qKgogICAqIENhY2hlZCBmcmVxdWVuY3kgb2YgdGhlIHN5c3RlbSBpbiBIeiAodGlja3MgcGVyIHNlY29uZCkuCiAgICoKICAgKiBNdXN0IGJlIGluaXRpYWxpemVkIGluIFtfaW5pdFRpY2tlcl07CiAgICovCiAgc3RhdGljIGludCBfZnJlcXVlbmN5OwoKICAvLyBUaGUgX3N0YXJ0IGFuZCBfc3RvcCBmaWVsZHMgY2FwdHVyZSB0aGUgdGltZSB3aGVuIFtzdGFydF0gYW5kIFtzdG9wXQogIC8vIGFyZSBjYWxsZWQgcmVzcGVjdGl2ZWx5LgogIC8vIElmIF9zdG9wIGlzIG51bGwsIHRoZSBzdG9wd2F0Y2ggaXMgcnVubmluZy4KICBpbnQgX3N0YXJ0ID0gMDsKICBpbnQgX3N0b3AgPSAwOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0b3B3YXRjaF0gaW4gc3RvcHBlZCBzdGF0ZSB3aXRoIGEgemVybyBlbGFwc2VkIGNvdW50LgogICAqCiAgICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBzdGFydCBhIFtTdG9wd2F0Y2hdCiAgICogaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbi4KICAgKiBgYGAKICAgKiB2YXIgc3RvcHdhdGNoID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwogICAqIGBgYAogICAqLwogIFN0b3B3YXRjaCgpIHsKICAgIGlmIChfZnJlcXVlbmN5ID09IG51bGwpIF9pbml0VGlja2VyKCk7CiAgfQoKICAvKioKICAgKiBGcmVxdWVuY3kgb2YgdGhlIGVsYXBzZWQgY291bnRlciBpbiBIei4KICAgKi8KICBpbnQgZ2V0IGZyZXF1ZW5jeSA9PiBfZnJlcXVlbmN5OwoKICAvKioKICAgKiBTdGFydHMgdGhlIFtTdG9wd2F0Y2hdLgogICAqCiAgICogVGhlIFtlbGFwc2VkXSBjb3VudCBpcyBpbmNyZWFzaW5nIG1vbm90b25pY2FsbHkuIElmIHRoZSBbU3RvcHdhdGNoXSBoYXMKICAgKiBiZWVuIHN0b3BwZWQsIHRoZW4gY2FsbGluZyBzdGFydCBhZ2FpbiByZXN0YXJ0cyBpdCB3aXRob3V0IHJlc2V0dGluZyB0aGUKICAgKiBbZWxhcHNlZF0gY291bnQuCiAgICoKICAgKiBJZiB0aGUgW1N0b3B3YXRjaF0gaXMgY3VycmVudGx5IHJ1bm5pbmcsIHRoZW4gY2FsbGluZyBzdGFydCBkb2VzIG5vdGhpbmcuCiAgICovCiAgdm9pZCBzdGFydCgpIHsKICAgIGlmIChfc3RvcCAhPSBudWxsKSB7CiAgICAgIC8vIChSZSlzdGFydCB0aGlzIHN0b3B3YXRjaC4KICAgICAgLy8gRG9uJ3QgY291bnQgdGhlIHRpbWUgd2hpbGUgdGhlIHN0b3B3YXRjaCBoYXMgYmVlbiBzdG9wcGVkLgogICAgICBfc3RhcnQgKz0gX25vdygpIC0gX3N0b3A7CiAgICAgIF9zdG9wID0gbnVsbDsKICAgIH0KICB9CgogIC8qKgogICAqIFN0b3BzIHRoZSBbU3RvcHdhdGNoXS4KICAgKgogICAqIFRoZSBbZWxhcHNlZFRpY2tzXSBjb3VudCBzdG9wcyBpbmNyZWFzaW5nIGFmdGVyIHRoaXMgY2FsbC4gSWYgdGhlCiAgICogW1N0b3B3YXRjaF0gaXMgY3VycmVudGx5IG5vdCBydW5uaW5nLCB0aGVuIGNhbGxpbmcgdGhpcyBtZXRob2QgaGFzIG5vCiAgICogZWZmZWN0LgogICAqLwogIHZvaWQgc3RvcCgpIHsKICAgIF9zdG9wID8/PSBfbm93KCk7CiAgfQoKICAvKioKICAgKiBSZXNldHMgdGhlIFtlbGFwc2VkXSBjb3VudCB0byB6ZXJvLgogICAqCiAgICogVGhpcyBtZXRob2QgZG9lcyBub3Qgc3RvcCBvciBzdGFydCB0aGUgW1N0b3B3YXRjaF0uCiAgICovCiAgdm9pZCByZXNldCgpIHsKICAgIF9zdGFydCA9IF9zdG9wID8/IF9ub3coKTsKICB9CgogIC8qKgogICAqIFRoZSBlbGFwc2VkIG51bWJlciBvZiBjbG9jayB0aWNrcyBzaW5jZSBjYWxsaW5nIFtzdGFydF0gd2hpbGUgdGhlCiAgICogW1N0b3B3YXRjaF0gaXMgcnVubmluZy4KICAgKgogICAqIFRoaXMgaXMgdGhlIGVsYXBzZWQgbnVtYmVyIG9mIGNsb2NrIHRpY2tzIGJldHdlZW4gY2FsbGluZyBbc3RhcnRdIGFuZAogICAqIGNhbGxpbmcgW3N0b3BdLgogICAqCiAgICogSXMgMCBpZiB0aGUgW1N0b3B3YXRjaF0gaGFzIG5ldmVyIGJlZW4gc3RhcnRlZC4KICAgKgogICAqIFRoZSBlbGFwc2VkIG51bWJlciBvZiBjbG9jayB0aWNrcyBpbmNyZWFzZXMgYnkgW2ZyZXF1ZW5jeV0gZXZlcnkgc2Vjb25kLgogICAqLwogIGludCBnZXQgZWxhcHNlZFRpY2tzIHsKICAgIHJldHVybiAoX3N0b3AgPz8gX25vdygpKSAtIF9zdGFydDsKICB9CgogIC8qKgogICAqIFRoZSBbZWxhcHNlZFRpY2tzXSBjb3VudGVyIGNvbnZlcnRlZCB0byBhIFtEdXJhdGlvbl0uCiAgICovCiAgRHVyYXRpb24gZ2V0IGVsYXBzZWQgewogICAgcmV0dXJuIER1cmF0aW9uKG1pY3Jvc2Vjb25kczogZWxhcHNlZE1pY3Jvc2Vjb25kcyk7CiAgfQoKICAvKioKICAgKiBUaGUgW2VsYXBzZWRUaWNrc10gY291bnRlciBjb252ZXJ0ZWQgdG8gbWljcm9zZWNvbmRzLgogICAqLwogIGV4dGVybmFsIGludCBnZXQgZWxhcHNlZE1pY3Jvc2Vjb25kczsKCiAgLyoqCiAgICogVGhlIFtlbGFwc2VkVGlja3NdIGNvdW50ZXIgY29udmVydGVkIHRvIG1pbGxpc2Vjb25kcy4KICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IGVsYXBzZWRNaWxsaXNlY29uZHM7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIFtTdG9wd2F0Y2hdIGlzIGN1cnJlbnRseSBydW5uaW5nLgogICAqLwogIGJvb2wgZ2V0IGlzUnVubmluZyA9PiBfc3RvcCA9PSBudWxsOwoKICAvKioKICAgKiBJbml0aWFsaXplcyB0aGUgdGltZS1tZWFzdXJpbmcgc3lzdGVtLiAqTXVzdCogaW5pdGlhbGl6ZSB0aGUgW19mcmVxdWVuY3ldCiAgICogdmFyaWFibGUuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX2luaXRUaWNrZXIoKTsKICBleHRlcm5hbCBzdGF0aWMgaW50IF9ub3coKTsKfQp9AE5OPAETAQQ5BBIGPgUrBhkBSh4xEhEBBkcFPCMJLwkGECsEAQYtBiMBBh0FTU4WBU8GERkjRCAUBgQBBhwFR0sNBhAWBAEGKQU5BhEeBAEGRx0FSxUFNQVOBhknBAEGOwYZOAQBBjsGKAEGOwYoAQYzBicBBk8PBiYeAgEYZGFydDpjb3JlL3N0b3B3YXRjaC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvc3RvcHdhdGNoX3BhdGNoLmRhcnSHIi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFN0b3B3YXRjaCB7CiAgc3RhdGljIGNvbnN0IF9tYXhJbnQgPSAweDdGRkZGRkZGRkZGRkZGRkY7CgogIEBwYXRjaAogIHN0YXRpYyB2b2lkIF9pbml0VGlja2VyKCkgewogICAgaWYgKF9mcmVxdWVuY3kgPT0gbnVsbCkgewogICAgICBfZnJlcXVlbmN5ID0gX2NvbXB1dGVGcmVxdWVuY3koKTsKICAgIH0KICB9CgogIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgY2xvY2sgdGljay4KICBAcGF0Y2gKICBzdGF0aWMgaW50IF9ub3coKSBuYXRpdmUgIlN0b3B3YXRjaF9ub3ciOwoKICAvLyBSZXR1cm5zIHRoZSBmcmVxdWVuY3kgb2YgY2xvY2sgdGlja3MgaW4gSHouCiAgc3RhdGljIGludCBfY29tcHV0ZUZyZXF1ZW5jeSgpIG5hdGl2ZSAiU3RvcHdhdGNoX2ZyZXF1ZW5jeSI7CgogIEBwYXRjaAogIGludCBnZXQgZWxhcHNlZE1pY3Jvc2Vjb25kcyB7CiAgICBpbnQgdGlja3MgPSBlbGFwc2VkVGlja3M7CiAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG1vcmUgbGlrZWx5IGZyZXF1ZW5jaWVzIHRvIGF2b2lkIGRpdmlzaW9uLAogICAgLy8gb3IgZGl2aWRlIGJ5IGEga25vd24gdmFsdWUuCiAgICBpZiAoX2ZyZXF1ZW5jeSA9PSAxMDAwMDAwMDAwKSByZXR1cm4gdGlja3Mgfi8gMTAwMDsKICAgIGlmIChfZnJlcXVlbmN5ID09IDEwMDAwMDApIHJldHVybiB0aWNrczsKICAgIGlmIChfZnJlcXVlbmN5ID09IDEwMDApIHJldHVybiB0aWNrcyAqIDEwMDA7CiAgICBpZiAodGlja3MgPD0gKF9tYXhJbnQgfi8gMTAwMDAwMCkpIHsKICAgICAgcmV0dXJuICh0aWNrcyAqIDEwMDAwMDApIH4vIF9mcmVxdWVuY3k7CiAgICB9CiAgICAvLyBNdWx0aXBsaWNhdGlvbiB3b3VsZCBoYXZlIG92ZXJmbG93ZWQuCiAgICBpbnQgdGlja3NQZXJTZWNvbmQgPSB0aWNrcyB+LyBfZnJlcXVlbmN5OwogICAgaW50IHJlbWFpbmluZ1RpY2tzID0gdGlja3MucmVtYWluZGVyKF9mcmVxdWVuY3kpOwogICAgcmV0dXJuIHRpY2tzUGVyU2Vjb25kICogMTAwMDAwMCArIChyZW1haW5pbmdUaWNrcyAqIDEwMDAwMDApIH4vIF9mcmVxdWVuY3k7CiAgfQoKICBAcGF0Y2gKICBpbnQgZ2V0IGVsYXBzZWRNaWxsaXNlY29uZHMgewogICAgaW50IHRpY2tzID0gZWxhcHNlZFRpY2tzOwogICAgaWYgKF9mcmVxdWVuY3kgPT0gMTAwMDAwMDAwMCkgcmV0dXJuIHRpY2tzIH4vIDEwMDAwMDA7CiAgICBpZiAoX2ZyZXF1ZW5jeSA9PSAxMDAwMDAwKSByZXR1cm4gdGlja3Mgfi8gMTAwMDsKICAgIGlmIChfZnJlcXVlbmN5ID09IDEwMDApIHJldHVybiB0aWNrczsKICAgIGlmICh0aWNrcyA8PSAoX21heEludCB+LyAxMDAwKSkgewogICAgICByZXR1cm4gKHRpY2tzICogMTAwMCkgfi8gX2ZyZXF1ZW5jeTsKICAgIH0KICAgIC8vIE11bHRpcGxpY2F0aW9uIHdvdWxkIGhhdmUgb3ZlcmZsb3dlZC4KICAgIGludCB0aWNrc1BlclNlY29uZCA9IHRpY2tzIH4vIF9mcmVxdWVuY3k7CiAgICBpbnQgcmVtYWluaW5nVGlja3MgPSB0aWNrcy5yZW1haW5kZXIoX2ZyZXF1ZW5jeSk7CiAgICByZXR1cm4gdGlja3NQZXJTZWNvbmQgKiAxMDAwICsgKHJlbWFpbmluZ1RpY2tzICogMTAwMCkgfi8gX2ZyZXF1ZW5jeTsKICB9Cn0KOgBOTjwBHgEHEi0BCR4eKAYEASUJLAExPwEJIB5DIzgtMSkuBi0uNlAEAQkgHjs1KiYrBi0uNkoEAgEkZGFydDpjb3JlLXBhdGNoL3N0b3B3YXRjaF9wYXRjaC5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL3N0cmluZy5kYXJ0wABx9C8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBIHNlcXVlbmNlIG9mIFVURi0xNiBjb2RlIHVuaXRzLgogKgogKiBTdHJpbmdzIGFyZSBtYWlubHkgdXNlZCB0byByZXByZXNlbnQgdGV4dC4gQSBjaGFyYWN0ZXIgbWF5IGJlIHJlcHJlc2VudGVkIGJ5CiAqIG11bHRpcGxlIGNvZGUgcG9pbnRzLCBlYWNoIGNvZGUgcG9pbnQgY29uc2lzdGluZyBvZiBvbmUgb3IgdHdvIGNvZGUKICogdW5pdHMuIEZvciBleGFtcGxlIHRoZSBQYXB1YSBOZXcgR3VpbmVhIGZsYWcgY2hhcmFjdGVyIHJlcXVpcmVzIGZvdXIgY29kZQogKiB1bml0cyB0byByZXByZXNlbnQgdHdvIGNvZGUgcG9pbnRzLCBidXQgc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSBhIHNpbmdsZQogKiBjaGFyYWN0ZXI6ICLwn4e18J+HrCIuIFBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZSBmbGFnIGNoYXJhY3RlciBtYXkgc2hvdwogKiB0aGUgbGV0dGVycyAiUEciIGluc3RlYWQuIElmIHRoZSBjb2RlIHBvaW50cyBhcmUgc3dhcHBlZCwgaXQgaW5zdGVhZCBiZWNvbWVzCiAqIHRoZSBHdWFkZWxvdXBlIGZsYWcgIvCfh6zwn4e1IiAoIkdQIikuCiAqCiAqIEEgc3RyaW5nIGNhbiBiZSBlaXRoZXIgc2luZ2xlIG9yIG11bHRpbGluZS4gU2luZ2xlIGxpbmUgc3RyaW5ncyBhcmUKICogd3JpdHRlbiB1c2luZyBtYXRjaGluZyBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcywgYW5kIG11bHRpbGluZSBzdHJpbmdzIGFyZQogKiB3cml0dGVuIHVzaW5nIHRyaXBsZSBxdW90ZXMuIFRoZSBmb2xsb3dpbmcgYXJlIGFsbCB2YWxpZCBEYXJ0IHN0cmluZ3M6CiAqCiAqICAgICAnU2luZ2xlIHF1b3Rlcyc7CiAqICAgICAiRG91YmxlIHF1b3RlcyI7CiAqICAgICAnRG91YmxlIHF1b3RlcyBpbiAic2luZ2xlIiBxdW90ZXMnOwogKiAgICAgIlNpbmdsZSBxdW90ZXMgaW4gJ2RvdWJsZScgcXVvdGVzIjsKICoKICogICAgICcnJ0EKICogICAgIG11bHRpbGluZQogKiAgICAgc3RyaW5nJycnOwogKgogKiAgICAgIiIiCiAqICAgICBBbm90aGVyCiAqICAgICBtdWx0aWxpbmUKICogICAgIHN0cmluZyIiIjsKICoKICogU3RyaW5ncyBhcmUgaW1tdXRhYmxlLiBBbHRob3VnaCB5b3UgY2Fubm90IGNoYW5nZSBhIHN0cmluZywgeW91IGNhbiBwZXJmb3JtCiAqIGFuIG9wZXJhdGlvbiBvbiBhIHN0cmluZyBhbmQgYXNzaWduIHRoZSByZXN1bHQgdG8gYSBuZXcgc3RyaW5nOgogKgogKiAgICAgdmFyIHN0cmluZyA9ICdEYXJ0IGlzIGZ1bic7CiAqICAgICB2YXIgbmV3U3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygwLCA1KTsKICoKICogWW91IGNhbiB1c2UgdGhlIHBsdXMgKGArYCkgb3BlcmF0b3IgdG8gY29uY2F0ZW5hdGUgc3RyaW5nczoKICoKICogICAgICdEYXJ0ICcgKyAnaXMgJyArICdmdW4hJzsgLy8gJ0RhcnQgaXMgZnVuIScKICoKICogWW91IGNhbiBhbHNvIHVzZSBhZGphY2VudCBzdHJpbmcgbGl0ZXJhbHMgZm9yIGNvbmNhdGVuYXRpb246CiAqCiAqICAgICAnRGFydCAnICdpcyAnICdmdW4hJzsgICAgLy8gJ0RhcnQgaXMgZnVuIScKICoKICogWW91IGNhbiB1c2UgYCR7fWAgdG8gaW50ZXJwb2xhdGUgdGhlIHZhbHVlIG9mIERhcnQgZXhwcmVzc2lvbnMKICogd2l0aGluIHN0cmluZ3MuIFRoZSBjdXJseSBicmFjZXMgY2FuIGJlIG9taXR0ZWQgd2hlbiBldmFsdWF0aW5nIGlkZW50aWZpZXJzOgogKgogKiAgICAgc3RyaW5nID0gJ2RhcnRsYW5nJzsKICogICAgICckc3RyaW5nIGhhcyAke3N0cmluZy5sZW5ndGh9IGxldHRlcnMnOyAvLyAnZGFydGxhbmcgaGFzIDggbGV0dGVycycKICoKICogQSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgYnkgYSBzZXF1ZW5jZSBvZiBVbmljb2RlIFVURi0xNiBjb2RlIHVuaXRzCiAqIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgW2NvZGVVbml0QXRdIG9yIHRoZSBbY29kZVVuaXRzXSBtZW1iZXJzOgogKgogKiAgICAgc3RyaW5nID0gJ0RhcnQnOwogKiAgICAgc3RyaW5nLmNvZGVVbml0QXQoMCk7IC8vIDY4CiAqICAgICBzdHJpbmcuY29kZVVuaXRzOyAgICAgLy8gWzY4LCA5NywgMTE0LCAxMTZdCiAqCiAqIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29kZSB1bml0cyBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGluZGV4CiAqIG9wZXJhdG9yOgogKgogKiAgICAgc3RyaW5nWzBdOyAgICAgICAgICAgIC8vICdEJwogKgogKiBUaGUgY2hhcmFjdGVycyBvZiBhIHN0cmluZyBhcmUgZW5jb2RlZCBpbiBVVEYtMTYuIERlY29kaW5nIFVURi0xNiwgd2hpY2gKICogY29tYmluZXMgc3Vycm9nYXRlIHBhaXJzLCB5aWVsZHMgVW5pY29kZSBjb2RlIHBvaW50cy4gRm9sbG93aW5nIGEgc2ltaWxhcgogKiB0ZXJtaW5vbG9neSB0byBHbywgd2UgdXNlIHRoZSBuYW1lICdydW5lJyBmb3IgYW4gaW50ZWdlciByZXByZXNlbnRpbmcgYQogKiBVbmljb2RlIGNvZGUgcG9pbnQuIFVzZSB0aGUgW3J1bmVzXSBwcm9wZXJ0eSB0byBnZXQgdGhlIHJ1bmVzIG9mIGEgc3RyaW5nOgogKgogKiAgICAgc3RyaW5nLnJ1bmVzLnRvTGlzdCgpOyAvLyBbNjgsIDk3LCAxMTQsIDExNl0KICoKICogRm9yIGEgY2hhcmFjdGVyIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAocGxhbmUgMCkgdGhhdCBpcwogKiBjb21wb3NlZCBvZiBhIHN1cnJvZ2F0ZSBwYWlyLCBbcnVuZXNdIGNvbWJpbmVzIHRoZSBwYWlyIGFuZCByZXR1cm5zIGEKICogc2luZ2xlIGludGVnZXIuICBGb3IgZXhhbXBsZSwgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGZvciBhCiAqIG11c2ljYWwgRy1jbGVmICgn8J2EnicpIHdpdGggcnVuZSB2YWx1ZSAweDFEMTFFIGNvbnNpc3RzIG9mIGEgVVRGLTE2IHN1cnJvZ2F0ZQogKiBwYWlyOiBgMHhEODM0YCBhbmQgYDB4REQxRWAuIFVzaW5nIFtjb2RlVW5pdHNdIHJldHVybnMgdGhlIHN1cnJvZ2F0ZSBwYWlyLAogKiBhbmQgdXNpbmcgYHJ1bmVzYCByZXR1cm5zIHRoZWlyIGNvbWJpbmVkIHZhbHVlOgogKgogKiAgICAgdmFyIGNsZWYgPSAnXHV7MUQxMUV9JzsKICogICAgIGNsZWYuY29kZVVuaXRzOyAgICAgICAgIC8vIFsweEQ4MzQsIDB4REQxRV0KICogICAgIGNsZWYucnVuZXMudG9MaXN0KCk7ICAgIC8vIFsweDFEMTFFXQogKgogKiBUaGUgU3RyaW5nIGNsYXNzIGNhbiBub3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuIEF0dGVtcHRpbmcgdG8gZG8gc28KICogeWllbGRzIGEgY29tcGlsZS10aW1lIGVycm9yLgogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogU2VlIFtTdHJpbmdCdWZmZXJdIHRvIGVmZmljaWVudGx5IGJ1aWxkIGEgc3RyaW5nIGluY3JlbWVudGFsbHkuIFNlZQogKiBbUmVnRXhwXSB0byB3b3JrIHdpdGggcmVndWxhciBleHByZXNzaW9ucy4KICoKICogQWxzbyBzZWU6CiAqCiAqICogW0RhcnQgQ29va2Jvb2tdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2Nvb2tib29rLyNzdHJpbmdzKQogKiAgIGZvciBTdHJpbmcgZXhhbXBsZXMgYW5kIHJlY2lwZXMuCiAqICogW0RhcnQgVXAgYW5kIFJ1bm5pbmddKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI3N0cmluZ3MtYW5kLXJlZ3VsYXItZXhwcmVzc2lvbnMpCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJpbmcgaW1wbGVtZW50cyBDb21wYXJhYmxlPFN0cmluZz4sIFBhdHRlcm4gewogIC8qKgogICAqIEFsbG9jYXRlcyBhIG5ldyBTdHJpbmcgZm9yIHRoZSBzcGVjaWZpZWQgW2NoYXJDb2Rlc10uCiAgICoKICAgKiBUaGUgW2NoYXJDb2Rlc10gY2FuIGJlIFVURi0xNiBjb2RlIHVuaXRzIG9yIHJ1bmVzLiBJZiBhIGNoYXItY29kZSB2YWx1ZSBpcwogICAqIDE2LWJpdCwgaXQgaXMgY29waWVkIHZlcmJhdGltOgogICAqCiAgICogICAgIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbNjhdKTsgLy8gJ0QnCiAgICoKICAgKiBJZiBhIGNoYXItY29kZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gMTYtYml0cywgaXQgaXMgZGVjb21wb3NlZCBpbnRvIGEKICAgKiBzdXJyb2dhdGUgcGFpcjoKICAgKgogICAqICAgICB2YXIgY2xlZiA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbMHgxRDExRV0pOwogICAqICAgICBjbGVmLmNvZGVVbml0QXQoMCk7IC8vIDB4RDgzNAogICAqICAgICBjbGVmLmNvZGVVbml0QXQoMSk7IC8vIDB4REQxRQogICAqCiAgICogSWYgW3N0YXJ0XSBhbmQgW2VuZF0gaXMgcHJvdmlkZWQsIG9ubHkgdGhlIHZhbHVlcyBvZiBbY2hhckNvZGVzXQogICAqIGF0IHBvc2l0aW9ucyBmcm9tIGBzdGFydGAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYCwgYXJlIHVzZWQuCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHZhbHVlcyBtdXN0IHNhdGlzZnkKICAgKiBgMCA8PSBzdGFydCA8PSBlbmQgPD0gY2hhckNvZGVzLmxlbmd0aGAuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBTdHJpbmcuZnJvbUNoYXJDb2RlcyhJdGVyYWJsZTxpbnQ+IGNoYXJDb2RlcywKICAgICAgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogQWxsb2NhdGVzIGEgbmV3IFN0cmluZyBmb3IgdGhlIHNwZWNpZmllZCBbY2hhckNvZGVdLgogICAqCiAgICogSWYgdGhlIFtjaGFyQ29kZV0gY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIFVURi0xNiBjb2RlIHVuaXQsIHRoZSBuZXcKICAgKiBzdHJpbmcgY29udGFpbnMgYSBzaW5nbGUgY29kZSB1bml0LiBPdGhlcndpc2UsIHRoZSBbbGVuZ3RoXSBpcyAyIGFuZAogICAqIHRoZSBjb2RlIHVuaXRzIGZvcm0gYSBzdXJyb2dhdGUgcGFpci4gU2VlIGRvY3VtZW50YXRpb24gZm9yCiAgICogW2Zyb21DaGFyQ29kZXNdLgogICAqCiAgICogQ3JlYXRpbmcgYSBTdHJpbmcgd2l0aCBoYWxmIG9mIGEgc3Vycm9nYXRlIHBhaXIgaXMgYWxsb3dlZC4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFN0cmluZy5mcm9tQ2hhckNvZGUoaW50IGNoYXJDb2RlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCBkZWNsYXJhdGlvbiBbbmFtZV0uCiAgICoKICAgKiBFbnZpcm9ubWVudCBkZWNsYXJhdGlvbnMgYXJlIHByb3ZpZGVkIGJ5IHRoZSBzdXJyb3VuZGluZyBzeXN0ZW0gY29tcGlsaW5nCiAgICogb3IgcnVubmluZyB0aGUgRGFydCBwcm9ncmFtLiBEZWNsYXJhdGlvbnMgbWFwIGEgc3RyaW5nIGtleSB0byBhIHN0cmluZwogICAqIHZhbHVlLgogICAqCiAgICogSWYgW25hbWVdIGlzIG5vdCBkZWNsYXJlZCBpbiB0aGUgZW52aXJvbm1lbnQsIHRoZSByZXN1bHQgaXMgaW5zdGVhZAogICAqIFtkZWZhdWx0VmFsdWVdLgogICAqCiAgICogRXhhbXBsZSBvZiBnZXR0aW5nIGEgdmFsdWU6CiAgICoKICAgKiAgICAgY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudCgiZGVmYXVsdEZsb28iLCBkZWZhdWx0VmFsdWU6ICJubyBmbG9vIikKICAgKgogICAqIEV4YW1wbGUgb2YgY2hlY2tpbmcgd2hldGhlciBhIGRlY2xhcmF0aW9uIGlzIHRoZXJlIGF0IGFsbDoKICAgKgogICAqICAgICB2YXIgaXNEZWNsYXJlZCA9IGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnQoIm1heWJlRGVjbGFyZWQiKSAhPSBudWxsOwogICAqLwogIC8vIFRoZSAuZnJvbUVudmlyb25tZW50KCkgY29uc3RydWN0b3JzIGFyZSBzcGVjaWFsIGluIHRoYXQgd2UgZG8gbm90IHdhbnQKICAvLyB1c2VycyB0byBjYWxsIHRoZW0gdXNpbmcgIm5ldyIuIFdlIHByb2hpYml0IHRoYXQgYnkgZ2l2aW5nIHRoZW0gYm9kaWVzCiAgLy8gdGhhdCB0aHJvdywgZXZlbiB0aG91Z2ggY29uc3QgY29uc3RydWN0b3JzIGFyZSBub3QgYWxsb3dlZCB0byBoYXZlIGJvZGllcy4KICAvLyBEaXNhYmxlIHRob3NlIHN0YXRpYyBlcnJvcnMuCiAgLy9pZ25vcmU6IGNvbnN0X2NvbnN0cnVjdG9yX3dpdGhfYm9keQogIC8vaWdub3JlOiBjb25zdF9mYWN0b3J5CiAgZXh0ZXJuYWwgY29uc3QgZmFjdG9yeSBTdHJpbmcuZnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lLAogICAgICB7U3RyaW5nIGRlZmF1bHRWYWx1ZX0pOwoKICAvKioKICAgKiBHZXRzIHRoZSBjaGFyYWN0ZXIgKGFzIGEgc2luZ2xlLWNvZGUtdW5pdCBbU3RyaW5nXSkgYXQgdGhlIGdpdmVuIFtpbmRleF0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIHJlcHJlc2VudHMgZXhhY3RseSBvbmUgVVRGLTE2IGNvZGUgdW5pdCwgd2hpY2ggbWF5IGJlCiAgICogaGFsZiBvZiBhIHN1cnJvZ2F0ZSBwYWlyLiBBIHNpbmdsZSBtZW1iZXIgb2YgYSBzdXJyb2dhdGUgcGFpciBpcyBhbgogICAqIGludmFsaWQgVVRGLTE2IHN0cmluZzoKICAgKgogICAqICAgICB2YXIgY2xlZiA9ICdcdXsxRDExRX0nOwogICAqICAgICAvLyBUaGVzZSByZXByZXNlbnQgaW52YWxpZCBVVEYtMTYgc3RyaW5ncy4KICAgKiAgICAgY2xlZlswXS5jb2RlVW5pdHM7ICAgICAgLy8gWzB4RDgzNF0KICAgKiAgICAgY2xlZlsxXS5jb2RlVW5pdHM7ICAgICAgLy8gWzB4REQxRV0KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBgbmV3IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5jb2RlVW5pdEF0KGluZGV4KSlgLgogICAqLwogIFN0cmluZyBvcGVyYXRvciBbXShpbnQgaW5kZXgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSAxNi1iaXQgVVRGLTE2IGNvZGUgdW5pdCBhdCB0aGUgZ2l2ZW4gW2luZGV4XS4KICAgKi8KICBpbnQgY29kZVVuaXRBdChpbnQgaW5kZXgpOwoKICAvKioKICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgVVRGLTE2IGNvZGUgdW5pdHMgaW4gdGhpcyBzdHJpbmcuIFRoZSBudW1iZXIKICAgKiBvZiBbcnVuZXNdIG1pZ2h0IGJlIGZld2VyLCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZQogICAqIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKHBsYW5lIDApOgogICAqCiAgICogICAgICdEYXJ0Jy5sZW5ndGg7ICAgICAgICAgIC8vIDQKICAgKiAgICAgJ0RhcnQnLnJ1bmVzLmxlbmd0aDsgICAgLy8gNAogICAqCiAgICogICAgIHZhciBjbGVmID0gJ1x1ezFEMTFFfSc7CiAgICogICAgIGNsZWYubGVuZ3RoOyAgICAgICAgICAgIC8vIDIKICAgKiAgICAgY2xlZi5ydW5lcy5sZW5ndGg7ICAgICAgLy8gMQogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm5zIGEgaGFzaCBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgY29kZSB1bml0cyBvZiB0aGUgc3RyaW5nLgogICAqCiAgICogVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggW29wZXJhdG9yID09XS4gU3RyaW5ncyB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlCiAgICogb2YgY29kZSB1bml0cyBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZS4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgb3RoZXIgaXMgYSBgU3RyaW5nYCB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNvZGUgdW5pdHMuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBjb21wYXJlcyBlYWNoIGluZGl2aWR1YWwgY29kZSB1bml0IG9mIHRoZSBzdHJpbmdzLgogICAqIEl0IGRvZXMgbm90IGNoZWNrIGZvciBVbmljb2RlIGVxdWl2YWxlbmNlLgogICAqIEZvciBleGFtcGxlLCBib3RoIHRoZSBmb2xsb3dpbmcgc3RyaW5ncyByZXByZXNlbnQgdGhlIHN0cmluZyAnQW3DqWxpZScsCiAgICogYnV0IGR1ZSB0byB0aGVpciBkaWZmZXJlbnQgZW5jb2RpbmcsIGFyZSBub3QgZXF1YWw6CiAgICoKICAgKiAgICAgJ0FtXHhlOWxpZScgPT0gJ0FtZVx1ezMwMX1saWUnOyAvLyBmYWxzZQogICAqCiAgICogVGhlIGZpcnN0IHN0cmluZyBlbmNvZGVzICfDqScgYXMgYSBzaW5nbGUgdW5pY29kZSBjb2RlIHVuaXQgKGFsc28KICAgKiBhIHNpbmdsZSBydW5lKSwgd2hlcmVhcyB0aGUgc2Vjb25kIHN0cmluZyBlbmNvZGVzIGl0IGFzICdlJyB3aXRoIHRoZQogICAqIGNvbWJpbmluZyBhY2NlbnQgY2hhcmFjdGVyICfil4zMgScuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpOwoKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIHN0cmluZyB0byBbb3RoZXJdLgogICAqCiAgICogUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIGB0aGlzYCBpcyBvcmRlcmVkIGJlZm9yZSBgb3RoZXJgLAogICAqIGEgcG9zaXRpdmUgdmFsdWUgaWYgYHRoaXNgIGlzIG9yZGVyZWQgYWZ0ZXIgYG90aGVyYCwKICAgKiBvciB6ZXJvIGlmIGB0aGlzYCBhbmQgYG90aGVyYCBhcmUgZXF1aXZhbGVudC4KICAgKgogICAqIFRoZSBvcmRlcmluZyBpcyB0aGUgc2FtZSBhcyB0aGUgb3JkZXJpbmcgb2YgdGhlIGNvZGUgcG9pbnRzIGF0IHRoZSBmaXJzdAogICAqIHBvc2l0aW9uIHdoZXJlIHRoZSB0d28gc3RyaW5ncyBkaWZmZXIuCiAgICogSWYgb25lIHN0cmluZyBpcyBhIHByZWZpeCBvZiB0aGUgb3RoZXIsCiAgICogdGhlbiB0aGUgc2hvcnRlciBzdHJpbmcgaXMgb3JkZXJlZCBiZWZvcmUgdGhlIGxvbmdlciBzdHJpbmcuCiAgICogSWYgdGhlIHN0cmluZ3MgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGNvbnRlbnQsIHRoZXkgYXJlIGVxdWl2YWxlbnQgd2l0aAogICAqIHJlZ2FyZCB0byB0aGUgb3JkZXJpbmcuCiAgICogT3JkZXJpbmcgZG9lcyBub3QgY2hlY2sgZm9yIFVuaWNvZGUgZXF1aXZhbGVuY2UuCiAgICogVGhlIGNvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuCiAgICovCiAgaW50IGNvbXBhcmVUbyhTdHJpbmcgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJpbmcgZW5kcyB3aXRoIFtvdGhlcl0uIEZvciBleGFtcGxlOgogICAqCiAgICogICAgICdEYXJ0Jy5lbmRzV2l0aCgndCcpOyAvLyB0cnVlCiAgICovCiAgYm9vbCBlbmRzV2l0aChTdHJpbmcgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJpbmcgc3RhcnRzIHdpdGggYSBtYXRjaCBvZiBbcGF0dGVybl0uCiAgICoKICAgKiAgICAgdmFyIHN0cmluZyA9ICdEYXJ0JzsKICAgKiAgICAgc3RyaW5nLnN0YXJ0c1dpdGgoJ0QnKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUKICAgKiAgICAgc3RyaW5nLnN0YXJ0c1dpdGgobmV3IFJlZ0V4cChyJ1tBLVpdW2Etel0nKSk7IC8vIHRydWUKICAgKgogICAqIElmIFtpbmRleF0gaXMgcHJvdmlkZWQsIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgc3Vic3RyaW5nIHN0YXJ0aW5nCiAgICogYXQgdGhhdCBpbmRleCBzdGFydHMgd2l0aCBhIG1hdGNoIG9mIFtwYXR0ZXJuXToKICAgKgogICAqICAgICBzdHJpbmcuc3RhcnRzV2l0aCgnYXJ0JywgMSk7ICAgICAgICAgICAgICAgICAgLy8gdHJ1ZQogICAqICAgICBzdHJpbmcuc3RhcnRzV2l0aChuZXcgUmVnRXhwKHInXHd7M30nKSk7ICAgICAgLy8gdHJ1ZQogICAqCiAgICogW2luZGV4XSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gW2xlbmd0aF0uCiAgICoKICAgKiBBIFtSZWdFeHBdIGNvbnRhaW5pbmcgJ14nIGRvZXMgbm90IG1hdGNoIGlmIHRoZSBbaW5kZXhdIGlzIGdyZWF0ZXIgdGhhbgogICAqIHplcm8uIFRoZSBwYXR0ZXJuIHdvcmtzIG9uIHRoZSBzdHJpbmcgYXMgYSB3aG9sZSwgYW5kIGRvZXMgbm90IGV4dHJhY3QKICAgKiBhIHN1YnN0cmluZyBzdGFydGluZyBhdCBbaW5kZXhdIGZpcnN0OgogICAqCiAgICogICAgIHN0cmluZy5zdGFydHNXaXRoKG5ldyBSZWdFeHAocideYXJ0JyksIDEpOyAgICAvLyBmYWxzZQogICAqICAgICBzdHJpbmcuc3RhcnRzV2l0aChuZXcgUmVnRXhwKHInYXJ0JyksIDEpOyAgICAgLy8gdHJ1ZQogICAqLwogIGJvb2wgc3RhcnRzV2l0aChQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgaW5kZXggPSAwXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBtYXRjaCBvZiBbcGF0dGVybl0gaW4gdGhpcyBzdHJpbmcsCiAgICogc3RhcnRpbmcgYXQgW3N0YXJ0XSwgaW5jbHVzaXZlOgogICAqCiAgICogICAgIHZhciBzdHJpbmcgPSAnRGFydGlzYW5zJzsKICAgKiAgICAgc3RyaW5nLmluZGV4T2YoJ2FydCcpOyAgICAgICAgICAgICAgICAgICAgIC8vIDEKICAgKiAgICAgc3RyaW5nLmluZGV4T2YobmV3IFJlZ0V4cChyJ1tBLVpdW2Etel0nKSk7IC8vIDAKICAgKgogICAqIFJldHVybnMgLTEgaWYgbm8gbWF0Y2ggaXMgZm91bmQ6CiAgICoKICAgKiAgICAgc3RyaW5nLmluZGV4T2YobmV3IFJlZ0V4cChyJ2RhcnQnKSk7ICAgICAgIC8vIC0xCiAgICoKICAgKiBbc3RhcnRdIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBub3QgZ3JlYXRlciB0aGFuIFtsZW5ndGhdLgogICAqLwogIGludCBpbmRleE9mKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydF0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBtYXRjaCBbcGF0dGVybl0gaW4gdGhpcyBzdHJpbmcsIHNlYXJjaGluZwogICAqIGJhY2t3YXJkIHN0YXJ0aW5nIGF0IFtzdGFydF0sIGluY2x1c2l2ZToKICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gJ0RhcnRpc2Fucyc7CiAgICogICAgIHN0cmluZy5sYXN0SW5kZXhPZignYScpOyAgICAgICAgICAgICAgICAgICAgLy8gNgogICAqICAgICBzdHJpbmcubGFzdEluZGV4T2YobmV3IFJlZ0V4cChyJ2EocnxuKScpKTsgIC8vIDYKICAgKgogICAqIFJldHVybnMgLTEgaWYgW3BhdHRlcm5dIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGlzIHN0cmluZy4KICAgKgogICAqICAgICBzdHJpbmcubGFzdEluZGV4T2YobmV3IFJlZ0V4cChyJ0RBUlQnKSk7ICAgIC8vIC0xCiAgICoKICAgKiBUaGUgW3N0YXJ0XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbm90IGdyZWF0ZXIgdGhhbiBbbGVuZ3RoXS4KICAgKi8KICBpbnQgbGFzdEluZGV4T2YoUGF0dGVybiBwYXR0ZXJuLCBbaW50IHN0YXJ0XSk7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0cmluZyBpcyBlbXB0eS4KICAgKi8KICBib29sIGdldCBpc0VtcHR5OwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJpbmcgaXMgbm90IGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzTm90RW1wdHk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgdGhpcyBzdHJpbmcgd2l0aCBbb3RoZXJdLgogICAqCiAgICogICAgICdkYXJ0JyArICdsYW5nJzsgLy8gJ2RhcnRsYW5nJwogICAqLwogIFN0cmluZyBvcGVyYXRvciArKFN0cmluZyBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyB0aGF0IGV4dGVuZHMgZnJvbSBbc3RhcnRJbmRleF0sCiAgICogaW5jbHVzaXZlLCB0byBbZW5kSW5kZXhdLCBleGNsdXNpdmUuCiAgICoKICAgKiAgICAgdmFyIHN0cmluZyA9ICdkYXJ0bGFuZyc7CiAgICogICAgIHN0cmluZy5zdWJzdHJpbmcoMSk7ICAgIC8vICdhcnRsYW5nJwogICAqICAgICBzdHJpbmcuc3Vic3RyaW5nKDEsIDQpOyAvLyAnYXJ0JwogICAqLwogIFN0cmluZyBzdWJzdHJpbmcoaW50IHN0YXJ0SW5kZXgsIFtpbnQgZW5kSW5kZXhdKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGhvdXQgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuCiAgICoKICAgKiBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYSBuZXcgc3RyaW5nIHdpdGggbm8KICAgKiBsZWFkaW5nIGFuZCBubyB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJldHVybmVkOgogICAqIGBgYGRhcnQKICAgKiAnXHREYXJ0IGlzIGZ1blxuJy50cmltKCk7IC8vICdEYXJ0IGlzIGZ1bicKICAgKiBgYGAKICAgKiBPdGhlcndpc2UsIHRoZSBvcmlnaW5hbCBzdHJpbmcgaXRzZWxmIGlzIHJldHVybmVkOgogICAqIGBgYGRhcnQKICAgKiB2YXIgc3RyMSA9ICdEYXJ0JzsKICAgKiB2YXIgc3RyMiA9IHN0cjEudHJpbSgpOwogICAqIGlkZW50aWNhbChzdHIxLCBzdHIyKTsgICAgLy8gdHJ1ZQogICAqIGBgYAogICAqIFdoaXRlc3BhY2UgaXMgZGVmaW5lZCBieSB0aGUgVW5pY29kZSBXaGl0ZV9TcGFjZSBwcm9wZXJ0eSAoYXMgZGVmaW5lZCBpbgogICAqIHZlcnNpb24gNi4yIG9yIGxhdGVyKSBhbmQgdGhlIEJPTSBjaGFyYWN0ZXIsIDB4RkVGRi4KICAgKgogICAqIEhlcmUgaXMgdGhlIGxpc3Qgb2YgdHJpbW1lZCBjaGFyYWN0ZXJzIGFjY29yZGluZyB0byBVbmljb2RlIHZlcnNpb24gNi4zOgogICAqIGBgYAogICAqICAgICAwMDA5Li4wMDBEICAgIDsgV2hpdGVfU3BhY2UgIyBDYyAgIDxjb250cm9sLTAwMDk+Li48Y29udHJvbC0wMDBEPgogICAqICAgICAwMDIwICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgIFNQQUNFCiAgICogICAgIDAwODUgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIENjICAgPGNvbnRyb2wtMDA4NT4KICAgKiAgICAgMDBBMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICBOTy1CUkVBSyBTUEFDRQogICAqICAgICAxNjgwICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgIE9HSEFNIFNQQUNFIE1BUksKICAgKiAgICAgMjAwMC4uMjAwQSAgICA7IFdoaXRlX1NwYWNlICMgWnMgICBFTiBRVUFELi5IQUlSIFNQQUNFCiAgICogICAgIDIwMjggICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpsICAgTElORSBTRVBBUkFUT1IKICAgKiAgICAgMjAyOSAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnAgICBQQVJBR1JBUEggU0VQQVJBVE9SCiAgICogICAgIDIwMkYgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgTkFSUk9XIE5PLUJSRUFLIFNQQUNFCiAgICogICAgIDIwNUYgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgTUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRQogICAqICAgICAzMDAwICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgIElERU9HUkFQSElDIFNQQUNFCiAgICoKICAgKiAgICAgRkVGRiAgICAgICAgICA7IEJPTSAgICAgICAgICAgICAgICBaRVJPIFdJRFRIIE5PX0JSRUFLIFNQQUNFCiAgICogYGBgCiAgICogU29tZSBsYXRlciB2ZXJzaW9ucyBvZiBVbmljb2RlIGRvIG5vdCBpbmNsdWRlIFUrMDA4NSBhcyBhIHdoaXRlc3BhY2UKICAgKiBjaGFyYWN0ZXIuIFdoZXRoZXIgaXQgaXMgdHJpbW1lZCBkZXBlbmRzIG9uIHRoZSBVbmljb2RlIHZlcnNpb24KICAgKiB1c2VkIGJ5IHRoZSBzeXN0ZW0uCiAgICovCiAgU3RyaW5nIHRyaW0oKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGhvdXQgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KICAgKgogICAqIEFzIFt0cmltXSwgYnV0IG9ubHkgcmVtb3ZlcyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICovCiAgU3RyaW5nIHRyaW1MZWZ0KCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRob3V0IGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlLgogICAqCiAgICogQXMgW3RyaW1dLCBidXQgb25seSByZW1vdmVzIHRyYWlsaW5nIHdoaXRlc3BhY2UuCiAgICovCiAgU3RyaW5nIHRyaW1SaWdodCgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHN0cmluZyBieSBjb25jYXRlbmF0aW5nIHRoaXMgc3RyaW5nIHdpdGggaXRzZWxmIGEgbnVtYmVyCiAgICogb2YgdGltZXMuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIGBzdHIgKiBuYCBpcyBlcXVpdmFsZW50IHRvCiAgICogYHN0ciArIHN0ciArIC4uLmAobiB0aW1lcylgLi4uICsgc3RyYC4KICAgKgogICAqIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIFt0aW1lc10gaXMgemVybyBvciBuZWdhdGl2ZS4KICAgKi8KICBTdHJpbmcgb3BlcmF0b3IgKihpbnQgdGltZXMpOwoKICAvKioKICAgKiBQYWRzIHRoaXMgc3RyaW5nIG9uIHRoZSBsZWZ0IGlmIGl0IGlzIHNob3J0ZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogUmV0dXJuIGEgbmV3IHN0cmluZyB0aGF0IHByZXBlbmRzIFtwYWRkaW5nXSBvbnRvIHRoaXMgc3RyaW5nCiAgICogb25lIHRpbWUgZm9yIGVhY2ggcG9zaXRpb24gdGhlIGxlbmd0aCBpcyBsZXNzIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIElmIFt3aWR0aF0gaXMgYWxyZWFkeSBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gYHRoaXMubGVuZ3RoYCwKICAgKiBubyBwYWRkaW5nIGlzIGFkZGVkLiBBIG5lZ2F0aXZlIGB3aWR0aGAgaXMgdHJlYXRlZCBhcyB6ZXJvLgogICAqCiAgICogSWYgW3BhZGRpbmddIGhhcyBsZW5ndGggZGlmZmVyZW50IGZyb20gMSwgdGhlIHJlc3VsdCB3aWxsIG5vdAogICAqIGhhdmUgbGVuZ3RoIGB3aWR0aGAuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgdGhlCiAgICogcGFkZGluZyBpcyBhIGxvbmdlciBzdHJpbmcgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGNoYXJhY3RlciwgbGlrZQogICAqIGAiJm5ic3A7ImAgb3IgYCJcdXsxMDAwMn1gIi4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSB1c2VyIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBgdGhpcy5sZW5ndGhgIGlzCiAgICogdGhlIGNvcnJlY3QgbWVhc3VyZSBvZiB0aGUgc3RyaW5ncyBsZW5ndGguCiAgICovCiAgU3RyaW5nIHBhZExlZnQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKTsKCiAgLyoqCiAgICogUGFkcyB0aGlzIHN0cmluZyBvbiB0aGUgcmlnaHQgaWYgaXQgaXMgc2hvcnRlciB0aGFuIFt3aWR0aF0uCiAgICoKICAgKiBSZXR1cm4gYSBuZXcgc3RyaW5nIHRoYXQgYXBwZW5kcyBbcGFkZGluZ10gYWZ0ZXIgdGhpcyBzdHJpbmcKICAgKiBvbmUgdGltZSBmb3IgZWFjaCBwb3NpdGlvbiB0aGUgbGVuZ3RoIGlzIGxlc3MgdGhhbiBbd2lkdGhdLgogICAqCiAgICogSWYgW3dpZHRoXSBpcyBhbHJlYWR5IHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBgdGhpcy5sZW5ndGhgLAogICAqIG5vIHBhZGRpbmcgaXMgYWRkZWQuIEEgbmVnYXRpdmUgYHdpZHRoYCBpcyB0cmVhdGVkIGFzIHplcm8uCiAgICoKICAgKiBJZiBbcGFkZGluZ10gaGFzIGxlbmd0aCBkaWZmZXJlbnQgZnJvbSAxLCB0aGUgcmVzdWx0IHdpbGwgbm90CiAgICogaGF2ZSBsZW5ndGggYHdpZHRoYC4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBjYXNlcyB3aGVyZSB0aGUKICAgKiBwYWRkaW5nIGlzIGEgbG9uZ2VyIHN0cmluZyByZXByZXNlbnRpbmcgYSBzaW5nbGUgY2hhcmFjdGVyLCBsaWtlCiAgICogYCImbmJzcDsiYCBvciBgIlx1ezEwMDAyfWAiLgogICAqIEluIHRoYXQgY2FzZSwgdGhlIHVzZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGB0aGlzLmxlbmd0aGAgaXMKICAgKiB0aGUgY29ycmVjdCBtZWFzdXJlIG9mIHRoZSBzdHJpbmdzIGxlbmd0aC4KICAgKi8KICBTdHJpbmcgcGFkUmlnaHQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RyaW5nIGNvbnRhaW5zIGEgbWF0Y2ggb2YgW290aGVyXToKICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gJ0RhcnQgc3RyaW5ncyc7CiAgICogICAgIHN0cmluZy5jb250YWlucygnRCcpOyAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUKICAgKiAgICAgc3RyaW5nLmNvbnRhaW5zKG5ldyBSZWdFeHAocidbQS1aXScpKTsgICAgLy8gdHJ1ZQogICAqCiAgICogSWYgW3N0YXJ0SW5kZXhdIGlzIHByb3ZpZGVkLCB0aGlzIG1ldGhvZCBtYXRjaGVzIG9ubHkgYXQgb3IgYWZ0ZXIgdGhhdAogICAqIGluZGV4OgogICAqCiAgICogICAgIHN0cmluZy5jb250YWlucygnWCcsIDEpOyAgICAgICAgICAgICAgICAgIC8vIGZhbHNlCiAgICogICAgIHN0cmluZy5jb250YWlucyhuZXcgUmVnRXhwKHInW0EtWl0nKSwgMSk7IC8vIGZhbHNlCiAgICoKICAgKiBbc3RhcnRJbmRleF0gbXVzdCBub3QgYmUgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIFtsZW5ndGhdLgogICAqLwogIGJvb2wgY29udGFpbnMoUGF0dGVybiBvdGhlciwgW2ludCBzdGFydEluZGV4ID0gMF0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyBpbiB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBbZnJvbV0gaW4gdGhpcyBzdHJpbmcKICAgKiBpcyByZXBsYWNlZCB3aXRoIFt0b10sIHN0YXJ0aW5nIGZyb20gW3N0YXJ0SW5kZXhdOgogICAqCiAgICogICAgICcwLjAwMDEnLnJlcGxhY2VGaXJzdChuZXcgUmVnRXhwKHInMCcpLCAnJyk7IC8vICcuMDAwMScKICAgKiAgICAgJzAuMDAwMScucmVwbGFjZUZpcnN0KG5ldyBSZWdFeHAocicwJyksICc3JywgMSk7IC8vICcwLjcwMDEnCiAgICovCiAgU3RyaW5nIHJlcGxhY2VGaXJzdChQYXR0ZXJuIGZyb20sIFN0cmluZyB0bywgW2ludCBzdGFydEluZGV4ID0gMF0pOwoKICAvKioKICAgKiBSZXBsYWNlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIFtmcm9tXSBpbiB0aGlzIHN0cmluZy4KICAgKgogICAqIFJldHVybnMgYSBuZXcgc3RyaW5nLCB3aGljaCBpcyB0aGlzIHN0cmluZwogICAqIGV4Y2VwdCB0aGF0IHRoZSBmaXJzdCBtYXRjaCBvZiBbZnJvbV0sIHN0YXJ0aW5nIGZyb20gW3N0YXJ0SW5kZXhdLAogICAqIGlzIHJlcGxhY2VkIGJ5IHRoZSByZXN1bHQgb2YgY2FsbGluZyBbcmVwbGFjZV0gd2l0aCB0aGUgbWF0Y2ggb2JqZWN0LgogICAqCiAgICogVGhlIG9wdGlvbmFsIFtzdGFydEluZGV4XSBpcyBieSBkZWZhdWx0IHNldCB0byAwLiBJZiBwcm92aWRlZCwgaXQgbXVzdCBiZQogICAqIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIGBbMCAuLiBsZW5dYCwgd2hlcmUgYGxlbmAgaXMgdGhpcyBzdHJpbmcncyBsZW5ndGguCiAgICovCiAgU3RyaW5nIHJlcGxhY2VGaXJzdE1hcHBlZChQYXR0ZXJuIGZyb20sIFN0cmluZyByZXBsYWNlKE1hdGNoIG1hdGNoKSwKICAgICAgW2ludCBzdGFydEluZGV4ID0gMF0pOwoKICAvKioKICAgKiBSZXBsYWNlcyBhbGwgc3Vic3RyaW5ncyB0aGF0IG1hdGNoIFtmcm9tXSB3aXRoIFtyZXBsYWNlXS4KICAgKgogICAqIFJldHVybnMgYSBuZXcgc3RyaW5nIGluIHdoaWNoIHRoZSBub24tb3ZlcmxhcHBpbmcgc3Vic3RyaW5ncyBtYXRjaGluZwogICAqIFtmcm9tXSAodGhlIG9uZXMgaXRlcmF0ZWQgYnkgYGZyb20uYWxsTWF0Y2hlcyh0aGlzU3RyaW5nKWApIGFyZSByZXBsYWNlZAogICAqIGJ5IHRoZSBsaXRlcmFsIHN0cmluZyBbcmVwbGFjZV0uCiAgICoKICAgKiAgICAgJ3Jlc3VtZScucmVwbGFjZUFsbChuZXcgUmVnRXhwKHInZScpLCAnw6knKTsgLy8gJ3LDqXN1bcOpJwogICAqCiAgICogTm90aWNlIHRoYXQgdGhlIFtyZXBsYWNlXSBzdHJpbmcgaXMgbm90IGludGVycHJldGVkLiBJZiB0aGUgcmVwbGFjZW1lbnQKICAgKiBkZXBlbmRzIG9uIHRoZSBtYXRjaCAoZm9yIGV4YW1wbGUgb24gYSBbUmVnRXhwXSdzIGNhcHR1cmUgZ3JvdXBzKSwgdXNlCiAgICogdGhlIFtyZXBsYWNlQWxsTWFwcGVkXSBtZXRob2QgaW5zdGVhZC4KICAgKi8KICBTdHJpbmcgcmVwbGFjZUFsbChQYXR0ZXJuIGZyb20sIFN0cmluZyByZXBsYWNlKTsKCiAgLyoqCiAgICogUmVwbGFjZSBhbGwgc3Vic3RyaW5ncyB0aGF0IG1hdGNoIFtmcm9tXSBieSBhIHN0cmluZyBjb21wdXRlZCBmcm9tIHRoZQogICAqIG1hdGNoLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJpbmcgaW4gd2hpY2ggdGhlIG5vbi1vdmVybGFwcGluZyBzdWJzdHJpbmdzIHRoYXQgbWF0Y2gKICAgKiBbZnJvbV0gKHRoZSBvbmVzIGl0ZXJhdGVkIGJ5IGBmcm9tLmFsbE1hdGNoZXModGhpc1N0cmluZylgKSBhcmUgcmVwbGFjZWQKICAgKiBieSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW3JlcGxhY2VdIG9uIHRoZSBjb3JyZXNwb25kaW5nIFtNYXRjaF0gb2JqZWN0LgogICAqCiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byByZXBsYWNlIG1hdGNoZXMgd2l0aCBuZXcgY29udGVudCB0aGF0IGRlcGVuZHMgb24gdGhlCiAgICogbWF0Y2gsIHVubGlrZSBbcmVwbGFjZUFsbF0gd2hlcmUgdGhlIHJlcGxhY2VtZW50IHN0cmluZyBpcyBhbHdheXMgdGhlIHNhbWUuCiAgICoKICAgKiBUaGUgW3JlcGxhY2VdIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBbTWF0Y2hdIGdlbmVyYXRlZAogICAqIGJ5IHRoZSBwYXR0ZXJuLCBhbmQgaXRzIHJlc3VsdCBpcyB1c2VkIGFzIHJlcGxhY2VtZW50LgogICAqCiAgICogVGhlIGZ1bmN0aW9uIGRlZmluZWQgYmVsb3cgY29udmVydHMgZWFjaCB3b3JkIGluIGEgc3RyaW5nIHRvIHNpbXBsaWZpZWQKICAgKiAncGlnIGxhdGluJyB1c2luZyBbcmVwbGFjZUFsbE1hcHBlZF06CiAgICoKICAgKiAgICAgcGlnTGF0aW4oU3RyaW5nIHdvcmRzKSA9PiB3b3Jkcy5yZXBsYWNlQWxsTWFwcGVkKAogICAqICAgICAgICAgbmV3IFJlZ0V4cChyJ1xiKFx3Kj8pKFthZWlvdV1cdyopJywgY2FzZVNlbnNpdGl2ZTogZmFsc2UpLAogICAqICAgICAgICAgKE1hdGNoIG0pID0+ICIke21bMl19JHttWzFdfSR7bVsxXS5pc0VtcHR5ID8gJ3dheScgOiAnYXknfSIpOwogICAqCiAgICogICAgIHBpZ0xhdGluKCdJIGhhdmUgYSBzZWNyZXQgbm93IScpOyAvLyAnSXdheSBhdmVoYXkgYXdheSBlY3JldHNheSBvd25heSEnCiAgICovCiAgU3RyaW5nIHJlcGxhY2VBbGxNYXBwZWQoUGF0dGVybiBmcm9tLCBTdHJpbmcgcmVwbGFjZShNYXRjaCBtYXRjaCkpOwoKICAvKioKICAgKiBSZXBsYWNlcyB0aGUgc3Vic3RyaW5nIGZyb20gW3N0YXJ0XSB0byBbZW5kXSB3aXRoIFtyZXBsYWNlbWVudF0uCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyBlcXVpdmFsZW50IHRvOgogICAqCiAgICogICAgIHRoaXMuc3Vic3RyaW5nKDAsIHN0YXJ0KSArIHJlcGxhY2VtZW50ICsgdGhpcy5zdWJzdHJpbmcoZW5kKQogICAqCiAgICogVGhlIFtzdGFydF0gYW5kIFtlbmRdIGluZGljZXMgbXVzdCBzcGVjaWZ5IGEgdmFsaWQgcmFuZ2Ugb2YgdGhpcyBzdHJpbmcuCiAgICogVGhhdCBpcyBgMCA8PSBzdGFydCA8PSBlbmQgPD0gdGhpcy5sZW5ndGhgLgogICAqIElmIFtlbmRdIGlzIGBudWxsYCwgaXQgZGVmYXVsdHMgdG8gW2xlbmd0aF0uCiAgICovCiAgU3RyaW5nIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFN0cmluZyByZXBsYWNlbWVudCk7CgogIC8qKgogICAqIFNwbGl0cyB0aGUgc3RyaW5nIGF0IG1hdGNoZXMgb2YgW3BhdHRlcm5dIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBzdWJzdHJpbmdzLgogICAqCiAgICogRmluZHMgYWxsIHRoZSBtYXRjaGVzIG9mIGBwYXR0ZXJuYCBpbiB0aGlzIHN0cmluZywKICAgKiBhbmQgcmV0dXJucyB0aGUgbGlzdCBvZiB0aGUgc3Vic3RyaW5ncyBiZXR3ZWVuIHRoZSBtYXRjaGVzLgogICAqCiAgICogICAgIHZhciBzdHJpbmcgPSAiSGVsbG8gd29ybGQhIjsKICAgKiAgICAgc3RyaW5nLnNwbGl0KCIgIik7ICAgICAgICAgICAgICAgICAgICAgIC8vIFsnSGVsbG8nLCAnd29ybGQhJ107CiAgICoKICAgKiBFbXB0eSBtYXRjaGVzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgc3RyaW5ncyBhcmUgaWdub3JlZCwKICAgKiBhbmQgc28gYXJlIGVtcHR5IG1hdGNoZXMgcmlnaHQgYWZ0ZXIgYW5vdGhlciBtYXRjaC4KICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gImFiYmEiOwogICAqICAgICBzdHJpbmcuc3BsaXQobmV3IFJlZ0V4cChyImIqIikpOyAgICAgICAgLy8gWydhJywgJ2EnXQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IFsnJywgJ2EnLCAnYScsICcnXQogICAqCiAgICogSWYgdGhpcyBzdHJpbmcgaXMgZW1wdHksIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgbGlzdCBpZiBgcGF0dGVybmAgbWF0Y2hlcwogICAqIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBpdCBpcyBgWyIiXWAgaWYgdGhlIHBhdHRlcm4gZG9lc24ndCBtYXRjaC4KICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gJyc7CiAgICogICAgIHN0cmluZy5zcGxpdCgnJyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBbXQogICAqICAgICBzdHJpbmcuc3BsaXQoImEiKTsgICAgICAgICAgICAgICAgICAgICAgLy8gWycnXQogICAqCiAgICogU3BsaXR0aW5nIHdpdGggYW4gZW1wdHkgcGF0dGVybiBzcGxpdHMgdGhlIHN0cmluZyBpbnRvIHNpbmdsZS1jb2RlIHVuaXQKICAgKiBzdHJpbmdzLgogICAqCiAgICogICAgIHZhciBzdHJpbmcgPSAnUHViJzsKICAgKiAgICAgc3RyaW5nLnNwbGl0KCcnKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFsnUCcsICd1JywgJ2InXQogICAqCiAgICogICAgIHN0cmluZy5jb2RlVW5pdHMubWFwKCh1bml0KSB7CiAgICogICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaXQpOwogICAqICAgICB9KS50b0xpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWydQJywgJ3UnLCAnYiddCiAgICoKICAgKiBTcGxpdHRpbmcgaGFwcGVucyBhdCBVVEYtMTYgY29kZSB1bml0IGJvdW5kYXJpZXMsCiAgICogYW5kIG5vdCBhdCBydW5lIGJvdW5kYXJpZXM6CiAgICoKICAgKiAgICAgLy8gU3RyaW5nIG1hZGUgdXAgb2YgdHdvIGNvZGUgdW5pdHMsIGJ1dCBvbmUgcnVuZS4KICAgKiAgICAgc3RyaW5nID0gJ1x1ezFEMTFFfSc7CiAgICogICAgIHN0cmluZy5zcGxpdCgnJykubGVuZ3RoOyAgICAgICAgICAgICAgICAgLy8gMiBzdXJyb2dhdGUgdmFsdWVzCiAgICoKICAgKiBUbyBnZXQgYSBsaXN0IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgaW5kaXZpZHVhbCBydW5lcyBvZiBhIHN0cmluZywKICAgKiB5b3Ugc2hvdWxkIG5vdCB1c2Ugc3BsaXQuIFlvdSBjYW4gaW5zdGVhZCBtYXAgZWFjaCBydW5lIHRvIGEgc3RyaW5nCiAgICogYXMgZm9sbG93czoKICAgKgogICAqICAgICBzdHJpbmcucnVuZXMubWFwKChydW5lKSA9PiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZShydW5lKSkudG9MaXN0KCk7CiAgICovCiAgTGlzdDxTdHJpbmc+IHNwbGl0KFBhdHRlcm4gcGF0dGVybik7CgogIC8qKgogICAqIFNwbGl0cyB0aGUgc3RyaW5nLCBjb252ZXJ0cyBpdHMgcGFydHMsIGFuZCBjb21iaW5lcyB0aGVtIGludG8gYSBuZXcKICAgKiBzdHJpbmcuCiAgICoKICAgKiBbcGF0dGVybl0gaXMgdXNlZCB0byBzcGxpdCB0aGUgc3RyaW5nIGludG8gcGFydHMgYW5kIHNlcGFyYXRpbmcgbWF0Y2hlcy4KICAgKgogICAqIEVhY2ggbWF0Y2ggaXMgY29udmVydGVkIHRvIGEgc3RyaW5nIGJ5IGNhbGxpbmcgW29uTWF0Y2hdLiBJZiBbb25NYXRjaF0KICAgKiBpcyBvbWl0dGVkLCB0aGUgbWF0Y2hlZCBzdHJpbmcgaXMgdXNlZC4KICAgKgogICAqIEVhY2ggbm9uLW1hdGNoZWQgcGFydCBpcyBjb252ZXJ0ZWQgYnkgYSBjYWxsIHRvIFtvbk5vbk1hdGNoXS4gSWYKICAgKiBbb25Ob25NYXRjaF0gaXMgb21pdHRlZCwgdGhlIG5vbi1tYXRjaGluZyBwYXJ0IGlzIHVzZWQuCiAgICoKICAgKiBUaGVuIGFsbCB0aGUgY29udmVydGVkIHBhcnRzIGFyZSBjb21iaW5lZCBpbnRvIHRoZSByZXN1bHRpbmcgc3RyaW5nLgogICAqCiAgICogICAgICdFYXRzIHNob290cyBsZWF2ZXMnLnNwbGl0TWFwSm9pbigobmV3IFJlZ0V4cChyJ3Nob290cycpKSwKICAgKiAgICAgICAgIG9uTWF0Y2g6ICAgIChtKSA9PiAnJHttLmdyb3VwKDApfScsCiAgICogICAgICAgICBvbk5vbk1hdGNoOiAobikgPT4gJyonKTsgLy8gKnNob290cyoKICAgKi8KICBTdHJpbmcgc3BsaXRNYXBKb2luKFBhdHRlcm4gcGF0dGVybiwKICAgICAge1N0cmluZyBvbk1hdGNoKE1hdGNoIG1hdGNoKSwgU3RyaW5nIG9uTm9uTWF0Y2goU3RyaW5nIG5vbk1hdGNoKX0pOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIHVubW9kaWZpYWJsZSBsaXN0IG9mIHRoZSBVVEYtMTYgY29kZSB1bml0cyBvZiB0aGlzIHN0cmluZy4KICAgKi8KICBMaXN0PGludD4gZ2V0IGNvZGVVbml0czsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIFVuaWNvZGUgY29kZS1wb2ludHMgb2YgdGhpcyBzdHJpbmcuCiAgICoKICAgKiBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIHN1cnJvZ2F0ZSBwYWlycywgdGhleSBhcmUgY29tYmluZWQgYW5kIHJldHVybmVkCiAgICogYXMgb25lIGludGVnZXIgYnkgdGhpcyBpdGVyYXRvci4gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBoYWx2ZXMgYXJlIHRyZWF0ZWQKICAgKiBsaWtlIHZhbGlkIDE2LWJpdCBjb2RlLXVuaXRzLgogICAqLwogIFJ1bmVzIGdldCBydW5lczsKCiAgLyoqCiAgICogQ29udmVydHMgYWxsIGNoYXJhY3RlcnMgaW4gdGhpcyBzdHJpbmcgdG8gbG93ZXIgY2FzZS4KICAgKiBJZiB0aGUgc3RyaW5nIGlzIGFscmVhZHkgaW4gYWxsIGxvd2VyIGNhc2UsIHRoaXMgbWV0aG9kIHJldHVybnMgWzp0aGlzOl0uCiAgICoKICAgKiAgICAgJ0FMUEhBQkVUJy50b0xvd2VyQ2FzZSgpOyAvLyAnYWxwaGFiZXQnCiAgICogICAgICdhYmMnLnRvTG93ZXJDYXNlKCk7ICAgICAgLy8gJ2FiYycKICAgKgogICAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgVW5pY29kZSBtYXBwaW5nIGFuZCB0aHVzIG9ubHkKICAgKiB3b3JrcyBpbiBzb21lIGxhbmd1YWdlcy4KICAgKi8KICAvLyBUT0RPKGZsb2l0c2NoKTogZG9jdW1lbnQgYmV0dGVyLiAoU2VlIEVjbWFTY3JpcHQgZm9yIGRlc2NyaXB0aW9uKS4KICBTdHJpbmcgdG9Mb3dlckNhc2UoKTsKCiAgLyoqCiAgICogQ29udmVydHMgYWxsIGNoYXJhY3RlcnMgaW4gdGhpcyBzdHJpbmcgdG8gdXBwZXIgY2FzZS4KICAgKiBJZiB0aGUgc3RyaW5nIGlzIGFscmVhZHkgaW4gYWxsIHVwcGVyIGNhc2UsIHRoaXMgbWV0aG9kIHJldHVybnMgWzp0aGlzOl0uCiAgICoKICAgKiAgICAgJ2FscGhhYmV0Jy50b1VwcGVyQ2FzZSgpOyAvLyAnQUxQSEFCRVQnCiAgICogICAgICdBQkMnLnRvVXBwZXJDYXNlKCk7ICAgICAgLy8gJ0FCQycKICAgKgogICAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgVW5pY29kZSBtYXBwaW5nIGFuZCB0aHVzIG9ubHkKICAgKiB3b3JrcyBpbiBzb21lIGxhbmd1YWdlcy4KICAgKi8KICAvLyBUT0RPKGZsb2l0c2NoKTogZG9jdW1lbnQgYmV0dGVyLiAoU2VlIEVjbWFTY3JpcHQgZm9yIGRlc2NyaXB0aW9uKS4KICBTdHJpbmcgdG9VcHBlckNhc2UoKTsKfQoKLyoqCiAqIFRoZSBydW5lcyAoaW50ZWdlciBVbmljb2RlIGNvZGUgcG9pbnRzKSBvZiBhIFtTdHJpbmddLgogKi8KY2xhc3MgUnVuZXMgZXh0ZW5kcyBJdGVyYWJsZTxpbnQ+IHsKICBmaW5hbCBTdHJpbmcgc3RyaW5nOwogIFJ1bmVzKHRoaXMuc3RyaW5nKTsKCiAgUnVuZUl0ZXJhdG9yIGdldCBpdGVyYXRvciA9PiBSdW5lSXRlcmF0b3Ioc3RyaW5nKTsKCiAgaW50IGdldCBsYXN0IHsKICAgIGlmIChzdHJpbmcubGVuZ3RoID09IDApIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcignTm8gZWxlbWVudHMuJyk7CiAgICB9CiAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKICAgIGludCBjb2RlID0gc3RyaW5nLmNvZGVVbml0QXQobGVuZ3RoIC0gMSk7CiAgICBpZiAoX2lzVHJhaWxTdXJyb2dhdGUoY29kZSkgJiYgc3RyaW5nLmxlbmd0aCA+IDEpIHsKICAgICAgaW50IHByZXZpb3VzQ29kZSA9IHN0cmluZy5jb2RlVW5pdEF0KGxlbmd0aCAtIDIpOwogICAgICBpZiAoX2lzTGVhZFN1cnJvZ2F0ZShwcmV2aW91c0NvZGUpKSB7CiAgICAgICAgcmV0dXJuIF9jb21iaW5lU3Vycm9nYXRlUGFpcihwcmV2aW91c0NvZGUsIGNvZGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29kZTsKICB9Cn0KCi8vIElzIHRoZW4gY29kZSAoYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlcikgYSBVVEYtMTYgbGVhZCBzdXJyb2dhdGUuCmJvb2wgX2lzTGVhZFN1cnJvZ2F0ZShpbnQgY29kZSkgPT4gKGNvZGUgJiAweEZDMDApID09IDB4RDgwMDsKCi8vIElzIHRoZW4gY29kZSAoYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlcikgYSBVVEYtMTYgdHJhaWwgc3Vycm9nYXRlLgpib29sIF9pc1RyYWlsU3Vycm9nYXRlKGludCBjb2RlKSA9PiAoY29kZSAmIDB4RkMwMCkgPT0gMHhEQzAwOwoKLy8gQ29tYmluZSBhIGxlYWQgYW5kIGEgdHJhaWwgc3Vycm9nYXRlIHZhbHVlIGludG8gYSBzaW5nbGUgY29kZSBwb2ludC4KaW50IF9jb21iaW5lU3Vycm9nYXRlUGFpcihpbnQgc3RhcnQsIGludCBlbmQpIHsKICByZXR1cm4gMHgxMDAwMCArICgoc3RhcnQgJiAweDNGRikgPDwgMTApICsgKGVuZCAmIDB4M0ZGKTsKfQoKLyoqIFtJdGVyYXRvcl0gZm9yIHJlYWRpbmcgcnVuZXMgKGludGVnZXIgVW5pY29kZSBjb2RlIHBvaW50cykgb3V0IG9mIGEgRGFydAogICogc3RyaW5nLgogICovCmNsYXNzIFJ1bmVJdGVyYXRvciBpbXBsZW1lbnRzIEJpZGlyZWN0aW9uYWxJdGVyYXRvcjxpbnQ+IHsKICAvKiogU3RyaW5nIGJlaW5nIGl0ZXJhdGVkLiAqLwogIGZpbmFsIFN0cmluZyBzdHJpbmc7CiAgLyoqIFBvc2l0aW9uIGJlZm9yZSB0aGUgY3VycmVudCBjb2RlIHBvaW50LiAqLwogIGludCBfcG9zaXRpb247CiAgLyoqIFBvc2l0aW9uIGFmdGVyIHRoZSBjdXJyZW50IGNvZGUgcG9pbnQuICovCiAgaW50IF9uZXh0UG9zaXRpb247CiAgLyoqCiAgICogQ3VycmVudCBjb2RlIHBvaW50LgogICAqCiAgICogSWYgdGhlIGl0ZXJhdG9yIGhhcyBoaXQgZWl0aGVyIGVuZCwgdGhlIFtfY3VycmVudENvZGVQb2ludF0gaXMgbnVsbAogICAqIGFuZCBbOiBfcG9zaXRpb24gPT0gX25leHRQb3NpdGlvbiA6XS4KICAgKi8KICBpbnQgX2N1cnJlbnRDb2RlUG9pbnQ7CgogIC8qKiBDcmVhdGUgYW4gaXRlcmF0b3IgcG9zaXRpb25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuICovCiAgUnVuZUl0ZXJhdG9yKFN0cmluZyBzdHJpbmcpCiAgICAgIDogdGhpcy5zdHJpbmcgPSBzdHJpbmcsCiAgICAgICAgX3Bvc2l0aW9uID0gMCwKICAgICAgICBfbmV4dFBvc2l0aW9uID0gMDsKCiAgLyoqCiAgICogQ3JlYXRlIGFuIGl0ZXJhdG9yIHBvc2l0aW9uZWQgYmVmb3JlIHRoZSBbaW5kZXhddGggY29kZSB1bml0IG9mIHRoZSBzdHJpbmcuCiAgICoKICAgKiBXaGVuIGNyZWF0ZWQsIHRoZXJlIGlzIG5vIFtjdXJyZW50XSB2YWx1ZS4KICAgKiBBIFttb3ZlTmV4dF0gd2lsbCB1c2UgdGhlIHJ1bmUgc3RhcnRpbmcgYXQgW2luZGV4XSB0aGUgY3VycmVudCB2YWx1ZSwKICAgKiBhbmQgYSBbbW92ZVByZXZpb3VzXSB3aWxsIHVzZSB0aGUgcnVuZSBlbmRpbmcganVzdCBiZWZvcmUgW2luZGV4XSBhcyB0aGUKICAgKiB0aGUgY3VycmVudCB2YWx1ZS4KICAgKgogICAqIFRoZSBbaW5kZXhdIHBvc2l0aW9uIG11c3Qgbm90IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpci4KICAgKi8KICBSdW5lSXRlcmF0b3IuYXQoU3RyaW5nIHN0cmluZywgaW50IGluZGV4KQogICAgICA6IHN0cmluZyA9IHN0cmluZywKICAgICAgICBfcG9zaXRpb24gPSBpbmRleCwKICAgICAgICBfbmV4dFBvc2l0aW9uID0gaW5kZXggewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChpbmRleCwgMCwgc3RyaW5nLmxlbmd0aCk7CiAgICBfY2hlY2tTcGxpdFN1cnJvZ2F0ZShpbmRleCk7CiAgfQoKICAvKiogVGhyb3cgYW4gZXJyb3IgaWYgdGhlIGluZGV4IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpci4gKi8KICB2b2lkIF9jaGVja1NwbGl0U3Vycm9nYXRlKGludCBpbmRleCkgewogICAgaWYgKGluZGV4ID4gMCAmJgogICAgICAgIGluZGV4IDwgc3RyaW5nLmxlbmd0aCAmJgogICAgICAgIF9pc0xlYWRTdXJyb2dhdGUoc3RyaW5nLmNvZGVVbml0QXQoaW5kZXggLSAxKSkgJiYKICAgICAgICBfaXNUcmFpbFN1cnJvZ2F0ZShzdHJpbmcuY29kZVVuaXRBdChpbmRleCkpKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ0luZGV4IGluc2lkZSBzdXJyb2dhdGUgcGFpcjogJGluZGV4Jyk7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBydW5lIGluIHRoZSBzdHJpbmcuCiAgICoKICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIFtjdXJyZW50XSBydW5lIGlzIG51bGwuCiAgICovCiAgaW50IGdldCByYXdJbmRleCA9PiAoX3Bvc2l0aW9uICE9IF9uZXh0UG9zaXRpb24pID8gX3Bvc2l0aW9uIDogbnVsbDsKCiAgLyoqCiAgICogUmVzZXRzIHRoZSBpdGVyYXRvciB0byB0aGUgcnVuZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IG9mIHRoZSBzdHJpbmcuCiAgICoKICAgKiBTZXR0aW5nIGEgbmVnYXRpdmUgW3Jhd0luZGV4XSwgb3Igb25lIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bwogICAqIFs6c3RyaW5nLmxlbmd0aDpdLAogICAqIGlzIGFuIGVycm9yLiBTbyBpcyBzZXR0aW5nIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpci4KICAgKgogICAqIFNldHRpbmcgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmQgb2YgdGhlbiBzdHJpbmcgd2lsbCBzZXQgW2N1cnJlbnRdIHRvIG51bGwuCiAgICovCiAgdm9pZCBzZXQgcmF3SW5kZXgoaW50IHJhd0luZGV4KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRJbmRleChyYXdJbmRleCwgc3RyaW5nLCAicmF3SW5kZXgiKTsKICAgIHJlc2V0KHJhd0luZGV4KTsKICAgIG1vdmVOZXh0KCk7CiAgfQoKICAvKioKICAgKiBSZXNldHMgdGhlIGl0ZXJhdG9yIHRvIHRoZSBnaXZlbiBpbmRleCBpbnRvIHRoZSBzdHJpbmcuCiAgICoKICAgKiBBZnRlciB0aGlzIHRoZSBbY3VycmVudF0gdmFsdWUgaXMgdW5zZXQuCiAgICogWW91IG11c3QgY2FsbCBbbW92ZU5leHRdIG1ha2UgdGhlIHJ1bmUgYXQgdGhlIHBvc2l0aW9uIGN1cnJlbnQsCiAgICogb3IgW21vdmVQcmV2aW91c10gZm9yIHRoZSBsYXN0IHJ1bmUgYmVmb3JlIHRoZSBwb3NpdGlvbi4KICAgKgogICAqIFNldHRpbmcgYSBuZWdhdGl2ZSBbcmF3SW5kZXhdLCBvciBvbmUgZ3JlYXRlciB0aGFuIFs6c3RyaW5nLmxlbmd0aDpdLAogICAqIGlzIGFuIGVycm9yLiBTbyBpcyBzZXR0aW5nIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpci4KICAgKi8KICB2b2lkIHJlc2V0KFtpbnQgcmF3SW5kZXggPSAwXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChyYXdJbmRleCwgMCwgc3RyaW5nLmxlbmd0aCwgInJhd0luZGV4Iik7CiAgICBfY2hlY2tTcGxpdFN1cnJvZ2F0ZShyYXdJbmRleCk7CiAgICBfcG9zaXRpb24gPSBfbmV4dFBvc2l0aW9uID0gcmF3SW5kZXg7CiAgICBfY3VycmVudENvZGVQb2ludCA9IG51bGw7CiAgfQoKICAvKiogVGhlIHJ1bmUgKGludGVnZXIgVW5pY29kZSBjb2RlIHBvaW50KSBzdGFydGluZyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbgogICAqICB0aGUgc3RyaW5nLgogICAqLwogIGludCBnZXQgY3VycmVudCA9PiBfY3VycmVudENvZGVQb2ludDsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIGNvbXByaXNpbmcgdGhlIGN1cnJlbnQgcnVuZS4KICAgKgogICAqIFJldHVybnMgemVybyBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHJ1bmUgKFtjdXJyZW50XSBpcyBudWxsKS4KICAgKi8KICBpbnQgZ2V0IGN1cnJlbnRTaXplID0+IF9uZXh0UG9zaXRpb24gLSBfcG9zaXRpb247CgogIC8qKgogICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgcnVuZS4KICAgKgogICAqIEZvciBydW5lcyBvdXRzaWRlIHRoZSBiYXNpYyBtdWx0aWxpbmd1YWwgcGxhbmUsIHRoaXMgd2lsbCBiZQogICAqIGEgU3RyaW5nIG9mIGxlbmd0aCAyLCBjb250YWluaW5nIHR3byBjb2RlIHVuaXRzLgogICAqCiAgICogUmV0dXJucyBudWxsIGlmIFtjdXJyZW50XSBpcyBudWxsLgogICAqLwogIFN0cmluZyBnZXQgY3VycmVudEFzU3RyaW5nIHsKICAgIGlmIChfcG9zaXRpb24gPT0gX25leHRQb3NpdGlvbikgcmV0dXJuIG51bGw7CiAgICBpZiAoX3Bvc2l0aW9uICsgMSA9PSBfbmV4dFBvc2l0aW9uKSByZXR1cm4gc3RyaW5nW19wb3NpdGlvbl07CiAgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhfcG9zaXRpb24sIF9uZXh0UG9zaXRpb24pOwogIH0KCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIF9wb3NpdGlvbiA9IF9uZXh0UG9zaXRpb247CiAgICBpZiAoX3Bvc2l0aW9uID09IHN0cmluZy5sZW5ndGgpIHsKICAgICAgX2N1cnJlbnRDb2RlUG9pbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpbnQgY29kZVVuaXQgPSBzdHJpbmcuY29kZVVuaXRBdChfcG9zaXRpb24pOwogICAgaW50IG5leHRQb3NpdGlvbiA9IF9wb3NpdGlvbiArIDE7CiAgICBpZiAoX2lzTGVhZFN1cnJvZ2F0ZShjb2RlVW5pdCkgJiYgbmV4dFBvc2l0aW9uIDwgc3RyaW5nLmxlbmd0aCkgewogICAgICBpbnQgbmV4dENvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQobmV4dFBvc2l0aW9uKTsKICAgICAgaWYgKF9pc1RyYWlsU3Vycm9nYXRlKG5leHRDb2RlVW5pdCkpIHsKICAgICAgICBfbmV4dFBvc2l0aW9uID0gbmV4dFBvc2l0aW9uICsgMTsKICAgICAgICBfY3VycmVudENvZGVQb2ludCA9IF9jb21iaW5lU3Vycm9nYXRlUGFpcihjb2RlVW5pdCwgbmV4dENvZGVVbml0KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX25leHRQb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKICAg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ZTsKCi8qKgogKiBBIGNsYXNzIGZvciBjb25jYXRlbmF0aW5nIHN0cmluZ3MgZWZmaWNpZW50bHkuCiAqCiAqIEFsbG93cyBmb3IgdGhlIGluY3JlbWVudGFsIGJ1aWxkaW5nIG9mIGEgc3RyaW5nIHVzaW5nIHdyaXRlKigpIG1ldGhvZHMuCiAqIFRoZSBzdHJpbmdzIGFyZSBjb25jYXRlbmF0ZWQgdG8gYSBzaW5nbGUgc3RyaW5nIG9ubHkgd2hlbiBbdG9TdHJpbmddIGlzCiAqIGNhbGxlZC4KICovCmNsYXNzIFN0cmluZ0J1ZmZlciBpbXBsZW1lbnRzIFN0cmluZ1NpbmsgewogIC8qKiBDcmVhdGVzIHRoZSBzdHJpbmcgYnVmZmVyIHdpdGggYW4gaW5pdGlhbCBjb250ZW50LiAqLwogIGV4dGVybmFsIFN0cmluZ0J1ZmZlcihbT2JqZWN0IGNvbnRlbnQgPSAiIl0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGNvbnRlbnQgdGhhdCBoYXMgYmVlbiBhY2N1bXVsYXRlZCBzbyBmYXIuCiAgICogVGhpcyBpcyBhIGNvbnN0YW50LXRpbWUgb3BlcmF0aW9uLgogICAqLwogIGV4dGVybmFsIGludCBnZXQgbGVuZ3RoOwoKICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBidWZmZXIgaXMgZW1wdHkuIFRoaXMgaXMgYSBjb25zdGFudC10aW1lIG9wZXJhdGlvbi4gKi8KICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyBub3QgZW1wdHkuIFRoaXMgaXMgYSBjb25zdGFudC10aW1lCiAgICogb3BlcmF0aW9uLgogICAqLwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIC8vLyBBZGRzIHRoZSBjb250ZW50cyBvZiBbb2JqXSwgY29udmVydGVkIHRvIGEgc3RyaW5nLCB0byB0aGUgYnVmZmVyLgogIGV4dGVybmFsIHZvaWQgd3JpdGUoT2JqZWN0IG9iaik7CgogIC8vLyBBZGRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgW2NoYXJDb2RlXSB0byB0aGUgYnVmZmVyLgogIGV4dGVybmFsIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpOwoKICBleHRlcm5hbCB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKTsKCiAgZXh0ZXJuYWwgdm9pZCB3cml0ZWxuKFtPYmplY3Qgb2JqID0gIiJdKTsKCiAgLyoqCiAgICogQ2xlYXJzIHRoZSBzdHJpbmcgYnVmZmVyLgogICAqLwogIGV4dGVybmFsIHZvaWQgY2xlYXIoKTsKCiAgLy8vIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBhcyBhIGNvbmNhdGVuYXRlZCBzdHJpbmcuCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KNABOTjwBEwEEMgNLSwsEKzwwAQZJKAYbAVEjAQZGEAYjAUgjAUItAUUBLAEGHwYZAT8eAgEcZGFydDpjb3JlL3N0cmluZ19idWZmZXIuZGFydDhvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3N0cmluZ19idWZmZXJfcGF0Y2guZGFydJZaLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgU3RyaW5nQnVmZmVyIHsKICBzdGF0aWMgY29uc3QgaW50IF9CVUZGRVJfU0laRSA9IDY0OwogIHN0YXRpYyBjb25zdCBpbnQgX1BBUlRTX1RPX0NPTVBBQ1QgPSAxMjg7CiAgc3RhdGljIGNvbnN0IGludCBfUEFSVFNfVE9fQ09NUEFDVF9TSVpFX0xJTUlUID0gX1BBUlRTX1RPX0NPTVBBQ1QgKiA4OwoKICAvKioKICAgKiBXaGVuIHN0cmluZ3MgYXJlIHdyaXR0ZW4gdG8gdGhlIHN0cmluZyBidWZmZXIsIHdlIGFkZCB0aGVtIHRvIGEKICAgKiBsaXN0IG9mIHN0cmluZyBwYXJ0cy4KICAgKi8KICBMaXN0PFN0cmluZz4gX3BhcnRzOwoKICAvKioKICAgICogVG90YWwgbnVtYmVyIG9mIGNvZGUgdW5pdHMgaW4gdGhlIHN0cmluZyBwYXJ0cy4gRG9lcyBub3QgaW5jbHVkZQogICAgKiB0aGUgY29kZSB1bml0cyBhZGRlZCB0byB0aGUgYnVmZmVyLgogICAgKi8KICBpbnQgX3BhcnRzQ29kZVVuaXRzID0gMDsKCiAgLyoqCiAgICogVG8gcHJlc2VydmUgbWVtb3J5LCB3ZSBzb21ldGltZXMgY29tcGFjdCB0aGUgcGFydHMuIFRoaXMgY29tYmluZXMKICAgKiBzZXZlcmFsIHNtYWxsZXIgcGFydHMgaW50byBhIHNpbmdsZSBsYXJnZXIgcGFydCB0byBjdXQgZG93biBvbiB0aGUKICAgKiBjb3N0IHRoYXQgY29tZXMgZnJvbSB0aGUgcGVyLW9iamVjdCBtZW1vcnkgb3ZlcmhlYWQuIFdlIGtlZXAgdHJhY2sKICAgKiBvZiB0aGUgbGFzdCBpbmRleCB3aGVyZSB3ZSBlbmRlZCBvdXIgY29tcGFjdGlvbiBhbmQgdGhlIG51bWJlciBvZgogICAqIGNvZGUgdW5pdHMgYWRkZWQgc2luY2UgdGhlIGxhc3QgY29tcGFjdGlvbi4KICAgKi8KICBpbnQgX3BhcnRzQ29tcGFjdGlvbkluZGV4ID0gMDsKICBpbnQgX3BhcnRzQ29kZVVuaXRzU2luY2VDb21wYWN0aW9uID0gMDsKCiAgLyoqCiAgICogVGhlIGJ1ZmZlciBpcyB1c2VkIHRvIGJ1aWxkIHVwIGEgc3RyaW5nIGZyb20gY29kZSB1bml0cy4gSXQgaXMKICAgKiB1c2VkIHdoZW4gd3JpdGluZyBzaG9ydCBzdHJpbmdzIG9yIGluZGl2aWR1YWwgY2hhciBjb2RlcyB0byB0aGUKICAgKiBidWZmZXIuIFRoZSBidWZmZXIgaXMgYWxsb2NhdGVkIG9uIGRlbWFuZC4KICAgKi8KICBVaW50MTZMaXN0IF9idWZmZXI7CiAgaW50IF9idWZmZXJQb3NpdGlvbiA9IDA7CgogIC8qKgogICAqIENvbGxlY3RzIHRoZSBhcHByb3hpbWF0ZSBtYXhpbWFsIG1hZ25pdHVkZSBvZiB0aGUgY29kZSB1bml0cyBhZGRlZAogICAqIHRvIHRoZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmFsdWUgb2YgZWFjaCBhZGRlZCBjb2RlIHVuaXQgaXMgb3InZWQgd2l0aCB0aGlzIHZhcmlhYmxlLCBzbyB0aGUKICAgKiBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgaW4gYW55IGNvZGUgdW5pdCBpcyBhbHNvIHNldCBpbiB0aGlzIHZhbHVlLgogICAqIElmIGJlbG93IDI1NiwgdGhlIHN0cmluZyBpbiB0aGUgYnVmZmVyIGlzIGEgTGF0aW4tMSBzdHJpbmcuCiAgICovCiAgaW50IF9idWZmZXJDb2RlVW5pdE1hZ25pdHVkZSA9IDA7CgogIC8vLyBDcmVhdGVzIHRoZSBzdHJpbmcgYnVmZmVyIHdpdGggYW4gaW5pdGlhbCBjb250ZW50LgogIEBwYXRjaAogIFN0cmluZ0J1ZmZlcihbT2JqZWN0IGNvbnRlbnQgPSAiIl0pIHsKICAgIHdyaXRlKGNvbnRlbnQpOwogIH0KCiAgQHBhdGNoCiAgaW50IGdldCBsZW5ndGggPT4gX3BhcnRzQ29kZVVuaXRzICsgX2J1ZmZlclBvc2l0aW9uOwoKICBAcGF0Y2gKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIFN0cmluZyBzdHIgPSAnJG9iaic7CiAgICBpZiAoc3RyLmlzRW1wdHkpIHJldHVybjsKICAgIF9jb25zdW1lQnVmZmVyKCk7CiAgICBfYWRkUGFydChzdHIpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgaWYgKGNoYXJDb2RlIDw9IDB4RkZGRikgewogICAgICBpZiAoY2hhckNvZGUgPCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoY2hhckNvZGUsIDAsIDB4MTBGRkZGKTsKICAgICAgfQogICAgICBfZW5zdXJlQ2FwYWNpdHkoMSk7CiAgICAgIF9idWZmZXJbX2J1ZmZlclBvc2l0aW9uKytdID0gY2hhckNvZGU7CiAgICAgIF9idWZmZXJDb2RlVW5pdE1hZ25pdHVkZSB8PSBjaGFyQ29kZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjaGFyQ29kZSA+IDB4MTBGRkZGKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoY2hhckNvZGUsIDAsIDB4MTBGRkZGKTsKICAgICAgfQogICAgICBfZW5zdXJlQ2FwYWNpdHkoMik7CiAgICAgIGludCBiaXRzID0gY2hhckNvZGUgLSAweDEwMDAwOwogICAgICBfYnVmZmVyW19idWZmZXJQb3NpdGlvbisrXSA9IDB4RDgwMCB8IChiaXRzID4+IDEwKTsKICAgICAgX2J1ZmZlcltfYnVmZmVyUG9zaXRpb24rK10gPSAweERDMDAgfCAoYml0cyAmIDB4M0ZGKTsKICAgICAgX2J1ZmZlckNvZGVVbml0TWFnbml0dWRlIHw9IDB4RkZGRjsKICAgIH0KICB9CgogIEBwYXRjaAogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gb2JqZWN0cy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuOwogICAgaWYgKHNlcGFyYXRvci5pc0VtcHR5KSB7CiAgICAgIGRvIHsKICAgICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICB3cml0ZShzZXBhcmF0b3IpOwogICAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9CiAgICB9CiAgfQoKICBAcGF0Y2gKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvYmogPSAiIl0pIHsKICAgIHdyaXRlKG9iaik7CiAgICB3cml0ZSgiXG4iKTsKICB9CgogIC8qKiBNYWtlcyB0aGUgYnVmZmVyIGVtcHR5LiAqLwogIEBwYXRjaAogIHZvaWQgY2xlYXIoKSB7CiAgICBfcGFydHMgPSBudWxsOwogICAgX3BhcnRzQ29kZVVuaXRzID0gX2J1ZmZlclBvc2l0aW9uID0gX2J1ZmZlckNvZGVVbml0TWFnbml0dWRlID0gMDsKICB9CgogIC8qKiBSZXR1cm5zIHRoZSBjb250ZW50cyBvZiBidWZmZXIgYXMgYSBzdHJpbmcuICovCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgX2NvbnN1bWVCdWZmZXIoKTsKICAgIHJldHVybiAoX3BhcnRzQ29kZVVuaXRzID09IDApCiAgICAgICAgPyAiIgogICAgICAgIDogX1N0cmluZ0Jhc2UuX2NvbmNhdFJhbmdlKF9wYXJ0cywgMCwgX3BhcnRzLmxlbmd0aCk7CiAgfQoKICAvKiogRW5zdXJlcyB0aGF0IHRoZSBidWZmZXIgaGFzIGVub3VnaCBjYXBhY2l0eSB0byBhZGQgbiBjb2RlIHVuaXRzLiAqLwogIHZvaWQgX2Vuc3VyZUNhcGFjaXR5KGludCBuKSB7CiAgICBpZiAoX2J1ZmZlciA9PSBudWxsKSB7CiAgICAgIF9idWZmZXIgPSBuZXcgVWludDE2TGlzdChfQlVGRkVSX1NJWkUpOwogICAgfSBlbHNlIGlmIChfYnVmZmVyUG9zaXRpb24gKyBuID4gX2J1ZmZlci5sZW5ndGgpIHsKICAgICAgX2NvbnN1bWVCdWZmZXIoKTsKICAgIH0KICB9CgogIC8qKgogICAqIENvbnN1bWVzIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIgYnkgdHVybmluZyBpdCBpbnRvIGEgc3RyaW5nCiAgICogYW5kIGFkZGluZyBpdCBhcyBhIHBhcnQuIEFmdGVyIGNhbGxpbmcgdGhpcyB0aGUgYnVmZmVyIHBvc2l0aW9uCiAgICogd2lsbCBiZSByZXNldCB0byB6ZXJvLgogICAqLwogIHZvaWQgX2NvbnN1bWVCdWZmZXIoKSB7CiAgICBpZiAoX2J1ZmZlclBvc2l0aW9uID09IDApIHJldHVybjsKICAgIGJvb2wgaXNMYXRpbjEgPSBfYnVmZmVyQ29kZVVuaXRNYWduaXR1ZGUgPD0gMHhGRjsKICAgIFN0cmluZyBzdHIgPSBfY3JlYXRlKF9idWZmZXIsIF9idWZmZXJQb3NpdGlvbiwgaXNMYXRpbjEpOwogICAgX2J1ZmZlclBvc2l0aW9uID0gX2J1ZmZlckNvZGVVbml0TWFnbml0dWRlID0gMDsKICAgIF9hZGRQYXJ0KHN0cik7CiAgfQoKICAvKioKICAgKiBBZGRzIGEgbmV3IHBhcnQgdG8gdGhpcyBzdHJpbmcgYnVmZmVyIGFuZCBrZWVwcyB0cmFjayBvZiBob3cKICAgKiBtYW55IGNvZGUgdW5pdHMgYXJlIGNvbnRhaW5lZCBpbiB0aGUgcGFydHMuCiAgICovCiAgdm9pZCBfYWRkUGFydChTdHJpbmcgc3RyKSB7CiAgICBpbnQgbGVuZ3RoID0gc3RyLmxlbmd0aDsKICAgIF9wYXJ0c0NvZGVVbml0cyArPSBsZW5ndGg7CiAgICBfcGFydHNDb2RlVW5pdHNTaW5jZUNvbXBhY3Rpb24gKz0gbGVuZ3RoOwoKICAgIGlmIChfcGFydHMgPT0gbnVsbCkgewogICAgICAvLyBFbXBpcmljYWxseSB0aGlzIGlzIGEgZ29vZCBjYXBhY2l0eSB0byBtaW5pbWl6ZSB0b3RhbCBieXRlcyBhbGxvY2F0ZWQuCiAgICAgIF9wYXJ0cyA9IG5ldyBfR3Jvd2FibGVMaXN0LndpdGhDYXBhY2l0eSgxMCkuLmFkZChzdHIpOwogICAgfSBlbHNlIHsKICAgICAgX3BhcnRzLmFkZChzdHIpOwogICAgICBpbnQgcGFydHNTaW5jZUNvbXBhY3Rpb24gPSBfcGFydHMubGVuZ3RoIC0gX3BhcnRzQ29tcGFjdGlvbkluZGV4OwogICAgICBpZiAocGFydHNTaW5jZUNvbXBhY3Rpb24gPT0gX1BBUlRTX1RPX0NPTVBBQ1QpIHsKICAgICAgICBfY29tcGFjdCgpOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBDb21wYWN0cyB0aGUgbGFzdCBOIHBhcnRzIGlmIHRoZWlyIGF2ZXJhZ2Ugc2l6ZSBhbGxvd3MgdXMgdG8gc2F2ZSBhCiAgICogbG90IG9mIG1lbW9yeSBieSB0dXJuaW5nIHRoZW0gYWxsIGludG8gYSBzaW5nbGUgcGFydC4KICAgKi8KICB2b2lkIF9jb21wYWN0KCkgewogICAgaWYgKF9wYXJ0c0NvZGVVbml0c1NpbmNlQ29tcGFjdGlvbiA8IF9QQVJUU19UT19DT01QQUNUX1NJWkVfTElNSVQpIHsKICAgICAgU3RyaW5nIGNvbXBhY3RlZCA9IF9TdHJpbmdCYXNlLl9jb25jYXRSYW5nZSgKICAgICAgICAgIF9wYXJ0cywKICAgICAgICAgIF9wYXJ0c0NvbXBhY3Rpb25JbmRleCwgLy8gU3RhcnQKICAgICAgICAgIF9wYXJ0c0NvbXBhY3Rpb25JbmRleCArIF9QQVJUU19UT19DT01QQUNUIC8vIEVuZAogICAgICAgICAgKTsKICAgICAgX3BhcnRzLmxlbmd0aCA9IF9wYXJ0cy5sZW5ndGggLSBfUEFSVFNfVE9fQ09NUEFDVDsKICAgICAgX3BhcnRzLmFkZChjb21wYWN0ZWQpOwogICAgfQogICAgX3BhcnRzQ29kZVVuaXRzU2luY2VDb21wYWN0aW9uID0gMDsKICAgIF9wYXJ0c0NvbXBhY3Rpb25JbmRleCA9IF9wYXJ0cy5sZW5ndGg7CiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBbU3RyaW5nXSBmcm9tIHRoZSBVRlQtMTYgY29kZSB1bml0cyBpbiBidWZmZXIuCiAgICovCiAgc3RhdGljIFN0cmluZyBfY3JlYXRlKFVpbnQxNkxpc3QgYnVmZmVyLCBpbnQgbGVuZ3RoLCBib29sIGlzTGF0aW4xKQogICAgICBuYXRpdmUgIlN0cmluZ0J1ZmZlcl9jcmVhdGVTdHJpbmdGcm9tVWludDE2QXJyYXkiOwp9CoDGAE5OPAEeAQcVJixJAQZFGwYXAQZHKgcbAQZHSEhHMQYhKgEGREUwBhYbAQZIFAVLSkEGJAE5CSgUBAEJNwEJGxkdFhMEAQklHho7CBotLA0hOwgaJTo8KgYEAQk9KiYdCyElDR8kGiEIBgQBCSQQEQQBIQkRE0YEATUJFhYiDT4EAUogGy43GAYEAQZERRwGGiY2PjQTBAEGQjEGHh0fLgEaUD0NF0g3FAgGBAEGSTsGFEkzEio7DTkdBigrBAEGPQZGOQIBKGRhcnQ6Y29yZS1wYXRjaC9zdHJpbmdfYnVmZmVyX3BhdGNoLmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvc3RyaW5nX3NpbmsuZGFydIN3Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKYWJzdHJhY3QgY2xhc3MgU3RyaW5nU2luayB7CiAgLyoqCiAgICogQ29udmVydHMgW29ial0gdG8gYSBTdHJpbmcgYnkgaW52b2tpbmcgW09iamVjdC50b1N0cmluZ10gYW5kIAogICAqIGFkZHMgdGhlIHJlc3VsdCB0byBgdGhpc2AuCiAgICovCiAgdm9pZCB3cml0ZShPYmplY3Qgb2JqKTsKCiAgLyoqCiAgICogSXRlcmF0ZXMgb3ZlciB0aGUgZ2l2ZW4gW29iamVjdHNdIGFuZCBbd3JpdGVdcyB0aGVtIGluIHNlcXVlbmNlLgogICAqLwogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pOwoKICAvKioKICAgKiBDb252ZXJ0cyBbb2JqXSB0byBhIFN0cmluZyBieSBpbnZva2luZyBbT2JqZWN0LnRvU3RyaW5nXSBhbmQgCiAgICogYWRkcyB0aGUgcmVzdWx0IHRvIGB0aGlzYCwgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgogICAqLwogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG9iaiA9ICIiXSk7CgogIC8qKgogICAqIFdyaXRlcyB0aGUgW2NoYXJDb2RlXSB0byBgdGhpc2AuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGB3cml0ZShuZXcgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpYC4KICAgKi8KICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKTsKfQohAE5OPAETARwGQyAGGgEGRgY8AQZDNwYjAQYmBU4GJAIBGmRhcnQ6Y29yZS9zdHJpbmdfc2luay5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL3N5bWJvbC5kYXJ0jlYvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovLy8gT3BhcXVlIG5hbWUgdXNlZCBieSBtaXJyb3JzLCBpbnZvY2F0aW9ucyBhbmQgW0Z1bmN0aW9uLmFwcGx5XS4KYWJzdHJhY3QgY2xhc3MgU3ltYm9sIHsKICAvKiogVGhlIHN5bWJvbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSB1bmFyeSBtaW51cyBvcGVyYXRvci4gKi8KICBzdGF0aWMgY29uc3QgU3ltYm9sIHVuYXJ5TWludXMgPSBTeW1ib2woInVuYXJ5LSIpOwoKICAvKioKICAgKiBUaGUgZW1wdHkgc3ltYm9sLgogICAqCiAgICogVGhlIGVtcHR5IHN5bWJvbCBpcyB0aGUgbmFtZSBvZiBsaWJyYXJpZXMgd2l0aCBubyBsaWJyYXJ5IGRlY2xhcmF0aW9uLAogICAqIGFuZCB0aGUgYmFzZS1uYW1lIG9mIHRoZSB1bm5hbWVkIGNvbnN0cnVjdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBTeW1ib2wgZW1wdHkgPSBTeW1ib2woIiIpOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFtTeW1ib2xdIHJlcHJlc2VudGluZyB0aGUgcHJvdmlkZWQgbmFtZS4KICAgKgogICAqIFRoZSBuYW1lIG11c3QgYmUgYSB2YWxpZCBwdWJsaWMgRGFydCBtZW1iZXIgbmFtZSwKICAgKiBwdWJsaWMgY29uc3RydWN0b3IgbmFtZSwgb3IgbGlicmFyeSBuYW1lLCBvcHRpb25hbGx5IHF1YWxpZmllZC4KICAgKgogICAqIEEgcXVhbGlmaWVkIG5hbWUgaXMgYSB2YWxpZCBuYW1lIHByZWNlZGVkIGJ5IGEgcHVibGljIGlkZW50aWZpZXIgbmFtZQogICAqIGFuZCBhICdgLmAnLCBlLmcuLCBgZm9vLmJhci5iYXo9YCBpcyBhIHF1YWxpZmllZCB2ZXJzaW9uIG9mIGBiYXo9YC4KICAgKiBUaGF0IG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgb2YgdGhlIFtuYW1lXSBTdHJpbmcgbXVzdCBiZSBlaXRoZXIKICAgKgogICAqICogYSB2YWxpZCBwdWJsaWMgRGFydCBpZGVudGlmaWVyCiAgICogICAodGhhdCBpcywgYW4gaWRlbnRpZmllciBub3Qgc3RhcnRpbmcgd2l0aCAiYF9gIiksCiAgICogKiBzdWNoIGFuIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgIj0iIChhIHNldHRlciBuYW1lKSwKICAgKiAqIHRoZSBuYW1lIG9mIGEgZGVjbGFyYWJsZSBvcGVyYXRvcgogICAqICAgKG9uZSBvZiAiYCtgIiwgImAtYCIsICJgKmAiLCAiYC9gIiwgImAlYCIsICJgfi9gIiwgImAmYCIsICJgfGAiLAogICAqICAgImBeYCIsICJgfmAiLCAiYDw8YCIsICJgPj5gIiwgImA8YCIsICJgPD1gIiwgImA+YCIsICJgPj1gIiwgImA9PWAiLAogICAqICAgImBbXWAiLCAiYFtdPWAiLCBvciAiYHVuYXJ5LWAiKSwKICAgKiAqIGFueSBvZiB0aGUgYWJvdmUgcHJlY2VkZWQgYnkgYW55IG51bWJlciBvZiBxdWFsaWZpZXJzLAogICAqICAgd2hlcmUgYSBxdWFsaWZpZXIgaXMgYSBub24tcHJpdmF0ZSBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5ICdgLmAnLAogICAqICogb3IgdGhlIGVtcHR5IHN0cmluZyAodGhlIGRlZmF1bHQgbmFtZSBvZiBhIGxpYnJhcnkgd2l0aCBubyBsaWJyYXJ5CiAgICogICBuYW1lIGRlY2xhcmF0aW9uKS4KICAgKgogICAqIFN5bWJvbCBpbnN0YW5jZXMgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIFtuYW1lXSBhcmUgZXF1YWwsCiAgICogYnV0IG5vdCBuZWNlc3NhcmlseSBpZGVudGljYWwsIGJ1dCBzeW1ib2xzIGNyZWF0ZWQgYXMgY29tcGlsZS10aW1lCiAgICogY29uc3RhbnRzIGFyZSBjYW5vbmljYWxpemVkLCBhcyBhbGwgb3RoZXIgY29uc3RhbnQgb2JqZWN0IGNyZWF0aW9ucy4KICAgKgogICAqIGBgYGRhcnQKICAgKiBhc3NlcnQobmV3IFN5bWJvbCgiZm9vIikgPT0gbmV3IFN5bWJvbCgiZm9vIikpOwogICAqIGFzc2VydChpZGVudGljYWwoY29uc3QgU3ltYm9sKCJmb28iKSwgY29uc3QgU3ltYm9sKCJmb28iKSkpOwogICAqIGBgYAogICAqCiAgICogSWYgW25hbWVdIGlzIGEgc2luZ2xlIGlkZW50aWZpZXIgdGhhdCBkb2VzIG5vdCBzdGFydCB3aXRoIGFuIHVuZGVyc2NvcmUsCiAgICogb3IgaXQgaXMgYSBxdWFsaWZpZWQgaWRlbnRpZmllciwKICAgKiBvciBpdCBpcyBhbiBvcGVyYXRvciBuYW1lIGRpZmZlcmVudCBmcm9tIGB1bmFyeS1gLAogICAqIHRoZW4gdGhlIHJlc3VsdCBvZiBgY29uc3QgU3ltYm9sKG5hbWUpYCBpcyB0aGUgc2FtZSBpbnN0YW5jZSB0aGF0CiAgICogdGhlIHN5bWJvbCBsaXRlcmFsIGNyZWF0ZWQgYnkgcHJlZml4aW5nIGAjYCB0byB0aGUgY29udGVudCBvZiBbbmFtZV0KICAgKiB3b3VsZCBldmFsdWF0ZSB0by4KICAgKgogICAqIGBgYGRhcnQKICAgKiBhc3NlcnQobmV3IFN5bWJvbCgiZm9vIikgPT0gI2Zvbyk7CiAgICogYXNzZXJ0KG5ldyBTeW1ib2woIltdPSIpID09ICNbXT1dKTsKICAgKiBhc3NlcnQobmV3IFN5bWJvbCgiZm9vLmJhciIpID09ICNmb28uYmFyKTsKICAgKiBhc3NlcnQoaWRlbnRpY2FsKGNvbnN0IFN5bWJvbCgiZm9vIiksICNmb28pKTsKICAgKiBhc3NlcnQoaWRlbnRpY2FsKGNvbnN0IFN5bWJvbCgiW109IiksICNbXT1dKSk7CiAgICogYXNzZXJ0KGlkZW50aWNhbChjb25zdCBTeW1ib2woImZvby5iYXIiKSwgI2Zvby5iYXIpKTsKICAgKiBgYGAKICAgKgogICAqIFRoaXMgY29uc3RydWN0b3IgY2Fubm90IGNyZWF0ZSBhIFtTeW1ib2xdIGluc3RhbmNlIHRoYXQgaXMgZXF1YWwgdG8KICAgKiBhIHByaXZhdGUgc3ltYm9sIGxpdGVyYWwgbGlrZSBgI19mb29gLgogICAqIGBgYGRhcnQKICAgKiBjb25zdCBTeW1ib2woIl9mb28iKSAvLyBJbnZhbGlkCiAgICogYGBgCiAgICoKICAgKiBUaGUgY3JlYXRlZCBpbnN0YW5jZSBvdmVycmlkZXMgW09iamVjdC49PV0uCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICAgKgogICAqIENyZWF0aW5nIG5vbi1jb25zdCBTeW1ib2wgaW5zdGFuY2VzIG1heSByZXN1bHQgaW4gbGFyZ2VyIG91dHB1dC4gIElmCiAgICogcG9zc2libGUsIHVzZSBgTWlycm9yc1VzZWRgIGZyb20gImRhcnQ6bWlycm9ycyIgdG8gc3BlY2lmeSB3aGljaCBuYW1lcwogICAqIG1pZ2h0IGJlIHBhc3NlZCB0byB0aGlzIGNvbnN0cnVjdG9yLgogICAqLwogIGNvbnN0IGZhY3RvcnkgU3ltYm9sKFN0cmluZyBuYW1lKSA9IGludGVybmFsLlN5bWJvbDsKCiAgLyoqCiAgICogUmV0dXJucyBhIGhhc2ggY29kZSBjb21wYXRpYmxlIHdpdGggW29wZXJhdG9yPT1dLgogICAqCiAgICogRXF1YWwgc3ltYm9scyBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZS4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKioKICAgKiBTeW1ib2xzIGFyZSBlcXVhbCB0byBvdGhlciBzeW1ib2xzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBtZW1iZXIgbmFtZS4KICAgKgogICAqIFF1YWxpZmllZCBtZW1iZXIgbmFtZXMsIGxpa2UgYCNmb28uYmFyYCBhcmUgZXF1YWwgb25seSBpZiB0aGV5IGhhdmUgdGhlCiAgICogc2FtZSBpZGVudGlmaWVycyBiZWZvcmUgdGhlIHNhbWUgZmluYWwgbWVtYmVyIG5hbWUuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7Cn0KYwBOTjwBEwFDGEs1AQYXBUwzBioBBj8FN0UFS0lFBSY5OylISyg+SEoaBT5ISgUNNUIJBU4mOEdKGAUNKCkwMzQ7CQVJLA0lCQUxBSoFSkwqBjcBBjcFLAYUAQZRBU05BhsCARVkYXJ0OmNvcmUvc3ltYm9sLmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvdHlwZS5kYXJ0gTEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogUnVudGltZSByZXByZXNlbnRhdGlvbiBvZiBhIHR5cGUuCiAqLwphYnN0cmFjdCBjbGFzcyBUeXBlIHt9CgwATk48ARMBBCUEFwETZGFydDpjb3JlL3R5cGUuZGFydClvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS91cmkuZGFydMAClIIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovLyBGcmVxdWVudGx5IHVzZWQgY2hhcmFjdGVyIGNvZGVzLgpjb25zdCBpbnQgX1NQQUNFID0gMHgyMDsKY29uc3QgaW50IF9QRVJDRU5UID0gMHgyNTsKY29uc3QgaW50IF9BTVBFUlNBTkQgPSAweDI2Owpjb25zdCBpbnQgX1BMVVMgPSAweDJCOwpjb25zdCBpbnQgX0RPVCA9IDB4MkU7CmNvbnN0IGludCBfU0xBU0ggPSAweDJGOwpjb25zdCBpbnQgX0NPTE9OID0gMHgzQTsKY29uc3QgaW50IF9FUVVBTFMgPSAweDNkOwpjb25zdCBpbnQgX1VQUEVSX0NBU0VfQSA9IDB4NDE7CmNvbnN0IGludCBfVVBQRVJfQ0FTRV9aID0gMHg1QTsKY29uc3QgaW50IF9MRUZUX0JSQUNLRVQgPSAweDVCOwpjb25zdCBpbnQgX0JBQ0tTTEFTSCA9IDB4NUM7CmNvbnN0IGludCBfUklHSFRfQlJBQ0tFVCA9IDB4NUQ7CmNvbnN0IGludCBfTE9XRVJfQ0FTRV9BID0gMHg2MTsKY29uc3QgaW50IF9MT1dFUl9DQVNFX0YgPSAweDY2Owpjb25zdCBpbnQgX0xPV0VSX0NBU0VfWiA9IDB4N0E7Cgpjb25zdCBTdHJpbmcgX2hleERpZ2l0cyA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKCi8qKgogKiBBIHBhcnNlZCBVUkksIHN1Y2ggYXMgYSBVUkwuCiAqCiAqICoqU2VlIGFsc286KioKICoKICogKiBbVVJJc11bdXJpc10gaW4gdGhlIFtsaWJyYXJ5IHRvdXJdW2xpYnRvdXJdCiAqICogW1JGQy0zOTg2XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2KQogKgogKiBbdXJpc106IGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI3VyaXMKICogW2xpYnRvdXJdOiBodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NvbnRlbnRzL2NoMDMuaHRtbAogKi8KYWJzdHJhY3QgY2xhc3MgVXJpIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBuYXR1cmFsIGJhc2UgVVJJIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4KICAgKgogICAqIFdoZW4gcnVubmluZyBpbiBhIGJyb3dzZXIgdGhpcyBpcyB0aGUgY3VycmVudCBVUkwgb2YgdGhlIGN1cnJlbnQgcGFnZQogICAqIChmcm9tIGB3aW5kb3cubG9jYXRpb24uaHJlZmApLgogICAqCiAgICogV2hlbiBub3QgcnVubmluZyBpbiBhIGJyb3dzZXIgdGhpcyBpcyB0aGUgZmlsZSBVUkkgcmVmZXJlbmNpbmcKICAgKiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgVXJpIGdldCBiYXNlOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFVSSSBmcm9tIGl0cyBjb21wb25lbnRzLgogICAqCiAgICogRWFjaCBjb21wb25lbnQgaXMgc2V0IHRocm91Z2ggYSBuYW1lZCBhcmd1bWVudC4gQW55IG51bWJlciBvZgogICAqIGNvbXBvbmVudHMgY2FuIGJlIHByb3ZpZGVkLiBUaGUgW3BhdGhdIGFuZCBbcXVlcnldIGNvbXBvbmVudHMgY2FuIGJlIHNldAogICAqIHVzaW5nIGVpdGhlciBvZiB0d28gZGlmZmVyZW50IG5hbWVkIGFyZ3VtZW50cy4KICAgKgogICAqIFRoZSBzY2hlbWUgY29tcG9uZW50IGlzIHNldCB0aHJvdWdoIFtzY2hlbWVdLiBUaGUgc2NoZW1lIGlzCiAgICogbm9ybWFsaXplZCB0byBhbGwgbG93ZXJjYXNlIGxldHRlcnMuIElmIHRoZSBzY2hlbWUgaXMgb21pdHRlZCBvciBlbXB0eSwKICAgKiB0aGUgVVJJIHdpbGwgbm90IGhhdmUgYSBzY2hlbWUgcGFydC4KICAgKgogICAqIFRoZSB1c2VyIGluZm8gcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBpcyBzZXQgdGhyb3VnaAogICAqIFt1c2VySW5mb10uIEl0IGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgb21pdHRlZAogICAqIGZyb20gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVJJLgogICAqCiAgICogVGhlIGhvc3QgcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBpcyBzZXQgdGhyb3VnaAogICAqIFtob3N0XS4gVGhlIGhvc3QgY2FuIGVpdGhlciBiZSBhIGhvc3RuYW1lLCBhbiBJUHY0IGFkZHJlc3Mgb3IgYW4KICAgKiBJUHY2IGFkZHJlc3MsIGNvbnRhaW5lZCBpbiAnWycgYW5kICddJy4gSWYgdGhlIGhvc3QgY29udGFpbnMgYQogICAqICc6JyBjaGFyYWN0ZXIsIHRoZSAnWycgYW5kICddJyBhcmUgYWRkZWQgaWYgbm90IGFscmVhZHkgcHJvdmlkZWQuCiAgICogVGhlIGhvc3QgaXMgbm9ybWFsaXplZCB0byBhbGwgbG93ZXJjYXNlIGxldHRlcnMuCiAgICoKICAgKiBUaGUgcG9ydCBwYXJ0IG9mIHRoZSBhdXRob3JpdHkgY29tcG9uZW50IGlzIHNldCB0aHJvdWdoCiAgICogW3BvcnRdLgogICAqIElmIFtwb3J0XSBpcyBvbWl0dGVkIG9yIGBudWxsYCwgaXQgaW1wbGllcyB0aGUgZGVmYXVsdCBwb3J0IGZvcgogICAqIHRoZSBVUkkncyBzY2hlbWUsIGFuZCBpcyBlcXVpdmFsZW50IHRvIHBhc3NpbmcgdGhhdCBwb3J0IGV4cGxpY2l0bHkuCiAgICogVGhlIHJlY29nbml6ZWQgc2NoZW1lcywgYW5kIHRoZWlyIGRlZmF1bHQgcG9ydHMsIGFyZSAiaHR0cCIgKDgwKSBhbmQKICAgKiAiaHR0cHMiICg0NDMpLiBBbGwgb3RoZXIgc2NoZW1lcyBhcmUgY29uc2lkZXJlZCBhcyBoYXZpbmcgemVybyBhcyB0aGUKICAgKiBkZWZhdWx0IHBvcnQuCiAgICoKICAgKiBJZiBhbnkgb2YgYHVzZXJJbmZvYCwgYGhvc3RgIG9yIGBwb3J0YCBhcmUgcHJvdmlkZWQsCiAgICogdGhlIFVSSSBoYXMgYW4gYXV0aG9yaXR5IGFjY29yZGluZyB0byBbaGFzQXV0aG9yaXR5XS4KICAgKgogICAqIFRoZSBwYXRoIGNvbXBvbmVudCBpcyBzZXQgdGhyb3VnaCBlaXRoZXIgW3BhdGhdIG9yCiAgICogW3BhdGhTZWdtZW50c10uCiAgICogV2hlbiBbcGF0aF0gaXMgdXNlZCwgaXQgc2hvdWxkIGJlIGEgdmFsaWQgVVJJIHBhdGgsCiAgICogYnV0IGludmFsaWQgY2hhcmFjdGVycywgZXhjZXB0IHRoZSBnZW5lcmFsIGRlbGltaXRlcnMgJzovQFtdPyMnLAogICAqIHdpbGwgYmUgZXNjYXBlZCBpZiBuZWNlc3NhcnkuCiAgICogV2hlbiBbcGF0aFNlZ21lbnRzXSBpcyB1c2VkLCBlYWNoIG9mIHRoZSBwcm92aWRlZCBzZWdtZW50cwogICAqIGlzIGZpcnN0IHBlcmNlbnQtZW5jb2RlZCBhbmQgdGhlbiBqb2luZWQgdXNpbmcgdGhlIGZvcndhcmQgc2xhc2gKICAgKiBzZXBhcmF0b3IuCiAgICoKICAgKiBUaGUgcGVyY2VudC1lbmNvZGluZyBvZiB0aGUgcGF0aCBzZWdtZW50cyBlbmNvZGVzIGFsbAogICAqIGNoYXJhY3RlcnMgZXhjZXB0IGZvciB0aGUgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzIGFuZCB0aGUgZm9sbG93aW5nCiAgICogbGlzdCBvZiBjaGFyYWN0ZXJzOiBgISQmJygpKissOz06QGAuIElmIHRoZSBvdGhlciBjb21wb25lbnRzCiAgICogbmVjZXNzaXRhdGUgYW4gYWJzb2x1dGUgcGF0aCwgYSBsZWFkaW5nIHNsYXNoIGAvYCBpcyBwcmVwZW5kZWQgaWYKICAgKiBub3QgYWxyZWFkeSB0aGVyZS4KICAgKgogICAqIFRoZSBxdWVyeSBjb21wb25lbnQgaXMgc2V0IHRocm91Z2ggZWl0aGVyIFtxdWVyeV0gb3IgW3F1ZXJ5UGFyYW1ldGVyc10uCiAgICogV2hlbiBbcXVlcnldIGlzIHVzZWQsIHRoZSBwcm92aWRlZCBzdHJpbmcgc2hvdWxkIGJlIGEgdmFsaWQgVVJJIHF1ZXJ5LAogICAqIGJ1dCBpbnZhbGlkIGNoYXJhY3RlcnMsIG90aGVyIHRoYW4gZ2VuZXJhbCBkZWxpbWl0ZXJzLAogICAqIHdpbGwgYmUgZXNjYXBlZCBpZiBuZWNlc3NhcnkuCiAgICogV2hlbiBbcXVlcnlQYXJhbWV0ZXJzXSBpcyB1c2VkIHRoZSBxdWVyeSBpcyBidWlsdCBmcm9tIHRoZQogICAqIHByb3ZpZGVkIG1hcC4gRWFjaCBrZXkgYW5kIHZhbHVlIGluIHRoZSBtYXAgaXMgcGVyY2VudC1lbmNvZGVkCiAgICogYW5kIGpvaW5lZCB1c2luZyBlcXVhbCBhbmQgYW1wZXJzYW5kIGNoYXJhY3RlcnMuCiAgICogQSB2YWx1ZSBpbiB0aGUgbWFwIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nLCBvciBhbiBbSXRlcmFibGVdIG9mIHN0cmluZ3MsCiAgICogd2hlcmUgdGhlIGxhdHRlciBjb3JyZXNwb25kcyB0byBtdWx0aXBsZSB2YWx1ZXMgZm9yIHRoZSBzYW1lIGtleS4KICAgKgogICAqIFRoZSBwZXJjZW50LWVuY29kaW5nIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMgZW5jb2RlcyBhbGwgY2hhcmFjdGVycwogICAqIGV4Y2VwdCBmb3IgdGhlIHVucmVzZXJ2ZWQgY2hhcmFjdGVycywgYW5kIHJlcGxhY2VzIHNwYWNlcyB3aXRoIGArYC4KICAgKiBJZiBgcXVlcnlgIGlzIHRoZSBlbXB0eSBzdHJpbmcsIGl0IGlzIGVxdWl2YWxlbnQgdG8gb21pdHRpbmcgaXQuCiAgICogVG8gaGF2ZSBhbiBhY3R1YWwgZW1wdHkgcXVlcnkgcGFydCwKICAgKiB1c2UgYW4gZW1wdHkgbWFwIGZvciBgcXVlcnlQYXJhbWV0ZXJzYC4KICAgKgogICAqIElmIGJvdGggYHF1ZXJ5YCBhbmQgYHF1ZXJ5UGFyYW1ldGVyc2AgYXJlIG9taXR0ZWQgb3IgYG51bGxgLAogICAqIHRoZSBVUkkgaGFzIG5vIHF1ZXJ5IHBhcnQuCiAgICoKICAgKiBUaGUgZnJhZ21lbnQgY29tcG9uZW50IGlzIHNldCB0aHJvdWdoIFtmcmFnbWVudF0uCiAgICogSXQgc2hvdWxkIGJlIGEgdmFsaWQgVVJJIGZyYWdtZW50LCBidXQgaW52YWxpZCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4KICAgKiBnZW5lcmFsIGRlbGltaXRlcnMsIGFyZSBlc2NhcGVkIGlmIG5lY2Vzc2FyeS4KICAgKiBJZiBgZnJhZ21lbnRgIGlzIG9taXR0ZWQgb3IgYG51bGxgLCB0aGUgVVJJIGhhcyBubyBmcmFnbWVudCBwYXJ0LgogICAqLwogIGZhY3RvcnkgVXJpKAogICAgICB7U3RyaW5nIHNjaGVtZSwKICAgICAgU3RyaW5nIHVzZXJJbmZvLAogICAgICBTdHJpbmcgaG9zdCwKICAgICAgaW50IHBvcnQsCiAgICAgIFN0cmluZyBwYXRoLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IHBhdGhTZWdtZW50cywKICAgICAgU3RyaW5nIHF1ZXJ5LAogICAgICBNYXA8U3RyaW5nLCBkeW5hbWljIC8qU3RyaW5nfEl0ZXJhYmxlPFN0cmluZz4qLyA+IHF1ZXJ5UGFyYW1ldGVycywKICAgICAgU3RyaW5nIGZyYWdtZW50fSkgPSBfVXJpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGBodHRwYCBVUkkgZnJvbSBhdXRob3JpdHksIHBhdGggYW5kIHF1ZXJ5LgogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiBgYGAKICAgKiAvLyBodHRwOi8vZXhhbXBsZS5vcmcvcGF0aD9xPWRhcnQuCiAgICogbmV3IFVyaS5odHRwKCJleGFtcGxlLm9yZyIsICIvcGF0aCIsIHsgInEiIDogImRhcnQiIH0pOwogICAqCiAgICogLy8gaHR0cDovL3VzZXI6cGFzc0Bsb2NhbGhvc3Q6ODA4MAogICAqIG5ldyBVcmkuaHR0cCgidXNlcjpwYXNzQGxvY2FsaG9zdDo4MDgwIiwgIiIpOwogICAqCiAgICogLy8gaHR0cDovL2V4YW1wbGUub3JnL2ElMjBiCiAgICogbmV3IFVyaS5odHRwKCJleGFtcGxlLm9yZyIsICJhIGIiKTsKICAgKgogICAqIC8vIGh0dHA6Ly9leGFtcGxlLm9yZy9hJTI1MkYKICAgKiBuZXcgVXJpLmh0dHAoImV4YW1wbGUub3JnIiwgIi9hJTJGIik7CiAgICogYGBgCiAgICoKICAgKiBUaGUgYHNjaGVtZWAgaXMgYWx3YXlzIHNldCB0byBgaHR0cGAuCiAgICoKICAgKiBUaGUgYHVzZXJJbmZvYCwgYGhvc3RgIGFuZCBgcG9ydGAgY29tcG9uZW50cyBhcmUgc2V0IGZyb20gdGhlCiAgICogW2F1dGhvcml0eV0gYXJndW1lbnQuIElmIGBhdXRob3JpdHlgIGlzIGBudWxsYCBvciBlbXB0eSwKICAgKiB0aGUgY3JlYXRlZCBgVXJpYCBoYXMgbm8gYXV0aG9yaXR5LCBhbmQgaXNuJ3QgZGlyZWN0bHkgdXNhYmxlCiAgICogYXMgYW4gSFRUUCBVUkwsIHdoaWNoIG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBob3N0LgogICAqCiAgICogVGhlIGBwYXRoYCBjb21wb25lbnQgaXMgc2V0IGZyb20gdGhlIFt1bmVuY29kZWRQYXRoXQogICAqIGFyZ3VtZW50LiBUaGUgcGF0aCBwYXNzZWQgbXVzdCBub3QgYmUgZW5jb2RlZCBhcyB0aGlzIGNvbnN0cnVjdG9yCiAgICogZW5jb2RlcyB0aGUgcGF0aC4KICAgKgogICAqIFRoZSBgcXVlcnlgIGNvbXBvbmVudCBpcyBzZXQgZnJvbSB0aGUgb3B0aW9uYWwgW3F1ZXJ5UGFyYW1ldGVyc10KICAgKiBhcmd1bWVudC4KICAgKi8KICBmYWN0b3J5IFVyaS5odHRwKFN0cmluZyBhdXRob3JpdHksIFN0cmluZyB1bmVuY29kZWRQYXRoLAogICAgICBbTWFwPFN0cmluZywgU3RyaW5nPiBxdWVyeVBhcmFtZXRlcnNdKSA9IF9VcmkuaHR0cDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBgaHR0cHNgIFVSSSBmcm9tIGF1dGhvcml0eSwgcGF0aCBhbmQgcXVlcnkuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIHRoZSBzYW1lIGFzIFtVcmkuaHR0cF0gZXhjZXB0IGZvciB0aGUgc2NoZW1lCiAgICogd2hpY2ggaXMgc2V0IHRvIGBodHRwc2AuCiAgICovCiAgZmFjdG9yeSBVcmkuaHR0cHMoU3RyaW5nIGF1dGhvcml0eSwgU3RyaW5nIHVuZW5jb2RlZFBhdGgsCiAgICAgIFtNYXA8U3RyaW5nLCBTdHJpbmc+IHF1ZXJ5UGFyYW1ldGVyc10pID0gX1VyaS5odHRwczsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBmaWxlIFVSSSBmcm9tIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIGZpbGUgcGF0aC4KICAgKgogICAqIFRoZSBmaWxlIHBhdGggaXMgcGFzc2VkIGluIFtwYXRoXS4KICAgKgogICAqIFRoaXMgcGF0aCBpcyBpbnRlcnByZXRlZCB1c2luZyBlaXRoZXIgV2luZG93cyBvciBub24tV2luZG93cwogICAqIHNlbWFudGljcy4KICAgKgogICAqIFdpdGggbm9uLVdpbmRvd3Mgc2VtYW50aWNzIHRoZSBzbGFzaCAoYC9gKSBpcyB1c2VkIHRvIHNlcGFyYXRlCiAgICogcGF0aCBzZWdtZW50cyBpbiB0aGUgaW5wdXQgW3BhdGhdLgogICAqCiAgICogV2l0aCBXaW5kb3dzIHNlbWFudGljcywgYmFja3NsYXNoIChgXGApIGFuZCBmb3J3YXJkLXNsYXNoIChgL2ApCiAgICogYXJlIHVzZWQgdG8gc2VwYXJhdGUgcGF0aCBzZWdtZW50cyBpbiB0aGUgaW5wdXQgW3BhdGhdLAogICAqIGV4Y2VwdCBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBgXFw/XGAgaW4gd2hpY2ggY2FzZQogICAqIG9ubHkgYmFja3NsYXNoIChgXGApIHNlcGFyYXRlcyBwYXRoIHNlZ21lbnRzIGluIFtwYXRoXS4KICAgKgogICAqIElmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IsIGFuIGFic29sdXRlIFVSSSAod2l0aCB0aGUKICAgKiBgZmlsZWAgc2NoZW1lIGFuZCBhbiBlbXB0eSBhdXRob3JpdHkpIGlzIGNyZWF0ZWQuCiAgICogT3RoZXJ3aXNlIGEgcmVsYXRpdmUgVVJJIHJlZmVyZW5jZSB3aXRoIG5vIHNjaGVtZSBvciBhdXRob3JpdHkgaXMgY3JlYXRlZC4KICAgKiBPbmUgZXhjZXB0aW9uIGZyb20gdGhpcyBydWxlIGlzIHRoYXQgd2hlbiBXaW5kb3dzIHNlbWFudGljcyBpcyB1c2VkCiAgICogYW5kIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgZHJpdmUgbGV0dGVyIGZvbGxvd2VkIGJ5IGEgY29sb24gKCI6IikgYW5kIGEKICAgKiBwYXRoIHNlcGFyYXRvciwgdGhlbiBhbiBhYnNvbHV0ZSBVUkkgaXMgY3JlYXRlZC4KICAgKgogICAqIFRoZSBkZWZhdWx0IGZvciB3aGV0aGVyIHRvIHVzZSBXaW5kb3dzIG9yIG5vbi1XaW5kb3dzIHNlbWFudGljcwogICAqIGRldGVybWluZWQgZnJvbSB0aGUgcGxhdGZvcm0gRGFydCBpcyBydW5uaW5nIG9uLiBXaGVuIHJ1bm5pbmcgaW4KICAgKiB0aGUgc3RhbmRhbG9uZSBWTSwgdGhpcyBpcyBkZXRlY3RlZCBieSB0aGUgVk0gYmFzZWQgb24gdGhlCiAgICogb3BlcmF0aW5nIHN5c3RlbS4gV2hlbiBydW5uaW5nIGluIGEgYnJvd3NlciBub24tV2luZG93cyBzZW1hbnRpY3MKICAgKiBpcyBhbHdheXMgdXNlZC4KICAgKgogICAqIFRvIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIHdoaWNoIHNlbWFudGljcyB0byB1c2UgcGFzcwogICAqIGEgdmFsdWUgZm9yIFt3aW5kb3dzXS4gUGFzc2luZyBgdHJ1ZWAgd2lsbCB1c2UgV2luZG93cwogICAqIHNlbWFudGljcyBhbmQgcGFzc2luZyBgZmFsc2VgIHdpbGwgdXNlIG5vbi1XaW5kb3dzIHNlbWFudGljcy4KICAgKgogICAqIEV4YW1wbGVzIHVzaW5nIG5vbi1XaW5kb3dzIHNlbWFudGljczoKICAgKgogICAqIGBgYAogICAqIC8vIHh4eC95eXkKICAgKiBuZXcgVXJpLmZpbGUoInh4eC95eXkiLCB3aW5kb3dzOiBmYWxzZSk7CiAgICoKICAgKiAvLyB4eHgveXl5LwogICAqIG5ldyBVcmkuZmlsZSgieHh4L3l5eS8iLCB3aW5kb3dzOiBmYWxzZSk7CiAgICoKICAgKiAvLyBmaWxlOi8vL3h4eC95eXkKICAgKiBuZXcgVXJpLmZpbGUoIi94eHgveXl5Iiwgd2luZG93czogZmFsc2UpOwogICAqCiAgICogLy8gZmlsZTovLy94eHgveXl5LwogICAqIG5ldyBVcmkuZmlsZSgiL3h4eC95eXkvIiwgd2luZG93czogZmFsc2UpOwogICAqCiAgICogLy8gQyUzQQogICAqIG5ldyBVcmkuZmlsZSgiQzoiLCB3aW5kb3dzOiBmYWxzZSk7CiAgICogYGBgCiAgICoKICAgKiBFeGFtcGxlcyB1c2luZyBXaW5kb3dzIHNlbWFudGljczoKICAgKgogICAqIGBgYAogICAqIC8vIHh4eC95eXkKICAgKiBuZXcgVXJpLmZpbGUociJ4eHhceXl5Iiwgd2luZG93czogdHJ1ZSk7CiAgICoKICAgKiAvLyB4eHgveXl5LwogICAqIG5ldyBVcmkuZmlsZShyInh4eFx5eXlcIiwgd2luZG93czogdHJ1ZSk7CiAgICoKICAgKiBmaWxlOi8vL3h4eC95eXkKICAgKiBuZXcgVXJpLmZpbGUociJceHh4XHl5eSIsIHdpbmRvd3M6IHRydWUpOwogICAqCiAgICogZmlsZTovLy94eHgveXl5LwogICAqIG5ldyBVcmkuZmlsZShyIlx4eHhceXl5LyIsIHdpbmRvd3M6IHRydWUpOwogICAqCiAgICogLy8gZmlsZTovLy9DOi94eHgveXl5CiAgICogbmV3IFVyaS5maWxlKHIiQzpceHh4XHl5eSIsIHdpbmRvd3M6IHRydWUpOwogICAqCiAgICogLy8gVGhpcyB0aHJvd3MgYW4gZXJyb3IuIEEgcGF0aCB3aXRoIGEgZHJpdmUgbGV0dGVyLCBidXQgbm8gZm9sbG93aW5nCiAgICogLy8gcGF0aCwgaXMgbm90IGFsbG93ZWQuCiAgICogbmV3IFVyaS5maWxlKHIiQzoiLCB3aW5kb3dzOiB0cnVlKTsKICAgKgogICAqIC8vIFRoaXMgdGhyb3dzIGFuIGVycm9yLiBBIHBhdGggd2l0aCBhIGRyaXZlIGxldHRlciBpcyBub3QgYWJzb2x1dGUuCiAgICogbmV3IFVyaS5maWxlKHIiQzp4eHhceXl5Iiwgd2luZG93czogdHJ1ZSk7CiAgICoKICAgKiAvLyBmaWxlOi8vc2VydmVyL3NoYXJlL2ZpbGUKICAgKiBuZXcgVXJpLmZpbGUociJcXHNlcnZlclxzaGFyZVxmaWxlIiwgd2luZG93czogdHJ1ZSk7CiAgICogYGBgCiAgICoKICAgKiBJZiB0aGUgcGF0aCBwYXNzZWQgaXMgbm90IGEgdmFsaWQgZmlsZSBwYXRoLCBhbiBlcnJvciBpcyB0aHJvd24uCiAgICovCiAgZmFjdG9yeSBVcmkuZmlsZShTdHJpbmcgcGF0aCwge2Jvb2wgd2luZG93c30pID0gX1VyaS5maWxlOwoKICAvKioKICAgKiBMaWtlIFtVcmkuZmlsZV0gZXhjZXB0IHRoYXQgYSBub24tZW1wdHkgVVJJIHBhdGggZW5kcyBpbiBhIHNsYXNoLgogICAqCiAgICogSWYgW3BhdGhdIGlzIG5vdCBlbXB0eSwgYW5kIGl0IGRvZXNuJ3QgZW5kIGluIGEgZGlyZWN0b3J5IHNlcGFyYXRvciwKICAgKiB0aGVuIGEgc2xhc2ggaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIFVSSSdzIHBhdGguCiAgICogSW4gYWxsIG90aGVyIGNhc2VzLCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IGBVcmkuZmlsZWAuCiAgICovCiAgZmFjdG9yeSBVcmkuZGlyZWN0b3J5KFN0cmluZyBwYXRoLCB7Ym9vbCB3aW5kb3dzfSkgPSBfVXJpLmRpcmVjdG9yeTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGBkYXRhOmAgVVJJIGNvbnRhaW5pbmcgdGhlIFtjb250ZW50XSBzdHJpbmcuCiAgICoKICAgKiBDb252ZXJ0cyB0aGUgY29udGVudCB0byBhIGJ5dGVzIHVzaW5nIFtlbmNvZGluZ10gb3IgdGhlIGNoYXJzZXQgc3BlY2lmaWVkCiAgICogaW4gW3BhcmFtZXRlcnNdIChkZWZhdWx0aW5nIHRvIFVTLUFTQ0lJIGlmIG5vdCBzcGVjaWZpZWQgb3IgdW5yZWNvZ25pemVkKSwKICAgKiB0aGVuIGVuY29kZXMgdGhlIGJ5dGVzIGludG8gdGhlIHJlc3VsdGluZyBkYXRhIFVSSS4KICAgKgogICAqIERlZmF1bHRzIHRvIGVuY29kaW5nIHVzaW5nIHBlcmNlbnQtZW5jb2RpbmcgKGFueSBub24tQVNDSUkgb3Igbm9uLVVSSS12YWxpZAogICAqIGJ5dGVzIGlzIHJlcGxhY2VkIGJ5IGEgcGVyY2VudCBlbmNvZGluZykuIElmIFtiYXNlNjRdIGlzIHRydWUsIHRoZSBieXRlcwogICAqIGFyZSBpbnN0ZWFkIGVuY29kZWQgdXNpbmcgW2Jhc2U2NF0uCiAgICoKICAgKiBJZiBbZW5jb2RpbmddIGlzIG5vdCBwcm92aWRlZCBhbmQgW3BhcmFtZXRlcnNdIGhhcyBhIGBjaGFyc2V0YCBlbnRyeSwKICAgKiB0aGF0IG5hbWUgaXMgbG9va2VkIHVwIHVzaW5nIFtFbmNvZGluZy5nZXRCeU5hbWVdLAogICAqIGFuZCBpZiB0aGUgbG9va3VwIHJldHVybnMgYW4gZW5jb2RpbmcsIHRoYXQgZW5jb2RpbmcgaXMgdXNlZCB0byBjb252ZXJ0CiAgICogW2NvbnRlbnRdIHRvIGJ5dGVzLgogICAqIElmIHByb3ZpZGluZyBib3RoIGFuIFtlbmNvZGluZ10gYW5kIGEgY2hhcnNldCBpbiBbcGFyYW1ldGVyc10sIHRoZXkgc2hvdWxkCiAgICogYWdyZWUsIG90aGVyd2lzZSBkZWNvZGluZyB3b24ndCBiZSBhYmxlIHRvIHVzZSB0aGUgY2hhcnNldCBwYXJhbWV0ZXIKICAgKiB0byBkZXRlcm1pbmUgdGhlIGVuY29kaW5nLgogICAqCiAgICogSWYgW21pbWVUeXBlXSBhbmQvb3IgW3BhcmFtZXRlcnNdIGFyZSBzdXBwbGllZCwgdGhleSBhcmUgYWRkZWQgdG8gdGhlCiAgICogY3JlYXRlZCBVUkkuIElmIGFueSBvZiB0aGVzZSBjb250YWluIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQKICAgKiBpbiB0aGUgZGF0YSBVUkksIHRoZSBjaGFyYWN0ZXIgaXMgcGVyY2VudC1lc2NhcGVkLiBJZiB0aGUgY2hhcmFjdGVyIGlzCiAgICogbm9uLUFTQ0lJLCBpdCBpcyBmaXJzdCBVVEYtOCBlbmNvZGVkIGFuZCB0aGVuIHRoZSBieXRlcyBhcmUgcGVyY2VudAogICAqIGVuY29kZWQuIEFuIG9taXR0ZWQgW21pbWVUeXBlXSBpbiBhIGRhdGEgVVJJIG1lYW5zIGB0ZXh0L3BsYWluYCwganVzdAogICAqIGFzIGFuIG9taXR0ZWQgYGNoYXJzZXRgIHBhcmFtZXRlciBkZWZhdWx0cyB0byBtZWFuaW5nIGBVUy1BU0NJSWAuCiAgICoKICAgKiBUbyByZWFkIHRoZSBjb250ZW50IGJhY2ssIHVzZSBbVXJpRGF0YS5jb250ZW50QXNTdHJpbmddLgogICAqLwogIGZhY3RvcnkgVXJpLmRhdGFGcm9tU3RyaW5nKFN0cmluZyBjb250ZW50LAogICAgICB7U3RyaW5nIG1pbWVUeXBlLAogICAgICBFbmNvZGluZyBlbmNvZGluZywKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzLAogICAgICBib29sIGJhc2U2NCA9IGZhbHNlfSkgewogICAgVXJpRGF0YSBkYXRhID0gVXJpRGF0YS5mcm9tU3RyaW5nKGNvbnRlbnQsCiAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLAogICAgICAgIGVuY29kaW5nOiBlbmNvZGluZywKICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLAogICAgICAgIGJhc2U2NDogYmFzZTY0KTsKICAgIHJldHVybiBkYXRhLnVyaTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBgZGF0YTpgIFVSSSBjb250YWluaW5nIGFuIGVuY29kaW5nIG9mIFtieXRlc10uCiAgICoKICAgKiBEZWZhdWx0cyB0byBCYXNlNjQgZW5jb2RpbmcgdGhlIGJ5dGVzLCBidXQgaWYgW3BlcmNlbnRFbmNvZGVkXQogICAqIGlzIGB0cnVlYCwgdGhlIGJ5dGVzIHdpbGwgaW5zdGVhZCBiZSBwZXJjZW50IGVuY29kZWQgKGFueSBub24tQVNDSUkKICAgKiBvciBub24tdmFsaWQtQVNDSUktY2hhcmFjdGVyIGJ5dGUgaXMgcmVwbGFjZWQgYnkgYSBwZXJjZW50IGVuY29kaW5nKS4KICAgKgogICAqIFRvIHJlYWQgdGhlIGJ5dGVzIGJhY2ssIHVzZSBbVXJpRGF0YS5jb250ZW50QXNCeXRlc10uCiAgICoKICAgKiBJdCBkZWZhdWx0cyB0byBoYXZpbmcgdGhlIG1pbWUtdHlwZSBgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYC4KICAgKiBUaGUgW21pbWVUeXBlXSBhbmQgW3BhcmFtZXRlcnNdIGFyZSBhZGRlZCB0byB0aGUgY3JlYXRlZCBVUkkuCiAgICogSWYgYW55IG9mIHRoZXNlIGNvbnRhaW4gY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgYWxsb3dlZAogICAqIGluIHRoZSBkYXRhIFVSSSwgdGhlIGNoYXJhY3RlciBpcyBwZXJjZW50LWVzY2FwZWQuIElmIHRoZSBjaGFyYWN0ZXIgaXMKICAgKiBub24tQVNDSUksIGl0IGlzIGZpcnN0IFVURi04IGVuY29kZWQgYW5kIHRoZW4gdGhlIGJ5dGVzIGFyZSBwZXJjZW50CiAgICogZW5jb2RlZC4KICAgKi8KICBmYWN0b3J5IFVyaS5kYXRhRnJvbUJ5dGVzKExpc3Q8aW50PiBieXRlcywKICAgICAge21pbWVUeXBlID0gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycywKICAgICAgcGVyY2VudEVuY29kZWQgPSBmYWxzZX0pIHsKICAgIFVyaURhdGEgZGF0YSA9IFVyaURhdGEuZnJvbUJ5dGVzKGJ5dGVzLAogICAgICAgIG1pbWVUeXBlOiBtaW1lVHlwZSwKICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLAogICAgICAgIHBlcmNlbnRFbmNvZGVkOiBwZXJjZW50RW5jb2RlZCk7CiAgICByZXR1cm4gZGF0YS51cmk7CiAgfQoKICAvKioKICAgKiBUaGUgc2NoZW1lIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAqCiAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHNjaGVtZSBjb21wb25lbnQuCiAgICoKICAgKiBBIFVSSSBzY2hlbWUgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KICAgKiBUaGUgcmV0dXJuZWQgc2NoZW1lIGlzIGNhbm9uaWNhbGl6ZWQgdG8gbG93ZXJjYXNlIGxldHRlcnMuCiAgICovCiAgU3RyaW5nIGdldCBzY2hlbWU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGF1dGhvcml0eSBjb21wb25lbnQuCiAgICoKICAgKiBUaGUgYXV0aG9yaXR5IGlzIGZvcm1hdHRlZCBmcm9tIHRoZSBbdXNlckluZm9dLCBbaG9zdF0gYW5kIFtwb3J0XQogICAqIHBhcnRzLgogICAqCiAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIGF1dGhvcml0eSBjb21wb25lbnQuCiAgICovCiAgU3RyaW5nIGdldCBhdXRob3JpdHk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHVzZXIgaW5mbyBwYXJ0IG9mIHRoZSBhdXRob3JpdHkgY29tcG9uZW50LgogICAqCiAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHVzZXIgaW5mbyBpbiB0aGUKICAgKiBhdXRob3JpdHkgY29tcG9uZW50LgogICAqLwogIFN0cmluZyBnZXQgdXNlckluZm87CgogIC8qKgogICAqIFJldHVybnMgdGhlIGhvc3QgcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudC4KICAgKgogICAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyBhdXRob3JpdHkgY29tcG9uZW50IGFuZAogICAqIGhlbmNlIG5vIGhvc3QuCiAgICoKICAgKiBJZiB0aGUgaG9zdCBpcyBhbiBJUCB2ZXJzaW9uIDYgYWRkcmVzcywgdGhlIHN1cnJvdW5kaW5nIGBbYCBhbmQgYF1gIGlzCiAgICogcmVtb3ZlZC4KICAgKgogICAqIFRoZSBob3N0IHN0cmluZyBpcyBjYXNlLWluc2Vuc2l0aXZlLgogICAqIFRoZSByZXR1cm5lZCBob3N0IG5hbWUgaXMgY2Fub25pY2FsaXplZCB0byBsb3dlci1jYXNlCiAgICogd2l0aCB1cHBlci1jYXNlIHBlcmNlbnQtZXNjYXBlcy4KICAgKi8KICBTdHJpbmcgZ2V0IGhvc3Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudC4KICAgKgogICAqIFJldHVybnMgdGhlIGRlZmF1bHQgcG9ydCBpZiB0aGVyZSBpcyBubyBwb3J0IG51bWJlciBpbiB0aGUgYXV0aG9yaXR5CiAgICogY29tcG9uZW50LiBUaGF0J3MgODAgZm9yIGh0dHAsIDQ0MyBmb3IgaHR0cHMsIGFuZCAwIGZvciBldmVyeXRoaW5nIGVsc2UuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwYXRoIGNvbXBvbmVudC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBwYXRoIGlzIGVuY29kZWQuIFRvIGdldCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBkZWNvZGVkCiAgICogcGF0aCB1c2UgW3BhdGhTZWdtZW50c10uCiAgICoKICAgKiBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gcGF0aCBjb21wb25lbnQuCiAgICovCiAgU3RyaW5nIGdldCBwYXRoOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBxdWVyeSBjb21wb25lbnQuIFRoZSByZXR1cm5lZCBxdWVyeSBpcyBlbmNvZGVkLiBUbyBnZXQKICAgKiBkaXJlY3QgYWNjZXNzIHRvIHRoZSBkZWNvZGVkIHF1ZXJ5IHVzZSBbcXVlcnlQYXJhbWV0ZXJzXS4KICAgKgogICAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyBxdWVyeSBjb21wb25lbnQuCiAgICovCiAgU3RyaW5nIGdldCBxdWVyeTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZnJhZ21lbnQgaWRlbnRpZmllciBjb21wb25lbnQuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gZnJhZ21lbnQgaWRlbnRpZmllcgogICAqIGNvbXBvbmVudC4KICAgKi8KICBTdHJpbmcgZ2V0IGZyYWdtZW50OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBVUkkgcGF0aCBzcGxpdCBpbnRvIGl0cyBzZWdtZW50cy4gRWFjaCBvZiB0aGUgc2VnbWVudHMgaW4gdGhlCiAgICogcmV0dXJuZWQgbGlzdCBoYXZlIGJlZW4gZGVjb2RlZC4gSWYgdGhlIHBhdGggaXMgZW1wdHkgdGhlIGVtcHR5IGxpc3Qgd2lsbAogICAqIGJlIHJldHVybmVkLiBBIGxlYWRpbmcgc2xhc2ggYC9gIGRvZXMgbm90IGFmZmVjdCB0aGUgc2VnbWVudHMgcmV0dXJuZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgbGlzdCBpcyB1bm1vZGlmaWFibGUgYW5kIHdpbGwgdGhyb3cgW1Vuc3VwcG9ydGVkRXJyb3JdIG9uIGFueQogICAqIGNhbGxzIHRoYXQgd291bGQgbXV0YXRlIGl0LgogICAqLwogIExpc3Q8U3RyaW5nPiBnZXQgcGF0aFNlZ21lbnRzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBVUkkgcXVlcnkgc3BsaXQgaW50byBhIG1hcCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzCiAgICogc3BlY2lmaWVkIGZvciBGT1JNIHBvc3QgaW4gdGhlIFtIVE1MIDQuMDEgc3BlY2lmaWNhdGlvbiBzZWN0aW9uCiAgICogMTcuMTMuNF0oaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuNCAiSFRNTCA0LjAxIHNlY3Rpb24gMTcuMTMuNCIpLgogICAqIEVhY2gga2V5IGFuZCB2YWx1ZSBpbiB0aGUgcmV0dXJuZWQgbWFwIGhhcyBiZWVuIGRlY29kZWQuCiAgICogSWYgdGhlcmUgaXMgbm8gcXVlcnkgdGhlIGVtcHR5IG1hcCBpcyByZXR1cm5lZC4KICAgKgogICAqIEtleXMgaW4gdGhlIHF1ZXJ5IHN0cmluZyB0aGF0IGhhdmUgbm8gdmFsdWUgYXJlIG1hcHBlZCB0byB0aGUKICAgKiBlbXB0eSBzdHJpbmcuCiAgICogSWYgYSBrZXkgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBxdWVyeSBzdHJpbmcsIGl0IGlzIG1hcHBlZCB0bwogICAqIGFuIGFyYml0cmFyeSBjaG9pY2Ugb2YgcG9zc2libGUgdmFsdWUuCiAgICogVGhlIFtxdWVyeVBhcmFtZXRlcnNBbGxdIGdldHRlciBjYW4gcHJvdmlkZSBhIG1hcAogICAqIHRoYXQgbWFwcyBrZXlzIHRvIGFsbCBvZiB0aGVpciB2YWx1ZXMuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgbWFwIGlzIHVubW9kaWZpYWJsZS4KICAgKi8KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBxdWVyeVBhcmFtZXRlcnM7CgogIC8qKgogICAqIFJldHVybnMgdGhlIFVSSSBxdWVyeSBzcGxpdCBpbnRvIGEgbWFwIGFjY29yZGluZyB0byB0aGUgcnVsZXMKICAgKiBzcGVjaWZpZWQgZm9yIEZPUk0gcG9zdCBpbiB0aGUgW0hUTUwgNC4wMSBzcGVjaWZpY2F0aW9uIHNlY3Rpb24KICAgKiAxNy4xMy40XShodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2ludGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy4xMy40ICJIVE1MIDQuMDEgc2VjdGlvbiAxNy4xMy40IikuCiAgICogRWFjaCBrZXkgYW5kIHZhbHVlIGluIHRoZSByZXR1cm5lZCBtYXAgaGFzIGJlZW4gZGVjb2RlZC4gSWYgdGhlcmUgaXMgbm8KICAgKiBxdWVyeSB0aGUgZW1wdHkgbWFwIGlzIHJldHVybmVkLgogICAqCiAgICogS2V5cyBhcmUgbWFwcGVkIHRvIGxpc3RzIG9mIHRoZWlyIHZhbHVlcy4gSWYgYSBrZXkgb2NjdXJzIG9ubHkgb25jZSwKICAgKiBpdHMgdmFsdWUgaXMgYSBzaW5nbGV0b24gbGlzdC4gSWYgYSBrZXkgb2NjdXJzIHdpdGggbm8gdmFsdWUsIHRoZQogICAqIGVtcHR5IHN0cmluZyBpcyB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGhhdCBvY2N1cnJlbmNlLgogICAqCiAgICogVGhlIHJldHVybmVkIG1hcCBhbmQgdGhlIGxpc3RzIGl0IGNvbnRhaW5zIGFyZSB1bm1vZGlmaWFibGUuCiAgICovCiAgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBnZXQgcXVlcnlQYXJhbWV0ZXJzQWxsOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBpcyBhYnNvbHV0ZS4KICAgKgogICAqIEEgVVJJIGlzIGFuIGFic29sdXRlIFVSSSBpbiB0aGUgc2Vuc2Ugb2YgUkZDIDM5ODYgaWYgaXQgaGFzIGEgc2NoZW1lCiAgICogYW5kIG5vIGZyYWdtZW50LgogICAqLwogIGJvb2wgZ2V0IGlzQWJzb2x1dGU7CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgVVJJIGhhcyBhIFtzY2hlbWVdIGNvbXBvbmVudC4KICAgKi8KICBib29sIGdldCBoYXNTY2hlbWUgPT4gc2NoZW1lLmlzTm90RW1wdHk7CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgVVJJIGhhcyBhbiBbYXV0aG9yaXR5XSBjb21wb25lbnQuCiAgICovCiAgYm9vbCBnZXQgaGFzQXV0aG9yaXR5OwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYW4gZXhwbGljaXQgcG9ydC4KICAgKgogICAqIElmIHRoZSBwb3J0IG51bWJlciBpcyB0aGUgZGVmYXVsdCBwb3J0IG51bWJlcgogICAqICh6ZXJvIGZvciB1bnJlY29nbml6ZWQgc2NoZW1lcywgd2l0aCBodHRwICg4MCkgYW5kIGh0dHBzICg0NDMpIGJlaW5nCiAgICogcmVjb2duaXplZCksCiAgICogdGhlbiB0aGUgcG9ydCBpcyBtYWRlIGltcGxpY2l0IGFuZCBvbWl0dGVkIGZyb20gdGhlIFVSSS4KICAgKi8KICBib29sIGdldCBoYXNQb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYSBxdWVyeSBwYXJ0LgogICAqLwogIGJvb2wgZ2V0IGhhc1F1ZXJ5OwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYSBmcmFnbWVudCBwYXJ0LgogICAqLwogIGJvb2wgZ2V0IGhhc0ZyYWdtZW50OwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYW4gZW1wdHkgcGF0aC4KICAgKi8KICBib29sIGdldCBoYXNFbXB0eVBhdGg7CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgVVJJIGhhcyBhbiBhYnNvbHV0ZSBwYXRoIChzdGFydGluZyB3aXRoICcvJykuCiAgICovCiAgYm9vbCBnZXQgaGFzQWJzb2x1dGVQYXRoOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBvcmlnaW4gb2YgdGhlIFVSSSBpbiB0aGUgZm9ybSBzY2hlbWU6Ly9ob3N0OnBvcnQgZm9yIHRoZQogICAqIHNjaGVtZXMgaHR0cCBhbmQgaHR0cHMuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiB0aGUgc2NoZW1lIGlzIG5vdCAiaHR0cCIgb3IgImh0dHBzIiwgb3IgaWYgdGhlIGhvc3QgbmFtZQogICAqIGlzIG1pc3Npbmcgb3IgZW1wdHkuCiAgICoKICAgKiBTZWU6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtaHRtbDUtMjAxMTA0MDUvb3JpZ2luLTAuaHRtbCNvcmlnaW4KICAgKi8KICBTdHJpbmcgZ2V0IG9yaWdpbjsKCiAgLy8vIFdoZXRoZXIgdGhlIHNjaGVtZSBvZiB0aGlzIFtVcmldIGlzIFtzY2hlbWVdLgogIC8vLwogIC8vLyBUaGUgW3NjaGVtZV0gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUgcmV0dXJuZWQgYnkgW1VyaS5zY2hlbWVdLAogIC8vLyBidXQgZG9lc24ndCBoYXZlIHRvIGJlIGNhc2Utbm9ybWFsaXplZCB0byBsb3dlci1jYXNlIGNoYXJhY3RlcnMuCiAgLy8vCiAgLy8vIEV4YW1wbGU6CiAgLy8vIGBgYGRhcnQKICAvLy8gdmFyIHVyaSA9IFVyaS5wYXJzZSgiaHR0cDovL2V4YW1wbGUuY29tLyIpOwogIC8vLyBwcmludCh1cmkuaXNTY2hlbWUoIkhUVFAiKSk7ICAvLyBQcmludHMgdHJ1ZS4KICAvLy8gYGBgCiAgLy8vCiAgLy8vIEEgYG51bGxgIG9yIGVtcHR5IFtzY2hlbWVdIHN0cmluZyBtYXRjaGVzIGEgVVJJIHdpdGggbm8gc2NoZW1lCiAgLy8vIChvbmUgd2hlcmUgW2hhc1NjaGVtZV0gcmV0dXJucyBmYWxzZSkuCiAgYm9vbCBpc1NjaGVtZShTdHJpbmcgc2NoZW1lKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlsZSBwYXRoIGZyb20gYSBmaWxlIFVSSS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBwYXRoIGhhcyBlaXRoZXIgV2luZG93cyBvciBub24tV2luZG93cwogICAqIHNlbWFudGljcy4KICAgKgogICAqIEZvciBub24tV2luZG93cyBzZW1hbnRpY3MgdGhlIHNsYXNoICgiLyIpIGlzIHVzZWQgdG8gc2VwYXJhdGUKICAgKiBwYXRoIHNlZ21lbnRzLgogICAqCiAgICogRm9yIFdpbmRvd3Mgc2VtYW50aWNzIHRoZSBiYWNrc2xhc2ggKCJcXCIpIHNlcGFyYXRvciBpcyB1c2VkIHRvCiAgICogc2VwYXJhdGUgcGF0aCBzZWdtZW50cy4KICAgKgogICAqIElmIHRoZSBVUkkgaXMgYWJzb2x1dGUgdGhlIHBhdGggc3RhcnRzIHdpdGggYSBwYXRoIHNlcGFyYXRvcgogICAqIHVubGVzcyBXaW5kb3dzIHNlbWFudGljcyBpcyB1c2VkIGFuZCB0aGUgZmlyc3QgcGF0aCBzZWdtZW50IGlzIGEKICAgKiBkcml2ZSBsZXR0ZXIuIFdoZW4gV2luZG93cyBzZW1hbnRpY3MgaXMgdXNlZCBhIGhvc3QgY29tcG9uZW50IGluCiAgICogdGhlIHVyaSBpbiBpbnRlcnByZXRlZCBhcyBhIGZpbGUgc2VydmVyIGFuZCBhIFVOQyBwYXRoIGlzCiAgICogcmV0dXJuZWQuCiAgICoKICAgKiBUaGUgZGVmYXVsdCBmb3Igd2hldGhlciB0byB1c2UgV2luZG93cyBvciBub24tV2luZG93cyBzZW1hbnRpY3MKICAgKiBkZXRlcm1pbmVkIGZyb20gdGhlIHBsYXRmb3JtIERhcnQgaXMgcnVubmluZyBvbi4gV2hlbiBydW5uaW5nIGluCiAgICogdGhlIHN0YW5kYWxvbmUgVk0gdGhpcyBpcyBkZXRlY3RlZCBieSB0aGUgVk0gYmFzZWQgb24gdGhlCiAgICogb3BlcmF0aW5nIHN5c3RlbS4gV2hlbiBydW5uaW5nIGluIGEgYnJvd3NlciBub24tV2luZG93cyBzZW1hbnRpY3MKICAgKiBpcyBhbHdheXMgdXNlZC4KICAgKgogICAqIFRvIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIHdoaWNoIHNlbWFudGljcyB0byB1c2UgcGFzcwogICAqIGEgdmFsdWUgZm9yIFt3aW5kb3dzXS4gUGFzc2luZyBgdHJ1ZWAgd2lsbCB1c2UgV2luZG93cwogICAqIHNlbWFudGljcyBhbmQgcGFzc2luZyBgZmFsc2VgIHdpbGwgdXNlIG5vbi1XaW5kb3dzIHNlbWFudGljcy4KICAgKgogICAqIElmIHRoZSBVUkkgZW5kcyB3aXRoIGEgc2xhc2ggKGkuZS4gdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgaXMKICAgKiBlbXB0eSkgdGhlIHJldHVybmVkIGZpbGUgcGF0aCB3aWxsIGFsc28gZW5kIHdpdGggYSBzbGFzaC4KICAgKgogICAqIFdpdGggV2luZG93cyBzZW1hbnRpY3MgVVJJcyBzdGFydGluZyB3aXRoIGEgZHJpdmUgbGV0dGVyIGNhbm5vdAogICAqIGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRyaXZlIG9uIHRoZSBkZXNpZ25hdGVkIGRyaXZlLiBUaGF0IGlzCiAgICogZm9yIHRoZSBVUkkgYGZpbGU6Ly8vYzphYmNgIGNhbGxpbmcgYHRvRmlsZVBhdGhgIHdpbGwgdGhyb3cgYXMgYQogICAqIHBhdGggc2VnbWVudCBjYW5ub3QgY29udGFpbiBjb2xvbiBvbiBXaW5kb3dzLgogICAqCiAgICogRXhhbXBsZXMgdXNpbmcgbm9uLVdpbmRvd3Mgc2VtYW50aWNzIChyZXN1bHRpbmcgb2YgY2FsbGluZwogICAqIHRvRmlsZVBhdGggaW4gY29tbWVudCk6CiAgICoKICAgKiAgICAgVXJpLnBhcnNlKCJ4eHgveXl5Iik7ICAvLyB4eHgveXl5CiAgICogICAgIFVyaS5wYXJzZSgieHh4L3l5eS8iKTsgIC8vIHh4eC95eXkvCiAgICogICAgIFVyaS5wYXJzZSgiZmlsZTovLy94eHgveXl5Iik7ICAvLyAveHh4L3l5eQogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly8veHh4L3l5eS8iKTsgIC8vIC94eHgveXl5LwogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly8vQzoiKTsgIC8vIC9DOgogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly8vQzphIik7ICAvLyAvQzphCiAgICoKICAgKiBFeGFtcGxlcyB1c2luZyBXaW5kb3dzIHNlbWFudGljcyAocmVzdWx0aW5nIFVSSSBpbiBjb21tZW50KToKICAgKgogICAqICAgICBVcmkucGFyc2UoInh4eC95eXkiKTsgIC8vIHh4eFx5eXkKICAgKiAgICAgVXJpLnBhcnNlKCJ4eHgveXl5LyIpOyAgLy8geHh4XHl5eVwKICAgKiAgICAgVXJpLnBhcnNlKCJmaWxlOi8vL3h4eC95eXkiKTsgIC8vIFx4eHhceXl5CiAgICogICAgIFVyaS5wYXJzZSgiZmlsZTovLy94eHgveXl5LyIpOyAgLy8gXHh4eFx5eXlcCiAgICogICAgIFVyaS5wYXJzZSgiZmlsZTovLy9DOi94eHgveXl5Iik7ICAvLyBDOlx4eHhceXl5CiAgICogICAgIFVyaS5wYXJzZSgiZmlsZTpDOnh4eC95eXkiKTsgIC8vIFRocm93cyBhcyBhIHBhdGggc2VnbWVudAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5ub3QgY29udGFpbiBjb2xvbiBvbiBXaW5kb3dzLgogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly9zZXJ2ZXIvc2hhcmUvZmlsZSIpOyAgLy8gXFxzZXJ2ZXJcc2hhcmVcZmlsZQogICAqCiAgICogSWYgdGhlIFVSSSBpcyBub3QgYSBmaWxlIFVSSSBjYWxsaW5nIHRoaXMgdGhyb3dzCiAgICogW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqCiAgICogSWYgdGhlIFVSSSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgZmlsZSBwYXRoIGNhbGxpbmcgdGhpcyB0aHJvd3MKICAgKiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgLy8gVE9ETyhscm4pOiBEZXByZWNhdGUgYW5kIG1vdmUgZnVuY3Rpb25hbGl0eSB0byBGaWxlIGNsYXNzIG9yIHNpbWlsYXIuCiAgLy8gVGhlIGNvcmUgbGlicmFyaWVzIHNob3VsZCBub3Qgd29ycnkgYWJvdXQgdGhlIHBsYXRmb3JtLgogIFN0cmluZyB0b0ZpbGVQYXRoKHtib29sIHdpbmRvd3N9KTsKCiAgLyoqCiAgICogQWNjZXNzIHRoZSBzdHJ1Y3R1cmUgb2YgYSBgZGF0YTpgIFVSSS4KICAgKgogICAqIFJldHVybnMgYSBbVXJpRGF0YV0gb2JqZWN0IGZvciBgZGF0YTpgIFVSSXMgYW5kIGBudWxsYCBmb3IgYWxsIG90aGVyCiAgICogVVJJcy4KICAgKiBUaGUgW1VyaURhdGFdIG9iamVjdCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIG1lZGlhIHR5cGUgYW5kIGRhdGEKICAgKiBvZiBhIGBkYXRhOmAgVVJJLgogICAqLwogIFVyaURhdGEgZ2V0IGRhdGE7CgogIC8vLyBSZXR1cm5zIGEgaGFzaCBjb2RlIGNvbXB1dGVkIGFzIGB0b1N0cmluZygpLmhhc2hDb2RlYC4KICAvLy8KICAvLy8gVGhpcyBndWFyYW50ZWVzIHRoYXQgVVJJcyB3aXRoIHRoZSBzYW1lIG5vcm1hbGl6ZWQKICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvLy8gQSBVUkkgaXMgZXF1YWwgdG8gYW5vdGhlciBVUkkgd2l0aCB0aGUgc2FtZSBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uLgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkkuCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgYFVyaWAgYmFzZWQgb24gdGhpcyBvbmUsIGJ1dCB3aXRoIHNvbWUgcGFydHMgcmVwbGFjZWQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBbbmV3IFVyaV0gY29uc3RydWN0b3IsCiAgICogYW5kIHRoZXkgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nLgogICAqCiAgICogQXQgbW9zdCBvbmUgb2YgW3BhdGhdIGFuZCBbcGF0aFNlZ21lbnRzXSBtdXN0IGJlIHByb3ZpZGVkLgogICAqIExpa2V3aXNlLCBhdCBtb3N0IG9uZSBvZiBbcXVlcnldIGFuZCBbcXVlcnlQYXJhbWV0ZXJzXSBtdXN0IGJlIHByb3ZpZGVkLgogICAqCiAgICogRWFjaCBwYXJ0IHRoYXQgaXMgbm90IHByb3ZpZGVkIHdpbGwgZGVmYXVsdCB0byB0aGUgY29ycmVzcG9uZGluZwogICAqIHZhbHVlIGZyb20gdGhpcyBgVXJpYCBpbnN0ZWFkLgogICAqCiAgICogVGhpcyBtZXRob2QgaXMgZGlmZmVyZW50IGZyb20gW1VyaS5yZXNvbHZlXSB3aGljaCBvdmVycmlkZXMgaW4gYQogICAqIGhpZXJhcmNoaWNhbCBtYW5uZXIsCiAgICogYW5kIGNhbiBpbnN0ZWFkIHJlcGxhY2UgZWFjaCBwYXJ0IG9mIGEgYFVyaWAgaW5kaXZpZHVhbGx5LgogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqICAgICBVcmkgdXJpMSA9IFVyaS5wYXJzZSgiYTovL2JAYzo0L2QvZT9mI2ciKTsKICAgKiAgICAgVXJpIHVyaTIgPSB1cmkxLnJlcGxhY2Uoc2NoZW1lOiAiQSIsIHBhdGg6ICJEL0UvRSIsIGZyYWdtZW50OiAiRyIpOwogICAqICAgICBwcmludCh1cmkyKTsgIC8vIHByaW50cyAiYTovL2JAYzo0L0QvRS9FP2YjRyIKICAgKgogICAqIFRoaXMgbWV0aG9kIGFjdHMgc2ltaWxhcmx5IHRvIHVzaW5nIHRoZSBgbmV3IFVyaWAgY29uc3RydWN0b3Igd2l0aAogICAqIHNvbWUgb2YgdGhlIGFyZ3VtZW50cyB0YWtlbiBmcm9tIHRoaXMgYFVyaWAuIEV4YW1wbGU6CiAgICoKICAgKiAgICAgVXJpIHVyaTMgPSBuZXcgVXJpKAogICAqICAgICAgICAgc2NoZW1lOiAiQSIsCiAgICogICAgICAgICB1c2VySW5mbzogdXJpMS51c2VySW5mbywKICAgKiAgICAgICAgIGhvc3Q6IHVyaTEuaG9zdCwKICAgKiAgICAgICAgIHBvcnQ6IHVyaTEucG9ydCwKICAgKiAgICAgICAgIHBhdGg6ICJEL0UvRSIsCiAgICogICAgICAgICBxdWVyeTogdXJpMS5xdWVyeSwKICAgKiAgICAgICAgIGZyYWdtZW50OiAiRyIpOwogICAqICAgICBwcmludCh1cmkzKTsgIC8vIHByaW50cyAiYTovL2JAYzo0L0QvRS9FP2YjRyIKICAgKiAgICAgcHJpbnQodXJpMiA9PSB1cmkzKTsgIC8vIHByaW50cyB0cnVlLgogICAqCiAgICogVXNpbmcgdGhpcyBtZXRob2QgY2FuIGJlIHNlZW4gYXMgYSBzaG9ydGhhbmQgZm9yIHRoZSBgVXJpYCBjb25zdHJ1Y3RvcgogICAqIGNhbGwgYWJvdmUsIGJ1dCBtYXkgYWxzbyBiZSBzbGlnaHRseSBmYXN0ZXIgYmVjYXVzZSB0aGUgcGFydHMgdGFrZW4KICAgKiBmcm9tIHRoaXMgYFVyaWAgbmVlZCBub3QgYmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgYWdhaW4uCiAgICovCiAgVXJpIHJlcGxhY2UoCiAgICAgIHtTdHJpbmcgc2NoZW1lLAogICAgICBTdHJpbmcgdXNlckluZm8sCiAgICAgIFN0cmluZyBob3N0LAogICAgICBpbnQgcG9ydCwKICAgICAgU3RyaW5nIHBhdGgsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcGF0aFNlZ21lbnRzLAogICAgICBTdHJpbmcgcXVlcnksCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWMgLypTdHJpbmd8SXRlcmFibGU8U3RyaW5nPiovID4gcXVlcnlQYXJhbWV0ZXJzLAogICAgICBTdHJpbmcgZnJhZ21lbnR9KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGBVcmlgIHRoYXQgZGlmZmVycyBmcm9tIHRoaXMgb25seSBpbiBub3QgaGF2aW5nIGEgZnJhZ21lbnQuCiAgICoKICAgKiBJZiB0aGlzIGBVcmlgIGRvZXMgbm90IGhhdmUgYSBmcmFnbWVudCwgaXQgaXMgaXRzZWxmIHJldHVybmVkLgogICAqLwogIFVyaSByZW1vdmVGcmFnbWVudCgpOwoKICAvKioKICAgKiBSZXNvbHZlIFtyZWZlcmVuY2VdIGFzIGFuIFVSSSByZWxhdGl2ZSB0byBgdGhpc2AuCiAgICoKICAgKiBGaXJzdCB0dXJuIFtyZWZlcmVuY2VdIGludG8gYSBVUkkgdXNpbmcgW1VyaS5wYXJzZV0uIFRoZW4gcmVzb2x2ZSB0aGUKICAgKiByZXN1bHRpbmcgVVJJIHJlbGF0aXZlIHRvIGB0aGlzYC4KICAgKgogICAqIFJldHVybnMgdGhlIHJlc29sdmVkIFVSSS4KICAgKgogICAqIFNlZSBbcmVzb2x2ZVVyaV0gZm9yIGRldGFpbHMuCiAgICovCiAgVXJpIHJlc29sdmUoU3RyaW5nIHJlZmVyZW5jZSk7CgogIC8qKgogICAqIFJlc29sdmUgW3JlZmVyZW5jZV0gYXMgYW4gVVJJIHJlbGF0aXZlIHRvIGB0aGlzYC4KICAgKgogICAqIFJldHVybnMgdGhlIHJlc29sdmVkIFVSSS4KICAgKgogICAqIFRoZSBhbGdvcml0aG0gIlRyYW5zZm9ybSBSZWZlcmVuY2UiIGZvciByZXNvbHZpbmcgYSByZWZlcmVuY2UgaXMgZGVzY3JpYmVkCiAgICogaW4gW1JGQy0zOTg2IFNlY3Rpb24gNV0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUgIlJGQy0xMTIzIikuCiAgICoKICAgKiBVcGRhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgYmFzZSBVUkkgaXMganVzdCBhIHJlbGF0aXZlIHBhdGggLQogICAqIHRoYXQgaXM6IHdoZW4gaXQgaGFzIG5vIHNjaGVtZSBhbmQgbm8gYXV0aG9yaXR5IGFuZCB0aGUgcGF0aCBkb2VzIG5vdCBzdGFydAogICAqIHdpdGggYSBzbGFzaC4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSBwYXRocyBhcmUgY29tYmluZWQgd2l0aG91dCByZW1vdmluZyBsZWFkaW5nICIuLiIsIGFuZAogICAqIGFuIGVtcHR5IHBhdGggaXMgbm90IGNvbnZlcnRlZCB0byAiLyIuCiAgICovCiAgVXJpIHJlc29sdmVVcmkoVXJpIHJlZmVyZW5jZSk7CgogIC8qKgogICAqIFJldHVybnMgYSBVUkkgd2hlcmUgdGhlIHBhdGggaGFzIGJlZW4gbm9ybWFsaXplZC4KICAgKgogICAqIEEgbm9ybWFsaXplZCBwYXRoIGRvZXMgbm90IGNvbnRhaW4gYC5gIHNlZ21lbnRzIG9yIG5vbi1sZWFkaW5nIGAuLmAKICAgKiBzZWdtZW50cy4KICAgKiBPbmx5IGEgcmVsYXRpdmUgcGF0aCB3aXRoIG5vIHNjaGVtZSBvciBhdXRob3JpdHkgbWF5IGNvbnRhaW4KICAgKiBsZWFkaW5nIGAuLmAgc2VnbWVudHMsCiAgICogYSBwYXRoIHRoYXQgc3RhcnRzIHdpdGggYC9gIHdpbGwgYWxzbyBkcm9wIGFueSBsZWFkaW5nIGAuLmAgc2VnbWVudHMuCiAgICoKICAgKiBUaGlzIHVzZXMgdGhlIHNhbWUgbm9ybWFsaXphdGlvbiBzdHJhdGVneSBhcyBgbmV3IFVyaSgpLnJlc29sdmUodGhpcylgLgogICAqCiAgICogRG9lcyBub3QgY2hhbmdlIGFueSBwYXJ0IG9mIHRoZSBVUkkgZXhjZXB0IHRoZSBwYXRoLgogICAqCiAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYFVyaWAgYWx3YXlzIG5vcm1hbGl6ZXMgcGF0aHMsIHNvIGNhbGxpbmcKICAgKiB0aGlzIGZ1bmN0aW9uIGhhcyBubyBlZmZlY3QuCiAgICovCiAgVXJpIG5vcm1hbGl6ZVBhdGgoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBgVXJpYCBvYmplY3QgYnkgcGFyc2luZyBhIFVSSSBzdHJpbmcuCiAgICoKICAgKiBJZiBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgcHJvdmlkZWQsIHRoZXkgbXVzdCBzcGVjaWZ5IGEgdmFsaWQgc3Vic3RyaW5nCiAgICogb2YgW3VyaV0sIGFuZCBvbmx5IHRoZSBzdWJzdHJpbmcgZnJvbSBgc3RhcnRgIHRvIGBlbmRgIGlzIHBhcnNlZCBhcyBhIFVSSS4KICAgKgogICAqIFRoZSBbdXJpXSBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICogSWYgdGhlIFt1cmldIHN0cmluZyBpcyBub3QgdmFsaWQgYXMgYSBVUkkgb3IgVVJJIHJlZmVyZW5jZSwKICAgKiBhIFtGb3JtYXRFeGNlcHRpb25dIGlzIHRocm93bi4KICAgKi8KICBzdGF0aWMgVXJpIHBhcnNlKFN0cmluZyB1cmksIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgLy8gVGhpcyBwYXJzaW5nIHdpbGwgbm90IHZhbGlkYXRlIHBlcmNlbnQtZW5jb2RpbmcsIElQdjYsIGV0Yy4KICAgIC8vIFdoZW4gZG9uZSBzcGxpdHRpbmcgaW50byBwYXJ0cywgaXQgd2lsbCBjYWxsLCBlLmcuLCBbX21ha2VGcmFnbWVudF0KICAgIC8vIHRvIGRvIHRoZSBmaW5hbCBwYXJzaW5nLgogICAgLy8KICAgIC8vIEltcG9ydGFudCBwYXJ0cyBvZiB0aGUgUkZDIDM5ODYgdXNlZCBoZXJlOgogICAgLy8gVVJJICAgICAgICAgICA9IHNjaGVtZSAiOiIgaGllci1wYXJ0IFsgIj8iIHF1ZXJ5IF0gWyAiIyIgZnJhZ21lbnQgXQogICAgLy8KICAgIC8vIGhpZXItcGFydCAgICAgPSAiLy8iIGF1dGhvcml0eSBwYXRoLWFiZW1wdHkKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLWFic29sdXRlCiAgICAvLyAgICAgICAgICAgICAgIC8gcGF0aC1yb290bGVzcwogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtZW1wdHkKICAgIC8vCiAgICAvLyBVUkktcmVmZXJlbmNlID0gVVJJIC8gcmVsYXRpdmUtcmVmCiAgICAvLwogICAgLy8gYWJzb2x1dGUtVVJJICA9IHNjaGVtZSAiOiIgaGllci1wYXJ0IFsgIj8iIHF1ZXJ5IF0KICAgIC8vCiAgICAvLyByZWxhdGl2ZS1yZWYgID0gcmVsYXRpdmUtcGFydCBbICI/IiBxdWVyeSBdIFsgIiMiIGZyYWdtZW50IF0KICAgIC8vCiAgICAvLyByZWxhdGl2ZS1wYXJ0ID0gIi8vIiBhdXRob3JpdHkgcGF0aC1hYmVtcHR5CiAgICAvLyAgICAgICAgICAgICAgIC8gcGF0aC1hYnNvbHV0ZQogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtbm9zY2hlbWUKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLWVtcHR5CiAgICAvLwogICAgLy8gc2NoZW1lICAgICAgICA9IEFMUEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAiLSIgLyAiLiIgKQogICAgLy8KICAgIC8vIGF1dGhvcml0eSAgICAgPSBbIHVzZXJpbmZvICJAIiBdIGhvc3QgWyAiOiIgcG9ydCBdCiAgICAvLyB1c2VyaW5mbyAgICAgID0gKiggdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvICI6IiApCiAgICAvLyBob3N0ICAgICAgICAgID0gSVAtbGl0ZXJhbCAvIElQdjRhZGRyZXNzIC8gcmVnLW5hbWUKICAgIC8vIElQLWxpdGVyYWwgICAgPSAiWyIgKCBJUHY2YWRkcmVzcyAvIElQdjZhZGRyeiAvIElQdkZ1dHVyZSApICJdIgogICAgLy8gSVB2NmFkZHJ6ICAgICA9IElQdjZhZGRyZXNzICIlMjUiIFpvbmVJRAogICAgLy8gWm9uZUlEICAgICAgICA9IDEqKCB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgKQogICAgLy8gcG9ydCAgICAgICAgICA9ICpESUdJVAogICAgLy8gcmVnLW5hbWUgICAgICA9ICooIHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgKQogICAgLy8KICAgIC8vIHBhdGggICAgICAgICAgPSBwYXRoLWFiZW1wdHkgICAgOyBiZWdpbnMgd2l0aCAiLyIgb3IgaXMgZW1wdHkKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLWFic29sdXRlICAgOyBiZWdpbnMgd2l0aCAiLyIgYnV0IG5vdCAiLy8iCiAgICAvLyAgICAgICAgICAgICAgIC8gcGF0aC1ub3NjaGVtZSAgIDsgYmVnaW5zIHdpdGggYSBub24tY29sb24gc2VnbWVudAogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtcm9vdGxlc3MgICA7IGJlZ2lucyB3aXRoIGEgc2VnbWVudAogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtZW1wdHkgICAgICA7IHplcm8gY2hhcmFjdGVycwogICAgLy8KICAgIC8vIHBhdGgtYWJlbXB0eSAgPSAqKCAiLyIgc2VnbWVudCApCiAgICAvLyBwYXRoLWFic29sdXRlID0gIi8iIFsgc2VnbWVudC1ueiAqKCAiLyIgc2VnbWVudCApIF0KICAgIC8vIHBhdGgtbm9zY2hlbWUgPSBzZWdtZW50LW56LW5jICooICIvIiBzZWdtZW50ICkKICAgIC8vIHBhdGgtcm9vdGxlc3MgPSBzZWdtZW50LW56ICooICIvIiBzZWdtZW50ICkKICAgIC8vIHBhdGgtZW1wdHkgICAgPSAwPHBjaGFyPgogICAgLy8KICAgIC8vIHNlZ21lbnQgICAgICAgPSAqcGNoYXIKICAgIC8vIHNlZ21lbnQtbnogICAgPSAxKnBjaGFyCiAgICAvLyBzZWdtZW50LW56LW5jID0gMSooIHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAiQCIgKQogICAgLy8gICAgICAgICAgICAgICA7IG5vbi16ZXJvLWxlbmd0aCBzZWdtZW50IHdpdGhvdXQgYW55IGNvbG9uICI6IgogICAgLy8KICAgIC8vIHBjaGFyICAgICAgICAgPSB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gIjoiIC8gIkAiCiAgICAvLwogICAgLy8gcXVlcnkgICAgICAgICA9ICooIHBjaGFyIC8gIi8iIC8gIj8iICkKICAgIC8vCiAgICAvLyBmcmFnbWVudCAgICAgID0gKiggcGNoYXIgLyAiLyIgLyAiPyIgKQogICAgZW5kID8/PSB1cmkubGVuZ3RoOwoKICAgIC8vIFNwZWNpYWwgY2FzZSBkYXRhOlVSSXMuIElnbm9yZSBjYXNlIHdoZW4gdGVzdGluZy4KICAgIGlmIChlbmQgPj0gc3RhcnQgKyA1KSB7CiAgICAgIGludCBkYXRhRGVsdGEgPSBfc3RhcnRzV2l0aERhdGEodXJpLCBzdGFydCk7CiAgICAgIGlmIChkYXRhRGVsdGEgPT0gMCkgewogICAgICAgIC8vIFRoZSBjYXNlIGlzIHJpZ2h0LgogICAgICAgIGlmIChzdGFydCA+IDAgfHwgZW5kIDwgdXJpLmxlbmd0aCkgdXJpID0gdXJpLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgICAgICByZXR1cm4gVXJpRGF0YS5fcGFyc2UodXJpLCA1LCBudWxsKS51cmk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YURlbHRhID09IDB4MjApIHsKICAgICAgICByZXR1cm4gVXJpRGF0YS5fcGFyc2UodXJpLnN1YnN0cmluZyhzdGFydCArIDUsIGVuZCksIDAsIG51bGwpLnVyaTsKICAgICAgfQogICAgICAvLyBPdGhlcndpc2UgdGhlIFVSSSBkb2Vzbid0IHN0YXJ0IHdpdGggImRhdGE6IiBvciBhbnkgY2FzZSB2YXJpYW50IG9mIGl0LgogICAgfQoKICAgIC8vIFRoZSBmb2xsb3dpbmcgaW5kZXgtbm9ybWFsaXphdGlvbiBiZWxvbmdzIHdpdGggdGhlIHNjYW5uaW5nLCBidXQgaXMKICAgIC8vIGVhc2llciB0byBkbyBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBoYXZlIGV4dHJhY3RlZCB2YXJpYWJsZXMgZnJvbSB0aGUKICAgIC8vIGluZGljZXMgbGlzdC4KICAgIHZhciBpbmRpY2VzID0gTGlzdDxpbnQ+KDgpOwoKICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZWFjaCBwb3NpdGlvbi4KICAgIC8vIFRoZSB2YWx1ZSB3aWxsIGVpdGhlciBiZSBjb3JyZWN0IGluIHNvbWUgY2FzZXMgd2hlcmUgaXQgaXNuJ3Qgc2V0CiAgICAvLyBieSB0aGUgc2Nhbm5lciwgb3IgaXQgaXMgY2xlYXJseSByZWNvZ25pemFibGUgYXMgYW4gdW5zZXQgdmFsdWUuCiAgICBpbmRpY2VzCiAgICAgIC4uWzBdID0gMAogICAgICAuLltfc2NoZW1lRW5kSW5kZXhdID0gc3RhcnQgLSAxCiAgICAgIC4uW19ob3N0U3RhcnRJbmRleF0gPSBzdGFydCAtIDEKICAgICAgLi5bX25vdFNpbXBsZUluZGV4XSA9IHN0YXJ0IC0gMQogICAgICAuLltfcG9ydFN0YXJ0SW5kZXhdID0gc3RhcnQKICAgICAgLi5bX3BhdGhTdGFydEluZGV4XSA9IHN0YXJ0CiAgICAgIC4uW19xdWVyeVN0YXJ0SW5kZXhdID0gZW5kCiAgICAgIC4uW19mcmFnbWVudFN0YXJ0SW5kZXhdID0gZW5kOwogICAgdmFyIHN0YXRlID0gX3NjYW4odXJpLCBzdGFydCwgZW5kLCBfdXJpU3RhcnQsIGluZGljZXMpOwogICAgLy8gU29tZSBzdGF0ZXMgdGhhdCBzaG91bGQgYmUgbm9uLXNpbXBsZSwgYnV0IHRoZSBVUkkgZW5kZWQgZWFybHkuCiAgICAvLyBQYXRocyB0aGF0IGVuZCBhdCBhICIuLiIgbXVzdCBiZSBub3JtYWxpemVkIHRvIGVuZCBpbiAiLi4vIi4KICAgIGlmIChzdGF0ZSA+PSBfbm9uU2ltcGxlRW5kU3RhdGVzKSB7CiAgICAgIGluZGljZXNbX25vdFNpbXBsZUluZGV4XSA9IGVuZDsKICAgIH0KICAgIGludCBzY2hlbWVFbmQgPSBpbmRpY2VzW19zY2hlbWVFbmRJbmRleF07CiAgICBpZiAoc2NoZW1lRW5kID49IHN0YXJ0KSB7CiAgICAgIC8vIFJlc2NhbiB0aGUgc2NoZW1lIHBhcnQgbm93IHRoYXQgd2Uga25vdyBpdCdzIG5vdCBhIHBhdGguCiAgICAgIHN0YXRlID0gX3NjYW4odXJpLCBzdGFydCwgc2NoZW1lRW5kLCBfc2NoZW1lU3RhcnQsIGluZGljZXMpOwogICAgICBpZiAoc3RhdGUgPT0gX3NjaGVtZVN0YXJ0KSB7CiAgICAgICAgLy8gRW1wdHkgc2NoZW1lLgogICAgICAgIGluZGljZXNbX25vdFNpbXBsZUluZGV4XSA9IHNjaGVtZUVuZDsKICAgICAgfQogICAgfQogICAgLy8gVGhlIHJldHVybmVkIHBvc2l0aW9ucyBhcmUgbGltaXRlZCBieSB0aGUgc2Nhbm5lcnMgYWJpbGl0eSB0byB3cml0ZSBvbmx5CiAgICAvLyBvbmUgcG9zaXRpb24gcGVyIGNoYXJhY3RlciwgYW5kIG9ubHkgdGhlIGN1cnJlbnQgcG9zaXRpb24uCiAgICAvLyBTY2FubmluZyBmcm9tIGxlZnQgdG8gcmlnaHQsIHdlIG9ubHkga25vdyB3aGV0aGVyIHNvbWV0aGluZyBpcyBhIHNjaGVtZQogICAgLy8gb3IgYSBwYXRoIHdoZW4gd2Ugc2VlIGEgYDpgIG9yIGAvYCwgYW5kIGxpa2V3aXNlIHdlIG9ubHkga25vdyBpZiB0aGUgZmlyc3QKICAgIC8vIGAvYCBpcyBwYXJ0IG9mIHRoZSBwYXRoIG9yIGlzIGxlYWRpbmcgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCB3aGVuIHdlIHNlZQogICAgLy8gdGhlIG5leHQgY2hhcmFjdGVyLgoKICAgIGludCBob3N0U3RhcnQgPSBpbmRpY2VzW19ob3N0U3RhcnRJbmRleF0gKyAxOwogICAgaW50IHBvcnRTdGFydCA9IGluZGljZXNbX3BvcnRTdGFydEluZGV4XTsKICAgIGludCBwYXRoU3RhcnQgPSBpbmRpY2VzW19wYXRoU3RhcnRJbmRleF07CiAgICBpbnQgcXVlcnlTdGFydCA9IGluZGljZXNbX3F1ZXJ5U3RhcnRJbmRleF07CiAgICBpbnQgZnJhZ21lbnRTdGFydCA9IGluZGljZXNbX2ZyYWdtZW50U3RhcnRJbmRleF07CgogICAgLy8gV2UgbWF5IGRpc2NvdmVyIHNjaGVtZSB3aGlsZSBoYW5kbGluZyBzcGVjaWFsIGNhc2VzLgogICAgU3RyaW5nIHNjaGVtZTsKCiAgICAvLyBEZXJpdmUgc29tZSBwb3NpdGlvbnMgdGhhdCB3ZXJlbid0IHNldCB0byBub3JtYWxpemUgdGhlIGluZGljZXMuCiAgICBpZiAoZnJhZ21lbnRTdGFydCA8IHF1ZXJ5U3RhcnQpIHF1ZXJ5U3RhcnQgPSBmcmFnbWVudFN0YXJ0OwogICAgLy8gSWYgcGF0aFN0YXJ0IGlzbid0IHNldCAoaXQncyBiZWZvcmUgc2NoZW1lIGVuZCBvciBob3N0IHN0YXJ0KSwgdGhlbgogICAgLy8gdGhlIHBhdGggaXMgZW1wdHksIG9yIHRoZXJlIGlzIG5vIGF1dGhvcml0eSBwYXJ0IGFuZCB0aGUgcGF0aAogICAgLy8gc3RhcnRzIHdpdGggYSBub24tc2ltcGxlIGNoYXJhY3Rlci4KICAgIGlmIChwYXRoU3RhcnQgPCBob3N0U3RhcnQpIHsKICAgICAgLy8gVGhlcmUgaXMgYW4gYXV0aG9yaXR5LCBidXQgbm8gcGF0aC4gVGhlIHBhdGggd291bGQgc3RhcnQgd2l0aCBgL2AKICAgICAgLy8gaWYgaXQgd2FzIHRoZXJlLgogICAgICBwYXRoU3RhcnQgPSBxdWVyeVN0YXJ0OwogICAgfSBlbHNlIGlmIChwYXRoU3RhcnQgPD0gc2NoZW1lRW5kKSB7CiAgICAgIC8vIFRoZXJlIGlzIGEgc2NoZW1lLCBidXQgbm8gYXV0aG9yaXR5LgogICAgICBwYXRoU3RhcnQgPSBzY2hlbWVFbmQgKyAxOwogICAgfQogICAgLy8gSWYgdGhlcmUgaXMgYW4gYXV0aG9yaXR5IHdpdGggbm8gcG9ydCwgc2V0IHRoZSBwb3J0IHBvc2l0aW9uCiAgICAvLyB0byBiZSBhdCB0aGUgZW5kIG9mIHRoZSBhdXRob3JpdHkgKGVxdWFsIHRvIHBhdGhTdGFydCkuCiAgICAvLyBUaGlzIGFsc28gaGFuZGxlcyBhICI6IiBpbiBhIHVzZXItaW5mbyBjb21wb25lbnQgaW5jb3JyZWN0bHkgc2V0dGluZwogICAgLy8gdGhlIHBvcnQgc3RhcnQgcG9zaXRpb24uCiAgICBpZiAocG9ydFN0YXJ0IDwgaG9zdFN0YXJ0KSBwb3J0U3RhcnQgPSBwYXRoU3RhcnQ7CgogICAgYXNzZXJ0KGhvc3RTdGFydCA9PSBzdGFydCB8fCBzY2hlbWVFbmQgPD0gaG9zdFN0YXJ0KTsKICAgIGFzc2VydChob3N0U3RhcnQgPD0gcG9ydFN0YXJ0KTsKICAgIGFzc2VydChzY2hlbWVFbmQgPD0gcGF0aFN0YXJ0KTsKICAgIGFzc2VydChwb3J0U3RhcnQgPD0gcGF0aFN0YXJ0KTsKICAgIGFzc2VydChwYXRoU3RhcnQgPD0gcXVlcnlTdGFydCk7CiAgICBhc3NlcnQocXVlcnlTdGFydCA8PSBmcmFnbWVudFN0YXJ0KTsKCiAgICBib29sIGlzU2ltcGxlID0gaW5kaWNlc1tfbm90U2ltcGxlSW5kZXhdIDwgc3RhcnQ7CgogICAgaWYgKGlzU2ltcGxlKSB7CiAgICAgIC8vIENoZWNrL2RvIG5vcm1hbGl6YXRpb25zIHRoYXQgd2VyZW4ndCBkZXRlY3RlZCBieSB0aGUgc2Nhbm5lci4KICAgICAgLy8gVGhpcyBpbmNsdWRlcyByZW1vdmFsIG9mIGVtcHR5IHBvcnQgb3IgdXNlckluZm8sCiAgICAgIC8vIG9yIHNjaGVtZSBzcGVjaWZpYyBwb3J0IGFuZCBwYXRoIG5vcm1hbGl6YXRpb25zLgogICAgICBpZiAoaG9zdFN0YXJ0ID4gc2NoZW1lRW5kICsgMykgewogICAgICAgIC8vIEFsd2F5cyBiZSBub24tc2ltcGxlIGlmIFVSSSBjb250YWlucyB1c2VyLWluZm8uCiAgICAgICAgLy8gVGhlIHNjYW5uZXIgZG9lc24ndCBzZXQgdGhlIG5vdC1zaW1wbGUgcG9zaXRpb24gaW4gdGhpcyBjYXNlIGJlY2F1c2UKICAgICAgICAvLyBpdCdzIHNldHRpbmcgdGhlIGhvc3Qtc3RhcnQgcG9zaXRpb24gaW5zdGVhZC4KICAgICAgICBpc1NpbXBsZSA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKHBvcnRTdGFydCA+IHN0YXJ0ICYmIHBvcnRTdGFydCArIDEgPT0gcGF0aFN0YXJ0KSB7CiAgICAgICAgLy8gSWYgdGhlIHBvcnQgaXMgZW1wdHksIGl0IHNob3VsZCBiZSBvbWl0dGVkLgogICAgICAgIC8vIFBhdGhvbG9naWNhbCBjYXNlLCBkb24ndCBib3RoZXIgY29ycmVjdGluZyBpdC4KICAgICAgICBpc1NpbXBsZSA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKHF1ZXJ5U3RhcnQgPCBlbmQgJiYKICAgICAgICAgICAgICAocXVlcnlTdGFydCA9PSBwYXRoU3RhcnQgKyAyICYmCiAgICAgICAgICAgICAgICAgIHVyaS5zdGFydHNXaXRoKCIuLiIsIHBhdGhTdGFydCkpIHx8CiAgICAgICAgICAocXVlcnlTdGFydCA+IHBhdGhTdGFydCArIDIgJiYKICAgICAgICAgICAgICB1cmkuc3RhcnRzV2l0aCgiLy4uIiwgcXVlcnlTdGFydCAtIDMpKSkgewogICAgICAgIC8vIFRoZSBwYXRoIGVuZHMgaW4gYSAiLi4iIHNlZ21lbnQuIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGl6ZWQgdG8gIi4uLyIuCiAgICAgICAgLy8gV2UgZGlkbid0IGRldGVjdCB0aGlzIHdoaWxlIHNjYW5uaW5nIGJlY2F1c2UgYSBxdWVyeSBvciBmcmFnbWVudCB3YXMKICAgICAgICAvLyBkZXRlY3RlZCBhdCB0aGUgc2FtZSB0aW1lICh3aGljaCBpcyB3aHkgd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoaXMKICAgICAgICAvLyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgYWZ0ZXIgdGhlIHBhdGgpLgogICAgICAgIGlzU2ltcGxlID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhlcmUgYXJlIGEgZmV3IHNjaGVtZS1iYXNlZCBub3JtYWxpemF0aW9ucyB0aGF0CiAgICAgICAgLy8gdGhlIHNjYW5uZXIgY291bGRuJ3QgY2hlY2suCiAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0IHRoZSBpbnB1dCBpcyB2ZXJ5IGNsb3NlIHRvIHNpbXBsZSwgc28ganVzdCBkbwogICAgICAgIC8vIHRoZSBub3JtYWxpemF0aW9ucy4KICAgICAgICBpZiAoc2NoZW1lRW5kID09IHN0YXJ0ICsgNCkgewogICAgICAgICAgLy8gRG8gc2NoZW1lIGJhc2VkIG5vcm1hbGl6YXRpb25zIGZvciBmaWxlLCBodHRwLgogICAgICAgICAgaWYgKHVyaS5zdGFydHNXaXRoKCJmaWxlIiwgc3RhcnQpKSB7CiAgICAgICAgICAgIHNjaGVtZSA9ICJmaWxlIjsKICAgICAgICAgICAgaWYgKGhvc3RTdGFydCA8PSBzdGFydCkgewogICAgICAgICAgICAgIC8vIEZpbGUgVVJJcyBzaG91bGQgaGF2ZSBhbiBhdXRob3JpdHkuCiAgICAgICAgICAgICAgLy8gUGF0aHMgYWZ0ZXIgYW4gYXV0aG9yaXR5IHNob3VsZCBiZSBhYnNvbHV0ZS4KICAgICAgICAgICAgICBTdHJpbmcgc2NoZW1lQXV0aCA9ICJmaWxlOi8vIjsKICAgICAgICAgICAgICBpbnQgZGVsdGEgPSAyOwogICAgICAgICAgICAgIGlmICghdXJpLnN0YXJ0c1dpdGgoIi8iLCBwYXRoU3RhcnQpKSB7CiAgICAgICAgICAgICAgICBzY2hlbWVBdXRoID0gImZpbGU6Ly8vIjsKICAgICAgICAgICAgICAgIGRlbHRhID0gMzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdXJpID0gc2NoZW1lQXV0aCArIHVyaS5zdWJzdHJpbmcocGF0aFN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgIHNjaGVtZUVuZCAtPSBzdGFydDsKICAgICAgICAgICAgICBob3N0U3RhcnQgPSA3OwogICAgICAgICAgICAgIHBvcnRTdGFydCA9IDc7CiAgICAgICAgICAgICAgcGF0aFN0YXJ0ID0gNzsKICAgICAgICAgICAgICBxdWVyeVN0YXJ0ICs9IGRlbHRhIC0gc3RhcnQ7CiAgICAgICAgICAgICAgZnJhZ21lbnRTdGFydCArPSBkZWx0YSAtIHN0YXJ0OwogICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgICBlbmQgPSB1cmkubGVuZ3RoOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGhTdGFydCA9PSBxdWVyeVN0YXJ0KSB7CiAgICAgICAgICAgICAgLy8gVXJpIGhhcyBhdXRob3JpdHkgYW5kIGVtcHR5IHBhdGguIEFkZCAiLyIgYXMgcGF0aC4KICAgICAgICAgICAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gdXJpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdXJpID0gdXJpLnJlcGxhY2VSYW5nZShwYXRoU3RhcnQsIHF1ZXJ5U3RhcnQsICIvIik7CiAgICAgICAgICAgICAgICBxdWVyeVN0YXJ0ICs9IDE7CiAgICAgICAgICAgICAgICBmcmFnbWVudFN0YXJ0ICs9IDE7CiAgICAgICAgICAgICAgICBlbmQgKz0gMTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdXJpID0gIiR7dXJpLnN1YnN0cmluZyhzdGFydCwgcGF0aFN0YXJ0KX0vIgogICAgICAgICAgICAgICAgICAgICIke3VyaS5zdWJzdHJpbmcocXVlcnlTdGFydCwgZW5kKX0iOwogICAgICAgICAgICAgICAgc2NoZW1lRW5kIC09IHN0YXJ0OwogICAgICAgICAgICAgICAgaG9zdFN0YXJ0IC09IHN0YXJ0OwogICAgICAgICAgICAgICAgcG9ydFN0YXJ0IC09IHN0YXJ0OwogICAgICAgICAgICAgICAgcGF0aFN0YXJ0IC09IHN0YXJ0OwogICAgICAgICAgICAgICAgcXVlcnlTdGFydCArPSAxIC0gc3RhcnQ7CiAgICAgICAgICAgICAgICBmcmFnbWVudFN0YXJ0ICs9IDEgLSBzdGFydDsKICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgIGVuZCA9IHVyaS5sZW5ndGg7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHVyaS5zdGFydHNXaXRoKCJodHRwIiwgc3RhcnQpKSB7CiAgICAgICAgICAgIHNjaGVtZSA9ICJodHRwIjsKICAgICAgICAgICAgLy8gSFRUUCBVUklzIHNob3VsZCBub3QgaGF2ZSBhbiBleHBsaWNpdCBwb3J0IG9mIDgwLgogICAgICAgICAgICBpZiAocG9ydFN0YXJ0ID4gc3RhcnQgJiYKICAgICAgICAgICAgICAgIHBvcnRTdGFydCArIDMgPT0gcGF0aFN0YXJ0ICYmCiAgICAgICAgICAgICAgICB1cmkuc3RhcnRzV2l0aCgiODAiLCBwb3J0U3RhcnQgKyAxKSkgewogICAgICAgICAgICAgIGlmIChzdGFydCA9PSAwICYmIGVuZCA9PSB1cmkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB1cmkgPSB1cmkucmVwbGFjZVJhbmdlKHBvcnRTdGFydCwgcGF0aFN0YXJ0LCAiIik7CiAgICAgICAgICAgICAgICBwYXRoU3RhcnQgLT0gMzsKICAgICAgICAgICAgICAgIHF1ZXJ5U3RhcnQgLT0gMzsKICAgICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQgLT0gMzsKICAgICAgICAgICAgICAgIGVuZCAtPSAzOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB1cmkgPSB1cmkuc3Vic3RyaW5nKHN0YXJ0LCBwb3J0U3RhcnQpICsKICAgICAgICAgICAgICAgICAgICB1cmkuc3Vic3RyaW5nKHBhdGhTdGFydCwgZW5kKTsKICAgICAgICAgICAgICAgIHNjaGVtZUVuZCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIGhvc3RTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIHBvcnRTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIHBhdGhTdGFydCAtPSAzICsgc3RhcnQ7CiAgICAgICAgICAgICAgICBxdWVyeVN0YXJ0IC09IDMgKyBzdGFydDsKICAgICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQgLT0gMyArIHN0YXJ0OwogICAgICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgZW5kID0gdXJpLmxlbmd0aDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHNjaGVtZUVuZCA9PSBzdGFydCArIDUgJiYgdXJpLnN0YXJ0c1dpdGgoImh0dHBzIiwgc3RhcnQpKSB7CiAgICAgICAgICBzY2hlbWUgPSAiaHR0cHMiOwogICAgICAgICAgLy8gSFRUUFMgVVJJcyBzaG91bGQgbm90IGhhdmUgYW4gZXhwbGljaXQgcG9ydCBvZiA0NDMuCiAgICAgICAgICBpZiAocG9ydFN0YXJ0ID4gc3RhcnQgJiYKICAgICAgICAgICAgICBwb3J0U3RhcnQgKyA0ID09IHBhdGhTdGFydCAmJgogICAgICAgICAgICAgIHVyaS5zdGFydHNXaXRoKCI0NDMiLCBwb3J0U3RhcnQgKyAxKSkgewogICAgICAgICAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gdXJpLmxlbmd0aCkgewogICAgICAgICAgICAgIHVyaSA9IHVyaS5yZXBsYWNlUmFuZ2UocG9ydFN0YXJ0LCBwYXRoU3RhcnQsICIiKTsKICAgICAgICAgICAgICBwYXRoU3RhcnQgLT0gNDsKICAgICAgICAgICAgICBxdWVyeVN0YXJ0IC09IDQ7CiAgICAgICAgICAgICAgZnJhZ21lbnRTdGFydCAtPSA0OwogICAgICAgICAgICAgIGVuZCAtPSAzOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoc3RhcnQsIHBvcnRTdGFydCkgKwogICAgICAgICAgICAgICAgICB1cmkuc3Vic3RyaW5nKHBhdGhTdGFydCwgZW5kKTsKICAgICAgICAgICAgICBzY2hlbWVFbmQgLT0gc3RhcnQ7CiAgICAgICAgICAgICAgaG9zdFN0YXJ0IC09IHN0YXJ0OwogICAgICAgICAgICAgIHBvcnRTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICBwYXRoU3RhcnQgLT0gNCArIHN0YXJ0OwogICAgICAgICAgICAgIHF1ZXJ5U3RhcnQgLT0gNCArIHN0YXJ0OwogICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQgLT0gNCArIHN0YXJ0OwogICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgICBlbmQgPSB1cmkubGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKGlzU2ltcGxlKSB7CiAgICAgIGlmIChzdGFydCA+IDAgfHwgZW5kIDwgdXJpLmxlbmd0aCkgewogICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICAgICAgc2NoZW1lRW5kIC09IHN0YXJ0OwogICAgICAgIGhvc3RTdGFydCAtPSBzdGFydDsKICAgICAgICBwb3J0U3RhcnQgLT0gc3RhcnQ7CiAgICAgICAgcGF0aFN0YXJ0IC09IHN0YXJ0OwogICAgICAgIHF1ZXJ5U3RhcnQgLT0gc3RhcnQ7CiAgICAgICAgZnJhZ21lbnRTdGFydCAtPSBzdGFydDsKICAgICAgfQogICAgICByZXR1cm4gX1NpbXBsZVVyaSh1cmksIHNjaGVtZUVuZCwgaG9zdFN0YXJ0LCBwb3J0U3RhcnQsIHBhdGhTdGFydCwKICAgICAgICAgIHF1ZXJ5U3RhcnQsIGZyYWdtZW50U3RhcnQsIHNjaGVtZSk7CiAgICB9CgogICAgcmV0dXJuIF9Vcmkubm90U2ltcGxlKHVyaSwgc3RhcnQsIGVuZCwgc2NoZW1lRW5kLCBob3N0U3RhcnQsIHBvcnRTdGFydCwKICAgICAgICBwYXRoU3RhcnQsIHF1ZXJ5U3RhcnQsIGZyYWdtZW50U3RhcnQsIHNjaGVtZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGBVcmlgIG9iamVjdCBieSBwYXJzaW5nIGEgVVJJIHN0cmluZy4KICAgKgogICAqIElmIFtzdGFydF0gYW5kIFtlbmRdIGFyZSBwcm92aWRlZCwgdGhleSBtdXN0IHNwZWNpZnkgYSB2YWxpZCBzdWJzdHJpbmcKICAgKiBvZiBbdXJpXSwgYW5kIG9ubHkgdGhlIHN1YnN0cmluZyBmcm9tIGBzdGFydGAgdG8gYGVuZGAgaXMgcGFyc2VkIGFzIGEgVVJJLgogICAqIFRoZSBbdXJpXSBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICoKICAgKiBSZXR1cm5zIGBudWxsYCBpZiB0aGUgW3VyaV0gc3RyaW5nIGlzIG5vdCB2YWxpZCBhcyBhIFVSSSBvciBVUkkgcmVmZXJlbmNlLgogICAqLwogIHN0YXRpYyBVcmkgdHJ5UGFyc2UoU3RyaW5nIHVyaSwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICAvLyBUT0RPOiBPcHRpbWl6ZSB0byBhdm9pZCB0aHJvd2luZy1hbmQtcmVjYXRjaGluZy4KICAgIHRyeSB7CiAgICAgIHJldHVybiBwYXJzZSh1cmksIHN0YXJ0LCBlbmQpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8qKgogICAqIEVuY29kZSB0aGUgc3RyaW5nIFtjb21wb25lbnRdIHVzaW5nIHBlcmNlbnQtZW5jb2RpbmcgdG8gbWFrZSBpdAogICAqIHNhZmUgZm9yIGxpdGVyYWwgdXNlIGFzIGEgVVJJIGNvbXBvbmVudC4KICAgKgogICAqIEFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzLCBkaWdpdHMgYW5kCiAgICogdGhlIGNoYXJhY3RlcnMgYC1fLiF+KicoKWAgYXJlIHBlcmNlbnQtZW5jb2RlZC4gVGhpcyBpcyB0aGUKICAgKiBzZXQgb2YgY2hhcmFjdGVycyBzcGVjaWZpZWQgaW4gUkZDIDIzOTYgYW5kIHRoZSB3aGljaCBpcwogICAqIHNwZWNpZmllZCBmb3IgdGhlIGVuY29kZVVyaUNvbXBvbmVudCBpbiBFQ01BLTI2MiB2ZXJzaW9uIDUuMS4KICAgKgogICAqIFdoZW4gbWFudWFsbHkgZW5jb2RpbmcgcGF0aCBzZWdtZW50cyBvciBxdWVyeSBjb21wb25lbnRzIHJlbWVtYmVyCiAgICogdG8gZW5jb2RlIGVhY2ggcGFydCBzZXBhcmF0ZWx5IGJlZm9yZSBidWlsZGluZyB0aGUgcGF0aCBvciBxdWVyeQogICAqIHN0cmluZy4KICAgKgogICAqIEZvciBlbmNvZGluZyB0aGUgcXVlcnkgcGFydCBjb25zaWRlciB1c2luZwogICAqIFtlbmNvZGVRdWVyeUNvbXBvbmVudF0uCiAgICoKICAgKiBUbyBhdm9pZCB0aGUgbmVlZCBmb3IgZXhwbGljaXRseSBlbmNvZGluZyB1c2UgdGhlIFtwYXRoU2VnbWVudHNdCiAgICogYW5kIFtxdWVyeVBhcmFtZXRlcnNdIG9wdGlvbmFsIG5hbWVkIGFyZ3VtZW50cyB3aGVuIGNvbnN0cnVjdGluZwogICAqIGEgW1VyaV0uCiAgICovCiAgc3RhdGljIFN0cmluZyBlbmNvZGVDb21wb25lbnQoU3RyaW5nIGNvbXBvbmVudCkgewogICAgcmV0dXJuIF9VcmkuX3VyaUVuY29kZShfVXJpLl91bnJlc2VydmVkMjM5NlRhYmxlLCBjb21wb25lbnQsIHV0ZjgsIGZhbHNlKTsKICB9CgogIC8qKgogICAqIEVuY29kZSB0aGUgc3RyaW5nIFtjb21wb25lbnRdIGFjY29yZGluZyB0byB0aGUgSFRNTCA0LjAxIHJ1bGVzCiAgICogZm9yIGVuY29kaW5nIHRoZSBwb3N0aW5nIG9mIGEgSFRNTCBmb3JtIGFzIGEgcXVlcnkgc3RyaW5nCiAgICogY29tcG9uZW50LgogICAqCiAgICogRW5jb2RlIHRoZSBzdHJpbmcgW2NvbXBvbmVudF0gYWNjb3JkaW5nIHRvIHRoZSBIVE1MIDQuMDEgcnVsZXMKICAgKiBmb3IgZW5jb2RpbmcgdGhlIHBvc3Rpbmcgb2YgYSBIVE1MIGZvcm0gYXMgYSBxdWVyeSBzdHJpbmcKICAgKiBjb21wb25lbnQuCgogICAqIFRoZSBjb21wb25lbnQgaXMgZmlyc3QgZW5jb2RlZCB0byBieXRlcyB1c2luZyBbZW5jb2RpbmddLgogICAqIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBbdXRmOF0gZW5jb2RpbmcsIHdoaWNoIHByZXNlcnZlcyBhbGwKICAgKiB0aGUgY2hhcmFjdGVycyB0aGF0IGRvbid0IG5lZWQgZW5jb2RpbmcuCgogICAqIFRoZW4gdGhlIHJlc3VsdGluZyBieXRlcyBhcmUgInBlcmNlbnQtZW5jb2RlZCIuIFRoaXMgdHJhbnNmb3JtcwogICAqIHNwYWNlcyAoVSswMDIwKSB0byBhIHBsdXMgc2lnbiAoJysnKSBhbmQgYWxsIGJ5dGVzIHRoYXQgYXJlIG5vdAogICAqIHRoZSBBU0NJSSBkZWNpbWFsIGRpZ2l0cywgbGV0dGVycyBvciBvbmUgb2YgJy0uX34nIGFyZSB3cml0dGVuIGFzCiAgICogYSBwZXJjZW50IHNpZ24gJyUnIGZvbGxvd2VkIGJ5IHRoZSB0d28tZGlnaXQgaGV4YWRlY2ltYWwKICAgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYnl0ZS4KCiAgICogTm90ZSB0aGF0IHRoZSBzZXQgb2YgY2hhcmFjdGVycyB3aGljaCBhcmUgcGVyY2VudC1lbmNvZGVkIGlzIGEKICAgKiBzdXBlcnNldCBvZiB3aGF0IEhUTUwgNC4wMSByZXF1aXJlcywgc2luY2UgaXQgcmVmZXJzIHRvIFJGQyAxNzM4CiAgICogZm9yIHJlc2VydmVkIGNoYXJhY3RlcnMuCiAgICoKICAgKiBXaGVuIG1hbnVhbGx5IGVuY29kaW5nIHF1ZXJ5IGNvbXBvbmVudHMgcmVtZW1iZXIgdG8gZW5jb2RlIGVhY2gKICAgKiBwYXJ0IHNlcGFyYXRlbHkgYmVmb3JlIGJ1aWxkaW5nIHRoZSBxdWVyeSBzdHJpbmcuCiAgICoKICAgKiBUbyBhdm9pZCB0aGUgbmVlZCBmb3IgZXhwbGljaXRseSBlbmNvZGluZyB0aGUgcXVlcnkgdXNlIHRoZQogICAqIFtxdWVyeVBhcmFtZXRlcnNdIG9wdGlvbmFsIG5hbWVkIGFyZ3VtZW50cyB3aGVuIGNvbnN0cnVjdGluZyBhCiAgICogW1VyaV0uCiAgICoKICAgKiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuNC4yIGZvciBtb3JlCiAgICogZGV0YWlscy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGVuY29kZVF1ZXJ5Q29tcG9uZW50KFN0cmluZyBjb21wb25lbnQsCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZyA9IHV0Zjh9KSB7CiAgICByZXR1cm4gX1VyaS5fdXJpRW5jb2RlKF9VcmkuX3VucmVzZXJ2ZWRUYWJsZSwgY29tcG9uZW50LCBlbmNvZGluZywgdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBEZWNvZGVzIHRoZSBwZXJjZW50LWVuY29kaW5nIGluIFtlbmNvZGVkQ29tcG9uZW50XS4KICAgKgogICAqIE5vdGUgdGhhdCBkZWNvZGluZyBhIFVSSSBjb21wb25lbnQgbWlnaHQgY2hhbmdlIGl0cyBtZWFuaW5nIGFzCiAgICogc29tZSBvZiB0aGUgZGVjb2RlZCBjaGFyYWN0ZXJzIGNvdWxkIGJlIGNoYXJhY3RlcnMgd2l0aCBhcmUKICAgKiBkZWxpbWl0ZXJzIGZvciBhIGdpdmVuIFVSSSBjb21wb25lbnQgdHlwZS4gQWx3YXlzIHNwbGl0IGEgVVJJCiAgICogY29tcG9uZW50IHVzaW5nIHRoZSBkZWxpbWl0ZXJzIGZvciB0aGUgY29tcG9uZW50IGJlZm9yZSBkZWNvZGluZwogICAqIHRoZSBpbmRpdmlkdWFsIHBhcnRzLgogICAqCiAgICogRm9yIGhhbmRsaW5nIHRoZSBbcGF0aF0gYW5kIFtxdWVyeV0gY29tcG9uZW50cyBjb25zaWRlciB1c2luZwogICAqIFtwYXRoU2VnbWVudHNdIGFuZCBbcXVlcnlQYXJhbWV0ZXJzXSB0byBnZXQgdGhlIHNlcGFyYXRlZCBhbmQKICAgKiBkZWNvZGVkIGNvbXBvbmVudC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGRlY29kZUNvbXBvbmVudChTdHJpbmcgZW5jb2RlZENvbXBvbmVudCkgewogICAgcmV0dXJuIF9VcmkuX3VyaURlY29kZSgKICAgICAgICBlbmNvZGVkQ29tcG9uZW50LCAwLCBlbmNvZGVkQ29tcG9uZW50Lmxlbmd0aCwgdXRmOCwgZmFsc2UpOwogIH0KCiAgLyoqCiAgICogRGVjb2RlcyB0aGUgcGVyY2VudC1lbmNvZGluZyBpbiBbZW5jb2RlZENvbXBvbmVudF0sIGNvbnZlcnRpbmcKICAgKiBwbHVzZXMgdG8gc3BhY2VzLgogICAqCiAgICogSXQgd2lsbCBjcmVhdGUgYSBieXRlLWxpc3Qgb2YgdGhlIGRlY29kZWQgY2hhcmFjdGVycywgYW5kIHRoZW4gdXNlCiAgICogW2VuY29kaW5nXSB0byBkZWNvZGUgdGhlIGJ5dGUtbGlzdCB0byBhIFN0cmluZy4gVGhlIGRlZmF1bHQgZW5jb2RpbmcgaXMKICAgKiBVVEYtOC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGRlY29kZVF1ZXJ5Q29tcG9uZW50KFN0cmluZyBlbmNvZGVkQ29tcG9uZW50LAogICAgICB7RW5jb2RpbmcgZW5jb2RpbmcgPSB1dGY4fSkgewogICAgcmV0dXJuIF9VcmkuX3VyaURlY29kZSgKICAgICAgICBlbmNvZGVkQ29tcG9uZW50LCAwLCBlbmNvZGVkQ29tcG9uZW50Lmxlbmd0aCwgZW5jb2RpbmcsIHRydWUpOwogIH0KCiAgLyoqCiAgICogRW5jb2RlIHRoZSBzdHJpbmcgW3VyaV0gdXNpbmcgcGVyY2VudC1lbmNvZGluZyB0byBtYWtlIGl0CiAgICogc2FmZSBmb3IgbGl0ZXJhbCB1c2UgYXMgYSBmdWxsIFVSSS4KICAgKgogICAqIEFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzLCBkaWdpdHMgYW5kCiAgICogdGhlIGNoYXJhY3RlcnMgYCEjJCYnKCkqKywtLi86Oz0/QF9+YCBhcmUgcGVyY2VudC1lbmNvZGVkLiBUaGlzCiAgICogaXMgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHNwZWNpZmllZCBpbiBpbiBFQ01BLTI2MiB2ZXJzaW9uIDUuMSBmb3IKICAgKiB0aGUgZW5jb2RlVVJJIGZ1bmN0aW9uIC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGVuY29kZUZ1bGwoU3RyaW5nIHVyaSkgewogICAgcmV0dXJuIF9VcmkuX3VyaUVuY29kZShfVXJpLl9lbmNvZGVGdWxsVGFibGUsIHVyaSwgdXRmOCwgZmFsc2UpOwogIH0KCiAgLyoqCiAgICogRGVjb2RlcyB0aGUgcGVyY2VudC1lbmNvZGluZyBpbiBbdXJpXS4KICAgKgogICAqIE5vdGUgdGhhdCBkZWNvZGluZyBhIGZ1bGwgVVJJIG1pZ2h0IGNoYW5nZSBpdHMgbWVhbmluZyBhcyBzb21lIG9mCiAgICogdGhlIGRlY29kZWQgY2hhcmFjdGVycyBjb3VsZCBiZSByZXNlcnZlZCBjaGFyYWN0ZXJzLiBJbiBtb3N0CiAgICogY2FzZXMgYW4gZW5jb2RlZCBVUkkgc2hvdWxkIGJlIHBhcnNlZCBpbnRvIGNvbXBvbmVudHMgdXNpbmcKICAgKiBbVXJpLnBhcnNlXSBiZWZvcmUgZGVjb2RpbmcgdGhlIHNlcGFyYXRlIGNvbXBvbmVudHMuCiAgICovCiAgc3RhdGljIFN0cmluZyBkZWNvZGVGdWxsKFN0cmluZyB1cmkpIHsKICAgIHJldHVybiBfVXJpLl91cmlEZWNvZGUodXJpLCAwLCB1cmkubGVuZ3RoLCB1dGY4LCBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBbcXVlcnldIHNwbGl0IGludG8gYSBtYXAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcwogICAqIHNwZWNpZmllZCBmb3IgRk9STSBwb3N0IGluIHRoZSBbSFRNTCA0LjAxIHNwZWNpZmljYXRpb24gc2VjdGlvbgogICAqIDE3LjEzLjRdKGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjEzLjQgIkhUTUwgNC4wMSBzZWN0aW9uIDE3LjEzLjQiKS4KICAgKiBFYWNoIGtleSBhbmQgdmFsdWUgaW4gdGhlIHJldHVybmVkIG1hcCBoYXMgYmVlbiBkZWNvZGVkLiBJZiB0aGUgW3F1ZXJ5XQogICAqIGlzIHRoZSBlbXB0eSBzdHJpbmcgYW4gZW1wdHkgbWFwIGlzIHJldHVybmVkLgogICAqCiAgICogS2V5cyBpbiB0aGUgcXVlcnkgc3RyaW5nIHRoYXQgaGF2ZSBubyB2YWx1ZSBhcmUgbWFwcGVkIHRvIHRoZQogICAqIGVtcHR5IHN0cmluZy4KICAgKgogICAqIEVhY2ggcXVlcnkgY29tcG9uZW50IHdpbGwgYmUgZGVjb2RlZCB1c2luZyBbZW5jb2RpbmddLiBUaGUgZGVmYXVsdCBlbmNvZGluZwogICAqIGlzIFVURi04LgogICAqLwogIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IHNwbGl0UXVlcnlTdHJpbmcoU3RyaW5nIHF1ZXJ5LAogICAgICB7RW5jb2RpbmcgZW5jb2RpbmcgPSB1dGY4fSkgewogICAgcmV0dXJuIHF1ZXJ5LnNwbGl0KCImIikuZm9sZCh7fSwgKG1hcCwgZWxlbWVudCkgewogICAgICBpbnQgaW5kZXggPSBlbGVtZW50LmluZGV4T2YoIj0iKTsKICAgICAgaWYgKGluZGV4ID09IC0xKSB7CiAgICAgICAgaWYgKGVsZW1lbnQgIT0gIiIpIHsKICAgICAgICAgIG1hcFtkZWNvZGVRdWVyeUNvbXBvbmVudChlbGVtZW50LCBlbmNvZGluZzogZW5jb2RpbmcpXSA9ICIiOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpbmRleCAhPSAwKSB7CiAgICAgICAgdmFyIGtleSA9IGVsZW1lbnQuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN1YnN0cmluZyhpbmRleCArIDEpOwogICAgICAgIG1hcFtkZWNvZGVRdWVyeUNvbXBvbmVudChrZXksIGVuY29kaW5nOiBlbmNvZGluZyldID0KICAgICAgICAgICAgZGVjb2RlUXVlcnlDb21wb25lbnQodmFsdWUsIGVuY29kaW5nOiBlbmNvZGluZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG1hcDsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogUGFyc2UgdGhlIFtob3N0XSBhcyBhbiBJUCB2ZXJzaW9uIDQgKElQdjQpIGFkZHJlc3MsIHJldHVybmluZyB0aGUgYWRkcmVzcwogICAqIGFzIGEgbGlzdCBvZiA0IGJ5dGVzIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAoYmlnIGVuZGlhbikuCiAgICoKICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiBbaG9zdF0gaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzCiAgICogcmVwcmVzZW50YXRpb24uCiAgICovCiAgc3RhdGljIExpc3Q8aW50PiBwYXJzZUlQdjRBZGRyZXNzKFN0cmluZyBob3N0KSA9PgogICAgICBfcGFyc2VJUHY0QWRkcmVzcyhob3N0LCAwLCBob3N0Lmxlbmd0aCk7CgogIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbcGFyc2VJUHY0QWRkcmVzc10gdGhhdCBjYW4gd29yayBvbiBhIHN1YnN0cmluZy4KICBzdGF0aWMgTGlzdDxpbnQ+IF9wYXJzZUlQdjRBZGRyZXNzKFN0cmluZyBob3N0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIHZvaWQgZXJyb3IoU3RyaW5nIG1zZywgaW50IHBvc2l0aW9uKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbignSWxsZWdhbCBJUHY0IGFkZHJlc3MsICRtc2cnLCBob3N0LCBwb3NpdGlvbik7CiAgICB9CgogICAgdmFyIHJlc3VsdCA9IFVpbnQ4TGlzdCg0KTsKICAgIGludCBwYXJ0SW5kZXggPSAwOwogICAgaW50IHBhcnRTdGFydCA9IHN0YXJ0OwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaW50IGNoYXIgPSBob3N0LmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyICE9IF9ET1QpIHsKICAgICAgICBpZiAoY2hhciBeIDB4MzAgPiA5KSB7CiAgICAgICAgICAvLyBGYWlsIG9uIGEgbm9uLWRpZ2l0IGNoYXJhY3Rlci4KICAgICAgICAgIGVycm9yKCJpbnZhbGlkIGNoYXJhY3RlciIsIGkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAocGFydEluZGV4ID09IDMpIHsKICAgICAgICAgIGVycm9yKCdJUHY0IGFkZHJlc3Mgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSA0IHBhcnRzJywgaSk7CiAgICAgICAgfQogICAgICAgIGludCBwYXJ0ID0gaW50LnBhcnNlKGhvc3Quc3Vic3RyaW5nKHBhcnRTdGFydCwgaSkpOwogICAgICAgIGlmIChwYXJ0ID4gMjU1KSB7CiAgICAgICAgICBlcnJvcigiZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLjI1NSIsIHBhcnRTdGFydCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdFtwYXJ0SW5kZXgrK10gPSBwYXJ0OwogICAgICAgIHBhcnRTdGFydCA9IGkgKyAxOwogICAgICB9CiAgICB9CgogICAgaWYgKHBhcnRJbmRleCAhPSAzKSB7CiAgICAgIGVycm9yKCdJUHY0IGFkZHJlc3Mgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSA0IHBhcnRzJywgZW5kKTsKICAgIH0KCiAgICBpbnQgcGFydCA9IGludC5wYXJzZShob3N0LnN1YnN0cmluZyhwYXJ0U3RhcnQsIGVuZCkpOwogICAgaWYgKHBhcnQgPiAyNTUpIHsKICAgICAgZXJyb3IoImVhY2ggcGFydCBtdXN0IGJlIGluIHRoZSByYW5nZSAwLi4yNTUiLCBwYXJ0U3RhcnQpOwogICAgfQogICAgcmVzdWx0W3BhcnRJbmRleF0gPSBwYXJ0OwoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBQYXJzZSB0aGUgW2hvc3RdIGFzIGFuIElQIHZlcnNpb24gNiAoSVB2NikgYWRkcmVzcywgcmV0dXJuaW5nIHRoZSBhZGRyZXNzCiAgICogYXMgYSBsaXN0IG9mIDE2IGJ5dGVzIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAoYmlnIGVuZGlhbikuCiAgICoKICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiBbaG9zdF0gaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzCiAgICogcmVwcmVzZW50YXRpb24uCiAgICoKICAgKiBBY3RzIG9uIHRoZSBzdWJzdHJpbmcgZnJvbSBbc3RhcnRdIHRvIFtlbmRdLiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdAogICAqIGRlZmF1bHRzIG90IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KICAgKgogICAqIFNvbWUgZXhhbXBsZXMgb2YgSVB2NiBhZGRyZXNzZXM6CiAgICogICogYDo6MWAKICAgKiAgKiBgRkVEQzpCQTk4Ojc2NTQ6MzIxMDpGRURDOkJBOTg6NzY1NDozMjEwYAogICAqICAqIGAzZmZlOjJhMDA6MTAwOjcwMzE6OjFgCiAgICogICogYDo6RkZGRjoxMjkuMTQ0LjUyLjM4YAogICAqICAqIGAyMDEwOjgzNkI6NDE3OTo6ODM2Qjo0MTc5YAogICAqLwogIHN0YXRpYyBMaXN0PGludD4gcGFyc2VJUHY2QWRkcmVzcyhTdHJpbmcgaG9zdCwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBlbmQgPz89IGhvc3QubGVuZ3RoOwogICAgLy8gQW4gSVB2NiBhZGRyZXNzIGNvbnNpc3RzIG9mIGV4YWN0bHkgOCBwYXJ0cyBvZiAxLTQgaGV4IGRpZ2l0cywgc2VwYXJhdGVkCiAgICAvLyBieSBgOmAncywgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnM6CiAgICAvLwogICAgLy8gIC0gT25lIChhbmQgb25seSBvbmUpIHdpbGRjYXJkIChgOjpgKSBtYXkgYmUgcHJlc2VudCwgcmVwcmVzZW50aW5nIGEgZmlsbAogICAgLy8gICAgb2YgMCdzLiBUaGUgSVB2NiBgOjpgIGlzIHRodXMgMTYgYnl0ZXMgb2YgYDBgLgogICAgLy8gIC0gVGhlIGxhc3QgdHdvIHBhcnRzIG1heSBiZSByZXBsYWNlZCBieSBhbiBJUHY0ICJkb3R0ZWQtcXVhZCIgYWRkcmVzcy4KCiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHJlcG9ydGluZyBhIGJhZGx5IGZvcm1hdHRlZCBJUHY2IGFkZHJlc3MuCiAgICB2b2lkIGVycm9yKFN0cmluZyBtc2csIFtwb3NpdGlvbl0pIHsKICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCdJbGxlZ2FsIElQdjYgYWRkcmVzcywgJG1zZycsIGhvc3QsIHBvc2l0aW9uKTsKICAgIH0KCiAgICAvLyBQYXJzZSBhIGhleCBibG9jay4KICAgIGludCBwYXJzZUhleChpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgICAgaWYgKGVuZCAtIHN0YXJ0ID4gNCkgewogICAgICAgIGVycm9yKCdhbiBJUHY2IHBhcnQgY2FuIG9ubHkgY29udGFpbiBhIG1heGltdW0gb2YgNCBoZXggZGlnaXRzJywgc3RhcnQpOwogICAgICB9CiAgICAgIGludCB2YWx1ZSA9IGludC5wYXJzZShob3N0LnN1YnN0cmluZyhzdGFydCwgZW5kKSwgcmFkaXg6IDE2KTsKICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDB4RkZGRikgewogICAgICAgIGVycm9yKCdlYWNoIHBhcnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgYDB4MC4uMHhGRkZGYCcsIHN0YXJ0KTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgaWYgKGhvc3QubGVuZ3RoIDwgMikgZXJyb3IoJ2FkZHJlc3MgaXMgdG9vIHNob3J0Jyk7CiAgICBMaXN0PGludD4gcGFydHMgPSBbXTsKICAgIGJvb2wgd2lsZGNhcmRTZWVuID0gZmFsc2U7CiAgICAvLyBTZXQgaWYgc2VlaW5nIGEgIi4iLCBzdWdnZXN0aW5nIHRoYXQgdGhlcmUgaXMgYW4gSVB2NCBhZGRyZXNzLgogICAgYm9vbCBzZWVuRG90ID0gZmFsc2U7CiAgICBpbnQgcGFydFN0YXJ0ID0gc3RhcnQ7CiAgICAvLyBQYXJzZSBhbGwgcGFydHMsIGV4Y2VwdCBhIHBvdGVudGlhbCBsYXN0IG9uZS4KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGludCBjaGFyID0gaG9zdC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciA9PSBfQ09MT04pIHsKICAgICAgICBpZiAoaSA9PSBzdGFydCkgewogICAgICAgICAgLy8gSWYgd2Ugc2VlIGEgYDpgIGluIHRoZSBiZWdpbm5pbmcsIGV4cGVjdCB3aWxkY2FyZC4KICAgICAgICAgIGkrKzsKICAgICAgICAgIGlmIChob3N0LmNvZGVVbml0QXQoaSkgIT0gX0NPTE9OKSB7CiAgICAgICAgICAgIGVycm9yKCdpbnZhbGlkIHN0YXJ0IGNvbG9uLicsIGkpOwogICAgICAgICAgfQogICAgICAgICAgcGFydFN0YXJ0ID0gaTsKICAgICAgICB9CiAgICAgICAgaWYgKGkgPT0gcGFydFN0YXJ0KSB7CiAgICAgICAgICAvLyBXaWxkY2FyZC4gV2Ugb25seSBhbGxvdyBvbmUuCiAgICAgICAgICBpZiAod2lsZGNhcmRTZWVuKSB7CiAgICAgICAgICAgIGVycm9yKCdvbmx5IG9uZSB3aWxkY2FyZCBgOjpgIGlzIGFsbG93ZWQnLCBpKTsKICAgICAgICAgIH0KICAgICAgICAgIHdpbGRjYXJkU2VlbiA9IHRydWU7CiAgICAgICAgICBwYXJ0cy5hZGQoLTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBGb3VuZCBhIHNpbmdsZSBjb2xvbi4gUGFyc2UgW3BhcnRTdGFydC4uaV0gYXMgYSBoZXggZW50cnkuCiAgICAgICAgICBwYXJ0cy5hZGQocGFyc2VIZXgocGFydFN0YXJ0LCBpKSk7CiAgICAgICAgfQogICAgICAgIHBhcnRTdGFydCA9IGkgKyAxOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gX0RPVCkgewogICAgICAgIHNlZW5Eb3QgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAocGFydHMubGVuZ3RoID09IDApIGVycm9yKCd0b28gZmV3IHBhcnRzJyk7CiAgICBib29sIGF0RW5kID0gKHBhcnRTdGFydCA9PSBlbmQpOwogICAgYm9vbCBpc0xhc3RXaWxkY2FyZCA9IChwYXJ0cy5sYXN0ID09IC0xKTsKICAgIGlmIChhdEVuZCAmJiAhaXNMYXN0V2lsZGNhcmQpIHsKICAgICAgZXJyb3IoJ2V4cGVjdGVkIGEgcGFydCBhZnRlciBsYXN0IGA6YCcsIGVuZCk7CiAgICB9CiAgICBpZiAoIWF0RW5kKSB7CiAgICAgIGlmICghc2VlbkRvdCkgewogICAgICAgIHBhcnRzLmFkZChwYXJzZUhleChwYXJ0U3RhcnQsIGVuZCkpOwogICAgICB9IGVsc2UgewogICAgICAgIExpc3Q8aW50PiBsYXN0ID0gX3BhcnNlSVB2NEFkZHJlc3MoaG9zdCwgcGFydFN0YXJ0LCBlbmQpOwogICAgICAgIHBhcnRzLmFkZChsYXN0WzBdIDw8IDggfCBsYXN0WzFdKTsKICAgICAgICBwYXJ0cy5hZGQobGFzdFsyXSA8PCA4IHwgbGFzdFszXSk7CiAgICAgIH0KICAgIH0KICAgIGlmICh3aWxkY2FyZFNlZW4pIHsKICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDcpIHsKICAgICAgICBlcnJvcignYW4gYWRkcmVzcyB3aXRoIGEgd2lsZGNhcmQgbXVzdCBoYXZlIGxlc3MgdGhhbiA3IHBhcnRzJyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFydHMubGVuZ3RoICE9IDgpIHsKICAgICAgZXJyb3IoJ2FuIGFkZHJlc3Mgd2l0aG91dCBhIHdpbGRjYXJkIG11c3QgY29udGFpbiBleGFjdGx5IDggcGFydHMnKTsKICAgIH0KICAgIExpc3Q8aW50PiBieXRlcyA9IFVpbnQ4TGlzdCgxNik7CiAgICBmb3IgKGludCBpID0gMCwgaW5kZXggPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHsKICAgICAgaW50IHZhbHVlID0gcGFydHNbaV07CiAgICAgIGlmICh2YWx1ZSA9PSAtMSkgewogICAgICAgIGludCB3aWxkQ2FyZExlbmd0aCA9IDkgLSBwYXJ0cy5sZW5ndGg7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3aWxkQ2FyZExlbmd0aDsgaisrKSB7CiAgICAgICAgICBieXRlc1tpbmRleF0gPSAwOwogICAgICAgICAgYnl0ZXNbaW5kZXggKyAxXSA9IDA7CiAgICAgICAgICBpbmRleCArPSAyOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBieXRlc1tpbmRleF0gPSB2YWx1ZSA+PiA4OwogICAgICAgIGJ5dGVzW2luZGV4ICsgMV0gPSB2YWx1ZSAmIDB4ZmY7CiAgICAgICAgaW5kZXggKz0gMjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ5dGVzOwogIH0KfQoKY2xhc3MgX1VyaSBpbXBsZW1lbnRzIFVyaSB7CiAgLy8gV2UgcmVwcmVzZW50IHRoZSBtaXNzaW5nIHNjaGVtZSBhcyBhbiBlbXB0eSBzdHJpbmcuCiAgLy8gQSB2YWxpZCBzY2hlbWUgY2Fubm90IGJlIGVtcHR5LgogIGZpbmFsIFN0cmluZyBzY2hlbWU7CgogIC8qKgogICAqIFRoZSB1c2VyLWluZm8gcGFydCBvZiB0aGUgYXV0aG9yaXR5LgogICAqCiAgICogRG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBlbXB0eSB1c2VyLWluZm8gYW5kIGFuIGFic2VudCBvbmUuCiAgICogVGhlIHZhbHVlIGlzIGFsd2F5cyBub24tbnVsbC4KICAgKiBJcyBjb25zaWRlcmVkIGFic2VudCBpZiBbX2hvc3RdIGlzIGBudWxsYC4KICAgKi8KICBmaW5hbCBTdHJpbmcgX3VzZXJJbmZvOwoKICAvKioKICAgKiBUaGUgaG9zdCBuYW1lIG9mIHRoZSBVUkkuCiAgICoKICAgKiBTZXQgdG8gYG51bGxgIGlmIHRoZXJlIGlzIG5vIGF1dGhvcml0eSBpbiB0aGUgVVJJLgogICAqIFRoZSBob3N0IG5hbWUgaXMgdGhlIG9ubHkgbWFuZGF0b3J5IHBhcnQgb2YgYW4gYXV0aG9yaXR5LCBzbyB3ZSB1c2UKICAgKiBpdCB0byBtYXJrIHdoZXRoZXIgYW4gYXV0aG9yaXR5IHBhcnQgd2FzIHByZXNlbnQgb3Igbm90LgogICAqLwogIGZpbmFsIFN0cmluZyBfaG9zdDsKCiAgLyoqCiAgICogVGhlIHBvcnQgbnVtYmVyIHBhcnQgb2YgdGhlIGF1dGhvcml0eS4KICAgKgogICAqIFRoZSBwb3J0LiBTZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBwb3J0LiBOb3JtYWxpemVkIHRvIG51bGwgaWYKICAgKiB0aGUgcG9ydCBpcyB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgc2NoZW1lLgogICAqLwogIGludCBfcG9ydDsKCiAgLyoqCiAgICogVGhlIHBhdGggb2YgdGhlIFVSSS4KICAgKgogICAqIEFsd2F5cyBub24tbnVsbC4KICAgKi8KICBmaW5hbCBTdHJpbmcgcGF0aDsKCiAgLy8gVGhlIHF1ZXJ5IGNvbnRlbnQsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gcXVlcnkuCiAgZmluYWwgU3RyaW5nIF9xdWVyeTsKCiAgLy8gVGhlIGZyYWdtZW50IGNvbnRlbnQsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gZnJhZ21lbnQuCiAgZmluYWwgU3RyaW5nIF9mcmFnbWVudDsKCiAgLyoqCiAgICogQ2FjaGUgdGhlIGNvbXB1dGVkIHJldHVybiB2YWx1ZSBvZiBbcGF0aFNlZ21lbnRzXS4KICAgKi8KICBMaXN0PFN0cmluZz4gX3BhdGhTZWdtZW50czsKCiAgLyoqCiAgICogQ2FjaGUgb2YgdGhlIGZ1bGwgbm9ybWFsaXplZCB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkkuCiAgICovCiAgU3RyaW5nIF90ZXh0OwoKICAvKioKICAgKiBDYWNoZSBvZiB0aGUgaGFzaENvZGUgb2YgW190ZXh0XS4KICAgKgogICAqIElzIG51bGwgdW50aWwgY29tcHV0ZWQuCiAgICovCiAgaW50IF9oYXNoQ29kZUNhY2hlOwoKICAvKioKICAgKiBDYWNoZSB0aGUgY29tcHV0ZWQgcmV0dXJuIHZhbHVlIG9mIFtxdWVyeVBhcmFtZXRlcnNdLgogICAqLwogIE1hcDxTdHJpbmcsIFN0cmluZz4gX3F1ZXJ5UGFyYW1ldGVyczsKICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IF9xdWVyeVBhcmFtZXRlckxpc3RzOwoKICAvLy8gSW50ZXJuYWwgbm9uLXZlcmlmeWluZyBjb25zdHJ1Y3Rvci4gT25seSBjYWxsIHdpdGggdmFsaWRhdGVkIGFyZ3VtZW50cy4KICAvLy8KICAvLy8gVGhlIGNvbXBvbmVudHMgbXVzdCBiZSBwcm9wZXJseSBub3JtYWxpemVkLgogIC8vLwogIC8vLyBVc2UgYG51bGxgIGZvciBbX2hvc3RdIGlmIHRoZXJlIGlzIG5vIGF1dGhvcml0eS4gSW4gdGhhdCBjYXNlLCBhbHdheXMKICAvLy8gcGFzcyBgbnVsbGAgZm9yIFtfcG9ydF0gYW5kIFtfdXNlckluZm9dIGFzIHdlbGwuCiAgLy8vCiAgLy8vIFVzZSBgbnVsbGAgZm9yIFtfcG9ydF0sIFtfdXNlckluZm9dLCBbX3F1ZXJ5XSBhbmQgW19mcmFnbWVudF0gaWYgdGhlcmUgaXMKICAvLy8gY29tcG9uZW50IG9mIHRoYXQgdHlwZS4KICAvLy8KICAvLy8gVGhlIFtwYXRoXSBhbmQgW3NjaGVtZV0gYXJlIG5ldmVyIGVtcHR5LgogIF9VcmkuX2ludGVybmFsKHRoaXMuc2NoZW1lLCB0aGlzLl91c2VySW5mbywgdGhpcy5faG9zdCwgdGhpcy5fcG9ydCwgdGhpcy5wYXRoLAogICAgICB0aGlzLl9xdWVyeSwgdGhpcy5fZnJhZ21lbnQpOwoKICAvLy8gQ3JlYXRlIGEgW19VcmldIGZyb20gcGFydHMgb2YgW3VyaV0uCiAgLy8vCiAgLy8vIFRoZSBwYXJhbWV0ZXJzIHNwZWNpZnkgdGhlIHN0YXJ0L2VuZCBvZiBwYXJ0aWN1bGFyIGNvbXBvbmVudHMgb2YgdGhlIFVSSS4KICAvLy8gVGhlIFtzY2hlbWVdIG1heSBjb250YWluIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG5vcm1hbGl6ZWQgc2NoZW1lCiAgLy8vIGNvbXBvbmVudCBpZiBvbmUgaGFzIGFscmVhZHkgYmVlbiBkaXNjb3ZlcmVkLgogIGZhY3RvcnkgX1VyaS5ub3RTaW1wbGUoCiAgICAgIFN0cmluZyB1cmksCiAgICAgIGludCBzdGFydCwKICAgICAgaW50IGVuZCwKICAgICAgaW50IHNjaGVtZUVuZCwKICAgICAgaW50IGhvc3RTdGFydCwKICAgICAgaW50IHBvcnRTdGFydCwKICAgICAgaW50IHBhdGhTdGFydCwKICAgICAgaW50IHF1ZXJ5U3RhcnQsCiAgICAgIGludCBmcmFnbWVudFN0YXJ0LAogICAgICBTdHJpbmcgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lID09IG51bGwpIHsKICAgICAgc2NoZW1lID0gIiI7CiAgICAgIGlmIChzY2hlbWVFbmQgPiBzdGFydCkgewogICAgICAgIHNjaGVtZSA9IF9tYWtlU2NoZW1lKHVyaSwgc3RhcnQsIHNjaGVtZUVuZCk7CiAgICAgIH0gZWxzZSBpZiAoc2NoZW1lRW5kID09IHN0YXJ0KSB7CiAgICAgICAgX2ZhaWwodXJpLCBzdGFydCwgIkludmFsaWQgZW1wdHkgc2NoZW1lIik7CiAgICAgIH0KICAgIH0KICAgIFN0cmluZyB1c2VySW5mbyA9ICIiOwogICAgU3RyaW5nIGhvc3Q7CiAgICBpbnQgcG9ydDsKICAgIGlmIChob3N0U3RhcnQgPiBzdGFydCkgewogICAgICBpbnQgdXNlckluZm9TdGFydCA9IHNjaGVtZUVuZCArIDM7CiAgICAgIGlmICh1c2VySW5mb1N0YXJ0IDwgaG9zdFN0YXJ0KSB7CiAgICAgICAgdXNlckluZm8gPSBfbWFrZVVzZXJJbmZvKHVyaSwgdXNlckluZm9TdGFydCwgaG9zdFN0YXJ0IC0gMSk7CiAgICAgIH0KICAgICAgaG9zdCA9IF9tYWtlSG9zdCh1cmksIGhvc3RTdGFydCwgcG9ydFN0YXJ0LCBmYWxzZSk7CiAgICAgIGlmIChwb3J0U3RhcnQgKyAxIDwgcGF0aFN0YXJ0KSB7CiAgICAgICAgLy8gU2hvdWxkIHRocm93IGJlY2F1c2UgaW52YWxpZC4KICAgICAgICBwb3J0ID0gaW50LnBhcnNlKHVyaS5zdWJzdHJpbmcocG9ydFN0YXJ0ICsgMSwgcGF0aFN0YXJ0KSwgb25FcnJvcjogKF8pIHsKICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBwb3J0IiwgdXJpLCBwb3J0U3RhcnQgKyAxKTsKICAgICAgICB9KTsKICAgICAgICBwb3J0ID0gX21ha2VQb3J0KHBvcnQsIHNjaGVtZSk7CiAgICAgIH0KICAgIH0KICAgIFN0cmluZyBwYXRoID0KICAgICAgICBfbWFrZVBhdGgodXJpLCBwYXRoU3RhcnQsIHF1ZXJ5U3RhcnQsIG51bGwsIHNjaGVtZSwgaG9zdCAhPSBudWxsKTsKICAgIFN0cmluZyBxdWVyeTsKICAgIGlmIChxdWVyeVN0YXJ0IDwgZnJhZ21lbnRTdGFydCkgewogICAgICBxdWVyeSA9IF9tYWtlUXVlcnkodXJpLCBxdWVyeVN0YXJ0ICsgMSwgZnJhZ21lbnRTdGFydCwgbnVsbCk7CiAgICB9CiAgICBTdHJpbmcgZnJhZ21lbnQ7CiAgICBpZiAoZnJhZ21lbnRTdGFydCA8IGVuZCkgewogICAgICBmcmFnbWVudCA9IF9tYWtlRnJhZ21lbnQodXJpLCBmcmFnbWVudFN0YXJ0ICsgMSwgZW5kKTsKICAgIH0KICAgIHJldHVybiBfVXJpLl9pbnRlcm5hbChzY2hlbWUsIHVzZXJJbmZvLCBob3N0LCBwb3J0LCBwYXRoLCBxdWVyeSwgZnJhZ21lbnQpOwogIH0KCiAgLy8vIEltcGxlbWVudGF0aW9uIG9mIFtVcmkuVXJpXS4KICBmYWN0b3J5IF9VcmkoCiAgICAgIHtTdHJpbmcgc2NoZW1lLAogICAgICBTdHJpbmcgdXNlckluZm8sCiAgICAgIFN0cmluZyBob3N0LAogICAgICBpbnQgcG9ydCwKICAgICAgU3RyaW5nIHBhdGgsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcGF0aFNlZ21lbnRzLAogICAgICBTdHJpbmcgcXVlcnksCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWMgLypTdHJpbmd8SXRlcmFibGU8U3RyaW5nPiovID4gcXVlcnlQYXJhbWV0ZXJzLAogICAgICBTdHJpbmcgZnJhZ21lbnR9KSB7CiAgICBzY2hlbWUgPSBfbWFrZVNjaGVtZShzY2hlbWUsIDAsIF9zdHJpbmdPck51bGxMZW5ndGgoc2NoZW1lKSk7CiAgICB1c2VySW5mbyA9IF9tYWtlVXNlckluZm8odXNlckluZm8sIDAsIF9zdHJpbmdPck51bGxMZW5ndGgodXNlckluZm8pKTsKICAgIGhvc3QgPSBfbWFrZUhvc3QoaG9zdCwgMCwgX3N0cmluZ09yTnVsbExlbmd0aChob3N0KSwgZmFsc2UpOwogICAgLy8gU3BlY2lhbCBjYXNlIHRoaXMgY29uc3RydWN0b3IgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgogICAgaWYgKHF1ZXJ5ID09ICIiKSBxdWVyeSA9IG51bGw7CiAgICBxdWVyeSA9IF9tYWtlUXVlcnkocXVlcnksIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocXVlcnkpLCBxdWVyeVBhcmFtZXRlcnMpOwogICAgZnJhZ21lbnQgPSBfbWFrZUZyYWdtZW50KGZyYWdtZW50LCAwLCBfc3RyaW5nT3JOdWxsTGVuZ3RoKGZyYWdtZW50KSk7CiAgICBwb3J0ID0gX21ha2VQb3J0KHBvcnQsIHNjaGVtZSk7CiAgICBib29sIGlzRmlsZSA9IChzY2hlbWUgPT0gImZpbGUiKTsKICAgIGlmIChob3N0ID09IG51bGwgJiYgKHVzZXJJbmZvLmlzTm90RW1wdHkgfHwgcG9ydCAhPSBudWxsIHx8IGlzRmlsZSkpIHsKICAgICAgaG9zdCA9ICIiOwogICAgfQogICAgYm9vbCBoYXNBdXRob3JpdHkgPSAoaG9zdCAhPSBudWxsKTsKICAgIHBhdGggPSBfbWFrZVBhdGgoCiAgICAgICAgcGF0aCwgMCwgX3N0cmluZ09yTnVsbExlbmd0aChwYXRoKSwgcGF0aFNlZ21lbnRzLCBzY2hlbWUsIGhhc0F1dGhvcml0eSk7CiAgICBpZiAoc2NoZW1lLmlzRW1wdHkgJiYgaG9zdCA9PSBudWxsICYmICFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICBib29sIGFsbG93U2NoZW1lID0gc2NoZW1lLmlzTm90RW1wdHkgfHwgaG9zdCAhPSBudWxsOwogICAgICBwYXRoID0gX25vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLCBhbGxvd1NjaGVtZSk7CiAgICB9IGVsc2UgewogICAgICBwYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHBhdGgpOwogICAgfQogICAgaWYgKGhvc3QgPT0gbnVsbCAmJiBwYXRoLnN0YXJ0c1dpdGgoIi8vIikpIHsKICAgICAgaG9zdCA9ICIiOwogICAgfQogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKHNjaGVtZSwgdXNlckluZm8sIGhvc3QsIHBvcnQsIHBhdGgsIHF1ZXJ5LCBmcmFnbWVudCk7CiAgfQoKICAvLy8gSW1wbGVtZW50YXRpb24gb2YgW1VyaS5odHRwXS4KICBmYWN0b3J5IF9VcmkuaHR0cChTdHJpbmcgYXV0aG9yaXR5LCBTdHJpbmcgdW5lbmNvZGVkUGF0aCwKICAgICAgW01hcDxTdHJpbmcsIFN0cmluZz4gcXVlcnlQYXJhbWV0ZXJzXSkgewogICAgcmV0dXJuIF9tYWtlSHR0cFVyaSgiaHR0cCIsIGF1dGhvcml0eSwgdW5lbmNvZGVkUGF0aCwgcXVlcnlQYXJhbWV0ZXJzKTsKICB9CgogIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbVXJpLmh0dHBzXS4KICBmYWN0b3J5IF9VcmkuaHR0cHMoU3RyaW5nIGF1dGhvcml0eSwgU3RyaW5nIHVuZW5jb2RlZFBhdGgsCiAgICAgIFtNYXA8U3RyaW5nLCBTdHJpbmc+IHF1ZXJ5UGFyYW1ldGVyc10pIHsKICAgIHJldHVybiBfbWFrZUh0dHBVcmkoImh0dHBzIiwgYXV0aG9yaXR5LCB1bmVuY29kZWRQYXRoLCBxdWVyeVBhcmFtZXRlcnMpOwogIH0KCiAgU3RyaW5nIGdldCBhdXRob3JpdHkgewogICAgaWYgKCFoYXNBdXRob3JpdHkpIHJldHVybiAiIjsKICAgIHZhciBzYiA9IFN0cmluZ0J1ZmZlcigpOwogICAgX3dyaXRlQXV0aG9yaXR5KHNiKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgU3RyaW5nIGdldCB1c2VySW5mbyA9PiBfdXNlckluZm87CgogIFN0cmluZyBnZXQgaG9zdCB7CiAgICBpZiAoX2hvc3QgPT0gbnVsbCkgcmV0dXJuICIiOwogICAgaWYgKF9ob3N0LnN0YXJ0c1dpdGgoJ1snKSkgewogICAgICByZXR1cm4gX2hvc3Quc3Vic3RyaW5nKDEsIF9ob3N0Lmxlbmd0aCAtIDEpOwogICAgfQogICAgcmV0dXJuIF9ob3N0OwogIH0KCiAgaW50IGdldCBwb3J0IHsKICAgIGlmIChfcG9ydCA9PSBudWxsKSByZXR1cm4gX2RlZmF1bHRQb3J0KHNjaGVtZSk7CiAgICByZXR1cm4gX3BvcnQ7CiAgfQoKICAvLyBUaGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgc2NoZW1lIG9mIHRoaXMgVXJpLgogIHN0YXRpYyBpbnQgX2RlZmF1bHRQb3J0KFN0cmluZyBzY2hlbWUpIHsKICAgIGlmIChzY2hlbWUgPT0gImh0dHAiKSByZXR1cm4gODA7CiAgICBpZiAoc2NoZW1lID09ICJodHRwcyIpIHJldHVybiA0NDM7CiAgICByZXR1cm4gMDsKICB9CgogIFN0cmluZyBnZXQgcXVlcnkgPT4gX3F1ZXJ5ID8/ICIiOwoKICBTdHJpbmcgZ2V0IGZyYWdtZW50ID0+IF9mcmFnbWVudCA/PyAiIjsKCiAgYm9vbCBpc1NjaGVtZShTdHJpbmcgc2NoZW1lKSB7CiAgICBTdHJpbmcgdGhpc1NjaGVtZSA9IHRoaXMuc2NoZW1lOwogICAgaWYgKHNjaGVtZSA9PSBudWxsKSByZXR1cm4gdGhpc1NjaGVtZS5pc0VtcHR5OwogICAgaWYgKHNjaGVtZS5sZW5ndGggIT0gdGhpc1NjaGVtZS5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfY29tcGFyZVNjaGVtZShzY2hlbWUsIHRoaXNTY2hlbWUpOwogIH0KCiAgLy8vIENvbXBhcmVzIHNjaGVtZSBjaGFyYWN0ZXJzIGluIFtzY2hlbWVdIGFuZCBhdCB0aGUgc3RhcnQgb2YgW3VyaV0uCiAgLy8vCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtzY2hlbWVdIHJlcHJlc2VudHMgdGhlIHNhbWUgc2NoZW1lIGFzIHRoZSBzdGFydCBvZgogIC8vLyBbdXJpXS4gVGhhdCBtZWFucyBoYXZpbmcgdGhlIHNhbWUgY2hhcmFjdGVycywgYnV0IHBvc3NpYmx5IGRpZmZlcmVudCBjYXNlCiAgLy8vIGZvciBsZXR0ZXJzLgogIC8vLwogIC8vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgdGhhdCB0aGUgY2hhcmFjdGVycyBhcmUgdmFsaWQgVVJJIHNjaGVtZQogIC8vLyBjaGFyYWN0ZXJzLiBUaGUgW3VyaV0gaXMgYXNzdW1lZCB0byBiZSB2YWxpZCwgc28gaWYgW3NjaGVtZV0gbWF0Y2hlcwogIC8vLyBpdCwgaXQgaGFzIHRvIGJlIHZhbGlkIHRvby4KICAvLy8KICAvLy8gVGhlIGxlbmd0aCBzaG91bGQgYmUgdGVzdGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sCiAgLy8vIHNvIHRoZSBzY2hlbWUgcGFydCBvZiBbdXJpXSBpcyBrbm93biB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBbc2NoZW1lXS4KICBzdGF0aWMgYm9vbCBfY29tcGFyZVNjaGVtZShTdHJpbmcgc2NoZW1lLCBTdHJpbmcgdXJpKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNjaGVtZS5sZW5ndGg7IGkrKykgewogICAgICBpbnQgc2NoZW1lQ2hhciA9IHNjaGVtZS5jb2RlVW5pdEF0KGkpOwogICAgICBpbnQgdXJpQ2hhciA9IHVyaS5jb2RlVW5pdEF0KGkpOwogICAgICBpbnQgZGVsdGEgPSBzY2hlbWVDaGFyIF4gdXJpQ2hhcjsKICAgICAgaWYgKGRlbHRhICE9IDApIHsKICAgICAgICBpZiAoZGVsdGEgPT0gMHgyMCkgewogICAgICAgICAgLy8gTWlnaHQgYmUgYSBjYXNlIGRpZmZlcmVuY2UuCiAgICAgICAgICBpbnQgbG93ZXJDaGFyID0gdXJpQ2hhciB8IGRlbHRhOwogICAgICAgICAgaWYgKDB4NjEgLyphKi8gPD0gbG93ZXJDaGFyICYmIGxvd2VyQ2hhciA8PSAweDdhIC8qeiovKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gUmVwb3J0IGEgcGFyc2UgZmFpbHVyZS4KICBzdGF0aWMgdm9pZCBfZmFpbChTdHJpbmcgdXJpLCBpbnQgaW5kZXgsIFN0cmluZyBtZXNzYWdlKSB7CiAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24obWVzc2FnZSwgdXJpLCBpbmRleCk7CiAgfQoKICBzdGF0aWMgVXJpIF9tYWtlSHR0cFVyaShTdHJpbmcgc2NoZW1lLCBTdHJpbmcgYXV0aG9yaXR5LCBTdHJpbmcgdW5lbmNvZGVkUGF0aCwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBxdWVyeVBhcmFtZXRlcnMpIHsKICAgIHZhciB1c2VySW5mbyA9ICIiOwogICAgU3RyaW5nIGhvc3Q7CiAgICBpbnQgcG9ydDsKCiAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwgJiYgYXV0aG9yaXR5LmlzTm90RW1wdHkpIHsKICAgICAgdmFyIGhvc3RTdGFydCA9IDA7CiAgICAgIC8vIFNwbGl0IG9mZiB0aGUgdXNlciBpbmZvLgogICAgICBib29sIGhhc1VzZXJJbmZvID0gZmFsc2U7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXV0aG9yaXR5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgaW50IGF0U2lnbiA9IDB4NDA7CiAgICAgICAgaWYgKGF1dGhvcml0eS5jb2RlVW5pdEF0KGkpID09IGF0U2lnbikgewogICAgICAgICAgaGFzVXNlckluZm8gPSB0cnVlOwogICAgICAgICAgdXNlckluZm8gPSBhdXRob3JpdHkuc3Vic3RyaW5nKDAsIGkpOwogICAgICAgICAgaG9zdFN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIGhvc3RFbmQgPSBob3N0U3RhcnQ7CiAgICAgIGlmIChob3N0U3RhcnQgPCBhdXRob3JpdHkubGVuZ3RoICYmCiAgICAgICAgICBhdXRob3JpdHkuY29kZVVuaXRBdChob3N0U3RhcnQpID09IF9MRUZUX0JSQUNLRVQpIHsKICAgICAgICAvLyBJUHY2IGhvc3QuCiAgICAgICAgaW50IGVzY2FwZUZvclpvbmVJRCA9IC0xOwogICAgICAgIGZvciAoOyBob3N0RW5kIDwgYXV0aG9yaXR5Lmxlbmd0aDsgaG9zdEVuZCsrKSB7CiAgICAgICAgICBpbnQgY2hhciA9IGF1dGhvcml0eS5jb2RlVW5pdEF0KGhvc3RFbmQpOwogICAgICAgICAgaWYgKGNoYXIgPT0gX1BFUkNFTlQgJiYgZXNjYXBlRm9yWm9uZUlEIDwgMCkgewogICAgICAgICAgICBlc2NhcGVGb3Jab25lSUQgPSBob3N0RW5kOwogICAgICAgICAgICBpZiAoYXV0aG9yaXR5LnN0YXJ0c1dpdGgoIjI1IiwgaG9zdEVuZCArIDEpKSB7CiAgICAgICAgICAgICAgaG9zdEVuZCArPSAyOyAvLyBNaWdodCBhcyB3ZWxsIHNraXAgdGhlIGFscmVhZHkgY2hlY2tlZCBlc2NhcGUuCiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSBfUklHSFRfQlJBQ0tFVCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGhvc3RFbmQgPT0gYXV0aG9yaXR5Lmxlbmd0aCkgewogICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAgICJJbnZhbGlkIElQdjYgaG9zdCBlbnRyeS4iLCBhdXRob3JpdHksIGhvc3RTdGFydCk7CiAgICAgICAgfQogICAgICAgIFVyaS5wYXJzZUlQdjZBZGRyZXNzKGF1dGhvcml0eSwgaG9zdFN0YXJ0ICsgMSwKICAgICAgICAgICAgKGVzY2FwZUZvclpvbmVJRCA8IDApID8gaG9zdEVuZCA6IGVzY2FwZUZvclpvbmVJRCk7CiAgICAgICAgaG9zdEVuZCsrOyAvLyBTa2lwIHRoZSBjbG9zaW5nIGJyYWNrZXQuCiAgICAgICAgaWYgKGhvc3RFbmQgIT0gYXV0aG9yaXR5Lmxlbmd0aCAmJgogICAgICAgICAgICBhdXRob3JpdHkuY29kZVVuaXRBdChob3N0RW5kKSAhPSBfQ09MT04pIHsKICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBlbmQgb2YgYXV0aG9yaXR5IiwgYXV0aG9yaXR5LCBob3N0RW5kKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gU3BsaXQgaG9zdCBhbmQgcG9ydC4KICAgICAgYm9vbCBoYXNQb3J0ID0gZmFsc2U7CiAgICAgIGZvciAoOyBob3N0RW5kIDwgYXV0aG9yaXR5Lmxlbmd0aDsgaG9zdEVuZCsrKSB7CiAgICAgICAgaWYgKGF1dGhvcml0eS5jb2RlVW5pdEF0KGhvc3RFbmQpID09IF9DT0xPTikgewogICAgICAgICAgdmFyIHBvcnRTdHJpbmcgPSBhdXRob3JpdHkuc3Vic3RyaW5nKGhvc3RFbmQgKyAxKTsKICAgICAgICAgIC8vIFdlIGFsbG93IHRoZSBlbXB0eSBwb3J0IC0gZmFsbGluZyBiYWNrIHRvIGluaXRpYWwgdmFsdWUuCiAgICAgICAgICBpZiAocG9ydFN0cmluZy5pc05vdEVtcHR5KSBwb3J0ID0gaW50LnBhcnNlKHBvcnRTdHJpbmcpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGhvc3QgPSBhdXRob3JpdHkuc3Vic3RyaW5nKGhvc3RTdGFydCwgaG9zdEVuZCk7CiAgICB9CiAgICByZXR1cm4gVXJpKAogICAgICAgIHNjaGVtZTogc2NoZW1lLAogICAgICAgIHVzZXJJbmZvOiB1c2VySW5mbywKICAgICAgICBob3N0OiBob3N0LAogICAgICAgIHBvcnQ6IHBvcnQsCiAgICAgICAgcGF0aFNlZ21lbnRzOiB1bmVuY29kZWRQYXRoLnNwbGl0KCIvIiksCiAgICAgICAgcXVlcnlQYXJhbWV0ZXJzOiBxdWVyeVBhcmFtZXRlcnMpOwogIH0KCiAgLy8vIEltcGxlbWVudGF0aW9uIG9mIFtVcmkuZmlsZV0uCiAgZmFjdG9yeSBfVXJpLmZpbGUoU3RyaW5nIHBhdGgsIHtib29sIHdpbmRvd3N9KSB7CiAgICB3aW5kb3dzID0gKHdpbmRvd3MgPT0gbnVsbCkgPyBfVXJpLl9pc1dpbmRvd3MgOiB3aW5kb3dzOwogICAgcmV0dXJuIHdpbmRvd3MKICAgICAgICA/IF9tYWtlV2luZG93c0ZpbGVVcmwocGF0aCwgZmFsc2UpCiAgICAgICAgOiBfbWFrZUZpbGVVcmkocGF0aCwgZmFsc2UpOwogIH0KCiAgLy8vIEltcGxlbWVudGF0aW9uIG9mIFtVcmkuZGlyZWN0b3J5XS4KICBmYWN0b3J5IF9VcmkuZGlyZWN0b3J5KFN0cmluZyBwYXRoLCB7Ym9vbCB3aW5kb3dzfSkgewogICAgd2luZG93cyA9ICh3aW5kb3dzID09IG51bGwpID8gX1VyaS5faXNXaW5kb3dzIDogd2luZG93czsKICAgIHJldHVybiB3aW5kb3dzID8gX21ha2VXaW5kb3dzRmlsZVVybChwYXRoLCB0cnVlKSA6IF9tYWtlRmlsZVVyaShwYXRoLCB0cnVlKTsKICB9CgogIC8vLyBVc2VkIGludGVybmFsbHkgaW4gcGF0aC1yZWxhdGVkIGNvbnN0cnVjdG9ycy4KICBleHRlcm5hbCBzdGF0aWMgYm9vbCBnZXQgX2lzV2luZG93czsKCiAgc3RhdGljIF9jaGVja05vbldpbmRvd3NQYXRoUmVzZXJ2ZWRDaGFyYWN0ZXJzKAogICAgICBMaXN0PFN0cmluZz4gc2VnbWVudHMsIGJvb2wgYXJndW1lbnRFcnJvcikgewogICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCkgewogICAgICBpZiAoc2VnbWVudC5jb250YWlucygiLyIpKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50RXJyb3IpIHsKICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIklsbGVnYWwgcGF0aCBjaGFyYWN0ZXIgJHNlZ21lbnQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiSWxsZWdhbCBwYXRoIGNoYXJhY3RlciAkc2VnbWVudCIpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICBzdGF0aWMgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMoCiAgICAgIExpc3Q8U3RyaW5nPiBzZWdtZW50cywgYm9vbCBhcmd1bWVudEVycm9yLAogICAgICBbaW50IGZpcnN0U2VnbWVudCA9IDBdKSB7CiAgICBmb3IgKHZhciBzZWdtZW50IGluIHNlZ21lbnRzLnNraXAoZmlyc3RTZWdtZW50KSkgewogICAgICBpZiAoc2VnbWVudC5jb250YWlucyhSZWdFeHAocidbIiovOjw+P1xcfF0nKSkpIHsKICAgICAgICBpZiAoYXJndW1lbnRFcnJvcikgewogICAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcGF0aCIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJJbGxlZ2FsIGNoYXJhY3RlciBpbiBwYXRoOiAkc2VnbWVudCIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgc3RhdGljIF9jaGVja1dpbmRvd3NEcml2ZUxldHRlcihpbnQgY2hhckNvZGUsIGJvb2wgYXJndW1lbnRFcnJvcikgewogICAgaWYgKChfVVBQRVJfQ0FTRV9BIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IF9VUFBFUl9DQVNFX1opIHx8CiAgICAgICAgKF9MT1dFUl9DQVNFX0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gX0xPV0VSX0NBU0VfWikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGFyZ3VtZW50RXJyb3IpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigKICAgICAgICAgICJJbGxlZ2FsIGRyaXZlIGxldHRlciAiICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJJbGxlZ2FsIGRyaXZlIGxldHRlciAiICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpOwogICAgfQogIH0KCiAgc3RhdGljIF9tYWtlRmlsZVVyaShTdHJpbmcgcGF0aCwgYm9vbCBzbGFzaFRlcm1pbmF0ZWQpIHsKICAgIGNvbnN0IFN0cmluZyBzZXAgPSAiLyI7CiAgICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KHNlcCk7CiAgICBpZiAoc2xhc2hUZXJtaW5hdGVkICYmIHNlZ21lbnRzLmlzTm90RW1wdHkgJiYgc2VnbWVudHMubGFzdC5pc05vdEVtcHR5KSB7CiAgICAgIHNlZ21lbnRzLmFkZCgiIik7IC8vIEV4dHJhIHNlcGFyYXRvciBhdCBlbmQuCiAgICB9CiAgICBpZiAocGF0aC5zdGFydHNXaXRoKHNlcCkpIHsKICAgICAgLy8gQWJzb2x1dGUgZmlsZTovLyBVUkkuCiAgICAgIHJldHVybiBVcmkoc2NoZW1lOiAiZmlsZSIsIHBhdGhTZWdtZW50czogc2VnbWVudHMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUmVsYXRpdmUgVVJJLgogICAgICByZXR1cm4gVXJpKHBhdGhTZWdtZW50czogc2VnbWVudHMpOwogICAgfQogIH0KCiAgc3RhdGljIF9tYWtlV2luZG93c0ZpbGVVcmwoU3RyaW5nIHBhdGgsIGJvb2wgc2xhc2hUZXJtaW5hdGVkKSB7CiAgICBpZiAocGF0aC5zdGFydHNXaXRoKHIiXFw/XCIpKSB7CiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgociJVTkNcIiwgNCkpIHsKICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlUmFuZ2UoMCwgNywgcidcJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDQpOwogICAgICAgIGlmIChwYXRoLmxlbmd0aCA8IDMgfHwKICAgICAgICAgICAgcGF0aC5jb2RlVW5pdEF0KDEpICE9IF9DT0xPTiB8fAogICAgICAgICAgICBwYXRoLmNvZGVVbml0QXQoMikgIT0gX0JBQ0tTTEFTSCkgewogICAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgICByIldpbmRvd3MgcGF0aHMgd2l0aCBcXD9cIHByZWZpeCBtdXN0IGJlIGFic29sdXRlIik7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwYXRoID0gcGF0aC5yZXBsYWNlQWxsKCIvIiwgcidcJyk7CiAgICB9CiAgICBjb25zdCBTdHJpbmcgc2VwID0gcidcJzsKICAgIGlmIChwYXRoLmxlbmd0aCA+IDEgJiYgcGF0aC5jb2RlVW5pdEF0KDEpID09IF9DT0xPTikgewogICAgICBfY2hlY2tXaW5kb3dzRHJpdmVMZXR0ZXIocGF0aC5jb2RlVW5pdEF0KDApLCB0cnVlKTsKICAgICAgaWYgKHBhdGgubGVuZ3RoID09IDIgfHwgcGF0aC5jb2RlVW5pdEF0KDIpICE9IF9CQUNLU0xBU0gpIHsKICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJXaW5kb3dzIHBhdGhzIHdpdGggZHJpdmUgbGV0dGVyIG11c3QgYmUgYWJzb2x1dGUiKTsKICAgICAgfQogICAgICAvLyBBYnNvbHV0ZSBmaWxlOi8vQzovIFVSSS4KICAgICAgdmFyIHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoc2VwKTsKICAgICAgaWYgKHNsYXNoVGVybWluYXRlZCAmJiBwYXRoU2VnbWVudHMubGFzdC5pc05vdEVtcHR5KSB7CiAgICAgICAgcGF0aFNlZ21lbnRzLmFkZCgiIik7IC8vIEV4dHJhIHNlcGFyYXRvciBhdCBlbmQuCiAgICAgIH0KICAgICAgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMocGF0aFNlZ21lbnRzLCB0cnVlLCAxKTsKICAgICAgcmV0dXJuIFVyaShzY2hlbWU6ICJmaWxlIiwgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMpOwogICAgfQoKICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoc2VwKSkgewogICAgICBpZiAocGF0aC5zdGFydHNXaXRoKHNlcCwgMSkpIHsKICAgICAgICAvLyBBYnNvbHV0ZSBmaWxlOi8vIFVSSSB3aXRoIGhvc3QuCiAgICAgICAgaW50IHBhdGhTdGFydCA9IHBhdGguaW5kZXhPZihyJ1wnLCAyKTsKICAgICAgICBTdHJpbmcgaG9zdFBhcnQgPQogICAgICAgICAgICAocGF0aFN0YXJ0IDwgMCkgPyBwYXRoLnN1YnN0cmluZygyKSA6IHBhdGguc3Vic3RyaW5nKDIsIHBhdGhTdGFydCk7CiAgICAgICAgU3RyaW5nIHBhdGhQYXJ0ID0gKHBhdGhTdGFydCA8IDApID8gIiIgOiBwYXRoLnN1YnN0cmluZyhwYXRoU3RhcnQgKyAxKTsKICAgICAgICB2YXIgcGF0aFNlZ21lbnRzID0gcGF0aFBhcnQuc3BsaXQoc2VwKTsKICAgICAgICBfY2hlY2tXaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVycyhwYXRoU2VnbWVudHMsIHRydWUpOwogICAgICAgIGlmIChzbGFzaFRlcm1pbmF0ZWQgJiYgcGF0aFNlZ21lbnRzLmxhc3QuaXNOb3RFbXB0eSkgewogICAgICAgICAgcGF0aFNlZ21lbnRzLmFkZCgiIik7IC8vIEV4dHJhIHNlcGFyYXRvciBhdCBlbmQuCiAgICAgICAgfQogICAgICAgIHJldHVybiBVcmkoc2NoZW1lOiAiZmlsZSIsIGhvc3Q6IGhvc3RQYXJ0LCBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQWJzb2x1dGUgZmlsZTovLyBVUkkuCiAgICAgICAgdmFyIHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoc2VwKTsKICAgICAgICBpZiAoc2xhc2hUZXJtaW5hdGVkICYmIHBhdGhTZWdtZW50cy5sYXN0LmlzTm90RW1wdHkpIHsKICAgICAgICAgIHBhdGhTZWdtZW50cy5hZGQoIiIpOyAvLyBFeHRyYSBzZXBhcmF0b3IgYXQgZW5kLgogICAgICAgIH0KICAgICAgICBfY2hlY2tXaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVycyhwYXRoU2VnbWVudHMsIHRydWUpOwogICAgICAgIHJldHVybiBVcmkoc2NoZW1lOiAiZmlsZSIsIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gUmVsYXRpdmUgVVJJLgogICAgICB2YXIgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdChzZXApOwogICAgICBfY2hlY2tXaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVycyhwYXRoU2VnbWVudHMsIHRydWUpOwogICAgICBpZiAoc2xhc2hUZXJtaW5hdGVkICYmCiAgICAgICAgICBwYXRoU2VnbWVudHMuaXNOb3RFbXB0eSAmJgogICAgICAgICAgcGF0aFNlZ21lbnRzLmxhc3QuaXNOb3RFbXB0eSkgewogICAgICAgIHBhdGhTZWdtZW50cy5hZGQoIiIpOyAvLyBFeHRyYSBzZXBhcmF0b3IgYXQgZW5kLgogICAgICB9CiAgICAgIHJldHVybiBVcmkocGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMpOwogICAgfQogIH0KCiAgVXJpIHJlcGxhY2UoCiAgICAgIHtTdHJpbmcgc2NoZW1lLAogICAgICBTdHJpbmcgdXNlckluZm8sCiAgICAgIFN0cmluZyBob3N0LAogICAgICBpbnQgcG9ydCwKICAgICAgU3RyaW5nIHBhdGgsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcGF0aFNlZ21lbnRzLAogICAgICBTdHJpbmcgcXVlcnksCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWMgLypTdHJpbmd8SXRlcmFibGU8U3RyaW5nPiovID4gcXVlcnlQYXJhbWV0ZXJzLAogICAgICBTdHJpbmcgZnJhZ21lbnR9KSB7CiAgICAvLyBTZXQgdG8gdHJ1ZSBpZiB0aGUgc2NoZW1lIGhhcyAocG90ZW50aWFsbHkpIGNoYW5nZWQuCiAgICAvLyBJbiB0aGF0IGNhc2UsIHRoZSBkZWZhdWx0IHBvcnQgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkIGFuZCB3ZSBuZWVkCiAgICAvLyB0byBjaGVjayBldmVuIHRoZSBleGlzdGluZyBwb3J0LgogICAgYm9vbCBzY2hlbWVDaGFuZ2VkID0gZmFsc2U7CiAgICBpZiAoc2NoZW1lICE9IG51bGwpIHsKICAgICAgc2NoZW1lID0gX21ha2VTY2hlbWUoc2NoZW1lLCAwLCBzY2hlbWUubGVuZ3RoKTsKICAgICAgc2NoZW1lQ2hhbmdlZCA9IChzY2hlbWUgIT0gdGhpcy5zY2hlbWUpOwogICAgfSBlbHNlIHsKICAgICAgc2NoZW1lID0gdGhpcy5zY2hlbWU7CiAgICB9CiAgICBib29sIGlzRmlsZSA9IChzY2hlbWUgPT0gImZpbGUiKTsKICAgIGlmICh1c2VySW5mbyAhPSBudWxsKSB7CiAgICAgIHVzZXJJbmZvID0gX21ha2VVc2VySW5mbyh1c2VySW5mbywgMCwgdXNlckluZm8ubGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZXJJbmZvID0gdGhpcy5fdXNlckluZm87CiAgICB9CiAgICBpZiAocG9ydCAhPSBudWxsKSB7CiAgICAgIHBvcnQgPSBfbWFrZVBvcnQocG9ydCwgc2NoZW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHBvcnQgPSB0aGlzLl9wb3J0OwogICAgICBpZiAoc2NoZW1lQ2hhbmdlZCkgewogICAgICAgIC8vIFRoZSBkZWZhdWx0IHBvcnQgbWlnaHQgaGF2ZSBjaGFuZ2VkLgogICAgICAgIHBvcnQgPSBfbWFrZVBvcnQocG9ydCwgc2NoZW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKGhvc3QgIT0gbnVsbCkgewogICAgICBob3N0ID0gX21ha2VIb3N0KGhvc3QsIDAsIGhvc3QubGVuZ3RoLCBmYWxzZSk7CiAgICB9IGVsc2UgaWYgKHRoaXMuaGFzQXV0aG9yaXR5KSB7CiAgICAgIGhvc3QgPSB0aGlzLl9ob3N0OwogICAgfSBlbHNlIGlmICh1c2VySW5mby5pc05vdEVtcHR5IHx8IHBvcnQgIT0gbnVsbCB8fCBpc0ZpbGUpIHsKICAgICAgaG9zdCA9ICIiOwogICAgfQoKICAgIGJvb2wgaGFzQXV0aG9yaXR5ID0gaG9zdCAhPSBudWxsOwogICAgaWYgKHBhdGggIT0gbnVsbCB8fCBwYXRoU2VnbWVudHMgIT0gbnVsbCkgewogICAgICBwYXRoID0gX21ha2VQYXRoKHBhdGgsIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocGF0aCksIHBhdGhTZWdtZW50cywgc2NoZW1lLAogICAgICAgICAgaGFzQXV0aG9yaXR5KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhdGggPSB0aGlzLnBhdGg7CiAgICAgIGlmICgoaXNGaWxlIHx8IChoYXNBdXRob3JpdHkgJiYgIXBhdGguaXNFbXB0eSkpICYmCiAgICAgICAgICAhcGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgICAgICBwYXRoID0gIi8iICsgcGF0aDsKICAgICAgfQogICAgfQoKICAgIGlmIChxdWVyeSAhPSBudWxsIHx8IHF1ZXJ5UGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHF1ZXJ5ID0gX21ha2VRdWVyeShxdWVyeSwgMCwgX3N0cmluZ09yTnVsbExlbmd0aChxdWVyeSksIHF1ZXJ5UGFyYW1ldGVycyk7CiAgICB9IGVsc2UgewogICAgICBxdWVyeSA9IHRoaXMuX3F1ZXJ5OwogICAgfQoKICAgIGlmIChmcmFnbWVudCAhPSBudWxsKSB7CiAgICAgIGZyYWdtZW50ID0gX21ha2VGcmFnbWVudChmcmFnbWVudCwgMCwgZnJhZ21lbnQubGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIGZyYWdtZW50ID0gdGhpcy5fZnJhZ21lbnQ7CiAgICB9CgogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKHNjaGVtZSwgdXNlckluZm8sIGhvc3QsIHBvcnQsIHBhdGgsIHF1ZXJ5LCBmcmFnbWVudCk7CiAgfQoKICBVcmkgcmVtb3ZlRnJhZ21lbnQoKSB7CiAgICBpZiAoIXRoaXMuaGFzRnJhZ21lbnQpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKHNjaGVtZSwgX3VzZXJJbmZvLCBfaG9zdCwgX3BvcnQsIHBhdGgsIF9xdWVyeSwgbnVsbCk7CiAgfQoKICBMaXN0PFN0cmluZz4gZ2V0IHBhdGhTZWdtZW50cyB7CiAgICB2YXIgcmVzdWx0ID0gX3BhdGhTZWdtZW50czsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKCiAgICB2YXIgcGF0aFRvU3BsaXQgPSBwYXRoOwogICAgaWYgKHBhdGhUb1NwbGl0LmlzTm90RW1wdHkgJiYgcGF0aFRvU3BsaXQuY29kZVVuaXRBdCgwKSA9PSBfU0xBU0gpIHsKICAgICAgcGF0aFRvU3BsaXQgPSBwYXRoVG9TcGxpdC5zdWJzdHJpbmcoMSk7CiAgICB9CiAgICByZXN1bHQgPSAocGF0aFRvU3BsaXQgPT0gIiIpCiAgICAgICAgPyBjb25zdCA8U3RyaW5nPltdCiAgICAgICAgOiBMaXN0PFN0cmluZz4udW5tb2RpZmlhYmxlKAogICAgICAgICAgICBwYXRoVG9TcGxpdC5zcGxpdCgiLyIpLm1hcChVcmkuZGVjb2RlQ29tcG9uZW50KSk7CiAgICBfcGF0aFNlZ21lbnRzID0gcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IHF1ZXJ5UGFyYW1ldGVycyB7CiAgICBfcXVlcnlQYXJhbWV0ZXJzID8/PQogICAgICAgIFVubW9kaWZpYWJsZU1hcFZpZXc8U3RyaW5nLCBTdHJpbmc+KFVyaS5zcGxpdFF1ZXJ5U3RyaW5nKHF1ZXJ5KSk7CiAgICByZXR1cm4gX3F1ZXJ5UGFyYW1ldGVyczsKICB9CgogIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gZ2V0IHF1ZXJ5UGFyYW1ldGVyc0FsbCB7CiAgICBpZiAoX3F1ZXJ5UGFyYW1ldGVyTGlzdHMgPT0gbnVsbCkgewogICAgICBNYXAgcXVlcnlQYXJhbWV0ZXJMaXN0cyA9IF9zcGxpdFF1ZXJ5U3RyaW5nQWxsKHF1ZXJ5KTsKICAgICAgZm9yICh2YXIga2V5IGluIHF1ZXJ5UGFyYW1ldGVyTGlzdHMua2V5cykgewogICAgICAgIHF1ZXJ5UGFyYW1ldGVyTGlzdHNba2V5XSA9CiAgICAgICAgICAgIExpc3Q8U3RyaW5nPi51bm1vZGlmaWFibGUocXVlcnlQYXJhbWV0ZXJMaXN0c1trZXldKTsKICAgICAgfQogICAgICBfcXVlcnlQYXJhbWV0ZXJMaXN0cyA9CiAgICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+LnVubW9kaWZpYWJsZShxdWVyeVBhcmFtZXRlckxpc3RzKTsKICAgIH0KICAgIHJldHVybiBfcXVlcnlQYXJhbWV0ZXJMaXN0czsKICB9CgogIFVyaSBub3JtYWxpemVQYXRoKCkgewogICAgU3RyaW5nIHBhdGggPSBfbm9ybWFsaXplUGF0aCh0aGlzLnBhdGgsIHNjaGVtZSwgaGFzQXV0aG9yaXR5KTsKICAgIGlmIChpZGVudGljYWwocGF0aCwgdGhpcy5wYXRoKSkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKHBhdGg6IHBhdGgpOwogIH0KCiAgc3RhdGljIGludCBfbWFrZVBvcnQoaW50IHBvcnQsIFN0cmluZyBzY2hlbWUpIHsKICAgIC8vIFBlcmZvcm0gc2NoZW1lIHNwZWNpZmljIG5vcm1hbGl6YXRpb24uCiAgICBpZiAocG9ydCAhPSBudWxsICYmIHBvcnQgPT0gX2RlZmF1bHRQb3J0KHNjaGVtZSkpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHBvcnQ7CiAgfQoKICAvKioKICAgKiBDaGVjayBhbmQgbm9ybWFsaXplIGEgaG9zdCBuYW1lLgogICAqCiAgICogSWYgdGhlIGhvc3QgbmFtZSBzdGFydHMgYW5kIGVuZHMgd2l0aCAnWycgYW5kICddJywgaXQgaXMgY29uc2lkZXJlZCBhbgogICAqIElQdjYgYWRkcmVzcy4gSWYgW3N0cmljdElQdjZdIGlzIGZhbHNlLCB0aGUgYWRkcmVzcyBpcyBhbHNvIGNvbnNpZGVyZWQKICAgKiBhbiBJUHY2IGFkZHJlc3MgaWYgaXQgY29udGFpbnMgYW55ICc6JyBjaGFyYWN0ZXIuCiAgICoKICAgKiBJZiBpdCBpcyBub3QgYW4gSVB2NiBhZGRyZXNzLCBpdCBpcyBjYXNlLSBhbmQgZXNjYXBlLW5vcm1hbGl6ZWQuCiAgICogVGhpcyBlc2NhcGVzIGFsbCBjaGFyYWN0ZXJzIG5vdCB2YWxpZCBpbiBhIHJlZy1uYW1lLAogICAqIGFuZCBjb252ZXJ0cyBhbGwgbm9uLWVzY2FwZSB1cHBlci1jYXNlIGxldHRlcnMgdG8gbG93ZXItY2FzZS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIF9tYWtlSG9zdChTdHJpbmcgaG9zdCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIHN0cmljdElQdjYpIHsKICAgIC8vIFRPRE8obHJuKTogU2hvdWxkIHdlIG5vcm1hbGl6ZSBJUHY2IGFkZHJlc3NlcyBhY2NvcmRpbmcgdG8gUkZDIDU5NTI/CiAgICBpZiAoaG9zdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiAiIjsKICAgIC8vIEhvc3QgaXMgYW4gSVB2NiBhZGRyZXNzIGlmIGl0IHN0YXJ0cyB3aXRoICdbJyBvciBjb250YWlucyBhIGNvbG9uLgogICAgaWYgKGhvc3QuY29kZVVuaXRBdChzdGFydCkgPT0gX0xFRlRfQlJBQ0tFVCkgewogICAgICBpZiAoaG9zdC5jb2RlVW5pdEF0KGVuZCAtIDEpICE9IF9SSUdIVF9CUkFDS0VUKSB7CiAgICAgICAgX2ZhaWwoaG9zdCwgc3RhcnQsICdNaXNzaW5nIGVuZCBgXWAgdG8gbWF0Y2ggYFtgIGluIGhvc3QnKTsKICAgICAgfQogICAgICBTdHJpbmcgem9uZUlEID0gIiI7CiAgICAgIGludCBpbmRleCA9IF9jaGVja1pvbmVJRChob3N0LCBzdGFydCArIDEsIGVuZCAtIDEpOwogICAgICBpZiAoaW5kZXggPCBlbmQgLSAxKSB7CiAgICAgICAgaW50IHpvbmVJRHN0YXJ0ID0KICAgICAgICAgICAgKGhvc3Quc3RhcnRzV2l0aCgiMjUiLCBpbmRleCArIDEpKSA/IGluZGV4ICsgMyA6IGluZGV4ICsgMTsKICAgICAgICB6b25lSUQgPSBfbm9ybWFsaXplWm9uZUlEKGhvc3QsIHpvbmVJRHN0YXJ0LCBlbmQgLSAxLCAiJTI1Iik7CiAgICAgIH0KICAgICAgVXJpLnBhcnNlSVB2NkFkZHJlc3MoaG9zdCwgc3RhcnQgKyAxLCBpbmRleCk7CiAgICAgIC8vIFJGQyA1OTUyIHJlcXVpcmVzIGhleCBkaWdpdHMgdG8gYmUgbG93ZXIgY2FzZS4KICAgICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudG9Mb3dlckNhc2UoKSArIHpvbmVJRCArICddJzsKICAgIH0KICAgIGlmICghc3RyaWN0SVB2NikgewogICAgICAvLyBUT0RPKGxybik6IHNraXAgaWYgdG9vIHNob3J0IHRvIGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzPwogICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIGlmIChob3N0LmNvZGVVbml0QXQoaSkgPT0gX0NPTE9OKSB7CiAgICAgICAgICBTdHJpbmcgem9uZUlEID0gIiI7CiAgICAgICAgICBpbnQgaW5kZXggPSBfY2hlY2tab25lSUQoaG9zdCwgc3RhcnQsIGVuZCk7CiAgICAgICAgICBpZiAoaW5kZXggPCBlbmQpIHsKICAgICAgICAgICAgaW50IHpvbmVJRHN0YXJ0ID0KICAgICAgICAgICAgICAgIChob3N0LnN0YXJ0c1dpdGgoIjI1IiwgaW5kZXggKyAxKSkgPyBpbmRleCArIDMgOiBpbmRleCArIDE7CiAgICAgICAgICAgIHpvbmVJRCA9IF9ub3JtYWxpemVab25lSUQoaG9zdCwgem9uZUlEc3RhcnQsIGVuZCwgIiUyNSIpOwogICAgICAgICAgfQogICAgICAgICAgVXJpLnBhcnNlSVB2NkFkZHJlc3MoaG9zdCwgc3RhcnQsIGluZGV4KTsKICAgICAgICAgIHJldHVybiAnWyR7aG9zdC5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KX0nICsgem9uZUlEICsgJ10nOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9ub3JtYWxpemVSZWdOYW1lKGhvc3QsIHN0YXJ0LCBlbmQpOwogIH0KCiAgLy8gUkZDIDY4NzQgY2hlY2sgZm9yIFpvbmVJRAogIC8vIFJldHVybiB0aGUgaW5kZXggb2YgZmlyc3QgYXBwZWFyZWQgYCVgLgogIHN0YXRpYyBpbnQgX2NoZWNrWm9uZUlEKFN0cmluZyBob3N0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGludCBpbmRleCA9IGhvc3QuaW5kZXhPZignJScsIHN0YXJ0KTsKICAgIGluZGV4ID0gKGluZGV4ID49IHN0YXJ0ICYmIGluZGV4IDwgZW5kKSA/IGluZGV4IDogZW5kOwogICAgcmV0dXJuIGluZGV4OwogIH0KCiAgc3RhdGljIGJvb2wgX2lzWm9uZUlEQ2hhcihpbnQgY2hhcikgewogICAgcmV0dXJuIGNoYXIgPCAxMjcgJiYgKF96b25lSURUYWJsZVtjaGFyID4+IDRdICYgKDEgPDwgKGNoYXIgJiAweGYpKSkgIT0gMDsKICB9CgogIC8qKgogICAqIFZhbGlkYXRlcyBhbmQgZG9lcyBjYXNlLSBhbmQgcGVyY2VudC1lbmNvZGluZyBub3JtYWxpemF0aW9uLgogICAqCiAgICogVGhlIHNhbWUgYXMgW19ub3JtYWxpemVPclN1YnN0cmluZ10KICAgKiBleGNlcHQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb252ZXJ0IGNoYXJhY3RlcnMgdG8gbG93ZXIgY2FzZS4KICAgKiBUaGUgW2hvc3RdIG11c3QgYmUgYW4gUkZDNjg3NCAiWm9uZUlEIi4KICAgKiBab25lSUQgPSAxKih1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQpCiAgICovCiAgc3RhdGljIFN0cmluZyBfbm9ybWFsaXplWm9uZUlEKFN0cmluZyBob3N0LCBpbnQgc3RhcnQsIGludCBlbmQsCiAgICAgIFtTdHJpbmcgcHJlZml4ID0gJyddKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgaWYgKHByZWZpeCAhPSAnJykgewogICAgICBidWZmZXIgPSBTdHJpbmdCdWZmZXIocHJlZml4KTsKICAgIH0KICAgIGludCBzZWN0aW9uU3RhcnQgPSBzdGFydDsKICAgIGludCBpbmRleCA9IHN0YXJ0OwogICAgLy8gV2hldGhlciBhbGwgY2hhcmFjdGVycyBiZXR3ZWVuIHNlY3Rpb25TdGFydCBhbmQgaW5kZXggYXJlIG5vcm1hbGl6ZWQsCiAgICBib29sIGlzTm9ybWFsaXplZCA9IHRydWU7CgogICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7CiAgICAgIGludCBjaGFyID0gaG9zdC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgaWYgKGNoYXIgPT0gX1BFUkNFTlQpIHsKICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnQgPSBfbm9ybWFsaXplRXNjYXBlKGhvc3QsIGluZGV4LCB0cnVlKTsKICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gbnVsbCAmJiBpc05vcm1hbGl6ZWQpIHsKICAgICAgICAgIGluZGV4ICs9IDM7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBTdHJpbmcgc2xpY2UgPSBob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KTsKICAgICAgICBidWZmZXIud3JpdGUoc2xpY2UpOwogICAgICAgIGludCBzb3VyY2VMZW5ndGggPSAzOwogICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB7CiAgICAgICAgICByZXBsYWNlbWVudCA9IGhvc3Quc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDMpOwogICAgICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQgPT0gIiUiKSB7CiAgICAgICAgICBfZmFpbChob3N0LCBpbmRleCwgIlpvbmVJRCBzaG91bGQgbm90IGNvbnRhaW4gJSBhbnltb3JlIik7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlci53cml0ZShyZXBsYWNlbWVudCk7CiAgICAgICAgaW5kZXggKz0gc291cmNlTGVuZ3RoOwogICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoX2lzWm9uZUlEQ2hhcihjaGFyKSkgewogICAgICAgIGlmIChpc05vcm1hbGl6ZWQgJiYgX1VQUEVSX0NBU0VfQSA8PSBjaGFyICYmIF9VUFBFUl9DQVNFX1ogPj0gY2hhcikgewogICAgICAgICAgLy8gUHV0IGluaXRpYWwgc2xpY2UgaW4gYnVmZmVyIGFuZCBjb250aW51ZSBpbiBub24tbm9ybWFsaXplZCBtb2RlCiAgICAgICAgICBidWZmZXIgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgaWYgKHNlY3Rpb25TdGFydCA8IGluZGV4KSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KSk7CiAgICAgICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICAgICAgfQogICAgICAgICAgaXNOb3JtYWxpemVkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGluZGV4Kys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50IHNvdXJjZUxlbmd0aCA9IDE7CiAgICAgICAgaWYgKChjaGFyICYgMHhGQzAwKSA9PSAweEQ4MDAgJiYgKGluZGV4ICsgMSkgPCBlbmQpIHsKICAgICAgICAgIGludCB0YWlsID0gaG9zdC5jb2RlVW5pdEF0KGluZGV4ICsgMSk7CiAgICAgICAgICBpZiAoKHRhaWwgJiAweEZDMDApID09IDB4REMwMCkgewogICAgICAgICAgICBjaGFyID0gMHgxMDAwMCB8ICgoY2hhciAmIDB4M2ZmKSA8PCAxMCkgfCAodGFpbCAmIDB4M2ZmKTsKICAgICAgICAgICAgc291cmNlTGVuZ3RoID0gMjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBTdHJpbmcgc2xpY2UgPSBob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KTsKICAgICAgICBidWZmZXIud3JpdGUoc2xpY2UpOwogICAgICAgIGJ1ZmZlci53cml0ZShfZXNjYXBlQ2hhcihjaGFyKSk7CiAgICAgICAgaW5kZXggKz0gc291cmNlTGVuZ3RoOwogICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICB9CiAgICB9CiAgICBpZiAoYnVmZmVyID09IG51bGwpIHJldHVybiBob3N0LnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgIGlmIChzZWN0aW9uU3RhcnQgPCBlbmQpIHsKICAgICAgU3RyaW5nIHNsaWNlID0gaG9zdC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBlbmQpOwogICAgICBidWZmZXIud3JpdGUoc2xpY2UpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzUmVnTmFtZUNoYXIoaW50IGNoYXIpIHsKICAgIHJldHVybiBjaGFyIDwgMTI3ICYmIChfcmVnTmFtZVRhYmxlW2NoYXIgPj4gNF0gJiAoMSA8PCAoY2hhciAmIDB4ZikpKSAhPSAwOwogIH0KCiAgLyoqCiAgICogVmFsaWRhdGVzIGFuZCBkb2VzIGNhc2UtIGFuZCBwZXJjZW50LWVuY29kaW5nIG5vcm1hbGl6YXRpb24uCiAgICoKICAgKiBUaGUgW2hvc3RdIG11c3QgYmUgYW4gUkZDMzk4NiAicmVnLW5hbWUiLiBJdCBpcyBjb252ZXJ0ZWQKICAgKiB0byBsb3dlciBjYXNlLCBhbmQgcGVyY2VudCBlc2NhcGVzIGFyZSBjb252ZXJ0ZWQgdG8gZWl0aGVyCiAgICogbG93ZXIgY2FzZSB1bnJlc2VydmVkIGNoYXJhY3RlcnMgb3IgdXBwZXIgY2FzZSBlc2NhcGVzLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZVJlZ05hbWUoU3RyaW5nIGhvc3QsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgIGludCBzZWN0aW9uU3RhcnQgPSBzdGFydDsKICAgIGludCBpbmRleCA9IHN0YXJ0OwogICAgLy8gV2hldGhlciBhbGwgY2hhcmFjdGVycyBiZXR3ZWVuIHNlY3Rpb25TdGFydCBhbmQgaW5kZXggYXJlIG5vcm1hbGl6ZWQsCiAgICBib29sIGlzTm9ybWFsaXplZCA9IHRydWU7CgogICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7CiAgICAgIGludCBjaGFyID0gaG9zdC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgaWYgKGNoYXIgPT0gX1BFUkNFTlQpIHsKICAgICAgICAvLyBUaGUgX3JlZ05hbWVUYWJsZSBjb250YWlucyAiJSIsIHNvIHdlIGNoZWNrIHRoYXQgZmlyc3QuCiAgICAgICAgU3RyaW5nIHJlcGxhY2VtZW50ID0gX25vcm1hbGl6ZUVzY2FwZShob3N0LCBpbmRleCwgdHJ1ZSk7CiAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IG51bGwgJiYgaXNOb3JtYWxpemVkKSB7CiAgICAgICAgICBpbmRleCArPSAzOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlciA/Pz0gU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgU3RyaW5nIHNsaWNlID0gaG9zdC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBpbmRleCk7CiAgICAgICAgaWYgKCFpc05vcm1hbGl6ZWQpIHNsaWNlID0gc2xpY2UudG9Mb3dlckNhc2UoKTsKICAgICAgICBidWZmZXIud3JpdGUoc2xpY2UpOwogICAgICAgIGludCBzb3VyY2VMZW5ndGggPSAzOwogICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB7CiAgICAgICAgICByZXBsYWNlbWVudCA9IGhvc3Quc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDMpOwogICAgICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQgPT0gIiUiKSB7CiAgICAgICAgICByZXBsYWNlbWVudCA9ICIlMjUiOwogICAgICAgICAgc291cmNlTGVuZ3RoID0gMTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyLndyaXRlKHJlcGxhY2VtZW50KTsKICAgICAgICBpbmRleCArPSBzb3VyY2VMZW5ndGg7CiAgICAgICAgc2VjdGlvblN0YXJ0ID0gaW5kZXg7CiAgICAgICAgaXNOb3JtYWxpemVkID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChfaXNSZWdOYW1lQ2hhcihjaGFyKSkgewogICAgICAgIGlmIChpc05vcm1hbGl6ZWQgJiYgX1VQUEVSX0NBU0VfQSA8PSBjaGFyICYmIF9VUFBFUl9DQVNFX1ogPj0gY2hhcikgewogICAgICAgICAgLy8gUHV0IGluaXRpYWwgc2xpY2UgaW4gYnVmZmVyIGFuZCBjb250aW51ZSBpbiBub24tbm9ybWFsaXplZCBtb2RlCiAgICAgICAgICBidWZmZXIgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgaWYgKHNlY3Rpb25TdGFydCA8IGluZGV4KSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KSk7CiAgICAgICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICAgICAgfQogICAgICAgICAgaXNOb3JtYWxpemVkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGluZGV4Kys7CiAgICAgIH0gZWxzZSBpZiAoX2lzR2VuZXJhbERlbGltaXRlcihjaGFyKSkgewogICAgICAgIF9mYWlsKGhvc3QsIGluZGV4LCAiSW52YWxpZCBjaGFyYWN0ZXIiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnQgc291cmNlTGVuZ3RoID0gMTsKICAgICAgICBpZiAoKGNoYXIgJiAweEZDMDApID09IDB4RDgwMCAmJiAoaW5kZXggKyAxKSA8IGVuZCkgewogICAgICAgICAgaW50IHRhaWwgPSBob3N0LmNvZGVVbml0QXQoaW5kZXggKyAxKTsKICAgICAgICAgIGlmICgodGFpbCAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7CiAgICAgICAgICAgIGNoYXIgPSAweDEwMDAwIHwgKChjaGFyICYgMHgzZmYpIDw8IDEwKSB8ICh0YWlsICYgMHgzZmYpOwogICAgICAgICAgICBzb3VyY2VMZW5ndGggPSAyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBidWZmZXIgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgIFN0cmluZyBzbGljZSA9IGhvc3Quc3Vic3RyaW5nKHNlY3Rpb25TdGFydCwgaW5kZXgpOwogICAgICAgIGlmICghaXNOb3JtYWxpemVkKSBzbGljZSA9IHNsaWNlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgYnVmZmVyLndyaXRlKHNsaWNlKTsKICAgICAgICBidWZmZXIud3JpdGUoX2VzY2FwZUNoYXIoY2hhcikpOwogICAgICAgIGluZGV4ICs9IHNvdXJjZUxlbmd0aDsKICAgICAgICBzZWN0aW9uU3RhcnQgPSBpbmRleDsKICAgICAgfQogICAgfQogICAgaWYgKGJ1ZmZlciA9PSBudWxsKSByZXR1cm4gaG9zdC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICBpZiAoc2VjdGlvblN0YXJ0IDwgZW5kKSB7CiAgICAgIFN0cmluZyBzbGljZSA9IGhvc3Quc3Vic3RyaW5nKHNlY3Rpb25TdGFydCwgZW5kKTsKICAgICAgaWYgKCFpc05vcm1hbGl6ZWQpIHNsaWNlID0gc2xpY2UudG9Mb3dlckNhc2UoKTsKICAgICAgYnVmZmVyLndyaXRlKHNsaWNlKTsKICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8qKgogICAqIFZhbGlkYXRlcyBzY2hlbWUgY2hhcmFjdGVycyBhbmQgZG9lcyBjYXNlLW5vcm1hbGl6YXRpb24uCiAgICoKICAgKiBTY2hlbWVzIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZS4gVGhleSBjYW5ub3QgY29udGFpbiBlc2NhcGVzLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX21ha2VTY2hlbWUoU3RyaW5nIHNjaGVtZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gIiI7CiAgICBmaW5hbCBpbnQgZmlyc3RDb2RlVW5pdCA9IHNjaGVtZS5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgIGlmICghX2lzQWxwaGFiZXRpY0NoYXJhY3RlcihmaXJzdENvZGVVbml0KSkgewogICAgICBfZmFpbChzY2hlbWUsIHN0YXJ0LCAiU2NoZW1lIG5vdCBzdGFydGluZyB3aXRoIGFscGhhYmV0aWMgY2hhcmFjdGVyIik7CiAgICB9CiAgICBib29sIGNvbnRhaW5zVXBwZXJDYXNlID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBmaW5hbCBpbnQgY29kZVVuaXQgPSBzY2hlbWUuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKCFfaXNTY2hlbWVDaGFyYWN0ZXIoY29kZVVuaXQpKSB7CiAgICAgICAgX2ZhaWwoc2NoZW1lLCBpLCAiSWxsZWdhbCBzY2hlbWUgY2hhcmFjdGVyIik7CiAgICAgIH0KICAgICAgaWYgKF9VUFBFUl9DQVNFX0EgPD0gY29kZVVuaXQgJiYgY29kZVVuaXQgPD0gX1VQUEVSX0NBU0VfWikgewogICAgICAgIGNvbnRhaW5zVXBwZXJDYXNlID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgc2NoZW1lID0gc2NoZW1lLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgIGlmIChjb250YWluc1VwcGVyQ2FzZSkgc2NoZW1lID0gc2NoZW1lLnRvTG93ZXJDYXNlKCk7CiAgICByZXR1cm4gX2Nhbm9uaWNhbGl6ZVNjaGVtZShzY2hlbWUpOwogIH0KCiAgLy8gQ2Fub25pY2FsaXplIGEgZmV3IG9mdGVuLXVzZWQgc2NoZW1lIHN0cmluZ3MuCiAgLy8KICAvLyBUaGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBhbmQgbWFrZXMgY29tcGFyaXNvbiBmYXN0ZXIuCiAgc3RhdGljIFN0cmluZyBfY2Fub25pY2FsaXplU2NoZW1lKFN0cmluZyBzY2hlbWUpIHsKICAgIGlmIChzY2hlbWUgPT0gImh0dHAiKSByZXR1cm4gImh0dHAiOwogICAgaWYgKHNjaGVtZSA9PSAiZmlsZSIpIHJldHVybiAiZmlsZSI7CiAgICBpZiAoc2NoZW1lID09ICJodHRwcyIpIHJldHVybiAiaHR0cHMiOwogICAgaWYgKHNjaGVtZSA9PSAicGFja2FnZSIpIHJldHVybiAicGFja2FnZSI7CiAgICByZXR1cm4gc2NoZW1lOwogIH0KCiAgc3RhdGljIFN0cmluZyBfbWFrZVVzZXJJbmZvKFN0cmluZyB1c2VySW5mbywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAodXNlckluZm8gPT0gbnVsbCkgcmV0dXJuICIiOwogICAgcmV0dXJuIF9ub3JtYWxpemVPclN1YnN0cmluZyh1c2VySW5mbywgc3RhcnQsIGVuZCwgX3VzZXJpbmZvVGFibGUpOwogIH0KCiAgc3RhdGljIFN0cmluZyBfbWFrZVBhdGgoU3RyaW5nIHBhdGgsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgSXRlcmFibGU8U3RyaW5nPiBwYXRoU2VnbWVudHMsIFN0cmluZyBzY2hlbWUsIGJvb2wgaGFzQXV0aG9yaXR5KSB7CiAgICBib29sIGlzRmlsZSA9IChzY2hlbWUgPT0gImZpbGUiKTsKICAgIGJvb2wgZW5zdXJlTGVhZGluZ1NsYXNoID0gaXNGaWxlIHx8IGhhc0F1dGhvcml0eTsKICAgIGlmIChwYXRoID09IG51bGwgJiYgcGF0aFNlZ21lbnRzID09IG51bGwpIHJldHVybiBpc0ZpbGUgPyAiLyIgOiAiIjsKICAgIGlmIChwYXRoICE9IG51bGwgJiYgcGF0aFNlZ21lbnRzICE9IG51bGwpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignQm90aCBwYXRoIGFuZCBwYXRoU2VnbWVudHMgc3BlY2lmaWVkJyk7CiAgICB9CiAgICBTdHJpbmcgcmVzdWx0OwogICAgaWYgKHBhdGggIT0gbnVsbCkgewogICAgICByZXN1bHQgPSBfbm9ybWFsaXplT3JTdWJzdHJpbmcocGF0aCwgc3RhcnQsIGVuZCwgX3BhdGhDaGFyT3JTbGFzaFRhYmxlLAogICAgICAgICAgZXNjYXBlRGVsaW1pdGVyczogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBwYXRoU2VnbWVudHMKICAgICAgICAgIC5tYXAoKHMpID0+IF91cmlFbmNvZGUoX3BhdGhDaGFyVGFibGUsIHMsIHV0ZjgsIGZhbHNlKSkKICAgICAgICAgIC5qb2luKCIvIik7CiAgICB9CiAgICBpZiAocmVzdWx0LmlzRW1wdHkpIHsKICAgICAgaWYgKGlzRmlsZSkgcmV0dXJuICIvIjsKICAgIH0gZWxzZSBpZiAoZW5zdXJlTGVhZGluZ1NsYXNoICYmICFyZXN1bHQuc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgIHJlc3VsdCA9ICIvIiArIHJlc3VsdDsKICAgIH0KICAgIHJlc3VsdCA9IF9ub3JtYWxpemVQYXRoKHJlc3VsdCwgc2NoZW1lLCBoYXNBdXRob3JpdHkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBQZXJmb3JtcyBwYXRoIG5vcm1hbGl6YXRpb24gKHJlbW92ZSBkb3Qgc2VnbWVudHMpIG9uIGEgcGF0aC4KICAvLy8KICAvLy8gSWYgdGhlIFVSSSBoYXMgbmVpdGhlciBzY2hlbWUgbm9yIGF1dGhvcml0eSwgaXQncyBjb25zaWRlcmVkIGEKICAvLy8gInB1cmUgcGF0aCIgYW5kIG5vcm1hbGl6YXRpb24gd29uJ3QgcmVtb3ZlIGxlYWRpbmcgIi4uIiBzZWdtZW50cy4KICAvLy8gT3RoZXJ3aXNlIGl0IGZvbGxvd3MgdGhlIFJGQyAzOTg2ICJyZW1vdmUgZG90IHNlZ21lbnRzIiBhbGdvcml0aG0uCiAgc3RhdGljIFN0cmluZyBfbm9ybWFsaXplUGF0aChTdHJpbmcgcGF0aCwgU3RyaW5nIHNjaGVtZSwgYm9vbCBoYXNBdXRob3JpdHkpIHsKICAgIGlmIChzY2hlbWUuaXNFbXB0eSAmJiAhaGFzQXV0aG9yaXR5ICYmICFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICByZXR1cm4gX25vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLCBzY2hlbWUuaXNOb3RFbXB0eSB8fCBoYXNBdXRob3JpdHkpOwogICAgfQogICAgcmV0dXJuIF9yZW1vdmVEb3RTZWdtZW50cyhwYXRoKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX21ha2VRdWVyeShTdHJpbmcgcXVlcnksIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgTWFwPFN0cmluZywgZHluYW1pYyAvKlN0cmluZ3xJdGVyYWJsZTxTdHJpbmc+Ki8gPiBxdWVyeVBhcmFtZXRlcnMpIHsKICAgIGlmIChxdWVyeSAhPSBudWxsKSB7CiAgICAgIGlmIChxdWVyeVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ0JvdGggcXVlcnkgYW5kIHF1ZXJ5UGFyYW1ldGVycyBzcGVjaWZpZWQnKTsKICAgICAgfQogICAgICByZXR1cm4gX25vcm1hbGl6ZU9yU3Vic3RyaW5nKHF1ZXJ5LCBzdGFydCwgZW5kLCBfcXVlcnlDaGFyVGFibGUsCiAgICAgICAgICBlc2NhcGVEZWxpbWl0ZXJzOiB0cnVlKTsKICAgIH0KICAgIGlmIChxdWVyeVBhcmFtZXRlcnMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAgdmFyIHJlc3VsdCA9IFN0cmluZ0J1ZmZlcigpOwogICAgdmFyIHNlcGFyYXRvciA9ICIiOwoKICAgIHZvaWQgd3JpdGVQYXJhbWV0ZXIoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7CiAgICAgIHJlc3VsdC53cml0ZShzZXBhcmF0b3IpOwogICAgICBzZXBhcmF0b3IgPSAiJiI7CiAgICAgIHJlc3VsdC53cml0ZShVcmkuZW5jb2RlUXVlcnlDb21wb25lbnQoa2V5KSk7CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmlzTm90RW1wdHkpIHsKICAgICAgICByZXN1bHQud3JpdGUoIj0iKTsKICAgICAgICByZXN1bHQud3JpdGUoVXJpLmVuY29kZVF1ZXJ5Q29tcG9uZW50KHZhbHVlKSk7CiAgICAgIH0KICAgIH0KCiAgICBxdWVyeVBhcmFtZXRlcnMuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgICB3cml0ZVBhcmFtZXRlcihrZXksIHZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBJdGVyYWJsZSB2YWx1ZXMgPSB2YWx1ZTsKICAgICAgICBmb3IgKFN0cmluZyB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICAgIHdyaXRlUGFyYW1ldGVyKGtleSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9tYWtlRnJhZ21lbnQoU3RyaW5nIGZyYWdtZW50LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGlmIChmcmFnbWVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfbm9ybWFsaXplT3JTdWJzdHJpbmcoZnJhZ21lbnQsIHN0YXJ0LCBlbmQsIF9xdWVyeUNoYXJUYWJsZSwKICAgICAgICBlc2NhcGVEZWxpbWl0ZXJzOiB0cnVlKTsKICB9CgogIC8qKgogICAqIFBlcmZvcm1zIFJGQyAzOTg2IFBlcmNlbnQtRW5jb2RpbmcgTm9ybWFsaXphdGlvbi4KICAgKgogICAqIFJldHVybnMgYSByZXBsYWNlbWVudCBzdHJpbmcgdGhhdCBzaG91bGQgYmUgcmVwbGFjZSB0aGUgb3JpZ2luYWwgZXNjYXBlLgogICAqIFJldHVybnMgbnVsbCBpZiBubyByZXBsYWNlbWVudCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZXNjYXBlIGlzCiAgICogbm90IGZvciBhbiB1bnJlc2VydmVkIGNoYXJhY3RlciBhbmQgaXMgYWxyZWFkeSBub24tbG93ZXItY2FzZS4KICAgKgogICAqIFJldHVybnMgIiUiIGlmIHRoZSBlc2NhcGUgaXMgaW52YWxpZCAobm90IHR3byB2YWxpZCBoZXggZGlnaXRzIGZvbGxvd2luZwogICAqIHRoZSBwZXJjZW50IHNpZ24pLiBUaGUgY2FsbGluZyBjb2RlIHNob3VsZCByZXBsYWNlIHRoZSBwZXJjZW50CiAgICogc2lnbiB3aXRoICIlMjUiLCBidXQgbGVhdmUgdGhlIGZvbGxvd2luZyB0d28gY2hhcmFjdGVycyB1bm1vZGlmaWVkLgogICAqCiAgICogSWYgW2xvd2VyQ2FzZV0gaXMgdHJ1ZSwgYSBzaW5nbGUgY2hhcmFjdGVyIHJldHVybmVkIGlzIGFsd2F5cyBsb3dlciBjYXNlLAogICAqLwogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZUVzY2FwZShTdHJpbmcgc291cmNlLCBpbnQgaW5kZXgsIGJvb2wgbG93ZXJDYXNlKSB7CiAgICBhc3NlcnQoc291cmNlLmNvZGVVbml0QXQoaW5kZXgpID09IF9QRVJDRU5UKTsKICAgIGlmIChpbmRleCArIDIgPj0gc291cmNlLmxlbmd0aCkgewogICAgICByZXR1cm4gIiUiOyAvLyBNYXJrcyB0aGUgZXNjYXBlIGFzIGludmFsaWQuCiAgICB9CiAgICBpbnQgZmlyc3REaWdpdCA9IHNvdXJjZS5jb2RlVW5pdEF0KGluZGV4ICsgMSk7CiAgICBpbnQgc2Vjb25kRGlnaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpbmRleCArIDIpOwogICAgaW50IGZpcnN0RGlnaXRWYWx1ZSA9IGhleERpZ2l0VmFsdWUoZmlyc3REaWdpdCk7CiAgICBpbnQgc2Vjb25kRGlnaXRWYWx1ZSA9IGhleERpZ2l0VmFsdWUoc2Vjb25kRGlnaXQpOwogICAgaWYgKGZpcnN0RGlnaXRWYWx1ZSA8IDAgfHwgc2Vjb25kRGlnaXRWYWx1ZSA8IDApIHsKICAgICAgcmV0dXJuICIlIjsgLy8gTWFya3MgdGhlIGVzY2FwZSBhcyBpbnZhbGlkLgogICAgfQogICAgaW50IHZhbHVlID0gZmlyc3REaWdpdFZhbHVlICogMTYgKyBzZWNvbmREaWdpdFZhbHVlOwogICAgaWYgKF9pc1VucmVzZXJ2ZWRDaGFyKHZhbHVlKSkgewogICAgICBpZiAobG93ZXJDYXNlICYmIF9VUFBFUl9DQVNFX0EgPD0gdmFsdWUgJiYgX1VQUEVSX0NBU0VfWiA+PSB2YWx1ZSkgewogICAgICAgIHZhbHVlIHw9IDB4MjA7CiAgICAgIH0KICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUpOwogICAgfQogICAgaWYgKGZpcnN0RGlnaXQgPj0gX0xPV0VSX0NBU0VfQSB8fCBzZWNvbmREaWdpdCA+PSBfTE9XRVJfQ0FTRV9BKSB7CiAgICAgIC8vIEVpdGhlciBkaWdpdCBpcyBsb3dlciBjYXNlLgogICAgICByZXR1cm4gc291cmNlLnN1YnN0cmluZyhpbmRleCwgaW5kZXggKyAzKS50b1VwcGVyQ2FzZSgpOwogICAgfQogICAgLy8gRXNjYXBlIGlzIHJldGFpbmVkLCBhbmQgaXMgYWxyZWFkeSBub24tbG93ZXIgY2FzZSwgc28gcmV0dXJuIG51bGwgdG8KICAgIC8vIHJlcHJlc2VudCAibm8gcmVwbGFjZW1lbnQgbmVjZXNzYXJ5Ii4KICAgIHJldHVybiBudWxsOwogIH0KCiAgc3RhdGljIFN0cmluZyBfZXNjYXBlQ2hhcihpbnQgY2hhcikgewogICAgYXNzZXJ0KGNoYXIgPD0gMHgxMGZmZmYpOyAvLyBJdCdzIGEgdmFsaWQgdW5pY29kZSBjb2RlIHBvaW50LgogICAgTGlzdDxpbnQ+IGNvZGVVbml0czsKICAgIGlmIChjaGFyIDwgMHg4MCkgewogICAgICAvLyBBU0NJSSwgYSBzaW5nbGUgcGVyY2VudCBlbmNvZGVkIHNlcXVlbmNlLgogICAgICBjb2RlVW5pdHMgPSBMaXN0KDMpOwogICAgICBjb2RlVW5pdHNbMF0gPSBfUEVSQ0VOVDsKICAgICAgY29kZVVuaXRzWzFdID0gX2hleERpZ2l0cy5jb2RlVW5pdEF0KGNoYXIgPj4gNCk7CiAgICAgIGNvZGVVbml0c1syXSA9IF9oZXhEaWdpdHMuY29kZVVuaXRBdChjaGFyICYgMHhmKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIERvIFVURi04IGVuY29kaW5nIG9mIGNoYXJhY3RlciwgdGhlbiBwZXJjZW50IGVuY29kZSBieXRlcy4KICAgICAgaW50IGZsYWcgPSAweGMwOyAvLyBUaGUgaGlnaC1iaXQgbWFya2VycyBvbiB0aGUgZmlyc3QgYnl0ZSBvZiBVVEYtOC4KICAgICAgaW50IGVuY29kZWRCeXRlcyA9IDI7CiAgICAgIGlmIChjaGFyID4gMHg3ZmYpIHsKICAgICAgICBmbGFnID0gMHhlMDsKICAgICAgICBlbmNvZGVkQnl0ZXMgPSAzOwogICAgICAgIGlmIChjaGFyID4gMHhmZmZmKSB7CiAgICAgICAgICBlbmNvZGVkQnl0ZXMgPSA0OwogICAgICAgICAgZmxhZyA9IDB4ZjA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvZGVVbml0cyA9IExpc3QoMyAqIGVuY29kZWRCeXRlcyk7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIHdoaWxlICgtLWVuY29kZWRCeXRlcyA+PSAwKSB7CiAgICAgICAgaW50IGJ5dGUgPSAoKGNoYXIgPj4gKDYgKiBlbmNvZGVkQnl0ZXMpKSAmIDB4M2YpIHwgZmxhZzsKICAgICAgICBjb2RlVW5pdHNbaW5kZXhdID0gX1BFUkNFTlQ7CiAgICAgICAgY29kZVVuaXRzW2luZGV4ICsgMV0gPSBfaGV4RGlnaXRzLmNvZGVVbml0QXQoYnl0ZSA+PiA0KTsKICAgICAgICBjb2RlVW5pdHNbaW5kZXggKyAyXSA9IF9oZXhEaWdpdHMuY29kZVVuaXRBdChieXRlICYgMHhmKTsKICAgICAgICBpbmRleCArPSAzOwogICAgICAgIGZsYWcgPSAweDgwOyAvLyBGb2xsb3dpbmcgYnl0ZXMgaGF2ZSBvbmx5IGhpZ2ggYml0IHNldC4KICAgICAgfQogICAgfQogICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgfQoKICAvKioKICAgKiBOb3JtYWxpemVzIHVzaW5nIFtfbm9ybWFsaXplXSBvciByZXR1cm5zIHN1YnN0cmluZyBvZiBvcmlnaW5hbC4KICAgKgogICAqIElmIFtfbm9ybWFsaXplXSByZXR1cm5zIGBudWxsYCAob3JpZ2luYWwgY29udGVudCBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpLAogICAqIHRoaXMgbWV0aG9kcyByZXR1cm5zIHRoZSBzdWJzdHJpbmcgaWYgW2NvbXBvbmVudF0gZnJvbSBbc3RhcnRdIHRvIFtlbmRdLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZU9yU3Vic3RyaW5nKAogICAgICBTdHJpbmcgY29tcG9uZW50LCBpbnQgc3RhcnQsIGludCBlbmQsIExpc3Q8aW50PiBjaGFyVGFibGUsCiAgICAgIHtib29sIGVzY2FwZURlbGltaXRlcnMgPSBmYWxzZX0pIHsKICAgIHJldHVybiBfbm9ybWFsaXplKGNvbXBvbmVudCwgc3RhcnQsIGVuZCwgY2hhclRhYmxlLAogICAgICAgICAgICBlc2NhcGVEZWxpbWl0ZXJzOiBlc2NhcGVEZWxpbWl0ZXJzKSA/PwogICAgICAgIGNvbXBvbmVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgfQoKICAvKioKICAgKiBSdW5zIHRocm91Z2ggY29tcG9uZW50IGNoZWNraW5nIHRoYXQgZWFjaCBjaGFyYWN0ZXIgaXMgdmFsaWQgYW5kCiAgICogbm9ybWFsaXplIHBlcmNlbnQgZXNjYXBlcy4KICAgKgogICAqIFVzZXMgW2NoYXJUYWJsZV0gdG8gY2hlY2sgaWYgYSBub24tYCVgIGNoYXJhY3RlciBpcyBhbGxvd2VkLgogICAqIEVhY2ggYCVgIGNoYXJhY3RlciBtdXN0IGJlIGZvbGxvd2VkIGJ5IHR3byBoZXggZGlnaXRzLgogICAqIElmIHRoZSBoZXgtZGlnaXRzIGFyZSBsb3dlciBjYXNlIGxldHRlcnMsIHRoZXkgYXJlIGNvbnZlcnRlZCB0bwogICAqIHVwcGVyIGNhc2UuCiAgICoKICAgKiBSZXR1cm5zIGBudWxsYCBpZiB0aGUgb3JpZ2luYWwgY29udGVudCB3YXMgYWxyZWFkeSBub3JtYWxpemVkLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZSgKICAgICAgU3RyaW5nIGNvbXBvbmVudCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0PGludD4gY2hhclRhYmxlLAogICAgICB7Ym9vbCBlc2NhcGVEZWxpbWl0ZXJzID0gZmFsc2V9KSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgaW50IHNlY3Rpb25TdGFydCA9IHN0YXJ0OwogICAgaW50IGluZGV4ID0gc3RhcnQ7CiAgICAvLyBMb29wIHdoaWxlIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGFuZCBlc2NhcGVzIGNvcnJlY3QgYW5kIHVwcGVyLWNhc2UuCiAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHsKICAgICAgaW50IGNoYXIgPSBjb21wb25lbnQuY29kZVVuaXRBdChpbmRleCk7CiAgICAgIGlmIChjaGFyIDwgMTI3ICYmIChjaGFyVGFibGVbY2hhciA+PiA0XSAmICgxIDw8IChjaGFyICYgMHgwZikpKSAhPSAwKSB7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnQ7CiAgICAgICAgaW50IHNvdXJjZUxlbmd0aDsKICAgICAgICBpZiAoY2hhciA9PSBfUEVSQ0VOVCkgewogICAgICAgICAgcmVwbGFjZW1lbnQgPSBfbm9ybWFsaXplRXNjYXBlKGNvbXBvbmVudCwgaW5kZXgsIGZhbHNlKTsKICAgICAgICAgIC8vIFJldHVybnMgbnVsbCBpZiB3ZSBzaG91bGQga2VlcCB0aGUgZXhpc3RpbmcgZXNjYXBlLgogICAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IG51bGwpIHsKICAgICAgICAgICAgaW5kZXggKz0gMzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBSZXR1cm5zICIlIiBpZiB3ZSBzaG91bGQgZXNjYXBlIHRoZSBleGlzdGluZyBwZXJjZW50LgogICAgICAgICAgaWYgKCIlIiA9PSByZXBsYWNlbWVudCkgewogICAgICAgICAgICByZXBsYWNlbWVudCA9ICIlMjUiOwogICAgICAgICAgICBzb3VyY2VMZW5ndGggPSAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc291cmNlTGVuZ3RoID0gMzsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCFlc2NhcGVEZWxpbWl0ZXJzICYmIF9pc0dlbmVyYWxEZWxpbWl0ZXIoY2hhcikpIHsKICAgICAgICAgIF9mYWlsKGNvbXBvbmVudCwgaW5kZXgsICJJbnZhbGlkIGNoYXJhY3RlciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzb3VyY2VMZW5ndGggPSAxOwogICAgICAgICAgaWYgKChjaGFyICYgMHhGQzAwKSA9PSAweEQ4MDApIHsKICAgICAgICAgICAgLy8gUG9zc2libGUgbGVhZCBzdXJyb2dhdGUuCiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPCBlbmQpIHsKICAgICAgICAgICAgICBpbnQgdGFpbCA9IGNvbXBvbmVudC5jb2RlVW5pdEF0KGluZGV4ICsgMSk7CiAgICAgICAgICAgICAgaWYgKCh0YWlsICYgMHhGQzAwKSA9PSAweERDMDApIHsKICAgICAgICAgICAgICAgIC8vIFRhaWwgc3Vycm9nYXRlLgogICAgICAgICAgICAgICAgc291cmNlTGVuZ3RoID0gMjsKICAgICAgICAgICAgICAgIGNoYXIgPSAweDEwMDAwIHwgKChjaGFyICYgMHgzZmYpIDw8IDEwKSB8ICh0YWlsICYgMHgzZmYpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmVwbGFjZW1lbnQgPSBfZXNjYXBlQ2hhcihjaGFyKTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBidWZmZXIud3JpdGUoY29tcG9uZW50LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KSk7CiAgICAgICAgYnVmZmVyLndyaXRlKHJlcGxhY2VtZW50KTsKICAgICAgICBpbmRleCArPSBzb3VyY2VMZW5ndGg7CiAgICAgICAgc2VjdGlvblN0YXJ0ID0gaW5kZXg7CiAgICAgIH0KICAgIH0KICAgIGlmIChidWZmZXIgPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChzZWN0aW9uU3RhcnQgPCBlbmQpIHsKICAgICAgYnVmZmVyLndyaXRlKGNvbXBvbmVudC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBlbmQpKTsKICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyBib29sIF9pc1NjaGVtZUNoYXJhY3RlcihpbnQgY2gpIHsKICAgIHJldHVybiBjaCA8IDEyOCAmJiAoKF9zY2hlbWVUYWJsZVtjaCA+PiA0XSAmICgxIDw8IChjaCAmIDB4MGYpKSkgIT0gMCk7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNHZW5lcmFsRGVsaW1pdGVyKGludCBjaCkgewogICAgcmV0dXJuIGNoIDw9IF9SSUdIVF9CUkFDS0VUICYmCiAgICAgICAgKChfZ2VuRGVsaW1pdGVyc1RhYmxlW2NoID4+IDRdICYgKDEgPDwgKGNoICYgMHgwZikpKSAhPSAwKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgVVJJIGlzIGFic29sdXRlLgogICAqLwogIGJvb2wgZ2V0IGlzQWJzb2x1dGUgPT4gc2NoZW1lICE9ICIiICYmIGZyYWdtZW50ID09ICIiOwoKICBTdHJpbmcgX21lcmdlUGF0aHMoU3RyaW5nIGJhc2UsIFN0cmluZyByZWZlcmVuY2UpIHsKICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2FzZTogYWJzb2x1dGUgYmFzZSwgcmVmZXJlbmNlIGJlZ2lubmluZyB3aXRoICIuLi8iLgogICAgaW50IGJhY2tDb3VudCA9IDA7CiAgICBpbnQgcmVmU3RhcnQgPSAwOwogICAgLy8gQ291bnQgbnVtYmVyIG9mICIuLi8iIGF0IGJlZ2lubmluZyBvZiByZWZlcmVuY2UuCiAgICB3aGlsZSAocmVmZXJlbmNlLnN0YXJ0c1dpdGgoIi4uLyIsIHJlZlN0YXJ0KSkgewogICAgICByZWZTdGFydCArPSAzOwogICAgICBiYWNrQ291bnQrKzsKICAgIH0KCiAgICAvLyBEcm9wIGxhc3Qgc2VnbWVudCAtIGV2ZXJ5dGhpbmcgYWZ0ZXIgbGFzdCAnLycgb2YgYmFzZS4KICAgIGludCBiYXNlRW5kID0gYmFzZS5sYXN0SW5kZXhPZignLycpOwogICAgLy8gRHJvcCBleHRyYSBzZWdtZW50cyBmb3IgZWFjaCBsZWFkaW5nICIuLi8iIG9mIHJlZmVyZW5jZS4KICAgIHdoaWxlIChiYXNlRW5kID4gMCAmJiBiYWNrQ291bnQgPiAwKSB7CiAgICAgIGludCBuZXdFbmQgPSBiYXNlLmxhc3RJbmRleE9mKCcvJywgYmFzZUVuZCAtIDEpOwogICAgICBpZiAobmV3RW5kIDwgMCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGludCBkZWx0YSA9IGJhc2VFbmQgLSBuZXdFbmQ7CiAgICAgIC8vIElmIHdlIHNlZSBhICIuIiBvciAiLi4iIHNlZ21lbnQgaW4gYmFzZSwgc3RvcCBoZXJlIGFuZCBsZXQKICAgICAgLy8gX3JlbW92ZURvdFNlZ21lbnRzIGhhbmRsZSBpdC4KICAgICAgaWYgKChkZWx0YSA9PSAyIHx8IGRlbHRhID09IDMpICYmCiAgICAgICAgICBiYXNlLmNvZGVVbml0QXQobmV3RW5kICsgMSkgPT0gX0RPVCAmJgogICAgICAgICAgKGRlbHRhID09IDIgfHwgYmFzZS5jb2RlVW5pdEF0KG5ld0VuZCArIDIpID09IF9ET1QpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgYmFzZUVuZCA9IG5ld0VuZDsKICAgICAgYmFja0NvdW50LS07CiAgICB9CiAgICByZXR1cm4gYmFzZS5yZXBsYWNlUmFuZ2UoCiAgICAgICAgYmFzZUVuZCArIDEsIG51bGwsIHJlZmVyZW5jZS5zdWJzdHJpbmcocmVmU3RhcnQgLSAzICogYmFja0NvdW50KSk7CiAgfQoKICAvLy8gTWFrZSBhIGd1ZXNzIGF0IHdoZXRoZXIgYSBwYXRoIGNvbnRhaW5zIGEgYC4uYCBvciBgLmAgc2VnbWVudC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIHByaW1pdGl2ZSB0ZXN0IHRoYXQgY2FuIGNhdXNlIGZhbHNlIHBvc2l0aXZlcy4KICAvLy8gSXQncyBvbmx5IHVzZWQgdG8gYXZvaWQgYSBtb3JlIGV4cGVuc2l2ZSBvcGVyYXRpb24gaW4gdGhlIGNhc2Ugd2hlcmUKICAvLy8gaXQncyBub3QgbmVjZXNzYXJ5LgogIHN0YXRpYyBib29sIF9tYXlDb250YWluRG90U2VnbWVudHMoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy4nKSkgcmV0dXJuIHRydWU7CiAgICBpbnQgaW5kZXggPSBwYXRoLmluZGV4T2YoIi8uIik7CiAgICByZXR1cm4gaW5kZXggIT0gLTE7CiAgfQoKICAvLy8gUmVtb3ZlcyAnLicgYW5kICcuLicgc2VnbWVudHMgZnJvbSBhIHBhdGguCiAgLy8vCiAgLy8vIEZvbGxvd3MgdGhlIFJGQyAyOTg2ICJyZW1vdmUgZG90IHNlZ21lbnRzIiBhbGdvcml0aG0uCiAgLy8vIFRoaXMgYWxnb3JpdGhtIGlzIG9ubHkgdXNlZCBvbiBwYXRocyBvZiBVUklzIHdpdGggYSBzY2hlbWUsCiAgLy8vIGFuZCBpdCB0cmVhdHMgdGhlIHBhdGggYXMgaWYgaXQgaXMgYWJzb2x1dGUgKGxlYWRpbmcgJy4uJyBhcmUgcmVtb3ZlZCkuCiAgc3RhdGljIFN0cmluZyBfcmVtb3ZlRG90U2VnbWVudHMoU3RyaW5nIHBhdGgpIHsKICAgIGlmICghX21heUNvbnRhaW5Eb3RTZWdtZW50cyhwYXRoKSkgcmV0dXJuIHBhdGg7CiAgICBhc3NlcnQocGF0aC5pc05vdEVtcHR5KTsgLy8gQW4gZW1wdHkgcGF0aCB3b3VsZCBub3QgaGF2ZSBkb3Qgc2VnbWVudHMuCiAgICBMaXN0PFN0cmluZz4gb3V0cHV0ID0gW107CiAgICBib29sIGFwcGVuZFNsYXNoID0gZmFsc2U7CiAgICBmb3IgKFN0cmluZyBzZWdtZW50IGluIHBhdGguc3BsaXQoIi8iKSkgewogICAgICBhcHBlbmRTbGFzaCA9IGZhbHNlOwogICAgICBpZiAoc2VnbWVudCA9PSAiLi4iKSB7CiAgICAgICAgaWYgKG91dHB1dC5pc05vdEVtcHR5KSB7CiAgICAgICAgICBvdXRwdXQucmVtb3ZlTGFzdCgpOwogICAgICAgICAgaWYgKG91dHB1dC5pc0VtcHR5KSB7CiAgICAgICAgICAgIG91dHB1dC5hZGQoIiIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhcHBlbmRTbGFzaCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoIi4iID09IHNlZ21lbnQpIHsKICAgICAgICBhcHBlbmRTbGFzaCA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0cHV0LmFkZChzZWdtZW50KTsKICAgICAgfQogICAgfQogICAgaWYgKGFwcGVuZFNsYXNoKSBvdXRwdXQuYWRkKCIiKTsKICAgIHJldHVybiBvdXRwdXQuam9pbigiLyIpOwogIH0KCiAgLy8vIFJlbW92ZXMgYWxsIGAuYCBzZWdtZW50cyBhbmQgYW55IG5vbi1sZWFkaW5nIGAuLmAgc2VnbWVudHMuCiAgLy8vCiAgLy8vIElmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBzY2hlbWUsCiAgLy8vIGFuZCBbYWxsb3dTY2hlbWVdIGlzIGZhbHNlLCB0aGUgY29sb24gaXMgZXNjYXBlZC4KICAvLy8KICAvLy8gUmVtb3ZpbmcgdGhlICIuLiIgZnJvbSBhICJiYXIvZm9vLy4uIiBzZXF1ZW5jZSByZXN1bHRzIGluICJiYXIvIgogIC8vLyAodHJhaWxpbmcgIi8iKS4gSWYgdGhlIGVudGlyZSBwYXRoIGlzIHJlbW92ZWQgKGJlY2F1c2UgaXQgY29udGFpbnMgYXMKICAvLy8gbWFueSAiLi4iIHNlZ21lbnRzIGFzIHJlYWwgc2VnbWVudHMpLCB0aGUgcmVzdWx0IGlzICIuLyIuCiAgLy8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYW4gZW1wdHkgc3RyaW5nLCB3aGljaCByZXByZXNlbnRzICJubyBwYXRoIiwKICAvLy8gd2hlbiB5b3UgcmVzb2x2ZSBpdCBhZ2FpbnN0IGEgYmFzZSBVUkkgd2l0aCBhIHBhdGggd2l0aCBhIG5vbi1lbXB0eQogIC8vLyBmaW5hbCBzZWdtZW50LgogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZVJlbGF0aXZlUGF0aChTdHJpbmcgcGF0aCwgYm9vbCBhbGxvd1NjaGVtZSkgewogICAgYXNzZXJ0KCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSk7IC8vIE9ubHkgZ2V0IGNhbGxlZCBmb3IgcmVsYXRpdmUgcGF0aHMuCiAgICBpZiAoIV9tYXlDb250YWluRG90U2VnbWVudHMocGF0aCkpIHsKICAgICAgaWYgKCFhbGxvd1NjaGVtZSkgcGF0aCA9IF9lc2NhcGVTY2hlbWUocGF0aCk7CiAgICAgIHJldHVybiBwYXRoOwogICAgfQogICAgYXNzZXJ0KHBhdGguaXNOb3RFbXB0eSk7IC8vIEFuIGVtcHR5IHBhdGggd291bGQgbm90IGhhdmUgZG90IHNlZ21lbnRzLgogICAgTGlzdDxTdHJpbmc+IG91dHB1dCA9IFtdOwogICAgYm9vbCBhcHBlbmRTbGFzaCA9IGZhbHNlOwogICAgZm9yIChTdHJpbmcgc2VnbWVudCBpbiBwYXRoLnNwbGl0KCIvIikpIHsKICAgICAgYXBwZW5kU2xhc2ggPSBmYWxzZTsKICAgICAgaWYgKCIuLiIgPT0gc2VnbWVudCkgewogICAgICAgIGlmICghb3V0cHV0LmlzRW1wdHkgJiYgb3V0cHV0Lmxhc3QgIT0gIi4uIikgewogICAgICAgICAgb3V0cHV0LnJlbW92ZUxhc3QoKTsKICAgICAgICAgIGFwcGVuZFNsYXNoID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgb3V0cHV0LmFkZCgiLi4iKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIi4iID09IHNlZ21lbnQpIHsKICAgICAgICBhcHBlbmRTbGFzaCA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0cHV0LmFkZChzZWdtZW50KTsKICAgICAgfQogICAgfQogICAgaWYgKG91dHB1dC5pc0VtcHR5IHx8IChvdXRwdXQubGVuZ3RoID09IDEgJiYgb3V0cHV0WzBdLmlzRW1wdHkpKSB7CiAgICAgIHJldHVybiAiLi8iOwogICAgfQogICAgaWYgKGFwcGVuZFNsYXNoIHx8IG91dHB1dC5sYXN0ID09ICcuLicpIG91dHB1dC5hZGQoIiIpOwogICAgaWYgKCFhbGxvd1NjaGVtZSkgb3V0cHV0WzBdID0gX2VzY2FwZVNjaGVtZShvdXRwdXRbMF0pOwogICAgcmV0dXJuIG91dHB1dC5qb2luKCIvIik7CiAgfQoKICAvLy8gSWYgW3BhdGhdIHN0YXJ0cyB3aXRoIGEgdmFsaWQgc2NoZW1lLCBlc2NhcGUgdGhlIHBlcmNlbnQuCiAgc3RhdGljIFN0cmluZyBfZXNjYXBlU2NoZW1lKFN0cmluZyBwYXRoKSB7CiAgICBpZiAocGF0aC5sZW5ndGggPj0gMiAmJiBfaXNBbHBoYWJldGljQ2hhcmFjdGVyKHBhdGguY29kZVVuaXRBdCgwKSkpIHsKICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaW50IGNoYXIgPSBwYXRoLmNvZGVVbml0QXQoaSk7CiAgICAgICAgaWYgKGNoYXIgPT0gX0NPTE9OKSB7CiAgICAgICAgICByZXR1cm4gIiR7cGF0aC5zdWJzdHJpbmcoMCwgaSl9JTNBJHtwYXRoLnN1YnN0cmluZyhpICsgMSl9IjsKICAgICAgICB9CiAgICAgICAgaWYgKGNoYXIgPiAxMjcgfHwKICAgICAgICAgICAgKChfc2NoZW1lVGFibGVbY2hhciA+PiA0XSAmICgxIDw8IChjaGFyICYgMHgwZikpKSA9PSAwKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGF0aDsKICB9CgogIFVyaSByZXNvbHZlKFN0cmluZyByZWZlcmVuY2UpIHsKICAgIHJldHVybiByZXNvbHZlVXJpKFVyaS5wYXJzZShyZWZlcmVuY2UpKTsKICB9CgogIFVyaSByZXNvbHZlVXJpKFVyaSByZWZlcmVuY2UpIHsKICAgIC8vIEZyb20gUkZDIDM5ODYuCiAgICBTdHJpbmcgdGFyZ2V0U2NoZW1lOwogICAgU3RyaW5nIHRhcmdldFVzZXJJbmZvID0gIiI7CiAgICBTdHJpbmcgdGFyZ2V0SG9zdDsKICAgIGludCB0YXJnZXRQb3J0OwogICAgU3RyaW5nIHRhcmdldFBhdGg7CiAgICBTdHJpbmcgdGFyZ2V0UXVlcnk7CiAgICBpZiAocmVmZXJlbmNlLnNjaGVtZS5pc05vdEVtcHR5KSB7CiAgICAgIHRhcmdldFNjaGVtZSA9IHJlZmVyZW5jZS5zY2hlbWU7CiAgICAgIGlmIChyZWZlcmVuY2UuaGFzQXV0aG9yaXR5KSB7CiAgICAgICAgdGFyZ2V0VXNlckluZm8gPSByZWZlcmVuY2UudXNlckluZm87CiAgICAgICAgdGFyZ2V0SG9zdCA9IHJlZmVyZW5jZS5ob3N0OwogICAgICAgIHRhcmdldFBvcnQgPSByZWZlcmVuY2UuaGFzUG9ydCA/IHJlZmVyZW5jZS5wb3J0IDogbnVsbDsKICAgICAgfQogICAgICB0YXJnZXRQYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHJlZmVyZW5jZS5wYXRoKTsKICAgICAgaWYgKHJlZmVyZW5jZS5oYXNRdWVyeSkgewogICAgICAgIHRhcmdldFF1ZXJ5ID0gcmVmZXJlbmNlLnF1ZXJ5OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0YXJnZXRTY2hlbWUgPSB0aGlzLnNjaGVtZTsKICAgICAgaWYgKHJlZmVyZW5jZS5oYXNBdXRob3JpdHkpIHsKICAgICAgICB0YXJnZXRVc2VySW5mbyA9IHJlZmVyZW5jZS51c2VySW5mbzsKICAgICAgICB0YXJnZXRIb3N0ID0gcmVmZXJlbmNlLmhvc3Q7CiAgICAgICAgdGFyZ2V0UG9ydCA9CiAgICAgICAgICAgIF9tYWtlUG9ydChyZWZlcmVuY2UuaGFzUG9ydCA/IHJlZmVyZW5jZS5wb3J0IDogbnVsbCwgdGFyZ2V0U2NoZW1lKTsKICAgICAgICB0YXJnZXRQYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHJlZmVyZW5jZS5wYXRoKTsKICAgICAgICBpZiAocmVmZXJlbmNlLmhhc1F1ZXJ5KSB0YXJnZXRRdWVyeSA9IHJlZmVyZW5jZS5xdWVyeTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0YXJnZXRVc2VySW5mbyA9IHRoaXMuX3VzZXJJbmZvOwogICAgICAgIHRhcmdldEhvc3QgPSB0aGlzLl9ob3N0OwogICAgICAgIHRhcmdldFBvcnQgPSB0aGlzLl9wb3J0OwogICAgICAgIGlmIChyZWZlcmVuY2UucGF0aCA9PSAiIikgewogICAgICAgICAgdGFyZ2V0UGF0aCA9IHRoaXMucGF0aDsKICAgICAgICAgIGlmIChyZWZlcmVuY2UuaGFzUXVlcnkpIHsKICAgICAgICAgICAgdGFyZ2V0UXVlcnkgPSByZWZlcmVuY2UucXVlcnk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0YXJnZXRRdWVyeSA9IHRoaXMuX3F1ZXJ5OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAocmVmZXJlbmNlLmhhc0Fic29sdXRlUGF0aCkgewogICAgICAgICAgICB0YXJnZXRQYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHJlZmVyZW5jZS5wYXRoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIFJGQyAzOTg2IGJlaGF2aW9yIGZvciBtZXJnaW5nLgogICAgICAgICAgICBpZiAodGhpcy5oYXNFbXB0eVBhdGgpIHsKICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzQXV0aG9yaXR5KSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzU2NoZW1lKSB7CiAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIHBhdGggcmVsYXRpdmUgaWYgbm8gc2NoZW1lIG9yIGF1dGhvcml0eS4KICAgICAgICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IHJlZmVyZW5jZS5wYXRoOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgZG90LXNlZ21lbnRzIGlmIHRoZSBwYXRoIGlzIHB1dAogICAgICAgICAgICAgICAgICAvLyBiZW5lYXRoIGEgc2NoZW1lLgogICAgICAgICAgICAgICAgICB0YXJnZXRQYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHJlZmVyZW5jZS5wYXRoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gUkZDIGFsZ29yaXRobSBmb3IgYmFzZSB3aXRoIGF1dGhvcml0eSBhbmQgZW1wdHkgcGF0aC4KICAgICAgICAgICAgICAgIHRhcmdldFBhdGggPSBfcmVtb3ZlRG90U2VnbWVudHMoIi8iICsgcmVmZXJlbmNlLnBhdGgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgbWVyZ2VkUGF0aCA9IF9tZXJnZVBhdGhzKHRoaXMucGF0aCwgcmVmZXJlbmNlLnBhdGgpOwogICAgICAgICAgICAgIGlmICh0aGlzLmhhc1NjaGVtZSB8fCB0aGlzLmhhc0F1dGhvcml0eSB8fCB0aGlzLmhhc0Fic29sdXRlUGF0aCkgewogICAgICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IF9yZW1vdmVEb3RTZWdtZW50cyhtZXJnZWRQYXRoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gTm9uLVJGQyAzOTg2IGJlaGF2aW9yLgogICAgICAgICAgICAgICAgLy8gSWYgYm90aCBiYXNlIGFuZCByZWZlcmVuY2UgYXJlIHJlbGF0aXZlIHBhdGhzLAogICAgICAgICAgICAgICAgLy8gYWxsb3cgdGhlIG1lcmdlZCBwYXRoIHRvIHN0YXJ0IHdpdGggIi4uIi4KICAgICAgICAgICAgICAgIC8vIFRoZSBSRkMgb25seSBzcGVjaWZpZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIGJhc2UgaGFzIGEgc2NoZW1lLgogICAgICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IF9ub3JtYWxpemVSZWxhdGl2ZVBhdGgoCiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUGF0aCwgdGhpcy5oYXNTY2hlbWUgfHwgdGhpcy5oYXNBdXRob3JpdHkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHJlZmVyZW5jZS5oYXNRdWVyeSkgdGFyZ2V0UXVlcnkgPSByZWZlcmVuY2UucXVlcnk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBTdHJpbmcgZnJhZ21lbnQgPSByZWZlcmVuY2UuaGFzRnJhZ21lbnQgPyByZWZlcmVuY2UuZnJhZ21lbnQgOiBudWxsOwogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKHRhcmdldFNjaGVtZSwgdGFyZ2V0VXNlckluZm8sIHRhcmdldEhvc3QsIHRhcmdldFBvcnQsCiAgICAgICAgdGFyZ2V0UGF0aCwgdGFyZ2V0UXVlcnksIGZyYWdtZW50KTsKICB9CgogIGJvb2wgZ2V0IGhhc1NjaGVtZSA9PiBzY2hlbWUuaXNOb3RFbXB0eTsKCiAgYm9vbCBnZXQgaGFzQXV0aG9yaXR5ID0+IF9ob3N0ICE9IG51bGw7CgogIGJvb2wgZ2V0IGhhc1BvcnQgPT4gX3BvcnQgIT0gbnVsbDsKCiAgYm9vbCBnZXQgaGFzUXVlcnkgPT4gX3F1ZXJ5ICE9IG51bGw7CgogIGJvb2wgZ2V0IGhhc0ZyYWdtZW50ID0+IF9mcmFnbWVudCAhPSBudWxsOwoKICBib29sIGdldCBoYXNFbXB0eVBhdGggPT4gcGF0aC5pc0VtcHR5OwoKICBib29sIGdldCBoYXNBYnNvbHV0ZVBhdGggPT4gcGF0aC5zdGFydHNXaXRoKCcvJyk7CgogIFN0cmluZyBnZXQgb3JpZ2luIHsKICAgIGlmIChzY2hlbWUgPT0gIiIpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiQ2Fubm90IHVzZSBvcmlnaW4gd2l0aG91dCBhIHNjaGVtZTogJHRoaXMiKTsKICAgIH0KICAgIGlmIChzY2hlbWUgIT0gImh0dHAiICYmIHNjaGVtZSAhPSAiaHR0cHMiKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoCiAgICAgICAgICAiT3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSBzY2hlbWVzIGh0dHAgYW5kIGh0dHBzOiAkdGhpcyIpOwogICAgfQogICAgaWYgKF9ob3N0ID09IG51bGwgfHwgX2hvc3QgPT0gIiIpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigKICAgICAgICAgICJBICRzY2hlbWU6IFVSSSBzaG91bGQgaGF2ZSBhIG5vbi1lbXB0eSBob3N0IG5hbWU6ICR0aGlzIik7CiAgICB9CiAgICBpZiAoX3BvcnQgPT0gbnVsbCkgcmV0dXJuICIkc2NoZW1lOi8vJF9ob3N0IjsKICAgIHJldHVybiAiJHNjaGVtZTovLyRfaG9zdDokX3BvcnQiOwogIH0KCiAgU3RyaW5nIHRvRmlsZVBhdGgoe2Jvb2wgd2luZG93c30pIHsKICAgIGlmIChzY2hlbWUgIT0gIiIgJiYgc2NoZW1lICE9ICJmaWxlIikgewogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgJHNjaGVtZSBVUkkiKTsKICAgIH0KICAgIGlmIChxdWVyeSAhPSAiIikgewogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIHF1ZXJ5IGNvbXBvbmVudCIpOwogICAgfQogICAgaWYgKGZyYWdtZW50ICE9ICIiKSB7CiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgZnJhZ21lbnQgY29tcG9uZW50Iik7CiAgICB9CiAgICB3aW5kb3dzID8/PSBfaXNXaW5kb3dzOwogICAgcmV0dXJuIHdpbmRvd3MgPyBfdG9XaW5kb3dzRmlsZVBhdGgodGhpcykgOiBfdG9GaWxlUGF0aCgpOwogIH0KCiAgU3RyaW5nIF90b0ZpbGVQYXRoKCkgewogICAgaWYgKGhhc0F1dGhvcml0eSAmJiBob3N0ICE9ICIiKSB7CiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGV4dHJhY3QgYSBub24tV2luZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJICIKICAgICAgICAgICJ3aXRoIGFuIGF1dGhvcml0eSIpOwogICAgfQogICAgLy8gVXNlIHBhdGggc2VnbWVudHMgdG8gaGF2ZSBhbnkgZXNjYXBlcyB1bmVzY2FwZWQuCiAgICB2YXIgcGF0aFNlZ21lbnRzID0gdGhpcy5wYXRoU2VnbWVudHM7CiAgICBfY2hlY2tOb25XaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVycyhwYXRoU2VnbWVudHMsIGZhbHNlKTsKICAgIHZhciByZXN1bHQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChoYXNBYnNvbHV0ZVBhdGgpIHJlc3VsdC53cml0ZSgiLyIpOwogICAgcmVzdWx0LndyaXRlQWxsKHBhdGhTZWdtZW50cywgIi8iKTsKICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX3RvV2luZG93c0ZpbGVQYXRoKFVyaSB1cmkpIHsKICAgIGJvb2wgaGFzRHJpdmVMZXR0ZXIgPSBmYWxzZTsKICAgIHZhciBzZWdtZW50cyA9IHVyaS5wYXRoU2VnbWVudHM7CiAgICBpZiAoc2VnbWVudHMubGVuZ3RoID4gMCAmJgogICAgICAgIHNlZ21lbnRzWzBdLmxlbmd0aCA9PSAyICYmCiAgICAgICAgc2VnbWVudHNbMF0uY29kZVVuaXRBdCgxKSA9PSBfQ09MT04pIHsKICAgICAgX2NoZWNrV2luZG93c0RyaXZlTGV0dGVyKHNlZ21lbnRzWzBdLmNvZGVVbml0QXQoMCksIGZhbHNlKTsKICAgICAgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMoc2VnbWVudHMsIGZhbHNlLCAxKTsKICAgICAgaGFzRHJpdmVMZXR0ZXIgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMoc2VnbWVudHMsIGZhbHNlLCAwKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmICh1cmkuaGFzQWJzb2x1dGVQYXRoICYmICFoYXNEcml2ZUxldHRlcikgcmVzdWx0LndyaXRlKHIiXCIpOwogICAgaWYgKHVyaS5oYXNBdXRob3JpdHkpIHsKICAgICAgdmFyIGhvc3QgPSB1cmkuaG9zdDsKICAgICAgaWYgKGhvc3QuaXNOb3RFbXB0eSkgewogICAgICAgIHJlc3VsdC53cml0ZShyIlwiKTsKICAgICAgICByZXN1bHQud3JpdGUoaG9zdCk7CiAgICAgICAgcmVzdWx0LndyaXRlKHIiXCIpOwogICAgICB9CiAgICB9CiAgICByZXN1bHQud3JpdGVBbGwoc2VnbWVudHMsIHIiXCIpOwogICAgaWYgKGhhc0RyaXZlTGV0dGVyICYmIHNlZ21lbnRzLmxlbmd0aCA9PSAxKSByZXN1bHQud3JpdGUociJcIik7CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGdldCBfaXNQYXRoQWJzb2x1dGUgewogICAgcmV0dXJuIHBhdGggIT0gbnVsbCAmJiBwYXRoLnN0YXJ0c1dpdGgoJy8nKTsKICB9CgogIHZvaWQgX3dyaXRlQXV0aG9yaXR5KFN0cmluZ1Npbmsgc3MpIHsKICAgIGlmIChfdXNlckluZm8uaXNOb3RFbXB0eSkgewogICAgICBzcy53cml0ZShfdXNlckluZm8pOwogICAgICBzcy53cml0ZSgiQCIpOwogICAgfQogICAgaWYgKF9ob3N0ICE9IG51bGwpIHNzLndyaXRlKF9ob3N0KTsKICAgIGlmIChfcG9ydCAhPSBudWxsKSB7CiAgICAgIHNzLndyaXRlKCI6Iik7CiAgICAgIHNzLndyaXRlKF9wb3J0KTsKICAgIH0KICB9CgogIC8qKgogICAqIEFjY2VzcyB0aGUgc3RydWN0dXJlIG9mIGEgYGRhdGE6YCBVUkkuCiAgICoKICAgKiBSZXR1cm5zIGEgW1VyaURhdGFdIG9iamVjdCBmb3IgYGRhdGE6YCBVUklzIGFuZCBgbnVsbGAgZm9yIGFsbCBvdGhlcgogICAqIFVSSXMuCiAgICogVGhlIFtVcmlEYXRhXSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBtZWRpYSB0eXBlIGFuZCBkYXRhCiAgICogb2YgYSBgZGF0YTpgIFVSSS4KICAgKi8KICBVcmlEYXRhIGdldCBkYXRhID0+IChzY2hlbWUgPT0gImRhdGEiKSA/IFVyaURhdGEuZnJvbVVyaSh0aGlzKSA6IG51bGw7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBfdGV4dCA/Pz0gX2luaXRpYWxpemVUZXh0KCk7CiAgfQoKICBTdHJpbmcgX2luaXRpYWxpemVUZXh0KCkgewogICAgYXNzZXJ0KF90ZXh0ID09IG51bGwpOwogICAgU3RyaW5nQnVmZmVyIHNiID0gU3RyaW5nQnVmZmVyKCk7CiAgICBpZiAoc2NoZW1lLmlzTm90RW1wdHkpIHNiLi53cml0ZShzY2hlbWUpLi53cml0ZSgiOiIpOwogICAgaWYgKGhhc0F1dGhvcml0eSB8fCAoc2NoZW1lID09ICJmaWxlIikpIHsKICAgICAgLy8gRmlsZSBVUklTIGFsd2F5cyBoYXZlIHRoZSBhdXRob3JpdHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkuCiAgICAgIC8vIFRoZSBlbXB0eSBVUkkgbWVhbnMgImxvY2FsaG9zdCIuCiAgICAgIHNiLndyaXRlKCIvLyIpOwogICAgICBfd3JpdGVBdXRob3JpdHkoc2IpOwogICAgfQogICAgc2Iud3JpdGUocGF0aCk7CiAgICBpZiAoX3F1ZXJ5ICE9IG51bGwpIHNiLi53cml0ZSgiPyIpLi53cml0ZShfcXVlcnkpOwogICAgaWYgKF9mcmFnbWVudCAhPSBudWxsKSBzYi4ud3JpdGUoIiMiKS4ud3JpdGUoX2ZyYWdtZW50KTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBVcmkgJiYKICAgICAgICBzY2hlbWUgPT0gb3RoZXIuc2NoZW1lICYmCiAgICAgICAgaGFzQXV0aG9yaXR5ID09IG90aGVyLmhhc0F1dGhvcml0eSAmJgogICAgICAgIHVzZXJJbmZvID09IG90aGVyLnVzZXJJbmZvICYmCiAgICAgICAgaG9zdCA9PSBvdGhlci5ob3N0ICYmCiAgICAgICAgcG9ydCA9PSBvdGhlci5wb3J0ICYmCiAgICAgICAgcGF0aCA9PSBvdGhlci5wYXRoICYmCiAgICAgICAgaGFzUXVlcnkgPT0gb3RoZXIuaGFzUXVlcnkgJiYKICAgICAgICBxdWVyeSA9PSBvdGhlci5xdWVyeSAmJgogICAgICAgIGhhc0ZyYWdtZW50ID09IG90aGVyLmhhc0ZyYWdtZW50ICYmCiAgICAgICAgZnJhZ21lbnQgPT0gb3RoZXIuZnJhZ21lbnQ7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBfaGFzaENvZGVDYWNoZSA/Pz0gdG9TdHJpbmcoKS5oYXNoQ29kZTsKICB9CgogIHN0YXRpYyBMaXN0PFN0cmluZz4gX2NyZWF0ZUxpc3QoKSA9PiA8U3RyaW5nPltdOwoKICBzdGF0aWMgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBfc3BsaXRRdWVyeVN0cmluZ0FsbChTdHJpbmcgcXVlcnksCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZyA9IHV0Zjh9KSB7CiAgICB2YXIgcmVzdWx0ID0gPFN0cmluZywgTGlzdDxTdHJpbmc+Pnt9OwogICAgaW50IGkgPSAwOwogICAgaW50IHN0YXJ0ID0gMDsKICAgIGludCBlcXVhbHNJbmRleCA9IC0xOwoKICAgIHZvaWQgcGFyc2VQYWlyKGludCBzdGFydCwgaW50IGVxdWFsc0luZGV4LCBpbnQgZW5kKSB7CiAgICAgIFN0cmluZyBrZXk7CiAgICAgIFN0cmluZyB2YWx1ZTsKICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuOwogICAgICBpZiAoZXF1YWxzSW5kZXggPCAwKSB7CiAgICAgICAga2V5ID0gX3VyaURlY29kZShxdWVyeSwgc3RhcnQsIGVuZCwgZW5jb2RpbmcsIHRydWUpOwogICAgICAgIHZhbHVlID0gIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAga2V5ID0gX3VyaURlY29kZShxdWVyeSwgc3RhcnQsIGVxdWFsc0luZGV4LCBlbmNvZGluZywgdHJ1ZSk7CiAgICAgICAgdmFsdWUgPSBfdXJpRGVjb2RlKHF1ZXJ5LCBlcXVhbHNJbmRleCArIDEsIGVuZCwgZW5jb2RpbmcsIHRydWUpOwogICAgICB9CiAgICAgIHJlc3VsdC5wdXRJZkFic2VudChrZXksIF9jcmVhdGVMaXN0KS5hZGQodmFsdWUpOwogICAgfQoKICAgIHdoaWxlIChpIDwgcXVlcnkubGVuZ3RoKSB7CiAgICAgIGludCBjaGFyID0gcXVlcnkuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPT0gX0VRVUFMUykgewogICAgICAgIGlmIChlcXVhbHNJbmRleCA8IDApIGVxdWFsc0luZGV4ID0gaTsKICAgICAgfSBlbHNlIGlmIChjaGFyID09IF9BTVBFUlNBTkQpIHsKICAgICAgICBwYXJzZVBhaXIoc3RhcnQsIGVxdWFsc0luZGV4LCBpKTsKICAgICAgICBzdGFydCA9IGkgKyAxOwogICAgICAgIGVxdWFsc0luZGV4ID0gLTE7CiAgICAgIH0KICAgICAgaSsrOwogICAgfQogICAgcGFyc2VQYWlyKHN0YXJ0LCBlcXVhbHNJbmRleCwgaSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfdXJpRW5jb2RlKExpc3Q8aW50PiBjYW5vbmljYWxUYWJsZSwgU3RyaW5nIHRleHQsCiAgICAgIEVuY29kaW5nIGVuY29kaW5nLCBib29sIHNwYWNlVG9QbHVzKTsKCiAgLyoqCiAgICogQ29udmVydCBhIGJ5dGUgKDIgY2hhcmFjdGVyIGhleCBzZXF1ZW5jZSkgaW4gc3RyaW5nIFtzXSBzdGFydGluZwogICAqIGF0IHBvc2l0aW9uIFtwb3NdIHRvIGl0cyBvcmRpbmFsIHZhbHVlCiAgICovCiAgc3RhdGljIGludCBfaGV4Q2hhclBhaXJUb0J5dGUoU3RyaW5nIHMsIGludCBwb3MpIHsKICAgIGludCBieXRlID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAgICAgIHZhciBjaGFyQ29kZSA9IHMuY29kZVVuaXRBdChwb3MgKyBpKTsKICAgICAgaWYgKDB4MzAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgzOSkgewogICAgICAgIGJ5dGUgPSBieXRlICogMTYgKyBjaGFyQ29kZSAtIDB4MzA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ2hlY2sgcmFuZ2VzIEEtRiAoMHg0MS0weDQ2KSBhbmQgYS1mICgweDYxLTB4NjYpLgogICAgICAgIGNoYXJDb2RlIHw9IDB4MjA7CiAgICAgICAgaWYgKDB4NjEgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHg2NikgewogICAgICAgICAgYnl0ZSA9IGJ5dGUgKiAxNiArIGNoYXJDb2RlIC0gMHg1NzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiSW52YWxpZCBVUkwgZW5jb2RpbmciKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBieXRlOwogIH0KCiAgLyoqCiAgICogVXJpLWRlY29kZSBhIHBlcmNlbnQtZW5jb2RlZCBzdHJpbmcuCiAgICoKICAgKiBJdCB1bmVzY2FwZXMgdGhlIHN0cmluZyBbdGV4dF0gYW5kIHJldHVybnMgdGhlIHVuZXNjYXBlZCBzdHJpbmcuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIEphdmFTY3JpcHQtZnVuY3Rpb24gYGRlY29kZVVSSWAuCiAgICoKICAgKiBJZiBbcGx1c1RvU3BhY2VdIGlzIGB0cnVlYCwgcGx1cyBjaGFyYWN0ZXJzIHdpbGwgYmUgY29udmVydGVkIHRvIHNwYWNlcy4KICAgKgogICAqIFRoZSBkZWNvZGVyIHdpbGwgY3JlYXRlIGEgYnl0ZS1saXN0IG9mIHRoZSBwZXJjZW50LWVuY29kZWQgcGFydHMsIGFuZCB0aGVuCiAgICogZGVjb2RlIHRoZSBieXRlLWxpc3QgdXNpbmcgW2VuY29kaW5nXS4gVGhlIGRlZmF1bHQgZW5jb2RpbmdzIFVURi04LgogICAqLwogIHN0YXRpYyBTdHJpbmcgX3VyaURlY29kZSgKICAgICAgU3RyaW5nIHRleHQsIGludCBzdGFydCwgaW50IGVuZCwgRW5jb2RpbmcgZW5jb2RpbmcsIGJvb2wgcGx1c1RvU3BhY2UpIHsKICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogICAgYXNzZXJ0KGVuZCA8PSB0ZXh0Lmxlbmd0aCk7CiAgICBhc3NlcnQoZW5jb2RpbmcgIT0gbnVsbCk7CiAgICAvLyBGaXJzdCBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFueSBjaGFyYWN0ZXJzIHdoaWNoIG5lZWQgc3BlY2lhbCBoYW5kbGluZy4KICAgIGJvb2wgc2ltcGxlID0gdHJ1ZTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjb2RlVW5pdCA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNvZGVVbml0ID4gMTI3IHx8CiAgICAgICAgICBjb2RlVW5pdCA9PSBfUEVSQ0VOVCB8fAogICAgICAgICAgKHBsdXNUb1NwYWNlICYmIGNvZGVVbml0ID09IF9QTFVTKSkgewogICAgICAgIHNpbXBsZSA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBMaXN0PGludD4gYnl0ZXM7CiAgICBpZiAoc2ltcGxlKSB7CiAgICAgIGlmICh1dGY4ID09IGVuY29kaW5nIHx8IGxhdGluMSA9PSBlbmNvZGluZyB8fCBhc2NpaSA9PSBlbmNvZGluZykgewogICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBieXRlcyA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLmNvZGVVbml0czsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYnl0ZXMgPSBMaXN0KCk7CiAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgdmFyIGNvZGVVbml0ID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjb2RlVW5pdCA+IDEyNykgewogICAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiSWxsZWdhbCBwZXJjZW50IGVuY29kaW5nIGluIFVSSSIpOwogICAgICAgIH0KICAgICAgICBpZiAoY29kZVVuaXQgPT0gX1BFUkNFTlQpIHsKICAgICAgICAgIGlmIChpICsgMyA+IHRleHQubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ1RydW5jYXRlZCBVUkknKTsKICAgICAgICAgIH0KICAgICAgICAgIGJ5dGVzLmFkZChfaGV4Q2hhclBhaXJUb0J5dGUodGV4dCwgaSArIDEpKTsKICAgICAgICAgIGkgKz0gMjsKICAgICAgICB9IGVsc2UgaWYgKHBsdXNUb1NwYWNlICYmIGNvZGVVbml0ID09IF9QTFVTKSB7CiAgICAgICAgICBieXRlcy5hZGQoX1NQQUNFKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnl0ZXMuYWRkKGNvZGVVbml0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbmNvZGluZy5kZWNvZGUoYnl0ZXMpOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzQWxwaGFiZXRpY0NoYXJhY3RlcihpbnQgY29kZVVuaXQpIHsKICAgIHZhciBsb3dlckNhc2UgPSBjb2RlVW5pdCB8IDB4MjA7CiAgICByZXR1cm4gKF9MT1dFUl9DQVNFX0EgPD0gbG93ZXJDYXNlICYmIGxvd2VyQ2FzZSA8PSBfTE9XRVJfQ0FTRV9aKTsKICB9CgogIHN0YXRpYyBib29sIF9pc1VucmVzZXJ2ZWRDaGFyKGludCBjaGFyKSB7CiAgICByZXR1cm4gY2hhciA8IDEyNyAmJgogICAgICAgICgoX3VucmVzZXJ2ZWRUYWJsZVtjaGFyID4+IDRdICYgKDEgPDwgKGNoYXIgJiAweDBmKSkpICE9IDApOwogIH0KCiAgLy8gVGFibGVzIG9mIGNoYXItY29kZXMgb3JnYW5pemVkIGFzIGEgYml0IHZlY3RvciBvZiAxMjggYml0cyB3aGVyZQogIC8vIGVhY2ggYml0IGluZGljYXRlIHdoZXRoZXIgYSBjaGFyYWN0ZXIgY29kZSBvbiB0aGUgMC0xMjcgbmVlZHMgdG8KICAvLyBiZSBlc2NhcGVkIG9yIG5vdC4KCiAgLy8gVGhlIHVucmVzZXJ2ZWQgY2hhcmFjdGVycyBvZiBSRkMgMzk4Ni4KICBzdGF0aWMgY29uc3QgX3VucmVzZXJ2ZWRUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLgogICAgMHg2MDAwLCAvLyAweDIwIC0gMHgyZiAgMDAwMDAwMDAwMDAwMDExMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1Njc4OQogICAgMHgwM2ZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkdISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gVGhlIHVucmVzZXJ2ZWQgY2hhcmFjdGVycyBvZiBSRkMgMjM5Ni4KICBzdGF0aWMgY29uc3QgX3VucmVzZXJ2ZWQyMzk2VGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgICAgJygpKiAgLS4KICAgIDB4Njc4MiwgLy8gMHgyMCAtIDB4MmYgIDAxMDAwMDAxMTExMDAxMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkKICAgIDB4MDNmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTEwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIFRhYmxlIG9mIHJlc2VydmVkIGNoYXJhY3RlcnMgc3BlY2lmaWVkIGJ5IEVDTUFTY3JpcHQgNS4KICBzdGF0aWMgY29uc3QgX2VuY29kZUZ1bGxUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICMkICYnKCkqKywtLi8KICAgIDB4ZmZkYSwgLy8gMHgyMCAtIDB4MmYgIDAxMDExMDExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODk6OyA9ID8KICAgIDB4YWZmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTExMTAxMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIEBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZiwgLy8gMHg0MCAtIDB4NGYgIDExMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgc2NoZW1lLgogIHN0YXRpYyBjb25zdCBfc2NoZW1lVGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgLS4KICAgIDB4NjgwMCwgLy8gMHgyMCAtIDB4MmYgIDAwMDAwMDAwMDAwMTAxMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkKICAgIDB4MDNmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTEwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaCiAgICAweDA3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5egogICAgMHgwN2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiBzY2hlbWUgZXhjZXB0IGZvciB1cHBlciBjYXNlIGxldHRlcnMuCiAgc3RhdGljIGNvbnN0IF9zY2hlbWVMb3dlclRhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC0uCiAgICAweDY4MDAsIC8vIDB4MjAgLSAweDJmICAwMDAwMDAwMDAwMDEwMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5CiAgICAweDAzZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMDAwMDAwCiAgICAvLwogICAgMHgwMDAwLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8KICAgIDB4MDAwMCwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6CiAgICAweDA3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gU3ViIGRlbGltaXRlciBjaGFyYWN0ZXJzIGNvbWJpbmVkIHdpdGggdW5yZXNlcnZlZCBhcyBvZiAzOTg2LgogIC8vIHN1Yi1kZWxpbXMgID0gIiEiIC8gIiQiIC8gIiYiIC8gIiciIC8gIigiIC8gIikiCiAgLy8gICAgICAgICAvICIqIiAvICIrIiAvICIsIiAvICI7IiAvICI9IgogIC8vIFJGQyAzOTg2IHNlY3Rpb24gMi4zLgogIC8vIHVucmVzZXJ2ZWQgID0gQUxQSEEgLyBESUdJVCAvICItIiAvICIuIiAvICJfIiAvICJ+IgogIHN0YXRpYyBjb25zdCBfc3ViRGVsaW1pdGVyc1RhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICEgICQgJicoKSorLC0uCiAgICAweDdmZDIsIC8vIDB4MjAgLSAweDJmICAwMTAwMTAxMTExMTExMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5IDsgPQogICAgMHgyYmZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTAxMDEwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkdISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gR2VuZXJhbCBkZWxpbWl0ZXIgY2hhcmFjdGVycywgUkZDIDM5ODYgc2VjdGlvbiAyLjIuCiAgLy8gZ2VuLWRlbGltcyAgPSAiOiIgLyAiLyIgLyAiPyIgLyAiIyIgLyAiWyIgLyAiXSIgLyAiQCIKICAvLwogIHN0YXRpYyBjb25zdCBfZ2VuRGVsaW1pdGVyc1RhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgLwogICAgMHg4MDA4LCAvLyAweDIwIC0gMHgyZiAgMDAwMTAwMDAwMDAwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgPwogICAgMHg4NDAwLCAvLyAweDMwIC0gMHgzZiAgMDAwMDAwMDAwMDEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgQAogICAgMHgwMDAxLCAvLyAweDQwIC0gMHg0ZiAgMTAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIF0KICAgIDB4MjgwMCwgLy8gMHg1MCAtIDB4NWYgIDAwMDAwMDAwMDAwMTAxMDAKICAgIC8vCiAgICAweDAwMDAsIC8vIDB4NjAgLSAweDZmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLwogICAgMHgwMDAwLCAvLyAweDcwIC0gMHg3ZiAgMDAwMDAwMDAwMDAwMDAwMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgdXNlcmluZm8gYXMgb2YgUkZDIDM5ODYuCiAgLy8gUkZDIDM5ODYgQXBwZW5kaXggQQogIC8vIHVzZXJpbmZvID0gKiggdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvICc6JykKICBzdGF0aWMgY29uc3QgX3VzZXJpbmZvVGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgJCAmJygpKissLS4KICAgIDB4N2ZkMiwgLy8gMHgyMCAtIDB4MmYgIDAxMDAxMDExMTExMTExMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODk6OyA9CiAgICAweDJmZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMTEwMTAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmUsIC8vIDB4NDAgLSAweDRmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWV1hZWiAgICBfCiAgICAweDg3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5eiAgIH4KICAgIDB4NDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExMTExMDAwMTAKICBdOwoKICAvLyBDaGFyYWN0ZXJzIGFsbG93ZWQgaW4gdGhlIHJlZy1uYW1lIGFzIG9mIFJGQyAzOTg2LgogIC8vIFJGQyAzOTg2IEFwcGVuZGl4IEEKICAvLyByZWctbmFtZSA9ICooIHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgKQogIHN0YXRpYyBjb25zdCBfcmVnTmFtZVRhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICEgICQlJicoKSorLC0uCiAgICAweDdmZjIsIC8vIDB4MjAgLSAweDJmICAwMTAwMTExMTExMTExMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5IDsgPQogICAgMHgyYmZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTAxMDEwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkdISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gQ2hhcmFjdGVycyBhbGxvd2VkIGluIHRoZSBwYXRoIGFzIG9mIFJGQyAzOTg2LgogIC8vIFJGQyAzOTg2IHNlY3Rpb24gMy4zLgogIC8vIHBjaGFyID0gdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvICI6IiAvICJAIgogIHN0YXRpYyBjb25zdCBfcGF0aENoYXJUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICAkICYnKCkqKywtLgogICAgMHg3ZmQyLCAvLyAweDIwIC0gMHgyZiAgMDEwMDEwMTExMTExMTExMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1Njc4OTo7ID0KICAgIDB4MmZmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTExMTAxMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIEBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZiwgLy8gMHg0MCAtIDB4NGYgIDExMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgcGF0aCBhcyBvZiBSRkMgMzk4Ni4KICAvLyBSRkMgMzk4NiBzZWN0aW9uIDMuMyAqYW5kKiBzbGFzaC4KICBzdGF0aWMgY29uc3QgX3BhdGhDaGFyT3JTbGFzaFRhYmxlID0gWwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICAkICYnKCkqKywtLi8KICAgIDB4ZmZkMiwgLy8gMHgyMCAtIDB4MmYgIDAxMDAxMDExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODk6OyA9CiAgICAweDJmZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMTEwMTAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBAQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmYsIC8vIDB4NDAgLSAweDRmICAxMTExMTExMTExMTExMTExCgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gQ2hhcmFjdGVycyBhbGxvd2VkIGluIHRoZSBxdWVyeSBhcyBvZiBSRkMgMzk4Ni4KICAvLyBSRkMgMzk4NiBzZWN0aW9uIDMuNC4KICAvLyBxdWVyeSA9ICooIHBjaGFyIC8gIi8iIC8gIj8iICkKICBzdGF0aWMgY29uc3QgX3F1ZXJ5Q2hhclRhYmxlID0gWwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICAkICYnKCkqKywtLi8KICAgIDB4ZmZkMiwgLy8gMHgyMCAtIDB4MmYgIDAxMDAxMDExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODk6OyA9ID8KICAgIDB4YWZmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTExMTAxMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIEBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZiwgLy8gMHg0MCAtIDB4NGYgIDExMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgWm9uZUlEIGFzIG9mIFJGQyA2ODc0LgogIC8vIFpvbmVJRCA9IDEqKCB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgKQogIHN0YXRpYyBjb25zdCBfem9uZUlEVGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgJCUmJygpKissLS4KICAgIDB4NjAwMCwgLy8gMHgyMCAtIDB4MmYgIDAwMDAwMDAwMDAwMDAxMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkgOyA9CiAgICAweDAzZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmUsIC8vIDB4NDAgLSAweDRmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWV1hZWiAgICBfCiAgICAweDg3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5eiAgIH4KICAgIDB4NDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExMTExMDAwMTAKICBdOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBEYXRhIFVSSQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoqCiAqIEEgd2F5IHRvIGFjY2VzcyB0aGUgc3RydWN0dXJlIG9mIGEgYGRhdGE6YCBVUkkuCiAqCiAqIERhdGEgVVJJcyBhcmUgbm9uLWhpZXJhcmNoaWNhbCBVUklzIHRoYXQgY2FuIGNvbnRhaW4gYW55IGJpbmFyeSBkYXRhLgogKiBUaGV5IGFyZSBkZWZpbmVkIGJ5IFtSRkMgMjM5N10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIzOTcpLgogKgogKiBUaGlzIGNsYXNzIGFsbG93cyBwYXJzaW5nIHRoZSBVUkkgdGV4dCBhbmQgZXh0cmFjdGluZyBpbmRpdmlkdWFsIHBhcnRzIG9mIHRoZQogKiBVUkksIGFzIHdlbGwgYXMgYnVpbGRpbmcgdGhlIFVSSSB0ZXh0IGZyb20gc3RydWN0dXJlZCBwYXJ0cy4KICovCmNsYXNzIFVyaURhdGEgewogIHN0YXRpYyBjb25zdCBpbnQgX25vU2NoZW1lID0gLTE7CiAgLyoqCiAgICogQ29udGFpbnMgdGhlIHRleHQgY29udGVudCBvZiBhIGBkYXRhOmAgVVJJLCB3aXRoIG9yIHdpdGhvdXQgYQogICAqIGxlYWRpbmcgYGRhdGE6YC4KICAgKgogICAqIElmIFtfc2VwYXJhdG9ySW5kaWNlc10gc3RhcnRzIHdpdGggYDRgICh0aGUgaW5kZXggb2YgdGhlIGA6YCksIHRoZW4KICAgKiB0aGVyZSBpcyBhIGxlYWRpbmcgYGRhdGE6YCwgb3RoZXJ3aXNlIFtfc2VwYXJhdG9ySW5kaWNlc10gc3RhcnRzIHdpdGgKICAgKiBgLTFgLgogICAqLwogIGZpbmFsIFN0cmluZyBfdGV4dDsKCiAgLyoqCiAgICogTGlzdCBvZiB0aGUgc2VwYXJhdG9ycyAoJzsnLCAnPScgYW5kICcsJykgaW4gdGhlIHRleHQuCiAgICoKICAgKiBTdGFydHMgd2l0aCB0aGUgaW5kZXggb2YgdGhlIGA6YCBpbiBgZGF0YTpgIG9mIHRoZSBtaW1lVHlwZS4KICAgKiBUaGF0IGlzIGFsd2F5cyBlaXRoZXIgLTEgb3IgNCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYF90ZXh0YCBpbmNsdWRlcyB0aGUKICAgKiBgZGF0YTpgIHNjaGVtZSBvciBub3QuCiAgICoKICAgKiBUaGUgZmlyc3Qgc3BlcGFyYXRvciBlbmRzIHRoZSBtaW1lIHR5cGUuIFdlIGRvbid0IGJvdGhlciB3aXRoIGZpbmRpbmcKICAgKiB0aGUgJy8nIGluc2lkZSB0aGUgbWltZSB0eXBlLgogICAqCiAgICogRWFjaCB0d28gc2VwYXJhdG9ycyBhZnRlciB0aGF0IG1hcmtzIGEgcGFyYW1ldGVyIGtleSBhbmQgdmFsdWUuCiAgICoKICAgKiBJZiB0aGVyZSBpcyBhIHNpbmdsZSBzZXBhcmF0b3IgbGVmdCwgaXQgZW5kcyB0aGUgImJhc2U2NCIgbWFya2VyLgogICAqCiAgICogU28gdGhlIGZvbGxvd2luZyBzZXBhcmF0b3JzIGFyZSBmb3VuZCBmb3IgYSB0ZXh0OgogICAqIGBgYAogICAqIGRhdGE6dGV4dC9wbGFpbjtmb289YmFyO2Jhc2U2NCxBUkdMRUJBUkdMRT0KICAgKiAgICAgXiAgICAgICAgICBeICAgXiAgIF4gICAgICBeCiAgICogYGBgCiAgICovCiAgZmluYWwgTGlzdDxpbnQ+IF9zZXBhcmF0b3JJbmRpY2VzOwoKICAvKioKICAgKiBDYWNoZSBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IFt1cmldLgogICAqLwogIFVyaSBfdXJpQ2FjaGU7CgogIFVyaURhdGEuXyh0aGlzLl90ZXh0LCB0aGlzLl9zZXBhcmF0b3JJbmRpY2VzLCB0aGlzLl91cmlDYWNoZSk7CgogIC8vIEF2b2lkIHNoYWRvd2luZyBieSBhcmd1bWVudC4KICBzdGF0aWMgY29uc3QgQmFzZTY0Q29kZWMgX2Jhc2U2NCA9IGJhc2U2NDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGBkYXRhOmAgVVJJIGNvbnRhaW5pbmcgdGhlIFtjb250ZW50XSBzdHJpbmcuCiAgICoKICAgKiBFcXVpdmFsZW50IHRvIGBuZXcgVXJpLmRhdGFGcm9tU3RyaW5nKC4uLikuZGF0YWAsIGJ1dCBtYXkKICAgKiBiZSBtb3JlIGVmZmljaWVudCBpZiB0aGUgW3VyaV0gaXRzZWxmIGlzbid0IHVzZWQuCiAgICovCiAgZmFjdG9yeSBVcmlEYXRhLmZyb21TdHJpbmcoU3RyaW5nIGNvbnRlbnQsCiAgICAgIHtTdHJpbmcgbWltZVR5cGUsCiAgICAgIEVuY29kaW5nIGVuY29kaW5nLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMsCiAgICAgIGJvb2wgYmFzZTY0ID0gZmFsc2V9KSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CiAgICBMaXN0PGludD4gaW5kaWNlcyA9IFtfbm9TY2hlbWVdOwogICAgU3RyaW5nIGNoYXJzZXROYW1lOwogICAgU3RyaW5nIGVuY29kaW5nTmFtZTsKICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwpIGNoYXJzZXROYW1lID0gcGFyYW1ldGVyc1siY2hhcnNldCJdOwogICAgaWYgKGVuY29kaW5nID09IG51bGwpIHsKICAgICAgaWYgKGNoYXJzZXROYW1lICE9IG51bGwpIHsKICAgICAgICBlbmNvZGluZyA9IEVuY29kaW5nLmdldEJ5TmFtZShjaGFyc2V0TmFtZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY2hhcnNldE5hbWUgPT0gbnVsbCkgewogICAgICAvLyBOb24tbnVsbCBvbmx5IGlmIHBhcmFtZXRlcnMgZG9lcyBub3QgY29udGFpbiAiY2hhcnNldCIuCiAgICAgIGVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWU7CiAgICB9CiAgICBlbmNvZGluZyA/Pz0gYXNjaWk7CiAgICBfd3JpdGVVcmkobWltZVR5cGUsIGVuY29kaW5nTmFtZSwgcGFyYW1ldGVycywgYnVmZmVyLCBpbmRpY2VzKTsKICAgIGluZGljZXMuYWRkKGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGJhc2U2NCkgewogICAgICBidWZmZXIud3JpdGUoJztiYXNlNjQsJyk7CiAgICAgIGluZGljZXMuYWRkKGJ1ZmZlci5sZW5ndGggLSAxKTsKICAgICAgYnVmZmVyLndyaXRlKGVuY29kaW5nLmZ1c2UoX2Jhc2U2NCkuZW5jb2RlKGNvbnRlbnQpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZSgnLCcpOwogICAgICBfdXJpRW5jb2RlQnl0ZXMoX3VyaWNUYWJsZSwgZW5jb2RpbmcuZW5jb2RlKGNvbnRlbnQpLCBidWZmZXIpOwogICAgfQogICAgcmV0dXJuIFVyaURhdGEuXyhidWZmZXIudG9TdHJpbmcoKSwgaW5kaWNlcywgbnVsbCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgYGRhdGE6YCBVUkkgY29udGFpbmluZyBhbiBlbmNvZGluZyBvZiBbYnl0ZXNdLgogICAqCiAgICogRXF1aXZhbGVudCB0byBgbmV3IFVyaS5kYXRhRnJvbUJ5dGVzKC4uLikuZGF0YWAsIGJ1dCBtYXkKICAgKiBiZSBtb3JlIGVmZmljaWVudCBpZiB0aGUgW3VyaV0gaXRzZWxmIGlzbid0IHVzZWQuCiAgICovCiAgZmFjdG9yeSBVcmlEYXRhLmZyb21CeXRlcyhMaXN0PGludD4gYnl0ZXMsCiAgICAgIHttaW1lVHlwZSA9ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMsCiAgICAgIHBlcmNlbnRFbmNvZGVkID0gZmFsc2V9KSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CiAgICBMaXN0PGludD4gaW5kaWNlcyA9IFtfbm9TY2hlbWVdOwogICAgX3dyaXRlVXJpKG1pbWVUeXBlLCBudWxsLCBwYXJhbWV0ZXJzLCBidWZmZXIsIGluZGljZXMpOwogICAgaW5kaWNlcy5hZGQoYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAocGVyY2VudEVuY29kZWQpIHsKICAgICAgYnVmZmVyLndyaXRlKCcsJyk7CiAgICAgIF91cmlFbmNvZGVCeXRlcyhfdXJpY1RhYmxlLCBieXRlcywgYnVmZmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZSgnO2Jhc2U2NCwnKTsKICAgICAgaW5kaWNlcy5hZGQoYnVmZmVyLmxlbmd0aCAtIDEpOwogICAgICBfYmFzZTY0LmVuY29kZXIKICAgICAgICAgIC5zdGFydENodW5rZWRDb252ZXJzaW9uKFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb21TdHJpbmdTaW5rKGJ1ZmZlcikpCiAgICAgICAgICAuYWRkU2xpY2UoYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCwgdHJ1ZSk7CiAgICB9CgogICAgcmV0dXJuIFVyaURhdGEuXyhidWZmZXIudG9TdHJpbmcoKSwgaW5kaWNlcywgbnVsbCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgYERhdGFVcmlgIGZyb20gYSBbVXJpXSB3aGljaCBtdXN0IGhhdmUgYGRhdGFgIGFzIFtVcmkuc2NoZW1lXS4KICAgKgogICAqIFRoZSBbdXJpXSBtdXN0IGhhdmUgc2NoZW1lIGBkYXRhYCBhbmQgbm8gYXV0aG9yaXR5IG9yIGZyYWdtZW50LAogICAqIGFuZCB0aGUgcGF0aCAoY29uY2F0ZW5hdGVkIHdpdGggdGhlIHF1ZXJ5LCBpZiB0aGVyZSBpcyBvbmUpIG11c3QgYmUgdmFsaWQKICAgKiBhcyBkYXRhIFVSSSBjb250ZW50IHdpdGggdGhlIHNhbWUgcnVsZXMgYXMgW3BhcnNlXS4KICAgKi8KICBmYWN0b3J5IFVyaURhdGEuZnJvbVVyaShVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSAhPSAiZGF0YSIpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZSh1cmksICJ1cmkiLCAiU2NoZW1lIG11c3QgYmUgJ2RhdGEnIik7CiAgICB9CiAgICBpZiAodXJpLmhhc0F1dGhvcml0eSkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKHVyaSwgInVyaSIsICJEYXRhIHVyaSBtdXN0IG5vdCBoYXZlIGF1dGhvcml0eSIpOwogICAgfQogICAgaWYgKHVyaS5oYXNGcmFnbWVudCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgICAgdXJpLCAidXJpIiwgIkRhdGEgdXJpIG11c3Qgbm90IGhhdmUgYSBmcmFnbWVudCBwYXJ0Iik7CiAgICB9CiAgICBpZiAoIXVyaS5oYXNRdWVyeSkgewogICAgICByZXR1cm4gX3BhcnNlKHVyaS5wYXRoLCAwLCB1cmkpOwogICAgfQogICAgLy8gSW5jbHVkZXMgcGF0aCBhbmQgcXVlcnkgKGFuZCBsZWFkaW5nICJkYXRhOiIpLgogICAgcmV0dXJuIF9wYXJzZSgiJHVyaSIsIDUsIHVyaSk7CiAgfQoKICAvKioKICAgKiBXcml0ZXMgdGhlIGluaXRpYWwgcGFydCBvZiBhIGBkYXRhOmAgdXJpLCBmcm9tIGFmdGVyIHRoZSAiZGF0YToiCiAgICogdW50aWwganVzdCBiZWZvcmUgdGhlICcsJyBiZWZvcmUgdGhlIGRhdGEsIG9yIGJlZm9yZSBhIGA7YmFzZTY0LGAKICAgKiBtYXJrZXIuCiAgICoKICAgKiBPZiBhbiBbaW5kaWNlc10gbGlzdCBpcyBwYXNzZWQsIHNlcGFyYXRvciBpbmRpY2VzIGFyZSBzdG9yZWQgaW4gdGhhdAogICAqIGxpc3QuCiAgICovCiAgc3RhdGljIHZvaWQgX3dyaXRlVXJpKFN0cmluZyBtaW1lVHlwZSwgU3RyaW5nIGNoYXJzZXROYW1lLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMsIFN0cmluZ0J1ZmZlciBidWZmZXIsIExpc3QgaW5kaWNlcykgewogICAgaWYgKG1pbWVUeXBlID09IG51bGwgfHwgbWltZVR5cGUgPT0gInRleHQvcGxhaW4iKSB7CiAgICAgIG1pbWVUeXBlID0gIiI7CiAgICB9CiAgICBpZiAobWltZVR5cGUuaXNFbXB0eSB8fCBpZGVudGljYWwobWltZVR5cGUsICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKSkgewogICAgICBidWZmZXIud3JpdGUobWltZVR5cGUpOyAvLyBDb21tb24gY2FzZXMgbmVlZCBubyBlc2NhcGluZy4KICAgIH0gZWxzZSB7CiAgICAgIGludCBzbGFzaEluZGV4ID0gX3ZhbGlkYXRlTWltZVR5cGUobWltZVR5cGUpOwogICAgICBpZiAoc2xhc2hJbmRleCA8IDApIHsKICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKG1pbWVUeXBlLCAibWltZVR5cGUiLCAiSW52YWxpZCBNSU1FIHR5cGUiKTsKICAgICAgfQogICAgICBidWZmZXIud3JpdGUoX1VyaS5fdXJpRW5jb2RlKAogICAgICAgICAgX3Rva2VuQ2hhclRhYmxlLCBtaW1lVHlwZS5zdWJzdHJpbmcoMCwgc2xhc2hJbmRleCksIHV0ZjgsIGZhbHNlKSk7CiAgICAgIGJ1ZmZlci53cml0ZSgiLyIpOwogICAgICBidWZmZXIud3JpdGUoX1VyaS5fdXJpRW5jb2RlKAogICAgICAgICAgX3Rva2VuQ2hhclRhYmxlLCBtaW1lVHlwZS5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEpLCB1dGY4LCBmYWxzZSkpOwogICAgfQogICAgaWYgKGNoYXJzZXROYW1lICE9IG51bGwpIHsKICAgICAgaWYgKGluZGljZXMgIT0gbnVsbCkgewogICAgICAgIGluZGljZXMuLmFkZChidWZmZXIubGVuZ3RoKS4uYWRkKGJ1ZmZlci5sZW5ndGggKyA4KTsKICAgICAgfQogICAgICBidWZmZXIud3JpdGUoIjtjaGFyc2V0PSIpOwogICAgICBidWZmZXIud3JpdGUoX1VyaS5fdXJpRW5jb2RlKF90b2tlbkNoYXJUYWJsZSwgY2hhcnNldE5hbWUsIHV0ZjgsIGZhbHNlKSk7CiAgICB9CiAgICBwYXJhbWV0ZXJzPy5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgIGlmIChrZXkuaXNFbXB0eSkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoIiIsICJQYXJhbWV0ZXIgbmFtZXMgbXVzdCBub3QgYmUgZW1wdHkiKTsKICAgICAgfQogICAgICBpZiAodmFsdWUuaXNFbXB0eSkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgICAgICIiLCAiUGFyYW1ldGVyIHZhbHVlcyBtdXN0IG5vdCBiZSBlbXB0eSIsICdwYXJhbWV0ZXJzWyIka2V5Il0nKTsKICAgICAgfQogICAgICBpZiAoaW5kaWNlcyAhPSBudWxsKSBpbmRpY2VzLmFkZChidWZmZXIubGVuZ3RoKTsKICAgICAgYnVmZmVyLndyaXRlKCc7Jyk7CiAgICAgIC8vIEVuY29kZSBhbnkgbm9uLVJGQzIwNDUtdG9rZW4gY2hhcmFjdGVyIGFuZCBib3RoICclJyBhbmQgJyMnLgogICAgICBidWZmZXIud3JpdGUoX1VyaS5fdXJpRW5jb2RlKF90b2tlbkNoYXJUYWJsZSwga2V5LCB1dGY4LCBmYWxzZSkpOwogICAgICBpZiAoaW5kaWNlcyAhPSBudWxsKSBpbmRpY2VzLmFkZChidWZmZXIubGVuZ3RoKTsKICAgICAgYnVmZmVyLndyaXRlKCc9Jyk7CiAgICAgIGJ1ZmZlci53cml0ZShfVXJpLl91cmlFbmNvZGUoX3Rva2VuQ2hhclRhYmxlLCB2YWx1ZSwgdXRmOCwgZmFsc2UpKTsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIG1pbWVUeXBlIGlzIHZhbGlkLWlzaCAoYHRva2VuICcvJyB0b2tlbmApLgogICAqCiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHNsYXNoLCBvciAtMSBpZiB0aGUgbWltZSB0eXBlIGlzIG5vdAogICAqIGNvbnNpZGVyZWQgdmFsaWQuCiAgICoKICAgKiBDdXJyZW50bHkgb25seSBsb29rcyBmb3Igc2xhc2hlcywgYWxsIG90aGVyIGNoYXJhY3RlcnMgd2lsbCBiZQogICAqIHBlcmNlbnQtZW5jb2RlZCBhcyBVVEYtOCBpZiBuZWNlc3NhcnkuCiAgICovCiAgc3RhdGljIGludCBfdmFsaWRhdGVNaW1lVHlwZShTdHJpbmcgbWltZVR5cGUpIHsKICAgIGludCBzbGFzaEluZGV4ID0gLTE7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVUeXBlLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gbWltZVR5cGUuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgIT0gX1NMQVNIKSBjb250aW51ZTsKICAgICAgaWYgKHNsYXNoSW5kZXggPCAwKSB7CiAgICAgICAgc2xhc2hJbmRleCA9IGk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgcmV0dXJuIHNsYXNoSW5kZXg7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYSBzdHJpbmcgYXMgYSBgZGF0YWAgVVJJLgogICAqCiAgICogVGhlIHN0cmluZyBtdXN0IGhhdmUgdGhlIGZvcm1hdDoKICAgKgogICAqIGBgYAogICAqICdkYXRhOicgKHR5cGUgJy8nIHN1YnR5cGUpPyAoJzsnIGF0dHJpYnV0ZSAnPScgdmFsdWUpKiAoJztiYXNlNjQnKT8gJywnIGRhdGEKICAgKiBgYGBgCiAgICoKICAgKiB3aGVyZSBgdHlwZWAsIGBzdWJ0eXBlYCwgYGF0dHJpYnV0ZWAgYW5kIGB2YWx1ZWAgYXJlIHNwZWNpZmllZCBpbiBSRkMtMjA0NSwKICAgKiBhbmQgYGRhdGFgIGlzIGEgc2VxdWVuY2Ugb2YgVVJJLWNoYXJhY3RlcnMgKFJGQy0yMzk2IGB1cmljYCkuCiAgICoKICAgKiBUaGlzIG1lYW5zIHRoYXQgYWxsIHRoZSBjaGFyYWN0ZXJzIG11c3QgYmUgQVNDSUksIGJ1dCB0aGUgVVJJIG1heSBjb250YWluCiAgICogcGVyY2VudC1lc2NhcGVzIGZvciBub24tQVNDSUkgYnl0ZSB2YWx1ZXMgdGhhdCBuZWVkIGFuIGludGVycHJldGF0aW9uCiAgICogdG8gYmUgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZy4KICAgKgogICAqIFBhcnNpbmcgY2hlY2tzIHRoYXQgQmFzZTY0IGVuY29kZWQgZGF0YSBpcyB2YWxpZCwgYW5kIGl0IG5vcm1hbGl6ZXMgaXQKICAgKiB0byB1c2UgdGhlIGRlZmF1bHQgQmFzZTY0IGFscGhhYmV0IGFuZCB0byB1c2UgcGFkZGluZy4KICAgKiBOb24tQmFzZTY0IGRhdGEgaXMgZXNjYXBlZCB1c2luZyBwZXJjZW50LWVzY2FwZXMgYXMgbmVjZXNzYXJ5IHRvIG1ha2UKICAgKiBpdCB2YWxpZCwgYW5kIGV4aXN0aW5nIGVzY2FwZXMgYXJlIGNhc2Ugbm9ybWFsaXplZC4KICAgKgogICAqIEFjY2Vzc2luZyB0aGUgaW5kaXZpZHVhbCBwYXJ0cyBtYXkgZmFpbCBsYXRlciBpZiB0aGV5IHR1cm4gb3V0IHRvIGhhdmUKICAgKiBjb250ZW50IHRoYXQgY2FuJ3QgYmUgZGVjb2RlZCBzdWNjZXNzZnVsbHkgYXMgYSBzdHJpbmcsIGZvciBleGFtcGxlIGlmCiAgICogZXhpc3RpbmcgcGVyY2VudCBlc2NhcGVzIHJlcHJlc2VudCBieXRlcyB0aGF0IGNhbm5vdCBiZSBkZWNvZGVkCiAgICogYnkgdGhlIGNob3NlbiBbRW5jb2RpbmddIChzZWUgW2NvbnRlbnRBc1N0cmluZ10pLgogICAqCiAgICogQSBbRm9ybWF0RXhjZXB0aW9uXSBpcyB0aHJvd24gaWYgW3VyaV0gaXMgbm90IGEgdmFsaWQgZGF0YSBVUkkuCiAgICovCiAgc3RhdGljIFVyaURhdGEgcGFyc2UoU3RyaW5nIHVyaSkgewogICAgaWYgKHVyaS5sZW5ndGggPj0gNSkgewogICAgICBpbnQgZGF0YURlbHRhID0gX3N0YXJ0c1dpdGhEYXRhKHVyaSwgMCk7CiAgICAgIGlmIChkYXRhRGVsdGEgPT0gMCkgewogICAgICAgIC8vIEV4YWN0IG1hdGNoIG9uICJkYXRhOiIuCiAgICAgICAgcmV0dXJuIF9wYXJzZSh1cmksIDUsIG51bGwpOwogICAgICB9CiAgICAgIGlmIChkYXRhRGVsdGEgPT0gMHgyMCkgewogICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgbm9uLW5vcm1hbGl6ZWQgImRhdGEiIHNjaGVtZSBjb250YWluaW5nIHVwcGVyLWNhc2UKICAgICAgICAvLyBsZXR0ZXJzLiBQYXJzZSBhbnl3YXksIGJ1dCB0aHJvdyBhd2F5IHRoZSBzY2hlbWUuCiAgICAgICAgcmV0dXJuIF9wYXJzZSh1cmkuc3Vic3RyaW5nKDUpLCAwLCBudWxsKTsKICAgICAgfQogICAgfQogICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJEb2VzIG5vdCBzdGFydCB3aXRoICdkYXRhOiciLCB1cmksIDApOwogIH0KCiAgLyoqCiAgICogVGhlIFtVcmldIHRoYXQgdGhpcyBgVXJpRGF0YWAgaXMgZ2l2aW5nIGFjY2VzcyB0by4KICAgKgogICAqIFJldHVybnMgYSBgVXJpYCB3aXRoIHNjaGVtZSBgZGF0YWAgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgVVJJCiAgICogYXMgcGF0aC4KICAgKi8KICBVcmkgZ2V0IHVyaSB7CiAgICBpZiAoX3VyaUNhY2hlICE9IG51bGwpIHJldHVybiBfdXJpQ2FjaGU7CiAgICBTdHJpbmcgcGF0aCA9IF90ZXh0OwogICAgU3RyaW5nIHF1ZXJ5OwogICAgaW50IGNvbG9uSW5kZXggPSBfc2VwYXJhdG9ySW5kaWNlc1swXTsKICAgIGludCBxdWVyeUluZGV4ID0gX3RleHQuaW5kZXhPZignPycsIGNvbG9uSW5kZXggKyAxKTsKICAgIGludCBlbmQgPSBfdGV4dC5sZW5ndGg7CiAgICBpZiAocXVlcnlJbmRleCA+PSAwKSB7CiAgICAgIHF1ZXJ5ID0gX1VyaS5fbm9ybWFsaXplT3JTdWJzdHJpbmcoCiAgICAgICAgICBfdGV4dCwgcXVlcnlJbmRleCArIDEsIGVuZCwgX1VyaS5fcXVlcnlDaGFyVGFibGUpOwogICAgICBlbmQgPSBxdWVyeUluZGV4OwogICAgfQogICAgcGF0aCA9IF9VcmkuX25vcm1hbGl6ZU9yU3Vic3RyaW5nKAogICAgICAgIF90ZXh0LCBjb2xvbkluZGV4ICsgMSwgZW5kLCBfVXJpLl9wYXRoQ2hhck9yU2xhc2hUYWJsZSk7CiAgICBfdXJpQ2FjaGUgPSBfRGF0YVVyaSh0aGlzLCBwYXRoLCBxdWVyeSk7CiAgICByZXR1cm4gX3VyaUNhY2hlOwogIH0KCiAgLyoqCiAgICogVGhlIE1JTUUgdHlwZSBvZiB0aGUgZGF0YSBVUkkuCiAgICoKICAgKiBBIGRhdGEgVVJJIGNvbnNpc3RzIG9mIGEgIm1lZGlhIHR5cGUiIGZvbGxvd2VkIGJ5IGRhdGEuCiAgICogVGhlIG1lZGlhIHR5cGUgc3RhcnRzIHdpdGggYSBNSU1FIHR5cGUgYW5kIGNhbiBiZSBmb2xsb3dlZCBieQogICAqIGV4dHJhIHBhcmFtZXRlcnMuCiAgICogSWYgdGhlIE1JTUUgdHlwZSByZXByZXNlbnRhdGlvbiBpbiB0aGUgVVJJIHRleHQgY29udGFpbnMgVVJJIGVzY2FwZXMsCiAgICogdGhleSBhcmUgdW5lc2NhcGVkIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCiAgICogSWYgdGhlIHZhbHVlIGNvbnRhaW4gbm9uLUFTQ0lJIHBlcmNlbnQgZXNjYXBlcywgdGhleSBhcmUgZGVjb2RlZCBhcyBVVEYtOC4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsSGVsbG8lMjBXb3JsZCEKICAgKgogICAqIFRoaXMgZGF0YSBVUkkgaGFzIHRoZSBtZWRpYSB0eXBlIGB0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLThgLCB3aGljaCBpcyB0aGUKICAgKiBNSU1FIHR5cGUgYHRleHQvcGxhaW5gIHdpdGggdGhlIHBhcmFtZXRlciBgY2hhcnNldGAgd2l0aCB2YWx1ZSBgdXRmLThgLgogICAqIFNlZSBbUkZDIDIwNDVdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ1KSBmb3IgbW9yZSBkZXRhaWwuCiAgICoKICAgKiBJZiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZGF0YSBVUkkgaXMgZW1wdHksIGl0IGRlZmF1bHRzIHRvIGB0ZXh0L3BsYWluYC4KICAgKi8KICBTdHJpbmcgZ2V0IG1pbWVUeXBlIHsKICAgIGludCBzdGFydCA9IF9zZXBhcmF0b3JJbmRpY2VzWzBdICsgMTsKICAgIGludCBlbmQgPSBfc2VwYXJhdG9ySW5kaWNlc1sxXTsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiAidGV4dC9wbGFpbiI7CiAgICByZXR1cm4gX1VyaS5fdXJpRGVjb2RlKF90ZXh0LCBzdGFydCwgZW5kLCB1dGY4LCBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBUaGUgY2hhcnNldCBwYXJhbWV0ZXIgb2YgdGhlIG1lZGlhIHR5cGUuCiAgICoKICAgKiBJZiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgbWVkaWEgdHlwZSBjb250YWlucyBhIGBjaGFyc2V0YCBwYXJhbWV0ZXIKICAgKiB0aGVuIHRoaXMgcmV0dXJucyBpdHMgdmFsdWUsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBVUy1BU0NJSWAsCiAgICogd2hpY2ggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgZGF0YSBVUklzLgogICAqIElmIHRoZSB2YWx1ZSBjb250YWluIG5vbi1BU0NJSSBwZXJjZW50IGVzY2FwZXMsIHRoZXkgYXJlIGRlY29kZWQgYXMgVVRGLTguCiAgICoKICAgKiBJZiB0aGUgTUlNRSB0eXBlIHJlcHJlc2VudGF0aW9uIGluIHRoZSBVUkkgdGV4dCBjb250YWlucyBVUkkgZXNjYXBlcywKICAgKiB0aGV5IGFyZSB1bmVzY2FwZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KICAgKi8KICBTdHJpbmcgZ2V0IGNoYXJzZXQgewogICAgaW50IHBhcmFtZXRlclN0YXJ0ID0gMTsKICAgIGludCBwYXJhbWV0ZXJFbmQgPSBfc2VwYXJhdG9ySW5kaWNlcy5sZW5ndGggLSAxOyAvLyBUaGUgJywnIGJlZm9yZSBkYXRhLgogICAgaWYgKGlzQmFzZTY0KSB7CiAgICAgIC8vIFRoZXJlIGlzIGEgIjtiYXNlNjQiIHNlcGFyYXRvciwgc28gc3VidHJhY3Qgb25lIGZvciB0aGF0IGFzIHdlbGwuCiAgICAgIHBhcmFtZXRlckVuZCAtPSAxOwogICAgfQogICAgZm9yIChpbnQgaSA9IHBhcmFtZXRlclN0YXJ0OyBpIDwgcGFyYW1ldGVyRW5kOyBpICs9IDIpIHsKICAgICAgdmFyIGtleVN0YXJ0ID0gX3NlcGFyYXRvckluZGljZXNbaV0gKyAxOwogICAgICB2YXIga2V5RW5kID0gX3NlcGFyYXRvckluZGljZXNbaSArIDFdOwogICAgICBpZiAoa2V5RW5kID09IGtleVN0YXJ0ICsgNyAmJiBfdGV4dC5zdGFydHNXaXRoKCJjaGFyc2V0Iiwga2V5U3RhcnQpKSB7CiAgICAgICAgcmV0dXJuIF9VcmkuX3VyaURlY29kZSgKICAgICAgICAgICAgX3RleHQsIGtleUVuZCArIDEsIF9zZXBhcmF0b3JJbmRpY2VzW2kgKyAyXSwgdXRmOCwgZmFsc2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gIlVTLUFTQ0lJIjsKICB9CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIGRhdGEgaXMgQmFzZTY0IGVuY29kZWQgb3Igbm90LgogICAqLwogIGJvb2wgZ2V0IGlzQmFzZTY0ID0+IF9zZXBhcmF0b3JJbmRpY2VzLmxlbmd0aC5pc09kZDsKCiAgLyoqCiAgICogVGhlIGNvbnRlbnQgcGFydCBvZiB0aGUgZGF0YSBVUkksIGFzIGl0cyBhY3R1YWwgcmVwcmVzZW50YXRpb24uCiAgICoKICAgKiBUaGlzIHN0cmluZyBtYXkgY29udGFpbiBwZXJjZW50IGVzY2FwZXMuCiAgICovCiAgU3RyaW5nIGdldCBjb250ZW50VGV4dCA9PiBfdGV4dC5zdWJzdHJpbmcoX3NlcGFyYXRvckluZGljZXMubGFzdCArIDEpOwoKICAvKioKICAgKiBUaGUgY29udGVudCBwYXJ0IG9mIHRoZSBkYXRhIFVSSSBhcyBieXRlcy4KICAgKgogICAqIElmIHRoZSBkYXRhIGlzIEJhc2U2NCBlbmNvZGVkLCBpdCB3aWxsIGJlIGRlY29kZWQgdG8gYnl0ZXMuCiAgICoKICAgKiBJZiB0aGUgZGF0YSBpcyBub3QgQmFzZTY0IGVuY29kZWQsIGl0IHdpbGwgYmUgZGVjb2RlZCBieSB1bmVzY2FwaW5nCiAgICogcGVyY2VudC1lc2NhcGVkIGNoYXJhY3RlcnMgYW5kIHJldHVybmluZyBieXRlIHZhbHVlcyBvZiBlYWNoIHVuZXNjYXBlZAogICAqIGNoYXJhY3Rlci4gVGhlIGJ5dGVzIHdpbGwgbm90IGJlLCBlLmcuLCBVVEYtOCBkZWNvZGVkLgogICAqLwogIFVpbnQ4TGlzdCBjb250ZW50QXNCeXRlcygpIHsKICAgIFN0cmluZyB0ZXh0ID0gX3RleHQ7CiAgICBpbnQgc3RhcnQgPSBfc2VwYXJhdG9ySW5kaWNlcy5sYXN0ICsgMTsKICAgIGlmIChpc0Jhc2U2NCkgewogICAgICByZXR1cm4gYmFzZTY0LmRlY29kZXIuY29udmVydCh0ZXh0LCBzdGFydCk7CiAgICB9CgogICAgLy8gTm90IGJhc2U2NCwgZG8gcGVyY2VudC1kZWNvZGluZyBhbmQgcmV0dXJuIHRoZSByZW1haW5pbmcgYnl0ZXMuCiAgICAvLyBDb21wdXRlIHJlc3VsdCBzaXplLgogICAgY29uc3QgaW50IHBlcmNlbnQgPSAweDI1OwogICAgaW50IGxlbmd0aCA9IHRleHQubGVuZ3RoIC0gc3RhcnQ7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjb2RlVW5pdCA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNvZGVVbml0ID09IHBlcmNlbnQpIHsKICAgICAgICBpICs9IDI7CiAgICAgICAgbGVuZ3RoIC09IDI7CiAgICAgIH0KICAgIH0KICAgIC8vIEZpbGwgcmVzdWx0IGFycmF5LgogICAgVWludDhMaXN0IHJlc3VsdCA9IFVpbnQ4TGlzdChsZW5ndGgpOwogICAgaWYgKGxlbmd0aCA9PSB0ZXh0Lmxlbmd0aCkgewogICAgICByZXN1bHQuc2V0UmFuZ2UoMCwgbGVuZ3RoLCB0ZXh0LmNvZGVVbml0cywgc3RhcnQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaW50IGluZGV4ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGNvZGVVbml0ID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY29kZVVuaXQgIT0gcGVyY2VudCkgewogICAgICAgIHJlc3VsdFtpbmRleCsrXSA9IGNvZGVVbml0OwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpICsgMiA8IHRleHQubGVuZ3RoKSB7CiAgICAgICAgICBpbnQgYnl0ZSA9IHBhcnNlSGV4Qnl0ZSh0ZXh0LCBpICsgMSk7CiAgICAgICAgICBpZiAoYnl0ZSA+PSAwKSB7CiAgICAgICAgICAgIHJlc3VsdFtpbmRleCsrXSA9IGJ5dGU7CiAgICAgICAgICAgIGkgKz0gMjsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBwZXJjZW50IGVzY2FwZSIsIHRleHQsIGkpOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoaW5kZXggPT0gcmVzdWx0Lmxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIHN0cmluZyBjcmVhdGVkIGZyb20gdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEgVVJJLgogICAqCiAgICogSWYgdGhlIGNvbnRlbnQgaXMgQmFzZTY0IGVuY29kZWQsIGl0IHdpbGwgYmUgZGVjb2RlZCB0byBieXRlcyBhbmQgdGhlbgogICAqIGRlY29kZWQgdG8gYSBzdHJpbmcgdXNpbmcgW2VuY29kaW5nXS4KICAgKiBJZiBlbmNvZGluZyBpcyBvbWl0dGVkLCB0aGUgdmFsdWUgb2YgYSBgY2hhcnNldGAgcGFyYW1ldGVyIGlzIHVzZWQKICAgKiBpZiBpdCBpcyByZWNvZ25pemVkIGJ5IFtFbmNvZGluZy5nZXRCeU5hbWVdLCBvdGhlcndpc2UgaXQgZGVmYXVsdHMgdG8KICAgKiB0aGUgW2FzY2lpXSBlbmNvZGluZywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgZW5jb2RpbmcgZm9yIGRhdGEgVVJJcwogICAqIHRoYXQgZG8gbm90IHNwZWNpZnkgYW4gZW5jb2RpbmcuCiAgICoKICAgKiBJZiB0aGUgY29udGVudCBpcyBub3QgQmFzZTY0IGVuY29kZWQsIGl0IHdpbGwgZmlyc3QgaGF2ZSBwZXJjZW50LWVzY2FwZXMKICAgKiBjb252ZXJ0ZWQgdG8gYnl0ZXMgYW5kIHRoZW4gdGhlIGNoYXJhY3RlciBjb2RlcyBhbmQgYnl0ZSB2YWx1ZXMgYXJlCiAgICogZGVjb2RlZCB1c2luZyBbZW5jb2RpbmddLgogICAqLwogIFN0cmluZyBjb250ZW50QXNTdHJpbmcoe0VuY29kaW5nIGVuY29kaW5nfSkgewogICAgaWYgKGVuY29kaW5nID09IG51bGwpIHsKICAgICAgdmFyIGNoYXJzZXQgPSB0aGlzLmNoYXJzZXQ7IC8vIFJldHVybnMgIlVTLUFTQ0lJIiBpZiBub3QgcHJlc2VudC4KICAgICAgZW5jb2RpbmcgPSBFbmNvZGluZy5nZXRCeU5hbWUoY2hhcnNldCk7CiAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiVW5rbm93biBjaGFyc2V0OiAkY2hhcnNldCIpOwogICAgICB9CiAgICB9CiAgICBTdHJpbmcgdGV4dCA9IF90ZXh0OwogICAgaW50IHN0YXJ0ID0gX3NlcGFyYXRvckluZGljZXMubGFzdCArIDE7CiAgICBpZiAoaXNCYXNlNjQpIHsKICAgICAgdmFyIGNvbnZlcnRlciA9IGJhc2U2NC5kZWNvZGVyLmZ1c2UoZW5jb2RpbmcuZGVjb2Rlcik7CiAgICAgIHJldHVybiBjb252ZXJ0ZXIuY29udmVydCh0ZXh0LnN1YnN0cmluZyhzdGFydCkpOwogICAgfQogICAgcmV0dXJuIF9VcmkuX3VyaURlY29kZSh0ZXh0LCBzdGFydCwgdGV4dC5sZW5ndGgsIGVuY29kaW5nLCBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBBIG1hcCByZXByZXNlbnRpbmcgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG1lZGlhIHR5cGUuCiAgICoKICAgKiBBIGRhdGEgVVJJIG1heSBjb250YWluIHBhcmFtZXRlcnMgYmV0d2VlbiB0aGUgTUlNRSB0eXBlIGFuZCB0aGUKICAgKiBkYXRhLiBUaGlzIGNvbnZlcnRzIHRoZXNlIHBhcmFtZXRlcnMgdG8gYSBtYXAgZnJvbSBwYXJhbWV0ZXIgbmFtZQogICAqIHRvIHBhcmFtZXRlciB2YWx1ZS4KICAgKiBUaGUgbWFwIG9ubHkgY29udGFpbnMgcGFyYW1ldGVycyB0aGF0IGFjdHVhbGx5IG9jY3VyIGluIHRoZSBVUkkuCiAgICogVGhlIGBjaGFyc2V0YCBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSBldmVuIGlmIGl0IGRvZXNuJ3Qgb2NjdXIKICAgKiBpbiB0aGUgVVJJLCB3aGljaCBpcyByZWZsZWN0ZWQgYnkgdGhlIFtjaGFyc2V0XSBnZXR0ZXIuIFRoaXMgbWVhbnMgdGhhdAogICAqIFtjaGFyc2V0XSBtYXkgcmV0dXJuIGEgdmFsdWUgZXZlbiBpZiBgcGFyYW1ldGVyc1siY2hhcnNldCJdYCBpcyBgbnVsbGAuCiAgICoKICAgKiBJZiB0aGUgdmFsdWVzIGNvbnRhaW4gbm9uLUFTQ0lJIHZhbHVlcyBvciBwZXJjZW50IGVzY2FwZXMsCiAgICogdGhleSBhcmUgZGVjb2RlZCBhcyBVVEYtOC4KICAgKi8KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBwYXJhbWV0ZXJzIHsKICAgIHZhciByZXN1bHQgPSA8U3RyaW5nLCBTdHJpbmc+e307CiAgICBmb3IgKGludCBpID0gMzsgaSA8IF9zZXBhcmF0b3JJbmRpY2VzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIHZhciBzdGFydCA9IF9zZXBhcmF0b3JJbmRpY2VzW2kgLSAyXSArIDE7CiAgICAgIHZhciBlcXVhbHMgPSBfc2VwYXJhdG9ySW5kaWNlc1tpIC0gMV07CiAgICAgIHZhciBlbmQgPSBfc2VwYXJhdG9ySW5kaWNlc1tpXTsKICAgICAgU3RyaW5nIGtleSA9IF9VcmkuX3VyaURlY29kZShfdGV4dCwgc3RhcnQsIGVxdWFscywgdXRmOCwgZmFsc2UpOwogICAgICBTdHJpbmcgdmFsdWUgPSBfVXJpLl91cmlEZWNvZGUoX3RleHQsIGVxdWFscyArIDEsIGVuZCwgdXRmOCwgZmFsc2UpOwogICAgICByZXN1bHRba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBVcmlEYXRhIF9wYXJzZShTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBVcmkgc291cmNlVXJpKSB7CiAgICBhc3NlcnQoc3RhcnQgPT0gMCB8fCBzdGFydCA9PSA1KTsKICAgIGFzc2VydCgoc3RhcnQgPT0gNSkgPT0gdGV4dC5zdGFydHNXaXRoKCJkYXRhOiIpKTsKCiAgICAvLy8gQ2hhcmFjdGVyIGNvZGVzLgogICAgY29uc3QgaW50IGNvbW1hID0gMHgyYzsKICAgIGNvbnN0IGludCBzbGFzaCA9IDB4MmY7CiAgICBjb25zdCBpbnQgc2VtaWNvbG9uID0gMHgzYjsKICAgIGNvbnN0IGludCBlcXVhbHMgPSAweDNkOwogICAgTGlzdDxpbnQ+IGluZGljZXMgPSBbc3RhcnQgLSAxXTsKICAgIGludCBzbGFzaEluZGV4ID0gLTE7CiAgICB2YXIgY2hhcjsKICAgIGludCBpID0gc3RhcnQ7CiAgICBmb3IgKDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgY2hhciA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPT0gY29tbWEgfHwgY2hhciA9PSBzZW1pY29sb24pIGJyZWFrOwogICAgICBpZiAoY2hhciA9PSBzbGFzaCkgewogICAgICAgIGlmIChzbGFzaEluZGV4IDwgMCkgewogICAgICAgICAgc2xhc2hJbmRleCA9IGk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIE1JTUUgdHlwZSIsIHRleHQsIGkpOwogICAgICB9CiAgICB9CiAgICBpZiAoc2xhc2hJbmRleCA8IDAgJiYgaSA+IHN0YXJ0KSB7CiAgICAgIC8vIEFuIGVtcHR5IE1JTUUgdHlwZSBpcyBhbGxvd2VkLCBidXQgaWYgbm9uLWVtcHR5IGl0IG11c3QgY29udGFpbgogICAgICAvLyBleGFjdGx5IG9uZSBzbGFzaC4KICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIE1JTUUgdHlwZSIsIHRleHQsIGkpOwogICAgfQogICAgd2hpbGUgKGNoYXIgIT0gY29tbWEpIHsKICAgICAgLy8gUGFyc2UgcGFyYW1ldGVycyBhbmQvb3IgImJhc2U2NCIuCiAgICAgIGluZGljZXMuYWRkKGkpOwogICAgICBpKys7CiAgICAgIGludCBlcXVhbHNJbmRleCA9IC0xOwogICAgICBmb3IgKDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICBjaGFyID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjaGFyID09IGVxdWFscykgewogICAgICAgICAgaWYgKGVxdWFsc0luZGV4IDwgMCkgZXF1YWxzSW5kZXggPSBpOwogICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSBzZW1pY29sb24gfHwgY2hhciA9PSBjb21tYSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChlcXVhbHNJbmRleCA+PSAwKSB7CiAgICAgICAgaW5kaWNlcy5hZGQoZXF1YWxzSW5kZXgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEhhdmUgdG8gYmUgZmluYWwgImJhc2U2NCIuCiAgICAgICAgdmFyIGxhc3RTZXBhcmF0b3IgPSBpbmRpY2VzLmxhc3Q7CiAgICAgICAgaWYgKGNoYXIgIT0gY29tbWEgfHwKICAgICAgICAgICAgaSAhPSBsYXN0U2VwYXJhdG9yICsgNyAvKiAiYmFzZTY0LCIubGVuZ3RoICovIHx8CiAgICAgICAgICAgICF0ZXh0LnN0YXJ0c1dpdGgoImJhc2U2NCIsIGxhc3RTZXBhcmF0b3IgKyAxKSkgewogICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJFeHBlY3RpbmcgJz0nIiwgdGV4dCwgaSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpbmRpY2VzLmFkZChpKTsKICAgIGJvb2wgaXNCYXNlNjQgPSBpbmRpY2VzLmxlbmd0aC5pc09kZDsKICAgIGlmIChpc0Jhc2U2NCkgewogICAgICB0ZXh0ID0gYmFzZTY0Lm5vcm1hbGl6ZSh0ZXh0LCBpICsgMSwgdGV4dC5sZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVmFsaWRhdGUgImRhdGEiIHBhcnQsIG11c3Qgb25seSBjb250YWluIFJGQyAyMzk2ICd1cmljJyBjaGFyYWN0ZXJzCiAgICAgIC8vIChyZXNlcnZlZCwgdW5yZXNlcnZlZCwgb3IgZXNjYXBlIHNlcXVlbmNlcykuCiAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aGlzICh0aHJvd3Mgb24gYSBmcmFnbWVudCBzZXBhcmF0b3IpLgogICAgICB2YXIgZGF0YSA9IF9VcmkuX25vcm1hbGl6ZSh0ZXh0LCBpICsgMSwgdGV4dC5sZW5ndGgsIF91cmljVGFibGUsCiAgICAgICAgICBlc2NhcGVEZWxpbWl0ZXJzOiB0cnVlKTsKICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgewogICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2VSYW5nZShpICsgMSwgdGV4dC5sZW5ndGgsIGRhdGEpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gVXJpRGF0YS5fKHRleHQsIGluZGljZXMsIHNvdXJjZVVyaSk7CiAgfQoKICAvKioKICAgKiBMaWtlIFtVcmkuX3VyaUVuY29kZV0gYnV0IHRha2VzIHRoZSBpbnB1dCBhcyBieXRlcywgbm90IGEgc3RyaW5nLgogICAqCiAgICogRW5jb2RlcyBpbnRvIFtidWZmZXJdIGluc3RlYWQgb2YgY3JlYXRpbmcgaXRzIG93biBidWZmZXIuCiAgICovCiAgc3RhdGljIHZvaWQgX3VyaUVuY29kZUJ5dGVzKAogICAgICBMaXN0PGludD4gY2Fub25pY2FsVGFibGUsIExpc3Q8aW50PiBieXRlcywgU3RyaW5nU2luayBidWZmZXIpIHsKICAgIC8vIEVuY29kZSB0aGUgc3RyaW5nIGludG8gYnl0ZXMgdGhlbiBnZW5lcmF0ZSBhbiBBU0NJSSBvbmx5IHN0cmluZwogICAgLy8gYnkgcGVyY2VudCBlbmNvZGluZyBzZWxlY3RlZCBieXRlcy4KICAgIGludCBieXRlT3IgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICBpbnQgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBieXRlT3IgfD0gYnl0ZTsKICAgICAgaWYgKGJ5dGUgPCAxMjggJiYKICAgICAgICAgICgoY2Fub25pY2FsVGFibGVbYnl0ZSA+PiA0XSAmICgxIDw8IChieXRlICYgMHgwZikpKSAhPSAwKSkgewogICAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKGJ5dGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKF9QRVJDRU5UKTsKICAgICAgICBidWZmZXIud3JpdGVDaGFyQ29kZShfaGV4RGlnaXRzLmNvZGVVbml0QXQoYnl0ZSA+PiA0KSk7CiAgICAgICAgYnVmZmVyLndyaXRlQ2hhckNvZGUoX2hleERpZ2l0cy5jb2RlVW5pdEF0KGJ5dGUgJiAweDBmKSk7CiAgICAgIH0KICAgIH0KICAgIGlmICgoYnl0ZU9yICYgfjB4RkYpICE9IDApIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBieXRlID0gYnl0ZXNbaV07CiAgICAgICAgaWYgKGJ5dGUgPCAwIHx8IGJ5dGUgPiAyNTUpIHsKICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoYnl0ZSwgIm5vbi1ieXRlIHZhbHVlIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAoX3NlcGFyYXRvckluZGljZXNbMF0gPT0gX25vU2NoZW1lKSA/ICJkYXRhOiRfdGV4dCIgOiBfdGV4dDsKCiAgLy8gVGFibGUgb2YgdGhlIGB0b2tlbmAgY2hhcmFjdGVycyBvZiBSRkMgMjA0NSBpbiBhIFVSSS4KICAvLwogIC8vIEEgdG9rZW4gaXMgYW55IFVTLUFTQ0lJIGNoYXJhY3RlciBleGNlcHQgU1BBQ0UsIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQKICAvLyBgdHNwZWNpYWxgIGNoYXJhY3RlcnMuIFRoZSBgdHNwZWNpYWxgIGNhdGVnb3J5IGlzOgogIC8vICcoJywgJyknLCAnPCcsICc+JywgJ0AnLCAnLCcsICc7JywgJzonLCAnXCcsICciJywgJy8nLCAnWywgJ10nLCAnPycsICc9Jy4KICAvLwogIC8vIEluIGEgZGF0YSBVUkksIHdlIGFsc28gbmVlZCB0byBlc2NhcGUgJyUnIGFuZCAnIycgY2hhcmFjdGVycy4KICBzdGF0aWMgY29uc3QgX3Rva2VuQ2hhclRhYmxlID0gWwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAgMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwIDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgJCAmJyAgICorIC0uCiAgICAweDZjZDIsIC8vIDB4MjAgLSAweDJmICAwMTAwMTAxMSAwMDExMDExMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1NjcgODkKICAgIDB4MDNmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExIDExMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgQUJDREVGRyBISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTEgMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXIFhZWiAgIF5fCiAgICAweGM3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMSAxMTEwMDAxMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgYGFiY2RlZmcgaGlqa2xtbm8KICAgIDB4ZmZmZiwgLy8gMHg2MCAtIDB4NmYgIDExMTExMTExIDExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2dyB4eXp7fH1+CiAgICAweDdmZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMSAxMTExMTExMAogIF07CgogIC8vIEFsbCBub24tZXNjYXBlIFJGQy0yMzk2IHVyaWMgY2hhcmFjdGVycy4KICAvLwogIC8vICB1cmljICAgICAgICA9ICByZXNlcnZlZCB8IHVucmVzZXJ2ZWQgfCBlc2NhcGVkCiAgLy8gIHJlc2VydmVkICAgID0gICI7IiB8ICIvIiB8ICI/IiB8ICI6IiB8ICJAIiB8ICImIiB8ICI9IiB8ICIrIiB8ICIkIiB8ICIsIgogIC8vICB1bnJlc2VydmVkICA9ICBhbHBoYW51bSB8IG1hcmsKICAvLyAgbWFyayAgICAgICAgPSAgIi0iIHwgIl8iIHwgIi4iIHwgIiEiIHwgIn4iIHwgIioiIHwgIiciIHwgIigiIHwgIikiCiAgLy8KICAvLyBUaGlzIGlzIHRoZSBzYW1lIGNoYXJhY3RlcnMgYXMgaW4gYSBVUkkgcXVlcnkgKHdoaWNoIGlzIFVSSSBwY2hhciBwbHVzICc/JykKICBzdGF0aWMgY29uc3QgX3VyaWNUYWJsZSA9IF9VcmkuX3F1ZXJ5Q2hhclRhYmxlOwoKICAvLyBDaGFyYWN0ZXJzIGFsbG93ZWQgaW4gYmFzZS02NCBlbmNvZGluZyAoYWxwaGFudW1lcmljLCAnLycsICcrJyBhbmQgJz0nKS4KICBzdGF0aWMgY29uc3QgX2Jhc2U2NFRhYmxlID0gWwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAgMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwIDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICAgLwogICAgMHg4ODAwLCAvLyAweDIwIC0gMHgyZiAgMDAwMDAwMDAgMDAwMTAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3IDg5CiAgICAweDAzZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMSAxMTAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkcgSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExIDExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWVyBYWVoKICAgIDB4MDdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExIDExMTAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZyBoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTEgMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3IHh5egogICAgMHgwN2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTEgMTExMDAwMDAKICBdOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb25zdGFudHMgdXNlZCB0byByZWFkIHRoZSBzY2FubmVyIHJlc3VsdC4KLy8gVGhlIGluZGljZXMgcG9pbnRzIGludG8gdGhlIHRhYmxlIGZpbGxlZCBieSBbX3NjYW5dIHdoaWNoIGNvbnRhaW5zCi8vIHJlY29nbml6ZWQgcG9zaXRpb25zIGluIHRoZSBzY2FubmVkIFVSSS4KLy8gVGhlIGAwYCBpbmRleCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseS4KCi8vLyBJbmRleCBvZiB0aGUgcG9zaXRpb24gb2YgdGhhdCBgOmAgYWZ0ZXIgYSBzY2hlbWUuCmNvbnN0IGludCBfc2NoZW1lRW5kSW5kZXggPSAxOwoKLy8vIEluZGV4IG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGp1c3QgYmVmb3JlIHRoZSBob3N0IG5hbWUuCmNvbnN0IGludCBfaG9zdFN0YXJ0SW5kZXggPSAyOwoKLy8vIEluZGV4IG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgYDpgIGJlZm9yZSBhIHBvcnQgdmFsdWUuCmNvbnN0IGludCBfcG9ydFN0YXJ0SW5kZXggPSAzOwoKLy8vIEluZGV4IG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgcGF0aC4KY29uc3QgaW50IF9wYXRoU3RhcnRJbmRleCA9IDQ7CgovLy8gSW5kZXggb2YgdGhlIHBvc2l0aW9uIG9mIHRoZSBgP2AgYmVmb3JlIGEgcXVlcnkuCmNvbnN0IGludCBfcXVlcnlTdGFydEluZGV4ID0gNTsKCi8vLyBJbmRleCBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIGAjYCBiZWZvcmUgYSBmcmFnbWVudC4KY29uc3QgaW50IF9mcmFnbWVudFN0YXJ0SW5kZXggPSA2OwoKLy8vIEluZGV4IG9mIGEgcG9zaXRpb24gd2hlcmUgdGhlIFVSSSB3YXMgZGV0ZXJtaW5lZCB0byBiZSAibm9uLXNpbXBsZSIuCmNvbnN0IGludCBfbm90U2ltcGxlSW5kZXggPSA3OwoKLy8gSW5pdGlhbCBzdGF0ZSBmb3Igc2Nhbm5lci4KY29uc3QgaW50IF91cmlTdGFydCA9IDAwOwoKLy8gSWYgc2Nhbm5pbmcgb2YgYSBVUkkgdGVybWluYXRlcyBpbiB0aGlzIHN0YXRlIG9yIGFib3ZlLAovLyBjb25zaWRlciB0aGUgVVJJIG5vbi1zaW1wbGUKY29uc3QgaW50IF9ub25TaW1wbGVFbmRTdGF0ZXMgPSAxNDsKCi8vIEluaXRpYWwgc3RhdGUgZm9yIHNjaGVtZSB2YWxpZGF0aW9uLgpjb25zdCBpbnQgX3NjaGVtZVN0YXJ0ID0gMjA7CgovLy8gVHJhbnNpdGlvbiB0YWJsZXMgdXNlZCB0byBzY2FuIGEgVVJJIHRvIGRldGVybWluZSBpdHMgc3RydWN0dXJlLgovLy8KLy8vIFRoZSB0YWJsZXMgcmVwcmVzZW50IGEgc3RhdGUgbWFjaGluZSB3aXRoIG91dHB1dC4KLy8vCi8vLyBUbyBzY2FuIHRoZSBVUkksIHN0YXJ0IGluIHRoZSBbX3VyaVN0YXJ0XSBzdGF0ZSwgdGhlbiByZWFkIGVhY2ggY2hhcmFjdGVyCi8vLyBvZiB0aGUgVVJJIGluIG9yZGVyLCBmcm9tIHN0YXJ0IHRvIGVuZCwgYW5kIGZvciBlYWNoIGNoYXJhY3RlciBwZXJmb3JtIGEKLy8vIHRyYW5zaXRpb24gdG8gYSBuZXcgc3RhdGUgd2hpbGUgd3JpdGluZyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbnRvIHRoZSBvdXRwdXQKLy8vIGJ1ZmZlciBhdCBhIGRlc2lnbmF0ZWQgaW5kZXguCi8vLwovLy8gRWFjaCBzdGF0ZSwgcmVwcmVzZW50ZWQgYnkgYW4gaW50ZWdlciB3aGljaCBpcyBhbiBpbmRleCBpbnRvCi8vLyBbX3NjYW5uZXJUYWJsZXNdLCBoYXMgYSBzZXQgb2YgdHJhbnNpdGlvbnMsIG9uZSBmb3IgZWFjaCBjaGFyYWN0ZXIuCi8vLyBUaGUgdHJhbnNpdGlvbnMgYXJlIGVuY29kZWQgYXMgYSA1LWJpdCBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbmV4dCBzdGF0ZQovLy8gYW5kIGEgMy1iaXQgaW5kZXggaW50byB0aGUgb3V0cHV0IHRhYmxlLgovLy8KLy8vIEZvciBVUkkgc2Nhbm5pbmcsIG9ubHkgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIwIHRocm91Z2ggVSswMDdFIGFyZQovLy8gaW50ZXJlc3RpbmcsIGFsbCBjaGFyYWN0ZXJzIG91dHNpZGUgdGhhdCByYW5nZSBhcmUgdHJlYXRlZCB0aGUgc2FtZS4KLy8vIFRoZSB0YWJsZXMgb25seSBjb250YWluIDk2IGVudHJpZXMsIHJlcHJlc2VudGluZyB0aGF0IGNoYXJhY3RlcnMgaW4gdGhlCi8vLyBpbnRlcmVzdGluZyByYW5nZSwgcGx1cyBvbmUgbW9yZSB0byByZXByZXNlbnQgYWxsIHZhbHVlcyBvdXRzaWRlIHRoZSByYW5nZS4KLy8vIFRoZSBjaGFyYWN0ZXIgZW50cmllcyBhcmUgc3RvcmVkIGluIG9uZSBgVWludDhMaXN0YCBwZXIgc3RhdGUsIHdpdGggdGhlCi8vLyB0cmFuc2l0aW9uIGZvciBhIGNoYXJhY3RlciBhdCBwb3NpdGlvbiBgY2hhcmFjdGVyIF4gMHg2MGAsCi8vLyB3aGljaCBtYXBzIHRoZSByYW5nZSBVKzAwMjAgLi4gVSswMDdGIGludG8gcG9zaXRpb25zIDAgLi4gOTUuCi8vLyBBbGwgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIG1hcHBlZCB0byBwb3NpdGlvbiAzMSAoYDB4N2YgXiAweDYwYCkgd2hpY2gKLy8vIHJlcHJlc2VudHMgdGhlIHRyYW5zaXRpb24gZm9yIGFsbCByZW1haW5pbmcgY2hhcmFjdGVycy4KZmluYWwgTGlzdDxVaW50OExpc3Q+IF9zY2FubmVyVGFibGVzID0gX2NyZWF0ZVRhYmxlcygpOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb2RlIHRvIGNyZWF0ZSB0aGUgVVJJIHNjYW5uZXIgdGFibGUuCgovLy8gQ3JlYXRlcyB0aGUgdGFibGVzIGZvciBbX3NjYW5uZXJUYWJsZXNdIHVzZWQgYnkgW1VyaS5wYXJzZV0uCi8vLwovLy8gU2VlIFtfc2Nhbm5lclRhYmxlc10gZm9yIHRoZSBnZW5lcmF0ZWQgZm9ybWF0LgovLy8KLy8vIFRoZSBjb25jcmV0ZSB0YWJsZXMgYXJlIGNob3NlbiBhcyBhIHRyYWRlLW9mZiBiZXR3ZWVuIHRoZSBudW1iZXIgb2Ygc3RhdGVzCi8vLyBuZWVkZWQgYW5kIHRoZSBwcmVjaXNpb24gb2YgdGhlIHJlc3VsdC4KLy8vIFRoaXMgYWxsb3dzIGRlZmluaXRlbHkgcmVjb2duaXppbmcgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBVUkkKLy8vIChwcmVzZW5jZSBhbmQgbG9jYXRpb24gb2Ygc2NoZW1lLCB1c2VyLWluZm8sIGhvc3QsIHBvcnQsIHBhdGgsIHF1ZXJ5IGFuZAovLy8gZnJhZ21lbnQpIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgZGV0ZWN0aW5nIHRoYXQgc29tZSBjb21wb25lbnRzIGFyZSBub3QKLy8vIGluIGNhbm9uaWNhbCBmb3JtIChhbnl0aGluZyBjb250YWluaW5nIGEgYCVgLCBhIGhvc3QtbmFtZSBjb250YWluaW5nIGEKLy8vIGNhcGl0YWwgbGV0dGVyKS4gU2luY2UgdGhlIHNjYW5uZXIgZG9lc24ndCBrbm93IHdoZXRoZXIgc29tZXRoaW5nIGlzIGEKLy8vIHNjaGVtZSBvciBhIHBhdGggdW50aWwgaXQgc2VlcyBgOmAsIG9yIHVzZXItaW5mbyBvciBob3N0IHVudGlsIGl0IHNlZXMKLy8vIGEgYEBgLCBhIHNlY29uZCBwYXNzIGlzIG5lZWRlZCB0byB2YWxpZGF0ZSB0aGUgc2NoZW1lIGFuZCBhbnkgdXNlci1pbmZvCi8vLyBpcyBjb25zaWRlcmVkIG5vbi1jYW5vbmljYWwgYnkgZGVmYXVsdC4KLy8vCi8vLyBUaGUgc3RhdGVzIChzdGFydGluZyBmcm9tIFtfdXJpU3RhcnRdKSB3cml0ZSBwb3NpdGlvbnMgd2hpbGUgc2Nhbm5pbmcKLy8vIGEgc3RyaW5nIGZyb20gYHN0YXJ0YCB0byBgZW5kYCBhcyBmb2xsb3dzOgovLy8KLy8vIC0gW19zY2hlbWVFbmRJbmRleF06IFNob3VsZCBiZSBpbml0aWFsaXplZCB0byBgc3RhcnQtMWAuCi8vLyAgIElmIHRoZSBVUkkgaGFzIGEgc2NoZW1lLCBpdCBpcyBzZXQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBgOmAgYWZ0ZXIKLy8vICAgdGhlIHNjaGVtZS4KLy8vIC0gW19ob3N0U3RhcnRJbmRleF06IFNob3VsZCBiZSBpbml0aWFsaXplZCB0byBgc3RhcnQgLSAxYC4KLy8vICAgSWYgdGhlIFVSSSBoYXMgYW4gYXV0aG9yaXR5LCBpdCBpcyBzZXQgdG8gdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlCi8vLyAgIGhvc3QgbmFtZSAtIGVpdGhlciB0aGUgc2Vjb25kIGAvYCBpbiB0aGUgYC8vYCBsZWFkaW5nIHRoZSBhdXRob3JpdHksCi8vLyAgIG9yIHRoZSBgQGAgYWZ0ZXIgYSB1c2VyLWluZm8uIENvbXBhcmluZyB0aGlzIHZhbHVlIHRvIHRoZSBzY2hlbWUgZW5kCi8vLyAgIHBvc2l0aW9uIGNhbiBiZSB1c2VkIHRvIGRldGVjdCB0aGF0IHRoZXJlIGlzIGEgdXNlci1pbmZvIGNvbXBvbmVudC4KLy8vIC0gW19wb3J0U3RhcnRJbmRleF06IFNob3VsZCBiZSBpbml0aWFsaXplZCB0byBgc3RhcnRgLgovLy8gICBTZXQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGA6YCBpbiBhbiBhdXRob3JpdHksIGFuZCB1bmNoYW5nZWQKLy8vICAgaWYgdGhlcmUgaXMgbm8gYXV0aG9yaXR5IG9yIG5vIGA6YCBpbiBhbiBhdXRob3JpdHkuCi8vLyAgIElmIHRoaXMgcG9zaXRpb24gaXMgYWZ0ZXIgdGhlIGhvc3Qgc3RhcnQsIHRoZXJlIGlzIGEgcG9ydCwgb3RoZXJ3aXNlIGl0Ci8vLyAgIGlzIGp1c3QgbWFya2luZyBhIGNvbG9uIGluIHRoZSB1c2VyLWluZm8gY29tcG9uZW50LgovLy8gLSBbX3BhdGhTdGFydEluZGV4XTogU2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIGBzdGFydGAuCi8vLyAgIElzIHNldCB0byB0aGUgZmlyc3QgcGF0aCBjaGFyYWN0ZXIgdW5sZXNzIHRoZSBwYXRoIGlzIGVtcHR5LgovLy8gICBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgdGhlIHBvc2l0aW9uIGlzIGVpdGhlciB1bmNoYW5nZWQgKGBzdGFydGApIG9yCi8vLyAgIHRoZSBmaXJzdCBzbGFzaCBvZiBhbiBhdXRob3JpdHkuIFNvLCBpZiB0aGUgcGF0aCBzdGFydCBpcyBiZWZvcmUgYQovLy8gICBob3N0IHN0YXJ0IG9yIHNjaGVtZSBlbmQsIHRoZSBwYXRoIGlzIGVtcHR5LgovLy8gLSBbX3F1ZXJ5U3RhcnRJbmRleF06IFNob3VsZCBiZSBpbml0aWFsaXplZCB0byBgZW5kYC4KLy8vICAgVGhlIHBvc2l0aW9uIG9mIHRoZSBgP2AgbGVhZGluZyBhIHF1ZXJ5IGlmIHRoZSBVUkkgY29udGFpbnMgYSBxdWVyeS4KLy8vIC0gW19mcmFnbWVudFN0YXJ0SW5kZXhdOiBTaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYGVuZGAuCi8vLyAgIFRoZSBwb3NpdGlvbiBvZiB0aGUgYCNgIGxlYWRpbmcgYSBmcmFnbWVudCBpZiB0aGUgVVJJIGNvbnRhaW5zIGEgZnJhZ21lbnQuCi8vLyAtIFtfbm90U2ltcGxlSW5kZXhdOiBTaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYHN0YXJ0IC0gMWAuCi8vLyAgIFNldCB0byBhbm90aGVyIHZhbHVlIGlmIHRoZSBVUkkgaXMgY29uc2lkZXJlZCAibm90IHNpbXBsZSIuCi8vLyAgIFRoaXMgaXMgZWxhYm9yYXRlZCBiZWxvdy4KLy8vCi8vLyAjIFNpbXBsZSBVUklzCi8vLyBBIFVSSSBpcyBjb25zaWRlcmVkICJzaW1wbGUiIGlmIGl0IGlzIGluIGEgbm9ybWFsaXplZCBmb3JtIGNvbnRhaW5pbmcgbm8KLy8vIGVzY2FwZXMuIFRoaXMgYWxsb3dzIHVzIHRvIHNraXAgbm9ybWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgd2hldGhlciBlc2NhcGVzCi8vLyBhcmUgdmFsaWQsIGFuZCB0byBleHRyYWN0IGNvbXBvbmVudHMgd2l0aG91dCB3b3JyeWluZyBhYm91dCB1bmVzY2FwaW5nLgovLy8KLy8vIFRoZSBzY2FubmVyIGNvbXB1dGVzIGEgY29uc2VydmF0aXZlIGFwcHJveGltYXRpb24gb2YgYmVpbmcgInNpbXBsZSIuCi8vLyBJdCByZWplY3RzIGFueSBVUkkgd2l0aCBhbiBlc2NhcGUsIHdpdGggYSB1c2VyLWluZm8gY29tcG9uZW50IChtYWlubHkKLy8vIGJlY2F1c2UgdGhleSBhcmUgcmFyZSBhbmQgd291bGQgaW5jcmVhc2UgdGhlIG51bWJlciBvZiBzdGF0ZXMgaW4gdGhlCi8vLyBzY2FubmVyIHNpZ25pZmljYW50bHkpLCB3aXRoIGFuIElQVjYgaG9zdCBvciB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIgaW4KLy8vIHRoZSBzY2hlbWUgb3IgaG9zdCBuYW1lICh0aGUgc2NoZW1lIGlzIGhhbmRsZWQgaW4gYSBzZWNvbmQgc2NhbiB1c2luZwovLy8gYSBzZXBhcmF0ZSB0d28tc3RhdGUgdGFibGUpLgovLy8gRnVydGhlciwgcGF0aHMgY29udGFpbmluZyBgLi5gIG9yIGAuYCBwYXRoIHNlZ21lbnRzIGFyZSBjb25zaWRlcmVkCi8vLyBub24tc2ltcGxlIGV4Y2VwdCBmb3IgcHVyZSByZWxhdGl2ZSBwYXRocyAobm8gc2NoZW1lIG9yIGF1dGhvcml0eSkgc3RhcnRpbmcKLy8vIHdpdGggYSBzZXF1ZW5jZSBvZiAiLi4vIiBzZWdtZW50cy4KLy8vCi8vLyBUaGUgdHJhbnNpdGlvbiB0YWJsZXMgY2Fubm90IGRldGVjdCBhIHRyYWlsaW5nICIuLiIgaW4gdGhlIHBhdGgsCi8vLyBmb2xsb3dlZCBieSBhIHF1ZXJ5IG9yIGZyYWdtZW50LCBiZWNhdXNlIHRoZSBzZWdtZW50IGlzIG5vdCBrbm93biB0byBiZQovLy8gY29tcGxldGUgdW50aWwgd2UgYXJlIHBhc3QgaXQsIGFuZCB3ZSB0aGVuIG5lZWQgdG8gc3RvcmUgdGhlIHF1ZXJ5L2ZyYWdtZW50Ci8vLyBzdGFydCBpbnN0ZWFkLiBUaGlzIGNhc3QgaXMgY2hlY2tlZCBtYW51YWxseSBwb3N0LXNjYW5uaW5nIChzdWNoIGEgcGF0aAovLy8gbmVlZHMgdG8gYmUgbm9ybWFsaXplZCB0byBlbmQgaW4gIi4uLyIsIHNvIHRoZSBVUkkgc2hvdWxkbid0IGJlIGNvbnNpZGVyZWQKLy8vIHNpbXBsZSkuCkxpc3Q8VWludDhMaXN0PiBfY3JlYXRlVGFibGVzKCkgewogIC8vIFRPRE8obHJuKTogVXNlIGEgcHJlY29tcHV0ZWQgdGFibGUuCgogIC8vIFRvdGFsIG51bWJlciBvZiBzdGF0ZXMgZm9yIHRoZSBzY2FubmVyLgogIGNvbnN0IGludCBzdGF0ZUNvdW50ID0gMjI7CgogIC8vIFN0YXRlcyB1c2VkIHRvIHNjYW4gYSBVUkkgZnJvbSBzY3JhdGNoLgogIGNvbnN0IGludCBzY2hlbWVPclBhdGggPSAwMTsKICBjb25zdCBpbnQgYXV0aE9yUGF0aCA9IDAyOwogIGNvbnN0IGludCBhdXRoT3JQYXRoU2xhc2ggPSAwMzsKICBjb25zdCBpbnQgdWluZm9Pckhvc3QwID0gMDQ7CiAgY29uc3QgaW50IHVpbmZvT3JIb3N0ID0gMDU7CiAgY29uc3QgaW50IHVpbmZvT3JQb3J0MCA9IDA2OwogIGNvbnN0IGludCB1aW5mb09yUG9ydCA9IDA3OwogIGNvbnN0IGludCBpcHY2SG9zdCA9IDA4OwogIGNvbnN0IGludCByZWxQYXRoU2VnID0gMDk7CiAgY29uc3QgaW50IHBhdGhTZWcgPSAxMDsKICBjb25zdCBpbnQgcGF0aCA9IDExOwogIGNvbnN0IGludCBxdWVyeSA9IDEyOwogIGNvbnN0IGludCBmcmFnbWVudCA9IDEzOwogIGNvbnN0IGludCBzY2hlbWVPclBhdGhEb3QgPSAxNDsKICBjb25zdCBpbnQgc2NoZW1lT3JQYXRoRG90MiA9IDE1OwogIGNvbnN0IGludCByZWxQYXRoU2VnRG90ID0gMTY7CiAgY29uc3QgaW50IHJlbFBhdGhTZWdEb3QyID0gMTc7CiAgY29uc3QgaW50IHBhdGhTZWdEb3QgPSAxODsKICBjb25zdCBpbnQgcGF0aFNlZ0RvdDIgPSAxOTsKCiAgLy8gU3RhdGVzIHVzZWQgdG8gdmFsaWRhdGUgYSBzY2hlbWUgYWZ0ZXIgaXRzIGVuZCBwb3NpdGlvbiBoYXMgYmVlbiBmb3VuZC4KICBjb25zdCBpbnQgc2NoZW1lMCA9IF9zY2hlbWVTdGFydDsKICBjb25zdCBpbnQgc2NoZW1lID0gMjE7CgogIC8vIENvbnN0YW50cyBlbmNvZGluZyB0aGUgd3JpdGUtaW5kZXggZm9yIHRoZSBzdGF0ZSB0cmFuc2l0aW9uIGludG8gdGhlIHRvcCA1CiAgLy8gYml0cyBvZiBhIGJ5dGUuCiAgY29uc3QgaW50IHNjaGVtZUVuZCA9IF9zY2hlbWVFbmRJbmRleCA8PCA1OwogIGNvbnN0IGludCBob3N0U3RhcnQgPSBfaG9zdFN0YXJ0SW5kZXggPDwgNTsKICBjb25zdCBpbnQgcG9ydFN0YXJ0ID0gX3BvcnRTdGFydEluZGV4IDw8IDU7CiAgY29uc3QgaW50IHBhdGhTdGFydCA9IF9wYXRoU3RhcnRJbmRleCA8PCA1OwogIGNvbnN0IGludCBxdWVyeVN0YXJ0ID0gX3F1ZXJ5U3RhcnRJbmRleCA8PCA1OwogIGNvbnN0IGludCBmcmFnbWVudFN0YXJ0ID0gX2ZyYWdtZW50U3RhcnRJbmRleCA8PCA1OwogIGNvbnN0IGludCBub3RTaW1wbGUgPSBfbm90U2ltcGxlSW5kZXggPDwgNTsKCiAgLy8vIFRoZSBgdW5yZXNlcnZlZGAgY2hhcmFjdGVycyBvZiBSRkMgMzk4Ni4KICBjb25zdCB1bnJlc2VydmVkID0KICAgICAgIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LS5ffiI7CgogIC8vLyBUaGUgYHN1Yi1kZWxpbWAgY2hhcmFjdGVycyBvZiBSRkMgMzk4Ni4KICBjb25zdCBzdWJEZWxpbXMgPSByIiEkJicoKSorLDs9IjsKICAvLyBUaGUgYHBjaGFyYCBjaGFyYWN0ZXJzIG9mIFJGQyAzOTg2OiBjaGFyYWN0ZXJzIHRoYXQgbWF5IG9jY3VyIGluIGEgcGF0aCwKICAvLyBleGNsdWRpbmcgZXNjYXBlcy4KICBjb25zdCBwY2hhciA9ICIkdW5yZXNlcnZlZCRzdWJEZWxpbXMiOwoKICB2YXIgdGFibGVzID0gTGlzdDxVaW50OExpc3Q+LmdlbmVyYXRlKHN0YXRlQ291bnQsIChfKSA9PiBVaW50OExpc3QoOTYpKTsKCiAgLy8gSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemUgdGhlIHRhYmxlIGZvciBbc3RhdGVdIHdpdGggYSBkZWZhdWx0CiAgLy8gdHJhbnNpdGlvbiBhbmQgcmV0dXJucyB0aGUgdGFibGUuCiAgVWludDhMaXN0IGJ1aWxkKHN0YXRlLCBkZWZhdWx0VHJhbnNpdGlvbikgPT4KICAgICAgdGFibGVzW3N0YXRlXS4uZmlsbFJhbmdlKDAsIDk2LCBkZWZhdWx0VHJhbnNpdGlvbik7CgogIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBzZXRzIHRoZSB0cmFuc2l0aW9uIGZvciBlYWNoIGNoYXJhY3RlciBpbiBbY2hhcnNdCiAgLy8gdG8gW3RyYW5zaXRpb25dIGluIHRoZSBbdGFyZ2V0XSB0YWJsZS4KICAvLyBUaGUgW2NoYXJzXSBzdHJpbmcgbXVzdCBjb250YWluIG9ubHkgY2hhcmFjdGVycyBpbiB0aGUgVSswMDIwIC4uIFUrMDA3RQogIC8vIHJhbmdlLgogIHZvaWQgc2V0Q2hhcnMoVWludDhMaXN0IHRhcmdldCwgU3RyaW5nIGNoYXJzLCBpbnQgdHJhbnNpdGlvbikgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY2hhciA9IGNoYXJzLmNvZGVVbml0QXQoaSk7CiAgICAgIHRhcmdldFtjaGFyIF4gMHg2MF0gPSB0cmFuc2l0aW9uOwogICAgfQogIH0KCiAgLy8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBzZXRzIHRoZSB0cmFuc2l0aW9uIGZvciBhbGwgY2hhcmFjdGVycyBpbiB0aGUKICAvLy8gcmFuZ2UgZnJvbSBgcmFuZ2VbMF1gIHRvIGByYW5nZVsxXWAgdG8gW3RyYW5zaXRpb25dIGluIHRoZSBbdGFyZ2V0XSB0YWJsZS4KICAvLy8KICAvLy8gVGhlIFtyYW5nZV0gbXVzdCBiZSBhIHR3by1jaGFyYWN0ZXIgc3RyaW5nIHdoZXJlIGJvdGggY2hhcmFjdGVycyBhcmUgaW4KICAvLy8gdGhlIFUrMDAyMCAuLiBVKzAwN0UgcmFuZ2UgYW5kIHRoZSBmb3JtZXIgY2hhcmFjdGVyIG11c3QgaGF2ZSBhIGxvd2VyCiAgLy8vIGNvZGUgcG9pbnQgdGhhbiB0aGUgbGF0dGVyLgogIHZvaWQgc2V0UmFuZ2UoVWludDhMaXN0IHRhcmdldCwgU3RyaW5nIHJhbmdlLCBpbnQgdHJhbnNpdGlvbikgewogICAgZm9yIChpbnQgaSA9IHJhbmdlLmNvZGVVbml0QXQoMCksIG4gPSByYW5nZS5jb2RlVW5pdEF0KDEpOyBpIDw9IG47IGkrKykgewogICAgICB0YXJnZXRbaSBeIDB4NjBdID0gdHJhbnNpdGlvbjsKICAgIH0KICB9CgogIC8vIENyZWF0ZSB0aGUgdHJhbnNpdGlvbnMgZm9yIGVhY2ggc3RhdGUuCiAgdmFyIGI7CgogIC8vIFZhbGlkYXRlIGFzIHBhdGgsIGlmIGl0IGlzIGEgc2NoZW1lLCB3ZSBoYW5kbGUgaXQgbGF0ZXIuCiAgYiA9IGJ1aWxkKF91cmlTdGFydCwgc2NoZW1lT3JQYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgc2NoZW1lT3JQYXRoKTsKICBzZXRDaGFycyhiLCAiLiIsIHNjaGVtZU9yUGF0aERvdCk7CiAgc2V0Q2hhcnMoYiwgIjoiLCBhdXRoT3JQYXRoIHwgc2NoZW1lRW5kKTsgLy8gSGFuZGxlIGxhdGVyLgogIHNldENoYXJzKGIsICIvIiwgYXV0aE9yUGF0aFNsYXNoKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQoc2NoZW1lT3JQYXRoRG90LCBzY2hlbWVPclBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBzY2hlbWVPclBhdGgpOwogIHNldENoYXJzKGIsICIuIiwgc2NoZW1lT3JQYXRoRG90Mik7CiAgc2V0Q2hhcnMoYiwgJzonLCBhdXRoT3JQYXRoIHwgc2NoZW1lRW5kKTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChzY2hlbWVPclBhdGhEb3QyLCBzY2hlbWVPclBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBzY2hlbWVPclBhdGgpOwogIHNldENoYXJzKGIsICIlIiwgc2NoZW1lT3JQYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAnOicsIGF1dGhPclBhdGggfCBzY2hlbWVFbmQpOwogIHNldENoYXJzKGIsICIvIiwgcmVsUGF0aFNlZyk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHNjaGVtZU9yUGF0aCwgc2NoZW1lT3JQYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgc2NoZW1lT3JQYXRoKTsKICBzZXRDaGFycyhiLCAnOicsIGF1dGhPclBhdGggfCBzY2hlbWVFbmQpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKGF1dGhPclBhdGgsIHBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBwYXRoIHwgcGF0aFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiLyIsIGF1dGhPclBhdGhTbGFzaCB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCBwYXRoU2VnRG90IHwgcGF0aFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQoYXV0aE9yUGF0aFNsYXNoLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCB1aW5mb09ySG9zdDAgfCBob3N0U3RhcnQpOwogIHNldENoYXJzKGIsICIuIiwgcGF0aFNlZ0RvdCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHVpbmZvT3JIb3N0MCwgdWluZm9Pckhvc3QgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCB1aW5mb09ySG9zdCk7CiAgc2V0UmFuZ2UoYiwgIkFaIiwgdWluZm9Pckhvc3QgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI6IiwgdWluZm9PclBvcnQwIHwgcG9ydFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiQCIsIHVpbmZvT3JIb3N0MCB8IGhvc3RTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIlsiLCBpcHY2SG9zdCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgcGF0aFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQodWluZm9Pckhvc3QsIHVpbmZvT3JIb3N0IHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgdWluZm9Pckhvc3QpOwogIHNldFJhbmdlKGIsICJBWiIsIHVpbmZvT3JIb3N0IHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiOiIsIHVpbmZvT3JQb3J0MCB8IHBvcnRTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIkAiLCB1aW5mb09ySG9zdDAgfCBob3N0U3RhcnQpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHVpbmZvT3JQb3J0MCwgdWluZm9PclBvcnQgfCBub3RTaW1wbGUpOwogIHNldFJhbmdlKGIsICIxOSIsIHVpbmZvT3JQb3J0KTsKICBzZXRDaGFycyhiLCAiQCIsIHVpbmZvT3JIb3N0MCB8IGhvc3RTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgcGF0aFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQodWluZm9PclBvcnQsIHVpbmZvT3JQb3J0IHwgbm90U2ltcGxlKTsKICBzZXRSYW5nZShiLCAiMDkiLCB1aW5mb09yUG9ydCk7CiAgc2V0Q2hhcnMoYiwgIkAiLCB1aW5mb09ySG9zdDAgfCBob3N0U3RhcnQpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKGlwdjZIb3N0LCBpcHY2SG9zdCk7CiAgc2V0Q2hhcnMoYiwgIl0iLCB1aW5mb09ySG9zdCk7CgogIGIgPSBidWlsZChyZWxQYXRoU2VnLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCByZWxQYXRoU2VnRG90KTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChyZWxQYXRoU2VnRG90LCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCByZWxQYXRoU2VnRG90Mik7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQocmVsUGF0aFNlZ0RvdDIsIHBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBwYXRoKTsKICBzZXRDaGFycyhiLCAiLyIsIHJlbFBhdGhTZWcpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsgLy8gVGhpcyBzaG91bGQgYmUgbm9uLXNpbXBsZS4KICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7IC8vIFRoaXMgc2hvdWxkIGJlIG5vbi1zaW1wbGUuCgogIGIgPSBidWlsZChwYXRoU2VnLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCBwYXRoU2VnRG90KTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChwYXRoU2VnRG90LCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCBwYXRoU2VnRG90Mik7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQocGF0aFNlZ0RvdDIsIHBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBwYXRoKTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChwYXRoLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQocXVlcnksIHF1ZXJ5IHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcXVlcnkpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKGZyYWdtZW50LCBmcmFnbWVudCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIGZyYWdtZW50KTsKICBzZXRDaGFycyhiLCAiPyIsIGZyYWdtZW50KTsKCiAgLy8gQSBzZXBhcmF0ZSB0d28tc3RhdGUgdmFsaWRhdG9yIGZvciBsb3dlci1jYXNlIHNjaGVtZSBuYW1lcy4KICAvLyBBbnkgbm9uLXNjaGVtZSBjaGFyYWN0ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIgaXMgbWFya2VkIGFzIG5vbi1zaW1wbGUuCiAgYiA9IGJ1aWxkKHNjaGVtZTAsIHNjaGVtZSB8IG5vdFNpbXBsZSk7CiAgc2V0UmFuZ2UoYiwgImF6Iiwgc2NoZW1lKTsKCiAgYiA9IGJ1aWxkKHNjaGVtZSwgc2NoZW1lIHwgbm90U2ltcGxlKTsKICBzZXRSYW5nZShiLCAiYXoiLCBzY2hlbWUpOwogIHNldFJhbmdlKGIsICIwOSIsIHNjaGVtZSk7CiAgc2V0Q2hhcnMoYiwgIistLiIsIHNjaGVtZSk7CgogIHJldHVybiB0YWJsZXM7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvZGUgdGhhdCB1c2VzIHRoZSBVUkkgc2Nhbm5lciB0YWJsZS4KCi8vLyBTY2FuIGEgc3RyaW5nIHVzaW5nIHRoZSBbX3NjYW5uZXJUYWJsZXNdIHN0YXRlIG1hY2hpbmUuCi8vLwovLy8gU2NhbnMgW3VyaV0gZnJvbSBbc3RhcnRdIHRvIFtlbmRdLCBzdGFydGluZyBpbiBzdGF0ZSBbc3RhdGVdIGFuZAovLy8gd3JpdGluZyBvdXRwdXQgaW50byBbaW5kaWNlc10uCi8vLwovLy8gUmV0dXJucyB0aGUgZmluYWwgc3RhdGUuCmludCBfc2NhbihTdHJpbmcgdXJpLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGF0ZSwgTGlzdDxpbnQ+IGluZGljZXMpIHsKICB2YXIgdGFibGVzID0gX3NjYW5uZXJUYWJsZXM7CiAgYXNzZXJ0KGVuZCA8PSB1cmkubGVuZ3RoKTsKICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgdmFyIHRhYmxlID0gdGFibGVzW3N0YXRlXTsKICAgIC8vIFhvciB3aXRoIDB4NjAgdG8gbW92ZSByYW5nZSAweDIwLTB4N2YgaW50byAweDAwLTB4NWYKICAgIGludCBjaGFyID0gdXJpLmNvZGVVbml0QXQoaSkgXiAweDYwOwogICAgLy8gVXNlIDB4MWYgKG5lZSAweDdmKSB0byByZXByZXNlbnQgYWxsIHVuaGFuZGxlZCBjaGFyYWN0ZXJzLgogICAgaWYgKGNoYXIgPiAweDVmKSBjaGFyID0gMHgxZjsKICAgIGludCB0cmFuc2l0aW9uID0gdGFibGVbY2hhcl07CiAgICBzdGF0ZSA9IHRyYW5zaXRpb24gJiAweDFmOwogICAgaW5kaWNlc1t0cmFuc2l0aW9uID4+IDVdID0gaTsKICB9CiAgcmV0dXJuIHN0YXRlOwp9CgpjbGFzcyBfU2ltcGxlVXJpIGltcGxlbWVudHMgVXJpIHsKICBmaW5hbCBTdHJpbmcgX3VyaTsKICBmaW5hbCBpbnQgX3NjaGVtZUVuZDsKICBmaW5hbCBpbnQgX2hvc3RTdGFydDsKICBmaW5hbCBpbnQgX3BvcnRTdGFydDsKICBmaW5hbCBpbnQgX3BhdGhTdGFydDsKICBmaW5hbCBpbnQgX3F1ZXJ5U3RhcnQ7CiAgZmluYWwgaW50IF9mcmFnbWVudFN0YXJ0OwoKICAvLy8gVGhlIHNjaGVtZSBpcyBvZnRlbiB1c2VkIHRvIGRpc3Rpbmd1aXNoIFVSSXMuCiAgLy8vIFRvIG1ha2UgY29tcGFyaXNvbnMgbW9yZSBlZmZpY2llbnQsIHdlIGNhY2hlIHRoZSB2YWx1ZSwgYW5kCiAgLy8vIGNhbm9uaWNhbGl6ZSBhIGZldyBrbm93biB0eXBlcy4KICBTdHJpbmcgX3NjaGVtZUNhY2hlOwogIGludCBfaGFzaENvZGVDYWNoZTsKCiAgX1NpbXBsZVVyaSgKICAgICAgdGhpcy5fdXJpLAogICAgICB0aGlzLl9zY2hlbWVFbmQsCiAgICAgIHRoaXMuX2hvc3RTdGFydCwKICAgICAgdGhpcy5fcG9ydFN0YXJ0LAogICAgICB0aGlzLl9wYXRoU3RhcnQsCiAgICAgIHRoaXMuX3F1ZXJ5U3RhcnQsCiAgICAgIHRoaXMuX2ZyYWdtZW50U3RhcnQsCiAgICAgIHRoaXMuX3NjaGVtZUNhY2hlKTsKCiAgYm9vbCBnZXQgaGFzU2NoZW1lID0+IF9zY2hlbWVFbmQgPiAwOwogIGJvb2wgZ2V0IGhhc0F1dGhvcml0eSA9PiBfaG9zdFN0YXJ0ID4gMDsKICBib29sIGdldCBoYXNVc2VySW5mbyA9PiBfaG9zdFN0YXJ0ID4gX3NjaGVtZUVuZCArIDQ7CiAgYm9vbCBnZXQgaGFzUG9ydCA9PiBfaG9zdFN0YXJ0ID4gMCAmJiBfcG9ydFN0YXJ0ICsgMSA8IF9wYXRoU3RhcnQ7CiAgYm9vbCBnZXQgaGFzUXVlcnkgPT4gX3F1ZXJ5U3RhcnQgPCBfZnJhZ21lbnRTdGFydDsKICBib29sIGdldCBoYXNGcmFnbWVudCA9PiBfZnJhZ21lbnRTdGFydCA8IF91cmkubGVuZ3RoOwoKICBib29sIGdldCBfaXNGaWxlID0+IF9zY2hlbWVFbmQgPT0gNCAmJiBfdXJpLnN0YXJ0c1dpdGgoImZpbGUiKTsKICBib29sIGdldCBfaXNIdHRwID0+IF9zY2hlbWVFbmQgPT0gNCAmJiBfdXJpLnN0YXJ0c1dpdGgoImh0dHAiKTsKICBib29sIGdldCBfaXNIdHRwcyA9PiBfc2NoZW1lRW5kID09IDUgJiYgX3VyaS5zdGFydHNXaXRoKCJodHRwcyIpOwogIGJvb2wgZ2V0IF9pc1BhY2thZ2UgPT4gX3NjaGVtZUVuZCA9PSA3ICYmIF91cmkuc3RhcnRzV2l0aCgicGFja2FnZSIpOwoKICAvLy8gTGlrZSBbaXNTY2hlbWVdIGJ1dCBleHBlY3RzIGFyZ3VtZW50IHRvIGJlIGNhc2Ugbm9ybWFsaXplZC4KICBib29sIF9pc1NjaGVtZShTdHJpbmcgc2NoZW1lKSA9PgogICAgICBfc2NoZW1lRW5kID09IHNjaGVtZS5sZW5ndGggJiYgX3VyaS5zdGFydHNXaXRoKHNjaGVtZSk7CgogIGJvb2wgZ2V0IGhhc0Fic29sdXRlUGF0aCA9PiBfdXJpLnN0YXJ0c1dpdGgoIi8iLCBfcGF0aFN0YXJ0KTsKICBib29sIGdldCBoYXNFbXB0eVBhdGggPT4gX3BhdGhTdGFydCA9PSBfcXVlcnlTdGFydDsKCiAgYm9vbCBnZXQgaXNBYnNvbHV0ZSA9PiBoYXNTY2hlbWUgJiYgIWhhc0ZyYWdtZW50OwoKICBib29sIGlzU2NoZW1lKFN0cmluZyBzY2hlbWUpIHsKICAgIGlmIChzY2hlbWUgPT0gbnVsbCB8fCBzY2hlbWUuaXNFbXB0eSkgcmV0dXJuIF9zY2hlbWVFbmQgPCAwOwogICAgaWYgKHNjaGVtZS5sZW5ndGggIT0gX3NjaGVtZUVuZCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9VcmkuX2NvbXBhcmVTY2hlbWUoc2NoZW1lLCBfdXJpKTsKICB9CgogIFN0cmluZyBnZXQgc2NoZW1lIHsKICAgIGlmIChfc2NoZW1lRW5kIDw9IDApIHJldHVybiAiIjsKICAgIGlmIChfc2NoZW1lQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIF9zY2hlbWVDYWNoZTsKICAgIGlmIChfaXNIdHRwKSB7CiAgICAgIF9zY2hlbWVDYWNoZSA9ICJodHRwIjsKICAgIH0gZWxzZSBpZiAoX2lzSHR0cHMpIHsKICAgICAgX3NjaGVtZUNhY2hlID0gImh0dHBzIjsKICAgIH0gZWxzZSBpZiAoX2lzRmlsZSkgewogICAgICBfc2NoZW1lQ2FjaGUgPSAiZmlsZSI7CiAgICB9IGVsc2UgaWYgKF9pc1BhY2thZ2UpIHsKICAgICAgX3NjaGVtZUNhY2hlID0gInBhY2thZ2UiOwogICAgfSBlbHNlIHsKICAgICAgX3NjaGVtZUNhY2hlID0gX3VyaS5zdWJzdHJpbmcoMCwgX3NjaGVtZUVuZCk7CiAgICB9CiAgICByZXR1cm4gX3NjaGVtZUNhY2hlOwogIH0KCiAgU3RyaW5nIGdldCBhdXRob3JpdHkgPT4KICAgICAgX2hvc3RTdGFydCA+IDAgPyBfdXJpLnN1YnN0cmluZyhfc2NoZW1lRW5kICsgMywgX3BhdGhTdGFydCkgOiAiIjsKICBTdHJpbmcgZ2V0IHVzZXJJbmZvID0+IChfaG9zdFN0YXJ0ID4gX3NjaGVtZUVuZCArIDMpCiAgICAgID8gX3VyaS5zdWJzdHJpbmcoX3NjaGVtZUVuZCArIDMsIF9ob3N0U3RhcnQgLSAxKQogICAgICA6ICIiOwogIFN0cmluZyBnZXQgaG9zdCA9PgogICAgICBfaG9zdFN0YXJ0ID4gMCA/IF91cmkuc3Vic3RyaW5nKF9ob3N0U3RhcnQsIF9wb3J0U3RhcnQpIDogIiI7CiAgaW50IGdldCBwb3J0IHsKICAgIGlmIChoYXNQb3J0KSByZXR1cm4gaW50LnBhcnNlKF91cmkuc3Vic3RyaW5nKF9wb3J0U3RhcnQgKyAxLCBfcGF0aFN0YXJ0KSk7CiAgICBpZiAoX2lzSHR0cCkgcmV0dXJuIDgwOwogICAgaWYgKF9pc0h0dHBzKSByZXR1cm4gNDQzOwogICAgcmV0dXJuIDA7CiAgfQoKICBTdHJpbmcgZ2V0IHBhdGggPT4gX3VyaS5zdWJzdHJpbmcoX3BhdGhTdGFydCwgX3F1ZXJ5U3RhcnQpOwogIFN0cmluZyBnZXQgcXVlcnkgPT4gKF9xdWVyeVN0YXJ0IDwgX2ZyYWdtZW50U3RhcnQpCiAgICAgID8gX3VyaS5zdWJzdHJpbmcoX3F1ZXJ5U3RhcnQgKyAxLCBfZnJhZ21lbnRTdGFydCkKICAgICAgOiAiIjsKICBTdHJpbmcgZ2V0IGZyYWdtZW50ID0+CiAgICAgIChfZnJhZ21lbnRTdGFydCA8IF91cmkubGVuZ3RoKSA/IF91cmkuc3Vic3RyaW5nKF9mcmFnbWVudFN0YXJ0ICsgMSkgOiAiIjsKCiAgU3RyaW5nIGdldCBvcmlnaW4gewogICAgLy8gQ2hlY2sgb3JpZ2luYWwgYmVoYXZpb3IgLSBXM0Mgc3BlYyBpcyB3b25reSEKICAgIGJvb2wgaXNIdHRwID0gX2lzSHR0cDsKICAgIGlmIChfc2NoZW1lRW5kIDwgMCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJDYW5ub3QgdXNlIG9yaWdpbiB3aXRob3V0IGEgc2NoZW1lOiAkdGhpcyIpOwogICAgfQogICAgaWYgKCFpc0h0dHAgJiYgIV9pc0h0dHBzKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoCiAgICAgICAgICAiT3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byBzY2hlbWVzIGh0dHAgYW5kIGh0dHBzOiAkdGhpcyIpOwogICAgfQogICAgaWYgKF9ob3N0U3RhcnQgPT0gX3BvcnRTdGFydCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKAogICAgICAgICAgIkEgJHNjaGVtZTogVVJJIHNob3VsZCBoYXZlIGEgbm9uLWVtcHR5IGhvc3QgbmFtZTogJHRoaXMiKTsKICAgIH0KICAgIGlmIChfaG9zdFN0YXJ0ID09IF9zY2hlbWVFbmQgKyAzKSB7CiAgICAgIHJldHVybiBfdXJpLnN1YnN0cmluZygwLCBfcGF0aFN0YXJ0KTsKICAgIH0KICAgIC8vIE5lZWQgdG8gZHJvcCBhbm9uLWVtcHR5IHVzZXJJbmZvLgogICAgcmV0dXJuIF91cmkuc3Vic3RyaW5nKDAsIF9zY2hlbWVFbmQgKyAzKSArCiAgICAgICAgX3VyaS5zdWJzdHJpbmcoX2hvc3RTdGFydCwgX3BhdGhTdGFydCk7CiAgfQoKICBMaXN0PFN0cmluZz4gZ2V0IHBhdGhTZWdtZW50cyB7CiAgICBpbnQgc3RhcnQgPSBfcGF0aFN0YXJ0OwogICAgaW50IGVuZCA9IF9xdWVyeVN0YXJ0OwogICAgaWYgKF91cmkuc3RhcnRzV2l0aCgiLyIsIHN0YXJ0KSkgc3RhcnQrKzsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiBjb25zdCA8U3RyaW5nPltdOwogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gW107CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY2hhciA9IF91cmkuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPT0gX1NMQVNIKSB7CiAgICAgICAgcGFydHMuYWRkKF91cmkuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7CiAgICAgICAgc3RhcnQgPSBpICsgMTsKICAgICAgfQogICAgfQogICAgcGFydHMuYWRkKF91cmkuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsKICAgIHJldHVybiBMaXN0PFN0cmluZz4udW5tb2RpZmlhYmxlKHBhcnRzKTsKICB9CgogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IHF1ZXJ5UGFyYW1ldGVycyB7CiAgICBpZiAoIWhhc1F1ZXJ5KSByZXR1cm4gY29uc3QgPFN0cmluZywgU3RyaW5nPnt9OwogICAgcmV0dXJuIFVubW9kaWZpYWJsZU1hcFZpZXc8U3RyaW5nLCBTdHJpbmc+KFVyaS5zcGxpdFF1ZXJ5U3RyaW5nKHF1ZXJ5KSk7CiAgfQoKICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGdldCBxdWVyeVBhcmFtZXRlcnNBbGwgewogICAgaWYgKCFoYXNRdWVyeSkgcmV0dXJuIGNvbnN0IDxTdHJpbmcsIExpc3Q8U3RyaW5nPj57fTsKICAgIE1hcCBxdWVyeVBhcmFtZXRlckxpc3RzID0gX1VyaS5fc3BsaXRRdWVyeVN0cmluZ0FsbChxdWVyeSk7CiAgICBmb3IgKHZhciBrZXkgaW4gcXVlcnlQYXJhbWV0ZXJMaXN0cy5rZXlzKSB7CiAgICAgIHF1ZXJ5UGFyYW1ldGVyTGlzdHNba2V5XSA9CiAgICAgICAgICBMaXN0PFN0cmluZz4udW5tb2RpZmlhYmxlKHF1ZXJ5UGFyYW1ldGVyTGlzdHNba2V5XSk7CiAgICB9CiAgICByZXR1cm4gTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+Pi51bm1vZGlmaWFibGUocXVlcnlQYXJhbWV0ZXJMaXN0cyk7CiAgfQoKICBib29sIF9pc1BvcnQoU3RyaW5nIHBvcnQpIHsKICAgIGludCBwb3J0RGlnaXRTdGFydCA9IF9wb3J0U3RhcnQgKyAxOwogICAgcmV0dXJuIHBvcnREaWdpdFN0YXJ0ICsgcG9ydC5sZW5ndGggPT0gX3BhdGhTdGFydCAmJgogICAgICAgIF91cmkuc3RhcnRzV2l0aChwb3J0LCBwb3J0RGlnaXRTdGFydCk7CiAgfQoKICBVcmkgbm9ybWFsaXplUGF0aCgpID0+IHRoaXM7CgogIFVyaSByZW1vdmVGcmFnbWVudCgpIHsKICAgIGlmICghaGFzRnJhZ21lbnQpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIF9TaW1wbGVVcmkoX3VyaS5zdWJzdHJpbmcoMCwgX2ZyYWdtZW50U3RhcnQpLCBfc2NoZW1lRW5kLCBfaG9zdFN0YXJ0LAogICAgICAgIF9wb3J0U3RhcnQsIF9wYXRoU3RhcnQsIF9xdWVyeVN0YXJ0LCBfZnJhZ21lbnRTdGFydCwgX3NjaGVtZUNhY2hlKTsKICB9CgogIFVyaSByZXBsYWNlKAogICAgICB7U3RyaW5nIHNjaGVtZSwKICAgICAgU3RyaW5nIHVzZXJJbmZvLAogICAgICBTdHJpbmcgaG9zdCwKICAgICAgaW50IHBvcnQsCiAgICAgIFN0cmluZyBwYXRoLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IHBhdGhTZWdtZW50cywKICAgICAgU3RyaW5nIHF1ZXJ5LAogICAgICBNYXA8U3RyaW5nLCBkeW5hbWljIC8qU3RyaW5nfEl0ZXJhYmxlPFN0cmluZz4qLyA+IHF1ZXJ5UGFyYW1ldGVycywKICAgICAgU3RyaW5nIGZyYWdtZW50fSkgewogICAgYm9vbCBzY2hlbWVDaGFuZ2VkID0gZmFsc2U7CiAgICBpZiAoc2NoZW1lICE9IG51bGwpIHsKICAgICAgc2NoZW1lID0gX1VyaS5fbWFrZVNjaGVtZShzY2hlbWUsIDAsIHNjaGVtZS5sZW5ndGgpOwogICAgICBzY2hlbWVDaGFuZ2VkID0gIV9pc1NjaGVtZShzY2hlbWUpOwogICAgfSBlbHNlIHsKICAgICAgc2NoZW1lID0gdGhpcy5zY2hlbWU7CiAgICB9CiAgICBib29sIGlzRmlsZSA9IChzY2hlbWUgPT0gImZpbGUiKTsKICAgIGlmICh1c2VySW5mbyAhPSBudWxsKSB7CiAgICAgIHVzZXJJbmZvID0gX1VyaS5fbWFrZVVzZXJJbmZvKHVzZXJJbmZvLCAwLCB1c2VySW5mby5sZW5ndGgpOwogICAgfSBlbHNlIGlmIChfaG9zdFN0YXJ0ID4gMCkgewogICAgICB1c2VySW5mbyA9IF91cmkuc3Vic3RyaW5nKF9zY2hlbWVFbmQgKyAzLCBfaG9zdFN0YXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZXJJbmZvID0gIiI7CiAgICB9CiAgICBpZiAocG9ydCAhPSBudWxsKSB7CiAgICAgIHBvcnQgPSBfVXJpLl9tYWtlUG9ydChwb3J0LCBzY2hlbWUpOwogICAgfSBlbHNlIHsKICAgICAgcG9ydCA9IHRoaXMuaGFzUG9ydCA/IHRoaXMucG9ydCA6IG51bGw7CiAgICAgIGlmIChzY2hlbWVDaGFuZ2VkKSB7CiAgICAgICAgLy8gVGhlIGRlZmF1bHQgcG9ydCBtaWdodCBoYXZlIGNoYW5nZWQuCiAgICAgICAgcG9ydCA9IF9VcmkuX21ha2VQb3J0KHBvcnQsIHNjaGVtZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChob3N0ICE9IG51bGwpIHsKICAgICAgaG9zdCA9IF9VcmkuX21ha2VIb3N0KGhvc3QsIDAsIGhvc3QubGVuZ3RoLCBmYWxzZSk7CiAgICB9IGVsc2UgaWYgKF9ob3N0U3RhcnQgPiAwKSB7CiAgICAgIGhvc3QgPSBfdXJpLnN1YnN0cmluZyhfaG9zdFN0YXJ0LCBfcG9ydFN0YXJ0KTsKICAgIH0gZWxzZSBpZiAodXNlckluZm8uaXNOb3RFbXB0eSB8fCBwb3J0ICE9IG51bGwgfHwgaXNGaWxlKSB7CiAgICAgIGhvc3QgPSAiIjsKICAgIH0KCiAgICBib29sIGhhc0F1dGhvcml0eSA9IGhvc3QgIT0gbnVsbDsKICAgIGlmIChwYXRoICE9IG51bGwgfHwgcGF0aFNlZ21lbnRzICE9IG51bGwpIHsKICAgICAgcGF0aCA9IF9VcmkuX21ha2VQYXRoKHBhdGgsIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocGF0aCksIHBhdGhTZWdtZW50cywKICAgICAgICAgIHNjaGVtZSwgaGFzQXV0aG9yaXR5KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhdGggPSBfdXJpLnN1YnN0cmluZyhfcGF0aFN0YXJ0LCBfcXVlcnlTdGFydCk7CiAgICAgIGlmICgoaXNGaWxlIHx8IChoYXNBdXRob3JpdHkgJiYgIXBhdGguaXNFbXB0eSkpICYmCiAgICAgICAgICAhcGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgICAgICBwYXRoID0gIi8iICsgcGF0aDsKICAgICAgfQogICAgfQoKICAgIGlmIChxdWVyeSAhPSBudWxsIHx8IHF1ZXJ5UGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHF1ZXJ5ID0gX1VyaS5fbWFrZVF1ZXJ5KAogICAgICAgICAgcXVlcnksIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocXVlcnkpLCBxdWVyeVBhcmFtZXRlcnMpOwogICAgfSBlbHNlIGlmIChfcXVlcnlTdGFydCA8IF9mcmFnbWVudFN0YXJ0KSB7CiAgICAgIHF1ZXJ5ID0gX3VyaS5zdWJzdHJpbmcoX3F1ZXJ5U3RhcnQgKyAxLCBfZnJhZ21lbnRTdGFydCk7CiAgICB9CgogICAgaWYgKGZyYWdtZW50ICE9IG51bGwpIHsKICAgICAgZnJhZ21lbnQgPSBfVXJpLl9tYWtlRnJhZ21lbnQoZnJhZ21lbnQsIDAsIGZyYWdtZW50Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKF9mcmFnbWVudFN0YXJ0IDwgX3VyaS5sZW5ndGgpIHsKICAgICAgZnJhZ21lbnQgPSBfdXJpLnN1YnN0cmluZyhfZnJhZ21lbnRTdGFydCArIDEpOwogICAgfQoKICAgIHJldHVybiBfVXJpLl9pbnRlcm5hbChzY2hlbWUsIHVzZXJJbmZvLCBob3N0LCBwb3J0LCBwYXRoLCBxdWVyeSwgZnJhZ21lbnQpOwogIH0KCiAgVXJpIHJlc29sdmUoU3RyaW5nIHJlZmVyZW5jZSkgewogICAgcmV0dXJuIHJlc29sdmVVcmkoVXJpLnBhcnNlKHJlZmVyZW5jZSkpOwogIH0KCiAgVXJpIHJlc29sdmVVcmkoVXJpIHJlZmVyZW5jZSkgewogICAgaWYgKHJlZmVyZW5jZSBpcyBfU2ltcGxlVXJpKSB7CiAgICAgIHJldHVybiBfc2ltcGxlTWVyZ2UodGhpcywgcmVmZXJlbmNlKTsKICAgIH0KICAgIHJldHVybiBfdG9Ob25TaW1wbGUoKS5yZXNvbHZlVXJpKHJlZmVyZW5jZSk7CiAgfQoKICAvLyBNZXJnZSB0d28gc2ltcGxlIFVSSXMuIFRoaXMgc2hvdWxkIGFsd2F5cyByZXN1bHQgaW4gYSBwcmVmaXggb2YKICAvLyBvbmUgY29uY2F0ZW5hdGVkIHdpdGggYSBzdWZmaXggb2YgdGhlIG90aGVyLCBwb3NzaWJseSB3aXRoIGEgYC9gIGluCiAgLy8gdGhlIG1pZGRsZSBvZiB0d28gbWVyZ2VkIHBhdGhzLCB3aGljaCBpcyBhZ2FpbiBzaW1wbGUuCiAgLy8gSW4gYSBmZXcgY2FzZXMsIHRoZXJlIG1pZ2h0IGJlIGEgbmVlZCBmb3IgZXh0cmEgbm9ybWFsaXphdGlvbiwgd2hlbgogIC8vIHJlc29sdmluZyBvbiB0b3Agb2YgYSBrbm93biBzY2hlbWUuCiAgVXJpIF9zaW1wbGVNZXJnZShfU2ltcGxlVXJpIGJhc2UsIF9TaW1wbGVVcmkgcmVmKSB7CiAgICBpZiAocmVmLmhhc1NjaGVtZSkgcmV0dXJuIHJlZjsKICAgIGlmIChyZWYuaGFzQXV0aG9yaXR5KSB7CiAgICAgIGlmICghYmFzZS5oYXNTY2hlbWUpIHJldHVybiByZWY7CiAgICAgIGJvb2wgaXNTaW1wbGUgPSB0cnVlOwogICAgICBpZiAoYmFzZS5faXNGaWxlKSB7CiAgICAgICAgaXNTaW1wbGUgPSAhcmVmLmhhc0VtcHR5UGF0aDsKICAgICAgfSBlbHNlIGlmIChiYXNlLl9pc0h0dHApIHsKICAgICAgICBpc1NpbXBsZSA9ICFyZWYuX2lzUG9ydCgiODAiKTsKICAgICAgfSBlbHNlIGlmIChiYXNlLl9pc0h0dHBzKSB7CiAgICAgICAgaXNTaW1wbGUgPSAhcmVmLl9pc1BvcnQoIjQ0MyIpOwogICAgICB9CiAgICAgIGlmIChpc1NpbXBsZSkgewogICAgICAgIHZhciBkZWx0YSA9IGJhc2UuX3NjaGVtZUVuZCArIDE7CiAgICAgICAgdmFyIG5ld1VyaSA9IGJhc2UuX3VyaS5zdWJzdHJpbmcoMCwgYmFzZS5fc2NoZW1lRW5kICsgMSkgKwogICAgICAgICAgICByZWYuX3VyaS5zdWJzdHJpbmcocmVmLl9zY2hlbWVFbmQgKyAxKTsKICAgICAgICByZXR1cm4gX1NpbXBsZVVyaSgKICAgICAgICAgICAgbmV3VXJpLAogICAgICAgICAgICBiYXNlLl9zY2hlbWVFbmQsCiAgICAgICAgICAgIHJlZi5faG9zdFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICAgIHJlZi5fcG9ydFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICAgIHJlZi5fcGF0aFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICAgIHJlZi5fcXVlcnlTdGFydCArIGRlbHRhLAogICAgICAgICAgICByZWYuX2ZyYWdtZW50U3RhcnQgKyBkZWx0YSwKICAgICAgICAgICAgYmFzZS5fc2NoZW1lQ2FjaGUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoaXMgd2lsbCByZXF1aXJlIG5vcm1hbGl6YXRpb24sIHNvIHVzZSB0aGUgX1VyaSBpbXBsZW1lbnRhdGlvbi4KICAgICAgICByZXR1cm4gX3RvTm9uU2ltcGxlKCkucmVzb2x2ZVVyaShyZWYpOwogICAgICB9CiAgICB9CiAgICBpZiAocmVmLmhhc0VtcHR5UGF0aCkgewogICAgICBpZiAocmVmLmhhc1F1ZXJ5KSB7CiAgICAgICAgaW50IGRlbHRhID0gYmFzZS5fcXVlcnlTdGFydCAtIHJlZi5fcXVlcnlTdGFydDsKICAgICAgICB2YXIgbmV3VXJpID0gYmFzZS5fdXJpLnN1YnN0cmluZygwLCBiYXNlLl9xdWVyeVN0YXJ0KSArCiAgICAgICAgICAgIHJlZi5fdXJpLnN1YnN0cmluZyhyZWYuX3F1ZXJ5U3RhcnQpOwogICAgICAgIHJldHVybiBfU2ltcGxlVXJpKAogICAgICAgICAgICBuZXdVcmksCiAgICAgICAgICAgIGJhc2UuX3NjaGVtZUVuZCwKICAgICAgICAgICAgYmFzZS5faG9zdFN0YXJ0LAogICAgICAgICAgICBiYXNlLl9wb3J0U3RhcnQsCiAgICAgICAgICAgIGJhc2UuX3BhdGhTdGFydCwKICAgICAgICAgICAgcmVmLl9xdWVyeVN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICAgIHJlZi5fZnJhZ21lbnRTdGFydCArIGRlbHRhLAogICAgICAgICAgICBiYXNlLl9zY2hlbWVDYWNoZSk7CiAgICAgIH0KICAgICAgaWYgKHJlZi5oYXNGcmFnbWVudCkgewogICAgICAgIGludCBkZWx0YSA9IGJhc2UuX2ZyYWdtZW50U3RhcnQgLSByZWYuX2ZyYWdtZW50U3RhcnQ7CiAgICAgICAgdmFyIG5ld1VyaSA9IGJhc2UuX3VyaS5zdWJzdHJpbmcoMCwgYmFzZS5fZnJhZ21lbnRTdGFydCkgKwogICAgICAgICAgICByZWYuX3VyaS5zdWJzdHJpbmcocmVmLl9mcmFnbWVudFN0YXJ0KTsKICAgICAgICByZXR1cm4gX1NpbXBsZVVyaSgKICAgICAgICAgICAgbmV3VXJpLAogICAgICAgICAgICBiYXNlLl9zY2hlbWVFbmQsCiAgICAgICAgICAgIGJhc2UuX2hvc3RTdGFydCwKICAgICAgICAgICAgYmFzZS5fcG9ydFN0YXJ0LAogICAgICAgICAgICBiYXNlLl9wYXRoU3RhcnQsCiAgICAgICAgICAgIGJhc2UuX3F1ZXJ5U3RhcnQsCiAgICAgICAgICAgIHJlZi5fZnJhZ21lbnRTdGFydCArIGRlbHRhLAogICAgICAgICAgICBiYXNlLl9zY2hlbWVDYWNoZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGJhc2UucmVtb3ZlRnJhZ21lbnQoKTsKICAgIH0KICAgIGlmIChyZWYuaGFzQWJzb2x1dGVQYXRoKSB7CiAgICAgIHZhciBkZWx0YSA9IGJhc2UuX3BhdGhTdGFydCAtIHJlZi5fcGF0aFN0YXJ0OwogICAgICB2YXIgbmV3VXJpID0gYmFzZS5fdXJpLnN1YnN0cmluZygwLCBiYXNlLl9wYXRoU3RhcnQpICsKICAgICAgICAgIHJlZi5fdXJpLnN1YnN0cmluZyhyZWYuX3BhdGhTdGFydCk7CiAgICAgIHJldHVybiBfU2ltcGxlVXJpKAogICAgICAgICAgbmV3VXJpLAogICAgICAgICAgYmFzZS5fc2NoZW1lRW5kLAogICAgICAgICAgYmFzZS5faG9zdFN0YXJ0LAogICAgICAgICAgYmFzZS5fcG9ydFN0YXJ0LAogICAgICAgICAgYmFzZS5fcGF0aFN0YXJ0LAogICAgICAgICAgcmVmLl9xdWVyeVN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICByZWYuX2ZyYWdtZW50U3RhcnQgKyBkZWx0YSwKICAgICAgICAgIGJhc2UuX3NjaGVtZUNhY2hlKTsKICAgIH0KICAgIGlmIChiYXNlLmhhc0VtcHR5UGF0aCAmJiBiYXNlLmhhc0F1dGhvcml0eSkgewogICAgICAvLyByZWYgaGFzIHJlbGF0aXZlIG5vbi1lbXB0eSBwYXRoLgogICAgICAvLyBBZGQgYSAiLyIgaW4gZnJvbnQsIHRoZW4gbGVhZGluZyAiLy4uLyIgc2VnbWVudHMgYXJlIGZvbGRlZCB0byAiLyIuCiAgICAgIGludCByZWZTdGFydCA9IHJlZi5fcGF0aFN0YXJ0OwogICAgICB3aGlsZSAocmVmLl91cmkuc3RhcnRzV2l0aCgiLi4vIiwgcmVmU3RhcnQpKSB7CiAgICAgICAgcmVmU3RhcnQgKz0gMzsKICAgICAgfQogICAgICB2YXIgZGVsdGEgPSBiYXNlLl9wYXRoU3RhcnQgLSByZWZTdGFydCArIDE7CiAgICAgIHZhciBuZXdVcmkgPSAiJHtiYXNlLl91cmkuc3Vic3RyaW5nKDAsIGJhc2UuX3BhdGhTdGFydCl9LyIKICAgICAgICAgICIke3JlZi5fdXJpLnN1YnN0cmluZyhyZWZTdGFydCl9IjsKICAgICAgcmV0dXJuIF9TaW1wbGVVcmkoCiAgICAgICAgICBuZXdVcmksCiAgICAgICAgICBiYXNlLl9zY2hlbWVFbmQsCiAgICAgICAgICBiYXNlLl9ob3N0U3RhcnQsCiAgICAgICAgICBiYXNlLl9wb3J0U3RhcnQsCiAgICAgICAgICBiYXNlLl9wYXRoU3RhcnQsCiAgICAgICAgICByZWYuX3F1ZXJ5U3RhcnQgKyBkZWx0YSwKICAgICAgICAgIHJlZi5fZnJhZ21lbnRTdGFydCArIGRlbHRhLAogICAgICAgICAgYmFzZS5fc2NoZW1lQ2FjaGUpOwogICAgfQogICAgLy8gTWVyZ2UgcGF0aHMuCgogICAgLy8gVGhlIFJGQyAzOTg2IGFsZ29yaXRobSBtZXJnZXMgdGhlIGJhc2UgcGF0aCB3aXRob3V0IGl0cyBmaW5hbCBzZWdtZW50CiAgICAvLyAoYW55dGhpbmcgYWZ0ZXIgdGhlIGZpbmFsICIvIiwgb3IgZXZlcnl0aGluZyBpZiB0aGUgYmFzZSBwYXRoIGRvZXNuJ3QKICAgIC8vIGNvbnRhaW4gYW55ICIvIiksIGFuZCB0aGUgcmVmZXJlbmNlIHBhdGguCiAgICAvLyBUaGVuIGl0IHJlbW92ZXMgIi4iIGFuZCAiLi4iIHNlZ21lbnRzIHVzaW5nIHRoZSByZW1vdmUtZG90LXNlZ21lbnQKICAgIC8vIGFsZ29yaXRobS4KICAgIC8vIFRoaXMgY29kZSBjb21iaW5lcyB0aGUgdHdvIHN0ZXBzLiBJdCBpcyBzaW1wbGlmaWVkIGJ5IGtub3dpbmcgdGhhdAogICAgLy8gdGhlIGJhc2UgcGF0aCBjb250YWlucyBubyAiLiIgb3IgIi4uIiBzZWdtZW50cywgYW5kIHRoZSByZWZlcmVuY2UKICAgIC8vIHBhdGggY2FuIG9ubHkgY29udGFpbiBsZWFkaW5nICIuLiIgc2VnbWVudHMuCgogICAgU3RyaW5nIGJhc2VVcmkgPSBiYXNlLl91cmk7CiAgICBTdHJpbmcgcmVmVXJpID0gcmVmLl91cmk7CiAgICBpbnQgYmFzZVN0YXJ0ID0gYmFzZS5fcGF0aFN0YXJ0OwogICAgaW50IGJhc2VFbmQgPSBiYXNlLl9xdWVyeVN0YXJ0OwogICAgd2hpbGUgKGJhc2VVcmkuc3RhcnRzV2l0aCgiLi4vIiwgYmFzZVN0YXJ0KSkgYmFzZVN0YXJ0ICs9IDM7CiAgICBpbnQgcmVmU3RhcnQgPSByZWYuX3BhdGhTdGFydDsKICAgIGludCByZWZFbmQgPSByZWYuX3F1ZXJ5U3RhcnQ7CgogICAgLy8vIENvdW50IG9mIGxlYWRpbmcgIi4uIiBzZWdtZW50cyBpbiByZWZlcmVuY2UgcGF0aC4KICAgIC8vLyBUaGUgY291bnQgaXMgZGVjcmVtZW50ZWQgd2hlbiB0aGUgc2VnbWVudCBpcyBtYXRjaGVkIHdpdGggYQogICAgLy8vIHNlZ21lbnQgb2YgdGhlIGJhc2UgcGF0aCwgYW5kIGJvdGggYXJlIHRoZW4gb21pdHRlZCBmcm9tIHRoZSByZXN1bHQuCiAgICBpbnQgYmFja0NvdW50ID0gMDsKCiAgICAvLy8gQ291bnQgIi4uLyIgc2VnbWVudHMgYW5kIGFkdmFuY2UgYHJlZlN0YXJ0YCB0byBhZnRlciB0aGUgc2VnbWVudHMuCiAgICB3aGlsZSAocmVmU3RhcnQgKyAzIDw9IHJlZkVuZCAmJiByZWZVcmkuc3RhcnRzV2l0aCgiLi4vIiwgcmVmU3RhcnQpKSB7CiAgICAgIHJlZlN0YXJ0ICs9IDM7CiAgICAgIGJhY2tDb3VudCArPSAxOwogICAgfQoKICAgIC8vIEV4dHJhIHNsYXNoIGluc2VydGVkIGJldHdlZW4gYmFzZSBhbmQgcmVmZXJlbmNlIHBhdGggcGFydHMgaWYKICAgIC8vIHRoZSBiYXNlIHBhdGggY29udGFpbnMgYW55IHNsYXNoZXMsIG9yIGVtcHR5IHN0cmluZyBpZiBub25lLgogICAgLy8gKFdlIGNvdWxkIHVzZSBhIHNsYXNoIGZyb20gdGhlIGJhc2UgcGF0aCBpbiBtb3N0IGNhc2VzLCBidXQgbm90IGlmCiAgICAvLyB3ZSByZW1vdmUgdGhlIGVudGlyZSBiYXNlIHBhdGgpLgogICAgU3RyaW5nIGluc2VydCA9ICIiOwoKICAgIC8vLyBSZW1vdmUgc2VnbWVudHMgZnJvbSB0aGUgYmFzZSBwYXRoLgogICAgLy8vIFN0YXJ0IHdpdGggdGhlIHNlZ21lbnQgdHJhaWxpbmcgdGhlIGxhc3Qgc2xhc2gsCiAgICAvLy8gdGhlbiByZW1vdmUgc2VnbWVudHMgZm9yIGVhY2ggbGVhZGluZyAiLi4vIiBzZWdtZW50CiAgICAvLy8gZnJvbSB0aGUgcmVmZXJlbmNlIHBhdGgsIG9yIGFzIG1hbnkgb2YgdGhlbSBhcyBhcmUgYXZhaWxhYmxlLgogICAgd2hpbGUgKGJhc2VFbmQgPiBiYXNlU3RhcnQpIHsKICAgICAgYmFzZUVuZC0tOwogICAgICBpbnQgY2hhciA9IGJhc2VVcmkuY29kZVVuaXRBdChiYXNlRW5kKTsKICAgICAgaWYgKGNoYXIgPT0gX1NMQVNIKSB7CiAgICAgICAgaW5zZXJ0ID0gIi8iOwogICAgICAgIGlmIChiYWNrQ291bnQgPT0gMCkgYnJlYWs7CiAgICAgICAgYmFja0NvdW50LS07CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYmFzZUVuZCA9PSBiYXNlU3RhcnQgJiYgIWJhc2UuaGFzU2NoZW1lICYmICFiYXNlLmhhc0Fic29sdXRlUGF0aCkgewogICAgICAvLyBJZiB0aGUgYmFzZSBpcyAqanVzdCogYSByZWxhdGl2ZSBwYXRoIChubyBzY2hlbWUgb3IgYXV0aG9yaXR5KSwKICAgICAgLy8gdGhlbiBtZXJnaW5nIHdpdGggYW5vdGhlciByZWxhdGl2ZSBwYXRoIGRvZXNuJ3QgZm9sbG93IHRoZQogICAgICAvLyBSRkMtMzk4NiBiZWhhdmlvci4KICAgICAgLy8gRG9uJ3QgbmVlZCB0byBjaGVjayBgYmFzZS5oYXNBdXRob3JpdHlgIHNpbmNlIHRoZSBiYXNlIHBhdGggaXMKICAgICAgLy8gbm9uLWVtcHR5IC0gaWYgdGhlcmUgaXMgYW4gYXV0aG9yaXR5LCBhIG5vbi1lbXB0eSBwYXRoIGlzIGFic29sdXRlLgoKICAgICAgLy8gV2UgcmVhY2hlZCB0aGUgc3RhcnQgb2YgdGhlIGJhc2UgcGF0aCwgYW5kIHdhbnQgdG8gc3RheSByZWxhdGl2ZSwKICAgICAgLy8gc28gZG9uJ3QgaW5zZXJ0IGEgc2xhc2guCiAgICAgIGluc2VydCA9ICIiOwogICAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBzdGFydCBvZiB0aGUgYmFzZSBwYXRoIHdpdGggbW9yZSAiLi4vIiBsZWZ0IG92ZXIKICAgICAgLy8gaW4gdGhlIHJlZmVyZW5jZSBwYXRoLCBpbmNsdWRlIHRob3NlIHNlZ21lbnRzIGluIHRoZSByZXN1bHQuCiAgICAgIHJlZlN0YXJ0IC09IGJhY2tDb3VudCAqIDM7CiAgICB9CgogICAgdmFyIGRlbHRhID0gYmFzZUVuZCAtIHJlZlN0YXJ0ICsgaW5zZXJ0Lmxlbmd0aDsKICAgIHZhciBuZXdVcmkgPSAiJHtiYXNlLl91cmkuc3Vic3RyaW5nKDAsIGJhc2VFbmQpfSRpbnNlcnQiCiAgICAgICAgIiR7cmVmLl91cmkuc3Vic3RyaW5nKHJlZlN0YXJ0KX0iOwoKICAgIHJldHVybiBfU2ltcGxlVXJpKAogICAgICAgIG5ld1VyaSwKICAgICAgICBiYXNlLl9zY2hlbWVFbmQsCiAgICAgICAgYmFzZS5faG9zdFN0YXJ0LAogICAgICAgIGJhc2UuX3BvcnRTdGFydCwKICAgICAgICBiYXNlLl9wYXRoU3RhcnQsCiAgICAgICAgcmVmLl9xdWVyeVN0YXJ0ICsgZGVsdGEsCiAgICAgICAgcmVmLl9mcmFnbWVudFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgYmFzZS5fc2NoZW1lQ2FjaGUpOwogIH0KCiAgU3RyaW5nIHRvRmlsZVBhdGgoe2Jvb2wgd2luZG93c30pIHsKICAgIGlmIChfc2NoZW1lRW5kID49IDAgJiYgIV9pc0ZpbGUpIHsKICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhICRzY2hlbWUgVVJJIik7CiAgICB9CiAgICBpZiAoX3F1ZXJ5U3RhcnQgPCBfdXJpLmxlbmd0aCkgewogICAgICBpZiAoX3F1ZXJ5U3RhcnQgPCBfZnJhZ21lbnRTdGFydCkgewogICAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAgICJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBxdWVyeSBjb21wb25lbnQiKTsKICAgICAgfQogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIGZyYWdtZW50IGNvbXBvbmVudCIpOwogICAgfQogICAgd2luZG93cyA/Pz0gX1VyaS5faXNXaW5kb3dzOwogICAgcmV0dXJuIHdpbmRvd3MgPyBfVXJpLl90b1dpbmRvd3NGaWxlUGF0aCh0aGlzKSA6IF90b0ZpbGVQYXRoKCk7CiAgfQoKICBTdHJpbmcgX3RvRmlsZVBhdGgoKSB7CiAgICBpZiAoX2hvc3RTdGFydCA8IF9wb3J0U3RhcnQpIHsKICAgICAgLy8gSGFzIGF1dGhvcml0eSBhbmQgbm9uLWVtcHR5IGhvc3QuCiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGV4dHJhY3QgYSBub24tV2luZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJICIKICAgICAgICAgICJ3aXRoIGFuIGF1dGhvcml0eSIpOwogICAgfQogICAgcmV0dXJuIHRoaXMucGF0aDsKICB9CgogIFVyaURhdGEgZ2V0IGRhdGEgewogICAgYXNzZXJ0KHNjaGVtZSAhPSAiZGF0YSIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9oYXNoQ29kZUNhY2hlID8/PSBfdXJpLmhhc2hDb2RlOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFVyaSAmJiBfdXJpID09IG90aGVyLnRvU3RyaW5nKCk7CiAgfQoKICBVcmkgX3RvTm9uU2ltcGxlKCkgewogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKAogICAgICAgIHRoaXMuc2NoZW1lLAogICAgICAgIHRoaXMudXNlckluZm8sCiAgICAgICAgdGhpcy5oYXNBdXRob3JpdHkgPyB0aGlzLmhvc3QgOiBudWxsLAogICAgICAgIHRoaXMuaGFzUG9ydCA/IHRoaXMucG9ydCA6IG51bGwsCiAgICAgICAgdGhpcy5wYXRoLAogICAgICAgIHRoaXMuaGFzUXVlcnkgPyB0aGlzLnF1ZXJ5IDogbnVsbCwKICAgICAgICB0aGlzLmhhc0ZyYWdtZW50ID8gdGhpcy5mcmFnbWVudCA6IG51bGwpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX3VyaTsKfQoKLy8vIFNwZWNpYWwgW19VcmldIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyBbVXJpRGF0YV0uCmNsYXNzIF9EYXRhVXJpIGV4dGVuZHMgX1VyaSB7CiAgZmluYWwgVXJpRGF0YSBfZGF0YTsKCiAgX0RhdGFVcmkodGhpcy5fZGF0YSwgU3RyaW5nIHBhdGgsIFN0cmluZyBxdWVyeSkKICAgICAgOiBzdXBlci5faW50ZXJuYWwoImRhdGEiLCBudWxsLCBudWxsLCBudWxsLCBwYXRoLCBxdWVyeSwgbnVsbCk7CgogIFVyaURhdGEgZ2V0IGRhdGEgPT4gX2RhdGE7Cn0KCi8vLyBDaGVja3Mgd2hldGhlciBbdGV4dF0gc3RhcnRzIHdpdGggImRhdGE6IiBhdCBwb3NpdGlvbiBbc3RhcnRdLgovLy8KLy8vIFRoZSB0ZXh0IG11c3QgYmUgbG9uZyBlbm91Z2ggdG8gYWxsb3cgcmVhZGluZyBmaXZlIGNoYXJhY3RlcnMKLy8vIGZyb20gdGhlIFtzdGFydF0gcG9zaXRpb24uCi8vLwovLy8gUmV0dXJucyBhbiBpbnRlZ2VyIHZhbHVlIHdoaWNoIGlzIHplcm8gaWYgdGV4dCBzdGFydHMgd2l0aCBhbGwtbG93ZXJjYXNlCi8vLyAiZGF0YToiIGFuZCAweDIwIGlmIHRoZSB0ZXh0IHN0YXJ0cyB3aXRoICJkYXRhOiIgdGhhdCBpc24ndCBhbGwgbG93ZXItY2FzZS4KLy8vIEFsbCBvdGhlciB2YWx1ZXMgbWVhbnMgdGhlIHRleHQgc3RhcnRzIHdpdGggc29tZSBvdGhlciBjaGFyYWN0ZXIuCmludCBfc3RhcnRzV2l0aERhdGEoU3RyaW5nIHRleHQsIGludCBzdGFydCkgewogIC8vIE11bHRpcGx5IGJ5IDMgdG8gYXZvaWQgYSBub24tY29sb24gY2hhcmFjdGVyIG1ha2luZyBkZWx0YSBiZSAweDIwLgogIGludCBkZWx0YSA9ICh0ZXh0LmNvZGVVbml0QXQoc3RhcnQgKyA0KSBeIF9DT0xPTikgKiAzOwogIGRlbHRhIHw9IHRleHQuY29kZVVuaXRBdChzdGFydCkgXiAweDY0IC8qZCovOwogIGRlbHRhIHw9IHRleHQuY29kZVVuaXRBdChzdGFydCArIDEpIF4gMHg2MSAvKmEqLzsKICBkZWx0YSB8PSB0ZXh0LmNvZGVVbml0QXQoc3RhcnQgKyAyKSBeIDB4NzQgLyp0Ki87CiAgZGVsdGEgfD0gdGV4dC5jb2RlVW5pdEF0KHN0YXJ0ICsgMykgXiAweDYxIC8qYSovOwogIHJldHVybiBkZWx0YTsKfQoKLy8vIEhlbHBlciBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGxlbmd0aCBvZiBhIHN0cmluZywgb3IgYDBgIGZvciBgbnVsbGAuCmludCBfc3RyaW5nT3JOdWxsTGVuZ3RoKFN0cmluZyBzKSA9PiAocyA9PSBudWxsKSA/IDAgOiBzLmxlbmd0aDsKkrIATk48ARMBJBkbHRgXGRkaICAgHSEgICABLgEEIAMRAzE0A0xTBBUGPAVLJAVEJAYgAQYsBUNONAVBTSoFQkgwBT1GREc2BT0NRUpKSxMFOjsFOBU5RiNARhAFO0dCRxgFTUw8I0BENk5HBUhJRiktBUIgBTdKM0cGDxYXExATJRRJIAEGPgUPBQkoPQUoMwUhKQUiKwkFKwVDPkM3BTpHFwVGDwY7OgEGPwVGHgY8OwEGRAUoBUIQBUQoBUU9OT0FSTdQSU02BUVGQEcVBUg8QwUrBQkQLgURLwUYLwUZMAUNKQkFJwUJEC4FES8FFS8FFjAFGzEFSx4pBUowBSE6CQVGBj0BBkcFSjdLBkcBBjwFT1A5BVFOKQVLOE0ZUEogBUtKTElLRwU+Bi0YGSYeLxwcIBkVBAEGPgVESUsFOwVFQz1MSQ4GLS4mISwcICkVBAEGJgU/BSdABhUBBiYFRwwFQgYYAQY8BT4aBhcBBjcFRRQFTA4FKjsmBhMBBjcFSk4GEAEGIQVHHgU9BhMBBkg/BT4GFAEGMAVBEAYXAQZPT00FUCEGIQEGQ0VqPjUFQxNJLDcsBScGKwEGQ0VqTSYFSkc8BUIGNAEGKgVKFgYXAQY3BisBBjsGGQEGMwUzShI+BhQBBi8GFQEGMgYYAQYwBhkBBkcGHAEGSh0FUBoFSwYVATQGS0cGDw4yNAoGRS0gAQYsBTkQBUMUBUUdBUJGRj8PBUVGP0cVBUg8QwVDPwVFR0YzBUAdBSstNDYqLAVCBSstNDY5Q0tIBTYZBUcZBks9JQEGLAVKC0gXBhQBPQY5FAFNIgE/FQEGSgVJJQVATgVGJAVGGkAFDgU0TTcFSDsFHRomHh4cIB03LwVMST0GDxYXExATJRRJGQEGSwVEBhgBBjcFSycFHwUjBiEBBjcFHwVQVwVNURNNLAYhAQY3BUkPQhxLBU0FOgVNIgYXAQY5BUxQBSNBJAY7Q0sgBzJLBzMlJSIHKgc6B0QHMyUlIgdCBzpIO0cwNh5CB0VGST85Byg7NjMgBx4fSUUHSQcuBy4YATkcMxweTDEmSwhRBgFLThUgAS1JSAwQJiYmIiIhJTxHRCgmBi4eQkMjGS4IBlBCT1JQGwEyLi4wNgE8EwFIQEtFKyFLGh4pLiEGRD9MIDYBOiQkJCUpATYBFEc6Oic7UDkaRDc6GiUuNik4UFBOMhoPPCdJHyY8Lx0mNT4tHTUpGxBAIh0dHSsuGSAyRDVEISQaFzw5JCQkJCksGyIQDjYdQSUuNzVCICEkGhc4MyQkJCgpLBsiEA4MTxxBIyw2M0AeHyIYFTYxIiIiJicqGSAODAoIBgEUKykcHBwcHSAISS4GAUw3BAEGOQVMUCMFUAY+OAolGxMGBAEGRS4FR0E+QwVHRg0FMB0FRkYOBjRPBAEGRD8QBUQ/EAE/QC4BRUVHPiEBREYeBUU3BUFEDAVPDgY3JE4EAQY5BURBQ0YbBUNDGAY7HEQEAQZEFwVITQwGPiQcRwQBBj8pBUdFRx4GKUUEAQYsBUdCQToGKT0EAQZBRWpNMwVDEwVRDwY8JDYoGR1HCh8vMj09CBIIBAEGTz4FRhUGNC8BSUgrSwYBHxcbKCUaHywpCg8eQwo8GkUKJBsIBgEaQQYBOhZBBh4BEwQBBk8/BUYVBUooBSYOMiAfJAZNGVAwB1E5TwFFKUsGARonHVEIRClJCBQGATgaH0YaGzUoJRwaQA8uLgwZCh4qHjsMHxkRSC0KGyEYCAYzJS4kNAYSFi0PQisrCAYYHkkIJEsGJTgcGS8zHCAWCg8jKRQIBhIEAgEcOSUXAQYqBUgjMAYaAQYfBThJPgYWAQYsBUYyBg0BBhoFFgYVATYXATwaAQY4Bh4BBkIGEAEGJwUdBhYBBjsGKDIBTgYyBkw3BlAeBi9RJAErBlBJNBoSEQ8VFRUVFhkXGhMfNSczCAYaEQ4dKSdFCDonKVFFDCgIBhJLEiZEBhUfPQZQBAEjEBYXExATJRRJGkJKQUIjT0okJksRBigWUUM8OA0nBjERBlAEASQ8L0wEASU9L00EARkiHRkaBAEkARQiITMGEgQBETQSBAEyKyUnDgQBJAEqASElMzovBAFIBkxQEwZLSyIGQFA6Li0nKBgdKStEFgwKFggGEQQBHT0wBAFRLRcRDgE1GSIgMyExHjAdEQoIHyo+FiI4NDknO04OLxMMCishQQo3QDArN1EKCB4cNjc9RkMRCgg2BhAYHBQUMCsEASQzPRMrJQQBKTg9UQQBNCcBMTMhIx1CEUUKCAgEAS4xIDc3HTwRSQoIBgQBRkREDgYZG0QNHkQGBAE7HCROMwYgHzoNFyoGBAFCJCkuDyIfLDAfQwoIDSkGHTs6QlEIIio9OQhCPgYBICUrLxpQUDBBPzsKUA8hLD87CkFACA0XKj8dJSo5CC4GBAEPFhcTEBMlFEkaPEgoIBo2Lw0cBiYcPg0hBhgmDRkbMCgIBhg1JBlAEQYBJjBRGQ0YOSMbCAYBNFENGwYBHD4NIQYBUAQBGShQBAEiICcBHEkuBiEbJT4cEwQBLBlKHQQBNSg9MiNBCB1HBiEEARhDMSUEATIuQxEEAQYmBUxMNwVGOkMGTkwjIUozOEQIGjodGkhGCDQ4SAYXQiosHjYdHkxGDDRECggGMAQBHy09KjsSBAEoTwQBBkIFKUUtKwZCHhkYJQYeF00eARopHkIzFhQKIzwdHiM6KUUKIx8eHShOTSUmPyIMIAoRDx4+MStGHgwKIzwdKR8eCAY7HjgbBh4EASlQBAEGQgU/QD0GRRkeF00eARopHkNCMxYUCiM8OB0eIzopHxwKIx8eHSlOTSUmPyIMIAoRLjEPHj4xK0YeDAojPDgdKR8eCAY7Hjg2GwYeBAEGPgVHBkEhODJNBiQoMSs2CEQiCAYrOigEATMFPTUpKSsvEwQBRSVIBAE7SSY2SDBDBhMYTiMNHEIWBhoeQB0GOxMEAUMGRUhJUEROBiUEAT1LGSVJCEcjBi4BIRgBNB8XMy8bNwgGASsuJA8hJyYKCAgeBAFFJ0ghBAEGNwVOR0QFTkRJBU8GTTImMgYzNDU3NzIGOSRLFwgpBkclPwZMLREEAShCGRczGx83OA1ESxwaFRodHBcKCCoVJEElQUIUQAgGLAQBBkUFTk4GJ0EpODMpBAEGRiAFQjxFEQVEBhxBKRkeF0saLk4RDxwaIENBJRgWDEMkIR4THgxFOBEcKygjOi8jIkoQDgwrCiNAIx8eCAYaEwYePAYeBAErTAQBLCNEBAEGKgY5ATZNFxY4NBUTBgE+KUArNxgPCCREJygxQQ8IGBMGHksEAUUGP0saNCskGAQBMQY8Qk4yNEseHi4bHSEfIBwMChwjHA8dCAYlHQQBQgZCOAZHTEBKShVISik0EwZLHh4uGx02Hx4RHAojHA8dCAZHEwY8PB0EAUAtSi4nHkcKGkcRCggGEQQBIi0EASIWGSAXFBcYJyckLSVACDcgJwgNIiQtJRVQOT8PKSEhJCIkKxMnDBErPRM6JSgnRy8ZRCdDEhdJRxAVR1E9FypCPVA1RhAODEEKCAZJUCwEASsBKgElAScBLQEpATQBFhhFBjEYRgYoGEYGMiYEASYsTwYXHksGGh5OBhw/BAEZJh5EIAY4KkEhLCgeBAEuISUfIy9CPx0NPwYhRBwbHRwcHAgGJUQeBAEdMQQBKCAbFQYoGRUXBgQBBiwFSgtIFwZJARYoBAEdGyY6LkMqFhsGFDc9GgQBIy0bIi4mHh4eJiAsJAQBFTMEATMBRiQrDxMaAToSFCAdPRQPRUkINwYBHyYdLicqFxoICwYmEwQBSywBBkYsBjUSIiwyLA89GjQuETcKCAYRBAEGKgVGBUYFTgVQSQYcThgaIB5QGCgpHCIwGA8IBhUSSSsPNggNFiorHkIKJCUyDDYSNx0RHwoIBiMEATUlRwQBLBlFBAFGRhgBLCkuLS0tLC0nLS0tLS0tLSwtBQEsLS4tLS0sLSctLS0tLS0tLC0FAT0pLi0tLS0tLS0tLS0tLS0sLQUBJyUuLS0tLC0nLS0tKC0tLSgtBQFBKi4tLS0sLSctBy0HLS0tKC0FAUM1Kxs5LC4tLS0sLSstLS0tLS0tLC0FATk7BSwuLS0tLS0tLR4tKy0HLQctBQE4GUAnLi0tLSwtKy0tLS0tLS0sLQUBOBk7Ji4tLS0sLSstLS0tLS0tLC0FATQbPycuLS0tLC0rLS0tLS0tLSwtBQE0JykuLS0tLS0rLS0tAS0tLS0sLQUBNRskIy4tLS0tLS0tLS0tLS0tLC0FATYtJS4tLS0sLSstLS0tLS0tLC0FAgFIDEgBBDMDSUgDUUAEECMGQxYFSUsLBhYBBjwFQk4cBUsjBUUFRwU3CTElCQYlAQYsBhEBQQEiLQEGPAU/NwYtGBkmHiolGBlBHCE0CCZBJAYYRCASICY8DRlFBjgEAQY+BT43Bi0uJiEqJTwgGhkyDSAmFk8zBgE4BAEGTgVFTzkGJSBGBhxRBhshQQYZJwY2IwQBBkZHDQVKCwY9SzgVBk9ADTQcTggkTRkkTgYfHT0IIVAGJxlMCBsjTQg3GUZINxlKCAQBBjcFQxcFRCwGMhkwKSQcGBIIEQYXBAEGJgUmBQlSCgVRQwVPSzIFTDxLOQVMTEU3BUUGJRsvHCMlCB9MPTIIBkIEAQY4BUoOBhAtGRIrORwbKj0YBidBLRYEAQYkBT1DF0swUAUOBTYFT01KBU4GGCokKzwEAQYuBUhDMVAFSzAGFxxNFEsZBj0vLU0gRwgGFwQBBjAGNwEGRQUuBkkBBjAFQQVJTDwGHxksFDIGAUccHiYwKSEQFQgGGiohORUGEzApISQPIzAbJBQWDApCCAYkEwQBBkAFTCtIS0cmBU5JHwYwHEguHj0IBhksFD03BkcEAQY6BUVHGUZKTU0FQCAGJyU8MC0mR0sbBhMEAUEmNgEZHBwgHSUZDhMjITUbHhoUCj0IBidJHDsGHCsWCxwlIx4wOREKCB4iDyYqHT09OwoPCAYUKhQ5DUw2PUcjGjwIBjAEAQZHBT8GH0ZHKxQtGxYYRyQPKEBCCAYhLx0mPQoIBgQBF0MBOwVMOE8FQyMvLi4uLS4oLi4uLi4uLi0uBQEuBTVPJUkFUTIBTiAvLi4uLi4oLi4uKS4uLikuBQIBSC5GLCoBNh8BRh8BOh8BPB8BNSABOCMBSR8BHhoBOx8kASgdAUUENgROTVEiBEFITy0ETUlMUEw/Qk08OAFKKQFBBDMETyxITUxLS0tMLARKLwQ9ShI/SUtLSjtJOk46O0NKSTM6Sz1RP0IgBBJNT0wESUpJSkohR1AnBEVMUExPDSIpAS0dAS0fHSIfHh8eGx0aFxgbIiMgIR0eAU0kGQFQFS4uLi4wNi4BLxVMAS4kThgpAUsBSycvOgFNLE0MQi0mKAYEAUpRBk5MIkJOJQYEASwJAT4yJCU9JSguATgkJiwpKC4BOSQuLCAoLgE1JCwdKC4BKygxLCguATAcLiAoLgE0Iy4uLiopKC4BMyMuLi4pKC4BNCIuKSguATMiLikoLgEhIQErHCMpKC4BLhwkKSguAS8cIEZMASgcICkoLgErHCEpKC4BLBwpKC4BJRwdKC4BJx0bLgEtIB4BQUwqHQEpHR0eARECAUgpATwERSMEHUofHSYfPClCIiIfIgQQAgEiFRgYGBgZHAE0QiYXFgEOERcXFxcYGxoBKCs3RTU4AUJCREgBQiM+AUA2ATQBIUEzLgQBFiQzEx0bHhodHSANNAYZBAEaSDc3DBVEEU8cHg4EAT41OAwZUAEWNBsaRQYgGEkGJBhGBigsBikvMAQBIhwbLi8dKCUcLRcIBistBAEsNE0EATU6QDAhPwZIBAEeKTkvBAEfARkjUUwEAQ8WFxMQEyUUSRogGjsqDRwGJhxDIT0NFQYYKw0uGzAtCAYYOiE1QBEGASYwTiENNjkjGwgGATQfQi8/BgEcQy81BgFQBAEiLQQBIiMsBjEEAUVJPEkpNiMcJxwaJiEnIigIFilDNBsUHSQkJCUoIA9MLwgGHBo4QDEbFB0dHR0lKCAIHT5DNBsUHR0dHR4oIAgkBh80PS4ZEhsbGxsjJh4GMipNJTUXCDJBLRkSGxsbGyMmHgYUAU1NMUoSSkk0ASAeJSRBIyIBOkRNFwFLSxUWBgFFREooGAEsODxGIhEuHBYjFQgGAUxJRBxITQFLIhNMRiEGATQ9KwEXEBkZGRkhJBwEASYnTwYlKiBNCB5OBiFEBAEZIyseRCAGFgQBFR4RBAE4ASMtNQQBFxsVFy4pEysyBAEdAgE3HhcBMkYBHQIBQwRCHwRNUEYuSDkwNDQ0EAIBSUEBEmRhcnQ6Y29yZS91cmkuZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3VyaV9wYXRjaC5kYXJ0iakvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCnR5cGVkZWYgVXJpIF9VcmlCYXNlQ2xvc3VyZSgpOwoKVXJpIF91bnN1cHBvcnRlZFVyaUJhc2UoKSB7CiAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIidVcmkuYmFzZScgaXMgbm90IHN1cHBvcnRlZCIpOwp9CgovLyBfdXJpQmFzZUNsb3N1cmUgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBlbWJlZGRlciB0byBzdXBwbHkgYSBkaWZmZXJlbnQKLy8gdmFsdWUgZm9yIFVyaS5iYXNlLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCl9VcmlCYXNlQ2xvc3VyZSBfdXJpQmFzZUNsb3N1cmUgPSBfdW5zdXBwb3J0ZWRVcmlCYXNlOwoKQHBhdGNoCmNsYXNzIFVyaSB7CiAgQHBhdGNoCiAgc3RhdGljIFVyaSBnZXQgYmFzZSA9PiBfdXJpQmFzZUNsb3N1cmUoKTsKfQoKLy8vIFZNIGltcGxlbWVudGF0aW9uIG9mIFVyaS4KQHBhdGNoCmNsYXNzIF9VcmkgewogIHN0YXRpYyBmaW5hbCBib29sIF9pc1dpbmRvd3NDYWNoZWQgPSBfaXNXaW5kb3dzUGxhdGZvcm07CgogIHN0YXRpYyBib29sIGdldCBfaXNXaW5kb3dzUGxhdGZvcm0gbmF0aXZlICJVcmlfaXNXaW5kb3dzUGxhdGZvcm0iOwoKICBAcGF0Y2gKICBzdGF0aWMgYm9vbCBnZXQgX2lzV2luZG93cyA9PiBfaXNXaW5kb3dzQ2FjaGVkOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF91cmlFbmNvZGUoTGlzdDxpbnQ+IGNhbm9uaWNhbFRhYmxlLCBTdHJpbmcgdGV4dCwKICAgICAgRW5jb2RpbmcgZW5jb2RpbmcsIGJvb2wgc3BhY2VUb1BsdXMpIHsKICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZSB0ZXh0IHdpbGwgYmUgY2hhbmdlZCBieSBlbmNvZGluZy4KICAgIGludCBpID0gMDsKICAgIGlmIChpZGVudGljYWwoZW5jb2RpbmcsIHV0ZjgpIHx8CiAgICAgICAgaWRlbnRpY2FsKGVuY29kaW5nLCBsYXRpbjEpIHx8CiAgICAgICAgaWRlbnRpY2FsKGVuY29kaW5nLCBhc2NpaSkpIHsKICAgICAgLy8gRW5jb2RpbmcgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcuCiAgICAgIC8vIEZpbmQgZmlyc3QgY2hhcmFjdGVyIHRoYXQgbmVlZHMgZW5jb2RpbmcuCiAgICAgIGZvciAoOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjaGFyID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjaGFyID49IDEyOCB8fAogICAgICAgICAgICBjYW5vbmljYWxUYWJsZVtjaGFyID4+IDRdICYgKDEgPDwgKGNoYXIgJiAweDBmKSkgPT0gMCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaSA9PSB0ZXh0Lmxlbmd0aCkgcmV0dXJuIHRleHQ7CgogICAgLy8gRW5jb2RlIHRoZSBzdHJpbmcgaW50byBieXRlcyB0aGVuIGdlbmVyYXRlIGFuIEFTQ0lJIG9ubHkgc3RyaW5nCiAgICAvLyBieSBwZXJjZW50IGVuY29kaW5nIHNlbGVjdGVkIGJ5dGVzLgogICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgaisrKSB7CiAgICAgIHJlc3VsdC53cml0ZUNoYXJDb2RlKHRleHQuY29kZVVuaXRBdChqKSk7CiAgICB9CgogICAgLy8gVE9ETyhscm4pOiBJcyB0aGVyZSBhIHdheSB0byBvbmx5IGVuY29kZSBmcm9tIGluZGV4IGkgYW5kIGZvcndhcmRzLgogICAgdmFyIGJ5dGVzID0gZW5jb2RpbmcuZW5jb2RlKHRleHQpOwogICAgZm9yICg7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICBpbnQgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBpZiAoYnl0ZSA8IDEyOCAmJgogICAgICAgICAgKChjYW5vbmljYWxUYWJsZVtieXRlID4+IDRdICYgKDEgPDwgKGJ5dGUgJiAweDBmKSkpICE9IDApKSB7CiAgICAgICAgcmVzdWx0LndyaXRlQ2hhckNvZGUoYnl0ZSk7CiAgICAgIH0gZWxzZSBpZiAoc3BhY2VUb1BsdXMgJiYgYnl0ZSA9PSBfU1BBQ0UpIHsKICAgICAgICByZXN1bHQud3JpdGVDaGFyQ29kZShfUExVUyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgU3RyaW5nIGhleERpZ2l0cyA9ICcwMTIzNDU2Nzg5QUJDREVGJzsKICAgICAgICByZXN1bHQKICAgICAgICAgIC4ud3JpdGVDaGFyQ29kZShfUEVSQ0VOVCkKICAgICAgICAgIC4ud3JpdGVDaGFyQ29kZShoZXhEaWdpdHMuY29kZVVuaXRBdChieXRlID4+IDQpKQogICAgICAgICAgLi53cml0ZUNoYXJDb2RlKGhleERpZ2l0cy5jb2RlVW5pdEF0KGJ5dGUgJiAweDBmKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9Cn0KUgBOTjwBHgEfARw9AgFMFxo3AQcMCSwCAR4HDTsBRQEJMgEJQi08DyUnJjozJScbRREKCAYnAUcrLiIwBgFLJyQbGEckMiUPNQ8kOz4IBh4EAgEeZGFydDpjb3JlLXBhdGNoL3VyaV9wYXRjaC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvaWRlbnRpY2FsX3BhdGNoLmRhcnSB0i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKYm9vbCBpZGVudGljYWwoT2JqZWN0IGEsIE9iamVjdCBiKSBuYXRpdmUgIklkZW50aWNhbF9jb21wYXJpc29uIjsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKaW50IGlkZW50aXR5SGFzaENvZGUoT2JqZWN0IG9iamVjdCkgPT4gb2JqZWN0Ll9pZGVudGl0eUhhc2hDb2RlOwoPAE5OPAEeAQcmQgEHIkEBJGRhcnQ6Y29yZS1wYXRjaC9pZGVudGljYWxfcGF0Y2guZGFydCtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9wcmludC5kYXJ0gcQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovLy8gUHJpbnRzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgdG8gdGhlIGNvbnNvbGUuCnZvaWQgcHJpbnQoT2JqZWN0IG9iamVjdCkgewogIFN0cmluZyBsaW5lID0gIiRvYmplY3QiOwogIGlmIChwcmludFRvWm9uZSA9PSBudWxsKSB7CiAgICBwcmludFRvQ29uc29sZShsaW5lKTsKICB9IGVsc2UgewogICAgcHJpbnRUb1pvbmUobGluZSk7CiAgfQp9ChEATk48ARMBQRwbHRoLFwQCARRkYXJ0OmNvcmUvcHJpbnQuZGFydCtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvX2h0dHAvaHR0cC5kYXJ0wAEhFi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQuX2h0dHA7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicKICAgIHNob3cKICAgICAgICBIYXNoTWFwLAogICAgICAgIEhhc2hTZXQsCiAgICAgICAgUXVldWUsCiAgICAgICAgTGlzdFF1ZXVlLAogICAgICAgIExpbmtlZExpc3QsCiAgICAgICAgTGlua2VkTGlzdEVudHJ5LAogICAgICAgIFVubW9kaWZpYWJsZU1hcFZpZXc7CmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OmRldmVsb3BlcicgaGlkZSBsb2c7CmltcG9ydCAnZGFydDpfaW50ZXJuYWwnIHNob3cgU2luY2UsIEh0dHBTdGF0dXM7CmltcG9ydCAnZGFydDptYXRoJzsKaW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKcGFydCAnY3J5cHRvLmRhcnQnOwpwYXJ0ICdodHRwX2RhdGUuZGFydCc7CnBhcnQgJ2h0dHBfaGVhZGVycy5kYXJ0JzsKcGFydCAnaHR0cF9pbXBsLmRhcnQnOwpwYXJ0ICdodHRwX3BhcnNlci5kYXJ0JzsKcGFydCAnaHR0cF9zZXNzaW9uLmRhcnQnOwpwYXJ0ICdvdmVycmlkZXMuZGFydCc7CnBhcnQgJ3dlYnNvY2tldC5kYXJ0JzsKcGFydCAnd2Vic29ja2V0X2ltcGwuZGFydCc7CgovKioKICogQSBzZXJ2ZXIgdGhhdCBkZWxpdmVycyBjb250ZW50LCBzdWNoIGFzIHdlYiBwYWdlcywgdXNpbmcgdGhlIEhUVFAgcHJvdG9jb2wuCiAqCiAqIFRoZSBIdHRwU2VydmVyIGlzIGEgW1N0cmVhbV0gdGhhdCBwcm92aWRlcyBbSHR0cFJlcXVlc3RdIG9iamVjdHMuIEVhY2gKICogSHR0cFJlcXVlc3QgaGFzIGFuIGFzc29jaWF0ZWQgW0h0dHBSZXNwb25zZV0gb2JqZWN0LgogKiBUaGUgc2VydmVyIHJlc3BvbmRzIHRvIGEgcmVxdWVzdCBieSB3cml0aW5nIHRvIHRoYXQgSHR0cFJlc3BvbnNlIG9iamVjdC4KICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBiaW5kIGFuIEh0dHBTZXJ2ZXIgdG8gYW4gSVB2NgogKiBbSW50ZXJuZXRBZGRyZXNzXSBvbiBwb3J0IDgwICh0aGUgc3RhbmRhcmQgcG9ydCBmb3IgSFRUUCBzZXJ2ZXJzKQogKiBhbmQgaG93IHRvIGxpc3RlbiBmb3IgcmVxdWVzdHMuCiAqIFBvcnQgODAgaXMgdGhlIGRlZmF1bHQgSFRUUCBwb3J0LiBIb3dldmVyLCBvbiBtb3N0IHN5c3RlbXMgYWNjZXNzaW5nCiAqIHRoaXMgcmVxdWlyZXMgc3VwZXItdXNlciBwcml2aWxlZ2VzLiBGb3IgbG9jYWwgdGVzdGluZyBjb25zaWRlcgogKiB1c2luZyBhIG5vbi1yZXNlcnZlZCBwb3J0ICgxMDI0IGFuZCBhYm92ZSkuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgSHR0cFNlcnZlcgogKiAgICAgICAgICAgLmJpbmQoSW50ZXJuZXRBZGRyZXNzLmFueUlQdjYsIDgwKQogKiAgICAgICAgICAgLnRoZW4oKHNlcnZlcikgewogKiAgICAgICAgICAgICBzZXJ2ZXIubGlzdGVuKChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZSgnSGVsbG8sIHdvcmxkIScpOwogKiAgICAgICAgICAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICogICAgICAgICAgICAgfSk7CiAqICAgICAgICAgICB9KTsKICogICAgIH0KICoKICogSW5jb21wbGV0ZSByZXF1ZXN0cywgaW4gd2hpY2ggYWxsIG9yIHBhcnQgb2YgdGhlIGhlYWRlciBpcyBtaXNzaW5nLCBhcmUKICogaWdub3JlZCwgYW5kIG5vIGV4Y2VwdGlvbnMgb3IgSHR0cFJlcXVlc3Qgb2JqZWN0cyBhcmUgZ2VuZXJhdGVkIGZvciB0aGVtLgogKiBMaWtld2lzZSwgd2hlbiB3cml0aW5nIHRvIGFuIEh0dHBSZXNwb25zZSwgYW55IFtTb2NrZXRdIGV4Y2VwdGlvbnMgYXJlCiAqIGlnbm9yZWQgYW5kIGFueSBmdXR1cmUgd3JpdGVzIGFyZSBpZ25vcmVkLgogKgogKiBUaGUgSHR0cFJlcXVlc3QgZXhwb3NlcyB0aGUgcmVxdWVzdCBoZWFkZXJzIGFuZCBwcm92aWRlcyB0aGUgcmVxdWVzdCBib2R5LAogKiBpZiBpdCBleGlzdHMsIGFzIGEgU3RyZWFtIG9mIGRhdGEuIElmIHRoZSBib2R5IGlzIHVucmVhZCwgaXQgaXMgZHJhaW5lZAogKiB3aGVuIHRoZSBzZXJ2ZXIgd3JpdGVzIHRvIHRoZSBIdHRwUmVzcG9uc2Ugb3IgY2xvc2VzIGl0LgogKgogKiAjIyBCaW5kIHdpdGggYSBzZWN1cmUgSFRUUFMgY29ubmVjdGlvbgogKgogKiBVc2UgW2JpbmRTZWN1cmVdIHRvIGNyZWF0ZSBhbiBIVFRQUyBzZXJ2ZXIuCiAqCiAqIFRoZSBzZXJ2ZXIgcHJlc2VudHMgYSBjZXJ0aWZpY2F0ZSB0byB0aGUgY2xpZW50LiBUaGUgY2VydGlmaWNhdGUKICogY2hhaW4gYW5kIHRoZSBwcml2YXRlIGtleSBhcmUgc2V0IGluIHRoZSBbU2VjdXJpdHlDb250ZXh0XQogKiBvYmplY3QgdGhhdCBpcyBwYXNzZWQgdG8gW2JpbmRTZWN1cmVdLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICogICAgIGltcG9ydCAiZGFydDppc29sYXRlIjsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0ID0gbmV3IFNlY3VyaXR5Q29udGV4dCgpOwogKiAgICAgICB2YXIgY2hhaW4gPQogKiAgICAgICAgICAgUGxhdGZvcm0uc2NyaXB0LnJlc29sdmUoJ2NlcnRpZmljYXRlcy9zZXJ2ZXJfY2hhaW4ucGVtJykKICogICAgICAgICAgIC50b0ZpbGVQYXRoKCk7CiAqICAgICAgIHZhciBrZXkgPQogKiAgICAgICAgICAgUGxhdGZvcm0uc2NyaXB0LnJlc29sdmUoJ2NlcnRpZmljYXRlcy9zZXJ2ZXJfa2V5LnBlbScpCiAqICAgICAgICAgICAudG9GaWxlUGF0aCgpOwogKiAgICAgICBjb250ZXh0LnVzZUNlcnRpZmljYXRlQ2hhaW4oY2hhaW4pOwogKiAgICAgICBjb250ZXh0LnVzZVByaXZhdGVLZXkoa2V5LCBwYXNzd29yZDogJ2RhcnRkYXJ0Jyk7CiAqCiAqICAgICAgIEh0dHBTZXJ2ZXIKICogICAgICAgICAgIC5iaW5kU2VjdXJlKEludGVybmV0QWRkcmVzcy5hbnlJUHY2LAogKiAgICAgICAgICAgICAgICAgICAgICAgNDQzLAogKiAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCkKICogICAgICAgICAgIC50aGVuKChzZXJ2ZXIpIHsKICogICAgICAgICAgICAgc2VydmVyLmxpc3RlbigoSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogKiAgICAgICAgICAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoJ0hlbGxvLCB3b3JsZCEnKTsKICogICAgICAgICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAqICAgICAgICAgICAgIH0pOwogKiAgICAgICAgICAgfSk7CiAqICAgICB9CiAqCiAqICBUaGUgY2VydGlmaWNhdGVzIGFuZCBrZXlzIGFyZSBQRU0gZmlsZXMsIHdoaWNoIGNhbiBiZSBjcmVhdGVkIGFuZAogKiAgbWFuYWdlZCB3aXRoIHRoZSB0b29scyBpbiBPcGVuU1NMLgogKgogKiAjIyBDb25uZWN0IHRvIGEgc2VydmVyIHNvY2tldAogKgogKiBZb3UgY2FuIHVzZSB0aGUgW2xpc3Rlbk9uXSBjb25zdHJ1Y3RvciB0byBhdHRhY2ggYW4gSFRUUCBzZXJ2ZXIgdG8KICogYSBbU2VydmVyU29ja2V0XS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBTZXJ2ZXJTb2NrZXQuYmluZChJbnRlcm5ldEFkZHJlc3MuYW55SVB2NiwgODApCiAqICAgICAgICAgLnRoZW4oKHNlcnZlclNvY2tldCkgewogKiAgICAgICAgICAgSHR0cFNlcnZlciBodHRwc2VydmVyID0gbmV3IEh0dHBTZXJ2ZXIubGlzdGVuT24oc2VydmVyU29ja2V0KTsKICogICAgICAgICAgIHNlcnZlclNvY2tldC5saXN0ZW4oKFNvY2tldCBzb2NrZXQpIHsKICogICAgICAgICAgICAgc29ja2V0LndyaXRlKCdIZWxsbywgY2xpZW50LicpOwogKiAgICAgICAgICAgfSk7CiAqICAgICAgICAgfSk7CiAqICAgICB9CiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiAqIEh0dHBTZXJ2ZXIgaXMgYSBTdHJlYW0uIFJlZmVyIHRvIHRoZSBbU3RyZWFtXSBjbGFzcyBmb3IgaW5mb3JtYXRpb24KICogYWJvdXQgdGhlIHN0cmVhbWluZyBxdWFsaXRpZXMgb2YgYW4gSHR0cFNlcnZlci4KICogUGF1c2luZyB0aGUgc3Vic2NyaXB0aW9uIG9mIHRoZSBzdHJlYW0sIHBhdXNlcyBhdCB0aGUgT1MgbGV2ZWwuCiAqCiAqICogVGhlIFtzaGVsZl0oaHR0cHM6Ly9wdWIuZGFydGxhbmcub3JnL3BhY2thZ2VzL3NoZWxmKQogKiBwYWNrYWdlIG9uIHB1Yi5kYXJ0bGFuZy5vcmcgY29udGFpbnMgYSBzZXQgb2YgaGlnaC1sZXZlbCBjbGFzc2VzIHRoYXQsCiAqIHRvZ2V0aGVyIHdpdGggdGhpcyBjbGFzcywgbWFrZXMgaXQgZWFzeSB0byBwcm92aWRlIGNvbnRlbnQgdGhyb3VnaCBIVFRQCiAqIHNlcnZlcnMuCiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwU2VydmVyIGltcGxlbWVudHMgU3RyZWFtPEh0dHBSZXF1ZXN0PiB7CiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYFNlcnZlcmAgaGVhZGVyIGZvciBhbGwgcmVzcG9uc2VzCiAgICogZ2VuZXJhdGVkIGJ5IHRoaXMgW0h0dHBTZXJ2ZXJdLgogICAqCiAgICogSWYgW3NlcnZlckhlYWRlcl0gaXMgYG51bGxgLCBubyBgU2VydmVyYCBoZWFkZXIgd2lsbCBiZSBhZGRlZCB0byBlYWNoCiAgICogcmVzcG9uc2UuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuCiAgICovCiAgU3RyaW5nIHNlcnZlckhlYWRlcjsKCiAgLyoqCiAgICogRGVmYXVsdCBzZXQgb2YgaGVhZGVycyBhZGRlZCB0byBhbGwgcmVzcG9uc2Ugb2JqZWN0cy4KICAgKgogICAqIEJ5IGRlZmF1bHQgdGhlIGZvbGxvd2luZyBoZWFkZXJzIGFyZSBpbiB0aGlzIHNldDoKICAgKgogICAqICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKICAgKiAgICAgWC1GcmFtZS1PcHRpb25zOiBTQU1FT1JJR0lOCiAgICogICAgIFgtQ29udGVudC1UeXBlLU9wdGlvbnM6IG5vc25pZmYKICAgKiAgICAgWC1YU1MtUHJvdGVjdGlvbjogMTsgbW9kZT1ibG9jawogICAqCiAgICogSWYgdGhlIGBTZXJ2ZXJgIGhlYWRlciBpcyBhZGRlZCBoZXJlIGFuZCB0aGUgYHNlcnZlckhlYWRlcmAgaXMgc2V0IGFzCiAgICogd2VsbCB0aGVuIHRoZSB2YWx1ZSBvZiBgc2VydmVySGVhZGVyYCB0YWtlcyBwcmVjZWRlbmNlLgogICAqLwogIEh0dHBIZWFkZXJzIGdldCBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBbSHR0cFNlcnZlcl0gc2hvdWxkIGNvbXByZXNzIHRoZSBjb250ZW50LCBpZiBwb3NzaWJsZS4KICAgKgogICAqIFRoZSBjb250ZW50IGNhbiBvbmx5IGJlIGNvbXByZXNzZWQgd2hlbiB0aGUgcmVzcG9uc2UgaXMgdXNpbmcKICAgKiBjaHVua2VkIFRyYW5zZmVyLUVuY29kaW5nIGFuZCB0aGUgaW5jb21pbmcgcmVxdWVzdCBoYXMgYGd6aXBgCiAgICogYXMgYW4gYWNjZXB0ZWQgZW5jb2RpbmcgaW4gdGhlIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgIChjb21wcmVzc2lvbiBkaXNhYmxlZCkuCiAgICogVG8gZW5hYmxlLCBzZXQgYGF1dG9Db21wcmVzc2AgdG8gYHRydWVgLgogICAqLwogIGJvb2wgYXV0b0NvbXByZXNzOwoKICAvKioKICAgKiBHZXRzIG9yIHNldHMgdGhlIHRpbWVvdXQgdXNlZCBmb3IgaWRsZSBrZWVwLWFsaXZlIGNvbm5lY3Rpb25zLiBJZiBubwogICAqIGZ1cnRoZXIgcmVxdWVzdCBpcyBzZWVuIHdpdGhpbiBbaWRsZVRpbWVvdXRdIGFmdGVyIHRoZSBwcmV2aW91cyByZXF1ZXN0IHdhcwogICAqIGNvbXBsZXRlZCwgdGhlIGNvbm5lY3Rpb24gaXMgZHJvcHBlZC4KICAgKgogICAqIERlZmF1bHQgaXMgMTIwIHNlY29uZHMuCiAgICoKICAgKiBOb3RlIHRoYXQgaXQgbWF5IHRha2UgdXAgdG8gYDIgKiBpZGxlVGltZW91dGAgYmVmb3JlIGEgaWRsZSBjb25uZWN0aW9uIGlzCiAgICogYWJvcnRlZC4KICAgKgogICAqIFRvIGRpc2FibGUsIHNldCBbaWRsZVRpbWVvdXRdIHRvIGBudWxsYC4KICAgKi8KICBEdXJhdGlvbiBpZGxlVGltZW91dDsKCiAgLyoqCiAgICogU3RhcnRzIGxpc3RlbmluZyBmb3IgSFRUUCByZXF1ZXN0cyBvbiB0aGUgc3BlY2lmaWVkIFthZGRyZXNzXSBhbmQKICAgKiBbcG9ydF0uCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgYW4gSVAgdmVyc2lvbiA2IChJUHY2KSBhZGRyZXNzIGlzIHVzZWQsIGJvdGggSVAgdmVyc2lvbiA2CiAgICogKElQdjYpIGFuZCB2ZXJzaW9uIDQgKElQdjQpIGNvbm5lY3Rpb25zIHdpbGwgYmUgYWNjZXB0ZWQuIFRvCiAgICogcmVzdHJpY3QgdGhpcyB0byB2ZXJzaW9uIDYgKElQdjYpIG9ubHksIHVzZSBbdjZPbmx5XSB0byBzZXQKICAgKiB2ZXJzaW9uIDYgb25seS4gSG93ZXZlciwgaWYgdGhlIGFkZHJlc3MgaXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2Nl0sIG9ubHkgSVAgdmVyc2lvbiA2IChJUHY2KSBjb25uZWN0aW9ucwogICAqIHdpbGwgYmUgYWNjZXB0ZWQuCiAgICoKICAgKiBJZiBbcG9ydF0gaGFzIHRoZSB2YWx1ZSBbOjA6XSBhbiBlcGhlbWVyYWwgcG9ydCB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uIFRoZSBhY3R1YWwgcG9ydCB1c2VkIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlCiAgICogW3BvcnRdIGdldHRlci4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbYmFja2xvZ10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGlzdGVuCiAgICogYmFja2xvZyBmb3IgdGhlIHVuZGVybHlpbmcgT1MgbGlzdGVuIHNldHVwLiBJZiBbYmFja2xvZ10gaGFzIHRoZQogICAqIHZhbHVlIG9mIFs6MDpdICh0aGUgZGVmYXVsdCkgYSByZWFzb25hYmxlIHZhbHVlIHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbc2hhcmVkXSBzcGVjaWZpZXMgd2hldGhlciBhZGRpdGlvbmFsIEh0dHBTZXJ2ZXIKICAgKiBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwgYHBvcnRgIGFuZCBgdjZPbmx5YC4KICAgKiBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUgYEh0dHBTZXJ2ZXJgcyBmcm9tIHRoaXMgaXNvbGF0ZSBvciBvdGhlcgogICAqIGlzb2xhdGVzIGFyZSBib3VuZCB0byB0aGUgcG9ydCwgdGhlbiB0aGUgaW5jb21pbmcgY29ubmVjdGlvbnMgd2lsbCBiZQogICAqIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUgYm91bmQgYEh0dHBTZXJ2ZXJgcy4gQ29ubmVjdGlvbnMgY2FuIGJlCiAgICogZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZSBpc29sYXRlcyB0aGlzIHdheS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPEh0dHBTZXJ2ZXI+IGJpbmQoYWRkcmVzcywgaW50IHBvcnQsCiAgICAgICAgICB7aW50IGJhY2tsb2c6IDAsIGJvb2wgdjZPbmx5OiBmYWxzZSwgYm9vbCBzaGFyZWQ6IGZhbHNlfSkgPT4KICAgICAgX0h0dHBTZXJ2ZXIuYmluZChhZGRyZXNzLCBwb3J0LCBiYWNrbG9nLCB2Nk9ubHksIHNoYXJlZCk7CgogIC8qKgogICAqIFRoZSBbYWRkcmVzc10gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuCiAgICogW0ludGVybmV0QWRkcmVzc10uIElmIFthZGRyZXNzXSBpcyBhIFtTdHJpbmddLCBbYmluZF0gd2lsbAogICAqIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlCiAgICogbGlzdC4gVG8gbGlzdGVuIG9uIHRoZSBsb29wYmFjayBhZGFwdGVyLCB3aGljaCB3aWxsIGFsbG93IG9ubHkKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBob3N0LCB1c2UgdGhlIHZhbHVlCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjZdLiBUbyBhbGxvdyBmb3IgaW5jb21pbmcKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIG5ldHdvcmsgdXNlIGVpdGhlciBvbmUgb2YgdGhlIHZhbHVlcwogICAqIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2NF0gb3IgW0ludGVybmV0QWRkcmVzcy5hbnlJUHY2XSB0bwogICAqIGJpbmQgdG8gYWxsIGludGVyZmFjZXMgb3IgdGhlIElQIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCiAgICoKICAgKiBJZiBhbiBJUCB2ZXJzaW9uIDYgKElQdjYpIGFkZHJlc3MgaXMgdXNlZCwgYm90aCBJUCB2ZXJzaW9uIDYKICAgKiAoSVB2NikgYW5kIHZlcnNpb24gNCAoSVB2NCkgY29ubmVjdGlvbnMgd2lsbCBiZSBhY2NlcHRlZC4gVG8KICAgKiByZXN0cmljdCB0aGlzIHRvIHZlcnNpb24gNiAoSVB2Nikgb25seSwgdXNlIFt2Nk9ubHldIHRvIHNldAogICAqIHZlcnNpb24gNiBvbmx5LgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZQogICAqIFtwb3J0XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBJZiBbcmVxdWVzdENsaWVudENlcnRpZmljYXRlXSBpcyB0cnVlLCB0aGUgc2VydmVyIHdpbGwKICAgKiByZXF1ZXN0IGNsaWVudHMgdG8gYXV0aGVudGljYXRlIHdpdGggYSBjbGllbnQgY2VydGlmaWNhdGUuCiAgICogVGhlIHNlcnZlciB3aWxsIGFkdmVydGlzZSB0aGUgbmFtZXMgb2YgdHJ1c3RlZCBpc3N1ZXJzIG9mIGNsaWVudAogICAqIGNlcnRpZmljYXRlcywgZ2V0dGluZyB0aGVtIGZyb20gYSBbU2VjdXJpdHlDb250ZXh0XSwgd2hlcmUgdGhleSBoYXZlIGJlZW4KICAgKiBzZXQgdXNpbmcgW1NlY3VyaXR5Q29udGV4dC5zZXRDbGllbnRBdXRob3JpdGllc10uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbCBIdHRwU2VydmVyCiAgICogb2JqZWN0cyBjYW4gYmluZCB0byB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZiBgYWRkcmVzc2AsIGBwb3J0YCBhbmQgYHY2T25seWAuCiAgICogSWYgYHNoYXJlZGAgaXMgYHRydWVgIGFuZCBtb3JlIGBIdHRwU2VydmVyYHMgZnJvbSB0aGlzIGlzb2xhdGUgb3Igb3RoZXIKICAgKiBpc29sYXRlcyBhcmUgYm91bmQgdG8gdGhlIHBvcnQsIHRoZW4gdGhlIGluY29taW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUKICAgKiBkaXN0cmlidXRlZCBhbW9uZyBhbGwgdGhlIGJvdW5kIGBIdHRwU2VydmVyYHMuIENvbm5lY3Rpb25zIGNhbiBiZQogICAqIGRpc3RyaWJ1dGVkIG92ZXIgbXVsdGlwbGUgaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCgogIHN0YXRpYyBGdXR1cmU8SHR0cFNlcnZlcj4gYmluZFNlY3VyZSgKICAgICAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgICAgIHtpbnQgYmFja2xvZzogMCwKICAgICAgICAgIGJvb2wgdjZPbmx5OiBmYWxzZSwKICAgICAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgICAgIGJvb2wgc2hhcmVkOiBmYWxzZX0pID0+CiAgICAgIF9IdHRwU2VydmVyLmJpbmRTZWN1cmUoYWRkcmVzcywgcG9ydCwgY29udGV4dCwgYmFja2xvZywgdjZPbmx5LAogICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLCBzaGFyZWQpOwoKICAvKioKICAgKiBBdHRhY2hlcyB0aGUgSFRUUCBzZXJ2ZXIgdG8gYW4gZXhpc3RpbmcgW1NlcnZlclNvY2tldF0uIFdoZW4gdGhlCiAgICogW0h0dHBTZXJ2ZXJdIGlzIGNsb3NlZCwgdGhlIFtIdHRwU2VydmVyXSB3aWxsIGp1c3QgZGV0YWNoIGl0c2VsZiwKICAgKiBjbG9zaW5nIGN1cnJlbnQgY29ubmVjdGlvbnMgYnV0IG5vdCBjbG9zaW5nIFtzZXJ2ZXJTb2NrZXRdLgogICAqLwogIGZhY3RvcnkgSHR0cFNlcnZlci5saXN0ZW5PbihTZXJ2ZXJTb2NrZXQgc2VydmVyU29ja2V0KSA9PgogICAgICBuZXcgX0h0dHBTZXJ2ZXIubGlzdGVuT24oc2VydmVyU29ja2V0KTsKCiAgLyoqCiAgICogUGVybWFuZW50bHkgc3RvcHMgdGhpcyBbSHR0cFNlcnZlcl0gZnJvbSBsaXN0ZW5pbmcgZm9yIG5ldwogICAqIGNvbm5lY3Rpb25zLiAgVGhpcyBjbG9zZXMgdGhlIFtTdHJlYW1dIG9mIFtIdHRwUmVxdWVzdF1zIHdpdGggYQogICAqIGRvbmUgZXZlbnQuIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHNlcnZlciBpcwogICAqIHN0b3BwZWQuIEZvciBhIHNlcnZlciBzdGFydGVkIHVzaW5nIFtiaW5kXSBvciBbYmluZFNlY3VyZV0gdGhpcwogICAqIG1lYW5zIHRoYXQgdGhlIHBvcnQgbGlzdGVuZWQgb24gbm8gbG9uZ2VyIGluIHVzZS4KICAgKgogICAqIElmIFtmb3JjZV0gaXMgYHRydWVgLCBhY3RpdmUgY29ubmVjdGlvbnMgd2lsbCBiZSBjbG9zZWQgaW1tZWRpYXRlbHkuCiAgICovCiAgRnV0dXJlIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHRoYXQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb24uIFRoaXMgY2FuIGJlCiAgICogdXNlZCB0byBnZXQgdGhlIGFjdHVhbCBwb3J0IHVzZWQgd2hlbiBhIHZhbHVlIG9mIDAgZm9yIFs6cG9ydDpdIGlzCiAgICogc3BlY2lmaWVkIGluIHRoZSBbYmluZF0gb3IgW2JpbmRTZWN1cmVdIGNhbGwuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHRoYXQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb24uIFRoaXMgY2FuIGJlCiAgICogdXNlZCB0byBnZXQgdGhlIGFjdHVhbCBhZGRyZXNzIHVzZWQsIHdoZW4gdGhlIGFkZHJlc3MgaXMgZmV0Y2hlZCBieQogICAqIGEgbG9va3VwIGZyb20gYSBob3N0bmFtZS4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIFNldHMgdGhlIHRpbWVvdXQsIGluIHNlY29uZHMsIGZvciBzZXNzaW9ucyBvZiB0aGlzIFtIdHRwU2VydmVyXS4KICAgKiBUaGUgZGVmYXVsdCB0aW1lb3V0IGlzIDIwIG1pbnV0ZXMuCiAgICovCiAgc2V0IHNlc3Npb25UaW1lb3V0KGludCB0aW1lb3V0KTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBbSHR0cENvbm5lY3Rpb25zSW5mb10gb2JqZWN0IHN1bW1hcml6aW5nIHRoZSBudW1iZXIgb2YKICAgKiBjdXJyZW50IGNvbm5lY3Rpb25zIGhhbmRsZWQgYnkgdGhlIHNlcnZlci4KICAgKi8KICBIdHRwQ29ubmVjdGlvbnNJbmZvIGNvbm5lY3Rpb25zSW5mbygpOwp9CgovKioKICogU3VtbWFyeSBzdGF0aXN0aWNzIGFib3V0IGFuIFtIdHRwU2VydmVyXXMgY3VycmVudCBzb2NrZXQgY29ubmVjdGlvbnMuCiAqLwpjbGFzcyBIdHRwQ29ubmVjdGlvbnNJbmZvIHsKICAvKioKICAgKiBUb3RhbCBudW1iZXIgb2Ygc29ja2V0IGNvbm5lY3Rpb25zLgogICAqLwogIGludCB0b3RhbCA9IDA7CgogIC8qKgogICAqIE51bWJlciBvZiBhY3RpdmUgY29ubmVjdGlvbnMgd2hlcmUgYWN0dWFsIHJlcXVlc3QvcmVzcG9uc2UKICAgKiBwcm9jZXNzaW5nIGlzIGFjdGl2ZS4KICAgKi8KICBpbnQgYWN0aXZlID0gMDsKCiAgLyoqCiAgICogTnVtYmVyIG9mIGlkbGUgY29ubmVjdGlvbnMgaGVsZCBieSBjbGllbnRzIGFzIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuCiAgICovCiAgaW50IGlkbGUgPSAwOwoKICAvKioKICAgKiBOdW1iZXIgb2YgY29ubmVjdGlvbnMgd2hpY2ggYXJlIHByZXBhcmluZyB0byBjbG9zZS4gTm90ZTogVGhlc2UKICAgKiBjb25uZWN0aW9ucyBhcmUgYWxzbyBwYXJ0IG9mIHRoZSBbOmFjdGl2ZTpdIGNvdW50IGFzIHRoZXkgbWlnaHQKICAgKiBzdGlsbCBiZSBzZW5kaW5nIGRhdGEgdG8gdGhlIGNsaWVudCBiZWZvcmUgZmluYWxseSBjbG9zaW5nLgogICAqLwogIGludCBjbG9zaW5nID0gMDsKfQoKLyoqCiAqIEhlYWRlcnMgZm9yIEhUVFAgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4KICoKICogSW4gc29tZSBzaXR1YXRpb25zLCBoZWFkZXJzIGFyZSBpbW11dGFibGU6CiAqCiAqICogSHR0cFJlcXVlc3QgYW5kIEh0dHBDbGllbnRSZXNwb25zZSBhbHdheXMgaGF2ZSBpbW11dGFibGUgaGVhZGVycy4KICoKICogKiBIdHRwUmVzcG9uc2UgYW5kIEh0dHBDbGllbnRSZXF1ZXN0IGhhdmUgaW1tdXRhYmxlIGhlYWRlcnMKICogICBmcm9tIHRoZSBtb21lbnQgdGhlIGJvZHkgaXMgd3JpdHRlbiB0by4KICoKICogSW4gdGhlc2Ugc2l0dWF0aW9ucywgdGhlIG11dGF0aW5nIG1ldGhvZHMgdGhyb3cgZXhjZXB0aW9ucy4KICoKICogRm9yIGFsbCBvcGVyYXRpb25zIG9uIEhUVFAgaGVhZGVycyB0aGUgaGVhZGVyIG5hbWUgaXMKICogY2FzZS1pbnNlbnNpdGl2ZS4KICoKICogVG8gc2V0IHRoZSB2YWx1ZSBvZiBhIGhlYWRlciB1c2UgdGhlIGBzZXQoKWAgbWV0aG9kOgogKgogKiAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5jYWNoZUNvbnRyb2xIZWFkZXIsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICdtYXgtYWdlPTM2MDAsIG11c3QtcmV2YWxpZGF0ZScpOwogKgogKiBUbyByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSBoZWFkZXIgdXNlIHRoZSBgdmFsdWUoKWAgbWV0aG9kOgogKgogKiAgICAgcHJpbnQocmVxdWVzdC5oZWFkZXJzLnZhbHVlKEh0dHBIZWFkZXJzLnVzZXJBZ2VudEhlYWRlcikpOwogKgogKiBBbiBIdHRwSGVhZGVycyBvYmplY3QgaG9sZHMgYSBsaXN0IG9mIHZhbHVlcyBmb3IgZWFjaCBuYW1lCiAqIGFzIHRoZSBzdGFuZGFyZCBhbGxvd3MuIEluIG1vc3QgY2FzZXMgYSBuYW1lIGhvbGRzIG9ubHkgYSBzaW5nbGUgdmFsdWUsCiAqIFRoZSBtb3N0IGNvbW1vbiBtb2RlIG9mIG9wZXJhdGlvbiBpcyB0byB1c2UgYHNldCgpYCBmb3Igc2V0dGluZyBhIHZhbHVlLAogKiBhbmQgYHZhbHVlKClgIGZvciByZXRyaWV2aW5nIGEgdmFsdWUuCiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwSGVhZGVycyB7CiAgc3RhdGljIGNvbnN0IGFjY2VwdEhlYWRlciA9ICJhY2NlcHQiOwogIHN0YXRpYyBjb25zdCBhY2NlcHRDaGFyc2V0SGVhZGVyID0gImFjY2VwdC1jaGFyc2V0IjsKICBzdGF0aWMgY29uc3QgYWNjZXB0RW5jb2RpbmdIZWFkZXIgPSAiYWNjZXB0LWVuY29kaW5nIjsKICBzdGF0aWMgY29uc3QgYWNjZXB0TGFuZ3VhZ2VIZWFkZXIgPSAiYWNjZXB0LWxhbmd1YWdlIjsKICBzdGF0aWMgY29uc3QgYWNjZXB0UmFuZ2VzSGVhZGVyID0gImFjY2VwdC1yYW5nZXMiOwogIHN0YXRpYyBjb25zdCBhZ2VIZWFkZXIgPSAiYWdlIjsKICBzdGF0aWMgY29uc3QgYWxsb3dIZWFkZXIgPSAiYWxsb3ciOwogIHN0YXRpYyBjb25zdCBhdXRob3JpemF0aW9uSGVhZGVyID0gImF1dGhvcml6YXRpb24iOwogIHN0YXRpYyBjb25zdCBjYWNoZUNvbnRyb2xIZWFkZXIgPSAiY2FjaGUtY29udHJvbCI7CiAgc3RhdGljIGNvbnN0IGNvbm5lY3Rpb25IZWFkZXIgPSAiY29ubmVjdGlvbiI7CiAgc3RhdGljIGNvbnN0IGNvbnRlbnRFbmNvZGluZ0hlYWRlciA9ICJjb250ZW50LWVuY29kaW5nIjsKICBzdGF0aWMgY29uc3QgY29udGVudExhbmd1YWdlSGVhZGVyID0gImNvbnRlbnQtbGFuZ3VhZ2UiOwogIHN0YXRpYyBjb25zdCBjb250ZW50TGVuZ3RoSGVhZGVyID0gImNvbnRlbnQtbGVuZ3RoIjsKICBzdGF0aWMgY29uc3QgY29udGVudExvY2F0aW9uSGVhZGVyID0gImNvbnRlbnQtbG9jYXRpb24iOwogIHN0YXRpYyBjb25zdCBjb250ZW50TUQ1SGVhZGVyID0gImNvbnRlbnQtbWQ1IjsKICBzdGF0aWMgY29uc3QgY29udGVudFJhbmdlSGVhZGVyID0gImNvbnRlbnQtcmFuZ2UiOwogIHN0YXRpYyBjb25zdCBjb250ZW50VHlwZUhlYWRlciA9ICJjb250ZW50LXR5cGUiOwogIHN0YXRpYyBjb25zdCBkYXRlSGVhZGVyID0gImRhdGUiOwogIHN0YXRpYyBjb25zdCBldGFnSGVhZGVyID0gImV0YWciOwogIHN0YXRpYyBjb25zdCBleHBlY3RIZWFkZXIgPSAiZXhwZWN0IjsKICBzdGF0aWMgY29uc3QgZXhwaXJlc0hlYWRlciA9ICJleHBpcmVzIjsKICBzdGF0aWMgY29uc3QgZnJvbUhlYWRlciA9ICJmcm9tIjsKICBzdGF0aWMgY29uc3QgaG9zdEhlYWRlciA9ICJob3N0IjsKICBzdGF0aWMgY29uc3QgaWZNYXRjaEhlYWRlciA9ICJpZi1tYXRjaCI7CiAgc3RhdGljIGNvbnN0IGlmTW9kaWZpZWRTaW5jZUhlYWRlciA9ICJpZi1tb2RpZmllZC1zaW5jZSI7CiAgc3RhdGljIGNvbnN0IGlmTm9uZU1hdGNoSGVhZGVyID0gImlmLW5vbmUtbWF0Y2giOwogIHN0YXRpYyBjb25zdCBpZlJhbmdlSGVhZGVyID0gImlmLXJhbmdlIjsKICBzdGF0aWMgY29uc3QgaWZVbm1vZGlmaWVkU2luY2VIZWFkZXIgPSAiaWYtdW5tb2RpZmllZC1zaW5jZSI7CiAgc3RhdGljIGNvbnN0IGxhc3RNb2RpZmllZEhlYWRlciA9ICJsYXN0LW1vZGlmaWVkIjsKICBzdGF0aWMgY29uc3QgbG9jYXRpb25IZWFkZXIgPSAibG9jYXRpb24iOwogIHN0YXRpYyBjb25zdCBtYXhGb3J3YXJkc0hlYWRlciA9ICJtYXgtZm9yd2FyZHMiOwogIHN0YXRpYyBjb25zdCBwcmFnbWFIZWFkZXIgPSAicHJhZ21hIjsKICBzdGF0aWMgY29uc3QgcHJveHlBdXRoZW50aWNhdGVIZWFkZXIgPSAicHJveHktYXV0aGVudGljYXRlIjsKICBzdGF0aWMgY29uc3QgcHJveHlBdXRob3JpemF0aW9uSGVhZGVyID0gInByb3h5LWF1dGhvcml6YXRpb24iOwogIHN0YXRpYyBjb25zdCByYW5nZUhlYWRlciA9ICJyYW5nZSI7CiAgc3RhdGljIGNvbnN0IHJlZmVyZXJIZWFkZXIgPSAicmVmZXJlciI7CiAgc3RhdGljIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSAicmV0cnktYWZ0ZXIiOwogIHN0YXRpYyBjb25zdCBzZXJ2ZXJIZWFkZXIgPSAic2VydmVyIjsKICBzdGF0aWMgY29uc3QgdGVIZWFkZXIgPSAidGUiOwogIHN0YXRpYyBjb25zdCB0cmFpbGVySGVhZGVyID0gInRyYWlsZXIiOwogIHN0YXRpYyBjb25zdCB0cmFuc2ZlckVuY29kaW5nSGVhZGVyID0gInRyYW5zZmVyLWVuY29kaW5nIjsKICBzdGF0aWMgY29uc3QgdXBncmFkZUhlYWRlciA9ICJ1cGdyYWRlIjsKICBzdGF0aWMgY29uc3QgdXNlckFnZW50SGVhZGVyID0gInVzZXItYWdlbnQiOwogIHN0YXRpYyBjb25zdCB2YXJ5SGVhZGVyID0gInZhcnkiOwogIHN0YXRpYyBjb25zdCB2aWFIZWFkZXIgPSAidmlhIjsKICBzdGF0aWMgY29uc3Qgd2FybmluZ0hlYWRlciA9ICJ3YXJuaW5nIjsKICBzdGF0aWMgY29uc3Qgd3d3QXV0aGVudGljYXRlSGVhZGVyID0gInd3dy1hdXRoZW50aWNhdGUiOwoKICBARGVwcmVjYXRlZCgiVXNlIGFjY2VwdEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUNDRVBUID0gYWNjZXB0SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0Q2hhcnNldEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUNDRVBUX0NIQVJTRVQgPSBhY2NlcHRDaGFyc2V0SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0RW5jb2RpbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFDQ0VQVF9FTkNPRElORyA9IGFjY2VwdEVuY29kaW5nSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0TGFuZ3VhZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFDQ0VQVF9MQU5HVUFHRSA9IGFjY2VwdExhbmd1YWdlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0UmFuZ2VzSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBQ0NFUFRfUkFOR0VTID0gYWNjZXB0UmFuZ2VzSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWdlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBR0UgPSBhZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBhbGxvd0hlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUxMT1cgPSBhbGxvd0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGF1dGhvcml6YXRpb25IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFVVEhPUklaQVRJT04gPSBhdXRob3JpemF0aW9uSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgY2FjaGVDb250cm9sSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDQUNIRV9DT05UUk9MID0gY2FjaGVDb250cm9sSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgY29ubmVjdGlvbkhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OTkVDVElPTiA9IGNvbm5lY3Rpb25IZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50RW5jb2RpbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfRU5DT0RJTkcgPSBjb250ZW50RW5jb2RpbmdIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TGFuZ3VhZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfTEFOR1VBR0UgPSBjb250ZW50TGFuZ3VhZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TGVuZ3RoSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDT05URU5UX0xFTkdUSCA9IGNvbnRlbnRMZW5ndGhIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TG9jYXRpb25IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfTE9DQVRJT04gPSBjb250ZW50TG9jYXRpb25IZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TUQ1SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDT05URU5UX01ENSA9IGNvbnRlbnRNRDVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50UmFuZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfUkFOR0UgPSBjb250ZW50UmFuZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50VHlwZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OVEVOVF9UWVBFID0gY29udGVudFR5cGVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBkYXRlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBEQVRFID0gZGF0ZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGV0YWdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEVUQUcgPSBldGFnSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgZXhwZWN0SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFWFBFQ1QgPSBleHBlY3RIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBleHBpcmVzSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFWFBJUkVTID0gZXhwaXJlc0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGZyb21IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEZST00gPSBmcm9tSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgaG9zdEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSE9TVCA9IGhvc3RIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBpZk1hdGNoSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJRl9NQVRDSCA9IGlmTWF0Y2hIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBpZk1vZGlmaWVkU2luY2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX01PRElGSUVEX1NJTkNFID0gaWZNb2RpZmllZFNpbmNlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgaWZOb25lTWF0Y2hIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX05PTkVfTUFUQ0ggPSBpZk5vbmVNYXRjaEhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGlmUmFuZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX1JBTkdFID0gaWZSYW5nZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGlmVW5tb2RpZmllZFNpbmNlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJRl9VTk1PRElGSUVEX1NJTkNFID0gaWZVbm1vZGlmaWVkU2luY2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBsYXN0TW9kaWZpZWRIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IExBU1RfTU9ESUZJRUQgPSBsYXN0TW9kaWZpZWRIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBsb2NhdGlvbkhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgTE9DQVRJT04gPSBsb2NhdGlvbkhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIG1heEZvcndhcmRzSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBNQVhfRk9SV0FSRFMgPSBtYXhGb3J3YXJkc0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHByYWdtYUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUFJBR01BID0gcHJhZ21hSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcHJveHlBdXRoZW50aWNhdGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFBST1hZX0FVVEhFTlRJQ0FURSA9IHByb3h5QXV0aGVudGljYXRlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcHJveHlBdXRob3JpemF0aW9uSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQUk9YWV9BVVRIT1JJWkFUSU9OID0gcHJveHlBdXRob3JpemF0aW9uSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcmFuZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJBTkdFID0gcmFuZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSByZWZlcmVySGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBSRUZFUkVSID0gcmVmZXJlckhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHJldHJ5QWZ0ZXJIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFVFJZX0FGVEVSID0gcmV0cnlBZnRlckhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHNlcnZlckhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU0VSVkVSID0gc2VydmVySGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFRFID0gdGVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB0cmFpbGVySGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBUUkFJTEVSID0gdHJhaWxlckhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFRSQU5TRkVSX0VOQ09ESU5HID0gdHJhbnNmZXJFbmNvZGluZ0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHVwZ3JhZGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFVQR1JBREUgPSB1cGdyYWRlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdXNlckFnZW50SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBVU0VSX0FHRU5UID0gdXNlckFnZW50SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdmFyeUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgVkFSWSA9IHZhcnlIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB2aWFIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFZJQSA9IHZpYUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHdhcm5pbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdBUk5JTkcgPSB3YXJuaW5nSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugd3d3QXV0aGVudGljYXRlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBXV1dfQVVUSEVOVElDQVRFID0gd3d3QXV0aGVudGljYXRlSGVhZGVyOwoKICAvLyBDb29raWUgaGVhZGVycyBmcm9tIFJGQyA2MjY1LgogIHN0YXRpYyBjb25zdCBjb29raWVIZWFkZXIgPSAiY29va2llIjsKICBzdGF0aWMgY29uc3Qgc2V0Q29va2llSGVhZGVyID0gInNldC1jb29raWUiOwoKICBARGVwcmVjYXRlZCgiVXNlIGNvb2tpZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09PS0lFID0gY29va2llSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugc2V0Q29va2llSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTRVRfQ09PS0lFID0gc2V0Q29va2llSGVhZGVyOwoKICBzdGF0aWMgY29uc3QgZ2VuZXJhbEhlYWRlcnMgPSBjb25zdCBbCiAgICBjYWNoZUNvbnRyb2xIZWFkZXIsCiAgICBjb25uZWN0aW9uSGVhZGVyLAogICAgZGF0ZUhlYWRlciwKICAgIHByYWdtYUhlYWRlciwKICAgIHRyYWlsZXJIZWFkZXIsCiAgICB0cmFuc2ZlckVuY29kaW5nSGVhZGVyLAogICAgdXBncmFkZUhlYWRlciwKICAgIHZpYUhlYWRlciwKICAgIHdhcm5pbmdIZWFkZXIKICBdOwoKICBARGVwcmVjYXRlZCgiVXNlIGdlbmVyYWxIZWFkZXJzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBHRU5FUkFMX0hFQURFUlMgPSBnZW5lcmFsSGVhZGVyczsKCiAgc3RhdGljIGNvbnN0IGVudGl0eUhlYWRlcnMgPSBjb25zdCBbCiAgICBhbGxvd0hlYWRlciwKICAgIGNvbnRlbnRFbmNvZGluZ0hlYWRlciwKICAgIGNvbnRlbnRMYW5ndWFnZUhlYWRlciwKICAgIGNvbnRlbnRMZW5ndGhIZWFkZXIsCiAgICBjb250ZW50TG9jYXRpb25IZWFkZXIsCiAgICBjb250ZW50TUQ1SGVhZGVyLAogICAgY29udGVudFJhbmdlSGVhZGVyLAogICAgY29udGVudFR5cGVIZWFkZXIsCiAgICBleHBpcmVzSGVhZGVyLAogICAgbGFzdE1vZGlmaWVkSGVhZGVyCiAgXTsKCiAgQERlcHJlY2F0ZWQoIlVzZSBlbnRpdHlIZWFkZXJzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFTlRJVFlfSEVBREVSUyA9IGVudGl0eUhlYWRlcnM7CgogIHN0YXRpYyBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBjb25zdCBbCiAgICBhY2NlcHRSYW5nZXNIZWFkZXIsCiAgICBhZ2VIZWFkZXIsCiAgICBldGFnSGVhZGVyLAogICAgbG9jYXRpb25IZWFkZXIsCiAgICBwcm94eUF1dGhlbnRpY2F0ZUhlYWRlciwKICAgIHJldHJ5QWZ0ZXJIZWFkZXIsCiAgICBzZXJ2ZXJIZWFkZXIsCiAgICB2YXJ5SGVhZGVyLAogICAgd3d3QXV0aGVudGljYXRlSGVhZGVyCiAgXTsKCiAgQERlcHJlY2F0ZWQoIlVzZSByZXNwb25zZUhlYWRlcnMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFU1BPTlNFX0hFQURFUlMgPSByZXNwb25zZUhlYWRlcnM7CgogIHN0YXRpYyBjb25zdCByZXF1ZXN0SGVhZGVycyA9IGNvbnN0IFsKICAgIGFjY2VwdEhlYWRlciwKICAgIGFjY2VwdENoYXJzZXRIZWFkZXIsCiAgICBhY2NlcHRFbmNvZGluZ0hlYWRlciwKICAgIGFjY2VwdExhbmd1YWdlSGVhZGVyLAogICAgYXV0aG9yaXphdGlvbkhlYWRlciwKICAgIGV4cGVjdEhlYWRlciwKICAgIGZyb21IZWFkZXIsCiAgICBob3N0SGVhZGVyLAogICAgaWZNYXRjaEhlYWRlciwKICAgIGlmTW9kaWZpZWRTaW5jZUhlYWRlciwKICAgIGlmTm9uZU1hdGNoSGVhZGVyLAogICAgaWZSYW5nZUhlYWRlciwKICAgIGlmVW5tb2RpZmllZFNpbmNlSGVhZGVyLAogICAgbWF4Rm9yd2FyZHNIZWFkZXIsCiAgICBwcm94eUF1dGhvcml6YXRpb25IZWFkZXIsCiAgICByYW5nZUhlYWRlciwKICAgIHJlZmVyZXJIZWFkZXIsCiAgICB0ZUhlYWRlciwKICAgIHVzZXJBZ2VudEhlYWRlcgogIF07CgogIEBEZXByZWNhdGVkKCJVc2UgcmVxdWVzdEhlYWRlcnMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFUVVFU1RfSEVBREVSUyA9IHJlcXVlc3RIZWFkZXJzOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBkYXRlLiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSB3aWxsCiAgICogcmVmbGVjdCB0aGUgJ2RhdGUnIGhlYWRlci4KICAgKi8KICBEYXRlVGltZSBkYXRlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBleHBpcnkgZGF0ZS4gVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgd2lsbAogICAqIHJlZmxlY3QgdGhlICdleHBpcmVzJyBoZWFkZXIuCiAgICovCiAgRGF0ZVRpbWUgZXhwaXJlczsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgImlmLW1vZGlmaWVkLXNpbmNlIiBkYXRlLiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSB3aWxsCiAgICogcmVmbGVjdCB0aGUgImlmLW1vZGlmaWVkLXNpbmNlIiBoZWFkZXIuCiAgICovCiAgRGF0ZVRpbWUgaWZNb2RpZmllZFNpbmNlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBob3N0IHBhcnQgb2YgdGhlICdob3N0JyBoZWFkZXIgZm9yIHRoZQogICAqIGNvbm5lY3Rpb24uCiAgICovCiAgU3RyaW5nIGhvc3Q7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIHBvcnQgcGFydCBvZiB0aGUgJ2hvc3QnIGhlYWRlciBmb3IgdGhlCiAgICogY29ubmVjdGlvbi4KICAgKi8KICBpbnQgcG9ydDsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgY29udGVudCB0eXBlLiBOb3RlIHRoYXQgdGhlIGNvbnRlbnQgdHlwZSBpbiB0aGUKICAgKiBoZWFkZXIgd2lsbCBvbmx5IGJlIHVwZGF0ZWQgaWYgdGhpcyBmaWVsZCBpcyBzZXQKICAgKiBkaXJlY3RseS4gTXV0YXRpbmcgdGhlIHJldHVybmVkIGN1cnJlbnQgdmFsdWUgd2lsbCBoYXZlIG5vCiAgICogZWZmZWN0LgogICAqLwogIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBjb250ZW50IGxlbmd0aCBoZWFkZXIgdmFsdWUuCiAgICovCiAgaW50IGNvbnRlbnRMZW5ndGg7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBoZWFkZXIgdmFsdWUuCiAgICovCiAgYm9vbCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZyBoZWFkZXIgdmFsdWUuCiAgICovCiAgYm9vbCBjaHVua2VkVHJhbnNmZXJFbmNvZGluZzsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBoZWFkZXIgbmFtZWQgW25hbWVdLiBJZiB0aGVyZQogICAqIGlzIG5vIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLCBbOm51bGw6XSB3aWxsIGJlIHJldHVybmVkLgogICAqLwogIExpc3Q8U3RyaW5nPiBvcGVyYXRvciBbXShTdHJpbmcgbmFtZSk7CgogIC8qKgogICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgdGhlIHZhbHVlIGZvciBhIHNpbmdsZSB2YWx1ZWQgaGVhZGVyLiBJZgogICAqIHRoZXJlIGlzIG5vIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLCBbOm51bGw6XSB3aWxsIGJlCiAgICogcmV0dXJuZWQuIElmIHRoZSBoZWFkZXIgaGFzIG1vcmUgdGhhbiBvbmUgdmFsdWUgYW4gZXhjZXB0aW9uIGlzCiAgICogdGhyb3duLgogICAqLwogIFN0cmluZyB2YWx1ZShTdHJpbmcgbmFtZSk7CgogIC8qKgogICAqIEFkZHMgYSBoZWFkZXIgdmFsdWUuIFRoZSBoZWFkZXIgbmFtZWQgW25hbWVdIHdpbGwgaGF2ZSB0aGUgdmFsdWUKICAgKiBbdmFsdWVdIGFkZGVkIHRvIGl0cyBsaXN0IG9mIHZhbHVlcy4gU29tZSBoZWFkZXJzIGFyZSBzaW5nbGUKICAgKiB2YWx1ZWQsIGFuZCBmb3IgdGhlc2UgYWRkaW5nIGEgdmFsdWUgd2lsbCByZXBsYWNlIHRoZSBwcmV2aW91cwogICAqIHZhbHVlLiBJZiB0aGUgdmFsdWUgaXMgb2YgdHlwZSBEYXRlVGltZSBhIEhUVFAgZGF0ZSBmb3JtYXQgd2lsbCBiZQogICAqIGFwcGxpZWQuIElmIHRoZSB2YWx1ZSBpcyBhIFs6TGlzdDpdIGVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdCB3aWxsCiAgICogYmUgYWRkZWQgc2VwYXJhdGVseS4gRm9yIGFsbCBvdGhlciB0eXBlcyB0aGUgZGVmYXVsdCBbOnRvU3RyaW5nOl0KICAgKiBtZXRob2Qgd2lsbCBiZSB1c2VkLgogICAqLwogIHZvaWQgYWRkKFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpOwoKICAvKioKICAgKiBTZXRzIGEgaGVhZGVyLiBUaGUgaGVhZGVyIG5hbWVkIFtuYW1lXSB3aWxsIGhhdmUgYWxsIGl0cyB2YWx1ZXMKICAgKiBjbGVhcmVkIGJlZm9yZSB0aGUgdmFsdWUgW3ZhbHVlXSBpcyBhZGRlZCBhcyBpdHMgdmFsdWUuCiAgICovCiAgdm9pZCBzZXQoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSk7CgogIC8qKgogICAqIFJlbW92ZXMgYSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBoZWFkZXIgbmFtZS4gU29tZSBoZWFkZXJzIGhhdmUKICAgKiBzeXN0ZW0gc3VwcGxpZWQgdmFsdWVzIGFuZCBmb3IgdGhlc2UgdGhlIHN5c3RlbSBzdXBwbGllZCB2YWx1ZXMKICAgKiB3aWxsIHN0aWxsIGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uIG9mIHZhbHVlcyBmb3IgdGhlIGhlYWRlci4KICAgKi8KICB2b2lkIHJlbW92ZShTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgdmFsdWVzIGZvciB0aGUgc3BlY2lmaWVkIGhlYWRlciBuYW1lLiBTb21lIGhlYWRlcnMKICAgKiBoYXZlIHN5c3RlbSBzdXBwbGllZCB2YWx1ZXMgYW5kIGZvciB0aGVzZSB0aGUgc3lzdGVtIHN1cHBsaWVkCiAgICogdmFsdWVzIHdpbGwgc3RpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24gb2YgdmFsdWVzIGZvciB0aGUKICAgKiBoZWFkZXIuCiAgICovCiAgdm9pZCByZW1vdmVBbGwoU3RyaW5nIG5hbWUpOwoKICAvKioKICAgKiBFbnVtZXJhdGVzIHRoZSBoZWFkZXJzLCBhcHBseWluZyB0aGUgZnVuY3Rpb24gW2ZdIHRvIGVhY2gKICAgKiBoZWFkZXIuIFRoZSBoZWFkZXIgbmFtZSBwYXNzZWQgaW4gWzpuYW1lOl0gd2lsbCBiZSBhbGwgbG93ZXIKICAgKiBjYXNlLgogICAqLwogIHZvaWQgZm9yRWFjaCh2b2lkIGYoU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiB2YWx1ZXMpKTsKCiAgLyoqCiAgICogRGlzYWJsZXMgZm9sZGluZyBmb3IgdGhlIGhlYWRlciBuYW1lZCBbbmFtZV0gd2hlbiBzZW5kaW5nIHRoZSBIVFRQCiAgICogaGVhZGVyLiBCeSBkZWZhdWx0LCBtdWx0aXBsZSBoZWFkZXIgdmFsdWVzIGFyZSBmb2xkZWQgaW50byBhCiAgICogc2luZ2xlIGhlYWRlciBsaW5lIGJ5IHNlcGFyYXRpbmcgdGhlIHZhbHVlcyB3aXRoIGNvbW1hcy4gVGhlCiAgICogJ3NldC1jb29raWUnIGhlYWRlciBoYXMgZm9sZGluZyBkaXNhYmxlZCBieSBkZWZhdWx0LgogICAqLwogIHZvaWQgbm9Gb2xkaW5nKFN0cmluZyBuYW1lKTsKCiAgLyoqCiAgICogUmVtb3ZlIGFsbCBoZWFkZXJzLiBTb21lIGhlYWRlcnMgaGF2ZSBzeXN0ZW0gc3VwcGxpZWQgdmFsdWVzIGFuZAogICAqIGZvciB0aGVzZSB0aGUgc3lzdGVtIHN1cHBsaWVkIHZhbHVlcyB3aWxsIHN0aWxsIGJlIGFkZGVkIHRvIHRoZQogICAqIGNvbGxlY3Rpb24gb2YgdmFsdWVzIGZvciB0aGUgaGVhZGVyLgogICAqLwogIHZvaWQgY2xlYXIoKTsKfQoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgaGVhZGVyIHZhbHVlIGluIHRoZSBmb3JtOgogKgogKiAgIFs6dmFsdWU7IHBhcmFtZXRlcjE9dmFsdWUxOyBwYXJhbWV0ZXIyPXZhbHVlMjpdCiAqCiAqIFtIZWFkZXJWYWx1ZV0gY2FuIGJlIHVzZWQgdG8gY29udmVuaWVudGx5IGJ1aWxkIGFuZCBwYXJzZSBoZWFkZXIKICogdmFsdWVzIG9uIHRoaXMgZm9ybS4KICoKICogVG8gYnVpbGQgYW4gWzphY2NlcHRzOl0gaGVhZGVyIHdpdGggdGhlIHZhbHVlCiAqCiAqICAgICB0ZXh0L3BsYWluOyBxPTAuMywgdGV4dC9odG1sCiAqCiAqIHVzZSBjb2RlIGxpa2UgdGhpczoKICoKICogICAgIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QgPSAuLi47CiAqICAgICB2YXIgdiA9IG5ldyBIZWFkZXJWYWx1ZSgidGV4dC9wbGFpbiIsIHsicSI6ICIwLjMifSk7CiAqICAgICByZXF1ZXN0LmhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLmFjY2VwdEhlYWRlciwgdik7CiAqICAgICByZXF1ZXN0LmhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLmFjY2VwdEhlYWRlciwgInRleHQvaHRtbCIpOwogKgogKiBUbyBwYXJzZSB0aGUgaGVhZGVyIHZhbHVlcyB1c2UgdGhlIFs6cGFyc2U6XSBzdGF0aWMgbWV0aG9kLgogKgogKiAgICAgSHR0cFJlcXVlc3QgcmVxdWVzdCA9IC4uLjsKICogICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSByZXF1ZXN0LmhlYWRlcnNbSHR0cEhlYWRlcnMuYWNjZXB0SGVhZGVyXTsKICogICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgewogKiAgICAgICBIZWFkZXJWYWx1ZSB2ID0gSGVhZGVyVmFsdWUucGFyc2UodmFsdWUpOwogKiAgICAgICAvLyBVc2Ugdi52YWx1ZSBhbmQgdi5wYXJhbWV0ZXJzCiAqICAgICB9KTsKICoKICogQW4gaW5zdGFuY2Ugb2YgW0hlYWRlclZhbHVlXSBpcyBpbW11dGFibGUuCiAqLwphYnN0cmFjdCBjbGFzcyBIZWFkZXJWYWx1ZSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBoZWFkZXIgdmFsdWUgb2JqZWN0IHNldHRpbmcgdGhlIHZhbHVlIGFuZCBwYXJhbWV0ZXJzLgogICAqLwogIGZhY3RvcnkgSGVhZGVyVmFsdWUoW1N0cmluZyB2YWx1ZSA9ICIiLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnNdKSB7CiAgICByZXR1cm4gbmV3IF9IZWFkZXJWYWx1ZSh2YWx1ZSwgcGFyYW1ldGVycyk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGhlYWRlciB2YWx1ZSBvYmplY3QgZnJvbSBwYXJzaW5nIGEgaGVhZGVyIHZhbHVlCiAgICogc3RyaW5nIHdpdGggYm90aCB2YWx1ZSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycy4KICAgKi8KICBzdGF0aWMgSGVhZGVyVmFsdWUgcGFyc2UoU3RyaW5nIHZhbHVlLAogICAgICB7U3RyaW5nIHBhcmFtZXRlclNlcGFyYXRvcjogIjsiLAogICAgICBTdHJpbmcgdmFsdWVTZXBhcmF0b3I6IG51bGwsCiAgICAgIGJvb2wgcHJlc2VydmVCYWNrc2xhc2g6IGZhbHNlfSkgewogICAgcmV0dXJuIF9IZWFkZXJWYWx1ZS5wYXJzZSh2YWx1ZSwKICAgICAgICBwYXJhbWV0ZXJTZXBhcmF0b3I6IHBhcmFtZXRlclNlcGFyYXRvciwKICAgICAgICB2YWx1ZVNlcGFyYXRvcjogdmFsdWVTZXBhcmF0b3IsCiAgICAgICAgcHJlc2VydmVCYWNrc2xhc2g6IHByZXNlcnZlQmFja3NsYXNoKTsKICB9CgogIC8qKgogICAqIEdldHMgdGhlIGhlYWRlciB2YWx1ZS4KICAgKi8KICBTdHJpbmcgZ2V0IHZhbHVlOwoKICAvKioKICAgKiBHZXRzIHRoZSBtYXAgb2YgcGFyYW1ldGVycy4KICAgKgogICAqIFRoaXMgbWFwIGNhbm5vdCBiZSBtb2RpZmllZC4gSW52b2tpbmcgYW55IG9wZXJhdGlvbiB3aGljaCB3b3VsZAogICAqIG1vZGlmeSB0aGUgbWFwIHdpbGwgdGhyb3cgW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IHBhcmFtZXRlcnM7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIGZvcm06CiAgICoKICAgKiAgICAgdmFsdWU7IHBhcmFtZXRlcjE9dmFsdWUxOyBwYXJhbWV0ZXIyPXZhbHVlMgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwp9CgphYnN0cmFjdCBjbGFzcyBIdHRwU2Vzc2lvbiBpbXBsZW1lbnRzIE1hcCB7CiAgLyoqCiAgICogR2V0cyB0aGUgaWQgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24uCiAgICovCiAgU3RyaW5nIGdldCBpZDsKCiAgLyoqCiAgICogRGVzdHJveXMgdGhlIHNlc3Npb24uIFRoaXMgd2lsbCB0ZXJtaW5hdGUgdGhlIHNlc3Npb24gYW5kIGFueSBmdXJ0aGVyCiAgICogY29ubmVjdGlvbnMgd2l0aCB0aGlzIGlkIHdpbGwgYmUgZ2l2ZW4gYSBuZXcgaWQgYW5kIHNlc3Npb24uCiAgICovCiAgdm9pZCBkZXN0cm95KCk7CgogIC8qKgogICAqIFNldHMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gaXMgdGltZWQgb3V0LgogICAqLwogIHZvaWQgc2V0IG9uVGltZW91dCh2b2lkIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiBJcyB0cnVlIGlmIHRoZSBzZXNzaW9uIGhhcyBub3QgYmVlbiBzZW50IHRvIHRoZSBjbGllbnQgeWV0LgogICAqLwogIGJvb2wgZ2V0IGlzTmV3Owp9CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYSBjb250ZW50IHR5cGUuIEFuIGluc3RhbmNlIG9mIFtDb250ZW50VHlwZV0gaXMKICogaW1tdXRhYmxlLgogKi8KYWJzdHJhY3QgY2xhc3MgQ29udGVudFR5cGUgaW1wbGVtZW50cyBIZWFkZXJWYWx1ZSB7CiAgLyoqCiAgICogQ29udGVudCB0eXBlIGZvciBwbGFpbiB0ZXh0IHVzaW5nIFVURi04IGVuY29kaW5nLgogICAqCiAgICogICAgIHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKICAgKi8KICBzdGF0aWMgZmluYWwgdGV4dCA9IG5ldyBDb250ZW50VHlwZSgidGV4dCIsICJwbGFpbiIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogIEBEZXByZWNhdGVkKCJVc2UgdGV4dCBpbnN0ZWFkIikKICBzdGF0aWMgZmluYWwgVEVYVCA9IHRleHQ7CgogIC8qKgogICAqICBDb250ZW50IHR5cGUgZm9yIEhUTUwgdXNpbmcgVVRGLTggZW5jb2RpbmcuCiAgICoKICAgKiAgICAgdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04CiAgICovCiAgc3RhdGljIGZpbmFsIGh0bWwgPSBuZXcgQ29udGVudFR5cGUoInRleHQiLCAiaHRtbCIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogIEBEZXByZWNhdGVkKCJVc2UgaHRtbCBpbnN0ZWFkIikKICBzdGF0aWMgZmluYWwgSFRNTCA9IGh0bWw7CgogIC8qKgogICAqICBDb250ZW50IHR5cGUgZm9yIEpTT04gdXNpbmcgVVRGLTggZW5jb2RpbmcuCiAgICoKICAgKiAgICAgYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOAogICAqLwogIHN0YXRpYyBmaW5hbCBqc29uID0gbmV3IENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbiIsICJqc29uIiwgY2hhcnNldDogInV0Zi04Iik7CiAgQERlcHJlY2F0ZWQoIlVzZSBqc29uIGluc3RlYWQiKQogIHN0YXRpYyBmaW5hbCBKU09OID0ganNvbjsKCiAgLyoqCiAgICogIENvbnRlbnQgdHlwZSBmb3IgYmluYXJ5IGRhdGEuCiAgICoKICAgKiAgICAgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCiAgICovCiAgc3RhdGljIGZpbmFsIGJpbmFyeSA9IG5ldyBDb250ZW50VHlwZSgiYXBwbGljYXRpb24iLCAib2N0ZXQtc3RyZWFtIik7CiAgQERlcHJlY2F0ZWQoIlVzZSBiaW5hcnkgaW5zdGVhZCIpCiAgc3RhdGljIGZpbmFsIEJJTkFSWSA9IGJpbmFyeTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBjb250ZW50IHR5cGUgb2JqZWN0IHNldHRpbmcgdGhlIHByaW1hcnkgdHlwZSBhbmQKICAgKiBzdWIgdHlwZS4gVGhlIGNoYXJzZXQgYW5kIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBjYW4gYWxzbyBiZSBzZXQKICAgKiB1c2luZyBbY2hhcnNldF0gYW5kIFtwYXJhbWV0ZXJzXS4gSWYgY2hhcnNldCBpcyBwYXNzZWQgYW5kCiAgICogW3BhcmFtZXRlcnNdIGNvbnRhaW5zIGNoYXJzZXQgYXMgd2VsbCB0aGUgcGFzc2VkIFtjaGFyc2V0XSB3aWxsCiAgICogb3ZlcnJpZGUgdGhlIHZhbHVlIGluIHBhcmFtZXRlcnMuIEtleXMgcGFzc2VkIGluIHBhcmFtZXRlcnMgd2lsbCBiZQogICAqIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlLiBUaGUgYGNoYXJzZXRgIGVudHJ5LCB3aGV0aGVyIHBhc3NlZCBhcyBgY2hhcnNldGAKICAgKiBvciBpbiBgcGFyYW1ldGVyc2AsIHdpbGwgaGF2ZSBpdHMgdmFsdWUgY29udmVydGVkIHRvIGxvd2VyLWNhc2UuCiAgICovCiAgZmFjdG9yeSBDb250ZW50VHlwZShTdHJpbmcgcHJpbWFyeVR5cGUsIFN0cmluZyBzdWJUeXBlLAogICAgICB7U3RyaW5nIGNoYXJzZXQsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVyc30pIHsKICAgIHJldHVybiBuZXcgX0NvbnRlbnRUeXBlKHByaW1hcnlUeXBlLCBzdWJUeXBlLCBjaGFyc2V0LCBwYXJhbWV0ZXJzKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgY29udGVudCB0eXBlIG9iamVjdCBmcm9tIHBhcnNpbmcgYSBDb250ZW50LVR5cGUKICAgKiBoZWFkZXIgdmFsdWUuIEFzIHByaW1hcnkgdHlwZSwgc3ViIHR5cGUgYW5kIHBhcmFtZXRlciBuYW1lcyBhbmQKICAgKiB2YWx1ZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZSBhbGwgdGhlc2UgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkCiAgICogdG8gbG93ZXIgY2FzZS4gUGFyc2luZyB0aGlzIHN0cmluZwogICAqCiAgICogICAgIHRleHQvaHRtbDsgY2hhcnNldD11dGYtOAogICAqCiAgICogd2lsbCBjcmVhdGUgYSBjb250ZW50IHR5cGUgb2JqZWN0IHdpdGggcHJpbWFyeSB0eXBlIFs6dGV4dDpdLCBzdWIKICAgKiB0eXBlIFs6aHRtbDpdIGFuZCBwYXJhbWV0ZXIgWzpjaGFyc2V0Ol0gd2l0aCB2YWx1ZSBbOnV0Zi04Ol0uCiAgICovCiAgc3RhdGljIENvbnRlbnRUeXBlIHBhcnNlKFN0cmluZyB2YWx1ZSkgewogICAgcmV0dXJuIF9Db250ZW50VHlwZS5wYXJzZSh2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBHZXRzIHRoZSBtaW1lLXR5cGUsIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuCiAgICovCiAgU3RyaW5nIGdldCBtaW1lVHlwZTsKCiAgLyoqCiAgICogR2V0cyB0aGUgcHJpbWFyeSB0eXBlLgogICAqLwogIFN0cmluZyBnZXQgcHJpbWFyeVR5cGU7CgogIC8qKgogICAqIEdldHMgdGhlIHN1YiB0eXBlLgogICAqLwogIFN0cmluZyBnZXQgc3ViVHlwZTsKCiAgLyoqCiAgICogR2V0cyB0aGUgY2hhcmFjdGVyIHNldC4KICAgKi8KICBTdHJpbmcgZ2V0IGNoYXJzZXQ7Cn0KCi8qKgogKiBSZXByZXNlbnRhdGlvbiBvZiBhIGNvb2tpZS4gRm9yIGNvb2tpZXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlciBhcyBDb29raWUKICogaGVhZGVyIHZhbHVlcyBvbmx5IFtuYW1lXSBhbmQgW3ZhbHVlXSBwcm9wZXJ0aWVzIHdpbGwgYmUgc2V0LiBXaGVuIGJ1aWxkaW5nIGEKICogY29va2llIGZvciB0aGUgJ3NldC1jb29raWUnIGhlYWRlciBpbiB0aGUgc2VydmVyIGFuZCB3aGVuIHJlY2VpdmluZyBjb29raWVzCiAqIGluIHRoZSBjbGllbnQgYXMgJ3NldC1jb29raWUnIGhlYWRlcnMgYWxsIGZpZWxkcyBjYW4gYmUgdXNlZC4KICovCmFic3RyYWN0IGNsYXNzIENvb2tpZSB7CiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIGNvb2tpZS4KICAgKgogICAqIE11c3QgYmUgYSBgdG9rZW5gIGFzIHNwZWNpZmllZCBpbiBSRkMgNjI2NS4KICAgKgogICAqIFRoZSBhbGxvd2VkIGNoYXJhY3RlcnMgaW4gYSBgdG9rZW5gIGFyZSB0aGUgdmlzaWJsZSBBU0NJSSBjaGFyYWN0ZXJzLAogICAqIFUrMDAyMSAoYCFgKSB0aHJvdWdoIFUrMDA3RSAoYH5gKSwgZXhjZXB0IHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyczoKICAgKiBgKGAsIGApYCwgYDxgLCBgPmAsIGBAYCwgYCxgLCBgO2AsIGA6YCwgYFxgLCBgImAsIGAvYCwgYFtgLCBgXWAsIGA/YCwgYD1gLAogICAqIGB7YCwgYW5kIGB9YC4KICAgKi8KICBTdHJpbmcgbmFtZTsKCiAgLyoqCiAgICogVGhlIHZhbHVlIG9mIHRoZSBjb29raWUuCiAgICoKICAgKiBNdXN0IGJlIGEgYGNvb2tpZS12YWx1ZWAgYXMgc3BlY2lmaWVkIGluIFJGQyA2MjY1LgogICAqCiAgICogVGhlIGFsbG93ZWQgY2hhcmFjdGVycyBpbiBhIGNvb2tpZSB2YWx1ZSBhcmUgdGhlIHZpc2libGUgQVNDSUkgY2hhcmFjdGVycywKICAgKiBVKzAwMjEgKGAhYCkgdGhyb3VnaCBVKzAwN0UgKGB+YCkgZXhjZXB0IHRoZSBjaGFyYWN0ZXJzOgogICAqIGAiYCwgYCxgLCBgO2AgYW5kIGBcYC4KICAgKiBDb29raWUgdmFsdWVzIG1heSBiZSB3cmFwcGVkIGluIGEgc2luZ2xlIHBhaXIgb2YgZG91YmxlIHF1b3RlcwogICAqIChVKzAwMjIsIGAiYCkuCiAgICovCiAgU3RyaW5nIHZhbHVlOwoKICAvKioKICAgKiBUaGUgdGltZSBhdCB3aGljaCB0aGUgY29va2llIGV4cGlyZXMuCiAgICovCiAgRGF0ZVRpbWUgZXhwaXJlczsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBjb29raWUgZXhwaXJlcy4gQSB6ZXJvIG9yIG5lZ2F0aXZlIHZhbHVlCiAgICogbWVhbnMgdGhlIGNvb2tpZSBoYXMgZXhwaXJlZC4KICAgKi8KICBpbnQgbWF4QWdlOwoKICAvKioKICAgKiBUaGUgZG9tYWluIHRoZSBjb29raWUgYXBwbGllcyB0by4KICAgKi8KICBTdHJpbmcgZG9tYWluOwoKICAvKioKICAgKiBUaGUgcGF0aCB3aXRoaW4gdGhlIFtkb21haW5dIHRoZSBjb29raWUgYXBwbGllcyB0by4KICAgKi8KICBTdHJpbmcgcGF0aDsKCiAgLyoqCiAgICogV2hldGhlciB0byBvbmx5IHNlbmQgdGhpcyBjb29raWUgb24gc2VjdXJlIGNvbm5lY3Rpb25zLgogICAqLwogIGJvb2wgc2VjdXJlOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBjb29raWUgaXMgb25seSBzZW50IGluIHRoZSBIVFRQIHJlcXVlc3QgYW5kIGlzIG5vdCBtYWRlCiAgICogYXZhaWxhYmxlIHRvIGNsaWVudCBzaWRlIHNjcmlwdHMuCiAgICovCiAgYm9vbCBodHRwT25seTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBjb29raWUgc2V0dGluZyB0aGUgbmFtZSBhbmQgdmFsdWUuCiAgICoKICAgKiBbbmFtZV0gYW5kIFt2YWx1ZV0gbXVzdCBiZSBjb21wb3NlZCBvZiB2YWxpZCBjaGFyYWN0ZXJzIGFjY29yZGluZyB0byBSRkMKICAgKiA2MjY1LgogICAqCiAgICogQnkgZGVmYXVsdCB0aGUgdmFsdWUgb2YgYGh0dHBPbmx5YCB3aWxsIGJlIHNldCB0byBgdHJ1ZWAuCiAgICovCiAgZmFjdG9yeSBDb29raWUoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgPT4gbmV3IF9Db29raWUobmFtZSwgdmFsdWUpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGNvb2tpZSBieSBwYXJzaW5nIGEgaGVhZGVyIHZhbHVlIGZyb20gYSAnc2V0LWNvb2tpZScKICAgKiBoZWFkZXIuCiAgICovCiAgZmFjdG9yeSBDb29raWUuZnJvbVNldENvb2tpZVZhbHVlKFN0cmluZyB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBfQ29va2llLmZyb21TZXRDb29raWVWYWx1ZSh2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb29raWUuIFRoZQogICAqIHN0cmluZyByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZCBmb3IgZm9yIHNldHRpbmcgdGhlIENvb2tpZSBvcgogICAqICdzZXQtY29va2llJyBoZWFkZXJzCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KCi8qKgogKiBBIHNlcnZlci1zaWRlIG9iamVjdAogKiB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50IG9mIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBhbiBIVFRQIHJlcXVlc3QuCiAqCiAqIF9fTm90ZV9fOiBDaGVjayBvdXQgdGhlCiAqIFtodHRwX3NlcnZlcl0oaHR0cHM6Ly9wdWIuZGFydGxhbmcub3JnL3BhY2thZ2VzL2h0dHBfc2VydmVyKQogKiBwYWNrYWdlLCB3aGljaCBtYWtlcyB3b3JraW5nIHdpdGggdGhlIGxvdy1sZXZlbAogKiBkYXJ0OmlvIEhUVFAgc2VydmVyIHN1YnN5c3RlbSBlYXNpZXIuCiAqCiAqIGBIdHRwUmVxdWVzdGAgb2JqZWN0cyBhcmUgZ2VuZXJhdGVkIGJ5IGFuIFtIdHRwU2VydmVyXSwKICogd2hpY2ggbGlzdGVucyBmb3IgSFRUUCByZXF1ZXN0cyBvbiBhIHNwZWNpZmljIGhvc3QgYW5kIHBvcnQuCiAqIEZvciBlYWNoIHJlcXVlc3QgcmVjZWl2ZWQsIHRoZSBIdHRwU2VydmVyLCB3aGljaCBpcyBhIFtTdHJlYW1dLAogKiBnZW5lcmF0ZXMgYW4gYEh0dHBSZXF1ZXN0YCBvYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIHN0cmVhbS4KICoKICogQW4gYEh0dHBSZXF1ZXN0YCBvYmplY3QgZGVsaXZlcnMgdGhlIGJvZHkgY29udGVudCBvZiB0aGUgcmVxdWVzdAogKiBhcyBhIHN0cmVhbSBvZiBieXRlIGxpc3RzLgogKiBUaGUgb2JqZWN0IGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QsCiAqIHN1Y2ggYXMgdGhlIG1ldGhvZCwgVVJJLCBhbmQgaGVhZGVycy4KICoKICogSW4gdGhlIGZvbGxvd2luZyBjb2RlLCBhbiBIdHRwU2VydmVyIGxpc3RlbnMKICogZm9yIEhUVFAgcmVxdWVzdHMuIFdoZW4gdGhlIHNlcnZlciByZWNlaXZlcyBhIHJlcXVlc3QsCiAqIGl0IHVzZXMgdGhlIEh0dHBSZXF1ZXN0IG9iamVjdCdzIGBtZXRob2RgIHByb3BlcnR5IHRvIGRpc3BhdGNoIHJlcXVlc3RzLgogKgogKiAgICAgZmluYWwgSE9TVCA9IEludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjQ7CiAqICAgICBmaW5hbCBQT1JUID0gODA7CiAqCiAqICAgICBIdHRwU2VydmVyLmJpbmQoSE9TVCwgUE9SVCkudGhlbigoX3NlcnZlcikgewogKiAgICAgICBfc2VydmVyLmxpc3RlbigoSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogKiAgICAgICAgIHN3aXRjaCAocmVxdWVzdC5tZXRob2QpIHsKICogICAgICAgICAgIGNhc2UgJ0dFVCc6CiAqICAgICAgICAgICAgIGhhbmRsZUdldFJlcXVlc3QocmVxdWVzdCk7CiAqICAgICAgICAgICAgIGJyZWFrOwogKiAgICAgICAgICAgY2FzZSAnUE9TVCc6CiAqICAgICAgICAgICAgIC4uLgogKiAgICAgICAgIH0KICogICAgICAgfSwKICogICAgICAgb25FcnJvcjogaGFuZGxlRXJyb3IpOyAgICAvLyBsaXN0ZW4oKSBmYWlsZWQuCiAqICAgICB9KS5jYXRjaEVycm9yKGhhbmRsZUVycm9yKTsKICoKICogQW4gSHR0cFJlcXVlc3Qgb2JqZWN0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYXNzb2NpYXRlZCBbSHR0cFJlc3BvbnNlXQogKiBvYmplY3QgdGhyb3VnaCB0aGUgcmVzcG9uc2UgcHJvcGVydHkuCiAqIFRoZSBzZXJ2ZXIgd3JpdGVzIGl0cyByZXNwb25zZSB0byB0aGUgYm9keSBvZiB0aGUgSHR0cFJlc3BvbnNlIG9iamVjdC4KICogRm9yIGV4YW1wbGUsIGhlcmUncyBhIGZ1bmN0aW9uIHRoYXQgcmVzcG9uZHMgdG8gYSByZXF1ZXN0OgogKgogKiAgICAgdm9pZCBoYW5kbGVHZXRSZXF1ZXN0KEh0dHBSZXF1ZXN0IHJlcSkgewogKiAgICAgICBIdHRwUmVzcG9uc2UgcmVzID0gcmVxLnJlc3BvbnNlOwogKiAgICAgICByZXMud3JpdGUoJ1JlY2VpdmVkIHJlcXVlc3QgJHtyZXEubWV0aG9kfTogJHtyZXEudXJpLnBhdGh9Jyk7CiAqICAgICAgIHJlcy5jbG9zZSgpOwogKiAgICAgfQogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cFJlcXVlc3QgaW1wbGVtZW50cyBTdHJlYW08VWludDhMaXN0PiB7CiAgLyoqCiAgICogVGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0IGJvZHkuCiAgICoKICAgKiBJZiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBib2R5IGlzIG5vdCBrbm93biBpbiBhZHZhbmNlLAogICAqIHRoaXMgdmFsdWUgaXMgLTEuCiAgICovCiAgaW50IGdldCBjb250ZW50TGVuZ3RoOwoKICAvKioKICAgKiBUaGUgbWV0aG9kLCBzdWNoIGFzICdHRVQnIG9yICdQT1NUJywgZm9yIHRoZSByZXF1ZXN0LgogICAqLwogIFN0cmluZyBnZXQgbWV0aG9kOwoKICAvKioKICAgKiBUaGUgVVJJIGZvciB0aGUgcmVxdWVzdC4KICAgKgogICAqIFRoaXMgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZQogICAqIHBhdGggYW5kIHF1ZXJ5IHN0cmluZyBmb3IgdGhlIHJlcXVlc3QuCiAgICovCiAgVXJpIGdldCB1cmk7CgogIC8qKgogICAqIFRoZSByZXF1ZXN0ZWQgVVJJIGZvciB0aGUgcmVxdWVzdC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBVUkkgaXMgcmVjb25zdHJ1Y3RlZCBieSB1c2luZyBodHRwLWhlYWRlciBmaWVsZHMsIHRvIGFjY2VzcwogICAqIG90aGVyd2lzZSBsb3N0IGluZm9ybWF0aW9uLCBlLmcuIGhvc3QgYW5kIHNjaGVtZS4KICAgKgogICAqIFRvIHJlY29uc3RydWN0IHRoZSBzY2hlbWUsIGZpcnN0ICdYLUZvcndhcmRlZC1Qcm90bycgaXMgY2hlY2tlZCwgYW5kIHRoZW4KICAgKiBmYWxsaW5nIGJhY2sgdG8gc2VydmVyIHR5cGUuCiAgICoKICAgKiBUbyByZWNvbnN0cnVjdCB0aGUgaG9zdCwgZmlyc3QgJ1gtRm9yd2FyZGVkLUhvc3QnIGlzIGNoZWNrZWQsIHRoZW4gJ0hvc3QnCiAgICogYW5kIGZpbmFsbHkgY2FsbGluZyBiYWNrIHRvIHNlcnZlci4KICAgKi8KICBVcmkgZ2V0IHJlcXVlc3RlZFVyaTsKCiAgLyoqCiAgICogVGhlIHJlcXVlc3QgaGVhZGVycy4KICAgKgogICAqIFRoZSByZXR1cm5lZCBbSHR0cEhlYWRlcnNdIGFyZSBpbW11dGFibGUuCiAgICovCiAgSHR0cEhlYWRlcnMgZ2V0IGhlYWRlcnM7CgogIC8qKgogICAqIFRoZSBjb29raWVzIGluIHRoZSByZXF1ZXN0LCBmcm9tIHRoZSBDb29raWUgaGVhZGVycy4KICAgKi8KICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXM7CgogIC8qKgogICAqIFRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgc2lnbmFsZWQgYnkgdGhlIGNsaWVudC4KICAgKi8KICBib29sIGdldCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogVGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBvZiB0aGUgY2xpZW50IG1ha2luZyB0aGUgcmVxdWVzdC4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgbnVsbCBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgYSBzZWN1cmUgVExTIG9yIFNTTCBjb25uZWN0aW9uLAogICAqIG9yIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmVxdWVzdCBhIGNsaWVudCBjZXJ0aWZpY2F0ZSwgb3IgaWYgdGhlIGNsaWVudAogICAqIGRvZXMgbm90IHByb3ZpZGUgb25lLgogICAqLwogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgY2VydGlmaWNhdGU7CgogIC8qKgogICAqIFRoZSBzZXNzaW9uIGZvciB0aGUgZ2l2ZW4gcmVxdWVzdC4KICAgKgogICAqIElmIHRoZSBzZXNzaW9uIGlzCiAgICogYmVpbmcgaW5pdGlhbGl6ZWQgYnkgdGhpcyBjYWxsLCBbOmlzTmV3Ol0gaXMgdHJ1ZSBmb3IgdGhlIHJldHVybmVkCiAgICogc2Vzc2lvbi4KICAgKiBTZWUgW0h0dHBTZXJ2ZXIuc2Vzc2lvblRpbWVvdXRdIG9uIGhvdyB0byBjaGFuZ2UgZGVmYXVsdCB0aW1lb3V0LgogICAqLwogIEh0dHBTZXNzaW9uIGdldCBzZXNzaW9uOwoKICAvKioKICAgKiBUaGUgSFRUUCBwcm90b2NvbCB2ZXJzaW9uIHVzZWQgaW4gdGhlIHJlcXVlc3QsCiAgICogZWl0aGVyICIxLjAiIG9yICIxLjEiLgogICAqLwogIFN0cmluZyBnZXQgcHJvdG9jb2xWZXJzaW9uOwoKICAvKioKICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCiAgICoKICAgKiBSZXR1cm5zIFs6bnVsbDpdIGlmIHRoZSBzb2NrZXQgaXMgbm90IGF2YWlsYWJsZS4KICAgKi8KICBIdHRwQ29ubmVjdGlvbkluZm8gZ2V0IGNvbm5lY3Rpb25JbmZvOwoKICAvKioKICAgKiBUaGUgW0h0dHBSZXNwb25zZV0gb2JqZWN0LCB1c2VkIGZvciBzZW5kaW5nIGJhY2sgdGhlIHJlc3BvbnNlIHRvIHRoZQogICAqIGNsaWVudC4KICAgKgogICAqIElmIHRoZSBbY29udGVudExlbmd0aF0gb2YgdGhlIGJvZHkgaXNuJ3QgMCwgYW5kIHRoZSBib2R5IGlzbid0IGJlaW5nIHJlYWQsCiAgICogYW55IHdyaXRlIGNhbGxzIG9uIHRoZSBbSHR0cFJlc3BvbnNlXSBhdXRvbWF0aWNhbGx5IGRyYWluIHRoZSByZXF1ZXN0CiAgICogYm9keS4KICAgKi8KICBIdHRwUmVzcG9uc2UgZ2V0IHJlc3BvbnNlOwp9CgovKioKICogQW4gSFRUUCByZXNwb25zZSwgd2hpY2ggcmV0dXJucyB0aGUgaGVhZGVycyBhbmQgZGF0YQogKiBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCBpbiByZXNwb25zZSB0byBhbiBIVFRQIHJlcXVlc3QuCiAqCiAqIEV2ZXJ5IEh0dHBSZXF1ZXN0IG9iamVjdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGFzc29jaWF0ZWQgW0h0dHBSZXNwb25zZV0KICogb2JqZWN0IHRocm91Z2ggdGhlIGByZXNwb25zZWAgcHJvcGVydHkuCiAqIFRoZSBzZXJ2ZXIgc2VuZHMgaXRzIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQgYnkgd3JpdGluZyB0byB0aGUKICogSHR0cFJlc3BvbnNlIG9iamVjdC4KICoKICogIyMgV3JpdGluZyB0aGUgcmVzcG9uc2UKICoKICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFtJT1NpbmtdLgogKiBBZnRlciB0aGUgaGVhZGVyIGhhcyBiZWVuIHNldCB1cCwgdGhlIG1ldGhvZHMKICogZnJvbSBJT1NpbmssIHN1Y2ggYXMgYHdyaXRlbG4oKWAsIGNhbiBiZSB1c2VkIHRvIHdyaXRlCiAqIHRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlLgogKiBVc2UgdGhlIGBjbG9zZSgpYCBtZXRob2QgdG8gY2xvc2UgdGhlIHJlc3BvbnNlIGFuZCBzZW5kIGl0IHRvIHRoZSBjbGllbnQuCiAqCiAqICAgICBzZXJ2ZXIubGlzdGVuKChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoJ0hlbGxvLCB3b3JsZCEnKTsKICogICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogKiAgICAgfSk7CiAqCiAqIFdoZW4gb25lIG9mIHRoZSBJT1NpbmsgbWV0aG9kcyBpcyB1c2VkIGZvciB0aGUKICogZmlyc3QgdGltZSwgdGhlIHJlcXVlc3QgaGVhZGVyIGlzIHNlbnQuIENhbGxpbmcgYW55IG1ldGhvZHMgdGhhdAogKiBjaGFuZ2UgdGhlIGhlYWRlciBhZnRlciBpdCBpcyBzZW50IHRocm93cyBhbiBleGNlcHRpb24uCiAqCiAqICMjIFNldHRpbmcgdGhlIGhlYWRlcnMKICoKICogVGhlIEh0dHBSZXNwb25zZSBvYmplY3QgaGFzIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgZm9yIHNldHRpbmcgdXAKICogdGhlIEhUVFAgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2UuCiAqIFdoZW4gd3JpdGluZyBzdHJpbmcgZGF0YSB0aHJvdWdoIHRoZSBJT1NpbmssIHRoZSBlbmNvZGluZyB1c2VkCiAqIGlzIGRldGVybWluZWQgZnJvbSB0aGUgImNoYXJzZXQiIHBhcmFtZXRlciBvZiB0aGUKICogIkNvbnRlbnQtVHlwZSIgaGVhZGVyLgogKgogKiAgICAgSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gLi4uCiAqICAgICByZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRUeXBlCiAqICAgICAgICAgPSBuZXcgQ29udGVudFR5cGUoImFwcGxpY2F0aW9uIiwgImpzb24iLCBjaGFyc2V0OiAidXRmLTgiKTsKICogICAgIHJlc3BvbnNlLndyaXRlKC4uLik7ICAvLyBTdHJpbmdzIHdyaXR0ZW4gd2lsbCBiZSBVVEYtOCBlbmNvZGVkLgogKgogKiBJZiBubyBjaGFyc2V0IGlzIHByb3ZpZGVkIHRoZSBkZWZhdWx0IG9mIElTTy04ODU5LTEgKExhdGluIDEpIHdpbGwKICogYmUgdXNlZC4KICoKICogICAgIEh0dHBSZXNwb25zZSByZXNwb25zZSA9IC4uLgogKiAgICAgcmVzcG9uc2UuaGVhZGVycy5hZGQoSHR0cEhlYWRlcnMuY29udGVudFR5cGVIZWFkZXIsICJ0ZXh0L3BsYWluIik7CiAqICAgICByZXNwb25zZS53cml0ZSguLi4pOyAgLy8gU3RyaW5ncyB3cml0dGVuIHdpbGwgYmUgSVNPLTg4NTktMSBlbmNvZGVkLgogKgogKiBBbiBleGNlcHRpb24gaXMgdGhyb3duIGlmIHlvdSB1c2UgdGhlIGB3cml0ZSgpYCBtZXRob2QKICogd2hpbGUgYW4gdW5zdXBwb3J0ZWQgY29udGVudC10eXBlIGlzIHNldC4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBSZXNwb25zZSBpbXBsZW1lbnRzIElPU2luayB7CiAgLy8gVE9ETyhham9obnNlbik6IEFkZCBkb2N1bWVudGF0aW9uIG9mIGhvdyB0byBwaXBlIGEgZmlsZSB0byB0aGUgcmVzcG9uc2UuCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgY29udGVudCBsZW5ndGggb2YgdGhlIHJlc3BvbnNlLiBJZiB0aGUgc2l6ZSBvZgogICAqIHRoZSByZXNwb25zZSBpcyBub3Qga25vd24gaW4gYWR2YW5jZSBzZXQgdGhlIGNvbnRlbnQgbGVuZ3RoIHRvCiAgICogLTEsIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQgaWYgbm90IHNldC4KICAgKi8KICBpbnQgY29udGVudExlbmd0aDsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgc3RhdHVzIGNvZGUuIEFueSBpbnRlZ2VyIHZhbHVlIGlzIGFjY2VwdGVkLiBGb3IKICAgKiB0aGUgb2ZmaWNpYWwgSFRUUCBzdGF0dXMgY29kZXMgdXNlIHRoZSBmaWVsZHMgZnJvbQogICAqIFtIdHRwU3RhdHVzXS4gSWYgbm8gc3RhdHVzIGNvZGUgaXMgZXhwbGljaXRseSBzZXQgdGhlIGRlZmF1bHQKICAgKiB2YWx1ZSBbSHR0cFN0YXR1cy5va10gaXMgdXNlZC4KICAgKgogICAqIFRoZSBzdGF0dXMgY29kZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGJvZHkgaXMgd3JpdHRlbgogICAqIHRvLiBTZXR0aW5nIHRoZSBzdGF0dXMgY29kZSBhZnRlciB3cml0aW5nIHRvIHRoZSByZXNwb25zZSBib2R5IG9yCiAgICogY2xvc2luZyB0aGUgcmVzcG9uc2Ugd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgc3RhdHVzQ29kZTsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgcmVhc29uIHBocmFzZS4gSWYgbm8gcmVhc29uIHBocmFzZSBpcyBleHBsaWNpdGx5CiAgICogc2V0IGEgZGVmYXVsdCByZWFzb24gcGhyYXNlIGlzIHByb3ZpZGVkLgogICAqCiAgICogVGhlIHJlYXNvbiBwaHJhc2UgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBib2R5IGlzIHdyaXR0ZW4KICAgKiB0by4gU2V0dGluZyB0aGUgcmVhc29uIHBocmFzZSBhZnRlciB3cml0aW5nIHRvIHRoZSByZXNwb25zZSBib2R5CiAgICogb3IgY2xvc2luZyB0aGUgcmVzcG9uc2Ugd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBTdHJpbmcgcmVhc29uUGhyYXNlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUuIFRoZSBpbml0aWFsIHZhbHVlCiAgICogb2YgdGhpcyBwcm9wZXJ0eSBpcyB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIHN0YXRlIGZyb20gdGhlCiAgICogcmVxdWVzdC4KICAgKi8KICBib29sIHBlcnNpc3RlbnRDb25uZWN0aW9uOwoKICAvKioKICAgKiBTZXQgYW5kIGdldCB0aGUgW2RlYWRsaW5lXSBmb3IgdGhlIHJlc3BvbnNlLiBUaGUgZGVhZGxpbmUgaXMgdGltZWQgZnJvbSB0aGUKICAgKiB0aW1lIGl0J3Mgc2V0LiBTZXR0aW5nIGEgbmV3IGRlYWRsaW5lIHdpbGwgb3ZlcnJpZGUgYW55IHByZXZpb3VzIGRlYWRsaW5lLgogICAqIFdoZW4gYSBkZWFkbGluZSBpcyBleGNlZWRlZCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgY2xvc2VkIGFuZCBhbnkgZnVydGhlcgogICAqIGRhdGEgaWdub3JlZC4KICAgKgogICAqIFRvIGRpc2FibGUgYSBkZWFkbGluZSwgc2V0IHRoZSBbZGVhZGxpbmVdIHRvIGBudWxsYC4KICAgKgogICAqIFRoZSBbZGVhZGxpbmVdIGlzIGBudWxsYCBieSBkZWZhdWx0LgogICAqLwogIER1cmF0aW9uIGRlYWRsaW5lOwoKICAvKioKICAgKiBHZXRzIG9yIHNldHMgaWYgdGhlIFtIdHRwUmVzcG9uc2VdIHNob3VsZCBidWZmZXIgb3V0cHV0LgogICAqCiAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuCiAgICoKICAgKiBfX05vdGVfXzogRGlzYWJsaW5nIGJ1ZmZlcmluZyBvZiB0aGUgb3V0cHV0IGNhbiByZXN1bHQgaW4gdmVyeSBwb29yCiAgICogcGVyZm9ybWFuY2UsIHdoZW4gd3JpdGluZyBtYW55IHNtYWxsIGNodW5rcy4KICAgKi8KICBib29sIGJ1ZmZlck91dHB1dDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVycy4KICAgKgogICAqIFRoZSByZXNwb25zZSBoZWFkZXJzIGNhbiBiZSBtb2RpZmllZCB1bnRpbCB0aGUgcmVzcG9uc2UgYm9keSBpcwogICAqIHdyaXR0ZW4gdG8gb3IgY2xvc2VkLiBBZnRlciB0aGF0IHRoZXkgYmVjb21lIGltbXV0YWJsZS4KICAgKi8KICBIdHRwSGVhZGVycyBnZXQgaGVhZGVyczsKCiAgLyoqCiAgICogQ29va2llcyB0byBzZXQgaW4gdGhlIGNsaWVudCAoaW4gdGhlICdzZXQtY29va2llJyBoZWFkZXIpLgogICAqLwogIExpc3Q8Q29va2llPiBnZXQgY29va2llczsKCiAgLyoqCiAgICogUmVzcG9uZCB3aXRoIGEgcmVkaXJlY3QgdG8gW2xvY2F0aW9uXS4KICAgKgogICAqIFRoZSBVUkkgaW4gW2xvY2F0aW9uXSBzaG91bGQgYmUgYWJzb2x1dGUsIGJ1dCB0aGVyZSBhcmUgbm8gY2hlY2tzCiAgICogdG8gZW5mb3JjZSB0aGF0LgogICAqCiAgICogQnkgZGVmYXVsdCB0aGUgSFRUUCBzdGF0dXMgY29kZSBgSHR0cFN0YXR1cy5tb3ZlZFRlbXBvcmFyaWx5YAogICAqIChgMzAyYCkgaXMgdXNlZCBmb3IgdGhlIHJlZGlyZWN0LCBidXQgYW4gYWx0ZXJuYXRpdmUgb25lIGNhbiBiZQogICAqIHNwZWNpZmllZCB1c2luZyB0aGUgW3N0YXR1c10gYXJndW1lbnQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCB3aWxsIGFsc28gY2FsbCBgY2xvc2VgLCBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBpcwogICAqIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYGNsb3NlYC4KICAgKi8KICBGdXR1cmUgcmVkaXJlY3QoVXJpIGxvY2F0aW9uLCB7aW50IHN0YXR1czogSHR0cFN0YXR1cy5tb3ZlZFRlbXBvcmFyaWx5fSk7CgogIC8qKgogICAqIERldGFjaGVzIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBmcm9tIHRoZSBIVFRQIHNlcnZlci4gV2hlbiB0aGUKICAgKiBzb2NrZXQgaXMgZGV0YWNoZWQgdGhlIEhUVFAgc2VydmVyIHdpbGwgbm8gbG9uZ2VyIHBlcmZvcm0gYW55CiAgICogb3BlcmF0aW9ucyBvbiBpdC4KICAgKgogICAqIFRoaXMgaXMgbm9ybWFsbHkgdXNlZCB3aGVuIGEgSFRUUCB1cGdyYWRlIHJlcXVlc3QgaXMgcmVjZWl2ZWQKICAgKiBhbmQgdGhlIGNvbW11bmljYXRpb24gc2hvdWxkIGNvbnRpbnVlIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wuCiAgICoKICAgKiBJZiBbd3JpdGVIZWFkZXJzXSBpcyBgdHJ1ZWAsIHRoZSBzdGF0dXMgbGluZSBhbmQgW2hlYWRlcnNdIHdpbGwgYmUgd3JpdHRlbgogICAqIHRvIHRoZSBzb2NrZXQgYmVmb3JlIGl0J3MgZGV0YWNoZWQuIElmIGBmYWxzZWAsIHRoZSBzb2NrZXQgaXMgZGV0YWNoZWQKICAgKiBpbW1lZGlhdGVseSwgd2l0aG91dCBhbnkgZGF0YSB3cml0dGVuIHRvIHRoZSBzb2NrZXQuIERlZmF1bHQgaXMgYHRydWVgLgogICAqLwogIEZ1dHVyZTxTb2NrZXQ+IGRldGFjaFNvY2tldCh7Ym9vbCB3cml0ZUhlYWRlcnM6IHRydWV9KTsKCiAgLyoqCiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uIFJldHVybnMgWzpudWxsOl0gaWYgdGhlCiAgICogc29ja2V0IGlzIG5vdCBhdmFpbGFibGUuCiAgICovCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbzsKfQoKLyoqCiAqIEEgY2xpZW50IHRoYXQgcmVjZWl2ZXMgY29udGVudCwgc3VjaCBhcyB3ZWIgcGFnZXMsIGZyb20KICogYSBzZXJ2ZXIgdXNpbmcgdGhlIEhUVFAgcHJvdG9jb2wuCiAqCiAqIEh0dHBDbGllbnQgY29udGFpbnMgYSBudW1iZXIgb2YgbWV0aG9kcyB0byBzZW5kIGFuIFtIdHRwQ2xpZW50UmVxdWVzdF0KICogdG8gYW4gSHR0cCBzZXJ2ZXIgYW5kIHJlY2VpdmUgYW4gW0h0dHBDbGllbnRSZXNwb25zZV0gYmFjay4KICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIHRoZSBbZ2V0XSwgW2dldFVybF0sIFtwb3N0XSwgYW5kIFtwb3N0VXJsXSBtZXRob2RzCiAqIGZvciBHRVQgYW5kIFBPU1QgcmVxdWVzdHMsIHJlc3BlY3RpdmVseS4KICoKICogIyMgTWFraW5nIGEgc2ltcGxlIEdFVCByZXF1ZXN0OiBhbiBleGFtcGxlCiAqCiAqIEEgYGdldFVybGAgcmVxdWVzdCBpcyBhIHR3by1zdGVwIHByb2Nlc3MsIHRyaWdnZXJlZCBieSB0d28gW0Z1dHVyZV1zLgogKiBXaGVuIHRoZSBmaXJzdCBmdXR1cmUgY29tcGxldGVzIHdpdGggYSBbSHR0cENsaWVudFJlcXVlc3RdLCB0aGUgdW5kZXJseWluZwogKiBuZXR3b3JrIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQsIGJ1dCBubyBkYXRhIGhhcyBiZWVuIHNlbnQuCiAqIEluIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGZpcnN0IGZ1dHVyZSwgdGhlIEhUVFAgaGVhZGVycyBhbmQgYm9keQogKiBjYW4gYmUgc2V0IG9uIHRoZSByZXF1ZXN0LiBFaXRoZXIgdGhlIGZpcnN0IHdyaXRlIHRvIHRoZSByZXF1ZXN0IG9iamVjdAogKiBvciBhIGNhbGwgdG8gW2Nsb3NlXSBzZW5kcyB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyLgogKgogKiBXaGVuIHRoZSBIVFRQIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciwKICogdGhlIHNlY29uZCBmdXR1cmUsIHdoaWNoIGlzIHJldHVybmVkIGJ5IGNsb3NlLAogKiBjb21wbGV0ZXMgd2l0aCBhbiBbSHR0cENsaWVudFJlc3BvbnNlXSBvYmplY3QuCiAqIFRoaXMgb2JqZWN0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGVhZGVycyBhbmQgYm9keSBvZiB0aGUgcmVzcG9uc2UuCiAqIFRoZSBib2R5IGlzIGF2YWlsYWJsZSBhcyBhIHN0cmVhbSBpbXBsZW1lbnRlZCBieSBIdHRwQ2xpZW50UmVzcG9uc2UuCiAqIElmIGEgYm9keSBpcyBwcmVzZW50LCBpdCBtdXN0IGJlIHJlYWQuIE90aGVyd2lzZSwgaXQgbGVhZHMgdG8gcmVzb3VyY2UKICogbGVha3MuIENvbnNpZGVyIHVzaW5nIFtIdHRwQ2xpZW50UmVzcG9uc2UuZHJhaW5dIGlmIHRoZSBib2R5IGlzIHVudXNlZC4KICoKICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICogICAgIGNsaWVudC5nZXRVcmwoVXJpLnBhcnNlKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpKQogKiAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgICAgICAvLyBPcHRpb25hbGx5IHNldCB1cCBoZWFkZXJzLi4uCiAqICAgICAgICAgICAvLyBPcHRpb25hbGx5IHdyaXRlIHRvIHRoZSByZXF1ZXN0IG9iamVjdC4uLgogKiAgICAgICAgICAgLy8gVGhlbiBjYWxsIGNsb3NlLgogKiAgICAgICAgICAgLi4uCiAqICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5jbG9zZSgpOwogKiAgICAgICAgIH0pCiAqICAgICAgICAgLnRoZW4oKEh0dHBDbGllbnRSZXNwb25zZSByZXNwb25zZSkgewogKiAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgcmVzcG9uc2UuCiAqICAgICAgICAgICAuLi4KICogICAgICAgICB9KTsKICoKICogVGhlIGZ1dHVyZSBmb3IgW0h0dHBDbGllbnRSZXF1ZXN0XSBpcyBjcmVhdGVkIGJ5IG1ldGhvZHMgc3VjaCBhcwogKiBbZ2V0VXJsXSBhbmQgW29wZW5dLgogKgogKiAjIyBIVFRQUyBjb25uZWN0aW9ucwogKgogKiBBbiBIdHRwQ2xpZW50IGNhbiBtYWtlIEhUVFBTIHJlcXVlc3RzLCBjb25uZWN0aW5nIHRvIGEgc2VydmVyIHVzaW5nCiAqIHRoZSBUTFMgKFNTTCkgc2VjdXJlIG5ldHdvcmtpbmcgcHJvdG9jb2wuIENhbGxpbmcgW2dldFVybF0gd2l0aCBhbgogKiBodHRwczogc2NoZW1lIHdpbGwgd29yayBhdXRvbWF0aWNhbGx5LCBpZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgaXMKICogc2lnbmVkIGJ5IGEgcm9vdCBDQSAoY2VydGlmaWNhdGUgYXV0aG9yaXR5KSBvbiB0aGUgZGVmYXVsdCBsaXN0IG9mCiAqIHdlbGwta25vd24gdHJ1c3RlZCBDQXMsIGNvbXBpbGVkIGJ5IE1vemlsbGEuCiAqCiAqIFRvIGFkZCBhIGN1c3RvbSB0cnVzdGVkIGNlcnRpZmljYXRlIGF1dGhvcml0eSwgb3IgdG8gc2VuZCBhIGNsaWVudAogKiBjZXJ0aWZpY2F0ZSB0byBzZXJ2ZXJzIHRoYXQgcmVxdWVzdCBvbmUsIHBhc3MgYSBbU2VjdXJpdHlDb250ZXh0XSBvYmplY3QKICogYXMgdGhlIG9wdGlvbmFsIGBjb250ZXh0YCBhcmd1bWVudCB0byB0aGUgYEh0dHBDbGllbnRgIGNvbnN0cnVjdG9yLgogKiBUaGUgZGVzaXJlZCBzZWN1cml0eSBvcHRpb25zIGNhbiBiZSBzZXQgb24gdGhlIFtTZWN1cml0eUNvbnRleHRdIG9iamVjdC4KICoKICogIyMgSGVhZGVycwogKgogKiBBbGwgSHR0cENsaWVudCByZXF1ZXN0cyBzZXQgdGhlIGZvbGxvd2luZyBoZWFkZXIgYnkgZGVmYXVsdDoKICoKICogICAgIEFjY2VwdC1FbmNvZGluZzogZ3ppcAogKgogKiBUaGlzIGFsbG93cyB0aGUgSFRUUCBzZXJ2ZXIgdG8gdXNlIGd6aXAgY29tcHJlc3Npb24gZm9yIHRoZSBib2R5IGlmCiAqIHBvc3NpYmxlLiBJZiB0aGlzIGJlaGF2aW9yIGlzIG5vdCBkZXNpcmVkIHNldCB0aGUKICogYEFjY2VwdC1FbmNvZGluZ2AgaGVhZGVyIHRvIHNvbWV0aGluZyBlbHNlLgogKiBUbyB0dXJuIG9mZiBnemlwIGNvbXByZXNzaW9uIG9mIHRoZSByZXNwb25zZSwgY2xlYXIgdGhpcyBoZWFkZXI6CiAqCiAqICAgICAgcmVxdWVzdC5oZWFkZXJzLnJlbW92ZUFsbChIdHRwSGVhZGVycy5hY2NlcHRFbmNvZGluZ0hlYWRlcikKICoKICogIyMgQ2xvc2luZyB0aGUgSHR0cENsaWVudAogKgogKiBUaGUgSHR0cENsaWVudCBzdXBwb3J0cyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIGFuZCBjYWNoZXMgbmV0d29yawogKiBjb25uZWN0aW9ucyB0byByZXVzZSB0aGVtIGZvciBtdWx0aXBsZSByZXF1ZXN0cyB3aGVuZXZlcgogKiBwb3NzaWJsZS4gVGhpcyBtZWFucyB0aGF0IG5ldHdvcmsgY29ubmVjdGlvbnMgY2FuIGJlIGtlcHQgb3BlbiBmb3IKICogc29tZSB0aW1lIGFmdGVyIGEgcmVxdWVzdCBoYXMgY29tcGxldGVkLiBVc2UgSHR0cENsaWVudC5jbG9zZQogKiB0byBmb3JjZSB0aGUgSHR0cENsaWVudCBvYmplY3QgdG8gc2h1dCBkb3duIGFuZCB0byBjbG9zZSB0aGUgaWRsZQogKiBuZXR3b3JrIGNvbm5lY3Rpb25zLgogKgogKiAjIyBUdXJuaW5nIHByb3hpZXMgb24gYW5kIG9mZgogKgogKiBCeSBkZWZhdWx0IHRoZSBIdHRwQ2xpZW50IHVzZXMgdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlCiAqIGZyb20gdGhlIGVudmlyb25tZW50LCBzZWUgW2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudF0uIFRvIHR1cm4gb2ZmCiAqIHRoZSB1c2Ugb2YgcHJveGllcyBzZXQgdGhlIFtmaW5kUHJveHldIHByb3BlcnR5IHRvCiAqIFs6bnVsbDpdLgogKgogKiAgICAgSHR0cENsaWVudCBjbGllbnQgPSBuZXcgSHR0cENsaWVudCgpOwogKiAgICAgY2xpZW50LmZpbmRQcm94eSA9IG51bGw7CiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwQ2xpZW50IHsKICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRIdHRwUG9ydCA9IDgwOwogIEBEZXByZWNhdGVkKCJVc2UgZGVmYXVsdEh0dHBQb3J0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9IVFRQX1BPUlQgPSBkZWZhdWx0SHR0cFBvcnQ7CgogIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdEh0dHBzUG9ydCA9IDQ0MzsKICBARGVwcmVjYXRlZCgiVXNlIGRlZmF1bHRIdHRwc1BvcnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX0hUVFBTX1BPUlQgPSBkZWZhdWx0SHR0cHNQb3J0OwoKICAvLy8gR2V0cyBhbmQgc2V0cyB0aGUgaWRsZSB0aW1lb3V0IG9mIG5vbi1hY3RpdmUgcGVyc2lzdGVudCAoa2VlcC1hbGl2ZSkKICAvLy8gY29ubmVjdGlvbnMuCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IHNlY29uZHMuCiAgRHVyYXRpb24gaWRsZVRpbWVvdXQ7CgogIC8vLyBHZXRzIGFuZCBzZXRzIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQuCiAgLy8vCiAgLy8vIFdoZW4gY29ubmVjdGluZyB0byBhIG5ldyBob3N0IGV4Y2VlZHMgdGhpcyB0aW1lb3V0LCBhIFtTb2NrZXRFeGNlcHRpb25dCiAgLy8vIGlzIHRocm93bi4gVGhlIHRpbWVvdXQgYXBwbGllcyBvbmx5IHRvIGNvbm5lY3Rpb25zIGluaXRpYXRlZCBhZnRlciB0aGUKICAvLy8gdGltZW91dCBpcyBzZXQuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBpcyBgbnVsbGAsIHRoZSBPUyBkZWZhdWx0IHRpbWVvdXQgaXMgdXNlZC4gVGhlIGRlZmF1bHQgaXMKICAvLy8gYG51bGxgLgogIER1cmF0aW9uIGNvbm5lY3Rpb25UaW1lb3V0OwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaXZlIGNvbm5lY3Rpb25zLCB0byBhIHNpbmdsZSBob3N0LgogICAqCiAgICogSW5jcmVhc2luZyB0aGlzIG51bWJlciBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgYW5kIHRha2UgdXAgdW53YW50ZWQKICAgKiBzeXN0ZW0gcmVzb3VyY2VzLgogICAqCiAgICogVG8gZGlzYWJsZSwgc2V0IHRvIGBudWxsYC4KICAgKgogICAqIERlZmF1bHQgaXMgYG51bGxgLgogICAqLwogIGludCBtYXhDb25uZWN0aW9uc1Blckhvc3Q7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgd2hldGhlciB0aGUgYm9keSBvZiBhIHJlc3BvbnNlIHdpbGwgYmUgYXV0b21hdGljYWxseQogICAqIHVuY29tcHJlc3NlZC4KICAgKgogICAqIFRoZSBib2R5IG9mIGFuIEhUVFAgcmVzcG9uc2UgY2FuIGJlIGNvbXByZXNzZWQuIEluIG1vc3QKICAgKiBzaXR1YXRpb25zIHByb3ZpZGluZyB0aGUgdW4tY29tcHJlc3NlZCBib2R5IGlzIG1vc3QKICAgKiBjb252ZW5pZW50LiBUaGVyZWZvcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gdW4tY29tcHJlc3MgdGhlCiAgICogYm9keS4gSG93ZXZlciBpbiBzb21lIHNpdHVhdGlvbnMgKGUuZy4gaW1wbGVtZW50aW5nIGEgdHJhbnNwYXJlbnQKICAgKiBwcm94eSkga2VlcGluZyB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBpcyByZXF1aXJlZC4KICAgKgogICAqIE5PVEU6IEhlYWRlcnMgaW4gdGhlIHJlc3BvbnNlIGFyZSBuZXZlciBtb2RpZmllZC4gVGhpcyBtZWFucwogICAqIHRoYXQgd2hlbiBhdXRvbWF0aWMgdW4tY29tcHJlc3Npb24gaXMgdHVybmVkIG9uIHRoZSB2YWx1ZSBvZiB0aGUKICAgKiBoZWFkZXIgYENvbnRlbnQtTGVuZ3RoYCB3aWxsIHJlZmxlY3QgdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwKICAgKiBjb21wcmVzc2VkIGJvZHkuIExpa2V3aXNlIHRoZSBoZWFkZXIgYENvbnRlbnQtRW5jb2RpbmdgIHdpbGwgYWxzbwogICAqIGhhdmUgdGhlIG9yaWdpbmFsIHZhbHVlIGluZGljYXRpbmcgY29tcHJlc3Npb24uCiAgICoKICAgKiBOT1RFOiBBdXRvbWF0aWMgdW4tY29tcHJlc3Npb24gaXMgb25seSBwZXJmb3JtZWQgaWYgdGhlCiAgICogYENvbnRlbnQtRW5jb2RpbmdgIGhlYWRlciB2YWx1ZSBpcyBgZ3ppcGAuCiAgICoKICAgKiBUaGlzIHZhbHVlIGFmZmVjdHMgYWxsIHJlc3BvbnNlcyBwcm9kdWNlZCBieSB0aGlzIGNsaWVudCBhZnRlciB0aGUKICAgKiB2YWx1ZSBpcyBjaGFuZ2VkLgogICAqCiAgICogVG8gZGlzYWJsZSwgc2V0IHRvIGBmYWxzZWAuCiAgICoKICAgKiBEZWZhdWx0IGlzIGB0cnVlYC4KICAgKi8KICBib29sIGF1dG9VbmNvbXByZXNzOwoKICAvLy8gR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYFVzZXItQWdlbnRgIGhlYWRlciBmb3IgYWxsIHJlcXVlc3RzCiAgLy8vIGdlbmVyYXRlZCBieSB0aGlzIFtIdHRwQ2xpZW50XS4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYERhcnQvPHZlcnNpb24+IChkYXJ0OmlvKWAuCiAgLy8vCiAgLy8vIElmIHRoZSB1c2VyQWdlbnQgaXMgc2V0IHRvIGBudWxsYCwgbm8gZGVmYXVsdCBgVXNlci1BZ2VudGAgaGVhZGVyIHdpbGwgYmUKICAvLy8gYWRkZWQgdG8gZWFjaCByZXF1ZXN0LgogIFN0cmluZyB1c2VyQWdlbnQ7CgogIGZhY3RvcnkgSHR0cENsaWVudCh7U2VjdXJpdHlDb250ZXh0IGNvbnRleHR9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IEh0dHBPdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9IdHRwQ2xpZW50KGNvbnRleHQpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5jcmVhdGVIdHRwQ2xpZW50KGNvbnRleHQpOwogIH0KCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24uCiAgICoKICAgKiBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIGlzIHNwZWNpZmllZCBpbiBbbWV0aG9kXSwgdGhlIHNlcnZlciBpcwogICAqIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoIChpbmNsdWRpbmcKICAgKiBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcgW3BhdGhdLgogICAqIFRoZSBwYXRoIG1heSBhbHNvIGNvbnRhaW4gYSBVUkkgZnJhZ21lbnQsIHdoaWNoIHdpbGwgYmUgaWdub3JlZC4KICAgKgogICAqIFRoZSBgSG9zdGAgaGVhZGVyIGZvciB0aGUgcmVxdWVzdCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgW2hvc3RdOltwb3J0XQogICAqIChpZiBbaG9zdF0gaXMgYW4gSVAgYWRkcmVzcywgaXQgd2lsbCBzdGlsbCBiZSB1c2VkIGluIHRoZSBgSG9zdGAgaGVhZGVyKS4KICAgKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlIFtIdHRwQ2xpZW50UmVxdWVzdF0gaW50ZXJmYWNlIGJlZm9yZQogICAqIHRoZSByZXF1ZXN0IGlzIHNlbnQuCiAgICoKICAgKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBhbgogICAqIEhUVFAgdHJhbnNhY3Rpb24sIGFuZCB0aGUgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgZnV0dXJlcywgc2VlCiAgICogdGhlIG92ZXJhbGwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNsYXNzIFtIdHRwQ2xpZW50XS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IG9wZW4oCiAgICAgIFN0cmluZyBtZXRob2QsIFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbi4KICAgKgogICAqIFRoZSBIVFRQIG1ldGhvZCBpcyBzcGVjaWZpZWQgaW4gW21ldGhvZF0gYW5kIHRoZSBVUkwgdG8gdXNlIGluCiAgICogW3VybF0uCiAgICoKICAgKiBUaGUgYEhvc3RgIGhlYWRlciBmb3IgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlCiAgICogW1VyaS5ob3N0XTpbVXJpLnBvcnRdIGZyb20gW3VybF0gKGlmIFt1cmwuaG9zdF0gaXMgYW4gSVAgYWRkcmVzcywgaXQgd2lsbAogICAqIHN0aWxsIGJlIHVzZWQgaW4gdGhlIGBIb3N0YCBoZWFkZXIpLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlCiAgICogW0h0dHBDbGllbnRSZXF1ZXN0XSBpbnRlcmZhY2UgYmVmb3JlIHRoZSByZXF1ZXN0IGlzIHNlbnQuCiAgICoKICAgKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBhbgogICAqIEhUVFAgdHJhbnNhY3Rpb24sIGFuZCB0aGUgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgZnV0dXJlcywgc2VlCiAgICogdGhlIG92ZXJhbGwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNsYXNzIFtIdHRwQ2xpZW50XS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IG9wZW5VcmwoU3RyaW5nIG1ldGhvZCwgVXJpIHVybCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBHRVQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nCiAgICogW3BhdGhdLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGdldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIEdFVCBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZ2V0VXJsKFVyaSB1cmwpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgUE9TVCBtZXRob2QuCiAgICoKICAgKiBUaGUgc2VydmVyIGlzIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoCiAgICogKGluY2x1ZGluZyBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcKICAgKiBbcGF0aF0uCiAgICoKICAgKiBTZWUgW29wZW5dIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gcG9zdChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIFBPU1QgbWV0aG9kLgogICAqCiAgICogVGhlIFVSTCB0byB1c2UgaXMgc3BlY2lmaWVkIGluIFt1cmxdLgogICAqCiAgICogU2VlIFtvcGVuVXJsXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHBvc3RVcmwoVXJpIHVybCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBQVVQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwdXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBQVVQgbWV0aG9kLgogICAqCiAgICogVGhlIFVSTCB0byB1c2UgaXMgc3BlY2lmaWVkIGluIFt1cmxdLgogICAqCiAgICogU2VlIFtvcGVuVXJsXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHB1dFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIERFTEVURSBtZXRob2QuCiAgICoKICAgKiBUaGUgc2VydmVyIGlzIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoCiAgICogKGluY2x1ZGluZyBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcgW3BhdGhdLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGRlbGV0ZShTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIERFTEVURSBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZGVsZXRlVXJsKFVyaSB1cmwpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgUEFUQ0ggbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIFBBVENIIG1ldGhvZC4KICAgKgogICAqIFRoZSBVUkwgdG8gdXNlIGlzIHNwZWNpZmllZCBpbiBbdXJsXS4KICAgKgogICAqIFNlZSBbb3BlblVybF0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIEhFQUQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBoZWFkKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgSEVBRCBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gaGVhZFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBzaXRlIGlzIHJlcXVlc3RpbmcKICAgKiBhdXRoZW50aWNhdGlvbi4gVGhlIFVSTCByZXF1ZXN0ZWQgYW5kIHRoZSBzZWN1cml0eSByZWFsbSBmcm9tIHRoZQogICAqIHNlcnZlciBhcmUgcGFzc2VkIGluIHRoZSBhcmd1bWVudHMgW3VybF0gYW5kIFtyZWFsbV0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIFtGdXR1cmVdIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB3aGVuIHRoZQogICAqIGF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHJlc29sdmVkLiBJZiBjcmVkZW50aWFscyBjYW5ub3QgYmUKICAgKiBwcm92aWRlZCB0aGUgW0Z1dHVyZV0gc2hvdWxkIGNvbXBsZXRlIHdpdGggWzpmYWxzZTpdLiBJZgogICAqIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUgdGhlIGZ1bmN0aW9uIHNob3VsZCBhZGQgdGhlc2UgdXNpbmcKICAgKiBbYWRkQ3JlZGVudGlhbHNdIGJlZm9yZSBjb21wbGV0aW5nIHRoZSBbRnV0dXJlXSB3aXRoIHRoZSB2YWx1ZQogICAqIFs6dHJ1ZTpdLgogICAqCiAgICogSWYgdGhlIFtGdXR1cmVdIGNvbXBsZXRlcyB3aXRoIFs6dHJ1ZTpdIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0cmllZAogICAqIHVzaW5nIHRoZSB1cGRhdGVkIGNyZWRlbnRpYWxzLCBob3dldmVyLCB0aGUgcmV0cmllZCByZXF1ZXN0IHdpbGwgbm90CiAgICogY2FycnkgdGhlIG9yaWdpbmFsIHJlcXVlc3QgcGF5bG9hZC4gT3RoZXJ3aXNlIHJlc3BvbnNlIHByb2Nlc3Npbmcgd2lsbAogICAqIGNvbnRpbnVlIG5vcm1hbGx5LgogICAqCiAgICogSWYgaXQgaXMga25vd24gdGhhdCB0aGUgcmVtb3RlIHNlcnZlciByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiBmb3IgYWxsCiAgICogcmVxdWVzdHMsIGl0IGlzIGFkdmlzYWJsZSB0byB1c2UgW2FkZENyZWRlbnRpYWxzXSBkaXJlY3RseSwgb3IgbWFudWFsbHkKICAgKiBzZXQgdGhlIGAnYXV0aG9yaXphdGlvbidgIGhlYWRlciBvbiB0aGUgcmVxdWVzdCB0byBhdm9pZCB0aGUgb3ZlcmhlYWQKICAgKiBvZiBhIGZhaWxlZCByZXF1ZXN0LCBvciBpc3N1ZXMgZHVlIHRvIG1pc3NpbmcgcmVxdWVzdCBwYXlsb2FkIG9uIHJldHJpZWQKICAgKiByZXF1ZXN0LgogICAqLwogIHNldCBhdXRoZW50aWNhdGUoRnV0dXJlPGJvb2w+IGYoVXJpIHVybCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSk7CgogIC8qKgogICAqIEFkZCBjcmVkZW50aWFscyB0byBiZSB1c2VkIGZvciBhdXRob3JpemluZyBIVFRQIHJlcXVlc3RzLgogICAqLwogIHZvaWQgYWRkQ3JlZGVudGlhbHMoVXJpIHVybCwgU3RyaW5nIHJlYWxtLCBIdHRwQ2xpZW50Q3JlZGVudGlhbHMgY3JlZGVudGlhbHMpOwoKICAvKioKICAgKiBTZXRzIHRoZSBmdW5jdGlvbiB1c2VkIHRvIHJlc29sdmUgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvcgogICAqIG9wZW5pbmcgYSBIVFRQIGNvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBbdXJsXS4gSWYgdGhpcwogICAqIGZ1bmN0aW9uIGlzIG5vdCBzZXQsIGRpcmVjdCBjb25uZWN0aW9ucyB3aWxsIGFsd2F5cyBiZSB1c2VkLgogICAqCiAgICogVGhlIHN0cmluZyByZXR1cm5lZCBieSBbZl0gbXVzdCBiZSBpbiB0aGUgZm9ybWF0IHVzZWQgYnkgYnJvd3NlcgogICAqIFBBQyAocHJveHkgYXV0by1jb25maWcpIHNjcmlwdHMuIFRoYXQgaXMgZWl0aGVyCiAgICoKICAgKiAgICAgIkRJUkVDVCIKICAgKgogICAqIGZvciB1c2luZyBhIGRpcmVjdCBjb25uZWN0aW9uIG9yCiAgICoKICAgKiAgICAgIlBST1hZIGhvc3Q6cG9ydCIKICAgKgogICAqIGZvciB1c2luZyB0aGUgcHJveHkgc2VydmVyIFs6aG9zdDpdIG9uIHBvcnQgWzpwb3J0Ol0uCiAgICoKICAgKiBBIGNvbmZpZ3VyYXRpb24gY2FuIGNvbnRhaW4gc2V2ZXJhbCBjb25maWd1cmF0aW9uIGVsZW1lbnRzCiAgICogc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMsIGUuZy4KICAgKgogICAqICAgICAiUFJPWFkgaG9zdDpwb3J0OyBQUk9YWSBob3N0Mjpwb3J0MjsgRElSRUNUIgogICAqCiAgICogVGhlIHN0YXRpYyBmdW5jdGlvbiBbZmluZFByb3h5RnJvbUVudmlyb25tZW50XSBvbiB0aGlzIGNsYXNzIGNhbgogICAqIGJlIHVzZWQgdG8gaW1wbGVtZW50IHByb3h5IHNlcnZlciByZXNvbHZpbmcgYmFzZWQgb24gZW52aXJvbm1lbnQKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgc2V0IGZpbmRQcm94eShTdHJpbmcgZihVcmkgdXJsKSk7CgogIC8qKgogICAqIEZ1bmN0aW9uIGZvciByZXNvbHZpbmcgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvciBhIEhUVFAKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIHRocm91Z2gKICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgdGFrZW4gaW50byBhY2NvdW50OgogICAqCiAgICogICAgIGh0dHBfcHJveHkKICAgKiAgICAgaHR0cHNfcHJveHkKICAgKiAgICAgbm9fcHJveHkKICAgKiAgICAgSFRUUF9QUk9YWQogICAqICAgICBIVFRQU19QUk9YWQogICAqICAgICBOT19QUk9YWQogICAqCiAgICogWzpodHRwX3Byb3h5Ol0gYW5kIFs6SFRUUF9QUk9YWTpdIHNwZWNpZnkgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yCiAgICogaHR0cDovLyB1cmxzLiBVc2UgdGhlIGZvcm1hdCBbOmhvc3RuYW1lOnBvcnQ6XS4gSWYgbm8gcG9ydCBpcyB1c2VkIGEKICAgKiBkZWZhdWx0IG9mIDEwODAgd2lsbCBiZSB1c2VkLiBJZiBib3RoIGFyZSBzZXQgdGhlIGxvd2VyIGNhc2Ugb25lIHRha2VzCiAgICogcHJlY2VkZW5jZS4KICAgKgogICAqIFs6aHR0cHNfcHJveHk6XSBhbmQgWzpIVFRQU19QUk9YWTpdIHNwZWNpZnkgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yCiAgICogaHR0cHM6Ly8gdXJscy4gVXNlIHRoZSBmb3JtYXQgWzpob3N0bmFtZTpwb3J0Ol0uIElmIG5vIHBvcnQgaXMgdXNlZCBhCiAgICogZGVmYXVsdCBvZiAxMDgwIHdpbGwgYmUgdXNlZC4gSWYgYm90aCBhcmUgc2V0IHRoZSBsb3dlciBjYXNlIG9uZSB0YWtlcwogICAqIHByZWNlZGVuY2UuCiAgICoKICAgKiBbOm5vX3Byb3h5Ol0gYW5kIFs6Tk9fUFJPWFk6XSBzcGVjaWZ5IGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiBwb3N0Zml4ZXMgb2YgaG9zdG5hbWVzIGZvciB3aGljaCBub3QgdG8gdXNlIHRoZSBwcm94eQogICAqIHNlcnZlci4gRS5nLiB0aGUgdmFsdWUgImxvY2FsaG9zdCwxMjcuMC4wLjEiIHdpbGwgbWFrZSByZXF1ZXN0cwogICAqIHRvIGJvdGggImxvY2FsaG9zdCIgYW5kICIxMjcuMC4wLjEiIG5vdCB1c2UgYSBwcm94eS4gSWYgYm90aCBhcmUgc2V0CiAgICogdGhlIGxvd2VyIGNhc2Ugb25lIHRha2VzIHByZWNlZGVuY2UuCiAgICoKICAgKiBUbyBhY3RpdmF0ZSB0aGlzIHdheSBvZiByZXNvbHZpbmcgcHJveGllcyBhc3NpZ24gdGhpcyBmdW5jdGlvbiB0bwogICAqIHRoZSBbZmluZFByb3h5XSBwcm9wZXJ0eSBvbiB0aGUgW0h0dHBDbGllbnRdLgogICAqCiAgICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgKiAgICAgY2xpZW50LmZpbmRQcm94eSA9IEh0dHBDbGllbnQuZmluZFByb3h5RnJvbUVudmlyb25tZW50OwogICAqCiAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBzeXN0ZW0gZW52aXJvbm1lbnQgeW91IGNhbiB1c2UgYQogICAqIGRpZmZlcmVudCBvbmUgYnkgd3JhcHBpbmcgdGhlIGZ1bmN0aW9uLgogICAqCiAgICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgKiAgICAgY2xpZW50LmZpbmRQcm94eSA9ICh1cmwpIHsKICAgKiAgICAgICByZXR1cm4gSHR0cENsaWVudC5maW5kUHJveHlGcm9tRW52aXJvbm1lbnQoCiAgICogICAgICAgICAgIHVybCwgZW52aXJvbm1lbnQ6IHsiaHR0cF9wcm94eSI6IC4uLiwgIm5vX3Byb3h5IjogLi4ufSk7CiAgICogICAgIH0KICAgKgogICAqIElmIGEgcHJveHkgcmVxdWlyZXMgYXV0aGVudGljYXRpb24gaXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlCiAgICogdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcyB3ZWxsLiBVc2UgdGhlIGZvcm1hdAogICAqIFs6dXNlcm5hbWU6cGFzc3dvcmRAaG9zdG5hbWU6cG9ydDpdIHRvIGluY2x1ZGUgdGhlIHVzZXJuYW1lIGFuZAogICAqIHBhc3N3b3JkLiBBbHRlcm5hdGl2ZWx5IHRoZSBBUEkgW2FkZFByb3h5Q3JlZGVudGlhbHNdIGNhbiBiZSB1c2VkCiAgICogdG8gc2V0IGNyZWRlbnRpYWxzIGZvciBwcm94aWVzIHdoaWNoIHJlcXVpcmUgYXV0aGVudGljYXRpb24uCiAgICovCiAgc3RhdGljIFN0cmluZyBmaW5kUHJveHlGcm9tRW52aXJvbm1lbnQoVXJpIHVybCwKICAgICAge01hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnR9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IEh0dHBPdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0h0dHBDbGllbnQuX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZmluZFByb3h5RnJvbUVudmlyb25tZW50KHVybCwgZW52aXJvbm1lbnQpOwogIH0KCiAgLyoqCiAgICogU2V0cyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBwcm94eSBpcyByZXF1ZXN0aW5nCiAgICogYXV0aGVudGljYXRpb24uIEluZm9ybWF0aW9uIG9uIHRoZSBwcm94eSBpbiB1c2UgYW5kIHRoZSBzZWN1cml0eQogICAqIHJlYWxtIGZvciB0aGUgYXV0aGVudGljYXRpb24gYXJlIHBhc3NlZCBpbiB0aGUgYXJndW1lbnRzIFtob3N0XSwKICAgKiBbcG9ydF0gYW5kIFtyZWFsbV0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIFtGdXR1cmVdIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB3aGVuIHRoZQogICAqIGF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHJlc29sdmVkLiBJZiBjcmVkZW50aWFscyBjYW5ub3QgYmUKICAgKiBwcm92aWRlZCB0aGUgW0Z1dHVyZV0gc2hvdWxkIGNvbXBsZXRlIHdpdGggWzpmYWxzZTpdLiBJZgogICAqIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUgdGhlIGZ1bmN0aW9uIHNob3VsZCBhZGQgdGhlc2UgdXNpbmcKICAgKiBbYWRkUHJveHlDcmVkZW50aWFsc10gYmVmb3JlIGNvbXBsZXRpbmcgdGhlIFtGdXR1cmVdIHdpdGggdGhlIHZhbHVlCiAgICogWzp0cnVlOl0uCiAgICoKICAgKiBJZiB0aGUgW0Z1dHVyZV0gY29tcGxldGVzIHdpdGggWzp0cnVlOl0gdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXRyaWVkCiAgICogdXNpbmcgdGhlIHVwZGF0ZWQgY3JlZGVudGlhbHMuIE90aGVyd2lzZSByZXNwb25zZSBwcm9jZXNzaW5nIHdpbGwKICAgKiBjb250aW51ZSBub3JtYWxseS4KICAgKi8KICBzZXQgYXV0aGVudGljYXRlUHJveHkoCiAgICAgIEZ1dHVyZTxib29sPiBmKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSk7CgogIC8qKgogICAqIEFkZCBjcmVkZW50aWFscyB0byBiZSB1c2VkIGZvciBhdXRob3JpemluZyBIVFRQIHByb3hpZXMuCiAgICovCiAgdm9pZCBhZGRQcm94eUNyZWRlbnRpYWxzKAogICAgICBTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyByZWFsbSwgSHR0cENsaWVudENyZWRlbnRpYWxzIGNyZWRlbnRpYWxzKTsKCiAgLyoqCiAgICogU2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBkZWNpZGUgd2hldGhlciB0byBhY2NlcHQgYSBzZWN1cmUgY29ubmVjdGlvbgogICAqIHdpdGggYSBzZXJ2ZXIgY2VydGlmaWNhdGUgdGhhdCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZCBieSBhbnkgb2Ygb3VyCiAgICogdHJ1c3RlZCByb290IGNlcnRpZmljYXRlcy4KICAgKgogICAqIFdoZW4gYW4gc2VjdXJlIEhUVFAgcmVxdWVzdCBpZiBtYWRlLCB1c2luZyB0aGlzIEh0dHBDbGllbnQsIGFuZCB0aGUKICAgKiBzZXJ2ZXIgcmV0dXJucyBhIHNlcnZlciBjZXJ0aWZpY2F0ZSB0aGF0IGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkLCB0aGUKICAgKiBjYWxsYmFjayBpcyBjYWxsZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgW1g1MDlDZXJ0aWZpY2F0ZV0gb2JqZWN0IGFuZAogICAqIHRoZSBzZXJ2ZXIncyBob3N0bmFtZSBhbmQgcG9ydC4gIElmIHRoZSB2YWx1ZSBvZiBbYmFkQ2VydGlmaWNhdGVDYWxsYmFja10KICAgKiBpcyBbOm51bGw6XSwgdGhlIGJhZCBjZXJ0aWZpY2F0ZSBpcyByZWplY3RlZCwgYXMgaWYgdGhlIGNhbGxiYWNrCiAgICogcmV0dXJuZWQgWzpmYWxzZTpdCiAgICoKICAgKiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCB0aGUgc2VjdXJlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQgYW5kIHRoZQogICAqIFs6RnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PjpdIHRoYXQgd2FzIHJldHVybmVkIGZyb20gdGhlIGNhbGwgbWFraW5nIHRoZQogICAqIHJlcXVlc3QgY29tcGxldGVzIHdpdGggYSB2YWxpZCBIdHRwUmVxdWVzdCBvYmplY3QuIElmIHRoZSBjYWxsYmFjayByZXR1cm5zCiAgICogZmFsc2UsIHRoZSBbOkZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD46XSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICoKICAgKiBJZiBhIGJhZCBjZXJ0aWZpY2F0ZSBpcyByZWNlaXZlZCBvbiBhIGNvbm5lY3Rpb24gYXR0ZW1wdCwgdGhlIGxpYnJhcnkgY2FsbHMKICAgKiB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgdGhlIHZhbHVlIG9mIGJhZENlcnRpZmljYXRlQ2FsbGJhY2sgYXQgdGhlIHRpbWUKICAgKiB0aGUgcmVxdWVzdCBpcyBtYWRlLCBldmVuIGlmIHRoZSB2YWx1ZSBvZiBiYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrCiAgICogaGFzIGNoYW5nZWQgc2luY2UgdGhlbi4KICAgKi8KICBzZXQgYmFkQ2VydGlmaWNhdGVDYWxsYmFjaygKICAgICAgYm9vbCBjYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY2VydCwgU3RyaW5nIGhvc3QsIGludCBwb3J0KSk7CgogIC8vLyBTaHV0cyBkb3duIHRoZSBIVFRQIGNsaWVudC4KICAvLy8KICAvLy8gSWYgW2ZvcmNlXSBpcyBgZmFsc2VgICh0aGUgZGVmYXVsdCkgdGhlIFtIdHRwQ2xpZW50XSB3aWxsIGJlIGtlcHQgYWxpdmUKICAvLy8gdW50aWwgYWxsIGFjdGl2ZSBjb25uZWN0aW9ucyBhcmUgZG9uZS4gSWYgW2ZvcmNlXSBpcyBgdHJ1ZWAgYW55IGFjdGl2ZQogIC8vLyBjb25uZWN0aW9ucyB3aWxsIGJlIGNsb3NlZCB0byBpbW1lZGlhdGVseSByZWxlYXNlIGFsbCByZXNvdXJjZXMuIFRoZXNlCiAgLy8vIGNsb3NlZCBjb25uZWN0aW9ucyB3aWxsIHJlY2VpdmUgYW4gZXJyb3IgZXZlbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50CiAgLy8vIHdhcyBzaHV0IGRvd24uIEluIGJvdGggY2FzZXMgdHJ5aW5nIHRvIGVzdGFibGlzaCBhIG5ldyBjb25uZWN0aW9uIGFmdGVyCiAgLy8vIGNhbGxpbmcgW2Nsb3NlXSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KICB2b2lkIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pOwp9CgovKioKICogSFRUUCByZXF1ZXN0IGZvciBhIGNsaWVudCBjb25uZWN0aW9uLgogKgogKiBUbyBzZXQgdXAgYSByZXF1ZXN0LCBzZXQgdGhlIGhlYWRlcnMgdXNpbmcgdGhlIGhlYWRlcnMgcHJvcGVydHkKICogcHJvdmlkZWQgaW4gdGhpcyBjbGFzcyBhbmQgd3JpdGUgdGhlIGRhdGEgdG8gdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QuCiAqIEh0dHBDbGllbnRSZXF1ZXN0IGlzIGFuIFtJT1NpbmtdLiBVc2UgdGhlIG1ldGhvZHMgZnJvbSBJT1NpbmssCiAqIHN1Y2ggYXMgd3JpdGVDaGFyQ29kZSgpLCB0byB3cml0ZSB0aGUgYm9keSBvZiB0aGUgSFRUUAogKiByZXF1ZXN0LiBXaGVuIG9uZSBvZiB0aGUgSU9TaW5rIG1ldGhvZHMgaXMgdXNlZCBmb3IgdGhlIGZpcnN0CiAqIHRpbWUsIHRoZSByZXF1ZXN0IGhlYWRlciBpcyBzZW50LiBDYWxsaW5nIGFueSBtZXRob2RzIHRoYXQKICogY2hhbmdlIHRoZSBoZWFkZXIgYWZ0ZXIgaXQgaXMgc2VudCB0aHJvd3MgYW4gZXhjZXB0aW9uLgogKgogKiBXaGVuIHdyaXRpbmcgc3RyaW5nIGRhdGEgdGhyb3VnaCB0aGUgW0lPU2lua10gdGhlCiAqIGVuY29kaW5nIHVzZWQgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSAiY2hhcnNldCIgcGFyYW1ldGVyIG9mCiAqIHRoZSAiQ29udGVudC1UeXBlIiBoZWFkZXIuCiAqCiAqICAgICBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0ID0gLi4uCiAqICAgICByZXF1ZXN0LmhlYWRlcnMuY29udGVudFR5cGUKICogICAgICAgICA9IG5ldyBDb250ZW50VHlwZSgiYXBwbGljYXRpb24iLCAianNvbiIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogKiAgICAgcmVxdWVzdC53cml0ZSguLi4pOyAgLy8gU3RyaW5ncyB3cml0dGVuIHdpbGwgYmUgVVRGLTggZW5jb2RlZC4KICoKICogSWYgbm8gY2hhcnNldCBpcyBwcm92aWRlZCB0aGUgZGVmYXVsdCBvZiBJU08tODg1OS0xIChMYXRpbiAxKSBpcwogKiBiZSB1c2VkLgogKgogKiAgICAgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCA9IC4uLgogKiAgICAgcmVxdWVzdC5oZWFkZXJzLmFkZChIdHRwSGVhZGVycy5jb250ZW50VHlwZUhlYWRlciwgInRleHQvcGxhaW4iKTsKICogICAgIHJlcXVlc3Qud3JpdGUoLi4uKTsgIC8vIFN0cmluZ3Mgd3JpdHRlbiB3aWxsIGJlIElTTy04ODU5LTEgZW5jb2RlZC4KICoKICogQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiB5b3UgdXNlIGFuIHVuc3VwcG9ydGVkIGVuY29kaW5nIGFuZCB0aGUKICogYHdyaXRlKClgIG1ldGhvZCBiZWluZyB1c2VkIHRha2VzIGEgc3RyaW5nIHBhcmFtZXRlci4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0IGltcGxlbWVudHMgSU9TaW5rIHsKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSByZXF1ZXN0ZWQgcGVyc2lzdGVudCBjb25uZWN0aW9uIHN0YXRlLgogICAqCiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgWzp0cnVlOl0uCiAgICovCiAgYm9vbCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gWzp0cnVlOl0gaWYgdGhpcyByZXF1ZXN0IHNob3VsZAogICAqIGF1dG9tYXRpY2FsbHkgZm9sbG93IHJlZGlyZWN0cy4gVGhlIGRlZmF1bHQgaXMgWzp0cnVlOl0uCiAgICoKICAgKiBBdXRvbWF0aWMgcmVkaXJlY3Qgd2lsbCBvbmx5IGhhcHBlbiBmb3IgIkdFVCIgYW5kICJIRUFEIiByZXF1ZXN0cwogICAqIGFuZCBvbmx5IGZvciB0aGUgc3RhdHVzIGNvZGVzIFs6SHR0cFN0YXR1cy5tb3ZlZFBlcm1hbmVudGx5Ol0KICAgKiAoMzAxKSwgWzpIdHRwU3RhdHVzLmZvdW5kOl0gKDMwMiksCiAgICogWzpIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHk6XSAoMzAyLCBhbGlhcyBmb3IKICAgKiBbOkh0dHBTdGF0dXMuZm91bmQ6XSksIFs6SHR0cFN0YXR1cy5zZWVPdGhlcjpdICgzMDMpIGFuZAogICAqIFs6SHR0cFN0YXR1cy50ZW1wb3JhcnlSZWRpcmVjdDpdICgzMDcpLiBGb3IKICAgKiBbOkh0dHBTdGF0dXMuc2VlT3RoZXI6XSAoMzAzKSBhdXRvbWF0aWMgcmVkaXJlY3Qgd2lsbCBhbHNvIGhhcHBlbgogICAqIGZvciAiUE9TVCIgcmVxdWVzdHMgd2l0aCB0aGUgbWV0aG9kIGNoYW5nZWQgdG8gIkdFVCIgd2hlbgogICAqIGZvbGxvd2luZyB0aGUgcmVkaXJlY3QuCiAgICoKICAgKiBBbGwgaGVhZGVycyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWRpcmVjdGlvbgogICAqIHJlcXVlc3QocykuIEhvd2V2ZXIsIGFueSBib2R5IHNlbmQgd2l0aCB0aGUgcmVxdWVzdCB3aWxsIG5vdCBiZQogICAqIHBhcnQgb2YgdGhlIHJlZGlyZWN0aW9uIHJlcXVlc3QocykuCiAgICovCiAgYm9vbCBmb2xsb3dSZWRpcmVjdHM7CgogIC8qKgogICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZWRpcmVjdHMgdG8gZm9sbG93CiAgICogd2hlbiBbZm9sbG93UmVkaXJlY3RzXSBpcyBgdHJ1ZWAuIElmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkCiAgICogYW4gZXJyb3IgZXZlbnQgd2lsbCBiZSBhZGRlZCB3aXRoIGEgW1JlZGlyZWN0RXhjZXB0aW9uXS4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuCiAgICovCiAgaW50IG1heFJlZGlyZWN0czsKCiAgLyoqCiAgICogVGhlIG1ldGhvZCBvZiB0aGUgcmVxdWVzdC4KICAgKi8KICBTdHJpbmcgZ2V0IG1ldGhvZDsKCiAgLyoqCiAgICogVGhlIHVyaSBvZiB0aGUgcmVxdWVzdC4KICAgKi8KICBVcmkgZ2V0IHVyaTsKCiAgLy8vIEdldHMgYW5kIHNldHMgdGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LgogIC8vLwogIC8vLyBJZiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBpcyBub3Qga25vd24gaW4gYWR2YW5jZSBzZXQgY29udGVudCBsZW5ndGggdG8KICAvLy8gLTEsIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQuCiAgaW50IGNvbnRlbnRMZW5ndGg7CgogIC8qKgogICAqIEdldHMgb3Igc2V0cyBpZiB0aGUgW0h0dHBDbGllbnRSZXF1ZXN0XSBzaG91bGQgYnVmZmVyIG91dHB1dC4KICAgKgogICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLgogICAqCiAgICogX19Ob3RlX186IERpc2FibGluZyBidWZmZXJpbmcgb2YgdGhlIG91dHB1dCBjYW4gcmVzdWx0IGluIHZlcnkgcG9vcgogICAqIHBlcmZvcm1hbmNlLCB3aGVuIHdyaXRpbmcgbWFueSBzbWFsbCBjaHVua3MuCiAgICovCiAgYm9vbCBidWZmZXJPdXRwdXQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNsaWVudCByZXF1ZXN0IGhlYWRlcnMuCiAgICoKICAgKiBUaGUgY2xpZW50IHJlcXVlc3QgaGVhZGVycyBjYW4gYmUgbW9kaWZpZWQgdW50aWwgdGhlIGNsaWVudAogICAqIHJlcXVlc3QgYm9keSBpcyB3cml0dGVuIHRvIG9yIGNsb3NlZC4gQWZ0ZXIgdGhhdCB0aGV5IGJlY29tZQogICAqIGltbXV0YWJsZS4KICAgKi8KICBIdHRwSGVhZGVycyBnZXQgaGVhZGVyczsKCiAgLyoqCiAgICogQ29va2llcyB0byBwcmVzZW50IHRvIHRoZSBzZXJ2ZXIgKGluIHRoZSAnY29va2llJyBoZWFkZXIpLgogICAqLwogIExpc3Q8Q29va2llPiBnZXQgY29va2llczsKCiAgLy8vIEEgW0h0dHBDbGllbnRSZXNwb25zZV0gZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZSBvbmNlIHRoZSByZXNwb25zZSBpcwogIC8vLyBhdmFpbGFibGUuCiAgLy8vCiAgLy8vIElmIGFuIGVycm9yIG9jY3VycyBiZWZvcmUgdGhlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZSwgdGhpcyBmdXR1cmUgd2lsbAogIC8vLyBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IGdldCBkb25lOwoKICAvKioKICAgKiBDbG9zZSB0aGUgcmVxdWVzdCBmb3IgaW5wdXQuIFJldHVybnMgdGhlIHZhbHVlIG9mIFtkb25lXS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBjbG9zZSgpOwoKICAvLy8gR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCiAgLy8vCiAgLy8vIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIHNvY2tldCBpcyBub3QgYXZhaWxhYmxlLgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm87Cn0KCi8qKgogKiBIVFRQIHJlc3BvbnNlIGZvciBhIGNsaWVudCBjb25uZWN0aW9uLgogKgogKiBUaGUgYm9keSBvZiBhIFtIdHRwQ2xpZW50UmVzcG9uc2VdIG9iamVjdCBpcyBhCiAqIFtTdHJlYW1dIG9mIGRhdGEgZnJvbSB0aGUgc2VydmVyLiBMaXN0ZW4gdG8gdGhlIGJvZHkgdG8gaGFuZGxlCiAqIHRoZSBkYXRhIGFuZCBiZSBub3RpZmllZCB3aGVuIHRoZSBlbnRpcmUgYm9keSBpcyByZWNlaXZlZC4KICoKICogICAgIG5ldyBIdHRwQ2xpZW50KCkuZ2V0KCdsb2NhbGhvc3QnLCA4MCwgJy9maWxlLnR4dCcpCiAqICAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSA9PiByZXF1ZXN0LmNsb3NlKCkpCiAqICAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVzcG9uc2UgcmVzcG9uc2UpIHsKICogICAgICAgICAgICByZXNwb25zZS50cmFuc2Zvcm0odXRmOC5kZWNvZGVyKS5saXN0ZW4oKGNvbnRlbnRzKSB7CiAqICAgICAgICAgICAgICAvLyBoYW5kbGUgZGF0YQogKiAgICAgICAgICAgIH0pOwogKiAgICAgICAgICB9KTsKICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIFN0cmVhbTxMaXN0PGludD4+IHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGF0dXMgY29kZS4KICAgKgogICAqIFRoZSBzdGF0dXMgY29kZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGJvZHkgaXMgd3JpdHRlbgogICAqIHRvLiBTZXR0aW5nIHRoZSBzdGF0dXMgY29kZSBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5IHdpbGwgdGhyb3cKICAgKiBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgZ2V0IHN0YXR1c0NvZGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlYXNvbiBwaHJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgY29kZS4KICAgKgogICAqIFRoZSByZWFzb24gcGhyYXNlIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgYm9keSBpcyB3cml0dGVuCiAgICogdG8uIFNldHRpbmcgdGhlIHJlYXNvbiBwaHJhc2UgYWZ0ZXIgd3JpdGluZyB0byB0aGUgYm9keSB3aWxsIHRocm93CiAgICogYSBgU3RhdGVFcnJvcmAuCiAgICovCiAgU3RyaW5nIGdldCByZWFzb25QaHJhc2U7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXNwb25zZSBib2R5LiBSZXR1cm5zIC0xIGlmIHRoZSBzaXplIG9mCiAgICogdGhlIHJlc3BvbnNlIGJvZHkgaXMgbm90IGtub3duIGluIGFkdmFuY2UuCiAgICoKICAgKiBJZiB0aGUgY29udGVudCBsZW5ndGggbmVlZHMgdG8gYmUgc2V0LCBpdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCiAgICogYm9keSBpcyB3cml0dGVuIHRvLiBTZXR0aW5nIHRoZSBjb250ZW50IGxlbmd0aCBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5CiAgICogd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgZ2V0IGNvbnRlbnRMZW5ndGg7CgogIC8vLyBUaGUgY29tcHJlc3Npb24gc3RhdGUgb2YgdGhlIHJlc3BvbnNlLgogIC8vLwogIC8vLyBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHRoZSByZXNwb25zZSBieXRlcyB3ZXJlIGNvbXByZXNzZWQgd2hlbiB0aGV5IHdlcmUKICAvLy8gcmVjZWl2ZWQgYWNyb3NzIHRoZSB3aXJlIGFuZCB3aGV0aGVyIGNhbGxlcnMgd2lsbCByZWNlaXZlIGNvbXByZXNzZWQKICAvLy8gb3IgdW5jb21wcmVzc2VkIGJ5dGVzIHdoZW4gdGhleSBsaXN0ZWQgdG8gdGhpcyByZXNwb25zZSdzIGJ5dGUgc3RyZWFtLgogIEBTaW5jZSgiMi40IikKICBIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlIGdldCBjb21wcmVzc2lvblN0YXRlOwoKICAvKioKICAgKiBHZXRzIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgcmV0dXJuZWQgYnkgdGhlIHNlcnZlci4KICAgKgogICAqIElmIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgbmVlZHMgdG8gYmUgc2V0LCBpdCBtdXN0IGJlCiAgICogc2V0IGJlZm9yZSB0aGUgYm9keSBpcyB3cml0dGVuIHRvLiBTZXR0aW5nIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUKICAgKiBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5IHdpbGwgdGhyb3cgYSBgU3RhdGVFcnJvcmAuCiAgICovCiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb247CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgc3RhdHVzIGNvZGUgaXMgb25lIG9mIHRoZSBub3JtYWwgcmVkaXJlY3QKICAgKiBjb2RlcyBbSHR0cFN0YXR1cy5tb3ZlZFBlcm1hbmVudGx5XSwgW0h0dHBTdGF0dXMuZm91bmRdLAogICAqIFtIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHldLCBbSHR0cFN0YXR1cy5zZWVPdGhlcl0gYW5kCiAgICogW0h0dHBTdGF0dXMudGVtcG9yYXJ5UmVkaXJlY3RdLgogICAqLwogIGJvb2wgZ2V0IGlzUmVkaXJlY3Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNlcmllcyBvZiByZWRpcmVjdHMgdGhpcyBjb25uZWN0aW9uIGhhcyBiZWVuIHRocm91Z2guIFRoZQogICAqIGxpc3Qgd2lsbCBiZSBlbXB0eSBpZiBubyByZWRpcmVjdHMgd2VyZSBmb2xsb3dlZC4gW3JlZGlyZWN0c10gd2lsbCBiZQogICAqIHVwZGF0ZWQgYm90aCBpbiB0aGUgY2FzZSBvZiBhbiBhdXRvbWF0aWMgYW5kIGEgbWFudWFsIHJlZGlyZWN0LgogICAqLwogIExpc3Q8UmVkaXJlY3RJbmZvPiBnZXQgcmVkaXJlY3RzOwoKICAvKioKICAgKiBSZWRpcmVjdHMgdGhpcyBjb25uZWN0aW9uIHRvIGEgbmV3IFVSTC4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yCiAgICogW21ldGhvZF0gaXMgdGhlIG1ldGhvZCBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC4gVGhlIGRlZmF1bHQgdmFsdWUKICAgKiBmb3IgW3VybF0gaXMgdGhlIHZhbHVlIG9mIHRoZSBbSHR0cEhlYWRlcnMubG9jYXRpb25IZWFkZXJdIGhlYWRlciBvZgogICAqIHRoZSBjdXJyZW50IHJlc3BvbnNlLiBBbGwgYm9keSBkYXRhIG11c3QgaGF2ZSBiZWVuIHJlYWQgZnJvbSB0aGUKICAgKiBjdXJyZW50IHJlc3BvbnNlIGJlZm9yZSBjYWxsaW5nIFtyZWRpcmVjdF0uCiAgICoKICAgKiBBbGwgaGVhZGVycyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWRpcmVjdGlvbgogICAqIHJlcXVlc3QuIEhvd2V2ZXIsIGFueSBib2R5IHNlbnQgd2l0aCB0aGUgcmVxdWVzdCB3aWxsIG5vdCBiZQogICAqIHBhcnQgb2YgdGhlIHJlZGlyZWN0aW9uIHJlcXVlc3QuCiAgICoKICAgKiBJZiBbZm9sbG93TG9vcHNdIGlzIHNldCB0byBbOnRydWU6XSwgcmVkaXJlY3Qgd2lsbCBmb2xsb3cgdGhlIHJlZGlyZWN0LAogICAqIGV2ZW4gaWYgdGhlIFVSTCB3YXMgYWxyZWFkeSB2aXNpdGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBbOmZhbHNlOl0uCiAgICoKICAgKiBUaGUgbWV0aG9kIHdpbGwgaWdub3JlIFtIdHRwQ2xpZW50UmVxdWVzdC5tYXhSZWRpcmVjdHNdCiAgICogYW5kIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIHJlZGlyZWN0LgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IHJlZGlyZWN0KAogICAgICBbU3RyaW5nIG1ldGhvZCwgVXJpIHVybCwgYm9vbCBmb2xsb3dMb29wc10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjbGllbnQgcmVzcG9uc2UgaGVhZGVycy4KICAgKgogICAqIFRoZSBjbGllbnQgcmVzcG9uc2UgaGVhZGVycyBhcmUgaW1tdXRhYmxlLgogICAqLwogIEh0dHBIZWFkZXJzIGdldCBoZWFkZXJzOwoKICAvKioKICAgKiBEZXRhY2ggdGhlIHVuZGVybHlpbmcgc29ja2V0IGZyb20gdGhlIEhUVFAgY2xpZW50LiBXaGVuIHRoZQogICAqIHNvY2tldCBpcyBkZXRhY2hlZCB0aGUgSFRUUCBjbGllbnQgd2lsbCBubyBsb25nZXIgcGVyZm9ybSBhbnkKICAgKiBvcGVyYXRpb25zIG9uIGl0LgogICAqCiAgICogVGhpcyBpcyBub3JtYWxseSB1c2VkIHdoZW4gYSBIVFRQIHVwZ3JhZGUgaXMgbmVnb3RpYXRlZCBhbmQgdGhlCiAgICogY29tbXVuaWNhdGlvbiBzaG91bGQgY29udGludWUgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbC4KICAgKi8KICBGdXR1cmU8U29ja2V0PiBkZXRhY2hTb2NrZXQoKTsKCiAgLyoqCiAgICogQ29va2llcyBzZXQgYnkgdGhlIHNlcnZlciAoZnJvbSB0aGUgJ3NldC1jb29raWUnIGhlYWRlcikuCiAgICovCiAgTGlzdDxDb29raWU+IGdldCBjb29raWVzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjZXJ0aWZpY2F0ZSBvZiB0aGUgSFRUUFMgc2VydmVyIHByb3ZpZGluZyB0aGUgcmVzcG9uc2UuCiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBhIHNlY3VyZSBUTFMgb3IgU1NMIGNvbm5lY3Rpb24uCiAgICovCiAgWDUwOUNlcnRpZmljYXRlIGdldCBjZXJ0aWZpY2F0ZTsKCiAgLyoqCiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIHNvY2tldAogICAqIGlzIG5vdCBhdmFpbGFibGUuCiAgICovCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbzsKfQoKLy8vIEVudW0gdGhhdCBzcGVjaWZpZXMgdGhlIGNvbXByZXNzaW9uIHN0YXRlIG9mIHRoZSBieXRlIHN0cmVhbSBvZiBhbgovLy8gW0h0dHBDbGllbnRSZXNwb25zZV0uCi8vLwovLy8gVGhlIHZhbHVlcyBoZXJlaW4gYWxsb3cgY2FsbGVycyB0byBhbnN3ZXIgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMgYXMgdGhleQovLy8gcGVydGFpbiB0byBhbiBbSHR0cENsaWVudFJlc3BvbnNlXToKLy8vCi8vLyAgKiBDYW4gdGhlIHZhbHVlIG9mIHRoZSByZXNwb25zZSdzIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIgYmUgdHJ1c3RlZD8KLy8vICAqIERvZXMgdGhlIGNhbGxlciBuZWVkIHRvIG1hbnVhbGx5IGRlY29tcHJlc3MgdGhlIHJlc3BvbnNlJ3MgYnl0ZSBzdHJlYW0/Ci8vLwovLy8gVGhpcyBlbnVtIGlzIGFjY2Vzc2VkIHZpYSB0aGUgW0h0dHBDbGllbnRSZXNwb25zZS5jb21wcmVzc2lvblN0YXRlXSB2YWx1ZS4KQFNpbmNlKCIyLjQiKQplbnVtIEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUgewogIC8vLyBUaGUgYm9keSBvZiB0aGUgSFRUUCByZXNwb25zZSB3YXMgcmVjZWl2ZWQgYW5kIHJlbWFpbnMgaW4gYW4gdW5jb21wcmVzc2VkCiAgLy8vIHN0YXRlLgogIC8vLwogIC8vLyBJbiB0aGlzIHN0YXRlLCB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIsIGlmCiAgLy8vIHNwZWNpZmllZCAobm9uLW5lZ2F0aXZlKSwgc2hvdWxkIG1hdGNoIHRoZSBudW1iZXIgb2YgYnl0ZXMgcHJvZHVjZWQgYnkKICAvLy8gdGhlIHJlc3BvbnNlJ3MgYnl0ZSBzdHJlYW0uCiAgbm90Q29tcHJlc3NlZCwKCiAgLy8vIFRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlIHdhcyBvcmlnaW5hbGx5IGNvbXByZXNzZWQsIGJ1dCBieSB2aXJ0dWUgb2YKICAvLy8gdGhlIFtIdHRwQ2xpZW50LmF1dG9VbmNvbXByZXNzXSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXQgaGFzIGJlZW4KICAvLy8gYXV0b21hdGljYWxseSB1bmNvbXByZXNzZWQuCiAgLy8vCiAgLy8vIEhUVFAgaGVhZGVycyBhcmUgbm90IG1vZGlmaWVkLCBzbyB3aGVuIGEgcmVzcG9uc2UgaGFzIGJlZW4gdW5jb21wcmVzc2VkCiAgLy8vIGluIHRoaXMgd2F5LCB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIgY2Fubm90IGJlCiAgLy8vIHRydXN0ZWQsIGFzIGl0IHdpbGwgY29udGFpbiB0aGUgY29tcHJlc3NlZCBjb250ZW50IGxlbmd0aCwgd2hlcmVhcyB0aGUKICAvLy8gc3RyZWFtIG9mIGJ5dGVzIHByb2R1Y2VkIGJ5IHRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW4gdW5jb21wcmVzc2VkIGJ5dGVzLgogIGRlY29tcHJlc3NlZCwKCiAgLy8vIFRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlIGNvbnRhaW5zIGNvbXByZXNzZWQgYnl0ZXMuCiAgLy8vCiAgLy8vIEluIHRoaXMgc3RhdGUsIHRoZSB2YWx1ZSBvZiB0aGUgYENvbnRlbnQtTGVuZ3RoYCBIVFRQIGhlYWRlciwgaWYKICAvLy8gc3BlY2lmaWVkIChub24tbmVnYXRpdmUpLCBzaG91bGQgbWF0Y2ggdGhlIG51bWJlciBvZiBieXRlcyBwcm9kdWNlZCBieQogIC8vLyB0aGUgcmVzcG9uc2UncyBieXRlIHN0cmVhbS4KICAvLy8KICAvLy8gSWYgdGhlIGNhbGxlciB3aXNoZXMgdG8gbWFudWFsbHkgdW5jb21wcmVzcyB0aGUgYm9keSBvZiB0aGUgcmVzcG9uc2UsCiAgLy8vIGl0IHNob3VsZCBjb25zdWx0IHRoZSB2YWx1ZSBvZiB0aGUgYENvbnRlbnQtRW5jb2RpbmdgIEhUVFAgaGVhZGVyIHRvIHNlZQogIC8vLyB3aGF0IHR5cGUgb2YgY29tcHJlc3Npb24gaGFzIGJlZW4gYXBwbGllZC4gU2VlCiAgLy8vIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjYxNiNzZWN0aW9uLTE0LjExPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICBjb21wcmVzc2VkLAp9CgphYnN0cmFjdCBjbGFzcyBIdHRwQ2xpZW50Q3JlZGVudGlhbHMge30KCi8qKgogKiBSZXByZXNlbnRzIGNyZWRlbnRpYWxzIGZvciBiYXNpYyBhdXRoZW50aWNhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzIGV4dGVuZHMgSHR0cENsaWVudENyZWRlbnRpYWxzIHsKICBmYWN0b3J5IEh0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSA9PgogICAgICBuZXcgX0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzKHVzZXJuYW1lLCBwYXNzd29yZCk7Cn0KCi8qKgogKiBSZXByZXNlbnRzIGNyZWRlbnRpYWxzIGZvciBkaWdlc3QgYXV0aGVudGljYXRpb24uIERpZ2VzdAogKiBhdXRoZW50aWNhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3Igc2VydmVycyB1c2luZyB0aGUgTUQ1CiAqIGFsZ29yaXRobSBhbmQgcXVhbGl0eSBvZiBwcm90ZWN0aW9uIChxb3ApIG9mIGVpdGhlciAibm9uZSIgb3IKICogImF1dGgiLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzIGV4dGVuZHMgSHR0cENsaWVudENyZWRlbnRpYWxzIHsKICBmYWN0b3J5IEh0dHBDbGllbnREaWdlc3RDcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgPT4KICAgICAgbmV3IF9IdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHModXNlcm5hbWUsIHBhc3N3b3JkKTsKfQoKLyoqCiAqIEluZm9ybWF0aW9uIGFib3V0IGFuIFtIdHRwUmVxdWVzdF0sIFtIdHRwUmVzcG9uc2VdLCBbSHR0cENsaWVudFJlcXVlc3RdLCBvcgogKiBbSHR0cENsaWVudFJlc3BvbnNlXSBjb25uZWN0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cENvbm5lY3Rpb25JbmZvIHsKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3M7CiAgaW50IGdldCByZW1vdGVQb3J0OwogIGludCBnZXQgbG9jYWxQb3J0Owp9CgovKioKICogUmVkaXJlY3QgaW5mb3JtYXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBSZWRpcmVjdEluZm8gewogIC8qKgogICAqIFJldHVybnMgdGhlIHN0YXR1cyBjb2RlIHVzZWQgZm9yIHRoZSByZWRpcmVjdC4KICAgKi8KICBpbnQgZ2V0IHN0YXR1c0NvZGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG1ldGhvZCB1c2VkIGZvciB0aGUgcmVkaXJlY3QuCiAgICovCiAgU3RyaW5nIGdldCBtZXRob2Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxvY2F0aW9uIGZvciB0aGUgcmVkaXJlY3QuCiAgICovCiAgVXJpIGdldCBsb2NhdGlvbjsKfQoKLyoqCiAqIFdoZW4gZGV0YWNoaW5nIGEgc29ja2V0IGZyb20gZWl0aGVyIHRoZSBbOkh0dHBTZXJ2ZXI6XSBvciB0aGUKICogWzpIdHRwQ2xpZW50Ol0gZHVlIHRvIGEgSFRUUCBjb25uZWN0aW9uIHVwZ3JhZGUgdGhlcmUgbWlnaHQgYmUKICogdW5wYXJzZWQgZGF0YSBhbHJlYWR5IHJlYWQgZnJvbSB0aGUgc29ja2V0LiBUaGlzIHVucGFyc2VkIGRhdGEKICogdG9nZXRoZXIgd2l0aCB0aGUgZGV0YWNoZWQgc29ja2V0IGlzIHJldHVybmVkIGluIGFuIGluc3RhbmNlIG9mCiAqIHRoaXMgY2xhc3MuCiAqLwphYnN0cmFjdCBjbGFzcyBEZXRhY2hlZFNvY2tldCB7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AQY/BhwBBklLBiMBBlIXBikCAUcaBE4oBFBPBE8OKlANBkdNIhEBUEgiBk5LTVAQAT8GR00iBkxPNVAOAgEoAQQ0BEpKOwIBBDw+QQsES0s8AgEETyQEJCUWFQIBBBkEHgY0BhYBBi8GFQEGLAYUAgEEQUJCQw8EIBUeAgEtGBEBMQEWShcfBhkEAgEzGCYBOQE2ASoCAQpkYXJ0Ol9odHRwMG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9faHR0cC9odHRwX2ltcGwuZGFydMABiDsvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKaW50IF9uZXh0U2VydmljZUlkID0gMTsKCi8vIFRPRE8oYWpvaG5zZW4pOiBVc2Ugb3RoZXIgd2F5IG9mIGdldHRpbmcgYSB1bmlxdWUgaWQuCmFic3RyYWN0IGNsYXNzIF9TZXJ2aWNlT2JqZWN0IHsKICBpbnQgX19zZXJ2aWNlSWQgPSAwOwogIGludCBnZXQgX3NlcnZpY2VJZCB7CiAgICBpZiAoX19zZXJ2aWNlSWQgPT0gMCkgX19zZXJ2aWNlSWQgPSBfbmV4dFNlcnZpY2VJZCsrOwogICAgcmV0dXJuIF9fc2VydmljZUlkOwogIH0KCiAgTWFwIF90b0pTT04oYm9vbCByZWYpOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlUGF0aCA9PiAiJF9zZXJ2aWNlVHlwZVBhdGgvJF9zZXJ2aWNlSWQiOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZVBhdGg7CgogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZTsKCiAgU3RyaW5nIF9zZXJ2aWNlVHlwZShib29sIHJlZikgewogICAgaWYgKHJlZikgcmV0dXJuICJAJF9zZXJ2aWNlVHlwZU5hbWUiOwogICAgcmV0dXJuIF9zZXJ2aWNlVHlwZU5hbWU7CiAgfQp9CgpjbGFzcyBfQ29weWluZ0J5dGVzQnVpbGRlciBpbXBsZW1lbnRzIEJ5dGVzQnVpbGRlciB7CiAgLy8gU3RhcnQgd2l0aCAxMDI0IGJ5dGVzLgogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRfU0laRSA9IDEwMjQ7CgogIHN0YXRpYyBmaW5hbCBfZW1wdHlMaXN0ID0gbmV3IFVpbnQ4TGlzdCgwKTsKCiAgaW50IF9sZW5ndGggPSAwOwogIFVpbnQ4TGlzdCBfYnVmZmVyOwoKICBfQ29weWluZ0J5dGVzQnVpbGRlcihbaW50IGluaXRpYWxDYXBhY2l0eSA9IDBdKQogICAgICA6IF9idWZmZXIgPSAoaW5pdGlhbENhcGFjaXR5IDw9IDApCiAgICAgICAgICAgID8gX2VtcHR5TGlzdAogICAgICAgICAgICA6IG5ldyBVaW50OExpc3QoX3BvdzJyb3VuZHVwKGluaXRpYWxDYXBhY2l0eSkpOwoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIGludCBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDsKICAgIGlmIChieXRlc0xlbmd0aCA9PSAwKSByZXR1cm47CiAgICBpbnQgcmVxdWlyZWQgPSBfbGVuZ3RoICsgYnl0ZXNMZW5ndGg7CiAgICBpZiAoX2J1ZmZlci5sZW5ndGggPCByZXF1aXJlZCkgewogICAgICBfZ3JvdyhyZXF1aXJlZCk7CiAgICB9CiAgICBhc3NlcnQoX2J1ZmZlci5sZW5ndGggPj0gcmVxdWlyZWQpOwogICAgaWYgKGJ5dGVzIGlzIFVpbnQ4TGlzdCkgewogICAgICBfYnVmZmVyLnNldFJhbmdlKF9sZW5ndGgsIHJlcXVpcmVkLCBieXRlcyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzTGVuZ3RoOyBpKyspIHsKICAgICAgICBfYnVmZmVyW19sZW5ndGggKyBpXSA9IGJ5dGVzW2ldOwogICAgICB9CiAgICB9CiAgICBfbGVuZ3RoID0gcmVxdWlyZWQ7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA9PSBfbGVuZ3RoKSB7CiAgICAgIC8vIFRoZSBncm93IGFsZ29yaXRobSBhbHdheXMgYXQgbGVhc3QgZG91Ymxlcy4KICAgICAgLy8gSWYgd2UgYWRkZWQgb25lIHRvIF9sZW5ndGggaXQgd291bGQgcXVhZHJ1cGxlIHVubmVjZXNzYXJpbHkuCiAgICAgIF9ncm93KF9sZW5ndGgpOwogICAgfQogICAgYXNzZXJ0KF9idWZmZXIubGVuZ3RoID4gX2xlbmd0aCk7CiAgICBfYnVmZmVyW19sZW5ndGhdID0gYnl0ZTsKICAgIF9sZW5ndGgrKzsKICB9CgogIHZvaWQgX2dyb3coaW50IHJlcXVpcmVkKSB7CiAgICAvLyBXZSB3aWxsIGNyZWF0ZSBhIGxpc3QgaW4gdGhlIHJhbmdlIG9mIDItNCB0aW1lcyBsYXJnZXIgdGhhbgogICAgLy8gcmVxdWlyZWQuCiAgICBpbnQgbmV3U2l6ZSA9IHJlcXVpcmVkICogMjsKICAgIGlmIChuZXdTaXplIDwgX0lOSVRfU0laRSkgewogICAgICBuZXdTaXplID0gX0lOSVRfU0laRTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld1NpemUgPSBfcG93MnJvdW5kdXAobmV3U2l6ZSk7CiAgICB9CiAgICB2YXIgbmV3QnVmZmVyID0gbmV3IFVpbnQ4TGlzdChuZXdTaXplKTsKICAgIG5ld0J1ZmZlci5zZXRSYW5nZSgwLCBfYnVmZmVyLmxlbmd0aCwgX2J1ZmZlcik7CiAgICBfYnVmZmVyID0gbmV3QnVmZmVyOwogIH0KCiAgVWludDhMaXN0IHRha2VCeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfZW1wdHlMaXN0OwogICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2xlbmd0aCk7CiAgICBjbGVhcigpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIFVpbnQ4TGlzdCB0b0J5dGVzKCkgewogICAgaWYgKF9sZW5ndGggPT0gMCkgcmV0dXJuIF9lbXB0eUxpc3Q7CiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdCgKICAgICAgICBuZXcgVWludDhMaXN0LnZpZXcoX2J1ZmZlci5idWZmZXIsIDAsIF9sZW5ndGgpKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2xlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9sZW5ndGggIT0gMDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9sZW5ndGggPSAwOwogICAgX2J1ZmZlciA9IF9lbXB0eUxpc3Q7CiAgfQoKICBzdGF0aWMgaW50IF9wb3cycm91bmR1cChpbnQgeCkgewogICAgYXNzZXJ0KHggPiAwKTsKICAgIC0teDsKICAgIHggfD0geCA+PiAxOwogICAgeCB8PSB4ID4+IDI7CiAgICB4IHw9IHggPj4gNDsKICAgIHggfD0geCA+PiA4OwogICAgeCB8PSB4ID4+IDE2OwogICAgcmV0dXJuIHggKyAxOwogIH0KfQoKY29uc3QgaW50IF9PVVRHT0lOR19CVUZGRVJfU0laRSA9IDggKiAxMDI0OwoKdHlwZWRlZiB2b2lkIF9CeXRlc0NvbnN1bWVyKExpc3Q8aW50PiBieXRlcyk7CgpjbGFzcyBfSHR0cEluY29taW5nIGV4dGVuZHMgU3RyZWFtPFVpbnQ4TGlzdD4gewogIGZpbmFsIGludCBfdHJhbnNmZXJMZW5ndGg7CiAgZmluYWwgQ29tcGxldGVyIF9kYXRhQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogIFN0cmVhbTxVaW50OExpc3Q+IF9zdHJlYW07CgogIGJvb2wgZnVsbEJvZHlSZWFkID0gZmFsc2U7CgogIC8vIENvbW1vbiBwcm9wZXJ0aWVzLgogIGZpbmFsIF9IdHRwSGVhZGVycyBoZWFkZXJzOwogIGJvb2wgdXBncmFkZWQgPSBmYWxzZTsKCiAgLy8gQ2xpZW50UmVzcG9uc2UgcHJvcGVydGllcy4KICBpbnQgc3RhdHVzQ29kZTsKICBTdHJpbmcgcmVhc29uUGhyYXNlOwoKICAvLyBSZXF1ZXN0IHByb3BlcnRpZXMuCiAgU3RyaW5nIG1ldGhvZDsKICBVcmkgdXJpOwoKICBib29sIGhhc1N1YnNjcmliZXIgPSBmYWxzZTsKCiAgLy8gVGhlIHRyYW5zZmVyIGxlbmd0aCBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGJvZHkgYXMgaXQKICAvLyBhcHBlYXJzIGluIHRoZSBtZXNzYWdlIChSRkMgMjYxNiBzZWN0aW9uIDQuNCkuIFRoaXMgY2FuIGJlIC0xIGlmCiAgLy8gdGhlIGxlbmd0aCBvZiB0aGUgbWFzc2FnZSBib2R5IGlzIG5vdCBrbm93biBkdWUgdG8gdHJhbnNmZXIKICAvLyBjb2RpbmdzLgogIGludCBnZXQgdHJhbnNmZXJMZW5ndGggPT4gX3RyYW5zZmVyTGVuZ3RoOwoKICBfSHR0cEluY29taW5nKHRoaXMuaGVhZGVycywgdGhpcy5fdHJhbnNmZXJMZW5ndGgsIHRoaXMuX3N0cmVhbSk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaGFzU3Vic2NyaWJlciA9IHRydWU7CiAgICByZXR1cm4gX3N0cmVhbS5oYW5kbGVFcnJvcigoZXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oZXJyb3IubWVzc2FnZSwgdXJpOiB1cmkpOwogICAgfSkubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICAvLyBJcyBjb21wbGV0ZWQgb25jZSBhbGwgZGF0YSBoYXZlIGJlZW4gcmVjZWl2ZWQuCiAgRnV0dXJlIGdldCBkYXRhRG9uZSA9PiBfZGF0YUNvbXBsZXRlci5mdXR1cmU7CgogIHZvaWQgY2xvc2UoYm9vbCBjbG9zaW5nKSB7CiAgICBmdWxsQm9keVJlYWQgPSB0cnVlOwogICAgaGFzU3Vic2NyaWJlciA9IHRydWU7CiAgICBfZGF0YUNvbXBsZXRlci5jb21wbGV0ZShjbG9zaW5nKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IdHRwSW5ib3VuZE1lc3NhZ2VMaXN0SW50IGV4dGVuZHMgU3RyZWFtPExpc3Q8aW50Pj4gewogIGZpbmFsIF9IdHRwSW5jb21pbmcgX2luY29taW5nOwogIExpc3Q8Q29va2llPiBfY29va2llczsKCiAgX0h0dHBJbmJvdW5kTWVzc2FnZUxpc3RJbnQodGhpcy5faW5jb21pbmcpOwoKICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXMgewogICAgaWYgKF9jb29raWVzICE9IG51bGwpIHJldHVybiBfY29va2llczsKICAgIHJldHVybiBfY29va2llcyA9IGhlYWRlcnMuX3BhcnNlQ29va2llcygpOwogIH0KCiAgX0h0dHBIZWFkZXJzIGdldCBoZWFkZXJzID0+IF9pbmNvbWluZy5oZWFkZXJzOwogIFN0cmluZyBnZXQgcHJvdG9jb2xWZXJzaW9uID0+IGhlYWRlcnMucHJvdG9jb2xWZXJzaW9uOwogIGludCBnZXQgY29udGVudExlbmd0aCA9PiBoZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb24gPT4gaGVhZGVycy5wZXJzaXN0ZW50Q29ubmVjdGlvbjsKfQoKYWJzdHJhY3QgY2xhc3MgX0h0dHBJbmJvdW5kTWVzc2FnZSBleHRlbmRzIFN0cmVhbTxVaW50OExpc3Q+IHsKICBmaW5hbCBfSHR0cEluY29taW5nIF9pbmNvbWluZzsKICBMaXN0PENvb2tpZT4gX2Nvb2tpZXM7CgogIF9IdHRwSW5ib3VuZE1lc3NhZ2UodGhpcy5faW5jb21pbmcpOwoKICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXMgewogICAgaWYgKF9jb29raWVzICE9IG51bGwpIHJldHVybiBfY29va2llczsKICAgIHJldHVybiBfY29va2llcyA9IGhlYWRlcnMuX3BhcnNlQ29va2llcygpOwogIH0KCiAgX0h0dHBIZWFkZXJzIGdldCBoZWFkZXJzID0+IF9pbmNvbWluZy5oZWFkZXJzOwogIFN0cmluZyBnZXQgcHJvdG9jb2xWZXJzaW9uID0+IGhlYWRlcnMucHJvdG9jb2xWZXJzaW9uOwogIGludCBnZXQgY29udGVudExlbmd0aCA9PiBoZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb24gPT4gaGVhZGVycy5wZXJzaXN0ZW50Q29ubmVjdGlvbjsKfQoKY2xhc3MgX0h0dHBSZXF1ZXN0IGV4dGVuZHMgX0h0dHBJbmJvdW5kTWVzc2FnZSBpbXBsZW1lbnRzIEh0dHBSZXF1ZXN0IHsKICBmaW5hbCBIdHRwUmVzcG9uc2UgcmVzcG9uc2U7CgogIGZpbmFsIF9IdHRwU2VydmVyIF9odHRwU2VydmVyOwoKICBmaW5hbCBfSHR0cENvbm5lY3Rpb24gX2h0dHBDb25uZWN0aW9uOwoKICBfSHR0cFNlc3Npb24gX3Nlc3Npb247CgogIFVyaSBfcmVxdWVzdGVkVXJpOwoKICBfSHR0cFJlcXVlc3QodGhpcy5yZXNwb25zZSwgX0h0dHBJbmNvbWluZyBfaW5jb21pbmcsIHRoaXMuX2h0dHBTZXJ2ZXIsCiAgICAgIHRoaXMuX2h0dHBDb25uZWN0aW9uKQogICAgICA6IHN1cGVyKF9pbmNvbWluZykgewogICAgaWYgKGhlYWRlcnMucHJvdG9jb2xWZXJzaW9uID09ICIxLjEiKSB7CiAgICAgIHJlc3BvbnNlLmhlYWRlcnMKICAgICAgICAuLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gdHJ1ZQogICAgICAgIC4ucGVyc2lzdGVudENvbm5lY3Rpb24gPSBoZWFkZXJzLnBlcnNpc3RlbnRDb25uZWN0aW9uOwogICAgfQoKICAgIGlmIChfaHR0cFNlcnZlci5fc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZSAhPSBudWxsKSB7CiAgICAgIC8vIE1hcCB0byBzZXNzaW9uIGlmIGV4aXN0cy4KICAgICAgdmFyIHNlc3Npb25JZHMgPSBjb29raWVzCiAgICAgICAgICAud2hlcmUoKGNvb2tpZSkgPT4gY29va2llLm5hbWUudG9VcHBlckNhc2UoKSA9PSBfREFSVF9TRVNTSU9OX0lEKQogICAgICAgICAgLm1hcCgoY29va2llKSA9PiBjb29raWUudmFsdWUpOwogICAgICBmb3IgKHZhciBzZXNzaW9uSWQgaW4gc2Vzc2lvbklkcykgewogICAgICAgIF9zZXNzaW9uID0gX2h0dHBTZXJ2ZXIuX3Nlc3Npb25NYW5hZ2VyLmdldFNlc3Npb24oc2Vzc2lvbklkKTsKICAgICAgICBpZiAoX3Nlc3Npb24gIT0gbnVsbCkgewogICAgICAgICAgX3Nlc3Npb24uX21hcmtTZWVuKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9pbmNvbWluZy5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIFVyaSBnZXQgdXJpID0+IF9pbmNvbWluZy51cmk7CgogIFVyaSBnZXQgcmVxdWVzdGVkVXJpIHsKICAgIGlmIChfcmVxdWVzdGVkVXJpID09IG51bGwpIHsKICAgICAgdmFyIHByb3RvID0gaGVhZGVyc1sneC1mb3J3YXJkZWQtcHJvdG8nXTsKICAgICAgdmFyIHNjaGVtZSA9IHByb3RvICE9IG51bGwKICAgICAgICAgID8gcHJvdG8uZmlyc3QKICAgICAgICAgIDogX2h0dHBDb25uZWN0aW9uLl9zb2NrZXQgaXMgU2VjdXJlU29ja2V0ID8gImh0dHBzIiA6ICJodHRwIjsKICAgICAgdmFyIGhvc3RMaXN0ID0gaGVhZGVyc1sneC1mb3J3YXJkZWQtaG9zdCddOwogICAgICBTdHJpbmcgaG9zdDsKICAgICAgaWYgKGhvc3RMaXN0ICE9IG51bGwpIHsKICAgICAgICBob3N0ID0gaG9zdExpc3QuZmlyc3Q7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaG9zdExpc3QgPSBoZWFkZXJzWydob3N0J107CiAgICAgICAgaWYgKGhvc3RMaXN0ICE9IG51bGwpIHsKICAgICAgICAgIGhvc3QgPSBob3N0TGlzdC5maXJzdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaG9zdCA9ICIke19odHRwU2VydmVyLmFkZHJlc3MuaG9zdH06JHtfaHR0cFNlcnZlci5wb3J0fSI7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9yZXF1ZXN0ZWRVcmkgPSBVcmkucGFyc2UoIiRzY2hlbWU6Ly8kaG9zdCR1cmkiKTsKICAgIH0KICAgIHJldHVybiBfcmVxdWVzdGVkVXJpOwogIH0KCiAgU3RyaW5nIGdldCBtZXRob2QgPT4gX2luY29taW5nLm1ldGhvZDsKCiAgSHR0cFNlc3Npb24gZ2V0IHNlc3Npb24gewogICAgaWYgKF9zZXNzaW9uICE9IG51bGwpIHsKICAgICAgaWYgKF9zZXNzaW9uLl9kZXN0cm95ZWQpIHsKICAgICAgICAvLyBJdCdzIGRlc3Ryb3llZCwgY2xlYXIgaXQuCiAgICAgICAgX3Nlc3Npb24gPSBudWxsOwogICAgICAgIC8vIENyZWF0ZSBuZXcgc2Vzc2lvbiBvYmplY3QgYnkgY2FsbGluZyByZWN1cnNpdmUuCiAgICAgICAgcmV0dXJuIHNlc3Npb247CiAgICAgIH0KICAgICAgLy8gSXQncyBhbHJlYWR5IG1hcHBlZCwgdXNlIGl0LgogICAgICByZXR1cm4gX3Nlc3Npb247CiAgICB9CiAgICAvLyBDcmVhdGUgc2Vzc2lvbiwgc3RvcmUgaXQgaW4gY29ubmVjdGlvbiwgYW5kIHJldHVybi4KICAgIHJldHVybiBfc2Vzc2lvbiA9IF9odHRwU2VydmVyLl9zZXNzaW9uTWFuYWdlci5jcmVhdGVTZXNzaW9uKCk7CiAgfQoKICBIdHRwQ29ubmVjdGlvbkluZm8gZ2V0IGNvbm5lY3Rpb25JbmZvID0+IF9odHRwQ29ubmVjdGlvbi5jb25uZWN0aW9uSW5mbzsKCiAgWDUwOUNlcnRpZmljYXRlIGdldCBjZXJ0aWZpY2F0ZSB7CiAgICB2YXIgc29ja2V0ID0gX2h0dHBDb25uZWN0aW9uLl9zb2NrZXQ7CiAgICBpZiAoc29ja2V0IGlzIFNlY3VyZVNvY2tldCkgcmV0dXJuIHNvY2tldC5wZWVyQ2VydGlmaWNhdGU7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIF9IdHRwQ2xpZW50UmVzcG9uc2UgZXh0ZW5kcyBfSHR0cEluYm91bmRNZXNzYWdlTGlzdEludAogICAgaW1wbGVtZW50cyBIdHRwQ2xpZW50UmVzcG9uc2UgewogIExpc3Q8UmVkaXJlY3RJbmZvPiBnZXQgcmVkaXJlY3RzID0+IF9odHRwUmVxdWVzdC5fcmVzcG9uc2VSZWRpcmVjdHM7CgogIC8vIFRoZSBIdHRwQ2xpZW50IHRoaXMgcmVzcG9uc2UgYmVsb25ncyB0by4KICBmaW5hbCBfSHR0cENsaWVudCBfaHR0cENsaWVudDsKCiAgLy8gVGhlIEh0dHBDbGllbnRSZXF1ZXN0IG9mIHRoaXMgcmVzcG9uc2UuCiAgZmluYWwgX0h0dHBDbGllbnRSZXF1ZXN0IF9odHRwUmVxdWVzdDsKCiAgLy8gVGhlIGNvbXByZXNzaW9uIHN0YXRlIG9mIHRoaXMgcmVzcG9uc2UuCiAgZmluYWwgSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZSBjb21wcmVzc2lvblN0YXRlOwoKICBfSHR0cENsaWVudFJlc3BvbnNlKAogICAgICBfSHR0cEluY29taW5nIF9pbmNvbWluZywgdGhpcy5faHR0cFJlcXVlc3QsIHRoaXMuX2h0dHBDbGllbnQpCiAgICAgIDogY29tcHJlc3Npb25TdGF0ZSA9IF9nZXRDb21wcmVzc2lvblN0YXRlKF9odHRwQ2xpZW50LCBfaW5jb21pbmcuaGVhZGVycyksCiAgICAgICAgc3VwZXIoX2luY29taW5nKSB7CiAgICAvLyBTZXQgdXJpIGZvciBwb3RlbnRpYWwgZXhjZXB0aW9ucy4KICAgIF9pbmNvbWluZy51cmkgPSBfaHR0cFJlcXVlc3QudXJpOwogIH0KCiAgc3RhdGljIEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUgX2dldENvbXByZXNzaW9uU3RhdGUoCiAgICAgIF9IdHRwQ2xpZW50IGh0dHBDbGllbnQsIF9IdHRwSGVhZGVycyBoZWFkZXJzKSB7CiAgICBpZiAoaGVhZGVycy52YWx1ZShIdHRwSGVhZGVycy5jb250ZW50RW5jb2RpbmdIZWFkZXIpID09ICJnemlwIikgewogICAgICByZXR1cm4gaHR0cENsaWVudC5hdXRvVW5jb21wcmVzcwogICAgICAgICAgPyBIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlLmRlY29tcHJlc3NlZAogICAgICAgICAgOiBIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlLmNvbXByZXNzZWQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5ub3RDb21wcmVzc2VkOwogICAgfQogIH0KCiAgaW50IGdldCBzdGF0dXNDb2RlID0+IF9pbmNvbWluZy5zdGF0dXNDb2RlOwogIFN0cmluZyBnZXQgcmVhc29uUGhyYXNlID0+IF9pbmNvbWluZy5yZWFzb25QaHJhc2U7CgogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgY2VydGlmaWNhdGUgewogICAgdmFyIHNvY2tldCA9IF9odHRwUmVxdWVzdC5faHR0cENsaWVudENvbm5lY3Rpb24uX3NvY2tldDsKICAgIGlmIChzb2NrZXQgaXMgU2VjdXJlU29ja2V0KSByZXR1cm4gc29ja2V0LnBlZXJDZXJ0aWZpY2F0ZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgTGlzdDxDb29raWU+IGdldCBjb29raWVzIHsKICAgIGlmIChfY29va2llcyAhPSBudWxsKSByZXR1cm4gX2Nvb2tpZXM7CiAgICBfY29va2llcyA9IG5ldyBMaXN0PENvb2tpZT4oKTsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBoZWFkZXJzW0h0dHBIZWFkZXJzLnNldENvb2tpZUhlYWRlcl07CiAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgdmFsdWVzLmZvckVhY2goKHZhbHVlKSB7CiAgICAgICAgX2Nvb2tpZXMuYWRkKG5ldyBDb29raWUuZnJvbVNldENvb2tpZVZhbHVlKHZhbHVlKSk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9jb29raWVzOwogIH0KCiAgYm9vbCBnZXQgaXNSZWRpcmVjdCB7CiAgICBpZiAoX2h0dHBSZXF1ZXN0Lm1ldGhvZCA9PSAiR0VUIiB8fCBfaHR0cFJlcXVlc3QubWV0aG9kID09ICJIRUFEIikgewogICAgICByZXR1cm4gc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLm1vdmVkUGVybWFuZW50bHkgfHwKICAgICAgICAgIHN0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy5mb3VuZCB8fAogICAgICAgICAgc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLnNlZU90aGVyIHx8CiAgICAgICAgICBzdGF0dXNDb2RlID09IEh0dHBTdGF0dXMudGVtcG9yYXJ5UmVkaXJlY3Q7CiAgICB9IGVsc2UgaWYgKF9odHRwUmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiKSB7CiAgICAgIHJldHVybiBzdGF0dXNDb2RlID09IEh0dHBTdGF0dXMuc2VlT3RoZXI7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiByZWRpcmVjdCgKICAgICAgW1N0cmluZyBtZXRob2QsIFVyaSB1cmwsIGJvb2wgZm9sbG93TG9vcHNdKSB7CiAgICBpZiAobWV0aG9kID09IG51bGwpIHsKICAgICAgLy8gU2V0IG1ldGhvZCBhcyBkZWZpbmVkIGJ5IFJGQyAyNjE2IHNlY3Rpb24gMTAuMy40LgogICAgICBpZiAoc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLnNlZU90aGVyICYmIF9odHRwUmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiKSB7CiAgICAgICAgbWV0aG9kID0gIkdFVCI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWV0aG9kID0gX2h0dHBSZXF1ZXN0Lm1ldGhvZDsKICAgICAgfQogICAgfQogICAgaWYgKHVybCA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBsb2NhdGlvbiA9IGhlYWRlcnMudmFsdWUoSHR0cEhlYWRlcnMubG9jYXRpb25IZWFkZXIpOwogICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJSZXNwb25zZSBoYXMgbm8gTG9jYXRpb24gaGVhZGVyIGZvciByZWRpcmVjdCIpOwogICAgICB9CiAgICAgIHVybCA9IFVyaS5wYXJzZShsb2NhdGlvbik7CiAgICB9CiAgICBpZiAoZm9sbG93TG9vcHMgIT0gdHJ1ZSkgewogICAgICBmb3IgKHZhciByZWRpcmVjdCBpbiByZWRpcmVjdHMpIHsKICAgICAgICBpZiAocmVkaXJlY3QubG9jYXRpb24gPT0gdXJsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcigKICAgICAgICAgICAgICBuZXcgUmVkaXJlY3RFeGNlcHRpb24oIlJlZGlyZWN0IGxvb3AgZGV0ZWN0ZWQiLCByZWRpcmVjdHMpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfaHR0cENsaWVudAogICAgICAgIC5fb3BlblVybEZyb21SZXF1ZXN0KG1ldGhvZCwgdXJsLCBfaHR0cFJlcXVlc3QpCiAgICAgICAgLnRoZW4oKHJlcXVlc3QpIHsKICAgICAgcmVxdWVzdC5fcmVzcG9uc2VSZWRpcmVjdHMKICAgICAgICAuLmFkZEFsbCh0aGlzLnJlZGlyZWN0cykKICAgICAgICAuLmFkZChuZXcgX1JlZGlyZWN0SW5mbyhzdGF0dXNDb2RlLCBtZXRob2QsIHVybCkpOwogICAgICByZXR1cm4gcmVxdWVzdC5jbG9zZSgpOwogICAgfSk7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBsaXN0ZW4odm9pZCBvbkRhdGEoVWludDhMaXN0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGlmIChfaW5jb21pbmcudXBncmFkZWQpIHsKICAgICAgLy8gSWYgdXBncmFkZWQsIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgJ3JlbW92ZWQnIGZvcm0gdGhlIGNsaWVudC4KICAgICAgLy8gU2luY2UgbGlzdGVuaW5nIHRvIHVwZ3JhZGVkIGRhdGEgaXMgJ2JvZ3VzJywgc2ltcGx5IGNsb3NlIGFuZAogICAgICAvLyByZXR1cm4gZW1wdHkgc3RyZWFtIHN1YnNjcmlwdGlvbi4KICAgICAgX2h0dHBSZXF1ZXN0Ll9odHRwQ2xpZW50Q29ubmVjdGlvbi5kZXN0cm95KCk7CiAgICAgIHJldHVybiBuZXcgU3RyZWFtPFVpbnQ4TGlzdD4uZW1wdHkoKS5saXN0ZW4obnVsbCwgb25Eb25lOiBvbkRvbmUpOwogICAgfQogICAgU3RyZWFtPFVpbnQ4TGlzdD4gc3RyZWFtID0gX2luY29taW5nOwogICAgaWYgKGNvbXByZXNzaW9uU3RhdGUgPT0gSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5kZWNvbXByZXNzZWQpIHsKICAgICAgc3RyZWFtID0gc3RyZWFtCiAgICAgICAgICAuY2FzdDxMaXN0PGludD4+KCkKICAgICAgICAgIC50cmFuc2Zvcm0oZ3ppcC5kZWNvZGVyKQogICAgICAgICAgLnRyYW5zZm9ybShjb25zdCBfVG9VaW50OExpc3QoKSk7CiAgICB9CiAgICByZXR1cm4gc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgRnV0dXJlPFNvY2tldD4gZGV0YWNoU29ja2V0KCkgewogICAgX2h0dHBDbGllbnQuX2Nvbm5lY3Rpb25DbG9zZWQoX2h0dHBSZXF1ZXN0Ll9odHRwQ2xpZW50Q29ubmVjdGlvbik7CiAgICByZXR1cm4gX2h0dHBSZXF1ZXN0Ll9odHRwQ2xpZW50Q29ubmVjdGlvbi5kZXRhY2hTb2NrZXQoKTsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX2h0dHBSZXF1ZXN0LmNvbm5lY3Rpb25JbmZvOwoKICBib29sIGdldCBfc2hvdWxkQXV0aGVudGljYXRlUHJveHkgewogICAgLy8gT25seSB0cnkgdG8gYXV0aGVudGljYXRlIGlmIHRoZXJlIGlzIGEgY2hhbGxlbmdlIGluIHRoZSByZXNwb25zZS4KICAgIExpc3Q8U3RyaW5nPiBjaGFsbGVuZ2UgPSBoZWFkZXJzW0h0dHBIZWFkZXJzLnByb3h5QXV0aGVudGljYXRlSGVhZGVyXTsKICAgIHJldHVybiBzdGF0dXNDb2RlID09IEh0dHBTdGF0dXMucHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkICYmCiAgICAgICAgY2hhbGxlbmdlICE9IG51bGwgJiYKICAgICAgICBjaGFsbGVuZ2UubGVuZ3RoID09IDE7CiAgfQoKICBib29sIGdldCBfc2hvdWxkQXV0aGVudGljYXRlIHsKICAgIC8vIE9ubHkgdHJ5IHRvIGF1dGhlbnRpY2F0ZSBpZiB0aGVyZSBpcyBhIGNoYWxsZW5nZSBpbiB0aGUgcmVzcG9uc2UuCiAgICBMaXN0PFN0cmluZz4gY2hhbGxlbmdlID0gaGVhZGVyc1tIdHRwSGVhZGVycy53d3dBdXRoZW50aWNhdGVIZWFkZXJdOwogICAgcmV0dXJuIHN0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy51bmF1dGhvcml6ZWQgJiYKICAgICAgICBjaGFsbGVuZ2UgIT0gbnVsbCAmJgogICAgICAgIGNoYWxsZW5nZS5sZW5ndGggPT0gMTsKICB9CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IF9hdXRoZW50aWNhdGUoYm9vbCBwcm94eUF1dGgpIHsKICAgIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IHJldHJ5KCkgewogICAgICAvLyBEcmFpbiBib2R5IGFuZCByZXRyeS4KICAgICAgcmV0dXJuIGRyYWluKCkudGhlbigoXykgewogICAgICAgIHJldHVybiBfaHR0cENsaWVudAogICAgICAgICAgICAuX29wZW5VcmxGcm9tUmVxdWVzdCgKICAgICAgICAgICAgICAgIF9odHRwUmVxdWVzdC5tZXRob2QsIF9odHRwUmVxdWVzdC51cmksIF9odHRwUmVxdWVzdCkKICAgICAgICAgICAgLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QuY2xvc2UoKSk7CiAgICAgIH0pOwogICAgfQoKICAgIExpc3Q8U3RyaW5nPiBhdXRoQ2hhbGxlbmdlKCkgewogICAgICByZXR1cm4gcHJveHlBdXRoCiAgICAgICAgICA/IGhlYWRlcnNbSHR0cEhlYWRlcnMucHJveHlBdXRoZW50aWNhdGVIZWFkZXJdCiAgICAgICAgICA6IGhlYWRlcnNbSHR0cEhlYWRlcnMud3d3QXV0aGVudGljYXRlSGVhZGVyXTsKICAgIH0KCiAgICBfQ3JlZGVudGlhbHMgZmluZENyZWRlbnRpYWxzKF9BdXRoZW50aWNhdGlvblNjaGVtZSBzY2hlbWUpIHsKICAgICAgcmV0dXJuIHByb3h5QXV0aAogICAgICAgICAgPyBfaHR0cENsaWVudC5fZmluZFByb3h5Q3JlZGVudGlhbHMoX2h0dHBSZXF1ZXN0Ll9wcm94eSwgc2NoZW1lKQogICAgICAgICAgOiBfaHR0cENsaWVudC5fZmluZENyZWRlbnRpYWxzKF9odHRwUmVxdWVzdC51cmksIHNjaGVtZSk7CiAgICB9CgogICAgdm9pZCByZW1vdmVDcmVkZW50aWFscyhfQ3JlZGVudGlhbHMgY3IpIHsKICAgICAgaWYgKHByb3h5QXV0aCkgewogICAgICAgIF9odHRwQ2xpZW50Ll9yZW1vdmVQcm94eUNyZWRlbnRpYWxzKGNyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfaHR0cENsaWVudC5fcmVtb3ZlQ3JlZGVudGlhbHMoY3IpOwogICAgICB9CiAgICB9CgogICAgRnV0dXJlIHJlcXVlc3RBdXRoZW50aWNhdGlvbihfQXV0aGVudGljYXRpb25TY2hlbWUgc2NoZW1lLCBTdHJpbmcgcmVhbG0pIHsKICAgICAgaWYgKHByb3h5QXV0aCkgewogICAgICAgIGlmIChfaHR0cENsaWVudC5fYXV0aGVudGljYXRlUHJveHkgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoZmFsc2UpOwogICAgICAgIH0KICAgICAgICB2YXIgcHJveHkgPSBfaHR0cFJlcXVlc3QuX3Byb3h5OwogICAgICAgIHJldHVybiBfaHR0cENsaWVudC5fYXV0aGVudGljYXRlUHJveHkoCiAgICAgICAgICAgIHByb3h5Lmhvc3QsIHByb3h5LnBvcnQsIHNjaGVtZS50b1N0cmluZygpLCByZWFsbSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKF9odHRwQ2xpZW50Ll9hdXRoZW50aWNhdGUgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoZmFsc2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX2h0dHBDbGllbnQuX2F1dGhlbnRpY2F0ZSgKICAgICAgICAgICAgX2h0dHBSZXF1ZXN0LnVyaSwgc2NoZW1lLnRvU3RyaW5nKCksIHJlYWxtKTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8U3RyaW5nPiBjaGFsbGVuZ2UgPSBhdXRoQ2hhbGxlbmdlKCk7CiAgICBhc3NlcnQoY2hhbGxlbmdlICE9IG51bGwgfHwgY2hhbGxlbmdlLmxlbmd0aCA9PSAxKTsKICAgIF9IZWFkZXJWYWx1ZSBoZWFkZXIgPQogICAgICAgIF9IZWFkZXJWYWx1ZS5wYXJzZShjaGFsbGVuZ2VbMF0sIHBhcmFtZXRlclNlcGFyYXRvcjogIiwiKTsKICAgIF9BdXRoZW50aWNhdGlvblNjaGVtZSBzY2hlbWUgPQogICAgICAgIG5ldyBfQXV0aGVudGljYXRpb25TY2hlbWUuZnJvbVN0cmluZyhoZWFkZXIudmFsdWUpOwogICAgU3RyaW5nIHJlYWxtID0gaGVhZGVyLnBhcmFtZXRlcnNbInJlYWxtIl07CgogICAgLy8gU2VlIGlmIGFueSBtYXRjaGluZyBjcmVkZW50aWFscyBhcmUgYXZhaWxhYmxlLgogICAgX0NyZWRlbnRpYWxzIGNyID0gZmluZENyZWRlbnRpYWxzKHNjaGVtZSk7CiAgICBpZiAoY3IgIT0gbnVsbCkgewogICAgICAvLyBGb3IgYmFzaWMgYXV0aGVudGljYXRpb24gZG9uJ3QgcmV0cnkgYWxyZWFkeSB1c2VkIGNyZWRlbnRpYWxzCiAgICAgIC8vIGFzIHRoZXkgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgcmVxdWVzdCBjYXVzaW5nCiAgICAgIC8vIHRoaXMgYXV0aGVudGljYXRlIHJlc3BvbnNlLgogICAgICBpZiAoY3Iuc2NoZW1lID09IF9BdXRoZW50aWNhdGlvblNjaGVtZS5CQVNJQyAmJiAhY3IudXNlZCkgewogICAgICAgIC8vIENyZWRlbnRpYWxzIHdoZXJlIGZvdW5kLCBwcmVwYXJlIGZvciByZXRyeWluZyB0aGUgcmVxdWVzdC4KICAgICAgICByZXR1cm4gcmV0cnkoKTsKICAgICAgfQoKICAgICAgLy8gRGlnZXN0IGF1dGhlbnRpY2F0aW9uIG9ubHkgc3VwcG9ydHMgdGhlIE1ENSBhbGdvcml0aG0uCiAgICAgIGlmIChjci5zY2hlbWUgPT0gX0F1dGhlbnRpY2F0aW9uU2NoZW1lLkRJR0VTVCAmJgogICAgICAgICAgKGhlYWRlci5wYXJhbWV0ZXJzWyJhbGdvcml0aG0iXSA9PSBudWxsIHx8CiAgICAgICAgICAgICAgaGVhZGVyLnBhcmFtZXRlcnNbImFsZ29yaXRobSJdLnRvTG93ZXJDYXNlKCkgPT0gIm1kNSIpKSB7CiAgICAgICAgaWYgKGNyLm5vbmNlID09IG51bGwgfHwgY3Iubm9uY2UgPT0gaGVhZGVyLnBhcmFtZXRlcnNbIm5vbmNlIl0pIHsKICAgICAgICAgIC8vIElmIHRoZSBub25jZSBpcyBub3Qgc2V0IHRoZW4gdGhpcyBpcyB0aGUgZmlyc3QgYXV0aGVudGljYXRlCiAgICAgICAgICAvLyByZXNwb25zZSBmb3IgdGhlc2UgY3JlZGVudGlhbHMuIFNldCB1cCBhdXRoZW50aWNhdGlvbiBzdGF0ZS4KICAgICAgICAgIGlmIChjci5ub25jZSA9PSBudWxsKSB7CiAgICAgICAgICAgIGNyCiAgICAgICAgICAgICAgLi5ub25jZSA9IGhlYWRlci5wYXJhbWV0ZXJzWyJub25jZSJdCiAgICAgICAgICAgICAgLi5hbGdvcml0aG0gPSAiTUQ1IgogICAgICAgICAgICAgIC4ucW9wID0gaGVhZGVyLnBhcmFtZXRlcnNbInFvcCJdCiAgICAgICAgICAgICAgLi5ub25jZUNvdW50ID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIC8vIENyZWRlbnRpYWxzIHdoZXJlIGZvdW5kLCBwcmVwYXJlIGZvciByZXRyeWluZyB0aGUgcmVxdWVzdC4KICAgICAgICAgIHJldHVybiByZXRyeSgpOwogICAgICAgIH0gZWxzZSBpZiAoaGVhZGVyLnBhcmFtZXRlcnNbInN0YWxlIl0gIT0gbnVsbCAmJgogICAgICAgICAgICBoZWFkZXIucGFyYW1ldGVyc1sic3RhbGUiXS50b0xvd2VyQ2FzZSgpID09ICJ0cnVlIikgewogICAgICAgICAgLy8gSWYgc3RhbGUgaXMgdHJ1ZSByZXRyeSB3aXRoIG5ldyBub25jZS4KICAgICAgICAgIGNyLm5vbmNlID0gaGVhZGVyLnBhcmFtZXRlcnNbIm5vbmNlIl07CiAgICAgICAgICAvLyBDcmVkZW50aWFscyB3aGVyZSBmb3VuZCwgcHJlcGFyZSBmb3IgcmV0cnlpbmcgdGhlIHJlcXVlc3QuCiAgICAgICAgICByZXR1cm4gcmV0cnkoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBBc2sgZm9yIG1vcmUgY3JlZGVudGlhbHMgaWYgbm9uZSBmb3VuZCBvciB0aGUgb25lIGZvdW5kIGhhcwogICAgLy8gYWxyZWFkeSBiZWVuIHVzZWQuIElmIGl0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpdCBtdXN0IG5vdyBiZQogICAgLy8gaW52YWxpZCBhbmQgaXMgcmVtb3ZlZC4KICAgIGlmIChjciAhPSBudWxsKSB7CiAgICAgIHJlbW92ZUNyZWRlbnRpYWxzKGNyKTsKICAgICAgY3IgPSBudWxsOwogICAgfQogICAgcmV0dXJuIHJlcXVlc3RBdXRoZW50aWNhdGlvbihzY2hlbWUsIHJlYWxtKS50aGVuKChjcmVkc0F2YWlsYWJsZSkgewogICAgICBpZiAoY3JlZHNBdmFpbGFibGUpIHsKICAgICAgICBjciA9IF9odHRwQ2xpZW50Ll9maW5kQ3JlZGVudGlhbHMoX2h0dHBSZXF1ZXN0LnVyaSwgc2NoZW1lKTsKICAgICAgICByZXR1cm4gcmV0cnkoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBObyBjcmVkZW50aWFscyBhdmFpbGFibGUsIGNvbXBsZXRlIHdpdGggb3JpZ2luYWwgcmVzcG9uc2UuCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0pOwogIH0KfQoKY2xhc3MgX1RvVWludDhMaXN0IGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgVWludDhMaXN0PiB7CiAgY29uc3QgX1RvVWludDhMaXN0KCk7CgogIFVpbnQ4TGlzdCBjb252ZXJ0KExpc3Q8aW50PiBpbnB1dCkgPT4gVWludDhMaXN0LmZyb21MaXN0KGlucHV0KTsKCiAgU2luazxMaXN0PGludD4+IHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxVaW50OExpc3Q+IHNpbmspIHsKICAgIHJldHVybiBfVWludDhMaXN0Q29udmVyc2lvblNpbmsoc2luayk7CiAgfQp9CgpjbGFzcyBfVWludDhMaXN0Q29udmVyc2lvblNpbmsgaW1wbGVtZW50cyBTaW5rPExpc3Q8aW50Pj4gewogIGNvbnN0IF9VaW50OExpc3RDb252ZXJzaW9uU2luayh0aGlzLl90YXJnZXQpOwoKICBmaW5hbCBTaW5rPFVpbnQ4TGlzdD4gX3RhcmdldDsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIF90YXJnZXQuYWRkKFVpbnQ4TGlzdC5mcm9tTGlzdChkYXRhKSk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3RhcmdldC5jbG9zZSgpOwogIH0KfQoKY2xhc3MgX1N0cmVhbVNpbmtJbXBsPFQ+IGltcGxlbWVudHMgU3RyZWFtU2luazxUPiB7CiAgZmluYWwgU3RyZWFtQ29uc3VtZXI8VD4gX3RhcmdldDsKICBmaW5hbCBDb21wbGV0ZXIgX2RvbmVDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgU3RyZWFtQ29udHJvbGxlcjxUPiBfY29udHJvbGxlckluc3RhbmNlOwogIENvbXBsZXRlciBfY29udHJvbGxlckNvbXBsZXRlcjsKICBib29sIF9pc0Nsb3NlZCA9IGZhbHNlOwogIGJvb2wgX2lzQm91bmQgPSBmYWxzZTsKICBib29sIF9oYXNFcnJvciA9IGZhbHNlOwoKICBfU3RyZWFtU2lua0ltcGwodGhpcy5fdGFyZ2V0KTsKCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBfY29udHJvbGxlci5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc3RyZWFtKSB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYWxyZWFkeSBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgX2lzQm91bmQgPSB0cnVlOwogICAgaWYgKF9oYXNFcnJvcikgcmV0dXJuIGRvbmU7CiAgICAvLyBXYWl0IGZvciBhbnkgc3luYyBvcGVyYXRpb25zIHRvIGNvbXBsZXRlLgogICAgRnV0dXJlIHRhcmdldEFkZFN0cmVhbSgpIHsKICAgICAgcmV0dXJuIF90YXJnZXQuYWRkU3RyZWFtKHN0cmVhbSkud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgICBfaXNCb3VuZCA9IGZhbHNlOwogICAgICB9KTsKICAgIH0KCiAgICBpZiAoX2NvbnRyb2xsZXJJbnN0YW5jZSA9PSBudWxsKSByZXR1cm4gdGFyZ2V0QWRkU3RyZWFtKCk7CiAgICB2YXIgZnV0dXJlID0gX2NvbnRyb2xsZXJDb21wbGV0ZXIuZnV0dXJlOwogICAgX2NvbnRyb2xsZXJJbnN0YW5jZS5jbG9zZSgpOwogICAgcmV0dXJuIGZ1dHVyZS50aGVuKChfKSA9PiB0YXJnZXRBZGRTdHJlYW0oKSk7CiAgfQoKICBGdXR1cmUgZmx1c2goKSB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYm91bmQgdG8gYSBzdHJlYW0iKTsKICAgIH0KICAgIGlmIChfY29udHJvbGxlckluc3RhbmNlID09IG51bGwpIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKHRoaXMpOwogICAgLy8gQWRkaW5nIGFuIGVtcHR5IHN0cmVhbS1jb250cm9sbGVyIHdpbGwgcmV0dXJuIGEgZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZQogICAgLy8gd2hlbiBhbGwgZGF0YSBpcyBkb25lLgogICAgX2lzQm91bmQgPSB0cnVlOwogICAgdmFyIGZ1dHVyZSA9IF9jb250cm9sbGVyQ29tcGxldGVyLmZ1dHVyZTsKICAgIF9jb250cm9sbGVySW5zdGFuY2UuY2xvc2UoKTsKICAgIHJldHVybiBmdXR1cmUud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgX2lzQm91bmQgPSBmYWxzZTsKICAgIH0pOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGJvdW5kIHRvIGEgc3RyZWFtIik7CiAgICB9CiAgICBpZiAoIV9pc0Nsb3NlZCkgewogICAgICBfaXNDbG9zZWQgPSB0cnVlOwogICAgICBpZiAoX2NvbnRyb2xsZXJJbnN0YW5jZSAhPSBudWxsKSB7CiAgICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZS5jbG9zZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9jbG9zZVRhcmdldCgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZvaWQgX2Nsb3NlVGFyZ2V0KCkgewogICAgX3RhcmdldC5jbG9zZSgpLnRoZW4oX2NvbXBsZXRlRG9uZVZhbHVlLCBvbkVycm9yOiBfY29tcGxldGVEb25lRXJyb3IpOwogIH0KCiAgRnV0dXJlIGdldCBkb25lID0+IF9kb25lQ29tcGxldGVyLmZ1dHVyZTsKCiAgdm9pZCBfY29tcGxldGVEb25lVmFsdWUodmFsdWUpIHsKICAgIGlmICghX2RvbmVDb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGUodmFsdWUpOwogICAgfQogIH0KCiAgdm9pZCBfY29tcGxldGVEb25lRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgaWYgKCFfZG9uZUNvbXBsZXRlci5pc0NvbXBsZXRlZCkgewogICAgICBfaGFzRXJyb3IgPSB0cnVlOwogICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0KICB9CgogIFN0cmVhbUNvbnRyb2xsZXI8VD4gZ2V0IF9jb250cm9sbGVyIHsKICAgIGlmIChfaXNCb3VuZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBjbG9zZWQiKTsKICAgIH0KICAgIGlmIChfY29udHJvbGxlckluc3RhbmNlID09IG51bGwpIHsKICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZSA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFQ+KHN5bmM6IHRydWUpOwogICAgICBfY29udHJvbGxlckNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgICAgX3RhcmdldC5hZGRTdHJlYW0oX2NvbnRyb2xsZXIuc3RyZWFtKS50aGVuKChfKSB7CiAgICAgICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgICAgICAvLyBBIG5ldyBzdHJlYW0gdGFrZXMgb3ZlciAtIGZvcndhcmQgdmFsdWVzIHRvIHRoYXQgc3RyZWFtLgogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIuY29tcGxldGUodGhpcyk7CiAgICAgICAgICBfY29udHJvbGxlckNvbXBsZXRlciA9IG51bGw7CiAgICAgICAgICBfY29udHJvbGxlckluc3RhbmNlID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTm8gbmV3IHN0cmVhbSwgLmNsb3NlIHdhcyBjYWxsZWQuIENsb3NlIF90YXJnZXQuCiAgICAgICAgICBfY2xvc2VUYXJnZXQoKTsKICAgICAgICB9CiAgICAgIH0sIG9uRXJyb3I6IChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICAgIGlmIChfaXNCb3VuZCkgewogICAgICAgICAgLy8gQSBuZXcgc3RyZWFtIHRha2VzIG92ZXIgLSBmb3J3YXJkIGVycm9ycyB0byB0aGF0IHN0cmVhbS4KICAgICAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIgPSBudWxsOwogICAgICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZSA9IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE5vIG5ldyBzdHJlYW0uIE5vIG5lZWQgdG8gY2xvc2UgdGFyZ2V0LCBhcyBpdCBoYXMgYWxyZWFkeQogICAgICAgICAgLy8gZmFpbGVkLgogICAgICAgICAgX2NvbXBsZXRlRG9uZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9jb250cm9sbGVySW5zdGFuY2U7CiAgfQp9CgpjbGFzcyBfSU9TaW5rSW1wbCBleHRlbmRzIF9TdHJlYW1TaW5rSW1wbDxMaXN0PGludD4+IGltcGxlbWVudHMgSU9TaW5rIHsKICBFbmNvZGluZyBfZW5jb2Rpbmc7CiAgYm9vbCBfZW5jb2RpbmdNdXRhYmxlID0gdHJ1ZTsKCiAgX0lPU2lua0ltcGwoU3RyZWFtQ29uc3VtZXI8TGlzdDxpbnQ+PiB0YXJnZXQsIHRoaXMuX2VuY29kaW5nKSA6IHN1cGVyKHRhcmdldCk7CgogIEVuY29kaW5nIGdldCBlbmNvZGluZyA9PiBfZW5jb2Rpbmc7CgogIHZvaWQgc2V0IGVuY29kaW5nKEVuY29kaW5nIHZhbHVlKSB7CiAgICBpZiAoIV9lbmNvZGluZ011dGFibGUpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIklPU2luayBlbmNvZGluZyBpcyBub3QgbXV0YWJsZSIpOwogICAgfQogICAgX2VuY29kaW5nID0gdmFsdWU7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIFN0cmluZyBzdHJpbmcgPSAnJG9iaic7CiAgICBpZiAoc3RyaW5nLmlzRW1wdHkpIHJldHVybjsKICAgIGFkZChfZW5jb2RpbmcuZW5jb2RlKHN0cmluZykpOwogIH0KCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBvYmplY3RzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICBpZiAoc2VwYXJhdG9yLmlzRW1wdHkpIHsKICAgICAgZG8gewogICAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIHdyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgd3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG9iamVjdCA9ICIiXSkgewogICAgd3JpdGUob2JqZWN0KTsKICAgIHdyaXRlKCJcbiIpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgd3JpdGUobmV3IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IdHRwT3V0Ym91bmRNZXNzYWdlPFQ+IGV4dGVuZHMgX0lPU2lua0ltcGwgewogIC8vIFVzZWQgdG8gbWFyayB3aGVuIHRoZSBib2R5IHNob3VsZCBiZSB3cml0dGVuLiBUaGlzIGlzIHVzZWQgZm9yIEhFQUQKICAvLyByZXF1ZXN0cyBhbmQgaW4gZXJyb3IgaGFuZGxpbmcuCiAgYm9vbCBfZW5jb2RpbmdTZXQgPSBmYWxzZTsKCiAgYm9vbCBfYnVmZmVyT3V0cHV0ID0gdHJ1ZTsKCiAgZmluYWwgVXJpIF91cmk7CiAgZmluYWwgX0h0dHBPdXRnb2luZyBfb3V0Z29pbmc7CgogIGZpbmFsIF9IdHRwSGVhZGVycyBoZWFkZXJzOwoKICBfSHR0cE91dGJvdW5kTWVzc2FnZShVcmkgdXJpLCBTdHJpbmcgcHJvdG9jb2xWZXJzaW9uLCBfSHR0cE91dGdvaW5nIG91dGdvaW5nLAogICAgICB7X0h0dHBIZWFkZXJzIGluaXRpYWxIZWFkZXJzfSkKICAgICAgOiBfdXJpID0gdXJpLAogICAgICAgIGhlYWRlcnMgPSBuZXcgX0h0dHBIZWFkZXJzKHByb3RvY29sVmVyc2lvbiwKICAgICAgICAgICAgZGVmYXVsdFBvcnRGb3JTY2hlbWU6IHVyaS5zY2hlbWUgPT0gJ2h0dHBzJwogICAgICAgICAgICAgICAgPyBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwc1BvcnQKICAgICAgICAgICAgICAgIDogSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQsCiAgICAgICAgICAgIGluaXRpYWxIZWFkZXJzOiBpbml0aWFsSGVhZGVycyksCiAgICAgICAgX291dGdvaW5nID0gb3V0Z29pbmcsCiAgICAgICAgc3VwZXIob3V0Z29pbmcsIG51bGwpIHsKICAgIF9vdXRnb2luZy5vdXRib3VuZCA9IHRoaXM7CiAgICBfZW5jb2RpbmdNdXRhYmxlID0gZmFsc2U7CiAgfQoKICBpbnQgZ2V0IGNvbnRlbnRMZW5ndGggPT4gaGVhZGVycy5jb250ZW50TGVuZ3RoOwogIHZvaWQgc2V0IGNvbnRlbnRMZW5ndGgoaW50IGNvbnRlbnRMZW5ndGgpIHsKICAgIGhlYWRlcnMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGg7CiAgfQoKICBib29sIGdldCBwZXJzaXN0ZW50Q29ubmVjdGlvbiA9PiBoZWFkZXJzLnBlcnNpc3RlbnRDb25uZWN0aW9uOwogIHZvaWQgc2V0IHBlcnNpc3RlbnRDb25uZWN0aW9uKGJvb2wgcCkgewogICAgaGVhZGVycy5wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHA7CiAgfQoKICBib29sIGdldCBidWZmZXJPdXRwdXQgPT4gX2J1ZmZlck91dHB1dDsKICB2b2lkIHNldCBidWZmZXJPdXRwdXQoYm9vbCBidWZmZXJPdXRwdXQpIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJIZWFkZXIgYWxyZWFkeSBzZW50Iik7CiAgICBfYnVmZmVyT3V0cHV0ID0gYnVmZmVyT3V0cHV0OwogIH0KCiAgRW5jb2RpbmcgZ2V0IGVuY29kaW5nIHsKICAgIGlmIChfZW5jb2RpbmdTZXQgJiYgX291dGdvaW5nLmhlYWRlcnNXcml0dGVuKSB7CiAgICAgIHJldHVybiBfZW5jb2Rpbmc7CiAgICB9CiAgICB2YXIgY2hhcnNldDsKICAgIGlmIChoZWFkZXJzLmNvbnRlbnRUeXBlICE9IG51bGwgJiYgaGVhZGVycy5jb250ZW50VHlwZS5jaGFyc2V0ICE9IG51bGwpIHsKICAgICAgY2hhcnNldCA9IGhlYWRlcnMuY29udGVudFR5cGUuY2hhcnNldDsKICAgIH0gZWxzZSB7CiAgICAgIGNoYXJzZXQgPSAiaXNvLTg4NTktMSI7CiAgICB9CiAgICByZXR1cm4gRW5jb2RpbmcuZ2V0QnlOYW1lKGNoYXJzZXQpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGlmIChkYXRhLmxlbmd0aCA9PSAwKSByZXR1cm47CiAgICBzdXBlci5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIGlmICghX2VuY29kaW5nU2V0KSB7CiAgICAgIF9lbmNvZGluZyA9IGVuY29kaW5nOwogICAgICBfZW5jb2RpbmdTZXQgPSB0cnVlOwogICAgfQogICAgc3VwZXIud3JpdGUob2JqKTsKICB9CgogIHZvaWQgX3dyaXRlSGVhZGVyKCk7CgogIGJvb2wgZ2V0IF9pc0Nvbm5lY3Rpb25DbG9zZWQgPT4gZmFsc2U7Cn0KCmNsYXNzIF9IdHRwUmVzcG9uc2UgZXh0ZW5kcyBfSHR0cE91dGJvdW5kTWVzc2FnZTxIdHRwUmVzcG9uc2U+CiAgICBpbXBsZW1lbnRzIEh0dHBSZXNwb25zZSB7CiAgaW50IF9zdGF0dXNDb2RlID0gMjAwOwogIFN0cmluZyBfcmVhc29uUGhyYXNlOwogIExpc3Q8Q29va2llPiBfY29va2llczsKICBfSHR0cFJlcXVlc3QgX2h0dHBSZXF1ZXN0OwogIER1cmF0aW9uIF9kZWFkbGluZTsKICBUaW1lciBfZGVhZGxpbmVUaW1lcjsKCiAgX0h0dHBSZXNwb25zZShVcmkgdXJpLCBTdHJpbmcgcHJvdG9jb2xWZXJzaW9uLCBfSHR0cE91dGdvaW5nIG91dGdvaW5nLAogICAgICBIdHRwSGVhZGVycyBkZWZhdWx0SGVhZGVycywgU3RyaW5nIHNlcnZlckhlYWRlcikKICAgICAgOiBzdXBlcih1cmksIHByb3RvY29sVmVyc2lvbiwgb3V0Z29pbmcsIGluaXRpYWxIZWFkZXJzOiBkZWZhdWx0SGVhZGVycykgewogICAgaWYgKHNlcnZlckhlYWRlciAhPSBudWxsKSBoZWFkZXJzLnNldCgnc2VydmVyJywgc2VydmVySGVhZGVyKTsKICB9CgogIGJvb2wgZ2V0IF9pc0Nvbm5lY3Rpb25DbG9zZWQgPT4gX2h0dHBSZXF1ZXN0Ll9odHRwQ29ubmVjdGlvbi5faXNDbG9zaW5nOwoKICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXMgewogICAgaWYgKF9jb29raWVzID09IG51bGwpIF9jb29raWVzID0gbmV3IExpc3Q8Q29va2llPigpOwogICAgcmV0dXJuIF9jb29raWVzOwogIH0KCiAgaW50IGdldCBzdGF0dXNDb2RlID0+IF9zdGF0dXNDb2RlOwogIHZvaWQgc2V0IHN0YXR1c0NvZGUoaW50IHN0YXR1c0NvZGUpIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJIZWFkZXIgYWxyZWFkeSBzZW50Iik7CiAgICBfc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7CiAgfQoKICBTdHJpbmcgZ2V0IHJlYXNvblBocmFzZSA9PiBfZmluZFJlYXNvblBocmFzZShzdGF0dXNDb2RlKTsKICB2b2lkIHNldCByZWFzb25QaHJhc2UoU3RyaW5nIHJlYXNvblBocmFzZSkgewogICAgaWYgKF9vdXRnb2luZy5oZWFkZXJzV3JpdHRlbikgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkhlYWRlciBhbHJlYWR5IHNlbnQiKTsKICAgIF9yZWFzb25QaHJhc2UgPSByZWFzb25QaHJhc2U7CiAgfQoKICBGdXR1cmUgcmVkaXJlY3QoVXJpIGxvY2F0aW9uLCB7aW50IHN0YXR1czogSHR0cFN0YXR1cy5tb3ZlZFRlbXBvcmFyaWx5fSkgewogICAgaWYgKF9vdXRnb2luZy5oZWFkZXJzV3JpdHRlbikgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkhlYWRlciBhbHJlYWR5IHNlbnQiKTsKICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7CiAgICBoZWFkZXJzLnNldCgibG9jYXRpb24iLCBsb2NhdGlvbi50b1N0cmluZygpKTsKICAgIHJldHVybiBjbG9zZSgpOwogIH0KCiAgRnV0dXJlPFNvY2tldD4gZGV0YWNoU29ja2V0KHtib29sIHdyaXRlSGVhZGVyczogdHJ1ZX0pIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJIZWFkZXJzIGFscmVhZHkgc2VudCIpOwogICAgZGVhZGxpbmUgPSBudWxsOyAvLyBCZSBzdXJlIHRvIHN0b3AgYW55IGRlYWRsaW5lLgogICAgdmFyIGZ1dHVyZSA9IF9odHRwUmVxdWVzdC5faHR0cENvbm5lY3Rpb24uZGV0YWNoU29ja2V0KCk7CiAgICBpZiAod3JpdGVIZWFkZXJzKSB7CiAgICAgIHZhciBoZWFkZXJzRnV0dXJlID0KICAgICAgICAgIF9vdXRnb2luZy53cml0ZUhlYWRlcnMoZHJhaW5SZXF1ZXN0OiBmYWxzZSwgc2V0T3V0Z29pbmc6IGZhbHNlKTsKICAgICAgYXNzZXJ0KGhlYWRlcnNGdXR1cmUgPT0gbnVsbCk7CiAgICB9IGVsc2UgewogICAgICAvLyBJbWl0YXRlIGhhdmluZyB3cml0dGVuIHRoZSBoZWFkZXJzLgogICAgICBfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4gPSB0cnVlOwogICAgfQogICAgLy8gQ2xvc2UgY29ubmVjdGlvbiBzbyB0aGUgc29ja2V0IGlzICdmcmVlJy4KICAgIGNsb3NlKCk7CiAgICBkb25lLmNhdGNoRXJyb3IoKF8pIHsKICAgICAgLy8gQ2F0Y2ggYW55IGVycm9yIG9uIGRvbmUsIGFzIHRoZXkgYXV0b21hdGljYWxseSB3aWxsIGJlCiAgICAgIC8vIHByb3BhZ2F0ZWQgdG8gdGhlIHdlYnNvY2tldC4KICAgIH0pOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX2h0dHBSZXF1ZXN0LmNvbm5lY3Rpb25JbmZvOwoKICBEdXJhdGlvbiBnZXQgZGVhZGxpbmUgPT4gX2RlYWRsaW5lOwoKICB2b2lkIHNldCBkZWFkbGluZShEdXJhdGlvbiBkKSB7CiAgICBpZiAoX2RlYWRsaW5lVGltZXIgIT0gbnVsbCkgX2RlYWRsaW5lVGltZXIuY2FuY2VsKCk7CiAgICBfZGVhZGxpbmUgPSBkOwoKICAgIGlmIChfZGVhZGxpbmUgPT0gbnVsbCkgcmV0dXJuOwogICAgX2RlYWRsaW5lVGltZXIgPSBuZXcgVGltZXIoX2RlYWRsaW5lLCAoKSB7CiAgICAgIF9odHRwUmVxdWVzdC5faHR0cENvbm5lY3Rpb24uZGVzdHJveSgpOwogICAgfSk7CiAgfQoKICB2b2lkIF93cml0ZUhlYWRlcigpIHsKICAgIEJ5dGVzQnVpbGRlciBidWZmZXIgPSBuZXcgX0NvcHlpbmdCeXRlc0J1aWxkZXIoX09VVEdPSU5HX0JVRkZFUl9TSVpFKTsKCiAgICAvLyBXcml0ZSBzdGF0dXMgbGluZS4KICAgIGlmIChoZWFkZXJzLnByb3RvY29sVmVyc2lvbiA9PSAiMS4xIikgewogICAgICBidWZmZXIuYWRkKF9Db25zdC5IVFRQMTEpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyLmFkZChfQ29uc3QuSFRUUDEwKTsKICAgIH0KICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5TUCk7CiAgICBidWZmZXIuYWRkKHN0YXR1c0NvZGUudG9TdHJpbmcoKS5jb2RlVW5pdHMpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLlNQKTsKICAgIGJ1ZmZlci5hZGQocmVhc29uUGhyYXNlLmNvZGVVbml0cyk7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKCiAgICB2YXIgc2Vzc2lvbiA9IF9odHRwUmVxdWVzdC5fc2Vzc2lvbjsKICAgIGlmIChzZXNzaW9uICE9IG51bGwgJiYgIXNlc3Npb24uX2Rlc3Ryb3llZCkgewogICAgICAvLyBNYXJrIGFzIG5vdCBuZXcuCiAgICAgIHNlc3Npb24uX2lzTmV3ID0gZmFsc2U7CiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IHNlbmQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZC4KICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoY29va2llc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCkgPT0gX0RBUlRfU0VTU0lPTl9JRCkgewogICAgICAgICAgY29va2llc1tpXQogICAgICAgICAgICAuLnZhbHVlID0gc2Vzc2lvbi5pZAogICAgICAgICAgICAuLmh0dHBPbmx5ID0gdHJ1ZQogICAgICAgICAgICAuLnBhdGggPSAiLyI7CiAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghZm91bmQpIHsKICAgICAgICB2YXIgY29va2llID0gbmV3IENvb2tpZShfREFSVF9TRVNTSU9OX0lELCBzZXNzaW9uLmlkKTsKICAgICAgICBjb29raWVzLmFkZChjb29raWUKICAgICAgICAgIC4uaHR0cE9ubHkgPSB0cnVlCiAgICAgICAgICAuLnBhdGggPSAiLyIpOwogICAgICB9CiAgICB9CiAgICAvLyBBZGQgYWxsIHRoZSBjb29raWVzIHNldCB0byB0aGUgaGVhZGVycy4KICAgIGlmIChfY29va2llcyAhPSBudWxsKSB7CiAgICAgIF9jb29raWVzLmZvckVhY2goKGNvb2tpZSkgewogICAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLnNldENvb2tpZUhlYWRlciwgY29va2llKTsKICAgICAgfSk7CiAgICB9CgogICAgaGVhZGVycy5fZmluYWxpemUoKTsKCiAgICAvLyBXcml0ZSBoZWFkZXJzLgogICAgaGVhZGVycy5fYnVpbGQoYnVmZmVyKTsKICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5DUik7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuTEYpOwogICAgVWludDhMaXN0IGhlYWRlckJ5dGVzID0gYnVmZmVyLnRha2VCeXRlcygpOwogICAgX291dGdvaW5nLnNldEhlYWRlcihoZWFkZXJCeXRlcywgaGVhZGVyQnl0ZXMubGVuZ3RoKTsKICB9CgogIFN0cmluZyBfZmluZFJlYXNvblBocmFzZShpbnQgc3RhdHVzQ29kZSkgewogICAgaWYgKF9yZWFzb25QaHJhc2UgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3JlYXNvblBocmFzZTsKICAgIH0KCiAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKICAgICAgY2FzZSBIdHRwU3RhdHVzLmNvbnRpbnVlXzoKICAgICAgICByZXR1cm4gIkNvbnRpbnVlIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnN3aXRjaGluZ1Byb3RvY29sczoKICAgICAgICByZXR1cm4gIlN3aXRjaGluZyBQcm90b2NvbHMiOwogICAgICBjYXNlIEh0dHBTdGF0dXMub2s6CiAgICAgICAgcmV0dXJuICJPSyI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5jcmVhdGVkOgogICAgICAgIHJldHVybiAiQ3JlYXRlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5hY2NlcHRlZDoKICAgICAgICByZXR1cm4gIkFjY2VwdGVkIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoKICAgICAgICByZXR1cm4gIk5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm5vQ29udGVudDoKICAgICAgICByZXR1cm4gIk5vIENvbnRlbnQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVzZXRDb250ZW50OgogICAgICAgIHJldHVybiAiUmVzZXQgQ29udGVudCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5wYXJ0aWFsQ29udGVudDoKICAgICAgICByZXR1cm4gIlBhcnRpYWwgQ29udGVudCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5tdWx0aXBsZUNob2ljZXM6CiAgICAgICAgcmV0dXJuICJNdWx0aXBsZSBDaG9pY2VzIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm1vdmVkUGVybWFuZW50bHk6CiAgICAgICAgcmV0dXJuICJNb3ZlZCBQZXJtYW5lbnRseSI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5mb3VuZDoKICAgICAgICByZXR1cm4gIkZvdW5kIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnNlZU90aGVyOgogICAgICAgIHJldHVybiAiU2VlIE90aGVyIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm5vdE1vZGlmaWVkOgogICAgICAgIHJldHVybiAiTm90IE1vZGlmaWVkIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnVzZVByb3h5OgogICAgICAgIHJldHVybiAiVXNlIFByb3h5IjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnRlbXBvcmFyeVJlZGlyZWN0OgogICAgICAgIHJldHVybiAiVGVtcG9yYXJ5IFJlZGlyZWN0IjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLmJhZFJlcXVlc3Q6CiAgICAgICAgcmV0dXJuICJCYWQgUmVxdWVzdCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy51bmF1dGhvcml6ZWQ6CiAgICAgICAgcmV0dXJuICJVbmF1dGhvcml6ZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucGF5bWVudFJlcXVpcmVkOgogICAgICAgIHJldHVybiAiUGF5bWVudCBSZXF1aXJlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5mb3JiaWRkZW46CiAgICAgICAgcmV0dXJuICJGb3JiaWRkZW4iOwogICAgICBjYXNlIEh0dHBTdGF0dXMubm90Rm91bmQ6CiAgICAgICAgcmV0dXJuICJOb3QgRm91bmQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMubWV0aG9kTm90QWxsb3dlZDoKICAgICAgICByZXR1cm4gIk1ldGhvZCBOb3QgQWxsb3dlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5ub3RBY2NlcHRhYmxlOgogICAgICAgIHJldHVybiAiTm90IEFjY2VwdGFibGUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOgogICAgICAgIHJldHVybiAiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVxdWVzdFRpbWVvdXQ6CiAgICAgICAgcmV0dXJuICJSZXF1ZXN0IFRpbWUtb3V0IjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLmNvbmZsaWN0OgogICAgICAgIHJldHVybiAiQ29uZmxpY3QiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuZ29uZToKICAgICAgICByZXR1cm4gIkdvbmUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMubGVuZ3RoUmVxdWlyZWQ6CiAgICAgICAgcmV0dXJuICJMZW5ndGggUmVxdWlyZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucHJlY29uZGl0aW9uRmFpbGVkOgogICAgICAgIHJldHVybiAiUHJlY29uZGl0aW9uIEZhaWxlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5yZXF1ZXN0RW50aXR5VG9vTGFyZ2U6CiAgICAgICAgcmV0dXJuICJSZXF1ZXN0IEVudGl0eSBUb28gTGFyZ2UiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVxdWVzdFVyaVRvb0xvbmc6CiAgICAgICAgcmV0dXJuICJSZXF1ZXN0LVVSSSBUb28gTG9uZyI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy51bnN1cHBvcnRlZE1lZGlhVHlwZToKICAgICAgICByZXR1cm4gIlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZToKICAgICAgICByZXR1cm4gIlJlcXVlc3RlZCByYW5nZSBub3Qgc2F0aXNmaWFibGUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuZXhwZWN0YXRpb25GYWlsZWQ6CiAgICAgICAgcmV0dXJuICJFeHBlY3RhdGlvbiBGYWlsZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuaW50ZXJuYWxTZXJ2ZXJFcnJvcjoKICAgICAgICByZXR1cm4gIkludGVybmFsIFNlcnZlciBFcnJvciI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5ub3RJbXBsZW1lbnRlZDoKICAgICAgICByZXR1cm4gIk5vdCBJbXBsZW1lbnRlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5iYWRHYXRld2F5OgogICAgICAgIHJldHVybiAiQmFkIEdhdGV3YXkiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuc2VydmljZVVuYXZhaWxhYmxlOgogICAgICAgIHJldHVybiAiU2VydmljZSBVbmF2YWlsYWJsZSI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5nYXRld2F5VGltZW91dDoKICAgICAgICByZXR1cm4gIkdhdGV3YXkgVGltZS1vdXQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuaHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6CiAgICAgICAgcmV0dXJuICJIdHRwIFZlcnNpb24gbm90IHN1cHBvcnRlZCI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICJTdGF0dXMgJHN0YXR1c0NvZGUiOwogICAgfQogIH0KfQoKY2xhc3MgX0h0dHBDbGllbnRSZXF1ZXN0IGV4dGVuZHMgX0h0dHBPdXRib3VuZE1lc3NhZ2U8SHR0cENsaWVudFJlc3BvbnNlPgogICAgaW1wbGVtZW50cyBIdHRwQ2xpZW50UmVxdWVzdCB7CiAgZmluYWwgU3RyaW5nIG1ldGhvZDsKICBmaW5hbCBVcmkgdXJpOwogIGZpbmFsIExpc3Q8Q29va2llPiBjb29raWVzID0gbmV3IExpc3Q8Q29va2llPigpOwoKICAvLyBUaGUgSHR0cENsaWVudCB0aGlzIHJlcXVlc3QgYmVsb25ncyB0by4KICBmaW5hbCBfSHR0cENsaWVudCBfaHR0cENsaWVudDsKICBmaW5hbCBfSHR0cENsaWVudENvbm5lY3Rpb24gX2h0dHBDbGllbnRDb25uZWN0aW9uOwoKICBmaW5hbCBDb21wbGV0ZXI8SHR0cENsaWVudFJlc3BvbnNlPiBfcmVzcG9uc2VDb21wbGV0ZXIgPQogICAgICBuZXcgQ29tcGxldGVyPEh0dHBDbGllbnRSZXNwb25zZT4oKTsKCiAgZmluYWwgX1Byb3h5IF9wcm94eTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXNwb25zZT4gX3Jlc3BvbnNlOwoKICAvLyBUT0RPKGFqb2huc2VuKTogR2V0IGRlZmF1bHQgdmFsdWUgZnJvbSBjbGllbnQ/CiAgYm9vbCBfZm9sbG93UmVkaXJlY3RzID0gdHJ1ZTsKCiAgaW50IF9tYXhSZWRpcmVjdHMgPSA1OwoKICBMaXN0PFJlZGlyZWN0SW5mbz4gX3Jlc3BvbnNlUmVkaXJlY3RzID0gW107CgogIF9IdHRwQ2xpZW50UmVxdWVzdChfSHR0cE91dGdvaW5nIG91dGdvaW5nLCBVcmkgdXJpLCB0aGlzLm1ldGhvZCwgdGhpcy5fcHJveHksCiAgICAgIHRoaXMuX2h0dHBDbGllbnQsIHRoaXMuX2h0dHBDbGllbnRDb25uZWN0aW9uKQogICAgICA6IHVyaSA9IHVyaSwKICAgICAgICBzdXBlcih1cmksICIxLjEiLCBvdXRnb2luZykgewogICAgLy8gR0VUIGFuZCBIRUFEIGhhdmUgJ2NvbnRlbnQtbGVuZ3RoOiAwJyBieSBkZWZhdWx0LgogICAgaWYgKG1ldGhvZCA9PSAiR0VUIiB8fCBtZXRob2QgPT0gIkhFQUQiKSB7CiAgICAgIGNvbnRlbnRMZW5ndGggPSAwOwogICAgfSBlbHNlIHsKICAgICAgaGVhZGVycy5jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IHRydWU7CiAgICB9CiAgfQoKICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBnZXQgZG9uZSB7CiAgICBpZiAoX3Jlc3BvbnNlID09IG51bGwpIHsKICAgICAgX3Jlc3BvbnNlID0KICAgICAgICAgIEZ1dHVyZS53YWl0KFtfcmVzcG9uc2VDb21wbGV0ZXIuZnV0dXJlLCBzdXBlci5kb25lXSwgZWFnZXJFcnJvcjogdHJ1ZSkKICAgICAgICAgICAgICAudGhlbigobGlzdCkgPT4gbGlzdFswXSk7CiAgICB9CiAgICByZXR1cm4gX3Jlc3BvbnNlOwogIH0KCiAgRnV0dXJlPEh0dHBDbGllbnRSZXNwb25zZT4gY2xvc2UoKSB7CiAgICBzdXBlci5jbG9zZSgpOwogICAgcmV0dXJuIGRvbmU7CiAgfQoKICBpbnQgZ2V0IG1heFJlZGlyZWN0cyA9PiBfbWF4UmVkaXJlY3RzOwogIHZvaWQgc2V0IG1heFJlZGlyZWN0cyhpbnQgbWF4UmVkaXJlY3RzKSB7CiAgICBpZiAoX291dGdvaW5nLmhlYWRlcnNXcml0dGVuKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiUmVxdWVzdCBhbHJlYWR5IHNlbnQiKTsKICAgIF9tYXhSZWRpcmVjdHMgPSBtYXhSZWRpcmVjdHM7CiAgfQoKICBib29sIGdldCBmb2xsb3dSZWRpcmVjdHMgPT4gX2ZvbGxvd1JlZGlyZWN0czsKICB2b2lkIHNldCBmb2xsb3dSZWRpcmVjdHMoYm9vbCBmb2xsb3dSZWRpcmVjdHMpIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJSZXF1ZXN0IGFscmVhZHkgc2VudCIpOwogICAgX2ZvbGxvd1JlZGlyZWN0cyA9IGZvbGxvd1JlZGlyZWN0czsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX2h0dHBDbGllbnRDb25uZWN0aW9uLmNvbm5lY3Rpb25JbmZvOwoKICB2b2lkIF9vbkluY29taW5nKF9IdHRwSW5jb21pbmcgaW5jb21pbmcpIHsKICAgIHZhciByZXNwb25zZSA9IG5ldyBfSHR0cENsaWVudFJlc3BvbnNlKGluY29taW5nLCB0aGlzLCBfaHR0cENsaWVudCk7CiAgICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBmdXR1cmU7CiAgICBpZiAoZm9sbG93UmVkaXJlY3RzICYmIHJlc3BvbnNlLmlzUmVkaXJlY3QpIHsKICAgICAgaWYgKHJlc3BvbnNlLnJlZGlyZWN0cy5sZW5ndGggPCBtYXhSZWRpcmVjdHMpIHsKICAgICAgICAvLyBSZWRpcmVjdCBhbmQgZHJhaW4gcmVzcG9uc2UuCiAgICAgICAgZnV0dXJlID0gcmVzcG9uc2UKICAgICAgICAgICAgLmRyYWluKCkKICAgICAgICAgICAgLnRoZW48SHR0cENsaWVudFJlc3BvbnNlPigoXykgPT4gcmVzcG9uc2UucmVkaXJlY3QoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRW5kIHdpdGggZXhjZXB0aW9uLCB0b28gbWFueSByZWRpcmVjdHMuCiAgICAgICAgZnV0dXJlID0gcmVzcG9uc2UuZHJhaW4oKS50aGVuPEh0dHBDbGllbnRSZXNwb25zZT4oKF8pIHsKICAgICAgICAgIHJldHVybiBuZXcgRnV0dXJlPEh0dHBDbGllbnRSZXNwb25zZT4uZXJyb3IobmV3IFJlZGlyZWN0RXhjZXB0aW9uKAogICAgICAgICAgICAgICJSZWRpcmVjdCBsaW1pdCBleGNlZWRlZCIsIHJlc3BvbnNlLnJlZGlyZWN0cykpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLl9zaG91bGRBdXRoZW50aWNhdGVQcm94eSkgewogICAgICBmdXR1cmUgPSByZXNwb25zZS5fYXV0aGVudGljYXRlKHRydWUpOwogICAgfSBlbHNlIGlmIChyZXNwb25zZS5fc2hvdWxkQXV0aGVudGljYXRlKSB7CiAgICAgIGZ1dHVyZSA9IHJlc3BvbnNlLl9hdXRoZW50aWNhdGUoZmFsc2UpOwogICAgfSBlbHNlIHsKICAgICAgZnV0dXJlID0gbmV3IEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+LnZhbHVlKHJlc3BvbnNlKTsKICAgIH0KICAgIGZ1dHVyZS50aGVuKCh2KSA9PiBfcmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGUodiksCiAgICAgICAgb25FcnJvcjogX3Jlc3BvbnNlQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IpOwogIH0KCiAgdm9pZCBfb25FcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfcmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICAvLyBHZW5lcmF0ZSB0aGUgcmVxdWVzdCBVUkkgYmFzZWQgb24gdGhlIG1ldGhvZCBhbmQgcHJveHkuCiAgU3RyaW5nIF9yZXF1ZXN0VXJpKCkgewogICAgLy8gR2VuZXJhdGUgdGhlIHJlcXVlc3QgVVJJIHN0YXJ0aW5nIGZyb20gdGhlIHBhdGggY29tcG9uZW50LgogICAgU3RyaW5nIHVyaVN0YXJ0aW5nRnJvbVBhdGgoKSB7CiAgICAgIFN0cmluZyByZXN1bHQgPSB1cmkucGF0aDsKICAgICAgaWYgKHJlc3VsdC5pc0VtcHR5KSByZXN1bHQgPSAiLyI7CiAgICAgIGlmICh1cmkuaGFzUXVlcnkpIHsKICAgICAgICByZXN1bHQgPSAiJHtyZXN1bHR9PyR7dXJpLnF1ZXJ5fSI7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBpZiAoX3Byb3h5LmlzRGlyZWN0KSB7CiAgICAgIHJldHVybiB1cmlTdGFydGluZ0Zyb21QYXRoKCk7CiAgICB9IGVsc2UgewogICAgICBpZiAobWV0aG9kID09ICJDT05ORUNUIikgewogICAgICAgIC8vIEZvciB0aGUgY29ubmVjdCBtZXRob2QgdGhlIHJlcXVlc3QgVVJJIGlzIHRoZSBob3N0OnBvcnQgb2YKICAgICAgICAvLyB0aGUgcmVxdWVzdGVkIGRlc3RpbmF0aW9uIG9mIHRoZSB0dW5uZWwgKHNlZSBSRkMgMjgxNwogICAgICAgIC8vIHNlY3Rpb24gNS4yKQogICAgICAgIHJldHVybiAiJHt1cmkuaG9zdH06JHt1cmkucG9ydH0iOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChfaHR0cENsaWVudENvbm5lY3Rpb24uX3Byb3h5VHVubmVsKSB7CiAgICAgICAgICByZXR1cm4gdXJpU3RhcnRpbmdGcm9tUGF0aCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdXJpLnJlbW92ZUZyYWdtZW50KCkudG9TdHJpbmcoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX3dyaXRlSGVhZGVyKCkgewogICAgQnl0ZXNCdWlsZGVyIGJ1ZmZlciA9IG5ldyBfQ29weWluZ0J5dGVzQnVpbGRlcihfT1VUR09JTkdfQlVGRkVSX1NJWkUpOwoKICAgIC8vIFdyaXRlIHRoZSByZXF1ZXN0IG1ldGhvZC4KICAgIGJ1ZmZlci5hZGQobWV0aG9kLmNvZGVVbml0cyk7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuU1ApOwogICAgLy8gV3JpdGUgdGhlIHJlcXVlc3QgVVJJLgogICAgYnVmZmVyLmFkZChfcmVxdWVzdFVyaSgpLmNvZGVVbml0cyk7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuU1ApOwogICAgLy8gV3JpdGUgSFRUUC8xLjEuCiAgICBidWZmZXIuYWRkKF9Db25zdC5IVFRQMTEpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLkNSKTsKICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5MRik7CgogICAgLy8gQWRkIHRoZSBjb29raWVzIHRvIHRoZSBoZWFkZXJzLgogICAgaWYgKCFjb29raWVzLmlzRW1wdHkpIHsKICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaSA+IDApIHNiLndyaXRlKCI7ICIpOwogICAgICAgIHNiLi53cml0ZShjb29raWVzW2ldLm5hbWUpLi53cml0ZSgiPSIpLi53cml0ZShjb29raWVzW2ldLnZhbHVlKTsKICAgICAgfQogICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVycy5jb29raWVIZWFkZXIsIHNiLnRvU3RyaW5nKCkpOwogICAgfQoKICAgIGhlYWRlcnMuX2ZpbmFsaXplKCk7CgogICAgLy8gV3JpdGUgaGVhZGVycy4KICAgIGhlYWRlcnMuX2J1aWxkKGJ1ZmZlcik7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKICAgIFVpbnQ4TGlzdCBoZWFkZXJCeXRlcyA9IGJ1ZmZlci50YWtlQnl0ZXMoKTsKICAgIF9vdXRnb2luZy5zZXRIZWFkZXIoaGVhZGVyQnl0ZXMsIGhlYWRlckJ5dGVzLmxlbmd0aCk7CiAgfQp9CgovLyBVc2VkIGJ5IF9IdHRwT3V0Z29pbmcgYXMgYSB0YXJnZXQgb2YgYSBjaHVua2VkIGNvbnZlcnRlciBmb3IgZ3ppcAovLyBjb21wcmVzc2lvbi4KY2xhc3MgX0h0dHBHWmlwU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgZmluYWwgX0J5dGVzQ29uc3VtZXIgX2NvbnN1bWU7CiAgX0h0dHBHWmlwU2luayh0aGlzLl9jb25zdW1lKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKSB7CiAgICBfY29uc3VtZShjaHVuayk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgaWYgKGNodW5rIGlzIFVpbnQ4TGlzdCkgewogICAgICBfY29uc3VtZShuZXcgVWludDhMaXN0LnZpZXcoY2h1bmsuYnVmZmVyLCBzdGFydCwgZW5kIC0gc3RhcnQpKTsKICAgIH0gZWxzZSB7CiAgICAgIF9jb25zdW1lKGNodW5rLnN1Ymxpc3Qoc3RhcnQsIGVuZCAtIHN0YXJ0KSk7CiAgICB9CiAgfQoKICB2b2lkIGNsb3NlKCkge30KfQoKLy8gVGhlIF9IdHRwT3V0Z29pbmcgaGFuZGxlcyBhbGwgb2YgdGhlIGZvbGxvd2luZzoKLy8gIC0gQnVmZmVyaW5nCi8vICAtIEdaaXAgY29tcHJlc3Npb24KLy8gIC0gQ29udGVudC1MZW5ndGggdmFsaWRhdGlvbi4KLy8gIC0gRXJyb3JzLgovLwovLyBNb3N0IG5vdGFibGUgaXMgdGhlIEdaaXAgY29tcHJlc3Npb24sIHRoYXQgdXNlcyBhIGRvdWJsZS1idWZmZXJpbmcgc3lzdGVtLAovLyBvbmUgYmVmb3JlIGd6aXAgKF9nemlwQnVmZmVyKSBhbmQgb25lIGFmdGVyIChfYnVmZmVyKS4KY2xhc3MgX0h0dHBPdXRnb2luZyBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyPExpc3Q8aW50Pj4gewogIHN0YXRpYyBjb25zdCBMaXN0PGludD4gX2Zvb3RlckFuZENodW5rMExlbmd0aCA9IGNvbnN0IFsKICAgIF9DaGFyQ29kZS5DUiwKICAgIF9DaGFyQ29kZS5MRiwKICAgIDB4MzAsCiAgICBfQ2hhckNvZGUuQ1IsCiAgICBfQ2hhckNvZGUuTEYsCiAgICBfQ2hhckNvZGUuQ1IsCiAgICBfQ2hhckNvZGUuTEYKICBdOwoKICBzdGF0aWMgY29uc3QgTGlzdDxpbnQ+IF9jaHVuazBMZW5ndGggPSBjb25zdCBbCiAgICAweDMwLAogICAgX0NoYXJDb2RlLkNSLAogICAgX0NoYXJDb2RlLkxGLAogICAgX0NoYXJDb2RlLkNSLAogICAgX0NoYXJDb2RlLkxGCiAgXTsKCiAgZmluYWwgQ29tcGxldGVyPFNvY2tldD4gX2RvbmVDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFNvY2tldD4oKTsKICBmaW5hbCBTb2NrZXQgc29ja2V0OwoKICBib29sIGlnbm9yZUJvZHkgPSBmYWxzZTsKICBib29sIGhlYWRlcnNXcml0dGVuID0gZmFsc2U7CgogIFVpbnQ4TGlzdCBfYnVmZmVyOwogIGludCBfbGVuZ3RoID0gMDsKCiAgRnV0dXJlIF9jbG9zZUZ1dHVyZTsKCiAgYm9vbCBjaHVua2VkID0gZmFsc2U7CiAgaW50IF9wZW5kaW5nQ2h1bmtlZEZvb3RlciA9IDA7CgogIGludCBjb250ZW50TGVuZ3RoOwogIGludCBfYnl0ZXNXcml0dGVuID0gMDsKCiAgYm9vbCBfZ3ppcCA9IGZhbHNlOwogIEJ5dGVDb252ZXJzaW9uU2luayBfZ3ppcFNpbms7CiAgLy8gX2d6aXBBZGQgaXMgc2V0IGlmZiB0aGUgc2luayBpcyBiZWluZyBhZGRlZCB0by4gSXQncyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUKICAvLyBnemlwcGVkIGRhdGEgc2hvdWxkIGJlIHRha2VuIChzb21ldGltZXMgYSBjb250cm9sbGVyLCBzb21ldGltZXMgYSBzb2NrZXQpLgogIF9CeXRlc0NvbnN1bWVyIF9nemlwQWRkOwogIFVpbnQ4TGlzdCBfZ3ppcEJ1ZmZlcjsKICBpbnQgX2d6aXBCdWZmZXJMZW5ndGggPSAwOwoKICBib29sIF9zb2NrZXRFcnJvciA9IGZhbHNlOwoKICBfSHR0cE91dGJvdW5kTWVzc2FnZSBvdXRib3VuZDsKCiAgX0h0dHBPdXRnb2luZyh0aGlzLnNvY2tldCk7CgogIC8vIFJldHVybnMgZWl0aGVyIGEgZnV0dXJlIG9yICdudWxsJywgaWYgaXQgd2FzIGFibGUgdG8gd3JpdGUgaGVhZGVycwogIC8vIGltbWVkaWF0ZWx5LgogIEZ1dHVyZSB3cml0ZUhlYWRlcnMoe2Jvb2wgZHJhaW5SZXF1ZXN0OiB0cnVlLCBib29sIHNldE91dGdvaW5nOiB0cnVlfSkgewogICAgaWYgKGhlYWRlcnNXcml0dGVuKSByZXR1cm4gbnVsbDsKICAgIGhlYWRlcnNXcml0dGVuID0gdHJ1ZTsKICAgIEZ1dHVyZSBkcmFpbkZ1dHVyZTsKICAgIGJvb2wgZ3ppcCA9IGZhbHNlOwogICAgaWYgKG91dGJvdW5kIGlzIF9IdHRwUmVzcG9uc2UpIHsKICAgICAgLy8gU2VydmVyIHNpZGUuCiAgICAgIF9IdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBvdXRib3VuZDsKICAgICAgaWYgKHJlc3BvbnNlLl9odHRwUmVxdWVzdC5faHR0cFNlcnZlci5hdXRvQ29tcHJlc3MgJiYKICAgICAgICAgIG91dGJvdW5kLmJ1ZmZlck91dHB1dCAmJgogICAgICAgICAgb3V0Ym91bmQuaGVhZGVycy5jaHVua2VkVHJhbnNmZXJFbmNvZGluZykgewogICAgICAgIExpc3QgYWNjZXB0RW5jb2RpbmdzID0KICAgICAgICAgICAgcmVzcG9uc2UuX2h0dHBSZXF1ZXN0LmhlYWRlcnNbSHR0cEhlYWRlcnMuYWNjZXB0RW5jb2RpbmdIZWFkZXJdOwogICAgICAgIExpc3QgY29udGVudEVuY29kaW5nID0KICAgICAgICAgICAgb3V0Ym91bmQuaGVhZGVyc1tIdHRwSGVhZGVycy5jb250ZW50RW5jb2RpbmdIZWFkZXJdOwogICAgICAgIGlmIChhY2NlcHRFbmNvZGluZ3MgIT0gbnVsbCAmJgogICAgICAgICAgICBhY2NlcHRFbmNvZGluZ3MKICAgICAgICAgICAgICAgIC5leHBhbmQoKGxpc3QpID0+IGxpc3Quc3BsaXQoIiwiKSkKICAgICAgICAgICAgICAgIC5hbnkoKGVuY29kaW5nKSA9PiBlbmNvZGluZy50cmltKCkudG9Mb3dlckNhc2UoKSA9PSAiZ3ppcCIpICYmCiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZyA9PSBudWxsKSB7CiAgICAgICAgICBvdXRib3VuZC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5jb250ZW50RW5jb2RpbmdIZWFkZXIsICJnemlwIik7CiAgICAgICAgICBnemlwID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRyYWluUmVxdWVzdCAmJiAhcmVzcG9uc2UuX2h0dHBSZXF1ZXN0Ll9pbmNvbWluZy5oYXNTdWJzY3JpYmVyKSB7CiAgICAgICAgZHJhaW5GdXR1cmUgPSByZXNwb25zZS5faHR0cFJlcXVlc3QuZHJhaW4oKS5jYXRjaEVycm9yKChfKSB7fSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGRyYWluUmVxdWVzdCA9IGZhbHNlOwogICAgfQogICAgaWYgKCFpZ25vcmVCb2R5KSB7CiAgICAgIGlmIChzZXRPdXRnb2luZykgewogICAgICAgIGludCBjb250ZW50TGVuZ3RoID0gb3V0Ym91bmQuaGVhZGVycy5jb250ZW50TGVuZ3RoOwogICAgICAgIGlmIChvdXRib3VuZC5oZWFkZXJzLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nKSB7CiAgICAgICAgICBjaHVua2VkID0gdHJ1ZTsKICAgICAgICAgIGlmIChnemlwKSB0aGlzLmd6aXAgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA+PSAwKSB7CiAgICAgICAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZHJhaW5GdXR1cmUgIT0gbnVsbCkgewogICAgICAgIHJldHVybiBkcmFpbkZ1dHVyZS50aGVuKChfKSA9PiBvdXRib3VuZC5fd3JpdGVIZWFkZXIoKSk7CiAgICAgIH0KICAgIH0KICAgIG91dGJvdW5kLl93cml0ZUhlYWRlcigpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgewogICAgaWYgKF9zb2NrZXRFcnJvcikgewogICAgICBzdHJlYW0ubGlzdGVuKG51bGwpLmNhbmNlbCgpOwogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShvdXRib3VuZCk7CiAgICB9CiAgICBpZiAoaWdub3JlQm9keSkgewogICAgICBzdHJlYW0uZHJhaW4oKS5jYXRjaEVycm9yKChfKSB7fSk7CiAgICAgIHZhciBmdXR1cmUgPSB3cml0ZUhlYWRlcnMoKTsKICAgICAgaWYgKGZ1dHVyZSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGZ1dHVyZS50aGVuKChfKSA9PiBjbG9zZSgpKTsKICAgICAgfQogICAgICByZXR1cm4gY2xvc2UoKTsKICAgIH0KICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxMaXN0PGludD4+IHN1YjsKICAgIC8vIFVzZSBuZXcgc3RyZWFtIHNvIHdlIGFyZSBhYmxlIHRvIHBhdXNlIChzZWUgYmVsb3cgbGlzdGVuKS4gVGhlCiAgICAvLyBhbHRlcm5hdGl2ZSBpcyB0byB1c2Ugc3RyZWFtLmV4dGFuZCwgYnV0IHRoYXQgd29uJ3QgZ2l2ZSB1cyBhIHdheSBvZgogICAgLy8gcGF1c2luZy4KICAgIHZhciBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8TGlzdDxpbnQ+PigKICAgICAgICBvblBhdXNlOiAoKSA9PiBzdWIucGF1c2UoKSwgb25SZXN1bWU6ICgpID0+IHN1Yi5yZXN1bWUoKSwgc3luYzogdHJ1ZSk7CgogICAgdm9pZCBvbkRhdGEoTGlzdDxpbnQ+IGRhdGEpIHsKICAgICAgaWYgKF9zb2NrZXRFcnJvcikgcmV0dXJuOwogICAgICBpZiAoZGF0YS5sZW5ndGggPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2h1bmtlZCkgewogICAgICAgIGlmIChfZ3ppcCkgewogICAgICAgICAgX2d6aXBBZGQgPSBjb250cm9sbGVyLmFkZDsKICAgICAgICAgIF9hZGRHWmlwQ2h1bmsoZGF0YSwgX2d6aXBTaW5rLmFkZCk7CiAgICAgICAgICBfZ3ppcEFkZCA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIF9hZGRDaHVuayhfY2h1bmtIZWFkZXIoZGF0YS5sZW5ndGgpLCBjb250cm9sbGVyLmFkZCk7CiAgICAgICAgX3BlbmRpbmdDaHVua2VkRm9vdGVyID0gMjsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7CiAgICAgICAgICBfYnl0ZXNXcml0dGVuICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgaWYgKF9ieXRlc1dyaXR0ZW4gPiBjb250ZW50TGVuZ3RoKSB7CiAgICAgICAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IobmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiQ29udGVudCBzaXplIGV4Y2VlZHMgc3BlY2lmaWVkIGNvbnRlbnRMZW5ndGguICIKICAgICAgICAgICAgICAgICIkX2J5dGVzV3JpdHRlbiBieXRlcyB3cml0dGVuIHdoaWxlIGV4cGVjdGVkICIKICAgICAgICAgICAgICAgICIkY29udGVudExlbmd0aC4gIgogICAgICAgICAgICAgICAgIlske25ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhKX1dIikpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIF9hZGRDaHVuayhkYXRhLCBjb250cm9sbGVyLmFkZCk7CiAgICB9CgogICAgc3ViID0gc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogY29udHJvbGxlci5hZGRFcnJvciwKICAgICAgICBvbkRvbmU6IGNvbnRyb2xsZXIuY2xvc2UsCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICAvLyBXcml0ZSBoZWFkZXJzIG5vdyB0aGF0IHdlIGFyZSBsaXN0ZW5pbmcgdG8gdGhlIHN0cmVhbS4KICAgIGlmICghaGVhZGVyc1dyaXR0ZW4pIHsKICAgICAgdmFyIGZ1dHVyZSA9IHdyaXRlSGVhZGVycygpOwogICAgICBpZiAoZnV0dXJlICE9IG51bGwpIHsKICAgICAgICAvLyBXaGlsZSBpbmNvbWluZyBpcyBiZWluZyBkcmFpbmVkLCB0aGUgcGF1c2VGdXR1cmUgaXMgbm9uLW51bGwuIFBhdXNlCiAgICAgICAgLy8gb3V0cHV0IHVudGlsIGl0J3MgZHJhaW5lZC4KICAgICAgICBzdWIucGF1c2UoZnV0dXJlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNvY2tldC5hZGRTdHJlYW0oY29udHJvbGxlci5zdHJlYW0pLnRoZW4oKF8pIHsKICAgICAgcmV0dXJuIG91dGJvdW5kOwogICAgfSwgb25FcnJvcjogKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgIC8vIEJlIHN1cmUgdG8gY2xvc2UgaXQgaW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgaWYgKF9nemlwKSBfZ3ppcFNpbmsuY2xvc2UoKTsKICAgICAgX3NvY2tldEVycm9yID0gdHJ1ZTsKICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIGlmIChfaWdub3JlRXJyb3IoZXJyb3IpKSB7CiAgICAgICAgcmV0dXJuIG91dGJvdW5kOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IGVycm9yOwogICAgICB9CiAgICB9KTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGNsb3NlZCwgcmV0dXJuIHRoYXQgZnV0dXJlLgogICAgaWYgKF9jbG9zZUZ1dHVyZSAhPSBudWxsKSByZXR1cm4gX2Nsb3NlRnV0dXJlOwogICAgLy8gSWYgd2UgZWFybGllciBzYXcgYW4gZXJyb3IsIHJldHVybiBpbW1lZGlhdGUuIFRoZSBub3RpZmljYXRpb24gdG8KICAgIC8vIF9IdHRwKkNvbm5lY3Rpb24gaXMgYWxyZWFkeSBkb25lLgogICAgaWYgKF9zb2NrZXRFcnJvcikgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUob3V0Ym91bmQpOwogICAgaWYgKG91dGJvdW5kLl9pc0Nvbm5lY3Rpb25DbG9zZWQpIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG91dGJvdW5kKTsKICAgIGlmICghaGVhZGVyc1dyaXR0ZW4gJiYgIWlnbm9yZUJvZHkpIHsKICAgICAgaWYgKG91dGJvdW5kLmhlYWRlcnMuY29udGVudExlbmd0aCA9PSAtMSkgewogICAgICAgIC8vIElmIG5vIGJvZHkgd2FzIHdyaXR0ZW4sIGlnbm9yZUJvZHkgaXMgZmFsc2UgKGl0J3Mgbm90IGEgSEVBRAogICAgICAgIC8vIHJlcXVlc3QpIGFuZCB0aGUgY29udGVudC1sZW5ndGggaXMgdW5zcGVjaWZpZWQsIHNldCBjb250ZW50TGVuZ3RoIHRvCiAgICAgICAgLy8gMC4KICAgICAgICBvdXRib3VuZC5oZWFkZXJzLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgICAgICAgb3V0Ym91bmQuaGVhZGVycy5jb250ZW50TGVuZ3RoID0gMDsKICAgICAgfSBlbHNlIGlmIChvdXRib3VuZC5oZWFkZXJzLmNvbnRlbnRMZW5ndGggPiAwKSB7CiAgICAgICAgdmFyIGVycm9yID0gbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICJObyBjb250ZW50IGV2ZW4gdGhvdWdoIGNvbnRlbnRMZW5ndGggd2FzIHNwZWNpZmllZCB0byBiZSAiCiAgICAgICAgICAgICJncmVhdGVyIHRoYW4gMDogJHtvdXRib3VuZC5oZWFkZXJzLmNvbnRlbnRMZW5ndGh9LiIsCiAgICAgICAgICAgIHVyaTogb3V0Ym91bmQuX3VyaSk7CiAgICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIF9jbG9zZUZ1dHVyZSA9IG5ldyBGdXR1cmUuZXJyb3IoZXJyb3IpOwogICAgICB9CiAgICB9CiAgICAvLyBJZiBjb250ZW50TGVuZ3RoIHdhcyBzcGVjaWZpZWQsIHZhbGlkYXRlIGl0LgogICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkgewogICAgICBpZiAoX2J5dGVzV3JpdHRlbiA8IGNvbnRlbnRMZW5ndGgpIHsKICAgICAgICB2YXIgZXJyb3IgPSBuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgIkNvbnRlbnQgc2l6ZSBiZWxvdyBzcGVjaWZpZWQgY29udGVudExlbmd0aC4gIgogICAgICAgICAgICAiICRfYnl0ZXNXcml0dGVuIGJ5dGVzIHdyaXR0ZW4gYnV0IGV4cGVjdGVkICIKICAgICAgICAgICAgIiRjb250ZW50TGVuZ3RoLiIsCiAgICAgICAgICAgIHVyaTogb3V0Ym91bmQuX3VyaSk7CiAgICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIF9jbG9zZUZ1dHVyZSA9IG5ldyBGdXR1cmUuZXJyb3IoZXJyb3IpOwogICAgICB9CiAgICB9CgogICAgRnV0dXJlIGZpbmFsaXplKCkgewogICAgICAvLyBJbiBjYXNlIG9mIGNodW5rZWQgZW5jb2RpbmcgKGFuZCBnemlwKSwgaGFuZGxlIHJlbWFpbmluZyBnemlwIGRhdGEgYW5kCiAgICAgIC8vIGFwcGVuZCB0aGUgJ2Zvb3RlcicgZm9yIGNodW5rZWQgZW5jb2RpbmcuCiAgICAgIGlmIChjaHVua2VkKSB7CiAgICAgICAgaWYgKF9nemlwKSB7CiAgICAgICAgICBfZ3ppcEFkZCA9IHNvY2tldC5hZGQ7CiAgICAgICAgICBpZiAoX2d6aXBCdWZmZXJMZW5ndGggPiAwKSB7CiAgICAgICAgICAgIF9nemlwU2luay5hZGQoCiAgICAgICAgICAgICAgICBuZXcgVWludDhMaXN0LnZpZXcoX2d6aXBCdWZmZXIuYnVmZmVyLCAwLCBfZ3ppcEJ1ZmZlckxlbmd0aCkpOwogICAgICAgICAgfQogICAgICAgICAgX2d6aXBCdWZmZXIgPSBudWxsOwogICAgICAgICAgX2d6aXBTaW5rLmNsb3NlKCk7CiAgICAgICAgICBfZ3ppcEFkZCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIF9hZGRDaHVuayhfY2h1bmtIZWFkZXIoMCksIHNvY2tldC5hZGQpOwogICAgICB9CiAgICAgIC8vIEFkZCBhbnkgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci4KICAgICAgaWYgKF9sZW5ndGggPiAwKSB7CiAgICAgICAgc29ja2V0LmFkZChuZXcgVWludDhMaXN0LnZpZXcoX2J1ZmZlci5idWZmZXIsIDAsIF9sZW5ndGgpKTsKICAgICAgfQogICAgICAvLyBDbGVhciByZWZlcmVuY2VzLCBmb3IgYmV0dGVyIEdDLgogICAgICBfYnVmZmVyID0gbnVsbDsKICAgICAgLy8gQW5kIGZpbmFsbHkgZmx1c2ggaXQuIEFzIHdlIHN1cHBvcnQga2VlcC1hbGl2ZSwgbmV2ZXIgY2xvc2UgaXQgZnJvbQogICAgICAvLyBoZXJlLiBPbmNlIHRoZSBzb2NrZXQgaXMgZmx1c2hlZCwgd2UnbGwgYmUgYWJsZSB0byByZXVzZSBpdCAoc2lnbmFsZWQKICAgICAgLy8gYnkgdGhlICdkb25lJyBmdXR1cmUpLgogICAgICByZXR1cm4gc29ja2V0LmZsdXNoKCkudGhlbigoXykgewogICAgICAgIF9kb25lQ29tcGxldGVyLmNvbXBsZXRlKHNvY2tldCk7CiAgICAgICAgcmV0dXJuIG91dGJvdW5kOwogICAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICBpZiAoX2lnbm9yZUVycm9yKGVycm9yKSkgewogICAgICAgICAgcmV0dXJuIG91dGJvdW5kOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIHZhciBmdXR1cmUgPSB3cml0ZUhlYWRlcnMoKTsKICAgIGlmIChmdXR1cmUgIT0gbnVsbCkgewogICAgICByZXR1cm4gX2Nsb3NlRnV0dXJlID0gZnV0dXJlLndoZW5Db21wbGV0ZShmaW5hbGl6ZSk7CiAgICB9CiAgICByZXR1cm4gX2Nsb3NlRnV0dXJlID0gZmluYWxpemUoKTsKICB9CgogIEZ1dHVyZTxTb2NrZXQ+IGdldCBkb25lID0+IF9kb25lQ29tcGxldGVyLmZ1dHVyZTsKCiAgdm9pZCBzZXRIZWFkZXIoTGlzdDxpbnQ+IGRhdGEsIGludCBsZW5ndGgpIHsKICAgIGFzc2VydChfbGVuZ3RoID09IDApOwogICAgX2J1ZmZlciA9IGRhdGE7CiAgICBfbGVuZ3RoID0gbGVuZ3RoOwogIH0KCiAgdm9pZCBzZXQgZ3ppcChib29sIHZhbHVlKSB7CiAgICBfZ3ppcCA9IHZhbHVlOwogICAgaWYgKF9nemlwKSB7CiAgICAgIF9nemlwQnVmZmVyID0gbmV3IFVpbnQ4TGlzdChfT1VUR09JTkdfQlVGRkVSX1NJWkUpOwogICAgICBhc3NlcnQoX2d6aXBTaW5rID09IG51bGwpOwogICAgICBfZ3ppcFNpbmsgPSBuZXcgWkxpYkVuY29kZXIoZ3ppcDogdHJ1ZSkKICAgICAgICAgIC5zdGFydENodW5rZWRDb252ZXJzaW9uKG5ldyBfSHR0cEdaaXBTaW5rKChkYXRhKSB7CiAgICAgICAgLy8gV2UgYXJlIGNsb3NpbmcgZG93biBwcmVtYXR1cmVseSwgZHVlIHRvIGFuIGVycm9yLiBEaXNjYXJkLgogICAgICAgIGlmIChfZ3ppcEFkZCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgX2FkZENodW5rKF9jaHVua0hlYWRlcihkYXRhLmxlbmd0aCksIF9nemlwQWRkKTsKICAgICAgICBfcGVuZGluZ0NodW5rZWRGb290ZXIgPSAyOwogICAgICAgIF9hZGRDaHVuayhkYXRhLCBfZ3ppcEFkZCk7CiAgICAgIH0pKTsKICAgIH0KICB9CgogIGJvb2wgX2lnbm9yZUVycm9yKGVycm9yKSA9PgogICAgICAoZXJyb3IgaXMgU29ja2V0RXhjZXB0aW9uIHx8IGVycm9yIGlzIFRsc0V4Y2VwdGlvbikgJiYKICAgICAgb3V0Ym91bmQgaXMgSHR0cFJlc3BvbnNlOwoKICB2b2lkIF9hZGRHWmlwQ2h1bmsoTGlzdDxpbnQ+IGNodW5rLCB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkpIHsKICAgIGlmICghb3V0Ym91bmQuYnVmZmVyT3V0cHV0KSB7CiAgICAgIGFkZChjaHVuayk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChjaHVuay5sZW5ndGggPiBfZ3ppcEJ1ZmZlci5sZW5ndGggLSBfZ3ppcEJ1ZmZlckxlbmd0aCkgewogICAgICBhZGQobmV3IFVpbnQ4TGlzdC52aWV3KF9nemlwQnVmZmVyLmJ1ZmZlciwgMCwgX2d6aXBCdWZmZXJMZW5ndGgpKTsKICAgICAgX2d6aXBCdWZmZXIgPSBuZXcgVWludDhMaXN0KF9PVVRHT0lOR19CVUZGRVJfU0laRSk7CiAgICAgIF9nemlwQnVmZmVyTGVuZ3RoID0gMDsKICAgIH0KICAgIGlmIChjaHVuay5sZW5ndGggPiBfT1VUR09JTkdfQlVGRkVSX1NJWkUpIHsKICAgICAgYWRkKGNodW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIF9nemlwQnVmZmVyLnNldFJhbmdlKAogICAgICAgICAgX2d6aXBCdWZmZXJMZW5ndGgsIF9nemlwQnVmZmVyTGVuZ3RoICsgY2h1bmsubGVuZ3RoLCBjaHVuayk7CiAgICAgIF9nemlwQnVmZmVyTGVuZ3RoICs9IGNodW5rLmxlbmd0aDsKICAgIH0KICB9CgogIHZvaWQgX2FkZENodW5rKExpc3Q8aW50PiBjaHVuaywgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpKSB7CiAgICBpZiAoIW91dGJvdW5kLmJ1ZmZlck91dHB1dCkgewogICAgICBpZiAoX2J1ZmZlciAhPSBudWxsKSB7CiAgICAgICAgLy8gSWYgX2J1ZmZlciBpcyBub3QgbnVsbCwgd2UgaGF2ZSBub3Qgd3JpdHRlbiB0aGUgaGVhZGVyIHlldC4gV3JpdGUKICAgICAgICAvLyBpdCBub3cuCiAgICAgICAgYWRkKG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2xlbmd0aCkpOwogICAgICAgIF9idWZmZXIgPSBudWxsOwogICAgICAgIF9sZW5ndGggPSAwOwogICAgICB9CiAgICAgIGFkZChjaHVuayk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChjaHVuay5sZW5ndGggPiBfYnVmZmVyLmxlbmd0aCAtIF9sZW5ndGgpIHsKICAgICAgYWRkKG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2xlbmd0aCkpOwogICAgICBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChfT1VUR09JTkdfQlVGRkVSX1NJWkUpOwogICAgICBfbGVuZ3RoID0gMDsKICAgIH0KICAgIGlmIChjaHVuay5sZW5ndGggPiBfT1VUR09JTkdfQlVGRkVSX1NJWkUpIHsKICAgICAgYWRkKGNodW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIF9idWZmZXIuc2V0UmFuZ2UoX2xlbmd0aCwgX2xlbmd0aCArIGNodW5rLmxlbmd0aCwgY2h1bmspOwogICAgICBfbGVuZ3RoICs9IGNodW5rLmxlbmd0aDsKICAgIH0KICB9CgogIExpc3Q8aW50PiBfY2h1bmtIZWFkZXIoaW50IGxlbmd0aCkgewogICAgY29uc3QgaGV4RGlnaXRzID0gY29uc3QgWwogICAgICAweDMwLAogICAgICAweDMxLAogICAgICAweDMyLAogICAgICAweDMzLAogICAgICAweDM0LAogICAgICAweDM1LAogICAgICAweDM2LAogICAgICAweDM3LAogICAgICAweDM4LAogICAgICAweDM5LAogICAgICAweDQxLAogICAgICAweDQyLAogICAgICAweDQzLAogICAgICAweDQ0LAogICAgICAweDQ1LAogICAgICAweDQ2CiAgICBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgIGlmIChfcGVuZGluZ0NodW5rZWRGb290ZXIgPT0gMikgcmV0dXJuIF9mb290ZXJBbmRDaHVuazBMZW5ndGg7CiAgICAgIHJldHVybiBfY2h1bmswTGVuZ3RoOwogICAgfQogICAgaW50IHNpemUgPSBfcGVuZGluZ0NodW5rZWRGb290ZXI7CiAgICBpbnQgbGVuID0gbGVuZ3RoOwogICAgLy8gQ29tcHV0ZSBhIGZhc3QgaW50ZWdlciB2ZXJzaW9uIG9mIChsb2cobGVuZ3RoICsgMSkgLyBsb2coMTYpKS5jZWlsKCkuCiAgICB3aGlsZSAobGVuID4gMCkgewogICAgICBzaXplKys7CiAgICAgIGxlbiA+Pj0gNDsKICAgIH0KICAgIHZhciBmb290ZXJBbmRIZWFkZXIgPSBuZXcgVWludDhMaXN0KHNpemUgKyAyKTsKICAgIGlmIChfcGVuZGluZ0NodW5rZWRGb290ZXIgPT0gMikgewogICAgICBmb290ZXJBbmRIZWFkZXJbMF0gPSBfQ2hhckNvZGUuQ1I7CiAgICAgIGZvb3RlckFuZEhlYWRlclsxXSA9IF9DaGFyQ29kZS5MRjsKICAgIH0KICAgIGludCBpbmRleCA9IHNpemU7CiAgICB3aGlsZSAoaW5kZXggPiBfcGVuZGluZ0NodW5rZWRGb290ZXIpIHsKICAgICAgZm9vdGVyQW5kSGVhZGVyWy0taW5kZXhdID0gaGV4RGlnaXRzW2xlbmd0aCAmIDE1XTsKICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+IDQ7CiAgICB9CiAgICBmb290ZXJBbmRIZWFkZXJbc2l6ZSArIDBdID0gX0NoYXJDb2RlLkNSOwogICAgZm9vdGVyQW5kSGVhZGVyW3NpemUgKyAxXSA9IF9DaGFyQ29kZS5MRjsKICAgIHJldHVybiBmb290ZXJBbmRIZWFkZXI7CiAgfQp9CgpjbGFzcyBfSHR0cENsaWVudENvbm5lY3Rpb24gewogIGZpbmFsIFN0cmluZyBrZXk7CiAgZmluYWwgU29ja2V0IF9zb2NrZXQ7CiAgZmluYWwgYm9vbCBfcHJveHlUdW5uZWw7CiAgZmluYWwgU2VjdXJpdHlDb250ZXh0IF9jb250ZXh0OwogIGZpbmFsIF9IdHRwUGFyc2VyIF9odHRwUGFyc2VyOwogIFN0cmVhbVN1YnNjcmlwdGlvbiBfc3Vic2NyaXB0aW9uOwogIGZpbmFsIF9IdHRwQ2xpZW50IF9odHRwQ2xpZW50OwogIGJvb2wgX2Rpc3Bvc2UgPSBmYWxzZTsKICBUaW1lciBfaWRsZVRpbWVyOwogIGJvb2wgY2xvc2VkID0gZmFsc2U7CiAgVXJpIF9jdXJyZW50VXJpOwoKICBDb21wbGV0ZXI8X0h0dHBJbmNvbWluZz4gX25leHRSZXNwb25zZUNvbXBsZXRlcjsKICBGdXR1cmU8U29ja2V0PiBfc3RyZWFtRnV0dXJlOwoKICBfSHR0cENsaWVudENvbm5lY3Rpb24odGhpcy5rZXksIHRoaXMuX3NvY2tldCwgdGhpcy5faHR0cENsaWVudCwKICAgICAgW3RoaXMuX3Byb3h5VHVubmVsID0gZmFsc2UsIHRoaXMuX2NvbnRleHRdKQogICAgICA6IF9odHRwUGFyc2VyID0gbmV3IF9IdHRwUGFyc2VyLnJlc3BvbnNlUGFyc2VyKCkgewogICAgX2h0dHBQYXJzZXIubGlzdGVuVG9TdHJlYW0oX3NvY2tldCk7CgogICAgLy8gU2V0IHVwIGhhbmRsZXJzIG9uIHRoZSBwYXJzZXIgaGVyZSwgc28gd2UgYXJlIHN1cmUgdG8gZ2V0ICdvbkRvbmUnIGZyb20KICAgIC8vIHRoZSBwYXJzZXIuCiAgICBfc3Vic2NyaXB0aW9uID0gX2h0dHBQYXJzZXIubGlzdGVuKChpbmNvbWluZykgewogICAgICAvLyBPbmx5IGhhbmRsZSBvbmUgaW5jb21pbmcgcmVzcG9uc2UgYXQgdGhlIHRpbWUuIEtlZXAgdGhlCiAgICAgIC8vIHN0cmVhbSBwYXVzZWQgdW50aWwgdGhlIHJlc3BvbnNlIGhhdmUgYmVlbiBwcm9jZXNzZWQuCiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgLy8gV2UgYXNzdW1lIHRoZSByZXNwb25zZSBpcyBub3QgaGVyZSwgdW50aWwgd2UgaGF2ZSBzZW5kIHRoZSByZXF1ZXN0LgogICAgICBpZiAoX25leHRSZXNwb25zZUNvbXBsZXRlciA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICJVbmV4cGVjdGVkIHJlc3BvbnNlICh1bnNvbGljaXRlZCByZXNwb25zZSB3aXRob3V0IHJlcXVlc3QpLiIsCiAgICAgICAgICAgIHVyaTogX2N1cnJlbnRVcmkpOwogICAgICB9CgogICAgICAvLyBDaGVjayBmb3Igc3RhdHVzIGNvZGUgJzEwMCBDb250aW51ZScuIEluIHRoYXQgY2FzZSBqdXN0CiAgICAgIC8vIGNvbnN1bWUgdGhhdCByZXNwb25zZSBhcyB0aGUgZmluYWwgcmVzcG9uc2Ugd2lsbCBmb2xsb3cKICAgICAgLy8gaXQuIFRoZXJlIGlzIGN1cnJlbnRseSBubyBBUEkgZm9yIHRoZSBjbGllbnQgdG8gd2FpdCBmb3IKICAgICAgLy8gdGhlICcxMDAgQ29udGludWUnIHJlc3BvbnNlLgogICAgICBpZiAoaW5jb21pbmcuc3RhdHVzQ29kZSA9PSAxMDApIHsKICAgICAgICBpbmNvbWluZy5kcmFpbigpLnRoZW4oKF8pIHsKICAgICAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgfSkuY2F0Y2hFcnJvcigoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICAgICAgICBfbmV4dFJlc3BvbnNlQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IoCiAgICAgICAgICAgICAgbmV3IEh0dHBFeGNlcHRpb24oZXJyb3IubWVzc2FnZSwgdXJpOiBfY3VycmVudFVyaSksIHN0YWNrVHJhY2UpOwogICAgICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlciA9IG51bGw7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlci5jb21wbGV0ZShpbmNvbWluZyk7CiAgICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlciA9IG51bGw7CiAgICAgIH0KICAgIH0sIG9uRXJyb3I6IChlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgICAgaWYgKF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgIT0gbnVsbCkgewogICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGVFcnJvcigKICAgICAgICAgICAgbmV3IEh0dHBFeGNlcHRpb24oZXJyb3IubWVzc2FnZSwgdXJpOiBfY3VycmVudFVyaSksIHN0YWNrVHJhY2UpOwogICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgPSBudWxsOwogICAgICB9CiAgICB9LCBvbkRvbmU6ICgpIHsKICAgICAgaWYgKF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgIT0gbnVsbCkgewogICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGVFcnJvcihuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgIkNvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSByZXNwb25zZSB3YXMgcmVjZWl2ZWQiLAogICAgICAgICAgICB1cmk6IF9jdXJyZW50VXJpKSk7CiAgICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlciA9IG51bGw7CiAgICAgIH0KICAgICAgY2xvc2UoKTsKICAgIH0pOwogIH0KCiAgX0h0dHBDbGllbnRSZXF1ZXN0IHNlbmQoVXJpIHVyaSwgaW50IHBvcnQsIFN0cmluZyBtZXRob2QsIF9Qcm94eSBwcm94eSkgewogICAgaWYgKGNsb3NlZCkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiU29ja2V0IGNsb3NlZCBiZWZvcmUgcmVxdWVzdCB3YXMgc2VudCIsCiAgICAgICAgICB1cmk6IHVyaSk7CiAgICB9CiAgICBfY3VycmVudFVyaSA9IHVyaTsKICAgIC8vIFN0YXJ0IHdpdGggcGF1c2luZyB0aGUgcGFyc2VyLgogICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgX1Byb3h5Q3JlZGVudGlhbHMgcHJveHlDcmVkczsgLy8gQ3JlZGVudGlhbHMgdXNlZCB0byBhdXRob3JpemUgcHJveHkuCiAgICBfU2l0ZUNyZWRlbnRpYWxzIGNyZWRzOyAvLyBDcmVkZW50aWFscyB1c2VkIHRvIGF1dGhvcml6ZSB0aGlzIHJlcXVlc3QuCiAgICB2YXIgb3V0Z29pbmcgPSBuZXcgX0h0dHBPdXRnb2luZyhfc29ja2V0KTsKICAgIC8vIENyZWF0ZSBuZXcgcmVxdWVzdCBvYmplY3QsIHdyYXBwaW5nIHRoZSBvdXRnb2luZyBjb25uZWN0aW9uLgogICAgdmFyIHJlcXVlc3QgPQogICAgICAgIG5ldyBfSHR0cENsaWVudFJlcXVlc3Qob3V0Z29pbmcsIHVyaSwgbWV0aG9kLCBwcm94eSwgX2h0dHBDbGllbnQsIHRoaXMpOwogICAgLy8gRm9yIHRoZSBIb3N0IGhlYWRlciBhbiBJUHY2IGFkZHJlc3MgbXVzdCBiZSBlbmNsb3NlZCBpbiBbXSdzLgogICAgdmFyIGhvc3QgPSB1cmkuaG9zdDsKICAgIGlmIChob3N0LmNvbnRhaW5zKCc6JykpIGhvc3QgPSAiWyRob3N0XSI7CiAgICByZXF1ZXN0LmhlYWRlcnMKICAgICAgLi5ob3N0ID0gaG9zdAogICAgICAuLnBvcnQgPSBwb3J0CiAgICAgIC4uX2FkZChIdHRwSGVhZGVycy5hY2NlcHRFbmNvZGluZ0hlYWRlciwgImd6aXAiKTsKICAgIGlmIChfaHR0cENsaWVudC51c2VyQWdlbnQgIT0gbnVsbCkgewogICAgICByZXF1ZXN0LmhlYWRlcnMuX2FkZCgndXNlci1hZ2VudCcsIF9odHRwQ2xpZW50LnVzZXJBZ2VudCk7CiAgICB9CiAgICBpZiAocHJveHkuaXNBdXRoZW50aWNhdGVkKSB7CiAgICAgIC8vIElmIHRoZSBwcm94eSBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHVzZXIgaW5mb3JtYXRpb24gdXNlIHRoYXQKICAgICAgLy8gZm9yIHByb3h5IGJhc2ljIGF1dGhvcml6YXRpb24uCiAgICAgIFN0cmluZyBhdXRoID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQoCiAgICAgICAgICB1dGY4LmVuY29kZSgiJHtwcm94eS51c2VybmFtZX06JHtwcm94eS5wYXNzd29yZH0iKSk7CiAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMucHJveHlBdXRob3JpemF0aW9uSGVhZGVyLCAiQmFzaWMgJGF1dGgiKTsKICAgIH0gZWxzZSBpZiAoIXByb3h5LmlzRGlyZWN0ICYmIF9odHRwQ2xpZW50Ll9wcm94eUNyZWRlbnRpYWxzLmxlbmd0aCA+IDApIHsKICAgICAgcHJveHlDcmVkcyA9IF9odHRwQ2xpZW50Ll9maW5kUHJveHlDcmVkZW50aWFscyhwcm94eSk7CiAgICAgIGlmIChwcm94eUNyZWRzICE9IG51bGwpIHsKICAgICAgICBwcm94eUNyZWRzLmF1dGhvcml6ZShyZXF1ZXN0KTsKICAgICAgfQogICAgfQogICAgaWYgKHVyaS51c2VySW5mbyAhPSBudWxsICYmICF1cmkudXNlckluZm8uaXNFbXB0eSkgewogICAgICAvLyBJZiB0aGUgVVJMIGNvbnRhaW5zIHVzZXIgaW5mb3JtYXRpb24gdXNlIHRoYXQgZm9yIGJhc2ljCiAgICAgIC8vIGF1dGhvcml6YXRpb24uCiAgICAgIFN0cmluZyBhdXRoID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQodXRmOC5lbmNvZGUodXJpLnVzZXJJbmZvKSk7CiAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMuYXV0aG9yaXphdGlvbkhlYWRlciwgIkJhc2ljICRhdXRoIik7CiAgICB9IGVsc2UgewogICAgICAvLyBMb29rIGZvciBjcmVkZW50aWFscy4KICAgICAgY3JlZHMgPSBfaHR0cENsaWVudC5fZmluZENyZWRlbnRpYWxzKHVyaSk7CiAgICAgIGlmIChjcmVkcyAhPSBudWxsKSB7CiAgICAgICAgY3JlZHMuYXV0aG9yaXplKHJlcXVlc3QpOwogICAgICB9CiAgICB9CiAgICAvLyBTdGFydCBzZW5kaW5nIHRoZSByZXF1ZXN0IChsYXp5LCBkZWxheWVkIHVudGlsIHRoZSB1c2VyIHByb3ZpZGVzCiAgICAvLyBkYXRhKS4KICAgIF9odHRwUGFyc2VyLmlzSGVhZCA9IG1ldGhvZCA9PSAiSEVBRCI7CiAgICBfc3RyZWFtRnV0dXJlID0gb3V0Z29pbmcuZG9uZS50aGVuPFNvY2tldD4oKFNvY2tldCBzKSB7CiAgICAgIC8vIFJlcXVlc3Qgc2VudCwgc2V0IHVwIHJlc3BvbnNlIGNvbXBsZXRlci4KICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8X0h0dHBJbmNvbWluZz4oKTsKCiAgICAgIC8vIExpc3RlbiBmb3IgcmVzcG9uc2UuCiAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIuZnV0dXJlLnRoZW4oKGluY29taW5nKSB7CiAgICAgICAgX2N1cnJlbnRVcmkgPSBudWxsOwogICAgICAgIGluY29taW5nLmRhdGFEb25lLnRoZW4oKGNsb3NpbmcpIHsKICAgICAgICAgIGlmIChpbmNvbWluZy51cGdyYWRlZCkgewogICAgICAgICAgICBfaHR0cENsaWVudC5fY29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKICAgICAgICAgICAgc3RhcnRUaW1lcigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2xvc2VkKSByZXR1cm47CiAgICAgICAgICBpZiAoIWNsb3NpbmcgJiYKICAgICAgICAgICAgICAhX2Rpc3Bvc2UgJiYKICAgICAgICAgICAgICBpbmNvbWluZy5oZWFkZXJzLnBlcnNpc3RlbnRDb25uZWN0aW9uICYmCiAgICAgICAgICAgICAgcmVxdWVzdC5wZXJzaXN0ZW50Q29ubmVjdGlvbikgewogICAgICAgICAgICAvLyBSZXR1cm4gY29ubmVjdGlvbiwgbm93IHdlIGFyZSBkb25lLgogICAgICAgICAgICBfaHR0cENsaWVudC5fcmV0dXJuQ29ubmVjdGlvbih0aGlzKTsKICAgICAgICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAvLyBGb3IgZGlnZXN0IGF1dGhlbnRpY2F0aW9uIGlmIHByb3h5IGNoZWNrIGlmIHRoZSBwcm94eQogICAgICAgIC8vIHJlcXVlc3RzIHRoZSBjbGllbnQgdG8gc3RhcnQgdXNpbmcgYSBuZXcgbm9uY2UgZm9yIHByb3h5CiAgICAgICAgLy8gYXV0aGVudGljYXRpb24uCiAgICAgICAgaWYgKHByb3h5Q3JlZHMgIT0gbnVsbCAmJgogICAgICAgICAgICBwcm94eUNyZWRzLnNjaGVtZSA9PSBfQXV0aGVudGljYXRpb25TY2hlbWUuRElHRVNUKSB7CiAgICAgICAgICB2YXIgYXV0aEluZm8gPSBpbmNvbWluZy5oZWFkZXJzWyJwcm94eS1hdXRoZW50aWNhdGlvbi1pbmZvIl07CiAgICAgICAgICBpZiAoYXV0aEluZm8gIT0gbnVsbCAmJiBhdXRoSW5mby5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB2YXIgaGVhZGVyID0KICAgICAgICAgICAgICAgIF9IZWFkZXJWYWx1ZS5wYXJzZShhdXRoSW5mb1swXSwgcGFyYW1ldGVyU2VwYXJhdG9yOiAnLCcpOwogICAgICAgICAgICB2YXIgbmV4dG5vbmNlID0gaGVhZGVyLnBhcmFtZXRlcnNbIm5leHRub25jZSJdOwogICAgICAgICAgICBpZiAobmV4dG5vbmNlICE9IG51bGwpIHByb3h5Q3JlZHMubm9uY2UgPSBuZXh0bm9uY2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIEZvciBkaWdlc3QgYXV0aGVudGljYXRpb24gY2hlY2sgaWYgdGhlIHNlcnZlciByZXF1ZXN0cyB0aGUKICAgICAgICAvLyBjbGllbnQgdG8gc3RhcnQgdXNpbmcgYSBuZXcgbm9uY2UuCiAgICAgICAgaWYgKGNyZWRzICE9IG51bGwgJiYgY3JlZHMuc2NoZW1lID09IF9BdXRoZW50aWNhdGlvblNjaGVtZS5ESUdFU1QpIHsKICAgICAgICAgIHZhciBhdXRoSW5mbyA9IGluY29taW5nLmhlYWRlcnNbImF1dGhlbnRpY2F0aW9uLWluZm8iXTsKICAgICAgICAgIGlmIChhdXRoSW5mbyAhPSBudWxsICYmIGF1dGhJbmZvLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHZhciBoZWFkZXIgPQogICAgICAgICAgICAgICAgX0hlYWRlclZhbHVlLnBhcnNlKGF1dGhJbmZvWzBdLCBwYXJhbWV0ZXJTZXBhcmF0b3I6ICcsJyk7CiAgICAgICAgICAgIHZhciBuZXh0bm9uY2UgPSBoZWFkZXIucGFyYW1ldGVyc1sibmV4dG5vbmNlIl07CiAgICAgICAgICAgIGlmIChuZXh0bm9uY2UgIT0gbnVsbCkgY3JlZHMubm9uY2UgPSBuZXh0bm9uY2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlcXVlc3QuX29uSW5jb21pbmcoaW5jb21pbmcpOwogICAgICB9KQogICAgICAgICAgLy8gSWYgd2Ugc2VlIGEgc3RhdGUgZXJyb3IsIHdlIGZhaWxlZCB0byBnZXQgdGhlICdmaXJzdCcKICAgICAgICAgIC8vIGVsZW1lbnQuCiAgICAgICAgICAuY2F0Y2hFcnJvcigoZXJyb3IpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGRhdGEgd2FzIHJlY2VpdmVkIiwKICAgICAgICAgICAgdXJpOiB1cmkpOwogICAgICB9LCB0ZXN0OiAoZXJyb3IpID0+IGVycm9yIGlzIFN0YXRlRXJyb3IpLmNhdGNoRXJyb3IoKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgICAgLy8gV2UgYXJlIGRvbmUgd2l0aCB0aGUgc29ja2V0LgogICAgICAgIGRlc3Ryb3koKTsKICAgICAgICByZXF1ZXN0Ll9vbkVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSk7CgogICAgICAvLyBSZXN1bWUgdGhlIHBhcnNlciBub3cgd2UgaGF2ZSBhIGhhbmRsZXIuCiAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgIHJldHVybiBzOwogICAgfSwgb25FcnJvcjogKGUpIHsKICAgICAgZGVzdHJveSgpOwogICAgfSk7CiAgICByZXR1cm4gcmVxdWVzdDsKICB9CgogIEZ1dHVyZTxTb2NrZXQ+IGRldGFjaFNvY2tldCgpIHsKICAgIHJldHVybiBfc3RyZWFtRnV0dXJlLnRoZW4oCiAgICAgICAgKF8pID0+IG5ldyBfRGV0YWNoZWRTb2NrZXQoX3NvY2tldCwgX2h0dHBQYXJzZXIuZGV0YWNoSW5jb21pbmcoKSkpOwogIH0KCiAgdm9pZCBkZXN0cm95KCkgewogICAgY2xvc2VkID0gdHJ1ZTsKICAgIF9odHRwQ2xpZW50Ll9jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwogICAgX3NvY2tldC5kZXN0cm95KCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgY2xvc2VkID0gdHJ1ZTsKICAgIF9odHRwQ2xpZW50Ll9jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwogICAgX3N0cmVhbUZ1dHVyZQogICAgICAgIC50aW1lb3V0KF9odHRwQ2xpZW50LmlkbGVUaW1lb3V0KQogICAgICAgIC50aGVuKChfKSA9PiBfc29ja2V0LmRlc3Ryb3koKSk7CiAgfQoKICBGdXR1cmU8X0h0dHBDbGllbnRDb25uZWN0aW9uPiBjcmVhdGVQcm94eVR1bm5lbChTdHJpbmcgaG9zdCwgaW50IHBvcnQsCiAgICAgIF9Qcm94eSBwcm94eSwgYm9vbCBjYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpKSB7CiAgICBfSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCA9CiAgICAgICAgc2VuZChuZXcgVXJpKGhvc3Q6IGhvc3QsIHBvcnQ6IHBvcnQpLCBwb3J0LCAiQ09OTkVDVCIsIHByb3h5KTsKICAgIGlmIChwcm94eS5pc0F1dGhlbnRpY2F0ZWQpIHsKICAgICAgLy8gSWYgdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdXNlciBpbmZvcm1hdGlvbiB1c2UgdGhhdAogICAgICAvLyBmb3IgcHJveHkgYmFzaWMgYXV0aG9yaXphdGlvbi4KICAgICAgU3RyaW5nIGF1dGggPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0Jhc2U2NCgKICAgICAgICAgIHV0ZjguZW5jb2RlKCIke3Byb3h5LnVzZXJuYW1lfToke3Byb3h5LnBhc3N3b3JkfSIpKTsKICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5wcm94eUF1dGhvcml6YXRpb25IZWFkZXIsICJCYXNpYyAkYXV0aCIpOwogICAgfQogICAgcmV0dXJuIHJlcXVlc3QuY2xvc2UoKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPSBIdHRwU3RhdHVzLm9rKSB7CiAgICAgICAgdGhyb3cgIlByb3h5IGZhaWxlZCB0byBlc3RhYmxpc2ggdHVubmVsICIKICAgICAgICAgICAgIigke3Jlc3BvbnNlLnN0YXR1c0NvZGV9ICR7cmVzcG9uc2UucmVhc29uUGhyYXNlfSkiOwogICAgICB9CiAgICAgIHZhciBzb2NrZXQgPSAocmVzcG9uc2UgYXMgX0h0dHBDbGllbnRSZXNwb25zZSkKICAgICAgICAgIC5faHR0cFJlcXVlc3QKICAgICAgICAgIC5faHR0cENsaWVudENvbm5lY3Rpb24KICAgICAgICAgIC5fc29ja2V0OwogICAgICByZXR1cm4gU2VjdXJlU29ja2V0LnNlY3VyZShzb2NrZXQsCiAgICAgICAgICBob3N0OiBob3N0LCBjb250ZXh0OiBfY29udGV4dCwgb25CYWRDZXJ0aWZpY2F0ZTogY2FsbGJhY2spOwogICAgfSkudGhlbigoc2VjdXJlU29ja2V0KSB7CiAgICAgIFN0cmluZyBrZXkgPSBfSHR0cENsaWVudENvbm5lY3Rpb24ubWFrZUtleSh0cnVlLCBob3N0LCBwb3J0KTsKICAgICAgcmV0dXJuIG5ldyBfSHR0cENsaWVudENvbm5lY3Rpb24oCiAgICAgICAgICBrZXksIHNlY3VyZVNvY2tldCwgcmVxdWVzdC5faHR0cENsaWVudCwgdHJ1ZSk7CiAgICB9KTsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX0h0dHBDb25uZWN0aW9uSW5mby5jcmVhdGUoX3NvY2tldCk7CgogIHN0YXRpYyBtYWtlS2V5KGJvb2wgaXNTZWN1cmUsIFN0cmluZyBob3N0LCBpbnQgcG9ydCkgewogICAgcmV0dXJuIGlzU2VjdXJlID8gInNzaDokaG9zdDokcG9ydCIgOiAiJGhvc3Q6JHBvcnQiOwogIH0KCiAgdm9pZCBzdG9wVGltZXIoKSB7CiAgICBpZiAoX2lkbGVUaW1lciAhPSBudWxsKSB7CiAgICAgIF9pZGxlVGltZXIuY2FuY2VsKCk7CiAgICAgIF9pZGxlVGltZXIgPSBudWxsOwogICAgfQogIH0KCiAgdm9pZCBzdGFydFRpbWVyKCkgewogICAgYXNzZXJ0KF9pZGxlVGltZXIgPT0gbnVsbCk7CiAgICBfaWRsZVRpbWVyID0gbmV3IFRpbWVyKF9odHRwQ2xpZW50LmlkbGVUaW1lb3V0LCAoKSB7CiAgICAgIF9pZGxlVGltZXIgPSBudWxsOwogICAgICBjbG9zZSgpOwogICAgfSk7CiAgfQp9CgpjbGFzcyBfQ29ubmVjdGlvbkluZm8gewogIGZpbmFsIF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uOwogIGZpbmFsIF9Qcm94eSBwcm94eTsKCiAgX0Nvbm5lY3Rpb25JbmZvKHRoaXMuY29ubmVjdGlvbiwgdGhpcy5wcm94eSk7Cn0KCmNsYXNzIF9Db25uZWN0aW9uVGFyZ2V0IHsKICAvLyBVbmlxdWUga2V5IGZvciB0aGlzIGNvbm5lY3Rpb24gdGFyZ2V0LgogIGZpbmFsIFN0cmluZyBrZXk7CiAgZmluYWwgU3RyaW5nIGhvc3Q7CiAgZmluYWwgaW50IHBvcnQ7CiAgZmluYWwgYm9vbCBpc1NlY3VyZTsKICBmaW5hbCBTZWN1cml0eUNvbnRleHQgY29udGV4dDsKICBmaW5hbCBTZXQ8X0h0dHBDbGllbnRDb25uZWN0aW9uPiBfaWRsZSA9IG5ldyBIYXNoU2V0KCk7CiAgZmluYWwgU2V0PF9IdHRwQ2xpZW50Q29ubmVjdGlvbj4gX2FjdGl2ZSA9IG5ldyBIYXNoU2V0KCk7CiAgZmluYWwgU2V0PENvbm5lY3Rpb25UYXNrPiBfc29ja2V0VGFza3MgPSBuZXcgSGFzaFNldCgpOwogIGZpbmFsIFF1ZXVlIF9wZW5kaW5nID0gbmV3IExpc3RRdWV1ZSgpOwogIGludCBfY29ubmVjdGluZyA9IDA7CgogIF9Db25uZWN0aW9uVGFyZ2V0KAogICAgICB0aGlzLmtleSwgdGhpcy5ob3N0LCB0aGlzLnBvcnQsIHRoaXMuaXNTZWN1cmUsIHRoaXMuY29udGV4dCk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2lkbGUuaXNFbXB0eSAmJiBfYWN0aXZlLmlzRW1wdHkgJiYgX2Nvbm5lY3RpbmcgPT0gMDsKCiAgYm9vbCBnZXQgaGFzSWRsZSA9PiBfaWRsZS5pc05vdEVtcHR5OwoKICBib29sIGdldCBoYXNBY3RpdmUgPT4gX2FjdGl2ZS5pc05vdEVtcHR5IHx8IF9jb25uZWN0aW5nID4gMDsKCiAgX0h0dHBDbGllbnRDb25uZWN0aW9uIHRha2VJZGxlKCkgewogICAgYXNzZXJ0KGhhc0lkbGUpOwogICAgX0h0dHBDbGllbnRDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBfaWRsZS5maXJzdDsKICAgIF9pZGxlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIGNvbm5lY3Rpb24uc3RvcFRpbWVyKCk7CiAgICBfYWN0aXZlLmFkZChjb25uZWN0aW9uKTsKICAgIHJldHVybiBjb25uZWN0aW9uOwogIH0KCiAgX2NoZWNrUGVuZGluZygpIHsKICAgIGlmIChfcGVuZGluZy5pc05vdEVtcHR5KSB7CiAgICAgIF9wZW5kaW5nLnJlbW92ZUZpcnN0KCkoKTsKICAgIH0KICB9CgogIHZvaWQgYWRkTmV3QWN0aXZlKF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICBfYWN0aXZlLmFkZChjb25uZWN0aW9uKTsKICB9CgogIHZvaWQgcmV0dXJuQ29ubmVjdGlvbihfSHR0cENsaWVudENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgYXNzZXJ0KF9hY3RpdmUuY29udGFpbnMoY29ubmVjdGlvbikpOwogICAgX2FjdGl2ZS5yZW1vdmUoY29ubmVjdGlvbik7CiAgICBfaWRsZS5hZGQoY29ubmVjdGlvbik7CiAgICBjb25uZWN0aW9uLnN0YXJ0VGltZXIoKTsKICAgIF9jaGVja1BlbmRpbmcoKTsKICB9CgogIHZvaWQgY29ubmVjdGlvbkNsb3NlZChfSHR0cENsaWVudENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgYXNzZXJ0KCFfYWN0aXZlLmNvbnRhaW5zKGNvbm5lY3Rpb24pIHx8ICFfaWRsZS5jb250YWlucyhjb25uZWN0aW9uKSk7CiAgICBfYWN0aXZlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIF9pZGxlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIF9jaGVja1BlbmRpbmcoKTsKICB9CgogIHZvaWQgY2xvc2UoYm9vbCBmb3JjZSkgewogICAgLy8gQWx3YXlzIGNhbmNlbCBwZW5kaW5nIHNvY2tldCBjb25uZWN0aW9ucy4KICAgIGZvciAodmFyIHQgaW4gX3NvY2tldFRhc2tzLnRvTGlzdCgpKSB7CiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc29ja2V0IGlzIGRlc3Ryb3llZCBpZiB0aGUgQ29ubmVjdGlvblRhc2sgaXMgY2FuY2VsbGVkLgogICAgICB0LnNvY2tldC50aGVuKChzKSB7CiAgICAgICAgcy5kZXN0cm95KCk7CiAgICAgIH0sIG9uRXJyb3I6IChlKSB7fSk7CiAgICAgIHQuY2FuY2VsKCk7CiAgICB9CiAgICBpZiAoZm9yY2UpIHsKICAgICAgZm9yICh2YXIgYyBpbiBfaWRsZS50b0xpc3QoKSkgewogICAgICAgIGMuZGVzdHJveSgpOwogICAgICB9CiAgICAgIGZvciAodmFyIGMgaW4gX2FjdGl2ZS50b0xpc3QoKSkgewogICAgICAgIGMuZGVzdHJveSgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBjIGluIF9pZGxlLnRvTGlzdCgpKSB7CiAgICAgICAgYy5jbG9zZSgpOwogICAgICB9CiAgICB9CiAgfQoKICBGdXR1cmU8X0Nvbm5lY3Rpb25JbmZvPiBjb25uZWN0KAogICAgICBTdHJpbmcgdXJpSG9zdCwgaW50IHVyaVBvcnQsIF9Qcm94eSBwcm94eSwgX0h0dHBDbGllbnQgY2xpZW50KSB7CiAgICBpZiAoaGFzSWRsZSkgewogICAgICB2YXIgY29ubmVjdGlvbiA9IHRha2VJZGxlKCk7CiAgICAgIGNsaWVudC5fY29ubmVjdGlvbnNDaGFuZ2VkKCk7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBfQ29ubmVjdGlvbkluZm8oY29ubmVjdGlvbiwgcHJveHkpKTsKICAgIH0KICAgIGlmIChjbGllbnQubWF4Q29ubmVjdGlvbnNQZXJIb3N0ICE9IG51bGwgJiYKICAgICAgICBfYWN0aXZlLmxlbmd0aCArIF9jb25uZWN0aW5nID49IGNsaWVudC5tYXhDb25uZWN0aW9uc1Blckhvc3QpIHsKICAgICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8X0Nvbm5lY3Rpb25JbmZvPigpOwogICAgICBfcGVuZGluZy5hZGQoKCkgewogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZShjb25uZWN0KHVyaUhvc3QsIHVyaVBvcnQsIHByb3h5LCBjbGllbnQpKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogICAgfQogICAgdmFyIGN1cnJlbnRCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrID0gY2xpZW50Ll9iYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrOwoKICAgIGJvb2wgY2FsbGJhY2soWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSB7CiAgICAgIGlmIChjdXJyZW50QmFkQ2VydGlmaWNhdGVDYWxsYmFjayA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBjdXJyZW50QmFkQ2VydGlmaWNhdGVDYWxsYmFjayhjZXJ0aWZpY2F0ZSwgdXJpSG9zdCwgdXJpUG9ydCk7CiAgICB9CgogICAgRnV0dXJlPENvbm5lY3Rpb25UYXNrPiBjb25uZWN0aW9uVGFzayA9IChpc1NlY3VyZSAmJiBwcm94eS5pc0RpcmVjdAogICAgICAgID8gU2VjdXJlU29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LCBvbkJhZENlcnRpZmljYXRlOiBjYWxsYmFjaykKICAgICAgICA6IFNvY2tldC5zdGFydENvbm5lY3QoaG9zdCwgcG9ydCkpOwogICAgX2Nvbm5lY3RpbmcrKzsKICAgIHJldHVybiBjb25uZWN0aW9uVGFzay50aGVuKChDb25uZWN0aW9uVGFzayB0YXNrKSB7CiAgICAgIF9zb2NrZXRUYXNrcy5hZGQodGFzayk7CiAgICAgIEZ1dHVyZSBzb2NrZXRGdXR1cmUgPSB0YXNrLnNvY2tldDsKICAgICAgZmluYWwgRHVyYXRpb24gY29ubmVjdGlvblRpbWVvdXQgPSBjbGllbnQuY29ubmVjdGlvblRpbWVvdXQ7CiAgICAgIGlmIChjb25uZWN0aW9uVGltZW91dCAhPSBudWxsKSB7CiAgICAgICAgc29ja2V0RnV0dXJlID0gc29ja2V0RnV0dXJlLnRpbWVvdXQoY29ubmVjdGlvblRpbWVvdXQsIG9uVGltZW91dDogKCkgewogICAgICAgICAgX3NvY2tldFRhc2tzLnJlbW92ZSh0YXNrKTsKICAgICAgICAgIHRhc2suY2FuY2VsKCk7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gc29ja2V0RnV0dXJlLnRoZW4oKHNvY2tldCkgewogICAgICAgIC8vIFdoZW4gdGhlcmUgaXMgYSB0aW1lb3V0LCB0aGVyZSBpcyBhIHJhY2UgaW4gd2hpY2ggdGhlIGNvbm5lY3Rpb25UYXNrCiAgICAgICAgLy8gRnV0dXJlIHdvbid0IGJlIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yIGJlZm9yZSB0aGUgc29ja2V0RnV0dXJlIGhlcmUKICAgICAgICAvLyBpcyBjb21wbGV0ZWQgd2l0aCAnbnVsbCcgYnkgdGhlIG9uVGltZW91dCBjYWxsYmFjayBhYm92ZS4gSW4gdGhpcwogICAgICAgIC8vIGNhc2UsIHByb3BhZ2F0ZSBhIFNvY2tldEV4Y2VwdGlvbiBhcyBzcGVjaWZpZWQgYnkgdGhlCiAgICAgICAgLy8gSHR0cENsaWVudC5jb25uZWN0aW9uVGltZW91dCBkb2NzLgogICAgICAgIGlmIChzb2NrZXQgPT0gbnVsbCkgewogICAgICAgICAgYXNzZXJ0KGNvbm5lY3Rpb25UaW1lb3V0ICE9IG51bGwpOwogICAgICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigKICAgICAgICAgICAgICAiSFRUUCBjb25uZWN0aW9uIHRpbWVkIG91dCBhZnRlciAke2Nvbm5lY3Rpb25UaW1lb3V0fSwgIgogICAgICAgICAgICAgICJob3N0OiAke2hvc3R9LCBwb3J0OiAke3BvcnR9Iik7CiAgICAgICAgfQogICAgICAgIF9jb25uZWN0aW5nLS07CiAgICAgICAgc29ja2V0LnNldE9wdGlvbihTb2NrZXRPcHRpb24udGNwTm9EZWxheSwgdHJ1ZSk7CiAgICAgICAgdmFyIGNvbm5lY3Rpb24gPQogICAgICAgICAgICBuZXcgX0h0dHBDbGllbnRDb25uZWN0aW9uKGtleSwgc29ja2V0LCBjbGllbnQsIGZhbHNlLCBjb250ZXh0KTsKICAgICAgICBpZiAoaXNTZWN1cmUgJiYgIXByb3h5LmlzRGlyZWN0KSB7CiAgICAgICAgICBjb25uZWN0aW9uLl9kaXNwb3NlID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uCiAgICAgICAgICAgICAgLmNyZWF0ZVByb3h5VHVubmVsKHVyaUhvc3QsIHVyaVBvcnQsIHByb3h5LCBjYWxsYmFjaykKICAgICAgICAgICAgICAudGhlbigodHVubmVsKSB7CiAgICAgICAgICAgIGNsaWVudAogICAgICAgICAgICAgICAgLl9nZXRDb25uZWN0aW9uVGFyZ2V0KHVyaUhvc3QsIHVyaVBvcnQsIHRydWUpCiAgICAgICAgICAgICAgICAuYWRkTmV3QWN0aXZlKHR1bm5lbCk7CiAgICAgICAgICAgIF9zb2NrZXRUYXNrcy5yZW1vdmUodGFzayk7CiAgICAgICAgICAgIHJldHVybiBuZXcgX0Nvbm5lY3Rpb25JbmZvKHR1bm5lbCwgcHJveHkpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFkZE5ld0FjdGl2ZShjb25uZWN0aW9uKTsKICAgICAgICAgIF9zb2NrZXRUYXNrcy5yZW1vdmUodGFzayk7CiAgICAgICAgICByZXR1cm4gbmV3IF9Db25uZWN0aW9uSW5mbyhjb25uZWN0aW9uLCBwcm94eSk7CiAgICAgICAgfQogICAgICB9LCBvbkVycm9yOiAoZXJyb3IpIHsKICAgICAgICBfY29ubmVjdGluZy0tOwogICAgICAgIF9zb2NrZXRUYXNrcy5yZW1vdmUodGFzayk7CiAgICAgICAgX2NoZWNrUGVuZGluZygpOwogICAgICAgIHRocm93IGVycm9yOwogICAgICB9KTsKICAgIH0pOwogIH0KfQoKdHlwZWRlZiBib29sIEJhZENlcnRpZmljYXRlQ2FsbGJhY2soWDUwOUNlcnRpZmljYXRlIGNyLCBTdHJpbmcgaG9zdCwgaW50IHBvcnQpOwoKY2xhc3MgX0h0dHBDbGllbnQgaW1wbGVtZW50cyBIdHRwQ2xpZW50IHsKICBib29sIF9jbG9zaW5nID0gZmFsc2U7CiAgYm9vbCBfY2xvc2luZ0ZvcmNlZnVsbHkgPSBmYWxzZTsKICBmaW5hbCBNYXA8U3RyaW5nLCBfQ29ubmVjdGlvblRhcmdldD4gX2Nvbm5lY3Rpb25UYXJnZXRzID0KICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLCBfQ29ubmVjdGlvblRhcmdldD4oKTsKICBmaW5hbCBMaXN0PF9DcmVkZW50aWFscz4gX2NyZWRlbnRpYWxzID0gW107CiAgZmluYWwgTGlzdDxfUHJveHlDcmVkZW50aWFscz4gX3Byb3h5Q3JlZGVudGlhbHMgPSBbXTsKICBmaW5hbCBTZWN1cml0eUNvbnRleHQgX2NvbnRleHQ7CiAgRnVuY3Rpb24gX2F1dGhlbnRpY2F0ZTsKICBGdW5jdGlvbiBfYXV0aGVudGljYXRlUHJveHk7CiAgRnVuY3Rpb24gX2ZpbmRQcm94eSA9IEh0dHBDbGllbnQuZmluZFByb3h5RnJvbUVudmlyb25tZW50OwogIER1cmF0aW9uIF9pZGxlVGltZW91dCA9IGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDE1KTsKICBCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrIF9iYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrOwoKICBEdXJhdGlvbiBnZXQgaWRsZVRpbWVvdXQgPT4gX2lkbGVUaW1lb3V0OwoKICBEdXJhdGlvbiBjb25uZWN0aW9uVGltZW91dDsKCiAgaW50IG1heENvbm5lY3Rpb25zUGVySG9zdDsKCiAgYm9vbCBhdXRvVW5jb21wcmVzcyA9IHRydWU7CgogIFN0cmluZyB1c2VyQWdlbnQgPSBfZ2V0SHR0cFZlcnNpb24oKTsKCiAgX0h0dHBDbGllbnQodGhpcy5fY29udGV4dCk7CgogIHZvaWQgc2V0IGlkbGVUaW1lb3V0KER1cmF0aW9uIHRpbWVvdXQpIHsKICAgIF9pZGxlVGltZW91dCA9IHRpbWVvdXQ7CiAgICBmb3IgKHZhciBjIGluIF9jb25uZWN0aW9uVGFyZ2V0cy52YWx1ZXMpIHsKICAgICAgZm9yICh2YXIgaWRsZSBpbiBjLl9pZGxlKSB7CiAgICAgICAgLy8gUmVzZXQgdGltZXIuIFRoaXMgaXMgZmluZSwgYXMgaXQncyBub3QgaGFwcGVuaW5nIG9mdGVuLgogICAgICAgIGlkbGUuc3RvcFRpbWVyKCk7CiAgICAgICAgaWRsZS5zdGFydFRpbWVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHNldCBiYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrKAogICAgICBib29sIGNhbGxiYWNrKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0LCBTdHJpbmcgaG9zdCwgaW50IHBvcnQpKSB7CiAgICBfYmFkQ2VydGlmaWNhdGVDYWxsYmFjayA9IGNhbGxiYWNrOwogIH0KCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBvcGVuKAogICAgICBTdHJpbmcgbWV0aG9kLCBTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKSB7CiAgICBjb25zdCBpbnQgaGFzaE1hcmsgPSAweDIzOwogICAgY29uc3QgaW50IHF1ZXN0aW9uTWFyayA9IDB4M2Y7CiAgICBpbnQgZnJhZ21lbnRTdGFydCA9IHBhdGgubGVuZ3RoOwogICAgaW50IHF1ZXJ5U3RhcnQgPSBwYXRoLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHZhciBjaGFyID0gcGF0aC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciA9PSBoYXNoTWFyaykgewogICAgICAgIGZyYWdtZW50U3RhcnQgPSBpOwogICAgICAgIHF1ZXJ5U3RhcnQgPSBpOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gcXVlc3Rpb25NYXJrKSB7CiAgICAgICAgcXVlcnlTdGFydCA9IGk7CiAgICAgIH0KICAgIH0KICAgIFN0cmluZyBxdWVyeSA9IG51bGw7CiAgICBpZiAocXVlcnlTdGFydCA8IGZyYWdtZW50U3RhcnQpIHsKICAgICAgcXVlcnkgPSBwYXRoLnN1YnN0cmluZyhxdWVyeVN0YXJ0ICsgMSwgZnJhZ21lbnRTdGFydCk7CiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBxdWVyeVN0YXJ0KTsKICAgIH0KICAgIFVyaSB1cmkgPSBuZXcgVXJpKAogICAgICAgIHNjaGVtZTogImh0dHAiLCBob3N0OiBob3N0LCBwb3J0OiBwb3J0LCBwYXRoOiBwYXRoLCBxdWVyeTogcXVlcnkpOwogICAgcmV0dXJuIF9vcGVuVXJsKG1ldGhvZCwgdXJpKTsKICB9CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gb3BlblVybChTdHJpbmcgbWV0aG9kLCBVcmkgdXJsKSA9PgogICAgICBfb3BlblVybChtZXRob2QsIHVybCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZ2V0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpID0+CiAgICAgIG9wZW4oImdldCIsIGhvc3QsIHBvcnQsIHBhdGgpOwoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGdldFVybChVcmkgdXJsKSA9PiBfb3BlblVybCgiZ2V0IiwgdXJsKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwb3N0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpID0+CiAgICAgIG9wZW4oInBvc3QiLCBob3N0LCBwb3J0LCBwYXRoKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwb3N0VXJsKFVyaSB1cmwpID0+IF9vcGVuVXJsKCJwb3N0IiwgdXJsKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwdXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCkgPT4KICAgICAgb3BlbigicHV0IiwgaG9zdCwgcG9ydCwgcGF0aCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gcHV0VXJsKFVyaSB1cmwpID0+IF9vcGVuVXJsKCJwdXQiLCB1cmwpOwoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGRlbGV0ZShTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKSA9PgogICAgICBvcGVuKCJkZWxldGUiLCBob3N0LCBwb3J0LCBwYXRoKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBkZWxldGVVcmwoVXJpIHVybCkgPT4gX29wZW5VcmwoImRlbGV0ZSIsIHVybCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gaGVhZChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKSA9PgogICAgICBvcGVuKCJoZWFkIiwgaG9zdCwgcG9ydCwgcGF0aCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gaGVhZFVybChVcmkgdXJsKSA9PiBfb3BlblVybCgiaGVhZCIsIHVybCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gcGF0Y2goU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCkgPT4KICAgICAgb3BlbigicGF0Y2giLCBob3N0LCBwb3J0LCBwYXRoKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaFVybChVcmkgdXJsKSA9PiBfb3BlblVybCgicGF0Y2giLCB1cmwpOwoKICB2b2lkIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pIHsKICAgIF9jbG9zaW5nID0gdHJ1ZTsKICAgIF9jbG9zaW5nRm9yY2VmdWxseSA9IGZvcmNlOwogICAgX2Nsb3NlQ29ubmVjdGlvbnMoX2Nsb3NpbmdGb3JjZWZ1bGx5KTsKICAgIGFzc2VydCghX2Nvbm5lY3Rpb25UYXJnZXRzLnZhbHVlcy5hbnkoKHMpID0+IHMuaGFzSWRsZSkpOwogICAgYXNzZXJ0KAogICAgICAgICFmb3JjZSB8fCAhX2Nvbm5lY3Rpb25UYXJnZXRzLnZhbHVlcy5hbnkoKHMpID0+IHMuX2FjdGl2ZS5pc05vdEVtcHR5KSk7CiAgfQoKICBzZXQgYXV0aGVudGljYXRlKEZ1dHVyZTxib29sPiBmKFVyaSB1cmwsIFN0cmluZyBzY2hlbWUsIFN0cmluZyByZWFsbSkpIHsKICAgIF9hdXRoZW50aWNhdGUgPSBmOwogIH0KCiAgdm9pZCBhZGRDcmVkZW50aWFscyhVcmkgdXJsLCBTdHJpbmcgcmVhbG0sIEh0dHBDbGllbnRDcmVkZW50aWFscyBjcikgewogICAgX2NyZWRlbnRpYWxzLmFkZChuZXcgX1NpdGVDcmVkZW50aWFscyh1cmwsIHJlYWxtLCBjcikpOwogIH0KCiAgc2V0IGF1dGhlbnRpY2F0ZVByb3h5KAogICAgICBGdXR1cmU8Ym9vbD4gZihTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBzY2hlbWUsIFN0cmluZyByZWFsbSkpIHsKICAgIF9hdXRoZW50aWNhdGVQcm94eSA9IGY7CiAgfQoKICB2b2lkIGFkZFByb3h5Q3JlZGVudGlhbHMoCiAgICAgIFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHJlYWxtLCBIdHRwQ2xpZW50Q3JlZGVudGlhbHMgY3IpIHsKICAgIF9wcm94eUNyZWRlbnRpYWxzLmFkZChuZXcgX1Byb3h5Q3JlZGVudGlhbHMoaG9zdCwgcG9ydCwgcmVhbG0sIGNyKSk7CiAgfQoKICBzZXQgZmluZFByb3h5KFN0cmluZyBmKFVyaSB1cmkpKSA9PiBfZmluZFByb3h5ID0gZjsKCiAgRnV0dXJlPF9IdHRwQ2xpZW50UmVxdWVzdD4gX29wZW5VcmwoU3RyaW5nIG1ldGhvZCwgVXJpIHVyaSkgewogICAgaWYgKF9jbG9zaW5nKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJDbGllbnQgaXMgY2xvc2VkIik7CiAgICB9CgogICAgLy8gSWdub3JlIGFueSBmcmFnbWVudHMgb24gdGhlIHJlcXVlc3QgVVJJLgogICAgdXJpID0gdXJpLnJlbW92ZUZyYWdtZW50KCk7CgogICAgaWYgKG1ldGhvZCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKG1ldGhvZCk7CiAgICB9CiAgICBpZiAobWV0aG9kICE9ICJDT05ORUNUIikgewogICAgICBpZiAodXJpLmhvc3QuaXNFbXB0eSkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJObyBob3N0IHNwZWNpZmllZCBpbiBVUkkgJHVyaSIpOwogICAgICB9IGVsc2UgaWYgKHVyaS5zY2hlbWUgIT0gImh0dHAiICYmIHVyaS5zY2hlbWUgIT0gImh0dHBzIikgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAiVW5zdXBwb3J0ZWQgc2NoZW1lICcke3VyaS5zY2hlbWV9JyBpbiBVUkkgJHVyaSIpOwogICAgICB9CiAgICB9CgogICAgYm9vbCBpc1NlY3VyZSA9ICh1cmkuc2NoZW1lID09ICJodHRwcyIpOwogICAgaW50IHBvcnQgPSB1cmkucG9ydDsKICAgIGlmIChwb3J0ID09IDApIHsKICAgICAgcG9ydCA9CiAgICAgICAgICBpc1NlY3VyZSA/IEh0dHBDbGllbnQuZGVmYXVsdEh0dHBzUG9ydCA6IEh0dHBDbGllbnQuZGVmYXVsdEh0dHBQb3J0OwogICAgfQogICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGEgcHJveHkgc2VydmVyIHNob3VsZCBiZSB1c2VkIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICB2YXIgcHJveHlDb25mID0gY29uc3QgX1Byb3h5Q29uZmlndXJhdGlvbi5kaXJlY3QoKTsKICAgIGlmIChfZmluZFByb3h5ICE9IG51bGwpIHsKICAgICAgLy8gVE9ETyhzZ2plc3NlKTogS2VlcCBhIG1hcCBvZiB0aGVzZSBhcyBub3JtYWxseSBvbmx5IGEgZmV3CiAgICAgIC8vIGNvbmZpZ3VyYXRpb24gc3RyaW5ncyB3aWxsIGJlIHVzZWQuCiAgICAgIHRyeSB7CiAgICAgICAgcHJveHlDb25mID0gbmV3IF9Qcm94eUNvbmZpZ3VyYXRpb24oX2ZpbmRQcm94eSh1cmkpKTsKICAgICAgfSBjYXRjaCAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbih1cmkuaG9zdCwgcG9ydCwgcHJveHlDb25mLCBpc1NlY3VyZSkKICAgICAgICAudGhlbigoX0Nvbm5lY3Rpb25JbmZvIGluZm8pIHsKICAgICAgX0h0dHBDbGllbnRSZXF1ZXN0IHNlbmQoX0Nvbm5lY3Rpb25JbmZvIGluZm8pIHsKICAgICAgICByZXR1cm4gaW5mby5jb25uZWN0aW9uCiAgICAgICAgICAgIC5zZW5kKHVyaSwgcG9ydCwgbWV0aG9kLnRvVXBwZXJDYXNlKCksIGluZm8ucHJveHkpOwogICAgICB9CgogICAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSB0aGUgcmVxdWVzdCB3YXMgc2VudCwgY3JlYXRlCiAgICAgIC8vIGFuZCB1c2UgYW5vdGhlciBjb25uZWN0aW9uLgogICAgICBpZiAoaW5mby5jb25uZWN0aW9uLmNsb3NlZCkgewogICAgICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbih1cmkuaG9zdCwgcG9ydCwgcHJveHlDb25mLCBpc1NlY3VyZSkudGhlbihzZW5kKTsKICAgICAgfQogICAgICByZXR1cm4gc2VuZChpbmZvKTsKICAgIH0pOwogIH0KCiAgRnV0dXJlPF9IdHRwQ2xpZW50UmVxdWVzdD4gX29wZW5VcmxGcm9tUmVxdWVzdCgKICAgICAgU3RyaW5nIG1ldGhvZCwgVXJpIHVyaSwgX0h0dHBDbGllbnRSZXF1ZXN0IHByZXZpb3VzKSB7CiAgICAvLyBJZiB0aGUgbmV3IFVSSSBpcyByZWxhdGl2ZSAodG8gZWl0aGVyICcvJyBvciBzb21lIHN1Yi1wYXRoKSwKICAgIC8vIGNvbnN0cnVjdCBhIGZ1bGwgVVJJIGZyb20gdGhlIHByZXZpb3VzIG9uZS4KICAgIFVyaSByZXNvbHZlZCA9IHByZXZpb3VzLnVyaS5yZXNvbHZlVXJpKHVyaSk7CiAgICByZXR1cm4gX29wZW5VcmwobWV0aG9kLCByZXNvbHZlZCkudGhlbigoX0h0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgICAgcmVxdWVzdAogICAgICAgIC8vIE9ubHkgZm9sbG93IHJlZGlyZWN0cyBpZiBpbml0aWFsIHJlcXVlc3QgZGlkLgogICAgICAgIC4uZm9sbG93UmVkaXJlY3RzID0gcHJldmlvdXMuZm9sbG93UmVkaXJlY3RzCiAgICAgICAgLy8gQWxsb3cgc2FtZSBudW1iZXIgb2YgcmVkaXJlY3RzLgogICAgICAgIC4ubWF4UmVkaXJlY3RzID0gcHJldmlvdXMubWF4UmVkaXJlY3RzOwogICAgICAvLyBDb3B5IGhlYWRlcnMuCiAgICAgIGZvciAodmFyIGhlYWRlciBpbiBwcmV2aW91cy5oZWFkZXJzLl9oZWFkZXJzLmtleXMpIHsKICAgICAgICBpZiAocmVxdWVzdC5oZWFkZXJzW2hlYWRlcl0gPT0gbnVsbCkgewogICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXIsIHByZXZpb3VzLmhlYWRlcnNbaGVhZGVyXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXF1ZXN0CiAgICAgICAgLi5oZWFkZXJzLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2UKICAgICAgICAuLmNvbnRlbnRMZW5ndGggPSAwOwogICAgfSk7CiAgfQoKICAvLyBSZXR1cm4gYSBsaXZlIGNvbm5lY3Rpb24gdG8gdGhlIGlkbGUgcG9vbC4KICB2b2lkIF9yZXR1cm5Db25uZWN0aW9uKF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICBfY29ubmVjdGlvblRhcmdldHNbY29ubmVjdGlvbi5rZXldLnJldHVybkNvbm5lY3Rpb24oY29ubmVjdGlvbik7CiAgICBfY29ubmVjdGlvbnNDaGFuZ2VkKCk7CiAgfQoKICAvLyBSZW1vdmUgYSBjbG9zZWQgY29ubmVjdGlvbiBmcm9tIHRoZSBhY3RpdmUgc2V0LgogIHZvaWQgX2Nvbm5lY3Rpb25DbG9zZWQoX0h0dHBDbGllbnRDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKICAgIGNvbm5lY3Rpb24uc3RvcFRpbWVyKCk7CiAgICB2YXIgY29ubmVjdGlvblRhcmdldCA9IF9jb25uZWN0aW9uVGFyZ2V0c1tjb25uZWN0aW9uLmtleV07CiAgICBpZiAoY29ubmVjdGlvblRhcmdldCAhPSBudWxsKSB7CiAgICAgIGNvbm5lY3Rpb25UYXJnZXQuY29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKICAgICAgaWYgKGNvbm5lY3Rpb25UYXJnZXQuaXNFbXB0eSkgewogICAgICAgIF9jb25uZWN0aW9uVGFyZ2V0cy5yZW1vdmUoY29ubmVjdGlvbi5rZXkpOwogICAgICB9CiAgICAgIF9jb25uZWN0aW9uc0NoYW5nZWQoKTsKICAgIH0KICB9CgogIHZvaWQgX2Nvbm5lY3Rpb25zQ2hhbmdlZCgpIHsKICAgIGlmIChfY2xvc2luZykgewogICAgICBfY2xvc2VDb25uZWN0aW9ucyhfY2xvc2luZ0ZvcmNlZnVsbHkpOwogICAgfQogIH0KCiAgdm9pZCBfY2xvc2VDb25uZWN0aW9ucyhib29sIGZvcmNlKSB7CiAgICBmb3IgKHZhciBjb25uZWN0aW9uVGFyZ2V0IGluIF9jb25uZWN0aW9uVGFyZ2V0cy52YWx1ZXMudG9MaXN0KCkpIHsKICAgICAgY29ubmVjdGlvblRhcmdldC5jbG9zZShmb3JjZSk7CiAgICB9CiAgfQoKICBfQ29ubmVjdGlvblRhcmdldCBfZ2V0Q29ubmVjdGlvblRhcmdldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIGJvb2wgaXNTZWN1cmUpIHsKICAgIFN0cmluZyBrZXkgPSBfSHR0cENsaWVudENvbm5lY3Rpb24ubWFrZUtleShpc1NlY3VyZSwgaG9zdCwgcG9ydCk7CiAgICByZXR1cm4gX2Nvbm5lY3Rpb25UYXJnZXRzLnB1dElmQWJzZW50KGtleSwgKCkgewogICAgICByZXR1cm4gbmV3IF9Db25uZWN0aW9uVGFyZ2V0KGtleSwgaG9zdCwgcG9ydCwgaXNTZWN1cmUsIF9jb250ZXh0KTsKICAgIH0pOwogIH0KCiAgLy8gR2V0IGEgbmV3IF9IdHRwQ2xpZW50Q29ubmVjdGlvbiwgZnJvbSB0aGUgbWF0Y2hpbmcgX0Nvbm5lY3Rpb25UYXJnZXQuCiAgRnV0dXJlPF9Db25uZWN0aW9uSW5mbz4gX2dldENvbm5lY3Rpb24oU3RyaW5nIHVyaUhvc3QsIGludCB1cmlQb3J0LAogICAgICBfUHJveHlDb25maWd1cmF0aW9uIHByb3h5Q29uZiwgYm9vbCBpc1NlY3VyZSkgewogICAgSXRlcmF0b3I8X1Byb3h5PiBwcm94aWVzID0gcHJveHlDb25mLnByb3hpZXMuaXRlcmF0b3I7CgogICAgRnV0dXJlPF9Db25uZWN0aW9uSW5mbz4gY29ubmVjdChlcnJvcikgewogICAgICBpZiAoIXByb3hpZXMubW92ZU5leHQoKSkgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZXJyb3IpOwogICAgICBfUHJveHkgcHJveHkgPSBwcm94aWVzLmN1cnJlbnQ7CiAgICAgIFN0cmluZyBob3N0ID0gcHJveHkuaXNEaXJlY3QgPyB1cmlIb3N0IDogcHJveHkuaG9zdDsKICAgICAgaW50IHBvcnQgPSBwcm94eS5pc0RpcmVjdCA/IHVyaVBvcnQgOiBwcm94eS5wb3J0OwogICAgICByZXR1cm4gX2dldENvbm5lY3Rpb25UYXJnZXQoaG9zdCwgcG9ydCwgaXNTZWN1cmUpCiAgICAgICAgICAuY29ubmVjdCh1cmlIb3N0LCB1cmlQb3J0LCBwcm94eSwgdGhpcykKICAgICAgICAgIC8vIE9uIGVycm9yLCBjb250aW51ZSB3aXRoIG5leHQgcHJveHkuCiAgICAgICAgICAuY2F0Y2hFcnJvcihjb25uZWN0KTsKICAgIH0KCiAgICByZXR1cm4gY29ubmVjdChuZXcgSHR0cEV4Y2VwdGlvbigiTm8gcHJveGllcyBnaXZlbiIpKTsKICB9CgogIF9TaXRlQ3JlZGVudGlhbHMgX2ZpbmRDcmVkZW50aWFscyhVcmkgdXJsLCBbX0F1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZV0pIHsKICAgIC8vIExvb2sgZm9yIGNyZWRlbnRpYWxzLgogICAgX1NpdGVDcmVkZW50aWFscyBjciA9CiAgICAgICAgX2NyZWRlbnRpYWxzLmZvbGQobnVsbCwgKF9TaXRlQ3JlZGVudGlhbHMgcHJldiwgdmFsdWUpIHsKICAgICAgdmFyIHNpdGVDcmVkZW50aWFscyA9IHZhbHVlIGFzIF9TaXRlQ3JlZGVudGlhbHM7CiAgICAgIGlmIChzaXRlQ3JlZGVudGlhbHMuYXBwbGllcyh1cmwsIHNjaGVtZSkpIHsKICAgICAgICBpZiAocHJldiA9PSBudWxsKSByZXR1cm4gdmFsdWU7CiAgICAgICAgcmV0dXJuIHNpdGVDcmVkZW50aWFscy51cmkucGF0aC5sZW5ndGggPiBwcmV2LnVyaS5wYXRoLmxlbmd0aAogICAgICAgICAgICA/IHNpdGVDcmVkZW50aWFscwogICAgICAgICAgICA6IHByZXY7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHByZXY7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGNyOwogIH0KCiAgX1Byb3h5Q3JlZGVudGlhbHMgX2ZpbmRQcm94eUNyZWRlbnRpYWxzKF9Qcm94eSBwcm94eSwKICAgICAgW19BdXRoZW50aWNhdGlvblNjaGVtZSBzY2hlbWVdKSB7CiAgICAvLyBMb29rIGZvciBjcmVkZW50aWFscy4KICAgIHZhciBpdCA9IF9wcm94eUNyZWRlbnRpYWxzLml0ZXJhdG9yOwogICAgd2hpbGUgKGl0Lm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKGl0LmN1cnJlbnQuYXBwbGllcyhwcm94eSwgc2NoZW1lKSkgewogICAgICAgIHJldHVybiBpdC5jdXJyZW50OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgX3JlbW92ZUNyZWRlbnRpYWxzKF9DcmVkZW50aWFscyBjcikgewogICAgaW50IGluZGV4ID0gX2NyZWRlbnRpYWxzLmluZGV4T2YoY3IpOwogICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgIF9jcmVkZW50aWFscy5yZW1vdmVBdChpbmRleCk7CiAgICB9CiAgfQoKICB2b2lkIF9yZW1vdmVQcm94eUNyZWRlbnRpYWxzKF9DcmVkZW50aWFscyBjcikgewogICAgaW50IGluZGV4ID0gX3Byb3h5Q3JlZGVudGlhbHMuaW5kZXhPZihjcik7CiAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgX3Byb3h5Q3JlZGVudGlhbHMucmVtb3ZlQXQoaW5kZXgpOwogICAgfQogIH0KCiAgc3RhdGljIFN0cmluZyBfZmluZFByb3h5RnJvbUVudmlyb25tZW50KAogICAgICBVcmkgdXJsLCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50KSB7CiAgICBjaGVja05vUHJveHkoU3RyaW5nIG9wdGlvbikgewogICAgICBpZiAob3B0aW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBJdGVyYXRvcjxTdHJpbmc+IG5hbWVzID0gb3B0aW9uLnNwbGl0KCIsIikubWFwKChzKSA9PiBzLnRyaW0oKSkuaXRlcmF0b3I7CiAgICAgIHdoaWxlIChuYW1lcy5tb3ZlTmV4dCgpKSB7CiAgICAgICAgdmFyIG5hbWUgPSBuYW1lcy5jdXJyZW50OwogICAgICAgIGlmICgobmFtZS5zdGFydHNXaXRoKCJbIikgJiYKICAgICAgICAgICAgICAgIG5hbWUuZW5kc1dpdGgoIl0iKSAmJgogICAgICAgICAgICAgICAgIlske3VybC5ob3N0fV0iID09IG5hbWUpIHx8CiAgICAgICAgICAgIChuYW1lLmlzTm90RW1wdHkgJiYgdXJsLmhvc3QuZW5kc1dpdGgobmFtZSkpKSB7CiAgICAgICAgICByZXR1cm4gIkRJUkVDVCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGNoZWNrUHJveHkoU3RyaW5nIG9wdGlvbikgewogICAgICBpZiAob3B0aW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBvcHRpb24gPSBvcHRpb24udHJpbSgpOwogICAgICBpZiAob3B0aW9uLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgICBpbnQgcG9zID0gb3B0aW9uLmluZGV4T2YoIjovLyIpOwogICAgICBpZiAocG9zID49IDApIHsKICAgICAgICBvcHRpb24gPSBvcHRpb24uc3Vic3RyaW5nKHBvcyArIDMpOwogICAgICB9CiAgICAgIHBvcyA9IG9wdGlvbi5pbmRleE9mKCIvIik7CiAgICAgIGlmIChwb3MgPj0gMCkgewogICAgICAgIG9wdGlvbiA9IG9wdGlvbi5zdWJzdHJpbmcoMCwgcG9zKTsKICAgICAgfQogICAgICAvLyBBZGQgZGVmYXVsdCBwb3J0IGlmIG5vIHBvcnQgY29uZmlndXJlZC4KICAgICAgaWYgKG9wdGlvbi5pbmRleE9mKCJbIikgPT0gMCkgewogICAgICAgIHZhciBwb3MgPSBvcHRpb24ubGFzdEluZGV4T2YoIjoiKTsKICAgICAgICBpZiAob3B0aW9uLmluZGV4T2YoIl0iKSA+IHBvcykgb3B0aW9uID0gIiRvcHRpb246MTA4MCI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG9wdGlvbi5pbmRleE9mKCI6IikgPT0gLTEpIG9wdGlvbiA9ICIkb3B0aW9uOjEwODAiOwogICAgICB9CiAgICAgIHJldHVybiAiUFJPWFkgJG9wdGlvbiI7CiAgICB9CgogICAgLy8gRGVmYXVsdCB0byB1c2luZyB0aGUgcHJvY2VzcyBjdXJyZW50IGVudmlyb25tZW50LgogICAgaWYgKGVudmlyb25tZW50ID09IG51bGwpIGVudmlyb25tZW50ID0gX3BsYXRmb3JtRW52aXJvbm1lbnRDYWNoZTsKCiAgICBTdHJpbmcgcHJveHlDZmc7CgogICAgU3RyaW5nIG5vUHJveHkgPSBlbnZpcm9ubWVudFsibm9fcHJveHkiXTsKICAgIGlmIChub1Byb3h5ID09IG51bGwpIG5vUHJveHkgPSBlbnZpcm9ubWVudFsiTk9fUFJPWFkiXTsKICAgIGlmICgocHJveHlDZmcgPSBjaGVja05vUHJveHkobm9Qcm94eSkpICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHByb3h5Q2ZnOwogICAgfQoKICAgIGlmICh1cmwuc2NoZW1lID09ICJodHRwIikgewogICAgICBTdHJpbmcgcHJveHkgPSBlbnZpcm9ubWVudFsiaHR0cF9wcm94eSJdOwogICAgICBpZiAocHJveHkgPT0gbnVsbCkgcHJveHkgPSBlbnZpcm9ubWVudFsiSFRUUF9QUk9YWSJdOwogICAgICBpZiAoKHByb3h5Q2ZnID0gY2hlY2tQcm94eShwcm94eSkpICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gcHJveHlDZmc7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodXJsLnNjaGVtZSA9PSAiaHR0cHMiKSB7CiAgICAgIFN0cmluZyBwcm94eSA9IGVudmlyb25tZW50WyJodHRwc19wcm94eSJdOwogICAgICBpZiAocHJveHkgPT0gbnVsbCkgcHJveHkgPSBlbnZpcm9ubWVudFsiSFRUUFNfUFJPWFkiXTsKICAgICAgaWYgKChwcm94eUNmZyA9IGNoZWNrUHJveHkocHJveHkpKSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHByb3h5Q2ZnOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gIkRJUkVDVCI7CiAgfQoKICBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBfcGxhdGZvcm1FbnZpcm9ubWVudENhY2hlID0gUGxhdGZvcm0uZW52aXJvbm1lbnQ7Cn0KCmNsYXNzIF9IdHRwQ29ubmVjdGlvbiBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxfSHR0cENvbm5lY3Rpb24+CiAgICB3aXRoIF9TZXJ2aWNlT2JqZWN0IHsKICBzdGF0aWMgY29uc3QgX0FDVElWRSA9IDA7CiAgc3RhdGljIGNvbnN0IF9JRExFID0gMTsKICBzdGF0aWMgY29uc3QgX0NMT1NJTkcgPSAyOwogIHN0YXRpYyBjb25zdCBfREVUQUNIRUQgPSAzOwoKICAvLyBVc2UgSGFzaE1hcCwgYXMgd2UgZG9uJ3QgbmVlZCB0byBrZWVwIG9yZGVyLgogIHN0YXRpYyBNYXA8aW50LCBfSHR0cENvbm5lY3Rpb24+IF9jb25uZWN0aW9ucyA9CiAgICAgIG5ldyBIYXNoTWFwPGludCwgX0h0dHBDb25uZWN0aW9uPigpOwoKICBmaW5hbCAvKl9TZXJ2ZXJTb2NrZXQqLyBfc29ja2V0OwogIGZpbmFsIF9IdHRwU2VydmVyIF9odHRwU2VydmVyOwogIGZpbmFsIF9IdHRwUGFyc2VyIF9odHRwUGFyc2VyOwogIGludCBfc3RhdGUgPSBfSURMRTsKICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKICBib29sIF9pZGxlTWFyayA9IGZhbHNlOwogIEZ1dHVyZSBfc3RyZWFtRnV0dXJlOwoKICBfSHR0cENvbm5lY3Rpb24odGhpcy5fc29ja2V0LCB0aGlzLl9odHRwU2VydmVyKQogICAgICA6IF9odHRwUGFyc2VyID0gbmV3IF9IdHRwUGFyc2VyLnJlcXVlc3RQYXJzZXIoKSB7CiAgICBfY29ubmVjdGlvbnNbX3NlcnZpY2VJZF0gPSB0aGlzOwogICAgX2h0dHBQYXJzZXIubGlzdGVuVG9TdHJlYW0oX3NvY2tldCk7CiAgICBfc3Vic2NyaXB0aW9uID0gX2h0dHBQYXJzZXIubGlzdGVuKChpbmNvbWluZykgewogICAgICBfaHR0cFNlcnZlci5fbWFya0FjdGl2ZSh0aGlzKTsKICAgICAgLy8gSWYgdGhlIGluY29taW5nIHdhcyBjbG9zZWQsIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogICAgICBpbmNvbWluZy5kYXRhRG9uZS50aGVuKChjbG9zaW5nKSB7CiAgICAgICAgaWYgKGNsb3NpbmcpIGRlc3Ryb3koKTsKICAgICAgfSk7CiAgICAgIC8vIE9ubHkgaGFuZGxlIG9uZSBpbmNvbWluZyByZXF1ZXN0IGF0IHRoZSB0aW1lLiBLZWVwIHRoZQogICAgICAvLyBzdHJlYW0gcGF1c2VkIHVudGlsIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHNlbmQuCiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgX3N0YXRlID0gX0FDVElWRTsKICAgICAgdmFyIG91dGdvaW5nID0gbmV3IF9IdHRwT3V0Z29pbmcoX3NvY2tldCk7CiAgICAgIHZhciByZXNwb25zZSA9IG5ldyBfSHR0cFJlc3BvbnNlKAogICAgICAgICAgaW5jb21pbmcudXJpLAogICAgICAgICAgaW5jb21pbmcuaGVhZGVycy5wcm90b2NvbFZlcnNpb24sCiAgICAgICAgICBvdXRnb2luZywKICAgICAgICAgIF9odHRwU2VydmVyLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMsCiAgICAgICAgICBfaHR0cFNlcnZlci5zZXJ2ZXJIZWFkZXIpOwogICAgICB2YXIgcmVxdWVzdCA9IG5ldyBfSHR0cFJlcXVlc3QocmVzcG9uc2UsIGluY29taW5nLCBfaHR0cFNlcnZlciwgdGhpcyk7CiAgICAgIF9zdHJlYW1GdXR1cmUgPSBvdXRnb2luZy5kb25lLnRoZW4oKF8pIHsKICAgICAgICByZXNwb25zZS5kZWFkbGluZSA9IG51bGw7CiAgICAgICAgaWYgKF9zdGF0ZSA9PSBfREVUQUNIRUQpIHJldHVybjsKICAgICAgICBpZiAocmVzcG9uc2UucGVyc2lzdGVudENvbm5lY3Rpb24gJiYKICAgICAgICAgICAgcmVxdWVzdC5wZXJzaXN0ZW50Q29ubmVjdGlvbiAmJgogICAgICAgICAgICBpbmNvbWluZy5mdWxsQm9keVJlYWQgJiYKICAgICAgICAgICAgIV9odHRwUGFyc2VyLnVwZ3JhZGUgJiYKICAgICAgICAgICAgIV9odHRwU2VydmVyLmNsb3NlZCkgewogICAgICAgICAgX3N0YXRlID0gX0lETEU7CiAgICAgICAgICBfaWRsZU1hcmsgPSBmYWxzZTsKICAgICAgICAgIF9odHRwU2VydmVyLl9tYXJrSWRsZSh0aGlzKTsKICAgICAgICAgIC8vIFJlc3VtZSB0aGUgc3Vic2NyaXB0aW9uIGZvciBpbmNvbWluZyByZXF1ZXN0cyBhcyB0aGUKICAgICAgICAgIC8vIHJlcXVlc3QgaXMgbm93IHByb2Nlc3NlZC4KICAgICAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIENsb3NlIHNvY2tldCwga2VlcC1hbGl2ZSBub3QgdXNlZCBvciBib2R5IHNlbnQgYmVmb3JlCiAgICAgICAgICAvLyByZWNlaXZlZCBkYXRhIHdhcyBoYW5kbGVkLgogICAgICAgICAgZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgfSwgb25FcnJvcjogKF8pIHsKICAgICAgICBkZXN0cm95KCk7CiAgICAgIH0pOwogICAgICBvdXRnb2luZy5pZ25vcmVCb2R5ID0gcmVxdWVzdC5tZXRob2QgPT0gIkhFQUQiOwogICAgICByZXNwb25zZS5faHR0cFJlcXVlc3QgPSByZXF1ZXN0OwogICAgICBfaHR0cFNlcnZlci5faGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKICAgIH0sIG9uRG9uZTogKCkgewogICAgICBkZXN0cm95KCk7CiAgICB9LCBvbkVycm9yOiAoZXJyb3IpIHsKICAgICAgLy8gSWdub3JlIGZhaWxlZCByZXF1ZXN0cyB0aGF0IHdhcyBjbG9zZWQgYmVmb3JlIGhlYWRlcnMgd2FzIHJlY2VpdmVkLgogICAgICBkZXN0cm95KCk7CiAgICB9KTsKICB9CgogIHZvaWQgbWFya0lkbGUoKSB7CiAgICBfaWRsZU1hcmsgPSB0cnVlOwogIH0KCiAgYm9vbCBnZXQgaXNNYXJrZWRJZGxlID0+IF9pZGxlTWFyazsKCiAgdm9pZCBkZXN0cm95KCkgewogICAgaWYgKF9zdGF0ZSA9PSBfQ0xPU0lORyB8fCBfc3RhdGUgPT0gX0RFVEFDSEVEKSByZXR1cm47CiAgICBfc3RhdGUgPSBfQ0xPU0lORzsKICAgIF9zb2NrZXQuZGVzdHJveSgpOwogICAgX2h0dHBTZXJ2ZXIuX2Nvbm5lY3Rpb25DbG9zZWQodGhpcyk7CiAgICBfY29ubmVjdGlvbnMucmVtb3ZlKF9zZXJ2aWNlSWQpOwogIH0KCiAgRnV0dXJlPFNvY2tldD4gZGV0YWNoU29ja2V0KCkgewogICAgX3N0YXRlID0gX0RFVEFDSEVEOwogICAgLy8gUmVtb3ZlIGNvbm5lY3Rpb24gZnJvbSBzZXJ2ZXIuCiAgICBfaHR0cFNlcnZlci5fY29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKCiAgICBfSHR0cERldGFjaGVkSW5jb21pbmcgZGV0YWNoZWRJbmNvbWluZyA9IF9odHRwUGFyc2VyLmRldGFjaEluY29taW5nKCk7CgogICAgcmV0dXJuIF9zdHJlYW1GdXR1cmUudGhlbigoXykgewogICAgICBfY29ubmVjdGlvbnMucmVtb3ZlKF9zZXJ2aWNlSWQpOwogICAgICByZXR1cm4gbmV3IF9EZXRhY2hlZFNvY2tldChfc29ja2V0LCBkZXRhY2hlZEluY29taW5nKTsKICAgIH0pOwogIH0KCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbyA9PiBfSHR0cENvbm5lY3Rpb25JbmZvLmNyZWF0ZShfc29ja2V0KTsKCiAgYm9vbCBnZXQgX2lzQWN0aXZlID0+IF9zdGF0ZSA9PSBfQUNUSVZFOwogIGJvb2wgZ2V0IF9pc0lkbGUgPT4gX3N0YXRlID09IF9JRExFOwogIGJvb2wgZ2V0IF9pc0Nsb3NpbmcgPT4gX3N0YXRlID09IF9DTE9TSU5HOwogIGJvb2wgZ2V0IF9pc0RldGFjaGVkID0+IF9zdGF0ZSA9PSBfREVUQUNIRUQ7CgogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlUGF0aCA9PiAnaW8vaHR0cC9zZXJ2ZXJjb25uZWN0aW9ucyc7CiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVOYW1lID0+ICdIdHRwU2VydmVyQ29ubmVjdGlvbic7CgogIE1hcCBfdG9KU09OKGJvb2wgcmVmKSB7CiAgICB2YXIgbmFtZSA9ICIke19zb2NrZXQuYWRkcmVzcy5ob3N0fToke19zb2NrZXQucG9ydH0gPC0+ICIKICAgICAgICAiJHtfc29ja2V0LnJlbW90ZUFkZHJlc3MuaG9zdH06JHtfc29ja2V0LnJlbW90ZVBvcnR9IjsKICAgIHZhciByID0gPFN0cmluZywgZHluYW1pYz57CiAgICAgICdpZCc6IF9zZXJ2aWNlUGF0aCwKICAgICAgJ3R5cGUnOiBfc2VydmljZVR5cGUocmVmKSwKICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAndXNlcl9uYW1lJzogbmFtZSwKICAgIH07CiAgICBpZiAocmVmKSB7CiAgICAgIHJldHVybiByOwogICAgfQogICAgclsnc2VydmVyJ10gPSBfaHR0cFNlcnZlci5fdG9KU09OKHRydWUpOwogICAgdHJ5IHsKICAgICAgclsnc29ja2V0J10gPSBfc29ja2V0Ll90b0pTT04odHJ1ZSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIHJbJ3NvY2tldCddID0gewogICAgICAgICdpZCc6IF9zZXJ2aWNlUGF0aCwKICAgICAgICAndHlwZSc6ICdAU29ja2V0JywKICAgICAgICAnbmFtZSc6ICdVc2VyU29ja2V0JywKICAgICAgICAndXNlcl9uYW1lJzogJ1VzZXJTb2NrZXQnLAogICAgICB9OwogICAgfQogICAgc3dpdGNoIChfc3RhdGUpIHsKICAgICAgY2FzZSBfQUNUSVZFOgogICAgICAgIHJbJ3N0YXRlJ10gPSAiQWN0aXZlIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBfSURMRToKICAgICAgICByWydzdGF0ZSddID0gIklkbGUiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIF9DTE9TSU5HOgogICAgICAgIHJbJ3N0YXRlJ10gPSAiQ2xvc2luZyI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgX0RFVEFDSEVEOgogICAgICAgIHJbJ3N0YXRlJ10gPSAiRGV0YWNoZWQiOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHJbJ3N0YXRlJ10gPSAnVW5rbm93bic7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gcjsKICB9Cn0KCi8vIEhUVFAgc2VydmVyIHdhaXRpbmcgZm9yIHNvY2tldCBjb25uZWN0aW9ucy4KY2xhc3MgX0h0dHBTZXJ2ZXIgZXh0ZW5kcyBTdHJlYW08SHR0cFJlcXVlc3Q+CiAgICB3aXRoIF9TZXJ2aWNlT2JqZWN0CiAgICBpbXBsZW1lbnRzIEh0dHBTZXJ2ZXIgewogIC8vIFVzZSBkZWZhdWx0IE1hcCBzbyB3ZSBrZWVwIG9yZGVyLgogIHN0YXRpYyBNYXA8aW50LCBfSHR0cFNlcnZlcj4gX3NlcnZlcnMgPSBuZXcgTWFwPGludCwgX0h0dHBTZXJ2ZXI+KCk7CgogIFN0cmluZyBzZXJ2ZXJIZWFkZXI7CiAgZmluYWwgSHR0cEhlYWRlcnMgZGVmYXVsdFJlc3BvbnNlSGVhZGVycyA9IF9pbml0RGVmYXVsdFJlc3BvbnNlSGVhZGVycygpOwogIGJvb2wgYXV0b0NvbXByZXNzID0gZmFsc2U7CgogIER1cmF0aW9uIF9pZGxlVGltZW91dDsKICBUaW1lciBfaWRsZVRpbWVyOwoKICBzdGF0aWMgRnV0dXJlPEh0dHBTZXJ2ZXI+IGJpbmQoCiAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBpbnQgYmFja2xvZywgYm9vbCB2Nk9ubHksIGJvb2wgc2hhcmVkKSB7CiAgICByZXR1cm4gU2VydmVyU29ja2V0LmJpbmQoYWRkcmVzcywgcG9ydCwKICAgICAgICAgICAgYmFja2xvZzogYmFja2xvZywgdjZPbmx5OiB2Nk9ubHksIHNoYXJlZDogc2hhcmVkKQogICAgICAgIC50aGVuPEh0dHBTZXJ2ZXI+KChzb2NrZXQpIHsKICAgICAgcmV0dXJuIG5ldyBfSHR0cFNlcnZlci5fKHNvY2tldCwgdHJ1ZSk7CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8SHR0cFNlcnZlcj4gYmluZFNlY3VyZSgKICAgICAgYWRkcmVzcywKICAgICAgaW50IHBvcnQsCiAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBpbnQgYmFja2xvZywKICAgICAgYm9vbCB2Nk9ubHksCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICBib29sIHNoYXJlZCkgewogICAgcmV0dXJuIFNlY3VyZVNlcnZlclNvY2tldC5iaW5kKGFkZHJlc3MsIHBvcnQsIGNvbnRleHQsCiAgICAgICAgICAgIGJhY2tsb2c6IGJhY2tsb2csCiAgICAgICAgICAgIHY2T25seTogdjZPbmx5LAogICAgICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc2hhcmVkOiBzaGFyZWQpCiAgICAgICAgLnRoZW48SHR0cFNlcnZlcj4oKHNvY2tldCkgewogICAgICByZXR1cm4gbmV3IF9IdHRwU2VydmVyLl8oc29ja2V0LCB0cnVlKTsKICAgIH0pOwogIH0KCiAgX0h0dHBTZXJ2ZXIuXyh0aGlzLl9zZXJ2ZXJTb2NrZXQsIHRoaXMuX2Nsb3NlU2VydmVyKSB7CiAgICBfY29udHJvbGxlciA9CiAgICAgICAgbmV3IFN0cmVhbUNvbnRyb2xsZXI8SHR0cFJlcXVlc3Q+KHN5bmM6IHRydWUsIG9uQ2FuY2VsOiBjbG9zZSk7CiAgICBpZGxlVGltZW91dCA9IGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDEyMCk7CiAgICBfc2VydmVyc1tfc2VydmljZUlkXSA9IHRoaXM7CiAgfQoKICBfSHR0cFNlcnZlci5saXN0ZW5Pbih0aGlzLl9zZXJ2ZXJTb2NrZXQpIDogX2Nsb3NlU2VydmVyID0gZmFsc2UgewogICAgX2NvbnRyb2xsZXIgPQogICAgICAgIG5ldyBTdHJlYW1Db250cm9sbGVyPEh0dHBSZXF1ZXN0PihzeW5jOiB0cnVlLCBvbkNhbmNlbDogY2xvc2UpOwogICAgaWRsZVRpbWVvdXQgPSBjb25zdCBEdXJhdGlvbihzZWNvbmRzOiAxMjApOwogICAgX3NlcnZlcnNbX3NlcnZpY2VJZF0gPSB0aGlzOwogIH0KCiAgc3RhdGljIEh0dHBIZWFkZXJzIF9pbml0RGVmYXVsdFJlc3BvbnNlSGVhZGVycygpIHsKICAgIHZhciBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzID0gbmV3IF9IdHRwSGVhZGVycygnMS4xJyk7CiAgICBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzLmNvbnRlbnRUeXBlID0gQ29udGVudFR5cGUudGV4dDsKICAgIGRlZmF1bHRSZXNwb25zZUhlYWRlcnMuc2V0KCdYLUZyYW1lLU9wdGlvbnMnLCAnU0FNRU9SSUdJTicpOwogICAgZGVmYXVsdFJlc3BvbnNlSGVhZGVycy5zZXQoJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLCAnbm9zbmlmZicpOwogICAgZGVmYXVsdFJlc3BvbnNlSGVhZGVycy5zZXQoJ1gtWFNTLVByb3RlY3Rpb24nLCAnMTsgbW9kZT1ibG9jaycpOwogICAgcmV0dXJuIGRlZmF1bHRSZXNwb25zZUhlYWRlcnM7CiAgfQoKICBEdXJhdGlvbiBnZXQgaWRsZVRpbWVvdXQgPT4gX2lkbGVUaW1lb3V0OwoKICB2b2lkIHNldCBpZGxlVGltZW91dChEdXJhdGlvbiBkdXJhdGlvbikgewogICAgaWYgKF9pZGxlVGltZXIgIT0gbnVsbCkgewogICAgICBfaWRsZVRpbWVyLmNhbmNlbCgpOwogICAgICBfaWRsZVRpbWVyID0gbnVsbDsKICAgIH0KICAgIF9pZGxlVGltZW91dCA9IGR1cmF0aW9uOwogICAgaWYgKF9pZGxlVGltZW91dCAhPSBudWxsKSB7CiAgICAgIF9pZGxlVGltZXIgPSBuZXcgVGltZXIucGVyaW9kaWMoX2lkbGVUaW1lb3V0LCAoXykgewogICAgICAgIGZvciAodmFyIGlkbGUgaW4gX2lkbGVDb25uZWN0aW9ucy50b0xpc3QoKSkgewogICAgICAgICAgaWYgKGlkbGUuaXNNYXJrZWRJZGxlKSB7CiAgICAgICAgICAgIGlkbGUuZGVzdHJveSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWRsZS5tYXJrSWRsZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248SHR0cFJlcXVlc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShIdHRwUmVxdWVzdCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBfc2VydmVyU29ja2V0Lmxpc3RlbigoU29ja2V0IHNvY2tldCkgewogICAgICBzb2NrZXQuc2V0T3B0aW9uKFNvY2tldE9wdGlvbi50Y3BOb0RlbGF5LCB0cnVlKTsKICAgICAgLy8gQWNjZXB0IHRoZSBjbGllbnQgY29ubmVjdGlvbi4KICAgICAgX0h0dHBDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBuZXcgX0h0dHBDb25uZWN0aW9uKHNvY2tldCwgdGhpcyk7CiAgICAgIF9pZGxlQ29ubmVjdGlvbnMuYWRkKGNvbm5lY3Rpb24pOwogICAgfSwgb25FcnJvcjogKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgIC8vIElnbm9yZSBIYW5kc2hha2VFeGNlcHRpb25zIGFzIHRoZXkgYXJlIGJvdW5kIHRvIGEgc2luZ2xlIHJlcXVlc3QsCiAgICAgIC8vIGFuZCBhcmUgbm90IGZhdGFsIGZvciB0aGUgc2VydmVyLgogICAgICBpZiAoZXJyb3IgaXMhIEhhbmRzaGFrZUV4Y2VwdGlvbikgewogICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfQogICAgfSwgb25Eb25lOiBfY29udHJvbGxlci5jbG9zZSk7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgRnV0dXJlIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pIHsKICAgIGNsb3NlZCA9IHRydWU7CiAgICBGdXR1cmUgcmVzdWx0OwogICAgaWYgKF9zZXJ2ZXJTb2NrZXQgIT0gbnVsbCAmJiBfY2xvc2VTZXJ2ZXIpIHsKICAgICAgcmVzdWx0ID0gX3NlcnZlclNvY2tldC5jbG9zZSgpOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gbmV3IEZ1dHVyZS52YWx1ZSgpOwogICAgfQogICAgaWRsZVRpbWVvdXQgPSBudWxsOwogICAgaWYgKGZvcmNlKSB7CiAgICAgIGZvciAodmFyIGMgaW4gX2FjdGl2ZUNvbm5lY3Rpb25zLnRvTGlzdCgpKSB7CiAgICAgICAgYy5kZXN0cm95KCk7CiAgICAgIH0KICAgICAgYXNzZXJ0KF9hY3RpdmVDb25uZWN0aW9ucy5pc0VtcHR5KTsKICAgIH0KICAgIGZvciAodmFyIGMgaW4gX2lkbGVDb25uZWN0aW9ucy50b0xpc3QoKSkgewogICAgICBjLmRlc3Ryb3koKTsKICAgIH0KICAgIF9tYXliZVBlcmZvcm1DbGVhbnVwKCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBfbWF5YmVQZXJmb3JtQ2xlYW51cCgpIHsKICAgIGlmIChjbG9zZWQgJiYKICAgICAgICBfaWRsZUNvbm5lY3Rpb25zLmlzRW1wdHkgJiYKICAgICAgICBfYWN0aXZlQ29ubmVjdGlvbnMuaXNFbXB0eSAmJgogICAgICAgIF9zZXNzaW9uTWFuYWdlckluc3RhbmNlICE9IG51bGwpIHsKICAgICAgX3Nlc3Npb25NYW5hZ2VySW5zdGFuY2UuY2xvc2UoKTsKICAgICAgX3Nlc3Npb25NYW5hZ2VySW5zdGFuY2UgPSBudWxsOwogICAgICBfc2VydmVycy5yZW1vdmUoX3NlcnZpY2VJZCk7CiAgICB9CiAgfQoKICBpbnQgZ2V0IHBvcnQgewogICAgaWYgKGNsb3NlZCkgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkh0dHBTZXJ2ZXIgaXMgbm90IGJvdW5kIHRvIGEgc29ja2V0Iik7CiAgICByZXR1cm4gX3NlcnZlclNvY2tldC5wb3J0OwogIH0KCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzIHsKICAgIGlmIChjbG9zZWQpIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJIdHRwU2VydmVyIGlzIG5vdCBib3VuZCB0byBhIHNvY2tldCIpOwogICAgcmV0dXJuIF9zZXJ2ZXJTb2NrZXQuYWRkcmVzczsKICB9CgogIHNldCBzZXNzaW9uVGltZW91dChpbnQgdGltZW91dCkgewogICAgX3Nlc3Npb25NYW5hZ2VyLnNlc3Npb25UaW1lb3V0ID0gdGltZW91dDsKICB9CgogIHZvaWQgX2hhbmRsZVJlcXVlc3QoX0h0dHBSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIGlmICghY2xvc2VkKSB7CiAgICAgIF9jb250cm9sbGVyLmFkZChyZXF1ZXN0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJlcXVlc3QuX2h0dHBDb25uZWN0aW9uLmRlc3Ryb3koKTsKICAgIH0KICB9CgogIHZvaWQgX2Nvbm5lY3Rpb25DbG9zZWQoX0h0dHBDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKICAgIC8vIFJlbW92ZSBpdHNlbGYgZnJvbSBlaXRoZXIgaWRsZSBvciBhY3RpdmUgY29ubmVjdGlvbnMuCiAgICBjb25uZWN0aW9uLnVubGluaygpOwogICAgX21heWJlUGVyZm9ybUNsZWFudXAoKTsKICB9CgogIHZvaWQgX21hcmtJZGxlKF9IdHRwQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICBfYWN0aXZlQ29ubmVjdGlvbnMucmVtb3ZlKGNvbm5lY3Rpb24pOwogICAgX2lkbGVDb25uZWN0aW9ucy5hZGQoY29ubmVjdGlvbik7CiAgfQoKICB2b2lkIF9tYXJrQWN0aXZlKF9IdHRwQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICBfaWRsZUNvbm5lY3Rpb25zLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIF9hY3RpdmVDb25uZWN0aW9ucy5hZGQoY29ubmVjdGlvbik7CiAgfQoKICBfSHR0cFNlc3Npb25NYW5hZ2VyIGdldCBfc2Vzc2lvbk1hbmFnZXIgewogICAgLy8gTGF6eSBpbml0LgogICAgaWYgKF9zZXNzaW9uTWFuYWdlckluc3RhbmNlID09IG51bGwpIHsKICAgICAgX3Nlc3Npb25NYW5hZ2VySW5zdGFuY2UgPSBuZXcgX0h0dHBTZXNzaW9uTWFuYWdlcigpOwogICAgfQogICAgcmV0dXJuIF9zZXNzaW9uTWFuYWdlckluc3RhbmNlOwogIH0KCiAgSHR0cENvbm5lY3Rpb25zSW5mbyBjb25uZWN0aW9uc0luZm8oKSB7CiAgICBIdHRwQ29ubmVjdGlvbnNJbmZvIHJlc3VsdCA9IG5ldyBIdHRwQ29ubmVjdGlvbnNJbmZvKCk7CiAgICByZXN1bHQudG90YWwgPSBfYWN0aXZlQ29ubmVjdGlvbnMubGVuZ3RoICsgX2lkbGVDb25uZWN0aW9ucy5sZW5ndGg7CiAgICBfYWN0aXZlQ29ubmVjdGlvbnMuZm9yRWFjaCgoX0h0dHBDb25uZWN0aW9uIGNvbm4pIHsKICAgICAgaWYgKGNvbm4uX2lzQWN0aXZlKSB7CiAgICAgICAgcmVzdWx0LmFjdGl2ZSsrOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChjb25uLl9pc0Nsb3NpbmcpOwogICAgICAgIHJlc3VsdC5jbG9zaW5nKys7CiAgICAgIH0KICAgIH0pOwogICAgX2lkbGVDb25uZWN0aW9ucy5mb3JFYWNoKChfSHR0cENvbm5lY3Rpb24gY29ubikgewogICAgICByZXN1bHQuaWRsZSsrOwogICAgICBhc3NlcnQoY29ubi5faXNJZGxlKTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlUGF0aCA9PiAnaW8vaHR0cC9zZXJ2ZXJzJzsKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZU5hbWUgPT4gJ0h0dHBTZXJ2ZXInOwoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBfdG9KU09OKGJvb2wgcmVmKSB7CiAgICB2YXIgciA9IDxTdHJpbmcsIGR5bmFtaWM+ewogICAgICAnaWQnOiBfc2VydmljZVBhdGgsCiAgICAgICd0eXBlJzogX3NlcnZpY2VUeXBlKHJlZiksCiAgICAgICduYW1lJzogJyR7YWRkcmVzcy5ob3N0fTokcG9ydCcsCiAgICAgICd1c2VyX25hbWUnOiAnJHthZGRyZXNzLmhvc3R9OiRwb3J0JywKICAgIH07CiAgICBpZiAocmVmKSB7CiAgICAgIHJldHVybiByOwogICAgfQogICAgdHJ5IHsKICAgICAgclsnc29ja2V0J10gPSBfc2VydmVyU29ja2V0Ll90b0pTT04odHJ1ZSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIHJbJ3NvY2tldCddID0gewogICAgICAgICdpZCc6IF9zZXJ2aWNlUGF0aCwKICAgICAgICAndHlwZSc6ICdAU29ja2V0JywKICAgICAgICAnbmFtZSc6ICdVc2VyU29ja2V0JywKICAgICAgICAndXNlcl9uYW1lJzogJ1VzZXJTb2NrZXQnLAogICAgICB9OwogICAgfQogICAgclsncG9ydCddID0gcG9ydDsKICAgIHJbJ2FkZHJlc3MnXSA9IGFkZHJlc3MuaG9zdDsKICAgIHJbJ2FjdGl2ZSddID0gX2FjdGl2ZUNvbm5lY3Rpb25zLm1hcCgoYykgPT4gYy5fdG9KU09OKHRydWUpKS50b0xpc3QoKTsKICAgIHJbJ2lkbGUnXSA9IF9pZGxlQ29ubmVjdGlvbnMubWFwKChjKSA9PiBjLl90b0pTT04odHJ1ZSkpLnRvTGlzdCgpOwogICAgclsnY2xvc2VkJ10gPSBjbG9zZWQ7CiAgICByZXR1cm4gcjsKICB9CgogIF9IdHRwU2Vzc2lvbk1hbmFnZXIgX3Nlc3Npb25NYW5hZ2VySW5zdGFuY2U7CgogIC8vIEluZGljYXRlZCBpZiB0aGUgaHR0cCBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLgogIGJvb2wgY2xvc2VkID0gZmFsc2U7CgogIC8vIFRoZSBzZXJ2ZXIgbGlzdGVuIHNvY2tldC4gVW50eXBlZCBhcyBpdCBjYW4gYmUgYm90aCBTZXJ2ZXJTb2NrZXQgYW5kCiAgLy8gU2VjdXJlU2VydmVyU29ja2V0LgogIGZpbmFsIGR5bmFtaWMgLypTZXJ2ZXJTb2NrZXR8U2VjdXJlU2VydmVyU29ja2V0Ki8gX3NlcnZlclNvY2tldDsKICBmaW5hbCBib29sIF9jbG9zZVNlcnZlcjsKCiAgLy8gU2V0IG9mIGN1cnJlbnRseSBjb25uZWN0ZWQgY2xpZW50cy4KICBmaW5hbCBMaW5rZWRMaXN0PF9IdHRwQ29ubmVjdGlvbj4gX2FjdGl2ZUNvbm5lY3Rpb25zID0KICAgICAgbmV3IExpbmtlZExpc3Q8X0h0dHBDb25uZWN0aW9uPigpOwogIGZpbmFsIExpbmtlZExpc3Q8X0h0dHBDb25uZWN0aW9uPiBfaWRsZUNvbm5lY3Rpb25zID0KICAgICAgbmV3IExpbmtlZExpc3Q8X0h0dHBDb25uZWN0aW9uPigpOwogIFN0cmVhbUNvbnRyb2xsZXI8SHR0cFJlcXVlc3Q+IF9jb250cm9sbGVyOwp9CgpjbGFzcyBfUHJveHlDb25maWd1cmF0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIFBST1hZX1BSRUZJWCA9ICJQUk9YWSAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgRElSRUNUX1BSRUZJWCA9ICJESVJFQ1QiOwoKICBfUHJveHlDb25maWd1cmF0aW9uKFN0cmluZyBjb25maWd1cmF0aW9uKSA6IHByb3hpZXMgPSBuZXcgTGlzdDxfUHJveHk+KCkgewogICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBwcm94eSBjb25maWd1cmF0aW9uICRjb25maWd1cmF0aW9uIik7CiAgICB9CiAgICBMaXN0PFN0cmluZz4gbGlzdCA9IGNvbmZpZ3VyYXRpb24uc3BsaXQoIjsiKTsKICAgIGxpc3QuZm9yRWFjaCgoU3RyaW5nIHByb3h5KSB7CiAgICAgIHByb3h5ID0gcHJveHkudHJpbSgpOwogICAgICBpZiAoIXByb3h5LmlzRW1wdHkpIHsKICAgICAgICBpZiAocHJveHkuc3RhcnRzV2l0aChQUk9YWV9QUkVGSVgpKSB7CiAgICAgICAgICBTdHJpbmcgdXNlcm5hbWU7CiAgICAgICAgICBTdHJpbmcgcGFzc3dvcmQ7CiAgICAgICAgICAvLyBTa2lwIHRoZSAiUFJPWFkgIiBwcmVmaXguCiAgICAgICAgICBwcm94eSA9IHByb3h5LnN1YnN0cmluZyhQUk9YWV9QUkVGSVgubGVuZ3RoKS50cmltKCk7CiAgICAgICAgICAvLyBMb29rIGZvciBwcm94eSBhdXRoZW50aWNhdGlvbi4KICAgICAgICAgIGludCBhdCA9IHByb3h5LmluZGV4T2YoIkAiKTsKICAgICAgICAgIGlmIChhdCAhPSAtMSkgewogICAgICAgICAgICBTdHJpbmcgdXNlcmluZm8gPSBwcm94eS5zdWJzdHJpbmcoMCwgYXQpLnRyaW0oKTsKICAgICAgICAgICAgcHJveHkgPSBwcm94eS5zdWJzdHJpbmcoYXQgKyAxKS50cmltKCk7CiAgICAgICAgICAgIGludCBjb2xvbiA9IHVzZXJpbmZvLmluZGV4T2YoIjoiKTsKICAgICAgICAgICAgaWYgKGNvbG9uID09IC0xIHx8IGNvbG9uID09IDAgfHwgY29sb24gPT0gcHJveHkubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAiSW52YWxpZCBwcm94eSBjb25maWd1cmF0aW9uICRjb25maWd1cmF0aW9uIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdXNlcm5hbWUgPSB1c2VyaW5mby5zdWJzdHJpbmcoMCwgY29sb24pLnRyaW0oKTsKICAgICAgICAgICAgcGFzc3dvcmQgPSB1c2VyaW5mby5zdWJzdHJpbmcoY29sb24gKyAxKS50cmltKCk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBMb29rIGZvciBwcm94eSBob3N0IGFuZCBwb3J0LgogICAgICAgICAgaW50IGNvbG9uID0gcHJveHkubGFzdEluZGV4T2YoIjoiKTsKICAgICAgICAgIGlmIChjb2xvbiA9PSAtMSB8fCBjb2xvbiA9PSAwIHx8IGNvbG9uID09IHByb3h5Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiSW52YWxpZCBwcm94eSBjb25maWd1cmF0aW9uICRjb25maWd1cmF0aW9uIik7CiAgICAgICAgICB9CiAgICAgICAgICBTdHJpbmcgaG9zdCA9IHByb3h5LnN1YnN0cmluZygwLCBjb2xvbikudHJpbSgpOwogICAgICAgICAgaWYgKGhvc3Quc3RhcnRzV2l0aCgiWyIpICYmIGhvc3QuZW5kc1dpdGgoIl0iKSkgewogICAgICAgICAgICBob3N0ID0gaG9zdC5zdWJzdHJpbmcoMSwgaG9zdC5sZW5ndGggLSAxKTsKICAgICAgICAgIH0KICAgICAgICAgIFN0cmluZyBwb3J0U3RyaW5nID0gcHJveHkuc3Vic3RyaW5nKGNvbG9uICsgMSkudHJpbSgpOwogICAgICAgICAgaW50IHBvcnQ7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBwb3J0ID0gaW50LnBhcnNlKHBvcnRTdHJpbmcpOwogICAgICAgICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiSW52YWxpZCBwcm94eSBjb25maWd1cmF0aW9uICRjb25maWd1cmF0aW9uLCAiCiAgICAgICAgICAgICAgICAiaW52YWxpZCBwb3J0ICckcG9ydFN0cmluZyciKTsKICAgICAgICAgIH0KICAgICAgICAgIHByb3hpZXMuYWRkKG5ldyBfUHJveHkoaG9zdCwgcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkKSk7CiAgICAgICAgfSBlbHNlIGlmIChwcm94eS50cmltKCkgPT0gRElSRUNUX1BSRUZJWCkgewogICAgICAgICAgcHJveGllcy5hZGQobmV3IF9Qcm94eS5kaXJlY3QoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHByb3h5IGNvbmZpZ3VyYXRpb24gJGNvbmZpZ3VyYXRpb24iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgY29uc3QgX1Byb3h5Q29uZmlndXJhdGlvbi5kaXJlY3QoKSA6IHByb3hpZXMgPSBjb25zdCBbY29uc3QgX1Byb3h5LmRpcmVjdCgpXTsKCiAgZmluYWwgTGlzdDxfUHJveHk+IHByb3hpZXM7Cn0KCmNsYXNzIF9Qcm94eSB7CiAgZmluYWwgU3RyaW5nIGhvc3Q7CiAgZmluYWwgaW50IHBvcnQ7CiAgZmluYWwgU3RyaW5nIHVzZXJuYW1lOwogIGZpbmFsIFN0cmluZyBwYXNzd29yZDsKICBmaW5hbCBib29sIGlzRGlyZWN0OwoKICBjb25zdCBfUHJveHkodGhpcy5ob3N0LCB0aGlzLnBvcnQsIHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpCiAgICAgIDogaXNEaXJlY3QgPSBmYWxzZTsKICBjb25zdCBfUHJveHkuZGlyZWN0KCkKICAgICAgOiBob3N0ID0gbnVsbCwKICAgICAgICBwb3J0ID0gbnVsbCwKICAgICAgICB1c2VybmFtZSA9IG51bGwsCiAgICAgICAgcGFzc3dvcmQgPSBudWxsLAogICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKCiAgYm9vbCBnZXQgaXNBdXRoZW50aWNhdGVkID0+IHVzZXJuYW1lICE9IG51bGw7Cn0KCmNsYXNzIF9IdHRwQ29ubmVjdGlvbkluZm8gaW1wbGVtZW50cyBIdHRwQ29ubmVjdGlvbkluZm8gewogIEludGVybmV0QWRkcmVzcyByZW1vdGVBZGRyZXNzOwogIGludCByZW1vdGVQb3J0OwogIGludCBsb2NhbFBvcnQ7CgogIHN0YXRpYyBfSHR0cENvbm5lY3Rpb25JbmZvIGNyZWF0ZShTb2NrZXQgc29ja2V0KSB7CiAgICBpZiAoc29ja2V0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgdHJ5IHsKICAgICAgX0h0dHBDb25uZWN0aW9uSW5mbyBpbmZvID0gbmV3IF9IdHRwQ29ubmVjdGlvbkluZm8oKTsKICAgICAgcmV0dXJuIGluZm8KICAgICAgICAuLnJlbW90ZUFkZHJlc3MgPSBzb2NrZXQucmVtb3RlQWRkcmVzcwogICAgICAgIC4ucmVtb3RlUG9ydCA9IHNvY2tldC5yZW1vdGVQb3J0CiAgICAgICAgLi5sb2NhbFBvcnQgPSBzb2NrZXQucG9ydDsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIF9EZXRhY2hlZFNvY2tldCBleHRlbmRzIFN0cmVhbTxVaW50OExpc3Q+IGltcGxlbWVudHMgU29ja2V0IHsKICBmaW5hbCBTdHJlYW08VWludDhMaXN0PiBfaW5jb21pbmc7CiAgZmluYWwgU29ja2V0IF9zb2NrZXQ7CgogIF9EZXRhY2hlZFNvY2tldCh0aGlzLl9zb2NrZXQsIHRoaXMuX2luY29taW5nKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gbGlzdGVuKHZvaWQgb25EYXRhKFVpbnQ4TGlzdCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2luY29taW5nLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgRW5jb2RpbmcgZ2V0IGVuY29kaW5nID0+IF9zb2NrZXQuZW5jb2Rpbmc7CgogIHZvaWQgc2V0IGVuY29kaW5nKEVuY29kaW5nIHZhbHVlKSB7CiAgICBfc29ja2V0LmVuY29kaW5nID0gdmFsdWU7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIF9zb2NrZXQud3JpdGUob2JqKTsKICB9CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG9iaiA9ICIiXSkgewogICAgX3NvY2tldC53cml0ZWxuKG9iaik7CiAgfQoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBfc29ja2V0LndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgX3NvY2tldC53cml0ZUFsbChvYmplY3RzLCBzZXBhcmF0b3IpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBfc29ja2V0LmFkZChieXRlcyk7CiAgfQoKICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgPT4KICAgICAgX3NvY2tldC5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSB7CiAgICByZXR1cm4gX3NvY2tldC5hZGRTdHJlYW0oc3RyZWFtKTsKICB9CgogIHZvaWQgZGVzdHJveSgpIHsKICAgIF9zb2NrZXQuZGVzdHJveSgpOwogIH0KCiAgRnV0dXJlIGZsdXNoKCkgPT4gX3NvY2tldC5mbHVzaCgpOwoKICBGdXR1cmUgY2xvc2UoKSA9PiBfc29ja2V0LmNsb3NlKCk7CgogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfc29ja2V0LmRvbmU7CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyA9PiBfc29ja2V0LnJlbW90ZUFkZHJlc3M7CgogIGludCBnZXQgcmVtb3RlUG9ydCA9PiBfc29ja2V0LnJlbW90ZVBvcnQ7CgogIGJvb2wgc2V0T3B0aW9uKFNvY2tldE9wdGlvbiBvcHRpb24sIGJvb2wgZW5hYmxlZCkgewogICAgcmV0dXJuIF9zb2NrZXQuc2V0T3B0aW9uKG9wdGlvbiwgZW5hYmxlZCk7CiAgfQoKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIHJldHVybiBfc29ja2V0LmdldFJhd09wdGlvbihvcHRpb24pOwogIH0KCiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgX3NvY2tldC5zZXRSYXdPcHRpb24ob3B0aW9uKTsKICB9CgogIE1hcCBfdG9KU09OKGJvb2wgcmVmKSB7CiAgICByZXR1cm4gKF9zb2NrZXQgYXMgZHluYW1pYykuX3RvSlNPTihyZWYpOwogIH0KfQoKY2xhc3MgX0F1dGhlbnRpY2F0aW9uU2NoZW1lIHsKICBmaW5hbCBpbnQgX3NjaGVtZTsKCiAgc3RhdGljIGNvbnN0IFVOS05PV04gPSBjb25zdCBfQXV0aGVudGljYXRpb25TY2hlbWUoLTEpOwogIHN0YXRpYyBjb25zdCBCQVNJQyA9IGNvbnN0IF9BdXRoZW50aWNhdGlvblNjaGVtZSgwKTsKICBzdGF0aWMgY29uc3QgRElHRVNUID0gY29uc3QgX0F1dGhlbnRpY2F0aW9uU2NoZW1lKDEpOwoKICBjb25zdCBfQXV0aGVudGljYXRpb25TY2hlbWUodGhpcy5fc2NoZW1lKTsKCiAgZmFjdG9yeSBfQXV0aGVudGljYXRpb25TY2hlbWUuZnJvbVN0cmluZyhTdHJpbmcgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lLnRvTG93ZXJDYXNlKCkgPT0gImJhc2ljIikgcmV0dXJuIEJBU0lDOwogICAgaWYgKHNjaGVtZS50b0xvd2VyQ2FzZSgpID09ICJkaWdlc3QiKSByZXR1cm4gRElHRVNUOwogICAgcmV0dXJuIFVOS05PV047CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAodGhpcyA9PSBCQVNJQykgcmV0dXJuICJCYXNpYyI7CiAgICBpZiAodGhpcyA9PSBESUdFU1QpIHJldHVybiAiRGlnZXN0IjsKICAgIHJldHVybiAiVW5rbm93biI7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfQ3JlZGVudGlhbHMgewogIF9IdHRwQ2xpZW50Q3JlZGVudGlhbHMgY3JlZGVudGlhbHM7CiAgU3RyaW5nIHJlYWxtOwogIGJvb2wgdXNlZCA9IGZhbHNlOwoKICAvLyBEaWdlc3Qgc3BlY2lmaWMgZmllbGRzLgogIFN0cmluZyBoYTE7CiAgU3RyaW5nIG5vbmNlOwogIFN0cmluZyBhbGdvcml0aG07CiAgU3RyaW5nIHFvcDsKICBpbnQgbm9uY2VDb3VudDsKCiAgX0NyZWRlbnRpYWxzKHRoaXMuY3JlZGVudGlhbHMsIHRoaXMucmVhbG0pIHsKICAgIGlmIChjcmVkZW50aWFscy5zY2hlbWUgPT0gX0F1dGhlbnRpY2F0aW9uU2NoZW1lLkRJR0VTVCkgewogICAgICAvLyBDYWxjdWxhdGUgdGhlIEgoQTEpIHZhbHVlIG9uY2UuIFRoZXJlIGlzIG5vIG1lbnRpb25pbmcgb2YKICAgICAgLy8gdXNlcm5hbWUvcGFzc3dvcmQgZW5jb2RpbmcgaW4gUkZDIDI2MTcuIEhvd2V2ZXIgdGhlcmUgaXMgYW4KICAgICAgLy8gb3BlbiBkcmFmdCBmb3IgYWRkaW5nIGFuIGFkZGl0aW9uYWwgYWNjZXB0LWNoYXJzZXQgcGFyYW1ldGVyIHRvCiAgICAgIC8vIHRoZSBXV1ctQXV0aGVudGljYXRlIGFuZCBQcm94eS1BdXRoZW50aWNhdGUgaGVhZGVycywgc2VlCiAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXJlc2Noa2UtYmFzaWNhdXRoLWVuYy0wNi4gRm9yCiAgICAgIC8vIG5vdyBhbHdheXMgdXNlIFVURi04IGVuY29kaW5nLgogICAgICBfSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzIGNyZWRzID0gY3JlZGVudGlhbHM7CiAgICAgIHZhciBoYXNoZXIgPSBuZXcgX01ENSgpCiAgICAgICAgLi5hZGQodXRmOC5lbmNvZGUoY3JlZHMudXNlcm5hbWUpKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKHJlYWxtLmNvZGVVbml0cykKICAgICAgICAuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSkKICAgICAgICAuLmFkZCh1dGY4LmVuY29kZShjcmVkcy5wYXNzd29yZCkpOwogICAgICBoYTEgPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0hleChoYXNoZXIuY2xvc2UoKSk7CiAgICB9CiAgfQoKICBfQXV0aGVudGljYXRpb25TY2hlbWUgZ2V0IHNjaGVtZSA9PiBjcmVkZW50aWFscy5zY2hlbWU7CgogIHZvaWQgYXV0aG9yaXplKEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpOwp9CgpjbGFzcyBfU2l0ZUNyZWRlbnRpYWxzIGV4dGVuZHMgX0NyZWRlbnRpYWxzIHsKICBVcmkgdXJpOwoKICBfU2l0ZUNyZWRlbnRpYWxzKHRoaXMudXJpLCByZWFsbSwgX0h0dHBDbGllbnRDcmVkZW50aWFscyBjcmVkcykKICAgICAgOiBzdXBlcihjcmVkcywgcmVhbG0pOwoKICBib29sIGFwcGxpZXMoVXJpIHVyaSwgX0F1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZSkgewogICAgaWYgKHNjaGVtZSAhPSBudWxsICYmIGNyZWRlbnRpYWxzLnNjaGVtZSAhPSBzY2hlbWUpIHJldHVybiBmYWxzZTsKICAgIGlmICh1cmkuaG9zdCAhPSB0aGlzLnVyaS5ob3N0KSByZXR1cm4gZmFsc2U7CiAgICBpbnQgdGhpc1BvcnQgPQogICAgICAgIHRoaXMudXJpLnBvcnQgPT0gMCA/IEh0dHBDbGllbnQuZGVmYXVsdEh0dHBQb3J0IDogdGhpcy51cmkucG9ydDsKICAgIGludCBvdGhlclBvcnQgPSB1cmkucG9ydCA9PSAwID8gSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQgOiB1cmkucG9ydDsKICAgIGlmIChvdGhlclBvcnQgIT0gdGhpc1BvcnQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB1cmkucGF0aC5zdGFydHNXaXRoKHRoaXMudXJpLnBhdGgpOwogIH0KCiAgdm9pZCBhdXRob3JpemUoSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCkgewogICAgLy8gRGlnZXN0IGNyZWRlbnRpYWxzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSBub25jZSBmcm9tIHRoZQogICAgLy8gc2VydmVyLgogICAgaWYgKGNyZWRlbnRpYWxzLnNjaGVtZSA9PSBfQXV0aGVudGljYXRpb25TY2hlbWUuRElHRVNUICYmIG5vbmNlID09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY3JlZGVudGlhbHMuYXV0aG9yaXplKHRoaXMsIHJlcXVlc3QpOwogICAgdXNlZCA9IHRydWU7CiAgfQp9CgpjbGFzcyBfUHJveHlDcmVkZW50aWFscyBleHRlbmRzIF9DcmVkZW50aWFscyB7CiAgU3RyaW5nIGhvc3Q7CiAgaW50IHBvcnQ7CgogIF9Qcm94eUNyZWRlbnRpYWxzKHRoaXMuaG9zdCwgdGhpcy5wb3J0LCByZWFsbSwgX0h0dHBDbGllbnRDcmVkZW50aWFscyBjcmVkcykKICAgICAgOiBzdXBlcihjcmVkcywgcmVhbG0pOwoKICBib29sIGFwcGxpZXMoX1Byb3h5IHByb3h5LCBfQXV0aGVudGljYXRpb25TY2hlbWUgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lICE9IG51bGwgJiYgY3JlZGVudGlhbHMuc2NoZW1lICE9IHNjaGVtZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHByb3h5Lmhvc3QgPT0gaG9zdCAmJiBwcm94eS5wb3J0ID09IHBvcnQ7CiAgfQoKICB2b2lkIGF1dGhvcml6ZShIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAgICAvLyBEaWdlc3QgY3JlZGVudGlhbHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIG5vbmNlIGZyb20gdGhlCiAgICAvLyBzZXJ2ZXIuCiAgICBpZiAoY3JlZGVudGlhbHMuc2NoZW1lID09IF9BdXRoZW50aWNhdGlvblNjaGVtZS5ESUdFU1QgJiYgbm9uY2UgPT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjcmVkZW50aWFscy5hdXRob3JpemVQcm94eSh0aGlzLCByZXF1ZXN0KTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IdHRwQ2xpZW50Q3JlZGVudGlhbHMgaW1wbGVtZW50cyBIdHRwQ2xpZW50Q3JlZGVudGlhbHMgewogIF9BdXRoZW50aWNhdGlvblNjaGVtZSBnZXQgc2NoZW1lOwogIHZvaWQgYXV0aG9yaXplKF9DcmVkZW50aWFscyBjcmVkZW50aWFscywgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCk7CiAgdm9pZCBhdXRob3JpemVQcm94eShfUHJveHlDcmVkZW50aWFscyBjcmVkZW50aWFscywgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCk7Cn0KCmNsYXNzIF9IdHRwQ2xpZW50QmFzaWNDcmVkZW50aWFscyBleHRlbmRzIF9IdHRwQ2xpZW50Q3JlZGVudGlhbHMKICAgIGltcGxlbWVudHMgSHR0cENsaWVudEJhc2ljQ3JlZGVudGlhbHMgewogIFN0cmluZyB1c2VybmFtZTsKICBTdHJpbmcgcGFzc3dvcmQ7CgogIF9IdHRwQ2xpZW50QmFzaWNDcmVkZW50aWFscyh0aGlzLnVzZXJuYW1lLCB0aGlzLnBhc3N3b3JkKTsKCiAgX0F1dGhlbnRpY2F0aW9uU2NoZW1lIGdldCBzY2hlbWUgPT4gX0F1dGhlbnRpY2F0aW9uU2NoZW1lLkJBU0lDOwoKICBTdHJpbmcgYXV0aG9yaXphdGlvbigpIHsKICAgIC8vIFRoZXJlIGlzIG5vIG1lbnRpb25pbmcgb2YgdXNlcm5hbWUvcGFzc3dvcmQgZW5jb2RpbmcgaW4gUkZDCiAgICAvLyAyNjE3LiBIb3dldmVyIHRoZXJlIGlzIGFuIG9wZW4gZHJhZnQgZm9yIGFkZGluZyBhbiBhZGRpdGlvbmFsCiAgICAvLyBhY2NlcHQtY2hhcnNldCBwYXJhbWV0ZXIgdG8gdGhlIFdXVy1BdXRoZW50aWNhdGUgYW5kCiAgICAvLyBQcm94eS1BdXRoZW50aWNhdGUgaGVhZGVycywgc2VlCiAgICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1yZXNjaGtlLWJhc2ljYXV0aC1lbmMtMDYuIEZvcgogICAgLy8gbm93IGFsd2F5cyB1c2UgVVRGLTggZW5jb2RpbmcuCiAgICBTdHJpbmcgYXV0aCA9CiAgICAgICAgX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQodXRmOC5lbmNvZGUoIiR1c2VybmFtZTokcGFzc3dvcmQiKSk7CiAgICByZXR1cm4gIkJhc2ljICRhdXRoIjsKICB9CgogIHZvaWQgYXV0aG9yaXplKF9DcmVkZW50aWFscyBfLCBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEh0dHBIZWFkZXJzLmF1dGhvcml6YXRpb25IZWFkZXIsIGF1dGhvcml6YXRpb24oKSk7CiAgfQoKICB2b2lkIGF1dGhvcml6ZVByb3h5KF9Qcm94eUNyZWRlbnRpYWxzIF8sIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMucHJveHlBdXRob3JpemF0aW9uSGVhZGVyLCBhdXRob3JpemF0aW9uKCkpOwogIH0KfQoKY2xhc3MgX0h0dHBDbGllbnREaWdlc3RDcmVkZW50aWFscyBleHRlbmRzIF9IdHRwQ2xpZW50Q3JlZGVudGlhbHMKICAgIGltcGxlbWVudHMgSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzIHsKICBTdHJpbmcgdXNlcm5hbWU7CiAgU3RyaW5nIHBhc3N3b3JkOwoKICBfSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzKHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpOwoKICBfQXV0aGVudGljYXRpb25TY2hlbWUgZ2V0IHNjaGVtZSA9PiBfQXV0aGVudGljYXRpb25TY2hlbWUuRElHRVNUOwoKICBTdHJpbmcgYXV0aG9yaXphdGlvbihfQ3JlZGVudGlhbHMgY3JlZGVudGlhbHMsIF9IdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAgICBTdHJpbmcgcmVxdWVzdFVyaSA9IHJlcXVlc3QuX3JlcXVlc3RVcmkoKTsKICAgIF9NRDUgaGFzaGVyID0gbmV3IF9NRDUoKQogICAgICAuLmFkZChyZXF1ZXN0Lm1ldGhvZC5jb2RlVW5pdHMpCiAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAuLmFkZChyZXF1ZXN0VXJpLmNvZGVVbml0cyk7CiAgICB2YXIgaGEyID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9IZXgoaGFzaGVyLmNsb3NlKCkpOwoKICAgIFN0cmluZyBxb3A7CiAgICBTdHJpbmcgY25vbmNlOwogICAgU3RyaW5nIG5jOwogICAgdmFyIHg7CiAgICBoYXNoZXIgPSBuZXcgX01ENSgpLi5hZGQoY3JlZGVudGlhbHMuaGExLmNvZGVVbml0cykuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSk7CiAgICBpZiAoY3JlZGVudGlhbHMucW9wID09ICJhdXRoIikgewogICAgICBxb3AgPSBjcmVkZW50aWFscy5xb3A7CiAgICAgIGNub25jZSA9IF9DcnlwdG9VdGlscy5ieXRlc1RvSGV4KF9DcnlwdG9VdGlscy5nZXRSYW5kb21CeXRlcyg0KSk7CiAgICAgICsrY3JlZGVudGlhbHMubm9uY2VDb3VudDsKICAgICAgbmMgPSBjcmVkZW50aWFscy5ub25jZUNvdW50LnRvUmFkaXhTdHJpbmcoMTYpOwogICAgICBuYyA9ICIwMDAwMDAwMCIuc3Vic3RyaW5nKDAsIDggLSBuYy5sZW5ndGggKyAxKSArIG5jOwogICAgICBoYXNoZXIKICAgICAgICAuLmFkZChjcmVkZW50aWFscy5ub25jZS5jb2RlVW5pdHMpCiAgICAgICAgLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pCiAgICAgICAgLi5hZGQobmMuY29kZVVuaXRzKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKGNub25jZS5jb2RlVW5pdHMpCiAgICAgICAgLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pCiAgICAgICAgLi5hZGQoY3JlZGVudGlhbHMucW9wLmNvZGVVbml0cykKICAgICAgICAuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSkKICAgICAgICAuLmFkZChoYTIuY29kZVVuaXRzKTsKICAgIH0gZWxzZSB7CiAgICAgIGhhc2hlcgogICAgICAgIC4uYWRkKGNyZWRlbnRpYWxzLm5vbmNlLmNvZGVVbml0cykKICAgICAgICAuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSkKICAgICAgICAuLmFkZChoYTIuY29kZVVuaXRzKTsKICAgIH0KICAgIHZhciByZXNwb25zZSA9IF9DcnlwdG9VdGlscy5ieXRlc1RvSGV4KGhhc2hlci5jbG9zZSgpKTsKCiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpCiAgICAgIC4ud3JpdGUoJ0RpZ2VzdCAnKQogICAgICAuLndyaXRlKCd1c2VybmFtZT0iJHVzZXJuYW1lIicpCiAgICAgIC4ud3JpdGUoJywgcmVhbG09IiR7Y3JlZGVudGlhbHMucmVhbG19IicpCiAgICAgIC4ud3JpdGUoJywgbm9uY2U9IiR7Y3JlZGVudGlhbHMubm9uY2V9IicpCiAgICAgIC4ud3JpdGUoJywgdXJpPSIkcmVxdWVzdFVyaSInKQogICAgICAuLndyaXRlKCcsIGFsZ29yaXRobT0iJHtjcmVkZW50aWFscy5hbGdvcml0aG19IicpOwogICAgaWYgKHFvcCA9PSAiYXV0aCIpIHsKICAgICAgYnVmZmVyCiAgICAgICAgLi53cml0ZSgnLCBxb3A9IiRxb3AiJykKICAgICAgICAuLndyaXRlKCcsIGNub25jZT0iJGNub25jZSInKQogICAgICAgIC4ud3JpdGUoJywgbmM9IiRuYyInKTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZSgnLCByZXNwb25zZT0iJHJlc3BvbnNlIicpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgdm9pZCBhdXRob3JpemUoX0NyZWRlbnRpYWxzIGNyZWRlbnRpYWxzLCBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KAogICAgICAgIEh0dHBIZWFkZXJzLmF1dGhvcml6YXRpb25IZWFkZXIsIGF1dGhvcml6YXRpb24oY3JlZGVudGlhbHMsIHJlcXVlc3QpKTsKICB9CgogIHZvaWQgYXV0aG9yaXplUHJveHkoCiAgICAgIF9Qcm94eUNyZWRlbnRpYWxzIGNyZWRlbnRpYWxzLCBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEh0dHBIZWFkZXJzLnByb3h5QXV0aG9yaXphdGlvbkhlYWRlciwKICAgICAgICBhdXRob3JpemF0aW9uKGNyZWRlbnRpYWxzLCByZXF1ZXN0KSk7CiAgfQp9CgpjbGFzcyBfUmVkaXJlY3RJbmZvIGltcGxlbWVudHMgUmVkaXJlY3RJbmZvIHsKICBmaW5hbCBpbnQgc3RhdHVzQ29kZTsKICBmaW5hbCBTdHJpbmcgbWV0aG9kOwogIGZpbmFsIFVyaSBsb2NhdGlvbjsKICBjb25zdCBfUmVkaXJlY3RJbmZvKHRoaXMuc3RhdHVzQ29kZSwgdGhpcy5tZXRob2QsIHRoaXMubG9jYXRpb24pOwp9CgpTdHJpbmcgX2dldEh0dHBWZXJzaW9uKCkgewogIHZhciB2ZXJzaW9uID0gUGxhdGZvcm0udmVyc2lvbjsKICAvLyBPbmx5IGluY2x1ZGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVycy4KICBpbnQgaW5kZXggPSB2ZXJzaW9uLmluZGV4T2YoJy4nLCB2ZXJzaW9uLmluZGV4T2YoJy4nKSArIDEpOwogIHZlcnNpb24gPSB2ZXJzaW9uLnN1YnN0cmluZygwLCBpbmRleCk7CiAgcmV0dXJuICdEYXJ0LyR2ZXJzaW9uIChkYXJ0OmlvKSc7Cn0KjKUATk48ARQBGAE5IBcXOhgEARkBPgEfAR8BIiodBAIBNRwmAS4BExUBMikZPAEeJCIqJRcGKB4yDS4pCAYYBAEbJTVGFgYmHQ8EAR1DESAgHA0nBiw0GQQBGilBDRMEARgpIzkEAR0BJAEnARERGgQBIxMJERERERISBAIBLAEuATAdNB0BHQEYHhkBIBIXARkRCwEeAUFGQQ4tAUMBRT8aKTgWSQQBNDABHRka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c3QgU3RyaW5nIF9jbGllbnRNYXhXaW5kb3dCaXRzID0gImNsaWVudF9tYXhfd2luZG93X2JpdHMiOwpjb25zdCBTdHJpbmcgX3NlcnZlck1heFdpbmRvd0JpdHMgPSAic2VydmVyX21heF93aW5kb3dfYml0cyI7CgovLyBNYXRjaGVzIF9XZWJTb2NrZXRPcGNvZGUuCmNsYXNzIF9XZWJTb2NrZXRNZXNzYWdlVHlwZSB7CiAgc3RhdGljIGNvbnN0IGludCBOT05FID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFRFWFQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgQklOQVJZID0gMjsKfQoKY2xhc3MgX1dlYlNvY2tldE9wY29kZSB7CiAgc3RhdGljIGNvbnN0IGludCBDT05USU5VQVRJT04gPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgVEVYVCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBCSU5BUlkgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfMyA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF80ID0gNDsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEXzUgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfNiA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF83ID0gNzsKICBzdGF0aWMgY29uc3QgaW50IENMT1NFID0gODsKICBzdGF0aWMgY29uc3QgaW50IFBJTkcgPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgUE9ORyA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfQiA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfQyA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfRCA9IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfRSA9IDE0OwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfRiA9IDE1Owp9CgpjbGFzcyBfRW5jb2RlZFN0cmluZyB7CiAgZmluYWwgTGlzdDxpbnQ+IGJ5dGVzOwogIF9FbmNvZGVkU3RyaW5nKHRoaXMuYnl0ZXMpOwp9CgovKioKICogIFN0b3JlcyB0aGUgaGVhZGVyIGFuZCBpbnRlZ2VyIHZhbHVlIGRlcml2ZWQgZnJvbSBuZWdvdGlhdGlvbiBvZgogKiAgY2xpZW50X21heF93aW5kb3dfYml0cyBhbmQgc2VydmVyX21heF93aW5kb3dfYml0cy4gaGVhZGVyVmFsdWUgd2lsbCBiZQogKiAgc2V0IGluIHRoZSBXZWJzb2NrZXQgcmVzcG9uc2UgaGVhZGVycy4KICovCmNsYXNzIF9Db21wcmVzc2lvbk1heFdpbmRvd0JpdHMgewogIFN0cmluZyBoZWFkZXJWYWx1ZTsKICBpbnQgbWF4V2luZG93Qml0czsKICBfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzKFt0aGlzLmhlYWRlclZhbHVlLCB0aGlzLm1heFdpbmRvd0JpdHNdKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBoZWFkZXJWYWx1ZTsKfQoKLyoqCiAqIFRoZSB3ZWIgc29ja2V0IHByb3RvY29sIHRyYW5zZm9ybWVyIGhhbmRsZXMgdGhlIHByb3RvY29sIGJ5dGUgc3RyZWFtCiAqIHdoaWNoIGlzIHN1cHBsaWVkIHRocm91Z2ggdGhlIGBoYW5kbGVEYXRhYC4gQXMgdGhlIHByb3RvY29sIGlzIHByb2Nlc3NlZCwKICogaXQnbGwgb3V0cHV0IGZyYW1lIGRhdGEgYXMgZWl0aGVyIGEgTGlzdDxpbnQ+IG9yIFN0cmluZy4KICoKICogSW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHVzYWdlOiBCZSBzdXJlIHlvdSB1c2UgY2FuY2VsT25FcnJvciwgc28gdGhlCiAqIHNvY2tldCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBwcm9jZXNzb3IgZW5jb3VudGVyIGFuIGVycm9yLiBOb3QgdXNpbmcgaXQKICogd2lsbCBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvdXIuCiAqLwpjbGFzcyBfV2ViU29ja2V0UHJvdG9jb2xUcmFuc2Zvcm1lciBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxMaXN0PGludD4sCiAgICAgICAgZHluYW1pYyAvKkxpc3Q8aW50PnxfV2ViU29ja2V0UGluZ3xfV2ViU29ja2V0UG9uZyovID4KICAgIGltcGxlbWVudHMgRXZlbnRTaW5rPExpc3Q8aW50Pj4gewogIHN0YXRpYyBjb25zdCBpbnQgU1RBUlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgTEVOX0ZJUlNUID0gMTsKICBzdGF0aWMgY29uc3QgaW50IExFTl9SRVNUID0gMjsKICBzdGF0aWMgY29uc3QgaW50IE1BU0sgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgUEFZTE9BRCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBDTE9TRUQgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgRkFJTFVSRSA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBGSU4gPSAweDgwOwogIHN0YXRpYyBjb25zdCBpbnQgUlNWMSA9IDB4NDA7CiAgc3RhdGljIGNvbnN0IGludCBSU1YyID0gMHgyMDsKICBzdGF0aWMgY29uc3QgaW50IFJTVjMgPSAweDEwOwogIHN0YXRpYyBjb25zdCBpbnQgT1BDT0RFID0gMHhGOwoKICBpbnQgX3N0YXRlID0gU1RBUlQ7CiAgYm9vbCBfZmluID0gZmFsc2U7CiAgYm9vbCBfY29tcHJlc3NlZCA9IGZhbHNlOwogIGludCBfb3Bjb2RlID0gLTE7CiAgaW50IF9sZW4gPSAtMTsKICBib29sIF9tYXNrZWQgPSBmYWxzZTsKICBpbnQgX3JlbWFpbmluZ0xlbkJ5dGVzID0gLTE7CiAgaW50IF9yZW1haW5pbmdNYXNraW5nS2V5Qnl0ZXMgPSA0OwogIGludCBfcmVtYWluaW5nUGF5bG9hZEJ5dGVzID0gLTE7CiAgaW50IF91bm1hc2tpbmdJbmRleCA9IDA7CiAgaW50IF9jdXJyZW50TWVzc2FnZVR5cGUgPSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuTk9ORTsKICBpbnQgY2xvc2VDb2RlID0gV2ViU29ja2V0U3RhdHVzLk5PX1NUQVRVU19SRUNFSVZFRDsKICBTdHJpbmcgY2xvc2VSZWFzb24gPSAiIjsKCiAgRXZlbnRTaW5rPGR5bmFtaWMgLypMaXN0PGludD58X1dlYlNvY2tldFBpbmd8X1dlYlNvY2tldFBvbmcqLyA+IF9ldmVudFNpbms7CgogIGZpbmFsIGJvb2wgX3NlcnZlclNpZGU7CiAgZmluYWwgTGlzdCBfbWFza2luZ0J5dGVzID0gbmV3IExpc3QoNCk7CiAgZmluYWwgQnl0ZXNCdWlsZGVyIF9wYXlsb2FkID0gbmV3IEJ5dGVzQnVpbGRlcihjb3B5OiBmYWxzZSk7CgogIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBfZGVmbGF0ZTsKICBfV2ViU29ja2V0UHJvdG9jb2xUcmFuc2Zvcm1lcihbdGhpcy5fc2VydmVyU2lkZSA9IGZhbHNlLCB0aGlzLl9kZWZsYXRlXSk7CgogIFN0cmVhbTxkeW5hbWljIC8qTGlzdDxpbnQ+fF9XZWJTb2NrZXRQaW5nfF9XZWJTb2NrZXRQb25nKi8gPiBiaW5kKAogICAgICBTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pIHsKICAgIHJldHVybiBuZXcgU3RyZWFtLmV2ZW50VHJhbnNmb3JtZWQoc3RyZWFtLCAoRXZlbnRTaW5rIGV2ZW50U2luaykgewogICAgICBpZiAoX2V2ZW50U2luayAhPSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIldlYlNvY2tldCB0cmFuc2Zvcm1lciBhbHJlYWR5IHVzZWQuIik7CiAgICAgIH0KICAgICAgX2V2ZW50U2luayA9IGV2ZW50U2luazsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgX2V2ZW50U2luay5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2V2ZW50U2luay5jbG9zZSgpOwogIH0KCiAgLyoqCiAgICogUHJvY2VzcyBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHVuZGVybHlpbmcgY29tbXVuaWNhdGlvbiBjaGFubmVsLgogICAqLwogIHZvaWQgYWRkKExpc3Q8aW50PiBieXRlcykgewogICAgdmFyIGJ1ZmZlciA9IGJ5dGVzIGlzIFVpbnQ4TGlzdCA/IGJ5dGVzIDogbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChieXRlcyk7CiAgICBpbnQgaW5kZXggPSAwOwogICAgaW50IGxhc3RJbmRleCA9IGJ1ZmZlci5sZW5ndGg7CiAgICBpZiAoX3N0YXRlID09IENMT1NFRCkgewogICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJEYXRhIG9uIGNsb3NlZCBjb25uZWN0aW9uIik7CiAgICB9CiAgICBpZiAoX3N0YXRlID09IEZBSUxVUkUpIHsKICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiRGF0YSBvbiBmYWlsZWQgY29ubmVjdGlvbiIpOwogICAgfQogICAgd2hpbGUgKChpbmRleCA8IGxhc3RJbmRleCkgJiYgX3N0YXRlICE9IENMT1NFRCAmJiBfc3RhdGUgIT0gRkFJTFVSRSkgewogICAgICBpbnQgYnl0ZSA9IGJ1ZmZlcltpbmRleF07CiAgICAgIGlmIChfc3RhdGUgPD0gTEVOX1JFU1QpIHsKICAgICAgICBpZiAoX3N0YXRlID09IFNUQVJUKSB7CiAgICAgICAgICBfZmluID0gKGJ5dGUgJiBGSU4pICE9IDA7CgogICAgICAgICAgaWYgKChieXRlICYgKFJTVjIgfCBSU1YzKSkgIT0gMCkgewogICAgICAgICAgICAvLyBUaGUgUlNWMiwgUlNWMyBiaXRzIG11c3QgYm90aCBiZSB6ZXJvLgogICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgfQoKICAgICAgICAgIF9vcGNvZGUgPSAoYnl0ZSAmIE9QQ09ERSk7CgogICAgICAgICAgaWYgKF9vcGNvZGUgIT0gX1dlYlNvY2tldE9wY29kZS5DT05USU5VQVRJT04pIHsKICAgICAgICAgICAgaWYgKChieXRlICYgUlNWMSkgIT0gMCkgewogICAgICAgICAgICAgIF9jb21wcmVzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfY29tcHJlc3NlZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9vcGNvZGUgPD0gX1dlYlNvY2tldE9wY29kZS5CSU5BUlkpIHsKICAgICAgICAgICAgaWYgKF9vcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5DT05USU5VQVRJT04pIHsKICAgICAgICAgICAgICBpZiAoX2N1cnJlbnRNZXNzYWdlVHlwZSA9PSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuTk9ORSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYXNzZXJ0KF9vcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5URVhUIHx8CiAgICAgICAgICAgICAgICAgIF9vcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5CSU5BUlkpOwogICAgICAgICAgICAgIGlmIChfY3VycmVudE1lc3NhZ2VUeXBlICE9IF9XZWJTb2NrZXRNZXNzYWdlVHlwZS5OT05FKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY3VycmVudE1lc3NhZ2VUeXBlID0gX29wY29kZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChfb3Bjb2RlID49IF9XZWJTb2NrZXRPcGNvZGUuQ0xPU0UgJiYKICAgICAgICAgICAgICBfb3Bjb2RlIDw9IF9XZWJTb2NrZXRPcGNvZGUuUE9ORykgewogICAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW5ub3QgYmUgZnJhZ21lbnRlZC4KICAgICAgICAgICAgaWYgKCFfZmluKSB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0KICAgICAgICAgIF9zdGF0ZSA9IExFTl9GSVJTVDsKICAgICAgICB9IGVsc2UgaWYgKF9zdGF0ZSA9PSBMRU5fRklSU1QpIHsKICAgICAgICAgIF9tYXNrZWQgPSAoYnl0ZSAmIDB4ODApICE9IDA7CiAgICAgICAgICBfbGVuID0gYnl0ZSAmIDB4N0Y7CiAgICAgICAgICBpZiAoX2lzQ29udHJvbEZyYW1lKCkgJiYgX2xlbiA+IDEyNSkgewogICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9sZW4gPT0gMTI2KSB7CiAgICAgICAgICAgIF9sZW4gPSAwOwogICAgICAgICAgICBfcmVtYWluaW5nTGVuQnl0ZXMgPSAyOwogICAgICAgICAgICBfc3RhdGUgPSBMRU5fUkVTVDsKICAgICAgICAgIH0gZWxzZSBpZiAoX2xlbiA9PSAxMjcpIHsKICAgICAgICAgICAgX2xlbiA9IDA7CiAgICAgICAgICAgIF9yZW1haW5pbmdMZW5CeXRlcyA9IDg7CiAgICAgICAgICAgIF9zdGF0ZSA9IExFTl9SRVNUOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYXNzZXJ0KF9sZW4gPCAxMjYpOwogICAgICAgICAgICBfbGVuZ3RoRG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQoX3N0YXRlID09IExFTl9SRVNUKTsKICAgICAgICAgIF9sZW4gPSBfbGVuIDw8IDggfCBieXRlOwogICAgICAgICAgX3JlbWFpbmluZ0xlbkJ5dGVzLS07CiAgICAgICAgICBpZiAoX3JlbWFpbmluZ0xlbkJ5dGVzID09IDApIHsKICAgICAgICAgICAgX2xlbmd0aERvbmUoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKF9zdGF0ZSA9PSBNQVNLKSB7CiAgICAgICAgICBfbWFza2luZ0J5dGVzWzQgLSBfcmVtYWluaW5nTWFza2luZ0tleUJ5dGVzLS1dID0gYnl0ZTsKICAgICAgICAgIGlmIChfcmVtYWluaW5nTWFza2luZ0tleUJ5dGVzID09IDApIHsKICAgICAgICAgICAgX21hc2tEb25lKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChfc3RhdGUgPT0gUEFZTE9BRCk7CiAgICAgICAgICAvLyBUaGUgcGF5bG9hZCBpcyBub3QgaGFuZGxlZCBvbmUgYnl0ZSBhdCBhIHRpbWUgYnV0IGluIGJsb2Nrcy4KICAgICAgICAgIGludCBwYXlsb2FkTGVuZ3RoID0gbWluKGxhc3RJbmRleCAtIGluZGV4LCBfcmVtYWluaW5nUGF5bG9hZEJ5dGVzKTsKICAgICAgICAgIF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgLT0gcGF5bG9hZExlbmd0aDsKICAgICAgICAgIC8vIFVubWFzayBwYXlsb2FkIGlmIG1hc2tlZC4KICAgICAgICAgIGlmIChfbWFza2VkKSB7CiAgICAgICAgICAgIF91bm1hc2soaW5kZXgsIHBheWxvYWRMZW5ndGgsIGJ1ZmZlcik7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lIGFuZCBkYXRhIGZyYW1lIHNoYXJlIF9wYXlsb2Fkcy4KICAgICAgICAgIF9wYXlsb2FkLmFkZChuZXcgVWludDhMaXN0LnZpZXcoYnVmZmVyLmJ1ZmZlciwgaW5kZXgsIHBheWxvYWRMZW5ndGgpKTsKICAgICAgICAgIGluZGV4ICs9IHBheWxvYWRMZW5ndGg7CiAgICAgICAgICBpZiAoX2lzQ29udHJvbEZyYW1lKCkpIHsKICAgICAgICAgICAgaWYgKF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgPT0gMCkgX2NvbnRyb2xGcmFtZUVuZCgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKF9jdXJyZW50TWVzc2FnZVR5cGUgIT0gX1dlYlNvY2tldE1lc3NhZ2VUeXBlLlRFWFQgJiYKICAgICAgICAgICAgICAgIF9jdXJyZW50TWVzc2FnZVR5cGUgIT0gX1dlYlNvY2tldE1lc3NhZ2VUeXBlLkJJTkFSWSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgPT0gMCkgX21lc3NhZ2VGcmFtZUVuZCgpOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIEhhY2sgLSBhcyB3ZSBhbHdheXMgZG8gaW5kZXgrKyBiZWxvdy4KICAgICAgICAgIGluZGV4LS07CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGJ5dGUuCiAgICAgIGluZGV4Kys7CiAgICB9CiAgfQoKICB2b2lkIF91bm1hc2soaW50IGluZGV4LCBpbnQgbGVuZ3RoLCBVaW50OExpc3QgYnVmZmVyKSB7CiAgICBjb25zdCBpbnQgQkxPQ0tfU0laRSA9IDE2OwogICAgLy8gU2tpcCBJbnQzMng0LXZlcnNpb24gaWYgbWVzc2FnZSBpcyBzbWFsbC4KICAgIGlmIChsZW5ndGggPj0gQkxPQ0tfU0laRSkgewogICAgICAvLyBTdGFydCBieSBhbGlnbmluZyB0byAxNiBieXRlcy4KICAgICAgZmluYWwgaW50IHN0YXJ0T2Zmc2V0ID0gQkxPQ0tfU0laRSAtIChpbmRleCAmIDE1KTsKICAgICAgZmluYWwgaW50IGVuZCA9IGluZGV4ICsgc3RhcnRPZmZzZXQ7CiAgICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgYnVmZmVyW2ldIF49IF9tYXNraW5nQnl0ZXNbX3VubWFza2luZ0luZGV4KysgJiAzXTsKICAgICAgfQogICAgICBpbmRleCArPSBzdGFydE9mZnNldDsKICAgICAgbGVuZ3RoIC09IHN0YXJ0T2Zmc2V0OwogICAgICBmaW5hbCBpbnQgYmxvY2tDb3VudCA9IGxlbmd0aCB+LyBCTE9DS19TSVpFOwogICAgICBpZiAoYmxvY2tDb3VudCA+IDApIHsKICAgICAgICAvLyBDcmVhdGUgbWFzayBibG9jay4KICAgICAgICBpbnQgbWFzayA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDM7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICBtYXNrID0gKG1hc2sgPDwgOCkgfCBfbWFza2luZ0J5dGVzWyhfdW5tYXNraW5nSW5kZXggKyBpKSAmIDNdOwogICAgICAgIH0KICAgICAgICBJbnQzMng0IGJsb2NrTWFzayA9IG5ldyBJbnQzMng0KG1hc2ssIG1hc2ssIG1hc2ssIG1hc2spOwogICAgICAgIEludDMyeDRMaXN0IGJsb2NrQnVmZmVyID0KICAgICAgICAgICAgbmV3IEludDMyeDRMaXN0LnZpZXcoYnVmZmVyLmJ1ZmZlciwgaW5kZXgsIGJsb2NrQ291bnQpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tCdWZmZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGJsb2NrQnVmZmVyW2ldIF49IGJsb2NrTWFzazsKICAgICAgICB9CiAgICAgICAgZmluYWwgaW50IGJ5dGVzID0gYmxvY2tDb3VudCAqIEJMT0NLX1NJWkU7CiAgICAgICAgaW5kZXggKz0gYnl0ZXM7CiAgICAgICAgbGVuZ3RoIC09IGJ5dGVzOwogICAgICB9CiAgICB9CiAgICAvLyBIYW5kbGUgZW5kLgogICAgZmluYWwgaW50IGVuZCA9IGluZGV4ICsgbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgZW5kOyBpKyspIHsKICAgICAgYnVmZmVyW2ldIF49IF9tYXNraW5nQnl0ZXNbX3VubWFza2luZ0luZGV4KysgJiAzXTsKICAgIH0KICB9CgogIHZvaWQgX2xlbmd0aERvbmUoKSB7CiAgICBpZiAoX21hc2tlZCkgewogICAgICBpZiAoIV9zZXJ2ZXJTaWRlKSB7CiAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUmVjZWl2ZWQgbWFza2VkIGZyYW1lIGZyb20gc2VydmVyIik7CiAgICAgIH0KICAgICAgX3N0YXRlID0gTUFTSzsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChfc2VydmVyU2lkZSkgewogICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlJlY2VpdmVkIHVubWFza2VkIGZyYW1lIGZyb20gY2xpZW50Iik7CiAgICAgIH0KICAgICAgX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9IF9sZW47CiAgICAgIF9zdGFydFBheWxvYWQoKTsKICAgIH0KICB9CgogIHZvaWQgX21hc2tEb25lKCkgewogICAgX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9IF9sZW47CiAgICBfc3RhcnRQYXlsb2FkKCk7CiAgfQoKICB2b2lkIF9zdGFydFBheWxvYWQoKSB7CiAgICAvLyBJZiB0aGVyZSBpcyBubyBhY3R1YWwgcGF5bG9hZCBwZXJmb3JtIHBlcmZvcm0gY2FsbGJhY2tzIHdpdGhvdXQKICAgIC8vIGdvaW5nIHRocm91Z2ggdGhlIFBBWUxPQUQgc3RhdGUuCiAgICBpZiAoX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9PSAwKSB7CiAgICAgIGlmIChfaXNDb250cm9sRnJhbWUoKSkgewogICAgICAgIHN3aXRjaCAoX29wY29kZSkgewogICAgICAgICAgY2FzZSBfV2ViU29ja2V0T3Bjb2RlLkNMT1NFOgogICAgICAgICAgICBfc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgICAgIF9ldmVudFNpbmsuY2xvc2UoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9XZWJTb2NrZXRPcGNvZGUuUElORzoKICAgICAgICAgICAgX2V2ZW50U2luay5hZGQobmV3IF9XZWJTb2NrZXRQaW5nKCkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1dlYlNvY2tldE9wY29kZS5QT05HOgogICAgICAgICAgICBfZXZlbnRTaW5rLmFkZChuZXcgX1dlYlNvY2tldFBvbmcoKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBfcHJlcGFyZUZvck5leHRGcmFtZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9tZXNzYWdlRnJhbWVFbmQoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX3N0YXRlID0gUEFZTE9BRDsKICAgIH0KICB9CgogIHZvaWQgX21lc3NhZ2VGcmFtZUVuZCgpIHsKICAgIGlmIChfZmluKSB7CiAgICAgIHZhciBieXRlcyA9IF9wYXlsb2FkLnRha2VCeXRlcygpOwogICAgICBpZiAoX2RlZmxhdGUgIT0gbnVsbCAmJiBfY29tcHJlc3NlZCkgewogICAgICAgIGJ5dGVzID0gX2RlZmxhdGUucHJvY2Vzc0luY29taW5nTWVzc2FnZShieXRlcyk7CiAgICAgIH0KCiAgICAgIHN3aXRjaCAoX2N1cnJlbnRNZXNzYWdlVHlwZSkgewogICAgICAgIGNhc2UgX1dlYlNvY2tldE1lc3NhZ2VUeXBlLlRFWFQ6CiAgICAgICAgICBfZXZlbnRTaW5rLmFkZCh1dGY4LmRlY29kZShieXRlcykpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuQklOQVJZOgogICAgICAgICAgX2V2ZW50U2luay5hZGQoYnl0ZXMpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgX2N1cnJlbnRNZXNzYWdlVHlwZSA9IF9XZWJTb2NrZXRNZXNzYWdlVHlwZS5OT05FOwogICAgfQogICAgX3ByZXBhcmVGb3JOZXh0RnJhbWUoKTsKICB9CgogIHZvaWQgX2NvbnRyb2xGcmFtZUVuZCgpIHsKICAgIHN3aXRjaCAoX29wY29kZSkgewogICAgICBjYXNlIF9XZWJTb2NrZXRPcGNvZGUuQ0xPU0U6CiAgICAgICAgY2xvc2VDb2RlID0gV2ViU29ja2V0U3RhdHVzLk5PX1NUQVRVU19SRUNFSVZFRDsKICAgICAgICB2YXIgcGF5bG9hZCA9IF9wYXlsb2FkLnRha2VCeXRlcygpOwogICAgICAgIGlmIChwYXlsb2FkLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGlmIChwYXlsb2FkLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICB9CiAgICAgICAgICBjbG9zZUNvZGUgPSBwYXlsb2FkWzBdIDw8IDggfCBwYXlsb2FkWzFdOwogICAgICAgICAgaWYgKGNsb3NlQ29kZSA9PSBXZWJTb2NrZXRTdGF0dXMuTk9fU1RBVFVTX1JFQ0VJVkVEKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGggPiAyKSB7CiAgICAgICAgICAgIGNsb3NlUmVhc29uID0gdXRmOC5kZWNvZGUocGF5bG9hZC5zdWJsaXN0KDIpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3N0YXRlID0gQ0xPU0VEOwogICAgICAgIF9ldmVudFNpbmsuY2xvc2UoKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgX1dlYlNvY2tldE9wY29kZS5QSU5HOgogICAgICAgIF9ldmVudFNpbmsuYWRkKG5ldyBfV2ViU29ja2V0UGluZyhfcGF5bG9hZC50YWtlQnl0ZXMoKSkpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBfV2ViU29ja2V0T3Bjb2RlLlBPTkc6CiAgICAgICAgX2V2ZW50U2luay5hZGQobmV3IF9XZWJTb2NrZXRQb25nKF9wYXlsb2FkLnRha2VCeXRlcygpKSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBfcHJlcGFyZUZvck5leHRGcmFtZSgpOwogIH0KCiAgYm9vbCBfaXNDb250cm9sRnJhbWUoKSB7CiAgICByZXR1cm4gX29wY29kZSA9PSBfV2ViU29ja2V0T3Bjb2RlLkNMT1NFIHx8CiAgICAgICAgX29wY29kZSA9PSBfV2ViU29ja2V0T3Bjb2RlLlBJTkcgfHwKICAgICAgICBfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuUE9ORzsKICB9CgogIHZvaWQgX3ByZXBhcmVGb3JOZXh0RnJhbWUoKSB7CiAgICBpZiAoX3N0YXRlICE9IENMT1NFRCAmJiBfc3RhdGUgIT0gRkFJTFVSRSkgX3N0YXRlID0gU1RBUlQ7CiAgICBfZmluID0gZmFsc2U7CiAgICBfb3Bjb2RlID0gLTE7CiAgICBfbGVuID0gLTE7CiAgICBfcmVtYWluaW5nTGVuQnl0ZXMgPSAtMTsKICAgIF9yZW1haW5pbmdNYXNraW5nS2V5Qnl0ZXMgPSA0OwogICAgX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9IC0xOwogICAgX3VubWFza2luZ0luZGV4ID0gMDsKICB9Cn0KCmNsYXNzIF9XZWJTb2NrZXRQaW5nIHsKICBmaW5hbCBMaXN0PGludD4gcGF5bG9hZDsKICBfV2ViU29ja2V0UGluZyhbdGhpcy5wYXlsb2FkID0gbnVsbF0pOwp9CgpjbGFzcyBfV2ViU29ja2V0UG9uZyB7CiAgZmluYWwgTGlzdDxpbnQ+IHBheWxvYWQ7CiAgX1dlYlNvY2tldFBvbmcoW3RoaXMucGF5bG9hZCA9IG51bGxdKTsKfQoKdHlwZWRlZiAvKlN0cmluZ3xGdXR1cmU8U3RyaW5nPiovIF9Qcm90b2NvbFNlbGVjdG9yKExpc3Q8U3RyaW5nPiBwcm90b2NvbHMpOwoKY2xhc3MgX1dlYlNvY2tldFRyYW5zZm9ybWVySW1wbAogICAgZXh0ZW5kcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8SHR0cFJlcXVlc3QsIFdlYlNvY2tldD4KICAgIGltcGxlbWVudHMgV2ViU29ja2V0VHJhbnNmb3JtZXIgewogIGZpbmFsIFN0cmVhbUNvbnRyb2xsZXI8V2ViU29ja2V0PiBfY29udHJvbGxlciA9CiAgICAgIG5ldyBTdHJlYW1Db250cm9sbGVyPFdlYlNvY2tldD4oc3luYzogdHJ1ZSk7CiAgZmluYWwgX1Byb3RvY29sU2VsZWN0b3IgX3Byb3RvY29sU2VsZWN0b3I7CiAgZmluYWwgQ29tcHJlc3Npb25PcHRpb25zIF9jb21wcmVzc2lvbjsKCiAgX1dlYlNvY2tldFRyYW5zZm9ybWVySW1wbCh0aGlzLl9wcm90b2NvbFNlbGVjdG9yLCB0aGlzLl9jb21wcmVzc2lvbik7CgogIFN0cmVhbTxXZWJTb2NrZXQ+IGJpbmQoU3RyZWFtPEh0dHBSZXF1ZXN0PiBzdHJlYW0pIHsKICAgIHN0cmVhbS5saXN0ZW4oKHJlcXVlc3QpIHsKICAgICAgX3VwZ3JhZGUocmVxdWVzdCwgX3Byb3RvY29sU2VsZWN0b3IsIF9jb21wcmVzc2lvbikKICAgICAgICAgIC50aGVuKChXZWJTb2NrZXQgd2ViU29ja2V0KSA9PiBfY29udHJvbGxlci5hZGQod2ViU29ja2V0KSkKICAgICAgICAgIC5jYXRjaEVycm9yKF9jb250cm9sbGVyLmFkZEVycm9yKTsKICAgIH0sIG9uRG9uZTogKCkgewogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfSk7CgogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbTsKICB9CgogIHN0YXRpYyBMaXN0PFN0cmluZz4gX3Rva2VuaXplRmllbGRWYWx1ZShTdHJpbmcgaGVhZGVyVmFsdWUpIHsKICAgIExpc3Q8U3RyaW5nPiB0b2tlbnMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBpbnQgc3RhcnQgPSAwOwogICAgaW50IGluZGV4ID0gMDsKICAgIHdoaWxlIChpbmRleCA8IGhlYWRlclZhbHVlLmxlbmd0aCkgewogICAgICBpZiAoaGVhZGVyVmFsdWVbaW5kZXhdID09ICIsIikgewogICAgICAgIHRva2Vucy5hZGQoaGVhZGVyVmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkpOwogICAgICAgIHN0YXJ0ID0gaW5kZXggKyAxOwogICAgICB9IGVsc2UgaWYgKGhlYWRlclZhbHVlW2luZGV4XSA9PSAiICIgfHwgaGVhZGVyVmFsdWVbaW5kZXhdID09ICJcdCIpIHsKICAgICAgICBzdGFydCsrOwogICAgICB9CiAgICAgIGluZGV4Kys7CiAgICB9CiAgICB0b2tlbnMuYWRkKGhlYWRlclZhbHVlLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpKTsKICAgIHJldHVybiB0b2tlbnM7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFdlYlNvY2tldD4gX3VwZ3JhZGUoSHR0cFJlcXVlc3QgcmVxdWVzdCwKICAgICAgX1Byb3RvY29sU2VsZWN0b3IgX3Byb3RvY29sU2VsZWN0b3IsIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbikgewogICAgdmFyIHJlc3BvbnNlID0gcmVxdWVzdC5yZXNwb25zZTsKICAgIGlmICghX2lzVXBncmFkZVJlcXVlc3QocmVxdWVzdCkpIHsKICAgICAgLy8gU2VuZCBlcnJvciByZXNwb25zZS4KICAgICAgcmVzcG9uc2UKICAgICAgICAuLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLmJhZFJlcXVlc3QKICAgICAgICAuLmNsb3NlKCk7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKAogICAgICAgICAgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiSW52YWxpZCBXZWJTb2NrZXQgdXBncmFkZSByZXF1ZXN0IikpOwogICAgfQoKICAgIEZ1dHVyZTxXZWJTb2NrZXQ+IHVwZ3JhZGUoU3RyaW5nIHByb3RvY29sKSB7CiAgICAgIC8vIFNlbmQgdGhlIHVwZ3JhZGUgcmVzcG9uc2UuCiAgICAgIHJlc3BvbnNlCiAgICAgICAgLi5zdGF0dXNDb2RlID0gSHR0cFN0YXR1cy5zd2l0Y2hpbmdQcm90b2NvbHMKICAgICAgICAuLmhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIsICJVcGdyYWRlIikKICAgICAgICAuLmhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLnVwZ3JhZGVIZWFkZXIsICJ3ZWJzb2NrZXQiKTsKICAgICAgU3RyaW5nIGtleSA9IHJlcXVlc3QuaGVhZGVycy52YWx1ZSgiU2VjLVdlYlNvY2tldC1LZXkiKTsKICAgICAgX1NIQTEgc2hhMSA9IG5ldyBfU0hBMSgpOwogICAgICBzaGExLmFkZCgiJGtleSRfd2ViU29ja2V0R1VJRCIuY29kZVVuaXRzKTsKICAgICAgU3RyaW5nIGFjY2VwdCA9IF9DcnlwdG9VdGlscy5ieXRlc1RvQmFzZTY0KHNoYTEuY2xvc2UoKSk7CiAgICAgIHJlc3BvbnNlLmhlYWRlcnMuYWRkKCJTZWMtV2ViU29ja2V0LUFjY2VwdCIsIGFjY2VwdCk7CiAgICAgIGlmIChwcm90b2NvbCAhPSBudWxsKSB7CiAgICAgICAgcmVzcG9uc2UuaGVhZGVycy5hZGQoIlNlYy1XZWJTb2NrZXQtUHJvdG9jb2wiLCBwcm90b2NvbCk7CiAgICAgIH0KCiAgICAgIHZhciBkZWZsYXRlID0gX25lZ290aWF0ZUNvbXByZXNzaW9uKHJlcXVlc3QsIHJlc3BvbnNlLCBjb21wcmVzc2lvbik7CgogICAgICByZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRMZW5ndGggPSAwOwogICAgICByZXR1cm4gcmVzcG9uc2UuZGV0YWNoU29ja2V0KCkudGhlbjxXZWJTb2NrZXQ+KChzb2NrZXQpID0+CiAgICAgICAgICBuZXcgX1dlYlNvY2tldEltcGwuX2Zyb21Tb2NrZXQoCiAgICAgICAgICAgICAgc29ja2V0LCBwcm90b2NvbCwgY29tcHJlc3Npb24sIHRydWUsIGRlZmxhdGUpKTsKICAgIH0KCiAgICB2YXIgcHJvdG9jb2xzID0gcmVxdWVzdC5oZWFkZXJzWydTZWMtV2ViU29ja2V0LVByb3RvY29sJ107CiAgICBpZiAocHJvdG9jb2xzICE9IG51bGwgJiYgX3Byb3RvY29sU2VsZWN0b3IgIT0gbnVsbCkgewogICAgICAvLyBUaGUgc3VnZ2VzdGVkIHByb3RvY29scyBjYW4gYmUgc3ByZWFkIG92ZXIgbXVsdGlwbGUgbGluZXMsIGVhY2gKICAgICAgLy8gY29uc2lzdGluZyBvZiBtdWx0aXBsZSBwcm90b2NvbHMuIFRvIHVuaWZ5IGFsbCBvZiB0aGVtLCBmaXJzdCBqb2luCiAgICAgIC8vIHRoZSBsaXN0cyB3aXRoICcsICcgYW5kIHRoZW4gdG9rZW5pemUuCiAgICAgIHByb3RvY29scyA9IF90b2tlbml6ZUZpZWxkVmFsdWUocHJvdG9jb2xzLmpvaW4oJywgJykpOwogICAgICByZXR1cm4gbmV3IEZ1dHVyZTxTdHJpbmc+KCgpID0+IF9wcm90b2NvbFNlbGVjdG9yKHByb3RvY29scykpCiAgICAgICAgICAudGhlbjxTdHJpbmc+KChwcm90b2NvbCkgewogICAgICAgIGlmIChwcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKAogICAgICAgICAgICAgICJTZWxlY3RlZCBwcm90b2NvbCBpcyBub3QgaW4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3RvY29scyIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcHJvdG9jb2w7CiAgICAgIH0pLmNhdGNoRXJyb3IoKGVycm9yKSB7CiAgICAgICAgcmVzcG9uc2UKICAgICAgICAgIC4uc3RhdHVzQ29kZSA9IEh0dHBTdGF0dXMuaW50ZXJuYWxTZXJ2ZXJFcnJvcgogICAgICAgICAgLi5jbG9zZSgpOwogICAgICAgIHRocm93IGVycm9yOwogICAgICB9KS50aGVuPFdlYlNvY2tldD4odXBncmFkZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdXBncmFkZShudWxsKTsKICAgIH0KICB9CgogIHN0YXRpYyBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgX25lZ290aWF0ZUNvbXByZXNzaW9uKEh0dHBSZXF1ZXN0IHJlcXVlc3QsCiAgICAgIEh0dHBSZXNwb25zZSByZXNwb25zZSwgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uKSB7CiAgICB2YXIgZXh0ZW5zaW9uSGVhZGVyID0gcmVxdWVzdC5oZWFkZXJzLnZhbHVlKCJTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMiKTsKCiAgICBleHRlbnNpb25IZWFkZXIgPz89ICIiOwoKICAgIHZhciBodiA9IEhlYWRlclZhbHVlLnBhcnNlKGV4dGVuc2lvbkhlYWRlciwgdmFsdWVTZXBhcmF0b3I6ICcsJyk7CiAgICBpZiAoY29tcHJlc3Npb24uZW5hYmxlZCAmJiBodi52YWx1ZSA9PSBfV2ViU29ja2V0SW1wbC5QRVJfTUVTU0FHRV9ERUZMQVRFKSB7CiAgICAgIHZhciBpbmZvID0gY29tcHJlc3Npb24uX2NyZWF0ZUhlYWRlcihodik7CgogICAgICByZXNwb25zZS5oZWFkZXJzLmFkZCgiU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIiwgaW5mby5oZWFkZXJWYWx1ZSk7CiAgICAgIHZhciBzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlciA9CiAgICAgICAgICAoaHYucGFyYW1ldGVycy5jb250YWluc0tleShfc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpICYmCiAgICAgICAgICAgICAgY29tcHJlc3Npb24uc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpOwogICAgICB2YXIgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIgPQogICAgICAgICAgKGh2LnBhcmFtZXRlcnMuY29udGFpbnNLZXkoX2NsaWVudE5vQ29udGV4dFRha2VvdmVyKSAmJgogICAgICAgICAgICAgIGNvbXByZXNzaW9uLmNsaWVudE5vQ29udGV4dFRha2VvdmVyKTsKICAgICAgdmFyIGRlZmxhdGUgPSBuZXcgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlKAogICAgICAgICAgc2VydmVyTm9Db250ZXh0VGFrZW92ZXI6IHNlcnZlck5vQ29udGV4dFRha2VvdmVyLAogICAgICAgICAgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXI6IGNsaWVudE5vQ29udGV4dFRha2VvdmVyLAogICAgICAgICAgc2VydmVyTWF4V2luZG93Qml0czogaW5mby5tYXhXaW5kb3dCaXRzLAogICAgICAgICAgY2xpZW50TWF4V2luZG93Qml0czogaW5mby5tYXhXaW5kb3dCaXRzLAogICAgICAgICAgc2VydmVyU2lkZTogdHJ1ZSk7CgogICAgICByZXR1cm4gZGVmbGF0ZTsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBib29sIF9pc1VwZ3JhZGVSZXF1ZXN0KEh0dHBSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPSAiR0VUIikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAocmVxdWVzdC5oZWFkZXJzW0h0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXJdID09IG51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgYm9vbCBpc1VwZ3JhZGUgPSBmYWxzZTsKICAgIHJlcXVlc3QuaGVhZGVyc1tIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyXS5mb3JFYWNoKChTdHJpbmcgdmFsdWUpIHsKICAgICAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gInVwZ3JhZGUiKSBpc1VwZ3JhZGUgPSB0cnVlOwogICAgfSk7CiAgICBpZiAoIWlzVXBncmFkZSkgcmV0dXJuIGZhbHNlOwogICAgU3RyaW5nIHVwZ3JhZGUgPSByZXF1ZXN0LmhlYWRlcnMudmFsdWUoSHR0cEhlYWRlcnMudXBncmFkZUhlYWRlcik7CiAgICBpZiAodXBncmFkZSA9PSBudWxsIHx8IHVwZ3JhZGUudG9Mb3dlckNhc2UoKSAhPSAid2Vic29ja2V0IikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBTdHJpbmcgdmVyc2lvbiA9IHJlcXVlc3QuaGVhZGVycy52YWx1ZSgiU2VjLVdlYlNvY2tldC1WZXJzaW9uIik7CiAgICBpZiAodmVyc2lvbiA9PSBudWxsIHx8IHZlcnNpb24gIT0gIjEzIikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBTdHJpbmcga2V5ID0gcmVxdWVzdC5oZWFkZXJzLnZhbHVlKCJTZWMtV2ViU29ja2V0LUtleSIpOwogICAgaWYgKGtleSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KfQoKY2xhc3MgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlIHsKICBib29sIHNlcnZlck5vQ29udGV4dFRha2VvdmVyOwogIGJvb2wgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXI7CiAgaW50IGNsaWVudE1heFdpbmRvd0JpdHM7CiAgaW50IHNlcnZlck1heFdpbmRvd0JpdHM7CiAgYm9vbCBzZXJ2ZXJTaWRlOwoKICBSYXdaTGliRmlsdGVyIGRlY29kZXI7CiAgUmF3WkxpYkZpbHRlciBlbmNvZGVyOwoKICBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUoCiAgICAgIHt0aGlzLmNsaWVudE1heFdpbmRvd0JpdHM6IF9XZWJTb2NrZXRJbXBsLkRFRkFVTFRfV0lORE9XX0JJVFMsCiAgICAgIHRoaXMuc2VydmVyTWF4V2luZG93Qml0czogX1dlYlNvY2tldEltcGwuREVGQVVMVF9XSU5ET1dfQklUUywKICAgICAgdGhpcy5zZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcjogZmFsc2UsCiAgICAgIHRoaXMuY2xpZW50Tm9Db250ZXh0VGFrZW92ZXI6IGZhbHNlLAogICAgICB0aGlzLnNlcnZlclNpZGU6IGZhbHNlfSk7CgogIHZvaWQgX2Vuc3VyZURlY29kZXIoKSB7CiAgICBpZiAoZGVjb2RlciA9PSBudWxsKSB7CiAgICAgIGRlY29kZXIgPSBuZXcgUmF3WkxpYkZpbHRlci5pbmZsYXRlRmlsdGVyKAogICAgICAgICAgd2luZG93Qml0czogc2VydmVyU2lkZSA/IGNsaWVudE1heFdpbmRvd0JpdHMgOiBzZXJ2ZXJNYXhXaW5kb3dCaXRzLAogICAgICAgICAgcmF3OiB0cnVlKTsKICAgIH0KICB9CgogIHZvaWQgX2Vuc3VyZUVuY29kZXIoKSB7CiAgICBpZiAoZW5jb2RlciA9PSBudWxsKSB7CiAgICAgIGVuY29kZXIgPSBuZXcgUmF3WkxpYkZpbHRlci5kZWZsYXRlRmlsdGVyKAogICAgICAgICAgd2luZG93Qml0czogc2VydmVyU2lkZSA/IHNlcnZlck1heFdpbmRvd0JpdHMgOiBjbGllbnRNYXhXaW5kb3dCaXRzLAogICAgICAgICAgcmF3OiB0cnVlKTsKICAgIH0KICB9CgogIFVpbnQ4TGlzdCBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKExpc3Q8aW50PiBtc2cpIHsKICAgIF9lbnN1cmVEZWNvZGVyKCk7CgogICAgdmFyIGRhdGEgPSA8aW50PltdOwogICAgZGF0YS5hZGRBbGwobXNnKTsKICAgIGRhdGEuYWRkQWxsKGNvbnN0IFsweDAwLCAweDAwLCAweGZmLCAweGZmXSk7CgogICAgZGVjb2Rlci5wcm9jZXNzKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsKICAgIHZhciByZXN1bHQgPSA8aW50PltdOwogICAgTGlzdDxpbnQ+IG91dDsKCiAgICB3aGlsZSAoKG91dCA9IGRlY29kZXIucHJvY2Vzc2VkKCkpICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmFkZEFsbChvdXQpOwogICAgfQoKICAgIGlmICgoc2VydmVyU2lkZSAmJiBjbGllbnROb0NvbnRleHRUYWtlb3ZlcikgfHwKICAgICAgICAoIXNlcnZlclNpZGUgJiYgc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpKSB7CiAgICAgIGRlY29kZXIgPSBudWxsOwogICAgfQoKICAgIHJldHVybiBuZXcgVWludDhMaXN0LmZyb21MaXN0KHJlc3VsdCk7CiAgfQoKICBMaXN0PGludD4gcHJvY2Vzc091dGdvaW5nTWVzc2FnZShMaXN0PGludD4gbXNnKSB7CiAgICBfZW5zdXJlRW5jb2RlcigpOwogICAgdmFyIHJlc3VsdCA9IDxpbnQ+W107CiAgICBVaW50OExpc3QgYnVmZmVyOwoKICAgIGlmIChtc2cgaXMhIFVpbnQ4TGlzdCkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChtc2dbaV0gPCAwIHx8IDI1NSA8IG1zZ1tpXSkgewogICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkxpc3QgZWxlbWVudCBpcyBub3QgYSBieXRlIHZhbHVlICIKICAgICAgICAgICAgICAiKHZhbHVlICR7bXNnW2ldfSBhdCBpbmRleCAkaSkiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChtc2cpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyID0gbXNnOwogICAgfQoKICAgIGVuY29kZXIucHJvY2VzcyhidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGgpOwoKICAgIExpc3Q8aW50PiBvdXQ7CiAgICB3aGlsZSAoKG91dCA9IGVuY29kZXIucHJvY2Vzc2VkKCkpICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmFkZEFsbChvdXQpOwogICAgfQoKICAgIGlmICgoIXNlcnZlclNpZGUgJiYgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpIHx8CiAgICAgICAgKHNlcnZlclNpZGUgJiYgc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpKSB7CiAgICAgIGVuY29kZXIgPSBudWxsOwogICAgfQoKICAgIGlmIChyZXN1bHQubGVuZ3RoID4gNCkgewogICAgICByZXN1bHQgPSByZXN1bHQuc3VibGlzdCgwLCByZXN1bHQubGVuZ3RoIC0gNCk7CiAgICB9CgogICAgLy8gUkZDIDc2OTIgNy4yLjMuNi4gIkdlbmVyYXRpbmcgYW4gRW1wdHkgRnJhZ21lbnQiIHNheXMgdGhhdCBpZiB0aGUKICAgIC8vIGNvbXByZXNzaW9uIGxpYnJhcnkgZG9lc24ndCBnZW5lcmF0ZSBhbnkgZGF0YSB3aGVuIHRoZSBidWZlciBpcyBlbXB0eSwKICAgIC8vIHRoZW4gYW4gZW1wdHkgdW5jb21wcmVzc2VkIGRlZmxhdGUgYmxvY2sgaXMgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBUaGUKICAgIC8vIDB4MDAgYmxvY2sgaGFzIHRoZSBCRklOQUwgaGVhZGVyIGJpdCBzZXQgdG8gMCBhbmQgdGhlIEJUWVBFIGhlYWRlciBzZXQgdG8KICAgIC8vIDAwIGFsb25nIHdpdGggNSBiaXRzIG9mIHBhZGRpbmcuIFRoaXMgYmxvY2sgZGVjb2RlcyB0byB6ZXJvIGJ5dGVzLgogICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gWzB4MDBdOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgovLyBUT0RPKGFqb2huc2VuKTogTWFrZSB0aGlzIHRyYW5zZm9ybWVyIHJldXNhYmxlLgpjbGFzcyBfV2ViU29ja2V0T3V0Z29pbmdUcmFuc2Zvcm1lcgogICAgZXh0ZW5kcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8ZHluYW1pYywgTGlzdDxpbnQ+PiBpbXBsZW1lbnRzIEV2ZW50U2luayB7CiAgZmluYWwgX1dlYlNvY2tldEltcGwgd2ViU29ja2V0OwogIEV2ZW50U2luazxMaXN0PGludD4+IF9ldmVudFNpbms7CgogIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBfZGVmbGF0ZUhlbHBlcjsKCiAgX1dlYlNvY2tldE91dGdvaW5nVHJhbnNmb3JtZXIodGhpcy53ZWJTb2NrZXQpIHsKICAgIF9kZWZsYXRlSGVscGVyID0gd2ViU29ja2V0Ll9kZWZsYXRlOwogIH0KCiAgU3RyZWFtPExpc3Q8aW50Pj4gYmluZChTdHJlYW0gc3RyZWFtKSB7CiAgICByZXR1cm4gbmV3IFN0cmVhbTxMaXN0PGludD4+LmV2ZW50VHJhbnNmb3JtZWQoc3RyZWFtLAogICAgICAgIChFdmVudFNpbms8TGlzdDxpbnQ+PiBldmVudFNpbmspIHsKICAgICAgaWYgKF9ldmVudFNpbmsgIT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJXZWJTb2NrZXQgdHJhbnNmb3JtZXIgYWxyZWFkeSB1c2VkIik7CiAgICAgIH0KICAgICAgX2V2ZW50U2luayA9IGV2ZW50U2luazsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgYWRkKG1lc3NhZ2UpIHsKICAgIGlmIChtZXNzYWdlIGlzIF9XZWJTb2NrZXRQb25nKSB7CiAgICAgIGFkZEZyYW1lKF9XZWJTb2NrZXRPcGNvZGUuUE9ORywgbWVzc2FnZS5wYXlsb2FkKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG1lc3NhZ2UgaXMgX1dlYlNvY2tldFBpbmcpIHsKICAgICAgYWRkRnJhbWUoX1dlYlNvY2tldE9wY29kZS5QSU5HLCBtZXNzYWdlLnBheWxvYWQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBMaXN0PGludD4gZGF0YTsKICAgIGludCBvcGNvZGU7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIGlmIChtZXNzYWdlIGlzIFN0cmluZykgewogICAgICAgIG9wY29kZSA9IF9XZWJTb2NrZXRPcGNvZGUuVEVYVDsKICAgICAgICBkYXRhID0gdXRmOC5lbmNvZGUobWVzc2FnZSk7CiAgICAgIH0gZWxzZSBpZiAobWVzc2FnZSBpcyBMaXN0PGludD4pIHsKICAgICAgICBvcGNvZGUgPSBfV2ViU29ja2V0T3Bjb2RlLkJJTkFSWTsKICAgICAgICBkYXRhID0gbWVzc2FnZTsKICAgICAgfSBlbHNlIGlmIChtZXNzYWdlIGlzIF9FbmNvZGVkU3RyaW5nKSB7CiAgICAgICAgb3Bjb2RlID0gX1dlYlNvY2tldE9wY29kZS5URVhUOwogICAgICAgIGRhdGEgPSBtZXNzYWdlLmJ5dGVzOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKG1lc3NhZ2UpOwogICAgICB9CgogICAgICBpZiAoX2RlZmxhdGVIZWxwZXIgIT0gbnVsbCkgewogICAgICAgIGRhdGEgPSBfZGVmbGF0ZUhlbHBlci5wcm9jZXNzT3V0Z29pbmdNZXNzYWdlKGRhdGEpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBvcGNvZGUgPSBfV2ViU29ja2V0T3Bjb2RlLlRFWFQ7CiAgICB9CiAgICBhZGRGcmFtZShvcGNvZGUsIGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfZXZlbnRTaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpbnQgY29kZSA9IHdlYlNvY2tldC5fb3V0Q2xvc2VDb2RlOwogICAgU3RyaW5nIHJlYXNvbiA9IHdlYlNvY2tldC5fb3V0Q2xvc2VSZWFzb247CiAgICBMaXN0PGludD4gZGF0YTsKICAgIGlmIChjb2RlICE9IG51bGwpIHsKICAgICAgZGF0YSA9IG5ldyBMaXN0PGludD4oKTsKICAgICAgZGF0YS5hZGQoKGNvZGUgPj4gOCkgJiAweEZGKTsKICAgICAgZGF0YS5hZGQoY29kZSAmIDB4RkYpOwogICAgICBpZiAocmVhc29uICE9IG51bGwpIHsKICAgICAgICBkYXRhLmFkZEFsbCh1dGY4LmVuY29kZShyZWFzb24pKTsKICAgICAgfQogICAgfQogICAgYWRkRnJhbWUoX1dlYlNvY2tldE9wY29kZS5DTE9TRSwgZGF0YSk7CiAgICBfZXZlbnRTaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZEZyYW1lKGludCBvcGNvZGUsIExpc3Q8aW50PiBkYXRhKSB7CiAgICBjcmVhdGVGcmFtZSgKICAgICAgICAgICAgb3Bjb2RlLAogICAgICAgICAgICBkYXRhLAogICAgICAgICAgICB3ZWJTb2NrZXQuX3NlcnZlclNpZGUsCiAgICAgICAgICAgIF9kZWZsYXRlSGVscGVyICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIChvcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5URVhUIHx8CiAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuQklOQVJZKSkKICAgICAgICAuZm9yRWFjaCgoZSkgewogICAgICBfZXZlbnRTaW5rLmFkZChlKTsKICAgIH0pOwogIH0KCiAgc3RhdGljIEl0ZXJhYmxlPExpc3Q8aW50Pj4gY3JlYXRlRnJhbWUoCiAgICAgIGludCBvcGNvZGUsIExpc3Q8aW50PiBkYXRhLCBib29sIHNlcnZlclNpZGUsIGJvb2wgY29tcHJlc3NlZCkgewogICAgYm9vbCBtYXNrID0gIXNlcnZlclNpZGU7IC8vIE1hc2tpbmcgbm90IGltcGxlbWVudGVkIGZvciBzZXJ2ZXIuCiAgICBpbnQgZGF0YUxlbmd0aCA9IGRhdGEgPT0gbnVsbCA/IDAgOiBkYXRhLmxlbmd0aDsKICAgIC8vIERldGVybWluZSB0aGUgaGVhZGVyIHNpemUuCiAgICBpbnQgaGVhZGVyU2l6ZSA9IChtYXNrKSA/IDYgOiAyOwogICAgaWYgKGRhdGFMZW5ndGggPiA2NTUzNSkgewogICAgICBoZWFkZXJTaXplICs9IDg7CiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPiAxMjUpIHsKICAgICAgaGVhZGVyU2l6ZSArPSAyOwogICAgfQogICAgVWludDhMaXN0IGhlYWRlciA9IG5ldyBVaW50OExpc3QoaGVhZGVyU2l6ZSk7CiAgICBpbnQgaW5kZXggPSAwOwoKICAgIC8vIFNldCBGSU4gYW5kIG9wY29kZS4KICAgIHZhciBob2MgPSBfV2ViU29ja2V0UHJvdG9jb2xUcmFuc2Zvcm1lci5GSU4gfAogICAgICAgIChjb21wcmVzc2VkID8gX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIuUlNWMSA6IDApIHwKICAgICAgICAob3Bjb2RlICYgX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIuT1BDT0RFKTsKCiAgICBoZWFkZXJbaW5kZXgrK10gPSBob2M7CiAgICAvLyBEZXRlcm1pbmUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgbGVuZ3RoIGZpZWxkLgogICAgaW50IGxlbmd0aEJ5dGVzID0gMTsKICAgIGlmIChkYXRhTGVuZ3RoID4gNjU1MzUpIHsKICAgICAgaGVhZGVyW2luZGV4KytdID0gMTI3OwogICAgICBsZW5ndGhCeXRlcyA9IDg7CiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPiAxMjUpIHsKICAgICAgaGVhZGVyW2luZGV4KytdID0gMTI2OwogICAgICBsZW5ndGhCeXRlcyA9IDI7CiAgICB9CiAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIGluIG5ldHdvcmsgYnl0ZSBvcmRlciBpbnRvIHRoZSBoZWFkZXIuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aEJ5dGVzOyBpKyspIHsKICAgICAgaGVhZGVyW2luZGV4KytdID0gZGF0YUxlbmd0aCA+PiAoKChsZW5ndGhCeXRlcyAtIDEpIC0gaSkgKiA4KSAmIDB4RkY7CiAgICB9CiAgICBpZiAobWFzaykgewogICAgICBoZWFkZXJbMV0gfD0gMSA8PCA3OwogICAgICB2YXIgbWFza0J5dGVzID0gX0NyeXB0b1V0aWxzLmdldFJhbmRvbUJ5dGVzKDQpOwogICAgICBoZWFkZXIuc2V0UmFuZ2UoaW5kZXgsIGluZGV4ICsgNCwgbWFza0J5dGVzKTsKICAgICAgaW5kZXggKz0gNDsKICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgewogICAgICAgIFVpbnQ4TGlzdCBsaXN0OwogICAgICAgIC8vIElmIHRoaXMgaXMgYSB0ZXh0IG1lc3NhZ2UganVzdCBkbyB0aGUgbWFza2luZyBpbnNpZGUgdGhlCiAgICAgICAgLy8gZW5jb2RlZCBkYXRhLgogICAgICAgIGlmIChvcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5URVhUICYmIGRhdGEgaXMgVWludDhMaXN0KSB7CiAgICAgICAgICBsaXN0ID0gZGF0YTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGRhdGEgaXMgVWludDhMaXN0KSB7CiAgICAgICAgICAgIGxpc3QgPSBuZXcgVWludDhMaXN0LmZyb21MaXN0KGRhdGEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGlzdCA9IG5ldyBVaW50OExpc3QoZGF0YS5sZW5ndGgpOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBpZiAoZGF0YVtpXSA8IDAgfHwgMjU1IDwgZGF0YVtpXSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkxpc3QgZWxlbWVudCBpcyBub3QgYSBieXRlIHZhbHVlICIKICAgICAgICAgICAgICAgICAgICAiKHZhbHVlICR7ZGF0YVtpXX0gYXQgaW5kZXggJGkpIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxpc3RbaV0gPSBkYXRhW2ldOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IGludCBCTE9DS19TSVpFID0gMTY7CiAgICAgICAgaW50IGJsb2NrQ291bnQgPSBsaXN0Lmxlbmd0aCB+LyBCTE9DS19TSVpFOwogICAgICAgIGlmIChibG9ja0NvdW50ID4gMCkgewogICAgICAgICAgLy8gQ3JlYXRlIG1hc2sgYmxvY2suCiAgICAgICAgICBpbnQgbWFzayA9IDA7CiAgICAgICAgICBmb3IgKGludCBpID0gMzsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgbWFzayA9IChtYXNrIDw8IDgpIHwgbWFza0J5dGVzW2ldOwogICAgICAgICAgfQogICAgICAgICAgSW50MzJ4NCBibG9ja01hc2sgPSBuZXcgSW50MzJ4NChtYXNrLCBtYXNrLCBtYXNrLCBtYXNrKTsKICAgICAgICAgIEludDMyeDRMaXN0IGJsb2NrQnVmZmVyID0KICAgICAgICAgICAgICBuZXcgSW50MzJ4NExpc3QudmlldyhsaXN0LmJ1ZmZlciwgMCwgYmxvY2tDb3VudCk7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrQnVmZmVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGJsb2NrQnVmZmVyW2ldIF49IGJsb2NrTWFzazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gSGFuZGxlIGVuZC4KICAgICAgICBmb3IgKGludCBpID0gYmxvY2tDb3VudCAqIEJMT0NLX1NJWkU7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsaXN0W2ldIF49IG1hc2tCeXRlc1tpICYgM107CiAgICAgICAgfQogICAgICAgIGRhdGEgPSBsaXN0OwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoaW5kZXggPT0gaGVhZGVyU2l6ZSk7CiAgICBpZiAoZGF0YSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBbaGVhZGVyXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBbaGVhZGVyLCBkYXRhXTsKICAgIH0KICB9Cn0KCmNsYXNzIF9XZWJTb2NrZXRDb25zdW1lciBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyIHsKICBmaW5hbCBfV2ViU29ja2V0SW1wbCB3ZWJTb2NrZXQ7CiAgZmluYWwgU29ja2V0IHNvY2tldDsKICBTdHJlYW1Db250cm9sbGVyIF9jb250cm9sbGVyOwogIFN0cmVhbVN1YnNjcmlwdGlvbiBfc3Vic2NyaXB0aW9uOwogIGJvb2wgX2lzc3VlZFBhdXNlID0gZmFsc2U7CiAgYm9vbCBfY2xvc2VkID0gZmFsc2U7CiAgQ29tcGxldGVyIF9jbG9zZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8V2ViU29ja2V0PigpOwogIENvbXBsZXRlciBfY29tcGxldGVyOwoKICBfV2ViU29ja2V0Q29uc3VtZXIodGhpcy53ZWJTb2NrZXQsIHRoaXMuc29ja2V0KTsKCiAgdm9pZCBfb25MaXN0ZW4oKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIF9zdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICB9CiAgfQoKICB2b2lkIF9vblBhdXNlKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICB9IGVsc2UgewogICAgICBfaXNzdWVkUGF1c2UgPSB0cnVlOwogICAgfQogIH0KCiAgdm9pZCBfb25SZXN1bWUoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICBfaXNzdWVkUGF1c2UgPSBmYWxzZTsKICAgIH0KICB9CgogIHZvaWQgX2NhbmNlbCgpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IF9zdWJzY3JpcHRpb247CiAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICB9CiAgfQoKICBfZW5zdXJlQ29udHJvbGxlcigpIHsKICAgIGlmIChfY29udHJvbGxlciAhPSBudWxsKSByZXR1cm47CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyKAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2UsCiAgICAgICAgb25SZXN1bWU6IF9vblJlc3VtZSwKICAgICAgICBvbkNhbmNlbDogX29uTGlzdGVuKTsKICAgIHZhciBzdHJlYW0gPSBfY29udHJvbGxlci5zdHJlYW0KICAgICAgICAudHJhbnNmb3JtKG5ldyBfV2ViU29ja2V0T3V0Z29pbmdUcmFuc2Zvcm1lcih3ZWJTb2NrZXQpKTsKICAgIHNvY2tldC5hZGRTdHJlYW0oc3RyZWFtKS50aGVuKChfKSB7CiAgICAgIF9kb25lKCk7CiAgICAgIF9jbG9zZUNvbXBsZXRlci5jb21wbGV0ZSh3ZWJTb2NrZXQpOwogICAgfSwgb25FcnJvcjogKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgICAgX2Nsb3NlZCA9IHRydWU7CiAgICAgIF9jYW5jZWwoKTsKICAgICAgaWYgKGVycm9yIGlzIEFyZ3VtZW50RXJyb3IpIHsKICAgICAgICBpZiAoIV9kb25lKGVycm9yLCBzdGFja1RyYWNlKSkgewogICAgICAgICAgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfZG9uZSgpOwogICAgICAgIF9jbG9zZUNvbXBsZXRlci5jb21wbGV0ZSh3ZWJTb2NrZXQpOwogICAgICB9CiAgICB9KTsKICB9CgogIGJvb2wgX2RvbmUoW2Vycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBpZiAoX2NvbXBsZXRlciA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZXJyb3IgIT0gbnVsbCkgewogICAgICBfY29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfSBlbHNlIHsKICAgICAgX2NvbXBsZXRlci5jb21wbGV0ZSh3ZWJTb2NrZXQpOwogICAgfQogICAgX2NvbXBsZXRlciA9IG51bGw7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEZ1dHVyZSBhZGRTdHJlYW0odmFyIHN0cmVhbSkgewogICAgaWYgKF9jbG9zZWQpIHsKICAgICAgc3RyZWFtLmxpc3RlbihudWxsKS5jYW5jZWwoKTsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUod2ViU29ja2V0KTsKICAgIH0KICAgIF9lbnN1cmVDb250cm9sbGVyKCk7CiAgICBfY29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogICAgX3N1YnNjcmlwdGlvbiA9IHN0cmVhbS5saXN0ZW4oKGRhdGEpIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkKGRhdGEpOwogICAgfSwgb25Eb25lOiBfZG9uZSwgb25FcnJvcjogX2RvbmUsIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgaWYgKF9pc3N1ZWRQYXVzZSkgewogICAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgIF9pc3N1ZWRQYXVzZSA9IGZhbHNlOwogICAgfQogICAgcmV0dXJuIF9jb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgX2Vuc3VyZUNvbnRyb2xsZXIoKTsKICAgIEZ1dHVyZSBjbG9zZVNvY2tldCgpIHsKICAgICAgcmV0dXJuIHNvY2tldC5jbG9zZSgpLmNhdGNoRXJyb3IoKF8pIHt9KS50aGVuKChfKSA9PiB3ZWJTb2NrZXQpOwogICAgfQoKICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICByZXR1cm4gX2Nsb3NlQ29tcGxldGVyLmZ1dHVyZS50aGVuKChfKSA9PiBjbG9zZVNvY2tldCgpKTsKICB9CgogIHZvaWQgYWRkKGRhdGEpIHsKICAgIGlmIChfY2xvc2VkKSByZXR1cm47CiAgICBfZW5zdXJlQ29udHJvbGxlcigpOwogICAgLy8gU3RvcCBzZW5kaW5nIG1lc3NhZ2UgaWYgX2NvbnRyb2xsZXIgaGFzIGJlZW4gY2xvc2VkLgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzM3NDQxCiAgICBpZiAoX2NvbnRyb2xsZXIuaXNDbG9zZWQpIHJldHVybjsKICAgIF9jb250cm9sbGVyLmFkZChkYXRhKTsKICB9CgogIHZvaWQgY2xvc2VTb2NrZXQoKSB7CiAgICBfY2xvc2VkID0gdHJ1ZTsKICAgIF9jYW5jZWwoKTsKICAgIGNsb3NlKCk7CiAgfQp9CgpjbGFzcyBfV2ViU29ja2V0SW1wbCBleHRlbmRzIFN0cmVhbSB3aXRoIF9TZXJ2aWNlT2JqZWN0IGltcGxlbWVudHMgV2ViU29ja2V0IHsKICAvLyBVc2UgZGVmYXVsdCBNYXAgc28gd2Uga2VlcCBvcmRlci4KICBzdGF0aWMgTWFwPGludCwgX1dlYlNvY2tldEltcGw+IF93ZWJTb2NrZXRzID0gbmV3IE1hcDxpbnQsIF9XZWJTb2NrZXRJbXBsPigpOwogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9XSU5ET1dfQklUUyA9IDE1OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgUEVSX01FU1NBR0VfREVGTEFURSA9ICJwZXJtZXNzYWdlLWRlZmxhdGUiOwoKICBmaW5hbCBTdHJpbmcgcHJvdG9jb2w7CgogIFN0cmVhbUNvbnRyb2xsZXIgX2NvbnRyb2xsZXI7CiAgU3RyZWFtU3Vic2NyaXB0aW9uIF9zdWJzY3JpcHRpb247CiAgU3RyZWFtU2luayBfc2luazsKCiAgZmluYWwgX3NvY2tldDsKICBmaW5hbCBib29sIF9zZXJ2ZXJTaWRlOwogIGludCBfcmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5jb25uZWN0aW5nOwogIGJvb2wgX3dyaXRlQ2xvc2VkID0gZmFsc2U7CiAgaW50IF9jbG9zZUNvZGU7CiAgU3RyaW5nIF9jbG9zZVJlYXNvbjsKICBEdXJhdGlvbiBfcGluZ0ludGVydmFsOwogIFRpbWVyIF9waW5nVGltZXI7CiAgX1dlYlNvY2tldENvbnN1bWVyIF9jb25zdW1lcjsKCiAgaW50IF9vdXRDbG9zZUNvZGU7CiAgU3RyaW5nIF9vdXRDbG9zZVJlYXNvbjsKICBUaW1lciBfY2xvc2VUaW1lcjsKICBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgX2RlZmxhdGU7CgogIHN0YXRpYyBmaW5hbCBIdHRwQ2xpZW50IF9odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKCiAgc3RhdGljIEZ1dHVyZTxXZWJTb2NrZXQ+IGNvbm5lY3QoCiAgICAgIFN0cmluZyB1cmwsIEl0ZXJhYmxlPFN0cmluZz4gcHJvdG9jb2xzLCBNYXA8U3RyaW5nLCBkeW5hbWljPiBoZWFkZXJzLAogICAgICB7Q29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uOiBDb21wcmVzc2lvbk9wdGlvbnMuY29tcHJlc3Npb25EZWZhdWx0fSkgewogICAgVXJpIHVyaSA9IFVyaS5wYXJzZSh1cmwpOwogICAgaWYgKHVyaS5zY2hlbWUgIT0gIndzIiAmJiB1cmkuc2NoZW1lICE9ICJ3c3MiKSB7CiAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlVuc3VwcG9ydGVkIFVSTCBzY2hlbWUgJyR7dXJpLnNjaGVtZX0nIik7CiAgICB9CgogICAgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKICAgIC8vIEdlbmVyYXRlIDE2IHJhbmRvbSBieXRlcy4KICAgIFVpbnQ4TGlzdCBub25jZURhdGEgPSBuZXcgVWludDhMaXN0KDE2KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICBub25jZURhdGFbaV0gPSByYW5kb20ubmV4dEludCgyNTYpOwogICAgfQogICAgU3RyaW5nIG5vbmNlID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQobm9uY2VEYXRhKTsKCiAgICB1cmkgPSBuZXcgVXJpKAogICAgICAgIHNjaGVtZTogdXJpLnNjaGVtZSA9PSAid3NzIiA/ICJodHRwcyIgOiAiaHR0cCIsCiAgICAgICAgdXNlckluZm86IHVyaS51c2VySW5mbywKICAgICAgICBob3N0OiB1cmkuaG9zdCwKICAgICAgICBwb3J0OiB1cmkucG9ydCwKICAgICAgICBwYXRoOiB1cmkucGF0aCwKICAgICAgICBxdWVyeTogdXJpLnF1ZXJ5LAogICAgICAgIGZyYWdtZW50OiB1cmkuZnJhZ21lbnQpOwogICAgcmV0dXJuIF9odHRwQ2xpZW50Lm9wZW5VcmwoIkdFVCIsIHVyaSkudGhlbigocmVxdWVzdCkgewogICAgICBpZiAodXJpLnVzZXJJbmZvICE9IG51bGwgJiYgIXVyaS51c2VySW5mby5pc0VtcHR5KSB7CiAgICAgICAgLy8gSWYgdGhlIFVSTCBjb250YWlucyB1c2VyIGluZm9ybWF0aW9uIHVzZSB0aGF0IGZvciBiYXNpYwogICAgICAgIC8vIGF1dGhvcml6YXRpb24uCiAgICAgICAgU3RyaW5nIGF1dGggPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0Jhc2U2NCh1dGY4LmVuY29kZSh1cmkudXNlckluZm8pKTsKICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEh0dHBIZWFkZXJzLmF1dGhvcml6YXRpb25IZWFkZXIsICJCYXNpYyAkYXV0aCIpOwogICAgICB9CiAgICAgIGlmIChoZWFkZXJzICE9IG51bGwpIHsKICAgICAgICBoZWFkZXJzLmZvckVhY2goKGZpZWxkLCB2YWx1ZSkgPT4gcmVxdWVzdC5oZWFkZXJzLmFkZChmaWVsZCwgdmFsdWUpKTsKICAgICAgfQogICAgICAvLyBTZXR1cCB0aGUgaW5pdGlhbCBoYW5kc2hha2UuCiAgICAgIHJlcXVlc3QuaGVhZGVycwogICAgICAgIC4uc2V0KEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIsICJVcGdyYWRlIikKICAgICAgICAuLnNldChIdHRwSGVhZGVycy51cGdyYWRlSGVhZGVyLCAid2Vic29ja2V0IikKICAgICAgICAuLnNldCgiU2VjLVdlYlNvY2tldC1LZXkiLCBub25jZSkKICAgICAgICAuLnNldCgiQ2FjaGUtQ29udHJvbCIsICJuby1jYWNoZSIpCiAgICAgICAgLi5zZXQoIlNlYy1XZWJTb2NrZXQtVmVyc2lvbiIsICIxMyIpOwogICAgICBpZiAocHJvdG9jb2xzICE9IG51bGwpIHsKICAgICAgICByZXF1ZXN0LmhlYWRlcnMuYWRkKCJTZWMtV2ViU29ja2V0LVByb3RvY29sIiwgcHJvdG9jb2xzLnRvTGlzdCgpKTsKICAgICAgfQoKICAgICAgaWYgKGNvbXByZXNzaW9uLmVuYWJsZWQpIHsKICAgICAgICByZXF1ZXN0LmhlYWRlcnMKICAgICAgICAgICAgLmFkZCgiU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIiwgY29tcHJlc3Npb24uX2NyZWF0ZUhlYWRlcigpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHJlcXVlc3QuY2xvc2UoKTsKICAgIH0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIHZvaWQgZXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgICAvLyBGbHVzaCBkYXRhLgogICAgICAgIHJlc3BvbnNlLmRldGFjaFNvY2tldCgpLnRoZW4oKHNvY2tldCkgewogICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICB9KTsKICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKG1lc3NhZ2UpOwogICAgICB9CgogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPSBIdHRwU3RhdHVzLnN3aXRjaGluZ1Byb3RvY29scyB8fAogICAgICAgICAgcmVzcG9uc2UuaGVhZGVyc1tIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyXSA9PSBudWxsIHx8CiAgICAgICAgICAhcmVzcG9uc2UuaGVhZGVyc1tIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyXQogICAgICAgICAgICAgIC5hbnkoKHZhbHVlKSA9PiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09ICJ1cGdyYWRlIikgfHwKICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMudmFsdWUoSHR0cEhlYWRlcnMudXBncmFkZUhlYWRlcikudG9Mb3dlckNhc2UoKSAhPQogICAgICAgICAgICAgICJ3ZWJzb2NrZXQiKSB7CiAgICAgICAgZXJyb3IoIkNvbm5lY3Rpb24gdG8gJyR1cmknIHdhcyBub3QgdXBncmFkZWQgdG8gd2Vic29ja2V0Iik7CiAgICAgIH0KICAgICAgU3RyaW5nIGFjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnMudmFsdWUoIlNlYy1XZWJTb2NrZXQtQWNjZXB0Iik7CiAgICAgIGlmIChhY2NlcHQgPT0gbnVsbCkgewogICAgICAgIGVycm9yKCJSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gYSAnU2VjLVdlYlNvY2tldC1BY2NlcHQnIGhlYWRlciIpOwogICAgICB9CiAgICAgIF9TSEExIHNoYTEgPSBuZXcgX1NIQTEoKTsKICAgICAgc2hhMS5hZGQoIiRub25jZSRfd2ViU29ja2V0R1VJRCIuY29kZVVuaXRzKTsKICAgICAgTGlzdDxpbnQ+IGV4cGVjdGVkQWNjZXB0ID0gc2hhMS5jbG9zZSgpOwogICAgICBMaXN0PGludD4gcmVjZWl2ZWRBY2NlcHQgPSBfQ3J5cHRvVXRpbHMuYmFzZTY0U3RyaW5nVG9CeXRlcyhhY2NlcHQpOwogICAgICBpZiAoZXhwZWN0ZWRBY2NlcHQubGVuZ3RoICE9IHJlY2VpdmVkQWNjZXB0Lmxlbmd0aCkgewogICAgICAgIGVycm9yKCJSZXNwb25zZSBoZWFkZXIgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyBpcyB0aGUgd3JvbmcgbGVuZ3RoIik7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZEFjY2VwdC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChleHBlY3RlZEFjY2VwdFtpXSAhPSByZWNlaXZlZEFjY2VwdFtpXSkgewogICAgICAgICAgZXJyb3IoIkJhZCByZXNwb25zZSAnU2VjLVdlYlNvY2tldC1BY2NlcHQnIGhlYWRlciIpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgcHJvdG9jb2wgPSByZXNwb25zZS5oZWFkZXJzLnZhbHVlKCdTZWMtV2ViU29ja2V0LVByb3RvY29sJyk7CgogICAgICBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgZGVmbGF0ZSA9CiAgICAgICAgICBuZWdvdGlhdGVDbGllbnRDb21wcmVzc2lvbihyZXNwb25zZSwgY29tcHJlc3Npb24pOwoKICAgICAgcmV0dXJuIHJlc3BvbnNlLmRldGFjaFNvY2tldCgpLnRoZW48V2ViU29ja2V0Pigoc29ja2V0KSA9PgogICAgICAgICAgbmV3IF9XZWJTb2NrZXRJbXBsLl9mcm9tU29ja2V0KAogICAgICAgICAgICAgIHNvY2tldCwgcHJvdG9jb2wsIGNvbXByZXNzaW9uLCBmYWxzZSwgZGVmbGF0ZSkpOwogICAgfSk7CiAgfQoKICBzdGF0aWMgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlIG5lZ290aWF0ZUNsaWVudENvbXByZXNzaW9uKAogICAgICBIdHRwQ2xpZW50UmVzcG9uc2UgcmVzcG9uc2UsIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbikgewogICAgU3RyaW5nIGV4dGVuc2lvbkhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMudmFsdWUoJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycpOwoKICAgIGlmIChleHRlbnNpb25IZWFkZXIgPT0gbnVsbCkgewogICAgICBleHRlbnNpb25IZWFkZXIgPSAiIjsKICAgIH0KCiAgICB2YXIgaHYgPSBIZWFkZXJWYWx1ZS5wYXJzZShleHRlbnNpb25IZWFkZXIsIHZhbHVlU2VwYXJhdG9yOiAnLCcpOwoKICAgIGlmIChjb21wcmVzc2lvbi5lbmFibGVkICYmIGh2LnZhbHVlID09IFBFUl9NRVNTQUdFX0RFRkxBVEUpIHsKICAgICAgdmFyIHNlcnZlck5vQ29udGV4dFRha2VvdmVyID0KICAgICAgICAgIGh2LnBhcmFtZXRlcnMuY29udGFpbnNLZXkoX3NlcnZlck5vQ29udGV4dFRha2VvdmVyKTsKICAgICAgdmFyIGNsaWVudE5vQ29udGV4dFRha2VvdmVyID0KICAgICAgICAgIGh2LnBhcmFtZXRlcnMuY29udGFpbnNLZXkoX2NsaWVudE5vQ29udGV4dFRha2VvdmVyKTsKCiAgICAgIGludCBnZXRXaW5kb3dCaXRzKFN0cmluZyB0eXBlKSB7CiAgICAgICAgdmFyIG8gPSBodi5wYXJhbWV0ZXJzW3R5cGVdOwogICAgICAgIGlmIChvID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBERUZBVUxUX1dJTkRPV19CSVRTOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGludC5wYXJzZShvLCBvbkVycm9yOiAocykgPT4gREVGQVVMVF9XSU5ET1dfQklUUyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlKAogICAgICAgICAgY2xpZW50TWF4V2luZG93Qml0czogZ2V0V2luZG93Qml0cyhfY2xpZW50TWF4V2luZG93Qml0cyksCiAgICAgICAgICBzZXJ2ZXJNYXhXaW5kb3dCaXRzOiBnZXRXaW5kb3dCaXRzKF9zZXJ2ZXJNYXhXaW5kb3dCaXRzKSwKICAgICAgICAgIGNsaWVudE5vQ29udGV4dFRha2VvdmVyOiBjbGllbnROb0NvbnRleHRUYWtlb3ZlciwKICAgICAgICAgIHNlcnZlck5vQ29udGV4dFRha2VvdmVyOiBzZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcik7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBfV2ViU29ja2V0SW1wbC5fZnJvbVNvY2tldCgKICAgICAgdGhpcy5fc29ja2V0LCB0aGlzLnByb3RvY29sLCBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb24sCiAgICAgIFt0aGlzLl9zZXJ2ZXJTaWRlID0gZmFsc2UsIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBkZWZsYXRlXSkgewogICAgX2NvbnN1bWVyID0gbmV3IF9XZWJTb2NrZXRDb25zdW1lcih0aGlzLCBfc29ja2V0KTsKICAgIF9zaW5rID0gbmV3IF9TdHJlYW1TaW5rSW1wbChfY29uc3VtZXIpOwogICAgX3JlYWR5U3RhdGUgPSBXZWJTb2NrZXQub3BlbjsKICAgIF9kZWZsYXRlID0gZGVmbGF0ZTsKCiAgICB2YXIgdHJhbnNmb3JtZXIgPSBuZXcgX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIoX3NlcnZlclNpZGUsIF9kZWZsYXRlKTsKICAgIF9zdWJzY3JpcHRpb24gPSB0cmFuc2Zvcm1lci5iaW5kKF9zb2NrZXQpLmxpc3RlbigoZGF0YSkgewogICAgICBpZiAoZGF0YSBpcyBfV2ViU29ja2V0UGluZykgewogICAgICAgIGlmICghX3dyaXRlQ2xvc2VkKSBfY29uc3VtZXIuYWRkKG5ldyBfV2ViU29ja2V0UG9uZyhkYXRhLnBheWxvYWQpKTsKICAgICAgfSBlbHNlIGlmIChkYXRhIGlzIF9XZWJTb2NrZXRQb25nKSB7CiAgICAgICAgLy8gU2ltcGx5IHNldCBwaW5nSW50ZXJ2YWwsIGFzIGl0J2xsIGNhbmNlbCBhbnkgdGltZXJzLgogICAgICAgIHBpbmdJbnRlcnZhbCA9IF9waW5nSW50ZXJ2YWw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkKGRhdGEpOwogICAgICB9CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgaWYgKF9jbG9zZVRpbWVyICE9IG51bGwpIF9jbG9zZVRpbWVyLmNhbmNlbCgpOwogICAgICBpZiAoZXJyb3IgaXMgRm9ybWF0RXhjZXB0aW9uKSB7CiAgICAgICAgX2Nsb3NlKFdlYlNvY2tldFN0YXR1cy5JTlZBTElEX0ZSQU1FX1BBWUxPQURfREFUQSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2Nsb3NlKFdlYlNvY2tldFN0YXR1cy5QUk9UT0NPTF9FUlJPUik7CiAgICAgIH0KICAgICAgLy8gQW4gZXJyb3IgaGFwcGVuZWQsIHNldCB0aGUgY2xvc2UgY29kZSBzZXQgYWJvdmUuCiAgICAgIF9jbG9zZUNvZGUgPSBfb3V0Q2xvc2VDb2RlOwogICAgICBfY2xvc2VSZWFzb24gPSBfb3V0Q2xvc2VSZWFzb247CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICB9LCBvbkRvbmU6ICgpIHsKICAgICAgaWYgKF9jbG9zZVRpbWVyICE9IG51bGwpIF9jbG9zZVRpbWVyLmNhbmNlbCgpOwogICAgICBpZiAoX3JlYWR5U3RhdGUgPT0gV2ViU29ja2V0Lm9wZW4pIHsKICAgICAgICBfcmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5jbG9zaW5nOwogICAgICAgIGlmICghX2lzUmVzZXJ2ZWRTdGF0dXNDb2RlKHRyYW5zZm9ybWVyLmNsb3NlQ29kZSkpIHsKICAgICAgICAgIF9jbG9zZSh0cmFuc2Zvcm1lci5jbG9zZUNvZGUsIHRyYW5zZm9ybWVyLmNsb3NlUmVhc29uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2Nsb3NlKCk7CiAgICAgICAgfQogICAgICAgIF9yZWFkeVN0YXRlID0gV2ViU29ja2V0LmNsb3NlZDsKICAgICAgfQogICAgICAvLyBQcm90b2NvbCBjbG9zZSwgdXNlIGNsb3NlIGNvZGUgZnJvbSB0cmFuc2Zvcm1lci4KICAgICAgX2Nsb3NlQ29kZSA9IHRyYW5zZm9ybWVyLmNsb3NlQ29kZTsKICAgICAgX2Nsb3NlUmVhc29uID0gdHJhbnNmb3JtZXIuY2xvc2VSZWFzb247CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICB9LCBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIoCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogX3N1YnNjcmlwdGlvbi5yZXN1bWUsCiAgICAgICAgb25DYW5jZWw6ICgpIHsKICAgICAgICAgIF9zdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICAgICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgICB9LAogICAgICAgIG9uUGF1c2U6IF9zdWJzY3JpcHRpb24ucGF1c2UsCiAgICAgICAgb25SZXN1bWU6IF9zdWJzY3JpcHRpb24ucmVzdW1lKTsKCiAgICBfd2ViU29ja2V0c1tfc2VydmljZUlkXSA9IHRoaXM7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb24gbGlzdGVuKHZvaWQgb25EYXRhKG1lc3NhZ2UpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIER1cmF0aW9uIGdldCBwaW5nSW50ZXJ2YWwgPT4gX3BpbmdJbnRlcnZhbDsKCiAgdm9pZCBzZXQgcGluZ0ludGVydmFsKER1cmF0aW9uIGludGVydmFsKSB7CiAgICBpZiAoX3dyaXRlQ2xvc2VkKSByZXR1cm47CiAgICBpZiAoX3BpbmdUaW1lciAhPSBudWxsKSBfcGluZ1RpbWVyLmNhbmNlbCgpOwogICAgX3BpbmdJbnRlcnZhbCA9IGludGVydmFsOwoKICAgIGlmIChfcGluZ0ludGVydmFsID09IG51bGwpIHJldHVybjsKCiAgICBfcGluZ1RpbWVyID0gbmV3IFRpbWVyKF9waW5nSW50ZXJ2YWwsICgpIHsKICAgICAgaWYgKF93cml0ZUNsb3NlZCkgcmV0dXJuOwogICAgICBfY29uc3VtZXIuYWRkKG5ldyBfV2ViU29ja2V0UGluZygpKTsKICAgICAgX3BpbmdUaW1lciA9IG5ldyBUaW1lcihfcGluZ0ludGVydmFsLCAoKSB7CiAgICAgICAgLy8gTm8gcG9uZyByZWNlaXZlZC4KICAgICAgICBfY2xvc2UoV2ViU29ja2V0U3RhdHVzLkdPSU5HX0FXQVkpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgaW50IGdldCByZWFkeVN0YXRlID0+IF9yZWFkeVN0YXRlOwoKICBTdHJpbmcgZ2V0IGV4dGVuc2lvbnMgPT4gbnVsbDsKICBpbnQgZ2V0IGNsb3NlQ29kZSA9PiBfY2xvc2VDb2RlOwogIFN0cmluZyBnZXQgY2xvc2VSZWFzb24gPT4gX2Nsb3NlUmVhc29uOwoKICB2b2lkIGFkZChkYXRhKSB7CiAgICBfc2luay5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIGFkZFV0ZjhUZXh0KExpc3Q8aW50PiBieXRlcykgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoYnl0ZXMsICJieXRlcyIpOwogICAgX3NpbmsuYWRkKG5ldyBfRW5jb2RlZFN0cmluZyhieXRlcykpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9zaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtIHN0cmVhbSkgPT4gX3NpbmsuYWRkU3RyZWFtKHN0cmVhbSk7CiAgRnV0dXJlIGdldCBkb25lID0+IF9zaW5rLmRvbmU7CgogIEZ1dHVyZSBjbG9zZShbaW50IGNvZGUsIFN0cmluZyByZWFzb25dKSB7CiAgICBpZiAoX2lzUmVzZXJ2ZWRTdGF0dXNDb2RlKGNvZGUpKSB7CiAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlJlc2VydmVkIHN0YXR1cyBjb2RlICRjb2RlIik7CiAgICB9CiAgICBpZiAoX291dENsb3NlQ29kZSA9PSBudWxsKSB7CiAgICAgIF9vdXRDbG9zZUNvZGUgPSBjb2RlOwogICAgICBfb3V0Q2xvc2VSZWFzb24gPSByZWFzb247CiAgICB9CiAgICBpZiAoIV9jb250cm9sbGVyLmlzQ2xvc2VkKSB7CiAgICAgIC8vIElmIGEgY2xvc2UgaGFzIG5vdCB5ZXQgYmVlbiByZWNlaXZlZCBmcm9tIHRoZSBvdGhlciBlbmQgdGhlbgogICAgICAvLyAgIDEpIG1ha2Ugc3VyZSB0byBsaXN0ZW4gb24gdGhlIHN0cmVhbSBzbyB0aGUgY2xvc2UgZnJhbWUgd2lsbCBiZQogICAgICAvLyAgICAgIHByb2Nlc3NlZCBpZiByZWNlaXZlZC4KICAgICAgLy8gICAyKSBzZXQgYSB0aW1lciB0ZXJtaW5hdGUgdGhlIGNvbm5lY3Rpb24gaWYgYSBjbG9zZSBmcmFtZSBpcwogICAgICAvLyAgICAgIG5vdCByZWNlaXZlZC4KICAgICAgaWYgKCFfY29udHJvbGxlci5oYXNMaXN0ZW5lciAmJiBfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgICBfY29udHJvbGxlci5zdHJlYW0uZHJhaW4oKS5jYXRjaEVycm9yKChfKSA9PiB7fSk7CiAgICAgIH0KICAgICAgaWYgKF9jbG9zZVRpbWVyID09IG51bGwpIHsKICAgICAgICAvLyBXaGVuIGNsb3NpbmcgdGhlIHdlYi1zb2NrZXQsIHdlIG5vIGxvbmdlciBhY2NlcHQgZGF0YS4KICAgICAgICBfY2xvc2VUaW1lciA9IG5ldyBUaW1lcihjb25zdCBEdXJhdGlvbihzZWNvbmRzOiA1KSwgKCkgewogICAgICAgICAgLy8gUmV1c2UgY29kZSBhbmQgcmVhc29uIGZyb20gdGhlIGxvY2FsIGNsb3NlLgogICAgICAgICAgX2Nsb3NlQ29kZSA9IF9vdXRDbG9zZUNvZGU7CiAgICAgICAgICBfY2xvc2VSZWFzb24gPSBfb3V0Q2xvc2VSZWFzb247CiAgICAgICAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgICAgIF93ZWJTb2NrZXRzLnJlbW92ZShfc2VydmljZUlkKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9zaW5rLmNsb3NlKCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIGdldCB1c2VyQWdlbnQgPT4gX2h0dHBDbGllbnQudXNlckFnZW50OwoKICBzdGF0aWMgc2V0IHVzZXJBZ2VudChTdHJpbmcgdXNlckFnZW50KSB7CiAgICBfaHR0cENsaWVudC51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7CiAgfQoKICB2b2lkIF9jbG9zZShbaW50IGNvZGUsIFN0cmluZyByZWFzb25dKSB7CiAgICBpZiAoX3dyaXRlQ2xvc2VkKSByZXR1cm47CiAgICBpZiAoX291dENsb3NlQ29kZSA9PSBudWxsKSB7CiAgICAgIF9vdXRDbG9zZUNvZGUgPSBjb2RlOwogICAgICBfb3V0Q2xvc2VSZWFzb24gPSByZWFzb247CiAgICB9CiAgICBfd3JpdGVDbG9zZWQgPSB0cnVlOwogICAgX2NvbnN1bWVyLmNsb3NlU29ja2V0KCk7CiAgICBfd2ViU29ja2V0cy5yZW1vdmUoX3NlcnZpY2VJZCk7CiAgfQoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZVBhdGggPT4gJ2lvL3dlYnNvY2tldHMnOwogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZSA9PiAnV2ViU29ja2V0JzsKCiAgTWFwPFN0cmluZywgZHluYW1pYz4gX3RvSlNPTihib29sIHJlZikgewogICAgdmFyIG5hbWUgPSAnJHtfc29ja2V0LmFkZHJlc3MuaG9zdH06JHtfc29ja2V0LnBvcnR9JzsKICAgIHZhciByID0gPFN0cmluZywgZHluYW1pYz57CiAgICAgICdpZCc6IF9zZXJ2aWNlUGF0aCwKICAgICAgJ3R5cGUnOiBfc2VydmljZVR5cGUocmVmKSwKICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAndXNlcl9uYW1lJzogbmFtZSwKICAgIH07CiAgICBpZiAocmVmKSB7CiAgICAgIHJldHVybiByOwogICAgfQogICAgdHJ5IHsKICAgICAgclsnc29ja2V0J10gPSBfc29ja2V0Ll90b0pTT04odHJ1ZSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIHJbJ3NvY2tldCddID0gewogICAgICAgICdpZCc6IF9zZXJ2aWNlUGF0aCwKICAgICAgICAndHlwZSc6ICdAU29ja2V0JywKICAgICAgICAnbmFtZSc6ICdVc2VyU29ja2V0JywKICAgICAgICAndXNlcl9uYW1lJzogJ1VzZXJTb2NrZXQnLAogICAgICB9OwogICAgfQogICAgcmV0dXJuIHI7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNSZXNlcnZlZFN0YXR1c0NvZGUoaW50IGNvZGUpIHsKICAgIHJldHVybiBjb2RlICE9IG51bGwgJiYKICAgICAgICAoY29kZSA8IFdlYlNvY2tldFN0YXR1cy5OT1JNQUxfQ0xPU1VSRSB8fAogICAgICAgICAgICBjb2RlID09IFdlYlNvY2tldFN0YXR1cy5SRVNFUlZFRF8xMDA0IHx8CiAgICAgICAgICAgIGNvZGUgPT0gV2ViU29ja2V0U3RhdHVzLk5PX1NUQVRVU19SRUNFSVZFRCB8fAogICAgICAgICAgICBjb2RlID09IFdlYlNvY2tldFN0YXR1cy5BQk5PUk1BTF9DTE9TVVJFIHx8CiAgICAgICAgICAgIChjb2RlID4gV2ViU29ja2V0U3RhdHVz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cyBfQ3J5cHRvVXRpbHMgewogIHN0YXRpYyBjb25zdCBpbnQgUEFEID0gNjE7IC8vICc9JwogIHN0YXRpYyBjb25zdCBpbnQgQ1IgPSAxMzsgLy8gJ1xyJwogIHN0YXRpYyBjb25zdCBpbnQgTEYgPSAxMDsgLy8gJ1xuJwogIHN0YXRpYyBjb25zdCBpbnQgTElORV9MRU5HVEggPSA3NjsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBfZW5jb2RlVGFibGUgPQogICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2VuY29kZVRhYmxlVXJsU2FmZSA9CiAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fIjsKCiAgLy8gTG9va3VwIHRhYmxlIHVzZWQgZm9yIGZpbmRpbmcgQmFzZSA2NCBhbHBoYWJldCBpbmRleCBvZiBhIGdpdmVuIGJ5dGUuCiAgLy8gLTIgOiBPdXRzaWRlIEJhc2UgNjQgYWxwaGFiZXQuCiAgLy8gLTEgOiAnXHInIG9yICdcbicKICAvLyAgMCA6ID0gKFBhZGRpbmcgY2hhcmFjdGVyKS4KICAvLyA+MCA6IEJhc2UgNjQgYWxwaGFiZXQgaW5kZXggb2YgZ2l2ZW4gYnl0ZS4KICBzdGF0aWMgY29uc3QgTGlzdDxpbnQ+IF9kZWNvZGVUYWJsZSA9IGNvbnN0IFsKICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMSwgLTIsIC0yLCAtMSwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIDYyLCAtMiwgNjIsIC0yLCA2MywgLy8KICAgIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCAtMiwgLTIsIC0yLCAwMCwgLTIsIC0yLCAvLwogICAgLTIsIDAwLCAwMSwgMDIsIDAzLCAwNCwgMDUsIDA2LCAwNywgMDgsIDA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIC8vCiAgICAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIC0yLCAtMiwgLTIsIC0yLCA2MywgLy8KICAgIC0yLCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCAvLwogICAgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yCiAgXTsKCiAgc3RhdGljIFJhbmRvbSBfcm5nID0gbmV3IFJhbmRvbS5zZWN1cmUoKTsKCiAgc3RhdGljIFVpbnQ4TGlzdCBnZXRSYW5kb21CeXRlcyhpbnQgY291bnQpIHsKICAgIGZpbmFsIFVpbnQ4TGlzdCByZXN1bHQgPSBuZXcgVWludDhMaXN0KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICByZXN1bHRbaV0gPSBfcm5nLm5leHRJbnQoMHhmZik7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIFN0cmluZyBieXRlc1RvSGV4KExpc3Q8aW50PiBieXRlcykgewogICAgdmFyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAodmFyIHBhcnQgaW4gYnl0ZXMpIHsKICAgICAgcmVzdWx0LndyaXRlKCcke3BhcnQgPCAxNiA/ICcwJyA6ICcnfSR7cGFydC50b1JhZGl4U3RyaW5nKDE2KX0nKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgYnl0ZXNUb0Jhc2U2NChMaXN0PGludD4gYnl0ZXMsCiAgICAgIFtib29sIHVybFNhZmUgPSBmYWxzZSwgYm9vbCBhZGRMaW5lU2VwYXJhdG9yID0gZmFsc2VdKSB7CiAgICBpbnQgbGVuID0gYnl0ZXMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZpbmFsIFN0cmluZyBsb29rdXAgPSB1cmxTYWZlID8gX2VuY29kZVRhYmxlVXJsU2FmZSA6IF9lbmNvZGVUYWJsZTsKICAgIC8vIFNpemUgb2YgMjQgYml0IGNodW5rcy4KICAgIGZpbmFsIGludCByZW1haW5kZXJMZW5ndGggPSBsZW4ucmVtYWluZGVyKDMpOwogICAgZmluYWwgaW50IGNodW5rTGVuZ3RoID0gbGVuIC0gcmVtYWluZGVyTGVuZ3RoOwogICAgLy8gU2l6ZSBvZiBiYXNlIG91dHB1dC4KICAgIGludCBvdXRwdXRMZW4gPSAoKGxlbiB+LyAzKSAqIDQpICsgKChyZW1haW5kZXJMZW5ndGggPiAwKSA/IDQgOiAwKTsKICAgIC8vIEFkZCBleHRyYSBmb3IgbGluZSBzZXBhcmF0b3JzLgogICAgaWYgKGFkZExpbmVTZXBhcmF0b3IpIHsKICAgICAgb3V0cHV0TGVuICs9ICgob3V0cHV0TGVuIC0gMSkgfi8gTElORV9MRU5HVEgpIDw8IDE7CiAgICB9CiAgICBMaXN0PGludD4gb3V0ID0gbmV3IExpc3Q8aW50PihvdXRwdXRMZW4pOwoKICAgIC8vIEVuY29kZSAyNCBiaXQgY2h1bmtzLgogICAgaW50IGogPSAwLCBpID0gMCwgYyA9IDA7CiAgICB3aGlsZSAoaSA8IGNodW5rTGVuZ3RoKSB7CiAgICAgIGludCB4ID0gKChieXRlc1tpKytdIDw8IDE2KSAmIDB4RkZGRkZGKSB8CiAgICAgICAgICAoKGJ5dGVzW2krK10gPDwgOCkgJiAweEZGRkZGRikgfAogICAgICAgICAgYnl0ZXNbaSsrXTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCh4ID4+IDE4KTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCgoeCA+PiAxMikgJiAweDNGKTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCgoeCA+PiA2KSAmIDB4M0YpOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KHggJiAweDNmKTsKICAgICAgLy8gQWRkIG9wdGlvbmFsIGxpbmUgc2VwYXJhdG9yIGZvciBlYWNoIDc2IGNoYXIgb3V0cHV0LgogICAgICBpZiAoYWRkTGluZVNlcGFyYXRvciAmJiArK2MgPT0gMTkgJiYgaiA8IG91dHB1dExlbiAtIDIpIHsKICAgICAgICBvdXRbaisrXSA9IENSOwogICAgICAgIG91dFtqKytdID0gTEY7CiAgICAgICAgYyA9IDA7CiAgICAgIH0KICAgIH0KCiAgICAvLyBJZiBpbnB1dCBsZW5ndGggaWYgbm90IGEgbXVsdGlwbGUgb2YgMywgZW5jb2RlIHJlbWFpbmluZyBieXRlcyBhbmQKICAgIC8vIGFkZCBwYWRkaW5nLgogICAgaWYgKHJlbWFpbmRlckxlbmd0aCA9PSAxKSB7CiAgICAgIGludCB4ID0gYnl0ZXNbaV07CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoeCA+PiAyKTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCgoeCA8PCA0KSAmIDB4M0YpOwogICAgICBvdXRbaisrXSA9IFBBRDsKICAgICAgb3V0W2orK10gPSBQQUQ7CiAgICB9IGVsc2UgaWYgKHJlbWFpbmRlckxlbmd0aCA9PSAyKSB7CiAgICAgIGludCB4ID0gYnl0ZXNbaV07CiAgICAgIGludCB5ID0gYnl0ZXNbaSArIDFdOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KHggPj4gMik7CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoKCh4IDw8IDQpIHwgKHkgPj4gNCkpICYgMHgzRik7CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoKHkgPDwgMikgJiAweDNGKTsKICAgICAgb3V0W2orK10gPSBQQUQ7CiAgICB9CgogICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhvdXQpOwogIH0KCiAgc3RhdGljIExpc3Q8aW50PiBiYXNlNjRTdHJpbmdUb0J5dGVzKFN0cmluZyBpbnB1dCwKICAgICAgW2Jvb2wgaWdub3JlSW52YWxpZENoYXJhY3RlcnMgPSB0cnVlXSkgewogICAgaW50IGxlbiA9IGlucHV0Lmxlbmd0aDsKICAgIGlmIChsZW4gPT0gMCkgewogICAgICByZXR1cm4gbmV3IExpc3Q8aW50PigwKTsKICAgIH0KCiAgICAvLyBDb3VudCAnXHInLCAnXG4nIGFuZCBpbGxlZ2FsIGNoYXJhY3RlcnMsIEZvciBpbGxlZ2FsIGNoYXJhY3RlcnMsCiAgICAvLyBpZiBbaWdub3JlSW52YWxpZENoYXJhY3RlcnNdIGlzIGZhbHNlLCB0aHJvdyBhbiBleGNlcHRpb24uCiAgICBpbnQgZXh0cmFzTGVuID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgaW50IGMgPSBfZGVjb2RlVGFibGVbaW5wdXQuY29kZVVuaXRBdChpKV07CiAgICAgIGlmIChjIDwgMCkgewogICAgICAgIGV4dHJhc0xlbisrOwogICAgICAgIGlmIChjID09IC0yICYmICFpZ25vcmVJbnZhbGlkQ2hhcmFjdGVycykgewogICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbignSW52YWxpZCBjaGFyYWN0ZXI6ICR7aW5wdXRbaV19Jyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKChsZW4gLSBleHRyYXNMZW4pICUgNCAhPSAwKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oJycnU2l6ZSBvZiBCYXNlIDY0IGNoYXJhY3RlcnMgaW4gSW5wdXQKICAgICAgICAgIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LiBJbnB1dDogJGlucHV0JycnKTsKICAgIH0KCiAgICAvLyBDb3VudCBwYWQgY2hhcmFjdGVycywgaWdub3JlIGlsbGVnYWwgY2hhcmFjdGVycyBhdCB0aGUgZW5kLgogICAgaW50IHBhZExlbmd0aCA9IDA7CiAgICBmb3IgKGludCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgaW50IGN1cnJlbnRDb2RlVW5pdCA9IGlucHV0LmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChfZGVjb2RlVGFibGVbY3VycmVudENvZGVVbml0XSA+IDApIGJyZWFrOwogICAgICBpZiAoY3VycmVudENvZGVVbml0ID09IFBBRCkgcGFkTGVuZ3RoKys7CiAgICB9CiAgICBpbnQgb3V0cHV0TGVuID0gKCgobGVuIC0gZXh0cmFzTGVuKSAqIDYpID4+IDMpIC0gcGFkTGVuZ3RoOwogICAgTGlzdDxpbnQ+IG91dCA9IG5ldyBMaXN0PGludD4ob3V0cHV0TGVuKTsKCiAgICBmb3IgKGludCBpID0gMCwgbyA9IDA7IG8gPCBvdXRwdXRMZW47KSB7CiAgICAgIC8vIEFjY3VtdWxhdGUgNCB2YWxpZCA2IGJpdCBCYXNlIDY0IGNoYXJhY3RlcnMgaW50byBhbiBpbnQuCiAgICAgIGludCB4ID0gMDsKICAgICAgZm9yIChpbnQgaiA9IDQ7IGogPiAwOykgewogICAgICAgIGludCBjID0gX2RlY29kZVRhYmxlW2lucHV0LmNvZGVVbml0QXQoaSsrKV07CiAgICAgICAgaWYgKGMgPj0gMCkgewogICAgICAgICAgeCA9ICgoeCA8PCA2KSAmIDB4RkZGRkZGKSB8IGM7CiAgICAgICAgICBqLS07CiAgICAgICAgfQogICAgICB9CiAgICAgIG91dFtvKytdID0geCA+PiAxNjsKICAgICAgaWYgKG8gPCBvdXRwdXRMZW4pIHsKICAgICAgICBvdXRbbysrXSA9ICh4ID4+IDgpICYgMHhGRjsKICAgICAgICBpZiAobyA8IG91dHB1dExlbikgb3V0W28rK10gPSB4ICYgMHhGRjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG91dDsKICB9Cn0KCi8vIENvbnN0YW50cy4KY29uc3QgX01BU0tfOCA9IDB4ZmY7CmNvbnN0IF9NQVNLXzMyID0gMHhmZmZmZmZmZjsKY29uc3QgX0JJVFNfUEVSX0JZVEUgPSA4Owpjb25zdCBfQllURVNfUEVSX1dPUkQgPSA0OwoKLy8gQmFzZSBjbGFzcyBlbmNhcHN1bGF0aW5nIGNvbW1vbiBiZWhhdmlvciBmb3IgY3J5cHRvZ3JhcGhpYyBoYXNoCi8vIGZ1bmN0aW9ucy4KYWJzdHJhY3QgY2xhc3MgX0hhc2hCYXNlIHsKICAvLyBIYXNoZXIgc3RhdGUuCiAgZmluYWwgaW50IF9jaHVua1NpemVJbldvcmRzOwogIGZpbmFsIGludCBfZGlnZXN0U2l6ZUluV29yZHM7CiAgZmluYWwgYm9vbCBfYmlnRW5kaWFuV29yZHM7CiAgaW50IF9sZW5ndGhJbkJ5dGVzID0gMDsKICBMaXN0PGludD4gX3BlbmRpbmdEYXRhOwogIExpc3Q8aW50PiBfY3VycmVudENodW5rOwogIExpc3Q8aW50PiBfaDsKICBib29sIF9kaWdlc3RDYWxsZWQgPSBmYWxzZTsKCiAgX0hhc2hCYXNlKAogICAgICB0aGlzLl9jaHVua1NpemVJbldvcmRzLCB0aGlzLl9kaWdlc3RTaXplSW5Xb3JkcywgdGhpcy5fYmlnRW5kaWFuV29yZHMpCiAgICAgIDogX3BlbmRpbmdEYXRhID0gW10gewogICAgX2N1cnJlbnRDaHVuayA9IG5ldyBMaXN0KF9jaHVua1NpemVJbldvcmRzKTsKICAgIF9oID0gbmV3IExpc3QoX2RpZ2VzdFNpemVJbldvcmRzKTsKICB9CgogIC8vIFVwZGF0ZSB0aGUgaGFzaGVyIHdpdGggbW9yZSBkYXRhLgogIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgaWYgKF9kaWdlc3RDYWxsZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAnSGFzaCB1cGRhdGUgbWV0aG9kIGNhbGxlZCBhZnRlciBkaWdlc3Qgd2FzIHJldHJpZXZlZCcpOwogICAgfQogICAgX2xlbmd0aEluQnl0ZXMgKz0gZGF0YS5sZW5ndGg7CiAgICBfcGVuZGluZ0RhdGEuYWRkQWxsKGRhdGEpOwogICAgX2l0ZXJhdGUoKTsKICB9CgogIC8vIEZpbmlzaCB0aGUgaGFzaCBjb21wdXRhdGlvbiBhbmQgcmV0dXJuIHRoZSBkaWdlc3Qgc3RyaW5nLgogIExpc3Q8aW50PiBjbG9zZSgpIHsKICAgIGlmIChfZGlnZXN0Q2FsbGVkKSB7CiAgICAgIHJldHVybiBfcmVzdWx0QXNCeXRlcygpOwogICAgfQogICAgX2RpZ2VzdENhbGxlZCA9IHRydWU7CiAgICBfZmluYWxpemVEYXRhKCk7CiAgICBfaXRlcmF0ZSgpOwogICAgYXNzZXJ0KF9wZW5kaW5nRGF0YS5sZW5ndGggPT0gMCk7CiAgICByZXR1cm4gX3Jlc3VsdEFzQnl0ZXMoKTsKICB9CgogIC8vIFJldHVybnMgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGhhc2ggaW4gYnl0ZXMuCiAgaW50IGdldCBibG9ja1NpemUgewogICAgcmV0dXJuIF9jaHVua1NpemVJbldvcmRzICogX0JZVEVTX1BFUl9XT1JEOwogIH0KCiAgLy8gQ3JlYXRlIGEgZnJlc2ggaW5zdGFuY2Ugb2YgdGhpcyBIYXNoLgogIG5ld0luc3RhbmNlKCk7CgogIC8vIE9uZSByb3VuZCBvZiB0aGUgaGFzaCBjb21wdXRhdGlvbi4KICBfdXBkYXRlSGFzaChMaXN0PGludD4gbSk7CgogIC8vIEhlbHBlciBtZXRob2RzLgogIF9hZGQzMih4LCB5KSA9PiAoeCArIHkpICYgX01BU0tfMzI7CiAgX3JvdW5kVXAodmFsLCBuKSA9PiAodmFsICsgbiAtIDEpICYgLW47CgogIC8vIFJvdGF0ZSBsZWZ0IGxpbWl0aW5nIHRvIHVuc2lnbmVkIDMyLWJpdCB2YWx1ZXMuCiAgaW50IF9yb3RsMzIoaW50IHZhbCwgaW50IHNoaWZ0KSB7CiAgICB2YXIgbW9kX3NoaWZ0ID0gc2hpZnQgJiAzMTsKICAgIHJldHVybiAoKHZhbCA8PCBtb2Rfc2hpZnQpICYgX01BU0tfMzIpIHwKICAgICAgICAoKHZhbCAmIF9NQVNLXzMyKSA+PiAoMzIgLSBtb2Rfc2hpZnQpKTsKICB9CgogIC8vIENvbXB1dGUgdGhlIGZpbmFsIHJlc3VsdCBhcyBhIGxpc3Qgb2YgYnl0ZXMgZnJvbSB0aGUgaGFzaCB3b3Jkcy4KICBMaXN0PGludD4gX3Jlc3VsdEFzQnl0ZXMoKSB7CiAgICB2YXIgcmVzdWx0ID0gPGludD5bXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2gubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0LmFkZEFsbChfd29yZFRvQnl0ZXMoX2hbaV0pKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBDb252ZXJ0cyBhIGxpc3Qgb2YgYnl0ZXMgdG8gYSBjaHVuayBvZiAzMi1iaXQgd29yZHMuCiAgX2J5dGVzVG9DaHVuayhMaXN0PGludD4gZGF0YSwgaW50IGRhdGFJbmRleCkgewogICAgYXNzZXJ0KChkYXRhLmxlbmd0aCAtIGRhdGFJbmRleCkgPj0gKF9jaHVua1NpemVJbldvcmRzICogX0JZVEVTX1BFUl9XT1JEKSk7CgogICAgZm9yICh2YXIgd29yZEluZGV4ID0gMDsgd29yZEluZGV4IDwgX2NodW5rU2l6ZUluV29yZHM7IHdvcmRJbmRleCsrKSB7CiAgICAgIHZhciB3MyA9IF9iaWdFbmRpYW5Xb3JkcyA/IGRhdGFbZGF0YUluZGV4XSA6IGRhdGFbZGF0YUluZGV4ICsgM107CiAgICAgIHZhciB3MiA9IF9iaWdFbmRpYW5Xb3JkcyA/IGRhdGFbZGF0YUluZGV4ICsgMV0gOiBkYXRhW2RhdGFJbmRleCArIDJdOwogICAgICB2YXIgdzEgPSBfYmlnRW5kaWFuV29yZHMgPyBkYXRhW2RhdGFJbmRleCArIDJdIDogZGF0YVtkYXRhSW5kZXggKyAxXTsKICAgICAgdmFyIHcwID0gX2JpZ0VuZGlhbldvcmRzID8gZGF0YVtkYXRhSW5kZXggKyAzXSA6IGRhdGFbZGF0YUluZGV4XTsKICAgICAgZGF0YUluZGV4ICs9IDQ7CiAgICAgIHZhciB3b3JkID0gKHczICYgMHhmZikgPDwgMjQ7CiAgICAgIHdvcmQgfD0gKHcyICYgX01BU0tfOCkgPDwgMTY7CiAgICAgIHdvcmQgfD0gKHcxICYgX01BU0tfOCkgPDwgODsKICAgICAgd29yZCB8PSAodzAgJiBfTUFTS184KTsKICAgICAgX2N1cnJlbnRDaHVua1t3b3JkSW5kZXhdID0gd29yZDsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYSAzMi1iaXQgd29yZCB0byBmb3VyIGJ5dGVzLgogIExpc3Q8aW50PiBfd29yZFRvQnl0ZXMoaW50IHdvcmQpIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IG5ldyBMaXN0KF9CWVRFU19QRVJfV09SRCk7CiAgICBieXRlc1swXSA9ICh3b3JkID4+IChfYmlnRW5kaWFuV29yZHMgPyAyNCA6IDApKSAmIF9NQVNLXzg7CiAgICBieXRlc1sxXSA9ICh3b3JkID4+IChfYmlnRW5kaWFuV29yZHMgPyAxNiA6IDgpKSAmIF9NQVNLXzg7CiAgICBieXRlc1syXSA9ICh3b3JkID4+IChfYmlnRW5kaWFuV29yZHMgPyA4IDogMTYpKSAmIF9NQVNLXzg7CiAgICBieXRlc1szXSA9ICh3b3JkID4+IChfYmlnRW5kaWFuV29yZHMgPyAwIDogMjQpKSAmIF9NQVNLXzg7CiAgICByZXR1cm4gYnl0ZXM7CiAgfQoKICAvLyBJdGVyYXRlIHRocm91Z2ggZGF0YSB1cGRhdGluZyB0aGUgaGFzaCBjb21wdXRhdGlvbiBmb3IgZWFjaAogIC8vIGNodW5rLgogIF9pdGVyYXRlKCkgewogICAgdmFyIGxlbiA9IF9wZW5kaW5nRGF0YS5sZW5ndGg7CiAgICB2YXIgY2h1bmtTaXplSW5CeXRlcyA9IF9jaHVua1NpemVJbldvcmRzICogX0JZVEVTX1BFUl9XT1JEOwogICAgaWYgKGxlbiA+PSBjaHVua1NpemVJbkJ5dGVzKSB7CiAgICAgIHZhciBpbmRleCA9IDA7CiAgICAgIGZvciAoOyAobGVuIC0gaW5kZXgpID49IGNodW5rU2l6ZUluQnl0ZXM7IGluZGV4ICs9IGNodW5rU2l6ZUluQnl0ZXMpIHsKICAgICAgICBfYnl0ZXNUb0NodW5rKF9wZW5kaW5nRGF0YSwgaW5kZXgpOwogICAgICAgIF91cGRhdGVIYXNoKF9jdXJyZW50Q2h1bmspOwogICAgICB9CiAgICAgIF9wZW5kaW5nRGF0YSA9IF9wZW5kaW5nRGF0YS5zdWJsaXN0KGluZGV4LCBsZW4pOwogICAgfQogIH0KCiAgLy8gRmluYWxpemUgdGhlIGRhdGEuIEFkZCBhIDEgYml0IHRvIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2UuIEV4cGFuZCB3aXRoCiAgLy8gMCBiaXRzIGFuZCBhZGQgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZS4KICBfZmluYWxpemVEYXRhKCkgewogICAgX3BlbmRpbmdEYXRhLmFkZCgweDgwKTsKICAgIHZhciBjb250ZW50c0xlbmd0aCA9IF9sZW5ndGhJbkJ5dGVzICsgOTsKICAgIHZhciBjaHVua1NpemVJbkJ5dGVzID0gX2NodW5rU2l6ZUluV29yZHMgKiBfQllURVNfUEVSX1dPUkQ7CiAgICB2YXIgZmluYWxpemVkTGVuZ3RoID0gX3JvdW5kVXAoY29udGVudHNMZW5ndGgsIGNodW5rU2l6ZUluQnl0ZXMpOwogICAgdmFyIHplcm9QYWRkaW5nID0gZmluYWxpemVkTGVuZ3RoIC0gY29udGVudHNMZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHplcm9QYWRkaW5nOyBpKyspIHsKICAgICAgX3BlbmRpbmdEYXRhLmFkZCgwKTsKICAgIH0KICAgIHZhciBsZW5ndGhJbkJpdHMgPSBfbGVuZ3RoSW5CeXRlcyAqIF9CSVRTX1BFUl9CWVRFOwogICAgYXNzZXJ0KGxlbmd0aEluQml0cyA8IHBvdygyLCAzMikpOwogICAgaWYgKF9iaWdFbmRpYW5Xb3JkcykgewogICAgICBfcGVuZGluZ0RhdGEuYWRkQWxsKF93b3JkVG9CeXRlcygwKSk7CiAgICAgIF9wZW5kaW5nRGF0YS5hZGRBbGwoX3dvcmRUb0J5dGVzKGxlbmd0aEluQml0cyAmIF9NQVNLXzMyKSk7CiAgICB9IGVsc2UgewogICAgICBfcGVuZGluZ0RhdGEuYWRkQWxsKF93b3JkVG9CeXRlcyhsZW5ndGhJbkJpdHMgJiBfTUFTS18zMikpOwogICAgICBfcGVuZGluZ0RhdGEuYWRkQWxsKF93b3JkVG9CeXRlcygwKSk7CiAgICB9CiAgfQp9CgovLyBUaGUgTUQ1IGhhc2hlciBpcyB1c2VkIHRvIGNvbXB1dGUgYW4gTUQ1IG1lc3NhZ2UgZGlnZXN0LgpjbGFzcyBfTUQ1IGV4dGVuZHMgX0hhc2hCYXNlIHsKICBfTUQ1KCkgOiBzdXBlcigxNiwgNCwgZmFsc2UpIHsKICAgIF9oWzBdID0gMHg2NzQ1MjMwMTsKICAgIF9oWzFdID0gMHhlZmNkYWI4OTsKICAgIF9oWzJdID0gMHg5OGJhZGNmZTsKICAgIF9oWzNdID0gMHgxMDMyNTQ3NjsKICB9CgogIC8vIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBIYXNoLgogIF9NRDUgbmV3SW5zdGFuY2UoKSB7CiAgICByZXR1cm4gbmV3IF9NRDUoKTsKICB9CgogIHN0YXRpYyBjb25zdCBfayA9IGNvbnN0IFsKICAgIDB4ZDc2YWE0NzgsIDB4ZThjN2I3NTYsIDB4MjQyMDcwZGIsIDB4YzFiZGNlZWUsIDB4ZjU3YzBmYWYsIDB4NDc4N2M2MmEsIC8vCiAgICAweGE4MzA0NjEzLCAweGZkNDY5NTAxLCAweDY5ODA5OGQ4LCAweDhiNDRmN2FmLCAweGZmZmY1YmIxLCAweDg5NWNkN2JlLCAvLwogICAgMHg2YjkwMTEyMiwgMHhmZDk4NzE5MywgMHhhNjc5NDM4ZSwgMHg0OWI0MDgyMSwgMHhmNjFlMjU2MiwgMHhjMDQwYjM0MCwgLy8KICAgIDB4MjY1ZTVhNTEsIDB4ZTliNmM3YWEsIDB4ZDYyZjEwNWQsIDB4MDI0NDE0NTMsIDB4ZDhhMWU2ODEsIDB4ZTdkM2ZiYzgsIC8vCiAgICAweDIxZTFjZGU2LCAweGMzMzcwN2Q2LCAweGY0ZDUwZDg3LCAweDQ1NWExNGVkLCAweGE5ZTNlOTA1LCAweGZjZWZhM2Y4LCAvLwogICAgMHg2NzZmMDJkOSwgMHg4ZDJhNGM4YSwgMHhmZmZhMzk0MiwgMHg4NzcxZjY4MSwgMHg2ZDlkNjEyMiwgMHhmZGU1MzgwYywgLy8KICAgIDB4YTRiZWVhNDQsIDB4NGJkZWNmYTksIDB4ZjZiYjRiNjAsIDB4YmViZmJjNzAsIDB4Mjg5YjdlYzYsIDB4ZWFhMTI3ZmEsIC8vCiAgICAweGQ0ZWYzMDg1LCAweDA0ODgxZDA1LCAweGQ5ZDRkMDM5LCAweGU2ZGI5OWU1LCAweDFmYTI3Y2Y4LCAweGM0YWM1NjY1LCAvLwogICAgMHhmNDI5MjI0NCwgMHg0MzJhZmY5NywgMHhhYjk0MjNhNywgMHhmYzkzYTAzOSwgMHg2NTViNTljMywgMHg4ZjBjY2M5MiwgLy8KICAgIDB4ZmZlZmY0N2QsIDB4ODU4NDVkZDEsIDB4NmZhODdlNGYsIDB4ZmUyY2U2ZTAsIDB4YTMwMTQzMTQsIDB4NGUwODExYTEsIC8vCiAgICAweGY3NTM3ZTgyLCAweGJkM2FmMjM1LCAweDJhZDdkMmJiLCAweGViODZkMzkxCiAgXTsKCiAgc3RhdGljIGNvbnN0IF9yID0gY29uc3QgWwogICAgNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNSwgOSwgMTQsIC8vCiAgICAyMCwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDUsIDksIDE0LCAyMCwgNCwgMTEsIDE2LCAyMywgNCwgMTEsIC8vCiAgICAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjEsIDYsIC8vCiAgICAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxCiAgXTsKCiAgLy8gQ29tcHV0ZSBvbmUgaXRlcmF0aW9uIG9mIHRoZSBNRDUgYWxnb3JpdGhtIHdpdGggYSBjaHVuayBvZgogIC8vIDE2IDMyLWJpdCBwaWVjZXMuCiAgdm9pZCBfdXBkYXRlSGFzaChMaXN0PGludD4gbSkgewogICAgYXNzZXJ0KG0ubGVuZ3RoID09IDE2KTsKCiAgICB2YXIgYSA9IF9oWzBdOwogICAgdmFyIGIgPSBfaFsxXTsKICAgIHZhciBjID0gX2hbMl07CiAgICB2YXIgZCA9IF9oWzNdOwoKICAgIHZhciB0MDsKICAgIHZhciB0MTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspIHsKICAgICAgaWYgKGkgPCAxNikgewogICAgICAgIHQwID0gKGIgJiBjKSB8ICgofmIgJiBfTUFTS18zMikgJiBkKTsKICAgICAgICB0MSA9IGk7CiAgICAgIH0gZWxzZSBpZiAoaSA8IDMyKSB7CiAgICAgICAgdDAgPSAoZCAmIGIpIHwgKCh+ZCAmIF9NQVNLXzMyKSAmIGMpOwogICAgICAgIHQxID0gKCg1ICogaSkgKyAxKSAlIDE2OwogICAgICB9IGVsc2UgaWYgKGkgPCA0OCkgewogICAgICAgIHQwID0gYiBeIGMgXiBkOwogICAgICAgIHQxID0gKCgzICogaSkgKyA1KSAlIDE2OwogICAgICB9IGVsc2UgewogICAgICAgIHQwID0gYyBeIChiIHwgKH5kICYgX01BU0tfMzIpKTsKICAgICAgICB0MSA9ICg3ICogaSkgJSAxNjsKICAgICAgfQoKICAgICAgdmFyIHRlbXAgPSBkOwogICAgICBkID0gYzsKICAgICAgYyA9IGI7CiAgICAgIGIgPSBfYWRkMzIoCiAgICAgICAgICBiLCBfcm90bDMyKF9hZGQzMihfYWRkMzIoYSwgdDApLCBfYWRkMzIoX2tbaV0sIG1bdDFdKSksIF9yW2ldKSk7CiAgICAgIGEgPSB0ZW1wOwogICAgfQoKICAgIF9oWzBdID0gX2FkZDMyKGEsIF9oWzBdKTsKICAgIF9oWzFdID0gX2FkZDMyKGIsIF9oWzFdKTsKICAgIF9oWzJdID0gX2FkZDMyKGMsIF9oWzJdKTsKICAgIF9oWzNdID0gX2FkZDMyKGQsIF9oWzNdKTsKICB9Cn0KCi8vIFRoZSBTSEExIGhhc2hlciBpcyB1c2VkIHRvIGNvbXB1dGUgYW4gU0hBMSBtZXNzYWdlIGRpZ2VzdC4KY2xhc3MgX1NIQTEgZXh0ZW5kcyBfSGFzaEJhc2UgewogIC8vIENvbnN0cnVjdCBhIFNIQTEgaGFzaGVyIG9iamVjdC4KICBfU0hBMSgpCiAgICAgIDogX3cgPSBuZXcgTGlzdCg4MCksCiAgICAgICAgc3VwZXIoMTYsIDUsIHRydWUpIHsKICAgIF9oWzBdID0gMHg2NzQ1MjMwMTsKICAgIF9oWzFdID0gMHhFRkNEQUI4OTsKICAgIF9oWzJdID0gMHg5OEJBRENGRTsKICAgIF9oWzNdID0gMHgxMDMyNTQ3NjsKICAgIF9oWzRdID0gMHhDM0QyRTFGMDsKICB9CgogIC8vIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBIYXNoLgogIF9TSEExIG5ld0luc3RhbmNlKCkgewogICAgcmV0dXJuIG5ldyBfU0hBMSgpOwogIH0KCiAgLy8gQ29tcHV0ZSBvbmUgaXRlcmF0aW9uIG9mIHRoZSBTSEExIGFsZ29yaXRobSB3aXRoIGEgY2h1bmsgb2YKICAvLyAxNiAzMi1iaXQgcGllY2VzLgogIHZvaWQgX3VwZGF0ZUhhc2goTGlzdDxpbnQ+IG0pIHsKICAgIGFzc2VydChtLmxlbmd0aCA9PSAxNik7CgogICAgdmFyIGEgPSBfaFswXTsKICAgIHZhciBiID0gX2hbMV07CiAgICB2YXIgYyA9IF9oWzJdOwogICAgdmFyIGQgPSBfaFszXTsKICAgIHZhciBlID0gX2hbNF07CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSsrKSB7CiAgICAg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MQogIC8vCiAgLy8gSFRUUC1kYXRlICAgID0gcmZjMTEyMy1kYXRlIHwgcmZjODUwLWRhdGUgfCBhc2N0aW1lLWRhdGUKICAvLyByZmMxMTIzLWRhdGUgPSB3a2RheSAiLCIgU1AgZGF0ZTEgU1AgdGltZSBTUCAiR01UIgogIC8vIHJmYzg1MC1kYXRlICA9IHdlZWtkYXkgIiwiIFNQIGRhdGUyIFNQIHRpbWUgU1AgIkdNVCIKICAvLyBhc2N0aW1lLWRhdGUgPSB3a2RheSBTUCBkYXRlMyBTUCB0aW1lIFNQIDRESUdJVAogIC8vIGRhdGUxICAgICAgICA9IDJESUdJVCBTUCBtb250aCBTUCA0RElHSVQKICAvLyAgICAgICAgICAgICAgICA7IGRheSBtb250aCB5ZWFyIChlLmcuLCAwMiBKdW4gMTk4MikKICAvLyBkYXRlMiAgICAgICAgPSAyRElHSVQgIi0iIG1vbnRoICItIiAyRElHSVQKICAvLyAgICAgICAgICAgICAgICA7IGRheS1tb250aC15ZWFyIChlLmcuLCAwMi1KdW4tODIpCiAgLy8gZGF0ZTMgICAgICAgID0gbW9udGggU1AgKCAyRElHSVQgfCAoIFNQIDFESUdJVCApKQogIC8vICAgICAgICAgICAgICAgIDsgbW9udGggZGF5IChlLmcuLCBKdW4gIDIpCiAgLy8gdGltZSAgICAgICAgID0gMkRJR0lUICI6IiAyRElHSVQgIjoiIDJESUdJVAogIC8vICAgICAgICAgICAgICAgIDsgMDA6MDA6MDAgLSAyMzo1OTo1OQogIC8vIHdrZGF5ICAgICAgICA9ICJNb24iIHwgIlR1ZSIgfCAiV2VkIgogIC8vICAgICAgICAgICAgICB8ICJUaHUiIHwgIkZyaSIgfCAiU2F0IiB8ICJTdW4iCiAgLy8gd2Vla2RheSAgICAgID0gIk1vbmRheSIgfCAiVHVlc2RheSIgfCAiV2VkbmVzZGF5IgogIC8vICAgICAgICAgICAgICB8ICJUaHVyc2RheSIgfCAiRnJpZGF5IiB8ICJTYXR1cmRheSIgfCAiU3VuZGF5IgogIC8vIG1vbnRoICAgICAgICA9ICJKYW4iIHwgIkZlYiIgfCAiTWFyIiB8ICJBcHIiCiAgLy8gICAgICAgICAgICAgIHwgIk1heSIgfCAiSnVuIiB8ICJKdWwiIHwgIkF1ZyIKICAvLyAgICAgICAgICAgICAgfCAiU2VwIiB8ICJPY3QiIHwgIk5vdiIgfCAiRGVjIgoKICAvKioKICAgKiBGb3JtYXQgYSBkYXRlIGFjY29yZGluZyB0bwogICAqIFtSRkMtMTEyM10oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTEyMyAiUkZDLTExMjMiKSwKICAgKiBlLmcuIGBUaHUsIDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UYC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGZvcm1hdChEYXRlVGltZSBkYXRlKSB7CiAgICBjb25zdCBMaXN0IHdrZGF5ID0gY29uc3QgWyJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iXTsKICAgIGNvbnN0IExpc3QgbW9udGggPSBjb25zdCBbCiAgICAgICJKYW4iLAogICAgICAiRmViIiwKICAgICAgIk1hciIsCiAgICAgICJBcHIiLAogICAgICAiTWF5IiwKICAgICAgIkp1biIsCiAgICAgICJKdWwiLAogICAgICAiQXVnIiwKICAgICAgIlNlcCIsCiAgICAgICJPY3QiLAogICAgICAiTm92IiwKICAgICAgIkRlYyIKICAgIF07CgogICAgRGF0ZVRpbWUgZCA9IGRhdGUudG9VdGMoKTsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKQogICAgICAuLndyaXRlKHdrZGF5W2Qud2Vla2RheSAtIDFdKQogICAgICAuLndyaXRlKCIsICIpCiAgICAgIC4ud3JpdGUoZC5kYXkgPD0gOSA/ICIwIiA6ICIiKQogICAgICAuLndyaXRlKGQuZGF5LnRvU3RyaW5nKCkpCiAgICAgIC4ud3JpdGUoIiAiKQogICAgICAuLndyaXRlKG1vbnRoW2QubW9udGggLSAxXSkKICAgICAgLi53cml0ZSgiICIpCiAgICAgIC4ud3JpdGUoZC55ZWFyLnRvU3RyaW5nKCkpCiAgICAgIC4ud3JpdGUoZC5ob3VyIDw9IDkgPyAiIDAiIDogIiAiKQogICAgICAuLndyaXRlKGQuaG91ci50b1N0cmluZygpKQogICAgICAuLndyaXRlKGQubWludXRlIDw9IDkgPyAiOjAiIDogIjoiKQogICAgICAuLndyaXRlKGQubWludXRlLnRvU3RyaW5nKCkpCiAgICAgIC4ud3JpdGUoZC5zZWNvbmQgPD0gOSA/ICI6MCIgOiAiOiIpCiAgICAgIC4ud3JpdGUoZC5zZWNvbmQudG9TdHJpbmcoKSkKICAgICAgLi53cml0ZSgiIEdNVCIpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICAvKioKICAgKiBQYXJzZSBhIGRhdGUgc3RyaW5nIGluIGVpdGhlciBvZiB0aGUgZm9ybWF0cwogICAqIFtSRkMtMTEyM10oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTEyMyAiUkZDLTExMjMiKSwKICAgKiBbUkZDLTg1MF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODUwICJSRkMtODUwIikgb3IKICAgKiBBTlNJIEMncyBhc2N0aW1lKCkgZm9ybWF0LiBUaGVzZSBmb3JtYXRzIGFyZSBsaXN0ZWQgaGVyZS4KICAgKgogICAqICAgICBUaHUsIDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UCiAgICogICAgIFRodXJzZGF5LCAxLUphbi0xOTcwIDAwOjAwOjAwIEdNVAogICAqICAgICBUaHUgSmFuICAxIDAwOjAwOjAwIDE5NzAKICAgKgogICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBbUkZDLTI2MTYgc2VjdGlvbgogICAqIDMuMS4xXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2I3NlY3Rpb24tMy4zLjEKICAgKiAiUkZDLTI2MTYgc2VjdGlvbiAzLjEuMSIpLgogICAqLwogIHN0YXRpYyBEYXRlVGltZSBwYXJzZShTdHJpbmcgZGF0ZSkgewogICAgZmluYWwgaW50IFNQID0gMzI7CiAgICBjb25zdCBMaXN0IHdrZGF5cyA9IGNvbnN0IFsiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIl07CiAgICBjb25zdCBMaXN0IHdlZWtkYXlzID0gY29uc3QgWwogICAgICAiTW9uZGF5IiwKICAgICAgIlR1ZXNkYXkiLAogICAgICAiV2VkbmVzZGF5IiwKICAgICAgIlRodXJzZGF5IiwKICAgICAgIkZyaWRheSIsCiAgICAgICJTYXR1cmRheSIsCiAgICAgICJTdW5kYXkiCiAgICBdOwogICAgY29uc3QgTGlzdCBtb250aHMgPSBjb25zdCBbCiAgICAgICJKYW4iLAogICAgICAiRmViIiwKICAgICAgIk1hciIsCiAgICAgICJBcHIiLAogICAgICAiTWF5IiwKICAgICAgIkp1biIsCiAgICAgICJKdWwiLAogICAgICAiQXVnIiwKICAgICAgIlNlcCIsCiAgICAgICJPY3QiLAogICAgICAiTm92IiwKICAgICAgIkRlYyIKICAgIF07CiAgICBjb25zdCBMaXN0IHdrZGF5c0xvd2VyQ2FzZSA9IGNvbnN0IFsKICAgICAgIm1vbiIsCiAgICAgICJ0dWUiLAogICAgICAid2VkIiwKICAgICAgInRodSIsCiAgICAgICJmcmkiLAogICAgICAic2F0IiwKICAgICAgInN1biIKICAgIF07CiAgICBjb25zdCBMaXN0IHdlZWtkYXlzTG93ZXJDYXNlID0gY29uc3QgWwogICAgICAibW9uZGF5IiwKICAgICAgInR1ZXNkYXkiLAogICAgICAid2VkbmVzZGF5IiwKICAgICAgInRodXJzZGF5IiwKICAgICAgImZyaWRheSIsCiAgICAgICJzYXR1cmRheSIsCiAgICAgICJzdW5kYXkiCiAgICBdOwogICAgY29uc3QgTGlzdCBtb250aHNMb3dlckNhc2UgPSBjb25zdCBbCiAgICAgICJqYW4iLAogICAgICAiZmViIiwKICAgICAgIm1hciIsCiAgICAgICJhcHIiLAogICAgICAibWF5IiwKICAgICAgImp1biIsCiAgICAgICJqdWwiLAogICAgICAiYXVnIiwKICAgICAgInNlcCIsCiAgICAgICJvY3QiLAogICAgICAibm92IiwKICAgICAgImRlYyIKICAgIF07CgogICAgZmluYWwgaW50IGZvcm1hdFJmYzExMjMgPSAwOwogICAgZmluYWwgaW50IGZvcm1hdFJmYzg1MCA9IDE7CiAgICBmaW5hbCBpbnQgZm9ybWF0QXNjdGltZSA9IDI7CgogICAgaW50IGluZGV4ID0gMDsKICAgIFN0cmluZyB0bXA7CiAgICBpbnQgZm9ybWF0OwoKICAgIHZvaWQgZXhwZWN0KFN0cmluZyBzKSB7CiAgICAgIGlmIChkYXRlLmxlbmd0aCAtIGluZGV4IDwgcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgICAgfQogICAgICBTdHJpbmcgdG1wID0gZGF0ZS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4ICsgcy5sZW5ndGgpOwogICAgICBpZiAodG1wICE9IHMpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgICAgfQogICAgICBpbmRleCArPSBzLmxlbmd0aDsKICAgIH0KCiAgICBpbnQgZXhwZWN0V2Vla2RheSgpIHsKICAgICAgaW50IHdlZWtkYXk7CiAgICAgIC8vIFRoZSBmb3JtYXR0aW5nIG9mIHRoZSB3ZWVrZGF5IHNpZ25hbHMgdGhlIGZvcm1hdCBvZiB0aGUgZGF0ZSBzdHJpbmcuCiAgICAgIGludCBwb3MgPSBkYXRlLmluZGV4T2YoIiwiLCBpbmRleCk7CiAgICAgIGlmIChwb3MgPT0gLTEpIHsKICAgICAgICBpbnQgcG9zID0gZGF0ZS5pbmRleE9mKCIgIiwgaW5kZXgpOwogICAgICAgIGlmIChwb3MgPT0gLTEpIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgICAgIHRtcCA9IGRhdGUuc3Vic3RyaW5nKGluZGV4LCBwb3MpOwogICAgICAgIGluZGV4ID0gcG9zICsgMTsKICAgICAgICB3ZWVrZGF5ID0gd2tkYXlzLmluZGV4T2YodG1wKTsKICAgICAgICBpZiAod2Vla2RheSAhPSAtMSkgewogICAgICAgICAgZm9ybWF0ID0gZm9ybWF0QXNjdGltZTsKICAgICAgICAgIHJldHVybiB3ZWVrZGF5OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0bXAgPSBkYXRlLnN1YnN0cmluZyhpbmRleCwgcG9zKTsKICAgICAgICBpbmRleCA9IHBvcyArIDE7CiAgICAgICAgd2Vla2RheSA9IHdrZGF5cy5pbmRleE9mKHRtcCk7CiAgICAgICAgaWYgKHdlZWtkYXkgIT0gLTEpIHsKICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdFJmYzExMjM7CiAgICAgICAgICByZXR1cm4gd2Vla2RheTsKICAgICAgICB9CiAgICAgICAgd2Vla2RheSA9IHdlZWtkYXlzLmluZGV4T2YodG1wKTsKICAgICAgICBpZiAod2Vla2RheSAhPSAtMSkgewogICAgICAgICAgZm9ybWF0ID0gZm9ybWF0UmZjODUwOwogICAgICAgICAgcmV0dXJuIHdlZWtkYXk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgfQoKICAgIGludCBleHBlY3RNb250aChTdHJpbmcgc2VwYXJhdG9yKSB7CiAgICAgIGludCBwb3MgPSBkYXRlLmluZGV4T2Yoc2VwYXJhdG9yLCBpbmRleCk7CiAgICAgIGlmIChwb3MgLSBpbmRleCAhPSAzKSB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgICAgdG1wID0gZGF0ZS5zdWJzdHJpbmcoaW5kZXgsIHBvcyk7CiAgICAgIGluZGV4ID0gcG9zICsgMTsKICAgICAgaW50IG1vbnRoID0gbW9udGhzLmluZGV4T2YodG1wKTsKICAgICAgaWYgKG1vbnRoICE9IC0xKSByZXR1cm4gbW9udGg7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgfQoKICAgIGludCBleHBlY3ROdW0oU3RyaW5nIHNlcGFyYXRvcikgewogICAgICBpbnQgcG9zOwogICAgICBpZiAoc2VwYXJhdG9yLmxlbmd0aCA+IDApIHsKICAgICAgICBwb3MgPSBkYXRlLmluZGV4T2Yoc2VwYXJhdG9yLCBpbmRleCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcG9zID0gZGF0ZS5sZW5ndGg7CiAgICAgIH0KICAgICAgU3RyaW5nIHRtcCA9IGRhdGUuc3Vic3RyaW5nKGluZGV4LCBwb3MpOwogICAgICBpbmRleCA9IHBvcyArIHNlcGFyYXRvci5sZW5ndGg7CiAgICAgIHRyeSB7CiAgICAgICAgaW50IHZhbHVlID0gaW50LnBhcnNlKHRtcCk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBleHBlY3RFbmQoKSB7CiAgICAgIGlmIChpbmRleCAhPSBkYXRlLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgICB9CiAgICB9CgogICAgaW50IHdlZWtkYXkgPSBleHBlY3RXZWVrZGF5KCk7CiAgICBpbnQgZGF5OwogICAgaW50IG1vbnRoOwogICAgaW50IHllYXI7CiAgICBpbnQgaG91cnM7CiAgICBpbnQgbWludXRlczsKICAgIGludCBzZWNvbmRzOwogICAgaWYgKGZvcm1hdCA9PSBmb3JtYXRBc2N0aW1lKSB7CiAgICAgIG1vbnRoID0gZXhwZWN0TW9udGgoIiAiKTsKICAgICAgaWYgKGRhdGUuY29kZVVuaXRBdChpbmRleCkgPT0gU1ApIGluZGV4Kys7CiAgICAgIGRheSA9IGV4cGVjdE51bSgiICIpOwogICAgICBob3VycyA9IGV4cGVjdE51bSgiOiIpOwogICAgICBtaW51dGVzID0gZXhwZWN0TnVtKCI6Iik7CiAgICAgIHNlY29uZHMgPSBleHBlY3ROdW0oIiAiKTsKICAgICAgeWVhciA9IGV4cGVjdE51bSgiIik7CiAgICB9IGVsc2UgewogICAgICBleHBlY3QoIiAiKTsKICAgICAgZGF5ID0gZXhwZWN0TnVtKGZvcm1hdCA9PSBmb3JtYXRSZmMxMTIzID8gIiAiIDogIi0iKTsKICAgICAgbW9udGggPSBleHBlY3RNb250aChmb3JtYXQgPT0gZm9ybWF0UmZjMTEyMyA/ICIgIiA6ICItIik7CiAgICAgIHllYXIgPSBleHBlY3ROdW0oIiAiKTsKICAgICAgaG91cnMgPSBleHBlY3ROdW0oIjoiKTsKICAgICAgbWludXRlcyA9IGV4cGVjdE51bSgiOiIpOwogICAgICBzZWNvbmRzID0gZXhwZWN0TnVtKCIgIik7CiAgICAgIGV4cGVjdCgiR01UIik7CiAgICB9CiAgICBleHBlY3RFbmQoKTsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUudXRjKHllYXIsIG1vbnRoICsgMSwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcywgMCk7CiAgfQoKICAvLyBQYXJzZSBhIGNvb2tpZSBkYXRlIHN0cmluZy4KICBzdGF0aWMgRGF0ZVRpbWUgX3BhcnNlQ29va2llRGF0ZShTdHJpbmcgZGF0ZSkgewogICAgY29uc3QgTGlzdCBtb250aHNMb3dlckNhc2UgPSBjb25zdCBbCiAgICAgICJqYW4iLAogICAgICAiZmViIiwKICAgICAgIm1hciIsCiAgICAgICJhcHIiLAogICAgICAibWF5IiwKICAgICAgImp1biIsCiAgICAgICJqdWwiLAogICAgICAiYXVnIiwKICAgICAgInNlcCIsCiAgICAgICJvY3QiLAogICAgICAibm92IiwKICAgICAgImRlYyIKICAgIF07CgogICAgaW50IHBvc2l0aW9uID0gMDsKCiAgICB2b2lkIGVycm9yKCkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBjb29raWUgZGF0ZSAkZGF0ZSIpOwogICAgfQoKICAgIGJvb2wgaXNFbmQoKSA9PiBwb3NpdGlvbiA9PSBkYXRlLmxlbmd0aDsKCiAgICBib29sIGlzRGVsaW1pdGVyKFN0cmluZyBzKSB7CiAgICAgIGludCBjaGFyID0gcy5jb2RlVW5pdEF0KDApOwogICAgICBpZiAoY2hhciA9PSAweDA5KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNoYXIgPj0gMHgyMCAmJiBjaGFyIDw9IDB4MkYpIHJldHVybiB0cnVlOwogICAgICBpZiAoY2hhciA+PSAweDNCICYmIGNoYXIgPD0gMHg0MCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChjaGFyID49IDB4NUIgJiYgY2hhciA8PSAweDYwKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNoYXIgPj0gMHg3QiAmJiBjaGFyIDw9IDB4N0UpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCBpc05vbkRlbGltaXRlcihTdHJpbmcgcykgewogICAgICBpbnQgY2hhciA9IHMuY29kZVVuaXRBdCgwKTsKICAgICAgaWYgKGNoYXIgPj0gMHgwMCAmJiBjaGFyIDw9IDB4MDgpIHJldHVybiB0cnVlOwogICAgICBpZiAoY2hhciA+PSAweDBBICYmIGNoYXIgPD0gMHgxRikgcmV0dXJuIHRydWU7CiAgICAgIGlmIChjaGFyID49IDB4MzAgJiYgY2hhciA8PSAweDM5KSByZXR1cm4gdHJ1ZTsgLy8gRGlnaXQKICAgICAgaWYgKGNoYXIgPT0gMHgzQSkgcmV0dXJuIHRydWU7IC8vICc6JwogICAgICBpZiAoY2hhciA+PSAweDQxICYmIGNoYXIgPD0gMHg1QSkgcmV0dXJuIHRydWU7IC8vIEFscGhhCiAgICAgIGlmIChjaGFyID49IDB4NjEgJiYgY2hhciA8PSAweDdBKSByZXR1cm4gdHJ1ZTsgLy8gQWxwaGEKICAgICAgaWYgKGNoYXIgPj0gMHg3RiAmJiBjaGFyIDw9IDB4RkYpIHJldHVybiB0cnVlOyAvLyBBbHBoYQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCBpc0RpZ2l0KFN0cmluZyBzKSB7CiAgICAgIGludCBjaGFyID0gcy5jb2RlVW5pdEF0KDApOwogICAgICBpZiAoY2hhciA+IDB4MkYgJiYgY2hhciA8IDB4M0EpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaW50IGdldE1vbnRoKFN0cmluZyBtb250aCkgewogICAgICBpZiAobW9udGgubGVuZ3RoIDwgMykgcmV0dXJuIC0xOwogICAgICByZXR1cm4gbW9udGhzTG93ZXJDYXNlLmluZGV4T2YobW9udGguc3Vic3RyaW5nKDAsIDMpKTsKICAgIH0KCiAgICBpbnQgdG9JbnQoU3RyaW5nIHMpIHsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgZm9yICg7IGluZGV4IDwgcy5sZW5ndGggJiYgaXNEaWdpdChzW2luZGV4XSk7IGluZGV4KyspOwogICAgICByZXR1cm4gaW50LnBhcnNlKHMuc3Vic3RyaW5nKDAsIGluZGV4KSk7CiAgICB9CgogICAgdmFyIHRva2VucyA9IFtdOwogICAgd2hpbGUgKCFpc0VuZCgpKSB7CiAgICAgIHdoaWxlICghaXNFbmQoKSAmJiBpc0RlbGltaXRlcihkYXRlW3Bvc2l0aW9uXSkpIHBvc2l0aW9uKys7CiAgICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgICB3aGlsZSAoIWlzRW5kKCkgJiYgaXNOb25EZWxpbWl0ZXIoZGF0ZVtwb3NpdGlvbl0pKSBwb3NpdGlvbisrOwogICAgICB0b2tlbnMuYWRkKGRhdGUuc3Vic3RyaW5nKHN0YXJ0LCBwb3NpdGlvbikudG9Mb3dlckNhc2UoKSk7CiAgICAgIHdoaWxlICghaXNFbmQoKSAmJiBpc0RlbGltaXRlcihkYXRlW3Bvc2l0aW9uXSkpIHBvc2l0aW9uKys7CiAgICB9CgogICAgU3RyaW5nIHRpbWVTdHI7CiAgICBTdHJpbmcgZGF5T2ZNb250aFN0cjsKICAgIFN0cmluZyBtb250aFN0cjsKICAgIFN0cmluZyB5ZWFyU3RyOwoKICAgIGZvciAodmFyIHRva2VuIGluIHRva2VucykgewogICAgICBpZiAodG9rZW4ubGVuZ3RoIDwgMSkgY29udGludWU7CiAgICAgIGlmICh0aW1lU3RyID09IG51bGwgJiYKICAgICAgICAgIHRva2VuLmxlbmd0aCA+PSA1ICYmCiAgICAgICAgICBpc0RpZ2l0KHRva2VuWzBdKSAmJgogICAgICAgICAgKHRva2VuWzFdID09ICI6IiB8fCAoaXNEaWdpdCh0b2tlblsxXSkgJiYgdG9rZW5bMl0gPT0gIjoiKSkpIHsKICAgICAgICB0aW1lU3RyID0gdG9rZW47CiAgICAgIH0gZWxzZSBpZiAoZGF5T2ZNb250aFN0ciA9PSBudWxsICYmIGlzRGlnaXQodG9rZW5bMF0pKSB7CiAgICAgICAgZGF5T2ZNb250aFN0ciA9IHRva2VuOwogICAgICB9IGVsc2UgaWYgKG1vbnRoU3RyID09IG51bGwgJiYgZ2V0TW9udGgodG9rZW4pID49IDApIHsKICAgICAgICBtb250aFN0ciA9IHRva2VuOwogICAgICB9IGVsc2UgaWYgKHllYXJTdHIgPT0gbnVsbCAmJgogICAgICAgICAgdG9rZW4ubGVuZ3RoID49IDIgJiYKICAgICAgICAgIGlzRGlnaXQodG9rZW5bMF0pICYmCiAgICAgICAgICBpc0RpZ2l0KHRva2VuWzFdKSkgewogICAgICAgIHllYXJTdHIgPSB0b2tlbjsKICAgICAgfQogICAgfQoKICAgIGlmICh0aW1lU3RyID09IG51bGwgfHwKICAgICAgICBkYXlPZk1vbnRoU3RyID09IG51bGwgfHwKICAgICAgICBtb250aFN0ciA9PSBudWxsIHx8CiAgICAgICAgeWVhclN0ciA9PSBudWxsKSB7CiAgICAgIGVycm9yKCk7CiAgICB9CgogICAgaW50IHllYXIgPSB0b0ludCh5ZWFyU3RyKTsKICAgIGlmICh5ZWFyID49IDcwICYmIHllYXIgPD0gOTkpCiAgICAgIHllYXIgKz0gMTkwMDsKICAgIGVsc2UgaWYgKHllYXIgPj0gMCAmJiB5ZWFyIDw9IDY5KSB5ZWFyICs9IDIwMDA7CiAgICBpZiAoeWVhciA8IDE2MDEpIGVycm9yKCk7CgogICAgaW50IGRheU9mTW9udGggPSB0b0ludChkYXlPZk1vbnRoU3RyKTsKICAgIGlmIChkYXlPZk1vbnRoIDwgMSB8fCBkYXlPZk1vbnRoID4gMzEpIGVycm9yKCk7CgogICAgaW50IG1vbnRoID0gZ2V0TW9udGgobW9udGhTdHIpICsgMTsKCiAgICB2YXIgdGltZUxpc3QgPSB0aW1lU3RyLnNwbGl0KCI6Iik7CiAgICBpZiAodGltZUxpc3QubGVuZ3RoICE9IDMpIGVycm9yKCk7CiAgICBpbnQgaG91ciA9IHRvSW50KHRpbWVMaXN0WzBdKTsKICAgIGludCBtaW51dGUgPSB0b0ludCh0aW1lTGlzdFsxXSk7CiAgICBpbnQgc2Vjb25kID0gdG9JbnQodGltZUxpc3RbMl0pOwogICAgaWYgKGhvdXIgPiAyMykgZXJyb3IoKTsKICAgIGlmIChtaW51dGUgPiA1OSkgZXJyb3IoKTsKICAgIGlmIChzZWNvbmQgPiA1OSkgZXJyb3IoKTsKCiAgICByZXR1cm4gbmV3IERhdGVUaW1lLnV0Yyh5ZWFyLCBtb250aCwgZGF5T2ZNb250aCwgaG91ciwgbWludXRlLCBzZWNvbmQsIDApOwogIH0KfQqBhgBOTjwBFAEERAwEES42BT44OjUuOTA3Ny8xKioyN0IyMjIBBiBAKgYoUB8NDQ0NDQ0NDQ0NDQwHAR8pJBQlIBMiEyEoISojKiMXGgQBBjJAPz8FJisiBTA9IAYnF1EiEBETEhASDwcgDQ0NDQ0NDQ0NDQ0MBykNDQ0NDQ0MBysQERMSEBIPBykNDQ0NDQ0NDQ0NDQwHASEgIQETEBABHCw8CDwWPAgZBgEaE04qFyxLKhknHSIaCg8qGScdIhoKKR0hGgoIOgYBKDBQKBcnJToGASYPIi4PGwgvJgwkFic8CAYBFyI8CAYBIw0PDg8RESMgMRweICAcDRM8QB0eICAVBhFPBAEhMikNDQ0NDQ0NDQ0NDQwHARYBEzwGAS0BISIlNTU1NRQGASQiNTU+LD4+PhQGAR0iMxQGASEnPQYBGhU+LwYBFRdCHEVBQgYBFBoVFAEgJh0fH0kZPx89GiQfHx8ZCAYBGyEcGw8GAR8iFDQeASs0ASgBJycjJSUcHh4BTwQCARlkYXJ0Ol9odHRwL2h0dHBfZGF0ZS5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9faHR0cC9odHRwX2hlYWRlcnMuZGFydMAAblcvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKY2xhc3MgX0h0dHBIZWFkZXJzIGltcGxlbWVudHMgSHR0cEhlYWRlcnMgewogIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gX2hlYWRlcnM7CiAgZmluYWwgU3RyaW5nIHByb3RvY29sVmVyc2lvbjsKCiAgYm9vbCBfbXV0YWJsZSA9IHRydWU7IC8vIEFyZSB0aGUgaGVhZGVycyBjdXJyZW50bHkgbXV0YWJsZT8KICBMaXN0PFN0cmluZz4gX25vRm9sZGluZ0hlYWRlcnM7CgogIGludCBfY29udGVudExlbmd0aCA9IC0xOwogIGJvb2wgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gdHJ1ZTsKICBib29sIF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IGZhbHNlOwogIFN0cmluZyBfaG9zdDsKICBpbnQgX3BvcnQ7CgogIGZpbmFsIGludCBfZGVmYXVsdFBvcnRGb3JTY2hlbWU7CgogIF9IdHRwSGVhZGVycyh0aGlzLnByb3RvY29sVmVyc2lvbiwKICAgICAge2ludCBkZWZhdWx0UG9ydEZvclNjaGVtZTogSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQsCiAgICAgIF9IdHRwSGVhZGVycyBpbml0aWFsSGVhZGVyc30pCiAgICAgIDogX2hlYWRlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4oKSwKICAgICAgICBfZGVmYXVsdFBvcnRGb3JTY2hlbWUgPSBkZWZhdWx0UG9ydEZvclNjaGVtZSB7CiAgICBpZiAoaW5pdGlhbEhlYWRlcnMgIT0gbnVsbCkgewogICAgICBpbml0aWFsSGVhZGVycy5faGVhZGVycy5mb3JFYWNoKChuYW1lLCB2YWx1ZSkgPT4gX2hlYWRlcnNbbmFtZV0gPSB2YWx1ZSk7CiAgICAgIF9jb250ZW50TGVuZ3RoID0gaW5pdGlhbEhlYWRlcnMuX2NvbnRlbnRMZW5ndGg7CiAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGluaXRpYWxIZWFkZXJzLl9wZXJzaXN0ZW50Q29ubmVjdGlvbjsKICAgICAgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gaW5pdGlhbEhlYWRlcnMuX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nOwogICAgICBfaG9zdCA9IGluaXRpYWxIZWFkZXJzLl9ob3N0OwogICAgICBfcG9ydCA9IGluaXRpYWxIZWFkZXJzLl9wb3J0OwogICAgfQogICAgaWYgKHByb3RvY29sVmVyc2lvbiA9PSAiMS4wIikgewogICAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSBmYWxzZTsKICAgICAgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgICB9CiAgfQoKICBMaXN0PFN0cmluZz4gb3BlcmF0b3IgW10oU3RyaW5nIG5hbWUpID0+IF9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV07CgogIFN0cmluZyB2YWx1ZShTdHJpbmcgbmFtZSkgewogICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tuYW1lXTsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDEpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIk1vcmUgdGhhbiBvbmUgdmFsdWUgZm9yIGhlYWRlciAkbmFtZSIpOwogICAgfQogICAgcmV0dXJuIHZhbHVlc1swXTsKICB9CgogIHZvaWQgYWRkKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgX2FkZEFsbChfdmFsaWRhdGVGaWVsZChuYW1lKSwgdmFsdWUpOwogIH0KCiAgdm9pZCBfYWRkQWxsKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgYXNzZXJ0KG5hbWUgPT0gX3ZhbGlkYXRlRmllbGQobmFtZSkpOwogICAgaWYgKHZhbHVlIGlzIEl0ZXJhYmxlKSB7CiAgICAgIGZvciAodmFyIHYgaW4gdmFsdWUpIHsKICAgICAgICBfYWRkKG5hbWUsIF92YWxpZGF0ZVZhbHVlKHYpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX2FkZChuYW1lLCBfdmFsaWRhdGVWYWx1ZSh2YWx1ZSkpOwogICAgfQogIH0KCiAgdm9pZCBzZXQoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgbmFtZSA9IF92YWxpZGF0ZUZpZWxkKG5hbWUpOwogICAgX2hlYWRlcnMucmVtb3ZlKG5hbWUpOwogICAgaWYgKG5hbWUgPT0gSHR0cEhlYWRlcnMudHJhbnNmZXJFbmNvZGluZ0hlYWRlcikgewogICAgICBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICAgIH0KICAgIF9hZGRBbGwobmFtZSwgdmFsdWUpOwogIH0KCiAgdm9pZCByZW1vdmUoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgbmFtZSA9IF92YWxpZGF0ZUZpZWxkKG5hbWUpOwogICAgdmFsdWUgPSBfdmFsaWRhdGVWYWx1ZSh2YWx1ZSk7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbbmFtZV07CiAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgaW50IGluZGV4ID0gdmFsdWVzLmluZGV4T2YodmFsdWUpOwogICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICB2YWx1ZXMucmVtb3ZlUmFuZ2UoaW5kZXgsIGluZGV4ICsgMSk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT0gMCkgX2hlYWRlcnMucmVtb3ZlKG5hbWUpOwogICAgfQogICAgaWYgKG5hbWUgPT0gSHR0cEhlYWRlcnMudHJhbnNmZXJFbmNvZGluZ0hlYWRlciAmJiB2YWx1ZSA9PSAiY2h1bmtlZCIpIHsKICAgICAgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZUFsbChTdHJpbmcgbmFtZSkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgbmFtZSA9IF92YWxpZGF0ZUZpZWxkKG5hbWUpOwogICAgX2hlYWRlcnMucmVtb3ZlKG5hbWUpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihTdHJpbmcgbmFtZSwgTGlzdDxTdHJpbmc+IHZhbHVlcykpIHsKICAgIF9oZWFkZXJzLmZvckVhY2goZik7CiAgfQoKICB2b2lkIG5vRm9sZGluZyhTdHJpbmcgbmFtZSkgewogICAgaWYgKF9ub0ZvbGRpbmdIZWFkZXJzID09IG51bGwpIF9ub0ZvbGRpbmdIZWFkZXJzID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgX25vRm9sZGluZ0hlYWRlcnMuYWRkKG5hbWUpOwogIH0KCiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb24gPT4gX3BlcnNpc3RlbnRDb25uZWN0aW9uOwoKICB2b2lkIHNldCBwZXJzaXN0ZW50Q29ubmVjdGlvbihib29sIHBlcnNpc3RlbnRDb25uZWN0aW9uKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBpZiAocGVyc2lzdGVudENvbm5lY3Rpb24gPT0gX3BlcnNpc3RlbnRDb25uZWN0aW9uKSByZXR1cm47CiAgICBpZiAocGVyc2lzdGVudENvbm5lY3Rpb24pIHsKICAgICAgaWYgKHByb3RvY29sVmVyc2lvbiA9PSAiMS4xIikgewogICAgICAgIHJlbW92ZShIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyLCAiY2xvc2UiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoX2NvbnRlbnRMZW5ndGggPT0gLTEpIHsKICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgICAgICJUcnlpbmcgdG8gc2V0ICdDb25uZWN0aW9uOiBLZWVwLUFsaXZlJyBvbiBIVFRQIDEuMCBoZWFkZXJzIHdpdGggIgogICAgICAgICAgICAgICJubyBDb250ZW50TGVuZ3RoIik7CiAgICAgICAgfQogICAgICAgIGFkZChIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyLCAia2VlcC1hbGl2ZSIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAocHJvdG9jb2xWZXJzaW9uID09ICIxLjEiKSB7CiAgICAgICAgYWRkKEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIsICJjbG9zZSIpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlbW92ZShIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyLCAia2VlcC1hbGl2ZSIpOwogICAgICB9CiAgICB9CiAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKICB9CgogIGludCBnZXQgY29udGVudExlbmd0aCA9PiBfY29udGVudExlbmd0aDsKCiAgdm9pZCBzZXQgY29udGVudExlbmd0aChpbnQgY29udGVudExlbmd0aCkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgaWYgKHByb3RvY29sVmVyc2lvbiA9PSAiMS4wIiAmJgogICAgICAgIHBlcnNpc3RlbnRDb25uZWN0aW9uICYmCiAgICAgICAgY29udGVudExlbmd0aCA9PSAtMSkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICJUcnlpbmcgdG8gY2xlYXIgQ29udGVudExlbmd0aCBvbiBIVFRQIDEuMCBoZWFkZXJzIHdpdGggIgogICAgICAgICAgIidDb25uZWN0aW9uOiBLZWVwLUFsaXZlJyBzZXQiKTsKICAgIH0KICAgIGlmIChfY29udGVudExlbmd0aCA9PSBjb250ZW50TGVuZ3RoKSByZXR1cm47CiAgICBfY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGg7CiAgICBpZiAoX2NvbnRlbnRMZW5ndGggPj0gMCkgewogICAgICBpZiAoY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcpIGNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgICAgIF9zZXQoSHR0cEhlYWRlcnMuY29udGVudExlbmd0aEhlYWRlciwgY29udGVudExlbmd0aC50b1N0cmluZygpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlbW92ZUFsbChIdHRwSGVhZGVycy5jb250ZW50TGVuZ3RoSGVhZGVyKTsKICAgICAgaWYgKHByb3RvY29sVmVyc2lvbiA9PSAiMS4xIikgewogICAgICAgIGNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBnZXQgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPT4gX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nOwoKICB2b2lkIHNldCBjaHVua2VkVHJhbnNmZXJFbmNvZGluZyhib29sIGNodW5rZWRUcmFuc2ZlckVuY29kaW5nKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBpZiAoY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgJiYgcHJvdG9jb2xWZXJzaW9uID09ICIxLjAiKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgIlRyeWluZyB0byBzZXQgJ1RyYW5zZmVyLUVuY29kaW5nOiBDaHVua2VkJyBvbiBIVFRQIDEuMCBoZWFkZXJzIik7CiAgICB9CiAgICBpZiAoY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPT0gX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nKSByZXR1cm47CiAgICBpZiAoY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcpIHsKICAgICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW0h0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXJdOwogICAgICBpZiAoKHZhbHVlcyA9PSBudWxsIHx8IHZhbHVlcy5sYXN0ICE9ICJjaHVua2VkIikpIHsKICAgICAgICAvLyBIZWFkZXJzIGRvZXMgbm90IHNwZWNpZnkgY2h1bmtlZCBlbmNvZGluZyAtIGFkZCBpdCBpZiBzZXQuCiAgICAgICAgX2FkZFZhbHVlKEh0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXIsICJjaHVua2VkIik7CiAgICAgIH0KICAgICAgY29udGVudExlbmd0aCA9IC0xOwogICAgfSBlbHNlIHsKICAgICAgLy8gSGVhZGVycyBkb2VzIHNwZWNpZnkgY2h1bmtlZCBlbmNvZGluZyAtIHJlbW92ZSBpdCBpZiBub3Qgc2V0LgogICAgICByZW1vdmUoSHR0cEhlYWRlcnMudHJhbnNmZXJFbmNvZGluZ0hlYWRlciwgImNodW5rZWQiKTsKICAgIH0KICAgIF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IGNodW5rZWRUcmFuc2ZlckVuY29kaW5nOwogIH0KCiAgU3RyaW5nIGdldCBob3N0ID0+IF9ob3N0OwoKICB2b2lkIHNldCBob3N0KFN0cmluZyBob3N0KSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBfaG9zdCA9IGhvc3Q7CiAgICBfdXBkYXRlSG9zdEhlYWRlcigpOwogIH0KCiAgaW50IGdldCBwb3J0ID0+IF9wb3J0OwoKICB2b2lkIHNldCBwb3J0KGludCBwb3J0KSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBfcG9ydCA9IHBvcnQ7CiAgICBfdXBkYXRlSG9zdEhlYWRlcigpOwogIH0KCiAgRGF0ZVRpbWUgZ2V0IGlmTW9kaWZpZWRTaW5jZSB7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbSHR0cEhlYWRlcnMuaWZNb2RpZmllZFNpbmNlSGVhZGVyXTsKICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBIdHRwRGF0ZS5wYXJzZSh2YWx1ZXNbMF0pOwogICAgICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgc2V0IGlmTW9kaWZpZWRTaW5jZShEYXRlVGltZSBpZk1vZGlmaWVkU2luY2UpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIC8vIEZvcm1hdCAiaWZNb2RpZmllZFNpbmNlIiBoZWFkZXIgd2l0aCBkYXRlIGluIEdyZWVud2ljaCBNZWFuIFRpbWUgKEdNVCkuCiAgICBTdHJpbmcgZm9ybWF0dGVkID0gSHR0cERhdGUuZm9ybWF0KGlmTW9kaWZpZWRTaW5jZS50b1V0YygpKTsKICAgIF9zZXQoSHR0cEhlYWRlcnMuaWZNb2RpZmllZFNpbmNlSGVhZGVyLCBmb3JtYXR0ZWQpOwogIH0KCiAgRGF0ZVRpbWUgZ2V0IGRhdGUgewogICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW0h0dHBIZWFkZXJzLmRhdGVIZWFkZXJdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEh0dHBEYXRlLnBhcnNlKHZhbHVlc1swXSk7CiAgICAgIH0gb24gRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBzZXQgZGF0ZShEYXRlVGltZSBkYXRlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICAvLyBGb3JtYXQgIkRhdGVUaW1lIiBoZWFkZXIgd2l0aCBkYXRlIGluIEdyZWVud2ljaCBNZWFuIFRpbWUgKEdNVCkuCiAgICBTdHJpbmcgZm9ybWF0dGVkID0gSHR0cERhdGUuZm9ybWF0KGRhdGUudG9VdGMoKSk7CiAgICBfc2V0KCJkYXRlIiwgZm9ybWF0dGVkKTsKICB9CgogIERhdGVUaW1lIGdldCBleHBpcmVzIHsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tIdHRwSGVhZGVycy5leHBpcmVzSGVhZGVyXTsKICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBIdHRwRGF0ZS5wYXJzZSh2YWx1ZXNbMF0pOwogICAgICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgc2V0IGV4cGlyZXMoRGF0ZVRpbWUgZXhwaXJlcykgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgLy8gRm9ybWF0ICJFeHBpcmVzIiBoZWFkZXIgd2l0aCBkYXRlIGluIEdyZWVud2ljaCBNZWFuIFRpbWUgKEdNVCkuCiAgICBTdHJpbmcgZm9ybWF0dGVkID0gSHR0cERhdGUuZm9ybWF0KGV4cGlyZXMudG9VdGMoKSk7CiAgICBfc2V0KEh0dHBIZWFkZXJzLmV4cGlyZXNIZWFkZXIsIGZvcm1hdHRlZCk7CiAgfQoKICBDb250ZW50VHlwZSBnZXQgY29udGVudFR5cGUgewogICAgdmFyIHZhbHVlcyA9IF9oZWFkZXJzWyJjb250ZW50LXR5cGUiXTsKICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICByZXR1cm4gQ29udGVudFR5cGUucGFyc2UodmFsdWVzWzBdKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgdm9pZCBzZXQgY29udGVudFR5cGUoQ29udGVudFR5cGUgY29udGVudFR5cGUpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIF9zZXQoSHR0cEhlYWRlcnMuY29udGVudFR5cGVIZWFkZXIsIGNvbnRlbnRUeXBlLnRvU3RyaW5nKCkpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIF9oZWFkZXJzLmNsZWFyKCk7CiAgICBfY29udGVudExlbmd0aCA9IC0xOwogICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gdHJ1ZTsKICAgIF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IGZhbHNlOwogICAgX2hvc3QgPSBudWxsOwogICAgX3BvcnQgPSBudWxsOwogIH0KCiAgLy8gW25hbWVdIG11c3QgYmUgYSBsb3dlci1jYXNlIHZlcnNpb24gb2YgdGhlIG5hbWUuCiAgdm9pZCBfYWRkKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgYXNzZXJ0KG5hbWUgPT0gX3ZhbGlkYXRlRmllbGQobmFtZSkpOwogICAgLy8gVXNlIHRoZSBsZW5ndGggYXMgaW5kZXggb24gd2hhdCBtZXRob2QgdG8gY2FsbC4gVGhpcyBpcyBub3RhYmxlCiAgICAvLyBmYXN0ZXIgdGhhbiBjb21wdXRpbmcgaGFzaCBhbmQgbG9va2luZyB1cCBpbiBhIGhhc2gtbWFwLgogICAgc3dpdGNoIChuYW1lLmxlbmd0aCkgewogICAgICBjYXNlIDQ6CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLmRhdGVIZWFkZXIgPT0gbmFtZSkgewogICAgICAgICAgX2FkZERhdGUobmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoSHR0cEhlYWRlcnMuaG9zdEhlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkSG9zdChuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDc6CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLmV4cGlyZXNIZWFkZXIgPT0gbmFtZSkgewogICAgICAgICAgX2FkZEV4cGlyZXMobmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMDoKICAgICAgICBpZiAoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkQ29ubmVjdGlvbihuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDEyOgogICAgICAgIGlmIChIdHRwSGVhZGVycy5jb250ZW50VHlwZUhlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkQ29udGVudFR5cGUobmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAxNDoKICAgICAgICBpZiAoSHR0cEhlYWRlcnMuY29udGVudExlbmd0aEhlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkQ29udGVudExlbmd0aChuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE3OgogICAgICAgIGlmIChIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRUcmFuc2ZlckVuY29kaW5nKG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLmlmTW9kaWZpZWRTaW5jZUhlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkSWZNb2RpZmllZFNpbmNlKG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBfYWRkVmFsdWUobmFtZSwgdmFsdWUpOwogIH0KCiAgdm9pZCBfYWRkQ29udGVudExlbmd0aChTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBpbnQpIHsKICAgICAgY29udGVudExlbmd0aCA9IHZhbHVlOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgY29udGVudExlbmd0aCA9IGludC5wYXJzZSh2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiVW5leHBlY3RlZCB0eXBlIGZvciBoZWFkZXIgbmFtZWQgJG5hbWUiKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZFRyYW5zZmVyRW5jb2RpbmcoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gImNodW5rZWQiKSB7CiAgICAgIGNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIF9hZGRWYWx1ZShIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyLCB2YWx1ZSk7CiAgICB9CiAgfQoKICB2b2lkIF9hZGREYXRlKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIERhdGVUaW1lKSB7CiAgICAgIGRhdGUgPSB2YWx1ZTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgU3RyaW5nKSB7CiAgICAgIF9zZXQoSHR0cEhlYWRlcnMuZGF0ZUhlYWRlciwgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgdHlwZSBmb3IgaGVhZGVyIG5hbWVkICRuYW1lIik7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRFeHBpcmVzKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIERhdGVUaW1lKSB7CiAgICAgIGV4cGlyZXMgPSB2YWx1ZTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgU3RyaW5nKSB7CiAgICAgIF9zZXQoSHR0cEhlYWRlcnMuZXhwaXJlc0hlYWRlciwgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgdHlwZSBmb3IgaGVhZGVyIG5hbWVkICRuYW1lIik7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRJZk1vZGlmaWVkU2luY2UoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgRGF0ZVRpbWUpIHsKICAgICAgaWZNb2RpZmllZFNpbmNlID0gdmFsdWU7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFN0cmluZykgewogICAgICBfc2V0KEh0dHBIZWFkZXJzLmlmTW9kaWZpZWRTaW5jZUhlYWRlciwgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgdHlwZSBmb3IgaGVhZGVyIG5hbWVkICRuYW1lIik7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRIb3N0KFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIFN0cmluZykgewogICAgICBpbnQgcG9zID0gdmFsdWUuaW5kZXhPZigiOiIpOwogICAgICBpZiAocG9zID09IC0xKSB7CiAgICAgICAgX2hvc3QgPSB2YWx1ZTsKICAgICAgICBfcG9ydCA9IEh0dHBDbGllbnQuZGVmYXVsdEh0dHBQb3J0OwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChwb3MgPiAwKSB7CiAgICAgICAgICBfaG9zdCA9IHZhbHVlLnN1YnN0cmluZygwLCBwb3MpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfaG9zdCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChwb3MgKyAxID09IHZhbHVlLmxlbmd0aCkgewogICAgICAgICAgX3BvcnQgPSBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwUG9ydDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgX3BvcnQgPSBpbnQucGFyc2UodmFsdWUuc3Vic3RyaW5nKHBvcyArIDEpKTsKICAgICAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgICAgIF9wb3J0ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgX3NldChIdHRwSGVhZGVycy5ob3N0SGVhZGVyLCB2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiVW5leHBlY3RlZCB0eXBlIGZvciBoZWFkZXIgbmFtZWQgJG5hbWUiKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZENvbm5lY3Rpb24oU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICB2YXIgbG93ZXJDYXNlVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgaWYgKGxvd2VyQ2FzZVZhbHVlID09ICdjbG9zZScpIHsKICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gZmFsc2U7CiAgICB9IGVsc2UgaWYgKGxvd2VyQ2FzZVZhbHVlID09ICdrZWVwLWFsaXZlJykgewogICAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSB0cnVlOwogICAgfQogICAgX2FkZFZhbHVlKG5hbWUsIHZhbHVlKTsKICB9CgogIHZvaWQgX2FkZENvbnRlbnRUeXBlKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgX3NldChIdHRwSGVhZGVycy5jb250ZW50VHlwZUhlYWRlciwgdmFsdWUpOwogIH0KCiAgdm9pZCBfYWRkVmFsdWUoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSkgewogICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW25hbWVdOwogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIHZhbHVlcyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICAgICAgX2hlYWRlcnNbbmFtZV0gPSB2YWx1ZXM7CiAgICB9CiAgICBpZiAodmFsdWUgaXMgRGF0ZVRpbWUpIHsKICAgICAgdmFsdWVzLmFkZChIdHRwRGF0ZS5mb3JtYXQodmFsdWUpKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgU3RyaW5nKSB7CiAgICAgIHZhbHVlcy5hZGQodmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgdmFsdWVzLmFkZChfdmFsaWRhdGVWYWx1ZSh2YWx1ZS50b1N0cmluZygpKSk7CiAgICB9CiAgfQoKICB2b2lkIF9zZXQoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewogICAgYXNzZXJ0KG5hbWUgPT0gX3ZhbGlkYXRlRmllbGQobmFtZSkpOwogICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICAgIF9oZWFkZXJzW25hbWVdID0gdmFsdWVzOwogICAgdmFsdWVzLmFkZCh2YWx1ZSk7CiAgfQoKICBfY2hlY2tNdXRhYmxlKCkgewogICAgaWYgKCFfbXV0YWJsZSkgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkhUVFAgaGVhZGVycyBhcmUgbm90IG11dGFibGUiKTsKICB9CgogIF91cGRhdGVIb3N0SGVhZGVyKCkgewogICAgYm9vbCBkZWZhdWx0UG9ydCA9IF9wb3J0ID09IG51bGwgfHwgX3BvcnQgPT0gX2RlZmF1bHRQb3J0Rm9yU2NoZW1lOwogICAgX3NldCgiaG9zdCIsIGRlZmF1bHRQb3J0ID8gaG9zdCA6ICIkaG9zdDokX3BvcnQiKTsKICB9CgogIF9mb2xkSGVhZGVyKFN0cmluZyBuYW1lKSB7CiAgICBpZiAobmFtZSA9PSBIdHRwSGVhZGVycy5zZXRDb29raWVIZWFkZXIgfHwKICAgICAgICAoX25vRm9sZGluZ0hlYWRlcnMgIT0gbnVsbCAmJiBfbm9Gb2xkaW5nSGVhZGVycy5pbmRleE9mKG5hbWUpICE9IC0xKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgX2ZpbmFsaXplKCkgewogICAgX211dGFibGUgPSBmYWxzZTsKICB9CgogIHZvaWQgX2J1aWxkKEJ5dGVzQnVpbGRlciBidWlsZGVyKSB7CiAgICBmb3IgKFN0cmluZyBuYW1lIGluIF9oZWFkZXJzLmtleXMpIHsKICAgICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW25hbWVdOwogICAgICBib29sIGZvbGQgPSBfZm9sZEhlYWRlcihuYW1lKTsKICAgICAgdmFyIG5hbWVEYXRhID0gbmFtZS5jb2RlVW5pdHM7CiAgICAgIGJ1aWxkZXIuYWRkKG5hbWVEYXRhKTsKICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5DT0xPTik7CiAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuU1ApOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgaWYgKGZvbGQpIHsKICAgICAgICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5DT01NQSk7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuU1ApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5DUik7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuTEYpOwogICAgICAgICAgICBidWlsZGVyLmFkZChuYW1lRGF0YSk7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ09MT04pOwogICAgICAgICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLlNQKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnVpbGRlci5hZGQodmFsdWVzW2ldLmNvZGVVbml0cyk7CiAgICAgIH0KICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5DUik7CiAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuTEYpOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgX2hlYWRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiB2YWx1ZXMpIHsKICAgICAgc2IuLndyaXRlKG5hbWUpLi53cml0ZSgiOiAiKTsKICAgICAgYm9vbCBmb2xkID0gX2ZvbGRIZWFkZXIobmFtZSk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICBpZiAoZm9sZCkgewogICAgICAgICAgICBzYi53cml0ZSgiLCAiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNiLi53cml0ZSgiXG4iKS4ud3JpdGUobmFtZSkuLndyaXRlKCI6ICIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzYi53cml0ZSh2YWx1ZXNbaV0pOwogICAgICB9CiAgICAgIHNiLndyaXRlKCJcbiIpOwogICAgfSk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIExpc3Q8Q29va2llPiBfcGFyc2VDb29raWVzKCkgewogICAgLy8gUGFyc2UgYSBDb29raWUgaGVhZGVyIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcnVsZXMgaW4gUkZDIDYyNjUuCiAgICB2YXIgY29va2llcyA9IG5ldyBMaXN0PENvb2tpZT4oKTsKICAgIHZvaWQgcGFyc2VDb29raWVTdHJpbmcoU3RyaW5nIHMpIHsKICAgICAgaW50IGluZGV4ID0gMDsKCiAgICAgIGJvb2wgZG9uZSgpID0+IGluZGV4ID09IC0xIHx8IGluZGV4ID09IHMubGVuZ3RoOwoKICAgICAgdm9pZCBza2lwV1MoKSB7CiAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICAgIGlmIChzW2luZGV4XSAhPSAiICIgJiYgc1tpbmRleF0gIT0gIlx0IikgcmV0dXJuOwogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIFN0cmluZyBwYXJzZU5hbWUoKSB7CiAgICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICAgIGlmIChzW2luZGV4XSA9PSAiICIgfHwgc1tpbmRleF0gPT0gIlx0IiB8fCBzW2luZGV4XSA9PSAiPSIpIGJyZWFrOwogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCk7CiAgICAgIH0KCiAgICAgIFN0cmluZyBwYXJzZVZhbHVlKCkgewogICAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIiAiIHx8IHNbaW5kZXhdID09ICJcdCIgfHwgc1tpbmRleF0gPT0gIjsiKSBicmVhazsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpOwogICAgICB9CgogICAgICBib29sIGV4cGVjdChTdHJpbmcgZXhwZWN0ZWQpIHsKICAgICAgICBpZiAoZG9uZSgpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHNbaW5kZXhdICE9IGV4cGVjdGVkKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaW5kZXgrKzsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoZG9uZSgpKSByZXR1cm47CiAgICAgICAgU3RyaW5nIG5hbWUgPSBwYXJzZU5hbWUoKTsKICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoIWV4cGVjdCgiPSIpKSB7CiAgICAgICAgICBpbmRleCA9IHMuaW5kZXhPZignOycsIGluZGV4KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBza2lwV1MoKTsKICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZVZhbHVlKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvb2tpZXMuYWRkKG5ldyBfQ29va2llKG5hbWUsIHZhbHVlKSk7CiAgICAgICAgfSBjYXRjaCAoXykgewogICAgICAgICAgLy8gU2tpcCBpdCwgaW52YWxpZCBjb29raWUgZGF0YS4KICAgICAgICB9CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKGRvbmUoKSkgcmV0dXJuOwogICAgICAgIGlmICghZXhwZWN0KCI7IikpIHsKICAgICAgICAgIGluZGV4ID0gcy5pbmRleE9mKCc7JywgaW5kZXgpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW0h0dHBIZWFkZXJzLmNvb2tpZUhlYWRlcl07CiAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgdmFsdWVzLmZvckVhY2goKGhlYWRlclZhbHVlKSA9PiBwYXJzZUNvb2tpZVN0cmluZyhoZWFkZXJWYWx1ZSkpOwogICAgfQogICAgcmV0dXJuIGNvb2tpZXM7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF92YWxpZGF0ZUZpZWxkKFN0cmluZyBmaWVsZCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIV9IdHRwUGFyc2VyLl9pc1Rva2VuQ2hhcihmaWVsZC5jb2RlVW5pdEF0KGkpKSkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIG5hbWU6ICR7anNvbi5lbmNvZGUoZmllbGQpfSIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmllbGQudG9Mb3dlckNhc2UoKTsKICB9CgogIHN0YXRpYyBfdmFsaWRhdGVWYWx1ZSh2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzISBTdHJpbmcpIHJldHVybiB2YWx1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFfSHR0cFBhcnNlci5faXNWYWx1ZUNoYXIodmFsdWUuY29kZVVuaXRBdChpKSkpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAiSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCB2YWx1ZTogJHtqc29uLmVuY29kZSh2YWx1ZSl9Iik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9Cn0KCmNsYXNzIF9IZWFkZXJWYWx1ZSBpbXBsZW1lbnRzIEhlYWRlclZhbHVlIHsKICBTdHJpbmcgX3ZhbHVlOwogIE1hcDxTdHJpbmcsIFN0cmluZz4gX3BhcmFtZXRlcnM7CiAgTWFwPFN0cmluZywgU3RyaW5nPiBfdW5tb2RpZmlhYmxlUGFyYW1ldGVyczsKCiAgX0hlYWRlclZhbHVlKFt0aGlzLl92YWx1ZSA9ICIiLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnNdKSB7CiAgICBpZiAocGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIF9wYXJhbWV0ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+LmZyb20ocGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICBzdGF0aWMgX0hlYWRlclZhbHVlIHBhcnNlKFN0cmluZyB2YWx1ZSwKICAgICAge3BhcmFtZXRlclNlcGFyYXRvcjogIjsiLAogICAgICB2YWx1ZVNlcGFyYXRvcjogbnVsbCwKICAgICAgcHJlc2VydmVCYWNrc2xhc2g6IGZhbHNlfSkgewogICAgLy8gUGFyc2UgdGhlIHN0cmluZy4KICAgIHZhciByZXN1bHQgPSBuZXcgX0hlYWRlclZhbHVlKCk7CiAgICByZXN1bHQuX3BhcnNlKHZhbHVlLCBwYXJhbWV0ZXJTZXBhcmF0b3IsIHZhbHVlU2VwYXJhdG9yLCBwcmVzZXJ2ZUJhY2tzbGFzaCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIGdldCB2YWx1ZSA9PiBfdmFsdWU7CgogIHZvaWQgX2Vuc3VyZVBhcmFtZXRlcnMoKSB7CiAgICBpZiAoX3BhcmFtZXRlcnMgPT0gbnVsbCkgewogICAgICBfcGFyYW1ldGVycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwogICAgfQogIH0KCiAgTWFwPFN0cmluZywgU3RyaW5nPiBnZXQgcGFyYW1ldGVycyB7CiAgICBfZW5zdXJlUGFyYW1ldGVycygpOwogICAgaWYgKF91bm1vZGlmaWFibGVQYXJhbWV0ZXJzID09IG51bGwpIHsKICAgICAgX3VubW9kaWZpYWJsZVBhcmFtZXRlcnMgPSBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldyhfcGFyYW1ldGVycyk7CiAgICB9CiAgICByZXR1cm4gX3VubW9kaWZpYWJsZVBhcmFtZXRlcnM7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZShfdmFsdWUpOwogICAgaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCAmJiBwYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHsKICAgICAgX3BhcmFtZXRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewogICAgICAgIHNiLi53cml0ZSgiOyAiKS4ud3JpdGUobmFtZSkuLndyaXRlKCI9IikuLndyaXRlKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIHZvaWQgX3BhcnNlKFN0cmluZyBzLCBTdHJpbmcgcGFyYW1ldGVyU2VwYXJhdG9yLCBTdHJpbmcgdmFsdWVTZXBhcmF0b3IsCiAgICAgIGJvb2wgcHJlc2VydmVCYWNrc2xhc2gpIHsKICAgIGludCBpbmRleCA9IDA7CgogICAgYm9vbCBkb25lKCkgPT4gaW5kZXggPT0gcy5sZW5ndGg7CgogICAgdm9pZCBza2lwV1MoKSB7CiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgaWYgKHNbaW5kZXhdICE9ICIgIiAmJiBzW2luZGV4XSAhPSAiXHQiKSByZXR1cm47CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgfQoKICAgIFN0cmluZyBwYXJzZVZhbHVlKCkgewogICAgICBpbnQgc3RhcnQgPSBpbmRleDsKICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICBpZiAoc1tpbmRleF0gPT0gIiAiIHx8CiAgICAgICAgICAgIHNbaW5kZXhdID09ICJcdCIgfHwKICAgICAgICAgICAgc1tpbmRleF0gPT0gdmFsdWVTZXBhcmF0b3IgfHwKICAgICAgICAgICAgc1tpbmRleF0gPT0gcGFyYW1ldGVyU2VwYXJhdG9yKSBicmVhazsKICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpOwogICAgfQoKICAgIHZvaWQgZXhwZWN0KFN0cmluZyBleHBlY3RlZCkgewogICAgICBpZiAoZG9uZSgpIHx8IHNbaW5kZXhdICE9IGV4cGVjdGVkKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBoZWFkZXIgdmFsdWUiKTsKICAgICAgfQogICAgICBpbmRleCsrOwogICAgfQoKICAgIHZvaWQgbWF5YmVFeHBlY3QoU3RyaW5nIGV4cGVjdGVkKSB7CiAgICAgIGlmIChzW2luZGV4XSA9PSBleHBlY3RlZCkgaW5kZXgrKzsKICAgIH0KCiAgICB2b2lkIHBhcnNlUGFyYW1ldGVycygpIHsKICAgICAgdmFyIHBhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgICAgX3BhcmFtZXRlcnMgPSBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldyhwYXJhbWV0ZXJzKTsKCiAgICAgIFN0cmluZyBwYXJzZVBhcmFtZXRlck5hbWUoKSB7CiAgICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICAgIGlmIChzW2luZGV4XSA9PSAiICIgfHwKICAgICAgICAgICAgICBzW2luZGV4XSA9PSAiXHQiIHx8CiAgICAgICAgICAgICAgc1tpbmRleF0gPT0gIj0iIHx8CiAgICAgICAgICAgICAgc1tpbmRleF0gPT0gcGFyYW1ldGVyU2VwYXJhdG9yIHx8CiAgICAgICAgICAgICAgc1tpbmRleF0gPT0gdmFsdWVTZXBhcmF0b3IpIGJyZWFrOwogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudG9Mb3dlckNhc2UoKTsKICAgICAgfQoKICAgICAgU3RyaW5nIHBhcnNlUGFyYW1ldGVyVmFsdWUoKSB7CiAgICAgICAgaWYgKCFkb25lKCkgJiYgc1tpbmRleF0gPT0gIlwiIikgewogICAgICAgICAgLy8gUGFyc2UgcXVvdGVkIHZhbHVlLgogICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICAgIGlmIChzW2luZGV4XSA9PSAiXFwiKSB7CiAgICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA9PSBzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBoZWFkZXIgdmFsdWUiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHByZXNlcnZlQmFja3NsYXNoICYmIHNbaW5kZXggKyAxXSAhPSAiXCIiKSB7CiAgICAgICAgICAgICAgICBzYi53cml0ZShzW2luZGV4XSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc1tpbmRleF0gPT0gIlwiIikgewogICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2Iud3JpdGUoc1tpbmRleF0pOwogICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFBhcnNlIG5vbi1xdW90ZWQgdmFsdWUuCiAgICAgICAgICB2YXIgdmFsID0gcGFyc2VWYWx1ZSgpOwogICAgICAgICAgcmV0dXJuIHZhbCA9PSAiIiA/IG51bGwgOiB2YWw7CiAgICAgICAgfQogICAgICB9CgogICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgIHNraXBXUygpOwogICAgICAgIGlmIChkb25lKCkpIHJldHVybjsKICAgICAgICBTdHJpbmcgbmFtZSA9IHBhcnNlUGFyYW1ldGVyTmFtZSgpOwogICAgICAgIHNraXBXUygpOwogICAgICAgIGlmIChkb25lKCkpIHsKICAgICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSBudWxsOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBtYXliZUV4cGVjdCgiPSIpOwogICAgICAgIHNraXBXUygpOwogICAgICAgIGlmIChkb25lKCkpIHsKICAgICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSBudWxsOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZVBhcmFtZXRlclZhbHVlKCk7CiAgICAgICAgaWYgKG5hbWUgPT0gJ2NoYXJzZXQnICYmIHRoaXMgaXMgX0NvbnRlbnRUeXBlICYmIHZhbHVlICE9IG51bGwpIHsKICAgICAgICAgIC8vIENoYXJzZXQgcGFyYW1ldGVyIG9mIENvbnRlbnRUeXBlcyBhcmUgYWx3YXlzIGxvd2VyLWNhc2UuCiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgfQogICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSB2YWx1ZTsKICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoZG9uZSgpKSByZXR1cm47CiAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IHN1cHBvcnQgZm9yIG11bHRpLXZhbHVlZCBwYXJhbWV0ZXJzLgogICAgICAgIGlmIChzW2luZGV4XSA9PSB2YWx1ZVNlcGFyYXRvcikgcmV0dXJuOwogICAgICAgIGV4cGVjdChwYXJhbWV0ZXJTZXBhcmF0b3IpOwogICAgICB9CiAgICB9CgogICAgc2tpcFdTKCk7CiAgICBfdmFsdWUgPSBwYXJzZVZhbHVlKCk7CiAgICBza2lwV1MoKTsKICAgIGlmIChkb25lKCkpIHJldHVybjsKICAgIG1heWJlRXhwZWN0KHBhcmFtZXRlclNlcGFyYXRvcik7CiAgICBwYXJzZVBhcmFtZXRlcnMoKTsKICB9Cn0KCmNsYXNzIF9Db250ZW50VHlwZSBleHRlbmRzIF9IZWFkZXJWYWx1ZSBpbXBsZW1lbnRzIENvbnRlbnRUeXBlIHsKICBTdHJpbmcgX3ByaW1hcnlUeXBlID0gIiI7CiAgU3RyaW5nIF9zdWJUeXBlID0gIiI7CgogIF9Db250ZW50VHlwZShTdHJpbmcgcHJpbWFyeVR5cGUsIFN0cmluZyBzdWJUeXBlLCBTdHJpbmcgY2hhcnNldCwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzKQogICAgICA6IF9wcmltYXJ5VHlwZSA9IHByaW1hcnlUeXBlLAogICAgICAgIF9zdWJUeXBlID0gc3ViVHlwZSwKICAgICAgICBzdXBlcigiIikgewogICAgaWYgKF9wcmltYXJ5VHlwZSA9PSBudWxsKSBfcHJpbWFyeVR5cGUgPSAiIjsKICAgIGlmIChfc3ViVHlwZSA9PSBudWxsKSBfc3ViVHlwZSA9ICIiOwogICAgX3ZhbHVlID0gIiRfcHJpbWFyeVR5cGUvJF9zdWJUeXBlIjsKICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgX2Vuc3VyZVBhcmFtZXRlcnMoKTsKICAgICAgcGFyYW1ldGVycy5mb3JFYWNoKChTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKICAgICAgICBTdHJpbmcgbG93ZXJDYXNlS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgaWYgKGxvd2VyQ2FzZUtleSA9PSAiY2hhcnNldCIpIHsKICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fcGFyYW1ldGVyc1tsb3dlckNhc2VLZXldID0gdmFsdWU7CiAgICAgIH0pOwogICAgfQogICAgaWYgKGNoYXJzZXQgIT0gbnVsbCkgewogICAgICBfZW5zdXJlUGFyYW1ldGVycygpOwogICAgICB0aGlzLl9wYXJhbWV0ZXJzWyJjaGFyc2V0Il0gPSBjaGFyc2V0LnRvTG93ZXJDYXNlKCk7CiAgICB9CiAgfQoKICBfQ29udGVudFR5cGUuXygpOwoKICBzdGF0aWMgX0NvbnRlbnRUeXBlIHBhcnNlKFN0cmluZyB2YWx1ZSkgewogICAgdmFyIHJlc3VsdCA9IG5ldyBfQ29udGVudFR5cGUuXygpOwogICAgcmVzdWx0Ll9wYXJzZSh2YWx1ZSwgIjsiLCBudWxsLCBmYWxzZSk7CiAgICBpbnQgaW5kZXggPSByZXN1bHQuX3ZhbHVlLmluZGV4T2YoIi8iKTsKICAgIGlmIChpbmRleCA9PSAtMSB8fCBpbmRleCA9PSAocmVzdWx0Ll92YWx1ZS5sZW5ndGggLSAxKSkgewogICAgICByZXN1bHQuX3ByaW1hcnlUeXBlID0gcmVzdWx0Ll92YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgICAgcmVzdWx0Ll9zdWJUeXBlID0gIiI7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQuX3ByaW1hcnlUeXBlID0KICAgICAgICAgIHJlc3VsdC5fdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KS50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgICAgcmVzdWx0Ll9zdWJUeXBlID0gcmVzdWx0Ll92YWx1ZS5zdWJzdHJpbmcoaW5kZXggKyAxKS50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgZ2V0IG1pbWVUeXBlID0+ICckcHJpbWFyeVR5cGUvJHN1YlR5cGUnOwoKICBTdHJpbmcgZ2V0IHByaW1hcnlUeXBlID0+IF9wcmltYXJ5VHlwZTsKCiAgU3RyaW5nIGdldCBzdWJUeXBlID0+IF9zdWJUeXBlOwoKICBTdHJpbmcgZ2V0IGNoYXJzZXQgPT4gcGFyYW1ldGVyc1siY2hhcnNldCJdOwp9CgpjbGFzcyBfQ29va2llIGltcGxlbWVudHMgQ29va2llIHsKICBTdHJpbmcgX25hbWU7CiAgU3RyaW5nIF92YWx1ZTsKICBEYXRlVGltZSBleHBpcmVzOwogIGludCBtYXhBZ2U7CiAgU3RyaW5nIGRvbWFpbjsKICBTdHJpbmcgcGF0aDsKICBib29sIGh0dHBPbmx5ID0gZmFsc2U7CiAgYm9vbCBzZWN1cmUgPSBmYWxzZTsKCiAgX0Nvb2tpZShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKQogICAgICA6IF9uYW1lID0gX3ZhbGlkYXRlTmFtZShuYW1lKSwKICAgICAgICBfdmFsdWUgPSBfdmFsaWRhdGVWYWx1ZSh2YWx1ZSksCiAgICAgICAgaHR0cE9ubHkgPSB0cnVlOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gX25hbWU7CiAgU3RyaW5nIGdldCB2YWx1ZSA9PiBfdmFsdWU7CgogIHNldCBuYW1lKFN0cmluZyBuZXdOYW1lKSB7CiAgICBfdmFsaWRhdGVOYW1lKG5ld05hbWUpOwogICAgX25hbWUgPSBuZXdOYW1lOwogIH0KCiAgc2V0IHZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewogICAgX3ZhbGlkYXRlVmFsdWUobmV3VmFsdWUpOwogICAgX3ZhbHVlID0gbmV3VmFsdWU7CiAgfQoKICBfQ29va2llLmZyb21TZXRDb29raWVWYWx1ZShTdHJpbmcgdmFsdWUpIHsKICAgIC8vIFBhcnNlIHRoZSAnc2V0LWNvb2tpZScgaGVhZGVyIHZhbHVlLgogICAgX3BhcnNlU2V0Q29va2llVmFsdWUodmFsdWUpOwogIH0KCiAgLy8gUGFyc2UgYSAnc2V0LWNvb2tpZScgaGVhZGVyIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcnVsZXMgaW4gUkZDIDYyNjUuCiAgdm9pZCBfcGFyc2VTZXRDb29raWVWYWx1ZShTdHJpbmcgcykgewogICAgaW50IGluZGV4ID0gMDsKCiAgICBib29sIGRvbmUoKSA9PiBpbmRleCA9PSBzLmxlbmd0aDsKCiAgICBTdHJpbmcgcGFyc2VOYW1lKCkgewogICAgICBpbnQgc3RhcnQgPSBpbmRleDsKICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICBpZiAoc1tpbmRleF0gPT0gIj0iKSBicmVhazsKICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRyaW0oKTsKICAgIH0KCiAgICBTdHJpbmcgcGFyc2VWYWx1ZSgpIHsKICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgaWYgKHNbaW5kZXhdID09ICI7IikgYnJlYWs7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KS50cmltKCk7CiAgICB9CgogICAgdm9pZCBleHBlY3QoU3RyaW5nIGV4cGVjdGVkKSB7CiAgICAgIGlmIChkb25lKCkpIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlIFskc10iKTsKICAgICAgaWYgKHNbaW5kZXhdICE9IGV4cGVjdGVkKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBoZWFkZXIgdmFsdWUgWyRzXSIpOwogICAgICB9CiAgICAgIGluZGV4Kys7CiAgICB9CgogICAgdm9pZCBwYXJzZUF0dHJpYnV0ZXMoKSB7CiAgICAgIFN0cmluZyBwYXJzZUF0dHJpYnV0ZU5hbWUoKSB7CiAgICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICAgIGlmIChzW2luZGV4XSA9PSAiPSIgfHwgc1tpbmRleF0gPT0gIjsiKSBicmVhazsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICB9CgogICAgICBTdHJpbmcgcGFyc2VBdHRyaWJ1dGVWYWx1ZSgpIHsKICAgICAgICBpbnQgc3RhcnQgPSBpbmRleDsKICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgICAgaWYgKHNbaW5kZXhdID09ICI7IikgYnJlYWs7CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KS50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgICAgfQoKICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IHBhcnNlQXR0cmlidXRlTmFtZSgpOwogICAgICAgIFN0cmluZyB2YWx1ZSA9ICIiOwogICAgICAgIGlmICghZG9uZSgpICYmIHNbaW5kZXhdID09ICI9IikgewogICAgICAgICAgaW5kZXgrKzsgLy8gU2tpcCB0aGUgPSBjaGFyYWN0ZXIuCiAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXR0cmlidXRlVmFsdWUoKTsKICAgICAgICB9CiAgICAgICAgaWYgKG5hbWUgPT0gImV4cGlyZXMiKSB7CiAgICAgICAgICBleHBpcmVzID0gSHR0cERhdGUuX3BhcnNlQ29va2llRGF0ZSh2YWx1ZSk7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJtYXgtYWdlIikgewogICAgICAgICAgbWF4QWdlID0gaW50LnBhcnNlKHZhbHVlKTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImRvbWFpbiIpIHsKICAgICAgICAgIGRvbWFpbiA9IHZhbHVlOwogICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAicGF0aCIpIHsKICAgICAgICAgIHBhdGggPSB2YWx1ZTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImh0dHBvbmx5IikgewogICAgICAgICAgaHR0cE9ubHkgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAic2VjdXJlIikgewogICAgICAgICAgc2VjdXJlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFkb25lKCkpIGluZGV4Kys7IC8vIFNraXAgdGhlIDsgY2hhcmFjdGVyCiAgICAgIH0KICAgIH0KCiAgICBfbmFtZSA9IF92YWxpZGF0ZU5hbWUocGFyc2VOYW1lKCkpOwogICAgaWYgKGRvbmUoKSB8fCBfbmFtZS5sZW5ndGggPT0gMCkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIGhlYWRlciB2YWx1ZSBbJHNdIik7CiAgICB9CiAgICBpbmRleCsrOyAvLyBTa2lwIHRoZSA9IGNoYXJhY3Rlci4KICAgIF92YWx1ZSA9IF92YWxpZGF0ZVZhbHVlKHBhcnNlVmFsdWUoKSk7CiAgICBpZiAoZG9uZSgpKSByZXR1cm47CiAgICBpbmRleCsrOyAvLyBTa2lwIHRoZSA7IGNoYXJhY3Rlci4KICAgIHBhcnNlQXR0cmlidXRlcygpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2IuLndyaXRlKF9uYW1lKS4ud3JpdGUoIj0iKS4ud3JpdGUoX3ZhbHVlKTsKICAgIGlmIChleHBpcmVzICE9IG51bGwpIHsKICAgICAgc2IuLndyaXRlKCI7IEV4cGlyZXM9IikuLndyaXRlKEh0dHBEYXRlLmZvcm1hdChleHBpcmVzKSk7CiAgICB9CiAgICBpZiAobWF4QWdlICE9IG51bGwpIHsKICAgICAgc2IuLndyaXRlKCI7IE1heC1BZ2U9IikuLndyaXRlKG1heEFnZSk7CiAgICB9CiAgICBpZiAoZG9tYWluICE9IG51bGwpIHsKICAgICAgc2IuLndyaXRlKCI7IERvbWFpbj0iKS4ud3JpdGUoZG9tYWluKTsKICAgIH0KICAgIGlmIChwYXRoICE9IG51bGwpIHsKICAgICAgc2IuLndyaXRlKCI7IFBhdGg9IikuLndyaXRlKHBhdGgpOwogICAgfQogICAgaWYgKHNlY3VyZSkgc2Iud3JpdGUoIjsgU2VjdXJlIik7CiAgICBpZiAoaHR0cE9ubHkpIHNiLndyaXRlKCI7IEh0dHBPbmx5Iik7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX3ZhbGlkYXRlTmFtZShTdHJpbmcgbmV3TmFtZSkgewogICAgY29uc3Qgc2VwYXJhdG9ycyA9IGNvbnN0IFsKICAgICAgIigiLAogICAgICAiKSIsCiAgICAgICI8IiwKICAgICAgIj4iLAogICAgICAiQCIsCiAgICAgICIsIiwKICAgICAgIjsiLAogICAgICAiOiIsCiAgICAgICJcXCIsCiAgICAgICciJywKICAgICAgIi8iLAogICAgICAiWyIsCiAgICAgICJdIiwKICAgICAgIj8iLAogICAgICAiPSIsCiAgICAgICJ7IiwKICAgICAgIn0iCiAgICBdOwogICAgaWYgKG5ld05hbWUgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgibmFtZSIpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdOYW1lLmxlbmd0aDsgaSsrKSB7CiAgICAgIGludCBjb2RlVW5pdCA9IG5ld05hbWUuY29kZVVuaXRzW2ldOwogICAgICBpZiAoY29kZVVuaXQgPD0gMzIgfHwKICAgICAgICAgIGNvZGVVbml0ID49IDEyNyB8fAogICAgICAgICAgc2VwYXJhdG9ycy5pbmRleE9mKG5ld05hbWVbaV0pID49IDApIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAiSW52YWxpZCBjaGFyYWN0ZXIgaW4gY29va2llIG5hbWUsIGNvZGUgdW5pdDogJyRjb2RlVW5pdCciLAogICAgICAgICAgICBuZXdOYW1lLAogICAgICAgICAgICBpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ld05hbWU7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF92YWxpZGF0ZVZhbHVlKFN0cmluZyBuZXdWYWx1ZSkgewogICAgaWYgKG5ld1ZhbHVlID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInZhbHVlIik7CiAgICAvLyBQZXIgUkZDIDYyNjUsIGNvbnNpZGVyIHN1cnJvdW5kaW5nICIiIGFzIHBhcnQgb2YgdGhlIHZhbHVlLCBidXQgb3RoZXJ3aXNlCiAgICAvLyBkb3VibGUgcXVvdGVzIGFyZSBub3QgYWxsb3dlZC4KICAgIGludCBzdGFydCA9IDA7CiAgICBpbnQgZW5kID0gbmV3VmFsdWUubGVuZ3RoOwogICAgaWYgKDIgPD0gbmV3VmFsdWUubGVuZ3RoICYmCiAgICAgICAgbmV3VmFsdWUuY29kZVVuaXRzW3N0YXJ0XSA9PSAweDIyICYmCiAgICAgICAgbmV3VmFsdWUuY29kZVVuaXRzW2VuZCAtIDFdID09IDB4MjIpIHsKICAgICAgc3RhcnQrKzsKICAgICAgZW5kLS07CiAgICB9CgogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaW50IGNvZGVVbml0ID0gbmV3VmFsdWUuY29kZVVuaXRzW2ldOwogICAgICBpZiAoIShjb2RlVW5pdCA9PSAweDIxIHx8CiAgICAgICAgICAoY29kZVVuaXQgPj0gMHgyMyAmJiBjb2RlVW5pdCA8PSAweDJCKSB8fAogICAgICAgICAg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Ly8gQnl0ZXMgZm9yICJIVFRQLzEuIi4KICBzdGF0aWMgY29uc3QgSFRUUDFET1QgPSBjb25zdCBbNzIsIDg0LCA4NCwgODAsIDQ3LCA0OSwgNDZdOwogIC8vIEJ5dGVzIGZvciAiSFRUUC8xLjAiLgogIHN0YXRpYyBjb25zdCBIVFRQMTAgPSBjb25zdCBbNzIsIDg0LCA4NCwgODAsIDQ3LCA0OSwgNDYsIDQ4XTsKICAvLyBCeXRlcyBmb3IgIkhUVFAvMS4xIi4KICBzdGF0aWMgY29uc3QgSFRUUDExID0gY29uc3QgWzcyLCA4NCwgODQsIDgwLCA0NywgNDksIDQ2LCA0OV07CgogIHN0YXRpYyBjb25zdCBib29sIFQgPSB0cnVlOwogIHN0YXRpYyBjb25zdCBib29sIEYgPSBmYWxzZTsKICAvLyBMb29wdXAtbWFwIGZvciB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICcoKTw+QCw7OlxcIi9bXT89e30gXHQnLgogIHN0YXRpYyBjb25zdCBTRVBBUkFUT1JfTUFQID0gY29uc3QgWwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgVCwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIFQsIEYsIFQsIEYsIEYsIEYsIEYsIEYsIFQsIFQsIEYsIEYsIFQsIEYsIEYsIFQsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBULCBULCBULCBULCBULCBULCBULCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgVCwgVCwgVCwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBULCBGLCBULCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYKICBdOwp9CgovLyBGcmVxdWVudGx5IHVzZWQgY2hhcmFjdGVyIGNvZGVzLgpjbGFzcyBfQ2hhckNvZGUgewogIHN0YXRpYyBjb25zdCBpbnQgSFQgPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgTEYgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IENSID0gMTM7CiAgc3RhdGljIGNvbnN0IGludCBTUCA9IDMyOwogIHN0YXRpYyBjb25zdCBpbnQgQU1QRVJTQU5EID0gMzg7CiAgc3RhdGljIGNvbnN0IGludCBDT01NQSA9IDQ0OwogIHN0YXRpYyBjb25zdCBpbnQgREFTSCA9IDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgU0xBU0ggPSA0NzsKICBzdGF0aWMgY29uc3QgaW50IFpFUk8gPSA0ODsKICBzdGF0aWMgY29uc3QgaW50IE9ORSA9IDQ5OwogIHN0YXRpYyBjb25zdCBpbnQgQ09MT04gPSA1ODsKICBzdGF0aWMgY29uc3QgaW50IFNFTUlfQ09MT04gPSA1OTsKICBzdGF0aWMgY29uc3QgaW50IEVRVUFMID0gNjE7Cn0KCi8vIFN0YXRlcyBvZiB0aGUgSFRUUCBwYXJzZXIgc3RhdGUgbWFjaGluZS4KY2xhc3MgX1N0YXRlIHsKICBzdGF0aWMgY29uc3QgaW50IFNUQVJUID0gMDsKICBzdGF0aWMgY29uc3QgaW50IE1FVEhPRF9PUl9SRVNQT05TRV9IVFRQX1ZFUlNJT04gPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTUE9OU0VfSFRUUF9WRVJTSU9OID0gMjsKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfTElORV9NRVRIT0QgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVF9MSU5FX1VSSSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX0xJTkVfSFRUUF9WRVJTSU9OID0gNTsKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfTElORV9FTkRJTkcgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgUkVTUE9OU0VfTElORV9TVEFUVVNfQ09ERSA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBSRVNQT05TRV9MSU5FX1JFQVNPTl9QSFJBU0UgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgUkVTUE9OU0VfTElORV9FTkRJTkcgPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgSEVBREVSX1NUQVJUID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfRklFTEQgPSAxMTsKICBzdGF0aWMgY29uc3QgaW50IEhFQURFUl9WQUxVRV9TVEFSVCA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgSEVBREVSX1ZBTFVFID0gMTM7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfVkFMVUVfRk9MRElOR19PUl9FTkRJTkcgPSAxNDsKICBzdGF0aWMgY29uc3QgaW50IEhFQURFUl9WQUxVRV9GT0xEX09SX0VORCA9IDE1OwogIHN0YXRpYyBjb25zdCBpbnQgSEVBREVSX0VORElORyA9IDE2OwoKICBzdGF0aWMgY29uc3QgaW50IENIVU5LX1NJWkVfU1RBUlRJTkdfQ1IgPSAxNzsKICBzdGF0aWMgY29uc3QgaW50IENIVU5LX1NJWkVfU1RBUlRJTkdfTEYgPSAxODsKICBzdGF0aWMgY29uc3QgaW50IENIVU5LX1NJWkUgPSAxOTsKICBzdGF0aWMgY29uc3QgaW50IENIVU5LX1NJWkVfRVhURU5TSU9OID0gMjA7CiAgc3RhdGljIGNvbnN0IGludCBDSFVOS19TSVpFX0VORElORyA9IDIxOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktFRF9CT0RZX0RPTkVfQ1IgPSAyMjsKICBzdGF0aWMgY29uc3QgaW50IENIVU5LRURfQk9EWV9ET05FX0xGID0gMjM7CiAgc3RhdGljIGNvbnN0IGludCBCT0RZID0gMjQ7CiAgc3RhdGljIGNvbnN0IGludCBDTE9TRUQgPSAyNTsKICBzdGF0aWMgY29uc3QgaW50IFVQR1JBREVEID0gMjY7CiAgc3RhdGljIGNvbnN0IGludCBGQUlMVVJFID0gMjc7CgogIHN0YXRpYyBjb25zdCBpbnQgRklSU1RfQk9EWV9TVEFURSA9IENIVU5LX1NJWkVfU1RBUlRJTkdfQ1I7Cn0KCi8vIEhUVFAgdmVyc2lvbiBvZiB0aGUgcmVxdWVzdCBvciByZXNwb25zZSBiZWluZyBwYXJzZWQuCmNsYXNzIF9IdHRwVmVyc2lvbiB7CiAgc3RhdGljIGNvbnN0IGludCBVTkRFVEVSTUlORUQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgSFRUUDEwID0gMTsKICBzdGF0aWMgY29uc3QgaW50IEhUVFAxMSA9IDI7Cn0KCi8vIFN0YXRlcyBvZiB0aGUgSFRUUCBwYXJzZXIgc3RhdGUgbWFjaGluZS4KY2xhc3MgX01lc3NhZ2VUeXBlIHsKICBzdGF0aWMgY29uc3QgaW50IFVOREVURVJNSU5FRCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFJFU1BPTlNFID0gMDsKfQoKLyoqCiAqIFRoZSBfSHR0cERldGFjaGVkU3RyZWFtU3Vic2NyaXB0aW9uIHRha2VzIGEgc3Vic2NyaXB0aW9uIGFuZCBzb21lIGV4dHJhIGRhdGEsCiAqIGFuZCBtYWtlcyBpdCBwb3NzaWJsZSB0byAiaW5qZWN0IiB0aGUgZGF0YSBpbiBmcm9tIG9mIG90aGVyIGRhdGEgZXZlbnRzCiAqIGZyb20gdGhlIHN1YnNjcmlwdGlvbi4KICoKICogSXQgZG9lcyBzbyBieSBvdmVycmlkaW5nIHBhdXNlL3Jlc3VtZSwgc28gdGhhdCBvbmNlIHRoZQogKiBfSHR0cERldGFjaGVkU3RyZWFtU3Vic2NyaXB0aW9uIGlzIHJlc3VtZWQsIGl0J2xsIGRlbGl2ZXIgdGhlIGRhdGEgYmVmb3JlCiAqIHJlc3VtaW5nIHRoZSB1bmRlcmxheWluZyBzdWJzY3JpcHRpb24uCiAqLwpjbGFzcyBfSHR0cERldGFjaGVkU3RyZWFtU3Vic2NyaXB0aW9uIGltcGxlbWVudHMgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gewogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IF9zdWJzY3JpcHRpb247CiAgVWludDhMaXN0IF9pbmplY3REYXRhOwogIGJvb2wgX2lzQ2FuY2VsZWQgPSBmYWxzZTsKICBpbnQgX3BhdXNlQ291bnQgPSAxOwogIEZ1bmN0aW9uIF91c2VyT25EYXRhOwogIGJvb2wgX3NjaGVkdWxlZCA9IGZhbHNlOwoKICBfSHR0cERldGFjaGVkU3RyZWFtU3Vic2NyaXB0aW9uKAogICAgICB0aGlzLl9zdWJzY3JpcHRpb24sIHRoaXMuX2luamVjdERhdGEsIHRoaXMuX3VzZXJPbkRhdGEpOwoKICBib29sIGdldCBpc1BhdXNlZCA9PiBfc3Vic2NyaXB0aW9uLmlzUGF1c2VkOwoKICBGdXR1cmU8VD4gYXNGdXR1cmU8VD4oW1QgZnV0dXJlVmFsdWVdKSA9PgogICAgICBfc3Vic2NyaXB0aW9uLmFzRnV0dXJlPFQ+KGZ1dHVyZVZhbHVlKTsKCiAgRnV0dXJlIGNhbmNlbCgpIHsKICAgIF9pc0NhbmNlbGVkID0gdHJ1ZTsKICAgIF9pbmplY3REYXRhID0gbnVsbDsKICAgIHJldHVybiBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogIH0KCiAgdm9pZCBvbkRhdGEodm9pZCBoYW5kbGVEYXRhKFVpbnQ4TGlzdCBkYXRhKSkgewogICAgX3VzZXJPbkRhdGEgPSBoYW5kbGVEYXRhOwogICAgX3N1YnNjcmlwdGlvbi5vbkRhdGEoaGFuZGxlRGF0YSk7CiAgfQoKICB2b2lkIG9uRG9uZSh2b2lkIGhhbmRsZURvbmUoKSkgewogICAgX3N1YnNjcmlwdGlvbi5vbkRvbmUoaGFuZGxlRG9uZSk7CiAgfQoKICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpIHsKICAgIF9zdWJzY3JpcHRpb24ub25FcnJvcihoYW5kbGVFcnJvcik7CiAgfQoKICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSkgewogICAgaWYgKF9pbmplY3REYXRhID09IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5wYXVzZShyZXN1bWVTaWduYWwpOwogICAgfSBlbHNlIHsKICAgICAgX3BhdXNlQ291bnQrKzsKICAgICAgaWYgKHJlc3VtZVNpZ25hbCAhPSBudWxsKSB7CiAgICAgICAgcmVzdW1lU2lnbmFsLndoZW5Db21wbGV0ZShyZXN1bWUpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlc3VtZSgpIHsKICAgIGlmIChfaW5qZWN0RGF0YSA9PSBudWxsKSB7CiAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICBfcGF1c2VDb3VudC0tOwogICAgICBfbWF5YmVTY2hlZHVsZURhdGEoKTsKICAgIH0KICB9CgogIHZvaWQgX21heWJlU2NoZWR1bGVEYXRhKCkgewogICAgaWYgKF9zY2hlZHVsZWQpIHJldHVybjsKICAgIGlmIChfcGF1c2VDb3VudCAhPSAwKSByZXR1cm47CiAgICBfc2NoZWR1bGVkID0gdHJ1ZTsKICAgIHNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgX3NjaGVkdWxlZCA9IGZhbHNlOwogICAgICBpZiAoX3BhdXNlQ291bnQgPiAwIHx8IF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICAgIHZhciBkYXRhID0gX2luamVjdERhdGE7CiAgICAgIF9pbmplY3REYXRhID0gbnVsbDsKICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgJ3N1YnNjcmlwdGlvbi5pc1BhdXNlZCcgaXMgZmFsc2UsIHdlIHJlc3VtZSB0aGUKICAgICAgLy8gc3Vic2NyaXB0aW9uIGhlcmUuIFRoaXMgaXMgZmluZSBhcyBwb3RlbnRpYWwgZXZlbnRzIGFyZSBkZWxheWVkLgogICAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICBpZiAoX3VzZXJPbkRhdGEgIT0gbnVsbCkgewogICAgICAgIF91c2VyT25EYXRhKGRhdGEpOwogICAgICB9CiAgICB9KTsKICB9Cn0KCmNsYXNzIF9IdHRwRGV0YWNoZWRJbmNvbWluZyBleHRlbmRzIFN0cmVhbTxVaW50OExpc3Q+IHsKICBmaW5hbCBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBzdWJzY3JpcHRpb247CiAgZmluYWwgVWludDhMaXN0IGJ1ZmZlcmVkRGF0YTsKCiAgX0h0dHBEZXRhY2hlZEluY29taW5nKHRoaXMuc3Vic2NyaXB0aW9uLCB0aGlzLmJ1ZmZlcmVkRGF0YSk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaWYgKHN1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIHN1YnNjcmlwdGlvbgogICAgICAgIC4ub25EYXRhKG9uRGF0YSkKICAgICAgICAuLm9uRXJyb3Iob25FcnJvcikKICAgICAgICAuLm9uRG9uZShvbkRvbmUpOwogICAgICBpZiAoYnVmZmVyZWREYXRhID09IG51bGwpIHsKICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uLi5yZXN1bWUoKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IF9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb24oCiAgICAgICAgICBzdWJzY3JpcHRpb24sIGJ1ZmZlcmVkRGF0YSwgb25EYXRhKQogICAgICAgIC4ucmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKDI2Mzc5KTogYWRkIHRlc3QgZm9yIHRoaXMgYnJhbmNoLgogICAgICByZXR1cm4gbmV3IFN0cmVhbTxVaW50OExpc3Q+LmZyb21JdGVyYWJsZShbYnVmZmVyZWREYXRhXSkubGlzdGVuKG9uRGF0YSwKICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICAgIH0KICB9Cn0KCi8qKgogKiBIVFRQIHBhcnNlciB3aGljaCBwYXJzZXMgdGhlIGRhdGEgc3RyZWFtIGdpdmVuIHRvIFtjb25zdW1lXS4KICoKICogSWYgYW4gSFRUUCBwYXJzZXIgZXJyb3Igb2NjdXJzLCB0aGUgcGFyc2VyIHdpbGwgc2lnbmFsIGFuIGVycm9yIHRvIGVpdGhlcgogKiB0aGUgY3VycmVudCBfSHR0cEluY29taW5nIG9yIHRoZSBfcGFyc2VyIGl0c2VsZi4KICoKICogVGhlIGNvbm5lY3Rpb24gdXBncmFkZXMgKGUuZy4gc3dpdGNoaW5nIGZyb20gSFRUUC8xLjEgdG8gdGhlCiAqIFdlYlNvY2tldCBwcm90b2NvbCkgaXMgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5LiBJZiBjb25uZWN0aW9uCiAqIHVwZ3JhZGUgaXMgc3BlY2lmaWVkIGluIHRoZSBoZWFkZXJzLCB0aGVuIG9uIHRoZSBjYWxsYmFjayB0bwogKiBbOnJlc3BvbnNlU3RhcnQ6XSB0aGUgWzp1cGdyYWRlOl0gcHJvcGVydHkgb24gdGhlIFs6SHR0cFBhcnNlcjpdCiAqIG9iamVjdCB3aWxsIGJlIFs6dHJ1ZTpdIGluZGljYXRpbmcgdGhhdCBmcm9tIG5vdyBvbiB0aGUgcHJvdG9jb2wgaXMKICogbm90IEhUVFAgYW55bW9yZSBhbmQgbm8gbW9yZSBjYWxsYmFja3Mgd2lsbCBoYXBwZW4sIHRoYXQgaXMKICogWzpkYXRhUmVjZWl2ZWQ6XSBhbmQgWzpkYXRhRW5kOl0gYXJlIG5vdCBjYWxsZWQgaW4gdGhpcyBjYXNlIGFzCiAqIHRoZXJlIGlzIG5vIG1vcmUgSFRUUCBkYXRhLiBBZnRlciB0aGUgdXBncmFkZSB0aGUgbWV0aG9kCiAqIFs6cmVhZFVucGFyc2VkRGF0YTpdIGNhbiBiZSB1c2VkIHRvIHJlYWQgYW55IHJlbWFpbmluZyBieXRlcyBpbiB0aGUKICogSFRUUCBwYXJzZXIgd2hpY2ggYXJlIHBhcnQgb2YgdGhlIHByb3RvY29sIHRoZSBjb25uZWN0aW9uIGlzCiAqIHVwZ3JhZGluZyB0by4gVGhlc2UgYnl0ZXMgY2Fubm90IGJlIHByb2Nlc3NlZCBieSB0aGUgSFRUUCBwYXJzZXIKICogYW5kIHNob3VsZCBiZSBoYW5kbGVkIGFjY29yZGluZyB0byB3aGF0ZXZlciBwcm90b2NvbCBpcyBiZWluZwogKiB1cGdyYWRlZCB0by4KICovCmNsYXNzIF9IdHRwUGFyc2VyIGV4dGVuZHMgU3RyZWFtPF9IdHRwSW5jb21pbmc+IHsKICAvLyBTdGF0ZS4KICBib29sIF9wYXJzZXJDYWxsZWQgPSBmYWxzZTsKCiAgLy8gVGhlIGRhdGEgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkLgogIFVpbnQ4TGlzdCBfYnVmZmVyOwogIGludCBfaW5kZXg7CgogIGZpbmFsIGJvb2wgX3JlcXVlc3RQYXJzZXI7CiAgaW50IF9zdGF0ZTsKICBpbnQgX2h0dHBWZXJzaW9uSW5kZXg7CiAgaW50IF9tZXNzYWdlVHlwZTsKICBpbnQgX3N0YXR1c0NvZGUgPSAwOwogIGludCBfc3RhdHVzQ29kZUxlbmd0aCA9IDA7CiAgZmluYWwgTGlzdDxpbnQ+IF9tZXRob2QgPSBbXTsKICBmaW5hbCBMaXN0PGludD4gX3VyaV9vcl9yZWFzb25fcGhyYXNlID0gW107CiAgZmluYWwgTGlzdDxpbnQ+IF9oZWFkZXJGaWVsZCA9IFtdOwogIGZpbmFsIExpc3Q8aW50PiBfaGVhZGVyVmFsdWUgPSBbXTsKCiAgaW50IF9odHRwVmVyc2lvbjsKICBpbnQgX3RyYW5zZmVyTGVuZ3RoID0gLTE7CiAgYm9vbCBfcGVyc2lzdGVudENvbm5lY3Rpb247CiAgYm9vbCBfY29ubmVjdGlvblVwZ3JhZGU7CiAgYm9vbCBfY2h1bmtlZDsKCiAgYm9vbCBfbm9NZXNzYWdlQm9keSA9IGZhbHNlOwogIGludCBfcmVtYWluaW5nQ29udGVudCA9IC0xOwoKICBfSHR0cEhlYWRlcnMgX2hlYWRlcnM7CgogIC8vIFRoZSBjdXJyZW50IGluY29taW5nIGNvbm5lY3Rpb24uCiAgX0h0dHBJbmNvbWluZyBfaW5jb21pbmc7CiAgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gX3NvY2tldFN1YnNjcmlwdGlvbjsKICBib29sIF9wYXVzZWQgPSB0cnVlOwogIGJvb2wgX2JvZHlQYXVzZWQgPSBmYWxzZTsKICBTdHJlYW1Db250cm9sbGVyPF9IdHRwSW5jb21pbmc+IF9jb250cm9sbGVyOwogIFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PiBfYm9keUNvbnRyb2xsZXI7CgogIGZhY3RvcnkgX0h0dHBQYXJzZXIucmVxdWVzdFBhcnNlcigpIHsKICAgIHJldHVybiBuZXcgX0h0dHBQYXJzZXIuXyh0cnVlKTsKICB9CgogIGZhY3RvcnkgX0h0dHBQYXJzZXIucmVzcG9uc2VQYXJzZXIoKSB7CiAgICByZXR1cm4gbmV3IF9IdHRwUGFyc2VyLl8oZmFsc2UpOwogIH0KCiAgX0h0dHBQYXJzZXIuXyh0aGlzLl9yZXF1ZXN0UGFyc2VyKSB7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPF9IdHRwSW5jb21pbmc+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46ICgpIHsKICAgICAgICAgIF9wYXVzZWQgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgIF9wYXVzZWQgPSB0cnVlOwogICAgICAgICAgX3BhdXNlU3RhdGVDaGFuZ2VkKCk7CiAgICAgICAgfSwKICAgICAgICBvblJlc3VtZTogKCkgewogICAgICAgICAgX3BhdXNlZCA9IGZhbHNlOwogICAgICAgICAgX3BhdXNlU3RhdGVDaGFuZ2VkKCk7CiAgICAgICAgfSwKICAgICAgICBvbkNhbmNlbDogKCkgewogICAgICAgICAgaWYgKF9zb2NrZXRTdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICAgICAgICBfc29ja2V0U3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgX3Jlc2V0KCk7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248X0h0dHBJbmNvbWluZz4gbGlzdGVuKHZvaWQgb25EYXRhKF9IdHRwSW5jb21pbmcgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIHZvaWQgbGlzdGVuVG9TdHJlYW0oU3RyZWFtPFVpbnQ4TGlzdD4gc3RyZWFtKSB7CiAgICAvLyBMaXN0ZW4gdG8gdGhlIHN0cmVhbSBhbmQgaGFuZGxlIGRhdGEgYWNjb3JkaW5nbHkuIFdoZW4gYQogICAgLy8gX0h0dHBJbmNvbWluZyBpcyBjcmVhdGVkLCBfZGF0YVBhdXNlLCBfZGF0YVJlc3VtZSwgX2RhdGFEb25lIGlzCiAgICAvLyBnaXZlbiB0byBwcm92aWRlIGEgd2F5IG9mIGNvbnRyb2xsaW5nIHRoZSBwYXJzZXIuCiAgICAvLyBUT0RPKGFqb2huc2VuKTogUmVtb3ZlIF9kYXRhUGF1c2UsIF9kYXRhUmVzdW1lIGFuZCBfZGF0YURvbmUgYW5kIGNsZWFuIHVwCiAgICAvLyBob3cgdGhlIF9IdHRwSW5jb21pbmcgc2lnbmFscyB0aGUgcGFyc2VyLgogICAgX3NvY2tldFN1YnNjcmlwdGlvbiA9CiAgICAgICAgc3RyZWFtLmxpc3Rlbihfb25EYXRhLCBvbkVycm9yOiBfY29udHJvbGxlci5hZGRFcnJvciwgb25Eb25lOiBfb25Eb25lKTsKICB9CgogIHZvaWQgX3BhcnNlKCkgewogICAgdHJ5IHsKICAgICAgX2RvUGFyc2UoKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX3N0YXRlID0gX1N0YXRlLkZBSUxVUkU7CiAgICAgIF9yZXBvcnRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIC8vIFByb2Nlc3MgZW5kIG9mIGhlYWRlcnMuIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyc2VyIHNob3VsZCBzdG9wCiAgLy8gcGFyc2luZyBhbmQgcmV0dXJuLiBUaGlzIHdpbGwgYmUgaW4gY2FzZSBvZiBlaXRoZXIgYW4gdXBncmFkZQogIC8vIHJlcXVlc3Qgb3IgYSByZXF1ZXN0IG9yIHJlc3BvbnNlIHdpdGggYW4gZW1wdHkgYm9keS4KICBib29sIF9oZWFkZXJzRW5kKCkgewogICAgX2hlYWRlcnMuX211dGFibGUgPSBmYWxzZTsKCiAgICBfdHJhbnNmZXJMZW5ndGggPSBfaGVhZGVycy5jb250ZW50TGVuZ3RoOwogICAgLy8gSWdub3JlIHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgVHJhbnNmZXItRW5jb2RpbmcKICAgIC8vIGlzIGNodW5rZWQgKFJGQyAyNjE2IHNlY3Rpb24gNC40KQogICAgaWYgKF9jaHVua2VkKSBfdHJhbnNmZXJMZW5ndGggPSAtMTsKCiAgICAvLyBJZiBhIHJlcXVlc3QgbWVzc2FnZSBoYXMgbmVpdGhlciBDb250ZW50LUxlbmd0aCBub3IKICAgIC8vIFRyYW5zZmVyLUVuY29kaW5nIHRoZSBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5IChSRkMKICAgIC8vIDI2MTYgc2VjdGlvbiA0LjMpLgogICAgaWYgKF9tZXNzYWdlVHlwZSA9PSBfTWVzc2FnZVR5cGUuUkVRVUVTVCAmJgogICAgICAgIF90cmFuc2Zlckxlbmd0aCA8IDAgJiYKICAgICAgICBfY2h1bmtlZCA9PSBmYWxzZSkgewogICAgICBfdHJhbnNmZXJMZW5ndGggPSAwOwogICAgfQogICAgaWYgKF9jb25uZWN0aW9uVXBncmFkZSkgewogICAgICBfc3RhdGUgPSBfU3RhdGUuVVBHUkFERUQ7CiAgICAgIF90cmFuc2Zlckxlbmd0aCA9IDA7CiAgICB9CiAgICBfY3JlYXRlSW5jb21pbmcoX3RyYW5zZmVyTGVuZ3RoKTsKICAgIGlmIChfcmVxdWVzdFBhcnNlcikgewogICAgICBfaW5jb21pbmcubWV0aG9kID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKF9tZXRob2QpOwogICAgICBfaW5jb21pbmcudXJpID0KICAgICAgICAgIFVyaS5wYXJzZShuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoX3VyaV9vcl9yZWFzb25fcGhyYXNlKSk7CiAgICB9IGVsc2UgewogICAgICBfaW5jb21pbmcuc3RhdHVzQ29kZSA9IF9zdGF0dXNDb2RlOwogICAgICBfaW5jb21pbmcucmVhc29uUGhyYXNlID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKF91cmlfb3JfcmVhc29uX3BocmFzZSk7CiAgICB9CiAgICBfbWV0aG9kLmNsZWFyKCk7CiAgICBfdXJpX29yX3JlYXNvbl9waHJhc2UuY2xlYXIoKTsKICAgIGlmIChfY29ubmVjdGlvblVwZ3JhZGUpIHsKICAgICAgX2luY29taW5nLnVwZ3JhZGVkID0gdHJ1ZTsKICAgICAgX3BhcnNlckNhbGxlZCA9IGZhbHNlOwogICAgICB2YXIgdG1wID0gX2luY29taW5nOwogICAgICBfY2xvc2VJbmNvbWluZygpOwogICAgICBfY29udHJvbGxlci5hZGQodG1wKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX3RyYW5zZmVyTGVuZ3RoID09IDAgfHwKICAgICAgICAoX21lc3NhZ2VUeXBlID09IF9NZXNzYWdlVHlwZS5SRVNQT05TRSAmJiBfbm9NZXNzYWdlQm9keSkpIHsKICAgICAgX3Jlc2V0KCk7CiAgICAgIHZhciB0bXAgPSBfaW5jb21pbmc7CiAgICAgIF9jbG9zZUluY29taW5nKCk7CiAgICAgIF9jb250cm9sbGVyLmFkZCh0bXApOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgaWYgKF9jaHVua2VkKSB7CiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DSFVOS19TSVpFOwogICAgICBfcmVtYWluaW5nQ29udGVudCA9IDA7CiAgICB9IGVsc2UgaWYgKF90cmFuc2Zlckxlbmd0aCA+IDApIHsKICAgICAgX3JlbWFpbmluZ0NvbnRlbnQgPSBfdHJhbnNmZXJMZW5ndGg7CiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5CT0RZOwogICAgfSBlbHNlIHsKICAgICAgLy8gTmVpdGhlciBjaHVua2VkIG5vciBjb250ZW50IGxlbmd0aC4gRW5kIG9mIGJvZHkKICAgICAgLy8gaW5kaWNhdGVkIGJ5IGNsb3NlLgogICAgICBfc3RhdGUgPSBfU3RhdGUuQk9EWTsKICAgIH0KICAgIF9wYXJzZXJDYWxsZWQgPSBmYWxzZTsKICAgIF9jb250cm9sbGVyLmFkZChfaW5jb21pbmcpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBGcm9tIFJGQyAyNjE2LgogIC8vIGdlbmVyaWMtbWVzc2FnZSA9IHN0YXJ0LWxpbmUKICAvLyAgICAgICAgICAgICAgICAgICAqKG1lc3NhZ2UtaGVhZGVyIENSTEYpCiAgLy8gICAgICAgICAgICAgICAgICAgQ1JMRgogIC8vICAgICAgICAgICAgICAgICAgIFsgbWVzc2FnZS1ib2R5IF0KICAvLyBzdGFydC1saW5lICAgICAgPSBSZXF1ZXN0LUxpbmUgfCBTdGF0dXMtTGluZQogIC8vIFJlcXVlc3QtTGluZSAgICA9IE1ldGhvZCBTUCBSZXF1ZXN0LVVSSSBTUCBIVFRQLVZlcnNpb24gQ1JMRgogIC8vIFN0YXR1cy1MaW5lICAgICA9IEhUVFAtVmVyc2lvbiBTUCBTdGF0dXMtQ29kZSBTUCBSZWFzb24tUGhyYXNlIENSTEYKICAvLyBtZXNzYWdlLWhlYWRlciAgPSBmaWVsZC1uYW1lICI6IiBbIGZpZWxkLXZhbHVlIF0KICB2b2lkIF9kb1BhcnNlKCkgewogICAgYXNzZXJ0KCFfcGFyc2VyQ2FsbGVkKTsKICAgIF9wYXJzZXJDYWxsZWQgPSB0cnVlOwogICAgaWYgKF9zdGF0ZSA9PSBfU3RhdGUuQ0xPU0VEKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJEYXRhIG9uIGNsb3NlZCBjb25uZWN0aW9uIik7CiAgICB9CiAgICBpZiAoX3N0YXRlID09IF9TdGF0ZS5GQUlMVVJFKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJEYXRhIG9uIGZhaWxlZCBjb25uZWN0aW9uIik7CiAgICB9CiAgICB3aGlsZSAoX2J1ZmZlciAhPSBudWxsICYmCiAgICAgICAgX2luZGV4IDwgX2J1ZmZlci5sZW5ndGggJiYKICAgICAgICBfc3RhdGUgIT0gX1N0YXRlLkZBSUxVUkUgJiYKICAgICAgICBfc3RhdGUgIT0gX1N0YXRlLlVQR1JBREVEKSB7CiAgICAgIC8vIERlcGVuZGluZyBvbiBfaW5jb21pbmcsIHdlIGVpdGhlciBicmVhayBvbiBfYm9keVBhdXNlZCBvciBfcGF1c2VkLgogICAgICBpZiAoKF9pbmNvbWluZyAhPSBudWxsICYmIF9ib2R5UGF1c2VkKSB8fAogICAgICAgICAgKF9pbmNvbWluZyA9PSBudWxsICYmIF9wYXVzZWQpKSB7CiAgICAgICAgX3BhcnNlckNhbGxlZCA9IGZhbHNlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpbnQgYnl0ZSA9IF9idWZmZXJbX2luZGV4KytdOwogICAgICBzd2l0Y2ggKF9zdGF0ZSkgewogICAgICAgIGNhc2UgX1N0YXRlLlNUQVJUOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NvbnN0LkhUVFBbMF0pIHsKICAgICAgICAgICAgLy8gU3RhcnQgcGFyc2luZyBtZXRob2Qgb3IgSFRUUCB2ZXJzaW9uLgogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCA9IDE7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5NRVRIT0RfT1JfUkVTUE9OU0VfSFRUUF9WRVJTSU9OOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU3RhcnQgcGFyc2luZyBtZXRob2QuCiAgICAgICAgICAgIGlmICghX2lzVG9rZW5DaGFyKGJ5dGUpKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVxdWVzdCBtZXRob2QiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfbWV0aG9kLmFkZChieXRlKTsKICAgICAgICAgICAgaWYgKCFfcmVxdWVzdFBhcnNlcikgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlc3BvbnNlIGxpbmUiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVRVUVTVF9MSU5FX01FVEhPRDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5NRVRIT0RfT1JfUkVTUE9OU0VfSFRUUF9WRVJTSU9OOgogICAgICAgICAgaWYgKF9odHRwVmVyc2lvbkluZGV4IDwgX0NvbnN0LkhUVFAubGVuZ3RoICYmCiAgICAgICAgICAgICAgYnl0ZSA9PSBfQ29uc3QuSFRUUFtfaHR0cFZlcnNpb25JbmRleF0pIHsKICAgICAgICAgICAgLy8gQ29udGludWUgcGFyc2luZyBIVFRQIHZlcnNpb24uCiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICB9IGVsc2UgaWYgKF9odHRwVmVyc2lvbkluZGV4ID09IF9Db25zdC5IVFRQLmxlbmd0aCAmJgogICAgICAgICAgICAgIGJ5dGUgPT0gX0NoYXJDb2RlLlNMQVNIKSB7CiAgICAgICAgICAgIC8vIEhUVFAvIHBhcnNlZC4gQXMgbWV0aG9kIGlzIGEgdG9rZW4gdGhpcyBjYW5ub3QgYmUgYQogICAgICAgICAgICAvLyBtZXRob2QgYW55bW9yZS4KICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgICAgaWYgKF9yZXF1ZXN0UGFyc2VyKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVxdWVzdCBsaW5lIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFU1BPTlNFX0hUVFBfVkVSU0lPTjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIERpZCBub3QgcGFyc2UgSFRUUCB2ZXJzaW9uLiBFeHBlY3QgbWV0aG9kIGluc3RlYWQuCiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2h0dHBWZXJzaW9uSW5kZXg7IGkrKykgewogICAgICAgICAgICAgIF9tZXRob2QuYWRkKF9Db25zdC5IVFRQW2ldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuU1ApIHsKICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVRVUVTVF9MSU5FX1VSSTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfbWV0aG9kLmFkZChieXRlKTsKICAgICAgICAgICAgICBfaHR0cFZlcnNpb24gPSBfSHR0cFZlcnNpb24uVU5ERVRFUk1JTkVEOwogICAgICAgICAgICAgIGlmICghX3JlcXVlc3RQYXJzZXIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlc3BvbnNlIGxpbmUiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFUVVFU1RfTElORV9NRVRIT0Q7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVNQT05TRV9IVFRQX1ZFUlNJT046CiAgICAgICAgICBpZiAoX2h0dHBWZXJzaW9uSW5kZXggPCBfQ29uc3QuSFRUUDFET1QubGVuZ3RoKSB7CiAgICAgICAgICAgIC8vIENvbnRpbnVlIHBhcnNpbmcgSFRUUCB2ZXJzaW9uLgogICAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9Db25zdC5IVFRQMURPVFtfaHR0cFZlcnNpb25JbmRleF0pOwogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCsrOwogICAgICAgICAgfSBlbHNlIGlmIChfaHR0cFZlcnNpb25JbmRleCA9PSBfQ29uc3QuSFRUUDFET1QubGVuZ3RoICYmCiAgICAgICAgICAgICAgYnl0ZSA9PSBfQ2hhckNvZGUuT05FKSB7CiAgICAgICAgICAgIC8vIEhUVFAvMS4xIHBhcnNlZC4KICAgICAgICAgICAgX2h0dHBWZXJzaW9uID0gX0h0dHBWZXJzaW9uLkhUVFAxMTsKICAgICAgICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgIH0gZWxzZSBpZiAoX2h0dHBWZXJzaW9uSW5kZXggPT0gX0NvbnN0LkhUVFAxRE9ULmxlbmd0aCAmJgogICAgICAgICAgICAgIGJ5dGUgPT0gX0NoYXJDb2RlLlpFUk8pIHsKICAgICAgICAgICAgLy8gSFRUUC8xLjAgcGFyc2VkLgogICAgICAgICAgICBfaHR0cFZlcnNpb24gPSBfSHR0cFZlcnNpb24uSFRUUDEwOwogICAgICAgICAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgIH0gZWxzZSBpZiAoX2h0dHBWZXJzaW9uSW5kZXggPT0gX0NvbnN0LkhUVFAxRE9ULmxlbmd0aCArIDEpIHsKICAgICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuU1ApOwogICAgICAgICAgICAvLyBIVFRQIHZlcnNpb24gcGFyc2VkLgogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVTUE9OU0VfTElORV9TVEFUVVNfQ09ERTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlc3BvbnNlIGxpbmUiKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVFVRVNUX0xJTkVfTUVUSE9EOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNQKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVFVRVNUX0xJTkVfVVJJOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKF9Db25zdC5TRVBBUkFUT1JfTUFQW2J5dGVdIHx8CiAgICAgICAgICAgICAgICBieXRlID09IF9DaGFyQ29kZS5DUiB8fAogICAgICAgICAgICAgICAgYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXF1ZXN0IG1ldGhvZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9tZXRob2QuYWRkKGJ5dGUpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLlJFUVVFU1RfTElORV9VUkk6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuU1ApIHsKICAgICAgICAgICAgaWYgKF91cmlfb3JfcmVhc29uX3BocmFzZS5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlcXVlc3QgVVJJIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFUVVFU1RfTElORV9IVFRQX1ZFUlNJT047CiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4ID0gMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUiB8fCBieXRlID09IF9DaGFyQ29kZS5MRikgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlcXVlc3QgVVJJIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3VyaV9vcl9yZWFzb25fcGhyYXNlLmFkZChieXRlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVFVRVNUX0xJTkVfSFRUUF9WRVJTSU9OOgogICAgICAgICAgaWYgKF9odHRwVmVyc2lvbkluZGV4IDwgX0NvbnN0LkhUVFAxRE9ULmxlbmd0aCkgewogICAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9Db25zdC5IVFRQMTFbX2h0dHBWZXJzaW9uSW5kZXhdKTsKICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgIH0gZWxzZSBpZiAoX2h0dHBWZXJzaW9uSW5kZXggPT0gX0NvbnN0LkhUVFAxRE9ULmxlbmd0aCkgewogICAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuT05FKSB7CiAgICAgICAgICAgICAgLy8gSFRUUC8xLjEgcGFyc2VkLgogICAgICAgICAgICAgIF9odHRwVmVyc2lvbiA9IF9IdHRwVmVyc2lvbi5IVFRQMTE7CiAgICAgICAgICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlpFUk8pIHsKICAgICAgICAgICAgICAvLyBIVFRQLzEuMCBwYXJzZWQuCiAgICAgICAgICAgICAgX2h0dHBWZXJzaW9uID0gX0h0dHBWZXJzaW9uLkhUVFAxMDsKICAgICAgICAgICAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCsrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlc3BvbnNlIGxpbmUiKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFUVVFU1RfTElORV9FTkRJTkc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgICAgIF9tZXNzYWdlVHlwZSA9IF9NZXNzYWdlVHlwZS5SRVFVRVNUOwogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfU1RBUlQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVFVRVNUX0xJTkVfRU5ESU5HOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgX21lc3NhZ2VUeXBlID0gX01lc3NhZ2VUeXBlLlJFUVVFU1Q7CiAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1NUQVJUOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLlJFU1BPTlNFX0xJTkVfU1RBVFVTX0NPREU6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuU1ApIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFU1BPTlNFX0xJTkVfUkVBU09OX1BIUkFTRTsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgLy8gU29tZSBIVFRQIHNlcnZlcnMgZG9lcyBub3QgZm9sbG93IHRoZSBzcGVjLiBhbmQgc2VuZAogICAgICAgICAgICAvLyBcclxuIHJpZ2h0IGFmdGVyIHRoZSBzdGF0dXMgY29kZS4KICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFU1BPTlNFX0xJTkVfRU5ESU5HOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3N0YXR1c0NvZGVMZW5ndGgrKzsKICAgICAgICAgICAgaWYgKChieXRlIDwgMHgzMCAmJiAweDM5IDwgYnl0ZSkgfHwgX3N0YXR1c0NvZGVMZW5ndGggPiAzKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGUiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfc3RhdHVzQ29kZSA9IF9zdGF0dXNDb2RlICogMTAgKyBieXRlIC0gMHgzMDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLlJFU1BPTlNFX0xJTkVfUkVBU09OX1BIUkFTRToKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVTUE9OU0VfTElORV9FTkRJTkc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IgfHwgYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSByZWFzb24gcGhyYXNlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3VyaV9vcl9yZWFzb25fcGhyYXNlLmFkZChieXRlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVNQT05TRV9MSU5FX0VORElORzoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgIF9tZXNzYWdlVHlwZSA9PSBfTWVzc2FnZVR5cGUuUkVTUE9OU0U7CiAgICAgICAgICBpZiAoX3N0YXR1c0NvZGUgPCAxMDAgfHwgX3N0YXR1c0NvZGUgPiA1OTkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGUiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyByZXNwb25zZSB3aWxsIG5ldmVyIGhhdmUgYSBib2R5LgogICAgICAgICAgICBpZiAoX3N0YXR1c0NvZGUgPD0gMTk5IHx8CiAgICAgICAgICAgICAgICBfc3RhdHVzQ29kZSA9PSAyMDQgfHwKICAgICAgICAgICAgICAgIF9zdGF0dXNDb2RlID09IDMwNCkgewogICAgICAgICAgICAgIF9ub01lc3NhZ2VCb2R5ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9TVEFSVDsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfU1RBUlQ6CiAgICAgICAgICBfaGVhZGVycyA9IG5ldyBfSHR0cEhlYWRlcnModmVyc2lvbik7CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9FTkRJTkc7CiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkxGKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfRU5ESU5HOwogICAgICAgICAgICBfaW5kZXgtLTsgLy8gTWFrZSB0aGUgbmV3IHN0YXRlIHNlZSB0aGUgTEYgYWdhaW4uCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTdGFydCBvZiBuZXcgaGVhZGVyIGZpZWxkLgogICAgICAgICAgICBfaGVhZGVyRmllbGQuYWRkKF90b0xvd2VyQ2FzZUJ5dGUoYnl0ZSkpOwogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX0ZJRUxEOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkhFQURFUl9GSUVMRDoKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DT0xPTikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1ZBTFVFX1NUQVJUOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFfaXNUb2tlbkNoYXIoYnl0ZSkpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBoZWFkZXIgZmllbGQgbmFtZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9oZWFkZXJGaWVsZC5hZGQoX3RvTG93ZXJDYXNlQnl0ZShieXRlKSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuSEVBREVSX1ZBTFVFX1NUQVJUOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfVkFMVUVfRk9MRElOR19PUl9FTkRJTkc7CiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkxGKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfVkFMVUVfRk9MRF9PUl9FTkQ7CiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgIT0gX0NoYXJDb2RlLlNQICYmIGJ5dGUgIT0gX0NoYXJDb2RlLkhUKSB7CiAgICAgICAgICAgIC8vIFN0YXJ0IG9mIG5ldyBoZWFkZXIgdmFsdWUuCiAgICAgICAgICAgIF9oZWFkZXJWYWx1ZS5hZGQoYnl0ZSk7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfVkFMVUU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuSEVBREVSX1ZBTFVFOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfVkFMVUVfRk9MRElOR19PUl9FTkRJTkc7CiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkxGKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfVkFMVUVfRk9MRF9PUl9FTkQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfaGVhZGVyVmFsdWUuYWRkKGJ5dGUpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElORzoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfVkFMVUVfRk9MRF9PUl9FTkQ7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuSEVBREVSX1ZBTFVFX0ZPTERfT1JfRU5EOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNQIHx8IGJ5dGUgPT0gX0NoYXJDb2RlLkhUKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfVkFMVUVfU1RBUlQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBTdHJpbmcgaGVhZGVyRmllbGQgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoX2hlYWRlckZpZWxkKTsKICAgICAgICAgICAgU3RyaW5nIGhlYWRlclZhbHVlID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKF9oZWFkZXJWYWx1ZSk7CiAgICAgICAgICAgIGlmIChoZWFkZXJGaWVsZCA9PSAidHJhbnNmZXItZW5jb2RpbmciICYmCiAgICAgICAgICAgICAgICBfY2FzZUluc2Vuc2l0aXZlQ29tcGFyZSgiY2h1bmtlZCIuY29kZVVuaXRzLCBfaGVhZGVyVmFsdWUpKSB7CiAgICAgICAgICAgICAgX2NodW5rZWQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChoZWFkZXJGaWVsZCA9PSAiY29ubmVjdGlvbiIpIHsKICAgICAgICAgICAgICBMaXN0PFN0cmluZz4gdG9rZW5zID0gX3Rva2VuaXplRmllbGRWYWx1ZShoZWFkZXJWYWx1ZSk7CiAgICAgICAgICAgICAgZmluYWwgYm9vbCBpc1Jlc3BvbnNlID0gX21lc3NhZ2VUeXBlID09IF9NZXNzYWdlVHlwZS5SRVNQT05TRTsKICAgICAgICAgICAgICBmaW5hbCBib29sIGlzVXBncmFkZUNvZGUgPQogICAgICAgICAgICAgICAgICAoX3N0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy51cGdyYWRlUmVxdWlyZWQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAoX3N0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy5zd2l0Y2hpbmdQcm90b2NvbHMpOwogICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBmaW5hbCBib29sIGlzVXBncmFkZSA9IF9jYXNlSW5zZW5zaXRpdmVDb21wYXJlKAogICAgICAgICAgICAgICAgICAgICJ1cGdyYWRlIi5jb2RlVW5pdHMsIHRva2Vuc1tpXS5jb2RlVW5pdHMpOwogICAgICAgICAgICAgICAgaWYgKChpc1VwZ3JhZGUgJiYgIWlzUmVzcG9uc2UpIHx8CiAgICAgICAgICAgICAgICAgICAgKGlzVXBncmFkZSAmJiBpc1Jlc3BvbnNlICYmIGlzVXBncmFkZUNvZGUpKSB7CiAgICAgICAgICAgICAgICAgIF9jb25uZWN0aW9uVXBncmFkZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfaGVhZGVycy5fYWRkKGhlYWRlckZpZWxkLCB0b2tlbnNbaV0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfaGVhZGVycy5fYWRkKGhlYWRlckZpZWxkLCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX2hlYWRlckZpZWxkLmNsZWFyKCk7CiAgICAgICAgICAgIF9oZWFkZXJWYWx1ZS5jbGVhcigpOwoKICAgICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9FTkRJTkc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX0VORElORzsKICAgICAgICAgICAgICBfaW5kZXgtLTsgLy8gTWFrZSB0aGUgbmV3IHN0YXRlIHNlZSB0aGUgTEYgYWdhaW4uCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gU3RhcnQgb2YgbmV3IGhlYWRlciBmaWVsZC4KICAgICAgICAgICAgICBfaGVhZGVyRmllbGQuYWRkKF90b0xvd2VyQ2FzZUJ5dGUoYnl0ZSkpOwogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfRklFTEQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfRU5ESU5HOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgaWYgKF9oZWFkZXJzRW5kKCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LX1NJWkVfU1RBUlRJTkdfQ1I6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5DUik7CiAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRV9TVEFSVElOR19MRjsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5DSFVOS19TSVpFX1NUQVJUSU5HX0xGOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkU7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuQ0hVTktfU0laRToKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRV9FTkRJTkc7CiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNFTUlfQ09MT04pIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkVfRVhURU5TSU9OOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW50IHZhbHVlID0gX2V4cGVjdEhleERpZ2l0KGJ5dGUpOwogICAgICAgICAgICBfcmVtYWluaW5nQ29udGVudCA9IF9yZW1haW5pbmdDb250ZW50ICogMTYgKyB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5DSFVOS19TSVpFX0VYVEVOU0lPTjoKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRV9FTkRJTkc7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuQ0hVTktfU0laRV9FTkRJTkc6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5MRik7CiAgICAgICAgICBpZiAoX3JlbWFpbmluZ0NvbnRlbnQgPiAwKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5CT0RZOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LRURfQk9EWV9ET05FX0NSOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LRURfQk9EWV9ET05FX0NSOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuQ1IpOwogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LRURfQk9EWV9ET05FX0xGOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LRURfQk9EWV9ET05FX0xGOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgX3Jlc2V0KCk7CiAgICAgICAgICBfY2xvc2VJbmNvbWluZygpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkJPRFk6CiAgICAgICAgICAvLyBUaGUgYm9keSBpcyBub3QgaGFuZGxlZCBvbmUgYnl0ZSBhdCBhIHRpbWUgYnV0IGluIGJsb2Nrcy4KICAgICAgICAgIF9pbmRleC0tOwogICAgICAgICAgaW50IGRhdGFBdmFpbGFibGUgPSBfYnVmZmVyLmxlbmd0aCAtIF9pbmRleDsKICAgICAgICAgIGlmIChfcmVtYWluaW5nQ29udGVudCA+PSAwICYmIGRhdGFBdmFpbGFibGUgPiBfcmVtYWluaW5nQ29udGVudCkgewogICAgICAgICAgICBkYXRhQXZhaWxhYmxlID0gX3JlbWFpbmluZ0NvbnRlbnQ7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBBbHdheXMgcHJlc2VudCB0aGUgZGF0YSBhcyBhIHZpZXcuIFRoaXMgd2F5IHdlIGNhbiBoYW5kbGUgYWxsCiAgICAgICAgICAvLyBjYXNlcyBsaWtlIHRoaXMsIGFuZCB0aGUgdXNlciB3aWxsIG5vdCBleHBlcmllbmNlIGRpZmZlcmVudCBkYXRhCiAgICAgICAgICAvLyB0eXBlZCAod2hpY2ggY291bGQgbGVhZCB0byBwb2x5bW9ycGhpYyB1c2VyIGNvZGUpLgogICAgICAgICAgVWludDhMaXN0IGRhdGEgPSBuZXcgVWludDhMaXN0LnZpZXcoCiAgICAgICAgICAgICAgX2J1ZmZlci5idWZmZXIsIF9idWZmZXIub2Zmc2V0SW5CeXRlcyArIF9pbmRleCwgZGF0YUF2YWlsYWJsZSk7CiAgICAgICAgICBfYm9keUNvbnRyb2xsZXIuYWRkKGRhdGEpOwogICAgICAgICAgaWYgKF9yZW1haW5pbmdDb250ZW50ICE9IC0xKSB7CiAgICAgICAgICAgIF9yZW1haW5pbmdDb250ZW50IC09IGRhdGEubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgICAgX2luZGV4ICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgaWYgKF9yZW1haW5pbmdDb250ZW50ID09IDApIHsKICAgICAgICAgICAgaWYgKCFfY2h1bmtlZCkgewogICAgICAgICAgICAgIF9yZXNldCgpOwogICAgICAgICAgICAgIF9jbG9zZUluY29taW5nKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkVfU1RBUlRJTkdfQ1I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5GQUlMVVJFOgogICAgICAgICAgLy8gU2hvdWxkIGJlIHVucmVhY2hhYmxlLgogICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgLy8gU2hvdWxkIGJlIHVucmVhY2hhYmxlLgogICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgX3BhcnNlckNhbGxlZCA9IGZhbHNlOwogICAgaWYgKF9idWZmZXIgIT0gbnVsbCAmJiBfaW5kZXggPT0gX2J1ZmZlci5sZW5ndGgpIHsKICAgICAgLy8gSWYgYWxsIGRhdGEgaXMgcGFyc2VkIHJlbGVhc2UgdGhlIGJ1ZmZlciBhbmQgcmVzdW1lIHJlY2VpdmluZwogICAgICAvLyBkYXRhLgogICAgICBfcmVsZWFzZUJ1ZmZlcigpOwogICAgICBpZiAoX3N0YXRlICE9IF9TdGF0ZS5VUEdSQURFRCAmJiBfc3RhdGUgIT0gX1N0YXRlLkZBSUxVUkUpIHsKICAgICAgICBfc29ja2V0U3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9vbkRhdGEoVWludDhMaXN0IGJ1ZmZlcikgewogICAgX3NvY2tldFN1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgYXNzZXJ0KF9idWZmZXIgPT0gbnVsbCk7CiAgICBfYnVmZmVyID0gYnVmZmVyOwogICAgX2luZGV4ID0gMDsKICAgIF9wYXJzZSgpOwogIH0KCiAgdm9pZCBfb25Eb25lKCkgewogICAgLy8gb25Eb25lIGNhbmNlbHMgdGhlIHN1YnNjcmlwdGlvbi4KICAgIF9zb2NrZXRTdWJzY3JpcHRpb24gPSBudWxsOwogICAgaWYgKF9zdGF0ZSA9PSBfU3RhdGUuQ0xPU0VEIHx8IF9zdGF0ZSA9PSBfU3RhdGUuRkFJTFVSRSkgcmV0dXJuOwoKICAgIGlmIChfaW5jb21pbmcgIT0gbnVsbCkgewogICAgICBpZiAoX3N0YXRlICE9IF9TdGF0ZS5VUEdSQURFRCAmJgogICAgICAgICAgIShfc3RhdGUgPT0gX1N0YXRlLlNUQVJUICYmICFfcmVxdWVzdFBhcnNlcikgJiYKICAgICAgICAgICEoX3N0YXRlID09IF9TdGF0ZS5CT0RZICYmICFfY2h1bmtlZCAmJiBfdHJhbnNmZXJMZW5ndGggPT0gLTEpKSB7CiAgICAgICAgX2JvZHlDb250cm9sbGVyLmFkZEVycm9yKAogICAgICAgICAgICBuZXcgSHR0cEV4Y2VwdGlvbigiQ29ubmVjdGlvbiBjbG9zZWQgd2hpbGUgcmVjZWl2aW5nIGRhdGEiKSk7CiAgICAgIH0KICAgICAgX2Nsb3NlSW5jb21pbmcodHJ1ZSk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIElmIHRoZSBjb25uZWN0aW9uIGlzIGlkbGUgdGhlIEhUVFAgc3RyZWFtIGlzIGNsb3NlZC4KICAgIGlmIChfc3RhdGUgPT0gX1N0YXRlLlNUQVJUKSB7CiAgICAgIGlmICghX3JlcXVlc3RQYXJzZXIpIHsKICAgICAgICBfcmVwb3J0RXJyb3IobmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICJDb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgZnVsbCBoZWFkZXIgd2FzIHJlY2VpdmVkIikpOwogICAgICB9CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoX3N0YXRlID09IF9TdGF0ZS5VUEdSQURFRCkgewogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKF9zdGF0ZSA8IF9TdGF0ZS5GSVJTVF9CT0RZX1NUQVRFKSB7CiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5GQUlMVVJFOwogICAgICAvLyBSZXBvcnQgdGhlIGVycm9yIHRocm91Z2ggdGhlIGVycm9yIGNhbGxiYWNrIGlmIGFueS4gT3RoZXJ3aXNlCiAgICAgIC8vIHRocm93IHRoZSBlcnJvci4KICAgICAgX3JlcG9ydEVycm9yKG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgIkNvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSBmdWxsIGhlYWRlciB3YXMgcmVjZWl2ZWQiKSk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIV9jaHVua2VkICYmIF90cmFuc2Zlckxlbmd0aCA9PSAtMSkgewogICAgICBfc3RhdGUgPSBfU3RhdGUuQ0xPU0VEOwogICAgfSBlbHNlIHsKICAgICAgX3N0YXRlID0gX1N0YXRlLkZBSUxVUkU7CiAgICAgIC8vIFJlcG9ydCB0aGUgZXJyb3IgdGhyb3VnaCB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgYW55LiBPdGhlcndpc2UKICAgICAgLy8gdGhyb3cgdGhlIGVycm9yLgogICAgICBfcmVwb3J0RXJyb3IoCiAgICAgICAgICBuZXcgSHR0cEV4Y2VwdGlvbigiQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGZ1bGwgYm9keSB3YXMgcmVjZWl2ZWQiKSk7CiAgICB9CiAgICBfY29udHJvbGxlci5jbG9zZSgpOwogIH0KCiAgU3RyaW5nIGdldCB2ZXJzaW9uIHsKICAgIHN3aXRjaCAoX2h0dHBWZXJzaW9uKSB7CiAgICAgIGNhc2UgX0h0dHBWZXJzaW9uLkhUVFAxMDoKICAgICAgICByZXR1cm4gIjEuMCI7CiAgICAgIGNhc2UgX0h0dHBWZXJzaW9uLkhUVFAxMToKICAgICAgICByZXR1cm4gIjEuMSI7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGludCBnZXQgbWVzc2FnZVR5cGUgPT4gX21lc3NhZ2VUeXBlOwogIGludCBnZXQgdHJhbnNmZXJMZW5ndGggPT4gX3RyYW5zZmVyTGVuZ3RoOwogIGJvb2wgZ2V0IHVwZ3JhZGUgPT4gX2Nvbm5lY3Rpb25VcGdyYWRlICYmIF9zdGF0ZSA9PSBfU3RhdGUuVVBHUkFERUQ7CiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb24gPT4gX3BlcnNpc3RlbnRDb25uZWN0aW9uOwoKICB2b2lkIHNldCBpc0hlYWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlKSBfbm9NZXNzYWdlQm9keSA9IHRydWU7CiAgfQoKICBfSHR0cERldGFjaGVkSW5jb21pbmcgZGV0YWNoSW5jb21pbmcoKSB7CiAgICAvLyBTaW11bGF0ZSBkZXRhY2hlZCBieSBtYXJraW5nIGFzIHVwZ3JhZGVkLgogICAgX3N0YXRlID0gX1N0YXRlLlVQR1JBREVEOwogICAgcmV0dXJuIG5ldyBfSHR0cERldGFjaGVkSW5jb21pbmcoX3NvY2tldFN1YnNjcmlwdGlvbiwgcmVhZFVucGFyc2VkRGF0YSgpKTsKICB9CgogIFVpbnQ4TGlzdCByZWFkVW5wYXJzZWREYXRhKCkgewogICAgaWYgKF9idWZmZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoX2luZGV4ID09IF9idWZmZXIubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIHZhciByZXN1bHQgPSBfYnVmZmVyLnN1Ymxpc3QoX2luZGV4KTsKICAgIF9yZWxlYXNlQnVmZmVyKCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBfcmVzZXQoKSB7CiAgICBpZiAoX3N0YXRlID09IF9TdGF0ZS5VUEdSQURFRCkgcmV0dXJuOwogICAgX3N0YXRlID0gX1N0YXRlLlNUQVJUOwogICAgX21lc3NhZ2VUeXBlID0gX01lc3NhZ2VUeXBlLlVOREVURVJNSU5FRDsKICAgIF9oZWFkZXJGaWVsZC5jbGVhcigpOwogICAgX2hlYWRlclZhbHVlLmNsZWFyKCk7CiAgICBfbWV0aG9kLmNsZWFyKCk7CiAgICBfdXJpX29yX3JlYXNvbl9waHJhc2UuY2xlYXIoKTsKCiAgICBfc3RhdHVzQ29kZSA9IDA7CiAgICBfc3RhdHVzQ29kZUxlbmd0aCA9IDA7CgogICAgX2h0dHBWZXJzaW9uID0gX0h0dHBWZXJzaW9uLlVOREVURVJNSU5FRDsKICAgIF90cmFuc2Zlckxlbmd0aCA9IC0xOwogICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gZmFsc2U7CiAgICBfY29ubmVjdGlvblVwZ3JhZGUgPSBmYWxzZTsKICAgIF9jaHVua2VkID0gZmFsc2U7CgogICAgX25vTWVzc2FnZUJvZHkgPSBmYWxzZTsKICAgIF9yZW1haW5pbmdDb250ZW50ID0gLTE7CgogICAgX2hlYWRlcnMgPSBudWxsOwogIH0KCiAgdm9pZCBfcmVsZWFzZUJ1ZmZlcigpIHsKICAgIF9idWZmZXIgPSBudWxsOwogICAgX2luZGV4ID0gbnVsbDsKICB9CgogIHN0YXRpYyBib29sIF9pc1Rva2VuQ2hhcihpbnQgYnl0ZSkgewogICAgcmV0dXJuIGJ5dGUgPiAzMSAmJiBieXRlIDwgMTI4ICYmICFfQ29uc3QuU0VQQVJBVE9SX01BUFtieXRlXTsKICB9CgogIHN0YXRpYyBib29sIF9pc1ZhbHVlQ2hhcihpbnQgYnl0ZSkgewogICAgcmV0dXJuIChieXRlID4gMzEgJiYgYnl0ZSA8IDEyOCkgfHwKICAgICAgICAoYnl0ZSA9PSBfQ2hhckNvZGUuU1ApIHx8CiAgICAgICAgKGJ5dGUgPT0gX0NoYXJDb2RlLkhUKTsKICB9CgogIHN0YXRpYyBMaXN0PFN0cmluZz4gX3Rva2VuaXplRmllbGRWYWx1ZShTdHJpbmcgaGVhZGVyVmFsdWUpIHsKICAgIExpc3Q8U3RyaW5nPiB0b2tlbnMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBpbnQgc3RhcnQgPSAwOwogICAgaW50IGluZGV4ID0gMDsKICAgIHdoaWxlIChpbmRleCA8IGhlYWRlclZhbHVlLmxlbmd0aCkgewogICAgICBpZiAoaGVhZGVyVmFsdWVbaW5kZXhdID09ICIsIikgewogICAgICAgIHRva2Vucy5hZGQoaGVhZGVyVmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkpOwogICAgICAgIHN0YXJ0ID0gaW5kZXggKyAxOwogICAgICB9IGVsc2UgaWYgKGhlYWRlclZhbHVlW2luZGV4XSA9PSAiICIgfHwgaGVhZGVyVmFsdWVbaW5kZXhdID09ICJcdCIpIHsKICAgICAgICBzdGFydCsrOwogICAgICB9CiAgICAgIGluZGV4Kys7CiAgICB9CiAgICB0b2tlbnMuYWRkKGhlYWRlclZhbHVlLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpKTsKICAgIHJldHVybiB0b2tlbnM7CiAgfQoKICBzdGF0aWMgaW50IF90b0xvd2VyQ2FzZUJ5dGUoaW50IHgpIHsKICAgIC8vIE9wdGltaXplZCB2ZXJzaW9uOgogICAgLy8gIC0gIDB4NDEgaXMgJ0EnCiAgICAvLyAgLSAgMHg3ZiBpcyBBU0NJSSBtYXNrCiAgICAvLyAgLSAgMjYgaXMgdGhlIG51bWJlciBvZiBhbHBoYSBjaGFyYWN0ZXJzLgogICAgLy8gIC0gIDB4MjAgaXMgdGhlIGRlbHRhIGJldHdlZW4gbG93ZXIgYW5kIHVwcGVyIGNoYXJzLgogICAgcmV0dXJuICgoKHggLSAweDQxKSAmIDB4N2YpIDwgMjYpID8gKHggfCAweDIwKSA6IHg7CiAgfQoKICAvLyBleHBlY3RlZCBzaG91bGQgYWxyZWFkeSBiZSBsb3dlcmNhc2UuCiAgYm9vbCBfY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShMaXN0PGludD4gZXhwZWN0ZWQsIExpc3Q8aW50PiB2YWx1ZSkgewogICAgaWYgKGV4cGVjdGVkLmxlbmd0aCAhPSB2YWx1ZS5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGV4cGVjdGVkW2ldICE9IF90b0xvd2VyQ2FzZUJ5dGUodmFsdWVbaV0pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGludCBfZXhwZWN0KGludCB2YWwxLCBpbnQgdmFsMikgewogICAgaWYgKHZhbDEgIT0gdmFsMikgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIEhUVFAiKTsKICAgIH0KICB9CgogIGludCBfZXhwZWN0SGV4RGlnaXQoaW50IGJ5dGUpIHsKICAgIGlmICgweDMwIDw9IGJ5dGUgJiYgYnl0ZSA8PSAweDM5KSB7CiAgICAgIHJldHVybiBieXRlIC0gMHgzMDsgLy8gMCAtIDkKICAgIH0gZWxzZSBpZiAoMHg0MSA8PSBieXRlICYmIGJ5dGUgPD0gMHg0NikgewogICAgICByZXR1cm4gYnl0ZSAtIDB4NDEgKyAxMDsgLy8gQSAtIEYKICAgIH0gZWxzZSBpZiAoMHg2MSA8PSBieXRlICYmIGJ5dGUgPD0gMHg2NikgewogICAgICByZXR1cm4gYnl0ZSAtIDB4NjEgKyAxMDsgLy8gYSAtIGYKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgSFRUUCIpOwogICAgfQogIH0KCiAgdm9pZCBfY3JlYXRlSW5jb21pbmcoaW50IHRyYW5zZmVyTGVuZ3RoKSB7CiAgICBhc3NlcnQoX2luY29taW5nID09IG51bGwpOwogICAgYXNzZXJ0KF9ib2R5Q29udHJvbGxlciA9PSBudWxsKTsKICAgIGFzc2VydCghX2JvZHlQYXVzZWQpOwogICAgdmFyIGluY29taW5nOwogICAgX2JvZHlDb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiAoKSB7CiAgICAgICAgICBpZiAoaW5jb21pbmcgIT0gX2luY29taW5nKSByZXR1cm47CiAgICAgICAgICBhc3NlcnQoX2JvZHlQYXVzZWQpOwogICAgICAgICAgX2JvZHlQYXVzZWQgPSBmYWxzZTsKICAgICAgICAgIF9wYXVzZVN0YXRlQ2hhbmdlZCgpOwogICAgICAgIH0sCiAgICAgICAgb25QYXVzZTogKCkgewogICAgICAgICAgaWYgKGluY29taW5nICE9IF9pbmNvbWluZykgcmV0dXJuOwogICAgICAgICAgYXNzZXJ0KCFfYm9keVBhdXNlZCk7CiAgICAgICAgICBfYm9keVBhdXNlZCA9IHRydWU7CiAgICAgICAgICBfcGF1c2VTdGF0ZUNoYW5nZWQoKTsKICAgICAgICB9LAogICAgICAgIG9uUmVzdW1lOiAoKSB7CiAgICAgICAgICBpZiAoaW5jb21pbmcgIT0gX2luY29taW5nKSByZXR1cm47CiAgICAgICAgICBhc3NlcnQoX2JvZHlQYXVzZWQpOwogICAgICAgICAgX2JvZHlQYXVzZWQgPSBmYWxzZTsKICAgICAgICAgIF9wYXVzZVN0YXRlQ2hhbmdlZCgpOwogICAgICAgIH0sCiAgICAgICAgb25DYW5jZWw6ICgpIHsKICAgICAgICAgIGlmIChpbmNvbWluZyAhPSBfaW5jb21pbmcpIHJldHVybjsKICAgICAgICAgIGlmIChfc29ja2V0U3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIH0KICAgICAgICAgIF9jbG9zZUluY29taW5nKHRydWUpOwogICAgICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgICB9KTsKICAgIGluY29taW5nID0gX2luY29taW5nID0KICAgICAgICBuZXcgX0h0dHBJbmNvbWluZyhfaGVhZGVycywgdHJhbnNmZXJMZW5ndGgsIF9ib2R5Q29udHJvbGxlci5zdHJlYW0pOwogICAgX2JvZHlQYXVzZWQgPSB0cnVlOwogICAgX3BhdXNlU3RhdGVDaGFuZ2VkKCk7CiAgfQoKICB2b2lkIF9jbG9zZUluY29taW5nKFtib29sIGNsb3NpbmcgPSBmYWxzZV0pIHsKICAgIC8vIElnbm9yZSBtdWx0aXBsZSBjbG9zZSAoY2FuIGhhcHBlbiBpbiByZS1lbnRyYW5jZSkuCiAgICBpZiAoX2luY29taW5nID09IG51bGwpIHJldHVybjsKICAgIHZhciB0bXAgPSBfaW5jb21pbmc7CiAgICB0bXAuY2xvc2UoY2xvc2luZyk7CiAgICBfaW5jb21pbmcg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ZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKY29uc3QgU3RyaW5nIF9EQVJUX1NFU1NJT05fSUQgPSAiREFSVFNFU1NJRCI7CgovLyBBIF9IdHRwU2Vzc2lvbiBpcyBhIG5vZGUgaW4gYSBkb3VibGUtbGlua2VkIGxpc3QsIHdpdGggX25leHQgYW5kIF9wcmV2IGJlaW5nCi8vIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBwb2ludGVycy4KY2xhc3MgX0h0dHBTZXNzaW9uIGltcGxlbWVudHMgSHR0cFNlc3Npb24gewogIC8vIERlc3Ryb3llZCBtYXJrZWQuIFVzZWQgYnkgdGhlIGh0dHAgY29ubmVjdGlvbiB0byBzZWUgaWYgYSBzZXNzaW9uIGlzIHZhbGlkLgogIGJvb2wgX2Rlc3Ryb3llZCA9IGZhbHNlOwogIGJvb2wgX2lzTmV3ID0gdHJ1ZTsKICBEYXRlVGltZSBfbGFzdFNlZW47CiAgRnVuY3Rpb24gX3RpbWVvdXRDYWxsYmFjazsKICBfSHR0cFNlc3Npb25NYW5hZ2VyIF9zZXNzaW9uTWFuYWdlcjsKICAvLyBQb2ludGVycyBpbiB0aW1lb3V0IHF1ZXVlLgogIF9IdHRwU2Vzc2lvbiBfcHJldjsKICBfSHR0cFNlc3Npb24gX25leHQ7CiAgZmluYWwgU3RyaW5nIGlkOwoKICBmaW5hbCBNYXAgX2RhdGEgPSBuZXcgSGFzaE1hcCgpOwoKICBfSHR0cFNlc3Npb24odGhpcy5fc2Vzc2lvbk1hbmFnZXIsIHRoaXMuaWQpIDogX2xhc3RTZWVuID0gbmV3IERhdGVUaW1lLm5vdygpOwoKICB2b2lkIGRlc3Ryb3koKSB7CiAgICBfZGVzdHJveWVkID0gdHJ1ZTsKICAgIF9zZXNzaW9uTWFuYWdlci5fcmVtb3ZlRnJvbVRpbWVvdXRRdWV1ZSh0aGlzKTsKICAgIF9zZXNzaW9uTWFuYWdlci5fc2Vzc2lvbnMucmVtb3ZlKGlkKTsKICB9CgogIC8vIE1hcmsgdGhlIHNlc3Npb24gYXMgc2Vlbi4gVGhpcyB3aWxsIHJlc2V0IHRoZSB0aW1lb3V0IGFuZCBtb3ZlIHRoZSBub2RlIHRvCiAgLy8gdGhlIGVuZCBvZiB0aGUgdGltZW91dCBxdWV1ZS4KICB2b2lkIF9tYXJrU2VlbigpIHsKICAgIF9sYXN0U2VlbiA9IG5ldyBEYXRlVGltZS5ub3coKTsKICAgIF9zZXNzaW9uTWFuYWdlci5fYnVtcFRvRW5kKHRoaXMpOwogIH0KCiAgRGF0ZVRpbWUgZ2V0IGxhc3RTZWVuID0+IF9sYXN0U2VlbjsKCiAgYm9vbCBnZXQgaXNOZXcgPT4gX2lzTmV3OwoKICB2b2lkIHNldCBvblRpbWVvdXQodm9pZCBjYWxsYmFjaygpKSB7CiAgICBfdGltZW91dENhbGxiYWNrID0gY2FsbGJhY2s7CiAgfQoKICAvLyBNYXAgaW1wbGVtZW50YXRpb246CiAgYm9vbCBjb250YWluc1ZhbHVlKHZhbHVlKSA9PiBfZGF0YS5jb250YWluc1ZhbHVlKHZhbHVlKTsKICBib29sIGNvbnRhaW5zS2V5KGtleSkgPT4gX2RhdGEuY29udGFpbnNLZXkoa2V5KTsKICBvcGVyYXRvciBbXShrZXkpID0+IF9kYXRhW2tleV07CiAgdm9pZCBvcGVyYXRvciBbXT0oa2V5LCB2YWx1ZSkgewogICAgX2RhdGFba2V5XSA9IHZhbHVlOwogIH0KCiAgcHV0SWZBYnNlbnQoa2V5LCBpZkFic2VudCkgPT4gX2RhdGEucHV0SWZBYnNlbnQoa2V5LCBpZkFic2VudCk7CiAgYWRkQWxsKE1hcCBvdGhlcikgPT4gX2RhdGEuYWRkQWxsKG90aGVyKTsKICByZW1vdmUoa2V5KSA9PiBfZGF0YS5yZW1vdmUoa2V5KTsKICB2b2lkIGNsZWFyKCkgewogICAgX2RhdGEuY2xlYXIoKTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoa2V5LCB2YWx1ZSkpIHsKICAgIF9kYXRhLmZvckVhY2goZik7CiAgfQoKICBJdGVyYWJsZTxNYXBFbnRyeT4gZ2V0IGVudHJpZXMgPT4gX2RhdGEuZW50cmllczsKCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PiBlbnRyaWVzKSB7CiAgICBfZGF0YS5hZGRFbnRyaWVzKGVudHJpZXMpOwogIH0KCiAgTWFwPEssIFY+IG1hcDxLLCBWPihNYXBFbnRyeTxLLCBWPiB0cmFuc2Zvcm0oa2V5LCB2YWx1ZSkpID0+CiAgICAgIF9kYXRhLm1hcCh0cmFuc2Zvcm0pOwoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChrZXksIHZhbHVlKSkgewogICAgX2RhdGEucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQoKICBNYXA8SywgVj4gY2FzdDxLLCBWPigpID0+IF9kYXRhLmNhc3Q8SywgVj4oKTsKICB1cGRhdGUoa2V5LCB1cGRhdGUodmFsdWUpLCB7aWZBYnNlbnQoKX0pID0+CiAgICAgIF9kYXRhLnVwZGF0ZShrZXksIHVwZGF0ZSwgaWZBYnNlbnQ6IGlmQWJzZW50KTsKCiAgdm9pZCB1cGRhdGVBbGwodXBkYXRlKGtleSwgdmFsdWUpKSB7CiAgICBfZGF0YS51cGRhdGVBbGwodXBkYXRlKTsKICB9CgogIEl0ZXJhYmxlIGdldCBrZXlzID0+IF9kYXRhLmtleXM7CiAgSXRlcmFibGUgZ2V0IHZhbHVlcyA9PiBfZGF0YS52YWx1ZXM7CiAgaW50IGdldCBsZW5ndGggPT4gX2RhdGEubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2RhdGEuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9kYXRhLmlzTm90RW1wdHk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICdIdHRwU2Vzc2lvbiBpZDokaWQgJF9kYXRhJzsKfQoKLy8gUHJpdmF0ZSBjbGFzcyB1c2VkIHRvIG1hbmFnZSBhbGwgdGhlIGFjdGl2ZSBzZXNzaW9ucy4gVGhlIHNlc3Npb25zIGFyZSBzdG9yZWQKLy8gaW4gdHdvIHdheXM6Ci8vCi8vICAqIEluIGEgbWFwLCBtYXBwaW5nIGZyb20gSUQgdG8gSHR0cFNlc3Npb24uCi8vICAqIEluIGEgbGlua2VkIGxpc3QsIHVzZWQgYXMgYSB0aW1lb3V0IHF1ZXVlLgpjbGFzcyBfSHR0cFNlc3Npb25NYW5hZ2VyIHsKICBNYXA8U3RyaW5nLCBfSHR0cFNlc3Npb24+IF9zZXNzaW9uczsKICBpbnQgX3Nlc3Npb25UaW1lb3V0ID0gMjAgKiA2MDsgLy8gMjAgbWlucy4KICBfSHR0cFNlc3Npb24gX2hlYWQ7CiAgX0h0dHBTZXNzaW9uIF90YWlsOwogIFRpbWVyIF90aW1lcjsKCiAgX0h0dHBTZXNzaW9uTWFuYWdlcigpIDogX3Nlc3Npb25zID0ge307CgogIFN0cmluZyBjcmVhdGVTZXNzaW9uSWQoKSB7CiAgICBjb25zdCBpbnQgX0tFWV9MRU5HVEggPSAxNjsgLy8gMTI4IGJpdHMuCiAgICB2YXIgZGF0YSA9IF9DcnlwdG9VdGlscy5nZXRSYW5kb21CeXRlcyhfS0VZX0xFTkdUSCk7CiAgICByZXR1cm4gX0NyeXB0b1V0aWxzLmJ5dGVzVG9IZXgoZGF0YSk7CiAgfQoKICBfSHR0cFNlc3Npb24gZ2V0U2Vzc2lvbihTdHJpbmcgaWQpID0+IF9zZXNzaW9uc1tpZF07CgogIF9IdHRwU2Vzc2lvbiBjcmVhdGVTZXNzaW9uKCkgewogICAgdmFyIGlkID0gY3JlYXRlU2Vzc2lvbklkKCk7CiAgICAvLyBUT0RPKGFqb2huc2VuKTogQ29uc2lkZXIgYWRkaW5nIGEgbGltaXQgYW5kIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KICAgIC8vIFNob3VsZCBiZSB2ZXJ5IHVubGlrZWx5IGhvd2V2ZXIuCiAgICB3aGlsZSAoX3Nlc3Npb25zLmNvbnRhaW5zS2V5KGlkKSkgewogICAgICBpZCA9IGNyZWF0ZVNlc3Npb25JZCgpOwogICAgfQogICAgdmFyIHNlc3Npb24gPSBfc2Vzc2lvbnNbaWRdID0gbmV3IF9IdHRwU2Vzc2lvbih0aGlzLCBpZCk7CiAgICBfYWRkVG9UaW1lb3V0UXVldWUoc2Vzc2lvbik7CiAgICByZXR1cm4gc2Vzc2lvbjsKICB9CgogIHZvaWQgc2V0IHNlc3Npb25UaW1lb3V0KGludCB0aW1lb3V0KSB7CiAgICBfc2Vzc2lvblRpbWVvdXQgPSB0aW1lb3V0OwogICAgX3N0b3BUaW1lcigpOwogICAgX3N0YXJ0VGltZXIoKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc3RvcFRpbWVyKCk7CiAgfQoKICB2b2lkIF9idW1wVG9FbmQoX0h0dHBTZXNzaW9uIHNlc3Npb24pIHsKICAgIF9yZW1vdmVGcm9tVGltZW91dFF1ZXVlKHNlc3Npb24pOwogICAgX2FkZFRvVGltZW91dFF1ZXVlKHNlc3Npb24pOwogIH0KCiAgdm9pZCBfYWRkVG9UaW1lb3V0UXVldWUoX0h0dHBTZXNzaW9uIHNlc3Npb24pIHsKICAgIGlmIChfaGVhZCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChfdGFpbCA9PSBudWxsKTsKICAgICAgX3RhaWwgPSBfaGVhZCA9IHNlc3Npb247CiAgICAgIF9zdGFydFRpbWVyKCk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoX3RpbWVyICE9IG51bGwpOwogICAgICBhc3NlcnQoX3RhaWwgIT0gbnVsbCk7CiAgICAgIC8vIEFkZCB0byBlbmQuCiAgICAgIF90YWlsLl9uZXh0ID0gc2Vzc2lvbjsKICAgICAgc2Vzc2lvbi5fcHJldiA9IF90YWlsOwogICAgICBfdGFpbCA9IHNlc3Npb247CiAgICB9CiAgfQoKICB2b2lkIF9yZW1vdmVGcm9tVGltZW91dFF1ZXVlKF9IdHRwU2Vzc2lvbiBzZXNzaW9uKSB7CiAgICBpZiAoc2Vzc2lvbi5fbmV4dCAhPSBudWxsKSB7CiAgICAgIHNlc3Npb24uX25leHQuX3ByZXYgPSBzZXNzaW9uLl9wcmV2OwogICAgfQogICAgaWYgKHNlc3Npb24uX3ByZXYgIT0gbnVsbCkgewogICAgICBzZXNzaW9uLl9wcmV2Ll9uZXh0ID0gc2Vzc2lvbi5fbmV4dDsKICAgIH0KICAgIGlmIChfaGVhZCA9PSBzZXNzaW9uKSB7CiAgICAgIC8vIFdlIHJlbW92ZWQgdGhlIGhlYWQgZWxlbWVudCwgc3RhcnQgbmV3IHRpbWVyLgogICAgICBfaGVhZCA9IHNlc3Npb24uX25leHQ7CiAgICAgIF9zdG9wVGltZXIoKTsKICAgICAgX3N0YXJ0VGltZXIoKTsKICAgIH0KICAgIGlmIChfdGFpbCA9PSBzZXNzaW9uKSB7CiAgICAgIF90YWlsID0gc2Vzc2lvbi5fcHJldjsKICAgIH0KICAgIHNlc3Npb24uX25leHQgPSBzZXNzaW9uLl9wcmV2ID0gbnVsbDsKICB9CgogIHZvaWQgX3RpbWVyVGltZW91dCgpIHsKICAgIF9zdG9wVGltZXIoKTsgLy8gQ2xlYXIgdGltZXIuCiAgICBhc3NlcnQoX2hlYWQgIT0gbnVsbCk7CiAgICB2YXIgc2Vzc2lvbiA9IF9oZWFkOwogICAgc2Vzc2lvbi5kZXN0cm95KCk7IC8vIFdpbGwgcmVtb3ZlIHRoZSBzZXNzaW9uIGZyb20gdGltZW91dCBxdWV1ZSBhbmQgbWFwLgogICAgaWYgKHNlc3Npb24uX3RpbWVvdXRDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIHNlc3Npb24uX3RpbWVvdXRDYWxsYmFjaygpOwogICAgfQogIH0KCiAgdm9pZCBfc3RhcnRUaW1lcigpIHsKICAgIGFzc2VydChfdGltZXIgPT0gbnVsbCk7CiAgICBpZiAoX2hlYWQgIT0gbnVsbCkgewogICAgICBpbnQgc2Vjb25kcyA9IG5ldyBEYXRlVGltZS5ub3coKS5kaWZmZXJlbmNlKF9oZWFkLmxhc3RTZWVuKS5pblNlY29uZHM7CiAgICAgIF90aW1lciA9IG5ldyBUaW1lcigKICAgICAgICAgIG5ldyBEdXJhdGlvbihzZWNvbmRzOiBfc2Vzc2lvblRpbWVvdXQgLSBzZWNvbmRzKSwgX3RpbWVyVGltZW91dCk7CiAgICB9CiAgfQoKICB2b2lkIF9zdG9wVGltZXIoKSB7CiAgICBpZiAoX3RpbWVyICE9IG51bGwpIHsKICAgICAgX3RpbWVyLmNhbmNlbCgpOwogICAgICBfdGltZXIgPSBudWxsOwogICAgfQogIH0KfQqAzwBOTjwBFAEuAVAjLFEbFhYdJyAWFhMBIwFQARMXMyoEAVAjFSQmBAEmARwBKCEEARk7MyIiGAQBQiwkERMEASUWBAEzATAfBAE/HAEsHQQBMC41AScdBAEjJyIlKwE0AgFREAMwMRwnLRYWEAEqAR0tOSoEATcBISBKKCgeBj4hFAQBKR8SEwQBERIEASomIQQBMhkdHxUNHh0VHR0XBgQBNyErBiErBhw3HRQVBhwdBioEARkiGxlOLCIGBAEXHBlNGkwGBAEWGhcVBgQCARxkYXJ0Ol9odHRwL2h0dHBfc2Vzc2lvbi5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9faHR0cC9vdmVycmlkZXMuZGFydJCDLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faHR0cDsKCmZpbmFsIF9odHRwT3ZlcnJpZGVzVG9rZW4gPSBuZXcgT2JqZWN0KCk7Cgpjb25zdCBfYXN5bmNSdW5ab25lZCA9IHJ1blpvbmVkOwoKLy8vIFRoaXMgY2xhc3MgZmFjaWxpdGF0ZXMgb3ZlcnJpZGluZyBbSHR0cENsaWVudF0gd2l0aCBhIG1vY2sgaW1wbGVtZW50YXRpb24uCi8vLyBJdCBzaG91bGQgYmUgZXh0ZW5kZWQgYnkgYW5vdGhlciBjbGFzcyBpbiBjbGllbnQgY29kZSB3aXRoIG92ZXJyaWRlcwovLy8gdGhhdCBjb25zdHJ1Y3QgYSBtb2NrIGltcGxlbWVudGF0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBiYXNlIGNsYXNzCi8vLyBkZWZhdWx0cyB0byB0aGUgYWN0dWFsIFtIdHRwQ2xpZW50XSBpbXBsZW1lbnRhdGlvbi4gRm9yIGV4YW1wbGU6Ci8vLwovLy8gYGBgCi8vLyBjbGFzcyBNeUh0dHBDbGllbnQgaW1wbGVtZW50cyBIdHRwQ2xpZW50IHsKLy8vICAgLi4uCi8vLyAgIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBIdHRwQ2xpZW50IGludGVyZmFjZQovLy8gICAuLi4KLy8vIH0KLy8vCi8vLyBtYWluKCkgewovLy8gICBIdHRwT3ZlcnJpZGVzLnJ1blpvbmVkKCgpIHsKLy8vICAgICAuLi4KLy8vICAgICAvLyBPcGVyYXRpb25zIHdpbGwgdXNlIE15SHR0cENsaWVudCBpbnN0ZWFkIG9mIHRoZSByZWFsIEh0dHBDbGllbnQKLy8vICAgICAvLyBpbXBsZW1lbnRhdGlvbiB3aGVuZXZlciBIdHRwQ2xpZW50IGlzIHVzZWQuCi8vLyAgICAgLi4uCi8vLyAgIH0sIGNyZWF0ZUh0dHBDbGllbnQ6IChTZWN1cml0eUNvbnRleHQgYykgPT4gbmV3IE15SHR0cENsaWVudChjKSk7Ci8vLyB9Ci8vLyBgYGAKYWJzdHJhY3QgY2xhc3MgSHR0cE92ZXJyaWRlcyB7CiAgc3RhdGljIEh0dHBPdmVycmlkZXMgX2dsb2JhbDsKCiAgc3RhdGljIEh0dHBPdmVycmlkZXMgZ2V0IGN1cnJlbnQgewogICAgcmV0dXJuIFpvbmUuY3VycmVudFtfaHR0cE92ZXJyaWRlc1Rva2VuXSA/PyBfZ2xvYmFsOwogIH0KCiAgLy8vIFRoZSBbSHR0cE92ZXJyaWRlc10gdG8gdXNlIGluIHRoZSByb290IFtab25lXS4KICAvLy8KICAvLy8gVGhlc2UgYXJlIHRoZSBbSHR0cE92ZXJyaWRlc10gdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHJvb3QgWm9uZSwgYW5kIGluCiAgLy8vIFpvbmUncyB0aGF0IGRvIG5vdCBzZXQgW0h0dHBPdmVycmlkZXNdIGFuZCB3aG9zZSBhbmNlc3RvcnMgdXAgdG8gdGhlIHJvb3QKICAvLy8gWm9uZSBkbyBub3Qgc2V0IFtIdHRwT3ZlcnJpZGVzXS4KICBzdGF0aWMgc2V0IGdsb2JhbChIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcykgewogICAgX2dsb2JhbCA9IG92ZXJyaWRlczsKICB9CgogIC8vLyBSdW5zIFtib2R5XSBpbiBhIGZyZXNoIFtab25lXSB1c2luZyB0aGUgcHJvdmlkZWQgb3ZlcnJpZGVzLgogIHN0YXRpYyBSIHJ1blpvbmVkPFI+KFIgYm9keSgpLAogICAgICB7SHR0cENsaWVudCBGdW5jdGlvbihTZWN1cml0eUNvbnRleHQpIGNyZWF0ZUh0dHBDbGllbnQsCiAgICAgIFN0cmluZyBGdW5jdGlvbihVcmkgdXJpLCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50KQogICAgICAgICAgZmluZFByb3h5RnJvbUVudmlyb25tZW50LAogICAgICBab25lU3BlY2lmaWNhdGlvbiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgRnVuY3Rpb24gb25FcnJvcn0pIHsKICAgIEh0dHBPdmVycmlkZXMgb3ZlcnJpZGVzID0KICAgICAgICBuZXcgX0h0dHBPdmVycmlkZXNTY29wZShjcmVhdGVIdHRwQ2xpZW50LCBmaW5kUHJveHlGcm9tRW52aXJvbm1lbnQpOwogICAgcmV0dXJuIF9hc3luY1J1blpvbmVkPFI+KGJvZHksCiAgICAgICAgem9uZVZhbHVlczoge19odHRwT3ZlcnJpZGVzVG9rZW46IG92ZXJyaWRlc30sCiAgICAgICAgem9uZVNwZWNpZmljYXRpb246IHpvbmVTcGVjaWZpY2F0aW9uLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IpOwogIH0KCiAgLy8vIFJ1bnMgW2JvZHldIGluIGEgZnJlc2ggW1pvbmVdIHVzaW5nIHRoZSBvdmVycmlkZXMgZm91bmQgaW4gW292ZXJyaWRlc10uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBbb3ZlcnJpZGVzXSBzaG91bGQgYmUgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGV4dGVuZHMKICAvLy8gW0h0dHBPdmVycmlkZXNdLgogIHN0YXRpYyBSIHJ1bldpdGhIdHRwT3ZlcnJpZGVzPFI+KFIgYm9keSgpLCBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcywKICAgICAge1pvbmVTcGVjaWZpY2F0aW9uIHpvbmVTcGVjaWZpY2F0aW9uLCBGdW5jdGlvbiBvbkVycm9yfSkgewogICAgcmV0dXJuIF9hc3luY1J1blpvbmVkPFI+KGJvZHksCiAgICAgICAgem9uZVZhbHVlczoge19odHRwT3ZlcnJpZGVzVG9rZW46IG92ZXJyaWRlc30sCiAgICAgICAgem9uZVNwZWNpZmljYXRpb246IHpvbmVTcGVjaWZpY2F0aW9uLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IpOwogIH0KCiAgLy8vIFJldHVybnMgYSBuZXcgW0h0dHBDbGllbnRdIHVzaW5nIHRoZSBnaXZlbiBbY29udGV4dF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgbmV3IEh0dHBDbGllbnRgLgogIEh0dHBDbGllbnQgY3JlYXRlSHR0cENsaWVudChTZWN1cml0eUNvbnRleHQgY29udGV4dCkgewogICAgcmV0dXJuIG5ldyBfSHR0cENsaWVudChjb250ZXh0KTsKICB9CgogIC8vLyBSZXNvbHZlcyB0aGUgcHJveHkgc2VydmVyIHRvIGJlIHVzZWQgZm9yIEhUVFAgY29ubmVjdGlvbnMuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgSHR0cENsaWVudC5maW5kUHJveHlGcm9tRW52aXJvbm1lbnRgLgogIFN0cmluZyBmaW5kUHJveHlGcm9tRW52aXJvbm1lbnQoVXJpIHVybCwgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIF9IdHRwQ2xpZW50Ll9maW5kUHJveHlGcm9tRW52aXJvbm1lbnQodXJsLCBlbnZpcm9ubWVudCk7CiAgfQp9CgpjbGFzcyBfSHR0cE92ZXJyaWRlc1Njb3BlIGV4dGVuZHMgSHR0cE92ZXJyaWRlcyB7CiAgZmluYWwgSHR0cE92ZXJyaWRlcyBfcHJldmlvdXMgPSBIdHRwT3ZlcnJpZGVzLmN1cnJlbnQ7CgogIGZpbmFsIEh0dHBDbGllbnQgRnVuY3Rpb24oU2VjdXJpdHlDb250ZXh0KSBfY3JlYXRlSHR0cENsaWVudDsKICBmaW5hbCBTdHJpbmcgRnVuY3Rpb24oVXJpIHVyaSwgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCkKICAgICAgX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudDsKCiAgX0h0dHBPdmVycmlkZXNTY29wZSh0aGlzLl9jcmVhdGVIdHRwQ2xpZW50LCB0aGlzLl9maW5kUHJveHlGcm9tRW52aXJvbm1lbnQpOwoKICBAb3ZlcnJpZGUKICBIdHRwQ2xpZW50IGNyZWF0ZUh0dHBDbGllbnQoU2VjdXJpdHlDb250ZXh0IGNvbnRleHQpIHsKICAgIGlmIChfY3JlYXRlSHR0cENsaWVudCAhPSBudWxsKSByZXR1cm4gX2NyZWF0ZUh0dHBDbGllbnQoY29udGV4dCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuY3JlYXRlSHR0cENsaWVudChjb250ZXh0KTsKICAgIHJldHVybiBzdXBlci5jcmVhdGVIdHRwQ2xpZW50KGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGZpbmRQcm94eUZyb21FbnZpcm9ubWVudChVcmkgdXJsLCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50KSB7CiAgICBpZiAoX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfZmluZFByb3h5RnJvbUVudmlyb25tZW50KHVybCwgZW52aXJvbm1lbnQpOwogICAgfQogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfcHJldmlvdXMuZmluZFByb3h5RnJvbUVudmlyb25tZW50KHVybCwgZW52aXJvbm1lbnQpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICB9Cn0KeABOTjwBFAEqASEBT0lQRQQILwo3CgYEDSIMSzcMSAYIHyABJTkEATUGT1AnLxkEAUIhPkAkKxseTSM2LhsEAU4GShdGQSM2LhsEATwGTxg5JQQBQQZPLU5EBAIBMjkBQEIhAU8BDDlGRywEAQxOLToGHUMGPQQCARlkYXJ0Ol9odHRwL292ZXJyaWRlcy5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9faHR0cC93ZWJzb2NrZXQuZGFydMAASScvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKLyoqCiAqIFdlYlNvY2tldCBzdGF0dXMgY29kZXMgdXNlZCB3aGVuIGNsb3NpbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIFdlYlNvY2tldFN0YXR1cyB7CiAgc3RhdGljIGNvbnN0IGludCBub3JtYWxDbG9zdXJlID0gMTAwMDsKICBzdGF0aWMgY29uc3QgaW50IGdvaW5nQXdheSA9IDEwMDE7CiAgc3RhdGljIGNvbnN0IGludCBwcm90b2NvbEVycm9yID0gMTAwMjsKICBzdGF0aWMgY29uc3QgaW50IHVuc3VwcG9ydGVkRGF0YSA9IDEwMDM7CiAgc3RhdGljIGNvbnN0IGludCByZXNlcnZlZDEwMDQgPSAxMDA0OwogIHN0YXRpYyBjb25zdCBpbnQgbm9TdGF0dXNSZWNlaXZlZCA9IDEwMDU7CiAgc3RhdGljIGNvbnN0IGludCBhYm5vcm1hbENsb3N1cmUgPSAxMDA2OwogIHN0YXRpYyBjb25zdCBpbnQgaW52YWxpZEZyYW1lUGF5bG9hZERhdGEgPSAxMDA3OwogIHN0YXRpYyBjb25zdCBpbnQgcG9saWN5VmlvbGF0aW9uID0gMTAwODsKICBzdGF0aWMgY29uc3QgaW50IG1lc3NhZ2VUb29CaWcgPSAxMDA5OwogIHN0YXRpYyBjb25zdCBpbnQgbWlzc2luZ01hbmRhdG9yeUV4dGVuc2lvbiA9IDEwMTA7CiAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbFNlcnZlckVycm9yID0gMTAxMTsKICBzdGF0aWMgY29uc3QgaW50IHJlc2VydmVkMTAxNSA9IDEwMTU7CgogIEBEZXByZWNhdGVkKCJVc2Ugbm9ybWFsQ2xvc3VyZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PUk1BTF9DTE9TVVJFID0gbm9ybWFsQ2xvc3VyZTsKICBARGVwcmVjYXRlZCgiVXNlIGdvaW5nQXdheSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEdPSU5HX0FXQVkgPSBnb2luZ0F3YXk7CiAgQERlcHJlY2F0ZWQoIlVzZSBwcm90b2NvbEVycm9yIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUFJPVE9DT0xfRVJST1IgPSBwcm90b2NvbEVycm9yOwogIEBEZXByZWNhdGVkKCJVc2UgdW5zdXBwb3J0ZWREYXRhIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgVU5TVVBQT1JURURfREFUQSA9IHVuc3VwcG9ydGVkRGF0YTsKICBARGVwcmVjYXRlZCgiVXNlIHJlc2VydmVkMTAwNCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEXzEwMDQgPSByZXNlcnZlZDEwMDQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBub1N0YXR1c1JlY2VpdmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9fU1RBVFVTX1JFQ0VJVkVEID0gbm9TdGF0dXNSZWNlaXZlZDsKICBARGVwcmVjYXRlZCgiVXNlIGFibm9ybWFsQ2xvc3VyZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEFCTk9STUFMX0NMT1NVUkUgPSBhYm5vcm1hbENsb3N1cmU7CiAgQERlcHJlY2F0ZWQoIlVzZSBpbnZhbGlkRnJhbWVQYXlsb2FkRGF0YSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IElOVkFMSURfRlJBTUVfUEFZTE9BRF9EQVRBID0gaW52YWxpZEZyYW1lUGF5bG9hZERhdGE7CiAgQERlcHJlY2F0ZWQoIlVzZSBwb2xpY3lWaW9sYXRpb24gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBQT0xJQ1lfVklPTEFUSU9OID0gcG9saWN5VmlvbGF0aW9uOwogIEBEZXByZWNhdGVkKCJVc2UgbWVzc2FnZVRvb0JpZyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1FU1NBR0VfVE9PX0JJRyA9IG1lc3NhZ2VUb29CaWc7CiAgQERlcHJlY2F0ZWQoIlVzZSBtaXNzaW5nTWFuZGF0b3J5RXh0ZW5zaW9uIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTUlTU0lOR19NQU5EQVRPUllfRVhURU5TSU9OID0gbWlzc2luZ01hbmRhdG9yeUV4dGVuc2lvbjsKICBARGVwcmVjYXRlZCgiVXNlIGludGVybmFsU2VydmVyRXJyb3IgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBJTlRFUk5BTF9TRVJWRVJfRVJST1IgPSBpbnRlcm5hbFNlcnZlckVycm9yOwogIEBEZXByZWNhdGVkKCJVc2UgcmVzZXJ2ZWQxMDE1IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfMTAxNSA9IHJlc2VydmVkMTAxNTsKfQoKLy8vIE9wdGlvbnMgY29udHJvbGxpbmcgY29tcHJlc3Npb24gaW4gYSBbV2ViU29ja2V0XS4KLy8vCi8vLyBBIFtDb21wcmVzc2lvbk9wdGlvbnNdIGluc3RhbmNlIGNhbiBiZSBwYXNzZWQgdG8gW1dlYlNvY2tldC5jb25uZWN0XSwgb3IKLy8vIHVzZWQgaW4gb3RoZXIgc2ltaWxhciBwbGFjZXMgd2hlcmUgW1dlYlNvY2tldF0gY29tcHJlc3Npb24gaXMgY29uZmlndXJlZC4KLy8vCi8vLyBJbiBtb3N0IGNhc2VzIHRoZSBkZWZhdWx0IFtjb21wcmVzc2lvbkRlZmF1bHRdIGlzIHN1ZmZpY2llbnQsIGJ1dCBpbiBzb21lCi8vLyBzaXR1YXRpb25zLCBpdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gdXNlIGRpZmZlcmVudCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLAovLy8gZm9yIGV4YW1wbGUgdG8gcHJlc2VydmUgbWVtb3J5IG9uIHNtYWxsIGRldmljZXMuCmNsYXNzIENvbXByZXNzaW9uT3B0aW9ucyB7CiAgLy8vIERlZmF1bHQgW1dlYlNvY2tldF0gY29tcHJlc3Npb24gY29uZmlndXJhdGlvbi4KICAvLy8KICAvLy8gRW5hYmxlcyBjb21wcmVzc2lvbiB3aXRoIGRlZmF1bHQgd2luZG93IHNpemVzIGFuZCBubyByZXVzZS4gVGhpcyBpcyB0aGUKICAvLy8gZGVmYXVsdCBvcHRpb25zIHVzZWQgYnkgW1dlYlNvY2tldC5jb25uZWN0XSBpZiBubyBbQ29tcHJlc3Npb25PcHRpb25zXSBpcwogIC8vLyBzdXBwbGllZC4KICAvLy8KICAvLy8gKiBgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXJgOiBmYWxzZQogIC8vLyAqIGBzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcmA6IGZhbHNlCiAgLy8vICogYGNsaWVudE1heFdpbmRvd0JpdHNgOiBudWxsIChkZWZhdWx0IG1heGltYWwgd2luZG93IHNpemUgb2YgMTUgYml0cykKICAvLy8gKiBgc2VydmVyTWF4V2luZG93Qml0c2A6IG51bGwgKGRlZmF1bHQgbWF4aW1hbCB3aW5kb3cgc2l6ZSBvZiAxNSBiaXRzKQogIHN0YXRpYyBjb25zdCBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb25EZWZhdWx0ID0KICAgICAgY29uc3QgQ29tcHJlc3Npb25PcHRpb25zKCk7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb21wcmVzc2lvbkRlZmF1bHQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucyBERUZBVUxUID0gY29tcHJlc3Npb25EZWZhdWx0OwoKICAvLy8gTm8tY29tcHJlc3Npb24gY29uZmlndXJhdGlvbi4KICAvLy8KICAvLy8gRGlzYWJsZXMgY29tcHJlc3Npb24gd2hlbiB1c2VkIGFzIGNvbXByZXNzaW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEKICAvLy8gW1dlYlNvY2tldF0uCiAgc3RhdGljIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbk9mZiA9CiAgICAgIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucyhlbmFibGVkOiBmYWxzZSk7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb21wcmVzc2lvbk9mZiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ29tcHJlc3Npb25PcHRpb25zIE9GRiA9IGNvbXByZXNzaW9uT2ZmOwoKICAvLy8gV2hldGhlciB0aGUgY2xpZW50IHdpbGwgcmV1c2UgaXRzIGNvbXByZXNzaW9uIGluc3RhbmNlcy4KICBmaW5hbCBib29sIGNsaWVudE5vQ29udGV4dFRha2VvdmVyOwoKICAvLy8gV2hldGhlciB0aGUgc2VydmVyIHdpbGwgcmV1c2UgaXRzIGNvbXByZXNzaW9uIGluc3RhbmNlcy4KICBmaW5hbCBib29sIHNlcnZlck5vQ29udGV4dFRha2VvdmVyOwoKICAvLy8gVGhlIG1heGltYWwgd2luZG93IHNpemUgYml0IGNvdW50IHJlcXVlc3RlZCBieSB0aGUgY2xpZW50LgogIC8vLwogIC8vLyBUaGUgd2luZG93cyBzaXplIGZvciB0aGUgY29tcHJlc3Npb24gaXMgYWx3YXlzIGEgcG93ZXIgb2YgdHdvLCBzbyB0aGUKICAvLy8gbnVtYmVyIG9mIGJpdHMgcHJlY2lzZWx5IGRldGVybWluZXMgdGhlIHdpbmRvdyBzaXplLgogIC8vLwogIC8vLyBJZiBzZXQgdG8gYG51bGxgLCB0aGUgY2xpZW50IGhhcyBubyBwcmVmZXJlbmNlLCBhbmQgdGhlIGNvbXByZXNzaW9uIGNhbgogIC8vLyB1c2UgdXAgdG8gaXRzIGRlZmF1bHQgbWF4aW11bSB3aW5kb3cgc2l6ZSBvZiAxNSBiaXRzIGRlcGVuZGluZyBvbiB0aGUKICAvLy8gc2VydmVyJ3MgcHJlZmVyZW5jZS4KICBmaW5hbCBpbnQgY2xpZW50TWF4V2luZG93Qml0czsKCiAgLy8vIFRoZSBtYXhpbWFsIHdpbmRvdyBzaXplIGJpdCBjb3VudCByZXF1ZXN0ZWQgYnkgdGhlIHNlcnZlci4KICAvLy8KICAvLy8gVGhlIHdpbmRvd3Mgc2l6ZSBmb3IgdGhlIGNvbXByZXNzaW9uIGlzIGFsd2F5cyBhIHBvd2VyIG9mIHR3bywgc28gdGhlCiAgLy8vIG51bWJlciBvZiBiaXRzIHByZWNpc2VseSBkZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4KICAvLy8KICAvLy8gSWYgc2V0IHRvIGBudWxsYCwgdGhlIHNlcnZlciBoYXMgbm8gcHJlZmVyZW5jZSwgYW5kIHRoZSBjb21wcmVzc2lvbiBjYW4KICAvLy8gdXNlIHVwIHRvIGl0cyBkZWZhdWx0IG1heGltdW0gd2luZG93IHNpemUgb2YgMTUgYml0cyBkZXBlbmRpbmcgb24gdGhlCiAgLy8vIGNsaWVudCdzIHByZWZlcmVuY2UuCiAgZmluYWwgaW50IHNlcnZlck1heFdpbmRvd0JpdHM7CgogIC8vLyBXaGV0aGVyIFdlYlNvY2tldCBjb21wcmVzc2lvbiBpcyBlbmFibGVkLgogIC8vLwogIC8vLyBJZiBub3QgZW5hYmxlZCwgdGhlIHJlbWFpbmluZyBmaWVsZHMgaGF2ZSBubyBlZmZlY3QsIGFuZCB0aGUKICAvLy8gW2NvbXByZXNzaW9uT2ZmXSBpbnN0YW5jZSBjYW4sIGFuZCBzaG91bGQsIGJlIHJldXNlZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEKICAvLy8gbmV3IGluc3RhbmNlIHdpdGggY29tcHJlc3Npb24gZGlzYWJsZWQuCiAgZmluYWwgYm9vbCBlbmFibGVkOwoKICBjb25zdCBDb21wcmVzc2lvbk9wdGlvbnMoCiAgICAgIHt0aGlzLmNsaWVudE5vQ29udGV4dFRha2VvdmVyID0gZmFsc2UsCiAgICAgIHRoaXMuc2VydmVyTm9Db250ZXh0VGFrZW92ZXIgPSBmYWxzZSwKICAgICAgdGhpcy5jbGllbnRNYXhXaW5kb3dCaXRzLAogICAgICB0aGlzLnNlcnZlck1heFdpbmRvd0JpdHMsCiAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWV9KTsKCiAgLy8vIFBhcnNlcyBsaXN0IG9mIHJlcXVlc3RlZCBzZXJ2ZXIgaGVhZGVycyB0byByZXR1cm4gc2VydmVyIGNvbXByZXNzaW9uCiAgLy8vIHJlc3BvbnNlIGhlYWRlcnMuCiAgLy8vCiAgLy8vIFVzZXMgW3NlcnZlck1heFdpbmRvd0JpdHNdIHZhbHVlIGlmIHNldCwgb3RoZXJ3aXNlIHdpbGwgYXR0ZW1wdCB0byB1c2UKICAvLy8gdmFsdWUgZnJvbSBoZWFkZXJzLiBEZWZhdWx0cyB0byBbV2ViU29ja2V0LkRFRkFVTFRfV0lORE9XX0JJVFNdLiBSZXR1cm5zIGEKICAvLy8gW19Db21wcmVzc2lvbk1heFdpbmRvd0JpdHNdIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgcmVzcG9uc2UgaGVhZGVycyBhbmQKICAvLy8gbmVnb3RpYXRlZCBtYXggd2luZG93IGJpdHMuCiAgX0NvbXByZXNzaW9uTWF4V2luZG93Qml0cyBfY3JlYXRlU2VydmVyUmVzcG9uc2VIZWFkZXIoSGVhZGVyVmFsdWUgcmVxdWVzdGVkKSB7CiAgICB2YXIgaW5mbyA9IG5ldyBfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzKCk7CgogICAgaW50IG13YjsKICAgIFN0cmluZyBwYXJ0OwogICAgaWYgKHJlcXVlc3RlZD8ucGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHBhcnQgPSByZXF1ZXN0ZWQucGFyYW1ldGVyc1tfc2VydmVyTWF4V2luZG93Qml0c107CiAgICB9CiAgICBpZiAocGFydCAhPSBudWxsKSB7CiAgICAgIGlmIChwYXJ0Lmxlbmd0aCA+PSAyICYmIHBhcnQuc3RhcnRzV2l0aCgnMCcpKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIklsbGVnYWwgMCBwYWRkaW5nIG9uIHZhbHVlLiIpOwogICAgICB9IGVsc2UgewogICAgICAgIG13YiA9IHNlcnZlck1heFdpbmRvd0JpdHMgPT0gbnVsbAogICAgICAgICAgICA/IGludC5wYXJzZShwYXJ0LAogICAgICAgICAgICAgICAgb25FcnJvcjogKHNvdXJjZSkgPT4gX1dlYlNvY2tldEltcGwuREVGQVVMVF9XSU5ET1dfQklUUykKICAgICAgICAgICAgOiBzZXJ2ZXJNYXhXaW5kb3dCaXRzOwogICAgICAgIGluZm8uaGVhZGVyVmFsdWUgPSAiOyBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzPSR7bXdifSI7CiAgICAgICAgaW5mby5tYXhXaW5kb3dCaXRzID0gbXdiOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpbmZvLmhlYWRlclZhbHVlID0gIiI7CiAgICAgIGluZm8ubWF4V2luZG93Qml0cyA9IF9XZWJTb2NrZXRJbXBsLkRFRkFVTFRfV0lORE9XX0JJVFM7CiAgICB9CiAgICByZXR1cm4gaW5mbzsKICB9CgogIC8vLyBSZXR1cm5zIGRlZmF1bHQgdmFsdWVzIGZvciBjbGllbnQgY29tcHJlc3Npb24gcmVxdWVzdCBoZWFkZXJzLgogIFN0cmluZyBfY3JlYXRlQ2xpZW50UmVxdWVzdEhlYWRlcihIZWFkZXJWYWx1ZSByZXF1ZXN0ZWQsIGludCBzaXplKSB7CiAgICB2YXIgaW5mbyA9ICIiOwoKICAgIC8vIElmIHJlc3BvbmRpbmcgdG8gYSB2YWxpZCByZXF1ZXN0LCBzcGVjaWZ5IHNpemUKICAgIGlmIChyZXF1ZXN0ZWQgIT0gbnVsbCkgewogICAgICBpbmZvID0gIjsgY2xpZW50X21heF93aW5kb3dfYml0cz0kc2l6ZSI7CiAgICB9IGVsc2UgewogICAgICAvLyBDbGllbnQgcmVxdWVzdC4gU3BlY2lmeSBkZWZhdWx0CiAgICAgIGlmIChjbGllbnRNYXhXaW5kb3dCaXRzID09IG51bGwpIHsKICAgICAgICBpbmZvID0gIjsgY2xpZW50X21heF93aW5kb3dfYml0cyI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5mbyA9ICI7IGNsaWVudF9tYXhfd2luZG93X2JpdHM9JGNsaWVudE1heFdpbmRvd0JpdHMiOwogICAgICB9CiAgICAgIGlmIChzZXJ2ZXJNYXhXaW5kb3dCaXRzICE9IG51bGwpIHsKICAgICAgICBpbmZvICs9ICI7IHNlcnZlcl9tYXhfd2luZG93X2JpdHM9JHNlcnZlck1heFdpbmRvd0JpdHMiOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGluZm87CiAgfQoKICAvLy8gQ3JlYXRlIGEgQ29tcHJlc3Npb24gSGVhZGVyLgogIC8vLwogIC8vLyBJZiBbcmVxdWVzdGVkXSBpcyBudWxsIG9yIGNvbnRhaW5zIGNsaWVudCByZXF1ZXN0IGhlYWRlcnMsIHJldHVybnMgQ2xpZW50CiAgLy8vIGNvbXByZXNzaW9uIHJlcXVlc3QgaGVhZGVycyB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgZm9yCiAgLy8vIGBjbGllbnRfbWF4X3dpbmRvd19iaXRzYCBoZWFkZXIgdmFsdWUuICBJZiBbcmVxdWVzdGVkXSBjb250YWlucyBzZXJ2ZXIKICAvLy8gcmVzcG9uc2UgaGVhZGVycyB0aGlzIG1ldGhvZCByZXR1cm5zIGEgU2VydmVyIGNvbXByZXNzaW9uIHJlc3BvbnNlIGhlYWRlcgogIC8vLyBuZWdvdGlhdGluZyB0aGUgbWF4IHdpbmRvdyBiaXRzIGZvciBib3RoIGNsaWVudCBhbmQgc2VydmVyIGFzIHJlcXVlc3RlZAogIC8vLyBgc2VydmVyX21heF93aW5kb3dfYml0c2AgdmFsdWUuICBUaGlzIG1ldGhvZCByZXR1cm5zIGEKICAvLy8gW19Db21wcmVzc2lvbk1heFdpbmRvd0JpdHNdIG9iamVjdCB3aXRoIHRoZSByZXNwb25zZSBoZWFkZXJzIGFuZAogIC8vLyBuZWdvdGlhdGVkIGBtYXhXaW5kb3dCaXRzYCB2YWx1ZS4KICBfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzIF9jcmVhdGVIZWFkZXIoW0hlYWRlclZhbHVlIHJlcXVlc3RlZF0pIHsKICAgIHZhciBpbmZvID0gbmV3IF9Db21wcmVzc2lvbk1heFdpbmRvd0JpdHMoIiIsIDApOwogICAgaWYgKCFlbmFibGVkKSB7CiAgICAgIHJldHVybiBpbmZvOwogICAgfQoKICAgIGluZm8uaGVhZGVyVmFsdWUgPSBfV2ViU29ja2V0SW1wbC5QRVJfTUVTU0FHRV9ERUZMQVRFOwoKICAgIGlmIChjbGllbnROb0NvbnRleHRUYWtlb3ZlciAmJgogICAgICAgIChyZXF1ZXN0ZWQgPT0gbnVsbCB8fAogICAgICAgICAgICAocmVxdWVzdGVkICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIHJlcXVlc3RlZC5wYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KF9jbGllbnROb0NvbnRleHRUYWtlb3ZlcikpKSkgewogICAgICBpbmZvLmhlYWRlclZhbHVlICs9ICI7IGNsaWVudF9ub19jb250ZXh0X3Rha2VvdmVyIjsKICAgIH0KCiAgICBpZiAoc2VydmVyTm9Db250ZXh0VGFrZW92ZXIgJiYKICAgICAgICAocmVxdWVzdGVkID09IG51bGwgfHwKICAgICAgICAgICAgKHJlcXVlc3RlZCAhPSBudWxsICYmCiAgICAgICAgICAgICAgICByZXF1ZXN0ZWQucGFyYW1ldGVycy5jb250YWluc0tleShfc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpKSkpIHsKICAgICAgaW5mby5oZWFkZXJWYWx1ZSArPSAiOyBzZXJ2ZXJfbm9fY29udGV4dF90YWtlb3ZlciI7CiAgICB9CgogICAgdmFyIGhlYWRlckxpc3QgPSBfY3JlYXRlU2VydmVyUmVzcG9uc2VIZWFkZXIocmVxdWVzdGVkKTsKICAgIGluZm8uaGVhZGVyVmFsdWUgKz0gaGVhZGVyTGlzdC5oZWFkZXJWYWx1ZTsKICAgIGluZm8ubWF4V2luZG93Qml0cyA9IGhlYWRlckxpc3QubWF4V2luZG93Qml0czsKCiAgICBpbmZvLmhlYWRlclZhbHVlICs9CiAgICAgICAgX2NyZWF0ZUNsaWVudFJlcXVlc3RIZWFkZXIocmVxdWVzdGVkLCBpbmZvLm1heFdpbmRvd0JpdHMpOwoKICAgIHJldHVybiBpbmZvOwogIH0KfQoKLyoqCiAqIFRoZSBbV2ViU29ja2V0VHJhbnNmb3JtZXJdIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHVwZ3JhZGUgYQogKiBbSHR0cFJlcXVlc3RdIHRvIGEgW1dlYlNvY2tldF0gY29ubmVjdGlvbi4gSXQgc3VwcG9ydHMgYm90aAogKiB1cGdyYWRpbmcgYSBzaW5nbGUgW0h0dHBSZXF1ZXN0XSBhbmQgdXBncmFkaW5nIGEgc3RyZWFtIG9mCiAqIFtIdHRwUmVxdWVzdF1zLgogKgogKiBUbyB1cGdyYWRlIGEgc2luZ2xlIFtIdHRwUmVxdWVzdF0gdXNlIHRoZSBzdGF0aWMgW3VwZ3JhZGVdIG1ldGhvZC4KICoKICogICAgIEh0dHBTZXJ2ZXIgc2VydmVyOwogKiAgICAgc2VydmVyLmxpc3RlbigocmVxdWVzdCkgewogKiAgICAgICBpZiAoLi4uKSB7CiAqICAgICAgICAgV2ViU29ja2V0VHJhbnNmb3JtZXIudXBncmFkZShyZXF1ZXN0KS50aGVuKCh3ZWJzb2NrZXQpIHsKICogICAgICAgICAgIC4uLgogKiAgICAgICAgIH0pOwogKiAgICAgICB9IGVsc2UgewogKiAgICAgICAgIC8vIERvIG5vcm1hbCBIVFRQIHJlcXVlc3QgcHJvY2Vzc2luZy4KICogICAgICAgfQogKiAgICAgfSk7CiAqCiAqIFRvIHRyYW5zZm9ybSBhIHN0cmVhbSBvZiBbSHR0cFJlcXVlc3RdIGV2ZW50cyBhcyBpdCBpbXBsZW1lbnRzIGEKICogc3RyZWFtIHRyYW5zZm9ybWVyIHRoYXQgdHJhbnNmb3JtcyBhIHN0cmVhbSBvZiBIdHRwUmVxdWVzdCBpbnRvIGEKICogc3RyZWFtIG9mIFdlYlNvY2tldHMgYnkgdXBncmFkaW5nIGVhY2ggSHR0cFJlcXVlc3QgZnJvbSB0aGUgSFRUUCBvcgogKiBIVFRQUyBzZXJ2ZXIsIHRvIHRoZSBXZWJTb2NrZXQgcHJvdG9jb2wuCiAqCiAqICAgICBzZXJ2ZXIudHJhbnNmb3JtKG5ldyBXZWJTb2NrZXRUcmFuc2Zvcm1lcigpKS5saXN0ZW4oKHdlYlNvY2tldCkgPT4gLi4uKTsKICoKICogVGhpcyB0cmFuc2Zvcm1lciBzdHJpdmVzIHRvIGltcGxlbWVudCBXZWJTb2NrZXRzIGFzIHNwZWNpZmllZCBieSBSRkM2NDU1LgogKi8KYWJzdHJhY3QgY2xhc3MgV2ViU29ja2V0VHJhbnNmb3JtZXIKICAgIGltcGxlbWVudHMgU3RyZWFtVHJhbnNmb3JtZXI8SHR0cFJlcXVlc3QsIFdlYlNvY2tldD4gewogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBbV2ViU29ja2V0VHJhbnNmb3JtZXJdLgogICAqCiAgICogSWYgW3Byb3RvY29sU2VsZWN0b3JdIGlzIHByb3ZpZGVkLCBbcHJvdG9jb2xTZWxlY3Rvcl0gd2lsbCBiZSBjYWxsZWQgdG8KICAgKiBzZWxlY3Qgd2hhdCBwcm90b2NvbCB0byB1c2UsIGlmIGFueSB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQuCiAgICogW3Byb3RvY29sU2VsZWN0b3JdIGlzIHNob3VsZCByZXR1cm4gZWl0aGVyIGEgW1N0cmluZ10gb3IgYSBbRnV0dXJlXQogICAqIGNvbXBsZXRpbmcgd2l0aCBhIFtTdHJpbmddLiBUaGUgW1N0cmluZ10gbXVzdCBleGlzdCBpbiB0aGUgbGlzdCBvZgogICAqIHByb3RvY29scy4KICAgKgogICAqIElmIFtjb21wcmVzc2lvbl0gaXMgcHJvdmlkZWQsIHRoZSBbV2ViU29ja2V0XSBjcmVhdGVkIHdpbGwgYmUgY29uZmlndXJlZAogICAqIHRvIG5lZ290aWF0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgW0NvbXByZXNzaW9uT3B0aW9uc10uIElmIG5vbmUgaXMgc3BlY2lmaWVkCiAgICogdGhlbiB0aGUgW1dlYlNvY2tldF0gd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIGRlZmF1bHQgW0NvbXByZXNzaW9uT3B0aW9uc10uCiAgICovCiAgZmFjdG9yeSBXZWJTb2NrZXRUcmFuc2Zvcm1lcigKICAgICAgey8qU3RyaW5nfEZ1dHVyZTxTdHJpbmc+Ki8gcHJvdG9jb2xTZWxlY3RvcihMaXN0PFN0cmluZz4gcHJvdG9jb2xzKSwKICAgICAgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uOiBDb21wcmVzc2lvbk9wdGlvbnMuY29tcHJlc3Npb25EZWZhdWx0fSkgewogICAgcmV0dXJuIG5ldyBfV2ViU29ja2V0VHJhbnNmb3JtZXJJbXBsKHByb3RvY29sU2VsZWN0b3IsIGNvbXByZXNzaW9uKTsKICB9CgogIC8qKgogICAqIFVwZ3JhZGVzIGEgW0h0dHBSZXF1ZXN0XSB0byBhIFtXZWJTb2NrZXRdIGNvbm5lY3Rpb24uIElmIHRoZQogICAqIHJlcXVlc3QgaXMgbm90IGEgdmFsaWQgV2ViU29ja2V0IHVwZ3JhZGUgcmVxdWVzdCBhbiBIVFRQIHJlc3BvbnNlCiAgICogd2l0aCBzdGF0dXMgY29kZSA1MDAgd2lsbCBiZSByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXR1cm5lZAogICAqIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggdGhlIFtXZWJTb2NrZXRdIHdoZW4gdGhlIHVwZ3JhZGUgcHJvY2VzcwogICAqIGlzIGNvbXBsZXRlLgogICAqCiAgICogSWYgW3Byb3RvY29sU2VsZWN0b3JdIGlzIHByb3ZpZGVkLCBbcHJvdG9jb2xTZWxlY3Rvcl0gd2lsbCBiZSBjYWxsZWQgdG8KICAgKiBzZWxlY3Qgd2hhdCBwcm90b2NvbCB0byB1c2UsIGlmIGFueSB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQuCiAgICogW3Byb3RvY29sU2VsZWN0b3JdIGlzIHNob3VsZCByZXR1cm4gZWl0aGVyIGEgW1N0cmluZ10gb3IgYSBbRnV0dXJlXQogICAqIGNvbXBsZXRpbmcgd2l0aCBhIFtTdHJpbmddLiBUaGUgW1N0cmluZ10gbXVzdCBleGlzdCBpbiB0aGUgbGlzdCBvZgogICAqIHByb3RvY29scy4KICAgKgogICAqIElmIFtjb21wcmVzc2lvbl0gaXMgcHJvdmlkZWQsIHRoZSBbV2ViU29ja2V0XSBjcmVhdGVkIHdpbGwgYmUgY29uZmlndXJlZAogICAqIHRvIG5lZ290aWF0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgW0NvbXByZXNzaW9uT3B0aW9uc10uIElmIG5vbmUgaXMgc3BlY2lmaWVkCiAgICogdGhlbiB0aGUgW1dlYlNvY2tldF0gd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIGRlZmF1bHQgW0NvbXByZXNzaW9uT3B0aW9uc10uCiAgICovCiAgc3RhdGljIEZ1dHVyZTxXZWJTb2NrZXQ+IHVwZ3JhZGUoSHR0cFJlcXVlc3QgcmVxdWVzdCwKICAgICAge3Byb3RvY29sU2VsZWN0b3IoTGlzdDxTdHJpbmc+IHByb3RvY29scyksCiAgICAgIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbjogQ29tcHJlc3Npb25PcHRpb25zLmNvbXByZXNzaW9uRGVmYXVsdH0pIHsKICAgIHJldHVybiBfV2ViU29ja2V0VHJhbnNmb3JtZXJJbXBsLl91cGdyYWRlKAogICAgICAgIHJlcXVlc3QsIHByb3RvY29sU2VsZWN0b3IsIGNvbXByZXNzaW9uKTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIHRoZSByZXF1ZXN0IGlzIGEgdmFsaWQgV2ViU29ja2V0IHVwZ3JhZGUgcmVxdWVzdC4KICAgKi8KICBzdGF0aWMgYm9vbCBpc1VwZ3JhZGVSZXF1ZXN0KEh0dHBSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIHJldHVybiBfV2ViU29ja2V0VHJhbnNmb3JtZXJJbXBsLl9pc1VwZ3JhZGVSZXF1ZXN0KHJlcXVlc3QpOwogIH0KfQoKLyoqCiAqIEEgdHdvLXdheSBIVFRQIGNvbW11bmljYXRpb24gb2JqZWN0IGZvciBjbGllbnQgb3Igc2VydmVyIGFwcGxpY2F0aW9ucy4KICoKICogVGhlIHN0cmVhbSBleHBvc2VzIHRoZSBtZXNzYWdlcyByZWNlaXZlZC4gQSB0ZXh0IG1lc3NhZ2Ugd2lsbCBiZSBvZiB0eXBlCiAqIGBTdHJpbmdgIGFuZCBhIGJpbmFyeSBtZXNzYWdlIHdpbGwgYmUgb2YgdHlwZSBgTGlzdDxpbnQ+YC4KICovCmFic3RyYWN0IGNsYXNzIFdlYlNvY2tldAogICAgaW1wbGVtZW50cwogICAgICAgIFN0cmVhbTxkeW5hbWljIC8qU3RyaW5nfExpc3Q8aW50PiovID4sCiAgICAgICAgU3RyZWFtU2luazxkeW5hbWljIC8qU3RyaW5nfExpc3Q8aW50PiovID4gewogIC8qKgogICAqIFBvc3NpYmxlIHN0YXRlcyBvZiB0aGUgY29ubmVjdGlvbi4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IGNvbm5lY3RpbmcgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgb3BlbiA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBjbG9zaW5nID0gMjsKICBzdGF0aWMgY29uc3QgaW50IGNsb3NlZCA9IDM7CgogIEBEZXByZWNhdGVkKCJVc2UgY29ubmVjdGluZyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IENPTk5FQ1RJTkcgPSBjb25uZWN0aW5nOwogIEBEZXByZWNhdGVkKCJVc2Ugb3BlbiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE9QRU4gPSBvcGVuOwogIEBEZXByZWNhdGVkKCJVc2UgY2xvc2luZyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IENMT1NJTkcgPSBjbG9zaW5nOwogIEBEZXByZWNhdGVkKCJVc2UgY2xvc2VkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQ0xPU0VEID0gY2xvc2VkOwoKICAvKioKICAgKiBTZXQgYW5kIGdldCB0aGUgaW50ZXJ2YWwgZm9yIHNlbmRpbmcgcGluZyBzaWduYWxzLiBJZiBhIHBpbmcgbWVzc2FnZSBpcyBub3QKICAgKiBhbnN3ZXJlZCBieSBhIHBvbmcgbWVzc2FnZSBmcm9tIHRoZSBwZWVyLCB0aGUgYFdlYlNvY2tldGAgaXMgYXNzdW1lZAogICAqIGRpc2Nvbm5lY3RlZCBhbmQgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIHdpdGggYQogICAqIFtXZWJTb2NrZXRTdGF0dXMuR09JTkdfQVdBWV0gY2xvc2UgY29kZS4gV2hlbiBhIHBpbmcgc2lnbmFsIGlzIHNlbnQsIHRoZQogICAqIHBvbmcgbWVzc2FnZSBtdXN0IGJlIHJlY2VpdmVkIHdpdGhpbiBbcGluZ0ludGVydmFsXS4KICAgKgogICAqIFRoZXJlIGFyZSBuZXZlciB0d28gb3V0c3RhbmRpbmcgcGluZ3MgYXQgYW55IGdpdmVuIHRpbWUsIGFuZCB0aGUgbmV4dCBwaW5nCiAgICogdGltZXIgc3RhcnRzIHdoZW4gdGhlIHBvbmcgaXMgcmVjZWl2ZWQuCiAgICoKICAgKiBTZXQgdGhlIFtwaW5nSW50ZXJ2YWxdIHRvIGBudWxsYCB0byBkaXNhYmxlIHNlbmRpbmcgcGluZyBtZXNzYWdlcy4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBudWxsYC4KICAgKi8KICBEdXJhdGlvbiBwaW5nSW50ZXJ2YWw7CgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBXZWJTb2NrZXQgY29ubmVjdGlvbi4gVGhlIFVSTCBzdXBwbGllZCBpbiBbdXJsXQogICAqIG11c3QgdXNlIHRoZSBzY2hlbWUgYHdzYCBvciBgd3NzYC4KICAgKgogICAqIFRoZSBbcHJvdG9jb2xzXSBhcmd1bWVudCBpcyBzcGVjaWZ5aW5nIHRoZSBzdWJwcm90b2NvbHMgdGhlCiAgICogY2xpZW50IGlzIHdpbGxpbmcgdG8gc3BlYWsuCiAgICoKICAgKiBUaGUgW2hlYWRlcnNdIGFyZ3VtZW50IGlzIHNwZWNpZnlpbmcgYWRkaXRpb25hbCBIVFRQIGhlYWRlcnMgZm9yCiAgICogc2V0dGluZyB1cCB0aGUgY29ubmVjdGlvbi4gVGhpcyB3b3VsZCB0eXBpY2FsbHkgYmUgdGhlIGBPcmlnaW5gCiAgICogaGVhZGVyIGFuZCBwb3RlbnRpYWxseSBjb29raWVzLiBUaGUga2V5cyBvZiB0aGUgbWFwIGFyZSB0aGUgaGVhZGVyCiAgICogZmllbGRzIGFuZCB0aGUgdmFsdWVzIGFyZSBlaXRoZXIgU3RyaW5nIG9yIExpc3Q8U3RyaW5nPi4KICAgKgogICAqIElmIFtoZWFkZXJzXSBpcyBwcm92aWRlZCwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhlYWRlcnMKICAgKiB3aGljaCBhcmUgY29udHJvbGxlZCBieSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gcHJvY2Vzcy4gVGhlc2UKICAgKiBoZWFkZXJzIGFyZToKICAgKgogICAqICAgLSBgY29ubmVjdGlvbmAKICAgKiAgIC0gYHNlYy13ZWJzb2NrZXQta2V5YAogICAqICAgLSBgc2VjLXdlYnNvY2tldC1wcm90b2NvbGAKICAgKiAgIC0gYHNlYy13ZWJzb2NrZXQtdmVyc2lvbmAKICAgKiAgIC0gYHVwZ3JhZGVgCiAgICoKICAgKiBJZiBhbnkgb2YgdGhlc2UgYXJlIHBhc3NlZCBpbiB0aGUgYGhlYWRlcnNgIG1hcCB0aGV5IHdpbGwgYmUgaWdub3JlZC4KICAgKgogICAqIElmIHRoZSBgdXJsYCBjb250YWlucyB1c2VyIGluZm9ybWF0aW9uIHRoaXMgd2lsbCBiZSBwYXNzZWQgYXMgYmFzaWMKICAgKiBhdXRoZW50aWNhdGlvbiB3aGVuIHNldHRpbmcgdXAgdGhlIGNvbm5lY3Rpb24uCiAgICovCiAgc3RhdGljIEZ1dHVyZTxXZWJTb2NrZXQ+IGNvbm5lY3QoU3RyaW5nIHVybCwKICAgICAgICAgIHtJdGVyYWJsZTxTdHJpbmc+IHByb3RvY29scywKICAgICAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGhlYWRlcnMsCiAgICAgICAgICBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb246CiAgICAgICAgICAgICAgQ29tcHJlc3Npb25PcHRpb25zLmNvbXByZXNzaW9uRGVmYXVsdH0pID0+CiAgICAgIF9XZWJTb2NrZXRJbXBsLmNvbm5lY3QodXJsLCBwcm90b2NvbHMsIGhlYWRlcnMsIGNvbXByZXNzaW9uOiBjb21wcmVzc2lvbik7CgogIEBEZXByZWNhdGVkKCdUaGlzIGNvbnN0cnVjdG9yIHdpbGwgYmUgcmVtb3ZlZCBpbiBEYXJ0IDIuMC4gVXNlIGBpbXBsZW1lbnRzYCcKICAgICAgJyBpbnN0ZWFkIG9mIGBleHRlbmRzYCBpZiBpbXBsZW1lbnRpbmcgdGhpcyBhYnN0cmFjdCBjbGFzcy4nKQogIFdlYlNvY2tldCgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgV2ViU29ja2V0IGZyb20gYW4gYWxyZWFkeS11cGdyYWRlZCBzb2NrZXQuCiAgICoKICAgKiBUaGUgaW5pdGlhbCBXZWJTb2NrZXQgaGFuZHNoYWtlIG11c3QgaGF2ZSBvY2N1cnJlZCBwcmlvciB0byB0aGlzIGNhbGwuIEEKICAgKiBXZWJTb2NrZXQgY2xpZW50IGNhbiBhdXRvbWF0aWNhbGx5IHBlcmZvcm0gdGhlIGhhbmRzaGFrZSB1c2luZwogICAqIFtXZWJTb2NrZXQuY29ubmVjdF0sIHdoaWxlIGEgc2VydmVyIGNhbiBkbyBzbyB1c2luZwogICAqIFtXZWJTb2NrZXRUcmFuc2Zvcm1lci51cGdyYWRlXS4gVG8gbWFudWFsbHkgdXBncmFkZSBhbiBbSHR0cFJlcXVlc3RdLAogICAqIFtIdHRwUmVzcG9uc2UuZGV0YWNoU29ja2V0XSBtYXkgYmUgY2FsbGVkLgogICAqCiAgICogW3Byb3RvY29sXSBzaG91bGQgYmUgdGhlIHByb3RvY29sIG5lZ290aWF0ZWQgYnkgdGhpcyBoYW5kc2hha2UsIGlmIGFueS4KICAgKgogICAqIFtzZXJ2ZXJTaWRlXSBtdXN0IGJlIHBhc3NlZCBleHBsaWNpdGx5LiBJZiBpdCdzIGBmYWxzZWAsIHRoZSBXZWJTb2NrZXQgd2lsbAogICAqIGFjdCBhcyB0aGUgY2xpZW50IGFuZCBtYXNrIHRoZSBtZXNzYWdlcyBpdCBzZW5kcy4gSWYgaXQncyBgdHJ1ZWAsIGl0IHdpbGwKICAgKiBhY3QgYXMgdGhlIHNlcnZlciBhbmQgd2lsbCBub3QgbWFzayBpdHMgbWVzc2FnZXMuCiAgICoKICAgKiBJZiBbY29tcHJlc3Npb25dIGlzIHByb3ZpZGVkLCB0aGUgW1dlYlNvY2tldF0gY3JlYXRlZCB3aWxsIGJlIGNvbmZpZ3VyZWQKICAgKiB0byBuZWdvdGlhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIFtDb21wcmVzc2lvbk9wdGlvbnNdLiBJZiBub25lIGlzIHNwZWNpZmllZAogICAqIHRoZW4gdGhlIFtXZWJTb2NrZXRdIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IFtDb21wcmVzc2lvbk9wdGlvbnNdLgogICAqLwogIGZhY3RvcnkgV2ViU29ja2V0LmZyb21VcGdyYWRlZFNvY2tldChTb2NrZXQgc29ja2V0LAogICAgICB7U3RyaW5nIHByb3RvY29sLAogICAgICBib29sIHNlcnZlclNpZGUsCiAgICAgIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbjogQ29tcHJlc3Npb25PcHRpb25zLmNvbXByZXNzaW9uRGVmYXVsdH0pIHsKICAgIGlmIChzZXJ2ZXJTaWRlID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBzZXJ2ZXJTaWRlIGFyZ3VtZW50IG11c3QgYmUgcGFzc2VkICIKICAgICAgICAgICJleHBsaWNpdGx5IHRvIFdlYlNvY2tldC5mcm9tVXBncmFkZWRTb2NrZXQuIik7CiAgICB9CiAgICByZXR1cm4gbmV3IF9XZWJTb2NrZXRJbXBsLl9mcm9tU29ja2V0KAogICAgICAgIHNvY2tldCwgcHJvdG9jb2wsIGNvbXByZXNzaW9uLCBzZXJ2ZXJTaWRlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24uCiAgICovCiAgaW50IGdldCByZWFkeVN0YXRlOwoKICAvKioKICAgKiBUaGUgZXh0ZW5zaW9ucyBwcm9wZXJ0eSBpcyBpbml0aWFsbHkgdGhlIGVtcHR5IHN0cmluZy4gQWZ0ZXIgdGhlCiAgICogV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgdGhpcyBzdHJpbmcgcmVmbGVjdHMgdGhlCiAgICogZXh0ZW5zaW9ucyB1c2VkIGJ5IHRoZSBzZXJ2ZXIuCiAgICovCiAgU3RyaW5nIGdldCBleHRlbnNpb25zOwoKICAvKioKICAgKiBUaGUgcHJvdG9jb2wgcHJvcGVydHkgaXMgaW5pdGlhbGx5IHRoZSBlbXB0eSBzdHJpbmcuIEFmdGVyIHRoZQogICAqIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIHRoZSB2YWx1ZSBpcyB0aGUgc3VicHJvdG9jb2wKICAgKiBzZWxlY3RlZCBieSB0aGUgc2VydmVyLiBJZiBubyBzdWJwcm90b2NvbCBpcyBuZWdvdGlhdGVkIHRoZQogICAqIHZhbHVlIHdpbGwgcmVtYWluIFs6bnVsbDpdLgogICAqLwogIFN0cmluZyBnZXQgcHJvdG9jb2w7CgogIC8qKgogICAqIFRoZSBjbG9zZSBjb2RlIHNldCB3aGVuIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBjbG9zZWQuIElmCiAgICogdGhlcmUgaXMgbm8gY2xvc2UgY29kZSBhdmFpbGFibGUgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIFs6bnVsbDpdCiAgICovCiAgaW50IGdldCBjbG9zZUNvZGU7CgogIC8qKgogICAqIFRoZSBjbG9zZSByZWFzb24gc2V0IHdoZW4gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGNsb3NlZC4gSWYKICAgKiB0aGVyZSBpcyBubyBjbG9zZSByZWFzb24gYXZhaWxhYmxlIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBbOm51bGw6XQogICAqLwogIFN0cmluZyBnZXQgY2xvc2VSZWFzb247CgogIC8qKgogICAqIENsb3NlcyB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFNldCB0aGUgb3B0aW9uYWwgW2NvZGVdIGFuZCBbcmVhc29uXQogICAqIGFyZ3VtZW50cyB0byBzZW5kIGNsb3NlIGluZm9ybWF0aW9uIHRvIHRoZSByZW1vdGUgcGVlci4gSWYgdGhleSBhcmUKICAgKiBvbWl0dGVkLCB0aGUgcGVlciB3aWxsIHNlZSBbV2ViU29ja2V0U3RhdHVzLk5PX1NUQVRVU19SRUNFSVZFRF0gY29kZQogICAqIHdpdGggbm8gcmVhc29uLgogICAqLwogIEZ1dHVyZSBjbG9zZShbaW50IGNvZGUsIFN0cmluZyByZWFzb25dKTsKCiAgLyoqCiAgICogU2VuZHMgZGF0YSBvbiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhIGluIFtkYXRhXSBtdXN0CiAgICogYmUgZWl0aGVyIGEgYFN0cmluZ2AsIG9yIGEgYExpc3Q8aW50PmAgaG9sZGluZyBieXRlcy4KICAgKi8KICB2b2lkIGFkZCgvKlN0cmluZ3xMaXN0PGludD4qLyBkYXRhKTsKCiAgLyoqCiAgICogU2VuZHMgZGF0YSBmcm9tIGEgc3RyZWFtIG9uIFdlYlNvY2tldCBjb25uZWN0aW9uLiBFYWNoIGRhdGEgZXZlbnQgZnJvbQogICAqIFtzdHJlYW1dIHdpbGwgYmUgc2VuZCBhcyBhIHNpbmdsZSBXZWJTb2NrZXQgZnJhbWUuIFRoZSBkYXRhIGZyb20gW3N0cmVhbV0KICAgKiBtdXN0IGJlIGVpdGhlciBgU3RyaW5nYHMsIG9yIGBMaXN0PGludD5gcyBob2xkaW5nIGJ5dGVzLgogICAqLwogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtIHN0cmVhbSk7CgogIC8qKgogICAqIFNlbmRzIGEgdGV4dCBtZXNzYWdlIHdpdGggdGhlIHRleHQgcmVwcmVzZW50ZWQgYnkgW2J5dGVzXS4KICAgKgogICAqIFRoZSBbYnl0ZXNdIHNob3VsZCBiZSB2YWxpZCBVVEYtOCBlbmNvZGVkIFVuaWNvZGUgY2hhcmFjdGVycy4gSWYgdGhleSBhcmUKICAgKiBub3QsIHRoZSByZWNlaXZpbmcgZW5kIHdpbGwgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCiAgICovCiAgdm9pZCBhZGRVdGY4VGV4dChMaXN0PGludD4gYnl0ZXMpOwoKICAvKioKICAgKiBHZXRzIHRoZSB1c2VyIGFnZW50IHVzZWQgZm9yIFdlYlNvY2tldCBjb25uZWN0aW9ucy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCB1c2VyQWdlbnQgPT4gX1dlYlNvY2tldEltcGwudXNlckFnZW50OwoKICAvKioKICAgKiBTZXRzIHRoZSB1c2VyIGFnZW50IHRvIHVzZSBmb3IgV2ViU29ja2V0IGNvbm5lY3Rpb25zLgogICAqLwogIHN0YXRpYyBzZXQgdXNlckFnZW50KFN0cmluZyB1c2VyQWdlbnQpIHsKICAgIF9XZWJTb2NrZXRJbXBsLnVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKICB9Cn0KCmNsYXNzIFdlYlNvY2tldEV4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgY29uc3QgV2ViU29ja2V0RXhjZXB0aW9uKFt0aGlzLm1lc3NhZ2UgPSAiIl0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiV2ViU29ja2V0RXhjZXB0aW9uOiAkbWVzc2FnZSI7Cn0KgfMATk48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hLmC3JjGgt2EaILdhLqC3JjEguCEaYLghFKC4IRTguCEWYLcmMqC5QCCLoS8gueYxoLohL2C6IS+gueYx4LrhMGC64TCgueYxILuhFKC7oRTgu6EWYLnmMqC8gCC8oS/gvKEwIIuhMSC9pjGgveEZoL3hGiC94C9gveExYL3gpSC94TGgveEx4L3hMiC9pjHgwCEsoMAhMmC9pjEgwOEUoMDhFmDA4RTgwOEaYMDwACQ6oMIhGGC9pjKgwoAgi6EzIMMmMaDDSeDDcAAkOqDDyiDDSmDDYTSgw2E04MNhNSDDYTVgw2E1oMMmMSDFyODDJjKgxkAgi6E14MbmMaDHITYgxyE2YMchNqDHIRogxyAvYMchNuDHITcgxyE3YMchN6DHITfgxyE4IMchIODHIRmgxyExYMchOGDHITigxyE44MchIuDHITkgxyEioMchOWDHMAAkOqDMoTmgzKE54MyhOiDG5jHgzaEH4M2hOqDNoTpgzaE64M2hOyDNoTzgzaE9IM2hPWDNoT2gzaE94M2hPiDNoT5gzaElIM2hPqDNoSygzaE/oM2hP+DNoUAgzaFAYM2hMmDNoUCgxuYyINMhB+DTITqg0yE6YNMhOuDTITsgxuYxINShO2DUoSgg1KEloNShGmDUoRSg1KE/INSI4NShFODUoRZg1LAAJDqg1yEYYMbmMqDXgCCLoUEg2CYxoNhgL2DYYRmg2GExYNhhQWDYYSUg2CYx4NnhLKDYJjEg2mEUoNphFODaYRZg2CYyoNtAIIuhQeDb5jGg3CAvYNwgmuDcISDg3CCaoNvmMeDdYQeg3WEJINvmMiDeIQeg3iEJINvmMqDewCCLoUIg32YxoN+hNmDfoRog36AvYN+hGaDfoUJg32Yx4OEhQqDhISyg4SE/oOEhB+DhIQig4SFC4OEhQyDhIUNg4SEJIOEhQ6DhIJug4SFD4OEhRCDhIURg32YxIOThFKDk4T8g5Mjg5OEaYN9mMiDmIQkg32YyoOaAIIuhRKDnJjGg52ClIOdhIODnYUTg52FFIOdhRWDnYUWg52FF4OdhRiDnYUZg52FGoOdhRuDnYUcg5yYx4OqhCWDqoQgg6qEIoOqhB6DqoUOg6qFHYOqhR6DqoUgg6qFH4OqhSGDqoUNg6qFC4OqhQyDqoQkg6qFD4OqhRCDnJjIg7uEJYO7hCCDu4Qi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jYxniZCMZ4mSjGeJlYxniZiMZ4mbjGeJn4xniaCMZ4mkjGeJpYxniamMZ4mqjGeJrIxnia2MZ4mxjGeJsoxnibaMZ4m3jGeJuoxnib2MZ4nAjGeJwoxnicSMZ4nHjGeJyYxnicuMZ4nNjGeJ0IxnidGMZ4nTjGeJ1YxnideMZ4nYjGeJ2oxnidyMZ4nfjGeJ4oxnieOMZ4nnjGeJ6IxnieyMZ4ntjGeJ8YxnifKMZ4n1jGeJ9oxnifmMZ4n6jGeJ/4xnigCMZ4oEjGeKBYxnigiMZ4oJjGeKDIxnig2MZ4oPjGeKEoxnihSMZ4oXjGeKGYxnihyMZ4oejGeKIYxniiWMZ4omjGeKKIxniiqMZ4osjGeKLoxnijCMZ4oyjGeKNIxnijaMZ4o4jGeKO4xnij2MZ4o/jGeKQYxnikSMZ4pGjGeKSYxnikuMZ4pNjGeKT4xnilGMZ4pTjGeKVoxniliMZ4pajGeKXIxnil+MZ4phjGeKZIxnimiMZ4ppjGeKbYxnim6MZ4pxjGeKcoxninWMZ4p2jGeKeIxninuMZ4p/jGeKgIxnioWMZ4qGjGeKiYxnioyMZ4qRjGeKkoxnipaMZ4qXjGeKnIxnip2MZ4qfjGeKooxniqaMZ4qnjGeKq4xniqyMZ4qxjGeKsoxniraMZ4q3jGeKu4xniryMZ4q+jGeKwIxnisSMZ4rFjGeKyYxnisqMZ4rMjGeKzoxnitKMZ4rTjGeK1YxniteMZ4rbjGeK3IxniuCMZ4rhjGeK5IxniueMZ4rpjGeK7Ixniu6MZ4rxjGeK84xnivaMZ4r6jGeK+4xniv6MZ4r/jGeLAoxniwWMZ4sJjGeLCoxniwyMZ4sPjGeLEYxnixOMZ4sWjGeLGYxnixuMZ4sdjGeLH4xniyGMZ4sljGeLJoxniyqMZ4srjGeLLoxnizCMZ4s0jGeLNYxnizeMZ4s6jGeLPIxniz6MZ4tAjGeLQoxni0SMZ4tGjGeLSIxni0uMZ4tMjGeLToxni1CMZ4tSjGeLU4xni1aMZ4tYjGeLW4xni12MZ4tfjGeLYYxni2SMZ4tmjGeLaIxni2uMZ4ttjGeLb4xni3KMZ4t0jGeLdoxni3iMZ4t7jGeLfYxni3+MZ4uBjGeLg4xni4iMZ4uJjGeLjYxni46MZ4uRjGeLkoxni5SMZ4uXjGeLm4xni5yMZ4ugjGeLoYxni6WMZ4umjGeLqoxni6uMZ4utjGeLsIxni7OMZ4u0jGeLuIxni7mMZ4u9jGeLvoxni8CMZ4vBjGeLw4xni8WMZ4vHjGeLyoxni82MZ4vPjGeL0Yxni9SMZ4vXjGeL2Ixni9uMZ4vejGeL4Ixni+KMZ4vmjGeL54xni+mMZ4vrjGeL7Yxni++MZ4vzjGeL9Ixni/eMZ4v4jGeL+4xni/yMZ4v/jGeMAIxnjAKMZ4wFjGeMB4xnjAmMZ4wLjGeMDoxnjBGMZ4wSjGeMFYxnjBeMZ4wbjGeMHIxnjB6MZ4wgjGeMI4xnjCSMZ4wmjGeMKYxnjCuMZ4wujGeMMoxnjDOMZ4w3jGeMOIxnjD2MZ4w+jGeMQYxnjEKMZ4xGjGeMR4xnjEuMZ4xMjGeMT4xnjFCMZ4xTjGeMVIxnjFeMZ4xYjGeMW4xnjF2MZ4xhjGeMYoxnjGaMZ4xnjGeMaYxnjGuMZ4xujGeMb4xnjHKMZ4xzjGeMdYxnjHeMZ4x5jGeMe4xnjH2MZ4x/jGeMgYxnjIOMZ4yFjGeMh4xnjImMZ4yLjGeMjYxnjI+MZ4yRjGeMk4xnjJWMZ4yXjGeMmYxnjJuMZ4ydjGeMn4xnjKOMZ4ykjGeMqIxnjKmMZ4ytjGeMroxnjLKMZ4yzjGeMtoxnjLmMZ4y8jGeMv4xnjMGMZ4zDjGeMxYxnjMiMZ4zKjGeMzIxnjM+MZ4zSjGeM1YxnjNaMZ4zZjGeM2oxnjNyMZ4zfjGeM5IxnjOWMZ4zpjGeM6oxnjO+MZ4zwjGeM9IxnjPWMZ4z5jGeM+oxnjP2MZ40AjGeNBIxnjQWMZ40HjGeNCoxnjQ+MZ40QjGeNE4xnjRSMZ40YjGeNGYxnjRyMZ40djGeNIYxnjSKMZ40kjGeNJ4xnjSmMZ40sjGeNLoxnjTCMZ40yjGeNNIxnjTiMZ405jGeNPIxnjT2MZ41BjGeNQoxnjUaMZ41HjGeNS4xnjUyMZ41PjGeNUIxnjVOMZ41WjGeNWYxnjVyMZ41fjGeNYoxnjWSMZ41mjGeNaoxnjWuMZ41tjGeNb4xnjXGMZ410jGeNd4xnjXqMZ418jGeNfoxnjYCMZ42CjGeNhYxnjYeMZ42JjGeNi4xnjY2MZ42PjGeNkYxnjZOMZ42WjGeNl4xnjZmMZ42bjGeNn4xnjaCMZ42jjGeNpIxnjaeMZ42ojGeNqoxnjayMZ42ujGeNsIxnjbKMZ420jGeNtoxnjbiMZ428jGeNvYxnjb+MZ43CjGeNxIxnjceMZ43KjGeNzYxnjdCMZ4f9jGeN0YxnjdOMZ43WjGeN2YxnjduMZ43djGeN4IxnjeGMZ43kjGeN5YxnjeeMZ43pjGeN64xnje2MZ43vjGeN8YxnjfSMZ431jGeN+IxnjfmMZ4i8jGeN+oxnjfyMZ43+jGeOAIxnjgKMZ44EjGeOBoxnjgmMZ44KjGeODIxnjg6MZ4f5jGeOD4xnjhGMZ44TjGeOFYxnjheMZ44ZjGeOG4xnjh2MZ44fjGeOIYxnh/6MZ44jjGeOJYxnjieMZ44pjGeOK4xnji2MZ44xjGeOMoxnjjWMZ443jGeOOYxnjjyMZ45AjGeOQYxnjkOMZ45FjGeOSIxnjkuMZ45OjGeOUYxnjlSMZ45XjGeOWoxnjl2MZ45gjGeOY4xnjmaMZ45pjGeObIxnjm+MZ45xjGeOc4xnjneMZ454jGeOfIxnjn2MZ45/jGeOgYxnjoSMZ46FjGeOiIxnjomMZ46OjGeOj4xnjpGMZ46TjGeOlYxnjpeMZ46ajGeOm4xnjqCMZ46hjGeOpIxnjqWMZ46ojGeOqYxnjq6MZ46vjGeOs4xnjrSMZ462jGeOuYxnjryMZ46+jGeOwYxnjsKMZ47FjGeOxoxnjsiMZ47KjGeOzoxnjs+MZ47TjGeO1IxnjteMZ47ZjGeO3Yxnjt6MZ47gjGeO4oxnjuSMZ47mjGeO6oxnjuuMZ47ujGeO74xnjvOMZ470jGeO9oxnjvmMZ478jGeO/YxnjwGMZ48CjGePBYxnjwaMZ48KjGePC4xnjw2MZ48PjGePFIxnjxWMZ48ZjGePGoxnjx+MZ48gjGePIoxnjySMZ48njGePKoxnh/qMZ48rjGeCEYxnjyyMZ48xjGePMoxnjzaMZ483jGePOYxnjzyMZ49AjGePQYxnj0aMZ49HjGePSYxnj0yMZ49OjGePUYxnj1SMZ49WjGePWoxnj1uMZ49fjGePYIxnj2WMZ49mjGePaoxnj2uMZ49vjGePcIxnj3SMZ491jGePeYxnj3qMZ498jGePfoxnj4KMZ4+DjGePhoxnj4iMZ4+KjGePjYxnj5CMZ4+RjGePlIxnj5aMZ4+YjGePmoxnj56MZ4+fjGePooxnj6OMZ4+njGePqIxnj6uMZ4+sjGePsYxnj7KMZ4+0jGePtoxnj7iMZ4+6jGePvYxnj76MZ4/AjGePw4xnj8WMZ4/HjGePyoxnj8uMZ4/OjGePz4xnj9GMZ4/TjGeP1Yxnj9eMZ4/ajGeP24xnj96MZ4/fjGeP4oxnj+OMZ4/njGeP6Ixnj+uMZ4/ujGeP8Ixnj/KMZ4/0jGeP94xnj/mMZ4/7jGeP/oxnj/+MZ5ABjGeQA4xnkAWMZ5AIjGeQCoxnkA2MZ5APjGeQEYxnkBOMZ5AWjGeQGYxnkBuMZ5AejGeQIIxnkCKMZ5AljGeQJ4xnh/+MZ5ApjGeQK4xnkC+MZ5AwjGeQM4xnkDSMZ5A4jGeQOYxnkDyMZ5A9jGeQQIxnkEOMZ5BFjGeQSIxnkEuMZ5BMjGeQUIxnkFGMZ5BVjGeQVoxnkFmMZ5BajGeQXIxnkF6MZ5BhjGeQZIxnkGiMZ5BpjGeQa4xnkG6MZ5BxjGeQcoxnkHWMZ5B2jGeQeYxnkHqMZ5B9jGeQfoxnkIGMZ5CDjGeQh4xnkIiMZ5CMjGeQjYxnkJKMZ5CTjGeQmIxnkJmMZ5CdjGeQnoxnkKKMZ5CjjGeQp4xnkKiMZ5CrjGeQrYxnkLGMZ5CyjGeQtIxnkLeMZ5C8jGeQvYxnkMGMZ5DCjGeQxoxnkMeMZ5DKjGeQy4xnkM+MZ4gAjGeQ0IxniAGMZ5DSjGeIAoxnkNSMZ5DWjGeQ2YxnkNqMZ5DdjGeQ3oxnkOCMZ5DjjGeQ54xnkOiMZ5DsjGeQ7YxnkO+MZ5DxjGeQ84xnkPWMZ5D4jGeQ+YxnkPuMZ5D+jGeRAYxnkQKMZ5EEjGeRB4xnkQmMZ5EMjGeRDoxnkRCMZ5ESjGeRFIxnkRiMZ5EZjGeRHYxnkR6MZ5EhjGeRIoxnkSaMZ5EnjGeRKoxnkSuMZ5EwjGeRMYxnkTSMZ5E1jGeROYxnkTqMZ5E+jGeRP4xnkUGMZ5FFjGeRR4xnkUqMZ5FMjGeRT4xnkVGMZ5FUjGeRVoxnkVmMZ5FbjGeRXYxnkWCMZ5FhjGeRY4xnkWaMZ5FojGeRaoxnkW6MZ5FvjGeRcYxnkXSMZ5F3jGeReIxnkXyMZ5F9jGeRgYxnkYKMZ5GFjGeRhoxnkYiMZ5GLjGeRj4xnkZCMZ5GUjGeRlYxnkZeMZ5GajGeRnIxnkZ+MZ5GijGeRpIxnkaiMZ5GpjGeRrYxnka6MZ5GwjGeRs4xnkbaMZ5G4jGeRvIxnkb2MZ5G/jGeRwoxnkcSMZ5HGjGeRyIxnkcqMZ5HNjGeRzoxnkdCMZ5HSjGeR1oxnkdeMZ5HajGeR24xnkd+MZ5HgjGeR5IxnkeWMZ5HpjGeR6oxnke2MZ5HvjGeR8oxnkfSMZ5H3jGeR+Yxnkf6MZ5H/jGeSAYxnkgSMZ5IGjGeSCIxnkgqMZ5IMjGeSDoxnkhCMZ5ISjGeSFYxnkhmMZ5IajGeSHoxnkh+MZ5IhjGeSJIxnkieMZ5IojGeSKoxnkiyMZ5IujGeSMIxnkjOMZ5I0jGeSOIxnkjmMZ5I9jGeSPoxnkkGMZ5JDjGeSR4xnkkiMZ5JLjGeSTIxnklCMZJjEkH2CRJB9klGQfcAAkPSQgJJTkICSV5CAklqQgJJckICSZ5CAkmuQgJJzkICSd5CAknyQgJJ/kICSgZCAkoSQgJKIkICSi5CAko2QgJKQkICSk5CAkpaQgJKYkICSnJCAkp6QgJKgkICSppCAkqmQgJKrkICSrZCAkq+QgJKwkICSspCAkrOQgJK1kICStpCAkryQgJK/kICSwZCAksOQgJLGkICSy5CAks6QgJLSkICS1ZCAktiQgJLbkICS3ZCAkuCQgJLhkICS5JCAkueQgJLqkICS7JCAku+QgJLxkICS85CAkvWQgJL4kICS+5CAkv2QgJL/kICTApCAkwWQgJMIkICTCpCAkxCQgJMgkICTIpCAkyWQgJMnkICTKZCAkyuQgJMtkICTMZCAkzKQgJM0kICTNZCAkziQgJM6kICTPJCAkz6QgJNBkICTRJCAk0aQgJNIkICTSpCAk0yQgJNPkICTUpCAk1SQgJNWkICTWZCAk1uQgJNdkICTX5CAk2GQgJNjkICTZZCAk2eQgJNpkICTbJCAk3CQgJNykICTdJCAk3eQgJN5kICTe5CAk32QgJOAkICTgpCAk4SQgJOGkICTiZCAk4yQgJOSkICTlpCAk5mQgJOckICTnpCAk6CQgJOikICTpJCAk6eQgJOpkICTrJCAk66QgJOwkICTspCAk7WQgJO3kICTu5CAk72QgJPAkICTw5CAk8aQgJPJkICTzZCAk8+QgJPUkICT1pCAk9eQgJPYkICT2ZCAk9uQgJPfkICT4ZCAk+WQgJPnkICT6ZCAk+yQgJPykICT9JCAk/eQgJP5kICT/JCAk/6QgJQBkICUA5CAlAWQgJQGkICUCJCAlAqQgJQNkICUD5CAlBGQgJQTkICUFZCAlBiQgJQakICUHZCAlB+QgJQgkICUI5CAlCWQgJQnkICUKZCAlCyQgJQukICUMJCAlDKQgJQzkICUNpCAlDiQgJQ6kICUPJCAlD6QgJRBkICURJCAlEaQgJRIkICUS5CAlE2QgJRSkICUVJCAlFeQgJRbkICUXZCAlF+QgJRjkICUZZCAlGyQgJRukICUcJCAlHOQgJR2kICUeJCAlHqQgJR8kICUf5CAlIGQgJSDkICUhZCAlIiQgJSKkICUjJCAlI+QgJSRkICUmZCAlJ+QgJSikICUpJCAlKaQgJSrkICUr5CAlLKQgJSzkICUtZCAlLiQgJS6kICUvJCAlL6QgJTAkICUwpCAlMSQgJTIkICUypCAlM2QgJTQkICU05CAlNaQgJTYkICU2pCAlN2QgJTfkICU4ZCAlOOQgJTmkICU6JCAlOqQgJTtkICU75CAlPKQgJT2kICU+pCAlP2QgJT/kICVAZCAlQOQgJUEkICVBpCAlQqQgJUMkICVD5CAlRGQgJUUkICVFpCAlReQgJUZkICVHJCAlR6QgJUgjGSHxZGNmMaRjoC9kY4nkY6I1pGOiNeRjofKkY2YxJGUI5GNmMqRlgCMZIf2kZiYxpGZgpeRmSKRmYjHkZlbkZiYxJGegl+RnogmkZiYypGhAIxkiNiRo5jGkaQikaSIx5GjmMeRp1uRp4KXkaOYxJGqgl+RqogmkaOYypGtAIxkiNmRr5jGkbCI2pGwiNuRsIgvka+YypG0AIxkgimRtpjGkbeArJG3h2WRt2GRt4jckbaYx5G8gpeRvCKRvIjHkbxbkbaYxJHBgk+RwYghkbaYypHEAIxkh8eRxpjGkceI3ZHHiB6Rx4H7kceG+pHHh8qRx4fOkcaYx5HOgpeRziKRzojHkc5bkc6ArJHOh2WRzmGRzofIkc6HyZHGmMSR2IjhkdiIsZHGmMqR2wCMZIfGkd2YxpHeh8iR3ofJkd6HypHegKyR3ZjJkeOI5JHdmMSR5YjhkeWIsZHdmMqR6AAAwACQ9ZHqmMaR65UnkeuVLpHrlS+R65U0keqCEpHwmMaR8SeR8cAAkPWR8yiR8SmR8YJXkfGBx5HxlSWR8YHwkfGVJpHxgzWR8JjE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wACRCJSnl0SUp4jglKWYx5SqXpSlmMSUrF2UpZjKlK4AlISXRZSwmMaUscAAkQiUspdGlLKXR5Syl0iUsojglLCYx5S3XpSwmMSUuV2UsJjKlLsAAMAAkQmUvZdLlL6YxpS/wACRCZTAlzWUwJdMlMCXOZS/lzaUvpjElMXAAJEJlMaXTZTFlmSUxYMclMVWlMWApZTFlyiUxYRelMWXKZTFlyqUxZctlMWXLJTFg/2UxYQHlMWCRpTFly6UxZcvlMWXMJTFlUmUvpjHlNlclNlhlNmBVZS+mMqU3QCU3ZZalL2XUZTgmMSU4SOU4JjKlOMAlL2XUpTlmMaU5sAAkQmU55dElOeI4JTlmMeU6l6U5ZjElOxdlOWYypTuAJS9l1OU8JjGlPHAAJEJlPKXRpTyl0eU8pdIlPKI4JTwmMeU916U8JjElPldlPCYypT7AADAAJEKlP2YxZT+l1aU/ZdXlQCYxpUBwACRCpUCl1iVApdZlQKXWpUCl1uVApddlQKXXpUCl1+VApdglQKXYZUCl2KVApdjlQKXZJUCl2WVApdmlQKXZ5UCl2iVApdslQKXbZUCl26VApdvlQKXcJUCl3GVApdylQKXc5UCl3SVApd2lQGXXJUBlVeVAZVDlQGXaZUBl2qVAZdrlQGXdZUAmMSVJMAAkQqVJZd3lSWXs5Ull7qVJZeplSWXu5Ull7+VJZfulSWX/ZUkhwCVJIcClSSHBJUkhwOVJIcFlSSG/5Ukl36VJIcHlSSXhpUkl4iVJJeJlSSXi5UkhwmVJJeUlSSIaZUkl5eVJJeZlSSXm5Ukl52VJJeflSSXoZUkl6OVJJellSSXp5UkhwqVJJeqlSSXq5Ukl6yVJJealSSXnJUkl56VJJeglSSXopUkl6SVJJemlSSXqJUkl62VJJeulSSXr5Ukl7GVJISglSSXspUkl7CVJIRFlSSXuZUkhwuVJIcOlSSXvZUkl8CVJJe+lSSX0JUkl9SVJJeQlSSX2JUkl7yVJIcGlSSXkpUkl9yVJJfflSSXkZUkhwiVJISnlSSX4pUkl+OVJJfolSSEw5Ukl+SVJJfrlSSEypUkl+2VJJfhlSSE+5UkhSmVJIVHlSSFI5UkhTCVJIVVlSSFWJUkhVqVJIVclSSFXpUkhWGVJIVwlSSFiJUkhYuVJIWNlSSFmJUkhZqVJIWmlSSFqJUkhZyVJIWelSSFqpUkhayVJIW2lSSFuJUkhaCVJIW6lSSFvJUkhbCVJIWylSSFw5Ukl/WVJIXIlSSFzZUkhdGVJIXWlSSF2pUkheCVJIXmlSSF6pUkhe6VJIXxlSSF85Ukl46VJIX2lSSXj5UkhfiVJIX6lSSF/ZUkhf+VJIYBlSSGA5UkhgWVJIYHlSSGCZUkhguVJIYNlSSGEJUkhhOVJIYZlSSGG5UkhcCVJIYelSSGIZUkl/yVJIYjlSSGJ5UkhiqVJIYslSSGMJUkhjKVJIYWlSSGNJUkhjaVJIY4lSSGPJUkhkCVJIZDlSSGSJUkhkqVJIZMlSSGTpUkhlGVJIZVlSSGWJUkhl6VJIZnlSSX8pUkl+yVJJf/lSSGaZUkhoiVJIaBlSSGhJUkhoaVJIaMlSSFA5UkhpKVJIaglSSGpJUkhpyVJIaqlSSFBpUkmAKVJJgElSSYBpUkmAiVJJgKlSSYDJUkmA6VJJgQlSSYEpUkmBSVJIcclSSGtpUkhreVJIT9lSSFKpUkhryVJIa9lSSFJJUkhtSVJIbVlSSGuZUkhrqVJIS4lSSEu5Ukhs6VJIbPlSSG0ZUkhtKVJIbJlSSGypUkhm6VJIazlSSGtJUkhUiVJIb1lSSFMZUkhsCVJIbBlSSGxJUkhsWVJIbalSSG25UkhuGVJIbilSSG5JUkhuWVJIadlSSG55UkhuiVAJjKlg0AlP2YPZYPmMaWECeWEJg+lhCYP5YPmMSWFJgAlhSXypYUl8uWFJfwlhRLlg+YypYaAJT9mEGWHJjGlh0nlh2YP5YcmMSWIJfJliAGliBLlhyYypYkAJT9mEKWJpjGlicnlieYP5YmmMSWKpfJlioGlipLliaYypYuAJT9mESWMJjGljGXXJYxg9WWMZhFljGYRpYxwACRCpY2mEeWMJjEljiXhZY4mAiWOEuWMJjKljwAlP2YSpY+mMaWPyeWP5g/lj6YxJZCl8mWQgaWQkuWPpjKlkYAlP2YTZZImMaWSSeWSJjElkuXhZZLS5ZImMqWTgCU/ZhOllCYxpZRJ5ZQmMSWU5eFllCYypZVAJT9mE+WV5jGlliYUJZYmFGWWJhSlljAAJEKllyXaJZcmFOWXJhVllyYVpZYYZZYmFSWV5jHlmODYpZXmMSWZZf7lmWXeZZll3uWZZd8lmWXepZlhEaWZZd4lleYypZtAJT9mF6Wb5jGlnCG+JZwl8iWb5jKlnMAlP2YX5Z1mMaWdoQmlnWYxJZ4VpZ4goyWdZjKlnsAlP2YYJZ9mMSWfphhln2YypaAAADAAJELloKYZZaDmMaWhILnloSYZpaEIpaETpaDmMSWiSOWg5jKlosAloKYaJaNmMaWjoHllo2YxJaQI5aNmMqWkgCWgphslpSYxpaVIpaUmMqWlwCWgphtlpmYypaaAJaCmG6WnJjGlp2Yb5admHCWnZhxlp2YcpadmHOWnZh0lp2YdZadmHaWnZdplp2Yd5admHiWnJjKlqkAloKH8JarmMaWrJh5lqyYepasmHuWrJh8lqyYfZasgueWrMAAkQuWs5h+lrOYf5azmICWs5iBlrOYgpazmIOWs5iElrOYhZazmIaWs5iIlrOYiZazmFWWs5hWlqyYh5asiEOWq5jElsOBxJbDhxGWw4cTlsOHFJbDmIuWw4cSlsOHFZbDmIyWw8AAkQuWzJiQlsyYkZbMmKaWzJiolsyYqZbMmKuWzJixlsyYvJbMmNSWzJi9lsyYu5bMmO6WzJjvlsyY8JbMmRuWw5iSlsOYlpbDmJeWw5iblsOYoJbDhxeWw5ihlsOYopbDmKOWw5illsOYrpbDhDyWw4Q+lsOYvpbDmMyWw5jdlsOY3JbDhxaWw5jllsOYmpbDmOaWw5iclsOY55bDmOCWw5jplsOHGJbDmN+Ww5j1lsOY/JbDmPmWw5j9lsOY8ZbDmPKWw5kFlsOZBpbDmPOWw5kDlsOY9JbDmQSWw5kKlsOZDpbDhxqWw5kelsOZCZbDmR+Ww5khlsOY95bDmQeWw5iZlsOZJpbDmSqWw5kolsOZK5bDmRqWw5kVlsOZL5bDmTCWw5kylsOZLJbDmS2Ww5kClsOZAZbDmTSWw5kQlsOZNZbDmTaWw5kklsOHGZbDmP6Ww5k7lsOZE5bDmT2Ww5k+lsOY/5bDmTOWw5kUlsOZJ5bDmPaWq5jHlyqYiparmMqXLACWgpk/ly6YxpcvwACRC5cwmUCXLpjElzLAAJELlzOYkJczmUSXM5iRlzKHC5cyhw6XMocZlzKY35cymPGXMpjylzKY85cymQOXMpj0lzKZBJcymQqXMocalzKYmZcymROXMpk+lzKZJ5cymRWXMpj8lzKY9ZcymP2XMpkvlzKZO5cymQKXMocYly6Yx5dPhxCXT4Q5ly6YypdSAJaCmF6XVJjGl1WG+JdVht6XVJjKl1gAAMAAkQyXWpjGl1uacJdamMSXXZpxl12acpddmnOXXZp0l12adZddmnaXXZp3l12aeJddmnmXXZp6l12ae5damUiXaZjGl2onl2qAq5dpmMSXbZlJl2mYx5dvgymXaZjKl3EAl1qZS5dzmMaXdIMpl3OYypd2AJdamUyXeJjGl3knl3mAq5d4mMSXfJlJl3iYx5d+gymXeJjKl4AAl1qZTZeCmMaXg4Mpl4KYxJeFmUmXhZgIl4KYypeIAJdamU6XipjGl4uZUJeLmVGXi4Q1l4qYxJePmVKXipjKl5EAl1qZWZeTmMaXlIY6l5SElJeUhIiXlISJl5SG6peUhMWXlJlgl5SZYpeUmWSXlJlll5SZZ5eTmMSXoJlpl6CZapegmWuXoJlsl6CZbZegmW6XoJlvl6CZcJegmXGXoJlyl6CZdpegmXOXk5jKl60Al1qZeZevmMSXsJl6l7CZfJewmX2Xr5jKl7QAl1qZfpe2mMaXt5l/l7eEQJe3mYCXt4bsl7eZgZe3g+KXt4b6l7eETJe3hE2Xt4ROl7eZgpe3mYOXt5mEl7eCUpe3mYWXt5mHl7aYxJfImYiXyJmJl8iZipfImYuXyJmMl8iZjZfImZCXyJmRl8iHTZfImZOXyJmVl8iHTJfImZeXyJmYl8iZmpfImZuXyJmdl8iZnpfIhEmXyJmsl8iZqZfIl+OXyIRFl8iXiZfImb2XyIKOl8iZvpfImb+XyJnAl8iZuJfImcGXyJmml8iZwpfImcOXyIcKl8iXrZfImbqXyJnLl8iZzJfImc6XyIUDl8iGnJfImdKXyIcIl8iZoZfImdWXyJnal8iZ3ZfImeqXyJnpl8iZ2ZfImdeXyJnYl8iIaZfImdCXyJnyl8iZuZfImfWXyJnzl8iZ0ZfImfyXyJn9l8iZ6JfIl+2XyJfhl8iEp5fIhSOXyIVHl8iFKZfIhTCXyIT7l8iFBpfIhMqXyIWIl8iFtpfIhaCXyIW4l8iFupfIhbyXyIXDl8iFyJfIhc2XyJohl8iaF5fIhdGXyIXWl8iF2pfIheCXyIXml8iF6pfIhe6XyIX9l8iF/5fIhgGXyIYDl8iGBZfIhgeXyIYJl8iGC5fIhg2XyIYQl8iGE5fIhfGXyIXzl8iF9pfIhfiXyIX6l8iGGZfIhhuXyIXAl8iGHpfIhiGXyIS7l8iEuJfImAyXyIWLl8iFjZfImhiXyJogl8iFmJfIhZqXyIWml8iFqJfIhZyXyIWel8iFqpfIhayXyIYjl8iaM5fIhieXyIYql8iGLJfIhjCXyIYyl8iGNJfIhjaXyIY4l8iGPJfIhkCXyIZDl8iGSJfIhkqXyIZMl8iGTpfIhlGXyIZVl8iGWJfIhl6XyIZnl8iGaZfIl/KXyIWwl8iFspfImBSXyIVVl8iFWJfIhVqXyIVcl8iFXpfIhWGXyJgOl8iZ8JfIhoGXyIaEl8iGhpfIhoyXyIaSl8iGoJfIhqSXyIaql8iXiJfIhhaXyJgEl8iGzpfIhtGXyIbJl8iG1JfIhtqXyIbAl8iG4ZfIhueXyJgCl7aYyph/AJdamliYgZjGmIKVo5iCmlmYgppamIKaW5iCmlyYgppdmIKaXpiCml+YgppgmIKaYZiCmmKYgppjmIKaZJiCmmWYgppmmIKaZ5iCmmiYgpppmIKaapiCmmuYgZjEmJeabJiXmm2Yl5gMmJeFiJiXhbaYl4W4mJeFoJiXhbqYl4W8mJeFw5iXhciYl4XNmJeF0ZiXheqYl4XumJeF/ZiXhf+Yl4YBmJeGA5iXhgWYl4YHmJeGCZiXhguYl4YQmJeGE5iXhfGYl4XzmJeF9piXhfiYl4X6mJeFi5iXhY2Yl4WYmJeFmpiXhaaYl4WomJeFnJiXhZ6Yl4WqmJeFrJiXhhmYgZjKmMEAl1qabpjDmMaYxJpvmMSZ/pjDmMqYxwAAwACRDZjJmn+YypjEmMuYDJjLmAaYy4WImMuFi5jLhY2Yy4WYmMuFmpjLhZyYy4WemMuFppjLhaiYy4WqmMuFrJjLhbaYy4WgmMuFuJjLhbqYy4W8mMuFw5jLhciYy4XNmMuF0ZjLhdaYy4XamMuF4JjLheaYy4XqmMuF7pjLhf2Yy4X/mMuGAZjLhgOYy4YFmMuGB5jLhgmYy4YLmMuGEJjLhhOYy4YWmMuF8ZjLhfOYy4X2mMuF+JjLhfqYy4YZmMuGG5jLhcCYy4YemMuGIZjKmMqY/QCYyZqAmP+YxJkAmBSZAIYjmQCGJ5kAhiqZAIYsmQCGMJkAhjKZAIY0mQCGNpkAhjiZAIY8mQCGQJkAhkOZAIZKmQCGTJkAhk6ZAIZRmQCGWJkAhl6ZAIZnmQCGaZj/mMqZFgCYyZqBmRiYxJkZmBCZGYUpmRmFR5kZhSOZGYUwmRiYypkfAJjJmoKZIZjEmSKYDpkihVWZIoVYmSKFWpkihVyZIoVemSKFYZkhmMqZKgCYyZqDmSyYxJkthxyZLZgMmS2YBpkthYiZLYWLmS2FjZkthZiZLYWamS2FnJkthZ6ZLYWmmS2FqJkthaqZLYWsmS2FtpkthaCZLYW4mS2FupkthbyZLYXDmS2FyJkthc2ZLYXRmS2F1pkthdqZLYXgmS2F5pktheqZLYXumS2F/Zkthf+ZLYYBmS2GA5kthgWZLYYHmS2GCZkthguZLYYQmS2GE5kthhaZLYXxmS2F85kthfaZLYX4mS2F+pkthhmZLYYbmS2FwJkthh6ZLYYhmS2YFJkthiOZLYYnmS2GKpkthiyZLYYwmS2GMpkthjSZLYY2mS2GOJkthjyZLYZAmS2GQ5kthkqZLYZMmS2GTpkthlGZLYZYmS2GXpkthmeZLYZpmS2YEJkthSmZLYVHmS2FI5kthTCZLYT7mS2FBpktmA6ZLYVVmS2FWJkthVqZLYVcmS2FXpkthWGZLYSnmS2EuJkthMOZLYS7mS2EypkthqqZLYVwmS2FsJkthbKZLYZImS2GVZkthg2ZLYb1mSyYypmQAJjJmoSZkpjEmZOYCpmThoGZk4aEmZOGhpmThoiZk4aMmZOGkpmThqSZk4acmZKYypmdAJjJmoWZn5jEmaCYCpmghoGZoIaEmaCGhpmghoiZoIaMmaCGkpmghqSZoIacmZ+YypmqAJjJmoaZrJjEma2YBJmthrOZrYa2ma2GuZmthryZrYbAma2GxJmthsmZrYbOma2G0ZmthtSZrYbama2G4ZmthuSZrYbnmayYypm9AJjJmoeZv5jEmcCYBJnAhrOZwIa2mcCGuZnAhryZwIbAmcCGxJnAhsmZwIbOmcCG0ZnAhtSZwIbamcCG4ZnAhuSZwIbnmb+YypnQAJjJmoiZ0pjGmdPAAJENmdSaiZnSmMSZ1obnmdaG5JnWhuGZ1obamdaG1JnWhtGZ1obOmdaGyZnWhsSZ1obAmdaGvJnWhrmZ1oa2mdaGs5nWmASZ0pjKmeYAmMmaipnomMaZ6cAAkQ2Z6pqLmemajJnomMSZ7YYXme2YBJnthrOZ7Ya2me2GuZnthryZ7YbAme2GxJnthsmZ7YbOme2G0ZnthtSZ7Ybame2G4ZnthuSZ7YbnmeiYypn+AJjJmo2aAJjGmgHAAJENmgKai5oBmoyaAJjEmgWGF5oFmASaBYazmgWGtpoFhrmaBYa8mgWGwJoFhsSaBYbJmgWGzpoFhtGaBYbUmgWG2poFhuGaBYbkmgWG55oAmMqaFgCYyZqOmhiYxJoZmBKaGYUkmhmFKpoZhUiaGYUxmhiYypofAJjJmo+aIZjEmiKYApoihxyaIpgKmiKGgZoihoSaIoaGmiKGiJoihoyaIoaSmiKGpJoihpyaIpgEmiKGs5oihraaIoa5miKGvJoihsCaIobEmiKGyZoihs6aIobRmiKG1JoihtqaIobhmiKG5JoihueaIoT9miKGnZoimAiaIoa0miKGt5oihrqaIoa9miKGwZoihsWaIobKmiKGz5oihtKaIobVmiKG25oihuKaIoblmiKG6JoimBKaIoUkmiKFKpoihUiaIoUxmiKGbpoihQOaIoagmiGYyppWAJjJmpCaWJjEmlmYAppYmMqaWwCYyZqRml2YxJpehMuaXoYXml6FA5pehxyaXZjKmmMAmMmakpplmMSaZpgMmmaYBppmhYiaZoWLmmaFjZpmhZiaZoWammaFnJpmhZ6aZoWmmmaFqJpmhaqaZoWsmmaFtppmhaCaZoW4mmaFuppmhbyaZoXDmmaFyJpmhc2aZoXRmmaF1ppmhdqaZoXgmmaF5ppmheqaZoXummaF/Zpmhf+aZoYBmmaGFppmhgOaZoYFmmaGB5pmhgmaZoYLmmaGEJpmhhOaZoXzmmaF8ZpmhfaaZoX4mmaF+ppmhhmaZoYbmmaFwJpmhh6aZoYhmmWYypqYAJjJmpOampjEmpuYFJqbhiOam4YnmpuGKpqbhiyam4YwmpuGMpqbhjSam4Y2mpuGOJqbhjyam4ZAmpuGQ5qbhkqam4ZMmpuGTpqbhlGam4ZYmpuGXpqbhmeam4ZpmpqYypqxAJjJmpSas5jEmrSYFJq0hiOatIYnmrSGKpq0hiyatIYwmrSGMpq0hjSatIY2mrSGOJq0hjyatIZAmrSGQ5q0hkqatIZMmrSGTpq0hlGatIZYmrSGXpq0hmeatIZpmrOYyprKAADAAJEOmsyEUJrNmMaazsAAkQ6az5qWms+al5rPmpiazoC9ms6EY5rOJ5rNmMea1oRXmtaXtprWl9qa1pe0mtaXtZrNmMSa3JqZmtyEpJrchvKa3JqamtyEo5rcmpua3IShmtyG8Jrcmp+a3ISimtyao5rchvSa3COa3JiemtyapZrNmMqa7MAAkQ6a7YC1muyG6QDAAJEPmvCaqJrxmMaa8pqpmvKaqprxmMqa9QAAwACREJr3mMWa+JqsmveYxJr6mrGa+prumvqa75r6mvCa+prymvqa85r6mvWa95qumwKYxpsDmq+bA4TxmwKYxJsGmrCbBpqxmwaaspsGmrObApjKmwsAmveVfJsNmMabDoWumw2YxJsQmrSbEJq1mxCatpsQmrebEJq4mxCauZsQmrqbEJq8mxCavZsQhy6bEJq/mxCFk5sQhPKbDZjKmx4Amveaw5sgmMabIZWjmyCYxJsjmr+bI4WTmyOE8psjI5sgmMqbKACa95rFmyqYxpsrhpWbK4aUmyqYxJsumr+bLiObKpjKmzEAmveax5szmMabNITxmzOYxJs2lyibNprJmzOYyps5AJr3msubO5jGmzyEmJs7mMSbPpq/mzuYyptAAJr3msybQpjGm0ODHptDmr6bQpjEm0aav5tCmMqbSACa95rNm0qYxptLloObS5rOm0qYxJtOmr+bSpjKm1AAmveaz5tSmMabU4Txm1KYxJtVlyibVZrJm1KYyptYAJr3mtKbWpjGm1ua0JtbmtObW5rUm1qYxJtflyibX5rVm1+ayJtfhQObX4agm1+awptfhoGbX4aEm1+GhptfhoibX4aMm1+GnJtfmq+bX5rJm1+GkptfmtebX5q/m1+GpJtamMqbcgCa95rYm3SYxpt1mtmbdZram3SYxJt4mtWbeIakm3SYypt7AJr3mtubfZjGm36E8Zt+mtybfsAAkRCbgZrdm36CoJt9mMSbhMAAkRCbhZrgm4Wa35uFmuqbhZrjm32YypuKAJr3muybjJjGm42GOpuMmMSbj5rCm4+GoJuPhoGbj4aEm4+GhpuPhoybj4acm4+GkpuPhqSbj5rtm4yYypuaAADAAJERm5yYxZudmvmbnJr6m5+Yxpugh3iboITJm6CFSZugmvuboJr8m6Ca/ZufmMmbpwCbn5jHm6mGIJuphYCbqYW1m6mFlZupmwObqYX1m6mF0JuphfybqYWXm6mbCZupmwKbqZsEm6mbC5ufmMSbt4XVm7eF2Zu3hd+bt5sQm7ebEpu3hh2bt4YPm7eFg5u3haGbt4Wim5+YypvCmv6bnJsVm8SYxpvFmxabxJjHm8eGIJvHhYCbx5sJm8ebC5vEmMSbzIYdm8yFgpvMmxebzMAAkRGb0JsYm9CbH5vMmxqbxJjKm9QAAMAAkRKb1pjGm9ebKZvXmyqb15srm9ebLJvXmy2b15sum9ebL5vXmzCb1psnm+CYxpvhmyib4JjKm+MAAMAAkROb5ZjFm+abMpvlmMSb6MAAkROb6Zvzm+mb9ZvlmzOb7JjEm+2bNJvsmMqb7wCb5Yfjm/GYyZvyAJvxmMib9Js1m/SbNpvxmMSb95s5m/ebO5v3mzyb95s9m/eFgpv3mz6b95s/m/ebQZv3m0Ob95tEm/ebRZv3m0ab95sam/ebSJv3m0mb95tKm/ebTpv3m1Cb95tUm/ebVZv3m2Ob5ZtknA2YxJwOm2WcDptmnA2YypwRAJvlm2ecE5jGnBSbaJwUm2mcFJtqnBOYypwYAJvlm2ucGpjGnBuHfJwbwACRE5wdm2ycHZttnB2bb5wbm26cGpjEnCLAAJETnCObcZwim2acIptlnBqYypwnAJvlm36cKZjGnCrAAJETnCubf5wrm4CcK5ttnCubgpwrm4OcK5uEnCqbNpwqm4GcKptwnCmYyJw1mzWcKZjEnDebhpw3m4icN5uJnDebi5w3mzmcN5tGnDebGpw3m0icN8AAkROcQJuNnECbq5xAmzicQJu2nECbtJxAm7qcQJu7nECbpZxAm9WcQJvYnECbxJxAm8OcN5s8nDebPZw3hYKcN5s/nDebQZw3m0OcN5tEnDebRZw3m0mcN5s7nDebSpw3m06cN5u+nDebPpw3m+CcN5vknDeb5pwpmMecXoSInF6bipwpmMqcYcAAkROcYoZrm+Wb6JxkmMacZZvpnGSYxJxnm+qcZ5t0nGebd5xnm3qcZJjKnGwAm+Wb7ZxumMacb5uHnG+E75xvm7mcb5rZnG+bdZxvm3icb5t5nG+b3Zxvm96cb5uOnG+bnpxvm6ecb5umnG+bpJxvm6Ocb5u9nG+bvJxumMScgZtGnIGbGpyBm9mcbpjKnIUAm+Wb7pyHmMaciMAAkROciZvvnIeYxJyLgxyci5cunIeYx5yOXJyHmMqckACb5ZvwnJKYxJyTm/Gck5vynJKYypyWAADAAJEUnJiH5JyZmMacmpv3nJonnJrAAJEUnJ2cC5ydnAycnZwNnJ2cDpydnA+cnZwQnJ2cEZydnBKcnZwTnJ2cFJydnBWcnZwWnJ2cF5ydnBicnZwZnJ2cGpydnBucnZwcnJ2cHZydnB6cnZwfnJ2cIJydnCGcnZwinJ2cI5ydnCScnZwlnJ2cJpydnCecnZwonJ2cKZydnCqcnZwrnJ2cLJydnC2cnZwunJ2cL5ydnDCcnZwxnJ2cMpydnDOcnZw0nJ2cNZydnDacnZw3nJ2cOJydnDmcnZw6nJ2cO5ydnDycnZw9nJmYx5zRnD6c0ZxBnNGcQ5zRnEac0ZxInNGcSpzRnEyc0ZxNnNGcTpzRnFCc0ZxSnNGcVJzRnFac0ZxYnNGbAZzRnFqc0ZxcnNGcXZzRnF+c0ZxhnNGcY5zRmwWc0ZsKnNGbFJzRmwuc0ZxmnNGbApzRnGic0ZxpnNGcapzRnGyc0ZsRnNGcbpzRmw2c0ZxvnNGccJzRmw6c0ZsPnNGcc5zRnHSc0Zx3nNGbAJzRmwSc0Zr/nNGcepzRnHuc0Zx9nNGcfpzRnH+c0ZyAnNGbE5zRnIKc0ZyFnNGch5zRnIic0ZyJnNGcipzRmwac0ZsHnNGcjJzRnI6c0ZyQnNGckZzRmwic0ZyTnNGclZyZmMqdFAAAwACRFZ0Wh/GdF5jGnRicmJ0XmMSdGmydGpybnReYx50diEydF5jKnR8AAMAAkRadIZjEnSKDC50igo6dIsAAkRadJZywAMAAkRedJ5y5nSiYxJ0pbJ0pnJudKJjHnSyITJ0omMqdLgCdJ5y7nTCYxJ0xbJ0xnL2dMJjKnTQAnSeH8502mMadN8AAkRedOJy/nTaYxJ06nL2dOpybnTaYx509iEydNpjKnT8AnSecwJ1BmMadQsAAkRedQ5zBnUGYxJ1FnL2dRcAAkRedR5zCnUWcm51BmMedSohMnUGYyp1MAADAAJEYnU6Yxp1PnMqdTpjEnVGH9J1RwACRGJ1TnMwAwACRGZ1VmMadVpzlnVWYxJ1YiB2dWJzpnVic8J1YnPGdWJzyAMAAkRqdXpjHnV+IF51emMSdYYb2nWGc9J1hnOOdYZz1AMAAkRudZpjEnWeVJp1ng2WdZ5zknWec+Z1nnPydZ5z+nWaIA51umMadbyKdbpjEnXEjnW6Yyp1zAADAAJEcnXWIBJ12mMadd50AnXeIF513nQGddpjEnXuIR517lqSde50EnXaYyp1/AADAAJEdnYGIBZ2CmMadg50GnYOITJ2CmMSdhp0HnYadCJ2GnQmdhp0NnYadEJ2GwACRHZ2MnQudjJ0MnYydEZ2MnRKdgpjKnZEAAMAAkR6dk5jGnZSDO52TmMSdlp0UnZadFZ2WnRgAwACRH52amMSdm4IsnZuVZZ2blWOdm5VknZuCLZ2aghWdoZjGnaKdHZ2inR6dop0fnaGYx52mgmKdpp0nnabAAJEgnamXOJ2hmMSdqyOdq50onaudKZ2rnSqdq4CWnaGYyJ2xwACRIJ2ylzidoZjKnbSdIJ20nSOdtJ0knbTAAJEfnbiAtZ2anS6dupjHnbthnbvAAJEgnb2dL526mMSdv50qnbqYyp3BAJ2anTCdw5jGncSEV53DmMSdxp0qncaEXp3DmMqdyZ0jncmdIJ3JnSSdycAAkR+dzYC1nZqVYp3PmMad0J0zndCdNJ3PmMSd050qnc+Yyp3Vllqd1Z0jndWdJJ2anTed2ZjEndqdKp3ZmMqd3J0jndydJJ3cwACRH53fgLWdmp04neGYx53iEp3iap3iYZ3inSad4ZjJnecAneGYyp3plX+dmp05neuYxp3sEp3shIud65jHne9qne9hne+dJp3rmMqd8wCdmp06nfWYxp32Ep32ap32YZ32nSad9ZjKnfsAAMAAkSGd/ZjGnf6dO53+luyd/pbunf6W8J3+lvKd/pb0nf6W9p3+lvid/pb6nf6cyJ3+nMmd/ZjEngqW/J4Klv2eCpb+ngqW/54KlwCeCpcBngqXAp4KlwOeCpcEngrAAJEhnhSdPZ4KiLsAwACRIJ4XmMaeGJ40nhieNZ4YnjaeGJ43nhieOJ4YnjmeGJ46nhieO54YnjyeGJ49nhiePp4Ynj+eGJ5AnhieQZ4YnkKeGJ5DnhieRJ4YnkWeF51CniuYxp4snUOeK5jEni6dKp4rmMeeMJ1MniuYyJ4ynUyeK5jKnjQAnhedMJ42mMaeN4RXnjaYxJ45nSqeOYRenjaYyp48AJ4XnU2ePpjEnj+dKp4+mMqeQQCeF5VonkOYxp5EnU6eRJ1PnkSdUJ5EnVGeRJ1SnkSdU55EnVSeRJ1VnkSdVp5EnVeeRJ1YnkSdWZ5EnVqeRJ1bnkSdXJ5EnV2eRJ1enkSdX55EnWGeRJ1inkSdY55EnWSeRJ1lnkSdZp5EnWieRJ1pnkSdap5EnWueRJ1snkSdbZ5EnW6eRJ1vnkSdcJ5EnXGeRJ1ynkSddJ5EnXWeRJ12nkSdd55EnXieRJ16nkSde55EnXyeRJ19nkSdfp5EnX+eRJ2AnkSdgp5EnYOeRJ2EnkSdhZ5EnYaeRJ2HnkSdiJ5EnYmeRJ2KnkSdi55EnYyeRJ2NnkSdjp5EnY+eRJ2QnkSdkZ5EnZKeRJ2TnkSdlJ5EnZWeRCmeRJ2WnkSdl55EnZieQ5jHnoydm56MnZyejIC9noydnZ5DmMSekSOekcAAkSCek52enkOYyp6VAJ4XnaCel5jGnpidn56XmMSemp0qnpqAlp6XmMeenZ0nnp2doZ6dnaKel5jKnqEAnhedo56jmMaepIKUnqSDYp6knTGepIO1nqTAAJEgnqmdpJ6jmMeeq52mnquHZZ6rnaeeq52onquCkJ6rnUyeq52pnqudJ56rnaGeq52inqudmZ6rnaueq4STnqudmp6rgiyeq52fnquCa56rYZ6rgmKeq50inqudrJ6jmMiewZ2onsGdIp6jmMSexJ0qnsSdK57Ena6exJ2tnsSdMp7EI57EgJaexMAAkSCezJ2lnqOYyp7OAJ4XghWe0JjGntHAAJEgntKXOJ7QmMee1J0nntSCYp7QmMSe150qnteAlp7QmMqe2gCeF52vntyYxJ7dnSqe3JjHnt+Ek57fYZ7cmMqe4gCeF52wnuSYx57lYZ7kmMSe550qnuSYyp7pAJ4XnS6e65jGnuzAAJEgnu2dL57rmMee74STnu9hnuuYxJ7ynSqe65jKnvQAnheRhJ72mMae952onvaYx575hJOe+WGe9pjEnvydKp72mMqe/gCeF4IWnwCYxp8BwACRIJ8ClnSfAJjJnwQAnwSdsp8AmMefB52mnweHZZ8HnaefB52onweCkJ8HnUyfB52pnwedJ58HnaGfB52inwedmZ8HnaufB4STnwedmp8HgiyfB52fnweCa58HYZ8HgmKfB4O1nweDYp8HnSKfB50xnwedrJ8HgpSfAJjInyGdqJ8hg7WfIYNinyGdMZ8AmMSfJp0qnyadK58mna6fJp2tnyadMp8mI58mgJafJp2znhedtJ8vmMafMJ21nzCdtp8wnbefMJ24nzCduZ8wnbqfMJ27nzCdvJ8wnb2fMJ2+nzCdv58wncCfMJ3BnzCdwp8wncOf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iqHZooqhjaKKodyiiqHeooqh36KKoeSiiqHlooqhoaKKoeaiiqHqooqiAKKKogSiiqIFooqiB6KKogyiiqIRooqiE6KKohaiiqIbooqiHqKKoiCiiqIkooqiJqKKoiiiiqIvooqiNKKKojKiiqI4ooqiOaKKojqiiqI9ooqiQKKKokOiiqJGooqiR6KKokiiiqJKooqiT6KKolCiiqJUooqiV6KKolmiiqJbooqiYKKKomuiiqJ0ooqidqKKoneiiqJ6ooqigqKKooeiiqKPooqikqKKopWiiqKOooqimaKKopyiiqKdooqioqKKoqWiiqKsooqhlqKKorOiiqK2ooqiuKKKor2iiqLFooqiyKKKosmiiqLMooqiz6KKotGiiqLdooqi4aKKouKiiqLkooqi5aKKouiiiqLqooqi7KKKou2iiqLyooqi86KKovWiiqMAooqjCqKKow6iiqMRooqjEqKKoxWiiqMXooqhOaKKoY6iiqGjooqjJaKKoyaiiqMoooqjKaKKoyqiiqMrooqjLaKKozOiiqM1ooqjOKKKozmiiqM6ooqjO6KKozyiiqM/ooqjQqKKo0eiiqNJooqjS6KKo0yiiqNOooqjUKKKo1OiiqNUooqjVqKKo1eiiqNZooqjWqKKo2CiiqNhooqjY6KKo2SiiqNpooqjaqKKo2yiiqNxooqjdaKKo3aiiqN4ooqjfqKKo4CiiqOCooqjhqKKo4eiiqOLooqjjaKKo4+iiqORooqjk6KKo5uiiqOeooqjoKKKo6yiiqOwooqjsqKKo7qiiqO8ooqjwaKKo8WiiqPOooqjz6KKo9CiiqPTooqj16KKo9miiqPbooqhGaKKoUGiiqEtooqjuaKKoYqiiqIiooqhKqKKoV6iiqPcooqj3aKKoWCiiqFqooqj4qKKo+SiiqPlooqj56KKo+miiqGIooqj7KKKobiiip6uooqh4aKKorKiiqE0ooqj76KKo/CiiqIlooqjX6KKoVKiiqG1ooqhh6KKox6iiqFfooqjH6KKo/eiiqM3ooqj+KJfmMqjkACjkKEIo5ChCaOQoQqiVpV9o5WYxKOWlZOjlpWNo5WYyqOZAKJWhVGjm5jGo5yShaOch2Wjm5jHo5+AvaObmMSjoSOjm5jKo6MAolaj/KOlmMajpqEpo6aCa6OmoPmjpoRXo6aHZaOlmMejrIRmo6yjv6Oso8ujrKPJo6yibqOsoaSjpZjEo7Ojw6Ozo82js6PKo7OicqOzonCjs6O2o6WYyqO6AKJWpAKjvJjGo72EV6O9okyjvaJOo72g+aO9h2WjvJjHo8OEZqPDom6jw6Epo8OCa6PDo7+jw6PLo8OjyaPDoaSjvJjEo8yjw6PMo82jzKPKo8yicqPMonCjzKO2o7yYyqPTAKJWou6j1ZjGo9aau6PWh2Wj1mGj1oCso9WYxKPbo12j26K1o9uhmKPbI6PVmMqj4ACiVqOBo+KYxqPjgL2j44dlo+KYxKPmI6PimMqj6AAAwACRMqPqlZqj65jGo+yCV6PsiBOj7KQYo+ykGaPspBqj7KQbo+ykHKPspB2j7KQeo+ykH6PspCCj7KQho+ykIqPspCOj7KQko+ykJaPspCaj7KQno+ykKKPspCuj65jEpAGkLaQBpFKkAaRTpAGkSaQBpDmkAaRFpAGkUaQBpFCkAaRapAGkT6QBpECkAaQypAGkM6QBpGikAaQwpAGVTKQBpG6kAaQ8pAGkh6QBpIikAaSJpAGkSKQBpICkAaQ4o+uYyqQapCykGgCj6qSKpB2YyqQeAKPqpIukIJjGpCEipCCYxKQjI6QgmMqkJQCj6qSMpCeYxqQopE2kKIJZpCikNqQnmMqkLAAAwACRM6QupJCkL5jGpDDAAJEzpDGkkaQvmMSkM4J9pC+YyqQ1AKQupJWkN5jGpDjAAJEzpDmklqQ3mMSkO4HFpDeYyqQ9AKQupJekP5jGpEDAAJEzpEGkmKQ/mMSkQ4KSpEOClaQ/mMqkRgCkLqSbpEiYxqRJhECkSJjEpEtWpEuCjKRImMqkTgAAwACRNKRQpJ+kUZjGpFLAAJE0pFOkoKRTpKGkU6SipFOko6RTpKSkU6SlpFGYx6RawACRNKRbpKakWoC9pFqWvqRapKikWoG1pFqWwqRRmMSkYpbapGLAAJE0pGSkrKRkpLCkZKSrpGSks6RkpLWkZKS3pGKW3qRilrCkYqTCpGKWxKRilsWkUZjKpHAApFCWmaRymMakc4C9pHKYyqR1AKRQlpqkd5jGpHjAAJE0pHmkw6R5pMSkeaTFpHmkraR5pL2keJajpHiDxqR3mMekgZaupIGWuaR3mMSkhKTGpISkx6SEpLGkhKSvpHeYyqSJAADAAJE1pIuYxqSMh+oAwACRNqSOmMWkj6TvpI6k8KSRmMakkqTxpJKk8qSSwACRNqSVpPOklaT0pJWk9aSVpJiklaT5pJWk/KSSpPakknqkkqT3pJKk+KSSpPqkkoCJpJKWoKSSgqGkkqT7pJKk/aSSlq+kkqT+pJKk/6SSpQCkkqUBpJKC0qSSpQKkkqUDpJKlBKSSpQWkkqUGpJKlB6SSpQikkqUJpJKlCqSSpQukkZjHpLaWnKS2g2uktoFypLalEKS2pROktqUUpLalFaS2nmuktqUWpLalGaS2gqykkZjEpMKclqTCpRGkwoKfpMKlHKTCpSOkwqUdpMKlNaTCpTqkwqUhpMKlMaTCpSmkwqVNpMKlaKTCpUekwqVMpMKlSaTCpVWkwpbUpMKW26TCpX2kwqV+pMKlf6TCpYCkwqWFpMLAAJE2pNulgqSRmMqk3QCkjqWHpN+YxqTgwACRNqThpYik4aWJpN+YxKTkgpKk5IKVpN+YyqTnAKSOpYqk6ZjGpOqli6TqgICk6ZjKpO0ApI6ljKTvmMak8IKapPB6pPDAAJE2pPOljaTwnmuk8KWOpPClj6TvmMek+KUVpPilmaTvmMSk+6WQpPullKT7od2k+6WWpPull6T7pZWk+5bUpPulaqT7pZqk+8AAkTalBaWgpPulk6T7paWk+6WcpPulm6T7pZik+5akpPulnqT7gayk+6V8pPulS6TvmMqlEQCkjqWtpROYxqUUwACRNqUVpPSlE5jEpRelrqUXpa+lE5jKpRoApI6lsKUcmMSlHZbjpR2W5qUcmMqlIACkjqWxpSKYxKUjpW+lI6V2pSKYyqUmAKSOpbKlKJjGpSnAAJE2pSqk86UqpbOlKJjEpS2ldqUtpW+lKJjKpTAApI6ltKUymMalM8AAkTalNKW1pTSltqUymMSlN6VvpTeldqUymMqlOgAAwACRN6U8mMalPacYpTyky6U/mMalQCelQMAAkTelQiilQCmlQKYSpUCmE6VAphSlQKYVpUCmFqVAif6lQKYXpUCmGKVAphmlQKYapUCmG6VAphylQKYdpUCmHqVAph+lQKYgpUCmIaVApiKlQKYjpUCmJKVApiWlQKYmpUCmJ6VApiilQKYppUCmKqVApiulQKYspUCmLaVApi6lQKYvpUCmMKVApjGlQKYypUCmM6VApjSlQKY1pUCmNqVApjelQKY4pUCmOaVApjqlQKY7pUCmPKVApj2lQKY+pUCmP6VApkClQKZBpUCmQqVApkOlQKZEpUCmRaVApkalQKZHpUCmSKVApkmlQKZKpUCmS6VApkylQKZNpUCmTqVApk+lQKZQpUCmUaVAplKlQKZTpUCmVKVAplWlQJDApUCmVqVAjPOlQKZXpUCmWKVAplmlQI0JpUCmWqVAjvilQIo6pUCQ4qVAplulQKZcpUCRWKVApl2lQKZepUCmX6VApmClQKZhpUCmYqVApmOlQKZkpT+YxKWgI6U/mMqlogClPKTYpaSYxqWlgmulpYjWpaWmZaWlpmalpXqlpaZnpaSYxKWsI6WsIqWkmMelr6cQpaSYyqWxAKU8h/als5jGpbSI1qW0W6W0gsultCKls5jHpbmCa6W5g8als5jEpbynEaW8I6W8SKW8pxals5jKpcEAAMAAkTilw6cZpcSYxKXFluOlxZbmpcSYyqXIAADAAJE5pcqXBqXLmMSlzIb2pcuYyqXOAKXKpxyl0JjGpdFhpdGHHqXQmMSl1MAAkTml1acdpdSnHqXUhval1IOOpdQjpdCYyqXbAADAAJE6pd2nIqXemMal36cjpd+nJKXfhNel34Vipd+FEqXfhSWl34Uypd+FK6XfhVSl34VWpd+FWaXfhVul34Vdpd+FX6Xfhh+l34Ycpd+Fm6XfhZ2l34Wfpd+nJaXfhYel34WJpd+FjKXfhY6l34WZpd+FpKXfhael34Wppd+Fq6XfhbSl34W3pd+FuaXfhbul36cmpd+FwaXfhcSl34XJpd+FzqXfhdKl34XXpd+F26XfheGl34Xppd+F66XfhfCl34X0pd+nJ6Xfpyil34X5pd+F+6Xfhf6l34YApd+GAqXfhgSl34YGpd+GCqXfhg6l34YSpd+GGKXfhhql34W+pd+nKaXfpyql36crpd+nLKXfpy2l34YIpd+nLqXfhiKl34Ykpd+GK6Xfhi2l34Yxpd+GM6XfhjWl34Y3pd+GOaXfhj2l34ZBpd+GSaXfhkul34ZNpd+GT6Xfhlal34ZZpd+GX6Xfhmil36cvpd+GKaXfhpql34aHpd+GgKXfhoOl34aFpd+GiaXfho2l34ahpd+nMKXfpzGl36cypd+nM6XfpzSl34YUpd+nNaXfpzal36c3pd+nOKXfpzml36c6pd+nO6Xfpzyl36c9pd+nPqXemMqmUQCl3ac/plOYxqZUhrKmVIa1plSGuKZUhrumVIa/plSGwqZUhsemVIbNplSG0KZUhtOmVIbYplSG36ZUhuOmVIbmplOYyqZjAADAAJE7pmWYxKZmp1SmZadBpmiYxKZpmY+maJjKpmsApmWnQqZtmMambsAAkTumb6dDpm2YxKZxmY+mbZjKpnMApmWnRKZ1mMamdsAAkTumd6dFpnenRqZ3p0OmdZjJpnsApnWYx6Z9p0emfZmtpnWYxKaApHSmgJmPpoCZr6Z1mMqmhIWupmWnSKaGmMamh5iTpoenSaaGmMSmiqLbpoqnSqaKhP2mioSnpoqYEqaKhm6mhpjKppEAAMAAkTymk5r4ppSYxqaVh3ymlJjEppeFgqaUmMqmmQAAwACRPaabp1qmnJjGpp3AAJE9pp6nW6acmMemoIFVpqCDt6acmMSmo1amo4RepqOb8aajwACRPaanp1+mp6dcpqenXqacmMqmqwAAwACRPqatp2OmrpjGpq+nZKavp2amr6dopq/AAJE+prOItKaumMSmtcAAkT6mtqdtprWcQqa1nHWmtadwprWcS6a1nGSmtZxEprWncqa1nD+mtadzpq6YyqbBAKbBp2umwadspsGeJ6atp3SmxpjGpseESKbHwACRPqbJm++mxpjHpsuEiKbLp3WmxpjEps7AAJE+ps+neKbOnEumzpxkps6cRKbOp3KmxpjKptUApq2neqbXmMam2IRXptiEmKbYwACRPqbbp3um15jHpt2ESKbdhJSm3ad1pteYxKbhp3ym4YSWpuGcRKbhp3Km15jKpuYApuanaADAAJE/pumYxqbqp4Wm6qeGpuqnh6bqp4im6qeJpuqniqbqp4um6qeMpuqnjabqp46m6qePpuqnkKbqp5Gm6qeSpuqnk6bqp5Sm6qeVpuqnlqbqp5em6qeYpuqnmabqp5qm6qebpuqnnKbqp52m6qeepuqnn6bqp6Cm6qehpuqnoqbqp6Om6qekpuqnpabqp6am6qenpuqnqKbqp6mm6qeqpuqnq6bqp6ym6qetpuqCLqbqp66m6qevpuqnsKbqp7Gm6qeypuqns6bqp7Sm6qe1puqntqbqp7em6qe4puqnuabqp7qm6qe7puqnvKbqp72m6qe+puqnv6bqp8Cm6qfBpuqnwqbqp8Om6qfEpuqCL6bqlfym6pX9puqV/qbqlf+m6pYApuqWAabqlgKm6pYDpuqCMKbqp8Wm6qfGpuqnx6bqp8im6qfJpuqnyqbqp8um6qfMpuqnzabqp86m6qfPpuqn0Kbqp9Gm6oIxpuqWC6bqlgym6pYNpuqWDqbqlg+m6pYQpuqWEabqlhKm6pYTpuqWFKbqlhWm6pYWpuqWF6bqlhim6pYZpuqWGqbqlhum6pYcpuqWHabqlh6m6pYfpuqWIKbqliGm6pYipuqCO6bqp9Km6qfTpuqn1Kbqp9Wm6qfWpuqn16bqp9im6qfZpuqCPKbqp9qm6qfbpuqn3Kbqp92m6oI9puqWJ6bqliim6pYppuqWKqbqlium6oI+puqWLKbqli2m6pYupuqWL6bqljCm6pYxpuqWMqbqljOm6pY0puqWNabqljam6oI/puqWN6bqljim6pY5puqWOqbqljum6pY8puqCQKbqp96m6qffpuqn4Kbqp+Gm6qfipuqn46bqp+QAwACRQKeLmManjMAAkUCnjafmp4uYxKePnJ2nj8AAkUCnkafop4+cuADAAJFBp5SEUaeVmManlhKnlmqnloKQp5an96eWg7WnlZjKp5wAp5Sn+KeemMann6f5p5+n+qefwACRQaeip/unoqf8p6Kn/aeemMSnpochp6an/qemp/+npqgAp6adIaemgkannpjKp60AAMAAkUKnr6gDp7CYx6exgpCnsWGnsYNip7CYyqe1AADAAJFDp7eoBKe4mManuagFp7iYxKe7qAanuJjKp70AAMAAkUSnv5jGp8CeRgDAAJFFp8KeXqfDmManxIY6p8SZYKfEqAinxJ7zp8SfJafEqAmnxMAAkUWny6gKp8OYxKfNqAunzYSnp82E+6fNhQanzcAAkUWn0qgPp82e76fNqBGnzZ8op82GF6fNqBKnzYWIp82Fi6fNhY2nzYWYp82FmqfNhZynzYWep82FpqfNhainzYWqp82FrKfNhbanzYWgp82FuKfNhbqnzYW8p82Fw6fNhcinzYXNp82F0afNhdanzYXap82F4KfNheanzYXqp82F7qfNhf2nzYX/p82GAafNhgOnzYYFp82GB6fNhgmnzYYLp82GDafNhhCnzYYTp82GFqfNhfGnzYXzp82F9qfNhfinzYX6p82GGafNhhunzYYjp82GJ6fNhiqnzYYsp82GMKfNhjKnzYY0p82GNqfNhjin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tapcqrWqXaq1ql6qtZ8QqrWHrqq0mMSqvqpgqr6Eu6q+hLiqvoT7qr6FR6q+hSmqvoTKqr6FMKq+hqqqvqphqr6qY6q+hXCqvoZnqr6FI6q+hf2qvoWqqr6GSKq+hYuqvoYHqr6F1qq+hgmqvoXaqr6GC6q+heCqvoW8qr6Fuqq+hhaqvqpkqr6qZqq+qmiqvqppqrSYyqreAKqjqmyq4JjGquGoUKrhh26q4Yd9quGHrqrhh3iq4YbdquGqX6rhnxCq4aptquGqbqrhqm+q4apwquGe8qrhqnGq4apyquGqc6rhqnSq4ap1quGqdqrhlqeq4ap3quGqeKrhqnmq4ap6quGqe6rhqn2q4JjHqvyqgqr8qoOq4JjEqv+c/qr/qoSq/58iqv+Bxar/qomq/6qKqv+qi6r/qoyq/6qNqv+GlKr/qo6q/4drqv+HbKr/h22q/8AAkVCrDqqFqw6qkKr/qmuq/6qUqv+qkqr/qpOq/4ccqv+F+qr/hfiq/4Xzqv+F9qr/hfGq/4X/qv+GFqr/hgeq/4XWqv+GCar/hdqq/4YLqv+F4Kr/hhOq/4W8qv+F5qr/qqiq/6qwqv+qq6r/qq6q/4WIqv+Ftqr/hciq/4XNqv+FmKr/hhmq/4WLqv+Fqqr/hdGq/4W6qv+F7qr/heqq/4XDqv+F/ar/hcCq/4Yhqv+quqr/hr6q/6rUqv+q1ar/qpeq/6qYqv+qzqr/qs2q/6qpqv+qtqr/qtCq/6qZqv+qpKr/qqWq/6qmqv+dIar/qqqq/6piqv+qvar/qsCq/6rCqv+qz6rgmMqrUACqo6rfq1KYxqtTquCrU6mtq1OFLKtThIurU4Xkq1OF5atSmMSrWqqvq1qqrataqqyrUpjKq14AqqOq4atgmMarYcAAkVCrYqnEq2Kq4qtiquOrYJjHq2aBVatmqrirYJjEq2mqtKtpqmeraarkq2mqxqtphZOrYJjKq28AqqOq5atxmMarcoPzq3Iiq3KCV6txmMqrdgCqo6rmq3iYxqt5g/OreSKreJjKq3wAqqOq56t+mMSrf4HFq3+qiKt+mMqrggCqo6roq4SYxKuFgcWrhaqIq4XAAJFQq4iq6auFnQqrhJjKq4sAqqOq66uNmMarjsAAkVCrj6rsq42YxKuRqm6rkZgKq5GGgauRhoSrkYaGq5GGiKuRhqSrkYaMq5GG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Q5jErkShDK5ErESuQ5jKrkcArHOsRa5JmMauSqDyrkmYxK5MrEiuTKu9rkyhbK5MrEuuSZjKrlGsRqxzrEyuU5jGrlShgq5TmMSuVquRrlOYyq5YAKxzrE6uWpjErlusT65brFGuW6xUrlusVa5brFeuW6xZrlqYyq5irEasc6xarmSYxK5lq5GuZJjKrmfAAJFWrmiAtaxzpBauapjGrmuiNq5rwACRVq5trFyubaxQrm2sWK5trFaubaxTrmqYx65zrF6uapjErnWrka51rGCudaNSrmqYyq55AK55rF2ueYZmrHOsYa59mMaufqvrrn2YxK6Aq5GufZjKroLAAJFWroOAtaxzrGOuhZjGroaj+a6Go/quhZjEromrka6FmMqui8AAkVaujIC1rHOsZa6OmMauj6GCro/AAJFWrpGsZq6RrGeujpjErpSrka6OmMqulgCsc6xprpiYx66Zq5SumJjErpurka6YmMqunQCsc6xrrp+Yx66gq5Cun5jErqKrka6fmMqupACsc6xtrqaYxq6nW66noYKuppjHrqqr3K6mmMSurKuRrqaYyq6uAKxzrG+usJjGrrGEr66xoYKusJjErrSrka6wmMqutgCsc6xxrriYxq65q6OuuJjKrrsArHOscq69mMSuvoRSrr6Fha6+hXyuvoRZrr6EU669mMquxACsc6DnrsaYxK7HrHOux6x0rsejH67Ho/eux6x1rsesdq7Hox6ux6M3rsej+K7HrHeuxpjKrtIArHOseK7UmMau1auxrtWsea7VrHqu1ax7rtWsfK7VrH2u1JjErtyYDK7cmBSu3IWIrtyF867chfau3IXurtyrkq7cq5au3IYQrtyrma7chfiu3IY0rtyroa7chc2u3IW8rtyrz67cq9Gu3KvTrtyr1a7cq9iu3Kvartyr3a7cq9+u3KyJrtysi67crJKu3IZArtyr4q7crJiu3KvortyGE67cq+yu3Kvwrtyr8q7cq/Su3Kv4rtyr/q7crAGu3KwDrtysBa7chequ3IYyrtysqK7crKqu3KyzrtysB67chciu3Ky5rtysu67crMqu3KwLrtysDq7crBCu3IXDrtysE67crBeu3IX6rtyGGa7crB2u3IWYrtysH67chgOu3KwirtysCa7crCWu3IWqrtyFuq7chdGu3IXxrtysJ67crCmu3Kwrrtys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w7RUhDG0S5jKtGIAsm2g0bRkmMe0ZYC9tGVbtGSYxLRoode0ZJjKtGoAsm2ux7RsmMe0bYC9tG1btGyYxLRwode0bJjKtHIAsm2gz7R0mMa0dSK0dJjHtHeAvbR3wACRZrR5rmu0ea5stHSYxLR8rrK0fKG3tHyhGLR8hDG0dJjKtIEAsm2uybSDmMe0hIC9tIRbtIOYxLSHode0g5jKtIkAsm2g2bSLmMa0jIC9tIxbtIuYx7SPwACRZrSQrmu0kK5stIuYxLSToRi0k6N8tJOh17STrnW0k652tJOjFLSTrni0k6G3tJOEMbSLmMq0nQCyba7LtJ+Yx7SggL20oFu0n5jEtKOh17SfmMq0pQCybaDQtKeYxrSogL20p5jHtKrAAJFmtKuua7Srrmy0p5jEtK6hGLSuo3y0rqHXtK6udbSurna0rqMUtK6ueLSuobe0roQxtKeYyrS4ALJtoNS0upjHtLvAAJFmtLyubLS6mMS0vq5ytL7AAJFmtMCufLS6mMq0wgAAwACRZ7TEoOO0xZjHtMaESLTGoPK0xqD5tMag/rTGoOq0xoJQtMWYxLTNoaG0zaETtM2h5bTNoeq0zaG2tM2hXrTNoWC0zaFqtM2j4rTNoY60zaGNtM2ho7TNo++0zaPwtM2j7LTNobi0zaM1tM2j6bTNoeG0zaHctM2h3rTNod+0zaHktM2hLbTNoYi0zaFStM2htbTNorK0zaMetM2jH7TNo/e0zaM3tM2j+LTFmMq07wAAwACRaLTxoOS08pjEtPOhibTzoaK086MktPOjI7TzobO086G0tPOiELTzopG086KUtPOiGbTzohq086KAtPOihbTzope086FztPOiCbTzoqG0866utPOim7TzmPa0866gtPOj8rTzory086NGtPOjPrTzoz2086JqtPOiabTzo3q086N5tPOjmrTzo5e086J1tPOhH7Tzo8K086L/tPOh1bTzo8y086NotPOhfbTzo5C086JxtPOiLrTzosK086HTtPOh0bTzoaq086OKtPOiI7Tzogu086JvtPOhzbTzoeC086FrtPOjCbTzokW086JTtPOhI7Tzo46086OdtPOiZ7Tzo7i086JotPOjX7Tzoma086PutPOiUrTymMq1NwC08a7qtTmYxrU6rtW1OoCstTmYxLU9hFK1PYWFtT2EU7U9hFm1OZjK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tv6Girb+sA+2/rAQtv6wEbb+r+C2/q/itv6E8bb+sBK2/rATtv6hgbb+sBS2/q/utv6v8Lb+r/K2/q/0tv6v9rb+r/i2/q/6tv2YxLcXI7b9mMq3GQC2dLAVtxuYxrccg+y3HIJrtxzAAJF6tx+XOLccErccl1C3G5jJtyOvc7cbmMS3Ja90tyWCT7clSLclI7clwACRe7cqsCW3G5jHtyyAlrcsg9a3LIC9tyywILcssCG3LIPGtxuYyLczgJa3G5jKtzUAtnSwJrc3mMa3OCe3OMAAkXq3Oii3OCm3OLAntziwKLc4sCm3OLAqtziGFbc4sCu3N5jEt0MjtzeYyrdFALZ0sCy3R5jGt0iD7LdIgmu3SBK3SMAAkXq3TJc4t0eYybdOr3O3R5jEt1CvdLdQSLdQI7dHmMe3VICWt1SwMbdUsCG3VIPGt0eYyLdZgJa3R5jKt1sAtnSwNrddmMa3Xie3XsAAkXq3YCi3Xim3Xpypt16aL7desHC3Xp9Tt16wcbdesHK3XrBzt16wdLdesHW3XrB2t16wd7desHi3XrB5t16werdesHu3XrB8t16wfbdesH63XoJut16wf7desIC3XoDtt16wgbdesIK3XrCDt16whLdegym3XoJ4t16whbdesIa3Xq3Vt16wh7desIi3XrCJt16wirdesIu3XrCMt16wjbdesI63XrCPt16oFLdesJC3XrCRt16jCLdesJK3XrCTt16wlLdesJW3XrCWt16wl7desJi3XrCZt16wmrdesJu3XrCct16aMrdesJ23XZjEt5wjt12YyreeALZ0sJ63oJjGt6GD7LehnKm3oZovt6GwcLehn1O3obBxt6GwcrehsHO3obB0t6GwdbehsHa3obB3t6GweLehsHm3obB6t6Gwe7ehsHy3obB9t6Gwfrehgm63obB/t6GwgLehgO23obCBt6GwgrehsIO3obCEt6GDKbehgni3obCFt6GwhrehrdW3obCHt6GwiLehsIm3obCKt6Gwi7ehsIy3obCNt6GwjrehsI+3oagUt6GwkLehsJG3oaMIt6GwkrehsJO3obCUt6GwlbehsJa3obCXt6GwmLehsJm3obCat6Gwm7ehsJy3oZoyt6GwnbegmMq33AC2dLDZt96YxrffhEC33pjEt+GvdLfhmsK34YdEt+HAAJF6t+Ww27fhsN234bDft+Gw4bfhsOK34bDkt+Gw5rfhsOi34bDpt+Gw6rfhsOu34bDst+Gw7rfhsO+34bDwt+GGbrfhhdG34bDzt+Gw9LfhsPW34bD2t+Gw97fhsPm34bD7t+Gw/LfhsP234bD+t+Gw/7fhhme34bEAt+GxAbfhsQK34bEDt+GxBLfhsQW34bEGt+GxB7fhsQi34bEJt+GxDLfhsQ634bEPt+GxEbfhhjK34YZpt+GxErfhsRO34bEUt+GGVbfhsRW34YYFt+GxGLfhsRm34bEbt+GxHLfhsR234bEet+GxH7fhsSC34YYst+GGI7fhhie34bEht96YyrglwACRergmgLW2dLEiuCiYxrgpg0q4Ka/NuCmvzrgomMS4La9zuC2er7gtr424KJjKuDHAAJF6uDKAtbZ0sSi4NJjGuDWlIrg1r824Na/OuDSYxLg5sSm4ObEsuDmxLbg0mMq4PQC2dLEwuD+YxrhApSK4P5jEuEKxMbhCsTO4QrE0uD+YyrhGAADAAJF8uEixObhJmMa4SiC4Sl64SpyWuEpcuEqunbhKgem4SrE6uEqxO7hKYbhKrd24SrE9uEqxPrhKsT+4SrFAuEqxQbhKsUK4SZjKuFsAuEixQ7hdmMa4XiC4Xl64XrFEuF5cuF5duF6xOrhesUW4XrFGuF6xR7hesUi4XmG4XrE7uF6xSbherd24XZjKuG0AuEik0rhvmMa4cJyGuHBeuHBcuHBduHCxOrhwsUu4cLFFuHCxTLhwsU24cIJPuHCV0rhwYbhwhBC4cCe4cLE7uHCxTrhvmMq4gQC4SKTTuIOYxriEsU+4hLFQuISxUriEsVO4hLFVuISxV7iEsVm4hLFbuISxXLiEsV24hLFeuISxYLiEsWK4hLFkuISxZriEsWi4hLFquISxbLiEsW64hLFwuISxcriEsXS4hLF2uISxeLiDmMq4nQAAwACRfbifpNS4oJjHuKGWUrigmMS4o4KfuKCYyrilAADAAJF+uKexf7iomMe4qZr/uKmbAbipmwS4qZsCuKmbBbipmwa4qZsKuKmxgLipmwe4qZsAuKmbCLipnIC4qZsNuKmbDripmw+4qbGBuKmbEbipmxS4qZsTuKmcY7ipnEG4qZx0uKmxgripsYO4qbGEuKmxhbipsYa4qbGHuKmxiLipsYm4qbGLuKmepbiphiC4qYW1uKmbA7iphZW4qYX1uKmF0Liphfy4qYVKuKmFgLiphZe4qbGNuKmu2LipsZa4qbGXuKmxmLipsZm4qbGauKmxm7ipsZy4qbGduKmxnripsZ+4qbGguKmxobipsaK4qbGkuKmxpbipsaa4qbGnuKmxqLipsam4qbGquKmxq7ipsay4qbGtuKmxrripsa+4qbGwuKmxsbipsbK4qbGzuKmxtLipsbW4qbG2uKmxt7ipsbi4qbG5uKmxuripsbu4qbG8uKmxvbipsb64qbG/uKmxwLipscG4qbHCuKmxw7ipscS4qbHFuKmxxripsce4qbHIuKmxybipscq4qbHLuKmxzbipsc64qbHQuKmx0bipsdK4qbHTuKmx1LipsdW4qbHWuKmx17ipsdi4qbHZuKmx2ripsdu4qbHcuKmx3bipsd64qbHfuKmx4LipseG4qbHiuKmx47ipseS4qbHluKmx5ripsee4qbHouKmx6bipseq4qbHruKmx7Lipse24qbHuuKmx77ipsfC4qbHxuKmx8ripsfO4qbH0uKmx9bipsfa4qbH3uKmx+Lipsfm4qbH6uKmx+7ipsfy4qbH9uKmx/ripsf+4qbIAuKmyAbipsgK4qbIDuKmyBLipsgW4qbIGuKmyB7ipsgi4qbIJuKmyCripsgu4qbIMuKmyDbipsg64qbIPuKmyELipshG4qbISuKmyE7ipshS4qbIYuKmyGbipshq4qbIbuKmyHLipsh24qbIeuKmyH7ipsiC4qbIhuKmyIripsiO4qbIkuKmyJbipsia4qbInuKmyKLipsim4qbIquKmyK7ipsiy4qbItuKmyLripsi+4qbIwuKmyMbipsjK4qbIzuKmyNLipsjW4qbI2uKmyN7ipsji4qbI5uKmyOripsju4qbI8uKmyPbipsj64qJjEuXmxirl5sYy5eay0uXms27l5rM25eZsQuXmGHbl5mxK5ebGOuXmxj7l5sZC5ebGRuXmxlbl5saO5ebHMuXmxz7l5shW5ebIWuXmyF7l5sj+5ebJAuKiYyrmPALinskK5kZjHuZKyQ7mSskS5kpx7uZKyRbmSska5krJJuZKySrmRmMS5mrJHuZqySLmasku5kZjKuZ4AuKeyTLmgmMS5obJNuaGyTrmhsk+5obJQuaGyU7mhslS5obJZuaGyWrmhslu5obJcuaGyYLmhsmG5oJjHua6yUbmuslK5rrJVua6yVrmusle5rrJYua6yXbmusl65rrJfuaCYyrm4ALinsmK5upjGubvAAJF+ubyyY7m8smS5vJwMubycDrm8nBC5vJwPubycEbm8nBK5vJwaubyyZbm8nBi5vJwNubycGbm8nCi5vJwTubycFLm8nBW5vLJmubycFrm8nCe5vJwpubycC7m8nCa5vJw5ubyyZ7m8smi5vLJpubyyarm8smu5vLJsubyybbm8sm65vLJvubyycLm8snG5vLJyubyyc7m8snS5vLJ1ubyydrm8sne5vLJ4ubyyebm8snq5vLJ7ubyyfLm8sn25vLJ+ubyyf7m8soC5vLKBubyygrm8soO5vLKEubyyhbm8soa5vLKHubyyiLm8som5vLKKubyyi7m8soy5vLKNubyyjrm8so+5vLKQubyykbm8spK5vLKTubyylLm8spW5vLKWubyyl7m8spi5vLKZubyymrm8spu5vLKcubyynbm8sp65vLKfubyyoLm8sqG5vLKiubyyo7m8sqS5vJw6ubyypbm8sqa5vLKnubyyqLm8sqm5vLKqubyyq7m8sqy5vLKtubyyrrm8sq+5vLKwubyysbm8srK5vLKzubyytLm8srW5vLK2ubyyt7m8sri5vLK5ubyyurm8sru5vLK8ubyyvbm8sr65vLK/ubyywLm8ssG5vLLCubyyw7m8ssS5vLLFubyyxrm8sse5vLLIubyyybm8ssq5vLLLubyyzLm8ss25upjHuj2a/7o9mwG6PZsEuj2bAro9mwW6PZsGuj2bCro9sYC6PZsHuj2bALo9mwi6PZyAuj2bDbo9mw66PZsPuj2xgbo9mxG6PZsUuj2bE7o9nGO6PZxBuj2cdLo9sYK6PbGDuj2xhLo9sYW6PbGGuj2xh7o9sYi6PbGJuj2xi7o9nqW6PYYguj2Ftbo9mwO6PYWVuj2F9bo9hdC6PYX8uj2FSro9hYC6PYWXuj2xjbo9rti6PbGWuj2xl7o9sZi6PbGZuj2xmro9sZu6PbGcuj2xnbo9sZ66PbGfuj2xoLo9saG6PbGiuj2xpLo9saW6PbGmuj2xp7o9sai6PbGpuj2xqro9sau6PbGsuj2xrbo9sa66PbGvuj2xsLo9sbG6PbGyuj2xs7o9sbS6PbG1uj2xtro9sbe6PbG4uj2xubo9sbq6PbG7uj2xvLo9sb26PbG+uj2xv7o9scC6PbHBuj2xwro9scO6PbHEuj2xxbo9sca6PbHHuj2xyLo9scm6PbHKuj2xy7o9sc26PbHOuj2yUbo9slK6PbJVuj2yVro9sle6PbJYuj2yQ7o9skS6PbHQuj2x0bo9sdK6PbHTuj2x1Lo9sdW6PZx7uj2yRbo9ska6PbHWuj2x17o9sdi6PbHZuj2x2ro9sdu6PbHcuj2x3bo9sd66PbHfuj2x4Lo9seG6PbHiuj2x47o9seS6PbHluj2x5ro9see6PbHouj2x6bo9seq6PbHruj2x7Lo9se26PbHuuj2x77o9sfC6PbHxuj2x8ro9sfO6PbH0uj2x9bo9sfa6PbH3uj2x+Lo9sfm6PbH6uj2x+7o9sfy6PbH9uj2x/ro9sf+6PbIAuj2yAbo9sgK6PbIDuj2yBLo9sgW6PbIGuj2yB7o9sgi6PbIJuj2yCro9sgu6PbIMuj2yDbo9sg66PbIPuj2yELo9shG6PbISuj2yE7o9shS6PbIYuj2yGbo9shq6PbIbuj2yHLo9sh26PbIeuj2yH7o9wACRfrr5s0e6+bNJuj2yILo9siK6PbIhuj2yI7o9siS6PbIluj2yJro9sie6PbIouj2yKbo9siq6PbIruj2yLLo9si26PbIuuj2yL7o9sjC6PbIxuj2yMro9sjO6PbI0uj2yNbo9sja6PbI3uj2yOLo9sjm6PbI6uj2yO7o9sjy6PbI9uj2y4bo9sl26PbJeuj2yPro9sl+6PbJJuj2ySrm6mMS7IcAAkX67IrLTuyKyzrsistS7IrLcuyKy0rsista7IrLXuyKy47sisum7IrLquyKy67sisvy7IrL9uyKzF7sisx27IrMeuyKzRLsisyG7IrM+uyKzS7sis2a7IbGKuyGxjLshsk27IbJOuyGstLshrNu7IazNuyGbELshhh27IZsSuyGxjrshsY+7IbGQuyGxkbshsZW7IbJPuyGxo7shscy7IbJQuyGyU7shslS7IbHPuyGyWbshslq7IbJbuyGyR7shshW7IbIWuyGyF7shsly7IbJIuyGyYLshsj+7IbJLuyGyYbshskC5upjKu1wAuKek1btemMe7X7Ntu1+lP7tfhuq7X56lu16YxLtkmYy7ZLLQu2SlPLtkstq7ZLNuu2Sy27tkst27ZLNvu2Shobtks3G7ZLNyu2Szc7tks3C7ZLN1u2Sy3rtkr7i7ZLN2u2Szd7tkhPa7ZLN4u2Szebtks3q7ZLN7u2SzfLtks327ZLN+u2Szf7temMq7gAC4p7OAu4KYxLuDs4G7g7OCu4Ozg7uDs4S7g7OFu4OzhruDs4e7gpjKu4sAuKezibuNmMS7jrOKu46zi7uOs4y7jrONu46zjruOs4+7jrOQu46zkbuOs5K7jrOTu46zlLuOs5W7jZjKu5sAAMAAkX+7nZjEu560hLuds6C7oJjGu6GzobuhgL27ocAAkX+7pLOiu6CYxLumgk+7piO7oJjHu6mzprugmMq7qwC7naTWu62YxruuwACRf7uvs6i7r7Opu6+zrLuvs627r7Ouu6+zr7uvs7C7r7Oxu66lQ7uus6q7rrOyu66CmrutmMe7vIC9u7zAAJF/u76ztru8gqi7vILbu7yC3Lu8pTu7vLO3u7ylELutmMS7xsAAkX+7x7O4u8ezvLvHs8C7x7PDu8ezwrvHs8a7x7O+u8ez47vHs+e7x7Ptu8ez7rvHs++7x7Pwu8ez87vHs/S7x7P1u8ez7LvHs/q7x7P9u8e0A7vGs7m7xrO6u8azu7vGs8W7xrO/u8a0ALvGgp+7xrQMu8alQbvGtA67xrQPu8a0ELutmMq76AC7nbQiu+qYxrvrtCO764Mpu+vAAJF/u+60JLvqmMq78JV/u/AAu520J7vzmMa79J7eu/Qnu/OYyrv3ALudtCi7+ZjGu/rAAJF/u/u0Kbv7tCq7+ZjHu/6zs7v5mMS8ALP5vACXLrwAwACRf7wDtCy7+ZjKvAUAu520M7wHmMa8CMAAkX+8CbOivAm0NLwIs7S8B5jHvA1hvAeYxLwPwACRf7wQtCu8DyO8B5jKvBMAu520NrwVmMa8FrPlvBa0N7wWtDi8FrQ5vBbAAJF/vBu0OrwVmMe8HYO3vBWYxLwftAe8H4SXvB+ElrwfqvC8FZjKvCQAu52k1LwmmMa8J7Q7vCaYxLwprJe8JpjKvCsAu520PLwtmMa8Lpn6vC2YxLwwrJe8LZjKvDIAu520Pbw0mMa8NYJqvDSYxLw3rJe8NJjKvDkAu520Prw7mMa8PIYVvDuYxLw+rJe8O5jKvEAAu520P7xCmMa8Q8AAkX+8RLRAvEKYxLxGtEG8QpjKvEgAu52k17xKmMa8S4PsvEulQ7xLtEe8S8AAkX+8T7RIvE+0RLxPtEm8T7RKvE+zrLxPs7G8S7EuvEuz/rxKmMm8WJZavFivc7xKmMS8W690vFu0YbxbtGO8W7RFvFu0ZbxbtGe8W7RovFu0abxbtGq8W7RtvFu0brxbtG+8W7RxvFu0crxKmMe8arRmvEqYyrxsALudtHa8bpjGvG+EiLxvhJS8b7PMvG+ZYrxumMS8dISXvHSElrx0qvC8bpjKvHgAu520eLx6mMa8e4S2vHuZp7x6mMS8frR3vHqYyryAALudtHm8gpjGvIPAAJF/vIS0eryEtHu8hLR8vIKYxLyImsK8iIdEvIi0fbyIhoS8iIacvIiGjLyIhpK8iLSCvIi0g7yIhoa8gpjKvJMAAMAAkYC8lbSJvJaYxLyXpYS8l7SKvJaYybyaALyVtIu8nJjGvJ2ArLycmMS8n6WEvJ+0irycmMq8ogC8lbSMvKSYxrylnKS8pJjEvKelhLyntIq8pJjKvKoAvJW0jbysmMa8rYCsvKyYxLyvpYS8r7SKvKyYyryyALyVtI68tJjEvLWlhLy1tIq8tJjKvLgAAMAAkYG8urSVvLuYxry8gpq8vKUivLzAAJGBvL+0lry/tJe8v7SYvL+0mby8pQC8vIF2vLuYx7zGgIm8xqUZvLuYxLzJgp+8ybSdvMmEp7zJwACRgbzNtKi8zbSqvM20tbzNtMe8zbSvvM20trzNtJy8yYUjvMmE+7zJtLy8ybSjvLuYyrzZALy6tMm825jGvNy0yrzctMu825jKvN8AvLq0zLzhmMS84rTNvOGYyrzkALy6pNm85pjGvOezqrzngpq857TQvOe00bznwACRgbzstNK87LSbvOy007zstJq87LTVvOe0n7zntNS857SevOaYx7z1gL289bTevOaYxLz4pVu8+LTNvPi017z4tNi8+LTZvPi03Lz4tN28+LTfvPi04Lz4tOK8+LShvPi05Lz4tK68+IKIvPi06bz4tOi8+LTnvOaYyr0KALy6tQm9DJjGvQ3AAJGBvQ604b0MmMe9EIGyvRBhvQyYyr0TAADAAJGCvRW1C70WmMe9F4C9vRaYyr0ZAL0VtQy9G5jHvRylbr0bmMq9HgC9FbUNvSCYxr0hgL29IbQcvSGEtr0hgKy9IJjEvSYjvSCYyr0oAL0VtRC9KpjHvSuESL0rtRG9K4QfvSqYyr0vAL0VtRK9MZjHvTKESL0xmMq9NAC9FbUTvTaYx703tRS9Nye9NpjKvToAvRWxe708mMe9PadxvT2Hkr09hB69PYUNvT2Hkb09h469PbM2vT2FQr09hUS9PayvvT2EIr09hB+9PYUKvT2ESL08mMq9TAC9FbUVvU6Yyr1PAL0VtRa9UZjHvVKEJL1StRe9UoVjvVGYyr1WAL0VhXG9WJjGvVmdi71ZtRi9WZ1RvVm1Gb1Zhj+9WbUavVm1G71ZKb1YmMS9YiO9WJjHvWQnvViYyr1mwACRgr1ngLW9FbUcvWmYx71qs8S9arS+vWqzab1pmMq9bgC9FbUdvXCYx71xmQi9cJjKvXMAvRW1Hr11mMq9dgC9FbUfvXiYxr15g+y9ebUhvXmEx715hMi9eYTFvXiYyb1/tSK9f69zvXiYxL2Cr3S9gki9giO9eJjHvYa1I72GtSS9hrUlvYaDxr2GtSa9hpizvXiYyr2NAL2Nofu9jZtAAMAAkYO9kaTbvZKYxr2TwACRg72UtTC9k7UxvZOCmr2SmMe9mIC9vZilN72YpRe9kpjEvZylOL2cpVS9kpjKvZ8AvZGk2r2hmMa9orU1vaKlcL2hmMe9paUYvaW1Nr2ltTe9paVyvaWleL2lm7e9oZjEvaylbb2sgoy9rIP9vaylRb2spXO9rKV0vayfXr2hmMq9tAC9kbU4vbaYxL23tTm9t6+2vbe1PL23tT29t7U+vbe1P723tUC9t7VBvbe1Qr23tUS9t59evbaYyr3DAL2RtUW9xZjGvcbAAJGDvce1Rr3FmMe9yZa8vcmp+L3JpPa9xZjEvc21R73NtUi9zbVJvc21Sr3NtUu9zaVtvc2CjL3NtUy9xZjKvdYAvZGk3L3YmMa92bOqvdmWvL3ZgL292an4vdnAAJGDvd61T73etVC93rVRvd61Ur3epPO93rVTvd61VL3etVW92aVwvdm1NL3YmMe96aUYvem1N73pm7e96aV4vemlcr3ptTa92JjEvfCldL3wpUW98MAAkYO987VYvfO1Y73ztVy987VvvfO1cb3ztWW987V1vfO1ZL3ztXm98KVzvfC1R73wtUq98LVLvfC1SL3wtUm98IP9vfCfXr3wI73wtXy92JjKvgcAvZG1gb4JmMa+CqT+vgmYxL4Mr5++DK+evgyvoL4Mr6G+CZjKvhEAvZG1gr4TmMS+FLV+vhOYyr4WAADAAJGEvhi1hL4ZmMS+GqUmvhqlEr4apTm+GqU4vhqlSr4apUC+GqWTvhmYx74ipTu+IrO3viKyQb4itYW+GZjKvicAvhi1h74pmMS+KrWIviq1ib4qtYq+KZjKvi4Avhi1jL4wmMS+MaWuvjGlr74wmMq+NAAAwACRhb42tY++N5jGvjjAAJGFvjmXOL44tZC+OLWRvji1kr43mMe+PrStvj6zGr4+tZO+PrWUvjeYxL5DtZW+Q7WWvkO1l75DI743mMq+SMAAkYW+SYC1vjak3b5LmMS+TLWZvky1mr5LmMq+TwC+NrWbvlGYyr5SAL42tZy+VJjGvlW1nb5VtZ6+VJjEvlgjvlSYyr5aAL42taG+XJjHvl2epb5dhZe+XYVKvl2Ftb5dhZW+XYX1vl2bA75dhdC+Xay0vl2s275drM2+XbWivl2FgL5dtaO+XbWkvl21pb5dtaa+XbWnvl21qL5dtam+XbWqvl21q75dtay+XbWtvl21rr5cmMS+d7Wvvne1sr53tbO+d7W0vne1tb53tba+d7W3vne1uL53tbm+d7W6vne1u753tby+d7W9vne1vr53gVW+d7W/vne1wL53tcG+d6hCvne0GL53tcK+d7XDvne1xL53tcW+d7XGvne1x753tci+d7XJvne1yr53tcu+d7XMvne1zb53tc6+d7XPvne10L53tdG+d7XSvne10753tdS+d7XVvne11r53tde+d7XYvne12b53tdq+d7XbvneXLr53tdy+d5cvvne13b53hAe+d7Xevne13753teC+d7Xkvne15b53ooy+d7Xmvne15753rMa+d7Xovne16b53teq+d7Xrvne17L53te6+d7Xvvne18L53tfO+d7X0vne19b53tfa+d7X3vne1+L53tfm+d7MZvne1+r53tfu+d4Mcvne1/r53tf++d7Huvne2AL53tgG+d7YCvnexK753sTK+XJjKvs8AAMAAkYa+0bYDvtKYxL7TI77SmMq+1QC+0bYEvteYx77YnqW+2LWuvti1rb7Ytay+2LWrvti1qr7Ytam+2LWovti1p77Ytaa+2LWlvti1pL7YtaO+2IWAvti1or7YrM2+2KzbvtistL7YhdC+2JsDvtiF9b7YhZW+2IW1vtiFSr7YhZe+15jEvvKxMr7ysSu+8rYCvvK2Ab7ytgC+8rHuvvK1/77ytf6+8oMcvvK1+r7ysxm+8rX5vvK1+L7ytfe+8rX2vvK19b7ytfS+8rXzvvK18L7yte++8rXuvvK17L7yteu+8rXqvvK16b7ytei+8qzGvvK1577ytea+8qKMvvK15b7yteS+8rXgvvK1377ytd6+8rX7vvKEB77ytd2+8pcvvvK13L7yly6+8rXbvvK12r7ytdm+8rXYvvK1177ytda+8rXVvvK11L7ytdO+8rXSvvK10b7ytdC+8rXPvvK1zr7ytc2+8rXMvvK1y77ytcq+8rXJvvK1yL7ytce+8rXGvvK1xb7ytcS+8rXDvvK1wr7ytBi+8qhCvvK1wb7ytcC+8rW/vvKBVb7ytb6+8rW9vvK1vL7ytbu+8rW6vvK1ub7ytbi+8rW3vvK1tr7ytbW+8rW0vvK1s77ytbK+8rWvvteYyr9KAL7RpN6/TJjEv021mb9NtZq/TJjKv1AAvtG2C79SmMS/U7YMv1O2Dr9SmMq/VgC+0bYRv1iYxL9ZthK/WbX6v1m2E79ZI79YmMq/XgAAwACRh79gmMS/Ybcbv2C2Ir9jmMa/ZMAAkYe/ZbYjv2W2JL9ltiW/ZbYmv2W2J79ltii/ZbYpv2W2Kr9ltiu/ZbYsv2W2Lb9lti6/ZbYvv2W2ML9ltjG/ZbYyv2W2M79ltjS/ZbY1v2W2Nr9ltje/ZbY4v2W2Ob9ltjq/ZbY7v2W2PL9ltj2/ZbY+v2W2P79ltkC/ZbZBv2OYx7+Fs7e/hZ6lv4W1or+FhZW/hbWmv4W1pb+Ftae/hYX1v4WbA7+FhbW/hYVKv4WstL+Ftai/hbWkv4W1o7+FrNu/hbWpv4Wszb+Ftaq/hYXQv4WFl7+Ftay/hbWtv4W1rr+FhYC/hbWrv4W2Rb+Ftka/hbZHv4W2SL+Ftkm/Y5jEv6W2Qr+ltbe/pbW4v6W1sr+ltbO/pbW0v6W1tb+ltba/pbWvv6W1ub+ltbq/pbW7v6XAAJGHv7K2T7+ytlC/srZSv7K2V7+ytlu/srZdv7K2XL+ytl+/srZev7K2Y7+ytma/srZnv6W1vL+ltb2/pbW+v6WBVb+ltb+/pbXAv6W1wb+ltfa/pbX4v6W197+lqEK/pbQYv6W1wr+ltcO/pbXEv6W1xb+ltca/pbXHv6W1yL+ltcm/pbXKv6W1y7+ltc2/pbXOv6W1z7+l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pRLAAEQEpUDAAEQEpZPAAEPlmMrAAEQPAMAAQ+K4ksAARBGYxsAARBLAAJGNwABEE7hvwABEE7gSwABEE7iTwABEE7iUwABEE7iVwABEE7iWwABEE6T0wABEE7h4wABEE7hywABEE7hzwABEEZjEwABEHrV+wABEEZjKwABEIADAAEPiuJfAAEQimMbAAEQjwACRjcAARCS4b8AARCS4EsAARCS4k8AARCS4lMAARCS4lcAARCS4lsAARCSk9MAARCS4eMAARCS4csAARCS4c8AARCOWUsAARCKYxMAARDCCn8AARDAjwABEIpjKwABEMwDAAEPiuLfAAEQ1mMbAAEQ2wACRjcAARDe4b8AARDe4EsAARDWYxMAARDq4m8AARDq4nsAARDWYysAARD0AAMAAkY7AAEQ/pOXAAERAmMbAAERBwACRjsAAREKk88AAREK4vsAAREK4v8AAREKyZMAAREGCosAAREG4wMAARECYx8AAREmAvcAARECYxMAAREulJMAAREvAAJGOwABETbjJwABEQJjKwABETwDAAEQ/pObAAERRmMbAAERSglnAAERSpSrAAERShurAAERRmMTAAERWI8AARFGYysAARFgAAMAAkY/AAERamMTAAERbuOLAAERbuOPAAERauM/AAERemMbAAERfwACRj8AARGCyZMAARGCk88AARGC40MAARGCkmMAARF6Yx8AARGWAvcAARF6YxMAARGelXcAARGelH8AARGelM8AARGelLsAARF6YysAARGwAAMAAkZDAAERuuObAAERvmMTAAERwlTvAAERwpWHAAERwpWPAAERwpWLAAERvmMrAAER1AMAARG6458AARHeYxsAARHi4PMAARHeYxMAARHqlYcAARHqlYsAARHeYysAARH0AwABEbrjowABEf5jGwABEgLg8wABEf5jEwABEgqVhwABEgqViwABEf5jKwABEhQDAAERuuOrAAESHmMbAAESIuDzAAESHmMTAAESKpWHAAESKpWLAAESHmMrAAESNAADAAJGRwABEj7juwABEkJjEwABEkbjvwABEkbjwwABEkbDpwABEkbjxwABEkbjywABEkbjzwABEkbj0wABEkbj1wABEkbEZwABEkYYXwABEkbEbwABEkbj2wABEkbj3wABEkbj4wABEkbj5wABEkbj6wABEkbj7wABEkbj8wABEkbj9wABEkbj+wABEkbj/wABEkbkAwABEkbkBwABEkbkCwABEkbEgwABEkbkDwABEkbkEwABEkbkFwABEkbkGwABEkbkHwABEkbkIwABEkbkJwABEkbkKwABEkbkLwABEkbkMwABEkbkNwABEkbkOwABEkbkPwABEkbkQwABEkbkRwABEkbkSwABEkbkTwABEkbkUwABEkbkVwABEkbkWwABEkbkXwABEkbkYwABEkbkZwABEkbkawABEkYXDwABEkbkbwABEkbkcwABEkbkdwABEkbkewABEkbkfwABEkbkgwABEkbkhwABEkbEYwABEkbkiwABEkbkjwABEkbkkwABEkbklwABEkbkmwABEkbknwABEkbkowABEkbEUwABEkbEAwABEkYYFwABEkbkpwABEkbkqwABEkbEVwABEkbkrwABEkbkswABEkbktwABEkbkuwABEkbkvwABEkbkwwABEkbkxwABEkbkywABEkbkzwABEkbk0wABEkbk1wABEkbk2wABEkbk3wABEkbk4wABEkbk5wABEkbk6wABEkJjKwABE6QDAAESPuTvAAETrmMTAAETsuTzAAETsuUDAAETsuT7AAETrmMrAAETwAMAARI+5QcAARPKYxsAARPOdMcAARPODtcAARPOaMsAARPMnwABE8pjKwABE+ADAAESPuULAAET6mMbAAET7uUPAAET6mMTAAET9uUTAAET9uT7AAET6mMrAAEUAAMAARI+5R8AARQKYxsAARQOWUsAARQOD1MAARQMGwABFA7lIwABFA7lJwABFA7lKwABFA7lLwABFA7lMwABFA7lNwABFA7lOwABFA7lPwABFA6WkwABFA5liwABFApjEwABFEblRwABFEblQwABFEblSwABFEarwwABFEblWwABFEblXwABFEblYwABFEblZwABFEblawABFEblbwABFEblcwABFEbldwABFEblewABFEaG+wABFEblfwABFEbljwABFEblnwABFESPAAEUCmMrAAEUkAMAARI+5a8AARSaYxsAARSe5Q8AARSaYxMAARSm5PsAARSm5RMAARSm5bMAARSm5bsAARSm5b8AARSm5bcAARSm5cMAARSm5ccAARSm5csAARSm5c8AARSm5dMAARSm5dcAARSm5dsAARSm478AARSm48MAARSm48cAARSm48sAARSm488AARSm49MAARSm49cAARSmxGcAARSmxG8AARSm5d8AARSmGF8AARSm49sAARSm498AARSm4+MAARSm4+cAARSm4+sAARSm4+8AARSm4/MAARSm4/cAARSm4/sAARSm4/8AARSm5AMAARSm5AcAARSm5AsAARSmxIMAARSm5A8AARSm5BMAARSm5BcAARSm5BsAARSm5DMAARSm5DcAARSm5CMAARSm5B8AARSm5CcAARSm5CsAARSm5C8AARSm5eMAARSm5EcAARSm5EsAARSm5E8AARSm5FMAARSm5ecAARSm5FcAARSm5FsAARSm5F8AARSm5GMAARSm5GsAARSmFw8AARSm5G8AARSm5HcAARSm5GcAARSm5HMAARSm5HsAARSm5H8AARSm5IMAARSm5IcAARSmxGMAARSm5IsAARSm5I8AARSm5KMAARSmxFMAARSm5JMAARSm5JcAARSm5JsAARSm5J8AARSmxAMAARSmGBcAARSm5KcAARSm5KsAARSmxFcAARSm5DsAARSm5EMAARSm5D8AARSm5K8AARSm5LcAARSm5LMAARSm5LsAARSmw6cAARSm5L8AARSm5MMAARSm5McAARSm5MsAARSm5M8AARSm5NMAARSm5NcAARSm5NsAARSm5N8AARSm5OMAARSm5OcAARSm5OsAARSaYysAARZEAwABEj7l6wABFk5jGwABFlGrAAEWUgpDAAEWTmMTAAEWXgxzAAEWTmMrAAEWZAMAARI+5e8AARZuYx8AARZy5fMAARZuYysAARZ4AwABEj7l9wABFoJjGwABFoYMewABFoYHqwABFoJjHwABFpIFVwABFoJjEwABFprl+wABFprmAwABFprmBwABFpoRewABFpoMcwABFpsAAkZHAAEWsuYLAAEWgmMrAAEWuAMAARI+5hcAARbCYxsAARbG0EsAARbG5hsAARbG5h8AARbG5iMAARbG5icAARbG5isAARbG5U8AARbG5i8AARbG5jMAARbG5jcAARbG5YMAARbG5jsAARbG5j8AARbG5P8AARbG5ZcAARbG5ZsAARbCYx8AARcKDxsAARcK5mMAARbCYxMAARcW5kcAARcW5ksAARcW5k8AARcW5YcAARcW5lMAARcW5l8AARcWlbcAARcWCjMAARcW5msAARcW5VcAARcW5nMAARcVWwABFxbmdwABFxbmfwABFxbmZwABFxbmhwABFxYRewABFxbmiwABFxbmjwABFxbmlwABFxbmnwABFxbmrwABFxbmswABFxbmtwABFxbliwABFxbmxwABFxbmzwABFxblnwABFxbmqwABFxSPAAEWwmMrAAEXkAMAAReS5kMAARI+k6MAAReeYxsAAReilo8AAReilpMAARei0EsAARei5tcAAReiCVcAARei5hMAAReiaMsAAReidMcAAReiDtcAARei0wcAARejAAJGRwABF87m2wABF6Lm3wABF6Lm4wABF6Lm5wABF6Lm6wABF6Lm7wABF6Lm8wABF6Lm9wABF6Lm+wABF6Lm/wABF6LnAwABF6LnBwABF6LnCwABF6LnDwABF6LnEwABF6LnFwABF6LnGwABF6LnHwABF6LnIwABF6LnJwABF6LnKwABF6LnLwABF6LnMwABF6LnNwABF6LnOwABF6LnPwABF6LnQwABF6LnRwABF6LnSwABF6LnTwABF6LnUwABF6LnVwABF6LnWwABF6LnXwABF6LnYwABF6LnZwABF6LnawABF6LnbwABF6LncwABF6LndwABF6LnewABF6LnfwABF6LngwABF6LnhwABF6LniwABF6LnjwABF6LnkwABF6LnlwABF6LnmwABF6LnnwABF6LnowABF6LnpwABF55jHwABGKIPGwABGKLntwABGKKU0wABF55jEwABGLLnrwABGLLnswABGLLnuwABGLLnywABGLLnzwABGLLnxwABGLLn0wABGLLZZwABGLKhCwABGLLn1wABGLLQYwABGLLXCwABGLLXDwABGLLXEwABGLLXFwABGLLXGwABGLLXHwABGLLXIwABGLLXJwABGLLXKwABGLLXLwABGLLXNwABGLLXOwABGLLXPwABGLLXQwABGLLXRwABGLLXSwABGLLXTwABGLLXUwABGLLXVwABGLLXWwABGLLXXwABGLLXYwABGLLXZwABGLLXawABGLLXbwABGLLn2wABGLLn3wABGLLmDwABGLLn4wABGLLn/wABGLLn7wABGLLn6wABGLLn+wABGLIRSwABGLLmbwABGLLmgwABGLLmmwABGLLoCwABGLLoBwABGLLoDwABGLLoGwABGLLoIwABGLLlUwABGLLoJwABGLLoKwABGLLoLwABGLLoMwABGLLoNwABGLLoOwABGLLoPwABGLLoQwABGLLoRwABGLLXMwABGLLlnwABGLLoSwABGLLoTwABGLLmqwABGLLoUwABGLLobwABGLCPAAEXnmMrAAEZ0AMAARI+6HcAARnaYxsAARnfAAJGRwABGeLoewABGeLofwABGeLogwABGdpjEwABGfJpswABGfIRdwABGfMAAkZHAAEZ/uivAAEZ/uiPAAEZ2mMfAAEaCgVXAAEaCg7fAAEaCYcAARoK6KcAARoKAw8AARoK6KsAARnaYysAARonAAJGRwABGioC1wABEj7ovwABGjJjHwABGjYCWwABGjJjEwABGj7oUwABGj4RSwABGjyPAAEaMmMrAAEaTAMAARI+6MsAARpWYysAARpYAwABEj7ozwABGmJjHwABGmbmpwABGmJjEwABGm7oTwABGm7nxwABGm7nzwABGmJjKwABGnwDAAESPujTAAEahmMbAAEaiujXAAEaiujbAAEaiujfAAEaiujjAAEaiujnAAEaiujrAAEahmMfAAEapYcAARqknwABGqaAYwABGqbo7wABGoZjEwABGrrn0wABGroRSwABGrrn7wABGrrn6wABGrrn+wABGoZjKwABGtADAAESPujzAAEa2mMfAAEa3hcrAAEa3uj3AAEa3uj7AAEa2mMrAAEa7AMAARI+6P8AARr2YxMAARr659MAARr66E8AARr2YysAARsEAwABEj7pAwABGw5jGwABGxJZSwABGxLpBwABGxLpCwABGxLS9wABGw5jEwABGybnywABGyYRSwABGySPAAEbDmMfAAEbNukPAAEbDmMrAAEbPAMAARI+6RcAARtGYxMAARtK58sAARtKEUsAARtIjwABG0ZjKwABG1gDAAESPukfAAEbYmMbAAEbZwACRkcAARtq6SMAARtm6ScAARtm6SsAARtiYxMAARt658cAARt658sAARt66TMAARtiYysAARuIAwABEj7pNwABG5JjGwABG5bpOwABG5aU0wABG5cAAkZHAAEbouk/AAEboulDAAEblllLAAEbkmMfAAEbshZLAAEbshY/AAEbshSzAAEbkmMTAAEbwulLAAEbwI8AARvC59sAARvC6VcAARvC5+8AARvC5+sAARvC5/sAARuSYysAARvgAwABEj7pWwABG+pjGwABG+4UswABG+pjEwABG/YRSwABG+pjKwABG/wDAAESPulfAAEcBmMbAAEcChSzAAEcBmMTAAEcEI8AARwSEUsAARwGYysAARwcAwABEj7pZwABHCZjEwABHCiPAAEcJmMrAAEcMAMAARI+6W8AARw6YxMAARw+EUsAARw+58cAARw8jwABHDpjHwABHE7pcwABHE4UswABHDpjKwABHFgDAAESPul7AAEcYmMbAAEcZul/AAEcYmMTAAEcbhFLAAEcbI8AARxiYx8AARx6FLMAARxiYysAARyAAwABEj7piwABHIpjGwABHI5ZSwABHI4UswABHI7pjwABHI7pCwABHIpjEwABHKLnxwABHKIRSwABHKLn7wABHKCPAAEcimMrAAEctAMAARI+6ZcAARy+YxsAARzC6ZsAARzCFRMAARzClNMAARy+Yx8AARzSFj8AARzSAlsAARy+YxMAARze59sAARze6VcAARzcjwABHN4RSwABHL5jKwABHPADAAESPumjAAEc+mMTAAEc/I8AARz+EUsAARz6YysAAR0IAwABEj7pqwABHRJjEwABHRSPAAEdFhFLAAEdEmMrAAEdIAMAARI+6bMAAR0qYxsAAR0uWUsAAR0qYx8AAR02Fj8AAR0qYysAAR08AwABEj7ptwABHUZjGwABHUqyvwABHUZjEwABHVLXMwABHVLnxwABHVLn2wABHVLn3wABHVIRSwABHVLn7wABHVLn6wABHVLn+wABHVCPAAEdRmMfAAEdeunLAAEdRmMrAAEdgAMAARI+6dcAAR2KYxMAAR2O58cAAR2O59sAAR2O598AAR2OEUsAAR2O6E8AAR2MjwABHYpjHwABHaoCWwABHYpjKwABHbADAAESPunfAAEdumMbAAEdvrK/AAEdumMfAAEdxhY/AAEdumMTAAEdzufHAAEdzufbAAEdzuffAAEdzhFLAAEdzufvAAEdzufrAAEdzuf7AAEdzI8AAR26YysAAR3wAwABEj7p5wABHfpjGwABHf7p6wABHf7p7wABHf7p8wABHf5ZSwABHf7p9wABHf7p+wABHfpjHwABHhoWPwABHhrqCwABHhrqDwABHhrqEwABHhoCWwABHfpjEwABHjLnxwABHjLn2wABHjLn3wABHjIRSwABHjLoTwABHjCPAAEd+mMrAAEeTwACRkcAAR5SAtcAAR5O6f8AAR5O6gMAAR5O6gcAARI+6hsAAR5mYxsAAR5qCcMAAR5mYx8AAR5yFj8AAR5mYysAAR54AwABEj7qHwABHoJjEwABHoYRSwABHoJjHwABHo58HwABHoJjKwABHpQDAAESPuojAAEenmMTAAEeohFLAAEeouhPAAEenmMfAAEernwfAAEergJbAAEenmMrAAEeuAMAARI+6icAAR7CYx8AAR7G6isAAR7GvqcAAR7CYxMAAR7S58cAAR7CYysAAR7YAwABEj7qLwABHuJjGwABHubqMwABHubqKwABHua+pwABHubqNwABHubqOwABHuJjEwABHv4RSwABHv7oTwABHv7nxwABHv7n3wABHv7nywABHv7n7wABHv7n6wABHv7n+wABHvyPAAEe4mMrAAEfJAMAAR8mFYMAARI+6lMAAR8yYxsAAR82lNMAAR8yYx8AAR8+FxcAAR8+Fx8AAR8yYxMAAR9Kc/cAAR8yYysAAR9QAwABEj7qVwABH1pjEwABH15z9wABH1pjKwABH2QDAAESPupbAAEfbmMTAAEfchFLAAEfcnP3AAEfcufvAAEfcufrAAEfcuf7AAEfbmMrAAEfiAMAARI+6l8AAR+SYxMAAR+WEUsAAR+Wc/cAAR+W5+8AAR+W5+sAAR+W5/sAAR+SYysAAR+sAwABEj7qYwABH7ZjEwABH7oRSwABH7pz9wABH7rn7wABH7rn6wABH7rn+wABH7ZjKwABH9ADAAESPupnAAEf2mMTAAEf3hFLAAEf3nP3AAEf3ufvAAEf3ufrAAEf3uf7AAEf2mMrAAEf9AMAARI+6msAAR/+YxMAASACEUsAASACc/cAASAC5+8AASAC5+sAASAC5/sAAR/+YysAASAYAwABEj7qbwABICJjEwABICYRSwABICZz9wABICbn7wABICbn6wABICbn+wABICJjKwABIDwDAAESPupzAAEgRmMTAAEgShhXAAEgShFLAAEgSI8AASBGYx8AASBaCb8AASBa6ncAASBGYysAASBkAwABEj7qfwABIG5jKwABIHADAAESPuqDAAEgemMTAAEgfhFLAAEgfnP3AAEgfufvAAEgfufrAAEgfuf7AAEgemMrAAEglAMAARI+6ocAASCeYxMAASCiEUsAASCic/cAASCi5+8AASCi5+sAASCi5/sAASCeYysAASC4AwABEj7qiwABIMJjEwABIMYRSwABIMZz9wABIMbn7wABIMbn6wABIMbn+wABIMJjKwABINwDAAESPuqPAAEg5mMTAAEg6hFLAAEg6nP3AAEg6ufvAAEg6ufrAAEg6uf7AAEg5mMrAAEhAAMAARI+6pMAASEKYxMAASEOEUsAASEOc/cAASEO5+8AASEO5+sAASEO5/sAASEKYysAASEkAwABEj7qlwABIS5jGwABITKU0wABIS5jHwABIToXCwABIS5jEwABIUJz9wABIS5jKwABIUgDAAESPuqbAAEhUmMTAAEhVhFLAAEhVnP3AAEhVufvAAEhVufrAAEhVuf7AAEhUmMrAAEhbAMAARI+6p8AASF2YxMAASF6EUsAASF6c/cAASF65+8AASF65+sAASF65/sAASF2YysAASGQAwABEj7qowABIZpjEwABIZ4RSwABIZ5z9wABIZ7n7wABIZ7n6wABIZ7n+wABIZpjKwABIbQDAAESPuqnAAEhvmMTAAEhwI8AASHCEUsAASG+YysAASHMAwABEj7qqwABIdZjEwABIdiPAAEh2hFLAAEh1mMrAAEh5AMAARI+6rMAASHuYxsAASHyCScAASHyZLsAASHuYysAASH8AwABIf7qtwABEj7quwABIgpjGwABIg7qvwABIgpjEwABIhSPAAEiFhFLAAEiCmMrAAEiIAMAASIi6rcAARI+6scAASIuYxMAASIwjwABIjIRSwABIi5jKwABIjwDAAEiPuq3AAESPurPAAEiSmMbAAEiTge3AAEiTurTAAEiTowTAAEiSmMTAAEiXI8AASJeEUsAASJKYx8AASJq6tcAASJKYysAASJwAwABEj7q2wABInpjEwABInyPAAEifhFLAAEiemMfAAEiiurjAAEiemMrAAEikAMAARI+6ucAASKaYxsAASKe6usAASKaYxMAASKkjwABIqYRSwABIppjHwABIrLq7wABIrLq8wABIrLq1wABIppjKwABIsADAAESPur3AAEiymMbAAEizur7AAEizur/AAEizgmvAAEiymMTAAEi3I8AASLeEUsAASLKYysAASLoAwABEj7rBwABIvJjGwABIvYYVwABIvJjEwABIvyPAAEi/hFLAAEi/uVTAAEi/ugnAAEi/ugrAAEi/ugvAAEi/ugzAAEi/ug3AAEi/ug7AAEi/ug/AAEi/uhDAAEi/uhHAAEi/tczAAEi/uhLAAEi8mMjAAEjOuenAAEi8mMrAAEjQlX/AAESPusnAAEjSmMTAAEjThFLAAEjTufvAAEjTufrAAEjTuf7AAEjSmMrAAEjYAMAARI+6ysAASNqYxMAASNsjwABI24RSwABI2pjKwABI3gDAAESPuszAAEjgmMTAAEjhus3AAEjhI8AASOGEUsAASOCYysAASOUAwABEj7rPwABI55jHwABI6KWjwABI55jIwABI6qWjwABI55jEwABI7IRSwABI7LoSwABI7LXMwABI7CPAAEjnmMrAAEjxAMAARI+60MAASPOYxsAASPS60cAASPS60sAASPS608AASPS61MAASPOYxMAASPm62MAASPkjwABI+YRSwABI85jKwABI/QDAAEj9utXAAEj9utbAAEj9utfAAESPutrAAEkCmMbAAEkDutvAAEkCmMrAAEkFAMAARI+63MAASQeYxsAASQi63cAASQeYxMAASQqEUsAASQqc/cAASQq5+8AASQq5+sAASQq5/sAASQeYysAASRAAwABEj7rewABJEpjEwABJE4RSwABJE5z9wABJE7n7wABJE7n6wABJE7n+wABJEpjKwABJGQDAAESPut/AAEkbmMTAAEkchFLAAEkcnP3AAEkcufvAAEkcufrAAEkcuf7AAEkbmMrAAEkiAMAARI+64MAASSSYxMAASSWEUsAASSWc/cAASSW5+8AASSW5+sAASSW5/sAASSSYysAASSsAwABEj7rhwABJLZjEwABJLoRSwABJLpz9wABJLrn7wABJLrn6wABJLrn+wABJLZjKwABJNADAAESPuuLAAEk2mMTAAEk3I8AASTeEUsAASTaYysAASToAwABEj7rjwABJPJjEwABJPSPAAEk9hFLAAEk9ufHAAEk8mMrAAElBAMAARI+65cAASUOYxsAASUS0wcAASUOYxMAASUYjwABJRoRSwABJRrnxwABJQ5jKwABJSgDAAESPuubAAElMmMbAAElNsRDAAElNtMHAAElMmMTAAElQI8AASVCEUsAASVC58cAASUyYysAASVQAwABEj7rnwABJVpjGwABJV7rowABJVpjEwABJWSPAAElZhFLAAElWmMrAAElcAMAARI+66cAASV6YxsAASV+WUsAASV6YxMAASWEjwABJYYRSwABJYbn/wABJYbn7wABJYbn6wABJYbn+wABJYboSwABJXpjKwABJaQDAAESPuuzAAElrmMbAAElsuu3AAElrmMTAAEluI8AASW6EUsAASW61zMAASW65+8AASW65+sAASW65/sAASWuYx8AASXWFj8AASXW678AASXW68MAASWuYyMAASXm68MAASWuYysAASXsAwABEj7rxwABJfZjGwABJfoUswABJfrrtwABJfZjEwABJgbpVwABJgSPAAEmBhFLAAEl9mMrAAEmFAMAARI+688AASYeYxsAASYiWUsAASYeYxMAASYojwABJioRSwABJirn7wABJiroSwABJirnxwABJh5jKwABJkADAAESPuvXAAEmSmMbAAEmTllLAAEmSmMTAAEmVI8AASZWEUsAASZW5+8AASZW5+sAASZW5/sAASZW6E8AASZKYx8AASZyAlsAASZKYysAASZ4AwABEj7r4wABJoJjEwABJoSPAAEmhhFLAAEmhufLAAEmgmMrAAEmlAMAARI+6+sAASaeYxsAASailNMAASaeYxMAASaojwABJqoRSwABJqrn2wABJqrn3wABJqrnxwABJqrn7wABJqrn6wABJqrn+wABJp5jHwABJs4WPwABJsyfAAEmzue3AAEmnmMrAAEm3AMAARI+6/cAASbmYxsAASbqlNMAASbmYxMAASbwjwABJvIRSwABJvLn2wABJvLn3wABJvLnxwABJuZjHwABJwoWPwABJwifAAEnCgJbAAEnCue3AAEm5mMrAAEnHAMAARI+7AMAAScmYxsAAScq7AcAAScq7AsAAScq7A8AAScq7BMAAScqCa8AAScq7BcAAScmYycAASdGf48AAScmYx8AASdOCb8AASdO7CcAASdO7C8AASdO7DMAASdO7DcAASdO7DsAAScmYxMAASdqEUsAASdojwABJ2rn7wABJ2rn6wABJ2rn+wABJyZjKwABJ4LsGwABJ4LsHwABJ4LsIwABJ4IJwwABJ4JV/wABEj7sQwABJ5pjGwABJ57sEwABJ5pjHwABJ6bsJwABJ5pjEwABJ64RSwABJ6yPAAEnrufvAAEnrufrAAEnruf7AAEnmmMrAAEnxAMAARI+7EcAASfOYx8AASfSCScAASfOYxMAASfaEUsAASfYjwABJ85jKwABJ+QDAAESPuxPAAEn7mMbAAEn8uxTAAEn8uxXAAEn8uwTAAEn8gmvAAEn8rkvAAEn8uxbAAEn7mMfAAEoDuxrAAEoDuxnAAEoDuanAAEoDuxvAAEoDuxzAAEn7mMTAAEoJuhTAAEoJhFLAAEoJuhPAAEoJufTAAEoJufvAAEoJufrAAEoJuhLAAEoJuf7AAEoJux3AAEoJI8AASfuYysAAShQAwABKFLsYwABEj7siwABKF5jGwABKGLsjwABKGLskwABKGLsEwABKGIJrwABKGLslwABKGK5LwABKGLsWwABKF5jEwABKILoUwABKIIRSwABKILoTwABKILn0wABKILn7wABKILn6wABKILoSwABKILn+wABKILsdwABKICPAAEoXmMfAAEoruyfAAEoruybAAEoXmMrAAEouAMAARI+7KcAASjCYxMAASjG6E8AASjG6EsAASjGEUsAASjG5+8AASjG5+sAASjG5/sAASjG7HcAASjEjwABKMJjKwABKOgDAAESPuyvAAEo8mMbAAEo9uyzAAEo9wACRkcAASj+7LcAASjyYxMAASkEjwABKQYRSwABKQboTwABKQbn0wABKQbnxwABKQbn7wABKQbn6wABKQboSwABKQbn+wABKQbsdwABKPJjHwABKTLsywABKTLswwABKTLntwABKPJjKwABKULsuwABKULsvwABEj7szwABKU5jHwABKVLntwABKU5jEwABKVoRSwABKU5jKwABKWADAAESPuzTAAEpamMfAAEpbhcXAAEpbhcfAAEpamMTAAEpehFLAAEpeI8AASlqYysAASmEAwABEj7s2wABKY5jEwABKZIRSwABKZCPAAEpjmMrAAEpnAMAARI+7OMAASmmYxsAASmqZoMAASmq5TsAASmq7OcAASmqZYMAASmqCScAASmq7OsAASmmYxMAASnG5pMAASnG5UcAASmmYysAASnQAwABEj7s9wABKdpjGwABKd4JtwABKd7mWwABKdpjKwABKegDAAESPuz7AAEp8mMfAAEp9asAASn2CkMAASnyYxMAASoCEUsAASnyYysAASoIAwABEj7s/wABKhJjEwABKhYRSwABKhJjKwABKhwDAAESPu0DAAEqJmMTAAEqKhFLAAEqJmMfAAEqMuXzAAEqJmMrAAEqOAMAARI+7QcAASpCYxMAASpG7QsAASpG7Q8AASpG7RMAASpG7RcAASpG7RsAASpG7R8AASpG7SMAASpCYysAASpkAwABEj7tJwABKm5jEwABKnLtKwABKnLtLwABKm5jKwABKnwDAAESPu0zAAEqhmMrAAEqiAMAARI+7TcAASqSYxsAASqW7TsAASqSYx8AASqdqwABKp4KQwABKpJjEwABKqoRSwABKpJjKwABKrADAAESPu0/AAEqumMbAAEqvu1DAAEqumMfAAEqxasAASrGCkMAASrG5fMAASq6YxMAASrWEUsAASq6YysAASrcAwABEj7tRwABKuZjGwABKuoYlwABKuZjHwABKvGrAAEq8gpDAAEq5mMTAAEq/hFLAAEq5mMrAAErBAMAARI+7UsAASsOYxsAASsSCbcAASsSZYMAASsSCScAASsS7U8AASsOYx8AASslqwABKyYKQwABKw5jEwABKzIRSwABKw5jKwABKzgDAAErOrmfAAESPu1TAAErRmMbAAErSu1XAAErSu1bAAErSur/AAErSu1fAAErSu1jAAErSu1nAAErSgmvAAErShRPAAErShcrAAErSgm3AAErShjvAAErSgknAAErSmWDAAErSpaTAAErRmMfAAErhasAASuG7WsAASuGCkMAAStGYxMAASuWEUsAAStGYysAASucAwABEj7tbwABK6ZjGwABK6oXKwABK6rtcwABK6rtdwABK6ZjHwABK7mrAAErugpDAAErpmMTAAErxhFLAAErpmMrAAErzAMAARI+7XsAASvWYxsAASvauLMAASvaFxcAASvaFx8AASvWYx8AASvpqwABK+oKQwABK+rl8wABK9ZjEwABK/oRSwABK9ZjKwABLAADAAESPu1/AAEsCmMbAAEsDgm3AAEsDu2DAAEsDurTAAEsDowTAAEsCmMfAAEsIasAASwiCkMAASwKYxMAASwuEUsAASwKYysAASw0AwABEj7thwABLD5jGwABLEIJvwABLEIYlwABLEIJJwABLEJlgwABLEKWkwABLD5jHwABLFmrAAEsWgpDAAEsPmMTAAEsZhFLAAEsPmMrAAEsbAMAARI+7YsAASx2YxMAASx6EUsAASx658cAASx65+8AASx65+sAASx65/sAASx2YysAASyQAwABEj7tjwABLJpjGwABLJ4JwwABLJ7pRwABLJpjHwABLKrsJwABLKoPFwABLJpjEwABLLYRSwABLLbnxwABLLbn7wABLLbn6wABLLbn+wABLLSPAAEsmmMrAAEs0u2TAAEs0u2XAAESPu2fAAEs3mMbAAEs4J8AASzjAAJGRwABLOijAAEs4KcAASzi7asAASzi7a8AASzeYxMAASz8jwABLN5jKwABLQQDAAESPu2zAAEtDmMbAAEtEgmvAAEtEu23AAEtEu27AAEtDmMTAAEtIhFLAAEtIufHAAEtIufvAAEtIufrAAEtIuf7AAEtII8AAS0OYx8AAS0+7cMAAS0OYysAAS1EAwABEj7txwABLU5jGwABLVLtywABLVLttwABLU5jHwABLV7t0wABLV7mpwABLU5jEwABLWoRSwABLWrn7wABLWrn6wABLWrn+wABLWiPAAEtTmMrAAEtgAMAARI+7dsAAS2KYxsAAS2OuS8AAS2O7d8AAS2OF7cAAS2KYx8AAS2e7dMAAS2e5qcAAS2KYxMAAS2q6E8AAS2qEUsAAS2q5+8AAS2q5+sAAS2q5/sAAS2q7HcAAS2ojwABLYpjKwABLcgDAAESPu3vAAEt0mMbAAEt1u23AAEt1rkvAAEt1he3AAEt1lnPAAEt0mMfAAEt6uanAAEt0mMTAAEt8uhPAAEt8hFLAAEt8ux3AAEt8ufvAAEt8ufrAAEt8uf7AAEt8I8AAS3SYysAAS4QAwABEj7t8wABLhpjHwABLh7t0wABLhpjEwABLiYRSwABLibn7wABLibn6wABLibn+wABLiSPAAEuGmMrAAEuPAMAARI+7fsAAS5GYysAAS5IAwABEj7t/wABLlJjGwABLlbsEwABLlJjEwABLl4RSwABLl7n7wABLl7n6wABLl7n+wABLlyPAAEuUmMrAAEudAMAARI+7gcAAS5+YxMAAS6CEUsAAS6C5+8AAS6C5+sAAS6C5/sAAS6AjwABLn5jKwABLpgDAAESPu4PAAEuomMbAAEupu4TAAEupuwTAAEuomMTAAEushFLAAEusufvAAEusufrAAEusuf7AAEusI8AAS6iYysAAS7IAwABEj7uGwABLtJjEwABLtYRSwABLtbn7wABLtbn6wABLtbn+wABLtSPAAEu0mMrAAEu7AADAAJGSwABLvbuKwABLvpjGwABLv4C9wABLv4PGwABLv7uLwABLv7uMwABLv7uNwABLv51+wABLv531wABLv7uOwABLvynAAEu+mMfAAEvJJ8AAS76YxMAAS8sjwABLvpjKwABLzQDAAEu9pOnAAEvPmMbAAEvQg+zAAEvQgmvAAEvQp3HAAEvQtSXAAEvQg8bAAEvQu5DAAEvPmMfAAEvXu5TAAEvXu5XAAEvXt7fAAEvXlZjAAEvXqrPAAEvXgL3AAEvXhEjAAEvXhULAAEvXhUTAAEvXsxXAAEvXt0vAAEvXt1DAAEvXt0zAAEvXnavAAEvXlWXAAEvXu6TAAEvXu6XAAEvPmMTAAEvpu5bAAEvpr3TAAEvpthDAAEvpu6fAAEvpu6bAAEvpsxjAAEvpX8AAS+mEF8AAS+kjwABL6buqwABL6buswABL6butwABLz5jJwABL9gDAAEv2u5rAAEv2ofvAAEv2m0DAAEv2u5zAAEv2rnfAAEv2J8AAS/aV1sAAS/YgwABL9rudwABL9rufwABL9rugwABL9ruhwABL9rFJwABL9q9zwABLz5jKwABMBpV/AMAAkZPAAEwIu7HAAEwJmMTAAEwKu7LAAEwKgozAAEwJmMrAAEwNAMAATAi7s8AATA+YxMAATBC7tMAATBC7tcAATBC7tsAATBC7t8AATBC7uMAATBC7ucAATBC7usAATBC7u8AATBC7vMAATBC7vsAATBC7v8AATBC7wsAATBC7xMAATA+Yx8AATB61TsAATB67vcAATB67wMAATB67wcAATB64MMAATA+YysAATCQAwABMCLvFwABMJpjGwABMJ8AAkZPAAEwotiPAAEwou8bAAEwou8fAAEwou8jAAEwou8nAAEwou8rAAEwou8vAAEwou8zAAEwou83AAEwou87AAEwou8/AAEwou9DAAEwou9HAAEwou9LAAEwou9PAAEwou9TAAEwou9XAAEwou9bAAEwou9fAAEwou9jAAEwmmMfAAEw9u9nAAEw9wACRk8AATD+vssAATD+4bsAATD27vcAATD21TsAATD28D8AATCaYxMAATEW1W8AATEXAAJGTwABMR7vewABMR7vgwABMR7viwABMR7vjwABMR7vkwABMR7vswABMR7wJwABMR7v1wABMR7vowABMR7vcwABMR7vbwABMRa+7wABMRbVywABMRbVzwABMRa+5wABMRbVdwABMRbuywABMRa+/wABMRbwQwABMRbwRwABMRYKMwABMJpjKwABMXQDAAEwIvBzAAExfmMbAAExgwACRk8AATGG2I8AATGG8HcAATGG72MAATGG7ysAATGG7y8AATGG7zMAATGG8HsAATGG8H8AATGG8IMAATGG8IcAATGG8IsAATGC7wMAATGC1TsAATGC8E8AATGC7vcAATGC8FMAATGC8FcAATGC6QsAATGC7wcAATGC4MMAATF+YxMAATHa7v8AATHa8JMAATHa8JcAATHa7tMAATHa8LMAATHa8LcAATHa7usAATHa7u8AATHa7vMAATHbAAJGTwABMgLvewABMgLwywABMdru1wABMdru+wABMdru2wABMdru3wABMdru4wABMdru5wABMdrvCwABMdrvEwABMX5jHwABMi7wmwABMi7wowABMi7wpwABMi7wrwABMX5jKwABMkAAAwACRlMAATJK8PMAATJOYxMAATJSzvcAATJSlPcAATJOYx8AATJe8PcAATJOYysAATJkAwABMkrw+wABMm5jHwABMnJu3wABMnLV7wABMm5jEwABMn7U+wABMn7VbwABMn7VdwABMn6+7wABMn6+5wABMn6+/wABMn7V2wABMn7V3wABMn7VywABMn7VzwABMn7VwwABMm5jKwABMqwDAAEySvD/AAEytmMbAAEyugpTAAEyugmvAAEytmMfAAEyxg8bAAEytmMTAAEyzSMAATLMjwABMrZjKwABMtgDAAEySvEbAAEy4mMbAAEy5vEfAAEy5vEjAAEy5vEnAAEy4mMTAAEy9vErAAEy9I8AATLiYx8AATMC8TcAATLiYysAATMIAwABMkrxRwABMxJjGwABMxcAAkZTAAEzGvFLAAEzGu8nAAEzGvFPAAEzGvFTAAEzGu8rAAEzGu8vAAEzGu8zAAEzGu83AAEzGu87AAEzGu8/AAEzGu9DAAEzGu9HAAEzGvFXAAEzGu9LAAEzGu9fAAEzGvFbAAEzGvFfAAEzGsmTAAEzGr7LAAEzGvFjAAEzGtHzAAEzGuG7AAEzGuHTAAEzGvFnAAEzGuHXAAEzGvFrAAEzGvFvAAEzGuHbAAEzGvFzAAEzGuJXAAEzGu9PAAEzGvF3AAEzGvF7AAEzGvF/AAEzGvGDAAEzGvGHAAEzGu9TAAEzGvGLAAEzGvGPAAEzGuBLAAEzEmMfAAEzvu9nAAEzvvGTAAEzvuZPAAEzvm7fAAEzvtXvAAEzvvD3AAEzvtU7AAEzEmMTAAEz3tXbAAEz3tXfAAEz3tT7AAEz3tVvAAEz3wACRlMAATPy74MAATPy73sAATPy74sAATPy748AATPy75MAATPy77MAATPy8bcAATPy73MAATPy728AATPy76MAATPy79cAATPy8CcAATPe8ZsAATPevu8AATPe1csAATPe1c8AATPevv8AATPevucAATPe1XcAATPe8c8AATPe1P8AATPezvcAATPe8dMAATPe8ecAATPelPcAATPe8fMAATPe8fsAATPelZcAATMSYysAATRkAAMAAkZXAAE0bmMXAAE0cvIzAAE0bpOvAAE0emMfAAE0fgmrAAE0fr4nAAE0fr4rAAE0fr4vAAE0fr4zAAE0fgVXAAE0emMTAAE0mr53AAE0mI8AATSa0EMAATSaEMcAATR6YysAATSsAwABNG7ySwABNLZjEwABNLq+7wABNLq+9wABNLq+5wABNLq+/wABNLZjKwABNMwDAAE0bpOzAAE01mMbAAE02wACRlcAATTe8k8AATTe8lMAATTe8lcAATTe8lsAATTWYx8AATTyBVcAATTyvicAATTyvi8AATTyvisAATTyvjMAATTWYxMAATUK8l8AATUKvu8AATUKvvcAATUKvucAATUKvv8AATTWYysAATUgAwABNSJV/wABNG7yYwABNS5jGwABNTLyZwABNTMAAkZXAAE1OvJrAAE1OvJvAAE1LmMTAAE1RwACRlcAATVK8nMAATVGvvcAATVGvu8AATVGvucAATVGvv8AATVGERsAATUuYx8AATVm8ncAATUuYysAATVsAwABNG7yewABNXZjGwABNXrPHwABNXsAAkZXAAE1gvJTAAE1gvJXAAE1gvJPAAE1gvJbAAE1dmMfAAE1lgmrAAE1lgVXAAE1lr4nAAE1lr4vAAE1lr4rAAE1lr4zAAE1dmMTAAE1sr7vAAE1sr73AAE1sr7nAAE1sr7/AAE1sr53AAE1sI8AATV2YysAATXMAwABNG7OewABNdZjGwABNdoC9wABNdZjEwABNeCPAAE11mMrAAE16AMAATRuk6sAATXyYxMAATX2zyMAATX2lccAATXyYysAATYAAwABNG69xwABNgpjEwABNg6+ewABNg6+fwABNg6+gwABNg6+hwABNgpjKwABNiADAAE0bs5/AAE2KmMbAAE2LwACRlcAATYy8osAATYy8o8AATYy8pMAATYy8pcAATYqYxMAATZGvnsAATZGvn8AATZGvoMAATZGvocAATYqYysAATZYAAMAAkZbAAE2YvKzAAE2ZmMrAAE2aAMAATZik7cAATZyYx8AATZ20scAATZ20BMAATZ24LcAATZ24McAATZ2lO8AATZ24NcAATZ2zt8AATZ2xKsAATZ24LsAATZ23NcAATZ24NsAATZ21e8AATZ2H6MAATZ2lUMAATZ2zlsAATZ28rcAATZ2vZMAATZ28rsAATZyYxMAATbC2U8AATbC248AATbC25MAATbC3BcAATbC2asAATbCbSMAATbC2ucAATbC2t8AATbC2vsAATbC2vcAATbC2uMAATbC2u8AATbC2tsAATbC398AATbC2vMAATbC8sMAATbC028AATbC1/8AATbC8DcAATZyYysAATcQAwABNmLw6wABNxpjEwABNx7U/wABNx6VlwABNx7xzwABNx7x8wABNxpjKwABNzADAAE2YvLHAAE3OmMTAAE3PvCTAAE3PvCXAAE3PvCzAAE3PvC3AAE3OmMfAAE3UvBTAAE3UvBXAAE3UukLAAE3UvCnAAE3UvCvAAE3UvBPAAE3UvCbAAE3UvCjAAE3OmMrAAE3dAMAATZik7sAATd+Yx8AATeC4NcAATeC0scAATeC0BMAATeC4LcAATeC4McAATeClO8AATeCzt8AATeCH6MAATeC8icAATeC2usAATeC8dcAATeC8esAATeC4NsAATeC4JsAATeC4LsAATeC3NcAATeClUMAATeC8isAATeCzzMAATd+YxMAATfS2U8AATfSzvcAATd+YysAATfcAAMAAkZfAAE35mMbAAE36pmcAwACRmMAATfy8s8AATf2YxsAATf4nwABN/sAAkZjAAE4AKMAATf4pwABN/p1PwABN/rzRwABN/rzSwABN/rzTwABN/rzUwABN/ppawABN/rzVwABN/p3GwABN/rzWwABN/p1rwABN/rzXwABN/rzYwABN/p3LwABN/rzZwABN/rzawABN/p2FwABN/rzbwABN/p17wABN/p3OwABN/rzcwABN/rzdwABN/pmEwABN/rzewABN/rzfwABN/rzgwABN/rzhwABN/rziwABN/p1QwABN/rzjwABN/ZjEwABOICPAAE39mMrAAE4iAMAATfyGFMAATiSYxsAATiXAAJGYwABOJoaPwABOJJjHwABOKIJrwABOKJodwABOKIPGwABOKLzqwABOKLzrwABOJJjEwABOLoRSwABOLq+dwABOLp8iwABOLrzkwABOLqcXwABOLrA0wABOLsAAkZjAAE41vOXAAE41hnHAAE41vObAAE4uSMAATi4jwABOJJjKwABOOwDAAE38vOzAAE49mMfAAE4+gmvAAE49mMTAAE5AhFLAAE5AnyLAAE5AwACRmMAATkO85cAATkOGccAATkO85sAATj2YysAATkcAwABN/LzuwABOSZjGwABOSp0mwABOSZjHwABOTIJrwABOSZjEwABOToRSwABOTsAAkZjAAE5QvOXAAE5QhnHAAE5QvObAAE5OnyLAAE5OvOTAAE5JmMrAAE5WAMAATfy88cAATliYxsAATlmqzMAATliYx8AATluCa8AATliYxMAATl2EUsAATl3AAJGYwABOX7zlwABOX4ZxwABOX7zmwABOXZ8iwABOXbzkwABOWJjKwABOZQDAAE38vPTAAE5nmMbAAE5oq/3AAE5nmMfAAE5qgmvAAE5nmMTAAE5shFLAAE5swACRmMAATm685cAATm6GccAATm685sAATmyfIsAATmy85MAATmeYysAATnQAwABN/Lz3wABOdpjGwABOd52swABOdpjHwABOeYJrwABOdpjEwABOe4RSwABOe8AAkZjAAE59vOXAAE59hnHAAE59vObAAE57nyLAAE57vOTAAE52mMrAAE6DAMAATfy8+sAAToWYx8AAToaCa8AAToWYxMAAToiEUsAATojAAJGYwABOirzlwABOioZxwABOirzmwABOiJ8iwABOiLzkwABOhZjKwABOkADAAE38vP3AAE6SmMbAAE6TgpTAAE6TKcAATpKYx8AATpaCa8AATpa86sAATpa868AATpKYxMAATpqEUsAATprAAJGYwABOnLzlwABOnIZxwABOnLzmwABOmp8iwABOmq+dwABOmrzkwABOkpjKwABOowDAAE38vQLAAE6lmMbAAE6mgpTAAE6mKcAATqWYx8AATqmCa8AATqm86sAATqm868AATqWYxMAATq2EUsAATq2vncAATq2fIsAATq285MAATq3AAJGYwABOsrzlwABOsoZxwABOsrzmwABOpZjKwABOtgDAAE38vQXAAE64mMbAAE65gpTAAE65g2jAAE65KcAATriYx8AATr2Ca8AATr286sAATr2868AATriYxMAATsGEUsAATsHAAJGYwABOw7zlwABOw4ZxwABOw7zmwABOwZ8iwABOwa+dwABOwbzkwABOuJjKwABOygDAAE38vQvAAE7MmMbAAE7NgpTAAE7NgknAAE7NtSXAAE7NW8AATsyYx8AATtKCa8AATtK86sAATtK868AATsyYxMAATtaEUsAATtbAAJGYwABO2LzlwABO2IZxwABO2LzmwABO1r0RwABO1r0VwABO1q+dwABO1p8iwABOzJjKwABO4ADAAE38vR3AAE7imMbAAE7jhc/AAE7imMfAAE7lgmvAAE7lvOvAAE7imMTAAE7ohFLAAE7owACRmMAATuq85cAATuqGccAATuq85sAATuivncAATuifIsAATui85MAATuKYysAATvEAwABN/L0gwABO85jGwABO9IC9wABO85jHwABO9oJrwABO85jEwABO+IRSwABO+MAAkZjAAE76vOXAAE76hnHAAE76vObAAE74nyLAAE74vOTAAE7zmMrAAE8AAMAATfy9I8AATwKYxsAATwOClMAATwOAvcAATwKYx8AATwaCa8AATwKYxMAATwiEUsAATwjAAJGYwABPCrzlwABPCoZxwABPCrzmwABPCJ8iwABPCLzkwABPApjKwABPEADAAE38vSbAAE8SmMbAAE8Tgm/AAE8TgpTAAE8SmMfAAE8WgmvAAE8SmMTAAE8YhFLAAE8YwACRmMAATxq85cAATxqGccAATxq85sAATxifIsAATxivncAATxi85MAATxKYysAATyEAwABN/L0uwABPI5jGwABPJJZSwABPI5jHwABPJoJrwABPI5jEwABPKIRSwABPKMAAkZjAAE8qvOXAAE8qhnHAAE8qvObAAE8onyLAAE8jmMrAAE8vAMAATfy9MsAATzGYxsAATzKWUsAATzGYx8AATzSCa8AATzGYxMAATzaEUsAATzbAAJGYwABPOLzlwABPOIZxwABPOLzmwABPNp8iwABPMZjKwABPPQDAAE38vTbAAE8/mMbAAE9AllLAAE9AgpTAAE8/mMfAAE9DgmvAAE8/mMTAAE9FhFLAAE9FwACRmMAAT0e85cAAT0eGccAAT0e85sAAT0WfIsAAT0W85MAATz+YysAAT00AwABN/L04wABPT5jGwABPUIXFwABPUIXGwABPUIXHwABPUL05wABPT5jEwABPVb1RwABPVYRSwABPVcAAkZjAAE9YvOXAAE9YhnHAAE9YvObAAE9VnyLAAE9Vr53AAE9VvOTAAE9PmMfAAE9fgmvAAE9fmh3AAE9fvOvAAE9PmMrAAE9jAMAATfy9X8AAT2WYxsAAT2aFxcAAT2aFx8AAT2WYx8AAT2mCa8AAT2maHcAAT2m868AAT2WYxMAAT22EUsAAT23AAJGYwABPb7zlwABPb4ZxwABPb7zmwABPbZ8iwABPba+dwABPbbzkwABPZZjKwABPdgDAAE38vWLAAE94mMbAAE95hcbAAE95gm/AAE95vTnAAE94mMfAAE99gmvAAE99mh3AAE99vOvAAE94mMTAAE+BhFLAAE+BwACRmMAAT4O85cAAT4OGccAAT4O85sAAT4GfIsAAT4GvncAAT4G85MAAT3iYysAAT4oAwABN/L1nwABPjJjGwABPjYJvwABPjJjHwABPj4JrwABPj5odwABPj7zrwABPjJjEwABPk4RSwABPk8AAkZjAAE+VvOXAAE+VhnHAAE+VvObAAE+TnyLAAE+Tr53AAE+TvOTAAE+MmMrAAE+cAMAATfy9asAAT56YxsAAT5+FysAAT5+9a8AAT5+9bMAAT56Yx8AAT6OCa8AAT6OaHcAAT6O868AAT56YxMAAT6eEUsAAT6fAAJGYwABPqbzlwABPqYZxwABPqbzmwABPp6+dwABPp58iwABPp7zkwABPnpjKwABPsADAAE38vXXAAE+ymMbAAE+zJ8AAT7KYx8AAT7WCa8AAT7W868AAT7KYxMAAT7iEUsAAT7jAAJGYwABPurzlwABPuoZxwABPurzmwABPuK+dwABPuJ8iwABPspjKwABPwADAAE38vXnAAE/CmMbAAE/DgL3AAE/CmMfAAE/FgmvAAE/FvOvAAE/CmMTAAE/IhFLAAE/IwACRmMAAT8q85cAAT8qGccAAT8q85sAAT8ivncAAT8ifIsAAT8KYysAAT9AAwABN/L19wABP0pjGwABP04C9wABP04MqwABP0pjEwABP1sAAkZjAAE/XvX7AAE/XhnHAAE/XvObAAE/SmMfAAE/bvOrAAE/bvOvAAE/SmMrAAE/eAMAATfy9f8AAT+CYx8AAT+GCa8AAT+CYxMAAT+OEUsAAT+PAAJGYwABP5bzlwABP458iwABP46+dwABP47zkwABP4JjKwABP6gDAAE38vYfAAE/smMfAAE/tgmvAAE/smMTAAE/vhFLAAE/vwACRmMAAT/G85cAAT++fIsAAT++vncAAT++85MAAT+yYysAAT/YAwABN/L2KwABP+JjHwABP+YJrwABP+JjEwABP+4RSwABP+8AAkZjAAE/9vOXAAE/7nyLAAE/7r53AAE/7vOTAAE/4mMrAAFACAMAATfy9jcAAUASYxsAAUAWFysAAUAUiwABQBJjHwABQCIJrwABQBJjEwABQCsAAkZjAAFALvObAAFALhnHAAFALvOXAAFAKnyLAAFAKhFLAAFAKr53AAFAEmMrAAFASAMAATfy9ksAAUBSYxsAAUBWFLMAAUBWCb8AAUBSYx8AAUBiCa8AAUBi868AAUBSYxMAAUBvAAJGYwABQHLzlwABQHIZxwABQHLzmwABQG58iwABQG6+dwABQG4RSwABQFJjKwABQIwDAAE38vZXAAFAlmMTAAFAmmsLAAFAmvSfAAFAmvO/AAFAmvPLAAFAmvPXAAFAmvPjAAFAmvPvAAFAmh0TAAFAmvQPAAFAmvQbAAFAmvQzAAFAmvR7AAFAmvSHAAFAmnyjAAFAmvTPAAFAmhSPAAFAmtKPAAFAmsQTAAFAmvWDAAFAmvWTAAFAmvWjAAFAmsQfAAFAmvYDAAFAmvYjAAFAmvYvAAFAmvZHAAFAmhcDAAFAmvXbAAFAmvXrAAFAlmMrAAFBEAMAATfy9l8AAUEaYxsAAUEeD6cAAUEaYxMAAUEmCjsAAUEm9mcAAUEmawsAAUEm9J8AAUEm878AAUEm89cAAUEm88sAAUEm8+8AAUEm8+MAAUEmHRMAAUEm9A8AAUEm9BsAAUEm9DMAAUEm9HsAAUEm9IcAAUEmfKMAAUEmFI8AAUEm9M8AAUEm0o8AAUEmxBMAAUEm9YMAAUEm9ZMAAUEm9aMAAUEmxB8AAUEm9dsAAUEm9esAAUEm9gMAAUEm9iMAAUEm9i8AAUEm9kcAAUEmFwMAAUEkjwABQRpjKwABQagAAwACRmcAAUGynG8AAUG2YxMAAUG6nHsAAUG6DjsAAUG2YysAAUHEAwABQbL2nwABQc5jHwABQdIC9wABQdL2vwABQc5jEwABQd72owABQd72rwABQd72twABQd72uwABQc5jKwABQfADAAFBsvbDAAFB+mMbAAFB/gL3AAFB/gZvAAFB/vbHAAFB/va/AAFB+mMTAAFCEvajAAFCEvavAAFCEva3AAFCEva7AAFCEwACRmcAAUIm9s8AAUH6YysAAUIsAwABQbL20wABQjZjEwABQjr21wABQjZjHwABQkLdnwABQjZjKwABQkgDAAFBsvbbAAFCUmMTAAFCVVsAAUJW9t8AAUJWCjMAAUJSYx8AAUJlhwABQmbmTwABQlJjKwABQnADAAFBsvbjAAFCemMbAAFCfvbnAAFCfuZPAAFCemMTAAFCiwACRmcAAUKO9usAAUKJWwABQor23wABQooKMwABQor21wABQnpjHwABQqbdnwABQnpjKwABQqwDAAFBsvb7AAFCtmMTAAFCuvbzAAFCtmMrAAFCwAMAAUGy9v8AAULKYxsAAULOCj8AAULKYxMAAULXAAJGZwABQtr26wABQtb28wABQtSPAAFCymMfAAFC6YcAAULKYysAAULwAwABQbL3BwABQvpjGwABQv2HAAFC/gZPAAFC/wACRmcAAUMK9wsAAUL6YxMAAUMTAAJGZwABQxb26wABQxIKMwABQvpjKwABQyAAAwACRmsAAUMq9w8AAUMuYxMAAUMyoBsAAUMuYysAAUM4AwABQyr3EwABQ0JjEwABQ0agGwABQ0JjKwABQ0wAAwACRm8AAUNWYxMAAUNaoIcAAUNWoIMAAUNiYx8AAUNmkg8AAUNiYxMAAUNukY8AAUNiYysAAUN0AAMAAkZzAAFDfmMbAAFDggorAAFDfmMTAAFDivsbAAFDiotbAAFDivsfAAFDivsjAAFDivsnAAFDivgbAAFDivs7AAFDivs/AAFDivtDAAFDiqR/AAFDivtHAAFDihB/AAFDivtLAAFDivtPAAFDircHAAFDivtTAAFDivtXAAFDinEvAAFDivtbAAFDivtfAAFDfvdDAAFD3mMTAAFD4lqTAAFD3mMrAAFD6AMAAUN+kFcAAUPyYxsAAUP2HQ8AAUP2a/8AAUP2VS8AAUP290cAAUP290sAAUP2908AAUP291MAAUP291cAAUP2qM8AAUP2qOMAAUP2HeMAAUP2FfcAAUPyYxMAAUQq91sAAUQq918AAUQq92MAAUQq92cAAUQq93sAAUQq938AAUQq96MAAUQq96cAAUQquBcAAUQqi28AAUPyYysAAURUAwABQ373qwABRF5jGwABRGId8wABRGJn6wABRGL3rwABRGL3swABRGL3twABRF5jHwABRHpr/wABRF5jEwABRIL3uwABRIL3xwABRIL37wABRIL4HwABRIL4IwABRIL31wABRIL36wABRIL4kwABRIL46wABRIL5BwABRIL5AwABRIL4XwABRIL4DwABRIL5HwABRIL5IwABRIL32wABRIKLbwABRIL5TwABRIL5SwABRIL5hwABRIL5awABRIL5XwABRIL5swABRIL5OwABRIL5dwABRIL5ewABRIKijwABRIL5LwABRIL5VwABRF5jKwABRPgDAAFDfvnTAAFFAmMbAAFFBmfrAAFFBvk/AAFFBvlDAAFFBvlHAAFFBm7zAAFFBvdzAAFFBnrbAAFFBvefAAFFBvevAAFFAmMfAAFFLmtnAAFFAmMTAAFFNvePAAFFNI8AAUU2+ecAAUU2bQ8AAUU2+fMAAUU2bP8AAUU2+fcAAUUCYysAAUVUAwABQ375+wABRV5jGwABRWL5YwABRWL5ZwABRV5jKwABRWwDAAFDfvn/AAFFdmMbAAFFeJ8AAUV7AAJGcwABRYCjAAFFeKcAAUV6+gMAAUV6+gcAAUV6+gsAAUV6+g8AAUV6+hMAAUV6+hcAAUV6+hsAAUV6+h8AAUV2YxMAAUWsjwABRXZjKwABRbQDAAFDfvojAAFFvmMbAAFFwmfrAAFFvmMTAAFFymz7AAFFyrgfAAFFvmMrAAFF1AMAAUN++icAAUXeYx8AAUXibCsAAUXibFMAAUXibC8AAUXiFgMAAUXiGIMAAUXibCcAAUXeYxMAAUX+bGsAAUX+bPMAAUX++i8AAUX+rycAAUX/AAJGdwABRhL6MwABRhL6PwABRhL6OwABRhL6NwABRd5jKwABRib6KwABQ376ewABRi5jGwABRjId8wABRi5jHwABRjpr/wABRjpsKwABRjpsUwABRjpsLwABRjpsAwABRjoWAwABRjoYgwABRjpsJwABRi5jEwABRl76fwABRl76gwABRl5tDwABRl4WCwABRl4YdwABRl5sawABRl5s8wABRi5jKwABRnwDAAFDfqEXAAFGhmMbAAFGimfrAAFGigdfAAFGigk7AAFGhmMTAAFGmo/HAAFGhmMrAAFGoAMAAUN+oRMAAUaqYxsAA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AFLZvw7AAFLZvw/AAFLZvwzAAFLZvxzAAFLZvxvAAFLZvx7AAFLZvx/AAFLZvyDAAFLZvx3AAFLZvxnAAFLZvxrAAFLYhgfAAFLYhgnAAFLYhgvAAFLLmMrAAFLtAADAAJGvwABS76niwABS8JjGwABS8Yd4wABS8YWAwABS8b8CwABS8b8lwABS8b8mwABS8apKwABS8JjEwABS+MAAka/AAFL5vwjAAFL5vyfAAFL5vyjAAFL4hgnAAFLwmMrAAFL+AADAAJGwwABTAKnjwABTAZjGwABTAr8wwABTAZjEwABTBKGZwABTBL8ywABTBL8xwABTBL82wABTBL84wABTBL87wABTAZjKwABTCwAAwACRscAAUw2p5MAAUw6YxsAAUw+ESMAAUw+HfMAAUw+HeMAAUw+HhsAAUw+g78AAUw+hC8AAUw+/P8AAUw+/QMAAUw/AAJGxwABTGL9BwABTGL9CwABTD79DwABTD79EwABTD4cMwABTD4CswABTDpjHwABTH6n8wABTH4TwwABTDpjIwABTIqn8wABTDpjEwABTJKFCwABTJKE2wABTJL9GwABTJL9KwABTJL9MwABTJL9OwABTJL9QwABTJL9SwABTJKKlwABTJL9VwABTJL9XwABTJL9awABTJL9cwABTJKNHwABTJKNJwABTJKI5wABTJKI6wABTJKPXwABTJKLtwABTJL9ewABTJKKzwABTJL9gwABTJKFMwABTJKJ3wABTJL9pwABTJL9wwABTJKFFwABTJKK2wABTJKFjwABTJKFmwABTJKIAwABTJL9ywABTJKIEwABTJKIFwABTJKIHwABTJKIMwABTJKIRwABTJKITwABTJL90wABTJL93wABTJL96wABTJL98wABTJL9/wABTJL+BwABTJL+DwABTJL+GwABTJL+JwABTJL+LwABTJL+RwABTJL+VwABTJL+WwABTJL+YwABTJKPOwABTJKPQwABTJKPTwABTJKMXwABTJL+awABTJL+fwABTJL+gwABTJL+iwABTJL+kwABTJL+mwABTJKn/wABTJL9twABTJL+dwABTJL9owABTJL+vwABTJKFVwABTJKOTwABTJL+xwABTJL+ywABTJL+1wABTJL+3wABTJL+4wABTJL+6wABTJL+7wABTJL++wABTJL+/wABTJL/CwABTJL/GwABT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u6QFwABVu6FxwABVu6H6wABVu6GkwABVu4JJwABVspjEwABVxaLbwABVxZ7vwABVxcAAQMXAAFXFqbPAAFXFntDAAFWymMrAAFXLAADAAJHBwABVzai0wABVzpjGwABVz4bswABVz6JBwABVz4VJwABVz4C9wABVz6KtwABVz6FcwABVz8AAkcHAAFXWwABAyMAAVc+pbcAAVc+CbsAAVc/AAEDJwABVzpjHwABV26QLwABV26FvwABV24JrwABV24eRwABV26H8wABV24VCwABV24VEwABV252rwABV24QjwABV26jvwABV24JtwABV24ZdwABV26EFwABVzpjEwABV6aGYwABV6aFbwABV6b+rwABV6aLawABV6cAAQFnAAFXpwABAzsAAVemi28AAVeme0MAAVemplcAAVenAAEDSwABV6cAAQNPAAFXOmMjAAFX1gm3AAFXOmMrAAFX3AMAAVc2ensAAVfmYxsAAVfqEncAAVfqpbMAAVfqCa8AAVfrAAEDUwABV+qjvwABV+r4JwABV+ZjHwABWAZ6OwABWAaFvwABWAYJtwABWAcAAQNbAAFYBwABA18AAVgGCScAAVfmYyMAAVgihb8AAVfmYxMAAVgqi28AAVgqow8AAVgqplcAAVgqpn8AAVfmYysAAVg8AwABVzajTwABWEZjGwABWEpkIwABWEqlswABWEsAAQNzAAFYSwABA3cAAVhLAAEDewABWEqFlwABWEqjvwABWEZjHwABWGp6OwABWGqDtwABWGqiswABWGoeRwABWGqFvwABWGoJrwABWGqiLwABWGsAAQNbAAFYagknAAFYRmMTAAFYkotvAAFYkntDAAFYkwABAzsAAViTAAEDgwABWJKFiwABWJKjDwABWJKmVwABWJKmfwABWJKFawABWEZjKwABWLgDAAFXNqNfAAFYwmMbAAFYxoYXAAFYxhSzAAFYwmMfAAFY0gm3AAFYwmMTAAFY2wABAWcAAVjai28AAVjaow8AAVjCYysAAVjoAAMAAkcLAAFY8qMrAAFY9mMbAAFY+hUnAAFY+oq3AAFY+oVzAAFY9mMfAAFZCgL3AAFZCpAvAAFY9mMTAAFZFhDHAAFZFotvAAFZFqL/AAFZFnuPAAFZFqdTAAFZFnu/AAFY9mMrAAFZMAADAAJHDwABWTp6bwABWT5jGwABWUCLA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WMTAAEGswABYxMAAQebAAFjEwABB5MAAWMTAAEG6wABYxMAAQgPAAFjEwABCNMAAWMTAAEH/wABYxMAAQd7AAFjEv8zAAFjEwABCNcAAWMTAAEI5wABYxMAAQjjAAFjEwABCPMAAWMTAAEJEwABYxMAAQkfAAFjEwABCScAAWMTAAEJGwABYxMAAQkzAAFjEwABCQMAAWMS/OsAAWMS/OMAAWMTAAEJRwABYxMAAQlDAAFjEv8rAAFjEwABCU8AAWMTAAEJVwABYxMAAQmfAAFjEwABCWcAAWMTAAEJswABYxMAAQlbAAFjEwABCa8AAWMShmcAAWMTAAEJwwABYxMAAQnHAAFjEwABCb8AAWMTAAJHTwABZOcAAQnXAAFjEwABCd8AAWMTAAEJzwABYxMAAQnnAAFjEwABCeMAAWMTAAEKLwABYxMAAQpDAAFjEwABCj8AAWMTAAEKSwABYxMAAQpHAAFjEwABCh8AAWMTAAEKIwABYxMAAQozAAFjEwABCjcAAWMTAAEKawABYxMAAQo7AAFjEwABCnMAAWMTAAEKBwABYxMAAQp7AAFjEwABCoMAAWMTAAEKJwABYxMAAQoDAAFjEwABCisAAWMTAAEKCwABYxMAAQoPAAFjEwABCMMAAWMTAAEKEwABYxMAAQqHAAFjEvzLAAFjEwABChcAAWMTAAEKGwABYxMAAQn3AAFjEvzfAAFjEvzbAAFjEwABB0MAAWMTAAEKfwABYxMAAQnrAAFjEwABCpsAAWMTAAEJ7wABYxMAAQqfAAFjEwABCqcAAWMTAAEKdwABYxMAAQmnAAFjEwABCW8AAWMTAAEJXwABYxMAAQrHAAFjEwABCs8AAWMTAAEJcwABYxMAAQl3AAFjEwABCtcAAWMTAAEK2wABYxMAAQrjAAFjEwABCucAAWMTAAEK3wABYxMAAQrrAAFjEwABCX8AAWMTAAEJgwABYxMAAQljAAFjEvzvAAFjEwABCasAAWMTAAEJ/wABYxMAAQm7AAFjEwABCXsAAWMTAAEJhwABYxMAAQmLAAFjEwABCx8AAWMTAAELLwABYxMAAQszAAFjEwABCY8AAWMTAAEIlwABYxMAAQmXAAFjEwABCZMAAWMTAAEJmwABYxMAAQs7AAFjEwABCOsAAWMTAAEI7wABYxMAAQlTAAFjEwABBnMAAWMTAAEGN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XVDAAERgwABdT5jEwABdUsAARFPAAF1SwABEYcAAXVLAAERiwABdUsAARGPAAF1SwABEZMAAXVLAAERlwABdUrTIwABdT5jKwABdWgAAwACR5sAAXVyYxsAAXV3AAEX8wABdXJjEwABdX8AAkebAAF1gwABF/cAAXVzAAERwwABdYpjHwABdY2HAAF1imMTAAF1lgozAAF1lgpjAAF1lgpDAAF1lsNzAAF1lt1bAAF1liGnAAF1lr5jAAF1lsTXAAF1lr5nAAF1lgbvAAF1lsQvAAF1lr5bAAF1ltF/AAF1lsBvAAF1lt6DAAF1ll6zAAF1ll57AAF1ll6jAAF1lwABEccAAXWXAAERywABdZcAARHPAAF1lhwjAAF1lwABEdMAAXWXAAER1wABdZcAARHbAAF1ltnPAAF1lt0fAAF1lt0jAAF1lwABEd8AAXWXAAER4wABdZcAARHnAAF1lwABEesAAXWXAAER7wABdZcAARHzAAF1lhwnAAF1lwABEfcAAXWXAAER+wABdZcAARH/AAF1lwABEgMAAXWWwL8AAXWW7o8AAXWXAAESBwABdZbAcwABdZbaYwABdZa+XwABdZbRbwABdZbAdwABdZayUwABdZbZ0wABdZa+cwABdZbRcwABdZbAewABdZcAARILAAF1lwABEg8AAXWXAAESEwABdZbdGwABdZbAwwABdZcAARIXAAF1lwABEhsAAXWW0XcAAXWXAAESHwABdZcAARIjAAF1lwABEicAAXWXAAESKwABdZbRawABdZbRewABdZbExwABdZbE0wABdZbEzwABdZa/QwABdZbjdwABdZbg9wABdZcAARIzAAF1imMrAAF2vAMAAXVzAAESNwABdsZjEwABdsoKYwABdsoKQwABdsrhAwABdsrg/wABdsrhEwABdssAARI7AAF2yuD7AAF2yuODAAF2ywABEjMAAXbKxJ8AAXbKxJcAAXbKvjcAAXbKvkcAAXbKxL8AAXbKvk8AAXbKwGsAAXbKxJsAAXbKvj8AAXbK0WMAAXbKwF8AAXbK3nsAAXbLAAESQwABdssAARJHAAF2ywABEksAAXbLAAESTwABdssAARJTAAF2ywABElcAAXbKHGMAAXbLAAESWwABdssAARJfAAF2ywABEmMAAXbK2cMAAXbK3Q8AAXbK3RcAAXbLAAESZwABdssAARJrAAF2ywABEm8AAXbLAAEScwABdssAARJ3AAF2ywABEnsAAXbKHGcAAXbLAAESfwABdssAARKDAAF2ywABEocAAXbLAAESiwABdspjfwABdsruiwABdssAARKPAAF2ymPLAAF2ytpbAAF2yr5DAAF2ytFPAAF2ymPHAAF2yrKPAAF2ytnHAAF2yr5TAAF2ytFTAAF2ysBnAAF2ywABEpMAAXbLAAESlwABdssAARKbAAF2yt0LAAF2ysC7AAF2ywABEp8AAXbLAAESowABdssAARKnAAF2ywABEqsAAXbK0VcAAXbLAAESrwABdssAARKzAAF2ytFLAAF2ytFfAAF2ysSnAAF2ysS3AAF2ysSzAAF2yr8/AAF2xmMrAAF3/AMAAXVzAAEStwABeAZjEwABeAsAARK7AAF4CwABEr8AAXgLAAESwwABeAsAARLHAAF4CwABEssAAXgGYysAAXggAwABdXMAARLPAAF4KmMTAAF4LwABEtMAAXgvAAES1wABeC8AARLbAAF4LwABEt8AAXgvAAES4wABeCpjKwABeEQDAAF1cwABEucAAXhOYxMAAXhTAAES6wABeFMAARLvAAF4UwABEvcAAXhTAAES/wABeFMAARMDAAF4TmMrAAF4aAMAAXVzAAETCwABeHJjEwABeHcAARMPAAF4cmMrAAF4fAMAAXVzAAETEwABeIZjEwABeIrEpwABeIrEtwABeIrEswABeIZjKwABeJgDAAF1cwABExcAAXiiYxMAAXimxMcAAXimxNMAAXimxM8AAXiiYysAAXi0AwABdXMAARMbAAF4vmMbAAF4wuDzAAF4wwACR5sAAXjLAAETHwABeMsAARMjAAF4ywABEycAAXjLAAETKwABeMsAARMvAAF4ywABEzMAAXjLAAETNwABeMrQpwABeMsAARM7AAF4ywABEz8AAXjLAAETQwABeMsAARNHAAF4ywABE08AAXjLAAETUwABeMMAARNLAAF4vmMTAAF5CgpjAAF5CgpDAAF5CwABEjMAAXkKw3MAAXkLAAESAwABeQocJwABeQsAAkebAAF5JwABE48AAXknAAETowABeScAAROzAAF5JwABE7cAAXknAAETwwABeScAARPbAAF5JwABE88AAXknAAET6wABeScAARQLAAF5JwABE/8AAXknAAEUIwABeScAARQrAAF5JwABE3sAAXknAAEUkwABeScAARSjAAF5JwABFIsAAXknAAEUpwABeScAARPHAAF5JwABE4MAAXknAAEVCwABeScAARUPAAF5JwABE1cAAXknAAETWwABeScAARUDAAF5JwABFP8AAXknAAEThwABeScAARO7AAF5CwABEfsAAXkLAAERxwABeQpeewABeQpeowABeQpeswABeQrAbwABeQq+YwABeQregwABeQoG7wABeQrE1wABeQsAARHbAAF5CwABEd8AAXkLAAEUAwABeQsAARHjAAF5CwABEecAAXkLAAER6wABeQsAARHvAAF5CsC/AAF5CsBzAAF5CsB3AAF5CrJTAAF5CsB7AAF5CwABEgsAAXkKwMMAAXkLAAESHwABeQsAARIjAAF5CwABEicAAXkK43cAAXkK4PcAAXkKxNMAAXkKxMcAAXkKxM8AAXi+Yx8AAXoXAAETcwABeL5jKwABehwDAAF1cwABFSMAAXomYxsAAXoq4PMAAXorAAJHmwABejMAARUnAAF6MuE7AAF6MuE3AAF6MwABFSsAAXozAAEVLwABejMAARMvAAF6MwABEzMAAXozAAETNwABejLQpwABejMAARM7AAF6MwABEz8AAXozAAETTwABejMAARNTAAF6JmMTAAF6agpjAAF6agpDAAF6auEDAAF6auD/AAF6awABEjsAAXpq4RMAAXpq4PsAAXpq44MAAXprAAESMwABemrEnwABempjfwABempjywABempjxwABemqyjwABemrAZwABemsAAkebAAF6qwABFTMAAXqrAAEVOwABeqsAARU3AAF6qwABFT8AAXqrAAEVrwABeqsAARWzAAF6qwABFbsAAXqrAAEV0wABeqsAARXHAAF6qwABFUcAAXqrAAEV4wABeqsAARW/AAF6qwABFAsAAXqrAAEWBwABeqsAARYTAAF6qwABFgMAAXqrAAEWFwABeqsAARXrAAF6qwABFh8AAXqrAAEWIwABeqsAARVDAAF6qwABFlsAAXqrAAEWXwABeqsAARNXAAF6qwABE1sAAXqrAAEV5wABeqsAARVLAAF6qwABFd8AAXqrAAEVtwABemsAARKLAAF6ahxnAAF6awABEoMAAXprAAESTwABemsAARJHAAF6awABEksAAXprAAESQwABemrAXwABemreewABemq+RwABemrAawABemrEvwABemsAARJjAAF6awABEmcAAXprAAEV/wABemsAARJrAAF6awABEm8AAXprAAEScwABemrAuwABemsAARKjAAF6awABEqcAAXprAAESdwABemsAARKTAAF6awABEq8AAXpqxLcAAXpqxKcAAXpqxLMAAXomYx8AAXuO4O8AAXuO4OsAAXuPAAESPwABe48AARNzAAF7jwACR5sAAXujAAEWNwABeiZjKwABe6gDAAF1chv7AAF7smMbAAF7thEDAAF7twACR5sAAXu/AAEWcwABe750vwABe7JjEwABe8sAAkebAAF7zwABE1cAAXvPAAETWwABe88AARUDAAF7zwABFP8AAXvPAAEThwABe88AARO7AAF7ygozAAF7smMfAAF77YcAAXuyYysAAXv0AwABdXMAARZ3AAF7/mMbAAF8AwACR5sAAXwGYf8AAXwGYfsAAXv+YxMAAXwTAAJHmwABfBcAARNXAAF8FwABE1sAAXwXAAEWewABfBcAARXnAAF8FwABFUsAAXwXAAEV3wABfBcAARW3AAF7/mMfAAF8NwACR5sAAXw7AAEWNwABe/5jKwABfEADAAF1cwABFo8AAXxKYxsAAXxMnwABfE8AAkebAAF8VKMAAXxMpwABfE5v7wABfE8AARaTAAF8Tg/HAAF8TwABFpcAAXxOArMAAXxO/lMAAXxOE78AAXxOGm8AAXxPAAEWmwABfE8AARYrAAF8TwABFp8AAXxO7bcAAXxPAAEWowABfE5bZwABfE4YVwABfE4SvwABfE5v+wABfE5v8wABfEpjEwABfKiPAAF8SmMrAAF8sAMAAXVzAAEWpwABfLpjGwABfLyfAAF8vwACR5sAAXzEowABfLynAAF8vhEjAAF8vmfrAAF8umMTAAF82I8AAXy6YysAAXzgAwABdXMAARarAAF86mMbAAF87J8AAXzvAAJHmwABfPSjAAF87KcAAXzvAAEWrwABfO7pwwABfO8AARazAAF87wABFrcAAXzvAAEWuwABfOpjEwABfRSPAAF86mMrAAF9HAMAAXVzAAEWvwABfSZjGwABfSifAAF9KwACR5sAAX0wowABfSinAAF9KmfrAAF9KgmrAAF9Kg/PAAF9KwABA38AAX0qe9sAAX0rAAEWwwABfSoYVwABfSZjEwABfViPAAF9JmMrAAF9YAMAAXVzAAEWxwABfWpjGwABfWyfAAF9bwACR5sAAX10owABfWynAAF9bhJ3AAF9bmQjAAF9bwABFj8AAX1uwjsAAX1qYxMAAX2QjwABfWpjKwABfZgDAAF1cwABFssAAX2iYxsAAX2knwABfacAAkebAAF9rKMAAX2kpwABfaZn6wABfacAAQN/AAF9omMTAAF9wI8AAX2iYysAAX3IAwABdXKciwABfdJjGwABfdYCWwABfdJjHwABfd4PGwABfdJjEwABfeUjAAF95I8AAX3SYysAAX3wAwABdXMAARbTAAF9+mMbAAF9/J8AAX3/AAJHmwABfgSjAAF9/KcAAX3+HnsAAX3/AAEW1wABff6lYwABff8AARbbAAF9/hUrAAF9/uhrAAF9/hpHAAF9/nqXAAF9/wABFt8AAX36YxMAAX40jwABffpjKwABfjwDAAF1cwABFuMAAX5GYxsAAX5LAAJHmwABfk5dowABfkZjEwABflZrCwABflcAARbnAAF+VhobAAF+VtIPAAF+VtILAAF+VhpLAAF+VhozAAF+VhpzAAF+VhoTAAF+VtH3AAF+RmMrAAF+gAMAAXVzAAEW6wABfopjGwABfoyfAAF+jwACR5sAAX6UowABfoynAAF+jh57AAF+jwABFtcAAX6PAAEW7wABfo4VKwABfo8AARbbAAF+juhrAAF+jhpHAAF+jnqXAAF+jhQLAAF+jwABFvMAAX6PAAEW9wABfo8AARb7AAF+jwABFv8AAX6KYxMAAX7UjwABfopjKwABftwDAAF1cwABFwMAAX7mYxsAAX7rAAJHmwABfu5dowABfuZjEwABfvcAARbnAAF+9mArAAF+9hoHAAF+9hoTAAF+9hobAAF+9hojAAF+9hozAAF+9hpLAAF+9hqTAAF+9hpzAAF+5mMrAAF/IAMAAXVzAAEXCwABfypjGwABfy8AAkebAAF/Ml2jAAF/MwABFw8AAX8qYxMAAX8+CjsAAX8qYysAAX9EAwABdXMAARcbAAF/TmMbAAF/UwACR5sAAX9W6HsAAX9XAAEXDwABf05jEwABf2J6vwABf05jKwABf2gDAAF1cwABFycAAX9yYxsAAX93AAJHmwABf3sAARcrAAF/ewABFy8AAX9yYxMAAX+HAAEV2wABf3JjKwABf4wDAAF1cwABFzMAAX+WYxsAAX+aD88AAX+bAAJHmwABf6MAARc3AAF/owABFzsAAX+jAAEXPwABf6MAARdDAAF/owABF0cAAX+WYxMAAX+7AAJHmwABf78AARdLAAF/vwABF1sAAX+7AAEVzwABf7sAARX3AAF/uwABFdcAAX+7AAEVwwABf7sAARX7AAF/uI8AAX+WYysAAX/gAwABdXMAARdrAAF/6mMbAAF/7g/PAAF/7wACR5sAAX/3AAEXQwABf/cAARdHAAF/6mMTAAGAAwACR5sAAYAHAAEXWwABgAMAARXDAAGAAwABFfsAAYAAjwABf+pjKwABgBgDAAF1cwABF3MAAYAiYxsAAYAmD88AAYAnAAJHmwABgC8AARd3AAGALwABF3sAAYAvAAEXfwABgCJjEwABgD8AAkebAAGAQwABF4MAAYBDAAEXhwABgD8AARYnAAGAPwABFDMAAYA/AAEWLwABgD8AARQ7AAGAPI8AAYAiYysAAYBgAwABdXMAARebAAGAamMTAAGAbsSXAAGAbr43AAGAbr5PAAGAbsSbAAGAbr4/AAGAbwABEn8AAYBvAAESewABgG6+UwABgG8AARJTAAGAbr5DAAGAbwABEo8AAYBu0U8AAYBu0VMAAYBvAAESVwABgG7dFwABgG8AARKbAAGAbt0LAAGAbt0PAAGAbtFjAAGAbtpbAAGAbtnDAAGAbtnHAAGAbwABEpcAAYBvAAESnwABgG8AARKrAAGAbtFXAAGAbu6LAAGAbwABErMAAYBu0UsAAYBu0V8AAYBvAAEShwABgG4cYwABgG8AARJbAAGAbwABEl8AAYBuvz8AAYBqYysAAYD8AwABdXMAARejAAGBBmMTAAGBCr5nAAGBCsQvAAGBCtpjAAGBCwABEg8AAYEKvl8AAYEK3R8AAYEKvlsAAYELAAERywABgQsAARH3AAGBCwABEgcAAYEK0W8AAYEK0XMAAYEK0X8AAYELAAESEwABgQrdGwABgQsAARHPAAGBCt0jAAGBCiGnAAGBCtnPAAGBCt1bAAGBCtnTAAGBCr5zAAGBCwABEfMAAYELAAESFwABgQsAARIbAAGBCtF3AAGBCu6PAAGBCwABEisAAYEK0WsAAYEK0XsAAYELAAER/wABgQocIwABgQsAARHTAAGBCwABEdcAAYEKv0MAAYEGYysAAYGYAwABdXMAARenAAGBomMbAAGBpwACR5sAAYGrAAEXqwABgasAARd3AAGBqwABF3sAAYGiYxMAAYG7AAEXrwABgboccwABgboYTwABgboZpwABgboYnwABgboZnwABgboZDwABgboY8wABgboZAwABgboY2wABgboY4wABgboY0wABgboYHwABgboYJwABgboYLwABgboWYwABgboWawABgboW2wABgboWcwABgboWewABgboWgwABgboW6wABgboYywABgboZIwABgboZKwABgboW8wABgboWLwABgboXAwABgboW4wABgboWmwABgboYWwABgaJjKwABgjgDAAF1cwABF7MAAYJCYxsAAYJHAAJHmwABgksAARerAAGCSwABF3cAAYJLAAEXewABgksAARe3AAGCQmMTAAGCXwACR5sAAYJjAAEXuwABgl8AARePAAGCXwABF4sAAYJeG58AAYJeG5MAAYJeG4cAAYJeG2sAAYJeG1MAAYJeG0cAAYJeGzsAAYJeGycAAYJeGxMAAYJeGwMAAYJeGvMAAYJeGucAAYJeGtsAAYJeGs8AAYJeYBMAAYJCYysAAYKsAwABdXMAARfLAAGCtmMbAAGCuwACR5sAAYK+3VcAAYK2YxMAAYLHAAJHmwABgssAARNXAAGCywABE1sAAYLLAAETuwABgssAAROHAAGCywABFP8AAYLLAAEVAwABgsYKMwABgrZjHwABgumHAAGCtmMrAAGC8AMAAXVzAAEX0wABgvpjGwABgv8AAkebAAGDAl0jAAGDAt1XAAGC+mMTAAGDDwACR5sAAYMTAAEX1wABgxMAARNXAAGDEwABE1sAAYMTAAEV5wABgxMAARW3AAGDEwABFd8AAYMTAAEVSwABgvpjHwABgzMAAkebAAGDNwABFjcAAYL6YysAAYM8AAMAAkefAAGDRwABGA8AAYNKYxsAAYNPAAJHnwABg1LJkwABg1KTzwABg1MAARgTAAGDUtJbAAGDUwABGBsAAYNOhPsAAYNPAAEYFwABg069nwABg0pjEwABg3be7wABg3WfAAGDdwACR58AAYODAAEYJwABg4MAARhDAAGDgwABGEsAAYODAAEYNwABg4MAARg7AAGDgwABGD8AAYNKYx8AAYOeWoMAAYNKYysAAYOkAwABg0cAARirAAGDrmMTAAGDsotvAAGDrmMrAAGDuAMAAYNHA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MMAARpDAAGMwwACR6sAAYzLAAEaPwABjMrzmwABjML5mwABjMIRSwABjMEjAAGMwI8AAYymYysAAYzkAwABi0cAARqDAAGM7mMbAAGM8J8AAYzzAAJHqwABjPsAARqHAAGM7mMfAAGNAhX/AAGNAwABGjcAAY0CDxsAAYzuYyMAAY0SFf8AAYzuYxMAAY0bAAJHqwABjR8AARo/AAGNHvObAAGNGvmbAAGNGSMAAY0aEUsAAY0YjwABjO5jKwABjTgDAAGLRhoXAAGNQmMfAAGNRuhbAAGNRg8bAAGNQmMTAAGNUvmbAAGNUhFLAAGNUwACR6sAAY1e85sAAY1QjwABjUJjKwABjWgDAAGLRhoPAAGNcmMfAAGNdh5DAAGNdwABGjMAAY12DxsAAY1yYxMAAY2G+ZsAAY2GEUsAAY2HAAJHqwABjZLzmwABjYSPAAGNcmMrAAGNnAMAAYtGGjcAAY2mYxsAAY2qFScAAY2q0f8AAY2q0gMAAY2qEyMAAY2q0gcAAY2qircAAY2mYx8AAY3G8Z8AAY3G6FcAAY3GDxsAAY2mYxMAAY3XAAEaQwABjdcAAkerAAGN3wABGj8AAY3e85sAAY3fAAEadwABjdb5mwABjdbFKwABjdYRSwABjdUjAAGN1I8AAY2mYysAAY4AAwABi0cAARrPAAGOCmMbAAGODhdPAAGOCmMfAAGOFuhfAAGOFvGfAAGOFg8bAAGOCmMTAAGOJvmbAAGOJwABGkMAAY4nAAJHqwABjjMAARo/AAGOMvObAAGOMwABGncAAY4mEUsAAY4lIwABjiSPAAGOCmMrAAGOTAMAAYtGahMAAY5WYxMAAY5aawsAAY5aGhsAAY5a0g8AAY5a0gsAAY5aGksAAY5aGjMAAY5aGnMAAY5aGhMAAY5a0fcAAY5WYysAAY6AAwABi0cAARrXAAGOimMTAAGOjnyjAAGOjhobAAGOjtIPAAGOjtILAAGOjhpLAAGOjhozAAGOjhoTAAGOjtH3AAGOimMrAAGOsAMAAYtHAAEa2wABjrpjGwABjr8AARpHAAGOumMfAAGOxs7fAAGOumMTAAGOzwABGt8AAY7PAAEa4wABjs8AARrnAAGOzwABGusAAY7OzecAAY7OfKMAAY7OGhsAAY7PAAEa8wABjs8AARr3AAGOzwABGvsAAY7PAAEa/wABjs8AARsDAAGOzhozAAGOzhpLAAGOzwABGxsAAY7PAAEbHwABjs7SDwABjs7SCwABjrpjKwABjxgDAAGLRwABG1sAAY8iYxMAAY8m+scAAY8nAAEa8wABjycAARr3AAGPJwABGvsAAY8nAAEa/wABjycAARsDAAGPJtH3AAGPImMrAAGPRAMAAYtHAAEbXwABj05jEwABj1KrOwABj1KyvwABj1MAARrzAAGPUwABGvcAAY9TAAEa+wABj1MAARr/AAGPUwABGwMAAY9S0fcAAY9OYysAAY90AwABi0cAARtrAAGPfmMbAAGPgwACR6sAAY+HAAEbbwABj35jEwABj46rOwABj48AARsbAAGPjwABG3MAAY9+YysAAY+cAwABi0cAARt7AAGPpmMbAAGPqwABG38AAY+rAAEbgwABj6sAARuHAAGPpmMfAAGPus7fAAGPpmMTAAGPwqs7AAGPwrK/AAGPwwABG3MAAY/DAAEbiwABj8MAARrnAAGPwwABG48AAY/CzdsAAY/DAAEbkwABj8Lx4wABj8MAARuXAAGPwwABGusAAY/DAAEbmwABj8MAARujAAGPpmMrAAGP+AADAAJHrwABkAJjEwABkAcAARwHAAGQBwABHBsAAZAHAAEcKwABkAcAARwvAAGQAwABG7MAAZAaYxsAAZAfAAEbtwABkB8AARu7AAGQHwABG78AAZAaYxMAAZAuBx8AAZAu04MAAZAu038AAZAu04sAAZAaYysAAZBAAwABkAMAARvPAAGQSmMfAAGQTsCHAAGQSmMrAAGQVAMAAZADAAEb0wABkF5jEwABkGMAARvXAAGQXmMrAAGQaAMAAZADAAEb2wABkHJjEwABkHcAARvfAAGQdwABG+cAAZByYysAAZCAAwABkAMAARvrAAGQimMTAAGQjwABG+MAAZCKYysAAZCUAwABkAMAARvvAAGQnmMbAAGQowABEF8AAZCjAAJHrwABkKsAARvzAAGQqwABG/cAAZCrAAEb+wABkJ5jHwABkLrAhwABkLsAAkevAAGQwsuTAAGQugJbAAGQnmMrAAGQzAADAAJHswABkNZjEwABkNsAASjrAAGQ1mUjAAGQ4mMbAAGQ5wABHFsAAZDnAAEcdwABkOcAARyDAAGQ5wABIA8AAZDnAAEgOwABkOcAASA/AAGQ5wACR7MAAZEDAAEgQwABkQMAASCDAAGRAwABIIsAAZEDAAEgjwABkQMAASCXAAGRAwABIJsAAZEDAAEgnwABkQMAASCjAAGRAwABIKcAAZEC2I8AAZEDAAEg5wABkQMAASDrAAGRAwABIO8AAZEDAAEg+wABkQMAASD/AAGRAwABIQMAAZEDAAEhCwABkQMAASEPAAGRAwABIRsAAZDnAAEgRwABkOcAASBPAAGQ5wABIFcAAZDnAAEgWwABkOcAASBjAAGQ5wABIGsAAZDnAAEgcwABkOcAASB7AAGQ5t93AAGQ5t97AAGQ5wABIJMAAZDnAAEgqwABkOZ3JwABkOcAASCzAAGQ5wABILsAAZDnAAEgvwABkOcAASDDAAGQ5wABIMcAAZDnAAEgywABkOcAASDPAAGQ5wABINMAAZDnAAEg1wABkOcAASDbAAGQ5wABIN8AAZDnAAEg4wABkOcAASDzAAGQ5wABIPcAAZDnAAEhBwABkOcAASEXAAGQ4mMfAAGRxwABIR8AAZHHAAEhIwABkca/VwABkccAAkezAAGR1r7LAAGR1tHzAAGR1wABIUsAAZHHAAEhTwABkccAASFXAAGRxwABIV8AAZHHAAEhYwABkca1HwABkccAASFrAAGRxwABIXMAAZHHAAEhdwABkccAASHvAAGRxwABItsAAZDiYxMAAZIPAAJHswABkhMAASErAAGSEwABIXsAAZITAAEhgwABkhMAASGfAAGSEwABIgsAAZITAAEiGwABkhMAASIfAAGSEwABIj8AAZITAAEiSwABkhMAASH/AAGSEwABIgcAAZITAAEiUwABkhMAASHTAAGSEwABImsAAZITAAEhrwABkhMAASHjAAGSEwABIocAAZITAAEiiwABkhMAASKPAAGSEwABIlsAAZITAAEiVwABkhMAASKjAAGSEwABIpsAAZITAAEhmwABkhMAASK3AAGSEwABIsMAAZITAAEikwABkg8AASFDAAGSDwABIUcAAZIPAAEhhwABkg8AASGPAAGSDwABIZcAAZIPAAEhpwABkg8AASGzAAGSDr+bAAGSDwABIb8AAZIPAAEhxwABkg8AASGjAAGSDr+rAAGSDwABIecAAZIPAAEh9wABkg8AASH7AAGSDwABIgMAAZIOv8sAAZIOv7sAAZIOv8MAAZIOv9MAAZIOv6MAAZIPAAEiMwABkg8AASHbA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SVTAAGXBmMfAAGXCwABJVcAAZcGYxMAAZcTAAJHswABlxcAASVbAAGXBmMrAAGXHAMAAZDXAAElZwABlyZjGwABlyq/SwABlypg+wABlysAASVrAAGXKwABJW8AAZcrAAElcwABlyZjEwABl0JlJwABlyZjKwABl0gDAAGQ1wABJxcAAZdSYxsAAZdXAAEnGwABl1bbbwABl1YS+wABl1bhWwABl1cAAkezAAGXawABJx8AAZdSYx8AAZdzAAEnKwABl3MAAkezAAGXewABJy8AAZdSYyMAAZeDAAJHswABl4cAAScvAAGXUmMnAAGXjwABJzcAAZePAAEnPwABl1JjEwABl5sAAkezAAGXnwABJ0MAAZefAAEnRwABl5kvAAGXmVsAAZebAAElYwABl1JjKwABl7cAAScjAAGXtwABJycAAZDXAAEnSwABl8JjHwABl8cAAkezAAGXywABJy8AAZfGEvsAAZfCYyMAAZfXAAJHswABl9sAAScvAAGXwmMTAAGX4wACR7MAAZfnAAEnRwABl8JjKwABl+4T1wABl+8AASdPAAGQ1wABJ1cAAZf6YxMAAZf/AAElYwABl/0vAAGX+mMrAAGYCAMAAZDXAAEnWwABmBJjHwABmBcAASVXAAGYEmMTAAGYHwACR7MAAZgjAAElWwABmBJjKwABmCgDAAGQ1wABJ18AAZgyYxMAAZg2v+MAAZgyYysAAZg8AwABkNcAASdzAAGYRmMbAAGYSwABJVcAAZhKVasAAZhLAAJHswABmFcAASd3AAGYRmMfAAGYXwABIV8AAZhfAAEhYwABmF8AASF3AAGYXwABIe8AAZhfAAEhIwABmEZjEwABmHcAASd/AAGYdwABIZMAAZh2v6MAAZh3AAEb1wABmEZjKwABmIgDAAGQ1wABJ5cAAZiSYxsAAZiXAAJHswABmJsAASdHAAGYlwABJ4MAAZiSYxMAAZinAAJHswABmKsAASebAAGYqwABJ6MAAZinAAEnpwABmJJjKwABmLgDAAGQ1wABJ68AAZjCYx8AAZjHAAElVwABmMJjEwABmM8AAkezAAGY0wABJVsAAZjCYysAAZjYAwABkNcAASezAAGY4mMbAAGY5wACR7MAAZjrAAEntwABmOJjEwABmPMAASGnAAGY4mMrAAGY+AMAAZDXAAEnvwABmQJjEwABmQa/4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ysAAaF8AwABn169wwABoYZjGwABoYoPswABoYoKUwABoYoJrwABoYoPGwABoYoSuwABoYZjJwABoaK9zwABoaK4ywABoaMAAS33AAGhowABLfsAAaGjAAEt/wABoaMAAS4DAAGhos0bAAGhor5rAAGhowABLgcAAaGjAAEuCwABoaMAAS4PAAGhowABLhMAAaGiF08AAaGjAAEuFwABoYZjEwABod690wABod0jAAGh3I8AAaGGYx8AAaHu1JsAAaGGYysAAaH2Vf8AAZ9evbcAAaH+YxsAAaICD7MAAaICAlsAAaH+YycAAaIOvc8AAaH+YxMAAaIWvdMAAaIVIwABohSPAAGh/mMfAAGiJtSbAAGiJg8bAAGh/mMrAAGiMwACR78AAaI2AtcAAaIyqtcAAaIzAAEuIwABojKMswABojJo1AMAAkfDAAGiTwABLi8AAaJSYxsAAaJXAAJHwwABolpZ0wABolJjJwABomADAAGiYwABLjMAAaJjAAEuNwABomMAAS47AAGiUmMfAAGidgJbAAGidgVXAAGidg7fAAGidg8bAAGiUmMjAAGiigJbAAGiUmMTAAGikVsAAaKSApcAAaKSEXsAAaKSXKcAAaKSXL8AAaKSXLsAAaKTAAEuPwABopIJGwABopIMcwABopIPRwABopLZLwABopJ7vwABopEjAAGikI8AAaJSYysAAaLPAAJHwwABotIC1wABok8AAS5LAAGi2mMbAAGi3wACR8MAAaLiXOMAAaLaYx8AAaLqAlsAAaLaYyMAAaLyAlsAAaLaYxMAAaL5WwABovoClwABovoRewABovpcpwABovoJGwABotpjKwABoxADAAGjEwABLjMAAaMTAAEuOwABok8AAS5PAAGjImMbAAGjJgJbAAGjImMnAAGjLwABLjsAAaMiYyMAAaM2AlsAAaMiYxMAAaM9WwABoz4ClwABoz4JGwABoz4RewABoz5cpwABoyJjKwABo1QDAAGiTwABLmsAAaNeYxsAAaNjAAJHwwABo2cAAS5vAAGjZwABLnMAAaNeYx8AAaNxcwABo15jKwABo3gDAAGiTwABLncAAaOCYxsAAaOHAAJHwwABo4pc4wABo4pdIwABo4sAAS57AAGjiwABLnMAAaOKI4MAAaOCYx8AAaOhewABo4JjEwABo6l3AAGjgmMrAAGjsAADAAJHxwABo7oZqwABo75jJwABo8ADAAGjvmMfAAGjygbLAAGjyhUTAAGjyofvAAGjym0DAAGjyhm3AAGjywABLosAAaPKESMAAaO+YxMAAaPrAAEugwABo+sAAS6HAAGj6wABLo8AAaPrAAEukwABo7rE3wABo/5jGwABpAIGywABpAIVEwABo/5jHwABpA6H7wABpA5tAwABpA4ZtwABpA4PGwABpA8AAS6LAAGkDhEjAAGj/mMTAAGkKwABLoMAAaQpIwABpCsAAS6HAAGkKI8AAaP+YysAAaQ8AwABo7sAAS6XAAGkRmMbAAGkShEjAAGkRmMfAAGkUofvAAGkUm0DAAGkUhm3AAGkUg8bAAGkRmMTAAGkZwABLoMAAaRlIwABpGSPAAGkRmMrAAGkdAADAAJHywABpH7E4wABpIJjGwABpIYPswABpIcAAS6jAAGkhwABLqcAAaSHAAEuqwABpIcAAS6vAAGkhwABLrMAAaSGVmMAAaSG7lMAAaSCYx8AAaSq7lcAAaSq3t8AAaSq7q8AAaSqkBcAAaSrAAEuvwABpKqqzwABpKruuwABpKrUmwABpKsAAS7PAAGkqg8bAAGkgmMnAAGk1AMAAaTWvc8AAaSCYxMAAaTivdMAAaTi7qsAAaTjAAEuuwABpOLe4wABpOLupwABpOCPAAGk4X8AAaThIwABpOLumwABpOMAAS7bAAGkgmMrAAGlDwABLrcAAaR/AAEu3wABpRZjGwABpRqqzwABpRsAAkfLAAGlIwABLuMAAaUWYx8AAaUqkBcAAaUrAAEuvwABpSruVwABpSre3wABpSrurwABpRZjEwABpULuqwABpULe4wABpULupwABpRZjKwABpVADAAGlUlX8AwACR88AAaVeYxsAAaVjAAJHzwABpWcAATA/AAGlYVsAAaVjAAEwQwABpWMAATBHAAGlYwABMEsAAaVjAAEwTwABpWMAATBTAAGlYwABMFcAAaViV0cAAaVjAAEHzwABpWMAATBbAAGlYwABMF8AAaVjAAEwYwABpWMAATBnAAGlYwABMGsAAaVjAAEwbwABpWJXawABpWJXbwABpWKHPwABpWKK+wABpWJhdwABpWMAATBzAAGlYwABMHcAAaViV3cAAaViV3sAAaViEEMAAaVjAAEv2wABpWJf6wABpV5jEwABpdsAAkfPAAGl3wABMHsAAaXfAAEwfwABpd8AATCXAAGl2wABMI8AAaXbAAEwkwABpdsAATCbAAGl2wABMJ8AAaXbAAEwowABpdsAATCnAAGl2wABMKsAAaXbAAEwrwABpdrrFwABpdrXVwABpdrXZwABpdrrDwABpdqhCwABpdqrOwABpdsAATCzAAGl2wABMLsAAaXbAAEwxwABpdsAATDLAAGl2wABMM8AAaVfAAEu7wABpjpjHwABpj4C9wABpjpjKwABpkQDAAGlXwABLvMAAaZOYxMAAaZSDX8AAaZOYysAAaZYAwABpV8AAS73AAGmYmMTAAGmZg1/AAGmZr53AAGmYmMrAAGmcAMAAaVfAAEu+wABpnpjGwABpn4C9wABpnpjEwABpoYNfwABpnpjKwABpowDAAGlXwABLwMAAaaWYxsAAaaaAvcAAaaWYxMAAaaiDX8AAaaWYysAAaaoAwABpV8AAS8PAAGmsmMbAAGmtgL3AAGmsmMTAAGmvg1/AAGmsmMrAAGmxAMAAaVfAAEvEwABps5jEwABptINfwABptMAAS8jAAGmzmMrAAGm3AMAAaVfAAEvJwABpuZjGwABpuoC9wABpuZjEwABpvMAAS8jAAGm8r53AAGm5mMrAAGm/AMAAaVfAAEvKwABpwZjGwABpwoC9wABpwZjEwABpxMAAS8jAAGnEr53AAGnBmMrAAGnHAMAAaVfAAEvLwABpyZjGwABpyoC9wABpyZjEwABpzMAAS8jAAGnMr53AAGnJmMrAAGnPAMAAaVfAAEvMwABp0ZjGwABp0oC9wABp0ZjEwABp1MAAS8jAAGnUr53AAGnRmMrAAGnXAMAAaVfAAEvNwABp2ZjGwABp2oC9wABp2ZjEwABp3INfwABp3MAAS8jAAGncr53AAGnZmMrAAGngAMAAaVfAAEvQwABp4pjEwABp44NfwABp48AAS9PAAGnimMrAAGnmAMAAaVfAAEvUwABp6JjGwABp6YC9wABp6JjEwABp68AAS9PAAGnrr53AAGnomMrAAGnuAMAAaVfAAEvVwABp8JjGwABp8YC9wABp8JjEwABp88AAS9PAAGnzr53AAGnwmMrAAGn2AMAAaVfAAEvWwABp+JjEwABp+YNfwABp+cAAS9vAAGn5wABL3MAAafnAAEvIwABp+cAAS9rAAGn4mMrAAGn/AMAAaVfAAEvdwABqAZjGwABqAoC9wABqAZjEwABqBMAAS8jAAGoEwABL2sAAagSvncAAagGYysAAaggAwABpV8AAS97AAGoKmMbAAGoLgL3AAGoKmMTAAGoNwABLyMAAag3AAEvawABqDa+dwABqCpjKwABqEQDAAGlXwABL38AAahOYxsAAahSAvcAAahOYxMAAahbAAEvIwABqFsAAS9rAAGoWr53AAGoTmMrAAGoaAMAAaVfAAEvgwABqHJjGwABqHYC9wABqHJjEwABqH8AAS8jAAGofwABL2sAAah+vncAAahyYysAAaiMAwABpV8AAS+HAAGolmMbAAGomgL3AAGolmMTAAGoowABLyMAAaijAAEvawABqKK+dwABqKMAAS9zAAGolmMrAAGotAMAAaVfAAEvjwABqL5jGwABqMIC9wABqL5jEwABqMsAAS8jAAGoywABL2sAAajLAAEvbwABqMq+dwABqL5jKwABqNwDAAGlXwABL5MAAajmYxsAAajqAvcAAajmYxMAAajyDX8AAajyvncAAajmYysAAaj8AwABpV8AAS+fAAGpBmMTAAGpCg1/AAGpCwABLyMAAakLAAEvawABqQZjKwABqRgDAAGlXwABL6MAAakiYxsAAakmAvcAAakiYxMAAakvAAEvIwABqS8AAS9rAAGpLr53AAGpImMrAAGpPAMAAaVfAAEvpwABqUZjGwABqUoC9wABqUZjEwABqVMAAS8jAAGpUwABL2sAAalSvncAAalGYysAAalgAwABpV8AAS+rAAGpamMbAAGpbgL3AAGpamMTAAGpdwABLyMAAal3AAEvawABqXa+dwABqWpjKwABqYQDAAGlXwABL68AAamOYxsAAamSAvcAAamOYxMAAambAAEvIwABqZsAAS9rAAGpmr53AAGpjmMrAAGpqAMAAaVfAAEvswABqbJjGwABqbYC9wABqbJjEwABqb4NfwABqb6+dwABqbJjKwABqcgDAAGlXwABL7cAAanSYxsAAanWAvcAAanSYxMAAaneDX8AAanevncAAanSYysAAanoAwABpV8AAS/DAAGp8mMbAAGp9gL3AAGp8mMTAAGp/g1/AAGp/r53AAGp8mMrAAGqCAMAAaVfAAEvxwABqhJjGwABqhYC9wABqhJjEwABqh4NfwABqh6+dwABqhJjKwABqigDAAGlXwABL9cAAaoyYxsAAao2AvcAAaoyYxMAAao+DX8AAaoyYysAAapEAwABpV8AAS/7AAGqTmMbAAGqUgL3AAGqTmMTAAGqWg1/AAGqTmMrAAGqYAMAAaVfAAEv/wABqmpjGwABqm4PVwABqmpjEwABqnbPowABqmpjKwABqnwDAAGlXwABMAMAAaqGYxsAAaqLAAEwBwABqosAATALAAGqiwABMA8AAaqLAAEwEwABqosAATAXAAGqiwABMBsAAaqLAAEwHwABqosAATAnAAGqiwABMC8AAaqLAAEwNwABqosAARTPAAGqiwABFNMAAaqKxlMAAaqGYx8AAarCsxsAAaqGYxMAAarKz6MAAaqGYysAAarQAAMAAkfTAAGq2sX7AAGq3mMbAAGq4wACR9MAAarmWdMAAareYycAAaruvc8AAareYxMAAar2vdMAAar2zbMAAar3AAEw1wABqvcAATDbAAGq9wABIi8AAar3AAEw4wABqvbNrwABqvcAATDnAAGq3mMfAAGrGwABMN8AAara8qcAAasiYxsAAasnAAJH0wABqypZ0wABqyJjJwABqzK9zwABqyJjEwABqzq90wABqzsAATDrAAGrOwABMO8AAas7AAEw8wABqzsAATD3AAGrOwABIg8AAas7AAEiEwABqzsAATD7AAGrOwABMOcAAas7AAEw/wABqzsAATEDAAGrOwABMQcAAas7AAExCwABqzsAATEPAAGq2wABMRMAAat2YxMAAat7AAExFwABq3sAATEfAAGrewABMSMAAat7AAExKwABq3oKMwABq3ZjKwABq5ADAAGq2vDnAAGrmmMTAAGrnwABMS8AAaufAAExMwABq58AATE3AAGrnwABMTsAAaueCjMAAauaYysAAau0AwABqtsAATE/AAGrvmMbAAGrwwACR9MAAavG8X8AAavDAAExQwABq8MAATFHAAGrwwABMUsAAavDAAExTwABq8MAATFTAAGrvmMTAAGr4wABMRcAAavjAAExHwABq+MAATEjAAGr4wABMSsAAaviCjMAAavjAAExfwABq75jKwABq/wDAAGq2wABMYMAAawGYxsAAawKD7MAAawLAAJH0wABrBLJjwABrAsAATFDAAGsCwABMUcAAawLAAExSwABrAsAATFPAAGsCwABMVMAAawGYycAAawvAAExiwABrC69zwABrAZjEwABrDq90wABrDrNswABrDsAATDXAAGsOwABMNsAAaw7AAEw4wABrDrNrwABrDsAAkfTAAGsVwABMaMAAaw7AAEw5wABrDsAASIvAAGsBmMfAAGsZwABMN8AAawGYysAAaxsAwABqtsAATGnAAGsdmMbAAGsewACR9MAAax+4bsAAax7AAExqwABrHsAATGvAAGsewABMbMAAax7AAExtwABrHZjEwABrJcAATE7AAGslwABMS8AAayXAAExMwABrJcAATE3AAGslgozAAGsdmMrAAGsrAMAAarbAAExxwABrLZjGwABrLoPswABrLsAAkfTAAGswwABMc8AAazC4bsAAay7AAExqwABrLsAATGvAAGsuwABMbMAAay7AAExtwABrLZjJwABrN8AATGLAAGs3r3PAAGstmMTAAGs6r3TAAGs6wABMQMAAazqzbMAAazrAAEw1wABrOsAATDbAAGs6wABMOMAAazqza8AAazrAAEiLwABrOsAATD/AAGs6wABMQcAAazrAAExCwABrOsAAkfTAAGtGwABMaMAAa0bAAEx8wABrRsAATHrAAGtGwABMe8AAa0bAAEyAwABrOsAATDnAAGs6wABIg8AAazrAAEiEwABrOsAATD7AAGs6wABMOsAAazrAAEw7wABrOsAATDzAAGs6wABMPcAAazrAAExDwABrLZjHwABrVcAATFHAAGtVwABMU8AAa1XAAExSwABrVcAATFTAAGtVwABMN8AAa1XAAExQwABrVcAAkfTAAGtcsmPAAGstmMrAAGteAMAAarbAAEyFwABrYJjGwABrYYS+wABrYcAATGfAAGtgmMnAAGtkAMAAa2CYx8AAa2aBssAAa2aDxsAAa2CYxMAAa2lIwABraSPAAGtgmMrAAGtslX8AwACR9cAAa26YxMAAa2/AAEzOwABrbsAATIjAAGtxmMbAAGtyg+zAAGtywACR9cAAa3TAAEyKwABrcZjJwABrdq9zwABrcZjEwABreK90wABreMAATI7AAGt4wABMj8AAa3GYysAAa3wAwABrfJV/wABrbsAATJLAAGt/mMbAAGuAg+zAAGuAwACR9cAAa4LAAEyUwABrgsAATJXAAGuCwABMlsAAa4LAAEyXwABrgsAATJjAAGt/mMTAAGuIr3TAAGuIwACR9cAAa4rAAEyewABriMAARMPAAGuIwABMocAAa4jAAEyjwABriMAATKTAAGuIwABMpcAAa4jAAEymwABriMAATKfAAGuIwABMqMAAa4jAAEypwABriMAATKrAAGuIwABMq8AAa4jAAEyswABriMAATK7AAGuIwABMsMAAa4jAAEyywABrf5jHwABrm6sTwABrf5jKwABrnQDAAGudr3PAAGtuwABMtMAAa6CYxsAAa6HAAEy1wABroaOjwABroYJqwABrocAATJ/AAGuhwABMoMAAa6CYxMAAa6fAAJH1wABrqMAATLbAAGuowABMucAAa6eYAsAAa6fAAEy7wABrp8AATLzAAGunhjTAAGunhkrAAGunhkPAAGugmMrAAGuxAMAAa27AAEy+wABrs5jGwABrtIPswABrtLQVwABrtKilwABrtMAAkfXAAGu4wABMwMAAa7TAAEy3wABrtMAATLjAAGu0o7/AAGu0o8vAAGuzmMnAAGu+r3PAAGuzmMTAAGvAr3TAAGvAwABMusAAa8AjwABrs5jHwABrxJlgwABrs5jKwABrxgDAAGtuwABMycAAa8iYxsAAa8mCScAAa8mjpsAAa8mjv8AAa8mjy8AAa8iYx8AAa86AvcAAa8iYxMAAa9AjwABryJjKwABr0gDAAGtuwABMzMAAa9SYxsAAa9WAvcAAa9W0FcAAa9XAAEyawABr1JjHwABr2cAAkfXAAGvaqcLAAGvUmMTAAGvcI8AAa9SYysAAa94AwABrbsAATM3AAGvgmMbAAGvhg/PAAGvhwACR9cAAa+OSXcAAa+CYxMAAa+XAAEyzwABr4JjHwABr58AAQN/AAGvgmMrAAGvpAADAAJH2wABr65jGwABr7MAAkfbAAGvtwABM3cAAa+3AAEzfwABr65jEwABr8MAATODAAGvruL3AAGvymMbAAGvzhIPAAGvzgL3AAGvymMfAAGv2glDAAGv2h3TAAGv2h3HAAGv2h4fAAGv2h4jAAGvymMTAAGv8h3/AAGv8h4LAAGv8h4bAAGv8h3vAAGv8h4rAAGv8h4zAAGv8h5vAAGvymMrAAGwEAMAAa+vAAEzcwABsBpjGwABsB4dwwABsBpjHwABsCYduwABsBpjKwABsCwAAwACR98AAbA2YxsAAbA7AAEz9wABsDcAATObAAGwQmMbAAGwRgL3AAGwRpW7AAGwQmMTAAGwUI8AAbBCYysAA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ysAAbT0AwABtPZV/wABsrcAATRPAAG1AmMbAAG1BrvrAAG1AmMrAAG1DAMAAbUOVf8AAbK3AAE0UwABtRpjGwABtR8AATRXAAG1HwABNFsAAbUfAAE0XwABtR8AATRjAAG1HtMTAAG1HokHAAG1HtLnAAG1HgpTAAG1HhUnAAG1HrfXAAG1HmrvAAG1HtMHAAG1HtMPAAG1HgpfAAG1GmMTAAG1WhFLAAG1GmMrAAG1YAMAAbViVf8AAbK3AAE0awABtW5jGwABtXIJuwABtW5jEwABtXoRSwABtW5jKwABtYADAAG1glX/AAGyttHjAAG1jmMbAAG1kgknAAG1krSzAAG1jmMrAAG1nAMAAbK3AAE0dwABtaZjGwABtaoC9wABtaoKUwABtaqzywABtaZjKwABtbgDAAGytwABNHsAAbXCYxsAAbXGEHsAAbXGEIsAAbXGEI8AAbXGEJMAAbXCYysAAbXYAwABsrcAATR/AAG14mMbAAG15J8AAbXnAAJH4wABteyjAAG15KcAAbXmESMAAbXm0p8AAbXmCbsAAbXmEm8AAbXmGFcAAbXm0AsAAbXmGkcAAbXm0xsAAbXiYxMAAbYYjwABteJjKwABtiADAAGytwABNIMAAbYqYxMAAbYvAAE0EwABti7EhwABti4SnwABti4T7wABti4UjwABti4YXwABti7SjwABti4TKwABti8AATRzAAG2LwABNCcAAbYqYysAAbZYAwABsrcAATSHAAG2YmMTAAG2ZwABNBMAAbZmxIcAAbZmEp8AAbZmE+8AAbZmFI8AAbZmGF8AAbZm0o8AAbZmEysAAbZnAAE0JwABtmcAATRzAAG2YmMrAAG2kAADAAJH5wABtppjEwABtp8AAkfnAAG2owABNYMAAbabAAE0kwABtqpjGwABtq7hWwABtqpjEwABtrYjjwABtrcAATSvAAG2twABNJcAAba3AAEH6wABtrcAATSjAAG2twABNKcAAba3AAEGnwABtrcAATSzAAG2twACR+cAAbbbAAE0ywABtrcAATSbAAG2twABNN8AAba3AAE04wABtrcAATSfAAG2twABNL8AAba3AAE0wwABtqpjKwABtvgDAAG2mwABNQ8AAbcCYxsAAbcG07MAAbcHAAE1EwABtwcAATUXAAG3AmMTAAG3FwABNRsAAbcWI48AAbcXAAJH5wABtyMAATUnAAG3IwABNSsAAbcjAAE1SwABtyMAATVPAAG3IwABNVMAAbcjAAE1ZwABtyMAATVvAAG3IwABNXcAAbcjAAE1awABtxcAATQTAAG3FsSHAAG3FhKfAAG3FhPvAAG3FhSPAAG3FhhfAAG3FtKPAAG3FwABNHMAAbcWEysAAbcXAAE0JwABtwJjKwABt3ADAAG2mwABNXsAAbd6YxsAAbd+I4sAAbd+B+MAAbd6YysAAbeIAwABtpsAATV/AAG3kmMbAAG3lgmvAAG3ltBLAAG3kmMfAAG3owABNOcAAbeSYysAAbeoAAMAAkfrAAG3smMbAAG3twACR+sAAbe7AAE2AwABt7sAATYHAAG3uwABNgsAAbe7AAE2DwABt7JjEwABt85V6wABt84chwABt7JdXwABt9pjGwABt94RAwABt9pjEwABt+cAATWLAAG35wABNZcAAbfnAAE1mwABt+cAATQTAAG35sSHAAG35wACR+sAAbf/AAE1ZwABt/8AATWrAAG3/wABNa8AAbf/AAE1bwABt/8AATV3AAG3/wABNaMAAbf/AAE1pwABt+YSnwABt+YT7wABt+YUjwABt+YYXwABt+bSjwABt+cAATRzAAG35hMrAAG35wABNCcAAbfaYysAAbg8AwABt7MAATWzAAG4RmMbAAG4Sg0rAAG4RmMTAAG4UwABNbcAAbhTAAE1uwABuFMAATW/AAG4Ug6LAAG4UwABNeMAAbhTAAJH6wABuGsAATXnAAG4awABNe8AAbhrAAE18wABuGsAATX7AAG4awABNf8AAbhrAAE12wABuGsAATXrAAG4UmN/AAG4UmPLAAG4UmPPAAG4UsC7AAG4UwABNcMAAbhTAAE1ywABuFJjxwABuFMAATXHAAG4RmMrAAG4qAADAAJH7wABuLLhqwABuLZjGwABuLsAAkfvAAG4vuBLAAG4vwABNhcAAbi/AAE2GwABuLZjEwABuM6+2wABuM7ihwABuM8AATZPAAG4zwABNlMAAbi2YysAAbjgAwABuLMAATZXAAG46mMbAAG47hOTAAG47tLDAAG46mMrAAG4+AMAAbizAAE2WwABuQJjGwABuQZZowABuQcAATZLAAG5AmMfAAG5EwABNl8AAbkCYysAAbkYAwABuLMAATZjAAG5ImMbAAG5JlmjAAG5JhSbAAG5ImMTAAG5MI8AAbkiYysAAbk4AwABuLMAATZvAAG5QmMbAAG5RJ8AAblHAAJH7wABuUyjAAG5RKcAAblG7BsAAblGFo8AAblGFbcAAblHAAE2fwABuUJjEwABuWiPAAG5QmMrAAG5cAMAAbiyFU8AAbl6YxsAAbl+Ca8AAbl8nwABuX4C9wABuX4CWwABuXpjHwABuZLUmwABuXpjEwABuZiPAAG5emMrAAG5ouwbAAG5ohaPAAG5ohW3AAG5owABNn8AAbiy8p8AAbm2YxsAAbm6D7MAAbm7AAJH7wABucMAATaLAAG5tmMnAAG5yr3PAAG5yllrAAG5tmMTAAG51r3TAAG51tLLAAG5tmMrAAG54wACR+8AAbnmAtcAAbizAAE3DwABue5jGwABufIPswABufJZowABufMAATbDAAG58wABNssAAbnzAAEjgwABufMAATbrAAG58wABNuMAAbnzAAE3AwABue5jJwABuhcAATcXAAG57mMTAAG6Hr3TAAG6HI8AAbnuYx8AAborAAE2/wABuisAATa/AAG6KwABNkcAAbnuYysAAbo4AAMAAkfzAAG6QwABNzcAAbpGYxsAAbpKBk8AAbpGYxMAAbpRWwABulIKMwABukZjKwABulwAAwACR/cAAbpmYxMAAbprAAE3twABumsAATfHAAG6ZwABNz8AAbp2YxsAAbp7AAJH9wABun5dIwABunoC9wABunsAATdDAAG6ewABN0cAAbp7AAE3SwABunrimwABunrinwABunriowABunripwABunriqwABunrirwABunriswABunsAATdPAAG6ewABN1MAAbp7AAE3VwABunsAATdbAAG6ewABN18AAbp7AAEt+wABunsAATdjAAG6ewABN2cAAbp4pwABunsAATdrAAG6ewABN28AAbp7AAE3cwABunZjHwABuuCfAAG6dmMrAAG66AMAAbpnAAE3dwABuvJjGwABuvcAAkf3AAG6+lnTAAG68mMnAAG7Ar3PAAG68mMTAAG7Cr3TAAG7CwABN3sAAbsLAAE3fwABuwsAATeDAAG7CwABN4cAAbsLAAE2kwABuwsAATeLAAG7CwABN48AAbsK3xsAAbsK3yMAAbsK4AcAAbsK4AsAAbsKz3sAAbsKz3MAAbsLAAE3kwABuwrPawABumcAATeXAAG7TmMbAAG7Ug+zAAG7UwACR/cAAbtbAAE3nwABu1sAATejAAG7WwABN6cAAbtbAAE3qwABu1LiIwABu05jJwABu3K9zwABu05jEwABu3q90wABu3sAAkf3AAG7gwABN68AAbt7AAE3ewABu3sAATd/AAG7ewABN4MAAbt7AAE3hwABu3sAATaTAAG7ewABN4sAAbt7AAE3jwABu3rfGwABu3rfIwABu3rgBwABu3rgCwABu3rPewABu3rPcwABu3sAATeTAAG7es9rAAG7TmMrAAG7xAMAAbpnAAE3swABu85jGwABu9LiIwABu85jEwABu9ricwABu9oKMwABu85jKwABu+QAAwACR/sAAbvuYxcAAbvzAAE4BwABu/MAATgLAAG77wABOA8AAbv+YxsAAbwDAAJH+wABvAcAATgTAAG7/mMfAAG8DwACR/sAAbwTAAE4GwABvBMAATgXAAG8DvBLAAG7/mMTAAG8IwABOB8AAbv+YysAAbwqoNsAAbwoAwABu+8AATgjAAG8NmMbAAG8OwABOCcAAbw6kZ8AAbw2YycAAbxEAwABvDZjHwABvE8AAThPAAG8TwABNqsAAbxO8KsAAbxPAAE4QwABvE7wuwABvE8AATbHAAG8TwABOEcAAbxO8McAAbxPAAE4UwABvE8AAThLAAG8TvDXAAG8TwABNrcAAbxO8b8AAbxO778AAbxO78cAAbxO788AAbxPAAJH+wABvJMAATgXAAG8Tg8bAAG8NmMTAAG8nqrXAAG8nvATAAG8nnq/AAG8ngo7AAG8nu+3AAG8nSMAAbyee78AAbye5/sAAbw2YysAAbzCVf8AAbzCoNsAAbvvAAE4WwABvM5jGwABvNMAAThDAAG80wABOEcAAbzTAAE4SwABvNLwuwABvNLwxwABvNLw1wABvM5jEwABvO56vwABvO4KOwABvO7vtwABvO57vwABvOyPAAG8zmMrAAG9BqDbAAG9BAMAAbvvAAE4iwABvRJjGwABvRcAAThPAAG9FwABOEMAAb0XAAE4RwABvRcAAThLAAG9FvC7AAG9FvDXAAG9FvDHAAG9FwACR/sAAb03AAE4jwABvRJjHwABvT8AATarAAG9PvCrAAG9PwABNscAAb0SYxMAAb1OqtcAAb1O8BMAAb1Oer8AAb1OCjsAAb1O77cAAb1Oe78AAb1MjwABvRJjKwABvW6g2wABvWwDAAG77wABOJsAAb16YxsAAb1/AAE4QwABvX8AAThLAAG9fvC7AAG9fvDXAAG9fwABOJ8AAb16Yx8AAb2XAAE4UwABvZcAAkf7AAG9nwABOBcAAb2XAAE2twABvZbvvwABvXpjEwABva56vwABva7vtwABva57vwABvayPAAG9emMrAAG9wqDbAAG9wAMAAbvvAAE4twABvc5jGwABvdCfAAG90wACR/sAAb3YowABvdCnAAG90wABOLsAAb3TAAE4vwABvdMAATjDAAG9zmMTAAG98I8AAb3OYysAAb34AwABu+8AATjHAAG+AmMbAAG+BwABJscAAb4HAAE4ywABvgcAATjPAAG+BwABONMAAb4HAAE41wABvgcAATjbAAG+AmMrAAG+IAMAAbvvAAE43wABvipjGwABvi6puwABvi7ZTwABvi5n6wABvipjEwABvj7FKwABvj7vdwABvjyPAAG+KmMfAAG+TwACR/sAAb5TAAE4FwABvipjKwABvlgDAAG77wABOOMAAb5iYxsAAb5knwABvmcAAkf7AAG+bKMAAb5kpwABvmcAATjnAAG+ZwABOOsAAb5iYxMAAb6AjwABvmJjKwABvogDAAG77wABOO8AAb6SYxsAAb6XAAEmxwABvpcAATjzAAG+lwABOPcAAb6WxTsAAb6SYysAAb6oAwABu+8AATj7AAG+smMbAAG+twACR/sAAb67AAE4/wABvrsAATkDAAG+uwABOQcAAb67AAE5CwABvrsAATkPAAG+smMTAAG+0u+3AAG+0wABOKcAAb7Se78AAb7QjwABvrJjHwABvucAAThTAAG+5wABOKsAAb7nAAE2twABvrJjKwABvvQDAAG+9qDbAAG77wABOTsAAb8CYxsAAb8EnwABvwcAAkf7AAG/DKMAAb8EpwABvwcAATk/AAG/BwABOUMAAb8HAAE5RwABvwJjEwABvySPAAG/AmMrAAG/LAMAAbvvAAE5SwABvzZjGwABvzsAATk/AAG/OwABOUMAAb87AAE5RwABvzZjKwABv0gDAAG77wABOU8AAb9SYxsAAb9WD7MAAb9W8LsAAb9W8McAAb9W8NcAAb9SYycAAb9qvc8AAb9SYxMAAb9yvdMAAb9SYysAAb94AAMAAkf/AAG/gwABOVcAAb+GYxMAAb+K2E8AAb+K1+sAAb+GYysAAb+UAwABv4LYWwABv55jEwABv6LYSwABv55jKwABv6gDAAG/gthfAAG/smMTAAG/ttgzAAG/ttg7AAG/smMrAAG/wAMAAb+DAAE5WwABv8pjEwABv87YMwABv87YOwABv8pjKwABv9gDAAG/gwABOV8AAb/iYxsAAb/m20sAAb/nAAJH/wABv+8AATljAAG/4mMTAAG/9thPAAG/9tfrAAG/9thLAAG/9I8AAb/iYysAAcAIAwABv4MAASvvAAHAEmMbAAHAFmfrAAHAFvH3AAHAEmMnAAHAIAMAAcASYxMAAcAq1+sAAcAq2E8AAcApIwABwCiPAAHAEmMfAAHAPtb/AAHAPwABLBMAAcA+DxsAAcASYysAAcBOVf8AAb+DAAE5awABwFZjHwABwFrVOwABwFZjKwABwGADAAG/gwABOW8AAcBqYxsAAcBu8GsAAcBu8G8AAcBu8E8AAcBqYxMAAcB/AAJH/wABwIMAATlzAAHAgwABOXcAAcB+7+8AAcB+768AAcB+1cMAAcBqYysAAcCYAAMAAkgDAAHAowABOXsAAcCmYxMAAcCrAAE5fwABwKrVCwABwKoKMwABwKZjHwABwLsAATmHAAHAuwABOYsAAcCmYysAAcDEAwABwKMAATmPAAHAzmMbAAHA0wABOZMAAcDTAAE5lwABwNMAATmbAAHA0wABOZ8AAcDTAAJIAwABwOcAATmjAAHA5tHzAAHA5wABOasAAcDTAAE5pwABwM5jHwABwPsAATmvAAHA+wABOYcAAcD7AAE5iwABwM5jEwABwQsAATl/AAHBCtULAAHBCwACSAMAAcEXAAE5swABwQoKMwABwM5jKwABwSADAAHAovKrAAHBKmMbAAHBLwACSAMAAcEyWdMAAcEqYycAAcE6vc8AAcEqYxMAAcFCvdMAAcFDAAE51wABwULc2wABwULhCwABwKMAATnbAAHBVmMbAAHBWg+zAAHBWwABOZcAAcFbAAE5nwABwVsAATnjAAHBWwABOecAAcFbAAE5pwABwVZjJwABwXa9zwABwVZjEwABwX690wABwX7c2wABwX7hCwABwX8AATnXAAHBVmMrAAHBkAMAAcCjAAE56wABwZpjGwABwZyfAAHBnwACSAMAAcGkowABwZynAAHBnnVrAAHBnwABOe8AAcGfAAE58wABwZ8AATn3AAHBmmMTAAHBwI8AAcGaYysAAcHIAwABwKMAATn7AAHB0mMTAAHB1wABOccAAcHXAAE50wABwdcAATnPAAHB0mMrAAHB5AADAAJIBwABwe5jEwABwfMAATyDAAHB7wABOf8AAcH6YxsAAcH8nwABwf8AAkgHAAHCBKMAAcH8pwABwf5sZwABwf7CCwABwf64WwABwfpjEwABwhyPAAHB+mMrAAHCJAMAAcHvAAE6AwABwi5jGwABwjMAAkgHAAHCNwABOgcAAcI3AAE6CwABwjcAAToTAAHCNhOfAAHCNwABOhcAAcI3AAE6GwABwjcAATofAAHCNwABOiMAAcI3AAE6JwABwjZwjwABwjMAAToPAAHCMh3zAAHCLmMTAAHCawABOisAAcJrAAE6LwABwmpgCwABwmob1wABwmoSnwABwmoT7wABwmsAATpDAAHCahYLAAHCawACSAcAAcKPAAE6RwABwo8AATqLAAHCjwABOlMAAcKPAAE6jwABwo8AATqfAAHCjwABOssAAcKPAAE6fwABwo8AATsXAAHCjwABOzcAAcKPAAE7MwABwmsAATpLAAHCawABOk8AAcJqFmMAAcJrAAE6ZwABwmoWawABwmsAATpzAAHCahZzAAHCawABOncAAcJqFoMAAcJrAAE6gwABwmoWewABwmsAATqHAAHCawABOs8AAcJqFtsAAcJrAAE6xwABwmoWLwABwmsAATrjAAHCahY3AAHCawABOucAAcJqFqsAAcJrAAE66wABwmoWswABwmsAATrvAAHCahbrAAHCaqqvAAHCahbzAAHCawABOvMAAcJqFpsAAcJrAAE69wABwmoWowABwmsAATr7AAHCahbjAAHCahcjAAHCahcPAAHCahc3AAHCawABOysAAcJqF6sAAcJqGGcAAcJqGG8AAcJrAAE7OwABwmoXAwABwmoYnwABwmoYjwABwmsAATpvAAHCahe7AAHCawABO0cAAcJqF0cAAcJrAAE7SwABwmoXzwABwmsAATtPAAHCahfbAAHCawABO1MAAcJqF+MAAcJrAAE7VwABwmoXxwABwmsAATtbAAHCahf3AAHCawABO18AAcJqF+sAAcJrAAE7YwABwmoYHwABwmsAATtnAAHCahgnAAHCawABO2sAAcJqGC8AAcJqGDcAAcJrAAE7bwABwmoYTwABwmsAATuHAAHCahgXAAHCahkjAAHCahkrAAHCahjLAAHCahjTAAHCahl7AAHCahWHAAHCawABO4sAAcJqFWMAAcJrAAE7jwABwmoVcwABwmsAATuTAAHCahVrAAHCahV7AAHCahbLAAHCahizAAHCahjzAAHCawABO5sAAcJqGQMAAcJqGOMAAcJqGNsAAcJrAAE7qwABwmoZDwABwmoZOwABwmoZMwABwmoZRwABwmsAATu7AAHCahlXAAHCahljAAHCawABO78AAcJqF/8AAcJrAAE7wwABwmoYewABwmsAATvHAAHCahjDAAHCawABO88AAcJqGacAAcJrAAE70wABwmrD/wABwmsAATvXAAHCawABO4MAAcJrAAE72wABwmoVHwABwmsAATvfAAHCahSnAAHCawABO+MAAcJqFI8AAcJrAAE6wwABwmoZnwABwmsAATvnAAHCahhbAAHCLmMfAAHEmuLjAAHEmuLnAAHEmuKXAAHEmhMnAAHEmtoDAAHEmwABOjMAAcSbAAE6NwABxJpx6wABwi5jIwABxL4TJwABxL7aAwABxL8AATozAAHEvwABOjcAAcIuYysAAcTQAwABwe8AATvrAAHE2mMbAAHE3haPAAHE3hW3AAHE2mMrAAHE6AMAAcHvAAE77wABxPJjGwABxPazywABxPcAATvzAAHE9wABO/cAAcT3AAJIBwABxQYaPwABxPJjEwABxQ8AATrbAAHFDSMAAcUPAAJIBwABxRsAATv7AAHFDI8AAcTyYx8AAcUmDxsAAcTyYysAAcUsAwABwe8AATwTAAHFNmMbAAHFOrPLAAHFOwABPBcAAcU7AAE8GwABxTZjEwABxUsAATrXAAHFSWMAAcVLAAE62wABxUsAAkgHAAHFWwABO/sAAcVIjwABxTZjKwABxWQDAAHB7wABPGMAAcVuYxsAAcVzAAJIBwABxXcAATxnAAHFbmMTAAHFfwABOtcAAcV9YwABxX4RewABxX5ZswABxX8AATrbAAHFfvbzAAHFfI8AAcVuYysAAcWcAAMAAkgLAAHFph+PAAHFqmMbAAHFrwACSAsAAcWyWdMAAcWqYycAAcW6vc8AAcWqYxMAAcXCvdMAAcXCqbsAAcXC8SMAAcXC8ScAAcXC3CsAAcXDAAE8hwABxcJtGwABxcJsawABxcMAATyLAAHFwtrHAAHFwtwvAAHFwwABPI8AAcXDAAE8kwABxcMAATyXAAHFwtrLAAHFwtwzAAHFwwABPJsAAcXDAAE8nwABxcMAATyjAAHFwtmnAAHFwtpPAAHFwtpTAAHFwtqfAAHFwwABPLcAAcXDAAE8uwABxcLQQwABxacAATy/AAHGLmMbAAHGMg+zAAHGMwACSAsAAcY60fMAAcY7AAE8xwABxjsAATzLAAHGLmMnAAHGSr3PAAHGLmMTAAHGUr3TAAHGUqm7AAHGUvEjAAHGUvEnAAHGUtwrAAHGUwABPIcAAcZSbGsAAcZSbRsAAcZTAAE8iwABxlLaxwABxlLcLwABxlMAATyPAAHGUwABPJMAAcZTAAE8lwABxlLaywABxlLcMwABxlMAATybAAHGUwABPJ8AAcZTAAE8owABxlLZpwABxlLaTwABxlLaUwABxlLanwABxlMAATy3AAHGUwABPLsAAcZS0EMAAcYuYysAAca8AwABxaaQVwABxsZjGwABxssAAkgLAAHGzwABPMcAAcbPAAE8ywABxs7R8wABxs7xewABxs8AAT1HAAHGzwABPUsAAcbK2usAAcbGYxMAAcbuCjMAAcbulPcAAcbvAAJICwABxvsAAT1bAAHG+wABPVMAAcb7AAE9fwABxvsAAT2HAAHG7vGjAAHG7wABPXcAAcbu8gMAAcbu8gcAAcbu8gsAAcbGYysAAccgAwABxacAAT2rAAHHKmMbAAHHLwACSAsAAcczAAE9rwABxzKqBwABxypjEwABxz8AAT2nAAHHPwACSAsAAcdHAAE9swABxypjKwABx0wDAAHFpwABPdcAAcdWYxsAAcdbAAJICwABx16qBwABx1ZjEwABx2byCwABx2cAAkgLAAHHbwABPdsAAcdWYysAAcd0AwABxacAAT3jAAHHfmMbAAHHgwACSAsAAceHAAE95wABx4ZvvwABx35jEwABx5MAAT23AAHHfmMrAAHHmAMAAcWm8O8AAceiYxMAAcenAAE9VwABx6cAAT1zAAHHpwABPWMAAcenAAE9gwABx6bNwwABx6bx4wABx6JjKwABx8ADAAHFpwABPesAAcfKYxsAAcfMnwABx88AAkgLAAHH1KMAAcfMpwABx87aLwABx87aMwABx87aNwABx8pjEwABx+yPAAHHymMrAAHH9AMAAcWnAAE97wABx/5jGwAByACfAAHIAwACSAsAAcgIowAByACnAAHIAtorAAHIAwABPfMAAcgDAAE99wAByAMAAT37AAHIAwABPf8AAcgDAAE+AwAByAMAAT4HAAHIAnYXAAHH/mMTAAHINI8AAcf+YysAAcg8AwABxacAAT4LAAHIRmMbAAHISgmvAAHIShIjAAHIStorAAHISwABPfMAAchLAAE99wAByEsAAT37AAHISwABPf8AAchLAAE+AwAByEsAAT4HAAHIRmMTAAHIcI8AAchGYysAAch4AwAByHpV/AMAAkgPAAHIhtDbAAHIimMbAAHIjs+XAAHIimMTAAHIlVsAAciWApcAAciWEXsAAciKYx8AAcimBVcAAcilhwAByIpjKwAByLADAAHIhthjAAHIumMbAAHIvq7HAAHIvpSLAAHIvwACSA8AAcjKliMAAcjLAAE+IwAByLpjHwAByNYC9wAByNbEqwAByLpjEwAByOLcqwAByOMAAT4rAAHI4wABPjcAAcjjAAE+MwAByLpjKwAByPQAAwACSBMAAcj+YxMAAckDAAE+bwAByP8AAT5rAAHJCmMTAAHJDvQzAAHJDwABGP8AAckO89cAAckPAAEY8wAByQ8AARj3AAHJDwABGPsAAckO878AAckO0o8AAckOFwMAAckO88sAAckO5BcAAckOHRMAAckO9A8AAckO9BsAAckO8+8AAckPAAEZAwAByQ7z4wAByQ58owAByQpjKwAByVgAAwACSBcAAcliYxMAAclnAAE/QwAByWaxIwAByWcAAT9HAAHJZwABP08AAcljAAE+dwAByXpjHwAByX7O3wAByX4V9wAByX6U7wAByXpjEwAByY8AATLPAAHJjwABPnsAAcmPAAEyvwAByY7N6wAByY7LewAByY8AAT5/AAHJjwABPoMAAcmOcRMAAcmPAAE+hwAByY6hYwAByY8AATYrAAHJjnEvAAHJjwABPosAAcmPAAE+jwAByY8AATnPAAHJjmUnAAHJjwABPpMAAcmPAAE+lwAByY8AAT6bAAHJjwABNi8AAcmPAAE+nwAByY8AAT6jAAHJjwABPqcAAcmPAAE+qwAByY7dBwAByY7hYwAByY8AAT6vAAHJjnELAAHJjwABPrMAAcmPAAE+twAByY8AAT67AAHJjwABPr8AAcmPAAE+wwAByXpjKwAByhQDAAHJYwABPscAAcoeYxMAAcoi4XMAAcoi4XcAAcoi4XsAAcoi4X8AAcoi4YMAAcoi3L8AAcoi3JMAAcoi3JsAAcoi3JcAAcoi4YsAAcoi4Y8AAcoi4ZMAAcoi4ZcAAcoi3LMAAcoi4ZsAAcoeYysAAcpgAwAByWMAAT7LAAHKamMfAAHKbqxPAAHKamMTAAHKdwABMrMAAcp3AAEyuwAByncAATLDAAHKdwABMssAAcp3AAEyhwAByncAATKPAAHKdwABMp8AAcp3AAEyowAByncAATKTAAHKdwABMpcAAcp3AAEymwAByncAATKnAAHKdwABMqsAAcp3AAEyrwAByna90wABympjKwAByrQDAAHJYoLLAAHKvmMbAAHKwJ8AAcrDAAJIFwABysijAAHKwKcAAcrDAAE+6wABysJkIwABysMAAT7vAAHKwwABLYcAAcrDAAE+8wABysK3dwABysMAAT73AAHKvmMTAAHK8I8AAcq+YysAAcr4AwAByWMAAT77AAHLAmMfAAHLBgmvAAHLBg/PAAHLBhGDAAHLAmMnAAHLFr3PAAHLAmMTAAHLHr3TAAHJYrVDAAHLJmMbAAHLKJ8AAcsrAAJIFwAByzCjAAHLKKcAAcsrAAE+6wAByyrTGwAByyqorwAByyZjEwABy0iPAAHLJmMrAAHLUAMAAcljAAE/DwABy1pjGwABy14PswABy14PzwABy1pjJwABy2q9zwABy1pjEwABy3K90wABy3CPAAHLWmMfAAHLfhGDAAHLfgmvAAHLWmMrAAHLiAMAAcljAAE/IwABy5JjGwABy5YPswABy5YPzwABy5YJrwABy5JjJwABy6a9zwABy5JjEwABy6690wABy6yPAAHLkmMfAAHLuhGDAAHLkmMrAAHLwAMAAcljAAE/LwABy8pjHwABy84JrwABy84PzwABy84RgwABy8pjJwABy969zwABy8pjEwABy+a90wAByWMAAT83AAHL7mMbAAHL8g+zAAHL8g/PAAHL7mMnAAHL/r3PAAHL7mMTAAHMBr3TAAHMBI8AAcvuYx8AAcwSEYMAAcwSCa8AAcvuYysAAcwcAAMAAkgbAAHMJmMTAAHMKwACSBsAAcwvAAFBtwABzCcAAT9XAAHMNmMbAAHMOtz/AAHMNmMfAAHMQesAAcxClIsAAcxClEMAAcxCxKsAAcxCzt8AAcxC3NcAAcxCFfcAAcxDAAE/WwABzEKVPwABzELczwABzDZjEwABzG8AAT4vAAHMbwABKnsAAcxvAAE/XwABzG8AAT9jAAHMbwABP2cAAcxvAAE/awABzG8AAT9zAAHMbwABP3cAAcxvAAE/ewABzG8AAT9/AAHMbwABPjcAAcxvAAE+QwABzG8AAT+DAAHMbwABP4cAAcxvAAE/jwABzG8AAT+TAAHMbwABP5cAAcxvAAE/mwABzG8AAT+fAAHMbwABP6cAAcxvAAE/rwABzG8AAT+3AAHMbwABP78AAcxvAAE/wwABzG7dPwABzG8AAT/HAAHMbwABP8sAAcxvAAE/zwABzG7dNwABzG7dOwABzG4KMwABzG4JGwABzG8AAT/TAAHMbwABP9cAAcxu4rMAAcw2YysAAcz8AwABzCcAAT/bAAHNBmMbAAHNCwABP98AAc0K7O8AAc0K3M8AAc0LAAE/4wABzQsAAT/nAAHNCwABP+sAAc0LAAE/7wABzQnrAAHNCgtLAAHNCpRDAAHNCwACSBsAAc024v8AAc03AAETKwABzQqUiwABzQqVPwABzQoV9wABzQsAAT9bAAHNCwABP/MAAc0K1hcAAc0GYx8AAc1bAAJIGwABzV6+ywABzQZjEwABzWcAAT9zAAHNZwABPkMAAc1nAAE/9wABzWcAAT/PAAHNZwABP78AAc1nAAE/gwABzWcAAT+HAAHNZt03AAHNZt07AAHNZwABP18AAc1nAAE/YwABzWcAAT9nAAHNZwABPi8AAc1nAAFAVwABzWcAAUD3AAHNZwABQJsAAc1nAAEqewABzWcAAUD/AAHNZwABQRMAAc1m9McAAc1nAAFBFwABzWcAAUDnAAHNZwABQGMAAc1nAAFAXwABzWcAAT+3AAHNZwABP38AAc1nAAE/dwABzWcAAT97AAHNZwABP8sAAc1nAAE/xwABzWcAAT/DAAHNZwABP5MAAc1nAAE/jwABzWcAAT9rAAHNZwABP6cAAc1nAAE/rwABzWcAAT+XAAHNZwABP5sAAc1nAAE/nwABzWYKMwABzWYJGwABzWcAAT43AAHNZt0/AAHNZwABP9MAAc1nAAE/1wABzWbiswABzQZjKwABziADAAHMJwABQWMAAc4qYxsAAc4vAAJIGwABzjLYjwABzipjHwABzjsAAkgbAAHOPr7LAAHOKmMTAAHORwABQWcAAc5HAAFBawABzkcAAUFvAAHORwABQXMAAc5HAAFBdwABzkcAAUF7AAHORs5TAAHORwABQX8AAc5HAAFBiwABzipjKwABzmwDAAHMJwABQY8AAc52YxsAAc56D7MAAc57AAJIGwABzoMAAUGXAAHOgwABQZsAAc6DAAFBnwABzoMAAUGjAAHOdmMnAAHOlr3PAAHOdmMTAAHOnr3TAAHOntyjAAHOntyLAAHOnwABQBcAAc6fAAFAGwABzp8AAUATAAHOntybAAHOntyXAAHOntyTAAHOnwABQAsAAc6e3I8AAc52YysAAc7MAwABzs5V/AMAAkgfAAHO2mMTAAHO3wABRD8AAc7bAAFBvwABzuZjGwABzuoPswABzurdkwABzurdlwABzurdowABzuZjJwABzv69zwABzuZjEwABzwbdjwABzwUjAAHPBwACSB8AAc8TAAFBxwABzwSPAAHO5mMfAAHPHt2fAAHPHltnAAHPHg8bAAHPHtSbAAHO5mMrAAHPMAMAAc7bAAFB0wABzzpjEwABzz8AARwjAAHPPt3HAAHPPt3DAAHPOmMrAAHPTAMAAc7bAAFB1wABz1ZjHwABz1rUmwABz1rdnwABz1pbZwABz1ZjKwABz2gDAAHO2wABQdsAAc9yYxsAAc923ZMAAc923ZsAAc93AAEbxwABz3JjEwABz4cAAUHfAAHPhI8AAc9yYysAAc+QAwABztsAAUH7AAHPmmMTAAHPnS8AAc+aYysAAc+kAwABztsAAUH/AAHPrmMbAAHPswACSB8AAc+3AAFCAwABz65jEwABz78AAUIHAAHPvwABQgsAAc+9LwABz65jKwABz8wDAAHO2wABQhMAAc/WYxsAAc/YnwABz9sAAkgfAAHP4KMAAc/YpwABz9sAAUIfAAHP2wABQiMAAc/WYxMAAc/0jwABz9ZjKwABz/wDAAHO2wABQicAAdAGYxsAAdAInwAB0AsAAkgfAAHQEKMAAdAIpwAB0AsAAUIfAAHQCwABQisAAdALAAFCLwAB0AZjEwAB0CiPAAHQBmMrAAHQMAMAAc7bAAFCMwAB0DpjGwAB0D7QSwAB0D8AAUI7AAHQPuN/AAHQPwABQj8AAdA/AAFCQwAB0D8AAUJHAAHQOmMTAAHQWwABHCcAAdBbAAEbywAB0DpjKwAB0GQDAAHO2wABQlcAAdBuYxsAAdBy438AAdBuYxMAAdB6awsAAdB7AAEb3wAB0HoYjwAB0HrEMwAB0HrEIwAB0HrEJwAB0G5jKwAB0JQDAAHO2wABQl8AAdCeYx8AAdCi438AAdCeYxMAAdCrAAFCYwAB0J5jKwAB0LADAAHO2wABQmcAAdC6Yx8AAdC+438AAdC6YxMAAdDHAAFCYwAB0LpjKwAB0MwDAAHO2wABQmsAAdDWYxsAAdDbAAFCTwAB0NrjfwAB0NsAAkgfAAHQ5wABQm8AAdDWYxMAAdDvAAFCcwAB0O4cvwAB0NZjKwAB0PgDAAHO2wABQpMAAdECYx8AAdEG438AAdECYxMAAdEPAAFCYwAB0QJjKwAB0RQDAAHO2wABQpcAAdEeYxsAAdEjAAFCTwAB0SLjfwAB0R5jEwAB0S8AAUJzAAHRHmMrAAHRNAMAAc7bAAFC6wAB0T5jGwAB0UIPzwAB0UMAAULvAAHRQwABQqMAAdE+YxMAAdFTAAFC8wAB0T5jKwAB0VgDAAHO2wABQwMAAdFiYxsAAdFnAAFDBwAB0WcAAUMLAAHRZwABQw8AAdFiYx8AAdF2AlsAAdFiYxMAAdF8jwAB0WJjKwAB0YQDAAHO2wABQx8AAdGOYxsAAdGQnwAB0ZMAAkgfAAHRmKMAAdGQpwAB0ZMAAUM3AAHRkwABQzsAAdGSdVcAAdGSdacAAdGSdVMAAdGOYxMAAdG4jwAB0Y5jKwAB0cADAAHO2wABQz8AAdHKYxsAAdHMnwAB0c8AAkgfAAHR1KMAAdHMpwAB0c8AAUNDAAHRzwABQ0cAAdHO7jcAAdHOdesAAdHPAAFDSwAB0c52EwAB0c51TwAB0c51YwAB0c52NwAB0c8AAUNPAAHRzwABQ1MAAdHPAAFDVwAB0c8AAUNbAAHRzwABQ18AAdHPAAFDYwAB0c8AAUNnAAHRzwABQ2sAAdHPAAFDbwAB0cpjEwAB0iiPAAHRymMrAAHSMAMAAc7bAAFDcwAB0jpjEwAB0j8AAUN3AAHSPwABQ3sAAdI/AAFDfwAB0j8AAUODAAHSPwABQnMAAdI6YysAAdJUAwABztsAAUOHAAHSXmMbAAHSYwABQ4sAAdJi438AAdJjAAFDjwAB0mMAAQBTAAHSYwABQwcAAdJjAAFDDwAB0mMAAUOTAAHSYwABQ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AHZJwABRXMAAdknAAFFdwAB2ScAAUVLAAHZJVsAAdknAAFFbwAB2Q5jKwAB2UQAAwACSC8AAdlPAAFFjwAB2VJjGwAB2VYC9wAB2VJjEwAB2V8AAUWTAAHZXwABRZcAAdlSYx8AAdlq1JcAAdlSYysAAdlwAwAB2U8AAUWbAAHZemMfAAHZftSXAAHZemMTAAHZhwABRZcAAdl6YysAAdmMAwAB2U8AAUWnAAHZlmMfAAHZmtSXAAHZlmMTAAHZowABRZcAAdmWYysAAdmoAwAB2U8AAUWrAAHZsmMfAAHZttSXAAHZsmMTAAHZvwABRZcAAdmyYysAAdnEAwAB2U8AAUWvAAHZzmMfAAHZ0tSXAAHZzmMTAAHZ2wABRZcAAdnOYysAAdngAwAB2U8AAUWzAAHZ6mMfAAHZ7tSXAAHZ6mMTAAHZ9wABRZcAAdnqYysAAdn8AwAB2U8AAUW3AAHaBmMbAAHaCwABRbsAAdoLAAFGPwAB2gZjEwAB2hcAAUZDAAHaFwABRlMAAdoXAAFGSwAB2hcAAUZXAAHaBmMrAAHaKAADAAJIMwAB2jJjFwAB2jcAAUaHAAHaNwABRosAAdoyYxMAAdpDAAJIMwAB2kcAAUizAAHaMwABRo8AAdpOYx8AAdpTAAFGkwAB2lJv3wAB2k5jKwAB2lwDAAHaMwABRpcAAdpmYxsAAdprAAJIMwAB2m8AAUabAAHabwABRp8AAdpmYx8AAdp7AAFGkwAB2npv3wAB2mZjKwAB2oQDAAHaMwABRqMAAdqOYxMAAdqSvosAAdqSvp8AAdqTAAFGpwAB2o5jHwAB2qLgkwAB2o5jKwAB2qgDAAHaMwABRqsAAdqyYxsAAdq3AAJIMwAB2rrYjwAB2rsAAUavAAHatuCTAAHasmMfAAHaywACSDMAAdrOvssAAdqyYxMAAdrWvosAAdrWvp8AAdrXAAFGpwAB2tcAAUbPAAHa1wABRtcAAdqyYysAAdrsAwAB2jMAAUbbAAHa9mMfAAHa+wACSDMAAdr+2I8AAdr/AAFGxwAB2v6+ywAB2v8AAUbfAAHa/wABRuMAAdr2YxMAAdsXAAJIMwAB2xsAAUbLAAHbFwABRzcAAdsXAAFG/wAB2xcAAUdHAAHbFwABRwMAAdr2YysAAdswAwAB2jMAAUdPAAHbOmMbAAHbPwACSDMAAdtC2I8AAdtDAAFGxwAB2zpjKwAB20wDAAHaMwABR1MAAdtWYxMAAdtbAAFHVwAB21sAARhHAAHbWwABR3sAAdtWYx8AAdtrAAFHXwAB22sAAUdjAAHbawABR2cAAdtrAAFHawAB22sAAUdvAAHbat93AAHbVmMrAAHbhAMAAdozAAFHfwAB245jGwAB25MAAkgzAAHblwABRq8AAduXAAFHgwAB25cAASv7AAHbkwABRpMAAduOYx8AAduqb98AAduOYysAAduwAwAB2jMAAUeHAAHbumMfAAHbvwACSDMAAdvC2I8AAdvDAAFGxwAB28K+ywAB28MAAUbfAAHbwwABRuMAAdu6YxMAAdvbAAJIMwAB298AAUbLAAHb2wABRzcAAdvbAAFG/wAB29sAAUdHAAHb2wABRwMAAdu6YysAAdv0AwAB2jMAAUeLAAHb/mMbAAHcAwACSDMAAdwG2I8AAdwGvhcAAdwDAAFHjwAB3AMAAUeTAAHcAwABR5cAAdwC4JMAAdwDAAFHmwAB2/5jHwAB3CcAAkgzAAHcKtHzAAHcKr7LAAHcKwABRuMAAdwrAAFGxwAB2/5jEwAB3D6+iwAB3D6+nwAB3D8AAUanAAHb/mMrAAHcTAMAAdozAAFH5wAB3FZjGwAB3FsAAkgzAAHcXr7LAAHcXwABR+sAAdxfAAFG4wAB3FrO3wAB3FrfdwAB3FZjHwAB3HcAAUdfAAHcdwABR2MAAdx3AAFHZwAB3HcAAUdrAAHcdwABR28AAdxWYxMAAdyPAAEYRwAB3I8AAUfvAAHcjwABR/MAAdyPAAFHVwAB3I8AAUd7AAHcVmMrAAHcpAMAAdozAAEcQwAB3K5jHwAB3LMAASTTAAHcswABJNsAAdyzAAEk6wAB3LMAASTzAAHcswABJPsAAdyzAAElAwAB3LMAASULAAHcswABJOMAAdyzAAElEwAB3LMAASUbAAHcrmMrAAHc3AMAAdozAAFIEwAB3OZjGwAB3OsAAkgzAAHc7wABSBcAAdzvAAEhSwAB3OsAAUdzAAHc6wABR3cAAdzrAAFIGwAB3OsAAROTAAHc5mMTAAHdCwABGEcAAd0LAAFIJwAB3QsAAUgrAAHdCwABSC8AAd0LAAFINwAB3QprCwAB3QrSDwAB3QrSCwAB3QoaEwAB3QsAAUd7AAHdChozAAHdCh0TAAHdChpLAAHdChobAAHdChpzAAHdCtH3AAHc5mMfAAHdTwABR18AAd1PAAFHYwAB3U8AAUdnAAHdTwABR2sAAd1PAAFHbwAB3OZjKwAB3WQDAAHaMwABSGsAAd1uYxsAAd1yAq8AAd1uYxMAAd15LwAB3XoC/wAB3XiPAAHdbmMfAAHdihIjAAHdbmMrAAHdkAMAAdozAAFIcwAB3ZpjGwAB3Z4SIwAB3ZpjEwAB3aYSXwAB3acAAUh3AAHdpwABR0MAAd2mGnMAAd2mGjMAAd2mGksAAd2aYysAAd3AAwAB2jMAAUh/AAHdymMbAAHdzhIjAAHdymMTAAHd1wABSHcAAd3XAAFHQwAB3dYacwAB3dYaMwAB3dYaSwAB3cpjKwAB3ewDAAHaMwABSIMAAd32YxsAAd34nwAB3fsAAkgzAAHeAKMAAd34pwAB3frsGwAB3fsAAUiHAAHd+wABSIsAAd36zRsAAd32YxMAAd4cjwAB3fZjKwAB3iQDAAHaMwABSI8AAd4uYxsAAd4zAAJIMwAB3jcAAUiTAAHeMwABR7cAAd4zAAFIlwAB3jMAAUibAAHeLmMTAAHeSnyjAAHeSwABSJ8AAd5LAAFIpwAB3ksAARbnAAHeStIPAAHeShozAAHeShpLAAHeShpzAAHeStILAAHeLmMrAAHecAMAAdozAAE44wAB3npjGwAB3n5WjwAB3n8AAUa7AAHefwABRr8AAd5+F08AAd5/AAFGwwAB3n7NGwAB3n4VKwAB3npjHwAB3p7mNwAB3npjEwAB3qSPAAHeemMrAAHerAADAAJINwAB3rcAAUjDAAHeumMbAAHevwABSLsAAd6+t4cAAd6/AAFItwAB3rpjKwAB3swDAAHetwABRmcAAd7WYxsAAd7aZ+sAAd7bAAFHBwAB3toTxwAB3toPGwAB3tsAAkg3AAHe7wABSMcAAd7WYxMAAd70jwAB3tZjKwAB3vwDAAHetwABSNcAAd8GYxsAAd8LAAJINwAB3w6qBwAB3woVKwAB3wZjEwAB3xlbAAHfGS8AAd8YjwAB3wZjHwAB3ysAAUbzAAHfBmMrAAHfMAMAAd8yFrsAAd63AAFI3wAB3z5jEwAB30EvAAHfPmMfAAHfShIjAAHfPmMrAAHfUAMAAd62VfMAAd9aYxsAAd9e3K8AAd9ezNsAAd9dbwAB315q7wAB312HAAHfWmMfAAHfdwABKqcAAd9aYxMAAd98jwAB31pjKwAB34cAAUjjAAHfhg2HAAHfhgm7AAHfhwABSOcAAd63AAFI/wAB35pjEwAB358AAUb/AAHfnwABR0cAAd+fAAFHNwAB358AAUkDAAHfmmMrAAHfsAADAAJIOwAB37sAAUkLAAHfvmMbAAHfwwABGFMAAd/CircAAd++YysAAd/MAwAB37rgNwAB39ZjEwAB39sAAUkPAAHf2wABGFcAAd/bAAFJFwAB39sAAUkbAAHf2wABSScAAd/bAAFJKwAB39ZjKwAB3/QDAAHfuuA7AAHf/mMbAAHgAwACSDsAAeAG2I8AAeAHAAFJLwAB4AcAASFLAAHgBr7LAAHgBwABRuMAAeACzt8AAd/+YxMAAeAjAAFJDwAB4CMAARhXAAHgIwABSRcAAeAjAAFJGwAB4CMAAUknAAHgIwABSSsAAd/+YysAAeA8AwAB37sAAUlDAAHgRmMbAAHgSwACSDsAAeBPAAFJRwAB4E8AAREfAAHgTwABSUsAAeBPAAFJTwAB4E8AAUlTAAHgTwABSVcAAeBLAAFJOwAB4EsAAUkzAAHgSwABE5MAAeBKircAAeBGYx8AAeB7AAJIOwAB4H7YjwAB4H8AASFLAAHgfwABSS8AAeBGYxMAAeCPAAJIOwAB4JMAAUlbAAHgkpKzAAHgkwABSWMAAeCTAAFJZwAB4JMAAUlfAAHgkwABSWsAAeCTAAFJbwAB4JMAAUlzAAHgkwABSXcAAeCTAAFJewAB4I4KfwAB4I5rCwAB4I7SDwAB4I7SCwAB4I4aEwAB4I4aMwAB4I4aSwAB4I4aGwAB4I4acwAB4I7R9wAB4EZjKwAB4OQDAAHfuwABSYMAAeDuYxsAAeDzAAJIOwAB4PcAAUmHAAHg9wABSYsAAeD2pxMAAeDuYx8AAeEGBVcAAeDuYysAAeEMAwAB37sAAUmPAAHhFmMbAAHhGwACSDsAAeEfAAFJkwAB4RZjEwAB4SVbAAHhFmMrAAHhLAMAAeEuFrsAAd+7AAFJmwAB4TpjGwAB4T8AAkg7AAHhQvFjAAHhQwABER8AAeFDAAFJnwAB4UMAAUmjAAHhQwABSasAAeFDAAFJrwAB4UMAAUmzAAHhQwABSbcAAeFDAAFJuwAB4UMAAUm/AAHhOmMfAAHhbwACSDsAAeFy0fMAAeFycDMAAeE6YxMAAeF/AAJIOwAB4YMAAUnDAAHhgwABSccAAeGDAAFJywAB4YMAAUnXAAHhgwABSeMAAeGDAAFJ5wAB4YMAAUnvAAHhgwABSfMAAeF/AAFJ0wAB4TpjKwAB4agAAwACSD8AAeGy47cAAeG2YxsAAeG6D7MAAeG7AAFJ/wAB4bsAAUoDAAHhuwABSgcAAeG7AAFKCwAB4bsAAUoPAAHhuwABShMAAeG7AAFKFwAB4bsAAUobAAHhuwACSD8AAeHjAAFKHwAB4bZjJwAB4eq9zwAB4bZjEwAB4fK90wAB4fEjAAHh8wACSD8AAeH/AAFKKwAB4f8AAUovAAHh/wABSjMAAeHzAAFKNwAB4fMAAUo7AAHh8ue/AAHh8ufDAAHh8t/rAAHh8um7AAHh8t/vAAHh8um/AAHh8wABSj8AAeHy66sAAeHzAAEqXwAB4fLr2wAB4fMAASpHAAHh8wABSkMAAeHzAAFKRwAB4fLr7wAB4fMAASpXAAHh8uv7AAHh8wABKjcAAeHzAAFKSwAB4fMAAUpPAAHh8t/jAAHh8wABKlsAAeHy3+cAAeHzAAEqPwAB4fMAAUpTAAHh8wABSlcAAeHzAAFKWwAB4fFbAAHh8wABKnMAAeHyDHMAAeHwjwAB4bZjHwAB4o4PGwAB4o4SDwAB4bZjKwAB4pgDAAHimha7AAHimwABSiMAAeGzAAFKfwAB4qpjGwAB4q8AAkg/AAHiswABSoMAAeKy378AAeKzAAFKhwAB4rMAAUqLAAHiqmMTAAHixt/nAAHixt/jAAHixuvbAAHixuurAAHixwABP/sAAeLG3+sAAeLG62MAAeLFWwAB4sSPAAHiqmMfAAHi7tMHAAHi7uAjAAHi7gmrAAHiqmMrAAHi/AMAAeL/AAFKjAMAAkhDAAHjCmMTAAHjDwABStsAAeMK4DMAAeMWYxsAAeMbAAJIQwAB4x7hLwAB4xZjEwAB4ybdvwAB4xZjKwAB4ywDAAHjCwABSqcAAeM2YxsAAeM7AAJIQwAB4z7gSwAB4z8AAUqDAAHjPKMAAeM63aMAAeM2YxMAAeNTAAJIQwAB41cAAUqvAAHjVwABSrcAAeNXAAFKvwAB41cAAUrDAAHjVwABSscAAeNXAAFKywAB41cAAUrPAAHjVwABSrsAAeNS3c8AAeNS3lsAAeNS3lcAAeNS3lMAAeNS3k8AAeNS3kcAAeNS3ksAAeNS3j8AAeNS3kMAAeNS3jsAAeNS3jcAAeNS3jMAAeNS3i8AAeNS3isAAeNS3icAAeNS3iMAAeNS3h8AAeNS3gsAAeNS3g8AAeNS3hMAAeNS3hcAAeNS3hsAAeNSjfMAAeNS3gMAAeNS3gcAAeNS3f8AAeNS3fsAAeNS3fcAAeNS3e8AAeNS3fMAAeNS3esAAeNS3ecAAeNS3eMAAeNS3d8AAeNS3l8AAeNS3dsAAeNS3dMAAeNS3dcAAeNS3mMAAeM2YysAAeQUAwAB5BcAAUqrAAHjCwABStcAAeQiYxsAAeQmDYsAAeQm3nMAAeQm3m8AAeQiYysAAeQ0AwAB5DbeqAMAAkhHAAHkQwABSvMAAeRGYxMAAeRLAAEcIwAB5EZjKwAB5FADAAHkQwABSvsAAeRaYxMAAeRfAAFCWwAB5FpjKwAB5GQDAAHkQwABSv8AAeRuYxMAAeRzAAEbwwAB5HMAARvLAAHkbmMrAAHkfAMAAeRDAAFLAwAB5IZjEwAB5IsAAUJTAAHkhmMrAAHkkAMAAeRDAAFLBwAB5JpjGwAB5J4NrwAB5JpjEwAB5KcAAUJTAAHkmmMrAAHkrAMAAeRDAAFLCwAB5LZjEwAB5LsAATK3AAHkuwABQo8AAeS7AAFCiwAB5LZjKwAB5MgDAAHkQwABSw8AAeTSYxsAAeTW3Z8AAeTSYxMAAeTfAAEytwAB5N8AAUKPAAHk3wABQosAAeTSYysAAeTsAwAB5EMAAUsTAAHk9mMTAAHk+wABHCcAAeT2YysAAeUAAAMAAkhLAAHlCwABSxsAAeUOYxsAAeUQnwAB5RMAAkhLAAHlGKMAAeUQpwAB5RMAAUsnAAHlEwABSysAAeUOYxMAAeUsjwAB5Q5jKwAB5TQDAAHlCwABSy8AAeU+YxsAAeVCvisAAeVDAAFLMwAB5UK+JwAB5ULpCwAB5ULu9wAB5UMAAUs3AAHlQwABSzsAAeVDAAJISwAB5WMAAUs/AAHlPmMfAAHlawABS0MAAeU+YxMAAeVzAAFLRwAB5XLTXwAB5T5jKwAB5XwDAAHlCwABS1MAAeWGYxsAAeWLAAJISwAB5Y7R8wAB5Y8AAUtXAAHljwABS1sAAeWPAAFLXwAB5Y8AAUtjAAHljwABS2cAAeWPAAFLawAB5Y8AAUtvAAHljwABS3MAAeWPAAFLdwAB5Y8AAUt7AAHljwABS38AAeWPAAFLgwAB5Y8AAUuHAAHljwABS4sAAeWPAAFLjwAB5Y8AAUuTAAHljwABS5cAAeWPAAFLmwAB5Y8AAUufAAHljwABS6MAAeWPAAFLpwAB5Y8AAUurAAHljwABS68AAeWPAAFLswAB5Y8AAUu3AAHljwABS7sAAeWPAAFLvwAB5Y8AAUvDAAHljwABS8cAAeWPAAFLywAB5Y8AAUvPAAHljwABS9MAAeWPAAFL1wAB5Y8AAUvbAAHljwABS98AAeWPAAFL4wAB5Y8AAUvnAAHljwABS+sAAeWPAAFL7wAB5Y8AAUvzAAHljwABS/cAAeWPAAFL+wAB5Y8AAUv/AAHljwABTAMAAeWPAAFMBwAB5Y8AAUwLAAHljwABTA8AAeWOcGsAAeWOcFcAAeWOcFMAAeWOyoMAAeWPAAFMEwAB5Y7JywAB5Y7J3wAB5Y7KfwAB5Y8AAUwXAAHljwABTBsAAeWPAAFMHwAB5Y8AAUwjAAHljwABTCcAAeWPAAFMKwAB5Y8AAUwvAAHljwABTDMAAeWPAAFMNwAB5Y8AAUw7AAHljwABTD8AAeWPAAFMQwAB5Y8AAUxHAAHlhmMfAAHmpsgLAAHmpsgDAAHmpwABTFMAAeanAAFMVwAB5qcAAUxbAAHmpwABTF8AAeanAAFMYwAB5qcAAUxnAAHmpshDAAHmpwABN1MAAeamyDsAAeanAAFMfwAB5qcAAUyDAAHmpwABTIcAAeanAAFMiwAB5qcAAUyPAAHmprabAAHmpwABTE8AAeamx8sAAeamx88AAeanAAFMkwAB5qcAAUynAAHmpwABTKsAAeanAAFMrwAB5qcAAUyzAAHmpwABTLcAAeanAAFMuwAB5qcAAUy/AAHmpwABTMMAAeanAAFMywAB5qcAAUzTAAHmpwABTNcAAeanAAFM2wAB5qcAAUzfAAHmpwABTOMAAeanAAFM5wAB5qbM7wAB5qcAAUzrAAHmps0bAAHmpwABTO8AAeanAAFM8wAB5qcAAUz3AAHmprdjAAHmpwABTP8AAeanAAFNAwAB5qcAAU0HAAHmpwABRjMAAeanAAFNCwAB5qcAAU0PAAHmptMbAAHmpwABTRMAAeanAAFNFwAB5qcAAU0bAAHmpmwrAAHmpmw/AAHmpmw7AAHmpsdHAAHmpwABTR8AAeamxmMAAeamxncAAeamx0MAAeanAAFNIwAB5qcAAU0nAAHmpsezAAHmpsy/AAHmpwABTSsAAeanAAFNLwAB5qcAAU0zAAHmprp3AAHmpwABTTcAAeamwEMAAeanAAFNOwAB5qcAAU1DAAHlhmMTAAHnzwACSEsAAefTAAFMlwAB59MAAUxzAAHn0wABTGsAAefPAAFNPwAB588AAUxLAAHlhmMrAAHn6AADAAJITwAB5/MAAU1PAAHn9mMbAAHn+wACSE8AAef+yZMAAef+vssAAef+0fMAAef/AAFNUwAB5/8AAU1XAAHn/wABRuMAAef/AAFNWwAB5/8AAU1fAAHn/wABTWMAAef/AAFNZwAB5/ZjEwAB6CrU+wAB6CrU9wAB6CsAAkhPAAHoNwABTW8AAeg3AAFNdwAB6DcAAU2DAAHoNwABTYcAAeg3AAFNiwAB6DcAAU2TAAHoKtTnAAHoKtUHAAHoKtULAAHoKtUTAAHoKtUDAAHoKtT/AAHoKtTzAAHoKr7bAAHoKn17AAHn9mMrAAHodAADAAJIUwAB6H8AAU2XAAHogmMbAAHohwACSFMAAeiLAAEhSwAB6Iq+ywAB6IrR8wAB6IJjHwAB6JljAAHogmMTAAHoor7bAAHoor7nAAHoohEbAAHogmMrAAHosAMAAeh/AAFNnwAB6LpjGwAB6L1jAAHoumMTAAHoxwABTasAAei6YysAAejMAwAB6H8AAU2zAAHo1mMbAAHo2WMAAejWYxMAAejjAAFNjwAB6OMAAU27AAHo4hOTAAHo1mMfAAHo8wABTbcAAejWYysAAej4AwAB6H8AAU3HAAHpAmMbAAHpBwACSFMAAekKvssAAekK0fMAAekLAAEhSwAB6Qrh1wAB6QcAAU3LAAHpBtYbAAHpBu73AAHpBwABTa8AAekHAAFNpwAB6QcAAU2bAAHpBwABTb8AAekCYxMAAek6ERsAAek7AAJIUwAB6UMAAU3bAAHpOwABTcMAAekCYysAAelMAAMAAkhXAAHpVwABTesAAelaYxsAAelfAAJIVwAB6WK+ywAB6WLR8wAB6WMAAU1TAAHpYuG7AAHpYuHbAAHpYuHXAAHpYuHfAAHpYvFrAAHpYvF3AAHpYtVPAAHpWmMTAAHpjuLXAAHpjwABTfsAAelaYysAAemYAwAB6VcAAU4/AAHpomMbAAHppwACSFcAAemq2I8AAemqvssAAemq0fMAAemrAAFNUwAB6asAASFLAAHpqwABTVcAAemrAAFG4wAB6argUwAB6argVwAB6arvGwAB6argYwAB6asAAREbAAHpomMTAAHp3wABTkMAAene4QcAAemiYysAAenoAAMAAkhbAAHp8vKjAAHp9mMbAAHp+wACSFsAAen+WdMAAen2YycAAeoGvc8AAen2YxMAAeoOvdMAAeoO6ccAAeoPAAFOTwAB6g8AAU5TAAHqDwABTlcAAeoPAAFOWwAB6g8AAU5fAAHqDwABTmMAAeoPAAFOZwAB6g8AAU5rAAHqDwABTm8AAen2Yx8AAeo+67cAAeny8OMAAepGYxMAAepLAAFOcwAB6ksAAU53AAHqSgozAAHqRmMrAAHqWAMAAenzAAFOewAB6mJjGwAB6mYPswAB6mcAAkhbAAHqbwABIUsAAepu0fMAAepvAAFOiwAB6m8AAU6PAAHqbwABTpMAAepnAAFOgwAB6mbrtwAB6mcAAU6HAAHqYmMnAAHqkr3PAAHqYmMTAAHqmr3TAAHqmwABTk8AAeqbAAFOUwAB6psAAU5XAAHqmwABTlsAAeqbAAFOXwAB6psAAU5jAAHqmwACSFsAAeq7AAFOmwAB6psAAU5rAAHqmwABTqMAAeqa6ccAAeqbAAFOZwAB6psAAU5vAAHqYmMrAAHq1AMAAenzAAFOpwAB6t5jGwAB6uMAAkhbAAHq5wABIUsAAermvssAAerm0fMAAernAAFOqwAB6ucAAU6vAAHq5wABTrMAAereYxMAAesCCjMAAesDAAFOdwAB6wMAAU5zAAHq3mMrAAHrEAMAAeny7r8AAesaYxsAAesfAAJIWwAB6yMAAU63AAHrItHzAAHrIwABIUsAAesiviMAAesivgsAAesaYx8AAes6vfcAAes6veMAAesaYxMAAetGvq8AAetGvpMAAesaYysAAetQAwAB6fMAAU6/AAHrWmMbAAHrXpTTAAHrXg9bAAHrXhIjAAHrWmMTAAHrbI8AAetaYysAAet0AwAB6fMAAU7LAAHrfmMbAAHrgg9bAAHrghIjAAHrfmMTAAHrjI8AAet+YysAAeuUAAMAAkhcAwACSGMAAeujAAFO2wAB66ZjEwAB66sAAU1zAAHrqwABTXsAAeuqvqMAAeuqfXsAAeumYx8AAeu/AAFORwAB66ZjKwAB68QDAAHrowABTuMAAevOYxsAAevTAAJIYwAB69cAAU7nAAHr1wABTusAAevXAAFO7wAB69bJkwAB69a+ywAB69bxYwAB69bR8wAB685jHwAB6/cAAU5HAAHr9wABTvMAAevOYxMAAewDAAFNcwAB7AMAAkhjAAHsCwABTvcAAewLAAFO+wAB7AsAAU8HAAHsCwABTxsAAewLAAFPIwAB7AK+owAB7AJ9ewAB685jKwAB7CgDAAHrouGvAAHsMmMbAAHsNwACSGMAAew7AAFPKwAB7DsAAU8vAAHsMmMfAAHsRwABTzMAAexHAAFPNwAB7Ebg2wAB7DJjEwAB7FcAAU17AAHsVn17AAHsMmMrAAHsYAMAAeujAAFPTwAB7GpjGwAB7G8AAkhjAAHscwABER8AAexzAAFPLwAB7HMAASFLAAHscwABT1MAAexqYxMAAeyHAAFNewAB7IcAAkhjAAHsjwABTvcAAeyPAAFPWwAB7IZ9ewAB7GpjKwAB7JwAAwACSGcAAeynAAFPbwAB7KpjGwAB7K4RXwAB7K4JqwAB7K4VjwAB7K8AATIzAAHsrwABT3MAAeyvAAFPdwAB7K8AARgjAAHsrwABT3sAAeyqYysAAezQAwAB7KcAAU9/AAHs2mMbAAHs3pGHAAHs3wACSGcAAeznAAFPgwAB7OcAAREfAAHs5uBXAAHs5wABT5cAAeznAAFPmwAB7OcAAU+fAAHs5wABT6MAAeznAAFPpwAB7OcAAU+rAAHs5wABT68AAezm4U8AAezm4EsAAeznAAFPswAB7OcAAU+3AAHs5wABT7sAAeznAAFPvwAB7OcAAU/DAAHs5wABT8cAAeznAAFPywAB7OcAAU/PAAHs5uFTAAHs5uFXAAHs5iODAAHs5wABT9cAAeznAAFP4wAB7N8AAU+HAAHs3oSDAAHs3wABT4sAAezfAAFPjwAB7N3rAAHs3pRDAAHs3wABT5MAAezelIsAAeze4VsAAezelUsAAezfAAFP0wAB7N8AAU/bAAHs3mrvAAHs3wABT98AAezaYx8AAe2HAAJIZwAB7YsAAU/vAAHtiwABT/MAAe2K0fMAAe2KvssAAe2K4eMAAe2LAAFP9wAB7YsAAU/rAAHtiwABT/sAAe2LAAEhSwAB7YsAAU63AAHtiwABRuMAAe2LAAFP/wAB7YsAAVhXAAHthhX3AAHthXsAAe2Glo8AAezaYxMAAe3OhEcAAe3OhFMAAe3PAAFQAwAB7c7lQwAB7c6VtwAB7c4KMwAB7c8AAkhnAAHt6wABUAcAAe3rAAFQIwAB7esAAVAnAAHt6wABUDcAAe3rAAFQOwAB7esAAVBTAAHt6wABUFcAAe3rAAFQXwAB7esAAU/nAAHt6wABUGcAAe3rAAFQnwAB7esAAVBvAAHt6wABUHcAAe3rAAFQvwAB7esAAVDbAAHt6wABUPMAAe3rAAFQfwAB7esAAVFXAAHt6wABUU8AAe3rAAFRLwAB7esAAVFfAAHt6wABUWcAAe3rAAFRcwAB7esAAVEDAAHt6wABUZcAAe3rAAFRgwAB7esAAVF/AAHt6wABUasAAe3rAAFQlwAB7esAAVCTAAHt6wABUIMAAe3rAAFQcwAB7esAAVHbAAHt6wABUb8AAe3rAAFQmwAB7esAAVHnAAHt6wABUesAAe3rAAFR9wAB7esAAVBrAAHt6wABURcAAe3rAAFRHwAB7esAAVHDAAHt6wABULMAAe3rAAFQzwAB7esAAVKbAAHt6wABUp8AAe3rAAFSlwAB7esAAVAzAAHt6wABUccAAe3rAAFTjwAB7esAAVN/AAHt6wABU5cAAe3rAAFTswAB7esAAVPPAAHt6wABU9MAAe3rAAFT1wAB7esAAVPHAAHt6wABU8sAAe3rAAFT5wAB7esAAVQjAAHt6wABVDMAAe3rAAFUcwAB7esAAVR7AAHt6wABVH8AAe3rAAFUhwAB7esAAVSLAAHt6wABVJMAAe3rAAFUlwAB7esAAVSbAAHt6wABVJ8AAe3rAAFSzwAB7esAAVJTAAHt6wABVKsAAe3rAAFUpwAB7esAAVSjAAHt6wABVUMAAe3rAAFVfwAB7esAAVXLAAHt6wABVPMAAe3rAAFU+wAB7esAAVUDAAHt6wABVQsAAe3rAAFVEwAB7esAAVX3AAHt6wABVe8AAe3rAAFVFwAB7esAAVUbAAHt6wABVg8AAe3rAAFWFwAB7esAAVUjAAHt6wABVSsAAe3rAAFVMwAB7esAAVU7AAHt6wABVO8AAe3rAAFVPwAB7esAAVI7AAHt6wABUscAAe3rAAFWswAB7esAAVTnAAHt6wABVwcAAe3rAAFUawAB7esAAVRvAAHt6wABUhsAAe3qyuMAAe3rAAFXPwAB7esAAVdbAAHt6wABV0cAAe3rAAFScwAB7esAAVFLAAHt6wABV9MAAe3rAAFX5wAB7esAAVD7AAHt6wABV9cAAe3rAAFYDwAB7esAAVffAAHt6wABWC8AAe3rAAFX4wAB7esAAVJ7AAHt6wABV9sAAe3rAAFYRwAB7esAAVhLAAHt6wABV8MAAe3rAAFXmwAB7esAAVJXAAHtzuqvAAHtzwABUAsAAe3PAAFQDwAB7c1bAAHtzwABUBcAAe3PAAFQGwAB7c8AAVAfAAHtzotvAAHtzwABUNMAAe3OYAsAAe3OGIcAAe3OGHsAAe3OGJ8AAe3OGLMAAe3OGI8AAe3OGFsAAe3OGTsAAe3OGPMAAe3OGQMAAe3OGNsAAe3OGOMAAe3OGTMAAe3OF7sAAe3OGMMAAe3PAAFTmwAB7c4Y0wAB7c4YywAB7c4ZKwAB7c4ZDwAB7c4XNwAB7c4XIwAB7c4XzwAB7c4X2wAB7c4X4wAB7c4XxwAB7c4X9wAB7c4X6wAB7c4YHwAB7c4YJwAB7c4YLwAB7c4YNwAB7c4X/wAB7c4WqwAB7c4WswAB7c4WYwAB7c4WLwAB7c4WawAB7c4WcwAB7c4WewAB7c4WgwAB7c4WowAB7c4WNwAB7c4ZnwAB7c4YZwAB7c4YbwAB7c4W6wAB7c4VwwAB7c4ZpwAB7c4YTwAB7c4XAwAB7c4W2wAB7c4WmwAB7c4W4wAB7c4W8wAB7c4XqwAB7c4YFwAB7c4ZewAB7c4YQwAB7c4YDwAB7c4YBwAB7c4XDwAB7c4XRwAB7c4ZRwAB7c4ZYwAB7NpjIwAB8QV7AAHs2mMrAAHxDAMAAeynAAFYYwAB8RZjGwAB8RsAAVEjAAHxGhePAAHxGwABUWMAAfEWYysAAfEoAwAB7KcAAVhnAAHxMmMbAAHxNgm7AAHxNwABWDcAAfE3AAFYPwAB8TcAAVhDAAHxNwABWDMAAfE3AAFYOwAB8TcAAVhbAAHxMmMTAAHxVI8AAfEyYysAAfFcAwAB7KcAAVhzAAHxZmMbAAHxawABWHcAAfFrAAFYewAB8WsAAVh/AAHxawABWIMAAfFrAAFYhwAB8WsAAViLAAHxawABWI8AAfFrAAFYkwAB8WsAAViXAAHxawABWJsAAfFrAAFYnwAB8WoHtwAB8WsAAVijAAHxawABU0cAAfFrAAFYpwAB8WsAAVirAAHxawABWK8AAfFmYxMAAfGzAAJIZwAB8bcAAVizAAHxtwABWLsAAfG3AAFYwwAB8bMAAVLfAAHxswABUtsAAfGy3ksAAfGzAAFS4wAB8WZjKwAB8dQDAAHspwABWO8AAfHeYxsAAfHjAAJIZwAB8ebgSwAB8d5jHwAB8e4QmwAB8d5jEwAB8fcAAVjzAAHx3mMrAAHx/AMAAeynAAFY9wAB8gZjEwAB8gqPxwAB8gpgOwAB8goVVwAB8goVewAB8gpgMwAB8goYFwAB8gZjKwAB8iQDAAHspwABWPsAAfIuYysAAfIwAwAB7KcAAVkDAAHyOmMbAAHyPgpTAAHyPvH3AAHyOmMfAAHySg8bAAHyOmMTAAHyUSMAAfJQjwAB8jpjKwAB8lwDAAHspwABWQsAAfJmYxsAAfJqHkcAAfJrAAFZDwAB8msAAVkTAAHyawABWRcAAfJrAAFZGwAB8msAAVkfAAHyawABWSMAAfJrAAFZJwAB8msAAVkrAAHyawABSQMAAfJrAAFZLwAB8msAAVkzAAHyawABWTcAAfJrAAFZOwAB8msAAVk/AAHyawABWUMAAfJrAAFZRwAB8mZjEwAB8rMAAVePAAHyswABV6sAAfKzAAFXnwAB8rMAAVlXAAHysI8AAfJmYysAAfLIAwAB8spV/wAB7KcAAVmHAAHy1mMbAAHy2gv7AAHy2uFfAAHy2wACSGcAAfLnAAEXDwAB8tZjEwAB8u8AAVenAAHy1mMrAAHy9AMAAeynAAFZiwAB8v5jGwAB8wMAAVmPAAHzAwABWZMAAfMDAAFZlwAB8wMAAVmbAAHzAgv7AAHzAuFfAAHzAEsAAfMDAAFZnwAB8wMAAVmjAAHzAwABWacAAfL+YxMAAfMvAAFZqwAB8y8AAVmzAAHzLwABWa8AAfMvAAFZvwAB8y8AAVnDAAHzLwABWccAAfMuawsAAfMuHRMAAfMuYAsAAfMuGFsAAfMuGTsAAfMuGBcAAfMvAAJIZwAB82MAAVnLAAHzYwABWd8AAfMuGPMAAfMuGQMAAfMuGNsAAfMuGOMAAfMuGUcAAfMuGWMAAfMuGE8AAfMuGacAAfMuFcMAAfMuFzcAAfMuFYcAAfMuGMMAAfMvAAFZ2wAB8y4YswAB8y4YjwAB8y4YnwAB8y4XxwAB8y4WYwAB8y4WcwAB8y4WawAB8y4WewAB8y4WLwAB8y4YBwAB8y4WqwAB8y4W8wAB8y4W6wAB8y4W2wAB8y4XuwAB8y4ZnwAB8y4ZMwAB8v5jKwAB8+QAAwACSGsAAfPvAAFZ4wAB8/JjEwAB8/cAAVnnAAHz9wABWesAAfP3AAFZ7wAB8/cAAVnzAAHz9wABWfcAAfPyYysAAfQMAAMAAkhvAAH0FmMTAAH0GwACSG8AAfQfAAFcEwAB9BcAAVoHAAH0JmMbAAH0Kg+zAAH0KwACSG8AAfQy4EsAAfQzAAFaDwAB9DMAAVoTAAH0MwABWhcAAfQzAAFaGwAB9CZjJwAB9Eq9zwAB9CZjEwAB9FK90wAB9FMAAT5PAAH0UwABUTsAAfRTAAFSkwAB9FMAAUGDAAH0JmMrAAH0aAMAAfQXAAFaPwAB9HJjGwAB9HcAAkhvAAH0euBLAAH0euCfAAH0etVPAAH0ewABWg8AAfR7AAFaEwAB9HsAAVoXAAH0ewABWhsAAfRyYxMAAfSbAAJIbwAB9J8AAVpDAAH0nwABWr8AAfSbAAFaowAB9HJjKwAB9KwDAAH0FwABWtMAAfS2YxsAAfS6D7MAAfS7AAFa2wAB9LrpwwAB9LsAAVqzAAH0uwABPkcAAfS2YxMAAfTTAAFa4wAB9NMAAVrnAAH00I8AAfTTAAFSAwAB9NK90wAB9LZjJwAB9Oq9zwAB9LZjKwAB9PJV/wAB9PJZawAB9BcAAVr3AAH0/mMbAAH1Ag+zAAH1AglfAAH0/mMfAAH1DwABUT8AAfT+YycAAfUWvc8AAfT+YxMAAfUevdMAAfT+YysAAfUmVf8AAfUmWWsAAfQXAAFbAwAB9TJjGwAB9TYPswAB9TcAAVsLAAH1MmMfAAH1QwABWw8AAfUyYycAAfVKvc8AAfUyYxMAAfVSvdMAAfUyYysAAfVaVf8AAfVaWWsAAfQXAAFbFwAB9WZjGwAB9WoPswAB9WrS9wAB9WsAAUSvAAH1awABWx8AAfVq6cMAAfVrAAFW5wAB9WsAAVsjAAH1ZmMnAAH1ir3PAAH1ZmMTAAH1kr3TAAH1kwABVu8AAfWTAAE+UwAB9WZjHwAB9aMAAVszAAH1owABWz8AAfWi1EcAAfVmYysAAfWyVf8AAfWzAAFbJwAB9BcAAVtDAAH1vmMbAAH1wg+zAAH1vmMnAAH1yr3PAAH1vmMTAAH10r3TAAH10I8AAfW+Yx8AAfXe1EcAAfW+YysAAfXkAwAB9BcAAVtPAAH17mMbAAH18sdDAAH17mMfAAH1+gL3AAH1+g8bAAH17mMTAAH2BSMAAfYEjwAB9e5jKwAB9hADAAH0FwABW1cAAfYaYxsAAfYeD7MAAfYfAAEiFwAB9hpjJwAB9iq9zwAB9hpjEwAB9jK90wAB9hpjHwAB9jsAASF/AAH2GmMrAAH2QAMAAfZCVf8AAfQXAAFbXwAB9k5jGwAB9lIPswAB9lMAATMHAAH2UhMnAAH2UwABW2cAAfZSE4cAAfZOYycAAfZqvc8AAfZOYxMAAfZyvdMAAfZOYx8AAfZ6E9sAAfZ6zf8AAfZ6t4cAAfZ6etsAAfZ6E4sAAfZ6FAcAAfZOYysAAfaUAwAB9BcAAVtvAAH2nmMbAAH2og+zAAH2nmMnAAH2qr3PAAH2nmMTAAH2sr3TAAH2sI8AAfaeYx8AAfa+1EcAAfaeYysAAfbEAwAB9BcAAT5zAAH2zmMbAAH20g+zAAH20wABJV8AAfbOYycAAfbevc8AAfbOYxMAAfbmvdMAAfbOYx8AAfbuFDcAAfbuHksAAfbuEHsAAfbOYysAAfb8AwAB9BcAAVt7AAH3BmMbAAH3Cg+zAAH3CreHAAH3BmMnAAH3Fr3PAAH3BmMTAAH3Hr3TAAH3BmMrAAH3JAMAAfQXAAFbhwAB9y5jGwAB9zIPswAB9zIRgwAB9y5jJwAB9z69zwAB9y5jEwAB90a90wAB90SPAAH3LmMfAAH3UgmvAAH3Ug/PAAH3LmMrAAH3XAMAAfQXAAFblwAB92ZjGwAB92sAATMHAAH3awABW5sAAfdmYx8AAfd3AAFbnwAB92ZjEwAB937hYwAB92ZjKwAB94QDAAH0FwABW6cAAfeOYxsAAfeTAAJIcwAB95anEwAB945jHwAB958AAQN/AAH3jmMTAAH3ps3vAAH3jmMrAAH3rAMAAfQXAAFbqwAB97ZjEwAB97rN7wAB97rOUwAB97ZjHwAB98cAAQN/AAH3tmMrAAH3zAMAAfQXAAFbrwAB99ZjGwAB99oPswAB99oVKwAB99sAAQN/AAH32wABW7cAAffWYycAAffuvc8AAffWYxMAAff2vdMAAff2zesAAff2ze8AAffWYysAAfgEAwAB9BcAAVvPAAH4DmMbAAH4Eg+zAAH4EwACSG8AAfgaSXcAAfgOYycAAfgivc8AAfgOYxMAAfgqvdMAAfgqzfcAAfgrAAFb5wAB+A5jHwAB+DsAAVu3AAH4DmMrAAH4QAMAAfQXAAFb8wAB+EpjGwAB+E4PswAB+E4RgwAB+E4JrwAB+E4PzwAB+EpjJwAB+GK9zwAB+EpjEwAB+Gq90wAB+GiPAAH4SmMrAAH4dAMAAfQXAAFb/wAB+H5jGwAB+IIPswAB+IIRgwAB+H5jJwAB+I69zwAB+H5jEwAB+Ja90wAB+JSPAAH4fmMfAAH4ogmvAAH4og/PAAH4fmMrAAH4rAMAAfQXAAFcDwAB+LZjEwAB+LsAAUcjAAH4uwABR+MAAfi7AAFNawAB+LsAAVprAAH4uwABWncAAfi7AAFUjwAB+LsAAVb7AAH4tmMrAAH42AADAAJIdwAB+OMAAVwnAAH45mMbAAH46g+zAAH46wABXC8AAfjrAAFcMwAB+OsAASTTAAH46wABXDcAAfjrAAFcOwAB+OsAAVxDAAH46wABXEsAAfjrAAFcUwAB+OsAAVxbAAH46wABXGMAAfjrAAFcawAB+OnrAAH46pRDAAH46wACSHcAAfkm0fMAAfkmvssAAfknAAFccwAB+ScAAVx3AAH5JwABRt8AAfknAAFcewAB+ScAAVx/AAH5JwABXIMAAfknAAFclwAB+ScAAVybAAH5JwABXJ8AAfknAAFcowAB+ScAAVynAAH46uDPAAH46hurAAH46hIjAAH46hJTAAH46oq3AAH46hIfAAH46pF7AAH46tAjAAH46wABXIcAAfjrAAFciwAB+OsAAVyPAAH46wABXJMAAfjq9GcAAfjq0CsAAfjq4LcAAfjq4LMAAfjmYxMAAfme4RsAAfmevdMAAfme4Q8AAfmey0MAAfmfAAJIdwAB+bMAAV0/AAH5swABXUsAAfmzAAFdVwAB+bMAAV1jAAH5swABXV8AAfmyy1sAAfmzAAFdwwAB+bMAAV3HAAH5swABXcsAAfmzAAFd0wAB+bMAAV3bAAH5swABXd8AAfmzAAFd4wAB+bMAAV3nAAH5swABXesAAfmzAAFd7wAB+bMAAV3zAAH5swABXfcAAfmzAAFd+wAB+bMAAV43AAH5swABXk8AAfmzAAFerwAB+bMAAV7DAAH5swABXtsAAfmzAAFeswAB+bMAAV7zAAH5swABXwcAAfmzAAFe9wAB+bMAAV8LAAH5swABXusAAfmzAAFfFwAB+Z7LbwAB+Z7LawAB+Z7NvwAB+Z6GhwAB+Z7LewAB+Z5xCwAB+Z5xLwAB+Z8AAV1bAAH5nwABXWsAAfmfAAE+iwAB+Z5xEwAB+Z8AAT6PAAH5nqFjAAH5nwABXZcAAfmfAAE+hwAB+Z8AATYrAAH5nwABMs8AAfmfAAEyvwAB+Z8AAT6nAAH5nwABPnsAAfmezesAAfmfAAFdtwAB+Z8AARuPAAH5nwABGusAAfmezdsAAfmezecAAfmfAAE9cwAB+Z8AARrnAAH5nwABXf8AAfmfAAE9YwAB+Z8AARuXAAH5nwABXgcAAfmfAAFeCwAB+Z8AAT6fAAH5nwABPsMAAfmeZScAAfmfAAE+fwAB+Z8AAT6DAAH5nwABXiMAAfmfAAFeGwAB+Z8AAV4fAAH5nwABXi8AAfmfAAE+kwAB+Z8AAT6XAAH5nwABPpsAAfmfAAE2LwAB+Z8AAV5zAAH5nwABOc8AAfmfAAFc+wAB+Z8AAV57AAH5nwABXn8AAfmezjMAAfme4WMAAfmfAAE+rwAB+Z8AAV1DAAH5nwABPrMAAfmfAAFdLwAB+Z8AAV1TAAH5nwABXYcAAfmfAAFdJwAB+Z8AAV2LAAH5nwABXWcAAfmfAAFdgwAB+Z8AAT63AAH5nwABPqsAAfme3QcAAfmfAAE+owAB+Z7OUwAB+Z7OLwAB+Z7OKwAB+Z8AAT6/AAH5nwABXuMAAfmfAAE+uwAB+OZjHwAB+1YV9wAB+1aU7wAB+1bO3wAB+1cAAkh3AAH7ZwABXSMAAftnAAFdKwAB+1YbdwAB+1YfowAB+1cAAV6LAAH45mMrAAH7fAMAAft+vc8AAfjjAAFfJwAB+4pjGwAB+47QRwAB+4pjHwAB+5Z6lwAB+5bNtwAB+5aU/wAB+5YbqwAB+4pjEwAB+6pmMwAB+6rN2wAB+6q+4wAB+6rN3wAB+6oT2wAB+6rN4wAB+6rONwAB+6rOOwAB+6rN5wAB+6rOPwAB+6rLewAB+6rN6wAB+6rN7wAB+6rORwAB+6rOQwAB+6rN9wAB+6rN8wAB+6rN+wAB+6qGhwAB+6rLdwAB+6rNwwAB+6rN1wAB+6rNxwAB+6rOKwAB+6rNywAB+6rNzwAB+6rOLwAB+6rOMwAB+6rNuwAB+6rLbwAB+6rLawAB+6qU8wAB+6rLQwAB+6rN/wAB+6rOUwAB+6rOVwAB+6rOSwAB+6rOTwAB+4pjKwAB/EQDAAH44wABX08AAfxOYxsAAfxSlO8AAfxSzt8AAfxSlEMAAfxSyQcAAfxTAAJIdwAB/GbJkwAB/E5jHwAB/G4LOwAB/E5jKwAB/HQDAAH44wABX1MAAfx+YxsAAfyDAAJIdwAB/IbgSwAB/IcAAUlLAAH8hwABX1cAAfx+YxMAAfyXAAJIdwAB/JsAAV27AAH8fmMrAAH8oAMAAfjjAAFfWwAB/KpjGwAB/K8AAkh3AAH8suBLAAH8swABSUsAAfyqYx8AAfy+zt8AAfy+FfcAAfy+lEMAAfy+9kMAAfyqYxMAAfzTAAEbjwAB/NL0TwAB/NL0xwAB/NL01wAB/NL2GwAB/KpjKwAB/OgDAAH44wABX2MAAfzyYxsAAfz3AAJIdwAB/Poi0wAB/PpvvwAB/PsAARc/AAH8+p3vAAH8+qcTAAH88mMTAAH9EwABXLsAAf0SlPcAAf0TAAFdBwAB/RMAAV0LAAH9EwABXQ8AAf0TAAFdEwAB/RKU8wAB/RMAAV0XAAH9EwABXRsAAf0TAAEaQwAB/RMAARK7AAH9EwABEr8AAf0TAAESwwAB/RMAARLHAAH9EwABEssAAfzyYysAAf1QAwAB+OMAAV+TAAH9WmMbAAH9XwACSHcAAf1i4EsAAf1aYxMAAf1rAAESywAB/WsAARLHAAH9awABEsMAAf1rAAESvwAB/WsAARK7AAH9WmMrAAH9gAMAAfjjAAFflwAB/YpjGwAB/YyfAAH9jwACSHcAAf2UowAB/YynAAH9jwABPu8AAf2PAAE+9wAB/YpjEwAB/aiPAAH9imMrAAH9sAMAAfjjAAFfowAB/bpjGwAB/b8AAkh3AAH9wuBLAAH9umMTAAH9ywABEt8AAf3LAAJIdwAB/dMAAV+nAAH9umMrAAH92AMAAfjjAAFfrwAB/eJjGwAB/ecAAkh3AAH96wABX7MAAf3q4EsAAf3iYxMAAf33AAES/wAB/fcAAkh3AAH9/wABX7cAAf3iYysAAf4EAAMAAkh7AAH+DwABX8MAAf4SYxsAAf4WD7MAAf4W4LcAAf4W4McAAf4W0BMAAf4W3NcAAf4XAAJIewAB/i8AAV/LAAH+LwABX88AAf4vAAFf0wAB/i8AAU/7AAH+LwABX9cAAf4W2usAAf4W8dcAAf4W8iMAAf4W8icAAf4W8esAAf4W4NsAAf4W1e8AAf4WH6MAAf4W0EcAAf4W4LsAAf4W0scAAf4WlUMAAf4WzlsAAf4W8rcAAf4WvZMAAf4XAAFf2wAB/hJjJwAB/oa9zwAB/hJjEwAB/o690wAB/o7ZTwAB/o7bjwAB/o7bkwAB/o5tIwAB/o7a5wAB/o7a9wAB/o7a4wAB/o7a7wAB/o7cFwAB/o7ZqwAB/o7a3wAB/o7a+wAB/o8AAkh7AAH+xwABYCsAAf7HAAFf8wAB/scAAWAjAAH+jtrzAAH+jvLDAAH+jtNvAAH+jwABYC8AAf6O1/8AAf6O398AAf6O2tsAAf6O8DcAAf4SYx8AAf72lO8AAf72zt8AAf724NcAAf728rsAAf72xKsAAf4SYysAAf8MAwAB/g8AAWA3AAH/FmMbAAH/GtBHAAH/FmMTAAH/IwACSHsAAf8nAAFgOwAB/ycAAWA/AAH/IwABYFMAAf8jAAFgVwAB/yMAAWBfAAH/IwABYHMAAf8jAAFgdwAB/yMAAWBrAAH/IwABYIMAAf8jAAFgWwAB/xZjKwAB/1ADAAH+DwABYIsAAf9aYxsAAf9fAAJIewAB/2LgnwAB/1pjEwAB/2sAARMPAAH/WmMrAAH/cAADAAJIfwAB/3pjFwAB/38AAWCPAAH/emMTAAH/hwABMGMAAf+HAAFhxwAB/3sAAVoDAAH/kmMbAAH/lwACSH8AAf+a4EsAAf+bAAE8xwAB/5sAATzLAAH/muCfAAH/mwABYJMAAf+ayZMAAf+bAAFglwAB/5JjHwAB/7sAAkh/AAH/vr7LAAH/vtHzAAH/kmMTAAH/yuCrAAH/ywACSH8AAf/TAAFgnwAB/9MAAWEfAAH/0wABYKMAAf/TAAFgpwAB/9MAAWDrAAH/0wABYQsAAf/LAAFazwAB/5JjKwAB//ADAAH/ewABYVMAAf/6YxMAAf//AAFadwAB//8AAUcjAAH//wABR+MAAf//AAFaawAB//8AAVSPAAH//wABTWsAAf//AAFW+wAB//pjKwACABwDAAH/ewABYVcAAgAmYxsAAgAq4LsAAgArAAFg3wACACsAAWDXAAIAJmMTAAIAOwABWncAAgA7AAFHIwACADsAAUfjAAIAOwABWmsAAgA7AAFUjwACADsAAU1rAAIAOwABVvsAAgAmYysAAgBYAwAB/3sAAWFbAAIAYmMTAAIAZwABYUMAAgBnAAFgrwACAGcAATafAAIAZwABYRcAAgBnAAE2uwACAGcAAWFfAAIAZwABYMsAAgBnAAFgwwACAGcAAWFjAAIAZwABYQMAAgBnAAFhIwACAGcAAWDHAAIAZwABYM8AAgBiYysAAgCcAwAB/3sAAWFzAAIApmMbAAIAqwACSH8AAgCvAAFhdwACAKZjEwACALcAAWEXAAIAtwABYXsAAgC3AAFhQwACALcAAWCvAAIAtwABNp8AAgC3AAFhfwACALcAAWGDAAIAtwABNrsAAgCmYysAAgDYAwAB/3sAAWGXAAIA4mMbAAIA5wABYSsAAgDnAAJIfwACAO8AAWGbAAIA4mMTAAIA9wABYZ8AAgD2awsAAgD2HRMAAgD2GhMAAgD2GjMAAgD2GnMAAgD20g8AAgD2GksAAgD20gsAAgD2GhsAAgD20fcAAgDiYysAAgEkAwAB/3sAAWGvAAIBLmMbAAIBMwABYXsAAgEzAAFhswACAS5jEwACAT7z7wACAT7zywACAT7z1wACAT7zvwACAT7z4wACAT8AARjzAAIBPwABGPcAAgE/AAEY+wACAT8AARkDAAIBPtKPAAIBPh0TAAIBPvQPAAIBPvQbAAIBPvQzAAIBPnyjAAIBPuQXAAIBPwABGP8AAgE+FwMAAgE/AAJIfwACAYsAAWG3AAIBLmMrAAIBkAADAAJIgwACAZsAAU3jAAIBnmMTAAIBouLXAAIBnmMrAAIBqAADAAJIhwACAbMAAU3nAAIBtmMfAAIBuwABS0MAAgG7AAFODwACAbofSwACAbsAAU4bAAIBuwABTisAAgG7AAFOLwACAbsAAU47AAIBuwABTiMAAgG64LcAAgG6ve8AAgG2YysAAgHkAAMAAkiLAAIB7mMTAAIB8wABYicAAgHzAAJIiwACAfsAAWI7AAIB+wABYj8AAgH7AAFiQwACAfsAAWJHAAIB+wABYksAAgH7AAFiTwACAfsAAWJTAAIB+wABYlcAAgHzAAFiWwACAe8AAWHjAAICImMbAAICJwACSIsAAgIrAAFh5wACAisAAWHrAAICKwABYe8AAgIrAAFh8wACAisAAWH3AAICKwABYfsAAgIrAAFh/wACAisAAWIDAAICKwABYgcAAgIrAAFiCwACAiJjEwACAlcAAWIPAAICVwABYhMAAgJXAAFiFwACAlcAASrPAAICVwABKtMAAgJXAAEw/wACAlcAATEHAAICVwABMQMAAgJXAAExCwACAlcAAWIbAAICVwABMY8AAgJXAAExkwACAlcAATGXAAICVwABMZsAAgJXAAEx1wACAlcAATHfAAICImMrAAICmAMAAgHvAAFiHwACAqJjGwACAqZ/0wACAqcAATfDAAIComMfAAICsgL3AAIComMTAAICuI8AAgKiYysAAgLAAAMAAkiPAAICyuGjAAICzmMbAAIC0wABUbcAAgLTAAFaIwACAtMAAVq3AAICzmMTAAIC4I8AAgLOYysAAgLoAwACAssAAWJnAAIC8mMbAAIC9wABWtsAAgL3AAFa3wACAvcAAVqzAAIC9wABXs8AAgL3AAE+RwACAvcAAVqfAAIC9wABWpsAAgL3AAFalwACAvJjEwACAxiPAAIC8mMrAAIDIAMAAgMiWWsAAgMjAAFiawACAssAAWJ7AAIDMmMbAAIDNwACSI8AAgM6y5cAAgMyYx8AAgNDAAFRPwACAzJjKwACA0gDAAIDSwABYn8AAgLLAAFigwACA1ZjGwACA1sAAVsLAAIDVmMfAAIDYwABWw8AAgNWYysAAgNoAwACAssAAWKHAAIDcmMbAAIDdgL3AAIDdwABM+cAAgNyYysAAgOAAwACAssAAWKLAAIDimMbAAIDjJ8AAgOPAAJIjwACA5SjAAIDjKcAAgOOfV8AAgOPAAFijwACA48AAS3/AAIDjuGHAAIDjrNDAAIDjwABYpMAAgOPAAFilwACA48AAWKbAAIDjwABYp8AAgOPAAFiowACA48AAWKnAAIDjwABYqsAAgOPAAFirwACA48AAWKzAAIDjwABYrcAAgOPAAFiuwACA4pjEwACA+CPAAIDimMrAAID6AMAAgLLAAFivwACA/JjGwACA/YJrwACA/YJqwACA/bPLwACA/aGBwACA/a+awACA/Z9XwACA/cAAWKPAAID9wABLf8AAgP24YcAAgP2s0MAAgP3AAFikwACA/cAAWK3AAID8mMfAAIEKg8bAAID8mMTAAIEMSMAAgQwjwACA/JjKwACBD8AAkiPAAIEQwABYsMAAgQ/AAFipwACBD8AAWKrAAIEPwABYq8AAgQ/AAFiswACBD8AAWKXAAIEPwABYpsAAgQ/AAFinwACBD8AAWKjAAIEPwABYrsAAgLLAAFi2wACBG5jGwACBHCfAAIEcwACSI8AAgR4owACBHCnAAIEcmfrAAIEclnPAAIEcnwfAAIEcgm7AAIEbmMTAAIElI8AAgRuYysAAgScAwACAssAAWLvAAIEpmMbAAIEqglfAAIEqgpTAAIEqgmvAAIEqtRTAAIEpmMnAAIEvAMAAgSmYxMAAgTGEUsAAgTGEU8AAgTFIwACBMSPAAIEpmMfAAIE2g8bAAIEpmMrAAIE4lX8AwACSJMAAgTqYxMAAgTvAAJIkwACBPMAAWTzAAIE6wABYwsAAgT6YxMAAgT/AAFjDwACBP8AAWMTAAIE/wABYxcAAgT/AAFjGwACBP8AAWMfAAIE/wABYyMAAgT/AAFjJwACBP8AAWMrAAIE/wABYy8AAgT/AAFjMwACBP8AAWM3AAIE/wABYzsAAgT/AAFjPwACBP6+nwACBP8AAWNHAAIE/wABY0sAAgT/AAFjTwACBP8AAWNTAAIE/wABY1cAAgT/AAFjWwACBP7VywACBP8AAWNfAAIE/wABY2MAAgT/AAFjZwACBP8AAWNrAAIE/wABY3MAAgT/AAFjdwACBP8AAWN7AAIE/wABY38AAgT/AAFNqwACBP8AAWODAAIE/wABY4cAAgT/AAFjiwACBP8AAWOPAAIE/wABY5MAAgT/AAFjlwACBP8AAWObAAIE/wABY58AAgT+7+8AAgT/AAFjowACBP7vrwACBP8AAWOnAAIE/wABY6sAAgT/AAFjrwACBP8AAWOzAAIE/wABY7cAAgT/AAFjuwACBP8AAWO/AAIE/wABY8MAAgT/AAFjxwACBP8AAWPLAAIE/wABTicAAgT/AAFjzwACBP8AAWPTAAIE/wABY9cAAgT/AAFj2wACBP8AAWPfAAIE/wABY+MAAgT6YysAAgXoAwACBOsAAWPnAAIF8mMbAAIF9uKXAAIF8mMTAAIF/wABO0sAAgX/AAE7TwACBf8AATtTAAIF/wABO1cAAgX/AAE7WwACBf8AATtfAAIF/wABO2MAAgX/AAE7ZwACBf8AATtrAAIF/wABOucAAgX/AAE66wACBf8AATvHAAIF/wABOzsAAgX/AAFj6wACBf8AATtHAAIF/wABO88AAgX/AAE7bwACBf8AATrDAAIF/wABOysAAgX/AAE6bwACBf8AATuHAAIF/wABO5sAAgX/AAE7uwACBf8AATu/AAIF/wABO4sAAgX/AAE7wwACBf8AATuPAAIF/wABO9MAAgX/AAE71wACBf8AATvfAAIF/wABO+MAAgX/AAE72wACBf6qrwACBf8AATrvAAIF/wABOs8AAgX/AAE6dwACBf8AATpLAAIF/wABOnMAAgX/AAE6ZwACBf8AATqDAAIF/wABOvsAAgX/AAE68wACBf8AATr3AAIF/wABO5MAAgX+GQ8AAgX/AAE6TwACBf8AATvnAAIF8mMrAAIGvAMAAgTrAAFj9wACBsZjGwACBssAAkiXAAIGzt1XAAIGxmMfAAIG1wABY/sAAgbGYxMAAgbfAAJIlwACBuMAAWP/AAIG4wABZAMAAgbfAAFjywACBt8AAWPHAAIG3wABY8MAAgbfAAFjvwACBt8AAWO7AAIG3wABY7cAAgbfAAFjswACBt8AAWOvAAIG3wABY6sAAgbfAAFjpwACBt7vrwACBt8AAWOjAAIG3u/vAAIG3wABY5sAAgbfAAFjnwACBt8AAWOXAAIG3wABY5MAAgbfAAFjjwACBt8AAWOLAAIG3wABY4MAAgbfAAFjhwACBt8AAU2rAAIG3wABY38AAgbfAAFjewACBt8AAWN3AAIG3wABY3MAAgbfAAFjawACBt8AAWNnAAIG3wABY2MAAgbfAAFjXwACBt7VywACBt8AAWNbAAIG3wABY1cAAgbfAAFjUwACBt8AAWNPAAIG3wABY0sAAgbfAAFjRwACBt6+nwACBt8AAWM/AAIG3wABYzsAAgbfAAFjNwACBt8AAWMzAAIG3wABYy8AAgbfAAFjJwACBt8AAWMrAAIG3wABYyMAAgbfAAFjHwACBt8AAWMbAAIG3wABYxcAAgbfAAFjEwACBt8AAWMPAAIG3wABTicAAgbfAAFjzwACBt8AAWPTAAIG3wABY9cAAgbfAAFj2wACBt8AAWPfAAIG3wABY+MAAgbGYysAAgfUAwACBOsAAWTjAAIH3mMbAAIH4uLjAAIH4uLnAAIH3mMTAAIH7uLrAAIH3mMrAAIH9AMAAgTrAAFk5wACB/5jGwACCAMAAWP7AAIIAwABOg8AAggDAAFeEwACB/5jKwACCBADAAIE6wABZOsAAggaYxsAAgge4VsAAggeEr8AAggeCb8AAggaYxMAAgguYBMAAgguG58AAgguG5MAAgguG4cAAgguG2sAAgguG1MAAgguG0cAAgguGzsAAgguGycAAgguGxMAAgguGwMAAgguGvMAAgguGucAAgguGtsAAgguGs8AAggaYysAAghsAAMAAkibAAIIdwABZPcAAgh6YxsAAgh+CWcAAgh+qW8AAgh6YysAAgiIAwACCHcAAWT7AAIIkmMbAAIIluJ/AAIIluKPAAIIkmMrAAIIoAMAAgh3AAFk/wACCKpjEwACCK7ibwACCK7iewACCKpjKwACCLgAAwACSJ8AAgjC4acAAgjGYxsAAgjK4oMAAgjK4pcAAgjK4osAAgjGYycAAgjaWWsAAgjGYysAAgjgAwACCMMAAWUHAAII6mMTAAII7wABO3cAAgjvAAE2ywACCOpjHwACCPsAATt7AAII6mMrAAIJAAMAAgjDAAFlCwACCQpjGwACCQ8AAkifAAIJEwABWg8AAgkTAAFlDwACCQpjEwACCR8AAWUTAAIJHwABZRcAAgkfAAE7dwACCR8AATbLAAIJCmMfAAIJMwABO3sAAgkKYysAAgk4AwACCMMAAWUbAAIJQmMfAAIJRwABO3sAAglHAAE7twACCUJjKwACCVADAAIIwwABZR8AAglaYxsAAglfAAJInwACCWMAAWUjAAIJYwABZQ8AAglfAAE7twACCVpjEwACCXMAAWUnAAIJcwABZRcAAglaYx8AAgl/AAE7ewACCVpjKwACCYQDAAIIwwABZS8AAgmOYxsAAgmTAAFlMwACCZLilwACCY5jEwACCZ8AAWU3AAIJnwABZRcAAgmfAAFlPwACCY5jKwACCawAAwACSKMAAgm28NsAAgm6YxsAAgm/AAFLJwACCb8AAUsrAAIJvwACSKMAAgnKWdMAAgm6YycAAgnSvc8AAgm6YxMAAgnavdMAAgnbAAFBXwACCdsAAUFbAAIJumMfAAIJ6tAXAAIJ6tAbAAIJ6wABYRMAAgnrAAFOIwACCerMxwACCerUEwACCerUGwACCerUHwACCerUDwACCesAAWEbAAIJtvDfAAIKFmMbAAIKGtQbAAIKGtQPAAIKFmMTAAIKJwABZUMAAgonAAFlRwACCicAAU3XAAIKJwABZUsAAgonAAFN7wACCicAAWVTAAIKJwABTicAAgom4jsAAgomCjMAAgoWYysAAgpMAwACCbcAAWVXAAIKVmMbAAIKWwACSKMAAgpfAAFlWwACCl8AAWVfAAIKXwABZWMAAgpfAAFlZwACCl8AAWVrAAIKXwABZMcAAgpfAAFlbwACCl8AAWVzAAIKWszHAAIKWtQbAAIKWtQfAAIKWtQPAAIKWwABYRsAAgpWYx8AAgqXAAJIowACCprR8wACClZjEwACCqMAAWVDAAIKowABZUcAAgqjAAJIowACCq8AAWV3AAIKrwABZX8AAgqvAAFlhwACCq8AAWWLAAIKowABTe8AAgqjAAFlUwACCqMAAU3XAAIKowABZUsAAgqjAAFOJwACCqLiOwACCqIKMwACClZjKwACCtwDAAIJtwABZY8AAgrmYxsAAgrqD7MAAgrrAAJIowACCvMAAWVfAAIK8wABZWMAAgrzAAFlZwACCvMAAWVrAAIK8wABZMcAAgrrAAFLJwACCusAAUsrAAIK6szHAAIK6tQbAAIK6tQfAAIK6tQPAAIK6wABYRsAAgrmYycAAgsmvc8AAgrmYxMAAgsuvdMAAgsvAAFBXwACCy8AAUFbAAIK5mMfAAILPtAXAAILPtAbAAILPwABYQ8AAgs/AAFhEwACCz7UEwACCz8AAU4jAAIK5mMrAAILWAADAAJIpwACC2MAAWWbAAILZmMbAAILawACSKcAAgtvAAFlnwACC27JkwACC26+ywACC27R8wACC28AAU1TAAILbwABIUsAAgtvAAFOtwACC28AAU1XAAILbvFzAAILbwABTVsAAgtvAAFNXwACC27h4wACC28AAWWjAAILZmMTAAILpwACSKcAAgurAAFlpwACC6sAAWWrAAILqwABTW8AAgurAAFNdwACC6sAAWWvAAILqwABTYMAAgurAAFNhwACC6sAAU2LAAILqwABZccAAgurAAFNkwACC6sAAWXLAAILptT7AAILptT3AAILptTnAAILptUHAAILptULAAILptUTAAILptUDAAILptT/AAILptTzAAILpr7bAAILpwABZb8AAgumfXsAAgtmYysAAgwIAAMAAkirAAIMEwABZdMAAgwWYxsAAgwbAAJIqwACDB7R6wACDB8AAWXXAAIMHwABZdsAAgwWYx8AAgwukZ8AAgwuAz8AAgwvAAFl3wACDC8AAWXjAAIMLwABZecAAgwvAAFl6wACDC8AAWXvAAIMLwABZfMAAgwu8EsAAgwuCa8AAgwWYxMAAgxaEpcAAgxbAAFl9wACDFsAAWX/AAIMWwABZgMAAgxbAAFl+wACDFsAAWYHAAIMWwABZg8AAgxbAAFmCwACDFiPAAIMFmMrAAIMgAMAAgwTAAFmEwACDIpjGwACDI5n6wACDIpjHwACDJaRnwACDJYJrwACDIpjKwACDKADAAIMEwABZhcAAgyqYxsAAgyuCbsAAgyu1F8AAgyvAAFmGwACDK8AAWYfAAIMrwABZiMAAgyqYx8AAgzGkZ8AAgzGCa8AAgyqYxMAAgzTAAFmJwACDNCPAAIMqmMrAAIM3AMAAgwTAAFmPwACDOZjGwACDOsAAkirAAIM7p/3AAIM7m+/AAIM7wABZkMAAgzvAAFmRwACDO8AAWZLAAIM6wABR6cAAgzrAAFG0wACDOZjHwACDQ8AAWZfAAINDwABZmMAAg0PAAFmZwACDQ8AAWZrAAIM5mMTAAINIwABZm8AAg0jAAFmcwACDSMAAWZ3AAINIwACSKsAAg0zAAFmewACDTMAAWZ/AAINMwABZk8AAg0zAAFmUwACDTMAAWZXAAINMwABZlsAAg0i0EMAAgzmYysAAg1QAwACDBLyrwACDVpjJwACDV69zwACDVpjEwACDWa90wACDWcAAUcjAAINZwABR+MAAg1nAAFNawACDWcAAVSPAAINZwABVvsAAgwTAAFmvwACDYJjEwACDYa90wACDYcAAUcjAAINhwABTWsAAg2HAAFH4wACDYcAAVSPAAINhwABVvsAAg2CYysAAg2gAwACDBMAAWbDAAINqmMbAAINrg+zAAINrwACSKsAAg22vssAAg2vAAFhOwACDa8AAWD3AAINrwABYPsAAg2vAAFg2wACDa8AAWDjAAINrwABYT8AAg2vAAFhRwACDapjJwACDdq9zwACDapjEwACDeK90wACDeLVHwACDeMAAUcjAAIN4wABTWsAAg3jAAFH4wACDeMAAVSPAAIN4wABVvsAAg2qYysAAg4AAwACDBMAAWbLAAIOCmMTAAIODwABTf8AAg4PAAFOAwACDg8AAU4HAAIODr6fAAIODwABZs8AAg4KYysAAg4kAwACDBMAAWbTAAIOLmMTAAIOMwABTf8AAg4zAAFOAwACDjMAAU4HAAIOMr6fAAIOMwABZs8AAg4uYysAAg5IAwACDBMAAWbXAAIOUmMbAAIOVwACSKsAAg5avssAAg5avhcAAg5XAAFm2wACDlcAAWbfAAIOVwABZuMAAg5XAAFm5wACDlcAAWbrAAIOVwABZu8AAg5SYxMAAg5/AAFN/wACDn8AAU4DAAIOfwABTgcAAg5+vp8AAg5/AAFmzwACDlJjKwACDpQAAwACSK8AAg6eYxMAAg6jAAFnewACDqMAAWeDAAIOnwABZzsAAg6uYxMAAg6y4mcAAg6uYysAAg64AwACDp8AAU7XAAIOwmMTAAIOxwABTz8AAg7CYysAAg7MAwACDp8AAWdDAAIO1mMbAAIO2wACSK8AAg7evssAAg7e4bsAAg7fAAFnRwACDtZjEwACDu8AAU8/AAIO7wACSK8AAg73AAFnSwACDvcAAWdTAAIO9wABZ1sAAg73AAFnTwACDtZjKwACDwgAAwACSLMAAg8SYxMAAg8XAAJIswACDxsAAWenAAIPEwABZ4sAAg8iYxsAAg8nAAJIswACDyrgSwACDysAAWePAAIPImMTAAIPNwACSLMAAg87AAFnkwACDzbO5wACDzbO7wACDzbO6wACDzbQOwACDzbPFwACDzbO/wACDzYSFwACDzbQMwACDyJjKwACD2ADAAIPEwABZ6MAAg9qYxsAAg9u0EcAAg9uAz8AAg9qYx8AAg96zt8AAg9qYxMAAg+BWwACD4IXzwACD4IX2wACD4IX4wACD4IXxwACD4IX9wACD4IX6wACD4IYHwACD4IYJwACD4IYLwACD4IW8wACD4IaqwACD4IZnwACD4IX/wACD4IXAwACD4IYWwACD2pjKwACD8QAAwACSLcAAg/PAAFnqwACD9JjHwACD9aU7wACD9bJBwACD9bO3wACD9YV9wACD9YbdwACD9YfowACD9JjEwACD/MAATLPAAIP8wABPnsAAg/zAAEyvwACD/LN6wACD/LLewACD/MAAT5/AAIP8wABXiMAAg/ycRMAAg/zAAE+hwACD/KhYwACD/MAATYrAAIP8nEvAAIP8wABPosAAg/zAAE+jwACD/MAATnPAAIP8mUnAAIP8wABPpMAAg/zAAE+lwACD/MAAT6bAAIP8wABJH8AAg/zAAE2LwACD/MAAT6fAAIP8wABNiMAAg/y4jcAAg/zAAFdlwACD/MAATHjAAIP8wABMecAAg/zAAEx2wACD/MAAWevAAIP8wABZ7MAAg/zAAFntwACD/MAAWebAAIP8wABZ58AAg/y4mMAAg/SYysAAhB8AwACD88AAWe7AAIQhmMbAAIQiJ8AAhCLAAJItwACEJCjAAIQiKcAAhCKxPcAAhCKxPsAAhCKxP8AAhCKxQMAAhCLAAEmxwACEIZjEwACELCPAAIQhmMrAAIQuAADAAJIuwACEMJjEwACEMcAAki7AAIQywABaS8AAhDHAAFpMwACEMMAAWffAAIQ1mMbAAIQ2esAAhDalEMAAhDbAAJIuwACEOcAAUlLAAIQ5tHzAAIQ5r7LAAIQ5wABXHMAAhDnAAFcdwACEOcAAUbfAAIQ5wABXHsAAhDnAAFcfwACEOcAAWfjAAIQ5wABXIMAAhDnAAFn5wACEOcAAWVbAAIQ5wABXKMAAhDnAAFcpwACENpanwACENobqwACENoSIwACENoSUwACENqKtwACENoSHwACENsAAVz/AAIQ2pF7AAIQ2tAjAAIQ2wABXIcAAhDbAAFciwACENsAAVyPAAIQ2wABXJMAAhDa9GcAAhDa0CsAAhDbAAE6DwACENZjHwACEWIV9wACEWKU7wACEWLO3wACEWMAAki7AAIRcwABXSMAAhFzAAFdKwACEWIbdwACEWIfowACEWKpbwACEWMAAV6LAAIRYskHAAIRYwABaIcAAhDWYxMAAhGW4Q8AAhGWy0MAAhGXAAJIuwACEaMAAV0/AAIRowABXUsAAhGjAAFdVwACEaMAAV1jAAIRowABXV8AAhGiy1sAAhGjAAFdywACEaMAAV3DAAIRowABXccAAhGjAAFd2wACEaMAAV3fAAIRowABXecAAhGjAAFn8wACEaMAAV3rAAIRowABXe8AAhGjAAFd8wACEaMAAV33AAIRowABXfsAAhGjAAFn+wACEaMAAV43AAIRowABXk8AAhGjAAFoCwACEaMAAWgfAAIRowABaCsAAhGjAAFoNwACEaMAAWhLAAIRowABaGMAAhGjAAFoewACEaMAAWiTAAIRowABaJcAAhGWy28AAhGWy2sAAhGXAAFn6wACEZbNvwACEZaGhwACEZbLewACEZZxCwACEZZxLwACEZcAAV1bAAIRlwABXWsAAhGXAAE+iwACEZZxEwACEZcAAT6PAAIRlqFjAAIRlwABXZcAAhGXAAE+hwACEZcAATYrAAIRlwABMs8AAhGXAAEyvwACEZcAAT6nAAIRlwABPnsAAhGWzesAAhGXAAFdtwACEZcAARuPAAIRlwABGusAAhGWzdsAAhGWzecAAhGXAAE9cwACEZbOKwACEZcAARrnAAIRlwABXf8AAhGXAAE9YwACEZcAARuXAAIRluJjAAIRlwABNiMAAhGXAAE+nwACEZZlJwACEZcAAT5/AAIRlwABZ/8AAhGXAAFeIwACEZcAAV4bAAIRlwABXh8AAhGXAAFeLwACEZcAAT6TAAIRlwABPpcAAhGXAAE+mwACEZcAASR/AAIRlwABaAcAAhGXAAE2LwACEZcAAV5zAAIRlwABOc8AAhGXAAFdLwACEZcAAV1TAAIRlwABXYMAAhGXAAFdZwACEZcAAV2LAAIRlwABXScAAhGXAAFdhwACEZcAAV1DAAIRluI3AAIRluKTAAIRlwABaIsAAhGXAAFojwACEZcAAWebAAIRlwABZ7cAAhGXAAFnnwACEZcAAWevAAIRlwABZ7MAAhGXAAEx4wACEZcAATHnAAIRlwABMdsAAhGXAAFoGwACEZcAAWgnAAIRlwABaDMAAhGXAAFc+wACEZcAAWhTAAIRlwABaFsAAhGXAAFobwACEZcAAWhzAAIRlwABaHcAAhGXAAFogwACENZjKwACE2ADAAIQwwABaJ8AAhNqYxsAAhNu0EcAAhNqYx8AAhN2epcAAhN2zbcAAhN2lP8AAhN2G6sAAhNqYxMAAhOKZjMAAhOKzdsAAhOKvuMAAhOKzd8AAhOKE9sAAhOKzeMAAhOKzecAAhOKy3sAAhOKzesAAhOKze8AAhOKzfcAAhOKzfMAAhOKzgsAAhOKzfsAAhOKhocAAhOKy3cAAhOKzcMAAhOKzdcAAhOKzgcAAhOKzccAAhOKzcsAAhOKzc8AAhOKzbsAAhOKy28AAhOKy2sAAhOKlPMAAhOKy0MAAhOKzg8AAhOKzhcAAhOKzhMAAhOKzhsAAhOKzh8AAhOKzf8AAhNqYysAAhQQAwACEMMAAWijAAIUGmMbAAIUHpTvAAIUHs7fAAIUHpRDAAIUHskHAAIUHwACSLsAAhQyyZMAAhQaYx8AAhQ6CzsAAhQaYysAAhRAAwACEMMAAWinAAIUSmMbAAIUTwACSLsAAhRS4EsAAhRTAAFJSwACFFMAAV9XAAIUSmMTAAIUYwACSLsAAhRnAAFduwACFEpjKwACFGwDAAIQwwABaKsAAhR2YxsAAhR7AAJIuwACFH7gSwACFH8AAUlLAAIUevSrAAIUdmMfAAIUjs7fAAIUjhX3AAIUjpRDAAIUjvZDAAIUdmMTAAIUowABG48AAhSi9E8AAhSi9McAAhSi9NcAAhSi9hsAAhR2YysAAhS4AwACEMMAAWivAAIUwmMbAAIUxwACSLsAAhTLAAFoswACFMrgSwACFMrhuwACFMrh0wACFMJjHwACFN8AAki7AAIU4r7LAAIU4tHzAAIUwmMTAAIU7uJnAAIU7wACSLsAAhT3AAFowwACFPcAAWi7AAIU9wABaNcAAhT3AAFo5wACFPcAAWjrAAIU9wABaNsAAhT3AAFo0wACFPcAAWjLAAIU9wABaL8AAhT3AAFo4wACFPcAATGjAAIUwmMrAAIVJAMAAhDDAAFo/wACFS5jGwACFTLQRwACFS5jEwACFTsAAT1XAAIVOvHjAAIVOs3DAAIVOwABPYMAAhU7AAE9YwACFTsAAT1zAAIVLmMrAAIVVAMAAhDDAAFpAwACFV5jGwACFWLQRwACFWMAAki7AAIVawABaQcAAhVjAAFnPwACFV5jEwACFXbWIwACFXcAAWkTAAIVdwABaRcAAhV21icAAhV21isAAhVeYysAAhWMAwACEMMAAWknAAIVlmMbAAIVmtBHAAIVlmMfAAIVowACSLsAAhWmvssAAhWm0fMAAhWWYxMAAhWzAAE5xwACFbMAATnTAAIVswABOc8AAhWWYysAAhXAAAMAAki/AAIVymMTAAIVzwABaUcAAhXLAAFpOwACFdZjGwACFdoFNwACFdZjEwACFeIfdwACFdZjKwACFegDAAIVywABaT8AAhXyYxsAAhX2ArMAAhX2VRMAAhXyYxMAAhYCH38AAhYCH3sAAhYCDoMAAhXyYysAAhYQAAMAAkjDAAIWGwABaVsAAhYeYxsAAhYjAAJIwwACFiZZ0wACFh5jJwACFi69zwACFh5jEwACFja90wACFjcAAT5PAAIWNwABQYMAAhY3AAFSkwACFjcAAVE7AAIWGwABaV8AAhZOYxsAAhZQnwACFlMAAkjDAAIWWKMAAhZQpwACFlMAAVG3AAIWUwABWscAAhZTAAFpYwACFlMAAWlnAAIWTmMTAAIWdI8AAhZOYysAAhZ8AwACFhsAAWlrAAIWhmMnAAIWir3PAAIWhmMTAAIWkr3TAAIWkwABWucAAhaTAAFa4wACFpMAAVIDAAIWhmMfAAIWpunDAAIWhmMrAAIWrAMAAhYbAAFpdwACFrZjJwACFrq9zwACFrZjHwACFsMAAVE/AAIWwglfAAIWtmMrAAIWzAMAAhYbAAFpfwACFtZjJwACFtq9zwACFtZjHwACFuMAAVsPAAIW4wABWwsAAhbWYysAAhbsAwACFhsAAWmHAAIW9mMnAAIW+r3PAAIW9mMfAAIXAwABWx8AAhcDAAFW5wACFwLS9wACFwMAAUSvAAIXAwABWzMAAhcDAAFbPwACFwLURwACFvZjEwACFyMAAVbvAAIXIwABWuMAAhcjAAE+UwACFvZjKwACFzADAAIWGwABXB8AAhc6YxsAAhc+228AAhc6Yx8AAhdGAvcAAhdGDxsAAhc6YxMAAhdRIwACF1CPAAIXOmMrAAIXXAMAAhYbAAFcIwACF2ZjGwACF2oUKwACF2ZjHwACF3IC9wACF3IPGwACF2ZjEwACF30jAAIXZmMrAAIXhAMAAhYbAAFpkwACF45jGwACF5KlYwACF45jHwACF5oC9wACF5oPGwACF45jEwACF6UjAAIXpI8AAheOYysAAhewAwACFhsAAWmbAAIXumMfAAIXvwABIhcAAhe6YysAAhfEAwACFhsAAWmfAAIXzmMfAAIX0wABIX8AAhfOYysAAhfYAAMAAkjHAAIX4wABaacAAhfmYx8AAhfqjpsAAhfqCScAAhfrAAFpqwACF+qO/wACF+qPLwACF+ZjKwACGAADAAIX4o/zAAIYCmMfAAIYDgL3AAIYDwABaasAAhgOopcAAhgOZYMAAhgOjv8AAhgOjy8AAhgPAAEy3wACGA8AATLjAAIYCmMTAAIYMwABMusAAhgKYysAAhg4AAMAAkjLAAIYQuOvAAIYRmMTAAIYSp1fAAIYSwACSMsAAhhTAAFpswACGEZjKwACGFgDAAIYQwABab8AAhhiYxsAAhhmCcMAAhhiYxMAAhhsjwACGGJjKwACGHQDAAIYQwABaccAAhh+YxsAAhiDAAFJNwACGIMAARpLAAIYfmMTAAIYjI8AAhh+YysAAhiUAwACGELjswACGJ5jEwACGKMAAWnPAAIYowABaeMAAhieYysAAhisAwACGEMAARgLAAIYtmMbAAIYugpTAAIYtmMTAAIYwSMAAhjAjwACGLZjKwACGMwDAAIYQwABae8AAhjWYysAAhjYAwACGEMAAWnzAAIY4mMbAAIY5gpTAAIY4mMTAAIY7SMAAhjsjwACGOJjKwACGPgDAAIYQwABafsAAhkCYxsAAhkHAAFJNwACGQYV9wACGQJjEwACGREjAAIZEwACSMsAAhkbAAFp/wACGRCPAAIZAmMrAAIZJAADAAJIzwACGS8AAWoPAAIZMmMTAAIZNwABahMAAhk3AAFqFwACGTbpuwACGTcAAWobAAIZNnP3AAIZNwABah8AAhkyYysAAhlQAwACGS8AAWojAAIZWmMTAAIZXwABahcAAhlfAAJIzwACGWcAAWonAAIZWmMrAAIZbAMAAhkvAAFqLwACGXZjEwACGXsAAWoXAAIZdmMrAAIZgAMAAhkvAAFqNwACGYpjEwACGY5z9wACGY8AAWoTAAIZjwABahcAAhmKYysAAhmcAwACGS8AAWo/AAIZpmMTAAIZqnP3AAIZqwABahMAAhmrAAFqFwACGaZjKwACGbgDAAIZLwABakcAAhnCYxMAAhnGc/cAAhnHAAFqEwACGccAAWoXAAIZxwABak8AAhnCYysAAhnYAwACGS8AAWpTAAIZ4mMTAAIZ5wABahMAAhnnAAFqVwACGecAAWoXAAIZ5wABal8AAhnnAAFqYwACGecAAWpnAAIZ5wABalsAAhnnAAFqTwACGeJjKwACGggDAAIZLwABamsAAhoSYxMAAhoXAAFqEwACGhZz9wACGhcAAWpbAAIaFwABak8AAhoSYysAAhooAwACGS8AAWpzAAIaMmMTAAIaNnP3AAIaNwABahMAAho3AAFqWwACGjcAAWpPAAIaMmMrAAIaSAMAAhkvAAFqewACGlJjEwACGlcAAWoTAAIaVnP3AAIaVwABalsAAhpXAAFqTwACGlJjKwACGmgDAAIZLwABao8AAhpyYxMAAhp3AAFqEwACGnZz9wACGncAAWpbAAIadwABak8AAhpyYysAAhqIAwACGS8AAWqXAAIakmMTAAIalnP3AAIalwABahMAAhqXAAFqWwACGpcAAWpPAAIakmMrAAIaqAMAAhkvAAFqnwACGrJjEwACGrZz9wACGrcAAWpbAAIatwABak8AAhqyYysAAhrEAwACGS8AAWqnAAIazmMTAAIa0nP3AAIa0wABahMAAhrTAAFqrwACGtMAAWqzAAIa0wABaqsAAhrTAAFqFwACGtMAAWpbAAIa0wABak8AAhrOYysAAhr0AwACGS8AAWq/AAIa/mMTAAIbAwABahMAAhsDAAFqwwACGwMAAWrHAAIbAwABGVsAAhr+YysAAhsUAwACGS8AAWrLAAIbHmMTAAIbInP3AAIbIwABahcAAhsjAAFqWwACGyMAAWpPAAIbHmMrAAIbNAMAAhkvAAFq1wACGz5jEwACG0MAAWoTAAIbQwABahcAAhtDAAFqWwACG0Jz9wACG0MAAWpPAAIbPmMrAAIbWAMAAhkvAAFq6wACG2JjEwACG2Zz9wACG2cAAWoTAAIbZwABalsAAhtnAAFqTwACG2JjKwACG3gDAAIZLwABavMAAhuCYxMAAhuGc/cAAhuHAAFqEwACG4cAAWpbAAIbhwABak8AAhuCYysAAhuYAwACGS8AAWr7AAIbomMTAAIbpnP3AAIbpwABahMAAhunAAFqWwACG6cAAWpPAAIbomMrAAIbuAMAAhkvAAFrAwACG8JjEwACG8cAAWoTAAIbxwABahcAAhvHAAFqWwACG8cAAWpPAAIbwmMrAAIb2AMAAhkvAAFrBwACG+JjEwACG+cAAWoXAAIb5nP3AAIb5wABalsAAhvnAAFqTwACG+JjKwACG/gDAAIZLwABaw8AAhwCYxMAAhwGc/cAAhwHAAFqWwACHAcAAWpPAAIcAmMrAAIcFAMAAhkvAAFrFwACHB5jEwACHCJz9wACHCMAAWpbAAIcIwABak8AAhweYysAAhwwAwACGS8AAWsfAAIcOmMTAAIcPnP3AAIcPwABalsAAhw/AAFqTwACHDpjKwACHEwDAAIZLwABaycAAhxWYxMAAhxac/cAAhxbAAFqWwACHFsAAWpPAAIcVmMrAAIcaAMAAhkvAAFrLwACHHJjEwACHHZz9wACHHcAAWoXAAIccmMrAAIcgAMAAhkvAAFrOwACHIpjEwACHI8AAWoXAAIcimMrAAIclAMAAhkvAAFrQwACHJ5jEwACHKMAAWoXAAIcowABak8AAhyeYysAAhysAwACGS8AAWtHAAIctmMTAAIcuwABak8AAhy2YysAAhzAAwACGS8AAWtPAAIcymMTAAIczwABak8AAhzKYysAAhzUAwACGS8AAWtXAAIc3mMTAAIc4wABahcAAhzeYysAAhzoAwACGS8AAWtfAAIc8mMTAAIc9nP3AAIc9wABahcAAhzyYysAAh0AAAMAAkjTAAIdCwABa2cAAh0OYxsAAh0S5Z8AAh0SkYcAAh0TAAFrawACHQ5jEwACHSLlpwACHSMAAWtzAAIdIuT7AAIdIwABa8sAAh0jAAFrzwACHSLlEwACHQ5jKwACHTwAAwACSNcAAh1GYxMAAh1LAAFr7wACHUsAAkjXAAIdUwABa/cAAh1LAAFsEwACHUsAAWwXAAIdSwABbDMAAh1LAAFsNwACHUsAASG3AAIdSwABbI8AAh1LAAFslAMAAkjbAAIddwABbKMAAh16YxsAAh18nwACHX8AAkjbAAIdhKMAAh18pwACHX8AAWynAAIdfwABbKsAAh1/AAFsrwACHXpjEwACHZyPAAIdemMrAAIdpAMAAh13AAFsswACHa5jGwACHbIJrwACHbIC9wACHbLuYwACHbMAAWynAAIdswABbKsAAh2zAAFsrwACHa5jHwACHc8AAWy3AAIdzpTTAAIdrmMTAAId2I8AAh3aDC8AAh3bAAFsuwACHa5jKwACHegDAAIddwABbL8AAh3yYxsAAh30nwACHfcAAkjbAAId/KMAAh30pwACHfZ3owACHfcAAWzDAAId9nfXAAId9wABbMcAAh33AAFsywACHfcAAWzPAAId9wABbNMAAh33AAFs1wACHfcAAWzbAAId9wABbN8AAh33AAFs4wACHfcAAWznAAId9wABbOsAAh32d7MAAh33AAFs7wACHfZ1FwACHfcAAWzzAAId9wABbPcAAh33AAFs+wACHfZpdwACHfZpcwACHfcAAWz/AAId8mMTAAIeYI8AAh3yYysAAh5oAwACHXcAAW0DAAIecmMbAAIedgmvAAIedgL3AAIednejAAIedwABbMMAAh52d9cAAh53AAFsxwACHncAAWzLAAIedwABbM8AAh53AAFs0wACHncAAWzXAAIedwABbNsAAh53AAFs3wACHncAAWzjAAIedwABbOcAAh53AAFs6wACHnZ3swACHncAAWzvAAIednUXAAIedwABbPMAAh53AAFs9wACHncAAWz7AAIedml3AAIedmlzAAIedwABbP8AAh5yYx8AAh7bAAFstwACHtruYwACHnJjEwACHuSPAAIe5gwvAAIe5wABbQcAAh7nAAFsuwACHnJjKwACHvsAAkjbAAIe/gLXAAIddwABbQsAAh8GYx8AAh8LAAFstwACHwruYwACHwZjKwACHxQDAAIddwABbQ8AAh8eYx8AAh8jAAFstwACHyLuYwACHx5jKwACHywDAAIddwABbRMAAh82Yx8AAh87AAFstwACHzruYwACHzZjKwACH0QAAwACSN8AAh9OYxsAAh9TAAFtFwACH1MAAW0bAAIfUwABbRwDAAJI4wACH2MAAW0jAAIfZmMbAAIfatBHAAIfapTvAAIfauDXAAIfas7fAAIfauC3AAIfauDHAAIfatATAAIfatzXAAIfatrrAAIfavHXAAIfawACSOMAAh+W7ycAAh+XAAFG4wACH5bwgwACH5bwhwACH5bwiwACH2ryJwACH2rx6wACH2rSxwACH2rg2wACH2rgmwACH2ofowACH2qVQwACH2rwUwACH2rwVwACH2rwawACH2rwbwACH2rwTwACH2rwowACH2ryKwACH2rPMwACH2rpCwACH2ZjHwACH+7guwACH+7V7wACH+7wmwACH+7wpwACH+7wrwACH2ZjEwACIAbZTwACIAbwswACIAbwtwACIAbO9wACIAbwkwACIAbwlwACH2ZjKwACICAAAwACSCcAAiAqYxcAAiAvAAFtLwACICoW+wACIDZjGwACIDifAAIgOwACSCcAAiBAowACIDinAAIgOwABbTcAAiA7AAFtOwACIDsAAW0/AAIgOwABbUMAAiA2YxMAAiBcjwACIDZjKwACIGQDAAIgKvnTAAIgbmMbAAIgcg+zAAIgcwABOOcAAiBzAAFtSwACIHLFOwACIHMAAT1fAAIgcwACSCcAAiCLAAEuewACIIsAAW1PAAIgiwABbVMAAiCLAAFtVwACIHJn6wACIHMAAWCzAAIgbmMTAAIgptkPAAIgpwACSCcAAiCvAAFtbwACIK8AAW1zAAIgrwABbZ8AAiCmvdMAAiCnAAFtWwACIKYMcwACIKcAATzzAAIgpwABPPcAAiCnAAE9BwACIKcAATzbAAIgptuPAAIgphDHAAIgptBDAAIgpI8AAiBuYx8AAiDq8SMAAiDq8ScAAiDq3CsAAiDrAAE8hwACIOsAAT0DAAIg6wABbYsAAiDqqbsAAiBuYyMAAiEK8SMAAiEK8ScAAiBuYycAAiEWvc8AAiBuYysAAiEcAwACICpvuwACISZjGwACISoPswACISoPzwACISsAAkgnAAIhNwABbbsAAiE3AAFtvwACITcAAW3DAAIhJmMnAAIhRr3PAAIhJmMTAAIhTr3TAAIhTwABPPMAAiFPAAE87wACIU8AATz3AAIhTm3zAAIhTwABPQsAAiFPAAE9BwACIU8AATzbAAIhTwABPRcAAiFPAAE9EwACIU8AAT1rAAIhTqTvAAIhTtuTAAIhTwACSCcAAiGHAAFt2wACIUyPAAIhJmMfAAIhkmfrAAIhkwABPQ8AAiGTAAE9KwACIZMAAWAHAAIhkwABPZ8AAiEmYysAAiGoAwACICsAAW3vAAIhsmMbAAIhthunAAIhtrSzAAIhtwABbY8AAiGyYx8AAiHFcwACIbJjKwACIcwDAAIgKwABbfcAAiHWYxsAAiHaD0cAAiHbAAFXdwACIdqEgwACIdZjHwACIeobpwACIesAAW2PAAIh6rSzAAIh6wABbWcAAiHpewACIdZjEwACIgF3AAIiAwACSCcAAiILAAFt+wACIgsAAW3/AAIh1mMrAAIiFAMAAiArAAFuAwACIh5jGwACIiMAAT1nAAIiIrSzAAIiIwABbY8AAiIeYx8AAiIxcwACIh5jKwACIjsAAW4HAAIgKwABbgcAAiJCYxsAAiJGD0cAAiJGIasAAiJHAAFuCwACIkJjHwACIlcAAW2PAAIiVrSzAAIiVXsAAiJCYxMAAiJldwACIkJjKwACImwDAAIgKwABbg8AAiJ2YxsAAiJ4nwACInsAAkgnAAIigKMAAiJ4pwACInp1YwACInsAAW4TAAIiewABbhcAAiJ2YxMAAiKYjwACInZjKwACIqADAAIgKwABbhsAAiKqYxMAAiKtLwACIq4C/wACIq5lKwACIq4RewACIq4JGwACIqpjHwACIsYNowACIqpjKwACIswDAAIgKwABREcAAiLWYxsAAiLbAAJIJwACIt8AAURjAAIi1mMrAAIi5AADAAJI5wACIu8AAW4zAAIi8mMTAAIi9wABYFMAAiL3AAFgXwACIvcAAWBzAAIi9wABYFcAAiL3AAFgdwACIvcAAWBrAAIi9wABYIMAAiL3AAFgWwACIvJjKwACIxgAAwACSOsAAiMjAAFuOwACIyZjGwACIyifAAIjKwACSOsAAiMwowACIyinAAIjKwABbk8AAiMrAAFuUwACIysAAW5XAAIjKvNbAAIjJmMTAAIjTI8AAiMmYysAAiNUAwACIyMAAW5bAAIjXmMbAAIjYvRnAAIjYvRzAAIjXmMrAAIjbAMAAiMjAAFuXwACI3ZjHwACI3oJrwACI3ZjEwACI4L0VwACI4L0RwACI4IRSwACI3ZjKwACI5ADAAIjIwABbmMAAiOaYxMAAiOeawsAAiOfAAFuZwACI58AAW5rAAIjnwABbm8AAiOfAAFucwACI5pjKwACI7QDAAIjIwABbncAAiO+YxsAAiPCClMAAiPDAAFuewACI8L0ZwACI8L0cwACI8MAAW5/AAIjvmMfAAIj2gmvAAIj2g8bAAIjvmMTAAIj5vRXAAIj5vRHAAIj5hFLAAIj5SMAAiPkjwACI+YdXwACI+cAAW6fAAIjvmMrAAIkBAMAAiMjAAFurwACJA5jGwACJBMAAW57AAIkEwABbrMAAiQOYx8AAiQeCa8AAiQeDxsAAiQOYxMAAiQq9FcAAiQq9EcAAiQqEUsAAiQpIwACJCiPAAIkDmMrAAIkQAMAAiMjAAFuuwACJEpjGwACJE8AAW6/AAIkSmMfAAIkVgmvAAIkVg8bAAIkSmMTAAIkYvRXAAIkYvRHAAIkYhFLAAIkYSMAAiRgjwACJEpjKwACJHgDAAIjIwABbscAAiSCYx8AAiSGCa8AAiSCYxMAAiSOEUsAAiSO9EcAAiSO9FcAAiSCYysAAiScAAMAAkjvAAIkpquHAAIkqmMfAAIkrs7fAAIkrhX3AAIkrwABbtMAAiSu9kMAAiSu9KsAAiSqYxMAAiTG9hsAAiTG9NcAAiTG9McAAiTG9E8AAiTHAAEbjwACJMb0swACJMaHdwACJMaWUwACJMb0WwACJMb0KwACJMb0wwACJKpjKwACJPQDAAIkpwABbtcAAiT+YxsAAiUDAAJI7wACJQcAAW7bAAIlBwABbt8AAiUDAAFu0wACJQMAAV2/AAIk/mMfAAIlGvSrAAIlGpRDAAIlGwACSO8AAiUnAAFu4wACJP5jEwACJS70wwACJS70WwACJS70KwACJS6WUwACJS6HdwACJS70swACJP5jKwACJUgDAAIkpwABbucAAiVSYxsAAiVXAAFuewACJVbUlwACJVVvAAIlUmMTAAIlZvXzAAIlZvXjAAIlZI8AAiVSYysAAiV0AAMAAkZ3AAIlfvczAAIlgmMfAAIlhmwrAAIlhmxTAAIlhmwvAAIlhhYDAAIlhhiDAAIlhmwnAAIlgmMTAAIlomxrAAIlomzzAAIlovovAAIloq8nAAIlowACRncAAiW2+jMAAiW2+j8AAiW2+jsAAiW2+jcAAiWCYysAAiXIAAMAAkjzAAIl0vc7AAIl1mMbAAIl2h3zAAIl2hFfAAIl2vqrAAIl2gmvAAIl2wACSPMAAiXvAAFvCwACJdZjHwACJfYC9wACJfYUKwACJdZjEwACJgKG+wACJgMAAkjzAAImCwABbw8AAiYLAAFvNwACJgsAAW8bAAImCwABb28AAiYLAAFvEwACJgMAAW8XAAImAwABbyMAAiYDAAFvYwACJgMAAW9nAAIl1mMrAAImMAADAAJI9wACJjr3PwACJj5jGwACJkId8wACJj5jEwACJkr6hwACJksAAW97AAImSwABb68AAiZLAAFvtwACJj5jKwACJlwDAAImOwABb7sAAiZmYxMAAiZrAAFvhwACJmsAAW+LAAImawABb5MAAiZrAAFvnwACJmsAAW+XAAImawABb48AAiZrAAFvmwACJmsAAW+jAAImZmMrAAImjAMAAiY7AAFvxwACJpZjEwACJpsAAW+TAAImmwABb5sAAiabAAFvjwACJpsAAW+fAAImmwABb4cAAiabAAFvlwACJpsAAW+jAAImmwABb4sAAiaWYysAAia8AwACJjsAAW/PAAImxmMTAAImywABb5cAAibLAAFvkwACJssAAW+HAAImywABb48AAibLAAFvnwACJssAAW+bAAImywABb6MAAibLAAFviwACJsZjKwACJuwDAAImOwABcAMAAib2YxMAAib7AAFvmwACJvsAAW+fAAIm+wABb5MAAib7AAFvhwACJvsAAW+XAAIm+wABb48AAib7AAFvowACJvsAAW+LAAIm9mMrAAInHAMAAiY7AAFwBwACJyZjEwACJysAAW+TAAInKwABb4cAAicrAAFvlwACJysAAW+PAAInKwABb58AAicrAAFvmwACJysAAW+jAAInKwABb4sAAicmYysAAidMAwACJjsAAXALAAInVmMTAAInWwABb5MAAidbAAFvjwACJ1sAAW+HAAInWwABb4sAAidbAAFvmwACJ1sAAW+XAAInWwABb58AAidbAAFvowACJ1ZjKwACJ3wDAAImOwABcBsAAieGYxMAAieLAAFvnwACJ4sAAW+bAAIniwABb5MAAieLAAFvhwACJ4sAAW+XAAIniwABb48AAieLAAFvowACJ4sAAW+LAAInhmMrAAInrAADAAJI+wACJ7b8vwACJ7pjGwACJ768ywACJ7pjEwACJ8aJlwACJ7pjKwACJ8wAAwACSP8AAifWYxMAAifa/PgDAAJJAwACJ+MAAXAzAAIn5mMbAAIn6glLAAIn5mMTAAIn8wABBisAAifzAAEGawACJ/MAAQZPAAIn8wABBkcAAifzAAEGVwACJ/MAAQcjAAIn8wABBxsAAifmYysAAigQAwACJ+MAAXBXAAIoGmMbAAIoHJ8AAigfAAJJAwACKCSjAAIoHKcAAigfAAFwWwACKB6ISwACKB4R7wACKB8AAXBfAAIoHv5nAAIoHv0nAAIoHwABcGMAAigaYxMAAihMjwACKBpjKwACKFQAAwACSQcAAihfAAEFgwACKGJjGwACKGan4wACKGcAAQr3AAIoYmMjAAIocwABBCsAAihiYx8AAih6ArMAAihiYxMAAiiDAAEELwACKIKORwACKIMAAQQzAAIogocPAAIogrX7AAIogrXjAAIogobrAAIogob/AAIogovLAAIogv7XAAIogv7HAAIogv/HAAIogwABBGcAAiiDAAEEawACKIKLFwACKIMAAQTHAAIogwABBMMAAiiCjKMAAiiCjKcAAiiDAAEEfwACKIK1/wACKIK2BwACKIK2NwACKIMAAQSLAAIogwABBI8AAiiC/u8AAiiDAAEAXwACKIKI4wACKIK18wACKIK2KwACKIKNpwACKIKLPwACKIKLkwACKIKLswACKIK16wACKIK2HwACKIKNZwACKIMAAQSjAAIogoqzAAIogwABAEMAAiiCi4cAAiiDAAEEpwACKIKM5wACKIMAAQSvAAIogoyrAAIogwABBLsAAiiDAAEEywACKIKFowACKIKFlwACKIKOCwACKIMAAQTnAAIogogTAAIogwABBR8AAiiCjVsAAiiDAAEE9wACKIKEzwACKIMAAQT7AAIogwABACMAAiiC/uMAAiiCjV8AAiiC/9MAAiiCjJsAAiiDAAEE/wACKIMAAQUDAAIogwABBQcAAiiDAAEFCwACKIMAAQUjAAIogwABBQ8AAiiDAAEFFwACKIKOewACKIKOgwACKIMAAQUbAAIogozrAAIogoiTAAIogwABBS8AAiiDAAEACwACKIMAAQUzAAIogwABBUcAAiiDAAEEqwACKIKPOwACKIMAAQVLAAIogwABBM8AAiiCiQMAAiiCtgMAAiiCthMAAiiDAAEFVwACKIMAAQVfAAIogoabAAIogo5PAAIogonTAAIogonbAAIogocbAAIogokbAAIogoVbAAIogobzAAIogocHAAIogovPAAIogv7fAAIogv7LAAIogv4nAAIogwABBHMAAiiCiycAAiiC/d8AAiiC/esAAiiCjOMAAiiCjK8AAiiCjF8AAiiCjZMAAiiCtg8AAiiCtjsAAiiC/v8AAiiC/lsAAiiC/vsAAiiC/msAAiiCiOcAAiiChTMAAiiCiYMAAiiCjfsAAiiCtjMAAiiCjccAAiiCjasAAiiCi0cAAiiCi5cAAiiCi7cAAiiCia8AAiiCticAAiiCjY8AAiiCjUMAAiiCis8AAiiC/YMAAiiCi4sAAiiC/hsAAiiCjPMAAiiCjP8AAiiCiKMAAiiCjM8AAiiC/kcAAiiCiPcAAiiChacAAiiChZsAAiiCjhsAAiiC/csAAiiCiB8AAiiCincAAiiCjYcAAiiChVcAAiiChNsAAiiChQsAAiiC/psAAiiC/usAAiiCjYMAAiiC/wsAAiiCjLcAAiiCi3cAAiiC/mMAAiiC/RsAAiiC/n8AAiiCjh8AAiiCiIMAAiiC/g8AAiiCjssAAiiCjrMAAiiCjsMAAiiCiJsAAiiDAAEFJwACKIKFFwACKIL9pwACKIKMAwACKIKNHwACKIL9VwACKIKPQwACKIKPTwACKIKIvwACKIKJDwACKIKONwACKIK2GwACKIKObwACKIKK4wACKIKJIwACKIKJ3wACKIKO8wACKIKO6wACKIKL1wACKIL/7wACKIMAAQBrAAIogv1zAAIogv/XAAIogv1rAAIogwABBXMAAiiDAAEFYwACKIKLIwACKIKPFwACKIMAAQRvAAIogv3TAAIogozvAAIogohvAAIogo4/AAIogwABBVsAAiiCiHsAAiiChpcAAiiDAAEEkwACKIKOLwACKIKJUwACKIKJXwACKIKJZwACKIKNswACKIKJbwACKIKLqwACKIMAAQAbAAIogoebAAIogv4HAAIogv4vAAIogowrAAIogwABBO8AAiiDAAEE1wACKIKPnwACKIL+vwACKIL9/wACKIKPbwACKIKJHwACKIL9KwACKIKNJwACKIMAAQTfAAIogor3AAIogo4DAAIogoo/AAIogopLAAIogohbAAIogonrAAIogopnAAIogopXAAIogoofAAIogwABAHMAAiiC//cAAiiCjTsAAiiC/V8AAiiCiDMAAiiC/oMAAiiC/osAAiiC/pMAAiiC/TMAAiiDAAEFewACKIL9QwACKIKI6wACKIL9ewACKIL9wwACKIKFjwACKIL/rwACKIKKiwACKIL9SwACKIL9OwACKIKPXwACKIKI0wACKIKPkwACKIL98wACKIKGowACKIKGrwACKIKIAwACKIKJlwACKIL/5wACKIL+VwACKIL/6wACKIKIRwACKIKGuwACKIKNCwACKIKITwACKIKIFwACKIKNMwACKIKPlwACKIKNLwACKIKLMwACKIKKlwACKIKPPwACKIKMVwACKIKMSwACKIKMOwACKIK1mwACKIKLowACKIKK2wACKIMAAQQnAAIogoqfAAIogoUvAAIogoqTAAIoYmMrAAIs8AADAAJJCwACLPpjGwACLP8AAQWXAAIs+mMTAAItBwABBY8AAi0HAAEFkwACLPsAAQWLAAItEmMbAAItFwABClsAAi0XAAEKXwACLRJjEwACLSIMLwACLSMAAQpjAAItEmMrAAItLAADAAJJDwACLTcAAQWbAAItOmMbAAItPJ8AAi0/AAJJDwACLUSjAAItPKcAAi0/AAFwcwACLT8AAXB3AAItPwABcHsAAi06YxMAAi1cjwACLTpjKwACLWQAAwACSRMAAi1uYxMAAi1ydmcAAi1vAAEFnwACLXpjGwACLX6GUwACLX7+2wACLX8AAQBjAAItfoUfAAItfwABAA8AAi1/AAFwfwACLX6FIwACLX6LQwACLX6FGwACLX8AAXCDAAItfwABcIcAAi16YyMAAi2vAAEJBwACLa6FJwACLXpjHwACLbqFJwACLXpjEwACLcMAAQjfAAItwwABB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epjEwACMe8AAQa/AAIx6mMrAAIx9AMAAi/jAAFxowACMf5jEwACMgMAAQa/AAIx/mMrAAIyCAMAAjIK5lsAAjILAAFxpwACL+MAAXGrAAIyGmMTAAIyHwABBr8AAjIaYysAAjIkAAMAAkknAAIyLmMXAAIyMwABcecAAjIvAAFx+wACMjpjGwACMj8AAkknAAIyQsmTAAIyQpPPAAIyQr7LAAIyQtHzAAIyQtEDAAIyQwABcf8AAjJC4FMAAjJDAAFNVwACMkMAASFLAAIyQwABRuMAAjJDAAFOtwACMkMAAXIDAAIyQwABT6MAAjJDAAFyBwACMkLvGwACMkLgTwACMkMAAXILAAIyQuBXAAIyQuFHAAIyQtiPAAIyQuHjAAIyQwABT/8AAjJC4U8AAjJDAAFf1wACMkMAASVPAAIyQwABXSMAAjJDAAFyDwACMkMAAXITAAIyQwABchcAAjJCb78AAjJDAAFyGwACMkMAAXIfAAIyQwABciMAAjJDAAFyJwACMj6gmwACMjpjHwACMtMAAkknAAIy1wABXH8AAjI6YxMAAjLfAAFyKwACMt8AAkknAAIy5wABcqMAAjLnAAFyMwACMucAAXK7AAIy5wABcr8AAjLnAAFyjwACMucAAXL/AAIy5wABcpsAAjLnAAFzDwACMucAAXMHAAIy5wABcxsAAjLnAAFzCwACMucAAXMvAAIy5wABcwMAAjLnAAFygwACMucAAXMzAAIy5wABc4sAAjLnAAFyWwACMucAAXQDAAIy5wABdAcAAjLnAAF0CwACMucAAXOrAAIy5wABdC8AAjLnAAF0NwACMucAAXPLAAIy5wABcz8AAjLnAAFyywACMucAAXN3AAIy5wABc4cAAjLnAAFzewACMucAAXNzAAIy5wABck8AAjLnAAFyVwACMt8AAXKnAAIyOmMrAAIzbAMAAjIvAAF0jwACM3ZjGwACM3sAAkknAAIzfsmTAAIzftHzAAIzfr7LAAIzftEDAAIzfwABcf8AAjN+4FcAAjN/AAERHwACM38AASFLAAIzfwABTrcAAjN+7xsAAjN+2I8AAjN/AAFyDwACM38AAXILAAIzfwABX9cAAjN60u8AAjN7AAFzkwACM3sAAXI7AAIzewABcksAAjN7AAFyQwACM3sAAXJTAAIzewABdJMAAjN7AAFywwACM3sAAWdfAAIzdmMTAAIz3wABcnsAAjPfAAF0mwACM98AAXSrAAIz3wABdK8AAjPfAAF0twACM98AAXTLAAIz3wABdNMAAjPfAAF07wACM98AAUh3AAIzdmMrAAI0BAMAAjIvAAF08wACNA5jGwACNBMAAkknAAI0FsmTAAI0Fr7LAAI0FtHzAAI0FwABcf8AAjQXAAEhSwACNBbgVwACNBbYjwACNA5jEwACNDcAAXR3AAI0NwABdQMAAjQ3AAF1BwACNDcAAXUPAAI0NwABdQsAAjQOYysAAjRMAwACMi8AAXUTAAI0VmMbAAI0WhIjAAI0WhJTAAI0VmMrAAI0ZAMAAjIvAAF1FwACNG5jGwACNHMAAkknAAI0dnL/AAI0dwABdRsAAjR3AAF1HwACNHIC9wACNHLQCwACNG5jEwACNI8AAkknAAI0kwABdSMAAjSOEl8AAjSOElsAAjSOD/cAAjRuYx8AAjSlhwACNG5jKwACNK4HpwACNK5o1wACMi8AAXUnAAI0umMbAAI0vwACSScAAjTCzqMAAjTDAAFf1wACNMMAAXUrAAI0wwABdS8AAjTDAAF1MwACNMMAAXU3AAI0vwABcocAAjS6Yx8AAjTjAAFyqwACNOMAAXKXAAI04wABcp8AAjS6YxMAAjTzAAJJJwACNPcAAXU7AAI08wABcjcAAjTzAAFyPwACNPMAAXJHAAI08wABdIMAAjTzAAFzHwACNLpjKwACNRAAAwACSSsAAjUbAAF1SwACNR5jGwACNSMAAkkrAAI1JuBXAAI1HmMTAAI1LwABdU8AAjUvAAF1VwACNS8AAXVbAAI1LwABEWsAAjUvAAERYwACNS8AARFbAAI1LwABEV8AAjUvAAERUwACNS8AARFvAAI1LwABEXMAAjUvAAERdwACNS8AARFnAAI1LwABEX8AAjUeYysAAjVkAwACNRsAARgHAAI1bmMbAAI1cwACSSsAAjV3AAElTwACNXcAAXVnAAI1bmMTAAI1gsAXAAI1gsAfAAI1bmMrAAI1jAMAAjUbAAF1bwACNZZjGwACNZsAAkkrAAI1npPPAAI1ntiPAAI1nwABT6MAAjWfAAFyBwACNZ7hRwACNZ8AAREfAAI1mwABEYMAAjWWYx8AAjW/AAJJKwACNcLgVwACNZZjEwACNcsAARFPAAI1ywABEYsAAjXLAAERlwACNcsAARGTAAI1ysAXAAI1ysAfAAI1ywABEY8AAjXLAAERhwACNcrTIwACNZZjKwACNfAAAwACSS8AAjX7AAF1kwACNf5jHwACNgIPUwACNgICWwACNgMAAkkvAAI2DwABJ5MAAjX+YxMAAjYXAAEb4wACNf5jKwACNhwDAAI1+wABdZcAAjYmYxsAAjYrAAJJLwACNi5c4wACNi8AASeTAAI2Kg9TAAI2JmMfAAI2PwABITcAAjY+AlsAAjY/AAEidwACNiZjEwACNk6G+wACNk8AARvjAAI2Tgk/AAI2TI8AAjYmYysAAjZgAwACNfsAAXWnAAI2amMbAAI2bwACSS8AAjZyXOMAAjZqYxMAAjZ7AAF1qwACNmpjHwACNoICWwACNoLAxwACNmpjKwACNowDAAI1+nqPAAI2lmMbAAI2mwACSS8AAjaeyZMAAjafAAERHwACNp8AAU+jAAI2nwABcgcAAjaevssAAjafAAF1rwACNp8AAXWzAAI2nwABdbcAAjafAAF1uwACNpqUQwACNpZjEwACNssAAXW/AAI2ywABdcMAAjbLAAF1xwACNssAAXRHAAI2ywABddMAAjbLAAF11wACNssAAkkvAAI25wABdcsAAjbnAAF14wACNucAAXXzAAI2ywABdc8AAjbLAAEb1wACNpZjKwACNvwAAwACSTMAAjcHAAF2DwACNwpjGwACNw8AASNbAAI3DwABcqsAAjcPAAFywwACNw8AAXKvAAI3DwABcscAAjcPAAFy7wACNw8AAXYTAAI3DwACSTMAAjcvAAF2FwACNw8AAXKzAAI3CmMTAAI3OwABdhsAAjc7AAF2HwACNwpjHwACN0cAAXYjAAI3RwABcpMAAjdHAAFyiwACNwpjKwACN1QDAAI3BwABdicAAjdeYxsAAjdiAvcAAjdgnwACN2MAAXSLAAI3YwABcyMAAjdeYxMAAjd0jwACN15jKwACN3wDAAI3BwABdi8AAjeGYxsAAjeK0AsAAjeKG6sAAjeKZYsAAjeLAAFzFwACN4sAAXYzAAI3iwABdjcAAjeGYx8AAjenAAF2OwACN4ZjKwACN6wDAAI3BwABdj8AAje2YxsAAje7AAF2QwACN7ZjHwACN8MAAXY7AAI3tmMTAAI3yI8AAje2YysAAjfQAwACNwcAAXZLAAI32mMbAAI33gL3AAI32mMfAAI35wABdjsAAjfaYxMAAjfsjwACN9pjKwACN/QDAAI3Bhq7AAI3/mMbAAI4AgL3AAI4AwABSG8AAjgCAlsAAjf+YxMAAjgQjwACN/5jKwACOBgDAAI3BwABdlcAAjgiYx8AAjgnAAFzgwACOCJjKwACOCwDAAI3BhHvAAI4NmMbAAI4OllLAAI4OgKzAAI4OwABc28AAjg6EiMAAjg7AAFzgwACODZjEwACOFCPAAI4NmMrAAI4WAMAAjcHAAEMHwACOGJjGwACOGZZSwACOGYC9wACOGcAASE7AAI4ZwABSG8AAjhmCl8AAjhmEIMAAjhnAAE2/wACOGcAAXMnAAI4YmMTAAI4iI8AAjhiYysAAjiQAwACNwYTXwACOJpjGwACOJ5ZSwACOJ4C9wACOJ8AAUhvAAI4nwACSTMAAjivAAF2ZwACOK8AAXZrAAI4nwABI4cAAjieEi8AAjie8FMAAjifAAF2bwACOJ7wVwACOJ8AAXPjAAI4nwABczsAAjifAAFzuwACOJ8AAXODAAI4nwABc5cAAjifAAFzjwACOJ7xIwACOJ4ZdwACOJ8AAXObAAI4nwABc/8AAjiezjcAAjifAAFz+wACOJ8AATbrAAI4nwABdnMAAjifAAF2dwACOJ8AAXZ7AAI4mmMfAAI5DwABcmcAAjkOE88AAjkOuCcAAjkPAAF2fwACOQ8AAXaDAAI4mmMTAAI5JwABcl8AAjknAAFybwACOSSPAAI4mmMrAAI5NAMAAjcHAAF2iwACOT5jHwACOUMAAXJnAAI5PmMTAAI5SI8AAjk+YysAAjlQAwACNwYUSwACOVpjGwACOV5ZSwACOV4C9wACOV8AAXHrAAI5XwABdGsAAjlfAAF0bwACOV8AAXH3AAI5XwABdHMAAjlfAAE2RwACOV8AASODAAI5WmMfAAI5hwABce8AAjmHAAFz6wACOYcAAXaTAAI5hwABdpcAAjmHAAF2mwACOYcAAXafAAI5hwABdqMAAjmHAAF2pwACOVpjEwACOaiPAAI5WmMrAAI5sAMAAjcGFTsAAjm6YxsAAjm+WUsAAjm+AvcAAjm+Cl8AAjm6YysAAjnMAwACNwcAAXavAAI51mMbAAI52wABdDsAAjnbAAF0FwACOdsAAXazAAI52wABdCMAAjnbAAF0MwACOdoVKwACOdoUuwACO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iYXzwACPiYX2wACPiYX9wACPiYYHwACPiYYJwACPiYYLwACPiYWNwACPiYWawACPiYWewACPiYYBwACPiYWqwACPiYWswACPiYWowACPiYYFwACPiYYDwACPiYXIwACPiYXDwACPiYXNwACPiYXqwACPiYX/wACPiYYTwACPiYYZwACPiYYbwACPiYWIwACPiYYewACPiYYWwACPhZjHwACPsIbdwACPsITJwACPhZjKwACPswAAwACSUsAAj7WYxMAAj7bAAJJSwACPt8AAXwbAAI+1wABeCMAAj7mYxsAAj7rAAF4JwACPusAAXgrAAI+6wABeC8AAj7rAAF4MwACPusAAXg3AAI+6wABeDsAAj7rAAF4PwACPusAAU+PAAI+6wABeEMAAj7rAAF4RwACPusAAXhLAAI+6wABeE8AAj7rAAF4UwACPusAARh/AAI+6wABeFcAAj7rAAF4WwACPusAARiHAAI+6wABeF8AAj7rAAF4YwACPusAAXhnAAI+6wABeGsAAj7rAAF4bwACPusAAXhzAAI+6wABeHcAAj7rAAF4ewACPusAAXh/AAI+6pRDAAI+6wACSUsAAj9bAAFu4wACP1sAAXiDAAI+6wABeIcAAj7rAAF4iwACPusAAXiPAAI+6wABeJMAAj7rAAF4lwACPusAAXibAAI+6wABeJ8AAj7rAAF4owACPusAAXinAAI+6wABeKsAAj7mYx8AAj+OBdsAAj+O6q8AAj+NVwACP44O1wACP48AAR1DAAI/jwABeK8AAj+OZsMAAj+OlkcAAj+OGP8AAj+PAAF4swACP48AAXi3AAI/jwABeMMAAj7mYxMAAj/DAAF4uwACP8LmlwACP8MAAXjHAAI/wwABeMsAAj/DAAEn2wACP8MAAXjTAAI/wwABeNcAAj/DAAF42wACP8MAAXjfAAI/wwABeOMAAj/CjysAAj/CGKMAAj/DAAF46wACP8MAAXjvAAI/wnPzAAI/wwABI48AAj/DAAF5AwACP8MAAXkHAAI/wwABeQsAAj/DAAJJSwACQBMAAXkPAAJAEwABej8AAj/DAAF5FwACP8MAAXkjAAI/wwABeSsAAj/DAAF5LwACP8MAAXk3AAI/wwABeTsAAj/DAAF5PwACP8KFuwACP8MAAXlPAAI/wwABeL8AAj/Cw/MAAj/Cw/sAAj/Cw7sAAj/Cw78AAj/CxCcAAj/DAAF5ewACP8LDpwACP8MAAXmHAAI/wsQTAAI/whifAAI/wsRnAAI/wsQXAAI/wsRPAAI/whlXAAI/wsOjAAI/wsQfAAI/wsRvAAI/wo8PAAI/wwABeZsAAj/CxEsAAj/CxHMAAj/CGLMAAj/CGI8AAj/CxH8AAj/CxHsAAj/CGacAAj/DAAF5+wACP8MAAXnDAAI/wwABegcAAj/CxIMAAj/Cw5sAAj/Cw3cAAj/Cw5MAAj/Cw4sAAj/Cw4cAAj/Cw38AAj/CGMsAAj/Cw9sAAj/CxDsAAj/Cw88AAj/Cw9MAAj/CxEcAAj/Cw9cAAj/CF0cAAj/CGbsAAj/Cw8MAAj/Cw/cAAj/Cw+8AAj/Cw+cAAj/Cw98AAj/CxBsAAj/Cw7MAAj/Cw/8AAj/CxAsAAj/CxA8AAj/CxIcAAj/Cw68AAj/Cw6sAAj/CxGMAAj/CxFMAAj/CxAMAAj/CGBcAAj/DAAF6OwACP8LEVwACP8IZnwACP8LEMwACP8LEIwACP8LEBwACP8LEdwACP8MAAXqDAAI/wsQ/AAI+5mMrAAJBYAMAAj7XAAF6iwACQWpjGwACQW8AAXqPAAJBbwABGGsAAkFvAAEYbwACQW8AARhzAAJBbwABGHcAAkFvAAEYYwACQW8AARh7AAJBbsajAAJBamMfAAJBkhj/AAJBkwABepMAAkFqYxMAAkGfAAF6gwACQZ8AAXk7AAJBnwABeTcAAkGfAAF5TwACQZ8AAXi7AAJBnwABeXsAAkGehbsAAkFqYysAAkG8AwACPtcAAXr3AAJBxmMbAAJBywABGI8AAkHLAAEYkwACQcrGuwACQcsAARiXAAJBywABGJsAAkHGYx8AAkHjAAF4swACQcZjEwACQesAAXqDAAJB6oW7AAJB6wABeTsAAkHrAAF5NwACQesAAXlPAAJB6wABeXsAAkHrAAF4uwACQcZjKwACQggDAAI+1wABe2MAAkISYxsAAkIXAAF7ZwACQhcAAXtrAAJCFsazAAJCFwABGJ8AAkIXAAEYowACQhbGtwACQhcAARinAAJCFwABGJcAAkIWxqMAAkISYx8AAkI/AAF4twACQj8AAXtvAAJCPwABe3MAAkISYxMAAkJPAAF6gwACQk6FuwACQk8AAXk7AAJCTwABeTcAAkJPAAF5TwACQk8AAXi7AAJCTwABeXsAAkISYysAAkJsAwACPtcAAXv7AAJCdmMbAAJCewABePMAAkJ6HoMAAkJ7AAF7/wACQnsAAXwDAAJCehDXAAJCewABeVcAAkJ6pf8AAkJ7AAF5ZwACQnsAAXljAAJCewABfAcAAkJ6c/MAAkJ2YxMAAkKqawsAAkKrAAEqewACQqrD+wACQqrDuwACQqrDvwACQqrEJwACQqrDpwACQqrEEwACQqoYnwACQqrEZwACQqrEFwACQqrETwACQqoZVwACQqrDowACQqrEHwACQqrEbwACQqrESwACQqrEcwACQqoYswACQqoYjwACQqrEfwACQqrEewACQqrD8wACQqoZpwACQqrEgwACQqrDmwACQqrDdwACQqrDkwACQqrDiwACQqrDhwACQqrDfwACQqoYywACQqrD7wACQqrD5wACQqrD3wACQqrD2wACQqrEOwACQqrDzwACQqrD0wACQqrERwACQqrD1wACQqoXRwACQqoZuwACQqrDwwACQqrD9wACQqrEGwACQqrDswACQqrD/wACQqrECwACQqrEDwACQqrEhwACQqrDrwACQqrDqwACQqrEYwACQqrEUwACQqrEAwACQqoYFwACQqrEVwACQqoZnwACQqrEMwACQqrEIwACQqrEBwACQqrEdwACQqrEPwACQnZjKwACQ6wAAwACSU8AAkO3AAF8IwACQ7pjHwACQ74C9wACQ7pjEwACQ8blpwACQ7pjKwACQ8wDAAJDtwABfCcAAkPWYxsAAkPbAAJJTwACQ97JkwACQ9q9nwACQ9ZjHwACQ+oC9wACQ9ZjEwACQ/MAAXwvAAJD8uDnAAJD8wABfDMAAkPzAAF8NwACQ9ZjKwACRAQDAAJDtwABRYsAAkQOYxsAAkQTAAF8PwACRBMAAXxDAAJEEwABfEcAAkQTAAF8SwACRBMAAklPAAJEJwABfE8AAkQmyZMAAkQnAAERHwACRCcAAXxTAAJEJwABSS8AAkQnAAFPowACRCcAAXIHAAJEJuBXAAJEJwABT58AAkQm2I8AAkQnAAElTwACRBMAAXxXAAJEEwABfFsAAkQTAAF8XwACRBMAAXxjAAJEEwABfGcAAkQSau8AAkQTAAF8awACRBMAAXxvAAJEEwABfHMAAkQTAAF8dwACRBMAAXx7AAJEEwABfH8AAkQTAAF8gwACRBMAAXyHAAJEEwABfIsAAkQS7TsAAkQTAAF8jwACRA5jHwACRJoJtwACRJsAAklPAAJEotHzAAJEowABIUsAAkSjAAFOtwACRKMAAU/7AAJEDmMTAAJEtwABfJMAAkS3AAF8lwACRLcAAXyfAAJEtwABfK8AAkS3AAF8swACRLcAAXy3AAJEtwABfLsAAkS2hEcAAkS2hFMAAkS3AAF8vwACRLcAAXzbAAJEtwACSU8AAkTnAAF84wACROcAAX5bAAJE5wABf4sAAkS25acAAkS3AAF87wACRLaztwACRLcAAX0LAAJEtwABfQ8AAkS3AAF9EwACRLcAAX0XAAJEtwABfR8AAkS3AAF9IwACRLYWwwACRLcAAX03AAJEtwABfTsAAkS3AAF9PwACRLcAAX1DAAJEtr5XAAJEtmsLAAJEtwABeQsAAkS3AAF5AwACRLcAAX1LAAJEtwABfU8AAkS3AAF9UwACRLcAAX1XAAJEtu0TAAJEtu0bAAJEtu0fAAJEtu0jAAJEtu0vAAJEtu0rAAJEtu0XAAJEtwABfWcAAkS27Q8AAkS27QsAAkS3AAF9rwACRLcAAX3TAAJEtwABfP8AAkS3AAF92wACRLcAAX3jAAJEtwABfesAAkS3AAF9ewACRLcAAX3fAAJEtwABfhcAAkS25EMAAkS25bcAAkS25dsAAkS3AAF+HwACRLblywACRLcAAX4jAAJEtwABficAAkS25AsAAkS248MAAkS24+MAAkS25GcAAkS25KMAAkS248cAAkS248sAAkS2488AAkS249MAAkS25IsAAkS25I8AAkS25KsAAkS25IcAAkS25GsAAkS2478AAkS25EsAAkS25E8AAkS25AMAAkS25AcAAkS24+cAAkS24/8AAkS25GMAAkS2xGcAAkS2xG8AAkS24+sAAkS2xFcAAkS3AAF+SwACRLcAAX5TAAJEtsSDAAJEtuQXAAJEtuQjAAJEtuQzAAJEtuQ3AAJEtuRvAAJEtwABfnMAAkS3AAF+ZwACRLcAAX5vAAJEtwABfmsAAkS25CcAAkS25B8AAkS25BsAAkS25CsAAkS25C8AAkS24+8AAkS24/MAAkS24/sAAkS25H8AAkS25FcAAkS25FsAAkS3AAF+owACRLbj9wACRLbj2wACRLbj3wACRLcAAX2fAAJEtwABfq8AAkS2GF8AAkS2Fw8AAkS3AAF+twACRLcAAX5XAAJEtuRzAAJEtuRfAAJEtuR3AAJEtsRjAAJEtsQDAAJEthgXAAJEtsOnAAJEtuS/AAJEtuR7AAJEtuPXAAJEtwABftcAAkS25KcAAkS2xFMAAkS25JMAAkS25EcAAkS25JcAAkS25JsAAkS25J8AAkS25FMAAkS3AAF++wACRLbkDwACRLbkEwACRLbM3wACRLcAAX8DAAJEtwABfxMAAkS2zOMAAkS3AAF/FwACRLbM5wACRLcAAX8bAAJEtwABfyMAAkS3AAF/LwACRLcAAX8zAAJEtwABfzcAAkS3AAF/OwACRLcAAX9DAAJEtwABf0cAAkS3AAF/TwACRLcAAX9TAAJEtwABf1cAAkS2pN8AAkS3AAF/WwACRLcAAX9fAAJEtwABf2cAAkS3AAF/ewACRLcAAX9/AAJEtuQ7AAJEtuQ/AAJEtwABfssAAkS3AAF+zwACRLbkrwACRLbkswACRLbktwACRLbkuwACRLbkwwACRLbkxwACRLbkywACRLcAAX+XAAJEtuSDAAJEtuTPAAJEtuTTAAJEtuTXAAJEtuTbAAJEtuTfAAJEtuTjAAJEtuTnAAJEtuTrAAJEDmMrAAJHqAADAAJJUwACR7JjEwACR7cAAYLvAAJHswABf78AAke+Yx8AAkfCAvcAAke+YxMAAkfK5acAAke+YysAAkfQAwACR7MAAX/DAAJH2mMbAAJH3wACSVMAAkfiyZMAAkffAAF/xwACR98AAX/LAAJH2mMfAAJH8gL3AAJH2mMTAAJH+wABGB8AAkfaYysAAkgAAwACR7MAAX/zAAJICmMbAAJIDwABf/cAAkgOAvcAAkgPAAJJUwACSBrSWwACSBrJkwACSBsAAUkvAAJIGtiPAAJIGwABJU8AAkgbAAF/+wACSBsAAX//AAJICmMfAAJIOs7fAAJIOwACSVMAAkhDAAFP+wACSEMAASFLAAJICmMTAAJITuWnAAJITuT7AAJITwABgAMAAkhPAAJJUwACSF8AAYArAAJIXwABgCcAAkhfAAGALwACSF8AAYDbAAJITuUTAAJITwABgDcAAkhPAAGAOwACSE7kcwACSE4XDwACSE7lywACSE8AAYBDAAJITwABgEcAAkhPAAGAUwACSE8AAYBbAAJITuQjAAJITwABgHMAAkhO49cAAkhPAAGAVwACSE7jwwACSE7kZwACSE7ltwACSE7l2wACSE8AAYCfAAJITuQLAAJITwABgK8AAkhOxIMAAkhO5DsAAkhO5K8AAkhO5LMAAkhO5LcAAkhO5LsAAkhPAAGAwwACSE7j7wACSE7j+wACSE7kDwACSE7kHwACSE7kJwACSE7kGwACSE7kKwACSE8AAYDnAAJITuSbAAJITuSfAAJITuRvAAJITwABgP8AAkhO5MsAAkhO5McAAkhO5OcAAkhO5NMAAkhO5NcAAkhO5M8AAkhO5OMAAkgKYysAAkksAwACR7MAAYEzAAJJNmMbAAJJOwABf9MAAkk6CzcAAkk6lIsAAkk6AvcAAkk6kYcAAkk2Yx8AAklTAAJJUwACSVcAAU/7AAJJNmMTAAJJXuWnAAJJXuT7AAJJXwABgTcAAkle5A8AAkle5BMAAkle5CMAAkk2YysAAkl4AwACR7MAAYFHAAJJgmMbAAJJhgL3AAJJhpSLAAJJhwABGBcAAkmHAAJJUwACSZcAAX//AAJJhnRrAAJJhwABgUsAAkmHAAF/6wACSYcAAYFPAAJJgmMfAAJJrwACSVMAAkmzAAFP+wACSa8AAYFTAAJJgmMTAAJJvwABgVcAAkm/AAGBWwACSb8AAYFjAAJJvwABgW8AAkm/AAGBawACSb7lpwACSb7k+wACSb8AAYF/AAJJvwABgXcAAkm/AAGBkwACSb8AAYGDAAJJvwABgXMAAkm/AAGBnwACSb8AAYF7AAJJvwABgasAAkmCYysAAkn8AwACR7MAAYGvAAJKBmMbAAJKCpGHAAJKCwABgbMAAkoKbuMAAkoLAAEYFwACSgqUiwACSgZjHwACSiMAAklTAAJKJwABT/sAAkojAAF/xwACSgZjEwACSjMAAYFfAAJKMwABKnsAAkozAAGBtwACSjLl0wACSjLEgwACSjLEUwACSgZjKwACSkwDAAJHswABgcsAAkpWYxsAAkpaAvcAAkpWYxMAAkpi5acAAkpWYysAAkpoAwACR7MAAYHTAAJKcmMbAAJKdgL3AAJKcmMTAAJKfuWnAAJKcmMrAAJKhAMAAkezAAGB1wACSo5jGwACSpJoywACSpMAAYHbAAJKjmMrAAJKnAMAAkezAAGB3wACSqZjGwACSqsAAklTAAJKrwABT/sAAkqqAvcAAkqqvBsAAkqrAAGB4wACSqsAAYHnAAJKpmMTAAJKxuWnAAJKxwABge8AAkrHAAGB9wACSscAAYILAAJKxuT7AAJKxwABgesAAkrHAAGCGwACSqZjKwACSuQDAAJHswABgh8AAkruYxsAAkrzAAJJUwACSvcAAU/7AAJK8gL3AAJK8wABf+cAAkrwpwACSu5jEwACSwrlpwACSwrk+wACSu5jKwACSxQDAAJHswABgjMAAkseYxsAAksiAvcAAksilIsAAkseYx8AAksvAAJJUwACSzMAAU/7AAJLHmMTAAJLOuWnAAJLOwABgjsAAks65DsAAks65M8AAks65AsAAks7AAGCTwACSx5jKwACS1QDAAJHswABglMAAkteYxsAAktjAAJJUwACS2bYjwACS2bh4wACS2cAAX//AAJLYgL3AAJLYwABglcAAktjAAGCWwACS2MAAX/vAAJLXmMfAAJLhwACSVMAAkuLAAFP+wACS15jEwACS5LlpwACS5Lk+wACS5MAAYJjAAJLkuPvAAJLkuP7AAJLkwACSVMAAkurAAGCawACS5Lj8wACS5Lj2wACS5MAAYKDAAJLkuUTAAJLkuRHAAJLkwABgpMAAkuS5JMAAkuS5JcAAkuS5FMAAkuS5A8AAkuS5BMAAkuS5bMAAkuS49cAAkuSGF8AAkuSxIMAAkuS5BcAAkuS5DsAAkuS5D8AAkuSFw8AAkuS5HMAAkuS5dsAAkuS5JsAAkuS5LsAAkuS5MMAAkuS5McAAkuS5MsAAkteYysAAkwYAwACR7MAAYKjAAJMImMbAAJMJJ8AAkwnAAJJUwACTCyjAAJMJKcAAkwlhwACTCJjEwACTDyPAAJMImMrAAJMRAMAAkezAAGCpwACTE5jGwACTFKUiwACTFIXjwACTFMAAYKrAAJMUwABgq8AAkxOYx8AAkxnAAJJUwACTGsAAU/7AAJMTmMTAAJMcwABgrMAAkxzAAGCtwACTHIQgwACTHMAAYK7AAJMctbjAAJMcwABgr8AAkxzAAGCfwACTHMAAYJ7AAJMcwABgncAAkxzAAGCbwACTHMAAYKHAAJMcwABgpcAAkxzAAGCmwACTHMAAYKfAAJMcwABgtcAAkxzAAGCXwACTHJ7vwACTE5jKwACTLgAAwACRe8AAkzCYxcAAkzHAAGDDwACTMcAAYMTAAJMwmMbAAJM0wABicMAAkzSChcAAkzCYxMAAkzeD8cAAkzfAAFFowACTN8AAUmnAAJM3wABSd8AAkzfAAFJ2wACTN8AAUg/AAJM3wABhNsAAkzfAAGE3wACTN8AAYTjAAJM3wABhOcAAkzfAAGJxwACTN69FwACTMMAAYMXAAJNEmMTAAJNFsSHAAJNFhifAAJNFhiPAAJNFhizAAJNFsSDAAJNFsR/AAJNFsR7AAJNFsR3AAJNFsRzAAJNFsRvAAJNFsRnAAJNFsRjAAJNFhgXAAJNFsRXAAJNFhlXAAJNFsRTAAJNFsRPAAJNFsRLAAJNFhmnAAJNFhjLAAJNFsRHAAJNFsQ/AAJNFsQ7AAJNFsQzAAJNFsQnAAJNFsQjAAJNFsQfAAJNFsQbAAJNFsQXAAJNFsQTAAJNFsQPAAJNFsQLAAJNFsQHAAJNFsQDAAJNFhmfAAJNFsP/AAJNFsP7AAJNFsP3AAJNFsPzAAJNFsPvAAJNFsPnAAJNFsPfAAJNFsPbAAJNFsPXAAJNFsPTAAJNFsPPAAJNFhdHAAJNFhm7AAJNFsPDAAJNFsO/AAJNFsO7AAJNFsOzAAJNFsOvAAJNFsOrAAJNFsOnAAJNFsOjAAJNFsObAAJNFsOTAAJNFsOLAAJNFsOHAAJNFsN/AAJNFsN3AAJNEmMrAAJOEAMAAkzDAAGDHwACThpjEwACTh8AARvfAAJOHsSHAAJOHwABeQMAAk4fAAGDIwACTh7l4wACTh4YnwACTh4YjwACTh4YswACTh7EgwACTh7EfwACTh7EewACTh7EdwACTh7EcwACTh7EbwACTh7EZwACTh7EYwACTh4YFwACTh7EVwACTh7EUwACTh4ZpwACTh4YywACTh7ERwACTh4ZVwACTh7ETwACTh7ESwACTh8AAXkLAAJOHwABgycAAk4exDsAAk4exDMAAk4exCcAAk4exCMAAk4exB8AAk4exBsAAk4exBcAAk4exBMAAk4exA8AAk4exAsAAk4ew/sAAk4exAcAAk4eGZ8AAk4ew/8AAk4exAMAAk4ew/cAAk4ew/MAAk4fAAGDKwACTh7D7wACTh7D5wACTh7D3wACTh8AAYMvAAJOHsPbAAJOHsPXAAJOHsPTAAJOHsPPAAJOHhdHAAJOHhm7AAJOHsPDAAJOHsO/AAJOHsO7AAJOHsOzAAJOHsOvAAJOHsOrAAJOHwABgzMAAk4ew5sAAk4ew5MAAk4ew4sAAk4ew4cAAk4ew38AAk4ew3cAAk4ew6MAAk4ew6cAAk4exD8AAk4aYysAAk88AwACTMMAAYM3AAJPRmMTAAJPSsSHAAJPShifAAJPShiPAAJPShizAAJPSsSDAAJPSsR/AAJPSsR7AAJPSsR3AAJPSsRzAAJPSsRvAAJPSsRnAAJPSsRjAAJPShgXAAJPSsRXAAJPShlXAAJPSsRTAAJPSsRPAAJPSsRLAAJPShmnAAJPShjLAAJPSsRHAAJPSsQ/AAJPSsQ7AAJPSsQzAAJPSsQnAAJPSsQjAAJPSsQfAAJPSsQbAAJPSsQXAAJPSsQTAAJPSsQPAAJPSsQLAAJPSsQHAAJPSsQDAAJPShmfAAJPSsP/AAJPSsP7AAJPSsP3AAJPSsPzAAJPSsPvAAJPSsPnAAJPSsPfAAJPSsPbAAJPSsPXAAJPSsPTAAJPSsPPAAJPShdHAAJPShm7AAJPSsPDAAJPSsO/AAJPSsO7AAJPSsOzAAJPSsOvAAJPSsOrAAJPSsOnAAJPSsOjAAJPSsObAAJPSsOTAAJPSsOLAAJPSsOHAAJPSsN/AAJPSsN3AAJPRmMrAAJQRAMAAkzDAAGDOwACUE5jEwACUFMAARvfAAJQUsSHAAJQUwABeQMAAlBTAAGDIwACUFLl4wACUFIYnwACUFIYjwACUFIYswACUFLEgwACUFLEfwACUFLEewACUFLEdwACUFLEcwACUFLEbwACUFLEZwACUFLEYwACUFIYFwACUFLEVwACUFLEUwACUFIZpwACUFIYywACUFLERwACUFIZVwACUFLETwACUFLESwACUFMAAXkLAAJQUwABgycAAlBSxDsAAlBSxDMAAlBSxCcAAlBSxCMAAlBSxB8AAlBSxBsAAlBSxBcAAlBSxBMAAlBSxA8AAlBSxAsAAlBSw/sAAlBSxAcAAlBSGZ8AAlBSw/8AAlBSxAMAAlBSw/cAAlBSw/MAAlBTAAGDKwACUFLD7wACUFLD5wACUFLD3wACUFMAAYMvAAJQUsPbAAJQUsPXAAJQUsPTAAJQUsPPAAJQUhdHAAJQUhm7AAJQUsPDAAJQUsO/AAJQUsO7AAJQUsOzAAJQUsOvAAJQUsOrAAJQUwABgzMAAlBSw5sAAlBSw5MAAlBSw4sAAlBSw4cAAlBSw38AAlBSw3cAAlBSw6MAAlBSw6cAAlBSxD8AAlBOYysAAlFwAwACTMLdgwACUXpjKwACUXwDAAJMwhFHAAJRhmMbAAJRiwACRe8AAlGPAAGDQwACUYZjHwACUZaWkwACUZcAAX2PAAJRhmMTAAJRohFLAAJRohFPAAJRohYXAAJRowABgz8AAlGjAAJF7wACUbbAlwACUaK/9wACUaMAAYNHAAJRowABg0sAAlGivT8AAlGGYysAAlHMAwACTMMAAXYPAAJR1mMbAAJR2gm3AAJR1mMTAAJR4hFLAAJR4hYXAAJR4hFPAAJR4wABgz8AAlHjAAJF7wACUfbAlwACUdZjKwACUfwDAAJMwggfAAJSBmMTAAJSCwABg0sAAlIGYysAAlIQAwACTMIYkwACUhpjGwACUh4YlwACUhpjEwACUiYRSwACUiYWFwACUiYRTwACUicAAYM/AAJSJwACRe8AAlI6wJcAAlIaYysAAlJAAwACUkIWuwACTMIYiwACUk5jGwACUlIJvwACUk5jEwACUloRSwACUloWFwACUloRTwACUlsAAYM/AAJSWwACRe8AAlJuwJcAAlJOYysAAlJ0AwACTMIYrwACUn5jEwACUoIRSwACUoIWFwACUoIRTwACUoMAAYM/AAJSgwACRe8AAlKWwJcAAlJ+YysAAlKcAwACTMMAAYNPAAJSpmMbAAJSqhcrAAJSqga/AAJSqhcvAAJSpmMfAAJSuwABg1cAAlKmYxMAAlLCEUsAAlLCFhcAAlLCEU8AAlLDAAGDPwACUsMAAkXvAAJS1sCXAAJSpmMrAAJS3AMAAlLfAAGDUwACTMMAAYNbAAJS6mMbAAJS7gm3AAJS6mMrAAJS9AMAAkzDAAGDXwACUv5jGwACUwKq1wACUwIXKwACUwKyXwACUv5jEwACUxIRSwACUxIWFwACUxIRTwACUxMAAYM/AAJTEwACRe8AAlMmwJcAAlL+YysAAlMsAwACTMKN/wACUzZjGwACUzrEKwACUzoPFwACUzZjEwACU0YRSwACU0YWFwACU0YRTwACU0cAAYM/AAJTRwACRe8AAlNawJcAAlM2YysAAlNgAwACTMMAAYNjAAJTamMbAAJTbhcrAAJTamMTAAJTdhFLAAJTdhYXAAJTdhFPAAJTdwABgz8AAlN3AAJF7wACU4rAlwACU2pjKwACU5ADAAJMwwABg2cAAlOaYxsAAlOeFysAAlOaYxMAAlOmEUsAAlOmFhcAAlOmEU8AAlOnAAGDPwACU6cAAkXvAAJTusCXAAJTmmMrAAJTwAMAAkzCtccAAlPKYxsAAlPOxGsAAlPKYxMAAlPWEUsAAlPWFhcAAlPWEU8AAlPXAAGDPwACU9cAAkXvAAJT6sCXAAJTymMrAAJT8AMAAkzCtcMAAlP6YxsAAlP+xGsAAlP6YxMAAlQGEUsAAlQGFhcAAlQGEU8AAlQHAAGDPwACVAcAAkXvAAJUGsCXAAJT+mMrAAJUIAMAAkzDAAGDawACVCpjGwACVC4CWwACVCpjEwACVDYRSwACVDYWFwACVDYRTwACVDcAAYM/AAJUNwACRe8AAlRKwJcAAlQqYysAAlRQAwACTMIYEwACVFpjGwACVF4JvwACVFpjEwACVGYRSwACVGYWFwACVGYRTwACVGcAAYM/AAJUZwACRe8AAlR6wJcAAlRaYysAAlSAAwACTMMAAYNvAAJUimMbAAJUjgm3AAJUjsRbAAJUjsRfAAJUimMTAAJUnhFLAAJUnhYXAAJUnhFPAAJUnwABgz8AAlSfAAJF7wACVLLAlwACVIpjKwACVLgDAAJMwhlLAAJUwmMbAAJUxnt7AAJUxgm3AAJUwmMTAAJU0hFLAAJU0hYXAAJU0hFPAAJU0wABgz8AAlTTAAJF7wACVObAlwACVMJjKwACVOwDAAJMwwABg3MAAlT2YxsAAlT6D1sAAlT6GQsAAlT2YxMAAlUGEUsAAlUGFhcAAlUGEU8AAlUHAAGDPwACVQcAAkXvAAJVGsCXAAJU9mMrAAJVIAMAAkzDAAGDdwACVSpjGwACVS4JtwACVSpjKwACVTQDAAJMwwABg3sAAlU+YxsAAlVCCb8AAlU+YxMAAlVKEUsAAlVKFhcAAlVKEU8AAlVLAAGDPwACVUsAAkXvAAJVXsCXAAJVPmMrAAJVZAMAAkzDAAGDfwACVW5jEwACVXIRSwACVXIWFwACVXIRTwACVXMAAYM/AAJVcwACRe8AAlWGwJcAAlVuYysAAlWMAwACTMIZowACVZZjGwACVZoC9wACVZoJuwACVZZjEwACVaYRSwACVaYWFwACVaYRTwACVacAAYM/AAJVpwACRe8AAlW6wJcAAlWWYysAAlXAAwACTMIYxwACVcpjGwACVc5kuwACVc4JtwACVcpjEwACVdoRSwACVdoWFwACVdoRTwACVdsAAYM/AAJV2wACRe8AAlXuwJcAAlXKYysAAlX0AwACTMMAAYODAAJV/mMbAAJWAgpfAAJV/mMTAAJWChFLAAJWChYXAAJWChFPAAJWCwABgz8AAlYLAAJF7wACVh7AlwACVf5jKwACViQDAAJMwwABg4cAAlYuYxsAAlYyCb8AAlYyxEMAAlYuYxMAAlY+EUsAAlY+FhcAAlY+EU8AAlY/AAGDPwACVj8AAkXvAAJWUsCXAAJWLmMrAAJWWAMAAkzCFe8AAlZiYx8AAlZmwMcAAlZiYxMAAlZvAAGDSwACVmJjKwACVnQDAAJMwwABg4sAAlZ+YysAAlaAAwACTMIZqwACVopjEwACVo4RSwACVo4WFwACVo8AAkXvAAJWmsCXAAJWimMfAAJWog9bAAJWosCDAAJWimMrAAJWrAMAAkzDAAGDjwACVrZjGwACVroC9wACVrZjHwACVsICWwACVrZjEwACVsoRTwACVssAAYM/AAJWtmMrAAJW1AMAAkzDAAGDkwACVt5jGwACVuIjWwACVuIJVwACVt5jEwACVu4RSwACVu4WFwACVu4RTwACVu8AAYM/AAJW7wACRe8AAlcCwJcAAlbeYx8AAlcKwMcAAlbeYysAAlcQAwACVxMAAYOXAAJMwwABg5sAAlceYxsAAlciu1cAAlcixDcAAlceYxMAAlcuEUsAAlcuFhcAAlcuEU8AAlcvAAGDPwACVy8AAkXvAAJXQsCXAAJXHmMfAAJXSsDHAAJXHmMrAAJXUAMAAkzDAAGDnwACV1pjGwACV17DxwACV1pjEwACV2YRSwACV2YWFwACV2YRTwACV2cAAYM/AAJXZwACRe8AAld6wJcAAldaYx8AAleCwMcAAldaYysAAleIAwACTMMAAYOjAAJXkmMbAAJXlsQrAAJXlqrnAAJXlgJbAAJXkmMfAAJXpsDHAAJXpo/nAAJXkmMTAAJXshFLAAJXshYXAAJXshFPAAJXswABgz8AAlezAAJF7wACV8bAlwACV5JjKwACV8wDAAJXzuwjAAJMwwABg6cAAlfaYx8AAlfee3sAAlfaYxMAAlfmEUsAAlfmFhcAAlfnAAJF7wACV/LAlwACV9pjKwACV/gDAAJMwwABg6sAAlgCYxsAAlgGFysAAlgGBr8AAlgGFy8AAlgCYxMAAlgWEUsAAlgWFhcAAlgWEU8AAlgXAAGDPwACWBcAAkXvAAJYKsCXAAJYAmMfAAJYMsDHAAJYAmMrAAJYOAMAAkzDAAGDrwACWEJjGwACWEYJJwACWEVvAAJYQmMTAAJYUhFLAAJYUhYXAAJYUhFPAAJYUwABgz8AAlhTAAJF7wACWGbAlwACWEJjHwACWG7AxwACWEJjKwACWHQDAAJMwwABg7MAAlh+YxMAAliCEUsAAliCFhcAAliDAAJF7wACWI7AlwACWH5jKwACWJQDAAJMwlyHAAJYnmMbAAJYoqrnAAJYohcXAAJYohcfAAJYnmMTAAJYshFLAAJYshYXAAJYswACRe8AAli+wJcAAliyEU8AAlizAAGDPwACWJ5jHwACWM8AAX2PAAJYzsDHAAJYnmMrAAJY2AMAAkzDAAEM6wACWOJjGwACWOaq5wACWOR/AAJY4mMTAAJY8hFLAAJY8hYXAAJY8wACRe8AAlj+wJcAAljyEU8AAljzAAGDPwACWOJjHwACWQ7AxwACWOJjKwACWRQDAAJMwwABg7sAAlkeYxsAAlkiqucAAlkgfwACWR5jEwACWS4RSwACWS4WFwACWS8AAkXvAAJZOsCXAAJZLhFPAAJZLwABgz8AAlkeYx8AAllKwMcAAlkeYysAAllQAwACTMMAAYO/AAJZWmMbAAJZXgL3AAJZXwACRe8AAllnAAGDwwACWVpjEwACWW4RSwACWW4RTwACWW8AAYM/AAJZWmMfAAJZfsDHAAJZWmMrAAJZhAMAAkzDAAFivwACWY5jEwACWZIRSwACWZIWFwACWZMAAkXvAAJZnsCXAAJZkwABg0cAAlmQjwACWY5jKwACWawDAAJMwhl/AAJZtmMbAAJZusCDAAJZtmMTAAJZwhFLAAJZwhYXAAJZwwACRe8AAlnOwJcAAlm2YysAAlnUAwACTMMAAYPTAAJZ3mMTAAJZ4hFLAAJZ4hYXAAJZ4wACRe8AAlnuwJcAAlneYysAAln0AwACTMMAAYPXAAJZ/mMTAAJaAhFLAAJaAhYXAAJaAwACRe8AAloOwJcAAln+YysAAloUAwACTMMAAYPbAAJaHmMbAAJaIgL3AAJaIgm7AAJaHmMTAAJaLhFLAAJaLhYXAAJaLhFPAAJaLwABgz8AAlovAAJF7wACWkLAlwACWh5jHwACWkrAxwACWh5jKwACWlADAAJMwwABg98AAlpaYxsAAlpeD9MAAlpeCbcAAlpehb8AAlpaYxMAAlpuEUsAAlpuFhcAAlpuEU8AAlpvAAGDPwACWm8AAkXvAAJagsCXAAJaWmMfAAJaisDHAAJaWmMrAAJakAMAAkzCCK8AAlqaYxsAAlqcnwACWp4Y/wACWp7UawACWp5bJwACWp5nfwACWp5nhwACWp8AAYPjAAJanwABg+cAAlqcpwACWppjEwACWsSPAAJammMrAAJazAMAAkzDAAGD6wACWtZjGwACWtoWPwACWtqU0wACWtZjEwACWuYRSwACWuYWFwACWuYRTwACWucAAYM/AAJa5wACRe8AAlr6wJcAAlrWYx8AAlsCwMcAAlrWYysAAlsIAwACWwoSbwACWwsAAYPvAAJMwwABg/MAAlsaYxMAAlseEU8AAlsfAAGDPwACWx8AAkXvAAJbKsCXAAJbGmMrAAJbMAMAAkzDAAGD9wACWzpjEwACWz4RSwACWz4WFwACWzpjHwACW0oCWwACW0rAxwACWzpjKwACW1QDAAJMwwABg/sAAlteYxMAAltiEUsAAltiFhcAAlteYx8AAltuAlsAAltuwMcAAlteYysAAlt4AwACTMMAAYP/AAJbgmMTAAJbhhFLAAJbhhYXAAJbgmMfAAJbkgJbAAJbgmMrAAJbmAMAAkzDAAGEAwACW6JjEwACW6YRTwACW6cAAYM/AAJbomMfAAJbssDHAAJbomMrAAJbuAMAAkzCikMAAlvCYxsAAlvGAlsAAlvCYxMAAlvOEUsAAlvOFhcAAlvPAAJF7wACW9rAlwACW8JjKwACW+ADAAJMwopbAAJb6mMTAAJb7hFLAAJb7hYXAAJb7wACRe8AAlv6wJcAAlvqYysAAlwAAwACTMMAAQTzAAJcCmMbAAJcDgJbAAJcCmMTAAJcFhFLAAJcFhYXAAJcFwACRe8AAlwiwJcAAlwKYysAAlwoAwACTMIXOwACXDJjGwACXDYSGwACXDJjEwACXD4RSwACXD4WFwACXD4RTwACXD8AAYM/AAJcPwACRe8AAlxSwJcAAlwyYysAAlxYAwACTMMAAYQHAAJcYmMbAAJcZgJbAAJcYmMfAAJcbsDHAAJcYmMTAAJcdhFLAAJcdhYXAAJcdwACRe8AAlyCwJcAAlxiYysAAlyIAwACTMMAAYQLAAJckmMbAAJcliGrAAJckmMTAAJcnhFLAAJcnhYXAAJcnhFPAAJcnwABgz8AAlyfAAJF7wACXLLAlwACXJJjHwACXLrAxwACXJJjKwACXMADAAJMwwABhA8AAlzKYxMAAlzOEUsAAlzOFhcAAlzOEU8AAlzPAAGDPwACXM8AAkXvAAJc4sCXAAJcymMfAAJc6sDHAAJcymMrAAJc8AMAAkzDAAGEEwACXPpjGwACXP59RwACXP7DtwACXPpjEwACXQoRSwACXQoWFwACXQoRTwACXQsAAYM/AAJdCwACRe8AAl0ewJcAAlz6Yx8AAl0mwMcAAlz6YysAAl0sAwACTMMAAYQXAAJdNmMbAAJdOgL3AAJdOgJbAAJdNmMTAAJdRhFLAAJdRhYXAAJdRhFPAAJdRwABgz8AAl1HAAJF7wACXVrAlwACXTZjKwACXWADAAJMwwABhBsAAl1qYx8AAl1vAAEcNwACXW6QFwACXW79nwACXWpjKwACXXwDAAJMwwABhB8AAl2GYx8AAl2LAAEcNwACXYqQFwACXYr9nwACXYZjKwACXZgDAAJMwwABhCMAAl2iYxsAAl2nAAEcNwACXaJjEwACXa4RSwACXa4WFwACXa4RTwACXa8AAYM/AAJdrwACRe8AAl3CwJcAAl2iYx8AAl3KwMcAAl2iYysAAl3QAwACTMMAAYQnAAJd2mMfAAJd3wABHDcAAl3ekBcAAl3e/Z8AAl3aYysAAl3sAwACTMMAAYQrAAJd9mMbAAJd+wABHDcAAl32YxMAAl4CEUsAAl4CFhcAAl4CEU8AAl4DAAGDPwACXgMAAkXvAAJeFsCXAAJd9mMrAAJeHAMAAkzDAAGELwACXiZjHwACXisAARw3AAJeKpAXAAJeKv2fAAJeJmMrAAJeOAMAAkzDAAGEMwACXkJjGwACXkcAARw3AAJeQmMfAAJeTgL3AAJeTsCDAAJeTsDHAAJeQmMTAAJeXhFLAAJeXhYXAAJeXhFPAAJeXwABgz8AAl5fAAJF7wACXnLAlwACXkJjKwACXngDAAJMwwABhDsAAl6CYx8AAl6HAAEcNwACXoaQFwACXob9nwACXoJjKwACXpQDAAJMwwABhD8AAl6eYxsAAl6jAAEcNwACXp5jEwACXqoRSwACXqoWFwACXqoRTwACXqsAAYM/AAJeqwACRe8AAl6+wJcAAl6eYx8AAl7GwMcAAl6eYysAAl7MAwACTMMAAYRDAAJe1mMfAAJe2wABHDcAAl7akBcAAl7a/Z8AAl7WYysAAl7oAwACTMMAAYRHAAJe8mMbAAJe9wABHDcAAl7yYxMAAl7+EUsAAl7+FhcAAl7+EU8AAl7/AAGDPwACXv8AAkXvAAJfEsCXAAJe8mMrAAJfGAMAAkzDAAGESwACXyJjHwACXycAARw3AAJfJpAXAAJfJv2fAAJfImMrAAJfNAMAAkzDAAGETwACXz5jGwACX0MAARw3AAJfPmMTAAJfShFLAAJfShYXAAJfShFPAAJfSwABgz8AAl9LAAJF7wACX17AlwACXz5jHwACX2YC9wACX2bAxwACXz5jKwACX3ADAAJMwwABhFcAAl96YxsAAl98bwACX3pjEwACX4YRSwACX4YWFwACX4YRTwACX4cAAYM/AAJfhwACRe8AAl+awJcAAl96Yx8AAl+iwMcAAl96YysAAl+oAwACTMMAAYRbAAJfsmMbAAJftgm/AAJfsmMfAAJfvsDHAAJfsmMTAAJfxhFLAAJfxhYXAAJfxhFPAAJfxwABgz8AAl/HAAJF7wACX9rAlwACX7JjKwACX+ADAAJMwwABHzsAAl/qYxsAAl/ucqcAAl/qYxMAAl/2EUsAAl/2FhcAAl/3AAJF7wACYALAlwACX/YRTwACX/cAAYM/AAJf6mMrAAJgEAMAAkzDAAGEXwACYBpjEwACYByDAAJgHhWDAAJgHwABKW8AAmAfAAJF7wACYC8AAYRjAAJgLwABhGcAAmAvAAGEhwACYC8AAYTHAAJgLwABhM8AAmAfAAFIQwACYB8AAVJDAAJgHwABhIMAAmAfAAFV4wACYB8AAVHjAAJgHwABHAMAAmAeD8cAAmAfAAFJpwACYB8AAUnbAAJgHwABSd8AAmAfAAFFowACYB8AAUg/AAJgHwABfx8AAmAfAAGE2wACYB8AAYTfAAJgHnKnAAJgHwABhOMAAmAfAAGE5wACYBpjKwACYIwDAAJMwwABhOsAAmCWYxsAAmCahlMAAmCYiwACYJZjEwACYKSPAAJglmMrAAJgrAMAAkzDAAGFCwACYLZjGwACYLsAAYUPAAJguwABhRMAAmC7AAGE7wACYLoGzwACYLsAAYUXAAJguwABJjsAAmC7AAGFGwACYLsAASbHAAJguwABhR8AAmC7AAGFIwACYLp3OwACYLpmEwACYLsAARi7AAJguwABhScAAmC7AAGFKwACYLsAAYUvAAJguwABhTMAAmC7AAGFNwACYLsAAYU7AAJguwABhT8AAmC6d4cAAmC7AAGFQwACYLp3gwACYLp4QwACYLp30wACYLsAAYVHAAJguwABOfcAAmC7AAGFSwACYLsAAYVPAAJguwABhVMAAmC7AAGFVwACYLsAAYVbAAJgtmMfAAJhPwABhWMAAmE/AAGFZwACYLZjEwACYUsAAYVrAAJhSwABhW8AAmFLAAGFewACYUsAARBHAAJhSwABhYMAAmFLAAGFXwACYUsAAYWrAAJhSwABha8AAmFLAAGFswACYUsAAYW3AAJhSwABhcMAAmFKBx8AAmFLAAGFxwACYUsAAQnjAAJhSwABCRMAAmFLAAGF5wACYUsAAYXTAAJhSwABhfcAAmFLAAGGAwACYUsAAYX7AAJhSwABhg8AAmFLAAGGEwACYUsAAYYXAAJhSwABhhsAAmFLAAGGLwACYUsAAYXXAAJhSoZnAAJhSwABhjMAAmFLAAGGOwACYUsAAYY/AAJhSgm/AAJhShWDAAJhSwABCWMAAmFLAAEJTwACYUsAAYZHAAJhSwABhncAAmFLAAGGSwACYUsAAYZPAAJhSwABhlMAAmFLAAGGVwACYUsAAYXjAAJhSwABhlsAAmFLAAGGXwACYUsAAYaXAAJhSwABhmMAAmFLAAGGZwACYUsAAYZrAAJhSwABho8AAmC2YysAAmIMAwACTMMAAYajAAJiFmMbAAJiGg0rAAJiGgbHAAJiGwABhqcAAmIbAAGGqwACYhZjEwACYi13AAJiFmMfAAJiNXsAAmIWYysAAmI8AwACTMMAAYavAAJiRmMbAAJiSg0rAAJiSgbHAAJiRmMfAAJiVXMAAmJGYysAAmJcAwACTMMAAYazAAJiZmMbAAJiawABHBMAAmJrAAEcFwACYmsAAYa3AAJiawABHA8AAmJmYxMAAmJ/AAGGuwACYmZjKwACYoQDAAJMwwABhr8AAmKOYxMAAmKSBx8AAmKS04MAAmKS038AAmKS04sAAmKOYysAAmKkAwACTMMAAYbDAAJirmMbAAJisgo/AAJirmMTAAJiutODAAJiuvbzAAJirmMrAAJixAMAAkzCZfsAAmLOYxsAAmLR6wACYtIJXwACYtMAARwTAAJi0wABhscAAmLTAAGGywACYtMAAkXvAAJi6wABhs8AAmLqD3sAAmLqD38AAmLTAAGG0wACYtMAAYbXAAJi0wABhtsAAmLTAAGG3wACYtMAAYbjAAJi0wABhusAAmLTAAGG8wACYtMAAVd3AAJizmMTAAJjGwABhvcAAmMaD5MAAmMaD5cAAmMbAAGG+wACYxsAAYb/AAJjGwABhwMAAmMZvwACYxsAAYcPAAJjGwABhxMAAmMbAAGHFwACYxsAAYcbAAJjGqKfAAJjGwACRe8AAmNPAAGHCwACY08AAYePAAJjTwABh5MAAmMbAAGHHwACYxrTfwACYxsAAYcnAAJjGmsLAAJjGwABhysAAmMbAAE0EwACYxrEhwACYxsAAYc/AAJjGwABh0MAAmMbAAGHVwACYxsAAYdPAAJjGhifAAJjGhiPAAJjGhizAAJjGwABh1sAAmMaxIMAAmMaxH8AAmMaxHsAAmMaxHcAAmMaxHMAAmMaxG8AAmMaxGcAAmMaxGMAAmMaxD8AAmMaGBcAAmMaxFcAAmMaGVcAAmMaxFMAAmMaxE8AAmMaxEsAAmMaGMsAAmMbAAGHbwACYxoZpwACYxsAAYc7AAJjGsQzAAJjGsQnAAJjGsQjAAJjGsQfAAJjGsQbAAJjGsQXAAJjGsQTAAJjGsQPAAJjGsQLAAJjGsQHAAJjGsQDAAJjGhmfAAJjGsP/AAJjGlkXAAJjGwABh78AAmMaw/sAAmMaw/cAAmMaw/MAAmMaw+8AAmMbAAGHzwACYxrD5wACYxrD3wACYxrD2wACYxrD1wACYxoXRwACYxoZuwACYxrDwwACYxrD0wACYxrDzwACYxrDvwACYxrDuwACYxrDswACYxrDrwACYxrDqwACYxrEOwACYxrERwACYxsAAYMzAAJjGsObAAJjGsOTAAJjGsOLAAJjGsOHAAJjGsN/AAJjGsN3AAJjGsOjAAJjGsOnAAJizmMfAAJkmg+LAAJkmwABhwcAAmLOYysAAmSkAwACTMMAAYfnAAJkrmMbAAJksl1DAAJksg2HAAJkrmMTAAJkvVsAAmS+D/cAAmSuYysAAmTIAwACTMMAAYfrAAJk0mMbAAJk1qJbAAJk1wABh+8AAmTXAAGHcwACZNYP0wACZNcAAYfzAAJk1wABh/sAAmTSYxMAAmTzAAGIAwACZPMAAYgHAAJk8wABiAsAAmTyGacAAmTyw/cAAmTyw/MAAmTyxAMAAmTyw6MAAmTyGZ8AAmTSYysAAmUYAwACTMMAAYgPAAJlImMbAAJlJglfAAJlImMTAAJlLsSHAAJlLwABG98AAmUuGJ8AAmUuGI8AAmUuGLMAAmUuxIMAAmUuxH8AAmUuxHsAAmUuxHcAAmUuxHMAAmUuxG8AAmUuxGcAAmUuxGMAAmUuGBcAAmUuxFcAAmUuGVcAAmUuxFMAAmUuxE8AAmUuxEsAAmUuGacAAmUuGMsAAmUuxEcAAmUvAAF5CwACZSJjKwACZYwDAAJMwwABiBcAAmWWYxMAAmWaZScAAmWahLsAAmWbAAGIHwACZZocLwACZZocOwACZZZjKwACZbADAAJMwwABiCMAAmW6YxMAAmW+ZScAAmW+hLsAAmW/AAGIHwACZb4cLwACZb4cOwACZbpjKwACZdQDAAJMwwABiCcAAmXeYxsAAmXiF3sAAmXjAAGIKwACZeMAAYgvAAJl4wABiDMAAmXjAAGINwACZeMAAYg7AAJl4wABiD8AAmXjAAGIQwACZd5jEwACZgYcLwACZgYcOwACZgZlJwACZgcAAYhHAAJmBoS7AAJmBwABiB8AAmYHAAGISwACZgcAAYhPAAJl3mMrAAJmKAMAAkzDAAGIXwACZjJjGwACZjYRXwACZjYPzwACZjbdkwACZjcAARvHAAJmMmMTAAJmSwABhyMAAmZK04sAAmYyYysAAmZUAwACTMMAAYhjAAJmXmMbAAJmYwABiGcAAmZjAAGIawACZl5jEwACZm8AAYRvAAJmbwABhHMAAmZvAAGEdwACZm8AAYR7AAJmXmMrAAJmgAMAAkzCI2cAAmaKYxsAAmaODSsAAmaOiwcAAmaPAAGEfwACZo7TlwACZo5rmwACZo7e3wACZo8AAYhvAAJmimMfAAJmrv2fAAJmimMTAAJmtwACRe8AAma7AAGIewACZrsAAYhzAAJmtsUrAAJmimMrAAJmyAMAAmbLAAGIdwACZssAAYh/AAJMwwABiJcAAmbaYxsAAmbfAAGEfwACZt8AAXhTAAJm3wABiJsAAmbaYxMAAmbtnwACZu4HHwACZu6dXwACZu8AAYifAAJm7msLAAJm7wABiKcAAmbvAAGIqwACZu8AARvfAAJm7wABiLMAAmbvAAGItwACZu7DmwACZu7DdwACZu8AAYjHAAJm7sOTAAJm7sOLAAJm7sOHAAJm7sN/AAJm7wABiO8AAmbuxIcAAmbuGJ8AAmbuGI8AAmbuGLMAAmbuxIMAAmbvAAGI+wACZu8AAYj/AAJm7sR/AAJm7sR7AAJm7wABiSsAAmbuxHcAAmbuxHMAAmbuxG8AAmbuxGcAAmbuxGMAAmbuxD8AAmbuGBcAAmbuxFcAAmbuGVcAAmbuxFMAAmbuxE8AAmbuxEsAAmbuGacAAmbuGMsAAmbuxEcAAmbuxDsAAmbuxDMAAmbuxCcAAmbuxCMAAmbuxB8AAmbuxBsAAmbuxBcAAmbvAAGJWwACZu7EEwACZu7EDwACZu7ECwACZu7EBwACZu7EAwACZu4ZnwACZu7D/wACZu7D+wACZu7D9wACZu7D8wACZu7D7wACZu7D5wACZu7D3wACZu7D2wACZu7D1wACZu7D0wACZu7DzwACZu4XRwACZu4ZuwACZu7DwwACZu7DvwACZu7DuwACZu7DswACZu7DrwACZu7DqwACZu7DowACZu7DpwACZtpjKwACaCgDAAJMwwABiZMAAmgyYxsAAmg3AAGJlwACaDcAAYhvAAJoNgO7AAJoMmMTAAJoRwABiKMAAmhGawsAAmhHAAEb3wACaEcAAYMzAAJoMmMrAAJoWAMAAkzDAAGJmwACaGJjEwACaGcAAYmfAAJoZwABiaMAAmhnAAGJpwACaGcAAYmzAAJoZwABibcAAmhmxIcAAmhmw3cAAmhmw38AAmhmw4cAAmhmw4sAAmhmw5MAAmhmw5sAAmhmw6MAAmhmw6cAAmhmw6sAAmhmw68AAmhmw7MAAmhmw7sAAmhmw78AAmhmGbsAAmhmw8MAAmhmF0cAAmhmw88AAmhmw9MAAmhmw9cAAmhmw9sAAmhmw98AAmhmw+cAAmhmw+8AAmhmw/MAAmhmw/cAAmhmw/sAAmhmw/8AAmhmGZ8AAmhmxAMAAmhmxAcAAmhmxAsAAmhmxA8AAmhmxBMAAmhmxBcAAmhmxBsAAmhmxB8AAmhmxCMAAmhmxCcAAmhmxDMAAmhmxDsAAmhmxD8AAmhmxEcAAmhmGMsAAmhmGacAAmhmxEsAAmhmxE8AAmhmxFMAAmhmGVcAAmhmxFcAAmhmGBcAAmhmxGMAAmhmxGcAAmhmxG8AAmhmxHMAAmhmxHcAAmhmxHsAAmhmxH8AAmhmxIMAAmhmGLMAAmhmGI8AAmhmGJ8AAmhiYysAAml0AAMAAklXAAJpfmMTAAJpgwABdgsAAml/AAGJzwACaYpjGwACaY8AAkOjAAJpkg97AAJpkg9/AAJpkg+DAAJpimMfAAJpog+LAAJpog+PAAJpimMjAAJprg+PAAJpimMTAAJptg+TAAJptg+XAAJptg+bAAJpimMrAAJpxAMAAml/AAGJ0wACac5jGwACadIPpwACadIPqwACac5jEwACad4PrwACad4PuwACad1bAAJp3g/LAAJp3g/XAAJp3g/nAAJp3g/vAAJp3g/fAAJp3g/bAAJp3hADAAJpzmMrAAJqCAMAAml/AAGJ1wACahJjGwACahYPpwACahJjEwACah8AAYnbAAJqHwABG98AAmoeGbsAAmoexBMAAmoew9cAAmofAAEcBwACahJjKwACajgDAAJpfwABid8AAmpCYxMAAmpGBx8AAmpCYysAAmpMAAMAAklbAAJqVmMbAAJqWwABitMAAmpbAAGK2wACalsAAYrjAAJqWwABiusAAmpbAAGK8wACalsAAYr3AAJqWwABivsAAmpbAAGLAwACalsAAYsLAAJqWwABixMAAmpbAAGLGwACalsAAYsfAAJqWwABiycAAmpbAAGLLwACalsAAYs3AAJqWwABizsAAmpbAAGLQwACalsAAYtLAAJqWwABi1MAAmpbAAGLWwACalsAAYtjAAJqWwABi2sAAmpbAAGLcwACalsAAYt7AAJqWwABi4MAAmpbAAGLiwACalsAAYuTAAJqWwABi5sAAmpbAAGLnwACalsAAYujAAJqWwABi6cAAmpWzZMAAmraYxsAAmrcnwACat8AAklbAAJq5KMAAmrcpwACat8AAYnvAAJq3wABifMAAmrfAAGJ9wACat8AAYn7AAJq3wABif8AAmrfAAGKAwACat8AAYoHAAJq3wABigsAAmrfAAGKDwACat8AAYoTAAJq3wABihcAAmrfAAGKGwACat8AAYofAAJq3wABiiMAAmrfAAGKJwACat8AAYorAAJq3wABii8AAmrfAAGKMwACat8AAYo3AAJq3wABijsAAmrfAAGKPwACat8AAYpDAAJq3wABikcAAmrfAAGKSwACat8AAYpPAAJq3wABilMAAmrfAAGKVwACat8AAYpbAAJq3wABil8AAmrfAAGKYwACat8AAYpnAAJq3wABimsAAmrfAAGKbwACat8AAYpzAAJq3wABincAAmrfAAGKewACat8AAYp/AAJq3wABioMAAmrfAAGKhwACat8AAYqLAAJq2mMTAAJrkI8AAmraYysAAmuYAwACalbNlwACa6JjGwACa6SfAAJrpwACSVsAAmusowACa6SnAAJrpwABio8AAmunAAGKkwACa6cAAYqXAAJrpuhXAAJrpwABipsAAmunAAGKnwACa6cAAYqjAAJrpwABiqcAAmunAAGKqwACa6cAAYqvAAJrpqs7AAJrpwABirMAAmunAAFecwACa6YavwACa6JjEwACa/CPAAJromMrAAJr+AMAAmpXAAGKtwACbAJjGwACbAcAAYq7AAJsBwABisMAAmwHAAGKywACbAJjKwACbBQAAwACSV8AAmwfAAGLrwACbCJjGwACbCcAAYuzAAJsJnvnAAJsImMTAAJsMo/HAAJsMsPzAAJsMwABgzMAAmwiYysAAmxDAAJJXwACbEYC1wACbB8AAYu3AAJsTmMbAAJsUtMHAAJsTmMTAAJsWmsLAAJsWsQ7AAJsWsRHAAJsWsQnAAJsWsQjAAJsWsQXAAJsWsQTAAJsWhgXAAJsWsQbAAJsWsQPAAJsWsQHAAJsWsQLAAJsWsP7AAJsTmMrAAJskAMAAmwfAAGLuwACbJpjEwACbJ8AASp7AAJsnwABi78AAmyefmsAAmyeawsAAmyfAAEb3wACbJ8AAYMvAAJsnsObAAJsnsOHAAJsnsO/AAJsnsO7AAJsnsOzAAJsnsOvAAJsnsQnAAJsnsQXAAJsnsQbAAJsnsQTAAJsnhgXAAJsnsQPAAJsnsQHAAJsnsP7AAJsnwACSV8AAmzzAAGLwwACbJpjKwACbPgAAwACSWMAAm0CYxMAAm0HAAGL6wACbQMAAYvHAAJtDmMbAAJtEJ8AAm0TAAJJYwACbRijAAJtEKcAAm0SeXMAAm0SV0sAAm0SD8cAAm0OYxMAAm0wjwACbQ5jKwACbTgDAAJtAwABi8sAAm1CYxsAAm1GCa8AAm1HAAE6VwACbUYWPwACbUYWSwACbUcAATpbAAJtRH8AAm1HAAErswACbUJjHwACbWcAATpjAAJtQmMTAAJtbI8AAm1CYysAAm10AAMAAklkAwACSWsAAm2CYxMAAm2HAAGMIwACbYcAASGLAAJthwABDnADAAJJbwACbZcAARHDAAJtmmMfAAJtnYcAAm2aYxMAAm2mCjMAAm2mw3MAAm2m3VsAAm2mIacAAm2mvmMAAm2mxNcAAm2mvmcAAm2mBu8AAm2mxC8AAm2mvlsAAm2m0X8AAm2mwG8AAm2m3oMAAm2aYysAAm3cAwACbZcAARejAAJt5mMTAAJt6r5nAAJt6sQvAAJt6r5bAAJt6tF/AAJt6iGnAAJt6t1bAAJt5mMrAAJuBAMAAm2XAAEXCwACbg5jGwACbhMAAklvAAJuFwABjEMAAm4XAAEXDwACbg5jEwACbiIKOwACbg5jKwACbigDAAJtlwABExsAAm4yYxsAAm43AAJJbwACbjsAARMvAAJuOwABEzMAAm47AAETPwACbjJjEwACbkrDcwACbkrAbwACbkq+YwACbkregwACbkoG7wACbkrE1wACbksAAklvAAJuZwABE8cAAm5nAAETgwACbmcAARUDAAJuZwABFP8AAm5nAAEThwACbmcAARO7AAJuMmMrAAJugAMAAm2WG/sAAm6KYxsAAm6OEQMAAm6PAAJJbwACbpcAARZzAAJulnS/AAJuimMTAAJuowACSW8AAm6nAAEVAwACbqcAART/AAJupwABE4cAAm6nAAETuwACbqIKMwACbopjHwACbr2HAAJuimMrAAJuxAMAAm2WYT8AAm7OYxsAAm7SYUMAAm7SYUcAAm7SYUsAAm7TAAJJbwACbuJdowACbuJhTwACbuJhVwACbuJhWwACbtGHAAJu0mFTAAJuzmMfAAJu/g2LAAJuzmMTAAJvBl/vAAJvBl3nAAJvBl3vAAJvBl3zAAJvBl3rAAJvBhEbAAJvBl3jAAJuzmMrAAJvJAADAAJJcwACby8AARI3AAJvMmMTAAJvNsSfAAJvNsSXAAJvNr43AAJvNr5HAAJvNsS/AAJvNr5PAAJvNsBrAAJvNsSbAAJvNr4/AAJvNtFjAAJvNsBfAAJvNt57AAJvMmMrAAJvaAMAAm8vAAEXmwACb3JjEwACb3bElwACb3a+NwACb3a+TwACb3bEmwACb3a+PwACb3bRYwACb3JjKwACb5ADAAJvLwABFxsAAm+aYxsAAm+fAAJJcwACb6MAAYxHAAJvowABFw8AAm+jAAGMSwACb5pjEwACb7J6vwACb5pjKwACb7gDAAJvLwABFSMAAm/CYxsAAm/HAAJJcwACb8sAARMvAAJvywABEzMAAm/LAAETPwACb8JjEwACb9rEnwACb9rAXwACb9reewACb9sAAklzAAJv6wABFUcAAm/rAAEVvwACb+sAARXnAAJv6wABFUsAAm/rAAEV3wACb+sAARW3AAJv2r5HAAJv2sBrAAJv2sS/AAJvwmMrAAJwEAMAAm8uHD8AAnAaYxsAAnAfAAJJcwACcCJh/wACcCJh+wACcBpjEwACcC8AAklzAAJwMwABFnsAAnAzAAEV5wACcDMAARVLAAJwMwABFd8AAnAzAAEVtwACcBpjKwACcEgAAwACSXcAAnBTAAGMUwACcFZjGwACcFsAAWUzAAJwWuKXAAJwVmMTAAJwZwABZTcAAnBnAAFlFwACcGcAAWU/AAJwVmMrAAJwdAMAAnBTAAGMVwACcH5jGwACcIMAAkl3AAJwhwABZ+MAAnCHAAGMWwACcIcAAYxfAAJwhwABjGMAAnCHAAGMZwACcIcAAYxrAAJwhwABjG8AAnCHAAGMcwACcIcAAYx3AAJwhwABjHsAAnCHAAGMfwACcIcAAYyDAAJwhwABjIcAAnB+Yx8AAnC/AAJJdwACcMMAAYyLAAJwwwABjI8AAnB+YxMAAnDPAAFlAwACcM5gCwACcM8AARvfAAJwzwABOj8AAnDPAAGMmwACcM8AAYynAAJwzwABjKsAAnDOFssAAnDOGUcAAnDOGWMAAnDOFi8AAnDOFjcAAnDPAAJJdwACcQMAAYzDAAJxAwABjLsAAnEDAAGMywACcQMAAYzHAAJxAwABjP8AAnEDAAGM8wACcQMAAYzPAAJwzhmfAAJwzhgHAAJwzhqrAAJwzhkDAAJwzhjbAAJwzhjjAAJwzhjzAAJwzhbjAAJwzhajAAJwzhabAAJwzwABjNcAAnDOFI8AAnDOFKcAAnDOFR8AAnDOGE8AAnDOGacAAnDOGhMAAnDOGiMAAnDOGgcAAnDOGhsAAnDOGjMAAnDOGksAAnDOGoMAAnDOGpMAAnDPAAGMvwACcM8AAYzTAAJwzhf/AAJwzherAAJwzhe7AAJwzhhDAAJwzhl7AAJwzhh7AAJwzhiHAAJwzhXDAAJwzhgfAAJwzhgnAAJwzhgvAAJwzhg3AAJwzhfrAAJwzhfHAAJwzhfPAAJwzhfbAAJwzhf3AAJwzhfjAAJwzhdHAAJwzharAAJwzhazAAJwzhbrAAJwzhbzAAJwzhc3AAJwzhbbAAJwzhZjAAJwzhZrAAJwzhZzAAJwzhZ7AAJwzhcPAAJwzhcjAAJwzhhnAAJwzhhvAAJwzhlXAAJwzhcDAAJwzhgXAAJwzhgPAAJwzhifAAJwzhjDAAJwzhk7AAJwzhizAAJwzhiPAAJwzhkPAAJwzhkjAAJwzhkrAAJwzhjTAAJwzhjLAAJwzhVjAAJwzhV7AAJwzhVrAAJwzhVzAAJwzhWHAAJwzhkzAAJwzhhbAAJwfmMrAAJyYAMAAnBTAAGNAwACcmpjGwACcmyfAAJybwACSXcAAnJ0owACcmynAAJybhhXAAJybwABjQsAAnJvAAGNDwACcmpjEwACcoyPAAJyamMrAAJylAMAAnBTAAGNEwACcp5jGwACcqITawACcqISLwACcp5jEwACcq4cuwACcq8AAYz7AAJyrI8AAnKeYx8AAnK+5VMAAnK/AAE26wACcr8AATb/AAJyvtSbAAJynmMrAAJy0hhXAAJy0wABjRcAAnLTAAGNGAMAAkl7AAJy4mMTAAJy5wABjTsAAnLnAAGNRwACcucAAY1LAAJy5wABjU8AAnLm/xsAAnLnAAGNVwACcucAAY1bAAJy5wABjV8AAnLjAAGNKwACcwpjGwACcw8AAY0vAAJzDgm/AAJzCmMfAAJzGhY/AAJzGhFfAAJzGmjDAAJzCmMTAAJzKI8AAnMKYysAAnMwAwACcuMAAY0zAAJzOmMTAAJzPmsLAAJzPh0TAAJzPhpzAAJzPhqTAAJzPhpLAAJzPhozAAJzPhojAAJzPhobAAJzPhoTAAJzPhoHAAJzPmArAAJzOmMrAAJzbAADAAJJfwACc3cAAY1jAAJzemMbAAJzfg+zAAJzfwACSX8AAnOHAAGNawACc4cAAY1vAAJzemMnAAJzkr3PAAJzemMTAAJzmr3TAAJzmS8AAnObAAFQWwACc3pjKwACc6gAAwACSYMAAnOyYxMAAnO3AAGQGwACc7cAAkmDAAJzvwABkCMAAnOzAAGNgwACc8ZjGwACc8qEpwACc8sAAkmDAAJz0wABjYcAAnPTAAGNjwACc8oKUwACc8oJXwACc8sAAUEjAAJzywABQLsAAnPK4B8AAnPLAAE+HwACc8sAAY2LAAJzyg8bAAJzywABjZMAAnPGYx8AAnQDAAGNowACdAMAAUAzAAJ0AwABjacAAnQDAAGCuwACdAKlOwACc8ZjEwACdBsAAY2rAAJ0GwABQUcAAnQa6AcAAnQbAAGNrwACdBsAAUA3AAJ0GwABQTcAAnQbAAFAYwACdBsAAQW/AAJ0GwABjbMAAnQbAAFAgwACdBoJGwACdBp0EwACdBoRSwACdBsAAUErAAJ0GwABjbcAAnQbAAFBLwACdBsAAUCLAAJ0GtAzAAJ0GsDTAAJ0GwACSYMAAnRrAAGNuwACc8ZjKwACdHADAAJ0cwABjZcAAnRzAAGNmwACdHMAAY2fAAJzswABjb8AAnSGYxsAAnSLAAFAkwACdIZjKwACdJADAAJzswABjcMAAnSaYxMAAnSeEUsAAnSfAAEFvwACdJyPAAJ0mmMrAAJ0rAMAAnOzAAGN0wACdLZjGwACdLsAAUAzAAJ0tmMTAAJ0whF7AAJ0wVsAAnTCIZsAAnTCBpcAAnTCDHMAAnTAjwACdLZjHwACdN1zAAJ0tmMrAAJ05AMAAnOzAAGN1wACdO5jGwACdPMAAY3bAAJ07mMTAAJ0+wABQL8AAnTuYx8AAnUCkC8AAnTuYysAAnULAAJJgwACdQ4ZrwACdQ8AAY3fAAJzswABjeMAAnUaYxsAAnUfAAFAkwACdRpjKwACdScAAkmDAAJ1KhmvAAJ1KwABjd8AAnOzAAGN5wACdTZjGwACdTsAAkmDAAJ1PwABSoMAAnU/AAFXmwACdT8AAY3rAAJ1OwABQTsAAnU2Yx8AAnVSCasAAnVSkC8AAnVTAAFBVwACdVMAAY4DAAJ1UwABjYsAAnU2YxMAAnVrAAGN7wACdWsAAY3zAAJ1atyDAAJ1awACSYMAAnV7AAGN+wACdXsAAY4LAAJ1ewABjhMAAnVrAAE+WwACdWsAAY4HAAJ1awABjg8AAnVrAAEFvwACdWsAAY2zAAJ1aI8AAnVqEUsAAnVq0DMAAnVrAAFAvwACdTZjKwACda8AAkmDAAJ1shmvAAJzswABjhsAAnW6YxsAAnW/AAJJgwACdcJJdwACdbpjHwACdcsAAkmDAAJ1zwABjh8AAnW6YxMAAnXXAAGOBwACddcAAkmDAAJ13wABjhMAAnXXAAFBKwACdbpjKwACdegDAAJzswABjiMAAnXyYxsAAnX3AAJJgwACdfpJdwACdfJjHwACdgMAAkmDAAJ2BwABjicAAnXyYxMAAnYPAAGOBwACdg8AAkmDAAJ2FwABjhMAAnXyYysAAnYcAwACc7MAAY4rAAJ2JmMfAAJ2KwACSYMAAnYvAAGOLwACdiZjEwACdjcAAY4HAAJ2NwACSYMAAnY/AAGOEwACdiZjKwACdkQDAAJzswABjjMAAnZOYxsAAnZTAAJJgwACdlZJdwACdk5jHwACdl8AAkmDAAJ2YwABjjcAAnZOYxMAAnZrAAGOBwACdmsAAkmDAAJ2cwABjhMAAnZrAAFBKwACdk5jKwACdnwDAAJzswABjjsAAnaGYxsAAnaLAAJJgwACdo5JdwACdoZjHwACdpcAAkmDAAJ2mwABjj8AAnaGYxMAAnajAAGOBwACdqMAAkmDAAJ2qwABjhMAAnajAAFBKwACdoZjKwACdrQDAAJzswABjkMAAna+Yx8AAnbDAAJJgwACdscAAY4/AAJ2vmMTAAJ2zwABjgcAAnbPAAJJgwACdtcAAY4TAAJ2zwABQSsAAna+YysAAnbgAwACc7MAAY5HAAJ26mMbAAJ27wACSYMAAnbzAAGOSwACdvJJdwACdvMAAY43AAJ28wABjk8AAnbzAAGOUwACdvMAAY5XAAJ28wABjlsAAnbqYx8AAncSWc8AAncSA7cAAncTAAEyawACdxKQLwACdupjEwACdycAAUE/AAJ3JwABjgcAAncnAAGODwACdycAAQW/AAJ3JwABjbMAAncnAAFBKwACdyYRSwACdySPAAJ3JwABQL8AAnbqYysAAndOzy8AAndOEKMAAndO8e8AAnOzAAGOawACd15jGwACd2CfAAJ3YwACSYMAAndoowACd2CnAAJ3YsIDAAJ3YwABjm8AAndeYxMAAnd8jwACd15jKwACd4QDAAJzswABjnMAAneOYxsAAneTAAFAkwACd45jKwACd5gDAAJ3mwABjZcAAnebAAGNmwACd5sAAY2fAAJzswABjncAAneuYxsAAnezAAJJgwACd7cAAY57AAJ3sumbAAJ3spTTAAJ3srSzAAJ3sW8AAnezAAE/owACd65jEwACd9CPAAJ30wABQUsAAneuYx8AAnffAAFAnwACd96QLwACd65jKwACd+gDAAJzswABjoMAAnfyYxsAAnf3AAFAlwACd/JjEwACd/8AAkmDAAJ4AwABjocAAngDAAGOjwACd/8AAUFLAAJ3/wABBb8AAnf+EUsAAnf/AAFBKwACd/8AAY23AAJ38mMfAAJ4IwABjosAAngjAAFAnwACd/JjKwACeCwDAAJzswABjpcAAng2YxsAAng7AAJJgwACeD8AAY6bAAJ4PwABjp8AAng/AAGOowACeDoWPwACeDsAAT+zAAJ4NmMTAAJ4VwABQUsAAnhXAAGOpwACeFcAAY6rAAJ4VwABjq8AAnhXAAEFvwACeFcAAUCDAAJ4VwABjbcAAnhUjwACeFYRSwACeFcAAUErAAJ4NmMfAAJ4gwABQMMAAniDAAFAywACeIMAAUCfAAJ4NmMrAAJ4kAMAAnOzAAGO4wACeJpjGwACeJ7TGwACeJpjEwACeKcAAUFLAAJ4pwABBb8AAnikjwACeKYRSwACeKcAAY23AAJ4mmMfAAJ4vwABQJ8AAniaYysAAnjEAwACc7MAAY7zAAJ4zmMfAAJ40wABgrsAAnjOYxMAAnjbAAGNqwACeNsAAUFHAAJ42ugHAAJ42wABQDcAAnjbAAFBNwACeNsAAQW/AAJ42nQTAAJ42I8AAnjaEUsAAnjbAAFBKwACeM5jKwACeQQDAAJzswABjv8AAnkOYxsAAnkSAlsAAnkOYxMAAnkaeq8AAnkYjwACeRoRSwACeQ5jKwACeSgDAAJzswABjwsAAnkyYxsAAnk2AlsAAnkyYxMAAnk8jwACeT4RSwACeTJjKwACeUgDAAJzswABjxMAAnlSYxsAAnlXAAGPFwACeVJjEwACeV8AAUA3AAJ5XwABBb8AAnlcjwACeV4RSwACeVJjKwACeXADAAJzswABjy8AAnl6YxsAAnl+ppMAAnl6YxMAAnmHAAEFvwACeYcAAUErAAJ5emMrAAJ5kAMAAnOzAAGPNwACeZpjGwACeZ8AAUAnAAJ5nwABQB8AAnmfAAJJgwACeasAAY87AAJ5mmMfAAJ5swABjz8AAnmaYxMAAnm7AAGPQwACeZpjKwACecADAAJ5wwABjZcAAnnDAAGNmwACecMAAY2fAAJzswABj0cAAnnWYxsAAnnabDMAAnnbAAFAKwACedsAAVKvAAJ52wABj0sAAnnbAAE+YwACedZjEwACefCPAAJ58hFLAAJ58wABQSsAAnnzAAEFvwACefMAAY2zAAJ58tAzAAJ51mMrAAJ6DAMAAnOzAAGPVwACehZjEwACehiPAAJ6GhFLAAJ6FmMrAAJ6JAMAAnOzAAGPYwACei5jGwACejMAAUAnAAJ6MwABQB8AAnozAAJJgwACej8AAY87AAJ6LmMfAAJ6RwABjz8AAnouYxMAAnpPAAGPQwACei5jKwACelQDAAJ6VwABjZcAAnpXAAGNmwACelcAAY2fAAJzswABj2cAAnpqYxsAAnpubDMAAnpvAAFAKwACempjEwACeniPAAJ6ehFLAAJ6ewABBb8AAnp7AAGNswACensAAUErAAJ6etAzAAJ6amMrAAJ6lAMAAnOzAAGPcwACep5jEwACeqCPAAJ6ohFLAAJ6nmMrAAJ6rAMAAnOzAAGPfwACerZjGwACersAAUAnAAJ6uwABQB8AAnq7AAJJgwACescAAY87AAJ6tmMfAAJ6zwABjz8AAnq2YxMAAnrXAAGPQwACerZjKwACetwDAAJ63wABjZcAAnrfAAGNmwACet8AAY2fAAJzswABj4MAAnryYxsAAnr3AAFAUwACevYXcwACevYXdwACevcAAUArAAJ69wACSYMAAnsLAAGPhwACevJjHwACexMAAY+LAAJ68mMTAAJ7GwABQD8AAnsbAAFASwACexsAAUBPAAJ7GwABQDcAAnsaEUsAAnsbAAGPpwACexsAAQW/AAJ7GwABjbMAAnsbAAFBKwACexrQMwACexiPAAJ68mMrAAJ7SAMAAnOzAAGPuwACe1JjEwACe1YRSwACe1SPAAJ7UmMrAAJ7YAMAAnOzAAGPxwACe2pjGwACe28AAY+PAAJ7amMTAAJ7dhFLAAJ7dwABBb8AAnt0jwACe2pjKwACe4QDAAJzswABj9MAAnuOYxsAAnuTAAGP1wACe5IJwwACe5MAAY/bAAJ7jmMTAAJ7owABBb8AAnugjwACe6MAAkmDAAJ7rwABjbsAAnuiEUsAAnuOYysAAnu4AwACc7MAAY/rAAJ7wmMbAAJ7xwABQJMAAnvCYysAAnvMAwACe88AAY2XAAJ7zwABjZsAAnvPAAGNnwACc7MAAY/vAAJ74mMbAAJ75wACSYMAAnvqXRMAAnviYx8AAnvy0xsAAnvykC8AAnviYxMAAnv/AAEFvwACe/8AAY2zAAJ7/I8AAnv+EUsAAnv/AAFBKwACe/8AAUC/AAJ74mMrAAJ8GAMAAnOzAAGP+wACfCJjGwACfCcAAUAnAAJ8JwABQB8AAnwnAAJJgwACfDMAAY87AAJ8ImMfAAJ8OwABjz8AAnwiYxMAAnxDAAGPQwACfCJjKwACfEgDAAJzswABj/8AAnxSYxsAAnxXAAJJgwACfFsAAZADAAJ8UmMTAAJ8YwABBb8AAnxgjwACfGIRSwACfFJjHwACfHKQLwACfFJjKwACfHgDAAJzswABkAsAAnyCYxsAAnyHAAJJgwACfIsAAZADAAJ8gmMTAAJ8kwABBb8AAnyQjwACfJIRSwACfIJjHwACfKKQLwACfIJjKwACfKgDAAJzswABkBcAAnyyYxMAAny3AAGPKwACfLcAAY/nAAJ8twABj18AAny3AAGPewACfLcAAY+/AAJ8twABj8sAAny3AAGPUwACfLcAAY9vAAJ8twABj6MAAny3AAGO+wACfLcAAY8HAAJ8twABjw8AAny3AAGO7wACfLcAAY6TAAJ8twABjt8AAny3AAGOFwACfLcAAY5fAAJ8twABj/cAAny3AAGQBwACfLcAAZATAAJ8smMrAAJ9CAADAAJJhwACfRMAAZArAAJ9FmMTAAJ9GhXzAAJ9GwABUFsAAn0WYysAAn0kAAMAAkmLAAJ9LwABkC8AAn0yYxsAAn00nwACfTcAAkmLAAJ9PKMAAn00pwACfTYeewACfTZ9TwACfTYDtwACfTbATwACfTJjEwACfViPAAJ9MmMrAAJ9YAMAAn0ueoMAAn1qYxsAAn1uEJsAAn1qYx8AAn13AAJJiwACfXrYjwACfXsAAU/7AAJ9amMTAAJ9hwABVqMAAn2HAAJJiwACfY8AAZAzAAJ9jwABkDcAAn2PAAGQOwACfY8AAZBbAAJ9hwABUhcAAn2HAAFQuwACfYcAAVDLAAJ9hwABUNcAAn2HAAFY8wACfYcAAVdDAAJ9hsBnAAJ9hwABV08AAn2HAAFRRwACfYcAAVEbAAJ9hwABU4sAAn2HAAGQcwACfWpjKwACfdADAAJ9LwABkH8AAn3aYxsAAn3eCb8AAn3fAAFp5wACfdpjKwACfegAAwACSY8AAn3zAAGQgwACffZjGwACffsAAkmPAAJ9/smTAAJ9/tiPAAJ9/wABkIcAAn3/AAFG3wACff8AAZCLAAJ9/wABkI8AAn3/AAFP7wACff8AARMrAAJ9/wABkJMAAn3/AAGQlwACff8AAZCbAAJ9/wABkJ8AAn3/AAGQowACff8AAZCnAAJ9/wABkKsAAn3/AAFPxwACff8AAYxzAAJ9/wABkK8AAn3/AAGQswACff8AAZC3AAJ9/wABkLsAAn3+E58AAn32Yx8AAn5bAAJJjwACfl8AAZDDAAJ+XwABkMsAAn5fAAGQzwACfl7gSwACfl8AAU+bAAJ+WwABP6MAAn5aEycAAn32YyMAAn5/AAJJjwACfoMAAZDDAAJ99mMTAAJ+iwACSY8AAn6PAAGQ0wACfo8AAVBTAAJ+jwABkN8AAn6PAAGQ4wACfo8AAZHfAAJ+jwABkTsAAn6PAAGRRwACfo8AAZFDAAJ+jwABkgMAAn6PAAGSCwACfo8AAZITAAJ+jwABki8AAn6PAAGR0wACfooKfwACfosAAZDvAAJ+iwABP48AAn6KawsAAn6KHRMAAn6LAAE70wACfooUpwACfooVYwACfooVawACfooVcwACfooVewACfosAAZD/AAJ+ihXDAAJ+ihcDAAJ+iwABkRMAAn6KYDMAAn6KYFMAAn6KF+sAAn6LAAGRHwACfooYnwACfooYjwACfooYswACfooYwwACfooY0wACfooYywACfooZDwACfooZIwACfooZKwACfooYHwACfosAAZFnAAJ+ihgnAAJ+iwABkX8AAn6KGC8AAn6LAAGRhwACfooZOwACfooX4wACfosAAZGfAAJ+ihfPAAJ+iwABkacAAn6KF9sAAn6LAAGRrwACfooXxwACfosAAZGzAAJ+ihdHAAJ+ihf3AAJ+iwABkbsAAn6KF/8AAn6LAAGRvwACfooZnwACfooWLwACfooWNwACfosAAZEHAAJ+ihbbAAJ+iwABkecAAn6LAAGR6wACfosAAZHbAAJ+ihhnAAJ+ihhvAAJ+ihkDAAJ+iwABUo8AAn6KFvMAAn6LAAGRCwACfosAAZHLAAJ+iwABkhsAAn6LAAGSHwACfooW6wACfooYewACfooWqwACfosAAZInAAJ+ihazAAJ+iwABOksAAn6KFmMAAn6KFnMAAn6KFmsAAn6KGAcAAn6LAAGRKwACfooZMwACfooXqwACfooXDwACfooXIwACfooXNwACfosAAZKDAAJ+ihmnA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oV6Yx8AAoYbAAFBMwAChhsAAZSvAAKGGwACSa8AAoYnAAFP+wAChhqsTwAChhoWAwAChhoWVwAChhrWmwAChhrWlwAChhrWnwAChhoX1wAChhpsDwAChhoW1wAChhoVKwAChhqy0wAChhrWowAChhrWkwAChhrWjwAChhqzbwAChhrWpwAChhqzNwAChhrWqwAChhoXQwAChhoWXwAChhp6lwAChhrWtwAChhrWswAChhrWuwAChXpjEwACho8AAUDzAAKGjwABkbcAAoaPAAGRowACho8AAUADAAKGjwABkeMAAoaPAAJJrwAChqcAAZY3AAKGpwABlj8AAoanAAGWYwACho8AAZHPAAKGjuGXAAKGjwABPl8AAoaPAAE+VwACho8AAT5LAAKGjwABkasAAoaPAAFAzwACho7aRwACho7aQwACho7aPwACho7aOwACho6hCwACho8AAZF7AAKGjwABQQcAAoaPAAGRgwACho8AAZGXAAKGjwABkdcAAoaPAAGSfwACho8AAZFvAAKGjwABlEMAAoaPAAGBfwACho8AAZFzAAKGjwABPm8AAoaPAAGOywAChXpjKwAChxQAAwACSbMAAocfAAGWcwAChyJjGwAChycAAkgrAAKHKwABRV8AAociYx8AAocyBk8AAociYxMAAoc6D7MAAoc6cy8AAoc7AAFFcwAChzsAAUV3AAKHOwABRUsAAoc5WwAChzsAAUVvAAKHImMrAAKHWAMAAocfAAFFKwACh2JjGwACh2aUiwACh2YGTwACh2JjEwACh3MAAUVTAAKHcwABlncAAodzAAGWfwACh3MAAZaDAAKHcuT7AAKHYmMrAAKHiAMAAocfAAGWuwACh5JjGwACh5aUiwACh5blDwACh5JjHwACh6MAAkmzAAKHpwABT/sAAoeSYxMAAoeuawsAAoevAAGWkwACh67kQwACh68AAX4XAAKHruO/AAKHruPDAAKHruPHAAKHruPLAAKHruPPAAKHruPTAAKHruPXAAKHrsRnAAKHrhhfAAKHrsRvAAKHruPbAAKHruPfAAKHruPjAAKHruPnAAKHruPvAAKHruPzAAKHruR/AAKHruP7AAKHruRXAAKHruRbAAKHruP/AAKHruQDAAKHruQHAAKHruQLAAKHrsSDAAKHrwABlwcAAoeu5A8AAoeu5BMAAoeu5BcAAoeu5BsAAoevAAGXhwACh67kIwACh67kHwACh67kJwACh67kKwACh67kLwACh67kMwACh67kNwACh67j9wACh67kSwACh67kTwACh67kUwACh67kYwACh67kZwACh67kawACh64XDwACh67kcwACh67kXwACh67kdwACh67kgwACh67EYwACh67kiwACh67kjwACh67kkwACh67kRwACh67kbwACh67klwACh67kmwACh67knwACh67kowACh67EUwACh67EAwACh64YFwACh67kpwACh67kqwACh67khwACh67j6wACh67EVwACh67kOwACh67kPwACh67krwACh68AAkmzAAKI3wABmE8AAojfAAGYVwACh67kswACh67ktwACh67kuwACh67kewACh67kwwACh67kxwACh67kywACh67DpwACh67kvwACh67kzwACh67k0wACh67k1wACh67k2wACh67k3wACh67k4wACh67k5wACh67k6wACh5JjKwACiSwAAwACSbcAAok3AAGYqwACiTpjGwACiT4GxwACiT8AAZivAAKJPwABmLMAAok/AAGYtwACiT8AAZi7AAKJPwABmL8AAok/AAGYwwACiT8AAZjHAAKJPwABmMsAAok/AAGYzwACiT8AAZjTAAKJPwABmNcAAok/AAGY2wACiT8AAZjfAAKJPwABmOMAAok/AAGY5wACiT6NHwACiT8AAZjrAAKJPwABmO8AAok/AAGY8wACiT8AAZj3AAKJPwABmPsAAok/AAGY/wACiT8AAZkDAAKJPwABmQcAAok/AAGZCwACiT8AAZkPAAKJPwABmRMAAok/AAGZFwACiT8AAZkbAAKJPwABmR8AAok/AAGZIwACiT8AAZknAAKJPwABmSsAAok/AAGZLwACiT8AAZkzAAKJPwABmTcAAok/AAGZOwACiT8AAZk/AAKJPwABmUMAAok+hPcAAok/AAJJtwACiecAAZlHAAKJ5wABmUsAAonnAAGZTwACiecAAZlTAAKJ5wABmVcAAonnAAGZWwACiecAAZlfAAKJ5wABI6cAAonnAAGZYwACiecAAZlnAAKJ5wABmWsAAonnAAGZbwACiecAAZlzAAKJ5wABmXcAAonnAAGZewACiecAAZl/AAKJ5wABmYMAAonnAAGZhwACiecAAZmLAAKJ5wABmY8AAonnAAGZkwACiecAAZmXAAKJ5wABmZsAAonnAAGZnwACiecAAUm7AAKJ5wABmaMAAonnAAGZpwACiecAAZmrAAKJ5wABma8AAonnAAGZswACiecAAZm3AAKJ5wABmbsAAonnAAGZvwACiecAAZnDAAKJ5wABSbcAAonnAAGZxwACiecAAZnLAAKJ5wABmc8AAonnAAGZ0wACiecAAZnXAAKJ5vObAAKJ5wABmdsAAonnAAGZ3wACiecAAZnjAAKJ5wABmecAAonnAAGZ6wACiecAAZnvAAKJ5wABmfMAAonnAAGZ9wACiecAAZn7AAKJ5wABSa8AAonnAAGZ/wACiecAAZoDAAKJ5wABmgcAAonnAAFJswACiecAAZoLAAKJ5wABmg8AAonnAAGaEwACiecAAZoXAAKJ5wABmhsAAonnAAGaHwACiecAAZojAAKJ5wABmicAAonnAAGaKwACiecAAUmjAAKJ5wABmi8AAonnAAGaMwACiecAAZo3AAKJ5wABSasAAonnAAGaOwACiecAAZo/AAKJ5wABmkMAAok6YxMAAosKWRcAAosLAAGaRwACiwsAAZpLAAKLCwABmk8AAok6YysAAosfAAJJtwACiyIC1AMAAkm7AAKLKmMTAAKLLwABmscAAosrAAFxvwACizZjGwACizsAAkm7AAKLPuBXAAKLPwABcf8AAos+2I8AAos/AAERHwACiz7R8wACizoL7wACizZjHwACi1sAAkm7AAKLXwABTrcAAos2YxMAAotnAAGaZwACi2cAAZp7AAKLZwABmoMAAotnAAFzswACi2cAAXO/AAKLZwABc8MAAos2YysAAouAAAMAAkm/AAKLiwABccMAAouOYxsAAouTAAJJvwACi5bgXwACi5bgVwACi5cAAXH/AAKLltiPAAKLluFPAAKLjmMfAAKLrwACSb8AAouzAAERHwACi7LR8wACi7K+ywACi7LJkwACi45jEwACi8cAAkm/AAKLywABmvsAAovLAAGbEwACi8sAAZsbAAKLywABmxcAAovHAAF0UwACi45jKwACi+AAAwACScMAAovrAAFxxwACi+5jGwACi/MAAknDAAKL9tHzAAKL9wABER8AAov24FMAAov24FcAAov24E8AAov3AAFx/wACi/bYjwACi+5jHwACjBcAAknDAAKMGwABIUsAA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wcAAo/rAAFTDwACj+sAAVMjAAKP6wABnj8AAo/rAAFTXwACj+sAAZ5HAAKP6wABU0MAAo/rAAGeAwACj+sAAZ4fAAKP6wABUqMAAo+WYysAApBUAwACkFZZawACj5MAAZ5fAAKQYmMbAAKQZgL3AAKQZwABM+cAApBm0FcAApBmDxsAApBnAAJJ4wACkHsAAZ5jAAKQYmMTAAKQgI8AApBiYysAApCIAAMAAknnAAKQkwABnmsAApCWYxsAApCaEJsAApCWYx8AApCjAAJJ5wACkKcAAU/7AAKQlmMTAAKQrwABUo8AApCvAAFTDwACkK8AAVNfAAKQrwABnosAApCvAAFTmwACkJZjKwACkMQDAAKQkwABnqMAApDOYxsAApDSEJsAApDOYxMAApDbAAFTmwACkNsAAZ6LAAKQzmMrAAKQ5AMAApCTAAGepwACkO5jEwACkPJgCwACkPIY2wACkPIY8wACkPIY4wACkPIZAwACkPIZDwACkO5jKwACkQwAAwACSesAApEXAAGeqwACkRpjGwACkR8AAVNzAAKRHmjLAAKRHwABnq8AApEfAAGeswACkR6RhwACkRpjKwACkTQDAAKRFwABnrcAApE+YxsAApFCEJsAApFDAAGeuwACkT5jHwACkU8AAknrAAKRUwABT/sAApE+YxMAApFbAAGevwACkVsAAVKDAAKRWwABntMAApFbAAGeywACkVsAAZ7nAAKRWwABU3cAApFbAAFUHwACkVsAAZ73AAKRWwABVC8AApFbAAJJ6wACkYMAAZ7zAAKRPmMrAAKRiAADAAJJ7wACkZMAAZ8bAAKRlmMTAAKRmwABnx8AApGaGSsAApGaGJ8AApGaGMsAApGaGOMAApGaGPMAApGaGQMAApGaGQ8AApGaGSMAApGaGTMAApGaGUcAApGaGNsAApGaGVcAApGaGWMAApGaGacAApGaFcMAApGaYFMAApGaYAsAApGWYysAApHnAAJJ7wACkeoC1AMAAknzAAKR8wABnzcAApH2YxMAApH7AAEyzwACkfpxEwACkfsAAT6HAAKR+qFjAAKR+wABNisAApH6cS8AApH6zesAApH7AAE+iwACkfrLewACkfsAAT5/AAKR+wABXWsAApH6zdsAApH7AAFdWwACkfsAAV3/AAKR+wABG5cAApH7AAEa5wACkfsAARuPAAKR+wABGusAApH7AAE9YwACkfrN5wACkfZjHwACkk7O3wACkk6UQwACkfZjKwACklgAAwACSHMAApJjAAGfPwACkmZjGwACkmsAAkhzAAKSbwABn0MAApJvAAEXLwACkmZjHwACknoJawACknrg0wACknmHAAKSZmMTAAKSiwABXLsAApKKy0MAApKLAAFdEwACkmZjKwACkpgDAAKSYwABn0cAApKiYxsAApKmD7MAApKmESMAApKnAAJIcwACkrMAAZ9PAAKSswABn1MAApKzAAGfVwACkqJjJwACksK9zwACkqJjEwACksq90wACksqU9wACksrLawACksqU8wACkssAAV1HAAKSywABXRsAApKiYysAApLkAwACkmMAAZ9fAAKS7mMbAAKS8g+zAAKS8hEjAAKS8mafAAKS7mMnAAKTAr3PAAKS7mMTAAKTCr3TAAKS7mMrAAKTEAMAApJjAAGfZwACkxpjGwACkxyfAAKTHwACSHMAApMkowACkxynAAKTHg/PAAKTHtMbAAKTHqivAAKTGmMTAAKTPI8AApMaYysAApNEAwACkmMAAZ93AAKTTmMnAAKTUr3PAAKTTmMTAAKTWr3TAAKTWwABXUcAApNbAAFdGwACk1qGhwACk1rNzwACk1rOLwACk05jHwACk3Zn6wACk3bN4wACk3bONwACkmMAAZ9/AAKThmMbAAKTig+zAAKTimfrAAKTiwACSHMAApOXAAGfhwACk5cAAZ9TAAKTlwABn1cAApOWne8AApOXAAGfiwACk4rONwACk4ZjJwACk7K9zwACk4ZjEwACk7q90wACk7sAAV1HAAKTuwABXRsAApO6hocAApO6zc8AApO7AAFetwACk7rOLwACk4ZjHwACk9rN4wACk4ZjKwACk+ADAAKSYwABn48AApPqYxsAApPuD7MAApPvAAJIcwACk/cAAZ9TAAKT6mMnAAKT/r3PAAKT6mMTAAKUBr3TAAKUBs4vAAKUBs3PAAKUBoaHAAKUBwABXRsAApQHAAFdRwACk+pjHwAClCLN4wAClCLONwAClCJn6wACk+pjKwAClDADAAKSYwABn5cAApQ6YxsAApQ+D7MAApQ6YycAApRGvc8AApQ6YxMAApROvdMAApRPAAFdRwAClDpjKwAClFgDAAKSYwABn58AApRiYxsAApRknwAClGcAAkhzAAKUbKMAApRkpwAClGYPzwAClGbTGwAClGaorwAClGJjEwAClISPAAKUYmMrAAKUjAMAApJjAAGfpwAClJZjJwAClJq9zwAClJZjEwAClKK90wAClJZjHwAClKsAATMHAAKUqhMnAAKUqhQHAAKUqhOHAAKUqhOLAAKUqnrbAAKUqwABW2cAApSqt4cAApSqzf8AApSqE9sAApJjAAGfrwAClNZjGwAClNoPswAClNpn6wAClNsAATMHAAKU2hPbAAKU2wABn7MAApTaEycAApTaFAcAApTaE4cAApTaE4sAApTaetsAApTbAAFbZwAClNZjJwAClQq9zwAClNZjEwAClRK90wAClNZjHwAClRrN/wAClRq3hwAClNZjKwAClSQDAAKSYwABn7cAApUuYxsAApUwnwAClTMAAkhzAAKVOKMAApUwpwAClTIJuwAClTISbwAClTJkIwAClTMAAT7vAAKVMrd3AAKVMwABPvcAApUzAAGf0wAClTMAAT7zAAKVLmMTAAKVZI8AApUuYysAApVsAwACkmMAAZ/XAAKVdmMfAAKVewABMwcAApV7AAFbtwAClXsAAVufAAKVdmMTAAKViuFjAAKVir3TAAKVdmMnAAKVlr3PAAKVdmMrAAKVnAMAApJjAAGf3wAClaZjGwAClaoPzwAClasAATMHAAKVqwABW58AApWmYxMAApW64WMAApWmYysAApXAAwACkmMAAZ/jAAKVymMTAAKVzs3rAAKVzs3vAAKVzs5TAAKVymMrAAKV3AMAApJjAAGf5wACleZjGwAClesAAkhzAAKV7qcTAAKV5mMfAAKV9wABA38AApXmYxMAApX+ze8AApXmYysAApYEAwACkmMAAZ/rAAKWDmMfAAKWEwABA38AApYOYxMAApYazlMAApYOYysAApYgAwACkmMAAZ/vAAKWKmMbAAKWLwACSHMAApYypxMAApYqYx8AApY7AAEDfwAClipjEwAClkLN7wAClipjKwAClkgDAAKSYwABn/MAApZSYxMAApZWze8AApZWzlMAApZSYx8AApZjAAEDfwACllJjKwAClmgDAAKSYwABn/cAApZyYxsAApZ2D7MAApZ3AAEDfwAClncAAkhzAAKWgkl3AAKWcmMnAAKWir3PAAKWcmMTAAKWkr3TAAKWks3rAAKWks3vAAKWcmMfAAKWowABW7cAApZyYysAApaoAwACkmMAAaADAAKWsmMbAAKWtg+zAAKWtwABMwcAApa3AAFbmwAClrcAAVu3AAKWthMXAAKWsmMnAAKWzr3PAAKWsmMTAAKW1r3TAAKW1s3rAAKW1s3vAAKW1s5TAAKW1uFjAAKWsmMfAAKW7wABW58AApayYysAApb0AwACkmMAAaATAAKW/mMbAAKXAwABoBcAApb+YxMAApcKzesAApcKze8AApcKzlMAApcK4WMAApb+Yx8AApcfAAFbtwAClv5jKwAClyQDAAKSYwABoBsAApcuYxsAApcyD7MAApczAAEzBwACly5jJwAClz69zwACly5jEwACl0a90wACly5jHwACl08AAVufAAKXLmMrAAKXVAMAApJjAAGgIwACl15jEwACl2L0TwACl15jKwACl2gDAAKSYwABoCcAApdyYxsAApd2D7MAApd3AAJIcwACl38AAaAvAAKXdwABPu8AApdyYycAApeKvc8AApdyYxMAApeSvdMAApeS9E8AApeSzesAApeSze8AApdyYx8AApenAAFbtwACl3JjKwACl6wDAAKSYwABoD8AApe2YxsAApe6D7MAApe2YycAApfCvc8AApe2YxMAApfKvdMAApfKze8AApe2Yx8AApfXAAFbtwACl7ZjKwACl9wDAAKSYwABoEcAApfmYxMAApfqzfcAApfrAAFb5wACl+ZjKwACl/QDAAKSYwABoEsAApf+YxsAApgCD7MAApgDAAJIcwACmApJdwACmAsAAaBTAAKX/mMnAAKYFr3PAAKX/mMTAAKYHr3TAAKYHs33AAKYHwABW+cAApf+Yx8AApguD88AApgvAAFbtwACl/5jKwACmDgDAAKSYwABoFsAAphCYxsAAphGD7MAAphGD88AAphGFAcAAphCYycAAphWvc8AAphCYxMAAphevdMAAphCYysAAphkAwACkmMAAaBfAAKYbmMbAAKYcg+zAAKYcg/PAAKYcwACSHMAAph/AAEahwACmH8AAaBjAAKYbmMnAAKYir3PAAKYbmMTAAKYkr3TAAKYkwABXc8AApiTAAFd1wACmG5jKwACmKAAAwACSfcAApirAAGgawACmK5jGwACmLIPswACmLMAAkn3AAKYuwABoHMAApiyFfcAApiuYycAApjGvc8AApjGz+cAApiuYxMAApjSvdMAApjTAAFe1wACmNEvAAKY0g/3AAKY0wABGucAApjQjwACmK5jHwACmO5uwwACmO8AAaCHAAKY7wABXgMAApjvAAGgowACmK5jKwACmQJV/wACmKsAAaCnAAKZCmMTAAKZDwABXX8AApkKYysAApkUAwACmKsAAaCrAAKZHmMbAAKZIgKvAAKZIwABXgMAApkiZ+sAApkeYxMAApkyzdsAApkzAAEbjwACmTMAAT1jAAKZMwABXf8AApkzAAFdfwACmTMAAkn3AAKZSwABoK8AAplLAAGgvwACmTFbAAKZMwABoLMAApkwjwACmR5jKwACmWAAAwACSfsAAplrAAGg0wACmW5jKwACmXADAAKZawABoNcAApl6YxMAApl/AAGg2wACmXpjKwACmYQDAAKZawABoN8AApmOYysAApmQAAMAAkn/AAKZmwABoOMAApmeYxsAApmjAAJJ/wACmacAARcPAAKZohMnAAKZnmMTAAKZshXzAAKZswABUFsAApmzAAJJ/wACmb8AAVBTAAKZshYvAAKZshZjAAKZshZzAAKZshabAAKZshbbAAKZshaDAAKZshbrAAKZshbjAAKZshbzAAKZshcDAAKZnmMrAAKZ7AADAAJKAwACmfcAAaD3AAKZ+mMbAAKZ/wACQ6MAApoCD3sAApoCD38AApoCD4MAApn6Yx8AApoSD4sAApoSD48AApn6YyMAApoeD48AApn6YxMAApomD5MAApomD5cAApomD5sAApn6YysAApo0AwACmfcAAaD7AAKaPmMbAAKaQg+nAAKaQg+rAAKaPmMTAAKaTg+vAAKaTg+7AAKaTVsAAppOD8sAAppOD9cAAppOD+cAAppOD+8AAppOD98AAppOD9sAAppOEAMAApo+YysAApp4AwACmfcAAYnXAAKagmMbAAKahg+nAAKagmMTAAKajwABidsAApqOYAsAApqOGbsAApqOF88AApqOFi8AApqOFqsAApqOGZ8AApqOGjMAApqPAAEcBwACmoJjKwACmrQAAwACSgcAApq/AAGhAwACmsJjGwACmsbQRwACmscAAaEHAAKaxwABoQsAAprCYxMAAprXAAEbcwACmtayvwACmtarOwACmtbN2wACmtcAARuTAAKa1vHjAAKa1wABG5cAAprXAAEa5wACmtcAARuPAAKa1wABGusAAprXAAEbmwACmsJjHwACmwbO3wACmsJjKwACmwwDAAKavwABoQ8AApsWYxsAApsa0EcAApsWYxMAApsizdsAApsjAAEbjwACmyMAAT1jAAKbIwABXf8AApsWYysAAps0AwACmr8AAaETAAKbPmMfAAKbQtBHAAKbQs7fAAKbPmMTAAKbTs3nAAKbTwABGusAAptPAAEa5wACmz5jKwACm1wDAAKavwABoRcAAptmYx8AAptq0EcAAptqzt8AAptmYxMAApt2zecAApt3AAEa6wACm3cAARrnAAKbZmMrAAKbhAMAApq/AAGhGwACm45jGwACm5LQRwACm45jKwACm5gDAAKavwABoR8AApuiYx8AApum0EcAApumzt8AApuiYxMAApuyzecAApuzAAEa6wACm7MAARrnAAKbomMrAAKbwAMAApq/AAGhIwACm8pjGwACm87QRwACm8pjKwACm9QAAwACSgsAApvfAAGhJwACm+JjEwACm+YXxwACm+YXRwACm+YYWwACm+JjKwACm/QDAAKb3wABoSsAApv+YxsAApwDAAE2MwACnALQRwACnAMAAaEvAAKcAwACSgsAApwTAAGhMwACm/5jHwACnBsAAkoLAAKcHtHzAAKb/mMTAAKcJmsLAAKcJmAzAAKcJwACSgsAApwzAAGhNwACnDMAAaE7AAKcMwABoT8AApwmFvMAApwmFi8AApwmFqsAApwmF+sAApwmF+MAApwmF88AApwmF9sAApwmF8cAApwmF/cAApwmF0cAApwmGC8AApwmGCcAApwmGB8AApwmF/8AApwmF7sAApwmFwMAApwmFw8AApwmFzcAApwmFmMAApwmFtsAApwmFusAApwmFyMAApwmGGcAApwmGG8AApwnAAGgMwACm/5jKwACnKQDAAKb3wABoUsAApyuYxsAApyy0EcAApyzAAGhTwACnLKdowACnK5jEwACnMIjjwACnMJ8owACnMIUDwACnMMAARbnAAKcwhqTAAKcwhpLAAKcwhozAAKcwhobAAKcwhoTAAKcwhoHAAKcwhojAAKcrmMrAAKc8AMAApvfAAGhUwACnPpjGwACnP7QRwACnPpjEwACnQZgEwACnQYbnwACnQYbkwACnQYbhwACnQYbawACnQYbUwACnQYbOwACnQYbRwACnQYbJwACnQYbEwACnQYbA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wACoV5jEwACoXYMcwACoXZVNwACoXYWSwACoXcAAkoTAAKhhwABohcAAqF2WisAAqF2D/cAAqFeYysAAqGWVf8AAqFbAAGiJwACoZ5jGwACoaKU0wACoaIWPwACoaIPGwACoZ5jHwACobIC9wACoZ5jEwACobrMYwACobrX6wACobkjAAKhuI8AAqGeYysAAqHMAwACoVsAAaIrAAKh1mMbAAKh2gL3AAKh2mozAAKh2wABoi8AAqHaIasAAqHa6xsAAqHWYxMAAqHxWwACofIRewACofIMcwACofIP9wACofJaKwACofCPAAKh1mMrAAKiDAMAAqFbAAGiOwACohZjEwACohsAAaITAAKiFmMfAAKiItLfAAKiFmMrAAKiKAMAAqFbAAGiPwACojJjEwACojcAAaITAAKiNI8AAqIyYx8AAqJC0t8AAqIyYysAAqJIAwACoVsAAaJHAAKiUmMbAAKiVtLfAAKiVwACShMAAqJfAAGiSwAColJjEwAComcAAaITAAKiZI8AAqJSYysAAqJwAAMAAkiXAAKiewABok8AAqJ+YxsAAqKDAAJIlwACoobdVwACon5jHwACoo8AAWP7AAKifmMTAAKilwACSJcAAqKbAAFj/wACopsAAWQDAAKilwABY8sAAqKXAAFjxwACopcAAWPDAAKilwABY78AAqKXAAFjuwACopcAAWO3AAKilwABY7MAAqKXAAFjrwACopcAAWOrAAKilwABY6cAAqKW768AAqKXAAFjowACopbv7wACopcAAWObAAKilwABY58AAqKXAAFjlwACopcAAWOTAAKilwABY48AAqKXAAFjiwACopcAAWODAAKilwABY4cAAqKXAAFNqwACopcAAWN/AAKilwABY3sAAqKXAAFjdwACopcAAWNzAAKilwABY2sAAqKXAAFjZwACopcAAWNjAAKilwABY18AAqKW1csAAqKXAAFjWwACopcAAWNXAAKilwABY1MAAqKXAAFjTwACopcAAWNLAAKilwABY0cAAqKWvp8AAqKXAAFjPwACopcAAWM7AAKilwABYzcAAqKXAAFjMwACopcAAWMvAAKilwABYycAAqKXAAFjKwACopcAAWMjAAKilwABYx8AAqKXAAFjGwACopcAAWMXAAKilwABYxMAAqKXAAFjDwACopcAAU4nAAKilwABY88AAqKXAAFj0wACopcAAWPXAAKilwABY9sAAqKXAAFj3wACopcAAWPjAAKifmMrAAKjjAMAAqJ7AAGiUwACo5ZjGwACo5sAAkiXAAKjnlnTAAKjlmMnAAKjpwABNxcAAqOWYxMAAqOvAAGiVwACo66+dwAConsAAaJbAAKjumMbAAKjvg+zAAKjvwACSJcAAqPHAAFkBwACo8cAAWQLAAKjxwABZA8AAqPHAAFkEwACo8cAAWQXAAKjxwABZBsAAqPHAAFkHwACo8cAAWQjAAKjxwABZCcAAqPHAAFkKwACo8cAAWQvAAKjxwABZDMAAqPHAAFkNwACo8cAAWQ7AAKjxwABZD8AAqPHAAFLPwACo8byVwACo8cAAWRLAAKjxwABZFMAAqPHAAFkVwACo8cAAUeDAAKjxvFbAAKjxr4XAAKjxwABZJcAAqPHAAFkmwACo8cAAWSfAAKjxwABZKMAAqPHAAFkpwACo8cAAWSrAAKjxwABZLMAAqPHAAFktwACo8cAAWS7AAKjxwABZL8AAqPHAAFkwwACo8cAAWTHAAKjxwABZGcAAqPHAAFkywACo8cAAWTPAAKjxwABZNMAAqPHAAFk2wACo8cAAWTXAAKjxwABZN8AAqO6YxMAAqRzAAGiVwACpHK+dwACo7pjKwACpHwDAAKkfwABNxcAAqJ7AAGiXwACpIpjGwACpI4PswACpI4UswACpI6qywACpI6qzwACpIpjJwACpKADAAKkowABNxcAAqSKYxMAAqSvAAGiVwACpIpjKwACpLZV/wAConsAAaJjAAKkvmMbAAKkwg+zAAKkwg0rAAKkwgknAAKkwtSXAAKkvmMnAAKk1wABNxcAAqS+YxMAAqTfAAGiVwACpL5jKwACpOQDAAKiewABom8AAqTuYxsAAqTyD7MAAqTyAvcAAqTy1JcAAqTuYycAAqUDAAE3FwACpO5jEwACpQsAAaJXAAKk7mMrAAKlEAMAAqJ7AAGicwACpRpjGwACpR4PswACpR4WSwACpR7WwwACpR4JJwACpRpjJwACpTMAATcXAAKlGmMTAAKlOwABolcAAqUaYysAAqVAAwAConsAAaJ3AAKlSmMbAAKlTg+zAAKlThZLAAKlTtbDAAKlTgL3AAKlSmMnAAKlYwABNxcAAqVKYxMAAqVrAAGiVwACpUpjKwACpXADAAKiewABonsAAqV6YxsAAqV+D7MAAqV+FksAAqV+1JcAAqV6YycAAqWPAAE3FwACpXpjEwACpZcAAaJXAAKlemMrAAKlnAMAAqJ7AAGifwACpaZjGwACpaoPswACpaoWSwACparWwwACpaoJJwACparUlwACpaZjJwACpcMAATcXAAKlpmMTAAKlywABolcAAqWmYysAAqXQAwAConsAAaKDAAKl2mMbAAKl3g+zAAKl3hZLAAKl3tbDAAKl3gL3AAKl3tSXAAKl2mMnAAKl9wABNxcAAqXaYxMAAqX/AAGiVwACpdpjKwACpgQDAAKiewABoocAAqYOYxsAAqYSD7MAAqYSzy8AAqYS1JcAAqYOYycAAqYjAAE3FwACpg5jEwACpisAAaJXAAKmDmMrAAKmMAMAAqJ7AAGiiwACpjpjGwACpj4PswACpj4JJwACpj7UlwACpj4SvwACpjpjJwACplMAATcXAAKmOmMTAAKmWwABolcAAqY6YysAAqZgAwAConsAAaKPAAKmamMbAAKmbg+zAAKmbmQjAAKmbgpTAAKmbtSXAAKmbhK/AAKmbhCLAAKmamMnAAKmiwABNxcAAqZqYxMAAqaTAAGiVwACpmpjKwACppgDAAKiewABopMAAqaiYxsAAqamD7MAAqamZ+sAAqamFLMAAqamEr8AAqaiYycAAqa7AAE3FwACpqJjEwACpsMAAaJXAAKmomMrAAKmyAMAAqJ7AAGilwACptJjGwACptSfAAKm1wACSJcAAqbcowACptSnAAKm1wABTOsAAqbWuncAAqbWGVMAAqbWwkcAAqbWzO8AAqbXAAGimwACptbB4wACptcAAUy7AAKm1wABTLcAAqbXAAFM0wACptJjEwACpxCPAAKm0mMrAAKnGAMAAqJ7AAGinwACpyJjGwACpyYPswACpyYKUwACpyYJrwACpyJjJwACpzcAATcXAAKnImMTAAKnPwABolcAAqciYysAAqdEAwAConsAAaKjAAKnTmMbAAKnUJ8AAqdTAAJIlwACp1ijAAKnUKcAAqdTAAEt+wACp1MAAS4DAAKnUwABLfcAAqdTAAEt/wACp1K4ywACp1MAAaKnAAKnUhWPAAKnUwABoqsAAqdOYxMAAqeEjwACp05jKwACp4wDAAKiewABoq8AAqeWYxsAAqeaD7MAAqeaZCMAAqea1JcAAqeWYycAAqerAAE3FwACp5ZjEwACp7MAAaJXAAKnlmMrAAKnuAMAAqJ7AAGiswACp8JjGwACp8YPswACp8YKUwACp8YSvwACp8JjJwACp9cAATcXAAKnwmMTAAKn3wABolcAAqfCYysAAqfkAwAConsAAaK3AAKn7mMbAAKn8g+zAAKn8rO3AAKn8hSzAAKn7mMnAAKoAwABNxcAAqfuYxMAAqgLAAGiVwACp+5jKwACqBADAAKiewABorsAAqgaYxsAAqgeD7MAAqgeCScAAqgeEr8AAqgaYycAAqgvAAE3FwACqBpjEwACqDcAAaJXAAKoGmMrAAKoPAMAAqJ7AAGivwACqEZjGwACqEoPswACqEoXcwACqEoXdwACqEoQiwACqEoFVwACqEZjJwACqGMAATcXAAKoRmMTAAKoawABolcAAqhGYysAAqhwAwAConsAAaLDAAKoemMbAAKofg+zAAKofmwzAAKofhCLAAKofgVXAAKoemMnAAKokwABNxcAAqh6YxMAAqibAAGiVwACqHpjKwACqKADAAKiewABoscAAqiqYxsAAqiuD7MAAqiuD88AAqiuCa8AAqiuFksAAqivAAErswACqKpjJwACqMcAATcXAAKoqmMTAAKozwABolcAAqiqYysAAqjUAwAConsAAaLLAAKo3mMbAAKo4g+zAAKo4mxDAAKo4wABO58AAqjjAAFjbwACqOIY/wACqN5jJwACqPsAATcXAAKo3mMTAAKpAwABolcAAqjeYysAAqkIAAMAAkoUAwACShsAAqkXAAGi1wACqRpjHwACqR8AAkobAAKpIsmTAAKpIuG7AAKpIwABXIMAAqkelEMAAqke0EcAAqkerE8AAqke1hsAAqkeG3cAAqkezt8AAqkaYxMAAqlLAAJKGwACqU8AAaLbAAKpTwABouMAAqlPAAFUpwACqUsAAWOTAAKpSwABY5cAAqlLAAFj0wACqUsAAWPPAAKpSwABY0cAAqlLAAFjSwACqUsAAWNPAAKpSwABY9cAAqlLAAFjDwACqUsAAWMTAAKpSwABYxcAAqlLAAFjGwACqUsAAWMfAAKpSwABYyMAAqlLAAFjJwACqUsAAWMrAAKpSwABYy8AAqlLAAFjmwACqUsAAWOfAAKpSwABY+MAAqlLAAFjywACqUrv7wACqUsAAWPbAAKpSwABYzMAAqlLA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AKvqwABB08AAq+aYysAAq+0AwACrocAAaQbAAKvvmMfAAKvwwABCqMAAq/DAAEKtwACr8LZWwACr75jEwACr9MAAQfvAAKv0wABBxcAAq/TAAFxDwACr9MAAQdbAAKv0wABpA8AAq/TAAEHTwACr75jKwACr+wDAAKuhhoXAAKv9mMfAAKv+wABCqMAAq/7AAEKtwACr/rZWwACr/ZjEwACsAsAAQfvAAKwCwABBxcAArALAAFxDwACsAsAAQdbAAKwCwABB08AAq/2YysAArAgAwACrocAAaQfAAKwKmMbAAKwLasAArAuFLMAArAvAAGkIwACsC4KQwACsC8AAaQnAAKwLwABpCsAArAqYx8AArBLAAEKowACsEsAAQq3AAKwStlbAAKwKmMTAAKwWwABB+8AArBbAAEHFwACsFsAAXEPAAKwWwABB1sAArBbAAEHTwACsFsAAXErAAKwWwABcScAArBbAAFxMwACsFsAAXE3AAKwWwABcR8AArBbAAFxLwACsFsAAXEjAAKwWwABpD8AArAqYysAArCQAwACsJMAAkonAAKwmwABpC8AAq6HAAGkRwACsKJjHwACsKZWYwACsKJjEwACsK8AAQdDAAKwrwABB1cAArCuWW8AArCiYysAArC8AwACrocAAaRLAAKwxmMfAAKwywABcRMAArDKVmMAArDLAAEHSwACsMZjEwACsNsAAQdDAAKw2wABB1cAArDaWW8AArDbAAGkUwACsNsAAaRPAAKwxmMrAAKw8AMAAq6HAAGkVwACsPpjHwACsP8AAQdLAAKw+mMTAAKxBwABpFMAArEHAAGkTwACsPpjKwACsRADAAKuhwABpF8AArEaYx8AArEfAAEHSwACsRpjEwACsScAAaRTAAKxJwABpE8AArEaYysAArEwAwACrocAAaRjAAKxOmMbAAKxPasAArE+h68AArE+VmMAArE/AAGkZwACsTpjEwACsVMAAXE7AAKxUwABB0MAArFTAAEHVwACsVMAAaRvAAKxUwABpGsAArFSWW8AArE6YysAArFsAAMAAkorAAKxdmMXAAKxewABpNMAArF7AAGk1wACsXcAAaTbAAKxhmMbAAKxiwACSisAArGOyZMAArGPAAGk3wACsYZjEwACsZsAAXVrAAKxmwACSisAArGjAAEjXwACsaMAAaT3AAKxmtKPAAKxmvPvAAKxmwABGQMAArGa88sAArGa89cAArGa878AArGa8+MAArGbAAEY8wACsZsAARj3AAKxmwABGPsAArGaFwMAArGbAAEY/wACsZrkFwACsZp8owACsZr0MwACsZr0GwACsZr0DwACsZodEwACsYZjKwACsfQDAAKxdwABpS8AArH+YxsAArIDAAGlMwACsgMAAkorAAKyCtHzAAKyCr7LAAKyCwABRuMAArILAAFPowACsgsAAXIHAAKyCuHjAAKyCwABER8AArILAAGlPwACsgsAAaVDAAKx/mMTAAKyMh0TAAKyMvQPAAKyMvQbAAKyMwABpXsAArIyfKMAArIy5BcAArIy9DMAArIyFwMAArIzAAGliwACsjMAAaVLAAKyMwABpUcAArIzAAJKKwACsmMAAaVXAAKyYwABpVMAArIzAAEY/wACsf5jKwACsnAAAwACSi8AArJ6YxsAArJ/AAGp8wACsn8AAan7AAKyfwABqgMAArJ/AAGm5wACsn8AAaoHAAKyfwABqgsAArJ7AAGlqwACsppjGwACsp8AAkovAAKyosmTAAKyopPPAAKyopJjAAKyouFLAAKyouBXAAKyouFHAAKyowABER8AArKjAAF1ZwACsqMAAaWvAAKyotiPAAKyowABpbMAArKi4U8AArKfAAF1hwACsp8AAXWDAAKynwABpbcAArKfAAGlvwACsp8AAaXDAAKynwABpcsAArKaYxMAArLvAAGl0wACsu8AARGXAAKy7wABEZMAArLvAAF1fwACsu8AARFPAAKy7wABphcAArLvAAGmBwACsu8AAaY/AAKy7wABpg8AArLvAAGmOwACsu8AAaYTAAKymmMrAAKzHAMAArJ7AAGmowACsyZjGwACsysAAkovAAKzLsmTAAKzLuFLAAKzLuBXAAKzLwABER8AArMvAAF1ZwACsy8AAaanAAKzLtiPAAKzLwABcf8AArMvAAFJnwACsy8AAaarAAKzLwABpq8AArMvAAGmswACsy8AAaa3AAKzJmMfAAKzZwACSi8AArNq8WMAArNqvssAArNnAAGmuwACs2cAAaa/AAKzZwABpsMAArMmYxMAArOCwB8AArODAAF1fwACs4IXiwACs4LTcwACs4MAAaXvAAKzgwABp4sAArODAAGl+wACs4MAAabXAAKzgwABpxMAArODAAGnywACs4MAAafPAAKzgwABpysAArODAAGoJwACs4MAAZp7AAKzgwABmoMAArODAAGoLwACs4MAAag3AAKzgwABpzMAArODAAGnOwACs4MAAkovAAKz0wABqHMAArODAAGopwACs4KJowACs4MAAadDAAKzgwABp0cAArODAAGnSwACs4MAAadTAAKzgwABqT8AArODAAGmCwACs4MAAamLAAKzgwABqZMAArODAAGpmwACs4MAAadbAAKzgwABp2MAArODAAGnZwACs4MAAamrAAKzgwABp28AArMmYysAArQYAwACsnsAAanfAAK0ImMbAAK0JwACSi8AArQrAAEyVwACtCJjHwACtDIFVwACtDIO3wACtCJjEwACtD8AAR2fAAK0PwABg0sAArQiYysAArRIAwACsnsAAannAAK0UmMbAAK0VwABp5sAArRWGJcAArRSYysAArRgAwACsnsAAanrAAK0amMbAAK0bwABi0cAArRvAAGLTwACtG8AAYtXAAK0amMrAAK0fAMAArJ7AAGp7wACtIZjGwACtIsAAkovAAK0jlzjAAK0hmMTAAK0lwABqYcAArSGYx8AArSeAlsAArSewMcAArSGYysAArSoAAMAAkozAAK0smMbAAK0twABqg8AArS2VKcAArS3AAF7rAMAAko3AAK0xmMTAAK0ywABqyMAArTHAAGqEwACtNJjHwACtNYC9wACtNJjEwACtN7lpwACtNJjKwACtOQDAAK0xwABqhcAArTuYxsAArTzAAJKNwACtPbYjwACtPcAAU63AAK09smTAAK08pGHAAK07mMfAAK1CwACSjcAArUPAAFP+wACtO5jEwACtRblpwACtRbk+wACtRblEwACtRbkOwACtRbkCwACtRcAAaobAAK1FwACSjcAArUzAAGqHwACtRblwwACtRbkLwACtRbkbwACtRcAAaojAAK1FuPzAAK1FsSDAAK07mMrAAK1UAMAArTHAAGqVwACtVpjHwACtV4C9wACtVpjEwACtWblpwACtVpjKwACtWwDAAK0xwABqlsAArV2YxMAArV65acAArV65PsAArV65LsAArV2YysAArWIAwACtMcAAapfAAK1kmMfAAK1lgL3AAK1kmMTAAK1nuWnAAK1kmMrAAK1pAMAArTHAAGqYwACta5jGwACtbMAAko3AAK1tsmTAAK1rmMTAAK1vuWnAAK1vuT7AAK1vuSzAAK1vuS3AAK1rmMrAAK10AMAArTHAAGqZwACtdpjHwACtd4C9wACtdpjEwACteblpwACtdpjKwACtewDAAK0xwABqmsAArX2YxsAArX7AAJKNwACtf7YjwACtf7JkwACtfZjHwACtgsAAko3AAK2DwABT/sAArX2YxMAArYW5acAArYW5PsAArYW5RMAArYW4/MAArYW5JcAArYXAAGqbwACtfZjKwACtjADAAK0xwABqn8AArY6Yx8AArY+AvcAArY6YxMAArZG5acAArY6YysAArZMAwACtMcAAaqDAAK2VmMbAAK2WwACSjcAArZfAAFP+wACtlsAAaqHAAK2WwABqosAArZbAAF8VwACtlZjEwACtnMAAaqPAAK2cuWnAAK2cwABqpMAArZzAAGqlwACtnMAAaqbAAK2cuUTAAK2cuQvAAK2cuQ7AAK2cuPXAAK2cuQLAAK2cuSvAAK2cuTTAAK2cuTXAAK2cuTnAAK2cuSzAAK2cuS7AAK2cwABqqcAArZzAAGqqwACtnLk+wACtnMAAaqvAAK2VmMrAAK2xAMAArTHAAGqwwACts5jHwACttIC9wACts5jEwACttrlpwACts5jKwACtuADAAK0xwABqscAArbqYxsAArbvAAF8VwACtu8AAXxbAAK26mMTAAK2+wABqo8AArb65acAArb7AAGqywACtvsAAarPAAK2+uT7AAK26mMrAAK3EAMAArTHAAGq7wACtxpjHwACtx4C9wACtxpjEwACtyblpwACtxpjKwACtywDAAK0xwABqvMAArc2YxsAArc7AAJKNwACtz7JkwACtzZjEwACt0blpwACt0bk+wACt0cAAko3AAK3UwABqvcAArdTAAEXDwACt1MAAasHAAK3UwABqwsAArdTAAGrDwACt0bEAwACt0YYXwACtzZjKwACt3ADAAK0xwABqx8AArd6YxsAArd+AvcAArd6YysAAreEAAMAAko7AAK3jwABqycAAreSYxsAAreVqwACt5YKQwACt5JjEwACt6CPAAK3kmMrAAK3qAMAArePAAGrKwACt7JjGwACt7WrAAK3twABf8cAAreyYxMAArfDAAGrNwACt8FbAAK3wwABq0MAArfAjwACt7JjKwACt9QDAAK31wABqy8AArePAAGrSwACt+JjGwACt+cAAatPAAK35wABq1MAArfnAAGrVwACt+cAAXzTAAK35wABfNcAArfiYxMAArf+EXsAArf9WwACt/8AAZ5HAAK3/wABq2MAArf/AAGrZwACt/4McwACt/yPAAK34mMfAAK4HgVXAAK34mMrAAK4JAMAArePAAGrawACuC5jHwACuDIC9wACuC5jEwACuDrlpwACuC5jKwACuEADAAK3jwABq28AArhKYxsAArhPAAF8VwACuE8AAXxbAAK4TwABq3MAArhPAAF80wACuE8AAXzXAAK4SmMTAAK4ZuWnAAK4ZwABq3sAArhnAAGrgwACuGcAAat/AAK4ZwABq4cAArhm5PsAArhnAAGrkwACuEpjKwACuIQDAAK3jwABq5cAAriOYxsAAriSDSsAAriTAAF95wACuI5jEwACuJyPAAK4jmMrAAK4pAMAArePAAGrnwACuK5jGwACuLMAAQ77AAK4swABQDMAAriuYxMAAri/AAGrowACuL8AAUA3AAK4vI8AAriuYx8AArjOBVcAAriuYysAArjUAwACt48AAauvAAK43mMbAAK44wABq7MAArjjAAGrtwACuOMAAau7AAK44wABq78AArjeYxMAArj3AAF+EwACuPZlJwACuPcAAX4PAAK49wABq8cAArj2iDsAArj3AAGrowACuPcAAUA3AAK43mMfAAK5FmEDAAK43mMrAAK5HAMAArePAAGrywACuSZjGwACuSoS+wACuSsAAko7AAK5MuBXAAK5KhDXAAK5KwABq88AArkrAAGr0wACuSsAAYXbAAK5JmMTAAK5SwABq9sAArlLAAGr3wACuUsAAavjAAK5SwABq+cAArlLAAGr6wACuUsAAavvAAK5JmMrAAK5ZAMAArePAAGr8wACuW5jHwACuXIC9wACuW5jEwACuXrlpwACuW5jKwACuYADAAK3jwABq/cAArmKYxsAArmPAAJKOwACuZLgVwACuY8AAXzTAAK5jwABfNcAArmPAAF8VwACuY4S+wACuYpjEwACuarlpwACuark+wACuasAAawHAAK5qwABq0MAArmrAAGsEwACuasAAawDAAK5qwABq/8AArmKYysAArnIAAMAAko/AAK50wABrBcAArnWYxMAArnbAAGsGwACudsAAko/AAK54wABrB8AArnWYysAArnoAAMAAkpDAAK58wABrCMAArn2YxsAArn6AvcAArn7AAJKQwACugLYjwACugMAAawnAAK6AwABf/8AArn2Yx8AAroTAAJKQwACuhbR8wACuhcAAU63AAK6FwABT/sAArn2YxMAArom5acAArom5PsAArom5RMAArom5b8AAronAAGsMwACuicAAawvAAK6JwABrDsAAronAAGsPwACuicAAar/AAK6JuQXAAK6JwABrEMAArom5G8AArn2YysAArpYAAMAAkpHAAK6YwABrFsAArpmYxsAArprAAGsXwACumpu4wACumsAAaxjAAK6atzTAAK6as7fAAK6apSLAAK6awACSkcAArqHAAF/+wACumZjHwACuo4C9wACuo7EqwACumZjEwACupsAAQW/AAK6mwABrGcAArqa5acAArqa5PsAArqbAAGsawACupsAAaxvAAK6muWzAAK6mwABrHsAArqa5GcAArqa48MAArqa4+MAArqa5KsAArqa5IcAArqa5GsAArqa478AArqa5RMAArqa5HcAArqa5K8AArqbAAJKRwACuucAAayDAAK6muSzAAK6muS7AAK6mwABrIcAArqbAAGsiwACupsAAayPAAK6mwABrJMAArqbAAGsdwACupsAAaxzAAK6mwABrJcAArqa5cMAArqa5NMAArpmYysAArsYAAMAAkpLAAK7IwABrJ8AArsmYxsAArsrAAGsowACuysAAaynAAK7JmMTAAK7NwABrKsAArs3AAGsrwACuzcAAayzAAK7NwABrLcAArs3AAGsuwACuzcAAay/AAK7NwABrMMAArs3AAGsxwACuzcAAazPAAK7JmMrAAK7XAMAArsjAAGs0wACu2ZjGwACu2oFUwACu2ZjEwACu3GTAAK7cgY3AAK7cgcbAAK7cg3zAAK7cnODAAK7cwABJh8AArtmYx8AAruOqv8AAruPAAEZWwACu46q6wACu2ZjKwACu5wDAAK7IwABrNcAArumYxsAArurAAGs2wACu6ZjEwACu7GTAAK7sgY3AAK7pmMrAAK7vAMAArsjAAGs3wACu8ZjGwACu8oCWwACu8ZjEwACu9GTAAK70gY3AAK70gcbAAK70g3zAAK70nODAAK70wABJh8AArvRIwACu9CPAAK7xmMfAAK79g8bAAK79qr/AAK79wABGVsAArv2qusAArvGYysAArwIAwACuyMAAazrAAK8EmMTAAK8FZMAArwWBjcAArwWBxsAArwWc4MAArwXAAEmHwACvBSPAAK8EmMfAAK8Mqr/AAK8MwABGVsAArwSYysAArw8AwACuyMAAazzAAK8RmMTAAK8SZMAArxKBjcAArxKBxsAArxKc4MAArxLAAEmHwACvEiPAAK8RmMfAAK8Zqr/AAK8ZwABGVsAArxGYysAArxwAwACuyMAAaz7AAK8emMTAAK8fZMAArx+BjcAArx+BxsAArx+c4MAArx/AAEmHwACvHyPAAK8emMfAAK8mqr/AAK8mwABGVsAArx6YysAArykAwACuyMAAaz/AAK8rmMbAAK8suUbAAK8rmMTAAK8uSMAAry5kwACvLoGNwACvLoHGwACvLiPAAK8rmMfAAK80g8bAAK80qr/AAK80wABGVsAAryuYysAArzgAwACuyMAAa0LAAK86mMfAAK87wABGVsAArzqYysAArz0AwACuyMAAa0PAAK8/mMbAAK9AhcXAAK9AhcfAAK8/mMrAAK9DAMAArsjAAGtEwACvRZjEwACvRkjAAK9GgcbAAK9GZMAAr0aBjcAAr0YjwACvRZjHwACvTIPGwACvTKq/wACvTMAARlbAAK9FmMrAAK9QAMAArsjAAGtGwACvUpjEwACvU0jAAK9TgcbAAK9TZMAAr1OBjcAAr1MjwACvUpjHwACvWYPGwACvWaq/wACvWcAARlbAAK9SmMrAAK9dAMAArsjAAGtIwACvX5jGwACvYICWwACvX5jEwACvYkjAAK9iZMAAr2KDfMAAr2KBjcAAr2KBxsAAr2IjwACvX5jHwACvaYPGwACvaaq/wACvacAARlbAAK9fmMrAAK9tAMAArsjAAEfrwACvb5jGwACvcIaUwACvcIaVwACvcIFUwACvb5jEwACvdJcuwACvdJcvwACvdGTAAK90gY3AAK90gcbAAK90g3zAAK90SMAAr3RjwACvdICXwACvdIFrwACvdIFtwACvdCPAAK9vmMfAAK+Bg8bAAK+Bqr/AAK+BwABGVsAAr4HAAGtLwACvb5jKwACvhgDAAK+GwABrSsAAr4aWhsAArsjAAGtNwACvipjGwACvi8AAa07AAK+LwABf8cAAr4ulIsAAr4uBVMAAr4vAAEYFwACvi6RhwACvipjHwACvkoC9wACvipjEwACvlLlpwACvlMAAa1DAAK+UuT7AAK+UuUTAAK+UuR3AAK+UhhfAAK+UuPvAAK+UuP7AAK+UuPXAAK+UuXbAAK+UwABrWsAAr5TAAGtbwACvlLkhwACvlLkIwACvlMAAa17AAK+UuPDAAK+UuSjAAK+UuPHAAK+UuXfAAK+UwABrVsAAr5TAAGtgwACvlMAAa2HAAK+UwABrYsAAr5S5c8AAr5S5HsAAr4qYysAAr64AwACuyMAAa2XAAK+wmMbAAK+xpSLAAK+xwABf8cAAr7GBVMAAr7CYxMAAr7WCn8AAr7WawsAAr7W5HcAAr7W5d8AAr7W48MAAr7W5KMAAr7XAAGtewACvsJjKwACvvQAAwACSk8AAr7/AAGtrwACvwJjGwACvwZizwACvwZiTwACvwcAAa2zAAK/AmMfAAK/FgVXAAK/FYcAAr8CYxMAAr8hWwACvyJcowACvyMAAYITAAK/InSrAAK/IgK3AAK/IlzvAAK/Ily/AAK/IwABrbsAAr8CYysAAr9EAwACvv8AAa3PAAK/TmMbAAK/UgJbAAK/Ug83AAK/Ug7XAAK/TmMfAAK/Yg8bAAK/TmMrAAK/aAADAAJKUwACv3JjGwACv3ZXqwACv3ZXrwACv3ZXswACv3YI6wACv3YI3wACv3ZXtwACv3ZXuwACv3YIzwACv3ZXvwACv3ZXwwACv3YI1wACv3YI2wACv3YIuwACv3ZXxwACv3ZXywACv3ZXzwACv3ZX0wACv3ZX1wACv3ZX2wACv3ZX3wACv3ZX4wACv3ZX5wACv3ZX6wACv3ZX7wACv3YIvwACv3ZX8wACv3ZX9wACv3ZX+wACv3ZX/wACv3ZYAwACv3ZYBwACv3ZYCwACv3ZYDwACv3YIwwACv3ZYEwACv3ZYFwACv3ZYGwACv3ZYHwACv3ZYIwACv3ZYJwACv3ZYKwACv3YIxwACv3ZYLwACv3ZYMwACv3ZYNwACv3ZYOwACv3ZYPwACv3ZYQwACv3ZYRwACv3ZYSwACv3ZYTwACv3ZYUwACv3ZYVwACv3ZYWwACv3ZYXwACv3ZYYwACv3ZYZwACv3ZYawACv3ZYbwACv3ZYcwACv3ZYdwACv3ZYewACv3ZYfwACv3ZYgwACv3ZYhwACv3ZYiwACv3YI7wACv3ZYjwACv3YIywACv3ZYkwACv3ZYlwACv3YI8wACv3ZYmwACv3YI9wACv3ZYnwACv3ZYowACv3ZYpwACv3ZYqwACv3ZYrwACv3YI+wACv3ZYswACv3ZYtwACv3ZYuwACv3ZYvwACv3ZYwwACv3ZYxwACv3ZYywACv3ZYzwACv3ZY0wACv3ZY1wACv3ZY2wACv3YI/wACv3ZY3wACv3ZY4wACv3ZY5wACv3ZY6wACv3ZY7wACv3ZY8wACv3YJAwACv3ZY9wACv3ZY+wACv3ZY/wACv3ZZAwACv3YI0wACv3ZZBwACv3YI4wACv3YI5wACv3ZZCwACv3ZZDwACv3ZZEAMAAkpXAALBMmMbAALBNwACSlcAAsE7AAGt1wACwTJjEwACwUMAAa3bAALBQwABrecAAsFCgAMAAsFCWWMAAsFDAAJKVwACwVcAAa3vAALBVwABrfsAAsFXAAGt/wACwVb2zwACwUMAAa3zAALBQwABoVwDAAJKWwACwXJjFwACwXcAAa4vAALBdwABrjMAAsFyYxsAAsGDAAJKWwACwYcAAa5PAALBcmMTAALBjwACSlsAAsGTAAGuUwACwXMAAa43AALBmmMbAALBnwACSlsAAsGjAAGuOwACwaMAAa4/AALBowABrkMAAsGaYxMAAsGxLwACwbIC/wACwbIClwACwbMAAQ6zAALBslmTAALBsgkbAALBsh1jAALBswABDqsAAsGyD/cAAsGyAq8AAsGyZSsAAsGyEXsAAsGyXKsAAsGyWbcAAsGysl8AAsGzAAEOvwACwbCPAALBswACSlsAAsH7AAGuRwACwZpjHwACwgIPVwACwgIFVwACwgIO3wACwgINowACwgGHAALCAKcAAsGaYysAAsIcAwACwh5ZaAMAAkpfAALCKwABrlcAAsIuYxsAAsIzAAJKXwACwjcAAa5bAALCLmMfAALCPXMAAsI+BVcAAsI9hwACwi5jEwACwk4McwACwi5jKwACwlQDAALCKwABrl8AAsJeYxsAAsJjAAJKXwACwmcAAa5jAALCXmMfAALCbXsAAsJeYxMAAsJ1dwACwl5jKwACwnwAAwACSmMAAsKHAAGuZwACwopjGwACwo8AAkpjAALCkwABrmsAAsKKYxMAAsKbAAJKYwACwp8AAa5vAALCmS8AAsKaAv8AAsKaCRsAAsKaEXsAAsKaXKsAAsKaXLcAAsKKYyMAAsK9hwACwopjHwACwsWHAALCxnvjAALCzuh7AALCimMrAALC1AADAAJKZwACwt8AAa57AALC4mMbAALC5wACSmcAAsLrAAEO9wACwuJjEwACwvEvAALC4mMfAALC+g2jAALC4mMrAALDAAADAAJKawACwwpjGwACww8AAkprAALDEwABrn8AAsMTAAGugwACwxMAAa6HAALDEwABrosAAsMTAAGujwACwxMAAa6TAALDCmMTAALDLwABrpcAAsMvAAGupwACwy8AAa6rAALDLwABrrsAAsMvAAGuxwACwy8AAa7LAALDLwABrs8AAsMvAAJKawACw08AAa7TAALDTwABrt8AAsNPAAGu4wACw08AAa7nAALDTwABrugDAAJKbwACw2ZjFwACw2sAAa7vAALDZmMbAALDcwACSm8AAsN3AAGvhwACw2cAAa7zAALDfmMbAALDgwACSm8AAsOGWdMAAsN+YycAAsOMAwACw35jEwACw5ZXSwACw5YPNwACw5cAARCnAALDZwABrv8AAsOmYxsAAsOrAAJKbwACw68AAa8DAALDrwABrwcAAsOmYxMAAsO6V0sAAsO6DzcAAsO7AAEQpwACw6ZjKwACw8gDAALDZwABrw8AAsPSYxMAAsPWV0sAAsPWDzcAAsPXAAEQpwACw9JjKwACw+QDAALDZwABrxMAAsPuYxMAAsPyV0sAAsPyDzcAAsPzAAEQpwACw+5jKwACxAADAALDZwABrxcAAsQKYxsAAsQPAAJKbwACxBMAAa8bAALECmMTAALEGldLAALEGg83AALEGwABEKcAAsQKYysAAsQoAwACw2cAAa83AALEMmMbAALENwACSm8AAsQ7AAGvGwACxDJjEwACxEJXSwACxEIPNwACxEMAARCnAALEMmMrAALEUAMAAsNnAAGvOwACxFpjGwACxF8AAkpvAALEYwABrxsAAsRaYxMAAsRqV0sAAsRqDzcAAsRaYysAAsR0AwACw2cAAa8/AALEfmMTAALEgwABEKcAAsR+YysAAsSIAwACw2cAAa9DAALEkmMTAALElwABEKcAAsSSYysAAsScAwACw2cAAa9HAALEpmMbAALEqwABr0sAAsSqD1sAAsSqAlsAAsSmYx8AAsS6DxsAAsSmYxMAAsTBIwACxKZjKwACxMgDAALDZwABr1cAAsTSYxsAAsTXAAJKbwACxNsAAa9PAALE2wABr1MAAsTSYxMAAsTmV0sAAsTmDzcAAsTnAAEQpwACxNJjKwACxPQDAALDZwABr2cAAsT+YxsAAsUDAAJKbwACxQcAAa9rAALE/mMTAALFDldLAALFDg83AALFDwABEKcAAsT+YysAAsUcAwACw2cAAa93AALFJmMbAALFKwACSm8AAsUvAAGuQwACxS8AAa97AALFJmMTAALFOldLAALFOg83AALFOwABEKcAAsUmYysAAsVIAwACxUps6wACw2cAAa9/AALFVmMTAALFWldLAALFWg83AALFWwABEKcAAsVWYysAAsVoAAMAAkpzAALFcwABr4sAAsV2YysAAsV4AwACxXpZaAMAAkp3AALFhwABr48AAsWKYysAAsWMAwACxY5ZaAMAAkp7AALFmmMTAALFnwABr5MAAsWfAAGvowACxZ8AAa+nAALFnwABr6sAAsWfAAGvvwACxZ8AAa/LAALFnwABr9gDAAJKfwACxb8AAa/vAALFwmMbAALFxwACSn8AAsXLAAGuWwACxcJjHwACxdFzAALFwmMrAALF2AMAAsW/AAGv+wACxeJjGwACxecAAkp/AALF6wABrmMAAsXqI4MAAsXiYxMAAsX1dwACxeJjHwACxf17AALF4mMrAALGBAADAAJKgwACxg8AAa//AALGEmMbAALGFwACSoMAAsYaWdMAAsYSYycAAsYgAwACxhJjHwACximHAALGKgVXAALGKg7fAALGKgx7AALGEmMTAALGPgxzAALGPVsAAsY+ApcAAsY+fX8AAsY+EXsAAsY+XKcAAsY+CRsAAsY+ArcAAsY+VScAAsYPAAGwAwACxmZjGwACxmsAAkqDAALGbwABsAcAAsZu1VcAAsZudL8AAsZqGmcAAsZmYxMAAsaBWwACxoIClwACxoIJGwACxoIMcwACxoIRewACxoJcpwACxoJ9fwACxoICtwACxoJVJwACxoCPAALGgwACSoMAAsau0K8AAsavAAGwCwACxq8AAbATAALGrwABsBcAAsavAAGwGwACxq8AAQ03AALGZmMfAALGygx7AALGygVXAALGyg7fAALGyYcAAsZmYysAAsbcAAMAAkqHAALG5wABsEcAAsbqYx8AAsbtcwACxu4FVwACxu4O3wACxu4MewACxu4HqwACxu4DDwACxu5i1wACxupjEwACxw5ZlwACxw5ZpwACxw4P9wACxw4McwACxw5ZiwACxw4HWwACxw5ZmwACxw5ZrwACxw5ZuwACxw1jAALHDgaXAALHDlnLAALHDgKvAALHDhJXAALHDlmzAALHDg1/AALHDllvAALHDlm/AALHDlnDAALHDlnHAALHDgK3AALHDlUnAALHDVsAAscOApcAAscOEXsAAscOe+MAAsd2f+8AAsd2f/MAAsd2f/8AAscOXKsAAscOXLcAAscOCRsAAscOWZMAAscOGJsAAscOArsAAscOgAMAAscOcm8AAscNkwACxw4FYwACxw6AGwACxw6AHwACxw5vjwACxw4NkwACxw6AMwACxw4C7wACxw6ARwACxw5aMwACxw6ASwACxw58OwACxw6ATwACxw6AUwACxw6AWwACxwyPAALG6mMjAALH5gx7AALH5gerAALG6mMrAALH8AMAAsbnAAGwSwACx/pjGwACx/8AAkqHAALIAwABsAcAAsgDAAGwTwACyAMAAbBTAALIAwABsFcAAsf6YxMAAsgXAAJKhwACyBsAAbBfAALIGwABsI8AAsgbAAGwkwACyBrQrwACyBsAAQ03AALIGwABsJ8AAsgbAAGwawACyBVbAALIFgKXAALIFlmTAALIFlm3AALIFI8AAsgWEJ8AAsgXAAGwdwACyBZ9fwACyBYYmwACyBUvAALIFgL/AALH+mMnAALIZllrAALH+mMfAALIbYcAAsf6YyMAAsh1hwACx/pjKwACyHwDAALIfwACSocAAsiGAtcAAsbnAAGwqwACyI5jGwACyJMAAkqHAALIlrzDAALIjmMfAALInwACSocAAsijAAGwUwACyKMAAbBXAALIjmMjAALIrwACSocAAsizAAGwUwACyLMAAbBXAALIjmMrAALIvAADAAJKiwACyMcAAbCvAALIymMTAALIzwACSo8AAsjTAAGubwACyM1bAALIzgKXAALIzhF7AALIzlynAALIzlyzAALIzlyrAALIzly3AALIzgkbAALIymMrAALI+AMAAsjHAAGwtwACyQJjGwACyQcAAkqLAALJCwABDw8AAskLAAGwuwACyQJjHwACyRWHAALJFXMAAskXAAJKiwACySMAAbC/AALJIwABsMMAAskCYxMAAskuDHMAAskuXKMAAskuVScAAskCYysAAsk8AwACyT5ZaAMAAkqTAALJSwABsMcAAslOYxsAAslTAAJKkwACyVcAAbDLAALJVwABDw8AAslOYx8AAsliXUMAAslOYxMAAslpWwACyWoRewACyU5jKwACyXQAAwACSo8AAsl/AAGw0wACyYJjEwACyYcAAkqPAALJiwABrm8AAsmFWwACyYYClwACyYZ8OwACyYaAUwACyYYRewACyYaATwACyYYYmwACyYZcqwACyYZctwACyYaAHwACyYaAMwACyYYJGwACyYJjIwACycGHAALJgmMrAALJyAMAAsl/AAGw2wACydJjKwACydQDAALJfwABsOMAAsneYxMAAsnjAAJKjwACyecAAa5vAALJ4VsAAsniApcAAsnifDsAAsnigFMAAsniEXsAAsnigE8AAsniGJsAAsniXKsAAsniXLcAAsnigB8AAsnigDMAAsniCRsAAsneYyMAAsodhwACyd5jKwACyiQDAALJfwABsOcAAsouYxMAAsozAAJKjwACyjcAAa5vAALKMVsAAsoyApcAAsoyEXsAAsoyXKcAAsoyXLMAAsoyXKsAAsoyXLcAAsoyCRsAAsouYysAAspcAwACyX8AAbDrAALKZmMbAALKawACSo8AAspuWdMAAspmYycAAsp2FrsAAspmYysAAsp8AwACyX8AAbDzAALKhmMTAALKiwACSo8AAsqPAAGubwACyolbAALKigKXAALKihF7AALKilynAALKilyzAALKilyrAALKily3AALKigkbAALKhmMrAALKtAMAAsl/AAGw9wACyr5jEwACysMAAkqPAALKxwABrm8AAsrCAv8AAsrCZSsAAsrCApcAAsrCEXsAAsrCCRsAAsq+YyMAAsriDHsAAsriB6sAAsq+YysAAsrsAAMAAkqXAALK9mMXAALK+wABsP8AAsr3AAGxAwACywJjHwACywcAAkqXAALLCwABrkMAAssGDHsAAssGBVcAAssGDt8AAssFcwACywYHqwACywWHAALLBgMPAALLAmMTAALLLgdbAALLLlmTAALLLgxzAALLLlmXAALLLlmLAALLLhJXAALLLlmbAALLLg1/AALLLlmnAALLLg/3AALLLWMAAssuWa8AAssuAq8AAssuWbMAAssuWbcAAssuWbsAAssuWW8AAssuWb8AAssuWcMAAssuWccAAssuArcAAssuVScAAssuBpcAAssuWcsAAsssjwACywJjKwACy5QDAALK9wABsQcAAsueYxsAAsujAAJKlwACy6cAAa5DAALLnmMTAALLrsxbAALLnmMrAALLtAMAAsr3AAGxDwACy75jEwACy8LMWwACy8EvAALLwgL/AALLwZMAAsvBWwACy8IClwACy8JybwACy8JZkwACy8IJGwACy8JvjwACy8KAGwACy8IC7wACy8KARwACy8J8OwACy8KAUwACy8JaMwACy8KASwACy8IRewACy8KATwACy8IYmwACy8KAHwACy8JcqwACy8KAMwACy8JctwACy8JZtwACy8KAWwACy8INkwACy8KAAwACy8ICuwACy8IFYwACy75jHwACzD8AAkqXAALMQwABsRcAAsw+YtcAAsu+YyMAAsxODHsAAsxOB6sAAsxNhwACy75jKwACzFwDAALK9wABsRsAAsxmYxMAAsxqzFsAAsxpWwACzGoClwACzGpZkwACzGoJGwACzGoQHwACzGpcwwACzGpcvwACzGpcowACzGoRewACzGpcpwACzGpcqwACzGpcswACzGpZtwACzGpctwACzGpcuwACzGpVJwACzGZjHwACzLMAAkqXAALMtwABsSMAAsxmYysAAsy8AwACyvcAAbEnAALMxmMTAALMysxbAALMyVsAAszKApcAAszLAAGwdwACzMoQnwACzMpZkwACzMoJGwACzMoRewACzMpcqwACzMpctwACzMpZtwACzMp9fwACzMoYmwACzMZjHwACzQMAAkqXAALNBwABsS8AAszGYysAAs0MAwACyvcAAbEzAALNFmMbAALNGwACSpcAAs0fAAGuQwACzRZjEwACzSbMWwACzSUvAALNJgL/AALNJgKXAALNJwABDrMAAs0mCRsAAs0mWZMAAs0mHWMAAs0nAAEOqwACzSYP9wACzSYCrwACzSZlKwACzSYRewACzSZcqwACzSZZtwACzSSPAALNJrJfAALNJwABDr8AAs0WYx8AAs1yD1cAAs1yBVcAAs1yDt8AAs1yDaMAAs1xhwACzXCnAALNFmMrAALNjAMAAsr3AAGxOwACzZZjEwACzZpZkwACzZsAAkqPAALNowABrm8AAs2ZWwACzZoClwACzZoRewACzZpcpwACzZpcswACzZpcqwACzZpctwACzZoJGwACzZZjKwACzcgDAALK9wABsT8AAs3SYxsAAs3XAAJKlwACzdsAAbFDAALN0mMfAALN4wACSpcAAs3nAAGuQwACzeIFVwACzeIO3wACzeGHAALN0mMTAALN+lmTAALN+gxzAALN+I8AAs36EB8AAs36XMMAAs36XL8AAs36XKMAAs36WbcAAs36XLsAAs3SYysAAs4gAwACyvcAAbFLAALOKmMbAALOLwACSpcAAs4zAAGxQwACzjMAAbFPAALOKmMfAALOPwACSpcAAs5DAAGuQwACzj4FVwACzj4O3wACzj2HAALOKmMTAALOVlmTAALOVgxzAALOVI8AAs5VWwACzlYClwACzlYJGwACzlYQHwACzlZcwwACzlZcvwACzlZcowACzlYRewACzlZcpwACzlZcqwACzlZcswACzlZctwACzlZZtwACzlZcuwACzipjKwACzpwAAwACSpsAAs6moIMAAs6qYx8AAs6uHQ8AAs6uBVcAAs6vAAGxZwACzqpjEwACzr8AAbFrAALOvwABsW8AAs6/AAGxcwACzr8AAbF7AALOvwABsX8AAs6/AAF29wACzr8AAbGDAALOvwABsYsAAs6qYysAAs7gAwACzqcAAbGXAALO6mMbAALO7wACSpsAAs7zAAGxmwACzvMAAbGfAALO8suXAALO6mMfAALPAh0PAALPAgVXAALPAwABsWcAAs7qYxMAAs8TAAGxawACzxMAAbFvAALPEwABjC8AAs8TAAFmkwACzxMAAbGjAALPEwABsacAAs8TAAGxqwACzupjKwACzzADAALOpwABsa8AAs86YxsAAs88nwACzz8AAbGzAALPPwABr+cAAs8+CWcAAs86YysAAs9QAwACzqcAAbG3AALPWmMbAALPXwACSpsAAs9jAAF//wACz2JdIwACz2LTVwACz2MAAUCvAALPYwABsbsAAs9aYxMAAs97AAJKmwACz38AAbGHAALPfwABsccAAs9/AAGxywACz38AAbG/AALPewABsXMAAs9aYysAAs+UAwACzqcAAbHbAALPnmMbAALPowACSpsAAs+nAAF//wACz6MAAbGTAALPowABsd8AAs+eYxMAAs+2Cn8AAs+3AAJKmwACz78AAbHvAALPnmMrAALPxAADAAJKnwACz85jGwACz9MAAbKvAALP0wABsrMAAs/TAAGytwACz88AAbH/AALP4mMbAALP5wABQI8AAs/mrscAAs/nAAGyAwACz+cAAT/jAALP5pITAALP5wABsgcAAs/nAAGyCwACz+cAAbIPAALP5wABjz8AAs/nAAGTNwACz+cAAUB3AALP4mMTAALQFwABk1sAAtAXAAJKnwAC0B8AAbITAALQFwABKnsAAtAXAAGTOwAC0BcAAZAHAALQFwABkBMAAtAXAAGPKwAC0BcAAY/nAALQFwABj18AAtAXAAGPewAC0BcAAY+/AALQFwABj8sAAtAXAAGPUwAC0BcAAY9vAALQFwABj6MAAtAXAAGO+wAC0BcAAY8HAALQFwABjw8AAtAXAAGP9wAC0BcAAY7vAALQFwABjpMAAtAXAAGyIwAC0BcAAbInAALQFwABsisAAtAXAAGyXwAC0BcAAbJjAALQFwABsmcAAtAXAAGyawAC0BcAAbJvAALQFwABjt8AAtAXAAGyiwAC0BcAAbKPAALQFtRHAALQFwABjhcAAtAXAAGOXwACz+JjKwAC0KgAAwACSqMAAtCyYxMAAtC3AAGyvwAC0LcAAbLMAwACSqcAAtDDAAGi0wAC0MZjGwAC0MoJqwAC0MsAAkqnAALQ0wABSz8AAtDTAAFkowAC0NMAAWSrAALQ0wABZKcAAtDTAAGy1wAC0NMAAbLbAALQ0wABIUsAAtDTAAGy3wAC0NMAAWTHAALQ0r4XAALQxmMfAALQ/gVXAALQ/wABTg8AAtD+H0sAAtD/AAFOGwAC0P8AAU4jAALQ/wABTisAAtD/AAFLQwAC0P8AAU4vAALQ/uC3AALQ/wABTjsAAtD+ve8AAtDGYxMAAtEvAAFjLwAC0S8AAWMrAALRLwABYycAAtEvAAFOJwAC0S8AAaLzAALRLwABoucAAtEvAAGi7wAC0S8AAaLrAALRLwABsuMAAtEuvt8AAtEsjwAC0MZjKwAC0VwAAwACSqsAAtFnAAGzDwAC0WpjGwAC0W8AAkqrAALRcwABSz8AAtFzAAGzEwAC0WpjEwAC0X1bAALRfwABsxcAAtF/AAGzGwAC0X4dYwAC0X4C/wAC0X0vAALRfhF7AALRfg/3AALRfvbzAALRfI8AAtF/AAGzIwAC0WpjHwAC0a4FVwAC0a4O3wAC0WpjKwAC0bgDAALRZwABszsAAtHCYxMAAtHHAAGzPwAC0cb28wAC0cYFVwAC0cJjKwAC0dQAAwACSq8AAtHfAAGlmwAC0eJjGwAC0ecAAkqvAALR6wABs6sAAtHrAAGzrwAC0eJjJwAC0fQDAALR4mMTAALR/g47AALR/px7AALR/wABI3MAAtHiYysAAtIPAAJKrwAC0hIC1wAC0d8AAbOzAALSGmMbAALSHwACSq8AAtIiXOMAAtIaYx8AAtIqAlsAAtIaYxMAAtIxWwAC0jIKMwAC0hpjKwAC0jwAAwACSrMAAtJHAAGlnwAC0kpjGwAC0k4HlwAC0k4MBwAC0k8AAbO7AALSTwABs78AAtJOD1cAAtJPAAGzwwAC0k8AAbPHAALSTvbLAALSSmMTAALScwABs8sAAtJzAAGzzwAC0nKLbwAC0nMAAkqzAALSgwABs+cAAtJzAAGz+wAC0nMAAbQzAALScwABtEMAAtJzAAG0jwAC0nMAAbSbAALSSmMrAALSnAMAAtJHAAG0swAC0qZjGwAC0qsAAkqzAALSrlzjAALSqwABtLcAAtKrAAG0uwAC0qsAAbS/AALSqwABtMMAAtKrAAG0xwAC0qZjEwAC0sp0EwAC0spV6wAC0ssAAbTPAALSpmMrAALS2AMAAtJHAAG01wAC0uJjGwAC0ubefwAC0ub2pwAC0uJjKwAC0vADAALSRwABtNsAAtL6YxsAAtL/AAJKswAC0wKqBwAC0vpjEwAC0wsAAkqzAALTDwABtN8AAtMJWwAC0wsAAbB3AALTCwABtOcAAtMLAAG06wAC0wsAAbTzAALTCg/3AALTCwABs/MAAtL6YysAAtMwAwAC0kcAAbT3AALTOmMbAALTPgKvAALTOmMTAALTRwABMrcAAtNFLwAC0zpjHwAC01IhqwAC0zpjKwAC01gAAwACSrQDAAJKuwAC02cAAaWjAALTamMbAALTbwACSrsAAtNyWdMAAtNqYycAAtN4AwAC02pjEwAC04JtTwAC02cAAbUDAALTimMbAALTjwACSrsAAtOTAAFf1wAC05MAAbUHAALTimMTAALTnm1PAALTnwABtQsAAtOfAAG1DwAC058AAbUTAALTnwABtRcAAtOebVMAAtOfAAG1GwAC058AAbUfAALTntKPAALTnvPvAALTnwABGQMAAtOe88sAAtOe89cAAtOe878AAtOe8+MAAtOeHRMAAtOe9A8AAtOe9BsAAtOe9DMAAtOefKMAAtOe5BcAAtOfAAEY8wAC058AARj3AALTnwABGPsAAtOfAAEY/wAC054XAwAC04pjKwAC1AgDAALTZwABtTsAAtQSYxMAAtQWCa8AAtQWGhsAAtQW0g8AAtQWGksAAtQWGjMAAtQWGnMAAtQWGhMAAtQSYysAAtQ0AwAC02cAAbU/AALUPmMbAALUQwACSrsAAtRHAAGlswAC1EcAAbVDAALUPmMTAALUUm1PAALUUhobAALUUtIPAALUUhpLAALUUhozAALUUhpzAALUUhoTAALUUwACSrsAAtRzAAG1SwAC1D5jKwAC1HgAAwACSr8AAtSCYxsAAtSHAAG1WwAC1IJjEwAC1I8AAbVcAwACSsMAAtSWYxMAAtSbAAG1bwAC1JYPYwAC1KJjGwAC1KYMewAC1KYHqwAC1KJjKwAC1LAAAwACSscAAtS7AAG1cwAC1L5jEwAC1MMAAkrHAALUxwABrm8AAtTCWZMAAtTCDHMAAtTCEB8AAtTCWacAAtTCXKMAAtTCWbcAAtTCWbsAAtTCWcsAAtTCVScAAtTCXLsAAtTCXL8AAtTCXMMAAtTBWwAC1MIClwAC1MIJGwAC1MIRewAC1MJcpwAC1MJcqwAC1MJctwAC1MJcswAC1L5jHwAC1R1zAALVHYcAAtUfAAJKlwAC1SsAAa5DAALVKwABsSMAAtS+YysAAtU0AAMAAkrLAALVPmMXAALVQwABtXcAAtU+YxsAAtVLAAG2AwAC1UsAAbYLAALVSwABtg8AAtVLAAG2EwAC1UsAAbYXAALVPmMTAALVYwABthsAAtVjAAG2HwAC1WMAAbYjAALVYwABticAAtVjAAG2KwAC1WMAAbYvAALVYwABtjMAAtVjAAG2NwAC1WMAAbY7AALVYwABtlsAAtVjAAG2owAC1WMAAbanAALVYwABtysAAtU/AAG1iwAC1ZpjGwAC1Z8AAkrLAALVowABtZMAAtWfAAG1lwAC1ZpjEwAC1a4C/wAC1a4P9wAC1a0vAALVrI8AAtWaYysAAtXAAwAC1T8AAbWrAALVymMbAALVzgL3AALVzwABta8AAtXOBrsAAtXPAAG1swAC1c4KXwAC1c8AAbW3AALVymMrAALV6AMAAtU/AAG1uwAC1fJjGwAC1fcAAV5DAALV9wABtb8AAtX3AAG1lwAC1fJjEwAC1gcAAbXDAALWBwABtcsAAtYHAAG12wAC1gaWUwAC1fJjKwAC1hgDAALVPwABtd8AAtYiYxMAAtYnAAGzPwAC1iYFVwAC1ib28wAC1iJjKwAC1jQDAALVPwABteMAAtY+YxMAAtZDAAGzPwAC1kIFVwAC1kL28wAC1j5jKwAC1lADAALVPwABtecAAtZaYxsAAtZeCl8AAtZfAAG1twAC1l8AAkrLAALWawABtesAAtZrAAG17wAC1lpjHwAC1ncAAV5DAALWdwABtb8AAtZaYxMAAtaDAAG18wAC1oMAAbX3AALWgwABtdsAAtZaYysAAtaQAAMAAkrMAwACStMAAtaeYxsAAtajAAJK0wAC1qcAAbezAALWpwABt7cAAtajAAG3uwAC1qMAAbe/AALWowABt8MAAtajAAG3ywAC1p5jEwAC1sMAAbfTAALWnwABt3MAAtbKYxsAAtbPAAEOBwAC1s8AAQ4LAALWzg2LAALWzgbLAALWymMTAALW4I8AAtbKYysAAtboAwAC1p8AAbeHAALW8mMbAALW9mOLAALW9hGjAALW9wACStMAAtcDAAG3iwAC1vJjJwAC1wsAAbMjAALW8mMTAALXEwACStMAAtcXAAG3qwAC1xIRpwAC1xMAAbevAALW8mMrAALXJAMAAtcmVfwDAAJK1wAC1zMAAbfnAALXNmMbAALXOJ8AAtc7AAJK1wAC10CjAALXOKcAAtc6CasAAtc6Z+sAAtc6ESMAAtc6D88AAtc677cAAtc6sl8AAtc5cwAC1zl7AALXOXcAAtc7AAG4GwAC1zsAAbgfAALXOgcfAALXNmMTAALXfI8AAtc2YysAAteEAwAC1zMAATV/AALXjmMfAALXkgmvAALXktTrAALXkmhXAALXjmMrAALXoAMAAtczAAG4IwAC16pjGwAC167QSwAC164CWwAC168AAbgnAALXrwABuC8AAtevAAG4MwAC168AASJzAALXrwABuD8AAtevAAG4RwAC168AAbhPAALXrwABuFcAAtevAAG4XwAC168AAbhnAALXrwABuG8AAtevAAG4dwAC16pjHwAC1+oPGwAC16pjEwAC1/EjAALX8I8AAtfzAAG4fwAC1/IchwAC16pjKwAC2AQDAALXMwABuJ8AAtgOYxsAAtgSGisAAtgSnccAAtgS1OsAAtgOYycAAtggAwAC2A5jHwAC2CoPGwAC2CoJrwAC2CoC9wAC2CpoVwAC2A5jEwAC2D0jAALYPI8AAtgOYysAAthKVf8AAtczAAG4qwAC2FJjGwAC2FYaKwAC2FbU6wAC2FJjHwAC2GIPGwAC2GIJrwAC2GIC9wAC2GJoVwAC2FJjEwAC2HUjAALYdI8AAthSYysAAtiAAwAC1zMAAbizAALYimMbAALYjgKzAALYimMfAALYltTrAALYlg8bAALYlgmvAALYlgL3AALYlmhXAALYimMTAALYrSMAAtisjwAC2IpjKwAC2LgDAALXMwABuL8AAtjCYxsAAtjGAlsAAtjGCa8AAtjCYx8AAtjS1OsAAtjSDxsAAtjSaFcAAtjCYxMAAtjhIwAC2OCPAALYwmMrAALY7AMAAtczAAG4xwAC2PZjGwAC2PrQSwAC2PoCWwAC2PoCswAC2PsAAkrXAALZCwABuMsAAtj6DxcAAtj2Yx8AAtkWDYsAAtkXAAG26wAC2PZjEwAC2SCPAALY9mMrAALZKAMAAtczAAG43wAC2TJjHwAC2TcAAbXHAALZMmMTAALZPwABuOMAAtk+BxcAAtk+BxMAAtkyYysAAtlMAAMAAkrbAALZVwABuPcAAtlaYxsAAtleEOcAAtlaYxMAAtllIwAC2WSPAALZWmMfAALZcg8bAALZWmMrAALZeAADAAJK3wAC2YMAAbj7AALZhmMfAALZiwABuP8AAtmGYxMAAtmSI48AAtmS068AAtmGYysAAtmcAAMAAkrjAALZpwABuQsAAtmqYxsAAtmvAAJK4wAC2bMAAZlfAALZslzfAALZqmMTAALZviOPAALZvtOvAALZqmMrAALZyAMAAtmnAAG5DwAC2dJjGwAC2dcAAkrjAALZ2wABuRMAAtnbAAG5FwAC2dsAAbkbAALZ2wABuR8AAtnSYxMAAtntWwAC2e8AAbknAALZ7gozAALZ0mMrAALZ/AADAAJK5wAC2gZjGwAC2gsAAborAALaCwACSucAAtoTAAG6LwAC2hMAAbozAALaBwABuS8AAtoeYxsAAtojAAG4/wAC2h5jEwAC2irTrwAC2h5jKwAC2jMAAkrnAALaNgLXAALaBwABuTMAAto+YxsAAtpCVn8AAto+YxMAAtpLAAG5RwAC2j5jKwAC2lAAAwACSusAAtpaYxsAAtpfAAG6WwAC2lsAAbo3AALaZmMbAALaawABuP8AAtpmYxMAAtpy068AAtpmYysAAtp7AAJK6wAC2n4C1wAC2lsAAbo7AALahmMbAALailZ/AALaiwACSusAAtqTAAG6PwAC2oZjEwAC2psAAblHAALahmMrAALaoAADAAJK7wAC2qpjGwAC2q8AAbtjAALarwACSu8AAtq3AAG6LwAC2qsAAbpfAALavmMbAALawwABuP8AAtq+YxMAAtrLAAFU3wAC2srTrwAC2r5jKwAC2tcAAkrvAALa2gLXAALaqwABumMAAtriYxsAAtrmVn8AAtrnAAJK7wAC2u8AAbo/AALa4mMTAALa9wACSu8AAtr7AAG6fwAC2vsAAbqDAALa+wABuocAAtr7AAG6iwAC2vsAAbqPAALa+wABupMAAtr7AAG6lwAC2vcAAblHAALa4mMrAALbHAADAAJK8AMAAkr3AALbKwABu2cAAtsuYxsAAtszAAJK9wAC2zZc4wAC2y5jHwAC2z4CWwAC2y5jEwAC20VbAALbRgozAALbLmMrAALbUAADAAJK+wAC21sAAbtrAALbXmMbAALbYwACSvsAAttmXaMAAttnAAG7bwAC22cAAbtzAALbZwABu3cAAttnAAG7fwAC22cAAbuDAALbZwABuR8AAtteYx8AAtuGVn8AAtteYxMAAtuPAAG5RwAC241bAALbjgozAALbjwACSvsAAtufAAG7lwAC258AAbuPAALbnwABu5MAAtufAAG7wwAC215jKwAC27AAAwACSv8AAtu6YxsAAtu/AAG71wAC278AAbvbAALbvwABu98AAtu6YxMAAtvPAAG74wAC288AAbvkAwACSwMAAtvbAAG77wAC295jGwAC2+MAAksDAALb5wABu/MAAtvnAAG5HwAC295jHwAC2/JvpwAC2/LmTwAC295jEwAC2/4JGwAC2/1bAALb/gozAALb3mMrAALcDAADAAJLBwAC3BcAAbv7AALcGmMbAALcHwACSwcAAtwiYU8AAtwjAAG5HwAC3BpjHwAC3C4Q5wAC3C7mTwAC3BpjEwAC3DoJGwAC3DlbAALcOwABuScAAtw6CjMAAtwaYysAAtxMAAMAAksLAALcVmMbAALcWwABvA8AAtxXAAG8CwAC3GJjHwAC3GYjiwAC3GYH4wAC3GJjKwAC3HMAAksLAALcdgLUAwACSw8AAtx+YxsAAtyCWzMAAtx/AAG8HwAC3IpjHwAC3I4jiwAC3I4H4wAC3IpjKwAC3JsAAksPAALcngLUAwACSxMAAtynAAG8IwAC3KpjGwAC3K8AAksTAALcsmFPAALcswABuR8AAtyqYx8AAty+D8cAAty+5k8AAtyqYxMAAtzKCRsAAtzJWwAC3MsAAbknAALcygozAALcqmMrAALc3AADAAJLFAMAAksbAALc6mMbAALc7wABvAMAAtzqYxMAAtz3AAJLGwAC3PsAAbwzAALc+wABvEMAAtzrAAG8KwAC3QZjEwAC3QojjwAC3QrTrwAC3QZjKwAC3RcAAksbAALdGgLXAALc6wABvC8AAt0iYxsAAt0nAAJLGwAC3SpdowAC3SJjEwAC3TFbAALdMwABuScAAt0yCjMAAt0iYysAAt1AAAMAAksfAALdSmMbAALdTwABvAcAAt1KYxMAAt1XAAJLHwAC3VsAAbx3AALdSwABvEsAAt1iYxMAAt1mI48AAt1m068AAt1iYysAAt1zAAJLHwAC3XYC1wAC3UsAAbxXAALdfmMbAALdgwACSx8AAt2GXaMAAt2HAAG8WwAC3X5jEwAC3ZMAAbknAALdkwABvGsAAt2SCjMAAt2TAAJLHwAC3aMAAbxfAALdfmMrAALdqAMAAt1LAAG8cwAC3bJjGwAC3bcAAksfAALdul2jAALduwABvFsAAt2yYxMAAt3FWwAC3ccAAbknAALdxgozAALdxwACSx8AAt3XAAG8XwAC3bJjKwAC3dwAAwACSyMAAt3mYxsAAt3rAAG8FwAC3eZjEwAC3fMAAksjAALd9wABvDMAAt33AAG8QwAC3ecAAbyXAALeAmMTAALeBiOPAALeBtOvAALeAmMrAALeEwACSyMAAt4WAtcAAt3nAAG8mwAC3h5jGwAC3iMAAksjAALeJl2jAALeHmMTAALeLVsAAt4vAAG5JwAC3i4KMwAC3h5jKwAC3jwAAwACSycAAt5GYxsAAt5LAAG8GwAC3ksAAksnAALeUwABvLMAAt5GYxMAAt5bAAJLJwAC3l8AAbx3AALeXwABvL8AAt5HAAG8owAC3mpjEwAC3m4jjwAC3m7TrwAC3mpjKwAC3nsAAksnAALefgLXAALeRwABvKsAAt6GYxsAAt6LAAJLJwAC3o5dowAC3o8AAbxbAALehmMTAALemwABuScAAt6bAAG8awAC3poKMwAC3psAAksnAALeqwABvF8AAt6GYysAAt6wAwAC3kcAAbyvAALeumMbAALevwACSycAAt7CXaMAAt7DAAG8WwAC3rpjEwAC3s1bAALezwABuScAAt7OCjMAAt7PAAJLJwAC3t8AAbxfAALeumMrAALe5AADAAJLKwAC3u8AAbzPAALe8mMbAALe9wABvNMAAt73AAJLKwAC3v5hTwAC3v50vwAC3vJjHwAC3wsAAksrAALfDwABvNcAAt8PAAG82wAC3wmHAALfCwABvQsAAt8LAAG7nwAC3wqn3wAC3woKPwAC3vJjEwAC3y0vAALfLgL/AALfLwACSysAAt860K8AAt87AAGt7wAC3zsAAbzrAALfOwABvO8AAt87AAG8/wAC3zsAAbznAALfOwABDTcAAt87AAG9BwAC3zsAAbzjAALfLVsAAt8uApcAAt8ugFMAAt8ufDsAAt8uDZMAAt7yYyMAAt91hwAC3vJjKwAC33wDAALe7wABvQ8AAt+GYx8AAt+LAAJLKwAC348AAbzbAALfhmMrAALflAMAAt7vAAG9EwAC355jHwAC36MAAksrAALfpwABvNsAAt+eYysAAt+sAwAC3u8AAb0XAALftmMTAALfuwACSysAAt+/AAG84wAC37ZjKwAC38QDAALe7wABvR8AAt/OYxMAAt/TAAJLKwAC39cAAbzjAALfzmMrAALf3AMAAt7vAAG9IwAC3+ZjEwAC3+sAAksrAALf7wABvOMAAt/mYysAAt/0AwAC3u8AAb0nAALf/mMTAALgAwACSysAAuAHAAG84wAC3/5jKwAC4AwDAALe7wABvSsAAuAWYxMAAuAbAAJLKwAC4B8AAbzjAALgFmMrAALgJAMAAt7vAAG9LwAC4C5jEwAC4DMAAksrAALgNwABvOMAAuAuYysAAuA8AwAC3u8AAb0zAALgRmMTAALgSwACSysAAuBPAAG84wAC4EZjKwAC4FQDAALe7wABvTcAAuBeYxMAAuBjAAJLKwAC4GcAAbzjAALgXmMrAALgbAMAAt7vAAG9OwAC4HZjEwAC4HsAAksrAALgfwABvOMAAuB2YysAAuCEAwAC3u8AAb0/AALgjmMTAALgkwACSysAAuCXAAG84wAC4I5jKwAC4JwDAALe7wABvUMAAuCmYxMAAuCrAAJLKwAC4K8AAbzjAALgpmMrAALgtAMAAt7vAAG9RwAC4L5jGwAC4MMAAksrAALgxwABrn8AAuC+Yx8AAuDPAAJLKwAC4NMAAbzbAALgvmMTAALg2wACSysAAuDfAAG84wAC4L5jKwAC4OQDAALe7wABvUsAAuDuYx8AAuDzAAJLKwAC4PcAAbzbAALg7mMTAALg/wACSysAAuEDAAG84wAC4O5jKwAC4QgAAwACSy8AAuESYxMAAuEXAAG9UAJwJwAC4R5jFwAC4SMAAb2zAALhIwABvbcAAuEjAAG9vwAC4SMAAb3DAALhIwABvccAAuEjAAG9ywAC4SMAAb3PAALhIwABvdMAAuEjAAG91wAC4SMAAb3bAALhIwABvd8AAuEjAAG94wAC4SMAAb3nAALhIwABvesAAuEjAAG97wAC4SMAAb3zAALhIwABvfcAAuEjAAG9+wAC4SMAAb3/AALhIwABvgMAAuEjAAG+BwAC4SMAAb4LAALhIwABvg8AAuEjAAG+EwAC4SMAAb4bAALhIwABvh8AAuEjAAG+IwAC4SMAAb4nAALhIwABvisAAuEjAAG+LwAC4SMAAb4zAALhIwABvjcAAuEjAAG+OwAC4SMAAb4/AALhIwABvkMAAuEjAAG+RwAC4SMAAb5LAALhIwABvk8AAuEjAAG+UwAC4SMAAb5XAALhHmMbAALhxnAnAALhywABxbcAAuHLAAHFuwAC4csAAcW/AALhywABxcMAAuHLAAHFxwAC4csAAcXLAALhHmMTAALh5nAnAALh6wABxc8AAuHqcV8AAuHqcQMAAuHqcWcAAuHqcUcAAuHqcU8AAuHqcXsAAuHqcVcAAuHrAAHF5wAC4esAAcXvAALh6wABxfcAAuHrAAHF/wAC4esAAcYDAALh6wABxgcAAuHrAAHGDwAC4esAAcYTAALh6wABxhcAAuHrAAHGGwAC4esAAcYnAALh6wABxisAAuHrAAHGLwAC4esAAcY3AALh6wABxjsAAuHrAAHGQwAC4esAAcZHAALh6wABxksAAuHrAAHGTwAC4esAAcZXAALh6wABxlsAAuHrAAHGXwAC4esAAcZjAALh6wABxmcAAuHrAAHGawAC4esAAcZvAALh6wABxnMAAuHrAAHGewAC4esAAcZ/AALh6wABxoMAAuHrAAHGhwAC4esAAcaLAALh6wABxo8AAuHrAAHGkwAC4esAAcaXAALh6wABxp8AAuHrAAHGowAC4esAAcanAALh6wABxqsAAuHrAAHGrwAC4esAAcbLAALh5wABwUcAAuHmIusAAuEecW8AAuK6YxsAAuK+cCcAAuLDAAG+XwAC4r8AAb5jAALiumMTAALizwABvmcAAuLOB3cAAuLNqwAC4rpjHwAC4t4HewAC4t8AAb57AALiumMrAALi6AMAAuEecRcAAuLyYxsAAuL3AAF7cwAC4vcAAUxfAALi9wABvocAAuL3AAG+iwAC4vcAAb6PAALi9wABvpMAAuL3AAG+lwAC4vJjHwAC4xYH2wAC4vJjEwAC4x8AAb6rAALjHwABvq8AAuMdWwAC4x5xJwAC4x5xHwAC4x4KMwAC4x8AAb6bAALjHwABvp8AAuMfAAG+owAC4vJjKwAC40QDAALhHwABvscAAuNOYxsAAuNScCcAAuNXAAFMAwAC405jKwAC41wDAALhHwABvssAAuNmYxsAAuNqcCcAAuNvAAG+zwAC42ZjKwAC43QDAALhHwABvtMAAuN+Yx8AAuODAAG+1wAC435jKwAC44gDAALhHwABvtsAAuOSYxsAAuOWcCcAAuObAAG+3wAC45sAAb7jAALjmwABvucAAuObAAG+6wAC45sAAb7vAALjmwABvvMAAuOSYxMAAuO2cCcAAuO7AAG++wAC47sAAb8DAALjuwABvwsAAuO7AAG/EwAC47sAAb8XAALjkmMfAALj0nAnAALj1wABvwcAAuPXAAG/DwAC45JjKwAC4+ADAALhHwABvxsAAuPqYxsAAuPucCcAAuPzAAG/HwAC4/MAAb7fAALj8wABvuMAAuPzAAG/IwAC4/MAAb8nAALj8wABkMMAAuPzAAG/KwAC4/MAAb8vAALj8wABvzMAAuPzAAG/NwAC4+8AAb6bAALj7wABvqMAAuPqYx8AAuQnAAG/OwAC5CcAAb6fAALkJgfbAALkJhEDAALkJuZPAALkJwABvrMAAuQnAAG+vwAC5CZwJwAC5EcAAb9PAALkRwABvwcAAuRHAAG/UwAC5EcAAb9XAALkRwABv0sAAuQmfzsAAuPqYyMAAuRjAAG/OwAC5GMAAb6fAALj6mMTAALkbnAnAALkcwABv1sAAuRzAAG/XwAC5HMAAb9nAALkcwABv28AAuRzAAG/cwAC5HMAAb97AALkcwABv38AAuRzAAG/gwAC5HLQrwAC5HMAAb+nAALkcwABvF8AAuRzAAG/rwAC5HMAAb93AALkbVsAAuRucR8AAuRuCjMAAuRucScAAuPqYysAAuS4AwAC4R8AAb+3AALkwmMfAALkxnAnAALkywABv1cAAuTCYxMAAuTScCcAAuTXAAG/gwAC5NcAAb+PAALk1wABv5cAAuTXAAG/nwAC5MJjKwAC5OgDAALhHwABv7sAAuTyYxMAAuT2cCcAAuT7AAG/jwAC5PsAAb+XAALk+wABv58AAuTyYysAAuUIAwAC4R8AAb/DAALlEmMbAALlFnAnAALlGwABjEsAAuUSYx8AAuUicCcAAuUnAAG/xwAC5RJjEwAC5S5wJwAC5TMAAb/LAALlMwABv3cAAuUtWwAC5S5xHwAC5S4KMwAC5RJjKwAC5UgDAALhHwABv9MAAuVSYxsAAuVWGbMAAuVWArMAAuVSYxMAAuVilJMAAuVSYysAAuVoAwAC4R8AAb/bAALlcmMbAALldnAnAALlewABqxsAAuVyYxMAAuWAjwAC5XJjKwAC5YgDAALhHnGXAALlkmMrAALllnAnAALlmgLXAALhHA8AAuWiYxsAAuWmcCcAAuWrAAG/5wAC5asAAb/rAALlomMnAALltAMAAuW3AAG/9wAC5bZnfwAC5bYCWwAC5bYHHwAC5bcAAb/7AALlomMTAALl0wABv/8AAuXSB1sAAuXSD/cAAuXScCcAAuXjAAHAGwAC5dMAAcAfAALl0ga/AALl0gfLAALl0gf/AALl0wABwDMAAuXTAAHANwAC4R8AAcBDAALmAmMbAALmBIsAAuYGBtcAAuYCYxMAAuYQjwAC5gJjKwAC5hgDAALhHnGDAALmImMnAALmJAMAAuYmZ38AAuYiYx8AAuYyB3sAAuYzAAG+ewAC5iJjEwAC5j8AAb5nAALmPgd3AALhHwABwEsAAuZKYxsAAuZOB3sAAuZKYxMAAuZXAAG+ZwAC5lYHdwAC5lZwJwAC5mMAAb5zAALmSmMfAALmawABvnsAAuZKYysAAuZwAwAC4R8AAcBTAALmemMTAALmfwABvmcAAuZ+cCcAAuaHAAG+cwAC5npjKwAC5owDAALhHwABwFcAAuaWYxMAAuabAAG+ZwAC5ppwJwAC5qMAAb5zAALmlmMrAALmqAMAAuEfAAHAWwAC5rJjGwAC5rcAAW2HAALmtwABwF8AAua3AAHAYwAC5rcAAcBnAALmtwABwGsAAua3AAHAbwAC5rcAAcBzAALmtwABwHcAAua3AAHAewAC5rcAAcB/AALmtwABwIMAAua3AAHAhwAC5rZwJwAC5usAAcCLAALmtgXbAALmtglLAALmtmfHAALmtwABv5MAAuayYx8AAucCcCcAAucHAAHAkwAC5wcAAcCrAALnBwABwK8AAucHAAHAswAC5wcAAcC3AALnAwABwJcAAucDAAHAmwAC5wMAAcCfAALnAwABwKMAAucDAAHApwAC5wMAAcC7AALmsmMTAALnNwABwL8AAuc3AAHAxwAC5zcAAcALAALnNwABwM8AAuayYysAAudKBr8AAudLAAHAjwAC50oHywAC50oH/wAC4R7L2wAC515jGwAC52JwJwAC52cAAcDTAALnZwABwNcAAudnAAHA2wAC52cAAcDfAALnZwABwOMAAudnAAHA5wAC52cAAZDDAALnZwABwJMAAudnAAHA6wAC515jHwAC545wJwAC55MAAb5/AALnkwABwP8AAueTAAHBAwAC55MAAcEHAALnkwABwQsAAueTAAHBDwAC55MAAcEzAALnkwABwTcAAudeYxMAAue2cCcAAue7AAHBEwAC57sAAcEXAALnuwABwSMAAue7AAHBKwAC57sAAcEvAALnuwABwPcAAue7AAHBOwAC57sAAcE/AALnuwABwUMAAue7AAG/XwAC57sAAcFLAALnuwABwVcAAue7AAHBUwAC57sAAcFbAALnuwABwV8AAue7AAG/8wAC57sAAb5vAALnuwABvnMAAue7AAG+awAC57sAAcFjAALnuwABvncAAue7AAHBZwAC57YGvwAC57YHywAC57YH/wAC57cAAcAzAALntwABwDcAAudeYysAAugoAwAC6CsAAcDvAALoKwABwPMAAugrAAHA+wAC6CoCWwAC4R8AAcGfAALoQmMbAALoRmfHAALoRg7XAALoQmMrAALoUAMAAuEfAAHBowAC6FpjEwAC6F5wJwAC6GMAAcGnAALoWmMrAALoaAMAAuEecCsAAuhyYxsAAuh2cCcAAuh6WdMAAuhyYycAAuiCFrsAAuiCAlsAAuiCBx8AAuiDAAHBtwAC6IMAAcG7AALogwABwb8AAuiDAAHBwwAC6IMAAcHXAALocmMTAALopwABwd8AAuinAAHB4wAC6KYH6wAC6KYGlwAC6KYCrwAC6KcAAcHnAALopwABwesAAuinAAHACwAC6KYSVwAC6KcAAcHzAALopgffAALoplmzAALopg1/AALopWMAAuimDHMAAuimD/cAAuimWYsAAuimB1sAAuimWZMAAuimArcAAuimVScAAuinAAHCBwAC6KZZwwAC6KZZxwAC6KZZbwAC6KZZvwAC6KcAAcITAALoplmbAALoplmvAALoplm7AALoplmXAALopwABwDcAAuhyYx8AAukrAAG+1wAC6SmHAALpKgVXAALpKgx7AALpKgerAALpKgMPAALocmMrAALpRAMAAulGcCcAAulOGa8AAuEfAAHCLwAC6VZjEwAC6VpyGwAC6VsAAb73AALpWgazAALpWg47AALpWgfzAALpWggXAALpWwABwg8AAulWYx8AAul7AAG+swAC6VZjKwAC6YADAALhHpI7AALpimMTAALpjVsAAumOcR8AAumOCjMAAumKYysAAumcAwAC4R8AAcI/AALppmMbAALpqnAnAALprwABwkMAAummYx8AAum3AAG+1wAC6aZjEwAC6b8AAcHjAALpvgfrAALppmMrAALpyAMAAuEfAAHCRwAC6dJjEwAC6dZxJwAC6dYKMwAC6dJjKwAC6eADAALhHwABwksAAunqYxMAAunuCjMAAunqYx8AAun2fzsAAunqYysAAun8AwAC4R8AAcJPAALqBmMbAALqCnAnAALqDlnTAALqBmMnAALqFAMAAuoXAAHCVwAC6hcAAcJbAALqBmMTAALqJwABwd8AAuometMAAuomWZMAAuEfAAHCewAC6jZjEwAC6jpZkwAC6jZjKwAC6kADAALhHsvjAALqSmMnAALqTAMAAupKYxMAAupVdwAC6lZyGwAC6kpjHwAC6mF7AALhHwABwn8AAupqYxsAAupucCcAAupyXaMAAupqYxMAAup5WwAC6npxHwAC6noKMwAC6mpjKwAC6ogDAALhHwABwoMAAuqSYx8AAuqWB9sAAuqXAAG+mwAC6pcAAb87AALqlwABvp8AAuqXAAG+owAC6pYRAwAC6pbmTwAC6pcAAb6zAALqlwABvr8AAuqSYycAAuq8AwAC6r8AAcKHAALqkmMjAALqywABvpsAAurLAAG/OwAC6ssAAb6fAALqywABvqMAAuqSYxMAAurdWwAC6t5xHwAC6t4KMwAC6t5xJwAC4R8AAcKTAALq8mMTAALq9VsAAur2cR8AAur2CjMAAuryYysAAusEAwAC4R8AAcKXAALrDmMTAALrEnAnAALrFwABv28AAusXAAG/ewAC6xcAAb9/AALrFwABv3MAAusOYysAAusoAwAC4R8AAcKbAALrMmMrAALrNAMAAuEfAAHCnwAC6z5jGwAC60JwJwAC60cAAb8fAALrRwABwqMAAutHAAHCpwAC60cAAcKrAALrRwABvyMAAutHAAG/JwAC60cAAcKvAALrRwABkMMAAutHAAG/NwAC60MAAb6bAALrQwABvzsAAutDAAG+nwAC60MAAb6jAALrPmMfAALrfgfbAALrfhEDAALrfnAnAALriwABwrMAAuuLAAHCtwAC64sAAb9TAALriwABv1cAAuuLAAHCvwAC64pyEwAC638AAb6/AALrfuZPAALrfwABvrMAAut+fzsAAus+YxMAAuu2cCcAAuu7AAHCxwAC67sAAcLLAALruwABv1sAAuu7AAHBswAC67rQrwAC67sAAb+nAALruwABvF8AAuu7AAG/bwAC67sAAb9zAALruwABv3sAAuu7AAG/fwAC67ZxJwAC67VbAALrtnEfAALrtgozAALrPmMrAALr+AMAAuEfAAHC5wAC7AJjHwAC7AZwJwAC7AsAAZDDAALsAmMjAALsEnAnAALsFwABkMMAAuwCYxMAAuwecCcAAuwjAAG/jwAC7CMAAb+XAALsIwABv58AAuwCYysAAuwwAwAC4R8AAcLrAALsOmMTAALsPnAnAALsQwABv48AAuxDAAG/lwAC7EMAAb+fAALsOmMrAALsUAMAAuEfAAHC7wAC7FpjKwAC7FwDAALsWmMTAALsZnAnAALsawABv48AAuxrAAG/lwAC7GsAAb+fAALhHwABwvMAAux6YysAAux8AwAC7HpjHwAC7IZwJwAC7IsAAZDDAALsemMjAALsknAnAALslwABkMMAAux6YxMAAuyecCcAAuyjAAG/jwAC7KMAAb+XAALsowABv58AAuEey98AAuyyYxsAAuy2cCcAAuy7AAG/awAC7LJjEwAC7MJwJwAC7McAAcL3AALswSMAAuyyYx8AAuzSDxsAAuyyYysAAuzYAwAC4R8AAcL7AALs4mMbAALs5nAnAALs6wABv2sAAuziYxMAAuzycCcAAuz3AAHC/wAC7PcAAb8TAALs9wABvxcAAuziYysAAu0EAwAC4R8AAcMDAALtDmMbAALtEnAnAALtFiBXAALtDmMTAALtHVsAAu0ecR8AAu0eCjMAAu0ecScAAu0OYx8AAu0yfzsAAu0OYysAAu04AwAC4R8AAcMHAALtQmMbAALtRwABv6MAAu1HAAHDCwAC7UJjEwAC7VMAAcMPAALtUgfzAALtUggXAALtUnIbAALtUwABvmcAAu1CYysAAu1oAwAC4R8AAcMTAALtcmMbAALtdwABwsMAAu1yYysAAu18AwAC4R8AAcMXAALthmMTAALtinAnAALtjtCvAALtjwABv6cAAu2PAAG8XwAC7YZjKwAC7ZwDAALhHwABwxsAAu2mYxMAAu2qcCcAAu2vAAG/jwAC7a8AAb+XAALtrwABv58AAu2mYysAAu28AwAC4R8AAcMfAALtxmMbAALtynAnAALtzwABwyMAAu3PAAG/IwAC7c8AAcMnAALtzwABwqcAAu3PAAHDKwAC7c8AAcMvAALtzwABwzMAAu3PAAHDNwAC7c8AAcM7AALtzwABwK8AAu3PAAHDPwAC7c8AAcCTAALtzwABkMMAAu3PAAHDQwAC7c8AAYxLAALtxmMTAALuDnAnAALuEwABwt8AAu4TAAHDcwAC7hMAAcNrAALuEtCvAALuEwABv6cAAu4TAAG8XwAC7hMAAb8TAALuEwABvxcAAu4TAAHC/wAC7hMAAb+/AALuEwABv48AAu4TAAG/lwAC7hMAAb+fAALuEwABwuMAAu4TAAHDiwAC7g8AAb73AALuDgazAALuDg47AALuDgfzAALuDggXAALuDnIbAALuDwABwg8AAu3GYx8AAu5ucCcAAu5zAAHCuwAC7nMAAbkfAALucwABwrMAAu5zAAHDewAC7nMAAcNnAALucwABv8cAAu5zAAHDWwAC7nMAAcN/AALucwABw28AAu5zAAHDgwAC7m8AAb6zAALtxmMrAALuoAMAAuEfAAHDowAC7qpjGwAC7q5wJwAC7rMAAcDTAALuswABvqcAAu6qYxMAAu6+B+sAAu6+cCcAAu7HAAHC9wAC7scAAcOnAALuqmMrAALu0AMAAuEfAAHDqwAC7tpjGwAC7t5wJwAC7uMAAYxLAALu4wABw68AAu7aYxMAAu7ucCcAAu7zAAHC9wAC7tpjKwAC7vgDAALhHwABw7MAAu8CYxsAAu8GcCcAAu8LAAHDtwAC7wJjHwAC7xIFVwAC7wJjEwAC7xsAAb/PAALvGgkbAALvAmMrAALvJAMAAuEfAAHDwwAC7y5jGwAC7zIO1wAC7y5jEwAC7zsAAcPHAALvLmMrAALvQAMAAuEfAAHDywAC70pjGwAC704CWwAC70pjEwAC71cAAcPHAALvSmMrAALvXAMAAuEfAAHDzwAC72ZjGwAC72oHHwAC72oZUwAC72ZjEwAC73cAAcPHAALvZmMrAALvfAMAAuEfAAHD0wAC74ZjEwAC74sAAcPHAALvhmMfAALvkg7XAALvhmMjAALvmg7XAALvhmMrAALvoAMAAuEfAAHD2wAC76pjGwAC765wJwAC77MAAcPfAALvswABw+MAAu+zAAHCpwAC77MAAZDDAALvqmMfAALvxgVXAALvxwABvo8AAu/GcCcAAu/TAAHD5wAC76pjEwAC79sAAcNHAALv2wABw2MAAu/bAAG/zwAC79oJGwAC76pjKwAC7+wDAALhHwABw+sAAu/2YxsAAu/7AAHD7wAC7/sAAcPzAALv9mMfAALwBgVXAALv9mMTAALwDVsAAvAPAAG/zwAC8A4JGwAC7/ZjKwAC8BwDAALhHwABw/cAAvAmYxsAAvAqcCcAAvAvAAHD+wAC8C8AAcP/AALwLwABxAMAAvAvAAHAkwAC8C8AAZDDAALwLwABwz8AAvAmYx8AAvBKcCcAAvBPAAHECwAC8E8AAcQPAALwSwABvrMAAvAmYxMAAvBecCcAAvBjAAHEBwAC8GMAAb+fAALwXwABvvcAAvBeBrMAAvBeDjsAAvBeB/MAAvBeCBcAAvBechsAAvBfAAHCDwAC8CZjKwAC8IgDAALhHwABxBMAAvCSYxsAAvCWcCcAAvCa6HsAAvCbAAHEFwAC8JsAAcQbAALwmwABwJMAAvCbAAG/awAC8JpyEwAC8JJjHwAC8LcAAb7XAALwtnAnAALwvwABxC8AAvCSYxMAAvDGB+sAAvDGcCcAAvDPAAHC/wAC8M8AAcOnAALwzwABxCMAAvDPAAHEJwAC8M8AAcQrAALwkmMrAALw5AMAAuEfAAHEMwAC8O5jGwAC8PJwJwAC8PcAAcJDAALw7mMTAALw/wABvvcAAvD+BrMAAvD+DjsAAvD+B/MAAvD+CBcAAvD+chsAAvD/AAHCDwAC8O5jHwAC8R8AAb6zAALw7mMrAALxJAMAAuEecg8AAvEuYxsAAvEycCcAAvE2chMAAvE3AAHEOwAC8TcAAcNbAALxLmMfAALxRXsAAvEuYxMAAvFNdwAC8U5wJwAC8VcAAcRDAALxVwABwzsAAvFXAAHArwAC8VcAAcM/AALxTnIbAALxLmMrAALxbAMAAuEfAAHETwAC8XZjHwAC8XsAAb7XAALxdmMTAALxggfrAALxdmMrAALxiAMAAuEfAAHEUwAC8ZJjGwAC8ZZwJwAC8ZroewAC8ZJjHwAC8aMAAb7XAALxkmMTAALxqgfrAALxqnAnAALxswABwvcAAvGzAAHEVwAC8bMAAcRbAALxswABxF8AAvGSYysAAvHEAwAC4R8AAcRjAALxzmMbAALx0nAnAALx1wABwkMAAvHWchMAAvHOYxMAAvHicCcAAvHm0K8AAvHnAAG/pwAC8ecAAb8TAALx5wABvxcAAvHnAAHC/wAC8ecAAcRXAALx5wABxFsAAvHnAAHEXwAC8c5jKwAC8ggDAALhHwABxGcAAvISYxsAAvIWcCcAAvIbAAHEawAC8hJjEwAC8iJwJwAC8icAAcRXAALyEmMrAALyLAMAAuEfAAHEcwAC8jZjGwAC8jpwJwAC8j8AAcR3AALyNmMTAALyRnAnAALySwABxFcAAvI2YysAAvJQAwAC4R8AAcR/AALyWmMbAALyXnAnAALyYwABxIMAAvJaYxMAAvJqcCcAAvJvAAHEVwAC8lpjKwAC8nQDAALhHwABxIcAAvJ+YxsAAvKCcCcAAvKHAAHEdwAC8ocAAcRrAALyfmMTAALyknAnAALylwABxFsAAvJ+YysAAvKcAwAC4R8AAcSLAALypmMbAALyqnAnAALyrp/zAALypmMTAALytnAnAALyuwABwvcAAvK7AAHEVwAC8qZjKwAC8sQDAALhHwABxI8AAvLOYxsAAvLScCcAAvLXAAHEkwAC8s5jHwAC8t5wJwAC8uMAAcSXAALy4p/zAALy4lzjAALyzmMjAALy8nAnAALy9wABxJcAAvL2n/MAAvL2XOMAAvLOYysAAvMEAwAC4R8AAcSbAALzDmMbAALzEnAnAALzFwABxGsAAvMOYxMAAvMecCcAAvMjAAHEVwAC8w5jKwAC8ygDAALhHwABxJ8AAvMyYxsAAvM2cCcAAvM6n/MAAvMyYxMAAvNCcCcAAvNHAAHC9wAC80cAAcRXAALzMmMrAALzUAMAAuEfAAHEowAC81pjGwAC815wJwAC82MAAcRrAALzWmMTAALzanAnAALzbwABwvcAAvNvAAHEVwAC81pjKwAC83gDAALhHwABxKsAAvOCYxsAAvOGcCcAAvOLAAHErwAC84rzmwAC84JjEwAC85ZwJwAC85sAAcL3AALzmwABxFcAAvOCYysAAvOkAwAC4R8AAcS7AALzrmMbAALzsnAnAALztl2jAALzrmMTAALzvVsAAvO+cR8AAvO+CjMAAvOuYysAAvPMAwAC4R8AAcS/AALz1mMbAALz2nAnAALz3wABxMMAAvPechMAAvPWYx8AAvPqcCcAAvPvAAHEzwAC89ZjEwAC8/ZwJwAC8/rQrwAC8/sAAb+nAALz+wABvF8AAvP7AAG/EwAC8/sAAb8XAALz+wABwv8AAvP7AAHEVwAC8/sAAcRbAALz+wABxF8AAvPWYysAAvQgAwAC4R8AAcTXAAL0KmMbAAL0LnAnAAL0MwABxNsAAvQqYxMAAvQ6etMAAvQqYysAAvRAAwAC4R8AAcTfAAL0SmMbAAL0TnAnAAL0UwABxNsAAvRTAAHCQwAC9EpjHwAC9F8AAb7XAAL0SmMTAAL0ZgfrAAL0SmMrAAL0bAMAAuEfAAHE4wAC9HZjGwAC9HpwJwAC9H8AAcRXAAL0fwABxFsAAvR/AAHEXwAC9H5dowAC9HZjHwAC9JJwJwAC9JcAAbkfAAL0dmMTAAL0nVsAAvSecR8AAvSeCjMAAvR2YysAAvSsAwAC4R8AAcTvAAL0tmMTAAL0unrTAAL0tmMrAAL0wAMAAuEfAAHE9wAC9MpjGwAC9M5wJwAC9NLNRwAC9MpjEwAC9Np60wAC9MpjKwAC9OADAALhHwABxPsAAvTqYxsAAvTucCcAAvTzAAHDpwAC9OpjEwAC9Pp60wAC9OpjKwAC9QADAALhHwABxP8AAvUKYxsAAvUOcCcAAvUTAAHDpwAC9RMAAcJDAAL1CmMfAAL1HwABvtcAAvUKYxMAAvUmB+sAAvUKYysAAvUsAwAC4R8AAcUDAAL1NmMnAAL1OAMAAvU7AAHBwwAC9TZjEwAC9UYKfwAC9UZyGwAC9UZwJwAC9VMAAcUXAAL1UwABxR8AAvU2Yx8AAvVfAAHFEwAC9V4jKwAC4R8AAcUjAAL1amMbAAL1bgcfAAL1bhlTAAL1amMTAAL1eI8AAvVqYx8AAvWCb+MAAvWHAAHFJwAC9WpjIwAC9Y5v4wAC9ZMAAcUnAAL1amMrAAL1mAMAAuEfAAHFLwAC9aJjGwAC9aaS4wAC9aYJuwAC9aJjKwAC9bADAALhHpJ7AAL1umMbAAL1vnAnAAL1wlnTAAL1umMnAAL1yAMAAvXKWWsAAvW6Yx8AAvXXAAHBbwAC9dYKfwAC9daS0wAC9daS2wAC9dcAAcEnAAL11wABwR8AAvXXAAHDSwAC9dcAAb+TAAL11wABwUcAAvXXAAHCHwAC9dcAAcULAAL11wABHdsAAvXXAAHFMwAC4R8AAcU3AAL2DmMbAAL2EwABwW8AAvYSCn8AAvYSktMAAvYSktsAAvYTAAHBJwAC9hMAAcEfAAL2EwABw0sAAvYTAAG/kwAC9hMAAcFHAAL2EwABwh8AAvYTAAHFCwAC9hMAAR3bAAL2EwABxTMAAvYOYysAAvZIAwAC4R6SdwAC9lJjEwAC9lcAAcFvAAL2Vgp/AAL2VpLTAAL2VpLbAAL2VwABwScAAvZXAAHBHwAC9lcAAcNLAAL2VwABv5MAAvZXAAHBRwAC9lcAAcIfAAL2VwABxQsAAvZXAAEd2wAC9lcAAcUzAAL2UmMrAAL2jAMAAuEeIucAAvaWYxsAAvaaG6cAAvaacCcAAvaiI4MAAvaWYx8AAvapewAC9qoRXwAC9qsAAcU7AAL2lmMTAAL2uwABwW8AAva7AAHBewAC9rsAAcUzAAL2ugp/AAL2upLTAAL2upLbAAL2uwABw5sAAva7AAHCKwAC9rsAAcOTAAL2uwABwScAAva7AAHBHwAC9rsAAcNLAAL2uwABxUsAAva7AAHFTwAC9rsAAcVTAAL2uwABxQcAAva7AAHAKwAC9rsAAcVXAAL2uwABv5MAAva7AAHBRwAC9rsAAcIfAAL2uwABxQsAAva7AAEd2wAC9rpwJwAC9xsAAcVbAAL3GwABxV8AAva5LwAC9pZjKwAC9ypwJwAC9y4C1wAC4R8AAcVjAAL3NmMbAAL3OnAnAAL3PwABxWcAAvc2YxMAAvdHAAHBbwAC90YKfwAC90aS0wAC90aS2wAC90cAAcEnAAL3RwABwR8AAvdHAAHDSwAC90cAAb+TAAL3RwABwUcAAvdHAAHCHwAC90cAAcULAAL3RwABHdsAAvdHAAHFMwAC9zZjKwAC93wDAALhHwABxZMAAveGYx8AAveKcCcAAveOks8AAveOktcAAveOkt8AAvePAAHFdwAC948AAcV7AAL3jwABxX8AAvePAAHFgwAC948AAcWHAAL3jwABxRcAAvePAAHFHwAC948AAcWLAAL3jwABxY8AAvePAAHFbwAC9468wwAC946qBwAC94oRXwAC94ZjEwAC99MAAcF7AAL3hmMrAAL32AMAAuEfAAHFlwAC9+JjGwAC9+ZwJwAC9+qSzwAC9+qS1wAC9+qS3wAC9+sAAcV3AAL36wABxXsAAvfrAAHFfwAC9+sAAcWDAAL36wABxYcAAvfrAAHFFwAC9+sAAcUfAAL36wABxYsAAvfrAAHFjwAC9+sAAcVvAAL36wABxZsAAvfqqgcAAvfmEV8AAvfiYx8AAvgucCcAAvgyvMMAAvgvAAHFOwAC9+JjEwAC+D8AAcObAAL4PwABwisAAvg/AAHDkwAC+D8AAcVLAAL4PwABxU8AAvg/AAHFUwAC+D8AAcUHAAL4PwABwCsAAvg/AAHFVwAC+D0vAAL4PwABwW8AAvg/AAHFMwAC+D4KfwAC+D6S0wAC+D6S2wAC+D8AAcEnAAL4PwABwR8AAvg/AAHDSwAC+D8AAb+TAAL4PwABwUcAAvg/AAHCHwAC+D8AAcULAAL4PwABHdsAAvfiYysAAvicAwAC4R8AAcWrAAL4pmMbAAL4qnAnAAL4rwABxa8AAvivAAHFswAC+KZjHwAC+LpwJwAC+L6SzwAC+L6S1wAC+L6S3wAC+L8AAcV3AAL4vwABxXsAAvi/AAHFfwAC+L8AAcWDAAL4vwABxYcAAvi/AAHFFwAC+L8AAcUfAAL4vwABxYsAAvi/AAHFjwAC+L8AAcVvAAL4vqoHAAL4vrzDAAL4uhFfAAL4uwABxTsAAvimYxMAAvkHAAHDmwAC+QcAAcIrAAL5BwABw5MAAvkHAAHFSwAC+QcAAcVPAAL5BwABxVMAAvkHAAHFBwAC+QcAAcArAAL5BwABxVcAAvkFLwAC+QcAAcFvAAL5BwABxTMAAvkGCn8AAvkGktMAAvkGktsAAvkHAAHBJwAC+QcAAcEfAAL5BwABw0sAAvkHAAG/kwAC+QcAAcFHAAL5BwABwh8AAvkHAAHFCwAC+QcAAR3bAAL4pmMrAAL5ZAACe+MAAvluYxcAAvlzAAG9/wAC+XMAAccHAAL5cwABvfMAAvluYxsAAvmCe+MAAvmHAAHK8wAC+YcAAa5PAAL5bmMTAAL5knvjAAL5lwAByvcAAvmXAAHK+wAC+ZcAAcr/AAL5lwABrlMAAvmXAAHLAwAC+ZcAAcsbAAL5lwAByx8AAvlvAAHHCwAC+bZjGwAC+bp74wAC+b8AAbAHAAL5vwABxw8AAvm/AAHHEwAC+b8AAccXAAL5tmMfAAL50YcAAvnSBVcAAvnSDt8AAvnSDaMAAvnQpwAC+bZjEwAC+eodYwAC+esAAQ6rAAL56S8AAvnqAv8AAvnqZSsAAvnqApcAAvnqD/cAAvnqEXsAAvnqCRsAAvnqe+MAAvoTAAHHJwAC+hMAAccfAAL6EwABxzcAAvoTAAHHQwAC+bZjKwAC+iQDAAL5bwABx0cAAvouYxsAAvoye+MAAvo285sAAvo2Gj8AAvo3AAHHSwAC+i5jEwAC+kYdYwAC+kUvAAL6RgL/AAL6RmUrAAL6RhF7AAL6RnvjAAL6XwABx0MAAvouYysAAvpkAwAC+W8AAcdTAAL6bmMTAAL6ch1jAAL6cS8AAvpyAv8AAvpyZSsAAvpyEXsAAvpye+MAAvqLAAHHQwAC+m5jKwAC+pADAAL5bwABx1cAAvqaYxsAAvqeD1sAAvqeAlsAAvqeDxsAAvqeDtcAAvqaYysAAvqwAwAC+W8AAcdbAAL6umMbAAL6vnvjAAL6wqoHAAL6umMfAAL6yYcAAvrKBVcAAvrKDt8AAvq6YysAAvrYAwAC+W8AAcdfAAL64mMfAAL65XMAAvriYxMAAvruDHMAAvruD/cAAvruVScAAvriYysAAvr8AwAC+W8AAcdjAAL7BmMfAAL7CXMAAvsGYxMAAvsSDHMAAvsSD/cAAvsGYysAAvscAwAC+W8AAcdnAAL7JmMbAAL7KnvjAAL7LqoHAAL7LwABx2sAAvsuXSMAAvsvAAHHbwAC+yZjEwAC+0F3AAL7JmMrAAL7SAMAAvlvAAHHcwAC+1JjHwAC+1V7AAL7UmMrAAL7XAMAAvlvAAHHdwAC+2ZjHwAC+2l7AAL7ZmMrAAL7cAMAAvlvAAHHewAC+3pjGwAC+3574wAC+4MAAbAHAAL7gwABxxMAAvuDAAHHDwAC+4MAAccXAAL7emMTAAL7lnvjAAL7mvObAAL7mho/AAL7mwABx38AAvubAAHHgwAC+5sAAceHAAL7mwABxx8AAvubAAHHNwAC+5pdNwAC+5sAAceXAAL7lgxzAAL7llyjAAL7lVsAAvuWApcAAvuWEXsAAvuWXKcAAvuWXKsAAvuWXLcAAvuWCRsAAvt6Yx8AAvvlcwAC++WHAAL75gVXAAL75g7fAAL75gx7AAL75gerAAL7emMrAAL8AAMAAvlvAAHHmwAC/ApjEwAC/A574wAC/BIaPwAC/BLzmwAC/BJdNwAC/BMAAceXAAL8CmMrAAL8JAMAAvlvAAHHnwAC/C5jGwAC/DJ74wAC/DcAAcejAAL8NwABI1MAAvw3AAHHSwAC/C5jEwAC/EYRewAC/EYMcwAC/EZcowAC/EYQHwAC/EZcpwAC/EZ74wAC/F7zmwAC/F4aPwAC/F5dNwAC/F8AAceXAAL8LmMrAAL8cAMAAvlvAAHHpwAC/HpjGwAC/H4PWwAC/H4PGwAC/H4O1wAC/HpjEwAC/I4RewAC/HpjKwAC/JQDAAL5bwABx6sAAvyeYxsAAvyie+MAAvynAAGwywAC/KcAAccXAAL8pl0jAAL8pwABvu8AAvymI4MAAvyeYxMAAvy9dwAC/J5jHwAC/MV7AAL8nmMrAAL8zAMAAvlvAAHHrwAC/NZjGwAC/Np74wAC/N5dIwAC/N8AAcezAAL83t1XAAL83wABx7cAAvzfAAHHuwAC/NZjKwAC/PQDAAL5bwABx8MAAvz+Yx8AAv0Ce+MAAv0GXSMAAv0HAAHHswAC/QbdVwAC/QcAAce3AAL9BwABx7sAAvz+YyMAAv0ee+MAAv0iXSMAAv0jAAHHswAC/SLdVwAC/SMAAce3AAL9IwABx7sAAvz+YysAAv04AwAC+W8AAcf/AAL9QmMbAAL9RnvjAAL9SwAByAMAAv1LAAHIBwAC/UsAAcgLAAL9SwAByA8AAv1CYxMAAv1ee+MAAv1jAAHIEwAC/WMAAcgfAAL9YwAByC8AAv1jAAHINwAC/WMAAcg7AAL9YwAByEMAAv1jAAHISwAC/UJjHwAC/YJ74wAC/YcAAchHAAL9gYcAAv1CYysAAv2QAwAC+W8AAchXAAL9mmMTAAL9nnvjAAL9oho/AAL9ovObAAL9mmMrAAL9rAMAAvlvAAHIWwAC/bZjEwAC/bp74wAC/b4aPwAC/b7zmwAC/bZjKwAC/cgDAAL5bwAByF8AAv3SYysAAv3UAwAC/dJjHwAC/d4NowAC/d4PVwAC/d2HAAL93gVXAAL93g7fAAL93KcAAv3SYxMAAv35LwAC/foC/wAC/foRewAC/foJGwAC/fpZkwAC/foP9wAC/foClwAC/fsAAQ6rAAL9+mUrAAL9+rJfAAL9+wABDr8AAv36Aq8AAv37AAEOswAC/fpcqwAC/fodYwAC/fiPAAL5bwAByGsAAv4+YysAAv5AAwAC/j5jEwAC/kp74wAC/k4aPwAC/k7zmwAC/k8AAchLAAL+TwAByG8AAv5PAAHIcwAC/k8AAch7AAL+TwAByIMAAv5PAAHIiwAC/k8AAciXAAL+SgkbAAL+SgL/AAL+SmUrAAL+ShF7AAL+Sh1jAAL+SS8AAv5LAAEOqwAC/koP9wAC/j5jHwAC/pZ74wAC/psAAchHAAL+lYcAAv6WBVcAAv6WDt8AAv6WDaMAAv6UpwAC+W8AAcijAAL+tmMrAAL+uAMAAv62YxsAAv7Ce+MAAv7HAAHIAwAC/scAAcgHAAL+xwAByAsAAv7HAAHIDwAC/rZjEwAC/tp74wAC/t8AAcgTAAL+3wAByB8AAv7fAAHILwAC/t8AAcg3AAL+3wAByDsAAv7fAAHIQwAC/t8AAchLAAL+tmMfAAL+/nvjAAL/AwAByEcAAv79hwAC+W8AAcinAAL/DmMrAAL/EAMAAv8OYxMAAv8ae+MAAv8eGj8AAv8e85sAAvlvAAHIqwAC/ypjKwAC/ywDAAL5bwAByK8AAv82YxMAAv86e+MAAv8+Gj8AAv8+85sAAv8/AAHISwAC/z8AAchvAAL/PwAByHMAAv8/AAHIewAC/z8AAciDAAL/PwAByIsAAv8/AAHIlwAC/zoJGwAC/zoC/wAC/zplKwAC/zoRewAC/zodYwAC/zkvAAL/OwABDqsAAv86D/cAAv82Yx8AAv+Ge+MAAv+LAAHIRwAC/4WHAAL/hgVXAAL/hg7fAAL/hg2jAAL/hKcAAv82YysAAv+kAwAC+W8AAcizAAL/rmMrAAL/sAMAAv+uYx8AAv+6DaMAAv+6D1cAAv+5hwAC/7oFVwAC/7oO3wAC/7inAAL/rmMTAAL/1S8AAv/WAv8AAv/WEXsAAv/WCRsAAv/WWZMAAv/WD/cAAv/WApcAAv/XAAEOqwAC/9ZlKwAC/9ayXwAC/9cAAQ6/AAL/1gKvAAL/1wABDrMAAv/WXKsAAv/WHWMAAv/UjwAC+W8AAci3AAMAGmMrAAMAHAMAAwAaYxMAAwAme+MAAwAqGj8AAwAq85sAAwArAAHISwADACsAAchvAAMAKwAByHMAAwArAAHIewADACsAAciDAAMAKwAByIsAAwArAAHIlwADACYJGwADACYC/wADACZlKwADACYRewADACYdYwADACUvAAMAJwABDqsAAwAmD/cAAwAaYx8AAwBye+MAAwB3AAHIRwADAHGHAAMAcgVXAAMAcg7fAAMAcg2jAAMAcKcAAvlvAAHIuwADAJJjKwADAJQDAAMAkmMbAAMAnnvjAAMAowAByAMAAwCjAAHIBwADAKMAAcgLAAMAowAByA8AAwCSYxMAAwC2e+MAAwC7AAHIEwADALsAAcgfAAMAuwAByC8AAwC7AAHINwADALsAAcg7AAMAuwAByEMAAwC7AAHISwADAJJjHwADANp74wADAN8AAchHAAMA2YcAAvlvAAHIvwADAOpjKwADAOwDAAMA6mMTAAMA9nvjAAMA+ho/AAMA+vObAAL5bwAByMMAAwEGYysAAwEIAwAC+W8AAcjHAAMBEmMrAAMBFAMAAwESYx8AAwEeDaMAAwEeD1cAAwEdhwADAR4FVwADAR4O3wADARynAAMBEmMTAAMBOS8AAwE6Av8AAwE6EXsAAwE6CRsAAwE6WZMAAwE6D/cAAwE6ApcAAwE7AAEOqwADATplKwADATqyXwADATsAAQ6/AAMBOgKvAAMBOwABDrMAAwE6XKsAAwE6HWMAAwE4jwAC+W8AAcjLAAMBfmMrAAMBgAMAAwF+YxMAAwGKe+MAAwGOGj8AAwGO85sAAwGPAAHISwADAY8AAchvAAMBjwAByHMAAwGPAAHIewADAY8AAciDAAMBjwAByIsAAwGPAAHIlwADAYoJGwADAYoC/wADAYplKwADAYoRewADAYodYwADAYkvAAMBiwABDqsAAwGKD/cAAwF+Yx8AAwHWe+MAAwHbAAHIRwADAdWHAAMB1gVXAAMB1g7fAAMB1g2jAAMB1KcAAvlvAAHIzwADAfZjKwADAfgDAAMB9mMbAAMCAnvjAAMCBwAByAMAAwIHAAHIBwADAgcAAcgLAAMCBwAByA8AAwH2YxMAAwIae+MAAwIfAAHIEwADAh8AAcgfAAMCHwAByC8AAwIfAAHINwADAh8AAcg7AAMCHwAByEMAAwIfAAHISwADAfZjHwADAj574wADAkMAAchHAAMCPYcAAvlvAAHI0wADAk5jGwADAlJ74wADAlcAAcejAAMCVwABI1MAAwJXAAHHSwADAk5jEwADAmZ74wADAmoaPwADAmrzmwADAmYdYwADAmUvAAMCZhF7AAMCTmMrAAMCgAMAAvlvAAHI1wADAopjGwADAo574wADApMAAbBPAAMCkt1XAAMCkwAByNsAAwKTAAG4ywADApMAAcjfAAMCimMfAAMCqXMAAwKphwADAqoFVwADAqoO3wADAopjKwADArwDAAL5bwAByOMAAwLGYxsAAwLKe+MAAwLPAAGwTwADAs7dVwADAs8AAcjbAAMCzwABuMsAAwLPAAHI3wADAs8AAchHAAMCyXsAAwLGYxMAAwLtdwADAsZjKwADAvQDAAL5bwAByOcAAwL+YysAAwMAAwADAv5jGwADAwp74wADAw8AAcgDAAMDDwAByAcAAwMPAAHICwADAw8AAcgPAAMC/mMTAAMDInvjAAMDJwAByBMAAwMnAAHIHwADAycAAcgvAAMDJwAByDcAAwMnAAHIOwADAycAAchDAAMDJwAByEsAAwL+Yx8AAwNGe+MAAwNLAAHIRwADA0WHAAL5bwAByOsAAwNWYysAAwNYAwADA1ZjEwADA2J74wADA2YaPwADA2bzmwAC+W8AAcjvAAMDcmMrAAMDdAMAAwNyYxMAAwN9WwADA34McwADA35cowADA34RewADA35VJwADA35ZkwADA35ZpwADA35ZywADA34JGwADA34ClwADA35cpwADA35cswADA35cqwADA35ctwADA34QHwADA35cuwADA35cvwADA35cwwADA34CtwADA34CrwADA3yPAAMDfgaXAAMDfhJXAAMDfg/3AAMDflmzAAMDfg1/AAMDflmLAAMDfWMAAwN+B1sAAwN+WcMAAwN+WccAAwN+WW8AAwN+Wb8AAwN+WZsAAwN+Wa8AAwN+WbsAAwN+WZcAAwNyY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+MAAw0aXRMAAw0CYysAAw0gAwAC+W8AAcn3AAMNKmMbAAMNLnvjAAMNMwAByfsAAw0zAAHHDwADDSpjJwADDT5ZawADDT5pswADDSpjEwADDUpZkwADDUoQnwADDUsAAbB3AAMNSVsAAw1KApcAAw1KGJsAAw1KfX8AAw1KEXsAAw1Ke+MAAw1uf/MAAw1KXKsAAw1KXLcAAw1LAAHKAwADDUsAAcn/AAMNSgkbAAMNSwABygcAAw1IjwADDSpjHwADDZGHAAMNkgx7AAMNkgerAAMNkgMPAAMNkgVXAAMNkXMAAw0qYysAAw2sAwAC+W8AAcoLAAMNtmMbAAMNunvjAAMNvwAByfsAAw2/AAHKDwADDb4jgwADDbZjEwADDc13AAMNtmMfAAMN1XsAAw22YysAAw3cAwAC+W8AAcoXAAMN5mMbAAMN6nvjAAMN7wABsAcAAw3vAAGwTwADDe8AAbBTAAMN7wABsFcAAw3vAAHHFwADDeZjJwADDgZZawADDgZpswADDeZjEwADDhJZkwADDhIP9wADDhJZlwADDhICtwADDhFbAAMOEgKXAAMOEhF7AAMOEnvjAAMOMwABx4cAAw4zAAGwjwADDjMAAbCTAAMOMwAByhsAAw4y0K8AAw4zAAHHgwADDjMAAQ03AAMOMwABsJ8AAw4zAAGwawADDhJcqwADDhJctwADDhIJGwADDhCPAAMOEhCfAAMOEwABsHcAAw4SfX8AAw4SGJsAAw3mYx8AAw55cwADDnoFVwADDnmHAAMOegx7AAMOegerAAMOegMPAAMN5mMrAAMOlAMAAvlvAAHKLwADDp5jGwADDqJ74wADDqbVVwADDqcAARNbAAMOpwABxxcAAw6nAAHKMwADDqYjgwADDp5jHwADDr17AAMOnmMTAAMOxXcAAw6eYysAAw7MAwAC+W8AAco3AAMO1mMTAAMO2VsAAw7aDHMAAw7aXKMAAw7aEXsAAw7aVScAAw7aWZMAAw7aWacAAw7aWcsAAw7aCRsAAw7aApcAAw7aXKcAAw7aXLMAAw7aXKsAAw7aXLcAAw7aEB8AAw7aXLsAAw7aXL8AAw7aXMMAAw7aArcAAw7aAq8AAw7YjwADDtoGlwADDtoSVwADDtoP9wADDtpZswADDtoNfwADDtpZiwADDtljAAMO2gdbAAMO2lnDAAMO2lnHAAMO2llvAAMO2lm/AAMO2lmbAAMO2lmvAAMO2lm7AAMO2lmXAAMO1mMfAAMPcXMAAw9xhwADD3IFVwADD3IO3wADD3IDDwADD3IMewADD3IHqwADDtZjKwADD5ADAAL5bwAByjsAAw+aYysAAw+cAwADD5pjEwADD6VbAAMPpgxzAAMPplyjAAMPphF7AAMPplUnAAMPplmTAAMPplmnAAMPplnLAAMPpgkbAAMPpgKXAAMPplynAAMPplyzAAMPplyrAAMPply3AAMPphAfAAMPply7AAMPply/AAMPplzDAAMPpgK3AAMPpgKvAAMPpI8AAw+mBpcAAw+mElcAAw+mD/cAAw+mWbMAAw+mDX8AAw+mWYsAAw+lYwADD6YHWwADD6ZZwwADD6ZZxwADD6ZZbwADD6ZZvwADD6ZZmwADD6ZZrwADD6ZZuwADD6ZZlwADD5pjHwADED1zAAMQPYcAAxA+BVcAAxA+Dt8AAxA+Aw8AAxA+DHsAAxA+B6sAAvluXSsAAxBeYxMAAxBjAAHKPwADEF5jKwADEGgDAAL5bwABykMAAxByYxMAAxB2e+MAAxB6XTcAAxB7AAHHlwADEHZZkwADEHZcwwADEHZcvwADEHZVJwADEHZZpwADEHZZywADEHYJGwADEHYClwADEHZcpwADEHZcswADEHZcqwADEHZctwADEHYQHwADEHZcuwADEHYCtwADEHYCrwADEHSPAAMQdgaXAAMQdhJXAAMQdg/3AAMQdlmzAAMQdg1/AAMQdlmLAAMQdWMAAxB2B1sAAxB2WcMAAxB2WccAAxB2WW8AAxB2Wb8AAxB2WZsAAxB2Wa8AAxB2WbsAAxB2WZcAAxByYx8AAxEKBVcAAxEKDt8AAxEKAw8AAxEKDHsAAxEKB6sAAxByYysAAxEgAwAC+W6qAwADESpjGwADES574wADETKqBwADESpjEwADETp74wADET5dNwADET8AAceXAAMROgxzAAMROlyjAAMROVsAAxE6CRsAAxE6ApcAAxE6XKcAAxE6XLMAAxE6XKsAAxE6XLcAAxE6EXsAAxEqYx8AAxFxcwADEXGHAAMRKmMrAAMRfAMAAvlvAAHKSwADEYZjGwADEYoPWwADEYoXFwADEYoXHwADEYZjKwADEZgDAAL5bwAByk8AAxGiYxsAAxGmAlsAAxGiYysAAxGsAwAC+W8AAcpTAAMRtmMbAAMRunvjAAMRvp/zAAMRvwABxxcAAxG/AAHKVwADEbZjHwADEc574wADEdMAAbVDAAMR0wABylsAAxHTAAHKXwADEdMAAcdLAAMR0wAByUsAAxHTAAHKdwADEbZjIwADEe574wADEfMAAbVDAAMRtmMTAAMR+nvjAAMR/wABymMAAxH/AAHKZwADEf8AAcprAAMR/wABym8AAxH/AAHHgwADEf8AAcpzAAMR/wABynsAAxG2YysAAxIcAwAC+W8AAcp/AAMSJmMTAAMSKlyvAAMSJmMrAAMSMAMAAvlvAAHKgwADEjpjKwADEjwDAAMSOmMfAAMSRg2jAAMSRg9XAAMSRYcAAxJGBVcAAxJGDt8AAxJEpwADEjpjEwADEmEvAAMSYgL/AAMSYhF7AAMSYgkbAAMSYlmTAAMSYg/3AAMSYgKXAAMSYwABDqsAAxJiZSsAAxJisl8AAxJjAAEOvwADEmICrwADEmMAAQ6zAAMSYlyrAAMSYh1jAAMSYI8AAvlvAAHKhwADEqZjGwADEqp74wADEq8AAbVDAAMSrwABylsAAxKvAAHKXwADEq8AAcdLAAMSpmMnAAMSwllrAAMSwmmzAAMSwwABwb8AAxLDAAHJDwADEqZjEwADEtZ74wADEtsAAcpjAAMS1S8AAxLWEXsAAxLWAv8AAxLWZSsAAxLWApcAAxLWD/cAAxLWCRsAAxLWHWMAAxLXAAEOqwADEtcAAcqXAAMS1wABypsAAxLXAAHKnwADEtcAAcqjAAMSpmMfAAMTFgVXAAMTFg7fAAMTFYcAAxMWDaMAAxMUpwADEqZjKwADEywDAAMTLnvjAAMTNhmvAAL5bwAByqcAAxM+YxsAAxNCe+MAAxNHAAHKqwADE0cAAcqvAAMTRwABxxcAAxNHAAHKVwADE0cAAcqzAAMTPmMfAAMTXXsAAxM+YxMAAxNme+MAAxNrAAHKtwADE2sAAcrHAAMTawABysMAAxNldwADEz5jKwADE3wDAAMTfwAByrsAAvlvAAHKywADE4pjGwADE4574wADE5MAAcqrAAMTimMfAAMTmYcAAxOaBVcAAxOZcwADE4pjEwADE6pVJwADE4pjKwADE7ADAAL5bwABytMAAxO6YxsAAxO+e+MAAxPCqgcAAxO6Yx8AAxPJhwADE8oFVwADE8lzAAMTumMrAAMT2AMAAvlvAAHK1wADE+JjEwADE+Z74wADE+sAAcrDAAMT4mMrAAMT8AMAAvlvAAHK2wADE/pjEwADE/574wADFAMAAcrDAAMT+mMrAAMUCAMAAvlvAAHK4wADFBJjEwADFBZ74wADFBsAAcrDAAMUEmMrAAMUIAMAAxQjAAHKuwAC+W8AAcrnAAMULmMrAAMUMAMAAxQuYxMAAxQ6WZMAAxQ6Aq8AAxQ6BpcAAxQ6WcsAAxQ6ElcAAxQ6WacAAxQ6DHMAAxQ6D/cAAxQ6WbMAAxQ6DX8AAxQ6WYsAAxQ5YwADFDoHWwADFDoCtwADFDpVJwADFDpZwwADFDpZxwADFDpZbwADFDpZvwADFDpZmwADFDpZrwADFDpZuwADFDpZlwADFDiPAAMULmMfAAMUnYcAAxSeBVcAAxSeDt8AAxSeDHsAAxSeB6sAAxSeAw8AAvlvAAHK6wADFLpjKwADFLwDAAMUumMTAAMUxVsAAxTGDHMAAxTGXKMAAxTGEXsAAxTGVScAAxTGWZMAAxTGWacAAxTGWcsAAxTGCRsAAxTGApcAAxTGXKcAAxTGXLMAAxTGXKsAAxTGXLcAAxTGEB8AAxTGXLsAAxTGXL8AAxTGXMMAAxTGArcAAxTGAq8AAxTEjwADFMYGlwADFMYSVwADFMYP9wADFMZZswADFMYNfwADFMZZiwADFMVjAAMUxgdbAAMUxlnDAAMUxlnHAAMUxllvAAMUxlm/AAMUxlmbAAMUxlmvAAMUxlm7AAMUxlmXAAMUumMfAAMVXXMAAxVdhwADFV4FVwADFV4O3wADFV4DDwADFV4MewADFV4HqwAC+W8AAcrvAAMVfmMbAAMVgnvjAAMVhwABtUMAAxWHAAHKWwADFYcAAcpfAAMVhwABx0sAAxV+YycAAxWaWWsAAxWaabMAAxV+YxMAAxWme+MAAxWqXTcAAxWrAAHKYwADFarAlwADFasAAcrPAAMVplmTAAMVpgxzAAMVpVsAAxWmEXsAAxWmApcAAxWmXKcAAxWmXLMAAxWmXKMAAxWmXL8AAxWmXMMAAxWmXLsAAxWmCRsAAxWmVScAAxWkjwADFX5jHwADFfVzAAMV9YcAAxX2BVcAAxX2Dt8AAxX2DHsAAxX2B6sAAxX2Aw8AAxV+YysAAxYUAAMAAkszAAMWHmMbAAMWIwABhJsAAxYjAAJLMwADFisAAdNvAAMWKwAB03sAAxYrAAHTgwADFisAAbezAAMWKwABt7cAAxYrAAHThwADFisAAdOLAAMWKwAB048AAxYrAAHTkwADFisAAdOXAAMWKwAB05sAAxYrAAHTnwADFisAAdOjAAMWIwAB03MAAxYjAAHTdwADFiMAAdN/AAMWIgmTAAMWIwAB0NMAAxYiVXMAAxYigKMAAxYgEwADFh5jEwADFoMAAkszAAMWhwAB06cAAxaHAAHTuwADFocAAdO/AAMWhwAB08MAAxaHAAHTxwADFocAAdPLAAMWhwAB09MAAxaDAAHTrwADFoMAAdOzAAMWgwAB07cAAxaCIj8AAxaCIjsAAxYfAAHLawADFrpjGwADFr8AAkszAAMWwwABy28AAxbDAAHLcwADFrpjEwADFs4jjwADFs7TrwADFrpjKwADFtgDAAMWHwABy3sAAxbiYxMAAxbnAAHLfwADFucAAcuDAAMW5wABy4cAAxbnAAHLiwADFucAAcuPAAMW5rOzAAMW5wABy5MAAxbnAAHLlwADFucAAcubAAMW5wABy58AAxbnAAHLowADFuJjHwADFxYF2wADFuJjKwADFxwDAAMWHwABy6cAAxcmYxsAAxcqhIMAAxcrAAF8awADFyoPWwADFyoCWwADFyZjEwADFz8AAcurAAMXPwABy68AAxc/AAHLfwADFz8AAcuDAAMXPwABy4cAAxc/AAHLiwADFz8AAcuPAAMXPrOzAAMXPwABy5MAAxc/AAHLlwADFz8AAcubAAMXPwABy58AAxc/AAHLowADFyZjHwADF3YF2wADFyZjKwADF3wDAAMWHwABy7MAAxeGYxsAAxeLAAHLtwADF4ZjEwADF5MAAcufAAMXkwABy5MAAxeGYx8AAxeeBdsAAxeGYysAAxekAwADFh8AAcu7AAMXrmMbAAMXswABy78AAxezAAHLwwADF7INhwADF7GHAAMXrmMfAAMXxwABrbcAAxeuYxMAAxfPAAJLMwADF9MAAcvHAAMXzwABy8sAAxfPAAGA7wADF88AAcvPAAMXzwABy9MAAxeuYysAAxfoAwADFh8AAcvXAAMX8mMbAAMX9wABy9sAAxf3AAHL3wADF/cAAcvjAAMX9wABy+cAAxf3AAHL6wADF/cAAcvvAAMX9wABy/MAAxf3AAHL9wADF/cAAcv7AAMX9torAAMX9wABy/8AAxf3AAHMAwADF/cAAcwHAAMX9wABzAsAAxf3AAHMDwADF/cAAcwTAAMX9wABzBcAAxf3AAHMGwADF/cAAcwfAAMX9wABzCMAAxf3AAHMJwADF/cAAcwrAAMX9wABzC8AAxf3AAHMMwADF/cAAcw3AAMX9wABzDsAAxf3AAHMPwADF/cAAcxDAAMX9mYLAAMX9wABzEcAAxf2eBcAAxf2d4cAAxf2d+8AAxf3AAHMSwADF/Z4RwADF/cAAcxPAAMX9wABzFMAAxf2d4MAAxf3AAHMVwADF/cAAcxbAAMX9nh/AAMX9wABzF8AAxf3AAHMYwADF/cAAcxnAAMX9wABzGsAAxf3AAHMbwADF/cAAcxzAAMX9wABzHcAAxf3AAHMewADF/cAAcx/AAMX9wABzIMAAxf3AAHMhwADF/cAAYUzAAMX9wABhTcAAxf3AAHMiwADF/cAAcyPAAMX9wABzJMAAxf3AAHMlwADF/cAAcybAAMX9wABzJ8AAxf3AAHMowADF/cAAcynAAMX9wABzKsAAxf3AAHMrwADF/cAAcyzAAMX9wABzLcAAxf3AAHMuwADF/cAAcy/AAMX9wABzMMAAxf3AAHMxwADF/cAAczLAAMX9wABzM8AAxf3AAHM0wADF/cAAczXAAMX9wABzNsAAxf3AAHM3wADF/cAAczjAAMX9wABzOcAAxf3AAHM6wADF/cAAczvAAMX9wABzPMAAxf2p+MAAxf2CUsAAxf3AAGS5wADF/cAAcz3AAMX9go/AAMX8mMTAAMZUwABzPsAAxlTAAHM/wADGVIKMwADGVMAAc0TAAMZUwABzRcAAxlTAAHNGwADGVMAAc0fAAMZUwABzSMAAxlTAAHNJwADGVMAAYDvAAMZUwABy88AAxlTAAHL0wADGVMAAc0rAAMZUwABzTMAAxlTAAHNLwADGVMAAc03AAMZUwABzUsAAxlSDC8AAxlTAAHNbwADGVMAAc1rAAMZUwABzWcAAxlTAAHNdwADGVMAAc1jAAMZUwABzYcAAxlTAAHNRwADGVMAAc0/AAMZUwABzUMAAxlTAAHNnwADGVMAAc2jAAMZUwABzTsAAxlTAAHNCwADGVMAAc1zAAMZUgcTAAMX8mMfAAMZ2gXbAAMZ2wABy3cAAxnatEcAAxfyYyMAAxnqtEcAAxfyYysAAxnwAwADFh8AAc4zAAMZ+mMbAAMZ/rRHAAMZ/wABy3cAAxn6YxMAAxoLAAHNEwADGgsAAYDvAAMaCwABzRsAAxoLAAHNIwADGgsAAc0fAAMaCwABzScAAxoLAAHNFwADGgsAAcvTAAMZ+mMrAAMaLAMAAxYfAAHONwADGjZjGwADGjsAAkszAAMaPwABzjsAAxo/AAHLbwADGj5dowADGjZjEwADGk8AAkszAAMaUwABzj8AAxpPAAG5JwADGk1bAAMaTgozAAMaTwABvGsAAxo2YysAAxpoAwADFh8AAc5DAAMacmMbAAMadwABzkcAAxp3AAHOSwADGncAAc5PAAMadwABzlMAAxp3AAHOVwADGncAAcyLAAMadwABzlsAAxp3AAHOXwADGncAAc5jAAMadwABzmcAAxp3AAHOawADGncAAc5vAAMadwABznMAAxp3AAHOdwADGncAAc57AAMadwABzn8AAxp3AAHOgwADGncAAc6HAAMadwABzosAAxp3AAHOjwADGnYKPwADGnWHAAMadwABzPcAAxp3AAHOkwADGnYciwADGnJjEwADGt8AAc6XAAMa3wABzqMAAxrfAAJLMwADGusAAc6/AAMa6wABDTcAAxrfAAG5JwADGtyPAAMacmMrAAMa/AMAAxYfAAHO0wADGwZjGwADGwociwADGwq0RwADGwsAAct3AAMbBmMTAAMbGwABzRMAAxsbAAGA7wADGxsAAc0bAAMbGwABzSMAAxsbAAHNHwADGxsAAc0nAAMbGwABzRcAAxsbAAHL0wADGwZjKwADGzwDAAMWHwABztcAAxtGYxsAAxtLAAJLMwADG08AAc47AAMbTl2jAAMbRmMTAAMbWwACSzMAAxtfAAHOPwADG18AAc7bAAMbWwABuScAAxtZWwADG1oKMwADG0ZjKwADG3QDAAMWHwABzt8AAxt+YxsAAxuDAAJLMwADG4cAAc7jAAMbfmMfAAMbjgL3AAMbjiOLAAMbjgfjAAMbfmMTAAMbnlXrAAMbnhyHAAMbfmMrAAMbqAMAAxYfAAHO7wADG7JjGwADG7cAAkszAAMbuwABzvMAAxuyYxMAAxvCI48AAxvC068AAxvCetMAAxuyYysAAxvQAwADFh8AAc7/AAMb2mMrAAMb3AMAAxYfAAHPAwADG+ZjGwADG+sAAkszAAMb7l2jAAMb7wABzvMAAxvmYxMAAxv6CjMAAxv7AAG5JwADG+ZjKwADHAQDAAMWHwABzwsAAxwOYxsAAxwTAAJLMwADHBcAAc7jAAMcFwABzvMAAxwOYxMAAxwiI48AAxwjAAJLMwADHCsAAc8TAAMcItOvAAMcInrTAAMcDmMrAAMcOAMAAxYfAAHPFwADHEJjEwADHEbTrwADHEJjKwADHEwDAAMWHwABzx8AAxxWYxsAAxxbAAJLMwADHF8AAc8jAAMcVmMTAAMcZgozAAMcZVsAAxxnAAG5JwADHFZjKwADHHQDAAMWHwABzycAAxx+YxsAAxyDAAJLMwADHIZdowADHH5jEwADHI4KMwADHI1bAAMcjwABuScAAxx+YysAAxycAwADFh8AAc8vAAMcpmMbAAMcqwACSzMAAxyvAAFJRwADHKZjHwADHLYjiwADHLYH4wADHKZjEwADHMIchwADHMJaGwADHMMAAkszAAMczwABz1sAAxymYysAAxzUAwADHNcAAc8zAAMWHwABz3MAAxziYxsAAxznAAJLMwADHOsAAc93AAMc4mMTAAMc8iOPAAMc8tOvAAMc4mMrAAMc/AMAAxz/AAHPMwADFh8AAc97AAMdCmMbAAMdDwACSzMAAx0TAAHPfwADHRMAAc+DAAMdEwABz4sAAx0TAAHPjwADHRMAAc+TAAMdEwABkMMAAx0TAAHPlwADHQpjEwADHTMAAkszAAMdNwABz5sAAx03AAHPnwADHTcAAc+jAAMdMwABz6cAAx0yVesAAx0zAAHPswADHTMAAc/HAAMdCmMrAAMdVAMAAxYfAAHPywADHV5jGwADHWMAAc/PAAMdXmMTAAMdawABz6cAAx1eYysAAx1wAwADFh8AAc/TAAMdemMTAAMdfVsAAx1+CjMAAx1/AAG5JwADHX8AAkszAAMdjtCvAAMdemMrAAMdlAMAAxYfAAHP1wADHZ5jGwADHaMAAkszAAMdpl2jAAMdpwABSUcAAx2eYxMAAx2zAAJLMwADHbbQrwADHZ5jKwADHbwDAAMWHwABz9sAAx3GYxsAAx3LAAJLMwADHc5dowADHc8AAUlHAAMdxmMTAAMd2wACSzMAAx3e0K8AAx3GYysAAx3kAwADFh8AAc/fAAMd7mMTAAMd8iOPAAMd8tOvAAMd7mMrAAMd/AMAAxYfAAHP4wADHgZjGwADHgsAAkszAAMeDwABz4sAAx4PAAHPjwADHg8AAc/nAAMeDwABz+sAAx4PAAFdHwADHg8AAc/vAAMeDwABz/MAAx4PAAHP9wADHg8AAc/7AAMeDwABz/8AAx4PAAGQwwADHgZjEwADHj8AAkszAAMeQwAB0AMAAx5DAAHPowADHkMAAc+fAAMeQwAB0AcAAx5DAAHQDwADHkMAAdATAAMeQwAB0DMAAx5DAAHQPwADHkMAAc9bAAMePhyHAAMePgozAAMePwAB0B8AAx4GYysAAx50AwADFh8AAdBPAAMefmMbAAMegwACSzMAAx6GXaMAAx6HAAHQUwADHn5jEwADHpFbAAMekgozAAMekwABuScAAx5+YysAAx6gAwADFh8AAdBXAAMeqmMbAAMerwACSzMAAx6yWdMAAx6qYycAAx67AAHQWwADHrpZawADHqpjEwADHscAAbknAAMeqmMrAAMezAMAAxYfAAHQXwADHtZjEwADHtlbAAMe2gozAAMe2wABuScAAx7WYysAAx7oAwADFh8AAdBjAAMe8mMbAAMe9wACSzMAAx76XaMAAx7yYxMAAx8BWwADHwIKMwADHvJjKwADHwwDAAMWHwAB0GcAAx8WYxsAAx8bAAJLMwADHx8AAdBrAAMfHmonAAMfHmFPAAMfHwAB0G8AAx8WYxMAAx8xWwADHzMAAkszAAMfOwAB0HsAAx8yCjMAAx8WYysAAx9EAwADFh7SQwADH05jGwADH1MAAkszAAMfVlnTAAMfTmMnAAMfXwAB0FsAAx9OYxMAAx9lWwADH2YKMwADH05jKwADH3ADAAMWHwAB0H8AAx96YxsAAx9/AAJLMwADH4JqJwADH4MAAdCDAAMfemMTAAMfjVsAAx+OCjMAAx96YysAAx+YAwADFh8AAdCHAAMfomMbAAMfpwACSzMAAx+rAAHQiwADH6sAAdCPAAMfomMTAAMftVsAAx+2cR8AAx+2CjMAAx+iYysAAx/EAwADFh8AAdCTAAMfzmMTAAMf0lXrAAMf0hyHAAMf0wAB0JcAAx/OYx8AAx/iI4sAAx/iB+MAAx/jAAHQmwADH85jKwADH/ADAAMWHwAB0J8AAx/6YxsAAx//AAJLMwADIAMAAclLAAMgAwAB0KMAAx/6Yx8AAyAOI4sAAyAOB+MAAx/6YysAAyAYAwADFh8AAdCnAAMgImMbAAMgJwACSzMAAyArAAHQqwADICJjHwADIDIjiwADIDIH4wADIDMAAdCbAAMgImMrAAMgQAMAAxYfAAHQswADIEpjEwADIE8AAcHfAAMgTiOPAAMgTwAB0JcAAyBO068AAyBOetMAAyBOWZMAAyBKYysAAyBoAwADFh8AAdC7AAMgcmMbAAMgdwACSzMAAyB7AAHJSwADIHsAAdCjAAMgcmMTAAMghiOPAAMghtOvAAMgcmMrAAMgkAMAAxYeLkMAAyCaYxsAAyCfAAJLMwADIKMAAdC/AAMgmmMfAAMgqiOLAAMgqgfjAAMgqgL3AAMgmmMTAAMguwAB0RMAAyC7AAHRGwADIJpjKwADIMQDAAMWHwAB0R8AAyDOYxsAAyDTAAJLMwADINSjAAMg0wAB0SMAAyDTAAHRJwADINMAAdErAAMg0wAB0S8AAyDSeXMAAyDTAAHRMwADINMAAdE3AAMg0llLAAMgzmMTAAMg/I8AAyDOYysAAyEHAAJLMwADIQoC1wADIQQDAAMWHwAB0T8AAyEWYxsAAyEaBwcAAyEWYxMAAyEiI48AAyEjAAJLMwADISsAAbwzAAMhItOvAAMhFmMrAAMhNAMAAxYfAAHRUwADIT5jGwADIUMAAkszAAMhRwABKqMAAyFGXaMAAyE+YxMAAyFTAAG5JwADIVIKMwADIT5jKwADIVwDAAMWHwAB0VcAAyFmYxsAAyFrAAHRWwADIWsAAU7fAAMhawAB0V8AAyFmYxMAAyF4jwADIWZjKwADIYADAAMWHwAB0W8AAyGKYxMAAyGMjwADIYpjKwADIZQDAAMWHwAB0XcAAyGeYxsAAyGjAAJLMwADIacAActvAAMhpwAB0XsAAyGeYxMAAyGyHIcAAyGyVesAAyGeYx8AAyG+I4sAAyG+B+MAAyGeYysAAyHIAwADIcsAAdGDAAMWHiNLAAMh1mMbAAMh2qKfAAMh2wACSzMAAyHjAAHRewADIdZjEwADIeojjwADIerTrwADIep60wADIesAAdCXAAMh1mMrAAMh/AMAAyH/AAHRhwADFh8AAdGLAAMiCmMbAAMiDwACSzMAAyITAAHRjwADIhMAAdGXAAMiEwAB0XsAAyITAAHRmwADIg8AAdGTAAMiCmMTAAMiKwACSzMAAyIvAAHRowADIiojjwADIirTrwADIip60wADIgpjKwADIkADAAMWHwAB0a8AAyJKYxsAAyJPAAJLMwADIlMAAdGXAAMiUwAB0XsAAyJSXaMAAyJTAAHRswADIkpjEwADImVbAAMiZgozAAMiSmMrAAMicAMAAxYfAAHRvwADInpjGwADIn8AAkszAAMigl2jAAMigwAB0ZcAAyKDAAHRewADIoMAAdGbAAMigwAB0bMAAyJ6YxMAAyKbAAJLMwADIp8AAc7bAAMimVsAAyKaCjMAAyJ6YysAAyKsAwADFh8AAdHDAAMitmMbAAMiuwACSzMAAyK/AAHLbwADIrZjEwADIsYjjwADIsbTrwADIsZ60wADIrZjKwADItQDAAMWHwAB0ccAAyLeYxsAAyLjAAHRywADIuMAAdHPAAMi4wAB0dMAAyLjAAHR1wADIuMAAdHbAAMi4ogrAAMi4wAB0d8AAyLjAAHR4wADIuMAAdHnAAMi4wAB0esAAyLjAAHR7wADIuMAAdHzAAMi4wAB0fcAAyLjAAHR+wADIuMAAkszAAMjHwAB0f8AAyMfAAHRewADIt5jHwADIysAAkszAAMjLwAB0gMAAyLeYxMAAyM2Bu8AAyM3AAHSCwADIzYQWwADIzcAAdIPAAMjNlknAAMjNwAB0hMAAyM3AAJLMwADI1MAAdIXAAMjUwAB0hsAAyM3AAHSHwADIzcAAdIjAAMjNiGnAAMjNwAB0isAAyLeYysAAyNsAwADFh8AAdI/AAMjdmMbAAMjewACSzMAAyN+D3sAAyN2YxMAAyOGZw8AAyOGIacAAyOHAAHSKwADI3ZjKwADI5QDAAMWHwAB0kcAAyOeYxsAAyOjAAJLMwADI6ZdowADI55jEwADI67s3wADI64QxwADI68AAdIPAAMjrgbvAAMjrwAB0gsAAyOuEFsAAyOeYx8AAyPLAAJLMwADI88AAdIDAAMjnmMrAAMj1AMAAxYfAAHSSwADI95jKwADI+ADAAMj3mMbAAMj6wACSzMAAyPuD3sAAyPeYxMAAyP2Zw8AAyP2IacAAyP3AAHSKwADFh8AAdJPAAMkBmMbAAMkCwACSzMAAyQPAAHRlwADJAZjEwADJBZnDwADJAZjKwADJBwDAAMWHwAB0lMAAyQmYxsAAyQrAAHRnwADJCsAAdGnAAMkKgo/AAMkKJ8AAyQmYxMAAyQ+7N8AAyQ+ERsAAyQ/AAHSDwADJD8AAdJXAAMkPgbvAAMkPwAB0gsAAyQ+EFsAAyQ/AAHSXwADJD8AAdJbAAMkPhwDAAMkJmMfAAMkawACSzMAAyRvAAHSAwADJCZjKwADJHQDAAMWHwAB0mMAAyR+YysAAySAAwADJH5jGwADJIsAAkszAAMkjg97AAMkfmMTAAMklmcPAAMkliGnAAMklwAB0isAAxYfAAHSZwADJKZjGwADJKqinwADJKZjEwADJLJnDwADJKZjKwADJLgDAAMWHwAB0msAAyTCYxsAAyTHAAJLMwADJMsAAc7jAAMkwmMfAAMk0gL3AAMk0iOLAAMk0gfjAAMkwmMTAAMk4lXrAAMk4hyHAAMkwmMrAAMk7AMAAxYfAAHSbwADJPZjKwADJPgDAAMWHwAB0nMAAyUCYxMAAyUG068AAyUCYysAAyUMAwADFh8AAdJ3AAMlFmMbAAMlGwACSzMAAyUeXaMAAyUWYxMAAyUmCjMAAyUlWwADJScAAkszAAMlMwAB0nsAAyUzAAHSfwADJTMAAdKDAAMlJwABuScAAyUWYysAAyVEAwADFh8AAdKLAAMlTmMTAAMlUwABuScAAyVOYysAAyVYAwADFhwXAAMlYmMTAAMlZgKbAAMlZiOPAAMlZtOvAAMlZnrTAAMlYmMrAAMleAMAAxYfAAHSkwADJYJjGwADJYcAAkszAAMlil2jAAMliwAB0pcAAyWLAAHSmwADJYJjEwADJZsAAbknAAMlmgozAAMlmwACSzMAAyWnAAHSnwADJYJjKwADJawDAAMWHwAB0qMAAyW2YxsAAyW7AAJLMwADJb8AAdCLAAMltmMTAAMlxnEfAAMltmMrAAMlzAMAAxYe0kcAAyXWYxsAAyXbAAJLMwADJd5Z0wADJdZjJwADJecAAdBbAAMl5llrAAMl5wAB0qcAAyXWYxMAAyX3AAG5JwADJfcAAbxrAAMl9wAB0bsAAyXWYysAAyYEAwADFh8AAdKrAAMmDmMbAAMmEwACSzMAAyYWWdMAAyYOYycAAyYfAAHSpwADJg5jEwADJiYKMwADFh8AAdKvAAMmLmMbAAMmMwACSzMAAyY2aicAAyY2XaMAAyYuYxMAAyZCCjMAAyZCEFsAAyZCCjsAAyZCCA8AAyZCf+sAAyYuYysAAyZYAwADFh8AAdKzAAMmYmMbAAMmZwACSzMAAyZrAAHStwADJmphTwADJmsAAdCPAAMmYmMTAAMmegozAAMmehBbAAMmego7AAMmeggPAAMmen/rAAMmewACSzMAAyaSXd8AAyZiYysAAyaYAwADFh8AAdK7AAMmomMrAAMmpAMAAxYfAAHSvwADJq5jEwADJrMAAbknAAMmsgozAAMmsVsAAyazAAG8awADJrMAAdG7AAMmrmMrAAMmyAMAAxYfAAHSwwADJtJjGwADJtcAAkszAAMm2wAB0ssAAybSYxMAAybiCjMAAybjAAG5JwADJuFbAAMm4wABvGsAAybjAAHRuwADJtJjKwADJvgDAAMWHwAB0s8AAycCYxsAAycHAAJLMwADJwpqJwADJwJjEwADJxIKMwADJxMAAbxrAAMnAmMrAAMnHAMAAxYfAAHS0wADJyZjGwADJysAAkszAAMnLl2jAAMnJmMTAAMnNVsAAyc3AAG5JwADJzYKMwADJyZjKwADJ0QDAAMWHwAB0tcAAydOYxsAAydTAAJLMwADJ1cAAdBTAAMnVl2jAAMnTmMTAAMnYgozAAMnYVsAAydjAAG5JwADJ05jKwADJ3ADAAMWHwAB0t8AAyd6YxsAAyd/AAJLMwADJ4MAAdBTAAMngwAB0I8AAyeCYU8AAyd6YxMAAyeSCjMAAyeRWwADJ5MAAbknAAMnemMrAAMnoAMAAyejAAJLMwADJ6oC1wADFh8AAdLnAAMnsmMbAAMntwACSzMAAye7AAHLcwADJ7JjHwADJ8IC9wADJ8IjiwADJ8IH4wADJ7JjEwADJ9IchwADJ7JjKwADJ9gDAAMWHwAB0usAAyfiYxMAAyfmI48AAyfm068AAyfmetMAAyfiYysAAyf0AwADFh8AAdL/AAMn/mMbAAMoAwACSzMAAygHAAHSlwADKAcAAdBvAAMoBmFPAAMoBwAB0wMAAyf+YxMAAygbAAJLMwADKB8AAbzjAAMoHwAB0vsAAygfAAHS7wADJ/5jKwADKCwDAAMoLwAB0wcAAxYfAAHTFwADKDpjKwADKDwDAAMoPwAB0wcAAyg6YxMAAyhLAAG5JwADKEoKMwADKElbAAMoSwABvGsAAyhLAAHRuwADFh8AAdMbAAMoYmMbAAMoZwACSzMAAyhqXaMAAyhiYxMAAyhyCjMAAyhzAAG5JwADKGJjKwADKHwDAAMWHwAB0ycAAyiGYxsAAyiLAAJLMwADKI8AActzAAMohmMTAAMoliOPAAMoltOvAAMolnrTAAMolwAB0JcAAyiXAAJLMwADKKsAAdM7AAMohmMrAAMosAMAAxYfAAHTPwADKLpjGwADKL8AAkszAAMowwABy3MAAyjDAAHSywADKMMAAdM3AAMowlzjAAMowwAB00MAAyjDAAHTRwADKMMAAdNLAAMoumMfAAMo4wAB008AAyi6YxMAAyjqCjMAAyjqERsAAyjqI48AAyi6YysAAyj4AAMAAks3AAMpAmMXAAMpBwAB0/cAAykHAAHT+wADKQcAAdP/AAMpAmMbAAMpFwACSzcAAykbAAHVMwADKRsAAdU3AAMpAmMTAAMpJwACSzcAAykrAAF/+wADKSsAAdVDAAMpKwAB1WMAAykrAAHViwADKSsAAdWTAAMpKwAB1dMAAykrAAHV2wADKSsAAdXjAAMpKwAB1e8AAykrAAHV9wADKSsAAdX/AAMpKwAB1gcAAykrAAHWDwADKSsAAdYXAAMpKwAB1hsAAykrAAHWIwADKSsAAdYrAAMpKwAB1jMAAykrAAHWOwADKSsAAdZHAAMpKwAB1lMAAykrAAHWWwADKScAARxnAAMpJwAB1aMAAykmWpMAAyknAAHVswADKScAAdXDAAMpJwAB1esAAykDAAHUAwADKZ5jJwADKaADAAMpnmMfAAMpqmS7AAMpnmMTAAMpswAB1A8AAykDAAHUFwADKbpjGwADKb4F2wADKb4H1wADKb8AAdQbAAMpvwAB1B8AAym/AAHUIwADKb8AAdQnAAMpvwAB1CsAAym/AAHULwADKb8AAdQzAAMpvwAB1DcAAym/AAHUOwADKbpjEwADKe8AAks3AAMp8wAB1D8AAynzAAHUSwADKfMAAdRXAAMp7wAB1FMAAym6YysAAyoGBdsAAyoGBx8AAykDAAHUWwADKhJjGwADKhcAAdRfAAMqEmMnAAMqHAMAAyoSYx8AAyomZLsAAyonAAHUYwADKhJjEwADKjMAAdQPAAMpAwAB1GcAAyo6YxsAAyo+AvcAAyo+WycAAyo6YxMAAypLAAJLNwADKk8AAdRvAAMqOmMrAAMqVAMAAykDAAHUcwADKl5jGwADKmJzgwADKmMAASYfAAMqYwACSzcAAypuXOMAAypeYx8AAyp2AlsAAypeYyMAAyp+AlsAAypeYxMAAyqHAAJLNwADKosAAdRvAAMqXmMrAAMqkAMAAykDAAHUfwADKppjGwADKp8AAks3AAMqolzjAAMqmmMfAAMqqgJbAAMqmmMjAAMqsgJbAAMqmmMTAAMquwACSzcAAyq/AAHUbwADKppjKwADKsQDAAMpAwAB1IMAAyrOYxsAAyrTAAJLNwADKtcAAdSHAAMqzmMTAAMq3wABMrcAAyrfAAHUkwADKt8AAks3AAMq6wAB1JcAAyrrAAHUmwADKs5jKwADKvQDAAMpAwAB1KcAAyr+YxsAAysDAAHUqwADKwMAATQPAAMrAnnTAAMq/mMTAAMrEI8AAyr+YysAAysYAwADKQMAAdS3AAMrImMTAAMrJwAB1LsAAysnAAHUywADKycAAdTTAAMrImMrAAMrNAMAAykDAAHU2wADKz5jGwADK0MAAks3AAMrRwABE1cAAytHAAHI3wADK0cAARNbAAMrRkl3AAMrQtBLAAMrPmMTAAMrXgpjAAMrXwABD+MAAyteCkMAAys+YysAAytvAAJLNwADK3IC1wADKQMAAdTfAAMremMbAAMrfwACSzcAAyuC01cAAyt6YxMAAyuLAAHU4wADK4sAAdTrAAMriwAB1PMAAyuLAAHU+wADK3pjHwADK58AASYjAAMremMrAAMrpAMAAykDAAHU/wADK65jGwADK7MAAks3AAMrtwAB1QMAAyu201cAAyuuYxMAAyvBqwADK8MAAdUPAAMrwhy/AAMrwwAB1RcAAyuuYysAAyvUAwADK9cAAdUHAAMpAwAB1SMAAyviYxsAAyvnAAEQRwADK+YC9wADK+cAAks3AAMr8wAB1QMAAyvzAAHU5wADK+JjEwADK/8AAks3AAMsApKzAAMsArm7AAMr4mMrAAMsDwACSzcAAywSAtcAAykDAAHVJwADLBpjGwADLB8AARBHAAMsHgL3AAMsHwACSzcAAywrAAHU5wADLCqSswADLCsAAdUrAAMsKwAB1S8AAywaYxMAAyw+HL8AAywaYyMAAyxHAAGyRwADLBpjKwADLE8AAks3AAMsUgLUAwACSzsAAyxaYxsAAyxfAAHXMwADLF8AAdc3AAMsWmMTAAMsawACSzsAAyxvAAHXOwADLG8AAddDAAMsbwAB10sAAyxvAAHXUwADLG8AAddjAAMsbwAB12sAAyxq0ocAAyxbAAHWewADLI5jJwADLJMAAdZ/AAMskwAB1oMAAyyOYxMAAyyfAAHWiwADLJ8AAXkbAAMsnpSTAAMsnlmXAAMsnwAB1qsAAyyeWZMAAyyfAAHWtwADLJ8AAUqPAAMsnwAB1sMAAyydIwADLI5jHwADLMsAAdafAAMsyg8bAAMsWwAB1scAAyzWYysAAyzYAwADLFsAAdbLAAMs4mMrAAMs5AMAAyxbAAHWzwADLO5jKwADLPADAAMsWwAB1tMAAyz6YysAAyz8AwADLFsAAdbXAAMtBmMrAAMtCAMAAyxbAAHW2wADLRJjKwADLRQDAAMsWwAB1t8AAy0eYysAAy0gAwADLFsAAdbjAAMtKmMrAAMtLAMAAyxbAAHW5wADLTZjKwADLTgDAAMsWwAB1usAAy1CYysAAy1EAwADLFsAAdbvAAMtTmMrAAMtUAMAAyxbAAHW8wADLVpjKwADLVwDAAMsWwAB1vcAAy1mYysAAy1oAwADLFq1ewADLXJjKwADLXQDAAMsWwAB1vsAAy1+YysAAy2AAwADLFsAAdb/AAMtimMrAAMtjAMAAyxbAAHXAwADLZZjKwADLZgDAAMsWwAB1wcAAy2iYysAAy2kAwADLFsAAdcLAAMtrmMTAAMtswAB1w8AAy2yXKMAAy2zAAHXHwADLbEjAAMtrmMnAAMtxpW3AAMtrmMfAAMtzg8bAAMtzHsAAyxbAAHXJwADLdpjGwADLd8AAdcrAAMt2mMrAAMt5AMAAy3nAAHXLAJwIwADLfJjFwADLfcAAdeTAAMt9wABvfcAAy33AAHXlwADLfcAAdebAAMt8mMbAAMuCwAB3H8AAy4KcCMAAy4TAAHcgwADLgp2BwADLgsAAcsnAAMuCwABvXMAAy3yYxMAAy4mcCMAAy4rAAHchwADLisAAdyPAAMuKwAB3J8AAy4rAAHctwADLisAAdy/AAMuKwAB3M8AAy4rAAHc4wADLicAAdzHAAMuJlkjAAMuJwAByzMAAy4mzQ8AAy4nAAHc5wADLicAAdzzAAMuJwABvXcAAy3zAAG9XwADLmZjGwADLmsAAdefAAMuawAB16MAAy5rAAHXpwADLmsAAderAAMuawAB168AAy5rAAHXswADLmsAAde3AAMuawAB17sAAy5rAAHXvwADLmpwIwADLpMAAdfDAAMukwAB18cAAy5mYyMAAy6fAAHXywADLmZjHwADLqcAAdfLAAMuZmMrAAMurAMAAy3zAAHXzwADLrZjEwADLrp0qwADLrZjKwADLsADAAMt8wAByysAAy7KYxsAAy7PAAHX2wADLs8AAdffAAMuzwAB1+MAAy7PAAHX5wADLs8AAdfrAAMuzwAB1+8AAy7PAAHX8wADLspjEwADLu8AAdf3AAMuymMrAAMu9AMAAy3zAAHX/wADLv5jKwADLwADAAMt8wAB2AMAAy8KYxsAAy8OcCMAAy8TAAHYBwADLwpjHwADLxmHAAMvCmMTAAMvIS8AAy8jAAHYCwADLwpjKwADLywDAAMt8qF3AAMvNmMbAAMvOgL3AAMvNmMrAAMvQAMAAy3zAAG9ewADL0pjGwADL04HlwADL0pjKwADL1QDAAMt8wAB2BMAAy9eYxsAAy9jAAHYFwADL2MAAdgbAAMvYwAB2B8AAy9jAAHYIwADL2MAAdgnAAMvYwAB2CsAAy9jAAHYLwADL2MAAdgzAAMvYwAB2DcAAy9jAAHYOwADL2MAAdg/AAMvYwAB2EMAAy9jAAHYRwADL2MAAdhLAAMvYwAB2E8AAy9ie+cAAy9jAAHYUwADL2MAAdhXAAMvYwAB2FsAAy9jAAHYXwADL2MAAdhjAAMvYwAB2GcAAy9jAAHYawADL2MAAdhvAAMvYwAB2HMAAy9jAAHYdwADL2JyawADL2MAAdh7AAMvYwAB2H8AAy9jAAHYgwADL2MAAdiHAAMvYwAB2IsAAy9jAAHYjwADL2MAAdiTAAMvYwAB2JcAAy9jAAHYmwADL2MAAdifAAMvYwAB2KMAAy9jAAHYpwADL2MAAdirAAMvYwAB2K8AAy9jAAHYswADL2MAAdi3AAMvYwAB2LsAAy9jAAHYvwADL2MAAdjDAAMvYwAB2McAAy9jAAHYywADL2MAAdjPAAMvYwAB2NMAAy9jAAHY1wADL2MAAdjbAAMvYwAB2N8AAy9jAAHY4wADL2MAAdjnAAMvYwAB2OsAAy9jAAHY7wADL2MAAdjzAAMvYwAB2PcAAy9jAAHY+wADL2MAAdj/AAMvYwAB2QMAAy9jAAHZBwADL2J1YwADL2MAAdkPAAMvYwAB2RcAAy9jAAHZHwADL2MAAdknAAMvYwAB2S8AAy9jAAHZNwADL2MAAdk/AAMvYwAB2UcAAy9jAAHZTwADL2MAAdlXAAMvYwAB2V8AAy9jAAHZZwADL2MAAdlvAAMvYwAB2XcAAy9jAAHZfwADL2MAAdmHAAMvYwAB2Y8AAy9jAAHZlwADL2MAAdmfAAMvYwAB2acAAy9jAAHZrwADL2MAAdm3AAMvYwAB2b8AAy9jAAHZxwADL2MAAdnPAAMvYwAB2dcAAy9jAAHZ3wADL2MAAdnnAAMvYwAB2e8AAy9jAAHZ9wADL2MAAdn/AAMvYwAB2gcAAy9jAAHaDwADL2MAAdoXAAMvYwAB2h8AAy9jAAHaJwADL2MAAdovAAMvYwAB2jcAAy9jAAHaPwADL2MAAdpHAAMvYwAB2k8AAy9jAAHaVwADL15jKwADMQwDAAMt8wABvWMAAzEWYxsAAzEacCMAAzEe6HsAAzEWYx8AAzEnAAG+1wADMRZjEwADMS4H6wADMS5ZkwADMRZjKwADMTgDAAMt8wAB2l8AAzFCYxsAAzFGcCMAAzFK6HsAAzFLAAHAkwADMUsAAcRXAAMxSwABxFsAAzFCYxMAAzFechsAAzFfAAG+9wADMV4GswADMV4OOwADMV5wIwADMXMAAcM7AAMxXgfzAAMxXggXAAMxXwABwg8AAzFCYx8AAzGHAAG+swADMUJjKwADMYwDAAMt8wABvWcAAzGWYxsAAzGacCMAAzGe6HsAAzGWYxMAAzGmWZMAAzGmetMAAzGWYysAAzGwAwADLfMAAcsvAAMxumMbAAMxvnAjAAMxwuh7AAMxumMTAAMxyiOPAAMxynrTAAMxylmTAAMxumMrAAMx2AMAAy3zAAHaYwADMeJjHwADMeZwIwADMeroewADMeVzAAMx5YcAAzHmBVcAAzHmDt8AAzHmDHsAAzHmB6sAAzHmAw8AAzHiYxMAAzIOWW8AAzIOWcMAAzIOWZcAAzIODHMAAzIOWa8AAzIMjwADMeJjKwADMigDAAMt8wAB2mcAAzIyYxsAAzI2cCMAAzI66HsAAzIyYxMAAzJBdwADMjJjHwADMkl7AAMyMmMrAAMyUAMAAy3zAAHaawADMlpjGwADMl5wIwADMmLoewADMlpjJwADMmgDAAMyWmMTAAMyclmTAAMyWmMrAAMyenAjAAMyfgLXAAMt8wAB2m8AAzKGYysAAzKIAwADLfMAAdpzAAMykmMrAAMylAMAAzKSYx8AAzKdcwADMp4FVwADMp4O3wADMp4MewADMp4HqwADMp4DDwADMp5i1wADMpJjEwADMr5ZlwADMr5ZpwADMr4P9wADMr4McwADMr5ZiwADMr4HWwADMr5ZmwADMr5ZrwADMr5ZuwADMr1jAAMyvgaXAAMyvlnLAAMyvgKvAAMyvhJXAAMyvlmzAAMyvg1/AAMyvllvAAMyvlm/AAMyvlnDAAMyvlnHAAMyvgK3AAMyvlUnAAMyvVsAAzK+ApcAAzK+EXsAAzK+e+MAAzMmf+8AAzMmf/MAAzMmf/8AAzK+XKsAAzK+XLcAAzK+CRsAAzK+WZMAAzK+GJsAAzK+ArsAAzK+gAMAAzK+cm8AAzK9kwADMr4FYwADMr6AGwADMr6AHwADMr5vjwADMr4NkwADMr6AMwADMr4C7wADMr6ARwADMr5aMwADMr6ASwADMr58OwADMr6ATwADMr6AUwADMr6AWwADMryPAAMykmMjAAMzlgx7AAMzlgerAAMt8wAB2ncAAzOiYx8AAzOmcCMAAzOq6HsAAzOiYxMAAzOxLwADM7IC/wADM7FbAAMzsgKXAAMzsgK7AAMzsoADAAMzsnw7AAMzsoBTAAMzsoBbAAMzshF7AAMzsoBPAAMzshibAAMzslyrAAMzsly3AAMzsoAbAAMzsg2TAAMzsoAfAAMzsm+PAAMzsoAzAAMzomMjAAM0AYcAAzOiYysAAzQIAwADLfMAAdp/AAM0EmMbAAM0FnAjAAM0Guh7AAM0EmMTAAM0IlmTAAM0EmMrAAM0KAMAAy3zAAHagwADNDJjGwADNDZwIwADNDroewADNDrQqwADNDJjEwADNEZwIwADNEsAAdqHAAM0SwAB2osAAzRKwJcAAzRGWZMAAzRFWwADNEYClwADNEYRewADNEZcpwADNEZcswADNEZcqwADNEZctwADNEYQHwADNEZcvwADNEZcwwADNEZcuwADNEYJGwADNEZVJwADNEZcowADNDJjKwADNJQDAAMt8wAB2pcAAzSeYxsAAzSicCMAAzSm6HsAAzSeYxMAAzSuWZMAAzSvAAEOqwADNK4dYwADNK0vAAM0rgL/AAM0rmUrAAM0rgKXAAM0rhF7AAM0rgkbAAM0rg/3AAM0rrJfAAM0rwABDr8AAzSvAAEOswADNK5cqwADNJ5jHwADNOoNowADNOinAAM06YcAAzTqBVcAAzTqDt8AAzTqD1cAAzSeYysAAzUEAwADLfMAAdqjAAM1DmMbAAM1EnAjAAM1Fuh7AAM1DmMTAAM1HlmTAAM1Hn1/AAM1HhibAAM1HVsAAzUfAAGwdwADNR4QnwADNR4RewADNR4ClwADNR5cqwADNR5ctwADNR4JGwADNQ5jKwADNUwDAAMt8wAB2qcAAzVWYx8AAzVZhwADNVZjKwADNWADAAMt8wAB2qsAAzVqYx8AAzVthwADNW1zAAM1bgVXAAM1bgx7AAM1bgerAAM1bgMPAAM1amMTAAM1ilmXAAM1ig/3AAM1igxzAAM1ilmLAAM1igdbAAM1ilmbAAM1ilmvAAM1ilm7AAM1iWMAAzWKBpcAAzWKAq8AAzWKWbMAAzWKDX8AAzWKWW8AAzWKWb8AAzWKWcMAAzWKWccAAzWKArcAAzWKVScAAzVqYysAAzXYAwADLfMAAdqvAAM14mMbAAM15nAjAAM16wABsL8AAzXqkrMAAzXrAAHaswADNeJjHwADNfpwIwADNf8AAdq3AAM1/wABKFMAAzX5hwADNeJjEwADNg5ZlwADNg5ZbwADNg5ZwwADNg4CtwADNeJjKwADNiADAAMt8wAB2sMAAzYqYxsAAzYucCMAAzYzAAGwvwADNjJ0vwADNjJdIwADNjIjgwADNipjHwADNkV7AAM2KmMTAAM2TXcAAzYqYysAAzZUAwADLfMAAdrHAAM2XmMbAAM2YnAjAAM2ZwABsL8AAzZnAAHaywADNl5jJwADNnADAAM2XmMfAAM2eXMAAzZ5hwADNnoFVwADNnoMewADNnoHqwADNnoDDwADNl5jEwADNpZZlwADNl5jKwADNp5wIwADNqIC1wADLfMAAdrPAAM2qmMrAAM2rAMAAy3zAAHa0wADNrZjGwADNrpwIwADNr4jgwADNr8AAcO3AAM2vwAB2ssAAza2YxMAAzbNdwADNrZjHwADNtV7AAM2tmMrAAM23AMAAy3zAAHa1wADNuZjGwADNupwIwADNu7oewADNu8AAdrLAAM25mMfAAM2+YcAAzbmYxMAAzcCWZcAAzbmYysAAzcIAwADLfMAAdrbAAM3EmMbAAM3FnAjAAM3GwABsL8AAzcbAAHaywADNxJjHwADNyVzAAM3EmMTAAM3LgKvAAM3EmMrAAM3NAMAAy3zAAHa3wADNz5jGwADN0JwIwADN0cAAcO3AAM3RwAB2ssAAzc+YxMAAzdRdwADNz5jHwADN1l7AAM3PmMrAAM3YAMAAy3zAAHa4wADN2pjGwADN25wIwADN3MAAbC/AAM3cwAB2ssAAzdqYx8AAzd9cwADN2pjKwADN4QDAAMt8wAB2ucAAzeOYxsAAzeScCMAAzeXAAHDtwADN5cAAdrLAAM3lwAB2usAAzeWI4MAAzeOYx8AAzepewADN45jEwADN7F3AAM3jmMrAAM3uAMAAy3zAAHa7wADN8JjGwADN8ZwIwADN8sAAbC/AAM3ywAB2vMAAzfCYycAAzfUAwADN8JjHwADN91zAAM3wmMrAAM35nAjAAM36gLXAAMt8wAB2vsAAzfyYx8AAzf1hwADN/JjKwADN/wDAAMt8wAB2wMAAzgGYxsAAzgKcCMAAzgPAAHDtwADOA5dHwADOAZjEwADOBl3AAM4BmMfAAM4IXsAAzgGYysAAzgoAwADLfMAAdsHAAM4MmMbAAM4NnAjAAM4OwABsL8AAzg7AAHaywADODJjHwADOEVzAAM4MmMrAAM4TAMAAy3zAAHbCwADOFZjGwADOFpwIwADOF8AAcO3AAM4XwAB2ssAAzhfAAHbDwADOFZjEwADOG13AAM4VmMfAAM4dXsAAzhWYysAAzh8AwADLfMAAdsTAAM4hmMbAAM4inAjAAM4jwABsL8AAziPAAHbFwADOIZjJwADOJgDAAM4hmMTAAM4ollvAAM4hmMfAAM4qXMAAziGYysAAziycCMAAzi2AtcAAy3zAAHbGwADOL5jJwADOMADAAM4vmMfAAM4yYcAAzi+YxMAAzjSWW8AAzi+YysAAzjacCMAAzjeAtcAAy3zAAHbHwADOOZjGwADOOpwIwADOO8AAcO3AAM47wAB2xcAAzjmYxMAAzj5dwADOOZjHwADOQF7AAM45mMrAAM5CAMAAy3zAAHbIwADORJjGwADORZwIwADORsAAbC/AAM5GwAB2ssAAzkSYx8AAzklcwADORJjKwADOSwDAAMt8wAB2ycAAzk2YxsAAzk6cCMAAzk/AAHDtwADOT8AAdrLAAM5PwAB2ysAAzk2YxMAAzlNdwADOTZjHwADOVV7AAM5NmMrAAM5XAMAAy3zAAHbLwADOWZjHwADOWlzAAM5agVXAAM5aYcAAzlqDHsAAzlqB6sAAzlqAw8AAzlmYxMAAzmGD/cAAzmGWZcAAzmGDHMAAzmGWYsAAzmGB1sAAzmGWZsAAzmGWa8AAzmGWbsAAzmFYwADOYYGlwADOYYCrwADOYZZswADOYYNfwADOYZZbwADOYZZvwADOYZZwwADOYZZxwADOYYCtwADOYZVJwADOWZjKwADOdQDAAMt8wABvWsAAzneYxMAAznhdwADOd5jHwADOel7AAM53mMrAAM58AMAAy3zAAHbMwADOfpjGwADOf5wIwADOgMAAclLAAM6AwAB0KMAAzn6YycAAzoPAAHbNwADOfpjHwADOhVzAAM6FYcAAzoWBVcAAzoWDt8AAzoWDHsAAzoWB6sAAzn6YxMAAzoyDHMAAzn6YysAAzo4AwADLfMAAds7AAM6QmMTAAM6RllvAAM6RlnDAAM6RlmXAAM6QmMfAAM6Vgx7AAM6VgerAAM6QmMrAAM6YAMAAy3zAAHbPwADOmpjGwADOm5wIwADOnMAAZQPAAM6cwAB20MAAzpqYxMAAzp9dwADOmpjHwADOoV7AAM6amMrAAM6jAMAAy3zAAHbRwADOpZjGwADOppwIwADOp7oewADOpZjHwADOqVzAAM6lmMrAAM6rAMAAy3zAAHbSwADOrZjGwADOrpwIwADOr7oewADOrZjEwADOsV3AAM6tmMfAAM6zXsAAzq2YysAAzrUAwADLfMAAb1vAAM63mMTAAM64wAB208AAzrjAAHbUwADOuMAAdtXAAM63mMrAAM68AMAAy3zAAHbWwADOvpjIwADOv2HAAM6+mMTAAM7BVsAAzsGfDsAAzsGgFMAAzsGApcAAzsGEXsAAzsGXKsAAzsGXLcAAzsGCRsAAzsGgE8AAzsGGJsAAzsGgB8AAzsGgDMAAzr6YysAAzs4AwADLfMAAdtrAAM7QmMTAAM7RgL/AAM7RoBbAAM7RVsAAztGfDsAAztGgFMAAztGApcAAztGEXsAAztGXKsAAztGXLcAAztGArsAAztGgAMAAztGCRsAAztGgE8AAztGGJsAAztGDZMAAztGgB8AAztGgDMAAztGb48AAztCYyMAAzuRhwADO5IMewADO5IHqwADO0JjKwADO6ADAAMt8wAB24MAAzuqYysAAzusAwADO6pjIwADO7WHAAM7qmMTAAM7vVsAAzu+fDsAAzu+gFMAAzu+ApcAAzu+EXsAAzu+XKsAAzu+XLcAAzu+CRsAAzu+gE8AAzu+GJsAAzu+gB8AAzu+gDMAAy3zAAHbhwADO/JjKwADO/QDAAM78mMTAAM7/gL/AAM7/oBbAAM7/VsAAzv+fDsAAzv+gFMAAzv+ApcAAzv+EXsAAzv+XKsAAzv+XLcAAzv+ArsAAzv+gAMAAzv+CRsAAzv+gE8AAzv+GJsAAzv+DZMAAzv+gB8AAzv+gDMAAzv+b48AAzvyYyMAAzxJhwADPEoMewADPEoHqwADLfMAAduLAAM8WmMbAAM8XnAjAAM8YwAB248AAzxaYx8AAzxphwADPFpjEwADPHJZlwADPFpjKwADPHgDAAMt8wAB25MAAzyCYxsAAzyGcCMAAzyLAAEucwADPIJjEwADPJEvAAM8kwABDqsAAzySHWMAAzySD/cAAzyCYx8AAzylhwADPKSnAAM8pg2jAAM8pgVXAAM8pg7fAAM8gmMrAAM8vAMAAy3zAAHblwADPMZjGwADPMpwIwADPM7oewADPMZjHwADPNWHAAM8xmMTAAM83lmXAAM8xmMrAAM85AMAAy3zAAHbmwADPO5jEwADPPFbAAM88wABbXcAAzzxhwADPPIRewADPO5jKwADPQQDAAMt8wAB268AAz0OYxMAAz0RWwADPRGHAAM9EhF7AAM9DmMrAAM9IAMAAy3zAAHbvwADPSpjGwADPS5wIwADPTMAAdvDAAM9KmMTAAM9OgK7AAM9OwAB28cAAz06cCMAAz1HAAHbzwADPUcAAdvTAAM9RwAB29sAAz0qYysAAz1UAwADLfJwEwADPV5jGwADPWJwIwADPWSjAAM9YwAB3CcAAz1jAAHcLwADPWMAAYibAAM9YwAB3DsAAz1jAAHcQwADPWMAAdxTAAM9XmMTAAM9hSMAAz2EjwADPYZlJwADPYcAAdxfAAM9hwAB3GsAAz2HAAHcbwADPV5jHwADPaIPGwADPV5jKwADPagDAAM9qwAB3FcAAz2qzYcAAy3zAAHJRwADPbpjGwADPb4MewADPb4HqwADPb2HAAM9umMfAAM9zgVXAAM9zXMAAz26YxMAAz3ZWwADPdsAAbB3AAM92hF7AAM9umMrAAM96AMAAy3zAAHJawADPfJjGwADPfZwIwADPfsAAb7vAAM9+wABvvMAAz36XRsAAz3yYxMAAz4LAAHJbwADPfJjKwADPhADAAMt8wAByWMAAz4aYxsAAz4dewADPh5wIwADPiZdGwADPhpjEwADPi13AAM+GmMrAAM+NAADAAJLPwADPj5jFwADPkMAAd0LAAM+QwAB3Q8AAz5DAAHdEwADPkMAAd0XAAM+PmMbAAM+VwACSz8AAz5bAAHfpwADPj5jEwADPmMAAks/AAM+ZwAB36sAAz5nAAHfrwADPmcAAd+zAAM+ZwAB37cAAz5nAAHfuwADPmcAAd+/AAM+ZwAB38MAAz5nAAHfzwADPj8AAd0bAAM+imMnAAM+jAMAAz6KYxMAAz6VIwADPpcAAks/AAM+nvObAAM+nwAB3SMAAz6KYx8AAz6qDxsAAz4/AAHdLwADPrJjGwADPrcAAks/AAM+uwAB3TMAAz67AAG/awADPrJjHwADPscAAdTHAAM+smMTAAM+zgfrAAM+zgozAAM+smMrAAM+2AMAAz7bAAHdNwADPj8AAd07AAM+5mMbAAM+6wACSz8AAz7vAAHdPwADPuZjJwADPvQDAAM+5mMTAAM+/gozAAM+/SMAAz7/AAJLPwADPwsAAd1PAAM/CwAB3UsAAz8LAAHdWwADPwsAAd1fAAM/CwAB3UcAAz8LAAHdZwADPuZjHwADPycAAdTHAAM/Jg8bAAM+5mMjAAM/MVcAAz4/AAHdbwADPzpjJwADPz8AAks/AAM/QwAB3XMAAz86YxMAAz9Kh1sAAz9JIwADP0sAAks/AAM/VwAB3U8AAz9XAAHdIwADP1cAAd13AAM/OmMfAAM/Zg8bAAM+PwAB3YcAAz9uYycAAz9wAwADP25jEwADP3sAAd2PAAM/ewACSz8AAz+DAAHdkwADPj8AAd2bAAM/imMbAAM/jwACSz8AAz+SXRsAAz+TAAHdnwADP4pjHwADP54FVwADP54MewADP4pjEwADP6pm2wADP6lbAAM/qn1/AAM/qhF7AAM/qwACSz8AAz+/AAHHNwADP78AAbAXAAM/vwABsBsAAz+/AAHdrwADP75qWwADP78AAd27AAM/vwAB3b8AAz++nXMAAz+/AAHdwwADP78AAd3HAAM/imMrAAM/6AMAAz4/AAHdywADP/JjGwADP/cAAks/AAM/+wAB3c8AAz/7AAHd0wADP/sAAd3XAAM/+wAB3dsAAz/7AAHd3wADP/sAAd3jAAM/+wAB3ecAAz/7AAHd6wADP/sAAd3vAAM/+wAB3fMAAz/7AAHd9wADP/sAAd37AAM/+monAAM/+wAB3f8AAz/7AAHeAwADP/sAAd4HAAM/+wAB3acAAz/7AAHJhwADP/sAAd4LAAM/8mMTAANASwACSz8AA0BPAAHeDwADQE8AAcUXAANATwAB3asAA0BPAAHeIwADQE8AAd4bAANATwAB3icAA0BPAAHeKwADQE8AAd4zAANATwAB3jcAA0BPAAHePwADQE8AAd1fAANATwAB3k8AA0BPAAHeUwADQE8AAd5XAANATwAB3lsAA0BPAAG+zwADQEpyGwADP/JjJwADQJQDAANAlwABwcMAAz/yYx8AA0CjAAJLPwADQKcAAd4fAANAoiMrAANAowABxRMAAz/yYysAA0C3AAJLPwADQLoZrwADPj8AAd5fAANAwmMbAANAxIsAA0DCYxMAA0DMjwADQMJjKwADQNQDAAM+PDMAA0DeYxsAA0DjAAJLPwADQOcAAd5nAANA5wAB3msAA0DnAAHebwADQOcAAd5zAANA5wAB3ncAA0DnAAHeewADQOcAAd5/AANA5wAB3oMAA0DnAAHehwADQOcAAd6LAANA5wAB3o8AA0DjAAHA7wADQOMAAd6TAANA4wAB1NcAA0DjAAHelwADQOMAAd6bAANA3mMTAANBKwACSz8AA0EvAAHenwADQS8AAd6jAANBLwAB3rsAA0EvAAHe0wADQS8AAd7bAANBLwAB3uMAA0EvAAHe6wADQS8AAd7zAANBLwAB3vsAA0EvAAHe/wADQS8AAd9TAANBKwAB3xsAA0ErAAHfIwADQSsAAd8rAANBKgfzAANBKggXAANBKwAB31cAA0ErAAHfXwADQSsAAd9jAANBKwABghMAA0ErAAEm0wADQSsAAd9rAANBKwAB328AA0DeYx8AA0GOkC8AA0GNewADQY3nAANBjeMAA0GOIvcAA0DeYysAA0GkAwADPj8AAdPfAANBrmMTAANBsodbAANBsSMAA0GuYx8AA0G+DxsAA0GuYysAA0HEAwADPj8AAd9/AANBzmMnAANB0AMAA0HTAAHdNwADQc5jEwADQd4H6wADQd4KMwADQc5jHwADQesAAdTHAAM+PwAB0+MAA0HyYycAA0H0AwADQfJjIwADQf1XAANB8mMTAANCBgozAANB8mMfAANCDwAB1McAAz4/AAHfiwADQhZjGwADQhsAAks/AANCHwAB348AA0IaGVMAA0IWYxMAA0IojwADQhZjHwADQjJv4wADQjcAAcUnAANCFmMjAANCPm/jAANCQwABxScAA0IWYysAA0JIAwADPj8AAd+TAANCUmMnAANCVwAB35sAA0JSYxMAA0JfAAHdjwADPj8AAd+jAANCZmMnAANCaAADAAJLQwADQnJjGwADQnYNTwADQncAAeC7AANCdwAB4MMAA0J3AAHgywADQncAAeDTAANCdwAB4NsAA0J3AAHg4wADQncAAeDrAANCcmMTAANCmwACS0MAA0KfAAHg8wADQp8AAeD7AANCnwAB4QMAA0KfAAHhBwADQp8AAeEPAANCnwAB4RcAA0KfAAHhHwADQp8AAeEnAANCnwAB4S8AA0KfAAHhNwADQp8AAeE/AANCnwAB4UcAA0KfAAF/+wADQp8AAeF/AANCmnODAANCmwABJh8AA0KbAAHhUwADQpsAAeFbAANCmwAB4V8AA0KbAAHhZwADQpsAAeFrAANCmwAB4W8AA0KbAAHhcwADQpsAAeF3AANCmwAB4XsAA0Ka9lsAA0KaWpMAA0JzAAHf5wADQw5jGwADQxMAAktDAANDFwABkMMAA0MXAAHf6wADQxcAAd/vAANDFwAB3/MAA0MXAAHf9wADQxcAAd/7AANDFwAB4AMAA0MOYxMAA0M3AAJLQwADQzsAAeALAANDOwAB4CMAA0M7AAHgKwADQzsAAeAzAANDNoAPAANDNwAB4BsAA0M3AAHgHwADQw5jKwADQ1sAAktDAANDXwAB4AcAA0JzAAHgNwADQ2ZjGwADQ2sAAktDAANDbwAB3/MAA0NvAAHf9wADQ2ZjEwADQ3sAAktDAANDfwAB4DsAA0N6gA8AA0N7AAHgGwADQ3sAAeAfAANDZmMrAANDkAMAA0JzAAHgRwADQ5pjEwADQ54cuwADQ54cvwADQ54c1wADQ58AAeBLAANDmmMrAANDsAMAA0JzAAHgTwADQ7pjGwADQ74OAwADQ77yvwADQ7pjEwADQ8iPAANDySMAA0PJkwADQ8oGNwADQ8oONwADQ8sAAeBbAANDywAB4F8AA0O6Yx8AA0PqDxsAA0PrAAEjxwADQ7pjKwADQ/QDAANCcwABpZcAA0P+YycAA0QAAwADRAMAAeBjAAND/mMTAANEDoAPAANEDwAB4BsAA0QPAAHgHwADQnMAAeBnAANEHmMfAANEIhcXAANEIqGbAANEIgbbAANEIwAB4GsAA0QiFx8AA0QjAAHgbwADRCIPGwADRCMAAeCTAANEIwAB4JcAA0QjAAHgmwADRCMAAeCfAANEHmMTAANEUI8AA0RRIwADRFJcvwADRFLZLwADRFMAAeCDAANEUwAB4IcAA0RTAAHgjwADRB5jKwADRHADAANCcwAB4KMAA0R6YxsAA0R+FxcAA0R+oZsAA0R+BtsAA0R/AAHgawADRHpjJwADRJMAAeCnAANEemMrAANEmAMAA0JzAAHgqwADRKJjGwADRKYXFwADRKahmwADRKcAAktDAANEswAB4K8AA0SzAAHgswADRKJjJwADRL8AAeCnAANEomMfAANExgbbAANExwAB4GsAA0SiYyMAA0TSBtsAA0TTAAHgawADRKJjKwADRNwAAnHbAANE5mMbAANE6nHbAANE7wAB5Y8AA0TmYxMAA0T2cdsAA0T7AAHlkwADRPsAAasbAANE+wAB5ZcAA0T7AAHlmwADRPrelwADRPsAAaGDAANE+wAB5a8AA0T7AAHltwADRPcAAeTbAANE9wAB5N8AA0T3AAHk+wADRPcAAeUDAANE5wAB4YcAA0UuYxsAA0UycdsAA0U3AAHhiwADRS5jEwADRTyPAANFLmMrAANFRAMAA0TnAAHhjwADRU5jGwADRVJ6lwADRVMAARbXAANFUnHbAANFXiLTAANFXwAB4ZMAA0VOYx8AA0VqG6sAA0VqxWsAA0VOYxMAA0V2cdsAA0V7AAHhlwADRXsAAeGfAANFdI8AA0VOYysAA0WIAwADROcAAeGrAANFkmMbAANFlgfvAANFlhvrAANFlt5vAANFkmMTAANFpI8AA0WSYysAA0WucdsAA0WyAtcAA0TnAAHhrwADRbpjKwADRbwDAANE5wAB4bMAA0XGYxsAA0XKkC8AA0XLAAHhtwADRcZjHwADRdcAAeG7AANFxmMTAANF3I8AA0XfAAHhwwADRd5x2wADResAAeHLAANFxmMrAANF8nHbAANF9gLXAANE5wAB4dMAA0X+YxsAA0YCpTsAA0YDAAHh1wADRgIVCwADRgIQewADRgIeSwADRgJx2wADRhogVwADRf5jHwADRiISTwADRiKH8wADRiJ2rwADRiIeRwADRiMAAeHbAANGIs8TAANGItL7AANGIhCTAANGIwAB4d8AA0YiEH8AA0YiFRMAA0YiGbcAA0YjAAGn7wADRiKlrwADRiIVJwADRiJq7wADRiIRgwADRiIbswADRiINKwADRf5jKwADRnADAANE5wAB4eMAA0Z6YxsAA0Z+pTsAA0Z+cdsAA0aGIFcAA0Z6Yx8AA0aPAAHh1wADRo8AAafvAANGjgpTAANGjoXHAANGjpAXAANGjhB7AANGjh5LAANGjhCLAANGjhCDAANGjhm3AANGjwAB4ecAA0aODKsAA0aOEYMAA0aOG7MAA0Z6YysAA0bIAwADROcAAeHrAANG0mMbAANG1nHbAANG2wAB4e8AA0bSYxMAA0bicdsAA0bnAAHh8wADRucAAeH7AANG5wAB4f8AA0bi77cAA0bjAAE2KwADRuMAAeILAANG4rzLAANG0mMrAANHBnHbAANHCgLXAANE5wAB4hcAA0cSYxsAA0cWcdsAA0caSXcAA0cSYx8AA0ciClMAA0cjAAHiGwADRyMAAeH3AANHIg8bAANHEmMTAANHNI8AA0c1IwADRzcAATYrAANHNwAB4gsAA0c277cAA0c2cdsAA0dPAAHh8wADR08AAeH7AANHTwAB4f8AA0dPAAHiLwADRxJjKwADR2Jx2wADR2YC1wADROcAAeI3AANHbmMbAANHcnHbAANHdwAB4jsAA0duYx8AA0d+CbsAA0duYxMAA0eGvncAA0eEjwADR4Zx2wADR5MAAeJDAANHbmMrAANHmnHbAANHngLXAANE5wAB4ksAA0emYx8AA0eqcdsAA0evAAHiTwADR6ZjKwADR7QDAANE5wAB4lMAA0e+YxsAA0fCcdsAA0fHAAHiTwADR8cAAeJXAANHxwAB4lsAA0fHAAHiXwADR8cAAeJjAANHxwAB4mcAA0fHAAHiawADR8cAAeJvAANHxwAB4nMAA0fHAAHidwADR8cAAaiDAANHxwAB4nsAA0fHAAHifwADR8cAAeKDAANHxqcTAANHxwABK/sAA0fCEH8AA0fCE6sAA0e+Yx8AA0gTAAHiiwADSBMAAeKHAANIEwAB4dcAA0gTAAGn7wADSBKlOwADSBIZtwADSBIeSwADSBIRgwADSBJx2wADSDcAAeKXAANINwAB4pMAA0g3AAHiywADSBITzwADSBMAAeKfAANIEhPXAANIEwAB4q8AA0gTAAHiswADSBK7VwADSBKKtwADSBIUswADSBMAAeKbAANIEwAB4s8AA0gSG7MAA0gSDxsAA0e+YxMAA0h0jwADSHcAAVTfAANIdSMAA0h2bGsAA0h3AAHi2wADSHZtGwADSHZx2wADSJMAAeLnAANIkwAB4u8AA0iTAAHi9wADSJMAAeL/AANIkwAB4wcAA0iTAAHjDwADSJMAAeMXAANIkwAB4rsAA0iTAAHivwADSJMAAeHzAANIkwAB4fsAA0iTAAHh/wADSJMAAeMzAANIkwAB4zsAA0iTAAHjQwADR75jKwADSNJx2wADSNYC1wADROcAAeNLAANI3mMbAANI4nHbAANI5wAB408AA0jnAAHiVwADSOcAAeNTAANI5wABT8cAA0jnAAHjVwADSN5jHwADSP5x2wADSQMAAeLLAANI/wAB4dcAA0j+0vcAA0j+FScAA0j+au8AA0j/AAHimwADSP8AAeLPAANI/oq3AANI/hSzAANI/huzAANI/hGDAANI3mMTAANJMI8AA0kycdsAA0k7AAHjWwADSTsAAeNvAANJOwAB418AA0jeYysAA0lKcdsAA0lOAtcAA0TnAAHjewADSVZjGwADSVpx2wADSV8AAeHvAANJXwAB4lcAA0lfAAHibwADSVZjHwADSW8AAeHXAANJbwABp+8AA0luGbcAA0luEYMAA0luG7MAA0luDxsAA0lWYxMAA0mJIwADSVZjKwADSZJx2wADSZYC1wADROcAAeN/AANJnmMbAANJonHbAANJpwAB4lsAA0mnAAHjgwADSZ5jHwADSbKlOwADSbIQewADSbIeSwADSbJrAwADSbMAAeKLAANJswAB4ocAA0mycdsAA0nPAAHiTwADSbKKtwADSbIUswADSbMAAeKbAANJswAB4s8AA0myDxsAA0meYxMAA0nojwADSekjAANJ6mxrAANJ6wAB4tsAA0nqcdsAA0n/AAHjjwADSf8AAeOXAANJnmMrAANKCnHbAANKDgLXAANE5wAB458AA0oWYxsAA0oacdsAA0ofAAHiTwADSh8AAeJfAANKHwAB4mcAA0ofAAHiWwADSh8AAeOjAANKHqcTAANKHwABK/sAA0oWYx8AA0o+HksAA0o+pTsAA0o/AAHjpwADSj8AAeKLAANKPwAB4ocAA0o/AAHimwADSj8AAeLPAANKPoq3AANKPhSzAANKFmMTAANKZI8AA0pmbGsAA0pnAAHi2wADSmZx2wADSncAAeOvAANKdwAB47cAA0oWYysAA0qAAwADROcAAeO/AANKimMbAANKjwAB4dcAA0qOArMAA0qOcdsAA0qbAAHigwADSpsAAePDAANKimMfAANKpwABp+8AA0qmpTsAA0qmGbcAA0qmHksAA0qmcdsAA0q7AAHiawADSqa7VwADSqYRgwADSqYbswADSqYPGwADSqcAAePLAANKimMTAANK1SMAA0rUjwADStZx2wADSuMAAePPAANK4wAB4fMAA0rjAAHh+wADSuMAAeH/AANK4wAB4rsAA0qKYysAA0r6cdsAA0r+AtcAA0TnAAHj5wADSwZjGwADSwqoDwADSwpx2wADSxMAAePrAANLChKrAANLCgynAANLChLXAANLChLbAANLChuzAANLBmMfAANLLhLTAANLLhLPAANLLhGDAANLBmMTAANLPrp3AANLPnHbAANLRwAB5AMAA0sGYysAA0tOcdsAA0tSAtcAA0TnAAHkCwADS1pjGwADS18AAeQPAANLXhL3AANLWmMfAANLahMLAANLWmMrAANLcnHbAANLdgLXAANE5wAB5BcAA0t+YxsAA0uCcdsAA0uHAAHiawADS4cAAeQbAANLhwAB5EcAA0uHAAHiWwADS4cAAU/HAANLhwAB41cAA0uHAAHkSwADS4IQewADS4MAAeQfAANLgwAB5CMAA0uDAAHkJwADS4MAAeQrAANLgwAB5C8AA0uDAAHkMwADS4MAAeQ3AANLgwAB5DsAA0uDAAHkPwADS4MAAeRDAANLfmMfAANL0hB/AANL0hULAANL0hUTAANL0h5HAANL0wAB4dsAA0vSzxMAA0vTAAHh3wADS9LS+wADS9IQkwADS9ISTwADS9J2rwADS9KlOwADS9IZtwADS9IeSwADS9IVJwADS9Jq7wADS9KH8wADS9KlrwADS9INKwADS35jEwADTCJx2wADTCcAAeLHAANMJwAB5GsAA0wnAAHkcwADTCcAAeRPAANMJwAB5H8AA0wgjwADS35jKwADTEJx2wADTEYC1wADROcAAeSHAANMTmMbAANMUqU7AANMUhB7AANMUhCDAANMUhCLAANMUnHbAANMZkl3AANMTmMfAANMbh5LAANMbnHbAANMdwAB4msAA0xuClMAA0xOYxMAA0yAjwADTIJx2wADTIsAAeSTAANMTmMrAANMknHbAANMlgLXAANE5wAB5JsAA0yeYxsAA0yicdsAA0ynAAHKMwADTKcAAeSfAANMpwAB5KMAA0ynAAG82wADTKZJdwADTKKFxwADTKKQFwADTJ5jHwADTMYMqwADTMcAAeHnAANMxhGDAANMxhuzAANMxgpTAANMnmMTAANM3I8AA0zecdsAA0znAAHkrwADTJ5jKwADTO5x2wADTPIC1wADROcAAeS3AANM+mMbAANM/wAB4dcAA0z6Yx8AA00GGbcAA00GHksAA00GpTsAA00GEYMAA00GG7MAA00HAAHiiwADTQcAAeKHAANNBoq3AANNBhSzAANNBwAB4psAA00HAAHizwADTQcAAafvAANNBg8bAANM+mMTAANNPSMAA008jwADTT5sawADTT8AAeLbAANM+mMrAANNUnHbAANNVgLXAANE5wAB5MMAA01eYxsAA01icdsAA01nAAHkxwADTWcAAeTLAANNZwAB5NMAA01eYxMAA013AAHk2wADTXcAAeTfAANNdnHbAANNgwAB5OMAA02DAAHk6wADTYMAAeTzAANNgwAB5QsAA013AAHk+wADTXcAAeUDAANNXmMrAANNnAMAA0TnAAHlEwADTaZjJwADTapx2wADTa8AAd1zAANNpmMTAANNtSMAA0TnAAHlGwADTb5jEwADTcJx2wADTccAAeUfAANNwwAB5ScAA03CZScAA03DAAHlMwADTb5jHwADTdobqwADTdrFawADTdp6lwADTdsAARbXAANNvmMrAANN7AMAA0TnAAHlNwADTfZjKwADTfgDAANE5wAB5TsAA04CYx8AA04GkC8AA04HAAHhuwADTgcAAeG3AANOAmMTAANOFSMAA04XAAHhwwADTgJjKwADTiADAANE5wAB5T8AA04qYx8AA04vAAHh1wADTi8AAafvAANOLqU7AANOLhm3AANOLh5LAANOLhGDAANOLhuzAANOKmMrAANOTAMAA0TnAAHlQwADTlZjEwADTlrvtwADTlsAATYrAANOWwAB4gsAA05avMsAA05WYysAA05sAwADROcAAeVHAANOdmMfAANOegpTAANOewAB4hsAA057AAHh9wADTnZjEwADTokjAANOdmMrAANOkAMAA0TnAAHlSwADTppjHwADTp4JuwADTppjEwADTqa+dwADTppjKwADTqwDAANE5wAB5U8AA062Yx8AA066ArMAA066u1cAA067AAHjywADTrZjEwADTskjAANOtmMrAANO0AMAA0TnAAHlUwADTtpjHwADTt4S1wADTt4S0wADTt4S2wADTt6oDwADTt4SzwADTt4MpwADTt4SqwADTt4RgwADTt4bswADTtpjEwADTwa6dwADTtpjKwADTwwDAANE5wAB5VcAA08WYx8AA08bAAHkDwADTxoS9wADTxoTCwADTxZjKwADTygDAANE5wAB5NcAA08yYx8AA083AAHiiwADTzcAAeKHAANPNoq3AANPNhSzAANPNwAB4psAA083AAHizwADTzJjEwADT1JsawADT1MAAeLbAANPMmMrAANPXAMAA0TnAAHkzwADT2ZjHwADT2oTzwADT2sAAeKfAANPahB/AANPahOrAANPartXAANPawAB4rMAA09rAAHirwADT2oT1wADT2ZjEwADT48AAVTfAANPjSMAA0+ObRsAA09mYysAA0+cAwADROcAAeVbAANPpmMfAANPqhUnAANPqmrvAANPqtL3AANPpmMrAANPuAMAA0TnAAHlXwADT8JjHwADT8ZrAwADT8YQewADT8JjEwADT9EjAANPwmMrAANP2AMAA0TnAAHlYwADT+JjHwADT+cAAeOnAANP4mMrAANP7AMAA0TnAAHlZwADT/ZjHwADT/oVJwADT/oNKwADT/pq7wADT/oQewADT/oQfwADT/oSTwADT/qH8wADT/p2rwADT/oVCwADT/oVEwADT/oeRwADT/qlrwADT/sAAeHbAANP+s8TAANP+wAB4d8AA0/60vsAA0/2YxMAA1A9IwADT/ZjKwADUEQDAANE5wAB5WsAA1BOYx8AA1BSClMAA1BSEHsAA1BSEIMAA1BSEIsAA1BOYxMAA1BlIwADUE5jKwADUGwDAANE5wAB5W8AA1B2Yx8AA1B6ClMAA1B6hccAA1B6kBcAA1B7AAHh5wADUHoMqwADUHZjKwADUJADAANE5t5nAANQmmMfAANQngfvAANQnhvrAANQnt5vAANQmmMrAANQrAMAA0TnAAEfOwADULZjGwADULoGywADULsAAeVzAANQuwAB5XcAA1C2YysAA1DIAwADROcAAeV7AANQ0mMbAANQ1wAB5YMAA1DWHoMAA1DXAAHlhwADUNcAAeWLAANQ0mMrAANQ6AADAAJLRAMAAktLAANQ9mMbAANQ+wACS0sAA1D/AAHw7wADUP8AAfDzAANQ/wAB8PcAA1D/AAHw+wADUPZjEwADURMAAktLAANRFwAB8P8AA1EXAAHxAwADURcAAfEPAANRFwAB8RMAA1EXAAHxFwADURcAAfEbAANRFwAB8R8AA1EXAAHxIwADURcAAfEnAANRFwAB8SsAA1EXAAHxLwADURcAAfEzAANRFwAB8TcAA1D3AAHlywADUU5jHwADUVGHAANRUwABvQsAA1FSp98AA1FSCj8AA1FSBVcAA1FSDt8AA1FOYxMAA1FtYwADUW4JGwADUW4RewADUW6AHwADUW6AMwADUWyPAANRbwACS0sAA1GLAAG9BwADUU5jIwADUZGHAANRTmMrAANRmAMAA1D3AAHl5wADUaJjHwADUacAAb0LAANRpqffAANRpgo/AANRpmLXAANRpXMAA1GmDHsAA1GmB6sAA1GmAw8AA1GiYxMAA1HKWcsAA1HKWacAA1HKWZMAA1HKgEcAA1HKgEsAA1HJkwADUcoMcwADUcqAAwADUcoGlwADUcpZwwADUcpZxwADUcpZbwADUcpZvwADUcpybwADUcqAGwADUcoCtwADUcpVJwADUcoP9wADUcpZswADUcoNfwADUcoCrwADUcoSVwADUcpZiwADUcoHWwADUcpZmwADUcpZrwADUcpZuwADUcpZlwADUclbAANRygKXAANRynw7AANRyoBTAANRygK7AANRygLvAANRylozAANRyhibAANRyoBPAANRylyrAANRyly3AANRyoBbAANRym+PAANRomMjAANScgx7AANScgerAANQ9wAB5e8AA1J+YxMAA1KDAAJLSwADUocAAeX3AANSgg2TAANSggVjAANQ9wAB5gcAA1KWYx8AA1KbAAG9CwADUpqn3wADUpoKPwADUppi1wADUplzAANSmgx7AANSmgerAANSmgMPAANSlmMTAANSvlnLAANSvlmnAANSvlmTAANSvoBHAANSvoBLAANSvZMAA1K+DHMAA1K+gAMAA1K+BpcAA1K+WcMAA1K+WccAA1K+WW8AA1K+Wb8AA1K+cm8AA1K+gBsAA1K+ArcAA1K+VScAA1K+D/cAA1K+WbMAA1K+DX8AA1K+Aq8AA1K+ElcAA1K+WYsAA1K+B1sAA1K+WZsAA1K+Wa8AA1K+WbsAA1K+WZcAA1K9WwADUr4ClwADUr58OwADUr6AUwADUr4CuwADUr4C7wADUr5aMwADUr4YmwADUr6ATwADUr5cqwADUr5ctwADUr6AWwADUr5vjwADUpZjIwADU2YMewADU2YHqwADUPcAAeYLAANTcmMTAANTdwACS0sAA1N7AAHl9wADU3YNkwADU3YFYwADUPcAAeYPAANTimMfAANTjwABvQsAA1OOp98AA1OOCj8AA1OOYtcAA1ONcwADU44MewADU44HqwADU44DDwADU4pjEwADU7MAAktLAANTtwAB5fcAA1OyWcsAA1OyWacAA1OyWZMAA1OygEcAA1OygEsAA1OxkwADU7IMcwADU7KAAwADU7INkwADU7IGlwADU7JZwwADU7JZxwADU7JZbwADU7JZvwADU7JybwADU7KAGwADU7ICtwADU7JVJwADU7IP9wADU7JZswADU7INfwADU7ICrwADU7ISVwADU7JZiwADU7IHWwADU7JZmwADU7JZrwADU7JZuwADU7JZlwADU7FbAANTsgKXAANTsnw7AANTsoBTAANTsgK7AANTsgLvAANTslozAANTshibAANTsoBPAANTslyrAANTsly3AANTsgVjAANTsoBbAANTsm+PAANTimMjAANUagx7AANUagerAANTimMrAANUdAMAA1D3AAHmFwADVH5jHwADVIMAAb0LAANUgqffAANUggo/AANUgmLXAANUgXMAA1SCDHsAA1SCB6sAA1SCAw8AA1R+YxMAA1SnAAJLSwADVKsAAeX3AANUplnLAANUplmnAANUplmTAANUpoBHAANUpoBLAANUpZMAA1SmDHMAA1SmgAMAA1SmDZMAA1SmBpcAA1SmWcMAA1SmWccAA1SmWW8AA1SmWb8AA1Smcm8AA1SmgBsAA1SmArcAA1SmVScAA1SmD/cAA1SmWbMAA1SmDX8AA1SmAq8AA1SmElcAA1SmWYsAA1SmB1sAA1SmWZsAA1SmWa8AA1SmWbsAA1SmWZcAA1SlWwADVKYClwADVKZ8OwADVKaAUwADVKYCuwADVKYC7wADVKZaMwADVKYYmwADVKaATwADVKZcqwADVKZctwADVKYFYwADVKaAWwADVKZvjwADVH5jIwADVV4MewADVV4HqwADVH5jKwADVWgDAANQ9wAB5hsAA1VyYx8AA1V3AAG9CwADVXan3wADVXYKPwADVXZi1wADVXVzAANVdgx7AANVdgerAANVdgMPAANVcmMTAANVmwACS0sAA1WfAAHl9wADVZpZywADVZpZpwADVZpZkwADVZqARwADVZqASwADVZmTAANVmgxzAANVmoADAANVmg2TAANVmgaXAANVmlnDAANVmlnHAANVmllvAANVmlm/AANVmnJvAANVmoAbAANVmgK3AANVmlUnAANVmg/3AANVmlmzAANVmg1/AANVmgKvAANVmhJXAANVmlmLAANVmgdbAANVmlmbAANVmlmvAANVmlm7AANVmlmXAANVmVsAA1WaApcAA1WafDsAA1WagFMAA1WaArsAA1WaAu8AA1WaWjMAA1WaGJsAA1WagE8AA1WaXKsAA1WaXLcAA1WaBWMAA1WagFsAA1Wab48AA1VyYyMAA1ZSDHsAA1ZSB6sAA1VyYysAA1ZcAwADUPcAAeYfAANWZmMbAANWawACS0sAA1Zu3VcAA1ZmYycAA1Z3AAJLSwADVnsAAeYjAANWZmMfAANWgwABu58AA1aCDxsAA1ZmYxMAA1aNIwADVo8AAbunAANWjwAB5icAA1aOYV8AA1aPAAHmKwADVo8AAeYvAANWjwAB5jMAA1aPAAHmNwADVo8AAeY7AANWjwAB5j8AA1aPAAHmQwADVo8AAeZHAANWjwAB5ksAA1aPAAHmTwADVo8AAeZTAANWjwAB5lcAA1ZmYysAA1bQAwADUPcAAeZbAANW2mMfAANW3wABvQsAA1bep98AA1bfAAG7nwADVt4KPwADVt2HAANW2mMTAANW9wACS0sAA1b7AAHmYwADVvsAAeZrAANW+wAB5nMAA1b7AAHmewADVvsAAeaDAANW+wAB5osAA1b7AAHmkwADVvsAAeabAANW+wAB5qMAA1b7AAHmqwADVvsAAeazAANW+wAB5rsAA1b7AAHmwwADVvsAAebLAANW+wAB5tMAA1b7AAHm2wADVvsAAebjAANW+wAB5usAA1b7AAHm8wADVvsAAeb7AANW+wAB5wMAA1b7AAHnCwADVvsAAecTAANW+wAB5xsAA1b7AAHnIwADVvsAAecrAANW+wAB5zMAA1baYysAA1doAwADUPcAAec/AANXcmMTAANXdoAzAANXdlnLAANXdlmnAANXdlmTAANXdoBHAANXdoBLAANXdZMAA1d2DHMAA1d2gAMAA1d2BpcAA1d2WcMAA1d2WccAA1d2WW8AA1d2Wb8AA1d2cm8AA1d2gBsAA1d2ArcAA1d2VScAA1d2D/cAA1d2WbMAA1d2DX8AA1d2Aq8AA1d2ElcAA1d2WYsAA1d2B1sAA1d2WZsAA1d2Wa8AA1d2WbsAA1d2WZcAA1d1WwADV3YClwADV3Z8OwADV3aAUwADV3YCuwADV3YC7wADV3ZaMwADV3YYmwADV3aATwADV3ZcqwADV3ZctwADV3aAWwADV3ZvjwADV3JjKwADWCADAANXcmMfAANYKwABvQsAA1gqp98AA1gqCj8AA1gqYtcAA1gpcwADWCoMewADWCoHqwADWCoDDwADV3JjIwADWE4MewADWE4HqwADUPcAAedDAANYWmMTAANYXoAzAANYXwACS0sAA1hnAAHl9wADWF4NkwADWF4FYwADWFpjKwADWHQDAANQ9wAB50cAA1h+YycAA1iDAAJLSwADWIcAAd1zAANYfmMTAANYjS8AA1iOAv8AA1iPAAJLSwADWJsAAeX3AANYjoAzAANYfmMfAANYpwABvQsAA1D3AAHnSwADWK5jEwADWLKAMwADWLJZywADWLJZpwADWLJZkwADWLKARwADWLKASwADWLGTAANYsgxzAANYsoADAANYsgaXAANYslnDAANYslnHAANYsllvAANYslm/AANYsnJvAANYsoAbAANYsgK3AANYslUnAANYsg/3AANYslmzAANYsg1/AANYsgKvAANYshJXAANYslmLAANYsgdbAANYslmbAANYslmvAANYslm7AANYslmXAANYsVsAA1iyApcAA1iyfDsAA1iygFMAA1iyArsAA1iyAu8AA1iyWjMAA1iyGJsAA1iygE8AA1iyXKsAA1iyXLcAA1iygFsAA1iyb48AA1iuYysAA1lcAwADWK5jHwADWWcAAb0LAANZZqffAANZZgo/AANZZmLXAANZZXMAA1lmDHsAA1lmB6sAA1lmAw8AA1iuYyMAA1mKDHsAA1mKB6sAA1D3AAHnTwADWZZjEwADWZqAMwADWZsAAktLAANZowAB5fcAA1maDZMAA1maBWMAA1mWYysAA1mwAwADUPcAAedTAANZumMnAANZvwACS0sAA1nDAAHdcwADWbpjEwADWckvAANZygL/AANZywACS0sAA1nXAAHl9wADWcqAMwADWbpjHwADWeMAAb0LAANQ9wAB51cAA1nqYxMAA1nugDMAA1nuWcsAA1nuWacAA1nuWZMAA1nugEcAA1nugEsAA1ntkwADWe4McwADWe6AAwADWe4GlwADWe5ZwwADWe5ZxwADWe5ZbwADWe5ZvwADWe5ybwADWe6AGwADWe4CtwADWe5VJwADWe4P9wADWe5ZswADWe4NfwADWe4CrwADWe4SVwADWe5ZiwADWe4HWwADWe5ZmwADWe5ZrwADWe5ZuwADWe5ZlwADWe1bAANZ7gKXAANZ7nw7AANZ7oBTAANZ7gK7AANZ7gLvAANZ7lozAANZ7hibAANZ7oBPAANZ7lyrAANZ7ly3AANZ7oBbAANZ7m+PAANZ6mMrAANamAMAA1nqYx8AA1qjAAG9CwADWqKn3wADWqIKPwADWqJi1wADWqFzAANaogx7AANaogerAANaogMPAANZ6mMjAANaxgx7AANaxgerAANQ9wAB51sAA1rSYxMAA1rWgDMAA1rXAAJLSwADWt8AAeX3AANa1g2TAANa1gVjAANa0mMrAANa7AMAA1D3AAHnXwADWvZjJwADWvsAAktLAANa/wAB3XMAA1r2YxMAA1sFLwADWwYC/wADWwcAAktLAANbEwAB5fcAA1sGgDMAA1r2Yx8AA1sfAAG9CwADUPcAAedjAANbJmMTAANbKoAzAANbKlnLAANbKlmnAANbKlmTAANbKoBHAANbKoBLAANbKZMAA1sqDHMAA1sqgAMAA1sqBpcAA1sqWcMAA1sqWccAA1sqWW8AA1sqWb8AA1sqcm8AA1sqgBsAA1sqArcAA1sqVScAA1sqD/cAA1sqWbMAA1sqDX8AA1sqAq8AA1sqElcAA1sqWYsAA1sqB1sAA1sqWZsAA1sqWa8AA1sqWbsAA1sqWZcAA1spWwADWyoClwADWyp8OwADWyqAUwADWyoCuwADWyoC7wADWypaMwADWyoYmwADWyqATwADWypcqwADWypctwADWyqAWwADWypvjwADWyZjKwADW9QDAANbJmMfAANb3wABvQsAA1vep98AA1veCj8AA1veYtcAA1vdcwADW94MewADW94HqwADW94DDwADWyZjIwADXAIMewADXAIHqwADUPcAAednAANcDmMTAANcEoAzAANcEwACS0sAA1wbAAHl9wADXBINkwADXBIFYwADXA5jKwADXCgDAANQ9wAB52sAA1wyYycAA1w3AAJLSwADXDsAAd1zAANcMmMTAANcQS8AA1xCAv8AA1xCDZMAA1xDAAJLSwADXFMAAeX3AANcUwAB528AA1xTAAHncwADXEKAMwADXDJjHwADXGcAAb0LAANQ9wAB53cAA1xuYxMAA1xygDMAA1xyWcsAA1xyWacAA1xyWZMAA1xygEcAA1xygEsAA1xxkwADXHIMcwADXHKAAwADXHIGlwADXHJZwwADXHJZxwADXHJZbwADXHJZvwADXHJybwADXHKAGwADXHICtwADXHJVJwADXHIP9wADXHJZswADXHINfwADXHICrwADXHISVwADXHJZiwADXHIHWwADXHJZmwADXHJZrwADXHJZuwADXHJZlwADXHFbAANccgKXAANccnw7AANccoBTAANccgK7AANccgLvAANcclozAANcchibAANccoBPAANcclyrAANccly3AANccoBbAANccm+PAANcbmMrAANdHAMAA1xuYx8AA10nAAG9CwADXSan3wADXSYKPwADXSZi1wADXSVzAANdJgx7AANdJgerAANdJgMPAANcbmMjAANdSgx7AANdSgerAANQ9wAB53sAA11WYxMAA11agDMAA11bAAJLSwADXWMAAeX3AANdWg2TAANdWgVjAANdVmMrAANdcAMAA1D3AAHnfwADXXpjJwADXX8AAktLAANdgwAB3XMAA116YxMAA12JLwADXYoC/wADXYoNkwADXYsAAktLAANdmwAB5fcAA12bAAHngwADXZsAAeeHAANdioAzAANdemMfAANdrwABvQsAA1D3AAHniwADXbZjEwADXbqAMwADXbpZywADXbpZpwADXbpZkwADXbqARwADXbqASwADXbmTAANdugxzAANduoADAANdugaXAANdulnDAANdulnHAANdullvAANdulm/AANdunJvAANduoAbAANdugK3AANdulUnAANdug/3AANdulmzAANdug1/AANdugKvAANduhJXAANdulmLAANdugdbAANdulmbAANdulmvAANdulm7AANdulmXAANduVsAA126ApcAA126fDsAA126gFMAA126ArsAA126Au8AA126WjMAA126GJsAA126gE8AA126XKsAA126XLcAA126gFsAA126b48AA122YysAA15kAwADXbZjHwADXm8AAb0LAANebqffAANebgo/AANebmLXAANebXMAA15uDHsAA15uB6sAA15uAw8AA122YyMAA16SDHsAA16SB6sAA1D3AAHnjwADXp5jEwADXqKAMwADXqMAAktLAANeqwAB5fcAA16iDZMAA16iBWMAA16eYysAA164AwADUPcAAeeTAANewmMnAANexwACS0sAA17LAAHdcwADXsJjEwADXtEvAANe0gL/AANe0wACS0sAA17fAAHl9wADXt8AAeeXAANe3wAB55sAA17SgDMAA17CYx8AA17zAAG9CwADUPcAAeefAANe+mMTAANe/oAzAANe/lnLAANe/lmnAANe/lmTAANe/oBHAANe/oBLAANe/ZMAA17+DHMAA17+gAMAA17+BpcAA17+WcMAA17+WccAA17+WW8AA17+Wb8AA17+cm8AA17+gBsAA17+ArcAA17+VScAA17+D/cAA17+WbMAA17+DX8AA17+Aq8AA17+ElcAA17+WYsAA17+B1sAA17+WZsAA17+Wa8AA17+WbsAA17+WZcAA179WwADXv4ClwADXv58OwADXv6AUwADXv4CuwADXv4C7wADXv5aMwADXv4YmwADXv6ATwADXv5cqwADXv5ctwADXv6AWwADXv5vjwADXvpjKwADX6gDAANe+mMfAANfswABvQsAA1+yp98AA1+yCj8AA1+yYtcAA1+xcwADX7IMewADX7IHqwADX7IDDwADXvpjIwADX9YMewADX9YHqwADUPcAAeejAANf4mMTAANf5oAzAANf5wACS0sAA1/vAAHl9wADX+YNkwADX+YFYwADX+JjKwADX/wDAANQ9wAB56cAA2AGYycAA2ALAAJLSwADYA8AAd1zAANgBmMTAANgFS8AA2AWAv8AA2AXAAJLSwADYCMAAeX3AANgIwAB56sAA2AjAAHnrwADYBaAMwADYAZjHwADYDcAAb0LAANQ9wAB57MAA2A+YxMAA2BCgDMAA2BCWcsAA2BCWacAA2BCWZMAA2BCgEcAA2BCgEsAA2BBkwADYEIMcwADYEKAAwADYEIGlwADYEJZwwADYEJZxwADYEJZbwADYEJZvwADYEJybwADYEKAGwADYEICtwADYEJVJwADYEIP9wADYEJZswADYEINfwADYEICrwADYEISVwADYEJZiwADYEIHWwADYEJZmwADYEJZrwADYEJZuwADYEJZlwADYEFbAANgQgKXAANgQnw7AANgQoBTAANgQgK7AANgQgLvAANgQlozAANgQhibAANgQoBPAANgQlyrAANgQly3AANgQoBbAANgQm+PAANgPmMrAANg7AMAA2A+Yx8AA2D3AAG9CwADYPan3wADYPYKPwADYPZi1wADYPVzAANg9gx7AANg9gerAANg9gMPAANgPmMjAANhGgx7AANhGgerAANQ9wAB57cAA2EmYxMAA2EqgDMAA2ErAAJLSwADYTMAAeX3AANhKg2TAANhKgVjAANhJmMrAANhQAMAA1D3AAHnuwADYUpjJwADYU8AAktLAANhUwAB3XMAA2FKYxMAA2FZLwADYVoC/wADYVsAAktLAANhZwAB5fcAA2FnAAHnvwADYWcAAefDAANhWoAzAANhSmMfAANhewABvQsAA1D3AAHnxwADYYJjEwADYYaAMwADYYZZywADYYZZpwADYYZZkwADYYaARwADYYaASwADYYWTAANhhgxzAANhhoADAANhhgaXAANhhlnDAANhhlnHAANhhllvAANhhlm/AANhhnJvAANhhoAbAANhhgK3AANhhlUnAANhhg/3AANhhlmzAANhhg1/AANhhgKvAANhhhJXAANhhlmLAANhhgdbAANhhlmbAANhhlmvAANhhlm7AANhhlmXAANhhVsAA2GGApcAA2GGfDsAA2GGgFMAA2GGArsAA2GGAu8AA2GGWjMAA2GGGJsAA2GGgE8AA2GGXKsAA2GGXLcAA2GGgFsAA2GGb48AA2GCYysAA2IwAwADYYJjHwADYjsAAb0LAANiOqffAANiOgo/AANiOmLXAANiOXMAA2I6DHsAA2I6B6sAA2I6Aw8AA2GCYyMAA2JeDHsAA2JeB6sAA1D3AAHnywADYmpjEwADYm6AMwADYm8AAktLAANidwAB5fcAA2JuDZMAA2JuBWMAA2JqYysAA2KEAwADUPcAAefPAANijmMnAANikwACS0sAA2KXAAHdcwADYo5jEwADYp0vAANingL/AANinwACS0sAA2KrAAHl9wADYqsAAefTAANiqwAB59cAA2KegDMAA2KOYx8AA2K/AAG9CwADUPcAAefbAANixmMTAANiyoAzAANiylnLAANiylmnAANiylmTAANiyoBHAANiyoBLAANiyZMAA2LKDHMAA2LKgAMAA2LKBpcAA2LKWcMAA2LKWccAA2LKWW8AA2LKWb8AA2LKcm8AA2LKgBsAA2LKArcAA2LKVScAA2LKD/cAA2LKWbMAA2LKDX8AA2LKAq8AA2LKElcAA2LKWYsAA2LKB1sAA2LKWZsAA2LKWa8AA2LKWbsAA2LKWZcAA2LJWwADYsoClwADYsp8OwADYsqAUwADYsoCuwADYsoC7wADYspaMwADYsoYmwADYsqATwADYspcqwADYspctwADYsqAWwADYspvjwADYsZjKwADY3QDAANixmMfAANjfwABvQsAA2N+p98AA2N+Cj8AA2N+YtcAA2N9cwADY34MewADY34HqwADY34DDwADYsZjIwADY6IMewADY6IHqwADUPcAAeffAANjrmMTAANjsoAzAANjswACS0sAA2O7AAHl9wADY7INkwADY7IFYwADY65jKwADY8gDAANQ9wAB5+MAA2PSYycAA2PXAAJLSwADY9sAAd1zAANj0mMTAANj4S8AA2PiAv8AA2PjAAJLSwADY+8AAeX3AANj7wAB5+cAA2PvAAHn6wADY+KAMwADY9JjHwADZAMAAb0LAANQ9wAB5+8AA2QKYxMAA2QOgDMAA2QOWcsAA2QOWacAA2QOWZMAA2QOgEcAA2QOgEsAA2QNkwADZA4McwADZA6AAwADZA4GlwADZA5ZwwADZA5ZxwADZA5ZbwADZA5ZvwADZA5ybwADZA6AGwADZA4CtwADZA5VJwADZA4P9wADZA5ZswADZA4NfwADZA4CrwADZA4SVwADZA5ZiwADZA4HWwADZA5ZmwADZA5ZrwADZA5ZuwADZA5ZlwADZA1bAANkDgKXAANkDnw7AANkDoBTAANkDgK7AANkDgLvAANkDlozAANkDhibAANkDoBPAANkDlyrAANkDly3AANkDoBbAANkDm+PAANkCmMrAANkuAMAA2QKYx8AA2TDAAG9CwADZMKn3wADZMIKPwADZMJi1wADZMFzAANkwgx7AANkwgerAANkwgMPAANkCmMjAANk5gx7AANk5gerAANQ9wAB5/MAA2TyYxMAA2T2gDMAA2T3AAJLSwADZP8AAeX3AANk9g2TAANk9gVjAANk8mMrAANlDAMAA1D3AAHn9wADZRZjJwADZRsAAktLAANlHwAB3XMAA2UWYxMAA2UlLwADZSYC/wADZScAAktLAANlMwAB5fcAA2UzAAHn+wADZTMAAef/AANlJoAzAANlFmMfAANlRwABvQsAA1D3AAHoAwADZU5jEwADZVKAMwADZVMAAktLAANlWwAB5fcAA2VSWcsAA2VSWacAA2VSWZMAA2VSgEcAA2VSgEsAA2VRkwADZVIMcwADZVKAAwADZVINkwADZVIGlwADZVJZwwADZVJZxwADZVJZbwADZVJZvwADZVJybwADZVKAGwADZVICtwADZVJVJwADZVIP9wADZVJZswADZVINfwADZVICrwADZVISVwADZVJZiwADZVIHWwADZVJZmwADZVJZrwADZVJZuwADZVJZlwADZVFbAANlUgKXAANlUnw7AANlUoBTAANlUgK7AANlUgLvAANlUlozAANlUhibAANlUoBPAANlUlyrAANlUly3AANlUgVjAANlUoBbAANlUm+PAANlTmMrAANmDAMAA2VOYx8AA2YXAAG9CwADZhan3wADZhYKPwADZhZi1wADZhVzAANmFgx7AANmFgerAANmFgMPAANlTmMjAANmOgx7AANmOgerAANQ9wAB6AcAA2ZGYycAA2ZLAAJLSwADZk8AAd1zAANmRmMTAANmVS8AA2ZWAv8AA2ZXAAJLSwADZmMAAeX3AANmYwAB6AsAA2ZjAAHoDwADZlaAMwADZkZjHwADZncAAb0LAANQ9wAB6BMAA2Z+YxMAA2aCgDMAA2aDAAJLSwADZosAAeX3AANmglnLAANmglmnAANmglmTAANmgoBHAANmgoBLAANmgZMAA2aCDHMAA2aCgAMAA2aCDZMAA2aCBpcAA2aCWcMAA2aCWccAA2aCWW8AA2aCWb8AA2aCcm8AA2aCgBsAA2aCArcAA2aCVScAA2aCD/cAA2aCWbMAA2aCDX8AA2aCAq8AA2aCElcAA2aCWYsAA2aCB1sAA2aCWZsAA2aCWa8AA2aCWbsAA2aCWZcAA2aBWwADZoIClwADZoJ8OwADZoKAUwADZoICuwADZoIC7wADZoJaMwADZoIYmwADZoKATwADZoJcqwADZoJctwADZoIFYwADZoKAWwADZoJvjwADZn5jKwADZzwDAANmfmMfAANnRwABvQsAA2dGp98AA2dGCj8AA2dGYtcAA2dFcwADZ0YMewADZ0YHqwADZ0YDDwADZn5jIwADZ2oMewADZ2oHqwADUPcAAegXAANndmMnAANnewACS0sAA2d/AAHdcwADZ3ZjEwADZ4UvAANnhgL/AANnhwACS0sAA2eTAAHl9wADZ5MAAegbAANnkwAB6B8AA2eGgDMAA2d2Yx8AA2enAAG9CwADUPcAAegjAANnrmMTAANnsoAzAANnswACS0sAA2e7AAHl9wADZ7JZywADZ7JZpwADZ7JZkwADZ7KARwADZ7KASwADZ7GTAANnsgxzAANnsoADAANnsg2TAANnsgaXAANnslnDAANnslnHAANnsllvAANnslm/AANnsnJvAANnsoAbAANnsgK3AANnslUnAANnsg/3AANnslmzAANnsg1/AANnsgKvAANnshJXAANnslmLAANnsgdbAANnslmbAANnslmvAANnslm7AANnslmXAANnsVsAA2eyApcAA2eyfDsAA2eygFMAA2eyArsAA2eyAu8AA2eyWjMAA2eyGJsAA2eygE8AA2eyXKsAA2eyXLcAA2eyBWMAA2eygFsAA2eyb48AA2euYysAA2hsAwADZ65jHwADaHcAAb0LAANodqffAANodgo/AANodmLXAANodXMAA2h2DHsAA2h2B6sAA2h2Aw8AA2euYyMAA2iaDHsAA2iaB6sAA1D3AAHoJwADaKZjJwADaKsAAktLAANorwAB3XMAA2imYxMAA2i1LwADaLYC/wADaLcAAktLAANowwAB5fcAA2jDAAHoKwADaMMAAegvAANotoAzAANopmMfAANo1wABvQsAA1D3AAHoMwADaN5jEwADaOKAMwADaOJZywADaOJZpwADaOJZkwADaOKARwADaOKASwADaOGTAANo4gxzAANo4oADAANo4gaXAANo4lnDAANo4lnHAANo4llvAANo4lm/AANo4nJvAANo4oAbAANo4gK3AANo4lUnAANo4g/3AANo4lmzAANo4g1/AANo4gKvAANo4hJXAANo4lmLAANo4gdbAANo4lmbAANo4lmvAANo4lm7AANo4lmXAANo4VsAA2jiApcAA2jifDsAA2jigFMAA2jiArsAA2jiAu8AA2jiWjMAA2jiGJsAA2jigE8AA2jiXKsAA2jiXLcAA2jigFsAA2jib48AA2jeYysAA2mMAwADaN5jHwADaZcAAb0LAANplqffAANplgo/AANplmLXAANplXMAA2mWDHsAA2mWB6sAA2mWAw8AA2jeYyMAA2m6DHsAA2m6B6sAA1D3AAHoNwADacZjEwADacqAMwADacsAAktLAANp0wAB5fcAA2nKDZMAA2nKBWMAA2nGYysAA2ngAwADUPcAAeg7AANp6mMnAANp7wACS0sAA2nzAAHdcwADaepjEwADafkvAANp+gL/AANp+wACS0sAA2oHAAHl9wADafqAMwADaepjHwADahMAAb0LAANQ9wAB6D8AA2oaYxMAA2oegDMAA2oeWcsAA2oeWacAA2oeWZMAA2oegEcAA2oegEsAA2odkwADah4McwADah6AAwADah4GlwADah5ZwwADah5ZxwADah5ZbwADah5ZvwADah5ybwADah6AGwADah4CtwADah5VJwADah4P9wADah5ZswADah4NfwADah4CrwADah4SVwADah5ZiwADah4HWwADah5ZmwADah5ZrwADah5ZuwADah5ZlwADah1bAANqHgKXAANqHnw7AANqHoBTAANqHgK7AANqHgLvAANqHlozAANqHhibAANqHoBPAANqHlyrAANqHly3AANqHoBbAANqHm+PAANqGmMrAANqyAMAA2oaYx8AA2rTAAG9CwADatKn3wADatIKPwADatJi1wADatFzAANq0gx7AANq0gerAANq0gMPAANqGmMjAANq9gx7AANq9gerAANQ9wAB6EMAA2sCYxMAA2sGgDMAA2sHAAJLSwADaw8AAeX3AANrBg2TAANrBgVjAANrAmMrAANrHAMAA1D3AAHoRwADayZjJwADaysAAktLAANrLwAB3XMAA2smYxMAA2s1LwADazYC/wADazcAAktLAANrQwAB5fcAA2s2gDMAA2smYx8AA2tPAAG9CwADUPcAAehLAANrVmMTAANrWoAzAANrWlnLAANrWlmnAANrWlmTAANrWoBHAANrWoBLAANrWZMAA2taDHMAA2tagAMAA2taBpcAA2taWcMAA2taWccAA2taWW8AA2taWb8AA2tacm8AA2tagBsAA2taArcAA2taVScAA2taD/cAA2taWbMAA2taDX8AA2taAq8AA2taElcAA2taWYsAA2taB1sAA2taWZsAA2taWa8AA2taWbsAA2taWZcAA2tZWwADa1oClwADa1p8OwADa1qAUwADa1oCuwADa1oC7wADa1paMwADa1oYmwADa1qATwADa1pcqwADa1pctwADa1qAWwADa1pvjwADa1ZjKwADbAQDAANrVmMfAANsDwABvQsAA2wOp98AA2wOCj8AA2wOYtcAA2wNcwADbA4MewADbA4HqwADbA4DDwADa1ZjIwADbDIMewADbDIHqwADUPcAAehPAANsPmMTAANsQoAzAANsQwACS0sAA2xLAAHl9wADbEINkwADbEIFYwADbD5jKwADbFgDAANQ9wAB6FMAA2xiYycAA2xnAAJLSwADbGsAAd1zAANsYmMTAANscS8AA2xyAv8AA2xzAAJLSwADbH8AAeX3AANscoAzAANsYmMfAANsiwABvQsAA1D3AAHoVwADbJJjEwADbJaAMwADbJZZywADbJZZpwADbJZZkwADbJaARwADbJaASwADbJWTAANslgxzAANsloADAANslgaXAANsllnDAANsllnHAANslllvAANsllm/AANslnJvAANsloAbAANslgK3AANsllUnAANslg/3AANsllmzAANslg1/AANslgKvAANslhJXAANsllmLAANslgdbAANsllmbAANsllmvAANsllm7AANsllmXAANslVsAA2yWApcAA2yWfDsAA2yWgFMAA2yWArsAA2yWAu8AA2yWWjMAA2yWGJsAA2yWgE8AA2yWXKsAA2yWXLcAA2yWgFsAA2yWb48AA2ySYysAA21AAwADbJJjHwADbUsAAb0LAANtSqffAANtSgo/AANtSmLXAANtSXMAA21KDHsAA21KB6sAA21KAw8AA2ySYyMAA21uDHsAA21uB6sAA1D3AAHoWwADbXpjEwADbX6AMwADbX8AAktLAANthwAB5fcAA21+DZMAA21+BWMAA216YysAA22UAwADUPcAAehfAANtnmMnAANtowACS0sAA22nAAHdcwADbZ5jEwADba0vAANtrgL/AANtrwACS0sAA227AAHl9wADbbsAAedvAANtuwAB53MAA22ugDMAA22eYx8AA23PAAG9CwADUPcAAehjAANt1mMTAANt2oAzAANt2lnLAANt2lmnAANt2lmTAANt2oBHAANt2oBLAANt2ZMAA23aDHMAA23agAMAA23aBpcAA23aWcMAA23aWccAA23aWW8AA23aWb8AA23acm8AA23agBsAA23aArcAA23aVScAA23aD/cAA23aWbMAA23aDX8AA23aAq8AA23aElcAA23aWYsAA23aB1sAA23aWZsAA23aWa8AA23aWbsAA23aWZcAA23ZWwADbdoClwADbdp8OwADbdqAUwADbdoCuwADbdoC7wADbdpaMwADbdoYmwADbdqATwADbdpcqwADbdpctwADbdqAWwADbdpvjwADbdZjKwADboQDAANt1mMfAANujwABvQsAA26Op98AA26OCj8AA26OYtcAA26NcwADbo4MewADbo4HqwADbo4DDwADbdZjIwADbrIMewADbrIHqwADUPcAAehnAANuvmMTAANuwoAzAANuwwACS0sAA27LAAHl9wADbsINkwADbsIFYwADbr5jKwADbtgDAANQ9wAB6GsAA27iYycAA27nAAJLSwADbusAAd1zAANu4mMTAANu8S8AA27yAv8AA27zAAJLSwADbv8AAeX3AANu/wAB54MAA27/AAHnhwADbvKAMwADbuJjHwADbxMAAb0LAANQ9wAB6G8AA28aYxMAA28egDMAA28eWcsAA28eWacAA28eWZMAA28egEcAA28egEsAA28dkwADbx4McwADbx6AAwADbx4GlwADbx5ZwwADbx5ZxwADbx5ZbwADbx5ZvwADbx5ybwADbx6AGwADbx4CtwADbx5VJwADbx4P9wADbx5ZswADbx4NfwADbx4CrwADbx4SVwADbx5ZiwADbx4HWwADbx5ZmwADbx5ZrwADbx5ZuwADbx5ZlwADbx1bAANvHgKXAANvHnw7AANvHoBTAANvHgK7AANvHgLvAANvHlozAANvHhibAANvHoBPAANvHlyrAANvHly3AANvHoBbAANvHm+PAANvGmMrAANvyAMAA28aYx8AA2/TAAG9CwADb9Kn3wADb9IKPwADb9Ji1wADb9FzAANv0gx7AANv0gerAANv0gMPAANvGmMjAANv9gx7AANv9gerAANQ9wAB6HMAA3ACYxMAA3AGgDMAA3AHAAJLSwADcA8AAeX3AANwBg2TAANwBgVjAANwAmMrAANwHAMAA1D3AAHodwADcCZjJwADcCsAAktLAANwLwAB3XMAA3AmYxMAA3A1LwADcDYC/wADcDcAAktLAANwQwAB5fcAA3BDAAHnlwADcEMAAeebAANwNoAzAANwJmMfAANwVwABvQsAA1D3AAHoewADcF5jEwADcGKAMwADcGJZywADcGJZpwADcGJZkwADcGKARwADcGKASwADcGGTAANwYgxzAANwYoADAANwYgaXAANwYlnDAANwYlnHAANwYllvAANwYlm/AANwYnJvAANwYoAbAANwYgK3AANwYlUnAANwYg/3AANwYlmzAANwYg1/AANwYgKvAANwYhJXAANwYlmLAANwYgdbAANwYlmbAANwYlmvAANwYlm7AANwYlmXAANwYVsAA3BiApcAA3BifDsAA3BigFMAA3BiArsAA3BiAu8AA3BiWjMAA3BiGJsAA3BigE8AA3BiXKsAA3BiXLcAA3BigFsAA3Bib48AA3BeYysAA3EMAwADcF5jHwADcRcAAb0LAANxFqffAANxFgo/AANxFmLXAANxFXMAA3EWDHsAA3EWB6sAA3EWAw8AA3BeYyMAA3E6DHsAA3E6B6sAA1D3AAHofwADcUZjEwADcUqAMwADcUsAAktLAANxUwAB5fcAA3FKDZMAA3FKBWMAA3FGYysAA3FgAwADUPcAAeiDAANxamMnAANxbwACS0sAA3FzAAHdcwADcWpjEwADcXkvAANxegL/AANxewACS0sAA3GHAAHl9wADcYcAAeerAANxhwAB568AA3F6gDMAA3FqYx8AA3GbAAG9CwADUPcAAeiHAANxomMTAANxpoAzAANxplnLAANxplmnAANxplmTAANxpoBHAANxpoBLAANxpZMAA3GmDHMAA3GmgAMAA3GmBpcAA3GmWcMAA3GmWccAA3GmWW8AA3GmWb8AA3Gmcm8AA3GmgBsAA3GmArcAA3GmVScAA3GmD/cAA3GmWbMAA3GmDX8AA3GmAq8AA3GmElcAA3GmWYsAA3GmB1sAA3GmWZsAA3GmWa8AA3GmWbsAA3GmWZcAA3GlWwADcaYClwADcaZ8OwADcaaAUwADcaYCuwADcaYC7wADcaZaMwADcaYYmwADcaaATwADcaZcqwADcaZctwADcaaAWwADcaZvjwADcaJjKwADclADAANxomMfAANyWwABvQsAA3Jap98AA3JaCj8AA3JaYtcAA3JZcwADcloMewADcloHqwADcloDDwADcaJjIwADcn4MewADcn4HqwADUPcAAeiLAANyimMTAANyjoAzAANyjwACS0sAA3KXAAHl9wADco4NkwADco4FYwADcopjKwADcqQDAANQ9wAB6I8AA3KuYycAA3KzAAJLSwADcrcAAd1zAANyrmMTAANyvS8AA3K+Av8AA3K/AAJLSwADcssAAeX3AANyywAB578AA3LLAAHnwwADcr6AMwADcq5jHwADct8AAb0LAANQ9wAB6JMAA3LmYxMAA3LqgDMAA3LqWcsAA3LqWacAA3LqWZMAA3LqgEcAA3LqgEsAA3LpkwADcuoMcwADcuqAAwADcuoGlwADcupZwwADcupZxwADcupZbwADcupZvwADcupybwADcuqAGwADcuoCtwADcupVJwADcuoP9wADcupZswADcuoNfwADcuoCrwADcuoSVwADcupZiwADcuoHWwADcupZmwADcupZrwADcupZuwADcupZlwADculbAANy6gKXAANy6nw7AANy6oBTAANy6gK7AANy6gLvAANy6lozAANy6hibAANy6oBPAANy6lyrAANy6ly3AANy6oBbAANy6m+PAANy5mMrAANzlAMAA3LmYx8AA3OfAAG9CwADc56n3wADc54KPwADc55i1wADc51zAANzngx7AANzngerAANzngMPAANy5mMjAANzwgx7AANzwgerAANQ9wAB6JcAA3POYxMAA3PSgDMAA3PTAAJLSwADc9sAAeX3AANz0g2TAANz0gVjAANzzmMrAANz6AMAA1D3AAHomwADc/JjJwADc/cAAktLAANz+wAB3XMAA3PyYxMAA3QBLwADdAIC/wADdAMAAktLAAN0DwAB5fcAA3QPAAHn0wADdA8AAefXAAN0AoAzAANz8mMfAAN0IwABvQsAA1D3AAHonwADdCpjEwADdC6AMwADdC5ZywADdC5ZpwADdC5ZkwADdC6ARwADdC6ASwADdC2TAAN0LgxzAAN0LoADAAN0LgaXAAN0LlnDAAN0LlnHAAN0LllvAAN0Llm/AAN0LnJvAAN0LoAbAAN0LgK3AAN0LlUnAAN0Lg/3AAN0LlmzAAN0Lg1/AAN0LgKvAAN0LhJXAAN0LlmLAAN0LgdbAAN0LlmbAAN0LlmvAAN0Llm7AAN0LlmXAAN0LVsAA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wAB5fcAA3kWWcsAA3kWWacAA3kWWZMAA3kWgEcAA3kWgEsAA3kVkwADeRYMcwADeRaAAwADeRYNkwADeRYGlwADeRZZwwADeRZZxwADeRZZbwADeRZZvwADeRZybwADeRaAGwADeRYCtwADeRZVJwADeRYP9wADeRZZswADeRYNfwADeRYCrwADeRYSVwADeRZZiwADeRYHWwADeRZZmwADeRZZrwADeRZZuwADeRZZlwADeRVbAAN5FgKXAAN5Fnw7AAN5FoBTAAN5FgK7AAN5FgLvAAN5FlozAAN5FhibAAN5FoBPAAN5FlyrAAN5Fly3AAN5FgVjAAN5FoBbAAN5Fm+PAAN5EmMrAAN50AMAA3kSYx8AA3nbAAG9CwADedqn3wADedoKPwADedpi1wADedlzAAN52gx7AAN52gerAAN52gMPAAN5EmMjAAN5/gx7AAN5/gerAANQ9wAB6MsAA3oKYycAA3oPAAJLSwADehMAAd1zAAN6CmMTAAN6GS8AA3oaAv8AA3obAAJLSwADeicAAeX3AAN6JwAB6CsAA3onAAHoLwADehqAMwADegpjHwADejsAAb0LAANQ9wAB6M8AA3pCYxMAA3pFkwADekYHGwADekYGNwADekYONwADekVDAAN6RldjAAN6RwAB6OsAA3pGV08AA3pHAAHo9wADekcAAQfPAAN6RwAB6QMAA3pHAAHpCwADekZf6wADekcAAekXAAN6RoADAAN6RwAB6TsAA3pHAAHpRwADekcAAelPAAN6RwAB6VcAA3pHAAHpXwADekZzgwADekcAASYfAAN6RwAB4XsAA3pHAAHpcwADekcAAel7AAN6QmMfAAN6rg4DAAN6rvK/AAN6rwABIrsAA3qvAAGx0wADeq8AAekvAAN6QmMrAAN6xAMAA1D3AAHpgwADes5jEwADetIEGwADetIN8wADetIPAwADetGTAAN60gY3AAN60oADAAN60wAB6TsAA3rTAAHpRwADetMAAelPAAN60wAB6VcAA3rTAAHpXwADetMAAennAAN60wAB6e8AA3rTAAHp9wADetMAAen/AAN60n5nAAN6zmMfAAN7Fg4DAAN7FvK/AAN7FwABIrsAA3sXAAGx0wADexcAAekvAAN7FwAB6ccAA3sXAAHpzwADexcAAenXAAN7FwAB6d8AA3rOYysAA3s8AwADUPcAAeoLAAN7RmMTAAN7SZMAA3tKBxsAA3tKBjcAA3tKDjcAA3tJQwADe0sAAekLAAN7Sl/rAAN7SwAB6RcAA3tLAAHpRwADe0sAAelPAAN7SnODAAN7SwABJh8AA3tLAAHhewADe0ZjHwADe4IOAwADe4LyvwADe4MAAekvAAN7RmMrAAN7kAMAA1D3AAHqTwADe5pjGwADe58AAktLAAN7owAB6lMAA3uidL8AA3ujAAHKMwADe6IjgwADe5pjEwADe7V3AAN7mmMfAAN7vXsAA3uaYysAA3vEAwADUPcAAepXAAN7zmMfAAN70wABu58AA3vSCj8AA3vTAAJLSwADe98AAepbAAN70qffAAN70YcAA3vOYysAA3vsAwADUPcAAepvAAN79mMTAAN7+oAzAAN7+lnLAAN7+lmnAAN7+lmTAAN7+oBHAAN7+oBLAAN7+ZMAA3v6DHMAA3v6gAMAA3v6BpcAA3v6WcMAA3v6WccAA3v6WW8AA3v6Wb8AA3v6cm8AA3v6gBsAA3v6ArcAA3v6VScAA3v6D/cAA3v6WbMAA3v6DX8AA3v6Aq8AA3v6ElcAA3v6WYsAA3v6B1sAA3v6WZsAA3v6Wa8AA3v6WbsAA3v6WZcAA3v5WwADe/oClwADe/p8OwADe/qAUwADe/oCuwADe/oC7wADe/paMwADe/oYmwADe/qATwADe/pcqwADe/pctwADe/qAWwADe/pvjwADe/ZjKwADfKQDAAN79mMfAAN8rwABvQsAA3yup98AA3yuCj8AA3yuYtcAA3ytcwADfK4MewADfK4HqwADfK4DDwADe/ZjIwADfNIMewADfNIHqwADUPcAAepzAAN83mMTAAN84oAzAAN84wACS0sAA3zrAAHl9wADfOINkwADfOIFYwADfN5jKwADfPgDAANQ9wAB6ncAA30CYycAA30HAAJLSwADfQoC1wADfQJjEwADfREvAAN9EgL/AAN9EwACS0sAA30fAAHl9wADfRKAMwADfQJjHwADfSsAAb0LAANQ9wAB6n8AA30yYxMAA302gDMAA302WcsAA302WacAA302WZMAA302gEcAA302gEsAA301kwADfTYMcwADfTaAAwADfTYGlwADfTZZwwADfTZZxwADfTZZbwADfTZZvwADfTZybwADfTaAGwADfTYCtwADfTZVJwADfTYP9wADfTZZswADfTYNfwADfTYCrwADfTYSVwADfTZZiwADfTYHWwADfTZZmwADfTZZrwADfTZZuwADfTZZlwADfTVbAAN9NgKXAAN9Nnw7AAN9NoBTAAN9NgK7AAN9NgLvAAN9NlozAAN9NhibAAN9NoBPAAN9NlyrAAN9Nly3AAN9NoBbAAN9Nm+PAAN9MmMrAAN94AMAA30yYx8AA33rAAG9CwADfeqn3wADfeoKPwADfepi1wADfelzAAN96gx7AAN96gerAAN96gMPAAN9MmMjAAN+Dgx7AAN+DgerAANQ9wAB6oMAA34aYxMAA34egDMAA34fAAJLSwADficAAeX3AAN+Hg2TAAN+HgVjAAN+GmMrAAN+NAMAA1D3AAHqhwADfj5jJwADfkMAAktLAAN+RgLXAAN+PmMTAAN+TS8AA35OAv8AA35PAAJLSwADflsAAeX3AAN+ToAzAAN+PmMfAAN+ZwABvQsAA1D3AAHqjwADfm5jEwADfnKAMwADfnJZywADfnJZpwADfnJZkwADfnKARwADfnKASwADfnGTAAN+cgxzAAN+coADAAN+cgaXAAN+clnDAAN+clnHAAN+cllvAAN+clm/AAN+cnJvAAN+coAbAAN+cgK3AAN+clUnAAN+cg/3AAN+clmzAAN+cg1/AAN+cgKvAAN+chJXAAN+clmLAAN+cgdbAAN+clmbAAN+clmvAAN+clm7AAN+clmXAAN+cVsAA35yApcAA35yfDsAA35ygFMAA35yArsAA35yAu8AA35yWjMAA35yGJsAA35ygE8AA35yXKsAA35yXLcAA35ygFsAA35yb48AA35uYysAA38cAwADfm5jHwADfycAAb0LAAN/JqffAAN/Jgo/AAN/JmLXAAN/JXMAA38mDHsAA38mB6sAA38mAw8AA35uYyMAA39KDHsAA39KB6sAA1D3AAHqkwADf1ZjEwADf1qAMwADf1sAAktLAAN/YwAB5fcAA39aDZMAA39aBWMAA39WYysAA39wAwADUPcAAeqXAAN/emMnAAN/fwACS0sAA3+CAtcAA396YxMAA3+JLwADf4oC/wADf4sAAktLAAN/lwAB5fcAA3+KgDMAA396Yx8AA3+jAAG9CwADUPcAAeqfAAN/qmMTAAN/roAzAAN/rlnLAAN/rlmnAAN/rlmTAAN/roBHAAN/r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wADjTsAAetnAAONOwABu7cAA407AAG7qwADjTsAAetrAAONOwAB628AA407AAHrcwADjTsAAet3AAONOwAB63sAA407AAHrfwADjTsAARYPAAONOwABFJcAA407AAHrgwADjTsAAeuHAANQ9wAB3QMAA42WYx8AA42bAAG7nwADjZZjEwADjaJhXwADjaMAAeYnAAONowAB5isAA42jAAHmMwADjaMAAeYvAAONowAB5jsAA42jAAHmNwADjaMAAeZDAAONowAB5j8AA42jAAHmUwADjaMAAeZHAAONowAB5ksAA42jAAHmTwADjaMAAeZXAAONowABu6cAA42WYysAA43gAwADUPcAAdZnAAON6mMfAAON7wABvQsAA43up98AA43vAAG7nwADje4KPwADjepjKwADjgADAANQ9wAB64sAA44KYxMAA44NkwADjgpjKwADjhQDAANQ9wAB648AA44eYxMAA44hkwADjh5jKwADjigDAANQ9wAB65MAA44yYxsAA443AAJLSwADjjsAAeuXAAOONwAB65sAA443AAHrnwADjjZaIwADjjJjKwADjk8AAktLAAOOUgLXAANQ9wAB66MAA45aYycAA45fAAJLSwADjmMAAeunAAOOXAMAA45fAAEnCwADjlpjEwADjnMAAetLAAOOcwAB608AA45zAAHrUwADjnMAAetXAAOOcwAB61sAA45zAAHrXwADjnMAARSbAAOOcwABFgsAA45zAAHrYwADjnMAAetnAAOOcwABu7cAA45zAAG7qwADjnMAAetrAAOOcwAB628AA45zAAHrcwADjnMAAet3AAOOcwAB63sAA45zAAHrfwADjnMAARYPAAOOcwABFJcAA1D3AAHrrwADjsZjGwADjssAAeuzAAOOxmMnAAOO0AMAA47TAAHfmwADjtMAAScLAAOOxmMTAAOO4gVjAANQ9h+/AAOO6mMbAAOO7wAB67MAA47qYycAA470AwADjvcAAd+bAAOO9wABJwsAA47qYxMAA48FkwADjwYFYwADUPcAAeu/AAOPEmMbAAOPFwAB67MAA48SYycAA48cAwADjx8AAd+bAAOPHwABJwsAA48SYxMAA48uBWMAA1D3AAHrxwADjzZjGwADjzsAAeuzAAOPNmMnAAOPQAMAA49DAAHfmwADj0MAAScLAAOPNmMTAAOPU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NMAAe5bAAOQ0wAB7l8AA5DTAAHuYwADkNMAAe5nAAOQ0wAB7msAA5DTAAHubwADkNMAAe5zAAOQ0wAB7ncAA5DTAAHuewADkNMAAe5/AAOQ0wAB7oMAA5DTAAHuhwADkNMAAe6LAAOQ0wAB7o8AA5DTAAHukwADkNMAAe6XAAOQ0wAB7psAA5DTAAHunwADkNMAAe6jAAOQ0wAB7qcAA5DTAAHuqwADkNMAAe6vAAOQ0wAB7rMAA5DTAAHutwADkNMAAe67AAOQ0wAB7r8AA5DTAAHuwwADkNMAAe7HAAOQ0wAB7ssAA5DTAAHuzwADkNMAAe7TAAOQ0wAB7tcAA5DTAAHu2wADkNMAAe7fAAOQ0wAB7uMAA5DTAAHu5wADkNMAAe7rAAOQ0wAB7u8AA5DTAAHu8wADkNMAAe73AAOQ0wAB7vsAA5DTAAHu/wADkNMAAe8DAAOQ0wAB7wcAA5DTAAHvCwADkNMAAe8PAAOQ0wAB7xMAA5DTAAHvFwADkNMAAe8bAAOQ0wAB7x8AA5DTAAHvIwADkNMAAe8nAAOQ0wAB7ysAA5DTAAHvLwADkNMAAe8zAAOQ0wAB7zcAA5DTAAHvOwADkNMAAe8/AAOQ0wAB70MAA5DTAAHvRwADkNMAAe9LAAOQ0wAB708AA5DTAAHvUwADkNMAAe9XAAOQ0wAB71sAA5DTAAHvXwADkNMAAe9jAAOQ0wAB72cAA5DTAAHvawADkNMAAe9vAAOQ0wAB73MAA5DTAAHvdwADkNMAAe97AAOQ0wAB738AA5DTAAHvgwADkNMAAe+HAAOQ0wAB74sAA5DTAAHvjwADkNMAAe+TAAOQ0wAB75cAA5DTAAHvmwADkNMAAe+fAAOQ0wAB76MAA5DTAAHvpwADkNMAAe+rAAOQ0wAB768AA5DTAAHvswADkNMAAe+3AAOQ0wAB77sAA5DTAAHvvwADkNMAAe/DAAOQ0wAB78cAA5DTAAHvywADkNMAAe/PAAOQ0wAB79MAA5DTAAHv1wADkNMAAe/bAAOQ0wAB798AA5DTAAHv4wADkNMAAe/nAAOQ0wAB7+sAA5DTAAHv7wADkNMAAe/zAAOQ0wAB7/cAA5DTAAHv+wADkNMAAe//AAOQ0wAB8AMAA5DTAAHwBwADkNMAAfALAAOQ0wAB8A8AA5DTAAHwEwADkM5jJwADlNQDAAOU1wAB8BsAA5TXAAHwIwADlNcAAfArAAOU1wAB8DMAA5DOYxMAA5TtkwADlO4HGwADlO4GNwADlO4ONwADlO1DAAOU7ldjAAOU7wAB6OsAA5TuV08AA5TvAAHo9wADlO8AAQfPAAOU7wAB6QMAA5TvAAHpCwADlO5f6wADlO8AAekXAAOU7oADAAOU7wAB6TsAA5TvAAHpRwADlO8AAelPAAOU7wAB6VcAA5TvAAHpXwADlO5zgwADlO8AASYfAAOU7wAB4XsAA5TvAAHpcwADlO8AAel7AAOQzmMfAAOVVg4DAAOVVvK/AAOVVwABIrsAA5VXAAGx0wADlVcAAekvAANQ9wAB8DsAA5VuYxsAA5VzAAHsFwADlXMAAewbAAOVcwAB7B8AA5VzAAHsIwADlXMAAewnAAOVcwAB7CsAA5VzAAHsLwADlXMAAewzAAOVcwAB7DcAA5VzAAHsOwADlXMAAew/AAOVcwAB7EMAA5VzAAHsRwADlXMAAexLAAOVcwAB7E8AA5VzAAHsUwADlXMAAexXAAOVcwAB7FsAA5VzAAHsXwADlXMAAexjAAOVcwAB7GcAA5VzAAHsawADlXMAAexvAAOVcwAB7HMAA5VzAAHsdwADlXMAAex7AAOVcwAB7H8AA5VzAAHsgwADlXMAAeyHAAOVcwAB7IsAA5VzAAHsjwADlXMAAeyTAAOVcwAB7JcAA5VzAAHsmwADlXMAAeyfAAOVcwAB7KMAA5VzAAHspwADlXMAAeyrAAOVcwAB7K8AA5VzAAHsswADlXMAAey3AAOVcwAB7LsAA5VzAAHsvwADlXMAAezDAAOVcwAB7McAA5VzAAHsywADlXMAAezPAAOVcwAB7NMAA5VzAAHs1wADlXMAAezbAAOVcwAB7N8AA5VzAAHs4wADlXMAAeznAAOVcwAB7OsAA5VzAAHs7wADlXMAAezzAAOVcwAB7PcAA5VzAAHs+wADlXMAAez/AAOVcwAB7QMAA5VzAAHtBwADlXMAAe0LAAOVcwAB7Q8AA5VzAAHtEwADlXMAAe0XAAOVcwAB7RsAA5VzAAHtHwADlXMAAe0jAAOVcwAB7ScAA5VzAAHtKwADlXMAAe0vAAOVcwAB7TMAA5VzAAHtNwADlXMAAe07AAOVcwAB7T8AA5VzAAHtQwADlXMAAe1HAAOVcwAB7UsAA5VzAAHtTwADlXMAAe1TAAOVcwAB7VcAA5VzAAHtWwADlXMAAe1fAAOVcwAB7WMAA5VzAAHtZwADlXMAAe1rAAOVcwAB7W8AA5VzAAHtcwADlXMAAe13AAOVcwAB7XsAA5VzAAHtfwADlXMAAe2DAAOVcwAB7YcAA5VzAAHtiwADlXMAAe2PAAOVcwAB7ZMAA5VzAAHtlwADlXMAAe2bAAOVcwAB7Z8AA5VzAAHtowADlXMAAe2nAAOVcwAB7asAA5VzAAHtrwADlXMAAe2zAAOVcwAB7bcAA5VzAAHtuwADlXMAAe2/AAOVcwAB7cMAA5VzAAHtxwADlXMAAe3LAAOVcwAB7c8AA5VzAAHt0wADlXMAAe3XAAOVcwAB7dsAA5VzAAHt3wADlXMAAe3jAAOVcwAB7ecAA5VzAAHt6wADlXMAAe3vAAOVcwAB7fMAA5VzAAHt9wADlXMAAe37AAOVcwAB7f8AA5VzAAHuAwADlXMAAe4HAAOVcwAB7gsAA5VzAAHuDwADlXMAAe4TAAOVcwAB7hcAA5VzAAHuGwADlXMAAe4fAAOVcwAB7iMAA5VzAAHuJwADlXMAAe4rAAOVcwAB7i8AA5VzAAHuMwADlXMAAe43AAOVcwAB7jsAA5VzAAHuPwADlXMAAe5DAAOVcwAB7kcAA5VzAAHuSwADlXMAAe5PAAOVcwAB7lMAA5VzAAHuVwADlXMAAe5bAAOVcwAB7l8AA5VzAAHuYwADlXMAAe5nAAOVcwAB7msAA5VzAAHubwADlXMAAe5zAAOVcwAB7ncAA5VzAAHuewADlXMAAe5/AAOVcwAB7oMAA5VzAAHuhwADlXMAAe6LAAOVcwAB7o8AA5VzAAHukwADlXMAAe6XAAOVcwAB7psAA5VzAAHunwADlXMAAe6jAAOVcwAB7qcAA5VzAAHuqwADlXMAAe6vAAOVcwAB7rMAA5VzAAHutwADlXMAAe67AAOVcwAB7r8AA5VzAAHuwwADlXMAAe7HAAOVcwAB7ssAA5VzAAHuzwADlXMAAe7TAAOVcwAB7tcAA5VzAAHu2wADlXMAAe7fAAOVcwAB7uMAA5VzAAHu5wADlXMAAe7rAAOVcwAB7u8AA5VzAAHu8wADlXMAAe73AAOVcwAB7vsAA5VzAAHu/wADlXMAAe8DAAOVcwAB7wcAA5VzAAHvCwADlXMAAe8PAAOVcwAB7xMAA5VzAAHvFwADlXMAAe8bAAOVcwAB7x8AA5VzAAHvIwADlXMAAe8nAAOVcwAB7ysAA5VzAAHvLwADlXMAAe8zAAOVcwAB7zcAA5VzAAHvOwADlXMAAe8/AAOVcwAB70MAA5VzAAHvRwADlXMAAe9LAAOVcwAB708AA5VzAAHvUwADlXMAAe9XAAOVcwAB71sAA5VzAAHvXwADlXMAAe9jAAOVcwAB72cAA5VzAAHvawADlXMAAe9vAAOVcwAB73MAA5VzAAHvdwADlXMAAe97AAOVcwAB738AA5VzAAHvgwADlXMAAe+HAAOVcwAB74sAA5VzAAHvjwADlXMAAe+TAAOVcwAB75cAA5VzAAHvmwADlXMAAe+fAAOVcwAB76MAA5VzAAHvpwADlXMAAe+rAAOVcwAB768AA5VzAAHvswADlXMAAe+3AAOVcwAB77sAA5VzAAHvvwADlXMAAe/DAAOVcwAB78cAA5VzAAHvywADlXMAAe/PAAOVcwAB79MAA5VzAAHv1wADlXMAAe/bAAOVcwAB798AA5VzAAHv4wADlXMAAe/nAAOVcwAB7+sAA5VzAAHv7wADlXMAAe/zAAOVcwAB7/cAA5VzAAHv+wADlXMAAe//AAOVcwAB8AMAA5VzAAHwBwADlXMAAfALAAOVcwAB8A8AA5VzAAHwEwADlW5jJwADmXQDAAOZdm/vAAOZdwAB8EcAA5VuYxMAA5mGBBsAA5mGDfMAA5mGDwMAA5mFkwADmYYGNwADmYaAAwADmYcAAek7AAOZhwAB6UcAA5mHAAHpTwADmYcAAelXAAOZhwAB6V8AA5mHAAHp5wADmYcAAenvAAOZhwAB6fcAA5mHAAHp/wADmYZ+ZwADlW5jHwADmcoOAwADmcryvwADmcsAASK7AAOZywABsdMAA5nLAAHpLwADmcsAAenHAAOZywAB6c8AA5nLAAHp1wADmcsAAenfAANQ9wAB8E8AA5nyYycAA5n0AwADmfcAAfAbAAOZ9wAB8CMAA5n3AAHwXwADmfJjEwADmgmTAAOaCgcbAAOaCgY3AAOaCg43AAOaCUMAA5oLAAHpCwADmgpf6wADmgsAAekXAAOaCwAB6UcAA5oLAAHpTwADmgpzgwADmgsAASYfAAOaCwAB4XsAA5nyYx8AA5pCDgMAA5pC8r8AA5pDAAHpLwADUPcAAfBnAAOaUmMbAAOaVwACS0sAA5pa3VcAA5pSYx8AA5pjAAG7nwADmlJjEwADmmphXwADmmsAAeYnAAOaawAB5isAA5prAAHmMwADmmsAAeYvAAOaawAB5jsAA5prAAHmNwADmmsAAeZDAAOaawAB5j8AA5prAAHmUwADmmsAAeZHAAOaawAB5ksAA5prAAHmTwADmmsAAeZXAAOaawABu6cAA5pSYysAA5qoAwADUPcAAfBrAAOasmMbAAOatwACS0sAA5q63VcAA5qyYxMAA5rDAAHrSwADmsMAAetPAAOawwAB61MAA5rDAAHrVwADmsMAAetbAAOawwAB618AA5rDAAEUmwADmsMAARYLAAOawwAB62MAA5rDAAHrZwADmsMAAbu3AAOawwABu6sAA5rDAAHrawADmsMAAetvAAOawwAB63MAA5rDAAHrdwADmsMAAet7AAOawwAB638AA5rDAAEWDwADmsMAARSXAAOawwACS0sAA5sWWY8AA5qyYx8AA5sfAAG9CwADmx6n3wADmx8AAbufAAObHgo/AAOasmMrAAObMAMAA1D3AAHwcwADmzpjHwADmz8AAktLAAObQl0bAAObQt1XAAObPYcAA5s/AAG9CwADmz6n3wADmz8AAbufAAObPgo/AAObOmMTAAObYS8AA5tjAAJLSwADm2sAAeX3AAObYgVjAAObOmMrAAObdAMAA1D3AAHwfwADm35jKwADm4ADAAObfmMfAAObiwACS0sAA5uOXRsAA5uO3VcAA5uJhwADm4sAAb0LAAObiqffAAObiwABu58AA5uKCj8AA5t+YxMAA5utLwADm68AAktLAAObtwAB5fcAA5uuBWMAA1D3AAHwgwADm8JjGwADm8cAAktLAAObyl0bAAObwmMTAAOb0wACS0sAA5vXAAHl9wADm8JjKwADm9wDAANQ9wAB8IcAA5vmYysAA5voAwADm+ZjHwADm/MAAktLAAOb9l0bAAOb9t1XAAOb8YcAA5vzAAG9CwADm/Kn3wADm/MAAbufAAOb8go/AAOb5mMTAAOcFS8AA5wXAAJLSwADnB8AAeX3AAOcFgVjAANQ9wAB8IsAA5wqYxsAA5wvAAJLSwADnDJdGwADnCpjEwADnDsAAktLAAOcPwAB5fcAA5wqYysAA5xEAwADUPcAAfCPAAOcTmMrAAOcUAMAA5xOYx8AA5xbAAJLSwADnF5dGwADnF7dVwADnFmHAAOcWwABvQsAA5xap98AA5xbAAG7nwADnFoKPwADnE5jEwADnH0vAAOcfwACS0sAA5yHAAHl9wADnH4FYwADUPcAAfCTAAOckmMbAAOclwACS0sAA5yaXRsAA5ySYxMAA5yjAAJLSwADnKcAAeX3AAOckmMrAAOcrAMAA1D3AAHwlwADnLZjKwADnLgDAAOctmMfAAOcwwACS0sAA5zGXRsAA5zG3VcAA5zBhwADnMMAAb0LAAOcwqffAAOcwwABu58AA5zCCj8AA5y2YxMAA5zlLwADnOcAAktLAAOc7wAB5fcAA5zmBWMAA1D3AAHwmwADnPpjGwADnP8AAktLAAOdAl0bAAOc+mMTAAOdCwACS0sAA50PAAHl9wADnPpjKwADnRQDAANQ9wAB8J8AA50eYysAA50gAwADnR5jHwADnSsAAktLAAOdLl0bAAOdLt1XAAOdKYcAA50rAAG9CwADnSqn3wADnSsAAbufAAOdKgo/AAOdHmMTAAOdTS8AA51PAAJLSwADnVcAAeX3AAOdTgVjAANQ9wAB8KMAA51iYxsAA51nAAJLSwADnWpdGwADnWJjEwADnXMAAktLAAOddwAB5fcAA51iYysAA518AwADUPcAAfCnAAOdhmMrAAOdiAMAA52GYx8AA52TAAJLSwADnZZdGwADnZbdVwADnZGHAAOdkwABvQsAA52Sp98AA52TAAG7nwADnZIKPwADnYZjEwADnbUvAAOdtwACS0sAA52/AAHl9wADnbYFYwADUPcAAfCrAAOdymMbAAOdzwACS0sAA53SXRsAA53KYxMAA53bAAJLSwADnd8AAeX3AAOdymMrAAOd5AMAA1D3AAHwrwADne5jKwADnfADAAOd7mMfAAOd+wACS0sAA53+XRsAA53+3VcAA535hwADnfsAAb0LAAOd+qffAAOd+wABu58AA536Cj8AA53uYxMAA54dLwADnh8AAktLAAOeJwAB5fcAA54eBWMAA1D3AAHwswADnjJjGwADnjcAAktLAAOeOl0bAAOeMmMTAAOeQwACS0sAA55HAAHl9wADnjJjKwADnkwDAANQ9wAB8LcAA55WYysAA55YAwADnlZjHwADnmMAAktLAAOeZl0bAAOeZt1XAAOeYYcAA55jAAG9CwADnmKn3wADnmMAAbufAAOeYgo/AAOeVmMTAAOehS8AA56HAAJLSwADno8AAeX3AAOehgVjAANQ9wAB8LsAA56aYxsAA56fAAJLSwADnqJdGwADnppjEwADnqsAAktLAAOerwAB5fcAA56aYysAA560AwADUPcAAfC/AAOevmMrAAOewAMAA56+Yx8AA57LAAJLSwADns5dGwADns7dVwADnsmHAAOeywABvQsAA57Kp98AA57LAAG7nwADnsoKPwADnr5jEwADnu0vAAOe7wACS0sAA573AAHl9wADnu4FYwADUPcAAfDDAAOfAmMbAAOfBwACS0sAA58KXRsAA58CYxMAA58TAAJLSwADnxcAAeX3AAOfAmMrAAOfHAMAA1D3AAHwxwADnyZjKwADnygDAAOfJmMfAAOfMwACS0sAA582XRsAA5823VcAA58xhwADnzMAAb0LAAOfMqffAAOfMwABu58AA58yCj8AA58mYxMAA59VLwADn1cAAktLAAOfXwAB5fcAA59WBWMAA1D3AAHwywADn2pjGwADn28AAktLAAOfcl0bAAOfamMTAAOfewACS0sAA59/AAHl9wADn2pjKwADn4QDAANQ9wAB8M8AA5+OYysAA5+QAwADn45jHwADn5sAAktLAAOfnl0bAAOfnt1XAAOfmYcAA5+bAAG9CwADn5qn3wADn5sAAbufAAOfmgo/AAOfjmMTAAOfvS8AA5+/AAJLSwADn8cAAeX3AAOfvgVjAANQ9wAB8NMAA5/SYxsAA5/XAAJLSwADn9pdGwADn9JjEwADn+MAAktLAAOf5wAB5fcAA5/SYysAA5/sAwADUPcAAfDXAAOf9mMrAAOf+AMAA5/2Yx8AA6ADAAJLSwADoAZdGwADoAbdVwADoAGHAAOgAwABvQsAA6ACp98AA6ADAAG7nwADoAIKPwADn/ZjEwADoCUvAAOgJwACS0sAA6AvAAHl9wADoCYFYwADUPcAAfDbAAOgOmMbAAOgPwACS0sAA6BCXRsAA6A6YxMAA6BLAAJLSwADoE8AAeX3AAOgOmMrAAOgVAMAA1D3AAHw3wADoF5jKwADoGADAAOgXmMfAAOgawACS0sAA6BuXRsAA6Bu3VcAA6BphwADoGsAAb0LAAOgaqffAAOgawABu58AA6BqCj8AA6BeYxMAA6CNLwADoI8AAktLAAOglwAB5fcAA6COBWMAA1D3AAHw4wADoKJjGwADoKcAAktLAAOgql0bAAOgomMTAAOgswACS0sAA6C3AAHl9wADoKJjKwADoLwDAANQ9wAB8OcAA6DGYysAA6DIAwADoMZjHwADoNMAAktLAAOg1l0bAAOg1t1XAAOg0YcAA6DTAAG9CwADoNKn3wADoNMAAbufAAOg0go/AAOgxmMTAAOg9S8AA6D3AAJLSwADoP8AAeX3AAOg9gVjAANQ9wAB8OsAA6EKYxsAA6EPAAJLSwADoRJdGwADoQpjEwADoRsAAktLAAOhHwAB5fcAA6EKYysAA6EkAAMAAktPAAOhLmMbAAOhMwACS08AA6E3AAHzCwADoTcAAfMHAAOhNwAB9A8AA6E3AAHzEwADoTcAAfMPAAOhNwAB9BMAA6E3AAH0FwADoTcAAfQbAAOhNwAB9B8AA6E3AAH0KwADoTcAAfQvAAOhNwAB9DMAA6E3AAH0NwADoTcAAbezAAOhNwABt7cAA6E3AAH0OwADoTcAAfQ/AAOhNwAB9EMAA6E3AAH0RwADoTcAAfRLAAOhNwAB9E8AA6E3AAH0UwADoTcAAfRXAAOhNwAB9FsAA6E3AAH0XwADoTcAAfRjAAOhNwAB9GcAA6E3AAH0awADoTcAAfRvAAOhNwAB9HMAA6E3AAH0dwADoTcAAfR7AAOhMwAB9CMAA6EzAAH0JwADoTMAAfR/AAOhLmMTAAOhxwACS08AA6HLAAH0hwADocsAAfSPAAOhywAB9JMAA6HLAAF/+wADocsAAfSbAAOhywAB9KsAA6HLAAH0swADocsAAfS7AAOhywAB9MMAA6HLAAH05wADocsAAfT/AAOhywAB9QsAA6HLAAH1RwADocsAAfVbAAOhywAB9XcAA6HLAAH1pwADocsAAfWzAAOhywAB9eMAA6HLAAH2AwADocsAAfYLAAOhywAB9k8AA6HLAAH2UwADocsAAfZbAAOhywAB9mMAA6HHAAH10wADoccAAfX/AAOhxwAB9g8AA6HHAAH2FwADoccAAfYfAAOhxwAB9iMAA6HHAAH2JwADoccAAfYrAAOhxwAB9i8AA6HHAAH2RwADoccAAfZLAAOhxgenAAOhLwAB8VcAA6JeYxsAA6JjAAF6kwADomICswADomIQ5wADol5jEwADonIKOwADol5jKwADongDAAOhLwAB8WcAA6KCYxsAA6KHAAHxawADoocAAfFvAAOihwAB8XMAA6KCYxMAA6KXAAHxdwADopcAAktPAAOinwAB8X8AA6KfAAHxgwADooJjKwADoqgDAAOhLwAB8YcAA6KyYxsAA6K3AAHxiwADorYPswADorYCswADorYOcwADorcAAfGPAAOismMrAAOizAMAA6EvAAHxkwADotZjGwADotsAAfGXAAOi2wACS08AA6LjAAHxmwADouMAAfGfAAOi4wAB8aMAA6LjAAHxpwADouMAAfGrAAOi4wAB8a8AA6LjAAHxswADouMAAfG3AAOi4wAB8b8AA6LjAAHxwwADouMAAfHHAAOi2wAB8YsAA6LbAAHxuwADotZjEwADoxqq1wADoxsAAfHjAAOjGtAzAAOjGwAB8e8AA6MbAAHx8wADoxsAAktPAAOjMwAB8dsAA6MzAAHx3wADozMAAfILAAOjMwAB8g8AA6MzAAHyBwADozMAAfJbAAOi1mMfAAOjTwACS08AA6NTAAHx5wADo08AAfHrAAOi1mMrAAOjXAMAA6EvAAHyewADo2ZjGwADo2sAAfJ/AAOjawAB8oMAA6NrAAHyhwADo2sAAfKLAAOjawAB8o8AA6NmYxMAA6ODAAHymwADo4MAAfKXAAOjgwAB8scAA6OCI4cAA6NmYysAA6OUAwADoS8AAfLbAAOjnmMbAAOjowAB8t8AA6OiDVsAA6OeYxMAA6OvAAHymwADo68AAfLHAAOjriOHAAOjnmMrAAOjvAMAA6EuAxMAA6PGYxsAA6PLAAHy8wADo8sAAfL7AAOjywACS08AA6PXAAHzAwADo9cAAfMHAAOj1wAB8wsAA6PXAAHzDwADo9cAAfMTAAOj1wAB8xcAA6PGYx8AA6PyWvcAA6PzAAHzHwADo8ZjEwADo/8AAktPAAOkAwAB8ycAA6QDAAHzNwADpAMAAfNHAAOkAwAB81cAA6P/AAHztwADo/7QMwADo/8AAcQfAAOjxmMrAAOkIAADAAJLUwADpCpjFwADpC8AAfaTAAOkLwAB9pcAA6QvAAH2mwADpC8AAfafAAOkLwAB9qMAA6QvAAH2pwADpC8AAfarAAOkLwAB9q8AA6QvAAH2swADpC8AAfa3AAOkLwAB9rsAA6QvAAH2vwADpC8AAfbDAAOkKmMbAAOkZwAB+gcAA6RnAAH6CwADpGcAAfoPAAOkZwAB+hMAA6RnAAH6FwADpGcAAfobAAOkZwAB+h8AA6RnAAHUHwADpGcAAfojAAOkZwAB1CMAA6RnAAH6JwADpGcAAforAAOkZwAB+i8AA6RnAAH6MwADpGcAAfo3AAOkZwAB+jsAA6RnAAH6PwADpGcAAfpDAAOkZwAB+kcAA6RnAAH6SwADpGcAAfpPAAOkZwAB+lMAA6RnAAH6VwADpGcAAfpbAAOkZwAB+l8AA6RnAAH6YwADpGcAAfpnAAOkZwACS1MAA6TXAAH6awADpNcAAfqfAAOkZwAB+psAA6QqYxMAA6TnAAJLUwADpOsAAfqjAAOk6wAB+q8AA6TrAAH6twADpOsAAfrDAAOk6wAB+uMAA6TrAAH7HwADpOsAAfsnAAOk6wAB+y8AA6TrAAH7PwADpOsAAftHAAOk6wAB+08AA6TrAAH7VwADpOcAAfrLAAOk5wAB+tMAA6TnAAH62wADpOcAAfrrAAOk5wAB+u8AA6TnAAH6+wADpOcAAfsHAAOk5wAB+w8AA6TnAAH7EwADpOcAAfsbAAOk5wAB+zcAA6QqYx8AA6VLAAH4RwADpCsAAfbHAAOlUmMTAAOlVtAzAAOlUmMrAAOlXAMAA6QrAAH2ywADpWZjGwADpWsAAfbPAAOlawAB9tMAA6Vq0DMAA6VrAAH21wADpWsAAfbbAAOlawAB9t8AA6VrAAH24wADpWsAAfbnAAOlawAB9usAA6VrAAH27wADpWsAAfbzAAOlZmMrAAOlmAMAA6QrAAH29wADpaJjGwADpacAAktTAAOlqwABqQcAA6WrAAH3AwADpacAAfb7AAOlpwAB9v8AA6WnAAH3CwADpacAAfPfAAOlpwAB9w8AA6WnAAHzkwADpacAAfcTAAOlpwAB9xcAA6WiYxMAA6XXAAJLUwADpdsAAfcfAAOl2wAB9ysAA6XbAAH3PwADpdsAAfdXAAOl2wAB92cAA6XbAAH3awADpdsAAfd7AAOl2wAB9zsAA6XbAAH3hwADpdsAAfeLAAOl2wAB95cAA6XbAAH3mwADpdsAAfefAAOl2wAB96MAA6XbAAH3pwADpdsAAfeTAAOl2wAB97cAA6XbAAHe0wADpdsAAffTAAOl1wAB9xsAA6XXAAH3cwADpdcAAff7AAOlomMnAAOmNAMAA6WiYysAA6Y/AAJLUwADpkIZrwADpCsAAfgDAAOmSmMbAAOmTgL3AAOmTEsAA6ZKYx8AA6ZbAAHzrwADpkpjEwADpmINWwADpmCPAAOmSmMrAAOmbAMAA6QrAAH4SwADpnZjGwADpnsAAfKTAAOmewAB8ucAA6Z7AAH3IwADpnsAAfcnAAOmewAB91MAA6Z2YxMAA6aTAAHymwADppIKMwADppMAAfKvAAOmkwAB8r8AA6aTAAHytwADppMAAfLHAAOmkiOHAAOmdmMrAAOmsAMAA6QrAAH4TwADprpjGwADpr4C9wADpr4CswADprpjEwADpssAAfhTAAOmybMAA6bKW5sAA6a6YysAA6bYAwADpCsAAfhXAAOm4mMbAAOm5wACS1MAA6brAAH4WwADpusAAfhfAAOm4mMTAAOm9tAzAAOm9wAB9+cAA6b3AAH36wADpvcAAfOXAAOm9wACS1MAA6cLAAH4YwADpwsAAfhnAAOnCwAB+GsAA6cLAAH4bwADpwsAAfhzAAOnCwAB+HcAA6cLAAH4ewADpuJjKwADpygDAAOkKwAB+LcAA6cyYxsAA6c3AAH4uwADpzcAAfi/AAOnNwAB+MMAA6c3AAH4xwADpzcAAfjLAAOnNwAB+M8AA6cyYysAA6dQAwADpCsAAfjTAAOnWmMbAAOnXwAB91sAA6dfAAHUxwADp14C9wADp1pjHwADp28AAfjXAAOnWmMTAAOndwAB93MAA6d3AAH3+wADp1pjKwADp4ADAAOkKwAB+OMAA6eKYxsAA6ePAAH45wADp48AAktTAAOnlwAB+OsAA6eKYxMAA6efAAH3XwADp58AAfdjAAOnnwAB93MAA6efAAH3+wADp4pjKwADp7ADAAOkKwAB+RMAA6e6YxsAA6e/AAJLUwADp8MAAfkXAAOnwwAB4ZMAA6fDAAHzAwADp7pjEwADp9IKfwADp9MAAktTAAOn2wAB+RsAA6fbAAH5LwADp9sAAfkzAAOn2wAB+TcAA6e6YysAA6fsAwADpCsAAfl7AAOn9mMbAAOn+J8AA6f7AAJLUwADqACjAAOn+KcAA6f7AAH5fwADp/sAAfmDAAOn+wAB+YcAA6f2YxMAA6gYjwADp/ZjKwADqCADAAOkKh/bAAOoKmMbAAOoLwACS1MAA6gzAAH5iwADqC4NUwADqC4KUwADqC8AAffDAAOoLlnPAAOoLg/TAAOoLgXbAAOoLgcfAAOoKmMfAAOoVwAB99cAA6hWDV8AA6gqYycAA6hjAAH5pwADqCpjEwADqGsAAktTAAOobwAB+bMAA6hvAAH5vwADqG8AAfnTAAOobwAB+ccAA6hrAAH5twADqGojhwADqGsAAffHAAOoawAB+N8AA6hrAAH37wADqGsAAfkLAAOoawAB9/MAA6gqYysAA6ifAAJLUwADqKMAAfmPAAOoowAB+ZMAA6ijAAH5lwADqKMAAfmbAAOonwAB+Z8AA6ieXH8AA6ifAAH5owADpCsAAfnXAAOowmMTAAOoxwAB93MAA6jHAAH3+wADqMJjKwADqNADAAOkKwAB+dsAA6jaYxsAA6jcnwADqN8AAktTAAOo5KMAA6jcpwADqN5v/wADqN5chwADqN8AAfnfAAOo2mMTAAOo/I8AA6jaYysAA6kEAwADpCsAAfmHAAOpDmMbAAOpEgmvAAOpEp/fAAOpDmMnAAOpHpaXAAOpHllrAAOpDmMTAAOpKwAB+ScAA6kOYysAA6kwAwADqTIJkwADpCsAAfnzAAOpPmMrAAOpQAMAA6k+YxMAA6lKWZMAA6lKAq8AA6lKBpcAA6lKWcsAA6lKElcAA6lKWacAA6lKDHMAA6lKD/cAA6lKWbMAA6lKDX8AA6lKWYsAA6lJYwADqUoHWwADqUoCtwADqUpVJwADqUpZwwADqUpZxwADqUpZbwADqUpZvwADqUpZmwADqUpZrwADqUpZuwADqUpZlwADqUiPAAOpPmMfAAOprYcAA6muBVcAA6muDt8AA6muDHsAA6muB6sAA6muAw8AA6QrAAH59wADqcpjGwADqc8AAktTAAOp0wABvqcAA6nTAAH5+wADqdMAAfn/AAOpymMTAAOp4VsAA6niEXsAA6nhLwADqeMAAfczAAOpymMfAAOp9XMAA6nKYysAA6n8AwADpCsAAfoDAAOqBmMbAAOqCo3fAAOqCwACS1MAA6oTAAHdnwADqhMAAUqHAAOqEwABvu8AA6oGYxMAA6ojAAH3uwADqiMAAff/AAOqBmMrAAOqLAADAAJLVwADqjZjGwADqjsAAktXAAOqPwAB9C8AA6o/AAH7XwADqj8AAftjAAOqPwAB+2cAA6o/AAH0YwADqj8AAfRnAAOqPwAB9GsAA6o/AAH0bwADqj8AAfRzAAOqPwAB8Z8AA6o/AAHxowADqj8AAfGrAAOqPwAB9BMAA6o/AAH7awADqjZjEwADqnsAAktXAAOqfwAB+28AA6p/AAHFiwADqn8AAft3AAOqfwAB+3sAA6p/AAF/+wADqn8AAfSHAAOqfwAB9I8AA6p/AAH0kwADqn8AAfuHAAOqfwAB8dsAA6p/AAH7nwADqn8AAfuzAAOqfwAB8g8AA6p/AAH7vwADqn8AAd/PAAOqfwAB+88AA6p/AAH70wADqn8AAfvbAAOqfwAB++ADAAJLWwADqs8AAfv3AAOq0mMrAAOq1AMAA6rPAAH7+wADqt5jKwADquADAAOqzwAB+/8AA6rqYysAA6rsAwADqs8AAfwDAAOq9mMrAAOq+AADAAEzXwADqwJjGwADqwcAATNfAAOrCwACFWcAA6sLAAIVawADqwsAAhVvAAOrCwACFXMAA6sLAAIVdwADqwsAAhV7AAOrCwACFX8AA6sLAAIVgwADqwsAAhWvAAOrCwACFbMAA6sLAAIVtwADqwsAAhW7AAOrCwACFb8AA6sLAAIVwwADqwsAAhXHAAOrCwACFcsAA6sLAAIVzwADqwsAAf3HAAOrCwAB/csAA6sLAAH9zwADqwsAAhXTAAOrCwACFdcAA6sLAAIV2wADqwcAAhWHAAOrBwACFYsAA6sHAAH9JwADqwcAAhWTAAOrBwACBzMAA6sHAAIHOwADqwcAAgdDAAOrBwACB08AA6sHAAIHWwADqwcAAhXfAAOrBwACFeMAA6sCYxMAA6uXAAEzXwADq5sAAd/PAAOrmwACFesAA6ubAAIV7wADq5sAAhXzAAOrmwACFfcAA6ubAAIV+wADq5sAAhYDAAOrmwACFgcAA6ubAAIWDwADq5sAAhYXAAOrmwACFhsAA6ubAAIWIwADq5sAAgZ/AAOrmwACDccAA6ubAAIWKwADq5sAAhYzAAOrmwACFjcAA6ubAAIWOwADq5sAAhY/AAOrmwACFlcAA6uUGwADq5cAAhZLAAOrlwACFlsAA6sCYyMAA6v4UwADqwJjHwADrABTAAOsAwAB/qMAA6wAKwADrAIRCwADrAAvAAOrAwAB/HcAA6waYycAA6wcAwADrBpjEwADrCcAATNfAAOsKwAB/HsAA6wnAAH8gwADrBpjKwADrDcAATNfAAOsOgLXAAOrAwAB/IsAA6xCYycAA6xEAwADrEJjEwADrE8AATNfAAOsUwAB/HsAA6xPAAH8gwADrE4KMwADrE4cRwADrE56vwADrE8AAfyjAAOsThwDAAOsTwAB/K8AA6xOBs8AA6xPAAH8uwADrE60LwADrE2HAAOsThEbAAOsTwAB/M8AA6xCYysAA6yPAAEzXwADrJIC1wADqwMAAfzXAAOsmmMbAAOsnwAB/NsAA6ydOwADrJ5vpwADrJ4DuwADrJpjKwADrLADAAOrAwAB/N8AA6y6YxsAA6y/AAEzXwADrMMAAfzjAAOswnITAAOsumMTAAOszwABM18AA6zTAAH85wADrNMAAfzrAAOs0wAB/O8AA6zTAAH89wADrLpjKwADrOQDAAOrAwAB/PsAA6zuYxsAA6zzAAEzXwADrPZyEwADrPcAAb9rAAOs7mMTAAOtAwABM18AA60HAAH87wADrQcAAfz3AAOs7mMrAAOtEAMAA6sDAAH8/wADrRpjGwADrR8AATNfAAOtInITAAOtIwABv2sAA60aYxMAA60vAAEzXwADrTMAAfzvAAOtMwAB/PcAA60aYysAA608AwADqwMAAf0HAAOtRmMTAAOtSwABHCcAA61LAAH9DwADrUZjKwADrVQDAAOrAwAB/RcAA61eYxMAA61jAAEzXwADrWcAAchzAAOtXmMrAAOtbAMAA6sDAAH9IwADrXZjEwADrXsAATNfAAOtfwAByHMAA612YysAA62EAwADqwMAAf0zAAOtjmMbAAOtkwAB/TcAA62TAAEzXwADrZsAAf07AAOtmwAB/T8AA62bAAH9QwADrY5jEwADrasAATNfAAOtrwAB/UcAA62vAAH9TwADra8AAf1TAAOtjmMrAAOtvAMAA6sDAAH9WwADrcZjGwADrcsAATNfAAOtzwAB/V8AA63GYxMAA63XAAEzXwADrdpyUwADrdsAAf1nAAOt2wAB/W8AA63bAAH9dwADrcZjHwADre8AATNfAAOt8wAB/XsAA63zAAH9fwADrcZjKwADrf8AATNfAAOuAgLXAAOrAwAB/YMAA64KYxsAA64PAAH2VwADrg8AATNfAAOuFwABv2sAA64XAAHJhwADrgpjHwADriIH2wADrgpjEwADrisAATNfAAOuLwAB/YcAA64vAAHDcwADri8AAf2TAAOuLwAB/ZsAA64KYysAA65AAwADqwMAAf2jAAOuSmMbAAOuTwABM18AA65TAAH9pwADrlMAAf2rAAOuSmMrAAOuXAMAA6sDAAH9rwADrmZjKwADrmgDAAOrAwAB/bMAA65yYxsAA653AAEzXwADrnsAAf23AAOuewAB/b8AA657AAHU5wADrnsAAfGfAAOuewABSUsAA657AAH9wwADrnsAAf3HAAOuewAB/csAA657AAH9zwADrnsAAf3TAAOuewAB/dcAA657AAH92wADrnsAAf3fAAOudwAB/bsAA65yYx8AA663AAEzXwADrrsAAf4TAAOuuwAB/hsAA667AAH+HwADrrYRCwADrrQvAAOutCsAA660UwADrrcAAf6jAAOucmMTAAOu3wABM18AA67jAAH+IwADruMAAf4nAAOu4wAB/isAA67jAAH+MwADruMAAf3/AAOu4wAB/lcAA67ikrMAA67jAAH+ewADruMAAf5bAAOu4wAB/ocAA67fAAGCEwADrnJjKwADrxADAAOrAwAB/qcAA68aYxsAA68fAAEzXwADryMAAf6rAAOvIwAB/q8AA68jAAH+swADryMAAf63AAOvIwAB/rsAA68jAAH+vwADryMAAf7TAAOvIwAB/tcAA68fAAH+wwADrx8AAf7HAAOvHwAB/ssAA68fAAH+zwADrx8AAdafAAOvGmMfAAOvWgpTAAOvWlojAAOvWwAB/tsAA69bAAH+3wADr1sAAf7jAAOvWwAB/ucAA69aDxsAA68aYxMAA696WWMAA697AAEzXwADr4MAAf73AAOvgwAB/v8AA695IwADr3iPAAOvGmMnAAOvlgwvAAOvlwABLjcAA68aYysAA6+gAwADqwMAAf8HAAOvqmMbAAOvrgL3AAOvrJ8AA6+vAAHzxwADr6pjEwADr7yPAAOvqmMrAAOvxAMAA6sDAAH/DwADr85jKwADr9ADAAOrAwAB/xMAA6/aYysAA6/cAwADr9pjGwADr+cAATNfAAOv6wAB/xcAA6/aYx8AA6/zAAEzXwADr/cAAf8bAAOv9wAB/x8AA6/3AAH/IwADr/cAAf8nAAOv2mMTAAOwCwABM18AA7APAAHUbwADsA8AAf8rAAOrAwAB/y8AA7AaYxsAA7AfAAH/MwADsB8AAf83AAOwHwAB/zsAA7AfAAH/PwADsB8AAf9DAAOwHwAB/0cAA7AfAAH/SwADsB8AAf9PAAOwHwAB/1MAA7AfAAH/VwADsB8AAf9bAAOwHwAB/18AA7AfAAH/YwADsB8AAf9nAAOwHwAB/2sAA7AfAAH/bwADsB8AAf9zAAOwHwAB/3cAA7AfAAH/ewADsB8AAf9/AAOwHwAB/4MAA7AfAAH/hwADsB8AAf+LAAOwHwAB/48AA7AfAAH/kwADsB8AAf+XAAOwHwAB/5sAA7AfAAH/nwADsB8AAf+jAAOwHwAB/6cAA7AfAAH/qwADsB8AAf+vAAOwHwAB/7MAA7AfAAH/twADsB8AAf+7AAOwHwAB/78AA7AfAAH/wwADsB8AATNfAAOwtwAB/8cAA7C3AAH/ywADsB7mTwADsB8AAf/PAAOwHwAB/9MAA7AfAAH/1wADsB8AAf/bAAOwHwAB/98AA7AfAAH/4wADsB8AAfcPAAOwHwAB/+cAA7AfAAH/6wADsB8AAf/vAAOwHwAB//MAA7AfAAH/9wADsB5VqwADsB8AAf/7AAOwHwAB//8AA7AfAAIAAwADsB8AAgAHAAOwHwACAAsAA7AfAAH9uwADsB8AAgAPAAOwHqU7AAOwGmMTAAOxGlyjAAOxGwACACsAA7EbAAIANwADsRsAAgBHAAOxGwACAH8AA7EbAAEzXwADsTMAAgCLAAOxMwAB1G8AA7EaetMAA7EbAAIApwADsRsAAgCrAAOxGnq/AAOxGwACAO8AA7EaCjsAA7Eah1sAA7EaEUsAA7EbAAIBMwADsRsAAgE3AAOxGwACATsAA7EbAAIBGwADsRsAAgBrAAOxGwACAHMAA7EaCjMAA7EbAAHEHwADsRsAAgFbAAOxGwACAVcAA7EbAAIBSwADsRsAAgCjAAOxGwACAUMAA7EbAAIBawADsRsAAgFvAAOxGpZTAAOxGwACAXcAA7EbAAIBfwADsRsAAgGHAAOxGwACAZMAA7EbAAIBmwADsRsAAgGnAAOxGwACAbcAA7EbAAIAHwADsRsAAgD7AAOxGwACAN8AA7EbAAIA8wADsRsAAgEHAAOxGwACARMAA7EbAAIAVwADsRsAAgBbAAOxGwACAF8AA7EbAAIAmwADsRsAAgC7AAOxGwACAR8AA7EbAAIBKwADsRsAAgEvAAOxGwACAf8AA7EbAAIAbwADsRsAAgF7AAOxGwACAY8AA7EbAAIBgwADsRsAAgGXAAOxGwACAbMAA7EbAAIBuwADsBpjHwADshMAAgDDAAOyEwACAMcAA7ITAAIAywADshMAAgDPAAOyEwACANMAA7ITAAIA1wADshMAATNfAAOyLwAB/yMAA7IvAAH/JwADshJaJwADshJ58wADshMAAdafAAOyEnnvAAOwGmMrAAOySwACABMAA7JLAAIAFwADskoH6wADsksAAcHzAAOySwABM18AA7JfAAIAGwADsksAAgAjAAOySwABwcsAA6sDAAICJwADsm5jGwADsnMAATNfAAOydwACAisAA7J3AAG/awADsncAAgIvAAOydwACAjMAA7JuYxMAA7KKetMAA7KKB+sAA7KKCjMAA7KLAAEzXwADspsAAd9TAAOymwACAkcAA7KbAAICPwADspsAAgJDAAOybmMfAAOyrlonAAOyrwAB1p8AA7JuYyMAA7K7AAEzXwADsr8AAeJbAAOybmMrAAOyxAMAA6sDAAICSwADss5jGwADstMAATNfAAOy1wACAisAA7LXAAG/awADstcAAgJPAAOy1wACAlMAA7LXAAICVwADss5jEwADsu8AAgB/AAOy7wACAEcAA7LuB+sAA7LvAAH/9wADsu56vwADsu4KOwADsu4KMwADsu8AAcQfAAOy7wACAX8AA7LvAAIBhwADsu8AAgGTAAOy7wABM18AA7MfAAHfUwADsx8AAgJHAAOzHwACAkMAA7MfAAICPwADss5jJwADszMAATNfAAOzNwACAmcAA7M3AAICawADss5jHwADs0JaJwADs0J58wADs0MAAdafAAOzQnnvAAOzQwACAncAA7NDAAICWwADss5jIwADs18AAgJ3AAOzXwACAlsAA7NfAAEzXwADs2sAAeJbAAOyzmMrAAOzcAMAA6sDAAICfwADs3pjGwADs38AATNfAAOzgwACAisAA7N6YxMAA7OKetMAA7OKB+sAA7OKCjMAA7N6Yx8AA7OaWicAA7ObAAHWnwADs3pjIwADs6cAATNfAAOzqwAB4lsAA7N6YysAA7OwAwADqwMAAgKHAAOzumMbAAOzvgfnAAOzvwAB8o8AA7O+DYsAA7O+Cj8AA7O/AAHexwADs78AAgKLAAOzumMTAAOz2nEnAAOz2gozAAOz2go7AAOz2n87AAOz2pK7AAOzumMrAAOz8AMAA6sDAAICowADs/pjGwADs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SsAA7nulXsAA7nvAAH9GwADue7bcwADue5/jwADuepjEwADug4jjwADug7TrwADuepjKwADuhgDAAOrAwACBb8AA7oiYxsAA7onAAH9GwADuibbcwADuiZ/jwADuiJjEwADujYjjwADujbTrwADuiJjKwADukADAAOrAwACBcMAA7pKYycAA7pPAAIFxwADuk8AAgXLAAO6SmMTAAO6WwABHCcAA7pbAAH9DwADulsAATNfAAO6ZwACBc8AA7pnAAIF0wADqwMAAgXXAAO6cmMbAAO6dhCbAAO6cmMTAAO6fVsAA7p/AAG5JwADun4KMwADunJjKwADuowDAAOrAwACBdsAA7qWYysAA7qbAAEzXwADup4C1wADqwMAAgXfAAO6pmMrAAO6qwABM18AA7quAtcAA6sDAAIF4wADurZjGwADursAATNfAAO6vn/zAAO6vl2jAAO6vvF/AAO6vsuXAAO6tmMTAAO60VsAA7rTAAG5JwADutIKMwADurZjKwADuuADAAOrAryXAAO66mMfAAO67TsAA7rtewADuu4CswADuu8AAgX3AAO67wACBhMAA7rqYycAA7sEAwADuwcAAgXrAAO7Blx/AAO66mMjAAO7FXsAA7rqYxMAA7sfAAHxXwADux8AAfP3AAO7HwAB9hsAA7sevKsAA7sfAAIF/wADux8AAgYDAAO7HwACBgcAA7sfAAIGDwADux4NhwADux8AAbZ7AAO7HI8AA6sDAAIGGwADu05jGwADu1MAATNfAAO7VwAB/b8AA7tXAAIGHwADu05jHwADu2E7AAO7YXsAA7tiArMAA7tjAAIGEwADu2MAAgX3AAO7TmMTAAO7ewABM18AA7t+I4MAA7t/AAIGLwADu38AAgY3AAO7fwACBj8AA7t/AAIGRwADu35yUwADu38AAgZTAAO7fwACBlsAA7t/AAIGYwADu38AAgajAAO7fwACBqsAA7t/AAIGfwADu38AAgaDAAO7eg6DAAO7eg6HAAO7ewAB8V8AA7t7AAHz9wADu3sAAfYbAAO7eryrAAO7ewACBgcAA7t7AAIGDwADu3oNhwADu3sAAbZ7AAO7eI8AA7tOYyMAA7vhewADu05jKwADu+gDAAO76wACBesAA6sDAAIGuwADu/ZjJwADu/gDAAO79mMTAAO8AwAB/IMAA6sDAAIGvwADvApjGwADvA8AAgbDAAO8DwACBscAA7wPAAIGywADvA8AAgbPAAO8DwACBtMAA7wPAAIG1wADvA8AAgbbAAO8DwACBt8AA7wPAAIG4wADvA8AAgYjAAO8DwABtn8AA7wPAAIGFwADvA8AAXtzAAO8DwACBucAA7wPAAIG6wADvA8AARzTAAO8DwABM18AA7xTAAIG7wADvA8AAf/fAAO8CmMTAAO8XwABM18AA7xjAAIDUwADvGMAAgbzAAO8XwABvpsAA7xfAAG+nwADvF8AAb6jAAO8Xg7XAAO8XgozAAO8XgcfAAO8CmMfAAO8hgfbAAO8CmMrAAO8jAMAA6sDAAIHBwADvJZjGwADvJsAATNfAAO8nwACBwsAA7yfAAIHDwADvJ8AAgcTAAO8nwACBxcAA7yfAAIHGwADvJZjKwADvLQDAAOrAwACBx8AA7y+YxMAA7zDAAEzXwADvMcAAgcjAAO8xwABv48AA7y+YysAA7zQAwADqwAjAAO82mMbAAO83nq/AAO83wACBzMAA7zeCjsAA7zfAAIHOwADvN8AAZUXAAO83wACB0MAA7zfAAIHSwADvN8AAgdPAAO83wACB1cAA7zfAAIHWwADvN8AATNfAAO9CwAB/cMAA7zaYysAA70TAAEzXwADvRYZrwADqwMAAgdjAAO9HmMbAAO9IwACAJcAA70jAAIHZwADvSMAAgdvAAO9IwACB3MAA70jAAIHewADvSMAAgd/AAO9IwACB4cAA70jAAIHiwADvSMAATNfAAO9Rkl3AAO9HmMrAAO9TwABM18AA71SGa8AA6sAHwADvVpjJwADvVwDAAO9Xlx/AAO9XwACBesAA71aYxMAA71vAAHxXwADvW8AAfP3AAO9bwACBgcAA71vAAIGDwADvW50qwADvW8AAgeXAAO9bYcAA71uDo8AA71vAAIHmwADvW8AAgefAAO9bwACB6MAA71vAAIHpwADvW8AAgerAAO9bwACB68AA71vAAIHswADvW8AAge3AAO9bpW3AAO9bgcDAAO9bwACB7sAA71uERMAA71uH3sAA71uEOsAA71uH38AA71vAAFy4wADvW8AAge/AAO9bwACB8MAA71vAAHxYwADvW68fwADvW8AAgfHAAO9bhErAAO9WmMfAAO96wACBhMAA73pOwADqwMAAgfLAAO99mMTAAO9+gozAAO9+gcPAAO9+hxHAAO9+wACB88AA736er8AA737AAIEMwADvfsAAfyjAAO9+g6XAAO9+hwDAAO9+wACB9MAA737AAH8rwADvfoORwADvfoG7wADvfoHCwADvfoGzwADvfsAAgfXAAO9+wAB/LsAA737AAIH2wADvfq0LwADvfsAAgffAAO9+YcAA736Do8AA736ERsAA737AAIH4wADvfsAAfzPAAO9+wACB+cAA737AAIH6wADvfsAAgfvAAO9+I8AA732Yx8AA75xOwADvfZjKwADvngDAAOrAgiXAAO+gmMbAAO+hIsAA76FOwADvoYNNwADvoJjEwADvpSPAAO+gmMrAAO+nAMAA6sDAAIH9wADvqZjGwADvqsAATNfAAO+rwABv2sAA76vAAH9vwADvq8AAgf7AAO+rwAByjMAA76vAAETWwADvq8AAgf/AAO+rwACCAMAA76vAAIIBwADvq7xfwADvq8AAggLAAO+pmMTAAO+2gfrAAO+2wABM18AA77jAAIIEwADvuMAAggbAAO+4wACCBcAA77ikrMAA76mYysAA770AwADvvcAAggPAAOrAwACCDMAA78CYxsAA78HAAEzXwADvwsAAgg3AAO/CwACCDsAA78CYxMAA78WcScAA78WCjMAA78CYysAA78gAwADvyMAAgg/AAOrAwACCEcAA78uYxsAA78zAAEzXwADvzcAAf2/AAO/NwACBh8AA78uYx8AA79BOwADv0MAAgYTAAO/LmMTAAO/TwABM18AA79TAAH9fwADv1MAAghLAAO/UwACBkcAA79SclMAA79TAAIIYwADv1MAAghrAAO/UwACBqMAA79TAAIGUwADv1MAAgh7AAO/UwACBqsAA79TAAIGWwADv1MAAgiPAAO/UwACCJsAA79TAAIIrwADv1MAAgi7AAO/UwACCMsAA79TAAII2wADv1MAAgjnAAO/UwAB1zsAA79TAAII9wADv1MAAgj/AAO/UwACCQ8AA79ODoMAA79ODocAA79PAAHxXwADv08AAfP3AAO/TwACBgcAA79PAAIGDwADv050qwADv08AAgeXAAO/TpW3AAO/TYcAA79ODo8AA79PAAIHmwADv08AAgefAAO/TwACB6MAA79PAAIHpwADv08AAgerAAO/TwACB68AA79PAAIHswADv08AAge3AAO/TgcDAAO/T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ScAA8XOERsAA8XOCjMAA8W6Yx8AA8X2fzsAA6sDAAIMrwADxf5jGwADxgMAATNfAAPGBiBXAAPGBwACDLMAA8YHAAIMtwADxgcAAgy7AAPGBwABuR8AA8YHAAIMvwADxgcAAcEPAAPF/mMTAAPGJVsAA8YmcR8AA8YmcScAA8YmERsAA8YmCjMAA8YnAAEzXwADxj8AAgzPAAPGPwACDNMAA8Y/AAIM1wADxf5jHwADxk5/OwADxk8AATNfAAPGVwABv2sAA8X+YysAA8ZcAwADqwMAAgzbAAPGZmMbAAPGawABM18AA8ZvAAIM3wADxm8AAgzjAAPGZmMfAAPGewABR/cAA8ZmYyMAA8aDAAFH9wADxmZjEwADxooKOwADxop/6wADxooIDwADxooQWwADxmZjKwADxpwDAAOrAwACDOsAA8amYxsAA8arAAEzXwADxq8AAgzvAAPGrwAB3e8AA8avAAIM8wADxq8AAgz3AAPGrwAByYcAA8arAAIM+wADxqsAAgz/AAPGqwACDQMAA8arAAINBwADxqsAAg0LAAPGqwACDQ8AA8arAAINEwADxqsAAg0XAAPGqwACDRsAA8arAAINHwADxqsAAg0jAAPGqwABDi8AA8arAAINJwADxqsAAg0rAAPGqwACDS8AA8arAAINMwADxqsAAg03AAPGqwACDTsAA8arAAINPwADxqsAAg1DAAPGqwACDUcAA8arAAINSwADxqsAAg1PAAPGqwACDVMAA8arAAINVwADxqsAAg1bAAPGqwACDV8AA8arAAINYwADxqsAAg1nAAPGqwACDWsAA8arAAINbwADxqsAAg1zAAPGqwACDXcAA8arAAINewADxqsAAg1/AAPGqwACDYMAA8arAAINhwADxqsAAg2LAAPGqwACDY8AA8arAAINkwADxqsAAg2XAAPGqwACDZsAA8arAAINnwADxqZjEwADx3MAATNfAAPHdwACDaMAA8d3AAINpwADx3cAAg2rAAPHdwACCUcAA8amYysAA8eIAwADqwIJBwADx5JjJwADx5QDAAPHlwACBesAA8eWXH8AA8eSYxMAA8enAAHxXwADx6cAAfP3AAPHpwACDbcAA8emsl8AA8enAAIF/wADx6cAAgYDAAPHpwACBgcAA8enAAIGDwADx6YJJwADx6cAAg27AAPHkmMfAAPH0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TNfAAPNugLXAAOrAwACEQcAA83CYxsAA83HAAEzXwADzcsAAgIrAAPNywABv2sAA83KchMAA83LAAIRCwADzcrxfwADzccAAgLjAAPNxwACAucAA83HAAIQ/wADzcJjEwADze560wADze4H6wADze4KMwADze8AATNfAAPN/wABwzsAA83/AAICQwADzf8AAgI/AAPNwmMfAAPODlonAAPODwAB1p8AA83CYyMAA84bAAEzXwADzh8AAeJbAAPNwmMrAAPOJwABM18AA84qAtcAA6sDAAIRFwADzjJjJwADzjcAATNfAAPOOgLXAAPOMmMTAAPOQwACAH8AA85DAAIARwADzkMAAeBjAAPOQwACEScAA85DAAIC2wADzjJjHwADzlsAAgLrAAPOWwACAvMAA6sDAAIRLwADzmZjEwADzmsAAgB/AAPOawACAEcAA85rAAHgYwADzmsAAhEnAAPOawACAtsAA85mYx8AA86DAAIC6wADzoMAAgLzAAPOZmMrAAPOjAMAA6sDAAIRMwADzpZjJwADzpsAATNfAAPOngLXAAPOlmMfAAPOpwACA+cAA86nAAID8wADzqcAAbpbAAPOpwACA/8AA86nAAIEBwADzqcAAgQPAAPOpwACBBsAA6sDAAIRNwADzsZjGwADzsoLSwADzssAAhE7AAPOywACET8AA87LAAIRQwADzssAAhFHAAPOywACEUsAA87LAAIRTwADzsZjKwADzugDAAOrAwACEVMAA87yYxsAA873AAIRVwADzvcAAhFbAAPO9wACEV8AA873AAIRYwADzvcAAhFnAAPO9wACEWsAA873AAIRbwADzvcAAhFzAAPO9wABM18AA88bAAICKwADzxsAAhF3AAPPGwABv2sAA88bAAHCQwADzxsAAhF7AAPPGwACEX8AA88bAAIRgwADzxsAAhGHAAPPGwACAlMAA88bAAICTwADzxsAAhGLAAPPGwACEY8AA88bAAIRkwADzxsAAhGXAAPPGwACEZsAA88bAAIRnwADzxsAAgf/AAPPGwACEaMAA88bAAIRpwADzxsAAhGrAAPPGwACEa8AA88bAAIRswADzxsAAhG3AAPO9wAB1p8AA873AAIDDwADzvYJXwADzvcAAgLjAAPO9wACAucAA873AAIRGwADzvJjEwADz5MAATNfAAPPlwACEdcAA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wAD/V8AAivfAAP9Xno7AAP9XEsAA/1eDxsAA/zqYycAA/3DAAIs+wAD/cADAAP9wg0TAAP9wg0XAAP9wgb3AAP9wwACCacAA/zqYxMAA/3eb+MAA/3jAAItEwAD/eMAAi0bAAP94muPAAP94wACLSsAA/3jAAItRwAD/eMAAi1XAAP94wACLWsAA/3jAAItcwAD/eMAAi17AAP94wACLaMAA/3jAAItpwAD/eMAAi2/AAP94wACLcMAA/3jAAItxwAD/eMAAi3TAAP94wACLdcAA/3jAAIt2wAD/eMAAi3vAAP94wACLfMAA/3jAAIt9wAD/eMAAi4HAAP94wACLgsAA/3jAAIuFwAD/eMAAi4bAAP94wACLisAA/3jAAIuNwAD/eMAAhhDAAP94wACLj8AA/3jAAIuQwAD/eMAAi5HAAP94wACLlcAA/3jAAIuXwAD/eMAAi5jAAP94wACLmcAA/3jAAIuqwAD/eMAAi63AAP94wACLQ8AA/3jAAIuxwAD/eMAAeX3AAP94wACLssAA/3jAAIu0wAD/eMAAi7fAAP94wACLucAA/3jAAIu9wAD/eMAAi77AAP93gdrAAP93iGbAAP93nqzAAP93nLTAAP93bMAA/3eDQsAA/3eBv8AA/3cjwAD/d0jAAP86mMrAAP+vm/jAAP+whmvAAPY6wACLv8AA/7KYxsAA/7Ob+MAA/7TAAIvAwAD/tLThwAD/tMAAi8HAAP+0wACLwsAA/7TAAIvDwAD/tMAAi8TAAP+0wACLxcAA/7TAAIvGwAD/spjJwAD/vZ0gwAD/vcAAi8rAAP+9lx/AAP+ymMTAAP/Bm/jAAP/CwABE4MAA/8LAAIvUwAD/wsAAf7/AAP/CwACL4sAA/8GDC8AA/8GVqMAA/8GVqcAA/8EjwAD/spjHwAD/y4CswAD/y8AAfOvAAP/LwAB8uMAA/8vAAIvawAD/y8AAi93AAP/LmrvAAP+ymMrAAP/Sm/jAAP/TgLXAAPY6wACL5MAA/9WYxsAA/9ab+MAA/9eubcAA/9fAAIvlwAD/18AAi+bAAP/XwACL58AA/9fAAIvowAD/18AAi+nAAP/XwACL6sAA/9fAAIvrwAD/18AAiyzAAP/VmMfAAP/hqezAAP/hnLPAAP/hwACLS8AA/+HAAIr2wAD/4ZyxwAD/4ZyywAD/4Zv4wAD/6MAAi+zAAP/owACL7cAA/+jAAIvuwAD/6MAAi+/AAP/hwACK98AA/+GZdMAA/+GDQcAA/+GBvMAA/+HAAIrvwAD/4ZaHwAD/4ZaIwAD/4ZaJwAD/4U7AAP/hlorAAP/hlovAAP/hno7AAP/hgx3AAP/hwAB87MAA/+HAAIr1wAD/4RLAAP/hg8bAAP/VmMTAAP/+m/jAAP//wACL8MAA///AAIvzwAD//8AAi/XAAP//wACLqsAA///AAIv2wAD//oHawAD//py0wAD//p6swAD//ohmwAD//mzAAP/+g0LAAP/+gb/AAP/+SMAA//4jwAD/1ZjKwAEADgDAAPY6wACL+8ABABCYxsABABGb+MABABK3VcABABCYx8ABABQSwAEAEJjKwAEAFgAAwACS2MABABiYxcABABnAAIxAwAEAGcAAjEHAAQAZwACMQ8ABABiYxsABAB3AAJLYwAEAHsAAkNDAAQAewACQ0cABAB7AAJDSwAEAHsAAkNPAAQAewACFbsABAB7AAJDUwAEAHsAAkNXAAQAewACQ1sABAB7AAIVtwAEAHsAAkNfAAQAewACQ2MABAB7AAJDZwAEAHsAAkNrAAQAewACQ28ABABiYxMABAC3AAJLYwAEALsAAkNzAAQAYwACMRMABADCYxsABADHAAIxFwAEAMcAAjEbAAQAxwACMR8ABADCYx8ABADXAAIxIwAEANZaJwAEANcAAdafAAQAwmMTAAQA5nrTAAQA5wACMScABADmCjMABADnAAIxMwAEAMJjJwAEAPsAAjErAAQAwmMjAAQBAwACMS8ABABjAAIxNwAEAQpjGwAEAQ6SpwAEAQ8AAUOXAAQBDwACMTsABAEO048ABAEKYysABAEgAwAEAGMAAjE/AAQBKmMbAAQBLwACMUMABAEvAAIxRwAEAS8AAjFPAAQBLwACMVcABAEvAAIxXwAEAS8AAjFnAAQBLwACMW8ABAEvAAIxdwAEAS8AAjF/AAQBLwACMYcABAEvAAIxiwAEAS8AAjGTAAQBLwACMZsABAEvAAIxowAEAS8AAjGrAAQBLwACMbMABAEvAAIxuwAEAS8AAjHDAAQBLwACMccABAEvAAIxzwAEAS8AAjHXAAQBLwACMdsABAEvAAIx3wAEAS8AAjHjAAQBLwACMesABAEvAAIx8wAEAS8AAjH7AAQBLwACMgMABAEvAAIyCwAEAS8AAjITAAQBLwACMhcABAEvAAIyHwAEAS8AAjIjAAQBLwACMisABAEvAAIyMwAEAS8AAjI3AAQBLwACMj8ABAEvAAIxFwAEAS8AAjJHAAQBLwACMk8ABAEvAAIyVwAEAS8AAjJfAAQBLwACMmcABAEvAAIybwAEAS8AAjJ3AAQBLwACMnsABAEvAAIyfwAEAS8AAjKHAAQBLwACMo8ABAEvAAIylwAEAS8AAjKfAAQBLwACMqcABAEvAAIyrwAEAS8AAjK3AAQBLwACMr8ABAEvAAIyxwAEAS8AAjLPAAQBLwACMtcABAEvAAIy3wAEAS8AAjLnAAQBLwACMu8ABAEvAAIy9wAEAS8AAjL/AAQBLwACMwcABAEvAAIzDwAEAS8AAjMXAAQBLwACMx8ABAEvAAIzJwAEAS8AAjMvAAQBLwACMzcABAEvAAIzPwAEAS8AAjNHAAQBLwACM08ABAEvAAIzVwAEAS8AAjNfAAQBLwACM2cABAEvAAIzbwAEAS8AAjN3AAQBLwACM38ABAEvAAIzhwAEAS8AAjOPAAQBLwACM5cABAEvAAIznwAEAS8AAjOnAAQBLwACM68ABAEvAAIztwAEAS8AAjO/AAQBLwACM8cABAEvAAIzzwAEAS8AAjPXAAQBLwACM98ABAEvAAIz5wAEAS5UtwAEAS8AAjPzAAQBLwACM/sABAEvAAI0AwAEAS8AAjQLAAQBLwACNBMABAEvAAI0GwAEAS8AAjQfAAQBLwACNCcABAEvAAI0KwAEAS8AAjQzAAQBLwACNDcABAEvAAI0PwAEAS8AAjRDAAQBLwABNY8ABAEvAAIkNwAEAS8AAjRLAAQBLlojAAQBLlonAAQBLnn7AAQBLwACNE8ABAEueeMABAEvAAI0UwAEASpjEwAEAv0vAAQC/gJbAAQC/VsABAL+XUMABAL+EXsABAL+XKcABAL+D/cABAL/AAI0VwAEAv4JGwAEASpjKwAEAyQDAAQAYwACNFsABAMuYycABAMwAwAEAy5jEwAEAzoMLwAEAziPAAQDLmMfAAQDRgJbAAQDRmrvAAQAYwACNGsABANSYx8ABANW0EsABANW5kcABANSYxMABANjAAH+cwAEA1JjIwAEA2sAAcA/AAQDUmMrAAQDcAMABABieY8ABAN6YxsABAN+BssABAN/AAI0cwAEA37FUwAEA38AAjR7AAQDfgmTAAQDfwACNIMABAN+CeMABAN+80cABAN6YycABAOgAwAEA3pjEwAEA6oMLwAEA3pjHwAEA7MAAfOvAAQDswACNJMABAOzAAI0lwAEA7MAAfLjAAQAYwACNJsABAPGYxsABAPKAvcABAPKAlsABAPLAAIkNwAEA8sAAjSfAAQDyt1zAAQDyTsABAPLAAHgYwAEA8sAAjSjAAQDxmMnAAQD7AMABAPvAAI0pwAEA8ZjEwAEA/iPAAQAYwACNKsABAQCYx8ABAQHAAI0TwAEBAZZzwAEBAYCswAEBAcAAjSvAAQEBnn3AAQEBwACNLMABAQGeeMABAQHAAISDwAEBAcAAjS3AAQEBwACNLsABAQGeesABAQGDV8ABAQCYysABAQ4AwAEAGMAAjS/AAQEQmMbAAQERwACNE8ABARGDWMABARGDXMABARGeeMABARHAAI0wwAEBEZ55wAEBEJjHwAEBGJ59wAEBGMAAjSzAAQEYnnrAAQEQmMTAAQEcwABAVcABARzAAI0xwAEBEJjKwAEBHwDAAQAYnmTAAQEhmMbAAQEiwACNM8ABASLAAI00wAEBIsAAjTbAAQEiwACNN8ABASLAAIxHwAEBIsAAjTnAAQEiwAB9LcABASLAAI06wAEBIsAAjTvAAQEhmMnAAQEsAMABASGYxMABAS6lbcABAS7AAI09wAEBLpp8wAEBLoNVwAEBLsAAfLHAAQEunnXAAQEul4XAAQEuwACNPsABAS7AAEcawAEBLsAAjT/AAQEunYHAAQEuwACNQMABAS6D78ABAS7AAI1BwAEBLsAAjUPAAQEuwACNR8ABAS7AAI1JwAEBLoKMwAEBIZjIwAEBQcAAjULAAQFBwACNRsABAUHAAI1IwAEBQcAAjUrAAQAYnmXAAQFGmMbAAQFHnnjAAQFHwACNS8ABAUfAAI1MwAEBR8AAjRPAAQFHnnnAAQFGmMfAAQFNlnPAAQFNgKzAAQFNnn3AAQFNwACNLMABAU2fzsABAU2eesABAUaYxMABAVSCjMABAUaYysABAVYAwAEAGMAAjU3AAQFYmMfAAQFZg1jAAQFZg1zAAQFZwACNE8ABAVnAAI1OwAEBWZ54wAEBWcAAjU/AAQFZwACNUMABAVmefcABAVnAAI0swAEBWcAAhIPAAQFZnnrAAQFYmMTAAQFlwABAVcABAWXAAI0xwAEBWJjKwAEBaADAAQAYwACNUsABAWqYxsABAWsnwAEBa8AAktjAAQFtKMABAWspwAEBa8AAjVbAAQFrwACNV8ABAWvAAI1YwAEBapjEwAEBcyPAAQFqmMrAAQF1AMABABjAAI1ZwAEBd5jKwAEBeADAAQAYwACNWsABAXqYycABAXsAwAEAGMAAjVzAAQF9mMnAAQF+AMABABjAAI1dwAEBgJjHwAEBgZ57wAEBgZ58wAEBgcAAf/vAAQGAmMrAAQGFAMABABjAAI1ewAEBh5jHwAEBiINYwAEBiJZzwAEBiIRgwAEBh5jKwAEBjADAAQAYwACNX8ABAY6Yx8ABAY/AAHyjwAEBj8AAjWDAAQGOmMrAAQGSAMABABjAAI1hwAEBlJjGwAEBlSLAAQGVgKzAAQGUmMTAAQGYI8ABAZSYysABAZoAwAEAGMAAjWTAAQGcmMbAAQGdIsABAZ3AAI1QwAEBnJjEwAEBoCPAAQGcmMfAAQGigKzAAQGcmMrAAQGkAMABABjAAI1mwAEBppjGwAEBp8AAjWfAAQGnwACNaMABAafAAI1pwAEBp8AAjWrAAQGnwACS2MABAazAAI1rwAEBrMAAjWzAAQGswACNbcABAazAAI1uwAEBppjEwAEBscAAgT/AAQGxwACNb8ABAbHAAI1wwAEBscAAjXTAAQGmmMrAAQG2AMABABjAAHH/wAEBuJjGwAEBucAAktjAAQG6wACNesABAbrAAI17wAEBusAAjXzAAQG6wABu38ABAbrAAG7gwAEBusAAbtzAAQG6wACNfcABAbrAAI1+wAEBuJjEwAEBw1bAAQHDgozAAQHDwABVN8ABAcPAAJLYwAEBx8AAjYHAAQHHwACNgsABAcfAAG7wwAEBx8AAjYPAAQHHwACNgMABAcfAAI2GwAEBx8AAjYXAAQHHwABu48ABAcfAAG7kwAEBuJjHwAEB0cAAbj/AAQG4mMrAAQHTAMABABjAAI2QwAEB1ZjGwAEB1sAAktjAAQHXwACNkcABAdfAAI2SwAEB1ZjEwAEB2sAAVTfAAQHawACS2MABAdzAAI2BwAEB1ZjKwAEB3gDAAQAYwACNlMABAeCYxsABAeHAAJLYwAEB4sAAjZXAAQHgmMTAAQHkwABVN8ABAeTAAJLYwAEB5sAAjYHAAQHgmMrAAQHoAMABABjAAI2WwAEB6pjEwAEB64gdwAEB64MLwAEB68AAktjAAQHuwACNvsABAeqYysABAfAAwAEAGMAAjdTAAQHymMbAAQHzwACS2MABAfTAAI3VwAEB9MAAjdbAAQH0wACN18ABAfTAAI3YwAEB9MAAjdnAAQH0wACN2sABAfTAAH+0wAEB9MAAfMLAAQH0wACN28ABAfPAAI0uwAEB8pjEwAEB/0vAAQH/gJbAAQH/VsABAf/AAJLYwAECA8AAbzrAAQIDtCvAAQIDwACN78ABAgPAAI3wwAECA8AAjerAAQIDwACN7MABAgPAAI3xwAECA8AAjevAAQIDwACN7cABAgPAAI3uwAECA8AAjejAAQIDwABsMsABAgPAAI3fwAECA8AAjenAAQIDwACN9sABAgPAAINpwAECA8AAbPnAAQIDwACN+MABAgPAAI3+wAECA8AAjgDAAQH/l1DAAQH/hF7AAQH/lynAAQH/g/3AAQH/wACNFcABAf+CRsABAf8jwAEB8pjHwAECH554wAECH8AAjRPAAQIfwACNFMABAh+WiMABAh+WicABAh/AAI0SwAECH8AATWPAAQIfwACJDcABAh+efsABAfKYyMABAimeeMABAinAAI0TwAECKcAAjRTAAQIplojAAQIplonAAQIpwACNEsABAinAAE1jwAECKcAAiQ3AAQIpnn7AAQHymMrAAQIzAMABABjAAI4CwAECNZjGwAECNsAAktjAAQI3lzjAAQI3wAB41cABAjfAAI4DwAECNZjEwAECO4MLwAECO8AAktjAAQI9wACOBMABAj3AAH+/wAECOyPAAQI1mMfAAQJBgJbAAQJBmrvAAQI1mMrAAQJEAMABABjAAI4KwAECRpjGwAECR8AAktjAAQJIwACOC8ABAkjAAI4MwAECRpjEwAECS4MLwAECRpjHwAECTcAAfOvAAQJNwACNJMABAk3AAI0lwAECTcAAfLjAAQJGmMrAAQJSAMABAlLAAJLYwAECVIC1wAEAGMAAjg7AAQJWmMbAAQJXwACS2MABAlgowAECWJc4wAECV8AAiQ3AAQJXwACNJ8ABAle3XMABAldOwAECV8AAjSjAAQJXwAB4GMABAlaYx8ABAmGAvcABAmGAlsABAlaYyMABAmSAvcABAmSAlsABAlaYxMABAmfAAJLYwAECaMAAjg/AAQJowACOHMABAmjAAI4AwAECZyPAAQJWmMrAAQJtAMABAm3AAI0pwAEAGMAAhLDAAQJwmMbAAQJxwACS2MABAnLAAH/FwAECcJjHwAECdMAAktjAAQJ1wAB/xsABAnXAAH/HwAECdcAAf8jAAQJ1wAB/ycABAnCYxMABAnrAAJLYwAECe8AAdRvAAQJ7wAB/ysABAnCYysABAn4AwAEAGMAAgTDAAQKAmMbAAQKBwACS2MABAoLAAI4fwAECgsAAgTLAAQKCnS/AAQKCmFPAAQKAmMTAAQKHVsABAoeXecABAofAAJLYwAECisAAQ03AAQKKwACBM8ABAoeXisABAofAAIEvwAECh4JGwAECgJjHwAECkGHAAQKQgVXAAQKQg7fAAQKAmMrAAQKUAMABABjAAI4gwAEClpjGwAECl8AAktjAAQKYwACOIcABApjAAI4iwAECmMAAcJDAAQKXwACOI8ABApeefcABApfAAI4kwAECl4NYwAECl4NcwAECl5ZzwAECl4CswAECl8AAjiXAAQKWmMfAAQKkwACOJsABAqTAAI4nwAEClpjEwAECp4H6wAECp4KMwAEClpjKwAECqgDAAQAYwACOKMABAqyYxsABAq3AAJLYwAECrsAAjinAAQKuwACOKsABAqyYx8ABArHAAI0swAECsZ59wAECscAAjS7AAQKxwACNE8ABArGeeMABAqyYysABArcAwAEAGMAAjivAAQK5mMbAAQK6wACS2MABArvAAI4pwAECu8AAjirAAQK5mMfAAQK+wACNLMABAr6efcABAr7AAI0uwAECvsAAjRPAAQK+nnjAAQK5mMrAAQLEAMABABjAAI4swAECxpjGwAECx4NXwAECx8AAktjAAQLJwACOLcABAsnAAI4uwAECycAAji/AAQLJwACOMMABAsaYxMABAs6B+sABAsaYx8ABAtCArMABAtDAAI0rwAEC0JZzwAEC0MAAjS3AAQLQnnrAAQLQwACEg8ABAsaYysABAtcAwAEAGMAAjj3AAQLZmMbAAQLawACS2MABAtvAAH0NwAEC28AAjj7AAQLawACNTsABAtmYx8ABAt/AAI1QwAEC34NYwAEC34NcwAEC38AAhIPAAQLfwACNLMABAt/AAI1PwAEC3556wAEC38AAktjAAQLnwACOScABAufAAI5LwAEC2ZjEwAEC6sAAktjAAQLrwACOQMABAuvAAI5MwAEC6sAAQFXAAQLqgfrAAQLqwACNMcABAtmYysABAvEAwAEAGMAAjl/AAQLzmMTAAQL0iOPAAQL0tOvAAQLzmMrAAQL3AMABABjAAI5gwAEC+ZjGwAEC+sAAktjAAQL7iBXAAQL5mMTAAQL9VsABAv2CjMABAvmYysABAwAAwAEAGMAAgyvAAQMCmMbAAQMDwACS2MABAwSIFcABAwTAAIMswAEDBMAAgy3AAQMEwACDLsABAwTAAG5HwAEDBMAAgy/AAQMEwABwQ8ABAwKYxMABAwxWwAEDDJxHwAEDDJxJwAEDDIRGwAEDDIKMwAEDDMAAktjAAQMSwACDM8ABAxLAAIM0wAEDEsAAgzXAAQMCmMfAAQMWn87AAQMWwACS2MABAxjAAG/awAEDApjKwAEDGgDAAQAYwACDNsABAxyYxsABAx3AAJLYwAEDHsAAgzfAAQMewACDOMABAxyYx8ABAyHAAFH9wAEDHJjIwAEDI8AAUf3AAQMcmMTAAQMlgo7AAQMln/rAAQMlggPAAQMlhBbAAQMcmMrAAQMqAMABABjAAI5iwAEDLJjGwAEDLcAAktjAAQMuwACOY8ABAy7AAI5kwAEDLq5twAEDLsAAjmXAAQMtnn3AAQMsmMfAAQM0wACNE8ABAzSeeMABAzSeecABAzTAAFH9wAEDNMAAktjAAQM5wACOa8ABAyyYyMABAzvAAI0TwAEDO554wAEDO555wAEDLJjEwAEDP1bAAQM/go7AAQM/wACS2MABA0LAAI5qwAEDLJjKwAEDRADAAQAYwACObMABA0aYxsABA0fAAJLYwAEDSMAAjm3AAQNIwACObsABA0jAAI4qwAEDSMAAjj7AAQNIwACOb8ABA0jAAI5wwAEDRpjHwAEDT8AAktjAAQNQwACOa8ABA0/AAI0swAEDT4NYwAEDT4NcwAEDT556wAEDT8AAjTDAAQNGmMjAAQNXg1jAAQNXg1zAAQNXwACNMMABA0aYxMABA1vAAEBVwAEDW8AAjTHAAQNbwACS2MABA17AAI5qwAEDXsAAjnPAAQNGmMrAAQNhAMABABjAAI6iwAEDY5jGwAEDZJZzwAEDZICswAEDZMAAjSzAAQNkwACS2MABA2jAAH0NwAEDaMAAjkLAAQNowACOo8ABA2jAAI5SwAEDaMAAjqTAAQNowACOpcABA2jAAI6mwAEDaMAAjj/AAQNjmMfAAQNxn87AAQNxwACNTMABA3HAAI1LwAEDcZ56wAEDY5jEwAEDdoKMwAEDdsAAktjAAQN4wACOqMABA3jAAHArwAEDeMAAjqvAAQN4wACOasABA2OYyMABA33AAI1MwAEDfcAAjUvAAQNjmMrAAQOAAMABABjAAI6wwAEDgpjGwAEDg8AAktjAAQOEwACOscABA4KYxMABA4ZWwAEDhsAAbknAAQOGgozAAQOCmMrAAQOKAMABABjAAI6ywAEDjJjGwAEDjcAAktjAAQOOwACOs8ABA47AAI60wAEDjsAAgyzAAQOOmFPAAQOOnS/AAQOOwACOtsABA47AAI63wAEDjsAAjrjAAQOOwACOucABA47AAI66wAEDjsAAjrvAAQOOwACOvMABA47AAI69wAEDjsAAjr7AAQONwAB8o8ABA43AAI61wAEDjcAAjmjAAQONwACN4MABA43AAI0TwAEDjcAAjmfAAQOMmMTAAQOjwACNMsABA6OcScABA6OCjMABA6PAAI56wAEDo8AAktjAAQOowACOxsABA6jAAI7CwAEDqMAAc7bAAQOowACOw8ABA4yYx8ABA62fzsABA4yYyMABA6/AAH9JwAEDjJjKwAEDsQDAAQAYwACOzMABA7OYxsABA7SD1sABA7TAAJLYwAEDtsAAgIrAAQO2wACOr8ABA7bAAIRCwAEDtsAAjs3AAQO2nITAAQO2wAB9DcABA7bAAI7OwAEDtsAAjs/AAQO2wACO0MABA7bAAI7RwAEDtsAAjtLAAQO0wABHNMABA7OYxMABA8Oh1sABA8PAAI0xwAEDw8AAf5zAAQPDgozAAQPDwACO58ABA8PAAGJPwAEDw8AAjuzAAQPDwACO38ABA7OYx8ABA8yeesABA7OYysABA84AwAEAGMAAju3AAQPQmMbAAQPRwACEQ8ABA9HAAIwCwAED0JjKwAED1ADAAQAYwACO7sABA9aYxsABA9eD1sABA9eWiMABA9eWicABA9fAAI7qwAED14JXwAED18AAktjAAQPdwACO78ABA93AAI7wwAED3cAAjvHAAQPdwABjEsABA93AAI7ywAED1pjHwAED44FVwAED48AAjvPAAQPjwACO9MABA9aYxMABA+fAAI71wAED58AAktjAAQPpwACO9sABA+fAAI73wAED58AAjvjAAQPnwACO+cABA+eCjMABA+fAAIAfwAED1pjKwAED8ADAAQAYwACPBMABA/KYxsABA/PAAJLYwAED9MAAjwXAAQP0wACPBsABA/TAAI8HwAED9MAAjwjAAQP0wACO3MABA/TAAIRCwAED9MAAjkzAAQP0wACOWMABA/TAAI8JwAED9MAAjwrAAQP0wACO/sABA/TAAI8LwAED88AAjTnAAQPzwAB9LcABA/PAAI06wAED88AAjTvAAQPymMfAAQQFwACMR8ABA/KYyMABBAfAAIxHwAEEB8AAjUrAAQQHwACNQsABBAfAAI1IwAEEB8AAjUbAAQPymMTAAQQNpW3AAQQNwACNPcABBA2afMABBA2DVcABBA3AAHyxwAEEDZ51wAEEDZeFwAEEDcAAjT7AAQQNwABHGsABBA3AAI0/wAEEDYPvwAEEDcAAjUHAAQQNnYHAAQQNwACNQMABBA2CjMABBA3AAI1DwAEEDcAAjUnAAQQNwACS2MABBB/AAI8MwAEEH8AAjkfAAQQfwACO4MABBB/AAI5IwAEEH8AAjvzAAQQfwACPDcABBB/AAI8DwAEEH8AAjxPAAQQfwACOU8ABBB/AAI5RwAEEH8AAjlbAAQQfwACOVcABBB/AAI8YwAED8pjKwAEELQDAAQAYwACPJsABBC+YysABBDAAwAEEL5jGwAEEMsAAktjAAQQzwAB/xcABBC+Yx8ABBDXAAJLYwAEENsAAf8bAAQQ2wAB/x8ABBDbAAH/IwAEENsAAf8nAAQQvmMTAAQQ7wACS2MABBDzAAHUbwAEEPMAAf8rAAQAYwACPJ8ABBD+YxsABBEDAAJLYwAEEQcAAjyjAAQRBwACPKcABBEHAAI8qwAEEQcAAjyvAAQRBwACPLMABBEHAAICKwAEEQcAAji3AAQRBwACOzcABBEHAAGQwwAEEQZyEwAEEQcAAjy3AAQRBwACO0sABBD+YxMABBE7AAI8xwAEETsAAf5zAAQROwACNMcABBE7AAJLYwAEEUsAAdRvAAQQ/mMfAAQRUwACPMsABBFSeesABBFTAAJLYwAEEV8AAjzTAAQRXwACPNcABBFfAAI5ywAEEV8AAjzbAAQRXwAB/yMABBFfAAH/JwAEEP5jKwAEEXgDAAQAYwACPQcABBGCYysABBGEAwAEEYZwJwAEEY4ZrwAEEYJjGwAEEZcAAktjAAQRmwAB/xcABBGCYx8ABBGjAAJLYwAEEacAAf8bAAQRpwAB/x8ABBGnAAH/IwAEEacAAf8nAAQRgmMTAAQRuwACS2MABBG/AAHUbwAEEb8AAf8rAAQAYwACPQsABBHKYxsABBHPAAJLYwAEEdMAAj0PAAQR0wACPCsABBHTAAI7PwAEEdMAAjjHAAQR0wACPRMABBHTAAI9FwAEEdMAAj0bAAQR0wACPR8ABBHTAAG/awAEEc8AAjEXAAQRzwACMSMABBHPAAIxGwAEEc8AARzTAAQRymMTAAQSCnrTAAQSCwACMScABBILAAJLYwAEEhcAAj0jAAQSFwACCTsABBIXAAI8wwAEEhcAAjkjAAQSFwACPL8ABBIXAAI8uwAEEhcAAdRvAAQSCgfrAAQSCgozAAQSCwACMTMABBHKYx8ABBJDAAIxHwAEEkJaJwAEEkMAAdafAAQSQwACS2MABBJTAAI41wAEElMAAf8jAAQSUwAB/ycABBHKYyMABBJjAAIxHwAEEmMAAjEvAAQRymMrAAQSbwACS2MABBJyAtcABBJvAAIxKwAEAGMAAj1LAAQSfmMbAAQSgwACPU8ABBKDAAI9UwAEEoMAAjxXAAQSfmMrAAQSkAMABBKS7BsABABjAAIkSwAEEp5jGwAEEqJaIwAEEqJaJwAEEqMAAjVvAAQSowACA3cABBKjAAI6twAEEp5jHwAEErsAAjtnAAQSnmMrAAQSwAMABBLC7BsABABjAAI9YwAEEs5jGwAEEtJ57wAEEtJ58wAEEtMAAf/vAAQSzmMTAAQS4wAB8V8ABBLOYysABBLoAwAEAGMAAj1nAAQS8mMbAAQS9wACS2MABBL7AAI4pwAEEvsAAgIrAAQS8mMTAAQTBgfrAAQTBgo7AAQTBggPAAQTBhBbAAQTBn/rAAQTBVsABBMGcR8ABBMGcScABBMHAAH+cwAEEwYRGwAEEwYKMwAEEwcAAgF/AAQTBwACAYcABBMHAAIBkwAEEwcAAktjAAQTQwAB1G8ABBLyYx8ABBNLAAFH9wAEE0p/OwAEE0paJwAEE0sAAdafAAQTSnnvAAQTSnnzAAQS8mMjAAQTZwABR/cABBLyYysABBNsAwAEAGMAAj1rAAQTdmMbAAQTewACS2MABBN/AAI9bwAEE3sAAj1zAAQTewACPXcABBN7AAI9ewAEE3ZjJwAEE5J0gwAEE3ZjEwAEE5iPAAQTdmMrAAQToAMABABjAAI9hwAEE6pjGwAEE68AAjUXAAQTrwACNRMABBOubh8ABBOvAAI9iwAEE68AAjlrAAQTrwACOWcABBOvAAI5bwAEE68AAjlzAAQTqmMfAAQT0gbzAAQTqmMTAAQT2wACO3cABBOqYysABBPgAwAEAGMAAj2PAAQT6mMbAAQT7gKzAAQT6mMTAAQT9sxjAAQT9wACO3cABBPqYysABBQAAwAEAGMAAj2bAAQUCmMbAAQUDlojAAQUDlonAAQUCmMTAAQUGsxjAAQUGwACO3cABBQKYysABBQkAwAEAGMAAj2jAAQULmMfAAQUMgbzAAQULmMTAAQUOwACO3cABBQ7AAI9nwAEFC5jKwAEFEQDAAQAYwACPacABBROYxsABBRTAAI1bwAEFFMAAgN3AAQUTmMfAAQUXgbzAAQUTmMTAAQUZwACMXsABBRnAAI7dwAEFGcAAj2fAAQUTmMrAAQUdAMABABjAAI9qwAEFH5jGwAEFIMAAjVvAAQUgwACA3cABBR+Yx8ABBSOBvMABBR+YxMABBSXAAIxewAEFJcAAjt3AAQUlwACPZ8ABBR+YysABBSkAwAEAGMAAj3jAAQUrmMbAAQUsg1jAAQUslnPAAQUshGDAAQUrmMrAAQUwAMABABjAAI95wAEFMpjGwAEFM8AAj3rAAQUzwACPe8ABBTPAAI98wAEFM8AAj33AAQUzgnrAAQUzwABIBcABBTPAAI9+wAEFMpjKwAEFOwDAAQAYwACPf8ABBT2YxsABBT7AAI+AwAEFPsAAjWnAAQU+wACNaMABBT7AAI2twAEFPp3PwAEFPp3hwAEFPsAAj4HAAQU+nhHAAQU+wABJxMABBT7AAEmJwAEFPp3gwAEFPsAAj4LAAQU+wACPg8ABBT2YysABBUwAwAEAGMAAj4TAAQVOmMbAAQVPwABQh8ABBU/AAI+FwAEFT8AAj4bAAQVPwACPh8ABBU/AAI+IwAEFT8AAj4nAAQVPwACPisABBU/AAI+LwAEFT8AAj4zAAQVPwACPjcABBU/AAI+OwAEFT8AAj4/AAQVPwACPkMABBU/AAI+RwAEFT8AAj5LAAQVPwACPk8ABBU/AAI+UwAEFT8AAj5XAAQVPwACPlsABBU/AAI+XwAEFT8AAj5jAAQVPwACPmcABBU/AAI+awAEFT8AAj5vAAQVPwACPnMABBU/AAIT8wAEFT8AAj53AAQVPwACPnsABBU/AAI+fwAEFTpjKwAEFbQDAAQAYwACPoMABBW+YxsABBXDAAI+hwAEFcMAAj3zAAQVwwACPfcABBW+YysABBXQAwAEAGMAAj6LAAQV2mMbAAQV3wACPocABBXfAAI+jwAEFd8AAj6TAAQV2mMrAAQV7AMABABjAAI+lwAEFfZjGwAEFfsAAktjAAQV/nITAAQV/wACPpsABBX/AAHCswAEFf8AAhGLAAQV/wACPp8ABBX/AAI+owAEFfZjHwAEFhsAAb6zAAQV9mMTAAQWIwABwg8ABBYichsABBYjAAG+9wAEFiIOOwAEFiIGswAEFiIH8wAEFiIIFwAEFiMAAktjAAQWQwACPqcABBX2YysABBZIAwAEAGMAAj6rAAQWUmMbAAQWVgfnAAQWVwACESsABBZSYxMABBZiB+sABBZSYysABBZoAwAEAGMAAj6vAAQWcmMbAAQWdwACS2MABBZ7AAI+swAEFnphTwAEFnpdIwAEFnsAAj63AAQWewABkMMABBZ7AAI+uwAEFnsAAj6/AAQWewACObcABBZ7AAI+wwAEFnsAAY43AAQWewACPscABBZ7AAI+ywAEFnsAAj7PAAQWewACPtMABBZ7AAI4hwAEFnsAAjdnAAQWewACPtcABBZ7AAI+2wAEFnsAAj7fAAQWewACPuMABBZ7AAI3VwAEFnsAAjinAAQWewACEXsABBZ7AAI+5wAEFnsAAj7rAAQWewABv2sABBZ7AAI+7wAEFnJjJwAEFusAAj77AAQW6wACPv8ABBZyYxMABBb2B+sABBb3AAI7TwAEFvcAAktjAAQXAwAB/v8ABBcDAAI/BwAEFwMAAj8DAAQXAwABwzsABBcDAAHDPwAEFwMAAj73AAQXAwACP1cABBcDAAI/bwAEFwMAAj9zAAQXAwACP3cABBcDAAI/ewAEFwMAAj8/AAQXAwACPycABBcDAAI/TwAEFwMAAj8LAAQXAwACPw8ABBcDAAI+8wAEFwIiwwAEFvcAAjubAAQW9wACP2sABBZyYx8ABBdWB5cABBdXAAI/ZwAEF1cAAjibAAQXVwACMmMABBdWeeMABBZyYyMABBdvAAI7ewAEFnJjKwAEF3cAAktjAAQXegLXAAQAYwACP4sABBeCYxsABBeHAAJLYwAEF4sAAjjvAAQXiwACOeMABBeLAAI/jwAEF4sAAj+TAAQXiwACONcABBeLAAI/lwAEF4sAAb7vAAQXit1XAAQXhtBLAAQXgmMTAAQXswAB/nMABBezAAJLYwAEF7sAAjjfAAQXswABDqsABBeyHWMABBexLwAEF7IC/wAEF7JlKwAEF7IClwAEF7IRewAEF7IJGwAEF7IP9wAEF7MAAQ6zAAQXsgKvAAQXslyrAAQXslmTAAQXsrJfAAQXswABDr8ABBewjwAEF4JjHwAEGAMAAj+nAAQYAuZHAAQYAg9XAAQYAg2jAAQYAKcABBgBhwAEGAIFVwAEGAIO3wAEF4JjIwAEGCcAAcA/AAQXgmMrAAQYLAMABABjAAI/rwAEGDZjGwAEGDsAAktjAAQYPwACP58ABBg/AAI/swAEGD8AAbBTAAQYPwABsFcABBg/AAI/twAEGDZjEwAEGFcAAj+7AAQYVwACONsABBhXAAI48wAEGFYKMwAEGFcAAktjAAQYawACP6MABBhrAAI/vwAEGGsAAj+bAAQYawACP8sABBhrAAI/xwAEGGsAAj/DAAQYNmMjAAQYhwACMS8ABBg2YysABBiMAwAEAGMAAj/PAAQYlmMbAAQYmwACS2MABBifAAIN7wAEGJZjHwAEGKV7AAQYlmMjAAQYrwABEXsABBiWYxMABBi2IusABBi3AAI/0wAEGLcAAjTzAAQYtwACNR8ABBiWYysABBjIAwAEAGMAAj/XAAQY0mMbAAQY1wACS2MABBjbAAG+8wAEGNsAAj/bAAQY2wACPGMABBjSYxMABBjrAAI08wAEGOsAAjUfAAQY0mMrAAQY9AMABABjAAI/3wAEGP5jGwAEGQMAAj/jAAQZAwACP+cABBkDAAI/6wAEGQMAAj/vAAQZAwACP/MABBkDAAI/9wAEGQMAAj/7AAQZAwACP/8ABBkDAAJAAwAEGQMAAkAHAAQZAwACQAsABBkDAAHY2wAEGQMAAkAPAAQZAwACQBMABBkDAAJAGwAEGQMAAkAjAAQZAwACQCsABBkDAAJAMwAEGQMAAkA7AAQZAwACQEMABBkDAAJASwAEGQMAAkBTAAQZAwACQFsABBkDAAJAYwAEGQMAAdonAAQZAwACQGsABBj+YysABBlsAwAEAGMAAkBzAAQZdmMbAAQZewACQHcABBl6dWsABBl7AAJAfwAEGXsAAkCDAAQZewACQIsABBl7AAJAjwAEGXsAAkCTAAQZewACQJcABBl7AAICewAEGXZjEwAEGaMAAktjAAQZpwACQJsABBmnAAJAswAEGacAAkC/AAQZdmMrAAQZtAMABABjAAJA2wAEGb5jJwAEGcADAAQZvmMTAAQZywACMmMABBnLAAJA5wAEAGMAAkDrAAQZ1mMbAAQZ2wACAE8ABBnalbcABBna048ABBnbAAEc0wAEGdsAAkDvAAQZ2wABJs8ABBnbAAFCKwAEGdsAAhPzAAQZ2wACQP8ABBnWYxMABBoDAAIAfwAEGgIKMwAEGgFbAAQaAnEnAAQaAwAB8tcABBnWYycABBobAAJBBwAEGdZjHwAEGiMAAkEXAAQaIhInAAQaIwACAg8ABBojAAJBGwAEGiMAAkEfAAQaIwACNO8ABBnWYyMABBo/AAI07wAEGdZjKwAEGkQDAAQAYwACQSMABBpOYxsABBpQiwAEGk5jEwAEGliPAAQaTmMrAAQaYAMABABjAAJBKwAEGmpjGwAEGm8AASbHAAQabwACNHMABBpu80cABBpqYysABBp8AwAEAGMAAkEvAAQahmMbAAQaiwACQTMABBqLAAI0cwAEGorzRwAEGosAAkE3AAQaiwACQTsABBqLAAJBPwAEGosAAkFDAAQaiwACQUcABBqLAAJBSwAEGosAAkFPAAQaiwACQVMABBqLAAJBVwAEGosAAkFbAAQaiwACQV8ABBqLAAJBYwAEGosAAkFnAAQahmMrAAQazAMABABjAAJBawAEGtZjGwAEGtoQ5wAEGtZjKwAEGuADAAQAYwACQW8ABBrqYxsABBrvAAI39wAEGu8AAgUXAAQa6mMTAAQa+I8ABBrqYysABBsAAwAEAGMAAkFzAAQbCmMbAAQbDwABQh8ABBsPAAJBdwAEGw8AAkF7AAQbDp/nAAQbDwACQX8ABBsPAAIT8wAEGw8AAj57AAQbDwACQYMABBsPAAJBhwAEGw8AAkGLAAQbDwACQY8ABBsPAAJBkwAEGw8AAktjAAQbQwABkMMABBtDAAJBlwAEG0MAAkGbAAQbQwACQZ8ABBtDAAHI2wAEG0MAAkGjAAQbQwACQ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ZQJbW10DmmUCW1tdA5plAltbXQOaZQJbW10DmmUCW1tdA5plAltbXQOaZQJbW10DmmUCW1tdA5plAltbXQOaZQJbW10DmmUCW1tdA8AA/W0CYAOCe2ADhNldA5plAltbXQOaZQJbW10DmmUCW1tdA5plAltbXQOaZQJbW10DmmUCW1tdA5plAltbXQOaZQJbW10DmmUCW1tdA5plAltbXQOaZQJbW10DmmUCW1tdA5plAltbXQOaZQJbW10DmmUCW1tdA5plAltbXQOaZQJbW10DmmUCW1tdA5plAltbXQOaZQJbW10DmmUCW1tdA5qaAltbXQPAAP07AWADh49dA5qaAltbXQPAAP07AWADh49dA8AA/TsBYAOHj10DmpoCW1tdA8AA/TsBYAOHj10DmpoCW1tdA5qaAltbXQOamgJbW10DmpoCW1tdA5qaAltbXQOamgJbW10DmpoCW1tdA5qaAltbXQOamgJbW10DmpoCW1tdA5qaAltbXQOamgJbW10DmpoCW1tdA5qaAltbXQOamgJbW10DwAD9OwFgA4TZXQOamgJbW10DmpoCW1tdA5mfAltbXQOZnwJbW10DmZ8CW1tdA5mfAltbXQOZnwJbW10DmZ8CW1tgA8AA/n5dA8AA/W0CYAOJgmADwAD8l10DmZ8CW1tgA8AA/n5dA5mfAltbXQPAAP07AWADhNldA8AA/W0CYAOJgmADiOldA8AA/W0CYAPAAP5+XQOKogFbYAPAAMnsXQPAAP07AWADwAD8l10DwAD9OwFgA4jpXQPAAP07AWADiZddA8AA/TsBYAOCUl4DAAEBAWADiv4AAVcDivgAYAOLIF0DwAD9bQJgA8AA/n5gA8AA+tFdA8AA/W0CYAPAAP5+YAPAAPrRYQMBYAPAAP5+XGEDAWADwAD+flxhAwFgA8AA/n5cYQMBYAPAAP5+XGEDAWADwAD+flxhAwFgA8AA/n5cXQPAAP1tAmADi5JgA8AA+tFdA8AA/W0CYAOLkmADwAD60V0DwAD9bQJgA4uSYAPAAPrRXQPAAP07AWADkcZhAwFgA4uEXGEDAWADwAD+/10DwAC5aAFgA8AA/v9hAwFgA8AA/v9dA8AAuWgBYAPAAP7/YQMCYAPAAP5+XQPAAP07AVtgA8AA/aFhAwJgA8AA/n5dA8AA/TsBW2ADwAD9oWEDAVtgA8AA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XwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOaZQJfAwAAXwMBAF0DmmUCXwMAAF8DAQBdA5plAl8DAABfAwEAXQOamgJfAwAAXwMBAF0DmpoCXwMAAF8DAQBdA5qaAl8DAABfAwEAXQOamgJfAwAAXwMBAF0DmpoCXwMAAF8DAQBdA5qaAl8DAABfAwEAXQOamgJfAwAAXwMBAF0DmpoCXwMAAF8DAQBdA5qaAl8DAABfAwEAXQOamgJfAwAAXwMBAF0DmpoCXwMAAF8DAQBdA5qaAl8DAABfAwEAXQOamgJfAwAAXwMBAF0DmpoCXwMAAF8DAQBdA5qaAl8DAABfAwEAXQOamgJfAwAAXwMBAF0DmpoCXwMAAF8DAQBdA5qaAl8DAABfAwEAXQOamgJfAwAAXwMBAF0DmpoCXwMAAF8DAQBdA5qzAl8DAABfAwEAXQOaswJfAwAAXwMBAF0DmrMCXwMA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AWADvVFdA8AA/W0CYAO9KmADwABMuF0DwAD+LwFgA70qXgMAAgICYAO9Kl0DwABolAFgA8AAb5gAAVcDwABu/gBcXQPAAP4vAWADvSpeAwACAgJgA70qXQPAAGiUAWADwABvmAABVwPAAG7+AFxdA8AA/i8BYAPAAGkgXgMAAgICYAO9PF0DwABolAFgA8AAb3MAAVcDwABu/QBcYQMBYAPAAG8NXQPAAGiUAWADwABvc2EDAWADwABvDWADwAD60WEDA10DwAD9bQJgA8AA/n5dA8AA/i8BYAPAAG8NYQMBYAPAAG8NXQPAAGiUAWADwABvc2EDAWADwABvDWADwAD60VxhAwNdA8AA/W0CYAPAAP5+XQPAAP4vAWADwABvDWEDAWADwABvDV0DwABolAFgA8AAb3NhAwFgA8AAbw1gA8AA+tFcYQMDXQPAAP1tAmADwAD+fl0DwAD+LwFgA8AAbw1hAwFgA8AAbw1dA8AAaJQBYAPAAG9zYQMBYAPAAG8NYAPAAPrRXF0DwAD9bQJgA8AA/n5dA8AA/W0CYAPAAEvPYAPAAG/hXQPAAP1tAmADwABLz2ADwABv4V0DwAD+LwFgA8AAYtZdA8AA/i8BYAPAAGMpXQPAAP4vAWADwABhQl0DwAD+LwFgA711XQPAAP4vAWADvXVdA8AA/i8BYAO9Tl0DwAD+LwFgA71OXQPAAGiUAWADwABvc10DwAD+LwFgA71RXQPAAP4vAWADvU5dA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvc10DwABolAFgA8AAb3NdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvc10DwABolAFgA8AAb3NdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvc10DwABolAFgA8AAb3NdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvc14DAAICAmADvTxdA8AAaJQBYAPAAG9zAAFXA8AAbv0AXF0DwAD9bQJgA70qYAPAAG+KXgMAAgICYAO9Kl0DwABolAFgA8AAb5gAAVcDwABu/gBcYQMBYAO9KmADwAD60V0DwAD9bQJgA8AA/n5dA8AA/i8BYAPAAG8NYQMBYAPAAG8NYAPAAPrRXQPAAP4vAWADwABvDV0DwAD+LwFgA8AAbw1dA8AAaJQBYAPAAG9zXQPAAP4vAWADvVFdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvc10DwABolAFgA8AAb3NdA8AA/i8BYAPAAG8NXQPAAP1tAmADwAD+fl0DwAD+LwFgA8AAbw1dA8AA/i8BYAPAAG8NXQPAAP1tAmADwAD+fl0DwAD+LwFgA8AAbw1dA8AA/i8BYAPAAG8NXQPAAP1tAmADwAD+fl0DwAD+LwFgA8AAbw1dA8AAaJQBYAPAAG9zXQPAAP1tAmADvTxgA8AAbw1eAwACAgJgA708XQPAAGiUAWADwABvcwABVwPAAG79AFxdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvc10DwABolAFgA8AAb3NeAwACAgJgA708XQPAAGiUAWADwABvcwABVwPAAG79AFxdA8AA/i8BYAO9PF0DwAD9bQJgA70qXQPAAP4vAWADvSpdA8AA/i8BYAO9Kl0DwAD+LwFgA708XQPAAP4vAWADvTxdA8AA/W0CYAO9PGADwABvDV0DwAD+LwFgA8AAYv1hAwJgA8AA/n5dA8AA/PkBW1xhAwJgA8AA/n5dA8AA/PkBW1xhAwJgA8AA/n5dA8AA/PkBW1xhAwJgA8AA/n5dA8AA/PkBW1xdA8AA/i8BYAPAAGflXQPAAP4vAWADwABoYV0DwAD+LwFgA8AAaBddA8AA/i8BYAPAAGh/XQPAAP07AWADwABNNV0DlL4BYAPAAGflXQOUvgFgA8AAZ+VdA5S+AWADwABoYV0DlL4BYAPAAGhhXQOUvgFgA8AAaBddA5S+AWADwABoF10DlL4BYAPAAGh/XQOUvgFgA8AAaH9dA8AAUCUCW1tdA8AAUCUCW1tdA8AAUCUCW1tdA8AAUCUCW1tdA8AAUCUCW1tdA8AAUCUCW1tdA8AAUCUCW1tdA8AA/i8BYAPAAGFCXQPAAFAlAltbXQPAAP1tAmADwABhQmADwABhQl0DwABQJQJbW10DwAD9bQJgA71OYAPAAGFCXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbXQPAAFAlAltbYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGYAPAAFBGXQPAAP1tAmADwAD8l10DwAD9OwFgA8AAQpddA8AA/TsBYAPAAEKXXQPAAP1tAmADwAD8l10DwAD9OwFgA8AAQtpdA8AA/TsBYAPAAELaXQPAAP1tAmADwAD8l10DwAD9OwFgA8AAQtpdA8AA/TsBYAPAAELaYQMCYAPAAPyXYAPAAEKXXF0DwAD9OwFgA8AAQpddA8AA/W0CYAPAAPyXXQPAAP07AWADwABCl10DwAD9OwFgA8AAQtpdA8AA/W0CYAPAAPyXXQPAAP07AWADwABC2l0DwAD9bQJgA8AA/n5gA8AAUH5dA8AA/W0CXwMAAGADwAD8l10DwAD9OwFfAwAAXQPAAP07AV8DAABdA8AAUNgBXwMAAGEDAV8DAABcXQPAAP07AV8DAABdA8AA/i8BXwMAAF0DwAD9OwFdA8AA/TsBXwMAAGEDAV8DAABcXQPAAP1tAmADgxtgA8AAUUBdA8AA/TsBYAPAAFFAXQPAAP1tAmADgxtgA8AAUUBdA8AA/TsBYAPAAFGqXQPAAP07AWADwABRql0DwAD9OwFgA8AAUaFdA8AA/TsBYAPAAFGhXQPAAP07AWADwABRoV0DwAD9OwFgA8AAUapdA8AA/TsBYAOI6V0DwAD9OwFgA8AAUaFdA8AA/TsBYAPAAFGhXQPAAP07AWADwABVmV0DwAD9OwFgA8AAUapdA8AA/TsBYAPAAFVOXQPAAP07AWADwABVTl0DwAD9OwFgA8AAVzddA8AA/TsBYAPAAFc3XQPAAP07AWADwABXN10DwAD9bQJgA4MbYAObDV0DwAD9OwFgA4mCXQPAAP07AWADiOldA8AA/W0CYAODG2ADmw1dA8AA/W0CYAPAAFddYAPAAFc3XQPAAP07AWADwABXN10DwAD9OwFgA8AAVzddA8AA/TsBYAPAAFc3XQPAAP07AV0DwAD9OwFgA8AAVU5dA8AA/TsBXQPAAP07AWADwABVTl0DwAD9OwFdA8AA/TsBYAPAAFVOXQPAAP07AV0DwAD9OwFgA8AAVU5dA8AA/TsBXQPAAP07AWADwABVTl0DwAD9OwFdA8AA/TsBYAPAAFVOXQPAAP07AV0DwAD9OwFgA8AAVU5dA8AA/TsBXQPAAP07AWADwABVTl0DwAD9OwFdA8AA/TsBYAPAAFVOXQPAAP07AV0DwAD9OwFgA8AAVU5dA8AA/TsBYAPAAFVOXQPAAP07AWADwABVTl0DwAD9OwFgA8AAVU5dA8AA/TsBYAPAAFVOXQPAAP07AWADwABVTl0DwAD9bQJgA8AA/n5gA5G2XQPAAP07AWADkbZdA8AA/TsBYAPAAFVOXQPAAP07AWADwABVTl0DwAD9OwFgA8AAVU5dA8AA/TsBYAPAAFVOXQPAAP07AWADwABVTl0DwAD9OwFgA8AAVzddA8AA/TsBYAPAAFFAXQPAAP07AWADwABRQF0DwAD9OwFgA8AAUUBgA8AA/JddA8AA/TsBYAOI6V0DwAD9OwFgA4jpXQPAAP07AWADiOlgA8AA/n5dA8AA/TsBYAOJYl0DwAD9OwFgA4liXQPAAP07AWADiWJdA8AA/TsBYAOJYl0DwAD9OwFgA4liXQPAAP07AWADiOlgA8AA/n5dA8AA/TsBYAOJYl0DwAD9OwFgA4jpYQMDYAODfWADg31gA8AA+tFcXQPAAP07AWADwABVTl0DwAD9OwFgA4QSXQPAAP07AWADhBJdA8AA/TsBYAPAAFVOXQPAAP07AWADiOlgA8AA/n5gA8AA/JddA8AA/TsBYAPAAFVOYAPAAP5+XQPAAP07AWADiOldA8AA/TsBYAOI6V0DwAD9OwFgA8AAVzddA8AA/TsBYAPAAFddXQPAAP07AWADiOldA8AA/TsBYAOI6V0DwAD9OwFgA8AAVzddA8AA/TsBYAPAAFWyXQPAAP07AWADwABVsmEDAmADwAD+fmADwABVTlxdA8AA/TsBYAODb10DwAD9OwFgA4NvXQPAAP07AWADhNldA8AA/TsBYAOHj10DwAD9OwFgA4ePXQPAAP07AWADh49dA8AA/TsBYAOHj10DwAD9OwFgA4ePXQPAAP07AWADh49dA8AA/TsBYAOHj10DwAD9OwFgA4cwXQPAAP07AWADh49dA8AA/TsBYAOHj10DwAD9OwFgA4ePXQPAAP07AWADh49dA8AA/TsBYAOHj10DwAD9OwFgA4ePXQPAAP07AWADh49dA8AA/TsBYAOE2V0DwAD9OwFgA4TZYQMBXQPAAP07AWADhNlgA4TZXQPAAP07AWADhNlhAwFdA8AA/TsBYAOE2WADhNldA8AA/TsBYAOE2V0DwAD9OwFgA4TZYQMBXQPAAP07AWADhNlgA4TZYQMBXQPAAP07AWADhNlgA4TZYQMBXQPAAP07AWADhNlgA4TZYQMBXQPAAP07AWADhNlgA4TZXQPAAP07AWADhNldA8AA/TsBYAOE2V0DwAD9OwFgA4TZYQMBXQPAAP07AWADhNlgA4TZXQPAAP07AWADhzBdA8AA/TsBYAOE2WEDAV0DwAD9OwFgA4cwYAOHIl0DwAD9OwFgA4TZYQMBXQPAAP07AWADhzBgA4ciXQPAAP07AWADhNldA8AA/TsBYAOE2WEDAV0DwAD9OwFgA4cwYAOHImEDAV0DwAD9OwFgA4cwYAOHImEDAV0DwAD9OwFgA4cwYAOHImEDAV0DwAD9OwFgA4cwYAOHIl0DwAD9OwFgA4TZXQPAAP07AWADhzBdA8AA/TsBYAOE2WEDAV0DwAD9OwFgA4cwYAOHIl0DwAD9OwFgA4cwXQPAAP07AWADnwBdA8AA/TsBYAPAAP5+XQPAAP07AWADwAD+fl0DwAD9OwFgA6/MXQPAAP07AWADr8xdA8AA/TsBYAOvzF0DwAD9OwFgA6/MXQPAAP07AWADr8xdA8AA/TsBYAOvzF0DwAD9bQJgA8AAV11gA8AAVzddA8AA/TsBYAPAAFddXQPAAP07AWADwABVsl0DwAD9OwFgA8AAVbJdA8AA/TsBYAPAAFWyXQPAAP07AWADwABVsl0DwAD9OwFgA8AAVbJdA8AA/W0CYAPAAP5+YAPAAFWyXQPAAP07AWADqjldA8AA/W0CYAPAAP5+YAPAAFddXQPAAP07AWADwAD+fl0DwAD9OwFgA4jpXQPAAP07AWADiWJdA8AA/TsBYAOI6V0DwAD9OwFgA4jpXQPAAP07AWADiOldA8AA/TsBYAOI6WADwAD+fl0DwAD9OwFgA4liXQPAAP07AWADiWJdA8AA/TsBYAOJYl0DwAD9OwFgA4liXQPAAP07AWADiWJdA8AA/TsBYAOI6WADwAD+fl0DwAD9OwFgA4liXQPAAP07AWADiOldA8AA/TsBYAOI6V0DwAD9OwFgA4jpXQPAAP1tAmADiYJgA4jpXQPAAP1tAmADwAD+fmADwABVOF0DwAD9OwFgA4jpXQPAAP4vAWADiOldA8AA/TsBYAOI6V0DwAD9bQJgA8AAVO5gA8AA/JddA8AA/W0CYAPAAFTuYAPAAPyXXQPAAP1tAmADwABU7mADwAD8l10DwAD+LwFgA8AAVO5dA8AA/W0CYAPAAP5+YAPAAFVOXQPAAP07AWADhNlhAwNgA4N9YAODfWADwAD60VtdA8AA/TsBYAOEEl0DwAD9OwFgA4QSXQPAAP07AWADhBJdA8AA/TsBYAOEEl0DwAD9OwFgA4QSYAOCi10DwAD+LwFgA4i0XQPAAP4vAWADiLRgA4KLXQPAAP4vAWADiLRdA8AA/i8BYAOItF0DwAD+LwFgA4i0XQPAAP4vAWADiLRdA8AA/TsBYAORtl0DwAD9bQJgA4mCYAOI6V0DwAD9OwFgA5G2XQPAAP07AWADkbZdA8AA/TsBYAORtl0DwAD9OwFgA5G2XQPAAP07AWADkbZgA8AA/n5dA8AA/TsBYAORtl0DwAD9bQJgA4mCYAOI6WEDAWADwABU7mADwABU7mEDAmADiLRgA8AA+tFgA4PPXQPAAP1tAmADwAD+fmADwABWoV0DwAD9bQJgA8AA/n5gA8AAVqFdA8AA/W0CYAPAAP5+YAPAAFahXQPAAP1tAmADwAD+fmADwABWoV0DwAD9bQJgA8AA/n5gA8AAVqFdA8AA/TsBYAPAAFWQXQPAAP1tAmADwAD+fmADwABWoV0DwAD9OwFgA4TZXQPAAP07AWADhGFdA8AA/TsBYAOEYV0DwAD9OwFgA4RhXQPAAP1tAmADwAD+fmADwABVTl0DwAD9bQJgA8AA/n5gA8AAVU5dA8AA/W0CYAPAAP5+YAPAAFVOXQPAAP07AWADiYJdA8AA/TsBYAOIfl0DwAD9OwFgA4h+XQPAAP07AWADiH5dA8AA/W0CYAOJgmADiOlhAwFgA4jpYAOI6WEDAWADiOlgA4jpYQMBYAOI6WADiOldA8AA/W0CYAODz2ADwABWXV0DwAD9OwFgA4jpXQPAAP07AWADhGFdA8AA/TsBYAOEYV0DwAD9OwFgA4RhXQPAAP07AWADhGFdA8AA/TsBYAOEYV0DwAD9OwFgA4RhXQPAAP1tAmADiYJgA4jpXQPAAP07AWADiOldA8AA/TsBYAOI6V0DwAD9OwFgA4jpXQPAAP07AWADiWJdA8AA/TsBYAOJgl0DwAD9OwFgA8AAV11dA8AA/TsBYAPAAFWyXQPAAP07AWADwABXN10DwAD9OwFgA8AAUnZdA8AA/W0CYAPAAP5+YAPAAFVOXQPAAP1tAmADwAD+fmADwABVTl0DwAD9OwFgA8AAVzddA8AA/TsBYAPAAFc3XQPAAP07AWADwABXN10DwAD9bQJgA8AA/n5gA8AAVU5dA8AA/W0CYAPAAP5+YAPAAFVOXQPAAP07AWADiYJdA8AA/TsBYAOJgl0DwAD9OwFgA4h+XQPAAP07AWADiH5dA8AA/W0CYAOJgmADiOldA8AA/TsBYAOI6V0DwAD+LwFgA4jpXQPAAP07AWADiOldA8AA/TsBYAOJgmEDAWADwAD95GADwAD+fmEDAWADwAD95GADwAD+fmEDAmADwAD95GADwAD8l2ADwAD+fmEDAmADwAD95GADwAD8l2ADwAD+fmEDAmADwAD95GADwAD8l2ADwAD+fmEDAWADwAD95GADwAD+fl0DwAD9OwFgA8AA/eRdA8AA/TsBYAPAAP3kXQPAAP07AWADwAD95F0DwAD9OwFgA8AA/eRdA8AA/TsBYAPAAP3kXQPAAP07AWADwAD95F0DwAD9OwFgA8AA/eRdA8AA/W0CYAOJgmADwABUZ10DwAD9OwFgA8AAWw9dA8AA/TsBYAPAAFsPXQPAAP07AWADiYJdA8AA/W0CYAOJgmADiOldA8AA/W0CYAOJgmADiOldA8AA/TsBYAPAAFs3XQPAAP07AWADwABbN2EDAWADwAD+fmADwAD60V4DAAEEAWADwAD+fgOFymEDAWADwAD+fmADwAD60QCvXWADwAD8lwCvXmADwAD60QABVwPAAFsbAFxhAwFgA8AA/n5gA8AA+tFeAwADAwNgA7X/YAO2MWADwAD+fgABVwO2RwBbXQPAAP1tAl8DAABfAwEAXQPAAP1tAl8DAABfAwEAYQMAXwMBAF0DwAD9bQJfAwAAXwMBAF0DwAD9bQJfAwAAXwMBAF0DwAD9bQJfAwAAXwMBAF0DwAD9bQJfAwAAXwMBAF0DwAD8+QFfAwAAXQPAAPz5AV8DAABdA8AA/PkBXwMAAF0DwAD8+QFfAwAAXQPAAPz5AV8DAABdA8AA/TsBXwMAAF0DwAD9OwFfAwAAXQPAAP07AV8DAABdA8AA/TsBXwMAAF0DwAD9OwFfAwAAXQPAAP07AV8DAABdA8AA/TsBXwMAAF0DwAD9OwFfAwAAXQPAAP07AV8DAABdA8AA/TsBXwMAAF0DwAD9OwFfAwAAXQPAAP07AV8DAABdA8AA/TsBXwMAAF0DwAD9OwFfAwAAXQPAAP4vAV8DAABdA8AA/i8BXwMAAF0DwAD9OwFbYQMAXwMBAF0DwABb6gJfAwAAXwMBAF0DwAD9OwFbXQPAAFwJAV8DAABhAwFfAwAAYAPAAPrRYQMBXwMAAGADwAD60V0DwAD+LwFfAwAAXQPAAP4vAV8DAABdA8AA/i8BW10DwAD+LwFbXQPAAP4vAV8DAABdA8AA/TsBW14DAAEBAVsAAVcDtkUAW10DwAC6YgFgA8AA/n5dA8AAumIBYAPAAP5+YQMAXGEDAFxdA8AA/TsBYAPAAP5+YAPAAPyNYAPAAMhFXQPAAP07AWADwABck10DwAD9OwFgA8AAXJNdA8AA/W0CW10DwAD9bQJbW10DwAD9bQJbW2EDAVtbXQPAAP1tAltbXQPAAP1tAltdA8AA/W0CW10DwAD9OwFbXQPAAP1tAltdA8AA/TsBW10DwAD9OwFbXQPAAP1tAltdA8AA/W0CW10DwAD9OwFbXQPAAP1tAltdA8AA/TsBW10DwAD9OwFbXQPAAP1tAltdA8AA/W0CW10DwAD9OwFbXQPAAP07AVtdA8AA/W0CW10DwAD9OwFbXQPAAP1tAltbXQPAAP1tAltdA8AA/W0CW1tdA8AA/W0CW2ADwABcpWEDAFxdA8AA/W0CW2ADwAD8l10DwAD9bQJbYAPAAPyXYQMBW2ADwAD60V0DwAD9bQJgA8AA/n5bXQPAAP1tAmADwAD+fltdA8AA/W0CYAPAAP5+W14DAAICAmADwAD+fmADwAD+fgABVwOTvABdA8AAumIBYAPAAP5+YQMBXwMBAGADwAD60V0DwAD+LwFfAwAAXQPAAP1tAl8DAQBdA8AA/i8BXwMAAGADwAD+fl0DwAD9bQJfAwAAXwMBAF0DwAD9bQJgA8AA/n5dA8AA/TsBYAPAAPyXXQPAAP07AVtdA8AA/W0CXwMAAF8DAQBhAwBfAwEAXQPAAFzPAl8DAABfAwEAXQPAAFzPAl8DAABfAwEAXQPAAFzPAl8DAABfAwEAXQPAAP1tAl8DAABfAwEAXQPAAP1tAl8DAABfAwEAXQPAAP07AVtdA8AA/TsBW10DwAD9OwFbXQPAAML6AWADuKBdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvmF0DwAD+LwFgA70qXQPAAGiUAWADwABvmF0DwABolAFgA8AAb3NdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvc2EDAWADuKBcXQPAAP4vAWADvTxdA8AA/i8BYAO9KmEDAWADwAD+flxdA8AA/W0CYAPAAP5+YAPAAPyXXQPAAP1tAmADwAD+fmADwAD8l10DwAD9OwFgA8AA/n5hAwBcXQPAAP1tAmADg31gA8AAYAhdA8AA/W0CYAPAAP78XQPAAF/KAVtdA8AAX8oBW2EDAV8DAABcYAPAAF+RXQPAAF/KAWADg31hAwFfAwAAXF0DwAD9bQJgA4N9YAPAAGAIXQPAAP07AWADiYJdA8AA/TsBYAOJgl0DwABfygFgA8AAYUJdA8AAX8oBYAPAAP5+XQPAAF/KAWADwAD+/10DwABfygFgA70gYQMAXwMAAF0DwAD9bQJgA8AA/vxdA8AAX9MBW10DwABf0wFbXQPAAP07AWADwABi1l0DwAD9OwFgA4jpXQPAAP07AWADwABjO10DwAD9OwFgA8AA/n5dA8AA/TsBYAOJgl0DwAD9OwFgA4liXQPAAF/TAWADwABgCF0DwABf0wFgA8AA/v9dA8AAX9MBYAPAAP5+XQPAAP07AV8DAABhAwBfAwEAXQPAAP1tAl8DAABfAwEAXQPAAF/TAWADwABhQl0DwABf0wFgA70gYAPAAMnsXQPAAP07AWADwAD8l2ADwADJ7F0DwAD9OwFgA8AAYztdA8AA/TsBYAPAAGM7XQPAAP07AWADiYJdA8AA/TsBYAOJgl0DwAD9bQJfAwAAYAPAAPyXYQMBXwMAAFxdA8AA/W0CXwMAAGADwAD8l10DwAD9OwFfAwAAYQMAXwMAAF0DwAD9OwFfAwAAXQPAAP1tAmADwAD+/2ADwABf5V0DwAD9bQJgA4MbYAPAAF/6XQPAAP1tAmADwAD+fmADwABf+l0DwAD9bQJgA8AA/n5gA4L2XQPAAP1tAmADg31gA8AAYAhdA8AA/W0CYAPAAP5+YAPAAGAIXQPAAP1tAmADg31gA8AAYAhdA8AA/W0CYAPAAP5+YAPAAGAIXQPAAP1tAmADh1VgA8AAYJBdA8AA/W0CYAOHVWADwABgkGEDAF8DAABdA8AA/TsBXwMAAGEDAF8DAABdA8AA/TsBYAPAAP5+XQPAAP07AWADwABi1l0DwAD9OwFgA4mCXQPAAP07AV8DAABdA8AA/TsBXwMAAF0DwAD9OwFfAwAAYQMAXwMBAF0DwAD9bQJfAwAAXwMBAGEDAF8DAQBdA8AA/W0CXwMAAF8DAQBhAwFgA708XwMBAF0DwAD9bQJfAwAAXwMBAGEDAF8DAQBdA8AA/W0CXwMAAF8DAQBhAwBfAwEAXQPAAP1tAl8DAABfAwEAXQPAAP07AV8DAABhAwBfAwEAXQPAAP1tAl8DAABfAwEAXQPAAP07AV8DAABhAwBfAwAAXQPAAP1tAmADwAD+fl8DAABdA8AA/TsBXwMAAGEDAF8DAQBdA8AA/W0CXwMAAF8DAQBdA8AA/TsBYAO9IGEDAF8DAABdA8AA/W0CYAO9IF8DAABdA8AA/TsBYAOI6WEDAV8DAABcYQMBXwMAAFxhAwJgA708XwMAAFxhAwFfAwAAXGEDAV8DAABcYQMBXwMAAFxhAwFfAwAAXGEDAV8DAABcYQMBXwMAAFxhAwFfAwAAXF0DwAD9OwFgA4LCXQPAAP1tAmADwAD8l2ADglJdA8AA/W0CYAOCUmADwAD8l10DwAD9bQJgA8AA/JdgA4mmXQPAAP1tAmADiaZgA8AA/JddA8AA/i8BYAOJpl0DwAD9OwFbXQPAAP07AVtdA8AA/TsBW10DwAD9OwFbXQPAAP07AVtdA8AA/TsBW2ADwACYBl0DwABhLAJbW10DwABhLAJbW10DwAD9bQJgA8AA+qNgA8AAYZtdA8AAYSwCW1tdA8AAYSwCW1tdA8AAYSwCW1tdA8AAYSwCW1tdA8AAYSwCW1tdA8AAYSwCW1tdA8AAYSwCW1tdA8AA/TsBYAPAAGFCXQPAAP07AWADwABhQl0DwABhLAJbW10DwABhLAJbW10DwABhLAJbW10DwABhLAJbW10DwABhLAJbW10DwABhLAJbW2ADwAD+fl0DwABhLAJbW10DwABhLAJbW10DwABhLAJbW10DwAD+LwFgA8AAYztdA8AA/W0CYAPAAGM7XQPAAP4vAWADwABjO10DwABjlQJfAwAAXwMBAF0DwABjlQJfAwAAXwMBAGEDAWADwABjKVtdA8AA/TsBYAPAAGLWXQPAAGOVAl8DAABfAwEAXQPAAP07AWADwABjO10DwAD9OwFgA8AAYtZdA8AAY5UCXwMAAF8DAQBdA8AAY5UCXwMAAF8DAQBdA8AAY5UCXwMAAF8DAQBdA8AA/TsBYAPAAGM7YQMBYAPAAGLWYAPAAPrRYQMBYAPAAGLWYAPAAPrRXQPAAP07AWADwABjO10DwABjlQJfAwAAXwMBAF0DwABjlQJfAwAAXwMBAF0DwABjogJfAwAAXwMBAF0DwABjogJfAwAAXwMBAF0DwABjogJfAwAAXwMBAF0DwABjogJfAwAAXwMBAF0DwABjogJfAwAAXwMBAF0DwABjogJfAwAAXwMBAF0DwABjogJfAwAAXwMBAF0DwABjrgFfAwAAYQMCYAPAAGL9YAPAAGL9YAPAAPrRXQPAAGOuAV8DAABdA8AAY64BXwMAAGEDAGADwAD60WEDAGADwAD60WEDAGADwAD60V0DwABjrgFfAwAAYQMAYAPAAPrRYQMAYAPAAPrRYQMAYAPAAPrRYQMAYAPAAPrRXQPAAP4vAWADvTZdA8AA/i8BYAO9Nl0DwABjrgFfAwAAXQPAAGPIAV8DAABdA8AAY8gBXwMAAF0DwABjyAFfAwAAXQPAAGPIAV8DAABdA8AAY8gBXwMAAF0DwABjyAFfAwAAXQPAAGPIAV8DAABdA8AAY9MBXwMAAF0DwAD+LwFgA8AA/n5dA8AA/i8BYAPAAP5+XQPAAP1tAmADwAD+fmADwAD+fl0DwAD9bQJgA8AA/n5gA8AA/n5dA8AA/W0CYAPAAP5+YAPAAP5+XQPAAP1tAmADvRZgA8AAZUBdA8AA/W0CYAPAAGFCYAPAAJWiXQPAAP1tAmADwABhQmADwAD+fl0DwAD9bQJgA8AA/n5gA70bXQPAAP07AWADwAD+fl0DwAD9OwFgA8AA/n5dA8AA/TsBYAPAAP5+XQPAAP07AWADwAD+fl0DwAD9bQJgA702YAPAAJWiXQPAAP1tAmADwACVomADwACVol0DwAD9bQJgA8AAlaJgA8AAlaJdA8AA/W0CYAPAAP5+YAPAAJWiXQPAAP1tAmADvRtgA8AA/n5hAwFfAwAAYAPAAP5+XQPAAP1tAmADvRZgA8AAlaJdA8AA/W0CYAPAAP5+YAPAAJWiXQPAAP1tAmADwAD+fmADwAD+fmEDAGADwAD+fl0DwAD9bQJgA8AA/n5gA8AAlaJdA8AA/W0CYAPAAP5+YAPAAP5+XQPAAP1tAmADwAD+fmADwACVol0DwAD9bQJgA8AA/n5gA8AA/n5hAwBgA8AA/n5dA8AA/W0CYAO9PGADwACVol0DwAD9bQJgA708YAPAAJWiXQPAAP1tAmADwAD+fmADwACVol0DwAD9bQJgA8AA/n5gA8AA/JddA8AA/W0CYAO9G2ADwAD+fl0DwAD9bQJgA8AAY2lgA8AAlaJdA8AA/TsBYAPAAP5+XQPAAP1tAmADwABhQmADwAD8l2ADwABlMWADwABlMWADwABlMWADwABlMWADwABlMV0DwAD+LwFgA8AA/n5dA8AA/W0CYAPAAP5+YAPAAP5+XQPAAP4vAWADwAD+fl0DwAD+LwFgA8AA/n5dA8AA/i8BYAPAAP5+XQPAAP4vAWADwAD+fl0DwAD+LwFgA8AA/n5dA8AA/TsBYAPAAJWiXQPAAP07AWADwACVol0DwAD9bQJgA70WYAPAAGXUXQPAAP1tAmADvRZgA8AAZdRdA8AA/W0CYAO9FmADwACVol0DwAD+LwFgA8AA/n5dA8AA/i8BYAPAAP5+XQPAAP1tAmADwABlQGADwABmJF0DwAD9OwFgA8AAZudgA8AA/n5dA8AA/TsBYAPAAPyXXQPAAP07AWADwAD8l10DwAD9OwFgA8AA/JddA8AA/W0CYAPAAPyXYAPAAPyXXQPAAP1tAmADwAD8l2ADwAD8l10DwAD9bQJgA70qYAPAAGZgXQPAAP07AWADvWlgA8AA/n5gA8AAlaJgA8AAlaJgA8AAlaJdA8AA/TsBYAPAAGZ+YAPAAGZ+YAPAAP5+YAPAAGZ+XQPAAP07AWADwAD+fl0DwAD9OwFgA8AAZyNdA8AA/TsBW10DwAD9OwFbYQMAXQPAAP07AVthAwBdA8AA/TsBW10DwAD9OwFbXQPAAP07AVtdA8AA/TsBYAPAAGLWXQPAAP07AWADwABnF2EDAV0DwAD9OwFbXGEDAV0DwAD9OwFbXGEDAFthAwBbYQMBW1teAwABBAFgA8AA/n4DhQVhAwFbWwDAAEpxYQMAWwDAAEpyYQMAWwAAXF0DwAD9OwFbXQPAAP07AVtdA8AA/TsBW10DwAD9OwFbYQMBYAPAAP5+XF0DwAD9bQJgA8AA/n5gA8AA/n5hAwFgA8AA/n5cYQMBYAPAAP5+XGEDAWADwAD+flxhAwFgA8AA/n5cXgMAAQQBYAPAAP5+A4UFYQMBW1sAwABKcWEDAFsAwABKcmEDAFsAAFxdA8AA/TsBW10DwAD9OwFbXQPAAP07AVteAwABBAFgA8AA/n4DhQVhAwFbWwDAAEpxYQMAWwDAAEpyYQMAWwAAXGEDAWADwAD+flxdA8AA/TsBW14DAAEEAWADwAD+fgOFBWEDAVtbAMAASnFhAwBbAMAASnJhAwBbAABcXQPAAP07AVthAwJgA8AA/n5dA8AA/W0CYAPAAP5+W1thAwJgA8AA/n5dA8AA/W0CYAPAAP5+W1thAwJgA8AA/n5dA8AA/W0CYAPAAP5+W1thAwFgA8AA/n5cYQMBYAPAAHhtXGEDAWADwABnI1xhAwFgA8AA+tFcYQMBYAPAAPrRXGEDAWADwAD+flxhAwFgA8AA/n5cYQMBYAPAAP5+XGEDAWADwAD+flxhAwFgA8AA/n5cXgMAAQIBYAPAAP5+AZpNYAPAAPrRAAFXA8AAZxEAW14DAAECAWADwAD+fgGaTWADwAD60QABVwPAAGcRAFtdA8AA/TsBW10DwAD9OwFbXQPAAP07AVtdA8AA/TsBW10DwAD9OwFbXQPAAP07AVtdA8AA/TsBW10DwAD9OwFbXQPAAP07AVtdA8AA/TsBYAPAAP5+XQPAAGjgAV8DAABdA8AAaOABXwMAAF0DwAD9OwFgA8AA/n5gA8AA/n5hAwFgA8AAYUJgA8AAYUJhAwJgA8AAYUJgA8AAYUJgA8AAYUJhAwJgA8AAYUJgA8AAYUJgA8AAYUJhAwJgA8AAYUJgA8AAYUJgA8AAYUJhAwJgA8AAYUJgA8AAYUJgA8AAYc1hAwFgA8AA+0lgA8AAYUJhAwFgA8AA+0lgA8AAYUJdA8AA/TsBYAPAAGFCXQPAAP07AWADwABhQl0DwAD9OwFgA8AAYUJdA8AA/W0CYAO9KmADwABrYF0DwAD9bQJgA70bYAPAAP5+XQPAAP1tAmADvSpgA8AA/n5dA8AA/i8BYAO9Kl0DwAD9bQJgA708YAPAAP5+XQPAAP1tAmADvSpgA8AAa2BdA8AA/W0CYAO9G2ADwAD+fl0DwAD9bQJgA70qYAPAAP5+XQPAAP4vAWADvSpdA8AA/W0CYAO9PGADwAD+fl0DwAD9bQJgA708YAPAAP5+XQPAAP1tAmADvVFgA8AAZztdA8AA/W0CYAO9PGADwABnO10DwAD9bQJgA708YAPAAGc7XQPAAP1tAmADvTxgA8AA/n5dA8AA/W0CYAO9UWADwABnO10DwAD9bQJgA708YAPAAP5+XQPAAP1tAmADvTxgA8AAZztdA8AA/W0CYAO9PGADwABnO10DwAD9bQJgA708YAPAAP5+XQPAAP1tAmADvTxgA8AAcppdA8AA/TsBYAO9PF0DwAD9bQJgA8AAcppdA8AA/TsBYAO9PF0DwAD9bQJgA708YAPAAHKaXQPAAP1tAmADvTxgA8AAcppdA8AA/W0CYAOIfmADwABr1F0DwAD9bQJgA4JSYAPAAGuzXQPAAP07AWADglJdA8AA/W0CYAPAAGuzXQPAAP07AWADglJdA8AA/W0CYAOIfmADwABr1F0DwACPKQJgA8AAa9RgA8AAa+BdA8AAjykCYAPAAGvUYAPAAGvgXQPAAP1tAmADglJgA8AAa7NdA8AA/i8BYAOH1F0DwAD9bQJgA4JSYAPAAGuzXQPAAP1tAmADglJgA8AAa7NdA8AA/TsBYAPAAIX5XgMAAQIBYAO9dQHAAEjgYAPAAPrRAABcYQMAYAPAAPrRYQMAYAPAAPrRXQPAAP07AWADwABs9V0DwAD9OwFgA8AAbQxdA8AA/TsBYAPAAG1GXQPAAP07AWADwABtW10DwAD9OwFgA8AAbStdA8AA/TsBYAPAAG04XQPAAP07AWADwABtHV0DwAD9OwFgA8AAbWNdA8AA/W0CYAPAAGyxXQPAAP07AWADwABssV0DwAD9OwFgA8AAbQNdA8AA/W0CYAPAAP5+W10DwAD9bQJgA8AA/n5bXQPAAP07AWADwAD+fl0DwAD9OwFgA8AAbUZdA8AA/TsBYAPAAG0rXQPAAP07AWADwABtDF0DwAD9OwFgA8AAbThdA8AA/TsBYAPAAG1GXQPAAP07AWADwABtK10DwAD9bQJgA8AA/n5gA8AAbLFdA8AA/i8BYAPAAPyXXQPAAP1tAmADwABssWADwABt5F0DwADEqQJgA8AA/n5dA8AA/W0CW1tdA8AAxKkCYAPAAP5+XQPAAP07AVtdA8AAxKkCYAPAAP5+XQPAAP07AVtdA8AA/W0CYAPAAP5+YAPAAP3kXQPAAP1tAmADwAD+fmADwAD95F0DwAD9bQJgA8AA/n5gA8AA/eRdA8AA/W0CW1tdA8AA/W0CW1tdA8AA/W0CW1tdA8AA/W0CW1tdA8AA/W0CW1tdA8AA/W0CW1tdA8AA/W0CW1tdA8AA/W0CW1tdA8AA/W0CW1tdA8AA/W0CW1tdA8AA/W0CW1thAwFgA8AAbLFgA8AAbeRdA8AA/W0CYAPAAGyxXQPAAP07AWADwABssV0DwAD9bQJgA8AA/n5bXQPAAP1tAmADwAD+fltdA8AA/W0CYAPAAGyEYAPAAG5IXQPAAP07AWADwABsTV0DwAD9OwFgA4h+XQPAAP07AWADiH5dA8AA/W0CYAPAAGxNYAPAAG5eXQPAAP1tAmADwABsGGADwABuOl0DwAD9bQJgA8AAbIRgA8AAbkBhAwFgA71OYAPAAPrRXQPAAP1tAmADvU5gA8AAbnthAwFgA8AAYUJcYQMBYAPAAGFCXGEDAWADwABhQlxhAwFgA8AAYUJcYQMBYAO9TmADwAD60V0DwAD9bQJgA71OYAPAAG57XQPAAP07AWADwABshF0DwAD9OwFgA8AAbIRdA8AA/i8BYAPAAGyEYQMBYAO9TmADwAD60V0DwAD9bQJgA71OYAPAAG57YQMBYAO9TmADwAD60WEDAWADwABshGADwABue10DwAD9OwFgA71OXQPAAP1tAmADvU5gA8AAbntdA8AA/i8BYAPAAGyEYAPAAPyXYAPAAPyXXQPAAP07AWADwABunV0DwABolAFgA8AAbp1dA8AAaJQBYAPAAG6dYQMBYAO9UVxdA8AAaJQBYAPAAG6dYQMBYAO9UVxdA8AAaJQBYAPAAG6dYQMBYAO9UVxdA8AAaJQBYAPAAG6dYQMBYAO9UVxdA8AAaJQBYAPAAG6dXQPAAGiUAWADwABunV0DwABolAFgA8AAbp1dA8AAaJQBYAPAAG6dXQPAAGiUAWADwABunV0DwABolAFgA8AAbp1dA8AAaJQBYAPAAG6dXQPAAGiUAWADwABunV0DwABolAFgA8AAbp1dA8AAaJQBYAPAAG6dXQPAAGiUAWADwABunV0DwABolAFgA8AAbp1dA8AAaJQBYAPAAG6dXQPAAGiUAWADwABunV0DwAD9bQJgA708XQPAAGiUAWADwABunV0DwAD9OwFgA8AAgKhdA8AA/TsBYAPAAICoXQPAAP07AWADwACAqF0DwABolAFgA8AAbp1dA8AAaJQBYAPAAG6dXQPAAGiUAWADwABunV0DwABolAFgA8AAbp1dA8AAaJQBYAPAAG6dXQPAAGiUAWADwABunV0DwAD9bQJgA8AAbp1dA8AAaJQBYAPAAG6dXQPAAGiUAWADwABunV0DwABolAFfAwAAXQPAAGiUAV8DAABhAwFdA8AAaJQBYAPAAG/AXQPAAGiUAWADwABvwGEDAV0DwABolAFgA8AAb8BdA8AAaJQBYAPAAG/AYQMBXQPAAGiUAWADwABvwF0DwABolAFgA8AAb8BhAwBdA8AAaJQBYAPAAG/AYQMAXQPAAGiUAWADwABvwGEDAF0DwABolAFgA8AAb8BhAwBdA8AAaJQBYAPAAG/AYQMAXQPAAGiUAWADwABvwGEDAF0DwABolAFgA8AAb8BhAwBdA8AAaJQBYAPAAG/AYQMAXQPAAGiUAWADwABvwGEDAF0DwABolAFgA8AAb8BhAwBdA8AAaJQBYAPAAG/AYQMAXQPAAGiUAWADwABvwF0DwABolAFgA8AAb8BdA8AAaJQBYAPAAG/AXQPAAGiUAWADwABvwF0DwABolAFgA8AAb8BdA8AAaJQBYAPAAG/AXQPAAGiUAWADwABvc10DwABolAFgA8AAb8BdA8AAaJQBYAPAAG/AXQPAAGiUAWADwABvc10DwABolAFgA8AAb8BdA8AAaJQBYAPAAG/AXQPAAGiUAWADwABvwF0DwABolAFgA8AAb8BdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvwF0DwABolAFgA8AAb8BdA8AAaJQBYAPAAG/AXQPAAGiUAWADwABvwF0DwABolAFgA8AAb8BdA8AAaJQBYAPAAG/AXQPAAGiUAWADwABvc10DwABolAFgA8AAb3NdA8AA/TsBYAPAAGFCXQPAAGiUAWADwABvwF0DwABolAFgA8AAb8BdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvwF0DwABolAFgA8AAb8BdA8AAaJQBYAPAAG9zXQPAAGiUAWADwABvwF0DwABolAFgA8AAb8BdA8AAaJQBYAPAAG/AXQPAAGiUAWADwABvwF0DwABolAFgA8AAb3NdA8AAaJQBYAPAAG/AXQPAAGiU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wAD9OwFgA71RXQPAAP07AWADvVFdA8AA/W0CYAPAAPyXYAPAAHlPXQPAAP4vAWADwABhQmEDAWADvSpcYQMBYAO9KlxhAwFgA70qXGEDAWADvSpcYQMBYAO9KlxhAwFgA70qXGEDAWADvSpcYQMBYAO9KlxhAwFgA70qXGEDAWADvSpcYQMBYAO9KlxhAwFgA70qXGEDAWADvSpcYQMBYAO9KlxhAwFgA70qXGEDAWADvSpcYQMBYAO9KlxhAwFgA70qXGEDAWADvSpcYQMBYAO9KlxhAwFgA70qXGEDAWADvSpcYQMBYAO9KlxhAwFgA70qXGEDAWADvSpcXQPAAP4vAWADvSpdA8AA/i8BYAO9Kl0DwAD+LwFgA70qXQPAAP4vAWADvSpdA8AA/i8BYAO9Kl0DwAD9OwFgA71pYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXGEDAWADwAB5T1xhAwFgA8AAeU9cYQMBYAPAAHlPXF0DwAD+LwFgA71RXQPAAP1tAmADwAD+fl0DwAD+LwFgA708XQPAAP1tAmADwAD+fl0DwAD+LwFgA708XQPAAP1tAmADwAD+fl0DwAD+LwFgA70qXQPAAP4vAWADvSpdA8AA/i8BYAO9Kl0DwAD+LwFgA70qXQPAAP1tAmADwAD+fl0DwAD+LwFgA708XQPAAP4vAWADvTxdA8AA/i8BYAO9Kl0DwAD+LwFgA70qXQPAAP1tAmADwAD+fl0DwAD+LwFgA708XQPAAP4vAWADvTxdA8AA/i8BYAO9Kl0DwAD9OwFgA8AAetZdA8AA/W0CYAPAAEvPXQPAAP1tAmADwAD+fmADwAB61l0DwAD9bQJgA8AA/n5gA8AAetZdA8AA/i8BYAO9Kl0DwAD9bQJgA8AA/n5gA8AAet9dA8AA/i8BYAO9Kl0DwAD+LwFgA70qYQMBYAPAAGL9XGEDAWADwABi/VxhAwFgA8AAYv1cYQMBYAPAAGL9XF0DwAD+LwFgA70qXQPAAP4vAWADvSpdA8AA/i8BYAO9KmEDAWADwAD+flxdA8AA/i8BYAO9Kl0DwAD+LwFgA70qYQMBYAPAAP5+XF0DwAD+LwFgA70qXQPAAP4vAWADvSpdA8AA/i8BYAO9Kl0DwAD+LwFgA70qXQPAAP1tAmADvSpdA8AA/TsBYAO9Kl0DwAD9OwFgA70qXQPAAP1tAmADvSpdA8AA/TsBYAO9Kl0DwAD9OwFgA70qYQMBYAPAAP5+XF0DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9bQJgA711YAPAAEXnXQPAAP1tAmADvXVgA8AAReddA8AA/TsBYAO9dV0DwAD9OwFgA71OXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnYQMAW10DwAD+LwFgA70qXQPAAP1tAmADvU5gA8AAReddA8AA/W0CYAO9TmADwABF510DwAD9OwFgA4PPXQPAAP1tAmADvU5gA8AAReddA8AA/W0CYAOIfmADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADhbFdA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9bQJgA711YAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9bQJgA711YAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AA/n5dA8AA/TsBYAPAAEXnYQMBYAOIflxdA8AA/TsBYAPAAGL9XQPAAP07AWADiH5dA8AA/i8BYAO9dV0DwAD9bQJgA711YAO+UV0DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnYQMBYAPAAEJLYAPAAEXnYQMBYAPAAEJLYAPAAEXnYQMBYAPAAEJLYAPAAEXnYQMAXF0DwAD9OwFgA8AAo+VdA8AA/TsBYAPAAKPlXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAKPlXQPAAP07AWADwACj5V0DwAD9bQJgA4TZYAPAAGFCXQPAAP1tAmADiBpgA8AA/JddA8AA/TsBYAPAAGFCXQPAAP07AWADiBphAwBcYQMBYAOID2ADwABF52EDAmADiA9gA4gaXQPAAP07AWADwABhQl0DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnYQMBYAOIGmADwAD60WEDAWADiBpcYQMBYAOIGmADwAD60V0DwAD9OwFgA8AASoRdA8AA/TsBYAPAAKPlXQPAAP07AWADwACj5V0DwAD9OwFgA8AAo+VdA8AA/TsBYAPAAEqEXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/W0CYAOIfmADwABF510DwAD9OwFgA8AAReddA8AA/W0CYAPAAP5+YAPAAEXnXQPAAP07AWADwABF510DwAD9bQJgA8AA/n5gA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABi1l0DwAD9OwFgA8AAReddA8AA/W0CYAPAAP5+YAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBW10DwAD9OwFbYQMBYAOF6GADvlFhAwFgA4XoYAO+UV0DwAD+LwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABi1l0DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP1tAmADwAD+fmADhNldA8AA/W0CYAPAAP5+YAOE2V0DwAD9OwFgA8AAReddA8AA/W0CYAPAAP5+YAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AARedeAwABAgJgA8AA/JdgA8AA/n4AAGADwAD+fl4DAAECAmADwAD8l2ADwAD+fgAAYAPAAP5+YQMAYAPAAP5+XgMAAQICYAPAAPyXYAPAAP5+AABgA8AA/n5hAwBgA8AA/n5eAwABAgJgA8AA/JdgA8AA/n4AAGADwAD+fmEDAGADwAD+fmEDAGADwAD+fl0DwAD9OwFgA8AARedhAwFgA4QSYAPAAPrRYQMBYAOEEmADwAD60V0DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWADwABF510DwAD9OwFgA8AARedhAwJgA8AAS89gA708YAPAAPrRYQMCYAPAAEvPYAO9PGADwAD60V0DwAD9OwFgA8AAReddA8AA/TsBYAPAAEXnXQPAAP07AWAD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AP07AWADiWJdA8AA/TsBYAOJYl0DwAD9OwFgA4liXQPAAP07AWADiOlgA8AA/n5dA8AA/TsBYAOJYl0DwAD9OwFgA4jpYQMAXGEDAWADiOlgA8AA+tFhAwBcYQMAXGEDAFxhAwBcYQMBYAOI6WADwAD60WEDAFxhAwBcYQMAXGEDAFxhAwFgA4jpYAPAAPrRYQMAXGEDAFxdA8AA/TsBYAOJgl0DwAD9bQJgA4mCYAOI6WADwACJ1WADwACJ1WADwACJ1WADwACJ1WADwACJ1WADwACJ1WADwACJ1WADwACJ1WADwACJpWADwACJpWADwACJpWADwACJpWADwACJpWADwACJpWADwACJpWADwACJpWADwACJsWADwACJsWADwACJsWADwACJsWADwACJsWADwACJsWADwACJsWADwACJsWADwACJvWADwACJvWADwACJvWADwACJvWADwACJvWADwACJvWADwACJvWADwACJvWADwACJ4WADwACJ4WADwACJ4WADwACJ4WADwACJ4WADwACJ4WADwACJ4WADwACJ4WADwACJyWADwACJyWADwACJyWADwACJyWADwACJyWADwACJyWADwACJyWADwACJyV0DwAD9OwFgA4jpYAPAAInVYAPAAIm9YAPAAIm9XQPAAP07AWADwACN4V0DwAD9OwFgA8AAjeFdA8AA/TsBYAPAAGQXXQPAAP4vAWADvSphAwFgA70qXGEDAWADvSpcYQMBYAO9KlxdA8AA/W0CYAPAAP5+XQPAAP07AWADwACN4V0DwAD9bQJgA7ugYAPAAI3hXQPAAP1tAmADu6BgA8AAjeFdA8AA/TsBYAO9Tl0DwAD9OwFgA8AAjg1dA8AA/TsBYAPAAI6PYAPAAJgGXQPAAP4vAWADwAD+fl0DwAD9OwFgA8AAjo9gA8AAmAZdA8AA/i8BYAPAAP5+XQPAAP07AWADwACOj2ADwACYBl0DwAD+LwFgA8AA/n5dA8AA/TsBYAPAAI6PYAPAAJgGXQPAAP07AWADwACOm10DwAD9OwFgA8AAjptdA8AA/TsBYAPAAI5uXQPAAP07AWADwACOj2EDAWADvTxcXQPAAP07AWADwACOj2ADwACYBl0DwAD9OwFgA8AAjo9dA8AA/TsBYAPAAI6PXQPAAP07AWADvTxdA8AA/TsBYAPAAI6PYAPA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RedgA8AAReddA8AA/W0CYAPAAEXnYAPAAEXnXQPAAP1tAmADwABF52ADwABF510DwAD9bQJgA8AA/eRdA8AA/W0CYAPAAEXnYAPAAEXnXQPAAP1tAmADwABF52ADwABF510DwAD9OwFgA8AAReddA8AA/TsBYAPAAP3kXQPAAP1tAmADwABF52ADwABF510DwAD9bQJgA8AAReddA8AA/W0CYAPAAEXnYAPAAEXnXQPAAP1tAmADwABF52ADwABF510DwAD9bQJgA8AARedgA8AAReddA8AA/W0CYAPAAEXnXQPAAP1tAmADwABF52ADwABF510DwAD9bQJgA8AARedgA8AAReddA5S+AWADwABF510DlL4BYAPAAEXnXQPAAP1tAmADwAD95F0DwAD9bQJgA8AARedgA8AAReddA8AA/W0CYAPAAEXnXQPAAP1tAmADwABF52ADwABF510DlL4BYAPAAEXnXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJQTAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAXQPAAJPRAl8DAABfAwEAYQMCYAPAAP5+YAPAAP5+YAPAAJcCYQMCYAPAAP5+YAPAAP5+YAPAAJcCYQMCYAPAAP5+YAPAAP5+YAPAAJcCXQPAAP07AWADwACW6F0DwAD9OwFgA8AAluhdA8AA/TsBYAPAAJdNXQPAAP07AWADwACVmF0DwAD9OwFgA8AAlZhdA8AA/TsBYAPAAJdaXQPAAP07AWADwACXWl0DwAD9OwFgA8AAlnddA8AA/TsBYAPAAJZ3XQPAAP07AWADwACXWl0DwAD9OwFgA8AAl01dA8AA/TsBYAPAAJWYXQPAAP07AWADwACXWl0DwAD9OwFgA8AAlfZhAwFgA8AAlZ9cYQMBYAPAAJWfXF0DwAD9OwFgA8AAlIFdA8AA/TsBYAPAAJdaW1thAwFgA8AAlZhgA8AAlIFhAwFgA8AAlZhgA8AAlIFhAwFgA8AAlZhgA8AAlIFdA8AA/TsBYAPAAJdaXQPAAP07AVtd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A8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxhAwNgA8AA/n5gA8AA/JdgA8AA/n5cYQMDYAPAAP5+YAPAAPyXYAPAAP5+XGEDA2ADwAD+fmADwAD8l2ADwAD+flxgA8AAmAZgA8AAmAZgA8AAmAZgA8AAmAZgA8AAmAZgA8AAmAZgA8AAmAZgA8AAmAZgA8AAmAZdA8AA/i8BYAPAAEvPXQPAAP07AWADwACWd10DwAD9OwFgA8AAlnddA8AA/TsBYAPAAJWYYAPAAJgGYAPAAJgGYQMAYAPAAJWYXQPAAP1tAmADwACVomADwACVmF0DwAD9bQJgA8AAlaJgA8AAS89dA8AA/TsBYAPAAP5+YAPAAJgGYAPAAJgGYAPAAJgGYAPAAJgGYAPAAJgGXQPAAP07AWADwACVmGADwACYBl0DwAD9OwFgA8AAlnddA8AA/TsBYAPAAJWYYAPAAJgGXQPAAP07AWADwACVmGADwACYBmADwACYBmADwACYBmADwACYBl0DwAD+LwFgA714YQMAXQPAAP4vAWADvXhdA8AA/TsBYAPAAI6PXQPAAP07AWADwACOj2ADwACYBmADwACYBmADwACYBmADwACYBmEDAWADvSpgA8AAlZhhAwFgA70qYAPAAJWYYQMBYAO9KmADwACVmF0DwAD9OwFgA8AAlIFdA8AA/TsBYAPAAJSBYQMBYAO9KmADwACUgV0DwAD9OwFgA8AAlIFhAwFgA70qYAPAAJSBXQPAAP07AWADwACUgV0DwAD9OwFgA8AAlIFhAwFgA70qYAPAAJSBXQPAAP07AWADwACUgWEDAWADvSpgA8AAlIFdA8AA/TsBYAPAAJSBYQMBYAO9KmADwACVmF0DwAD9OwFgA8AAlIFhAwFgA70qYAPAAJWYXQPAAP07AWADwACUgWADwACYBmADwACYBmADwACYBmADwACYBmADwACYBmADwACYBmADwACYBmEDAltbYAPAAJWYYAPAAJgGYQMCW1tgA8AAlZhhAwBgA8AAlZhhAwJbW2ADwACVmGEDAGADwACVmF0DwAD9OwFgA8AA/n5dA8AA/TsBYAPAAP5+XQPAAP07AWADwAD+fl0DwAD9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7AAAELwACNRKAAAQyQAI1LkAABDWAAjW6QAAEOMACNdHAAAQ8AAI17UAABD9AAjYXwAAEQoACOTTAAARFwAI5PgAABEdAAjlHQAAESMACOVCAAARKQAI5WcAABEvAAjljAAAETUACOWyAAAROwAI5dgAABFBAAjmfQAAEUcACOjSAAARVAAI6vEAABFaAAjrjQAAEWcACOymAAARdAAI720AABGFAAjwgwAAEZAACPGHAAARmwAI8owAABGmAAjzgAAAEbEACPSMAAARwAAI96sAABHLAAj58AAAEdgACPs1AAAR4wAI+00AABHwAAj8cAAAEfsACPyBAAASAgAI/T4AABINAAj+UQAAEhQACP6JAAASIQAJABwAABIsAAkBfAAAEjcACRCSAAASRAAJErUAABJRAAkU8gAAEmIACRZ/AAASbwAJGdgAABKAAAkaBQAAEoYACRunAAASkwAJG9cAABKZAAkdOwAAEqYACR3gAAASswAJHhIAABK5AAkneAAAEsoACSjZAAAS1wAJKzkAABLkAAks5gAAEu8ACS0KAAAS+AAJMbAAABMFAAkzDAAAEw8ACTYeAAATGgAJN+EAABMlAAk5AQAAEzAACTxlAAATOwAJPJUAABNGAAk/hwAAE1EACUNaAAATXgAJQ34AABNnAAlLNwAAE3QACUtbAAATfQAJTGsAABOKAAlQyQAAE5QACVDtAAATnQAJUs8AABOqAAlXhgAAE7QACVeqAAATvQAJWZEAABPKAAlerAAAE9QACV7QAAAT3QAJYfEAABPqAAltdgAAE/UACW2zAAAUAAAJb5kAABQLAAlv/AAAFBYACXKPAAAUIQAJh5MAABQsAAmIegAAFDsACZgtAAAURgAJmbQAABRRAAmccQAAFFwACaOHAAAUZwAJo7QAABRyAAmpVQAAFH0ACandAAAUiAAJq6gAABSTAAmr4QAAFKAACa3FAAAUqwAJsskAABS2AAmz9AAAFMEACbUfAAAUzAAJvx0AABTXAAnAMAAAFOIACcCXAAAU7QAJxH8AABT4AAnGBgAAFQMACcbsAAAVDgAJz+4AABUZAAnQXwAAFSwACdIgAAAVNwAJ1C8AABVCAAnnagAAFU4ACelLAAAVXwAJ6wAAABVwAAnskgAAFXQACeylAAAVfQAJ7OAAABWKAAnt5gAAFZcACe3+AAAV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mgANYHkAACCnAA1gyAAAILQADWDhAAAgwQANYWgAACDOAA1htgAAINsADWIDAAAg6AANYhwAACD1AA1ifgAAIQIADWL6AAAhDwANY04AACEcAA1jhAAAISkADWP5AAAhNgANZEMAACFDAA1kjQAAIVAADWTXAAAhXQANZSEAACFqAA1lawAAIXcADWV6AAAhhAANZgYAACGKAA1meAAAIZcADWaRAAAhpAANZvkAACGxAA1nPwAAIb4ADWdxAAAhywANZ8YAACHYAA1n/AAAIeUADWhCAAAh8gANaHQAACH/AA1oyQAAIgwADWj/AAAiGQANaUUAACImAA1pdwAAIjMADWmqAAAiQAANaf8AACJNAA1qMwAAIloADWpvAAAiZwANawcAACJ0AA1rZwAAIoEADWuAAAAijgANbA8AACKbAA1sYwAAIqgADWyZAAAitQANb3kAACLCAA19pwAAIs0ADX3EAAAi2wANffkAACLpAA1+NwAAIvcADX5ZAAAjBQANfoMAACMTAA2AIQAAIyEADYHkAAAjNwANgz0AACNNAA2DqgAAI2MADYQbAAAjeQANhJEAACOPAA2HXwAAI6UADYf6AAAjswANjwAAACO8AA2UWwAAI80ADZggAAAj3gANmsYAACPrAA2qVAAAI/YADarPAAAkAwANq20AACQOAA25dgAAJB8ADbmIAAAkKgANua0AACQ1AA26KQAAJEAADbpyAAAkSwANup4AACRYAA26ygAAJGUADbr1AAAkcgANuxgAACR9AA3ApAAAJIgADcJ1AAAkkwANwvsAACSeAA3DWwAAJKkADcXJAAAktAANxhMAACS/AA3J0AAAJMoADcsbAAAk1QANzIQAACTgAA3MvAAAJOsADc7MAAAlAQAN0vgAACUMAA3bIAAAJRcADdtKAAAlIgAN4V8AACUvAA3nrQAAJTwADefQAAAlSwAN6EYAACVaAA3pZQAAJWUADemHAAAlcAAN6asAACV7AA3xKwAAJYYADfyTAAAlkQAOA28AACWkAA4QLgAAJbEADhFGAAAlvgAOEfcAACXJAA4edAAAJdQADh7BAAAl4QAOH8IAACXuAA4txgAAJfcADpCqAAAmBAAOkSMAACYRAA6RsAAAJh4ADphFAAAmKwAOmdgAACY1AA6awAAAJjkADp0fAAAmPQAOniYAACZMAA6fawAAJlsADp/dAAAmagAOoPAAACZzAA6hYgAAJoIADqKEAAAmiwAOozcAACaaAA6mngAAJqMADqfeAAAmuAAOquMAACbJAA6rwgAAJtYADqwkAAAm4wAOrToAACbnAA6vjQAAJusADrGRAAAm7wAOsbsAACb+AA6yNAAAJwsADrXZAAAnDwAOtgMAACcTAA63IwAAJxcADrdDAAAnJAAOuQoAACcxAA67UwAAJz4ADr3LAAAnQgAOvm8AACdGAA7AAwAAJ0oADsD9AAAnTgAOwSIAACdSAA7DGwAAJ1YADsWPAAAnZQAOxmQAACd0AA7GngAAJ3gADsbSAAAnfAAOyNgAACeAAA7JEgAAJ4QADsmKAAAniAAOyeYAACeMAA7NFQAAJ5AADs9HAAAnlAAO0FMAACehAA7RsgAAJ64ADtJ0AAAntAAO5osAACe6AA7qLQAAJ8AADyB3AAAnxgAPIW8AACfRAA82JQAAJ9wAD03bAAAn6QAPTgcAACf0AA9ckQAAJ/8AD2dhAAAoCgAPaOIAACgXAA9v9QAAKCQAD3MJAAAoLwAPd2IAACg6AA93tQAAKEcAD7sFAAAoVAAPvKEAAChfAA+87QAAKGoAD73EAAAodQAPwRQAACiAAA/BVwAAKIsAD9eDAAAolgAP2kkAACihAA/eHwAAKLMAD95JAAAotwAP3nUAACi7AA/ejQAAKL8AD+GZAAAowwAP8KUAACjOAA/1lwAAKNkAD/iDAAAo5AAP+LYAACjsAA/8IQAAKPQAD/x1AAAo/wAQMCIAACkKABA4RQAAKRcAEDvYAAApIgAQPOsAACktABA9pgAAKTgAEEaIAAApQwAQRqgAAClOABBGxwAAKVkAEFoAAAApZAAQcTwAAClvABC+mAAAKXoAEMDTAAApfgAQwUgAACmJABDFmAAAKZQAEMqLAAApoQAQ5OsAACmsABD5HwAAKbcAEQmHAAApygARG0gAACnVABEr8wAAKeAAESxjAAAp6wARLNMAACn2ABE58gAAKgEAETokAAAqDAAROqcAACoXABE+UgAAKh0AEUDhAAAqMAARVUoAACo7ABFVagAAKkgAEVjWAAAqWwARWdgAACpmABFaugAAKnkAEVt1AAAqhAARXdEAACqPABFhDQAAKqIAEWUvAAAqrQARav8AACq4ABFrIQAAKsMAEWufAAAqzgARa8AAACrZABFsVwAAKuQAEWyDAAAq7wARbNkAACr6ABFtDgAAKwUAEW1uAAArEAARbaMAACsbABFuYgAAKyYAEW79AAArMQARcAgAACs8ABFwpAAAK0cAEXKdAAArVAARcvYAACtfABFzcQAAK2wAEXTpAAArfQARdQ8AACuKABF4ygAAK50AEXnHAAArqgARe6MAACu3ABF74wAAK88AEX7PAAAr2gARf0AAACvrABF/lAAAK/YAEX+6AAAsAQARf/QAACwSABGAXQAALCMAEYEkAAAsMAARgWAAACxBABGCawAALFIAEYKRAAAsVgARgzUAACxjABGDxQAALG4AEYUNAAAseQARkKEAACyEABGQ4QAALJwAEZs+AAAspwARo58AACyyABGoOQAALL8AEahjAAAszAARqJYAACzfABGo1wAALPQAEalNAAAtAQARqZAAAC0WABGpvgAALSMAEar3AAAtNgARqyQAAC1LABGrRwAALVgAEay9AAAtawARrOMAAC1vABGtqwAALXwAEa+lAAAtlgARsC0AAC2jABGwhgAALbAAEbFTAAAtvQARsYoAAC3KABGyBAAALdcAEbMUAAAt5AARuVsAAC3xABG+KwAALfcAEcK9AAAuBAARxR8AAC4LABHKfwAALhIAEcxBAAAuIAARzPwAAC4nABHNvAAALjgAEc53AAAuRgAR3B0AAC5XABHeCAAALnAAEeuWAAAuewAR65kAAC6IABHzKwAALqIAEfUNAAAurQAR96MAAC61ABINugAALr0AEhFvAAAuzgASNo8AAC7SABI2wQAALt4AEjoCAAAu6gASQqgAAC7zABJEEAAALwAAElZPAAAvDQASWWMAAC8eABJZgQAALysAElmfAAAvNgASXSEAAC9HABJdSAAAL1EAEmK1AAAvWwASYugAAC9oABJjOAAAL3UAEmbMAAAvggASZuwAAC+LABJnLwAAL5YAEmfaAAAvoQASaigAAC+qABJqdAAAL7MAEmqUAAAvvAASat8AAC/HABJs2AAAL9IAEm4uAAAv4wASbsQAAC/0ABJ1FAAAMAUAEnVlAAAwFgASde0AADAnABJ9TAAAMDgAEpy+AAAwSQASob4AADBPABKlzgAAMFoAErwvAAAwZQASyBYAADB0ABLMAAAAMIMAEtNWAAAwkgAS3YUAADChABLw2gAAMLAAEvD+AAAwvQAS8TUAADDOABLyLAAAMOIAEvb4AAAw7wAS/kUAADD6ABL/TAAAMQUAEv+GAAAxFAATAAEAADEjABMA7QAAMS4AEwE2AAAxPQATAe0AADFMABMEyQAAMVcAEwVxAAAxYgATBhIAADFtABMGkwAAMXgAEwi6AAAxgwATCY8AADGOABMKWAAAMZkAEwrDAAAxpAATCywAADGvABMNkgAAMboAEw54AAAxxQATDyMAADHQABMPjAAAMdsAExD1AAAx5gATEiAAADH1ABMS1gAAMgAAExOdAAAyCwATFFoAADIWABMW9gAAMiEAExhMAAAyLAATGbIAADI3ABMaowAAMkIAEx7FAAAyTQATHx4AADJTABMhGgAAMlkAE0X7AAAyZAATRhwAADJzABNGUgAAMn4AE0bhAAAyiwATRzEAADKWABNcfAAAMqcAE12nAAAyugATZHwAADLNABNlYwAAMuAAE2ikAAAy8wATahsAADMGABNqQwAAMyEAE2+VAAAzNAATcNQAADNHABNyVwAAM1oAE3LAAAAzbQATivsAADOAABOLrgAAM40AE5TEAAAzmAATl7kAADOjABOX9wAAM7AAE5jMAAAzvQATmSMAADPKABOZnwAAM9cAE5n2AAAz3QATqlwAADPjABOzewAAM/AAE7nrAAAz/QATu1kAADQKABO7swAANBUAE8v5AAA0IgAT1A4AADQ1ABPVwwAANEAAE9irAAA0TQAT2gIAADRaABPaLgAANGcAE+D3AAA0dAAT4U0AADSBABPijAAANI4AE+K4AAA0mwAT4ygAADSoABPjVAAANLUAE+REAAA0wgAT5QoAADTPABPpdgAANNwAE+oLAAA07wAT6rkAADUCABPsaQAANQ0AE+zLAAA1IAAT8AsAADUzABPwLQAANUAAE/BPAAA1TQAT940AADVaABP7BwAANWUAFAbEAAA1cgAUChsAADWCABQRpQAANZUAFBX8AAA1pQAUF6UAADWyABQYXQAANcEAFBiaAAA10AAUGmIAADXfABQbEwAANe4AFB04AAA1/QAUHoYAADYKABQgBAAANhcAFCh3AAA2JAAUN3kAADYxABQ+7gAANj4AFEAYAAA2SwAUSMUAADZYABRfuwAANmMAFGH5AAA2dAAUZEoAADaBABRkawAANo4AFG2hAAA2mwAUbdwAADasABRvGgAANsgAFG9VAAA22QAUcDUAADb1ABRwcAAANwYAFHFSAAA3IgAUcY0AADczABSXkwAAN08AFJkwAAA3XgAUmY4AADdpABSuXAAAN3gAFK9NAAA3hQAUwjoAADeYABTCfgAAN54AFMQmAAA3uAAUxGoAADe+ABTGdwAAN9gAFMatAAA35QAUyV4AADfyABTJmgAAN/gAFMnWAAA3/gAUyhIAADgEABTKPwAAOAoAFNgwAAA4EAAU2E0AADgdABTbeQAAOCgAFNu5AAA4NQAU3EMAADhCABTfcAAAOE0AFOA8AAA4WgAU7s4AADhnABTvmgAAOHIAFPL+AAA4fwAU80sAADiKABT0ygAAOJUAFP5ZAAA4oAAU/qUAADi6ABUAHwAAOMcAFQOoAAA40gAVA/QAADjsABUFfgAAOPkAFQfeAAA5BAAVCYsAADkPABUJuQAAORoAFQpgAAA5JQAVCowAADkwABUK3QAAOTsAFQvtAAA5RgAVFXsAADlRABUYoQAAOVwAFR8LAAA5ZwAVIroAADl0ABUkEQAAOX8AFTn9AAA5igAVVoEAADmVABVXLwAAOaAAFVq4AAA5qwAVWwoAADm2ABVc4wAAOcEAFWDeAAA50AAVYWsAADnhABVjNgAAOfIAFWP8AAA5+QAVZEsAADoAABV2OQAAOgsAFXofAAA6FgAVhccAADohABWHGwAAOiwAFYhhAAA6NwAVt5UAADpCABW31AAAOk8AFblfAAA6XAAVucYAADpnABXRjQAAOnIAFdJhAAA6gwAV28sAADqUABXdggAAOqUAFd42AAA6sAAV3zwAADq7ABXgMgAAOsoAFeDRAAA6zgAV7fkAADrSABXvCgAAOuEAFfBCAAA68AAV8qQAADr/ABXzGgAAOw4AFfNhAAA7HQAV/5MAADsoABYDXgAAOzMAFgRXAAA7QAAWB4QAADtNABYHqAAAO1oAFgjTAAA7ZQAWCSgAADtwABYLXAAAO3sAFgwfAAA7hgAWDEMAADuTABYNxwAAO54AFg9WAAA7qQAWD6sAADu0ABYSDwAAO78AFhNOAAA7zAAWFQMAADvZABYVjQAAO+YAFhXuAAA78QAWF0kAADv8ABYXpgAAPAcAFjCqAAA8EgAWMkEAADwdABYz5QAAPCgAFjRNAAA8MwAWNvwAADw+ABY3vwAAPE0AFj7QAAA8XAAWYT4AADxgABZpawAAPGcAFm8CAAA8cgAWcxgAADx9ABZzVQAAPIoAFnOSAAA8lwAWc88AADykABZ0DAAAPLEAFnRLAAA8vgAWdHoAADzLABZ0nQAAPNgAFn5QAAA85QAWfosAADzyABaYMwAAPP8AFq9+AAA9DAAW/ZYAAD0ZABcwYQAAPSoAF0QRAAA9OQAXREYAAD1EABdK0QAAPU8AF0sUAAA9WgAXS7oAAD1lABdMOAAAPXAAF0yGAAA9ewAXTQAAAD2GABdOhwAAPZEAF07pAAA9oAAXTwIAAD2rABdWzgAAPbYAF1duAAA9wQAXV6UAAD3MABdc8gAAPdcAF12FAAA94gAXXj8AAD3tABdlWgAAPfgAF2V9AAA+AwAXZaAAAD4OABdzAQAAPhkAF3NbAAA+JAAXdogAAD4vABd2wQAAPjoAF3j6AAA+RQAXeV0AAD5QABeRPgAAPlsAF5eLAAA+XwAXnp0AAD5qABee0gAAPnUAF+L9AAA+gAAX44oAAD6NABfnGAAAPpMAF+gpAAA+ngAYBWsAAD6pABghoAAAPrYAGCfVAAA+wwAYKLIAAD7MABgpNwAAPtUAGCmcAAA+3gAYKfcAAD7nABgqCwAAPvAAGCwNAAA++QAYRt0AAD8CABhG+QAAPw0AGFfgAAA/GAAYmDIAAD8nABiYVwAAPzIAGJ2TAAA/PQAYncQAAD9OABifbQAAP1kAGKb5AAA/ZAAYqDkAAD9vABioiAAAP3oAGKm+AAA/hQAYyc4AAD+UABjKOwAAP58AGMrVAAA/qgAYyy8AAD+1ABjLlAAAP8AAGM60AAA/ywAYzv4AAD/ZABjjgAAAP+cAGO80AAA/8gAY+qkAAEABABj75QAAQBAAGP80AABAHwAZAF4AAEAqABkFMgAAQDwAGQZdAABARwAZElcAAEBSABkT1AAAQGMAGReBAABAdAAZHTEAAECFABkiuAAAQJYAGVq/AABApwAZW/gAAECuABnq+wAAQLUAGqP0AABAwgAapDcAAEDNABrEfwAAQNgAGsSjAABA5QAaxNoAAED4ABrFsQAAQQwAGsZaAABBGQAaxucAAEEpABrHaAAAQTkAGseRAABBSQAayBcAAEFZABrWgAAAQWkAGtmkAABBdgAa2iEAAEGDABrbegAAQZAAGtwbAABBnQAa3ncAAEGqABrf3AAAQbcAGuAWAABBygAa4GwAAEHdABrhcgAAQeoAGuG9AABB/QAa4k8AAEIQABrjYwAAQh0AGuPdAABCKgAa5B8AAEI3ABrk1wAAQkQAGuUwAABCUQAa5b8AAEJeABrnGAAAQmsAGudXAABCeAAa53IAAEKFABrpcgAAQpIAGumVAABCnwAa6s8AAEKsABrq8gAAQrkAGuuyAABCxgAa69UAAELTABrsiwAAQuAAGuyuAABC7QAa7ZgAAEL6ABrttwAAQwcAGu4TAABDFAAa7lsAAEMhABrvMAAAQy4AGu+UAABDOwAa8DgAAENIABrzsgAAQ1UAGvPTAABDYgAa9DAAAENvABr1HQAAQ3wAGvU+AABDiQAa9ZsAAEOWABr3hwAAQ6MAGvfAAABDtwAa+PMAAEPEABr5SgAAQ9gAGvp7AABD5QAa+tIAAEP5ABr8QwAARAYAGvyaAABEGgAa/TwAAEQnABr9lgAARDsAGv59AABETwAa/vMAAERjABr/qQAARHcAGwGFAABEiwAbAcsAAESfABsC+wAARKwAGwNBAABEwAAbBLEAAETNABsE9wAAROEAGwaJAABE7gAbBqoAAET7ABsHBwAARQgAGwg8AABFFQAbCSYAAEUgABsJRwAARS0AGwm+AABFOgAbC10AAEVHABsL5gAARVQAGwy7AABFYQAbDmIAAEV1ABsO0AAARXsAGw8qAABFjwAbEWYAAEWcABsgNQAARakAGyXqAABFtgAbKAEAAEW8ABsovAAARcIAGywLAABF1QAbLKEAAEXiABstKQAARe8AGy3SAABF/AAbLoEAAEYJABsxywAARhYAG0DDAABGHAAbQSMAAEYpABtB+gAARjYAG0JdAABGQwAbWGQAAEZQABtYowAARl8AG1peAABGbgAbWuMAAEZ7ABta/QAARrUAG1wlAABGxAAbXD8AAEb+ABt5ZgAARw0AG3rQAABHJQAbe+oAAEcyABt9dAAAR0QAG33lAABHTwAbfroAAEdaABt/2QAAR2cAG4EQAABHdAAbgkcAAEd/ABuETAAAR4wAG4RoAABHngAbhIQAAEewABuExgAAR8IAG4TiAABH1AAbhP4AAEfmABuFGgAAR/gAG4U2AABICgAbjH0AAEgcABuNAgAASCcAG7TNAABIMgAcKBsAAEg4ABwuMwAASEMAHFdjAABITgAdUroAAEhZAB1USwAASF8AHVSSAABIZQAdV68AAEhrAB1f+gAASHYAHWKpAABIegAdaDAAAEiFAB1sHwAASJYAHW6OAABIpQAdcLsAAEi0AB1w6wAASMMAHX7+AABI0gAdgSgAAEjdAB2B0QAASO4AHYKhAABJBgAdhmQAAEkRAB2I/QAASRUAHYngAABJJAAdisMAAEkzAB2LrAAASUIAHY5hAABJUwAdkHcAAEliAB2RVQAASXoAHZIJAABJhwAdk7oAAEmfAB2UbgAASawAHZYDAABJxAAdlpwAAEnRAB2WoQAASd4AHZtEAABJ9gAdnDUAAEoHAB2m7wAASg0AHamYAABKHAAdqcAAAEonAB2p9gAASjYAHa4iAABKRQAdrk4AAEpUAB2vewAASl8AHa+nAABKbgAdsNYAAEp5AB2xAgAASooAHbmfAABKlQAdvjQAAEqkAB2+jQAAStQAHb7oAABLBAAdv5UAAEspAB2/5wAASzgAHchSAABLQwAd1V4AAEtUAB3Z3AAAS2UAHdo7AABLgAAd3jEAAEuNAB3fZAAAS5wAHeCeAABLqwAd4e4AAEu8AB3k8AAAS8cAHeXmAABLywAd50UAAEvPAB3n0QAAS9MAHfZHAABL1wAd9m0AAEvqAB34HQAAS/cAHfj3AABMCAAd+YwAAEwVAB36RgAATCIAHfq1AABMLwAd/XUAAEw8AB3+1gAATE0AHf+MAABMWgAeAJAAAExrAB4BfgAATHgAHgKbAABMhQAeA7gAAEySAB4EegAATJ8AHgVWAABMsAAeCKIAAEy9AB4JSAAATMoAHguQAABM1wAeDGYAAEzoAB4N0AAATPUAHg7GAABNAgAeEBQAAE0TAB4QVQAATSAAHhalAABNLQAeFw8AAE0+AB4XUgAATU8AHheeAABNZQAeGCQAAE1wAB4aFgAATYEAHhsAAABNjAAeG98AAE2XAB4b5AAATaQAHh0DAABNvAAeHiEAAE3PAB4e+gAATeIAHiBrAABN9QAeKEQAAE4AAB4oeQAATgYAHiiLAABOEwAeLdEAAE4ZAB4wQgAATiYAHjI9AABOMwAeQI8AAE5AAB5ikQAATksAHmMOAABOWAAeY1MAAE5lAB5jmAAATnIAHmQqAABOfwAeZE4AAE6MAB5kxAAATpcAHmy4AABOpAAebWUAAE6sAB5uigAATrcAHnHHAABOwQAex+4AAE7MAB7IMQAATuQAHtwaAABO9QAe3E4AAE8KAB7grgAATx8AHuE+AABPMgAe4aIAAE9FAB7h/wAAT1gAHuJlAABPawAfBjsAAE9+AB81AgAAT4kAHzWmAABPnAAfNg8AAE+vAB9kwwAAT8IAH2UpAABPzwAfpowAAE/cAB/NJQAAT+kAH83qAABP9gAf03oAAFADAB/TtwAAUBAAH9V7AABQHQAf1d8AAFAqAB/WFwAAUDcAH9eMAABQRAAf4KcAAFBRAB/u1wAAUG0AIBO4AABQdgAgZDIAAFCBACBkcwAAUJIAIGVLAABQowAgZukAAFC0ACBnhQAAUMUAIGfGAABQ1gAgaH8AAFDnACBphAAAUPIAIH2YAABQ/QAgghUAAFEOACCChQAAUR8AIILQAABRKgAgg/EAAFE7ACCFOQAAUUwAIIVVAABRWQAghhQAAFFmACCGMQAAUXMAIIaKAABRgAAghucAAFGLACCHRAAAUZYAII/ZAABRoQAgobQAAFGsACCiMAAAUb0AIKhbAABRzgAg2VkAAFHWACDarwAAUecAINs6AABR9AAg30QAAFIFACDmkgAAUhIAIOcwAABSIwAg58wAAFI0ACDo1wAAUkUAIOlAAABSUgAg7okAAFJfACDuygAAUmoAIO7pAABSdwAg7w4AAFKEACDvnwAAUo8AIQBBAABSnAAhB6wAAFKrACEyMAAAUroAITS2AABSxAAhN4gAAFLRACGF6wAAUuQAIYYPAABS8QAhh+oAAFL+ACGJlgAAUwsAIYqnAABTFgAhiwUAAFMjACGMdwAAUzAAIY2yAABTPQAhjdgAAFNKACGPAAAAU1cAIZMrAABTZAAhlBIAAFNuACG3HgAAU3gAIbm1AABThQAhutkAAFOSACG9MwAAU58AIb1hAABTrAAhzm8AAFO5ACHO0gAAU8YAIdBUAABT0wAh0HwAAFPgACHR3QAAU+0AIdJbAABT+gAh2nQAAFQHACKH9QAAVBQAIohpAABUIQAiqLYAAFQuACL5bwAAVDsAIvsiAABUSAAi+2YAAFRVACL7igAAVGIAI1WAAABUbwAjVt4AAFSJACN6agAAVJYAI3qpAABUowAjeu8AAFSuACN7EwAAVLkAI3uXAABU2gAje8QAAFTlACN+1wAAVQYAI4L3AABVEwAjgxcAAFU0ACODNgAAVUoAI4PeAABVWQAjhOAAAFWcACOF0gAAVd8AI4gkAABWIgAjiLcAAFZCACOJVAAAVlUAI4myAABWYgAjitYAAFZvACOLdQAAVnwAI4vvAABWiQAjjFMAAFaWACOMpwAAVqMAI4z7AABWsAAjjU8AAFa9ACONowAAVsoAI433AABW1wAjjksAAFbkACOOiwAAVvEAI47qAABW/gAjj3QAAFcLACORHgAAVxgAI5PFAABXOQAjlesAAFdaACOWOAAAV2cAI5bJAABXdAAjl0sAAFeBACOYDQAAV44AI5ivAABXmwAjmLQAAFeoACOZYAAAV8IAI5llAABXzwAjmhEAAFfpACOaFgAAV/YAI5ruAABYEAAjmzEAAFgdACOchwAAWC4AI50TAABYSAAjnTEAAFhXACOdUwAAWGQAI53XAABYcQAjnzQAAFiCACOfowAAWKMAI6CNAABYsAAjoSMAAFi9ACOhlQAAWMoAI6H8AABY1wAjowUAAFjkACOs7wAAWPUAI64wAABY/QAjr3MAAFkDACOw/gAAWQkAI7KuAABZDwAjtKkAAFkaACO2SAAAWSUAI7trAABZMAAjvFEAAFk9ACO9NwAAWUoAI8H6AABZVwAjwhsAAFlkACPDyQAAWXEAI8P8AABZfgAjzzgAAFmLACPPOwAAWZgAI90aAABZsAAj3rMAAFm7ACPfZwAAWcYAI+A+AABZ0QAj4eYAAFniACPiDAAAWe0AI+KsAABaDgAj4uEAAFoZACPlDwAAWjoAI+tzAABaRwAj65sAAFpoACPrwgAAWn4AI+yOAABajQAj7dEAAFrQACPu9QAAWxMAI/DYAABbVgAj8Z0AAFt2ACPyagAAW4kAI/LdAABblgAj81oAAFujACP0ywAAW7AAI/T0AABbuwAj9y4AAFvGACP3uwAAW9EAI/hFAABb3AAj+IwAAFvpACP45gAAW/QAI/kjAABb/wAj+YcAAFwMACP56wAAXBkAI/pPAABcJgAj+rMAAFwzACP7FwAAXEAAI/t7AABcTQAj+8kAAFxaACP8RQAAXGcAI/zXAABcdAAj/WIAAFyBACP+dgAAXI4AI/9UAABcrwAkALoAAFzAACQBKQAAXOEAJAOEAABc7gAkBBAAAF0IACQEMAAAXRcAJARSAABdJAAkBkIAAF0xACQHNgAAXT4AJAekAABdSQAkCGQAAF1WACQJFAAAXWMAJAmIAABdcAAkCY0AAF19ACQKNwAAXZcAJAo8AABdpAAkCuYAAF2+ACQK6wAAXcsAJAu2AABd5QAkC/kAAF3yACQOPwAAXgMAJA9HAABeJAAkEAkAAF4xACQQuQAAXj4AJBNmAABeSwAkFPcAAF5sACQXvwAAXncAJBhbAABejQAkGaEAAF6YACQZwwAAXqMAJB5tAABergAkIMoAAF6/ACQqfQAAXswAJCqhAABe3gAkKsUAAF7wACQq6QAAXwIAJDBCAABfFAAkMZEAAF8hACQy4AAAXy4AJDQvAABfOwAkNlUAAF9IACQ8XAAAX1UAJDyKAABfYAAkPSUAAF9rACQ9UwAAX3YAJD55AABfgQAkPqcAAF+MACRAWAAAX5cAJECGAABfogAkbD4AAF+tACRveAAAX7YAJHKyAABfvwAkdewAAF/IACR49gAAX9EAJHwKAABf2gAkg5UAAF/jACSFnQAAX+wAJIu+AABf+QAkj4wAAGACACSXjQAAYBUAJJ4MAABgHgAkpM8AAGAvACSvZwAAYDgAJLP+AABgQQAkuCwAAGBKACS+6AAAYFMAJMLoAABgXAAkxtYAAGBlACTMfwAAYG4AJOvUAABgdwAk86gAAGCAACT9FgAAYIkAJQP2AABgkgAlDV8AAGCbACURkAAAYKQAJRnsAABgrQAlIVwAAGC2ACUo7gAAYL8AJTWsAABgyAAlO+UAAGDRACVKjQAAYNoAJU76AABg4AAlUcYAAGDmACVSIQAAYOwAJVTjAABg8gAlVj4AAGD4ACVYHwAAYP4AJV46AABhBAAlXn4AAGEKACVjCwAAYRAAJWN6AABhFgAlZD0AAGEcACVkrAAAYSIAJWVvAABhKAAlZd4AAGEuACVmoQAAYTQAJWcPAABhOgAlaDAAAGFAACVugwAAYUYAJW7NAABhYAAlcCoAAGFtACVwZgAAYYcAJXHHAABhlAAlcgMAAGGuACVy2gAAYbsAJXQBAABhywAldL4AAGHYACV1kAAAYfIAJXZNAABh/wAlfKwAAGIZACWF0AAAYiwAJYYzAABiPQAlhlAAAGJIACWGfQAAYlMAJYbkAABiXgAlh+UAAGJmACWIBAAAYnEAJYhHAABifAAliMsAAGKOACWOQQAAYpYAJZckAABipwAlngwAAGK0ACWjewAAYsUAJaSJAABi0gAlpg8AAGLfACWmnAAAYuwAJadDAABi+QAlrMkAAGMGACW5+wAAYxMAJdm2AABjHgAl2jMAAGMrACXlJAAAYzgAJfRSAABjRQAl9VIAAGNSACX1jAAAY18AJftpAABjbAAl+/EAAGN5ACX9VQAAY4YAJgm4AABjkwAmDAQAAGOiACYMUQAAY60AJgzFAABjuAAmEIYAAGPHACYS3AAAY9oAJhVQAABj5wAmGKgAAGP0ACYacAAAZAEAJhqeAABkFQAmG6IAAGQpACYb1AAAZD0AJhwIAABkUQAmHJwAAGRlACYfdwAAZHkAJh+3AABkjQAmH9oAAGShACYgQgAAZLUAJiLCAABkyQAmI7EAAGTWACYkQwAAZOMAJiVrAABk8AAmJigAAGT9ACYpgQAAZQoAJitHAABlGwAmL4oAAGUmACYwowAAZTMAJjE0AABlQAAmMtMAAGVNACYz5AAAZVoAJje0AABlZwAmP4QAAGV0ACZAmAAAZYEAJkE1AABljgAmTNkAAGWbACZgdgAAZaEAJmCwAABlrAAmYNUAAGW3ACZinwAAZcIAJmLaAABlyAAmY2kAAGXTACZj4QAAZd4AJmTmAABl6QAmZSMAAGX0ACZncgAAZf8AJmkAAABmCgAmaZEAAGYQACZtAQAAZhsAJoW7AABmJgAmkQIAAGY4ACaj6gAAZkUAJqQcAABmUAAmp3sAAGZbACazqgAAZmgAJrsvAABmcwAmu5cAAGZ5ACa/bgAAZn8AJsFVAABmjAAm4soAAGaSACbjqAAAZp0AJuWYAABmqAAm6JIAAGa1ACbskwAAZsIAJu1xAABmzQAm8jUAAGbYACb08gAAZuUAJvYnAABm8gAnCEQAAGb/ACcPKAAAZw8AJxAVAABnGgAnIIwAAGclACcl2QAAZzAAJyhrAABnOwAnKwMAAGdGACcs/gAAZ1EAJy0+AABnXAAnLsAAAGdnACcx7gAAZ3IAJzSbAABnfQAnOaUAAGeIACc8NAAAZ5MAJz6QAABnngAnQIkAAGepACdAyQAAZ7QAJ0JZAABnvwAnR+YAAGfKACdJKwAAZ9UAJ0vkAABn4AAnS/YAAGfrACdMsQAAZ/0AJ00wAABoCAAnTXkAAGgaACdN1wAAaCUAJ03pAABoMAAnTnYAAGhCACdO/wAAaFQAJ08+AABoZgAnT2MAAGh4ACdQdAAAaIMAJ1DPAABojgAnUOEAAGiZACdSTQAAaKsAJ1UmAABotgAnVTgAAGjBACdV8QAAaNMAJ1ZsAABo3gAnVrMAAGjwACdXDQAAaPsAJ1cfAABpBgAnV6wAAGkYACdYNQAAaSoAJ1h0AABpPAAnWJkAAGlOACdZnAAAaVkAJ1n1AABpZAAnWgcAAGlvACdhrgAAaYEAJ75EAABpjAAnyDQAAGmXACffQQAAaaQAKAmkAABpsQAoCmkAAGm8ACgK6QAAaccAKAuvAABp0gAoDC4AAGndACgMjwAAaegAKBusAABp8wAoHHsAAGoGACgdqAAAahMAKB4ZAABqIAAoNsYAAGotACg4OgAAajoAKDjvAABqRwAoPb0AAGpUAChWogAAamcAKFyEAABqcgAoXtYAAGqFACiLSQAAapIAKIyKAABqnQAokDoAAGqoACiigAAAarMAKKK6AABqvgAoot8AAGrJACikqQAAatQAKKTkAABq2gAopXMAAGrlACil6wAAavAAKKbwAABq+wAopy0AAGsGACipfAAAaxEAKKsKAABrHAAoq5sAAGsiACivCwAAay0AKLpNAABrOAAoupEAAGtDACi89wAAa04AKN+cAABrXQAo8REAAGtwACjxegAAa3sAKPNPAABrhgAo+fcAAGuRACj6cAAAa6QAKPunAABrtwAo/HIAAGvKACkIKgAAa9cAKQn8AABr6gApC7EAAGv1ACkZnQAAbAcAKRoPAABsEgApGjkAAGwdACkcNgAAbCgAKR5yAABsMwApIPYAAGw+ACkhjwAAbEIAKSJwAABsTQApJCkAAGxYACklvwAAbFwAKSbKAABsZwApKQgAAGxyACkqDwAAbH0AKS6jAABsiAApMJ8AAGyTACk0RwAAbKIAKTvNAABsrQApQCcAAGy4AClCDwAAbMMAKUZ6AABszgApR5oAAGzZAClLAgAAbN8AKW5MAABs6gApdUwAAGz5ACl2WwAAbQgAKYxqAABtGQApjNQAAG0sACmN+wAAbT8AKY6XAABtUgApjxEAAG1lACmSTwAAbXgAKZP1AABthQApmo4AAG2YACmbqwAAbaMAKZw8AABtrgApndgAAG25ACnHngAAbcQAKciVAABt1wApyZoAAG3qACnPigAAbf0AKdEFAABuCAAp0SkAAG4TACnSgAAAbh4AKdRKAABuKQAp1UIAAG44ACnVtAAAbkMAKdYFAABuTgAp8mkAAG5ZACn11gAAbmoAKfgkAABudQAp+H8AAG6AACn5ugAAbosAKfvGAABulgAp/CMAAG6hACn9aQAAbqwAKgf/AAButwAqCS0AAG7GACoLKgAAbtEAKhLvAABu3AAqE4EAAG7nACoUWwAAbvIAKhfGAABu/QAqGPMAAG8KACoZngAAbxcAKiKiAABvJAAqJbkAAG8xACol/QAAb0QAKmAiAABvVwAqYc4AAG9kACpiRwAAb3EAKmblAABvfgAqZzkAAG+RACps2QAAb6QAKm0jAABvrwAqbhYAAG+6ACpuPQAAb8UAKnMZAABv0AAqdNgAAG/fACp1QQAAb+oAKncWAABv9QAqjdgAAHAAAC1mFwAAcAsALWcVAABwGgAtaLQAAHApAC1pUAAAcD4ALWmCAABwUwAtam4AAHBoAC2FSAAAcHcALYaPAABwhAAtiL4AAHCRAC2JJwAAcJ4ALYmZAABwqwAtioEAAHC4AC2LPAAAcMUALZQ2AABw0gAtlkgAAHDjAC2WwQAAcPAALaaQAABw/QAtptkAAHEIAC2nGwAAcRcALbUZAABxJgAtukkAAHEzAC3FhAAAcUAALcgwAABxTwAtyKYAAHGJAC3I0gAAcZgALdMCAABxtAAt03oAAHHDAC3TtwAAcdIALdRhAABx2QAt12UAAHHoAC3ZbgAAcfcALdnnAAByBgAt3pYAAHIVAC3lAQAAciAALeWLAAByKwAt5hMAAHI2AC3m5wAAckEALep3AAByTAAt6zoAAHJXAC3rmwAAcmIALevxAABybQAt7R4AAHJ4AC3tugAAcoMALe9WAAByjgAt8FoAAHKZAC3xlwAAcqQALfIMAAByrwAt8oIAAHK6AC318AAAcsUALfb1AABy0AAt938AAHLbAC37BgAAcuYALf76AABy8QAuCEAAAHL8AC4N7wAAcwQALg4AAABzCwAuGH8AAHMaAC4dTgAAcyIALiBFAABzLQAuIPEAAHM6AC4i0wAAc0cALiMrAABzUgAuI88AAHNdAC4j7AAAc2UALiTQAABzbQAuJooAAHN4AC4t4QAAc4AALi7WAABzjwAuLvQAAHOcAC4wHAAAc6kALjF4AABzrQAuM4IAAHOxAC41hgAAc74ALj8WAABzxAAuRVMAAHPKAC5FsQAAc9cALk9iAABz5AAuT9sAAHP1AC5P8QAAc/4ALlAjAAB0AwAuURkAAHQMAC5RawAAdCQALlGoAAB0NAAuUkMAAHQ8AC5S1gAAdFQALlMTAAB0ZAAuVPQAAHRsAC5VVgAAdIQALlVbAAB0jAAuViAAAHScAC5WJQAAdKUALlc8AAB0tgAuWW8AAHTEAC5gNwAAdMgALmCrAAB01gAuZAUAAHTkAC5tTAAAdO4ALm1zAAB0/AAubagAAHUKAC5yhAAAdRgALnT4AAB1PgAudRgAAHVLAC51HQAAdVYALneHAAB1bAAueYMAAHVyAC574QAAdYEALnx6AAB1mwAug5sAAHWjAC6EUwAAdbIALoRkAAB1uQAuhe4AAHXIAC6H4wAAddcALoklAAB15gAuiaIAAHX1AC6LUwAAdgQALov3AAB2DAAujDkAAHYUAC6S3wAAdhwALpWhAAB2JwAuliAAAHY0AC6WRAAAdkEALpbFAAB2TAAul2EAAHZZAC6XogAAdmYALpfrAAB2cwAuoLIAAHaAAC6gygAAdogALqFyAAB2kwAuoxkAAHaeAC7w3QAAdqgALvFHAAB2uwAu8eIAAHbOAC7zuQAAdtsALvU9AAB23wAu9pAAAHbwAC72xwAAdwUALvb7AAB3DQAu+U8AAHcVAC77tgAAdxsALweBAAB3JgAvCTIAAHcuAC8Q/AAAdz8ALxGXAAB3SgAvGdIAAHdVAC8iSAAAd2IALyLKAAB3bwAvI9sAAHd8AC8zcgAAd4cALzWMAAB3jgAvNcoAAHejAC84uwAAd6sALzncAAB3uAAvPicAAHfDAC9AJwAAd9AAL0ZnAAB33QAvSNkAAHfoAC9MCgAAd/MAL1J5AAB4AAAvVFIAAHgNAC9ZDAAAeBoAL1qtAAB4JQAvWr4AAHgsAC9eKwAAeDsAL3VGAAB4SAAvfdUAAHhTAC+EkAAAeFkAL4UMAAB4ZgAvnGkAAHhsAC+d6AAAeHkAL6wAAAB4hgAvrxAAAHiRAC+zDwAAeJwAL7M/AAB4rQAvs1cAAHi1AC+1iAAAeMYAL7WzAAB40QAvtcQAAHjYAC+39AAAeOMAL7t2AAB49gAvvAEAAHkHAC++IwAAeRoAL8ArAAB5KwAvwK8AAHk8AC/E0QAAeU8AL8VVAAB5YAAvyncAAHlzAC/MFQAAeYQAL89FAAB5lQAv0IMAAHmcAC/QmQAAeacAL9K4AAB5rgAv1AEAAHm7AC/VRAAAecgAL9awAAB50wAv2B8AAHneAC/ZigAAeekAL9sdAAB59AAv2y4AAHn7AC/cvwAAegoAL9zQAAB6EQAv3mUAAHogAC/efQAAeisAL+ASAAB6OgAv4CMAAHpBAC/htgAAelAAL+HHAAB6VwAv4zYAAHpmAC/kyQAAenEAL+TaAAB6eAAv5kcAAHqHAC/n0wAAepIAL+fkAAB6mQAv66UAAHqqAC/tPAAAerUAL+1NAAB6vAAv738AAHrLAC/xBgAAetYAL/EXAAB63QAv8lMAAHrsAC/9bQAAevcAL/66AAB6/wAwAAsAAHsHADABWQAAexMAMAOBAAB7GwAwBMgAAHsjADAGDQAAeysAMAg4AAB7MwAwDWwAAHs7ADARZgAAe0MAMBPbAAB7SwAwFwIAAHtWADAXNwAAe2cAMCXCAAB7eAAwJfcAAHuJADAo1AAAe5oAMC5wAAB7pQAwLukAAHutADAvdgAAe7UAMC/2AAB7vQAwMHYAAHvFADAw9gAAe80AMEj2AAB71QAwa4sAAHvbADBwxwAAe+QAMHSfAAB77QAweE0AAHwAADCAHgAAfAkAMIM7AAB8EgAwi2sAAHwbADCQvwAAfCQAMJWvAAB8LQAwni4AAHw2ADCmywAAfD8AMKbwAAB8TAAwqPcAAHxZADCwnQAAfGIAMLUUAAB8awAwuXwAAHx0ADC8qgAAfH0AMMMBAAB8hgAwxE8AAHyPADDMYAAAfJUAMNH8AAB8ngAw1OwAAHynADDdIAAAfLAAMN0jAAB8vQAw57IAAHzXADDxygAAfOYAMPeXAAB89QAw+LMAAHz/ADD5gQAAfQwAMP3MAAB9GwAw/q4AAH0oADEBIAAAfTUAMQMhAAB9RAAxBc0AAH1TADEPLgAAfWIAMQ/fAAB9bwAxEEgAAH1+ADEV5wAAfY0AMRfqAAB9mgAxKyYAAH2pADE0KQAAfbgAMTSqAAB9xwAxNSsAAH3WADE1rAAAfeUAMTYtAAB99AAxNq4AAH4DADE3LwAAfhIAMT5TAAB+IQAxPzwAAH4sADFDpAAAfkEAMUgzAAB+TAAxSHYAAH5XADFIiwAAfmAAMUirAAB+aQAxSvcAAH5yADFMHwAAfn0AMUw4AAB+hgAxTM8AAH6PADFM6AAAfpgAMU4dAAB+oQAxTvcAAH6sADFPVgAAfrcAMVJRAAB+wgAxUnYAAH7NADFTKAAAftgAMVP/AAB+4wAxVIYAAH7uADFVDQAAfvkAMVWYAAB/BAAxWHMAAH8PADGK4QAAfxoAMYsTAAB/JwAxjT8AAH80ADGNzgAAf0cAMY5eAAB/WgAxls8AAH9tADGY0QAAf34AMZp8AAB/kQAxm5EAAH+kADGhrAAAf7UAMaHfAAB/wgAxohEAAH/PADGi3QAAf9wAMavNAAB/6QAxtHgAAH/6ADG1vgAAgA0AMbgPAACAIAAxuUMAAIAzADG8owAAgEQAMbz0AACAUQAxv50AAIBiADG/zQAAgHUAMcDzAACAiAAxwUAAAICRADHBcAAAgKQAMcLoAACAtwAxwyUAAIDKADHERgAAgN0AMcTpAACA5gAxxaYAAID3ADHG1QAAgQgAMcl/AACBGwAx1BAAAIEuADHkYAAAgT8AMfq8AACBUgAyEUMAAIFfADIqVQAAgXIAMi79AACBeAAyL48AAIF+ADIwPQAAgYQAMjETAACBigAyM10AAIGQADI0ggAAgZ0AMkfdAACBsAAySBUAAIG9ADJITQAAgcoAMkiFAACB1wAySPcAAIHkADJvfAAAgfEAMm/JAACB/gAydZEAAIILADJ2EwAAghwAMnkxAACCLQAyhkYAAII+ADKGeAAAgksAModsAACCWAAyiDUAAIJrADKJ9AAAgngAMo4pAACCfgAyjsoAAIKLADKfZgAAgpgAMqNtAACCpQAypAIAAIK4ADKqzgAAgssAMqw5AACC3AAyt98AAILnADK9twAAgu0AMr3/AACC8wAyvkcAAIL5ADLFEQAAgv8AMsxOAACDDAAy0IMAAIMSADLWEwAAgxgAMtusAACDHgAy4zQAAIMrADLpCgAAgzgAMunLAACDQAAy6g8AAINIADLqMwAAg1MAMus8AACDXgAy62UAAINmADLtmwAAg24AMu3AAACDewAy7mgAAIOIADLuhQAAg5QAMvS+AACDoAAy9SkAAIOkADL1cgAAg6gAMvXmAACDrQAy9igAAIPWADL2RwAAg94AMvaJAACD5gAy9qgAAIPuADL45QAAg/YAMvnKAACEAAAy+fUAAIQTADL6TgAAhB0AMvp6AACEJwAy+7wAAIQxADL8ZAAAhDsAMvynAACEZAAy/MwAAIRsADL9HAAAhHQAMv2ZAACEfAAy/dwAAISlADL+NwAAhK8AMv5/AACEtwAy/ssAAITgADL/cwAAhOgAMv/KAACFAAAzAB8AAIUYADMAmgAAhTAAMwDuAACFOgAzAS8AAIVEADMBcAAAhU4AMwGxAACFWAAzArYAAIViADMDqQAAhWwAMwSmAACFdgAzBYIAAIWAADMGfQAAhYoAMxE1AACFlAAzEeIAAIWzADMV0QAAhdIAMxZzAACF2gAzGtAAAIXiADMbXQAAheoAMxwcAACF8gAzHUwAAIX6ADMduAAAhgIAMyATAACGCgAzIKYAAIYSADMkwwAAhhoAM6kKAACGJwAzqXoAAIYyADPKTgAAhj0AM8rGAACGSgAz0hsAAIZQADPVvgAAhl8AM+ctAACGdAAz+3oAAIaJADQOQwAAhp4ANBmiAACGswA0GncAAIbCADQgvwAAhtEANCDnAACG3gA0IQwAAIbrADREvwAAhvgANEWEAACHCQA0RlgAAIcaADRGjAAAhysANEc2AACHNgA0S/oAAIdHADRMiQAAh1gANE1ZAACHaQA0TY4AAId6ADRN9QAAh4UANFtrAACHlgA0W/YAAIenADRcgQAAh7gANF0MAACHyQA0YjYAAIfaADRioAAAh+sANGPcAACH/AA0ZEYAAIgNADRkvAAAiB4ANHafAACILwA0il0AAIhAADSLkwAAiFEANIuWAACIXAA0jToAAIh0ADSOLAAAiIUANJH+AACIlgA0kz4AAIinADSWSwAAiLgANJZOAACIwwA0n3YAAIjbADShEQAAiOwANKGYAACI/wA0o2oAAIkSADSo8AAAiSMANKp6AACJLgA0qzQAAIk/ADS1IgAAiVAANMIVAACJXQA00CwAAIl1ADTQPQAAiX4ANR3vAACJhwA1Ho8AAImUADUfLwAAiaEANR/1AACJrgA1IJYAAIm7ADUhNgAAicgANSHWAACJ1QA1I4wAAIniADUkdwAAie8ANSUiAACKCQA1J2oAAIoWADUnsQAAiiQANSlWAACKMgA1LCQAAIo/ADUsZQAAikwANSymAACKWQA1LOoAAIpmADUvbAAAinMANS+wAACKgAA1ReAAAIqNADVMjwAAiqAANU1UAACKrQA1TpEAAIrAADVShgAAitYANVT0AACK6wA1Wc0AAIsAADVaMgAAixMANVp8AACLJgA1W0EAAIs5ADVc7wAAi0IANV6ZAACLSwA1X3IAAItUADVfugAAi10ANWCeAACLZgA1YtcAAItvADVlIQAAi3gANWYMAACLgQA1ZsgAAIuKADVm/wAAi5MANWxSAACLnAA1i9QAAIurADWNsQAAi8UANY38AACL0wA1p6sAAIvhADWoQwAAi/QANaoZAACMAQA1q0AAAIwMADWsNQAAjBcANaxkAACMKgA1rbsAAIw9ADW80AAAjFAANbzqAACMXQA1v8UAAIxuADXANAAAjHgANcCxAACMggA1wRYAAIyMADXB7wAAjJYANcJxAACMowA1w+oAAIy0ADXEEQAAjMEANcY1AACMzgA1xqAAAIzbADXHGwAAjOgANcgqAACM+QA1ymMAAI0GADXLiQAAjRUANc1FAACNIAA1zaEAAI0xADXP8gAAjT4ANdBhAACNRAA14aEAAI1KADXqgAAAjVcANe4dAACNZAA17kEAAI1xADXu/gAAjXkANe8oAACNhgA18AEAAI2OADXwKwAAjZsANfEEAACNowA18S4AAI2wADXyKgAAjbgANfJpAACNxQA18qgAAI3SADXy5wAAjd8ANfQLAACN7AA19EoAAI35ADX0iQAAjgYANfTIAACOEwA19e4AAI4gADX2LQAAji0ANfZsAACOOgA19qsAAI5HADX3zwAAjlQANfgOAACOYQA1+bcAAI5uADX7rgAAjoYANfv1AACOkwA1/X8AAI6gADX/owAAjq0ANgJjAACOugA2AxkAAI7HADYEOQAAjtQANgSpAACO4QA2BWYAAI7uADYGHAAAjvsANgcCAACPFQA2CbAAAI8iADYKNwAAjy0ANg8ZAACPOAA2D6kAAI9VADYQOQAAj3IANhDUAACPjwA2EOgAAI+fADYQ/AAAj68ANhEwAACPvwA2EVwAAI/PADYRmQAAj98ANhHFAACP7wA2EhoAAI//ADYSjwAAkA8ANhL1AACQHwA2EwkAAJAvADYWlgAAkD8ANhboAACQTAA2FzoAAJBZADYjMAAAkGYANiNCAACQcwA2I5AAAJCAADYkMgAAkI0ANiREAACQmgA2JJIAAJCnADYlQAAAkLQANiVSAACQwQA2JYUAAJDOADYllwAAkNsANiXlAACQ6AA2J3EAAJD1ADYnpAAAkQIANifXAACRDwA2KAoAAJEcADYoPwAAkSkANih0AACRNgA2KKkAAJFDADYvqQAAkVAANjBsAACRXQA2MVkAAJFqADYxawAAkXcANjG5AACRhAA2MqYAAJGRADYyuAAAkZ4ANjMGAACRqwA2M7QAAJG4ADYzxgAAkcUANjP5AACR0gA2NAsAAJHfADY0WQAAkewANjYyAACR+QA2NmsAAJIGADY2pAAAkhMANjbdAACSIAA2NxgAAJItADY3UwAAkjoANjeOAACSRwA2PlgAAJJUADY+bgAAkmEANj6aAACSbgA2PrAAAJJ7ADY/SwAAkogANj/SAACSlQA2QBEAAJKiADZBPgAAkq8ANkFUAACSvAA2QbMAAJLJADZCvwAAktYANkLtAACS4wA2RLYAAJLwADZE7wAAkv0ANkU+AACTCgA2RXkAAJMXADZFtAAAkyQANkrWAACTMQA2S4wAAJM+ADZMggAAk0sANmuQAACTWAA2cykAAJNlADZzgQAAk30ANnQGAACTigA2dF4AAJOkADZ14AAAk7EANnq+AACTvgA2fNYAAJPJADZ9LQAAk9QANn2JAACT3wA2fisAAJPqADZ+YgAAk/UANn6ZAACUAAA2ftAAAJQLADZ/PwAAlBYANn9yAACUIQA2hOsAAJQsADaFGQAAlDcANocLAACUQgA2hy0AAJRNADadcgAAlFgANqSAAACUZwA2p0sAAJR2ADas7QAAlIUANq51AACUlQA2sF0AAJTAADaw+gAAlM0ANrJVAACU+AA2tOIAAJUFADa2VwAAlRYANrccAACVIQA2uHUAAJUyADa5JgAAlT0ANrsXAACVTAA2u0YAAJVXADa87gAAlW4ANsbIAACVhQA2x/oAAJWQADbNYAAAlZsANs6YAACVqgA2z/AAAJW7ADbRewAAlcoANtWrAACV1QA217QAAJXkADbaEgAAlfMANt3MAACWAgA26t4AAJYRADcGNgAAliAANxUgAACWLwA3HI4AAJY6ADcoUgAAlkUANykAAACWWQA3LlsAAJZtADcvbQAAlngANy+gAACWlQA3L8kAAJayADcwbgAAlr8ANzDSAACWzgA3MZkAAJbdADc0vwAAlugANzXSAACW8wA3NjYAAJb+ADc3LgAAlwsANzeLAACX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vgA6WtgAAKLLADpb0AAAotgAOlwFAACi5QA6XB0AAKLyADpc5gAAov8AOl1PAACjDAA6XXMAAKMZADpeXQAAoyYAOl51AACjMwA6fMgAAKNAADqT9wAAo00AOrYwAACjWgA6yJcAAKNnADrIvgAAo3IAOsj4AACjfQA63wEAAKOIADrfOwAAo5MAOvxfAACjngA6/TsAAKOpADr9kgAAo7QAOw3PAACjxwA7F8AAAKPUADsYuwAAo9wAOxjhAACj5AA7GQcAAKPsADsZLQAAo/QAOxlTAACj/AA7GdAAAKQEADsZ9gAApAwAOxocAACkFAA7GkIAAKQcADsaaAAApCQAOxrlAACkLAA7GwsAAKQ0ADsbiAAApDwAOxwFAACkRAA7HIIAAKRMADscqAAApFQAOxzOAACkXAA7HPQAAKRkADsdGgAApGwAOx1AAACkdAA7HZMAAKR8ADsd5gAApIQAOx45AACkjAA7HowAAKSUADsjOAAApJwAOyWvAACkpwA7JzQAAKSyADssEAAApL0AOy1KAACkyAA7L2kAAKTTADs0nwAApN4AOzTiAACk6AA7NSUAAKTyADs1aAAApPwAOzWrAAClBgA7Ne4AAKUQADs2MQAApRoAOzZ0AAClJAA7NvkAAKUuADs3PAAApTgAOzd/AAClQgA7N8IAAKVMADs4BQAApVYAOzhIAAClYAA7OIsAAKVqADs4zgAApXQAOzkRAAClfgA7OVQAAKWIADs5lQAApZIAOznWAAClnAA7OhcAAKWmADs6WAAApbAAOzqbAAClugA7PpEAAKXEADs/MgAApc4AOz+gAACl2AA7QAkAAKXiADtAowAApewAO0HIAACl9gA7QkIAAKYAADtC2gAApgoAO0NcAACmFAA7Q58AAKYeADtD4gAApigAO0QlAACmMgA7RGgAAKY8ADtFzwAApkYAO0czAACmUAA7R5cAAKZaADtH2AAApmQAO0gbAACmbgA7SJIAAKZ4ADtI1AAApoIAO1UJAACmjAA7XxEAAKaXADtkqQAApq8AO2jHAACmxwA7acwAAKbfADtqWgAApuoAO2vTAACm9QA7cnQAAKcAADtyrgAApxgAO3MOAACnIwA7c3QAAKcuADt03wAApzkAO3UZAACnUQA7dTgAAKdcADt3ggAAp2cAO3nWAACndAA7essAAKeUADt7BgAAp6cAO30AAACnsgA7fTUAAKfFADuF6wAAp9AAO4jZAACn2wA7iU8AAKflADuJdQAAp+8AO4ryAACn+QA7ixMAAKgDADuMJAAAqA4AO4yxAACoGQA7j5wAAKgkADuSXQAAqC4AO5KCAACoOQA7k0wAAKhEADuVoAAAqE4AO5aTAACoWQA7lt8AAKhkADuYugAAqG8AO5ocAACoegA7mlYAAKiQADub6gAAqJsAO5wkAACosQA7nJUAAKi8ADutRgAAqMYAO82AAACo0wA7zaYAAKjgADvSZQAAqO0AO9VvAACo/gA71awAAKkPADvZzAAAqRoAO9piAACpJQA73aQAAKkyADvewwAAqT8AO99mAACpTAA74Y4AAKlZADvhtAAAqWYAO+PCAACpcwA75J4AAKmAADvmSAAAqY0AO+rAAACpmgA761gAAKmeADvxIgAAqakAO/IFAACpugA79CoAAKnLADv1vwAAqdYAO/eBAACp5wA7+pIAAKn4ADv7iQAAqgUAO/yhAACqEgA7/YsAAKodADv+hAAAqioAPASIAACqNwA8COAAAKpIADwUEAAAqlUAPBRuAACqYgA8FPwAAKpvADwVaAAAqnwAPBY1AACqiQA8FoQAAKqWADweywAAqqMAPCVIAACqtAA8JecAAKrBADwnuwAAqs4APChPAACq2wA8LNMAAKrjADww1wAAqvAAPDD6AACq+wA8MR4AAKsGADw/tgAAqxUAPEAYAACrIgA8SdQAAKsvADxMjwAAqz4APE16AACrTQA8UTsAAKtcADxtBAAAq2AAPG2XAACrbQA8fOIAAKt6ADx9CAAAq4cAPIqYAACrlAA8iwEAAKuhADyNEAAAq64APJB/AACrvwA8k7wAAKvQADyW6QAAq90APJ3aAACr6AA8oG0AAKvsADyh9QAAq/kAPKJoAACsEQA8opgAAKweADyi8gAArCsAPKOKAACsOAA8o8QAAKxAADykCwAArE0APKUpAACsWgA8pn4AAKxnADyndgAArHQAPKebAACsgQA8r3AAAKyOADywDQAArJsAPLCqAACsqAA8sUcAAKy1ADyx5AAArMIAPLLsAACszwA8tYoAAKzcADy3oAAArOkAPLm3AACs9gA8uj0AAK0DADy7GgAArRAAPLwpAACtHQA8vdsAAK0qADy/GQAArTcAPMFpAACtRAA8wlMAAK1RADzCnAAArV4APMOrAACtawA8xZAAAK14ADzGzgAArYUAPMphAACtkgA80GkAAK2fADzQywAArawAPNVMAACtuQA8188AAK3GADzYQQAArdMAPNq0AACt4AA83+YAAK3tADzktgAArfoAPOYzAACuBwA858oAAK4YADzpbAAAriUAPOnlAACuOAA87CIAAK5FADztKQAArlgAPO8VAACuZQA8820AAK5yADz0SAAArn8APPYGAACukgA89kEAAK6fADz3zwAArqwAPPx4AACuuQA8/lYAAK7GAD0EHAAArtMAPQROAACu2wA9BO8AAK7jAD0HagAAru4APQsxAACu+QA9DDEAAK8GAD0QtQAArxMAPRFSAACvIAA9FegAAK8tAD0c2QAArzoAPR3sAACvSwA9IFMAAK9cAD0hNwAAr2kAPSGyAACvfAA9I1kAAK+JAD0ohgAAr5YAPSi8AACvsAA9KWMAAK/KAD0p+QAAr9MAPSrQAACv7QA9K3IAAK/2AD0sSQAAsBAAPS0VAACwGQA9MIUAALAiAD0zpQAAsC8APTRIAACwPAA9NQQAALBJAD01vwAAsFYAPTe2AACwYwA9OP8AALBwAD06KwAAsH0APTrsAACwigA9PpAAALCXAD1BNgAAsKQAPUMiAACwsQA9Q9sAALC+AD1NHQAAsMsAPU50AACw2AA9TzIAALDlAD1RNQAAsPIAPVHAAACw/wA9UnUAALEMAD1TtQAAsRkAPVRjAACxJgA9VlgAALEzAD1X2gAAsUAAPVjBAACxTQA9XUwAALFaAD1k+AAAsWcAPWd2AACxegA9aVYAALGNAD1pfAAAsZoAPW9UAACxpwA9b7sAALG0AD1xUgAAsccAPXN+AACxzwA9dJwAALHcAD11TwAAseQAPXXqAACx7AA9ecUAALH0AD18tgAAsgEAPX8MAACyDgA9gDEAALIbAD2DXwAAsigAPYhUAACyNQA9jDcAALJCAD2MeAAAsk8APYyZAACyXAA9kI8AALJpAD2bxAAAsnYAPZ37AACygwA9noYAALKQAD2iUAAAsp0APaMWAACyqgA9uHUAALK3AD25AAAAssQAPbsGAACy0QA9xf0AALLeAD3HnAAAsu0APcfxAACy/AA9z80AALMLAD3P5AAAsxQAPc/9AACzHQA91BYAALMhAD3V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wAAAzfkAQrTPAADOBABCtRAAAM4RAEK2LAAAzh4AQrZPAADOKQBCtswAAM42AEK22wAAzkEAQrcPAADOTgBCt5gAAM5ZAEK4fAAAzmQAQrtBAADOdwBCvicAAM6QAELBFgAAzqkAQsQcAADOtgBCxC4AAM7DAELEUwAAztAAQsRlAADO3QBCxX8AAM7qAELF5AAAzvAAQsYQAADO/QBCxiIAAM8KAELG1QAAzxcAQsggAADPJABCyaAAAM8zAELM4AAAz0IAQs32AADPWwBCzt8AAM90AELP0AAAz40AQtCjAADPoABC0X0AAM+zAELSUAAAz8YAQtMTAADP2QBC1DUAAM/yAELVIQAA0AsAQtXyAADQJABC1ygAANA9AELXowAA0FYAQtjIAADQXgBC2aEAANB3AELaCwAA0JAAQttPAADQmABC27kAANCxAELb9wAA0L0AQt1FAADQ1gBC3iEAANDpAELgjQAA0PwAQuGCAADRFQBC4osAANEuAELjcgAA0UcAQuQeAADRWgBC5J0AANFzAELlfQAA0YYAQvWgAADRnwBC9icAANGsAEL2cgAA0bUAQvbMAADRwgBC9xUAANHRAEL3XgAA0eAAQvenAADR7wBC9/AAANH+AEL4OQAA0g0AQviCAADSHABC+MsAANIrAEL5FAAA0joAQvldAADSSQBC+aYAANJYAEL57wAA0mcAQvo4AADSdgBC+oEAANKFAEL6ygAA0pQAQvsTAADSowBDC2sAANKyAEMQRgAA0r8AQxP2AADS0ABDFTAAANLhAEMXKAAA0voAQxpOAADTCwBDG2cAANMaAEMckAAA0yUAQyDSAADTMABDKiYAANNBAEMrwwAA01IAQzFWAADTYwBDMloAANN2AEM0TgAA05QAQzVnAADTsgBDNrMAANPFAEM3PAAA09gAQzrRAADT8QBDO2sAANQAAEM8AQAA1A0AQz4dAADUHABDaJEAANQ1AENpiQAA1E4AQ2qBAADUZwBDa5cAANSAAENsiAAA1JMAQ3EsAADUrABDswwAANS/AEO/0AAA1MoAQ8CDAADU1QBEG7QAANTgAEQb5QAA1O8ARBw4AADU/gBEHGkAANUNAEQdbAAA1RwARIcQAADVKwBEh00AANU4AESJ9AAA1U0ARIohAADVVgBEi00AANVfAESLwgAA1WUARIxYAADVbgBEjR0AANV3AESOvQAA1X0ARI8CAADVgwBEj4wAANWJAESQrQAA1Y8ARJFaAADVlQBEkaEAANWbAESR8gAA1aEARL5ZAADVpwBEv1UAANWtAETAwAAA1bMARMIKAADVvgBEw2UAANXJAETJ1AAA1dQARMoCAADV4QBEyjAAANXuAETKXgAA1fsARMq2AADWCABEy40AANYVAETM8gAA1iIARM0dAADWLwBEzZMAANY8AETN1gAA1kkARM+9AADWVgBEz+gAANZjAETQFAAA1nAARNBdAADWfQBE1KcAANaKAETXrQAA1pcARNjFAADWpABE2PMAANaxAETZaQAA1soARN7tAADW1wBE8mAAANbdAET3MwAA1uoARPe5AADW9wBE9+0AANcEAET4RAAA1xEARPh2AADXHgBE+UUAANcrAEUCfAAA1zgARQWAAADXRQBFBpQAANdSAEURSgAA118ARRFmAADXaABFH/kAANduAEUgXQAA138ARSD2AADXjABFJ0sAANeVAEUnrAAA16YARSsGAADXswBFMIIAANe8AEUzWwAA18UARToxAADXzgBFO6sAANfXAEU73QAA1+IARTwTAADX6wBFPTEAANf0AEU9lwAA1/0ART43AADYBgBFQtQAANgPAEVWJwAA2BwARVZhAADYJwBFVoYAANgyAEVYUAAA2D0ARViLAADYQwBFWRoAANhOAEVZkgAA2FkARVqXAADYZABFWtQAANhvAEVdIwAA2HoARV6xAADYhQBFX0IAANiLAEVisgAA2JYARWvfAADYoQBFba0AANilAEVv7gAA2LIARXAYAADYtgBFcIIAANi6AEVwrAAA2L4ARXGWAADYwgBFc6EAANjPAEVzywAA2NMARXQ1AADY1wBFdF8AANjbAEV1SQAA2N8ARXdKAADY7ABFd3QAANjwAEV/7wAA2PQARYAUAADY/wBFjC8AANkOAEWMkwAA2RQARY0rAADZGgBFjXgAANkgAEWN4wAA2SYARY5nAADZLABFjrQAANkyAEWPHwAA2TgARY+GAADZPgBFj+oAANlEAEWQggAA2UoARZDPAADZUABFkToAANlWAEWRvgAA2VwARZILAADZYgBFknYAANloAEWS7gAA2W4ARZNSAADZdABFk+oAANl6AEWUNwAA2YAARZSiAADZhgBFlSYAANmMAEWVcwAA2ZIARZXeAADZmABFlnoAANmeAEWW3gAA2aQARZd2AADZqgBFl8MAANmwAEWYLgAA2bYARZiyAADZvABFmP8AANnCAEWZagAA2cgARZnRAADZzgBFmjUAANnUAEWazQAA2doARZsaAADZ4ABFm4UAANnmAEWcCQAA2ewARZxWAADZ8gBFnMEAANn4AEWdOQAA2f4ARZ2dAADaBABFnjUAANoKAEWeggAA2hAARZ7tAADaFgBFn3EAANocAEWfvgAA2iIARaApAADaKABFr7wAANouAEXPeQAA2jkARdHuAADaPwBF0wQAANpFAEdKYwAA2ksAR0qAAADaWABHS+MAANplAEdPKgAA2nIAR09qAADafQBHT+YAANqFAEdRMwAA2o0AR1JPAADalQBHVK8AANqvAEdWZgAA2sAAR1xdAADa0QBHX+sAANrcAEdhUgAA2ukAR2HFAADa9gBHZUEAANr8AEdlcQAA2wkAR2WyAADbFgBHZxkAANscAEdnSQAA2ykAR2eKAADbNgBHa2kAANs8AEdsHAAA20kAR2xdAADbVgBHbnUAANtcAEdupAAA22kAR3TrAADbdgBHdnoAANuDAEd3NAAA25AAR3jKAADbmABHeYcAANulAEd5sAAA26sAR3o6AADbuABHe1MAANvFAEeAMAAA29AAR4IBAADb3QBHgnIAANvjAEeDOgAA2/AAR4fRAADb/QBHiF8AANwOAEeJYAAA3BsAR5ZWAADcKABHlr8AANw1AEeekgAA3DsAR58mAADcSABHpG4AANxbAEeoSAAA3GgAR6jcAADcdQBHsbAAANyIAEe5DgAA3JsAR7mlAADcpgBHuiAAANyxAEe6RQAA3LwAR7riAADcxwBHuv4AANzSAEe9RgAA3N0AR71JAADc6gBHvrIAAN0CAEe/QQAA3Q0AR7+4AADdGABHv9AAAN0gAEfAXgAA3S8AR8EeAADdOgBHwWsAAN1FAEfBwAAA3VAAR8IeAADdWwBHwnwAAN1mAEfC2gAA3XEAR8M4AADdfABHw5YAAN2HAEfEegAA3ZIAR8TRAADdnQBHxNQAAN2oAEfFRAAA3b4AR8VHAADdyQBHxtcAAN3fAEfHQAAA3fUAR8fRAADeAABHyDoAAN4WAEfI9gAA3iEAR8phAADeLABHy9MAAN4yAEfL1gAA3j0AR8y7AADeUwBHzL4AAN5eAEfTpwAA3nQAR9RQAADepgBH1OsAAN68AEfVxQAA3tIAR9sVAADe6ABH27MAAN75AEfcKAAA3wQAR901AADfDwBH4hQAAN8tAEflcgAA3z4AR+xgAADfUQBH+AoAAN9XAEf4dAAA310AR/jYAADfYwBH+dsAAN9pAEgFawAA33YASAXwAADfhwBIB1gAAN+YAEgKgwAA36UASArDAADfwwBIDgQAAN/WAEgORAAA3/QASBMpAADgBwBIFCgAAOAeAEgUagAA4C8ASE6VAADgRgBITrIAAOBTAEhO1QAA4F0ASE+dAADgagBIUWQAAOB3AEhRswAA4IQASFHSAADgkQBIUfoAAOCeAEhTvwAA4KsASFPCAADguABIVLYAAODSAEhUuQAA4N8ASFb7AADg+QBIV2oAAOEDAEhY3AAA4Q0ASFk/AADhHABIWecAAOErAEhaGQAA4ToASFocAADhRwBIXb8AAOFhAEhg8AAA4W4ASGENAADhdABIZdsAAOGBAEhmcAAA4YwASGbtAADhlwBIZwUAAOGfAEhxXQAA4a4ASHNbAADhuQBIdi8AAOHBAEh2SwAA4cwASHf3AADh1wBIeF4AAOHiAEh60wAA4e0ASH/DAADh+QBIgCoAAOIEAEiAZwAA4g8ASIN+AADiGgBIr3wAAOIqAEiw9AAA4jcASLJZAADiSgBIsxEAAOJXAEi0CAAA4mQASLSvAADidwBItXEAAOKRAEi2XAAA4pcASLakAADipABItvUAAOKxAEi3QAAA4r4ASLizAADiywBIvcAAAOLYAEi/1AAA4uIASMAJAADi7ABIwbUAAOL2AEjEnQAA4wYASMV2AADjEwBIyMgAAOMkAEjJJQAA4zcASMulAADjRABIy+0AAONRAEjMNgAA414ASMyKAADjawBIzRcAAON4AEjNnAAA44UASM3GAADjkgBIzfcAAOOYAEjOfgAA46UASNIMAADjsgBI5IwAAOO4AEjsTAAA474ASOywAADjywBI7ggAAOPYAEjwoAAA494ASPD9AADj8QBI8UkAAOQEAEj2XwAA5BEASPa8AADkJABI+HgAAOQ3AEkExQAA5EQASQT1AADkVwBJG1oAAORkAEkdiwAA5HcASR3lAADkhABJIJcAAOSRAEkgzgAA5J4ASSGYAADkqwBJIc8AAOS4AEki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qABUC3AAAQ++AFQLngABD9QAVAvMAAEP6gBUC/oAARAAAFQMKAABEBYAVAxWAAEQLABUDIIAARBCAFQMsAABEFgAVAzgAAEQbgBUDQwAARCEAFQNPAABEJoAVA1sAAEQsABUDZwAARDGAFQNzAABENwAVA38AAEQ8gBUDiwAAREIAFQOXAABER4AVBJHAAERNABUE1EAARE6AFQTsgABEUAAVBUgAAERRgBUFmoAARFMAFQXtQABEVIAVBhGAAERWABUGIEAARFeAFQZigABEWQAVBrXAAERagBUG8sAARF3AFQcdAABEYQAVByeAAERkQBUHK4AARGeAFQc7AABEaQAVB0YAAERqgBUHUYAARGzAFQfuAABEcYAVCDWAAER2QBUIywAARHmAFQlQwABEewAVCWGAAER8gBUJ34AARH4AFQnywABEf4AVC4bAAESBABULikAARIRAFQuVAABEhcAVC7rAAESJABULvkAARIxAFQv6gABEjcAVC/4AAESRABUMHMAARJKAFQymQABElAAVDOuAAESVgBUN18AARJcAFQ5KAABEmcAVDm/AAESdQBUOg0AARKCAFQ/JAABEo8AVEB/AAESlQBUQNIAARKbAFRBJQABEqEAVEF9AAESpwBURYEAARK0AFRGAQABEsEAVEZoAAESzgBURrUAARLbAFRGxQABEugAVEb/AAES9QBURw8AARMCAFRHPAABEw8AVEd9AAETHABUR40AARMpAFRHxQABEzYAVEfVAAETQwBUSA8AARNQAFRIQwABE10AVEk2AAETagBUSZ4AARN3AFRJwwABE4QAVEn7AAETkQBUTY0AAROXAFRODgABE50AVFDEAAETowBUUR4AAROpAFRROgABE68AVFHCAAETtQBUUlUAARO7AFRSbAABE8YAVFKiAAETzABUUrkAARPXAFRTOwABE+AAVFNSAAET6wBUVUkAARP0AFRVdQABFAEAVFXjAAEUDgBUVlsAARQbAFRXZQABFCgAVFleAAEULgBUWZ4AARQ7AFRaOQABFEgAVFrkAAEUVQBUXpEAARRiAFRewAABFHEAVF7vAAEUgABUYWUAARSPAFRhjgABFKUAVGM5AAEUuwBUY3UAARTIAFRk3QABFNUAVGTrAAEU5ABUbZEAARTqAFRtvQABFPcAVG3PAAEVBABUbzIAARUKAFRv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iQABILIAVuH2AAEgvQBW43cAASDKAFbkcgABINcAVuVtAAEg5ABW5pYAASDxAFbnxQABIP4AVujtAAEhCwBW6jwAASEYAFbrGwABISUAVuv6AAEhMgBW7NkAASE/AFbtuAABIUwAVu69AAEhWQBW77YAASFmAFbwjwABIXEAVvFoAAEhfABW8kEAASGHAFbzGgABIZIAVvPzAAEhnQBXKFQAASGoAFfYtwABIbUAV9neAAEhxABX2kcAASHPAFgsDwABIdoAWC02AAEh6QBYLZ8AASH0AFgyIQABIf8AWDJgAAEiGQBYMqEAASImAFgyuQABIjAAWDPqAAEiPQBYNSIAASJKAFg2RgABIlcAWDdXAAEiZABYOGgAASJxAFhECAABIn4AWETvAAEiiwBYRW8AASKYAFhF7wABIqUAWEZvAAEisgBYSAUAASK/AFiCvgABIswAWJWVAAEi1wBYs3IAASLgAFi0WQABIukAWLSEAAEi9ABY0ygAASL/AFjTbwABIwUAWNPDAAEjCwBY1LYAASMRAFjU2gABIxcAWNUPAAEjHQBY1SsAASMjAFjgQAABIykAWOBxAAEjNgBY4u0AASNDAFjkaQABI1AAWOSEAAEjXQBY5eoAASNqAFjmXgABI3cAWOZsAAEjhABY5rAAASONAFjnPgABI5oAWOemAAEjpwBY57QAASO0AFjpPgABI70AWOl4AAEjygBY66QAASPXAFjwHgABI90AWPDEAAEj6gBY8P4AASP3AFjyXwABJAQAWPKrAAEkEQBY+E0AASQeAFj5ugABJCsAWQHFAAEkMQBZA+YAASQ3AFkFfwABJD0AWQhmAAEkQwBZCI8AASRWAFkObwABJGMAWRB8AAEkdgBZE+8AASSJAFkUeQABJJYAWRUTAAEkowBZGG8AASS2AFkZOQABJMMAWRrJAAEk0ABZGvAAASTeAFkcEAABJOwAWST+AAEk8gBZKGcAAST4AFkp9gABJP4AWSpNAAElBABZMRcAASUKAFkxZQABJRcAWTQ9AAElHQBZNMoAASUqAFk4iwABJTcAWTmRAAElPQBZPJsAASVDAFk+KQABJV0AWT/WAAElagBZQOkAASV3AFlBXAABJYQAWUF9AAElkQBZQgMAASWeAFlCUQABJasAWUOyAAEluABZRScAASXFAFlFzAABJc4AWUbBAAEl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AQBbgNAAATIMAFuBAAABMh0AW4HwAAEyKABbguEAATIzAFuDRwABMj4AW4OrAAEySQBbhBEAATJUAFuHdQABMl8AW4j1AAEycgBbifYAATKMAFuKYgABMp8AW479AAEyuQBbkXEAATLFAFuR8gABMt8AW5JhAAEy+QBbk/UAATMAAFuVAgABMxEAW5WIAAEzKwBblgAAATM2AFuWbgABMz0AW5bwAAEzVwBbmCEAATNmAFvM5QABM24AW81wAAEzeQBb04gAATOEAFvUZwABM48AW9iKAAEzmgBb2b4AATOlAFveSQABM7AAW98MAAEzwQBb4AgAATPSAFvkXQABM90AW+SiAAEz5QBb5UEAATPtAFvljAABM/UAW+j1AAEz/QBb6eIAATQQAFvqxAABNCMAW+r6AAE0LgBb7kwAATQ5AFvu+gABNEQAW/FbAAE0TwBb8ckAATRXAFvyUgABNGAAW/K+AAE0aABb824AATRwAFvzrwABNHgAW/QrAAE0gABb9HEAATSIAFv00gABNJEAW/UXAAE0mQBb9V4AATShAFv1jgABNKkAW/mhAAE0sQBb+34AATTAAFv+TgABNMsAW/5dAAE02gBb/nsAATTpAFv/wQABNPgAXAAmAAE1BwBcAFgAATUWAFwBhQABNSUAXAGUAAE1OwBcAdgAATVGAFwDDwABNVEAXANCAAE1XABcBKgAATVtAFwE2wABNXgAXAYRAAE1iQBcBzEAATWfAFwI6gABNaoAXAkPAAE1uwBcCVAAATXMAFwJbQABNdcAXAneAAE14gBcCfgAATXvAFwKgQABNgAAXAujAAE2EQBcC+EAATYcAFwMQwABNi4AXBBBAAE2OwBcEFcAATZGAFwQ6gABNlEAXBbYAAE2XABcF0QAATZnAFwXgwABNnIAXBfyAAE2fQBcGZ8AATaIAFwaaAABNpMAXBqNAAE2ngBcGyUAATapAFwcPgABNrQAXBz5AAE2vwBcHgUAATbKAFwfJQABNtUAXCJZAAE24ABcI5MAATbrAFwjzAABNvYAXCYEAAE3AQBcJjMAATcMAFwnXAABNxcAXCeXAAE3IgBcKJEAATctAFwowwABNzgAXCtPAAE3QwBcLOYAATdLAFwtzgABN1YAXDAvAAE3YQBcMTYAATduAFwydQABN3sAXDLnAAE3iABcM/QAATePAFw0ZgABN5wAXDWAAAE3owBcNjMAATewAFw5jgABN7cAXDrOAAE3xgBcPb8AATfVAFw+mgABN+AAXD78AAE36wBcQBAAATf2AFxCZwABOAEAXERlAAE4DABcRI8AATgZAFxFCAABOCQAXEijAAE4LwBcSM0AATg6AFxJ4wABOEUAXEoDAAE4UABcS8QAAThbAFxODQABOGYAXFB/AAE4cQBcUSMAATh8AFxStwABOIcAXFOxAAE4kgBcU9YAATidAFxV0QABOKgAXFhHAAE4tQBcWRwAATjCAFxZVgABOM0AXFmKAAE42ABcW44AATjjAFxbyAABOO4AXFxAAAE4+QBcXJoAATkEAFxgAAABOQ8AXGIbAAE5GgBcYqcAATklAFxi+QABOTAAXGQqAAE5OwBcZQ0AATlGAFxlyQABOVEAXGYiAAE5XABcZocAATlnAFxnugABOXIAXGhpAAE5fQBcaYkAATmIAFxrLAABOZMAXG2vAAE5ngBcbhoAATmpAFxuSgABObQAXHBWAAE5vwBccnkAATnKAFx0EAABOdUAXHRNAAE54ABcdNgAATnrAFx1zAABOfYAXHZdAAE6AQBcdpoAAToMAFx3/AABOhcAXHgcAAE6IgBceT8AATotAFyCxQABOjwAXIPfAAE6RwBchSkAATpSAFyGfgABOl0AXIc9AAE6aABcoGQAATp6AFyhXQABOoUAXKOvAAE6kABcpNgAATqbAFyl8gABOqYAXK0lAAE6sQBcrZMAATq8AFyt5wABOscAXK5DAAE60gBcr7QAATrdAFywNwABOugAXLETAAE68wBcsgAAATr+AFyycQABOwkAXLLtAAE7FABcs2cAATsfAFy2hQABOyoAXLgAAAE7NQBcuJcAATtAAFy8PQABO0sAXLyZAAE7VgBcwWsAATthAFzDwgABO2wAXMQeAAE7dwBcxHYAATuCAFzEzgABO40AXMnBAAE7mABcyikAATunAFzKkwABO7YAXM7iAAE7xQBc0TEAATvUAFzRpwABO+MAXNr2AAE78gBc4E0AATv9AFzmdAABPAwAXOaSAAE8GQBc6C8AATwhAFzpDQABPCwAXOnvAAE8NABc6vwAATxBAFzuagABPEwAXO6RAAE8VwBc7r0AATxiAFzwCgABPG8AXPA7AAE8egBc8FcAATyFAFzwZwABPJAAXPCMAAE8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iYiXiKeIroi1iLaIuojDiMaI04jdiOmI74j1iTKJTolbiWiJfom9idCJ24nmifmKBYoUiiCKJ4oxijKKRYpPilqKZIplio6KuorIitaK4osaiyaLNYtyi4GLkIugi6uLtou7i8KL54wMjB6MJ4wsjD6MSoxVjFaMV4xYjFmMbox2jH+Mm4yujL6Mzo0KjRaNLI1NjWWNbo1/jZKNlY2WjaWNtY3NjdqN3o32jgSOG443jkKOUY5hjnyOlo67jsuO4471jyWPMo8/j1WPZY96j4qPmI+7j8qP3I/zkAuQLpBIkE+QYJB0kJOQqZDbkQWRCpEnkTeRP5FPkWWRdJGQkamRuZHRkd+R/JIJkjGSSJJdkmiSiJKnkrqSzZLgkwGTFZMckx+TL5MxkzOTQJNdk3eTgZOUk6yTsJO0k7uT0pPXk96T75QElBGURpRQlFaUXpSGlLGUtpTrlQ6VM5U4lXCVp5XXldiV2pX2lfiWD5YVlhmWJpY0ljqWQ5ZSlliWYZZ0lnmWhpaLlpSWn5aolrKWw5bNltSW45b1lv+XCZcSlx2XIpcrly2XMJcxlzOXO5dQl3CXjZeTl6uXt5fHl9mX45ftmAqYFJgwmDSYOJg/mEeYSphPmF2YZJhpmGqYbZh6mIyYkpihmKiYsZi7mL+Y1JjdmOGY6ZkBmQmZDpkVmSOZKZk4mUOZSZlNmV6ZaJlwmXSZg5mMmZCZlpmcmaGZqJm0mcSZ0ZnjmfGaAJoPmh2aNJo9mkSaTppaml2aXppomnmagZqImpWaopqomqybnJuntVu1X7VqtXG1gLWvtbq1vrXCtcm11bXeteO1+bYAtjS2PrZHtlW2XrZktm22dLaAtoa2iraPtpO2mramtrG2v7bMttO24bbntvC2+bb7twG3GbcptzO3QbdRt2e3dreIt5C3prewt7u3wLfLt+O37bf2uAy4Jrg3uEu4X7hvuIu4mLiwuMC407jjuPe5FrkkuTa5Q7lauWm5a7ltuW+5cbl7uX65grmFuYq5jbmQuZO5l7mZuZu5nbmfuaG5o7mnubK5u7nIueW56rn8ugS6Crocuiu6PLpCukO6TLpWumO6aLpyun66hLqYup+6rbq2usC617sIuxO7Ibstuzq7SrtQu2i7bLt8u4i7ibuUu6i7rruyu8e7y7vTu9275bv5vAW8D7wYvCa8Nrw6vEC8RbxGvE+8XLxnvHG8fryPvKO8trzMvNy83rzkvO289b0AvQW9D70UvSS9Kb0vvTK9QL1QvVm9Xb1tvYC9hL2JvZq9or3CveC+BL4jvia+Lb45vlG+aL5tvoG+lr6lvri+z77svwm/Hb8zv0a/V79kv3q/lr+xv8W/37/ywABAD8AAQB/AAEA4wABAS8AAQFbAAEBjwABAhMAAQJDAAECiwABArcAAQMPAAEDJwABA5cAAQO3AAED5wABBBcAAQRjAAEEvwABBPMAAQUzAAEFRwABBWcAAQWjAAEGFwABBncAAQa/AAEG/wABBx8AAQdfAAEHfwABB6MAAQfPAAEH/wABCBsAAQhrAAEIkwABCNMAAQlbAAEJswABCgsAAQpfAAEKqwABCwsAAQs3AAELTwABC4sAAQvLAAEMBwABDCcAAQxPAAEMUwABDFcAAQyTAAEMvwABDOsAAQ03AAENewABDbsAAQ4TAAEOXwABDrcAAQ8DAAEPHwABD68AAQ/vAAEQJwABEHcAARDTAAERGwABEWsAARHbAAESKwABEm8AARKTAAESwwABEy8AARO3AAEUIwABFJsAARTfAAEVLwABFWsAARX3AAEWHwABFjMAARbPAAEXUwABF8MAARgzAAEYuwABGSsAARlnAAEZtwABGdcAARpnAAEbHwABG9MAARwHAAEcgwABHMcAARz7AAEdGwABHUsAAR1fAAEdiwABHa8AAR3TAAEd7wABHgsAAR5jAAEeiwABHo8AAR7nAAEfNwABH08AAR9/AAEflwABH9sAASAfAAEgRwABIKsAASC7AAEhDwABITcAASGDAAEhrwABIcsAASIbAAEiKwABIkMAASJ/AAEixwABIusAASL3AAEjMwABI3cAASO3AAEj4wABJAsAASQzAAEkZwABJHcAASSLAAEkvwABJRsAASUfAAElYwABJXsAASWzAAEluwABJdcAASXvAAEl9wABJjMAASY7AAEmewABJn8AASaXAAEmrwABJssAASbrAAEnEwABJx8AASdfAAEnZwABJ5cAASfHAAEn8wABKAMAASgPAAEoHwABKDcAAShjAAEogwABKLcAASj7AAEpCwABKRsAASmDAAEp7wABKg8AASo3AAEqVwABKn8AASqTAAEqpwABKsMAASrTAAErAwABKxcAASsvAAErYwABK4cAASufAAEr3wABLE8AASxjAAEsZwABLH8AASyTAAEsywABLM8AASzjAAEtKwABLUsAAS1PAAEtVwABLc8AAS4nAAEuSwABLp8AAS7bAAEvHwABL0MAAS9HAAEvXwABL48AAS/HAAEv+wABMGsAATCzAAEwxwABMOMAATFDAAExXwABMacAATG3AAEx4wABMgMAATIvAAEyWwABMosAATKXAAEyrwABMtcAATLzAAEzGwABM0sAATN7AAEz3wABNBcAATQbAAE0HwABNCMAATQnAAE0KwABNC8AATQzAAE0NwABNFsAATR7AAE0qwABNK8AATT7AAE1CwABNSMAATVLAAE1jwABNb8AATX/AAE2GwABNjsAATZ3AAE2lwABNp8AATajAAE2qwABNrsAATbHAAE27wABNwcAATcnAAE3UwABN2MAATdzAAE3gwABN5MAATejAAE3swABN9MAATfvAAE38wABOBMAAThTAAE4dwABOIsAATinAAE4swABOM8AATjfAAE44wABOOcAATj7AAE4/wABOSsAATlbAAE5hwABOccAATnPAAE5+wABOjcAATpfAAE6hwABOrMAATrPAAE60wABOtsAATr7AAE7FwABOyMAATs/AAE7VwABO2cAATt3AAE7jwABO98AATvvAAE8BwABPCcAATxnAAE8qwABPLMAATzzAAE8/wABPSMAAT0rAAE9RwABPUsAAT1XAAE9iwABPZsAAT2rAAE9wwABPcsAAT3/AAE+IwABPk8AAT5TAAE+VwABPrMAAT77AAE/AwABPwcAAT87AAE/cwABP5sAAT+jAAE/qwABP7MAAT+7AAE/wwABP/cAAUAzAAFARwABQFsAAUBvAAFAgwABQJcAAUDbAAFA+wABQSMAAUE/AAFBUwABQW8AAUGTAAFBuwABQecAAUIDAAFCHwABQjcAAUJXAAFCawABQncAAUKLAAFCpwABQscAAULrAAFDAwABQx8AAUODAAFDqwABQ98AAUQDAAFEHwABRDcAAUSTAAFEpwABROMAAUU7AAFFbwABRd8AAUYrAAFGgwABRpMAAUajAAFGuwABRucAAUcLAAFHUwABR2cAAUevAAFHywABSAsAAUhPAAFInwABSM8AAUj7AAFJKwABSVMAAUmHAAFJlwABSa8AAUnjAAFKAwABSjMAAUpTAAFKawABSpMAAUrXAAFLBwABSxsAAUtHAAFLcwABS4sAAUvTAAFL8wABTF8AAUyDAAFMpwABTNsAAU0HAAFNIwABTU8AAU17AAFNrwABTdMAAU4HAAFOSwABTm8AAU8/AAFPWwABUCMAAVBDAAFRDwABUSsAAVHzAAFSJwABUwcAAVMzAAFUCwABVC8AAVT/AAFVGwABVT8AAVWrAAFWFwABVmsAAVa/AAFW7wABVyMAAVc3AAFXbwABV7MAAVfHAAFX5wABWAMAAVgrAAFYUwABWGsAAVivAAFY1wABWScAAVl3AAFZvwABWlMAAVpXAAFagwABWp8AAVq3AAFa2wABWvsAAVsTAAFbQwABW2MAAVt3AAFbpwABW8sAAVvzAAFcEwABXGcAAVyzAAFcywABXRMAAV0zAAFdZwABXYMAAV2zAAFd9wABXlcAAV6DAAFeqwABXtsAAV8XAAFfTwABX2cAAV9/AAFfqwABX+sAAWAfAAFgPwABYF8AAWCHAAFgrwABYQcAAWEzAAFhTwABYY8AAWG3AAFhzwABYeMAAWHzAAFiAwABYisAAWJDAAFifwABYpsAAWLTAAFjQwABY5MAAWPPAAFj7wABZB8AAWRTAAFkewABZMsAAWUHAAFlVwABZZcAAWXTAAFl9wABZgcAAWYrAAFmPwABZk8AAWZjAAFmnwABZtMAAWbnAAFnCwABZzsAAWdbAAFnowABZ+8AAWg/AAFoYwABaI8AAWjPAAFo/wABaXcAAWmXAAFpuwABaecAAWonAAFqPwABaoMAAWrLAAFrHwABa0sAAWtvAAFrnwABa88AAWwbAAFsQwABbHMAAWyHAAFszwABbQMAAW1bAAFt0wABbesAAW4TAAFuTwABbpsAAW7nAAFvHwABb1sAAW93AAFvnwABb9cAAW/7AAFwEwABcEsAAXCvAAFwxwABcQcAAXE/AAFxYwABcYcAAXHHAAFyCwABcjMAAXJbAAFyowABcrcAAXLjAAFzBwABcysAAXNTAAFzpwABc/sAAXQvAAF0jwABdK8AAXT7AAF1PwABdYMAAXWbAAF18wABdhcAAXZ7AAF2owABdu8AAXcbAAF3SwABd3sAAXevAAF37wABeFMAAXjHAAF4+wABeTcAAXmPAAF5vwABekcAAXrzAAF7FwABe58AAXw3AAF8fwABfNcAAX1bAAF9vwABff8AAX5PAAF+swABfycAAX9HAAF/2wABgFcAAYCnAAGBAwABgSMAAYFzAAGBkwABgeMAAYILAAGCQwABgp8AAYLHAAGC9wABgysAAYN7AAGD0wABg+sAAYQDAAGEGwABhDsAAYRXAAGEgwABhMsAAYUnAAGFZwABhZ8AAYXzAAGGMwABhocAAYbfAAGHSwABh4sAAYffAAGIIwABiEcAAYifAAGIzwABiPsAAYk3AAGJSwABiXcAAYm3AAGJ3wABih8AAYpnAAGKwwABiusAAYr/AAGLHwABi2cAAYurAAGL1wABjCcAAYxrAAGMvwABjR8AAY0vAAGNTwABjWMAAY2HAAGNtwABjd8AAY4TAAGOJwABjosAAY6fAAGOvwABjucAAY8zAAGPVwABj6sAAY/HAAGP0wABkBcAAZBvAAGQmwABkMsAAZELAAGRNwABkXcAAZGjAAGRwwABkiMAAZJfAAGSjwABkscAAZLvAAGTCwABkzcAAZNXAAGTlwABk8MAAZQDAAGURwABlJ8AAZTjAAGVOwABlZMAAZX/AAGWdwABlusAAZcTAAGXUwABl4sAAZffAAGYHwABmHMAAZiXAAGYzwABmPMAAZkrAAGZTwABmWMAAZmHAAGZvwABmfsAAZpLAAGamwABmtsAAZr7AAGbTwABm6MAAZwLAAGcSwABnJ8AAZzzAAGdWwABnZcAAZ3LAAGeHwABnmcAAZ5zAAGejwABnq8AAZ7zAAGfAwABnyMAAZ83AAGfjwABn+MAAaAHAAGgKwABoFMAAaC7AAGhBwABoTMAAaFbAAGhuwABof8AAaIvAAGiQwABon8AAaLXAAGjFwABoycAAaNfAAGjswABo/MAAaQPAAGkMwABpEMAAaR7AAGkzwABpQ8AAaVHAAGlcwABpY8AAaXLAAGmHwABpj8AAaZrAAGmmwABpt8AAacPAAGnQwABp28AAaezAAGn4wABqBcAAahfAAGohwABqMMAAaj3AAGpHwABqWcAAamTAAGp0wABqf8AAao/AAGqcwABqpsAAarjAAGrDwABq08AAauHAAGr0wABq+8AAawfAAGsMwABrFsAAayHAAGsxwABrO8AAa0rAAGtUwABrY8AAa2vAAGt4wABrh8AAa5PAAGunwABrtMAAa8bAAGvdwABr78AAa/fAAGwOwABsG8AAbB7AAGwmwABsNcAAbEnAAGxUwABsXsAAbG7AAGyCwABsjMAAbKXAAGy4wABs0MAAbNXAAGzfwABs6cAAbPPAAGz/wABtCsAAbRrAAG0owABtO8AAbUrAAG1ewABtcMAAbYTAAG2UwABtqcAAbbfAAG3KwABt2MAAbevAAG32wABuBsAAbhLAAG4bwABuIsAAbjPAAG5BwABuS8AAblLAAG5lwABudMAAbnnAAG6NwABul8AAbqjAAG6xwABuvMAAbsvAAG7iwABu/sAAbwnAAG8ZwABvKMAAbzzAAG9EwABvS8AAb1jAAG9dwABvYsAAb2zAAG92wABvgMAAb4nAAG+YwABvpsAAb7PAAG+9wABvyMAAb9DAAG/jwABv9sAAcAbAAHAXwABwJsAAcDHAAHA9wABwSsAAcFLAAHBqwABwfcAAcJXAAHCZwABwosAAcK3AAHC2wABwv8AAcMvAAHDNwABw3cAAcOjAAHDzwABxB8AAcR7AAHExwABxQ8AAcUvAAHFWwABxXcAAcWPAAHFrwABxdsAAcX3AAHGIwABxk8AAcaPAAHHIwABx08AAcePAAHHrwABx+MAAcgLAAHIRwAByHsAAcifAAHI8wAByTsAAclrAAHJlwABybsAAcn7AAHKFwABylsAAcqfAAHKswAByscAAcrbAAHK4wAByxsAActDAAHLbwABy5sAAcvbAAHMLwABzFMAAcynAAHM3wABzSMAAc1vAAHNowABzfsAAc4zAAHOawABzqsAAc7fAAHPCwABz1MAAc+/AAHP4wAB0B8AAdA/AAHQWwAB0IsAAdDPAAHQ/wAB0UMAAdGrAAHR2wAB0h8AAdKHAAHSswAB0vMAAdNXAAHTjwAB09sAAdRLAAHUXwAB1JcAAdTjAAHVUwAB1YsAAdXLAAHWFwAB1ocAAdaLAAHWtwAB1vMAAdczAAHXlwAB158AAdffAAHYDwAB2FMAAdi7AAHY5wAB2ScAAdmLAAHZywAB2h8AAdqXAAHanwAB2qMAAdsTAAHbTwAB29MAAdx7AAHcgwAB3L8AAdzbAAHdFwAB3V8AAd2vAAHeIwAB3m8AAd7PAAHfUwAB358AAd//AAHggwAB4JMAAeC3AAHg4wAB4QMAAeE7AAHhWwAB4Y8AAeG3AAHiMwAB4m8AAeK/AAHi4wAB4xsAAeNHAAHjmwAB48MAAePjAAHj+wAB5EMAAeR3AAHkrwAB5NcAAeUTAAHlNwAB5UcAAeVvAAHlmwAB5ccAAeX7AAHmkwAB5uMAAecHAAHnOwAB518AAeeHAAHnswAB5+cAAegPAAHoPwAB6HMAAeiTAAHotwAB6NcAAej/AAHpLwAB6ZcAAenjAAHqAwAB6jMAAepzAAHqqwAB6ucAAer/AAHrJwAB608AAet7AAHrkwAB68sAAevvAAHsJwAB7DMAAexXAAHsewAB7KMAAezTAAHs5wAB7OsAAe07AAHtYwAB7X8AAe2XAAHtywAB7esAAe4DAAHuGwAB7lMAAe5nAAHugwAB7p8AAe7bAAHu6wAB7xcAAe8vAAHviwAB77cAAe/LAAHwFwAB8HMAAfCfAAHwxwAB8NsAAfD/AAHxGwAB8U8AAfGTAAHxuwAB8hMAAfJHAAHykwAB8tsAAfMfAAHzfwAB89cAAfQzAAH0lwAB9McAAfTzAAH1OwAB9YsAAfWzAAH11wAB9gMAAfZnAAH2wwAB9zMAAfdXAAH3bwAB9/8AAfhTAAH4iwAB+LcAAfkDAAH5SwAB+U8AAfl3AAH5swAB+fsAAfpDAAH6SwAB+osAAfrPAAH7DwAB+08AAfuLAAH72wAB/EsAAfyjAAH8+wAB/UMAAf2zAAH99wAB/msAAf8XAAH/OwAB/4MAAf+bAAIAOwACAF8AAgCnAAIBKwACAYcAAgGXAAIBpwACAisAAgJLAAICawACAqMAAgLTAAIDQwACA7MAAgP/AAIEUwACBG8AAgTfAAIE/wACBRsAAgVXAAIFewACBa8AAgXXAAIGHwACBjsAAgabAAIHDwACB2sAAgfbAAIINwACCJ8AAgjfAAIJLwACCVcAAglnAAIJkwACCa8AAgnTAAIKOwACCpsAAgrvAAILNwACC1MAAguLAAILswACC/cAAgwfAAIMYwACDJMAAgzHAAINLwACDVMAAg2DAAIN0wACDg8AAg5zAAIO3wACDv8AAg9XAAIPcwACD38AAg+nAAIP9wACEK8AAhD/AAIRXwACEbMAAhHfAAISPwACEscAAhMrAAITfwACE+8AAhP/AAIUYwACFKMAAhTXAAIVHwACFT8AAhWPAAIVxwACFhMAAhZbAAIWowACFvsAAhc7AAIXZwACF6sAAhfXAAIYJwACGIcAAhjLAAIY+wACGSsAAhlzAAIZowACGfcAAhonAAIaUwACGoMAAhrjAAIbCwACG3MAAhurAAIbzwACG+8AAhwnAAIcNwACHG8AAhzPAAIdHwACHT8AAh2vAAId6wACHgcAAh4rAAIeXwACHn8AAh63AAIe4wACHzsAAh+TAAIfrwACIEcAAiDfAAIhwwACIg8AAiKXAAIi5wACI0sAAiPTAAIkOwACJJcAAiUXAAIlfwACJacAAiW/AAIl8wACJm8AAibfAAIm7wACJxMAAidDAAInewACJ8sAAigvAAIoewACKJsAAijHAAIpBwACKW8AAimHAAIpswACKc8AAiofAAIqQwACKm8AAiq3AAIrAwACKzMAAitrAAIrgwACK6cAAivnAAIsJwACLF8AAix/AAIs2wACLVsAAi2vAAIt6wACLicAAi5zAAIuuwACLwMAAi8vAAIvywACL/sAAjCHAAIwuwACMSsAAjIbAAIy4wACM0MAAjOvAAIz8wACND8AAjSTAAI0ywACNP8AAjVLAAI1awACNdMAAjYbAAI2OwACNpsAAjbDAAI3YwACN7MAAjgXAAI4XwACOJ8AAjjLAAI43wACOVcAAjnHAAI6EwACOkMAAjpjAAI6qwACOwcAAjsfAAI7zwACPUcAAj1XAAI+XwACPrcAAj+nAAJAnwACQRsAAkIHAAJCgwACQrcAAkLXAAJDXwACRBsAAkQ/AAJEuwACRUcAAkVvAAJFkwACRbcAAkXbAAJF4wACRf8AAkZ3AAJG0wACRvcAAkcXAAJHOwACRz8AAkdPAAJHbwACR48AAkgzAAJIOwACSEcAAkh3AAJIowACSN8AAkkrAAJJYwACSYsAAkm/AAJJ5wACShcAAkpjAAJKlwACSssAAkrrAAJLVwACS8sAAkwPAAJMSwACTHcAAkybAAJMuwACTQMAAk03AAJNcwACTc8AAk4XAAJO3wACT5MAAk+7AAJP4wACUAMAAlArAAJQvwACUNsAAlD7AAJRiwACUbMAAlHbAAJR+wACUmMAAlKbAAJS7wACUwMAAlODAAJTtwACVAsAAlRTAAJUhwACVMMAAlTnAAJVEwACVVcAAlWTAAJVmwACVdcAAlXzAAJWPwACVqsAAlbPAAJXcwACV48AAlefAAJXzwACV/8AAlgjAAJYPwACWGcAAlhzAAJYqwACWNcAAlkvAAJZPwACWV8AAlmrAAJaOwACWlMAAlqbAAJazwACWwMAAltXAAJblwACXBMAAlzPAAJd1wACXksAAl5XAAJenwACXrcAAl7XAAJfBwACXx8AAl9HAAJffwACX9MAAmAbAAJgRwACYHMAAmCDAAJg6wACYScAAmFHAAJhewACYacAAmHHAAJiAwACYi8AAmJjAAJimwACYrsAAmLfAAJi/wACYxcAAmMzAAJjTwACY28AAmOXAAJjswACZB8AAmRfAAJknwACZScAAmYHAAJmfwACZucAAmdDAAJnnwACaHcAAmoLAAJqVwACar8AAmsLAAJr7wACbCsAAmyLAAJs4wACbZMAAm7TAAJvcwACcAMAAnCPAAJw2wACcTMAAnFvAAJxmwACcgcAAnLLAAJzJwACc3MAAnPDAAJ0XwACdR8AAnWrAAJ1+wACdqMAAndLAAJ4FwACeK8AAnljAAJ55wACexMAAnxDAAJ8twACfRsAAn2LAAJ9/wACfx8AAn+DAAJ/1wACgBsAAoBzAAKBEwACgVsAAoG/AAKCLwACgt8AAoM/AAKDuwAChA8AAoVPAAKFkwAChhMAAoZzAAKGwwACiBsAAonHAAKKBwACim8AAorLAAKLDwACi+8AAowjAAKMewACjMsAAo1TAAKOMwACjqsAAo8TAAKPrwACke8AApOzAAKUPwAClLsAApUTAAKVqwAClzMAApfnAAKYbwACmOcAApmjAAKa7wACm5sAApw3AAKcjwACnacAAp4rAAKecwACntcAAp9fAAKgGwACoJMAAqD7AAKhdwACol8AAqMnAAKjkwACo+8AAqRbAAKk8wACpX8AAqYHAAKmfwACpwcAAqerAAKobwACqQMAAqmzAAKp+wACqssAAqsDAAKrVwACq/8AAqzvAAKthwACrg8AAq6zAAKvXwACr/MAArCLAAKxOwACsZcAArHvAAKyOwACsm8AArLXAAKzTwACs7cAArRXAAK1cwACtgMAAravAAK3TwACuI8AArm7AAK6SwACuvcAAruDAAK8DwACvOMAAr5TAAK+wwACv4cAAsA7AALAlwACwSsAAsJXAALCxwACw0sAAsO/AALEOwACxPcAAsZLAALG9wACx5MAAsfTAALIAwACyEsAAsj7AALJxwACymcAAsr3AALLUwACy+8AAs3rAALPVwACz+MAAtBfAALQrwAC0SMAAtHDAALSJwAC0rsAAtM7AALTswAC1HcAAtVvAALV1wAC1lsAAtaXAALXuwAC2QcAAtkzAALZewAC2fMAAtpbAALa3wAC2x8AAtvbAALccwAC3KMAAtzvAALdPwAC3ecAAt6fAALe3wAC3zsAAt/PAALhHwAC4d8AAuJjAALi1wAC4zcAAuOnAALknwAC5SMAAuWDAALl0wAC5lMAAubfAALnTwAC568AAugXAALohwAC6QMAAuljAALpswAC6h8AAuqXAALq8wAC6z8AAuuTAALsGwAC7JMAAuz7AALtZwAC7d8AAu47AALuhwAC7w8AAu+HAALv7wAC8HMAAvEHAALxewAC8d8AAvJvAALy9wAC818AAvPXAAL0awAC9K8AAvWTAAL2XwAC9pMAAvbjAAL3GwAC97sAAvpPAAL6dwAC+rsAAvs/AAL8JwAC/JsAAv0zAAL9wwAC/lsAAv8TAAL/mwADAD8AAwDjAAMB1wADAmsAAwMbAAMDiwADBCMAAwTzAAMFUwADBb8AAwY7AAMGzwADB88AAwhTAAMI6wADCYsAAwnrAAMKgwADCtMAAws/AAMLjwADC88AAwwPAAMMawADDOsAAw7fAAMPTwADD68AAxBvAAMQ8wADEh8AAxKTAAMS9wADE2MAAxPXAAMU4wADFUcAAxWbAAMV9wADFpMAAxeTAAMYHwADGJsAAxk7AAMZqwADGgMAAxpjAAMazwADG0sAAxv3AAMcowADHT8AAx3LAAMeUwADIA8AAyCHAAMg7wADIZMAAyMjAAMjtwADJDsAAyTfAAMnBwADJ5sAAygfAAMovwADKe8AAyp/AAMq/wADK0cAAyvTAAMtDwADLYsAAy33AAMulwADL5cAAzAnAAMwpwADMUsAAzITAAM0pwADNV8AAzYHAAM2gwADNwsAAzk/AAM5twADOh8AAzqPAAM7xwADPCcAAzx3AAM9AwADPfMAAz5vAAM+2wADP5cAA0APAANBdwADQd8AA0I3AANCwwADQ8cAA0RDAANErwADRRcAA0WzAANG8wADR38AA0f7AANIfwADSQMAA0obAANKjwADSxMAA0ujAANMDwADTNcAA00zAANNlwADTg8AA05nAANO/wADT0cAA0+rAANQCwADUKcAA1D3AANRYwADUdMAA1MvAANTjwADU98AA1Q7AANUewADVYsAA1b7AANXKwADV3cAA1gLAANZMwADWocAA1sLAANbjwADXC8AA1y/AANdewADXnsAA177AANfawADX78AA2AXAANgxwADYdsAA2IjAANicwADYtcAA2MTAANkBwADZIsAA2S3AANk/wADZVMAA2X3AANnPwADZ4MAA2f7AANoWwADaMcAA2lPAANpqwADafcAA2pLAANqowADa48AA2vXAANsJwADbIsAA2z/AANtlwADbgsAA25vAANu7wADb28AA3CbAANxYwADcdMAA3J7AANzBwADc4sAA3QrAAN0nwADdRMAA3WjAAN2EwADdycAA3eHAAN35wADeGMAA3j/AAN5qwADejcAA3qzAAN7GwADe6cAA3v/AAN8OwADfK8AA30TAAN+NwADfscAA38bAAN/iwADgB8AA4DnAAOBawADgd8AA4JXAAODewADhM8AA4U3AAOFuwADhhsAA4a/AAOHDwADh08AA4enAAOInwADiX8AA4nHAAOKKwADincAA4t7AAOMDwADjEsAA4yjAAONEwADjdMAA48nAAOPhwADj9cAA5BrAAOQ2wADkV8AA5G/AAOSDwADkosAA5M7AAOTzwADlG8AA5T/AAOVZwADlbsAA5ZzAAOWtwADlusAA5dzAAOYKwADmRsAA5nDAAOaYwADmycAA5vzAAOcZwADnSMAA537AAOexwADoDcAA6CzAAOhbwADohsAA6LbAAOjNwADpGsAA6UzAAOlfwADpecAA6ZnAAOnqwADqBsAA6h7AAOo0wADqWcAA6m7AAOqPwADqrMAA6srAAOsowADrjcAA66fAAOu9wADr28AA6/XAAOxnwADsfcAA7I/AAOyxwADs2sAA7PjAAO0SwADtL8AA7V7AAO2PwADtqMAA7cjAAO3dwADuFsAA7kLAAO5TwADua8AA7pLAAO7OwADu+8AA7x7AAO89wADvUMAA74vAAO+rwADvusAA79DAAO/twADwF8AA8DDAAPBFwADwWcAA8HvAAPCbwADwucAA8NPAAPD+wADxPMAA8WPAAPGGwADxpsAA8d7AAPH6wADyEsAA8irAAPJbwADyb8AA8n/AAPKPwADyrcAA8sfAAPLdwADy9cAA8ybAAPM6wADzSsAA82jAAPOCwADzmMAA86jAAPPHwADz/sAA9BnAAPQwwAD0T8AA9HXAAPSTwAD0tcAA9NPAAPTywAD1KcAA9UTAAPVbwAD1esAA9aDAAPW+wAD14MAA9f7AAPYYwAD2RcAA9nnAAPaPwAD2ocAA9sXAAPcFwAD3JcAA90HAAPdewAD3h8AA95/AAPfEwAD35cAA+ATAAPgmwAD4QcAA+FjAAPhwwAD4j8AA+LHAAPjMwAD448AA+QfAAPklwAD5RcAA+WHAAPl8wAD5osAA+cvAAPniwAD59MAA+hLAAPowwAD6WcAA+obAAPqgwAD6wcAA+s3AAPrtwAD69cAA+wTAAPsrwAD7csAA+5XAAPu0wAD70MAA++jAAPwLwAD8H8AA/C7AAPxJwAD8WMAA/H/AAPykwAD8r8AA/MHAAPzWwAD88sAA/QPAAP0TwAD9K8AA/U7AAP2YwAD9tsAA/dXAAP37wAD+FsAA/jTAAP5LwAD+XsAA/mzAAP6FwAD+ncAA/rLAAP7OwAD+38AA/vDAAP7+wAD/C8AA/x/AAP82wAD/V8AA/2rAAP9/wAD/mcAA/6nAAP+1wAD/yMAA/97AAP/9wAEAD8ABAB3AAQA4wAEAY8ABAHrAAQCNwAEAosABAMLAAQDywAEBC8ABASfAAQE/wAEBWsABAYTAAQGbwAEBrsABAcHAAQHYwAEB8cABAgTAAQIewAECNsABAl7AAQKiwAECtsABAsbAAQLXwAEC88ABAx/AAQM3wAEDS8ABA1/AAQOJwAEDmcABA6rAAQPBwAED28ABBAXAAQQbwAEELcABBETAAQRnwAEEesABBInAAQSiwAEEusABBM/AAQTpwAEFBcABBR7AAQVSwAEFZ8ABBYPAAQWZwAEFpsABBbjAAQXRwAEF5sABBfvAAQYMwAEGJMABBjrAAQZfwAEGccABBn/AAQaWwAEGq8ABBsbAAQbXwAEG5MABBvjAAQcbwAEHK8ABBzfAAQdJwAEHWMABB2fAAQdywAEHhMABB6DAAQfVwAEILsABCEbAAQhawAEIbcABCJzAAQjYwAEI58ABCP3AAQkWwAEJUMABCWXAAQl2wAEJj8ABChfAAQoswAEKSMABCl3AAQqVwAEKpsABCrPAAQq/wAEK2sABCxXAAQsswAELP8ABC1fAAQtowAELk8ABC7fAAQvEwAEL2MABC/fAAQwfwAEMbMABDIfAAQypwAEM1cABDQXAAQ1NwAENdcABDaHAAQ3QwAEN4MABDgnAAQ4VwAEOKMABDkbAAQ5uwAEOk8ABDq3AAQ7OwAEO6cABDw7AAQ9XwAEPbsABD4zAAQ+dwAEPx8ABD9TAAQ/owAEQAsABEDHAARBHwAEQZMABEHfAARCjwAEQssABEMjAARDiwAERBcABERzAAREywAERRMABEVbAARGNwAERm8ABEavAARHAwAER3sABEhfAARI6wAESVMABEnXAARKVwAESssABEs7AARLmwAES+MABHajAAR22wAEdy8ABHd7AAR5xwAEegMABHpbAAR6xwAEe3sABHvXAAR8IwAEfMcABH2HAAR+GwAEfp8ABH8HAASBPwAEgZcABIHfAASCSwAEhCcABISDAASEzwAEhT8ABIdPAASHrwAEh/8ABIhPAASJ9wAEijcABIpnAASKxwAEi1sABIurAASL6wAEjEMABI13AASNvwAEjfcABI5TAASPrwAEj/sABJA3AASQjwAEkeMABJIrAASSYwAEkucABJOrAASUHwAElIMABJUnAASWAwAEl7MABJhHAASY9wAEmY8ABJp3AASaywAEm1MABJv3AAScSwAEnT8ABJ4bAASeXwAEnr8ABJ77AASf1wAEoFMABKB/AASgxwAEoUcABKHjAASi/wAEo28ABKPPAASkIwAEpNcABKXDAASnAwAEp6cABKg7AASoxwAEqVcABKoTAASqkwAEqwMABKu/AASs2wAErYcABK4jAASuowAEr3MABK/nAASwpwAEsVcABLH7AASzHwAEs7cABLRLAAS0zwAEtUcABLXDAAS2lwAEtwMABLeLAAS38wAEuN8ABLk3AAS5qwAEuisABLsrAAS7mwAEu/sABLxTAAS8ywAEvWsABL3zAAS+WwAEvsMABL9HAAS/twAEwG8ABMDPAATBRwAEwcMABMI3AATDpwAExFsABMS/AATFLwAExa8ABMYTAATGuwAExw8ABMdbAATHywAEyEMABMlHAATJrwAEykMABMrHAATLowAEzLcABM2LAATOVwAEzxMABM+zAATQbwAE0VcABNHvAATSmwAE02MABNO7AATUIwAE1GsABNSjAATU4wAE1TcABNXPAATWIwAE1mcABNa/AATXHwAE168ABNhvAATY7wAE2YsABNoXAATbOwAE27cABNxDAATc2wAE3XcABN5XAATe4wAE34sABN/zAAThEwAE4WsABOHPAATiQwAE4pMABOMfAATjXwAE448ABOPDAATkVwAE5TsABOW/AATmMwAE5psABOdDAAToDwAE6KcABOkvAATpnwAE6hsABOp7AATqywAE61MABOx7AATs8wAE7XsABO4PAATupwAE74MABPALAATwrwAE8RsABPH7AATy5wAE80MABPO7AAT0EwAE9N8ABPW3AAT1/wAE9mMABPbDAAT3lwAE+HcABPjHAAT5MwAE+YsABPpXAAT6nwAE+wMABPtrAAT7/wAE/JsABPzzAAT9OwAE/YcABP33AAT++wAE/4sABP/rAAUAOwAFAJMABQEPAAUCnwAFA48ABQP7AAUEVwAFBMMABQVTAAUGbwAFBu8ABQdfAAUHqwAFCGcABQlXAAUJkwAFCesABQpPAAULNwAFC4sABQvPAAUMdwAFDX8ABQ4XAAUOnwAFDv8ABQ9zAAURBwAFEgMABRJnAAUSuwAFEz8ABRPjAAUVwwAFFlcABRbbAAUXewAFGb8ABRpPAAUazwAFG48ABR33AAUfJwAFH9cABSB3AAUhCwAFIsMABSNHAAUjuwAFJFMABSYDAAUmiwAFJwMABSe7AAUpjwAFKjcABSrPAAUrUwAFLDcABSyrAAUtOwAFLaMABS5HAAUunwAFLucABS9XAAUwJwAFMIcABTEDAAUxfwAFMgcABTJ7AAUy8wAFM4cABTQPAAU0mwAFNRMABTWnAAU2TwAFPk8ABT7nAAU/bwAFQC8ABUPfAAVEjwAFRS8ABUXPAAVOawAFTvsABU97AAVQMwAFVH8ABVUnAAVVvwAFVj8ABVcnAAVYJwAFWJcABVkjAAVZpwAFWl8ABVrTAAVbNwAFW6cABVw7AAVdYwAFXecABV5bAAVe1wAFX28ABWD/AAViDwAFYpcABWMPAAVjgwAFZB8ABWTPAAVlWwAFZgMABWZXAAVmmwAFZyMABWgTAAVqEwAFaosABWrzAAVrYwAFa9cABWzLAAVtLwAFbYMABW4XAAVu9wAFb3sABXAbAAVwtwAFcV8ABXHrAAVykwAFczsABXPXAAV0bwAFdPcABXWPAAV2UwAFdtsABXdTAAV31wAFeKcABXkbAAV5fwAFejMABXq/AAV7YwAFfCMABXzvAAV91wAFfpMABX9rAAV/7wAFgJsABYEvAAWBywAFglcABYLTAAWDKwAFg5cABYPzAAWEdwAFhP8ABYVzAAWF1wAFhncABYbrAAWHewAFiCcABYjjAAWJhwAFijMABYrPAAWLpwAFjDcABYy/AAWNPwAFja8ABY57AAWPVwAFkBMABZC/AAWRQwAFkd8ABZJTAAWStwAFkzcABZOvAAWUHwAFlH8ABZUPAAWVZwAFlecABZZXAAWWzwAFlzcABZfTAAWYRwAFmNMABZlPAAWZ7wAFmsMABZtTAAWb0wAFnCsABZzLAAWdEwAFnZMABZ33AAWejwAFn6MABaCDAAWhCwAFoYMABaHnAAWjRwAFo5sABaPfAAWkJwAFpHMABaVvAAWmRwAFpoMABabbAAWnQwAFp58ABaf3AAWoPwAFqLsABanPAAWrBwAFq3MABavPAAWsNwAFrK8ABa2nAAWuwwAFrysABa+DAAWv5wAFsFsABbFPAAWyZwAFsssABbMfAAWzfwAFs/MABbTnAAW1/wAFtmMABba3AAW3FwAFt5cABbi7AAW5xwAFujcABbqXAAW66wAFu1MABbx7AAW9xwAFvh8ABb5nAAW+uwAFvzcABcBXAAXBWwAFwccABcIjAAXCbwAFwvsABcQvAAXEqwAFxRcABcV7AAXF2wAFxi8ABcaLAAXG+wAFx0sABchLAAXIiwAFyNMABckvAAXJowAFygsABcpvAAXKwwAFyxMABcxPAAXMjwAFzOsABc1DAAXNowAFzncABc7bAAXPTwAF0IsABdK7AAXTHwAF048ABdQPAAXUawAF1T8ABdWLAAXVxwAF1isABdbDAAXXFwAF11sABdfPAAXZvwAF2iMABdqjAAXa/wAF218ABdvnAAXcMwAF3I8ABdz3AAXdZwAF3+8ABeBPAAXgywAF4SsABeMPAAXjXwAF48sABeRHAAXkmwAF5NMABeU/AAXlvwAF5kcABeaDAAXnewAF6J8ABejLAAXpEwAF6XcABepXAAXqqwAF6u8ABetXAAXrqwAF7A8ABe03AAXtewAF7a8ABe5LAAXvYwAF7+8ABfCXAAXxGwAF8lsABfLPAAXzXwAF89cABfVrAAX10wAF9isABfabAAX3kwAF+IcABfjnAAX5YwAF+e8ABfqvAAX7KwAF+6sABfxDAAX8uwAF/3sABf//AAYAZwAGAL8ABgE7AAYBvwAGAisABgKnAAYDLwAGA7cABgSLAAYFAwAGBWsABgXzAAYGxwAGBz8ABgenAAYILwAGCPcABglvAAYJ6wAGCn8ABgrzAAYL7wAGDFMABgzTAAYNNwAGDf8ABg5TAAYOywAGDzsABg+TAAYP+wAGEEMABhB7AAYQuwAGERcABhHjAAYSLwAGEpcABhMLAAYT0wAGFCsABhSPAAYVDwAGFZcABhZHAAYWvwAGF1MABhfLAAYZHwAGGjMABhqbAAYbHwAGG68ABhxfAAYc3wAGHU8ABh2bAAYfSwAGIFsABiCXAAYgywAGISMABiGTAAYiFwAGI0cABiOnAAYkIwAGJJcABiWHAAYmZwAGJssABic3AAYntwAGKD8ABiifAAYpFwAGKX8ABiofAAYrawAGLjcABi7HAAYvRwAGL9MABjATAAYwTwAGMLsABjGjAAYyewAGMtcABjM7AAYzswAGNBsABjUfAAY1pwAGNf8ABjZzAAY2xwAGN9cABjgbAAY4TwAGOI8ABjkTAAY5qwAGOjMABjqnAAY7NwAGO6cABjxjAAY9DwAGPW8ABj3XAAY+UwAGPwcABkAbAAZAvwAGQVMABkH/AAZCkwAGRLcABkU7AAZFrwAGRk8ABka3AAZHtwAGSC8ABkiHAAZIzwAGSWMABko/AAZKwwAGS0MABkvjAAZMLwAGTRcABk5vAAZOqwAGTwMABk9bAAZQTwAGUVMABlGbAAZSBwAGUmsABlLfAAZTswAGVH8ABlTjAAZVYwAGVbcABlaLAAZXbwAGV7MABlgTAAZYUwAGWS8ABlobAAZaSwAGWpcABlsDAAZbowAGW/8ABlxjAAZc2wAGXV8ABl5bAAZezwAGXzMABl+7AAZgXwAGYfcABmJvAAZjAwAGY0cABmPrAAZlNwAGZWsABmWPAAZl/wAGZqMABmcDAAZnUwAGZ7cABmg3AAZoxwAGaTcABmnDAAZqKwAGa9cABm0jAAZtewAGbcMABm4rAAZvawAGb8MABnALAAZwZwAGcZsABnJnAAZyswAGcxsABnNnAAZ0iwAGdMcABnUfAAZ1lwAGdlcABna/AAZ3SwAGd88ABng/AAZ46wAGeUsABnnHAAZ6NwAGeyMABnyLAAZ86wAGfV8ABn3bAAZ+YwAGfy8ABn+nAAaADwAGgJMABoHHAAaCOwAGgp8ABoMHAAaDbwAGg8cABoQ7AAaEwwAGhicABoafAAaHBwAGhy8ABodvAAaHwwAGh/MABogTAAaIXwAGiKcABojjAAaJOwAGiXcABonLAAaJ9wAGij8ABoqjAAaLKwAGi38ABovDAAaMNwAGjMsABo0vAAaNgwAGjccABo5zAAaOpwAGjvcABo9HAAaP9wAGkDcABpCTAAaQ1wAGkWcABpGbAAaR6wAGkhcABpMvAAaUUwAGlG8ABpSnAAaVPwAGlgsABpiHAAaZDwAGmYcABpo7AAaawwAGm38ABpv3AAacXwAGnOcABp2zAAaeKwAGnpMABp8vAAaftwAGoIcABqD/AAahZwAGoeMABqKPAAai+wAGo4MABqP3AAaklwAGpPsABqVPAAal2wAGpzMABqevAAaoGwAGqHMABqkTAAaqfwAGqw8ABquPAAar+wAGrJMABq3/AAauhwAGrv8ABq+TAAaw8wAGsXcABrHrAAayTwAGsuMABrVHAAa2dwAGtvsABrdvAAa4BwAGuhsABrqbAAa7IwAGu5sABrwvAAa9gwAGvgcABr57AAa/FwAGv3MABsAzAAbAfwAGwLsABsETAAbBWwAGwZMABsKfAAbCxwAGwxsABsNfAAbDswAGxFMABsSXAAbE9wAGxS8ABsYXAAbHBwAGxy8ABsdzAAbH4wAGyF8ABsi/AAbJOwAGyZcABsqHAAbLjwAGy9sABswXAAbMawAGzO8ABs4fAAbOkwAGzvcABs9bAAbPkwAG0BcABtA/AAbQgwAG0L8ABtGTAAbSXwAG0osABtLTAAbTKwAG0+MABtUXAAbVXwAG1cMABtY3AAbWswAG1xcABteXAAbX+wAG2ScABtl7AAbZvwAG2g8ABts7AAbcRwAG3IcABty3AAbdEwAG3UsABt37AAbelwAG3r8ABt8DAAbfRwAG3+8ABuAjAAbgRwAG4H8ABuDPAAbhMwAG4XMABuHPAAbiWwAG45MABuQPAAbkpwAG5RcABuXHAAbmJwAG5qMABucLAAbnhwAG598ABuhTAAbowwAG6UcABumXAAbp9wAG6kcABuqXAAbrlwAG7FcABuyXAAbs8wAG7XMABu4LAAbuewAG7tcABu9jAAbv4wAG8KsABvIfAAbyjwAG8wsABvOXAAb0GwAG9TsABvWnAAb2GwAG9rsABvdLAAb3rwAG+McABvl7AAb5zwAG+j8ABvqjAAb7ZwAG+7sABvwjAAb8kwAG/RsABv3HAAb+1wAG/08ABv/jAAcAqwAHAU8ABwHrAAcCowAHA0sABwO3AAcEiwAHBY8ABwXrAAcGYwAHBucABwerAAcIHwAHCIMABwj/AAcJfwAHCksABwtLAAcLuwAHDC8ABwy7AAcNBwAHDbcABw3zAAcORwAHDp8ABw8HAAcPrwAHEAcABxBfAAcQ0wAHEVMABxIPAAcSfwAHEwsABxN3AAcUVwAHFLMABxUDAAcVewAHFccABxYDAAcWcwAHFtMABxcrAAcXcwAHF/sABxi/AAcZNwAHGcsABxpnAAcbnwAHHCsABxzTAAcdKwAHHZMABx3bAAceEwAHHlMABx6XAAcfVwAHH4sABx/zAAcgQwAHIMsAByGTAAciCwAHIp8AByMzAAcjlwAHJb8AByYTAAcmVwAHJscAByj3AAcpVwAHKacABynrAAcqKwAHKl8AByqvAAcrMwAHLIcAByz7AActXwAHLd8ABy4vAAcuWwAHLpsABy73AAcvpwAHMO8ABzGPAAcyHwAHMosABzNDAAc0mwAHNUMABzXbAAc2TwAHNtcABzgHAAc4fwAHOOcABzlPAAc6bwAHOscABzsPAAc7UwAHPC8ABzyTAAc8xwAHPRcABz2LAAc+XwAHPsMABz8/AAc/vwAHQEcAB0C3AAdBLwAHQcMAB0IXAAdCiwAHQxMAB0NXAAdDtwAHQ/8AB0RnAAdEnwAHRPMAB0VHAAdF0wAHRy8AB0dzAAdHvwAHSB8AB0hzAAdJBwAHSUsAB0mrAAdKFwAHSq8AB0sLAAdLawAHS+MAB0wrAAdNXwAHTcsAB04DAAdOVwAHTt8AB0+PAAdQBwAHUG8AB1D/AAdRrwAHUlMAB1ODAAdUFwAHVJsAB1UvAAdVowAHVj8AB1ajAAdW9wAHV08AB1fDAAdYXwAHWMMAB1kXAAdZbwAHWeMAB1p/AAda4wAHWzcAB1uPAAdcLwAHXUsAB13bAAdeWwAHXrcAB19TAAdfnwAHYAcAB2BvAAdhHwAHYXcAB2G/AAdiAwAHYn8AB2NTAAdjvwAHZBsAB2R/AAdlNwAHZYsAB2XvAAdmXwAHZvMAB2iDAAdpBwAHaXsAB2n7AAdqkwAHawsAB2uTAAdsNwAHbKsAB22nAAduiwAHbu8AB29vAAdv4wAHcJcAB3EvAAdxkwAHchMAB3JbAAdyuwAHcvMAB3NHAAdz1wAHdMMAB3VDA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AhRDwAIUcMACFIfAAhSywAIU08ACFN3AAhTqwAIVBsACFRTAAhU1wAIVV8ACFX3AAhV/wAIVpsACFcfAAhXowAIWBsACFiXAAhZHwAIWasACForAAharwAIWyMACFtrAAhb2wAIXEsACFy3AAhc/wAIXWcACF3PAAheVwAIXqMACF8PAAhfiwAIX7cACF/bAAhgMwAIYJ8ACGFnAAhh6wAIYr8ACGM/AAhjkwAIY8sACGRjAAhkuwAIZT8ACGWXAAhmUwAIZuMACGdjAAhnfwAIaYcACGoLAAhrtwAIbD8ACG4fAAhuhwAIcBsACHCTAAhwswAIcRMACHGDAAhxvwAIcqMACHMXAAhzLwAIc1cACHNrAAhzjwAIdD8ACHSvAAh0zwAIdXMACHXbAAh2dwAIducACHbzAAh3iwAId78ACHgTAAh43wAIeYMACHorAAh6ewAIe08ACHxTAAh9OwAIfZcACH5TAAh+lwAIf0MACH/bAAiAfwAIgXMACIH7AAiCcwAIguMACIMvAAiDlwAIg+cACISTAAiFNwAIhfcACIZ7AAiGrwAIhzcACIeXAAiIFwAIiJMACIjHAAiJFwAIiZ8ACIqLAAiLHwAIi5cACIybAAiNQwAIjeMACI4rAAiOpwAIjtMACI8rAAiP6wAIkGcACJC/AAiRSwAIkYcACJIHAAiSZwAIkyMACJN3AAiULwAIlEMACJRXAAiUpwAIlNcACJWvAAiWDwAIlrsACJdrAAiYOwAImLsACJlHAAiaBwAImssACJ8/AAih2wAIorMACKWDAAimOwAIpssACKcrAAirCwAIq9sACK4XAAiuswAIr1MACK//AAiwtwAIsRMACLHDAAiyHwAIsi8ACLMLAAizmwAIs+cACLRjAAi0uwAItVsACLWrAAi2LwAItrsACLeTAAi4UwAIuKsACLjDAAi5cwAIuhsACLq3AAi7PwAIu1cACLwbAAi8kwAIvScACL1jAAi9/wAIvtMACL9bAAjAAwAIwFsACME/AAjBywAIwesACMKHAAjCtwAIw08ACMN3AAjEHwAIxFcACMT3AAjFVwAIxgsACMYvAAjGbwAIxycACMffAAjIjwAIyOMACMj7AAjJdwAIyrcACMs3AAjLywAIzEMACMyrAAjNOwAIzZcACM4jAAjOewAIzwcACM9fAAjP9wAI0GsACNDnAAjRZwAI0d8ACNJzAAjS4wAI04cACNQLAAjUlwAI1QsACNU7AAjVwwAI1j8ACNaTAAjXDwAI19cACNhDAAjYiwAI2RsACNpzAAjbAwAI2zcACN2zAAjeUwAI3qcACN77AAjfmwAI3+8ACOBfAAjgqwAI4VMACOHDAAjh6wAI4osACOLTAAjjiwAI46MACOPnAAjkRwAI5QcACOVzAAjmRwAI5xMACOdnAAjn1wAI6IMACOlXAAjpgwAI6l8ACOrfAAjrYwAI6/8ACOzfAAjtOwAI7ZcACO33AAjuTwAI7tcACO9fAAjv3wAI8AMACPAXAAjwWwAI8L8ACPDLAAjxvwAI8j8ACPK3AAjzVwAI9AcACPSjAAj1UwAI9cMACPZjAAj27wAI938ACPfXAAj4EwAI+I8ACPj3AAj5gwAI+fsACPqrAAj60wAI+2MACPwDAAj8gwAI/SMACP2zAAj+UwAI/ucACP9zAAj/8wAI//8ACQCjAAkBlwAJAk8ACQNXAAkEBwAJBJcACQT3AAkFowAJBp8ACQdLAAkHhwAJB8sACQf7AAkIvwAJCTcACQmfAAkKTwAJCv8ACQt7AAkLkwAJDDsACQyzAAkNEwAJDb8ACQ4vAAkO3wAJD1MACQ/PAAkQTwAJEO8ACRFjAAkRmwAJEkMACRMLAAkTOwAJE9cACRPzAAkUKwAJFMMACRU/AAkVUwAJFWMACRXLAAkWJwAJFpMACRcbAAkXUwAJF3MACRhTAAkYmwAJGTcACRnjAAkaVwAJGs8ACRtnAAkcAwAJHIMACRzfAAkdTwAJHZsACR4XAAkeWwAJHqsACR7/AAkfhwAJH9MACSBvAAkhBwAJIY8ACSJXAAki9wAJI2sACSQ7AAkk4wAJJV8ACSX/AAkmQwAJJxsACSebAAkoYwAJKQMACSmXAAkqUwAJKpcACStvAAkr+wAJLHsACS0HAAkthwAJLhMACS6TAAkvSwAJL+sACTBTAAkw0wAJMUcACTHbAAkyJwAJMtMACTO3AAk0HwAJNMcACTWXAAk2WwAJNpMACTb3AAk3awAJN+MACTgPAAk4KwAJOKMACTkfAAk5VwAJOXMACTn7AAk6HwAJOl8ACTsDAAk7twAJPB8ACTxPAAk8rwAJPNsACT1nAAk+GwAJPpcACT8LAAk/OwAJP7cACUE3AAlBqwAJQwcACUN7AAlDqwAJRSsACUWfAAlF5wAJRlcACUaHAAlGtwAJR28ACUevAAlIEwAJSJcACUkHAAlJhwAJSdsACUoXAAlKkwAJSsMACUtfAAlLnwAJTGcACU0XAAlOgwAJT1sACU+TAAlP2wAJUBcACVBbAAlQdwAJUIsACVDbAAlQ9wAJUTcACVFTAAlRmwAJUdsACVHvAAlSLwAJUksACVJnAAlSmwAJUtsACVNXAAlTnwAJU8cACVP3AAlUPwAJVIcACVTDAAlU2wAJVTMACVWLAAlVuwAJVfMACVYvAAlWZwAJVm8ACVafAAlW0wAJVvsACVcrAAlXPwAJV18ACVd3AAlXswAJV8sACVf7AAlYLwAJWF8ACViXAAlY1wAJWQsACVlHAAlZowAJWe8ACVonAAlaawAJWrcACVsjAAlbVwAJW9MACVwrAAlcewAJXK8ACVzvAAldKwAJXXsACV27AAld/wAJXjsACV6vAAle0wAJXu8ACV8LAAlfIwAJXz8ACV9jAAlflwAJX68ACV/PAAlgAwAJYG8ACWB/AAlguwAJYRMACWGjAAlhvwAJYecACWJDAAlijwAJYqcACWMfAAljTwAJY38ACWPXAAlj9wAJZB8ACWRXAAlkjwAJZK8ACWTrAAllNwAJZWsACWWLAAll1wAJZfMACWY3AAlmUwAJZmsACWaLAAlm7wAJZz8ACWdfAAlnjwAJZ58ACWfPAAln7wAJaB8ACWhjAAlobwAJaLMACWkHAAlpUwAJaZMACWnfAAlqJwAJancACWqPAAlqvwAJazcACWs/AAlrXwAJbDsACWyHAAls3wAJbQMACW07AAltdwAJbasACW3XAAlt6wAJbgMACW5HAAludwAJbrcACW7LAAlu1wAJby8ACW8/AAlvnwAJb9cACXATAAlwQwAJcI8ACXDbAAlxIwAJcW8ACXGrAAlx5wAJcjcACXKfAAly4wAJcycACXNvAAlzswAJdA8ACXRLAAl0jwAJdNsACXUrAAl1bwAJddMACXYfAAl2RwAJdm8ACXaTAAl2uwAJdtMACXbrAAl3FwAJd1sACXd7AAl3mwAJd78ACXffAAl4FwAJeC8ACXhPAAl4dwAJeJcACXjXAAl4/wAJeQMACXkPAAl5TwAJecMACXovAAl6dwAJes8ACXsbAAl7dwAJe9cACXvnAAl79wAJfAMACXwXAAl8IwAJfDsACXxPAAl8bwAJfJcACXyjAAl8zwAJfP8ACX0TAAl9JwAJfT8ACX1XAAl9cwAJfYsACX2TAAl9mwAJfaMACX2rAAl9swAJfbsACX3DAAl9ywAJfeMACX4LAAl+FwAJfiMACX4vAAl+UwAJfl8ACX5nAAl+bwAJfncACX5/AAl+hwAJfo8ACX6XAAl+nwAJfqcACX6vAAl+twAJfr8ACX7HAAl+zwAJftcACX7fAAl+5wAJfu8ACX73AAl+/wAJfwcACX8PAAl/FwAJfx8ACX9vAAl/wwAJf9sACX//AAmABwAJgA8ACYAXAAmAHwAJgCcACYAvAAmANwAJgD8ACYBHAAmATwAJgFcACYBfAAmAZwAJgG8ACYB3AAmAfwAJgIcACYCPAAmAlwAJgJ8ACYCnAAmArwAJgPsACYELAAmBWwAJgXMACYGHAAmBxwAJggMACYJDAAmCXwAJgpMACYK7AAmC7wAJgw8ACYNfAAmDrwAJhAMACYQ/AAmEowAJhNMACYUbAAmFRwAJhWMACYWPAAmFtwAJhccACYXPAAmF8wAJhg8ACYZTAAmGYwAJhnMACYaLAAmGvwAJhvMACYcbAAmHRwAJh5sACYevAAmH3wAJh+8ACYgTAAmIOwAJiFMACYiDAAmIqwAJiMsACYjvAAmJBwAJiR8ACYlLAAmJbwAJiX8ACYmjAAmJxwAJid8ACYoTAAmKNwAJiq8ACYrfAAmLFwAJixsACYsvAAmLdwAJi7MACYu7AAmLwwAJi+sACYwzAAmMUwAJjKcACYy3AAmM2wAJjQcACY0rAAmNSwAJjVsACY1rAAmNfwAJjZ8ACY3LAAmN6wAJjg8ACY4nAAmOQwAJjpcACY7bAAmPMwAJj3cACY+HAAmPtwAJj8sACY/3AAmQIwAJkEMACZBzAAmQkwAJkM8ACZEPAAmRPwAJkVMACZGbAAmR0wAJkisACZI3AAmScwAJkpMACZKfAAmS5wAJkycACZNHAAmTfwAJk5sACZPPAAmUDwAJlC8ACZRnAAmUhwAJlKMACZTbAAmU/wAJlQcACZUnAAmVWwAJlY8ACZXjAAmWJwAJlk8ACZZfAAmWewAJlp8ACZbPAAmW2wAJlvcACZcXAAmXMwAJl2sACZe3AAmXwwAJmAsACZgPAAmYOwAJmFcACZiPAAmYqwAJmLMACZj/AAmZWwAJmV8ACZl7AAmZlwAJmcsACZoLAAmaHwAJmn8ACZrDAAma0wAJmvsACZsXAAmbawAJnAsACZxLAAmcbwAJnP8ACZ0vAAmdWwAJnYsACZ2nAAmd2wAJnesACZ3/AAmeKwAJnp8ACZ7XAAme6wAJnvsACZ8nAAmfOwAJn18ACZ9zAAmfnwAJn7MACZ/jAAmf9wAJoB8ACaAzAAmgZwAJoHsACaCjAAmgtwAJoOMACaD3AAmhBwAJoRsACaEnAAmhOwAJoVMACaFjAAmhfwAJoY8ACaGjAAmh+wAJojsACaJjAAmiqwAJoucACaMXAAmjgwAJo9MACaPrAAmkHwAJpGMACaSXAAmkwwAJpO8ACaULAAmlLwAJpTsACaVbAAmlewAJpY8ACaXbAAmmLwAJplsACaZ3AAmm3wAJpx8ACac7AAmnWwAJp3MACafXAAmoKwAJqG8ACahzAAmorwAJqQMACakbAAmpPwAJqWsACal7AAmpnwAJqcsACanfAAmqDwAJqjcACap7AAmqxwAJquMACar7AAmrFwAJqzcACatHAAmrXwAJq3cACaubAAmrswAJq9MACavvAAmsEwAJrDsACaxvAAmstwAJrM8ACa0jAAmtQwAJrY8ACa2jAAmtywAJreMACa4vAAmuSwAJrmMACa6HAAmuowAJrrsACa7LAAmu1wAJrwsACa9fAAmvqwAJr/sACbArAAmwXwAJsJMACbDTAAmxBwAJsU8ACbGjAAmx1wAJshcACbJbAAmyzwAJs0cACbPjAAm0PwAJtI8ACbSzAAm05wAJtTMACbVrAAm1fwAJtbcACbXnAAm2JwAJtpMACbb3AAm3dwAJt/cACbhjAAm41wAJuR8ACbmXAAm59wAJuksACbpzAAm6iwAJuscACbrjAAm7AwAJuyMACbtDAAm7ZwAJu6cACbvDAAm8BwAJvEsACbxrAAm8jwAJvLMACby/AAm9HwAJvTsACb2TAAm92wAJvf8ACb5bAAm+dwAJvqsACb7bAAm/BwAJv2sACb+3AAnAPwAJwJMACcDXAAnA6wAJwQ8ACcFDAAnBTwAJwacACcHvAAnCNwAJwm8ACcK3AAnC7wAJw08ACcOfAAnERwAJxN8ACcU7AAnFhwAJxc8ACcYHAAnGVwAJxpcACcbfAAnHIwAJx2sACcerAAnH7wAJyFMACciLAAnI5wAJyR8ACcmfAAnJ+wAJyhsACcpTAAnKawAJyqcACcrPAAnLFwAJy1cACcuvAAnL9wAJzC8ACcxvAAnMwwAJzQ8ACc03AAnNXwAJzZcACc3rAAnOpwAJztMACc7zAAnPLwAJz0MACc9nAAnPhwAJz7sACdAbAAnQTwAJ0HsACdDPAAnREwAJ0RcACdFbAAnR1wAJ0lcACdKLAAnS9wAJ00sACdOTAAnTuwAJ1I8ACdTjAAnVBwAJ1ecACdYTAAnW6wAJ1zcACdeXAAnX7wAJ2DMACdiLAAnY3wAJ2QcACdlfAAnZawAJ2YsACdnLAAnaOwAJ2ncACdq7AAna4wAJ2xMACduXAAnb9wAJ3BsACdw7AAnciwAJ3JMACdybAAnc+wAJ3ScACd0zAAndVwAJ3asACd37AAneNwAJ3rcACd7TAAnfUwAJ338ACd/3AAngMwAJ4LsACeEHAAnhnwAJ4f8ACeKvAAni6wAJ43MACeO3AAnkRwAJ5I8ACeUjAAnlVwAJ5dcACeYvAAnm1wAJ5xcACeejAAnoKwAJ6KMACelDAAnpxwAJ6mMACerjAAnriwAJ7A8ACeyXAAntRwAJ7bsACe5XAAnu4wAJ71cACe/PAAnwbwAJ8OMACfF/AAnx8wAJ8o8ACfLnAAnzXwAJ8/8ACfSTAAn0/wAJ9eMACfZjAAn3CwAJ94sACfgzAAn47wAJ+c8ACfpXAAn7AwAJ+5cACfxTAAn83wAJ/XMACf4vAAn+awAJ/oMACf6vAAn+8wAJ/yMACf9nAAn/hwAJ/8MACf/fAAoABwAKACcACgBLAAoAbwAKAL8ACgD7AAoBNwAKAWsACgGTAAoBwwAKAdMACgH3AAoCCwAKAicACgJbAAoCjwAKAtcACgMDAAoDFwAKAysACgM/AAoDUwAKA4sACgOvAAoD+wAKBB8ACgRXAAoEewAKBJsACgS7AAoFEwAKBTsACgVfAAoFbwAKBdMACgY7AAoGYwAKBmsACgazAAoHBwAKB0MACgePAAoH9wAKCGsACgjnAAoJYwAKCcsACgo7AAoKhwAKCrcACgsXAAoLSwAKC3MACgurAAoL5wAKDC8ACgxHAAoMcwAKDKMACgzfAAoNFwAKDT8ACg2DAAoNvwAKDhMACg43AAoOswAKDv8ACg8nAAoPTwAKD4sACg+rAAoP7wAKD/sAChBPAAoQlwAKENMAChDnAAoRDwAKETsAChF/AAoR1wAKEgMAChI7AAoSiwAKEt8AChMnAAoTYwAKE5MAChP3AAoUNwAKFJMAChTvAAoVQwAKFZ8AChXnAAoWKwAKFlcAChanAAoW2wAKFwMAChdPAAoXdwAKF6sAChffAAoX/wAKGEMAChiDAAoYvwAKGM8AChlrAAoZiwAKGdcAChnrAAoagwAKGssAChsTAAobVwAKG8MAChwfAAocewAKHNMACh27AAod7wAKHpsACh7TAAoe8wAKHxcACh8zAAofUwAKH3MACh+bAAofzwAKIBcACiBzAAogswAKIL8ACiFrAAohtwAKIeMACiILAAoiHwAKImsACiKvAAoi5wAKI/8ACiRfAAokzwAKJWsACiWfAAol2wAKJh8ACiZjAAomjwAKJvMACicTAAonOwAKJ18ACieXAAooFwAKKI8ACijbAAoptwAKKgcACiorAAoqYwAKKosACirHAAorJwAKK38ACivDAAor7wAKLBMACiw3AAosawAKLL8ACiznAAotLwAKLVcACi2fAAot7wAKLh8ACi5XAAoukwAKLwMACi+LAAovuwAKMAcACjA7AAowdwAKMPsACjFnAAoxrwAKMf8ACjIrAAoyiwAKMscACjLrAAozKwAKM3cACjPPAAo0SwAKNIsACjTrAAo1NwAKNWsACjXjAAo2FwAKNocACja3AAo27wAKNzMACjd/AAo3zwAKOB8ACjhXAAo4swAKOQcACjlzAAo5zwAKOlsACjp3AAo6vwAKOusACjsrAAo7hwAKO8sACjw3AAo8ZwAKPM8ACjzzAAo9LwAKPUMACj2LAAo9vwAKPicACj5LAAo+2wAKPx8ACj9jAAo/lwAKP9cACkAjAApAgwAKQOsACkEvAApBXwAKQbsACkIHAApCawAKQpsACkLXAApDBwAKQz8ACkNzAApDnwAKQ7MACkP7AApEDwAKRCsACkRXAApEgwAKRRcACkVLAApFfwAKRYMACkWbAApFswAKReMACkXzAApGAwAKRi8ACkZXAApGhwAKRtMACkb7AApHAwAKRwsACkcjAApHSwAKR1sACkdjAApHewAKR4MACkenAApHrwAKR88ACkgDAApIEwAKSD8ACkhPAApIfwAKSKcACkjLAApI/wAKSSsACklvAApJpwAKSfcACkonAApKawAKSqMACkrTAApK1wAKS1cACktrAApLdwAKS5sACkvbAApL9wAKTC8ACkxjAApMfwAKTLcACkzbAApNBwAKTRsACk0rAApNQwAKTX8ACk2LAApNrwAKTdsACk4XAApOTwAKTn8ACk63AApPAwAKTzMACk9rAApPmwAKT9sAClADAApQTwAKUH8AClCzAApQ3wAKURsAClFrAApRywAKUhsAClJ/AApSxwAKUx8AClNrAApTvwAKU9cAClPzAApT+wAKVAcAClQjAApURwAKVGsAClSHAApUmwAKVQcAClU3AApVbwAKVcsAClYPAApWNwAKVmsAClZ7AApWtwAKVtcAClbrAApXNwAKV4sAClenAApX0wAKV/8ACliDAApYtwAKWL8ACljnAApZGwAKWUMACllvAApZmwAKWcMACloLAApaSwAKWmMAClqHAApaiwAKWo8AClqXAApaxwAKWs8AClsXAApbOwAKW28ACluzAApb6wAKXGsACly/AApc8wAKXQ8ACl0nAApdWwAKXY8ACl3nAApeLwAKXmsACl6/AApe8wAKXvsACl8/AApfVwAKX2cACl97AApfjwAKX6cACl/HAApgIwAKYCsACmAvAApgNwAKYHMACmCXAApg2wAKYR8ACmFPAAphmwAKYbMACmG/AAph/wAKYh8ACmKXAApi7wAKY4MACmP/AApkOwAKZGsACmSfAApkywAKZNcACmTvAAplRwAKZbMACmX3AApmMwAKZmcACmZ3AApmzwAKZu8ACmcPAApnOwAKZ2cACmeHAApnkwAKZ88ACmgfAApofwAKaKMACmjvAAppAwAKaRMACmkvAAppVwAKaYsACmmvAApptwAKad8ACmonAApqVwAKaqcACmqzAApqxwAKatMACmrXAApq/wAKawcACmsPAAprSwAKa5cACmufAAprpwAKa68ACmu/AAprxwAKa+MACmv/AApsNwAKbD8ACmxzAApsgwAKbJ8ACmyzAApsxwAKbNMACmzbAAps7wAKbScACm0zAAptUwAKbWsACm1zAApthwAKbZsACm2jAAptrwAKbeMACm37AApuBwAKbhcACm4zAApuUwAKblsACm5rAApugwAKbo8ACm6jAApu4wAKbv8ACm8XAApvMwAKb0cACm9XAApvdwAKb5MACm/fAApwDwAKcCsACnA7AApwQwAKcEsACnCfAApwuwAKcMsACnDzAApxGwAKcUcACnGPAApxtwAKceMACnIDAApyKwAKclMACnJ/AApyqwAKcr8ACnLfAApzFwAKcy8ACnNLAApzewAKc5cACnOvAApz7wAKc/cACnRjAAp0pwAKdMMACnUTAAp1UwAKdYsACnXnAAp2IwAKdoMACnbbAAp3VwAKd8cACngLAAp4TwAKeKMACnivAAp5CwAKeVMACnmXAAp51wAKegsACnpTAAp6fwAKersACnr7AAp7NwAKe3sACnvbAAp7/wAKfGcACnyHAAp8mwAKfPsACn1TAAp9bwAKfa8ACn3bAAp+IwAKfmcACn6XAAp+6wAKfwcACn8zAAp/VwAKf3cACn/bAAqAPwAKgJcACoEbAAqBSwAKgXcACoG7AAqB6wAKgl8ACoJ3AAqCmwAKguMACoMvAAqDnwAKg9sACoQDAAqEOwAKhIcACoTTAAqE1wAKhSMACoVvAAqFuwAKheMACoYfAAqGWwAKhncACoaXAAqG8wAKhycACodrAAqHpwAKh8sACofzAAqIKwAKiHMACoiLAAqIvwAKiOcACokbAAqJLwAKiXMACom7AAqJ+wAKij8ACop7AAqKswAKivsACot7AAqL2wAKjC8ACoyDAAqMowAKjPcACo0LAAqNHwAKjV8ACo2fAAqNxwAKjhMACo4rAAqObwAKjr8ACo7TAAqO+wAKjzsACo+HAAqQAwAKkBcACpAvAAqQawAKkIsACpEvAAqRQwAKkXMACpGnAAqR1wAKkhcACpI/AAqSawAKkqsACpLjAAqTKwAKk3cACpO/AAqULwAKlGcACpSTAAqU4wAKlQsACpUnAAqVfwAKlbsACpYXAAqWiwAKlrsACpb3AAqXGwAKl2MACpeTAAqXwwAKl+8ACpgTAAqYNwAKmFcACphzAAqYkwAKmL8ACpjrAAqZFwAKmTsACpl3AAqZqwAKmd8ACpoLAAqaLwAKmk8ACppvAAqanwAKmtMACpr7AAqbJwAKm1MACpuHAAqbrwAKm8MACpwTAAqcLwAKnFsACpyDAAqcswAKnOcACp0jAAqdcwAKnaMACp3bAAqd+wAKnkMACp6DAAqewwAKnwMACp8bAAqfWwAKn2cACp9/AAqfkwAKn6sACp/PAAqf5wAKoBcACqA3AAqgjwAKoPMACqEnAAqhOwAKoY8ACqHDAAqiGwAKokcACqKLAAqirwAKovsACqNbAAqjqwAKo+8ACqQzAAqkSwAKpJMACqSvAAqk9wAKpUMACqWLAAqluwAKpdsACqYPAAqmWwAKppsACqbbAAqnKwAKp58ACqfnAAqoIwAKqGMACqiPAAqovwAKqNsACqkTAAqpQwAKqWcACqmPAAqpswAKqdsACqoHAAqqNwAKqmMACqqTAAqqwwAKqvcACqsbAAqrQwAKq1cACquXAAqr7wAKrCMACqy3AAqs+wAKrR8ACq1PAAqtmwAKriMACq57AAqumwAKrscACq8LAAqvMwAKr3cACq+TAAqv1wAKsAcACrBDAAqwbwAKsKsACrDbAAqxIwAKsWcACrIDAAqyIwAKsisACrKPAAqy5wAKs2cACrOfAAq0DwAKtIMACrS3AAq01wAKtPMACrUDAAq1OwAKtV8ACrWbAAq2AwAKtjMACraXAAq25wAKtvcACrcLAAq3KwAKt0sACrdvAAq3gwAKt5cACre3AAq31wAKt98ACrfnAAq4FwAKuHcACriLAAq4swAKuPcACrkfAAq5bwAKuZMACrm7AAq6AwAKumsACrrDAAq6/wAKu1sACrunAAq71wAKvAcACrxHAAq8dwAKvKsACrzLAAq87wAKvRcACr0nAAq9bwAKvbcACr4LAAq+NwAKvssACr8LAAq/KwAKv2sACr+/AArAHwAKwF8ACsC/AArBTwAKwasACsHHAArCHwAKwp8ACsL3AArDOwAKw2sACsODAArD9wAKxAcACsQPAArEHwAKxE8ACsTDAArE6wAKxQ8ACsU7AArFewAKxbsACsYHAArGUwAKxn8ACsa7AArG8wAKxy8ACsenAArH/wAKyE8ACsibAArIzwAKyScACsl7AArJtwAKygMACsonAArKSwAKym8ACsq7AArKzwAKyzMACss/AArLjwAKy6cACsvTAArL/wAKzBMACsw7AArMWwAKzHsACsybAArMxwAKzQsACs1fAArNjwAKzdMACs4XAArOUwAKzncACs6PAArOnwAKzq8ACs67AArOxwAKzt8ACs73AArPBwAKzxMACs8zAArPUwAKz2sACs+LAArPswAKz/MACtArAArQUwAK0GsACtCbAArQywAK0PMACtEbAArRPwAK0WMACtGTAArRwwAK0esACtIPAArSMwAK0msACtKjAArS0wAK0vsACtMzAArTcwAK08sACtRbAArU6wAK1TsACtWrAArV9wAK1o8ACtbDAArXAwAK11MACteHAArXtwAK1/cACtgnAArYiwAK2MMACtk/AArZuwAK2hcACtqTAArbFwAK28cACtxDAArcxwAK3UMACt3DAAreRwAK3psACt7rAArfJwAK31cACt+DAArfuwAK4AMACuCDAArgxwAK4ScACuFXAArhfwAK4e8ACuITAAriewAK4v8ACuMfAArjpwAK48sACuRDAArkYwAK5NsACuWHAArmAwAK5isACuZ/AArm1wAK5zMACueTAAroCwAK6GMACujfAArpOwAK6YsACum7AArqGwAK6msACurjAArrNwAK648ACuvnAArsCwAK7EcACuxvAArsmwAK7McACuznAArtLwAK7VMACu2fAArt2wAK7i8ACu5zAAru/wAK7yMACu9XAArvowAK8A8ACvA/AArwSwAK8IcACvC/AArw8wAK8SMACvGvAArx8wAK8isACvJbAAryhwAK8p8ACvLHAAry+wAK8z8ACvN7AArzowAK9AsACvRHAAr0ewAK9MsACvTjAAr1LwAK9a8ACvYHAAr2WwAK9ocACvb/AAr3MwAK93cACverAAr39wAK+GsACvizAAr5RwAK+WMACvmvAAr56wAK+kcACvpvAAr6lwAK+rcACvrLAAr7OwAK+4MACvuzAAr71wAK/A8ACvwfAAr8bwAK/KcACvzTAAr9MwAK/W8ACv3vAAr+JwAK/kMACv6DAAr+rwAK/rcACv9bAAr/zwALAHsACwCnAAsAxwALAPMACwEjAAsBVwALAV8ACwHPAAsCGwALAmsACwKTAAsC2wALAwsACwM3AAsDUwALA38ACwOfAAsEHwALBE8ACwSfAAsFCwALBVMACwXTAAsF7wALBiMACwZHAAsGmwALBusACwcHAAsHVwALB6MACwhXAAsI2wALCPcACwj/AAsJbwALCh8ACwpTAAsLewALC6cACwxLAAsNEwALDUsACw4XAAsONwALDvcACw+vAAsP7wALEF8ACxBrAAsQfwALEK8ACxDjAAsRBwALETcACxFjAAsRiwALEecACxIvAAsSZwALEpcACxLfAAsS+wALEy8ACxM7AAsTWwALE48ACxPXAAsUDwALFFcACxSjAAsU2wALFQsACxUbAAsVQwALFWMACxV7AAsVpwALFcsACxXzAAsWIwALFisACxZbAAsWgwALFo8ACxajAAsW8wALFycACxdfAAsXvwALF+MACxgXAAsYWwALGKsACxjzAAsZGwALGVMACxmbAAsZ5wALGlMACxpfAAsamwALGrsACxrPAAsa1wALG0MACxuPAAsbrwALG9MACxwTAAscSwALHJsACxzPAAsc9wALHScACx1rAAsdnwALHdMACx33AAseGwALHksACx6XAAsevwALHs8ACx7/AAsfLwALH0sACx+bAAsftwALH+cACyAHAAsgewALII8ACyCjAAsg7wALIRcACyFHAAshfwALIdMACyIbAAsiTwALIm8ACyK/AAsjDwALI18ACyRDAAslJwALJU8ACyVvAAslrwALJbcACyX/AAsmJwALJnMACyZ/AAsnCwALJ4cACyenAAsoCwALKCsACygzAAsoSwALKF8ACyhzAAsohwALKJcACyirAAsovwALKNMACyjzAAspFwALKTMACylTAAspWwALKXcACymHAAsplwALKacACym/AAsp2wALKf8ACyofAAsqOwALKk8ACypjAAsqdwALKpMACyqfAAsqvwALKssACyrbAAsq4wALKwsACysjAAsrKwALK08ACytzAAsrewALK4sACyunAAsruwALK9MACyvrAAsr9wALLAcACywPAAssFwALLDcACyxHAAssWwALLG8ACyyPAAssqwALLMMACyzPAAss3wALLPcACy0PAAstIwALLTsACy1LAAstWwALLW8ACy1/AAstiwALLacACy2zAAstwwALLdcACy3nAAst+wALLhsACy4/AAsuXwALLocACy7LAAsvDwALL0sACy9jAAsvpwALL8MACy/zAAswFwALMGsACzCXAAsw2wALMR8ACzFDAAsxXwALMZsACzGvAAsxuwALMeMACzIPAAsyKwALMlMACzKfAAsy8wALMzcACzNDAAszewALM6MACzPDAAs0BwALNFMACzSjAAs07wALNT8ACzV/AAs1zwALNhMACzZTAAs2owALNu8ACzdLAAs3lwALN88ACzgnAAs4ewALOJMACzi/AAs46wALORMACzk7AAs5RwALOY8ACzm3AAs5zwALOfMACzo/AAs6lwALOqMACzrTAAs62wALOuMACzrzAAs7DwALOzcACztDAAs7TwALO2sACzuTAAs7nwALO7cACzu/AAs70wALO+cACzv7AAs8GwALPCMACzxvAAs8mwALPOsACzzzAAs9BwALPScACz0zAAs9OwALPU8ACz1jAAs9gwALPY8ACz2vAAs92wALPesACz37AAs+DwALPi8ACz5DAAs+VwALPncACz6DAAs+lwALPrcACz6/AAs+6wALPvMACz8PAAs/NwALPz8ACz9XAAs/iwALP5sACz+3AAs/vwALP+MACz/rAAtACwALQEcAC0BPAAtAkwALQOMAC0DvAAtBEwALQScAC0FHAAtBTwALQV8AC0F7AAtBgwALQf8AC0IDAAtCFwALQkMAC0J7AAtChwALQqcAC0KrAAtCzwALQx8AC0OTAAtDowALQ8cAC0QDAAtEIwALREMAC0RPAAtEewALRMMAC0UTAAtFZwALRa8AC0X7AAtGWwALRqsAC0bnAAtHPwALR5MAC0fbAAtIDwALSGMAC0irAAtJAwALSUsAC0mfAAtJ9wALSkMAC0qXAAtK6wALS0MAC0ubAAtL2wALTCcAC0yLAAtMzwALTRcAC01jAAtNuwALTecAC04DAAtOJwALTlsAC057AAtOrwALTs8AC08DAAtPIwALT1cAC0+LAAtPtwALT9sAC0//AAtQGwALUJMAC1C/AAtQ6wALUPMAC1EDAAtRKwALUUcAC1GHAAtRtwALUgMAC1IvAAtSfwALUqsAC1LXAAtS/wALU0MAC1N/AAtT0wALVCsAC1R7AAtU1wALVP8AC1U3AAtVgwALVa8AC1YLAAtWNwALVmsAC1Z7AAtWrwALVtMAC1bvAAtXAwALV2sAC1e7AAtX6wALWCMAC1hXAAtYfwALWJsAC1jHAAtY/wALWQsAC1ljAAtZjwALWbcAC1n7AAtaKwALWnsAC1rDAAta6wALWycAC1tbAAtbqwALW+cAC1w3AAtcTwALXIcAC1zbAAtdAwALXSsAC113AAtduwALXfsAC15DAAtekwALXsMAC18LAAtfJwALX28AC1+fAAtf3wALYB8AC2BXAAtggwALYNsAC2FHAAthiwALYc8AC2H7AAtiLwALYmMAC2KTAAtivwALYusAC2MLAAtjQwALY2MAC2OLAAtjmwALY7sAC2PbAAtkGwALZDcAC2RHAAtkjwALZLcAC2UbAAtlXwALZaMAC2XTAAtmIwALZlMAC2afAAtmwwALZvsAC2dHAAtnswALaBMAC2iDAAtozwALaQ8AC2lbAAtpmwALafsAC2o3AAtqYwALapsAC2rrAAtrTwALa7MAC2vfAAtsOwALbKcAC2z3AAttPwALbWsAC23DAAtuKwALbpsAC27nAAtvLwALb4MAC2/fAAtwHwALcEcAC3BzAAtwnwALcLsAC3EHAAtxRwALcYcAC3IjAAtyTwALcsMAC3MnAAtzpwALc7cAC3QTAAt0awALdKcAC3UjAAt1SwALdV8AC3XDAAt14wALdfsAC3Y7AAt2uwALdwMAC3c3AAt3cwALd68AC3fDAAt33wALeAsAC3hPAAt4lwALeOsAC3k3AAt5bwALed8AC3oLAAt6PwALeosAC3q7AAt6zwALeuMAC3snAAt7SwALe2sAC3vHAAt8DwALfEcAC3xfAAt8vwALfOsAC303AAt9owALfesAC34jAAt+TwALfnMAC37TAAt/LwALf0cAC3+XAAt/twALf/MAC4AfAAuAbwALgI8AC4EbAAuBRwALgWcAC4GLAAuBrwALgdcAC4H7AAuCFwALgjsAC4KDAAuCuwALgvsAC4M/AAuDawALg9cAC4QrAAuEWwALhH8AC4SzAAuE8wALhT8AC4WPAAuFzwALhhsAC4abAAuHfwALh5sAC4fTAAuIJwALiGcAC4kPAAuJpwALiccAC4n3AAuKCwALik8AC4qDAAuKvwALiu8AC4sTAAuLawALi6MAC4vDAAuL/wALjC8AC4yrAAuNMwALjcMAC45TAAuOewALjqsAC47LAAuO3wALjzMAC493AAuPlwALj/8AC5BrAAuQmwALkLMAC5D3AAuRGwALkUMAC5FvAAuRnwALkdcAC5H/AAuSPwALkmcAC5KTAAuStwALkusAC5MTAAuTPwALk3cAC5PPAAuUVwALlKMAC5UrAAuVdwALlf8AC5ZHAAuWowALlu8AC5dnAAuXiwALl7MAC5fbAAuYNwALmGcAC5ijAAuY3wALmTsAC5mXAAuZ3wALmicAC5pLAAuaawALmpsAC5rPAAubEwALm2sAC5uvAAub8wALnA8AC5xPAAucXwALnJMAC5zPAAuc9wALnScAC51PAAuddwALnccAC53zAAueHwALnm8AC57jAAufGwALn48AC5/jA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AwMLwAMDEsADAybAAwM9wAMDV8ADA2zAAwN2wAMDhMADA5jAAwOmwAMDt8ADA8bAAwPSwAMD4sADA/DAAwQFwAMEDMADBBzAAwQ1wAMEQ8ADBFDAAwRYwAMEYsADBG/AAwSAwAMEmcADBKrAAwS6wAMEyMADBNjAAwTmwAME+MADBQjAAwUlwAMFPsADBU/AAwViwAMFcsADBXzAAwWIwAMFlcADBaTAAwW1wAMFw8ADBeDAAwX3wAMGBsADBirAAwZAwAMGScADBl/AAwZ0wAMGfcADBpLAAwagwAMGr8ADBsTAAwbKwAMG38ADBvXAAwcEwAMHH8ADBy7AAwdEwAMHTsADB1/AAwdpwAMHfsADB43AAweawAMHq8ADB7/AAwfYwAMH6cADCALAAwgOwAMIJcADCEHAAwhXwAMIc8ADCJDAAwinwAMItsADCMDAAwjKwAMI3cADCPTAAwj4wAMJDsADCSfAAwk9wAMJR8ADCVPAAwlowAMJdsADCYLAAwmIwAMJksADCaHAAwmpwAMJvMADCcfAAwnYwAMJ3cADCfLAAwn1wAMKC8ADCh7AAwouwAMKRsADClnAAwphwAMKbMADCoDAAwqUwAMKp8ADCq3AAwrBwAMKysADCtvAAwrywAMLB8ADCyLAAwsmwAMLMsADCz3AAwtTwAMLXsADC2jAAwt5wAMLhsADC5fAAwurwAMLtsADC8zAAwvVwAML3cADC/bAAwwKwAMMGsADDCTAAwwvwAMMP8ADDErAAwxXwAMMcsADDILAAwyVwAMMrcADDMjAAwzawAMM3sADDO7AAwz6wAMNF8ADDSLAAw0zwAMNQsADDVPAAw1awAMNYMADDW/AAw15wAMNhcADDY/AAw2ewAMNp8ADDbDAAw29wAMNz8ADDd/AAw3pwAMN+cADDgvAAw4ewAMOI8ADDjzAAw5OwAMOWcADDmDAAw5swAMOe8ADDofAAw6NwAMOpsADDrLAAw7FwAMO1cADDt/AAw7swAMO/MADDxHAAw8owAMPMcADD0fAAw9jwAMPbcADD3/AAw+MwAMPocADD7bAAw/IwAMP4cADD/HAAw/6wAMQCMADEA/AAxAYwAMQIMADECjAAxA3wAMQSMADEF7AAxBwwAMQg8ADEJfAAxCiwAMQvcADENLAAxDjwAMRA8ADERjAAxErwAMRQ8ADEVXA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Az1WwAM9cMADPYfAAz2YwAM9pcADPb3AAz3NwAM92cADPevAAz33wAM9/8ADPg3AAz4YwAM+LsADPjrAAz5GwAM+WsADPmLAAz5ywAM+gcADPorAAz6WwAM+qcADPrfAAz7LwAM+4cADPvPAAz8PwAM/HsADPzLAAz9HwAM/T8ADP1/AAz9rwAM/fMADP4rAAz+ZwAM/rcADP7zAAz/BwAM/0sADP/LAA0APwANAJcADQDLAA0BOwANAcsADQITAA0CNwANAlcADQKrAA0DAwANAy8ADQN3AA0DrwANBAcADQQvAA0EXwANBKsADQTXAA0FiwANBbcADQXfAA0GBwANBn8ADQbnAA0HTwANB3sADQfTAA0H4wANCDMADQiPAA0I3wANCZ8ADQnjAA0KGwANCmsADQqfAA0K1wANCx8ADQtXAA0LmwANC+MADQwjAA0MYwANDIMADQy/AA0NBwANDTsADQ2bAA0N3wANDicADQ5vAA0OnwANDtMADQ77AA0PKwAND1cADQ+XAA0P4wANEBsADRBXAA0QgwANENsADRELAA0RMwANEYsADRHHAA0SQwANEmsADRKnAA0TJwANE3MADROvAA0UBwANFF8ADRSbAA0U7wANFTsADRVrAA0VtwANFeMADRYfAA0WTwANFncADRanAA0XFwANFzcADRdPAA0XcwANF6cADRfjAA0YMwANGGMADRiLAA0YuwANGQMADRkrAA0ZOwANGYMADRmjAA0Z0wANGeMADRoTAA0aOwANGm8ADRqfAA0awwANG1cADRubAA0b4wANHBMADRw3AA0cewANHKMADRzHAA0c6wANHS8ADR2LAA0d5wANHjMADR5bAA0emwANHtcADR8HAA0fPwANH3sADR+bAA0f1wANH/sADSAnAA0gYwANIIMADSDrAA0hJwANIYsADSHTAA0iBwANIisADSJXAA0imwANIscADSMnAA0jTwANI3cADSPHAA0kBwANJF8ADSSjAA0lDwANJTsADSVnAA0lswANJfcADSY/AA0mewANJq8ADSbzAA0nJwANJz8ADSevAA0oOwANKJ8ADSkjAA0pgwANKe8ADSpHAA0qjwANKrcADSr7AA0rGwANK0sADStzAA0rvwANK/sADSxDAA0sUwANLGMADSx/AA0s2wANLRcADS0/AA0tYwANLaMADS3fAA0uSwANLrMADS83AA0vtwANMFMADTC3AA0xVwANMfsADTJ/AA0y+wANM2cADTPjAA00fwANNP8ADTXLAA02SwANNusADTfbAA04XwANOPcADTmnAA06VwANOx8ADTvPAA08gwANPSMADT2jAA0+KwANPucADT+HAA1AGwANQMsADUFvAA1CKwANQrMADUNrAA1EVwANRQcADUWzAA1GOwANRrcADUevAA1IgwANSVcADUoXAA1KvwANS2cADUwPAA1M4wANTasADU63AA1PPwANT7MADVBPAA1RGwANUZsADVIXAA1SswANUxsADVNrAA1T7wANVJ8ADVUbAA1VvwANVmcADVbTAA1XQwANWAMADVhzAA1Y6wANWVsADVoTAA1aywANW1MADVvXAA1ccwANXRMADV3rAA1ebwANXycADV/DAA1gcwANYK8ADWDnAA1hJwANYXsADWHLAA1h/wANYm8ADWLjAA1jNwANY4MADWO/AA1kCwANZHcADWTHAA1k4wANZRMADWVPAA1lowANZj8ADWaPAA1m/wANZ78ADWgTAA1oewANaPsADWl7AA1qEwANapMADWsXAA1rhwANa9cADWwvAA1suwANbSsADW2PAA1uDwANboMADW8PAA1vZwANb+8ADXCrAA1xKwANcacADXHnAA1yRwANcp8ADXLrAA1zswANdFcADXT7AA11iwANdgMADXZ7AA128wANd5cADXgvAA15CwANeWMADXmnAA16NwANeqMADXs/AA17jwANe9sADXxHAA18fwANfNsADXz7AA19ewANfe8ADX5nAA1+owANfzMADX+7AA2AQwANgJcADYEDAA2BcwANghsADYJvAA2C9wANg2MADYPjAA2EAwANhCMADYRHAA2E1wANhYsADYbTAA2IPwANiacADYpDAA2KrwANiw8ADYtrAA2LvwANjBsADYyDAA2M4wANjUsADY2nAA2OAwANjmsADY7LAA2PMwANkEMADZCHAA2Q3wANkS8ADZGHAA2SLwANkosADZMnAA2UWwANlKcADZUrAA2WLwANl9MADZkbAA2ajwANm58ADZyrAA2dZwANnuMADaCfAA2g/wANohsADaOfAA2kuwANpTsADaWjAA2m3wANp5MADai3AA2pPwANqlsADarzAA2r8wANrSMADa87AA2vuwANsDMADbCzAA2xuwANsucADbPDAA20nwANtS8ADbW3AA210wANtjcADbanAA23YwANt7sADbiTAA256wANum8ADb3HAA2+pwANv58ADcJrAA3FZwANxzMADchXAA3KSwANyuMADcvrAA3NcwANzpsADc9TAA3QUwAN0PcADdRfAA3WFwAN2AMADdvTAA3cjwAN3YcADd4XAA3eowAN33cADd+7AA3ghwAN4b8ADeLPAA3kAwAN5N8ADea3AA3nbwAN6B8ADekbAA3qFwAN6zcADewLAA3t7wAN7zsADe9/AA3vvwAN8PMADfJTAA3zEwAN8+cADfUPAA31zwAN9lcADfbXAA33mwAN+F8ADgFjAA4CZwAOAxcADgOvAA4F2wAOB2MADgmTAA4MNwAODlMADhAbAA4RKwAOEhcADhRLAA4VSwAOGJsADhrTAA4c2wAOHuMADiEXAA4jGwAOJAMADiWvAA4nywAOKd8ADiwLAA4tlwAOLx8ADjAzAA4wswAOMSMADjPbAA410wAONtsADjnDAA47swAOPIcADj9jAA5BGwAORGMADkUnAA5GdwAOR3MADkhXAA5JEwAOSdsADkprAA5KlwAOSs8ADkrXAA5K8wAOS4cADkvHAA5MAwAOTCsADkx7AA5MpwAOTRcADk1fAA5NowAOTcMADk3bAA5OBwAOTicADk5rAA5OdwAOTpMADk63AA5PCwAOT3MADk+fAA5PzwAOUBcADlBfAA5QkwAOUNMADlEPAA5RSwAOUZcADlHjAA5SKwAOUl8ADlKXAA5S0wAOU0cADlObAA5T4wAOVDsADlSTAA5U6wAOVT8ADlWjAA5V1wAOViMADlZPAA5WmwAOVscADlcXAA5XSwAOV5MADlfDAA5YCwAOWDcADliDAA5YwwAOWQMADlkzAA5ZVwAOWg8ADlpfAA5axwAOWzsADltnAA5b+wAOXD8ADlx7AA5cswAOXN8ADlzvAA5c/wAOXZsADl2rAA5dwwAOXfMADl4LAA5eLwAOXm8ADl6XAA5euwAOXwsADl87AA5fawAOX3sADl+rAA5fuwAOX9sADmAHAA5gOwAOYE8ADmCDAA5gwwAOYPMADmFLAA5hhwAOYa8ADmHfAA5iLwAOYlsADmKPAA5i1wAOYvsADmMzAA5jbwAOY58ADmO/AA5kDwAOZEMADmRfAA5kcwAOZPsADmU7AA5lewAOZYMADmX/AA5mDwAOZh8ADmYvAA5mPwAOZk8ADmZfAA5mbwAOZn8ADmaLAA5mlwAOZqcADmazAA5mvwAOZssADmbXAA5m4wAOZu8ADmb/AA5nDwAOZx8ADmcvAA5nPwAOZ08ADmdfAA5nbwAOZ38ADmeLAA5nmwAOZ6sADme3AA5nwwAOZ88ADmfbAA5n6wAOaAMADmgzAA5oRwAOaF8ADmiTAA5ouwAOaM8ADmjrAA5pCwAOaRsADmlDAA5pVwAOaYMADmm3AA5p0wAOaf8ADmpDAA5qXwAOao8ADmrXAA5q+wAOaw8ADmsnAA5rPwAOa1MADmtjAA5rhwAOa58ADmu/AA5r4wAOa/sADmwjAA5sLwAObFcADmxzAA5snwAObLcADmzDAA5s9wAObRMADm1DAA5tZwAObXMADm2XAA5tywAObfMADm4XAA5uTwAObnsADm6TAA5uowAObs8ADm73AA5vHwAObzcADm9TAA5vfwAOb5MADm+jAA5vvwAOb+8ADnAHAA5wUwAOcL8ADnK/AA5zEwAOcysADnNzAA50CwAOdKcADnVPAA515wAOduMADncDAA53ewAOeF8ADniLAA54pwAOeSMADnmrAA55xwAOehMADnojAA56UwAOemcADnp/AA56lwAOersADnrjAA56+wAOexcADns3AA57cwAOe68ADnvPAA575wAOfBcADnxDAA58gwAOfLsADnzvAA59iwAOfh8ADn6/AA5+/wAOf0cADn97AA5/vwAOf+sADoATAA6AQwAOgHcADoDLAA6BHwAOgcsADoJ7AA6DFwAOg78ADoR3AA6ErwAOhO8ADoUDAA6FXwAOhaMADoW7AA6FzwAOhh8ADoZDAA6GYwAOhssADocPAA6HQwAOh2MADoeHAA6HqwAOh7sADof/AA6IKwAOiFcADoifAA6I9wAOiTsADol7AA6JkwAOic8ADonnAA6KKwAOircADosLAA6LUwAOi98ADowzAA6MewAOjOsADo1HAA6NXwAOja8ADo3jAA6OMwAOjncADo6zAA6O+wAOj0cADo+LAA6QSwAOkJcADpDXAA6Q9wAOkWMADpF/AA6RuwAOkk8ADpKnAA6TOwAOk5MADpPrAA6UZwAOlJ8ADpUbAA6VXwAOla8ADpYvAA6WXwAOlpcADpbXAA6XPwAOl4cADpebAA6X2wAOmCsADphrAA6YdwAOmMMADpkXAA6ZcwAOmasADpoLAA6aJwAOmksADpqHAA6a0wAOm0sADpvLAA6b8wAOnB8ADpxDAA6cZwAOnK8ADpzXAA6dQwAOnWsADp1zAA6duwAOnisADp5rAA6eswAOnvMADp83AA6fgwAOn8sADqATAA6gTwAOoIMADqDnAA6hGwAOoUsADqF7AA6howAOoisADqJrAA6iiwAOorcADqLnAA6jMwAOo2MADqOzAA6jywAOpB8ADqRDAA6kWwAOpIsADqTDAA6k2wAOpPsADqUXAA6lRwAOpYsADqWrAA6l4wAOpgcADqYnAA6mYwAOpncADqajAA6m0wAOpu8ADqcHAA6nSwAOp28ADqefAA6n5wAOqDsADqifAA6pEwAOqZcADqm/AA6p6wAOqlMADqq/AA6q+wAOqzcADqtzAA6rlwAOq+sADqwHAA6sQwAOrGsADqyfAA6s0wAOrQsADq1DAA6tnwAOrb8ADq3zAA6uHwAOrnsADq63AA6vJwAOr28ADq+vAA6wBwAOsFMADrCHAA6wuwAOsPMADrEfAA6xUwAOsWsADrGDAA6xywAOshMADrI/AA6yfwAOstsADrM/AA6zewAOs9sADrRrAA61AwAOtV8ADrWnAA61/wAOtk8ADrazAA628wAOt0sADrebAA64AwAOuEsADrhnAA64kwAOuOsADrkPAA65XwAOuYcADroHAA66dwAOuqsADrrbAA67DwAOu2cADrurAA673wAOvAsADrxzAA68xwAOvTcADr2TAA691wAOvf8ADr4bAA6+NwAOvoMADr7fAA6/NwAOv18ADr+PAA6/3wAOwD8ADsB/AA7AlwAOwM8ADsD3AA7BGwAOwT8ADsHDAA7B5wAOwh8ADsJzAA7CmwAOwtcADsMDAA7DQwAOw28ADsOXAA7DuwAOw+cADsQnAA7ESwAOxG8ADsSXAA7FIwAOxWMADsWLAA7F3wAOxjsADsZbAA7GiwAOxscADscjAA7HgwAOx7MADsfXAA7H+wAOyBsADshLAA7IbwAOyJcADsjLAA7I9wAOyTcADslfAA7JwwAOyicADspvAA7KrwAOyvcADsszAA7LWwAOy38ADsujAA7L1wAOzCsADsxbAA7MpwAOzL8ADszrAA7NQwAOzYMADs2/AA7N4wAOzn8ADs7LAA7PZwAOz48ADs+nAA7P5wAO0BMADtBfAA7QpwAO0MsADtEzAA7ROwAO0U8ADtGrAA7R3wAO0osADtKzAA7S4wAO00cADtNzAA7TzwAO1BMADtRDAA7UhwAO1KsADtTLAA7VKwAO1YsADtZDAA7WhwAO1ssADtbrAA7XBwAO10cADtejAA7XzwAO1+cADthHAA7YhwAO2TcADtlvAA7ZqwAO2fcADto3AA7alwAO2tMADtsTAA7bWwAO2+sADtwnAA7cWwAO3JsADty3AA7c+wAO3UsADt3DAA7d4wAO3h8ADt6rAA7e4wAO3ysADt9HAA7fgwAO388ADt/fAA7gCwAO4D8ADuBfAA7gkwAO4LcADuDXAA7hBwAO4SsADuFnAA7hrwAO4e8ADuITAA7iTwAO4pcADuLTAA7jCwAO4zcADuNvAA7jnwAO5A8ADuR7AA7k9wAO5UMADuWTAA7lwwAO5hMADuZDAA7miwAO5rMADub3AA7nSwAO558ADuf/AA7oHwAO6FcADuhrAA7onwAO6NMADukvAA7pdwAO6e8ADupTAA7qZwAO6tsADusvAA7rbwAO698ADuwvAA7slwAO7O8ADu1nAA7uMwAO7xsADu+vAA7wHwAO8F8ADvC7AA7xDwAO8V8ADvHrAA7yIwAO8lcADvK7AA7yzwAO8vsADvMzAA7zewAO858ADvP3AA70awAO9NcADvUvAA71lwAO9fsADvbzAA73lwAO99sADvizAA75lwAO+dMADvoHAA76RwAO+pMADvqrAA76wwAO+ucADvsvAA77bwAO+7MADvv3AA78IwAO/G8ADvyrAA79DwAO/WMADv23AA79+wAO/isADv5TAA7+iwAO/scADv8bAA7/bwAO/8MADwA7AA8AXwAPAKsADwDLAA8A7wAPASsADwFDAA8OlwAPG6sADxzzAA8dqwAPHbcADx3rAA8eCwAPHi8ADx53AA8epwAPHu8ADx87AA8fXwAPH5cADx/PAA8gCwAPIC8ADyBjAA8gcwAPIJsADyC7AA8hFwAPIVsADyF/AA8hlwAPIcMADyHrAA8iPwAPIr8ADyMfAA8jSwAPI38ADyPTAA8kPwAPJHsADySfAA8k2wAPJRMADyV3AA8lywAPJhMADyZ7AA8muwAPJvsADydTAA8nowAPJ+cADyhDAA8oewAPKK8ADyjfAA8pEwAPKUMADyn/AA8qOwAPKosADyrfAA8q9wAPK1sADyu7AA8sHwAPLGsADyyfAA8s5wAPLbMADy3rAA8uCwAPLjMADy63AA8vKwAPL3cADy+vAA8v0wAPMD8ADzBfAA8wzwAPMUMADzG3AA8yCwAPMl8ADzL3AA8zNwAPM4sADzPHAA80JwAPNEsADzSnAA81GwAPNVMADzV/AA81zwAPNiMADzZ7AA825wAPN0sADzerAA84LwAPOIMADzivAA841wAPOP8ADzkfAA85RwAPOW8ADzm/AA86AwAPOisADzpfAA86qwAPOt8ADzsXAA87ZwAPO68ADzv/AA88ewAPPNsADz0nAA89ZwAPPb8ADz3vAA8+GwAPPlsADz6fAA8+5wAPPx8ADz9zAA8/lwAPP+MAD0ATAA9AQwAPQHcAD0CnAA9A4wAPQSMAD0E/AA9BjwAPQbMAD0ILAA9CbwAPQrMAD0O3AA9ElwAPRNcAD0TnAA9FMwAPRX8AD0WzAA9GCwAPRkcAD0ZjAA9GvwAPRvMAD0cfAA9HOwAPR18AD0eDAA9HnwAPR9cAD0hPAA9IWwAPSIcAD0ivAA9JGwAPSUcAD0njAA9KIwAPSmsAD0qrAA9KywAPSwsAD0svAA9LPwAPS18AD0vjAA9MFwAPTHMAD0znAA9NEwAPTX8AD03XAA9OJwAPTksAD06PAA9O4wAPTzsAD0+nAA9QBwAPUDsAD1BnAA9QmwAPUPcAD1EXAA9RYwAPUZsAD1HvAA9R/wAPUmcAD1MXAA9TfwAPU4cAD1OfAA9TxwAPU9sAD1RDAA9UYwAPVIsAD1T7AA9VOwAPVbMAD1ZXAA9WywAPVycAD1dfAA9X8wAPWC8AD1hzAA9YowAPWNMAD1jzAA9ZLwAPWVMAD1l3AA9ZuwAPWscAD1uTAA9cawAPXK8AD10HAA9dHwAPXU8AD11fAA9dlwAPXbsAD13TAA9d+wAPXhsAD16vAA9e6wAPXw8AD19jAA9fiwAPX/cAD2BHAA9ghwAPYPcAD2ErAA9hdwAPYZMAD2IDAA9iVwAPYqMAD2NPAA9jswAPY98AD2QLAA9kSwAPZGMAD2SvAA9kzwAPZUMAD2WLAA9l+wAPZkMAD2ZjAA9miwAPZrsAD2crAA9ncwAPZ8MAD2gLAA9oYwAPaIcAD2jPAA9pDwAPaUMAD2mHA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BBd0wAQXiMAEF57ABBemwAQXwsAEF8/ABBfawAQX7cAEF/rABBgDwAQYF8AEGCjABBhCwAQYTcAEGFjABBhlwAQYhsAEGJTABBijwAQYrsAEGL7ABBjRwAQY4sAEGO3ABBkEwAQZE8AEGSLABBkwwAQZUcAEGWTABBl3wAQZh8AEGZnABBmpwAQZuMAEGczABBndwAQZ68AEGfTABBoQwAQaGsAEGjzABBpRwAQaYMAEGnDABBqGwAQamMAEGqvABBqwwAQausAEGsbABBrlwAQa8sAEGv/ABBsQwAQbKsAEG0XABBtZwAQbasAEG4DABBuLwAQb2cAEG+TABBwawAQcJ8AEHGvABBx1wAQciMAEHJ3ABByswAQczcAEHNrABBzrwAQc/cAEHQbABB0SwAQdJMAEHTfABB1FwAQdTcAEHV3ABB1mwAQdc8AEHX7ABB2LwAQdlsAEHaHABB2twAQdu8AEHcjABB3UwAQd1cAEHeHABB3twAQd8cAEHfbABB4LwAQeJ8AEHjnABB5IwAQeXcAEHm/ABB5/wAQejsAEHp/ABB6wwAQew8AEHsrABB7dwAQe7cAEHvrABB8QwAQfFMAEHyXABB86wAQfUsAEH1vABB9lwAQfhsAEH5rABB+kwAQfvcAEH9rABB/3wAQf/sAEIAzABCAdwAQgI8AEIEHABCBGwAQgWsAEIGjABCB+wAQgj8AEIJrABCCvwAQgusAEIM7ABCDqwAQg8MAEIPzABCD+wAQhD8AEISXABCE0wAQhOsAEIUXABCFKwAQhWsAEIWrABCFxwAQhgcAEIZTABCGnwAQht8AEIcDABCHJwAQh0sAEIezABCHzwAQiAcAEIgTABCIkwAQiLMAEIjXABCJLwAQiVMAEIlfABCJfwAQicsAEInbABCKHwAQilcAEIqTABCK/wAQi0cAEIuLABCL/wAQjCcAEIyTABCNjwAQjgsAEI43ABCOqwAQjvMAEI83ABCPcwAQj5sAEI/TABCP+wAQkCsAEJBvABCQuwAQkOsAEJEnABCRXwAQkZsAEJHDABCR7wAQkicAEJJjABCSewAQkosAEJKzABCS2wAQkwcAEJMfABCTMwAQk08AEJN3ABCTkwAQk6cAEJPXABCT+wAQlB8AEJR/ABCUuwAQlOcAEJUfABCVOwAQlXsAEJXfABCWKwAQlnsAEJbLABCXIwAQlz8AEJdrABCXkwAQl7cAEJfTABCYGwAQmE8AEJiXABCY0wAQmUcAEJnDABCZ8wAQmlsAEJqXABCaxwAQmxsAEJtXABCbowAQm9sAEJwTABCckwAQnMcAEJ0zABCdcwAQnacAEJ3/ABCePwAQnncAEJ7HABCe8wAQnxsAEJ87ABCfawAQn4sAEJ+3ABCf4wAQoA8AEKAvABCgcwAQoKcAEKDTABCg3wAQoQ8AEKE/ABChYwAQoZsAEKHPABCh7wAQoh8AEKIzABCiawAQoqcAEKLXABCjFwAQo68AEKP7ABCkfwAQpNcAEKUjABClkwAQpesAEKYjABCmcwAQptsAEKcTABCnJwAQpy8AEKc7ABCnlwAQp9MAEKgfABCoTwAQqH8AEKjPABCpMwAQqYcAEKmvABCp8wAQqhcAEKpfABCqhwAQqsMAEKrfABCrKwAQq1cAEKvDABCsDwAQrHMAEKyrABCs7wAQrUcAEK2LABCt8wAQrlMAEK6HABCuvwAQrtcAEK8HABCvTwAQr48AEK/TABCwFwAQsCsAELBHABCwpwAQsN8AELFbABCxlwAQsfsAELKDABCy+wAQs28AELOzABC0KwAQtHMAELTbABC1AwAQtXsAELWzABC2IwAQtmMAELbbABC3IwAQt5cAELf7ABC4YwAQuJsAELkXABC5YwAQugsAELpzABC7FwAQu3sAELwnABC8kwAQvVsAEL3jABC+dwAQvssAEL9vABC/0wAQwCsAEMBDABDA8wAQwVsAEMGvABDCVwAQwrcAEMNbABDDtwAQxGMAEMTHABDFPwAQxYMAEMYrABDGmwAQxucAEMcDABDHHwAQx1MAEMefABDH2wAQx/sAEMhDABDIdwAQyK8AEMjnABDJGwAQyVcAEMmDABDJswAQydMAEMoXABDKVwAQyn8AEMqjABDKywAQyvsAEMs/ABDLhwAQy7MAEMvrABDMLwAQzEsAEMxrABDMgwAQzNcAEM0vABDNfwAQzcsAEM4fABDObwAQzrMAEM77ABDPKwAQz1sAEM+PABDPywAQ0CcAENA/ABDQfwAQ0JsAENDDABDRCwAQ0UsAENGrABDR9wAQ0mcAENK3ABDTIwAQ03sAENPTABDUIwAQ1I8AENUHABDVXwAQ1b8AENYfABDWnwAQ1vcAENdnABDXswAQ2BMAENhXABDYpwAQ2R8AENmDABDZ2wAQ2iMAENpnABDaqwAQ2w8AENtvABDbxwAQ3EsAENyfABDdJwAQ3ZcAEN3nABDeUwAQ3r8AEN83ABDflwAQ3+sAEOBTABDgqwAQ4QcAEOFrABDh0wAQ4jcAEOKnABDi/wAQ42MAEOPHABDkIwAQ5HsAEOTfABDlVwAQ5ZcAEOXfABDmEwAQ5lcAEOZ7ABDmuwAQ5ucAEOcTABDnNwAQ53cAEOfDABDn7wAQ6CMAEOhXABDoqwAQ6NcAEOkbABDpTwAQ6WcAEOmzABDp6wAQ6hcAEOozABDqawAQ6p8AEOr3ABDrHwAQ63sAEOu/ABDr4wAQ7CMAEOxjABDsrwAQ7OMAEO0fABDtSwAQ7YMAEO2/ABDt9wAQ7jsAEO5nABDunwAQ7tcAEO8HABDvMwAQ72sAEO+3ABDv0wAQ7/sAEPAXABDwPwAQ8F8AEPCfABDwywAQ8RsAEPFLABDxlwAQ8c8AEPIHABDyNwAQ8oMAEPLbABDzEwAQ81MAEPOTABDz8wAQ9CsAEPR7ABD0pwAQ9OcAEPULABD1OwAQ9ZMAEPXXABD2DwAQ9jcAEPZbABD2fwAQ9sMAEPcDABD3OwAQ958AEPfTABD4OwAQ+IsAEPi7ABD5BwAQ+VMAEPmrABD56wAQ+h8AEPpnABD6nwAQ+tsAEPsfABD7ZwAQ+6sAEPv7ABD8MwAQ/HcAEPy7ABD89wAQ/S8AEP1zABD9ywAQ/esAEP4TABD+UwAQ/nsAEP6jABD+zwAQ/z8AEP/zABEAWwARAQcAEQFrABEB0wARAn8AEQLfABEDgwARA+8AEQSfABEEzwARBPcAEQU/ABEFcwARBcsAEQXzABEGKwARBn8AEQa/ABEG3wARB18AEQefABEH5wARCC8AEQhvABEIuwARCUsAEQmXABEKJwARCoMAEQqjABEK6wARCxcAEQtPABELcwARC7MAEQvjABEMDwARDDsAEQxfABEMfwARDL8AEQ0rABENZwARDZcAEQ3bABEOSwARDnsAEQ7TABEPCwARDycAEQ97ABEPqwARD88AEQ/7ABEQGwARED8AERBrABEQlwAREL8AERDrABERHwARETsAERFjABERiwAREasAERHHABER9wAREj8AERJvABESjwAREssAERMLABETMwARE3cAERO7ABEUBwARFIMAERSrABEVBwARFTMAERVPABEVkwARFdsAERZLABEWdwARFtcAERb3ABEXRwARF28AERejABEXzwARGAMAERgzABEYWwARGGMAERiLABEY0wARGS8AERlvABEZtwARGcsAERnrABEaDwARGjcAERpvABEakwARGuMAERsPABEbVwARG48AERuzABEbvwARG+cAERwjABEcSwARHG8AERyTABEcowARHOMAER0PABEdSwARHXMAER2jABEdvwARHeMAER4TABEeSwARHqcAER7vABEfKwARH1MAER9zABEffwARH7cAER/bABEgBwARIB8AESBPABEgawARIKcAESDPABEg8wARIQMAESFLABEhfwARIc8AESILABEiQwARImcAESLDABEjCwARIzMAESNbABEjqwARI+8AESQ7ABEkawARJLcAESTzABElLwARJWcAESWbABEl6wARJisAESZnABEmswARJusAEScTABEnTwARJ4cAESfjABEoLwARKHMAESjHABEpAwARKWcAESm7ABEp9wARKksAESpzABEqnwARKtcAESsrABErVwARK7cAESvzABEsRwARLK8AES0HABEtcwARLa8AES4DABEuawARLsMAES8vABEvdwARMAMAETBTABEwkwARMNcAETEfABExPwARMWMAETGPABEx4wARMh8AETJnABEynwARMt8AETMvABEzbwARM6cAETQLABE0ZwARNM8AETVPABE1lwARNcsAETX7ABE2LwARNlcAETaLABE2twARNuMAETdTABE3ywAROC8AETiLABE4ywAROScAETlzABE5twAROg8AETpvABE6twAROusAETsfABE7nwARPAcAETxjABE8qwARPNsAET0fABE9XwARPa8AET3/ABE+QwARPp8AET8PABE/ewARP88AEUAPABFAZwARQLsAEUEXABFBbwARQccAEUIbABFCbwARQssAEULzABFDHwARQ08AEUOrABFEFwARRG8AEUS3ABFFAwARRU8AEUV7ABFFwwARRfcAEUZrABFG3wARRycAEUdrABFHvwARR/cAEUiHABFJBwARSYcAEUnrABFKNwARSosAEUrLABFLEwARS1sAEUujABFL+wARTDsAEUyXABFM7wARTXMAEU2vABFN3wARThMAEU4/ABFOfwARTq8AEU8TABFPewART9sAEVAvABFQcwARULcAEVD3ABFRTwARUcsAEVIPABFSRwARUp8AEVLzABFTSwARU8cAEVRbABFUewARVKsAEVTvABFVNwARVXcAEVWvABFV1wARVgsAEVYzABFWYwARVpcAEVbLABFXDwARV3sAEVfrABFYYwARWKcAEVkLABFZewARWecAEVpfABFanwARWv8AEVtrABFbqwARXAsAEVx3ABFcwwARXS8AEV2nABFeOwARXocAEV7rABFfLwARX28AEV/XABFgCwARYEcAEWCXABFg0wARYQ8AEWFTABFhkwARYeMAEWI/ABFitwARYycAEWNrABFjswARY/cAEWQzABFkkwARZO8AEWVrABFl0wARZhcAEWY/ABFmewARZtMAEWcHABFnRwARZ5MAEWfDABFn6wARaBMAEWhHABFolwARaOcAEWlDABFpdwARaZsAEWoPABFqVwARamcAEWqHABFqvwARaxMAEWtXABFrlwARa+cAEWwjABFsTwARbI8AEWzLABFtKwARbcMAEW5bABFuowARbuMAEW87ABFvpwARcAMAEXBzABFwswARcQsAEXF3ABFx0wARckMAEXKPABFy7wARc1sAEXPfABF0KwARdGMAEXSXABF0zwARdPsAEXUzABF1YwARdZMAEXYHABF2gwARdusAEXdLABF3jwARd+8AEXg/ABF4hwAReOMAEXlHABF5kwARecsAEXoDABF6bwARes8AEXsXABF7QwARe3sAEXu/ABF8DwARfEMAEXyLABF8zwARfQMAEX1LABF9jwARfeMAEX43ABF+fwARftMAEX8zABF/kwARgAcAEYB3ABGAzwARgS8AEYFbABGBiwARgb8AEYIfABGCjwARgusAEYOHABGDqwARg98AEYQnABGEcwARhLcAEYTzABGFHwARhUsAEYWDABGFtwARhe8AEYYnABGGbwARht8AEYdTABGHzwARiDcAEYh/ABGI5wARiVMAEYmnABGKBwARij8AEYp3ABGKzwARixcAEYtjABGLiwARi6sAEYvfABGMGwARjFsAEYzrABGNMwARjUsAEY13ABGNxwARje8AEY4LABGONwARjoMAEY7DABGPGwARj2cAEY+XABGPvwARkCMAEZBXABGQtwARkNcAEZDvABGRHwARkUcAEZF7ABGR2wARki8AEZKPABGSywARkvcAEZMnABGTWwARk7cAEZP3ABGUKwARlGsAEZS3ABGU+wARlRcAEZVbABGVkwARlecAEZZHABGWvwARlxcAEZd7ABGXpwARl8cAEZfjABGYAwARmBcAEZg3ABGYTwARmGcAEZi7ABGZFwARmV8AEZmfABGZywARmhMAEZpLABGaewARmr8AEZsLABGbPwARm18AEZt/ABGb9wARnEcAEZxfABGccwARnLMAEZzPABGdEwARnVcAEZ13ABGdnwARnesAEZ4rABGeRwARnncAEZ6rABGevwARnt8AEZ8LABGfUwARn7sAEZ/nABGgKwARoGsAEaCzABGgzwARoOsAEaEDABGhGwARoV8AEaGzABGh8wARoj8AEaJLABGiXwARopsAEaLDABGi4wARowMAEaMvABGjYwARo58AEaP3ABGkSwARpIsAEaTTABGlHwARpXsAEaW3ABGmBwARpmMAEacLABGnNwARp2sAEad3ABGnuwARp98AEagnABGoMwARqD8AEahXABGoawARqH8AEaiTABGoswARqM8AEakLABGpUwARqZcAEannABGp/wARqjcAEap7ABGqkwARqssAEasPABGrMwARq3cAEavHABGr6wARrD8AEayfABGswwARrOcAEa0/ABGtYwARrYsAEa37ABGuSwARrosAEa6/ABGu6wARrzsAEa9/ABGvswARsA8AEbBXABGwnwARsQ8AEbFPABGxewARsbMAEbIXABGyZwARsqMAEbMDABGzUwARs4MAEbPDABGz7wARtDsAEbRrABG00wARtT8AEbVnABG1rwARte8AEbYzABG2kwARtt8AEbdHABG3nwARt+8AEbhLABG4owARuQsAEbl/ABG6EwARumMAEbrLABG7CwARu2cAEbujABG71wARvAsAEbxrABG8rwARvRsAEb2DABG9uwARve8AEb5HABG+bwARvp8AEb6/ABG+4wARvxMAEb8fABG/YwARv48AEb/LABHABwARwC8AEcBjABHAowARwM8AEcD/ABHBSwARwYMAEcHvABHCFwARwjMAEcJDABHCgwARws8AEcMHABHDWwARw5MAEcPPABHEDwARxI8AEcS/ABHFNwARxY8AEcZPABHGowARxwMAEcfHABHIIwARyJMAEckTABHJPwARyWsAEcmTABHJ6wARyh8AEcpXABHK1wARy28AEcvbABHMQwARzK8AEc0PABHNSwARzccAEc4rABHOqwARzvsAEc9TABHPnwAR0AcAEdBrABHQ4wAR0U8AEdGrABHR/wAR0mMAEdL/ABHTUwAR07MAEdPLABHT3wAR1AcAEdRbABHUlwAR1NcAEdUnABHVmwAR1esAEdZDABHWkwAR1wMAEddLABHX9wAR2NMAEdkvABHZjwAR2fcAEdozABHagwAR2qMAEdrHABHbDwAR2ysAEdtPABHbkwAR278AEdv7ABHcUwAR3JcAEdy/ABHc7wAR3R8AEd2HABHd4wAR3gMAEd4jABHeRwAR3ocAEd6zABHezwAR3usAEd9TABHfmwAR36sAEd/TABHf2wAR3+sAEeAHABHgOwAR4GcAEeB/ABHgqwAR4MsAEeD7ABHhHwAR4WsAEeF7ABHhpwAR4dcAEeJfABHikwAR4tcAEeMHABHjSwAR44sAEePDABHj/wAR5D8AEeRvABHkkwAR5KMAEeS3ABHk1wAR5PcAEeUfABHlRwAR5WMAEeV/ABHlowAR5dMAEeYTABHmNwAR5m8AEeanABHm5wAR5xMAEedDABHndwAR568AEefvABHoUwAR6I8AEejvABHpJwAR6UsAEel/ABHpywAR6gsAEepDABHqcwAR6sMAEer/ABHrOwAR63sAEevDABHr7wAR7B8AEexXABHsvwAR7OsAEe0bABHtTwAR7YsAEe3HABHt+wAR7i8AEe5zABHuowAR7tcAEe8PABHvTwAR74cAEe+/ABHwAwAR8EsAEfCvABHxHwAR8YcAEfH7ABHyRwAR8psAEfMXABHzUwAR88cAEfP/ABH0LwAR9MsAEfU3ABH1fwAR9dMAEfYLABH2UwAR9oMAEfanABH22wAR9wsAEfdDABH3ewAR988AEfgDABH4HwAR+FsAEfifABH4wwAR+PsAEflTABH5nwAR+gMAEfpXABH6pwAR+sMAEfrfABH6/wAR+4MAEfuzABH72wAR/BMAEfxPABH8ewAR/KcAEfzLABH9HwAR/W8AEf3PABH+SwAR/l8AEf6vABH/CwAR/z8AEf97ABH/rwAR/+sAEgAPABIAXwASAIcAEgCjABIAzwASAOsAEgEDABIBMwASAWcAEgGrABIBzwASAhMAEgInABICYwASApsAEgLjABIDJwASA2MAEgOjABIDuwASBAMAEgQnABIEWwASBIsAEgSzABIE3wASBRsAEgVfABIFgwASBa8AEgXPABIGXwASBpMAEgbXABIG/wASB08AEgenABIH3wASCAsAEghnABIIlwASCMcAEgj/ABIJGwASCWcAEgmbABIJvwASCfcAEgo/ABIKbwASCqMAEgrPABIK8wASCy8AEgtjABILkwASC8sAEgvvABIMBwASDCsAEgxjABIMowASDNMAEgz7ABINLwASDXMAEg2/ABIN9wASDhsAEg4rABIOPwASDl8AEg57ABIOowASDq8AEg7LABIPDwASD0cAEg93ABIPnwASD/cAEhBHABIQawASEPcAEhG3ABIR3wASEssAEhMLABITLwASE28AEhOTABITrwASE9sAEhP/ABIUGwASFEcAEhR7ABIUowASFNsAEhUfABIVawASFaMAEhXjABIWLwASFncAEha7ABIW8wASFz8AEhdzABIXkwASF7cAEhfXABIX7wASGCMAEhhTABIYbwASGJMAEhi/ABIY4wASGRcAEhlfABIZmwASGccAEhn/ABIaRwASGmsAEhqTABIauwASGvsAEhs/ABIbkwASG6cAEhvvABIcOwASHIMAEhyjABIc6wASHScAEh1bABIdfwASHcsAEh4XABIeawASHq8AEh63ABIe8wASHy8AEh9jABIfjwASH7sAEiAfABIgOwASIOsAEiEvABIhmwASId8AEiIPABIiTwASIq8AEiLPABIi+wASI1sAEiPHABIkJwASJHMAEiTDABIk7wASJR8AEiVTABIlhwASJbcAEiXzABImGwASJlsAEiaTABIm1wASJx8AEid/ABInvwASKCsAEihjABIoowASKNcAEikXABIpVwASKY8AEimnABIp8wASKkMAEiqnABIq5wASKy8AEiuTABIrywASLBcAEiwvABIsdwASLLcAEi0nABItjwASLcsAEi4DABIuZwASLr8AEi8TABIvWwASL6sAEi/vABIwQwASMJsAEjDLABIxGwASMVsAEjHXABIyVwASMpMAEjMPABIzUwASM3MAEjO3ABI0EwASNC8AEjRjABI0hwASNMcAEjVHABI1ZwASNZ8AEjZXABI2hwASNusAEjcnABI3iwASN8sAEjgbABI4TwASOJsAEjj7ABI5ZwASOdMAEjoXABI6XwASOtMAEjsrABI7WwASO2sAEjt/ABI7kwASO9cAEjwfABI8SwASPHcAEjynABI82wASPQsAEj1jABI9lwASPf8AEj4zABI+VwASPsMAEj73ABI/QwASP28AEj+vABI/4wASQAsAEkAzABJAbwASQKMAEkDTABJBAwASQScAEkF3ABJBswASQf8AEkJPABJCgwASQtcAEkMfABJDawASQ78AEkQPABJEYwASRJMAEkTXABJFAwASRS8AEkVfABJFnwASRecAEkYXABJGMwASRmcAEkabABJG3wASRycAEkdnABJHtwASR+cAEkgrABJIYwASSKsAEkjHABJJCwASST8AEkljABJJgwASSaMAEknnABJKQwASSn8AEkqfABJK1wASSvcAEksvABJLUwASS48AEkuvABJL5wASTCsAEkxXABJMgwASTP8AEk0rABJNewASTa8AEk3nABJOKwASTocAEk7PABJPBwAST0sAEk+DABJPtwAST/MAElAjABJQdwASUJcAElDrABJRSwASUZMAElHLABJSAwASUkcAElKLABJS2wASUxsAElNrABJTrwASU+sAElRPABJU/wASVR8AElU3ABJVRwASVY8AElXvABJWTwASVocAElbXABJXPwASWAsAEljLABJZcwASWhMAElrDABJbiwASW+cAElxLABJcjwASXMcAElzbABJdEwASXZsAEl3vABJeBwASXpMAEl6nABJfEwASX38AEl/DABJgIwASYIcAEmDTABJhNwASYX8AEmHHABJh/wASYk8AEmKfABJiywASYvsAEmMrABJjWwASY38AEmOfABJjywASY/cAEmQ3ABJkYwASZIMAEmSnABJk2wASZP8AEmU3ABJlbwASZbMAEmXTABJmBwASZicAEmZbABJmhwASZqsAEmb/ABJnPwASZ48AEmfrABJoMwASaHcAEmjPABJpDwASaWsAEmmfABJpxwASafMAEmpLABJqjwASas8AEmsjABJrXwASa4MAEmurABJr9wASbGcAEmyHABJsuwASbP8AEm0vABJtewASba8AEm3nABJuDwASbjcAEm5TABJufwASbpsAEm6/ABJvEwASb2MAEm+7ABJwDwAScGMAEnCrABJw5wAScSMAEnFfABJxpwAScecAEnInABJybwAScpMAEnLjABJzDwAScz8AEnNfABJzlwASc9sAEnQnABJ0bwASdK8AEnUHABJ1UwASdZcAEnXjABJ2LwASdmMAEnabABJ2ywASdvMAEncfABJ3RwASd48AEnffABJ3/wASeBsAEnh3ABJ4nwASeM8AEnj7ABJ5FwASeTMAEnlPABJ5fwASebcAEnnLABJ53wASef8AEnobABJ6SwASensAEnq3ABJ67wASexcAEntjABJ7pwASe9MAEnwPABJ8UwASfJMAEny/ABJ8/wASfScAEn1zABJ9uwASfdcAEn4HABJ+ZwASfosAEn6vABJ+0wASfx8AEn9nABJ/hwASf8cAEoAnABKAiwASgO8AEoFfABKBzwASgjsAEoKnABKC/wASg0MAEoOLABKDywAShAsAEoRzABKEtwAShOcAEoVDABKFswAShksAEoZvABKGswAShv8AEoePABKH5wASiAsAEognABKIOwASiFMAEoh3ABKIlwASiN8AEomDABKJywASifcAEoorABKKawASiqMAEoqzABKK3wASixMAEotTABKLYwASi7cAEovLABKL4wASi/cAEowPABKMbwASjJ8AEoznABKNLwASjT8AEo1jABKNiwASjasAEo5vABKOdwASjqcAEo93ABKPkwASkAsAEpB7ABKQxwASkOMAEpFDABKRhwASkc8AEpIfABKSdwASko8AEpLjABKTBwASk38AEpOfABKT8wASlA8AEpRDABKUdwASlJcAEpTfABKVEwASlU8AEpWPABKV/wASlh8AEpZTABKWcwASlp8AEpa7ABKW1wASlvMAEpcfABKXRwASl28AEpe3ABKX4wASmAMAEpgjABKYkwASmPMAEpk/ABKZhwASmaMAEpnXABKaAwASmkcAEpqHABKaywASmvsAEpsfABKbzwASm/sAEpwTABKcRwASnIMAEpybABKcwwASnNcAEpz3ABKdEwASnR8AEp1PABKdfwASnacAEp3XABKeDwASnmcAEp67ABKfMwASn1MAEp+HABKfswASn9cAEqAnABKgnwASoNMAEqEXABKhTwASoaMAEqHnABKiEwASoi8AEqJvABKi7wASo2cAEqPbABKkGwASpF8AEqS7ABKk7wASpS8AEqWLABKl7wASpisAEqZ7ABKmqwASpt8AEqcXABKnUwASp4cAEqe/ABKn/wASqNMAEqm/ABKp8wASqhsAEqpzABKqvwASqx8AEqs7ABKrgwASq6MAEqwvABKsuwASrM8AEq0PABKtkwASreMAEq57ABKvUwASr9sAEq/zABKwuwASsUcAErGvABKyKwASsnsAErLfABKzOwASs28AErOjABKzzwAStAsAErRHABK0dwAStKsAErTnABK1KwAStWcAErXLABK2JwAStoMAErarABK3CwAStzMAErdzABK3lwASt8cAErfzABK4HwASuGsAEriPABK4rwASuM8AErjzABK5DwASuS8AErlXABK5gwASueMAEroLABK6MwASumsAErqjABK64wASu0MAEruLABK70wASvBcAErxLABK8cwASvKcAErzTABK8+wASvRsAEr1DABK9XwASvXsAEr2nABK94wASviMAEr5HABK+fwASvrsAEr7fABK/BwASv0sAEr9nABK/nwASv78AEr/HABLAFwASwG8AEsCbABLAvwASwSsAEsFHABLBawASwZsAEsG/ABLCDwASwmcAEsKLABLCvwASwucAEsMXABLDPwASw1cAEsNrABLD5wASxCsAEsRrABLExwASxScAEsVvABLFrwASxdcAEsYjABLGQwASxnsAEsbzABLHawASx+sAEsgTABLIUwASyJsAEsjnABLJIwASyVsAEsmbABLJ1wASygsAEsoTABLKlwASyrsAEsrjABLLAwASyz8AEstrABLLlwASzDMAEsxbABLMowASzOMAEs0nABLNbwASza8AEs3XABLOFwASzi8AEs5LABLOcwASzrcAEs7nABLPRwASz38AEs+3ABLQEwAS0F8AEtC7ABLRDwAS0X8AEtITABLSbwAS0rsAEtL7ABLTLwAS04cAEtO3ABLUFwAS1HcAEtT/ABLVUwAS1a8AEtYLABLWjwAS1tMAEtdXABLXvwAS2AMAEthXABLY9wAS2TcAEtmTABLZ4wAS2k8AEtqLABLa2wAS23sAEtvHABLcDwAS3EMAEtxfABLcgwAS3M8AEt0LABLdbwAS3esAEt4fABLeYwAS3psAEt7XABLfGwAS30cAEt+/ABLgFwAS4C8AEuCTABLgwwAS4QcAEuE7ABLhmwAS4dcAEuIrABLikwAS4vsAEuPTABLkRwAS5SMAEuVjABLmLwAS5ocAEuc7ABLndwAS57cAEuf/ABLoRwAS6I8AEujDABLpJwAS6U8AEulrABLpqwAS6gMAEuo/ABLqmwAS6sMAEur3ABLrGwAS618AEuuTABLrxwAS6/cAEuwnABLsYwAS7JMAEuznABLtOwAS7YsAEu3nABLuPwAS7ncAEu6rABLu+wAS708AEu/HABLv9wAS8CMAEvBHABLwtwAS8PcAEvEzABLxZwAS8acAEvH7ABLyOwAS8k8AEvKDABLy6wAS8xsAEvNbABLzewAS878AEvQDABL0cwAS9KsAEvTPABL1CwAS9WsAEvWvABL2CwAS9k8AEvZ7ABL2zwAS9xMAEvdXABL3vwAS+BcAEviXABL42wAS+QMAEvk7ABL5mwAS+fMAEvpLABL6iwAS+r8AEvsfABL7bwAS+68AEvvzABL8OwAS/IsAEvzvABL9cwAS/asAEv3vABL+dwAS/tMAEv+LABL/ywATAA8AEwArABMAdwATAH8AEwCXABMAzwATAUcAEwF3ABMBywATAiMAEwJnABMCvwATA2MAEwQLABMEOwATBGsAEwS7ABMFIwATBYcAEwYLABMGXwATBqcAEwb7ABMHVwATB48AEwfHABMH+wATCEcAEwiXABMI8wATCVcAEwmbABMJ6wATChMAEwpXABMKowATCvcAEws7ABMLgwATC8sAEwvrABMMDwATDD8AEwxjABMMgwATDLcAEwzrABMNCwATDSsAEw1XABMNgwATDb8AEw37ABMOMwATDmsAEw7PABMPCwATD18AEw+HABMQDwATEEMAExCfABMQ9wATESsAExFjABMRnwATEecAExIbABMSUwATEmsAExJ/ABMStwATEvcAExMfABMTNwATE1sAExNzABMTfwATE58AExOzABMT3wATFCMAExRHABMUewATFLMAExTzABMVMwATFXsAExWfABMV3wATFicAExY7ABMWUwATFocAExbLABMXGwATF2cAExd/ABMX2wATGBMAExifABMZMwATGWsAExmnABMZ+wATGoMAExsDABMbKwATG7sAExwbABMcQwATHG8AExyPABMcrwATHM8AExz7ABMdJwATHU8AEx17ABMduwATHecAEx4fABMeSwATHm8AEx6fABMe0wATHwcAEx9HABMffwATH6MAEx/TABMgFwATIEsAEyBzABMgswATIPMAEyE7ABMhmwATIfsAEyJbABMinwATIt8AEyNHABMjpwATI8MAEyQXABMkTwATJIsAEySvABMk5wATJScAEyVbABMljwATJcsAEyYHABMmOwATJmcAEybDABMnDwATJy8AEyd/ABMnzwATJ+8AEygnABMoXwATKJsAEyjHABMpBwATKUsAEymDABMptwATKgcAEypbABMqpwATKvMAEys/ABMrdwATK58AEyvvABMsUwATLK8AEyzbABMtCwATLVMAEy2XABMtywATLisAEy5fABMukwATLscAEy8PABMvIwATL18AEy+bABMv8wATMAsAEzBXABMwhwATMMcAEzEXABMxQwATMVsAEzGXABMx2wATMhsAEzJ/ABMywwATMvMAEzMLABMzVwATM4MAEzOjABMz9wATNDMAEzRbABM0fwATNMsAEzUDABM1YwATNacAEzXrABM2TwATNosAEzbHABM3HwATN18AEzePABM3vwATOBMAEzhnABM4iwATOMMAEzj/ABM5GwATOT8AEzlnABM5gwATObMAEzoHABM6SwATOosAEzq3ABM6/wATO1sAEzubABM78wATPDMAEzxzABM8rwATPNcAEzz7ABM9OwATPVsAEz2PABM92wATPhsAEz5bABM+cwATPrcAEz7PABM/OwATP3MAEz+LABM/twATP98AE0ALABNAPwATQFcAE0BnABNAiwATQMsAE0DjABNBCwATQS8AE0FHABNBWwATQXMAE0GTABNBwwATQecAE0IXABNCTwATQpsAE0K7ABNC4wATQysAE0NTABNDawATQ3cAE0ObABND8wATRBcAE0RHABNEmwATRMcAE0TjABNFEwATRWcAE0V/ABNFrwATRdMAE0X/ABNGQwATRpMAE0a/ABNG1wATRu8AE0cXABNHKwATR3MAE0ejABNHxwATR+MAE0grABNIdwATSMsAE0kjABNJcwATSaMAE0nfABNKIwATSmcAE0qzABNK7wATSy8AE0tvABNLqwATS+sAE0wbABNMXwATTJ8AE0z3ABNNKwATTXcAE02zABNOBwATTk8AE06vABNO+wATT1MAE0+LABNPtwATUBMAE1BjABNQywATUTcAE1GjABNSIwATUpcAE1LrABNTMwATU38AE1OvABNUDwATVG8AE1SvABNU8wATVVMAE1WrABNV8wATVmcAE1avABNW9wATVzMAE1dTABNXawATV48AE1ezABNXywATWAMAE1hLABNYawATWJsAE1i7ABNY7wATWSMAE1lfABNZkwATWbcAE1njABNaCwATWisAE1pbABNahwATWq8AE1rbABNbBwATWy8AE1tnABNbiwATW6sAE1vLABNcMwATXGsAE1yTABNc1wATXQ8AE11PABNdkwATXdMAE14LABNePwATXnsAE16zABNfBwATXzsAE19nABNfnwATX7cAE1/fABNgSwATYG8AE2CjABNg7wATYPcAE2ErABNhRwATYXsAE2GbABNh2wATYiMAE2JDABNiewATYpMAE2K3ABNi3wATYxMAE2M/ABNjbwATY4sAE2OzABNj/wATZDcAE2RHABNkbwATZIMAE2TDABNk2wATZQsAE2U7ABNlYwATZacAE2XzABNmHwATZk8AE2aDABNmywATZvMAE2cfABNnTwATZ2sAE2eXABNn2wATZ/sAE2gbABNoQwATaHMAE2iPABNowwATaQcAE2lHABNpbwATaaMAE2nbABNqBwATajsAE2qPABNqwwATawsAE2tvABNriwATa9cAE2wPABNsXwATbN8AE20rABNtpwATbfcAE24bABNumwATbusAE28TABNvkwATb7sAE2/vABNwJwATcGMAE3CTABNwqwATcOMAE3E7ABNxnwATce8AE3JDABNycwATcpcAE3LjABNzMwATc1cAE3OfABNzywATdA8AE3QnABN0SwATdI8AE3S3ABN04wATdSMAE3VHABN1XwATdXsAE3WLABN1owATdcMAE3XXABN17wATdgsAE3YrABN2UwATdpMAE3bDABN25wATdwsAE3crABN3VwATd4cAE3e3ABN36wATeCcAE3hDABN4ZwATeK8AE3jnABN47wATeSMAE3lnABN5dwATeZMAE3m3ABN52wATeh8AE3pHABN6YwATepcAE3rXABN7BwATey8AE3tbABN7cwATe48AE3urABN72wATe/cAE3wHABN8IwATfDcAE3xLABN8WwATfG8AE3yLABN8owATfP8AE30XABN9OwATfV8AE31vABN9lwATfbsAE33bABN9+wATfjsAE35HABN+hwATfqsAE37PABN++wATf0sAE39/ABN/qwATf88AE3/zABOACwATgB8AE4AzABOASwATgGcAE4B/ABOAjwATgLsAE4DTABOBDwATgUcAE4FvABOBgwATgZMAE4HvABOCBwATghsAE4JnABOChwATgrMAE4LbABOC+wATgwsAE4M3ABODlwATg7sAE4QDABOEIwAThFcAE4RrABOEkwAThK8AE4TvABOFLwAThUcAE4VfABOFdwAThZsAE4W3ABOGMwAThk8AE4Z/ABOGxwAThwMAE4eDABOH+wATiEcAE4jDABOI7wATiR8AE4lPABOJrwATieMAE4oTABOKQwATilsAE4qzABOK6wATixsAE4tXABOLqwATi7cAE4vbABOMEwATjEsAE4yDABOMtwATjM8AE4z3ABONFwATjUMAE423ABON2wATjgMAE44/ABOOewATjosAE47PABOO9wATjyMAE49fABOPhwATj68AE4/TABOP9wATkE8AE5CXABOQ6wATkRcAE5FDABORbwATkcMAE5HfABOSGwATkk8AE5KLABOS1wATkyMAE5OHABOT0wATlB8AE5SPABOUywATlQsAE5UzABOVVwATlX8AE5WXABOVuwATldcAE5X/ABOWHwATll8AE5aTABOWxwATlu8AE5cTABOXUwATl3cAE5fHABOX6wATmBsAE5hDABOYhwATmNsAE5kzABOZowATmfcAE5orABOaVwATmocAE5rDABObBwATm0sAE5u/ABOb9wATnE8AE5yvABOdEwATnTMAE52rABOd3wATnlMAE56zABOe2wATny8AE59XABOfdwATn6MAE5/zABOgGwAToEMAE6CPABOgswAToNcAE6EvABOhfwATobMAE6IPABOiTwAToqMAE6LPABOjAwATo1sAE6OzABOkLwATpKsAE6TLABOk6wATpTcAE6VXABOluwATpgsAE6Y7ABOmVwATpqcAE6azABOm1wATpvsAE6cbABOnbwATp5MAE6e3ABOn2wATqBMAE6hHABOogwATqL8AE6jjABOpCwATqVsAE6mzABOp1wATqgcAE6ovABOqUwATqn8AE6q/ABOq0wATqwMAE6sbABOrMwATq0MAE6tfABOrewATq8cAE6vbABOsCwATrEcAE6x7ABOswwATrPsAE61bABOtiwATrfsAE64nABOuhwATrrsAE67nABOu+wATrzcAE69zABOvywATsA8AE7BXABOwvwATsQ8AE7FPABOxswATsdcAE7IbABOySwATsnsAE7KzABOy4wATswsAE7NjABOzmwATs+cAE7RrABO0mwATtRcAE7VXABO1lwATtdsAE7Y3ABO2kwATttsAE7crABO3ewATt8cAE7gjABO4awATuK8AE7jzABO5TwATuYcAE7nXABO6MwATuo8AE7r/ABO7RwATu5MAE7vHABO8AwATvD8AE7yDABO8swATvS8AE72nABO+HwATvkMAE76zABO+7wATvzcAE79/ABO/4wATwCsAE8B7ABPAnwATwQMAE8E7ABPBXwATwa8AE8HTABPCOwATwnMAE8LjABPDJwATw2sAE8OTABPDswATw+8AE8QbABPELwATxIMAE8TnABPFNwATxU8AE8VTABPFrwATxfcAE8ZLABPGkwATxusAE8cXABPHUwATx8cAE8hHABPIxwATySsAE8mTABPJ8wATymcAE8rfABPLPwATy68AE8wLABPMawATzMsAE81PABPNfwATzdcAE84rABPOVwATztsAE89XABPPpwAT0A8AE9BLABPQhwAT0LcAE9EjABPRgwAT0dMAE9HrABPSSwAT0msAE9LLABPTDwAT0z8AE9N3ABPTrwAT1CcAE9SjABPU4wAT1SMAE9WfABPWHwAT1nsAE9bXABPXMwAT108AE9efABPYDwAT2FMAE9h/ABPY0wAT2RcAE9kzABPZdwAT2dsAE9pDABPaVwAT2qcAE9rvABPbBwAT20MAE9t3ABPbjwAT26sAE9vbABPcJwAT3H8AE9zDABPc5wAT3RcAE91vABPdwwAT3jsAE95bABPe5wAT3wsAE9+fABPfywAT4DsAE+BPABPgkwAT4NMAE+ErABPhiwAT4csAE+IDABPiQwAT4oMAE+LLABPi8wAT4xcAE+N/ABPjxwAT5C8AE+SXABPkywAT5QcAE+WjABPlywAT5icAE+ZjABPmqwAT5v8AE+dXABPniwAT56cAE+frABPoOwAT6JMAE+jXABPpKwAT6dMAE+ofABPqcwAT6vMAE+tDABPrmwAT7GMAE+zzABPtNwAT7WMAE+2zABPtvwAT7d8AE+4DABPuOwAT7pMAE+8DABPvLwAT77MAE+/nABPwXwAT8LsAE/DzABPxJwAT8UcAE/GPABPx1wAT8jMAE/KLABPy4wAT80cAE/O3ABP0JwAT9KcAE/TLABP1EwAT9V8AE/X3ABP2awAT9osAE/arABP22wAT9wcAE/crABP3XwAT96cAE/fXABP4AwAT+CcAE/hbABP4fwAT+N8AE/kXABP5UwAT+XcAE/mvABP53wAT+jcAE/qTABP6ywAT+v8AE/s7ABP7ewAT+68AE/vzABP8JwAT/F8AE/ybABP8wwAT/QMAE/1DABP9VwAT/ZsAE/2zABP9twAT/gMAE/4rABP+nwAT/vcAE/9bABP/zwAUADsAFADrABQBcwAUAfsAFAKDABQC9wAUA3cAFAPzABQEYwAUBOMAFAVLABQF9wAUBmMAFAbLABQHMwAUB58AFAgTABQIywAUCVsAFAnPABQKOwAUCqsAFAs/ABQL6wAUDIMAFAz3ABQNhwAUDZ8AFA2vABQOAwAUDi8AFA5bABQOfwAUDpMAFA63ABQPBwAUDxcAFA8jABQPfwAUD7MAFA/DABQP1wAUEA8AFBBfABQQmwAUEM8AFBD/ABQRUwAUEW8AFBILABQSzwAUE0MAFBNrABQTlwAUFAMAFBQvABQUhwAUFKsAFBTXABQVKwAUFUsAFBVzABQV0wAUFf8AFBYzABQWkwAUFr8AFBbzABQXSwAUF28AFBeHABQX3wAUGAcAFBgrABQYTwAUGFcAFBirABQYywAUGO8AFBlDABQZYwAUGYcAFBmvABQZtwAUGfMAFBpnABQapwAUGusAFBsfABQbVwAUG4cAFBvTABQcHwAUHHcAFB0LABQdVwAUHaMAFB3TABQeFwAUHjcAFB6PABQeswAUHtsAFB9PABQfjwAUH/MAFCBTABQgfwAUIK8AFCEHABQhgwAUIasAFCH7ABQiFwAUIjsAFCJ3ABQinwAUItMAFCMTABQjMwAUI48AFCPHABQj+wAUJDsAFCS3ABQk/wAUJVcAFCWXABQl/wAUJkMAFCajABQm2wAUJy8AFCeTABQoCwAUKH8AFCjXABQpLwAUKYMAFCnbABQqMwAUKo8AFCrnABQrPwAUK5cAFCvvABQsSwAULJ8AFCzzABQtTwAULasAFC4DABQuawAULssAFC9zABQvtwAUL+cAFC/3ABQwEwAUMDcAFDBfABQwjwAUMK8AFDDjABQxBwAUMRsAFDFPABQxhwAUMhsAFDKHABQyvwAUMvsAFDNXABQzqwAUM9MAFDP3ABQ0JwAUNJ8AFDTjABQ1QwAUNbcAFDXTABQ18wAUNksAFDZjABQ2fwAUNrcAFDbbABQ3AwAUNyMAFDdHABQ3swAUN+8AFDgzABQ4hwAUON8AFDkHA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BVl1wAVZlsAFWabABVnCwAVZ18AFWevABVn8wAVaCcAFWhfABVo0wAVaPsAFWk7ABVpZwAVac8AFWoPABVqbwAVaocAFWrbABVrXwAVa3MAFWu/ABVsBwAVbDMAFWxvABVsywAVbTMAFW1bABVtnwAVbesAFW5LABVujwAVbuMAFW8fABVvbwAVb+cAFXArABVwUwAVcIcAFXCjABVw/wAVcSsAFXF3ABVx1wAVchsAFXJXABVykwAVcqcAFXLXABVzKwAVc2cAFXOTABVzywAVdAsAFXQ/ABV0kwAVdL8AFXUXABV1bwAVdbsAFXXjABV2QwAVdpMAFXb/ABV3RwAVd48AFXerABV4FwAVeFcAFXiXABV4wwAVeT8AFXm3ABV6DwAVejMAFXpfABV6hwAVeqsAFXrXABV69wAVev8AFXtHABV7mwAVe8sAFXv/ABV8TwAVfLsAFXzPABV9MwAVfXsAFX2nABV+IwAVfpcAFX7bABV/TwAVf3sAFX/DABWALwAVgHMAFYDbABWBBwAVgWMAFYGjABWB5wAVgjcAFYJfABWCtwAVgxcAFYNnABWDywAVhBsAFYSbABWFYwAVhacAFYYTABWGSwAVhoMAFYbjABWHHwAVh3MAFYg/ABWIZwAViLcAFYjfABWJcwAVibMAFYn3ABWKSwAVipcAFYrrABWLLwAVi38AFYvLABWMIwAVjHMAFYy/ABWNCwAVjZ8AFY5HABWOpwAVjwcAFY8vABWPbwAVj78AFZAjABWQlwAVkQ8AFZFDABWRkwAVkbsAFZIDABWSZwAVkr8AFZLvABWTTwAVk5sAFZPnABWUIwAVlEcAFZRXABWUpwAVlSMAFZWLABWVxwAVlg8AFZZXABWWlwAVltcAFZcjABWXcwAVl7sAFZgLABWYvwAVmRcAFZl/ABWZ/wAVmm8AFZrfABWbXwAVm88AFZvzABWcGwAVnDcAFZxXABWclwAVnMMAFZzrABWdUwAVnYsAFZ3bABWeLwAVnmsAFZ6zABWfPwAVn58AFZ/TABWgNwAVoIcAFaDfABWhNwAVoZcAFaHLABWiIwAVoqcAFaMrABWjXwAVo6MAFaPfABWkHwAVpFsAFaTPABWlDwAVpZ8AFaX/ABWmVwAVpqcAFabfABWnDwAVp2MAFae/ABWn5wAVqAMAFag3ABWoawAVqJMAFajHABWo/wAVqSMAFaljABWpkwAVqcsAFaojABWqYwAVqo8AFarPABWq8wAVqysAFauXABWrzwAVrAMAFaxnABWsxwAVrTMAFa1fABWtiwAVreMAFa5vABWu8wAVryMAFa9PABWvcwAVr38AFa+XABWwBwAVsCMAFbBTABWwWwAVsGMAFbCbABWw2wAVsQMAFbEzABWxkwAVsgMAFbJTABWyewAVst8AFbMLABWzMwAVs38AFbQHABW0KwAVtF8AFbSnABW1LwAVtYsAFbXfABW2EwAVtncAFbanABW3NwAVt6cAFbfHABW3/wAVuGcAFbjDABW5HwAVuX8AFbnjABW6OwAVupsAFbrzABW7TwAVu4sAFbu7ABW78wAVvB8AFbxTABW8xwAVvQsAFb1rABW9kwAVvcMAFb3nABW+CwAVvjcAFb57ABW+vwAVvwsAFb83ABW/hwAVv7cAFcAbABXAYwAVwPcAFcGbABXCHwAVww8AFcOHABXD4wAVxGMAFcTfABXFNwAVxbMAFcYPABXGVwAVxq8AFccnABXHdwAVx38AFcenABXH0wAVyA8AFcgvABXImwAVyRcAFclzABXKOwAVynMAFcqTABXK4wAVyxcAFctHABXLnwAVy/MAFcwLABXMXwAVzHcAFcyjABXM3wAVzS8AFc1XABXNnwAVzasAFc23ABXN3wAVzf8AFc4LABXOLwAVzocAFc6zABXO2wAVzycAFc87ABXPiwAVz58AFc+zABXPzwAVz/cAFdAfABXQXwAV0KMAFdD7ABXRNwAV0VMAFdG3ABXR0wAV0g8AFdJLABXShwAV0uMAFdMvABXTgwAV08sAFdQPABXUbwAV1NcAFdTvABXVCwAV1ScAFdVbABXVjwAV1acAFdXbABXV8wAV1gsAFdZ7ABXWuwAV1s8AFdcHABXXQwAV13cAFdezABXX9wAV2BsAFdg/ABXYZwAV2IcAFdivABXYxwAV2PcAFdkTABXZQwAV2acAFdnXABXaCwAV2i8AFdprABXagwAV2qMAFdrvABXbOwAV20cAFdtnABXbhwAV27cAFdvXABXb5wAV3A8AFdwXABXcRwAV3H8AFdy3ABXc1wAV3P8AFd0vABXdOwAV3UMAFd1bABXdlwAV3b8AFd33ABXeLwAV3msAFd6zABXevwAV3vcAFd8fABXfQwAV33cAFd+HABXflwAV37cAFd/3ABXgQwAV4HsAFeCnABXgrwAV4LcAFeDrABXhCwAV4TMAFeE7ABXhQwAV4WcAFeGbABXhvwAV4fcAFeIbABXiOwAV4ncAFeKnABXi0wAV4v8AFeMPABXjZwAV448AFeO/ABXj0wAV4+sAFePzABXj+wAV5CMAFeRTABXkZwAV5IMAFeS/ABXk+wAV5R8AFeUzABXlVwAV5YcAFeWfABXl0wAV5e8AFeYrABXmRwAV5osAFebXABXnCwAV5zcAFedzABXn1wAV5/sAFegnABXoYwAV6G8AFeh7ABXojwAV6KMAFejPABXo+wAV6SMAFelTABXpZwAV6a8AFen3ABXqHwAV6j8AFerTABXq/wAV6zcAFetfABXrcwAV66cAFevPABXr5wAV6/8AFeyXABXs0wAV7QMAFe0nABXtNwAV7WMAFe2rABXt0wAV7gcAFe4XABXuOwAV7ksAFe6HABXurwAV7scAFe7zABXvJwAV70MAFe9vABXvjwAV778AFe/TABXwDwAV8C8AFfBfABXwjwAV8KsAFfDXABXw+wAV8S8AFfFTABXxcwAV8Z8AFfG7ABXx2wAV8g8AFfIrABXyWwAV8nMAFfKXABXypwAV8rcAFfLHABXy9wAV8wcAFfMbABXzOwAV81sAFfOHABXzlwAV86sAFfPPABX0CwAV9CMAFfRnABX0cwAV9QMAFfUrABX1UwAV9XsAFfWXABX1twAV9dMAFfX7ABX2EwAV9ksAFfZbABX2bwAV9pMAFfa/ABX20wAV9wcAFfdXABX3nwAV99sAFfgjABX4YwAV+Q8AFflLABX5kwAV+dcAFfojABX6swAV+vsAFfsvABX7bwAV+68AFfvnABX8BwAV/E8AFfzrABX9bwAV/Z8AFf3PABX+MwAV/o8AFf6/ABX+9wAV/xsAFf9bABX/hwAV/8MAFgAPABYAXwAWAKMAFgETABYBXwAWAaMAFgHLABYCCwAWAmsAFgKDABYDCwAWA08AFgO3ABYEDwAWBIsAFgTLABYFTwAWBZcAFgXnABYGJwAWBm8AFgafABYG3wAWBwsAFgdPABYHjwAWB9cAFgf3ABYIMwAWCHMAFgi7ABYJIwAWCaMAFgnXABYKLwAWCp8AFgr7ABYLXwAWC7cAFgwTABYMSwAWDI8AFgzXABYNEwAWDU8AFg13ABYNtwAWDeMAFg4vABYOZwAWDqcAFg7rABYPFwAWD1sAFg9zABYPrwAWD9cAFhAjABYQTwAWEIsAFhC/ABYQ+wAWETMAFhFvABYRswAWEhcAFhKTABYSwwAWExcAFhODABYT2wAWFDsAFhSPABYU5wAWFRsAFhVbABYVnwAWFdcAFhYPABYWMwAWFm8AFhaXABYW3wAWFxsAFhdbABYXjwAWF7cAFhf3ABYYJwAWGGsAFhinABYY6wAWGSsAFhmDABYZswAWGhcAFhpzABYa1wAWGzcAFhuvABYb3wAWHDcAFhyHABYcrwAWHQcAFh03ABYdiwAWHfcAFh47ABYeZwAWHqMAFh7XABYfCwAWH0sAFh+HABYf0wAWH+cAFiATABYgQwAWIGcAFiCnABYg3wAWIRcAFiFLABYhgwAWIb8AFiITABYiWwAWInMAFiKDABYirwAWIyMAFiNDABYjgwAWI7cAFiP7ABYklwAWJM8AFiUbABYlPwAWJYMAFiXHABYl/wAWJlMAFibTABYnFwAWJ2sAFiezABYoUwAWKKcAFijzABYpMwAWKZMAFinbABYqLwAWKmsAFiqbABYq/wAWK0MAFiuLABYr2wAWLB8AFixvABYstwAWLOsAFi0TABYtQwAWLX8AFi27ABYt/wAWLjcAFi6vABYu1wAWLw8AFi+PABYv0wAWMCMAFjDHABYxLwAWMXcAFjHjABYyLwAWMocAFjLPABYzFwAWM18AFjPPABYz8wAWNF8AFjTTABY1YwAWNfcAFjZ3ABY23wAWNzcAFjezABY4NwAWOHcAFjifABY46wAWOTMAFjmvABY6GwAWOmMAFjqnABY63wAWOxsAFjtfABY7hwAWO6sAFjvbABY8CwAWPGMAFjy7ABY9DwAWPW8AFj3PABY+JwAWPo8AFj7nABY/OwAWP48AFj+rABY/0wAWQEcAFkCfABZBGwAWQZMAFkIHABZCiwAWQrMAFkM/ABZDswAWRBcAFkRnABZEqwAWROcAFkUXABZFZwAWRg8AFkafABZHuwAWSLsAFkkDABZJNwAWSWcAFkmfABZJ1wAWSgsAFkpTABZKlwAWSs8AFkrvABZLLwAWS4MAFkvnABZMawAWTM8AFk03ABZNhwAWTecAFk47ABZOfwAWTt8AFk9DABZPywAWUD8AFlDTABZRSwAWUasAFlIbABZShwAWUvcAFlN/ABZUCwAWVIsAFlTTABZVHwAWVVsAFlW3ABZV+wAWVjMAFlZfABZWtwAWVvcAFldXABZXmwAWV9sAFlgPABZYWwAWWJsAFli/ABZZCwAWWT8AFllrABZZjwAWWdMAFlorABZanwAWWtMAFlsTABZbNwAWW18AFluLABZb3wAWXFsAFlyfABZc5wAWXS8AFl1PABZdlwAWXgcAFl47ABZenwAWXucAFl9bABZf5wAWYBcAFmA/ABZgiwAWYOMAFmEPABZhWwAWYgsAFmKbABZjLwAWZDcAFmRrABZkqwAWZM8AFmUzABZlcwAWZasAFmXLABZl6wAWZgMAFmYnABZmTwAWZpMAFmbDABZnBwAWZysAFmdDABZnYwAWZ7cAFmf7ABZoLwAWaJsAFmjfABZpJwAWaTcAFmlnABZphwAWadcAFmn3ABZqLwAWalcAFmqXABZq2wAWawcAFmtLABZrkwAWa88AFmwXABZscwAWbJ8AFmy3ABZs3wAWbWsAFm2fABZtwwAWbf8AFm47ABZuYwAWbo8AFm6/ABZu9wAWby8AFm9TABZviwAWb8MAFm/7ABZwPwAWcHcAFnDDABZw+wAWcUMAFnF3ABZxfwAWcacAFnHTABZx/wAWcjsAFnJ3ABZyuwAWcucAFnM/ABZzawAWc4sAFnPXABZ0BwAWdEMAFnRjABZ0lwAWdPMAFnUnABZ1VwAWdcMAFnYfABZ2QwAWdqMAFncDABZ3VwAWd38AFneXABZ3xwAWd9sAFngTABZ4PwAWeGMAFni7ABZ5CwAWeRcAFnljABZ5qwAWebcAFnnnABZ6JwAWem8AFnq/ABZ7CwAWeysAFntPABZ7bwAWe48AFnvvABZ8IwAWfGsAFny/ABZ9EwAWfVsAFn2vABZ+BwAWfj8AFn6TABZ+4wAWfxcAFn8vABZ/dwAWf4cAFn+7ABZ/+wAWgEMAFoBrABaAkwAWgL8AFoDvABaBYwAWgaMAFoInABaCRwAWgpMAFoLPABaDPwAWg4sAFoPnABaEGwAWhIMAFoS/ABaE5wAWhR8AFoWDABaFrwAWhdcAFoXvABaGCwAWhicAFoZfABaGvwAWhwMAFocvABaHSwAWh48AFoe7ABaH9wAWiCcAFoh3ABaIywAWiQsAFok3ABaJgwAWicMAFooPABaKJwAWikMAFopvABaKgwAWissAFosTABaLmwAWjB8AFoyvABaNAwAWjSsAFo1vABaNvwAWjicAFo5rABaOgwAWjsMAFo8DABaPNwAWj28AFo+XABaPtwAWj+cAFpAzABaQPwAWkF8AFpCDABaQjwAWkJsAFpDHABaRAwAWkUcAFpF7ABaRvwAWkgcAFpJTABaSfwAWkq8AFpLrABaTNwAWk4sAFpO/ABaUAwAWlDcAFpR3ABaUlwAWlMcAFpTPABaVDwAWlTcAFpVXABaVewAWlasAFpXbABaWKwAWlncAFpaXABaW0wAWl0cAFpePABaX8wAWmFMAFpiHABaY2wAWmPsAFplHABaZlwAWme8AFpobABaaWwAWmrcAFpr3ABabIwAWm2MAFpubABab8wAWnFcAFpy/ABadCwAWnTcAFp1XABadhwAWnb8AFp33ABaeDwAWnlMAFp5rABaejwAWnsMAFp7PABae/wAWnzsAFp9rABafqwAWn/sAFqATABagawAWoNcAFqEzABahnwAWoi8AFqKfABajIwAWo4sAFqOnABajwwAWpAcAFqRrABakwwAWpQMAFqUjABalawAWpacAFqXXABamEwAWpl8AFqavABam5wAWpxcAFqdHABancwAWp+cAFqg3ABaonwAWqRMAFql3ABapwwAWqgsAFqovABaqUwAWqlsAFqpjABaqzwAWqzMAFqs/ABarSwAWq28AFquTABarpwAWq7sAFqwTABasKwAWrEMAFqxbABascwAWrIsAFqyjABas5wAWrTMAFq1rABatjwAWrbcAFq4TABauZwAWrq8AFq7/ABavIwAWr0sAFq9/ABavqwAWsAMAFrA7ABawawAWsJ8AFrD7ABaxUwAWsY8AFrG/ABax6wAWshcAFrKXABayswAWstcAFrMnABazYwAWs58AFrPLABaz+wAWtDMAFrRrABa0mwAWtL8AFrTfABa1CwAWtWcAFrWXABa14wAWth8AFrZXABa2ewAWtq8AFrbbABa3PwAWt3sAFrfLABa4GwAWuFsAFrjDABa4/wAWuRsAFrljABa5ywAWudsAFroTABa6UwAWum8AFrqrABa64wAWuz8AFruPABa70wAWvBMAFrxbABa8gwAWvJsAFry7ABa80wAWvOsAFr0PABa9awAWvY8AFr2zABa+BwAWvisAFr5LABa+cwAWvpcAFr7fABa/AwAWv0sAFr9fABa/ewAWv5MAFr+jABa/uwAWv98AFsAHABbAPwAWwGsAFsCLABbAmwAWwNsAFsDzABbBGwAWwUcAFsFfABbBkwAWwc8AFsH7ABbCGwAWwksAFsJzABbCpwAWwsMAFsLvABbDFwAWw0MAFsNzABbDjwAWw8sAFsQHABbEbwAWxJMAFsSrABbE1wAWxP8AFsUrABbFVwAWxYMAFsWbABbFxwAWxd8AFsYHABbGLwAWxlcAFsaPABbGqwAWxs8AFsbrABbHAwAWxxcAFsdXABbHZwAWx3cAFseHABbHlwAWx8sAFsf/ABbILwAWyEsAFsijABbI1wAWySsAFsk7ABbJTwAWyWsAFsmzABbJ4wAWyksAFsqLABbKuwAWyssAFsrrABbLCwAWyyMAFss7ABbLYwAWy48AFsujABbLuwAWy/MAFswnABbMcwAWzJMAFsyzABbM2wAWzPMAFs0TABbNRwAWzXsAFs2bABbNxwAWzfsAFs4jABbOXwAWzpMAFs6zABbO6wAWzysAFs+DABbPnwAWz9cAFs/3ABbQEwAW0C8AFtBjABbQiwAW0KcAFtDDABbQ8wAW0RcAFtE/ABbRWwAW0XMAFtGfABbRywAW0fMAFtIfABbSQwAW0oMAFtKfABbSuwAW0tsAFtL7ABbTGwAW0zsAFtNbABbTjwAW07cAFtPjABbUEwAW1EsAFtSHABbUtwAW1M8AFtUHABbVMwAW1XcAFtWrABbV1wAW1gcAFtYvABbWUwAW1n8AFtavABbW9wAW1ysAFtdnABbXlwAW168AFtfbABbX7wAW2BcAFtgvABbYQwAW2HcAFtiTABbYqwAW2MMAFtjTABbY6wAW2SMAFtlXABbZtwAW2ecAFtobABbaNwAW2m8AFtqLABbavwAW2t8AFtsfABbbTwAW238AFtvDABbb5wAW3AMAFtwXABbcWwAW3IcAFtyXABbcqwAW3McAFtz/ABbdLwAW3VsAFt1zABbdkwAW3bMAFt3TABbd+wAW3h8AFt4/ABbeVwAW3qsAFt6/ABbe9wAW3w8AFt8nABbfOwAW318AFt9/ABbftwAW38cAFt/nABbgAwAW4BsAFuBTABbghwAW4L8AFuDrABbhHwAW4S8AFuFPABbhWwAW4YMAFuGnABbhywAW4fMAFuJXABbiWwAW4l8AFuJjABbiZwAW4msAFuJvABbicwAW4ncAFuJ7ABbifwAW4vMAFuM3ABbjYwAW46MAFuO3ABbj4wAW4/sAFuQvABbkYwAW5IcAFuTTABblDwAW5VsAFuWXABbl3wAW5hcAFuabABbnDwAW51MAFudnABbnnwAW5+cAFugTABboTwAW6J8AFujvABbpPwAW6XsAFunDABbqKwAW6ncAFuqvABbq2wAW6wcAFutbABbrlwAW68sAFuwXABbskwAW7O8AFu1DABbtbwAW7ZsAFu3jABbuGwAW7msAFu63ABbu9wAW7y8AFu93ABbvswAW8AsAFvA7ABbwewAW8LMAFvD/ABbxRwAW8W8AFvG7ABbx1wAW8gsAFvIjABbyUwAW8n8AFvKnABbyzwAW8zsAFvOvABbz2wAW9CsAFvRrABb0rwAW9OMAFvUPABb1YwAW9asAFvYLABb2HwAW9pMAFvbDABb3DwAW9zsAFvdvABb3nwAW978AFvf/ABb4LwAW+FsAFvizABb5KwAW+YMAFvnPABb53wAW+ksAFvrHABb7JwAW+z8AFvuPABb7twAW/A8AFvwvABb8cwAW/L8AFvz/ABb9PwAW/YcAFv3bABb+JwAW/o8AFv73ABb/awAW/9sAFwAfABcAgwAXAMcAFwEjABcBrwAXAfsAFwJHABcCdwAXAs8AFwM7ABcDXwAXA5MAFwO/ABcEGwAXBFcAFwSXABcE0wAXBT8AFwVbABcFkwAXBd8AFwX7ABcGRwAXBpsAFwbnABcHAwAXBysAFweDABcH4wAXCD8AFwhzABcIiwAXCLcAFwj/ABcJNwAXCaMAFwn/ABcKSwAXCpsAFwq7ABcLIwAXCzcAFwuzABcL0wAXDBMAFwwjABcMVwAXDNMAFwzXABcNEwAXDYsAFw3PABcN7wAXDm8AFw7LABcO+wAXDzcAFw9jABcPrwAXD9sAFxAbABcQWwAXEGcAFxB3ABcQjwAXELMAFxDDABcQ0wAXEOMAFxD3ABcRBwAXERcAFxEnABcROwAXEUcAFxFTABcRYwAXEXMAFxF/ABcRmwAXEisAFxI7ABcSjwAXEsMAFxMDABcTSwAXE2cAFxN/ABcTowAXE7sAFxPbABcUAwAXFAsAFxQrABcURwAXFT8AFxVbABcVjwAXFa8AFxXLABcWDwAXFjsAFxaXABcWqwAXFt8AFxcHABcXIwAXF08AFxdzABcYUwAXGKMAFxlvABcaJwAXGkcAFxpzABcalwAXGqcAFxrHABca5wAXGysAFxt/ABcbqwAXG+cAFxwPABccOwAXHG8AFxyXABccywAXHPsAFx0jABcdMwAXHUMAFx2DABcdlwAXHcsAFx3vABceLwAXHl8AFx67ABcfAwAXHzsAFx9zABcfrwAXH7sAFx/HABcgCwAXIDMAFyCLABcgzwAXINsAFyEjABchTwAXIWsAFyG3ABciFwAXIk8AFyKnABci6wAXIvMAFyNXABcjowAXI+8AFyRLABckpwAXJPsAFyVTABclqwAXJgMAFyZbABcmswAXJwsAFydrABcnvwAXKEsAFyjfABcpYwAXKdMAFypbABcqywAXKysAFytzABcrxwAXK+8AFyxbABcslwAXLT8AFy2vABcuSwAXLq8AFy9LABcvrwAXMGsAFzDvABcxqwAXMi8AFzLfABczVwAXM7MAFzPfABc0cwAXNK8AFzUzABc1qwAXNisAFzazABc3MwAXN4cAFzfjABc4MwAXOIMAFzjfABc5NwAXOa8AFznTABc6HwAXOlMAFzrbABc65wAXOxsAFztrABc7lwAXO8MAFzvnABc77wAXO/cAFzv/ABc8BwAXPA8AFzwXABc8HwAXPCcAFzwvABc8NwAXPD8AFzxHABc8TwAXPFcAFzxfABc8ZwAXPG8AFzx3ABc8fwAXPIcAFzyPABc8mwAXPKcAFzyzABc8vwAXPMsAFzzXABc84wAXPO8AFzz7ABc9BwAXPRMAFz0fABc9KwAXPTcAFz1DABc9TwAXPVsAFz1nABc9cwAXPX8AFz2LABc9lwAXPaMAFz2vABc9uwAXPccAFz3TABc93wAXPesAFz33ABc+AwAXPg8AFz4fABc+LwAXPj8AFz5PABc+XwAXPm8AFz5/ABc+jwAXPp8AFz6vABc+vwAXPs8AFz7fABc+7wAXPv8AFz8PABc/HwAXPy8AFz8/ABc/TwAXP18AFz9vABc/fwAXP48AFz+fABc/rwAXP78AFz/PABc/3wAXP+8AFz//ABdADwAXQB8AF0AvABdAPwAXQE8AF0BfABdAbwAXQH8AF0CPABdAnwAXQK8AF0C/ABdAzwAXQN8AF0DvABdA/wAXQQ8AF0EfABdBLwAXQT8AF0GDABdBqwAXQe8AF0ITABdCLwAXQq8AF0MHABdDEwAXQzMAF0NTABdDawAXQ58AF0PDABdEGwAXRDcAF0RXABdEpwAXRV8AF0abABdGqwAXRrsAF0bjABdHEwAXR18AF0ePABdHkwAXR78AF0fvABdICwAXSDMAF0iHABdIkwAXSLsAF0kDABdJIwAXSVsAF0mHABdJpwAXSj8AF0tHABdLnwAXS/MAF01/ABdNqwAXTfcAF05TABdOtwAXTtsAF08nABdPSwAXT4MAF0/fABdP8wAXT/8AF1AbABdQQwAXUFcAF1CPABdQtwAXUPsAF1EzABdRXwAXUXsAF1GzABdSOwAXUssAF1MLABdTNwAXU08AF1OHABdTmwAXU88AF1PXABdUIwAXVEMAF1SDABdUqwAXVNcAF1VDABdVbwAXVaMAF1XzABdWPwAXVp8AF1bjABdXLwAXV5sAF1gbABdYQwAXWFcAF1jbABdZFwAXWYcAF1nfABdaNwAXWosAF1rrABdbPwAXW28AF1uPABdbzwAXXAcAF1w7ABdcbwAXXJcAF1y/ABdc4wAXXRMAF10rABddVwAXXXsAF12jABdeBwAXXi8AF143ABdepwAXXt8AF187ABdfYwAXX4sAF1+zABdf3wAXX/8AF2AbABdgbwAXYLsAF2DPABdg2wAXYPsAF2E/ABdhUwAXYYsAF2GfABdhqwAXYccAF2HzABdiQwAXYnMAF2KDABdiuwAXYvcAF2MrABdjbwAXY68AF2O/ABdj+wAXZC8AF2RjABdkhwAXZLcAF2TvABdlFwAXZUcAF2WDABdlpwAXZdMAF2YPABdmNwAXZm8AF2aPABdmswAXZvcAF2c7ABdnfwAXZ6cAF2fLABdoAwAXaCcAF2hjABdoiwAXaK8AF2j3ABdpCwAXaSMAF2lPABdpYwAXaX8AF2mbABdptwAXac8AF2nbABdqBwAXancAF2qzABdqxwAXaxcAF2tLABdrgwAXa6cAF2vLABdsEwAXbIcAF2yvABdtLwAXbWcAF24XABduRwAXbqsAF27DABdu4wAXbycAF29TABdvwwAXb+cAF3BPABdwzwAXcRMAF3GjABdyAwAXco8AF3MTABdzMwAXc1sAF3PfABd0BwAXdBsAF3SHABd0owAXdVMAF3WPABd15wAXdg8AF3ZLABd2bwAXds8AF3cXABd3XwAXd3sAF3enABd3xwAXeB8AF3h7ABd4xwAXeQsAF3lHABd5iwAXegMAF3pLABd6nwAXevMAF3tXABd7cwAXfAMAF3w7ABd8pwAXfNsAF30rABd9cwAXfc8AF343ABd+uwAXfwMAF3+HABd/1wAXgEcAF4C3ABeBJwAXgZcAF4H/ABeCSwAXgo8AF4LvABeDXwAXg8sAF4RHABeEzwAXhT8AF4WLABeFuwAXhfcAF4Y/ABeGowAXhssAF4cvABeHXwAXh68AF4f/ABeITwAXiJ8AF4jnABeJEwAXiVMAF4mjABeJ7wAXiksAF4qzABeK5wAXix8AF4tPABeLcwAXi6cAF4vfABeMFwAXjFMAF4yLABeMuwAXjR8AF407ABeNnwAXjbsAF44jABeOQwAXjpMAF467ABeO4wAXjzMAF4+HABeQDwAXkEcAF5CXABeQ5wAXkP8AF5ErABeRYwAXkg8AF5IjABeSVwAXkosAF5MPABeTJwAXkzsAF5NTABeTjwAXk8cAF5QDABeUJwAXlGcAF5SXABeU3wAXlScAF5VDABeVcwAXlZ8AF5XnABeWRwAXlnsAF5abABeWzwAXlvcAF5cfABeXRwAXl5MAF5e7ABeYFwAXmNsAF5kbABeZawAXmX8AF5mPABeZvwAXmhcAF5prABearwAXmvsAF5tLABecFwAXnEsAF5yrABeczwAXnTcAF52rABedzwAXnhsAF56vABefIwAXn0sAF5+bABef3wAXoAsAF6BfABegzwAXoZcAF6G3ABeh/wAXojMAF6J7ABeiswAXovsAF6MrABejgwAXo+8AF6QbABekdwAXpW8AF6XDABemtwAXpwMAF6czABeniwAXp/sAF6hDABeoZwAXqLMAF6jXABepIwAXqWcAF6njABeqPwAXqx8AF6t3ABesJwAXrLsAF60TABetawAXrf8AF64jABeubwAXrtsAF68fABevPwAXr88AF6/vABewGwAXsFMAF7CfABew1wAXsP8AF7EfABexOwAXsWMAF7GzABex/wAXsjMAF7JvABeykwAXsscAF7MzABezUwAXs18AF7NrABezgwAXs5MAF7OnABezvwAXs9sAF7PvABe0BwAXtBcAF7Q3ABe0TwAXtGcAF7SfABe0zwAXtPMAF7U7ABe1hwAXtccAF7YTABe2bwAXto8AF7a/ABe29wAXtycAF7d3A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BhUawAYVLMAGFTzABhVGwAYVUcAGFWjABhV9wAYVicAGFZPABhWdwAYVpcAGFbHABhW8wAYVxcAGFdbABhXmwAYV9MAGFgfABhYRwAYWLsAGFkvABhZlwAYWgcAGFp3ABha2wAYW1cAGFvLABhcBwAYXDMAGFyrABhdIwAYXY8AGF2nABhd1wAYXgsAGF43ABheVwAYXocAGF67ABhfBwAYX2MAGF/LABhf+wAYYE8AGGB/ABhgvwAYYVMAGGHrABhiOwAYYosAGGLXABhjMwAYY4sAGGPrABhkGwAYZE8AGGSXABhkvwAYZQsAGGVfABhlgwAYZesAGGYnABhmcwAYZsMAGGcHABhnbwAYZ7sAGGffABhoLwAYaHMAGGiXABho5wAYaTMAGGmDABhp1wAYagMAGGojABhqWwAYam8AGGq/ABhq8wAYazcAGGuHABhr4wAYbCsAGGyTABhs1wAYbSsAGG1bABhtmwAYbd8AGG4nABhuSwAYbocAGG7HABhvAwAYbysAGG9zABhvzwAYcBMAGHBjABhwvwAYcSMAGHGLABhyEwAYcjsAGHJ/ABhyzwAYcxcAGHNzABhz4wAYdBcAGHRTABh0rwAYdR8AGHVHABh1ewAYddsAGHYjABh2YwAYdtcAGHcvABh3cwAYd6cAGHfbABh3/wAYeC8AGHhnABh4twAYeRsAGHlfABh5zwAYeicAGHpjABh6fwAYepcAGHr3ABh7OwAYe3cAGHuzABh8CwAYfGMAGHy7ABh9JwAYfWsAGH2zABh9+wAYfkcAGH6XABh+6wAYfzMAGH+LABh/5wAYgAsAGIBDABiAiwAYgLsAGIEPABiBcwAYgb8AGII7ABiCZwAYgssAGIMLABiDVwAYg5sAGIPnABiEMwAYhHcAGIS7ABiE+wAYhTsAGIWbABiFzwAYhfsAGIY/ABiGcwAYhqsAGIbXABiHLwAYh58AGIf3ABiIHwAYiG8AGIifABiI6wAYiT8AGImTABiJywAYifMAGIo3ABiKYwAYiqcAGIrrABiLPwAYi3sAGIvfABiMGwAYjFcAGIyTABiM1wAYjQMAGI1jABiNlwAYjb8AGI3jABiOCwAYjisAGI5XABiOawAYjoMAGI6vABiO0wAYjvsAGI8nABiPYwAYj5sAGI/PABiP9wAYkBsAGJBjABiQmwAYkNMAGJEPABiRXwAYkY8AGJHDABiR9wAYki8AGJJbABiSjwAYkr8AGJMbABiTNwAYk28AGJOXABiTvwAYk/cAGJRDABiUgwAYlKMAGJUTABiVcwAYlaMAGJX/ABiWSwAYlnMAGJbLABiXEwAYl2cAGJd3ABiXjwAYl58AGJe3ABiYCwAYmDcAGJh/ABiYuwAYmQsAGJkzABiZfwAYmaMAGJnDABiZ/wAYmj8AGJpLABiakwAYmvsAGJsjABibTwAYm48AGJu3ABibzwAYnDMAGJxfABiclwAYnPcAGJ0vABidVwAYnXsAGJ2fABidywAYnfMAGJ5nABie2wAYnzMAGJ/PABigdwAYoLcAGKDrABihXwAYocsAGKJjABiinwAYotcAGKM7ABijYwAYo6cAGKPPABij9wAYpCcAGKRjABikowAYpMMAGKVbABilowAYpdMAGKYHABimcwAYppsAGKbTABinJwAYp3sAGKefABin/wAYqGcAGKivABipLwAYqV8AGKm3ABip6wAYqisAGKpPABiqiwAYqtcAGKsHABirZwAYq98AGKwnABisRwAYrGMAGKyLABis0wAYrOsAGK0DABitJwAYrUsAGK1rABitiwAYrcMAGK3/ABiuIwAYrm8AGK63ABiu5wAYrzcAGK9vABivywAYsBMAGLBDABiwmwAYsOcAGLEjABixUwAYsYcAGLHLABix+wAYskcAGLKjABiy7wAYsz8AGLN3ABizswAYtAsAGLRHABi0dwAYtK8AGLTvABi1LwAYtVsAGLV/ABi1twAYte8AGLZXABi22wAYt3sAGLefABi35wAYuBcAGLhjABi47wAYuR8AGLlnABi5pwAYufMAGLpHABi6pwAYuusAGLszABi7iwAYu/MAGLxLABi8pwAYvPcAGL1XABi9cwAYva8AGL3fABi+EwAYvlMAGL6rABi+7wAYvzMAGL9zABi/zwAYwDMAGMCnABjAuwAYwOMAGME/ABjBowAYwhcAGMJTABjCpwAYwv8AGMNfABjDzwAYxAsAGMSfABjE4wAYxT8AGMW7ABjF8wAYxicAGMZ7ABjGywAYxxsAGMdzABjHiwAYx+MAGMhHABjI5wAYyUsAGMmTABjJ1wAYygMAGMpDABjKhwAYyrsAGMrvABjLQwAYy1sAGMurABjLwwAYzBsAGMxPABjMtwAYzN8AGM03ABjNfwAYza8AGM3rABjOOwAYzssAGM+PABjP1wAY0C8AGNBvABjQrwAY0PcAGNEnABjRrwAY0fMAGNKLABjSswAY0tsAGNMXABjTQwAY03sAGNPHABjUDwAY1FsAGNR7ABjUnwAY1MMAGNTzABjVPwAY1WsAGNWfABjV1wAY1h8AGNZfABjWlwAY1tcAGNcPABjXOwAY14MAGNe7ABjX8wAY2AsAGNg/ABjYcwAY2J8AGNjjABjZJwAY2WMAGNl/ABjZlwAY2dcAGNoDABjaKwAY2psAGNrPABjbDwAY2ysAGNu3ABjb6wAY3A8AGNwjABjcLwAY3EcAGNxzABjcwwAY3RcAGN1PABjdiwAY3fsAGN5/ABjejwAY3sMAGN7nABjfAwAY31sAGN9zABjf7wAY4BcAGOBbABjg0wAY4UMAGOGDABjhvwAY4esAGOIjABjipwAY4tMAGOMLABjjJwAY428AGOQfABjkUwAY5HcAGOTTABjlEwAY5U8AGOW/ABjmDwAY5jcAGOZfABjmtwAY5xsAGOdfABjnrwAY6AsAGOhrABjoqwAY6NsAGOkLABjpPwAY6X8AGOmvABjqJwAY6l8AGOqzABjrHwAY668AGOw3ABjsVwAY7IcAGOyzABjs4wAY7P8AGO0rABjtUwAY7X8AGO2rABjuNwAY7psAGO7jABjvEwAY7y8AGO83ABjv2wAY8CMAGPBTABjwfwAY8NcAGPEnABjxhwAY8dMAGPHjABjyBwAY8kMAGPKTABjy0wAY8xcAGPNnABjzlwAY898AGPQ/ABj0nwAY9LMAGPTHABj1BwAY9SMAGPUvABj1twAY9b8AGPYPABj2SwAY9oMAGPbDABj24wAY9xMAGPdbABj3rwAY9/8AGPhvABj4zwAY+dMAGPonABj6QwAY+lsAGPqfABj66wAY+zMAGPtTABj7awAY+5cAGPvHABj8ywAY/R8AGP1fABj9nwAY/ecAGP4vABj+YwAY/pMAGP7PABj+/wAY/zsAGP9zABj/twAY/+8AGQBjABkAtwAZARcAGQFvABkBuwAZAhsAGQJvABkC1wAZAwcAGQNHABkDrwAZA9cAGQQHABkEcwAZBIsAGQTHABkFEwAZBVcAGQWzABkF+wAZBksAGQZzABkGwwAZBv8AGQc/ABkHhwAZB8MAGQfnABkH9wAZCBcAGQg7ABkIWwAZCHMAGQjDABkI8wAZCS8AGQljABkJiwAZCccAGQn3ABkKOwAZClcAGQqLABkKpwAZCrsAGQrjABkLBwAZC0cAGQt7ABkLnwAZC9cAGQvvABkMGwAZDD8AGQx/ABkMuwAZDOMAGQ0fABkNXwAZDXcAGQ2XABkN0wAZDgMAGQ4vABkOVwAZDp8AGQ7HABkO5wAZDxMAGQ9DABkPawAZD4sAGQ/DABkQDwAZEFMAGRCrABkRGwAZEWcAGRHHABkSFwAZEnMAGRLbABkS+wAZEz8AGROLABkTrwAZE8MAGRQDABkUVwAZFJ8AGRWPABkVzwAZFh8AGRZjABkWxwAZFysAGRdLABkXcwAZF68AGRf3ABkYOwAZGPMAGRk/ABkZVwAZGXcAGRmjABkaJwAZGp8AGRsLABkbTwAZG5cAGRvfABkcJwAZHIcAGRz7ABkdXwAZHcsAGR4nABkeewAZHsMAGR8HABkfQwAZH28AGR+LABkf5wAZIAsAGSA7ABkgkwAZIOsAGSE3ABkhgwAZIcMAGSIDABkiQwAZIl8AGSKXABkizwAZIusAGSMHABkjUwAZI4MAGSPDABkkAwAZJEcAGSSbABkk+wAZJV8AGSW7ABkl7wAZJiMAGSarABkm5wAZJwMAGScbABknRwAZJ3MAGSd/ABknowAZJ+MAGSgPABkoQwAZKJsAGSjDABko4wAZKQsAGSkbABkpNwAZKU8AGSlfABkpgwAZKcsAGSnzABkqTwAZKuMAGStXABkrpwAZK+cAGSwrABksWwAZLMcAGS0rABktcwAZLZcAGS4LABkutwAZL1MAGS+zABkv+wAZMBcAGTBPABkwiwAZMMMAGTD/ABkxKwAZMVsAGTGLABkxvwAZMesAGTIbABkynwAZMycAGTOTABk0AwAZNGcAGTTPABk1GwAZNWsAGTWbABk1zwAZNisAGTaLABk2zwAZNxcAGTdjABk3swAZN/MAGTg3ABk4dwAZOLsAGTjrABk5HwAZOXsAGTnLABk56wAZOlsAGTqXABk6/wAZO38AGTvDABk77wAZPA8AGTwzABk8lwAZPOMAGT0nABk9UwAZPY8AGT2zABk+EwAZPlsAGT7HABk/DwAZP0cAGT+PABk/uwAZP+cAGUBLABlAnwAZQR8AGUFXABlBgwAZQaMAGUHbABlCFwAZQmMAGUKfABlC1wAZQysAGUNrABlDxwAZRD8AGURXABlEdwAZRJMAGUSzABlE5wAZRP8AGUUrABlFkwAZRecAGUYzABlGTwAZRo8AGUbPABlG/wAZRzsAGUebABlIHwAZSHsAGUifABlJBwAZSUcAGUmTABlKBwAZSjcAGUpjABlKiwAZSscAGUsfABlLnwAZS+sAGUw7ABlMTwAZTLMAGU0XABlNawAZTcsAGU5TABlOewAZTscAGU8rABlPdwAZT6sAGVCHABlQxwAZURcAGVFLABlRmwAZUe8AGVIzABlSXwAZUp8AGVLvABlTHwAZU1sAGVN3ABlUDwAZVLcAGVUnABlVgwAZVccAGVYTABlWewAZVr8AGVcHABlXMwAZV5MAGVfvABlYTwAZWJsAGVjXABlY9wAZWVcAGVmDABlaCwAZWhsAGVonABlaMwAZWp8AGVq/ABla+wAZWy8AGVtnABlbvwAZW/sAGVwrABlcMwAZXKcAGVyvABlcxwAZXRsAGV0zABldUwAZXXcAGV2XABldwwAZXfMAGV4nABleUwAZXosAGV7LABle4wAZXycAGV9DABlfewAZX98AGWAfABlgcwAZYNcAGWEDABlhdwAZYa8AGWHnABliKwAZYpsAGWLvABljDwAZYzMAGWODABljxwAZY/cAGWR3ABlkuwAZZN8AGWUXABllOwAZZXMAGWWfABllzwAZZfcAGWYTABlmNwAZZpMAGWa/ABlm8wAZZx8AGWdLABlnrwAZZ+8AGWhfABlolwAZaMcAGWkXABlpqwAZahcAGWpLABlqjwAZascAGWsDABlrRwAZa58AGWvDABlsSwAZbOMAGW0jABltQwAZbXMAGW2PABlttwAZbc8AGW4LABluNwAZbrMAGW7XABlvBwAZb1cAGW97ABlvuwAZcCsAGXBjABlwlwAZcMMAGXDvABlxCwAZcSsAGXFTABlxiwAZccMAGXHrABlyEwAZcj8AGXJvABlyowAZcrsAGXLTABly6wAZcw8AGXNPABlzlwAZc7MAGXPnABl0HwAZdGcAGXSXABl0xwAZdQcAGXUnABl1cwAZddMAGXYnABl2VwAZdp8AGXcXABl3hwAZd88AGXg7ABl41wAZeWsAGXm/ABl51wAZefsAGXpLABl6awAZeosAGXqzABl67wAZezMAGXujABl79wAZfEMAGXxzABl86wAZfUcAGX2bABl9vwAZfe8AGX4zABl+UwAZfncAGX6PABl+pwAZfsMAGX7jABl/KwAZf0cAGX9bABl/gwAZf5MAGX/7ABmADwAZgD8AGYBnABmA6wAZgWMAGYGPABmB1wAZgi8AGYJnABmCnwAZguMAGYMrABmDUwAZg5MAGYPTABmD+wAZhEsAGYTfABmFMwAZhYMAGYW/ABmGCwAZhk8AGYbbABmHKwAZh4cAGYfXABmIJwAZiIcAGYi3ABmJCwAZiXMAGYnXABmKDwAZitMAGYuPABmMFwAZjJcAGYzLABmM8wAZjScAGY1XABmNewAZjZsAGY3LABmOEwAZjj8AGY53ABmOkwAZju8AGY8zABmPewAZj6MAGY/XABmQDwAZkGsAGZDXABmRGwAZkTsAGZGDABmRtwAZkd8AGZILABmSMwAZkl8AGZKnABmS/wAZk0cAGZOTABmT3wAZlCcAGZRXABmUqwAZlPMAGZUfABmVbwAZlb8AGZX7ABmWOwAZlmMAGZaTABmW2wAZlwMAGZdfABmXhwAZl8sAGZgHABmYXwAZmKcAGZjvABmZLwAZmU8AGZmLABmZtwAZmgcAGZpbABmaiwAZmtcAGZsHABmbTwAZm5sAGZvbABmcKwAZnFsAGZyTABmcywAZnRcAGZ1rABmdmwAZnc8AGZ33ABmeOwAZnl8AGZ6PABmewwAZnxsAGZ+DABmfswAZoCcAGaBPABmhOwAZohMAGaJDABmiZwAZoosAGaK7ABmi4wAZoycAGaNLABmkNwAZpQsAGaXLABmmEwAZplsAGaafABmmywAZpxsAGadfABmnhwAZp9MAGagjABmobwAZqMcAGajzABmpHwAZqUcAGal7ABmprwAZqecAGaoLABmqTwAZqnMAGarLABmrnwAZq98AGawXABmsawAZrK8AGazrABmtIwAZrUsAGa2XABmt5wAZrhMAGa5bABmuowAZrt8AGa8rABmvXwAZr6cAGbADABmwLwAZsMMAGbFPABmxqwAZscsAGbH/ABmyWwAZspcAGbLjABmzFwAZs2cAGbPLABm0EwAZtFsAGbSrABm02wAZtWsAGbYbABm2vwAZtw8AGbdDABm3qwAZt8sAGbhLABm4lwAZuN8AGbkrABm5ZwAZudsAGboDABm6KwAZul8AGbrLABm7MwAZu2cAGbunABm79wAZvHcAGby7ABm9TwAZvZMAGb3TABm+PwAZvo8AGb6zABm+6wAZvw8AGb+jABnAOwAZwO8AGcEjABnBTwAZwYMAGcG7ABnB6wAZwiMAGcJfABnCtwAZwvcAGcM3ABnDqwAZw9cAGcQDABnEYwAZxK8AGcUfABnFiwAZxdcAGcY7ABnGnwAZxuMAGcc3ABnHnwAZyAsAGchnABnIzwAZyQsAGcmbABnJ5wAZyicAGcpvABnK9wAZy1sAGcu7ABnL4wAZzD8AGcybABnM2wAZzTcAGc2fABnN7wAZzjsAGc7HABnPBwAZzzcAGc9/ABnP7wAZ0AMAGdBnABnQ3wAZ0ScAGdFrABnRowAZ0bcAGdH/ABnSRwAZ0n8AGdK7ABnTEwAZ01cAGdOvABnT3wAZ1BsAGdSDABnUrwAZ1NcAGdT3ABnVCwAZ1VcAGdXzABnWRwAZ1msAGdazABnW6wAZ10cAGdezABnX5wAZ2DcAGdhPABnYqwAZ2QMAGdlXABnZlwAZ2ccAGdn3ABnaLwAZ2nMAGdrTABnbAwAZ2ysAGdtXABnblwAZ298AGdwzABncbwAZ3KMAGdzHABnc8wAZ3ScAGd17ABndwwAZ3d8AGd4LABnegwAZ3rcAGd8LABnfOwAZ32sAGd+7ABnf8wAZ4CMAGeBPABngvwAZ4PMAGeEvABnhXwAZ4acAGeHnABniVwAZ4oMAGeLnABnjDwAZ4z8AGeODABnj0wAZ5AcAGeQ7ABnkfwAZ5KMAGeTTABnk8wAZ5SMAGeVrABnltwAZ5fsAGeabABnmvwAZ5uMAGec/ABnnkwAZ58cAGefnABnoBwAZ6FcAGejDABno7wAZ6ScAGemTABnp4wAZ6ksAGeqfABnqywAZ6zMAGeujABnr6wAZ7BcAGeyvABns8wAZ7UcAGe2TABnuDwAZ7msAGe7XABnvKwAZ73cAGe+zABnv+wAZ8BcAGfBrABnwzwAZ8QMAGfEjABnxuwAZ8gcAGfIvABnybwAZ8wsAGfNDABnzcwAZ9AsAGfSDABn0ywAZ9P8AGfU/ABn1lwAZ9ccAGfZLABn2lwAZ9xcAGfdTABn3mwAZ9+sAGfgnABn4owAZ+NsAGfk/ABn5owAZ+hMAGfpTABn6iwAZ+tMAGfsDABn7HwAZ+0MAGfuDABn7ywAZ/CcAGfxzABn8swAZ/QsAGf03ABn9ewAZ/a8AGf47ABn+dwAZ/sMAGf83ABn/kwAZ//cAGgAfABoAfwAaANsAGgFPABoB0wAaAjcAGgM7ABoDewAaA+cAGgQfABoEWwAaBKMAGgULABoFewAaBacAGgXXABoF+wAaBisAGgZnABoGrwAaBtMAGgcLABoHLwAaB1MAGgePABoHuwAaCAsAGghvABoIxwAaCW8AGgmfABoJ6wAaCksAGgqfABoK3wAaCxsAGgtLABoLtwAaC/8AGgxfABoMrwAaDOMAGg0vABoN6wAaDjsAGg5jABoOowAaDucAGg7vABoPQwAaD08AGg+3ABoP5wAaEC8AGhCbABoQ/wAaEUsAGhFvABoRhwAaEb8AGhHrABoSWwAaEscAGhMbABoTWwAaE4cAGhPHABoT/wAaFCsAGhRTABoUewAaFMsAGhULABoVWwAaFacAGhXTABoV2wAaFfcAGhYvABoWZwAaFvsAGhc/ABoXSwAaF4MAGhfbABoYIwAaGGcAGhiPABoY0wAaGQMAGhlHABoZYwAaGaMAGhofABoaQwAaGpsAGhrbABoa+wAaGycAGhtjABobhwAaG7MAGhvvABocDwAaHEcAGhx/ABocrwAaHOMAGh0XABodTwAaHY8AGh3HABoeBwAaHkMAGh5bABoejwAaHrMAGh7TABofIwAaH2cAGh+rABof8wAaIA8AGiBDABogbwAaIJ8AGiDfABohEwAaITMAGiGHABohzwAaIf8AGiIXABoiYwAaIpsAGiLLABojLwAaI3MAGiObABoj2wAaJA8AGiQ/ABokcwAaJNcAGiUDABolJwAaJVMAGiV7ABol5wAaJlcAGiaPABomzwAaJxsAGidLABonhwAaJ7cAGifrABooGwAaKG8AGiiLABoouwAaKO8AGikrABopbwAaKaMAGinHABop9wAaKncAGiqvABoqzwAaKxMAGitzABormwAaK78AGiwLABoshwAaLKsAGiznABotAwAaLSsAGi1jABotnwAaLl8AGi6/ABou7wAaL1cAGi9/ABovzwAaMDMAGjCbABow3wAaMSMAGjFjABoxxwAaMkMAGjJvABoy/wAaM2MAGjPLABo0OwAaNJMAGjTvABo1ZwAaNc8AGjY7ABo2twAaN1MAGjd/ABo35wAaOFsAGji/ABo5FwAaOW8AGjnrABo6FwAaOkcAGjpjABo6uwAaOucAGjsLABo7RwAaO48AGjvPABo8QwAaPJcAGj0HABo9UwAaPcsAGj4XABo+jwAaPrsAGj8XABo/jwAaP+sAGkAXABpAcwAaQJcAGkEHABpBPwAaQa8AGkH/ABpChwAaQtsAGkNPABpDkwAaQ78AGkQPABpEdwAaRMsAGkT3ABpF6wAaRjsAGkZvABpGnwAaRu8AGkdPABpHfwAaR68AGkgbABpITwAaSIMAGkjLABpI7wAaSPsAGkkLABpJGwAaSScAGkk7ABpJWwAaSXsAGkmTABpJqwAaSc8AGko7ABpKWwAaSssAGktLABpLwwAaTE8AGkxzABpMgwAaTTMAGk1jABpNywAaTpMAGk6jABpO8wAaT48AGlAXABpQPwAaUFsAGlCzABpQzwAaUP8AGlFTABpR7wAaUjsAGlK3ABpTNwAaU+cAGlRHABpUpwAaVPcAGlVTABpV1wAaVmMAGlbDABpXDwAaV28AGlfDABpYBwAaWCMAGlhbABpYiwAaWKMAGljXABpY9wAaWP8AGllTABpZgwAaWbsAGlnHABpZ8wAaWj8AGlq3ABpbAwAaW0MAGltvABpcCwAaXG8AGlybABpczwAaXaMAGl3jABpeGwAaXnsAGl7DABpe5wAaX2sAGl+LABpf4wAaYAcAGmBLABpgiwAaYL8AGmDTABpg6wAaYPMAGmE7ABphfwAaYb8AGmH3ABpiQwAaYr8AGmOLABpjxwAaZAcAGmQvABpkbwAaZLcAGmTLABplGwAaZV8AGmWfABpl4wAaZh8AGmZPABpmjwAaZusAGmcTABpnPwAaZ58AGmf7ABpoNwAaaLcAGmjjABppDwAaaVcAGmlzABpqEwAaakMAGmp3ABpqlwAaatsAGmsHABprTwAaa58AGmwjABpsawAabJMAGmzDABptAwAabUsAGm1/ABpt0wAabiMAGm5XABpuqwAabtMAGm8LABpvPwAab3sAGm+jABpv9wAacB8AGnCTABpw1wAacT8AGnGLABpxrwAacfsAGnKHABpzCwAac18AGnOzABp0EwAadF8AGnS7ABp1AwAadY8AGnXXABp2GwAadnMAGnbjABp2+wAadyMAGndzABp3hwAaeAMAGngvABp4YwAaeKMAGnjbABp5EwAaeUcAGnlnABp5uwAaelMAGnrHABp7BwAae38AGnvXABp7/wAafDsAGnyHABp81wAafTMAGn2LABp9vwAafg8AGn43ABp+awAafpcAGn7TABp/BwAaf0sAGn+HABp/qwAaf+MAGoBDABqAawAagJsAGoDnABqBNwAagVsAGoGvABqBxwAaghMAGoJLABqCpwAagu8AGoMfABqDUwAag5cAGoPXABqECwAahC8AGoRXABqEmwAahP8AGoVvABqF2wAahhMAGoY7ABqGZwAaho8AGobLABqG5wAahw8AGocnABqHWwAah3sAGoevABqINwAaiIsAGoinABqIuwAaiPMAGokzABqJVwAaiZ8AGonjABqKDwAaik8AGorHABqK/wAaiysAGouTABqLywAajBcAGoxnABqMkwAajNMAGo0XABqNPwAajYsAGo3HABqN9wAajmMAGo77ABqPYwAaj/cAGpAfABqQXwAakKcAGpDrABqRMwAakXMAGpG/ABqSEwAakl8AGpKzABqTDwAakzsAGpN/ABqTowAak8cAGpP3ABqUOwAalIsAGpT7ABqVTwAala8AGpYjABqWawAalqMAGpcrABqXewAal7cAGpfnABqYCwAamFMAGpjHABqZPwAamV8AGpmjABqaEwAamocAGprjABqbAwAam6sAGpv3ABqcPwAanKcAGpzjABqdFwAanXcAGp3nABqeSwAanucAGp9vABqf/wAaoIMAGqD/ABqhewAaofMAGqJfABqi3wAao1sAGqO/ABqkKwAapJMAGqT7ABqlnwAaph8AGqZ3ABqmwwAapxcAGqdDABqnVwAap5sAGqfTABqoGwAaqFsAGqi/ABqpEwAaqUcAGqmfABqp4wAaqg8AGqo3ABqqiwAaqrsAGqsLABqrYwAaq3cAGqvTABqsLwAarGsAGqyjABqtDwAarVsAGq2nABqt7wAarkMAGq6/ABqvFwAar4MAGq+3ABqv8wAasCcAGrBrABqxBwAasVcAGrGLABqxtwAasfMAGrInABqyWwAaspMAGrLnABqzRwAas3sAGrOvABqz6wAatC8AGrRnABq0uwAatNcAGrUbABq1SwAatYsAGrXTABq2KwAatoMAGrbjABq3YwAat9MAGrgXABq4TwAauHsAGrjvABq6AwAau58AGrvrABq8PwAavJsAGr0LABq9iwAavg8AGr6jABq/HwAav18AGr+nABrAFwAawD8AGsCTABrBBwAawW8AGsGzABrCXwAawrsAGsMfABrDkwAaw/cAGsQ7ABrExwAaxUMAGsV7ABrFnwAaxjsAGsc3ABrHVwAax3sAGsfLABrIKwAayFMAGshzABrIlwAayNMAGskLABrJQwAayXMAGsmjABrJywAaygMAGsozABrKZwAaypMAGsrfABrLJwAay2sAGsunABrL3wAazC8AGsxvABrMqwAazPMAGs0bABrNVwAazY8AGs2zABrN9wAazjcAGs6LABrO2wAazy8AGs9XABrPbwAaz5cAGs+vABrP6wAa0AsAGtArABrQUwAa0HsAGtCfABrQwwAa0OcAGtFDABrRbwAa0ZsAGtHnABrSIwAa0m8AGtK3ABrS8wAa0zsAGtNnABrTlwAa09MAGtQLABrUWwAa1JMAGtTLABrU/wAa1QcAGtU7ABrVfwAa1a8AGtX3ABrWKwAa1lsAGtaDABrWvwAa1usAGtcbABrXbwAa148AGtfPABrYAwAa2DMAGth3ABrYywAa2ScAGtljABrZhwAa2bMAGtn3ABraHwAa2m8AGtq3ABra9wAa208AGtwHABrcMwAa3H8AGtynABrc0wAa3P8AGt1XABrdgwAa3cMAGt4XABreZwAa3qsAGt7rABrfKwAa348AGt/DABrf4wAa4E8AGuCHABrg0wAa4TsAGuGbABrh3wAa4isAGuKLABri1wAa4zMAGuOfABrj4wAa5AMAGuRvABrk1wAa5RcAGuVbABrlxwAa5gsAGuZPABrmowAa558AGue3ABrn3wAa6A8AGug7ABrojwAa6MsAGujnABrpGwAa6TMAGul7ABrqAwAa6m8AGurXABrrfwAa7AsAGuy/ABrtKwAa7WsAGu2XABruLwAa7oMAGu7PABrvFwAa718AGu+rABrwAwAa8FMAGvCjABrw/wAa8WcAGvHXABrx5wAa8j8AGvKLABrzIwAa82sAGvOnABr0AwAa9GsAGvSTABr0vwAa9SMAGvVXABr1gwAa9a8AGvYXABr2awAa9rMAGvb/ABr3KwAa94sAGvfvABr4GwAa+E8AGviPABr5CwAa+WMAGvnTABr55wAa+kMAGvpnABr6jwAa+r8AGvsPABr7VwAa+5sAGvwDABr8LwAa/F8AGvyrABr9GwAa/Y8AGv3PABr+EwAa/mcAGv6LABr+5wAa/4MAGv+3ABr//wAbAGcAGwCnABsA7wAbATMAGwGTABsB/wAbAmMAGwLPABsDNwAbA7sAGwQDABsEOwAbBLMAGwUjABsFawAbBd8AGwZTABsGmwAbBvMAGwdbABsHtwAbB+MAGwgXABsIRwAbCHsAGwizABsJCwAbCScAGwlXABsJmwAbCb8AGwonABsKRwAbCmsAGwqvABsK7wAbCzcAGwt7ABsLpwAbC9cAGwvzABsMJwAbDE8AGwx/ABsMvwAbDOcAGw1HABsNdwAbDb8AGw4bABsOhwAbDrcAGw77ABsPRwAbD2MAGw+PABsPqwAbD9cAGxALABsQNwAbEJcAGxDDABsQ+wAbES8AGxGPABsR5wAbEhcAGxJ/ABsSqwAbEtcAGxM7ABsUCwAbFEcAGxSHABsU0wAbFSsAGxVnABsVtwAbFf8AGxZbABsWvwAbFvcAGxcvABsXawAbF5cAGxe/ABsYBwAbGEsAGxiPABsY1wAbGQsAGxmXABsaDwAbGqsAGxszABsbUwAbG7MAGxwfABscmwAbHPcAGx1jABsdrwAbHf8AGx5HABsenwAbHusAGx8vABsfYwAbH5MAGx/vABsgOwAbIJ8AGyDnABshOwAbIWcAGyGbABsiBwAbInsAGyK7ABsjQwAbI68AGyPjABskNwAbJHcAGySzABsk/wAbJUMAGyVzABslrwAbJbcAGyYDABsmIwAbJl8AGyafABsm8wAbJzsAGyf7ABsoRwAbKNMAGykLABspYwAbKZMAGym3ABsqEwAbKksAGyqTABsqxwAbKvsAGytPABsrvwAbLFsAGyyDABssqwAbLNsAGyzzABstCwAbLVcAGy27ABst+wAbLj8AGy53ABsuvwAbLwsAGy9XABsvrwAbL/8AGzBnABswuwAbMRsAGzFjABsxlwAbMeMAGzJXABsypwAbMvsAGzNDABszbwAbM6MAGzPjABs0HwAbNGsAGzSnABs09wAbNUsAGzWfABs14wAbNjcAGzaHABs3CwAbN1MAGzffABs4GwAbOGMAGzi3ABs46wAbOT8AGzmLABs5uwAbOhcAGzozABs6bwAbOpMAGzq7ABs7FwAbO18AGzuvABs78wAbPC8AGzxnABs8pwAbPOMAGz0HABs9awAbPZcAGz2zABs99wAbPhcAGz5PABs+fwAbPrcAGz73ABs/RwAbP6MAGz/7ABtAXwAbQMsAG0E/ABtBxwAbQmsAG0LvABtDEwAbQ1cAG0OPABtD1wAbRCsAG0R3ABtEywAbRR8AG0VrABtFtwAbRf8AG0ZHABtGmwAbRt8AG0cjABtHWwAbR4cAG0fHABtH+wAbSD8AG0irABtI/wAbSXsAG0nLABtKAwAbSjcAG0p7ABtKzwAbSxcAG0tLABtLkwAbS9cAG0xDABtMzwAbTRsAG02TABtN6wAbTi8AG05bABtOwwAbTz8AG0+nABtQDwAbUFcAG1CjABtQ6wAbUTcAG1GTABtR0wAbUhMAG1JzABtSzwAbUxMAG1NnABtT1wAbVEMAG1TbABtVHwAbVWMAG1XHABtWCwAbVtsAG1cDABtXQwAbV4MAG1fLABtX8wAbWBsAG1hfABtYkwAbWMMAG1j3ABtZJwAbWXcAG1nHABtaEwAbWncAG1q/ABtbGwAbW2sAG1uzABtcHwAbXH8AG1zPABtdFwAbXX8AG13XABteIwAbXnMAG16bABte+wAbX0cAG1+rABtf+wAbYHsAG2DrABthWwAbYbsAG2InABtijwAbYwMAG2MvABtjWwAbY5cAG2PHABtj+wAbZCsAG2R7ABtktwAbZPMAG2UnABtlYwAbZZMAG2XTABtmFwAbZkMAG2Z/ABtm1wAbZysAG2erABtn3wAbaCMAG2h3ABtoxwAbaQ8AG2k7ABtpfwAbabsAG2nrABtqMwAbaosAG2rTABtrCwAba2sAG2ufABtr4wAbbAsAG2w3ABtsVwAbbK8AG2z/ABttTwAbbW8AG23HABtuLwAbbosAG27/ABtvMwAbb3sAG2/XABtwGwAbcIcAG3DnABtxNwAbcX8AG3ILABtyjwAbctcAG3MTABtzSwAbc68AG3QPABt0fwAbdL8AG3TzABt1iwAbdfMAG3Y3ABt2rwAbdwcAG3dHABt3uwAbd+8AG3gnABt4UwAbeKMAG3jnABt5NwAbeaMAG3ovABt6SwAbenMAG3qnABt62wAbexcAG3szABt7cwAbe7sAG3vjABt8AwAbfDMAG3xrABt8qwAbfO8AG30rABt9dwAbfZsAG33DABt98wAbfiMAG35bABt+lwAbfsMAG37nABt/NwAbf28AG3+nABt/6wAbgAsAG4BXABuAmwAbgOMAG4EfABuBZwAbgaMAG4HzABuCWwAbgq8AG4MbABuDhwAbg98AG4RLABuEfwAbhLcAG4UHABuFOwAbhZcAG4XDABuF3wAbhg8AG4ZHABuGgwAbhscAG4bnABuHBwAbh08AG4eXABuH1wAbiBsAG4h3ABuIxwAbiQ8AG4lrABuJxwAbij8AG4qrABuLKwAbi6sAG4xHABuM4wAbjZMAG43/ABuObwAbjqMAG47rABuPLwAbj4cAG4/rABuQHwAbkCsAG5BXABuQmwAbkR8AG5FXABuRlwAbkdMAG5IPABuSQwAbkncAG5LnABuTNwAbk28AG5PDABuT5wAblF8AG5TjABuVLwAblYMAG5XfABuWRwAblocAG5azABuW/wAbl0cAG5ejABuX4wAbmBMAG5hPABuYlwAbmPsAG5lTABuZqwAbmeMAG5oTABuaSwAbmoMAG5rHABua7wAbmzcAG5tvABub/wAbnD8AG5xrABucowAbnPsAG51zABud/wAbnj8AG56nABue/wAbn28AG5/HABugDwAboGcAG6CvABug4wAboRcAG6HfABuiGwAbom8AG6LDABujRwAbo4sAG6PHABukOwAbpGsAG6SfABuk2wAbpQMAG6UvABulcwAbpaMAG6XXABumLwAbpncAG6cjABunNwAbp8sAG6gfABuoXwAbqMsAG6kPABupbwAbqeMAG6ojABuqVwAbqt8AG6sPABurPwAbq28AG6urABur0wAbq/8AG6xTABusowAbrPcAG603AButgwAbrd8AG64/ABuukwAbrvcAG69jABuvywAbr/cAG7BfABuwwwAbsTMAG7GTABux1wAbslMAG7KbABuzGwAbs1MAG7O3ABu0pwAbtOMAG7VXABu1iwAbtbcAG7ajABu2xwAbtzsAG7eDABu35wAbuEMAG7h7ABu44wAbuSMAG7l/ABu52wAbugcAG7qLABu68wAbuysAG7uLABu72wAbvF8AG7ynABu9CwAbvUMAG72XABu9ywAbvgcAG74zABu+fwAbvqsAG77fABu/IwAbv4cAG7+rABvADwAbwE8AG8CDABvA+wAbwT8AG8HHABvCKwAbwtMAG8L3ABvDOwAbw4sAG8OrABvEAwAbxDsAG8R3ABvElwAbxQcAG8VPABvFcwAbxZcAG8YbABvGowAbxxMAG8eHABvHvwAbx9sAG8gDABvIHwAbyEcAG8hvABvIkwAbyOcAG8k7ABvJswAbyi8AG8qTABvKqwAbysMAG8rbABvLQwAby6MAG8wHABvMUwAbzLcAG8z7ABvNUwAbzdsAG84nABvOZwAbzpsAG87fABvPFwAbz28AG8+7ABvP8wAb0B8AG9BvABvQ2wAb0P8AG9FDABvRcwAb0dcAG9ITABvSSwAb0ncAG9K7ABvS8wAb0zcAG9N7ABvTjwAb09MAG9QLABvUWwAb1J8AG9TrABvVKwAb1XcAG9W3ABvWIwAb1l8AG9aDABvWuwAb1t8AG9c/ABvXlwAb198AG9gbABvYawAb2JsAG9jfABvZMwAb2XMAG9nDABvaBwAb2k8AG9qPABvawwAb2wcAG9s/ABvbgwAb27sAG9wPABvcUwAb3IsAG9zHABvc9wAb3T8AG917ABvd1wAb3icAG953ABveuwAb3w8AG987ABvfgwAb39MAG+AXABvgpwAb4PcAG+E7ABvhdwAb4acAG+IDABviUwAb4pMAG+LHABvi7wAb43cAG+OTABvjvwAb4+sAG+RjABvk2wAb5XcAG+XPABvmcwAb5xMAG+fDABvoYwAb6MsAG+kvABvprwAb6e8AG+o/ABvq9wAb63sAG+uTABvrtwAb7DsAG+znABvtZwAb7bsAG+37ABvuOwAb7msAG+6jABvvCwAb70sAG++DABvvswAb8AMAG/BLABvwmwAb8L8AG/DjABvw6wAb8PMAG/ETABvxMwAb8XcAG/GzABvx0wAb8ecAG/IDABvyIwAb8jcAG/JTABvyuwAb81MAG/N/ABvzrwAb8+cAG/QrABv0WwAb9IsAG/S7ABv07wAb9R8AG/VPABv1fwAb9bMAG/XfABv2CwAb9jcAG/ZjABv2kwAb9sMAG/bvABv3HwAb91sAG/fHABv34wAb+DcAG/iHABv4ywAb+Q8AG/kbABv5MwAb+VsAG/mPABv5ywAb+esAG/ozABv6SwAb+lcAG/pjABv6bwAb+nsAG/qLABv6lwAb+qMAG/qvABv6vwAb+s8AG/rfABv66wAb+vMAG/r/ABv7GwAb+1MAG/ubABv74wAb/CMAG/xfABv8xwAb/S8AG/2XABv91wAb/jMAG/5jABv+nwAb/zMAG/9rABv/vwAcABsAHAB3ABwAxwAcASMAHAGfABwCBwAcAksAHAKPABwC+wAcA28AHAPDABwENwAcBM8AHAVPABwFZwAcBXsAHAWXABwGKwAcBk8AHAaPABwGuwAcBtcAHAb3ABwHHwAcB7cAHAfjABwIBwAcCCsAHAhXABwIXwAcCIMAHAj7ABwJHwAcCWcAHAmrABwJ1wAcCesAHAobABwKZwAcCvsAHAsXABwLHwAcC08AHAunABwMDwAcDGMAHAzLABwM7wAcDQ8AHA1PABwNjwAcDccAHA37ABwOCwAcDkcAHA6fABwPCwAcD3cAHA/rABwQWwAcEL8AHBDXABwRTwAcEasAHBIzABwS6wAcE5cAHBQbABwUQwAcFJsAHBTnABwVFwAcFWMAHBXLABwWBwAcFm8AHBbLABwXAwAcF3cAHBerABwYEwAcGF8AHBiDABwYswAcGNsAHBkfABwZLwAcGT8AHBmDABwZ1wAcGhMAHBpXABwa9wAcG1sAHBujABwcNwAcHKMAHBzfABwdTwAcHg8AHB5/ABwe3wAcH0MAHB9/ABwf4wAcIAsAHCBXABwg6wAcIV8AHCIDABwihwAcItcAHCMTABwjUwAcI1sAHCOHABwj4wAcJCMAHCRbABwkrwAcJSMAHCV/ABwl2wAcJiMAHCZXABwmnwAcJxMAHCc/ABwnowAcJ9sAHCgjABwobwAcKLcAHCjrABwpOwAcKZMAHCnfABwqQwAcKncAHCqjABwrFwAcK08AHCt7ABwr6wAcLBsAHCxLABwsiwAcLL8AHC0DABwtSwAcLY8AHC3nABwuOwAcLnsAHC67ABwvKwAcL3cAHDAPABwwTwAcMH8AHDDbABwxJwAcMXcAHDGjABwx7wAcMicAHDJfABwyvwAcMxsAHDNPABwzgwAcM68AHDPbABwz8wAcNAsAHDQjABw0OwAcNJsAHDTjABw1LwAcNX8AHDWjABw18wAcNk8AHDaDABw24wAcNxcAHDd3ABw34wAcOCMAHDh7ABw4zwAcOWcAHDm7ABw6JwAcOp8AHDrrABw7QwAcO3sAHDuXABw70wAcPAMAHDyXABw88wAcPU8AHD17ABw9qwAcPdMAHD37ABw+GwAcPksAHD6LABw/AwAcP7MAHEATABxARwAcQG8AHECnABxA2wAcQQMAHEEnABxBWwAcQYcAHEGnABxCNwAcQpcAHEL/ABxDrwAcRD8AHER7ABxEswAcRWcAHEWXABxGHwAcRmMAHEajABxG1wAcRxsAHEfbABxIMwAcSFsAHEiHABxIywAcSSMAHEljABxJswAcSicAHEqLABxK7wAcSzsAHEtzABxLswAcTCsAHEx7ABxM6wAcTQcAHE2DABxOIwAcTo8AHE8jABxPmwAcUAcAHFCHABxRGwAcUYcAHFILABxSjwAcUzsAHFOvABxUJwAcVMsAHFVPABxVywAcVisAHFbPABxXVwAcV98AHFh7ABxZCwAcWUcAHFnTABxaSwAcWmsAHFsLABxbiwAcXAcAHFyjABxdKwAcXXMAHF3bABxeOwAcXo8AHF7nABxfNwAcX38AHF+3ABxf/wAcYDMAHGBfABxgjwAcYLsAHGDnABxhLwAcYWcAHGGbABxhwwAcYgcAHGI/ABxigwAcYvcAHGNrABxjiwAcY7MAHGQLABxkSwAcZHsAHGTrABxlUwAcZZsAHGXbABxmFwAcZlsAHGaXABxm4wAcZysAHGejABxoCwAcaDcAHGhrABxpHwAcaX8AHGnLABxp/wAcanMAHGr/ABxrpwAca/cAHGw/ABxsfwAcbK8AHGz3ABxtOwAcbYsAHG3jABxuJwAcbmsAHG7vABxvCwAcb1MAHG97ABxvtwAcb+sAHHBTABxwuwAccRMAHHGDABxx0wAccfcAHHJvABxy4wAcc6cAHHPnABx0NwAcdHcAHHSTABx0xwAcdTcAHHVnABx1pwAcdeMAHHZLABx21wAcdxMAHHdLABx3mwAcd98AHHgXABx4WwAceLcAHHjfABx5GwAceU8AHHmXABx5uwAcefsAHHqDABx6pwAcetsAHHr7ABx7cwAcfAcAHHw/ABx8WwAcfHcAHH0vABx9ZwAcfYMAHH3LABx+QwAcfrMAHH7jABx/RwAcf3cAHH+zABx/2wAcgDcAHIBjAByAqwAcgPMAHIFDAByBjwAcgb8AHIIHAByCbwAcgpsAHILfAByDVwAcg8MAHIQvAByEmwAchNMAHIUzAByFVwAchZMAHIX/AByGNwAchnMAHIbDAByHKwAch18AHIeHAByHywAciAMAHIhHAByIkwAciQsAHImDAByJqwAcidcAHIojAByKYwAcipMAHIq3AByK3wAcizMAHItbAByLtwAci+cAHIwPAByMRwAcjGsAHIzDAByNCwAcjT8AHI13AByOHwAcjk8AHI5nAByO1wAcjwMAHI8vAByPhwAcj7MAHJAbAByQTwAckI8AHJDHAByREwAckTcAHJF/AByRywAckhMAHJJbABySlwAckq8AHJMDAByTWwAck4sAHJPvAByUTwAclLcAHJTnAByVGwAclWsAHJWrAByWLwAclmsAHJaXAByWvwAclucAHJb/AByXFwAcl28AHJefAByXwwAcmGsAHJizAByY8wAcmTMAHJmrAByaAwAcmj8AHJpvAByanwAcms8AHJr7ABybGwAcm0cAHJubAByb1wAcnBsAHJxzABycmwAcnOMAHJ1rABydswAcniMAHJ4rAByelwAcnwsAHJ83AByfSwAcn4sAHJ+rAByf1wAcoDMAHKBnAByglwAcoPsAHKE7AByhbwAcogMAHKI3AByibwAcorsAHKMLAByjGwAcozsAHKNvAByjowAco98AHKQPABykPwAcpGMAHKTDABylFwAcpWsAHKWzAByl/wAcpiMAHKZfABymgwAcpp8AHKcHABynnwAcp+cAHKh3AByo9wAcqT8AHKlrAByplwAcqbcAHKonAByqVwAcqnMAHKrDAByrCwAcq18AHKvHAByr4wAcq/sAHKwrABysSwAcrL8AHKz3ABytLwAcrV8AHK2HABytvwAcrf8AHK5XAByujwAcrscAHK73AByvGwAcr18AHK+LAByvtwAcr/sAHLAzABywdwAcsLcAHLDvAByxQwAcsW8AHLGvAByx2wAcsjMAHLKLAByzCwAcs4sAHLP7ABy0awActJcAHLS/ABy09wActS8AHLV/ABy1lwActb8AHLX/ABy2SwActq8AHLbbABy29wActzcAHLePABy3zwAcuCcAHLirABy46wAcuTcAHLlXABy5ZwAcuZ8AHLnbABy6MwAcumsAHLqLABy6twAcut8AHLsvABy7ZwAcu6cAHLvfABy8EwAcvJsAHLzTABy9BwAcvSsAHL2nABy94wAcvn8AHL6zABy/EwAcv2cAHL/7ABzArwAcwVsAHMGHABzBpwAcwd8AHMITABzCTwAcwpcAHMLHABzDEwAcw0sAHMN7ABzDrwAcw9MAHMPbABzEJwAcxFsAHMSfABzFTwAcxYMAHMWLABzFzwAcxgcAHMZnABzHBwAcx1cAHMgDABzIQwAcyEsAHMiLABzJJwAcyXMAHMnTABzKSwAcyosAHMr/ABzLXwAcy8MAHMwHABzMgwAczOMAHM1vA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B1UnwAdVKcAHVTTAB1U/wAdVSMAHVU/AB1VawAdVYcAHVWfAB1VxwAdVgcAHVZfAB1WqwAdVuMAHVcnAB1XdwAdV6cAHVfjAB1YBwAdWDcAHViHAB1Y3wAdWRcAHVmfAB1ZxwAdWe8AHVoXAB1aOwAdWqMAHVsLAB1bLwAdW0sAHVvXAB1cHwAdXCsAHVy3AB1c6wAdXRMAHV2PAB1dvwAdXe8AHV5/AB1eqwAdXs8AHV7/AB1fQwAdX4MAHV+bAB1f3wAdYBMAHWBHAB1gbwAdYKsAHWDDAB1gzwAdYPMAHWFHAB1hhwAdYecAHWKHAB1ilwAdYq8AHWLfAB1i5wAdYu8AHWMbAB1jMwAdY2cAHWOnAB1j2wAdZBsAHWRnAB1kowAdZNMAHWTjAB1lLwAdZZ8AHWW3AB1l2wAdZmMAHWabAB1mzwAdZyMAHWdLAB1njwAdZ7MAHWfbAB1oGwAdaFMAHWiLAB1o3wAdaRcAHWk3AB1pewAdad8AHWoTAB1qWwAdarMAHWr/AB1rCwAdaxcAHWtjAB1rgwAda6cAHWvjAB1sJwAdbEsAHWxzAB1sjwAdbJsAHW0fAB1tawAdbasAHW3rAB1uKwAdbosAHW7HAB1u8wAdbzMAHW9/AB1vswAdb9cAHW//AB1wKwAdcFsAHXDzAB1xHwAdcVMAHXF7AB1xuwAdceMAHXIbAB1yXwAdco8AHXMfAB1zhwAdc98AHXQfAB10XwAddKMAHXTHAB10+wAddRsAHXVvAB110wAddh8AHXZXAB12swAddw8AHXc7AB13owAdd8cAHXfvAB14NwAdeFsAHXinAB140wAdeP8AHXlLAB15jwAdebcAHXnXAB16JwAdekcAHXp3AB16pwAdetMAHXrbAB17BwAde1cAHXtnAB17mwAde8cAHXvvAB18FwAdfD8AHXyPAB18rwAdfRMAHX0/AB19XwAdfbcAHX37AB1+OwAdfocAHX7bAB1/CwAdf4MAHX+nAB1/6wAdgEMAHYCPAB2A/wAdgTsAHYFLAB2BhwAdggcAHYI7AB2CTwAdgmMAHYKHAB2CrwAdgxMAHYN3AB2EDwAdhEMAHYR3AB2EowAdhNMAHYULAB2FUwAdhXcAHYWXAB2F0wAdhicAHYZLAB2GgwAdhsMAHYcTAB2HWwAdh7sAHYgDAB2IYwAdiJsAHYjTAB2I9wAdiTcAHYl3AB2JvwAdih8AHYpTAB2KdwAdiqMAHYrzAB2LFwAdizcAHYtfAB2LewAdi+cAHYwrAB2MYwAdjIcAHYyvAB2NAwAdjUMAHY1XAB2NcwAdjbMAHY3fAB2OEwAdjisAHY5PAB2OhwAdjscAHY8HAB2PSwAdj7sAHY/XAB2QBwAdkDMAHZBDAB2QbwAdkJMAHZDrAB2REwAdkUMAHZGXAB2RxwAdkfcAHZIvAB2SdwAdkqsAHZLXAB2S3wAdkvcAHZMTAB2TIwAdky8AHZNDAB2TSwAdk2MAHZNvAB2ThwAdk7cAHZPHAB2T4wAdlCMAHZRHAB2UcwAdlMcAHZULAB2VKwAdlYcAHZWzAB2V2wAdljMAHZZfAB2WbwAdlnsAHZcnAB2XQwAdl4cAHZe7AB2YIwAdmHcAHZinAB2YywAdmNsAHZkPAB2ZGwAdmT8AHZlfAB2ZlwAdmbMAHZnnAB2aHwAdmlcAHZqfAB2auwAdmu8AHZsvAB2bUwAdm5cAHZu3AB2b9wAdnMMAHZ0bAB2dzwAdnhsAHZ7jAB2fNwAdn+8AHaCzAB2hAwAdoccAHaIbAB2i6wAdo0cAHaPLAB2j/wAdpBMAHaQ3AB2kkwAdpOsAHaUDAB2lYwAdpcMAHaYfAB2mewAdpp8AHacDAB2nUwAdp28AHaebAB2nowAdp+sAHaf/AB2ocwAdqKMAHajTAB2pAwAdqUsAHalbAB2plwAdqZ8AHam7AB2p2wAdqisAHapTAB2qkwAdqpsAHaq/AB2q3wAdqwsAHas7AB2rbwAdq7MAHavjAB2sCwAdrD8AHaxXAB2sawAdrMcAHazPAB2s/wAdrS8AHa1TAB2tiwAdrdMAHa3nAB2uAwAdrg8AHa4nAB2uPwAdrlcAHa5vAB2uiwAdrqcAHa67AB2u4wAdrwsAHa+HAB2vywAdsAcAHbCXAB2wtwAdsOsAHbEzAB2xewAdsbsAHbHHAB2x6wAdshsAHbIzAB2yYwAdso8AHbLfAB2zqwAds9sAHbQrAB20cwAdtIsAHbTPAB21DwAdtUcAHbV/AB21uwAdtfcAHbY/AB23EwAdt0MAHbdnAB23hwAduCMAHbh7AB24twAduM8AHbk7AB25mwAdubsAHbpPAB26mwAduvMAHbsfAB27QwAdu2MAHbuHAB28BwAdvIcAHby3AB287wAdvSMAHb1PAB29gwAdvbcAHb3fAB299wAdvjcAHb6nAB2+2wAdv08AHb/LAB3ABwAdwDMAHcBbAB3AqwAdwOcAHcEHAB3BZwAdwYcAHcGvAB3BywAdwfcAHcJHAB3CowAdwssAHcNDAB3DtwAdxEsAHcRvAB3ErwAdxNcAHcUfAB3FYwAdxcMAHcYzAB3GfwAdxrsAHcbvAB3HOwAdx58AHcg/AB3IewAdyN8AHclbAB3JpwAdyc8AHcn3AB3KGwAdylsAHcqbAB3KywAdyy8AHctnAB3L1wAdy/MAHcwvAB3MbwAdzJMAHcyvAB3MzwAdzP8AHc0TAB3NJwAdzV8AHc2DAB3NrwAdzdMAHc33AB3OEwAdzl8AHc6bAB3OywAdzxcAHc9rAB3P2wAdz/8AHdA7AB3QawAd0IsAHdC7AB3RDwAd0SMAHdFPAB3RfwAd0YsAHdGrAB3R1wAd0ecAHdIvAB3SbwAd0n8AHdKjAB3SywAd0u8AHdNHAB3TewAd048AHdPDAB3T1wAd0+8AHdP/AB3UYwAd1MsAHdTvAB3VMwAd1VMAHdWfAB3VuwAd1dcAHdYTAB3WmwAd1scAHdcHAB3XLwAd17cAHdfPAB3X9wAd2CcAHdhfAB3Y5wAd2R8AHdmjAB3Z2wAd2gMAHdozAB3ahwAd2tMAHdsHAB3bLwAd20sAHduLAB3bvwAd2/MAHdxDAB3cjwAd3MsAHd0DAB3dSwAd3WcAHd1/AB3dowAd3dcAHd4LAB3eMwAd3mcAHd63AB3e6wAd3ycAHd9zAB3fuwAd398AHd//AB3gTwAd4J8AHeDrAB3hkwAd4b8AHeHrAB3iiwAd4zsAHeOrAB3j2wAd4/sAHeRfAB3kkwAd5MsAHeWHAB3l7wAd5ncAHebHAB3nIwAd538AHeffAB3oDwAd6C8AHejHAB3pEwAd6T8AHemXAB3p6wAd6jsAHeqPAB3q6wAd63cAHeurAB3sHwAd7FMAHeyTAB3s6wAd7R8AHe0/AB3tcwAd7ZMAHe27AB3t2wAd7hsAHe5DAB3uUwAd7osAHe6vAB3u2wAd7xcAHe8zAB3vVwAd73cAHe+XAB3vxwAd8AsAHfAvAB3wawAd8JMAHfDLAB3w/wAd8R8AHfFDAB3xbwAd8Z8AHfHPAB3x+wAd8iMAHfJTAB3yhwAd8r8AHfMfAB3zfwAd88cAHfPfAB30BwAd9C8AHfRHAB30XwAd9IMAHfS3AB30ywAd9N8AHfUbAB31NwAd9VcAHfXrAB32nwAd9s8AHfcjAB33ewAd95MAHffPAB34KwAd+F8AHfiTAB34vwAd+O8AHfkfAB35TwAd+X8AHfmvAB353wAd+hcAHfpDAB36pwAd+xMAHftvAB37twAd/BcAHfxfAB38lwAd/LcAHfzjAB39JwAd/acAHf4bAB3+jwAd/yMAHf+3AB4APwAeAHMAHgDfAB4BNwAeAZMAHgHjAB4COwAeApsAHgLHAB4C+wAeAyMAHgNLAB4DfwAeA68AHgQDAB4EWwAeBOMAHgUbAB4FQwAeBXcAHgXTAB4GNwAeBm8AHganAB4G+wAeBx8AHgcnAB4HSwAeB1MAHgeTAB4HnwAeCBsAHghHAB4IrwAeCN8AHglHAB4JlwAeCh8AHgpPAB4KbwAeCoMAHgrLAB4LBwAeC1cAHgufAB4L0wAeDAMAHgxPAB4MkwAeDLcAHgzzAB4NJwAeDVMAHg17AB4N0wAeDiMAHg5/AB4OtwAeDusAHg9DAB4PkwAeD9sAHhAbAB4QawAeELMAHhELAB4RWwAeEZMAHhHDAB4SDwAeElMAHhKjAB4S7wAeEx8AHhNPAB4TewAeE6cAHhPnAB4UIwAeFE8AHhR3AB4UtwAeFNMAHhT3AB4VDwAeFScAHhWDAB4VywAeFhMAHhZjAB4WgwAeFvMAHhc7AB4XgwAeF/sAHhhbAB4YiwAeGL8AHhjzAB4ZFwAeGU8AHhmjAB4Z0wAeGhMAHhpTAB4akwAeGr8AHhrrAB4bDwAeG1sAHhuTAB4b7wAeHEsAHhyzAB4dBwAeHTsAHh4rAB4eewAeHpcAHh63AB4e0wAeHv8AHh8zAB4fVwAeH3cAHh+XAB4gHwAeIOMAHiEnAB4hPwAeIXsAHiHDAB4iAwAeIjsAHiJ/AB4ixwAeIt8AHiMjAB4jVwAeI4MAHiPHAB4kMwAeJH8AHiT3AB4lVwAeJccAHiYrAB4mRwAeJm8AHiajAB4m1wAeJxsAHic7AB4nhwAeJ78AHignAB4oawAeKLMAHikPAB4pWwAeKZMAHinbAB4qKwAeKmMAHiqzAB4q4wAeKysAHit7AB4rxwAeK+sAHiw/AB4sewAeLPsAHi07AB4tcwAeLccAHi3bAB4t6wAeLg8AHi5/AB4u1wAeLyMAHi9nAB4vtwAeMEMAHjCHAB4wrwAeMNMAHjEHAB4xPwAeMbMAHjHnAB4yPwAeMoMAHjLXAB4zEwAeM1cAHjOXAB4z4wAeNB8AHjRnAB40/wAeNTcAHjVzAB41owAeNcMAHjX/AB42fwAeNrMAHjbXAB43EwAeN0cAHjdzAB43jwAeN+MAHjgDAB44YwAeOKcAHjkHAB45bwAeOc8AHjozAB46ZwAeOrcAHjsPAB47ewAeO7sAHjzTAB49JwAePUcAHj1jAB49iwAePZ8AHj3vAB4+iwAePrsAHj8DAB4/TwAeP6MAHj/7AB5AYwAeQLMAHkDLAB5BHwAeQTsAHkGPAB5BqwAeQf8AHkIbAB5CnwAeQs8AHkNfAB5DvwAeQ+cAHkRPAB5EmwAeRO8AHkVXAB5FywAeRfMAHkanAB5GxwAeRtsAHkffAB5IOwAeSE8AHkh3AB5I6wAeSTMAHklnAB5J3wAeSmcAHkrfAB5LAwAeS1sAHkubAB5L6wAeTG8AHkzTAB5NIwAeTVcAHk13AB5NtwAeTe8AHk4XAB5OSwAeTqMAHk7DAB5O/wAeTzsAHk/HAB5QPwAeUOMAHlEXAB5RowAeUf8AHlIzAB5SowAeUxMAHlMvAB5TswAeVBsAHlSXAB5U6wAeVSMAHlVTAB5VuwAeVc8AHlX3AB5WXwAeVrsAHlbjAB5XywAeV/MAHlgXAB5YYwAeWK8AHljnAB5ZDwAeWW8AHlnzAB5aRwAeWt8AHlvDAB5cCwAeXC8AHlyLAB5c9wAeXTMAHl2zAB5elwAeXt8AHl8nAB5fZwAeX4MAHl+fAB5fwwAeX+MAHmAXAB5gcwAeYJsAHmCrAB5guwAeYMsAHmD3AB5hUwAeYcMAHmHvAB5iUwAeYssAHmL/AB5jYwAeY4sAHmOfAB5jrwAeY88AHmRHAB5lRwAeZZ8AHmW/AB5mKwAeZn8AHmbPAB5m4wAeZ0cAHmeXAB5nqwAeaA8AHmhnAB5omwAeaO8AHmkbAB5pPwAeaYcAHmnjAB5qCwAeajMAHmp/AB5qzwAeax8AHmtXAB5rkwAebD8AHmzDAB5tBwAebWcAHm2/AB5uCwAeblMAHm6LAB5uvwAebu8AHm8bAB5vRwAeb88AHnAnAB5wSwAecIcAHnC7AB5xGwAecVMAHnG/AB5yLwAecnsAHnKjAB5y1wAecxsAHnNnAB5zswAec9sAHnQbAB50MwAedI8AHnTbAB51KwAedWMAHnWDAB51pwAedfcAHnZDAB52dwAedrsAHncLAB53QwAed4MAHnfXAB54FwAeeEMAHniDAB543wAeeSMAHnmrAB56AwAeelcAHnq7AB560wAeev8AHns7AB57fwAee78AHnwLAB58awAefKsAHnzTAB59MwAefW8AHn2rAB594wAefgMAHn43AB5+bwAefqMAHn8HAB5/NwAef2MAHn+PAB5/wwAef/MAHoBTAB6AfwAegN8AHoEHAB6BJwAegU8AHoF7AB6B8wAeglcAHoKTAB6C8wAegzsAHoOnAB6EEwAehFcAHoTfAB6FTwAehdMAHoZHAB6GjwAehrcAHocXAB6HVwAeh6MAHofbAB6IJwAeiGcAHoinAB6I0wAeiQMAHolDAB6JcwAeiZ8AHonjAB6J9wAeiiMAHopLAB6K0wAeiwsAHotPAB6LmwAejC8AHoynAB6MywAejSMAHo1/AB6N3wAejgsAHo53AB6O5wAejx8AHo9XAB6PuwAekCMAHpB7AB6Q1wAekTMAHpGTAB6R2wAekicAHpJPAB6SwwAekucAHpMPAB6TVwAek6MAHpPnAB6UFwAelE8AHpRzAB6UswAelO8AHpVLAB6V6wAelosAHpcbAB6XkwAemBcAHpg/AB6YZwAemIMAHpinAB6YwwAemOcAHpkPAB6ZNwAemWcAHpmPAB6ZtwAemdMAHpnrAB6aKwAemlcAHppjAB6ahwAemo8AHpqrAB6aywAemxMAHptjAB6b8wAenEMAHpx7AB6ctwAenR8AHp1PAB6dswAenh8AHp6TAB6ezwAenvsAHp8XAB6fYwAen3sAHp+nAB6f+wAeoCcAHqBzAB6gowAeoP8AHqGDAB6htwAeoiMAHqI/AB6icwAeoqMAHqLPAB6jIwAeo1sAHqOPAB6jpwAeo78AHqQDAB6kbwAepJ8AHqT3AB6lUwAepXsAHqXDAB6l3wAepfcAHqYnAB6mXwAepn8AHqbbAB6nCwAepzsAHqdTAB6ndwAep4sAHqebAB6nowAeqAMAHqgzAB6oVwAeqHsAHqijAB6o3wAeqQcAHqkPAB6pawAeqcMAHqoLAB6qKwAeqmsAHqqfAB6q8wAeqvsAHqsDAB6rcwAeq4sAHquzAB6r0wAerC8AHqw7AB6sVwAerG8AHqyrAB6s4wAerWcAHq2rAB6t6wAerk8AHq6XAB6uxwAervsAHq9vAB6v7wAesC8AHrDrAB6xZwAesasAHrIrAB6yawAeszsAHrO3AB6z9wAetHcAHrSrAB60zwAetPMAHrVXAB61twAetesAHrYLAB62VwAetpMAHrajAB62swAetuMAHrcTAB63TwAet2cAHreXAB63twAet/cAHrgTAB64MwAeuE8AHrh7AB64nwAeuLsAHrjvAB65EwAeuSsAHrlXAB65ZwAeuZsAHrmzAB65zwAeuecAHroLAB66JwAeuk8AHrp7AB66hwAeuqMAHrrDAB66+wAeu4cAHruPAB67swAeu+8AHrwrAB68WwAevLsAHrzvAB69KwAevUcAHr1PAB69VwAevV8AHr1nAB69vwAevccAHr3zAB6+FwAevjMAHr5DAB6+iwAevrsAHr7bAB6/AwAevz8AHr9vAB6/lwAev7MAHr/vAB7AJwAewGMAHsBvAB7AiwAewKsAHsDDAB7A2wAewSMAHsFLAB7BqwAewd8AHsIPAB7CSwAewocAHsLXAB7DEwAew0MAHsN3AB7DuwAew+8AHsQ3AB7EfwAexNMAHsUDAB7FRwAexXcAHsW7AB7F9wAexisAHsZrAB7GuwAexx8AHsd/AB7H+wAeyDsAHsinAB7JBwAeyUsAHsmHAB7JswAeyecAHsoTAB7KRwAeym8AHsqbAB7KtwAeywsAHssvAB7LVwAey9sAHswXAB7MIwAezFcAHsyTAB7MvwAezMsAHsznAB7NEwAezVcAHs1rAB7NiwAezaMAHs3HAB7N2wAezfsAHs4HAB7OEwAezm8AHs6bAB7OswAezscAHs7TAB7O6wAezwsAHs8fAB7PNwAez1cAHs9zAB7PywAez/MAHtALAB7QGwAe0D8AHtBnAB7QiwAe0LsAHtEHAB7RHwAe0UMAHtFbAB7RawAe0bsAHtHjAB7R/wAe0icAHtJPAB7SkwAe0psAHtLHAB7S6wAe0xMAHtM7AB7TWwAe03cAHtOnAB7TxwAe0/MAHtQDAB7UFwAe1DsAHtRjAB7UkwAe1M8AHtTrAB7VHwAe1S8AHtVjAB7VlwAe1eMAHtYXAB7WYwAe1q8AHtb7AB7XKwAe11cAHterAB7X9wAe2CsAHtg7AB7YXwAe2JcAHtjPAB7Y8wAe2SMAHtlHAB7ZZwAe2YcAHtmbAB7Z2wAe2gsAHtofAB7aMwAe2lMAHtp3AB7anwAe2r8AHtrvAB7bIwAe2zsAHttXAB7bjwAe25sAHtvHAB7b5wAe3AsAHtwXAB7cPwAe3FsAHtyfAB7c3wAe3QMAHt0fAB7dMwAe3VcAHt2DAB7dnwAe3a8AHt33AB7eQwAe3oMAHt7PAB7fDwAe3y8AHt9PAB7fjwAe37sAHt/zAB7gNwAe4HsAHuDTAB7hIwAe4T8AHuFfAB7hgwAe4b8AHuH3AB7iHwAe4nMAHuKbAB7iwwAe4xsAHuMzAB7jbwAe44cAHuO3AB7j4wAe5CcAHuRHAB7kfwAe5J8AHuTXAB7lBwAe5U8AHuV/AB7lxwAe5g8AHuZvAB7mxwAe5x8AHuePAB7n3wAe6EcAHuiPAB7o7wAe6S8AHumHAB7pwwAe6hcAHupLAB7qlwAe6ssAHusXAB7rmwAe7DcAHuxjAB7spwAe7O8AHu1PAB7tjwAe7ecAHu4LAB7uRwAe7l8AHu6PAB7uvwAe7wcAHu8bAB7vNwAe72sAHu+LAB7vwwAe7+sAHvArAB7wVwAe8JsAHvDDAB7xAwAe8S8AHvFzAB7xlwAe8dMAHvHnAB7yEwAe8kMAHvJbAB7yiwAe8qcAHvLbAB7y8wAe8yMAHvM/AB7zWwAe84sAHvOzAB7z8wAe9BcAHvRTAB70hwAe9LcAHvT/AB71IwAe9V8AHvVrAB71jwAe9bsAHvXnAB72LwAe9lcAHvaXAB724wAe9w8AHvdTAB73fwAe98MAHvfnAB74IwAe+E8AHvh7AB74uwAe+N8AHvkbAB75XwAe+XcAHvmnAB75zwAe+hMAHvpPAB76pwAe+rsAHvrvAB77KwAe+8cAHvwnAB78SwAe/HMAHvy3AB79OwAe/XMAHv3bAB7+EwAe/psAHv7HAB7+6wAe/w8AHv8jAB7/WwAe/6MAHv/fAB8AVwAfAHMAHwDPAB8A6wAfASMAHwFDAB8HOwAfB8cAHwgHAB8IYwAfCMcAHwkTAB8J/wAfClMAHwtPAB8LgwAfC8cAHx4nAB8ocwAfMFcAHzETAB8xRwAfMXsAHzGzAB8x3wAfMgMAHzKPAB8y5wAfM0cAHzOnAB80UwAfNI8AHzT/A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CABrwAgAe8AIAIvACACgwAgAp8AIALvACADEwAgA18AIAOHACADrwAgA+cAIAQfACAEYwAgBKcAIATrACAFKwAgBWcAIAWfACAF6wAgBjcAIAZ/ACAG3wAgByMAIAd7ACAHxwAgB+cAIAhDACAIYwAgCJMAIAjPACAJBwAgCWMAIAmTACAJ5wAgChsAIApHACAKiwAgCscAIArvACALXwAgC88AIAzPACANNwAgDU8AIA2TACANzwAgDhcAIA5zACAOzwAgDxMAIA8/ACAPfwAgD78AIA/jACAQFwAgEFMAIBCfACAQzwAgESMAIBGHACAR0wAgEgMAIBIzACASUwAgEnMAIBKXACAS1wAgExsAIBNrACATpwAgE9MAIBP/ACAUEwAgFCsAIBRDACAUTwAgFGcAIBSbACAU3wAgFQcAIBUzACAVSwAgFXMAIBWnACAVzwAgFfMAIBYXACAWJwAgFlcAIBZrACAWwwAgFvsAIBc7ACAXiwAgF7sAIBfXACAX+wAgGCcAIBhHACAYbwAgGJsAIBjPACAY+wAgGRsAIBk3ACAZXwAgGXcAIBmfACAZwwAgGfsAIBozACAaSwAgGnMAIBqTACAavwAgGvcAIBtjACAbkwAgHA8AIBxDACAcnwAgHOcAIB0PACAdSwAgHZMAIB3jACAeIwAgHlMAIB6nACAe4wAgHxcAIB9DACAfhwAgH8cAICATACAgRwAgIHcAICDTACAhCwAgIWcAICHLACAh5wAgIi8AICJzACAimwAgItMAICLrACAjFwAgI0sAICOTACAjywAgI/MAICQ7ACAkawAgJMcAICUzACAlnwAgJhsAICZnACAmwwAgJx8AICdTACAnrwAgJ88AICf7ACAoKwAgKEcAIChzACAo3wAgKTcAICmPACApxwAgKeMAICoDACAqMwAgKmsAICs/ACArwwAgK/MAICwnACAsXwAgLH8AICyrACAswwAgLRcAIC0jACAtLwAgLT8AIC1jACAtawAgLXMAIC2vACAt1wAgLkcAIC5rACAu1wAgLxsAIC+XACAv6wAgMI8AIDDXACAxKwAgMT8AIDFzACAxrwAgMd8AIDIvACAypwAgMtsAIDNTACAzlwAgM7sAIDQjACA0WwAgNI8AIDTDACA1gwAgNZsAIDWzACA18wAgNjMAIDaHACA2twAgNxcAIDdbACA3wwAgOD8AIDhzACA4twAgONMAIDkTACA5PwAgOZMAIDnTACA54wAgOfMAIDovACA6fwAgOp8AIDrfACA7MwAgO2MAIDuzACA72wAgPBcAIDxvACA82wAgPR8AID1fACA9nwAgPbcAID4HACA+JwAgPm8AID6jACA+6wAgPv8AID8zACA/hwAgP/8AIEBzACBBOwAgQYsAIEHPACBCGwAgQkcAIEJvACBRDwAgUT8AIFF7ACBRkwAgUbsAIFHrACBR8wAgUgcAIFInACBSPwAgUm8AIFKbACBSxwAgUvcAIFMXACBT3wAgVIsAIFTHACBU+wAgVTcAIFVfACBVhwAgVa8AIFXTACBV9wAgVhsAIFZvACBWpwAgVtcAIFb/ACBXKwAgV4MAITNPACEzewAhM+MAIUAfACFASwAhQHcAIUCrACFBBwAhQUcAIUGbACFB8wAhQh8AIUJ7ACFC6wAhQz8AIUN3ACFDjwAhQ+MAIUQLACFEQwAhRG8AIUSrACFExwAhRSsAIUVLACFFlwAhRcsAIUYrACFGVwAhRscAIUcXACFHdwAhR8cAIUgnACFIWwAhSI8AIUjTACFJEwAhSUcAIUl7ACFJrwAhUCMAIVB7ACFQ4wAhUQ8AIVFHACFRowAhUdcAIVLXACFTSwAhU4cAIVPDACFUBwAhVDsAIVR7ACFuHwAhbmsAIW6fACFuywAhbwsAIW9HACFvmwAhb9cAIXAPACFwMwAhcHMAIXCPACFwwwAhcPcAIXErACFxTwAhcYMAIXGrACFx3wAhcgsAIXJLACFyhwAhco8AIXKrACFy9wAhcwsAIXNLACFzfwAhc7cAIXQPACF0NwAhdH8AIXSPACF1HwAhdX8AIXYnACF2vwAhdzcAIXdvACF4QwAheQcAIXmjACF5vwAheecAIXoHACF6KwAher8AIXrvACF7FwAhe1sAIXtzACF7twAhfAMAIXwjACF8bwAhfJ8AIXzHACF89wAhfVMAIX13ACF9nwAhfe8AIX4rACF+TwAhfp8AIX7nACF/CwAhfzcAIX9nACF/mwAhf9sAIX/3ACGAFwAhgGcAIYFvACGBiwAhgb8AIYHbACGCWwAhhWcAIYWnACGFzwAhhicAIYZLACGG0wAhihsAIYozACGKbwAhiosAIYtDACGLYwAhi5MAIYu7ACGL6wAhjCMAIYw3ACGMdwAhjQsAIY1XACGNpwAhjg8AIY4zACGOlwAhj3MAIY/jACGQuwAhlScAIZVvACGVqwAhldsAIZYTACGWawAhlpsAIZa3ACGW5wAhlwcAIZdfACGX4wAhmC8AIZhzACGYowAhmN8AIZkPACGZLwAhmXMAIZmnACGZ2wAhmgcAIZpPACGarwAhmucAIZsLACGbLwAhoDMAIaB/ACGhLwAhobsAIaHrACGiJwAhok8AIaKfACGjAwAho08AIaNvACGjwwAhpAcAIaRDACGkowAhpP8AIaUbACGl4wAhpj8AIaZfACGmjwAhpxsAIadbACGnkwAhp8sAIafvACGoGwAhqEcAIahTACGoawAhqJsAIaivACGozwAhqO8AIamnACGp8wAhqrcAIasPACGrzwAhrCMAIaxrACGskwAhrLcAIaznACGtowAhrfMAIa4rACGuUwAhrq8AIa7jACGvJwAhr2MAIa/PACGv+wAhsEsAIbCrACGw/wAhsXMAIbGXACGxuwAhsdsAIbKTACGy2wAhsxcAIbN7ACGzlwAhs7sAIbPfACGz+wAhtB8AIbQ/ACG0ewAhtUMAIbWfACG16wAhtg8AIbYvACG2QwAhtm8AIbaXACG2ywAhtwcAIbcbACG3IwAht18AIbe/ACG34wAhuBMAIbgzACG4bwAhuJcAIbirACG4ywAhuOMAIbjrACG5JwAhuUMAIblXACG5gwAhuZsAIbnDACG59wAhujcAIbr7ACG7UwAhu4cAIbvXACG8SwAhvKcAIb1HACG9mwAhvc8AIb3/ACG+PwAhvk8AIb5fACG+iwAhvqcAIb7HACG/AwAhvzcAIb9TACG/gwAhv7MAIb/TACG/2wAhwAcAIcA7ACHAgwAhwLsAIcDXACHBFwAhwVsAIcG3ACHB5wAhwicAIcJHACHDAwAhw1MAIcOHACHDqwAhw+8AIcQTACHEOwAhxIcAIcTDACHFBwAhxTMAIcVjACHFvwAhxfsAIcYrACHGnwAhxv8AIcdLACHH3wAhyBMAIch7ACHItwAhyPMAIck7ACHJawAhyZsAIcnfACHJ+wAhyksAIcpzACHKrwAhyuMAIctrACHL1wAhzCcAIcxPACHMgwAhzLMAIc0PACHNQwAhzXcAIc2vACHN2wAhzhMAIc4vACHORwAhznMAIc6/ACHO/wAhzysAIc9rACHPowAhz98AIdAnACHQLwAh0GcAIdB7ACHQpwAh0McAIdDnACHRKwAh0U8AIdF7ACHRhwAh0bMAIdG/ACHR7wAh0i8AIdKTACHSxwAh0vsAIdNLACHTawAh068AIdPjACHUOwAh1GcAIdSjACHUvwAh1PMAIdUrACHVfwAh1asAIdYHACHWWwAh1ocAIdavACHW2wAh1vsAIdcnACHXewAh168AIdfXACHX+wAh2EcAIdiPACHYqwAh2MsAIdkfACHZWwAh2ZcAIdnLACHaJwAh2kcAIdp/ACHazwAh2usAIdsXACHbPwAh218AIduHACHbpwAh288AIdvvACHcBwAh3BsAIdw3ACHcVwAh3IsAIdy7ACHdAwAh3UcAId13ACHdnwAh3a8AId3XACHd5wAh3gcAId47ACHeawAh3rsAId7jACHfEwAh3zcAId9fACHffwAh36cAId/TACHf9wAh4BMAIeAvACHgXwAh4JMAIeDHACHg8wAh4TMAIeFnACHhmwAh4a8AIeHbACHh7wAh4jMAIeJ/ACHizwAh4vcAIeM7ACHjYwAh46MAIeO7ACHj0wAh5FsAIeSLACHkxwAh5NsAIeUHACHlMwAh5V8AIeWLACHlvwAh5hMAIeYnACHmOwAh5nMAIea/ACHnEwAh50cAIedvACHnlwAh5+sAIegTACHoOwAh6HMAIejjACHpUwAh6ZcAIem3ACHp1wAh6iMAIeprACHqiwAh6uMAIer/ACHrHwAh6ycAIesvACHrVwAh63MAIeuLACHrowAh698AIewfACHsXwAh7J8AIezbACHs/wAh7SMAIe0vACHtOwAh7VcAIe2HACHtzwAh7jMAIe5fACHugwAh7qMAIe7TACHvCwAh7zcAIe9/ACHvmwAh778AIe/zACHwHwAh8EcAIfBPACHwpwAh8M8AIfErACHxRwAh8W8AIfGbACHxxwAh8d8AIfHnACHx/wAh8h8AIfJDACHyXwAh8nMAIfKPACHyrwAh8tcAIfMPACHzIwAh80MAIfNrACHzrwAh88sAIfPnACH0AwAh9G8AIfSLACH0qwAh9McAIfT7ACH1JwAh9UsAIfVvACH1nwAh9dMAIfYXACH2WwAh9ncAIfazACH23wAh9wMAIfcvACH3cwAh958AIffbACH4EwAh+DcAIfhfACH4kwAh+LMAIfjfACH4/wAh+WsAIfmPACH5pwAh+bsAIfnPACH6CwAh+i8AIfpXACH6dwAh+pcAIfq3ACH61wAh+vcAIfsfACH7OwAh+48AIfurACH8EwAh/D8AIfxzACH8mwAh/LsAIfzrACH9HwAh/VsAIf2TACH+KwAh/q8AIf7PACH+8wAh/xcAIf9PACH/lwAh/6cAIf/3ACIA1wAiAZMAIgHfACIB/wAiAk8AIgMrACIDdwAiA5MAIgPjACIEMwAiBLcAIgTnACIFQwAiBYsAIgX/ACIGNwAiBpsAIga/ACIG8wAiB1MAIgdzACIHrwAiCBcAIgg/ACIIcwAiCN8AIgm7ACIJ3wAiCf8AIgqLACIKtwAiCucAIgsTACILMwAiC2sAIgubACIL8wAiDBcAIgw7ACIMXwAiDLcAIgzPACIM/wAiDSMAIg1vACINvwAiDfMAIg4DACIOTwAiDoMAIg6bACIOvwAiDucAIg8PACIPRwAiD2sAIg+HACIPrwAiD+cAIhAfACIQPwAiEE8AIhBjACIQdwAiEHsAIhCPACIQzwAiEPsAIhE7ACIRmwAiEasAIhHTACIR7wAiEgsAIhKPACISwwAiEwsAIhNDACITdwAiE6sAIhP7ACIUHwAiFEcAIhR/ACIU0wAiFSMAIhVzACIVrwAiFdcAIhYnACIWdwAiFr8AIhc/ACIXTwAiF68AIhgrACIYhwAiGQMAIhlfACIZqwAiGfMAIhonACIaYwAiGqMAIht3ACIbswAiHCcAIhxfACIcuwAiHOsAIh1fACIdzwAiHicAIh5zACIepwAiHysAIh+HACIgSwAiIK8AIiD/ACIhSwAiIZcAIiJDACIinwAiIvsAIiPLACIknwAiJOsAIiVXACIlmwAiJd8AIiYPACImUwAiJncAIibrACInFwAiJ1MAIiePACInzwAiKBMAIihrACIoowAiKOcAIikHACIpKwAiKVMAIimLACIprwAiKc8AIinjACIqAwAiKjcAIipfACIqjwAiKusAIisbACIrUwAiK4MAIivTACIr/wAiLD8AIiyDACIsrwAiLNsAIi1DACItiwAiLe8AIi4XACIuTwAiLn8AIi6vACIu+wAiLwMAIi9HACIvowAiL8sAIi/zACIwJwAiMFcAIjBzACIwuwAiMOMAIjEPACIxMwAiMV8AIjHHACIx+wAiMjsAIjKHACIy2wAiMwMAIjNHACIzewAiM78AIjP3ACI0LwAiNHsAIjSTACI0qwAiNOsAIjUjACI1WwAiNYsAIjWTACI10wAiNgcAIjYTACI2OwAiNosAIja/ACI3EwAiNz8AIjd7ACI38wAiOFMAIjiTACI42wAiOSMAIjlDACI5ewAiOacAIjnDACI6GwAiOmMAIjqvACI67wAiO0MAIjuHACI70wAiPCsAIjxTACI8gwAiPLcAIjznACI9GwAiPUMAIj1vACI9owAiPc8AIj4fACI+YwAiPrsAIj73ACI/UwAiP5MAIj+rACI/uwAiP9cAIkAHACJAPwAiQHMAIkDDACJBFwAiQUsAIkJLACJCbwAiQosAIkLDACJC9wAiQxcAIkMzACJDXwAiQ7cAIkPTACJEBwAiRCcAIkRPACJE3wAiRSMAIkVnACJFmwAiRdcAIkYHACJGPwAiRnsAIka7ACJGywAiRtsAIkb3ACJHEwAiRy8AIkdLACJHmwAiR98AIkfzACJIrwAiSQMAIkkrACJJUwAiSbsAIkn3ACJKIwAiSksAIkqnACJLIwAiS1sAIkurACJL5wAiTAsAIkwrACJMbwAiTI8AIkzTACJM8wAiTVMAIk17ACJNqwAiTfMAIk4LACJOJwAiTkcAIk5zACJOtwAiTucAIk8XACJPPwAiT4cAIk+rACJQHwAiUDsAIlBzACJQkwAiUM8AIlELACJRXwAiUXcAIlGrACJR1wAiUf8AIlIfACJSUwAiUpcAIlK7ACJSxwAiUvsAIlMzACJTZwAiU4sAIlPHACJT+wAiVDMAIlRrACJUqwAiVO8AIlUfACJVZwAiVa8AIlXLACJWBwAiVlMAIlaLACJWpwAiVuMAIldLACJXhwAiV6cAIlfnACJYNwAiWFsAIlh7ACJYqwAiWOcAIlkHACJZKwAiWV8AIlmHACJZzwAiWfsAIlofACJaRwAiWmMAIlqjACJa3wAiWwMAIlsjACJbTwAiW38AIlu/ACJb6wAiXBMAIlw/ACJcdwAiXKMAIlzfACJdBwAiXUMAIl1bACJdgwAiXY8AIl27ACJd4wAiXg8AIl6TACJevwAiXucAIl8PACJfNwAiX18AIl+HACJftwAiX9cAImAnACJgXwAiYUcAImF7ACJhrwAiYc8AImHrACJiEwAiYisAImJHACJiTwAiYlcAImKPACJilwAiYp8AImLDACJi7wAiYxsAImNDACJjZwAiZGcAImR/ACJk0wAiZPsAImVDACJlawAiZYsAImWjACJl1wAiZgMAImYLACJmMwAiZlsAImaPACJmtwAiZt8AImb/ACJnQwAiZ1sAImdnACJncwAiZ6MAImfDACJn8wAiZ/8AImgnACJoPwAiaHsAImifACJotwAiaPcAImkvACJpRwAiaXsAImmjACJp2wAiagcAImo7ACJqbwAiaqsAImrjACJrHwAia2MAImuPACJrvwAia+cAImv3ACJsEwAibEMAImxfACJsjwAibLsAImzXACJs+wAibSsAIm1LACJtewAibZsAIm3TACJt+wAibi8AIm5TACJuiwAibrMAIm7zACJvAwAibysAIm9DACJvbwAib4sAIm+zACJv1wAib/MAInBDACJwYwAicLMAInD/ACJxNwAicVcAInFzACJxjwAicasAInHDACJx5wAicgcAInInACJyPwAiclsAInKDACJynwAicr8AInL3ACJzCwAicysAInNbACJzjwAic78AInPzACJ0FwAidDMAInRLACJ0WwAidH8AInSjACJ0xwAidNcAInT7ACJ1IwAidWMAInWLACJ1rwAidecAInYHACJ2HwAidisAInZLACJ2cwAidpsAInbDACJ22wAidwMAIncrACJ3UwAid3sAInejACJ3ywAid/MAIngbACJ4QwAieGsAIniTACJ4uwAieOMAInkLACJ5MwAieVsAInmDACJ5qwAiedMAInn7ACJ6IwAieksAInpzACJ6mwAiesMAInrrACJ7EwAiezsAIntjACJ7iwAie7MAInvbACJ8AwAifCsAInxTACJ8ewAifKMAInzLACJ88wAifRsAIn1DACJ9awAifZMAIn27ACJ94wAifgsAIn4zACJ+WwAifoMAIn6rACJ+0wAifvsAIn8jACJ/SwAif3MAIn+bACJ/wwAif88AIn/nACKAGwAigCsAIoBPACKAcwAigJsAIoCrACKA0wAigPsAIoEjACKBSwAigVsAIoFzACKBnwAigccAIoHvACKCFwAigj8AIoJnACKCjwAigqsAIoK3ACKCxwAigt8AIoL3ACKDDwAigycAIoM7ACKDYwAig4sAIoOzACKD2wAihAMAIoQrACKEUwAihHsAIoSjACKEywAihPMAIoUbACKFQwAihWsAIoWTACKFuwAiheMAIoYLACKGMwAihlsAIoaDACKGqwAihtMAIob7ACKHIwAih0sAIodzACKHmwAih8MAIofrACKIEwAiiDsAIohjACKIiwAiiLMAIojbACKJAwAiiSsAIolTACKJewAiiaMAIonLACKJ8wAiihsAIopDACKKawAiipMAIoq7ACKKzwAiiucAIosPACKLLwAii0sAIot/ACKL3wAijB8AIoxXACKMhwAijMcAIo1HACKNZwAijZsAIo3HACKN7wAijiMAIo5DACKOawAijo8AIo7PACKPEwAijzcAIo9vACKPqwAij8sAIpC/ACKQ7wAikQ8AIpErACKRQwAikW8AIpGfACKRswAikcsAIpHrACKSJwAikkMAIpKvACKS+wAikycAIpNPACKTdwAik5cAIpOjACKT3wAilBcAIpRPACKUfwAilNMAIpUfACKVRwAilYMAIpWjACKVzwAilecAIpYbACKWXwAilqsAIpbTACKW6wAil3cAIpezACKX2wAil/MAIpgbACKYOwAimGMAIpkHACKZUwAimW8AIpmbACKZvwAimf8AIpo/ACKaZwAimpMAIprvACKbJwAim3MAIpvPACKcBwAinCsAIpx3ACKc0wAinQMAIp0rACKdUwAinbMAIp4DACKeYwAinoMAIp7DACKe+wAinysAIp9fACKfgwAin7cAIqADACKgHwAioGcAIqCPACKgzwAioP8AIqE7ACKhewAioZ8AIqHnACKiDwAioj8AIqJrACKinwAioscAIqMPACKjPwAio2sAIqObACKjxwAio/cAIqQjACKkVwAipIsAIqS/ACKk+wAipS8AIqVvACKl5wAipg8AIqZHACKmbwAipsMAIqb3ACKnRwAip3MAIqerACKnvwAip/8AIqh/ACKoxwAiqPMAIqkzACKpjwAiqbsAIqoTACKqUwAiqpMAIqrzACKrGwAiqz8AIqujACKr8wAirBcAIqxPACKsjwAirMMAIqz7ACKtMwAirXsAIq3bACKuKwAirmcAIq6XACKuxwAirw8AIq9HACKvbwAir6sAIq/TACKv9wAisCMAIrB3ACKwzwAisSMAIrGDACKxtwAisecAIrIrACKycwAistsAIrMDACKzPwAis38AIrPbACK0SwAitL8AIrUPACK1bwAitbcAIrYfACK2TwAitnsAIravACK2ywAituMAIrcDACK3OwAit4MAIre7ACK4BwAiuDMAIrhjACK4mwAiuLsAIrj7ACK5JwAiuW8AIrm3ACK51wAiufcAIroXACK6PwAiulsAIrqfACK6vwAiu0cAIruHACK7swAiu+sAIrwzACK8ZwAivIcAIrzHACK88wAivUsAIr2HACK9uwAiviMAIr5PACK+YwAivocAIr6fACK+0wAivu8AIr8nACK/SwAiv58AIr/nACLABwAiwCsAIsCTACLAywAiwP8AIsE/ACLBhwAiwcsAIsIHACLCMwAiwk8AIsM7ACLDcwAiw68AIsPPACLECwAixEcAIsR3ACLEuwAixOsAIsUHACLFQwAixW8AIsWXACLFywAixf8AIsYvACLGYwAixpsAIsc/ACLH9wAiyBsAIshPACLIdwAiyJ8AIsjDACLI/wAiySMAIslDACLJgwAiynMAIsrrACLLZwAiy5MAIswDACLMLwAizG8AIsyXACLM0wAizQ8AIs1jACLNwwAizjsAIs5nACLOlwAizsMAIs7nACLPCwAizycAIs83ACLPUwAiz3sAIs+nACLPxwAiz/sAItAXACLQLwAi0EsAItBzACLQpwAi0QcAItErACLRSwAi0WcAItGLACLRrwAi0e8AItJLACLScwAi0tMAItMPACLTRwAi04MAItOnACLT2wAi1BsAItRDACLUZwAi1KcAItTjACLVLwAi1XMAItWTACLVwwAi1fcAItYbACLWLwAi1l8AItaPACLWvwAi1vsAItcXACLXNwAi11cAItd/ACLXywAi2AsAItg3ACLYZwAi2KcAItjPACLZFwAi2TcAItl3ACLZywAi2f8AItorACLaVwAi2p8AItrDACLa5wAi2wsAIttDACLbiwAi28cAItvvACLcGwAi3D8AItyXACLcwwAi3O8AIt1DACLdawAi3asAIt33ACLeSwAi3mMAIt6TACLezwAi3vMAIt8jACLfZwAi36sAIt/vACLgMwAi4HMAIuC/ACLg/wAi4S8AIuGDACLhowAi4e8AIuIvACLifwAi4rsAIuLXACLjPwAi43cAIuOvACLj+wAi5CcAIuQ7ACLkiwAi5NcAIuT7ACLlQwAi5bMAIuW/ACLl+wAi5iMAIuZPACLmfwAi5p8AIubfACLm8wAi5xcAIudfACLnnwAi57sAIufbACLoHwAi6D8AIuhrACLojwAi6J8AIujXACLpGwAi6T8AIulXACLpawAi6ZcAIum3ACLp1wAi6gMAIuozACLqXwAi6psAIurnACLrIwAi62sAIuuTACLruwAi6+sAIuwTACLsLwAi7GcAIuyPACLs0wAi7PcAIu0nACLtRwAi7VMAIu1bACLtYwAi7WsAIu1zACLtewAi7YMAIu3XACLuQwAi7oMAIu6nACLu4wAi7x8AIu+LACLv8wAi8EcAIvCLACLwzwAi8QsAIvFrACLxiwAi8bcAIvHzACLyKwAi8mMAIvJ/ACLyzwAi8wcAIvN/ACL0FwAi9KcAIvTbACL1HwAi9VcAIvXLACL2QwAi9psAIvbvACL3OwAi95cAIve7ACL4AwAi+D8AIvh7ACL4uwAi+TcAIvlfACL5lwAi+gcAIvpfACL6qwAi+wMAIvtLACL7kwAi+9sAIvv3ACL8EwAi/EcAIvxnACL8vwAi/X8AIv5vACL+kwAi/rcAIv7vACL/JwAi/1MAIv+jACL/3wAi//sAIwArACMAZwAjAIcAIwC/ACMA2wAjAQcAIwErACMBawAjAYsAIwGzACMB5wAjAhMAIwI3ACMChwAjAqMAIwL7ACMDHwAjAz8AIwOHACMDuwAjA9cAIwQHACMEOwAjBGsAIwTHACME/wAjBUcAIwWHACMFwwAjBgcAIwZLACMGiwAjBucAIwcPACMHNwAjB1MAIwd3ACMHkwAjB8MAIwgLACMISwAjCIsAIwirACMI9wAjCT8AIwmLACMJ3wAjClMAIwtTACMLewAjC98AIwwjACMMRwAjDH8AIwyvACMM8wAjDR8AIw1PACMNewAjDe8AIw4fACMOMwAjDlsAIw6DACMOqwAjDtcAIw8LACMPJwAjD28AIw+bACMP+wAjECsAIxA/ACMQfwAjEKsAIxDrACMRDwAjEUsAIxFvACMRowAjEb8AIxIDACMSiwAjEssAIxLjACMTBwAjEzsAIxObACMT8wAjFB8AIxRfACMUowAjFS8AIxVnACMVywAjFfMAIxZLACMWwwAjFyMAIxc3ACMXgwAjF88AIxgDACMYEwAjGEMAIxi7ACMZCwAjGTMAIxlfACMZjwAjGcMAIxnTACMaGwAjGj8AIxpjACMahwAjGqsAIxrbACMbHwAjG2cAIxvLACMb4wAjG/sAIxwvACMccwAjHKsAIxz7ACMdGwAjHV8AIx23ACMeEwAjHksAIx6TACMeqwAjHr8AIx7TACMe/wAjHzcAIx9fACMflwAjH98AIyADACMgIwAjIFcAIyCXACMgywAjIP8AIyFTACMhlwAjIbsAIyHTACMiDwAjIj8AIyJbACMi2wAjIvsAIyNnACMj+wAjJF8AIyTrACMlUwAjJd8AIyZPACMmrwAjJvsAIyc/ACMnpwAjKCMAIyhXACMoqwAjKbcAIypfACMqlwAjKuMAIys7ACMrWwAjK9MAIyv/ACMsSwAjLIsAIyzPACMtDwAjLT8AIy1jACMtnwAjLhcAIy5vACMuqwAjLwsAIy9HACMvpwAjL8cAIy/7ACMwGwAjME8AIzCHACMw2wAjMUMAIzGvACMx9wAjMk8AIzKLACMyywAjMysAIzNTACMzgwAjM6cAIzRDACM0vwAjNN8AIzUPACM1QwAjNfMAIzYXACM2UwAjNpMAIzbHACM2+wAjNy8AIzdjACM3swAjOAMAIzhDACM4ZwAjOIsAIzizACM40wAjOQ8AIzkrACM5SwAjOX8AIzmfACM55wAjOgMAIzonACM6OwAjOmsAIzqrACM61wAjOwMAIzsfACM7RwAjO28AIzuXACM7zwAjO/MAIzwTACM8UwAjPIcAIzzHACM9EwAjPWcAIz2nACM9vwAjPdcAIz4jACM+dwAjPpcAIz67ACM+1wAjPwcAIz8/ACM/gwAjP6sAIz/jACNAIwAjQFsAI0B/ACNAswAjQPMAI0ErACNBTwAjQXMAI0GjACNBwwAjQe8AI0I/ACNCqwAjQwMAI0NbACNDkwAjQ/cAI0RbACNElwAjROsAI0U/ACNFowAjRgcAI0Z3ACNG5wAjRwsAI0dXACNHowAjR9MAI0gHACNIVwAjSHsAI0ifACNIzwAjSO8AI0kPACNJNwAjSWMAI0mDACNJqwAjSdMAI0n7ACNKLwAjSlMAI0qTACNKrwAjStsAI0tDACNLtwAjTGcAI0yjACNMywAjTcsAI03nACNN+wAjThcAI05XACNOcwAjTo8AI067ACNPFwAjTz8AI09vACNPqwAjT7MAI0+7ACNQ4wAjUncAI1LPACNTGwAjU/MAI1UbACNWawAjWDMAI1inACNZdwAjWpcAI1vfACNcSwAjXIsAI1ybACNcrwAjXO8AI12rACNe0wAjYB8AI2AnACNgWwAjYK8AI2DjACNiKwAjYp8AI2MLACNjPwAjY2sAI2OHACNj2wAjZA8AI2RHACNkWwAjZKsAI2TnACNlWwAjZXsAI2WzACNlxwAjZgcAI2YvACNmRwAjZnsAI2anACNmwwAjZwcAI2evACNn+wAjaC8AI2hrACNogwAjaK8AI2jfACNpRwAjaXcAI2mjACNprwAjahcAI2prACNqlwAjassAI2rzACNrIwAja6sAI2vLACNsFwAjbI8AI2zjACNtNwAjbYsAI22nACNubwAjbpsAI27PACNu8wAjb0sAI29/ACNvowAjb/8AI3BLACNwZwAjcIcAI3DrACNxUwAjcZcAI3G7ACNx3wAjcgcAI3I3ACNynwAjcscAI3L3ACNzGwAjc2MAI3PHACNz+wAjdCcAI3RPACN0lwAjdLsAI3TbACN1OwAjdWcAI3WHACN1/wAjdjcAI3Z7ACN2owAjds8AI3bnACN3EwAjdzMAI3dLACN3bwAjd5MAI3e/ACN30wAjd+sAI3gPACN4kwAjeMMAI3jfACN5BwAjeUsAI3lrACN5hwAjebsAI3nvACN6NwAjeksAI3pvACN6nwAjevsAI3sXACN7NwAje1sAI3ubACN77wAjfBMAI3xvACN8wwAjfR8AI307ACN9kwAjfisAI37nACN/FwAjf3cAI3+vACN/5wAjgCcAI4CDACOAxwAjgP8AI4ErACOBSwAjgWcAI4GjACOB3wAjgg8AI4JDACOCXwAjgpMAI4LDACOC6wAjgxcAI4NnACODwwAjg+sAI4QjACOEVwAjhJcAI4S7ACOE5wAjhS8AI4WHACOFpwAjhecAI4YHACOGQwAjhmMAI4aXACOGxwAjhvcAI4cfACOHRwAjh3MAI4enACOHywAjh/MAI4gjACOIQwAjiIsAI4i/ACOI7wAjiT8AI4lbACOJjwAjibsAI4n7ACOKOwAjinMAI4qTACOKvwAjiwcAI4srACOLWwAji48AI4u7ACOL/wAjjD8AI4xrACOMlwAjjLsAI4zfACONBwAjjTsAI41fACONowAjjecAI44rACOOcwAjjrMAI477ACOPQwAjj4sAI4/HACOP6wAjj/cAI5ATACOQTwAjkHMAI5CHACOQtwAjkM8AI5DnACOQ/wAjkR8AI5E/A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CP3pwAj988AI/fnACP4CwAj+DsAI/hjACP4jwAj+MsAI/kHACP5SwAj+YsAI/nXACP6KwAj+ncAI/rDACP68wAj+yMAI/tTACP7jwAj+78AI/vnACP8MwAj/HMAI/yzACP9BwAj/RcAI/1vACP9gwAj/bsAI/3bACP+EwAj/ksAI/5/ACP+rwAj/uMAI/8/ACP/jwAj/+MAJAADACQALwAkAGMAJACPACQA2wAkATsAJAFnACQBnwAkAdsAJAIjACQCawAkAp8AJALXACQDGwAkA18AJAOjACQD2wAkBAsAJARTACQEgwAkBJ8AJATDACQE3wAkBRMAJAU7ACQFUwAkBaMAJAW/ACQF0wAkBjcAJAZXACQGcwAkBo8AJAavACQGxwAkB1cAJAd/ACQHrwAkB+MAJAf/ACQIJwAkCHMAJAijACQJCwAkCT8AJAlbACQJdwAkCaMAJAnTACQJ8wAkCjMAJApLACQKewAkCqcAJAq3ACQK1wAkCvsAJAsjACQLSwAkC+sAJAwXACQMVwAkDHcAJAynACQMwwAkDOsAJA0DACQNHwAkDZ8AJA2vACQOowAkDssAJA73ACQPHwAkD0MAJA9XACQPowAkD9MAJBAHACQQKwAkEF8AJBCTACQQzwAkEPMAJBEnACQRVwAkEe8AJBLjACQTFwAkE8MAJBQHACQUwwAkFOMAJBWHACQVqwAkFcMAJBXLACQV3wAkFhcAJBZvACQWpwAkFu8AJBc3ACQXRwAkF2MAJBenACQX5wAkGC8AJBhzACQYgwAkGNMAJBlLACQZbwAkGZMAJBm3ACQZ+wAkGiMAJBpvACQarwAkGxMAJBtbACQbxwAkG/sAJBwzACQcjwAkHNMAJB07ACQdlwAkHhcAJB5zACQe8wAkH1cAJB/fACQgHwAkIG8AJCDfACQhGwAkIXcAJCGvACQiBwAkIk8AJCK3ACQi9wAkI1cAJCOTACQj4wAkJFMAJCRzACQkswAkJRMAJCVfACQlywAkJesAJCYPACQmTwAkJo8AJCbfACQnCwAkJycAJCdHACQncwAkJ38AJCevACQn7wAkKDMAJChXACQodwAkKJMAJCi/ACQo8wAkKRMAJClDACQpYwAkKYsAJCpLACQqawAkKrcAJCrfACQrFwAkK0sAJCtbACQrbwAkK4MAJCuXACQrqwAkK8MAJCvbA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CSrJwAkq28AJKubACSrzwAkq/cAJKwLACSsJwAkrFcAJKx/ACSsnwAkrMMAJK0LACStUwAkrZ8AJK3TACSuHwAkrncAJK6jACSuywAkrucAJK8TACSvVwAkr5MAJK/HACSwEwAksGcAJLC7ACSxFwAksVMAJLFzACSxiwAksacAJLG7ACSxzwAksfMAJLIXACSyPwAksmcAJLKXACSy0wAksw8AJLNbACSznwAks88AJLPzACS0IwAktFMAJLS3ACS1iwAktcMAJLYXACS2VwAktm8AJLanACS2vwAktuMAJLcjACS3QwAkt38AJLezACS4AwAkuEsAJLiXACS5MwAkuesAJLozACS6hwAkuvcAJLsDACS76wAku/sAJLxHACS8mwAkvN8AJL1DACS9VwAkvYsAJL2rACS+EwAkvosAJL8rACS/WwAkv5MAJMATACTAkwAkwLsAJMD7ACTBEwAkwVcAJMGHACTB1wAkwg8AJMIvACTCbwAkwrsAJMLnACTDJwAkw2cAJMOTACTDrwAkw9cAJMQDACTEMwAkxIcAJMSbACTEuwAkxNMAJMT7ACTFXwAkxcMAJMYzACTGrwAkxzsAJMd/ACTH7wAkyCMAJMhLACTIcwAkyJ8AJMjDACTJFwAkyT8AJMlrACTJowAkyb8AJMnnACTKDwAkyi8AJMpXACTKfwAkyqsAJMq/ACTK5wAkyw8AJMtPACTLvwAky9MAJMv7ACTMGwAkzEMAJMyDACTMswAkzPsAJM0fACTNUwAkzXcAJM3LACTN1wAkzhMAJM4nACTOOwAkzlMAJM5rACTOkwAkztcAJM7vACTPJwAkzz8AJM9XACTPgwAkz48AJM+XACTPnwAkz8sAJNAPACTQKwAk0F8AJNB7ACTQmwAk0McAJNDvACTREwAk0TsAJNF7ACTRkwAk0a8AJNHzACTSAwAk0kcAJNJTACTSmwAk0q8AJNL3ACTTDwAk01cAJNNfACTTowAk078AJNQHACTUGwAk1GMAJNSLACTUzwAk1N8AJNUXACTVMwAk1UsAJNVzACTVgwAk1aMAJNWzACTV0wAk1eMAJNYDACTWFwAk1jsAJNZPACTWcwAk1ocAJNarACTWvwAk1uMAJNbzACTXEwAk1zMAJNdHACTXgwAk148AJNebACTXtwAk18MAJNfPACTX3wAk1+8AJNf/ACTYDwAk2D8AJNhvACTYvwAk2M8AJNkXACTZNwAk2XsAJNnTACTaDwAk2l8AJNrHACTbAwAk2zMAJNt/ACTbqwAk288AJNwXACTcMwAk3GMAJNyDACTc1wAk3R8AJN1HACTdjwAk3e8AJN5TACTejwAk3tcAJN7/ACTfGwAk3z8AJN9zACTfpwAk3/8AJOBDACTgYwAk4IcAJOC3ACThBwAk4TcAJOF/ACTh0wAk4j8AJOKrACTi2wAk40MAJOOPACTjswAk4/sAJOQ7ACTkkwAk5NMAJOULACTlTwAk5XsAJOWTACTluwAk5jMAJOaHACTmuwAk5vMAJOdDACTngwAk59MAJOgrACToXwAk6JMAJOjTACTpjwAk6eMAJOofACTqcwAk6q8AJOrnACTrJwAk60sAJOt/ACTruwAk688AJOwLACTsWwAk7IMAJOzXACTtRwAk7ZMAJO2rACTt6wAk7iMAJO5rACTuqwAk7tcAJO8vACTvVwAk76sAJPADACTwiwAk8M8AJPEnACTxmwAk8icAJPJXACTymwAk8vsAJPNzACTzvwAk9B8AJPRnACT0xwAk9ScAJPVvACT14wAk9k8AJPa3ACT3CwAk93MAJPfTACT4GwAk+EcAJPhzACT47wAk+WcAJPnDACT6OwAk+n8AJPr7ACT7cwAk++cAJPxDACT8owAk/M8AJP1jACT9vwAk/iMAJP6DACT+/wAk/3cAJP/DACT/5wAlAAcAJQBPACUAiwAlAOMAJQErACUBjwAlAdsAJQJDACUCiwAlAtcAJQMnACUDqwAlA/sAJQRjACUEywAlBR8AJQWTACUF5wAlBi8AJQZfACUGowAlBtMAJQb/ACUHQwAlB6MAJQf7ACUIJwAlCGcAJQivACUI1wAlCPsAJQkXACUJMwAlCWMAJQmLACUJxwAlCgcAJQo3ACUKWwAlCoMAJQqrACUK6wAlC0sAJQwLACUMSwAlDIcAJQyrACUMswAlDPcAJQ1DACUNiwAlDe8AJQ5PACUOqwAlDvsAJQ9HACUPlwAlD9sAJRAnACUQdwAlEMMAJREXACURYwAlEbsAJRJTACUSowAlEvcAJRNHACUTjwAlE/cAJRQzACUUUwAlFKMAJRTnACUVEwAlFV8AJRWHACUV0wAlFe8AJRZDACUWswAlFwMAJRdvACUXywAlGEMAJRhzACUYnwAlGMsAJRjzACUZMwAlGcMAJRoDACUaWwAlGosAJRq3ACUa/wAlGysAJRu3ACUcIwAlHEcAJRxfACUckwAlHNcAJR0HACUdPwAlHXMAJR2nACUeAwAlHkMAJR6LACUe0wAlHwcAJR83ACUfbwAlH6sAJR/XACUgBwAlIDMAJSEnACUhQwAlIW8AJSGPACUhpwAlIa8AJSIDACUiUwAlIrcAJSMHACUjbwAlI9cAJSQHACUkXwAlJIMAJSS3ACUk6wAlJScAJSWXACUlzwAlJlMAJSabACUmywAlJwsAJScfACUnOwAlJ28AJSgHACUoTwAlKHsAJSinACUo4wAlKQsAJSkzACUpcwAlKccAJSoTACUqkwAlKtcAJSsjACUrTwAlK18AJSuHACUrzwAlK/sAJSwrACUsVwAlLIcAJSyzACUs4wAlLRcAJS1LACUthwAlLbsAJS33ACUuHwAlLl8AJS5/ACUuwwAlLuMAJS8nACUvSwAlL5MAJS+3ACUv/wAlMCMAJTBrACUwjwAlMNcAJTD/ACUxSwAlMXMAJTG/ACUx4wAlMisAJTJPACUylwAlMr8AJTMLACUzMwAlM38AJTOjACUz6wAlNA8AJTRXACU0fwAlNMsAJTTzACU1PwAlNWsAJTW7ACU15wAlNjcAJTZjACU2swAlNt8AJTcvACU3YwAlN7sAJTfvACU4RwAlOHMAJTjDACU47wAlOT8AJTlzACU5ywAlOf8AJTpXACU6iwAlOq8AJTr3ACU7gwAlPFsAJTx/ACU9DwAlPesAJT4TACU+vwAlP7cAJT/7ACVAiwAlQWcAJUGPACVBzwAlQg8AJUKjACVDgwAlQ68AJUPzACVENwAlRMcAJUWjACVFywAlRgsAJUZLACVG3wAlR78AJUfrACVILwAlSHMAJUkDACVJ3wAlSgcAJUpHACVKhwAlSxsAJUv7ACVMJwAlTGsAJUyvACVNUwAlTk8AJU5/ACVOxwAlTw8AJU+zACVQrwAlUN8AJVEnACVRbwAlUicAJVJfACVSrwAlUv8AJVOnACVT1wAlVB8AJVRnACVVHwAlVVcAJVWnACVV9wAlVqcAJVejACVX6wAlWJ8AJVmfACVZ6wAlWrsAJVvXACVcPwAlXPMAJV3zACVePwAlXvcAJV/7ACVgSwAlYP8AJWH/ACViSwAlYwMAJWQHACVkVwAlZQsAJWYLACVmVwAlZw8AJWgTACVoYwAlaSsAJWpLACVqnwAla2cAJWyHACVs2wAlbbcAJW4TACVu3wAlbzMAJXAPACVwawAlcJMAJXDHACVxBwAlcTsAJXFvACVxowAlcd8AJXIbACVyWwAlcpcAJXLfACVzHwAlc2cAJXOHACVz0wAlc+cAJXQjACV0VwAldGsAJXSnACV03wAldRcAJXVPACV1hwAldacAJXX7ACV2PwAldmcAJXa3ACV2vwAldtMAJXcLACV3HwAld1cAJXdrACV3owAld7cAJXfvACV4IwAleFcAJXiPACV4twAleQcAJXk/ACV5nwAleb8AJXnnACV6EwAlej8AJXprACV6lwAlescAJXr3ACV7JwAle1cAJXujACV73wAlfCcAJXxXACV8hwAlfLcAJXznACV8+wAlfTsAJX1PACV9jwAlfaMAJX3jACV99wAlfjcAJX5bACV+mwAlfr8AJX7/ACV/IwAlf2MAJX+HACV/xwAlf/8AJYAnACWAWwAlgJsAJYDPACWBAwAlgTcAJYFzACWBpwAlgeMAJYIbACWCUwAlgqcAJYLfACWDFwAlg0sAJYN/ACWDtwAlg/8AJYQXACWETwAlhHcAJYTjACWFPwAlhasAJYX7ACWGqwAlh6cAJYffACWIWwAliQ8AJYoPACWKSwAlissAJYubACWMtwAljQ8AJY2rACWOXwAlj18AJY+bACWQGwAlkNMAJZHXACWSFwAlkpsAJZNPACWUTwAllIsAJZULACWVwwAllscAJZcHACWXiwAlmD8AJZk/ACWZewAlmfsAJZqzACWbtwAlm/cAJZx7ACWdQwAlnmMAJZ6nACWfLwAln/cAJaEXACWhWwAloeMAJaK/ACWjCwAlo5sAJaRnACWkqwAlpTMAJaYPACWmWwAlpusAJacfACWnlwAlp7MAJafPACWn7wAlqA8AJagvACWoTwAlqG8AJaiPACWorwAlqM8AJajzACWpFwAlqT8AJalnACWplwAlqccAJan7ACWqNwAlqk8AJaqDACWqjwAlqqcAJarHACWq2wAlqv8AJasfACWrWwAlq7cAJawXACWsVwAlrNMAJaz3ACWtVwAlrbsAJa4bACWufwAlrqMAJa8DACWvKwAlr48AJa+7ACWwIwAlsE8AJbC3ACWw6wAlsVsAJbGHACWx7wAlsiMAJbKTACWytwAlsscAJbLXACWy5wAlsvcAJbMHACWzFwAlsycAJbM3ACWzRwAls1cAJbNnACWzdwAls4cAJbOXACWzpwAls7cAJbPHACWz1wAls+cAJbP3ACW0BwAltBcAJbQnACW0NwAltEcAJbRXACW0ZwAltHcAJbSHACW0lwAltKcAJbS3ACW0xwAltNcAJbTnACW09wAltQcAJbUXACW1JwAltTcAJbVHACW1VwAltWcAJbV3ACW1hwAltZcAJbWnACW1twAltccAJbXXACW15wAltfcAJbYHACW2FwAlticAJbY3ACW2RwAltlcAJbZnACW2dwAltocAJbaXACW2pwAltrcAJbbHACW21wAltucAJbb3ACW3BwAltxcAJbcnACW3NwAlt0cAJbdXACW3ZwAlt3cAJbeHACW3lwAlt6cAJbe3ACW3xwAlt9cAJbfnACW39wAluAcAJbgXACW4JwAluDcAJbhHACW4VwAluGcAJbh3ACW4hwAluJcAJbinACW4twAluMcAJbjXACW45wAluPcAJbkHACW5FwAluScAJbk3ACW5RwAluVcAJblnACW5dwAluYcAJbmXACW5pwAlubcAJbnHACW51wAluecAJbn3ACW6BwAluhcAJbonACW6NwAlukcAJbpXACW6ZwAluncAJbqHACW6lwAluqcAJbq3ACW6xwAlutcAJbrnACW69wAluwcAJbsXACW7JwAluzcAJbtHACW7VwAlu2cAJbt3ACW7hwAlu5cAJbunACW7twAlu8cAJbvXACW75wAlu/cAJbwHACW8FwAlvCcAJbw3ACW8RwAlvFcAJbxnACW8dwAlvIcAJbyXACW8pwAlvLcAJbzHACW81wAlvOcAJbz3ACW9BwAlvRcAJb0nACW9NwAlvUcAJb1XACW9ZwAlvXcAJb2HACW9lwAlvacAJb23ACW9xwAlvdcAJb3nACW99wAlvgcAJb4XACW+JwAlvjcAJb5HACW+VwAlvmcAJb53ACW+hwAlvpcAJb6nACW+twAlvscAJb7XACW+5wAlvvcAJb8HACW/FwAlvycAJb83ACW/RwAlv1cAJb9nACW/dwAlv4cAJb+XACW/pwAlv7cAJb/HACW/1wAlv+cAJb/3ACXABwAlwBcAJcAnACXANwAlwEcAJcBXACXAZwAlwHcAJcCHACXAlwAlwKcAJcC3ACXAxwAlwNcAJcDnACXA9wAlwQcAJcEXACXBJwAlwTcAJcFHACXBVwAlwWcAJcF3ACXBhwAlwZcAJcGnACXBtwAlwccAJcHXACXB5wAlwfcAJcIHACXCFwAlwicAJcI3ACXCRwAlwlcAJcJnACXCdwAlwocAJcKXACXCpwAlwrcAJcMLACXDHwAlw1sAJcNrACXDowAlw98AJcRDACXEdwAlxNMAJcTvACXFLwAlxXMAJcW3ACXGGwAlxj8AJcaTACXGzwAlxwcAJcc7ACXHlwAlx/8AJchfACXJGwAlyXMAJcl7ACXJrwAlyscAJcsrACXMPwAlzJ8AJc3TACXOUwAlz28AJc/XACXQ7wAl0VMAJdJvACXS1wAl0+8AJdRTACXVbwAl1dcAJdbvACXXUwAl2HMAJdjfACXaBwAl2nsAJdujACXcFwAl3TcAJd2jACXewwAl3y8AJd9PACXfbwAl348AJd+vACXf2wAl4AcAJeAvACXgVwAl4IMAJeCbACXgtwAl4NcAJeETACXhMwAl4VcAJeF3ACXhmwAl4ccAJeIbACXiPwAl4l8AJeK/ACXjCwAl4zsAJeNnACXjkwAl48MAJeQDACXkGwAl5EsAJeR7ACXkrwAl5OcAJeUPACXlQwAl5UsAJeWLACXlxwAl5fMAJeX7ACXmIwAl5msAJeaPACXmowAl5ucAJecTACXnRwAl53cAJeevACXn2wAl6BsAJehnACXoqwAl6PsAJekvACXpawAl6bMAJenzACXqGwAl6lcAJeqfACXq3wAl6xcAJetvACXrtwAl6/8AJewTACXsKwAl7F8AJeyPACXs2wAl7T8AJe2HACXtmwAl7cMAJe6LACXuqwAl7uMAJe+rACXv+wAl8DsAJfC/ACXxgwAl8acAJfHrACXyCwAl8kMAJfKDACXy6wAl82sAJfOTACXz4wAl9FMAJfSjACX1PwAl9Z8AJfXrACX2WwAl9mcAJfajACX24wAl90cAJfePACX3wwAl99sAJff3ACX4PwAl+GcAJfi7ACX5JwAl+TMAJfl/ACX5owAl+gMAJfo7ACX6iwAl+rMAJfsXACX7JwAl+48AJfv3ACX8bwAl/JsAJfzfACX9GwAl/TcAJf1fACX9ywAl/kcAJf5/ACX+iwAl/tMAJf7/ACX/HwAl/ysAJf8/ACX/jwAl/9cAJf/zACYANwAmAGsAJgBzACYAswAmANcAJgDjACYBBwAmATcAJgFTACYBowAmAbsAJgIfACYCRwAmApMAJgK3ACYC8wAmAzMAJgM/ACYDZwAmA48AJgPPACYECwAmBCMAJgQ7ACYETwAmBHsAJgSzACYE4wAmBQ8AJgVLACYFXwAmBZsAJgXjACYGewAmBp8AJgdTACYHZwAmB4cAJgfDACYH3wAmCAMAJggnACYINwAmCFsAJgh7ACYIpwAmCUsAJgljACYKBwAmCisAJgr7ACYLjwAmC/MAJgwvACYMUwAmDHsAJgyfACYMxwAmDQcAJg2TACYOQwAmDmsAJg6TACYOuwAmDusAJg83ACYPTwAmD38AJg/rACYQHwAmEFcAJhCDACYQmwAmEK8AJhC/ACYQ1wAmEOcAJhFHACYRnwAmEd8AJhIfACYSXwAmEqMAJhLvACYTTwAmE7cAJhQXACYUbwAmFM8AJhUTACYVWwAmFasAJhXPACYWDwAmFmMAJhZrACYWvwAmFv8AJhdHACYXZwAmF9cAJhgjACYYRwAmGJsAJhi/ACYY6wAmGRsAJhkrACYZawAmGZMAJhpbACYaewAmGzsAJhuDACYblwAmG8cAJhv3ACYcIwAmHJsAJhz/ACYdHwAmHXcAJh23ACYdzwAmHhcAJh5HACYejwAmHt8AJh8/ACYfnwAmH+sAJiBPACYgowAmIPsAJiEvACYhgwAmIacAJiIHACYiMwAmIncAJiLfACYjPwAmI38AJiPfACYkIwAmJDsAJiRvACYkhwAmJKsAJiVTACYmFwAmJmsAJiaLACYm/wAmJwsAJicnACYnWwAmJ4cAJiezACYoHwAmKCsAJiizACYpKwAmKW8AJinnACYqRwAmKp8AJitnACYr5wAmLCMAJix7ACYs8wAmLXcAJi3nACYuIwAmLmMAJi5vACYuewAmLscAJi7zACYvDwAmLyMAJi9/ACYvtwAmMCMAJjBPACYwlwAmMQsAJjFHACYxgwAmMfsAJjJPACYydwAmMrsAJjL/ACYzWwAmM5sAJjPfACYz+wAmNCMAJjRLACY0awAmNIsAJjTvACY1TwAmNX8AJjWjACY1uwAmNhMAJjYvACY2UwAmNqMAJjbfACY3BwAmNzMAJjdbACY3kwAmN+MAJjg3ACY4ZwAmOLMAJjj3ACY5QwAmOYsAJjnHACY6GwAmOl8AJjqjACY6/wAmOz8AJjuDACY8HwAmPIMAJjzjACY9LwAmPXsAJj3TACY9/wAmPicAJj5bACY+fwAmPqMAJj7fACY+/wAmPyMAJj9nACY/pwAmP8sAJkALACZAJwAmQGcAJkBvACZAqwAmQM8AJkEHACZBPwAmQXcAJkGfACZBuwAmQdsAJkIPACZCMwAmQkcAJkJnACZCvwAmQw8AJkMrACZDNwAmQ2cAJkOzACZD6wAmREMAJkRbACZEkwAmRM8AJkUjACZFcwAmRi8AJkZfACZG7wAmRwMAJkcvACZIAwAmSIsAJki/ACZJbwAmSdsAJkoPACZKQwAmSncAJkqfACZK3wAmS5cAJkxHACZMiwAmTMMAJkzXACZM6wAmTQMAJk03ACZNewAmTasAJk3vACZOEwAmTkMAJk5zACZOrwAmTvsAJk8vACZPTwAmT48AJk/jACZQFwAmUDMAJlBHACZQfwAmUN8AJlFbACZR7wAmUfsAJlJXACZSYwAmUocAJlKTACZStwAmUsMAJlLrACZS+wAmUy8AJlNPACZTcwAmU4sAJlOjACZTzwAmU/sAJlQPACZUJwAmVEsAJlRzACZUowAmVNMAJlULACZVRwAmVYcAJlXDACZV5wAmViMAJlZbACZWdwAmVpcAJlavACZW3wAmVx8AJldrACZXiwAmV/sAJlgfACZYPwAmWGcAJliLACZY5wAmWU8AJlm7ACZaLwAmWocAJlrjACZbGwAmWz8AJltjACZblwAmW9MAJlvzACZcHwAmXCcAJlxXACZc0wAmXPMAJl0XACZdSwAmXXcAJl2jACZd3wAmXgcAJl4nACZeUwAmXpsAJl7LACZe8wAmXyMAJl9rACZf1wAmYAcAJmBHACZgwwAmYOsAJmFLACZhgwAmYbcAJmHjACZiJwAmYkMAJmJvACZiywAmYxMAJmM3ACZjawAmY5MAJmOzACZj3wAmY/sAJmQrACZkSwAmZHMAJmS/ACZlHwAmZWcAJmWrACZlzwAmZfcAJmYjACZmvwAmZxcAJmdfACZncwAmZ5cAJmfPACZn7wAmaD8AJmifACZozwAmaT8AJmlzACZpvwAmaecAJmoXACZqSwAmaqcAJmszACZrtwAma+MAJmwHACZsFwAmbEMAJmyLACZswwAmbQMAJm1PACZtewAmbbcAJm3zACZuKwAmbmsAJm67ACZvGwAmb2sAJm/DACZwEwAmcEcAJnCTACZw4wAmcUMAJnGnACZx8wAmcl8AJnK7ACZzGwAmc3cAJnO7ACZz8wAmdD8AJnSjACZ09wAmdV8AJnXHACZ2EwAmdnsAJnbXACZ3RwAmeBMAJniTACZ4uwAmeNcAJnkLACZ5YwAmee8AJnpTACZ7GwAme6cAJnvjACZ8IwAmfKsAJnzrACZ9TwAmfdsAJn4zACZ+swAmfyMAJn+7ACZ/8wAmgCsAJoBjACaAvwAmgPcAJoEjACaBfwAmgasAJoHfACaCNwAmgl8AJoKPACaCwwAmgt8AJoLvACaDLwAmg0sAJoNrACaDrwAmg8sAJoQLACaEXwAmhNsAJoUXACaFbwAmhasAJoYDACaGOwAmhpcAJobTACaHMwAmh28AJoeTACaHuwAmh9MAJogDACaITwAmiI8AJojXACaJWwAmiWMAJomzACaKHwAminsAJorTACaLCwAmi1MAJouPACaL7wAmjHMAJoyrACaNEwAmjVcAJo2fACaOAwAmjkMAJo5fACaOvwAmjw8AJo9fACaPswAmkFMAJpCvACaRVwAmkbcAJpKDACaTHwAmk7cAJpPvACaUTwAmlK8AJpUPACaVbwAmlYsAJpXTACaV/wAmllMAJpaLACaW1wAmlycAJpdrACaXjwAml8cAJpgjACaYdwAmmKcAJpjjACaZBwAmmVMAJpmLACaZvwAmmgcAJpo3ACaamwAmmuMAJps3ACabgwAmm68AJpvXACacMwAmnHMAJpzjACadDwAmna8AJp3XACaedwAmntcAJp8TACafTwAmn3cAJp+rACafzwAmn+8AJqAjACagWwAmoH8AJqC3ACag6wAmoRcAJqFXACahiwAmobcAJqHfACah7wAmohMAJqJDACaiWwAmor8AJqLXACajAwAmozMAJqNjACajkwAmo88AJqQrACakpwAmpMcAJqTzACalKwAmpU8AJqWPACal1wAmpf8AJqZfACampwAmprcAJqbXACanNwAmp3MAJqeTACanqwAmp9MAJqf7ACaoGwAmqEsAJqh3ACaoswAmqRMAJqlLACapiwAmqcsAJqn3ACaqRwAmqnMAJqrDACaq/wAmqycAJqtrACarrwAmq8sAJqv/ACasUwAmrJcAJqz3ACatQwAmrasAJq33ACauHwAmrlMAJq63ACau5wAmrxsAJq97ACavjwAmr6MAJq+7ACav1wAmr/MAJrAjACawOwAmsFsAJrB/ACaw3wAmsQcAJrFnACaxzwAmsicAJrKLACay3wAmszcAJrO/ACa0JwAmtNMAJrVTACa1mwAmtc8AJrYbACa2ZwAmtqMAJrbXACa3FwAmtzMAJrd7ACa3owAmt9sAJrfjACa4DwAmuCMAJrg/ACa4XwAmuI8AJrjDACa48wAmuSMAJrlbACa5kwAmuaMAJrnLACa55wAmugMAJrovACa6ZwAmup8AJrqzACa61wAmuwsAJrs3ACa7ZwAmu4MAJrwnACa8MwAmvHMAJrzDACa9EwAmvU8AJr2LACa9xwAmvgMAJr4zACa+YwAmvn8AJr6bACa+rwAmvs8AJr73ACa/HwAmv0sAJr93ACa/2wAmv/cAJsATACbAVwAmwJsAJsCzACbBBwAmwUsAJsGTACbB+wAmwtsAJsMHACbDLwAmw18AJsOfACbD3wAmxA8AJsRDACbEZwAmxI8AJsS3ACbE4wAmxRsAJsVDACbFZwAmxY8AJsW/ACbGCwAmxlsAJsajACbG7wAmxx8AJsdLACbHhwAmx68AJsfvACbIOwAmyFsAJsiLACbIrwAmyNMAJskLACbJWwAmyY8AJsnDACbKCwAmymsAJsqrACbK/wAmy1MAJsujACbL0wAmzAMAJsxTACbMrwAmzOcAJs0/ACbNYwAmzZMAJs3fACbOEwAmzksAJs5/ACbOowAmzscAJs7rACbPGwAmzz8AJs93ACbPswAmz+8AJtAvACbQZwAm0JcAJtC3ACbQzwAm0P8AJtFDACbRbwAm0cMAJtH3ACbSBwAm0m8AJtKnACbS4wAm0yMAJtOHACbTtwAm0+sAJtQTACbUPwAm1IsAJtTnACbVEwAm1T8AJtWDACbVrwAm1ecAJtYXACbWpwAm1scAJtbjACbXEwAm14MAJtezACbXzwAm1+cAJtf/ACbYVwAm2M8AJtkjACbZZwAm2ZcAJtnHACbZ6wAm2fcAJtpXACba1wAm2wMAJtsbACbbQwAm24MAJtuXACbbqwAm2+cAJtwPACbcOwAm3F8AJtx7ACbclwAm3M8AJt0HACbdQwAm3dMAJt4LACbeNwAm3mcAJt6HACbetwAm3uMAJt8TACbfQwAm318AJt+3ACbf6wAm4DcAJuBvACbgqwAm4M8AJuDzACbhWwAm4ZMAJuHbACbh/wAm4iMAJuJTACbihwAm4qcAJuMPACbjcwAm468AJuPbACbkDwAm5DMAJuRvACbkkwAm5M8AJuT/ACblLwAm5XcAJuWnACbl7wAm5i8AJubrACbnlwAm58sAJuf/ACboNwAm6IMAJui7ACbpCwAm6VMAJumTACbpvwAm6fsAJuo7ACbqbwAm6r8AJusfACbrRwAm658AJuvLACbsPwAm7KMAJuzvACbtJwAm7XcAJu27ACbuAwAm7j8AJu5/ACbunwAm7usAJu8rACbvdwAm78cAJvAbACbwWwAm8HcAJvCvACbwywAm8QsAJvGDACbx6wAm8jcAJvJTACbyewAm8sMAJvMPACbzYwAm86sAJvPTACb0AwAm9CsAJvRPACb0VwAm9H8AJvTDACb03wAm9RMAJvU3ACb1iwAm9ccAJvY3ACb2awAm9oMAJvbHACb3DwAm9ysAJvdvACb3kwAm98MAJvfPACb4QwAm+H8AJvinACb47wAm+TMAJvlnACb5rwAm+e8AJvojACb6TwAm+osAJvrrACb7SwAm+4cAJvxHACb8hwAm/UsAJv2PACb9xwAm/eMAJv4zACb+UwAm/ncAJv6bACb+uwAm/wsAJv8vACb/hwAm/7MAJv/nACcAZwAnAMcAJwELACcBewAnAfMAJwKfACcDIwAnA9sAJwQ7ACcEWwAnBMMAJwUDACcFOwAnBXsAJwXLACcGEwAnBnMAJwanACcGxwAnBw8AJweXACcHtwAnCA8AJwh7ACcJJwAnCUsAJwmXACcJ9wAnCpcAJwq/ACcLDwAnC3MAJwwXACcMSwAnDIsAJwyrACcM6wAnDS8AJw2vACcOMwAnDoMAJw6rACcO0wAnDv8AJw8PACcPLwAnDzsAJw9LACcPawAnD3cAJw+LACcPrwAnD8sAJw/7ACcQEwAnED8AJxBzACcQqwAnEL8AJxDrACcRGwAnEWMAJxGjACcR9wAnEiMAJxJDACcS1wAnEzcAJxOrACcUCwAnFEsAJxSDACcU0wAnFRMAJxVPACcVvwAnFkMAJxaTACcWzwAnFxsAJxdHACcXkwAnF+MAJxhTACcY2wAnGU8AJxl/ACcZzwAnGh8AJxqbACcbJwAnG5MAJxv/ACccYwAnHN8AJx03ACcdnwAnHhcAJx6TACce/wAnHxsAJx9rACcfjwAnH7cAJx/nACcgGwAnIDcAJyBfACcgiwAnIKcAJyDTACcg8wAnIRsAJyFDACchfwAnIaMAJyHbACciLwAnIlcAJyKLACcixwAnIysAJyNfACcjmwAnI/8AJyRDACckjwAnJQMAJyUjACclRwAnJZcAJyW3ACcl2wAnJisAJyZbACcmjwAnJu8AJycbACcnTwAnJ6sAJyfXACcoCwAnKGcAJyijACco5wAnKVMAJymTACcp1wAnKkcAJyqTACcq5wAnK2MAJyuPACcrvwAnLBsAJyxPACcshwAnLOsAJy0nACctZwAnLdMAJy33ACcuFwAnLkMAJy5vACcuowAnLtcAJy8LACcvYwAnL7sAJy/nACcwJwAnMGcAJzCTACcwtwAnMOMAJzEvACcxewAnMaMAJzH7ACcySwAnMqsAJzLDACcy3wAnMwcAJzMnACczUwAnM3sAJzObACcztwAnNA8AJzRTACc0fwAnNM8AJzT7ACc1SwAnNXcAJzXHACc14wAnNiMAJzZjACc2lwAnNtcAJzbzACc3MwAnN5cAJzgfACc4vwAnOQsAJzkzACc59wAnOpcAJzrXACc7SwAnO38AJzuzACc77wAnPK8AJz2XACc9vwAnPlcAJz5zACc+rwAnPtsAJz8PACc/PwAnP0sAJz+rACc//wAnQB8AJ0BTACdAcwAnQJcAJ0C3ACdA5wAnQRcAJ0FXACdBiwAnQasAJ0HXACdB5wAnQgcAJ0IrACdCbwAnQpMAJ0LzACdDLwAnQ1MAJ0NzACdDrwAnQ+sAJ0QPACdEQwAnRJsAJ0UjACdFdwAnRY8AJ0WfACdF3wAnRfMAJ0Y3ACdGTwAnRpcAJ0a7ACdG4wAnRzcAJ0dzACdHtwAnSCMAJ0hDACdIWwAnSKMAJ0jHACdI6wAnST8AJ0l3ACdJswAnShsAJ0pfACdKpwAnSxsAJ0tDACdLYwAnS5MAJ0vTACdMDwAnTFsAJ0yLACdMywAnTQcAJ01TACdNcwAnTZ8AJ03bACdODwAnTk8AJ05/ACdOswAnTuMAJ08fACdPTwAnT3MAJ0+TACdPqwAnT9MAJ0/7ACdQJwAnUFMAJ1CPACdQwwAnUP8AJ1EXACdRNwAnUXcAJ1GfACdRxwAnUg8AJ1JfACdSewAnUqMAJ1LLACdTFwAnUysAJ1NXACdTewAnU6MAJ1O3ACdUDwAnVGcAJ1STACdVCwAnVVMAJ1V/ACdVqwAnVecAJ1YTACdWTwAnVpcAJ1bDACdXBwAnV0MAJ1efACdXywAnV+cAJ1gTACdYTwAnWKMAJ1i3ACdY2wAnWWsAJ1mrACdaIwAnWl8AJ1qrACdbFwAnW0sAJ1uPACdbpwAnW/8AJ1w/ACdcjwAnXQcAJ12LACddvwAnXgMAJ15zACdeswAnXwMAJ1+TACdftwAnX98AJ2AXACdgTwAnYL8AJ2DfACdhGwAnYUMAJ2HbACdh9wAnYicAJ2J3ACdiuwAnYx8AJ2NfACdjjwAnY7cAJ2QHACdkVwAnZLcAJ2UTACdlNwAnZV8AJ2WjACdl3wAnZgsAJ2ZHACdmgwAnZsMAJ2c7ACdnewAnZ7cAJ2f/ACdoOwAnaG8AJ2ifACdo1wAnaN8AJ2kLACdpPwAnaWsAJ2oHACdqVwAnamcAJ2qnACdqywAnau8AJ2tDACdrUwAna5MAJ2u3ACdr0wAna/MAJ2wjACdsVwAnbIsAJ2yvACdszwAnbRMAJ203ACdtWwAnbXsAJ22/ACdt0wAnbg8AJ25bACduqwAnbvsAJ287ACdvYwAnb6MAJ2/PACdv2wAnb+cAJ2/zACdv/wAncAsAJ3AXACdwIwAncD8AJ3BbACdwfwAncOsAJ3FDACdxdwAncb8AJ3HnACdyWwAncocAJ3KjACdyywAnct8AJ3LzACdzgwAnc7MAJ3PzACd0KwAndMcAJ3T7ACd1OwAndXsAJ3XDACd18wAndlsAJ3azACd29wAndxcAJ3cvACd3VwAnd28AJ3eXACd3zwAnd/cAJ3gzACd4awAneJsAJ3jbACd5HwAneXMAJ3nXACd59wAnehMAJ3onACd6bwAnewcAJ3s3ACd7bwAne6sAJ3vzACd8EwAnfDsAJ3xvACd82wAnfU8AJ32LACd9owAnfesAJ34DACd+GwAnfmMAJ357ACd+wwAnftMAJ37jACd/IwAnf18AJ3+jACd/zwAnf+cAJ4A7ACeAlwAngOsAJ4EjACeBfwAngccAJ4IbACeCdwAngsMAJ4MXACeDIwAng2sAJ4OTACeD4wAnhLsAJ4V3ACeFxwAnhgcAJ4ZDACeGfwAnhpMAJ4avACeGzwAnhvsAJ4cPACeHPwAnh7MAJ4fnACeIXwAniIcAJ4jzACeJIwAniZcAJ4mzACeJ3wAnik8AJ4p/ACeK8wAni2cAJ4ujACeLrwAni9cAJ4wjACeMUwAnjJcAJ4y7ACeNEwAnjUMAJ41nACeNjwAnja8AJ43TACeOFwAnjjsAJ45jACeOiwAnjssAJ477ACePIwAnj0cAJ49/ACePxwAnkBcAJ5A7ACeQewAnkLMAJ5DrACeRRwAnkZMAJ5HXACeSKwAnkncAJ5KfACeSqwAnktMAJ5LfACeTCwAnkzMAJ5NLACeTcwAnk7sAJ5P7ACeUHwAnlCcAJ5RTACeUowAnlNsAJ5ULACeVOwAnlWsAJ5WnACeV3wAnlisAJ5Z7ACeWmwAnlusAJ5eHACeYAwAnmDMAJ5h7ACeYwwAnmO8AJ5kTACeZUwAnmcsAJ5nzACeaJwAnmlcAJ5qDACeaqwAnmtMAJ5r7ACebIwAnm0MAJ5tjACebwwAnm+cAJ5wXACecUwAnnIMAJ5zLACedCwAnnVcAJ52XACed4wAnngcAJ543ACeeawAnnosAJ567ACee7wAnnycAJ59fACeflwAnn88AJ5/vACegIwAnoEMAJ6BjACegkwAnoOMAJ6EvACehawAnoacAJ6HjACeiLwAnoncAJ6K7ACei/wAnozsAJ6N7ACejvwAno+MAJ6QLACekNwAnpF8AJ6SHACekrwAnpMMAJ6TfACelNwAnpa8AJ6X3ACemPwAnppsAJ6brACenTwAnp48AJ6e3ACen4wAnp/8AJ6gzACeoewAnqMMAJ6kHACepRwAnqZcAJ6nnACeqQwAnqm8AJ6qjACeq5wAnqxMAJ6tPACerbwAnq7sAJ6vzACesPwAnrIsAJ6zDACetAwAnrV8AJ62XACettwAnrdMAJ63nACeuAwAnrhcAJ647ACeuVwAnrmsAJ653ACeumwAnrrcAJ67/ACevJwAnr2MAJ6+7ACev7wAnsDcAJ7CDACexZwAnsYsAJ7HDACeyBwAnskcAJ7J7ACeyjwAnsvsAJ7NTACezswAntC8AJ7SHACe0swAntQ8AJ7VbACe11wAnticAJ7Z3ACe25wAntzMAJ7dfACe3qwAnt8cAJ7fzACe4VwAnuIsAJ7irACe45wAnuTcAJ7lnACe5lwAnueMAJ7oTACe6XwAnuncAJ7qrACe6uwAnuucAJ7sXA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ChXqwAoV7sAKFfLAChX5wAoV+8AKFgPAChYJwAoWF8AKFh/AChYpwAoWMcAKFjvAChY+wAoWRcAKFkvAChZWwAoWZsAKFnbAChZ9wAoWhMAKFobAChaOwAoWlcAKFpzAChajwAoWqsAKFrHACha8wAoWx8AKFtLAChbdwAoW5MAKFuvAChbywAoW+cAKFwPAChcmwAoXKcAKFzPAChc9wAoXTcAKF1XAChdewAoXbcAKF3jAChd/wAoXkcAKF5jAChedwAoXpcAKF6nACherwAoXu8AKF8bAChfSwAoX6MAKF/DAChgAwAoYGsAKGCLAChgwwAoYNcAKGEPAChhKwAoYVcAKGF7AChhrwAoYc8AKGH/AChiIwAoYlcAKGJzAChigwAoYpMAKGKbAChiowAoYr8AKGMbAChjSwAoY5MAKGPnAChkEwAoZDsAKGRzAChkjwAoZMsAKGT7AChlIwAoZWMAKGWPAChl7wAoZisAKGZvAChmlwAoZqcAKGbPAChm9wAoZx8AKGdfAChnhwAoZ6MAKGfXAChn/wAoaD8AKGiHAChotwAoaPMAKGlHAChpjwAoacsAKGoHAChqQwAoapMAKGrbAChrLwAoa4sAKGv/AChsTwAobJ8AKGzbAChs7wAobP8AKG0vAChtXwAobY8AKG27ACht9wAobicAKG5XAChukwAobssAKG8LAChvYwAob7sAKHArAChwdwAocJsAKHDrAChxUwAocYsAKHHHAChyCwAocksAKHKfAChy2wAocxsAKHMrAChzPwAoc1sAKHN/AChztwAoc+cAKHQTACh0bwAodLcAKHTvACh1HwAodUcAKHVbACh1wwAodesAKHYfACh2ZwAodosAKHarACh2ywAodvMAKHcXACh3TwAod48AKHfHACh4KwAoeEsAKHi7ACh5GwAoeXcAKHmvACh53wAoehMAKHpfACh6kwAoesMAKHrnACh7OwAoe18AKHu/ACh8FwAofD8AKHxvACh8nwAofOMAKHz/ACh9VwAofXcAKH3HACh+IwAofn8AKH6zACh+0wAoft8AKH77ACh/EwAof0cAKH9jACh/qwAof98AKIBHACiAcwAogJcAKIDLACiA/wAogTMAKIFTACiBhwAoghcAKIKLACiDFwAog3cAKIPfACiERwAohKcAKITPACiFNwAohZ8AKIX3ACiGhwAohs8AKIcTACiHWwAoh5MAKIf3ACiIVwAoiLsAKIj3ACiJTwAoiYsAKInjACiKOwAoipMAKIrrACiLVwAoi7sAKIwzACiMiwAojOMAKI0XACiNbwAojYcAKI23ACiN3wAoje8AKI4bACiOXwAojmsAKI53ACiOgwAojo8AKI6bACiOpwAojrMAKI6/ACiOywAojtcAKI7jACiO7wAojvsAKI8HACiPEwAojx8AKI8rACiPNwAoj0MAKI9PACiPWwAoj2cAKI9zACiPfwAoj4sAKI+XACiPowAoj68AKI+7ACiPxwAoj9MAKI/fACiP6wAoj/cAKJADACiQDwAokBsAKJAnACiQMwAokD8AKJBLACiQVwAokGMAKJBvACiQewAokIcAKJCTACiQnwAokKsAKJC3ACiQwwAokM8AKJDbACiQ5wAokPMAKJD/ACiRCwAokRcAKJEjACiRLwAokTsAKJFHACiRUwAokV8AKJFrACiRdwAokYMAKJGPACiRmwAokacAKJGzACiRvwAokcsAKJHXACiR4wAoke8AKJH7ACiSBwAokhMAKJIfACiSKwAokjcAKJJDACiSTwAoklsAKJJnACiScwAokn8AKJKLACiSlwAokp8AKJKnACiSrwAokrcAKJK/ACiSxwAoks8AKJLTACiS1wAoktsAKJLfACiS4wAokucAKJLrACiS7wAokvcAKJL/ACiTBwAokw8AKJMXACiTHwAokycAKJMvACiTNwAokz8AKJNHACiTTwAok1cAKJNfACiTZwAok28AKJN3ACiTfwAok4cAKJOPACiTlwAok58AKJOnACiTrwAok7cAKJO/ACiTxwAok88AKJPXACiT3wAok+cAKJPvACiT9wAok/8AKJQHACiUDwAolBcAKJQfACiUJwAolC8AKJQ3ACiUPwAolEcAKJRPACiUVwAolF8AKJRnACiUbwAolHcAKJR/ACiUhwAolI8AKJSXACiUnwAolKcAKJSvACiUtwAolL8AKJTHACiUzwAolNcAKJTfACiU5wAolO8AKJT3ACiU/wAolQcAKJUPACiVFwAolR8AKJUnACiVLwAolTcAKJU/ACiVRwAolU8AKJVXACiVXwAolWcAKJVvACiVdwAolX8AKJWHACiVjwAolZcAKJWfACiVpwAola8AKJW3ACiVvwAoleMAKJYHACiWKwAoll8AKJaTACiW1wAolysAKJc3ACiXWwAol68AKJfHACiYCwAomB8AKJhXACiYjwAomKsAKJjHACiY4wAomPsAKJkjACiZTwAomXcAKJmfACiZvwAomdcAKJnzACiaIwAomksAKJp7ACiapwAomtMAKJsLACibIwAom2cAKJuvACib4wAonDMAKJx7ACic2wAonQcAKJ1XACidkwAoncMAKJ4XACieRwAonnMAKJ7DACifUwAon5MAKJ/HACigAwAooCMAKKBHACigqwAooPcAKKE7ACihxwAooiMAKKJbACiibwAoorcAKKLfACijOwAoo5MAKKPzACikhwAopLcAKKTvACilBwAopRcAKKVXACilhwAopaMAKKW7ACil5wAopgcAKKYzACimfwAoppcAKKa/ACim5wAopw8AKKcbACinVwAop78AKKfnACioEwAoqC8AKKhzACioqwAoqN8AKKkrACipVwAoqZsAKKnvACiqKwAoqo8AKKqzACiq/wAoqx8AKKtnACirtwAoq+8AKKxHACiskwAorL8AKK0jACitbwAorXsAKK2LACit1wAorhsAKK5HACiucwAorq8AKK7bACivAwAorzsAKK+HACiwDwAosEMAKLDDACixCwAosTMAKLF/ACixjwAosbMAKLHrACiyTwAosn8AKLK7ACizCwAos18AKLPbACi0AwAotDcAKLR3ACi0qwAotNMAKLT/ACi1LwAotWMAKLWnACi2CwAotn8AKLbPACi3HwAot2sAKLezACi30wAot+cAKLgrACi4awAouKMAKLjzACi5NwAouU8AKLmPACi5/wAouisAKLp/ACi6+wAou2sAKLuzACi74wAovB8AKLx/ACi8swAovPsAKL0rACi9XwAovacAKL3vACi+HwAovmcAKL6vACi+5wAovwsAKMULACjFLwAoyyMAKMtnACjL5wAozC8AKMyrACjM5wAozQ8AKM1DACjNTwAozWsAKM17ACjNowAozbsAKM3fACjODwAozisAKM6DACjO4wAoz3cAKM/DACjP9wAo0C8AKNCPACjRIwAo0XsAKNHTACjSAwAo0mcAKNJ/ACjSnwAo0wMAKNM3ACjTiwAo08sAKNPrACjUIwAo1FcAKNRnACjUpwAo1PMAKNVHACjVmwAo1cMAKNXfACjWrwAo1v8AKNcjACjXTwAo12cAKNd/ACjXnwAo1+8AKNgPACjYVwAo2J8AKNjTACjZBwAo2TMAKNlbACjZkwAo2cMAKNnvACjaCwAo2k8AKNpnACjagwAo2qcAKNrHACja3wAo2v8AKNsXACjbQwAo218AKNt/ACjbkwAo26cAKNu3ACjbxwAo298AKNwDACjcHwAo3D8AKNxfACjckwAo3PsAKN07ACjdawAo3ecAKN7LACjfawAo33sAKN+PACjfmwAo36sAKN/DACjf7wAo4BsAKOAnACjgjwAo4PcAKOFPACjhdwAo4fsAKOJzACjigwAo4scAKOMvACjjpwAo4/sAKOQ/ACjk4wAo5WMAKOXnACjmiwAo5s8AKOb7ACjnIwAo508AKOdzACjnpwAo59MAKOfjACjn7wAo5/sAKOgHACjoHwAo6FcAKOibACjo3wAo6Q8AKOk/ACjpZwAo6Y8AKOnDACjqFwAo6i8AKOpvACjqnwAo6ssAKOrrACjrJwAo608AKOu7ACjsAwAo7DsAKOxzACjskwAo7PMAKO03ACjtawAo7acAKO3fACjt+wAo7l8AKO5zACjutwAo7wcAKO8/ACjvfwAo78MAKPAPACjwLwAo8EsAKPCLACjwpwAo8LsAKPDnACjw9wAo8QMAKPErACjxWwAo8YMAKPGPACjx5wAo8gsAKPIzACjyWwAo8osAKPKXACjyzwAo8wsAKPMnACjzMwAo81MAKPOTACjzvwAo89cAKPP7ACj0KwAo9GcAKPSPACj0wwAo9OcAKPUDACj1HwAo9UsAKPWDACj1owAo9gsAKPZfACj2nwAo9tcAKPcDACj3VwAo96sAKPf3ACj4PwAo+JMAKPjfACj5JwAo+V8AKPmTACj5xwAo+esAKPofACj6PwAo+lcAKPpzACj6lwAo+rsAKPrfACj68wAo+y8AKPtrACj7kwAo+98AKPwbACj8UwAo/JMAKPzPACj9BwAo/TsAKP1fACj9jwAo/c8AKP3/ACj+JwAo/mcAKP5zACj+twAo/uMAKP8LACj/UwAo/4cAKP+rACj/+wApADcAKQBzACkAlwApALMAKQDzACkBYwApAd8AKQIbACkCRwApArcAKQMPACkDNwApA38AKQPvACkERwApBLcAKQUbACkFVwApBecAKQYPACkGrwApBzcAKQdPACkHawApB8MAKQfvACkILwApCGsAKQkHACkJWwApCacAKQn3ACkKPwApCp8AKQtDACkLewApC8cAKQyXACkMywApDPsAKQ1bACkNewApDbsAKQ3XACkOIwApDlMAKQ7TACkO4wApDzcAKQ/XACkP/wApEFsAKRCfACkRewApEg8AKRJTACkSuwApEwMAKRNbACkTcwApE6MAKRO7ACkT4wApFC8AKRRvACkUlwApFL8AKRTzACkVFwApFWMAKRWLACkVxwApFgcAKRYnACkWZwApFpcAKRbDACkW3wApFvsAKRcTACkXUwApF68AKRf3ACkYRwApGG8AKRibACkZBwApGT8AKRnjACkaiwApGssAKRr/ACkbRwApG38AKRvjACkcpwApHQsAKR13ACkdnwApHcsAKR4HACkeNwApHlMAKR6XACkevwApHu8AKR73ACkfMwApH0cAKR9vACkfnwApIBcAKSAzACkgUwApIIcAKSCnACkgxwApIb8AKSHXACkh9wApIf8AKSIjACkiOwApInMAKSKnACkizwApIxsAKSNnACkjswApI/8AKSRHACkkkwApJN8AKSUrACklcwApJb8AKSYHACkmUwApJpsAKSbnACknLwApJ3cAKSfDACkoDwApKFcAKSifACko5wApKTMAKSl7ACkpwwApKgsAKSpTACkqnwApKusAKSs3ACkrfwApK6MAKSvHACksNwApLGMAKSzfACktKwApLXsAKS2rACktswApLdMAKS3rACkuPwApLncAKS6vACkuywApLusAKS8TACkvSwApL2sAKS+TACkv5wApMDsAKTDnACkxkwApMb8AKTIfACkyewApMucAKTL/ACkzSwApM38AKTOrACkz1wApM+8AKTQ7ACk1BwApNUsAKTWTACk15wApNhcAKTZHACk2ZwApNosAKTbnACk3PwApN3MAKTejACk3xwApN+8AKThzACk4qwApOO8AKTkfACk5WwApOZcAKTnnACk6TwApOnsAKTq/ACk7IwApO2cAKTvDACk8FwApPG8AKTyjACk83wApPScAKT07ACk9awApPacAKT3bACk+FwApQBcAKUBTAClApwApQLMAKUDfAClA7wApQS8AKUF3AClBuwApQd8AKUIHAClCSwApQpcAKULHAClC2wApQxMAKUNLAClDdwApQ6sAKUPfAClEDwApRGcAKUR7AClEqwApRNsAKUULAClFPwApRYMAKUXTAClGRwApRmcAKUaTAClGzwApRv8AKUcvAClHXwApR6MAKUgTAClITwApSKMAKUkbAClJVwApSbcAKUnvAClKDwApSl8AKUp/AClKowApS0MAKUtrAClLdwApS5sAKUvPAClMBwApTDsAKUybAClM0wApTRsAKU03AClNcwApTZcAKU27AClN3wApTgMAKU4nAClOTwApToMAKU6jAClOrwApTtcAKU7zAClPEwApTx8AKU9bAClPqwApT+cAKVAnAClQdwApUJ8AKVDHAClRBwApUUcAKVGLAClR4wApUgcAKVIrAClSbwApUxsAKVOvAClT7wApVEcAKVRnAClVQwApVf8AKVZPAClWfwApVpsAKVbrAClXbwApV6MAKVe3AClX7wApWGcAKVk/AClaJwApWl8AKVpvAClarwApWtMAKVrrAClbDwApW0MAKVt7AClbuwApXAsAKVxLAClcmwApXNsAKV0LACldTwApXZsAKV3nACleHwApXlMAKV6LACle3wApXxsAKV9LAClfkwApX+cAKWALAClgWwApYI8AKWC/AClg6wApYScAKWFXAClhfwApYbcAKWHfAClh+wApYh8AKWJPACliewApYpcAKWLTACljMwApY5MAKWO7AClkUwApZHMAKWSnACllAwApZY8AKWW/ACll7wApZlMAKWa/AClnHwApZ3MAKWejACln3wApaCsAKWg7ACloSwApaQcAKWnHAClp5wApagcAKWo7AClqZwAparMAKWrXAClq+wApayMAKWuzAClrywApa/cAKWwDAClsMwApbGcAKWynACls1wApbWMAKW2bAClt3wApbgsAKW4/AClu8wApbzcAKW+XAClv4wApcBcAKXA7AClwgwApcRMAKXFTAClxiwApcbMAKXJTAClyiwApcr8AKXL/AClzIwApc18AKXOfAClzywApdAsAKXQ7ACl0jwApdLMAKXT7ACl1RwApdXMAKXWXACl1twApddMAKXYrACl2MwApdnsAKXbTACl3BwApdxMAKXdDACl3ewApd6MAKXfLACl38wApeB8AKXhHACl41wApeZ8AKXpDACl6TwApetcAKXrnACl71wApfNMAKXz/ACl92wApfh8AKX5nACl+nwApftsAKX7jACl/HwApf28AKX+TACl/uwApf/MAKYAfACmAZwApgLcAKYDfACmBCwApgYcAKYG7ACmCEwApglcAKYJzACmClwApgtsAKYL/ACmDGwApg1cAKYN/ACmDrwApg9sAKYQLACmEKwAphE8AKYSjACmFIwAphbsAKYXjACmGJwAphksAKYbPACmHVwAph4cAKYfLACmINwApiF8AKYiHACmIvwApiO8AKYkPACmJLwApiUcAKYlzACmJywApig8AKYpDACmKdwApirMAKYrrACmLEwApizsAKYtjACmLiwApi7MAKYvfACmMFwApjEcAKYxjACmMfwApjJ8AKYzHACmM6wApjQMAKY3XACmN8wApjisAKY5bACmOiwApjqMAKY67ACmO3wApjvcAKY8XACmPdwApj5sAKY/DACmP5wApkBMAKZA/ACmQUwApkHMAKZCbACmQrwApkMcAKZDjACmRFwApkUsAKZF/ACmRpwApkd8AKZITACmSRwApknsAKZKjACmS3wApkxsAKZNXACmTkwApk9MAKZQfACmUWwAplH8AKZTLACmU+wAplTMAKZVDACmVUwAplXsAKZXTACmWQwAplo8AKZavACmW5wAplwcAKZc/ACmXiwApl/cAKZhHACmYhwApmLsAKZjTACmZFwApmTcAKZlfACmakwApmpsAKZqjACmaqwApmrcAKZrLACmbBwApm1MAKZt7ACmbpwApm98AKZwjACmcWwApnJsAKZzfACmdFwApnWMAKZ2bACmd8wApnfsAKZ4/ACmeZwApnpcAKZ7HACme8wApn0sAKZ9zACmfkwApn8sAKaAHACmgUwApoGMAKaCPACmgvwApoQsAKaFDACmhkwApoc8AKaIfACmiWwApoqMAKaLXACmi+wApowcAKaMzACmjRwApo5MAKaPHACmkDwAppEMAKaSDACmk1wAppRcAKaVrACmlqwAppfcAKaYvACmmgwAppsMAKacDACmnLwApp3cAKaerACmn7wApqB8AKahHACmobwApqH8AKaivACmoxwApqPsAKakjACmpSwApqX8AKamfACmp8wApqjcAKap7ACmqrwApquMAKasDACmrXwApq6sAKavzACmsJwAprF8AKayjACms0wAprQMAKa1fACmtpwAprgcAKa5TACmufwAprrMAKa7PACmvDwAprzsAKa9bACmvYwApr5cAKa+zACmwCwApsE8AKbCDACmwnwApsNsAKbEDACmxKwApsTsAKbFfACmxkwApsecAKbInACmyPwApsp8AKbLXACmzUwAps48AKbQPACm0SwAptMsAKbT/ACm1dwAptYMAKbXXACm16wAptkcAKbZ7ACm29wAptysAKbejACm3ywApuDsAKbh7ACm4/wApuT8AKbnDACm5+wApuncAKbq3ACm7OwApu2cAKbvXACm8CwApvIMAKbyzACm9JwApvTcAKb2PACm9nwApvfcAKb4PACm+bwApvosAKb7vACm+/wApv1cAKb9nACm/vwApv98AKcBDACnAhwApwQsAKcE/ACnBswApwdMAKcI3ACnCgwApww8AKcNDACnDuwApw9sAKcRDACnEcwApxOcAKcT/ACnFXwApxacAKcYzACnGfwApxw8AKccjACnHfwApx5sAKcf/ACnIKwApyJsAKcizACnJEwApyRsAKclrACnJhwApyesAKcovACnKtwApytMAKcs3ACnLXwApy8sAKcvbACnMMwApzD8AKcyTACnM9wApzTcAKc27ACnN6wApzgMAKc4/ACnOZwApzn8AKc7fACnPBwApz3MAKc+rACnP5wAp0E8AKdCDACnQuwAp0R8AKdFbACnRmwAp0gcAKdI/ACnSewAp0uMAKdMfACnTUwAp068AKdPTACnT/wAp1EcAKdR/ACnUwwAp1O8AKdUDACnVEwAp1VMAKdVjACnVowAp1bMAKdXzACnWIwAp1msAKdaXACnWswAp1ssAKdbjACnXAwAp10sAKdd3ACnXpwAp18MAKdffACnYGwAp2EsAKdhrACnYmwAp2MsAKdkHACnZSwAp2bcAKdn3ACnaPwAp2q8AKdrzACnbKwAp208AKduPACnbqwAp28MAKdvnACncBwAp3CMAKdxTACnciwAp3J8AKdzLACnc7wAp3U8AKd2TACnd3wAp3jcAKd5zACneowAp3usAKd8rACnfUwAp33cAKd+jACngKwAp4OsAKeGnACniWwAp4o8AKeK/ACni5wAp4zsAKeOjACnjwwAp5C8AKeR3ACnkpwAp5N8AKeUPACnlQwAp5X8AKeWfACnl4wAp5i8AKeZfACnmawAp5nMAKeZ7ACnmpwAp5tcAKecjACnnUwAp52MAKeeLACnnvwAp5/8AKegrACnoTwAp6JsAKej3ACnpGwAp6WcAKeqfACnq2wAp6x8AKetnACnrowAp66sAKevfACnsrwAp7OcAKe0TACntKwAp7UcAKe1rACntmwAp7c8AKe3zACnuFwAp7h8AKe4nACnuLwAp7jcAKe5HACnuhwAp7rMAKe7DACnuywAp7tMAKe7bACnu7wAp7vcAKe8XACnvIwAp7y8AKe87ACnvRwAp71MAKe9fACnvawAp73cAKe+DACnvjwAp75sAKe+nACnvswAp778AKe/LACnv1wAp7+MAKe/vACnv+wAp8AMAKfALACnwGwAp8CMAKfBXACnwhwAp8LsAKfEDACnxNwAp8U8AKfFrACnxjwAp8a8AKfHHACnx5wAp8f8AKfIrACnyTwAp8nMAKfJ/ACnyvwAp8w8AKfMjACnzTwAp84cAKfOnACnzswAp878AKfPLACnz1wAp8+MAKfPvACnz+wAp9AcAKfQTACn0HwAp9DsAKfRvACn0jwAp9KsAKfTTACn08wAp9SMAKfVDACn1YwAp9acAKfXfACn2MwAp9pMAKfbnACn3NwAp928AKffrACn4HwAp+DsAKfhHACn5RwAp+YcAKfmvACn6iwAp+vsAKfvzACn8FwAp/FsAKfx7ACn8mwAp/McAKfz/ACn9OwAp/X8AKf3PACn+GwAp/p8AKf7XACn/RwAp/3MAKf+fACn/vwAp//MAKgA3ACoATwAqAHMAKgCbACoAxwAqAP8AKgF/ACoBtwAqAjsAKgJrACoCxwAqAwsAKgN7ACoDpwAqA+MAKgQrACoEdwAqBKcAKgTXACoE9wAqBScAKgVDACoFkwAqBgsAKgZHACoGjwAqBtsAKgb3ACoHFwAqBz8AKgdnACoHiwAqB6cAKgfHACoH7wAqCCMAKgjbACoJlwAqCb8AKgnzACoKLwAqCmcAKgqXACoKtwAqCusAKgsjACoLQwAqC6sAKgvPACoL7wAqDDsAKgxrACoMlwAqDNMAKgzzACoNJwAqDYMAKg2rACoN0wAqDfcAKg4zACoOWwAqDn8AKg7DACoO4wAqDyMAKg9LACoPfwAqD8sAKg/7ACoQQwAqEJMAKhC7ACoRDwAqER8AKhEvACoR3wAqEjcAKhKDACoSxwAqEycAKhNLACoTlwAqE8sAKhPvACoUAwAqFDcAKhRzACoUxwAqFN8AKhUfACoVYwAqFb8AKhYHACoWWwAqFqMAKhbHACoW2wAqFucAKhcPACoXIwAqF1sAKheLACoX6wAqGCcAKhh3ACoYpwAqGNsAKhj/ACoZHwAqGT8AKhl3ACoZwwAqGfMAKho/ACoacwAqGp8AKhrTACoa9wAqGy8AKhtnACobjwAqG9MAKhwjACocVwAqHIcAKhyzACocywAqHPcAKh0bACodZwAqHYMAKh2jACoeFwAqHj8AKh5zACoerwAqHu8AKh8zACofRwAqH2sAKh+bACofvwAqIAcAKiAzACogYwAqIKMAKiDHACog6wAqITMAKiFrACoh3wAqIh8AKiI/ACoiTwAqIosAKiLXACojNwAqI4cAKiPfACokWwAqJKMAKiT3AColMwAqJV8AKiWrACol6wAqJlMAKiZvAComtwAqJv8AKicjAConYwAqJ5cAKifnACooEwAqKDMAKiiPACoouwAqKQcAKiknACopQwAqKXMAKimnACopxwAqKfsAKipTACoqhwAqKq8AKirfACorMwAqK2cAKit7ACornwAqK78AKivrACosLwAqLF8AKiyLACosxwAqLQMAKi03ACotZwAqLh8AKi6XACouxwAqL6sAKi/rACowmwAqMQsAKjFHACoxmwAqMccAKjHnACoyDwAqMjsAKjKTACoyxwAqMv8AKjPrACo0owAqNTcAKjVfACo1cwAqNa8AKjW/ACo11wAqNhsAKjY/ACo2VwAqNn8AKjbDACo24wAqN0cAKjdrACo3twAqOF8AKjiXACo42wAqOV8AKjmPACo5rwAqOb8AKjnjACo6HwAqOmMAKjp3ACo6kwAqOsMAKjrvACo7CwAqOy8AKjtPACo7gwAqO7MAKjvzACo8MwAqPE8AKjxrACo8twAqPSsAKj2HACo9vwAqPj8AKj5XACo+bwAqPr8AKj7rACo/CwAqP1MAKj+bACo/ywAqP/MAKkAjACpAhwAqQKcAKkDrACpBKwAqQY8AKkHfACpCAwAqQicAKkJfACpCnwAqQrsAKkL7ACpDNwAqQ5sAKkPLACpD4wAqRAsAKkQfACpENwAqRFcAKkRzACpEkwAqRLMAKkTbACpFAwAqRS8AKkVbACpGFwAqRlMAKkZvACpGgwAqRqMAKkbHACpG9wAqRxsAKkdHACpHawAqR6MAKkfDACpH8wAqSDMAKkhXACpIcwAqSJ8AKkkDACpJUwAqSWcAKkmLACpJpwAqSc8AKknnACpJ9wAqShMAKkozACpKuwAqSucAKksHACpLOwAqS2sAKkuzACpL8wAqTF8AKkybACpMwwAqTRsAKk03ACpNdwAqTasAKk43ACpORwAqToMAKk7PACpO/wAqTzMAKk+jACpPwwAqT/sAKlBHACpQgwAqUNcAKlDzACpRDwAqUSMAKlE7ACpRTwAqUWMAKlGTACpRnwAqUd8AKlH/ACpSIwAqUmcAKlKfACpS9wAqU2MAKlPTACpT3wAqU/cAKlP/ACpUGwAqVEMAKlRnACpUiwAqVKcAKlTbACpU9wAqVR8AKlU3ACpVZwAqVZsAKlWzACpVwwAqVeMAKlX7ACpWEwAqVkcAKlZrACpWcwAqVoMAKlarACpWvwAqVtcAKldTACpXpwAqV/MAKlgzACpYlwAqWOMAKllHACpZswAqWgMAKlozACpaYwAqWqsAKlrbACpbUwAqW7MAKlvnACpcPwAqXJcAKly/ACpdDwAqXVMAKl2jACpd8wAqXgMAKl4jACpePwAqXn8AKl6vACpe3wAqXw8AKl8rACpfSwAqX8cAKl/zACpgHwAqYEcAKmCPACpg4wAqYQ8AKmFDACphewAqYb8AKmHvACpiMwAqYocAKmK3ACpi5wAqYxcAKmNfACpjfwAqY7cAKmP7ACpkFwAqZEMAKmR/ACpkxwAqZN8AKmUTACplSwAqZWsAKmWXACpl0wAqZgsAKmZvACpm0wAqZysAKmd/ACpnzwAqZ+sAKmg3ACpopwAqaR8AKmmDACpprwAqagsAKmozACpqZwAqaosAKmrHACpq+wAqazMAKmvLACpsjwAqbUsAKm13ACpttwAqbecAKm4XACpuYwAqbqMAKm6zACpuwwAqbxMAKm9DACpvZwAqb6cAKm+7ACpwFwAqcDsAKnBjACpwgwAqcL8AKnELACpxRwAqcV8AKnGbACpx4wAqcgsAKnI3ACpyawAqcp8AKnLvACpzOwAqc38AKnO7ACpz7wAqdBMAKnRHACp0gwAqdLMAKnTzACp1LwAqdYsAKnXHACp1+wAqdl8AKnaPACp2xwAqdysAKndTACp3pwAqd98AKnhDACp4gwAqeO8AKnkjACp5gwAqecsAKno7ACp6ewAqeucAKntPACp72wAqfBsAKnyHACp8wwAqfScAKn2TACp+JwAqflsAKn67ACp/AwAqf0sAKn/DACp/+wAqgAcAKoBvACqAywAqgScAKoFzACqBvwAqgisAKoJPACqCWwAqgrMAKoMfACqDgwAqg+sAKoRPACqErwAqhOMAKoUrACqFkwAqhgMAKoZrACqG2wAqhwMAKodTACqHkwAqh78AKof/ACqIIwAqiEsAKoijACqI4wAqiS8AKolfACqLPwAqi4cAKouvACqMSwAqjPcAKo0fACqNQwAqjW8AKo23ACqOBwAqjlsAKo6bACqOywAqjvMAKo8bACqPQwAqj2sAKo+TACqPpwAqj7cAKo/HACqP7wAqkBcAKpA/ACqQZwAqkI8AKpDHACqRKwAqkZ8AKpHDACqR4wAqkf8AKpILACqSGwAqkisAKpI7ACqSUwAqkmMAKpKPACqSqwAqkscAKpMPACqTcwAqk8sAKpQHACqUUwAqlH8AKpSzACqU0wAqlPMAKpV/ACqVowAqldsAKpYXACqWQwAqlmcAKpabACqWtwAqlvcAKpc3ACqXXwAql4MAKpevACqYMwAqmL8AKpjzACqZQwAqmZsAKpnTACqaCwAqmm8AKpqzACqa4wAqmwMAKpuHACqbowAqm8cAKpwLACqcmwAqnOsAKp1DACqdXwAqnksAKp6fACqe2wAqnzsAKp9DACqfhwAqn9sAKqBHACqgfwAqoLcAKqEPACqhkwAqoa8AKqHXACqiSwAqooMAKqMLACqjKwAqo18AKqObACqjxwAqo+8AKqQXACqkIwAqpE8AKqRzACqkuwAqpOsAKqUvACqlQwAqpW8AKqYDACqmOwAqpmcAKqazACqm3wAqpw8AKqc3ACqnZwAqp5sAKqfDACqn7wAqqBsAKqgjACqoLwAqqI8AKqizACqo5wAqqQcAKqlDACqpvwAqqp8AKqrXACqrDwAqq/cAKqyfACqtBwAqrTsAKq2TACqt5wAqrhsAKq5vACquiwAqrqsAKq7jACqvHwAqr3MAKq+zACqv/wAqsDcAKrCXACqw9wAqsUcAKrGXACqx0wAqsecAKrIPACqypwAqsysAKrPnACq0bwAqtSMAKrWvACq2MwAqtusAKreXACq4IwAquIsAKrjnACq5bwAqulMAKrs/ACq8KwAqvPsAKr3fACq+owAqv38AKsBDACrA8wAqwZcAKsJXACrC9wAqw/cAKsTPACrFfwAqxnMAKsdnACrICwAqyOMAKsmvACrKVwAqyzsAKsv7ACrMcwAqzPcAKs13ACrOFwAqzrMAKs9HACrP2wAq0HsAKtEjACrRswAq0h8AKtKnACrTSwAq08sAKtRbACrUzwAq1VsAKtXTACrWYwAq1wcAKte7ACrYtwAq2ZMAKto3ACra2wAq23cAKtwzACrc+wAq3bMAKt5TACre7wAq378AKuCHACrhHwAq4eMAKuK3ACrjawAq5CsAKuTHACrljwAq5nMAKudPACroOwAq6PsAKunLACrqqwAq63sAKuxPACrs7wAq7YcAKu4HACrujwAq70cAKu/bACrwkwAq8QsAKvGLACryawAq8tsAKvNfACrzywAq9FsAKvVPACr2DwAq9tsAKverACr4DwAq+KMAKvl7ACr6UwAq+zsAKvv/ACr84wAq/XsAKv5rACr/YwArADcAKwEfACsB/wArAucAKwOnACsEFwArBQMAKwXnACsGpwArB48AKwhnACsJVwArChsAKwq/ACsLVwArC/MAKwyLACsNYwArDi8AKw8jACsQGwArEOcAKxGrACsSmwArE6cAKxRfACsVVwArFjMAKxcLACsYHwArGQsAKxnDACsabwArG28AKxw7ACsc8wArHasAKx6PACsfSwArIA8AKyDLACshbwArIhcAKyK3ACsjHwArI7cAKyRLACsk7wArJYsAKyZXACsm4wArJ48AKygTACsovwArKZ8AKypHACsrDwArK68AKyxrACstGwArLeMAKy6bACsvWwArL/cAKzCnACsxbwArMfsAKzKnACszhwArNHMAKzUvACs1qwArNqcAKzdjACs4AwArOK8AKzknACs6IwArOx8AKzwLACs9BwArPfcAKz7PACs/kwArQC8AK0EPACtCAwArQvcAK0PHACtErwArRWcAK0YDACtGnwArR58AK0hbACtJTwArSkcAK0szACtMBwArTNMAK02vACtOrwArT8MAK1DfACtR+wArUqsAK1OfACtUdwArVY8AK1ZfACtXUwArWCcAK1j/ACtaAwArWusAK1vjACtc1wArXbcAK16TACtfdwArYH8AK2FjACtiOwArYycAK2QDACtk7wArZcMAK2bHACtnvwAraJ8AK2mHACtqRwArav8AK2vPACtshwArbXsAK25jACtvKwArb/cAK3DXACtxhwArcl8AK3N/ACt0GwArdOMAK3WfACt2WwArdvcAK3ejACt4VwAreS8AK3oDACt6hwArew8AK3u3ACt8VwArfNMAK317ACt+HwArfscAK39fACt/9wArgJcAK4FbACuCJwArgucAK4OLACuERwArhO8AK4VnACuGCwArhsMAK4ePACuIOwAriPsAK4m3ACuKdwAri2cAK4wHACuMzwArjacAK45/ACuPNwArj/8AK5DDACuRbwArkh8AK5KfACuTgwArlEsAK5UzACuWCwArlscAK5efACuYVwArmSMAK5n3ACua6wArm8cAK5ybACudVwArnfcAK56nACufMwArn9sAK6BzACuhPwAroesAK6K3ACujZwArpBMAK6SzACulQwArpc8AK6ZvACum/wArp4cAK6hPACupLwArqiMAK6rHACurfwArrC8AK6zzACutuwArrj8AK67fACuvlwArsHsAK7ETACuxzwArsn8AK7NvACu0IwArtM8AK7WPACu2RwArtyMAK7fXACu42wArubMAK7qXACu7gwArvGsAK70zACu+EwArvvsAK7/vACvAswArwa8AK8K/ACvDrwArxIsAK8UzACvF/wArxtsAK8eDACvIGwAryM8AK8l3ACvKCwAryqMAK8s3ACvL6wArzHcAK80/ACvNxwArzk8AK87zACvPnwAr0EcAK9DLACvRgwAr0k8AK9MTACvTuwAr1H8AK9VDACvV4wAr1qcAK9dfACvYEwAr2McAK9mPACvaRwAr2ucAK9uXACvcewAr3X8AK957ACvfbwAr4EMAK+E3ACviIwAr4uMAK+OLACvkVwAr5QcAK+WvACvmbwAr50cAK+fnACvoiwAr6UsAK+oHACvqjwAr6xcAK+urACvsOwAr7PcAK+3jACvumwAr7y8AK/ArACvxAwAr8dcAK/LfACvztwAr9GsAK/UrACv2BwAr9tcAK/eTACv4WwAr+PcAK/l/ACv6FwAr+ssAK/vHACv8swAr/ZsAK/43ACv+xwAr/2cALAAHACwAmwAsATsALAHjACwCewAsAw8ALAPTACwEkwAsBSMALAWvACwGZwAsB0cALAf7ACwIpwAsCTMALAnvACwKqwAsC4MALAwzACwMtwAsDX8ALA4zACwOmwAsD3sALBAPACwQhwAsEPcALBFnACwR0wAsEkMALBK7ACwTKwAsE7cALBQ7ACwUrwAsFVMALBYLACwWewAsFvsALBe7ACwYQwAsGNMALBljACwaAwAsGqMALBs3ACwbrwAsG98ALBwXACwcNwAsHGcALByLACwcvwAsHPsALB0/ACwdewAsHa8ALB37ACweGwAsHkMALB7Bjb21waWxlci5iaW4uZGFydDJqc2RhcnQyanMuY21kbGluZUZ1dHVyZXV0ZjhMaW5lU3BsaXR0ZXJleGl0RmlsZUZpbGVNb2RlUGxhdGZvcm1zdGRpbnN0ZGVycklzb2xhdGVmZWFwaUNvbXBpbGVyT3B0aW9uc3N0YWNrVHJhY2VGaWxlUHJlZml4SGFuZGxlT3B0aW9uZGF0YUV4aXRGdW5jZXhpdENvZGVDb21waWxlRnVuY2NvbXBpbGVyT3B0aW9uc2NvbXBpbGVySW5wdXRjb21waWxlckRpYWdub3N0aWNzY29tcGlsZXJPdXRwdXRPcHRpb25IYW5kbGVycGF0dGVybl9oYW5kbGVtdWx0aXBsZUFyZ3VtZW50c2hhbmRsZWFyZ3VtZW50Y2FsbEFib3J0TGVnbWVzc2FnZXRvU3RyaW5nQWJvcnRlZCBkdWUgdG8gLS10aHJvdy1vbi1lcnJvcjogX0V4aXRTaWduYWxSZWFkU3RyYXRlZ3lpbmRleF9uYW1ldmFsdWVzUmVhZFN0cmF0ZWd5LmZyb21EYXJ0UmVhZFN0cmF0ZWd5LmZyb21EYXRhUmVhZFN0cmF0ZWd5LmZyb21Db2RlZ2VuZnJvbURhcnRmcm9tRGF0YWZyb21Db2RlZ2VuV3JpdGVTdHJhdGVneVdyaXRlU3RyYXRlZ3kudG9LZXJuZWxXcml0ZVN0cmF0ZWd5LnRvRGF0YVdyaXRlU3RyYXRlZ3kudG9Db2RlZ2VuV3JpdGVTdHJhdGVneS50b0pzdG9LZXJuZWx0b0RhdGF0b0NvZGVnZW50b0pzX2RlZmF1bHRTcGVjaWZpY2F0aW9uVXJpLi4vLi4vLi4vLi4vc2RrL2xpYi9saWJyYXJpZXMuanNvbk9VVFBVVF9MQU5HVUFHRV9EQVJURGFydEJVSUxEX0lEZGlhZ25vc3RpY0hhbmRsZXJleGl0RnVuY2NvbXBpbGVGdW5jZW5hYmxlV3JpdGVTdHJpbmdfRVhJVF9TSUdOQUxleHRyYWN0UGFyYW1ldGVyaXNPcHRpb25hbEFyZ3VtZW50bV4oLVthLXpBLVpdfC0tLis9KSguKilmaXJzdE1hdGNoPT1Vbmtub3duIG9wdGlvbiAiIi5bXWV4dHJhY3RQYXRoaXNEaXJlY3RvcnlwYXRoZW5kc1dpdGgvcGFyc2VDb21tYW5kTGluZWhhbmRsZXJzYXJndnBhdHRlcm5zaGFuZGxlcmFkZF4oam9pbikkfF4oKSRhcmd1bWVudHNpdGVyYXRvcm1vdmVOZXh0Y3VycmVudG1hdGNoZ3JvdXBDb3VudGxlbmd0aGk8K0ludGVybmFsIGVycm9yOiAiIiBkaWQgbm90IG1hdGNoY29tcGlsZWtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZXdhbGxjbG9ja3N0YXJ0bGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaXJlc29sdmVsaWIvbGlicmFyaWVzLmpzb25vdXRwdXRTcGVjaWZpZWRvdXRzb3VyY2VNYXBPdXRyZWFkRGF0YVVyaXdyaXRlRGF0YVVyaXJlYWRDb2RlZ2VuVXJpd3JpdGVDb2RlZ2VuVXJpY29kZWdlblNoYXJkY29kZWdlblNoYXJkc2JhemVsUGF0aHNwYWNrYWdlQ29uZmlncGFja2FnZVJvb3RvcHRpb25zd2FudEhlbHB3YW50VmVyc2lvbnRydXN0VHlwZUFubm90YXRpb25zY2hlY2tlZE1vZGVzdHJvbmdNb2RlaGludHN2ZXJib3NldGhyb3dPbkVycm9ydGhyb3dPbkVycm9yQ291bnRzaG93V2FybmluZ3NzaG93SGludHNlbmFibGVDb2xvcnNvcHRpbWl6YXRpb25MZXZlbHBsYXRmb3JtQmluYXJpZXNlbnZpcm9ubWVudHJlYWRTdHJhdGVneXdyaXRlU3RyYXRlZ3lwYXNzVGhyb3VnaGlnbm9yZU9wdGlvbi0tYnVpbGQtaWQ9c2V0TGlicmFyeVNwZWNpZmljYXRpb25VcmlzZXRQYWNrYWdlUm9vdHNldFBhY2thZ2VDb25maWdzZXRPdXRwdXQtb0Vycm9yOiBNaXNzaW5nIGZpbGUgYWZ0ZXIgLW8gb3B0aW9uLnNldE9wdGltaXphdGlvbkxldmVsdmFsdWU+RXJyb3I6IFVuc3VwcG9ydGVkIG9wdGltaXphdGlvbiBsZXZlbCAnJywgc3VwcG9ydGVkIGxldmVscyBhcmU6IDAsIDEsIDIsIDMsIDRzZXRPdXRwdXRUeXBlLS1vdXRwdXQtdHlwZT1kYXJ0LS1vdXRwdXQtdHlwZT1kYXJ0LW11bHRpLS1vdXRwdXQtdHlwZT1kYXJ0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEl0IHdhcyBkZXByZWNhdGVkIHNpbmNlIERhcnQgMS4xMSBhbmQgcmVtb3ZlZCBpbiBEYXJ0IDEuMTkuc2V0U3RyaXBPcHRpb24gJy0tZm9yY2Utc3RyaXAnIGlzIG5vdCBpbiB1c2Ugbm93IHRoYXQtLW91dHB1dC10eXBlPWRhcnQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5zZXRCYXplbFBhdGhzcGF0aHNhZGRBbGxzcGxpdCxnZXREZXBzT3V0cHV0c291cmNlRmlsZXNmaWxlbmFtZXNtYXB1cml0b0xpc3Rzb3J0CnNldEFsbG93TmF0aXZlRXh0ZW5zaW9uc09wdGlvbiAnLS1hbGxvdy1uYXRpdmUtZXh0ZW5zaW9ucycgaXMgbm90IHN1cHBvcnRlZC5zZXRWZXJib3NlXy0tdmVyYm9zZXNldFRydXN0VHlwZUFubm90YXRpb25zc2V0Q2hlY2tlZE1vZGVhZGRJbkVudmlyb25tZW50ZXFJbmRleGluZGV4T2Y9bmFtZXN1YnN0cmluZ1tdPXNldENhdGVnb3JpZXNjYXRlZ29yaWVzaXNTZXJ2ZXJNb2Rlc2luZ2xlU2VydmVyVGhlIC0tY2F0ZWdvcmllcyBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgZGVsZXRlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLCBwbGVhc2UgdXNlICctLXNlcnZlci1tb2RlJyBpbnN0ZWFkIG9mICctLWNhdGVnb3JpZXM9U2VydmVyJy5UaGUgLS1jYXRlZ29yaWVzIGZsYWcgaXMgZGVwcmVjYXRlZCwgc2VlIHRoZSB1c2FnZSBmb3IgZGV0YWlscy5zZXRQbGF0Zm9ybUJpbmFyaWVzc2V0UmVhZERhdGEtLXJlYWQtZGF0YXNldERpbGxEZXBlbmRlbmNpZXNkZXBlbmRlbmNpZXN1cmlEZXBlbmRlbmNpZXNzcGxpdE1hcEpvaW5vbk1hdGNob25Ob25NYXRjaHAtLWRpbGwtZGVwZW5kZW5jaWVzc2V0Q2ZlT25seUNhbm5vdCB1c2UgLS1jZmUtb25seSBhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LmFuZCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuc2V0UmVhZENvZGVnZW4tLXJlYWQtY29kZWdlbnNldFdyaXRlRGF0YUNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGRhdGEgYW5kIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuLS13cml0ZS1kYXRhc2V0V3JpdGVDb2RlZ2VuQ2Fubm90IHdyaXRlIHNlcmlhbGl6ZWQgZGF0YSBhbmQgY29kZWdlbiBkYXRhIHNpbXVsdGFuZW91c2x5Li0td3JpdGUtY29kZWdlbnNldENvZGVnZW5TaGFyZHNldENvZGVnZW5TaGFyZHNzZXREdW1wSW5mby0tZHVtcC1pbmZvPWpzb249YmluYXJ5RXJyb3I6IFVuc3VwcG9ydGVkIGR1bXAtaW5mbyBmb3JtYXQgJ3N1cHBvcnRlZCBmb3JtYXRzIGFyZToganNvbiBvciBiaW5hcnloYW5kbGVUaHJvd09uRXJyb3JwYXJhbWV0ZXJjb3VudGhhbmRsZVNob3J0T3B0aW9uc3Nob3J0T3B0aW9uc3Nob3J0T3B0aW9udmg/Yy0tZW5hYmxlLWNoZWNrZWQtbW9kZS0tbWluaWZ5LVtjaHZtP10rLS10aHJvdy1vbi1lcnJvcig/Oj1bMC05XSspPy0tc3VwcHJlc3Mtd2FybmluZ3MtLWZhdGFsLXdhcm5pbmdzLS1zdXBwcmVzcy1oaW50cy0tb3V0cHV0LXR5cGU9ZGFydHwtLW91dHB1dC10eXBlPWRhcnQtbXVsdGl8LS1vdXRwdXQtdHlwZT1qcy0tdXNlLWtlcm5lbC0tcGxhdGZvcm0tYmluYXJpZXM9ListLW5vLWZyZXF1ZW5jeS1iYXNlZC1taW5pZmljYXRpb24tLXNob3ctaW50ZXJuYWwtcHJvZ3Jlc3MtLXZlcnNpb24tLWxpYnJhcnktcm9vdD0uKy0tbGlicmFyaWVzLXNwZWM9Lis9Lit8LS1jb2RlZ2VuLXNoYXJkLS1jb2RlZ2VuLXNoYXJkcy0tZGVidWctZ2xvYmFsLWluZmVyZW5jZS0tb3V0PS4rfC1vLiotTy4qLS1hbGxvdy1tb2NrLWNvbXBpbGF0aW9uLS1mYXN0LXN0YXJ0dXAtLWdlbmVyaWMtbWV0aG9kLXN5bnRheC0taW5pdGlhbGl6aW5nLWZvcm1hbC1hY2Nlc3MtLW5vLW1pbmlmeS0tcHJlc2VydmUtdXJpcy0tZm9yY2Utc3RyaXA9LiotLWRpc2FibGUtZGlhZ25vc3RpYy1jb2xvcnMtLWVuYWJsZS1kaWFnbm9zdGljLWNvbG9ycy0tZW5hYmxlW18tXWNoZWNrZWRbXy1dbW9kZXwtLWNoZWNrZWQtLWVuYWJsZS1hc3NlcnRzLS10cnVzdC10eXBlLWFubm90YXRpb25zLS10cnVzdC1wcmltaXRpdmVzLS1leHBlcmltZW50YWwtdHJ1c3QtanMtaW50ZXJvcC10eXBlLWFubm90YXRpb25zLS1oZWxwfC9cP3wvaC0tcGFja2FnZXM9ListLXBhY2thZ2Utcm9vdD0uK3wtcC4rLS1uby1zb3VyY2UtbWFwcy0tcmVzb2x1dGlvbi1pbnB1dD0uKy0tYmF6ZWwtcGF0aHM9ListLXJlc29sdmUtb25seS0tZGlzYWJsZS1uYXRpdmUtbGl2ZS10eXBlLWFuYWx5c2lzLS1jYXRlZ29yaWVzPS4qLS1kaXNhYmxlLWlubGluaW5nLS1kaXNhYmxlLXByb2dyYW0tc3BsaXQtLWRpc2FibGUtdHlwZS1pbmZlcmVuY2UtLXVzZS10cml2aWFsLWFic3RyYWN0LXZhbHVlLWRvbWFpbi0tZGlzYWJsZS1ydGktb3B0aW1pemF0aW9uLS10ZXJzZS0tZGVmZXJyZWQtbWFwPS4rLS1uZXctZGVmZXJyZWQtc3BsaXQtLXJlcG9ydC1pbnZhbGlkLWRlZmVycmVkLXR5cGVzLS1kaXNhbGxvdy11bnNhZmUtZXZhbC0tc2hvdy1wYWNrYWdlLXdhcm5pbmdzfC0tc2hvdy1wYWNrYWdlLXdhcm5pbmdzPS4qLS1lbmFibGUtZXhwZXJpbWVudHwtLWVuYWJsZS1leHBlcmltZW50PS4qLS1jc3AtLWVuYWJsZS1leHBlcmltZW50YWwtbWlycm9ycy0tYXNzZXJ0LW1lc3NhZ2UtLXN0cm9uZy0tcHJldmlldy1kYXJ0LTItLW9taXQtaW1wbGljaXQtY2hlY2tzLS1vbWl0LWFzLWNhc3RzLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZy0tYmVuY2htYXJraW5nLXByb2R1Y3Rpb24tLWJlbmNobWFya2luZy14LS1jb25kaXRpb25hbC1kaXJlY3RpdmVzLS1lbmFibGUtYXN5bmMtLWVuYWJsZS1udWxsLWF3YXJlLW9wZXJhdG9ycy0tZW5hYmxlLWVudW0tLWdlbmVyYXRlLWNvZGUtd2l0aC1jb21waWxlLXRpbWUtZXJyb3JzLS11c2UtbXVsdGktc291cmNlLWluZm8tLXVzZS1uZXctc291cmNlLWluZm8tLXRlc3QtbW9kZS0tZXhwZXJpbWVudGFsLXRyYWNrLWFsbG9jYXRpb25zLS1leHBlcmltZW50YWwtYWxsb2NhdGlvbnMtcGF0aC0tZXhwZXJpbWVudC1jb2RlLTEtLWV4cGVyaW1lbnQtY29kZS0yLS1leHBlcmltZW50LWNvZGUtMy0tZXhwZXJpbWVudC1jYWxsLWluc3RydW1lbnRhdGlvbi0tZXhwZXJpbWVudC1uZXctcnRpLUQuKz0uKi0uKlVua25vd24gb3B0aW9uICcnLi4qaW5wdXRQcm92aWRlcicgaXMgbm90IG5lZWRlZCBpbiBEYXJ0IDIuMC4gVG8gZW5hYmxlIGFzc2VydGlvbnMgdXNlICcnIGluc3RlYWQuJyBpcyBub3QgYXZhaWxhYmxlIGluIERhcnQgMi4wLiBUcnkgdXNpbmcgJ2hpbnRpbmZvaXNFbXB0eU5vIERhcnQgZmlsZSBzcGVjaWZpZWQuZXh0cmFzdWJsaXN0RXh0cmEgYXJndW1lbnRzOiAnIG1heSBub3QgYmUgdXNlZCBpbiBjaGVja2VkIG1vZGUuQ2Fubm90IHNwZWNpZnkgYm90aCAnLS1wYWNrYWdlLXJvb3QnIGFuZCAnLS1wYWNrYWdlcy5zY3JpcHROYW1lb3V0Lmpzb3V0LmRpbGxhbmQgcmVhZCBzZXJpYWxpemVkIGRhdGEgc2ltdWx0YW5lb3VzbHkuYW5kIHJlYWQgc2VyaWFsaXplZCBjb2RlZ2VuIHNpbXVsdGFuZW91c2x5Li5kYXRhQ2Fubm90IHJlYWQgYW5kIHdyaXRlIHNlcmlhbGl6ZWQgZGF0YSBzaW11bHRhbmVvdXNseS5DYW5ub3QgcmVhZCBzZXJpYWxpemVkIGNvZGVnZW4gYW5kIHdyaXRlIHNlcmlhbGl6ZWQgZGF0YSBzaW11bHRhbmVvdXNseS4uY29kZUNhbm5vdCByZWFkIGFuZCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuQ2FuIG9ubHkgd3JpdGUgc2VyaWFsaXplZCBjb2RlZ2VuIGZyb20gc2VyaWFsaXplZCBkYXRhLkNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gd2l0aG91dCBzZXR0aW5nIC48PSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4+PSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgLS1vdXQ9Lm1hcC0tc291cmNlLW1hcD1vdXRwdXRQcm92aWRlcm9uSW5mb29uRmFpbHVyZWNvbXBpbGF0aW9uRG9uZXJlc3VsdGlzU3VjY2Vzc0NvbXBpbGF0aW9uIGZhaWxlZC4uZGVwc2dldFNvdXJjZVVyaXNpbnB1dGlucHV0U2l6ZXByb2Nlc3NOYW1laW5wdXROYW1lb3V0cHV0U2l6ZXByaW1hcnlPdXRwdXRTaXplb3V0cHV0TmFtZXN1bW1hcnljaGFyYWN0ZXJzIERhcnRkYXJ0Q2hhcmFjdGVyc1JlYWREYXJ0IGZpbGUgYnl0ZXMgZGF0YWRhdGFJbnB1dERhdGEgZmlsZXMgIGFuZCBjb2RlSW5wdXQsIFswLS1dIENvbXBpbGVkY2hhcmFjdGVycyBKYXZhU2NyaXB0dG90YWxDaGFyYWN0ZXJzV3JpdHRlbkphdmFTY3JpcHR0b3RhbENoYXJhY3RlcnNXcml0dGVuUHJpbWFyeW91dHB1dGNvbXBpbGVkIHRvIEphdmFTY3JpcHQ6IGtlcm5lbCBieXRlc3RvdGFsRGF0YVdyaXR0ZW5jb21waWxlZCB0byBkaWxsOiBTZXJpYWxpemVkZGF0YU91dHB1dHNlcmlhbGl6ZWQgdG8gZGlsbCBhbmQgZGF0YTogY29kZU91dHB1dHNlcmlhbGl6ZWQgdG8gY29kZWdlbiBkYXRhOiAgdG8gIGluIGVsYXBzZWQgc2Vjb25kc2luIGZpbGVzYWxsT3V0cHV0RmlsZXNqc0NvdW50d2hlcmVmLmpzRW1pdHRlZCBmaWxlICBKYXZhU2NyaXB0IGZpbGVzLnNjcmlwdGF1dG9SZWFkRmlsZVVyaW9uRXJyb3Jvbldhcm5pbmdlbnRyeVBvaW50dGhlbl9mb3JtYXRDaGFyYWN0ZXJDb3VudHNlcGFyYXRvcnRleHRwb3NpdGlvbl9mb3JtYXREdXJhdGlvbkFzU2Vjb25kc2R1cmF0aW9ud2lkdGhzZWNvbmRzaW5NaWxsaXNlY29uZHNkaWdpdHN0b1N0cmluZ0FzRml4ZWR3cml0ZVN0cmluZ3NjaGVtZWZpbGVVbmhhbmRsZWQgc2NoZW1lIHRvRmlsZVBhdGhvcGVuU3luY21vZGV3cml0ZVN0cmluZ1N5bmNjbG9zZVN5bmNmYWlscmVwb3J0dW5hcnktZXJyb3JFcnJvcjogY29tcGlsZXJNYWluOmFzeW5jX2NvbXBsZXRlcjpyZXR1cm5fdmFsdWU6YXN5bmNfc3RhY2tfdHJhY2U6YXN5bmNfb3BfdGhlbjphc3luY19vcF9lcnJvcjphd2FpdF9qdW1wX3Zhcjphd2FpdF9jdHhfdmFyOnNhdmVkX3RyeV9jb250ZXh0X3ZhcjA6YXN5bmNfb3A6cmVzdWx0OmV4Y2VwdGlvbjpzdGFja190cmFjZWFueWFzdGFydHNXaXRoLS1saWJyYXJpZXMtc3BlYz1pc1NjaGVtZXBhY2thZ2VsaWJyYXJpZXNKc29uY29tcGxldGVFcnJvcmZ1dHVyZWhlbHBVc2FnZTogZGFydDJqcyBbb3B0aW9uc10gZGFydGZpbGUKCkNvbXBpbGVzIERhcnQgdG8gSmF2YVNjcmlwdC4KCkNvbW1vbiBvcHRpb25zOgogIC1vIDxmaWxlPiBHZW5lcmF0ZSB0aGUgb3V0cHV0IGludG8gPGZpbGU+LgogIC1tICAgICAgICBHZW5lcmF0ZSBtaW5pZmllZCBvdXRwdXQuCiAgLWggICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlIChhZGQgLXYgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcHRpb25zKS52ZXJib3NlSGVscFVzYWdlOiBkYXJ0MmpzIFtvcHRpb25zXSBkYXJ0ZmlsZQoKQ29tcGlsZXMgRGFydCB0byBKYXZhU2NyaXB0LgoKU3VwcG9ydGVkIG9wdGlvbnM6CiAgLWgsIC9oLCAvPywgLS1oZWxwCiAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAoYWRkIC12IGZvciBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3B0aW9ucykuCgogIC1vIDxmaWxlPiwgLS1vdXQ9PGZpbGU+CiAgICBHZW5lcmF0ZSB0aGUgb3V0cHV0IGludG8gPGZpbGU+LgoKICAtbSwgLS1taW5pZnkKICAgIEdlbmVyYXRlIG1pbmlmaWVkIG91dHB1dC4KCiAgLS1lbmFibGUtYXNzZXJ0cwogICAgRW5hYmxlIGFzc2VydGlvbnMuCgogIC12LCAtLXZlcmJvc2UKICAgIERpc3BsYXkgdmVyYm9zZSBpbmZvcm1hdGlvbi4KCiAgLUQ8bmFtZT49PHZhbHVlPgogICAgRGVmaW5lIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgoKICAtLXZlcnNpb24KICAgIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbi4KCiAgLS1wYWNrYWdlcz08cGF0aD4KICAgIFBhdGggdG8gdGhlIHBhY2thZ2UgcmVzb2x1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIHN1cHBsaWVzIGEgbWFwcGluZwogICAgb2YgcGFja2FnZSBuYW1lcyB0byBwYXRocy4KCiAgLS1zdXBwcmVzcy13YXJuaW5ncwogICAgRG8gbm90IGRpc3BsYXkgYW55IHdhcm5pbmdzLgoKICAtLWZhdGFsLXdhcm5pbmdzCiAgICBUcmVhdCB3YXJuaW5ncyBhcyBjb21waWxhdGlvbiBlcnJvcnMuCgogIC0tc3VwcHJlc3MtaGludHMKICAgIERvIG5vdCBkaXNwbGF5IGFueSBoaW50cy4KCiAgLS1lbmFibGUtZGlhZ25vc3RpYy1jb2xvcnMKICAgIEFkZCBjb2xvcnMgdG8gZGlhZ25vc3RpYyBtZXNzYWdlcy4KCiAgLS10ZXJzZQogICAgRW1pdCBkaWFnbm9zdGljcyB3aXRob3V0IHN1Z2dlc3Rpb25zIGZvciBob3cgdG8gZ2V0IHJpZCBvZiB0aGUgZGlhZ25vc2VkCiAgICBwcm9ibGVtcy4KCiAgLS1zaG93LXBhY2thZ2Utd2FybmluZ3MKICAgIFNob3cgd2FybmluZ3MgYW5kIGhpbnRzIGdlbmVyYXRlZCBmcm9tIHBhY2thZ2VzLgoKICAtLWNzcAogICAgRGlzYWJsZSBkeW5hbWljIGdlbmVyYXRpb24gb2YgY29kZSBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dC4gVGhpcyBpcwogICAgbmVjZXNzYXJ5IHRvIHNhdGlzZnkgQ1NQIHJlc3RyaWN0aW9ucyAoc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUC8pLgoKICAtLW5vLXNvdXJjZS1tYXBzCiAgICBEbyBub3QgZ2VuZXJhdGUgYSBzb3VyY2UgbWFwIGZpbGUuCgogIC1PPDAsMSwyLDMsND4KICAgIENvbnRyb2xzIG9wdGltaXphdGlvbnMgdGhhdCBjYW4gaGVscCByZWR1Y2UgY29kZS1zaXplIGFuZCBpbXByb3ZlCiAgICBwZXJmb3JtYW5jZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIGRlcGxveW1lbnQuCgogICAgLU8wCiAgICAgICBEaXNhYmxlcyBhbGwgb3B0aW1pemF0aW9ucy4gRXF1aXZhbGVudCB0byBjYWxsaW5nIGRhcnQyanMgd2l0aCB0aGVzZQogICAgICAgZXh0cmEgZmxhZ3M6CiAgICAgICAgLS1kaXNhYmxlLWlubGluaW5nCiAgICAgICAgLS1kaXNhYmxlLXR5cGUtaW5mZXJlbmNlCiAgICAgICAgLS1kaXNhYmxlLXJ0aS1vcHRpbWl6YXRpb25zCgoKICAgICAgIFNvbWUgb3B0aW1pemF0aW9ucyBjYW5ub3QgYmUgZGlzc2FibGVkIGF0IHRoaXMgdGltZSwgYXMgd2UgYWRkIHRoZSBvcHRpb24KICAgICAgIHRvIGRpc2FibGUgdGhlbSwgdGhleSB3aWxsIGJlIGFkZGVkIGhlcmUgYXMgd2VsbC4KCiAgICAtTzEKICAgICAgIEVuYWJsZXMgZGVmYXVsdCBvcHRpbWl6YXRpb25zLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIG5vCiAgICAgICBleHRyYSBmbGFncy4KCiAgICAtTzIKICAgICAgIEVuYWJsZXMgb3B0aW1pemF0aW9ucyB0aGF0IHJlc3BlY3QgdGhlIGxhbmd1YWdlIHNlbWFudGljcyBhbmQgYXJlIHNhZmUKICAgICAgIGZvciBhbGwgcHJvZ3JhbXMuIEl0IGhvd2V2ZXIgY2hhbmdlcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHR5cGVzLAogICAgICAgd2hpY2ggd2lsbCBubyBsb25nZXIgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBEYXJ0IFZNIG9yIEREQy4KCiAgICAgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlIGV4dHJhIGZsYWdzOgogICAgICAgIC0tbWluaWZ5CiAgICAgICAgLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZwoKICAgIC1PMwogICAgICAgRW5hYmxlcyBvcHRpbWl6YXRpb25zIHRoYXQgcmVzcGVjdCB0aGUgbGFuZ3VhZ2Ugc2VtYW50aWNzIG9ubHkgb24KICAgICAgIHByb2dyYW1zIHRoYXQgZG9uJ3QgZXZlciB0aHJvdyBhbnkgc3VidHlwZSBvZiBgRXJyb3JgLiAgVGhlc2UKICAgICAgIG9wdGltaXphdGlvbnMgaW1wcm92ZSB0aGUgZ2VuZXJhdGVkIGNvZGUsIGJ1dCB0aGV5IG1heSBjYXVzZSBwcm9ncmFtcyB0bwogICAgICAgYmVoYXZlIHVuZXhwZWN0ZWRseSBpZiB0aGlzIGFzc3VtcHRpb24gaXMgbm90IG1ldC4gIFRvIHVzZSB0aGlzCiAgICAgICBvcHRpb24sIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBwcm9wZXJseSB0ZXN0IHlvdXIgYXBwbGljYXRpb24gZmlyc3QKICAgICAgIHdpdGhvdXQgaXQsIGFuZCBlbnN1cmUgdGhhdCBubyBzdWJ0eXBlIG9mIGBFcnJvcmAgKHN1Y2ggYXMgYFR5cGVFcnJvcmApCiAgICAgICBpcyBldmVyIHRocm93bi4KCiAgICAgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlIGV4dHJhIGZsYWdzOgogICAgICAgICAtTzIKICAgICAgICAgLS1vbWl0LWltcGxpY2l0LWNoZWNrcwoKICAgIC1PNAogICAgICAgRW5hYmxlcyBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9ucyB0aGFuIC1PMywgYnV0IHdpdGggdGhlIHNhbWUKICAgICAgIGFzc3VtcHRpb25zLiBUaGVzZSBvcHRpbWl6YXRpb25zIGFyZSBvbiBhIHNlcGFyYXRlIGdyb3VwIGJlY2F1c2UgdGhleQogICAgICAgYXJlIG1vcmUgc3VzY2VwdGlibGUgdG8gdmFyaWF0aW9ucyBpbiBpbnB1dCBkYXRhLiBUbyB1c2UgdGhpcyBvcHRpb24gd2UKICAgICAgIHJlY29tbWVuZCB0byBwYXkgc3BlY2lhbCBhdHRlbnRpb24gdG8gdGVzdCBlZGdlIGNhc2VzIGluIHVzZXIgaW5wdXQuCgogICAgICAgRXF1aXZhbGVudCB0byBjYWxsaW5nIGRhcnQyanMgd2l0aCB0aGVzZSBleHRyYSBmbGFnczoKICAgICAgICAgLU8zCiAgICAgICAgIC0tdHJ1c3QtcHJpbWl0aXZlcwoKICAgIFdoaWxlIHNvbWUgb2YgdGhlIGluZGl2aWR1YWwgb3B0aW1pemF0aW9ucyBhbmQgZmxhZ3MgbWF5IGNoYW5nZSB3aXRoIHRpbWUsCiAgICB3ZSBpbnRlbmQgdG8ga2VlcCB0aGUgLU8qIGZsYWdzIHN0YWJsZS4gTmV3IHNhZmUgb3B0aW1pemF0aW9ucyBtYXkgYmUgYWRkZWQKICAgIG9uIGFueSBsZXZlbCwgYW5kIG9wdGltaXphdGlvbnMgdGhhdCBvbmx5IHdvcmsgb24gc29tZSBwcm9ncmFtcyBtYXkgbW92ZSB1cAogICAgZnJvbSBvbmUgbGV2ZWwgdG8gdGhlIG5leHQgKGZvciBpbnN0YW5jZSwgb25jZSBhbHRlcm5hdGl2ZSBzYWZlCiAgICBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCwgYG9taXQtaW1wbGljaXQtY2hlY2tzYCBtYXkgYmUgcmVtb3ZlZCBvciBtYXkKICAgIG1vdmUgdG8gdGhlIE80IGxldmVsKS4KClRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbCBvcHRpb25zIGFyZSBpbmNsdWRlZCBpbiBzb21lIG9mIHRoZSAtTyBvcHRpbWl6YXRpb24KbGV2ZWxzIGFib3ZlLiBUaGV5IGhlbHAgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSwgYnV0IHRoZXkgbWF5CmNhdXNlIHByb2dyYW1zIHRvIGJlaGF2ZSB1bmV4cGVjdGVkbHkgaWYgYXNzdW1wdGlvbnMgYXJlIG5vdCBtZXQuIE9ubHkgdHVybiBvbgp0aGVzZSBmbGFncyBpZiB5b3UgaGF2ZSBlbm91Z2ggdGVzdCBjb3ZlcmFnZSB0byBlbnN1cmUgdGhleSBhcmUgc2FmZSB0byB1c2U6CgogIC0tb21pdC1pbXBsaWNpdC1jaGVja3MKICAgIE9taXQgaW1wbGljaXQgcnVudGltZSBjaGVja3MsIHN1Y2ggYXMgcGFyYW1ldGVyIGNoZWNrcyBhbmQgaW1wbGljaXQKICAgIGRvd25jYXN0cy4gVGhlc2UgY2hlY2tzIGFyZSBpbmNsdWRlZCBieSBkZWZhdWx0IGluIERhcnQgMi4wLiBCeQogICAgdXNpbmcgdGhpcyBmbGFnIHRoZSBjaGVja3MgYXJlIHJlbW92ZWQsIGhvd2V2ZXIgdGhlIGNvbXBpbGVyIHdpbGwgYXNzdW1lCiAgICB0aGF0IGFsbCBzdWNoIGNoZWNrcyB3ZXJlIHZhbGlkIGFuZCBtYXkgdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yCiAgICBvcHRpbWl6YXRpb25zLiBVc2UgdGhpcyBvcHRpb24gb25seSBpZiB5b3UgaGF2ZSBlbm91Z2ggdGVzdGluZyB0byBlbnN1cmUKICAgIHRoYXQgeW91ciBwcm9ncmFtIHdvcmtzIHdpdGggdGhlIGNoZWNrcy4KCiAgLS10cnVzdC1wcmltaXRpdmVzCiAgICBBc3N1bWUgdGhhdCBvcGVyYXRpb25zIG9uIG51bWJlcnMsIHN0cmluZ3MsIGFuZCBsaXN0cyBoYXZlIHZhbGlkIGlucHV0cy4KICAgIFRoaXMgb3B0aW9uIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gZHJvcCBydW50aW1lIGNoZWNrcyBmb3IgdGhvc2Ugb3BlcmF0aW9ucy4KICAgIE5vdGU6IGEgd2VsbC10eXBlZCBwcm9ncmFtIGlzIG5vdCBndWFyYW50ZWVkIHRvIGhhdmUgdmFsaWQgaW5wdXRzLiBGb3IKICAgIGV4YW1wbGUsIGFuIGludCBpbmRleCBhcmd1bWVudCBtYXkgYmUgbnVsbCBvciBvdXQgb2YgcmFuZ2UuCgogIC0tbGF4LXJ1bnRpbWUtdHlwZS10by1zdHJpbmcKICAgIE9taXRzIHJlaWZpZWQgY2xhc3MgdHlwZSBhcmd1bWVudHMgd2hlbiB0aGVzZSBhcmUgb25seSBuZWVkZWQgZm9yIGB0b1N0cmluZ2AKICAgIG9uIGBydW50aW1lVHlwZWAuIFRoaXMgaXMgdXNlZnVsIGlmIGBydW50aW1lVHlwZS50b1N0cmluZygpYCBpcyBvbmx5IHVzZWQKICAgIGZvciBkZWJ1Z2dpbmcuIE5vdGUgdGhhdCBzZW1hbnRpY3Mgb2Ygb3RoZXIgdXNlcyBvZiBgLnJ1bnRpbWVUeXBlYCwgZm9yCiAgICBpbnN0YW5jZSBgYS5ydW50aW1lVHlwZSA9PSBiLnJ1bnRpbWVUeXBlYCwgaXMgbm90IGFmZmVjdGVkIGJ5IHRoaXMgZmxhZy4KClRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgb25seSB1c2VkIGZvciBjb21waWxlciBkZXZlbG9wbWVudCBhbmQgbWF5CmJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbjoKCiAgLS10aHJvdy1vbi1lcnJvcgogICAgVGhyb3cgYW4gZXhjZXB0aW9uIGlmIGEgY29tcGlsZS10aW1lIGVycm9yIGlzIGRldGVjdGVkLgoKICAtLWxpYnJhcmllcy1zcGVjPTxmaWxlPgogICAgQSAuanNvbiBmaWxlIGNvbnRhaW5pbmcgdGhlIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIGZvciBkYXJ0MmpzLgoKICAtLWFsbG93LW1vY2stY29tcGlsYXRpb24KICAgIERvIG5vdCBnZW5lcmF0ZSBhIGNhbGwgdG8gbWFpbiBpZiBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZwogICAgbGlicmFyaWVzIGFyZSB1c2VkOiBkYXJ0OmRvbSwgZGFydDpodG1sIGRhcnQ6aW8uCgogIC0tZGlzYWJsZS1uYXRpdmUtbGl2ZS10eXBlLWFuYWx5c2lzCiAgICBEaXNhYmxlIHRoZSBvcHRpbWl6YXRpb24gdGhhdCByZW1vdmVzIHVudXNlZCBuYXRpdmUgdHlwZXMgZnJvbSBkYXJ0Omh0bWwKICAgIGFuZCByZWxhdGVkIGxpYnJhcmllcy4KCiAgLS1zZXJ2ZXItbW9kZQogICAgQ29tcGlsZSB3aXRoIHNlcnZlciBzdXBwb3J0LiBUaGUgY29tcGlsZXIgd2lsbCB1c2UgYSBsaWJyYXJ5IHNwZWNpZmljYXRpb24KICAgIHRoYXQgZGlzYWJsZXMgZGFydDpodG1sIGJ1dCBzdXBwb3J0cyBkYXJ0OmpzIGluIGNvbmRpdGlvbmFsIGltcG9ydHMuCgogIC0tY2F0ZWdvcmllcz08Y2F0ZWdvcmllcz4KICAgIChkZXByZWNhdGVkKQogICAgVXNlICctLXNlcnZlci1tb2RlJyBpbnN0ZWFkIG9mICctLWNhdGVnb3JpZXM9U2VydmVyJy4gQWxsIG90aGVyIGNhdGVnb3J5CiAgICB2YWx1ZXMgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIGNvbXBpbGVyIGJlaGF2aW9yLgoKICAtLWRlZmVycmVkLW1hcD08ZmlsZT4KICAgIEdlbmVyYXRlcyBhIGpzb24gZmlsZSB3aXRoIGEgbWFwcGluZyBmcm9tIGVhY2ggZGVmZXJyZWQgaW1wb3J0IHRvIGEgbGlzdCBvZgogICAgdGhlIHBhcnQuanMgZmlsZXMgdGhhdCB3aWxsIGJlIGxvYWRlZC4KCiAgLS1kdW1wLWluZm9bPTxmb3JtYXQ+XQogICAgR2VuZXJhdGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnZW5lcmF0ZWQgY29kZS4gJ2Zvcm1hdCcgY2FuIGJlIGVpdGhlcgogICAgJ2pzb24nIG9yICdiaW5hcnknLgogICAgWW91IGNhbiBpbnNwZWN0IHRoZSBnZW5lcmF0ZWQgZGF0YSB1c2luZyB0b29scyBmcm9tICdwYWNrYWdlOmRhcnQyanNfaW5mbycuCgogIC0tZ2VuZXJhdGUtY29kZS13aXRoLWNvbXBpbGUtdGltZS1lcnJvcnMKICAgIEdlbmVyYXRlcyBvdXRwdXQgZXZlbiBpZiB0aGUgcHJvZ3JhbSBjb250YWlucyBjb21waWxlLXRpbWUgZXJyb3JzLiBVc2UgdGhlCiAgICBleGl0IGNvZGUgdG8gZGV0ZXJtaW5lIGlmIGNvbXBpbGF0aW9uIGZhaWxlZC4KCiAgLS1uby1mcmVxdWVuY3ktYmFzZWQtbWluaWZpY2F0aW9uCiAgICBFeHBlcmltZW50YWwuICBEaXNhYmxlZCB0aGUgbmV3IGZyZXF1ZW5jeSBiYXNlZCBtaW5pZnlpbmcgbmFtZXIgYW5kIHVzZSB0aGUKICAgIG9sZCBuYW1lciBpbnN0ZWFkLgp0cmltaGVscEFuZEV4aXR2ZXJzaW9uPG5vbi1TREsgYnVpbGQ+RGFydC10by1KYXZhU2NyaXB0IGNvbXBpbGVyIChkYXJ0MmpzKSB2ZXJzaW9uOiBoZWxwQW5kRmFpbG1haW5sYXN0LS1iYXRjaGludGVybmFsTWFpbmV4Y2VwdGlvbnRyYWNlVGhlIGNvbXBpbGVyIGNyYXNoZWQ6IGlnbm9yZWRUaGUgY29tcGlsZXIgY3Jhc2hlZDogZXJyb3Igd2hpbGUgcHJpbnRpbmcgZXhjZXB0aW9uY2F0Y2hFcnJvcmJhdGNoTWFpbmJhdGNoQXJndW1lbnRzZXJyb3JDb2Rlc3RyZWFtdHJhbnNmb3JtZGVjb2RlcnN1YnNjcmlwdGlvbmxpc3RlbmxpbmVwYXVzZWFyZ3N3aW5kb3dzd2hlbkNvbXBsZXRlPj4+IFRFU1QgT0s+Pj4gVEVTVCBDUkFTSD4+PiBURVNUIEZBSUx3cml0ZWxuPj4+IEVPRiBTVERFUlJyZXN1bWVDb21wb25lbnRTdGF0ZW1lbnRpclRhcmdldERpYWdub3N0aWNNZXNzYWdlSGFuZGxlckV4cGVyaW1lbnRhbEZsYWdGaWxlU3lzdGVtQ29tcGlsZXJSZXN1bHRQcm9jZXNzZWRPcHRpb25zTGlicmFyaWVzU3BlY2lmaWNhdGlvbkNvbXBpbGVyQ29udGV4dG1lc3NhZ2VNaXNzaW5nTWFpblNldmVyaXR5Z2VuZXJhdGVLZXJuZWxJbnRlcm5hbEVycm9yVG9rZW5TdHJpbmdUb2tlblRva2VucmVkaXJlY3RpbmdJbml0aWFsaXplZENvbXBpbGVyU3RhdGVlcXVhbExpc3RzZXF1YWxNYXBzcGFyc2VFeHBlcmltZW50YWxGbGFnc3BhcnNlRXhwZXJpbWVudGFsQXJndW1lbnRzRGlhZ25vc3RpY01lc3NhZ2VnZXRNZXNzYWdlQ2hhck9mZnNldGdldE1lc3NhZ2VIZWFkZXJUZXh0Z2V0TWVzc2FnZUxlbmd0aGdldE1lc3NhZ2VSZWxhdGVkSW5mb3JtYXRpb25nZXRNZXNzYWdlVXJpZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzRmlsZVN5c3RlbUVudGl0eUZpbGVTeXN0ZW1FeGNlcHRpb25rZXJuZWxGb3JQcm9ncmFtRGF0YUZpbGVTeXN0ZW1FbnRpdHljb21wdXRlUGxhdGZvcm1CaW5hcmllc0xvY2F0aW9uTG9jYXRlZE1lc3NhZ2VvcGVyYXRvckZyb21TdHJpbmdBc3luY01vZGlmaWVyaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3Jpc01pbnVzT3BlcmF0b3IkJCQwJDkkQSRCQUNLU0xBU0gkQ1IkREVMJERRJEhBU0gkTEYkTFMkUFMkVEFCJFokXyRhJGckcyR6TGlua0xpbmtCdWlsZGVyTGlua0VudHJ5cmVsYXRpdml6ZVVyaWNsZWFyU3RyaW5nVG9rZW5DYW5vbmljYWxpemVyY2xlYXJpbml0aWFsaXplQ29tcGlsZXJvbGRTdGF0ZXRhcmdldGxpbmtlZERlcGVuZGVuY2llc3BhY2thZ2VzRmlsZVVyaWV4cGVyaW1lbnRhbEZsYWdzdmVyaWZ5YmNvbXBhcmVUb2xlZ2FjeU1vZGVwcm9jZXNzZWRPcHRzc3RhdGVmaWxlU3lzdGVtb25EaWFnbm9zdGljaW5wdXRzY2xlYXJGaWxlU3lzdGVtQ2FjaGVjb250ZXh0Y29tcGlsZXJSZXN1bHRjb21wb25lbnRtYWluTWV0aG9kTm8gJ21haW4nIG1ldGhvZCBmb3VuZC5UcnkgYWRkaW5nIGEgbWV0aG9kIG5hbWVkICdtYWluJyB0byB5b3VyIHByb2dyYW0uTWlzc2luZ01haW5TZXZlcml0eS5lcnJvcndpdGhMb2NhdGlvbnRva2VuVG9TdHJpbmdhc3NlcnRpb25NZXNzYWdlbGV4ZW1lZ2V0U3VwcG9ydGVkTGlicmFyeU5hbWVzanNvbnNwZWNpZmljYXRpb25Gb3JhbGxMaWJyYXJpZXNsaXNTdXBwb3J0ZWRpc1JlZGlyZWN0aW5nRmFjdG9yeW1lbWJlcmtpbmRQcm9jZWR1cmVLaW5kLkZhY3Rvcnlib2R5ZnVuY3Rpb25leHByZXNzaW9udmFyaWFibGUjcmVkaXJlY3RpbmdfZmFjdG9yeWNvbXBpbGVyX25ld0RpYWdub3N0aWNJbnB1dEtpbmRJbnB1dEtpbmQuVVRGOElucHV0S2luZC5iaW5hcnlVVEY4YmluYXJ5SW5wdXRUaW5wdXRLaW5kQ29tcGlsZXJJbnB1dHJlYWRGcm9tVXJpT3V0cHV0VHlwZU91dHB1dFR5cGUuanNPdXRwdXRUeXBlLmpzUGFydE91dHB1dFR5cGUuc291cmNlTWFwT3V0cHV0VHlwZS5kdW1wSW5mb091dHB1dFR5cGUuZGVmZXJyZWRNYXBPdXRwdXRUeXBlLmRlYnVnanNqc1BhcnRzb3VyY2VNYXBkdW1wSW5mb2RlZmVycmVkTWFwZGVidWdPdXRwdXRTaW5rY2xvc2VCaW5hcnlPdXRwdXRTaW5rd3JpdGVidWZmZXJlbmRDb21waWxlck91dHB1dGNyZWF0ZU91dHB1dFNpbmtleHRlbnNpb250eXBlY3JlYXRlQmluYXJ5U2lua0NvbXBpbGVyRGlhZ25vc3RpY3Njb2RlYmVnaW5Db21waWxhdGlvblJlc3VsdGNvbXBpbGVyY29tcGlsZXJPcHRpb25zIG11c3QgYmUgbm9uLW51bGxjb21waWxlcklucHV0IG11c3QgYmUgbm9uLW51bGxjb21waWxlckRpYWdub3N0aWNzIG11c3QgYmUgbm9uLW51bGxjb21waWxlck91dHB1dCBtdXN0IGJlIG5vbi1udWxscnVuc3VjY2Vzc2tlcm5lbExvYWRlcmluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZWRhcnQyanMuY21kbGluZS5vcHRpb25zRmxhZ3NhbGxvd01vY2tDb21waWxhdGlvbmFsbG93TmF0aXZlRXh0ZW5zaW9uc2Rpc2FibGVJbmxpbmluZ2Rpc2FibGVQcm9ncmFtU3BsaXRkaXNhYmxlRGlhZ25vc3RpY0NvbG9yc2Rpc2FibGVOYXRpdmVMaXZlVHlwZUFuYWx5c2lzdXNlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW5kaXNhYmxlVHlwZUluZmVyZW5jZWRpc2FibGVSdGlPcHRpbWl6YXRpb25lbmFibGVBc3NlcnRNZXNzYWdlZW5hYmxlQ2hlY2tlZE1vZGVlbmFibGVBc3NlcnRzZW5hYmxlRGlhZ25vc3RpY0NvbG9yc2V4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnNleHBlcmltZW50YWxBbGxvY2F0aW9uc1BhdGhleHBlcmltZW50TG9jYWxOYW1lc2V4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zZXhwZXJpbWVudFRvQm9vbGVhbmV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uZXhwZXJpbWVudE5ld1J0aWVuYWJsZUxhbmd1YWdlRXhwZXJpbWVudHMtLWVuYWJsZS1leHBlcmltZW50ZmFzdFN0YXJ0dXBmYXRhbFdhcm5pbmdzZ2VuZXJhdGVDb2RlV2l0aENvbXBpbGVUaW1lRXJyb3JzcHJldmlld0RhcnQyb21pdEltcGxpY2l0Q2hlY2tzb21pdEFzQ2FzdHNsYXhSdW50aW1lVHlwZVRvU3RyaW5nbWluaWZ5bm9GcmVxdWVuY3lCYXNlZE1pbmlmaWNhdGlvbm5vTWluaWZ5bm9Tb3VyY2VNYXBzcHJlc2VydmVVcmlzc2hvd1BhY2thZ2VXYXJuaW5ncy0tc2hvdy1wYWNrYWdlLXdhcm5pbmdzc3VwcHJlc3NIaW50c3N1cHByZXNzV2FybmluZ3N0ZXJzZXRlc3RNb2RldHJ1c3RQcmltaXRpdmVzdHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnN1c2VDb250ZW50U2VjdXJpdHlQb2xpY3l1c2VNdWx0aVNvdXJjZUluZm91c2VOZXdTb3VyY2VJbmZvcHJvZ3Jlc3NkaWxsRGVwZW5kZW5jaWVzcmVhZERhdGF3cml0ZURhdGFyZWFkQ29kZWdlbndyaXRlQ29kZWdlbmNmZU9ubHlkZWJ1Z0dsb2JhbEluZmVyZW5jZXNlcnZlck1vZGVuZXdEZWZlcnJlZFNwbGl0cmVwb3J0SW52YWxpZEluZmVycmVkRGVmZXJyZWRUeXBlc2JlbmNobWFya2luZ1Byb2R1Y3Rpb25iZW5jaG1hcmtpbmdFeHBlcmltZW50Y29uZGl0aW9uYWxEaXJlY3RpdmVzZ2VuZXJpY01ldGhvZFN5bnRheGluaXRpYWxpemluZ0Zvcm1hbEFjY2Vzc3Jlc29sdmVPbmx5T3B0aW9ucmVzb2x1dGlvbklucHV0Y3VycmVudERpcmVjdG9yeW5hdGl2ZVRvVXJpUGF0aGZpbGVuYW1lcmVwbGFjZUFsbFw6dXJpUGF0aFRvTmF0aXZlbmF0aXZlVG9VcmlhcHBlbmRTbGFzaGRhcnQyanMuc3JjLm9wdGlvbnNEaWFnbm9zdGljT3B0aW9uc3RlcnNlRGlhZ25vc3RpY3NzaG93QWxsUGFja2FnZVdhcm5pbmdzaGlkZVBhY2thZ2VXYXJuaW5nc3Nob3dQYWNrYWdlV2FybmluZ3NGb3JsYW5ndWFnZUV4cGVyaW1lbnRzYnVpbGRJZGJ1aWxkIG51bWJlciBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZGNvbXBpbGVGb3JTZXJ2ZXJkZWZlcnJlZE1hcFVyaXNob3duUGFja2FnZVdhcm5pbmdzdXNlRHVtcEluZm9CaW5hcnlGb3JtYXRlbmFibGVNaW5pZmljYXRpb25fZGlzYWJsZU1pbmlmaWNhdGlvbmVuYWJsZU5hdGl2ZUxpdmVUeXBlQW5hbHlzaXNlbmFibGVVc2VyQXNzZXJ0aW9uc2dlbmVyYXRlU291cmNlTWFwb3V0cHV0VXJpc291cmNlTWFwVXJpZGVmYXVsdFBhcmFtZXRlckNoZWNrUG9saWN5ZGVmYXVsdEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeWRlZmF1bHRDb25kaXRpb25DaGVja1BvbGljeWRlZmF1bHRFeHBsaWNpdENhc3RDaGVja1BvbGljeXVzZUZyZXF1ZW5jeU5hbWVyc2hvd0ludGVybmFsUHJvZ3Jlc3N1c2VDRkVDb25zdGFudHNFeHBlcmltZW50YWxGbGFnLmNvbnN0YW50VXBkYXRlMjAxOGhhc0J1aWxkSWRwYXJzZUV4cGVyaW1lbnRhbEZsYWcuY29udHJvbEZsb3dDb2xsZWN0aW9uc0V4cGVyaW1lbnRhbEZsYWcuZXh0ZW5zaW9uTWV0aG9kc0V4cGVyaW1lbnRhbEZsYWcubm9uTnVsbGFibGVFeHBlcmltZW50YWxGbGFnLnNldExpdGVyYWxzRXhwZXJpbWVudGFsRmxhZy5zcHJlYWRDb2xsZWN0aW9uc0V4cGVyaW1lbnRhbEZsYWcudHJpcGxlU2hpZnQtLWRlZmVycmVkLW1hcD0tLXBsYXRmb3JtLWJpbmFyaWVzPXZhbGlkYXRlW2xpYnJhcmllc1NwZWNpZmljYXRpb25VcmldIGlzIG51bGwuW2xpYnJhcmllc1NwZWNpZmljYXRpb25VcmldIHNob3VsZCBiZSBhIGZpbGU6IE9ubHkgb25lIG9mIFtwYWNrYWdlUm9vdF0gb3IgW3BhY2thZ2VDb25maWddIG1heSBiZSBnaXZlbi5bcGFja2FnZVJvb3RdIG11c3QgZW5kIHdpdGggYSAvTWlzc2luZyByZXF1aXJlZCBkZXJpdmVPcHRpb25zY29udGFpbnNwYXRoU2VnbWVudHNmaXJzdENoZWNrUG9saWN5aXNUcnVzdGVkaXNFbWl0dGVkdHJ1c3RlZGNoZWNrZWRDaGVja1BvbGljeShpc1RydXN0ZWQ9aXNFbWl0dGVkPSlfVU5ERVRFUk1JTkVEX0JVSUxEX0lEX2V4dHJhY3RTdHJpbmdPcHRpb25wcmVmaXhkZWZhdWx0VmFsdWVvcHRpb25fZXh0cmFjdFVyaU9wdGlvbl9leHRyYWN0SW50T3B0aW9uX2hhc09wdGlvbl9leHRyYWN0T3B0aW9uYWxDc3ZPcHRpb25mbGFnX2V4dHJhY3RVcmlMaXN0T3B0aW9uc3RyaW5nVXJpc19leHRyYWN0RXhwZXJpbWVudHNleHBlcmltZW50c3dhcm5pbmdzb3VyY2VfZmlsZV9wcm92aWRlcm1hdGhjb2xvcnNNZXNzYWdlQ2FsbGJhY2tTb3VyY2VGaWxlUHJvdmlkZXJpc1dpbmRvd3Njd2R1dGY4U291cmNlRmlsZXNiaW5hcnlTb3VyY2VGaWxlc3JlYWRCeXRlc0Zyb21VcmlyZXNvdXJjZVVyaWlzQWJzb2x1dGVyZXNvbHZlVXJpX3JlYWRGcm9tRmlsZWh0dHBodHRwc19yZWFkRnJvbUh0dHBVbmtub3duIHNjaGVtZSBpbiB1cmkgJydfcmVhZEZyb21GaWxlU3luY3NvdXJjZXplcm9UZXJtaW5hdGVkZXhvc0Vycm9yZGV0YWlsIChFcnJvciByZWFkaW5nICcnIGF1dG9SZWFkRnJvbUZpbGVlY2xpZW50Z2V0VXJscmVxdWVzdHJlc3BvbnNlc3RhdHVzQ29kZW1zZ0ZhaWx1cmUgZ2V0dGluZyA6IHJlYXNvblBocmFzZXNwbGl0Q29udGVudHRvdGFsTGVuZ3RoZm9sZG9sZGxpc3RvZmZzZXRjb250ZW50UGFydHNldFJhbmdldW5pbXBsZW1lbnRlZGdldFV0ZjhTb3VyY2VGaWxldXJpc2tleXNDb21waWxlclNvdXJjZUZpbGVQcm92aWRlckZvcm1hdHRpbmdEaWFnbm9zdGljSGFuZGxlcnByb3ZpZGVyaXNBYm9ydGluZ2xhc3RLaW5kZmF0YWxDb3VudEZBVEFMY3Jhc2hvcmRpbmFsSU5GT3ZlcmJvc2UgaW5mb0luZm86SW5mbzogcHJlZml4TWVzc2FnZVdhcm5pbmc6IEhpbnQ6IEludGVybmFsIEVycm9yOiBVbmV4cGVjdGVkIGRpYWdub3N0aWMga2luZDogZmF0YWwmaXNJbmZvY29sb3JVbmtub3duIGtpbmQ6IHguZGFydGdldExvY2F0aW9uTWVzc2FnZWNvbG9yaXplQDoKUmFuZG9tQWNjZXNzRmlsZU91dHB1dFByb3ZpZGVydG90YWxDaGFyYWN0ZXJzV3JpdHRlbmNyZWF0ZVVyaVVua25vd24gb3V0cHV0IHR5cGU6IGlzUHJpbWFyeU91dHB1dGNoYXJhY3RlcnNXcml0dGVuY2h1bmtTaXplKm9uRG9uZWJ5dGVzV3JpdHRlbndyaXRlQnl0ZXNTeW5jd3JpdGVGcm9tU3luY1JhbmRvbUFjY2Vzc0JpbmFyeU91dHB1dFNpbmtfT3V0cHV0U2lua1dyYXBwZXJvbkFkZG9uQ2xvc2VfQmluYXJ5T3V0cHV0U2lua1dyYXBwZXJvbldyaXRlQmF6ZWxJbnB1dFByb3ZpZGVyZGlyc3NlYXJjaFBhdGhzX3Jlc29sdmVyZXNvbHZlZFVyaS9iYXplbC1yb290L2JhemVsLXJvb3QvZGlyZXhpc3RzZXhpc3RzU3luY3JlYWRBbGxsZW5ndGhTeW5jYnVmZmVyTGVuZ3RocmVhZEludG9TeW5jZGFydDJqcy51dGlsLmNvbW1hbmRfbGluZUVTQ0FQRV9NQVBQSU5HbnINdAkIDAtzcGxpdExpbmVpblF1b3Rlc29wZW5pbmdRdW90ZSJVbmZpbmlzaGVkIGVzY2FwZTogbmV4dG1hcHBlZGlzTm90RW1wdHlVbmNsb3NlZCBxdW90ZXM6IGRhcnQyanMudXRpbGluZGVudGF0aW9uLmRhcnRIYXNoaW5nU01JX01BU0ttaXhIYXNoQ29kZUJpdHNleGlzdGluZzw8Xj4+aGlnaGxvd29iamVjdEhhc2hvYmplY3RoYXNoQ29kZW9iamVjdHNIYXNob2JqMW9iajJvYmozb2JqNG9iajVoYXNobGlzdEhhc2hzZXRIYXNoRWl0ZXJhYmxldW5vcmRlcmVkTWFwSGFzaGhhc2hDb2Rlc2VudHJ5ZW50cmllc2tleW1hcEhhc2hQYWlyQUJvdGhlcihJbmRlbnRhdGlvbl9pbmRlbnRMZXZlbF9pbmRlbnRMaXN0X2luZGVudGF0aW9uVW5pdCAgaW5kZW50YXRpb25pbmRlbnRhdGlvblVuaXRpbmRlbnRNb3JlaW5kZW50TGVzc2luZGVudEJsb2NrVGFnZ2luZ05zYnRhZ1N0YWNrcHVzaFRhZ3RhZ3ByZXBlbmRwb3BUYWdoZWFkdGFpbHN0cmluZ2FkZERlZmF1bHRQYXJhbWV0ZXJzbm9kZXBhcmFtc29wZW5Ob2RlYWRkQ3VycmVudEluZGVudGFkZFR5cGVXaXRoUGFyYW1zPgpvcGVuQW5kQ2xvc2VOb2RlLz4KY2xvc2VOb2RlPC9mb3JFYWNoa3N0cnZhbHVlVG9TdHJpbmcmbHQ7Jmd0O1tudWxsXT0iZXF1YWxFbGVtZW50c2VxdWFsU2V0c2NvbnRhaW5zQWxsS1Z3cml0ZUpzb25Fc2NhcGVkQ2hhcnNPbmFkZENvZGVVbml0RXNjYXBlZFx1MHRvUmFkaXhTdHJpbmd3cml0ZUVzY2FwZWRPbmNvZGVVbml0QXRcIlx0XG5cclxcd3JpdGVDaGFyQ29kZWNvbXB1dGVIYXNoQ29kZXBhcnQxcGFydDJwYXJ0M3BhcnQ0cGFydDVtb2RpZmllcnNUb1N0cmluZ2lzU3RhdGljaXNBYnN0cmFjdGlzRmluYWxpc1ZhcmlzQ29uc3Rpc0ZhY3Rvcnlpc0V4dGVybmFsaXNDb3ZhcmlhbnRidWlsZGVyYWRkTGFzdHN0YXRpY2Fic3RyYWN0ZmluYWx2YXJjb25zdGZhY3RvcnlleHRlcm5hbGNvdmFyaWFudHRvTGlua3ByaW50T25sb25nZXN0Q29tbW9uUHJlZml4TGVuZ3RobWFrZVVuaXF1ZXN1Z2dlc3RlZE5hbWV1c2VkTmFtZXNjb3VudGVya2VybmVsbG9hZENvbXBvbmVudEZyb21CaW5hcnlieXRlc3JlYWRBc0J5dGVzU3luY2xvYWRDb21wb25lbnRGcm9tQnl0ZXNyZWFkQ29tcG9uZW50bG9hZENvbXBvbmVudFNvdXJjZUZyb21CeXRlc3JlYWRDb21wb25lbnRTb3VyY2V3cml0ZUNvbXBvbmVudFRvQmluYXJ5c2lua251bGxzdGRvdXRub25CbG9ja2luZ29wZW5Xcml0ZXdyaXRlQ29tcG9uZW50RmlsZWZsdXNod3JpdGVMaWJyYXJ5VG9UZXh0bGlicmFyeXdyaXRlTGlicmFyeUZpbGV3cml0ZUFzU3RyaW5nU3luY3dyaXRlQ29tcG9uZW50VG9UZXh0c2hvd0V4dGVybmFsc2hvd09mZnNldHNzaG93TWV0YWRhdGFrZXJuZWwuYXN0Q2Fub25pY2FsTmFtZU5vZGVhY2NlcHR2aXNpdENoaWxkcmVuVHJlZU5vZGVfaGFzaENvdW50ZXJub09mZnNldHBhcmVudGZpbGVPZmZzZXR0cmFuc2Zvcm1DaGlsZHJlbnJlcGxhY2VDaGlsZGNoaWxkcmVwbGFjZW1lbnRyZXBsYWNlV2l0aHJlbW92ZWVuY2xvc2luZ0NvbXBvbmVudGxvY2F0aW9uX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlTmFtZWROb2RlcmVmZXJlbmNlY2Fub25pY2FsTmFtZUZpbGVVcmlOb2RlZmlsZVVyaUFubm90YXRhYmxlYW5ub3RhdGlvbnNhZGRBbm5vdGF0aW9uUmVmZXJlbmNlUmVmZXJlbmNlIHRvIFVuYm91bmQgcmVmZXJlbmNlYXNMaWJyYXJ5IGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBsaWJyYXJ5IHdhcyBleHBlY3RlZGFzQ2xhc3MgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIGNsYXNzIHdhcyBleHBlY3RlZGFzTWVtYmVyIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBtZW1iZXIgd2FzIGV4cGVjdGVkYXNGaWVsZCBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgZmllbGQgd2FzIGV4cGVjdGVkYXNDb25zdHJ1Y3RvciBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgY29uc3RydWN0b3Igd2FzIGV4cGVjdGVkYXNQcm9jZWR1cmUgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIHByb2NlZHVyZSB3YXMgZXhwZWN0ZWRhc1R5cGVkZWYgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIHR5cGVkZWYgd2FzIGV4cGVjdGVkTGlicmFyeWltcG9ydFVyaWRlZmF1bHRMYW5nYXVnZVZlcnNpb25NYWpvcmRlZmF1bHRMYW5nYXVnZVZlcnNpb25NaW5vcl9sYW5ndWFnZVZlcnNpb25NYWpvcl9sYW5ndWFnZVZlcnNpb25NaW5vckV4dGVybmFsRmxhZ1N5bnRoZXRpY0ZsYWdmbGFnc3Byb2JsZW1zQXNKc29uYWRkaXRpb25hbEV4cG9ydHNwYXJ0c3R5cGVkZWZzY2xhc3Nlc2V4dGVuc2lvbnNwcm9jZWR1cmVzZmllbGRzX2xpYnJhcnlJZENvdW50ZXJfbGlicmFyeUlkbGFuZ3VhZ2VWZXJzaW9uTWFqb3JsYW5ndWFnZVZlcnNpb25NaW5vcnNldExhbmd1YWdlVmVyc2lvblRyeWluZyB0byBzZXQgbGFuZ2F1Z2UgdmVyc2lvbiAnbnVsbCd+aXNTeW50aGV0aWNtZW1iZXJzZXhwYW5kYWRkTWVtYmVyYWRkQ2xhc3NjbGFzc19hZGRFeHRlbnNpb25hZGRGaWVsZGZpZWxkYWRkUHJvY2VkdXJlcHJvY2VkdXJlYWRkVHlwZWRlZnR5cGVkZWZfY29tcHV0ZUNhbm9uaWNhbE5hbWVzZ2V0Q2hpbGRGcm9tVHlwZWRlZmJpbmRUb2dldENoaWxkRnJvbU1lbWJlcmdldENoaWxkYWRkRGVwZW5kZW5jeWFkZFBhcnR2aXNpdExpYnJhcnlMaWJyYXJ5RGVwZW5kZW5jeWltcG9ydGVkTGlicmFyeVJlZmVyZW5jZWNvbWJpbmF0b3JzRXhwb3J0RmxhZ0RlZmVycmVkRmxhZ2ltcG9ydGVkTGlicmFyeWRlZmVycmVkSW1wb3J0aW1wb3J0ZXhwb3J0YnlSZWZlcmVuY2VlbmNsb3NpbmdMaWJyYXJ5dGFyZ2V0TGlicmFyeWlzRXhwb3J0aXNJbXBvcnRpc0RlZmVycmVkYW5ub3RhdGlvbnZpc2l0TGlicmFyeURlcGVuZGVuY3lMaWJyYXJ5UGFydHBhcnRVcml2aXNpdExpYnJhcnlQYXJ0Q29tYmluYXRvcmlzU2hvd25hbWVzc2hvd2hpZGVkZXBlbmRlbmN5aXNIaWRldmlzaXRDb21iaW5hdG9yVHlwZWRlZnR5cGVQYXJhbWV0ZXJzdHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZXBvc2l0aW9uYWxQYXJhbWV0ZXJzbmFtZWRQYXJhbWV0ZXJzdGhpc1R5cGV2aXNpdFR5cGVkZWZ2aXNpdERhcnRUeXBlQ2xhc3NMZXZlbENsYXNzTGV2ZWwuVGVtcG9yYXJ5Q2xhc3NMZXZlbC5UeXBlQ2xhc3NMZXZlbC5IaWVyYXJjaHlDbGFzc0xldmVsLk1peGluQ2xhc3NMZXZlbC5Cb2R5VGVtcG9yYXJ5VHlwZUhpZXJhcmNoeU1peGluQm9keUNsYXNzc3RhcnRGaWxlT2Zmc2V0ZmlsZUVuZE9mZnNldGxldmVsTGV2ZWxNYXNrRmxhZ0Fic3RyYWN0RmxhZ0VudW1GbGFnQW5vbnltb3VzTWl4aW5GbGFnRWxpbWluYXRlZE1peGluRmxhZ01peGluRGVjbGFyYXRpb25zdXBlcnR5cGVtaXhlZEluVHlwZWltcGxlbWVudGVkVHlwZXNjb25zdHJ1Y3RvcnNyZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnNfcmF3VHlwZV90aGlzVHlwZV9ib3R0b21UeXBlaXNBbm9ueW1vdXNNaXhpbmlzRW51bWlzRWxpbWluYXRlZE1peGluaXNNaXhpbkRlY2xhcmF0aW9uc3VwZXJjbGFzc0NvbnN0cmFpbnRzY29uc3RyYWludHNjbGFzc05vZGVjdXJyZW50Q2xhc3NzdWJzdGl0dXRpb25zdWJzdGl0dXRlU3VwZXJ0eXBlc3VwZXJjbGFzc21peGVkSW5DbGFzc21peGluaXNNaXhpbkFwcGxpY2F0aW9uZGVtYW5nbGVkTmFtZW5hbWVBc01peGluQXBwbGljYXRpb25uYW1lQXNNaXhpbkFwcGxpY2F0aW9uU3ViY2xhc3NzdXBlcnN2aXNpdENsYXNzYWNjZXB0UmVmZXJlbmNldmlzaXRDbGFzc1JlZmVyZW5jZWlzSW5FeHRlcm5hbExpYnJhcnlhc1Jhd1N1cGVydHlwZWFzVGhpc1N1cGVydHlwZXJhd1R5cGVib3R0b21UeXBldmlzaXRTdXBlcnR5cGVFeHRlbnNpb25vblR5cGV2aXNpdEV4dGVuc2lvbkV4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3JNZW1iZXJ0cmFuc2Zvcm1lckZsYWdzZW5jbG9zaW5nQ2xhc3NoYXNHZXR0ZXJoYXNTZXR0ZXJpc0luc3RhbmNlTWVtYmVyaXNFeHRlbnNpb25NZW1iZXJnZXR0ZXJUeXBlc2V0dGVyVHlwZWNvbnRhaW5zU3VwZXJDYWxsc0ZpZWxkaW5pdGlhbGl6ZXJGbGFnRmluYWxGbGFnQ29uc3RGbGFnU3RhdGljRmxhZ0hhc0ltcGxpY2l0R2V0dGVyRmxhZ0hhc0ltcGxpY2l0U2V0dGVyRmxhZ0NvdmFyaWFudEZsYWdHZW5lcmljQ292YXJpYW50SW1wbEZsYWdMYXRlRmxhZ0V4dGVuc2lvbk1lbWJlcmhhc0ltcGxpY2l0R2V0dGVyaGFzSW1wbGljaXRTZXR0ZXJpc0xhdGVpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsaXNNdXRhYmxlRmllbGRzIGNhbm5vdCBiZSBleHRlcm5hbHZpc2l0RmllbGR2aXNpdEZpZWxkUmVmZXJlbmNlQ29uc3RydWN0b3Jpbml0aWFsaXplcnNGbGFnRXh0ZXJuYWxGbGFnU3ludGhldGljdmlzaXRDb25zdHJ1Y3RvcnZpc2l0Q29uc3RydWN0b3JSZWZlcmVuY2VSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnR5cGVBcmd1bWVudHN0YXJnZXRSZWZlcmVuY2VyZXF1aXJlZFBhcmFtZXRlckNvdW50aXNVbnJlc29sdmVkdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JSZWZlcmVuY2VQcm9jZWR1cmVmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0UmVmZXJlbmNlZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2VGbGFnRm9yd2FyZGluZ1N0dWJGbGFnRm9yd2FyZGluZ1NlbWlTdHViRmxhZ1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yRmxhZ05vU3VjaE1ldGhvZEZvcndhcmRlcmlzRm9yd2FyZGluZ1N0dWJpc0ZvcndhcmRpbmdTZW1pU3R1YmZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldG5ld1ZhbHVlc2V0VHJhbnNmb3JtZXJGbGFnc1dpdGhvdXRMYXp5TG9hZGluZ2lzUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Jpc1N5bnRoZXRpY0ZvcndhcmRlcmlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyaXNHZXR0ZXJQcm9jZWR1cmVLaW5kLkdldHRlcmlzU2V0dGVyUHJvY2VkdXJlS2luZC5TZXR0ZXJpc0FjY2Vzc29ydmlzaXRQcm9jZWR1cmV2aXNpdFByb2NlZHVyZVJlZmVyZW5jZXJldHVyblR5cGVmdW5jdGlvblR5cGVQcm9jZWR1cmVLaW5kUHJvY2VkdXJlS2luZC5NZXRob2RQcm9jZWR1cmVLaW5kLk9wZXJhdG9yTWV0aG9kR2V0dGVyU2V0dGVyT3BlcmF0b3JGYWN0b3J5SW5pdGlhbGl6ZXJJbnZhbGlkSW5pdGlhbGl6ZXJ2aXNpdEludmFsaWRJbml0aWFsaXplckZpZWxkSW5pdGlhbGl6ZXJmaWVsZFJlZmVyZW5jZXZpc2l0RmllbGRJbml0aWFsaXplclN1cGVySW5pdGlhbGl6ZXJ2aXNpdFN1cGVySW5pdGlhbGl6ZXJSZWRpcmVjdGluZ0luaXRpYWxpemVydmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyTG9jYWxJbml0aWFsaXplcnZpc2l0TG9jYWxJbml0aWFsaXplckFzc2VydEluaXRpYWxpemVyc3RhdGVtZW50dmlzaXRBc3NlcnRJbml0aWFsaXplckZ1bmN0aW9uTm9kZWFzeW5jTWFya2VyZGFydEFzeW5jTWFya2VyX2JvZHlsYXp5QnVpbGRlckFzeW5jTWFya2VyLlN5bmNfYnVpbGRMYXp5bGF6eUJ1aWxkZXJMb2NhbF9nZXRUeXBlT2ZWYXJpYWJsZV9nZXROYW1lZFR5cGVPZlZhcmlhYmxlaXNSZXF1aXJlZG5hbWVkZ3Jvd2FibGV0eXBlUGFyYW1ldGVyc0NvcHl2aXNpdEZ1bmN0aW9uTm9kZUFzeW5jTWFya2VyQXN5bmNNYXJrZXIuU3luY1N0YXJBc3luY01hcmtlci5Bc3luY0FzeW5jTWFya2VyLkFzeW5jU3RhckFzeW5jTWFya2VyLlN5bmNZaWVsZGluZ1N5bmNTeW5jU3RhckFzeW5jQXN5bmNTdGFyU3luY1lpZWxkaW5nRXhwcmVzc2lvbmdldFN0YXRpY1R5cGV0eXBlc2dldFN0YXRpY1R5cGVBc0luc3RhbmNlT2Zib3VuZG51bGxUeXBldXBjYXN0VHlwZWdldFR5cGVBc0luc3RhbmNlT2Z0eXBlRXJyb3IgaXMgbm90IGEgc3VidHlwZSBvZiBhY2NlcHQxYXJnSW52YWxpZEV4cHJlc3Npb252aXNpdEludmFsaWRFeHByZXNzaW9uVmFyaWFibGVHZXRwcm9tb3RlZFR5cGV2aXNpdFZhcmlhYmxlR2V0VmFyaWFibGVTZXR2aXNpdFZhcmlhYmxlU2V0UHJvcGVydHlHZXRyZWNlaXZlcmludGVyZmFjZVRhcmdldFJlZmVyZW5jZWludGVyZmFjZVRhcmdldHJlY2VpdmVyVHlwZXN1YnN0aXR1dGVUeXBlbmFtZVN0cmluZ2ludFR5cGVydW50aW1lVHlwZXR5cGVUeXBldmlzaXRQcm9wZXJ0eUdldFByb3BlcnR5U2V0dmlzaXRQcm9wZXJ0eVNldERpcmVjdFByb3BlcnR5R2V0dmlzaXREaXJlY3RQcm9wZXJ0eUdldERpcmVjdFByb3BlcnR5U2V0dmlzaXREaXJlY3RQcm9wZXJ0eVNldERpcmVjdE1ldGhvZEludm9jYXRpb252aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb25pc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3JnZXRUeXBlT2ZPdmVybG9hZGVkQXJpdGhtZXRpY3Bvc2l0aW9uYWxTdXBlclByb3BlcnR5R2V0ZGVjbGFyaW5nQ2xhc3N2aXNpdFN1cGVyUHJvcGVydHlHZXRTdXBlclByb3BlcnR5U2V0dmlzaXRTdXBlclByb3BlcnR5U2V0U3RhdGljR2V0dmlzaXRTdGF0aWNHZXRTdGF0aWNTZXR2aXNpdFN0YXRpY1NldEFyZ3VtZW50c2VtcHR5Zm9yd2FyZGVkdmlzaXRBcmd1bWVudHNOYW1lZEV4cHJlc3Npb252aXNpdE5hbWVkRXhwcmVzc2lvbkludm9jYXRpb25FeHByZXNzaW9uTWV0aG9kSW52b2NhdGlvbmJvb2xUeXBldmlzaXRNZXRob2RJbnZvY2F0aW9uU3VwZXJNZXRob2RJbnZvY2F0aW9udmlzaXRTdXBlck1ldGhvZEludm9jYXRpb25TdGF0aWNJbnZvY2F0aW9udmlzaXRTdGF0aWNJbnZvY2F0aW9uQ29uc3RydWN0b3JJbnZvY2F0aW9udmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb25jb25zdHJ1Y3RlZFR5cGVJbnN0YW50aWF0aW9ud2l0aG91dFR5cGVQYXJhbWV0ZXJzdmlzaXRJbnN0YW50aWF0aW9uTm90b3BlcmFuZHZpc2l0Tm90TG9naWNhbEV4cHJlc3Npb25sZWZ0b3BlcmF0b3JyaWdodHZpc2l0TG9naWNhbEV4cHJlc3Npb25Db25kaXRpb25hbEV4cHJlc3Npb25jb25kaXRpb25vdGhlcndpc2VzdGF0aWNUeXBldmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb25TdHJpbmdDb25jYXRlbmF0aW9uZXhwcmVzc2lvbnNzdHJpbmdUeXBldmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uTGlzdENvbmNhdGVuYXRpb250eXBlQXJndW1lbnRsaXN0c2xpdGVyYWxMaXN0VHlwZXZpc2l0TGlzdENvbmNhdGVuYXRpb25TZXRDb25jYXRlbmF0aW9uc2V0c2xpdGVyYWxTZXRUeXBldmlzaXRTZXRDb25jYXRlbmF0aW9uTWFwQ29uY2F0ZW5hdGlvbmtleVR5cGV2YWx1ZVR5cGVtYXBzbGl0ZXJhbE1hcFR5cGV2aXNpdE1hcENvbmNhdGVuYXRpb25JbnN0YW5jZUNyZWF0aW9uY2xhc3NSZWZlcmVuY2VmaWVsZFZhbHVlc2Fzc2VydHN1bnVzZWRBcmd1bWVudHN2aXNpdEluc3RhbmNlQ3JlYXRpb25maWVsZFJlZnRyYW5zZm9ybWVkSXNFeHByZXNzaW9udmlzaXRJc0V4cHJlc3Npb25Bc0V4cHJlc3Npb25GbGFnVHlwZUVycm9yaXNUeXBlRXJyb3J2aXNpdEFzRXhwcmVzc2lvbkJhc2ljTGl0ZXJhbFN0cmluZ0xpdGVyYWx2aXNpdFN0cmluZ0xpdGVyYWxJbnRMaXRlcmFsdmlzaXRJbnRMaXRlcmFsRG91YmxlTGl0ZXJhbGRvdWJsZVR5cGV2aXNpdERvdWJsZUxpdGVyYWxCb29sTGl0ZXJhbHZpc2l0Qm9vbExpdGVyYWxOdWxsTGl0ZXJhbHZpc2l0TnVsbExpdGVyYWxTeW1ib2xMaXRlcmFsc3ltYm9sVHlwZXZpc2l0U3ltYm9sTGl0ZXJhbFR5cGVMaXRlcmFsdmlzaXRUeXBlTGl0ZXJhbFRoaXNFeHByZXNzaW9udmlzaXRUaGlzRXhwcmVzc2lvblJldGhyb3d2aXNpdFJldGhyb3dUaHJvd3Zpc2l0VGhyb3dMaXN0TGl0ZXJhbHZpc2l0TGlzdExpdGVyYWxTZXRMaXRlcmFsdmlzaXRTZXRMaXRlcmFsTWFwTGl0ZXJhbHZpc2l0TWFwTGl0ZXJhbE1hcEVudHJ5dmlzaXRNYXBFbnRyeUF3YWl0RXhwcmVzc2lvbnVuZnV0dXJlVHlwZXZpc2l0QXdhaXRFeHByZXNzaW9uTG9jYWxGdW5jdGlvbkZ1bmN0aW9uRXhwcmVzc2lvbnZpc2l0RnVuY3Rpb25FeHByZXNzaW9uQ29uc3RhbnRFeHByZXNzaW9uY29uc3RhbnR2aXNpdENvbnN0YW50RXhwcmVzc2lvbnZpc2l0Q29uc3RhbnRMZXR2aXNpdExldEJsb2NrRXhwcmVzc2lvbnZpc2l0QmxvY2tFeHByZXNzaW9uTG9hZExpYnJhcnlmdXR1cmVUeXBldmlzaXRMb2FkTGlicmFyeUNoZWNrTGlicmFyeUlzTG9hZGVkb2JqZWN0VHlwZXZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWRFeHByZXNzaW9uU3RhdGVtZW50dmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QmxvY2tzdGF0ZW1lbnRzcmVtb3ZlTGFzdHZpc2l0QmxvY2thZGRTdGF0ZW1lbnRBc3NlcnRCbG9ja3Zpc2l0QXNzZXJ0QmxvY2tFbXB0eVN0YXRlbWVudHZpc2l0RW1wdHlTdGF0ZW1lbnRBc3NlcnRTdGF0ZW1lbnRjb25kaXRpb25TdGFydE9mZnNldGNvbmRpdGlvbkVuZE9mZnNldHZpc2l0QXNzZXJ0U3RhdGVtZW50TGFiZWxlZFN0YXRlbWVudHZpc2l0TGFiZWxlZFN0YXRlbWVudEJyZWFrU3RhdGVtZW50dmlzaXRCcmVha1N0YXRlbWVudFdoaWxlU3RhdGVtZW50dmlzaXRXaGlsZVN0YXRlbWVudERvU3RhdGVtZW50dmlzaXREb1N0YXRlbWVudEZvclN0YXRlbWVudHZhcmlhYmxlc3VwZGF0ZXN2aXNpdEZvclN0YXRlbWVudEZvckluU3RhdGVtZW50Ym9keU9mZnNldGlzQXN5bmN2aXNpdEZvckluU3RhdGVtZW50U3dpdGNoU3RhdGVtZW50Y2FzZXN2aXNpdFN3aXRjaFN0YXRlbWVudFN3aXRjaENhc2VleHByZXNzaW9uT2Zmc2V0c2lzRGVmYXVsdGRlZmF1bHRDYXNldmlzaXRTd2l0Y2hDYXNlQ29udGludWVTd2l0Y2hTdGF0ZW1lbnR2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50SWZTdGF0ZW1lbnR2aXNpdElmU3RhdGVtZW50UmV0dXJuU3RhdGVtZW50dmlzaXRSZXR1cm5TdGF0ZW1lbnRUcnlDYXRjaGNhdGNoZXN2aXNpdFRyeUNhdGNoQ2F0Y2hndWFyZHN0YWNrVHJhY2V2aXNpdENhdGNoVHJ5RmluYWxseWZpbmFsaXplcnZpc2l0VHJ5RmluYWxseVlpZWxkU3RhdGVtZW50RmxhZ1lpZWxkU3RhckZsYWdOYXRpdmVpc1lpZWxkU3RhcmlzTmF0aXZldmlzaXRZaWVsZFN0YXRlbWVudFZhcmlhYmxlRGVjbGFyYXRpb25maWxlRXF1YWxzT2Zmc2V0YmluYXJ5T2Zmc2V0Tm9UYWdGbGFnRmllbGRGb3JtYWxGbGFnSW5TY29wZUZsYWdSZXF1aXJlZGlzRmllbGRGb3JtYWxmb3JWYWx1ZXZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkZ1bmN0aW9uRGVjbGFyYXRpb252aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb25OYW1lX2ludGVybmFsbGlicmFyeU5hbWVpc1ByaXZhdGV2aXNpdE5hbWVfUHJpdmF0ZU5hbWU6Ol9jb21wdXRlSGFzaENvZGVfUHVibGljTmFtZU51bGxhYmlsaXR5TnVsbGFiaWxpdHkubnVsbGFibGVOdWxsYWJpbGl0eS5ub25OdWxsYWJsZU51bGxhYmlsaXR5Lm5laXRoZXJOdWxsYWJpbGl0eS5sZWdhY3ludWxsYWJsZW5vbk51bGxhYmxlbmVpdGhlcmxlZ2FjeURhcnRUeXBlbnVsbGFiaWxpdHl1bmFsaWFzdW5hbGlhc09uY2VJbnZhbGlkVHlwZXZpc2l0SW52YWxpZFR5cGVJbnZhbGlkVHlwZSBkb2Vzbid0IGhhdmUgbnVsbGFiaWxpaXR5RHluYW1pY1R5cGV2aXNpdER5bmFtaWNUeXBlVm9pZFR5cGV2aXNpdFZvaWRUeXBlQm90dG9tVHlwZXZpc2l0Qm90dG9tVHlwZUludGVyZmFjZVR5cGVjbGFzc05hbWVfZGVmYXVsdFR5cGVBcmd1bWVudHN2aXNpdEludGVyZmFjZVR5cGVGdW5jdGlvblR5cGV0eXBlZGVmVHlwZV9oYXNoQ29kZXR5cGVkZWZSZWZlcmVuY2V0eXBlZGVmdmlzaXRGdW5jdGlvblR5cGVnZXROYW1lZFBhcmFtZXRlcmxvd2VydXBwZXJwaXZvdH4vbmFtZWRQYXJhbWV0ZXJjb21wYXJpc29uVHlwZWRlZlR5cGV0eXBlZGVmTm9kZXZpc2l0VHlwZWRlZlR5cGV2aXNpdFR5cGVkZWZSZWZlcmVuY2VOYW1lZFR5cGVGbGFnUmVxdWlyZWROYW1lZFR5cGV2aXNpdE5hbWVkVHlwZVR5cGVQYXJhbWV0ZXJUeXBlZGVjbGFyZWROdWxsYWJpbGl0eXByb21vdGVkQm91bmR2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlZ2V0TnVsbGFiaWxpdHlsaHNOdWxsYWJpbGl0eWJvdW5kTnVsbGFiaWxpdHlUeXBlUGFyYW1ldGVyZGVmYXVsdFR5cGV2aXNpdFR5cGVQYXJhbWV0ZXJpc0Z1bmN0aW9uVHlwZVR5cGVQYXJhbWV0ZXJTdXBlcnR5cGVhc0ludGVyZmFjZVR5cGVDb25zdGFudGdldFR5cGVhc0V4cHJlc3Npb25QcmltaXRpdmVDb25zdGFudE51bGxDb25zdGFudHZpc2l0TnVsbENvbnN0YW50dmlzaXROdWxsQ29uc3RhbnRSZWZlcmVuY2VCb29sQ29uc3RhbnR2aXNpdEJvb2xDb25zdGFudHZpc2l0Qm9vbENvbnN0YW50UmVmZXJlbmNlSW50Q29uc3RhbnR2aXNpdEludENvbnN0YW50dmlzaXRJbnRDb25zdGFudFJlZmVyZW5jZURvdWJsZUNvbnN0YW50dmlzaXREb3VibGVDb25zdGFudHZpc2l0RG91YmxlQ29uc3RhbnRSZWZlcmVuY2Vpc05hTlN0cmluZ0NvbnN0YW50dmlzaXRTdHJpbmdDb25zdGFudHZpc2l0U3RyaW5nQ29uc3RhbnRSZWZlcmVuY2VTeW1ib2xDb25zdGFudGxpYnJhcnlSZWZlcmVuY2V2aXNpdFN5bWJvbENvbnN0YW50dmlzaXRTeW1ib2xDb25zdGFudFJlZmVyZW5jZSNNYXBDb25zdGFudF9jYWNoZWRIYXNoQ29kZXZpc2l0TWFwQ29uc3RhbnR2aXNpdE1hcENvbnN0YW50UmVmZXJlbmNlPihDb25zdGFudE1hcEVudHJ5TGlzdENvbnN0YW50dmlzaXRMaXN0Q29uc3RhbnR2aXNpdExpc3RDb25zdGFudFJlZmVyZW5jZVNldENvbnN0YW50dmlzaXRTZXRDb25zdGFudHZpc2l0U2V0Q29uc3RhbnRSZWZlcmVuY2VJbnN0YW5jZUNvbnN0YW50dmlzaXRJbnN0YW5jZUNvbnN0YW50dmlzaXRJbnN0YW5jZUNvbnN0YW50UmVmZXJlbmNlIHt9UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudHRlYXJPZmZDb25zdGFudHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudFJlZmVyZW5jZT4pdHlwZUVudmlyb25tZW50bWFwcGluZ1RlYXJPZmZDb25zdGFudHByb2NlZHVyZVJlZmVyZW5jZXZpc2l0VGVhck9mZkNvbnN0YW50dmlzaXRUZWFyT2ZmQ29uc3RhbnRSZWZlcmVuY2VUeXBlTGl0ZXJhbENvbnN0YW50dmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50dmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50UmVmZXJlbmNlVW5ldmFsdWF0ZWRDb25zdGFudHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudFJlZmVyZW5jZXJvb3RsaWJyYXJpZXN1cmlUb1NvdXJjZW1ldGFkYXRhbWFpbk1ldGhvZE5hbWVuYW1lUm9vdGFkb3B0Q2hpbGRyZW5hZG9wdENoaWxkY29tcHV0ZUNhbm9uaWNhbE5hbWVzRm9yTGlicmFyeWdldENoaWxkRnJvbVVyaXVuYmluZENhbm9uaWNhbE5hbWVzdW5iaW5kQWxsdmlzaXRDb21wb25lbnRnZXRMb2NhdGlvbmFkZE1ldGFkYXRhUmVwb3NpdG9yeXJlcG9zaXRvcnlMb2NhdGlvbmNvbHVtbk1ldGFkYXRhUmVwb3NpdG9yeXdyaXRlVG9CaW5hcnlyZWFkRnJvbUJpbmFyeUJpbmFyeVNpbmtnZXRCdWZmZXJPZmZzZXR3cml0ZUJ5dGVieXRld3JpdGVCeXRlc3dyaXRlVUludDMyd3JpdGVVSW50MzB3cml0ZUJ5dGVMaXN0d3JpdGVOdWxsQWxsb3dlZENhbm9uaWNhbE5hbWVSZWZlcmVuY2V3cml0ZVN0cmluZ1JlZmVyZW5jZXdyaXRlTmFtZXdyaXRlRGFydFR5cGV3cml0ZU5vZGVlbnRlclNjb3BlbWVtYmVyU2NvcGV2YXJpYWJsZVNjb3BlbGVhdmVTY29wZUJpbmFyeVNvdXJjZWN1cnJlbnRPZmZzZXRyZWFkQnl0ZXJlYWRCeXRlc3JlYWRVSW50cmVhZFVpbnQzMnJlYWRCeXRlTGlzdHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlcmVhZFN0cmluZ1JlZmVyZW5jZXJlYWROYW1lcmVhZERhcnRUeXBlcmVhZEZ1bmN0aW9uTm9kZV9DaGlsZFJlcGxhY2VyZGVmYXVsdFRyZWVOb2RlU291cmNlbGluZVN0YXJ0c2NhY2hlZFRleHRnZXRUZXh0TGluZWRlY29kZWFsbG93TWFsZm9ybWVkZW5kT2ZMaW5lSW50ZXJuYWwgZXJyb3JtaWRsaW5lSW5kZXhsaW5lU3RhcnRsaW5lTnVtYmVyY29sdW1uTnVtYmVyX0hhc2hNLTcwNzA2NzU1NjU5MjE0MjQwMjNpbnRJczY0Qml0Y29tYmluZWZpbmlzaGNvbWJpbmVGaW5pc2hjb21iaW5lMnZhbHVlMXZhbHVlMmNvbWJpbmUyRmluaXNoaGFzaDJvYmplY3Qxb2JqZWN0MmNvbWJpbmVMaXN0SGFzaGl0ZW1jb21iaW5lTGlzdGhhc2hlc2NvbWJpbmVNYXBIYXNoVW5vcmRlcmVkZW50cnlIYXNoZXNfc2hydTkyMjMzNzIwMzY4NTQ3NzE3MTJfdGVtcG9yYXJ5SGFzaENvZGVUYWJsZWluZm9ybWF0aXZlc2V0UGFyZW50c25vZGVzdmlzaXRMaXN0dmlzaXRvcnZpc2l0SXRlcmFibGV0cmFuc2Zvcm1UeXBlTGlzdHN0b3JlSW5kZXh0cmFuc2Zvcm1TdXBlcnR5cGVMaXN0dHJhbnNmb3JtTGlzdF9nZXRBc1R5cGVBcmd1bWVudHNnZXRNZW1iZXJSZWZlcmVuY2VnZXRDbGFzc1JlZmVyZW5jZWdldENhbm9uaWNhbE5hbWVPZk1lbWJlciBoYXMgbm8gY2Fub25pY2FsIG5hbWVnZXRDYW5vbmljYWxOYW1lT2ZDbGFzc2dldENhbm9uaWNhbE5hbWVPZkxpYnJhcnlsaXN0SGFzaENvZGVtYXBIYXNoQ29kZW1hcEhhc2hDb2RlT3JkZXJlZG1hcEhhc2hDb2RlVW5vcmRlcmVkbGlzdEVxdWFsc21hcEVxdWFsc2NvbnRhaW5zS2V5Z2V0Q2Fub25pY2FsTmFtZU9mVHlwZWRlZl9nZXRMb2NhdGlvbkluQ29tcG9uZW50ZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZW5hbWVQYXJ0cyB3aXRoIGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvblN1YmNsYXNzTmFtZWtlcm5lbC50YXJnZXQudGFyZ2V0c19UYXJnZXRCdWlsZGVyVGFyZ2V0RmxhZ3N0cmFja1dpZGdldENyZWF0aW9uRGlhZ25vc3RpY1JlcG9ydGVyQ2NoYXJPZmZzZXROdW1iZXJTZW1hbnRpY3NOdW1iZXJTZW1hbnRpY3Mudm1OdW1iZXJTZW1hbnRpY3MuanN2bUNvbnN0YW50c0JhY2tlbmRsb3dlckxpc3RDb25zdGFudGxvd2VyU2V0Q29uc3RhbnRsb3dlck1hcENvbnN0YW50bnVtYmVyU2VtYW50aWNzc2hvdWxkSW5saW5lQ29uc3RhbnRzdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzZXh0cmFSZXF1aXJlZExpYnJhcmllc2V4dHJhRGVjbGFyZWRWYXJpYWJsZXNyZXF1aXJlZFNka0NsYXNzZXNlbmFibGVOb1N1Y2hNZXRob2RGb3J3YXJkZXJzZW5hYmxlU3VwZXJNaXhpbnNwZXJmb3JtT3V0bGluZVRyYW5zZm9ybWF0aW9uc3BlcmZvcm1QcmVDb25zdGFudEV2YWx1YXRpb25UcmFuc2Zvcm1hdGlvbnNjb3JlVHlwZXNkaWFnbm9zdGljUmVwb3J0ZXJsb2dnZXJwZXJmb3JtTW9kdWxhclRyYW5zZm9ybWF0aW9uc09uTGlicmFyaWVzaGllcmFyY2h5ZW52aXJvbm1lbnREZWZpbmVzcGVyZm9ybVRyYW5zZm9ybWF0aW9uc09uUHJvY2VkdXJlbWF5RGVmaW5lUmVzdHJpY3RlZFR5cGVkYXJ0Y29yZWFsbG93UGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2Vzc2ltcG9ydGVyaW1wb3J0ZWRkYXJ0X2ludGVybmFsL2VuYWJsZU5hdGl2ZW5hdGl2ZUV4dGVuc2lvbkV4cGVjdHNTdHJpbmdlcnJvck9uVW5leGFjdFdlYkludExpdGVyYWxzc3VwcG9ydHNTZXRMaXRlcmFsc2luc3RhbnRpYXRlSW52b2NhdGlvbmlzU3VwZXJpbnN0YW50aWF0ZU5vU3VjaE1ldGhvZEVycm9yaXNNZXRob2Rpc0ZpZWxkaXNMb2NhbFZhcmlhYmxlaXNEeW5hbWljaXNDb25zdHJ1Y3RvcmlzVG9wTGV2ZWxjb25maWd1cmVDb21wb25lbnRUYXJnZXQoY29uY3JldGVMaXN0TGl0ZXJhbENsYXNzY29uY3JldGVDb25zdExpc3RMaXRlcmFsQ2xhc3Njb25jcmV0ZU1hcExpdGVyYWxDbGFzc2NvbmNyZXRlQ29uc3RNYXBMaXRlcmFsQ2xhc3Njb25jcmV0ZUludExpdGVyYWxDbGFzc2NvbmNyZXRlU3RyaW5nTGl0ZXJhbENsYXNzY29uc3RhbnRzQmFja2VuZE5vbmVDb25zdGFudHNCYWNrZW5kTm9uZVRhcmdldG5vbmV0YXJnZXROYW1lc3RhcmdldHNnZXRUYXJnZXRmcm9udF9lbmQuY29tcGlsZXJfb3B0aW9uc2V4cGlyZWRFeHBlcmltZW50YWxGbGFnc3BhcnNlRXhwZXJpbWVudGFsRmxhZ1N0YW5kYXJkRmlsZVN5c3RlbXNka1Jvb3RpbnB1dFN1bW1hcmllc3Nka1N1bW1hcnlkZWNsYXJlZFZhcmlhYmxlc2NvbXBpbGVTZGtjaGFzZURlcGVuZGVuY2llc25leHQgcmVsZWFzZXRhcmdldFBhdGNoZXNlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudGRlYnVnRHVtcG9taXRQbGF0Zm9ybXNldEV4aXRDb2RlT25Qcm9ibGVtZW1iZWRTb3VyY2VUZXh0dGhyb3dPbkVycm9yc0ZvckRlYnVnZ2luZ3Rocm93T25XYXJuaW5nc0ZvckRlYnVnZ2luZ2J5dGVjb2Rld3JpdGVGaWxlT25DcmFzaFJlcG9ydGZlYXR1cmVuby1leHBlcmltZW50VW5rbm93biBleHBlcmltZW50OiBFeHBlcmltZW50IHNwZWNpZmllZCB3aXRoIGNvbmZsaWN0aW5nIHZhbHVlczogRW5hYmxpbmcgZXhwZXJpbWVudCAgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5EaXNhYmxpbmcgZXhwZXJpbWVudCBFeHBlcmltZW50ICBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIFRoZSB1c2Ugb2YgdGhlIGZsYWcgaXMgZGVwcmVjYXRlZC4gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gTm8gZGVmYXVsdCB2YWx1ZSBmb3IgZnJvbnRfZW5kLmRpYWdub3N0aWNfbWVzc2FnZUNvZGVEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uRm9ybWF0dGVkTWVzc2FnZWFuc2lGb3JtYXR0ZWRwbGFpblRleHRGb3JtYXR0ZWRzZXZlcml0eWdldE1lc3NhZ2VDb2RlT2JqZWN0Z2V0TWVzc2FnZUNvZGVnZXRNZXNzYWdlQXJndW1lbnRzcmVsYXRlZEluZm9ybWF0aW9uY29uc3RhbnRVcGRhdGUyMDE4Y29udHJvbEZsb3dDb2xsZWN0aW9uc2V4dGVuc2lvbk1ldGhvZHNzZXRMaXRlcmFsc3NwcmVhZENvbGxlY3Rpb25zdHJpcGxlU2hpZnRjb25zdGFudC11cGRhdGUtMjAxOGNvbnRyb2wtZmxvdy1jb2xsZWN0aW9uc2V4dGVuc2lvbi1tZXRob2Rzbm9uLW51bGxhYmxlc2V0LWxpdGVyYWxzc3ByZWFkLWNvbGxlY3Rpb25zdHJpcGxlLXNoaWZ0ZnJvbnRfZW5kLmZpbGVfc3lzdGVtZW50aXR5Rm9yVXJpcmVhZEFzQnl0ZXNyZWFkQXNTdHJpbmdGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaT07IG1lc3NhZ2U9ZnJvbnRfZW5kLmtlcm5lbF9nZW5lcmF0b3JDbGFzc0hpZXJhcmNoeUNvcmVUeXBlc25vTGVuZ3RoZ2VuZXJhdGVLZXJuZWxkZXBzY2xhc3NIaWVyYXJjaHlrZXJuZWxGb3JQcm9ncmFtSW50ZXJuYWxyZXRhaW5EYXRhRm9yVGVzdGluZ3BPcHRpb25zaW5jbHVkZUhpZXJhcmNoeUFuZENvcmVUeXBlc2tlcm5lbEZvck1vZHVsZXNvdXJjZXNVaW50OExpc3RCaW5hcnlCdWlsZGVyUGFja2FnZXNwYWNrYWdlX2NvbmZpZ01hcFBhY2thZ2VzcHJpbnREaWFnbm9zdGljTWVzc2FnZWNvbW1hbmRfbGluZV9yZXBvcnRpbmdNZXNzYWdlbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHNtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaW1lc3NhZ2VJbnRlcm5hbFByb2JsZW1Qcm92aWRlZEJvdGhDb21waWxlU2RrQW5kU2RrU3VtbWFyeW1lc3NhZ2VNaXNzaW5nSW5wdXR0ZW1wbGF0ZUNhbm5vdFJlYWRTZGtTcGVjaWZpY2F0aW9udGVtcGxhdGVDYW50UmVhZEZpbGV0ZW1wbGF0ZUlucHV0RmlsZU5vdEZvdW5kdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZHRlbXBsYXRlUGFja2FnZXNGaWxlRm9ybWF0dGVtcGxhdGVTZGtSb290Tm90Rm91bmR0ZW1wbGF0ZVNka1NwZWNpZmljYXRpb25Ob3RGb3VuZHRlbXBsYXRlU2RrU3VtbWFyeU5vdEZvdW5kRGVidWdBYm9ydFRpY2tlclVyaVRyYW5zbGF0b3JMaWJyYXJpZXNTcGVjaWZpY2F0aW9uRXhjZXB0aW9uVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbl9yYXdfcGFja2FnZXNfcGFja2FnZXNVcmlfdXJpVHJhbnNsYXRvcl9zZGtTdW1tYXJ5Q29tcG9uZW50X2lucHV0U3VtbWFyaWVzQ29tcG9uZW50c19saW5rZWREZXBlbmRlbmNpZXNfc2RrUm9vdF9zZGtTdW1tYXJ5X3Nka1N1bW1hcnlCeXRlc19saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpdGlja2VyX2ZpbGVTeXN0ZW1fdGFyZ2V0X2NvbXB1dGVkU2RrRGVmYXVsdHNpc1ZlcmJvc2VwYWNrYWdlc1VyaV9lbnN1cmVTZGtEZWZhdWx0c2xvYWRTZGtTdW1tYXJ5Qnl0ZXNfcmVhZEFzQnl0ZXNwYWNrYWdlc1VyaVJhd2Zvcm1hdGZvcm1hdHRlZGZvcm1hdHRlZENvbnRleHRTZXZlcml0eS5jb250ZXh0d2l0aEZvcm1hdHRpbmdsb2dFcnJvcnJlcG9ydERpYWdub3N0aWNNZXNzYWdlX2RlZmF1bHREaWFnbm9zdGljTWVzc2FnZUhhbmRsZXJyZXBvcnRXaXRob3V0TG9jYXRpb253aXRob3V0TG9jYXRpb252YWxpZGF0ZU9wdGlvbnNlcnJvck9uTWlzc2luZ0lucHV0OmFzeW5jX3RlbXBvcmFyeV8wOmFzeW5jX3RlbXBvcmFyeV8xZGVidWdTdHJpbmdObyBpbnB1dCBmaWxlIHByb3ZpZGVkIHRvIHRoZSBjb21waWxlci5NaXNzaW5nSW5wdXRTREsgcm9vdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiAjdXJpLndpdGhBcmd1bWVudHNTREsgc3VtbWFyeSBub3QgZm91bmQ6ICN1cmkuVGhlIGNvbXBpbGVTZGsgYW5kIHNka1N1bW1hcnkgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlSW50ZXJuYWxQcm9ibGVtUHJvdmlkZWRCb3RoQ29tcGlsZVNka0FuZFNka1N1bW1hcnlTZXZlcml0eS5pbnRlcm5hbFByb2JsZW1JbnB1dCBmaWxlIG5vdCBmb3VuZDogI3VyaS5fY3JlYXRlRmlsZVN5c3RlbWlzRXhwZXJpbWVudEVuYWJsZWRObyBleHBpcmVkIHZhbHVlIGZvciBsb2FkU2RrU3VtbWFyeWxvYWRDb21wb25lbnRzZGtTdW1tYXJ5Q29tcG9uZW50cGxhdGZvcm1zZGtTdW1tYXJ5IGFscmVhZHkgbG9hZGVkLmxvYWRJbnB1dFN1bW1hcmllc2FsbEJ5dGVzaW5wdXRTdW1tYXJpZXNDb21wb25lbnRzY29tcG9uZW50c2lucHV0U3VtbWFyaWVzQ29tcG9uZW50cyBhbHJlYWR5IGxvYWRlZC5sb2FkTGlua0RlcGVuZGVuY2llc2Fsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXNkaXNhYmxlTGF6eVJlYWRpbmdnZXRVcmlUcmFuc2xhdG9yYnlwYXNzQ2FjaGVsb2dNc1N0YXJ0ZWQgYnVpbGRpbmcgVXJpVHJhbnNsYXRvcl9jb21wdXRlTGlicmFyeVNwZWNpZmljYXRpb25SZWFkIGxpYnJhcmllcyBmaWxlX2dldFBhY2thZ2VzcGFja2FnZXNSZWFkIHBhY2thZ2VzIGZpbGU6c2F2ZWRfdHJ5X2NvbnRleHRfdmFyMV9mYXN0YVNESyBsaWJyYXJpZXMgc3BlY2lmaWNhdGlvbiBub3QgZm91bmQ6ICN1cmkuTm9ybWFsbHksIHRoZSBzcGVjaWZpY2F0aW9uIGlzIGEgZmlsZSBuYW1lZCAnbGlicmFyaWVzLmpzb24nIGluIHRoZSBEYXJ0IFNESyBpbnN0YWxsIGxvY2F0aW9uLnNwZWNVbmFibGUgdG8gcmVhZCB0aGUgJ2xpYnJhcmllcy5qc29uJyBzcGVjaWZpY2F0aW9uIGZpbGU6CiAgI3N0cmluZy5jcmVhdGVQYWNrYWdlc0Zyb21GaWxlQ2FuJ3QgaW5mZXIgYSAucGFja2FnZXMgZmlsZSB3aGVuIGNvbXBpbGluZyBtdWx0aXBsZSBpbnB1dHMuVHJ5IHNwZWNpZnlpbmcgdGhlIGZpbGUgZXhwbGljaXRseSB3aXRoIHRoZSAtLXBhY2thZ2VzIG9wdGlvbi5DYW50SW5mZXJQYWNrYWdlc0Zyb21NYW55SW5wdXRzQ2FuJ3QgaW5mZXIgYSAucGFja2FnZXMgZmlsZSBmcm9tIGFuIGlucHV0ICdwYWNrYWdlOionIFVSSS5DYW50SW5mZXJQYWNrYWdlc0Zyb21QYWNrYWdlVXJpX2ZpbmRQYWNrYWdlc2NvbnRlbnRzRXJyb3Igd2hlbiByZWFkaW5nICcjdXJpJzogI3N0cmluZ1Byb2JsZW0gaW4gcGFja2FnZXMgY29uZmlndXJhdGlvbiBmaWxlOiAjc3RyaW5nc2NyaXB0VXJpVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAnI25hbWUnLkV4cGVjdGVkIGlucHV0IFVyaSB0byBiZSBhYnNvbHV0ZTogY2hlY2tJbkRpcmNhbmRpZGF0ZS5wYWNrYWdlc3BhcmVudERpci4ucmVwbGFjZWluZmVyIHRoZSBkZWZhdWx0IHNkayBsb2NhdGlvbnZtX3BsYXRmb3JtX3N0cm9uZy5kaWxsd3JpdGVMaXN0ZWxlbWVudHM6IDxlbXB0eT5zICAtIElucHV0czogT3V0cHV0OiBXYXMgZGlhZ25vc3RpYyBtZXNzYWdlIGhhbmRsZXIgcHJvdmlkZWQ6IG5veWVzRmlsZVN5c3RlbTogKHByb3ZpZGVkOiBJbnB1dCBTdW1tYXJpZXNMaW5rZWQgRGVwZW5kZW5jaWVzUGFja2FnZXMgdXJpOiBQYWNrYWdlczogQ29tcGlsZSBTREs6IFNESyByb290OiAgKHByb3ZpZGVkOiBTREsgc3BlY2lmaWNhdGlvbjogU0RLIHN1bW1hcnk6IExlZ2FjeSBtb2RlOiBUYXJnZXQ6IHRocm93T25FcnJvcnNGb3JEZWJ1Z2dpbmc6IHRocm93T25XYXJuaW5nc0ZvckRlYnVnZ2luZzogZXhpdCBvbiBwcm9ibGVtOiBFbWJlZCBzb3VyY2VzOiBkZWJ1Z0R1bXA6IHZlcmJvc2U6IHZlcmlmeTogSGVybWV0aWNGaWxlU3lzdGVtaW5jbHVkZWRGaWxlc19yZWFsRmlsZVN5c3RlbUhlcm1ldGljQWNjZXNzRXhjZXB0aW9uSW52YWxpZCBhY2Nlc3MgdG8gdGhlIGZpbGUgaXMgYWNjZXNzZWQgaW4gYSBtb2R1bGFyIGhlcm1ldGljIGJ1aWxkLCBidXQgaXQgd2FzIG5vdCBleHBsaWNpdGx5IGxpc3RlZCBhcyBhbiBpbnB1dC5qc29uRGVjb2RlanNvbkVuY29kZV90YXJnZXRzdGFyZ2V0U3BlY05vIGxpYnJhcnkgc3BlY2lmaWNhdGlvbiBmb3IgdGFyZ2V0ICJiYXNlVXJpanNvbkRhdGF0b3AtbGV2ZWwgc3BlY2lmaWNhdGlvbiBpcyBub3QgYSBtYXB0YXJnZXROYW1ldGFyZ2V0RGF0YWNvbW1lbnQ6dGFyZ2V0IHNwZWNpZmljYXRpb24gZm9yICcnIGlzIG5vdCBhIG1hcHRhcmdldCBzcGVjaWZpY2F0aW9uIGZvciAnJyBkb2Vzbid0IGhhdmUgYSBsaWJyYXJpZXMgZW50cnlsaWJyYXJpZXNEYXRhbGlicmFyaWVzIGVudHJ5IGZvciAnbGlicmFyeSBkYXRhIGZvciAnJyBpbiB0YXJnZXQgJ2NoZWNrQW5kUmVzb2x2ZXVyaVN0cmluZ3VyaSB2YWx1ZSAnJyBpcyBub3QgYSBzdHJpbmcoZnJvbSBsaWJyYXJ5ICcnKXVyaSBzY2hlbWUgaW4gJ3BhdGNoZXNwYXRjaGVzIGVudHJ5IGZvciAnJyBpcyBub3QgYSBsaXN0IG9yIGEgc3RyaW5nc3VwcG9ydGVkInN1cHBvcnRlZCIgZW50cnk6IGV4cGVjdGVkIGEgJ2Jvb2wnIGJ1dCBnb3QgYSAnJyAoJ19yZXBvcnRFcnJvcnRvSnNvblN0cmluZ3RvSnNvbk1hcHBhdGhGb3JfbGlicmFyaWVzbGlibGlicmFyeUluZm9Gb3JMaWJyYXJ5SW5mb2Zhc3RhLmNvbXBpbGVyX2NvbnRleHRab25lcnVuWm9uZWRjb21wdXRlRW5hYmxlQ29sb3JzbWVzc2FnZUludGVybmFsUHJvYmxlbU1pc3NpbmdDb250ZXh0ZXJyb3JzZW5hYmxlQ29sb3JzQ2FjaGVkY2FjaGVkU2RrUm9vdGRpc2FibGVDb2xvcnNmb3JtYXRXaXRob3V0TG9jYXRpb25yZWNvcmREZXBlbmRlbmN5RXhwZWN0ZWQgYSBmaWxlLVVSSSwgYnV0IGdvdDogJ0NvbXBpbGVyIGNhbm5vdCBydW4gd2l0aG91dCBhIGNvbXBpbGVyIGNvbnRleHQuQXJlIGNhbGxzIHRvIHRoZSBjb21waWxlciB3cmFwcGVkIGluIENvbXBpbGVyQ29udGV4dC5ydW5JbkNvbnRleHQ/SW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHR0aXBJbnRlcm5hbCBwcm9ibGVtOiAKVGlwOiBpc0FjdGl2ZXJ1bkluQ29udGV4dGFjdGlvbnpvbmVWYWx1ZXNydW5XaXRoT3B0aW9uc3J1bldpdGhEZWZhdWx0T3B0aW9uc2NvbXBpbGVyQ29udGV4dEtleWZhc3RhLmNvZGVzSnNvbkVuY29kZXJ1dGlsZmFzdGFfY29kZXNfZ2VuZXJhdGVkLmRhcnRTdW1tYXJ5VGVtcGxhdGV0ZW1wbGF0ZWFuYWx5emVyQ29kZXNNZXNzYWdlQ29kZVRlbXBsYXRlbWVzc2FnZVRlbXBsYXRldGlwVGVtcGxhdGVtZXNzYWdlT2JqZWN0bG9jYXRlZE1lc3NhZ2U6c3luY19vcDppdGVyYXRvcl9jdXJyZW50dG9Kc29uZW5jb2RlcmNvbnZlcnRmcm9tSnNvbmpzb25TdHJpbmdkZWNvZGVkU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nU2V2ZXJpdHkuaWdub3JlZFNldmVyaXR5Lndhcm5pbmd0ZW1wbGF0ZUFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uVGhlIGNsYXNzICcjbmFtZScgaXMgYWJzdHJhY3QgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZC5jb2RlQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25BYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbk5FV19XSVRIX0FCU1RSQUNUX0NMQVNTY29kZUFic3RyYWN0Q2xhc3NNZW1iZXJNZW1iZXJzIG9mIGNsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2Fic3RyYWN0Jy5UcnkgcmVtb3ZpbmcgdGhlICdhYnN0cmFjdCcga2V5d29yZC4gWW91IGNhbiBhZGQgdGhlICdhYnN0cmFjdCcga2V5d29yZCBiZWZvcmUgdGhlIGNsYXNzIGRlY2xhcmF0aW9uLkFic3RyYWN0Q2xhc3NNZW1iZXJtZXNzYWdlQWJzdHJhY3RDbGFzc01lbWJlcmNvZGVBYnN0cmFjdE5vdFN5bmNBYnN0cmFjdCBtZXRob2RzIGNhbid0IHVzZSAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJy5BYnN0cmFjdE5vdFN5bmNOT05fU1lOQ19BQlNUUkFDVF9NRVRIT0RtZXNzYWdlQWJzdHJhY3ROb3RTeW5jdGVtcGxhdGVBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb25GYWN0b3J5IHJlZGlyZWN0cyB0byBjbGFzcyAnI25hbWUnLCB3aGljaCBpcyBhYnN0cmFjdCBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLmNvZGVBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb25BYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb25GQUNUT1JZX1JFRElSRUNUU19UT19BQlNUUkFDVF9DTEFTU3RlbXBsYXRlQWNjZXNzRXJyb3JBY2Nlc3MgZXJyb3I6ICcjbmFtZScuY29kZUFjY2Vzc0Vycm9yQWNjZXNzRXJyb3J0ZW1wbGF0ZUFtYmlndW91c1N1cGVydHlwZXMnI25hbWUnIGNhbid0IGltcGxlbWVudCBib3RoICcjdHlwZScgYW5kICcjdHlwZTInY29kZUFtYmlndW91c1N1cGVydHlwZXNBbWJpZ3VvdXNTdXBlcnR5cGVzQU1CSUdVT1VTX1NVUEVSVFlQRVNjb2RlQW5vbnltb3VzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb25DYW4ndCBicmVhayB0byBhIHRhcmdldCBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi5Bbm9ueW1vdXNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbkxBQkVMX0lOX09VVEVSX1NDT1BFbWVzc2FnZUFub255bW91c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uY29kZUFub255bW91c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uQ2FuJ3QgY29udGludWUgYXQgYSB0YXJnZXQgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uQW5vbnltb3VzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb25tZXNzYWdlQW5vbnltb3VzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb250ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGVUaGUgYXJndW1lbnQgdHlwZSAnI3R5cGUnIGNhbid0IGJlIGFzc2lnbmVkIHRvIHRoZSBwYXJhbWV0ZXIgdHlwZSAnI3R5cGUyJy5UcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciwgb3IgY2FzdGluZyB0aGUgYXJndW1lbnQgdG8gJyN0eXBlMicuY29kZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGVBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlQVJHVU1FTlRfVFlQRV9OT1RfQVNTSUdOQUJMRXRlbXBsYXRlQXNjaWlDb250cm9sQ2hhcmFjdGVyVGhlIGNvbnRyb2wgY2hhcmFjdGVyICN1bmljb2RlIGNhbiBvbmx5IGJlIHVzZWQgaW4gc3RyaW5ncyBhbmQgY29tbWVudHMuY29kZUFzY2lpQ29udHJvbENoYXJhY3RlckFzY2lpQ29udHJvbENoYXJhY3RlcklMTEVHQUxfQ0hBUkFDVEVSY29kZUFzc2VydEFzRXhwcmVzc2lvbmBhc3NlcnRgIGNhbid0IGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbi5Bc3NlcnRBc0V4cHJlc3Npb25tZXNzYWdlQXNzZXJ0QXNFeHByZXNzaW9uY29kZUFzc2VydEV4dHJhbmVvdXNBcmd1bWVudGBhc3NlcnRgIGNhbid0IGhhdmUgbW9yZSB0aGFuIHR3byBhcmd1bWVudHMuQXNzZXJ0RXh0cmFuZW91c0FyZ3VtZW50bWVzc2FnZUFzc2VydEV4dHJhbmVvdXNBcmd1bWVudGNvZGVBd2FpdEFzSWRlbnRpZmllcidhd2FpdCcgY2FuJ3QgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyIGluICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonIG1ldGhvZHMuQXdhaXRBc0lkZW50aWZpZXJBU1lOQ19LRVlXT1JEX1VTRURfQVNfSURFTlRJRklFUm1lc3NhZ2VBd2FpdEFzSWRlbnRpZmllcmNvZGVBd2FpdEZvck5vdEFzeW5jVGhlIGFzeW5jaHJvbm91cyBmb3ItaW4gY2FuIG9ubHkgYmUgdXNlZCBpbiBmdW5jdGlvbnMgbWFya2VkIHdpdGggJ2FzeW5jJyBvciAnYXN5bmMqJy5UcnkgbWFya2luZyB0aGUgZnVuY3Rpb24gYm9keSB3aXRoIGVpdGhlciAnYXN5bmMnIG9yICdhc3luYyonLCBvciByZW1vdmluZyB0aGUgJ2F3YWl0JyBiZWZvcmUgdGhlIGZvciBsb29wLkF3YWl0Rm9yTm90QXN5bmNBU1lOQ19GT1JfSU5fV1JPTkdfQ09OVEVYVG1lc3NhZ2VBd2FpdEZvck5vdEFzeW5jY29kZUF3YWl0Tm90QXN5bmMnYXdhaXQnIGNhbiBvbmx5IGJlIHVzZWQgaW4gJ2FzeW5jJyBvciAnYXN5bmMqJyBtZXRob2RzLkF3YWl0Tm90QXN5bmNBV0FJVF9JTl9XUk9OR19DT05URVhUbWVzc2FnZUF3YWl0Tm90QXN5bmN0ZW1wbGF0ZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlRm91bmQgdW5zdXBwb3J0ZWQgdXNlcyBvZiAnI25hbWUnIGluIHN1cGVydHlwZSAnI25hbWUyJy5jb2RlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGVCYWRUeXBlVmFyaWFibGVJblN1cGVydHlwZXRlbXBsYXRlQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eUdlbmVyaWMgdHlwZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiB0aGUgYm91bmRzIG9mIGl0cyBvd24gdHlwZSB2YXJpYWJsZXMuIEl0IGlzIHJlZmVyZW5jZWQgaW5kaXJlY3RseSB0aHJvdWdoICcjbmFtZTInLlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyNuYW1lMicgaGVyZSBvciB0byBzb21lIG90aGVyIHJhdyB0eXBlcyBpbiB0aGUgYm91bmRzIGFsb25nIHRoZSByZWZlcmVuY2UgY2hhaW4uY29kZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHlCb3VuZElzc3VlVmlhQ3ljbGVOb25TaW1wbGljaXR5Tk9UX0lOU1RBTlRJQVRFRF9CT1VORHRlbXBsYXRlQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5R2VuZXJpYyB0eXBlICcjbmFtZScgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIHRoZSBib3VuZHMgb2YgaXRzIG93biB0eXBlIHZhcmlhYmxlcy5UcnkgcHJvdmlkaW5nIHR5cGUgYXJndW1lbnRzIHRvICcjbmFtZScgaGVyZS5jb2RlQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5Qm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5dGVtcGxhdGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHNHZW5lcmljIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gYSB0eXBlIHZhcmlhYmxlIGJvdW5kLmNvZGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHNCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHNjb2RlQnJlYWtPdXRzaWRlT2ZMb29wQSBicmVhayBzdGF0ZW1lbnQgY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIG9mIGEgbG9vcCBvciBzd2l0Y2ggc3RhdGVtZW50LlRyeSByZW1vdmluZyB0aGUgYnJlYWsgc3RhdGVtZW50LkJyZWFrT3V0c2lkZU9mTG9vcG1lc3NhZ2VCcmVha091dHNpZGVPZkxvb3B0ZW1wbGF0ZUJyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uQ2FuJ3QgYnJlYWsgdG8gJyNuYW1lJyBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi5jb2RlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb25CcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJBc1R5cGVUaGUgYnVpbHQtaW4gaWRlbnRpZmllciAnI2xleGVtZScgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUuVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gbWF0Y2ggYW4gZXhpc3RpbmcgdHlwZS5jb2RlQnVpbHRJbklkZW50aWZpZXJBc1R5cGVCdWlsdEluSWRlbnRpZmllckFzVHlwZUJVSUxUX0lOX0lERU5USUZJRVJfQVNfVFlQRXRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uQ2FuJ3QgdXNlICcjbGV4ZW1lJyBhcyBhIG5hbWUgaGVyZS5jb2RlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uQlVJTFRfSU5fSURFTlRJRklFUl9JTl9ERUNMQVJBVElPTmNvZGVCeXRlY29kZUxpbWl0RXhjZWVkZWRUb29NYW55QXJndW1lbnRzRGFydCBieXRlY29kZSBsaW1pdCBleGNlZWRlZDogdG9vIG1hbnkgYXJndW1lbnRzLkJ5dGVjb2RlTGltaXRFeGNlZWRlZFRvb01hbnlBcmd1bWVudHNtZXNzYWdlQnl0ZWNvZGVMaW1pdEV4Y2VlZGVkVG9vTWFueUFyZ3VtZW50c2NvZGVDYW5kaWRhdGVGb3VuZEZvdW5kIHRoaXMgY2FuZGlkYXRlLCBidXQgdGhlIGFyZ3VtZW50cyBkb24ndCBtYXRjaC5DYW5kaWRhdGVGb3VuZG1lc3NhZ2VDYW5kaWRhdGVGb3VuZHRlbXBsYXRlQ2FuZGlkYXRlRm91bmRJc0RlZmF1bHRDb25zdHJ1Y3RvclRoZSBjbGFzcyAnI25hbWUnIGhhcyBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzLmNvZGVDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yQ2FuZGlkYXRlRm91bmRJc0RlZmF1bHRDb25zdHJ1Y3RvcmNvZGVDYW5ub3RBc3NpZ25Ub1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uQ2FuJ3QgYXNzaWduIHRvIGEgcGFyZW50aGVzaXplZCBleHByZXNzaW9uLkNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb25BU1NJR05NRU5UX1RPX1BBUkVOVEhFU0laRURfRVhQUkVTU0lPTm1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uY29kZUNhbm5vdEFzc2lnblRvU3VwZXJDYW4ndCBhc3NpZ24gdG8gc3VwZXIuQ2Fubm90QXNzaWduVG9TdXBlck5PVF9BTl9MVkFMVUVtZXNzYWdlQ2Fubm90QXNzaWduVG9TdXBlcmNvZGVDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbkNhbm5vdFJlYWRTZGtTcGVjaWZpY2F0aW9uY29kZUNhbnREaXNhbWJpZ3VhdGVBbWJpZ3VvdXNJbmZvcm1hdGlvbkJvdGggSXRlcmFibGUgYW5kIE1hcCBzcHJlYWQgZWxlbWVudHMgZW5jb3VudGVyZWQgaW4gYW1iaWd1b3VzIGxpdGVyYWwuQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9ubWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVBbWJpZ3VvdXNJbmZvcm1hdGlvbmNvZGVDYW50RGlzYW1iaWd1YXRlTm90RW5vdWdoSW5mb3JtYXRpb25Ob3QgZW5vdWdoIHR5cGUgaW5mb3JtYXRpb24gdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gbGl0ZXJhbCBzZXQgYW5kIGxpdGVyYWwgbWFwLlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgZm9yIHRoZSBsaXRlcmFsIGV4cGxpY2l0bHkgdG8gZGlzYW1iaWd1YXRlIGl0LkNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbm1lc3NhZ2VDYW50RGlzYW1iaWd1YXRlTm90RW5vdWdoSW5mb3JtYXRpb25jb2RlQ2FudEluZmVyUGFja2FnZXNGcm9tTWFueUlucHV0c2NvZGVDYW50SW5mZXJQYWNrYWdlc0Zyb21QYWNrYWdlVXJpdGVtcGxhdGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNDYW4ndCBpbmZlciBhIHJldHVybiB0eXBlIGZvciAnI25hbWUnIGFzIHNvbWUgb2YgdGhlIGluaGVyaXRlZCBtZW1iZXJzIGhhdmUgZGlmZmVyZW50IHR5cGVzLlRyeSBhZGRpbmcgYW4gZXhwbGljaXQgdHlwZS5jb2RlQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzSU5WQUxJRF9NRVRIT0RfT1ZFUlJJREV0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5Q2FuJ3QgaW5mZXIgdGhlIHR5cGUgb2YgJyNzdHJpbmcnOiBjaXJjdWxhcml0eSBmb3VuZCBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuU3BlY2lmeSB0aGUgdHlwZSBleHBsaWNpdGx5LmNvZGVDYW50SW5mZXJUeXBlRHVlVG9DaXJjdWxhcml0eUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5UkVDVVJTSVZFX0NPTVBJTEVfVElNRV9DT05TVEFOVHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzQ2FuJ3QgaW5mZXIgYSB0eXBlIGZvciAnI25hbWUnIGFzIHNvbWUgb2YgdGhlIGluaGVyaXRlZCBtZW1iZXJzIGhhdmUgZGlmZmVyZW50IHR5cGVzLmNvZGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNjb2RlQ2FudFJlYWRGaWxlQ2FudFJlYWRGaWxlVVJJX0RPRVNfTk9UX0VYSVNUdGVtcGxhdGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQnI2xleGVtZScgaXMgbm90IHN1cHBvcnRlZCBpbiBjb25zdGFudCBleHByZXNzaW9ucy5jb2RlQ2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50Q2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50Tk9UX0NPTlNUQU5UX0VYUFJFU1NJT050ZW1wbGF0ZUNhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnQnI2xleGVtZScgY2FuJ3QgYmUgdXNlZCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24gYmVjYXVzZSBpdCdzIG1hcmtlZCBhcyAnZGVmZXJyZWQnIHdoaWNoIG1lYW5zIGl0IGlzbid0IGF2YWlsYWJsZSB1bnRpbCBsb2FkZWQuVHJ5IG1vdmluZyB0aGUgY29uc3RhbnQgZnJvbSB0aGUgZGVmZXJyZWQgbGlicmFyeSwgb3IgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQuCmNvZGVDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50Q2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudENPTlNUX0RFRkVSUkVEX0NMQVNTY29kZUNhbnRVc2VQcmVmaXhBc0V4cHJlc3Npb25BIHByZWZpeCBjYW4ndCBiZSB1c2VkIGFzIGFuIGV4cHJlc3Npb24uQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvblBSRUZJWF9JREVOVElGSUVSX05PVF9GT0xMT1dFRF9CWV9ET1RtZXNzYWdlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbmNvZGVDYW50VXNlUHJlZml4V2l0aE51bGxBd2FyZUEgcHJlZml4IGNhbid0IGJlIHVzZWQgd2l0aCBudWxsLWF3YXJlIG9wZXJhdG9ycy5JdCBzaG91bGQgYmUgc2FmZSB0byByZW1vdmUgdGhlICc/JyBhcyBhIHByZWZpeCBpcyBuZXZlciBudWxsLkNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlbWVzc2FnZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlY29kZUNhdGNoU3ludGF4J2NhdGNoJyBtdXN0IGJlIGZvbGxvd2VkIGJ5ICcoaWRlbnRpZmllciknIG9yICcoaWRlbnRpZmllciwgaWRlbnRpZmllciknLk5vIHR5cGVzIGFyZSBuZWVkZWQsIHRoZSBmaXJzdCBpcyBnaXZlbiBieSAnb24nLCB0aGUgc2Vjb25kIGlzIGFsd2F5cyAnU3RhY2tUcmFjZScuQ2F0Y2hTeW50YXhtZXNzYWdlQ2F0Y2hTeW50YXhjb2RlQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnNDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVyc21lc3NhZ2VDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVyc2NvZGVDbGFzc0luQ2xhc3NDbGFzc2VzIGNhbid0IGJlIGRlY2xhcmVkIGluc2lkZSBvdGhlciBjbGFzc2VzLlRyeSBtb3ZpbmcgdGhlIGNsYXNzIHRvIHRoZSB0b3AtbGV2ZWwuQ2xhc3NJbkNsYXNzbWVzc2FnZUNsYXNzSW5DbGFzc2NvZGVDb2xvbkluUGxhY2VPZkluRm9yLWluIGxvb3BzIHVzZSAnaW4nIHJhdGhlciB0aGFuIGEgY29sb24uVHJ5IHJlcGxhY2luZyB0aGUgY29sb24gd2l0aCB0aGUga2V5d29yZCAnaW4nLkNvbG9uSW5QbGFjZU9mSW5tZXNzYWdlQ29sb25JblBsYWNlT2ZJbnRlbXBsYXRlQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWRDbGFzcyAnI25hbWUnIGluaGVyaXRzIG11bHRpcGxlIG1lbWJlcnMgbmFtZWQgJyNuYW1lMicgd2l0aCBpbmNvbXBhdGlibGUgc2lnbmF0dXJlcy5UcnkgYWRkaW5nIGEgZGVjbGFyYXRpb24gb2YgJyNuYW1lMicgdG8gJyNuYW1lJy5jb2RlQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWRDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZElOQ09OU0lTVEVOVF9JTkhFUklUQU5DRXRlbXBsYXRlQ29uZmxpY3RpbmdNb2RpZmllcnNNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJyNzdHJpbmcnIGFuZCAnI3N0cmluZzInLlRyeSByZW1vdmluZyBvbmUgb2YgdGhlIGtleXdvcmRzLmNvZGVDb25mbGljdGluZ01vZGlmaWVyc0NvbmZsaWN0aW5nTW9kaWZpZXJzdGVtcGxhdGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3JDb25mbGljdHMgd2l0aCBjb25zdHJ1Y3RvciAnI25hbWUnLmNvZGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3JDb25mbGljdHNXaXRoQ29uc3RydWN0b3JDT05GTElDVFNfV0lUSF9DT05TVFJVQ1RPUnRlbXBsYXRlQ29uZmxpY3RzV2l0aEZhY3RvcnlDb25mbGljdHMgd2l0aCBmYWN0b3J5ICcjbmFtZScuY29kZUNvbmZsaWN0c1dpdGhGYWN0b3J5Q29uZmxpY3RzV2l0aEZhY3Rvcnl0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXJDb25mbGljdHMgd2l0aCBtZW1iZXIgJyNuYW1lJy5jb2RlQ29uZmxpY3RzV2l0aE1lbWJlckNvbmZsaWN0c1dpdGhNZW1iZXJDT05GTElDVFNfV0lUSF9NRU1CRVJ0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nY29kZUNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmd0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXJDb25mbGljdHMgd2l0aCBzZXR0ZXIgJyNuYW1lJy5jb2RlQ29uZmxpY3RzV2l0aFNldHRlckNvbmZsaWN0c1dpdGhTZXR0ZXJ0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nY29kZUNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmd0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDb25mbGljdHMgd2l0aCB0eXBlIHZhcmlhYmxlICcjbmFtZScuY29kZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlQ09ORkxJQ1RJTkdfVFlQRV9WQVJJQUJMRV9BTkRfTUVNQkVSY29kZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZVRoaXMgaXMgdGhlIHR5cGUgdmFyaWFibGUuQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlbWVzc2FnZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZWNvZGVDb25zdEFuZEZpbmFsTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdjb25zdCcgYW5kICdmaW5hbCcuVHJ5IHJlbW92aW5nIGVpdGhlciB0aGUgJ2NvbnN0JyBvciAnZmluYWwnIGtleXdvcmQuQ29uc3RBbmRGaW5hbG1lc3NhZ2VDb25zdEFuZEZpbmFsY29kZUNvbnN0Q2xhc3NDbGFzc2VzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdjb25zdCcuVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQuIElmIHlvdSdyZSB0cnlpbmcgdG8gaW5kaWNhdGUgdGhhdCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIGNhbiBiZSBjb25zdGFudHMsIHBsYWNlIHRoZSAnY29uc3QnIGtleXdvcmQgb24gIHRoZSBjbGFzcycgY29uc3RydWN0b3IocykuQ29uc3RDbGFzc21lc3NhZ2VDb25zdENsYXNzY29kZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkQ29uc3RydWN0b3IgaXMgbWFya2VkICdjb25zdCcgc28gYWxsIGZpZWxkcyBtdXN0IGJlIGZpbmFsLkNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkQ09OU1RfQ09OU1RSVUNUT1JfV0lUSF9OT05fRklOQUxfRklFTERtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRjb2RlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZUZpZWxkIGlzbid0IGZpbmFsLCBidXQgY29uc3RydWN0b3IgaXMgJ2NvbnN0Jy5Db25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkQ2F1c2Vjb2RlQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdEEgY29uc3RhbnQgY29uc3RydWN0b3IgY2FuJ3QgY2FsbCBhIG5vbi1jb25zdGFudCBjb25zdHJ1Y3Rvci5Db25zdENvbnN0cnVjdG9yUmVkaXJlY3Rpb25Ub05vbkNvbnN0bWVzc2FnZUNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3Rjb2RlQ29uc3RDb25zdHJ1Y3RvcldpdGhCb2R5QSBjb25zdCBjb25zdHJ1Y3RvciBjYW4ndCBoYXZlIGEgYm9keS5UcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnY29uc3QnIGtleXdvcmQgb3IgdGhlIGJvZHkuQ29uc3RDb25zdHJ1Y3RvcldpdGhCb2R5Q09OU1RfQ09OU1RSVUNUT1JfV0lUSF9CT0RZbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoQm9keWNvZGVDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXJDb25zdGFudCBjb25zdHJ1Y3RvciBjYW4ndCBjYWxsIG5vbi1jb25zdGFudCBzdXBlciBjb25zdHJ1Y3RvcnMuQ29uc3RDb25zdHJ1Y3RvcldpdGhOb25Db25zdFN1cGVyQ09OU1RfQ09OU1RSVUNUT1JfV0lUSF9OT05fQ09OU1RfU1VQRVJtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvcldpdGhOb25Db25zdFN1cGVyY29kZUNvbnN0RXZhbENpcmN1bGFyaXR5Q29uc3RhbnQgZXhwcmVzc2lvbiBkZXBlbmRzIG9uIGl0c2VsZi5Db25zdEV2YWxDaXJjdWxhcml0eW1lc3NhZ2VDb25zdEV2YWxDaXJjdWxhcml0eWNvZGVDb25zdEV2YWxDb250ZXh0V2hpbGUgYW5hbHl6aW5nOkNvbnN0RXZhbENvbnRleHRtZXNzYWdlQ29uc3RFdmFsQ29udGV4dHRlbXBsYXRlQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5JyNuYW1lJyBjYW4ndCBiZSB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiZWNhdXNlIGl0J3MgbWFya2VkIGFzICdkZWZlcnJlZCcgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgYXZhaWxhYmxlIHVudGlsIGxvYWRlZC5jb2RlQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5Q29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5Tk9OX0NPTlNUQU5UX0RFRkFVTFRfVkFMVUVfRlJPTV9ERUZFUlJFRF9MSUJSQVJZdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50VGhlIGVsZW1lbnQgJyNjb25zdGFudCcgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleGlzdGluZyBlbGVtZW50IGluIHRoZSBzZXQuY29kZUNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnRDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50RVFVQUxfRUxFTUVOVFNfSU5fQ09OU1RfU0VUdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVLZXlUaGUga2V5ICcjY29uc3RhbnQnIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgZXhpc3Rpbmcga2V5IGluIHRoZSBtYXAuY29kZUNvbnN0RXZhbER1cGxpY2F0ZUtleUNvbnN0RXZhbER1cGxpY2F0ZUtleUVRVUFMX0tFWVNfSU5fQ09OU1RfTUFQdGVtcGxhdGVDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsVGhlIGVsZW1lbnQgJyNjb25zdGFudCcgZG9lcyBub3QgaGF2ZSBhIHByaW1pdGl2ZSBvcGVyYXRvciAnPT0nLmNvZGVDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbENPTlNUX1NFVF9FTEVNRU5UX1RZUEVfSU1QTEVNRU5UU19FUVVBTFNjb2RlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uVGhpcyBhc3NlcnRpb24gZmFpbGVkLkNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbkNPTlNUX0VWQUxfVEhST1dTX0VYQ0VQVElPTm1lc3NhZ2VDb25zdEV2YWxGYWlsZWRBc3NlcnRpb250ZW1wbGF0ZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlVGhpcyBhc3NlcnRpb24gZmFpbGVkIHdpdGggbWVzc2FnZTogI3N0cmluZ2NvZGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdldGVtcGxhdGVDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlclRoZSB0eXBlICcjdHlwZScgaXMgbm90IGEgY29uc3RhbnQgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgdHlwZSBwYXJhbWV0ZXIsIG9ubHkgaW5zdGFudGlhdGVkIHR5cGVzIGFyZSBhbGxvd2VkLmNvZGVDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlckNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVydGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGVCaW5hcnkgb3BlcmF0b3IgJyNzdHJpbmcnIG9uICcjY29uc3RhbnQnIHJlcXVpcmVzIG9wZXJhbmQgb2YgdHlwZSAnI3R5cGUnLCBidXQgd2FzIG9mIHR5cGUgJyN0eXBlMicuY29kZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZXRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlQmluYXJ5IG9wZXJhdG9yICc9PScgcmVxdWlyZXMgcmVjZWl2ZXIgY29uc3RhbnQgJyNjb25zdGFudCcgb2YgdHlwZSAnTnVsbCcsICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJywgYnV0IHdhcyBvZiB0eXBlICcjdHlwZScuY29kZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZXRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb25UaGUgbWV0aG9kICcjc3RyaW5nJyBjYW4ndCBiZSBpbnZva2VkIG9uICcjY29uc3RhbnQnIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuY29kZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb25VTkRFRklORURfT1BFUkFUT1J0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRQcm9wZXJ0eUdldFRoZSBwcm9wZXJ0eSAnI3N0cmluZycgY2FuJ3QgYmUgYWNjZXNzZWQgb24gJyNjb25zdGFudCcgd2l0aGluIGEgY29uc3QgY29udGV4dC5jb2RlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0Q29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0dGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvblRoZSBpbnZvY2F0aW9uIG9mICcjbmFtZScgaXMgbm90IGFsbG93ZWQgd2l0aGluIGEgY29uc3QgY29udGV4dC5jb2RlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb25Db25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvbkNPTlNUX0lOSVRJQUxJWkVEX1dJVEhfTk9OX0NPTlNUQU5UX1ZBTFVFdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmRUaGUgJyNjb25zdGFudCcgY2FuJ3QgYmUgdXNlZCBhcyBwYXJ0IG9mIGEgc3RyaW5nIGludGVycG9sYXRpb24gd2l0aGluIGEgY29uc3QgY29udGV4dCwgb25seSB2YWx1ZXMgb2YgdHlwZSAnbnVsbCcsICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJyBjYW4gYmUgdXNlZC5jb2RlQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kQ09OU1RfRVZBTF9UWVBFX0JPT0xfTlVNX1NUUklOR3RlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWVUaGUgc3ltYm9sIG5hbWUgbXVzdCBiZSBhIHZhbGlkIHB1YmxpYyBEYXJ0IG1lbWJlciBuYW1lLCBwdWJsaWMgY29uc3RydWN0b3IgbmFtZSwgb3IgbGlicmFyeSBuYW1lLCBvcHRpb25hbGx5IHF1YWxpZmllZCwgYnV0IHdhcyAnI2NvbnN0YW50Jy5jb2RlQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZXRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFR5cGVFeHBlY3RlZCBjb25zdGFudCAnI2NvbnN0YW50JyB0byBiZSBvZiB0eXBlICcjdHlwZScsIGJ1dCB3YXMgb2YgdHlwZSAnI3R5cGUyJy5jb2RlQ29uc3RFdmFsSW52YWxpZFR5cGVDb25zdEV2YWxJbnZhbGlkVHlwZXRlbXBsYXRlQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsVGhlIGtleSAnI2NvbnN0YW50JyBkb2VzIG5vdCBoYXZlIGEgcHJpbWl0aXZlIG9wZXJhdG9yICc9PScuY29kZUNvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbENvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbENPTlNUX01BUF9LRVlfRVhQUkVTU0lPTl9UWVBFX0lNUExFTUVOVFNfRVFVQUxTdGVtcGxhdGVDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0QmluYXJ5IG9wZXJhdG9yICcjc3RyaW5nJyBvbiAnI3N0cmluZzInIHJlcXVpcmVzIG5vbi1uZWdhdGl2ZSBvcGVyYW5kLCBidXQgd2FzICcjc3RyaW5nMycuY29kZUNvbnN0RXZhbE5lZ2F0aXZlU2hpZnRDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0dGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWxDYW4ndCBoYXZlIGEgbm9uLWNvbnN0YW50ICNzdHJpbmcgbGl0ZXJhbCB3aXRoaW4gYSBjb25zdCBjb250ZXh0LmNvZGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWxDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWxOT05fQ09OU1RBTlRfREVGQVVMVF9WQUxVRXRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldFRoZSB2YXJpYWJsZSAnI3N0cmluZycgaXMgbm90IGEgY29uc3RhbnQsIG9ubHkgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQuY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXRDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0Tk9OX0NPTlNUQU5UX1ZBTFVFX0lOX0lOSVRJQUxJWkVSY29kZUNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkT25seSBsaXN0cyBhbmQgc2V0cyBjYW4gYmUgdXNlZCBpbiBzcHJlYWRzIGluIGNvbnN0YW50IGxpc3RzIGFuZCBzZXRzLkNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkQ09OU1RfU1BSRUFEX0VYUEVDVEVEX0xJU1RfT1JfU0VUbWVzc2FnZUNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkY29kZUNvbnN0RXZhbE5vdE1hcEluU3ByZWFkT25seSBtYXBzIGNhbiBiZSB1c2VkIGluIHNwcmVhZHMgaW4gY29uc3RhbnQgbWFwcy5Db25zdEV2YWxOb3RNYXBJblNwcmVhZENPTlNUX1NQUkVBRF9FWFBFQ1RFRF9NQVBtZXNzYWdlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWRjb2RlQ29uc3RFdmFsTnVsbFZhbHVlTnVsbCB2YWx1ZSBkdXJpbmcgY29uc3RhbnQgZXZhbHVhdGlvbi5Db25zdEV2YWxOdWxsVmFsdWVtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlY29kZUNvbnN0RXZhbFVuZXZhbHVhdGVkQ291bGQgbm90IGV2YWx1YXRlIGNvbnN0YW50IGV4cHJlc3Npb24uQ29uc3RFdmFsVW5ldmFsdWF0ZWRtZXNzYWdlQ29uc3RFdmFsVW5ldmFsdWF0ZWR0ZW1wbGF0ZUNvbnN0RXZhbFplcm9EaXZpc29yQmluYXJ5IG9wZXJhdG9yICcjc3RyaW5nJyBvbiAnI3N0cmluZzInIHJlcXVpcmVzIG5vbi16ZXJvIGRpdmlzb3IsIGJ1dCBkaXZpc29yIHdhcyAnMCcuY29kZUNvbnN0RXZhbFplcm9EaXZpc29yQ29uc3RFdmFsWmVyb0Rpdmlzb3JDT05TVF9FVkFMX1RIUk9XU19JREJaRWNvZGVDb25zdEZhY3RvcnlPbmx5IHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3JzIGNhbiBiZSBkZWNsYXJlZCB0byBiZSAnY29uc3QnLlRyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBrZXl3b3JkLCBvciByZXBsYWNpbmcgdGhlIGJvZHkgd2l0aCAnPScgZm9sbG93ZWQgYnkgYSB2YWxpZCB0YXJnZXQuQ29uc3RGYWN0b3J5bWVzc2FnZUNvbnN0RmFjdG9yeWNvZGVDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3RDb25zdGFudCBmYWN0b3J5IGNvbnN0cnVjdG9yIGNhbid0IGRlbGVnYXRlIHRvIGEgbm9uLWNvbnN0YW50IGNvbnN0cnVjdG9yLlRyeSByZWRpcmVjdGluZyB0byBhIGRpZmZlcmVudCBjb25zdHJ1Y3RvciBvciBtYXJraW5nIHRoZSB0YXJnZXQgY29uc3RydWN0b3IgJ2NvbnN0Jy5Db25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3RSRURJUkVDVF9UT19OT05fQ09OU1RfQ09OU1RSVUNUT1JtZXNzYWdlQ29uc3RGYWN0b3J5UmVkaXJlY3Rpb25Ub05vbkNvbnN0dGVtcGxhdGVDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyVGhlIGNvbnN0IHZhcmlhYmxlICcjbmFtZScgbXVzdCBiZSBpbml0aWFsaXplZC5UcnkgYWRkaW5nIGFuIGluaXRpYWxpemVyICgnPSA8ZXhwcmVzc2lvbj4nKSB0byB0aGUgZGVjbGFyYXRpb24uY29kZUNvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXJDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyQ09OU1RfTk9UX0lOSVRJQUxJWkVEY29kZUNvbnN0SW5zdGFuY2VGaWVsZE9ubHkgc3RhdGljIGZpZWxkcyBjYW4gYmUgZGVjbGFyZWQgYXMgY29uc3QuVHJ5IHVzaW5nICdmaW5hbCcgaW5zdGVhZCBvZiAnY29uc3QnLCBvciBhZGRpbmcgdGhlIGtleXdvcmQgJ3N0YXRpYycuQ29uc3RJbnN0YW5jZUZpZWxkQ09OU1RfSU5TVEFOQ0VfRklFTERtZXNzYWdlQ29uc3RJbnN0YW5jZUZpZWxkY29kZUNvbnN0TWV0aG9kR2V0dGVycywgc2V0dGVycyBhbmQgbWV0aG9kcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnY29uc3QnLlRyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBrZXl3b3JkLkNvbnN0TWV0aG9kbWVzc2FnZUNvbnN0TWV0aG9kY29kZUNvbnN0cnVjdG9yQ3ljbGljUmVkaXJlY3RpbmcgY29uc3RydWN0b3JzIGNhbid0IGJlIGN5Y2xpYy5UcnkgdG8gaGF2ZSBhbGwgY29uc3RydWN0b3JzIGV2ZW50dWFsbHkgcmVkaXJlY3QgdG8gYSBub24tcmVkaXJlY3RpbmcgY29uc3RydWN0b3IuQ29uc3RydWN0b3JDeWNsaWNSRUNVUlNJVkVfQ09OU1RSVUNUT1JfUkVESVJFQ1RtZXNzYWdlQ29uc3RydWN0b3JDeWNsaWN0ZW1wbGF0ZUNvbnN0cnVjdG9yTm90Rm91bmRDb3VsZG4ndCBmaW5kIGNvbnN0cnVjdG9yICcjbmFtZScuY29kZUNvbnN0cnVjdG9yTm90Rm91bmRDb25zdHJ1Y3Rvck5vdEZvdW5kQ09OU1RSVUNUT1JfTk9UX0ZPVU5EY29kZUNvbnN0cnVjdG9yTm90U3luY0NvbnN0cnVjdG9yIGJvZGllcyBjYW4ndCB1c2UgJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicuQ29uc3RydWN0b3JOb3RTeW5jTk9OX1NZTkNfQ09OU1RSVUNUT1JtZXNzYWdlQ29uc3RydWN0b3JOb3RTeW5jY29kZUNvbnN0cnVjdG9yV2l0aFJldHVyblR5cGVDb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIHJldHVybiB0eXBlLlRyeSByZW1vdmluZyB0aGUgcmV0dXJuIHR5cGUuQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZW1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlY29kZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHNBIGNvbnN0cnVjdG9yIGludm9jYXRpb24gY2FuJ3QgaGF2ZSB0eXBlIGFyZ3VtZW50cyBvbiB0aGUgY29uc3RydWN0b3IgbmFtZS5UcnkgdG8gcGxhY2UgdGhlIHR5cGUgYXJndW1lbnRzIG9uIHRoZSBjbGFzcyBuYW1lLkNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHNXUk9OR19OVU1CRVJfT0ZfVFlQRV9BUkdVTUVOVFNfQ09OU1RSVUNUT1JtZXNzYWdlQ29uc3RydWN0b3JXaXRoVHlwZUFyZ3VtZW50c2NvZGVDb25zdHJ1Y3RvcldpdGhUeXBlUGFyYW1ldGVyc0NvbnN0cnVjdG9ycyBjYW4ndCBoYXZlIHR5cGUgcGFyYW1ldGVycy5Db25zdHJ1Y3RvcldpdGhUeXBlUGFyYW1ldGVyc1RZUEVfUEFSQU1FVEVSX09OX0NPTlNUUlVDVE9SbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzY29kZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZVRoZSBuYW1lIG9mIGEgY29uc3RydWN0b3IgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzLkNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUlOVkFMSURfQ09OU1RSVUNUT1JfTkFNRW1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWV0ZW1wbGF0ZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHRUaGUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzIGlzICcjbmFtZScuY29kZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHRDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0Y29kZUNvbnRpbnVlTGFiZWxOb3RUYXJnZXRUYXJnZXQgb2YgY29udGludWUgbXVzdCBiZSBhIGxhYmVsLkNvbnRpbnVlTGFiZWxOb3RUYXJnZXRMQUJFTF9VTkRFRklORURtZXNzYWdlQ29udGludWVMYWJlbE5vdFRhcmdldGNvZGVDb250aW51ZU91dHNpZGVPZkxvb3BBIGNvbnRpbnVlIHN0YXRlbWVudCBjYW4ndCBiZSB1c2VkIG91dHNpZGUgb2YgYSBsb29wIG9yIHN3aXRjaCBzdGF0ZW1lbnQuVHJ5IHJlbW92aW5nIHRoZSBjb250aW51ZSBzdGF0ZW1lbnQuQ29udGludWVPdXRzaWRlT2ZMb29wbWVzc2FnZUNvbnRpbnVlT3V0c2lkZU9mTG9vcHRlbXBsYXRlQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb25DYW4ndCBjb250aW51ZSBhdCAnI25hbWUnIGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLmNvZGVDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbkNvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uY29kZUNvbnRpbnVlV2l0aG91dExhYmVsSW5DYXNlQSBjb250aW51ZSBzdGF0ZW1lbnQgaW4gYSBzd2l0Y2ggc3RhdGVtZW50IG11c3QgaGF2ZSBhIGxhYmVsIGFzIGEgdGFyZ2V0LlRyeSBhZGRpbmcgYSBsYWJlbCBhc3NvY2lhdGVkIHdpdGggb25lIG9mIHRoZSBjYXNlIGNsYXVzZXMgdG8gdGhlIGNvbnRpbnVlIHN0YXRlbWVudC5Db250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZW1lc3NhZ2VDb250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZXRlbXBsYXRlQ291bGROb3RQYXJzZVVyaUNvdWxkbid0IHBhcnNlIFVSSSAnI3N0cmluZyc6CiAgI3N0cmluZzIuY29kZUNvdWxkTm90UGFyc2VVcmlDb3VsZE5vdFBhcnNlVXJpY29kZUNvdmFyaWFudEFuZFN0YXRpY01lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnY292YXJpYW50JyBhbmQgJ3N0YXRpYycuVHJ5IHJlbW92aW5nIGVpdGhlciB0aGUgJ2NvdmFyaWFudCcgb3IgJ3N0YXRpYycga2V5d29yZC5Db3ZhcmlhbnRBbmRTdGF0aWNtZXNzYWdlQ292YXJpYW50QW5kU3RhdGljY29kZUNvdmFyaWFudE1lbWJlckdldHRlcnMsIHNldHRlcnMgYW5kIG1ldGhvZHMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2NvdmFyaWFudCcuVHJ5IHJlbW92aW5nIHRoZSAnY292YXJpYW50JyBrZXl3b3JkLkNvdmFyaWFudE1lbWJlcm1lc3NhZ2VDb3ZhcmlhbnRNZW1iZXJ0ZW1wbGF0ZUN5Y2xlSW5UeXBlVmFyaWFibGVzVHlwZSAnI25hbWUnIGlzIGEgYm91bmQgb2YgaXRzZWxmIHZpYSAnI3N0cmluZycuVHJ5IGJyZWFraW5nIHRoZSBjeWNsZSBieSByZW1vdmluZyBhdCBsZWFzdCBvbiBvZiB0aGUgJ2V4dGVuZHMnIGNsYXVzZXMgaW4gdGhlIGN5Y2xlLmNvZGVDeWNsZUluVHlwZVZhcmlhYmxlc0N5Y2xlSW5UeXBlVmFyaWFibGVzVFlQRV9QQVJBTUVURVJfU1VQRVJUWVBFX09GX0lUU19CT1VORHRlbXBsYXRlQ3ljbGljQ2xhc3NIaWVyYXJjaHknI25hbWUnIGlzIGEgc3VwZXJ0eXBlIG9mIGl0c2VsZi5jb2RlQ3ljbGljQ2xhc3NIaWVyYXJjaHlDeWNsaWNDbGFzc0hpZXJhcmNoeVJFQ1VSU0lWRV9JTlRFUkZBQ0VfSU5IRVJJVEFOQ0V0ZW1wbGF0ZUN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yc0N5Y2xpYyBkZWZpbml0aW9uIG9mIGZhY3RvcnkgJyNuYW1lJy5jb2RlQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzUkVDVVJTSVZFX0ZBQ1RPUllfUkVESVJFQ1R0ZW1wbGF0ZUN5Y2xpY1R5cGVkZWZUaGUgdHlwZWRlZiAnI25hbWUnIGhhcyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuY29kZUN5Y2xpY1R5cGVkZWZDeWNsaWNUeXBlZGVmVFlQRV9BTElBU19DQU5OT1RfUkVGRVJFTkNFX0lUU0VMRmNvZGVEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYW4ndCBkZWNsYXJlIGEgbWVtYmVyIHRoYXQgY29uZmxpY3RzIHdpdGggYW4gaW5oZXJpdGVkIG9uZS5EZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJERUNMQVJFRF9NRU1CRVJfQ09ORkxJQ1RTX1dJVEhfSU5IRVJJVEVEbWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlcmNvZGVEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYXVzZVRoaXMgaXMgdGhlIGluaGVyaXRlZCBtZW1iZXIuRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2VtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2V0ZW1wbGF0ZURlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JDYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBoZXJlIGJlY2F1c2UgYW55IGRlZmF1bHQgdmFsdWVzIG9mICcjbmFtZScgd291bGQgYmUgdXNlZCBpbnN0ZWFkLlRyeSByZW1vdmluZyB0aGUgZGVmYXVsdCB2YWx1ZS5jb2RlRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvckRlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JERUZBVUxUX1ZBTFVFX0lOX1JFRElSRUNUSU5HX0ZBQ1RPUllfQ09OU1RSVUNUT1Jjb2RlRGVmZXJyZWRBZnRlclByZWZpeFRoZSBkZWZlcnJlZCBrZXl3b3JkIHNob3VsZCBjb21lIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgcHJlZml4ICgnYXMnIGNsYXVzZSkuVHJ5IG1vdmluZyB0aGUgZGVmZXJyZWQga2V5d29yZCBiZWZvcmUgdGhlIHByZWZpeC5EZWZlcnJlZEFmdGVyUHJlZml4bWVzc2FnZURlZmVycmVkQWZ0ZXJQcmVmaXh0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhbid0IHVzZSB0aGUgbmFtZSAnI25hbWUnIGZvciBhIGRlZmVycmVkIGxpYnJhcnksIGFzIHRoZSBuYW1lIGlzIHVzZWQgZWxzZXdoZXJlLmNvZGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWREZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRTSEFSRURfREVGRVJSRURfUFJFRklYdGVtcGxhdGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZScjbmFtZScgaXMgdXNlZCBoZXJlLmNvZGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNldGVtcGxhdGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uVGhlIHR5cGUgJyN0eXBlJyBpcyBkZWZlcnJlZCBsb2FkZWQgdmlhIHByZWZpeCAnI25hbWUnIGFuZCBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBhbm5vdGF0aW9uLlRyeSByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydCBvZiAnI25hbWUnIG9yIHVzZSBhIHN1cGVydHlwZSBvZiAnI3R5cGUnIHRoYXQgaXNuJ3QgZGVmZXJyZWQuY29kZURlZmVycmVkVHlwZUFubm90YXRpb25EZWZlcnJlZFR5cGVBbm5vdGF0aW9uVFlQRV9BTk5PVEFUSU9OX0RFRkVSUkVEX0NMQVNTdGVtcGxhdGVEaWxsT3V0bGluZVN1bW1hcnlJbmRleGVkICNjb3VudCBsaWJyYXJpZXMgKCNjb3VudDIgYnl0ZXMpIGluICNudW0xJS4zbXMsIHRoYXQgaXMsCiNudW0yJTEyLjMgYnl0ZXMvbXMsIGFuZAojbnVtMyUxMi4zIG1zL2xpYnJhcmllcy5jb2RlRGlsbE91dGxpbmVTdW1tYXJ5RGlsbE91dGxpbmVTdW1tYXJ5dGVtcGxhdGVEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlc1R5cGUgJyNuYW1lJyBjYW4ndCB1c2UgaXRzZWxmIGFzIGEgYm91bmQuY29kZURpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXNjb2RlRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbkRpcmVjdGl2ZXMgbXVzdCBhcHBlYXIgYmVmb3JlIGFueSBkZWNsYXJhdGlvbnMuVHJ5IG1vdmluZyB0aGUgZGlyZWN0aXZlIGJlZm9yZSBhbnkgZGVjbGFyYXRpb25zLkRpcmVjdGl2ZUFmdGVyRGVjbGFyYXRpb25tZXNzYWdlRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbmNvZGVEdXBsaWNhdGVEZWZlcnJlZEFuIGltcG9ydCBkaXJlY3RpdmUgY2FuIG9ubHkgaGF2ZSBvbmUgJ2RlZmVycmVkJyBrZXl3b3JkLlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSAnZGVmZXJyZWQnIGtleXdvcmQuRHVwbGljYXRlRGVmZXJyZWRtZXNzYWdlRHVwbGljYXRlRGVmZXJyZWR0ZW1wbGF0ZUR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnRUaGUgbGFiZWwgJyNuYW1lJyB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc3dpdGNoIHN0YXRlbWVudC5UcnkgY2hvb3NpbmcgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhpcyBsYWJlbC5jb2RlRHVwbGljYXRlTGFiZWxJblN3aXRjaFN0YXRlbWVudER1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnRjb2RlRHVwbGljYXRlUHJlZml4QW4gaW1wb3J0IGRpcmVjdGl2ZSBjYW4gb25seSBoYXZlIG9uZSBwcmVmaXggKCdhcycgY2xhdXNlKS5UcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgcHJlZml4LkR1cGxpY2F0ZVByZWZpeG1lc3NhZ2VEdXBsaWNhdGVQcmVmaXh0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbicjbmFtZScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlLmNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25EdXBsaWNhdGVkRGVjbGFyYXRpb25EVVBMSUNBVEVfREVGSU5JVElPTnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2VQcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnI25hbWUnLmNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNldGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZVByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICcjbmFtZScgaXMgaW1wbGllZCBieSB0aGlzIGRlZmluaXRpb24uY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2V0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZUNhbid0IHVzZSAnI25hbWUnIGJlY2F1c2UgaXQgaXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZXRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydCcjbmFtZScgaXMgZXhwb3J0ZWQgZnJvbSBib3RoICcjdXJpJyBhbmQgJyN1cmkyJy5jb2RlRHVwbGljYXRlZEV4cG9ydER1cGxpY2F0ZWRFeHBvcnRBTUJJR1VPVVNfRVhQT1JUdGVtcGxhdGVEdXBsaWNhdGVkRXhwb3J0SW5UeXBlY29kZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGVEdXBsaWNhdGVkRXhwb3J0SW5UeXBldGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0JyNuYW1lJyBpcyBpbXBvcnRlZCBmcm9tIGJvdGggJyN1cmknIGFuZCAnI3VyaTInLmNvZGVEdXBsaWNhdGVkSW1wb3J0RHVwbGljYXRlZEltcG9ydHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydEluVHlwZWNvZGVEdXBsaWNhdGVkSW1wb3J0SW5UeXBlRHVwbGljYXRlZEltcG9ydEluVHlwZUFNQklHVU9VU19JTVBPUlR0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0QSBsaWJyYXJ5IHdpdGggbmFtZSAnI25hbWUnIGlzIGV4cG9ydGVkIG1vcmUgdGhhbiBvbmNlLmNvZGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydER1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0RVhQT1JUX0RVUExJQ0FURURfTElCUkFSWV9OQU1FRHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0JyNuYW1lJyBpcyBhbHNvIGV4cG9ydGVkIGhlcmUuY29kZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dER1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnRBIGxpYnJhcnkgd2l0aCBuYW1lICcjbmFtZScgaXMgaW1wb3J0ZWQgbW9yZSB0aGFuIG9uY2UuY29kZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0RHVwbGljYXRlZExpYnJhcnlJbXBvcnRJTVBPUlRfRFVQTElDQVRFRF9MSUJSQVJZX05BTUVEdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQnI25hbWUnIGlzIGFsc28gaW1wb3J0ZWQgaGVyZS5jb2RlRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0RHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0dGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXJUaGUgbW9kaWZpZXIgJyNsZXhlbWUnIHdhcyBhbHJlYWR5IHNwZWNpZmllZC5UcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgb2NjdXJyZW5jZSBvZiB0aGUgbW9kaWZpZXIuY29kZUR1cGxpY2F0ZWRNb2RpZmllckR1cGxpY2F0ZWRNb2RpZmllcnRlbXBsYXRlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhbid0IGRlY2xhcmUgJyNuYW1lJyBiZWNhdXNlIGl0IHdhcyBhbHJlYWR5IHVzZWQgaW4gdGhpcyBzY29wZS5jb2RlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZER1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRSRUZFUkVOQ0VEX0JFRk9SRV9ERUNMQVJBVElPTnRlbXBsYXRlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlUHJldmlvdXMgdXNlIG9mICcjbmFtZScuY29kZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZXRlbXBsYXRlRHVwbGljYXRlZE5hbWVkQXJndW1lbnREdXBsaWNhdGVkIG5hbWVkIGFyZ3VtZW50ICcjbmFtZScuY29kZUR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50RHVwbGljYXRlZE5hbWVkQXJndW1lbnREVVBMSUNBVEVfTkFNRURfQVJHVU1FTlR0ZW1wbGF0ZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lRHVwbGljYXRlZCBwYXJhbWV0ZXIgbmFtZSAnI25hbWUnLmNvZGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1ldGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlT3RoZXIgcGFyYW1ldGVyIG5hbWVkICcjbmFtZScuY29kZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lQ2F1c2VEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlY29kZUVtcHR5TmFtZWRQYXJhbWV0ZXJMaXN0TmFtZWQgcGFyYW1ldGVyIGxpc3RzIGNhbm5vdCBiZSBlbXB0eS5UcnkgYWRkaW5nIGEgbmFtZWQgcGFyYW1ldGVyIHRvIHRoZSBsaXN0LkVtcHR5TmFtZWRQYXJhbWV0ZXJMaXN0TUlTU0lOR19JREVOVElGSUVSbWVzc2FnZUVtcHR5TmFtZWRQYXJhbWV0ZXJMaXN0Y29kZUVtcHR5T3B0aW9uYWxQYXJhbWV0ZXJMaXN0T3B0aW9uYWwgcGFyYW1ldGVyIGxpc3RzIGNhbm5vdCBiZSBlbXB0eS5UcnkgYWRkaW5nIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byB0aGUgbGlzdC5FbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdG1lc3NhZ2VFbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdGNvZGVFbmNvZGluZ1VuYWJsZSB0byBkZWNvZGUgYnl0ZXMgYXMgVVRGLTguRW5jb2RpbmdtZXNzYWdlRW5jb2Rpbmd0ZW1wbGF0ZUVudW1Db25zdGFudFNhbWVOYW1lQXNFbmNsb3NpbmdOYW1lIG9mIGVudW0gY29uc3RhbnQgJyNuYW1lJyBjYW4ndCBiZSB0aGUgc2FtZSBhcyB0aGUgZW51bSdzIG93biBuYW1lLmNvZGVFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZ0VOVU1fQ09OU1RBTlRfV0lUSF9FTlVNX05BTUVjb2RlRW51bURlY2xhcmF0aW9uRW1wdHlBbiBlbnVtIGRlY2xhcmF0aW9uIGNhbid0IGJlIGVtcHR5LkVudW1EZWNsYXJhdGlvbkVtcHR5RU1QVFlfRU5VTV9CT0RZbWVzc2FnZUVudW1EZWNsYXJhdGlvbkVtcHR5Y29kZUVudW1JbkNsYXNzRW51bXMgY2FuJ3QgYmUgZGVjbGFyZWQgaW5zaWRlIGNsYXNzZXMuVHJ5IG1vdmluZyB0aGUgZW51bSB0byB0aGUgdG9wLWxldmVsLkVudW1JbkNsYXNzbWVzc2FnZUVudW1JbkNsYXNzY29kZUVudW1JbnN0YW50aWF0aW9uRW51bXMgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLkVudW1JbnN0YW50aWF0aW9uSU5TVEFOVElBVEVfRU5VTW1lc3NhZ2VFbnVtSW5zdGFudGlhdGlvbmNvZGVFcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kQW4gZXF1YWxpdHkgZXhwcmVzc2lvbiBjYW4ndCBiZSBhbiBvcGVyYW5kIG9mIGFub3RoZXIgZXF1YWxpdHkgZXhwcmVzc2lvbi5UcnkgcmUtd3JpdGluZyB0aGUgZXhwcmVzc2lvbi5FcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kbWVzc2FnZUVxdWFsaXR5Q2Fubm90QmVFcXVhbGl0eU9wZXJhbmR0ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3RFeHBlY3RlZCAnI3N0cmluZycgYWZ0ZXIgdGhpcy5jb2RlRXhwZWN0ZWRBZnRlckJ1dEdvdEV4cGVjdGVkQWZ0ZXJCdXRHb3RFWFBFQ1RFRF9UT0tFTmNvZGVFeHBlY3RlZEFuSW5pdGlhbGl6ZXJFeHBlY3RlZCBhbiBpbml0aWFsaXplci5FeHBlY3RlZEFuSW5pdGlhbGl6ZXJtZXNzYWdlRXhwZWN0ZWRBbkluaXRpYWxpemVyY29kZUV4cGVjdGVkQmxvY2tFeHBlY3RlZCBhIGJsb2NrLlRyeSBhZGRpbmcge30uRXhwZWN0ZWRCbG9ja21lc3NhZ2VFeHBlY3RlZEJsb2NrY29kZUV4cGVjdGVkQmxvY2tUb1NraXBFeHBlY3RlZCBhIGZ1bmN0aW9uIGJvZHkgb3IgJz0+Jy5FeHBlY3RlZEJsb2NrVG9Ta2lwTUlTU0lOR19GVU5DVElPTl9CT0RZbWVzc2FnZUV4cGVjdGVkQmxvY2tUb1NraXBjb2RlRXhwZWN0ZWRCb2R5RXhwZWN0ZWRCb2R5bWVzc2FnZUV4cGVjdGVkQm9keXRlbXBsYXRlRXhwZWN0ZWRCdXRHb3RFeHBlY3RlZCAnI3N0cmluZycgYmVmb3JlIHRoaXMuY29kZUV4cGVjdGVkQnV0R290RXhwZWN0ZWRCdXRHb3R0ZW1wbGF0ZUV4cGVjdGVkQ2xhc3NNZW1iZXJFeHBlY3RlZCBhIGNsYXNzIG1lbWJlciwgYnV0IGdvdCAnI2xleGVtZScuY29kZUV4cGVjdGVkQ2xhc3NNZW1iZXJFeHBlY3RlZENsYXNzTWVtYmVyRVhQRUNURURfQ0xBU1NfTUVNQkVSdGVtcGxhdGVFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHlBICNzdHJpbmcgbXVzdCBoYXZlIGEgYm9keSwgZXZlbiBpZiBpdCBpcyBlbXB0eS5UcnkgYWRkaW5nIGFuIGVtcHR5IGJvZHkuY29kZUV4cGVjdGVkQ2xhc3NPck1peGluQm9keUV4cGVjdGVkQ2xhc3NPck1peGluQm9keXRlbXBsYXRlRXhwZWN0ZWREZWNsYXJhdGlvbkV4cGVjdGVkIGEgZGVjbGFyYXRpb24sIGJ1dCBnb3QgJyNsZXhlbWUnLmNvZGVFeHBlY3RlZERlY2xhcmF0aW9uRXhwZWN0ZWREZWNsYXJhdGlvbkVYUEVDVEVEX0VYRUNVVEFCTEVjb2RlRXhwZWN0ZWRFbHNlT3JDb21tYUV4cGVjdGVkICdlbHNlJyBvciBjb21tYS5FeHBlY3RlZEVsc2VPckNvbW1hbWVzc2FnZUV4cGVjdGVkRWxzZU9yQ29tbWF0ZW1wbGF0ZUV4cGVjdGVkRW51bUJvZHlFeHBlY3RlZCBhIGVudW0gYm9keSwgYnV0IGdvdCAnI2xleGVtZScuQW4gZW51bSBkZWZpbml0aW9uIG11c3QgaGF2ZSBhIGJvZHkgd2l0aCBhdCBsZWFzdCBvbmUgY29uc3RhbnQgbmFtZS5jb2RlRXhwZWN0ZWRFbnVtQm9keUV4cGVjdGVkRW51bUJvZHlNSVNTSU5HX0VOVU1fQk9EWXRlbXBsYXRlRXhwZWN0ZWRGdW5jdGlvbkJvZHlFeHBlY3RlZCBhIGZ1bmN0aW9uIGJvZHksIGJ1dCBnb3QgJyNsZXhlbWUnLmNvZGVFeHBlY3RlZEZ1bmN0aW9uQm9keUV4cGVjdGVkRnVuY3Rpb25Cb2R5Y29kZUV4cGVjdGVkSGV4RGlnaXRBIGhleCBkaWdpdCAoMC05IG9yIEEtRikgbXVzdCBmb2xsb3cgJzB4Jy5FeHBlY3RlZEhleERpZ2l0TUlTU0lOR19IRVhfRElHSVRtZXNzYWdlRXhwZWN0ZWRIZXhEaWdpdHRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyRXhwZWN0ZWQgYW4gaWRlbnRpZmllciwgYnV0IGdvdCAnI2xleGVtZScuY29kZUV4cGVjdGVkSWRlbnRpZmllckV4cGVjdGVkSWRlbnRpZmllcnRlbXBsYXRlRXhwZWN0ZWRJbnN0ZWFkRXhwZWN0ZWQgJyNzdHJpbmcnIGluc3RlYWQgb2YgdGhpcy5jb2RlRXhwZWN0ZWRJbnN0ZWFkRXhwZWN0ZWRJbnN0ZWFkY29kZUV4cGVjdGVkTmFtZWRBcmd1bWVudEV4cGVjdGVkIG5hbWVkIGFyZ3VtZW50LkV4cGVjdGVkTmFtZWRBcmd1bWVudEVYVFJBX1BPU0lUSU9OQUxfQVJHVU1FTlRTbWVzc2FnZUV4cGVjdGVkTmFtZWRBcmd1bWVudGNvZGVFeHBlY3RlZE9uZUV4cHJlc3Npb25FeHBlY3RlZCBvbmUgZXhwcmVzc2lvbiwgYnV0IGZvdW5kIGFkZGl0aW9uYWwgaW5wdXQuRXhwZWN0ZWRPbmVFeHByZXNzaW9ubWVzc2FnZUV4cGVjdGVkT25lRXhwcmVzc2lvbmNvZGVFeHBlY3RlZE9wZW5QYXJlbnNFeHBlY3RlZCAnKCcuRXhwZWN0ZWRPcGVuUGFyZW5zbWVzc2FnZUV4cGVjdGVkT3BlblBhcmVuc2NvZGVFeHBlY3RlZFN0YXRlbWVudEV4cGVjdGVkIGEgc3RhdGVtZW50LkV4cGVjdGVkU3RhdGVtZW50bWVzc2FnZUV4cGVjdGVkU3RhdGVtZW50dGVtcGxhdGVFeHBlY3RlZFN0cmluZ0V4cGVjdGVkIGEgU3RyaW5nLCBidXQgZ290ICcjbGV4ZW1lJy5jb2RlRXhwZWN0ZWRTdHJpbmdFeHBlY3RlZFN0cmluZ0VYUEVDVEVEX1NUUklOR19MSVRFUkFMdGVtcGxhdGVFeHBlY3RlZFRva2VuRXhwZWN0ZWQgdG8gZmluZCAnI3N0cmluZycuY29kZUV4cGVjdGVkVG9rZW5FeHBlY3RlZFRva2VudGVtcGxhdGVFeHBlY3RlZFR5cGVFeHBlY3RlZCBhIHR5cGUsIGJ1dCBnb3QgJyNsZXhlbWUnLmNvZGVFeHBlY3RlZFR5cGVFeHBlY3RlZFR5cGVFWFBFQ1RFRF9UWVBFX05BTUVjb2RlRXhwZWN0ZWRVcmlFeHBlY3RlZCBhIFVSSS5FeHBlY3RlZFVyaW1lc3NhZ2VFeHBlY3RlZFVyaXRlbXBsYXRlRXhwZXJpbWVudE5vdEVuYWJsZWRUaGlzIHJlcXVpcmVzIHRoZSAnI3N0cmluZycgZXhwZXJpbWVudCB0byBiZSBlbmFibGVkLlRyeSBlbmFibGluZyB0aGlzIGV4cGVyaW1lbnQgYnkgYWRkaW5nIGl0IHRvIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBjb21waWxpbmcgYW5kIHJ1bm5pbmcuY29kZUV4cGVyaW1lbnROb3RFbmFibGVkRXhwZXJpbWVudE5vdEVuYWJsZWRjb2RlRXhwb3J0QWZ0ZXJQYXJ0RXhwb3J0IGRpcmVjdGl2ZXMgbXVzdCBwcmVjZWRlIHBhcnQgZGlyZWN0aXZlcy5UcnkgbW92aW5nIHRoZSBleHBvcnQgZGlyZWN0aXZlcyBiZWZvcmUgdGhlIHBhcnQgZGlyZWN0aXZlcy5FeHBvcnRBZnRlclBhcnRtZXNzYWdlRXhwb3J0QWZ0ZXJQYXJ0dGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydEV4cG9ydCBvZiAnI25hbWUnIChmcm9tICcjdXJpJykgaGlkZXMgZXhwb3J0IGZyb20gJyN1cmkyJy5jb2RlRXhwb3J0SGlkZXNFeHBvcnRFeHBvcnRIaWRlc0V4cG9ydGNvZGVFeHByZXNzaW9uTm90TWV0YWRhdGFUaGlzIGNhbid0IGJlIHVzZWQgYXMgbWV0YWRhdGE7IG1ldGFkYXRhIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFudCB2YXJpYWJsZSwgb3IgYSBjYWxsIHRvIGEgY29uc3RhbnQgY29uc3RydWN0b3IuRXhwcmVzc2lvbk5vdE1ldGFkYXRhbWVzc2FnZUV4cHJlc3Npb25Ob3RNZXRhZGF0YXRlbXBsYXRlRXh0ZW5kaW5nRW51bScjbmFtZScgaXMgYW4gZW51bSBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuY29kZUV4dGVuZGluZ0VudW1FeHRlbmRpbmdFbnVtRVhURU5EU19FTlVNdGVtcGxhdGVFeHRlbmRpbmdSZXN0cmljdGVkJyNuYW1lJyBpcyByZXN0cmljdGVkIGFuZCBjYW4ndCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC5jb2RlRXh0ZW5kaW5nUmVzdHJpY3RlZEV4dGVuZGluZ1Jlc3RyaWN0ZWRFWFRFTkRTX0RJU0FMTE9XRURfQ0xBU1Njb2RlRXh0ZXJuYWxDbGFzc0NsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2V4dGVybmFsJy5UcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy5FeHRlcm5hbENsYXNzbWVzc2FnZUV4dGVybmFsQ2xhc3Njb2RlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5RXh0ZXJuYWwgY29uc3RydWN0b3JzIGNhbid0IGhhdmUgYSBib2R5LlRyeSByZW1vdmluZyB0aGUgYm9keSBvZiB0aGUgY29uc3RydWN0b3IsIG9yIHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5bWVzc2FnZUV4dGVybmFsQ29uc3RydWN0b3JXaXRoQm9keWNvZGVFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzQW4gZXh0ZXJuYWwgY29uc3RydWN0b3IgY2FuJ3QgaW5pdGlhbGl6ZSBmaWVsZHMuVHJ5IHJlbW92aW5nIHRoZSBmaWVsZCBpbml0aWFsaXplcnMsIG9yIHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhGaWVsZEluaXRpYWxpemVyc0VYVEVSTkFMX0NPTlNUUlVDVE9SX1dJVEhfRklFTERfSU5JVElBTElaRVJTbWVzc2FnZUV4dGVybmFsQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXplcnNjb2RlRXh0ZXJuYWxFbnVtRW51bXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2V4dGVybmFsJy5FeHRlcm5hbEVudW1tZXNzYWdlRXh0ZXJuYWxFbnVtY29kZUV4dGVybmFsRmFjdG9yeVJlZGlyZWN0aW9uQSByZWRpcmVjdGluZyBmYWN0b3J5IGNhbid0IGJlIGV4dGVybmFsLlRyeSByZW1vdmluZyB0aGUgJ2V4dGVybmFsJyBtb2RpZmllci5FeHRlcm5hbEZhY3RvcnlSZWRpcmVjdGlvbm1lc3NhZ2VFeHRlcm5hbEZhY3RvcnlSZWRpcmVjdGlvbmNvZGVFeHRlcm5hbEZhY3RvcnlXaXRoQm9keUV4dGVybmFsIGZhY3RvcmllcyBjYW4ndCBoYXZlIGEgYm9keS5UcnkgcmVtb3ZpbmcgdGhlIGJvZHkgb2YgdGhlIGZhY3RvcnksIG9yIHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHltZXNzYWdlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHljb2RlRXh0ZXJuYWxGaWVsZEZpZWxkcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnZXh0ZXJuYWwnLkV4dGVybmFsRmllbGRtZXNzYWdlRXh0ZXJuYWxGaWVsZGNvZGVFeHRlcm5hbE1ldGhvZFdpdGhCb2R5QW4gZXh0ZXJuYWwgb3IgbmF0aXZlIG1ldGhvZCBjYW4ndCBoYXZlIGEgYm9keS5FeHRlcm5hbE1ldGhvZFdpdGhCb2R5bWVzc2FnZUV4dGVybmFsTWV0aG9kV2l0aEJvZHljb2RlRXh0ZXJuYWxUeXBlZGVmVHlwZWRlZnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2V4dGVybmFsJy5FeHRlcm5hbFR5cGVkZWZtZXNzYWdlRXh0ZXJuYWxUeXBlZGVmdGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXJDYW4ndCBoYXZlIG1vZGlmaWVyICcjbGV4ZW1lJyBoZXJlLlRyeSByZW1vdmluZyAnI2xleGVtZScuY29kZUV4dHJhbmVvdXNNb2RpZmllckV4dHJhbmVvdXNNb2RpZmllcmNvZGVGYWN0b3J5Tm90U3luY0ZhY3RvcnkgYm9kaWVzIGNhbid0IHVzZSAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJy5GYWN0b3J5Tm90U3luY05PTl9TWU5DX0ZBQ1RPUlltZXNzYWdlRmFjdG9yeU5vdFN5bmNjb2RlRmFjdG9yeVRvcExldmVsRGVjbGFyYXRpb25Ub3AtbGV2ZWwgZGVjbGFyYXRpb25zIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdmYWN0b3J5Jy5UcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2ZhY3RvcnknLkZhY3RvcnlUb3BMZXZlbERlY2xhcmF0aW9ubWVzc2FnZUZhY3RvcnlUb3BMZXZlbERlY2xhcmF0aW9udGVtcGxhdGVGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWRFeHBlY3RlZCB2YWx1ZSBhZnRlciAnI25hbWUnLmNvZGVGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWRGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWRjb2RlRmFzdGFVc2FnZUxvbmdTdXBwb3J0ZWQgb3B0aW9uczoKCiAgLW8gPGZpbGU+LCAtLW91dHB1dD08ZmlsZT4KICAgIEdlbmVyYXRlIHRoZSBvdXRwdXQgaW50byA8ZmlsZT4uCgogIC1oLCAvaCwgLz8sIC0taGVscAogICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgKGFkZCAtdiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9wdGlvbnMpLgoKICAtdiwgLS12ZXJib3NlCiAgICBEaXNwbGF5IHZlcmJvc2UgaW5mb3JtYXRpb24uCgogIC1EbmFtZQogIC1EbmFtZT12YWx1ZQogICAgRGVmaW5lIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHRoZSBjb21waWxlLXRpbWUgZW52aXJvbm1lbnQuCgogIC0tbm8tZGVmaW5lcwogICAgSWdub3JlIGFsbCAtRCBvcHRpb25zIGFuZCBsZWF2ZSBlbnZpcm9ubWVudCBjb25zdGFudHMgdW5ldmFsdWF0ZWQuCgogIC0tCiAgICBTdG9wIG9wdGlvbiBwYXJzaW5nLCB0aGUgcmVzdCBvZiB0aGUgY29tbWFuZCBsaW5lIGlzIGFzc3VtZWQgdG8gYmUKICAgIGZpbGUgbmFtZXMgb3IgYXJndW1lbnRzIHRvIHRoZSBEYXJ0IHByb2dyYW0uCgogIC0tcGFja2FnZXM9PGZpbGU+CiAgICBVc2UgcGFja2FnZSByZXNvbHV0aW9uIGNvbmZpZ3VyYXRpb24gPGZpbGU+LCB3aGljaCBzaG91bGQgY29udGFpbiBhIG1hcHBpbmcKICAgIG9mIHBhY2thZ2UgbmFtZXMgdG8gcGF0aHMuCgogIC0tcGxhdGZvcm09PGZpbGU+CiAgICBSZWFkIHRoZSBTREsgcGxhdGZvcm0gZnJvbSA8ZmlsZT4sIHdoaWNoIHNob3VsZCBiZSBpbiBEaWxsL0tlcm5lbCBJUiBmb3JtYXQKICAgIGFuZCBjb250YWluIHRoZSBEYXJ0IFNESy4KCiAgLS10YXJnZXQ9ZGFydDJqc3xkYXJ0MmpzX3NlcnZlcnxkYXJ0X3J1bm5lcnxkYXJ0ZGV2Y3xmbHV0dGVyfGZsdXR0ZXJfcnVubmVyfG5vbmV8dm0KICAgIFNwZWNpZnkgdGhlIHRhcmdldCBjb25maWd1cmF0aW9uLgoKICAtLWVuYWJsZS1hc3NlcnRzCiAgICBDaGVjayBhc3NlcnRzIGluIGluaXRpYWxpemVycyBkdXJpbmcgY29uc3RhbnQgZXZhbHVhdGlvbi4KCiAgLS12ZXJpZnkKICAgIENoZWNrIHRoYXQgdGhlIGdlbmVyYXRlZCBvdXRwdXQgaXMgZnJlZSBvZiB2YXJpb3VzIHByb2JsZW1zLiBUaGlzIGlzIG1vc3RseQogICAgdXNlZnVsIGZvciBkZXZlbG9wZXJzIG9mIHRoaXMgY29tcGlsZXIgb3IgS2VybmVsIHRyYW5zZm9ybWF0aW9ucy4KCiAgLS1kdW1wLWlyCiAgICBQcmludCBjb21waWxlZCBsaWJyYXJpZXMgaW4gS2VybmVsIHNvdXJjZSBub3RhdGlvbi4KCiAgLS1vbWl0LXBsYXRmb3JtCiAgICBFeGNsdWRlIHRoZSBwbGF0Zm9ybSBmcm9tIHRoZSBzZXJpYWxpemVkIGRpbGwgZmlsZS4KCiAgLS1ieXRlY29kZQogICAgR2VuZXJhdGUgYnl0ZWNvZGUuIFN1cHBvcnRlZCBvbmx5IGZvciBTREsgcGxhdGZvcm0gY29tcGlsYXRpb24uCgogIC0tZXhjbHVkZS1zb3VyY2UKICAgIERvIG5vdCBpbmNsdWRlIHNvdXJjZSBjb2RlIGluIHRoZSBkaWxsIGZpbGUuCgogIC0tY29tcGlsZS1zZGs9PHNkaz4KICAgIENvbXBpbGUgdGhlIFNESyBmcm9tIHNjcmF0Y2ggaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZyb20gYSAuZGlsbCBmaWxlCiAgICAoc2VlIC0tcGxhdGZvcm0pLgoKICAtLXNkaz08c2RrPgogICAgTG9jYXRpb24gb2YgdGhlIFNESyBzb3VyY2VzIGZvciB1c2Ugd2hlbiBjb21waWxpbmcgYWRkaXRpb25hbCBwbGF0Zm9ybQogICAgbGlicmFyaWVzLgoKICAtLXN1cGVybWl4aW4KICAgIElnbm9yZWQgZm9yIG5vdy4KCiAgLS1zaW5nbGUtcm9vdC1zY2hlbWU9U3RyaW5nCiAgLS1zaW5nbGUtcm9vdC1iYXNlPTxkaXI+CiAgICBTcGVjaWZ5IGEgY3VzdG9tIFVSSSBzY2hlbWUgYW5kIGEgbG9jYXRpb24gb24gZGlzayB3aGVyZSBzdWNoIFVSSXMgYXJlCiAgICBtYXBwZWQgdG8uCgogICAgV2hlbiBzcGVjaWZpZWQsIHRoZSBjb21waWxlciBjYW4gYmUgaW52b2tlZCB3aXRoIGlucHV0cyB1c2luZyB0aGUgY3VzdG9tCiAgICBVUkkgc2NoZW1lLiBUaGUgY29tcGlsZXIgY2FuIGlnbm9yZSB0aGUgZXhhY3QgbG9jYXRpb24gb2YgZmlsZXMgb24gZGlzawogICAgYW5kIGFzIGEgcmVzdWx0IHRvIHByb2R1Y2Ugb3V0cHV0IHRoYXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGFic29sdXRlCiAgICBsb2NhdGlvbiBvZiBmaWxlcyBvbiBkaXNrLiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgZm9yIGludGVncmF0aW5nIHdpdGgKICAgIGJ1aWxkIHN5c3RlbXMuCgogIC0tZmF0YWw9ZXJyb3JzCiAgLS1mYXRhbD13YXJuaW5ncwogICAgTWFrZXMgbWVzc2FnZXMgb2YgdGhlIGdpdmVuIGtpbmRzIGZhdGFsLCB0aGF0IGlzLCBpbW1lZGlhdGVseSBzdG9wIHRoZQogICAgY29tcGlsZXIgd2l0aCBhIG5vbi16ZXJvIGV4aXQtY29kZS4gSW4gLS12ZXJib3NlIG1vZGUsIGFsc28gZGlzcGxheSBhbgogICAgaW50ZXJuYWwgc3RhY2sgdHJhY2UgZnJvbSB0aGUgY29tcGlsZXIuIE11bHRpcGxlIGtpbmRzIGNhbiBiZSBzZXBhcmF0ZWQgYnkKICAgIGNvbW1hcywgZm9yIGV4YW1wbGUsIC0tZmF0YWw9ZXJyb3JzLHdhcm5pbmdzLgoKICAtLWVuYWJsZS1leHBlcmltZW50PTxmbGFnPgogICAgRW5hYmxlIG9yIGRpc2FibGUgYW4gZXhwZXJpbWVudGFsIGZsYWcsIHVzZWQgdG8gZ3VhcmQgZmVhdHVyZXMgY3VycmVudGx5CiAgICBpbiBkZXZlbG9wbWVudC4gUHJlZml4IGFuIGV4cGVyaW1lbnQgbmFtZSB3aXRoICduby0nIHRvIGRpc2FibGUgaXQuCiAgICBNdWx0aXBsZSBleHBlcmltZW50cyBjYW4gYmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy5GYXN0YVVzYWdlTG9uZ21lc3NhZ2VGYXN0YVVzYWdlTG9uZ2NvZGVGYXN0YVVzYWdlU2hvcnRGcmVxdWVudGx5IHVzZWQgb3B0aW9uczoKCiAgLW8gPGZpbGU+IEdlbmVyYXRlIHRoZSBvdXRwdXQgaW50byA8ZmlsZT4uCiAgLWggICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlIChhZGQgLXYgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcHRpb25zKS5GYXN0YVVzYWdlU2hvcnRtZXNzYWdlRmFzdGFVc2FnZVNob3J0dGVtcGxhdGVGZmlEYXJ0VHlwZU1pc21hdGNoRXhwZWN0ZWQgJyN0eXBlJyB0byBiZSBhIHN1YnR5cGUgb2YgJyN0eXBlMicuY29kZUZmaURhcnRUeXBlTWlzbWF0Y2hGZmlEYXJ0VHlwZU1pc21hdGNodGVtcGxhdGVGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3NDbGFzcyAnI25hbWUnIGNhbm5vdCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC5jb2RlRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzdGVtcGxhdGVGZmlGaWVsZEFubm90YXRpb25GaWVsZCAnI25hbWUnIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFubm90YXRpb24gdG8gZGVjbGFyZSBpdHMgQysrIHR5cGUsIHdoaWNoIGNhbm5vdCBiZSBWb2lkLiBkYXJ0OmZmaSBTdHJ1Y3RzIGNhbm5vdCBoYXZlIHJlZ3VsYXIgRGFydCBmaWVsZHMuY29kZUZmaUZpZWxkQW5ub3RhdGlvbkZmaUZpZWxkQW5ub3RhdGlvbnRlbXBsYXRlRmZpRmllbGRJbml0aWFsaXplckZpZWxkICcjbmFtZScgaXMgYSBkYXJ0OmZmaSBQb2ludGVyIHRvIGEgc3RydWN0IGZpZWxkIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdHJ1Y3RvciBleGVjdXRpb24uY29kZUZmaUZpZWxkSW5pdGlhbGl6ZXJGZmlGaWVsZEluaXRpYWxpemVydGVtcGxhdGVGZmlGaWVsZE5vQW5ub3RhdGlvbkZpZWxkICcjbmFtZScgcmVxdWlyZXMgbm8gYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgaXQgaXMgYSBQb2ludGVyIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIHR5cGUgaW4gRGFydCBhbmQgQysrLmNvZGVGZmlGaWVsZE5vQW5ub3RhdGlvbkZmaUZpZWxkTm9Bbm5vdGF0aW9udGVtcGxhdGVGZmlOb3RTdGF0aWMjbmFtZSBleHBlY3RzIGEgc3RhdGljIGZ1bmN0aW9uIGFzIHBhcmFtZXRlci4gZGFydDpmZmkgb25seSBzdXBwb3J0cyBjYWxsaW5nIHN0YXRpYyBEYXJ0IGZ1bmN0aW9ucyBmcm9tIGMuY29kZUZmaU5vdFN0YXRpY0ZmaU5vdFN0YXRpY3RlbXBsYXRlRmZpU3RydWN0R2VuZXJpY1N0cnVjdCAnI25hbWUnIHNob3VsZCBub3QgYmUgZ2VuZXJpYy5jb2RlRmZpU3RydWN0R2VuZXJpY0ZmaVN0cnVjdEdlbmVyaWN0ZW1wbGF0ZUZmaVR5cGVJbnZhbGlkRXhwZWN0ZWQgdHlwZSAnI3R5cGUnIHRvIGJlIGEgdmFsaWQgYW5kIGluc3RhbnRpYXRlZCBzdWJ0eXBlIG9mICdOYXRpdmVUeXBlJy5jb2RlRmZpVHlwZUludmFsaWRGZmlUeXBlSW52YWxpZHRlbXBsYXRlRmZpVHlwZU1pc21hdGNoRXhwZWN0ZWQgdHlwZSAnI3R5cGUnIHRvIGJlICcjdHlwZTInLCB3aGljaCBpcyB0aGUgRGFydCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gJyN0eXBlMycuY29kZUZmaVR5cGVNaXNtYXRjaEZmaVR5cGVNaXNtYXRjaHRlbXBsYXRlRmZpVHlwZVVuc2l6ZWRNZXRob2QgJyNuYW1lJyBjYW5ub3QgYmUgY2FsbGVkIG9uIHNvbWV0aGluZyBvZiB0eXBlICcjdHlwZScgYXMgdGhpcyB0eXBlIGlzIHVuc2l6ZWQuY29kZUZmaVR5cGVVbnNpemVkRmZpVHlwZVVuc2l6ZWR0ZW1wbGF0ZUZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2VTdHJ1Y3QgJyNuYW1lJyBtdXN0IGluaGVyaXQgZnJvbSAnU3RydWN0PCNuYW1lPicuY29kZUZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2VGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlY29kZUZpZWxkSW5pdGlhbGl6ZWRPdXRzaWRlRGVjbGFyaW5nQ2xhc3NBIGZpZWxkIGNhbiBvbmx5IGJlIGluaXRpYWxpemVkIGluIGl0J3MgZGVjbGFyaW5nIGNsYXNzVHJ5IHBhc3NpbmcgYSB2YWx1ZSBpbnRvIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yLCBvciBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uIGludG8gdGhlIGNvbnN0cnVjdG9yIGJvZHkuRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzc21lc3NhZ2VGaWVsZEluaXRpYWxpemVkT3V0c2lkZURlY2xhcmluZ0NsYXNzY29kZUZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3JGaWVsZCBmb3JtYWwgcGFyYW1ldGVycyBjYW4gb25seSBiZSB1c2VkIGluIGEgY29uc3RydWN0b3IuVHJ5IHJlbW92aW5nICd0aGlzLicuRmllbGRJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3Rvcm1lc3NhZ2VGaWVsZEluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yY29kZUZpbmFsQW5kQ292YXJpYW50TWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdmaW5hbCcgYW5kICdjb3ZhcmlhbnQnLlRyeSByZW1vdmluZyBlaXRoZXIgdGhlICdmaW5hbCcgb3IgJ2NvdmFyaWFudCcga2V5d29yZC5GaW5hbEFuZENvdmFyaWFudG1lc3NhZ2VGaW5hbEFuZENvdmFyaWFudGNvZGVGaW5hbEFuZFZhck1lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnZmluYWwnIGFuZCAndmFyJy5UcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ3ZhcicuRmluYWxBbmRWYXJtZXNzYWdlRmluYWxBbmRWYXJ0ZW1wbGF0ZUZpbmFsRmllbGROb3RJbml0aWFsaXplZEZpbmFsIGZpZWxkICcjbmFtZScgaXMgbm90IGluaXRpYWxpemVkLlRyeSB0byBpbml0aWFsaXplIHRoZSBmaWVsZCBpbiB0aGUgZGVjbGFyYXRpb24gb3IgaW4gZXZlcnkgY29uc3RydWN0b3IuY29kZUZpbmFsRmllbGROb3RJbml0aWFsaXplZEZpbmFsRmllbGROb3RJbml0aWFsaXplZEZJTkFMX05PVF9JTklUSUFMSVpFRHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvckZpbmFsIGZpZWxkICcjbmFtZScgaXMgbm90IGluaXRpYWxpemVkIGJ5IHRoaXMgY29uc3RydWN0b3IuVHJ5IHRvIGluaXRpYWxpemUgdGhlIGZpZWxkIHVzaW5nIGFuIGluaXRpYWxpemluZyBmb3JtYWwgb3IgYSBmaWVsZCBpbml0aWFsaXplci5jb2RlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvckZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3JGSU5BTF9OT1RfSU5JVElBTElaRURfQ09OU1RSVUNUT1JfMXRlbXBsYXRlRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplclRoZSBmaW5hbCB2YXJpYWJsZSAnI25hbWUnIG11c3QgYmUgaW5pdGlhbGl6ZWQuY29kZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXJGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVydGVtcGxhdGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQnI25hbWUnIGlzIGEgZmluYWwgaW5zdGFuY2UgdmFyaWFibGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmNvZGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRGSU5BTF9JTklUSUFMSVpFRF9NVUxUSVBMRV9USU1FU3RlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UnI25hbWUnIHdhcyBpbml0aWFsaXplZCBoZXJlLmNvZGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNldGVtcGxhdGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGVBIHZhbHVlIG9mIHR5cGUgJyN0eXBlJyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJyN0eXBlMicuVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZS5jb2RlRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlRk9SX0lOX09GX0lOVkFMSURfRUxFTUVOVF9UWVBFY29kZUZvckluTG9vcEV4YWN0bHlPbmVWYXJpYWJsZUEgZm9yLWluIGxvb3AgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIGxvb3AgdmFyaWFibGUuRm9ySW5Mb29wRXhhY3RseU9uZVZhcmlhYmxlbWVzc2FnZUZvckluTG9vcEV4YWN0bHlPbmVWYXJpYWJsZWNvZGVGb3JJbkxvb3BOb3RBc3NpZ25hYmxlQ2FuJ3QgYXNzaWduIHRvIHRoaXMsIHNvIGl0IGNhbid0IGJlIHVzZWQgaW4gYSBmb3ItaW4gbG9vcC5Gb3JJbkxvb3BOb3RBc3NpZ25hYmxlbWVzc2FnZUZvckluTG9vcE5vdEFzc2lnbmFibGV0ZW1wbGF0ZUZvckluTG9vcFR5cGVOb3RJdGVyYWJsZVRoZSB0eXBlICcjdHlwZScgdXNlZCBpbiB0aGUgJ2ZvcicgbG9vcCBtdXN0IGltcGxlbWVudCAnI3R5cGUyJy5jb2RlRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlRk9SX0lOX09GX0lOVkFMSURfVFlQRWNvZGVGb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZUEgZm9yLWluIGxvb3AtdmFyaWFibGUgY2FuJ3QgYmUgJ2NvbnN0Jy5UcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcgbW9kaWZpZXIuRm9ySW5Mb29wV2l0aENvbnN0VmFyaWFibGVGT1JfSU5fV0lUSF9DT05TVF9WQVJJQUJMRW1lc3NhZ2VGb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZWNvZGVGdW5jdGlvblR5cGVEZWZhdWx0VmFsdWVDYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBpbiBhIGZ1bmN0aW9uIHR5cGUuRnVuY3Rpb25UeXBlRGVmYXVsdFZhbHVlREVGQVVMVF9WQUxVRV9JTl9GVU5DVElPTl9UWVBFbWVzc2FnZUZ1bmN0aW9uVHlwZURlZmF1bHRWYWx1ZWNvZGVGdW5jdGlvblR5cGVkUGFyYW1ldGVyVmFyRnVuY3Rpb24tdHlwZWQgcGFyYW1ldGVycyBjYW4ndCBzcGVjaWZ5ICdjb25zdCcsICdmaW5hbCcgb3IgJ3ZhcicgaW4gcGxhY2Ugb2YgYSByZXR1cm4gdHlwZS5UcnkgcmVwbGFjaW5nIHRoZSBrZXl3b3JkIHdpdGggYSByZXR1cm4gdHlwZS5GdW5jdGlvblR5cGVkUGFyYW1ldGVyVmFyRlVOQ1RJT05fVFlQRURfUEFSQU1FVEVSX1ZBUm1lc3NhZ2VGdW5jdGlvblR5cGVkUGFyYW1ldGVyVmFyY29kZUdlbmVyYXRvclJldHVybnNWYWx1ZSdzeW5jKicgYW5kICdhc3luYyonIGNhbid0IHJldHVybiBhIHZhbHVlLkdlbmVyYXRvclJldHVybnNWYWx1ZVJFVFVSTl9JTl9HRU5FUkFUT1JtZXNzYWdlR2VuZXJhdG9yUmV0dXJuc1ZhbHVlY29kZUdlbmVyaWNGdW5jdGlvblR5cGVJbkJvdW5kVHlwZSB2YXJpYWJsZXMgY2FuJ3QgaGF2ZSBnZW5lcmljIGZ1bmN0aW9uIHR5cGVzIGluIHRoZWlyIGJvdW5kcy5HZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZEdFTkVSSUNfRlVOQ1RJT05fVFlQRV9DQU5OT1RfQkVfQk9VTkRtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZUluQm91bmR0ZW1wbGF0ZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50VW5leHBlY3RlZCBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgJyN0eXBlJyBpbmZlcnJlZCBhcyBhIHR5cGUgYXJndW1lbnQuVHJ5IHByb3ZpZGluZyBhIG5vbi1nZW5lcmljIGZ1bmN0aW9uIHR5cGUgZXhwbGljaXRseS5jb2RlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnRHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudEdFTkVSSUNfRlVOQ1RJT05fQ0FOTk9UX0JFX1RZUEVfQVJHVU1FTlRjb2RlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudFVuZXhwZWN0ZWQgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGZvdW5kIGluIGEgdHlwZSBhcmd1bWVudC5UcnkgdXNpbmcgYSBub24tZ2VuZXJpYyBmdW5jdGlvbiB0eXBlLkdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnRtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudHRlbXBsYXRlR2V0dGVyTm90Rm91bmRHZXR0ZXIgbm90IGZvdW5kOiAnI25hbWUnLmNvZGVHZXR0ZXJOb3RGb3VuZEdldHRlck5vdEZvdW5kVU5ERUZJTkVEX0dFVFRFUmNvZGVHZXR0ZXJXaXRoRm9ybWFsc0EgZ2V0dGVyIGNhbid0IGhhdmUgZm9ybWFsIHBhcmFtZXRlcnMuVHJ5IHJlbW92aW5nICcoLi4uKScuR2V0dGVyV2l0aEZvcm1hbHNHRVRURVJfV0lUSF9QQVJBTUVURVJTbWVzc2FnZUdldHRlcldpdGhGb3JtYWxzY29kZUlsbGVnYWxBc3NpZ25tZW50VG9Ob25Bc3NpZ25hYmxlSWxsZWdhbCBhc3NpZ25tZW50IHRvIG5vbi1hc3NpZ25hYmxlIGV4cHJlc3Npb24uSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGVtZXNzYWdlSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGVjb2RlSWxsZWdhbEFzeW5jR2VuZXJhdG9yUmV0dXJuVHlwZUZ1bmN0aW9ucyBtYXJrZWQgJ2FzeW5jKicgbXVzdCBoYXZlIGEgcmV0dXJuIHR5cGUgYXNzaWduYWJsZSB0byAnU3RyZWFtJy5JbGxlZ2FsQXN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlSUxMRUdBTF9BU1lOQ19HRU5FUkFUT1JfUkVUVVJOX1RZUEVtZXNzYWdlSWxsZWdhbEFzeW5jR2VuZXJhdG9yUmV0dXJuVHlwZWNvZGVJbGxlZ2FsQXN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZUZ1bmN0aW9ucyBtYXJrZWQgJ2FzeW5jKicgY2FuJ3QgaGF2ZSByZXR1cm4gdHlwZSAndm9pZCcuSWxsZWdhbEFzeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGVtZXNzYWdlSWxsZWdhbEFzeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGVjb2RlSWxsZWdhbEFzeW5jUmV0dXJuVHlwZUZ1bmN0aW9ucyBtYXJrZWQgJ2FzeW5jJyBtdXN0IGhhdmUgYSByZXR1cm4gdHlwZSBhc3NpZ25hYmxlIHRvICdGdXR1cmUnLklsbGVnYWxBc3luY1JldHVyblR5cGVJTExFR0FMX0FTWU5DX1JFVFVSTl9UWVBFbWVzc2FnZUlsbGVnYWxBc3luY1JldHVyblR5cGV0ZW1wbGF0ZUlsbGVnYWxNaXhpblRoZSB0eXBlICcjbmFtZScgY2FuJ3QgYmUgbWl4ZWQgaW4uY29kZUlsbGVnYWxNaXhpbklsbGVnYWxNaXhpbklMTEVHQUxfTUlYSU50ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2FuJ3QgdXNlICcjbmFtZScgYXMgYSBtaXhpbiBiZWNhdXNlIGl0IGhhcyBjb25zdHJ1Y3RvcnMuY29kZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNNSVhJTl9ERUNMQVJFU19DT05TVFJVQ1RPUnRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZVRoaXMgY29uc3RydWN0b3IgcHJldmVudHMgdXNpbmcgJyNuYW1lJyBhcyBhIG1peGluLmNvZGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZXRlbXBsYXRlSWxsZWdhbFJlY3Vyc2l2ZVR5cGVJbGxlZ2FsIHJlY3Vyc2l2ZSB0eXBlICcjdHlwZScuY29kZUlsbGVnYWxSZWN1cnNpdmVUeXBlSWxsZWdhbFJlY3Vyc2l2ZVR5cGVjb2RlSWxsZWdhbFN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlRnVuY3Rpb25zIG1hcmtlZCAnc3luYyonIG11c3QgaGF2ZSBhIHJldHVybiB0eXBlIGFzc2lnbmFibGUgdG8gJ0l0ZXJhYmxlJy5JbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGVJTExFR0FMX1NZTkNfR0VORVJBVE9SX1JFVFVSTl9UWVBFbWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yUmV0dXJuVHlwZWNvZGVJbGxlZ2FsU3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlRnVuY3Rpb25zIG1hcmtlZCAnc3luYyonIGNhbid0IGhhdmUgcmV0dXJuIHR5cGUgJ3ZvaWQnLklsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGVtZXNzYWdlSWxsZWdhbFN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZWNvZGVJbXBsZW1lbnRzQmVmb3JlRXh0ZW5kc1RoZSBleHRlbmRzIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuVHJ5IG1vdmluZyB0aGUgZXh0ZW5kcyBjbGF1c2UgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS5JbXBsZW1lbnRzQmVmb3JlRXh0ZW5kc21lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlRXh0ZW5kc2NvZGVJbXBsZW1lbnRzQmVmb3JlT25UaGUgb24gY2xhdXNlIG11c3QgYmUgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS5UcnkgbW92aW5nIHRoZSBvbiBjbGF1c2UgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS5JbXBsZW1lbnRzQmVmb3JlT25tZXNzYWdlSW1wbGVtZW50c0JlZm9yZU9uY29kZUltcGxlbWVudHNCZWZvcmVXaXRoVGhlIHdpdGggY2xhdXNlIG11c3QgYmUgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS5UcnkgbW92aW5nIHRoZSB3aXRoIGNsYXVzZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLkltcGxlbWVudHNCZWZvcmVXaXRobWVzc2FnZUltcGxlbWVudHNCZWZvcmVXaXRoY29kZUltcGxlbWVudHNGdXR1cmVPcidGdXR1cmVPcicgY2FuJ3QgYmUgdXNlZCBpbiBhbiAnaW1wbGVtZW50cycgY2xhdXNlLkltcGxlbWVudHNGdXR1cmVPcm1lc3NhZ2VJbXBsZW1lbnRzRnV0dXJlT3J0ZW1wbGF0ZUltcGxlbWVudHNSZXBlYXRlZCcjbmFtZScgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgb25jZS5UcnkgcmVtb3ZpbmcgI2NvdW50IG9mIHRoZSBvY2N1cnJlbmNlcy5jb2RlSW1wbGVtZW50c1JlcGVhdGVkSW1wbGVtZW50c1JlcGVhdGVkSU1QTEVNRU5UU19SRVBFQVRFRHRlbXBsYXRlSW1wbGVtZW50c1N1cGVyQ2xhc3MnI25hbWUnIGNhbid0IGJlIHVzZWQgaW4gYm90aCAnZXh0ZW5kcycgYW5kICdpbXBsZW1lbnRzJyBjbGF1c2VzLlRyeSByZW1vdmluZyBvbmUgb2YgdGhlIG9jY3VycmVuY2VzLmNvZGVJbXBsZW1lbnRzU3VwZXJDbGFzc0ltcGxlbWVudHNTdXBlckNsYXNzSU1QTEVNRU5UU19TVVBFUl9DTEFTU3RlbXBsYXRlSW1wbGljaXRDYWxsT2ZOb25NZXRob2RDYW5ub3QgaW52b2tlIGFuIGluc3RhbmNlIG9mICcjdHlwZScgYmVjYXVzZSBpdCBkZWNsYXJlcyAnY2FsbCcgdG8gYmUgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBtZXRob2QuVHJ5IGNoYW5naW5nICdjYWxsJyB0byBhIG1ldGhvZCBvciBleHBsaWNpdGx5IGludm9rZSAnY2FsbCcuY29kZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kSW1wbGljaXRDYWxsT2ZOb25NZXRob2RJTVBMSUNJVF9DQUxMX09GX05PTl9NRVRIT0R0ZW1wbGF0ZUltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHRPdmVycmlkZSB3YXMgaW50cm9kdWNlZCB3aGVuIHRoZSBtaXhpbiAnI25hbWUnIHdhcyBhcHBsaWVkIHRvICcjbmFtZTInLmNvZGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0SW1wbGljaXRNaXhpbk92ZXJyaWRlQ29udGV4dGNvZGVJbXBvcnRBZnRlclBhcnRJbXBvcnQgZGlyZWN0aXZlcyBtdXN0IHByZWNlZGUgcGFydCBkaXJlY3RpdmVzLlRyeSBtb3ZpbmcgdGhlIGltcG9ydCBkaXJlY3RpdmVzIGJlZm9yZSB0aGUgcGFydCBkaXJlY3RpdmVzLkltcG9ydEFmdGVyUGFydG1lc3NhZ2VJbXBvcnRBZnRlclBhcnR0ZW1wbGF0ZUltcG9ydEhpZGVzSW1wb3J0SW1wb3J0IG9mICcjbmFtZScgKGZyb20gJyN1cmknKSBoaWRlcyBpbXBvcnQgZnJvbSAnI3VyaTInLmNvZGVJbXBvcnRIaWRlc0ltcG9ydEltcG9ydEhpZGVzSW1wb3J0dGVtcGxhdGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHR5cGUgJyN0eXBlJyBpc24ndCBhIHN1YnR5cGUgb2YgJyN0eXBlMicuY29kZUluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlUkVESVJFQ1RfVE9fSU5WQUxJRF9UWVBFdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRUeXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjbmFtZTInLlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLmNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmNvcnJlY3RUeXBlQXJndW1lbnRUWVBFX0FSR1VNRU5UX05PVF9NQVRDSElOR19CT1VORFN0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZVR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyNuYW1lMicgaW4gdGhlIHJldHVybiB0eXBlLmNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGV0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlVHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJyBpbiB0aGUgc3VwZXJ0eXBlICcjbmFtZTMnIG9mIGNsYXNzICcjbmFtZTQnLmNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBldGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJyBpbiB0aGUgc3VwZXJ0eXBlICcjbmFtZTMnIG9mIGNsYXNzICcjbmFtZTQnLlRyeSBzcGVjaWZ5aW5nIHR5cGUgYXJndW1lbnRzIGV4cGxpY2l0bHkgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy5jb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZEluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWR0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJy5jb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWRJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkVHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI3R5cGUzLiNuYW1lMicuY29kZUluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWRJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjdHlwZTMuI25hbWUyJy5jb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWRJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZVRoaXMgaXMgdGhlIHR5cGUgdmFyaWFibGUgd2hvc2UgYm91bmQgaXNuJ3QgY29uZm9ybWVkIHRvLkluY29ycmVjdFR5cGVBcmd1bWVudFZhcmlhYmxlbWVzc2FnZUluY29ycmVjdFR5cGVBcmd1bWVudFZhcmlhYmxldGVtcGxhdGVJbmZlcnJlZFBhY2thZ2VVcmlJbnRlcnByZXRpbmcgdGhpcyBhcyBwYWNrYWdlIFVSSSwgJyN1cmknLmNvZGVJbmZlcnJlZFBhY2thZ2VVcmlJbmZlcnJlZFBhY2thZ2VVcmljb2RlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2FuJ3QgaW5oZXJpdCBtZW1iZXJzIHRoYXQgY29uZmxpY3Qgd2l0aCBlYWNoIG90aGVyLkluaGVyaXRlZE1lbWJlcnNDb25mbGljdENPTkZMSUNUU19XSVRIX0lOSEVSSVRFRF9NRU1CRVJtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Y29kZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMVRoaXMgaXMgb25lIGluaGVyaXRlZCBtZW1iZXIuSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UxbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMWNvZGVJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTJUaGlzIGlzIHRoZSBvdGhlciBpbmhlcml0ZWQgbWVtYmVyLkluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMm1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTJ0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWRUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCB0aGUgZmlsZSB3YXMgbm90IHNlbGYtY29udGFpbmVkLiBUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlICN1cmkgaW4geW91ciBlcnJvciByZXBvcnQsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgZmlsZSBpbmNsdWRlcyB5b3VyIHNvdXJjZSBjb2RlLgpFaXRoZXIgd2F5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRlbGV0ZSB0aGUgZmlsZSBzbyBpdCBkb2Vzbid0IHVzZSB1bm5lY2Vzc2FyeSBkaXNrIHNwYWNlLmNvZGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcFRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgjc3RyaW5nKSwgYnV0IHRoZSBmaWxlIHdhcyBub3Qgc2VsZi1jb250YWluZWQuIFRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuY29kZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXBJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbVRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgjc3RyaW5nKSwgYnV0IGNvdWxkbid0LgpFcnJvciBtZXNzYWdlIHdhcyAnI3N0cmluZzInLgpTdGFja3RyYWNlIGluY2x1ZGVkICcjc3RyaW5nMycuClRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuCklmIHlvdSBhcmUgY29tZm9ydGFibGUgd2l0aCBpdCwgaXQgd291bGQgaW1wcm92ZSB0aGUgY2hhbmNlcyBvZiBmaXhpbmcgYW55IGJ1ZyBpZiB5b3UgaW5jbHVkZWQgdGhlIGZpbGUgI3VyaSBpbiB5b3VyIGVycm9yIHJlcG9ydCwgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBmaWxlIGluY2x1ZGVzIHlvdXIgc291cmNlIGNvZGUuCkVpdGhlciB3YXksIHlvdSBzaG91bGQgcHJvYmFibHkgZGVsZXRlIHRoZSBmaWxlIHNvIGl0IGRvZXNuJ3QgdXNlIHVubmVjZXNzYXJ5IGRpc2sgc3BhY2UuY29kZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW10ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCNzdHJpbmcpLCBidXQgY291bGRuJ3QuCkVycm9yIG1lc3NhZ2Ugd2FzICcjc3RyaW5nMicuClN0YWNrdHJhY2UgaW5jbHVkZWQgJyNzdHJpbmczJy4KVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy5jb2RlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXBJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbU5vRHVtcGNvZGVJbml0aWFsaXplZFZhcmlhYmxlSW5Gb3JFYWNoVGhlIGxvb3AgdmFyaWFibGUgaW4gYSBmb3ItZWFjaCBsb29wIGNhbid0IGJlIGluaXRpYWxpemVkLlRyeSByZW1vdmluZyB0aGUgaW5pdGlhbGl6ZXIsIG9yIHVzaW5nIGEgZGlmZmVyZW50IGtpbmQgb2YgbG9vcC5Jbml0aWFsaXplZFZhcmlhYmxlSW5Gb3JFYWNobWVzc2FnZUluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2h0ZW1wbGF0ZUluaXRpYWxpemVyRm9yU3RhdGljRmllbGQnI25hbWUnIGlzbid0IGFuIGluc3RhbmNlIGZpZWxkIG9mIHRoaXMgY2xhc3MuY29kZUluaXRpYWxpemVyRm9yU3RhdGljRmllbGRJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkSU5JVElBTElaRVJfRk9SX1NUQVRJQ19GSUVMRHRlbXBsYXRlSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3JPbmx5IGNvbnN0cnVjdG9ycyBjYW4gaGF2ZSBpbml0aWFsaXplcnMsIGFuZCAnI25hbWUnIGlzIG5vdCBhIGNvbnN0cnVjdG9yLmNvZGVJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvckluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9ySU5JVElBTElaRVJfT1VUU0lERV9DT05TVFJVQ1RPUnRlbXBsYXRlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoVGhlIHR5cGUgb2YgcGFyYW1ldGVyICcjbmFtZScsICcjdHlwZScgaXMgbm90IGEgc3VidHlwZSBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCdzIHR5cGUsICcjdHlwZTInLlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiBwYXJhbWV0ZXIgJyNuYW1lJyB0byBhIHN1YnR5cGUgb2YgJyN0eXBlMicuY29kZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaEluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaElOVkFMSURfUEFSQU1FVEVSX0RFQ0xBUkFUSU9OY29kZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaEZpZWxkVGhlIGZpZWxkIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBhcmFtZXRlci5Jbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hGaWVsZG1lc3NhZ2VJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hGaWVsZGNvZGVJbnB1dEZpbGVOb3RGb3VuZElucHV0RmlsZU5vdEZvdW5kdGVtcGxhdGVJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZVRoZSBpbnRlZ2VyIGxpdGVyYWwgI3N0cmluZyBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiA2NCBiaXRzLlRyeSB1c2luZyB0aGUgQmlnSW50IGNsYXNzIGlmIHlvdSBuZWVkIGFuIGludGVnZXIgbGFyZ2VyIHRoYW4gOSwyMjMsMzcyLDAzNiw4NTQsNzc1LDgwNyBvciBsZXNzIHRoYW4gLTksMjIzLDM3MiwwMzYsODU0LDc3NSw4MDguY29kZUludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2VJTlRFR0VSX0xJVEVSQUxfT1VUX09GX1JBTkdFdGVtcGxhdGVJbnRlcmZhY2VDaGVja0NvbnRleHRCb3RoIG1lbWJlcnMgYXJlIGluaGVyaXRlZCBieSB0aGUgbm9uLWFic3RyYWN0IGNsYXNzICcjbmFtZScuY29kZUludGVyZmFjZUNoZWNrQ29udGV4dEludGVyZmFjZUNoZWNrQ29udGV4dGNvZGVJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWRBdHRlbXB0IHRvIHNldCBpbml0aWFsaXplciBvbiBmaWVsZCB3aXRob3V0IGluaXRpYWxpemVyLkludGVybmFsUHJvYmxlbUFscmVhZHlJbml0aWFsaXplZG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWRjb2RlSW50ZXJuYWxQcm9ibGVtQm9keU9uQWJzdHJhY3RNZXRob2RBdHRlbXB0aW5nIHRvIHNldCBib2R5IG9uIGFic3RyYWN0IG1ldGhvZC5JbnRlcm5hbFByb2JsZW1Cb2R5T25BYnN0cmFjdE1ldGhvZG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1Cb2R5T25BYnN0cmFjdE1ldGhvZHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZE5vIGNvbnN0cnVjdG9yIG5hbWVkICcjbmFtZScgaW4gJyN1cmknLmNvZGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29udGV4dFNldmVyaXR5Tm9uLWNvbnRleHQgbWVzc2FnZSBoYXMgY29udGV4dCBzZXZlcml0eTogI3N0cmluZ2NvZGVJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHlJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHl0ZW1wbGF0ZUludGVybmFsUHJvYmxlbURlYnVnQWJvcnRDb21waWxhdGlvbiBhYm9ydGVkIGR1ZSB0byBmYXRhbCAnI25hbWUnIGF0Ogojc3RyaW5nY29kZUludGVybmFsUHJvYmxlbURlYnVnQWJvcnRJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0Y29kZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlQ2FuJ3QgZXh0ZW5kIGFuIHVubW9kaWZpYWJsZSBzY29wZS5JbnRlcm5hbFByb2JsZW1FeHRlbmRpbmdVbm1vZGlmaWFibGVTY29wZW1lc3NhZ2VJbnRlcm5hbFByb2JsZW1FeHRlbmRpbmdVbm1vZGlmaWFibGVTY29wZWNvZGVJbnRlcm5hbFByb2JsZW1MYWJlbFVzYWdlSW5WYXJpYWJsZXNEZWNsYXJhdGlvblVuZXhwZWN0ZWQgdXNhZ2Ugb2YgbGFiZWwgaW5zaWRlIGRlY2xhcmF0aW9uIG9mIHZhcmlhYmxlcy5JbnRlcm5hbFByb2JsZW1MYWJlbFVzYWdlSW5WYXJpYWJsZXNEZWNsYXJhdGlvbm1lc3NhZ2VJbnRlcm5hbFByb2JsZW1MYWJlbFVzYWdlSW5WYXJpYWJsZXNEZWNsYXJhdGlvbmNvZGVJbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWRUaGVyZSdzIG5vIGluZmVycmVkIHR5cGUgZm9yICcjbmFtZScuY29kZUludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWR0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kQ291bGRuJ3QgZmluZCAnI25hbWUnLmNvZGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEludGVybmFsUHJvYmxlbU5vdEZvdW5kdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluQ291bGRuJ3QgZmluZCAnI25hbWUnIGluICcjbmFtZTInLmNvZGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbmNvZGVJbnRlcm5hbFByb2JsZW1QcmV2aW91c1Rva2VuTm90Rm91bmRDb3VsZG4ndCBmaW5kIHByZXZpb3VzIHRva2VuLkludGVybmFsUHJvYmxlbVByZXZpb3VzVG9rZW5Ob3RGb3VuZG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1QcmV2aW91c1Rva2VuTm90Rm91bmR0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2Vzc0Nhbid0IGFjY2VzcyBwcml2YXRlIGNvbnN0cnVjdG9yICcjbmFtZScuY29kZUludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2Vzc0ludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2Vzc2NvZGVJbnRlcm5hbFByb2JsZW1Qcm92aWRlZEJvdGhDb21waWxlU2RrQW5kU2RrU3VtbWFyeXRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eSNuYW1lLnN0YWNrIGlzbid0IGVtcHR5OgogICNzdHJpbmdjb2RlSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHl0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXNUaGVyZSdzIGFscmVhZHkgYW4gaW5mZXJyZWQgdHlwZSwgJyN0eXBlJywgZm9yICcjbmFtZScuY29kZUludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXNJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkRXhwZWN0ZWQgJyNzdHJpbmcnLCBidXQgZ290ICcjc3RyaW5nMicuY29kZUludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWRJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWRVbmhhbmRsZWQgI3N0cmluZyBpbiAjc3RyaW5nMi5jb2RlSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkVW5pbXBsZW1lbnRlZCAjc3RyaW5nLmNvZGVJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZGNvZGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZEludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lVGhlIFVSSSAnI3VyaScgaGFzIG5vIHNjaGVtZS5jb2RlSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWV0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yVmVyaWZpY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgcHJvZ3JhbSBmYWlsZWQ6CiNzdHJpbmdjb2RlSW50ZXJuYWxQcm9ibGVtVmVyaWZpY2F0aW9uRXJyb3JJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvcmNvZGVJbnRlcnBvbGF0aW9uSW5VcmlDYW4ndCB1c2Ugc3RyaW5nIGludGVycG9sYXRpb24gaW4gYSBVUkkuSW50ZXJwb2xhdGlvbkluVXJpSU5WQUxJRF9MSVRFUkFMX0lOX0NPTkZJR1VSQVRJT05tZXNzYWdlSW50ZXJwb2xhdGlvbkluVXJpdGVtcGxhdGVJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnRDYW4ndCBpbmZlciBhIHR5cGUgZm9yICcjbmFtZScsIGl0IGNhbiBiZSBlaXRoZXIgJyN0eXBlJyBvciAnI3R5cGUyJy5UcnkgYWRkaW5nIGEgdHlwZSBhcmd1bWVudCBzZWxlY3Rpbmcgb25lIG9mIHRoZSBvcHRpb25zLmNvZGVJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnRJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnR0ZW1wbGF0ZUludmFsaWRBc3NpZ25tZW50VHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSBsZWZ0IGhhbmQgc2lkZSwgb3IgY2FzdGluZyB0aGUgcmlnaHQgaGFuZCBzaWRlIHRvICcjdHlwZTInLmNvZGVJbnZhbGlkQXNzaWdubWVudEludmFsaWRBc3NpZ25tZW50SU5WQUxJRF9BU1NJR05NRU5UY29kZUludmFsaWRBd2FpdEZvclRoZSBrZXl3b3JkICdhd2FpdCcgaXNuJ3QgYWxsb3dlZCBmb3IgYSBub3JtYWwgJ2Zvcicgc3RhdGVtZW50LlRyeSByZW1vdmluZyB0aGUga2V5d29yZCwgb3IgdXNlIGEgZm9yLWVhY2ggc3RhdGVtZW50LkludmFsaWRBd2FpdEZvcm1lc3NhZ2VJbnZhbGlkQXdhaXRGb3J0ZW1wbGF0ZUludmFsaWRCcmVha1RhcmdldENhbid0IGJyZWFrIHRvICcjbmFtZScuY29kZUludmFsaWRCcmVha1RhcmdldEludmFsaWRCcmVha1RhcmdldHRlbXBsYXRlSW52YWxpZENhc3RGdW5jdGlvbkV4cHJUaGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB0eXBlICcjdHlwZScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy5DaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC5jb2RlSW52YWxpZENhc3RGdW5jdGlvbkV4cHJJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwcklOVkFMSURfQ0FTVF9GVU5DVElPTl9FWFBSdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0VGhlIGxpc3QgbGl0ZXJhbCB0eXBlICcjdHlwZScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy5DaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGxpc3QgbGl0ZXJhbCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLmNvZGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0SW52YWxpZENhc3RMaXRlcmFsTGlzdElOVkFMSURfQ0FTVF9MSVRFUkFMX0xJU1R0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbE1hcFRoZSBtYXAgbGl0ZXJhbCB0eXBlICcjdHlwZScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy5DaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIG1hcCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuY29kZUludmFsaWRDYXN0TGl0ZXJhbE1hcEludmFsaWRDYXN0TGl0ZXJhbE1hcElOVkFMSURfQ0FTVF9MSVRFUkFMX01BUHRlbXBsYXRlSW52YWxpZENhc3RMaXRlcmFsU2V0VGhlIHNldCBsaXRlcmFsIHR5cGUgJyN0eXBlJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgc2V0IGxpdGVyYWwgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC5jb2RlSW52YWxpZENhc3RMaXRlcmFsU2V0SW52YWxpZENhc3RMaXRlcmFsU2V0SU5WQUxJRF9DQVNUX0xJVEVSQUxfU0VUdGVtcGxhdGVJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb25UaGUgbG9jYWwgZnVuY3Rpb24gaGFzIHR5cGUgJyN0eXBlJyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLmNvZGVJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb25JbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb25JTlZBTElEX0NBU1RfRlVOQ1RJT050ZW1wbGF0ZUludmFsaWRDYXN0TmV3RXhwclRoZSBjb25zdHJ1Y3RvciByZXR1cm5zIHR5cGUgJyN0eXBlJyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgY29uc3RydWN0ZWQgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC5jb2RlSW52YWxpZENhc3ROZXdFeHBySW52YWxpZENhc3ROZXdFeHBySU5WQUxJRF9DQVNUX05FV19FWFBSdGVtcGxhdGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZFRoZSBzdGF0aWMgbWV0aG9kIGhhcyB0eXBlICcjdHlwZScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbWV0aG9kIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuY29kZUludmFsaWRDYXN0U3RhdGljTWV0aG9kSW52YWxpZENhc3RTdGF0aWNNZXRob2RJTlZBTElEX0NBU1RfTUVUSE9EdGVtcGxhdGVJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb25UaGUgdG9wIGxldmVsIGZ1bmN0aW9uIGhhcyB0eXBlICcjdHlwZScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLmNvZGVJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb25JbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb25jb2RlSW52YWxpZENhdGNoQXJndW1lbnRzSW52YWxpZCBjYXRjaCBhcmd1bWVudHMuSW52YWxpZENhdGNoQXJndW1lbnRzSU5WQUxJRF9DQVRDSF9BUkdVTUVOVFNtZXNzYWdlSW52YWxpZENhdGNoQXJndW1lbnRzY29kZUludmFsaWRDb2RlUG9pbnRUaGUgZXNjYXBlIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggJ1x1JyBpc24ndCBhIHZhbGlkIGNvZGUgcG9pbnQuSW52YWxpZENvZGVQb2ludElOVkFMSURfQ09ERV9QT0lOVG1lc3NhZ2VJbnZhbGlkQ29kZVBvaW50dGVtcGxhdGVJbnZhbGlkQ29udGludWVUYXJnZXRDYW4ndCBjb250aW51ZSBhdCAnI25hbWUnLmNvZGVJbnZhbGlkQ29udGludWVUYXJnZXRJbnZhbGlkQ29udGludWVUYXJnZXRjb2RlSW52YWxpZEhleEVzY2FwZUFuIGVzY2FwZSBzZXF1ZW5jZSBzdGFydGluZyB3aXRoICdceCcgbXVzdCBiZSBmb2xsb3dlZCBieSAyIGhleGFkZWNpbWFsIGRpZ2l0cy5JbnZhbGlkSGV4RXNjYXBlbWVzc2FnZUludmFsaWRIZXhFc2NhcGVjb2RlSW52YWxpZEluaXRpYWxpemVyTm90IGEgdmFsaWQgaW5pdGlhbGl6ZXIuVG8gaW5pdGlhbGl6ZSBhIGZpZWxkLCB1c2UgdGhlIHN5bnRheCAnbmFtZSA9IHZhbHVlJy5tZXNzYWdlSW52YWxpZEluaXRpYWxpemVyY29kZUludmFsaWRJbmxpbmVGdW5jdGlvblR5cGVJbmxpbmUgZnVuY3Rpb24gdHlwZXMgY2Fubm90IGJlIHVzZWQgZm9yIHBhcmFtZXRlcnMgaW4gYSBnZW5lcmljIGZ1bmN0aW9uIHR5cGUuVHJ5IGNoYW5naW5nIHRoZSBpbmxpbmUgZnVuY3Rpb24gdHlwZSAoYXMgaW4gJ2ludCBmKCknKSB0byBhIHByZWZpeGVkIGZ1bmN0aW9uIHR5cGUgdXNpbmcgdGhlIGBGdW5jdGlvbmAga2V5d29yZCAoYXMgaW4gJ2ludCBGdW5jdGlvbigpIGYnKS5JbnZhbGlkSW5saW5lRnVuY3Rpb25UeXBlSU5WQUxJRF9JTkxJTkVfRlVOQ1RJT05fVFlQRW1lc3NhZ2VJbnZhbGlkSW5saW5lRnVuY3Rpb25UeXBldGVtcGxhdGVJbnZhbGlkT3BlcmF0b3JUaGUgc3RyaW5nICcjbGV4ZW1lJyBpc24ndCBhIHVzZXItZGVmaW5hYmxlIG9wZXJhdG9yLmNvZGVJbnZhbGlkT3BlcmF0b3JJbnZhbGlkT3BlcmF0b3J0ZW1wbGF0ZUludmFsaWRQYWNrYWdlVXJpSW52YWxpZCBwYWNrYWdlIFVSSSAnI3VyaSc6CiAgI3N0cmluZy5jb2RlSW52YWxpZFBhY2thZ2VVcmlJbnZhbGlkUGFja2FnZVVyaWNvZGVJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVyQ2FuIG9ubHkgdXNlICdzdXBlcicgaW4gYW4gaW5pdGlhbGl6ZXIgZm9yIGNhbGxpbmcgdGhlIHN1cGVyY2xhc3MgY29uc3RydWN0b3IgKGUuZy4gJ3N1cGVyKCknIG9yICdzdXBlci5uYW1lZENvbnN0cnVjdG9yKCknKUludmFsaWRTdXBlckluSW5pdGlhbGl6ZXJtZXNzYWdlSW52YWxpZFN1cGVySW5Jbml0aWFsaXplcmNvZGVJbnZhbGlkU3luY01vZGlmaWVySW52YWxpZCBtb2RpZmllciAnc3luYycuVHJ5IHJlcGxhY2luZyAnc3luYycgd2l0aCAnc3luYyonLkludmFsaWRTeW5jTW9kaWZpZXJNSVNTSU5HX1NUQVJfQUZURVJfU1lOQ21lc3NhZ2VJbnZhbGlkU3luY01vZGlmaWVyY29kZUludmFsaWRUaGlzSW5Jbml0aWFsaXplckNhbiBvbmx5IHVzZSAndGhpcycgaW4gYW4gaW5pdGlhbGl6ZXIgZm9yIGZpZWxkIGluaXRpYWxpemF0aW9uIChlLmcuICd0aGlzLnggPSBzb21ldGhpbmcnKSBhbmQgY29uc3RydWN0b3IgcmVkaXJlY3Rpb24gKGUuZy4gJ3RoaXMoKScgb3IgJ3RoaXMubmFtZWRDb25zdHJ1Y3RvcigpKUludmFsaWRUaGlzSW5Jbml0aWFsaXplcm1lc3NhZ2VJbnZhbGlkVGhpc0luSW5pdGlhbGl6ZXJjb2RlSW52YWxpZFVuaWNvZGVFc2NhcGVBbiBlc2NhcGUgc2VxdWVuY2Ugc3RhcnRpbmcgd2l0aCAnXHUnIG11c3QgYmUgZm9sbG93ZWQgYnkgNCBoZXhhZGVjaW1hbCBkaWdpdHMgb3IgZnJvbSAxIHRvIDYgZGlnaXRzIGJldHdlZW4gJ3snIGFuZCAnfScuSW52YWxpZFVuaWNvZGVFc2NhcGVtZXNzYWdlSW52YWxpZFVuaWNvZGVFc2NhcGVjb2RlSW52YWxpZFVzZU9mTnVsbEF3YXJlQWNjZXNzQ2Fubm90IHVzZSAnPy4nIGhlcmUuVHJ5IHVzaW5nICcuJy5JbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3NJTlZBTElEX1VTRV9PRl9OVUxMX0FXQVJFX0FDQ0VTU21lc3NhZ2VJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3Njb2RlSW52YWxpZFZvaWRUeXBlICd2b2lkJyBjYW4ndCBiZSB1c2VkIGhlcmUgYmVjYXVzZSBpdCBpc24ndCBhIHJldHVybiB0eXBlLlRyeSByZW1vdmluZyAndm9pZCcga2V5d29yZCBvciByZXBsYWNlIGl0IHdpdGggJ3ZhcicsICdmaW5hbCcsIG9yIGEgdHlwZS5JbnZhbGlkVm9pZG1lc3NhZ2VJbnZhbGlkVm9pZHRlbXBsYXRlSW52b2tlTm9uRnVuY3Rpb24nI25hbWUnIGlzbid0IGEgZnVuY3Rpb24gb3IgbWV0aG9kIGFuZCBjYW4ndCBiZSBpbnZva2VkLmNvZGVJbnZva2VOb25GdW5jdGlvbkludm9rZU5vbkZ1bmN0aW9uSU5WT0NBVElPTl9PRl9OT05fRlVOQ1RJT050ZW1wbGF0ZUxhYmVsTm90Rm91bmRDYW4ndCBmaW5kIGxhYmVsICcjbmFtZScuVHJ5IGRlZmluaW5nIHRoZSBsYWJlbCwgb3IgY29ycmVjdGluZyB0aGUgbmFtZSB0byBtYXRjaCBhbiBleGlzdGluZyBsYWJlbC5jb2RlTGFiZWxOb3RGb3VuZExhYmVsTm90Rm91bmRjb2RlTGFuZ3VhZ2VWZXJzaW9uSW52YWxpZEluRG90UGFja2FnZXNUaGUgbGFuZ3VhZ2UgdmVyc2lvbiBpcyBub3Qgc3BlY2lmaWVkIGNvcnJlY3RseSBpbiB0aGUgLnBhY2thZ2VzIGZpbGUuTGFuZ3VhZ2VWZXJzaW9uSW52YWxpZEluRG90UGFja2FnZXNtZXNzYWdlTGFuZ3VhZ2VWZXJzaW9uSW52YWxpZEluRG90UGFja2FnZXNjb2RlTGFuZ3VhZ2VWZXJzaW9uTWlzbWF0Y2hJblBhcnRUaGUgbGFuZ3VhZ2UgdmVyc2lvbiBvdmVycmlkZSBoYXMgdG8gYmUgdGhlIHNhbWUgaW4gdGhlIGxpYnJhcnkgYW5kIGl0cyBwYXJ0KHMpLkxhbmd1YWdlVmVyc2lvbk1pc21hdGNoSW5QYXJ0bWVzc2FnZUxhbmd1YWdlVmVyc2lvbk1pc21hdGNoSW5QYXJ0dGVtcGxhdGVMYW5ndWFnZVZlcnNpb25Ub29IaWdoVGhlIHNwZWNpZmllZCBsYW5ndWFnZSB2ZXJzaW9uIGlzIHRvbyBoaWdoLiBUaGUgaGlnaGVzdCBzdXBwb3J0ZWQgbGFuZ3VhZ2UgdmVyc2lvbiBpcyAjY291bnQuI2NvdW50Mi5jb2RlTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaExhbmd1YWdlVmVyc2lvblRvb0hpZ2hjb2RlTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0VGhlIGxpYnJhcnkgZGlyZWN0aXZlIG11c3QgYXBwZWFyIGJlZm9yZSBhbGwgb3RoZXIgZGlyZWN0aXZlcy5UcnkgbW92aW5nIHRoZSBsaWJyYXJ5IGRpcmVjdGl2ZSBiZWZvcmUgYW55IG90aGVyIGRpcmVjdGl2ZXMuTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0bWVzc2FnZUxpYnJhcnlEaXJlY3RpdmVOb3RGaXJzdGNvZGVMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzTGlzdCBsaXRlcmFsIHJlcXVpcmVzIGV4YWN0bHkgb25lIHR5cGUgYXJndW1lbnQuTGlzdExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50c0VYUEVDVEVEX09ORV9MSVNUX1RZUEVfQVJHVU1FTlRTbWVzc2FnZUxpc3RMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHN0ZW1wbGF0ZUxvYWRMaWJyYXJ5SGlkZXNNZW1iZXJUaGUgbGlicmFyeSAnI3VyaScgZGVmaW5lcyBhIHRvcC1sZXZlbCBtZW1iZXIgbmFtZWQgJ2xvYWRMaWJyYXJ5Jy4gVGhpcyBtZW1iZXIgaXMgaGlkZGVuIGJ5IHRoZSBzcGVjaWFsIG1lbWJlciAnbG9hZExpYnJhcnknIHRoYXQgdGhlIGxhbmd1YWdlIGFkZHMgdG8gc3VwcG9ydCBkZWZlcnJlZCBsb2FkaW5nLlRyeSB0byByZW5hbWUgb3IgaGlkZSB0aGUgbWVtYmVyLmNvZGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyTG9hZExpYnJhcnlIaWRlc01lbWJlcmNvZGVMb2FkTGlicmFyeVRha2VzTm9Bcmd1bWVudHMnbG9hZExpYnJhcnknIHRha2VzIG5vIGFyZ3VtZW50cy5Mb2FkTGlicmFyeVRha2VzTm9Bcmd1bWVudHNMT0FEX0xJQlJBUllfVEFLRVNfTk9fQVJHVU1FTlRTbWVzc2FnZUxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50c3RlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnRMb2NhbCBkZWZpbml0aW9uIG9mICcjbmFtZScgaGlkZXMgZXhwb3J0IGZyb20gJyN1cmknLmNvZGVMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydExvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0dGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydExvY2FsIGRlZmluaXRpb24gb2YgJyNuYW1lJyBoaWRlcyBpbXBvcnQgZnJvbSAnI3VyaScuY29kZUxvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0TG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnRjb2RlTWFwTGl0ZXJhbFR5cGVBcmd1bWVudE1pc21hdGNoQSBtYXAgbGl0ZXJhbCByZXF1aXJlcyBleGFjdGx5IHR3byB0eXBlIGFyZ3VtZW50cy5NYXBMaXRlcmFsVHlwZUFyZ3VtZW50TWlzbWF0Y2hFWFBFQ1RFRF9UV09fTUFQX1RZUEVfQVJHVU1FTlRTbWVzc2FnZU1hcExpdGVyYWxUeXBlQXJndW1lbnRNaXNtYXRjaGNvZGVNZW1iZXJXaXRoU2FtZU5hbWVBc0NsYXNzQSBjbGFzcyBtZW1iZXIgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBlbmNsb3NpbmcgY2xhc3MuTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzc21lc3NhZ2VNZW1iZXJXaXRoU2FtZU5hbWVBc0NsYXNzY29kZU1ldGFkYXRhVHlwZUFyZ3VtZW50c0FuIGFubm90YXRpb24gKG1ldGFkYXRhKSBjYW4ndCB1c2UgdHlwZSBhcmd1bWVudHMuTWV0YWRhdGFUeXBlQXJndW1lbnRzQU5OT1RBVElPTl9XSVRIX1RZUEVfQVJHVU1FTlRTbWVzc2FnZU1ldGFkYXRhVHlwZUFyZ3VtZW50c3RlbXBsYXRlTWV0aG9kTm90Rm91bmRNZXRob2Qgbm90IGZvdW5kOiAnI25hbWUnLmNvZGVNZXRob2ROb3RGb3VuZE1ldGhvZE5vdEZvdW5kVU5ERUZJTkVEX01FVEhPRGNvZGVNaXNzaW5nQXJndW1lbnRMaXN0Q29uc3RydWN0b3IgaW52b2NhdGlvbnMgbXVzdCBoYXZlIGFuIGFyZ3VtZW50IGxpc3QuTWlzc2luZ0FyZ3VtZW50TGlzdG1lc3NhZ2VNaXNzaW5nQXJndW1lbnRMaXN0Y29kZU1pc3NpbmdBc3NpZ25hYmxlU2VsZWN0b3JNaXNzaW5nIHNlbGVjdG9yIHN1Y2ggYXMgJy48aWRlbnRpZmllcj4nIG9yICdbMF0nLlRyeSBhZGRpbmcgYSBzZWxlY3Rvci5NaXNzaW5nQXNzaWduYWJsZVNlbGVjdG9ybWVzc2FnZU1pc3NpbmdBc3NpZ25hYmxlU2VsZWN0b3Jjb2RlTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVyRXhwZWN0ZWQgYW4gYXNzaWdubWVudCBhZnRlciB0aGUgZmllbGQgbmFtZS5NaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXJtZXNzYWdlTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVyY29kZU1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBlVmFyaWFibGVzIG11c3QgYmUgZGVjbGFyZWQgdXNpbmcgdGhlIGtleXdvcmRzICdjb25zdCcsICdmaW5hbCcsICd2YXInIG9yIGEgdHlwZSBuYW1lLlRyeSBhZGRpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlIG9yIHRoZSBrZXl3b3JkICd2YXInLk1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBlbWVzc2FnZU1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBldGVtcGxhdGVNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzTm8gdHlwZSBhcmd1bWVudHMgcHJvdmlkZWQsICNjb3VudCBwb3NzaWJsZS5jb2RlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50c01pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHNjb2RlTWlzc2luZ0V4cG9uZW50TnVtYmVycyBpbiBleHBvbmVudGlhbCBub3RhdGlvbiBzaG91bGQgYWx3YXlzIGNvbnRhaW4gYW4gZXhwb25lbnQgKGFuIGludGVnZXIgbnVtYmVyIHdpdGggYW4gb3B0aW9uYWwgc2lnbikuTWFrZSBzdXJlIHRoZXJlIGlzIGFuIGV4cG9uZW50LCBhbmQgcmVtb3ZlIGFueSB3aGl0ZXNwYWNlIGJlZm9yZSBpdC5NaXNzaW5nRXhwb25lbnRNSVNTSU5HX0RJR0lUbWVzc2FnZU1pc3NpbmdFeHBvbmVudGNvZGVNaXNzaW5nRXhwcmVzc2lvbkluVGhyb3dNaXNzaW5nIGV4cHJlc3Npb24gYWZ0ZXIgJ3Rocm93Jy5BZGQgYW4gZXhwcmVzc2lvbiBhZnRlciAndGhyb3cnIG9yIHVzZSAncmV0aHJvdycgdG8gdGhyb3cgYSBjYXVnaHQgZXhjZXB0aW9uTWlzc2luZ0V4cHJlc3Npb25JblRocm93bWVzc2FnZU1pc3NpbmdFeHByZXNzaW9uSW5UaHJvd2NvZGVNaXNzaW5nRnVuY3Rpb25QYXJhbWV0ZXJzQSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBuZWVkcyBhbiBleHBsaWNpdCBsaXN0IG9mIHBhcmFtZXRlcnMuVHJ5IGFkZGluZyBhIHBhcmFtZXRlciBsaXN0IHRvIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi5NaXNzaW5nRnVuY3Rpb25QYXJhbWV0ZXJzTUlTU0lOR19GVU5DVElPTl9QQVJBTUVURVJTbWVzc2FnZU1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnN0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlJyNuYW1lJyBpcyBkZWZpbmVkIGhlcmUuY29kZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2V0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbk5vdEFic3RyYWN0VGhlIG5vbi1hYnN0cmFjdCBjbGFzcyAnI25hbWUnIGlzIG1pc3NpbmcgaW1wbGVtZW50YXRpb25zIGZvciB0aGVzZSBtZW1iZXJzOgojbmFtZXNUcnkgdG8gZWl0aGVyCiAtIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24sCiAtIGluaGVyaXQgYW4gaW1wbGVtZW50YXRpb24gZnJvbSBhIHN1cGVyY2xhc3Mgb3IgbWl4aW4sCiAtIG1hcmsgdGhlIGNsYXNzIGFzIGFic3RyYWN0LCBvcgogLSBwcm92aWRlIGEgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24uCmNvZGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdE1pc3NpbmdJbXBsZW1lbnRhdGlvbk5vdEFic3RyYWN0Q09OQ1JFVEVfQ0xBU1NfV0lUSF9BQlNUUkFDVF9NRU1CRVJjb2RlTWlzc2luZ0lucHV0Y29kZU1pc3NpbmdNYWluY29kZU1pc3NpbmdNZXRob2RQYXJhbWV0ZXJzQSBtZXRob2QgZGVjbGFyYXRpb24gbmVlZHMgYW4gZXhwbGljaXQgbGlzdCBvZiBwYXJhbWV0ZXJzLlRyeSBhZGRpbmcgYSBwYXJhbWV0ZXIgbGlzdCB0byB0aGUgbWV0aG9kIGRlY2xhcmF0aW9uLk1pc3NpbmdNZXRob2RQYXJhbWV0ZXJzTUlTU0lOR19NRVRIT0RfUEFSQU1FVEVSU21lc3NhZ2VNaXNzaW5nTWV0aG9kUGFyYW1ldGVyc2NvZGVNaXNzaW5nT3BlcmF0b3JLZXl3b3JkT3BlcmF0b3IgZGVjbGFyYXRpb25zIG11c3QgYmUgcHJlY2VkZWQgYnkgdGhlIGtleXdvcmQgJ29wZXJhdG9yJy5UcnkgYWRkaW5nIHRoZSBrZXl3b3JkICdvcGVyYXRvcicuTWlzc2luZ09wZXJhdG9yS2V5d29yZG1lc3NhZ2VNaXNzaW5nT3BlcmF0b3JLZXl3b3JkdGVtcGxhdGVNaXNzaW5nUGFydE9mQ2FuJ3QgdXNlICcjdXJpJyBhcyBhIHBhcnQsIGJlY2F1c2UgaXQgaGFzIG5vICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi5jb2RlTWlzc2luZ1BhcnRPZk1pc3NpbmdQYXJ0T2ZQQVJUX09GX05PTl9QQVJUY29kZU1pc3NpbmdQcmVmaXhJbkRlZmVycmVkSW1wb3J0RGVmZXJyZWQgaW1wb3J0cyBzaG91bGQgaGF2ZSBhIHByZWZpeC5UcnkgYWRkaW5nIGEgcHJlZml4IHRvIHRoZSBpbXBvcnQuTWlzc2luZ1ByZWZpeEluRGVmZXJyZWRJbXBvcnRtZXNzYWdlTWlzc2luZ1ByZWZpeEluRGVmZXJyZWRJbXBvcnRjb2RlTWlzc2luZ1R5cGVkZWZQYXJhbWV0ZXJzQSB0eXBlZGVmIG5lZWRzIGFuIGV4cGxpY2l0IGxpc3Qgb2YgcGFyYW1ldGVycy5UcnkgYWRkaW5nIGEgcGFyYW1ldGVyIGxpc3QgdG8gdGhlIHR5cGVkZWYuTWlzc2luZ1R5cGVkZWZQYXJhbWV0ZXJzTUlTU0lOR19UWVBFREVGX1BBUkFNRVRFUlNtZXNzYWdlTWlzc2luZ1R5cGVkZWZQYXJhbWV0ZXJzdGVtcGxhdGVNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlJyN0eXBlJyBkb2Vzbid0IGltcGxlbWVudCAnI3R5cGUyJyBzbyBpdCBjYW4ndCBiZSB1c2VkIHdpdGggJyN0eXBlMycuY29kZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGVNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlTUlYSU5fQVBQTElDQVRJT05fTk9UX0lNUExFTUVOVEVEX0lOVEVSRkFDRXRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3NUeXBlIHBhcmFtZXRlcnMgY291bGQgbm90IGJlIGluZmVycmVkIGZvciB0aGUgbWl4aW4gJyNuYW1lJyBiZWNhdXNlICcjbmFtZTInIGRvZXMgbm90IGltcGxlbWVudCB0aGUgbWl4aW4ncyBzdXBlcnR5cGUgY29uc3RyYWludCAnI3R5cGUnLmNvZGVNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzc01peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzTUlYSU5fSU5GRVJFTkNFX05PX1BPU1NJQkxFX1NVQlNUSVRVVElPTnRlbXBsYXRlTW9kaWZpZXJPdXRPZk9yZGVyVGhlIG1vZGlmaWVyICcjc3RyaW5nJyBzaG91bGQgYmUgYmVmb3JlIHRoZSBtb2RpZmllciAnI3N0cmluZzInLlRyeSByZS1vcmRlcmluZyB0aGUgbW9kaWZpZXJzLmNvZGVNb2RpZmllck91dE9mT3JkZXJNb2RpZmllck91dE9mT3JkZXJjb2RlTW9yZVRoYW5PbmVTdXBlck9yVGhpc0luaXRpYWxpemVyQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lICdzdXBlcicgb3IgJ3RoaXMnIGluaXRpYWxpemVyLk1vcmVUaGFuT25lU3VwZXJPclRoaXNJbml0aWFsaXplclNVUEVSX0lOX1JFRElSRUNUSU5HX0NPTlNUUlVDVE9SbWVzc2FnZU1vcmVUaGFuT25lU3VwZXJPclRoaXNJbml0aWFsaXplcmNvZGVNdWx0aXBsZUV4dGVuZHNFYWNoIGNsYXNzIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgZXh0ZW5kcyBjbGF1c2UuVHJ5IGNob29zaW5nIG9uZSBzdXBlcmNsYXNzIGFuZCBkZWZpbmUgeW91ciBjbGFzcyB0byBpbXBsZW1lbnQgKG9yIG1peCBpbikgdGhlIG90aGVycy5NdWx0aXBsZUV4dGVuZHNtZXNzYWdlTXVsdGlwbGVFeHRlbmRzY29kZU11bHRpcGxlSW1wbGVtZW50c0VhY2ggY2xhc3MgZGVmaW5pdGlvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBpbXBsZW1lbnRzIGNsYXVzZS5UcnkgY29tYmluaW5nIGFsbCBvZiB0aGUgaW1wbGVtZW50cyBjbGF1c2VzIGludG8gYSBzaW5nbGUgY2xhdXNlLk11bHRpcGxlSW1wbGVtZW50c01VTFRJUExFX0lNUExFTUVOVFNfQ0xBVVNFU21lc3NhZ2VNdWx0aXBsZUltcGxlbWVudHNjb2RlTXVsdGlwbGVMaWJyYXJ5RGlyZWN0aXZlc09ubHkgb25lIGxpYnJhcnkgZGlyZWN0aXZlIG1heSBiZSBkZWNsYXJlZCBpbiBhIGZpbGUuVHJ5IHJlbW92aW5nIGFsbCBidXQgb25lIG9mIHRoZSBsaWJyYXJ5IGRpcmVjdGl2ZXMuTXVsdGlwbGVMaWJyYXJ5RGlyZWN0aXZlc21lc3NhZ2VNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzY29kZU11bHRpcGxlT25DbGF1c2VzRWFjaCBtaXhpbiBkZWZpbml0aW9uIGNhbiBoYXZlIGF0IG1vc3Qgb25lIG9uIGNsYXVzZS5UcnkgY29tYmluaW5nIGFsbCBvZiB0aGUgb24gY2xhdXNlcyBpbnRvIGEgc2luZ2xlIGNsYXVzZS5NdWx0aXBsZU9uQ2xhdXNlc21lc3NhZ2VNdWx0aXBsZU9uQ2xhdXNlc2NvZGVNdWx0aXBsZVdpdGhFYWNoIGNsYXNzIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgd2l0aCBjbGF1c2UuVHJ5IGNvbWJpbmluZyBhbGwgb2YgdGhlIHdpdGggY2xhdXNlcyBpbnRvIGEgc2luZ2xlIGNsYXVzZS5NdWx0aXBsZVdpdGhtZXNzYWdlTXVsdGlwbGVXaXRoY29kZU5hbWVkRnVuY3Rpb25FeHByZXNzaW9uQSBmdW5jdGlvbiBleHByZXNzaW9uIGNhbid0IGhhdmUgYSBuYW1lLk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uTkFNRURfRlVOQ1RJT05fRVhQUkVTU0lPTm1lc3NhZ2VOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbnRlbXBsYXRlTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dE92ZXJyaWRlIHdhcyBpbnRyb2R1Y2VkIGluIHRoZSBtaXhpbiBhcHBsaWNhdGlvbiBjbGFzcyAnI25hbWUnLmNvZGVOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0TmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dGNvZGVOYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb25OYXRpdmUgY2xhdXNlIGluIHRoaXMgZm9ybSBpcyBkZXByZWNhdGVkLlRyeSByZW1vdmluZyB0aGlzIG5hdGl2ZSBjbGF1c2UgYW5kIGFkZGluZyBAbmF0aXZlKCkgb3IgQG5hdGl2ZSgnbmF0aXZlLW5hbWUnKSBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uLk5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbm1lc3NhZ2VOYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb250ZW1wbGF0ZU5vRm9ybWFsc0EgZnVuY3Rpb24gc2hvdWxkIGhhdmUgZm9ybWFsIHBhcmFtZXRlcnMuVHJ5IGFkZGluZyAnKCknIGFmdGVyICcjbGV4ZW1lJywgb3IgYWRkICdnZXQnIGJlZm9yZSAnI2xleGVtZScgdG8gZGVjbGFyZSBhIGdldHRlci5jb2RlTm9Gb3JtYWxzTm9Gb3JtYWxzdGVtcGxhdGVOb1N1Y2hOYW1lZFBhcmFtZXRlck5vIG5hbWVkIHBhcmFtZXRlciB3aXRoIHRoZSBuYW1lICcjbmFtZScuY29kZU5vU3VjaE5hbWVkUGFyYW1ldGVyTm9TdWNoTmFtZWRQYXJhbWV0ZXJVTkRFRklORURfTkFNRURfUEFSQU1FVEVSY29kZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QnT2JqZWN0JyBoYXMgbm8gdW5uYW1lZCBjb25zdHJ1Y3Rvci5Ob1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0bWVzc2FnZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3R0ZW1wbGF0ZU5vbkFzY2lpSWRlbnRpZmllclRoZSBub24tQVNDSUkgY2hhcmFjdGVyICcjY2hhcmFjdGVyJyAoI3VuaWNvZGUpIGNhbid0IGJlIHVzZWQgaW4gaWRlbnRpZmllcnMsIG9ubHkgaW4gc3RyaW5ncyBhbmQgY29tbWVudHMuVHJ5IHVzaW5nIGFuIFVTLUFTQ0lJIGxldHRlciwgYSBkaWdpdCwgJ18nIChhbiB1bmRlcnNjb3JlKSwgb3IgJyQnIChhIGRvbGxhciBzaWduKS5jb2RlTm9uQXNjaWlJZGVudGlmaWVyTm9uQXNjaWlJZGVudGlmaWVydGVtcGxhdGVOb25Bc2NpaVdoaXRlc3BhY2VUaGUgbm9uLUFTQ0lJIHNwYWNlIGNoYXJhY3RlciAjdW5pY29kZSBjYW4gb25seSBiZSB1c2VkIGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLmNvZGVOb25Bc2NpaVdoaXRlc3BhY2VOb25Bc2NpaVdoaXRlc3BhY2Vjb2RlTm9uQ29uc3RDb25zdHJ1Y3RvckNhbm5vdCBpbnZva2UgYSBub24tJ2NvbnN0JyBjb25zdHJ1Y3RvciB3aGVyZSBhIGNvbnN0IGV4cHJlc3Npb24gaXMgZXhwZWN0ZWQuVHJ5IHVzaW5nIGEgY29uc3RydWN0b3Igb3IgZmFjdG9yeSB0aGF0IGlzICdjb25zdCcuTm9uQ29uc3RDb25zdHJ1Y3Rvcm1lc3NhZ2VOb25Db25zdENvbnN0cnVjdG9yY29kZU5vbkNvbnN0RmFjdG9yeUNhbm5vdCBpbnZva2UgYSBub24tJ2NvbnN0JyBmYWN0b3J5IHdoZXJlIGEgY29uc3QgZXhwcmVzc2lvbiBpcyBleHBlY3RlZC5Ob25Db25zdEZhY3RvcnltZXNzYWdlTm9uQ29uc3RGYWN0b3J5Y29kZU5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlQ2FuIG9ubHkgdXNlIHR5cGUgdmFyaWFibGVzIGluIGluc3RhbmNlIG1ldGhvZHMuTm9uSW5zdGFuY2VUeXBlVmFyaWFibGVVc2VUWVBFX1BBUkFNRVRFUl9SRUZFUkVOQ0VEX0JZX1NUQVRJQ21lc3NhZ2VOb25JbnN0YW5jZVR5cGVWYXJpYWJsZVVzZWNvZGVOb25OdWxsQXdhcmVTcHJlYWRJc051bGxDYW4ndCBzcHJlYWQgYSB2YWx1ZSB3aXRoIHN0YXRpYyB0eXBlIE51bGwuTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsbWVzc2FnZU5vbk51bGxBd2FyZVNwcmVhZElzTnVsbGNvZGVOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnRUaGUgcGFydC1vZiBkaXJlY3RpdmUgbXVzdCBiZSB0aGUgb25seSBkaXJlY3RpdmUgaW4gYSBwYXJ0LlRyeSByZW1vdmluZyB0aGUgb3RoZXIgZGlyZWN0aXZlcywgb3IgbW92aW5nIHRoZW0gdG8gdGhlIGxpYnJhcnkgZm9yIHdoaWNoIHRoaXMgaXMgYSBwYXJ0Lk5vblBhcnRPZkRpcmVjdGl2ZUluUGFydE5PTl9QQVJUX09GX0RJUkVDVElWRV9JTl9QQVJUbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2VCb3VuZCBvZiB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZXMgcmF3IHR5cGUgJyNuYW1lJy5jb2RlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2VOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZXRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZUJvdW5kIG9mIHRoaXMgdmFyaWFibGUgcmVmZXJlbmNlcyB2YXJpYWJsZSAnI25hbWUnIGZyb20gdGhlIHNhbWUgZGVjbGFyYXRpb24uY29kZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGVOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlY29kZU5vdEFDb25zdGFudEV4cHJlc3Npb25Ob3QgYSBjb25zdGFudCBleHByZXNzaW9uLk5vdEFDb25zdGFudEV4cHJlc3Npb25tZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbnRlbXBsYXRlTm90QVByZWZpeEluVHlwZUFubm90YXRpb24nI25hbWUuI25hbWUyJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBiZWNhdXNlICcjbmFtZScgZG9lc24ndCByZWZlciB0byBhbiBpbXBvcnQgcHJlZml4LmNvZGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbk5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uTk9UX0FfVFlQRXRlbXBsYXRlTm90QVR5cGUnI25hbWUnIGlzbid0IGEgdHlwZS5jb2RlTm90QVR5cGVOb3RBVHlwZWNvZGVOb3RBVHlwZUNvbnRleHRUaGlzIGlzbid0IGEgdHlwZS5Ob3RBVHlwZUNvbnRleHRtZXNzYWdlTm90QVR5cGVDb250ZXh0Y29kZU5vdEFuTHZhbHVlQ2FuJ3QgYXNzaWduIHRvIHRoaXMuTm90QW5MdmFsdWVtZXNzYWdlTm90QW5MdmFsdWV0ZW1wbGF0ZU5vdEJpbmFyeU9wZXJhdG9yJyNsZXhlbWUnIGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLmNvZGVOb3RCaW5hcnlPcGVyYXRvck5vdEJpbmFyeU9wZXJhdG9ydGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24jc3RyaW5nIGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24uY29kZU5vdENvbnN0YW50RXhwcmVzc2lvbk5vdENvbnN0YW50RXhwcmVzc2lvbmNvZGVPYmplY3RFeHRlbmRzVGhlIGNsYXNzICdPYmplY3QnIGNhbid0IGhhdmUgYSBzdXBlcmNsYXNzLk9iamVjdEV4dGVuZHNtZXNzYWdlT2JqZWN0RXh0ZW5kc2NvZGVPYmplY3RJbXBsZW1lbnRzVGhlIGNsYXNzICdPYmplY3QnIGNhbid0IGltcGxlbWVudCBhbnl0aGluZy5PYmplY3RJbXBsZW1lbnRzbWVzc2FnZU9iamVjdEltcGxlbWVudHNjb2RlT2JqZWN0TWl4ZXNJblRoZSBjbGFzcyAnT2JqZWN0JyBjYW4ndCB1c2UgbWl4aW5zLk9iamVjdE1peGVzSW5tZXNzYWdlT2JqZWN0TWl4ZXNJbmNvZGVPbmx5VHJ5QSB0cnkgYmxvY2sgbXVzdCBiZSBmb2xsb3dlZCBieSBhbiAnb24nLCAnY2F0Y2gnLCBvciAnZmluYWxseScgY2xhdXNlLlRyeSBhZGRpbmcgZWl0aGVyIGEgY2F0Y2ggb3IgZmluYWxseSBjbGF1c2UsIG9yIHJlbW92ZSB0aGUgdHJ5IHN0YXRlbWVudC5Pbmx5VHJ5bWVzc2FnZU9ubHlUcnl0ZW1wbGF0ZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaE9wZXJhdG9yICcjbmFtZScgc2hvdWxkIGhhdmUgemVybyBvciBvbmUgcGFyYW1ldGVyLldpdGggemVybyBwYXJhbWV0ZXJzLCBpdCBoYXMgdGhlIHN5bnRhY3RpYyBmb3JtICctYScsIGZvcm1hbGx5IGtub3duIGFzICd1bmFyeS0nLiBXaXRoIG9uZSBwYXJhbWV0ZXIsIGl0IGhhcyB0aGUgc3ludGFjdGljIGZvcm0gJ2EgLSBiJywgZm9ybWFsbHkga25vd24gYXMgJy0nLmNvZGVPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2hPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2hXUk9OR19OVU1CRVJfT0ZfUEFSQU1FVEVSU19GT1JfT1BFUkFUT1JfTUlOVVN0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwT3BlcmF0b3IgJyNuYW1lJyBzaG91bGRuJ3QgaGF2ZSBhbnkgcGFyYW1ldGVycy5jb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDBPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDFPcGVyYXRvciAnI25hbWUnIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtZXRlci5jb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDFPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMVdST05HX05VTUJFUl9PRl9QQVJBTUVURVJTX0ZPUl9PUEVSQVRPUnRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDJPcGVyYXRvciAnI25hbWUnIHNob3VsZCBoYXZlIGV4YWN0bHkgdHdvIHBhcmFtZXRlcnMuY29kZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDJjb2RlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzQW4gb3BlcmF0b3IgY2FuJ3QgaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzLk9wZXJhdG9yV2l0aE9wdGlvbmFsRm9ybWFsc21lc3NhZ2VPcGVyYXRvcldpdGhPcHRpb25hbEZvcm1hbHN0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZVRoaXMgaXMgdGhlIG92ZXJyaWRkZW4gbWV0aG9kICgnI25hbWUnKS5jb2RlT3ZlcnJpZGRlbk1ldGhvZENhdXNlT3ZlcnJpZGRlbk1ldGhvZENhdXNldGVtcGxhdGVPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHNUaGUgbWV0aG9kICcjbmFtZScgaGFzIGZld2VyIG5hbWVkIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcjbmFtZTInLmNvZGVPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHNPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHNJTlZBTElEX09WRVJSSURFX05BTUVEdGVtcGxhdGVPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50c1RoZSBtZXRob2QgJyNuYW1lJyBoYXMgZmV3ZXIgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnI25hbWUyJy5jb2RlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHNPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50c0lOVkFMSURfT1ZFUlJJREVfUE9TSVRJT05BTHRlbXBsYXRlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyVGhlIG1ldGhvZCAnI25hbWUnIGRvZXNuJ3QgaGF2ZSB0aGUgbmFtZWQgcGFyYW1ldGVyICcjbmFtZTInIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcjbmFtZTMnLmNvZGVPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXJPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXJ0ZW1wbGF0ZU92ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzVGhlIG1ldGhvZCAnI25hbWUnIGhhcyBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcjbmFtZTInLmNvZGVPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50c092ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzSU5WQUxJRF9PVkVSUklERV9SRVFVSVJFRHRlbXBsYXRlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXJUaGUgcGFyYW1ldGVyICcjbmFtZScgb2YgdGhlIG1ldGhvZCAnI25hbWUyJyBoYXMgdHlwZSAnI3R5cGUnLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyB0eXBlLCAnI3R5cGUyJywgaW4gdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnI25hbWUzJy5DaGFuZ2UgdG8gYSBzdXBlcnR5cGUgb2YgJyN0eXBlMicsIG9yLCBmb3IgYSBjb3ZhcmlhbnQgcGFyYW1ldGVyLCBhIHN1YnR5cGUuY29kZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXJ0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZVRoZSByZXR1cm4gdHlwZSBvZiB0aGUgbWV0aG9kICcjbmFtZScgaXMgJyN0eXBlJywgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIHJldHVybiB0eXBlLCAnI3R5cGUyJywgb2YgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnI25hbWUyJy5DaGFuZ2UgdG8gYSBzdWJ0eXBlIG9mICcjdHlwZTInLmNvZGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGV0ZW1wbGF0ZU92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoRGVjbGFyZWQgdHlwZSB2YXJpYWJsZXMgb2YgJyNuYW1lJyBkb2Vzbid0IG1hdGNoIHRob3NlIG9uIG92ZXJyaWRkZW4gbWV0aG9kICcjbmFtZTInLmNvZGVPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaE92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoSU5WQUxJRF9NRVRIT0RfT1ZFUlJJREVfVFlQRV9QQVJBTUVURVJTdGVtcGxhdGVQYWNrYWdlTm90Rm91bmRDb3VsZCBub3QgcmVzb2x2ZSB0aGUgcGFja2FnZSAnI25hbWUnIGluICcjdXJpJy5jb2RlUGFja2FnZU5vdEZvdW5kUGFja2FnZU5vdEZvdW5kY29kZVBhY2thZ2VzRmlsZUZvcm1hdFBhY2thZ2VzRmlsZUZvcm1hdGNvZGVQYXJ0RXhwb3J0Q2FuJ3QgZXhwb3J0IHRoaXMgZmlsZSBiZWNhdXNlIGl0IGNvbnRhaW5zIGEgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLlBhcnRFeHBvcnRFWFBPUlRfT0ZfTk9OX0xJQlJBUlltZXNzYWdlUGFydEV4cG9ydGNvZGVQYXJ0RXhwb3J0Q29udGV4dFRoaXMgaXMgdGhlIGZpbGUgdGhhdCBjYW4ndCBiZSBleHBvcnRlZC5QYXJ0RXhwb3J0Q29udGV4dG1lc3NhZ2VQYXJ0RXhwb3J0Q29udGV4dGNvZGVQYXJ0SW5QYXJ0QSBmaWxlIHRoYXQncyBhIHBhcnQgb2YgYSBsaWJyYXJ5IGNhbid0IGhhdmUgcGFydHMgaXRzZWxmLlRyeSBtb3ZpbmcgdGhlICdwYXJ0JyBkZWNsYXJhdGlvbiB0byB0aGUgY29udGFpbmluZyBsaWJyYXJ5LlBhcnRJblBhcnRtZXNzYWdlUGFydEluUGFydGNvZGVQYXJ0SW5QYXJ0TGlicmFyeUNvbnRleHRUaGlzIGlzIHRoZSBjb250YWluaW5nIGxpYnJhcnkuUGFydEluUGFydExpYnJhcnlDb250ZXh0bWVzc2FnZVBhcnRJblBhcnRMaWJyYXJ5Q29udGV4dHRlbXBsYXRlUGFydE9mSW5MaWJyYXJ5Q2FuJ3QgaW1wb3J0ICcjdXJpJywgYmVjYXVzZSBpdCBoYXMgYSAncGFydCBvZicgZGVjbGFyYXRpb24uVHJ5IHJlbW92aW5nIHRoZSAncGFydCBvZicgZGVjbGFyYXRpb24sIG9yIHVzaW5nICcjdXJpJyBhcyBhIHBhcnQuY29kZVBhcnRPZkluTGlicmFyeVBhcnRPZkluTGlicmFyeUlNUE9SVF9PRl9OT05fTElCUkFSWXRlbXBsYXRlUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaFVzaW5nICcjdXJpJyBhcyBwYXJ0IG9mICcjbmFtZScgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnI25hbWUyJy5jb2RlUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaFBhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2hQQVJUX09GX0RJRkZFUkVOVF9MSUJSQVJZY29kZVBhcnRPZlNlbGZBIGZpbGUgY2FuJ3QgYmUgYSBwYXJ0IG9mIGl0c2VsZi5QYXJ0T2ZTZWxmbWVzc2FnZVBhcnRPZlNlbGZjb2RlUGFydE9mVHdpY2VPbmx5IG9uZSBwYXJ0LW9mIGRpcmVjdGl2ZSBtYXkgYmUgZGVjbGFyZWQgaW4gYSBmaWxlLlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBvZiB0aGUgcGFydC1vZiBkaXJlY3RpdmVzLlBhcnRPZlR3aWNlbWVzc2FnZVBhcnRPZlR3aWNlY29kZVBhcnRPZlR3b0xpYnJhcmllc0EgZmlsZSBjYW4ndCBiZSBwYXJ0IG9mIG1vcmUgdGhhbiBvbmUgbGlicmFyeS5UcnkgbW92aW5nIHRoZSBzaGFyZWQgZGVjbGFyYXRpb25zIGludG8gdGhlIGxpYnJhcmllcywgb3IgaW50byBhIG5ldyBsaWJyYXJ5LlBhcnRPZlR3b0xpYnJhcmllc21lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXNjb2RlUGFydE9mVHdvTGlicmFyaWVzQ29udGV4dFVzZWQgYXMgYSBwYXJ0IGluIHRoaXMgbGlicmFyeS5QYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0bWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHR0ZW1wbGF0ZVBhcnRPZlVyaU1pc21hdGNoVXNpbmcgJyN1cmknIGFzIHBhcnQgb2YgJyN1cmkyJyBidXQgaXRzICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiBzYXlzICcjdXJpMycuY29kZVBhcnRPZlVyaU1pc21hdGNoUGFydE9mVXJpTWlzbWF0Y2h0ZW1wbGF0ZVBhcnRPZlVzZVVyaVVzaW5nICcjdXJpJyBhcyBwYXJ0IG9mICcjdXJpMicgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnI25hbWUnLlRyeSBjaGFuZ2luZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHRvIHVzZSBhIHJlbGF0aXZlIGZpbGUgbmFtZS5jb2RlUGFydE9mVXNlVXJpUGFydE9mVXNlVXJpUEFSVF9PRl9VTk5BTUVEX0xJQlJBUlljb2RlUGFydE9ycGhhblRoaXMgcGFydCBkb2Vzbid0IGhhdmUgYSBjb250YWluaW5nIGxpYnJhcnkuVHJ5IHJlbW92aW5nIHRoZSAncGFydCBvZicgZGVjbGFyYXRpb24uUGFydE9ycGhhbm1lc3NhZ2VQYXJ0T3JwaGFudGVtcGxhdGVQYXJ0VHdpY2VDYW4ndCB1c2UgJyN1cmknIGFzIGEgcGFydCBtb3JlIHRoYW4gb25jZS5jb2RlUGFydFR3aWNlUGFydFR3aWNlRFVQTElDQVRFX1BBUlRjb2RlUGF0Y2hDbGFzc09yaWdpblRoaXMgaXMgdGhlIG9yaWdpbiBjbGFzcy5QYXRjaENsYXNzT3JpZ2lubWVzc2FnZVBhdGNoQ2xhc3NPcmlnaW5jb2RlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaEEgcGF0Y2ggY2xhc3MgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiB0eXBlIHZhcmlhYmxlcyBhcyBpdHMgb3JpZ2luIGNsYXNzLlBhdGNoQ2xhc3NUeXBlVmFyaWFibGVzTWlzbWF0Y2htZXNzYWdlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaGNvZGVQYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2hUaGlzIHBhdGNoIGRvZXNuJ3QgbWF0Y2ggb3JpZ2luIGRlY2xhcmF0aW9uLlBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2hjb2RlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpblRoaXMgaXMgdGhlIG9yaWdpbiBkZWNsYXJhdGlvbi5QYXRjaERlY2xhcmF0aW9uT3JpZ2lubWVzc2FnZVBhdGNoRGVjbGFyYXRpb25PcmlnaW50ZW1wbGF0ZVBhdGNoSW5qZWN0aW9uRmFpbGVkQ2FuJ3QgaW5qZWN0ICcjbmFtZScgaW50byAnI3VyaScuVHJ5IGFkZGluZyAnQHBhdGNoJy5jb2RlUGF0Y2hJbmplY3Rpb25GYWlsZWRQYXRjaEluamVjdGlvbkZhaWxlZGNvZGVQYXRjaE5vbkV4dGVybmFsQ2FuJ3QgYXBwbHkgdGhpcyBwYXRjaCBhcyBpdHMgb3JpZ2luIGRlY2xhcmF0aW9uIGlzbid0IGV4dGVybmFsLlRyeSBhZGRpbmcgJ2V4dGVybmFsJyB0byB0aGUgb3JpZ2luIGRlY2xhcmF0aW9uLlBhdGNoTm9uRXh0ZXJuYWxtZXNzYWdlUGF0Y2hOb25FeHRlcm5hbGNvZGVQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzQ2FuJ3QgYWNjZXNzIHBsYXRmb3JtIHByaXZhdGUgbGlicmFyeS5QbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzSU1QT1JUX0lOVEVSTkFMX0xJQlJBUlltZXNzYWdlUGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2Vzc2NvZGVQb3NpdGlvbmFsQWZ0ZXJOYW1lZEFyZ3VtZW50UGxhY2UgcG9zaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIG5hbWVkIGFyZ3VtZW50cy5UcnkgbW92aW5nIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGJlZm9yZSB0aGUgbmFtZWQgYXJndW1lbnRzLCBvciBhZGQgYSBuYW1lIHRvIHRoZSBhcmd1bWVudC5Qb3NpdGlvbmFsQWZ0ZXJOYW1lZEFyZ3VtZW50UE9TSVRJT05BTF9BRlRFUl9OQU1FRF9BUkdVTUVOVG1lc3NhZ2VQb3NpdGlvbmFsQWZ0ZXJOYW1lZEFyZ3VtZW50Y29kZVBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzUG9zaXRpb25hbCBvcHRpb25hbCBwYXJhbWV0ZXJzIGNhbid0IHVzZSAnOicgdG8gc3BlY2lmeSBhIGRlZmF1bHQgdmFsdWUuVHJ5IHJlcGxhY2luZyAnOicgd2l0aCAnPScuUG9zaXRpb25hbFBhcmFtZXRlcldpdGhFcXVhbHNXUk9OR19TRVBBUkFUT1JfRk9SX1BPU0lUSU9OQUxfUEFSQU1FVEVSbWVzc2FnZVBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzY29kZVByZWZpeEFmdGVyQ29tYmluYXRvclRoZSBwcmVmaXggKCdhcycgY2xhdXNlKSBzaG91bGQgY29tZSBiZWZvcmUgYW55IHNob3cvaGlkZSBjb21iaW5hdG9ycy5UcnkgbW92aW5nIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBjb21iaW5hdG9ycy5QcmVmaXhBZnRlckNvbWJpbmF0b3JtZXNzYWdlUHJlZml4QWZ0ZXJDb21iaW5hdG9yY29kZVByaXZhdGVOYW1lZFBhcmFtZXRlckFuIG9wdGlvbmFsIG5hbWVkIHBhcmFtZXRlciBjYW4ndCBzdGFydCB3aXRoICdfJy5Qcml2YXRlTmFtZWRQYXJhbWV0ZXJQUklWQVRFX09QVElPTkFMX1BBUkFNRVRFUm1lc3NhZ2VQcml2YXRlTmFtZWRQYXJhbWV0ZXJjb2RlUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcldpdGhCb2R5UmVkaXJlY3RpbmcgY29uc3RydWN0b3JzIGNhbid0IGhhdmUgYSBib2R5LlRyeSByZW1vdmluZyB0aGUgYm9keSwgb3Igbm90IG1ha2luZyB0aGlzIGEgcmVkaXJlY3RpbmcgY29uc3RydWN0b3IuUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcldpdGhCb2R5bWVzc2FnZVJlZGlyZWN0aW5nQ29uc3RydWN0b3JXaXRoQm9keXRlbXBsYXRlUmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50VGhlIHR5cGUgJyN0eXBlJyBkb2Vzbid0IGV4dGVuZCAnI3R5cGUyJy5UcnkgdXNpbmcgYSBkaWZmZXJlbnQgdHlwZSBhcyBhcmd1bWVudC5jb2RlUmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50UmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50Y29kZVJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5T25seSBmYWN0b3J5IGNvbnN0cnVjdG9yIGNhbiBzcGVjaWZ5ICc9JyByZWRpcmVjdGlvbi5UcnkgbWFraW5nIHRoaXMgYSBmYWN0b3J5IGNvbnN0cnVjdG9yLCBvciByZW1vdmUgdGhlIHJlZGlyZWN0aW9uLlJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5bWVzc2FnZVJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5dGVtcGxhdGVSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kUmVkaXJlY3Rpb24gY29uc3RydWN0b3IgdGFyZ2V0IG5vdCBmb3VuZDogJyNuYW1lJ2NvZGVSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZFJFRElSRUNUX1RPX01JU1NJTkdfQ09OU1RSVUNUT1Jjb2RlUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdE5vbi1vcHRpb25hbCBwYXJhbWV0ZXJzIGNhbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlLlRyeSByZW1vdmluZyB0aGUgZGVmYXVsdCB2YWx1ZSBvciBtYWtpbmcgdGhlIHBhcmFtZXRlciBvcHRpb25hbC5SZXF1aXJlZFBhcmFtZXRlcldpdGhEZWZhdWx0TkFNRURfUEFSQU1FVEVSX09VVFNJREVfR1JPVVBtZXNzYWdlUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdGNvZGVSZXRocm93Tm90Q2F0Y2gncmV0aHJvdycgY2FuIG9ubHkgYmUgdXNlZCBpbiBjYXRjaCBjbGF1c2VzLlJldGhyb3dOb3RDYXRjaFJFVEhST1dfT1VUU0lERV9DQVRDSG1lc3NhZ2VSZXRocm93Tm90Q2F0Y2hjb2RlUmV0dXJuRnJvbVZvaWRGdW5jdGlvbkNhbid0IHJldHVybiBhIHZhbHVlIGZyb20gYSB2b2lkIGZ1bmN0aW9uLlJldHVybkZyb21Wb2lkRnVuY3Rpb25SRVRVUk5fT0ZfSU5WQUxJRF9UWVBFbWVzc2FnZVJldHVybkZyb21Wb2lkRnVuY3Rpb25jb2RlUmV0dXJuVHlwZUZ1bmN0aW9uRXhwcmVzc2lvbkEgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYW4ndCBoYXZlIGEgcmV0dXJuIHR5cGUuUmV0dXJuVHlwZUZ1bmN0aW9uRXhwcmVzc2lvbm1lc3NhZ2VSZXR1cm5UeXBlRnVuY3Rpb25FeHByZXNzaW9uY29kZVJldHVybldpdGhvdXRFeHByZXNzaW9uTXVzdCBleHBsaWNpdGx5IHJldHVybiBhIHZhbHVlIGZyb20gYSBub24tdm9pZCBmdW5jdGlvbi5SZXR1cm5XaXRob3V0RXhwcmVzc2lvblJFVFVSTl9XSVRIT1VUX1ZBTFVFbWVzc2FnZVJldHVybldpdGhvdXRFeHByZXNzaW9uY29kZVNka1Jvb3ROb3RGb3VuZFNka1Jvb3ROb3RGb3VuZGNvZGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmRTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmRjb2RlU2RrU3VtbWFyeU5vdEZvdW5kU2RrU3VtbWFyeU5vdEZvdW5kY29kZVNldExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50c0Egc2V0IGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHlwZSBhcmd1bWVudC5TZXRMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHNtZXNzYWdlU2V0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzY29kZVNldE9yTWFwTGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzQSBzZXQgb3IgbWFwIGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgb3IgdHdvIHR5cGUgYXJndW1lbnRzLCByZXNwZWN0aXZlbHkuU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHNtZXNzYWdlU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHN0ZW1wbGF0ZVNldHRlck5vdEZvdW5kU2V0dGVyIG5vdCBmb3VuZDogJyNuYW1lJy5jb2RlU2V0dGVyTm90Rm91bmRTZXR0ZXJOb3RGb3VuZFVOREVGSU5FRF9TRVRURVJjb2RlU2V0dGVyTm90U3luY1NldHRlcnMgY2FuJ3QgdXNlICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonLlNldHRlck5vdFN5bmNJTlZBTElEX01PRElGSUVSX09OX1NFVFRFUm1lc3NhZ2VTZXR0ZXJOb3RTeW5jY29kZVNldHRlcldpdGhXcm9uZ051bWJlck9mRm9ybWFsc0Egc2V0dGVyIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGZvcm1hbCBwYXJhbWV0ZXIuU2V0dGVyV2l0aFdyb25nTnVtYmVyT2ZGb3JtYWxzV1JPTkdfTlVNQkVSX09GX1BBUkFNRVRFUlNfRk9SX1NFVFRFUm1lc3NhZ2VTZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHN0ZW1wbGF0ZVNvdXJjZUJvZHlTdW1tYXJ5QnVpbHQgYm9kaWVzIGZvciAjY291bnQgY29tcGlsYXRpb24gdW5pdHMgKCNjb3VudDIgYnl0ZXMpIGluICNudW0xJS4zbXMsIHRoYXQgaXMsCiNudW0yJTEyLjMgYnl0ZXMvbXMsIGFuZAojbnVtMyUxMi4zIG1zL2NvbXBpbGF0aW9uIHVuaXQuY29kZVNvdXJjZUJvZHlTdW1tYXJ5U291cmNlQm9keVN1bW1hcnl0ZW1wbGF0ZVNvdXJjZU91dGxpbmVTdW1tYXJ5QnVpbHQgb3V0bGluZXMgZm9yICNjb3VudCBjb21waWxhdGlvbiB1bml0cyAoI2NvdW50MiBieXRlcykgaW4gI251bTElLjNtcywgdGhhdCBpcywKI251bTIlMTIuMyBieXRlcy9tcywgYW5kCiNudW0zJTEyLjMgbXMvY29tcGlsYXRpb24gdW5pdC5jb2RlU291cmNlT3V0bGluZVN1bW1hcnlTb3VyY2VPdXRsaW5lU3VtbWFyeWNvZGVTcHJlYWRFbGVtZW50SXRlcmFibGUgc3ByZWFkLlNwcmVhZEVsZW1lbnRtZXNzYWdlU3ByZWFkRWxlbWVudHRlbXBsYXRlU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaENhbid0IGFzc2lnbiBzcHJlYWQgZWxlbWVudHMgb2YgdHlwZSAnI3R5cGUnIHRvIGNvbGxlY3Rpb24gZWxlbWVudHMgb2YgdHlwZSAnI3R5cGUyJy5jb2RlU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaFNwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2hMSVNUX0VMRU1FTlRfVFlQRV9OT1RfQVNTSUdOQUJMRWNvZGVTcHJlYWRNYXBFbGVtZW50TWFwIHNwcmVhZC5TcHJlYWRNYXBFbGVtZW50bWVzc2FnZVNwcmVhZE1hcEVsZW1lbnR0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaENhbid0IGFzc2lnbiBzcHJlYWQgZW50cnkga2V5cyBvZiB0eXBlICcjdHlwZScgdG8gbWFwIGVudHJ5IGtleXMgb2YgdHlwZSAnI3R5cGUyJy5jb2RlU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoTUFQX0tFWV9UWVBFX05PVF9BU1NJR05BQkxFdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaENhbid0IGFzc2lnbiBzcHJlYWQgZW50cnkgdmFsdWVzIG9mIHR5cGUgJyN0eXBlJyB0byBtYXAgZW50cnkgdmFsdWVzIG9mIHR5cGUgJyN0eXBlMicuY29kZVNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2hNQVBfVkFMVUVfVFlQRV9OT1RfQVNTSUdOQUJMRXRlbXBsYXRlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2hVbmV4cGVjdGVkIHR5cGUgJyN0eXBlJyBvZiBhIG1hcCBzcHJlYWQgZW50cnkuICBFeHBlY3RlZCAnZHluYW1pYycgb3IgYSBNYXAuY29kZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2h0ZW1wbGF0ZVNwcmVhZFR5cGVNaXNtYXRjaFVuZXhwZWN0ZWQgdHlwZSAnI3R5cGUnIG9mIGEgc3ByZWFkLiAgRXhwZWN0ZWQgJ2R5bmFtaWMnIG9yIGFuIEl0ZXJhYmxlLmNvZGVTcHJlYWRUeXBlTWlzbWF0Y2hTcHJlYWRUeXBlTWlzbWF0Y2hjb2RlU3RhY2tPdmVyZmxvd1RoZSBmaWxlIGhhcyB0b28gbWFueSBuZXN0ZWQgZXhwcmVzc2lvbnMgb3Igc3RhdGVtZW50cy5Ucnkgc2ltcGxpZnlpbmcgdGhlIGNvZGUuU3RhY2tPdmVyZmxvd21lc3NhZ2VTdGFja092ZXJmbG93Y29kZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RUaGlzIHN0YXRpYyBtZW1iZXIgY29uZmxpY3RzIHdpdGggYW4gaW5zdGFuY2UgbWVtYmVyLlN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDT05GTElDVElOR19TVEFUSUNfQU5EX0lOU1RBTkNFbWVzc2FnZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3Rjb2RlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlVGhpcyBpcyB0aGUgaW5zdGFuY2UgbWVtYmVyLlN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZW1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0Q2F1c2Vjb2RlU3RhdGljQ29uc3RydWN0b3JDb25zdHJ1Y3RvcnMgY2FuJ3QgYmUgc3RhdGljLlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAnc3RhdGljJy5TdGF0aWNDb25zdHJ1Y3Rvcm1lc3NhZ2VTdGF0aWNDb25zdHJ1Y3RvcmNvZGVTdGF0aWNPcGVyYXRvck9wZXJhdG9ycyBjYW4ndCBiZSBzdGF0aWMuU3RhdGljT3BlcmF0b3JtZXNzYWdlU3RhdGljT3BlcmF0b3Jjb2RlU3VwZXJBc0V4cHJlc3Npb25DYW4ndCB1c2UgJ3N1cGVyJyBhcyBhbiBleHByZXNzaW9uLlRvIGRlbGVnYXRlIGEgY29uc3RydWN0b3IgdG8gYSBzdXBlciBjb25zdHJ1Y3RvciwgcHV0IHRoZSBzdXBlciBjYWxsIGFzIGFuIGluaXRpYWxpemVyLlN1cGVyQXNFeHByZXNzaW9uU1VQRVJfQVNfRVhQUkVTU0lPTm1lc3NhZ2VTdXBlckFzRXhwcmVzc2lvbmNvZGVTdXBlckFzSWRlbnRpZmllckV4cGVjdGVkIGlkZW50aWZpZXIsIGJ1dCBnb3QgJ3N1cGVyJy5TdXBlckFzSWRlbnRpZmllcm1lc3NhZ2VTdXBlckFzSWRlbnRpZmllcmNvZGVTdXBlckluaXRpYWxpemVyTm90TGFzdENhbid0IGhhdmUgaW5pdGlhbGl6ZXJzIGFmdGVyICdzdXBlcicuU3VwZXJJbml0aWFsaXplck5vdExhc3RJTlZBTElEX1NVUEVSX0lOVk9DQVRJT05tZXNzYWdlU3VwZXJJbml0aWFsaXplck5vdExhc3Rjb2RlU3VwZXJOdWxsQXdhcmVUaGUgb3BlcmF0b3IgJz8uJyBjYW5ub3QgYmUgdXNlZCB3aXRoICdzdXBlcicgYmVjYXVzZSAnc3VwZXInIGNhbm5vdCBiZSBudWxsLlRyeSByZXBsYWNpbmcgJz8uJyB3aXRoICcuJ1N1cGVyTnVsbEF3YXJlbWVzc2FnZVN1cGVyTnVsbEF3YXJldGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvclN1cGVyY2xhc3MgaGFzIG5vIGNvbnN0cnVjdG9yIG5hbWVkICcjbmFtZScuY29kZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3JVTkRFRklORURfQ09OU1RSVUNUT1JfSU5fSU5JVElBTElaRVJVTkRFRklORURfQ09OU1RSVUNUT1JfSU5fSU5JVElBTElaRVJfREVGQVVMVHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yVGhlIHN1cGVyY2xhc3MsICcjbmFtZScsIGhhcyBubyB1bm5hbWVkIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzLmNvZGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3JTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3JOT19ERUZBVUxUX1NVUEVSX0NPTlNUUlVDVE9SX0lNUExJQ0lUdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9HZXR0ZXJTdXBlcmNsYXNzIGhhcyBubyBnZXR0ZXIgbmFtZWQgJyNuYW1lJy5jb2RlU3VwZXJjbGFzc0hhc05vR2V0dGVyU3VwZXJjbGFzc0hhc05vR2V0dGVyVU5ERUZJTkVEX1NVUEVSX0dFVFRFUnRlbXBsYXRlU3VwZXJjbGFzc0hhc05vTWV0aG9kU3VwZXJjbGFzcyBoYXMgbm8gbWV0aG9kIG5hbWVkICcjbmFtZScuY29kZVN1cGVyY2xhc3NIYXNOb01ldGhvZFN1cGVyY2xhc3NIYXNOb01ldGhvZFVOREVGSU5FRF9TVVBFUl9NRVRIT0R0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb1NldHRlclN1cGVyY2xhc3MgaGFzIG5vIHNldHRlciBuYW1lZCAnI25hbWUnLmNvZGVTdXBlcmNsYXNzSGFzTm9TZXR0ZXJTdXBlcmNsYXNzSGFzTm9TZXR0ZXJVTkRFRklORURfU1VQRVJfU0VUVEVSdGVtcGxhdGVTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaFN1cGVyY2xhc3MgZG9lc24ndCBoYXZlIGEgbWV0aG9kIG5hbWVkICcjbmFtZScgd2l0aCBtYXRjaGluZyBhcmd1bWVudHMuY29kZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoU3VwZXJjbGFzc01ldGhvZEFyZ3VtZW50TWlzbWF0Y2hjb2RlU3VwZXJ0eXBlSXNGdW5jdGlvbkNhbid0IHVzZSBhIGZ1bmN0aW9uIHR5cGUgYXMgc3VwZXJ0eXBlLlN1cGVydHlwZUlzRnVuY3Rpb25tZXNzYWdlU3VwZXJ0eXBlSXNGdW5jdGlvbnRlbXBsYXRlU3VwZXJ0eXBlSXNJbGxlZ2FsVGhlIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIGFzIHN1cGVydHlwZS5jb2RlU3VwZXJ0eXBlSXNJbGxlZ2FsU3VwZXJ0eXBlSXNJbGxlZ2FsRVhURU5EU19OT05fQ0xBU1N0ZW1wbGF0ZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlVGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIGFzIHN1cGVydHlwZS5jb2RlU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGVTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZWNvZGVTd2l0Y2hDYXNlRmFsbFRocm91Z2hTd2l0Y2ggY2FzZSBtYXkgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGNhc2UuU3dpdGNoQ2FzZUZhbGxUaHJvdWdoQ0FTRV9CTE9DS19OT1RfVEVSTUlOQVRFRG1lc3NhZ2VTd2l0Y2hDYXNlRmFsbFRocm91Z2h0ZW1wbGF0ZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlVHlwZSAnI3R5cGUnIG9mIHRoZSBzd2l0Y2ggZXhwcmVzc2lvbiBpc24ndCBhc3NpZ25hYmxlIHRvIHRoZSB0eXBlICcjdHlwZTInIG9mIHRoaXMgY2FzZSBleHByZXNzaW9uLmNvZGVTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlU1dJVENIX0VYUFJFU1NJT05fTk9UX0FTU0lHTkFCTEVjb2RlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZVRoZSBzd2l0Y2ggZXhwcmVzc2lvbiBpcyBoZXJlLlN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2VtZXNzYWdlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZWNvZGVTd2l0Y2hIYXNDYXNlQWZ0ZXJEZWZhdWx0VGhlIGRlZmF1bHQgY2FzZSBzaG91bGQgYmUgdGhlIGxhc3QgY2FzZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQuVHJ5IG1vdmluZyB0aGUgZGVmYXVsdCBjYXNlIGFmdGVyIHRoZSBvdGhlciBjYXNlIGNsYXVzZXMuU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdG1lc3NhZ2VTd2l0Y2hIYXNDYXNlQWZ0ZXJEZWZhdWx0Y29kZVN3aXRjaEhhc011bHRpcGxlRGVmYXVsdHNUaGUgJ2RlZmF1bHQnIGNhc2UgY2FuIG9ubHkgYmUgZGVjbGFyZWQgb25jZS5UcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgZGVmYXVsdCBjYXNlLlN3aXRjaEhhc011bHRpcGxlRGVmYXVsdHNtZXNzYWdlU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0c2NvZGVTeW50aGV0aWNUb2tlblRoaXMgY291bGRuJ3QgYmUgcGFyc2VkLlN5bnRoZXRpY1Rva2VubWVzc2FnZVN5bnRoZXRpY1Rva2VudGVtcGxhdGVUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyQ2FuJ3QgYWNjZXNzICd0aGlzJyBpbiBhIGZpZWxkIGluaXRpYWxpemVyIHRvIHJlYWQgJyNuYW1lJy5jb2RlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplclRoaXNBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXJUSElTX0FDQ0VTU19GUk9NX0ZJRUxEX0lOSVRJQUxJWkVSY29kZVRoaXNBc0lkZW50aWZpZXJFeHBlY3RlZCBpZGVudGlmaWVyLCBidXQgZ290ICd0aGlzJy5UaGlzQXNJZGVudGlmaWVySU5WQUxJRF9SRUZFUkVOQ0VfVE9fVEhJU21lc3NhZ2VUaGlzQXNJZGVudGlmaWVyY29kZVRoaXNJbml0aWFsaXplck5vdEFsb25lQ2FuJ3QgaGF2ZSBvdGhlciBpbml0aWFsaXplcnMgdG9nZXRoZXIgd2l0aCAndGhpcycuVGhpc0luaXRpYWxpemVyTm90QWxvbmVGSUVMRF9JTklUSUFMSVpFUl9SRURJUkVDVElOR19DT05TVFJVQ1RPUm1lc3NhZ2VUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZXRlbXBsYXRlVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXJDYW4ndCBhY2Nlc3MgJyNzdHJpbmcnIGluIGEgZmllbGQgaW5pdGlhbGl6ZXIuY29kZVRoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXJUSElTX0FDQ0VTU19GUk9NX0lOSVRJQUxJWkVSdGVtcGxhdGVUb29GZXdBcmd1bWVudHNUb28gZmV3IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAjY291bnQgcmVxdWlyZWQsICNjb3VudDIgZ2l2ZW4uY29kZVRvb0Zld0FyZ3VtZW50c1Rvb0Zld0FyZ3VtZW50c05PVF9FTk9VR0hfUkVRVUlSRURfQVJHVU1FTlRTdGVtcGxhdGVUb29NYW55QXJndW1lbnRzVG9vIG1hbnkgcG9zaXRpb25hbCBhcmd1bWVudHM6ICNjb3VudCBhbGxvd2VkLCBidXQgI2NvdW50MiBmb3VuZC5UcnkgcmVtb3ZpbmcgdGhlIGV4dHJhIHBvc2l0aW9uYWwgYXJndW1lbnRzLmNvZGVUb29NYW55QXJndW1lbnRzVG9vTWFueUFyZ3VtZW50c2NvZGVUb3BMZXZlbE9wZXJhdG9yT3BlcmF0b3JzIG11c3QgYmUgZGVjbGFyZWQgd2l0aGluIGEgY2xhc3MuVHJ5IHJlbW92aW5nIHRoZSBvcGVyYXRvciwgbW92aW5nIGl0IHRvIGEgY2xhc3MsIG9yIGNvbnZlcnRpbmcgaXQgdG8gYmUgYSBmdW5jdGlvbi5Ub3BMZXZlbE9wZXJhdG9ybWVzc2FnZVRvcExldmVsT3BlcmF0b3Jjb2RlVHlwZUFmdGVyVmFyVmFyaWFibGVzIGNhbid0IGJlIGRlY2xhcmVkIHVzaW5nIGJvdGggJ3ZhcicgYW5kIGEgdHlwZSBuYW1lLlRyeSByZW1vdmluZyAndmFyLidUeXBlQWZ0ZXJWYXJtZXNzYWdlVHlwZUFmdGVyVmFydGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaEV4cGVjdGVkICNjb3VudCB0eXBlIGFyZ3VtZW50cy5jb2RlVHlwZUFyZ3VtZW50TWlzbWF0Y2hUeXBlQXJndW1lbnRNaXNtYXRjaFdST05HX05VTUJFUl9PRl9UWVBFX0FSR1VNRU5UU3RlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlQ2FuJ3QgdXNlIHR5cGUgYXJndW1lbnRzIHdpdGggdHlwZSB2YXJpYWJsZSAnI25hbWUnLlRyeSByZW1vdmluZyB0aGUgdHlwZSBhcmd1bWVudHMuY29kZVR5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZVR5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZWNvZGVUeXBlQmVmb3JlRmFjdG9yeUZhY3RvcnkgY29uc3RydWN0b3JzIGNhbm5vdCBoYXZlIGEgcmV0dXJuIHR5cGUuVHJ5IHJlbW92aW5nIHRoZSB0eXBlIGFwcGVhcmluZyBiZWZvcmUgJ2ZhY3RvcnknLlR5cGVCZWZvcmVGYWN0b3J5bWVzc2FnZVR5cGVCZWZvcmVGYWN0b3J5dGVtcGxhdGVUeXBlTm90Rm91bmRUeXBlICcjbmFtZScgbm90IGZvdW5kLmNvZGVUeXBlTm90Rm91bmRUeXBlTm90Rm91bmRVTkRFRklORURfQ0xBU1N0ZW1wbGF0ZVR5cGVPcmlnaW4nI25hbWUnIGlzIGZyb20gJyN1cmknLmNvZGVUeXBlT3JpZ2luVHlwZU9yaWdpbnRlbXBsYXRlVHlwZU9yaWdpbldpdGhGaWxlVXJpJyNuYW1lJyBpcyBmcm9tICcjdXJpJyAoJyN1cmkyJykuY29kZVR5cGVPcmlnaW5XaXRoRmlsZVVyaVR5cGVPcmlnaW5XaXRoRmlsZVVyaWNvZGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUEgdHlwZSB2YXJpYWJsZSBjYW4ndCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYW5vdGhlci5UeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZW1lc3NhZ2VUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZXRlbXBsYXRlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZVRoZSBvdGhlciB0eXBlIHZhcmlhYmxlIG5hbWVkICcjbmFtZScuY29kZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2VUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlY29kZVR5cGVWYXJpYWJsZUluQ29uc3RhbnRDb250ZXh0VHlwZSB2YXJpYWJsZXMgY2FuJ3QgYmUgdXNlZCBhcyBjb25zdGFudHMuVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHRUWVBFX1BBUkFNRVRFUl9JTl9DT05TVF9FWFBSRVNTSU9ObWVzc2FnZVR5cGVWYXJpYWJsZUluQ29uc3RhbnRDb250ZXh0Y29kZVR5cGVWYXJpYWJsZUluU3RhdGljQ29udGV4dFR5cGUgdmFyaWFibGVzIGNhbid0IGJlIHVzZWQgaW4gc3RhdGljIG1lbWJlcnMuVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0bWVzc2FnZVR5cGVWYXJpYWJsZUluU3RhdGljQ29udGV4dGNvZGVUeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nQSB0eXBlIHZhcmlhYmxlIGNhbid0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBpdHMgZW5jbG9zaW5nIGRlY2xhcmF0aW9uLlR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmdDT05GTElDVElOR19UWVBFX1ZBUklBQkxFX0FORF9DTEFTU21lc3NhZ2VUeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nY29kZVR5cGVkZWZJbkNsYXNzVHlwZWRlZnMgY2FuJ3QgYmUgZGVjbGFyZWQgaW5zaWRlIGNsYXNzZXMuVHJ5IG1vdmluZyB0aGUgdHlwZWRlZiB0byB0aGUgdG9wLWxldmVsLlR5cGVkZWZJbkNsYXNzbWVzc2FnZVR5cGVkZWZJbkNsYXNzY29kZVR5cGVkZWZOb3RGdW5jdGlvbkNhbid0IGNyZWF0ZSB0eXBlZGVmIGZyb20gbm9uLWZ1bmN0aW9uIHR5cGUuVHlwZWRlZk5vdEZ1bmN0aW9uSU5WQUxJRF9HRU5FUklDX0ZVTkNUSU9OX1RZUEVtZXNzYWdlVHlwZWRlZk5vdEZ1bmN0aW9udGVtcGxhdGVVbmRlZmluZWRHZXR0ZXJUaGUgZ2V0dGVyICcjbmFtZScgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcjdHlwZScuVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZ2V0dGVyLCBvciBkZWZpbmluZyBhIGdldHRlciBvciBmaWVsZCBuYW1lZCAnI25hbWUnLmNvZGVVbmRlZmluZWRHZXR0ZXJVbmRlZmluZWRHZXR0ZXJ0ZW1wbGF0ZVVuZGVmaW5lZE1ldGhvZFRoZSBtZXRob2QgJyNuYW1lJyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN0eXBlJy5UcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBtZXRob2QsIG9yIGRlZmluaW5nIGEgbWV0aG9kIG5hbWVkICcjbmFtZScuY29kZVVuZGVmaW5lZE1ldGhvZFVuZGVmaW5lZE1ldGhvZHRlbXBsYXRlVW5kZWZpbmVkU2V0dGVyVGhlIHNldHRlciAnI25hbWUnIGlzbid0IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3R5cGUnLlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIHNldHRlciwgb3IgZGVmaW5pbmcgYSBzZXR0ZXIgb3IgZmllbGQgbmFtZWQgJyNuYW1lJy5jb2RlVW5kZWZpbmVkU2V0dGVyVW5kZWZpbmVkU2V0dGVyY29kZVVuZXhwZWN0ZWREb2xsYXJJblN0cmluZ0EgJyQnIGhhcyBzcGVjaWFsIG1lYW5pbmcgaW5zaWRlIGEgc3RyaW5nLCBhbmQgbXVzdCBiZSBmb2xsb3dlZCBieSBhbiBpZGVudGlmaWVyIG9yIGFuIGV4cHJlc3Npb24gaW4gY3VybHkgYnJhY2VzICh7fSkuVHJ5IGFkZGluZyBhIGJhY2tzbGFzaCAoXCkgdG8gZXNjYXBlIHRoZSAnJCcuVW5leHBlY3RlZERvbGxhckluU3RyaW5nVU5FWFBFQ1RFRF9ET0xMQVJfSU5fU1RSSU5HbWVzc2FnZVVuZXhwZWN0ZWREb2xsYXJJblN0cmluZ3RlbXBsYXRlVW5leHBlY3RlZFRva2VuVW5leHBlY3RlZCB0b2tlbiAnI2xleGVtZScuY29kZVVuZXhwZWN0ZWRUb2tlblVuZXhwZWN0ZWRUb2tlblVORVhQRUNURURfVE9LRU50ZW1wbGF0ZVVubWF0Y2hlZFRva2VuQ2FuJ3QgZmluZCAnI3N0cmluZycgdG8gbWF0Y2ggJyNsZXhlbWUnLmNvZGVVbm1hdGNoZWRUb2tlblVubWF0Y2hlZFRva2VudGVtcGxhdGVVbnJlc29sdmVkUHJlZml4SW5UeXBlQW5ub3RhdGlvbicjbmFtZS4jbmFtZTInIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGJlY2F1c2UgJyNuYW1lJyBpc24ndCBkZWZpbmVkLmNvZGVVbnJlc29sdmVkUHJlZml4SW5UeXBlQW5ub3RhdGlvblVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9udGVtcGxhdGVVbnNwZWNpZmllZCNzdHJpbmdjb2RlVW5zcGVjaWZpZWRVbnNwZWNpZmllZHRlbXBsYXRlVW5zdXBwb3J0ZWRPcGVyYXRvclRoZSAnI2xleGVtZScgb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZC5jb2RlVW5zdXBwb3J0ZWRPcGVyYXRvclVuc3VwcG9ydGVkT3BlcmF0b3JVTlNVUFBPUlRFRF9PUEVSQVRPUmNvZGVVbnN1cHBvcnRlZFByZWZpeFBsdXMnKycgaXMgbm90IGEgcHJlZml4IG9wZXJhdG9yLlRyeSByZW1vdmluZyAnKycuVW5zdXBwb3J0ZWRQcmVmaXhQbHVzbWVzc2FnZVVuc3VwcG9ydGVkUHJlZml4UGx1c2NvZGVVbnRlcm1pbmF0ZWRDb21tZW50Q29tbWVudCBzdGFydGluZyB3aXRoICcvKicgbXVzdCBlbmQgd2l0aCAnKi8nLlVudGVybWluYXRlZENvbW1lbnRVTlRFUk1JTkFURURfTVVMVElfTElORV9DT01NRU5UbWVzc2FnZVVudGVybWluYXRlZENvbW1lbnR0ZW1wbGF0ZVVudGVybWluYXRlZFN0cmluZ1N0cmluZyBzdGFydGluZyB3aXRoICNzdHJpbmcgbXVzdCBlbmQgd2l0aCAjc3RyaW5nMi5jb2RlVW50ZXJtaW5hdGVkU3RyaW5nVW50ZXJtaW5hdGVkU3RyaW5nVU5URVJNSU5BVEVEX1NUUklOR19MSVRFUkFMY29kZVVudGVybWluYXRlZFRva2VuSW5jb21wbGV0ZSB0b2tlbi5VbnRlcm1pbmF0ZWRUb2tlbm1lc3NhZ2VVbnRlcm1pbmF0ZWRUb2tlbnRlbXBsYXRlVW50cmFuc2xhdGFibGVVcmlOb3QgZm91bmQ6ICcjdXJpJ2NvZGVVbnRyYW5zbGF0YWJsZVVyaVVudHJhbnNsYXRhYmxlVXJpdGVtcGxhdGVVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyJyNuYW1lJyBpcyBkZXByZWNhdGVkLmNvZGVVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllcmNvZGVWYXJBc1R5cGVOYW1lVGhlIGtleXdvcmQgJ3ZhcicgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgbmFtZS5WYXJBc1R5cGVOYW1lbWVzc2FnZVZhckFzVHlwZU5hbWVjb2RlVmFyUmV0dXJuVHlwZVRoZSByZXR1cm4gdHlwZSBjYW4ndCBiZSAndmFyJy5UcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ3ZhcicsIG9yIHJlcGxhY2luZyBpdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSByZXR1cm4gdHlwZS5WYXJSZXR1cm5UeXBlbWVzc2FnZVZhclJldHVyblR5cGVjb2RlVm9pZEV4cHJlc3Npb25UaGlzIGV4cHJlc3Npb24gaGFzIHR5cGUgJ3ZvaWQnIGFuZCBjYW4ndCBiZSB1c2VkLlZvaWRFeHByZXNzaW9uVVNFX09GX1ZPSURfUkVTVUxUbWVzc2FnZVZvaWRFeHByZXNzaW9udGVtcGxhdGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHlUaGUgaW50ZWdlciBsaXRlcmFsICNzdHJpbmcgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBpbiBKYXZhU2NyaXB0LlRyeSBjaGFuZ2luZyB0aGUgbGl0ZXJhbCB0byBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gSmF2YXNjcmlwdC4gSW4gSmF2YXNjcmlwdCAjc3RyaW5nMiBpcyB0aGUgbmVhcmVzdCB2YWx1ZSB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LmNvZGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHlXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHljb2RlV2l0aEJlZm9yZUV4dGVuZHNUaGUgZXh0ZW5kcyBjbGF1c2UgbXVzdCBiZSBiZWZvcmUgdGhlIHdpdGggY2xhdXNlLlRyeSBtb3ZpbmcgdGhlIGV4dGVuZHMgY2xhdXNlIGJlZm9yZSB0aGUgd2l0aCBjbGF1c2UuV2l0aEJlZm9yZUV4dGVuZHNtZXNzYWdlV2l0aEJlZm9yZUV4dGVuZHNjb2RlWWllbGRBc0lkZW50aWZpZXIneWllbGQnIGNhbid0IGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllciBpbiAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJyBtZXRob2RzLllpZWxkQXNJZGVudGlmaWVybWVzc2FnZVlpZWxkQXNJZGVudGlmaWVyY29kZVlpZWxkTm90R2VuZXJhdG9yJ3lpZWxkJyBjYW4gb25seSBiZSB1c2VkIGluICdzeW5jKicgb3IgJ2FzeW5jKicgbWV0aG9kcy5ZaWVsZE5vdEdlbmVyYXRvcllJRUxEX0lOX05PTl9HRU5FUkFUT1JtZXNzYWdlWWllbGROb3RHZW5lcmF0b3JpdGVtaXplTmFtZXMgLSBfd2l0aEFyZ3VtZW50c0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uTm8gbmFtZSBwcm92aWRlZFRoZSBjbGFzcyAnJyBpcyBhYnN0cmFjdCBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLl93aXRoQXJndW1lbnRzQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uRmFjdG9yeSByZWRpcmVjdHMgdG8gY2xhc3MgJycsIHdoaWNoIGlzIGFic3RyYWN0IGFuZCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuX3dpdGhBcmd1bWVudHNBY2Nlc3NFcnJvckFjY2VzcyBlcnJvcjogJ193aXRoQXJndW1lbnRzQW1iaWd1b3VzU3VwZXJ0eXBlc190eXBlX3R5cGUybGFiZWxlcnR5cGVQYXJ0c2xhYmVsVHlwZXR5cGUyUGFydHN0eXBlMicgY2FuJ3QgaW1wbGVtZW50IGJvdGggJycgYW5kICdvcmlnaW5NZXNzYWdlc193aXRoQXJndW1lbnRzQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZVRoZSBhcmd1bWVudCB0eXBlICcnIGNhbid0IGJlIGFzc2lnbmVkIHRvIHRoZSBwYXJhbWV0ZXIgdHlwZSAnVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIsIG9yIGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvICdfd2l0aEFyZ3VtZW50c0FzY2lpQ29udHJvbENoYXJhY3RlcmNvZGVQb2ludHVuaWNvZGVVK3RvVXBwZXJDYXNlcGFkTGVmdFRoZSBjb250cm9sIGNoYXJhY3RlciAgY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy5fd2l0aEFyZ3VtZW50c0JhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlbmFtZTJGb3VuZCB1bnN1cHBvcnRlZCB1c2VzIG9mICcnIGluIHN1cGVydHlwZSAnX3dpdGhBcmd1bWVudHNCb3VuZElzc3VlVmlhQ3ljbGVOb25TaW1wbGljaXR5R2VuZXJpYyB0eXBlICcnIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiB0aGUgYm91bmRzIG9mIGl0cyBvd24gdHlwZSB2YXJpYWJsZXMuIEl0IGlzIHJlZmVyZW5jZWQgaW5kaXJlY3RseSB0aHJvdWdoICdUcnkgcHJvdmlkaW5nIHR5cGUgYXJndW1lbnRzIHRvICcnIGhlcmUgb3IgdG8gc29tZSBvdGhlciByYXcgdHlwZXMgaW4gdGhlIGJvdW5kcyBhbG9uZyB0aGUgcmVmZXJlbmNlIGNoYWluLl93aXRoQXJndW1lbnRzQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5JyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gdGhlIGJvdW5kcyBvZiBpdHMgb3duIHR5cGUgdmFyaWFibGVzLicgaGVyZS5fd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kcycgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIGEgdHlwZSB2YXJpYWJsZSBib3VuZC5fd2l0aEFyZ3VtZW50c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uQ2FuJ3QgYnJlYWsgdG8gJycgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uX3dpdGhBcmd1bWVudHNCdWlsdEluSWRlbnRpZmllckFzVHlwZXRva2VuVGhlIGJ1aWx0LWluIGlkZW50aWZpZXIgJycgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUuX3dpdGhBcmd1bWVudHNCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb25DYW4ndCB1c2UgJycgYXMgYSBuYW1lIGhlcmUuX3dpdGhBcmd1bWVudHNDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yJyBoYXMgYSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cy5fd2l0aEFyZ3VtZW50c0Nhbm5vdFJlYWRTZGtTcGVjaWZpY2F0aW9uTm8gc3RyaW5nIHByb3ZpZGVkVW5hYmxlIHRvIHJlYWQgdGhlICdsaWJyYXJpZXMuanNvbicgc3BlY2lmaWNhdGlvbiBmaWxlOgogIF93aXRoQXJndW1lbnRzQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzQ2FuJ3QgaW5mZXIgYSByZXR1cm4gdHlwZSBmb3IgJycgYXMgc29tZSBvZiB0aGUgaW5oZXJpdGVkIG1lbWJlcnMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuX3dpdGhBcmd1bWVudHNDYW50SW5mZXJUeXBlRHVlVG9DaXJjdWxhcml0eUNhbid0IGluZmVyIHRoZSB0eXBlIG9mICcnOiBjaXJjdWxhcml0eSBmb3VuZCBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuX3dpdGhBcmd1bWVudHNDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNDYW4ndCBpbmZlciBhIHR5cGUgZm9yICdfd2l0aEFyZ3VtZW50c0NhbnRSZWFkRmlsZXVyaV9FcnJvciB3aGVuIHJlYWRpbmcgJyc6IF93aXRoQXJndW1lbnRzQ2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50JyBpcyBub3Qgc3VwcG9ydGVkIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLl93aXRoQXJndW1lbnRzQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCcgY2FuJ3QgYmUgdXNlZCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24gYmVjYXVzZSBpdCdzIG1hcmtlZCBhcyAnZGVmZXJyZWQnIHdoaWNoIG1lYW5zIGl0IGlzbid0IGF2YWlsYWJsZSB1bnRpbCBsb2FkZWQuX3dpdGhBcmd1bWVudHNDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZENsYXNzICcnIGluaGVyaXRzIG11bHRpcGxlIG1lbWJlcnMgbmFtZWQgJycgd2l0aCBpbmNvbXBhdGlibGUgc2lnbmF0dXJlcy5UcnkgYWRkaW5nIGEgZGVjbGFyYXRpb24gb2YgJycgdG8gJ193aXRoQXJndW1lbnRzQ29uZmxpY3RpbmdNb2RpZmllcnNzdHJpbmcyTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvckNvbmZsaWN0cyB3aXRoIGNvbnN0cnVjdG9yICdfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhGYWN0b3J5Q29uZmxpY3RzIHdpdGggZmFjdG9yeSAnX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoTWVtYmVyQ29uZmxpY3RzIHdpdGggbWVtYmVyICdfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoU2V0dGVyQ29uZmxpY3RzIHdpdGggc2V0dGVyICdfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlQ29uZmxpY3RzIHdpdGggdHlwZSB2YXJpYWJsZSAnX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEZWZlcnJlZExpYnJhcnlfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnRfY29uc3RhbnRjb25zdGFudFBhcnRzbGFiZWxDb25zdGFudFRoZSBlbGVtZW50ICcnIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgZXhpc3RpbmcgZWxlbWVudCBpbiB0aGUgc2V0Ll93aXRoQXJndW1lbnRzQ29uc3RFdmFsRHVwbGljYXRlS2V5VGhlIGtleSAnJyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGtleSBpbiB0aGUgbWFwLl93aXRoQXJndW1lbnRzQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbCcgZG9lcyBub3QgaGF2ZSBhIHByaW1pdGl2ZSBvcGVyYXRvciAnPT0nLl93aXRoQXJndW1lbnRzQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2VUaGlzIGFzc2VydGlvbiBmYWlsZWQgd2l0aCBtZXNzYWdlOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyVGhlIHR5cGUgJycgaXMgbm90IGEgY29uc3RhbnQgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgdHlwZSBwYXJhbWV0ZXIsIG9ubHkgaW5zdGFudGlhdGVkIHR5cGVzIGFyZSBhbGxvd2VkLl93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlQmluYXJ5IG9wZXJhdG9yICcnIG9uICcnIHJlcXVpcmVzIG9wZXJhbmQgb2YgdHlwZSAnJywgYnV0IHdhcyBvZiB0eXBlICdfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZUJpbmFyeSBvcGVyYXRvciAnPT0nIHJlcXVpcmVzIHJlY2VpdmVyIGNvbnN0YW50ICcnIG9mIHR5cGUgJ051bGwnLCAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgb3IgJ1N0cmluZycsIGJ1dCB3YXMgb2YgdHlwZSAnX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvblRoZSBtZXRob2QgJycgY2FuJ3QgYmUgaW52b2tlZCBvbiAnJyB3aXRoaW4gYSBjb25zdCBjb250ZXh0Ll93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0VGhlIHByb3BlcnR5ICcnIGNhbid0IGJlIGFjY2Vzc2VkIG9uICdfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uVGhlIGludm9jYXRpb24gb2YgJycgaXMgbm90IGFsbG93ZWQgd2l0aGluIGEgY29uc3QgY29udGV4dC5fd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZFRoZSAnJyBjYW4ndCBiZSB1c2VkIGFzIHBhcnQgb2YgYSBzdHJpbmcgaW50ZXJwb2xhdGlvbiB3aXRoaW4gYSBjb25zdCBjb250ZXh0LCBvbmx5IHZhbHVlcyBvZiB0eXBlICdudWxsJywgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsIG9yICdTdHJpbmcnIGNhbiBiZSB1c2VkLl93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWVUaGUgc3ltYm9sIG5hbWUgbXVzdCBiZSBhIHZhbGlkIHB1YmxpYyBEYXJ0IG1lbWJlciBuYW1lLCBwdWJsaWMgY29uc3RydWN0b3IgbmFtZSwgb3IgbGlicmFyeSBuYW1lLCBvcHRpb25hbGx5IHF1YWxpZmllZCwgYnV0IHdhcyAnX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkVHlwZUV4cGVjdGVkIGNvbnN0YW50ICcnIHRvIGJlIG9mIHR5cGUgJ193aXRoQXJndW1lbnRzQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsX3dpdGhBcmd1bWVudHNDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0c3RyaW5nMycgcmVxdWlyZXMgbm9uLW5lZ2F0aXZlIG9wZXJhbmQsIGJ1dCB3YXMgJ193aXRoQXJndW1lbnRzQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsQ2FuJ3QgaGF2ZSBhIG5vbi1jb25zdGFudCAgbGl0ZXJhbCB3aXRoaW4gYSBjb25zdCBjb250ZXh0Ll93aXRoQXJndW1lbnRzQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldFRoZSB2YXJpYWJsZSAnJyBpcyBub3QgYSBjb25zdGFudCwgb25seSBjb25zdGFudCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZC5fd2l0aEFyZ3VtZW50c0NvbnN0RXZhbFplcm9EaXZpc29yJyByZXF1aXJlcyBub24temVybyBkaXZpc29yLCBidXQgZGl2aXNvciB3YXMgJzAnLl93aXRoQXJndW1lbnRzQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplclRoZSBjb25zdCB2YXJpYWJsZSAnJyBtdXN0IGJlIGluaXRpYWxpemVkLl93aXRoQXJndW1lbnRzQ29uc3RydWN0b3JOb3RGb3VuZENvdWxkbid0IGZpbmQgY29uc3RydWN0b3IgJ193aXRoQXJndW1lbnRzQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lQ29udGV4dFRoZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3MgaXMgJ193aXRoQXJndW1lbnRzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb25DYW4ndCBjb250aW51ZSBhdCAnX3dpdGhBcmd1bWVudHNDb3VsZE5vdFBhcnNlVXJpQ291bGRuJ3QgcGFyc2UgVVJJICcnOgogIF93aXRoQXJndW1lbnRzQ3ljbGVJblR5cGVWYXJpYWJsZXNUeXBlICcnIGlzIGEgYm91bmQgb2YgaXRzZWxmIHZpYSAnX3dpdGhBcmd1bWVudHNDeWNsaWNDbGFzc0hpZXJhcmNoeScgaXMgYSBzdXBlcnR5cGUgb2YgaXRzZWxmLl93aXRoQXJndW1lbnRzQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzQ3ljbGljIGRlZmluaXRpb24gb2YgZmFjdG9yeSAnX3dpdGhBcmd1bWVudHNDeWNsaWNUeXBlZGVmVGhlIHR5cGVkZWYgJycgaGFzIGEgcmVmZXJlbmNlIHRvIGl0c2VsZi5fd2l0aEFyZ3VtZW50c0RlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JDYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBoZXJlIGJlY2F1c2UgYW55IGRlZmF1bHQgdmFsdWVzIG9mICcnIHdvdWxkIGJlIHVzZWQgaW5zdGVhZC5fd2l0aEFyZ3VtZW50c0RlZmVycmVkUHJlZml4RHVwbGljYXRlZENhbid0IHVzZSB0aGUgbmFtZSAnJyBmb3IgYSBkZWZlcnJlZCBsaWJyYXJ5LCBhcyB0aGUgbmFtZSBpcyB1c2VkIGVsc2V3aGVyZS5fd2l0aEFyZ3VtZW50c0RlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlJyBpcyB1c2VkIGhlcmUuX3dpdGhBcmd1bWVudHNEZWZlcnJlZFR5cGVBbm5vdGF0aW9uJyBpcyBkZWZlcnJlZCBsb2FkZWQgdmlhIHByZWZpeCAnJyBhbmQgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYW5ub3RhdGlvbi5UcnkgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQgb2YgJycgb3IgdXNlIGEgc3VwZXJ0eXBlIG9mICcnIHRoYXQgaXNuJ3QgZGVmZXJyZWQuX3dpdGhBcmd1bWVudHNEaWxsT3V0bGluZVN1bW1hcnljb3VudDJfbnVtMV9udW0yX251bTNObyBjb3VudCBwcm92aWRlZE5vIG51bWJlciBwcm92aWRlZG51bTFudW0ybnVtM0luZGV4ZWQgIGxpYnJhcmllcyAoIGJ5dGVzKSBpbiBtcywgdGhhdCBpcywKIGJ5dGVzL21zLCBhbmQKIG1zL2xpYnJhcmllcy5fd2l0aEFyZ3VtZW50c0RpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzJyBjYW4ndCB1c2UgaXRzZWxmIGFzIGEgYm91bmQuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50VGhlIGxhYmVsICcnIHdhcyBhbHJlYWR5IHVzZWQgaW4gdGhpcyBzd2l0Y2ggc3RhdGVtZW50Ll93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uJyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZVByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICdfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlJyBpcyBpbXBsaWVkIGJ5IHRoaXMgZGVmaW5pdGlvbi5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWREZWNsYXJhdGlvblVzZScgYmVjYXVzZSBpdCBpcyBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRFeHBvcnR1cmkyX3VyaTInIGlzIGV4cG9ydGVkIGZyb20gYm90aCAnX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRXhwb3J0SW5UeXBlX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkSW1wb3J0JyBpcyBpbXBvcnRlZCBmcm9tIGJvdGggJ193aXRoQXJndW1lbnRzRHVwbGljYXRlZEltcG9ydEluVHlwZV93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlFeHBvcnRBIGxpYnJhcnkgd2l0aCBuYW1lICcnIGlzIGV4cG9ydGVkIG1vcmUgdGhhbiBvbmNlLl93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0JyBpcyBhbHNvIGV4cG9ydGVkIGhlcmUuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUltcG9ydCcgaXMgaW1wb3J0ZWQgbW9yZSB0aGFuIG9uY2UuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQnIGlzIGFsc28gaW1wb3J0ZWQgaGVyZS5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRNb2RpZmllclRoZSBtb2RpZmllciAnJyB3YXMgYWxyZWFkeSBzcGVjaWZpZWQuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2FuJ3QgZGVjbGFyZSAnJyBiZWNhdXNlIGl0IHdhcyBhbHJlYWR5IHVzZWQgaW4gdGhpcyBzY29wZS5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZVByZXZpb3VzIHVzZSBvZiAnX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTmFtZWRBcmd1bWVudER1cGxpY2F0ZWQgbmFtZWQgYXJndW1lbnQgJ193aXRoQXJndW1lbnRzRHVwbGljYXRlZFBhcmFtZXRlck5hbWVEdXBsaWNhdGVkIHBhcmFtZXRlciBuYW1lICdfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lQ2F1c2VPdGhlciBwYXJhbWV0ZXIgbmFtZWQgJ193aXRoQXJndW1lbnRzRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZ05hbWUgb2YgZW51bSBjb25zdGFudCAnJyBjYW4ndCBiZSB0aGUgc2FtZSBhcyB0aGUgZW51bSdzIG93biBuYW1lLl93aXRoQXJndW1lbnRzRXhwZWN0ZWRBZnRlckJ1dEdvdEV4cGVjdGVkICcnIGFmdGVyIHRoaXMuX3dpdGhBcmd1bWVudHNFeHBlY3RlZEJ1dEdvdCcgYmVmb3JlIHRoaXMuX3dpdGhBcmd1bWVudHNFeHBlY3RlZENsYXNzTWVtYmVyRXhwZWN0ZWQgYSBjbGFzcyBtZW1iZXIsIGJ1dCBnb3QgJ193aXRoQXJndW1lbnRzRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5QSAgbXVzdCBoYXZlIGEgYm9keSwgZXZlbiBpZiBpdCBpcyBlbXB0eS5fd2l0aEFyZ3VtZW50c0V4cGVjdGVkRGVjbGFyYXRpb25FeHBlY3RlZCBhIGRlY2xhcmF0aW9uLCBidXQgZ290ICdfd2l0aEFyZ3VtZW50c0V4cGVjdGVkRW51bUJvZHlFeHBlY3RlZCBhIGVudW0gYm9keSwgYnV0IGdvdCAnX3dpdGhBcmd1bWVudHNFeHBlY3RlZEZ1bmN0aW9uQm9keUV4cGVjdGVkIGEgZnVuY3Rpb24gYm9keSwgYnV0IGdvdCAnX3dpdGhBcmd1bWVudHNFeHBlY3RlZElkZW50aWZpZXJFeHBlY3RlZCBhbiBpZGVudGlmaWVyLCBidXQgZ290ICdfd2l0aEFyZ3VtZW50c0V4cGVjdGVkSW5zdGVhZCcgaW5zdGVhZCBvZiB0aGlzLl93aXRoQXJndW1lbnRzRXhwZWN0ZWRTdHJpbmdFeHBlY3RlZCBhIFN0cmluZywgYnV0IGdvdCAnX3dpdGhBcmd1bWVudHNFeHBlY3RlZFRva2VuRXhwZWN0ZWQgdG8gZmluZCAnX3dpdGhBcmd1bWVudHNFeHBlY3RlZFR5cGVFeHBlY3RlZCBhIHR5cGUsIGJ1dCBnb3QgJ193aXRoQXJndW1lbnRzRXhwZXJpbWVudE5vdEVuYWJsZWRUaGlzIHJlcXVpcmVzIHRoZSAnJyBleHBlcmltZW50IHRvIGJlIGVuYWJsZWQuX3dpdGhBcmd1bWVudHNFeHBvcnRIaWRlc0V4cG9ydEV4cG9ydCBvZiAnJyAoZnJvbSAnJykgaGlkZXMgZXhwb3J0IGZyb20gJ193aXRoQXJndW1lbnRzRXh0ZW5kaW5nRW51bScgaXMgYW4gZW51bSBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuX3dpdGhBcmd1bWVudHNFeHRlbmRpbmdSZXN0cmljdGVkJyBpcyByZXN0cmljdGVkIGFuZCBjYW4ndCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC5fd2l0aEFyZ3VtZW50c0V4dHJhbmVvdXNNb2RpZmllckNhbid0IGhhdmUgbW9kaWZpZXIgJ1RyeSByZW1vdmluZyAnX3dpdGhBcmd1bWVudHNGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWRFeHBlY3RlZCB2YWx1ZSBhZnRlciAnX3dpdGhBcmd1bWVudHNGZmlEYXJ0VHlwZU1pc21hdGNoJyB0byBiZSBhIHN1YnR5cGUgb2YgJ193aXRoQXJndW1lbnRzRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzJyBjYW5ub3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuX3dpdGhBcmd1bWVudHNGZmlGaWVsZEFubm90YXRpb25GaWVsZCAnJyByZXF1aXJlcyBleGFjdGx5IG9uZSBhbm5vdGF0aW9uIHRvIGRlY2xhcmUgaXRzIEMrKyB0eXBlLCB3aGljaCBjYW5ub3QgYmUgVm9pZC4gZGFydDpmZmkgU3RydWN0cyBjYW5ub3QgaGF2ZSByZWd1bGFyIERhcnQgZmllbGRzLl93aXRoQXJndW1lbnRzRmZpRmllbGRJbml0aWFsaXplcicgaXMgYSBkYXJ0OmZmaSBQb2ludGVyIHRvIGEgc3RydWN0IGZpZWxkIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdHJ1Y3RvciBleGVjdXRpb24uX3dpdGhBcmd1bWVudHNGZmlGaWVsZE5vQW5ub3RhdGlvbicgcmVxdWlyZXMgbm8gYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgaXQgaXMgYSBQb2ludGVyIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIHR5cGUgaW4gRGFydCBhbmQgQysrLl93aXRoQXJndW1lbnRzRmZpTm90U3RhdGljIGV4cGVjdHMgYSBzdGF0aWMgZnVuY3Rpb24gYXMgcGFyYW1ldGVyLiBkYXJ0OmZmaSBvbmx5IHN1cHBvcnRzIGNhbGxpbmcgc3RhdGljIERhcnQgZnVuY3Rpb25zIGZyb20gYy5fd2l0aEFyZ3VtZW50c0ZmaVN0cnVjdEdlbmVyaWNTdHJ1Y3QgJycgc2hvdWxkIG5vdCBiZSBnZW5lcmljLl93aXRoQXJndW1lbnRzRmZpVHlwZUludmFsaWRFeHBlY3RlZCB0eXBlICcnIHRvIGJlIGEgdmFsaWQgYW5kIGluc3RhbnRpYXRlZCBzdWJ0eXBlIG9mICdOYXRpdmVUeXBlJy5fd2l0aEFyZ3VtZW50c0ZmaVR5cGVNaXNtYXRjaF90eXBlM3R5cGUzUGFydHN0eXBlMycgdG8gYmUgJycsIHdoaWNoIGlzIHRoZSBEYXJ0IHR5cGUgY29ycmVzcG9uZGluZyB0byAnX3dpdGhBcmd1bWVudHNGZmlUeXBlVW5zaXplZE1ldGhvZCAnJyBjYW5ub3QgYmUgY2FsbGVkIG9uIHNvbWV0aGluZyBvZiB0eXBlICcnIGFzIHRoaXMgdHlwZSBpcyB1bnNpemVkLl93aXRoQXJndW1lbnRzRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZScgbXVzdCBpbmhlcml0IGZyb20gJ1N0cnVjdDw+Jy5fd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZEZpbmFsIGZpZWxkICcnIGlzIG5vdCBpbml0aWFsaXplZC5fd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3InIGlzIG5vdCBpbml0aWFsaXplZCBieSB0aGlzIGNvbnN0cnVjdG9yLl93aXRoQXJndW1lbnRzRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplclRoZSBmaW5hbCB2YXJpYWJsZSAnX3dpdGhBcmd1bWVudHNGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQnIGlzIGEgZmluYWwgaW5zdGFuY2UgdmFyaWFibGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLl93aXRoQXJndW1lbnRzRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UnIHdhcyBpbml0aWFsaXplZCBoZXJlLl93aXRoQXJndW1lbnRzRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlQSB2YWx1ZSBvZiB0eXBlICcnIGNhbid0IGJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUgb2YgdHlwZSAnX3dpdGhBcmd1bWVudHNGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUnIHVzZWQgaW4gdGhlICdmb3InIGxvb3AgbXVzdCBpbXBsZW1lbnQgJ193aXRoQXJndW1lbnRzR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnRVbmV4cGVjdGVkIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSAnJyBpbmZlcnJlZCBhcyBhIHR5cGUgYXJndW1lbnQuX3dpdGhBcmd1bWVudHNHZXR0ZXJOb3RGb3VuZEdldHRlciBub3QgZm91bmQ6ICdfd2l0aEFyZ3VtZW50c0lsbGVnYWxNaXhpbicgY2FuJ3QgYmUgbWl4ZWQgaW4uX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycycgYXMgYSBtaXhpbiBiZWNhdXNlIGl0IGhhcyBjb25zdHJ1Y3RvcnMuX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlVGhpcyBjb25zdHJ1Y3RvciBwcmV2ZW50cyB1c2luZyAnJyBhcyBhIG1peGluLl93aXRoQXJndW1lbnRzSWxsZWdhbFJlY3Vyc2l2ZVR5cGVJbGxlZ2FsIHJlY3Vyc2l2ZSB0eXBlICdfd2l0aEFyZ3VtZW50c0ltcGxlbWVudHNSZXBlYXRlZCcgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgb25jZS5UcnkgcmVtb3ZpbmcgIG9mIHRoZSBvY2N1cnJlbmNlcy5fd2l0aEFyZ3VtZW50c0ltcGxlbWVudHNTdXBlckNsYXNzJyBjYW4ndCBiZSB1c2VkIGluIGJvdGggJ2V4dGVuZHMnIGFuZCAnaW1wbGVtZW50cycgY2xhdXNlcy5fd2l0aEFyZ3VtZW50c0ltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kQ2Fubm90IGludm9rZSBhbiBpbnN0YW5jZSBvZiAnJyBiZWNhdXNlIGl0IGRlY2xhcmVzICdjYWxsJyB0byBiZSBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIG1ldGhvZC5fd2l0aEFyZ3VtZW50c0ltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHRPdmVycmlkZSB3YXMgaW50cm9kdWNlZCB3aGVuIHRoZSBtaXhpbiAnJyB3YXMgYXBwbGllZCB0byAnX3dpdGhBcmd1bWVudHNJbXBvcnRIaWRlc0ltcG9ydEltcG9ydCBvZiAnJykgaGlkZXMgaW1wb3J0IGZyb20gJ193aXRoQXJndW1lbnRzSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZVRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0eXBlICcnIGlzbid0IGEgc3VidHlwZSBvZiAnX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRUeXBlIGFyZ3VtZW50ICcnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJycgb2YgdGhlIHR5cGUgdmFyaWFibGUgJ193aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlJyBpbiB0aGUgcmV0dXJuIHR5cGUuX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZW5hbWUzbmFtZTQnIGluIHRoZSBzdXBlcnR5cGUgJycgb2YgY2xhc3MgJ193aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZEluZmVycmVkIHR5cGUgYXJndW1lbnQgJ193aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWRfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWRfd2l0aEFyZ3VtZW50c0luZmVycmVkUGFja2FnZVVyaUludGVycHJldGluZyB0aGlzIGFzIHBhY2thZ2UgVVJJLCAnX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCksIGJ1dCB0aGUgZmlsZSB3YXMgbm90IHNlbGYtY29udGFpbmVkLiBUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlICBpbiB5b3VyIGVycm9yIHJlcG9ydCwgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBmaWxlIGluY2x1ZGVzIHlvdXIgc291cmNlIGNvZGUuCkVpdGhlciB3YXksIHlvdSBzaG91bGQgcHJvYmFibHkgZGVsZXRlIHRoZSBmaWxlIHNvIGl0IGRvZXNuJ3QgdXNlIHVubmVjZXNzYXJ5IGRpc2sgc3BhY2UuX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wKSwgYnV0IHRoZSBmaWxlIHdhcyBub3Qgc2VsZi1jb250YWluZWQuIFRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJycuClN0YWNrdHJhY2UgaW5jbHVkZWQgJycuClRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuCklmIHlvdSBhcmUgY29tZm9ydGFibGUgd2l0aCBpdCwgaXQgd291bGQgaW1wcm92ZSB0aGUgY2hhbmNlcyBvZiBmaXhpbmcgYW55IGJ1ZyBpZiB5b3UgaW5jbHVkZWQgdGhlIGZpbGUgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbU5vRHVtcCcuClRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuX3dpdGhBcmd1bWVudHNJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkJyBpc24ndCBhbiBpbnN0YW5jZSBmaWVsZCBvZiB0aGlzIGNsYXNzLl93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3JPbmx5IGNvbnN0cnVjdG9ycyBjYW4gaGF2ZSBpbml0aWFsaXplcnMsIGFuZCAnJyBpcyBub3QgYSBjb25zdHJ1Y3Rvci5fd2l0aEFyZ3VtZW50c0luaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaFRoZSB0eXBlIG9mIHBhcmFtZXRlciAnJywgJycgaXMgbm90IGEgc3VidHlwZSBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCdzIHR5cGUsICdUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgcGFyYW1ldGVyICcnIHRvIGEgc3VidHlwZSBvZiAnX3dpdGhBcmd1bWVudHNJbnB1dEZpbGVOb3RGb3VuZElucHV0IGZpbGUgbm90IGZvdW5kOiBfd2l0aEFyZ3VtZW50c0ludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlVGhlIGludGVnZXIgbGl0ZXJhbCAgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgaW4gNjQgYml0cy5fd2l0aEFyZ3VtZW50c0ludGVyZmFjZUNoZWNrQ29udGV4dEJvdGggbWVtYmVycyBhcmUgaW5oZXJpdGVkIGJ5IHRoZSBub24tYWJzdHJhY3QgY2xhc3MgJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZE5vIGNvbnN0cnVjdG9yIG5hbWVkICcnIGluICdfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eU5vbi1jb250ZXh0IG1lc3NhZ2UgaGFzIGNvbnRleHQgc2V2ZXJpdHk6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydENvbXBpbGF0aW9uIGFib3J0ZWQgZHVlIHRvIGZhdGFsICcnIGF0Ogpfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkVGhlcmUncyBubyBpbmZlcnJlZCB0eXBlIGZvciAnX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZENvdWxkbid0IGZpbmQgJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbl93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzQ2FuJ3QgYWNjZXNzIHByaXZhdGUgY29uc3RydWN0b3IgJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eS5zdGFjayBpc24ndCBlbXB0eToKICBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXNUaGVyZSdzIGFscmVhZHkgYW4gaW5mZXJyZWQgdHlwZSwgJycsIGZvciAnX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkJywgYnV0IGdvdCAnX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWRVbmhhbmRsZWQgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkVW5pbXBsZW1lbnRlZCBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAnX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lVGhlIFVSSSAnJyBoYXMgbm8gc2NoZW1lLl93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVmVyaWZpY2F0aW9uRXJyb3JWZXJpZmljYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBwcm9ncmFtIGZhaWxlZDoKX3dpdGhBcmd1bWVudHNJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQnLCBpdCBjYW4gYmUgZWl0aGVyICcnIG9yICdfd2l0aEFyZ3VtZW50c0ludmFsaWRBc3NpZ25tZW50VHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSBsZWZ0IGhhbmQgc2lkZSwgb3IgY2FzdGluZyB0aGUgcmlnaHQgaGFuZCBzaWRlIHRvICdfd2l0aEFyZ3VtZW50c0ludmFsaWRCcmVha1RhcmdldF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RGdW5jdGlvbkV4cHJUaGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB0eXBlICcnIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJ193aXRoQXJndW1lbnRzSW52YWxpZENhc3RMaXRlcmFsTGlzdFRoZSBsaXN0IGxpdGVyYWwgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxNYXBUaGUgbWFwIGxpdGVyYWwgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxTZXRUaGUgc2V0IGxpdGVyYWwgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb25UaGUgbG9jYWwgZnVuY3Rpb24gaGFzIHR5cGUgJycgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICdfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TmV3RXhwclRoZSBjb25zdHJ1Y3RvciByZXR1cm5zIHR5cGUgJ193aXRoQXJndW1lbnRzSW52YWxpZENhc3RTdGF0aWNNZXRob2RUaGUgc3RhdGljIG1ldGhvZCBoYXMgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb25UaGUgdG9wIGxldmVsIGZ1bmN0aW9uIGhhcyB0eXBlICdfd2l0aEFyZ3VtZW50c0ludmFsaWRDb250aW51ZVRhcmdldF93aXRoQXJndW1lbnRzSW52YWxpZE9wZXJhdG9yVGhlIHN0cmluZyAnJyBpc24ndCBhIHVzZXItZGVmaW5hYmxlIG9wZXJhdG9yLl93aXRoQXJndW1lbnRzSW52YWxpZFBhY2thZ2VVcmlJbnZhbGlkIHBhY2thZ2UgVVJJICdfd2l0aEFyZ3VtZW50c0ludm9rZU5vbkZ1bmN0aW9uJyBpc24ndCBhIGZ1bmN0aW9uIG9yIG1ldGhvZCBhbmQgY2FuJ3QgYmUgaW52b2tlZC5fd2l0aEFyZ3VtZW50c0xhYmVsTm90Rm91bmRDYW4ndCBmaW5kIGxhYmVsICdfd2l0aEFyZ3VtZW50c0xhbmd1YWdlVmVyc2lvblRvb0hpZ2hUaGUgc3BlY2lmaWVkIGxhbmd1YWdlIHZlcnNpb24gaXMgdG9vIGhpZ2guIFRoZSBoaWdoZXN0IHN1cHBvcnRlZCBsYW5ndWFnZSB2ZXJzaW9uIGlzIF93aXRoQXJndW1lbnRzTG9hZExpYnJhcnlIaWRlc01lbWJlclRoZSBsaWJyYXJ5ICcnIGRlZmluZXMgYSB0b3AtbGV2ZWwgbWVtYmVyIG5hbWVkICdsb2FkTGlicmFyeScuIFRoaXMgbWVtYmVyIGlzIGhpZGRlbiBieSB0aGUgc3BlY2lhbCBtZW1iZXIgJ2xvYWRMaWJyYXJ5JyB0aGF0IHRoZSBsYW5ndWFnZSBhZGRzIHRvIHN1cHBvcnQgZGVmZXJyZWQgbG9hZGluZy5fd2l0aEFyZ3VtZW50c0xvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0TG9jYWwgZGVmaW5pdGlvbiBvZiAnJyBoaWRlcyBleHBvcnQgZnJvbSAnX3dpdGhBcmd1bWVudHNMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCcgaGlkZXMgaW1wb3J0IGZyb20gJ193aXRoQXJndW1lbnRzTWV0aG9kTm90Rm91bmRNZXRob2Qgbm90IGZvdW5kOiAnX3dpdGhBcmd1bWVudHNNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzTm8gdHlwZSBhcmd1bWVudHMgcHJvdmlkZWQsICBwb3NzaWJsZS5fd2l0aEFyZ3VtZW50c01pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlJyBpcyBkZWZpbmVkIGhlcmUuX3dpdGhBcmd1bWVudHNNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdF9uYW1lc05vIG5hbWVzIHByb3ZpZGVkVGhlIG5vbi1hYnN0cmFjdCBjbGFzcyAnJyBpcyBtaXNzaW5nIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlc2UgbWVtYmVyczoKX3dpdGhBcmd1bWVudHNNaXNzaW5nUGFydE9mJyBhcyBhIHBhcnQsIGJlY2F1c2UgaXQgaGFzIG5vICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi5fd2l0aEFyZ3VtZW50c01peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUnIGRvZXNuJ3QgaW1wbGVtZW50ICcnIHNvIGl0IGNhbid0IGJlIHVzZWQgd2l0aCAnX3dpdGhBcmd1bWVudHNNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzc1R5cGUgcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgaW5mZXJyZWQgZm9yIHRoZSBtaXhpbiAnJyBiZWNhdXNlICcnIGRvZXMgbm90IGltcGxlbWVudCB0aGUgbWl4aW4ncyBzdXBlcnR5cGUgY29uc3RyYWludCAnX3dpdGhBcmd1bWVudHNNb2RpZmllck91dE9mT3JkZXInIHNob3VsZCBiZSBiZWZvcmUgdGhlIG1vZGlmaWVyICdfd2l0aEFyZ3VtZW50c05hbWVkTWl4aW5PdmVycmlkZUNvbnRleHRPdmVycmlkZSB3YXMgaW50cm9kdWNlZCBpbiB0aGUgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MgJ193aXRoQXJndW1lbnRzTm9Gb3JtYWxzVHJ5IGFkZGluZyAnKCknIGFmdGVyICcnLCBvciBhZGQgJ2dldCcgYmVmb3JlICcnIHRvIGRlY2xhcmUgYSBnZXR0ZXIuX3dpdGhBcmd1bWVudHNOb1N1Y2hOYW1lZFBhcmFtZXRlck5vIG5hbWVkIHBhcmFtZXRlciB3aXRoIHRoZSBuYW1lICdfd2l0aEFyZ3VtZW50c05vbkFzY2lpSWRlbnRpZmllcmNoYXJhY3RlcnJ1bmVzTm90IGEgY2hhcmFjdGVyICdUaGUgbm9uLUFTQ0lJIGNoYXJhY3RlciAnJyAoKSBjYW4ndCBiZSB1c2VkIGluIGlkZW50aWZpZXJzLCBvbmx5IGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLl93aXRoQXJndW1lbnRzTm9uQXNjaWlXaGl0ZXNwYWNlVGhlIG5vbi1BU0NJSSBzcGFjZSBjaGFyYWN0ZXIgX3dpdGhBcmd1bWVudHNOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZUJvdW5kIG9mIHRoaXMgdmFyaWFibGUgcmVmZXJlbmNlcyByYXcgdHlwZSAnX3dpdGhBcmd1bWVudHNOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHZhcmlhYmxlICcnIGZyb20gdGhlIHNhbWUgZGVjbGFyYXRpb24uX3dpdGhBcmd1bWVudHNOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbicgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYmVjYXVzZSAnJyBkb2Vzbid0IHJlZmVyIHRvIGFuIGltcG9ydCBwcmVmaXguX3dpdGhBcmd1bWVudHNOb3RBVHlwZScgaXNuJ3QgYSB0eXBlLl93aXRoQXJndW1lbnRzTm90QmluYXJ5T3BlcmF0b3InIGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLl93aXRoQXJndW1lbnRzTm90Q29uc3RhbnRFeHByZXNzaW9uIGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24uX3dpdGhBcmd1bWVudHNPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2hPcGVyYXRvciAnJyBzaG91bGQgaGF2ZSB6ZXJvIG9yIG9uZSBwYXJhbWV0ZXIuX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMCcgc2hvdWxkbid0IGhhdmUgYW55IHBhcmFtZXRlcnMuX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMScgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyLl93aXRoQXJndW1lbnRzT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDInIHNob3VsZCBoYXZlIGV4YWN0bHkgdHdvIHBhcmFtZXRlcnMuX3dpdGhBcmd1bWVudHNPdmVycmlkZGVuTWV0aG9kQ2F1c2VUaGlzIGlzIHRoZSBvdmVycmlkZGVuIG1ldGhvZCAoJycpLl93aXRoQXJndW1lbnRzT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzJyBoYXMgZmV3ZXIgbmFtZWQgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJ193aXRoQXJndW1lbnRzT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMnIGhhcyBmZXdlciBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICdfd2l0aEFyZ3VtZW50c092ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlcicgZG9lc24ndCBoYXZlIHRoZSBuYW1lZCBwYXJhbWV0ZXIgJycgb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJ193aXRoQXJndW1lbnRzT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMnIGhhcyBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICdfd2l0aEFyZ3VtZW50c092ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyVGhlIHBhcmFtZXRlciAnJyBvZiB0aGUgbWV0aG9kICcnIGhhcyB0eXBlICcnLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyB0eXBlLCAnJywgaW4gdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnQ2hhbmdlIHRvIGEgc3VwZXJ0eXBlIG9mICcnLCBvciwgZm9yIGEgY292YXJpYW50IHBhcmFtZXRlciwgYSBzdWJ0eXBlLl93aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlVGhlIHJldHVybiB0eXBlIG9mIHRoZSBtZXRob2QgJycgaXMgJycsIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSByZXR1cm4gdHlwZSwgJycsIG9mIHRoZSBvdmVycmlkZGVuIG1ldGhvZCwgJ0NoYW5nZSB0byBhIHN1YnR5cGUgb2YgJ193aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2hEZWNsYXJlZCB0eXBlIHZhcmlhYmxlcyBvZiAnJyBkb2Vzbid0IG1hdGNoIHRob3NlIG9uIG92ZXJyaWRkZW4gbWV0aG9kICdfd2l0aEFyZ3VtZW50c1BhY2thZ2VOb3RGb3VuZENvdWxkIG5vdCByZXNvbHZlIHRoZSBwYWNrYWdlICdfd2l0aEFyZ3VtZW50c1BhY2thZ2VzRmlsZUZvcm1hdFByb2JsZW0gaW4gcGFja2FnZXMgY29uZmlndXJhdGlvbiBmaWxlOiBfd2l0aEFyZ3VtZW50c1BhcnRPZkluTGlicmFyeUNhbid0IGltcG9ydCAnJywgYmVjYXVzZSBpdCBoYXMgYSAncGFydCBvZicgZGVjbGFyYXRpb24uVHJ5IHJlbW92aW5nIHRoZSAncGFydCBvZicgZGVjbGFyYXRpb24sIG9yIHVzaW5nICcnIGFzIGEgcGFydC5fd2l0aEFyZ3VtZW50c1BhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2hVc2luZyAnJyBhcyBwYXJ0IG9mICcnIGJ1dCBpdHMgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHNheXMgJ193aXRoQXJndW1lbnRzUGFydE9mVXJpTWlzbWF0Y2h1cmkzX3VyaTNfd2l0aEFyZ3VtZW50c1BhcnRPZlVzZVVyaV93aXRoQXJndW1lbnRzUGFydFR3aWNlJyBhcyBhIHBhcnQgbW9yZSB0aGFuIG9uY2UuX3dpdGhBcmd1bWVudHNQYXRjaEluamVjdGlvbkZhaWxlZENhbid0IGluamVjdCAnJyBpbnRvICdfd2l0aEFyZ3VtZW50c1JlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudCcgZG9lc24ndCBleHRlbmQgJ193aXRoQXJndW1lbnRzUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZFJlZGlyZWN0aW9uIGNvbnN0cnVjdG9yIHRhcmdldCBub3QgZm91bmQ6ICdfd2l0aEFyZ3VtZW50c1Nka1Jvb3ROb3RGb3VuZFNESyByb290IGRpcmVjdG9yeSBub3QgZm91bmQ6IF93aXRoQXJndW1lbnRzU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kU0RLIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIG5vdCBmb3VuZDogX3dpdGhBcmd1bWVudHNTZGtTdW1tYXJ5Tm90Rm91bmRTREsgc3VtbWFyeSBub3QgZm91bmQ6IF93aXRoQXJndW1lbnRzU2V0dGVyTm90Rm91bmRTZXR0ZXIgbm90IGZvdW5kOiAnX3dpdGhBcmd1bWVudHNTb3VyY2VCb2R5U3VtbWFyeUJ1aWx0IGJvZGllcyBmb3IgIGNvbXBpbGF0aW9uIHVuaXRzICggbXMvY29tcGlsYXRpb24gdW5pdC5fd2l0aEFyZ3VtZW50c1NvdXJjZU91dGxpbmVTdW1tYXJ5QnVpbHQgb3V0bGluZXMgZm9yIF93aXRoQXJndW1lbnRzU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaENhbid0IGFzc2lnbiBzcHJlYWQgZWxlbWVudHMgb2YgdHlwZSAnJyB0byBjb2xsZWN0aW9uIGVsZW1lbnRzIG9mIHR5cGUgJ193aXRoQXJndW1lbnRzU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbnRyeSBrZXlzIG9mIHR5cGUgJycgdG8gbWFwIGVudHJ5IGtleXMgb2YgdHlwZSAnX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaENhbid0IGFzc2lnbiBzcHJlYWQgZW50cnkgdmFsdWVzIG9mIHR5cGUgJycgdG8gbWFwIGVudHJ5IHZhbHVlcyBvZiB0eXBlICdfd2l0aEFyZ3VtZW50c1NwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoVW5leHBlY3RlZCB0eXBlICcnIG9mIGEgbWFwIHNwcmVhZCBlbnRyeS4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhIE1hcC5fd2l0aEFyZ3VtZW50c1NwcmVhZFR5cGVNaXNtYXRjaCcgb2YgYSBzcHJlYWQuICBFeHBlY3RlZCAnZHluYW1pYycgb3IgYW4gSXRlcmFibGUuX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvclN1cGVyY2xhc3MgaGFzIG5vIGNvbnN0cnVjdG9yIG5hbWVkICdfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvclRoZSBzdXBlcmNsYXNzLCAnJywgaGFzIG5vIHVubmFtZWQgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBubyBhcmd1bWVudHMuX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzSGFzTm9HZXR0ZXJTdXBlcmNsYXNzIGhhcyBubyBnZXR0ZXIgbmFtZWQgJ193aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vTWV0aG9kU3VwZXJjbGFzcyBoYXMgbm8gbWV0aG9kIG5hbWVkICdfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb1NldHRlclN1cGVyY2xhc3MgaGFzIG5vIHNldHRlciBuYW1lZCAnX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaFN1cGVyY2xhc3MgZG9lc24ndCBoYXZlIGEgbWV0aG9kIG5hbWVkICcnIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzLl93aXRoQXJndW1lbnRzU3VwZXJ0eXBlSXNJbGxlZ2FsJyBjYW4ndCBiZSB1c2VkIGFzIHN1cGVydHlwZS5fd2l0aEFyZ3VtZW50c1N1cGVydHlwZUlzVHlwZVZhcmlhYmxlVGhlIHR5cGUgdmFyaWFibGUgJ193aXRoQXJndW1lbnRzU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUnIG9mIHRoZSBzd2l0Y2ggZXhwcmVzc2lvbiBpc24ndCBhc3NpZ25hYmxlIHRvIHRoZSB0eXBlICcnIG9mIHRoaXMgY2FzZSBleHByZXNzaW9uLl93aXRoQXJndW1lbnRzVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplckNhbid0IGFjY2VzcyAndGhpcycgaW4gYSBmaWVsZCBpbml0aWFsaXplciB0byByZWFkICdfd2l0aEFyZ3VtZW50c1RoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyQ2FuJ3QgYWNjZXNzICcnIGluIGEgZmllbGQgaW5pdGlhbGl6ZXIuX3dpdGhBcmd1bWVudHNUb29GZXdBcmd1bWVudHNUb28gZmV3IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAgcmVxdWlyZWQsICBnaXZlbi5fd2l0aEFyZ3VtZW50c1Rvb01hbnlBcmd1bWVudHNUb28gbWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50czogIGFsbG93ZWQsIGJ1dCAgZm91bmQuX3dpdGhBcmd1bWVudHNUeXBlQXJndW1lbnRNaXNtYXRjaEV4cGVjdGVkICB0eXBlIGFyZ3VtZW50cy5fd2l0aEFyZ3VtZW50c1R5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZUNhbid0IHVzZSB0eXBlIGFyZ3VtZW50cyB3aXRoIHR5cGUgdmFyaWFibGUgJ193aXRoQXJndW1lbnRzVHlwZU5vdEZvdW5kJyBub3QgZm91bmQuX3dpdGhBcmd1bWVudHNUeXBlT3JpZ2luJyBpcyBmcm9tICdfd2l0aEFyZ3VtZW50c1R5cGVPcmlnaW5XaXRoRmlsZVVyaV93aXRoQXJndW1lbnRzVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZVRoZSBvdGhlciB0eXBlIHZhcmlhYmxlIG5hbWVkICdfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZEdldHRlclRoZSBnZXR0ZXIgJycgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICdUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBnZXR0ZXIsIG9yIGRlZmluaW5nIGEgZ2V0dGVyIG9yIGZpZWxkIG5hbWVkICdfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZE1ldGhvZFRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIG1ldGhvZCwgb3IgZGVmaW5pbmcgYSBtZXRob2QgbmFtZWQgJ193aXRoQXJndW1lbnRzVW5kZWZpbmVkU2V0dGVyVGhlIHNldHRlciAnVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcgc2V0dGVyLCBvciBkZWZpbmluZyBhIHNldHRlciBvciBmaWVsZCBuYW1lZCAnX3dpdGhBcmd1bWVudHNVbmV4cGVjdGVkVG9rZW5VbmV4cGVjdGVkIHRva2VuICdfd2l0aEFyZ3VtZW50c1VubWF0Y2hlZFRva2VuQ2FuJ3QgZmluZCAnJyB0byBtYXRjaCAnX3dpdGhBcmd1bWVudHNVbnJlc29sdmVkUHJlZml4SW5UeXBlQW5ub3RhdGlvbicgaXNuJ3QgZGVmaW5lZC5fd2l0aEFyZ3VtZW50c1Vuc3BlY2lmaWVkX3dpdGhBcmd1bWVudHNVbnN1cHBvcnRlZE9wZXJhdG9yJyBvcGVyYXRvciBpcyBub3Qgc3VwcG9ydGVkLl93aXRoQXJndW1lbnRzVW50ZXJtaW5hdGVkU3RyaW5nU3RyaW5nIHN0YXJ0aW5nIHdpdGggIG11c3QgZW5kIHdpdGggX3dpdGhBcmd1bWVudHNVbnRyYW5zbGF0YWJsZVVyaU5vdCBmb3VuZDogJ193aXRoQXJndW1lbnRzVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllcicgaXMgZGVwcmVjYXRlZC5fd2l0aEFyZ3VtZW50c1dlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseSBjYW4ndCBiZSByZXByZXNlbnRlZCBleGFjdGx5IGluIEphdmFTY3JpcHQuVHJ5IGNoYW5naW5nIHRoZSBsaXRlcmFsIHRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiBKYXZhc2NyaXB0LiBJbiBKYXZhc2NyaXB0ICBpcyB0aGUgbmVhcmVzdCB2YWx1ZSB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LmZhc3RhLnNldmVyaXR5ZXJyb3JMZWdhY3lXYXJuaW5naW50ZXJuYWxQcm9ibGVtc2V2ZXJpdHlFbnVtTmFtZXNDT05URVhURVJST1JFUlJPUl9MRUdBQ1lfV0FSTklOR0lHTk9SRURJTlRFUk5BTF9QUk9CTEVNV0FSTklOR3NldmVyaXR5RW51bVZhbHVlc3NldmVyaXR5UHJlZml4ZXNFcnJvckludGVybmFsIHByb2JsZW1XYXJuaW5nQ29udGV4dHNldmVyaXR5VGV4dHNpbnRlcm5hbCBwcm9ibGVtZnJvbnRfZW5kLmtlcm5lbF9nZW5lcmF0b3JfaW1wbHdpdGhDcmFzaFJlcG9ydGluZ0RpbGxUYXJnZXRLZXJuZWxUYXJnZXRwcmludENvbXBvbmVudFRleHRzZXJpYWxpemVDb21wb25lbnR2ZXJpZnlDb21wb25lbnRMb2FkZXJJbnRlcm5hbENvbXBpbGVyUmVzdWx0a2VybmVsVGFyZ2V0Rm9yVGVzdGluZ2J1aWxkU3VtbWFyeWJ1aWxkQ29tcG9uZW50dHJ1bmNhdGVTdW1tYXJ5aW5jbHVkZU9mZnNldHNmc3NvdXJjZUxvYWRlcnVyaVRyYW5zbGF0b3JkaWxsVGFyZ2V0ZXh0ZXJuYWxMaWJzdG9TZXRleGNsdWRlZGxvYWRlcmFwcGVuZExpYnJhcmllc2ZpbHRlcmlucHV0U3VtbWFyeWJ1aWxkT3V0bGluZXNrZXJuZWxUYXJnZXRzZXRFbnRyeVBvaW50c3N1bW1hcnlDb21wb25lbnRsaWJyYXJ5RmlsdGVyaXNTb3VyY2VMaWJyYXJ5dHJpbW1lZFN1bW1hcnlDb21wb25lbnRUcmFuc2Zvcm1lZCBvdXRsaW5laW5jbHVkZVNvdXJjZXNHZW5lcmF0ZWQgb3V0bGluZUdlbmVyYXRlZCBjb21wb25lbnRjdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmdmYXN0YS5zY2FubmVydW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZUxhbmd1YWdlVmVyc2lvbkNoYW5nZWRTY2FubmVyQ29uZmlndXJhdGlvblN0cmluZ1NjYW5uZXJVdGY4Qnl0ZXNTY2FubmVyc2Nhbm5lclJlY292ZXJ5TGFuZ3VhZ2VWZXJzaW9uVG9rZW5pc0JpbmFyeU9wZXJhdG9yaXNUZXJuYXJ5T3BlcmF0b3Jpc1VuYXJ5T3BlcmF0b3JidWlsZFVuZXhwZWN0ZWRDaGFyYWN0ZXJUb2tlbkVPRl9UT0tFTktleXdvcmRSZWNvdmVydG9rZW5zU2Nhbm5lcmhhc0Vycm9yc2NvbmZpZ3VyYXRpb25jb25maWd0b2tlbml6ZVNjYW5uZXJSZXN1bHR1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJzY2FuaW5jbHVkZUNvbW1lbnRzbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZFtieXRlc106IHRoZSBsYXN0IGJ5dGUgbXVzdCBiZSBudWxsLnNjYW5uZXJzY2FuU3RyaW5nc291cmNlIG11c3Qgbm90IGJlIG51bGxfdG9rZW5pemVBbmRSZWNvdmVyZW5jb2RlZmFzdGEucmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5U3Vic3RpdHV0aW9uRW5zdXJlTG9hZGVkUmVkaXJlY3RpbmdGYWN0b3J5Qm9keWludGVybmFsdW5yZXNvbHZlZHVucmVzb2x2ZWROYW1lYm9keUV4cHJlc3Npb25nZXRWYWx1ZXJlc3RvcmVGcm9tRGlsbGVuY29kZVR5cGVBcmd1bWVudHN2YXJOYW1lUHJlZml4I3R5cGVBcmdkZWNvZGVUeXBlQXJndW1lbnRzZW5jb2RlZFJlZGlyZWN0aW9uVGFyZ2V0bGV0TmFtZWhlbHBlcmlzTG9hZGVkZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keWdldFJlZGlyZWN0aW9uVGFyZ2V0dG9ydG9pc2V0b3J0b2lzZUJvZHloYXJlZW5zdXJlTG9hZGVkaGFyZUJvZHluZXh0VG9ydG9pc2VuZXh0VHlwZUFyZ3VtZW50c3N1YnR5cGVBcmd1bWVudENvdW50bmV4dFR5cGVBcmd1bWVudENvdW50SW5jcmVtZW50YWxDb21waWxlcndvcmtlcklucHV0Q2FjaGVpbmNyZW1lbnRhbENvbXBpbGVybGlicmFyeVRvSW5wdXREaWxsV29ya2VySW5wdXRDb21wb25lbnRkaWdlc3RkaWdlc3RzRXF1YWxmcm9udF9lbmQuc3RhbmRhcmRfZmlsZV9zeXN0ZW1pb2luc3RhbmNlU3RhbmRhcmRGaWxlU3lzdGVtIG9ubHkgc3VwcG9ydHMgZmlsZToqIGFuZCBkYXRhOiogVVJJc19Jb0ZpbGVTeXN0ZW1FbnRpdHlfdG9GaWxlU3lzdGVtRXhjZXB0aW9ub3NNZXNzYWdlY29udGVudEFzQnl0ZXNjb250ZW50QXNTdHJpbmdmb3JjZUJ1aWxkRGlydm1EaXJlY3RvcnkvYmluLy4uLy4uLy4uL2xpYi9faW50ZXJuYWwvdHJhbnNsYXRlU2Rrb3JnLWRhcnRsYW5nLXNkay9zZGsvLi4vc2RrL2xpYi9saWJyYXJpZXMuanNvbnNkay9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9pc0V4aXN0aW5nRmlsZWZhc3RhLm9wZXJhdG9yc09wZXJhdG9yLmFkZE9wZXJhdG9yLmJpdHdpc2VBbmRPcGVyYXRvci5iaXR3aXNlTm90T3BlcmF0b3IuYml0d2lzZU9yT3BlcmF0b3IuYml0d2lzZVhvck9wZXJhdG9yLmRpdmlkZU9wZXJhdG9yLmVxdWFsc09wZXJhdG9yLmdyZWF0ZXJUaGFuT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbHNPcGVyYXRvci5pbmRleEdldE9wZXJhdG9yLmluZGV4U2V0T3BlcmF0b3IubGVmdFNoaWZ0T3BlcmF0b3IubGVzc1RoYW5PcGVyYXRvci5sZXNzVGhhbkVxdWFsc09wZXJhdG9yLm1vZHVsb09wZXJhdG9yLm11bHRpcGx5T3BlcmF0b3IucmlnaHRTaGlmdE9wZXJhdG9yLnRyaXBsZVNoaWZ0T3BlcmF0b3Iuc3VidHJhY3RPcGVyYXRvci50cnVuY2F0aW5nRGl2aWRlT3BlcmF0b3IudW5hcnlNaW51c2JpdHdpc2VBbmRiaXR3aXNlTm90Yml0d2lzZU9yYml0d2lzZVhvcmRpdmlkZWVxdWFsc2dyZWF0ZXJUaGFuZ3JlYXRlclRoYW5FcXVhbHNpbmRleEdldGluZGV4U2V0bGVmdFNoaWZ0bGVzc1RoYW5sZXNzVGhhbkVxdWFsc21vZHVsb211bHRpcGx5cmlnaHRTaGlmdHN1YnRyYWN0dHJ1bmNhdGluZ0RpdmlkZXVuYXJ5TWludXMlPj4+b3BlcmF0b3JUb1N0cmluZ29wZXJhdG9yUmVxdWlyZWRBcmd1bWVudENvdW50ZmFzdGEucGFyc2VyLmFzeW5jX21vZGlmaWVyQXN5bmNNb2RpZmllci5TeW5jQXN5bmNNb2RpZmllci5TeW5jU3RhckFzeW5jTW9kaWZpZXIuQXN5bmNBc3luY01vZGlmaWVyLkFzeW5jU3RhcmZhc3RhLnNjYW5uZXIuY2hhcmFjdGVycyRFT0YkU1RYJEJTJFZUQUIkRkYkU1BBQ0UkQkFORyRQRVJDRU5UJEFNUEVSU0FORCRTUSRPUEVOX1BBUkVOJENMT1NFX1BBUkVOJFNUQVIkUExVUyRDT01NQSRNSU5VUyRQRVJJT0QkU0xBU0gkMSQyJDMkNCQ1JDYkNyQ4JENPTE9OJFNFTUlDT0xPTiRMVCRFUSRHVCRRVUVTVElPTiRBVCRCJEMkRCRFJEYkRyRIJEkkSiRLJEwkTSROJE8kUCRRJFIkUyRUJFUkViRXJFgkWSRPUEVOX1NRVUFSRV9CUkFDS0VUJENMT1NFX1NRVUFSRV9CUkFDS0VUJENBUkVUJEJBQ0tQSU5HJGIkYyRkJGUkZiRoJGkkaiRrJGwkbSRuJG8kcCRxJHIkdCR1JHYkdyR4JHkkT1BFTl9DVVJMWV9CUkFDS0VUJEJBUiRDTE9TRV9DVVJMWV9CUkFDS0VUJFRJTERFJE5CU1AkRklSU1RfU1VSUk9HQVRFJExBU1RfU1VSUk9HQVRFJExBU1RfQ09ERV9QT0lOVGlzRGlnaXRjaGFyYWN0ZXJDb2RlaXNIZXhEaWdpdGhleERpZ2l0VmFsdWVoZXhEaWdpdGlzVW5pY29kZVNjYWxhclZhbHVlaXNVdGYxNkxlYWRTdXJyb2dhdGVpc1V0ZjE2VHJhaWxTdXJyb2dhdGVmYXN0YS51dGlsLmxpbmtMaW5rQnVpbGRlckltcGxlbWVudGF0aW9uTGlua0l0ZXJhdG9yTWFwcGVkTGlua0l0ZXJhYmxlbm8gZWxlbWVudHNlbGVtZW50c2VwYXJhdGVkQnlzbG93TGVuZ3RobGlua2ZubWFwVG9MaXN0cmV2ZXJzZXJldmVyc2VQcmVwZW5kQWxsZnJvbXNraXBJbmRleCAgb3V0IG9mIHJhbmdlTGluay5oYXNoQ29kZWdldDpsZW5ndGhObyBlbGVtZW50c01vcmUgdGhhbiBvbmUgZWxlbWVudGV2ZXJ5X3Vuc3VwcG9ydGVkY2FzdGVsZW1lbnRBdGZpcnN0V2hlcmVvckVsc2Vpbml0aWFsVmFsdWVmb2xsb3dlZEJ5Z2V0Omxhc3RsYXN0V2hlcmVyZWR1Y2VyZXR5cGVzaW5nbGVXaGVyZXNraXBXaGlsZXRha2V0YWtlV2hpbGV3aGVyZVR5cGVtZXRob2RfcmVkaXJlY3RpbmcjI3R5cGVBcmcwZmFzdGEudXRpbC5saW5rX2ltcGxlbWVudGF0aW9uSXRlcmFibGVCYXNlVHJhbnNmb3JtYXRpb25TX2xpbmtNYXBwZWRMaW5rSXRlcmF0b3JfdHJhbnNmb3JtYXRpb25bICBdbXlFbGVtZW50c0xpbmtFbnRyeS5oYXNoQ29kZWxhc3RMaW5rZmFzdGEudXRpbC5yZWxhdGl2aXplYmFzZWVxdWFsc05DU3RvTG93ZXJDYXNlbm9ybWFsaXpldXNlckluZm9ob3N0cG9ydHF1ZXJ5ZnJhZ21lbnRsYXN0SW5kZXhPZnVyaVBhcnRzYmFzZVBhcnRzY29tbW9ubmV3X2FwaUNvbXBpbGVySW5wdXRQcm92aWRlclJlYWRTdHJpbmdGcm9tVXJpQ29tcGlsZXJPdXRwdXRQcm92aWRlckRpYWdub3N0aWNIYW5kbGVySElOVFZFUkJPU0VfSU5GT0NSQVNIbGVnX2FwaWltcGxHZW5lcmljVGFza01lYXN1cmVyQ29tcGlsZXJJbXBsbWVhc3VyZXJ1c2VySGFuZGxlclRhc2t1c2VyUHJvdmlkZXJUYXNrbWFrZVJlcG9ydGVydGFza3NEaWFnbm9zdGljIGhhbmRsZXJJbnB1dCBwcm92aWRlcmVuYWJsZVRhc2tNZWFzdXJlbWVudHNsb2djYWxsVXNlckhhbmRsZXJzZXR1cFNka2VudnN1cHBvcnRlZExpYnJhcmllc3NwZWNpZmljYXRpb25VcmlzbG93VGV4dGRhcnQyanNfc2VydmVyZGFydDJqc3NldHVwRHVyYXRpb25lbGFwc2VkV2FsbENsb2Nrc2VsZlRhc2ttZWFzdXJlU3VidGFza2ltcGwucnVudGltaW5nc2NvbXB1dGVUaW1pbmdzX2Zvcm1hdE1zbXNUaW1pbmdzOnRvdGFsRHVyYXRpb25hc3luY0R1cmF0aW9uZWxhcHNlZEFzeW5jV2FsbENsb2NrY3VtdWxhdGVkRHVyYXRpb250aW1pbmdEYXRhdGFza3J1bm5pbmdpc1J1bm5pbmdtaWxsaXNlY29uZHMgICBzdWJ0YXNrc3VidGFza3NzdWJ0aW1lZ2V0U3VidGFza1RpbWVnZXRTdWJ0YXNrSXNSdW5uaW5nID4gbG9uZ2VzdERlc2NyaXB0aW9uZGRlc2NyaXB0aW9ucGFkZGluZ3BlcmNlbnRQYWRkaW5ncGVyY2VudCUpdW5hY2NvdW50ZWREdXJhdGlvbiAgICBUb3RhbCBjb21waWxlLXRpbWUgOyBzZXR1cCAgYXN5bmMgIHVuYWNjb3VudGVkIHJlcG9ydERpYWdub3N0aWNpbmZvc19yZXBvcnREaWFnbm9zdGljTWVzc2FnZWRpYWdub3N0aWNNZXNzYWdlc3BhbnNvdXJjZVNwYW5tZWFzdXJlcmVwb3J0Q3Jhc2hJblVzZXJDb2RlVW5jYXVnaHQgZXhjZXB0aW9uIGluIGRpYWdub3N0aWMgaGFuZGxlcmNhbGxVc2VyUHJvdmlkZXJtZWFzdXJlSW9VbmNhdWdodCBleGNlcHRpb24gaW4gaW5wdXQgcHJvdmlkZXJfRW52aXJvbm1lbnRkZWZpbml0aW9uc19jb21wbGV0ZU1hcHZhbHVlT2ZkYXJ0LmxpYnJhcnkudHJ1ZXRvTWFwX1RpbWluZ0RhdGFfZGFydExpYnJhcnlFbnZpcm9ubWVudFByZWZpeGRhcnQyanMuY29sb3JzUkVTRVQbWzBtQkxBQ0tfQ09MT1IbWzMwbVJFRF9DT0xPUhtbMzFtR1JFRU5fQ09MT1IbWzMybVlFTExPV19DT0xPUhtbMzNtQkxVRV9DT0xPUhtbMzRtTUFHRU5UQV9DT0xPUhtbMzVtQ1lBTl9DT0xPUhtbMzZtV0hJVEVfQ09MT1IbWzM3bXdyYXBibGFja3JlZGdyZWVueWVsbG93Ymx1ZW1hZ2VudGFjeWFud2hpdGVkYXJ0MmpzLmlvLnNvdXJjZV9maWxlTG9jYXRpb25Qcm92aWRlclNvdXJjZUZpbGVjYWNoZWRLZXJuZWxTb3VyY2VsaW5lU3RhcnRzQ2FjaGVrZXJuZWxTb3VyY2VzbG93VXRmOFplcm9UZXJtaW5hdGVkQnl0ZXNsaW5lU3RhcnRzRnJvbVN0cmluZ3N0YXJ0c3Nsb3dTdWJzdHJpbmdpbmNsdWRlU291cmNlTGluZXN0YXJ0TG9jYXRpb25lbmRMb2NhdGlvbmNvbHVtblN0YXJ0bGluZUVuZGNvbHVtbkVuZGJ1ZnRleHRMaW5ldG9Db2x1bW5saW5lc1V0ZjhCeXRlc1NvdXJjZUZpbGV6ZXJvVGVybWluYXRlZENvbnRlbnRsZW5ndGhDYWNoZWNvbnRlbnRDYWNoaW5nVXRmOEJ5dGVzU291cmNlRmlsZVN0cmluZ1NvdXJjZUZpbGVmcm9tVXJpZnJvbU5hbWVCaW5hcnlfemVyb1Rlcm1pbmF0ZUlmTmVjZXNzYXJ5ZGFydDJqcy51dGlsLmVtcHR5c2V0SW1tdXRhYmxlRW1wdHlTZXRSX2ltbXV0YWJsZUVycm9yRW1wdHlTZXQgaXMgaW1tdXRhYmxlbG9va3VwcmVtb3ZlQWxscmVtb3ZlV2hlcmV0ZXN0cmV0YWluQWxscmV0YWluV2hlcmV1bmlvbmludGVyc2VjdGlvbmRpZmZlcmVuY2VfRW1wdHlTZXRJdGVyYXRvcmRhcnQyanMudXRpbC5tYXBsZXRNYXBCYXNlTWFwbGV0X01BUktFUkNBUEFDSVRZX2tleV92YWx1ZV9leHRyYXJlbWFpbmluZ2NvcHlUb2NvcHlGcm9tZWFjaEtleWVhY2hWYWx1ZXZhbHVlSW5kZXhfTWFwbGV0TWFya2VyX01hcGxldEtleUl0ZXJhYmxlbWFwbGV0X01hcGxldFNpbmdsZUl0ZXJhdG9yX2VsZW1lbnRfTWFwbGV0TGlzdEl0ZXJhdG9yX2xpc3RfcmVtYWluaW5nX2luZGV4ZGFydDJqcy51dGlsLnNldGxldFNldEJhc2VTZXRsZXRfY29udGVudHNfbmV3U2V0bmV3U2V0ZWFjaHNldF9TZXRsZXRNYXJrZXJfU2V0bGV0U2luZ2xlSXRlcmF0b3JfU2V0bGV0TGlzdEl0ZXJhdG9ya2VybmVsLmFzdF90b19iaW5hcnlCeXRlc0J1aWxkZXJMaWJyYXJ5RmlsdGVyQmluYXJ5UHJpbnRlcl92YXJpYWJsZUluZGV4ZXJfbGFiZWxJbmRleGVyX3N3aXRjaENhc2VJbmRleGVyX3R5cGVQYXJhbWV0ZXJJbmRleGVyc3RyaW5nSW5kZXhlcl9jb25zdGFudEluZGV4ZXJfc291cmNlVXJpSW5kZXhlcl9jdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uSW5MaWJyYXJ5X2xpYnJhcnlEZXBlbmRlbmN5SW5kZXhfbWV0YWRhdGFTdWJzZWN0aW9uc19tYWluU2lua19tZXRhZGF0YVNpbmtfY29uc3RhbnRzQnl0ZXNTaW5rX2NvbnN0YW50c1Npbmtfc2lua2xpYnJhcnlPZmZzZXRzY2xhc3NPZmZzZXRzcHJvY2VkdXJlT2Zmc2V0c19iaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZV9iaW5hcnlPZmZzZXRGb3JMaW5rVGFibGVfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2Fkc19iaW5hcnlPZmZzZXRGb3JNZXRhZGF0YU1hcHBpbmdzX2JpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlX2JpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGVfY2Fub25pY2FsTmFtZUxpc3Rfa25vd25DYW5vbmljYWxOYW1lTm9uUm9vdFRvcHNfcmVpbmRleGVkQ2Fub25pY2FsTmFtZXNpbnNpZGVFeHRlcm5hbExpYnJhcnlfZW1wdHlOYW1lX2ZsdXNoZmx1c2hBbmREZXN0cm95YWRkQnl0ZWFkZEJ5dGVzYWRkQnl0ZTJhZGRCeXRlNHV0ZjhCeXRlc3dyaXRlU3RyaW5nVGFibGVpbmRleGVycmVxdWlyZWRNaW5MZW5ndGhhbGxvY2F0ZU1pbkxlbmd0aG5ld0luZGV4bmV3TGVuZ3RoY29udmVydGVkcHV0d3JpdGVTdHJpbmdSZWZlcmVuY2VMaXN0c3RyaW5nc3dyaXRlQ29uc3RhbnRSZWZlcmVuY2V3cml0ZUNvbnN0YW50VGFibGV0YWtlQnl0ZXN3cml0ZUNvbnN0YW50VGFibGVFbnRyeW9sZFNpbmtpbml0aWFsT2Zmc2V0d3JpdGVJbnRlZ2Vyd3JpdGVEb3VibGV3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNld3JpdGVDbGFzc1JlZmVyZW5jZXdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2VVbnN1cHBvcnRlZCBjb25zdGFudCB3cml0ZVVyaVJlZmVyZW5jZWl0ZW1zd3JpdGVJdGVtd3JpdGVOb2RlTGlzdGxlbndyaXRlUHJvY2VkdXJlTm9kZUxpc3R3cml0ZVByb2NlZHVyZU5vZGV3cml0ZUZpZWxkTm9kZUxpc3R3cml0ZUZpZWxkTm9kZXdyaXRlQ2xhc3NOb2RlTGlzdHdyaXRlQ2xhc3NOb2Rld3JpdGVDb25zdHJ1Y3Rvck5vZGVMaXN0d3JpdGVDb25zdHJ1Y3Rvck5vZGV3cml0ZVJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yTm9kZUxpc3R3cml0ZVJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yTm9kZXdyaXRlU3dpdGNoQ2FzZU5vZGVMaXN0d3JpdGVTd2l0Y2hDYXNlTm9kZXdyaXRlQ2F0Y2hOb2RlTGlzdHdyaXRlQ2F0Y2hOb2Rld3JpdGVUeXBlZGVmTm9kZUxpc3R3cml0ZVR5cGVkZWZOb2RlX3dyaXRlTm9kZU1ldGFkYXRhd3JpdGVGdW5jdGlvbk5vZGV3cml0ZUFyZ3VtZW50c05vZGV3cml0ZUxpYnJhcnlOb2Rld3JpdGVPcHRpb25hbE5vZGV3cml0ZU9wdGlvbmFsRnVuY3Rpb25Ob2Rld3JpdGVMaW5rVGFibGV3cml0ZUNhbm9uaWNhbE5hbWVFbnRyeWluZGV4TGlua1RhYmxlc2hvdWxkV3JpdGVMaWJyYXJ5Q2Fub25pY2FsTmFtZXNfaW5kZXhMaW5rVGFibGVJbnRlcm5hbGNoaWxkcmVuY2hpbGRyZW5Pck51bGxpc1Jvb3Rjb21wb25lbnRPZmZzZXQyNDI3MTc4NDc5d3JpdGVMaXN0T2ZTdHJpbmdzX2NvbGxlY3RNZXRhZGF0YV93cml0ZU5vZGVNZXRhZGF0YUltcGxjaGVja0Nhbm9uaWNhbE5hbWV3cml0ZUxpYnJhcmllc3dyaXRlVXJpVG9Tb3VyY2Vfd3JpdGVNZXRhZGF0YVNlY3Rpb253cml0ZUNvbXBvbmVudEluZGV4bm9kZU9mZnNldHN1YnNlY3Rpb25Ob2RlcyBvZiB0eXBlICBjYW4ndCBoYXZlIG1ldGFkYXRhLk5vZGUgd3JpdHRlbiBpbnRvIG1ldGFkYXRhIGNhbid0IGhhdmUgbWV0YWRhdGEgKG1ldGFkYXRhOiAsIG5vZGU6IG1ldGFkYXRhTWFwcGluZ2VudGVycHVzaFNjb3BlcG9wU2NvcGVtYXBwaW5nTGVuZ3RobnVtQ29tcG9uZW50SW5kZXhFbnRyaWVzdW5hbGlnbmVkU2l6ZXVyaUFzU3RyaW5nb3V0cHV0U3RyaW5nVmlhQnVmZmVycHJldmlvdXNMaW5lU3RhcnRqaW1wb3J0VXJpQXNTdHJpbmd3cml0ZUxpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlUmVmZXJlbmNlIHRvIGxpYnJhcnkgZGVwZW5kZW5jeSAgb3V0IG9mIHNjb3BlTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3Igd3JpdGVOb25OdWxsUmVmZXJlbmNlR290IG51bGwgcmVmZXJlbmNlbm9uUm9vdFRvcEV4cGVjdGVkIGEgY2Fub25pY2FsIG5hbWUgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAud3JpdGVMaWJyYXJ5UmVmZXJlbmNlYWxsb3dOdWxsRXhwZWN0ZWQgYSBsaWJyYXJ5IHJlZmVyZW5jZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC53cml0ZU9mZnNldEV4cGVjdGVkIGEgY2xhc3MgcmVmZXJlbmNlIHRvIGJlIHZhbGlkIGJ1dCB3YXMgYG51bGxgLndyaXRlQW5ub3RhdGlvbkxpc3R3cml0ZUxpYnJhcnlEZXBlbmRlbmNpZXN3cml0ZUFkZGl0aW9uYWxFeHBvcnRzd3JpdGVMaWJyYXJ5UGFydHNzb3VyY2VSZWZlcmVuY2VzT2Zmc2V0c291cmNlUmVmZXJlbmNlc0NvdW50aW1wb3J0Tm9kZXdyaXRlTGlicmFyeURlcGVuZGVuY3lyZWZwYXJ0Tm9kZXdyaXRlTGlicmFyeVBhcnR3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0d3JpdGVBbm5vdGF0aW9uX2VuY29kZUNsYXNzRmxhZ3NsZXZlbEluZGV4cmVzdG9yZVNjb3BlY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvblNhdmVkd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9ub2xkTGFiZWxzb2xkQ2FzZXNsb2dpY2FsT3BlcmF0b3JJbmRleCYmfHxOb3QgYSBsb2dpY2FsIG9wZXJhdG9yOiBiaWFzZWRWYWx1ZWFic2FkZERvdWJsZXdyaXRlU3RhdGVtZW50T3JFbXB0eV9lbmNvZGVUcnlDYXRjaEZsYWdzbmVlZHNTdGFja1RyYWNld3JpdGVPcHRpb25hbFZhcmlhYmxlRGVjbGFyYXRpb25kZWNsYXJlc2VyaWFsaXphdGlvbiBvZiBleHRlbnNpb24gbm9kZXNkZWZhdWx0Tm9kZXNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBOb2Rlc2RlZmF1bHRDb25zdGFudHNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBDb25zdGFudHNkZWZhdWx0QmFzaWNMaXRlcmFsc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIEJhc2ljTGl0ZXJhbHNkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2VzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgQ29uc3RhbnQgcmVmZXJlbmNlc2RlZmF1bHREYXJ0VHlwZXNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBEYXJ0VHlwZXNkZWZhdWx0RXhwcmVzc2lvbnNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBFeHByZXNzaW9uc2RlZmF1bHRJbml0aWFsaXplcnNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBJbml0aWFsaXplcnNkZWZhdWx0TWVtYmVyc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIE1lbWJlcnNkZWZhdWx0TWVtYmVyUmVmZXJlbmNlc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIE1lbWJlciByZWZlcmVuY2VzZGVmYXVsdFN0YXRlbWVudHNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBTdGF0ZW1lbnRzc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIFRyZWVOb2Rlc3NlcmlhbGl6YXRpb24gb2YgQm9vbENvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgQm9vbENvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIENsYXNzIHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIENvbnN0cnVjdG9yIHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIERvdWJsZUNvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgRG91YmxlQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgRmllbGQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgSW5zdGFuY2VDb25zdGFudHNzZXJpYWxpemF0aW9uIG9mIEluc3RhbmNlQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgSW50Q29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBJbnRDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBMaWJyYXJ5RGVwZW5kZW5jeXNzZXJpYWxpemF0aW9uIG9mIExpYnJhcnlQYXJ0c3NlcmlhbGl6YXRpb24gb2YgTGlzdENvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgTGlzdENvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIFNldENvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgU2V0Q29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgTWFwQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBNYXBDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBOYW1lc3NlcmlhbGl6YXRpb24gb2YgTnVsbENvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgTnVsbENvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIFByb2NlZHVyZSByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBDb21wb25lbnRzc2VyaWFsaXphdGlvbiBvZiBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBTdHJpbmdDb25zdGFudHNzZXJpYWxpemF0aW9uIG9mIFN0cmluZ0NvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIFN5bWJvbENvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgU3ltYm9sQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudHMgc2VyaWFsaXphdGlvbiBvZiBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIFRlYXJPZmZDb25zdGFudHMgc2VyaWFsaXphdGlvbiBvZiBUZWFyT2ZmQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgVHlwZUxpdGVyYWxDb25zdGFudHNzZXJpYWxpemF0aW9uIG9mIFR5cGVMaXRlcmFsQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgVHlwZWRlZiByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBVbmV2YWx1YXRlZENvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgVW5ldmFsdWF0ZWRDb25zdGFudCByZWZlcmVuY2VzVmFyaWFibGVJbmRleGVyc2NvcGVzc3RhY2tIZWlnaHRudW1iZXJPZlZhcmlhYmxlc0xhYmVsSW5kZXhlclN3aXRjaENhc2VJbmRleGVyY2FzZU5vZGVDb25zdGFudEluZGV4ZXJvZmZzZXRzbmV4dE9mZnNldF9wcmludGVyb2xkT2Zmc2V0bmV3T2Zmc2V0VHlwZVBhcmFtZXRlckluZGV4ZXJUeXBlIHBhcmFtZXRlciAgaXMgbm90IGluZGV4ZWRTdHJpbmdJbmRleGVyVXJpSW5kZXhlckJ1ZmZlcmVkU2lua1NJWkVTQUZFX1NJWkVTTUFMTF9idWZmZXJmbHVzaGVkTGVuZ3RoX2RvdWJsZUJ1ZmZlcl9kb3VibGVCdWZmZXJVaW50OGFzVWludDhMaXN0Ynl0ZTFieXRlMmJ5dGUzYnl0ZTRhbHJlYWR5RW1pdHRlZHJlbWFpbmRlcl9NZXRhZGF0YVN1YnNlY3Rpb25CeXRlc1NpbmtOb3RRdWl0ZVN0cmluZ3dyaXRlVXRmOGNvZGVVbml0bmV4dENoYXJrZXJuZWwuYXN0X2Zyb21fYmluYXJ5UGFyc2VFcnJvcmJ5dGVJbmRleCBhdCBJbnZhbGlkS2VybmVsVmVyc2lvbkVycm9yVW5leHBlY3RlZCBLZXJuZWwgdmVyc2lvbiAoZXhwZWN0ZWQgKS5DYW5vbmljYWxOYW1lRXJyb3JDYW5vbmljYWxOYW1lU2RrRXJyb3JfQ29tcG9uZW50SW5kZXhudW1iZXJPZkZpeGVkRmllbGRzYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGViaW5hcnlPZmZzZXRGb3JDYW5vbmljYWxOYW1lc2JpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHNiaW5hcnlPZmZzZXRGb3JNZXRhZGF0YU1hcHBpbmdzYmluYXJ5T2Zmc2V0Rm9yU3RyaW5nVGFibGViaW5hcnlPZmZzZXRGb3JDb25zdGFudFRhYmxlbWFpbk1ldGhvZFJlZmVyZW5jZWxpYnJhcnlDb3VudGNvbXBvbmVudEZpbGVTaXplSW5CeXRlc3ZhcmlhYmxlU3RhY2tsYWJlbFN0YWNrbGFiZWxTdGFja0Jhc2Vzd2l0Y2hDYXNlU3RhY2t0eXBlUGFyYW1ldGVyU3RhY2tfYnl0ZXNfYnl0ZU9mZnNldF9zdHJpbmdUYWJsZV9zb3VyY2VVcmlUYWJsZV9jb25zdGFudFRhYmxlX2xpbmtUYWJsZV90cmFuc2Zvcm1lckZsYWdzX2N1cnJlbnRMaWJyYXJ5X2NvbXBvbmVudFN0YXJ0T2Zmc2V0ZGVidWdQYXRoX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbl9kaXNhYmxlTGF6eVJlYWRpbmdieXRlT2Zmc2V0cmVhZERvdWJsZXJlYWRTdHJpbmdFbnRyeW51bUJ5dGVzbnVtQnl0ZU9yZGVyTWFya3Pvu79fcmVhZE1ldGFkYXRhTWFwcGluZ3NfYXNzb2NpYXRlTWV0YWRhdGFyZWFkU3RyaW5nVGFibGV0YWJsZWVuZE9mZnNldHNzdGFydE9mZnNldHJlYWRDb25zdGFudFRhYmxlcmVhZENvbnN0YW50VGFibGVFbnRyeWNvbnN0YW50VGFncmVhZEV4cHJlc3Npb25yZWFkTGlicmFyeVJlZmVyZW5jZXJlYWRDb25zdGFudFJlZmVyZW5jZXJlYWRDbGFzc1JlZmVyZW5jZWZpZWxkVmFsdWVDb3VudGdldFJlZmVyZW5jZXVuZXhwZWN0ZWQgY29uc3RhbnQgdGFnOiByZWFkVXJpUmVmZXJlbmNlcmVhZFN0cmluZ1JlZmVyZW5jZUxpc3RyZWFkU3RyaW5nT3JOdWxsSWZFbXB0eXJlYWRBbmRDaGVja09wdGlvblRhZ3VuZXhwZWN0ZWQgb3B0aW9uIHRhZzogcmVhZEFubm90YXRpb25MaXN0X2ZpbGxUcmVlTm9kZUxpc3RidWlsZE9iamVjdF9maWxsTm9uVHJlZU5vZGVMaXN0X3NraXBOb2RlTGlzdHNraXBPYmplY3RfbWVyZ2VOYW1lZE5vZGVMaXN0cmVhZE9iamVjdG51bWJlck9mTm9kZXNyZWFkTGlua1RhYmxlbGlua1Jvb3RiaWFzZWRQYXJlbnRJbmRleF9pbmRleENvbXBvbmVudHNzYXZlZEJ5dGVPZmZzZXRzaXplaW5kaWNhdGVkIHNpemUgZG9lcyBub3QgbWF0Y2ggZmlsZSBzaXplcmV2ZXJzZWRjaGVja0Nhbm9uaWNhbE5hbWVzbWFnaWNOb3QgYSAuZGlsbCBmaWxlICh3cm9uZyBtYWdpYyBudW1iZXIpLmNvbXBvbmVudEZpbGVTaXplc2NvbXBvbmVudEZpbGVJbmRleF9yZWFkT25lQ29tcG9uZW50X2NoZWNrQ2Fub25pY2FsTmFtZUNoaWxkcmVuX3JlYWRPbmVDb21wb25lbnRTb3VyY2VyZWFkU2luZ2xlRmlsZUNvbXBvbmVudGludmFsaWQgY29tcG9uZW50IGRhdGFDb25jYXRlbmF0ZWQgY29tcG9uZW50IGZpbGUgZ2l2ZW4gd2hlbiBhIHNpbmdsZSBjb21wb25lbnQgd2FzIGV4cGVjdGVkLlVucmVjb2duaXplZCBieXRlcyBmb2xsb3dpbmcgY29tcG9uZW50IGRhdGFwYXJlbnRDaGlsZHJlbkBtZXRob2RzQHR5cGVkZWZzQGZpZWxkc0BnZXR0ZXJzQHNldHRlcnNAZmFjdG9yaWVzQGNvbnN0cnVjdG9yc2NoZWNrUmVmZXJlbmNlTm9kZWJ1aWxkQ2Fub25pY2FsTmFtZUVycm9yTnVsbCByZWZlcmVuY2UgKCkgKENhbm9uaWNhbCBuYW1lIGFuZCByZWZlcmVuY2UgZG9lc24ndCBhZ3JlZS5SZWZlcmVuY2UgaXMgbnVsbCAocHJvYmxlbU5vZGVsaWJyYXJ5VXJpZGFydDpfcmVhZENvbXBvbmVudEluZGV4Y29tcG9uZW50RmlsZVNpemVzYXZlZEJ5dGVJbmRleE1hbGZvcm1lZCBiaW5hcnk6IFRoaXMgY29tcG9uZW50IGZpbGUncyBjb21wb25lbnQgaW5kZXggaW5kaWNhdGVzIHRoYXQgdGhlIGZpbGVzaXplIHNob3VsZCBiZSAgYnV0IG90aGVyIGNvbXBvbmVudCBpbmRleGVzIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGUgc2l6ZSBzaG91bGQgYmUgZm9ybWF0VmVyc2lvbnJlYWRVcmlUb1NvdXJjZXJlYWRMaXN0T2ZTdHJpbmdzbnVtYmVyT2ZMaWJyYXJpZXNyZWFkTGlicmFyeWdldE1lbWJlclJlZmVyZW5jZUZyb21JbnR1cmlCeXRlc3NvdXJjZUNvZGVsaW5lQ291bnRpbXBvcnRVcmlCeXRlc2dldENhbm9uaWNhbE5hbWVSZWZlcmVuY2VGcm9tSW50cmVhZExpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlcmVhZE1lbWJlclJlZmVyZW5jZUV4cGVjdGVkIGEgbWVtYmVyIHJlZmVyZW5jZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC5yZWFkVHlwZWRlZlJlZmVyZW5jZWVuZE9mZnNldHByb2NlZHVyZUNvdW50Y2xhc3NDb3VudHNob3VsZFdyaXRlRGF0YV9yZWFkTGlicmFyeURlcGVuZGVuY2llc19yZWFkQWRkaXRpb25hbEV4cG9ydHNfcmVhZExpYnJhcnlQYXJ0c3JlYWRUeXBlZGVmcmVhZENsYXNzcmVhZEZpZWxkcmVhZFByb2NlZHVyZXJlYWRMaWJyYXJ5RGVwZW5kZW5jeXJlYWRPZmZzZXRyZWFkRXhwcmVzc2lvbkxpc3RwcmVmaXhOYW1lcmVhZENvbWJpbmF0b3JMaXN0bnVtRXhwb3J0ZWRSZWZlcmVuY2VleHBvcnRlZE5hbWVyZWFkQ29tYmluYXRvcnJlYWRMaWJyYXJ5UGFydHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3RyZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0bm9ybWFsLWNsYXNzcmVhZFN1cGVydHlwZU9wdGlvbnJlYWRTdXBlcnR5cGVyZWFkQ29uc3RydWN0b3JyZWFkUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JnZXRBbmRSZXNldFRyYW5zZm9ybWVyRmxhZ3NhZGRUcmFuc2Zvcm1lckZsYWdyZWFkRXhwcmVzc2lvbk9wdGlvbmNvbnN0cnVjdG9ycHVzaFZhcmlhYmxlRGVjbGFyYXRpb25zcmVhZEluaXRpYWxpemVya2luZEluZGV4ZnVuY3Rpb25Ob2RlU2l6ZXJlYWRGdW5jdGlvbk5vZGVOb3dyZWFkRnVuY3Rpb25Ob2RlT3B0aW9ucmVkaXJlY3RpbmctZmFjdG9yeS1jb25zdHJ1Y3RvcnJlYWREYXJ0VHlwZUxpc3R0eXBlUGFyYW1ldGVyU3RhY2tIZWlnaHR2YXJpYWJsZVN0YWNrSGVpZ2h0cmVhZEFyZ3VtZW50c3JlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbnJlYWRTdGF0ZW1lbnR1bmV4cGVjdGVkIGluaXRpYWxpemVyIHRhZzogbGF6eUxvYWRCb2R5b3V0ZXJFbmRPZmZzZXRvbGRMYWJlbFN0YWNrQmFzZXJlYWRTdGF0ZW1lbnRPcHRpb25fc2V0TGF6eUxvYWRGdW5jdGlvbmNvbXBvbmVudFN0YXJ0T2Zmc2V0Y3VycmVudExpYnJhcnlwdXNoVmFyaWFibGVEZWNsYXJhdGlvbnJlYWRWYXJpYWJsZVJlZmVyZW5jZXVuZXhwZWN0ZWQgdmFyaWFibGUgaW5kZXg6IGxvZ2ljYWxPcGVyYXRvclRvU3RyaW5ndW5leHBlY3RlZCBsb2dpY2FsIG9wZXJhdG9yIGluZGV4OiB0YWdCeXRlcmVhZERhcnRUeXBlT3B0aW9uYXNzZXJ0Q291bnRyZWFkTWFwRW50cnlMaXN0cmVhZFZhcmlhYmxlRGVjbGFyYXRpb25yZWFkU3RhdGVtZW50TGlzdHVuZXhwZWN0ZWQgZXhwcmVzc2lvbiB0YWc6IHJlYWRNYXBFbnRyeXJlYWRTdGF0ZW1lbnRPck51bGxJZkVtcHR5cmVhZEJsb2NrcmVhZEFzc2VydEJsb2NrbGFiZWxyZWFkU3dpdGNoQ2FzZUludG9yZWFkQ2F0Y2hMaXN0dW5leHBlY3RlZCBzdGF0ZW1lbnQgdGFnOiByZWFkQ2F0Y2hyZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25PcHRpb25yZWFkU3VwZXJ0eXBlTGlzdHJlYWROYW1lZFR5cGVMaXN0cmVhZE5hbWVkVHlwZW51bGxhYmlsaXR5SW5kZXh0b3RhbFBhcmFtZXRlckNvdW50ZGVjbGFyZWROdWxsYWJpbGl0eUluZGV4dW5leHBlY3RlZCBkYXJ0IHR5cGUgdGFnOiByZWFkVHlwZVBhcmFtZXRlcm51bUFyZ3VtZW50c3JlYWROYW1lZEV4cHJlc3Npb25MaXN0cmVhZE5hbWVkRXhwcmVzc2lvbkJpbmFyeUJ1aWxkZXJXaXRoTWV0YWRhdGFfc3Vic2VjdGlvbnNzdWJTZWN0aW9uQ291bnRtYXBwaW5nU3RhcnRtZXRhZGF0YU9mZnNldF9yZWFkTWV0YWRhdGFzYXZlZE9mZnNldHBhcmFta2VybmVsLmFzdF90b190ZXh0TmFtZXJnZXROYW1lcHV0SWZBYnNlbnROb3JtYWxOYW1lcl9Db25zdGFudE5hbWVyJlJlY3Vyc2l2ZVZpc2l0b3ImTmFtZXJDb25zdGFudE5hbWVyRGlzYW1iaWd1YXRvclVuYW1lc1RuYW1lc1VkaXNhbWJpZ3VhdGVrZXkxa2V5MnByb3Bvc2VOYW1lZ2V0TmV3TmFtZXByb3Bvc2VkTmFtZUNhbm5vdCBkaXNhbWJpZ3VhdGVOYW1lU3lzdGVtI3QjbSNjbGFzcyNleHRlbnNpb24jbGliI1RsYWJlbHMjTGNvbnN0YW50cyNDcHJlZml4ZXNwYXRoU2VwYXJhdG9yW1wvXXB1bmN0dWF0aW9uWy46XW5hbWVWYXJpYWJsZW5hbWVNZW1iZXJuYW1lQ2xhc3NuYW1lRXh0ZW5zaW9ubmFtZUxpYnJhcnluYW1lVHlwZVBhcmFtZXRlcm5hbWVTd2l0Y2hDYXNlbmFtZUxhYmVsZWRTdGF0ZW1lbnRuYW1lQ29uc3RhbnRuYW1lTGlicmFyeVByZWZpeGFiYnJldmlhdGVOYW1laGFzRW1wdHlQYXRoTG5hbWVDYW5vbmljYWxOYW1lQXNMaWJyYXJ5UHJlZml4c2xhc2hkb3RBbm5vdGF0b3Jhbm5vdGF0ZVZhcmlhYmxlcHJpbnRlcmFubm90YXRlUmV0dXJuYW5ub3RhdGVGaWVsZFByaW50ZXJzeW50aGV0aWNOYW1lc2Fubm90YXRvcmltcG9ydFRhYmxlU1BBQ0VXT1JEU1lNQk9MZW1wdHlOYW1lU3RyaW5n4oCiZW1wdHlOYW1lY3JlYXRlSW5uZXJzaG91bGRIaWdobGlnaHRzdGFydEhpZ2hsaWdodGVuZEhpZ2hsaWdodGdldExpYnJhcnlOYW1lZ2V0TGlicmFyeVJlZmVyZW5jZTxObyBMaWJyYXJ5PmdldEltcG9ydEluZGV4Z2V0Q2xhc3NOYW1lZ2V0RXh0ZW5zaW9uTmFtZTxObyBDbGFzcz5nZXRUeXBlZGVmUmVmZXJlbmNlPE5vIFR5cGVkZWY+Z2V0TWVtYmVyTmFtZTxObyBNZW1iZXI+Z2V0VmFyaWFibGVOYW1lZ2V0VmFyaWFibGVSZWZlcmVuY2U8Tm8gVmFyaWFibGVEZWNsYXJhdGlvbj5nZXRUeXBlUGFyYW1ldGVyTmFtZWdldFR5cGVQYXJhbWV0ZXJSZWZlcmVuY2U8Tm8gVHlwZVBhcmFtZXRlcj53cml0ZUNvbXBvbmVudFByb2JsZW1zd3JpdGVQcm9ibGVtc0FzSnNvblByb2JsZW1zIGluIGNvbXBvbmVudGhlYWRlcmVuZExpbmUvLy8vIHRyaW1tZWR0cmltUmlnaHR3cml0ZVdvcmRpbXBvcnRzaW5uZXJ3cml0ZVN0YW5kYXJkTGlicmFyeUNvbnRlbnRvdXRlclByaW50ZXJpbXBvcnRzVG9QcmludHByaW50TGlicmFyeUltcG9ydFRhYmxlaW1wb3J0ZWRMaWJyYXJpZXNpbXBvcnRQYXRoZ2V0SW1wb3J0UGF0aHNlbGZpbXBvcnQgc2VsZiBhcyBpbXBvcnQgIiIgYXMgUHJvYmxlbXMgaW4gbGlicmFyeWFkZGl0aW9uYWxFeHBvcnRzID0gKGlzRmlyc3Rub2RlTGlicmFyeXdyaXRlU3BhY2Vkd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNld3JpdGVNZXRhZGF0YWFzY29uc3RhbnRzIGdldFByZWNlZGVuY2V3cml0ZVNwYWNlZW5zdXJlU3BhY2V3cml0ZVN5bWJvbHdyaXRlQ29tbWFlbnN1cmVXb3JkQm91bmRhcnl3cml0ZUluZGVudGF0aW9uPE51bGw+aGlnaGxpZ2h0W11tZG5vZGVNZXRhZGF0YVtAd3JpdGVBbm5vdGF0ZWRUeXBld3JpdGVUeXBlPE5vIERhcnRUeXBlPndyaXRlT3B0aW9uYWxUeXBlPE5vIFN1cGVydHlwZT53cml0ZUNsYXNzUmVmZXJlbmNlRnJvbVJlZmVyZW5jZXdyaXRlVHlwZWRlZlJlZmVyZW5jZXdyaXRlTW9kaWZpZXJpc1RoZXJlPGFub24+d3JpdGVGdW5jdGlvbnRlcm1pbmF0ZUxpbmV3cml0ZVR5cGVQYXJhbWV0ZXJMaXN0d3JpdGVQYXJhbWV0ZXJMaXN0d3JpdGVSZXR1cm5UeXBlZ2V0QXN5bmNNYXJrZXJLZXl3b3JkLyogb3JpZ2luYWxseSovd3JpdGVGdW5jdGlvbkJvZHltYXJrZXJzeW5jc3luYyphc3luY2FzeW5jKnlpZWxkaW5nPEludmFsaWQgYXN5bmMgbWFya2VyOiB7fXs9PndyaXRlRXhwcmVzc2lvbndyaXRlQm9keXdyaXRlRnVuY3Rpb25UeXBldHlwZWRlZlBvc2l0aW9uYWx0eXBlZGVmTmFtZWRwYXJhbWV0ZXJzQW5ub3RhdGVkZm9ybWFs4oaSd3JpdGVOdWxsYWJpbGl0eWNhbGxiYWNrZ2V0Q2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNlZ2V0Q2Fub25pY2FsTmFtZVN0cmluZ05laXRoZXIgbm9kZSBub3IgY2Fub25pY2FsIG5hbWUgZm91bmRnZXRNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNldW5leHBlY3RlZCByb290dW5leHBlY3RlZCBAbGlicmFyeVN0cmluZ2NsYXNzU3RyaW5nY2xzYXROb2Rld3JpdGVWYXJpYWJsZVJlZmVyZW5jZXdyaXRlVHlwZVBhcmFtZXRlclJlZmVyZW5jZW1pbmltdW1QcmVjZWRlbmNlbmVlZHNQYXJlbnRlc2Vzc2VwYXJhdGVMaW5lc2xhdGVnZW5lcmljLWNvdmFyaWFudC1pbXBsW2dldHRlcl1bc2V0dGVyXVtuby1nZXR0ZXJdW25vLXNldHRlcl0vKiBmcm9tICAqL2ZvcndhcmRpbmctc3R1YmZvcndhcmRpbmctc2VtaS1zdHVibm8tc3VjaC1tZXRob2QtZm9yd2FyZGVyc3ludGhldGljcmVkaXJlY3RpbmdfZmFjdG9yeWNsYXNzd2l0aGV4dGVuZHNpbXBsZW1lbnRzZW5kTGluZVN0cmluZyAvLyBmcm9tIG9uZGVzY3JpcHRvcmludmFsaWQtZXhwcmVzc2lvbmVzY2FwZVN0cmluZ3dyaXRlSW50ZXJmYWNlVGFyZ2V0Lns9c3VwZXJuZXchcHJlY2VkZW5jZT8/IT13cml0ZVN0YXRpY1R5cGVnZXRFc2NhcGVkQ2hhcmFjdGVyXHZcZlwkcGFydCR7YXNzZXJ0X2Fzc2VydCh1bnVzZWRBcmd1bWVudGlzYXN7VHlwZUVycm9yfXRoaXNyZXRocm93dGhyb3dhd2FpdGxldGluYmxvY2t3cml0ZUJsb2NrQm9keSA9PmRlZmVycmVkYXNzZXJ0KTticmVha3doaWxlZG9mb3J1c2VWYXJLZXl3b3Jkc3dpdGNoKSB7Y2FzZWRlZmF1bHRjb250aW51ZWlmZWxzZXJldHVybnRyeWNhdGNobm8tZXhjZXB0aW9uLXZhcmZpbmFsbHl5aWVsZCpbeWllbGRdeWllbGQuLi47cmVxdWlyZWRhbGxBcmdzaW52YWxpZC1pbml0aWFsaXplcmludmFsaWQtdHlwZWR5bmFtaWN2b2lkPls+e3BhcnRpYWwtaW5zdGFudGlhdGlvbnRlYXJvZmZldmFsUHJlY2VkZW5jZUVYUFJFU1NJT05DT05ESVRJT05BTExPR0lDQUxfTlVMTF9BV0FSRUxPR0lDQUxfT1JMT0dJQ0FMX0FOREVRVUFMSVRZUkVMQVRJT05BTEJJVFdJU0VfT1JCSVRXSVNFX1hPUkJJVFdJU0VfQU5EU0hJRlRBRERJVElWRU1VTFRJUExJQ0FUSVZFUFJFRklYUE9TVEZJWFRZUEVfTElURVJBTFBSSU1BUllDQUxMRUViaW5hcnlQcmVjZWRlbmNlb2Zpc0Fzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3JFeHByZXNzaW9uUHJpbnRlcndyaXRlZXJnbG9iYWxEZWJ1Z2dpbmdOYW1lc2RlYnVnTGlicmFyeU5hbWVkZWJ1Z0NsYXNzTmFtZWRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lZGVidWdNZW1iZXJOYW1lZGVidWdRdWFsaWZpZWRNZW1iZXJOYW1lZGVidWdUeXBlUGFyYW1ldGVyTmFtZWRlYnVnUXVhbGlmaWVkVHlwZVBhcmFtZXRlck5hbWVkZWJ1Z1ZhcmlhYmxlRGVjbGFyYXRpb25OYW1lZGVidWdOb2RlVG9TdHJpbmdjb21wb25lbnRUb1N0cmluZ3Byb2NlZHVyZUtpbmRUb1N0cmluZ2dldGlsbGVnYWwgUHJvY2VkdXJlS2luZDoga2VybmVsLmFzdC52aXNpdG9yRXhwcmVzc2lvblZpc2l0b3JTdGF0ZW1lbnRWaXNpdG9yTWVtYmVyVmlzaXRvckluaXRpYWxpemVyVmlzaXRvclRyZWVWaXNpdG9yRGFydFR5cGVWaXNpdG9yRGFydFR5cGVWaXNpdG9yMUNvbnN0YW50VmlzaXRvcl9Db25zdGFudENhbGxiYWNrX0NvbnN0YW50Q2FsbGJhY2tWaXNpdG9yX2NhbGxiYWNrQ29tcHV0ZU9uY2VDb25zdGFudFZpc2l0b3JfdmlzaXRvcmNhY2hlVmlzaXRPbmNlQ29uc3RhbnRWaXNpdG9yTWVtYmVyUmVmZXJlbmNlVmlzaXRvclZpc2l0b3JSZWN1cnNpdmVWaXNpdG9yVHJhbnNmb3JtZXJFeHByZXNzaW9uVmlzaXRvcjFTdGF0ZW1lbnRWaXNpdG9yMUJvZHlWaXNpdG9yMWtlcm5lbC5jYW5vbmljYWxfbmFtZV9wYXJlbnRfbm9uUm9vdFRvcF9jaGlsZHJlbmhhc0NoaWxkZ2V0Q2hpbGRGcm9tUXVhbGlmaWVkTmFtZWdldENoaWxkRnJvbUZpZWxkV2l0aE5hbWVDYW5ub3QgYWRkIGEgY2hpbGQgdG8gIGJlY2F1c2UgdGhpcyBuYW1lIGFscmVhZHkgaGFzIGEgY2hpbGQgbmFtZWQgcmVtb3ZlQ2hpbGQgaXMgYWxyZWFkeSBib3VuZENhbm5vdCBiaW5kICwgdGFyZ2V0IGlzIGFscmVhZHkgYm91bmQgdG8gdW5iaW5kY2hpbGRyZW5fZ2V0TWVtYmVyUXVhbGlmaWVyVW5leHBlY3RlZCBtZW1iZXI6IGtlcm5lbC50cmFuc2Zvcm1hdGlvbnMuZmxhZ3NUcmFuc2Zvcm1lckZsYWdzdXBlckNhbGxzc2VlbkJ5VmVyaWZpZXJrZXJuZWwudHlwZV9hbGdlYnJhVHlwZVBhcmFtZXRlckZpbHRlclBGcmVzaFR5cGVQYXJhbWV0ZXJzZnJlc2hUeXBlUGFyYW1ldGVyc2FwcGx5VG9GdW5jdGlvblR5cGVzdWJzdGl0dXRlc3Vic3RpdHV0ZU5hbWVkc3Vic3RpdHV0ZVN1cGVyZnJvbU1hcGZpbHRlcmVkZnJvbVVwcGVyQW5kTG93ZXJCb3VuZHNmcm9tU3VwZXJ0eXBlZnJvbUludGVyZmFjZVR5cGVmcm9tVHlwZWRlZlR5cGVmcm9tUGFpcnNwYXJhbWV0ZXJzYm90dG9tRm9yQ2xhc3N1cHBlckJvdW5kRm9yQ2xhc3NzZWNvbmRnZXRTdWJzdGl0dXRldXBwZXJCb3VuZGNvbnRyYXZhcmlhbnR2aXNpdF9OdWxsU3Vic3RpdHV0aW9uU3Vic3RpdHV0aW9uLmVtcHR5X01hcFN1YnN0aXR1dGlvbl9NYXBTdWJzdGl0dXRpb24oX1RvcFN1YnN0aXR1dG9yaW52ZXJ0VmFyaWFuY2VmcmVzaFR5cGVQYXJhbWV0ZXJDcmVhdGUgYSBmcmVzaCBlbnZpcm9ubWVudCBmaXJzdF9DbGFzc0JvdHRvbVN1YnN0aXR1dGlvbl9Db21iaW5lZFN1YnN0aXR1dGlvbl9GaWx0ZXJlZFN1YnN0aXR1dGlvbmZpbHRlckZuX0lubmVyVHlwZVN1YnN0aXR1dG9yb3V0ZXJmcmVzaF9UeXBlU3Vic3RpdHV0b3Jjb3ZhcmlhbnRDb250ZXh0dXNlQ291bnRlcm5ld0lubmVyRW52aXJvbm1lbnRiZWZvcmVidW1wQ291bnRlcnNVbnRpbF9EZWVwVHlwZVN1YnN0aXR1dG9yZGVwdGhpc0luZmluaXRlX1R5cGVVbmlmaWNhdGlvbnF1YW50aWZpZWRWYXJpYWJsZXNfdW5pdmVyc2FsbHlRdWFudGlmaWVkVmFyaWFibGVzdHlwZTFfdW5pZnlfc3Vic3RpdHV0ZUhlYWRuZXh0VHlwZVVuZXhwZWN0ZWQgY3ljbGUgZm91bmQgZHVyaW5nIHVuaWZpY2F0aW9uX2ZhaWxsZWZ0SW5zdGFuY2VyaWdodEluc3RhbmNlaW5zdGFudGlhdG9yaW5zdGFudGlhdG9yVHlwZWxlZnRSZXR1cm5yaWdodFJldHVybl90cnlTdWJzdGl0dXRpb25kZWVwU3Vic3RpdHV0ZV9PY2N1cnJlbmNlVmlzaXRvcmhhbmRsZVR5cGVQYXJhbWV0ZXJnZXRTdWJzdGl0dXRpb25NYXBnZXRVcHBlckJvdW5kU3Vic3RpdHV0aW9uTWFwc3Vic3RpdHV0ZURlZXBzdWJzdGl0dXRvcmNvbnRhaW5zVHlwZVZhcmlhYmxldW5pZnlUeXBlc3VuaWZpZXJnZXRGcmVzaFR5cGVQYXJhbWV0ZXJzZnJlc2hQYXJhbWV0ZXJza2VybmVsLnR5cGVfZW52aXJvbm1lbnRIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudEVycm9ySGFuZGxlclR5cGVFbnZpcm9ubWVudHlpZWxkVHlwZWN1cnJlbnRBc3luY01hcmtlcmVycm9ySGFuZGxlcmZyb21TdWJjbGFzc29iamVjdENsYXNzbnVsbENsYXNzYm9vbENsYXNzaW50Q2xhc3NudW1UeXBlbnVtQ2xhc3Nkb3VibGVDbGFzc3N0cmluZ0NsYXNzc3ltYm9sQ2xhc3N0eXBlQ2xhc3NyYXdGdW5jdGlvblR5cGVmdW5jdGlvbkNsYXNzZnV0dXJlT3JDbGFzc2VsZW1lbnRUeXBlbGlzdENsYXNzc2V0Q2xhc3NtYXBDbGFzc2l0ZXJhYmxlVHlwZWl0ZXJhYmxlQ2xhc3NzdHJlYW1UeXBlc3RyZWFtQ2xhc3NmdXR1cmVDbGFzc1N1YnR5cGVUZXN0ZXJ0eXBlQ2hlY2tzaXNUb3BfY29sbGVjdF9pc1N1YnR5cGVPZnN1YnR5cGVpc1N1YnR5cGVPZnN1YnR5cGVBcmdzdXBlcnR5cGVBcmdzdWJ0eXBlRnV0dXJlc3VwZXJ0eXBlRnV0dXJlX2lzRnVuY3Rpb25TdWJ0eXBlT2ZzdWJQYXJhbWV0ZXJzdXBlclBhcmFtZXRlcnN1YkJvdW5kc3VwZXJ0eXBlUGFyYW1ldGVyc3VidHlwZVBhcmFtZXRlcnN1YnR5cGVOYW1lSW5kZXhrZXJuZWwuY29xX2Fubm90Q29xTGliZGVzdFBhdGhSZWxhdGl2ZWNvcWNvcXJlZm5vY29xY29xb3B0Y29xc2luZ2xlY29xZGVmY29xc2luZ2xlZGVmY29xRW51bXNrZXJuZWwuY2xhc3NfaGllcmFyY2h5SGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlc01peGluSW5mZXJyZXJpbmZlcm9uQW1iaWd1b3VzU3VwZXJ0eXBlc21peGluSW5mZXJyZXIgY2FuJ3QgaW1wbGVtZW50IGJvdGggX2luaXRpYWxpemVnZXRPcmRlcmVkQ2xhc3Nlc3Vub3JkZXJlZGdlbmVyaWNTdXBlcnR5cGVzT2ZnZXRMZWdhY3lMZWFzdFVwcGVyQm91bmRnZXRDbGFzc0FzSW5zdGFuY2VPZmFzSW5zdGFudGlhdGlvbk9mZ2V0RGlzcGF0Y2hUYXJnZXRzZXR0ZXJnZXREaXNwYXRjaFRhcmdldHNzZXR0ZXJzZ2V0SW50ZXJmYWNlTWVtYmVyZ2V0SW50ZXJmYWNlTWVtYmVyc2dldERlY2xhcmVkTWVtYmVyc2lzU3ViY2xhc3NPZnN1YmNsYXNzaXNVc2VkQXNNaXhpbmZvckVhY2hPdmVycmlkZVBhaXJhcHBseVRyZWVDaGFuZ2VzcmVtb3ZlZExpYnJhcmllc2Vuc3VyZUtub3duTGlicmFyaWVzcmVpc3N1ZUFtYmlndW91c1N1cGVydHlwZXNGb3JhcHBseU1lbWJlckNoYW5nZXNmaW5kRGVzY2VuZGFudHNtZXJnZVNvcnRlZExpc3RzZmlyc3RNZW1iZXJzZWNvbmRNZW1iZXJjb21wYXJlY29tcGFyZU1lbWJlcnNjb21wYXJlTmFtZXNmaXJzdE5hbWVzZWNvbmROYW1lZmlyc3RIYXNoc2Vjb25kSGFzaGZpcnN0U3RyaW5nc2Vjb25kU3RyaW5nZmlyc3RMZW5ndGhzZWNvbmRMZW5ndGhmaXJzdExpYnJhcnlzZWNvbmRMaWJyYXJ5Zmlyc3RVbml0c2Vjb25kVW5pdGRlbHRhZmluZE1lbWJlckJ5TmFtZUNsYXNzSGllcmFyY2h5U3VidHlwZXNnZXRTdWJ0eXBlc09mZ2V0U2luZ2xlVGFyZ2V0Rm9ySW50ZXJmYWNlSW52b2NhdGlvbl9DbGFzc0luZm9TdWJ0eXBlY2xhc3NJbmZvdG9wRG93bkluZGV4c3VidHlwZUludGVydmFsTGlzdF9DbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5U3VidHlwZXNfY2xhc3Nlc0J5VG9wRG93bkluZGV4X2luZm9NYXBpbnZhbGlkYXRlZF90b3BEb3duU29ydEluZGV4YWxsQmV0c09mZl90b3BEb3duU29ydFZpc2l0c3ViSW5mb3N1YnR5cGVTZXRCdWlsZGVyYWRkU2luZ2xldG9uZGlyZWN0RXh0ZW5kZXJzc3VidHlwZUluZm9hZGRJbnRlcnZhbExpc3RkaXJlY3RNaXhlcnNkaXJlY3RJbXBsZW1lbnRlcnNidWlsZEludGVydmFsTGlzdFRoaXMgZGF0YXN0cnVjdHVyZSBoYXMgYmVlbiBpbnZhbGlkYXRlZHN1YnR5cGVzdG9DbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5X29uQW1iaWd1b3VzU3VwZXJ0eXBlc19vbkFtYmlndW91c1N1cGVydHlwZXNOb3RXcmFwcGVka25vd25MaWJyYXJpZXNfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzX2NhY2hlZENsYXNzSGllcmFyY2h5U3VidHlwZXNfdG9wU29ydEluZGV4cmVjb3JkZWRpbmZvRm9ydXNlZGdldFVzZWRDbGFzc2VzcmVzZXRVc2VkbnVtYmVyT2ZDbGFzc2VzY29tcHV0ZVN1YnR5cGVzSW5mb3JtYXRpb251bm9yZGVyZWRTZXRfZ2V0UmFua2VkU3VwZXJjbGFzc0luZm9zbGVhc3RVcHBlckJvdW5kSW5mb3NoZWFwY2hhaW5sYXN0SW5mb25leHRJbmZvYWRkVG9IZWFwaW5mbzFpbmZvMmNsYXNzZXMxY2xhc3NlczJpMWkyY3VycmVudERlcHRobnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRobmV4dDJzdXBlclR5cGUxZ2VuZXJpY1N1cGVyVHlwZXNzdXBlclR5cGUyOiBObyBjbGFzcyBpbmZvIGZvciBzdXBlckluZm9jYXN0ZWRUeXBlaW1wbGVtZW50ZWRTZXR0ZXJzaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHNfYnVpbGRJbnRlcmZhY2VNZW1iZXJzZGVjbGFyZWRTZXR0ZXJzZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHNjcm9zc0dldHRlcnNTZXR0ZXJzc3VwZXJHZXR0ZXJzc3VwZXJTZXR0ZXJzX3JlcG9ydE92ZXJyaWRlc2RlY2xhcmVkTGlzdGluaGVyaXRlZExpc3RkZWNsYXJlZGluaGVyaXRlZHN1cGVydHlwZXNsaWJzYWRkZWRDbGFzc2VzU29ydGVkZXhwZWN0ZWRTdGFydEluZGV4X3RvcG9sb2dpY2FsU29ydFZpc2l0b3JkZXJlZExpc3RfaW5pdGlhbGl6ZVRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzcHJvY2Vzc2VkQ2xhc3Nlc3dvcmtsaXN0dG9wb2xvZ2ljYWxJbmRleF9idWlsZERlY2xhcmVkTWVtYmVyc19idWlsZEltcGxlbWVudGVkTWVtYmVyc2ludGVyZmFjZVNldHRlcnNpbnRlcmZhY2VHZXR0ZXJzQW5kQ2FsbHNzYW5pdHlDaGVja0Fsc29Lbm93c1BhcmVudEFuZExpYnJhcnlEaWRuJ3Qga25vdyBsaWJyYXJ5IG9mICAoZnJvbSBEaWRuJ3Qga25vdyBwYXJlbnQgb2YgZXhwZWN0ZWRTdGFydGluZ1RvcG9sb2dpY2FsSW5kZXhfY29sbGVjdFN1cGVyc0ZvckNsYXNzX3JlY29yZFN1cGVyVHlwZXNObyBpbmZvIGZvciAgZnJvbSBVbmV4cGVjdGVkIHRvcG9sb2dpY2FsSW5kZXggKCAhPSApIGZvciBiZWluZ1Zpc2l0ZWRDeWNsaWMgaW5oZXJpdGFuY2UgaW52b2x2aW5nIHN1cGVyRGVwdGhtaXhlZEluZm9taXhpbk1lbWJlcmluaGVyaXRlZE1lbWJlcnNpbmhlcml0ZWRTZXR0ZXJzc2tpcEFic3RyYWN0TWVtYmVyc2FsbEluaGVyaXRlZE1lbWJlcnNpbmhlcml0RnJvbV9pbmhlcml0TWVtYmVyc2RlY2xhcmVkTWVtYmVyaW5oZXJpdGVkTWVtYmVyX2dldFVuc2hhZG93ZWRJbmhlcml0ZWRNZW1iZXJzcmVjb3JkR2VuZXJpY1N1cGVyVHlwZXN1cGVyY2xhc3NTZXRCdWlsZGVyc3VwZXJ0eXBlU2V0QnVpbGRlcnN1cGVydHlwZUluZm9zdXBlcmNsYXNzSW50ZXJ2YWxMaXN0c3VwZXJ0eXBlSW50ZXJ2YWxMaXN0bWl4ZWRJblR5cGVJbmZvZ2V0RXhwZW5zZUhpc3RvZ3JhbWludGVydmFsc29sZExlbmd0aGZpbGxSYW5nZWdldENvbXByZXNzaW9uUmF0aW9zaXplc2dldFN1cGVyVHlwZUhhc2hUYWJsZVNpemVzdW1fSW50ZXJ2YWxMaXN0QnVpbGRlcmV2ZW50c2FkZEludGVydmFsaW5zaWRlQ291bnRldmVudF9DbGFzc0luZm9DbGFzc1NldF9jbGFzc2VzX0x1YkhlYXBzb3J0c0JlZm9yZXNvcnRzQmVmb3JlU3RhdGljX2ludGVydmFsTGlzdENvbnRhaW5zaW50ZXJ2YWxMaXN0X2ludGVydmFsTGlzdFNpemVrZXJuZWwuY29yZV90eXBlc3JlcXVpcmVkQ2xhc3Nlc2RhcnQ6Y29yZU9iamVjdE51bGxib29saW50bnVtZG91YmxlU3RyaW5nTGlzdE1hcEl0ZXJhYmxlSXRlcmF0b3JTeW1ib2xGdW5jdGlvbkludm9jYXRpb25GYWxsVGhyb3VnaEVycm9yZGFydDpfaW50ZXJuYWxkYXJ0OmFzeW5jU3RyZWFtX2NvcmVMaWJyYXJ5X29iamVjdENsYXNzX251bGxDbGFzc19ib29sQ2xhc3NfaW50Q2xhc3NfbnVtQ2xhc3NfZG91YmxlQ2xhc3Nfc3RyaW5nQ2xhc3NfbGlzdENsYXNzX3NldENsYXNzX21hcENsYXNzX2l0ZXJhYmxlQ2xhc3NfaXRlcmF0b3JDbGFzc19zeW1ib2xDbGFzc190eXBlQ2xhc3NfZnVuY3Rpb25DbGFzc19pbnZvY2F0aW9uQ2xhc3NfaW52b2NhdGlvbk1pcnJvckNsYXNzX2ludm9jYXRpb25NaXJyb3JXaXRoVHlwZUNvbnN0cnVjdG9yX25vU3VjaE1ldGhvZEVycm9yRGVmYXVsdENvbnN0cnVjdG9yX2xpc3RGcm9tQ29uc3RydWN0b3JfbGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9yX2lkZW50aWNhbFByb2NlZHVyZV9mYWxsVGhyb3VnaEVycm9yVXJsQW5kTGluZUNvbnN0cnVjdG9yX29iamVjdEVxdWFsc19tYXBVbm1vZGlmaWFibGVfaW50ZXJuYWxTeW1ib2xDbGFzc19hc3luY0xpYnJhcnlfZnV0dXJlQ2xhc3Nfc3RhY2tUcmFjZUNsYXNzX3N0cmVhbUNsYXNzX2FzeW5jQXdhaXRDb21wbGV0ZXJDbGFzc19mdXR1cmVPckNsYXNzX2FzeW5jQXdhaXRDb21wbGV0ZXJDb25zdHJ1Y3Rvcl9jb21wbGV0ZU9uQXN5bmNSZXR1cm5Qcm9jZWR1cmVfY29tcGxldGVyQ29tcGxldGVFcnJvcl9zeW5jSXRlcmFibGVEZWZhdWx0Q29uc3RydWN0b3Jfc3RyZWFtSXRlcmF0b3JEZWZhdWx0Q29uc3RydWN0b3JfYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckRlZmF1bHRDb25zdHJ1Y3Rvcl9hc3luY1N0YXJMaXN0ZW5IZWxwZXJQcm9jZWR1cmVfYXN5bmNTdGFyTW92ZU5leHRIZWxwZXJQcm9jZWR1cmVfYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlX2FzeW5jVGhlbldyYXBwZXJIZWxwZXJQcm9jZWR1cmVfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJQcm9jZWR1cmVfYXdhaXRIZWxwZXJQcm9jZWR1cmVfYm9vbEZyb21FbnZpcm9ubWVudF9taXJyb3JzTGlicmFyeV9wcmFnbWFDbGFzc19wcmFnbWFOYW1lX3ByYWdtYU9wdGlvbnNfcHJhZ21hQ29uc3RydWN0b3Jhc3luY0Vycm9yV3JhcHBlckhlbHBlclByb2NlZHVyZWdldFRvcExldmVsTWVtYmVyX2FzeW5jRXJyb3JXcmFwcGVySGVscGVyYXN5bmNMaWJyYXJ5Z2V0TGlicmFyeWFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJBZGRnZXRNZW1iZXJfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcmFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJBZGRFcnJvcmFkZEVycm9yYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbWFkZFN0cmVhbWFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJDbGFzc2dldENsYXNzYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckNsb3NlYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckRlZmF1bHRDb25zdHJ1Y3RvcmFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJTdHJlYW1nZXQ6c3RyZWFtYXN5bmNTdGFyTGlzdGVuSGVscGVyX2FzeW5jU3Rhckxpc3RlbkhlbHBlcmFzeW5jU3Rhck1vdmVOZXh0SGVscGVyX2FzeW5jU3Rhck1vdmVOZXh0SGVscGVyYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlX2FzeW5jU3RhY2tUcmFjZUhlbHBlcmFzeW5jVGhlbldyYXBwZXJIZWxwZXJQcm9jZWR1cmVfYXN5bmNUaGVuV3JhcHBlckhlbHBlcmF3YWl0SGVscGVyUHJvY2VkdXJlX2F3YWl0SGVscGVyYXN5bmNBd2FpdENvbXBsZXRlckNsYXNzX0FzeW5jQXdhaXRDb21wbGV0ZXJhc3luY0F3YWl0Q29tcGxldGVyQ29uc3RydWN0b3Jjb21wbGV0ZU9uQXN5bmNSZXR1cm5fY29tcGxldGVPbkFzeW5jUmV0dXJuY29tcGxldGVyQ29tcGxldGVFcnJvckNvbXBsZXRlcmNvbXBsZXRlckZ1dHVyZWdldDpmdXR1cmVjb3JlTGlicmFyeXRyeUdldENsYXNzRnV0dXJlT3JpZGVudGljYWxQcm9jZWR1cmVpZGVudGljYWxpbnRlcm5hbFN5bWJvbENsYXNzaW52b2NhdGlvbkNsYXNzaW52b2NhdGlvbk1pcnJvckNsYXNzX0ludm9jYXRpb25NaXJyb3JpbnZvY2F0aW9uTWlycm9yV2l0aFR5cGVDb25zdHJ1Y3Rvcl93aXRoVHlwZWl0ZXJhdG9yQ2xhc3NsaXN0RnJvbUNvbnN0cnVjdG9ybGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9ydW5tb2RpZmlhYmxlU2V0bWFwVW5tb2RpZmlhYmxlbWlycm9yc0xpYnJhcnl0cnlHZXRMaWJyYXJ5ZGFydDptaXJyb3Jzbm9TdWNoTWV0aG9kRXJyb3JEZWZhdWx0Q29uc3RydWN0b3JOb1N1Y2hNZXRob2RFcnJvcndpdGhJbnZvY2F0aW9ub2JqZWN0RXF1YWxzcHJhZ21hQ2xhc3NwcmFnbWFwcmFnbWFOYW1lcHJhZ21hT3B0aW9uc3ByYWdtYUNvbnN0cnVjdG9yc3RhY2tUcmFjZUNsYXNzU3RhY2tUcmFjZXN0cmVhbUl0ZXJhdG9yU3Vic2NyaXB0aW9uX1N0cmVhbUl0ZXJhdG9yX3N1YnNjcmlwdGlvbnN0cmVhbUl0ZXJhdG9yQ2FuY2VsY2FuY2Vsc3RyZWFtSXRlcmF0b3JDbGFzc3N0cmVhbUl0ZXJhdG9yRGVmYXVsdENvbnN0cnVjdG9yc3RyZWFtSXRlcmF0b3JNb3ZlTmV4dHN0cmVhbUl0ZXJhdG9yQ3VycmVudGdldDpjdXJyZW50c3luY0l0ZXJhYmxlRGVmYXVsdENvbnN0cnVjdG9yX1N5bmNJdGVyYWJsZXN5bmNJdGVyYXRvckNsYXNzX1N5bmNJdGVyYXRvcnN5bmNJdGVyYXRvckN1cnJlbnRzeW5jSXRlcmF0b3JZaWVsZEVhY2hJdGVyYWJsZV95aWVsZEVhY2hJdGVyYWJsZWZhbGxUaHJvdWdoRXJyb3JVcmxBbmRMaW5lQ29uc3RydWN0b3JfY3JlYXRlYm9vbEZyb21FbnZpcm9ubWVudGZyb21FbnZpcm9ubWVudHBhY2thZ2VfY29uZmlnLnBhY2thZ2Vzbm9QYWNrYWdlc3BhY2thZ2VVcmlub3RGb3VuZGFzTWFwcGFja2FnZV9jb25maWcucGFja2FnZXNfZmlsZWlzVmFsaWRQYWNrYWdlTmFtZWJhc2VMb2NhdGlvbmlzQ29tbWVudHNlcGFyYXRvckluZGV4Y2hhck1pc3NpbmcgcGFja2FnZSBuYW1lTm8gJzonIG9uIGxpbmVwYWNrYWdlTmFtZU5vdCBhIHZhbGlkIHBhY2thZ2UgbmFtZXBhY2thZ2VMb2NhdGlvblNhbWUgcGFja2FnZSBuYW1lIG9jY3VyZWQgdHdpY2UucGFja2FnZU1hcHBpbmdjb21tZW50TXVzdCBiZSBhYnNvbHV0ZWNvbW1lbnRMaW5lIyAjIGdlbmVyYXRlZCBieSBwYWNrYWdlOnBhY2thZ2VfY29uZmlnIGF0ICIgaXMgbm90IGEgdmFsaWQgcGFja2FnZSBuYW1lUGFja2FnZSBsb2NhdGlvbiBtdXN0IG5vdCBiZSBhIHBhY2thZ2U6IFVSSV9yZWxhdGl2aXplaGFzUXVlcnloYXNGcmFnbWVudGhhc0F1dGhvcml0eW5vcm1hbGl6ZVBhdGguL3BhY2thZ2VfY29uZmlnLnBhY2thZ2VzX2ltcGxVbm1vZGlmaWFibGVNYXBWaWV3Y2hlY2tWYWxpZFBhY2thZ2VVcmlOb1BhY2thZ2VzTm8gcGFja2FnZSBuYW1lZCAiUGFja2FnZXNCYXNlcGFja2FnZUJhc2VnZXRCYXNlcGFja2FnZVBhdGhfbWFwcGluZ05vbkZpbGVQYWNrYWdlc0RpcmVjdG9yeVBhY2thZ2VzX3BhY2thZ2VCYXNlX2ZhaWxMaXN0aW5nUGFja2FnZXNDYW5ub3QgbGlzdCBwYWNrYWdlcyBmb3IgYSBiYXNlZCBwYWNrYWdlIHJvb3Rmcm9udF9lbmQudGVybWluYWxfY29sb3Jfc3VwcG9ydFByb2Nlc3NQcm9jZXNzUmVzdWx0QUxMX0NPREVTVEVSTUlOQUxfQ0FQQUJJTElUSUVTZW5hYmxlVGVybWluYWxDb2xvcnNwcmludGxuX2NvbXB1dGVFbmFibGVDb2xvcnNzdXBwb3J0c0Fuc2lFc2NhcGVzTm90IGVuYWJsaW5nIGNvbG9ycyBhcyBBTlNJIGlzIG5vdCBzdXBwb3J0ZWQuRW5hYmxpbmcgY29sb3JzIGFzIE9TIGlzIFdpbmRvd3MuL2Jpbi9zaC1jdHR5ID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbE5vdCBlbmFibGluZyBjb2xvcnMsIHN0ZGluIGlzbid0IGEgdGVybWluYWwucHJpbnRmICclcycgJ2NvbG9ycwpzZXRhZiAwCnNldGFmIDEKc2V0YWYgMgpzZXRhZiAzCnNldGFmIDQKc2V0YWYgNQpzZXRhZiA2CnNldGFmIDcKb3AKJyB8IHRwdXQgLVNOb3QgZW5hYmxpbmcgY29sb3JzLCBydW5uaW5nIHRwdXQgZmFpbGVkLk5vdCBlbmFibGluZyBjb2xvcnMsIHVuZXhwZWN0ZWQgb3V0cHV0IGZyb20gdHB1dDogbnVtYmVyT2ZDb2xvcnNOb3QgZW5hYmxpbmcgY29sb3JzLCBsZXNzIHRoYW4gOCBjb2xvcnMgc3VwcG9ydGVkOiBhbGxDb2RlcxtbMzBtG1szMW0bWzMybRtbMzNtG1szNG0bWzM1bRtbMzZtG1szN20bWzM5OzQ5bU5vdCBlbmFibGluZyBjb2xvcnMsIGNvbG9yIGNvZGVzIGRvbid0IG1hdGNoOiBFbmFibGluZyBjb2xvcnMuZmFzdGEuY29tbWFuZF9saW5lX3JlcG9ydGluZ21pbkNyYXNoc2FmZVRvU3RyaW5nZ2V0U291cmNlTGluZXVuaGFuZGxlZGhpZGVXYXJuaW5nc21lc3NhZ2VUZXh0c291cmNlTGluZUNyYXNoIHdoZW4gZm9ybWF0dGluZzogZm9ybWF0RXJyb3JNZXNzYWdlc3F1aWdnbHlMZW5ndGhpbmRlbnRMZW5ndGhsZW5ndGhJblNvdXJjZUxpbmVwb2ludGVycG9pbnRlckxlbmd0aC4uLmlzSGlkZGVuc2hvdWxkVGhyb3dPbmlzQ29tcGlsZVRpbWVFcnJvcmZhc3RhLm1lc3NhZ2VzZ2V0TG9jYXRpb25Gcm9tVXJpZ2V0TG9jYXRpb25Gcm9tTm9kZWZhc3RhLnByb2JsZW1zRGVidWdBYm9ydDogd2hhdHVuZXhwZWN0ZWRleHBlY3RlZGFjdHVhbHVuc3VwcG9ydGVkb3BlcmF0aW9uZ2V0RmlsZVVyaWZhc3RhLnRpY2tlcnN3cHJldmlvdXNUaWNrc2luY2VTdGFydG1zLnJlc2V0ZmFzdGEudXJpX3RyYW5zbGF0b3JkYXJ0TGlicmFyaWVzZ2V0RGFydFBhdGNoZXNpc1BsYXRmb3JtSW1wbGVtZW50YXRpb250cmFuc2xhdGVyZXBvcnRNZXNzYWdlX3RyYW5zbGF0ZURhcnRVcmlfdHJhbnNsYXRlUGFja2FnZVVyaWdldFBhY2thZ2VGcmFnbWVudGZpcnN0U2xhc2hwYWNrYWdlQmFzZVVyaWlzTGlicmFyeVN1cHBvcnRlZF9wYWNrYWdlVXJpTm90Rm91bmRfcGFja2FnZVVyaU5vdEZvdW5kTm9SZXBvcnRDOlxyZXNvbHZlSW5wdXRVcmlwYXJzZVVyaWZpbGU6eC1yZXNvbHZlQW1iaWd1b3VzV2luZG93c1BhdGhmYXN0YS5zY2FubmVyLnRva2VuYW5hbHl6ZXJUb2tlblR5cGVJREVOVElGSUVSX1RPS0VOTEFaWV9USFJFU0hPTER2YWx1ZU9yTGF6eVN1YnN0cmluZ2Nhbm9uaWNhbGl6ZXJmcm9tU3RyaW5nY2Fub25pY2FsaXplcHJlY2VkaW5nQ29tbWVudHNmcm9tU3Vic3RyaW5nZnJvbVV0ZjhCeXRlc2FzY2lpT25seWJvb2xWYWx1ZWlzSWRlbnRpZmllcmNhbm9uaWNhbGl6ZWRTdHJpbmdkZWNvZGVVdGY4Y29weWNvcHlDb21tZW50c25vU3VjaE1ldGhvZF92YWx1ZT1TeW50aGV0aWNTdHJpbmdUb2tlbl9sZW5ndGhDb21tZW50VG9rZW5wcmV2aW91c3NldE5leHRXaXRob3V0U2V0dGluZ1ByZXZpb3VzbWFqb3JtaW5vclNJTkdMRV9MSU5FX0NPTU1FTlR0b2tlblN0YXJ0RGFydERvY1Rva2VuX0xhenlTdWJzdHJpbmdfQ29tcGFjdExhenlTdWJzdHJpbmdfRnVsbExhenlTdWJzdHJpbmdERUZBVUxUX0NPTE9SG1szOTs0OW1fc3VwcG9ydHNBbnNpRXNjYXBlc3N0ZGVyclN1cHBvcnRzQ29sb3Jzc3Rkb3V0U3VwcG9ydHNDb2xvcnNOb3QgZW5hYmxpbmcgY29sb3JzLCBzdGRvdXQgZG9lcyBub3Qgc3VwcG9ydCBBTlNJIGNvbG9ycy5Ob3QgZW5hYmxpbmcgY29sb3JzLCBzdGRlcnIgZG9lcyBub3Qgc3VwcG9ydCBBTlNJIGNvbG9ycy5CZWdpblRva2VuZW5kVG9rZW5wcmVjZWRpbmdDb21tZW50TFRPUEVOX0NVUkxZX0JSQUNLRVRPUEVOX1BBUkVOT1BFTl9TUVVBUkVfQlJBQ0tFVD8uW1FVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUU1RSSU5HX0lOVEVSUE9MQVRJT05fRVhQUkVTU0lPTmVuZEdyb3VwRG9jdW1lbnRhdGlvbkNvbW1lbnRUb2tlbkFCU1RSQUNUQVNBU1NFUlRBU1lOQ0FXQUlUQlJFQUtDQVNFQ0FUQ0hDTEFTU0NPTlNUQ09OVElOVUVDT1ZBUklBTlRERUZBVUxUREVGRVJSRURET0RZTkFNSUNFTFNFRU5VTWVudW1FWFBPUlRFWFRFTkRTRVhURU5TSU9ORVhURVJOQUxGQUNUT1JZRkFMU0VmYWxzZUZJTkFMRklOQUxMWUZPUkZVTkNUSU9OR0VUSElERUlGSU1QTEVNRU5UU0lNUE9SVElOSU5URVJGQUNFaW50ZXJmYWNlSVNMQVRFTElCUkFSWU1JWElOTkFUSVZFbmF0aXZlTkVXTlVMTE9GT05PUEVSQVRPUlBBUlRQQVRDSHBhdGNoUkVRVUlSRURSRVRIUk9XUkVUVVJOU0VUU0hPV1NPVVJDRVNUQVRJQ1NVUEVSU1dJVENIU1lOQ1RISVNUSFJPV1RSVUVUUllUWVBFREVGVkFSVk9JRFdISUxFV0lUSFlJRUxEa2V5d29yZHNpc0J1aWx0SW5pc1BzZXVkb2lzTW9kaWZpZXJpc1RvcExldmVsS2V5d29yZGlzQnVpbHRJbk9yUHNldWRvaXNQc2V1ZG9LZXl3b3Jkc3ludGF4X2NyZWF0ZUtleXdvcmRNYXBrZXl3b3JkS2V5d29yZFRva2VuaXNLZXl3b3JkaXNLZXl3b3JkT3JJZGVudGlmaWVyU2ltcGxlVG9rZW5fcHJlY2VkaW5nQ29tbWVudF9zZXRDb21tZW50UGFyZW50Y2hhckNvdW50Y2hhckVuZGJlZm9yZVN5bnRoZXRpY2lzRW9mRU9GaXNPcGVyYXRvcnN0cmluZ1ZhbHVlc2V0TmV4dG1hdGNoZXNBbnlTeW50aGV0aWNCZWdpblRva2VuU3ludGhldGljS2V5d29yZFRva2VucHJlY2VlZGluZ0NvbW1lbnRlb2ZsZXhpY2FsbHlGaXJzdFRva2VuQ2xhc3NOT19DTEFTU0FERElUSVZFX09QRVJBVE9SQVNTSUdOTUVOVF9PUEVSQVRPUkJJVFdJU0VfQU5EX09QRVJBVE9SQklUV0lTRV9PUl9PUEVSQVRPUkJJVFdJU0VfWE9SX09QRVJBVE9SQ0FTQ0FERV9PUEVSQVRPUkNPTkRJVElPTkFMX09QRVJBVE9SRVFVQUxJVFlfT1BFUkFUT1JJRl9OVUxMX09QRVJBVE9STE9HSUNBTF9BTkRfT1BFUkFUT1JMT0dJQ0FMX09SX09QRVJBVE9STVVMVElQTElDQVRJVkVfT1BFUkFUT1JSRUxBVElPTkFMX09QRVJBVE9SU0hJRlRfT1BFUkFUT1JVTkFSWV9QT1NURklYX09QRVJBVE9SVU5BUllfUFJFRklYX09QRVJBVE9SRE9VQkxFSEVYQURFQ0lNQUxoZXhhZGVjaW1hbElERU5USUZJRVJpZGVudGlmaWVySU5UTVVMVElfTElORV9DT01NRU5UU0NSSVBUX1RBR1NUUklOR0FNUEVSU0FOREFNUEVSU0FORF9BTVBFUlNBTkRBTVBFUlNBTkRfQU1QRVJTQU5EX0VRJiY9QU1QRVJTQU5EX0VRJj1BVEJBTkdCQU5HX0VRQkFOR19FUV9FUSE9PUJBUkJBUl9CQVJCQVJfQkFSX0VRfHw9QkFSX0VRfD1DT0xPTkNPTU1BQ0FSRVRDQVJFVF9FUV49Q0xPU0VfQ1VSTFlfQlJBQ0tFVENMT1NFX1BBUkVOQ0xPU0VfU1FVQVJFX0JSQUNLRVRFUUVRX0VRRVFfRVFfRVE9PT1HVEdUX0VRR1RfR1RHVF9HVF9FUT4+PUdUX0dUX0dUR1RfR1RfR1RfRVE+Pj49SEFTSElOREVYSU5ERVhfRVFMVF9FUUxUX0xUTFRfTFRfRVE8PD1NSU5VU01JTlVTX0VRLT1NSU5VU19NSU5VUy0tUEVSQ0VOVFBFUkNFTlRfRVElPVBFUklPRFBFUklPRF9QRVJJT0RQTFVTUExVU19FUSs9UExVU19QTFVTKytRVUVTVElPTlFVRVNUSU9OX1BFUklPRD8uUVVFU1RJT05fUVVFU1RJT05RVUVTVElPTl9RVUVTVElPTl9FUT8/PVNFTUlDT0xPTlNMQVNIU0xBU0hfRVEvPVNUQVJTVEFSX0VRKj1TVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSJFRJTERFVElMREVfU0xBU0hUSUxERV9TTEFTSF9FUX4vPUJBQ0tQSU5HYEJBQ0tTTEFTSFBFUklPRF9QRVJJT0RfUEVSSU9EUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT04uLi4/QkFEX0lOUFVUbWFsZm9ybWVkIGlucHV0UkVDT1ZFUllyZWNvdmVyeWFsbHVuc3BlY2lmaWVkaXNBZGRpdGl2ZU9wZXJhdG9yaXNBc3NpZ25tZW50T3BlcmF0b3Jpc0Fzc29jaWF0aXZlT3BlcmF0b3Jpc0VxdWFsaXR5T3BlcmF0b3Jpc0luY3JlbWVudE9wZXJhdG9yaXNNdWx0aXBsaWNhdGl2ZU9wZXJhdG9yaXNSZWxhdGlvbmFsT3BlcmF0b3Jpc1NoaWZ0T3BlcmF0b3Jpc1VuYXJ5UG9zdGZpeE9wZXJhdG9yaXNVbmFyeVByZWZpeE9wZXJhdG9yaXNTZWxlY3Rvck9wZXJhdG9yTk9fUFJFQ0VERU5DRUFTU0lHTk1FTlRfUFJFQ0VERU5DRUNBU0NBREVfUFJFQ0VERU5DRUNPTkRJVElPTkFMX1BSRUNFREVOQ0VJRl9OVUxMX1BSRUNFREVOQ0VMT0dJQ0FMX09SX1BSRUNFREVOQ0VMT0dJQ0FMX0FORF9QUkVDRURFTkNFRVFVQUxJVFlfUFJFQ0VERU5DRVJFTEFUSU9OQUxfUFJFQ0VERU5DRUJJVFdJU0VfT1JfUFJFQ0VERU5DRUJJVFdJU0VfWE9SX1BSRUNFREVOQ0VCSVRXSVNFX0FORF9QUkVDRURFTkNFU0hJRlRfUFJFQ0VERU5DRUFERElUSVZFX1BSRUNFREVOQ0VNVUxUSVBMSUNBVElWRV9QUkVDRURFTkNFUFJFRklYX1BSRUNFREVOQ0VQT1NURklYX1BSRUNFREVOQ0VTRUxFQ1RPUl9QUkVDRURFTkNFYmxhY2tsaXN0ZWRDb3JlQ2xhc3Nlc1R5cGVMYWJlbGVybmFtZU1hcG51bGwtdHlwZW51bGwtY29uc3RhbnRtZXNzYWdlc29yaWdpbk1lc3NhZ2Vpc09iamVjdG5hbWVGb3JFbnRpdHlub2RlTmFtZWxhYmVsc0Zvck5hbWVlbnRpdHlGb3JOYW1lYm90dG9tLXR5cGUgRnVuY3Rpb24gZXh0ZW5kcyB0eXBlQXJncHJpbnRpbmcgdW5ldmFsdWF0ZWQgY29uc3RhbnRzTGFiZWxlZE5vZGV0eXBlTGFiZWxlci8qCiAtIHVua25vd25Vcml1bmtub3duZmFzdGEua2VybmVsX2FwaUNsb25lVmlzaXRvcmluc3RhbnRpYXRlVG9Cb3VuZHNwcmludE5vZGVPbnByaW50UXVhbGlmaWVkTmFtZU9uZmFzdGEuY3Jhc2hDb250ZW50VHlwZUh0dHBDbGllbnRIdHRwQ2xpZW50UmVxdWVzdFNvY2tldEV4Y2VwdGlvbkNyYXNoIHdoZW4gY29tcGlsaW5nICwKYXQgY2hhcmFjdGVyIG9mZnNldCBkZWZhdWx0U2VydmVyQWRkcmVzc2h0dHA6Ly8xMjcuMC4wLjE6NTk0MTAvaGFzQ3Jhc2hlZGZpcnN0U291cmNlVXJpcmVzZXRDcmFzaFJlcG9ydGluZ3JlcG9ydENyYXNoOnNhdmVkX3RyeV9jb250ZXh0X3ZhcjI6ZXhjZXB0aW9uMDpzdGFja190cmFjZTBub3RlcGFja2FnZTpmYXN0YXNlcnZlclVyaXBvc3RVcmxmb3JjZQpTZW5kaW5nIGNyYXNoIHJlcG9ydCBkYXRhcGVyc2lzdGVudENvbm5lY3Rpb25idWZmZXJPdXRwdXRjb25uZWN0aW9uSW5mb3JlbW90ZUFkZHJlc3NyZW1vdGVQb3J0aGVhZGVyc2NvbnRlbnRUeXBlCgoKRkU6OkVSUk9SOjoKCgpFcnJvciB3aGVuIGNvbnZlcnRpbmcgIHRvIHN0cmluZy5jdXJyZW50VXJpZmFzdGEuZGlsbF90YXJnZXRDbGFzc0J1aWxkZXJUYXJnZXRJbXBsZW1lbnRhdGlvbkRpbGxMaWJyYXJ5QnVpbGRlckRpbGxMb2FkZXJsaWJyYXJ5QnVpbGRlcnNiYWNrZW5kVGFyZ2V0YWRkU291cmNlSW5mb3JtYXRpb25maW5hbGl6ZUV4cG9ydHNjcmVhdGVMaWJyYXJ5QnVpbGRlcm9yaWdpbmxpYnJhcnlCdWlsZGVyTm8gbGlicmFyeSBmb3VuZCBmb3IgYnJlYWtDeWNsZWFkZExpYnJhcnlmYXN0YS5rZXJuZWxfdGFyZ2V0RGlsbE1lbWJlckJ1aWxkZXJBbWJpZ3VvdXNCdWlsZGVyU291cmNlQ2xhc3NCdWlsZGVyU291cmNlTGlicmFyeUJ1aWxkZXJTb3VyY2VMb2FkZXJ0cmFuc2Zvcm1MaWJyYXJpZXNCdWlsZGVySW52YWxpZFR5cGVCdWlsZGVyRmllbGRCdWlsZGVyTmFtZWRUeXBlQnVpbGRlclByb2NlZHVyZUJ1aWxkZXJMaWJyYXJ5QnVpbGRlclR5cGVCdWlsZGVyVHlwZURlY2xhcmF0aW9uQnVpbGRlcktlcm5lbENvbnN0YW50RXJyb3JSZXBvcnRlck1ldGFkYXRhQ29sbGVjdG9ybWV0YWRhdGFDb2xsZWN0b3JkeW5hbWljVHlwZWV4Y2x1ZGVTb3VyY2VjbG9uZWRGb3JtYWxzY3JlYXRlTG9hZGVyZW50cnlQb2ludHNwYWNrYWdlc01hcGFzU3RyaW5ncmVtb3ZlRnJhZ21lbnRwYWNrYWdlOmFkZFByb2JsZW1yZWFkYWNjZXNzb3JidWlsZGVyc2NvbGxlY3RNeUNsYXNzZXNpc1BhdGNoYmluZG9iamVjdENsYXNzQnVpbGRlcmludGVyZmFjZXNjcmVhdGVUeXBlSW5mZXJlbmNlRW5naW5lYmVjb21lQ29yZUxpYnJhcnlsb29rdXBMb2NhbE1lbWJlcnJlc29sdmVQYXJ0c2NvbXB1dGVMaWJyYXJ5U2NvcGVzcmVzb2x2ZVR5cGVzY29tcHV0ZURlZmF1bHRUeXBlc215Q2xhc3Nlc2NoZWNrU2VtYW50aWNzZmluaXNoVHlwZVZhcmlhYmxlc2ZpbmFsaXplSW5pdGlhbGl6aW5nRm9ybWFsc2luc3RhbGxEZWZhdWx0U3VwZXJ0eXBlc2luc3RhbGxTeW50aGV0aWNDb25zdHJ1Y3RvcnNyZXNvbHZlQ29uc3RydWN0b3JzY29tcHV0ZUNvcmVUeXBlc2J1aWxkQ2xhc3NIaWVyYXJjaHljb21wdXRlSGllcmFyY2h5cGVyZm9ybVRvcExldmVsSW5mZXJlbmNlY2hlY2tTdXBlcnR5cGVzY2hlY2tCb3VuZHNjaGVja092ZXJyaWRlc2NoZWNrQWJzdHJhY3RNZW1iZXJzY2hlY2tSZWRpcmVjdGluZ0ZhY3Rvcmllc2FkZE5vU3VjaE1ldGhvZEZvcndhcmRlcnNjaGVja01peGluc2J1aWxkT3V0bGluZUV4cHJlc3Npb25zaW5zdGFsbEFsbENvbXBvbmVudFByb2JsZW1zYWxsQ29tcG9uZW50UHJvYmxlbXNCdWlsZGluZyBjb21wb25lbnRidWlsZEJvZGllc2ZpbmlzaENsb25lZFBhcmFtZXRlcnNmaW5pc2hEZWZlcnJlZExvYWRUZWFyb2Zmc2ZpbmlzaE5vU3VjaE1ldGhvZEZvcndhcmRlcnNmaW5pc2hOYXRpdmVNZXRob2RzZmluaXNoUGF0Y2hNZXRob2RzZmluaXNoQWxsQ29uc3RydWN0b3JzcnVuQnVpbGRUcmFuc2Zvcm1hdGlvbnNmb3JtYXR0ZWRNZXNzYWdlY29weVNvdXJjZWRlY2xhcmF0aW9uZXhwb3J0U2NvcGVwcm9ibGVtZ2V0Rmlyc3REZWNsYXJhdGlvbkxpbmtlZCBjb21wb25lbnRidWlsZE1peGVkSW5UeXBlSW5zdGFsbGVkIE9iamVjdCBhcyBpbXBsaWNpdCBzdXBlcmNsYXNzaXNFeHRlbnNpb25pbnN0YWxsRm9yd2FyZGluZ0NvbnN0cnVjdG9yc2luc3RhbGxEZWZhdWx0Q29uc3RydWN0b3JJbnN0YWxsZWQgc3ludGhldGljIGNvbnN0cnVjdG9yc3Byb2NhZGRTeW50aGV0aWNDb25zdHJ1Y3Rvcm1ha2VEZWZhdWx0Q29uc3RydWN0b3JzdWJzdGl0dXRpb25NYXBtYWtlTWl4aW5BcHBsaWNhdGlvbkNvbnN0cnVjdG9yY29weUZvcm1hbGNsb25lbWFrZUNvbnN0cnVjdG9yUmV0dXJuVHlwZW9yaWdpbmFsY2xvbmVydHlwZVN1YnN0aXR1dGlvbkNsb25lZCBkZWZhdWx0IHZhbHVlcyBvZiBmb3JtYWxzdHlwZVBhcmFtZXRlclR5cGVzdHlwZVBhcmFtZXRlcnBsYXRmb3JtTGlicmFyeWRhcnQ6Y29sbGVjdGlvbmZvdW5kbWlycm9yc0Nhbid0IGZpbmQgcGxhdGZvcm1MaWJyYXJpZXNmaW5pc2hDb25zdHJ1Y3RvcnNGaW5pc2hlZCBjb25zdHJ1Y3RvcnN1bmluaXRpYWxpemVkRmllbGRzbm9uRmluYWxGaWVsZHNjb25zdHJ1Y3RvckluaXRpYWxpemVkRmllbGRzc3VwZXJUYXJnZXRpc1JlZGlyZWN0aW5nbXlJbml0aWFsaXplZEZpZWxkc2ZpZWxkQnVpbGRlcnNjb3BlbG9jYWxpbml0aWFsaXplZEZpZWxkc2RhcnQ6aHRtbGRhcnQ6c3ZnZGFydDpfbmF0aXZlX3R5cGVkX2RhdGFkYXJ0Ol9pbnRlcmNlcHRvcnNqc19zdHJpbmcuZGFydGluc2VydGVuYWJsZUNvbnN0YW50VXBkYXRlMjAxOGRlc3VnYXJTZXRzRXZhbHVhdGVkIGNvbnN0YW50c3J1blByb2NlZHVyZVRyYW5zZm9ybWF0aW9uc1ZlcmlmaWVkIGNvbXBvbmVudHJlYWRQYXRjaEZpbGVzcGFydE9mZnNldHNwYXJ0T2ZVcmlLZXJuZWxEaWFnbm9zdGljUmVwb3J0ZXJkZWZhdWx0U3VwZXJDb25zdHJ1Y3RvcklPU2lua0xpbWl0ZWRCaW5hcnlQcmludGVyQnl0ZVNpbmtrRGVidWdDbGFzc05hbWUjRGVidWdDbGFzc3dyaXRlQ29tcG9uZW50VG9GaWxlYnl0ZVNpbmtjcmVhdGVFeHByZXNzaW9uRXZhbHVhdGlvbkNvbXBvbmVudGZha2VMaWJyYXJ5ZXZhbHVhdGVyZWFsQ2xhc3NmYWtlQ2xhc3N0eXBlUGFyYW1zdHlwZVBhcmFtbmV3Tm9kZXZpc2l0VHlwZXNlcmlhbGl6ZVByb2NlZHVyZWZhc3RhLnZlcmlmaWVyVmVyaWZ5aW5nVmlzaXRvclR5cGVTY2hlbWFWaXNpdG9yVW5rbm93blR5cGVTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnRGYXN0YVZlcmlmeWluZ1Zpc2l0b3Jza2lwUGxhdGZvcm1pc091dGxpbmVjaGVja0xvY2F0aW9uJyBoYXMgbm8gZmlsZVVyaScgaGFzIG5vIGZpbGVPZmZzZXRjaGVja1N1cGVySW52b2NhdGlvbmNvbnRhaW5pbmdNZW1iZXJnZXRDb250YWluaW5nTWVtYmVyU3VwZXIgY2FsbCBvdXRzaWRlIG9mIGFueSBtZW1iZXJTdXBlciBjYWxsIGluIGEgbWVtYmVyIGxhY2tpbmcgVHJhbnNmb3JtZXJGbGFnLnN1cGVyQ2FsbHNkZXRhaWxzTm8gb2Zmc2V0IGZvciBMZWFraW5nIHNoYWRvdyBub2RlOiB2aXNpdFVua25vd25UeXBlVW5leHBlY3RlZCBhcHBlYXJhbmNlIG9mIHRoZSB1bmtub3duIHR5cGUuQXR0ZW1wdCB0byBpbnZva2UgcmVkaXJlY3RpbmcgZmFjdG9yeS52ZXJpZmllcmZhc3RhLmxvYWRlclF1ZXVldW5wYXJzZWRMaWJyYXJpZXNoYW5kbGVkRXJyb3JzdW5oYW5kbGVkRXJyb3Jzc2Vlbk1lc3NhZ2VzYnl0ZUNvdW50b3V0bGluZVN1bW1hcnlUZW1wbGF0ZWlzU291cmNlTG9hZGVyZGFydC1leHRwYWNrYWdlRnJhZ21lbnR0cmFuc2xhdGVVcmlvcmctZGFydGxhbmctdW50cmFuc2xhdGFibGUtdXJpaGFzUGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbnBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NYWpvcnBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NaW5vcnByb3BlcnRpZXNmb3VuZEVudHJpZXNwcm9wZXJ0eWRhcnQ9bGFuZ2F1Z2VWZXJzaW9uU3RyaW5nZG90U2VwYXJhdGVkUGFydHNleHBsaWNpdGxvYWRFeHRyYVJlcXVpcmVkTGlicmFyaWVzbWF5SW1wbGVtZW50UmVzdHJpY3RlZFR5cGVzcmVjb3JkQWNjZXNzaXNQYXJ0ZW5zdXJlQ29yZUxpYnJhcnlidWlsZEJvZHlsb2dTdW1tYXJ5cmVtb3ZlRmlyc3RidWlsZE91dGxpbmVpbk1pY3Jvc2Vjb25kc3dhc0hhbmRsZWRwcm9ibGVtT25MaWJyYXJ5YWRkTWVzc2FnZWZpeFNldmVyaXR5bWVzc2FnZTogCmNoYXJPZmZzZXQ6IApmaWxlVXJpOiAKc2V2ZXJpdHk6IGNvbnRleHRNZXNzYWdlY3JlYXRlRm9ybWF0dGVkTWVzc2FnZWdldEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JnZXRDb21waWxlVGltZUVycm9yZ2V0RHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcmdldE5hdGl2ZUFubm90YXRpb25jb21wdXRlQ2xhc3NCdWlsZGVyRnJvbVRhcmdldENsYXNzY29tcHV0ZVR5cGVCdWlsZGVydW50cmFuc2xhdGFibGVVcmlTY2hlbWVmcm9udF9lbmQuZnJvbnRfZW5kZmFzdGEuc2Nhbm5lci5hYnN0cmFjdF9zY2FubmVyTGlzdE1peGluVWludDE2TGlzdFVpbnQzMkxpc3ROb25Bc2NpaUlkZW50aWZpZXJUb2tlbktleXdvcmRTdGF0ZWxhbmd1YWdlVmVyc2lvbkFic3RyYWN0U2Nhbm5lckxBWllfQVNTSUdOTUVOVF9FTkFCTEVEX2VuYWJsZUV4dGVuc2lvbk1ldGhvZHNfZW5hYmxlTm9uTnVsbGFibGVfZW5hYmxlVHJpcGxlU2hpZnRlcnJvclRhaWxjb21tZW50c2NvbW1lbnRzVGFpbGdyb3VwaW5nU3RhY2tudW1iZXJPZkJ5dGVzSGludGVuYWJsZUV4dGVuc2lvbk1ldGhvZHNlbmFibGVOb25OdWxsYWJsZWVuYWJsZVRyaXBsZVNoaWZ0YWR2YW5jZWN1cnJlbnRBc1VuaWNvZGVwZWVraGFuZGxlVW5pY29kZXN0YXJ0U2Nhbk9mZnNldHNjYW5PZmZzZXRzdHJpbmdPZmZzZXRmaXJzdFRva2VuYmVnaW5Ub2tlbmFwcGVuZFN1YnN0cmluZ1Rva2VuZXh0cmFPZmZzZXRhcHBlbmRUb2tlbmNyZWF0ZVN1YnN0cmluZ1Rva2VuYXBwZW5kU3ludGhldGljU3Vic3RyaW5nVG9rZW5zeW50aGV0aWNDaGFyc2NyZWF0ZVN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuYXBwZW5kUHJlY2VkZW5jZVRva2Vuc2VsZWN0Y2hvaWNlYXBwZW5kS2V5d29yZFRva2VuZGlzY2FyZE9wZW5MdGFwcGVuZEVvZlRva2VudW5tYXRjaGVkQmVnaW5Hcm91cGFwcGVuZFdoaXRlU3BhY2VsaW5lRmVlZEluTXVsdGlsaW5lYXBwZW5kQmVnaW5Hcm91cGFwcGVuZEVuZEdyb3Vwb3BlbktpbmRkaXNjYXJkQmVnaW5Hcm91cFVudGlsYXBwZW5kR3RhcHBlbmRHdEd0cHJlcGVuZEVycm9yVG9rZW5jcmVhdGVDb21tZW50VG9rZW5jcmVhdGVEYXJ0RG9jVG9rZW5jcmVhdGVMYW5ndWFnZVZlcnNpb25Ub2tlbm9yaWdpbmFsU3RhY2tkaXNjYXJkSW50ZXJwb2xhdGlvbmF0RW5kT2ZGaWxlb2xkVGFpbGJpZ0hlYWRlclN3aXRjaGJpZ1N3aXRjaHRva2VuaXplU2xhc2hPckNvbW1lbnR0b2tlbml6ZUxhbmd1YWdlVmVyc2lvbk9yU2luZ2xlTGluZUNvbW1lbnRuZXh0TG93ZXJ0b2tlbml6ZVJhd1N0cmluZ0tleXdvcmRPcklkZW50aWZpZXJ0b2tlbml6ZUtleXdvcmRPcklkZW50aWZpZXJ0b2tlbml6ZURvdHNPck51bWJlcnRva2VuaXplRXF1YWxzdG9rZW5pemVTdHJpbmd0b2tlbml6ZUxlc3NUaGFudG9rZW5pemVHcmVhdGVyVGhhbnRva2VuaXplRXhjbGFtYXRpb250b2tlbml6ZU9wZW5TcXVhcmVCcmFja2V0dG9rZW5pemVBdHRva2VuaXplTnVtYmVydG9rZW5pemVBbXBlcnNhbmR0b2tlbml6ZUhleE9yTnVtYmVydG9rZW5pemVRdWVzdGlvbnRva2VuaXplQmFydG9rZW5pemVQbHVzdG9rZW5pemVNaW51c3Rva2VuaXplTXVsdGlwbHl0b2tlbml6ZUNhcmV0dG9rZW5pemVUaWxkZXRva2VuaXplUGVyY2VudHRva2VuaXplVGFndG9rZW5pemVGcmFjdGlvblBhcnRuZXh0bmV4dHRva2VuaXplSGV4aGFzRGlnaXRzZG9uZWhhc0RpZ2l0aGFzRXhwb25lbnREaWdpdHN0b2tlbml6ZU11bHRpTGluZUNvbW1lbnR0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50dG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3RtYWpvclN0YXJ0bWlub3JTdGFydF9hcHBlbmRUb0NvbW1lbnRTdHJlYW1kYXJ0ZG9jYXBwZW5kRGFydERvY2FwcGVuZENvbW1lbnRhc2NpaU9ubHlDb21tZW50YXNjaWlPbmx5TGluZXN1bmljb2RlU3RhcnRuZXN0aW5nYWR2YW5jZUFmdGVyRXJyb3JuZXdDb21tZW50YWxsb3dEb2xsYXJuZXh0Q2FwaXRhbHRva2VuaXplSWRlbnRpZmllcnJhd3F1b3RlQ2hhcnRva2VuaXplTXVsdGlMaW5lU3RyaW5ndG9rZW5pemVTaW5nbGVMaW5lUmF3U3RyaW5ndG9rZW5pemVTaW5nbGVMaW5lU3RyaW5ncXVvdGVTdGFydHRva2VuaXplU3RyaW5nSW50ZXJwb2xhdGlvbnVudGVybWluYXRlZFN0cmluZ2lzTXVsdGlMaW5laXNSYXd0b2tlbml6ZUludGVycG9sYXRlZEV4cHJlc3Npb250b2tlbml6ZUludGVycG9sYXRlZElkZW50aWZpZXJ0b2tlbml6ZU11bHRpTGluZVJhd1N0cmluZ2FzY2lpT25seVN0cmluZ2FzY2lpT25seUxpbmVlcnJvclRva2VuY29kZVVuaXRzc3VmZml4ZXJyb3JTdGFydHNob3VsZEFkdmFuY2VfTGluZVN0YXJ0cyZPYmplY3QmTGlzdE1peGludm06cHJlZmVyLWlubGluZW1hdGNoRm91bmR3cml0ZUFsbF9jbG9zZUdhcF9maWx0ZXJyZXRhaW5NYXRjaGluZ3JldGFpbmVkX2NvbXBhcmVBbnlzaHVmZmxlcmFuZG9tcG9zbmV4dEludHRtcGxpc3RMZW5ndGhnZXRSYW5nZXJlbW92ZVJhbmdlZmlsbHNraXBDb3VudG90aGVyTGlzdG90aGVyU3RhcnRyZXBsYWNlUmFuZ2VuZXdDb250ZW50c3JlbW92ZUxlbmd0aGluc2VydExlbmd0aGluc2VydEVuZGluZGV4V2hlcmVsYXN0SW5kZXhXaGVyZXJlbW92ZUF0aW5zZXJ0QWxsaW5zZXJ0aW9uTGVuZ3Roc2V0QWxsTGluZVN0YXJ0c2FycmF5YXJyYXlMZW5ndGhleHBlY3RlZE51bWJlck9mTGluZXNncm93c3dpdGNoVG9VaW50MzJuZXdMZW5ndGhNaW5pbXVtbmV3QXJyYXljbGFzc2ljY2xvc2VCcmFjZUluZm9Gb3JfaXNJZGVudGlmaWVyQ2hhcmRhcnQyanMuc2Nhbm5lci5zdHJpbmdfc2Nhbm5lcmVuc3VyZVplcm9UZXJtaW5hdGlvbgBpc0xlZ2FsSWRlbnRpZmllcnN0YXJ0VG9rZW5mYXN0YS5zY2FubmVyLnV0ZjhfYnl0ZXNfc2Nhbm5lcnVuaWNvZGVCb21DaGFyYWN0ZXJSdW5lc2NhblNsYWNrc2NhblNsYWNrT2Zmc2V0dXRmOFNsYWNrbGFzdFVuaWNvZGVPZmZzZXRzdHJpbmdPZmZzZXRTbGFja09mZnNldGNvbnRhaW5zQm9tQXRuZXh0Q29kZVBvaW50bmV4dEJ5dGVleHBlY3RlZEhpZ2hCeXRlc3Jlc2Zhc3RhLnNjYW5uZXIucmVjb3ZlckludGVybmFsIGVycm9yOiBBbGwgZXJyb3IgdG9rZW5zIHNob3VsZCBoYXZlIGJlZW4gcHJlcGVuZGVkOnN5bnRoZXNpemVUb2tlbnNraXBUb0VvZmNsb3NlQnJhY2VGb3JvcGVuQnJhY2VjbG9zZVF1b3RlRm9yb3BlblF1b3RlIiIiJycnciJyJ3IiIiJyJycnZGFydF9zY2FubmVyLmVycm9yX3Rva2VuZXJyb3JNc2deI1swLTldKiAqUGFyc2VydHJhY2VMaW5lc3Vuc3VwcG9ydGVkIG9wZXJhdGlvbkVuY29kaW5nRXJyb3JUb2tlbkVuY29kaW5nRXJyb3JUb2tlbigpTm9uQXNjaWlJZGVudGlmaWVyVG9rZW4oTm9uQXNjaWlXaGl0ZXNwYWNlVG9rZW5Ob25Bc2NpaVdoaXRlc3BhY2VUb2tlbihBc2NpaUNvbnRyb2xDaGFyYWN0ZXJUb2tlbkFzY2lpQ29udHJvbENoYXJhY3RlclRva2VuKFVuc3VwcG9ydGVkT3BlcmF0b3IoVW50ZXJtaW5hdGVkU3RyaW5nKFVudGVybWluYXRlZFRva2VuKFVubWF0Y2hlZFRva2VuKGZhc3RhLnNjYW5uZXIudG9rZW5fY29uc3RhbnRzS0VZV09SRF9UT0tFTlNDUklQVF9UT0tFTkJBRF9JTlBVVF9UT0tFTkRPVUJMRV9UT0tFTklOVF9UT0tFTlJFQ09WRVJZX1RPS0VOSEVYQURFQ0lNQUxfVE9LRU5TVFJJTkdfVE9LRU5BTVBFUlNBTkRfVE9LRU5CQUNLUElOR19UT0tFTkJBQ0tTTEFTSF9UT0tFTkJBTkdfVE9LRU5CQVJfVE9LRU5DT0xPTl9UT0tFTkNPTU1BX1RPS0VORVFfVE9LRU5HVF9UT0tFTkhBU0hfVE9LRU5PUEVOX0NVUkxZX0JSQUNLRVRfVE9LRU5PUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOT1BFTl9QQVJFTl9UT0tFTkxUX1RPS0VOTUlOVVNfVE9LRU5QRVJJT0RfVE9LRU5QTFVTX1RPS0VOUVVFU1RJT05fVE9LRU5BVF9UT0tFTkNMT1NFX0NVUkxZX0JSQUNLRVRfVE9LRU5DTE9TRV9TUVVBUkVfQlJBQ0tFVF9UT0tFTkNMT1NFX1BBUkVOX1RPS0VOU0VNSUNPTE9OX1RPS0VOU0xBU0hfVE9LRU5USUxERV9UT0tFTlNUQVJfVE9LRU5QRVJDRU5UX1RPS0VOQ0FSRVRfVE9LRU5TVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTkxUX0VRX1RPS0VORlVOQ1RJT05fVE9LRU5TTEFTSF9FUV9UT0tFTlBFUklPRF9QRVJJT0RfUEVSSU9EX1RPS0VOUEVSSU9EX1BFUklPRF9UT0tFTkVRX0VRX0VRX1RPS0VORVFfRVFfVE9LRU5MVF9MVF9FUV9UT0tFTkxUX0xUX1RPS0VOR1RfRVFfVE9LRU5HVF9HVF9FUV9UT0tFTklOREVYX0VRX1RPS0VOSU5ERVhfVE9LRU5CQU5HX0VRX0VRX1RPS0VOQkFOR19FUV9UT0tFTkFNUEVSU0FORF9BTVBFUlNBTkRfVE9LRU5BTVBFUlNBTkRfQU1QRVJTQU5EX0VRX1RPS0VOQU1QRVJTQU5EX0VRX1RPS0VOQkFSX0JBUl9UT0tFTkJBUl9CQVJfRVFfVE9LRU5CQVJfRVFfVE9LRU5TVEFSX0VRX1RPS0VOUExVU19QTFVTX1RPS0VOUExVU19FUV9UT0tFTk1JTlVTX01JTlVTX1RPS0VOTUlOVVNfRVFfVE9LRU5USUxERV9TTEFTSF9FUV9UT0tFTlRJTERFX1NMQVNIX1RPS0VOUEVSQ0VOVF9FUV9UT0tFTkdUX0dUX1RPS0VOQ0FSRVRfRVFfVE9LRU5DT01NRU5UX1RPS0VOU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUl9UT0tFTlFVRVNUSU9OX1BFUklPRF9UT0tFTlFVRVNUSU9OX1FVRVNUSU9OX1RPS0VOUVVFU1RJT05fUVVFU1RJT05fRVFfVE9LRU5HRU5FUklDX01FVEhPRF9UWVBFX0FTU0lHTl9UT0tFTkdFTkVSSUNfTUVUSE9EX1RZUEVfTElTVF9UT0tFTkdUX0dUX0dUX1RPS0VOUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT05fVE9LRU5HVF9HVF9HVF9FUV9UT0tFTlFVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOZmFzdGEuYm9keV9idWlsZGVyQ29uc3RhbnRDb250ZXh0ZmFzdGFNb2RpZmllcmNvbnN0TWFza2NvdmFyaWFudE1hc2tmaW5hbE1hc2tsYXRlTWFza2NhbGxOYW1laW5kZXhHZXROYW1laW5kZXhTZXROYW1lbWludXNOYW1lcGx1c05hbWVBc3NlcnRQYXJzZXJGb3JtYWxQYXJhbWV0ZXJLaW5kSWRlbnRpZmllckNvbnRleHRNZW1iZXJLaW5kbGVuZ3RoRm9yVG9rZW5sZW5ndGhPZlNwYW5vZmZzZXRGb3JUb2tlbm9wdGlvbmFsUXVvdGVhbmFseXplUXVvdGV1bmVzY2FwZXVuZXNjYXBlRmlyc3RTdHJpbmdQYXJ0dW5lc2NhcGVMYXN0U3RyaW5nUGFydHVuZXNjYXBlU3RyaW5nUHJvYmxlbUJ1aWxkZXJGaXhlZE51bGxhYmxlTGlzdEdyb3dhYmxlTGlzdEp1bXBUYXJnZXRLaW5kTnVsbFZhbHVlUGFyc2VyUmVjb3ZlcnlTY29wZUxpc3RlbmVyVHlwZUluZmVycmVyVHlwZVByb21vdGVyVHlwZVByb21vdGlvbkZhY3RUeXBlUHJvbW90aW9uU2NvcGVTcHJlYWRNYXBFbnRyeWNvbnZlcnRUb01hcEVudHJ5aXNDb252ZXJ0aWJsZVRvTWFwRW50cnlDb25zdG5lc3NEZWxheWVkQXNzaWdubWVudERlbGF5ZWRQb3N0Zml4SW5jcmVtZW50R2VuZXJhdG9ySW5jb21wbGV0ZUVycm9yR2VuZXJhdG9ySW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9ySW5jb21wbGV0ZVNlbmRHZW5lcmF0b3JJbmRleGVkQWNjZXNzR2VuZXJhdG9yTG9hZExpYnJhcnlHZW5lcmF0b3JQYXJlbnRoZXNpemVkRXhwcmVzc2lvbkdlbmVyYXRvclBhcnNlckVycm9yR2VuZXJhdG9yUHJlZml4VXNlR2VuZXJhdG9yUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JSZWFkT25seUFjY2Vzc0dlbmVyYXRvclNlbmRBY2Nlc3NHZW5lcmF0b3JTdGF0aWNBY2Nlc3NHZW5lcmF0b3JTdXBlckluZGV4ZWRBY2Nlc3NHZW5lcmF0b3JUaGlzQWNjZXNzR2VuZXJhdG9yVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yVHlwZVVzZUdlbmVyYXRvclVubGlua2VkR2VuZXJhdG9yVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3JWYXJpYWJsZVVzZUdlbmVyYXRvcmJ1aWxkSXNOdWxsRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlckZvcmVzdEltcGxpY2l0VHlwZUFyZ3VtZW50c2hhZG93U3ludGhldGljV3JhcHBlcmNhbGN1bGF0ZUJvdW5kc0JvZHlCdWlsZGVyZm9yZXN0ZGVjbGFyYXRpb25CdWlsZGVyY2xhc3NCdWlsZGVyaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyZW5jbG9zaW5nU2NvcGVzdHJpbmdFeHBlY3RlZEFmdGVyTmF0aXZlaWdub3JlTWFpbkluR2V0TWFpbkNsb3N1cmV0eXBlSW5mZXJyZXJ0eXBlUHJvbW90ZXJuZWVkc0ltcGxpY2l0U3VwZXJJbml0aWFsaXplcmZvcm1hbFBhcmFtZXRlclNjb3BlaW5Jbml0aWFsaXplcmluRmllbGRJbml0aWFsaXplcmluQ2F0Y2hDbGF1c2VpbkNhdGNoQmxvY2tmdW5jdGlvbk5lc3RpbmdMZXZlbHRyYW5zZm9ybUNvbGxlY3Rpb25zdHJhbnNmb3JtU2V0TGl0ZXJhbHNwcm9ibGVtSW5Mb29wT3JTd2l0Y2hzd2l0Y2hTY29wZWNvbnN0YW50Q29udGV4dENvbnN0YW50Q29udGV4dC5ub25lY3VycmVudExvY2FsVmFyaWFibGVUeXBlY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnNyZWRpcmVjdGluZ0ZhY3RvcnlJbnZvY2F0aW9uc3ZhcmlhYmxlc1dpdGhNZXRhZGF0YW11bHRpVmFyaWFibGVzV2l0aE1ldGFkYXRhZXh0ZW5zaW9uVGhpc19idWlsdGludWl3aXRoUGFyZW50c2ZvckZpZWxkZm9yT3V0bGluZUV4cHJlc3Npb250eXBlSW5mZXJlbmNlRW5naW5lY3JlYXRlTG9jYWxUeXBlSW5mZXJyZXJpbkNvbnN0cnVjdG9yaXNEZWNsYXJhdGlvbkluc3RhbmNlQ29udGV4dHR5cGVTY2hlbWFFbnZpcm9ubWVudGltcGxpY2l0VHlwZUFyZ3VtZW50cHVzaHBvcEZvclZhbHVldG9WYWx1ZXBvcHBvcEZvckVmZmVjdHRvRWZmZWN0cG9wRm9yVmFsdWVJZk5vdE51bGxidWlsZFNpbXBsZVJlYWRidWlsZFByb2JsZW1idWlsZEZvckVmZmVjdHBvcExpc3RGb3JWYWx1ZXBvcExpc3RGb3JFZmZlY3Rwb3BCbG9ja2Nsb3NlQnJhY2VjcmVhdGVCbG9ja3N0YWNrcG9wU3RhdGVtZW50SWZOb3ROdWxscG9wU3RhdGVtZW50d3JhcFZhcmlhYmxlc2VudGVyU3dpdGNoU2NvcGVOdWxsVmFsdWUuU3dpdGNoU2NvcGVleGl0U3dpdGNoU2NvcGVvdXRlclN3aXRjaFNjb3BldW5jbGFpbWVkRm9yd2FyZERlY2xhcmF0aW9uc3VzZXJzd3JhcEluUHJvYmxlbVN0YXRlbWVudGZvcndhcmREZWNsYXJlTGFiZWx3cmFwVmFyaWFibGVJbml0aWFsaXplckluRXJyb3J3cmFwSW5Mb2NhdGVkUHJvYmxlbWRlY2xhcmVWYXJpYWJsZWNyZWF0ZUp1bXBUYXJnZXRpbmZlckFubm90YXRpb25zaW5mZXJNZXRhZGF0YXRyYW5zZm9ybUxpc3RQb3N0SW5mZXJlbmNlYmVnaW5NZXRhZGF0YWRlYnVnRXZlbnRDb25zdGFudENvbnRleHQuaW5mZXJyZWRlbmRNZXRhZGF0YXBlcmlvZEJlZm9yZU5hbWVNZXRhZGF0YXB1c2hRdWFsaWZpZWRSZWZlcmVuY2VfYnVpbGRDb25zdHJ1Y3RvclJlZmVyZW5jZUludm9jYXRpb25Db25zdG5lc3MuZXhwbGljaXRDb25zdG5hbWVPcmlnaW5wZXJpb2RnZW5lcmF0b3JidWlsZFByb3BlcnR5QWNjZXNzc2F2ZWRDb25zdGFudENvbnRleHR3cmFwSW5Qcm9ibGVtZW5kTWV0YWRhdGFTdGFyTWV0YWRhdGFTdGFyTnVsbFZhbHVlLk1ldGFkYXRhZW5kVG9wTGV2ZWxGaWVsZHNzdGF0aWNUb2tlbmNvdmFyaWFudFRva2VubGF0ZVRva2VudmFyRmluYWxPckNvbnN0VG9wTGV2ZWxGaWVsZHNyZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3JlbmRGaWVsZHNGaWVsZHNmaW5pc2hGaWVsZHNpbmZlckZpZWxkSW5pdGlhbGl6ZXJidWlsdFR5cGV0cmFuc2Zvcm1Qb3N0SW5mZXJlbmNlYnVpbGREYXJ0VHlwZXJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzZmluaXNoVmFyaWFibGVNZXRhZGF0YWVuZE1lbWJlcmVuZEJsb2NrRnVuY3Rpb25Cb2R5QmxvY2tGdW5jdGlvbkJvZHlOdWxsVmFsdWUuQmxvY2tleGl0TG9jYWxTY29wZXByZXBhcmVJbml0aWFsaXplcnNjb21wdXRlRm9ybWFsUGFyYW1ldGVySW5pdGlhbGl6ZXJTY29wZWZvcm1hbHNpc0luaXRpYWxpemluZ0Zvcm1hbGJ1aWxkSW52YWxpZEluaXRpYWxpemVyZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb25idWlsZEZpZWxkSW5pdGlhbGl6ZXJmb3JtYWxUeXBlYWRkSW5pdGlhbGl6ZXJoYW5kbGVOb0luaXRpYWxpemVyc05vSW5pdGlhbGl6ZXJzYmVnaW5Jbml0aWFsaXplcnNlbmRJbml0aWFsaXplcnNJbml0aWFsaXplcnNiZWdpbkluaXRpYWxpemVyZW5kSW5pdGlhbGl6ZXJidWlsZFN1cGVySW5pdGlhbGl6ZXJpc1Rocm93aW5mZXJJbml0aWFsaXplcl9jb21wdXRlUmV0dXJuVHlwZUNvbnRleHRmaW5pc2hGdW5jdGlvbmFzeW5jTW9kaWZpZXJmaW5pc2hlZGlzT3B0aW9uYWxyZWFsUGFyYW1ldGVyY3JlYXRlTnVsbExpdGVyYWxpbmZlclBhcmFtZXRlckluaXRpYWxpemVyaW5mZXJGdW5jdGlvbkJvZHlmdXR1cmVCb3R0b21UeXBlZnV0dXJlT2ZCb3R0b21zdHJlYW1Cb3R0b21UeXBlc3RyZWFtT2ZCb3R0b21pdGVyYWJsZUJvdHRvbVR5cGVpdGVyYWJsZU9mQm90dG9tYXN5bmMsIGFzeW5jKiwgc3luYywgb3Igc3luYypjcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50ZmluaXNoQ29uc3RydWN0b3JlbnN1cmVMaWJyYXJ5TG9hZGVkaXNCdWlsdEFuZE1hcmtlZGludm9jYXRpb25pbmZlcnJlZFR5cGVpbml0aWFsVGFyZ2V0cmVwbGFjZW1lbnROb2RlcmVkaXJlY3Rpb25UYXJnZXRyZXNvbHZlZFRhcmdldGNvbnN0cnVjdG9yTmFtZUZvckRpYWdub3N0aWNzZXZhbHVhdGVBcmd1bWVudHNCZWZvcmVjcmVhdGVBcmd1bWVudHNidWlsZEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JyZWRpcmVjdGluZ0ZhY3RvcnlCb2R5ZXJyb3JOYW1ldGhyb3dOb1N1Y2hNZXRob2RFcnJvcmJ1aWxkU3RhdGljSW52b2NhdGlvbmNvbnN0bmVzc0NvbnN0bmVzcy5leHBsaWNpdE5ld2ZpbmlzaE1ldGFkYXRhdGVtcG9yYXJ5UGFyZW50cGFyc2VTaW5nbGVFeHByZXNzaW9ucGFyc2VydHlwZVBhcmFtZXRlckJ1aWxkZXJzZW50ZXJGdW5jdGlvblR5cGVTY29wZWVudGVyTG9jYWxTY29wZWNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJTY29wZXBhcnNlRXhwcmVzc2lvbnN5bnRoZXRpY1ByZXZpb3VzVG9rZW5mYWtlUmV0dXJucGFyc2VJbml0aWFsaXplcnNjaGVja0VtcHR5cGFyc2VGaWVsZEluaXRpYWxpemVycGFyc2VBbm5vdGF0aW9ucGFyc2VNZXRhZGF0YWxvb2t1cENvbnN0cnVjdG9yY3JlYXRlQXJndW1lbnRzRW1wdHljaGVja0FyZ3VtZW50c0ZvckZ1bmN0aW9uZnVsbE5hbWVGb3JFcnJvcnNoYW5kbGVFeHByZXNzaW9uU3RhdGVtZW50ZW5kQXJndW1lbnRzZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXhoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uUGFyZW50aGVzaXplZENvbmRpdGlvbmNyZWF0ZVBhcmVudGhlc2l6ZWRDb25kaXRpb25oYW5kbGVQYXJlbnRoZXNpemVkRXhwcmVzc2lvblBhcmVudGhlc2l6ZWRFeHByZXNzaW9uaXNQYXJlbnRoZXNpemVkaGFuZGxlU2VuZGNoZWNrU3RhdGVOdWxsVmFsdWUuQXJndW1lbnRzTnVsbFZhbHVlLlR5cGVBcmd1bWVudHNTZW5kYXJndW1lbnRzVHlwZUFyZ3VtZW50c2FyZ3VtZW50c1NldFR5cGVBcmd1bWVudHNidWlsZERhcnRUeXBlQXJndW1lbnRzZmluaXNoU2VuZGRvSW52b2NhdGlvbmJ1aWxkTWV0aG9kSW52b2NhdGlvbmlzSW1wbGljaXRDYWxsYmVnaW5DYXNjYWRlZXh0ZW5kZW5kQ2FzY2FkZWNhc2NhZGVSZWNlaXZlcmZpbmFsaXplYmVnaW5DYXNlRXhwcmVzc2lvbmNhc2VLZXl3b3JkZW5kQ2FzZUV4cHJlc3Npb25jb2xvbmJlZ2luQmluYXJ5RXhwcmVzc2lvbmxoc2VudGVyTG9naWNhbEV4cHJlc3Npb25lbmRCaW5hcnlFeHByZXNzaW9uQmluYXJ5RXhwcmVzc2lvbmRvRG90T3JDYXNjYWRlRXhwcmVzc2lvbmRvTG9naWNhbEV4cHJlc3Npb25kb0lmTnVsbGRvSWZOb3ROdWxsdGhpc0FjY2Vzc29yUmVjZWl2ZXJjcmVhdGVUaGlzRXhwcmVzc2lvbmJ1aWxkQmluYXJ5T3BlcmF0b3JuZWdhdGVpc0NvbnN0YW50RXhwcmVzc2lvbmNyZWF0ZU5vdGxvZ2ljYWxFeHByZXNzaW9uY3JlYXRlTG9naWNhbEV4cHJlc3Npb25leGl0TG9naWNhbEV4cHJlc3Npb25jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb25zZW5kd2l0aFJlY2VpdmVyaXNOdWxsQXdhcmVhcmVBcmd1bWVudHNDb21wYXRpYmxlcGVyaW9kSW5kZXhrZXJuZWxOYW1ld2FyblVucmVzb2x2ZWRHZXRyZXBvcnRXYXJuaW5nd2FyblVucmVzb2x2ZWRTZXR3YXJuVW5yZXNvbHZlZE1ldGhvZGNyZWF0ZVRocm93YWRkUHJvYmxlbUVycm9ySWZDb25zdHBsYWluTmFtZWRvdEluZGV4d2FyblR5cGVBcmd1bWVudHNNaXNtYXRjaGxvb2t1cEluc3RhbmNlTWVtYmVyaGFuZGxlSWRlbnRpZmllcmRlcHJlY2F0ZWRkZXByZWNhdGVkX2lzU2NvcGVSZWZlcmVuY2VzY29wZUxvb2t1cGluRGVjbGFyYXRpb250b3BMZXZlbFZhcmlhYmxlRGVjbGFyYXRpb25maWVsZERlY2xhcmF0aW9uaGFzQ29uc3RDb25zdHJ1Y3RvckNvbnN0YW50Q29udGV4dC5yZXF1aXJlZGFsbG93ZWRJbkNvbnN0YW50RXhwcmVzc2lvbl9jcmVhdGVWYXJpYWJsZUdldGZhY3RnZXRGYWN0Rm9yQWNjZXNzY3VycmVudFNjb3BlX2NyZWF0ZVJlYWRPbmx5VmFyaWFibGVBY2Nlc3Npc1F1YWxpZmllZGZpbmRTdGF0aWNCdWlsZGVyX2dldE1haW5DbG9zdXJlaXNUeXBlRGVjbGFyYXRpb25pc0xvY2FsZ2V0dGVyaXNSZWd1bGFyTWV0aG9kaGFzUHJvYmxlbWxvb2t1cFNldHRlcnJlYWRUYXJnZXRoYW5kbGVRdWFsaWZpZWRRdWFsaWZpZWRxdWFsaWZpZXJ3aXRoUXVhbGlmaWVyYmVnaW5MaXRlcmFsU3RyaW5naGFuZGxlU3RyaW5nUGFydFN0cmluZ1BhcnRlbmRMaXRlcmFsU3RyaW5naW50ZXJwb2xhdGlvbkNvdW50Y3JlYXRlU3RyaW5nTGl0ZXJhbHF1b3RlY3JlYXRlU3RyaW5nQ29uY2F0ZW5hdGlvbmhhbmRsZU5hdGl2ZUNsYXVzZW5hdGl2ZVRva2VuaGFzTmFtZU5hdGl2ZUNsYXVzZWFzTGl0ZXJhbFN0cmluZ2hhbmRsZVNjcmlwdFNjcmlwdGhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb25saXRlcmFsQ291bnRTdHJpbmdKdXh0YXBvc2l0aW9uaGFuZGxlTGl0ZXJhbEludExpdGVyYWxJbnRsYXJnZSBpbnRlZ2VyY3JlYXRlSW50TGl0ZXJhbGNyZWF0ZUludExpdGVyYWxMYXJnZWhhbmRsZUVtcHR5RnVuY3Rpb25Cb2R5c2VtaWNvbG9uRXhwcmVzc2lvbkZ1bmN0aW9uQm9keWhhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHlhcnJvd1Rva2VuZW5kUmV0dXJuU3RhdGVtZW50aGFzRXhwcmVzc2lvbmJ1aWxkUHJvYmxlbVN0YXRlbWVudGNyZWF0ZVJldHVyblN0YXRlbWVudGJlZ2luVGhlblN0YXRlbWVudGVudGVyVGhlbkZvclR5cGVQcm9tb3Rpb25lbmRUaGVuU3RhdGVtZW50ZW50ZXJFbHNlZW5kSWZTdGF0ZW1lbnRpZlRva2VuZWxzZVRva2VuZWxzZVBhcnR0aGVuUGFydGV4aXRDb25kaXRpb25hbGNyZWF0ZUlmU3RhdGVtZW50ZW5kVmFyaWFibGVJbml0aWFsaXplcmFzc2lnbm1lbnRPcGVyYXRvclZhcmlhYmxlSW5pdGlhbGl6ZXJwdXNoTmV3TG9jYWxWYXJpYWJsZWVxdWFsc1Rva2VuaGFuZGxlTm9WYXJpYWJsZUluaXRpYWxpemVyTm9WYXJpYWJsZUluaXRpYWxpemVyZm9yU3ludGhldGljVG9rZW5jaGVja0JvdW5kc0luVmFyaWFibGVEZWNsYXJhdGlvbmJlZ2luRmllbGRJbml0aWFsaXplcmVuZEZpZWxkSW5pdGlhbGl6ZXJoYW5kbGVOb0ZpZWxkSW5pdGlhbGl6ZXJOb0ZpZWxkSW5pdGlhbGl6ZXJOdWxsVmFsdWUuRmllbGRJbml0aWFsaXplcmVuZEluaXRpYWxpemVkSWRlbnRpZmllcm5hbWVUb2tlbkluaXRpYWxpemVkSWRlbnRpZmllcmJlZ2luVmFyaWFibGVzRGVjbGFyYXRpb25tb2RpZmllcnNOdWxsVmFsdWUuVHlwZWVuZFZhcmlhYmxlc0RlY2xhcmF0aW9uVmFyaWFibGVzRGVjbGFyYXRpb252YXJpYWJsZXNEZWNsYXJhdGlvbmVuZEJsb2NraGFuZGxlSW52YWxpZFRvcExldmVsQmxvY2toYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbkFzc2lnbm1lbnRFeHByZXNzaW9uZW50ZXJMb29wZW50ZXJCcmVha1RhcmdldGJyZWFrVGFyZ2V0ZW50ZXJDb250aW51ZVRhcmdldGNvbnRpbnVlVGFyZ2V0ZXhpdExvb3BPclN3aXRjaGJ1aWxkVmFyaWFibGVEZWNsYXJhdGlvbnN2YXJpYWJsZU9yRXhwcmVzc2lvbmlzVmFyaWFibGVzRGVjbGFyYXRpb252YXJpYWJsZXNEZWNsYXJhdGlvbkV4dHJhY3REZWNsYXJhdGlvbnNoYW5kbGVGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50Rm9ySW5pdGlhbGl6ZXJFbXB0eVN0YXRlbWVudE51bGxWYWx1ZS5FeHByZXNzaW9uaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50Rm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50aGFuZGxlRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Gb3JJbml0aWFsaXplckxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbmhhbmRsZUZvckxvb3BQYXJ0c2ZvcktleXdvcmRsZWZ0UGFyZW5sZWZ0U2VwYXJhdG9ydXBkYXRlRXhwcmVzc2lvbkNvdW50ZW5kRm9yQ29udHJvbEZsb3dGb3JDb250cm9sRmxvd2ZvclRva2VuY29uZGl0aW9uU3RhdGVtZW50ZW5hYmxlQ29udHJvbEZsb3dDb2xsZWN0aW9uc2hhbmRsZVJlY292ZXJhYmxlRXJyb3Jpc0V4cHJlc3Npb25TdGF0ZW1lbnRnZXRFeHByZXNzaW9uRnJvbUV4cHJlc3Npb25TdGF0ZW1lbnRpc0VtcHR5U3RhdGVtZW50Y3JlYXRlRm9yTWFwRW50cnljcmVhdGVGb3JFbGVtZW50ZW5kRm9yU3RhdGVtZW50ZXhpdENvbnRpbnVlVGFyZ2V0ZXhpdEJyZWFrVGFyZ2V0aGFzVXNlcnNjcmVhdGVMYWJlbGVkU3RhdGVtZW50cmVzb2x2ZUNvbnRpbnVlc2NyZWF0ZUZvclN0YXRlbWVudHJlc29sdmVCcmVha3NzdXBwcmVzc01lc3NhZ2VlbmRBd2FpdEV4cHJlc3Npb25jcmVhdGVBd2FpdEV4cHJlc3Npb25lbmRJbnZhbGlkQXdhaXRFeHByZXNzaW9uaGFuZGxlQXN5bmNNb2RpZmllcmFzeW5jVG9rZW5zdGFyVG9rZW5oYW5kbGVMaXRlcmFsTGlzdGxlZnRCcmFja2V0Y29uc3RLZXl3b3JkcmlnaHRCcmFja2V0TGl0ZXJhbExpc3RlbGVtY3JlYXRlTGlzdExpdGVyYWxjaGVja0JvdW5kc0luTGlzdExpdGVyYWxidWlsZExpdGVyYWxTZXRsZWZ0QnJhY2VzZXRPck1hcEVudHJpZXNjcmVhdGVTZXRMaXRlcmFsY2hlY2tCb3VuZHNJblNldExpdGVyYWxoYW5kbGVMaXRlcmFsU2V0T3JNYXByaWdodEJyYWNlaGFzU2V0RW50cnlMaXRlcmFsU2V0T3JNYXB0eXBlQXJnQ291bnRpc1NldG1hcEVudHJpZXNidWlsZExpdGVyYWxNYXBoYW5kbGVMaXRlcmFsQm9vbExpdGVyYWxCb29sY3JlYXRlQm9vbExpdGVyYWxoYW5kbGVMaXRlcmFsRG91YmxlTGl0ZXJhbERvdWJsZWNyZWF0ZURvdWJsZUxpdGVyYWxoYW5kbGVMaXRlcmFsTnVsbExpdGVyYWxOdWxsY3JlYXRlTWFwTGl0ZXJhbGNoZWNrQm91bmRzSW5NYXBMaXRlcmFsaGFuZGxlTGl0ZXJhbE1hcEVudHJ5TGl0ZXJhbE1hcEVudHJ5Y3JlYXRlTWFwRW50cnlzeW1ib2xQYXJ0VG9TdHJpbmdlbmRMaXRlcmFsU3ltYm9saGFzaFRva2VuaWRlbnRpZmllckNvdW50TGl0ZXJhbFN5bWJvbGNyZWF0ZVN5bWJvbExpdGVyYWxoYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbmJhbmdyZXBvcnROb25OdWxsQXNzZXJ0RXhwcmVzc2lvbk5vdEVuYWJsZWRoYW5kbGVUeXBlcXVlc3Rpb25NYXJrcmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZXF1YWxpZmllZHF1YWxpZmllZExvb2t1cGRpc3BsYXlOYW1lYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzYmVnaW5GdW5jdGlvblR5cGV0eXBlVmFyaWFibGVzY3JlYXRlTmVzdGVkU2NvcGVmdW5jdGlvbi10eXBlIHNjb3BlaXNNb2RpZmlhYmxlc2NvcGVCdWlsZGVycmVwb3J0RHVwbGljYXRlZERlY2xhcmF0aW9uZW5kRnVuY3Rpb25UeXBlZnVuY3Rpb25Ub2tlbnRvRnVuY3Rpb25UeXBlaGFuZGxlVm9pZEtleXdvcmRWb2lkS2V5d29yZGhhbmRsZUFzT3BlcmF0b3JBc09wZXJhdG9yY2hlY2tCb3VuZHNJblR5cGVBcyBleHByZXNzaW9uY3JlYXRlQXNFeHByZXNzaW9uaGFuZGxlSXNPcGVyYXRvcm5vdElzT3BlcmF0b3Jpc0ludmVydGVkaXNFeHByZXNzaW9uY3JlYXRlSXNFeHByZXNzaW9uaGFuZGxlSXNDaGVja0lzIGV4cHJlc3Npb25iZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbnF1ZXN0aW9uZW50ZXJUaGVuaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29sb25lbmRDb25kaXRpb25hbEV4cHJlc3Npb25lbHNlRXhwcmVzc2lvbnRoZW5FeHByZXNzaW9uaGFuZGxlVGhyb3dFeHByZXNzaW9udGhyb3dUb2tlblRocm93RXhwcmVzc2lvbmJlZ2luRm9ybWFsUGFyYW1ldGVycmVxdWlyZWRUb2tlbmVuZEZvcm1hbFBhcmFtZXRlcnRoaXNLZXl3b3JkcGVyaW9kQWZ0ZXJUaGlzaW5pdGlhbGl6ZXJTdGFydGluaXRpYWxpemVyRW5kbWVtYmVyS2luZEZvcm1hbFBhcmFtZXRlcm5hbWVOb2RlTWVtYmVyS2luZC5HZW5lcmFsaXplZEZ1bmN0aW9uVHlwZWdldEZvcm1hbGJ1aWxkRm9ybWFsUGFyYW1ldGVyS2luZC5tYW5kYXRvcnllbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnNPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnNGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsTmFtZWRGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbGJlZ2luRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcmVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXJGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uZW5kRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb25kZWZhdWx0VmFsdWVFeHByZXNzaW9uaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyVmFsdWVkRm9ybWFsUGFyYW1ldGVyaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlYmVnaW5Gb3JtYWxQYXJhbWV0ZXJzZW5kRm9ybWFsUGFyYW1ldGVyc0Zvcm1hbFBhcmFtZXRlcnNvcHRpb25hbHNvcHRpb25hbHNDb3VudHBvcFBhZGRlZGJlZ2luQ2F0Y2hDbGF1c2VlbmRDYXRjaENsYXVzZUNhdGNoQ2xhdXNlaGFuZGxlQ2F0Y2hCbG9ja29uS2V5d29yZGNhdGNoS2V5d29yZGNvbW1hQ2F0Y2hCbG9ja2NhdGNoUGFyYW1ldGVyc3BvcElmTm90TnVsbGV4Y2VwdGlvblR5cGVjb21waWxlVGltZUVycm9yc3BhcmFtZXRlckNvdW50Y3JlYXRlQ2F0Y2hlbmRUcnlTdGF0ZW1lbnRjYXRjaENvdW50dHJ5S2V5d29yZGZpbmFsbHlLZXl3b3JkZmluYWxseUJsb2NrY2F0Y2hCbG9ja3NjYXRjaEJsb2Nrc0FuZEVycm9yc3RyeUJsb2NrdHJ5U3RhdGVtZW50Y3JlYXRlVHJ5U3RhdGVtZW50aGFuZGxlSW5kZXhlZEV4cHJlc3Npb25vcGVuU3F1YXJlQnJhY2tldGNsb3NlU3F1YXJlQnJhY2tldEluZGV4ZWRFeHByZXNzaW9uaGFuZGxlVW5hcnlQcmVmaXhFeHByZXNzaW9uVW5hcnlQcmVmaXhFeHByZXNzaW9ucmVjZWl2ZXJWYWx1ZWluY3JlbWVudE9wZXJhdG9yaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvblVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb25idWlsZFByZWZpeEluY3JlbWVudGhhbmRsZVVuYXJ5UG9zdGZpeEFzc2lnbm1lbnRFeHByZXNzaW9uVW5hcnlQb3N0Zml4QXNzaWdubWVudEV4cHJlc3Npb25lbmRDb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnN0cnVjdG9yUmVmZXJlbmNlY2hlY2tWYWx1ZU51bGxWYWx1ZS5JZGVudGlmaWVyQ29uc3RuZXNzLmltcGxpY2l0Y2hhckxlbmd0aGFyZ01lc3NhZ2V3cmFwU3ludGhldGljRXhwcmVzc2lvbndyYXBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uY2hlY2tCb3VuZHNJbkNvbnN0cnVjdG9ySW52b2NhdGlvbmNoZWNrQm91bmRzSW5GYWN0b3J5SW52b2NhdGlvbmNoZWNrQm91bmRzSW5TdGF0aWNJbnZvY2F0aW9uYXJndW1lbnRzUG9zaXRpb25hbGFyZ3VtZW50c05hbWVkY2hlY2tBcmd1bWVudHNGb3JUeXBlYmVnaW5OZXdFeHByZXNzaW9uTmV3IGV4cHJlc3Npb25iZWdpbkNvbnN0RXhwcmVzc2lvbmJlZ2luQ29uc3RMaXRlcmFsYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbmVuZENvbnN0TGl0ZXJhbGxpdGVyYWxlbmROZXdFeHByZXNzaW9uTmV3RXhwcmVzc2lvbm5hbWVMYXN0SWRlbnRpZmllcm5hbWVMYXN0VG9rZW5pbnZva2VDb25zdHJ1Y3RvcnR5cGVOYW1lZW5kSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb25JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbmJ1aWxkQ29uc3RydWN0b3JJbnZvY2F0aW9uZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5d3JhcFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uZW5kQ29uc3RFeHByZXNzaW9uYmVnaW5JZkNvbnRyb2xGbG93YmVnaW5UaGVuQ29udHJvbEZsb3doYW5kbGVFbHNlQ29udHJvbEZsb3dlbmRJZkNvbnRyb2xGbG93Y3JlYXRlSWZNYXBFbnRyeWNyZWF0ZUlmRWxlbWVudGVuZElmRWxzZUNvbnRyb2xGbG93ZWxzZUVudHJ5dGhlbkVudHJ5aGFuZGxlU3ByZWFkRXhwcmVzc2lvbnNwcmVhZFRva2VuU3ByZWFkRXhwcmVzc2lvbmVuYWJsZVNwcmVhZENvbGxlY3Rpb25zY3JlYXRlU3ByZWFkRWxlbWVudGVuZFR5cGVBcmd1bWVudHNUeXBlQXJndW1lbnRzaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHNJbnZhbGlkVHlwZUFyZ3VtZW50c2hhbmRsZVRoaXNFeHByZXNzaW9uaGFuZGxlU3VwZXJFeHByZXNzaW9uU3VwZXJFeHByZXNzaW9uaGFuZGxlTmFtZWRBcmd1bWVudE5hbWVkQXJndW1lbnRlbmRGdW5jdGlvbk5hbWVGdW5jdGlvbk5hbWVpc0xvY2FsRnVuY3Rpb25lbnRlckZ1bmN0aW9uZXhpdEZ1bmN0aW9uTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXNiZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbmJlZ2luTmFtZWRGdW5jdGlvbkV4cHJlc3Npb25uYW1lZCBmdW5jdGlvbmJlZ2luRnVuY3Rpb25FeHByZXNzaW9ucHVzaE5hbWVkRnVuY3Rpb25pc0Z1bmN0aW9uRXhwcmVzc2lvbmhhc0ltcGxpY2l0UmV0dXJuVHlwZWJ1aWxkRnVuY3Rpb25Ob2Rlb2xkSW5pdGlhbGl6ZXJpc0Vycm9uZW91c05vZGVlbmROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbmVuZExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbmVuZEZ1bmN0aW9uRXhwcmVzc2lvbmVuZERvV2hpbGVTdGF0ZW1lbnRkb0tleXdvcmR3aGlsZUtleXdvcmREb1doaWxlU3RhdGVtZW50Y3JlYXRlRG9TdGF0ZW1lbnRiZWdpbkZvckluRXhwcmVzc2lvbmVuZEZvckluRXhwcmVzc2lvbkZvckluRXhwcmVzc2lvbmhhbmRsZUZvckluTG9vcFBhcnRzYXdhaXRUb2tlbmxlZnRQYXJlbnRoZXNpc2luS2V5d29yZE51bGxWYWx1ZS5Bd2FpdFRva2VuZW5kRm9ySW5Db250cm9sRmxvd0ZvckluQ29udHJvbEZsb3dpblRva2VubHZhbHVlYnVpbGRGb3JJblZhcmlhYmxlY2hlY2tGb3JJblZhcmlhYmxlcHJvbG9ndWVidWlsZEZvckluQm9keWNyZWF0ZUZvckluTWFwRW50cnljcmVhdGVGb3JJbkVsZW1lbnRzeW50aGV0aWNBc3NpZ25tZW50YnVpbGRBc3NpZ25tZW50dm9pZENvbnRleHRlbmRGb3JJbkZvckluaGFuZGxlTGFiZWxMYWJlbGJlZ2luTGFiZWxlZFN0YXRlbWVudGxhYmVsQ291bnRjcmVhdGVOZXN0ZWRMYWJlbFNjb3BlZGVjbGFyZUxhYmVsZW5kTGFiZWxlZFN0YXRlbWVudGVuZFJldGhyb3dTdGF0ZW1lbnRyZXRocm93VG9rZW5SZXRocm93U3RhdGVtZW50Y3JlYXRlUmV0aHJvd1N0YXRlbWVudGhhbmRsZUZpbmFsbHlCbG9ja0ZpbmFsbHlCbG9ja2VuZFdoaWxlU3RhdGVtZW50Y3JlYXRlV2hpbGVTdGF0ZW1lbnRoYW5kbGVFbXB0eVN0YXRlbWVudGNyZWF0ZUVtcHR5U3RhdGVtZW50YmVnaW5Bc3NlcnRhc3NlcnRLZXl3b3JkZW5kQXNzZXJ0Y29tbWFUb2tlbnNlbWljb2xvblRva2VuQXNzZXJ0LlN0YXRlbWVudGNyZWF0ZUFzc2VydFN0YXRlbWVudEFzc2VydC5FeHByZXNzaW9uQXNzZXJ0LkluaXRpYWxpemVyY3JlYXRlQXNzZXJ0SW5pdGlhbGl6ZXJlbmRZaWVsZFN0YXRlbWVudHlpZWxkVG9rZW5jcmVhdGVZaWVsZFN0YXRlbWVudGJlZ2luU3dpdGNoQmxvY2tzd2l0Y2ggYmxvY2tiZWdpblN3aXRjaENhc2VleHByZXNzaW9uQ291bnRsYWJlbHNBbmRFeHByZXNzaW9uc2xhYmVsSW5kZXhleHByZXNzaW9uSW5kZXhsYWJlbE9yRXhwcmVzc2lvbmxhYmVsTmFtZWhhc0xvY2FsTGFiZWxjbGFpbUxhYmVsY3JlYXRlR290b1RhcmdldE51bGxWYWx1ZS5MYWJlbHNzd2l0Y2ggY2FzZWVuZFN3aXRjaENhc2VkZWZhdWx0S2V5d29yZGNvbG9uQWZ0ZXJEZWZhdWx0c3RhdGVtZW50Q291bnRlbmRTd2l0Y2hTdGF0ZW1lbnRzd2l0Y2hLZXl3b3JkZW5kU3dpdGNoQmxvY2tjYXNlQ291bnRTd2l0Y2hCbG9ja2xvb2t1cExhYmVscmVzb2x2ZUdvdG9zbGFzdE5vZGVpc0Jsb2NrYnVpbGRGYWxsVGhyb3VnaEVycm9yaGFuZGxlQ2FzZU1hdGNoQ2FzZU1hdGNoaGFuZGxlQnJlYWtTdGF0ZW1lbnRoYXNUYXJnZXRicmVha0tleXdvcmRpc0JyZWFrVGFyZ2V0bGFiZWxUb2tlbmJ1aWxkUHJvYmxlbVRhcmdldE91dHNpZGVMb2NhbEZ1bmN0aW9uY3JlYXRlQnJlYWtTdGF0ZW1lbnRhZGRCcmVha2lzQnJlYWtoYW5kbGVDb250aW51ZVN0YXRlbWVudGNvbnRpbnVlS2V5d29yZENvbnRpbnVlU3RhdGVtZW50bmFtZWRUYXJnZXRpc0dvdG9UYXJnZXRhZGRHb3RvaXNDb250aW51ZVRhcmdldGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50YWRkQ29udGludWViZWdpblR5cGVWYXJpYWJsZWhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkZW5kVHlwZVZhcmlhYmxlZXh0ZW5kc09yU3VwZXJUeXBlVmFyaWFibGVlbmRUeXBlVmFyaWFibGVzVHlwZVZhcmlhYmxlc2NhbGN1bGF0ZWRCb3VuZHNyZXNvbHZlSW5oYW5kbGVOb1R5cGVWYXJpYWJsZXNOb1R5cGVWYXJpYWJsZXN0eXBlVmFyaWFibGVCdWlsZGVyc1RvS2VybmVsdHlwZVZhcmlhYmxlQnVpbGRlcnNoYW5kbGVJbnZhbGlkU3RhdGVtZW50YnVpbGRJbnZhbGlkU3VwZXJJbml0aWFsaXplcmJ1aWxkRHVwbGljYXRlZEluaXRpYWxpemVycHJldmlvdXNJbml0aWFsaXplck9mZnNldGZpZWxkTmFtZU9mZnNldGFzc2lnbm1lbnRPZmZzZXRoYXNJbml0aWFsaXplcmJ1aWxkUmVkaXJlY3RpbmdJbml0aWFsaXplcmNoZWNrQ29uc3RydWN0b3JDeWNsaWNoYW5kbGVPcGVyYXRvcmhhbmRsZVN5bWJvbFZvaWRTeW1ib2xWb2lkaGFuZGxlSW52YWxpZEZ1bmN0aW9uQm9keU51bGxWYWx1ZS5GdW5jdGlvbkJvZHl2YWxpZGF0ZVR5cGVVc2Vub25JbnN0YW5jZUFjY2Vzc0lzRXJyb3Jpc1R5cGVWYXJpYWJsZWlzSWRlbnRpY2FsTWV0aG9kIGludm9jYXRpb25pc1RoaXNFeHByZXNzaW9ubWFrZVN0YXRpY0dldHdyYXBJbkRlZmVycmVkQ2hlY2tjaGVja2NoZWNrTGlicmFyeUlzTG9hZGVkdW5yZXNvbHZlZFR5cGV1bnJlc29sdmVkVHlwZXNkZXN1Z2FyZWRzaGFkb3dOb2Rld3JhcEludmFsaWRXcml0ZXdyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50aXNDb21wb3VuZHJoc29wZXJhdG9yKEp1bXBUYXJnZXRKdW1wVGFyZ2V0S2luZC5CcmVha0p1bXBUYXJnZXRLaW5kLkNvbnRpbnVlSnVtcFRhcmdldEtpbmQuR290b3VzZXI8anVtcC10YXJnZXQ+TGFiZWxUYXJnZXQ8bGFiZWwtdGFyZ2V0PkVtcHR5IHBhcmFtZXRlcnMgc2hvdWxkIGJlIG51bGxpc05hbWVkRm9ybWFsUGFyYW1ldGVycyhsYWJlbChub0xvY2F0aW9uaW52YWxpZENvbGxlY3Rpb25FbGVtZW50Y29tYmluZVN0YXRlbWVudHNkZWJ1Z05hbWUucmVzdWx0Z2V0Tm9kZU5hbWVhc3luY01hcmtlckZyb21Ub2tlbnNmYXN0YS5pbmNyZW1lbnRhbF9jb21waWxlckluY3JlbWVudGFsS2VybmVsR2VuZXJhdG9yTWVtb3J5RmlsZVN5c3RlbUJ1aWxkZXJHcmFwaHNhdmVBc0d6aXBIeWJyaWRGaWxlU3lzdGVtQ2xhc3NIaWVyYXJjaHlCdWlsZGVyVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50TGlicmFyeUdyYXBob3V0bGluZU9ubHl0cmFja05lZWRlZERpbGxMaWJyYXJpZXNuZWVkZWREaWxsTGlicmFyaWVzaW52YWxpZGF0ZWRVcmlzZGlsbExvYWRlZERhdGFwbGF0Zm9ybUJ1aWxkZXJzdXNlckJ1aWxkZXJzaW5pdGlhbGl6ZUZyb21EaWxsVXJpY29tcG9uZW50VG9Jbml0aWFsaXplRnJvbWluaXRpYWxpemVkRnJvbURpbGxwcmV2aW91c1BhY2thZ2VzVXJpcHJldmlvdXNQYWNrYWdlc01hcGN1cnJlbnRQYWNrYWdlc01hcGhhc1RvQ2hlY2tQYWNrYWdlVXJpc3JlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zbW9kdWxlc1RvTG9hZGRlYnVnRXhwclVyaW9yZy1kYXJ0bGFuZy1kZWJ1Z3N5bnRoZXRpY19kZWJ1Z19leHByZXNzaW9udXNlckNvZGVmcm9tQ29tcG9uZW50Y29tcHV0ZURlbHRhZnVsbENvbXBvbmVudGJ5dGVzTGVuZ3RoaW5pdGlhbGl6ZUZyb21Db21wb25lbnRzdW1tYXJ5Qnl0ZXNwcmVwYXJlU3VtbWFyeWluaXRpYWxpemVGcm9tRGlsbHN0Z3pJbml0aWFsaXplZEZyb21pbml0aWFsaXphdGlvbkJ5dGVzaW5pdGlhbGl6ZV9mcm9tLmRpbGxyZWNvcmRUZW1wb3JhcnlGaWxlRm9yVGVzdGluZ2ludmFsaWRhdGVOb3RLZXB0VXNlckJ1aWxkZXJzbm90UmV1c2VkTGlicmFyaWVzcmV1c2VkTGlicmFyaWVzY29tcHV0ZVJldXNlZExpYnJhcmllc25vdFJldXNlZHJlbW92ZWREaWxsQnVpbGRlcnNkaWxsQnVpbGRlcnJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXNvbGREaWxsTG9hZGVkRGF0YURlY2lkZWQgdG8gcmV1c2UgIG9mICBsaWJyYXJpZXNsb2FkRW5zdXJlTG9hZGVkQ29tcG9uZW50c3VzZXJDb2RlT2xkY29tcG9uZW50V2l0aERpbGxyZWNvcmROb25GdWxsQ29tcG9uZW50Rm9yVGVzdGluZ3VwZGF0ZU5lZWRlZERpbGxMaWJyYXJpZXNXaXRoSGllcmFyY2h5YnVpbGRlckhpZXJhcmNoeXJlbGVhc2VBbmNpbGxhcnlSZXNvdXJjZXNjb21waWxlZExpYnJhcmllc3VzZXJMb2FkZWRVcmlNYWlub3V0cHV0TGlicmFyaWVzY29tcHV0ZVRyYW5zaXRpdmVDbG9zdXJlcmVpc3N1ZUNvbXBvbmVudFByb2JsZW1zcmVpc3N1ZUxpYnJhcnlQcm9ibGVtc2dldENvcmVUeXBlc2dldENsYXNzSGllcmFyY2h5dXNlZENsYXNzZXNsb2FkZWROb3RLZXB0bW9kdWxlbG9hZGVkQW55dGhpbmd1c2VkQ29tcG9uZW50aXNzdWVkUHJvYmxlbXNnZXRQYXJ0RmlsZVVyaXBhcmVudEZpbGVVcmlpbnB1dExpYnJhcmllc2lucHV0TGlicmFyaWVzRmlsdGVyZWRsaWJyYXJ5TWFwcG90ZW50aWFsbHlSZWZlcmVuY2VkTGlicmFyaWVzcG90ZW50aWFsbHlSZWZlcmVuY2VkSW5wdXRMaWJyYXJpZXNncmFwaG5laWdoYm9ybmVpZ2hib3JzT2ZwYXJ0RmlsZVVyaVJlYWQgRGVzZXJpYWxpemVkIGVudGl0eXNhdmVDb21wb25lbnRQcm9ibGVtc0Fib3V0IHRvIGluaXRpYWxpemVGcm9tQ29tcG9uZW50Zm91bmREYXJ0Q29yZURpZCBub3QgZmluZCBkYXJ0OmNvcmUgd2hlbiB0cmllZCB0byBpbml0aWFsaXplIGZyb20gY29tcG9uZW50LlJhbiBpbml0aWFsaXplRnJvbUNvbXBvbmVudEFwcGVuZGVkIGxpYnJhcmllc2NvbXBpbGVFeHByZXNzaW9udHlwZURlZmluaXRpb25zc3ludGhldGljUHJvY2VkdXJlTmFtZWtlcm5lbENsYXNzZGVidWdMaWJyYXJ5Y29tYmluYXRvcmFkZEltcG9ydGFkZEltcG9ydHNUb1Njb3BlaGZzbWVtb3J5bW9kaWZ5VGFyZ2V0YnVpbGRFeHByZXNzaW9uY29tcGlsZWRFeHByZXNzaW9uc291cmNlQnl0ZXNpbnZhbGlkYXRlZEltcG9ydFVyaXNpc0ludmFsaWRhdGVkbmV3RmlsZVVyaWFkZEJ1aWxkZXJBbmRJbnZhbGlkYXRlVXJpc3JlY29yZEludmFsaWRhdGVkSW1wb3J0VXJpc0ZvclRlc3RpbmdkaXJlY3REZXBlbmRlbmNpZXN2ZXJ0ZXh2ZXJ0aWNlc3dvcmtMaXN0cmVtb3ZlZHNlZW5VcmlzaW52YWxpZGF0ZWludmFsaWRhdGVBbGxTb3VyY2Vzc2V0TW9kdWxlc1RvTG9hZE9uTmV4dENvbXB1dGVEZWx0YVBhY2thZ2VDaGFuZ2VkRXJyb3JJbml0aWFsaXplRnJvbUNvbXBvbmVudEVycm9ySW5jcmVtZW50YWxDb21waWxlckRhdGFjb21waWxlci5hcGkubGVnYWN5RXZlbnRTaW5rTnVsbFNpbmtMZWdhY3lDb21waWxlcklucHV0X2lucHV0UHJvdmlkZXJzb3VyY2VGaWxlRXhwZWN0ZWQgYSAnU3RyaW5nJyBvciBhICdMaXN0PGludD4nIGZyb20gdGhlIGlucHV0IHByb3ZpZGVyLCBidXQgZ290OiBMZWdhY3lDb21waWxlckRpYWdub3N0aWNzX2hhbmRsZXJMZWdhY3lDb21waWxlck91dHB1dF9vdXRwdXRQcm92aWRlcmRlZmVycmVkX21hcExlZ2FjeUNvbXBpbGVyT3V0cHV0LmNyZWF0ZUJpbmFyeVNpbmtMZWdhY3lPdXRwdXRTaW5rZGFydDJqcy5jb21tb24udGFza3Nab25lRGVsZWdhdGVab25lU3BlY2lmaWNhdGlvbkNvbXBpbGVyVGFza19tZWFzdXJlcl93YXRjaF9zdWJ0YXNrc19hc3luY0NvdW50X3pvbmVTcGVjaWZpY2F0aW9uX3pvbmVWYWx1ZXNfaXNEaXNhYmxlZFVua25vd24gdGFzayAndGltaW5ndG90YWxlbGFwc2VkTWlsbGlzZWNvbmRzX21lYXN1cmVab25lZF9zdGFydF9jdXJyZW50VGFza3N0b3BzdG9wQXN5bmNXYWxsQ2xvY2tfc3RvcHN0YXJ0QXN5bmNXYWxsQ2xvY2t6b25lU3BlY2lmaWNhdGlvbl9ydW5ydW5VbmFyeV9ydW5VbmFyeXJ1bkJpbmFyeV9ydW5CaW5hcnl6b25lVDFUMmExYTJfY3VycmVudEFzeW5jVGFza0Nhbid0IHRyYWNrIGFzeW5jIHRhc2sgJycgYmVjYXVzZSAnJyBpcyBhbHJlYWR5IGJlaW5nIHRyYWNrZWQubWVhc3VyZUlvU3VidGFza193YWxsQ2xvY2tfYXN5bmNXYWxsQ2xvY2tfaGFzaENvZGVHZW5lcmF0b3JzdGFydFdhbGxDbG9ja3N0b3BXYWxsQ2xvY2tkYXJ0MmpzLmNvbW1vbmFzc2VydERlYnVnTW9kZWZhaWxlZEF0TWVzc2FnZUtpbmRTb3VyY2VTcGFuQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRU5PX0xPQ0FUSU9OX1NQQU5OQUJMRVNwYW5uYWJsZVNwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmVkYXJ0MmpzLmNvbXBpbGVyX2Jhc2VTZWxlY3RvcnNVcmlzV29ya0l0ZW1FbGVtZW50RW52aXJvbm1lbnREZWZlcnJlZExvYWRUYXNrT3V0cHV0VW5pdERhdGFNZXNzYWdlVGVtcGxhdGVEdW1wSW5mb1Rhc2tFbnF1ZXVlckVucXVldWVUYXNrUmVzb2x1dGlvbkVucXVldWVyQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5VHJpdmlhbEFic3RyYWN0VmFsdWVTdHJhdGVneVR5cGVNYXNrU3RyYXRlZ3lHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c0dsb2JhbFR5cGVJbmZlcmVuY2VUYXNrU291cmNlSW5mb3JtYXRpb25Db2RlZ2VuSW5wdXRzSmF2YVNjcmlwdEltcGFjdFN0cmF0ZWd5S2VybmVsTG9hZGVyVGFza0tlcm5lbFJlc3VsdE51bGxDb21waWxlck91dHB1dEhJbnN0cnVjdGlvblNlbGVjdG9ySW1wYWN0U3RyYXRlZ3lXb3JsZEltcGFjdFdvcmxkSW1wYWN0QnVpbGRlckltcGxKQ2xvc2VkV29ybGRLQ2xvc2VkV29ybGRNYWtlUmVwb3J0ZXJGdW5jdGlvbkNvbXBpbGVyZnJvbnRlbmRTdHJhdGVneWJhY2tlbmRTdHJhdGVneV9yZXBvcnRlcl9pbXBhY3RDYWNoZV9pbXBhY3RDYWNoZURlbGV0ZXJpbXBhY3RTdHJhdGVneXN0b3BBZnRlckNsb3NlZFdvcmxkc3RvcEFmdGVyVHlwZUluZmVyZW5jZV91c2VyQ29kZUxvY2F0aW9uc2JhY2tlbmRDbG9zZWRXb3JsZEZvclRlc3RpbmdnbG9iYWxJbmZlcmVuY2VfY29kZWdlbldvcmxkQnVpbGRlcmFic3RyYWN0VmFsdWVTdHJhdGVneWVucXVldWVyZGVmZXJyZWRMb2FkVGFza2R1bXBJbmZvVGFza3NlcmlhbGl6YXRpb25UYXNrUEhBU0VfU0NBTk5JTkdQSEFTRV9SRVNPTFZJTkdQSEFTRV9ET05FX1JFU09MVklOR1BIQVNFX0NPTVBJTElOR3BoYXNlY29tcGlsYXRpb25GYWlsZWRvblJlc29sdXRpb25RdWV1ZUVtcHR5Rm9yVGVzdGluZ29uQ29kZWdlblF1ZXVlRW1wdHlGb3JUZXN0aW5nY29kZWdlbldvcmxkRm9yVGVzdGluZ0JFTklHTl9FUlJPUlNNZXNzYWdlS2luZC5JTlZBTElEX01FVEFEQVRBTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQV9HRU5FUklDa2VybmVsRnJvbnRFbmRUYXNrRnJvbnQgZW5kcmVwb3J0ZXJjcmVhdGVCYWNrZW5kU3RyYXRlZ3ljcmVhdGVEZWZlcnJlZExvYWRUYXNraW1wYWN0Q2FjaGVpbXBhY3RDYWNoZURlbGV0ZXJjdXJyZW50RWxlbWVudHJlc29sdXRpb25Xb3JsZEJ1aWxkZXJyZXNvbHV0aW9ud29ybGRCdWlsZGVyY29kZWdlbldvcmxkQnVpbGRlck5vIGxvY2F0aW9uQ29kZWdlbldvcmxkQnVpbGRlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQucnVuSW50ZXJuYWxjbGVhclN0YXRlQ29tcGlsaW5nIGRlc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZWdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzcGVyZm9ybUdsb2JhbFR5cGVJbmZlcmVuY2VjbG9zZWRXb3JsZGdlbmVyYXRlSmF2YVNjcmlwdENvZGVsb2FkS2VybmVsIGxvYWQgY29tcGxldGVyZWdpc3RlckxvYWRlZExpYnJhcmllc3JlcG9ydFdhcm5pbmdNZXNzYWdlTWVzc2FnZUtpbmQuTUlSUk9SU19MSUJSQVJZX05PVF9TVVBQT1JUX1dJVEhfQ0ZFY29tcGlsZUZyb21LZXJuZWxyb290TGlicmFyeVVyaXJlZ2lzdGVySkNsb3NlZFdvcmxkY29kZWdlbklucHV0c29uQ29kZWdlblN0YXJ0ZGVzZXJpYWxpemVDb2RlZ2VuY29kZWdlblJlc3VsdHNDb21waWxpbmcgbWV0aG9kc3J1bkNvZGVnZW5FbnF1ZXVlcmZ1bmN0aW9uQ29tcGlsZXJzZXJpYWxpemVDb2RlZ2Vuc2VsZWN0b3JzdGFydFJlc29sdXRpb25yZXNvbHV0aW9uRW5xdWV1ZXJoYXNSZXNvbHV0aW9uY3JlYXRlUmVzb2x1dGlvbkVucXVldWVyb25SZXNvbHV0aW9uU3RhcnRjb21wdXRlQ2xvc2VkV29ybGRlbGVtZW50RW52aXJvbm1lbnRmb3JFYWNoQ2xhc3NyZWdpc3RlckNsYXNzbWFpbkltcGFjdG1haW5GdW5jdGlvbmNvbXB1dGVNYWluYmVmb3JlUmVzb2x1dGlvbnN1cHBvcnREZWZlcnJlZExvYWRpc1Byb2dyYW1TcGxpdHN1cHBvcnREdW1wSW5mb2FwcGx5SW1wYWN0Q29tcHV0aW5nIGNsb3NlZCB3b3JsZHByb2Nlc3NRdWV1ZW9uUHJvZ3Jlc3NzaG93UmVzb2x1dGlvblByb2dyZXNzb25SZXNvbHV0aW9uRW5kcmVwb3J0U3VwcHJlc3NlZE1lc3NhZ2VzU3VtbWFyeWNoZWNrUXVldWVjbG9zZVJlc29sdXRpb25QZXJmb3JtaW5nIGdsb2JhbCB0eXBlIGluZmVyZW5jZWluZmVycmVkRGF0YUJ1aWxkZXJhbm5vdGF0aW9uc0RhdGFydW5HbG9iYWxUeXBlSW5mZXJlbmNlZ2xvYmFsSW5mZXJlbmNlUmVzdWx0c2NvZGVnZW5FbnF1ZXVlcmNyZWF0ZUNvZGVnZW5FbnF1ZXVlcnNob3dDb2RlZ2VuUHJvZ3Jlc3Njb2RlZ2VuV29ybGRFbWl0dGluZyBKYXZhU2NyaXB0cHJvZ3JhbVNpemVhc3NlbWJsZVByb2dyYW1pbmZlcnJlZERhdGFyZXBvcnRTaXplb25Db2RlZ2VuRW5kc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZXN0cmF0ZWd5aXJEYXRhd29ybGREYXRhc2VyaWFsaXplRGF0YWRlc2VyaWFsaXplRGF0YWRlc2VyaWFsaXplQ29tcG9uZW50a0Nsb3NlZFdvcmxkY2xvc2VXb3JsZGpDbG9zZWRXb3JsZGNyZWF0ZUpDbG9zZWRXb3JsZGVtcHR5UXVldWV3b3Jrd2l0aEN1cnJlbnRFbGVtZW50d29yay5ydW5pbXBhY3RTb3VyY2VvcGVuY2Fub25pY2FsVXJpc3RhcnRQaGFzZXF1ZXVlSXNDbG9zZWRvbkltcGFjdFVzZWRpbXBhY3RVc2VjaGVja05vRW5xdWV1ZWRJbnZva2VkSW5zdGFuY2VNZXRob2RzY2hlY2tRdWV1ZUlzRW1wdHlVbmV4cGVjdGVkIHBoYXNlOiBzaG93UHJvZ3Jlc3NSZXNvbHZlZCBwcm9jZXNzZWRFbnRpdGllcyBlbGVtZW50cy5Db21waWxlZCAgbWV0aG9kcy5vbkNyYXNoSW5Vc2VyQ29kZW1hcmtDb21waWxhdGlvbkFzRmFpbGVkZmF0YWxEaWFnbm9zdGljUmVwb3J0ZWRjdXJyZW50bHlJblVzZXJDb2RlaW5Vc2VyQ29kZWFzc3VtZUluVXNlckNvZGVfdXJpRnJvbUVsZW1lbnRjb2RlTG9jYXRpb25pblNhbWVMb2NhdGlvbmdldENhbm9uaWNhbFVyaXNsYXNoUG9zX0NvbXBpbGVyT3V0cHV0X2NvbXBpbGVyX3VzZXJPdXRwdXRTdXBwcmVzc2lvbkluZm93YXJuaW5nc0NvbXBpbGVyRGlhZ25vc3RpY1JlcG9ydGVyX2N1cnJlbnRFbGVtZW50bGFzdERpYWdub3N0aWNXYXNGaWx0ZXJlZHN1cHByZXNzZWRXYXJuaW5nc2NyZWF0ZU1lc3NhZ2VzcGFubmFibGVtZXNzYWdlS2luZHNwYW5Gcm9tU3Bhbm5hYmxlcmVwb3J0RXJyb3JyZXBvcnREaWFnbm9zdGljSW50ZXJuYWxyZXBvcnRIaW50cmVwb3J0SW5mb2VsZW1lbnRGcm9tU3Bhbm5hYmxlaGFzUmVwb3J0ZWRFcnJvcnJlcG9ydEFzc2VydGlvbkZhaWx1cmVwbGVhc2VSZXBvcnRDcmFzaHVuaGFuZGxlZEV4Y2VwdGlvbk9uRWxlbWVudGRvdWJsZUZhdWx0dHJ5VG9TdHJpbmdNZXNzYWdlS2luZC5HRU5FUklDX3NwYW5Gcm9tU3RyYXRlZ3lObyBlcnJvciBsb2NhdGlvbi5DdXJyZW50IGVsZW1lbnRzb3VyY2VFbGVtZW50c291cmNlSW5mb3JtYXRpb25pbnRlcm5hbEVycm9ycmVhc29uTWVzc2FnZUtpbmQuQ09NUElMRVJfQ1JBU0hFRE1lc3NhZ2VLaW5kLlBMRUFTRV9SRVBPUlRfVEhFX0NSQVNIPGV4Y2VwdGlvbiBpbiB0b1N0cmluZygpPk1lc3NhZ2VLaW5kLkhJRERFTl9XQVJOSU5HU19ISU5UU01lc3NhZ2VLaW5kLkhJRERFTl9ISU5UU01lc3NhZ2VLaW5kLkhJRERFTl9XQVJOSU5HU19NYXBJbXBhY3RDYWNoZURlbGV0ZXJ1bmNhY2hlV29ybGRJbXBhY3RlbXB0eUNhY2hlX0VtcHR5RW52aXJvbm1lbnRQcm9ncmVzc1Byb2dyZXNzSW1wbF9zdG9wd2F0Y2hJbnRlcmFjdGl2ZVByb2dyZXNzX3N0b3B3YXRjaFBoYXNlX3N0b3B3YXRjaEludGVydmFsdGltZXJhdGUbWzFBG1tLG1s0ODs1OzQwbRtbMzBtPT0+G1swbSAgRWxhcHNlZCB0aW1lOiAgcy4gUmF0ZTogIHVuaXRzL21zZGFydDJqcy5tZXNzYWdlc3NoYXJlZF9tZXNzYWdlc01lc3NhZ2VLaW5kLkFCU1RSQUNUX0dFVFRFUk1lc3NhZ2VLaW5kLkNBTk5PVF9SRVNPTFZFTWVzc2FnZUtpbmQuQ09NUExFWF9SRVRVUk5JTkdfTlNNTWVzc2FnZUtpbmQuQ09NUExFWF9USFJPV0lOR19OU01NZXNzYWdlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9XSVRIX0JPRFlNZXNzYWdlS2luZC5DT05TVF9GQUNUT1JZTWVzc2FnZUtpbmQuQ09OU1RSVUNUT1JfV0lUSF9SRVRVUk5fVFlQRU1lc3NhZ2VLaW5kLkNZQ0xJQ19DT01QSUxFX1RJTUVfQ09OU1RBTlRTTWVzc2FnZUtpbmQuRElSRUNUTFlfVEhST1dJTkdfTlNNTWVzc2FnZUtpbmQuRVFVQUxfTUFQX0VOVFJZX0tFWU1lc3NhZ2VLaW5kLkVRVUFMX1NFVF9FTlRSWU1lc3NhZ2VLaW5kLkVYVFJBTkVPVVNfTU9ESUZJRVJNZXNzYWdlS2luZC5FWFRSQU5FT1VTX01PRElGSUVSX1JFUExBQ0VNZXNzYWdlS2luZC5GT1JJTl9OT1RfQVNTSUdOQUJMRU1lc3NhZ2VLaW5kLklNUExJQ0lUX0pTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFTWVzc2FnZUtpbmQuSU5WQUxJRF9BU1NFUlRfVkFMVUVfTUVTU0FHRU1lc3NhZ2VLaW5kLklOVkFMSURfQk9PTF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ0FTVE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQUREX1RZUEVTTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfSU5UX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9OVU1fVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX1BSSU1JVElWRV9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT01QTEVNRU5UX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTkRJVElPTkFMX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTlNUUlVDVE9STWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9ESVZNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0lOREVYTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9JTlRFUlBPTEFUSU9OX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05FR0FURV9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9OT1RfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0FERF9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9OVU1fQUREX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NUUklOR19MRU5HVEhfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU0hJRlRNZXNzYWdlS2luZC5JTlZBTElEX0ZST01fRU5WSVJPTk1FTlRfTkFNRV9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9JTlRfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0xPR0lDQUxfQU5EX09QRVJBTkRfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfTE9HSUNBTF9PUl9PUEVSQU5EX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX1BBQ0tBR0VfQ09ORklHTWVzc2FnZUtpbmQuSU5WQUxJRF9QQUNLQUdFX1VSSU1lc3NhZ2VLaW5kLklOVkFMSURfU1RSSU5HX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19DQU5OT1RfRVhURU5EX0RBUlRfQ0xBU1NNZXNzYWdlS2luZC5KU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9DT05TVFJVQ1RPUk1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX01FTUJFUk1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfSU5ERVhfTk9UX1NVUFBPUlRFRE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTk9OX0VYVEVSTkFMX01FTUJFUk1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTUVNQkVSX0lOX05PTl9KU19JTlRFUk9QX0NMQVNTTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRVRIT0RfV0lUSF9OQU1FRF9BUkdVTUVOVFNNZXNzYWdlS2luZC5KU19PQkpFQ1RfTElURVJBTF9DT05TVFJVQ1RPUl9XSVRIX1BPU0lUSU9OQUxfQVJHVU1FTlRTTWVzc2FnZUtpbmQuSlNfUExBQ0VIT0xERVJfQ0FQVFVSRU1lc3NhZ2VLaW5kLkxJQlJBUllfTk9UX0ZPVU5ETWVzc2FnZUtpbmQuTUlTU0lOR19FWFBSRVNTSU9OX0lOX1RIUk9XTWVzc2FnZUtpbmQuTkFUSVZFX05PTl9JTlNUQU5DRV9JTl9OT05fTkFUSVZFX0NMQVNTTWVzc2FnZUtpbmQuTk9fU1VDSF9TVVBFUl9NRU1CRVJNZXNzYWdlS2luZC5OT05fTkFUSVZFX0VYVEVSTkFMTWVzc2FnZUtpbmQuTk9UX0FfQ09NUElMRV9USU1FX0NPTlNUQU5UTWVzc2FnZUtpbmQuTk9UX0FTU0lHTkFCTEVNZXNzYWdlS2luZC5QUkVBTUJMRU1lc3NhZ2VLaW5kLlJFVEhST1dfT1VUU0lERV9DQVRDSE1lc3NhZ2VLaW5kLlJFVFVSTl9JTl9HRU5FUkFUSVZFX0NPTlNUUlVDVE9STWVzc2FnZUtpbmQuUkVUVVJOX0lOX0dFTkVSQVRPUk1lc3NhZ2VLaW5kLlJVTlRJTUVfVFlQRV9UT19TVFJJTkdfT0JKRUNUTWVzc2FnZUtpbmQuUlVOVElNRV9UWVBFX1RPX1NUUklOR19TVUJUWVBFTWVzc2FnZUtpbmQuU1RSSU5HX0VYUEVDVEVETWVzc2FnZUtpbmQuVU5ERUZJTkVEX0dFVFRFUk1lc3NhZ2VLaW5kLlVOREVGSU5FRF9JTlNUQU5DRV9HRVRURVJfQlVUX1NFVFRFUk1lc3NhZ2VLaW5kLlVOREVGSU5FRF9NRVRIT0RNZXNzYWdlS2luZC5VTkRFRklORURfT1BFUkFUT1JNZXNzYWdlS2luZC5VTkRFRklORURfU0VUVEVSTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NUQVRJQ19HRVRURVJfQlVUX1NFVFRFUk1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TVEFUSUNfU0VUVEVSX0JVVF9HRVRURVJNZXNzYWdlS2luZC5VTkRFRklORURfU1VQRVJfU0VUVEVSTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0ZJUlNUTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX1NFQ09ORE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19JTlRFUkNFUFRPUl9DT05TVEFOVE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX0ZPUkJJRERFTk1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1ZBTFVFX09WRVJSSURFU19FUVVBTFNNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUxNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUxfQ0FTRUFCU1RSQUNUX0dFVFRFUkNBTk5PVF9SRVNPTFZFQ09NUElMRVJfQ1JBU0hFRENPTVBMRVhfUkVUVVJOSU5HX05TTUNPTVBMRVhfVEhST1dJTkdfTlNNQ09OU1RfRkFDVE9SWUNPTlNUUlVDVE9SX1dJVEhfUkVUVVJOX1RZUEVDWUNMSUNfQ09NUElMRV9USU1FX0NPTlNUQU5UU0RJUkVDVExZX1RIUk9XSU5HX05TTUVRVUFMX01BUF9FTlRSWV9LRVlFUVVBTF9TRVRfRU5UUllFWFRSQU5FT1VTX01PRElGSUVSRVhUUkFORU9VU19NT0RJRklFUl9SRVBMQUNFRk9SSU5fTk9UX0FTU0lHTkFCTEVHRU5FUklDSElEREVOX0hJTlRTSElEREVOX1dBUk5JTkdTSElEREVOX1dBUk5JTkdTX0hJTlRTSU1QTElDSVRfSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVESU5WQUxJRF9BU1NFUlRfVkFMVUVJTlZBTElEX0FTU0VSVF9WQUxVRV9NRVNTQUdFSU5WQUxJRF9CT09MX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFSU5WQUxJRF9DT05TVEFOVF9DQVNUSU5WQUxJRF9DT05TVEFOVF9BRERfVFlQRVNJTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9JTlRfVFlQRUlOVkFMSURfQ09OU1RBTlRfQklOQVJZX05VTV9UWVBFSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfUFJJTUlUSVZFX1RZUEVJTlZBTElEX0NPTlNUQU5UX0NPTVBMRU1FTlRfVFlQRUlOVkFMSURfQ09OU1RBTlRfQ09ORElUSU9OQUxfVFlQRUlOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1JJTlZBTElEX0NPTlNUQU5UX0RJVklOVkFMSURfQ09OU1RBTlRfSU5ERVhJTlZBTElEX0NPTlNUQU5UX0lOVEVSUE9MQVRJT05fVFlQRUlOVkFMSURfQ09OU1RBTlRfTkVHQVRFX1RZUEVJTlZBTElEX0NPTlNUQU5UX05PVF9UWVBFSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfQUREX1RZUEVJTlZBTElEX0NPTlNUQU5UX05VTV9BRERfVFlQRUlOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0xFTkdUSF9UWVBFSU5WQUxJRF9DT05TVEFOVF9TSElGVElOVkFMSURfRlJPTV9FTlZJUk9OTUVOVF9OQU1FX1RZUEVJTlZBTElEX0lOVF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRUlOVkFMSURfTE9HSUNBTF9BTkRfT1BFUkFORF9UWVBFSU5WQUxJRF9MT0dJQ0FMX09SX09QRVJBTkRfVFlQRUlOVkFMSURfTUVUQURBVEFJTlZBTElEX01FVEFEQVRBX0dFTkVSSUNJTlZBTElEX1BBQ0tBR0VfQ09ORklHSU5WQUxJRF9QQUNLQUdFX1VSSUlOVkFMSURfU1RSSU5HX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFSlNfSU5URVJPUF9DTEFTU19DQU5OT1RfRVhURU5EX0RBUlRfQ0xBU1NKU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9DT05TVFJVQ1RPUkpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX01FTUJFUkpTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFREpTX0lOVEVST1BfSU5ERVhfTk9UX1NVUFBPUlRFREpTX0lOVEVST1BfTk9OX0VYVEVSTkFMX01FTUJFUkpTX0lOVEVST1BfTUVNQkVSX0lOX05PTl9KU19JTlRFUk9QX0NMQVNTSlNfSU5URVJPUF9NRVRIT0RfV0lUSF9OQU1FRF9BUkdVTUVOVFNKU19PQkpFQ1RfTElURVJBTF9DT05TVFJVQ1RPUl9XSVRIX1BPU0lUSU9OQUxfQVJHVU1FTlRTSlNfUExBQ0VIT0xERVJfQ0FQVFVSRUxJQlJBUllfTk9UX0ZPVU5ETUlSUk9SU19MSUJSQVJZX05PVF9TVVBQT1JUX1dJVEhfQ0ZFTUlTU0lOR19FWFBSRVNTSU9OX0lOX1RIUk9XTkFUSVZFX05PTl9JTlNUQU5DRV9JTl9OT05fTkFUSVZFX0NMQVNTTk9fU1VDSF9TVVBFUl9NRU1CRVJOT05fTkFUSVZFX0VYVEVSTkFMTk9UX0FfQ09NUElMRV9USU1FX0NPTlNUQU5UTk9UX0FTU0lHTkFCTEVQTEVBU0VfUkVQT1JUX1RIRV9DUkFTSFBSRUFNQkxFUkVUVVJOX0lOX0dFTkVSQVRJVkVfQ09OU1RSVUNUT1JSVU5USU1FX1RZUEVfVE9fU1RSSU5HX09CSkVDVFJVTlRJTUVfVFlQRV9UT19TVFJJTkdfU1VCVFlQRVNUUklOR19FWFBFQ1RFRFVOREVGSU5FRF9JTlNUQU5DRV9HRVRURVJfQlVUX1NFVFRFUlVOREVGSU5FRF9TVEFUSUNfR0VUVEVSX0JVVF9TRVRURVJVTkRFRklORURfU1RBVElDX1NFVFRFUl9CVVRfR0VUVEVSV1JPTkdfQVJHVU1FTlRfRk9SX0pTV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0ZJUlNUV1JPTkdfQVJHVU1FTlRfRk9SX0pTX1NFQ09ORFdST05HX0FSR1VNRU5UX0ZPUl9KU19JTlRFUkNFUFRPUl9DT05TVEFOVFNXSVRDSF9DQVNFX0ZPUkJJRERFTlNXSVRDSF9DQVNFX1ZBTFVFX09WRVJSSURFU19FUVVBTFNTV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUxTV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUxfQ0FTRWhvd1RvRml4ZXhhbXBsZXNURU1QTEFURVNDb25zdCBjb25zdHJ1Y3RvciBjYW4ndCBoYXZlIGEgYm9keS5UcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcga2V5d29yZCBvciB0aGUgYm9keS4gICAgICAgICBjbGFzcyBDIHsKICAgICAgICAgICBjb25zdCBDKCkge30KICAgICAgICAgfQoKICAgICAgICAgbWFpbigpID0+IG5ldyBDKCk7VHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQgb3IgcmVwbGFjaW5nIHRoZSBib2R5IHdpdGggJz0nIGZvbGxvd2VkIGJ5IGEgdmFsaWQgdGFyZ2V0LiAgICAgICAgIGNsYXNzIEMgewogICAgICAgICAgIGNvbnN0IGZhY3RvcnkgQygpIHt9CiAgICAgICAgIH0KCiAgICAgICAgIG1haW4oKSA9PiBuZXcgQygpO0Nhbid0IGhhdmUgbW9kaWZpZXIgJyN7bW9kaWZpZXJ9JyBoZXJlLlRyeSByZW1vdmluZyAnI3ttb2RpZmllcn0nLnZhciBTdHJpbmcgZm9vOyBtYWluKCl7fXZhciBmaW5hbCBmb287IG1haW4oKXt9dmFyIHZhciBmb287IG1haW4oKXt9dmFyIGNvbnN0IGZvbzsgbWFpbigpe312YXIgYWJzdHJhY3QgZm9vOyBtYWluKCl7fXZhciBzdGF0aWMgZm9vOyBtYWluKCl7fXZhciBleHRlcm5hbCBmb287IG1haW4oKXt9ZmluYWwgdmFyIGZvbzsgbWFpbigpe31jb25zdCB2YXIgZm9vOyBtYWluKCl7fWFic3RyYWN0IHZhciBmb287IG1haW4oKXt9c3RhdGljIHZhciBmb287IG1haW4oKXt9ZXh0ZXJuYWwgdmFyIGZvbzsgbWFpbigpe31UcnkgcmVwbGFjaW5nIG1vZGlmaWVyICcje21vZGlmaWVyfScgd2l0aCAndmFyJywgJ2ZpbmFsJywgb3IgYSB0eXBlLnNldCBmb287IG1haW4oKXt9YWJzdHJhY3QgZm9vOyBtYWluKCl7fXN0YXRpYyBmb287IG1haW4oKXt9ZXh0ZXJuYWwgZm9vOyBtYWluKCl7fWNsYXNzIEEgeyBpbnQgQSgpIHt9IH0gbWFpbigpIHsgbmV3IEEoKTsgfURpZCB5b3UgbWVhbiAncmV0aHJvdyc/UmV0aHJvdyBtdXN0IGJlIGluc2lkZSBvZiBjYXRjaCBjbGF1c2UuVHJ5IG1vdmluZyB0aGUgZXhwcmVzc2lvbiBpbnRvIGEgY2F0Y2ggY2xhdXNlLCBvciB1c2luZyBhICd0aHJvdycgZXhwcmVzc2lvbi5tYWluKCkgeyByZXRocm93OyB9Q29uc3RydWN0b3JzIGNhbid0IHJldHVybiB2YWx1ZXMuVHJ5IHJlbW92aW5nIHRoZSByZXR1cm4gc3RhdGVtZW50IG9yIHVzaW5nIGEgZmFjdG9yeSBjb25zdHJ1Y3Rvci4gICAgICAgIGNsYXNzIEMgewogICAgICAgICAgQygpIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBtYWluKCkgPT4gbmV3IEMoKTtDYW4ndCByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uICh1c2luZyB0aGUgJyN7bW9kaWZpZXJ9JyBtb2RpZmllcikuVHJ5IHJlbW92aW5nIHRoZSB2YWx1ZSwgcmVwbGFjaW5nICdyZXR1cm4nIHdpdGggJ3lpZWxkJyBvciBjaGFuZ2luZyB0aGUgbWV0aG9kIGJvZHkgbW9kaWZpZXIuICAgICAgICBmb28oKSBhc3luYyogeyByZXR1cm4gMDsgfQogICAgICAgIG1haW4oKSA9PiBmb28oKTsKICAgICAgICAgICAgICAgIGZvbygpIHN5bmMqIHsgcmV0dXJuIDA7IH0KICAgICAgICBtYWluKCkgPT4gZm9vKCk7CiAgICAgICAgJyN7ZnJvbVR5cGV9JyBpcyBub3QgYXNzaWduYWJsZSB0byAnI3t0b1R5cGV9Jy5UaGUgZWxlbWVudCB0eXBlICcje2N1cnJlbnRUeXBlfScgb2YgJyN7ZXhwcmVzc2lvblR5cGV9JyBpcyBub3QgYXNzaWduYWJsZSB0byAnI3tlbGVtZW50VHlwZX0nLiAgICAgICAgbWFpbigpIHsKICAgICAgICAgIExpc3Q8aW50PiBsaXN0ID0gPGludD5bMSwgMl07CiAgICAgICAgICBmb3IgKFN0cmluZyB4IGluIGxpc3QpIHg7CiAgICAgICAgfQogICAgICAgIENhbid0IHJlc29sdmUgJyN7bmFtZX0nLlRoZSBtZXRob2QgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN7Y2xhc3NOYW1lfScuICAgICAgICBjbGFzcyBBIHsKICAgICAgICAgIGZvbygpIHsgYmFyKCk7IH0KICAgICAgICB9CiAgICAgICAgbWFpbigpIHsgbmV3IEEoKS5mb28oKTsgfQogICAgICAgIFRoZSBnZXR0ZXIgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN7Y2xhc3NOYW1lfScuY2xhc3MgQSB7fSBtYWluKCkgeyBuZXcgQSgpLng7IH1jbGFzcyBBIHt9IG1haW4oKSB7IEEueDsgfVRoZSBzZXR0ZXIgJyN7bWVtYmVyTmFtZX0nIGluIGNsYXNzICcje2NsYXNzTmFtZX0nIGNhbiBub3QgYmUgdXNlZCBhcyBhIGdldHRlci5jbGFzcyBBIHsgc2V0IHgoeSkge30gfSBtYWluKCkgeyBuZXcgQSgpLng7IH1UaGUgb3BlcmF0b3IgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN7Y2xhc3NOYW1lfScuY2xhc3MgQSB7fSBtYWluKCkgeyBuZXcgQSgpICsgMzsgfVRoZSBzZXR0ZXIgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN7Y2xhc3NOYW1lfScuY2xhc3MgQSB7fSBtYWluKCkgeyBuZXcgQSgpLnggPSA0OTk7IH1DYW4ndCByZXNvbHZlICcje21lbWJlck5hbWV9JyBpbiBhIHN1cGVyY2xhc3Mgb2YgJyN7Y2xhc3NOYW1lfScuVGhlIHNldHRlciAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgaW4gYSBzdXBlcmNsYXNzIG9mICcje2NsYXNzTmFtZX0nLiAgICAgICAgY2xhc3MgQSB7fQogICAgICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKICAgICAgICAgIGZvbygpIHsgc3VwZXIueCA9IDQ5OTsgfQogICAgICAgIH0KICAgICAgICBtYWluKCkgeyBuZXcgQigpLmZvbygpOyB9CiAgICAgICAgQ2Fubm90IHJlc29sdmUgZ2V0dGVyICcje25hbWV9Jy5zZXQgZm9vKHgpIHt9ICBtYWluKCkgeyBmb287IH1DYW5ub3QgcmVzb2x2ZSBzZXR0ZXIgJyN7bmFtZX0nLiAgICAgICAgbWFpbigpIHsKICAgICAgICAgIGZpbmFsIHggPSAxOwogICAgICAgICAgeCA9IDI7CiAgICAgICAgfSAgICAgICAgbWFpbigpIHsKICAgICAgICAgIGNvbnN0IHggPSAxOwogICAgICAgICAgeCA9IDI7CiAgICAgICAgfQogICAgICAgICAgICAgICAgZmluYWwgeCA9IDE7CiAgICAgICAgbWFpbigpIHsgeCA9IDM7IH0KICAgICAgICAgICAgICAgIGNvbnN0IHggPSAxOwogICAgICAgIG1haW4oKSB7IHggPSAzOyB9CiAgICAgICAgZ2V0IGZvbyA9PiBudWxsICBtYWluKCkgeyBmb28gPSA1OyB9Y29uc3QgZm9vID0gMCAgbWFpbigpIHsgZm9vID0gNTsgfSN7dGV4dH1DYW5ub3QgcmVzb2x2ZSAnI3tuYW1lfScuTm90IGEgY29tcGlsZS10aW1lIGNvbnN0YW50LkN5Y2xlIGluIHRoZSBjb21waWxlLXRpbWUgY29uc3RhbnQgY29tcHV0YXRpb24uQ2Fubm90IHJlc29sdmUgc2V0dGVyLkV4cGVjdGVkIGEgJ1N0cmluZycsIGJ1dCBnb3QgYW4gaW5zdGFuY2Ugb2YgJyN7dHlwZX0nLkpzLWludGVyb3AgY2xhc3MgJyN7Y2xzfScgY2Fubm90IGV4dGVuZCBmcm9tIHRoZSBub24ganMtaW50ZXJvcCBjbGFzcyAnI3tzdXBlcmNsYXNzfScuQW5ub3RhdGUgdGhlIHN1cGVyY2xhc3Mgd2l0aCBASlMuICAgICAgICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgICAgICAgIGNsYXNzIEZvbyB7IH0KCiAgICAgICAgICAgICAgQEpTKCkKICAgICAgICAgICAgICBjbGFzcyBCYXIgZXh0ZW5kcyBGb28geyB9CgogICAgICAgICAgICAgIG1haW4oKSB7CiAgICAgICAgICAgICAgICBuZXcgQmFyKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIEpzLWludGVyb3AgZG9lcyBub3Qgc3VwcG9ydCBbXSBhbmQgW109IG9wZXJhdG9yIG1ldGhvZHMuVHJ5IHJlcGxhY2luZyBbXSBhbmQgW109IG9wZXJhdG9yIG1ldGhvZHMgd2l0aCBub3JtYWwgbWV0aG9kcy4gICAgICAgIGltcG9ydCAncGFja2FnZTpqcy9qcy5kYXJ0JzsKCiAgICAgICAgQEpTKCkKICAgICAgICBjbGFzcyBGb28gewogICAgICAgICAgZXh0ZXJuYWwgb3BlcmF0b3IgW10oYXJnKTsKICAgICAgICB9CgogICAgICAgIG1haW4oKSB7CiAgICAgICAgICBuZXcgRm9vKClbMF07CiAgICAgICAgfQogICAgICAgICAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICBASlMoKQogICAgICAgIGNsYXNzIEZvbyB7CiAgICAgICAgICBleHRlcm5hbCBvcGVyYXRvciBbXT0oYXJnLCB2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBtYWluKCkgewogICAgICAgICAgbmV3IEZvbygpWzBdID0gMTsKICAgICAgICB9CiAgICAgICAgU29tZSBwYXJhbWV0ZXJzIGluIGFub255bW91cyBqcy1pbnRlcm9wIGNsYXNzICcje2Nsc30nIG9iamVjdCBsaXRlcmFsIGNvbnN0cnVjdG9yIGFyZSBwb3NpdGlvbmFsIGluc3RlYWQgb2YgbmFtZWQuLk1ha2UgYWxsIGFyZ3VtZW50cyBpbiBleHRlcm5hbCBmYWN0b3J5IG9iamVjdCBsaXRlcmFsIGNvbnN0cnVjdG9ycyBuYW1lZC5jbGFzcyBTdXBlciB7CiAgZmFjdG9yeSBTdXBlci5mb28oKSA9PiBudWxsOwp9CmNsYXNzIENsYXNzIGV4dGVuZHMgU3VwZXIgewogIENsYXNzKCkgOiBzdXBlci5mb28oKTsKfQptYWluKCkgPT4gbmV3IENsYXNzKCk7CkpzLWludGVyb3AgbWVtYmVycyBtdXN0IGJlICdleHRlcm5hbCcuSnMtaW50ZXJvcCBjbGFzcyBtZW1iZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBqcy1pbnRlcm9wIGNsYXNzZXMuVHJ5IG1hcmtpbmcgdGhlIGVuY2xvc2luZyBjbGFzcyBhcyBqcy1pbnRlcm9wIG9yIHJlbW92ZSB0aGUganMtaW50ZXJvcCBhbm5vdGF0aW9uIGZyb20gdGhlIG1lbWJlci5Db25zdHJ1Y3RvciAnI3tjb25zdHJ1Y3Rvcn0nIGluIGpzLWludGVyb3AgY2xhc3MgJyN7Y2xzfScgaXMgbm90IGV4dGVybmFsLlRyeSBhZGRpbmcgdGhlICdleHRlcm5hbCcgdG8gJyN7Y29uc3RydWN0b3J9Jy5NZW1iZXIgJyN7bWVtYmVyfScgaW4ganMtaW50ZXJvcCBjbGFzcyAnI3tjbHN9JyBpcyBub3QgZXh0ZXJuYWwuVHJ5IGFkZGluZyB0aGUgJ2V4dGVybmFsJyB0byAnI3ttZW1iZXJ9Jy4gICAgICAgICAgICAgIGltcG9ydCAncGFja2FnZTpqcy9qcy5kYXJ0JzsKCiAgICAgICAgICAgICAgQEpTKCkKICAgICAgICAgICAgICBjbGFzcyBGb28gewogICAgICAgICAgICAgICAgYmFyKCkge30KICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIG1haW4oKSB7CiAgICAgICAgICAgICAgICBuZXcgRm9vKCkuYmFyKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIEpzLWludGVyb3AgbWV0aG9kICcje21ldGhvZH0nIGhhcyBuYW1lZCBhcmd1bWVudHMgYnV0IGlzIG5vdCBhIGZhY3RvcnkgY29uc3RydWN0b3Igb2YgYW4gQGFub255bW91cyBASlMgY2xhc3MuUmVtb3ZlIGFsbCBuYW1lZCBhcmd1bWVudHMgZnJvbSBqcy1pbnRlcm9wIG1ldGhvZCBvciBpbiB0aGUgY2FzZSBvZiBhIGZhY3RvcnkgY29uc3RydWN0b3IgYW5ub3RhdGUgdGhlIGNsYXNzIGFzIEBhbm9ueW1vdXMuICAgICAgICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgICAgICAgIEBKUygpCiAgICAgICAgICAgICAgY2xhc3MgRm9vIHsKICAgICAgICAgICAgICAgIGV4dGVybmFsIGJhcihmb28sIHtiYXp9KTsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIG1haW4oKSB7CiAgICAgICAgICAgICAgICBuZXcgRm9vKCkuYmFyKDQsIGJhejogNSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIEZpZWxkcyBpbiBqcy1pbnRlcm9wIGNsYXNzZXMgYXJlIG5vdCBzdXBwb3J0ZWQuVHJ5IHJlcGxhY2luZyB0aGUgZmllbGQgd2l0aCBhbiBleHRlcm5hbCBnZXR0ZXIgYW5kL29yIHNldHRlci5GaWVsZCBjYW4ndCBiZSBtYXJrZWQgYXMganMtaW50ZXJvcC5MaWJyYXJ5IG5vdCBmb3VuZCAnI3tyZXNvbHZlZFVyaX0nLlBhY2thZ2UgY29uZmlnIGZpbGUgJyN7dXJpfScgaXMgaW52YWxpZC4KI3tleGNlcHRpb259Q29tcHV0ZXIgc2F5cyBubyEnI3t1cml9JyBpcyBub3QgYSB2YWxpZCBwYWNrYWdlIFVSSSAoI3tleGNlcHRpb259KS4vLyBjYW4ndCBoYXZlIGEgJ3RvcCBsZXZlbCcgcGFja2FnZSBVUkkKaW1wb3J0ICdwYWNrYWdlOmZvby5kYXJ0JzsKCm1haW4oKSB7fQovLyBjYW4ndCBoYXZlIDIgc2xhc2hlcwppbXBvcnQgJ3BhY2thZ2U6Ly9mb28vZm9vLmRhcnQnOwoKbWFpbigpIHt9Ci8vIHBhY2thZ2UgbmFtZSBtdXN0IGJlIHZhbGlkCmltcG9ydCAncGFja2FnZTpub3QLYWxpZC9mb28uZGFydCc7CgptYWluKCkge30KSlMgY29kZSBtdXN0IG5vdCB1c2UgJyMnIHBsYWNlaG9sZGVycyBpbnNpZGUgZnVuY3Rpb25zLlVzZSBhbiBpbW1lZGlhdGVseSBjYWxsZWQgSmF2YVNjcmlwdCBmdW5jdGlvbiB0byBjYXB0dXJlIHRoZSB0aGUgcGxhY2Vob2xkZXIgdmFsdWVzIGFzIEphdmFTY3JpcHQgZnVuY3Rpb24gcGFyYW1ldGVycy5KUyBleHByZXNzaW9uIG11c3QgdGFrZSB0d28gb3IgbW9yZSBhcmd1bWVudHMuSlMgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgbGl0ZXJhbC5Bcmd1bWVudCBmb3IgJ0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UJyBtdXN0IGJlIGEgdHlwZSBjb25zdGFudC5UaGUgZ2V0dGVyICcje25hbWV9JyBoYXMgbm8gaW1wbGVtZW50YXRpb24gaW4gY2xhc3MgJyN7Y2xhc3N9Jy5UcnkgYWRkaW5nIGEgYm9keSB0byAnI3tuYW1lfScgb3IgZGVjbGFyaW5nICcje2NsYXNzfScgdG8gYmUgJ2Fic3RyYWN0Jy5jbGFzcyBDbGFzcyB7CiAgZ2V0IGdldHRlcjsKfQptYWluKCkgPT4gbmV3IENsYXNzKCk7CkEgbWV0YWRhdGEgYW5ub3RhdGlvbiBtdXN0IGJlIGVpdGhlciBhIHJlZmVyZW5jZSB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFudCB2YXJpYWJsZSBvciBhIGNhbGwgdG8gYSBjb25zdGFudCBjb25zdHJ1Y3Rvci5UcnkgdXNpbmcgYSBkaWZmZXJlbnQgY29uc3RhbnQgdmFsdWUgb3IgcmVmZXJlbmNpbmcgaXQgdGhyb3VnaCBhIGNvbnN0YW50IHZhcmlhYmxlLkBPYmplY3QgbWFpbigpIHt9QHByaW50IG1haW4oKSB7fUEgbWV0YWRhdGEgYW5ub3RhdGlvbiB1c2luZyBhIGNvbnN0YW50IGNvbnN0cnVjdG9yIGNhbm5vdCB1c2UgdHlwZSBhcmd1bWVudHMuVHJ5IHJlbW92aW5nIHRoZSB0eXBlIGFyZ3VtZW50cyBvciByZWZlcmVuY2luZyB0aGUgY29uc3RhbnQgdGhyb3VnaCBhIGNvbnN0YW50IHZhcmlhYmxlLmNsYXNzIEM8VD4gewogIGNvbnN0IEMoKTsKfQpAQzxpbnQ+KCkgbWFpbigpIHt9CkFuIGVudHJ5IHdpdGggdGhlIHNhbWUga2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBtYXAuVHJ5IHJlbW92aW5nIHRoZSBwcmV2aW91cyBlbnRyeSBvciBjaGFuZ2luZyB0aGUga2V5IGluIG9uZSBvZiB0aGUgZW50cmllcy5tYWluKCkgewogIHZhciBtID0gY29uc3Qgeydmb28nOiAxLCAnZm9vJzogMn07Cn1BbiBlbnRyeSBhcHBlYXJzIHR3aWNlIGluIHRoZSBzZXQuVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUgZW50cmllcy5tYWluKCkgewogIHZhciBtID0gY29uc3Qgeydmb28nLCAnYmFyJywgJ2Zvbyd9Owp9VGhlIGNvbXBpbGVyIGNyYXNoZWQgd2hlbiBjb21waWxpbmcgdGhpcyBlbGVtZW50LlRoZSBjb21waWxlciBpcyBicm9rZW4uCgpXaGVuIGNvbXBpbGluZyB0aGUgYWJvdmUgZWxlbWVudCwgdGhlIGNvbXBpbGVyIGNyYXNoZWQuIEl0IGlzIG5vdApwb3NzaWJsZSB0byB0ZWxsIGlmIHRoaXMgaXMgY2F1c2VkIGJ5IGEgcHJvYmxlbSBpbiB5b3VyIHByb2dyYW0gb3IKbm90LiBSZWdhcmRsZXNzLCB0aGUgY29tcGlsZXIgc2hvdWxkIG5vdCBjcmFzaC4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvCnJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KClBsZWFzZSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CgoqIHRoZSBuYW1lIGFuZCB2ZXJzaW9uIG9mIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSwKCiogdGhlIERhcnQgU0RLIGJ1aWxkIG51bWJlciAoI3tidWlsZElkfSksIGFuZAoKKiB0aGUgZW50aXJlIG1lc3NhZ2UgeW91IHNlZSBoZXJlIChpbmNsdWRpbmcgdGhlIGZ1bGwgc3RhY2sgdHJhY2UKICBiZWxvdyBhcyB3ZWxsIGFzIHRoZSBzb3VyY2UgbG9jYXRpb24gYWJvdmUpLgoje3dhcm5pbmdzfSB3YXJuaW5nKHMpIGFuZCAje2hpbnRzfSBoaW50KHMpIHN1cHByZXNzZWQgaW4gI3t1cml9LiN7d2FybmluZ3N9IHdhcm5pbmcocykgc3VwcHJlc3NlZCBpbiAje3VyaX0uI3toaW50c30gaGludChzKSBzdXBwcmVzc2VkIGluICN7dXJpfS5XaGVuIHJ1biBvbiB0aGUgY29tbWFuZC1saW5lLCB0aGUgY29tcGlsZWQgb3V0cHV0IG1pZ2h0IHJlcXVpcmUgYSBwcmVhbWJsZSBmaWxlIGxvY2F0ZWQgaW46CiAgPHNkaz4vbGliL19pbnRlcm5hbC9qc19ydW50aW1lL2xpYi9wcmVhbWJsZXMuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBjb25zdGFudCBjb25kaXRpb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCB2YWxpZCBpbiBjb25zdGFudCBzdHJpbmcgaW50ZXJwb2xhdGlvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsIG9yICdTdHJpbmcnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhIGNvbnN0YW50IGJpbmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgJ1N0cmluZycsIG9yICdOdWxsJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSBjb25zdGFudCBiaW5hcnkgKyBleHByZXNzaW9uIG9uICdTdHJpbmcnLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnU3RyaW5nJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgZm9yIGEgLmxlbmd0aCBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnU3RyaW5nJy5TaGlmdCBhbW91bnQgbXVzdCBiZSBub24tbmVnYXRpdmUgaW4gYCN7bGVmdH0gI3tvcGVyYXRvcn0gI3tyaWdodH1gLkRpdmlzb3IgbXVzdCBiZSBub24temVybyBpbiBgI3tsZWZ0fSAje29wZXJhdG9yfSAje3JpZ2h0fWAuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgY29uc3RhbnQgYmluYXJ5ICsgZXhwcmVzc2lvbiBvbiAnbnVtJy4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2ludCcgb3IgJ2RvdWJsZScuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSBzdWJ0eXBlIG9mICN7Y2FzdFR5cGV9LmAje2xlZnRDb25zdGFudH1gIG9mIHR5cGUgJyN7bGVmdFR5cGV9JyBhbmQgYCN7cmlnaHRDb25zdGFudH1gIG9mIHR5cGUgJyN7cmlnaHRUeXBlfScgYXJlIG5vdCB2YWxpZCBvcGVyYW5kcyBvZiBhIGNvbnN0YW50IGJpbmFyeSArIGV4cHJlc3Npb24uIE11c3QgYm90aCBiZSBlaXRoZXIgb2YgdHlwZSAnU3RyaW5nJywgb3Igb2YgdHlwZXMgJ2ludCcgb3IgJ2RvdWJsZScuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgY29uc3RhbnQgYmluYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdpbnQnIG9yICdkb3VibGUnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhIGNvbnN0YW50IGJpbmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnaW50Jy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSBjb25zdGFudCB1bmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgY29uc3RhbnQgdW5hcnkgI3tvcGVyYXRvcn0gZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2ludCcgb3IgJ2RvdWJsZScuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgY29uc3RhbnQgdW5hcnkgI3tvcGVyYXRvcn0gZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2ludCcuSW5kZXggZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgZW52aXJvbm1lbnQgbmFtZSBjb25zdGFudC4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ1N0cmluZycuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBgYm9vbC5mcm9tRW52aXJvbm1lbnRgIGRlZmF1bHQgdmFsdWUgY29uc3RhbnQuIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJyBvciBgbnVsbGAuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBgaW50LmZyb21FbnZpcm9ubWVudGAgZGVmYXVsdCB2YWx1ZSBjb25zdGFudC4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2ludCcgb3IgYG51bGxgLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgYFN0cmluZy5mcm9tRW52aXJvbm1lbnRgIGRlZmF1bHQgdmFsdWUgY29uc3RhbnQuIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdTdHJpbmcnIG9yIGBudWxsYC5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGxvZ2ljYWwgYW5kIG9wZXJhbmQuIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGxvZ2ljYWwgb3Igb3BlcmFuZC4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLkNvbnN0cnVjdG9yICcje2NvbnN0cnVjdG9yTmFtZX0nIGlzIG5vdCBhIHZhbGlkIGNvbnN0YW50IGNvbnN0cnVjdG9yLkFzc2VydGlvbiAnI3thc3NlcnRpb259JyBmYWlsZWQuQXNzZXJ0aW9uIGZhaWxlZDogI3ttZXNzYWdlfWRhcnQyanMgbm8gbG9uZ2VyIHN1cHBvcnRzIHRoZSBkYXJ0Om1pcnJvcnMgbGlicmFyeS4KCkFQSXMgZnJvbSB0aGlzIGxpYnJhcnkgd2lsbCB0aHJvdyBhIHJ1bnRpbWUgZXJyb3IgYXQgdGhpcyB0aW1lLCBidXQgdGhleSB3aWxsCmJlY29tZSBhIGNvbXBpbGUtdGltZSBlcnJvciBpbiB0aGUgZnV0dXJlLlRoaXMgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24gaXMgZ3VhcmFudGVlZCB0byB0aHJvdyBhbiBleGNlcHRpb24uIFRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGJlIHNtYWxsZXIgaWYgaXQgaXMgcmV3cml0dGVuLlJld3JpdGUgdG8gJ25vU3VjaE1ldGhvZChJbnZvY2F0aW9uIGkpID0+IHN1cGVyLm5vU3VjaE1ldGhvZChpKTsnLlRoaXMgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24gaXMgZ3VhcmFudGVlZCB0byB0aHJvdyBhbiBleGNlcHRpb24uIFRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGJlIHNtYWxsZXIgYW5kIHRoZSBjb21waWxlciB3aWxsIGJlIGFibGUgdG8gcGVyZm9ybSBtb3JlIG9wdGltaXphdGlvbnMgaWYgaXQgaXMgcmV3cml0dGVuLk92ZXJyaWRpbmcgJ25vU3VjaE1ldGhvZCcgY2F1c2VzIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSBtb3JlIGNvZGUgYW5kIHByZXZlbnRzIHRoZSBjb21waWxlciBmcm9tIGRvaW5nIHNvbWUgb3B0aW1pemF0aW9ucy5Db25zaWRlciByZW1vdmluZyB0aGlzICdub1N1Y2hNZXRob2QnIGltcGxlbWVudGF0aW9uLlVzaW5nICcucnVudGltZVR5cGUudG9TdHJpbmcoKScgY2F1c2VzIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSBtb3JlIGNvZGUgYmVjYXVzZSBpdCBuZWVkcyB0byBwcmVzZXJ2ZSB0eXBlIGFyZ3VtZW50cyBvbiBhbGwgZ2VuZXJpYyBjbGFzc2VzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBuZWNlc3NhcnkgZWxzZXdoZXJlLklmIHVzZWQgb25seSBmb3IgZGVidWdnaW5nLCBjb25zaWRlciB1c2luZyBvcHRpb24gLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZyB0byByZWR1Y2UgdGhlIGNvZGUgc2l6ZSBpbXBhY3QuVXNpbmcgJy5ydW50aW1lVHlwZS50b1N0cmluZygpJyBoZXJlIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgbW9yZSBjb2RlIGJlY2F1c2UgaXQgbmVlZHMgdG8gcHJlc2VydmUgdHlwZSBhcmd1bWVudHMgb24gYWxsIGdlbmVyaWMgc3VidHlwZXMgb2YgJyN7cmVjZWl2ZXJUeXBlfScsIGV2ZW4gaWYgdGhleSBhcmUgbm90IG5lY2Vzc2FyeSBlbHNld2hlcmUuT25seSBleHRlcm5hbCBqcy1pbnRlcm9wIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkLlRyeSByZW1vdmluZyAnZXh0ZXJuYWwnIGtleXdvcmQgb3IgYW5ub3RhdGluZyB0aGUgZnVuY3Rpb24gYXMgYSBqcy1pbnRlcm9wIGZ1bmN0aW9uLk5hdGl2ZSBub24taW5zdGFuY2UgbWVtYmVycyBhcmUgb25seSBhbGxvd2VkIGluIG5hdGl2ZSBjbGFzc2VzLidjYXNlJyBleHByZXNzaW9uIHR5cGUgJyN7dHlwZX0nIG92ZXJyaWRlcyAnb3BlcmF0b3IgPT0nLidjYXNlJyBleHByZXNzaW9uIG1heSBub3QgYmUgb2YgdHlwZSAnI3t0eXBlfScuJ2Nhc2UnIGV4cHJlc3Npb25zIGRvIG5vdCBhbGwgaGF2ZSB0eXBlICcje3R5cGV9Jy4nY2FzZScgZXhwcmVzc2lvbiBvZiB0eXBlICcje3R5cGV9Jy5oYXNIb3dUb0ZpeGNvbXB1dGVNZXNzYWdlI3sjXHsuK1x9TWlzc2luZyBhcmd1bWVudHMgaW4gZXJyb3IgbWVzc2FnZTogIk1lc3NhZ2UuaGFzaENvZGVjb252ZXJ0VG9TdHJpbmd0b0RhcnRUZXh0RE9OVF9LTk9XX0hPV19UT19GSVhFbnZpcm9ubWVudGRhcnQyanMuaW8ubG9jYXRpb25fcHJvdmlkZXJDb2RlT3V0cHV0TGlzdGVuZXJMb2NhdGlvbkNvbGxlY3Rvcl9jb2xsZWN0b25UZXh0bGluZVN0YXJ0cz0sbGVuZ3RoPWtlcm5lbC5iaW5hcnkudGFnVGFnTm90aGluZ1NvbWV0aGluZ0NvbnN0U3RhdGljSW52b2NhdGlvbkNvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uVHJ1ZUxpdGVyYWxGYWxzZUxpdGVyYWxQb3NpdGl2ZUludExpdGVyYWxOZWdhdGl2ZUludExpdGVyYWxCaWdJbnRMaXRlcmFsQ29uc3RMaXN0TGl0ZXJhbENvbnN0TWFwTGl0ZXJhbENvbnN0U2V0TGl0ZXJhbEFzeW5jRm9ySW5TdGF0ZW1lbnRTaW1wbGVJbnRlcmZhY2VUeXBlU2ltcGxlRnVuY3Rpb25UeXBlTnVsbFJlZmVyZW5jZUNsYXNzUmVmZXJlbmNlTWVtYmVyUmVmZXJlbmNlRGVwcmVjYXRlZF9Db25zdGFudEV4cHJlc3Npb25TcGVjaWFsaXplZFRhZ0hpZ2hCaXRTcGVjaWFsaXplZFRhZ01hc2tTcGVjaWFsaXplZFBheWxvYWRNYXNrU3BlY2lhbGl6ZWRWYXJpYWJsZUdldFNwZWNpYWxpemVkVmFyaWFibGVTZXRTcGVjaWFsaXplZEludExpdGVyYWxTcGVjaWFsaXplZEludExpdGVyYWxCaWFzQ29tcG9uZW50RmlsZUJpbmFyeUZvcm1hdFZlcnNpb25Db25zdGFudFRhZ2tlcm5lbC5pbXBvcnRfdGFibGVJbXBvcnRUYWJsZUNvbXBvbmVudEltcG9ydFRhYmxlX2xpYnJhcnlJbmRleExpYnJhcnlJbXBvcnRUYWJsZV9pbXBvcnRQYXRoc19pbXBvcnRlZExpYnJhcmllc2ltcG9ydFBhdGhzX0ltcG9ydFRhYmxlQnVpbGRlcnJlZmVyZW5jZUxpYnJhcnlhZGRMaWJyYXJ5SW1wb3J0cmVmZXJlbmNlVXJpdGFyZ2V0VXJpIGNhbm5vdCByZWZlciB0byBsaWJyYXJ5IHdpdGhvdXQgYW4gaW1wb3J0IFVSSWlzRmlsZU9yQ3VzdG9tU2NoZW1laXNUYXJnZXRTY2hlbWVGaWxlT3JDdXN0b21pc1JlZmVyZW5jZVNjaGVtZUZpbGVPckN1c3RvbXJlbGF0aXZlVXJpIGNhbm5vdCByZWZlciB0byBhcHBsaWNhdGlvbiBsaWJyYXJ5IGV4cG9ydGVkUmVmZXJlbmNlcmVsYXRpdmVVcmlQYXRodGFyZ2V0U2VnbWVudHNyZWZTZWdtZW50c3NhbWVva2Vka2VybmVsLmhpZXJhcmNoeV9iYXNlZF90eXBlX2Vudmlyb25tZW50SGVhcF9pdGVtc19wYXJlbnRJbmRleG9ycGhhbl9yZUluc2VydF9maXJzdENoaWxkSW5kZXhjaGlsZEluZGV4bmV4dENoaWxka2VybmVsLmxpYnJhcnlfaW5kZXhMaWJyYXJ5SW5kZXhnZXR0ZXJQcmVmaXhnZXQ6c2V0dGVyUHJlZml4c2V0OnRvcExldmVsbGlicmFyeVVyaXNsaWJyYXJ5VXJpU2V0YnlVcmljb3JlTGlicmFyaWVzX2dldExpYnJhcnlJbmRleGxpYnJhcnlJbmRleCcgaGFzIG5vdCBiZWVuIGluZGV4ZWRjb250YWluc0xpYnJhcnltZW1iZXJOYW1ldHJ5R2V0TWVtYmVydHJ5R2V0VG9wTGV2ZWxNZW1iZXJfQ2xhc3NUYWJsZWNvbnRhaW5lck5hbWVleHRlcm5hbCBsaWJyYXJ5ICdsaWJyYXJ5ICdfZ2V0Q2xhc3NJbmRleCcgbm90IGZvdW5kIGluIF9NZW1iZXJUYWJsZV9tZW1iZXJzZ2V0RGlzYW1iaWd1YXRlZE5hbWV0b3AtbGV2ZWwgb2YgY2xhc3MgJycgaW4gQSBtZW1iZXIgd2l0aCBkaXNhbWJpZ3VhdGVkIG5hbWUgJycgd2FzIG5vdCBmb3VuZCAuIERpZCB5b3UgbWVhbiAnJz9jaGFyY29kZS5hc2NpaS5kb2xsYXJfbG93ZXJjYXNlJG51bCRzb2gkc3R4JGV0eCRlb3QkZW5xJGFjayRiZWwkYnMkaHQkdGFiJGxmJHZ0JGZmJGNyJHNvJHNpJGRsZSRkYzEkZGMyJGRjMyRkYzQkbmFrJHN5biRldGIkY2FuJGVtJHN1YiRlc2MkZnMkZ3MkcnMkdXMkZGVsJHNwYWNlJGV4Y2xhbWF0aW9uJHF1b3QkcXVvdGUkZG91YmxlX3F1b3RlJHF1b3RhdGlvbiRoYXNoJGRvbGxhciRwZXJjZW50JGFtcCRhbXBlcnNhbmQkYXBvcyRhcG9zdHJvcGhlJHNpbmdsZV9xdW90ZSRscGFyZW4kb3Blbl9wYXJlbiRvcGVuX3BhcmVudGhlc2lzJHJwYXJlbiRjbG9zZV9wYXJlbiRjbG9zZV9wYXJlbnRoZXNpcyRhc3RlcmlzayRwbHVzJGNvbW1hJG1pbnVzJGRhc2gkZG90JGZ1bGxzdG9wJHNsYXNoJHNvbGlkdXMkZGl2aXNpb24kY29sb24kc2VtaWNvbG9uJGx0JGxlc3NfdGhhbiRsYW5nbGUkb3Blbl9hbmdsZSRlcXVhbCRndCRncmVhdGVyX3RoYW4kcmFuZ2xlJGNsb3NlX2FuZ2xlJHF1ZXN0aW9uJGF0JGxicmFja2V0JG9wZW5fYnJhY2tldCRiYWNrc2xhc2gkcmJyYWNrZXQkY2xvc2VfYnJhY2tldCRjaXJjdW1mbGV4JGNhcmV0JGhhdCR1bmRlcnNjb3JlJHVuZGVybGluZSRiYWNrcXVvdGUkZ3JhdmUkbGJyYWNlJG9wZW5fYnJhY2UkcGlwZSRiYXIkcmJyYWNlJGNsb3NlX2JyYWNlJHRpbGRlcGFja2FnZV9jb25maWcudXRpbF92YWxpZFBhY2thZ2VOYW1lQ2hhcmFjdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgICQgJicoKSorLC0uIDAxMjM0NTY3ODkgOyA9ICBAQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogICAgXyBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAgIH4gX2ZpbmRJbnZhbGlkQ2hhcmFjdGVybm9uRG90Tm90IGEgcGFja2FnZTogVVJJUGFja2FnZSBVUklzIG11c3Qgbm90IGhhdmUgYSBob3N0IHBhcnRQYWNrYWdlIFVSSXMgbXVzdCBub3QgaGF2ZSBhIHF1ZXJ5IHBhcnRQYWNrYWdlIFVSSXMgbXVzdCBub3QgaGF2ZSBhIGZyYWdtZW50IHBhcnRQYWNrYWdlIFVSSXMgbXVzdCBub3Qgc3RhcnQgd2l0aCBhICcvJ1BhY2thZ2UgVVJJcyBtdXN0IHN0YXJ0IHdpdGggdGhlIHBhY2thZ2UgbmFtZSBmb2xsb3dlZCBieSBhICcvJ2JhZEluZGV4UGFja2FnZSBuYW1lcyBtdXMgYmUgbm9uLWVtcHR5UGFja2FnZSBuYW1lcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG5vbi0nLicgY2hhcmFjdGVyYmFkQ2hhckNvZGViYWRDaGFyUGFja2FnZSBuYW1lcyBtdXN0IG5vdCBjb250YWluIGZhc3RhLnNjYW5uZXIuc3RyaW5nX2Nhbm9uaWNhbGl6ZXJwYXlsb2FkU3RyaW5nQ2Fub25pY2FsaXplck1BU0tJTklUSUFMX1NJWkVfc2l6ZV9jb3VudF9ub2Rlc2hhc2hCeXRlc2hhc2hTdHJpbmdyZWhhc2huZXdTaXplbmV3Tm9kZXNTeW50YWN0aWNFbnRpdHlTdHJpbmdVdGlsaXRpZXNJTlRFUk5FUmludGVybmtlcm5lbC5jbG9uZXN3aXRjaENhc2VzY2xvbmVBbm5vdGF0aW9uc19hY3RpdmVGaWxlVXJpZW5zdXJlTXV0YWJsZUNsb25pbmcgb2YgbGlicmFyaWVzIGlzIG5vdCBpbXBsZW1lbnRlZENsb25pbmcgb2YgY2xhc3NlcyBpcyBub3QgaW1wbGVtZW50ZWRDbG9uaW5nIG9mIGV4dGVuc2lvbnMgaXMgbm90IGltcGxlbWVudGVkX2Nsb25lRmlsZU9mZnNldGFjdGl2ZUZpbGVVcmlTYXZlZGNsb25lT3B0aW9uYWx2aXNpdE9wdGlvbmFsVHlwZW5ld1ZhcmlhYmxlc3dpdGNoQ2FzZW5ld0V4Y2VwdGlvbm5ld1N0YWNrVHJhY2VjbG9uZUZ1bmN0aW9uTm9kZUJvZHlzYXZlZENsb25lQW5ub3RhdGlvbnNVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgZXhwcmVzc2lvbjogVW5pbXBsZW1lbnRlZCBjbG9uZSBmb3IgS2VybmVsIGluaXRpYWxpemVyOiBVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgbWVtYmVyOiBVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgc3RhdGVtZW50OiBDbG9uaW5nIEtlcm5lbCBub24tbWVtYmVycyBpcyBub3Qgc3VwcG9ydGVkLiAgVHJpZWQgY2xvbmluZyBDbG9uZVdpdGhvdXRCb2R5R3JhcGhjb21wdXRlU3Ryb25nQ29tcG9uZW50c1R5cGVWYXJpYWJsZUdyYXBoYm91bmRzZWRnZXN0eXBlUGFyYW1ldGVySW5kaWNlc2NvbGxlY3Rvcm9jY3VycmVkT2NjdXJyZW5jZUNvbGxlY3RvclZpc2l0b3JUeXBlQXJndW1lbnRJc3N1ZWVuY2xvc2luZ1R5cGVWYXJpYW5jZXVucmVsYXRlZGludmFyaWFudG1lZXRzdHJvbmdseUNvbm5lY3RlZHVwcGVyQm91bmRzbG93ZXJCb3VuZHN0eXBlUGFyYW1ldGVySW5kZXhmaW5kVHlwZUFyZ3VtZW50SXNzdWVzYWxsb3dTdXBlckJvdW5kZWR0eXBlZGVmUmhzUmVzdWx0Y2xvbmVkYXJndW1lbnRzUmVzdWx0aXNzdWVzYXJndW1lbnRzVG9SZXBvcnRmaW5kVHlwZUFyZ3VtZW50SXNzdWVzRm9ySW52b2NhdGlvbnR5cGVkZWZJbnN0YW50aWF0aW9uc2dldEdlbmVyaWNUeXBlTmFtZWNvbnZlcnRTdXBlckJvdW5kZWRUb1JlZ3VsYXJCb3VuZGVkcmVwbGFjZWRUeXBlQXJndW1lbnRzcmVwbGFjZWRSZXR1cm5UeXBlcmVwbGFjZWRQb3NpdGlvbmFsUGFyYW1ldGVyc3JlcGxhY2VkTmFtZWRQYXJhbWV0ZXJzaXNOdWxsZmFzdGEua2VybmVsX2J1aWxkZXJEZWxheWVkTWVtYmVyRGVsYXllZE92ZXJyaWRlQ2hlY2tJbXBsaWNpdEZpZWxkVHlwZVZhcmlhYmxlQnVpbGRlckxvYWRMaWJyYXJ5QnVpbGRlclVubGlua2VkRGVjbGFyYXRpb25jb21wYXJlUHJvY2VkdXJlc2lzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3JJbXBsZW1lbnRhdGlvbnRvS2VybmVsQ29tYmluYXRvcnNmYXN0YUNvbWJpbmF0b3JzbmFtZUxpc3RmYXN0YS50YXJnZXRfaW1wbGVtZW50YXRpb25iYWNrZW5kcmV3cml0ZVNldmVyaXR5Y2FjaGVkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcmNhY2hlZENvbXBpbGVUaW1lRXJyb3JjYWNoZWREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yY2FjaGVkRmFsbFRocm91Z2hFcnJvcmNhY2hlZE5hdGl2ZUFubm90YXRpb25jYWNoZWROYXRpdmVFeHRlbnNpb25Bbm5vdGF0aW9uZ2V0Q29uc3RydWN0b3JBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yX0NvbXBpbGVUaW1lRXJyb3JieXBhc3NMaWJyYXJ5UHJpdmFjeV9EdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yRXh0ZXJuYWxOYW1lbWVzc2FnZUNvbnRleHRwcm9jZXNzZWRPcHRpb25zZmFzdGEuZGlsbF9saWJyYXJ5X2J1aWxkZXJEeW5hbWljVHlwZUJ1aWxkZXJTY29wZURpbGxDbGFzc0J1aWxkZXJEaWxsVHlwZUFsaWFzQnVpbGRlckxhenlMaWJyYXJ5U2NvcGV0b3BObyBsaWJyYXJ5IGJ1aWxkZXIudW5zZXJpYWxpemFibGVFeHBvcnRzZXhwb3J0c0FscmVhZHlGaW5hbGl6ZWRpc1JlYWR5VG9CdWlsZGlzUmVhZHlUb0ZpbmFsaXplRXhwb3J0c2lzQnVpbHRsYXp5U2NvcGVsYXp5RXhwb3J0U2NvcGVOb3QgcmVhZHkgdG8gYnVpbGQuTm90IHJlYWR5IHRvIGZpbmFsaXplIGV4cG9ydHMuYWRkU3ludGhldGljRGVjbGFyYXRpb25PZkR5bmFtaWNhZGRCdWlsZGVyY2xhc3NCdWxkZXJfZXhwb3J0cyNhZGRTZXR0ZXJleHBvcnRTY29wZUJ1aWxkZXJhZGRUb1Njb3BlY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uPGxpYnJhcnkgJyc+bWFya0FzUmVhZHlUb0J1aWxkbWFya0FzUmVhZHlUb0ZpbmFsaXplRXhwb3J0c05vIGJ1aWxkZXIgZm9yICdFeHBvcnRlZCBlbGVtZW50ICcnIG5vdCBmb3VuZCBpbiAnZmFzdGEuZGlsbF9sb2FkZXJUeXBlQnVpbGRlckNvbXB1dGVyY29tcG9uZW50TGlicmFyaWVzcmVxdWVzdGVkTGlicmFyaWVzYnVpbGRlci5saWJyYXJ5a2VybmVsTGlicmFyeWZhc3RhLmRpbGxfbWVtYmVyX2J1aWxkZXJNZW1iZXJCdWlsZGVyYWJzdHJhY3RNYXNrZXh0ZXJuYWxNYXNrc3RhdGljTWFza2lzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3Jjb21wdXRlTW9kaWZpZXJzbW9kaWZpZXJmYXN0YS5zY29wZU5hbWVJdGVyYXRvclR5cGVWYXJpYWJsZUJ1aWxkZXJNdXRhYmxlU2NvcGVjbGFzc05hbWVPckRlYnVnTmFtZVNjb3BlKGZvcndhcmREZWNsYXJlZExhYmVsc2ltbXV0YWJsZW5lc3RlZG5hbWVJdGVyYXRvcmNvcHlXaXRoUGFyZW50bG9jYWw9c2V0dGVycz1wYXJlbnQ9YmVjb21lUGFydE9md2l0aFR5cGVWYXJpYWJsZXNuZXdTY29wZXR5cGUgdmFyaWFibGVzcmVjb3JkVXNlbG9va3VwSW5pc0luc3RhbmNlU2NvcGVtZXJnZW1lcmdlTWVtYmVybmVzdGluZ0xldmVsd3JpdGVPbmluZGVudGNvbXB1dGVNaXhpblNjb3BlbmVlZHNDb3B5U2NvcGVCdWlsZGVyQWNjZXNzRXJyb3JCdWlsZGVyaXNDbGFzc0luc3RhbmNlTWVtYmVyaXNFeHRlbnNpb25JbnN0YW5jZU1lbWJlclNjb3BlTG9jYWxEZWNsYXJhdGlvbkl0ZXJhdG9yU2NvcGVMb2NhbERlY2xhcmF0aW9uTmFtZUl0ZXJhdG9ybG9jYWxOYW1lc3NldHRlck5hbWVzZmFzdGEuc291cmNlX2NsYXNzX2J1aWxkZXJDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXJGdW5jdGlvbkJ1aWxkZXJNZXRhZGF0YUJ1aWxkZXJjb21wdXRlVmFyaWFuY2VhY3R1YWxDbHNjb25zdHJ1Y3RvclJlZmVyZW5jZXNvblR5cGVzc3RhcnRDaGFyT2Zmc2V0bmFtZU9mZnNldGNoYXJFbmRPZmZzZXRidWlsZEJ1aWxkZXJzY2hlY2tTdXBlcnR5cGVidWlsZFN1cGVydHlwZWNvbnN0cnVjdG9yU2NvcGVCdWlsZGVydmFyaWFuY2VtZW1iZXJCdWlsZGVyZmluaXNoUGF0Y2hjb21wdXRlRGlyZWN0U3VwZXJ0eXBlc2luaXRpYWxpemVDbGFzc2Zhc3RhLnNvdXJjZV9saWJyYXJ5X2J1aWxkZXJyZXNvbHZlUmVsYXRpdmVVcmlFbnVtQ29uc3RhbnRJbmZvRm9ybWFsUGFyYW1ldGVyQnVpbGRlckZ1bmN0aW9uVHlwZUJ1aWxkZXJQcmVmaXhCdWlsZGVyUXVhbGlmaWVkTmFtZVVucmVzb2x2ZWRUeXBlZmxhdHRlbk5hbWVDb25maWd1cmF0aW9uRXhwb3J0SW1wb3J0QnVpbHRpblR5cGVCdWlsZGVyQ29uc3RydWN0b3JCdWlsZGVyRW51bUJ1aWxkZXJUeXBlQWxpYXNCdWlsZGVyTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXJSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyVm9pZFR5cGVCdWlsZGVyZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvckRlY2xhcmF0aW9uZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvclR5cGVWYXJpYWJsZXNoYXNDb25zdENvbnN0cnVjdG9yTWFza2hhc0luaXRpYWxpemVyTWFza2luaXRpYWxpemluZ0Zvcm1hbE1hc2ttaXhpbkRlY2xhcmF0aW9uTWFza25hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2tUeXBlSW5mZXJyZXJJbXBsU291cmNlRXh0ZW5zaW9uQnVpbGRlck1BTEZPUk1FRF9VUklfU0NIRU1Fb3JnLWRhcnRsYW5nLW1hbGZvcm1lZC11cmlsaWJyYXJ5RGVjbGFyYXRpb25leHBvcnRzaW1wb3J0U2NvcGVpbXBsZW1lbnRhdGlvbkJ1aWxkZXJzYWNjZXNzb3JzZG9jdW1lbnRhdGlvbkNvbW1lbnRwYXJ0T2ZOYW1lY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXJjYW5BZGRJbXBsZW1lbnRhdGlvbkJ1aWxkZXJzYWNjZXNzUHJvYmxlbWFjdHVhbE9yaWdpbm5hdGl2ZU1ldGhvZHNib3VuZGxlc3NUeXBlVmFyaWFibGVzZm9yd2FyZGVyc09yaWdpbnNpbmZlcnJlZFR5cGVzX25hbWVPcmlnaW51bnR5cGVkSW5pdGlhbGl6aW5nRm9ybWFsc2ltcGxpY2l0bHlUeXBlZEZpZWxkc2xhbmd1YWdlVmVyc2lvbkV4cGxpY2l0bHlTZXRwb3N0cG9uZWRQcm9ibGVtc0lzc3VlZHBvc3Rwb25lZFByb2JsZW1zZnJvbVNjb3Blc3RvU2NvcGVhZGRUeXBlYWRkUG9zdHBvbmVkUHJvYmxlbWFkZENvbnN0cnVjdG9yUmVmZXJlbmNlYmVnaW5OZXN0ZWREZWNsYXJhdGlvbmhhc01lbWJlcnNjcmVhdGVOZXN0ZWRlbmROZXN0ZWREZWNsYXJhdGlvblVuZXhwZWN0ZWQgZGVjbGFyYXRpb24uIFRyeWluZyB0byBlbmQgYSAgYXMgYSA8c3ludGF4LWVycm9yPnVyaUlzVmFsaWR1cmlPZmZzZXRwYXJzZWRVcmljb21wdXRlQW5kVmFsaWRhdGVDb25zdHJ1Y3Rvck5hbWVhZGRFeHBvcnRjb25maWd1cmF0aW9uc2xvb2t1cEltcG9ydENvbmRpdGlvbmRvdHRlZE5hbWVleHBvcnRlZExpYnJhcnlhZGRFeHBvcnRlcnByZWZpeENoYXJPZmZzZXRpbXBvcnRJbmRleG5hdGl2ZVBhdGhkYXJ0LWV4dDpzdHJpcHBlZFVyaW5hdGl2ZUltcG9ydFBhdGhhZGRQYXJ0T2ZhZGRGaWVsZHNmaWVsZEluZm9zcG90ZW50aWFsbHlOZWVkSW5pdGlhbGl6ZXJJbk91dGxpbmVpbml0aWFsaXplclRva2VuYmVmb3JlTGFzdGNvbnN0SW5pdGlhbGl6ZXJUb2tlbmlzRHVwbGljYXRlZERlY2xhcmF0aW9uZnVsbE5hbWVidWlsZEJ1aWxkZXJhZGREZXBlbmRlbmNpZXNzZXREb2N1bWVudGF0aW9uQ29tbWVudGFkZEltcGxlbWVudGF0aW9uQnVpbGRlcnZhbGlkYXRlUGFydHVzZWRQYXJ0c2V4cG9ydGVyc2V4cG9ydGVyaW5jbHVkZVBhcnRzc2VlblBhcnRzcGFydE9mZnNldHBhcnRPZkxpYnJhcnlpbmNsdWRlUGFydHBhcnREZWNsYXJhdGlvbnNkdXBsaWNhdGVkcGFydEltcGxpY2l0bHlUeXBlZEZpZWxkc3Rha2VJbXBsaWNpdGx5VHlwZWRGaWVsZHNidWlsZEluaXRpYWxTY29wZXNhZGRUb0V4cG9ydFNjb3BlZXhwbGljaXRDb3JlSW1wb3J0ZmluYWxpemVJbXBvcnRzbWVtYmVyTGFzdHR5cGVDb3VudGNoZWNrVHlwZW5vcm1hbGl6ZVR5cGVhZGRQcm9ibGVtQXRBY2Nlc3NvcnNhZGROYW1lZFR5cGVhZGRNaXhpbkFwcGxpY2F0aW9ubWl4aW5zYWRkVm9pZFR5cGVpc3N1ZVBvc3Rwb25lZFByb2JsZW1zcG9zdHBvbmVkUHJvYmxlbXN1cGVydHlwZU9mZnNldF9hZGRDbGFzc1R5cGVQYXJhbWV0ZXJTY29wZUtpbmQuY2xhc3NEZWNsYXJhdGlvbmFkZE1peGluRGVjbGFyYXRpb25UeXBlUGFyYW1ldGVyU2NvcGVLaW5kLm1peGluRGVjbGFyYXRpb25jbGFzc1Njb3BlY2xhc3MgY29uc3RydWN0b3JTY29wZWFwcGx5TWl4aW5zdHlwZVZhcmlhYmxlc0J5TmFtZWNoZWNrVHlwZVZhcmlhYmxlc3NldFBhcmVudHNldFBhcmVudEFuZENoZWNrQ29uZmxpY3RzdHZvd25lcmFkZEV4dGVuc2lvbkRlY2xhcmF0aW9uZXh0ZW5zaW9uTmFtZVR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZXh0ZW5zaW9uRGVjbGFyYXRpb25leHRlbnNpb24gc3ViY2xhc3NOYW1ldW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbnJ1bm5pbmdOYW1laXNOYW1lZE1peGluQXBwbGljYXRpb250eXBlVmFyaWFibGVOYW1lc3R5cGVWYXJpYWJsZXVzZXNUeXBlVmFyaWFibGVzaXNHZW5lcmljZnVsbG5hbWVhcHBsaWNhdGlvblR5cGVWYXJpYWJsZXNhcHBsaWNhdGlvblR5cGVBcmd1bWVudHNUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnVubmFtZWRNaXhpbkFwcGxpY2F0aW9ubWl4aW4gYXBwbGljYXRpb25jb3B5VHlwZVZhcmlhYmxlc25ld1R5cGVzbmV3VHlwZW1peGluRGVjbGFyYXRpb25jb21wdXRlZFN0YXJ0Q2hhck9mZnNldGFwcGxpY2F0aW9ubWl4aW4gYWRkTmFtZWRNaXhpbkFwcGxpY2F0aW9ubWl4aW5BcHBsaWNhdGlvblR5cGVQYXJhbWV0ZXJTY29wZUtpbmQubmFtZWRNaXhpbkFwcGxpY2F0aW9uYWRkQ29uc3RydWN0b3Jjb25zdHJ1Y3Rvck5hbWVjaGFyT3BlblBhcmVuT2Zmc2V0bmF0aXZlTWV0aG9kTmFtZXNldENvbnN0cnVjdG9yTmFtZU9mZnNldGFkZE5hdGl2ZU1ldGhvZGFkZEZhY3RvcnlNZXRob2RmYWN0b3J5RGVjbGFyYXRpb25UeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmZhY3RvcnlNZXRob2QjZmFjdG9yeV9tZXRob2Rwcm9jZWR1cmVOYW1lc2F2ZWREZWNsYXJhdGlvbmFkZEVudW1lbnVtQ29uc3RhbnRJbmZvc2FkZEZ1bmN0aW9uVHlwZUFsaWFzVHlwZVBhcmFtZXRlclNjb3BlS2luZC50eXBlZGVmI3R5cGVkZWZhZGRGdW5jdGlvblR5cGVUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmZ1bmN0aW9uVHlwZSNmdW5jdGlvbl90eXBlYWRkRm9ybWFsUGFyYW1ldGVyaGFzVGhpc2FkZFR5cGVWYXJpYWJsZWFkZE5hdGl2ZURlcGVuZGVuY3lzZWVuZXhwb3J0SW5kZXhwcmVmaXhCdWlsZGVyZXhwb3J0ZWRpc0xvYWRMaWJyYXJ5cHJlZmVycmVkb3RoZXJVcmlwcmVmZXJyZWRVcmloaWRkZW5VcmlidWlsZGVyVGVtcGxhdGVsb2FkTGlicmFyeUJ1aWxkZXJmaW5pc2hGb3J3YXJkZXJzZm9yd2FyZGVycG9zaXRpb25hbENvdW50Zm9yd2FyZGVyUGFyYW1ldGVyb3JpZ2luUGFyYW1ldGVyb3JpZ2luTmFtZWRNYXBvcmlnaW5OYW1lZGZvcndhcmRlck5hbWVkYmVjb21lTmF0aXZlc3ludGhlc2l6ZVR5cGVQYXJhbWV0ZXJOYW1lc3N5bnRoZXNpemVUeXBlUGFyYW1ldGVyTmFtZWNvbXB1dGVEZWZhdWx0VHlwZXNGb3JWYXJpYWJsZXNoYXZlRXJyb25lb3VzQm91bmRzZ2VuZXJpY0Z1bmN0aW9uVHlwZXNyZXBvcnRJc3N1ZXNwZXJmb3JtRXJyb3JSZWNvdmVyeWFwcGx5UGF0Y2hlc29yaWdpbkRlY2xhcmF0aW9uc2FwcGx5UGF0Y2hwYXRjaERlY2xhcmF0aW9uc2luamVjdE1lbWJlckZyb21QYXRjaGV4cG9ydE1lbWJlckZyb21QYXRjaHJlcG9ydFR5cGVBcmd1bWVudElzc3Vlc2luZmVycmVkdGFyZ2V0UmVjZWl2ZXJpc3N1ZWlzc3VlSW5mZXJyZWRlbmNsb3NpbmdOYW1lcmVwb3J0VHlwZUFyZ3VtZW50SXNzdWVjaGVja0JvdW5kc0luRmllbGRjaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlUGFydHNjaGVja0JvdW5kc0luRnVuY3Rpb25Ob2Rla2xhc3NjaGVja0JvdW5kc0luTWV0aG9kSW52b2NhdGlvbnJlY2VpdmVyVHlwZUFyZ3VtZW50c21ldGhvZFBhcmFtZXRlcnNpbnN0YW50aWF0ZWRNZXRob2RQYXJhbWV0ZXJzY2hlY2tCb3VuZHNJbk91dGxpbmVmaW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVQYXJhbWV0ZXJTY29wZUtpbmRUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmxpYnJhcnlUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb25UeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnN0YXRpY09ySW5zdGFuY2VNZXRob2RPckNvbnN0cnVjdG9yVHlwZVBhcmFtZXRlclNjb3BlS2luZC50b3BMZXZlbE1ldGhvZGNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb25jbGFzc0RlY2xhcmF0aW9udW5uYW1lZE1peGluQXBwbGljYXRpb25uYW1lZE1peGluQXBwbGljYXRpb25leHRlbnNpb25EZWNsYXJhdGlvbnN0YXRpY09ySW5zdGFuY2VNZXRob2RPckNvbnN0cnVjdG9ydG9wTGV2ZWxNZXRob2RmYWN0b3J5TWV0aG9kVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcl9raW5kX2NoYXJPZmZzZXRfdHlwZVZhcmlhYmxlc19leHRlbnNpb25UaGlzVHlwZTxsaWJyYXJ5Pm1hcmtBc0NsYXNzRGVjbGFyYXRpb25VbmV4cGVjdGVkIGRlY2xhcmF0aW9uIGtpbmQ6IG1hcmtBc05hbWVkTWl4aW5BcHBsaWNhdGlvbm1hcmtBc01peGluRGVjbGFyYXRpb25tYXJrQXNFeHRlbnNpb25EZWNsYXJhdGlvbnJlZ2lzdGVyRXh0ZW5zaW9uVGhpc1R5cGVEZWNsYXJhdGlvbkJ1aWxkZXIucmVnaXN0ZXJFeHRlbnNpb25UaGlzVHlwZSBpcyBub3Qgc3VwcG9ydGVkIEV4dGVuc2lvbiB0aGlzIHR5cGUgaGFzIGFscmVhZHkgYmVlbiBzZXQuZXh0ZW5zaW9uVGhpc1R5cGVEZWNsYXJhdGlvbkJ1aWxkZXIuZXh0ZW5zaW9uVGhpc1R5cGUgbm90IHN1cHBvcnRlZCBvbiBEZWNsYXJhdGlvbkJ1aWxkZXIuZXh0ZW5zaW9uVGhpc1R5cGUgaGFzIG5vdCBiZWVuIHNldCBvbiBuYW1lT3JRdWFsaWZpZWRlbmRDaGFyT2Zmc2V0YnVpbGRJbnZhbGlkVHlwZURlY2xhcmF0aW9uQnVpbGRlcig6a2luZD0sbmFtZT1GaWVsZEluZm9JbXBsZW1lbnRhdGlvbkluZm9Qb3N0cG9uZWRQcm9ibGVtY29tcHV0ZUxpYnJhcnlVcmlubyBsaWJyYXJ5IHBhcmVudGV4dHJhY3ROYW1lZmFzdGEuc291cmNlX2xvYWRlckluc3RydW1lbnRhdGlvblNoYWRvd1R5cGVJbmZlcmVuY2VFbmdpbmVDb2xsZWN0aW9uVHJhbnNmb3JtZXJTZXRMaXRlcmFsVHJhbnNmb3JtZXJDbGFzc01lbWJlclBhcnNlckRpZXRMaXN0ZW5lckRpZXRQYXJzZXJPdXRsaW5lQnVpbGRlcmluc3RydW1lbnRhdGlvbmNvbGxlY3Rpb25UcmFuc2Zvcm1lcnNldExpdGVyYWxUcmFuc2Zvcm1lcnN1cHByZXNzTGV4aWNhbEVycm9yc3N5bnRoZXNpemVTb3VyY2VGb3JNaXNzaW5nRmlsZWhhc1NjaGVtZXplcm9UZXJtaW5hdGVkQnl0ZXNyYXdCeXRlc2dldFNvdXJjZW5ld1BhdGhTZWdtZW50cy1wYXRjaGltcG9ydCAnZGFydDpfaW50ZXJuYWwnOwppbXBvcnQgJ2RhcnQ6YXN5bmMnOwoKZXhwb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZSwgU3RyZWFtOwoKcHJpbnQob2JqZWN0KSB7fQoKY2xhc3MgSXRlcmF0b3Ige30KCmNsYXNzIEl0ZXJhYmxlIHt9CgpjbGFzcyBMaXN0IGV4dGVuZHMgSXRlcmFibGUgewogIGZhY3RvcnkgTGlzdC51bm1vZGlmaWFibGUoZWxlbWVudHMpID0+IG51bGw7Cn0KCmNsYXNzIE1hcCBleHRlbmRzIEl0ZXJhYmxlIHsKICBmYWN0b3J5IE1hcC51bm1vZGlmaWFibGUob3RoZXIpID0+IG51bGw7Cn0KCmNsYXNzIE5vU3VjaE1ldGhvZEVycm9yIHsKICBOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbihyZWNlaXZlciwgaW52b2NhdGlvbik7Cn0KCmNsYXNzIE51bGwge30KCmNsYXNzIE9iamVjdCB7CiAgbm9TdWNoTWV0aG9kKGludm9jYXRpb24pID0+IG51bGw7Cn0KCmNsYXNzIFN0cmluZyB7fQoKY2xhc3MgU3ltYm9sIHt9CgpjbGFzcyBTZXQge30KCmNsYXNzIFR5cGUge30KCmNsYXNzIF9JbnZvY2F0aW9uTWlycm9yIHsKICBfSW52b2NhdGlvbk1pcnJvci5fd2l0aFR5cGUoX21lbWJlck5hbWUsIF90eXBlLCBfdHlwZUFyZ3VtZW50cywKICAgICAgX3Bvc2l0aW9uYWxBcmd1bWVudHMsIF9uYW1lZEFyZ3VtZW50cyk7Cn0KCmNsYXNzIGJvb2wge30KCmNsYXNzIGRvdWJsZSBleHRlbmRzIG51bSB7fQoKY2xhc3MgaW50IGV4dGVuZHMgbnVtIHt9CgpjbGFzcyBudW0ge30KCmNsYXNzIF9TeW5jSXRlcmFibGUge30KCmNsYXNzIF9TeW5jSXRlcmF0b3IgewogIHZhciBfY3VycmVudDsKICB2YXIgX3lpZWxkRWFjaEl0ZXJhYmxlOwp9CgpjbGFzcyBGdW5jdGlvbiB7fQpfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7fQoKX2FzeW5jU3RhY2tUcmFjZUhlbHBlcihhc3luY19vcCkge30KCl9hc3luY1RoZW5XcmFwcGVySGVscGVyKGNvbnRpbnVhdGlvbikge30KCl9hd2FpdEhlbHBlcihvYmplY3QsIHRoZW5DYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgYXdhaXRlcikge30KCl9jb21wbGV0ZU9uQXN5bmNSZXR1cm4oY29tcGxldGVyLCB2YWx1ZSkge30KCmNsYXNzIF9Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyIHsKICBhZGQoZXZlbnQpIHt9CgogIGFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSB7fQoKICBhZGRTdHJlYW0oc3RyZWFtKSB7fQoKICBjbG9zZSgpIHt9CgogIGdldCBzdHJlYW0gPT4gbnVsbDsKfQoKY2xhc3MgQ29tcGxldGVyIHsKICBmYWN0b3J5IENvbXBsZXRlci5zeW5jKCkgPT4gbnVsbDsKCiAgZ2V0IGZ1dHVyZTsKCiAgY29tcGxldGUoW3ZhbHVlXSk7CgogIGNvbXBsZXRlRXJyb3IoZXJyb3IsIFtzdGFja1RyYWNlXSk7Cn0KCmNsYXNzIEZ1dHVyZSB7CiAgZmFjdG9yeSBGdXR1cmUubWljcm90YXNrKGNvbXB1dGF0aW9uKSA9PiBudWxsOwp9CgpjbGFzcyBGdXR1cmVPciB7Cn0KCmNsYXNzIF9Bc3luY0F3YWl0Q29tcGxldGVyIGltcGxlbWVudHMgQ29tcGxldGVyIHsKICBnZXQgZnV0dXJlID0+IG51bGw7CgogIGNvbXBsZXRlKFt2YWx1ZV0pIHt9CgogIGNvbXBsZXRlRXJyb3IoZXJyb3IsIFtzdGFja1RyYWNlXSkge30KfQoKY2xhc3MgU3RyZWFtIHt9CgpjbGFzcyBfU3RyZWFtSXRlcmF0b3IgewogIGdldCBjdXJyZW50ID0+IG51bGw7CgogIG1vdmVOZXh0KCkge30KCiAgY2FuY2VsKCkge30KfQpjbGFzcyBfVW5tb2RpZmlhYmxlU2V0IHsKICBmaW5hbCBNYXAgX21hcDsKICBjb25zdCBfVW5tb2RpZmlhYmxlU2V0KHRoaXMuX21hcCk7Cn0KY2xhc3MgU3ltYm9sIHsKICBjb25zdCBTeW1ib2woU3RyaW5nIG5hbWUpOwp9Ci8qIG9mZnNldEluQnl0ZXNsaXN0ZW5lcnBhcnNlVW5pdGNyZWF0ZURpZXRMaXN0ZW5lcmRpZXRMaXN0ZW5lcmN1cnJlbnREZWNsYXJhdGlvbmRlYnVnRXhwcmVzc2lvbiBpbiBkZWJ1Z0V4cHJjcmVhdGVMaXN0ZW5lclJlc29sdmVkIHBhcnRzQXBwbGllZCBwYXRjaGVzZXhwb3J0ZWVzc291cmNlTGlicmFyeWJvdGh3YXNDaGFuZ2VkZXhwb3J0ZWVDb21wdXRlZCBsaWJyYXJ5IHNjb3Blc2RlYnVnUHJpbnRFeHBvcnRzIGV4cG9ydHMgIHR5cGVzZm9ybWFsQ291bnRGaW5hbGl6ZWQgIGluaXRpYWxpemluZyBmb3JtYWxzRmluaXNoZWQgZGVmZXJyZWQgbG9hZCB0ZWFyb2ZmcyBGaW5pc2hlZCBmb3J3YXJkZXJzIGZvciAgcHJvY2VkdXJlcyBjb25zdHJ1Y3RvcnMgdHlwZS12YXJpYWJsZSBib3VuZHNDb21wdXRlZCBkZWZhdWx0IHR5cGVzIGZvciAgdHlwZSB2YXJpYWJsZXNGaW5pc2hlZCAgbmF0aXZlIG1ldGhvZHMgcGF0Y2ggbWV0aG9kc2NoZWNrT2JqZWN0Q2xhc3NIaWVyYXJjaHloYW5kbGVIaWVyYXJjaHlDeWNsZXNibGFja0xpc3RlZENsYXNzZXN0b3BvbG9naWNhbGx5U29ydGVkQ2xhc3Nlc3ByZXZpb3VzV29ya0xpc3RkaXJlY3RTdXBlcnR5cGVzYWxsU3VwZXJ0eXBlc1Byb2Nlc3NlZGNoZWNrQ2xhc3NTdXBlcnR5cGVzY2xhc3Nlc1dpdGhDeWNsZXNDaGVja2VkIGNsYXNzIGhpZXJhcmNoeWlzQ2xhc3NCdWlsZGVybmFtZVRvRXhwb3J0c2Vycm9yRXhwb3J0c25hbWVUb0ltcG9ydHNlcnJvckltcG9ydHNDaGVja2VkIGltcG9ydHMgYW5kIGV4cG9ydHMgZm9yIGR1cGxpY2F0ZSBuYW1lc0J1aWx0IGNvbXBvbmVudGNvbXB1dGVGdWxsQ29tcG9uZW50YW1iaWd1b3VzVHlwZXNSZWNvcmRzcmVjb3JkaGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlc0NvbXB1dGVkIGNsYXNzIGhpZXJhcmNoeWlnbm9yZUFtYmlndW91c1N1cGVydHlwZXNDb21wdXRlZCBjb3JlIHR5cGVzc291cmNlQ2xhc3Nlc0NoZWNrZWQgc3VwZXJ0eXBlc0NoZWNrZWQgdHlwZSBhcmd1bWVudHMgb2Ygc3VwZXJzIGFnYWluc3QgdGhlIGJvdW5kc292ZXJyaWRlQ2hlY2tzQ2hlY2tlZCAgb3ZlcnJpZGVzZmluaXNoVG9wTGV2ZWxJbml0aWFsaXppbmdGb3JtYWxzRmluaXNoZWQgaW5pdGlhbGl6aW5nIGZvcm1hbHNkZWxheWVkTWVtYmVyQ2hlY2tzY2hhbmdlZENsYXNzZXNDb21wdXRlZCAgY29tYmluZWQgbWVtYmVyIHNpZ25hdHVyZXNVcGRhdGVkICBjbGFzc2VzIGluIGtlcm5lbCBoaWVyYXJjaHlDaGVja2VkIHJlZGlyZWN0aW5nIGZhY3Rvcmllc0FkZGVkIG5vU3VjaE1ldGhvZCBmb3J3YXJkZXJzY2hlY2tNaXhpbkRlY2xhcmF0aW9uY2hlY2tNaXhpbkFwcGxpY2F0aW9uQ2hlY2tlZCBtaXhpbiBkZWNsYXJhdGlvbiBhcHBsaWNhdGlvbnNoaWVyYXJjaHlCdWlsZGVyQnVpbHQgY2xhc3MgaGllcmFyY2h5cHJlcGFyZVRvcExldmVsYWxsSW1wbGljaXRseVR5cGVkRmllbGRzaW5mZXJUeXBlaXNUeXBlSW5mZXJlbmNlUHJlcGFyZWRQZXJmb3JtZWQgdG9wIGxldmVsIGluZmVyZW5jZXRyYW5zZm9ybUNvbnN0dHJhbnNmb3JtZXJBbWJpZ3VvdXNUeXBlc1JlY29yZGRlZmF1bHREYXJ0Q29yZVNvdXJjZWRlZmF1bHREYXJ0QXN5bmNTb3VyY2VkZWZhdWx0RGFydENvbGxlY3Rpb25Tb3VyY2VkZWZhdWx0RGFydEludGVybmFsU291cmNlZmFzdGEuY29uc3RhbnRfZXZhbHVhdG9yY29uc3RhbnRfY29sbGVjdGlvbl9idWlsZGVycy5kYXJ0SmF2YVNjcmlwdEludENvbnN0YW50YmlnSW50VmFsdWVmcm9tRG91YmxlZnJvbUJpZ0ludHRvRG91YmxlZnJvbVVJbnQ2NHRvVW5zaWduZWRDb25zdGFudHNUcmFuc2Zvcm1lcmNvbnN0YW50RXZhbHVhdG9ya2VlcEZpZWxkc2tlZXBWYXJpYWJsZXNldmFsdWF0ZUFubm90YXRpb25zZXJyb3JSZXBvcnRlcmNvbnZlcnRMaWJyYXJ5dHJhbnNmb3JtQW5ub3RhdGlvbnN3aXRoTmV3RW52aXJvbm1lbnR0cmFuc2Zvcm1FeHByZXNzaW9uc2V2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHRwb3NpdGlvbmFsUGFyYW1ldGVyQ291bnRldmFsdWF0ZVdpdGhDb250ZXh0YWRkVmFyaWFibGVWYWx1ZW1ha2VDb25zdGFudEV4cHJlc3Npb25zaG91bGRJbmxpbmV0cmVlQ29udGV4dHJ1bkluc2lkZUNvbnRleHRDb25zdGFudEV2YWx1YXRvcnVubW9kaWZpYWJsZVNldE1hcGlzSW5zdGFudGlhdGVkY2Fub25pY2FsaXphdGlvbkNhY2hlbm9kZUNhY2hlcHJpbWl0aXZlRXF1YWxDYWNoZW51bGxDb25zdGFudHRydWVDb25zdGFudGZhbHNlQ29uc3RhbnRjb250ZXh0Q2hhaW5pbnN0YW5jZUJ1aWxkZXJyZXBsYWNlbWVudE5vZGVzbG93ZXJlZHNlZW5VbmV2YWx1YXRlZENoaWxkbGF6eURlcHRocHVibGljSWRlbnRpZmllclJlZ0V4cF5bYS16QS1aJF1bYS16QS1aMC05XyRdKiRub25Vc2FibGVLZXl3b3Jkc05vICdlbnZpcm9ubWVudERlZmluZXMnIHBhc3NlZCB0byB0aGUgY29uc3RhbnQgZXZhbHVhdG9yIGJ1dCB0aGUgQ29uc3RhbnRzQmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVuZXZhbHVhdGVkIGNvbnN0YW50cy5fVW5tb2RpZmlhYmxlU2V0X21hcHNob3VsZEJlVW5ldmFsdWF0ZWR0YXJnZXRpbmdKYXZhU2NyaXB0Z2V0RmlsZU9mZnNldF9ldmFsdWF0ZVN1YmV4cHJlc3Npb25jb250ZXh0TWVzc2FnZXNpbnZhbGlkcmVwb3J0SW52YWxpZEV4cHJlc3Npb25yZXBvcnRJbnZhbGlkdW5ldmFsdWF0ZWRleHRyYWN0ZW50ZXJMYXp5bGVhdmVMYXp5dW5sb3dlcndhc1VuZXZhbHVhdGVkX2V2YWx1YXRlTnVsbGFibGVTdWJleHByZXNzaW9uZnVucHVzaENvbnRleHRwb3BDb250ZXh0cnVuSW5zaWRlQ29udGV4dElmTm9Db250ZXh0Y29udGV4dE5vZGVDb25zdGFudCBldmFsdWF0aW9uIGhhcyBubyBzdXBwb3J0IGZvciBtYWtlQm9vbENvbnN0YW50bWFrZURvdWJsZUNvbnN0YW50ZXZhbHVhdGVEYXJ0VHlwZWlzRmluaXRldHJ1bmNhdGVUb0RvdWJsZWFkZFNwcmVhZHNldF9pc1N5bWJvbE5vbi1jb25zdCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLkNvbnN0cnVjdG9yICIiIGhhcyBub24tdHJpdmlhbCBib2R5ICIgYmVsb25ncyB0byBhYnN0cmFjdCBjbGFzcyAicG9zaXRpb25hbHNldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHNldmFsdWF0ZU5hbWVkQXJndW1lbnRzdW5ldmFsdWF0ZWRBcmd1bWVudHNuYW1lVmFsdWVpc1ZhbGlkU3ltYm9sTmFtZWV2YWx1YXRlVHlwZUFyZ3VtZW50c3dpdGhOZXdJbnN0YW5jZUJ1aWxkZXJoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb25idWlsZFVuZXZhbHVhdGVkSW5zdGFuY2VidWlsZEluc3RhbmNlY2hlY2tBc3NlcnRzZXRGaWVsZFZhbHVlaXNWYWxpZFB1YmxpY0lkZW50aWZpZXJoYXNNYXRjaHBvc2l0aW9uYWxBcmd1bWVudHNuYW1lZEFyZ3VtZW50c2FkZFR5cGVQYXJhbWV0ZXJWYWx1ZWluaXRldmFsdWF0ZVN1cGVyVHlwZUFyZ3VtZW50c05vIHN1cHBvcnQgZm9yIGhhbmRsaW5nIGluaXRpYWxpemVyIG9mIHR5cGUgdW5ldmFsdWF0ZWRVbnJlYWRDb25zdGFudHNvcGlzWmVyb290aGVyVmFsdWV0b0ludGV2YWx1YXRlQmluYXJ5Qml0T3BlcmF0aW9ubmVnYXRpdmVpc05lZ2F0aXZlZXZhbHVhdGVCaW5hcnlTaGlmdE9wZXJhdGlvbm5lZ2F0aXZlUmVjZWl2ZXJldmFsdWF0ZUJpbmFyeU51bWVyaWNPcGVyYXRpb25JbnN0YW5jZSBmaWVsZCBhY2Nlc3Mgb3V0c2lkZSBjb25zdHJ1Y3RvckNvdWxkIG5vdCBldmFsdWF0ZSBmaWVsZCBnZXQgIG9uIGluY29tcGxldGUgaW5zdGFuY2Vsb29rdXBWYXJpYWJsZVZhcmlhYmxlIGdldCBvZiBhIG5vbi1jb25zdCB2YXJpYWJsZS5ObyBzdXBwb3J0IGZvciAgaW4gYSBzdGF0aWMtZ2V0LmNvbmNhdGVuYXRlZGJvb2xDb25zdGFudGludFZhbHVlZW5zdXJlSXNTdWJ0eXBlaXNTdWJ0eXBlbGlicmFyeU9mZXZhbHVhdGVEYXJ0VHlwZXNUaGUgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIHN1cHBsaWVkIGluIHRoZSBwYXJ0aWFsIGluc3RhbnRpYXRpb24gZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyBvZiB0aGUgT25seSB0ZWFyLW9mZiBjb25zdGFudHMgY2FuIGJlIHBhcnRpYWxseSBpbnN0YW50aWF0ZWQuaGFzUHJpbWl0aXZlRXF1YWxjbGFzc0hhc1ByaW1pdGl2ZUVxdWFsY2FjaGVkY29uc3RhbnRUeXBlcGFpcnBvc2l0aW9uYWxBcmdzbmFtZWRBcmdzb2xkRW52MjE0NzQ4MzY0OHRvU2lnbmVkVW5leHBlY3RlZCBiaW5hcnkgbnVtZXJpYyBvcGVyYXRpb24gJ0luc3RhbmNlQnVpbGRlcmV2YWx1YXRvckV2YWx1YXRpb25FbnZpcm9ubWVudF92YXJpYWJsZXNfdW5yZWFkVW5ldmFsdWF0ZWRWYXJpYWJsZXNsb29rdXBQYXJhbWV0ZXJWYWx1ZV9BYm9ydER1ZVRvRXJyb3JfQWJvcnREdWVUb0ludmFsaWRFeHByZXNzaW9uRXJyb3JSZXBvcnRlclNpbXBsZUVycm9yUmVwb3J0ZXJfcmVwb3J0IENvbnN0YW50IGV2YWx1YXRpb24gZXJyb3I6IElzSW5zdGFudGlhdGVkVmlzaXRvcl9hdmFpbGFibGVWYXJpYWJsZXNBIHZpc2l0b3IgbWV0aG9kIHNlZW1zIHRvIGJlIHVuaW1wbGVtZW50ZWQhX0xpc3RPclNldENvbnN0YW50QnVpbGRlcm1ha2VMaXRlcmFsYWRkQ29uc3RhbnRzcHJlYWRFeHByZXNzaW9uc3ByZWFkTGlzdENvbnN0YW50QnVpbGRlcmxhc3RQYXJ0Tm9uLWNvbnN0YW50IGluIGNvbnN0YW50IGxpc3RTZXRDb25zdGFudEJ1aWxkZXJOb24tY29uc3RhbnQgaW4gY29uc3RhbnQgc2V0TWFwQ29uc3RhbnRCdWlsZGVyc2VlbktleXNrZXlDb250ZXh0dmFsdWVDb250ZXh0Tm9uLWNvbnN0YW50IGluIGNvbnN0YW50IG1hcHRyYW5zZm9ybUNvbXBvbmVudGNvbnN0YW50c1RyYW5zZm9ybWVyX2lzRm9ybWFsUGFyYW1ldGVyZmFzdGEua2VybmVsX2NvbnN0YW50c3ByZWRpY2F0ZWV4Y2x1ZGVVcmlUb1NvdXJjZWxpYnJhcmllc1RvV3JpdGVrZXJuZWwuY2hlY2tzVmVyaWZpY2F0aW9uRXJyb3I6IFZlcmlmaWNhdGlvbiBlcnJvcjpWZXJpZmljYXRpb24gZXJyb3I6IENvbnRleHQ6ICcnLgpOb2RlOiAnVHlwZWRlZlN0YXRlVHlwZWRlZlN0YXRlLkRvbmVUeXBlZGVmU3RhdGUuQmVpbmdDaGVja2VkRG9uZUJlaW5nQ2hlY2tlZHR5cGVQYXJhbWV0ZXJzSW5TY29wZXR5cGVkZWZTdGF0ZWNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlY3VycmVudE1lbWJlcmN1cnJlbnRQYXJlbnRlbnRlclBhcmVudEluY29ycmVjdCBwYXJlbnQgcG9pbnRlciBvbiAgZXhwZWN0ZWQgJycsIGJ1dCBmb3VuZDogJ29sZFBhcmVudGV4aXRQYXJlbnR1bmRlY2xhcmVWYXJpYWJsZXZpc2l0V2l0aExvY2FsU2NvcGVkZWNsYXJlTWVtYmVyTWVtYmVyICcnIGhhcyBiZWVuIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlLnVuZGVjbGFyZU1lbWJlclZhcmlhYmxlICcnIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlLmRlY2xhcmVUeXBlUGFyYW1ldGVyc01pc3NpbmcgYm91bmQgZm9yIHR5cGUgcGFyYW1ldGVyICdUeXBlIHBhcmFtZXRlciAnJyByZWRlY2xhcmVkLnVuZGVjbGFyZVR5cGVQYXJhbWV0ZXJzY2hlY2tWYXJpYWJsZUluU2NvcGUnIHVzZWQgb3V0IG9mIHNjb3BlLlR5cGVkZWYgJ2NoZWNrVHlwZWRlZicgcmVmZXJzIHRvIGl0c2VsZnNhdmVkVHlwZVBhcmFtZXRlcnNzYXZlZFBhcmVudFRoZSB0b3AtbGV2ZWwgZmllbGQgJycgc2hvdWxkIGJlIHN0YXRpY1RoZSBjb25zdCBmaWVsZCAnc2F2ZWRJbkNhdGNoQmxvY2tOYW1lZCBwYXJhbWV0ZXJzIGFyZSBub3Qgc29ydGVkIG9uIGZ1bmN0aW9uIHR5cGUgKFJldGhyb3cgbXVzdCBiZSBpbnNpZGUgYSBDYXRjaCBibG9jay5WYXJpYWJsZURlY2xhcmF0aW9uIG11c3QgYmUgYSBkaXJlY3QgY2hpbGQgb2YgYSBCbG9jaywgbm90IFN0YXRpY0dldCB3aXRob3V0IHRhcmdldC5TdGF0aWNHZXQgb2YgJycgd2l0aG91dCBnZXR0ZXIuJyB0aGF0J3MgYW4gaW5zdGFuY2UgbWVtYmVyLlN0YXRpY1NldCB3aXRob3V0IHRhcmdldC5TdGF0aWNTZXQgdG8gJycgd2l0aG91dCBzZXR0ZXIuY2hlY2tUYXJnZXRlZEludm9jYXRpb25TdGF0aWNJbnZvY2F0aW9uIG9mICdDb25zdGFudCBTdGF0aWNJbnZvY2F0aW9uIG9mICcnIHRoYXQgaXNuJ3QgYSBjb25zdCBleHRlcm5hbCBmYWN0b3J5LiB3aXRob3V0IHRhcmdldC4gd2l0aG91dCBmdW5jdGlvbi4gd2l0aCBpbmNvbXBhdGlibGUgYXJndW1lbnRzIGZvciAnZXhwZWN0ZWRUeXBlUGFyYW1ldGVycyB3aXRoIHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyBmb3IgJ0RpcmVjdFByb3BlcnR5R2V0IHdpdGhvdXQgdGFyZ2V0LkRpcmVjdFByb3BlcnR5R2V0IG9mICcnIHRoYXQgaXNuJ3QgYW4gaW5zdGFuY2UgbWVtYmVyLkRpcmVjdFByb3BlcnR5U2V0IHdpdGhvdXQgdGFyZ2V0LkRpcmVjdFByb3BlcnR5U2V0IG9mICcnIHRoYXQgaXMgc3RhdGljLkRpcmVjdE1ldGhvZEludm9jYXRpb24gd2l0aG91dCByZWNlaXZlci5Db25zdHJ1Y3Rvckludm9jYXRpb24gb2YgYWJzdHJhY3QgY2xhc3MuQ29uc3RhbnQgQ29uc3RydWN0b3JJbnZvY2F0aW9uIGZvICcnIHRoYXQgaXNuJ3QgY29uc3QuTm8gdGFyZ2V0LlRhcmdldCBoYXMgbm8gcGFyZW50LlN3aXRjaCBjYXNlIGlzbid0IGNoaWxkIG9mIHBhcmVudC5EYW5nbGluZyByZWZlcmVuY2UgdG8gJycsIHBhcmVudCBpczogJycgcmVmZXJlbmNlZCBvdXQgb2Ygc2NvcGUsIHBhcmVudCBpczogJycgcmVmZXJlbmNlZCBmcm9tIHN0YXRpYyBjb250ZXh0LCBwYXJlbnQgaXM6ICdUeXBlICBwcm92aWRlcyAgdHlwZSBhcmd1bWVudHMgYnV0IHRoZSBjbGFzcyBkZWNsYXJlcyBwYXJhbWV0ZXJzLlRoZSB0eXBlZGVmIHR5cGUgIHR5cGUgYXJndW1lbnRzIGJ1dCB0aGUgdHlwZWRlZiBkZWNsYXJlc0NoZWNrUGFyZW50UG9pbnRlcnNQYXJlbnQgcG9pbnRlciBvbiAnaXMgJ2J1dCBzaG91bGQgYmUgJ2NoZWNrSW5pdGlhbGl6ZXJzVHlwZVNjaGVtYVByaW50ZXJfSXNLbm93blZpc2l0b3JwYXJhbWV0ZXJUeXBlbmFtZWRQYXJhbWV0ZXJUeXBlaXNLbm93bnNjaGVtYXR5cGVTY2hlbWFUb1N0cmluZ0luc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVySW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJnc0luZmVyZW5jZUhlbHBlckluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseVR5cGVJbmZlcmVuY2VFbmdpbmVFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0VHlwZVByb21vdGVySW1wbGdyZWF0ZXN0Q2xvc3VyZVR5cGVTY2hlbWFFbnZpcm9ubWVudGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJUeXBlQ29udHJvbEZsb3dNYXBFbnRyeUZvckVsZW1lbnRGb3JJbkVsZW1lbnRGb3JJbk1hcEVudHJ5Rm9yTWFwRW50cnlJZkVsZW1lbnRJZk1hcEVudHJ5Y29udmVydFRvRWxlbWVudG1ha2VMZXRpbmZlcmVuY2VfdmlzaXRvci5kYXJ0aW5mZXJyZWRfdHlwZV92aXNpdG9yLmRhcnRDbGFzc0luZmVyZW5jZUluZm9uZWVkc0NoZWNrVmlzaXRvcmdldHRlcnNBbmRNZXRob2RzQXJndW1lbnRzSnVkZ21lbnRfaGFzRXhwbGljaXRUeXBlQXJndW1lbnRzcG9zaXRpb25hbEp1ZGdtZW50c3NldE5vbkluZmVycmFibGVBcmd1bWVudFR5cGVzcmVtb3ZlTm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXNBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50anVkZ21lbnRhY2NlcHRJbmZlcmVuY2V2aXNpdEFzc2VydEluaXRpYWxpemVySnVkZ21lbnRBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudGNvbmRpdGlvbkp1ZGdtZW50bWVzc2FnZUp1ZGdtZW50dmlzaXRBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudEJsb2NrSnVkZ21lbnRqdWRnbWVudHN2aXNpdEJsb2NrSnVkZ21lbnRDYXNjYWRlSnVkZ21lbnRuZXh0Q2FzY2FkZXRhcmdldEp1ZGdtZW50Y2FzY2FkZUp1ZGdtZW50c3NlY3Rpb25uZXdDYXNjYWRldHlwZUNvbnRleHR2aXNpdENhc2NhZGVKdWRnbWVudENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnRjb21iaW5lcm51bGxBd2FyZUNvbWJpbmVyaXNQb3N0SW5jRGVjaXNQcmVJbmNEZWNfZ2V0VG9TdHJpbmdQYXJ0c2Rlc3VnYXJlZD1yZWFkPXJocz13cml0ZT1jb21iaW5lcj1udWxsQXdhcmVDb21iaW5lcj1pc1Bvc3RJbmNEZWM9dHJ1ZWlzUHJlSW5jRGVjPXRydWVfaW5mZXJSaHNpbmZlcnJlcnJlYWRUeXBld3JpdGVDb250ZXh0Y29tYmluZXJNZW1iZXJjb21iaW5lZFR5cGVmaW5kTWV0aG9kSW52b2NhdGlvbk1lbWJlcmluc3RydW1lbnRlZGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvckFuZFR5cGVyaHNUeXBlY29tYmluZXJUeXBlZ2V0Q2FsbGVlRnVuY3Rpb25UeXBlZ2V0Q2FsbGVlVHlwZWluZmVyRXhwcmVzc2lvbmV4cGVjdGVkVHlwZWVuc3VyZUFzc2lnbmFibGVjaGVja0tpbmRwcmVDaGVja0ludm9jYXRpb25Db250cmF2YXJpYW5jZXJlcGxhY2VkQ29tYmluZXJoYW5kbGVJbnZvY2F0aW9uQ29udHJhdmFyaWFuY2VyZXBsYWNlZENvbWJpbmVyMl9zdG9yZUxldFR5cGVpc1ZvaWRBbGxvd2VkcmVwbGFjZWRSaHNlcXVhbHNJbnZvY2F0aW9uZ2V0U3RhbmRhcmRVcHBlckJvdW5kQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudFdpdGhSZWNlaXZlcnJlY2VpdmVyPWlzU3VwZXI9dHJ1ZV9pbmZlclJlY2VpdmVyQ29udGludWVTd2l0Y2hKdWRnbWVudHZpc2l0Q29udGludWVTd2l0Y2hKdWRnbWVudERlZmVycmVkQ2hlY2tKdWRnbWVudHZpc2l0RGVmZXJyZWRDaGVja0p1ZGdtZW50RG9KdWRnbWVudHZpc2l0RG9KdWRnbWVudERvdWJsZUp1ZGdtZW50dmlzaXREb3VibGVKdWRnbWVudEV4cHJlc3Npb25KdWRnbWVudEVtcHR5U3RhdGVtZW50SnVkZ21lbnR2aXNpdEVtcHR5U3RhdGVtZW50SnVkZ21lbnRFeHByZXNzaW9uU3RhdGVtZW50SnVkZ21lbnR2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudGFyZ3VtZW50SnVkZ21lbnRzdmlzaXRGYWN0b3J5Q29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnRTaGFkb3dGaWVsZEluaXRpYWxpemVydmlzaXRTaGFkb3dGaWVsZEluaXRpYWxpemVyRm9ySnVkZ21lbnR1cGRhdGVKdWRnbWVudHN2aXNpdEZvckp1ZGdtZW50RnVuY3Rpb25Ob2RlSnVkZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnRfaGFzSW1wbGljaXRSZXR1cm5UeXBldmFyaWFibGVKdWRnbWVudGZ1bmN0aW9uSnVkZ21lbnR2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudHNldEhhc0ltcGxpY2l0UmV0dXJuVHlwZUludmFsaWRTdXBlckluaXRpYWxpemVySnVkZ21lbnRhcmd1bWVudHNKdWRnbWVudHZpc2l0SW52YWxpZFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudElmTnVsbEp1ZGdtZW50bGVmdEp1ZGdtZW50cmlnaHRKdWRnbWVudHZpc2l0SWZOdWxsSnVkZ21lbnRJZkp1ZGdtZW50dmlzaXRJZkp1ZGdtZW50SWxsZWdhbEFzc2lnbm1lbnRKdWRnbWVudHZpc2l0SWxsZWdhbEFzc2lnbm1lbnRKdWRnbWVudEluZGV4QXNzaWdubWVudEp1ZGdtZW50X2dldEludm9jYXRpb25Bcmd1bWVudHNpbmRleD12aXNpdEluZGV4QXNzaWdubWVudEp1ZGdtZW50SW5pdGlhbGl6ZXJKdWRnbWVudEludEp1ZGdtZW50YXNEb3VibGVuZWdhdGVkZG91YmxlVmFsdWV2aXNpdEludEp1ZGdtZW50U2hhZG93TGFyZ2VJbnRMaXRlcmFsYXNJbnQ2NHZpc2l0U2hhZG93TGFyZ2VJbnRMaXRlcmFsU2hhZG93SW52YWxpZEluaXRpYWxpemVydmlzaXRTaGFkb3dJbnZhbGlkSW5pdGlhbGl6ZXJTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplcnZpc2l0U2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXJMaXN0TGl0ZXJhbEp1ZGdtZW50dmlzaXRMaXN0TGl0ZXJhbEp1ZGdtZW50U2V0TGl0ZXJhbEp1ZGdtZW50dmlzaXRTZXRMaXRlcmFsSnVkZ21lbnRNYXBMaXRlcmFsSnVkZ21lbnR2aXNpdE1hcExpdGVyYWxKdWRnbWVudE1ldGhvZEludm9jYXRpb25KdWRnbWVudF9pc0ltcGxpY2l0Q2FsbHZpc2l0TWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50TmFtZWRGdW5jdGlvbkV4cHJlc3Npb25KdWRnbWVudHZpc2l0TmFtZWRGdW5jdGlvbkV4cHJlc3Npb25KdWRnbWVudE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudF9kZXN1Z2FyZWRJbnZvY2F0aW9udmlzaXROdWxsQXdhcmVNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnROdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50X2Rlc3VnYXJlZEdldHJlY2VpdmVySnVkZ21lbnR2aXNpdE51bGxBd2FyZVByb3BlcnR5R2V0SnVkZ21lbnRQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudG51bGxBd2FyZUd1YXJkbnVsbEF3YXJlR3VhcmQ9X2hhbmRsZVdyaXRlQ29udHJhdmFyaWFuY2VmaW5kUHJvcGVydHlTZXRNZW1iZXJ2aXNpdFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50UmVkaXJlY3RpbmdJbml0aWFsaXplckp1ZGdtZW50dmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVySnVkZ21lbnRSZXR1cm5KdWRnbWVudHJldHVybktleXdvcmRMZXhlbWV2aXNpdFJldHVybkp1ZGdtZW50U3RhdGVtZW50SnVkZ21lbnRTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnR2aXNpdFN0YXRpY0Fzc2lnbm1lbnRKdWRnbWVudFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudHZpc2l0U3VwZXJJbml0aWFsaXplckp1ZGdtZW50U3VwZXJNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnR2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50U3VwZXJQcm9wZXJ0eUdldEp1ZGdtZW50dmlzaXRTdXBlclByb3BlcnR5R2V0SnVkZ21lbnRTd2l0Y2hDYXNlSnVkZ21lbnRleHByZXNzaW9uSnVkZ21lbnRzU3dpdGNoU3RhdGVtZW50SnVkZ21lbnRleHByZXNzaW9uSnVkZ21lbnRjYXNlSnVkZ21lbnRzdmlzaXRTd2l0Y2hTdGF0ZW1lbnRKdWRnbWVudFN5bWJvbExpdGVyYWxKdWRnbWVudHZpc2l0U3ltYm9sTGl0ZXJhbEp1ZGdtZW50SW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50dmlzaXRJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnRJbnZhbGlkV3JpdGVKdWRnbWVudHZpc2l0SW52YWxpZFdyaXRlSnVkZ21lbnR2aXNpdFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudF9yZXBsYWNlV2l0aERlc3VnYXJlZGRlc3VnYXJlZExldGRlc3VnYXJlZENvbmRpdGlvbmFsRXhwcmVzc2lvbkNhdGNoSnVkZ21lbnRleGNlcHRpb25KdWRnbWVudHN0YWNrVHJhY2VKdWRnbWVudFRyeUNhdGNoSnVkZ21lbnRjYXRjaEp1ZGdtZW50c3Zpc2l0VHJ5Q2F0Y2hKdWRnbWVudFRyeUZpbmFsbHlKdWRnbWVudHZpc2l0VHJ5RmluYWxseUp1ZGdtZW50Y3JlYXRlVG9wTGV2ZWxUeXBlSW5mZXJyZXJTaGFkb3dUeXBlSW5mZXJyZXJwcml2YXRlZW5naW5lZ2V0RmllbGRJbml0aWFsaXplcnR5cGVOZWVkZWRrZXJuZWxJbml0aWFsaXplcmluZmVyU3RhdGVtZW50VHlwZUxpdGVyYWxKdWRnbWVudHZpc2l0VHlwZUxpdGVyYWxKdWRnbWVudFNoYWRvd1R5cGVQcm9tb3RlcmdldFZhcmlhYmxlRnVuY3Rpb25OZXN0aW5nTGV2ZWxfZnVuY3Rpb25OZXN0aW5nTGV2ZWxpc1Byb21vdGlvbkNhbmRpZGF0ZWtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb25faXNMb2NhbEZ1bmN0aW9uc2FtZUV4cHJlc3Npb25zc2V0VmFyaWFibGVNdXRhdGVkQW55d2hlcmVfbXV0YXRlZEFueXdoZXJlc2V0VmFyaWFibGVNdXRhdGVkSW5DbG9zdXJlX211dGF0ZWRJbkNsb3N1cmV3YXNWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZVZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50dmlzaXRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudF9pbXBsaWNpdGx5VHlwZWRmb3JFZmZlY3Rpbml0aWFsaXplckp1ZGdtZW50dmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnRpc0ltcGxpY2l0bHlUeXBlZFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uSnVkZ21lbnR2aXNpdFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uSnVkZ21lbnRVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnR2aXNpdFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudFZhcmlhYmxlR2V0SnVkZ21lbnRfZmFjdF9zY29wZXZpc2l0VmFyaWFibGVHZXRKdWRnbWVudFdoaWxlSnVkZ21lbnR2aXNpdFdoaWxlSnVkZ21lbnRZaWVsZEp1ZGdtZW50dmlzaXRZaWVsZEp1ZGdtZW50TG9hZExpYnJhcnlKdWRnbWVudHZpc2l0TG9hZExpYnJhcnlKdWRnbWVudExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50dmlzaXRMb2FkTGlicmFyeVRlYXJPZmZKdWRnbWVudF9Db21wbGV4QXNzaWdubWVudEluZmVyZW5jZVJlc3VsdF9VbmZpbmlzaGVkQ2FzY2FkZXdyYXBJbGxlZ2FsQXNzaWdubWVudHdyYXBJbmRleEFzc2lnbm1lbnR3cmFwUHJvcGVydHlBc3NpZ25tZW50d3JhcFN0YXRpY0Fzc2lnbm1lbnR3cmFwVmFyaWFibGVBc3NpZ25tZW50SW5mZXJlbmNlVmlzaXRvcm1hcEVudHJ5Q2xhc3NtYXBFbnRyeU9mZnNldG1hcFNwcmVhZE9mZnNldGl0ZXJhYmxlU3ByZWFkT2Zmc2V0aXRlcmFibGVTcHJlYWRUeXBlaXNFbXB0eUNvbnRleHR3cmFwRnV0dXJlT3JUeXBlc3RvcmVJbmZlcnJlZFR5cGViZWluZ0luZmVycmVkdG9CZUluZmVycmVkaW5mZXJJbml0aWFsaXppbmdGb3JtYWxoYXNFeHBsaWNpdFR5cGVBcmd1bWVudHNpbmZlcmVuY2VSZXN1bHRpbmZlckludm9jYXRpb25oYWRFeHBsaWNpdFR5cGVBcmd1bWVudHNpbml0aWFsaXplclR5cGVoYW5kbGVGb3JJbkRlY2xhcmluZ1ZhcmlhYmxldHlwZUNoZWNrc05lZWRlZGluZmVyRm9ySW5JdGVyYWJsZXRlbXBWYXJ2YXJpYWJsZUdldGltcGxpY2l0RG93bmNhc3R3cmFwVHlwZWluZmVycmVkRXhwcmVzc2lvblR5cGVyZXNvbHZlVHlwZVBhcmFtZXRlcmhhbmRsZUZvckluV2l0aG91dFZhcmlhYmxlc3ludGhldGljV3JpdGVUeXBld3JpdGVNZW1iZXJnZXRTZXR0ZXJUeXBlaGFuZGxlRm9ySW5TdGF0ZW1lbnRXaXRob3V0VmFyaWFibGV1cGRhdGV2aXNpdEZ1bmN0aW9uTm9kZUp1ZGdtZW50cmV0dXJuQ29udGV4dHJldHVyblR5cGVJbnN0cnVtZW50YXRpb25PZmZzZXRpbmZlckxvY2FsRnVuY3Rpb25pbmZlck1ldGFkYXRhS2VlcGluZ0hlbHBlcnNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2VsaHNUeXBlY2FsbGVlVHlwZWV4cGVjdGVkSW5kZXhUeXBlRm9yV3JpdGVpbmRleENvbnRleHRpbmRleFR5cGVyZWFkTWVtYmVyY2FsbGVlRnVuY3Rpb25UeXBlZGVzdWdhcmVkSW52b2NhdGlvbnJlcGxhY2VkUmVhZGlzRG91YmxlQ29udGV4dGdldFNwcmVhZEVsZW1lbnRUeXBlc3ByZWFkVHlwZWluZmVyRWxlbWVudGluZmVycmVkVHlwZUFyZ3VtZW50aW5mZXJyZWRTcHJlYWRUeXBlc2luZmVyZW5jZU5lZWRlZHNwcmVhZEVsZW1lbnRUeXBlaXNBc3NpZ25hYmxlY29uZGl0aW9uVHlwZXRoZW5UeXBlb3RoZXJ3aXNlVHlwZWNoZWNrRWxlbWVudGxpc3RUeXBlZm9ybWFsVHlwZXNhY3R1YWxUeXBlc2luZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBldHlwZUFyZ3NzdG9yZVNwcmVhZE1hcEVudHJ5RWxlbWVudFR5cGVzc3ByZWFkTWFwRW50cnlUeXBlaW5mZXJNYXBFbnRyeWluZmVycmVkS2V5VHlwZWluZmVycmVkVmFsdWVUeXBlc3ByZWFkQ29udGV4dGFjdHVhbFR5cGVzRm9yU2V0YWN0dWFsS2V5VHlwZWFjdHVhbFZhbHVlVHlwZWFjdHVhbEVsZW1lbnRUeXBla2V5RXJyb3J2YWx1ZUVycm9yZW50cnlUeXBlaXNNYXBpc0l0ZXJhYmxlYWN0dWFsVHlwZUZvclNldGxlbmd0aEZvclNldGNoZWNrTWFwRW50cnljYWNoZWRLZXljYWNoZWRWYWx1ZW1hcFR5cGV0eXBlQ29udGV4dElzTWFwdHlwZUNvbnRleHRJc0l0ZXJhYmxlc2V0TGl0ZXJhbGNhY2hlZEtleXNjYWNoZWRWYWx1ZXNoYXNNYXBFbnRyeWhhc01hcFNwcmVhZGhhc0l0ZXJhYmxlU3ByZWFkc3ByZWFkVHlwZUNvbnRleHRjYW5CZVNldGNhbkJlTWFwc2V0RWxlbWVudHNmb3JtYWxUeXBlc0ZvclNldHNldFR5cGVpbmZlcnJlZFR5cGVzRm9yU2V0aW5mZXJNZXRob2RJbnZvY2F0aW9ucmVjZWl2ZXJWYXJpYWJsZWluZmVyUHJvcGVydHlHZXRkZXN1Z2FyZWRHZXR2YXJpYWJsZVR5cGVmaW5kUHJvcGVydHlHZXRNZW1iZXJoYW5kbGVQcm9wZXJ0eUdldENvbnRyYXZhcmlhbmNlY2xhc3NUeXBlUGFyYW1ldGVyc2Nsb3N1cmVDb250ZXh0aXNHZW5lcmF0b3JyZXR1cm5PcllpZWxkQ29udGV4dGhhbmRsZVJldHVybmluc3RhbnRpYXRlVGVhck9mZmludGVyZmFjZU1lbWJlcm1ldGhvZE5hbWVwcm9wZXJ0eU5hbWVleHByZXNzaW9uVHlwZWNhc2VFeHByZXNzaW9uY2FzZUV4cHJlc3Npb25UeXBldmlzaXRDYXRjaEp1ZGdtZW50Y2F0Y2hfZGVjbGFyZWRUeXBlaW5mZXJEZWNsYXJhdGlvblR5cGVyZXBsYWNlZEluaXRpYWxpemVybXV0YXRlZEluQ2xvc3VyZWRlY2xhcmVkT3JJbmZlcnJlZFR5cGVjb21wdXRlUHJvbW90ZWRUeXBlaGFuZGxlWWllbGRJbmZlcnJlZFR5cGVWaXNpdG9yZ2V0SW5mZXJyZWRUeXBlcmVhZEluZmVycmVkVHlwZWludmFsaWRUb0JvdHRvbWludmFsaWRUb1RvcGNvbXB1dGVDb25zdHJ1Y3RvclJldHVyblR5cGVnZXRFeHBsaWNpdFR5cGVBcmd1bWVudHNjaGVja1dlYkludExpdGVyYWxzRXJyb3JJZlVuZXhhY3Rhc0ludG5lYXJlc3QweDBYZmFzdGEuYnVpbGRlcklkZW50aWZpZXJkZXByZWNhdGVkX2V4dHJhY3RUb2tlbk1vZGlmaWVyQnVpbGRlcmZyb250X2VuZC5zdW1tYXJ5X2dlbmVyYXRvcnN1bW1hcnlGb3J0cnVuY2F0ZWZhc3RhLnNjYW5uZXIua2V5d29yZHNfS0VZV09SRF9TVEFURUtFWVdPUkRfU1RBVEVjb21wdXRlS2V5d29yZFN0YXRlVGFibGVpc0xvd2VyY2FzZWNodW5rY2h1bmtTdGFydGlzTGVhZkFycmF5S2V5d29yZFN0YXRlZm9vOyBMb3dlckNhc2VBcnJheUtleXdvcmRTdGF0ZVVwcGVyQ2FzZUFycmF5S2V5d29yZFN0YXRlTGVhZktleXdvcmRTdGF0ZURlY2xhcmF0aW9uQnVpbGRlcmZhc3RhLmNvbnN0YW50X2NvbnRleHRmYXN0YS5tb2RpZmllck1vZGlmaWVyRW51bU1vZGlmaWVyRW51bS5BYnN0cmFjdE1vZGlmaWVyRW51bS5Db25zdE1vZGlmaWVyRW51bS5Db3ZhcmlhbnRNb2RpZmllckVudW0uRXh0ZXJuYWxNb2RpZmllckVudW0uRmluYWxNb2RpZmllckVudW0uU3RhdGljTW9kaWZpZXJFbnVtLlZhckFic3RyYWN0Q29uc3RDb3ZhcmlhbnRFeHRlcm5hbEZpbmFsU3RhdGljVmFybWFza01vZGlmaWVyLmZyb21TdHJpbmdtb2RpZmllcihNb2RpZmllckVudW0udmFsaWRhdGVWYXJGaW5hbE9yQ29uc3RNb2RpZmllci52YWxpZGF0ZVZhckZpbmFsT3JDb25zdHJlcXVpcmVkTWFza3Zhck1hc2tmcm9udF9lbmQuc3JjLmZhc3RhLm5hbWVzYW1wZXJzYW5kTmFtZWJhck5hbWVjYXJldE5hbWVkaXZpc2lvbk5hbWVkb3VibGVBbXBlcnNhbmROYW1lZG91YmxlQmFyTmFtZWRvdWJsZVF1ZXN0aW9uTmFtZWVxdWFsc05hbWVncmVhdGVyVGhhbk5hbWVncmVhdGVyVGhhbk9yRXF1YWxzTmFtZWlkZW50aWNhbE5hbWVsZWZ0U2hpZnROYW1lbGVuZ3RoTmFtZWxlc3NUaGFuTmFtZWxlc3NUaGFuT3JFcXVhbHNOYW1lbXVsdGlwbHlOYW1lbXVzdGFjaGVOYW1lbmVnYXRpb25OYW1lbm9TdWNoTWV0aG9kTmFtZXBlcmNlbnROYW1lcmlnaHRTaGlmdE5hbWV0cmlwbGVTaGlmdE5hbWV0aWxkZU5hbWV1bmFyeU1pbnVzTmFtZWZhc3RhLnBhcnNlckxpc3RlbmVyUGFyc2VyRXJyb3JDbGFzc0tpbmRUb3BMZXZlbFBhcnNlckVycm9yQ29sbGVjdGluZ0xpc3RlbmVycmVjb3ZlcmFibGVFcnJvcnNmYXN0YS5xdW90ZVF1b3RlLlNpbmdsZVF1b3RlLkRvdWJsZVF1b3RlLk11bHRpTGluZVNpbmdsZVF1b3RlLk11bHRpTGluZURvdWJsZVF1b3RlLlJhd1NpbmdsZVF1b3RlLlJhd0RvdWJsZVF1b3RlLlJhd011bHRpTGluZVNpbmdsZVF1b3RlLlJhd011bHRpTGluZURvdWJsZVNpbmdsZURvdWJsZU11bHRpTGluZVNpbmdsZU11bHRpTGluZURvdWJsZVJhd1NpbmdsZVJhd0RvdWJsZVJhd011bHRpTGluZVNpbmdsZVJhd011bHRpTGluZURvdWJsZVVuZXNjYXBlRXJyb3JMaXN0ZW5lcmhhbmRsZVVuZXNjYXBlRXJyb3JsZW5ndGhPZk9wdGlvbmFsV2hpdGVzcGFjZVByZWZpeGZpcnN0UXVvdGVMZW5ndGhsYXN0UXVvdGVMZW5ndGhpc0xhc3RRdW90ZVN5bnRoZXRpY3VuZXNjYXBlQ29kZVVuaXRzcmVzdWx0T2Zmc2V0ZGlnaXRmYXN0YS5zY29wZV9saXN0ZW5lclN0YWNrTGlzdGVuZXJCcmVha0NvbnRpbnVlR290b0pjcmVhdGVCcmVha1RhcmdldGNyZWF0ZUNvbnRpbnVlVGFyZ2V0TnVsbFZhbHVlLkJyZWFrVGFyZ2V0TnVsbFZhbHVlLkNvbnRpbnVlVGFyZ2V0YmVnaW5CbG9ja0Z1bmN0aW9uQm9keWJsb2NrIGZ1bmN0aW9uIGJvZHliZWdpbkZvclN0YXRlbWVudGZvciBzdGF0ZW1lbnRiZWdpbkZvckNvbnRyb2xGbG93Zm9yIGluIGEgY29sbGVjdGlvbmJlZ2luQmxvY2tiZWdpbkRvV2hpbGVTdGF0ZW1lbnRiZWdpbldoaWxlU3RhdGVtZW50YmVnaW5Eb1doaWxlU3RhdGVtZW50Qm9keWRvLXdoaWxlIHN0YXRlbWVudCBib2R5ZW5kRG9XaGlsZVN0YXRlbWVudEJvZHliZWdpbldoaWxlU3RhdGVtZW50Qm9keXdoaWxlIHN0YXRlbWVudCBib2R5ZW5kV2hpbGVTdGF0ZW1lbnRCb2R5YmVnaW5Gb3JTdGF0ZW1lbnRCb2R5Zm9yIHN0YXRlbWVudCBib2R5ZW5kRm9yU3RhdGVtZW50Qm9keWJlZ2luRm9ySW5Cb2R5Zm9yLWluIGJvZHllbmRGb3JJbkJvZHliZWdpbkVsc2VTdGF0ZW1lbnRlbmRFbHNlU3RhdGVtZW50VmFsdWVLaW5kQXJndW1lbnRzT3JOdWxsSWRlbnRpZmllck9yTnVsbEludGVnZXJGb3JtYWxzRm9ybWFsc09yTnVsbE51bGxWYWx1ZS5Gb3JtYWxQYXJhbWV0ZXJzTWV0aG9kQm9keU1vZGlmaWVyc01vZGlmaWVyc09yTnVsbE51bGxWYWx1ZS5Nb2RpZmllcnNOYW1lT3JOdWxsTnVsbFZhbHVlLk5hbWVOYW1lT3JPcGVyYXRvck5hbWVPclF1YWxpZmllZE5hbWVPck9wZXJhdG9yTmFtZU9yUGFyc2VyUmVjb3ZlcnlNZXRhZGF0YUxpc3RPck51bGxUb2tlbk9yTnVsbE51bGxWYWx1ZS5Ub2tlblR5cGVBcmd1bWVudHNPck51bGxUeXBlQnVpbGRlck9yTnVsbFR5cGVWYXJpYWJsZUxpc3RPck51bGxfU2luZ2xlVmFsdWVLaW5kbnVsbFZhbHVlIG9yIF9VbmlvblZhbHVlS2luZGtpbmRzb3JyZXBlYXRlZEtpbmRzdW5pb25PZktpbmRzaGFzQW55VHlwZVZhcmlhYmxlc1R5cGVDb25zdHJhaW50R2F0aGVyZXJnZXROYW1lZFBhcmFtZXRlclR5cGVUeXBlVmFyaWFibGVFbGltaW5hdG9yQ2xvc3VyZUNvbnRleHRkZWNsYXJlZFJldHVyblR5cGVfbmVlZFRvSW5mZXJSZXR1cm5UeXBlX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGVpc0Fycm93cmV0dXJuU3RhdGVtZW50c3JldHVybkV4cHJlc3Npb25UeXBlc25lZWRUb0luZmVyUmV0dXJuVHlwZWdldFR5cGVBcmd1bWVudE9mY2hlY2tWYWxpZFJldHVybmZsYXR0ZW5lZFJldHVyblR5cGVmbGF0dGVuZWRFeHByZXNzaW9uVHlwZWlzUmV0dXJuRnJvbUFzeW5jdW53cmFwcGVkVHlwZV93cmFwQXN5bmNPckdlbmVyYXRvcmdldERlcml2ZWRUeXBlQXJndW1lbnRPZmluZmVyUmV0dXJuVHlwZXdyYXBGdXR1cmVUeXBlTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmRNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5ub25lTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQuY2hlY2tNZXRob2RSZXR1cm5NZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5jaGVja0dldHRlclJldHVybmNoZWNrTWV0aG9kUmV0dXJuY2hlY2tHZXR0ZXJSZXR1cm51bmtub3duRnVuY3Rpb25pbmZlcnJlZFR5cGVzTWFwbGFzdEluZmVycmVkU3Vic3RpdHV0aW9ubGFzdENhbGxlZVR5cGVhY3R1YWxUeXBlaW5pdGlhbEV4cGVjdGVkVHlwZXVuZnV0dXJlZEV4cGVjdGVkVHlwZWZ1dHVyZWRFeHBlY3RlZFR5cGVjYWxsTWVtYmVyX3Nob3VsZFRlYXJPZmZDYWxsbnVsbENoZWNrdGVhck9mZmNvbmRpdGlvbmFsZXJyb3JOb2RlX2dldFByZWNpc2VUeXBlRXJyb3JUZW1wbGF0ZXR5cGVDaGVja2ZpbmRJbnRlcmZhY2VNZW1iZXJlcnJvclRlbXBsYXRlX2dldEludGVyZmFjZU1lbWJlcm1ldGhvZEludm9jYXRpb25zaWduYXR1cmVwcm9wZXJ0eUdldHByb3BlcnR5U2V0Zm9sbG93Q2FsbGNhbGxUeXBlbWVtYmVyQ2xhc3N0eXBlQXNJbnN0YW5jZU9mQ2xhc3NnZXRSZWFsVGFyZ2V0c2V0dGVyUGFyYW1ldGVyc2V4cHJlc3Npb25Ub1JlcGxhY2VjaGVja1JldHVybnJlcGxhY2VkRXhwcmVzc2lvbmNhbGxlZVR5cGVQYXJhbWV0ZXJzZXhwbGljaXRUeXBlQXJndW1lbnRzX2ZvckVhY2hBcmd1bWVudGluZmVycmVkRm9ybWFsVHlwZXNlZW5OYW1lc25hbWVkVHlwZUluZGV4dW5pcXVlTmFtZWRwcmV2TmFtZWRFeHByZXNzaW9ubnVtUG9zaXRpb25hbEFyZ3Nmb3JtYWxUeXBlc0Zyb21Db250ZXh0bmVlZFRvU2V0UmV0dXJuVHlwZW9sZENsb3N1cmVDb250ZXh0aW5mZXJyZWRSZXR1cm5UeXBlcGFyZW50c2FjdHVhbFJlY2VpdmVyVHlwZWFjdHVhbE1ldGhvZE5hbWV0ZWFyb2ZmVHlwZWluc3RhbnRpYXRlZFR5cGVyZXR1cm5lZFR5cGVQYXJhbWV0ZXJzT2NjdXJOb25Db3ZhcmlhbnRseWNoZWNrZXJpbml0aWFsVmFyaWFuY2VWYXJpYW5jZS5jb3ZhcmlhbnRyZXNvbHZlT25lU3RlcHJlc29sdmVkc3RlcDFzdGVwMnR5cGVXaXRob3V0RnV0dXJlT3JuYW1lZEV4cHJlc3Npb25nZXRDb21iaW5lZE1lbWJlclNpZ25hdHVyZUtlcm5lbGdhdGhlcmVycmVwb3J0UHJvYmxlbWdlbmVyYXRlQ29uc3RyYWludHNtaXhpbkNsYXNzYmFzZVR5cGVtaXhpblN1cGVydHlwZW1peGluU3VwZXJjbGFzc0NvbXBpbGVyLWdlbmVyYXRlZCBtaXhpbiBhcHBsaWNhdGlvbnMgaGF2ZSBhIG1peGluIG9yIGVsc2UgaW1wbGVtZW50IGV4YWN0bHkgb25lIHR5cGUgaW1wbGVtZW50cyBzMHMxdTB0cnlTdWJ0eXBlTWF0Y2hjb21wdXRlQ29uc3RyYWludHNjb25zdHJhaW50ZXhhY3RnZXROYW1lZEZvcm1hbGdldFBvc2l0aW9uYWxGb3JtYWxpc092ZXJsb2FkYWJsZUFyaXRobWV0aWNPcGVyYXRvcmRpc2FibGVkbXV0YXRlVmFyaWFibGVUeXBlUHJvbW90ZXJEaXNhYmxlZF9udWxsRmFjdHNfZmFjdENhY2hlX2ZhY3RDYWNoZVN0YXRlX2N1cnJlbnRGYWN0c19wcm9tb3Rpb25FeHByZXNzaW9uX3RydWVGYWN0c0ZvclByb21vdGlvbkV4cHJlc3Npb25fY3VycmVudFNjb3BlX2xhc3RGYWN0U2VxdWVuY2VOdW1iZXJfY29tcHV0ZVByb21vdGVkVHlwZWFmdGVyVHJ1ZWJlZm9yZUVsc2V0cnVlRmFjdHNfZmFjdHNXaGVuVHJ1ZWZhbHNlRmFjdHNfZmFjdHNXaGVuRmFsc2Vpc0FuZF9lbmNsb3NpbmdfbWVyZ2VGYWN0c19yZWNvcmRQcm9tb3Rpb25FeHByZXNzaW9uc2hvcnRjdXRGYWN0c19jb21wdXRlQ3VycmVudEZhY3RNYXBpc0NoZWNrY29tbW9uQW5jZXN0b3JzZXF1ZW5jZU51bWJlcnByZXZpb3VzRm9yVmFyaWFibGVuZXdTdGF0ZWN1cnJlbnRseUNhY2hlZF9wcmludEV2ZW50ZmFjdENoYWluKG51bGwpIC0+ICAgX3Byb21vdGlvbkV4cHJlc3Npb246ICAgICBpZiB0cnVlOiBpZlRydWVpZkZhbHNlX211dGF0ZWRJblNjb3Blc19hY2Nlc3NlZEluQ2xvc3VyZUluU2NvcGVzcHJvbW90ZXJfcmVjb3JkQWNjZXNzZWRJblNjb3BlX3JlY29yZE11dGF0ZWRJblNjb3BlX2RlcHRoX3RvcExldmVsY29udGFpbnNTY29wZV9Db25kaXRpb25hbFNjb3BlZW5jbG9zaW5nX0lzQ2hlY2tjaGVja2VkVHlwZWlzQ2hlY2socHJldmlvdXNQcm9tb3RlZFR5cGVhc3NpZ25tZW50U2NvcGVhY2Nlc3NTY29wZXByZXZpb3VzVHlwZV9Mb2dpY2FsU2NvcGVfTnVsbEZhY3RUcmllZCB0byBjcmVhdGUgcHJvbW90ZWQgdHlwZSBmb3Igbm8gdmFyaWFibGVfVG9wTGV2ZWxTY29wZWZhc3RhLmNvbGxlY3Rpb25zQ29udHJvbEZsb3dFbGVtZW50X1NwcmVhZEVsZW1lbnQmRXhwcmVzc2lvbiZDb250cm9sRmxvd0VsZW1lbnRfSWZFbGVtZW50JkV4cHJlc3Npb24mQ29udHJvbEZsb3dFbGVtZW50X0ZvckVsZW1lbnQmRXhwcmVzc2lvbiZDb250cm9sRmxvd0VsZW1lbnRfRm9ySW5FbGVtZW50JkV4cHJlc3Npb24mQ29udHJvbEZsb3dFbGVtZW50Q29udHJvbEZsb3dNYXBFbnRyeS5rZXkgZ2V0dGVyZXhwckNvbnRyb2xGbG93TWFwRW50cnkua2V5IHNldHRlckNvbnRyb2xGbG93TWFwRW50cnkudmFsdWUgZ2V0dGVyQ29udHJvbEZsb3dNYXBFbnRyeS52YWx1ZSBzZXR0ZXJfU3ByZWFkTWFwRW50cnkmVHJlZU5vZGUmQ29udHJvbEZsb3dNYXBFbnRyeV9JZk1hcEVudHJ5JlRyZWVOb2RlJkNvbnRyb2xGbG93TWFwRW50cnlfRm9yTWFwRW50cnkmVHJlZU5vZGUmQ29udHJvbEZsb3dNYXBFbnRyeV9Gb3JJbk1hcEVudHJ5JlRyZWVOb2RlJkNvbnRyb2xGbG93TWFwRW50cnlmYXN0YS5jb25zdG5lc3NleHBsaWNpdENvbnN0ZXhwbGljaXROZXdpbXBsaWNpdGZhc3RhLmV4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlcl9mb3Jlc3RfcGxhaW5OYW1lRm9yUmVhZF9kZWJ1Z05hbWVfdXJpX2ZpbmlzaF9tYWtlU2ltcGxlUmVhZF9tYWtlUmVhZGNvbXBsZXhBc3NpZ25tZW50c3RhcnRDb21wbGV4QXNzaWdubWVudF9tYWtlU2ltcGxlV3JpdGVfbWFrZVdyaXRlYnVpbGROdWxsQXdhcmVBc3NpZ25tZW50YnVpbGRDb21wb3VuZEFzc2lnbm1lbnRiaW5hcnlPcGVyYXRvcmJ1aWxkUG9zdGZpeEluY3JlbWVudHZhbHVlQWNjZXNzZHVtbXlfbWFrZUludmFsaWRSZWFkX21ha2VJbnZhbGlkV3JpdGVvcGVyYXRvck9mZnNldChvZmZzZXQ6ICwgdmFyaWFibGU6ICwgcHJvbW90ZWRUeXBlOiBfcmVjZWl2ZXJWYXJpYWJsZXJlY2VpdmVyQWNjZXNzLCBfcmVjZWl2ZXJWYXJpYWJsZTogLCByZWNlaXZlcjogLCBuYW1lOiAsIGdldHRlcjogLCBzZXR0ZXI6IG1ha2VOdWxsQXdhcmVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcnJlY2VpdmVyRXhwcmVzc2lvbmtlcm5lbFByb3BlcnR5QXNzaWduLCByZWNlaXZlckV4cHJlc3Npb246ICwgdHlwZTogU3VwZXJQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcmluZGV4VmFyaWFibGVpbmRleEFjY2Vzc19tYWtlV3JpdGVBbmRSZXR1cm52YWx1ZVZhcmlhYmxlLCBpbmRleDogLCByZWNlaXZlclZhcmlhYmxlOiAsIGluZGV4VmFyaWFibGU6IFRoaXNJbmRleGVkQWNjZXNzR2VuZXJhdG9yd3JpdGVUYXJnZXRmcm9tQnVpbGRlcmJ1aWxkZXJTZXR0ZXJTdGF0aWNBY2Nlc3NHZW5lcmF0b3IuZnJvbUJ1aWxkZXIsIHJlYWRUYXJnZXQ6ICwgd3JpdGVUYXJnZXQ6IGxvYWRMaWJyYXJ5aW1wb3J0RGVwZW5kZW5jeWNyZWF0ZVRlYXJvZmZNZXRob2RjcmVhdGVMb2FkTGlicmFyeSwgYnVpbGRlcjogRGVmZXJyZWRBY2Nlc3NHZW5lcmF0b3JwcmVmaXhHZW5lcmF0b3JzdWZmaXhHZW5lcmF0b3Jwcm9wZXJ0eUFjY2Vzc2RlZmVycmVkQWNjZXNzb3IucGxhaW5OYW1lRm9yUmVhZCwgcHJlZml4R2VuZXJhdG9yOiAsIHN1ZmZpeEdlbmVyYXRvcjogcGxhaW5OYW1lRm9yUmVhZHR5cGVWYXJpYWJsZXNDb3VudGFyZ3VtZW50QnVpbGRlcnMsIGRlY2xhcmF0aW9uOiAsIHBsYWluTmFtZUZvclJlYWQ6IGNyZWF0ZVR5cGVMaXRlcmFsLCBleHByZXNzaW9uOiAsIHZhbHVlOiBFcnJvbmVvdXNFeHByZXNzaW9uR2VuZXJhdG9yYnVpbGRFcnJvcl9idWlsZFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRDb250ZXh0QXdhcmVHZW5lcmF0b3JtYWtlSW52YWxpZFJlYWRoYW5kbGVBc3NpZ25tZW50LCBhc3NpZ25tZW50T3BlcmF0b3I6ICwgYmluYXJ5T3BlcmF0b3I6ICwgaW50ZXJmYWNlVGFyZ2V0OiAnICE9ICwgcHJlZml4OiAsIGRlZmVycmVkOiBVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yI3BhcnNlci1lcnJvcmlzSW5pdGlhbGl6ZXIucGxhaW5OYW1lRm9yUmVhZGJ1aWxkRmllbGRJbml0aWFsaXplckVycm9yYnVpbGRDb25zdHJ1Y3RvckluaXRpYWxpemVyYnVpbGRBc3NpZ25tZW50RXJyb3IsIGlzSW5pdGlhbGl6ZXI6ICwgaW5GaWVsZEluaXRpYWxpemVyOiAsIGlzU3VwZXI6IF9JbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3ImRXJyb25lb3VzRXhwcmVzc2lvbkdlbmVyYXRvciZJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciwgbWVzc2FnZTogX1NlbmRBY2Nlc3NHZW5lcmF0b3ImR2VuZXJhdG9yJkluY29tcGxldGVTZW5kR2VuZXJhdG9yLCBhcmd1bWVudHM6IF9JbmNvbXBsZXRlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3ImR2VuZXJhdG9yJkluY29tcGxldGVTZW5kR2VuZXJhdG9ybWFrZUJpbmFyeW1ha2VPclJldXNlVmFyaWFibGVhZGp1c3RGb3JJbXBsaWNpdENhbGxpc0ZpZWxkT3JHZXR0ZXJmYXN0YS5leHByZXNzaW9uX2dlbmVyYXRvcl9oZWxwZXJmYXN0YS5mYW5nb3JuY29uZGl0aW9uQm91bmRhcnljb25kaXRpb25MYXN0VG9rZW5uZXh0VG9rZW5kZWNsYXJhdGlvbnNleGNlcHRpb25QYXJhbWV0ZXJzdGFja1RyYWNlUGFyYW1ldGVyc3RhY2tUcmFjZVR5cGV1cGRhdGVyc3JpZ2h0UGFyZW50aGVzaXNpZktleXdvcmR0aGVuU3RhdGVtZW50ZWxzZUtleXdvcmRlbHNlU3RhdGVtZW50bm90T3BlcmF0b3JsZWZ0T3BlcmFuZHJpZ2h0T3BlcmFuZHJldGhyb3dLZXl3b3JkcmV0dXJuS2V5d29yZHRocm93S2V5d29yZG9jYXRjaENsYXVzZXN5aWVsZEtleXdvcmRzdGFyc3ludGhfVmFyaWFibGVzRGVjbGFyYXRpb25mYXN0YS5pbXBsaWNpdF90eXBlX2FyZ3VtZW50VHlwZVZhcmlhYmxlc0dyYXBodmFyaWFibGVJbmRpY2VzY29sbGVjdFJlZmVyZW5jZXNGcm9tVHlwZVZhcmlhYmxlU2VhcmNoYW55VHlwZVZhcmlhYmxlc3N1YnN0aXR1dGVSYW5nZXVwcGVyU3Vic3RpdHV0aW9ubG93ZXJTdWJzdGl0dXRpb25zdWJzdGl0dXRlZEFyZ3VtZW50Y2hhbmdlZGR5bmFtaWNTdWJzdGl0dXRpb25udWxsU3Vic3RpdHV0aW9udmFyaWFibGVJbmRleGZpbmRWYXJpYWJsZVVzZXNJblR5cGV1c2VzZGVwZW5kZW50VmFyaWFibGVmaW5kSW5ib3VuZFJlZmVyZW5jZXN2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXNkZXBlbmRlbnRkZXBlbmRlbmNlZmluZFJhd1R5cGVzV2l0aEluYm91bmRSZWZlcmVuY2VzdHlwZXNBbmREZXBlbmRlbmNpZXNoYXNJbmJvdW5kZ2V0SW5ib3VuZFJlZmVyZW5jZUlzc3Vlc3Jhd1R5cGVzQW5kTXV0dWFsRGVwZW5kZW5jaWVzZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb252aXNpdGVkZGVwZW5kZW5jeVBhdGhmaW5kUmF3VHlwZUN5Y2xlc2N5Y2xlc2NvbnZlcnRSYXdUeXBlQ3ljbGVzSW50b0lzc3Vlc2N5Y2xlZmlyc3RFbmNvdW50ZXJlZFR5cGVjeWNsZXNUb1JlcG9ydGRlY2xhcmF0aW9uUGF0aEFuZE5hbWVsZXhNaW5QYXRoQW5kTmFtZXBhdGhBbmROYW1lcmF3VHlwZUN5Y2xlc0FzSXNzdWVzYnJlYWtDeWNsZXNmYXN0YS5rZXJuZWxfYXN0X2FwaWZyb250X2VuZC5tZW1vcnlfZmlsZV9zeXN0ZW1fZmlsZXNfZGlyZWN0b3JpZXMtIF9hZGRUcmFpbGluZ1NsYXNoTWVtb3J5RmlsZVN5c3RlbUVudGl0eWNyZWF0ZURpcmVjdG9yeUVudHJ5ICBpcyBhIGZpbGUuRmlsZSAgZG9lcyBub3QgZXhpc3Qud3JpdGVBc0J5dGVzU3luY191cGRhdGUgaXMgYSBkaXJlY3RvcnkuZmFzdGEuYnVpbGRlcl9ncmFwaExpYnJhcnkgbm90IGZvdW5kOiBmYXN0YS5jb21iaW5hdG9yRGlyZWN0b3J5R1ppcENvZGVjZ1ppcENvZGVjZ3ppcHBlZEluaXRpYWxpemVkRnJvbURhdGF0ZW1wRGlyY3JlYXRlVGVtcFN5bmMuZ3pmcm9udF9lbmQuc3JjLmh5YnJpZF9maWxlX3N5c3RlbXBoeXNpY2FsX3BoeXNpY2FsSHlicmlkRmlsZVN5c3RlbUVudGl0eV9kZWxlZ2F0ZV9mc2RlbGVnYXRlZmFzdGEubGlicmFyeV9ncmFwaHVyaTFjb21waWxlci5udWxsX2FwaU51bGxCaW5hcnlTaW5rTnVsbEJpbmFyeVNpbmsoZGFydDJqcy5kaWFnbm9zdGljX2xpc3RlbmVycmVwb3J0RXJyb3JNZXNzYWdlcmVwb3J0SGludE1lc3NhZ2VkYXJ0MmpzLmRpYWdub3N0aWNzLmludmFyaWFudERFQlVHX01PREVEZWJ1ZyBtb2RlIGlzIG5vdCBlbmFibGVkOiBTcGFubmFibGUgd2FzIG51bGwgZm9yIGZhaWxlZEF0LiBVc2UgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRS5kYXJ0MmpzLmRpYWdub3N0aWNzLnNvdXJjZV9zcGFuU291cmNlU3BhbihkYXJ0MmpzLmRpYWdub3N0aWNzLnNwYW5uYWJsZV9TcGFubmFibGVTZW50aW5lbEFzc2VydGlvbiBmYWlsdXJlZGFydDJqcy5oZWxwZXJzRGVidWdQcmludERlYnVnV3JhcFByaW50UmVwb3J0SGVyZWRlYnVnTWVzc2FnZV9EZWJ1Z0luZGVudGF0aW9uREVCVUdfUFJJTlRfRU5BQkxFRF9pbmRlbnRhdGlvbl90cmFja2VkT2JqZWN0c3RyYWNrV2l0aFRyYWNlZW5hYmxlRGVidWdNb2RlZGVidWdQcmludF9kZWJ1Z1ByaW50ZGVidWdXcmFwUHJpbnRfZGVidWdXcmFwUHJpbnRzdGFydDplbmQ6ZGVidWdCcmVha3JlcG9ydEhlcmVfcmVwb3J0SGVyZUhFUkU6IHRyYWNrZG9UcmFja3ByaW50VHJhY2V0cmFjazogbGltaXR0aHJvd09uUHJpbnRpZlRyYWNrZWR0cmFja2VkOiBkYXJ0MmpzLmJhY2tlbmRfc3RyYXRlZ3lCYWNrZW5kU3RyYXRlZ3llbWl0dGVyVGFza291dHB1dFVuaXREYXRhY29kZWdlbmNyZWF0ZVNzYUJ1aWxkZXJzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5Y3JlYXRlVHlwZXNJbmZlcnJlcmZvckVhY2hDb2RlZ2VuTWVtYmVycHJlcGFyZUNvZGVnZW5SZWFkZXJkYXJ0MmpzLmNvbW1vbi5jb2RlZ2VuRW1pdHRlckNvbnN0YW50VXNlRHluYW1pY1VzZVN0YXRpY1VzZVR5cGVVc2VXb3JsZEltcGFjdFZpc2l0b3JDb2RlZ2VuSW1wYWN0cmVhZEZyb21EYXRhU291cmNld3JpdGVUb0RhdGFTaW5rQ29kZWdlbkltcGFjdC53cml0ZVRvRGF0YVNpbmt0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzY29uc3RTeW1ib2xzc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnN1c2VzSW50ZXJjZXB0b3Jhc3luY01hcmtlcnNnZW5lcmljSW5zdGFudGlhdGlvbnNuYXRpdmVCZWhhdmlvcnNvbmVTaG90SW50ZXJjZXB0b3JzX0NvZGVnZW5JbXBhY3Rjb2RlZ2VuLWltcGFjdF90eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzX2NvbnN0U3ltYm9sc19zcGVjaWFsaXplZEdldEludGVyY2VwdG9yc191c2VzSW50ZXJjZXB0b3JfYXN5bmNNYXJrZXJzX2dlbmVyaWNJbnN0YW50aWF0aW9uc19uYXRpdmVCZWhhdmlvcnNfbmF0aXZlTWV0aG9kc19vbmVTaG90SW50ZXJjZXB0b3JzZHluYW1pY1VzZXNzdGF0aWNVc2VzdHlwZVVzZXNjb25zdGFudFVzZXNyZWFkTGlzdGVtcHR5QXNOdWxscmVhZFN0cmluZ3NyZWFkQ2xhc3Nlc3JlYWRCb29sYXN5bmNNYXJrZXJzVmFsdWVyZWFkSW50T3JOdWxscmVhZE1lbWJlcnN1c2V3cml0ZVN0cmluZ3N3cml0ZUNsYXNzZXN3cml0ZUJvb2x3cml0ZUludE9yTnVsbGluc3RhbnRpYXRpb25iZWhhdmlvcndyaXRlTWVtYmVyc2FwcGx5dmlzaXRTdGF0aWNVc2V2aXNpdER5bmFtaWNVc2V2aXNpdFR5cGVVc2V2aXNpdENvbnN0YW50VXNlcmVnaXN0ZXJUeXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tyZWdpc3RlckNvbnN0U3ltYm9scmVnaXN0ZXJTcGVjaWFsaXplZEdldEludGVyY2VwdG9ycmVnaXN0ZXJVc2VJbnRlcmNlcHRvcnJlZ2lzdGVyQXN5bmNNYXJrZXJyZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9ucmVnaXN0ZXJOYXRpdmVCZWhhdmlvcm5hdGl2ZUJlaGF2aW9ycmVnaXN0ZXJOYXRpdmVNZXRob2RyZWdpc3Rlck9uZVNob3RJbnRlcmNlcHRvckNvZGVnZW5JbXBhY3Q6dGl0bGUKIAogIAogdXNlc0ludGVyY2VwdG9yOiB0cnVlQ29kZWdlblJlZ2lzdHJ5X2VsZW1lbnRFbnZpcm9ubWVudF93b3JsZEltcGFjdF9leHByZXNzaW9uc0NvZGVnZW5SZWdpc3RyeSBmb3IgcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzc3JlZ2lzdGVySW5zdGFudGlhdGlvbmdldFJhd1R5cGVyZWdpc3RlclN0YXRpY1VzZXN0YXRpY1VzZXJlZ2lzdGVyRHluYW1pY1VzZWR5bmFtaWNVc2VyZWdpc3RlclR5cGVVc2V0eXBlVXNlcmVnaXN0ZXJDb25zdGFudFVzZWNvbnN0YW50VXNlcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbG9zdXJlcmVnaXN0ZXJNb2R1bGFyTmFtZXJlZ2lzdGVyTW9kdWxhckV4cHJlc3Npb25Db2RlZ2VuUmVzdWx0c2dldENvZGVnZW5SZXN1bHRzT25EZW1hbmRDb2RlZ2VuUmVzdWx0c19mdW5jdGlvbkNvbXBpbGVyRGVzZXJpYWxpemVkQ29kZWdlblJlc3VsdHNObyBjb2RlZ2VuIHJlc3VsdHMgZnJvbSBDb2RlZ2VuUmVzdWx0Y29kZWdlbi1yZXN1bHRpbXBhY3Rtb2R1bGFyTmFtZXNtb2R1bGFyRXhwcmVzc2lvbnNyZWFkSnNOb2RlT3JOdWxsd3JpdGVKc05vZGVPck51bGxhcHBseU1vZHVsYXJTdGF0ZW5hbWVyZW1pdHRlck1vZHVsYXJOYW1lS2luZC5ydGlGaWVsZHJ0aUZpZWxkSnNOYW1lTW9kdWxhck5hbWVLaW5kLnJ1bnRpbWVUeXBlTmFtZXJ1bnRpbWVUeXBlTmFtZU1vZHVsYXJOYW1lS2luZC5jbGFzc05hbWVNb2R1bGFyTmFtZUtpbmQuYWxpYXNlZFN1cGVyTWVtYmVyYWxpYXNlZFN1cGVyTWVtYmVyUHJvcGVydHlOYW1lTW9kdWxhck5hbWVLaW5kLnN0YXRpY0Nsb3N1cmVzdGF0aWNDbG9zdXJlTmFtZU1vZHVsYXJOYW1lS2luZC5tZXRob2RQcm9wZXJ0eW1ldGhvZFByb3BlcnR5TmFtZU1vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzb3BlcmF0b3JJc01vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzVHlwZW9wZXJhdG9ySXNUeXBlTW9kdWxhck5hbWVLaW5kLnN1YnN0aXR1dGlvbnN1YnN0aXR1dGlvbk5hbWVNb2R1bGFyTmFtZUtpbmQuaW5zdGFuY2VNZXRob2RpbnN0YW5jZU1ldGhvZE5hbWVNb2R1bGFyTmFtZUtpbmQuaW5zdGFuY2VGaWVsZGluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWVNb2R1bGFyTmFtZUtpbmQuaW52b2NhdGlvbmludm9jYXRpb25OYW1lTW9kdWxhck5hbWVLaW5kLmxhenlJbml0aWFsaXplcmxhenlJbml0aWFsaXplck5hbWVNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3NnbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzc01vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlZ2xvYmFsUHJvcGVydHlOYW1lRm9yVHlwZU1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXJnbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXJNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZWdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGVNb2R1bGFyTmFtZUtpbmQubmFtZUZvckdldEludGVyY2VwdG9ybmFtZUZvckdldEludGVyY2VwdG9yTW9kdWxhck5hbWVLaW5kLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3JuYW1lRm9yT25lU2hvdEludGVyY2VwdG9yTW9kdWxhck5hbWVLaW5kLmFzTmFtZWFzTmFtZU1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5cmVhZEdsb2JhbE9iamVjdEZvckxpYnJhcnl3aXRoU291cmNlSW5mb3JtYXRpb25Nb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yQ2xhc3NyZWFkR2xvYmFsT2JqZWN0Rm9yQ2xhc3NNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yVHlwZXJlYWRHbG9iYWxPYmplY3RGb3JUeXBlTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvck1lbWJlcnJlYWRHbG9iYWxPYmplY3RGb3JNZW1iZXJNb2R1bGFyRXhwcmVzc2lvbktpbmQuY29uc3RhbnRjb25zdGFudFJlZmVyZW5jZU1vZHVsYXJFeHByZXNzaW9uS2luZC5lbWJlZGRlZEdsb2JhbEFjY2Vzc2dlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3NDb2RlZ2VuUmVzdWx0KGNvZGU9PG51bGw+LGltcGFjdD1tb2R1bGFyTmFtZXM9bW9kdWxhckV4cHJlc3Npb25zPU1vZHVsYXJOYW1lS2luZHJ0aUZpZWxkYWxpYXNlZFN1cGVyTWVtYmVyc3RhdGljQ2xvc3VyZW1ldGhvZFByb3BlcnR5aW5zdGFuY2VNZXRob2RpbnN0YW5jZUZpZWxkbGF6eUluaXRpYWxpemVyTW9kdWxhck5hbWVtb2R1bGFyLW5hbWVyZWFkRW51bWRhdGFJc0NsYXNzRW50aXR5cmVhZFR5cGVWYXJpYWJsZXJlYWRTdHJpbmd3cml0ZUVudW13cml0ZUNsYXNzd3JpdGVUeXBlZGVmd3JpdGVUeXBlVmFyaWFibGV2YWx1ZSBub3Qgc2V0IGZvciBhbGxvd1JlbmFtZWNvbnRhaW5lZE5vZGVzTW9kdWxhck5hbWUoa2luZD0sIGRhdGE9LCB2YWx1ZT1fY2xvbmVNb2R1bGFyRXhwcmVzc2lvbktpbmRnbG9iYWxPYmplY3RGb3JMaWJyYXJ5Z2xvYmFsT2JqZWN0Rm9yQ2xhc3NnbG9iYWxPYmplY3RGb3JUeXBlZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyZW1iZWRkZWRHbG9iYWxBY2Nlc3NNb2R1bGFyRXhwcmVzc2lvbm1vZHVsYXItZXhwcmVzc2lvbnJlYWRDb25zdGFudHdyaXRlTGlicmFyeXdyaXRlQ29uc3RhbnRwcmVjZWRlbmNlTGV2ZWxNb2R1bGFyRXhwcmVzc2lvbihraW5kPSxkYXRhPXRvU3RydWN0dXJlZFRleHQsdmFsdWU9SnNOb2RlS2luZEpzTm9kZUtpbmQuY29tbWVudEpzTm9kZUtpbmQuYXdhaXRKc05vZGVLaW5kLnJlZ0V4cExpdGVyYWxKc05vZGVLaW5kLnByb3BlcnR5SnNOb2RlS2luZC5vYmplY3RJbml0aWFsaXplckpzTm9kZUtpbmQuYXJyYXlIb2xlSnNOb2RlS2luZC5hcnJheUluaXRpYWxpemVySnNOb2RlS2luZC5wYXJlbnRoZXNlc0pzTm9kZUtpbmQubW9kdWxhck5hbWVKc05vZGVLaW5kLmFzeW5jTmFtZUpzTm9kZUtpbmQuc3RyaW5nQmFja2VkTmFtZUpzTm9kZUtpbmQuc3RyaW5nQ29uY2F0ZW5hdGlvbkpzTm9kZUtpbmQubGl0ZXJhbE51bGxKc05vZGVLaW5kLmxpdGVyYWxOdW1iZXJKc05vZGVLaW5kLmxpdGVyYWxTdHJpbmdKc05vZGVLaW5kLmxpdGVyYWxTdHJpbmdGcm9tTmFtZUpzTm9kZUtpbmQubGl0ZXJhbEJvb2xKc05vZGVLaW5kLm1vZHVsYXJFeHByZXNzaW9uSnNOb2RlS2luZC5mdW5jdGlvbkpzTm9kZUtpbmQubmFtZWRGdW5jdGlvbkpzTm9kZUtpbmQuYWNjZXNzSnNOb2RlS2luZC5wYXJhbWV0ZXJKc05vZGVLaW5kLnZhcmlhYmxlRGVjbGFyYXRpb25Kc05vZGVLaW5kLnRoaXNFeHByZXNzaW9uSnNOb2RlS2luZC52YXJpYWJsZVVzZUpzTm9kZUtpbmQucG9zdGZpeEpzTm9kZUtpbmQucHJlZml4SnNOb2RlS2luZC5iaW5hcnlKc05vZGVLaW5kLmNhbGxFeHByZXNzaW9uSnNOb2RlS2luZC5uZXdFeHByZXNzaW9uSnNOb2RlS2luZC5jb25kaXRpb25hbEpzTm9kZUtpbmQudmFyaWFibGVJbml0aWFsaXphdGlvbkpzTm9kZUtpbmQuYXNzaWdubWVudEpzTm9kZUtpbmQudmFyaWFibGVEZWNsYXJhdGlvbkxpc3RKc05vZGVLaW5kLmxpdGVyYWxFeHByZXNzaW9uSnNOb2RlS2luZC5kYXJ0WWllbGRKc05vZGVLaW5kLmxpdGVyYWxTdGF0ZW1lbnRKc05vZGVLaW5kLmxhYmVsZWRTdGF0ZW1lbnRKc05vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb25Kc05vZGVLaW5kLnN3aXRjaERlZmF1bHRKc05vZGVLaW5kLnN3aXRjaENhc2VKc05vZGVLaW5kLnN3aXRjaFN0YXRlbWVudEpzTm9kZUtpbmQuY2F0Y2hDbGF1c2VKc05vZGVLaW5kLnRyeVN0YXRlbWVudEpzTm9kZUtpbmQudGhyb3dTdGF0ZW1lbnRKc05vZGVLaW5kLnJldHVyblN0YXRlbWVudEpzTm9kZUtpbmQuYnJlYWtTdGF0ZW1lbnRKc05vZGVLaW5kLmNvbnRpbnVlU3RhdGVtZW50SnNOb2RlS2luZC5kb1N0YXRlbWVudEpzTm9kZUtpbmQud2hpbGVTdGF0ZW1lbnRKc05vZGVLaW5kLmZvckluU3RhdGVtZW50SnNOb2RlS2luZC5mb3JTdGF0ZW1lbnRKc05vZGVLaW5kLmlmU3RhdGVtZW50SnNOb2RlS2luZC5lbXB0eVN0YXRlbWVudEpzTm9kZUtpbmQuZXhwcmVzc2lvblN0YXRlbWVudEpzTm9kZUtpbmQuYmxvY2tKc05vZGVLaW5kLnByb2dyYW1yZWdFeHBMaXRlcmFsb2JqZWN0SW5pdGlhbGl6ZXJhcnJheUhvbGVhcnJheUluaXRpYWxpemVycGFyZW50aGVzZXNtb2R1bGFyTmFtZWFzeW5jTmFtZXN0cmluZ0JhY2tlZE5hbWVzdHJpbmdDb25jYXRlbmF0aW9ubGl0ZXJhbE51bGxsaXRlcmFsTnVtYmVybGl0ZXJhbFN0cmluZ2xpdGVyYWxTdHJpbmdGcm9tTmFtZWxpdGVyYWxCb29sbW9kdWxhckV4cHJlc3Npb25uYW1lZEZ1bmN0aW9uYWNjZXNzdmFyaWFibGVEZWNsYXJhdGlvbnRoaXNFeHByZXNzaW9udmFyaWFibGVVc2Vwb3N0Zml4Y2FsbEV4cHJlc3Npb25uZXdFeHByZXNzaW9udmFyaWFibGVJbml0aWFsaXphdGlvbmFzc2lnbm1lbnR2YXJpYWJsZURlY2xhcmF0aW9uTGlzdGxpdGVyYWxFeHByZXNzaW9uZGFydFlpZWxkbGl0ZXJhbFN0YXRlbWVudGxhYmVsZWRTdGF0ZW1lbnRmdW5jdGlvbkRlY2xhcmF0aW9uc3dpdGNoRGVmYXVsdHN3aXRjaFN0YXRlbWVudGNhdGNoQ2xhdXNldGhyb3dTdGF0ZW1lbnRyZXR1cm5TdGF0ZW1lbnRicmVha1N0YXRlbWVudGNvbnRpbnVlU3RhdGVtZW50ZG9TdGF0ZW1lbnR3aGlsZVN0YXRlbWVudGZvckluU3RhdGVtZW50Zm9yU3RhdGVtZW50aWZTdGF0ZW1lbnRlbXB0eVN0YXRlbWVudGV4cHJlc3Npb25TdGF0ZW1lbnRwcm9ncmFtSnNOb2RlVGFnc2pzLW5vZGVqcy1jb21tZW50anMtYXdhaXRqcy1yZWdFeHBMaXRlcmFsanMtcHJvcGVydHlqcy1vYmplY3RJbml0aWFsaXplcmpzLWFycmF5SG9sZWpzLWFycmF5SW5pdGlhbGl6ZXJqcy1wYXJlbnRoZXNlc2pzLW1vZHVsYXJOYW1lanMtYXN5bmNOYW1lanMtc3RyaW5nQmFja2VkTmFtZWpzLXN0cmluZ0NvbmNhdGVuYXRpb25qcy1saXRlcmFsTnVsbGpzLWxpdGVyYWxOdW1iZXJqcy1saXRlcmFsU3RyaW5nanMtbGl0ZXJhbFN0cmluZ0Zyb21OYW1lanMtbGl0ZXJhbEJvb2xqcy1tb2R1bGFyRXhwcmVzc2lvbmpzLWZ1bmN0aW9uanMtbmFtZWRGdW5jdGlvbmpzLWFjY2Vzc2pzLXBhcmFtZXRlcmpzLXZhcmlhYmxlRGVjbGFyYXRpb25qcy10aGlzRXhwcmVzc2lvbmpzLXZhcmlhYmxlVXNlanMtcG9zdGZpeGpzLXByZWZpeGpzLWJpbmFyeWpzLWNhbGxFeHByZXNzaW9uanMtbmV3RXhwcmVzc2lvbmpzLWNvbmRpdGlvbmFsanMtdmFyaWFibGVJbml0aWFsaXphdGlvbmpzLWFzc2lnbm1lbnRqcy12YXJpYWJsZURlY2xhcmF0aW9uTGlzdGpzLWxpdGVyYWxFeHByZXNzaW9uanMtZGFydFlpZWxkanMtbGl0ZXJhbFN0YXRlbWVudGpzLWxhYmVsZWRTdGF0ZW1lbnRqcy1mdW5jdGlvbkRlY2xhcmF0aW9uanMtc3dpdGNoRGVmYXVsdGpzLXN3aXRjaENhc2Vqcy1zd2l0Y2hTdGF0ZW1lbnRqcy1jYXRjaENsYXVzZWpzLXRyeVN0YXRlbWVudGpzLXRocm93U3RhdGVtZW50anMtcmV0dXJuU3RhdGVtZW50anMtYnJlYWtTdGF0ZW1lbnRqcy1jb250aW51ZVN0YXRlbWVudGpzLWRvU3RhdGVtZW50anMtd2hpbGVTdGF0ZW1lbnRqcy1mb3JJblN0YXRlbWVudGpzLWZvclN0YXRlbWVudGpzLWlmU3RhdGVtZW50anMtZW1wdHlTdGF0ZW1lbnRqcy1leHByZXNzaW9uU3RhdGVtZW50anMtYmxvY2tqcy1wcm9ncmFtSnNOb2RlU2VyaWFsaXplcnNlcmlhbGl6ZXJfd3JpdGVJbmZvd3JpdGVDYWNoZWR2aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uSnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9udmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnRKc05vZGVTZXJpYWxpemVyLnZpc2l0SW50ZXJwb2xhdGVkU3RhdGVtZW50dmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3RvcnZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVySnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcnZpc2l0SW50ZXJwb2xhdGVkTGl0ZXJhbEpzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsdmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9uSnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb252aXNpdENvbW1lbnR2aXNpdEF3YWl0dmlzaXRSZWdFeHBMaXRlcmFsdmlzaXRQcm9wZXJ0eXZpc2l0T2JqZWN0SW5pdGlhbGl6ZXJpc09uZUxpbmVydmlzaXRBcnJheUhvbGV2aXNpdEFycmF5SW5pdGlhbGl6ZXJ2aXNpdFBhcmVudGhlc2VzZW5jbG9zZWRVbmV4cGVjdGVkIGRlZmVycmVkIGV4cHJlc3Npb246IHZpc2l0TGl0ZXJhbE51bGx2aXNpdExpdGVyYWxOdW1iZXJ2aXNpdExpdGVyYWxTdHJpbmd2aXNpdExpdGVyYWxCb29sdmlzaXREZWZlcnJlZFN0cmluZ0pzTm9kZVNlcmlhbGl6ZXIudmlzaXREZWZlcnJlZFN0cmluZ3Zpc2l0RGVmZXJyZWROdW1iZXJKc05vZGVTZXJpYWxpemVyLnZpc2l0RGVmZXJyZWROdW1iZXJ2aXNpdERlZmVycmVkRXhwcmVzc2lvbnZpc2l0RnVudmlzaXROYW1lZEZ1bmN0aW9udmlzaXRBY2Nlc3N2aXNpdFBhcmFtZXRlcnZpc2l0VGhpc3Zpc2l0VmFyaWFibGVVc2V2aXNpdFBvc3RmaXh2aXNpdFByZWZpeHZpc2l0QmluYXJ5dmlzaXRDYWxsdmlzaXROZXd2aXNpdENvbmRpdGlvbmFsdmlzaXRWYXJpYWJsZUluaXRpYWxpemF0aW9udmlzaXRBc3NpZ25tZW50bGVmdEhhbmRTaWRld3JpdGVTdHJpbmdPck51bGx2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0aW5kZW50U3BsaXRzdmlzaXRMaXRlcmFsRXhwcmVzc2lvbnZpc2l0RGFydFlpZWxkaGFzU3RhcnZpc2l0TGl0ZXJhbFN0YXRlbWVudHZpc2l0RGVmYXVsdHZpc2l0Q2FzZXZpc2l0U3dpdGNodmlzaXRUcnljYXRjaFBhcnRmaW5hbGx5UGFydHZpc2l0UmV0dXJudmlzaXRCcmVha3RhcmdldExhYmVsdmlzaXRDb250aW51ZXZpc2l0RG92aXNpdFdoaWxldmlzaXRGb3JJbnZpc2l0Rm9ydmlzaXRJZnZpc2l0UHJvZ3JhbUpzTm9kZURlc2VyaWFsaXplcmRlc2VyaWFsaXplcmhhc1ZhbHVlcmVhZFZhbHVlT3JOdWxscmVhZFN0cmluZ09yTnVsbHJlYWRDYWNoZWRDb2RlZ2VuUmVhZGVySW1wbHJlYWRBYnN0cmFjdFZhbHVlYWJzdHJhY3RWYWx1ZURvbWFpbnJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2VyZWFkSnNOb2RlcmVhZE91dHB1dFVuaXRSZWZlcmVuY2VvdXRwdXRVbml0c3JlYWRJbnRDb2RlZ2VuV3JpdGVySW1wbHdyaXRlQWJzdHJhY3RWYWx1ZXdyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmt3cml0ZUpzTm9kZXdyaXRlT3V0cHV0VW5pdFJlZmVyZW5jZXdyaXRlSW50ZGFydDJqcy5jb21tb24ubmFtZXNQdWJsaWNOYW1lQ2FsbFN0cnVjdHVyZUlkZW50aWZpZXJzbm9TdWNoTWV0aG9kX3J1bnRpbWVUeXBlXzpzaWduYXR1cmVKU0pTX0JVSUxUSU5KU19FTUJFRERFRF9HTE9CQUxKU19JTlRFUkNFUFRPUl9DT05TVEFOVEpTX1NUUklOR19DT05DQVREQVJUX0NMT1NVUkVfVE9fSlNOYW1lc2R5bmFtaWNfdG9TdHJpbmdfSU5ERVhfTkFNRUlOREVYX1NFVF9OQU1FQ0FMTF9OQU1FZ2VuZXJpY0luc3RhbnRpYXRpb25pbnN0YW50aWF0ZW5vU3VjaE1ldGhvZEdldHRlcnRvU3RyaW5nR2V0dGVyaGFzaENvZGVfQUxMZGFydF9hc3luY2RhcnRfY29sbGVjdGlvbmNvbGxlY3Rpb25kYXJ0X2NvcmVkYXJ0X2h0bWxodG1sZGFydF9odG1sX2NvbW1vbmh0bWxfY29tbW9uZGFydF9pbmRleGVkX2RiaW5kZXhlZF9kYmRhcnRfaXNvbGF0ZWlzb2xhdGVkYXJ0X21hdGhkYXJ0X21pcnJvcnNkYXJ0X19pbnRlcm5hbGRhcnRfX25hdGl2ZV90eXBlZF9kYXRhX25hdGl2ZV90eXBlZF9kYXRhZGFydF90eXBlZF9kYXRhdHlwZWRfZGF0YWRhcnRfc3Znc3ZnZGFydF93ZWJfYXVkaW93ZWJfYXVkaW9kYXJ0X3dlYl9nbHdlYl9nbGRhcnRfd2ViX3NxbHdlYl9zcWxkYXJ0X19qc19oZWxwZXJfanNfaGVscGVyZGFydF9fcnRpX3J0aWRhcnRfX2ludGVyY2VwdG9yc19pbnRlcmNlcHRvcnNkYXJ0X19mb3JlaWduX2hlbHBlcl9mb3JlaWduX2hlbHBlcmRhcnRfX2pzX25hbWVzX2pzX25hbWVzZGFydF9fanNfZW1iZWRkZWRfbmFtZXNfanNfZW1iZWRkZWRfbmFtZXNwYWNrYWdlX2pzanMvanMuZGFydHBhY2thZ2VfbWV0YV9kYXJ0MmpzbWV0YS9kYXJ0MmpzLmRhcnRkYXJ0MmpzLmNvbW1vbi53b3JrTWVtYmVyRW50aXR5ZGFydDJqcy50eXBlX3N5c3RlbWNvbnN0YW50X3N5c3RlbU5hdGl2ZUJhc2ljRGF0YUNvbW1vbkVsZW1lbnRzcmVzb3VyY2VDbGFzc3VubW9kaWZpYWJsZVNldENsYXNzdHlwZWREYXRhTGlicmFyeWpzSGVscGVyTGlicmFyeWludGVyY2VwdG9yc0xpYnJhcnlmb3JlaWduTGlicmFyeXJ0aUxpYnJhcnlpbnRlcm5hbExpYnJhcnl0eXBlZERhdGFDbGFzc3N5bWJvbENvbnN0cnVjdG9yVGFyZ2V0aXNTeW1ib2xDb25zdHJ1Y3RvcmlkZW50aWNhbEZ1bmN0aW9uaXNGdW5jdGlvbkFwcGx5TWV0aG9kdHlwZUxpdGVyYWxUeXBlaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZWlzU3RyaW5nT25seVN1cGVydHlwZWlzTGlzdFN1cGVydHlwZWdldENvbnN0YW50TWFwVHlwZUZvcnNvdXJjZVR5cGVoYXNQcm90b0tleW9ubHlTdHJpbmdLZXlzZ2V0Q29uc3RhbnRTZXRUeXBlRm9yc3ltYm9sRmllbGRzeW1ib2xJbXBsZW1lbnRhdGlvblR5cGVtYXBMaXRlcmFsQ2xhc3NtYXBMaXRlcmFsQ29uc3RydWN0b3JtYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eW1hcExpdGVyYWxVbnR5cGVkTWFrZXJtYXBMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXJzZXRMaXRlcmFsQ2xhc3NzZXRMaXRlcmFsQ29uc3RydWN0b3JzZXRMaXRlcmFsQ29uc3RydWN0b3JFbXB0eXNldExpdGVyYWxVbnR5cGVkTWFrZXJzZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXJvYmplY3ROb1N1Y2hNZXRob2Rpc0RlZmF1bHROb1N1Y2hNZXRob2RJbXBsZW1lbnRhdGlvbmFzeW5jSGVscGVyU3RhcnRTeW5jYXN5bmNIZWxwZXJBd2FpdGFzeW5jSGVscGVyUmV0dXJuYXN5bmNIZWxwZXJSZXRocm93d3JhcEJvZHl5aWVsZFN0YXJ5aWVsZFNpbmdsZXN5bmNTdGFyVW5jYXVnaHRFcnJvcmFzeW5jU3RhckhlbHBlcnN0cmVhbU9mQ29udHJvbGxlcmVuZE9mSXRlcmF0aW9uc3luY1N0YXJJdGVyYWJsZWZ1dHVyZUltcGxlbWVudGF0aW9uY29udHJvbGxlclN0cmVhbXN0cmVhbUl0ZXJhdG9yc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3RvcnN5bmNTdGFySXRlcmFibGVGYWN0b3J5YXN5bmNBd2FpdENvbXBsZXRlckZhY3Rvcnlhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRmFjdG9yeWpzSW50ZXJjZXB0b3JDbGFzc2pzU3RyaW5nQ2xhc3Nqc0FycmF5Q2xhc3Nqc051bWJlckNsYXNzanNJbnRDbGFzc2pzRG91YmxlQ2xhc3Nqc051bGxDbGFzc2pzQm9vbENsYXNzanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzc2pzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzc2pzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3Nqc0phdmFTY3JpcHRPYmplY3RDbGFzc2pzSW5kZXhhYmxlQ2xhc3Nqc011dGFibGVJbmRleGFibGVDbGFzc2pzTXV0YWJsZUFycmF5Q2xhc3Nqc0ZpeGVkQXJyYXlDbGFzc2pzRXh0ZW5kYWJsZUFycmF5Q2xhc3Nqc1VubW9kaWZpYWJsZUFycmF5Q2xhc3Nqc1Bvc2l0aXZlSW50Q2xhc3Nqc1VJbnQzMkNsYXNzanNVSW50MzFDbGFzc2lzRmluZEluZGV4Rm9yTmF0aXZlU3ViY2xhc3NUeXBlZ2V0TmF0aXZlSW50ZXJjZXB0b3JNZXRob2Rqc0FycmF5VHlwZWRDb25zdHJ1Y3RvcmZpbmRIZWxwZXJGdW5jdGlvbmNsb3N1cmVDbGFzc2JvdW5kQ2xvc3VyZUNsYXNzdHlwZUxpdGVyYWxDbGFzc2NvbnN0TWFwTGl0ZXJhbENsYXNzY29uc3RTZXRMaXRlcmFsQ2xhc3N0eXBlVmFyaWFibGVDbGFzc2pzSW52b2NhdGlvbk1pcnJvckNsYXNzaW52b2NhdGlvblR5cGVBcmd1bWVudEdldHRlcmpzSW5kZXhpbmdCZWhhdmlvckludGVyZmFjZXN0YWNrVHJhY2VIZWxwZXJDbGFzc2NvbnN0YW50TWFwQ2xhc3Njb25zdGFudFN0cmluZ01hcENsYXNzY29uc3RhbnRQcm90b01hcENsYXNzZ2VuZXJhbENvbnN0YW50TWFwQ2xhc3Nhbm5vdGF0aW9uQ3JlYXRlc0NsYXNzYW5ub3RhdGlvblJldHVybnNDbGFzc2Fubm90YXRpb25KU05hbWVDbGFzc25hdGl2ZUFubm90YXRpb25DbGFzc3R5cGVWYXJpYWJsZUNvbnN0cnVjdG9yYXNzZXJ0VGVzdGFzc2VydFRocm93YXNzZXJ0SGVscGVyYXNzZXJ0VW5yZWFjaGFibGVNZXRob2RnZXRJc29sYXRlQWZmaW5pdHlUYWdNYXJrZXJyZXF1aXJlc1ByZWFtYmxlTWFya2VybG9hZExpYnJhcnlXcmFwcGVybG9hZERlZmVycmVkTGlicmFyeWJvb2xDb252ZXJzaW9uQ2hlY2t0cmFjZUhlbHBlcmNsb3N1cmVGcm9tVGVhck9mZmlzSnNJbmRleGFibGV0aHJvd0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbnRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uZXhjZXB0aW9uVW53cmFwcGVydGhyb3dSdW50aW1lRXJyb3J0aHJvd1Vuc3VwcG9ydGVkRXJyb3J0aHJvd1R5cGVFcnJvcnRocm93QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcmNoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9ydGhyb3dDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JzdHJpbmdJbnRlcnBvbGF0aW9uSGVscGVyd3JhcEV4Y2VwdGlvbkhlbHBlcnRocm93RXhwcmVzc2lvbkhlbHBlcmNsb3N1cmVDb252ZXJ0ZXJ0cmFjZUZyb21FeGNlcHRpb25zZXRSdW50aW1lVHlwZUluZm9nZXRSdW50aW1lVHlwZUluZm9nZXRUeXBlQXJndW1lbnRCeUluZGV4Y29tcHV0ZVNpZ25hdHVyZWdldFJ1bnRpbWVUeXBlQXJndW1lbnRzZ2V0UnVudGltZVR5cGVBcmd1bWVudGdldFJ1bnRpbWVUeXBlQXJndW1lbnRJbnRlcmNlcHRlZGFzc2VydElzU3VidHlwZWNoZWNrU3VidHlwZWFzc2VydFN1YnR5cGVzdWJ0eXBlQ2FzdGZ1bmN0aW9uVHlwZVRlc3RmdXR1cmVPclRlc3RjaGVja1N1YnR5cGVPZlJ1bnRpbWVUeXBlYXNzZXJ0U3VidHlwZU9mUnVudGltZVR5cGVzdWJ0eXBlT2ZSdW50aW1lVHlwZUNhc3RjaGVja0RlZmVycmVkSXNMb2FkZWR0aHJvd05vU3VjaE1ldGhvZGNyZWF0ZVJ1bnRpbWVUeXBlZmFsbFRocm91Z2hFcnJvcmNyZWF0ZUludm9jYXRpb25NaXJyb3JjcmVhdGVVbm1hbmdsZWRJbnZvY2F0aW9uTWlycm9yY3ljbGljVGhyb3dIZWxwZXJkZWZpbmVQcm9wZXJ0eWlzRXh0cmFjdFR5cGVBcmd1bWVudHNnZXRJbnN0YW50aWF0aW9uQ2xhc3NnZXRJbnN0YW50aWF0ZUZ1bmN0aW9uaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZWV4dHJhY3RGdW5jdGlvblR5cGVPYmplY3RGcm9tSW50ZXJuYWxmaW5kVHlwZWluc3RhbmNlVHlwZWFycmF5SW5zdGFuY2VUeXBlc2ltcGxlSW5zdGFuY2VUeXBldHlwZUxpdGVyYWxNYWtlcmNoZWNrVHlwZUJvdW5kcnRpQXNGaWVsZHJ0aUNoZWNrRmllbGRydGlJc0ZpZWxkcnRpUmVzdEZpZWxkcnRpRXZhbE1ldGhvZHJ0aUJpbmRNZXRob2RydGlBZGRSdWxlc01ldGhvZGdlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbmdlbmVyYWxBc0NoZWNrSW1wbGVtZW50YXRpb25nZW5lcmFsVHlwZUNoZWNrSW1wbGVtZW50YXRpb25zcGVjaWFsaXplZElzQm9vbHNwZWNpYWxpemVkQXNCb29sTnVsbGFibGVzcGVjaWFsaXplZENoZWNrQm9vbE51bGxhYmxlc3BlY2lhbGl6ZWRBc0RvdWJsZU51bGxhYmxlc3BlY2lhbGl6ZWRDaGVja0RvdWJsZU51bGxhYmxlc3BlY2lhbGl6ZWRJc0ludHNwZWNpYWxpemVkQXNJbnROdWxsYWJsZXNwZWNpYWxpemVkQ2hlY2tJbnROdWxsYWJsZXNwZWNpYWxpemVkSXNOdW1zcGVjaWFsaXplZEFzTnVtTnVsbGFibGVzcGVjaWFsaXplZENoZWNrTnVtTnVsbGFibGVzcGVjaWFsaXplZElzU3RyaW5nc3BlY2lhbGl6ZWRBc1N0cmluZ051bGxhYmxlc3BlY2lhbGl6ZWRDaGVja1N0cmluZ051bGxhYmxlaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZU5ld1J0aWNsb3N1cmVGdW5jdGlvblR5cGVzeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzZXh0ZXJuYWxOYW1lQ2xhc3NleHRlcm5hbE5hbWVUeXBlc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3Jqc0dldE5hbWVFbnVtaXNGb3JlaWduSGVscGVyZ2V0RGVmYXVsdFN1cGVyY2xhc3NuYXRpdmVCYXNpY0RhdGFLQ29tbW9uRWxlbWVudHNqc0Fubm90YXRpb25DbGFzc2pzQW5vbnltb3VzQ2xhc3NwcmFnbWFDbGFzc05hbWVGaWVsZHByYWdtYUNsYXNzT3B0aW9uc0ZpZWxkaXNDcmVhdGVJbnZvY2F0aW9uTWlycm9ySGVscGVyaXNTeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3Rvcm1ldGFOb0lubGluZUNsYXNzbWV0YVRyeUlubGluZUNsYXNzaXNFeHRlcm5hbEFsbG93ZWRKQ29tbW9uRWxlbWVudHNpc1VubmFtZWRMaXN0Q29uc3RydWN0b3Jpc0ZpbGxlZExpc3RDb25zdHJ1Y3RvcmlzRGVmYXVsdEVxdWFsaXR5SW1wbGVtZW50YXRpb25hcHBsaWVzVG9Kc0luZGV4YWJsZUxlbmd0aGpzQXJyYXlSZW1vdmVMYXN0anNBcnJheUFkZGlzSnNTdHJpbmdTcGxpdGFwcGxpZXNUb0pzU3RyaW5nU3BsaXRqc1N0cmluZ1NwbGl0anNTdHJpbmdUb1N0cmluZ2pzU3RyaW5nT3BlcmF0b3JBZGRqc0NvbnN0Q2xhc3Npc0NoZWNrSW50aXNDaGVja051bWlzQ2hlY2tTdHJpbmdpc0luc3RhbnRpYXRpb25DbGFzc3R5cGVkQXJyYXlPZkludENsYXNzdHlwZWRBcnJheU9mRG91YmxlQ2xhc3Nqc0J1aWx0aW5FbnVtaXNGb3JlaWdub3BlcmF0b3JFcUhhbmRsZXNOdWxsQXJndW1lbnRDb21tb25FbGVtZW50c0ltcGxfZW52X29wdGlvbnNfcmVzb3VyY2VDbGFzc191bm1vZGlmaWFibGVTZXRDbGFzc190eXBlZERhdGFMaWJyYXJ5X2pzSGVscGVyTGlicmFyeV9pbnRlcmNlcHRvcnNMaWJyYXJ5X2ZvcmVpZ25MaWJyYXJ5X3J0aUxpYnJhcnlfaW50ZXJuYWxMaWJyYXJ5X3R5cGVkRGF0YUNsYXNzX3N5bWJvbENvbnN0cnVjdG9yVGFyZ2V0X2NvbXB1dGVkU3ltYm9sQ29uc3RydWN0b3JEZXBlbmRlbmNpZXNfc3ltYm9sQ29uc3RydWN0b3JJbXBsZW1lbnRhdGlvblRhcmdldF9pZGVudGljYWxGdW5jdGlvbl9tYXBMaXRlcmFsQ2xhc3NfbWFwTGl0ZXJhbENvbnN0cnVjdG9yX21hcExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5X21hcExpdGVyYWxVbnR5cGVkTWFrZXJfbWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyX3NldExpdGVyYWxDbGFzc19zZXRMaXRlcmFsQ29uc3RydWN0b3Jfc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHlfc2V0TGl0ZXJhbFVudHlwZWRNYWtlcl9zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXJfb2JqZWN0Tm9TdWNoTWV0aG9kX3N5bmNTdGFySXRlcmFibGVGYWN0b3J5X2FzeW5jQXdhaXRDb21wbGV0ZXJGYWN0b3J5X2FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJGYWN0b3J5X2pzSW50ZXJjZXB0b3JDbGFzc19qc1N0cmluZ0NsYXNzX2pzQXJyYXlDbGFzc19qc051bWJlckNsYXNzX2pzSW50Q2xhc3NfanNEb3VibGVDbGFzc19qc051bGxDbGFzc19qc0Jvb2xDbGFzc19qc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzX2pzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzc19qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzX2pzSmF2YVNjcmlwdE9iamVjdENsYXNzX2pzSW5kZXhhYmxlQ2xhc3NfanNNdXRhYmxlSW5kZXhhYmxlQ2xhc3NfanNNdXRhYmxlQXJyYXlDbGFzc19qc0ZpeGVkQXJyYXlDbGFzc19qc0V4dGVuZGFibGVBcnJheUNsYXNzX2pzVW5tb2RpZmlhYmxlQXJyYXlDbGFzc19qc1Bvc2l0aXZlSW50Q2xhc3NfanNVSW50MzJDbGFzc19qc1VJbnQzMUNsYXNzX2dldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kX2pzQXJyYXlUeXBlZENvbnN0cnVjdG9yX2pzQXJyYXlSZW1vdmVMYXN0X2pzQXJyYXlBZGRfanNTdHJpbmdTcGxpdF9qc1N0cmluZ1RvU3RyaW5nX2pzU3RyaW5nT3BlcmF0b3JBZGRfanNDb25zdENsYXNzX2pzQW5ub3RhdGlvbkNsYXNzX2pzQW5vbnltb3VzQ2xhc3NfY2xvc3VyZUNsYXNzX2JvdW5kQ2xvc3VyZUNsYXNzX3R5cGVMaXRlcmFsQ2xhc3NfY29uc3RNYXBMaXRlcmFsQ2xhc3NfY29uc3RTZXRMaXRlcmFsQ2xhc3NfdHlwZVZhcmlhYmxlQ2xhc3NfcHJhZ21hQ2xhc3NOYW1lRmllbGRfcHJhZ21hQ2xhc3NPcHRpb25zRmllbGRfanNJbnZvY2F0aW9uTWlycm9yQ2xhc3NfaW52b2NhdGlvblR5cGVBcmd1bWVudEdldHRlcl9qc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2VfbmF0aXZlQW5ub3RhdGlvbkNsYXNzX3R5cGVWYXJpYWJsZUNvbnN0cnVjdG9yX2Fzc2VydFRlc3RfYXNzZXJ0VGhyb3dfYXNzZXJ0SGVscGVyX2Fzc2VydFVucmVhY2hhYmxlTWV0aG9kX2dldElzb2xhdGVBZmZpbml0eVRhZ01hcmtlcl9yZXF1aXJlc1ByZWFtYmxlTWFya2VyX2NhY2hlZENoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yX2ZpbmRUeXBlX2luc3RhbmNlVHlwZV9hcnJheUluc3RhbmNlVHlwZV9zaW1wbGVJbnN0YW5jZVR5cGVfdHlwZUxpdGVyYWxNYWtlcl9jaGVja1R5cGVCb3VuZF9ydGlBc0ZpZWxkX3J0aUlzRmllbGRfcnRpQ2hlY2tGaWVsZF9ydGlSZXN0RmllbGRfcnRpRXZhbE1ldGhvZF9ydGlCaW5kTWV0aG9kX3J0aUFkZFJ1bGVzTWV0aG9kX2dlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbl9nZW5lcmFsQXNDaGVja0ltcGxlbWVudGF0aW9uX2dlbmVyYWxUeXBlQ2hlY2tJbXBsZW1lbnRhdGlvbl9zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzX2V4dGVybmFsTmFtZUNsYXNzX3N5bWJvbEltcGxlbWVudGF0aW9uRmllbGRfc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3JfdHlwZWRBcnJheU9mSW50Q2xhc3NfdHlwZWRBcnJheU9mRG91YmxlQ2xhc3NfanNHZXROYW1lRW51bV9qc0J1aWx0aW5FbnVtX21ldGFBbm5vdGF0aW9uQ2hlY2tlZF9tZXRhTm9JbmxpbmVDbGFzc19tZXRhVHJ5SW5saW5lQ2xhc3NfZmluZENsYXNzUmVzb3VyY2Vsb29rdXBMaWJyYXJ5TmF0aXZlVHlwZWREYXRhX2ZpbmRDb25zdHJ1Y3Rvcl9lbnN1cmVTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llc19maW5kTGlicmFyeU1lbWJlcmZpbGxlZF9nZXRSYXdUeXBlX2NyZWF0ZUludGVyZmFjZVR5cGVDb21wYXJhYmxlUGF0dGVybmxvb2t1cENsYXNzbG9va3VwTGlicmFyeU1lbWJlcl9maW5kQ2xhc3NNZW1iZXJsb29rdXBMb2NhbENsYXNzTWVtYmVyY3JlYXRlSW50ZXJmYWNlVHlwZWNsYXNzRWxlbWVudHRyZWF0QXNSYXdzeW1ib2xJbXBsZW1lbnRhdGlvbkZpZWxkTGlua2VkSGFzaE1hcF9lbnN1cmVNYXBMaXRlcmFsSGVscGVyc19saXRlcmFsX2VtcHR5X21ha2VMaXRlcmFsX21ha2VFbXB0eUxpbmtlZEhhc2hTZXRfZW5zdXJlU2V0TGl0ZXJhbEhlbHBlcnNfZmluZEFzeW5jSGVscGVyQ2xhc3NfZmluZEFzeW5jSGVscGVyRnVuY3Rpb25fYXN5bmNTdGFydFN5bmNfYXN5bmNBd2FpdF9hc3luY1JldHVybl9hc3luY1JldGhyb3dfd3JhcEpzRnVuY3Rpb25Gb3JBc3luY19JdGVyYXRpb25NYXJrZXJ1bmNhdWdodEVycm9yX2FzeW5jU3RhckhlbHBlcl9zdHJlYW1PZkNvbnRyb2xsZXJfU3luY1N0YXJJdGVyYWJsZV9GdXR1cmVfQ29udHJvbGxlclN0cmVhbVN0cmVhbUl0ZXJhdG9yX21ha2VTeW5jU3Rhckl0ZXJhYmxlX21ha2VBc3luY0F3YWl0Q29tcGxldGVyX21ha2VBc3luY1N0YXJTdHJlYW1Db250cm9sbGVyX2ZpbmRJbnRlcmNlcHRvcnNDbGFzc19maW5kSW50ZXJjZXB0b3JzRnVuY3Rpb25JbnRlcmNlcHRvckpTU3RyaW5nSlNBcnJheUpTTnVtYmVySlNJbnRKU0RvdWJsZUpTTnVsbEpTQm9vbFBsYWluSmF2YVNjcmlwdE9iamVjdFVua25vd25KYXZhU2NyaXB0T2JqZWN0SmF2YVNjcmlwdEZ1bmN0aW9uSmF2YVNjcmlwdE9iamVjdEpTSW5kZXhhYmxlSlNNdXRhYmxlSW5kZXhhYmxlSlNNdXRhYmxlQXJyYXlKU0ZpeGVkQXJyYXlKU0V4dGVuZGFibGVBcnJheUpTVW5tb2RpZmlhYmxlQXJyYXlKU1Bvc2l0aXZlSW50SlNVSW50MzJKU1VJbnQzMWZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZWdldE5hdGl2ZUludGVyY2VwdG9yaXNDYWxsdHlwZWRfaXNKc1N0cmluZ0NsYXNzYXBwbGllc2lzVGFyZ2V0aW5nTWVtYmVyaXNQb3RlbnRpYWxseVRydWVKU19DT05TVF9Bbm9ueW1vdXNfZmluZEhlbHBlckZ1bmN0aW9uX2ZpbmRIZWxwZXJDbGFzc0Nsb3N1cmVCb3VuZENsb3N1cmVfZmluZFJ0aUNsYXNzX1R5cGVUeXBlSW1wbENvbnN0YW50TWFwSlNJbnZvY2F0aW9uTWlycm9ySmF2YVNjcmlwdEluZGV4aW5nQmVoYXZpb3JfU3RhY2tUcmFjZUNvbnN0YW50U3RyaW5nTWFwQ29uc3RhbnRQcm90b01hcEdlbmVyYWxDb25zdGFudE1hcENyZWF0ZXNSZXR1cm5zSlNOYW1lTmF0aXZlYXNzZXJ0VW5yZWFjaGFibGVnZXRJc29sYXRlQWZmaW5pdHlUYWdyZXF1aXJlc1ByZWFtYmxlX2xvYWRMaWJyYXJ5V3JhcHBlcmlhZWlvb3JldW53cmFwRXhjZXB0aW9uaXNGdW5jdGlvbmNoZWNrSW50Y2hlY2tOdW1jaGVja1N0cmluZ3dyYXBFeGNlcHRpb250aHJvd0V4cHJlc3Npb25jb252ZXJ0RGFydENsb3N1cmVUb0pTZ2V0VHJhY2VGcm9tRXhjZXB0aW9uX2ZpbmRSdGlGdW5jdGlvbl9jcmVhdGVSdW50aW1lVHlwZWdldEZhbGxUaHJvdWdoRXJyb3JfY3JlYXRlSW52b2NhdGlvbk1pcnJvcnRocm93Q3ljbGljSW5pdGV4dHJhY3RUeXBlQXJndW1lbnRzX2NoZWNrVHlwZUFyZ3VtZW50Q291bnRVbnN1cHBvcnRlZCBpbnN0YW50aWF0aW9uIGFyZ3VtZW50IGNvdW50OiB0eXBlTGl0ZXJhbF9ydGlJbXBsQ2xhc3NSdGlfcnRpVW5pdmVyc2VDbGFzc19Vbml2ZXJzZV9maW5kUnRpQ2xhc3NGaWVsZF9hc19pc19jaGVja19yZXN0X2V2YWxfYmluZGFkZFJ1bGVzX2lzQm9vbF9hc0Jvb2xOdWxsYWJsZV9jaGVja0Jvb2xOdWxsYWJsZV9hc0RvdWJsZU51bGxhYmxlX2NoZWNrRG91YmxlTnVsbGFibGVfaXNJbnRfYXNJbnROdWxsYWJsZV9jaGVja0ludE51bGxhYmxlX2lzTnVtX2FzTnVtTnVsbGFibGVfY2hlY2tOdW1OdWxsYWJsZV9pc1N0cmluZ19hc1N0cmluZ051bGxhYmxlX2NoZWNrU3RyaW5nTnVsbGFibGV2YWxpZGF0ZWROYXRpdmVUeXBlZEFycmF5T2ZJbnROYXRpdmVUeXBlZEFycmF5T2ZEb3VibGVKc0dldE5hbWVKc0J1aWx0aW5fZW5zdXJlTWV0YUFubm90YXRpb25zX05vSW5saW5lX1RyeUlubGluZWlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3JVbmV4cGVjdGVkIGZ1bmN0aW9uIGlzSnNJbnRlcm9wQ2xhc3Npc05hdGl2ZUNsYXNzbWFpbkxpYnJhcnlmb3JFYWNoTGlicmFyeU1lbWJlcmxvb2t1cENsYXNzTWVtYmVyZ2V0U3VwZXJDbGFzc2ZvckVhY2hMb2NhbENsYXNzTWVtYmVyZm9yRWFjaENsYXNzTWVtYmVyZm9yRWFjaENvbnN0cnVjdG9yc2tpcFVubmFtZWRNaXhpbkFwcGxpY2F0aW9uc2ZvckVhY2hTdXBlcnR5cGVnZXRUaGlzVHlwZWlzR2VuZXJpY0NsYXNzaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbmdldFR5cGVWYXJpYWJsZUJvdW5kZ2V0RnVuY3Rpb25UeXBlZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzZ2V0TG9jYWxGdW5jdGlvblR5cGVnZXRGaWVsZFR5cGVnZXRVbmFsaWFzZWRUeXBlaXNFbnVtQ2xhc3NLRWxlbWVudEVudmlyb25tZW50Zm9yRWFjaE1peGluZ2V0RmllbGRDb25zdGFudEZvclRlc3Rpbmdpc0RlZmVycmVkTG9hZExpYnJhcnlHZXR0ZXJnZXRJbXBvcnRzZ2V0TGlicmFyeU1ldGFkYXRhZ2V0Q2xhc3NNZXRhZGF0YWdldE1lbWJlck1ldGFkYXRhaW5jbHVkZVBhcmFtZXRlck1ldGFkYXRhSkVsZW1lbnRFbnZpcm9ubWVudGZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyZm9yRWFjaENvbnN0cnVjdG9yQm9keWZvckVhY2hOZXN0ZWRDbG9zdXJlaXNTdXBlck1peGluQXBwbGljYXRpb25nZXRFZmZlY3RpdmVNaXhpbkNsYXNzZ2V0VHlwZVZhcmlhYmxlRGVmYXVsdFR5cGVnZXRBc3luY09yU3luY1N0YXJFbGVtZW50VHlwZWdldEZ1bmN0aW9uQXN5bmNPclN5bmNTdGFyRWxlbWVudFR5cGVmb3JFYWNoSW5zdGFuY2VGaWVsZGZvckVhY2hEaXJlY3RJbnN0YW5jZUZpZWxkZm9yRWFjaFBhcmFtZXRlcmZvckVhY2hQYXJhbWV0ZXJBc0xvY2FsZ2xvYmFsTG9jYWxzTWFwZGVmZXJyZWRfbG9hZENvbnN0YW50VmFsdWVDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWVUeXBlQ29uc3RhbnRWYWx1ZURlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZUluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlS0xvY2FsRnVuY3Rpb25JbXBhY3RVc2VDYXNlV29ybGRJbXBhY3RWaXNpdG9ySW1wbE91dHB1dFVuaXRpc01haW5PdXRwdXRfaW1wb3J0c290aGVyU2l6ZW90aGVySW1wb3J0c2NtcGltcG9ydHNGb3JUZXN0aW5nT3V0cHV0VW5pdChfbWFpbk91dHB1dFVuaXRfYWxsT3V0cHV0VW5pdHNJTVBBQ1RfVVNFRGVmZXJyZWQgbG9hZF9pbXBvcnREZWZlck5hbWVfY2xhc3NUb1NldF9tZW1iZXJUb1NldF9sb2NhbEZ1bmN0aW9uVG9TZXRfY29uc3RhbnRUb1NldF9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9uc2ltcG9ydFNldHNtYWluU2V0dW5pdERlZmVycmVkIExvYWRpbmdfYWxsRGVmZXJyZWRJbXBvcnRzY29tbW9uRWxlbWVudHNfaXNFeHBsaWNpdGx5RGVmZXJyZWRjbGFzc0ltcG9ydHNUb21lbWJlckltcG9ydHNUb3R5cGVkZWZJbXBvcnRzVG9fY29sbGVjdERpcmVjdE1lbWJlckRlcGVuZGVuY2llc2lzTWVtYmVyVXNlZF9jb2xsZWN0RGVwZW5kZW5jaWVzRnJvbUltcGFjdGNvbGxlY3RDb25zdGFudHNJbkJvZHlfY29sbGVjdEFsbEVsZW1lbnRzQW5kQ29uc3RhbnRzUmVzb2x2ZWRGcm9tQ2xhc3NhZGRMaXZlSW5zdGFuY2VNZW1iZXJfY29sbGVjdFR5cGVEZXBlbmRlbmNpZXNfY29sbGVjdEFsbEVsZW1lbnRzQW5kQ29uc3RhbnRzUmVzb2x2ZWRGcm9tTWVtYmVyaXNHZW5lcmF0aXZlQ29uc3RydWN0b3Jjb2xsZWN0Q29uc3RhbnRzRnJvbU1ldGFkYXRhX2NvbGxlY3RUeXBlQXJndW1lbnREZXBlbmRlbmNpZXN3b3JsZEltcGFjdHZpc2l0SW1wYWN0dXNlZEVudGl0eVVuZXhwZWN0ZWQgc3RhdGljIHVzZSBsb2NhbEZ1bmN0aW9ubG9jYWxGdW5jdGlvbnNTdGF0aWNVc2VLaW5kLkNPTlNUUlVDVE9SX0lOVk9LRVN0YXRpY1VzZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFU3RhdGljVXNlS2luZC5DTE9TVVJFX0NBTExTdGF0aWNVc2VLaW5kLkRJUkVDVF9JTlZPS0VUeXBlVXNlS2luZC5UWVBFX0xJVEVSQUxpc0ludGVyZmFjZVR5cGVUeXBlVXNlS2luZC5DT05TVF9JTlNUQU5USUFUSU9OVHlwZVVzZUtpbmQuSU5TVEFOVElBVElPTlR5cGVVc2VLaW5kLk5BVElWRV9JTlNUQU5USUFUSU9OVHlwZVVzZUtpbmQuSVNfQ0hFQ0tUeXBlVXNlS2luZC5DQVRDSF9UWVBFVHlwZVVzZUtpbmQuQVNfQ0FTVGdldEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5VHlwZVVzZUtpbmQuSU1QTElDSVRfQ0FTVGdldEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeVR5cGVVc2VLaW5kLlBBUkFNRVRFUl9DSEVDS2dldFBhcmFtZXRlckNoZWNrUG9saWN5VHlwZVVzZUtpbmQuUlRJX1ZBTFVFVHlwZVVzZUtpbmQuVFlQRV9BUkdVTUVOVFR5cGVVc2VLaW5kLk5BTUVEX1RZUEVfVkFSSUFCTEVfTkVXX1JUSVVuZXhwZWN0ZWQgdHlwZSB1c2U6IF91cGRhdGVDb25zdGFudFJlY3Vyc2l2ZW9sZFNldHF1ZXVlY3VycmVudFNldF91cGRhdGVDbGFzc1JlY3Vyc2l2ZWdldERlcGVuZGVuY2llc1RyaWVkIHRvIGFzc2lnbiAgdG8gdGhlIG1haW4gb3V0cHV0IHVuaXQsIGJ1dCBpdCB3YXMgYXNzaWduZWQgdG8gX3Byb2Nlc3NEZXBlbmRlbmNpZXNfdXBkYXRlTWVtYmVyUmVjdXJzaXZlX3VwZGF0ZUxvY2FsRnVuY3Rpb25fc2hvdWxkQWRkRGVmZXJyZWREZXBlbmRlbmN5X2ZpeERlcGVuZGVuY3lJbmZvJyBpcyBkZWZlcnJlZCBidXQgYXBwZWFycyB0byBiZSBpbmZlcnJlZCBhcyBhIHJldHVybiB0eXBlIG9yIGEgdHlwZSBwYXJhbWV0ZXIgKGRhcnRidWcuY29tLzM1MzExKS5fZml4Q2xhc3NEZXBlbmRlbmN5SW5mb19maXhNZW1iZXJEZXBlbmRlbmN5SW5mb19maXhDb25zdGFudERlcGVuZGVuY3lJbmZvcmVwcmVzZW50ZWRUeXBlQ2xhc3MgKGluIGNvbnN0YW50KSBUeXBlZGVmIHNpbmdsZXRvbl9jcmVhdGVPdXRwdXRVbml0c2FkZFVuaXRpbXBvcnRTZXRfc2V0dXBIdW5rc1RvTG9hZGh1bmtzVG9Mb2FkdXNlZEltcG9ydE5hbWVzY29tcHV0ZUltcG9ydERlZmVyTmFtZXNvcnRlZE91dHB1dFVuaXRzb3V0cHV0VW5pdF9idWlsZFJlc3VsdGJhY2tlbmRVc2FnZWdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXNuZXh0SXRlbWNsYXNzTWFwbWVtYmVyTWFwbG9jYWxGdW5jdGlvbk1hcGNvbnN0YW50TWFwY2xlYW51cHByZXBhcmVjaGVja0ZvckRlZmVycmVkRXJyb3JDYXNlc2lnbm9yZUVudGl0eUluRHVtcGR1bXBlbGVtZW50TWFwaWQgY2xzIG1lbWJlcm1lbWJlckNvbnRleHQ8YW5vbnltb3VzPiBsb2NhbGlzUHJpbWl0aXZldW5pdFRleHQgPE1BSU4gVU5JVD4gaW1wb3J0czplbmNsb3NpbmdMaWJyYXJ5VXJpCiAgIAogZWxlbWVudHM6CiBjb25zdGFudHM6CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk91dHB1dCB1bml0OiBJbXBvcnREZXNjcmlwdGlvbmltcG9ydGluZ1VyaV9pbXBvcnRpbmdMaWJyYXJ5aW1wb3J0aW5nTGlicmFyeW1haW5MaWJyYXJ5VXJpX0RlZmVycmVkSW1wb3J0SW1wb3J0U2V0TGF0dGljZV9pbXBvcnRJbmRleF9lbXB0eVNldF9hZGRfd3JhcGFJbXBvcnRzYkltcG9ydHNsYXN0QUluZGV4bGFzdEJJbmRleGltcG9ydEFpbXBvcnRCSW1wb3J0U2V0X3RyYW5zaXRpb25zSW1wb3J0U2V0KHNpemU6IFdvcmtRdWV1ZXBlbmRpbmdDbGFzc2VzcGVuZGluZ01lbWJlcnNwZW5kaW5nQ29uc3RhbnRzX2ltcG9ydFNldHNpbXBvcnRzVG9BZGRDbGFzc1dvcmtJdGVtTWVtYmVyV29ya0l0ZW1Db25zdGFudFdvcmtJdGVtTGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlcl9vdXRwdXRVbml0RGF0YXJlZ2lzdGVyQ29sb2NhdGVkTWVtYmVyc2V4aXN0aW5nRW50aXR5bmV3RW50aXR5X21lbWJlclRvVW5pdG91dHB1dFVuaXRGb3JNZW1iZXJvdXRwdXQtdW5pdC1kYXRhbWFpbk91dHB1dFVuaXRfY2xhc3NUb1VuaXRfbG9jYWxGdW5jdGlvblRvVW5pdF9jb25zdGFudFRvVW5pdGNvbnZlcnRDbGFzc01hcGNvbnZlcnRNZW1iZXJNYXBjb252ZXJ0Q29uc3RhbnRNYXBjbGFzc1RvVW5pdG1lbWJlclRvVW5pdGNvbnN0YW50VG9Vbml0ZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnNyZWFkSW1wb3J0c3JlYWRDbGFzc01hcHJlYWRNZW1iZXJNYXByZWFkQ29uc3RhbnRNYXBpbXBvcnREZWZlck5hbWVyZWFkSW1wb3J0TWFwcmVhZFN0cmluZ01hcG91dHB1dFVuaXRJbmRpY2Vzd3JpdGVJbXBvcnRzd3JpdGVDbGFzc01hcHdyaXRlTWVtYmVyTWFwd3JpdGVDb25zdGFudE1hcHdyaXRlSW1wb3J0TWFwd3JpdGVTdHJpbmdNYXBpbXBvcnREZXNjcmlwdGlvbm91dHB1dFVuaXRGb3JDbGFzc05vIG91dHB1dCB1bml0IGZvciBjbGFzcyBvdXRwdXRVbml0Rm9yQ2xhc3NGb3JUZXN0aW5nTm8gb3V0cHV0IHVuaXQgZm9yIG1lbWJlciBvdXRwdXRVbml0Rm9yTWVtYmVyRm9yVGVzdGluZ2NvbnN0YW50c0ZvclRlc3RpbmdvdXRwdXRVbml0Rm9yQ29uc3RhbnRvdXRwdXRVbml0Rm9yQ29uc3RhbnRGb3JUZXN0aW5naXNEZWZlcnJlZENsYXNzaGFzT25seU5vbkRlZmVycmVkSW1wb3J0UGF0aHNvdXRwdXRVbml0RnJvbW91dHB1dFVuaXRUb2hhc09ubHlOb25EZWZlcnJlZEltcG9ydFBhdGhzVG9Db25zdGFudHJlZ2lzdGVyQ29uc3RhbnREZWZlcnJlZFVzZWdldEltcG9ydERlZmVyTmFtZU5vIGRlZmVycmVkIG5hbWUgZm9yIGdldEltcG9ydE5hbWVzY29tcHV0ZURlZmVycmVkTWFwb21pdHRlZFVuaXRzPHVubmFtZWQ+cGFydEZpbGVOYW1lc0RlcGVuZGVuY2llc3JlZ2lzdGVySW1wb3J0RGVwZW5kZW5jeUluZm9UeXBlRGVwZW5kZW5jeVZpc2l0b3JfZGVwZW5kZW5jaWVzX2ltcG9ydF9jb21tb25FbGVtZW50c3Zpc2l0RnV0dXJlT3JUeXBldW5hbGlhc2VkcGFyYW1ldGVyVHlwZXNvcHRpb25hbFBhcmFtZXRlclR5cGVzbmFtZWRQYXJhbWV0ZXJUeXBlc3Zpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGV2aXNpdFR5cGVWYXJpYWJsZVR5cGVkZWZlcnJlZFBhcnRGaWxlTmFtZW91dFBhdGhvdXROYW1lLnBhcnQuanNkYXJ0MmpzLmRpYWdub3N0aWNzLmNvZGVfbG9jYXRpb25Db2RlTG9jYXRpb25yZWxhdGl2aXplU2NoZW1lTG9jYXRpb25QYWNrYWdlTG9jYXRpb25VcmlMb2NhdGlvbkFueUxvY2F0aW9uZHVtcF9pbmZvQ2h1bmtlZENvbnZlcnNpb25TaW5rU3RyaW5nQ29udmVyc2lvblNpbmtJbnRlcmNlcHRvckNvbnN0YW50VmFsdWVHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0anNBc3RFbGVtZW50SW5mb0NvbGxlY3Rvcl9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzX2VudGl0eVRvSW5mb19jb25zdGFudFRvSW5mb19vdXRwdXRUb0luZm9fY29uc3RhbnRUb05vZGVfbm9kZURhdGFfdW5pdEluZm9Gb3JDb25zdGFudHNob3VsZEtlZXBpbXBhY3RzaW5saW5lQ291bnRsaWJuYW1lc2l6ZU9mZnVuY3Rpb25JbmZvdmlzaXRGdW5jdGlvbnRvcExldmVsRnVuY3Rpb25zZmllbGRJbmZvdG9wTGV2ZWxWYXJpYWJsZXNjbGF6el9yZXN1bHRPZk1lbWJlcnJlc3VsdE9mTWVtYmVyX3Jlc3VsdE9mUGFyYW1ldGVycmVzdWx0T2ZQYXJhbWV0ZXJjb250YWluaW5nQ2xhc3Npc0RlZmluaXRlbHlUcnVlY29kZU9mX3VuaXRJbmZvRm9yTWVtYmVyZmllbGREYXRhZmllbGRBbmFseXNpc2dldEZpZWxkRGF0YWNvdmVyYWdlSWRjbG9zdXJlU2l6ZV9hZGRDbG9zdXJlSW5mb191bml0SW5mb0ZvckNsYXNzZnVuY3Rpb25zY2xvc3VyZUluZm9jbG9zdXJlc0NsYXNzIG1lbWJlciBub3QgYSBmdW5jdGlvbiBvciBmaWVsZG5lZWRlZENsYXNzZXN2aXNpdENsb3N1cmVDbGFzc2NhbGxNZXRob2Rpc0ZhY3RvcnlDb25zdHJ1Y3RvcmluZmVycmVkUGFyYW1ldGVyVHlwZXNwYXJhbWV0ZXJJbmRleHNpZGVFZmZlY3RzZ2V0U2lkZUVmZmVjdHNPZkVsZW1lbnRpbmxpbmVkQ291bnRmdW5jdGlvbktpbmRuZXN0ZWRDbG9zdXJlc2Nsb3N1cmVfaW5mb0Zyb21PdXRwdXRVbml0Z2VuZXJhdGVkU2l6ZVNlbGVjdGlvbnNlbGVjdGVkRW50aXR5cmVjZWl2ZXJDb25zdHJhaW50SW5mb1JlcG9ydGVycmVwb3J0SW5saW5lZGlubGluZWRGcm9tRHVtcCBpbmZvdXNlQmluYXJ5Rm9ybWF0aW5mb0NvbGxlY3Rvcl9wcm9ncmFtU2l6ZV9lbnRpdHlUb05vZGVzaW5saW5lTWFwX3N0YWNrRHVtcCBJbmZvcmVnaXN0ZXJJbXBhY3R1bnJlZ2lzdGVySW1wYWN0Z2V0UmV0YWluaW5nc2VsZWN0aW9uc2xvY2F0ZU1lbWJlcnNyZWdpc3RlckVudGl0eUFzdHJlZ2lzdGVyQ29uc3RhbnRBc3RzaG91bGRFbWl0VGV4dGVudGVyTm9kZWVtaXRfdGV4dGV4aXROb2RlY2xvc2luZ3NpemVPZk5vZGVhc3RhbGxJbmZvYnVpbGREdW1wSW5mb0RhdGFkdW1wSW5mb0JpbmFyeWR1bXBJbmZvSnNvbmpzb25CdWZmZXJzdGFydENodW5rZWRDb252ZXJzaW9uaXNCYWNrd2FyZENvbXBhdGlibGVpbmZvLmpzb25WaWV3IHRoZSBkdW1wZWQgLmluZm8uanNvbiBmaWxlIGF0IGh0dHBzOi8vZGFydC1sYW5nLmdpdGh1Yi5pby9kdW1wLWluZm8tdmlzdWFsaXplci5pbmZvLmRhdGFVc2UgYHBhY2thZ2U6ZGFydDJqc19pbmZvYCB0byBwYXJzZSBhbmQgcHJvY2VzcyB0aGUgZHVtcGVkIC5pbmZvLmRhdGEgZmlsZS5zdG9wd2F0Y2hmdW5jdGlvbkVudGl0aWVzc2VsZWN0aW9udXNlSW5mb2ZpZWxkRW50aXR5b3V0ZXJJbmZvaW5saW5lZGlubGluZWRJbmZvZGVmZXJyZWRGaWxlc2VudHJ5cG9pbnRkYXJ0MmpzVmVyc2lvbmNvbXBpbGF0aW9uTW9tZW50Y29tcGlsYXRpb25EdXJhdGlvbnRvSnNvbkR1cmF0aW9uZHVtcEluZm9EdXJhdGlvbm5vU3VjaE1ldGhvZEVuYWJsZWRpc05vU3VjaE1ldGhvZFVzZWRpc1J1bnRpbWVUeXBlVXNlZGlzSXNvbGF0ZUluVXNlaXNGdW5jdGlvbkFwcGx5VXNlZGlzTWlycm9yc1VzZWRtaW5pZmllZF9Db2RlRGF0YWVudGl0aWVzRW50aXR5TGlicmFyeUVudGl0eUltcG9ydEVudGl0eWltcG9ydCggZGVmZXJyZWRDbGFzc0VudGl0eWlzQ2xvc3VyZVR5cGVkZWZFbnRpdHlUeXBlVmFyaWFibGVFbnRpdHl0eXBlRGVjbGFyYXRpb25GaWVsZEVudGl0eUZ1bmN0aW9uRW50aXR5cGFyYW1ldGVyU3RydWN0dXJlU1lOQ19TVEFSQVNZTkNfU1RBUmlzWWllbGRpbmdhc3luY1BhcnNlclN0YXRlQ29uc3RydWN0b3JFbnRpdHlDb25zdHJ1Y3RvckJvZHlFbnRpdHlMb2NhbFBhcmFtZXRlclN0cnVjdHVyZXBhcmFtZXRlci1zdHJ1Y3R1cmVyZXF1aXJlZFBhcmFtZXRlcnNmcm9tVHlwZW9wdGlvbmFsUGFyYW1ldGVyc3RvdGFsUGFyYW1ldGVyc2NhbGxTdHJ1Y3R1cmVzaG9ydFRleHRQYXJhbWV0ZXJTdHJ1Y3R1cmUocmVxdWlyZWRQYXJhbWV0ZXJzPXBvc2l0aW9uYWxQYXJhbWV0ZXJzPW5hbWVkUGFyYW1ldGVycz17fSx0eXBlUGFyYW1ldGVycz1kYXJ0MmpzLmVucXVldWVTdGF0aWNVc2VLaW5kVHlwZVVzZUtpbmRfcmVzb2x1dGlvbmNvZGVnZW5FbnF1ZXVlckZvclRlc3RpbmdFbnF1ZXVlUmVzb2x1dGlvbkVucXVldWVyIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC5vbkVtcHR5Rm9yVGVzdGluZ3NraXBFbnF1ZXVlckNoZWNrRm9yVGVzdGluZ2lzUmVzb2x1dGlvblF1ZXVlcXVldWVJc0VtcHR5RW5xdWV1ZXJMaXN0ZW5lcnJlZ2lzdGVySW5zdGFudGlhdGVkVHlwZWlzR2xvYmFsbmF0aXZlVXNhZ2VyZWdpc3RlckltcGxlbWVudGVkQ2xhc3NyZWdpc3RlckdldE9mU3RhdGljRnVuY3Rpb25yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXJyZWdpc3RlclVzZWRFbGVtZW50cmVnaXN0ZXJVc2VkQ29uc3RhbnRvblF1ZXVlT3Blbm9uUXVldWVFbXB0eXJlY2VudENsYXNzZXNvblF1ZXVlQ2xvc2VkRW5xdWV1ZXJJbXBsX2ltcGFjdFN0cmF0ZWd5Y2hlY2tDbGFzc3Byb2Nlc3NTdGF0aWNVc2Vwcm9jZXNzVHlwZVVzZXByb2Nlc3NEeW5hbWljVXNlcHJvY2Vzc0NvbnN0YW50VXNlY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5cmVzb2x1dGlvbi5jaGVja2RpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlc19yZWNlbnRDbGFzc2VzX3JlY2VudENvbnN0YW50c193b3JsZEJ1aWxkZXJfd29ya0l0ZW1CdWlsZGVyX2Fubm90YXRpb25zRGF0YV9pbXBhY3RWaXNpdG9yX3F1ZXVlcmVzb2x1dGlvbiBlbnF1ZXVlciBxdWV1ZSBpcyBub3QgZW1wdHkuX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZWdsb2JhbERlcGVuZGVuY3lyZXNvbHV0aW9uLnR5cGVVc2VyZWdpc3RlclR5cGVJbnN0YW50aWF0aW9uX2FwcGx5Q2xhc3NVc2Vwcm9jZXNzQ2xhc3NNZW1iZXJzdXNlU2V0VW5lbnF1ZXVlZCB1c2Ugb2YgTWVtYmVyVXNlLk5PUk1BTE1lbWJlclVzZS5DTE9TVVJJWkVfSU5TVEFOQ0VNZW1iZXJVc2UuQ0xPU1VSSVpFX1NUQVRJQ19hcHBseU1lbWJlclVzZV9hZGRUb1dvcmtMaXN0X3JlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcmdldCBvZiBzdGF0aWMgZnVuY3Rpb25DbGFzc1VzZS5JTlNUQU5USUFURURpbnN0YW50aWF0ZWQgY2xhc3NDbGFzc1VzZS5JTVBMRU1FTlRFRGltcGxlbWVudGVkIGNsYXNzcmVzb2x1dGlvbi5keW5hbWljVXNlcmVzb2x1dGlvbi5jb25zdGFudFVzZWNvbnN0YW50IHVzZXJlc29sdXRpb24uc3RhdGljVXNlX3JlZ2lzdGVySXNDaGVja3JlZ2lzdGVyVHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxfcmVnaXN0ZXJOYW1lZFR5cGVWYXJpYWJsZU5ld1J0aXJlZ2lzdGVySXNDaGVja3JlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGljbG9zdXJpemVkIG1lbWJlcl9mb3JFYWNoaXNNZW1iZXJQcm9jZXNzZWRyZWdpc3RlclByb2Nlc3NlZE1lbWJlcnJlY2VudHNfb25RdWV1ZUVtcHR5RW5xdWV1ZXIocHJvY2Vzc2VkTWVtYmVyc3JlZ2lzdGVyUHJvY2Vzc2VkRWxlbWVudEludGVybmFsd29ya0l0ZW1jcmVhdGVXb3JrSXRlbVJlc29sdXRpb24gd29yayBsaXN0IGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGFkZCB1c2VkIGVsZW1lbnRFbnF1ZXVlckltcGxJbXBhY3RWaXNpdG9yV29ya0l0ZW1CdWlsZGVyZGFydDJqcy5mcm9udGVuZF9zdHJhdGVneUZyb250ZW5kU3RyYXRlZ3lub1N1Y2hNZXRob2RSZWdpc3RyeWltcGFjdEJ1aWxkZXJBbm5vdGF0aW9uUHJvY2Vzc29yZXh0cmFjdE5hdGl2ZUFubm90YXRpb25zZXh0cmFjdEpzSW50ZXJvcEFubm90YXRpb25zcHJvY2Vzc0pzSW50ZXJvcEFubm90YXRpb25zbmF0aXZlRGF0YUJ1aWxkZXJJbXBhY3RDYWNoZURlbGV0ZXJkYXJ0MmpzLmFic3RyYWN0X3ZhbHVlX2RvbWFpblByaW1pdGl2ZUNvbnN0YW50VmFsdWVBYnN0cmFjdEJvb2xUcnVlRmFsc2VNYXliZWlzRGVmaW5pdGVseUZhbHNlaXNQb3RlbnRpYWxseUZhbHNldHJ1ZU9yTWF5YmV0cnVlT3JGYWxzZW1heWJlT3JGYWxzZUFic3RyYWN0Qm9vbC5jcmVhdGVEb21haW5jcmVhdGVTZWxlY3RvclN0cmF0ZWd5QWJzdHJhY3RWYWx1ZUFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uYWJzdHJhY3RWYWx1ZWlzUHJlY2lzZUFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uKCwgaXNQcmVjaXNlOiBBYnN0cmFjdFZhbHVlRG9tYWlubm9uTnVsbFR5cGVncm93YWJsZUxpc3RUeXBlZml4ZWRMaXN0VHlwZXVpbnQzMVR5cGV1aW50MzJUeXBlcG9zaXRpdmVJbnRUeXBlY29uc3RMaXN0VHlwZWNvbnN0U2V0VHlwZWNvbnN0TWFwVHlwZWVtcHR5VHlwZXN5bmNTdGFySXRlcmFibGVUeXBlYXN5bmNGdXR1cmVUeXBlYXN5bmNTdGFyU3RyZWFtVHlwZWNyZWF0ZUZyb21TdGF0aWNUeXBlY2xhc3NSZWxhdGlvbkNsYXNzUmVsYXRpb24uc3VidHlwZWNyZWF0ZU5vbk51bGxFeGFjdGNyZWF0ZU51bGxhYmxlRXhhY3RjcmVhdGVOb25OdWxsU3ViY2xhc3NjcmVhdGVOb25OdWxsU3VidHlwZWNyZWF0ZU51bGxhYmxlU3VidHlwZWlzVHlwZWRBcnJheWNvdWxkQmVUeXBlZEFycmF5ZXhjbHVkZU51bGxpbmNsdWRlTnVsbGNvbnRhaW5zVHlwZWNvbnRhaW5zT25seVR5cGVpc0luc3RhbmNlT2ZPck51bGxpc0luc3RhbmNlT2Zpc0V4YWN0aXNFeGFjdE9yTnVsbGdldEV4YWN0Q2xhc3Npc1ByaW1pdGl2ZU51bWJlcmlzUHJpbWl0aXZlQm9vbGVhbmlzUHJpbWl0aXZlQXJyYXlpc0luZGV4YWJsZVByaW1pdGl2ZWlzRml4ZWRBcnJheWlzRXh0ZW5kYWJsZUFycmF5aXNNdXRhYmxlQXJyYXlpc011dGFibGVJbmRleGFibGVpc0FycmF5aXNQcmltaXRpdmVTdHJpbmdpc0ludGVyY2VwdG9yaXNJbnRlZ2VyaXNVSW50MzJpc1VJbnQzMWlzUG9zaXRpdmVJbnRlZ2VyaXNQb3NpdGl2ZUludGVnZXJPck51bGxpc0ludGVnZXJPck51bGxpc051bWJlcmlzTnVtYmVyT3JOdWxsaXNEb3VibGVpc0RvdWJsZU9yTnVsbGlzQm9vbGVhbmlzQm9vbGVhbk9yTnVsbGlzU3RyaW5naXNTdHJpbmdPck51bGxpc1ByaW1pdGl2ZU9yTnVsbHVuaW9uT2ZNYW55YXJlRGlzam9pbnRjb21wdXRlQWJzdHJhY3RWYWx1ZUZvckNvbnN0YW50aXNDb250YWluZXJjcmVhdGVDb250YWluZXJWYWx1ZW9yaWdpbmFsVmFsdWVhbGxvY2F0aW9uTm9kZWFsbG9jYXRpb25FbGVtZW50Z2V0Q29udGFpbmVyRWxlbWVudFR5cGVnZXRDb250YWluZXJMZW5ndGhjcmVhdGVTZXRWYWx1ZWdldFNldEVsZW1lbnRUeXBlY3JlYXRlTWFwVmFsdWVnZXRNYXBLZXlUeXBlZ2V0TWFwVmFsdWVUeXBlaXNEaWN0aW9uYXJ5Y3JlYXRlRGljdGlvbmFyeVZhbHVlbWFwcGluZ3Njb250YWluc0RpY3Rpb25hcnlLZXlnZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXlpc1NwZWNpYWxpemF0aW9uT2ZzcGVjaWFsaXphdGlvbmdlbmVyYWxpemF0aW9uZ2V0R2VuZXJhbGl6YXRpb25nZXRBbGxvY2F0aW9uTm9kZWdldEFsbG9jYXRpb25FbGVtZW50aXNQcmltaXRpdmVWYWx1ZWNyZWF0ZVByaW1pdGl2ZVZhbHVlZ2V0UHJpbWl0aXZlVmFsdWVjb21wdXRlUmVjZWl2ZXJuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nZ2V0QWJzdHJhY3RWYWx1ZUZvck5hdGl2ZU1ldGhvZFBhcmFtZXRlclR5cGVzdXBlcnNldHN1YnNldGlzSW5sb2NhdGVTaW5nbGVNZW1iZXJpc0pzSW5kZXhhYmxlQW5kSXRlcmFibGVpc0ZpeGVkTGVuZ3RoSnNJbmRleGFibGVnZXRDb21wYWN0VGV4dFRyaXZpYWxBYnN0cmFjdFZhbHVlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW5Ucml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXlUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0RpY3Rpb25hcnlLZXlUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRNYXBWYWx1ZVR5cGVUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRNYXBLZXlUeXBlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4uZ2V0U2V0RWxlbWVudFR5cGVUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRDb250YWluZXJFbGVtZW50VHlwZVRyaXZpYWxTZWxlY3RvclN0cmF0ZWd5Y3JlYXRlU2VsZWN0b3JDb25zdHJhaW50c2luaXRpYWxDb25zdHJhaW50YXBwbGllZFVubmFtZWR3b3JsZGFwcGxpZXNVbm5hbWVkVHJpdmlhbFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50c2FkZFJlY2VpdmVyQ29uc3RyYWludGNhbkhpdFRyaXZpYWxVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHM6bWFza3NVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHNTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3lUeXBlR3JhcGhJbmZlcnJlcmNvbnRhaW5lcl90eXBlX21hc2suZGFydGRpY3Rpb25hcnlfdHlwZV9tYXNrLmRhcnRmbGF0X3R5cGVfbWFzay5kYXJ0Zm9yd2FyZGluZ190eXBlX21hc2suZGFydG1hcF90eXBlX21hc2suZGFydHNldF90eXBlX21hc2suZGFydHR5cGVfbWFzay5kYXJ0dW5pb25fdHlwZV9tYXNrLmRhcnR2YWx1ZV90eXBlX21hc2suZGFydENvbW1vbk1hc2tzX2Nsb3NlZFdvcmxkX2R5bmFtaWNUeXBlX25vbk51bGxUeXBlX251bGxUeXBlX2ludFR5cGVfdWludDMyVHlwZV91aW50MzFUeXBlX3Bvc2l0aXZlSW50VHlwZV9kb3VibGVUeXBlX251bVR5cGVfYm9vbFR5cGVfZnVuY3Rpb25UeXBlX2xpc3RUeXBlX2NvbnN0TGlzdFR5cGVfZml4ZWRMaXN0VHlwZV9ncm93YWJsZUxpc3RUeXBlX3NldFR5cGVfY29uc3RTZXRUeXBlX21hcFR5cGVfY29uc3RNYXBUeXBlX3N0cmluZ1R5cGVfdHlwZVR5cGVfc3luY1N0YXJJdGVyYWJsZVR5cGVfYXN5bmNGdXR1cmVUeXBlX2FzeW5jU3RhclN0cmVhbVR5cGVfaW5kZXhhYmxlUHJpbWl0aXZlVHlwZV9yZWFkYWJsZUFycmF5VHlwZV9tdXRhYmxlQXJyYXlUeXBlX3VubW9kaWZpYWJsZUFycmF5VHlwZV9pbnRlcmNlcHRvclR5cGVfY2Fub25pY2FsaXplZFR5cGVNYXNrc2dldENhY2hlZE1hc2tjcmVhdGVNYXNrY2FjaGVkTWFza3NpbmRleGFibGVQcmltaXRpdmVUeXBlcmVhZGFibGVBcnJheVR5cGVtdXRhYmxlQXJyYXlUeXBldW5tb2RpZmlhYmxlQXJyYXlUeXBlaW50ZXJjZXB0b3JUeXBlc2F0aXNmaWVzaW50ZXJzZWN0c0NsYXNzUmVsYXRpb24uZXhhY3RDbGFzc1JlbGF0aW9uLnRoaXNFeHByZXNzaW9udHlwZU1hc2tfY29udGFpbnNUeXBlX2NvbnRhaW5zT25seVR5cGVjb250YWluc09ubHlfaXNJbnN0YW5jZU9mT3JOdWxsaXNJbXBsZW1lbnRlZGV4cHJlc3Npb25NYXNraXNEaXNqb2ludGlzTnVsbGFibGVfaXNOdWxsc2luZ2xlQ2xhc3Npc1ZhbHVldmFsdWVNYXNrX2NhbkJlUHJpbWl0aXZlTnVtYmVyX2NhbkJlUHJpbWl0aXZlQXJyYXlfY2FuQmVQcmltaXRpdmVCb29sZWFuX2NhbkJlUHJpbWl0aXZlU3RyaW5nX2lzSW5kZXhhYmxlUHJpbWl0aXZlY29udGFpbnNPbmx5U3RyaW5nY29udGFpbnNPbmx5SW50Y29udGFpbnNPbmx5TnVtX2lzTnVtYmVyT3JOdWxsY29udGFpbnNPbmx5RG91YmxlY29udGFpbnNPbmx5Qm9vbF9pc0Jvb2xlYW5Pck51bGxfaXNQcmltaXRpdmVPck51bGxmb3J3YXJkVG9oYXNBbnlTdHJpY3RTdWJjbGFzc21peGluVXNlc09mY29udGFpbnNNYXNraXNJbk1hc2tnZXRWYWx1ZUZvcktleUNvbnRhaW5lclR5cGVNYXNrY29udGFpbmVyLXR5cGUtbWFza3JlYWRUcmVlTm9kZU9yTnVsbHJlYWRNZW1iZXJPck51bGxUeXBlTWFza0tpbmQuY29udGFpbmVyd3JpdGVUcmVlTm9kZU9yTnVsbHdyaXRlTWVtYmVyT3JOdWxsZXF1YWxzRGlzcmVnYXJkTnVsbGZvcndhcmRJbnRlcnNlY3Rpb25pc0VtcHR5T3JOdWxsbmV3RWxlbWVudFR5cGVuZXdGb3J3YXJkVG9Db250YWluZXIoLCBlbGVtZW50OiAsIGxlbmd0aDogRGljdGlvbmFyeVR5cGVNYXNrZGljdGlvbmFyeS10eXBlLW1hc2tfdHlwZU1hcHR5cGVNYXBUeXBlTWFza0tpbmQuZGljdGlvbmFyeW5ld0tleVR5cGVuZXdWYWx1ZVR5cGVEaWN0aW9uYXJ5KCwga2V5OiB2YWx1ZTogLCBtYXA6IEZsYXRUeXBlTWFza2ZsYXQtdHlwZS1tYXNrRU1QVFlFWEFDVFNVQkNMQVNTU1VCVFlQRW5vbk51bGxFbXB0eW5vbk51bGxFeGFjdG5vbk51bGxTdWJjbGFzc25vbk51bGxTdWJ0eXBlbm9ybWFsaXplZGhhc0FueVN0cmljdFN1YnR5cGVoYXNPbmx5U3ViY2xhc3Nlc2NvbW1vbk1hc2tzcmVhZENsYXNzT3JOdWxsVHlwZU1hc2tLaW5kLmZsYXR3cml0ZUNsYXNzT3JOdWxsX2NsYXNzUXVlcnlDbGFzc1F1ZXJ5LkVYQUNUaXNTdWJjbGFzc0NsYXNzUXVlcnkuU1VCQ0xBU1NDbGFzc1F1ZXJ5LlNVQlRZUEVpc1VuaW9uaXNGb3J3YXJkaW5naXNTaW5nbGVJbXBsZW1lbnRhdGlvbk9mZmxhdE90aGVyb3RoZXJCYXNldW5pb25TYW1ldW5pb25TdHJpY3RTdWJjbGFzc3VuaW9uU3RyaWN0U3VidHlwZWNvbWJpbmVkY29tbW9uU3ViY2xhc3Nlc1N1YmNsYXNzUmVzdWx0S2luZC5FTVBUWVN1YmNsYXNzUmVzdWx0S2luZC5FWEFDVDFTdWJjbGFzc1Jlc3VsdEtpbmQuRVhBQ1QyU3ViY2xhc3NSZXN1bHRLaW5kLlNVQkNMQVNTMVN1YmNsYXNzUmVzdWx0S2luZC5TVUJDTEFTUzJTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTFTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTJTdWJjbGFzc1Jlc3VsdEtpbmQuU0VUX2lzRGlzam9pbnRIZWxwZXJzdHJpY3RTdWJjbGFzc2VzT2ZzdHJpY3RTdWJ0eXBlc09maW50ZXJzZWN0aW9uU2FtZWludGVyc2VjdGlvblN0cmljdFN1YmNsYXNzaW50ZXJzZWN0aW9uRW1wdHloYXNFbGVtZW50SW5oYXNBbnlTdWJjbGFzc1RoYXRNaXhlc2hhc0FueVN1YmNsYXNzVGhhdEltcGxlbWVudHNoYXNBbnlTdWJjbGFzc09mTWl4aW5Vc2VUaGF0SW1wbGVtZW50c21peGluVXNlc25lZWRzTm9TdWNoTWV0aG9kaW5jbHVkZXNDbG9zdXJlQ2FsbGV2ZXJ5U3VidHlwZUlzU3ViY2xhc3NPZk9yTWl4aW5Vc2VPZmlzU3ViY2xhc3NPZk1peGluVXNlT2ZvdGhlck1hc2tbZW1wdHldbnVsbHxleGFjdD1zdWJjbGFzcz1zdWJ0eXBlPUZvcndhcmRpbmdUeXBlTWFza1N1YmNsYXNzIHNob3VsZCBpbXBsZW1lbnQgaGFzaENvZGUgZ2V0dGVyQWxsb2NhdGlvblR5cGVNYXNrTWFwVHlwZU1hc2ttYXAtdHlwZS1tYXNrVHlwZU1hc2tLaW5kLm1hcG5ld01hcFR5cGVNYXNrTWFwKFNldFR5cGVNYXNrc2V0LXR5cGUtbWFza1R5cGVNYXNrS2luZC5zZXRTZXQoSW5jcmVhc2luZ1R5cGVNYXNrU2V0aXNBbGxfbWFza3M8YWxsPjxub25lPlR5cGVNYXNrU2VsZWN0b3JTdHJhdGVneVR5cGVNYXNrS2luZFR5cGVNYXNrS2luZC51bmlvblR5cGVNYXNrS2luZC52YWx1ZWZsYXRjb250YWluZXJkaWN0aW9uYXJ5VHlwZU1hc2tDYW5ub3QgY3JlYXRlIGV4YWN0IHR5cGUgbWFzayBmb3IgdW5pbnN0YW50aWF0ZWQgLgpleGFjdE9yRW1wdHlDYW5ub3QgY3JlYXRlIHN1YmNsYXNzIHR5cGUgbWFzayBmb3IgdW5pbnN0YW50aWF0ZWQgdG9wbW9zdGdldEx1Yk9mSW5zdGFudGlhdGVkU3ViY2xhc3Nlc2dldEx1Yk9mSW5zdGFudGlhdGVkU3VidHlwZXNub25OdWxsRXhhY3RPckVtcHR5dW5pb25PZlVuZXhwZWN0ZWQgVHlwZU1hc2tLaW5kIG5vbkZvcndhcmRpbmdNYXNrYXNzZXJ0SXNOb3JtYWxpemVkIGlzIG5vdCBub3JtYWxpemVkOiBnZXROb3ROb3JtYWxpemVkUmVhc29uRXhhY3QgIGlzIG5vdCBpbnN0YW50aWF0ZWQuU3ViY2xhc3MgIGRvZXMgbm90IGhhdmUgYW55IHN1YmNsYXNzZXMuU3VidHlwZSAgb25seSBoYXMgc3ViY2xhc3Nlcy5zdWJtYXNrZGlzam9pbnRNYXNrc3N1Ym1hc2tSZWFzb25TdWJtYXNrIFVua25vd24gdHlwZSBtYXNrIFVuaW9uVHlwZU1hc2t1bmlvbi10eXBlLW1hc2tNQVhfVU5JT05fTEVOR1RIUEVSRk9STV9FWFRSQV9DT05UQUlOU19DSEVDS2Rpc2pvaW50dW5pb25PZkhlbHBlcmZsYXRNYXNraW5MaXN0SW5kZXhjb3ZlcmVkbmV3TWFza2ZsYXR0ZW51c2VTdWJjbGFzc21hc2tzQmFzZXNjYW5kaWRhdGVzY29tbW9uU3VwZXJ0eXBlc09mYmVzdEVsZW1lbnRiZXN0S2luZGJlc3RTaXplaXNJbnN0YW50aWF0ZWRTdHJpY3RTdWJjbGFzc2lzRXhwbGljaXRseUluc3RhbnRpYXRlZHN0cmljdFN1YmNsYXNzQ291bnRzdHJpY3RTdWJ0eXBlQ291bnRuZXdMaXN0aW50ZXJzZWN0aW9uc25ld0l0ZXJhYmxlc2xvd0NvbnRhaW5zQ2hlY2tjb250YWluZWRJbkFueU9mbWFza0Rpc3JlZ2FyZE51bGxkaXNqb2ludE1hc2tjb250YWluZWRUeXBlTWFzayBiYXNlZCBjb250YWlubWVudCBjaGVjayBmYWlsZWQgZm9yIG1hc2tzU3RyaW5nVW5pb24oVmFsdWVUeXBlTWFza3ZhbHVlLXR5cGUtbWFza1ZhbHVlKGZvcm1hdFR5cGVFbXB0eW51bGxGbGFnc3ViRmxhZyB8IGlzQ2FsbGVkT25jZXRocm93c0Fsd2F5c3R5cGVPZlNlbmR0eXBlT2ZHZXR0ZXJ0eXBlT2ZJdGVyYXRvcnR5cGVPZkl0ZXJhdG9yTW92ZU5leHR0eXBlT2ZJdGVyYXRvckN1cnJlbnRHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGFjb21wcmVzc1R5cGVzSW5mZXJyZXJhbmFseXplTWFpbmlzVHJpdmlhbHJlc3VsdFR5cGVPZlNlbGVjdG9yaXNGaXhlZEFycmF5Q2hlY2tlZEZvckdyb3dhYmxldHlwZU9mTmV3TGlzdHR5cGVPZkxpc3RMaXRlcmFsVHlwZSBpbmZlcmVuY2V0eXBlc0luZmVycmVySW50ZXJuYWxyZXN1bHRzRm9yVGVzdGluZ21haW5FbGVtZW50cmVzdWx0c25vU3VjaE1ldGhvZERhdGFjYXRlZ29yaXplQ29tcGxleEltcGxlbWVudGF0aW9uc0dsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzSW1wbGdsb2JhbC10eXBlLWluZmVyZW5jZS1yZXN1bHRzX2RlYWRGaWVsZFJlc3VsdF9kZWFkTWV0aG9kUmVzdWx0X3RyaXZpYWxQYXJhbWV0ZXJSZXN1bHRtZW1iZXJSZXN1bHRzcGFyYW1ldGVyUmVzdWx0c2NoZWNrZWRGb3JHcm93YWJsZUxpc3RzcmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldF9hbGxvY2F0ZWRMaXN0c2dldE1lbWJlckNvbnRleHROb2RlcmVhZExvY2FsTWFwcmVhZFRyZWVOb2Rlc2FsbG9jYXRlZExpc3RzcmVhZFRyZWVOb2RlTWFwd3JpdGVMb2NhbE1hcHdyaXRlVHJlZU5vZGVzd3JpdGVUcmVlTm9kZU1hcHVuZXhwZWN0ZWQgaW5wdXQ6IENvbnN0cnVjdG9yQm9keUVsZW1lbnRzIGFyZSBjcmVhdGVkIGFmdGVyIGdsb2JhbCB0eXBlIGluZmVyZW5jZSwgbm8gZGF0YSBpcyBhdmFpYWJsZSBmb3IgdGhlbS5pc0Nsb3N1cmVDYWxsaXNJbmRleFNldHJldHVybnNMaXN0RWxlbWVudFR5cGVyZXR1cm5zTWFwVmFsdWVUeXBldHlwZU9mTWVtYmVyV2l0aFNlbGVjdG9yaXNJbmRleFVuZXhwZWN0ZWQgbWVtYmVyIGN0b3JDYWxsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdEltcGxnbG9iYWwtdHlwZS1pbmZlcmVuY2UtbWVtYmVyLXJlc3VsdF9kYXRhd3JpdGVWYWx1ZU9yTnVsbFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c190cml2aWFsTWVtYmVyUmVzdWx0VHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdC53cml0ZVRvRGF0YVNpbmtEZWFkRmllbGRHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0ZG9tYWluRGVhZEZpZWxkR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdC53cml0ZVRvRGF0YVNpbmtEZWFkTWV0aG9kR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdGRhcnQyanMuc291cmNlX2luZm9ybWF0aW9uSmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbmhhc1NvdXJjZUluZm9ybWF0aW9ucG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbndyaXRlVG9EYXRhU2lua0ludGVybmFsc3RhcnRQb3NpdGlvbmlubmVyUG9zaXRpb25lbmRQb3NpdGlvbnNvdXJjZUxvY2F0aW9uc2lubGluaW5nQ29udGV4dEZyYW1lQ29udGV4dGZyYW1lLWNvbnRleHRjYWxsSW5mb3JtYXRpb25pbmxpbmVkTWV0aG9kTmFtZShGcmFtZUNvbnRleHQ6IFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ljcmVhdGVCdWlsZGVyRm9yQ29udGV4dGJ1aWxkU291cmNlTWFwcGVkTWFya2Vyb25Db21wbGV0ZVNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcmZvckNvbnRleHRidWlsZERlY2xhcmF0aW9uYnVpbGRTdHViYnVpbGRHZW5lcmljYnVpbGRDcmVhdGVidWlsZFJldHVybmJ1aWxkSW1wbGljaXRSZXR1cm5idWlsZExvb3BidWlsZEdldGJ1aWxkU2V0YnVpbGRDYWxsYnVpbGRJZmJ1aWxkTmV3YnVpbGRUaHJvd2J1aWxkQXNzZXJ0YnVpbGRWYXJpYWJsZURlY2xhcmF0aW9uYnVpbGRBd2FpdGJ1aWxkWWllbGRidWlsZEFzeW5jQm9keWJ1aWxkQXN5bmNFeGl0YnVpbGRGb3JlaWduQ29kZWJ1aWxkU3RyaW5nSW50ZXJwb2xhdGlvbmJ1aWxkRm9ySW5JdGVyYXRvcmJ1aWxkRm9ySW5Nb3ZlTmV4dGJ1aWxkRm9ySW5DdXJyZW50YnVpbGRGb3JJblNldGJ1aWxkSW5kZXhidWlsZEluZGV4U2V0YnVpbGRCaW5hcnlidWlsZFVuYXJ5YnVpbGRUcnlidWlsZENhdGNoYnVpbGRJc2J1aWxkQXNidWlsZFN3aXRjaGJ1aWxkU3dpdGNoQ2FzZWJ1aWxkTGlzdExpdGVyYWxidWlsZEdvdG9Tb3VyY2VMb2NhdGlvbnNvdXJjZS1sb2NhdGlvbnNvdXJjZVVyaXNvdXJjZU5hbWVoYXNTb3VyY2VMb2NhdGlvbnJlYWRVcmlzb3VyY2VMb2NhdGlvbndyaXRlVXJpOltEaXJlY3RTb3VyY2VMb2NhdGlvbkFic3RyYWN0U291cmNlTG9jYXRpb25fc291cmNlRmlsZV9sb2NhdGlvbkludmFsaWQgc291cmNlIGxvY2F0aW9uIGluIG9mZnNldD0sIGxlbmd0aD1mcm9tTG9jYXRpb25mcm9tT3RoZXJPZmZzZXRTb3VyY2VMb2NhdGlvbk5vU291cmNlTG9jYXRpb25NYXJrZXJzaG9ydE5hbWU8bm8tbG9jYXRpb24+RnJhbWVFbnRyeXB1c2hMb2NhdGlvbmlzRW1wdHlQb3Bpc1B1c2hpc1BvcGNvbXB1dGVFbGVtZW50TmFtZUZvclNvdXJjZU1hcHNjb21wdXRlU3R1YlN1ZmZpeFtmdW5jdGlvbi1lbnRyeSRwb3NpdGlvbmFsQXJndW1lbnRDb3VudGdldE9yZGVyZWROYW1lZEFyZ3VtZW50c2pzX2JhY2tlbmQuYmFja2VuZEZ1bmN0aW9uQ29tcGlsZXJpbml0aWFsaXplRnVuY3Rpb25JbmxpbmVDYWNoZV91bmtub3duX211c3ROb3RJbmxpbmVfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGVfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGVfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZV9jYW5JbmxpbmVfY2FjaGVkRGVjaXNpb25zX25vSW5saW5lRnVuY3Rpb25zX3RyeUlubGluZUZ1bmN0aW9uc2ZvckVhY2hOb0lubGluZW1hcmtBc05vSW5saW5lZm9yRWFjaFRyeUlubGluZW1hcmtBc1RyeUlubGluZWNoZWNrRnVuY3Rpb25qOmdldEN1cnJlbnRDYWNoZURlY2lzaW9uRm9yVGVzdGluZ2NhbklubGluZWluc2lkZUxvb3BkZWNpc2lvbm1hcmtBc0lubGluYWJsZW9sZERlY2lzaW9uQ2FuJ3QgbWFyayAgYXMgbm9uLWlubGluYWJsZSBhbmQgaW5saW5hYmxlIGF0IHRoZSBzYW1lIHRpbWUubWFya0FzTm9uSW5saW5hYmxlbWFya2VkQXNOb0lubGluZW1hcmtlZEFzVHJ5SW5saW5lY2hlY2tlZE1vZGVIZWxwZXJzcnRpU3Vic3RpdHV0aW9uc3J0aUVuY29kZXJydGlSZWNpcGVFbmNvZGVydHJhY2VycnRpVGFnc2ZpeGVkTmFtZXNDb2RlZ2VuSW5wdXRzSW1wbEluZmVycmVkRGF0YWdldFNpZGVFZmZlY3RzT2ZTZWxlY3RvcmdldENhbm5vdFRocm93aXNDYWxsZWRJbkxvb3BnZXRNaWdodEJlUGFzc2VkVG9BcHBseUluZmVycmVkRGF0YUJ1aWxkZXJyZWdpc3RlclNpZGVFZmZlY3RzRnJlZWdldFNpZGVFZmZlY3RzQnVpbGRlcnJlZ2lzdGVyTWlnaHRCZVBhc3NlZFRvQXBwbHlnZXRDdXJyZW50bHlLbm93bk1pZ2h0QmVQYXNzZWRUb0FwcGx5YWRkRnVuY3Rpb25DYWxsZWRJbkxvb3ByZWdpc3RlckNhbm5vdFRocm93SW5mZXJyZWREYXRhSW1wbGluZmVycmVkLWRhdGFfZnVuY3Rpb25zQ2FsbGVkSW5Mb29wX3NpZGVFZmZlY3RzX3NpZGVFZmZlY3RzRnJlZUVsZW1lbnRzX2VsZW1lbnRzVGhhdENhbm5vdFRocm93X2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseWZ1bmN0aW9uc0NhbGxlZEluTG9vcHNpZGVFZmZlY3RzRnJlZUVsZW1lbnRzZWxlbWVudHNUaGF0Q2Fubm90VGhyb3dmdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHlmaWVsZE5ldmVyQ2hhbmdlc3NldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZXNldENoYW5nZXNJbnN0YW5jZVByb3BlcnR5c2V0QWxsU2lkZUVmZmVjdHNzZXREZXBlbmRzT25Tb21ldGhpbmdTaWRlIGVmZmVjdHMgaGF2ZSBub3QgYmVlbiBjb21wdXRlZCB5ZXQuX21ha2VTaWRlRWZmZWN0c0luZmVycmVkRGF0YUJ1aWxkZXJJbXBsX3NpZGVFZmZlY3RzQnVpbGRlcnNwcmVtYXR1cmVTaWRlRWZmZWN0QWNjZXNzZXNmb3JFYWNoTm9UaHJvd3Nmb3JFYWNoTm9TaWRlRWZmZWN0c0luZmVycmVkIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZC5zaWRlRWZmZWN0c0J1aWxkZXJzc2lkZUVmZmVjdHNCdWlsZGVyZW1wdHlXb3JrTGlzdGluUXVldWVkZXBlbmRpbmdUcml2aWFsSW5mZXJyZWREYXRhX2FsbFNpZGVFZmZlY3RzZGFydDJqcy5qc19tb2RlbC5zdHJhdGVneUtlcm5lbFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3lSZWNpcGVFbmNvZGVyUmVjaXBlRW5jb2RlckltcGxNb2R1bGFyRW1pdHRlckNvZGVFbWl0dGVyVGFza0pzQmFja2VuZFN0cmF0ZWd5X2VsZW1lbnRNYXBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXNfbmF0aXZlQ29kZWdlbkVucXVldWVyX25hbWVyX2NvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lcl9lbWl0dGVyVGFza19ydGlDaGVja3NCdWlsZGVyZ2VuZXJhdGVkQ29kZWNvZGVnZW5JbXBhY3RzRm9yVGVzdGluZ25hbWVyRm9yVGVzdGluZ25hdGl2ZUNvZGVnZW5FbnF1ZXVlcnJ0aUNoZWNrc0J1aWxkZXJGb3JUZXN0aW5nZ2V0R2VuZXJhdGVkQ29kZUZvclRlc3RpbmdKc0JhY2tlbmRTdHJhdGVneS5lbGVtZW50TWFwIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC5jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpc0N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC5ydGlDaGVja3NCdWlsZGVyUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQucnRpQ2hlY2tzQnVpbGRlckNsb3NlZFJ1bnRpbWVUeXBlc0NoZWNrcyBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLmxpdmVNZW1iZXJVc2FnZV9nbG9iYWxMb2NhbHNNYXBjbG9zdXJlRGF0YUJ1aWxkZXJjbG9zZWRXb3JsZEJ1aWxkZXJjb252ZXJ0Q2xvc2VkV29ybGRjbG9zdXJlTW9kZWxzbGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlcm5hdGl2ZURhdGFydGlOZWVkcnVudGltZVR5cGVzSW1wbG9uZVNob3RJbnRlcmNlcHRvckRhdGFpbnRlcmNlcHRvckRhdGFfb25Db2RlZ2VuRW5xdWV1ZXJTdGFydHByb2dyYW1FbnZtYWluQ29tcG9uZW50ZGFydFR5cGVzbGl2ZU5hdGl2ZUNsYXNzZXNjcmVhdGVFbWl0dGVybmF0aXZlRW1pdHRlcmdlbmVyYXRlQ29kZWVudGl0eUxvb2t1cGNvbXBvbmVudExvb2t1cHVzZURhdGFLaW5kc3JlZ2lzdGVyQ29kZWdlbldyaXRlcnJlZ2lzdGVyQ29kZWdlblJlYWRlcnJlZ2lzdGVyRW50aXR5TG9va3VwcmVnaXN0ZXJDb21wb25lbnRMb29rdXB0cmFuc2Zvcm1Db2RlZ2VuSW1wYWN0ZW1pdERpYWdub3N0aWNnZXRTb3VyY2VTcGFucmVnaXN0ZXJFbnRpdHlSZWFkZXJlYXJseU1lbWJlckluZGV4TGltaXRwcmVwYXJlRm9yQ29kZWdlblNlcmlhbGl6YXRpb25lbnRpdHlXcml0ZXJtZW1iZXJJbmRleGdldEVudGl0eUtlcm5lbENvZGVnZW5Xb3JrSXRlbUJ1aWxkZXJfYmFja2VuZFN0cmF0ZWd5X2NvZGVnZW5SZXN1bHRzX2VudGl0eUxvb2t1cF9jb21wb25lbnRMb29rdXBLZXJuZWxDb2RlZ2VuV29ya0l0ZW1LZXJuZWxTc2FCdWlsZGVyX3Rhc2tfZHVtcEluZm9UYXNrX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3lfaW5saW5lQ2FjaGVfaW5saW5lRGF0YUNhY2hlcmVnaXN0cnlvbWl0SW1wbGljaXRDYXN0c2dldE1lbWJlclRoaXNUeXBlS2VybmVsVG9UeXBlSW5mZXJlbmNlTWFwSW1wbF90YXJnZXRSZXN1bHRzX3Jlc3VsdE9mZ2V0UmV0dXJuVHlwZU9mcmVjZWl2ZXJUeXBlT2ZJbnZvY2F0aW9ucmVjZWl2ZXJUeXBlT2ZHZXRyZWNlaXZlclR5cGVPZkRpcmVjdEdldHJlY2VpdmVyVHlwZU9mU2V0bGlzdExpdGVyYWxpc0pzSW5kZXhhYmxlSXRlcmF0b3JpbmZlcnJlZEluZGV4VHlwZWdldEluZmVycmVkVHlwZU9mZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXJ0eXBlRnJvbU5hdGl2ZUJlaGF2aW9yZGFydDJqcy5rZXJuZWwuZnJvbnRlbmRfc3RyYXRlZ3lDbG9zdXJlU2NvcGVNb2RlbFNjb3BlTW9kZWxLRmllbGRBbmFseXNpc05hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcktlcm5lbEZyb250ZW5kU3RyYXRlZ3luYXRpdmVCYXNpY0RhdGFCdWlsZGVyX25hdGl2ZUJhc2ljRGF0YV9jb21waWxlclRhc2tfcnVudGltZVR5cGVzTmVlZEJ1aWxkZXJfYW5ub3RhdGlvblByb2Nlc3Nvcl9tb2R1bGFyU3RyYXRlZ3lfaXJBbm5vdGF0aW9uRGF0YV9uYXRpdmVEYXRhQnVpbGRlcl9iYWNrZW5kVXNhZ2VCdWlsZGVyX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcl9jdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpc19maWVsZEFuYWx5c2lzaW1wYWN0VHJhbnNmb3JtZXJuYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXJGb3JUZXN0aW5nZmllbGRBbmFseXNpc0ZvclRlc3RpbmdfdmFsaWRhdGVJbnRlcmNlcHRvckltcGxlbWVudHNBbGxPYmplY3RNZXRob2RzaW50ZXJjZXB0b3JDbGFzc2ludGVyY2VwdG9yTWVtYmVyTWVtYmVyICBub3Qgb3ZlcnJpZGRlbiBpbiAuIEZvdW5kIHJ0aU5lZWRCdWlsZGVyX2NyZWF0ZVJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyY2xhc3NRdWVyaWVzY2xhc3NIaWVyYXJjaHlCdWlsZGVyYW5ub3RhdGlvbnNEYXRhQnVpbGRlcnByYWdtYUFubm90YXRpb25zaW50ZXJjZXB0b3JEYXRhQnVpbGRlckFubm90YXRpb25Qcm9jZXNzb3IgaGFzIG5vdCBiZWVuIGNyZWF0ZWQuTmF0aXZlQmFzaWNEYXRhIGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQua2VybmVsUmVzdWx0YWRkQ29tcG9uZW50cmVnaXN0ZXJIdG1sSXNMb2FkZWRpckFubm90YXRpb25EYXRhRm9yVGVzdGluZ21vZHVsYXJTdHJhdGVneUZvclRlc3RpbmdydW50aW1lVHlwZXNOZWVkQnVpbGRlckZvclRlc3RpbmdLZXJuZWxXb3JrSXRlbUJ1aWxkZXJfaW1wYWN0VHJhbnNmb3JtZXJfbmF0aXZlTWVtYmVyUmVzb2x2ZXJfYW5ub3RhdGlvbnNEYXRhQnVpbGRlcl9jbG9zdXJlTW9kZWxzS2VybmVsV29ya0l0ZW1nZXRNZW1iZXJOb2RlcmVzb2x2ZU5hdGl2ZU1lbWJlcnByYWdtYUFubm90YXRpb25EYXRhZ2V0UHJhZ21hQW5ub3RhdGlvbkRhdGFyZWdpc3RlclByYWdtYUFubm90YXRpb25zbW9kdWxhck1lbWJlckRhdGFnZXRNb2R1bGFyTWVtYmVyRGF0YXNjb3BlTW9kZWxjbG9zdXJlU2NvcGVNb2RlbHJlZ2lzdGVyU3RhdGljRmllbGRpbml0aWFsaXplckNvbXBsZXhpdHlpbXBhY3RCdWlsZGVyRGF0YWNvbXB1dGVXb3JsZEltcGFjdHZhcmlhYmxlU2NvcGVNb2RlbG5vSW5saW5ldHJ5SW5saW5lZGlzYWJsZUZpbmFsbm9FbGlzaW9ubm9UaHJvd3Nub1NpZGVFZmZlY3RzYXNzdW1lRHluYW1pY2FzOnRydXN0YXM6Y2hlY2t0eXBlczp0cnVzdHR5cGVzOmNoZWNrcGFyYW1ldGVyOnRydXN0cGFyYW1ldGVyOmNoZWNrZG93bmNhc3Q6dHJ1c3Rkb3duY2FzdDpjaGVja3RyYW5zZm9ybVJlc29sdXRpb25JbXBhY3RLZXJuZWxXb3JrSXRlbShLZXJuZWxNb2R1bGFyU3RyYXRlZ3l1c2VBc3NlcnRzaW5mZXJFZmZlY3RpdmVseUZpbmFsVmFyaWFibGVUeXBlc2NvbXB1dGVJbXBhY3R1c2VJbXBhY3REYXRhRm9yVGVzdGluZ2RhcnQyanMubGlicmFyeV9sb2FkZXJEYXJ0MmpzVGFyZ2V0X2NvbXBpbGVySW5wdXRfY29tcGlsZXJPdXRwdXRmb3JjZVNlcmlhbGl6YXRpb25rZXJuZWwgbG9hZGVyX3BsYXRmb3JtLmRpbGxpc0RpbGwuZGlsbHNlcmlhbGl6ZSBkaWxsV3JpdGluZyBkaWxsIHRvIGRpbGxPdXRwdXRpclNpbmtfdG9SZXN1bHRzZWFyY2hkZXBkYXJ0Q29yZXJvb3Q9LGxpYnJhcmllcz1TZXJpYWxpemF0aW9uVGFza19wcm92aWRlclNlcmlhbGl6YXRpb25zZXJpYWxpemUgZGF0YVdyaXRpbmcgZGF0YSB0byBkZXNlcmlhbGl6ZSBkaWxsUmVhZGluZyBkaWxsIGZyb20gZGlsbElucHV0ZGVzZXJpYWxpemUgZGF0YVJlYWRpbmcgZGF0YSBmcm9tIHNoYXJkc2hhcmRzY29kZWdlblJlc3VsdHNlcmlhbGl6ZSBjb2RlZ2VucmVnaXN0ZXJFbnRpdHlXcml0ZXJkZXNlcmlhbGl6ZSBjb2RlZ2VucmVhZGVyZGVyZWdpc3RlckNvZGVnZW5SZWFkZXIgbWVtYmVycyBmcm9tIHNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c25ld0Nsb3NlZFdvcmxkbmV3SW5mZXJyZWREYXRhU2VyaWFsaXphdGlvblN0cmF0ZWd5Qnl0ZXNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneUJ5dGVzT25EaXNrU2VyaWFsaXphdGlvblN0cmF0ZWd5d29ybGQuZGF0YU9iamVjdHNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneVR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZVR5cGVSZWNpcGVTaWRlRWZmZWN0c0hWaXNpdG9ydmlzaXRBYnN2aXNpdEFkZHZpc2l0Qml0QW5kdmlzaXRCaXROb3R2aXNpdEJpdE9ydmlzaXRCaXRYb3J2aXNpdEJvdW5kc0NoZWNrdmlzaXRDcmVhdGV2aXNpdENyZWF0ZUJveHZpc2l0RGl2aWRldmlzaXRFeGl0dmlzaXRFeGl0VHJ5dmlzaXRGaWVsZEdldHZpc2l0RmllbGRTZXR2aXNpdEZvcmVpZ25Db2RldmlzaXRHZXRMZW5ndGh2aXNpdEdvdG92aXNpdEdyZWF0ZXJ2aXNpdEdyZWF0ZXJFcXVhbHZpc2l0SWRlbnRpdHl2aXNpdEluZGV4dmlzaXRJbmRleEFzc2lnbnZpc2l0SW50ZXJjZXB0b3J2aXNpdEludm9rZUNsb3N1cmV2aXNpdEludm9rZUR5bmFtaWNHZXR0ZXJ2aXNpdEludm9rZUR5bmFtaWNNZXRob2R2aXNpdEludm9rZUR5bmFtaWNTZXR0ZXJ2aXNpdEludm9rZVN0YXRpY3Zpc2l0SW52b2tlU3VwZXJ2aXNpdEludm9rZUNvbnN0cnVjdG9yQm9keXZpc2l0SW52b2tlR2VuZXJhdG9yQm9keXZpc2l0SXN2aXNpdElzVmlhSW50ZXJjZXB0b3J2aXNpdExhdGVWYWx1ZXZpc2l0TGF6eVN0YXRpY3Zpc2l0TGVzc3Zpc2l0TGVzc0VxdWFsdmlzaXRMaXRlcmFsTGlzdHZpc2l0TG9jYWxHZXR2aXNpdExvY2FsU2V0dmlzaXRMb2NhbFZhbHVldmlzaXRMb29wQnJhbmNodmlzaXRNdWx0aXBseXZpc2l0TmVnYXRldmlzaXRPbmVTaG90SW50ZXJjZXB0b3J2aXNpdFBhcmFtZXRlclZhbHVldmlzaXRQaGl2aXNpdFJhbmdlQ29udmVyc2lvbnZpc2l0UmVhZE1vZGlmeVdyaXRldmlzaXRSZWZ2aXNpdFJlbWFpbmRlcnZpc2l0U2hpZnRMZWZ0dmlzaXRTaGlmdFJpZ2h0dmlzaXRTdGF0aWN2aXNpdFN0YXRpY1N0b3JldmlzaXRTdHJpbmdDb25jYXR2aXNpdFN0cmluZ2lmeXZpc2l0U3VidHJhY3R2aXNpdFRocm93RXhwcmVzc2lvbnZpc2l0VHJ1bmNhdGluZ0RpdmlkZXZpc2l0VHlwZUNvbnZlcnNpb252aXNpdFByaW1pdGl2ZUNoZWNrdmlzaXRCb29sQ29udmVyc2lvbnZpc2l0VHlwZUtub3dudmlzaXRZaWVsZHZpc2l0VHlwZUluZm9SZWFkUmF3dmlzaXRUeXBlSW5mb1JlYWRWYXJpYWJsZXZpc2l0VHlwZUluZm9FeHByZXNzaW9udmlzaXRJc1Rlc3R2aXNpdEFzQ2hlY2t2aXNpdEFzQ2hlY2tTaW1wbGV2aXNpdFN1YnR5cGVDaGVja3Zpc2l0TG9hZFR5cGV2aXNpdEluc3RhbmNlRW52aXJvbm1lbnR2aXNpdFR5cGVFdmFsdmlzaXRUeXBlQmluZEhHcmFwaFZpc2l0b3J2aXNpdERvbWluYXRvclRyZWVmcmFtZXZpc2l0QmFzaWNCbG9ja2RvbWluYXRlZEJsb2Nrc3Zpc2l0UG9zdERvbWluYXRvclRyZWVfRnJhbWVISW5zdHJ1Y3Rpb25WaXNpdG9yY3VycmVudEJsb2NrdmlzaXRJbnN0cnVjdGlvbnZpc2l0SW5zdHJ1Y3Rpb25MaXN0aW5zdHJ1Y3Rpb25IR3JhcGh0aGlzSW5zdHJ1Y3Rpb25uZWVkc0FzeW5jUmV3cml0ZWFzeW5jRWxlbWVudFR5cGVleHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyaXNSZWN1cnNpdmVNZXRob2RjYWxsZWRJbkxvb3BibG9ja3NhbGxvY2F0ZWRGaXhlZExpc3RzYWRkTmV3QmxvY2thZGRCbG9ja2FkZE5ld0xvb3BIZWFkZXJCbG9ja2xvb3BJbmZvcm1hdGlvbmlzQ29uc3RhbnRhZGRBdEV4aXRhZGREZWZlcnJlZENvbnN0YW50YWRkQ29uc3RhbnRJbnRhZGRDb25zdGFudEludEFzVW5zaWduZWRhZGRDb25zdGFudERvdWJsZWFkZENvbnN0YW50U3RyaW5nYWRkQ29uc3RhbnRTdHJpbmdGcm9tTmFtZWFkZENvbnN0YW50Qm9vbGFkZENvbnN0YW50TnVsbGFkZENvbnN0YW50VW5yZWFjaGFibGVhc3NpZ25Eb21pbmF0b3JzcHJlZGVjZXNzb3JzaXNMb29wSGVhZGVyYXNzaWduQ29tbW9uRG9taW5hdG9yYXNzaWduRG9taW5hdG9yUmFuZ2VzZGZzTnVtYmVyZG9taW5hdG9yRGZzSW5kb21pbmF0b3JEZnNPdXRpc1ZhbGlkdmFsaWRhdG9ydmlzaXRHcmFwaEhHcmFwaChIQmFzZVZpc2l0b3J2aXNpdEJpbmFyeUFyaXRobWV0aWN2aXNpdEludm9rZUJpbmFyeXZpc2l0QmluYXJ5Qml0T3B2aXNpdEludm9rZXZpc2l0SW52b2tlRHluYW1pY3Zpc2l0SW52b2tlRHluYW1pY0ZpZWxkdmlzaXRJbnZva2VVbmFyeXZpc2l0Q29uZGl0aW9uYWxCcmFuY2h2aXNpdENvbnRyb2xGbG93dmlzaXRGaWVsZEFjY2Vzc3Zpc2l0UmVsYXRpb25hbHZpc2l0Q2hlY2t2aXNpdEp1bXB2aXNpdExvY2FsQWNjZXNzU3ViR3JhcGhTdWJFeHByZXNzaW9uY29uZGl0aW9uRXhwcmVzc2lvbkhJbnN0cnVjdGlvbkxpc3RpbnRlcm5hbEFkZEFmdGVyY3Vyc29yaW50ZXJuYWxBZGRCZWZvcmVkZXRhY2hfdHJ1bmNhdGVkQ29udGFpbnNGb3JBc3NlcnRpc0luQmFzaWNCbG9ja3VzZWRCeUhCYXNpY0Jsb2NrU1RBVFVTX05FV1NUQVRVU19PUEVOU1RBVFVTX0NMT1NFRHN0YXR1c3BoaXNibG9ja0Zsb3dwYXJlbnRMb29wSGVhZGVyaXNMaXZlc3VjY2Vzc29yc2RvbWluYXRvcndpdGhJZGlzTmV3aXNPcGVuaXNDbG9zZWRzZXRCbG9ja0Zsb3dibG9ja0luZm9jb250aW51YXRpb25pc0xhYmVsZWRCbG9ja2VuY2xvc2luZ0xvb3BIZWFkZXJhZGRBZnRlcmFkZEF0RW50cnlub3RpZnlBZGRlZFRvQmxvY2ttb3ZlQXRFeGl0YWRkUGhpcGhpcmVtb3ZlUGhpbm90aWZ5UmVtb3ZlZEZyb21CbG9ja2FkZEJlZm9yZWFkZFN1Y2Nlc3NvcnBvc3RQcm9jZXNzTG9vcEhlYWRlcmFkZEJhY2tFZGdlcmV3cml0ZXJld3JpdGVJbnB1dHJld3JpdGVXaXRoQmV0dGVyVXNlcmJldHRlcmNoZWNrZWRJbnB1dGRvbWluYXRlc2lzRXhpdEJsb2NrYWRkRG9taW5hdGVkQmxvY2tyZW1vdmVEb21pbmF0ZWRCbG9ja3ByZWRlY2Vzc29yYmxvY2swYmxvY2sxZm9yRWFjaFBoaXNhdmVkZm9yRWFjaEluc3RydWN0aW9uSEJhc2ljQmxvY2soaWRDb3VudGVyX3VzZUd2blVOREVGSU5FRF9UWVBFQ09ERVRZUEVfR1VBUkRfVFlQRUNPREVCT1VORFNfQ0hFQ0tfVFlQRUNPREVJTlRFR0VSX0NIRUNLX1RZUEVDT0RFSU5URVJDRVBUT1JfVFlQRUNPREVBRERfVFlQRUNPREVESVZJREVfVFlQRUNPREVNVUxUSVBMWV9UWVBFQ09ERVNVQlRSQUNUX1RZUEVDT0RFU0hJRlRfTEVGVF9UWVBFQ09ERUJJVF9PUl9UWVBFQ09ERUJJVF9BTkRfVFlQRUNPREVCSVRfWE9SX1RZUEVDT0RFTkVHQVRFX1RZUEVDT0RFQklUX05PVF9UWVBFQ09ERU5PVF9UWVBFQ09ERUlERU5USVRZX1RZUEVDT0RFR1JFQVRFUl9UWVBFQ09ERUdSRUFURVJfRVFVQUxfVFlQRUNPREVMRVNTX1RZUEVDT0RFTEVTU19FUVVBTF9UWVBFQ09ERVNUQVRJQ19UWVBFQ09ERVNUQVRJQ19TVE9SRV9UWVBFQ09ERUZJRUxEX0dFVF9UWVBFQ09ERVRZUEVfQ09OVkVSU0lPTl9UWVBFQ09ERVRZUEVfS05PV05fVFlQRUNPREVJTlZPS0VfU1RBVElDX1RZUEVDT0RFSU5ERVhfVFlQRUNPREVJU19UWVBFQ09ERUlOVk9LRV9EWU5BTUlDX1RZUEVDT0RFU0hJRlRfUklHSFRfVFlQRUNPREVUUlVOQ0FUSU5HX0RJVklERV9UWVBFQ09ERUlTX1ZJQV9JTlRFUkNFUFRPUl9UWVBFQ09ERVRZUEVfSU5GT19SRUFEX1JBV19UWVBFQ09ERVRZUEVfSU5GT19SRUFEX1ZBUklBQkxFX1RZUEVDT0RFVFlQRV9JTkZPX0VYUFJFU1NJT05fVFlQRUNPREVGT1JFSUdOX0NPREVfVFlQRUNPREVSRU1BSU5ERVJfVFlQRUNPREVHRVRfTEVOR1RIX1RZUEVDT0RFQUJTX1RZUEVDT0RFQk9PTF9DT05WRVJTSU9OX1RZUEVDT0RFUFJJTUlUSVZFX0NIRUNLX1RZUEVDT0RFSVNfVEVTVF9UWVBFQ09ERUFTX0NIRUNLX1RZUEVDT0RFQVNfQ0hFQ0tfU0lNUExFX1RZUEVDT0RFU1VCVFlQRV9DSEVDS19UWVBFQ09ERUxPQURfVFlQRV9UWVBFQ09ERUlOU1RBTkNFX0VOVklST05NRU5UX1RZUEVDT0RFVFlQRV9FVkFMX1RZUEVDT0RFVFlQRV9CSU5EX1RZUEVDT0RFaW5zdHJ1Y3Rpb25UeXBlaW5wdXRzOiB1c2VHdm5zZXRVc2VHdm5pc01vdmFibGVpc1B1cmVoYXNTaWRlRWZmZWN0c2RlcGVuZHNPblNvbWV0aGluZ2NhblRocm93aXNBbGxvY2F0aW9ubm9uQ2hlY2tpc0NvbnRyb2xGbG93aXNDb25mbGljdGluZ2dldERhcnRSZWNlaXZlcm9ubHlUaHJvd3NOU01ndm5FcXVhbHNoYXNTYW1lVHlwZXR5cGVFcXVhbHN0eXBlQ29kZWlucHV0c0xlbmd0aG90aGVySW5wdXRzZGF0YUVxdWFsc2d2bkhhc2hDb2RldGFyZ2V0QmxvY2tyZW1vdmVVc2VycmVtb3ZlRnJvbUxpc3RjaGFuZ2VVc2VvbGRJbnB1dG5ld0lucHV0cmVwbGFjZUFsbFVzZXJzRG9taW5hdGVkQnluZXdJbnN0cnVjdGlvbm1vdmVCZWZvcmVpc0NvbnN0YW50Qm9vbGVhbmlzQ29uc3RhbnROdWxsaXNDb25zdGFudE51bWJlcmlzQ29uc3RhbnRJbnRlZ2VyaXNDb25zdGFudFN0cmluZ2lzQ29uc3RhbnRMaXN0aXNDb25zdGFudE1hcGlzQ29uc3RhbnRGYWxzZWlzQ29uc3RhbnRUcnVlaXNDb2RlTW90aW9uSW52YXJpYW50aXNKc1N0YXRlbWVudGNvbnZlcnRUeXBlaXNGdW5jdGlvblR5cGVpc1ZvaWRpc0Z1dHVyZU9yY3JlYXRpbmcgY29tcG91bmQgY2hlY2sgdG8gICh0aGlzID0gaW50ZXJmYWNlVHlwZWhhc1NhbWVMb29wSGVhZGVyQXMoKURvbWluYXRlZFVzZXNfc291cmNlX2luc3RydWN0aW9uc19pbmRleGVzZXhjbHVkZURvbWluYXRvcmV4Y2x1ZGVQaGlPdXRFZGdlc19jb21wdXRlb2xkSW5zdHJ1Y3Rpb25JbnB1dCAgY2hhbmdlZC4KICBGb3VuZDogCiAgRXhwZWN0ZWQ6IGlzU2luZ2xldG9uaW5zdHJ1Y3Rpb25zX2FkZFVzZWlucHV0SW5kZXh1c2Vyc0luQ3VycmVudEJsb2NrZG9taW5hdG9yQmxvY2tIUmVmY29udmVyc2lvbkhSZWYoSExhdGVJbnN0cnVjdGlvbkhDaGVja0hCb3VuZHNDaGVja0FMV0FZU19GQUxTRUZVTExfQ0hFQ0tBTFdBWVNfQUJPVkVfWkVST0FMV0FZU19CRUxPV19MRU5HVEhBTFdBWVNfVFJVRXN0YXRpY0NoZWNrc3JlcG9ydGVkSW5kZXhIQ29uZGl0aW9uYWxCcmFuY2h0cnVlQnJhbmNoZmFsc2VCcmFuY2hIQ29udHJvbEZsb3dIQ3JlYXRlaGFzUnRpSW5wdXRpbnN0YW50aWF0ZWRUeXBlc3J0aUlucHV0SENyZWF0ZShIQ3JlYXRlQm94SENyZWF0ZUJveCgpSEludm9rZV9pc0FsbG9jYXRpb25pc0ludGVyY2VwdGVkQ2FsbEFSR1VNRU5UU19PRkZTRVRyZXN1bHRUeXBlc2V0QWxsb2NhdGlvbkhJbnZva2VEeW5hbWljc3BlY2lhbGl6ZXJfcmVjZWl2ZXJUeXBlX29yaWdpbmFsUmVjZWl2ZXJUeXBlaXNJbnRlcmNlcHRlZHVwZGF0ZVJlY2VpdmVyVHlwZWludm9rZSBkeW5hbWljOiBzZWxlY3Rvcj0sIG1hc2s9aXNDYWxsT25JbnRlcmNlcHRvckhJbnZva2VDbG9zdXJlSEludm9rZUR5bmFtaWNNZXRob2RpbnZva2UgZHluYW1pYyBtZXRob2Q6IHNlbGVjdG9yPUhJbnZva2VEeW5hbWljRmllbGRpbnZva2UgZHluYW1pYyBmaWVsZDogc2VsZWN0b3I9SEludm9rZUR5bmFtaWNHZXR0ZXJpc1RlYXJPZmZpbnZva2UgZHluYW1pYyBnZXR0ZXI6IHNlbGVjdG9yPUhJbnZva2VEeW5hbWljU2V0dGVybmVlZHNDaGVja2ludm9rZSBkeW5hbWljIHNldHRlcjogc2VsZWN0b3I9LCBlbGVtZW50PUhJbnZva2VTdGF0aWN0YXJnZXRDYW5UaHJvd2ludm9rZSBzdGF0aWM6IEhJbnZva2VTdXBlcmNhbGxlcmludm9rZSBzdXBlcjogSEludm9rZUNvbnN0cnVjdG9yQm9keWludm9rZSBjb25zdHJ1Y3RvciBib2R5OiBISW52b2tlR2VuZXJhdG9yQm9keUhJbnZva2VHZW5lcmF0b3JCb2R5KEhGaWVsZEFjY2Vzc0hGaWVsZEdldGNsZWFyQWxsU2lkZUVmZmVjdHNjbGVhckFsbERlcGVuZGVuY2llc3RoaXNMb2NhbGlzSW50ZXJjZXB0ZWRDbGFzc2lzTnVsbENoZWNrRmllbGRHZXQoZWxlbWVudD0sdHlwZT1IRmllbGRTZXRGaWVsZFNldChlbGVtZW50PUhHZXRMZW5ndGhHZXRMZW5ndGgoKUhSZWFkTW9kaWZ5V3JpdGVBU1NJR05fT1BQUkVfT1BQT1NUX09QanNPcG9wS2luZGFzc2lnbk9wcHJlT3Bwb3N0T3Bpc1ByZU9waXNQb3N0T3Bpc0Fzc2lnbk9wUmVhZE1vZGlmeVdyaXRlIEhMb2NhbEFjY2Vzc0hMb2NhbEdldEhMb2NhbFNldEhGb3JlaWduaXNTdGF0ZW1lbnRIRm9yZWlnbkNvZGVjb2RlVGVtcGxhdGV0aHJvd0JlaGF2aW9yZm9yZWlnbkZ1bmN0aW9uZWZmZWN0c29uTm9uTnVsbGlzT25seU51bGxOU01HdWFyZEhGb3JlaWduQ29kZSgiIilISW52b2tlQmluYXJ5SEJpbmFyeUFyaXRobWV0aWNIQWRkSERpdmlkZUhNdWx0aXBseUhTdWJ0cmFjdEhUcnVuY2F0aW5nRGl2aWRlSFJlbWFpbmRlckhTd2l0Y2hkZWZhdWx0VGFyZ2V0SFN3aXRjaCBjYXNlcyA9IEhCaW5hcnlCaXRPcEhTaGlmdExlZnRIU2hpZnRSaWdodEhCaXRPckhCaXRBbmRIQml0WG9ySEludm9rZVVuYXJ5SE5lZ2F0ZUhBYnNIQml0Tm90SEV4aXRIR290b2dvdG9ISnVtcHRvTGFiZWxIQnJlYWticmVha1N3aXRjaENvbnRpbnVlTG9vcGJyZWFrIEhDb250aW51ZWNvbnRpbnVlIEhUcnljYXRjaEJsb2Nram9pbkJsb2NrSEV4aXRUcnlleGl0IHRyeWJvZHlUcnlTdWNjZXNzb3JISWZibG9ja0luZm9ybWF0aW9udGhlbkJsb2NrZWxzZUJsb2NrSExvb3BCcmFuY2hDT05ESVRJT05fRklSU1RfTE9PUERPX1dISUxFX0xPT1Bsb29wLWJyYW5jaEhDb25zdGFudGxpdGVyYWw6IGlzQm9vbGlzTnVtaXNJbnRpc0xpc3Rpc0ZhbHNlaXNUcnVlSE5vdEhMb2NhbFZhbHVlbG9jYWwgSFBhcmFtZXRlclZhbHVldXNlZEFzVmFyaWFibGVwYXJhbWV0ZXIgSFRoaXNIUGhpSVNfTk9UX0xPR0lDQUxfT1BFUkFUT1JJU19BTkRJU19PUmxvZ2ljYWxPcGVyYXRvclR5cGVub0lucHV0c3NpbmdsZUlucHV0bWFueUlucHV0c2FkZElucHV0cGhpIEhSZWxhdGlvbmFsdXNlc0Jvb2xpZmllZEludGVyY2VwdG9ySElkZW50aXR5c2luZ2xlQ29tcGFyaXNvbk9wSEdyZWF0ZXJIR3JlYXRlckVxdWFsSExlc3NITGVzc0VxdWFsSFJldHVybkhUaHJvd0V4cHJlc3Npb250aHJvdyBleHByZXNzaW9uSEF3YWl0SFlpZWxkSFRocm93aXNSZXRocm93SFN0YXRpY3NldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmVzdGF0aWMgSEludGVyY2VwdG9yaW50ZXJjZXB0ZWRDbGFzc2VzaW50ZXJjZXB0b3Igb24gaXNDb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3Jjb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3JIT25lU2hvdEludGVyY2VwdG9yb25lIHNob3QgaW50ZXJjZXB0b3I6IHNlbGVjdG9yPUhMYXp5U3RhdGljbGF6eSBzdGF0aWMgSFN0YXRpY1N0b3Jlc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5c3RhdGljIHN0b3JlIEhMaXRlcmFsTGlzdGxpdGVyYWwgbGlzdEhJbmRleHNldERlcGVuZHNPbkluZGV4U3RvcmVpbmRleCBvcGVyYXRvckhJbmRleEFzc2lnbnNldENoYW5nZXNJbmRleGluZGV4IGFzc2lnbiBvcGVyYXRvckhJc1JBV19DSEVDS0NPTVBPVU5EX0NIRUNLVkFSSUFCTEVfQ0hFQ0t0eXBlRXhwcmVzc2lvbnVzZUluc3RhbmNlT2ZkaXJlY3RpbnN0YW5jZU9mY29tcG91bmRpbnRlcmNlcHRvclVuZXhwZWN0ZWQgcmF3IGlzLXRlc3QgdHlwZTogY2hlY2tDYWxsaXNSYXdDaGVja2lzVmFyaWFibGVDaGVja2lzQ29tcG91bmRDaGVjayBpcyBISXNWaWFJbnRlcmNlcHRvckhMYXRlVmFsdWVITGF0ZVZhbHVlKEhUeXBlQ29udmVyc2lvblRZUEVfQ0hFQ0tDQVNUX0NIRUNLaW5wdXRUeXBlaXNUeXBlZGVmd2l0aFR5cGVSZXByZXNlbnRhdGlvbnR5cGVSZXByZXNlbnRhdGlvbmhhc1R5cGVSZXByZXNlbnRhdGlvbmlzVHlwZUNoZWNraXNDYXN0Q2hlY2tpc1JlZHVuZGFudEhUeXBlQ29udmVyc2lvbih0eXBlPSwga2luZD1yZXByZXNlbnRhdGlvbj1jaGVja2VkSW5wdXQ9SFByaW1pdGl2ZUNoZWNrQVJHVU1FTlRfVFlQRV9DSEVDS1JFQ0VJVkVSX1RZUEVfQ0hFQ0tyZWNlaXZlclR5cGVDaGVja1NlbGVjdG9yaXNSZWNlaXZlclR5cGVDaGVja2lzQXJndW1lbnRUeXBlQ2hlY2tIUHJpbWl0aXZlQ2hlY2soY2hlY2tlZFR5cGU9SEJvb2xDb252ZXJzaW9uSEJvb2xDb252ZXJzaW9uKEhUeXBlS25vd25rbm93blR5cGVfaXNNb3ZhYmxlcGlubmVkd2l0bmVzc2Vkd2l0bmVzc1R5cGVLbm93biBpc1Bpbm5lZEhSYW5nZUNvbnZlcnNpb25IU3RyaW5nQ29uY2F0c3RyaW5nIGNvbmNhdEhTdHJpbmdpZnlzdHJpbmdpZnlITG9vcEluZm9ybWF0aW9uYmFja0VkZ2VzbG9vcEJsb2NrSW5mb3JtYXRpb253b3JrUXVldWVwYXJlbnRIZWFkZXJIQmxvY2tGbG93SEJsb2NrSW5mb3JtYXRpb25IU3RhdGVtZW50SW5mb3JtYXRpb25IRXhwcmVzc2lvbkluZm9ybWF0aW9uSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvcnZpc2l0TGFiZWxlZEJsb2NrSW5mb3Zpc2l0TG9vcEluZm92aXNpdElmSW5mb3Zpc2l0VHJ5SW5mb3Zpc2l0U3dpdGNoSW5mb3Zpc2l0U2VxdWVuY2VJbmZvdmlzaXRTdWJHcmFwaEluZm9IRXhwcmVzc2lvbkluZm9ybWF0aW9uVmlzaXRvcnZpc2l0QW5kT3JJbmZvdmlzaXRTdWJFeHByZXNzaW9uSW5mb0hCbG9ja0luZm9ybWF0aW9uVmlzaXRvckhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb25zdWJHcmFwaEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbnN1YkV4cHJlc3Npb25IU3RhdGVtZW50U2VxdWVuY2VJbmZvcm1hdGlvbkhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbmlzQ29udGludWVITG9vcEJsb2NrSW5mb3JtYXRpb25XSElMRV9MT09QRk9SX0xPT1BGT1JfSU5fTE9PUFNXSVRDSF9DT05USU5VRV9MT09QTk9UX0FfTE9PUGxvb3BIZWFkZXJISWZCbG9ja0luZm9ybWF0aW9udGhlbkdyYXBoZWxzZUdyYXBoSEFuZE9yQmxvY2tJbmZvcm1hdGlvbkhUcnlCbG9ja0luZm9ybWF0aW9uY2F0Y2hWYXJpYWJsZUhTd2l0Y2hCbG9ja0luZm9ybWF0aW9uSFR5cGVJbmZvUmVhZFJhd0hUeXBlSW5mb1JlYWRWYXJpYWJsZWludGVyY2VwdGVkbm9JbnRlcmNlcHRvckhUeXBlSW5mb1JlYWRWYXJpYWJsZShUeXBlSW5mb0V4cHJlc3Npb25LaW5kVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURVR5cGVJbmZvRXhwcmVzc2lvbktpbmQuSU5TVEFOQ0VDT01QTEVURUlOU1RBTkNFSFR5cGVJbmZvRXhwcmVzc2lvbmRhcnRUeXBlaXNUeXBlVmFyaWFibGVSZXBsYWNlbWVudEhUeXBlSW5mb0V4cHJlc3Npb24oa2luZEFzU3RyaW5nSElzVGVzdGNoZWNrZWRBYnN0cmFjdFZhbHVlcnRpdHlwZUlucHV0SElzVGVzdCgpSEFzQ2hlY2tjaGVja2VkVHlwZUV4cHJlc3Npb25UeXBlRXJyb3JDYXN0RXJyb3JIQXNDaGVjayhIQXNDaGVja1NpbXBsZUhTdWJ0eXBlQ2hlY2tIU3VidHlwZUNoZWNrKClIUnRpSW5zdHJ1Y3Rpb25ITG9hZFR5cGVITG9hZFR5cGUoSEluc3RhbmNlRW52aXJvbm1lbnRISW5zdGFuY2VFbnZpcm9ubWVudCgpSFR5cGVFdmFsZW52U3RydWN0dXJlSFR5cGVFdmFsKEhUeXBlQmluZEhUeXBlQmluZCgpZGFydDJqcy5zZWxlY3RvcnV0aWxzU2VsZWN0b3JLaW5kR0VUVEVSU0VUVEVSQ0FMTFNQRUNJQUxzcGVjaWFsY2Fub25pY2FsaXplZFZhbHVlc2tpbmQ9LG1lbWJlck5hbWU9LGNhbGxTdHJ1Y3R1cmU6YXJndW1lbnRDb3VudG5hbWVkQXJndW1lbnRDb3VudGlzT3BlcmF0b3JOYW1lVW5hcnlPcGVyYXRvcktpbmQuTkVHQVRFc2VsZWN0b3JOYW1lVW5hcnlPcGVyYXRvcktpbmQuQ09NUExFTUVOVGZyb21FbGVtZW50Q2FuJ3QgZ2V0IHNlbGVjdG9yIGZyb20gdW5hcnlPcGVyYXRvcmNhbGxDbG9zdXJlYXJpdHljYWxsQ2xvc3VyZUZyb21jYWxsQ29uc3RydWN0b3JjYWxsRGVmYXVsdENvbnN0cnVjdG9ycmVhZExpYnJhcnlPck51bGx3cml0ZUxpYnJhcnlPck51bGxpbnZvY2F0aW9uTWlycm9yTWVtYmVyTmFtZWludm9jYXRpb25NaXJyb3JLaW5kc2lnbmF0dXJlQXBwbGllc2FwcGxpZXNUb051bGxXaXRob3V0VGhyb3dTZWxlY3RvcihzdHJ1Y3R1cmVUb1N0cmluZ3RvTm9ybWFsaXplZGlzTm9ybWFsaXplZHRvQ2FsbFNlbGVjdG9ydG9Ob25HZW5lcmljbm9uR2VuZXJpY09uZVNob3RJbnRlcmNlcHRvckRhdGFEeW5hbWljVXNlS2luZENvZGVnZW5Xb3JsZEJ1aWxkZXJhZGRDb21waWxlVGltZUNvbnN0YW50Rm9yRW1pc3Npb25Db2RlZ2VuV29ybGRmb3JFYWNoR2VuZXJpY0Nsb3N1cmVDYWxsTWV0aG9kaGFzSW52b2tlZEdldHRlcmhhc0ludm9rZWRTZXR0ZXJpbnZvY2F0aW9uc0J5TmFtZWdldHRlckludm9jYXRpb25zQnlOYW1lc2V0dGVySW52b2NhdGlvbnNCeU5hbWVmb3JFYWNoSW52b2tlZE5hbWVmb3JFYWNoSW52b2tlZEdldHRlcmZvckVhY2hJbnZva2VkU2V0dGVyaW5zdGFudGlhdGVkQ2xhc3Nlc21ldGhvZHNOZWVkc1N1cGVyR2V0dGVyZm9yRWFjaFN0YXRpY0ZpZWxkY29uc3RUeXBlTGl0ZXJhbHNsaXZlVHlwZUFyZ3VtZW50c2dldENvbnN0YW50c0ZvckVtaXNzaW9ucHJlU29ydENvbXBhcmVpc0FsaWFzZWRTdXBlck1lbWJlckNvZGVnZW5Xb3JsZEJ1aWxkZXJJbXBsX29uZVNob3RJbnRlcmNlcHRvckRhdGFfZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzX2luc3RhbnRpYXRlZFR5cGVzX2ltcGxlbWVudGVkQ2xhc3Nlc19pbnZva2VkTmFtZXNfaW52b2tlZEdldHRlcnNfaW52b2tlZFNldHRlcnNfcHJvY2Vzc2VkQ2xhc3Nlc19tZW1iZXJVc2FnZV9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVfaXNDaGVja3Nfc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5X2NvbnN0YW50VmFsdWVzX2NvbnN0VHlwZUxpdGVyYWxzX2xpdmVUeXBlQXJndW1lbnRzX25hbWVkVHlwZVZhcmlhYmxlc05ld1J0aV9jb21waWxlZENvbnN0YW50c2NsYXNzVXNhZ2VGb3JUZXN0aW5nY2xhc3NVc2VkX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzc19nZXRDbGFzc1VzYWdlaW1wbGVtZW50X2hhc01hdGNoaW5nU2VsZWN0b3JzZWxlY3RvcnNfZ2V0TWF0Y2hpbmdDYWxsU3RydWN0dXJlc2NhbGxTdHJ1Y3R1cmVzX2dldEludm9jYXRpb25DYWxsU3RydWN0dXJlc19oYXNJbnZva2VkR2V0dGVyX2hhc0ludm9rZWRTZXR0ZXJtZW1iZXJVc2VkX3Byb2Nlc3NzaG91bGRCZVJlbW92ZWRfcHJvY2Vzc1NldHVzYWdlRHluYW1pY1VzZUtpbmQuSU5WT0tFcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbl9yZWdpc3Rlck5ld1NlbGVjdG9yaW52b2tldWhhc1BlbmRpbmdEeW5hbWljSW52b2tlRHluYW1pY1VzZUtpbmQuR0VUaGFzUGVuZGluZ0R5bmFtaWNSZWFkRHluYW1pY1VzZUtpbmQuU0VUaGFzUGVuZGluZ0R5bmFtaWNXcml0ZXNlbGVjdG9yTWFwX2dldE1lbWJlclVzYWdlU3RhdGljVXNlS2luZC5TVEFUSUNfVEVBUl9PRkZTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX0dFVFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfU0VUU3RhdGljVXNlS2luZC5DQUxMX01FVEhPRFN0YXRpY1VzZUtpbmQuU1VQRVJfSU5WT0tFcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uU3RhdGljVXNlS2luZC5TVVBFUl9GSUVMRF9TRVRTdGF0aWNVc2VLaW5kLlNVUEVSX1NFVFRFUl9TRVRTdGF0aWNVc2VLaW5kLlNUQVRJQ19TRVRTdGF0aWNVc2VLaW5kLlNVUEVSX1RFQVJfT0ZGU3RhdGljVXNlS2luZC5TVVBFUl9HRVRTdGF0aWNVc2VLaW5kLlNUQVRJQ19HRVRTdGF0aWNVc2VLaW5kLkZJRUxEX0lOSVRTdGF0aWNVc2VLaW5kLkZJRUxEX0NPTlNUQU5UX0lOSVRjb25zdGFudEluaXRTdGF0aWNVc2VLaW5kLklOTElOSU5HU3RhdGljVXNlS2luZC5DTE9TVVJFU3RhdGljIHVzZSAgaXMgbm90IHN1cHBvcnRlZCBkdXJpbmcgY29kZWdlbi5fcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzTWVtYmVyVW5lbnF1ZXVlZCB1c2FnZSBvZiA6IApiZWZvcmU6IDxub25lPgphZnRlciA6IHBvdGVudGlhbEFjY2Vzc2dldE1lbWJlckFjY2Vzc3Byb2Nlc3NDbGFzc2NvbXBpbGVkQ29uc3RhbnRzRm9yVGVzdGluZ3JlZ2lzdGVyQ29uc3RUeXBlTGl0ZXJhbHJlZ2lzdGVyVHlwZUFyZ3VtZW50aGFzVXNldHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzaXNDaGVja3NuYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGljb21waWxlZENvbnN0YW50c2ludm9rZWROYW1lc2ludm9rZWRHZXR0ZXJzaW52b2tlZFNldHRlcnNzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXNkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzQ29kZWdlbldvcmxkSW1wbF9saXZlTWVtYmVyVXNhZ2Vfc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzX2R5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXNfdXNlck5vU3VjaE1ldGhvZHNDYWNoZV9jbG9zdXJpemVkTWVtYmVyc0NhY2hlX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGVmYWlsdXJlZm9yRWFjaEdlbmVyaWNNZXRob2Rmb3JFYWNoR2VuZXJpY0luc3RhbmNlTWV0aG9kdXNlck5vU3VjaE1ldGhvZHNtZW1iZXJVc2FnZWdlbmVyaWNMb2NhbEZ1bmN0aW9uc2Nsb3N1cml6ZWRNZW1iZXJzaGFzUmVhZGNsb3N1cml6ZWRTdGF0aWNzZm9yRWFjaFN0YXRpY1R5cGVBcmd1bWVudGZvckVhY2hEeW5hbWljVHlwZUFyZ3VtZW50cmVhZHNBY2Nlc3MuZHluYW1pY0FjY2Vzc0FjY2Vzcy5zdXBlckFjY2Vzc3dyaXRlc19hc1VubW9kaWZpYWJsZXNlZW5Db25zdGFudHNzb3J0ZWRpbnZva2VzQmFja2VuZFVzYWdlQmFja2VuZFVzYWdlQnVpbGRlckludGVyY2VwdG9yRGF0YUJ1aWxkZXJOYXRpdmVEYXRhQnVpbGRlck9wZW5Xb3JsZENsYXNzUXVlcmllc1Jlc29sdXRpb25Xb3JsZEJ1aWxkZXJjbG9zZWRXb3JsZEZvclRlc3RpbmdSZXNvbHV0aW9uRW5xdWV1ZXJXb3JsZEJ1aWxkZXJJbnN0YW5jZUluc3RhbnRpYXRpb24uRElSRUNUTFlfSU5TVEFOVElBVEVEIGRpcmVjdGx5SW5zdGFudGlhdGlvbi5BQlNUUkFDVExZX0lOU1RBTlRJQVRFRCBhYnN0cmFjdGx5SW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCBub25lSW5zdGFudGlhdGlvbkluZm9pbnN0YW50aWF0aW9uTWFwaXNEaXJlY3RseUluc3RhbnRpYXRlZGlzQWJzdHJhY3RseUluc3RhbnRpYXRlZGFkZEluc3RhbnRpYXRpb25JbnN0YW50aWF0aW9uICBpcyBub3QgYWxsb3dlZC5oYXNJbnN0YW50aWF0aW9uSW5zdGFudGlhdGlvbkluZm9bbmVlZHNDb21tYTx1bmtub3duPlJlc29sdXRpb25Xb3JsZEJ1aWxkZXJJbXBsX2luc3RhbnRpYXRpb25JbmZvX2FsbFJlZmVyZW5jZWRTdGF0aWNGaWVsZHNfbWV0aG9kc05lZWRpbmdTdXBlckdldHRlcl9maWVsZFNldHRlcnNfbG9jYWxGdW5jdGlvbnNfY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXNfZGFydFR5cGVzX2ludGVyY2VwdG9yRGF0YUJ1aWxkZXJfcnRpTmVlZEJ1aWxkZXJfYWxsb2NhdG9yQW5hbHlzaXNfbm9TdWNoTWV0aG9kUmVnaXN0cnlfY2xhc3NIaWVyYXJjaHlCdWlsZGVyX2NsYXNzUXVlcmllc19jbG9zZWRfY2xvc2VkV29ybGRDYWNoZV9saXZlSW5zdGFuY2VNZW1iZXJzX2dlbmVyaWNMb2NhbEZ1bmN0aW9uc19wcm9jZXNzZWRNZW1iZXJzbWVtYmVyVXNhZ2VGb3JUZXN0aW5nVGhlIHdvcmxkIGJ1aWxkZXIgaGFzIG5vdCB5ZXQgYmVlbiBjbG9zZWQuZ2V0SW5zdGFudGlhdGlvbk1hcGNvbnRhaW5zVHlwZVZhcmlhYmxlc3VwZGF0ZUNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzZGlyZWN0bHlJbnN0YW50aWF0ZWRhYnN0cmFjdGx5SW5zdGFudGlhdGVkRGlyZWN0IHN0YXRpYyB1c2UgaXMgbm90IHN1cHBvcnRlZCBmb3IgcmVzb2x1dGlvbi4gaXMgbm90IHN1cHBvcnRlZCBkdXJpbmcgcmVzb2x1dGlvbi5fY3JlYXRlQ2xhc3NVc2FnZXVwZGF0ZVVzYWdlaGFzUGVuZGluZ0R5bmFtaWNVc2U6IApiZWZvcmU6IAphZnRlciA6IGFsbE1peGluVXNlc09mcG9wdWxhdGVIaWVyYXJjaHlOb2Rlc3R5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXNhZGRTdWJ0eXBlc3R5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXNPZkNsc2dldFN1cGVydHlwZXNjb21wdXRlQXNzaWduZWRJbnN0YW5jZU1lbWJlcnNhc3NpZ25lZEluc3RhbmNlTWVtYmVyc2luc3RhbmNlTWVtYmVyaXNJbmhlcml0ZWRJbnJlbGF0aW9uaXNJbmhlcml0ZWRJbkNsYXNzbWVtYmVySG9sZGluZ0NsYXNzaXNJbmhlcml0ZWRJbkV4YWN0Q2xhc3Npc0luaGVyaXRlZEluVGhpc0NsYXNzaXNJbmhlcml0ZWRJblN1YnR5cGVPZlVuZXhwZWN0ZWQgQ2xhc3NSZWxhdGlvbiAgaXMgdXNlZCBidXQgbm90IHByb2Nlc3NlZDogIGlzIHByb2Nlc3NlZCBidXQgbm90IHVzZWQ6ICBpcyBwcm9jZXNzZWQgYnV0IGhhcyBub3QgdXNhZ2UuaW5zdGFuY2VzaW1wbGVtZW50ZWRDbGFzc2VzbGl2ZUluc3RhbmNlTWVtYmVyc2Nsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzZGFydDJqcy51bml2ZXJzZS53b3JsZF9pbXBhY3RWaXNpdFVzZW1lbWJlcjogZHluYW1pYyB1c2Vzc3RhdGljIHVzZXN0eXBlIHVzZXNjb25zdGFudCB1c2VzV29ybGRJbXBhY3RCdWlsZGVyX2R5bmFtaWNVc2VzX3N0YXRpY1VzZXNfdHlwZVVzZXNfY29uc3RhbnRVc2VzYWRkSW1wYWN0U3RhZ2VkV29ybGRJbXBhY3RCdWlsZGVyY29sbGVjdEltcGFjdHNfY3VycmVudEJ1aWxkZXJfYnVpbGRlcnNfZW5zdXJlQnVpbGRlcndvcmxkSW1wYWN0c1RyYW5zZm9ybWVkV29ybGRJbXBhY3RUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0KEltcGFjdFVzZUNhc2UoaW1wYWN0VXNlQ2FzZV92aXNpdFN0YXRpY1VzZV92aXNpdER5bmFtaWNVc2VfdmlzaXRUeXBlVXNlX3Zpc2l0Q29uc3RhbnRVc2VkYXJ0MmpzLndvcmxkSkZpZWxkQW5hbHlzaXNJbnRlcmNlcHRvckRhdGFOYXRpdmVEYXRhTm9TdWNoTWV0aG9kRGF0YVJ1bnRpbWVUeXBlc05lZWRXb3JsZGNsb3N1cmVEYXRhTG9va3Vwc29ydGVyeWNvbXB1dGVSZWNlaXZlclR5cGVCdWlsdFdvcmxkZGFydDJqcy5jb25zdGFudHMuZXhwcmVzc2lvbnNDb25zdGFudEV4cHJlc3Npb25LaW5kQ29uc3RhbnRFeHByZXNzaW9uS2luZC5BU0NvbnN0YW50RXhwcmVzc2lvbktpbmQuQklOQVJZQ29uc3RhbnRFeHByZXNzaW9uS2luZC5CT09MQ29uc3RhbnRFeHByZXNzaW9uS2luZC5CT09MX0ZST01fRU5WSVJPTk1FTlRDb25zdGFudEV4cHJlc3Npb25LaW5kLkNPTkNBVEVOQVRFQ29uc3RhbnRFeHByZXNzaW9uS2luZC5DT05ESVRJT05BTENvbnN0YW50RXhwcmVzc2lvbktpbmQuQ09OU1RSVUNURURDb25zdGFudEV4cHJlc3Npb25LaW5kLkRPVUJMRUNvbnN0YW50RXhwcmVzc2lvbktpbmQuRVJST05FT1VTQ29uc3RhbnRFeHByZXNzaW9uS2luZC5GVU5DVElPTkNvbnN0YW50RXhwcmVzc2lvbktpbmQuRklFTERDb25zdGFudEV4cHJlc3Npb25LaW5kLklERU5USUNBTENvbnN0YW50RXhwcmVzc2lvbktpbmQuSU5UQ29uc3RhbnRFeHByZXNzaW9uS2luZC5JTlRfRlJPTV9FTlZJUk9OTUVOVENvbnN0YW50RXhwcmVzc2lvbktpbmQuTElTVENvbnN0YW50RXhwcmVzc2lvbktpbmQuU0VUQ29uc3RhbnRFeHByZXNzaW9uS2luZC5NQVBDb25zdGFudEV4cHJlc3Npb25LaW5kLk5VTExDb25zdGFudEV4cHJlc3Npb25LaW5kLlNUUklOR0NvbnN0YW50RXhwcmVzc2lvbktpbmQuU1RSSU5HX0ZST01fRU5WSVJPTk1FTlRDb25zdGFudEV4cHJlc3Npb25LaW5kLlNUUklOR19MRU5HVEhDb25zdGFudEV4cHJlc3Npb25LaW5kLlNZTUJPTENvbnN0YW50RXhwcmVzc2lvbktpbmQuVFlQRUNvbnN0YW50RXhwcmVzc2lvbktpbmQuVU5BUllDb25zdGFudEV4cHJlc3Npb25LaW5kLkxPQ0FMX1ZBUklBQkxFQ29uc3RhbnRFeHByZXNzaW9uS2luZC5QT1NJVElPTkFMX1JFRkVSRU5DRUNvbnN0YW50RXhwcmVzc2lvbktpbmQuTkFNRURfUkVGRVJFTkNFQ29uc3RhbnRFeHByZXNzaW9uS2luZC5BU1NFUlRDb25zdGFudEV4cHJlc3Npb25LaW5kLklOU1RBTlRJQVRJT05CSU5BUllCT09MQk9PTF9GUk9NX0VOVklST05NRU5UQ09OQ0FURU5BVEVDT05TVFJVQ1RFREVSUk9ORU9VU0ZJRUxESURFTlRJQ0FMSU5UX0ZST01fRU5WSVJPTk1FTlRMSVNUTUFQU1RSSU5HX0ZST01fRU5WSVJPTk1FTlRTVFJJTkdfTEVOR1RIVFlQRVVOQVJZTE9DQUxfVkFSSUFCTEVQT1NJVElPTkFMX1JFRkVSRU5DRU5BTUVEX1JFRkVSRU5DRUlOU1RBTlRJQVRJT05nZXRLbm93blR5cGVfY3JlYXRlU3RydWN0dXJlZFRleHRfZXF1YWxzVXNlIENvbnN0YW50RXhwcmVzc2lvbi50b0RhcnRUZXh0KCkgb3IgQ29uc3RhbnRFeHByZXNzaW9uLnRvU3RydWN0dXJlZFRleHQoKSBpbnN0ZWFkIG9mIENvbnN0YW50RXhwcmVzc2lvbi50b1N0cmluZygpaXNJbXBsaWNpdGlzUG90ZW50aWFsRXJyb25lb3VzQ29uc3RhbnRFeHByZXNzaW9uRXJyb25lb3VzKClCb29sQ29uc3RhbnRFeHByZXNzaW9udmlzaXRCb29sQm9vbCh2YWx1ZT1JbnRDb25zdGFudEV4cHJlc3Npb252aXNpdEludEludCh2YWx1ZT1Eb3VibGVDb25zdGFudEV4cHJlc3Npb252aXNpdERvdWJsZURvdWJsZSh2YWx1ZT1TdHJpbmdDb25zdGFudEV4cHJlc3Npb252aXNpdFN0cmluZ1N0cmluZyh2YWx1ZT1OdWxsQ29uc3RhbnRFeHByZXNzaW9udmlzaXROdWxsTnVsbCgpTGlzdENvbnN0YW50RXhwcmVzc2lvbkxpc3QodHlwZT0sdmFsdWVzPVtkZWxpbWl0ZXJdKVNldENvbnN0YW50RXhwcmVzc2lvbnZpc2l0U2V0U2V0KHR5cGU9TWFwQ29uc3RhbnRFeHByZXNzaW9udmlzaXRNYXBNYXAodHlwZT0sZW50cmllcz1bLT5ldmFsdWF0ZU1hcEJvZHlDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbnZpc2l0Q29uc3RydWN0ZWRDb25zdHJ1Y3RlZCh0eXBlPSxjb25zdHJ1Y3Rvcj1jYWxsU3RydWN0dXJlPSxhcmd1bWVudHM9W2NvbXB1dGVJbnN0YW5jZURhdGFjb25zdGFudENvbnN0cnVjdG9yZ2V0Q29uc3RydWN0b3JDb25zdGFudE5vIGNvbnN0YW50IGNvbnN0cnVjdG9yIGNvbXB1dGVkIGZvciBjb21wdXRlSW5zdGFuY2VUeXBlZXZhbHVhdGVDb25zdHJ1Y3Rvcmluc3RhbmNlRGF0YWlzVmFsaWRBc0NvbnN0YW50ZmllbGRNYXBObyB2YWx1ZSBjb21wdXRlZCBmb3IgYXNzZXJ0aW9uYXNzZXJ0aW9uc0NvbmNhdGVuYXRlQ29uc3RhbnRFeHByZXNzaW9udmlzaXRDb25jYXRlbmF0ZUNvbmNhdGVuYXRlKGV4cHJlc3Npb25zPVtTeW1ib2xDb25zdGFudEV4cHJlc3Npb252aXNpdFN5bWJvbFN5bWJvbChuYW1lPVR5cGVDb25zdGFudEV4cHJlc3Npb25VbmV4cGVjdGVkIHR5cGUgY29uc3RhbnQgdHlwZTogVHlwZSh0eXBlPUFzQ29uc3RhbnRFeHByZXNzaW9udmlzaXRBc0FzKHZhbHVlPWV4cHJlc3Npb25WYWx1ZWNoZWNrQ2FzdHN0eXBlSW5Db250ZXh0Z2V0VHlwZUluQ29udGV4dGNhc3RUeXBlRmllbGRDb25zdGFudEV4cHJlc3Npb25GaWVsZChlbGVtZW50PWV2YWx1YXRlRmllbGRnZXRGaWVsZENvbnN0YW50TG9jYWxWYXJpYWJsZUNvbnN0YW50RXhwcmVzc2lvbnZpc2l0TG9jYWxWYXJpYWJsZUxvY2FsVmFyaWFibGUoZWxlbWVudD1nZXRMb2NhbENvbnN0YW50RnVuY3Rpb25Db25zdGFudEV4cHJlc3Npb25GdW5jdGlvbihlbGVtZW50PUJpbmFyeUNvbnN0YW50RXhwcmVzc2lvblBSRUNFREVOQ0VfTUFQQmluYXJ5T3BlcmF0b3JLaW5kLkVRQmluYXJ5T3BlcmF0b3JLaW5kLk5PVF9FUUJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX0FOREJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX09SQmluYXJ5T3BlcmF0b3JLaW5kLlhPUkJpbmFyeU9wZXJhdG9yS2luZC5BTkRCaW5hcnlPcGVyYXRvcktpbmQuT1JCaW5hcnlPcGVyYXRvcktpbmQuU0hMQmluYXJ5T3BlcmF0b3JLaW5kLlNIUkJpbmFyeU9wZXJhdG9yS2luZC5TSFJVQmluYXJ5T3BlcmF0b3JLaW5kLkFEREJpbmFyeU9wZXJhdG9yS2luZC5TVUJCaW5hcnlPcGVyYXRvcktpbmQuTVVMQmluYXJ5T3BlcmF0b3JLaW5kLkRJVkJpbmFyeU9wZXJhdG9yS2luZC5JRElWQmluYXJ5T3BlcmF0b3JLaW5kLkdUQmluYXJ5T3BlcmF0b3JLaW5kLkxUQmluYXJ5T3BlcmF0b3JLaW5kLkdURVFCaW5hcnlPcGVyYXRvcktpbmQuTFRFUUJpbmFyeU9wZXJhdG9yS2luZC5NT0RCaW5hcnlPcGVyYXRvcktpbmQuSUZfTlVMTEJpbmFyeU9wZXJhdG9yS2luZC5JTkRFWE1pc3NpbmcgcHJlY2VuZGVuY2UgZm9yIGJpbmFyeSBvcGVyYXRvcjogJ3BvdGVudGlhbE9wZXJhdG9yQmluYXJ5KGxlZnQ9LG9wPSxyaWdodD1sZWZ0VmFsdWVyaWdodFZhbHVlbGVmdENvbnN0YW50bGVmdFR5cGVyaWdodENvbnN0YW50cmlnaHRUeXBlc2hpZnRrbm93bkxlZnRUeXBla25vd25SaWdodFR5cGVVbmV4cGVjdGVkIGNvbnN0YW50IGJpbmFyeSBvcGVyYXRvcjogSWRlbnRpY2FsQ29uc3RhbnRFeHByZXNzaW9udmlzaXRJZGVudGljYWxJZGVudGljYWwobGVmdD1VbmFyeUNvbnN0YW50RXhwcmVzc2lvblVuYXJ5T3BlcmF0b3JLaW5kLk5PVHZpc2l0VW5hcnlVbmFyeShvcD0sZXhwcmVzc2lvbj1TdHJpbmdMZW5ndGhDb25zdGFudEV4cHJlc3Npb252aXNpdFN0cmluZ0xlbmd0aFN0cmluZ0xlbmd0aChleHByZXNzaW9uPUNvbmRpdGlvbmFsQ29uc3RhbnRFeHByZXNzaW9udHJ1ZUV4cGZhbHNlRXhwQ29uZGl0aW9uYWwoY29uZGl0aW9uPSx0cnVlPSxmYWxzZT1jb25kaXRpb25WYWx1ZXRydWVWYWx1ZWZhbHNlVmFsdWV0cnVlVHlwZWZhbHNlVHlwZVBvc2l0aW9uYWxBcmd1bWVudFJlZmVyZW5jZXZpc2l0UG9zaXRpb25hbFBvc2l0aW9uYWwoaW5kZXg9Z2V0UG9zaXRpb25hbEFyZ3VtZW50TmFtZWRBcmd1bWVudFJlZmVyZW5jZXZpc2l0TmFtZWROYW1lZChuYW1lPWdldE5hbWVkQXJndW1lbnRGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb25fY2hlY2tOYW1lRnJvbUVudmlyb25tZW50Qm9vbEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbnZpc2l0Qm9vbEZyb21FbnZpcm9ubWVudGJvb2wuZnJvbUVudmlyb25tZW50KG5hbWU9LGRlZmF1bHRWYWx1ZT1uYW1lQ29uc3RhbnRWYWx1ZWRlZmF1bHRDb25zdGFudFZhbHVlbmFtZVN0cmluZ0NvbnN0YW50VmFsdWVyZWFkRnJvbUVudmlyb25tZW50SW50RnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9udmlzaXRJbnRGcm9tRW52aXJvbm1lbnRpbnQuZnJvbUVudmlyb25tZW50KG5hbWU9U3RyaW5nRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9udmlzaXRTdHJpbmdGcm9tRW52aXJvbm1lbnRTdHJpbmcuZnJvbUVudmlyb25tZW50KG5hbWU9QXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uLG1lc3NhZ2U9dmFsaWRBc3NlcnRlbmFibGVBc3NlcnRpb25zdmlzaXRBc3NlcnRJbnN0YW50aWF0aW9uQ29uc3RhbnRFeHByZXNzaW9uSW5zdGFudGlhdGlvbih0eXBlQXJndW1lbnRzPXR5cGVBcmd1bWVudHNJbkNvbnRleHRDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yZXhwQ29uc3RFeHBQcmludGVybGVmdEFzc29jaWF0aXZld3JpdGVUeXBlQXJndW1lbnRzIGFzIGNvbnN0IG5hbWVkT2Zmc2V0aWRlbnRpY2FsKC5sZW5ndGggPyAgOiBhcmdzW2NvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCwgZGVmYXVsdFZhbHVlOiBjb25zdCBpbnQuZnJvbUVudmlyb25tZW50KGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnQoZGFydDJqcy5jb2RlX291dHB1dFNvdXJjZUxvY2F0aW9uc2FkZFNvdXJjZUxvY2F0aW9udGFyZ2V0T2Zmc2V0c291cmNlUG9zaXRpb25hZGRQdXNocHVzaFBvc2l0aW9uYWRkUG9wZm9yRWFjaFNvdXJjZUxvY2F0aW9uZnJhbWVNYXJrZXJzX1NvdXJjZUxvY2F0aW9uc0ltcGxtYXJrZXJzZnJhbWVzX21lcmdlU291cmNlTG9jYXRpb25zUHJvdmlkZXJjcmVhdGVTb3VyY2VMb2NhdGlvbnNDb2RlT3V0cHV0YWRkQnVmZmVyQWJzdHJhY3RDb2RlT3V0cHV0c291cmNlTG9jYXRpb25zTWFwX2FkZEludGVybmFsQ29kZSBvdXRwdXQgaXMgY2xvc2VkLiBUcnlpbmcgdG8gd3JpdGUgJ2dldFRleHRDb2RlIG91dHB1dCBpcyBhbHJlYWR5IGNsb3NlZC5CdWZmZXJlZENvZGVPdXRwdXRDb2RlQnVmZmVyRG9uJ3QgdXNlIENvZGVCdWZmZXIudG9TdHJpbmcoKSBzaW5jZSBpdCBkcm9wcyBzb3VyY2VtYXAgZGF0YS5TdHJlYW1Db2RlT3V0cHV0X2xpc3RlbmVyc0ludGVybmVyTnVsbEludGVybmVyZmFzdGEuZ3JhcGhwcmVvcmRlck51bWJlcnN1bmFzc2lnbmVkYXNzaWduZWRyZWN1cnNpdmVseVNlYXJjaG5laWdoYm9yUHJlb3JkZXJOdW1iZXJmYXN0YS5jbGFzc19oaWVyYXJjaHlfYnVpbGRlclN0YW5kYXJkQm91bmRzVHlwZUNvbnN0cmFpbnRGb3J3YXJkaW5nTm9kZVR5cGVzRGVidWdMb2dnZXJvYmplY3RLZXJuZWxDbGFzc2Z1dHVyZUtlcm5lbENsYXNzZnV0dXJlT3JLZXJuZWxDbGFzc2Z1bmN0aW9uS2VybmVsQ2xhc3NudWxsS2VybmVsQ2xhc3NnZXROb2RlRnJvbUNsYXNzZ2V0Tm9kZUZyb21UeXBlZ2V0Tm9kZUZyb21LZXJuZWxDbGFzc2FzU3VwZXJ0eXBlT2ZjbHNOb2Rlc3VwZXJ0eXBlTm9kZXN1cGVyY2xhc3Nlc3N1cGVydHlwZURlY2xhcmF0aW9uZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZmdldEtlcm5lbExlZ2FjeUxlYXN0VXBwZXJCb3VuZG5vZGUxbm9kZTJub2RlczFjb21wdXRlQWxsU3VwZXJOb2Rlc25vZGVzMmNhbmRpZGF0ZTFjYW5kaWRhdGUybWF4SW5oZXJpdGFuY2VQYXRoZ2V0SW50ZXJmYWNlTWVtYmVyS2VybmVsZ2V0RGlzcGF0Y2hUYXJnZXRLZXJuZWxDbGFzc0hpZXJhcmNoeU5vZGVCdWlsZGVyaGFzTm9TdWNoTWV0aG9kYWJzdHJhY3RNZW1iZXJzc3Vic3RpdHV0aW9uc2hhbmRsZU1lcmdlQ29uZmxpY3RtZXJnZUtpbmRoYW5kbGVNZXJnZUNvbmZsaWN0OiBjaGVja0luaGVyaXRhbmNlQ29uZmxpY3RNZXJnZUtpbmQuc3VwZXJjbGFzc01lbWJlcnNNZXJnZUtpbmQuc3VwZXJjbGFzc1NldHRlcnNzdXBlcmNsYXNzOiBjaGVja1ZhbGlkT3ZlcnJpZGUoY2hlY2tWYWxpZE92ZXJyaWRlcmVjb3JkQWJzdHJhY3RNZW1iZXJpc0luaGVyaXRhYmxlQ29uZmxpY3RNZXJnZUtpbmQubWVtYmVyc1dpdGhTZXR0ZXJzTWVyZ2VLaW5kLnNldHRlcnNXaXRoTWVtYmVyc2luZmVyRmllbGRUeXBlc2luZmVyTWV0aG9kVHlwZXNNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnNNZXJnZUtpbmQuaW50ZXJmYWNlc1NldHRlcnNNZXJnZUtpbmQuc3VwZXJ0eXBlc01lbWJlcnNNZXJnZUtpbmQuc3VwZXJ0eXBlc1NldHRlcnNzdXBlcnR5cGVzOiBjaGVja1ZhbGlkT3ZlcnJpZGUoYWRkQWxsRGVjbGFyYXRpb25zVG9zdXBlcnR5cGVzOiByZXBvcnRJbmhlcml0YW5jZUNvbmZsaWN0VHJ5aW5nIHRvIGluZmVyIHR5cGVzIGZvciAgYmFzZWQgb24gaGFzU2FtZVNpZ25hdHVyZWluZmVyR2V0dGVyVHlwZWluZmVyU2V0dGVyVHlwZWhhZFR5cGVzSW5mZXJyZWRhQ2xzYVN1YnN0aXR1dGlvbmJDbHNiU3Vic3RpdHV0aW9uYVByb2NlZHVyZUdpdmluZyB1cCAxYlByb2NlZHVyZWFGdW5jdGlvbmJGdW5jdGlvbmFUeXBlUGFyYW1ldGVyc2JUeXBlUGFyYW1ldGVyc3R5cGVQYXJhbWV0ZXJDb3VudEdpdmluZyB1cCAyY29weVR5cGVQYXJhbWV0ZXJDb3ZhcmlhbmNlYUJvdW5kYkJvdW5kR2l2aW5nIHVwIDNhUmV0dXJuVHlwZWJSZXR1cm5UeXBlR2l2aW5nIHVwIDRhUG9zaXRpb25hbGJQb3NpdGlvbmFsR2l2aW5nIHVwIDVHaXZpbmcgdXAgNmFQYXJhbWV0ZXJiUGFyYW1ldGVyY29weVBhcmFtZXRlckNvdmFyaWFuY2VhVHlwZWJUeXBlR2l2aW5nIHVwIDhhTmFtZWRiTmFtZWRHaXZpbmcgdXAgOUdpdmluZyB1cCAxMGFDb3VudGJDb3VudEdpdmluZyB1cCAxMUdpdmluZyB1cCAxMkluZmVycmluZyB0eXBlcyBmb3Igc3VjY2VlZGVkLmZhaWxlZC5JbmZlcnJpbmcgZ2V0dGVyIHR5cGVzIGZvciBiVGFyZ2V0R2l2aW5nIHVwICh0eXBlIG1heSBiZSBpbmZlcnJlZClHaXZpbmcgdXAgKHJldHVybiB0eXBlIG1heSBiZSBpbmZlcnJlZClHaXZpbmcgdXAgKG5vdCBhY2Nlc3NvcjogR2l2aW5nIHVwIChub3QgZmllbGQvcHJvY2VkdXJlOiBJbmZlcnJpbmcgc2V0dGVyIHR5cGVzIGZvciBjb3B5UGFyYW1ldGVyQ292YXJpYW5jZUZyb21GaWVsZGNoZWNrVmFsaWRPdmVycmlkZShhVGFyZ2V0VHJ5aW5nIHRvIGluZmVyIGZpZWxkIHR5cGVzIGZvciBiYXNlZCBvbiBpbmhlcml0ZWRUeXBlY29weUZpZWxkQ292YXJpYW5jZUZyb21QYXJhbWV0ZXJjb3B5RmllbGRDb3ZhcmlhbmNlR2l2aW5nIHVwIChpbmhlcml0ZWRUeXBlID09IG51bGwpCmJGaWVsZGFGaWVsZHN0YXRpY01lbWJlcmR1cGxpY2F0ZWhhbmRsZU9ubHlBaGFuZGxlT25seUJ3aXRoUGFyZW50c3VwZXJub2RlaW5mZXJNaXhpbkFwcGxpY2F0aW9ubG9jYWxNZW1iZXJzbG9jYWxTZXR0ZXJzbWVyZ2VBY2Nlc3NvcnNjbGFzc01lbWJlcnNjbGFzc1NldHRlcnNpbnRlcmZhY2VNZW1iZXJzc3Vic3RTdXBlcnR5cGVzcmVjb3JkU3VwZXJ0eXBlZGlyZWN0SW50ZXJmYWNlc2lnbm9yZUZ1bmN0aW9uc3VwZXJjbGFzc0ludGVyZmFjZXNtZXJnZUludGVyZmFjZXNtZXJnZWRNZW1iZXJzbWVyZ2VkU2V0dGVyc2FkZEludGVyZmFjZWRpcmVjdEludGVyZmFjZWludGVyZmFjZU5vZGVyZXBvcnRNaXNzaW5nTWVtYmVyc2luc3RhbGxOc21IYW5kbGVyc0luIHJlY29yZFN1cGVydHlwZShjb21wdXRlRGVmYXVsdFR5cGVBcmd1bWVudHNrZXJuZWxBcmd1bWVudHNrZXJuZWxQYXJhbWV0ZXJzIGFyZW4ndCBzdWJzdGVkc3Vic3RlZHN1YnN0IGlzbid0IHN1YnN0ZWRteURlcHRobWVyZ2VJbnRlcmZhY2VzKG1lbWJlckxpc3Rzc2V0dGVyTGlzdHNtZXJnZUxpc3RzaXNPZGRjb250ZXh0TWFwcGFyZW50TmFtZWFMaXN0Ykxpc3RrZXJuZWxNaXhlZEluVHlwZWluZmVycmVkQXJndW1lbnRzQ2xhc3NIaWVyYXJjaHlOb2RlICBMb25nZXN0IHBhdGggdG8gT2JqZWN0OiAgIHN1cGVyY2xhc3NlczotPiAgIGludGVyZmFjZXM6cHJpbnRNZW1iZXJzaGVhZGluZyAgICBmaW5kTWVtYmVyY29tcGFyZU1heEluaGVyaXRhbmNlUGF0aE1lcmdlUmVzdWx0TWVyZ2VLaW5kc3VwZXJjbGFzc01lbWJlcnNzdXBlcmNsYXNzU2V0dGVyc2ludGVyZmFjZXNNZW1iZXJzaW50ZXJmYWNlc1NldHRlcnNzdXBlcnR5cGVzTWVtYmVyc3N1cGVydHlwZXNTZXR0ZXJzbWVtYmVyc1dpdGhTZXR0ZXJzc2V0dGVyc1dpdGhNZW1iZXJzQnVpbGRlck1peGluSW5mZXJyZXJfVHlwZUJ1aWxkZXJDb25zdHJhaW50R2F0aGVyZXImVHlwZUNvbnN0cmFpbnRHYXRoZXJlciZTdGFuZGFyZEJvdW5kc3N1YmNsYXNzaW5nZ2V0U3RhbmRhcmRMb3dlckJvdW5kX2Z1bmN0aW9uU3RhbmRhcmRMb3dlckJvdW5kX3R5cGVQYXJhbWV0ZXJTdGFuZGFyZFVwcGVyQm91bmRfaW50ZXJmYWNlU3RhbmRhcmRVcHBlckJvdW5kX2Z1bmN0aW9uU3RhbmRhcmRVcHBlckJvdW5kdHlwZTEgPSA7IHR5cGUyID0gZ3RvdGFsUG9zaXRpb25hbGZUeXBlZ1R5cGVoYXNQb3NpdGlvbmFsZk5hbWVnTmFtZW9yZGVyaGFzTmFtZWR0QXJnczF0QXJnczJ0QXJnc1R5cGVCdWlsZGVyQ29uc3RyYWludEdhdGhlcmVyYWRkTG93ZXJCb3VuZGFkZFVwcGVyQm91bmRpc1N1YnR5cGVPZktlcm5lbGNoZWNrT3ZlcnJpZGVpc0ludGVyZmFjZUNoZWNrRGVsYXllZCBvdmVycmlkZSBjaGVjayBvZiAgd3J0LiBJbmZlcnJlZCB0eXBlICBmb3IgbW9kaWZ5S2VybmVsSW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0SW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdChjb25jcmV0ZUltcGxlbWVudGF0aW9uY3JlYXRlRm9yd2FyZGVyc0ludGVyZmFjZUNvbmZsaWN0SW50ZXJmYWNlQ29uZmxpY3QoY29tcHV0ZU1lbWJlclR5cGVpc01vcmVTcGVjaWZpY2Jlc3RTb0ZhcmJlc3RUeXBlU29GYXJjYW5kaWRhdGVUeXBlQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZTogIDw6ICAhPDogQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZSBiZXN0U29GYXI6IGRhcnQ6anNqc19kYXJ0MmpzLmRhcnRqc19udW1iZXIuZGFydGlzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbkNvbWJpbmVkIE1lbWJlciBTaWduYXR1cmUgb2YgbmV3IEZvcndhcmRpbmdOb2RlKHN0dWJhZGRlZCBzdHViIDogcGlja2VkIGJlc3RTb0ZhckFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uYWJzdHJhY3RNZW1iZXJzZWxlY3RBYnN0cmFjdHNlbGVjdENvbmNyZXRlY29tcGFyZURlY2xhcmF0aW9uc2lzTmFtZVZpc2libGVJbmlzSW5oZXJpdGFuY2VDb25mbGljdGltcGxpZXNTZXR0ZXJhUG9zaXRpb25hbFBhcmFtZXRlcnNiUG9zaXRpb25hbFBhcmFtZXRlcnNhTmFtZWRQYXJhbWV0ZXJzYk5hbWVkUGFyYW1ldGVyc2luaGVyaXRlZENvbmZsaWN0Q29udGV4dGluaGVyaXRlZENvbmZsaWN0Q29udGV4dEtlcm5lbGFkZERlY2xhcmF0aW9uSWZEaWZmZXJlbnRjb21wYXJlTmFtZWRQYXJhbWV0ZXJzaW5mZXJQYXJhbWV0ZXJUeXBlcmVwb3J0Q2FudEluZmVyUGFyYW1ldGVyVHlwZXJlcG9ydENhbnRJbmZlclJldHVyblR5cGVyZXBvcnRDYW50SW5mZXJGaWVsZFR5cGVoYXNFeHBsaWNpdFJldHVyblR5cGVoYXNFeHBsaWNpdGx5VHlwZWRGb3JtYWxQYXJhbWV0ZXJmYXN0YS5pbXBsaWNpdF90eXBlaXNTdGFydGVkZmFzdGEua2VybmVsX3ZhcmlhYmxlX2J1aWxkZXJfX2xvYWRMaWJyYXJ5X1VubGlua2VkU2NvcGVmYXN0YVBhdGgvcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhLy9wa2cvZnJvbnRfZW5kL3Rvb2wvX2Zhc3RhL2NvbW1hbmRfbGluZS5kYXJ0a2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0ZmFzdGEudGFyZ2V0ZmFzdGEuZGlsbF9jbGFzc19idWlsZGVydGFyZ2V0U3VwZXJ0eXBlYnVpbGRUeXBlQXJndW1lbnRzbWl4ZWRJblR5cGU9Y29tcHV0ZVR5cGVWYXJpYWJsZUJ1aWxkZXJzZmFzdGEuZGlsbF90eXBlZGVmX2J1aWxkZXJidWlsZFRoaXNUeXBlZmFzdGEudHlwZV9idWlsZGVyX2NvbXB1dGVyVW5zdXBwb3J0ZWROb3QgaW1wbGVtZW50ZWRjb250YWluZWRVcmlFeHRlbnNpb25CdWlsZGVyYnVpbGRUeXBlRXh0ZW5zaW9uQnVpbGRlci5idWlsZFR5cGUgaXMgbm90IHN1cHBvcnRlZC5idWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzRXh0ZW5zaW9uQnVpbGRlci5idWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzIGlzIG5vdCBzdXBwb3J0ZWQuZmFzdGEuY29uZmlndXJhdGlvbmZhc3RhLmV4cG9ydGZhc3RhLmltcG9ydGNyZWF0ZVByZWZpeEJ1aWxkZXJfZXh0ZW5zaW9uSW5zdHJ1bWVudGF0aW9uVmFsdWVtYXRjaGVzSW5zdHJ1bWVudGF0aW9uVmFsdWVMaXRlcmFsX3Nob3J0ZW5JbnN0cnVtZW50YXRpb25TdHJpbmdkYXJ0LmNvcmU6OmRhcnQuYXN5bmM6OnRlc3Q6OmZhc3RhLnRyYW5zZm9ybV9jb2xsZWN0aW9uc2xpc3RBZGRzZXRGYWN0b3J5c2V0QWRkbWFwUHV0bWFwRW50cnlLZXltYXBFbnRyeVZhbHVlZ2V0OmVudHJpZXNfZmluZFNldEZhY3RvcnlfdHJhbnNsYXRlTGlzdE9yU2V0X2FkZEV4cHJlc3Npb25FbGVtZW50X3RyYW5zbGF0ZUVsZW1lbnRfdHJhbnNsYXRlU3ByZWFkRWxlbWVudF90cmFuc2xhdGVJZkVsZW1lbnRfdHJhbnNsYXRlRm9yRWxlbWVudF90cmFuc2xhdGVGb3JJbkVsZW1lbnR0aGVuU3RhdGVtZW50c2Vsc2VTdGF0ZW1lbnRzdGhlbkJvZHllbHNlQm9keWxvb3BCb2R5bG9vcHRlbXBlbHRjYXN0ZWRWYXJfdHJhbnNsYXRlQ29uc3RMaXN0T3JTZXRfdHJhbnNsYXRlQ29uc3RNYXBfYWRkTm9ybWFsRW50cnlfdHJhbnNsYXRlRW50cnlfdHJhbnNsYXRlU3ByZWFkRW50cnlfdHJhbnNsYXRlSWZFbnRyeV90cmFuc2xhdGVGb3JFbnRyeV90cmFuc2xhdGVGb3JJbkVudHJ5a2V5VmFydmFsdWVWYXJjdXJyZW50UGFydGZhc3RhLnRyYW5zZm9ybV9zZXRfbGl0ZXJhbHNhZGRNZXRob2R1bm1vZGlmaWFibGVTZXRDb25zdHJ1Y3Rvcl9maW5kQWRkTWV0aG9kX2ZpbmRVbm1vZGlmaWFibGVTZXRDb25zdHJ1Y3RvcmNvbGxlY3Rpb25Vcmljb2xsZWN0aW9uTGlicmFyeW1hcEV4cHNldFZhcnNldEV4cGZhc3RhLnBhcnNlci5jbGFzc19tZW1iZXJfcGFyc2VyRXJyb3JEZWxlZ2F0aW9uTGlzdGVuZXJza2lwUGFyc2Vyc2tpcEV4cHJlc3Npb25wYXJzZUlkZW50aWZpZXJFeHByZXNzaW9ubWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zYXN5bmNTdGF0ZWxvb3BTdGF0ZXBhcnNlQXJndW1lbnRzT3B0c2tpcEFyZ3VtZW50c09wdHBhcnNlRnVuY3Rpb25Cb2R5YWxsb3dBYnN0cmFjdHNraXBGdW5jdGlvbkJvZHlwYXJzZUludmFsaWRCbG9ja3NraXBCbG9ja2Zhc3RhLmRpZXRfbGlzdGVuZXJpc0lnbm9yZWRQYXJzZXJFcnJvcmltcG9ydEV4cG9ydERpcmVjdGl2ZUluZGV4cGFydERpcmVjdGl2ZUluZGV4X2N1cnJlbnREZWNsYXJhdGlvbl9jdXJyZW50Q2xhc3NjdXJyZW50Q2xhc3NJc1BhcnNlclJlY292ZXJ5dW5uYW1lZEV4dGVuc2lvbkNvdW50ZXJkaXNjYXJkZW5kUGFydE9mcGFydEtleXdvcmRvZktleXdvcmRQYXJ0T2ZoYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbkludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uaGFuZGxlTm9Bcmd1bWVudHNOb0FyZ3VtZW50c2hhbmRsZU5vVHlwZUFyZ3VtZW50c05vVHlwZUFyZ3VtZW50c2hhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHNOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzaGFuZGxlTm9UeXBlbGFzdENvbnN1bWVkTm9UeXBlZW5kVHlwZUxpc3RUeXBlTGlzdGhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2V3aXRoS2V5d29yZE5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2VoYW5kbGVDbGFzc1dpdGhDbGF1c2VDbGFzc1dpdGhDbGF1c2VoYW5kbGVDbGFzc05vV2l0aENsYXVzZUNsYXNzTm9XaXRoQ2xhdXNlaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzTm9Gb3JtYWxQYXJhbWV0ZXJzZW5kRnVuY3Rpb25UeXBlQWxpYXN0eXBlZGVmS2V5d29yZEZ1bmN0aW9uVHlwZUFsaWFzdHlwZWRlZkJ1aWxkZXJsb29rdXBCdWlsZGVybWV0YWRhdGFUb2tlbnRva2VuRm9yT2Zmc2V0aXNQb3NpdGlvbmFsYnVpbGRGaWVsZHNlbmRUb3BMZXZlbE1ldGhvZGdldE9yU2V0VG9wTGV2ZWxNZXRob2Rib2R5VG9rZW5jcmVhdGVGdW5jdGlvbkxpc3RlbmVyYnVpbGRGdW5jdGlvbkJvZHlNZW1iZXJLaW5kLlRvcExldmVsTWV0aG9kaGFuZGxlTm9GdW5jdGlvbkJvZHlOb0Z1bmN0aW9uQm9keWVuZExpYnJhcnlOYW1lbGlicmFyeUtleXdvcmRoYW5kbGVEb3R0ZWROYW1lZmlyc3RJZGVudGlmaWVyRG90dGVkTmFtZWVuZENvbmRpdGlvbmFsVXJpZXF1YWxTaWduQ29uZGl0aW9uYWxVcmllbmRDb25kaXRpb25hbFVyaXNDb25kaXRpb25hbFVyaXNoYW5kbGVPcGVyYXRvck5hbWVvcGVyYXRvcktleXdvcmRPcGVyYXRvck5hbWVoYW5kbGVJbnZhbGlkT3BlcmF0b3JOYW1lSW52YWxpZE9wZXJhdG9yTmFtZWhhbmRsZUlkZW50aWZpZXJMaXN0SWRlbnRpZmllckxpc3RlbmRTaG93c2hvd0tleXdvcmRTaG93ZW5kSGlkZWhpZGVLZXl3b3JkSGlkZWVuZENvbWJpbmF0b3JzQ29tYmluYXRvcnNoYW5kbGVJbXBvcnRQcmVmaXhkZWZlcnJlZEtleXdvcmRhc0tleXdvcmRJbXBvcnRQcmVmaXhwdXNoSWZOdWxsTnVsbFZhbHVlLlByZWZpeGVuZEltcG9ydGltcG9ydEtleXdvcmRpbXBvcnRVcmlUb2tlbmxpYnJhcnlOb2RlaGFuZGxlUmVjb3ZlckltcG9ydGVuZEV4cG9ydGV4cG9ydEtleXdvcmRlbmRQYXJ0UGFydGVuZEZhY3RvcnlNZXRob2RmYWN0b3J5S2V5d29yZEZhY3RvcnlNZXRob2RidWlsZFJlZGlyZWN0aW5nRmFjdG9yeU1ldGhvZE1lbWJlcktpbmQuRmFjdG9yeWVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHloYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlOYXRpdmVGdW5jdGlvbkJvZHloYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWROYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkZW5kTWV0aG9kYmVnaW5QYXJhbU1lbWJlcktpbmQuU3RhdGljTWV0aG9kTWVtYmVyS2luZC5Ob25TdGF0aWNNZXRob2R0eXBlUGFyYW1ldGVyU2NvcGVjb21wdXRlVHlwZVBhcmFtZXRlclNjb3BlcGFyc2VNZXRhZGF0YVN0YXJwYXJzZUZvcm1hbFBhcmFtZXRlcnNPcHRwYXJzZUZpZWxkc2hhbmRsZUludmFsaWRNZW1iZXJJbnZhbGlkTWVtYmVyYmVnaW5DbGFzc09yTWl4aW5Cb2R5ZW5kQ2xhc3NPck1peGluQm9keW1lbWJlckNvdW50Q2xhc3NPck1peGluQm9keWJlZ2luQ2xhc3NEZWNsYXJhdGlvbmFic3RyYWN0VG9rZW5lbmRDbGFzc0RlY2xhcmF0aW9uYmVnaW5NaXhpbkRlY2xhcmF0aW9ubWl4aW5LZXl3b3JkZW5kTWl4aW5EZWNsYXJhdGlvbmJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb25leHRlbnNpb25LZXl3b3JkZXh0ZW5zaW9uI2VuZEV4dGVuc2lvbkRlY2xhcmF0aW9uZW5kRW51bWVudW1LZXl3b3JkRW51bWVuZE5hbWVkTWl4aW5BcHBsaWNhdGlvbmNsYXNzS2V5d29yZGltcGxlbWVudHNLZXl3b3JkTmFtZWRNaXhpbkFwcGxpY2F0aW9uZ2V0QXN5bmNNYXJrZXJsaXN0ZW5lckZpbmlzaEZ1bmN0aW9ubGlzdGVuZXJGaW5pc2hGaWVsZHNwYXJzZUluaXRpYWxpemVyc09wdHBhcnNlQXN5bmNNb2RpZmllck9wdHBhcnNlVG9wTGV2ZWxNZW1iZXJwYXJzZUNsYXNzT3JNaXhpbk1lbWJlcmhhbmRsZUR1cGxpY2F0ZWROYW1lY2hlY2tCdWlsZGVybmVhcmVzdERlY2xhcmF0aW9ubWluRGlzdGFuY2VkaXN0YW5jZXRva2Vuc0Zvck9mZnNldHNpc0lnbm9yZWRFcnJvcmZhc3RhLmRpZXRfcGFyc2VycGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVzdHNraXBGb3JtYWxQYXJhbWV0ZXJzUmVzdGZhc3RhLm91dGxpbmVfYnVpbGRlck1ldGhvZEJvZHkuQWJzdHJhY3RNZXRob2RCb2R5LlJlZ3VsYXJNZXRob2RCb2R5LlJlZGlyZWN0aW5nRmFjdG9yeUJvZHlSZWd1bGFyaW5Db25zdHJ1Y3Rvck5hbWVwb3BDaGFyT2Zmc2V0cG9wSWRlbnRpZmllckxpc3Rpc1BhcnNlclJlY292ZXJ5c2VudGluZWxOdWxsVmFsdWUuQ29tYmluYXRvcnNFbmRJbXBvcnRwcmVmaXhPZmZzZXRFbmRDb25kaXRpb25hbFVyaXNOdWxsVmFsdWUuQ29uZGl0aW9uYWxVcmlzRW5kQ29uZGl0aW9uYWxVcmlSZWNvdmVySW1wb3J0TnVsbFZhbHVlLkRlZmVycmVkZW51bVZhbHVlRGVjbGFyYXRpb25tZXRob2REZWNsYXJhdGlvbmhhbmRsZU5vTmFtZTpiYWRpbnRlcnBvbGF0aW9uT2Zmc2V0ZW5kSWRlbnRpZmllckxpc3ROdWxsVmFsdWUuSWRlbnRpZmllckxpc3RzdWZmaXhPZmZzZXRiZWdpbkNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb25jbGFzcyBvciBtaXhpbiBhcHBsaWNhdGlvbkNsYXNzS2luZC5FeHRlbnNpb25iZWdpbk5hbWVkTWl4aW5BcHBsaWNhdGlvbmhhbmRsZUNsYXNzT3JNaXhpbkltcGxlbWVudHNpbnRlcmZhY2VzQ291bnRDbGFzc09yTWl4aW5JbXBsZW1lbnRzTnVsbFZhbHVlLlR5cGVCdWlsZGVyTGlzdGhhbmRsZVJlY292ZXJDbGFzc0hlYWRlcmhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcmhhbmRsZUNsYXNzRXh0ZW5kc2V4dGVuZHNLZXl3b3JkaGFuZGxlTWl4aW5Pbm51bGxJZlBhcnNlclJlY292ZXJ5bWl4aW5Ub2tlbnN1cGVydHlwZUNvbnN0cmFpbnRzY29tcHV0ZVByb2NlZHVyZUtpbmRiZWdpblRvcExldmVsTWV0aG9kZXh0ZXJuYWxUb2tlbiNtZXRob2Rmb3JtYWxzT2Zmc2V0aGFuZGxlRnVuY3Rpb25Cb2R5U2tpcHBlZGlzRXhwcmVzc2lvbkJvZHliZWdpbk1ldGhvZGJvZHlLaW5kbmFtZU9yT3BlcmF0b3JyZXF1aXJlZEFyZ3VtZW50Q291bnR2YXJGaW5hbE9yQ29uc3RPZmZzZXRzeW50aGVzaXplZFR5cGVWYXJpYWJsZXNzeW50aGVzaXplZEZvcm1hbHMjdGhpc2JlZ2luRnVuY3Rpb25UeXBlQWxpYXNwb3BGaWVsZEluZm9zaW5pdGlhbGl6ZXJUb2tlbkZvckluZmVyZW5jZVR5cGVWYXJpYWJsZXNEZWZpbmVkc3RlcHN2aWFjb250YWluaW5nTGlicmFyeWJlZ2luRmFjdG9yeU1ldGhvZGNvbnN0VG9rZW5leHRlbmRzT2Zmc2V0aGFuZGxlQ2xhc3NIZWFkZXJDbGFzc0hlYWRlcmhhbmRsZU1peGluSGVhZGVyZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnRkb2NUb2tlbmluU2xhc2gvKiovLy9WYXJpYW5jZS5jb250cmF2YXJpYW50VmFyaWFuY2UuaW52YXJpYW50X3ZhcmlhbmNlX3R5cGVQYXJhbWV0ZXJzVG9TZWFyY2hGb3JvbGRWYXJpYW5jZXJlc29sdmVJbmZlcmVuY2VOb2RlaW5mZXJDb3BpZWRUeXBlX1R5cGVTY2hlbWFFbGltaW5hdGlvblZpc2l0b3Jpc0xlYXN0Q2xvc3VyZW5ld1JldHVyblR5cGVuZXdQb3NpdGlvbmFsUGFyYW1ldGVyc25ld05hbWVkUGFyYW1ldGVyc25ld1R5cGVBcmd1bWVudHNsZWFzdENsb3N1cmUgPDogPHR5cGU+IDw6IF9UeXBlU2NoZW1hRW52aXJvbm1lbnQmSGllcmFyY2h5QmFzZWRUeXBlRW52aXJvbm1lbnQmU3RhbmRhcmRCb3VuZHN0eXBlUGFyYW1ldGVyc1RvSW5mZXJyZXR1cm5Db250ZXh0VHlwZWluZmVyVHlwZUZyb21Db25zdHJhaW50c2Rvd253YXJkc0luZmVyUGhhc2VoYXNPbWl0dGVkQm91bmR0eXBlc0Zyb21Eb3dud2FyZHNJbmZlcmVuY2V0eXBlUGFyYW1Cb3VuZGV4dGVuZHNDb25zdHJhaW50X2luZmVyVHlwZVBhcmFtZXRlckZyb21Db250ZXh0X2luZmVyVHlwZVBhcmFtZXRlckZyb21BbGxrbm93blR5cGVzdHlwZVNhdGlzZmllc0NvbnN0cmFpbnRzb2x2ZVR5cGVDb25zdHJhaW50Z3JvdW5kZWR0eXBlRnJvbUNvbnRleHRJbmZlcmVuY2VfY29yZVR5cGVzc3Vic3RpdHV0ZVR5cGVQYXJhbXNuZXdUeXBlUGFyYW1ldGVyc2Zhc3RhLnF1YWxpZmllZF9uYW1lcHJlc2VydmVUb2tlbmlkZW50aWZpZXIoX1Rva2VuSWRlbnRpZmllcnRva2VuLWlkZW50aWZpZXIoaW5pdGlhbGl6ZWQtaWRlbnRpZmllcihxdWFsaWZpZWQtbmFtZShfVG9rZW5RdWFsaWZpZWROYW1ldG9rZW4tcXVhbGlmaWVkLW5hbWUoZmxhdHRlblF1YWxpZmllZE5hbWVPbnRva2VuSWRlbnRpZmllcmZhc3RhLmJ1aWx0aW5fdHlwZV9idWlsZGVyY29tcGlsYXRpb25Vbml0ZmFzdGEuY2xhc3NfYnVpbGRlcnR5cGVfYWxnZWJyYXJlZGlyZWN0aW5nQ29uc3RydWN0b3JzaWdub3JlcmVkaXJlY3RjeWNsZVJlcG9ydGVkdGFyZ2V0QnVpbGRlcmFkZFJlZGlyZWN0aW5nQ29uc3RydWN0b3JzZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5YWNjZXNzaW5nTGlicmFyeWZpcnN0TWVtYmVyTmFtZWRzdXBlckNsYXNzc3VwZXJDbGFzc1R5cGVkZWNscHJvYmxlbXNwcm9ibGVtc09mZnNldHNpbXBsZW1lbnRlZHJlcGV0aXRpb25zY2hlY2tCb3VuZHNJblN1cGVydHlwZWNvbnN0cnVjdG9yc0ZpZWxkaGFuZGxlU2VlbkNvdmFyaWFudENvbnN0cnVjdG9yIGluIG92ZXJyaWRlIGNoZWNrLnNlZW5Db3ZhcmlhbnRjaGVja01ldGhvZE92ZXJyaWRlY2hlY2tHZXR0ZXJPdmVycmlkZWNoZWNrU2V0dGVyT3ZlcnJpZGVkZWNsYXJlZE1lbWJlckhhc0dldHRlcmludGVyZmFjZU1lbWJlckhhc0dldHRlcmRlY2xhcmVkTWVtYmVySGFzU2V0dGVyaW50ZXJmYWNlTWVtYmVySGFzU2V0dGVyaGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2R0cmFuc2Zvcm1Qcm9jZWR1cmVUb05vU3VjaE1ldGhvZEZvcndhcmRlcm5vU3VjaE1ldGhvZEludGVyZmFjZWFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckZvclByb2NlZHVyZWFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckdldHRlckZvckZpZWxkYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyU2V0dGVyRm9yRmllbGRleGlzdGluZ0ZvcndhcmRlcnNOYW1lc2V4aXN0aW5nU2V0dGVyRm9yd2FyZGVyc05hbWVzbGVhc3RDb25jcmV0ZVN1cGVyY2xhc3NzdXBlckhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kY29uY3JldGVjb25jcmV0ZVNldHRlcnNjbHNIYXNVc2VyRGVmaW5lZE5vU3VjaE1ldGhvZF9nZXRNZW1iZXJVcmlfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbmRlY2xhcmVkRnVuY3Rpb25pbnRlcmZhY2VGdW5jdGlvbmludGVyZmFjZVN1YnN0aXR1dGlvbmluaGVyaXRlZENvbnRleHRkZWNsYXJlZFBhcmFtZXRlcmludGVyZmFjZVBhcmFtZXRlcmRlY2xhcmVkQm91bmRpbnRlcmZhY2VCb3VuZF9jb21wdXRlRGVjbGFyZWRTdWJzdGl0dXRpb25kZWNsYXJlZFN1YnN0aXR1dGlvbl9jaGVja1R5cGVzYXNJZkRlY2xhcmVkUGFyYW1ldGVyaW5QYXJhbWV0ZXJkZWNsYXJlZE1lbWJlck5hbWVpbnRlcmZhY2VNZW1iZXJOYW1lcDBwMXNvcnRlZEZyb21EZWNsYXJlZHNvcnRlZEZyb21JbnRlcmZhY2VkZWNsYXJlZE5hbWVkUGFyYW1ldGVyc2ludGVyZmFjZU5hbWVkUGFyYW1ldGVyc2Jhc2VOYW1lbWl4aW5OYW1lY2xhc3NOYW1lTGVuZ3RobWVtYmVyUGF0Y2hvcmlnaW5MZW5ndGhwYXRjaExlbmd0aGNvbXB1dGVSZWRpcmVjdGVlVHlwZXRhcmdldEZ1bmN0aW9uVHlwZXR5cGVQYXJhbWV0ZXJCb3VuZGNvbXB1dGVSZWRpcmVjdGVlTmFtZWNoZWNrUmVkaXJlY3RpbmdGYWN0b3J5ZmFjdG9yeVR5cGVyZWRpcmVjdGVlVHlwZWRpcmVjdFN1YnN0aXR1dGlvbk1hcGluc3RhbmNlQ2xhc3MgZXhwZWN0ZWQgbG9va3VwQ29uc3RydWN0b3JXaXRoUGF0Y2hlc2dldFN1cGVyY2xhc3NDb25zdHJ1Y3RvclJlZGlyZWN0aW9uZmFzdGEuY29uc3RydWN0b3JfcmVmZXJlbmNlX2J1aWxkZXJtaWRkbGVmYXN0YS5kZWNsYXJhdGlvbi50YXJnZXRpc0RlY2xhcmF0aW9uTWVtYmVyaXNDbGFzc01lbWJlci5hcHBseVBhdGNoLmZpbmlzaFBhdGNoZmFzdGEuZHluYW1pY190eXBlX2J1aWxkZXJmYXN0YS5lbnVtX2J1aWxkZXJzZWxmVHlwZWNvbnN0cnVjdG9yQnVpbGRlcnZhbHVlc0J1aWxkZXJ0b1N0cmluZ0J1aWxkZXJlbnVtQ29uc3RhbnRJbmZvc3RhcnRDaGFyT2Zmc2V0Q29tcHV0ZWRlbnVtQnVpbGRlcmVudW0gaW5kZXhGaWVsZEJ1aWxkZXJpbmRleEZpZWxkbmFtZUZpZWxkQnVpbGRlcm5hbWVGaWVsZHN1cGVyQ29uc3RydWN0b3JmYXN0YS5maWVsZF9idWlsZGVyaXNFbGlnaWJsZUZvckluZmVyZW5jZWJvZHlCdWlsZGVyZmFzdGEuZm9ybWFsX3BhcmFtZXRlcl9idWlsZGVyaXNNYW5kYXRvcnlGb3JtYWxQYXJhbWV0ZXJLaW5kaXNPcHRpb25hbE5hbWVkRm9ybWFsUGFyYW1ldGVyS2luZGlzT3B0aW9uYWxQb3NpdGlvbmFsRm9ybWFsUGFyYW1ldGVyS2luZGlzTmFtZWRSZXF1aXJlZGZvckZvcm1hbFBhcmFtZXRlckluaXRpYWxpemVyU2NvcGVpc0NvbnN0Q29uc3RydWN0b3JQYXJhbWV0ZXJmYXN0YS5wcm9jZWR1cmVfYnVpbGRlcl9leHRlbnNpb25UaGlzYWN0dWFsQm9keWZvcm1hbCBwYXJhbWV0ZXJmb3JtYWwgcGFyYW1ldGVyIGluaXRpYWxpemVydHlwZSBwYXJhbWV0ZXJuZXdCb2R5YnVpbGRGdW5jdGlvbiNzeW50aGV0aWNyZW1vdmVUeXBlVmFyaWFibGVzUHJvY2VkdXJlQnVpbGRlci5leHRlbnNpb25UaGlzIGhhcyBub3QgYmVlbiBzZXQuY2hlY2tQYXRjaHJlcG9ydFBhdGNoTWlzbWF0Y2hhY3R1YWxBc3luY01vZGlmaWVybmV3TW9kaWZpZXJpc0VsaWdpYmxlRm9yVG9wTGV2ZWxJbmZlcmVuY2Vpc0V4dGVuc2lvbk1ldGhvZGtpbmRJbmZpeGdldCNzZXQjVW5leHBlY3RlZCBleHRlbnNpb24gbWV0aG9kIGtpbmQgaGFzTW92ZWRTdXBlckluaXRpYWxpemVyc3VwZXJJbml0aWFsaXplcnJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJmdW5jdGlvbk5vZGVpbmplY3RJbnZhbGlkSW5pdGlhbGl6ZXJsYXN0SW5pdGlhbGl6ZXJyZWRpcmVjdGluZ09yaWdpbmZhc3RhLmZ1bmN0aW9uX3R5cGVfYnVpbGRlcikgLT4gYnVpbHRSZXR1cm5UeXBlY2xvbmVkVHlwZVZhcmlhYmxlc2Zhc3RhLmludmFsaWRfdHlwZV9idWlsZGVyZmFzdGEubGlicmFyeV9idWlsZGVyLmFwcGx5UGF0Y2hlc0xpYnJhcnlMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3JMaWJyYXJ5TG9jYWxEZWNsYXJhdGlvbk5hbWVJdGVyYXRvcmZhc3RhLm1lbWJlcl9idWlsZGVyZmFzdGEubWV0YWRhdGFfYnVpbGRlcmJ1aWxkQW5ub3RhdGlvbnNhbm5vdGF0aW9uQnVpbGRlcmZhc3RhLm1peGluX2FwcGxpY2F0aW9uX2J1aWxkZXJmYXN0YS5tb2RpZmllcl9idWlsZGVyaXNNaXhpbmZhc3RhLm5hbWVfaXRlcmF0b3JmYXN0YS5uYW1lZF90eXBlX2J1aWxkZXJmcm9tVHlwZURlY2xhcmF0aW9uQnVpbGRlcnR5cGVOYW1lT2Zmc2V0ZmxhdE5hbWVoYW5kbGVJbnZhbGlkU3VwZXJ0eXBlRGVjbGFyYXRpb24gaGFzIG5vdCBiZWVuIHJlc29sdmVkIG9uIGNsb25lZEFyZ3VtZW50c2Zhc3RhLnByZWZpeF9idWlsZGVyZmFzdGEuZnVuY3Rpb25fdHlwZV9hbGlhc19idWlsZGVyY3ljbGljVHlwZUFsaWFzTWFya2VyZmFzdGEudHlwZV9idWlsZGVyZmFzdGEudHlwZV9kZWNsYXJhdGlvbl9idWlsZGVyZmFzdGEudHlwZV92YXJpYWJsZV9idWlsZGVyYWN0dWFsUGFyYW1ldGVyZnJvbUtlcm5lbGFzVHlwZUJ1aWxkZXJ0eXBlUGFyYW1ldGVyc0Zyb21CdWlsZGVyc2Zhc3RhLnVucmVzb2x2ZWRfdHlwZVVucmVzb2x2ZWRUeXBlKEBmYXN0YS52b2lkX3R5cGVfYnVpbGRlcmZhc3RhLnBhcnNlci5saXN0ZW5lcmxvZ0V2ZW50c3VwcHJlc3NQYXJzZUVycm9yc2JlZ2luQXJndW1lbnRzYmVnaW5Bd2FpdEV4cHJlc3Npb25JbnZhbGlkQXdhaXRFeHByZXNzaW9uQ2FzY2FkZUNhc2VFeHByZXNzaW9uQ2xhc3NFeHRlbmRzQ2xhc3NJbXBsZW1lbnRzUmVjb3ZlckNsYXNzSGVhZGVyQ2xhc3NEZWNsYXJhdGlvbk1peGluT25NaXhpbkhlYWRlclJlY292ZXJNaXhpbkhlYWRlck1peGluRGVjbGFyYXRpb25FeHRlbnNpb25EZWNsYXJhdGlvbmJlZ2luQ29tYmluYXRvcnNiZWdpbkNvbXBpbGF0aW9uVW5pdGhhbmRsZURpcmVjdGl2ZXNPbmx5ZW5kQ29tcGlsYXRpb25Vbml0Q29tcGlsYXRpb25Vbml0Q29uc3RMaXRlcmFsYmVnaW5Db25zdHJ1Y3RvclJlZmVyZW5jZURvV2hpbGVTdGF0ZW1lbnRCb2R5V2hpbGVTdGF0ZW1lbnRCb2R5YmVnaW5FbnVtYmVnaW5FeHBvcnRoYW5kbGVFeHRyYW5lb3VzRXhwcmVzc2lvbkV4dHJhbmVvdXNFeHByZXNzaW9uRm9yU3RhdGVtZW50Qm9keUZvckluQm9keWJlZ2luRnVuY3Rpb25OYW1lYmVnaW5IaWRlYmVnaW5UeXBlTGlzdGJlZ2luSWZTdGF0ZW1lbnRUaGVuU3RhdGVtZW50RWxzZVN0YXRlbWVudGJlZ2luSW1wb3J0SW1wb3J0UmVjb3ZlcnliZWdpbkNvbmRpdGlvbmFsVXJpc2JlZ2luQ29uZGl0aW9uYWxVcmliZWdpbkluaXRpYWxpemVkSWRlbnRpZmllcmJlZ2luVmFyaWFibGVJbml0aWFsaXplckNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJoYW5kbGVJbnZhbGlkRXhwcmVzc2lvbkludmFsaWRGdW5jdGlvbkJvZHloYW5kbGVJbnZhbGlkVHlwZVJlZmVyZW5jZUludmFsaWRUeXBlUmVmZXJlbmNlYmVnaW5MaWJyYXJ5TmFtZUxpYnJhcnlOYW1laGFuZGxlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb25MaXRlcmFsU3RyaW5nYmVnaW5NZW1iZXJiZWdpbk1ldGFkYXRhU3RhcmJlZ2luT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzYmVnaW5QYXJ0YmVnaW5QYXJ0T2ZiZWdpblJlZGlyZWN0aW5nRmFjdG9yeUJvZHliZWdpblJldHVyblN0YXRlbWVudEVtcHR5RnVuY3Rpb25Cb2R5YmVnaW5TaG93YmVnaW5Td2l0Y2hTdGF0ZW1lbnRiZWdpbkxpdGVyYWxTeW1ib2xiZWdpblJldGhyb3dTdGF0ZW1lbnRlbmRUb3BMZXZlbERlY2xhcmF0aW9uVG9wTGV2ZWxEZWNsYXJhdGlvbmJlZ2luVG9wTGV2ZWxNZW1iZXJiZWdpblRyeVN0YXRlbWVudFRyeVN0YXRlbWVudE5vbk51bGxBc3NlcnRFeHByZXNzaW9ubW9kaWZpZXJUb2tlbk5vTmFtZWJlZ2luVHlwZUFyZ3VtZW50c2JlZ2luVHlwZVZhcmlhYmxlc0NvbnN0RXhwcmVzc2lvbkVsc2VDb250cm9sRmxvd2JlZ2luWWllbGRTdGF0ZW1lbnRoYW5kbGVFcnJvclRva2VuZGlzY2FyZFR5cGVSZXBsYWNlZFdpdGhDb21tZW50VHlwZUFzc2lnbmhhbmRsZUNvbW1lbnRSZWZlcmVuY2VUZXh0cmVmZXJlbmNlU291cmNlcmVmZXJlbmNlT2Zmc2V0Q29tbWVudFJlZmVyZW5jZVRleHRoYW5kbGVDb21tZW50UmVmZXJlbmNlbmV3S2V5d29yZGhhbmRsZU5vQ29tbWVudFJlZmVyZW5jZWZhc3RhLnBhcnNlci5wYXJzZXJGb3J3YXJkaW5nTGlzdGVuZXJsb29rc0xpa2VFeHByZXNzaW9uU3RhcnRMaXRlcmFsRW50cnlJbmZvY29tcHV0ZUxpdGVyYWxFbnRyeWxvb2tzTGlrZUxpdGVyYWxFbnRyeXNpbXBsZUVudHJ5TG9vcFN0YXRlTW9kaWZpZXJSZWNvdmVyeUNvbnRleHRDbGFzc0hlYWRlclJlY292ZXJ5TGlzdGVuZXJJbXBvcnRSZWNvdmVyeUxpc3RlbmVyTWl4aW5IZWFkZXJSZWNvdmVyeUxpc3RlbmVyVG9rZW5TdHJlYW1SZXdyaXRlclR5cGVJbmZvVHlwZVBhcmFtT3JBcmdJbmZvY29tcHV0ZU1ldGhvZFR5cGVBcmd1bWVudHNjb21wdXRlVHlwZWNvbXB1dGVUeXBlUGFyYW1PckFyZ2lzVmFsaWRUeXBlUmVmZXJlbmNlbm9UeXBlbm9UeXBlUGFyYW1PckFyZ2ZpbmROb25aZXJvTGVuZ3RoVG9rZW5maW5kUHJldmlvdXNOb25aZXJvTGVuZ3RoVG9rZW5pc0xldHRlcmlzTGV0dGVyT3JEaWdpdGlzT25lT2Zpc09uZU9mT3JFb2Zpc1doaXRlc3BhY2VfTWVzc2FnZVdpdGhBcmd1bWVudExvb3BTdGF0ZS5PdXRzaWRlTG9vcGNhY2hlZFJld3JpdGVyc3RhdGVtZW50RGVwdGhleHByZXNzaW9uRGVwdGhyZXdyaXRlcmluR2VuZXJhdG9yaW5Bc3luY2luUGxhaW5TeW5jaXNCcmVha0FsbG93ZWRpc0NvbnRpbnVlQWxsb3dlZExvb3BTdGF0ZS5JbnNpZGVMb29waXNDb250aW51ZVdpdGhMYWJlbEFsbG93ZWRza2lwRXJyb3JUb2tlbnNkaXJlY3RpdmVTdGF0ZWNoZWNrU2NyaXB0VGFncGFyc2VTY3JpcHRwYXJzZVRvcExldmVsRGVjbGFyYXRpb25JbXBscmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbnJlcG9ydEFsbEVycm9yVG9rZW5zcGFyc2VEaXJlY3RpdmVzbmV4dFZhbHVlY2hlY2tJbXBvcnRwYXJzZUltcG9ydGNoZWNrRXhwb3J0cGFyc2VFeHBvcnRjaGVja0xpYnJhcnlwYXJzZUxpYnJhcnlOYW1lcGFyc2VQYXJ0T3JQYXJ0T2ZwYXJzZVRvcExldmVsRGVjbGFyYXRpb25wYXJzZVRvcExldmVsS2V5d29yZERlY2xhcmF0aW9uY2hlY2tEZWNsYXJhdGlvbnBhcnNlVG9wTGV2ZWxNZW1iZXJJbXBscmVwb3J0UmVjb3ZlcmFibGVFcnJvcmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIjc3ludGhldGljX2Z1bmN0aW9uX3BhcnNlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb25wYXJzZUNsYXNzRGVjbGFyYXRpb25Nb2RpZmllcnNwYXJzZVRvcExldmVsS2V5d29yZE1vZGlmaWVyc3JlcG9ydFRvcExldmVsTW9kaWZpZXJFcnJvcmFmdGVyTW9kaWZpZXJzcGFyc2VDbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9ucGFyc2VFbnVtcGFyc2VFeHRlbnNpb25wYXJzZVR5cGVkZWZwYXJzZU1peGluSW50ZXJuYWwgZXJyb3I6IFVuaGFuZGxlZCB0b3AgbGV2ZWwga2V5d29yZCAncGFyc2VRdWFsaWZpZWRsaWJyYXJ5TmFtZUNvbnRpbnVhdGlvbmVuc3VyZVNlbWljb2xvbnBhcnNlSW1wb3J0UHJlZml4T3B0ZGVmZXJyZWRUb2tlbmVuc3VyZUlkZW50aWZpZXJpbXBvcnRQcmVmaXhEZWNsYXJhdGlvbmVuc3VyZUxpdGVyYWxTdHJpbmdwYXJzZUNvbmRpdGlvbmFsVXJpU3RhcnBhcnNlQ29tYmluYXRvclN0YXJwYXJzZUltcG9ydFJlY292ZXJ5cHJpbWFyeUxpc3RlbmVycmVjb3ZlcnlMaXN0ZW5lcmZpcnN0RGVmZXJyZWRLZXl3b3JkaGFzUHJlZml4aGFzQ29tYmluYXRvcnNraXBVbmV4cGVjdGVkVG9rZW5PcHRwYXJzZUNvbmRpdGlvbmFsVXJpaW5zZXJ0UGFyZW5zcGFyc2VEb3R0ZWROYW1lZXF1YWxpdHlTaWdubW92ZVN5bnRoZXRpY2RvdHRlZE5hbWVDb250aW51YXRpb25wYXJzZUhpZGVwYXJzZVNob3dwYXJzZUlkZW50aWZpZXJMaXN0cGFyc2VUeXBlTGlzdGVuc3VyZVR5cGVPclZvaWRjaGVja1BhcnRPZnBhcnNlUGFydE9mY2hlY2tQYXJ0cGFyc2VQYXJ0cGFydE5hbWVwYXJ0TmFtZUNvbnRpbnVhdGlvbmF0VG9rZW5tZXRhZGF0YVJlZmVyZW5jZXBhcnNlUXVhbGlmaWVkUmVzdE9wdG1ldGFkYXRhQ29udGludWF0aW9ucGFyc2VBcmd1bWVudHNtZXRhZGF0YUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50c3R5cGVJbmZvc2tpcFR5cGV0eXBlZGVmRGVjbGFyYXRpb25wYXJzZVZhcmlhYmxlc3BhcnNlVHlwZXBhcnNlRm9ybWFsUGFyYW1ldGVyc1JlcXVpcmVkT3B0TWVtYmVyS2luZC5GdW5jdGlvblR5cGVBbGlhc3BhcnNlTWl4aW5BcHBsaWNhdGlvblJlc3RpbnNlcnRTeW50aGV0aWNLZXl3b3JkcGFyc2VXaXRoQ2xhdXNlT3B0cGFyc2VHZXR0ZXJPckZvcm1hbFBhcmFtZXRlcnNwYXJzZUZvcm1hbFBhcmFtZXRlcnNpc1VuYXJ5TWludXNtaXNzaW5nUGFyYW1ldGVyTWVzc2FnZXNraXBGb3JtYWxQYXJhbWV0ZXJzcGFyc2VPcHRpb25hbFBvc2l0aW9uYWxQYXJhbWV0ZXJzZW5zdXJlQ2xvc2VQYXJlbnBhcnNlT3B0aW9uYWxOYW1lZFBhcmFtZXRlcnNyZXdyaXRlU3F1YXJlQnJhY2tldHNwYXJzZUZvcm1hbFBhcmFtZXRlcnJld3JpdGVBbmRSZWNvdmVycGFyYW1ldGVyS2luZGluRnVuY3Rpb25UeXBlcGFyc2VGb3JtYWxQYXJhbWV0ZXJNb2RpZmllcnNiZWZvcmVUeXBlaXNOYW1lZFBhcmFtZXRlcm5hbWVDb250ZXh0Zm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb25maWVsZEluaXRpYWxpemVyYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlY2xvc2VyZW5kSW5saW5lRnVuY3Rpb25UeXBlTWVtYmVyS2luZC5GdW5jdGlvblR5cGVkUGFyYW1ldGVyZXF1YWxjb250aW51YXRpb25Db250ZXh0cGFyc2VRdWFsaWZpZWRSZXN0ZW5zdXJlQmxvY2tlbnVtRGVjbGFyYXRpb25jbGFzc09yTWl4aW5EZWNsYXJhdGlvbnBhcnNlTmFtZWRNaXhpbkFwcGxpY2F0aW9ucGFyc2VDbGFzc2Vuc3VyZVR5cGVOb3RWb2lkcGFyc2VDbGFzc0hlYWRlck9wdHBhcnNlQ2xhc3NIZWFkZXJSZWNvdmVyeWNsYXNzIGRlY2xhcmF0aW9ucGFyc2VDbGFzc09yTWl4aW5Cb2R5Q2xhc3NLaW5kLkNsYXNzcGFyc2VDbGFzc0V4dGVuZHNPcHRwYXJzZUNsYXNzT3JNaXhpbkltcGxlbWVudHNPcHRwYXJzZU5hdGl2ZUNsYXVzZWhhc0V4dGVuZHNoYXNJbXBsZW1lbnRzaGFzV2l0aGluY29ycmVjdEV4dGVuZHNLZXl3b3JkaGVhZGVyU3RhcnRwYXJzZU1peGluSGVhZGVyT3B0cGFyc2VNaXhpbkhlYWRlclJlY292ZXJ5bWl4aW4gZGVjbGFyYXRpb25DbGFzc0tpbmQuTWl4aW5wYXJzZU1peGluT25PcHRoYXNPbnBhcnNlTWl4aW5PbmV4dGVuc2lvbiBkZWNsYXJhdGlvbnBhcnNlU3RyaW5nUGFydGluc2VydFRva2VubWVzc2FnZU9uVG9rZW5yZWNvdmVyeVRlbXBsYXRlbm90RW9mT3JWYWx1ZXBhcnNlVHlwZVZhcmlhYmxlc09wdGJlZm9yZVN0YXJ0cGFyc2VUb3BMZXZlbE1vZGlmaWVycyNzeW50aGV0aWNfaWRlbnRpZmllcl9wYXJzZVRvcExldmVsTWV0aG9kZmllbGRDb3VudHBhcnNlRmllbGRJbml0aWFsaXplck9wdGluc2VydFN5bnRoZXRpY1Rva2VudG9wTGV2ZWxGdW5jdGlvbkRlY2xhcmF0aW9ucGFyc2VNZXRob2RUeXBlVmFyc2F2ZWRBc3luY01vZGlmaWVydHlwZVZhcnBhcnNlVmFyaWFibGVJbml0aWFsaXplck9wdHBhcnNlSW5pdGlhbGl6ZXJiZWZvcmVFeHByZXNzaW9ucGFyc2VBc3NlcnRwYXJzZVN1cGVySW5pdGlhbGl6ZXJFeHByZXNzaW9ucGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0ZXhwcmVzc2lvbkNvbnRpbnVhdGlvbmJsb2NrS2luZGluc2VydEJsb2NrYmVnaW5Hcm91cG9wZW5QYXJlbmVuc3VyZUNvbG9ubmV3VG9rZW4iInBhcnNlTGl0ZXJhbFN0cmluZ3JlcGxhY2VUb2tlbkZvbGxvd2luZ2V4cGVjdGVkTmV4dGV4cGVjdGVkVmFsdWVza2lwQ2xhc3NPck1peGluQm9keXBhcnNlQ2xhc3NPck1peGluTWVtYmVySW1wbHVuYXJ5cGFyc2VDbGFzc01lbWJlck1vZGlmaWVyc3BhcnNlRmFjdG9yeU1ldGhvZHBhcnNlTWV0aG9kcGFyc2VJbnZhbGlkT3BlcmF0b3JEZWNsYXJhdGlvbnJlY292ZXJGcm9tSW52YWxpZENsYXNzTWVtYmVycGFyc2VPcGVyYXRvck5hbWVtZXRob2REZWNsYXJhdGlvbkNvbnRpbnVhdGlvbmJlZm9yZVBhcmFtYmVmb3JlSW5pdGlhbGl6ZXJzcGFyc2VSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5c3RhdGljT3JDb3ZhcmlhbnRwYXJzZU1vZGlmaWVyc0FmdGVyRmFjdG9yeWJlZm9yZVRva2VucGFyc2VGdW5jdGlvbkV4cHJlc3Npb25NZW1iZXJLaW5kLkxvY2FscGFyc2VBc3luY09wdEJvZHlwYXJzZUZ1bmN0aW9uTGl0ZXJhbGJlZm9yZU5hbWVwYXJzZU5hbWVkRnVuY3Rpb25SZXN0bG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9ub2ZGdW5jdGlvbkV4cHJlc3Npb25wYXJzZUNvbnN0cnVjdG9yUmVmZXJlbmNlY29uc3RydWN0b3JSZWZlcmVuY2Vjb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbmNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzc2tpcEFzeW5jTW9kaWZpZXJwYXJzZUV4cHJlc3Npb25GdW5jdGlvbkJvZHlzYXZlZExvb3BTdGF0ZXBhcnNlU3RhdGVtZW50cmVjb3ZlckZyb21TdGFja092ZXJmbG93cGFyc2VTdGF0ZW1lbnRYcGFyc2VMYWJlbGVkU3RhdGVtZW50cGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbkFmdGVyTW9kaWZpZXJzcGFyc2VCbG9ja3BhcnNlUmV0dXJuU3RhdGVtZW50dmFyT3JGaW5hbHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25wYXJzZUlmU3RhdGVtZW50cGFyc2VGb3JTdGF0ZW1lbnRwYXJzZVJldGhyb3dTdGF0ZW1lbnRwYXJzZVdoaWxlU3RhdGVtZW50cGFyc2VEb1doaWxlU3RhdGVtZW50cGFyc2VUcnlTdGF0ZW1lbnRwYXJzZVN3aXRjaFN0YXRlbWVudHBhcnNlQnJlYWtTdGF0ZW1lbnRwYXJzZUNvbnRpbnVlU3RhdGVtZW50cGFyc2VBc3NlcnRTdGF0ZW1lbnRwYXJzZUVtcHR5U3RhdGVtZW50cGFyc2VZaWVsZFN0YXRlbWVudEludGVybmFsIGVycm9yOiBVbmtub3duIGFzeW5jU3RhdGU6ICdwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckNvbnN0RGVjbGFyYXRpb25sb29rc0xpa2VBd2FpdEV4cHJlc3Npb25wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRwYXJzZUxhYmVsbGFiZWxEZWNsYXJhdGlvbnBhcnNlVGhyb3dFeHByZXNzaW9ucGFyc2VQcmVjZWRlbmNlRXhwcmVzc2lvbnBhcnNlRXhwcmVzc2lvbldpdGhvdXRDYXNjYWRlcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb25SZXN0YWxsb3dDYXNjYWRlc3BhcnNlVW5hcnlFeHByZXNzaW9udG9rZW5MZXZlbF9jb21wdXRlUHJlY2VkZW5jZWxhc3RCaW5hcnlFeHByZXNzaW9uTGV2ZWxwYXJzZUNhc2NhZGVFeHByZXNzaW9ucGFyc2VQcmltYXJ5cGFyc2VBcmd1bWVudE9ySW5kZXhTdGFycGFyc2VJc09wZXJhdG9yUmVzdHBhcnNlQXNPcGVyYXRvclJlc3RjYXNjYWRlT3BlcmF0b3JwYXJzZVNlbmRtYXJrcGFyc2VBd2FpdEV4cHJlc3Npb25wYXJzZUltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9ucGFyc2VTZW5kT3JGdW5jdGlvbkxpdGVyYWxwYXJzZUxpdGVyYWxJbnRwYXJzZUxpdGVyYWxEb3VibGVwYXJzZUxpdGVyYWxTeW1ib2xwYXJzZUxpdGVyYWxCb29scGFyc2VMaXRlcmFsTnVsbHBhcnNlVGhpc0V4cHJlc3Npb25wYXJzZVN1cGVyRXhwcmVzc2lvbnBhcnNlTmV3RXhwcmVzc2lvbnBhcnNlQ29uc3RFeHByZXNzaW9ucGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbk9yRnVuY3Rpb25MaXRlcmFscGFyc2VMaXRlcmFsTGlzdFN1ZmZpeHBhcnNlTGl0ZXJhbFNldE9yTWFwU3VmZml4cGFyc2VMaXRlcmFsTGlzdFNldE1hcE9yRnVuY3Rpb25wYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uZW5zdXJlUGFyZW50aGVzaXplZENvbmRpdGlvbnBhcnNlRXhwcmVzc2lvbkluUGFyZW50aGVzaXNSZXN0cGFyc2VFeHByZXNzaW9uSW5QYXJlbnRoZXNpc3RoaXNUb2tlbnN1cGVyVG9rZW5pZkNvdW50aGFzRW50cnlpZkNvbmRpdGlvbkRlbHRhY29tcHV0ZU5leHRpc01hcEVudHJ5cGFyc2VMaXRlcmFsRnVuY3Rpb25TdWZmaXh0eXBlUGFyYW1PckFyZ3BhcnNlTWFwTGl0ZXJhbEVudHJ5bG9va3NMaWtlRnVuY3Rpb25Cb2R5ZW5zdXJlQXJndW1lbnRzcGFyc2VBcmd1bWVudHNSZXN0cGFyc2VDb25zdHJ1Y3Rvckludm9jYXRpb25Bcmd1bWVudHNwYXJzZVNpbmdsZUxpdGVyYWxTdHJpbmdsaXRlcmFsU3ltYm9sbGl0ZXJhbFN5bWJvbENvbnRpbnVhdGlvbmhhc1NlZW5OYW1lZEFyZ3VtZW50bmFtZWRBcmd1bWVudFJlZmVyZW5jZWNvbXB1dGVUeXBlQWZ0ZXJJc09yQXNza2lwQ2hhaW5lZEFzSXNPcGVyYXRvcnNhc05vbk51bGxhYmxlbG9va3NMaWtlTG9jYWxGdW5jdGlvbm9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbk1vZGlmaWVyc2JlZm9yZUZvcm1hbHNjb3VsZEJlRXhwcmVzc2lvbmFmdGVySWRlbnRpZmllcm9yaWdpbmFsTGlzdGVuZXJhZnRlckV4cHJlc3Npb25wYXJzZVZhcmlhYmxlc0RlY2xhcmF0aW9uUmVzdGVuZFdpdGhTZW1pY29sb25wYXJzZU9wdGlvbmFsbHlJbml0aWFsaXplZElkZW50aWZpZXJsb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25wYXJzZUZvckxvb3BQYXJ0c1N0YXJ0cGFyc2VGb3JMb29wUGFydHNNaWRwYXJzZUZvckluUmVzdHBhcnNlRm9yUmVzdHBhcnNlRm9yTG9vcFBhcnRzUmVzdHBhcnNlRm9ySW5Mb29wUGFydHNSZXN0d2hpbGVUb2tlbmRvVG9rZW5mb3J3YXJkRXJyb3JzdHJ5IHN0YXRlbWVudG9wZW5QYXJlbnNleGNlcHRpb25OYW1lY2F0Y2hQYXJhbWV0ZXJ0cmFjZU5hbWVNZW1iZXJLaW5kLkNhdGNoY2F0Y2ggY2xhdXNlZmluYWxseSBjbGF1c2VMb29wU3RhdGUuSW5zaWRlU3dpdGNocGFyc2VTd2l0Y2hCbG9ja2JlZ2luU3dpdGNoc3dpdGNoIHN0YXRlbWVudGJlZ2luQ2FzZXBlZWtQYXN0TGFiZWxzcGFyc2VTdGF0ZW1lbnRzSW5Td2l0Y2hDYXNlbGFiZWxSZWZlcmVuY2VwcmV2aW91c1Rva2VucmVwb3J0QW5kU2tpcENsYXNzSW5DbGFzc3JlcG9ydEFuZFNraXBFbnVtSW5DbGFzc3JlcG9ydEFuZFNraXBUeXBlZGVmSW5DbGFzc2ZpbmREYXJ0RG9jaXNNdWx0aWxpbmVwYXJzZUNvbW1lbnRSZWZlcmVuY2VzcGFyc2VSZWZlcmVuY2VzSW5TaW5nbGVMaW5lQ29tbWVudHNwYXJzZVJlZmVyZW5jZXNJbk11bHRpTGluZUNvbW1lbnRtdWx0aUxpbmVEb2NpbkNvZGVCbG9ja2NvZGVCbG9ja2BgYCogICAgIHBhcnNlQ29tbWVudFJlZmVyZW5jZXNJblRleHQvLy8gICAgY29tbWVudFRva2VuY2g6XXJlZmVyZW5jZVN0YXJ0ZmluZFJlZmVyZW5jZUVuZGlzTGlua1RleHRlbmRDb2RlQmxvY2twYXJzZU9uZUNvbW1lbnRSZWZlcmVuY2VwYXJzZU9uZUNvbW1lbnRSZWZlcmVuY2VSZXN0aWRlbnRpZmllck9yT3BlcmF0b3JyaWdodEluZGV4ZmFzdGEucGFyc2VyLnBhcnNlcl9lcnJvcmJlZ2luT2Zmc2V0ZnJvbVRva2Vuc2Zhc3RhLnBhcnNlci5Bc3NlcnRmYXN0YS5wYXJzZXIuZm9ybWFsX3BhcmFtZXRlcl9raW5kbWFuZGF0b3J5b3B0aW9uYWxOYW1lZG9wdGlvbmFsUG9zaXRpb25hbGNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uRGVjbGFyYXRpb250eXBlVmFyaWFibGVEZWNsYXJhdGlvbnByZWZpeGVkVHlwZVJlZmVyZW5jZXR5cGVSZWZlcmVuY2V0eXBlUmVmZXJlbmNlQ29udGludWF0aW9ub3BlcmF0b3JOYW1lbG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uQ29udGludWF0aW9uaW5MaWJyYXJ5T3JQYXJ0T2ZEZWNsYXJhdGlvbmluU3ltYm9saXNDb250aW51YXRpb25pc0J1aWx0SW5JZGVudGlmaWVyQWxsb3dlZGxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0ZmFzdGEucGFyc2VyLmNsYXNzX2tpbmRmYXN0YS5wYXJzZXIubWVtYmVyX2tpbmRNZW1iZXJLaW5kLk5vblN0YXRpY0ZpZWxkTWVtYmVyS2luZC5TdGF0aWNGaWVsZE1lbWJlcktpbmQuVG9wTGV2ZWxGaWVsZEZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJHZW5lcmFsaXplZEZ1bmN0aW9uVHlwZU5vblN0YXRpY01ldGhvZFN0YXRpY01ldGhvZE5vblN0YXRpY0ZpZWxkU3RhdGljRmllbGRUb3BMZXZlbEZpZWxkZmFzdGEucGFyc2VyLnRvcF9sZXZlbF9wYXJzZXJmYXN0YS5wYXJzZXIudXRpbGJlZm9yZUNsb3NlQnJhY2VUb2tlbkZvcnRva2VuVmFsdWVza2lwTWV0YWRhdGFzcGxpdEd0RXFzcGxpdEd0R3RzcGxpdEd0R3RFcXNwbGl0R3RGcm9tR3RHdEVxc3BsaXRHdEZyb21HdEd0R3RzcGxpdEd0RnJvbUd0R3RHdEVxc3ludGhldGljR3RmYXN0YS5zdGFja19saXN0ZW5lck51bGxWYWx1ZS5Bc051bGxWYWx1ZS5DYXNjYWRlUmVjZWl2ZXJOdWxsVmFsdWUuQ29tbWVudHNOdWxsVmFsdWUuQ29uZGl0aW9uYWxseVNlbGVjdGVkSW1wb3J0TnVsbFZhbHVlLkNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTZXBhcmF0b3JOdWxsVmFsdWUuQ29uc3RydWN0b3JJbml0aWFsaXplcnNOdWxsVmFsdWUuQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHNOdWxsVmFsdWUuRG9jdW1lbnRhdGlvbkNvbW1lbnROdWxsVmFsdWUuRXh0ZW5kc0NsYXVzZU51bGxWYWx1ZS5GdW5jdGlvbkJvZHlBc3luY1Rva2VuTnVsbFZhbHVlLkZ1bmN0aW9uQm9keVN0YXJUb2tlbk51bGxWYWx1ZS5Jbml0aWFsaXplcnNOdWxsVmFsdWUuUGFyYW1ldGVyRGVmYXVsdFZhbHVlTnVsbFZhbHVlLlN0cmluZ0xpdGVyYWxOdWxsVmFsdWUuVHlwZUxpc3ROdWxsVmFsdWUuVHlwZVZhcmlhYmxlTnVsbFZhbHVlLlZhckZpbmFsT3JDb25zdFRva2VuTnVsbFZhbHVlLldpdGhDbGF1c2VBc0F3YWl0VG9rZW5CcmVha1RhcmdldENhc2NhZGVSZWNlaXZlckNvbW1lbnRzQ29uZGl0aW9uYWxseVNlbGVjdGVkSW1wb3J0Q29uc3RydWN0b3JJbml0aWFsaXplclNlcGFyYXRvckNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJzQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHNDb250aW51ZVRhcmdldERlZmVycmVkRG9jdW1lbnRhdGlvbkNvbW1lbnRFeHRlbmRzQ2xhdXNlRnVuY3Rpb25Cb2R5RnVuY3Rpb25Cb2R5QXN5bmNUb2tlbkZ1bmN0aW9uQm9keVN0YXJUb2tlbkxhYmVsc1BhcmFtZXRlckRlZmF1bHRWYWx1ZVByZWZpeFN3aXRjaFNjb3BlVHlwZUJ1aWxkZXJMaXN0VmFyRmluYWxPckNvbnN0VG9rZW5XaXRoQ2xhdXNlVW5leHBlY3RlZCB2YWx1ZSBgYCAoKS4gc3RhY2tJbmRleHBhZFJpZ2h0LS0tIGZhaWx1cmUKZmluaXNoU2luZ2xlRXhwcmVzc2lvbnRva2VuT3JOdWxscHJpbnRFdmVudAotLS0tLS0tLS0tLS0tLS0tLS0gID4+IHN0cmluZyBpbnRlcnBvbGF0aW9uU3RhY2tfZ3Jvd3BvcExpc3RzdGFydEluZGV4YXJyYXlJbmRleFBhcnNlclJlY292ZXJ5KEBfcHJvdG9Db25zdHJhaW50c19wYXJhbWV0ZXJzVG9Db25zdHJhaW5wcm90b0NvbnN0cmFpbnRpc1VwcGVyb2xkUHJvdG9Db25zdHJhaW50c0xlbmd0aGlzTWF0Y2hfaXNTdWJ0eXBlTWF0Y2hfY29uc3RyYWluTG93ZXJfY29uc3RyYWluVXBwZXJfaXNGdW5jdGlvblN1YnR5cGVNYXRjaHN1YnR5cGVTdWJzdGl0dXRpb25zdXBlcnR5cGVTdWJzdGl0dXRpb25mcmVzaFR5cGVWYXJpYWJsZXNfbWF0Y2hUeXBlRm9ybWFsc19pc0ludGVyZmFjZVN1YnR5cGVNYXRjaG1hdGNoaW5nU3VwZXJ0eXBlT2ZTdWJ0eXBlX2lzVG9wcGFyYW1zMXBhcmFtczJzdWJzdGl0dXRpb24xc3Vic3RpdHV0aW9uMnBGcmVzaHZhcmlhYmxlRnJlc2hib3VuZDFib3VuZDJUeXBlU2NoZW1hQ29uc3RyYWludEdhdGhlcmVyX1Byb3RvQ29uc3RyYWludFRyYWNlVHJhY2VBbmRSZXBvcnRTdGFja1RyYWNlTGluZXNtYXhGaWxlTGVuZ3RobWF4TGluZU5vTGVuZ3RobWF4Q29sdW1uTm9MZW5ndGhmcm9tTGluZXNmcm9tVHJhY2VyYW5nZVN0YXJ0cmFuZ2VFbmRmaWxlUHJlZml4bGFtYmRhaW5kZXhQYXR0ZXJuI1xkK1xzKnJlcGxhY2VGaXJzdDxhc3luY2hyb25vdXMgc3VzcGVuc2lvbj5sZWZ0UGFyZW5Qb3NyaWdodFBhcmVuUG9zbGFzdENvbG9ubmV4dFRvTGFzdENvbG9ubGluZU5vY29sdW1uTm88YW5vbnltb3VzIGNsb3N1cmU+RXJyb3IgcHJldHRpZnlpbmcgIiI6IHN1YnRyYWNlcHJldHRpZnlzaG93Q29sdW1uTm9zaG93RG90c2RvdHNmaWxlTGVuZ3RoIC5saW5lTm9MZW5ndGhjb2x1bW5Ob0xlbmd0aFN0YWNrVHJhY2VMaW5lZmlsZVRleHRsaW5lTm9UZXh0Y29sdW1uTm9UZXh0IEAgIFtfdHJhY2V0cmFjZUV4Y2VwdGlvbnNleGNlcHRpb25zdHJhY2VBbmRSZXBvcnRyZXBvcnRBbmRUcmFjZV90cmFjZUFuZFJlcG9ydHByZXR0aWZ5U3RhY2tUcmFjZXBhZGludGVuZGVkTGVuZ3RoZG90c0xlbmd0aGRvdHNJbmRleERlYnVnQ2FsbGJhY2thcmcxYXJnMkRlYnVnTWFwaW5kZXhTZXRDYWxsYmFja3B1dElmQWJzZW50Q2FsbGJhY2tyZW1vdmVDYWxsYmFja2FkZENhbGxiYWNrUktSVmNvbnRhaW5zVmFsdWVpZkFic2VudGFkZEVudHJpZXNLMlYydXBkYXRlQWxsRGVidWdJdGVyYWJsZURlYnVnTGlzdGFkZEFsbENhbGxiYWNrZmlsbFZhbHVlRGVidWdTZXRNYXBUeXBlQXNzZXJ0ZXJydW50aW1lVHlwZXNzaG93T2JqZWN0c3ZhbHVlc1R5cGVzID0+IENvbGxlY3Rpb25UeXBlQXNzZXJ0ZXJhc3NlcnRUeXBlRXhwZW5zaXZlTWFwX21hcHNjb3BpZXNLUlZSZXhwZW5zaXZlKEV4cGVuc2l2ZVNldF9zZXRzb2JqZWN0c29iamVjdHNUb1JlbW92ZW9iamVjdHNUb1JldGFpbnJldGFpblNldFN0YXRzcmVjb3JkTWFwZnJvbUV4aXN0aW5nZ2V0TWFwcmVjb3JkRWxlbWVudGdldExpc3RyZWNvcmRGcmVxdWVuY3lleGFtcGxlcmVjb3JkRnJlcXVlbmNpZXNyZWNvcmRlZEZyZXF1ZW5jaWVzcmVjb3JkQ291bnRlcnJlY29yZFRyYWNlc2FtcGxlRnJlcXVlbmN5c3RhY2tUcmFjZVNhbXBsZUZyZXF1ZW5jeWR1bXBTdGF0c2JlZm9yZUNsb3NlZHVtcENvcnJlbGF0aW9uaWRBaWRCZGF0YUFkYXRhQlN0YXRzT3V0cHV0RGVidWdPdXRwdXRTaW5rT3V0cHV0U3RhdHNQcmludGVyZ3JvdXBjcmVhdGVHcm91cENvbnRlbnRjcmVhdGVDaGlsZENvbnRlbnRiZWdpbkV4dHJhZW5kRXh0cmFfQmFzZVByaW50ZXImU3RhdHNQcmludGVyJkluZGVudGF0aW9uQmFzZVByaW50ZXJDb25zb2xlUHJpbnRlcmV4dHJhTGV2ZWxzcGFjZW5vbk51bGxWYWx1ZXNYTUxQcmludGVyZXNjYXBlb3BlbmVkPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz5fU3RhY2tUcmFjZU5vZGVjb21tb25QcmVmaXhzdWJ0cmFjZXNsZWFmYWRkU3VidHJhY2Vjb21tb25QcmVmaXhMZW5ndGhkdW1wVHJhY2VzZHVtcFN1YnRyYWNlc3N0ZXBjb3VudFRleHQuLi4KX1N0YWNrVHJhY2VUcmVldG90YWxDb3VudHNhbXBsZUFjdGl2ZVN0YXRzZnJlcXVlbmN5TWFwc3NldHNNYXBjb3VudGVyc01hcHRyYWNlTWFwZnJlcXVlbmN5TWFwc3RhdHNkdW1wRnJlcXVlbmNpZXNkdW1wU2V0c2R1bXBDb3VudGVyc2R1bXBJdGVyYWJsZWRhdGFNYXBmcmVxdWVuY2llc2ZyZXF1ZW5jeWR1bXBGcmVxdWVuY3lzb3J0ZWRNYXBjb3VudGVyc2R1bXBDb3VudGVyaGFzRGF0YWNhdGVnb3J5ZXhhbXBsZXNMaW1pdGhhc01vcmVpbmNsdWRlQ291bnR0cmFjZXNkdW1wVHJhY2V0cmVla2V5QWtleUJjb3JyZWxhdGlvbnMgdnMgYUFuZEJhQW5kTm90Qm5vdEFhbmRCY29ycmVsYXRpb24gJiYgICYmICFjaGlsZERhdGFub25OdWxsSXRlcmFibGVfc3RhdHNlbmFibGVTdGF0c091dHB1dHhtbFN0YXRzIGhhdmUgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmludmVyc2VNYXBpc1ZhbGlkS2V5dHJ5U29ydE1hcHNvcnRNYXBUcmFja01hcF9jb3VudHNfY291bnRzTWFwY291bnRzcHJpbnRIaXN0b2dyYW0gLS0gIG1hcHNpbmNyZW1lbnRhY2N1bXVsYXRlZCAgLS0gJTogbGVuZ3RoIDw9IF9ub3RpZnlMZW5ndGhDaGFuZ2VkZGFydDJqcy5qcy5lbnF1ZXVlQ29kZWdlbkVucXVldWVyX3Byb2Nlc3NlZEVudGl0aWVzY29kZWdlbiBlbnF1ZXVlckNvZGVnZW4gd29yayBsaXN0IGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGFkZCBjb2RlZ2VuLnR5cGVVc2Vjb2RlZ2VuLmR5bmFtaWNVc2Vjb2RlZ2VuLnN0YXRpY1VzZWNvZGVnZW4uY29uc3RhbnRVc2VkYXJ0MmpzLmpzX2VtaXR0ZXIuY29kZV9lbWl0dGVyX3Rhc2tzdGFydHVwX2pzX2VtaXR0ZXJOYXRpdmVFbWl0dGVyVHlwZVRlc3RSZWdpc3RyeXR5cGVUZXN0UmVnaXN0cnlfbmF0aXZlRW1pdHRlcl9lbWl0dGVyX2dlbmVyYXRlU291cmNlTWFwTmF0aXZlRW1pdHRlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuRW1pdHRlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuQ29kZSBlbWl0dGVyX2ZpbmFsaXplUnRpY29tcHV0ZVJlcXVpcmVkVHlwZUNoZWNrc2NvbXB1dGVSdGlOZWVkZWRDbGFzc2VzZmluYWxpemUgcnRpcHJvZ3JhbUJ1aWxkZXJydGlDaGVja3NydGlOZWVkZWRDbGFzc2VzZW1pdFByb2dyYW1wcm90b3R5cGVBY2Nlc3NoYXNCZWVuSW5zdGFudGlhdGVkc3RhdGljRnVuY3Rpb25BY2Nlc3NzdGF0aWNGaWVsZEFjY2Vzc2lzb2xhdGVMYXp5SW5pdGlhbGl6ZXJBY2Nlc3NzdGF0aWNDbG9zdXJlQWNjZXNzY29uc3RydWN0b3JBY2Nlc3N0eXBlQWNjZXNzdHlwZUFjY2Vzc05ld1J0aXR5cGVWYXJpYWJsZUFjY2Vzc05ld1J0aWdsb2JhbGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3NTdHJpbmdwcm9ncmFtRm9yVGVzdGluZ2ludGVyY2VwdG9yUHJvdG90eXBlQWNjZXNzaW50ZXJjZXB0b3JDbGFzc0FjY2Vzc2dlbmVyYXRlRnVuY3Rpb25UaGF0UmV0dXJuc051bGxjb21wYXJlQ29uc3RhbnRzaXNDb25zdGFudElubGluZWRPckFscmVhZHlFbWl0dGVkYWJzdHJhY3Rfc2luay5kYXJ0YWJzdHJhY3Rfc291cmNlLmRhcnRiaW5hcnlfc2luay5kYXJ0YmluYXJ5X3NvdXJjZS5kYXJ0aGVscGVycy5kYXJ0bWVtYmVyX2RhdGEuZGFydG1peGlucy5kYXJ0bm9kZV9pbmRleGVyLmRhcnRvYmplY3Rfc2luay5kYXJ0b2JqZWN0X3NvdXJjZS5kYXJ0RGF0YVNpbmt3cml0ZU1lbWJlck5vZGV3cml0ZU1lbWJlck5vZGVzd3JpdGVNZW1iZXJOb2RlTWFwd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGV3cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbHdyaXRlVHJlZU5vZGV3cml0ZVRyZWVOb2RlSW5Db250ZXh0d3JpdGVUcmVlTm9kZU9yTnVsbEluQ29udGV4dHdyaXRlVHJlZU5vZGVzSW5Db250ZXh0d3JpdGVUcmVlTm9kZU1hcEluQ29udGV4dHdyaXRlVHlwZVBhcmFtZXRlck5vZGV3cml0ZVR5cGVQYXJhbWV0ZXJOb2Rlc3dyaXRlRGFydFR5cGVzd3JpdGVEYXJ0VHlwZU5vZGV3cml0ZURhcnRUeXBlTm9kZXN3cml0ZVNvdXJjZVNwYW53cml0ZUxpYnJhcnlNYXB3cml0ZUxvY2Fsd3JpdGVMb2NhbE9yTnVsbHdyaXRlTG9jYWxzd3JpdGVDb25zdGFudE9yTnVsbHdyaXRlQ29uc3RhbnRzd3JpdGVEb3VibGVWYWx1ZXdyaXRlSW50ZWdlclZhbHVld3JpdGVJbXBvcnR3cml0ZUltcG9ydE9yTnVsbHdyaXRlcmluTWVtYmVyQ29udGV4dERhdGFTb3VyY2VyZWdpc3RlckxvY2FsTG9va3VwbG9jYWxMb29rdXByZWFkTGlicmFyeU5vZGVyZWFkQ2xhc3NOb2RlcmVhZFR5cGVkZWZOb2RlcmVhZE1lbWJlck5vZGVyZWFkTWVtYmVyTm9kZXNyZWFkTWVtYmVyTm9kZU1hcHJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGVyZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxscmVhZFRyZWVOb2RlcmVhZFRyZWVOb2RlSW5Db250ZXh0cmVhZFRyZWVOb2RlT3JOdWxsSW5Db250ZXh0cmVhZFRyZWVOb2Rlc0luQ29udGV4dHJlYWRUcmVlTm9kZU1hcEluQ29udGV4dHJlYWRUeXBlUGFyYW1ldGVyTm9kZXJlYWRUeXBlUGFyYW1ldGVyTm9kZXNyZWFkRGFydFR5cGVzcmVhZERhcnRUeXBlTm9kZXJlYWREYXJ0VHlwZU5vZGVzcmVhZFNvdXJjZVNwYW5yZWFkTGlicmFyeU1hcHJlYWRMb2NhbHJlYWRMb2NhbE9yTnVsbHJlYWRMb2NhbHNyZWFkQ29uc3RhbnRPck51bGxyZWFkRG91YmxlVmFsdWVyZWFkSW50ZWdlclZhbHVlcmVhZENvbnN0YW50c3JlYWRJbXBvcnRyZWFkSW1wb3J0T3JOdWxsRW50aXR5TG9va3VwZ2V0TGlicmFyeUJ5SW5kZXhnZXRDbGFzc0J5SW5kZXhnZXRUeXBlZGVmQnlJbmRleGdldE1lbWJlckJ5SW5kZXhnZXRUeXBlVmFyaWFibGVCeUluZGV4RW50aXR5UmVhZGVycmVhZExpYnJhcnlGcm9tRGF0YVNvdXJjZXJlYWRDbGFzc0Zyb21EYXRhU291cmNlcmVhZFR5cGVkZWZGcm9tRGF0YVNvdXJjZXJlYWRNZW1iZXJGcm9tRGF0YVNvdXJjZXJlYWRUeXBlVmFyaWFibGVGcm9tRGF0YVNvdXJjZUVudGl0eVdyaXRlcndyaXRlTGlicmFyeVRvRGF0YVNpbmt3cml0ZUNsYXNzVG9EYXRhU2lua2NsYXNzSW5kZXh3cml0ZVR5cGVkZWZUb0RhdGFTaW5rdHlwZWRlZkluZGV4d3JpdGVNZW1iZXJUb0RhdGFTaW5rd3JpdGVUeXBlVmFyaWFibGVUb0RhdGFTaW5rdHlwZVZhcmlhYmxlSW5kZXhMb2NhbExvb2t1cGdldExvY2FsQnlJbmRleENvZGVnZW5SZWFkZXJDb2RlZ2VuV3JpdGVyQWJzdHJhY3REYXRhU2lua19kYXJ0VHlwZVdyaXRlcl9kYXJ0VHlwZU5vZGVXcml0ZXJfdGFnc19tZW1iZXJEYXRhX3N0cmluZ0luZGV4X3VyaUluZGV4X21lbWJlck5vZGVJbmRleF9jb25zdGFudEluZGV4X2dlbmVyYWxDYWNoZXNfZW50aXR5V3JpdGVyX2NvZGVnZW5Xcml0ZXJ0YWdGcmVxdWVuY3lNYXBfY3VycmVudE1lbWJlckNvbnRleHRfY3VycmVudE1lbWJlckRhdGFfYmVnaW5fZW5kZXhpc3RpbmdUYWdVbmV4cGVjdGVkIHRhZyBlbmQuIEV4cGVjdGVkICwgZm91bmQgb2xkTWVtYmVyQ29udGV4dG9sZE1lbWJlckRhdGFjdXJyZW50TWVtYmVyRGF0YURhdGFTaW5rIGhhcyBubyBjdXJyZW50IG1lbWJlciBjb250ZXh0Ll93cml0ZURhdGFLaW5kRGF0YUtpbmQuc291cmNlU3Bhbl93cml0ZVVyaV93cml0ZUludEludGVybmFsRGF0YUtpbmQuZGFydFR5cGVfd3JpdGVEYXJ0VHlwZWZ1bmN0aW9uVHlwZVZhcmlhYmxlc01pc3NpbmcgRGFydFR5cGUgaXMgbm90IGFsbG93ZWQuRGFydFR5cGVLaW5kLm5vbmVEYXRhS2luZC5kYXJ0VHlwZU5vZGVfd3JpdGVEYXJ0VHlwZU5vZGVNaXNzaW5nIGlyLkRhcnRUeXBlIG5vZGUgaXMgbm90IGFsbG93ZWQuRGFydFR5cGVOb2RlS2luZC5ub25lRGF0YUtpbmQubWVtYmVyTm9kZV93cml0ZU1lbWJlck5vZGVfd3JpdGVNZW1iZXJOb2RlSW50ZXJuYWxfd3JpdGVFbnVtSW50ZXJuYWxNZW1iZXJDb250ZXh0S2luZC5jbHNfd3JpdGVDbGFzc05vZGVfd3JpdGVTdHJpbmdNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5X3dyaXRlTGlicmFyeU5vZGVEYXRhS2luZC5jbGFzc05vZGVEYXRhS2luZC50eXBlZGVmTm9kZV93cml0ZVR5cGVkZWZOb2RlRGF0YUtpbmQubGlicmFyeU5vZGVEYXRhS2luZC5lbnVtVmFsdWVEYXRhS2luZC5ib29sX3dyaXRlQm9vbERhdGFLaW5kLnVyaURhdGFLaW5kLnN0cmluZ0RhdGFLaW5kLnVpbnQzMERhdGFLaW5kLnRyZWVOb2RlX3dyaXRlVHJlZU5vZGV3cml0ZVRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWxtZW1iZXJEYXRhX2dldE1lbWJlckRhdGFObyBlbmNsb3NpbmcgbWVtYmVyIG9mIFRyZWVOb2RlIF9UcmVlTm9kZUtpbmQuY2xzX1RyZWVOb2RlS2luZC5tZW1iZXJfVHJlZU5vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb25WYXJpYWJsZV9UcmVlTm9kZUtpbmQuZnVuY3Rpb25Ob2RlX3dyaXRlRnVuY3Rpb25Ob2RlX1RyZWVOb2RlS2luZC50eXBlUGFyYW1ldGVyX3dyaXRlVHlwZVBhcmFtZXRlcl9UcmVlTm9kZUtpbmQuY29uc3RhbnRnZXRJbmRleEJ5Q29uc3RhbnRfVHJlZU5vZGVLaW5kLm5vZGVnZXRJbmRleEJ5VHJlZU5vZGVObyBUcmVlTm9kZSBpbmRleCBmb3VuZCBmb3IgZm91bmQgaW4gX0Z1bmN0aW9uTm9kZUtpbmQucHJvY2VkdXJlX0Z1bmN0aW9uTm9kZUtpbmQuY29uc3RydWN0b3JfRnVuY3Rpb25Ob2RlS2luZC5mdW5jdGlvbkV4cHJlc3Npb25fRnVuY3Rpb25Ob2RlS2luZC5mdW5jdGlvbkRlY2xhcmF0aW9uVW5zdXBwb3J0ZWQgRnVuY3Rpb25Ob2RlIHBhcmVudCBEYXRhS2luZC50eXBlUGFyYW1ldGVyTm9kZV9UeXBlUGFyYW1ldGVyS2luZC5jbHNfVHlwZVBhcmFtZXRlcktpbmQuZnVuY3Rpb25Ob2RlVW5zdXBwb3J0ZWQgVHlwZVBhcmFtZXRlciBwYXJlbnQgTG9jYWxLaW5kLmpMb2NhbGxvY2FsSW5kZXhMb2NhbEtpbmQudGhpc0xvY2FsTG9jYWxLaW5kLmJveExvY2FsTG9jYWxLaW5kLmFub255bW91c0Nsb3N1cmVMb2NhbExvY2FsS2luZC50eXBlVmFyaWFibGVMb2NhbFVuc3VwcG9ydGVkIGxvY2FsIERhdGFLaW5kLmNvbnN0YW50X3dyaXRlQ29uc3RhbnREYXRhS2luZC5kb3VibGVfd3JpdGVEb3VibGVWYWx1ZXNldEZsb2F0NjRnZXRVaW50MTZEYXRhS2luZC5pbnRfd3JpdGVCaWdJbnRfd3JpdGVDb25zdGFudEludGVybmFsQ29uc3RhbnRWYWx1ZUtpbmQuQk9PTENvbnN0YW50VmFsdWVLaW5kLklOVENvbnN0YW50VmFsdWVLaW5kLkRPVUJMRUNvbnN0YW50VmFsdWVLaW5kLlNUUklOR0NvbnN0YW50VmFsdWVLaW5kLk5VTExDb25zdGFudFZhbHVlS2luZC5GVU5DVElPTkNvbnN0YW50VmFsdWVLaW5kLkxJU1RDb25zdGFudFZhbHVlS2luZC5TRVRDb25zdGFudFZhbHVlS2luZC5NQVBrZXlMaXN0cHJvdG9WYWx1ZUNvbnN0YW50VmFsdWVLaW5kLkNPTlNUUlVDVEVEQ29uc3RhbnRWYWx1ZUtpbmQuVFlQRUNvbnN0YW50VmFsdWVLaW5kLklOU1RBTlRJQVRJT05Db25zdGFudFZhbHVlS2luZC5OT05fQ09OU1RBTlRDb25zdGFudFZhbHVlS2luZC5JTlRFUkNFUFRPUkNvbnN0YW50VmFsdWVLaW5kLkRFRkVSUkVEX0dMT0JBTHJlZmVyZW5jZWRDb25zdGFudFZhbHVlS2luZC5EVU1NWV9JTlRFUkNFUFRPUkNvbnN0YW50VmFsdWVLaW5kLlVOUkVBQ0hBQkxFQ29uc3RhbnRWYWx1ZUtpbmQuSlNfTkFNRV93cml0ZVN0cmluZ0ludGVybmFsX3dyaXRlVXJpSW50ZXJuYWxEYXRhS2luZC5pbXBvcnRfd3JpdGVJbXBvcnRfd3JpdGVJbXBvcnRJbnRlcm5hbENhbiBub3Qgc2VyaWFsaXplIGFuIE91dHB1dFVuaXQgcmVmZXJlbmNlIHdpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gd3JpdGVyLkNhbiBub3Qgc2VyaWFsaXplIGFuIEFic3RyYWN0VmFsdWUgd2l0aG91dCBhIHJlZ2lzdGVyZWQgY29kZWdlbiB3cml0ZXIuQ2FuIG5vdCBzZXJpYWxpemUgYSBKUyBuZG9lIHdpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gd3JpdGVyLkFic3RyYWN0RGF0YVNvdXJjZV9lbnRpdHlSZWFkZXJfbG9jYWxMb29rdXBfY29kZWdlblJlYWRlcl9yZWFkRGFydFR5cGVzX3JlYWREYXJ0VHlwZV9yZWFkRGFydFR5cGVOb2Rlc19yZWFkRGFydFR5cGVOb2RlX2NoZWNrRGF0YUtpbmRfcmVhZFVyaV9yZWFkSW50SW50ZXJuYWxEYXJ0VHlwZUtpbmQudm9pZFR5cGVEYXJ0VHlwZUtpbmQudHlwZVZhcmlhYmxlRGFydFR5cGVLaW5kLmZ1bmN0aW9uVHlwZVZhcmlhYmxlRGFydFR5cGVLaW5kLmZ1bmN0aW9uVHlwZURhcnRUeXBlS2luZC5pbnRlcmZhY2VUeXBlRGFydFR5cGVLaW5kLnR5cGVkZWZEYXJ0VHlwZUtpbmQuZHluYW1pY1R5cGVEYXJ0VHlwZUtpbmQuZnV0dXJlT3J0eXBlVmFyaWFibGVDb3VudFVuZXhwZWN0ZWQgRGFydFR5cGVLaW5kIERhcnRUeXBlTm9kZUtpbmQudm9pZFR5cGVEYXJ0VHlwZU5vZGVLaW5kLnR5cGVQYXJhbWV0ZXJUeXBlRGFydFR5cGVOb2RlS2luZC5mdW5jdGlvblR5cGVEYXJ0VHlwZU5vZGVLaW5kLmZ1bmN0aW9uVHlwZVZhcmlhYmxlRGFydFR5cGVOb2RlS2luZC5pbnRlcmZhY2VUeXBlRGFydFR5cGVOb2RlS2luZC50eXBlZGVmRGFydFR5cGVOb2RlS2luZC5keW5hbWljVHlwZURhcnRUeXBlTm9kZUtpbmQuYm90dG9tVHlwZURhcnRUeXBlTm9kZUtpbmQuaW52YWxpZFR5cGVEYXJ0VHlwZU5vZGVLaW5kLnRoaXNJbnRlcmZhY2VUeXBlRGFydFR5cGVOb2RlS2luZC5leGFjdEludGVyZmFjZVR5cGVEYXJ0VHlwZU5vZGVLaW5kLmRvZXNOb3RDb21wbGV0ZWZ1bmN0aW9uLXR5cGUtbm9kZW5hbWVkUGFyYW1ldGVyQ291bnRfcmVhZE1lbWJlckRhdGFfcmVhZE1lbWJlckRhdGFJbnRlcm5hbF9yZWFkRW51bUludGVybmFsX3JlYWRDbGFzc0RhdGFfcmVhZFN0cmluZ2xvb2t1cE1lbWJlckRhdGFCeU5hbWVfcmVhZExpYnJhcnlEYXRhVW5zdXBwb3J0ZWQgX01lbWJlcktpbmQgbG9va3VwQ2xhc3NCeU5hbWVfcmVhZFR5cGVkZWZOb2RlbG9va3VwVHlwZWRlZmdldExpYnJhcnlEYXRhQnlVcmlfcmVhZFVyaUludGVybmFsX3JlYWRCb29sX3JlYWRTdHJpbmdJbnRlcm5hbF9yZWFkVHJlZU5vZGVsaWJyYXJ5RGF0YWNsYXNzRGF0YWxvb2t1cENsYXNzQnlOb2RlbG9va3VwTWVtYmVyRGF0YUJ5Tm9kZXJlYWRUcmVlTm9kZUluQ29udGV4dEludGVybmFsX3JlYWRDb25zdGFudF9yZWFkRG91YmxlVmFsdWVzZXRVaW50MTZnZXRGbG9hdDY0X3JlYWRCaWdJbnRfcmVhZENvbnN0YW50SW50ZXJuYWxVbmV4cGV4dGVkIGNvbnN0YW50IHZhbHVlIGtpbmQgX3JlYWRGdW5jdGlvbk5vZGVfcmVhZFR5cGVQYXJhbWV0ZXJnZXRDb25zdGFudEJ5SW5kZXh0cmVlTm9kZWdldFRyZWVOb2RlQnlJbmRleE5vIFRyZWVOb2RlIGZvdW5kIGZvciBpbmRleCBfZXJyb3JDb250ZXh0VW5leHBlY3RlZCBfVHJlZU5vZGVLaW5kIGZ1bmN0aW9uRXhwcmVzc2lvblVuZXhwZWN0ZWQgX0Z1bmN0aW9uTm9kZUtpbmQgVW5leHBlY3RlZCBfVHlwZVBhcmFtZXRlcktpbmQga2luZCBleHBlY3RlZEtpbmRhY3R1YWxLaW5kSW52YWxpZCBkYXRhIGtpbmQuIFVuZXhwZWN0ZWQgbG9jYWwga2luZCBfcmVhZEltcG9ydF9yZWFkSW1wb3J0SW50ZXJuYWxDYW4gbm90IGRlc2VyaWFsaXplIGFuIE91dHB1dFVuaXQgcmVmZXJlbmNlIHdpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gcmVhZGVyLkNhbiBub3QgZGVzZXJpYWxpemUgYW4gQWJzdHJhY3RWYWx1ZSBDYW4gbm90IGRlc2VyaWFsaXplIGEgSlMgbm9kZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHJlYWRlci5fYnVmZmVyZWRTaW5rQmluYXJ5U291cmNlSW1wbF9yZWFkQnl0ZUludmFsaWQgZGF0YSBraW5kIGluZGV4LiBFeHBlY3RlZCBvbmUgb2YgLCBmb3VuZCBpbmRleCAgT2Zmc2V0IERhdGFLaW5kdWludDMwZW51bVZhbHVlbWVtYmVyTm9kZXR5cGVQYXJhbWV0ZXJOb2RlZGFydFR5cGVOb2RlTWVtYmVyQ29udGV4dEtpbmRMb2NhbEtpbmRqTG9jYWxib3hMb2NhbGFub255bW91c0Nsb3N1cmVMb2NhbHR5cGVWYXJpYWJsZUxvY2FsX1RyZWVOb2RlS2luZGZ1bmN0aW9uRGVjbGFyYXRpb25WYXJpYWJsZV9GdW5jdGlvbk5vZGVLaW5kX1R5cGVQYXJhbWV0ZXJLaW5kVGFnKERhcnRUeXBlS2luZHZvaWRUeXBlZnVuY3Rpb25UeXBlVmFyaWFibGVmdXR1cmVPckRhcnRUeXBlV3JpdGVydmlzaXRUeXBlc0RhcnRUeXBlTm9kZUtpbmR0eXBlUGFyYW1ldGVyVHlwZWludmFsaWRUeXBldGhpc0ludGVyZmFjZVR5cGVleGFjdEludGVyZmFjZVR5cGVkb2VzTm90Q29tcGxldGVEYXJ0VHlwZU5vZGVXcml0ZXJVbmV4cGVjdGVkIGlyLkRhcnRUeXBlIEluZGV4ZWRTaW5rX2NhY2hld3JpdGVWYWx1ZUN5Y2xpYyBkZXBlbmRlbmN5IG9uIGNhY2hlZCB2YWx1ZTogSW5kZXhlZFNvdXJjZXJlYWRWYWx1ZVVuZmlsbGVkIGluZGV4IENvbXBvbmVudExvb2t1cF9jb21wb25lbnRfbGlicmFyeU1hcF9MaWJyYXJ5RGF0YV9jbGFzc2VzQnlOYW1lX2NsYXNzZXNCeU5vZGVfdHlwZWRlZnNfbWVtYmVyc0J5TmFtZV9tZW1iZXJzQnlOb2RlX2Vuc3VyZUNsYXNzZXNEdXBsaWNhdGUgY2xhc3MgJ3RyeWluZyB0byBhZGQgRHVwbGljYXRlIHR5cGVkZWYgJ19lbnN1cmVNZW1iZXJzRHVwbGljYXRlIG1lbWJlciAnX0xpYnJhcnlEYXRhKCkpX0NsYXNzRGF0YV9DbGFzc0RhdGEoX01lbWJlckRhdGFfaW5kZXhUb05vZGVNYXBfbm9kZVRvSW5kZXhNYXBfY29uc3RhbnRJbmRleE1hcF9lbnN1cmVNYXBzX2NyZWF0ZUNvbnN0YW50SW5kZXhlcmdldENvbnN0YW50Z2V0SW5kZXhObyBpbmRleCBmb3VuZCBmb3IgX01lbWJlckRhdGEoRGF0YVNvdXJjZU1peGluaGFzQ2xhc3NEYXRhU2lua01peGluX1RyZWVOb2RlSW5kZXhlclZpc2l0b3JfY3VycmVudEluZGV4cmVnaXN0ZXJOb2RlX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yX3Zpc2l0ZWROb25pbmRleGVkTm9kZXNfcmVnaXN0ZXJDb25zdGFudCB3aXRob3V0IGluZGV4OiBJbmRleCB3aXRob3V0IGNvbnN0YW50OiBVbmV4cGVjdGVkIGNvbnN0YW50OiBPYmplY3RTaW5rYmVnaW46T2JqZWN0U291cmNlX3JlYWQgdmFsdWUsIGZvdW5kIGV4cGVjdGVkVGFnYWN0dWFsVGFnVW5leHBlY3RlZCBiZWdpbiB0YWcuIFVuZXhwZWN0ZWQgZW5kIHRhZy4gCj4gZnVuY3Rpb25UeXBlTm9kZVRhZ19jb21wdXRlTWVtYmVyTmFtZXNzYU1vZHVsYXJOYW1lck1vZHVsYXJOYW1lckltcGxNb2R1bGFyRW1pdHRlckltcGxUeXBlRXhwcmVzc2lvblJlY2lwZVNzYUZ1bmN0aW9uQ29tcGlsZXJfYnVpbGRlcm9wdGltaXplcl9jb2RlZ2Vub3B0aW1pemVzb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXJfcmV3cml0ZUFzeW5jYXN5bmNUeXBlUGFyYW1ldGVyYm9keVNvdXJjZUluZm9ybWF0aW9uZXhpdFNvdXJjZUluZm9ybWF0aW9uX21ha2VBc3luY1Jld3JpdGVyX21ha2VTeW5jU3RhclJld3JpdGVyX21ha2VBc3luY1N0YXJSZXdyaXRlcl9mZXRjaEl0ZW1UeXBlZ2V0VHlwZVJlcHJlc2VudGF0aW9uX2ZldGNoSXRlbVR5cGVOZXdSdGloZWxwZXJFbGVtZW50cmVjaXBlZW5jb2RlR3JvdW5kUmVjaXBlIygjKXN0YXJ0RnVuY3Rpb25jb21wbGV0ZXJGYWN0b3J5aXRlbVR5cGVFeHByZXNzaW9uYXN5bmNTdGFydGFzeW5jQXdhaXRhc3luY1JldHVybmFzeW5jUmV0aHJvd2NvbXBsZXRlckZhY3RvcnlUeXBlQXJndW1lbnRzc2FmZVZhcmlhYmxlTmFtZXNhZmVWYXJpYWJsZVByZWZpeEZvckFzeW5jUmV3cml0ZWJvZHlOYW1lZGVyaXZlQXN5bmNCb2R5TmFtZWl0ZXJhYmxlRmFjdG9yeWl0ZXJhYmxlRmFjdG9yeVR5cGVBcmd1bWVudHN5aWVsZFN0YXJFeHByZXNzaW9udW5jYXVnaHRFcnJvckV4cHJlc3Npb25uZXdDb250cm9sbGVybmV3Q29udHJvbGxlclR5cGVBcmd1bWVudHN5aWVsZEV4cHJlc3Npb25Tc2FCdWlsZGVyU3NhQnVpbGRlclRhc2tfc291cmNlSW5mb3JtYXRpb25GYWN0b3J5U1NBIGJ1aWxkZXJBU1NJR05NRU5UQklUX09SQklUX1hPUkJJVF9BTkRMRUZUX0hBTkRfU0lERWRhcnQyanMuY29uc3RhbnRzLnZhbHVlc0NvbnN0YW50VmFsdWVLaW5kSU5URVJDRVBUT1JKU19OQU1FRFVNTVlfSU5URVJDRVBUT1JVTlJFQUNIQUJMRURFRkVSUkVEX0dMT0JBTE5PTl9DT05TVEFOVENvbnN0YW50VmFsdWVWaXNpdG9ydmlzaXREdW1teUludGVyY2VwdG9ydmlzaXRVbnJlYWNoYWJsZXZpc2l0SnNOYW1ldmlzaXREZWZlcnJlZEdsb2JhbHZpc2l0Tm9uQ29uc3RhbnRpc0NvbnN0cnVjdGVkT2JqZWN0aXNUeXBlaXNEdW1teWlzTWludXNaZXJvaXNPbmVpc1Bvc2l0aXZlSW5maW5pdHlpc05lZ2F0aXZlSW5maW5pdHlVc2UgQ29uc3RhbnRWYWx1ZS50b0RhcnRUZXh0KCkgb3IgQ29uc3RhbnRWYWx1ZS50b1N0cnVjdHVyZWRUZXh0KCkgaW5zdGVhZCBvZiBDb25zdGFudFZhbHVlLnRvU3RyaW5nKCkuRnVuY3Rpb25Db25zdGFudFZhbHVlMjE0NzQ4MzY0N0Z1bmN0aW9uQ29uc3RhbnQoUHJpbWl0aXZlQ29uc3RhbnQuPT1QcmltaXRpdmVDb25zdGFudC5oYXNoQ29kZU51bGxDb25zdGFudFZhbHVlSnNOdWxsTnVtQ29uc3RhbnRWYWx1ZUludENvbnN0YW50VmFsdWVfY2FjaGVkVmFsdWVzaW50Q29uc3RhbnRWYWxpc1Bvc2l0aXZlb3RoZXJJbnRJbnRDb25zdGFudChEb3VibGVDb25zdGFudFZhbHVlTmFOSW5maW5pdHktSW5maW5pdHkwLjAxLjBvdGhlckRvdWJsZURvdWJsZUNvbnN0YW50KEJvb2xDb25zdGFudFZhbHVlQm9vbENvbnN0YW50KFRydWVDb25zdGFudFZhbHVlRmFsc2VDb25zdGFudFZhbHVlU3RyaW5nQ29uc3RhbnRWYWx1ZW90aGVyU3RyaW5ndG9EYXJ0U3RyaW5nU3RyaW5nQ29uc3RhbnQoT2JqZWN0Q29uc3RhbnRWYWx1ZV91bnBhcnNlVHlwZUFyZ3VtZW50c1R5cGVDb25zdGFudChMaXN0Q29uc3RhbnRWYWx1ZUxpc3RDb25zdGFudChTZXRDb25zdGFudFZhbHVlb3RoZXJTZXRTZXRDb25zdGFudCh9KU1hcENvbnN0YW50VmFsdWVfbG9va3VwTWFwb3RoZXJNYXBsb29rdXBNYXBNYXBDb25zdGFudChpbnRlcmNlcHRvcihJbnRlcmNlcHRvckNvbnN0YW50KEpzTmFtZUNvbnN0YW50VmFsdWVqc19uYW1lKEpzTmFtZUNvbnN0YW50KER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlZHVtbXlfaW50ZXJjZXB0b3IoRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50KFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZXVucmVhY2hhYmxlKClVbnJlYWNoYWJsZUNvbnN0YW50KClvdGhlclZhcl9maWVsZHNTb3J0ZWRCeU5hbWVDb25zdHJ1Y3RlZENvbnN0YW50KEluc3RhbnRpYXRpb25Db25zdGFudChpc1JlZmVyZW5jZWRlZmVycmVkX2dsb2JhbChEZWZlcnJlZEdsb2JhbENvbnN0YW50KE5vbkNvbnN0YW50VmFsdWVOb25Db25zdGFudD4+bm9uLWNvbnN0YW50PDx0cmVhdEFzRHluYW1pY2lzRnVuY3Rpb25UeXBlVmFyaWFibGVjb250YWluc0ZyZWVUeXBlVmFyaWFibGVzX2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXNmb3JFYWNoVHlwZVZhcmlhYmxlYXNzdW1wdGlvbnNiaW5kaW5nc19Bc3N1bXB0aW9uc19hc3N1bXB0aW9uTWFwX2FkZEFzc3VtcHRpb25hc3N1bWVfcmVtb3ZlQXNzdW1wdGlvbmZvcmdldGlzQXNzdW1lZF9Bc3N1bXB0aW9ucygpLT5hcmd1bWVudEhhc2hfZXF1YWxzSW50ZXJuYWxuZXdVbmFsaWFzZWRUeXBlVmFyaWFibGVUeXBlRnVuY3Rpb25UeXBlVmFyaWFibGVfYm91bmRCb3VuZCBoYXNuJ3QgYmVlbiBzZXQuQm91bmQgaGFzIGFscmVhZHkgYmVlbiBzZXQuSW52YWxpZCByZXR1cm4gdHlwZSBpbiBJbnZhbGlkIHBhcmFtZXRlciB0eXBlcyBpbiBJbnZhbGlkIG9wdGlvbmFsIHBhcmFtZXRlciB0eXBlcyBpbiBJbnZhbGlkIG5hbWVkIHBhcmFtZXRlcnMgaW4gSW52YWxpZCBuYW1lZCBwYXJhbWV0ZXIgdHlwZXMgaW4gSW52YWxpZCB0eXBlIHZhcmlhYmxlcyBpbiByZXN0b3JlaGFzRnJlZW5ld1BhcmFtZXRlclR5cGVzbmV3T3B0aW9uYWxQYXJhbWV0ZXJUeXBlc25ld05hbWVkUGFyYW1ldGVyVHlwZXNuZXdUeXBlVmFyaWFibGVzbmV3Qm91bmRuZWVkc09wdGlvbmFsQ29tbWFuZWVkc05hbWVkQ29tbWFGdXR1cmVPclR5cGVuZXdUeXBlQXJndW1lbnRCYXNlRGFydFR5cGVWaXNpdG9yQWJzdHJhY3RUeXBlUmVsYXRpb25lbnN1cmVSZXNvbHZlZGdldFVuYWxpYXNlZGFzSW5zdGFuY2VPZmdldENhbGxUeXBlaW50ZXJuYWwgZXJyb3I6IHVua25vd24gdHlwZSBpbnZhbGlkVHlwZUFyZ3VtZW50c2ludmFsaWRGdW5jdGlvblJldHVyblR5cGVzaW52YWxpZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZXNpbnZhbGlkVHlwZVZhcmlhYmxlQm91bmRzaW52YWxpZENhbGxhYmxlVHlwZWNoZWNrVHlwZUFyZ3VtZW50c3RUeXBlQXJnc3NUeXBlQXJnc3Rmc2ZnZXRDb21tb25UeXBlVmFyaWFibGVzQ291bnR2aXNpdEZ1bmN0aW9uVHlwZUludGVybmFsdHBzc3Bzc05vdEVtcHR5dE5vdEVtcHR5dE5leHRzTmV4dGluY29tcGF0aWJsZVBhcmFtZXRlcnN0TmFtZXN0VHlwZXNzTmFtZXNzVHlwZXN0SW5kZXhzSW5kZXhzZWVuVHlwZVZhcmlhYmxlc01vcmVTcGVjaWZpY1Zpc2l0b3JTdWJ0eXBlVmlzaXRvcnNGdXR1cmVPcnRJbnRlcmZhY2VQb3RlbnRpYWxTdWJ0eXBlVmlzaXRvcl9hc3N1bWVJbnN0YW50aWF0aW9uc2lzUG90ZW50aWFsU3VidHlwZWFzc3VtZUluc3RhbnRpYXRpb25zRGFydFR5cGVzSVNfU1VCVFlQRU1BWUJFX1NVQlRZUEVOT1RfU1VCVFlQRWNvbXB1dGVTdWJ0eXBlUmVsYXRpb25zdWJzdEJ5Q29udGV4dGdldFN1cGVydHlwZWdldEludGVyZmFjZXNjaGVja1R5cGVWYXJpYWJsZUJvdW5kc2NoZWNrVHlwZVZhcmlhYmxlQm91bmRnZXRDbGFzc0NvbnRleHRjb250ZXh0Q2xhc3Nfc3Vic3RUeXBlc19lcXVhbFR5cGVzRGFydDJKU0phdmFTY3JpcHRQcmludGluZ0NvbnRleHRtb25pdG9yb3V0QnVmZmVyY29kZVBvc2l0aW9uTGlzdGVuZXJvblN0YXJ0UG9zaXRpb25jbG9zaW5nUG9zaXRpb25vblBvc2l0aW9uc0FzdENvbnRhaW5lclRva2VuRmluYWxpemVyZmluYWxpemVUb2tlbnNUb2tlbkNvdW50ZXJ2aXNpdE5vZGVtYXJrU2VlbmNvdW50VG9rZW5zUmVmZXJlbmNlQ291bnRlZEFzdE5vZGVVbnBhcnNlZE5vZGVfZW5hYmxlTWluaWZpY2F0aW9uX3Byb3RlY3RGb3JFdmFsX2NhY2hlZExpdGVyYWxmdW5jdGlvbiBlc2NhcGVkU3RyaW5ncHJldHR5UHJpbnRhbGxvd1ZhcmlhYmxlTWluaWZpY2F0aW9ucmVuYW1lckZvck5hbWVzc2hvdWxkQ29tcHJlc3NPdXRwdXRtaW5pZnlMb2NhbFZhcmlhYmxlc2NyZWF0ZUNvZGVCdWZmZXJzb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvcmNyZWF0ZVByb2Nlc3NvcnByb2Nlc3Npc0lkZW50aXR5VGVtcGxhdGVpc051bGxHdWFyZE9uRmlyc3RBcmd1bWVudGhvbGVuYW1lT3JQb3NpdGlvbmpzX2JhY2tlbmQubmFtZXJIYXNoTWFwUnVudGltZVR5cGVUYWdzSkdlbmVyYXRvckJvZHlmaWVsZF9uYW1pbmdfbWl4aW4uZGFydGZyZXF1ZW5jeV9uYW1lci5kYXJ0bWluaWZ5X25hbWVyLmRhcnRuYW1lcl9uYW1lcy5kYXJ0amF2YVNjcmlwdEtleXdvcmRzaW5zdGFuY2VvZnR5cGVvZmRlYnVnZ2VyZGVsZXRlcHVibGljcHJvdGVjdGVkcmVzZXJ2ZWRQcm9wZXJ0eVN5bWJvbHNfX3Byb3RvX19wcm90b3R5cGVyZXNlcnZlZEdsb2JhbFN5bWJvbHN1bmRlZmluZWRwYXJzZUludHBhcnNlRmxvYXRkZWNvZGVVUklkZWNvZGVVUklDb21wb25lbnRlbmNvZGVVUkllbmNvZGVVUklDb21wb25lbnRBcnJheUJvb2xlYW5OdW1iZXJEYXRlUmVnRXhwRXZhbEVycm9yUmFuZ2VFcnJvclJlZmVyZW5jZUVycm9yU3ludGF4RXJyb3JVUklFcnJvck1hdGhhcHBsaWNhdGlvbkNhY2hlY2xvc2VkQ29tcG9uZW50c2NvbnRyb2xsZXJzY3J5cHRvZGVmYXVsdFN0YXR1c2RpYWxvZ0FyZ3VtZW50c2RpcmVjdG9yaWVzZG9jdW1lbnRmcmFtZUVsZW1lbnRmdWxsU2NyZWVuZ2xvYmFsU3RvcmFnZWhpc3Rvcnlpbm5lckhlaWdodGlubmVyV2lkdGhsb2NhdGlvbmJhcmxvY2FsU3RvcmFnZW1lbnViYXJtb3pJbm5lclNjcmVlblhtb3pJbm5lclNjcmVlblltb3pTY3JlZW5QaXhlbHNQZXJDc3NQaXhlbG5hdmlnYXRvcm9wZW5lcm91dGVySGVpZ2h0b3V0ZXJXaWR0aHBhZ2VYT2Zmc2V0cGFnZVlPZmZzZXRwZXJzb25hbGJhcnBrY3MxMXJldHVyblZhbHVlc2NyZWVuc2Nyb2xsYmFyc3Njcm9sbE1heFhzY3JvbGxNYXhZc2Vzc2lvblN0b3JhZ2VzaWRlYmFyc3RhdHVzYmFydG9vbGJhcndpbmRvd2FsZXJ0YWRkRXZlbnRMaXN0ZW5lcmF0b2JiYWNrYmx1cmJ0b2FjYXB0dXJlRXZlbnRzY2xlYXJJbnRlcnZhbGNsZWFyVGltZW91dGNvbmZpcm1kaXNhYmxlRXh0ZXJuYWxDYXB0dXJlZGlzcGF0Y2hFdmVudGVuYWJsZUV4dGVybmFsQ2FwdHVyZWZpbmRmb2N1c2ZvcndhcmRHZWNrb0FjdGl2ZVhPYmplY3RnZXRBdHRlbnRpb25nZXRBdHRlbnRpb25XaXRoQ3ljbGVDb3VudGdldENvbXB1dGVkU3R5bGVnZXRTZWxlY3Rpb25ob21lbWF4aW1pemVtaW5pbWl6ZW1vdmVCeW1vdmVUb29wZW5EaWFsb2dwb3N0TWVzc2FnZXByaW50cHJvbXB0UXVlcnlJbnRlcmZhY2VyZWxlYXNlRXZlbnRzcmVtb3ZlRXZlbnRMaXN0ZW5lcnJlc2l6ZUJ5cmVzaXplVG9yb3V0ZUV2ZW50c2Nyb2xsc2Nyb2xsQnlzY3JvbGxCeUxpbmVzc2Nyb2xsQnlQYWdlc3Njcm9sbFRvc2V0SW50ZXJ2YWxzZXRSZXNpemVhYmxlc2V0VGltZW91dHNob3dNb2RhbERpYWxvZ3NpemVUb0NvbnRlbnR1dWVzY2FwZXVwZGF0ZUNvbW1hbmRzWFBDTmF0aXZlV3JhcHBlclhQQ1NhZmVKU09qYmVjdFdyYXBwZXJvbmFib3J0b25iZWZvcmV1bmxvYWRvbmNoYW5nZW9uY2xpY2tvbmNsb3Nlb25jb250ZXh0bWVudW9uZHJhZ2Ryb3BvbmVycm9yb25mb2N1c29uaGFzaGNoYW5nZW9ua2V5ZG93bm9ua2V5cHJlc3NvbmtleXVwb25sb2Fkb25tb3VzZWRvd25vbm1vdXNlbW92ZW9ubW91c2VvdXRvbm1vdXNlb3Zlcm9ubW91c2V1cG9ubW96b3JpZW50YXRpb25vbnBhaW50b25yZXNldG9ucmVzaXplb25zY3JvbGxvbnNlbGVjdG9uc3VibWl0b251bmxvYWRvbnRvdWNoY2FuY2Vsb250b3VjaGVuZG9udG91Y2htb3Zlb250b3VjaHN0YXJ0b25nZXN0dXJlc3RhcnRvbmdlc3R1cmVjaGFuZ2Vvbmdlc3R1cmVlbmR1bmV2YWxnZXRQcm90b3R5cGVPZmF0dGFjaEV2ZW50Y2xpZW50SW5mb3JtYXRpb25jbGlwYm9hcmREYXRhY3JlYXRlUG9wdXBkaWFsb2dIZWlnaHRkaWFsb2dMZWZ0ZGlhbG9nVG9wZGlhbG9nV2lkdGhvbmFmdGVycHJpbnRvbmJlZm9yZWRlYWN0aXZhdGVvbmJlZm9yZXByaW50b25jb250cm9sc2VsZWN0b25kZWFjdGl2YXRlb25oZWxwb25yZXNpemVlbmREZWJ1Z0VudW1lcmF0b3JHbG9iYWxJbWFnZUFjdGl2ZVhPYmplY3RWQkFycmF5QW5jaG9yQXBwbGV0QXR0ckNhbnZhc0NhbnZhc0dyYWRpZW50Q2FudmFzUGF0dGVybkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRENEQVRBU2VjdGlvbkNoYXJhY3RlckRhdGFDb21tZW50Q1NTMlByb3BlcnRpZXNDU1NSdWxlQ1NTU3R5bGVTaGVldERvY3VtZW50RG9jdW1lbnRGcmFnbWVudERvY3VtZW50VHlwZURPTUV4Y2VwdGlvbkRPTUltcGxlbWVudGF0aW9uRE9NUGFyc2VyRWxlbWVudEV2ZW50RXh0ZXJuYWxJbnRlcmZhY2VGbGFzaFBsYXllckZvcm1GcmFtZUhpc3RvcnlIVE1MQ29sbGVjdGlvbkhUTUxEb2N1bWVudEhUTUxFbGVtZW50SUZyYW1lSlNPYmplY3RLZXlFdmVudE1pbWVUeXBlTW91c2VFdmVudE5hdmlnYXRvck5vZGVMaXN0UGx1Z2luUHJvY2Vzc2luZ0luc3RydWN0aW9uUmFuZ2VSYW5nZUV4Y2VwdGlvblNjcmVlblNlbGVjdFRhYmxlVGFibGVDZWxsVGFibGVSb3dUYWJsZVNlbGVjdGlvblRleHRUZXh0QXJlYVVJRXZlbnRXaW5kb3dYTUxIdHRwUmVxdWVzdFhNTFNlcmlhbGl6ZXJYUGF0aEV4Y2VwdGlvblhQYXRoUmVzdWx0WFNMVFByb2Nlc3NvcmphdmFuZXRzY2FwZXN1bkphdmFPYmplY3RKYXZhQ2xhc3NKYXZhQXJyYXlKYXZhTWVtYmVycmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lc0RGR0hPUVdYWVpyZXNlcnZlZEdsb2JhbEhlbHBlckZ1bmN0aW9uc3VzZXJHbG9iYWxPYmplY3RzX2pzUmVzZXJ2ZWRsYXp5R2V0dGVyUHJlZml4JGdldCRzdXBlclByZWZpeHN1cGVyJG1ldGFkYXRhRmllbGRzdHViTmFtZUZpZWxkJHN0dWJOYW1lcmVmbGVjdGlvbkluZm9GaWVsZCRyZWZsZWN0aW9uSW5mb3JlZmxlY3Rpb25OYW1lRmllbGQkcmVmbGVjdGlvbk5hbWVtZXRhZGF0YUluZGV4RmllbGQkbWV0YWRhdGFJbmRleG1ldGhvZHNXaXRoT3B0aW9uYWxBcmd1bWVudHNGaWVsZCRtZXRob2RzV2l0aE9wdGlvbmFsQXJndW1lbnRzX2NhbGxQcmVmaXhEb2xsYXJjYWxsJF9saXRlcmFsRG9sbGFyX2xpdGVyYWxVbmRlcnNjb3JlbGl0ZXJhbFBsdXNfbGl0ZXJhbER5bmFtaWNfbGl0ZXJhbEdldHRlclByZWZpeF9saXRlcmFsU2V0dGVyUHJlZml4X3N0YXRpY3NQcm9wZXJ0eU5hbWVfcnRpRmllbGRKc05hbWVuYXRpdmVTcGVjUHJvcGVydHleW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJE5PTl9JREVOVElGSUVSX0NIQVJbXkEtWmEtel8wLTkkXWdsb2JhbFNjb3BldXNlckdsb2JhbHN1c2VyR2xvYmFsc1NlY29uZE5hbWVpbnRlcm5hbEdsb2JhbHNpbnN0YW5jZVNjb3BldXNlckluc3RhbmNlTWVtYmVyc3VzZXJJbnN0YW5jZU1lbWJlcnNPcmlnaW5hbE5hbWVpbnRlcm5hbEluc3RhbmNlTWVtYmVyc3VzZXJJbnN0YW5jZU9wZXJhdG9yc3VzZXJHZXR0ZXJzdXNlclNldHRlcnNfdHlwZVZhcmlhYmxlTmFtZXNfY29uc3RhbnRTY29wZV9wcml2YXRlTmFtaW5nU2NvcGVzcG9wdWxhck5hbWVDb3VudGVyc2xpYnJhcnlMb25nTmFtZXNfY29uc3RhbnROYW1lc19jb25zdGFudExvbmdOYW1lc19jb25zdGFudEhhc2hlcnNob3J0UHJpdmF0ZU5hbWVPd25lcnNfbGlicmFyeUtleXNfbm9uSWRlbnRpZmllclJFW15BLVphLXowLTlfJF1mdW5jdGlvblR5cGVOYW1lTWFwX2Z1bmN0aW9uVHlwZU5hbWVyanNSZXNlcnZlZHN0YXRpY3NQcm9wZXJ0eU5hbWVydGlOYW1lX3JlZ2lzdGVyTmFtZWpzTmFtZW9yaWdpbmFsTmFtZWlzRmluYWxpemVkZ2V0dGVyTmFtZXNldHRlck5hbWVjcmVhdGVNaW5pZmllZEdsb2JhbE5hbWVNYXBjcmVhdGVNaW5pZmllZEluc3RhbmNlTmFtZU1hcF9uYXRpdmVEYXRhZGVmZXJyZWRNZXRhZGF0YU5hbWVkZWZlcnJlZE1ldGFkYXRhZGVmZXJyZWRUeXBlc05hbWVkZWZlcnJlZFR5cGVzaXNvbGF0ZU5hbWVpc29sYXRlUHJvcGVydGllc05hbWUkaXNvbGF0ZVByb3BlcnRpZXNTVEFUSUNfQ0xPU1VSRV9OQU1FX05BTUUkbmFtZWNsb3N1cmVJbnZvY2F0aW9uU2VsZWN0b3JOYW1lc2hvdWxkTWluaWZ5X2dldFByaXZhdGVTY29wZUZvcnJvb3RPZlNjb3BlX25ld1JlZmVyZW5jZWNvbnN0YW50TmFtZWxvbmdOYW1lY29uc3RhbnRMb25nTmFtZWdldEZyZXNoTmFtZXByaXZhdGVOYW1lX3Byb3Bvc2VOYW1lRm9yTGlicmFyeV9wcm9wb3NlTmFtZUZvckNvbnN0cnVjdG9yQm9keWNhbGxTdWZmaXhGb3JTaWduYXR1cmVjb25zdHJ1Y3RvckJvZHlOYW1lY3Rvcl9kaXNhbWJpZ3VhdGVJbnRlcm5hbE1lbWJlcmdlbmVyYXRvckJvZHlJbnN0YW5jZU1ldGhvZE5hbWVvcGVyYXRvck5hbWVUb0lkZW50aWZpZXIkYm9keSRkZXJpdmVDYWxsTWV0aG9kTmFtZWNhbGxQcmVmaXhjYWxsU3VmZml4Rm9yU3RydWN0dXJlc3VmZml4ZXNkaXNhbWJpZ3VhdGVkTmFtZV9kaXNhbWJpZ3VhdGVNZW1iZXJkZXJpdmVHZXR0ZXJOYW1lZGVyaXZlU2V0dGVyTmFtZW9wZXJhdG9ySWRlbnRpZmllcl9kaXNhbWJpZ3VhdGVPcGVyYXRvcnNwZWNpYWxTZWxlY3Rvck5hbWVVbmV4cGVjdGVkIHNlbGVjdG9yIGtpbmQ6IGdlbmVyaWNJbnN0YW50aWF0aW9uUHJlZml4VW5leHBlY3RlZCBzcGVjaWFsIHNlbGVjdG9yOiBpbnZvY2F0aW9uTWlycm9ySW50ZXJuYWxOYW1lZmllbGRBY2Nlc3Nvck5hbWVfZGlzYW1iaWd1YXRlR2xvYmFsTWVtYmVyZmllbGRQcm9wZXJ0eU5hbWVfZGlzYW1iaWd1YXRlR2xvYmFsVHlwZV9nbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlaGFzRml4ZWRCYWNrZW5kTmFtZWdldEZpeGVkQmFja2VuZE5hbWVkZWNsYXJlZE5hbWVfaXNTaGFkb3dpbmdTdXBlckZpZWxkX2lzVXNlckNsYXNzRXh0ZW5kaW5nTmF0aXZlZmllbGROYW1lbWVtYmVyTGlicmFyeWZvdW5kTWVtYmVyaXNOYXRpdmVPckV4dGVuZHNOYXRpdmVzZXR0ZXJGb3JNZW1iZXJnZXR0ZXJGb3JFbGVtZW50Z2V0dGVyRm9yTWVtYmVyX2Rpc2FtYmlndWF0ZUludGVybmFsR2xvYmFsbmV3TmFtZWludGVybmFsR2xvYmFsX2dlbmVyYXRlTGlicmFyeUtleWtleUJhc2VfZGlzYW1iaWd1YXRlR2xvYmFsX3Byb3Bvc2VOYW1lRm9yTWVtYmVyX3Byb3Bvc2VOYW1lRm9yVHlwZWdsb2JhbHNsaWJyYXJ5S2V5c2FuaXRpemVGb3JBbm5vdGF0aW9uc19kaXNhbWJpZ3VhdGVNZW1iZXJCeUtleXJlc2VydmVQdWJsaWNNZW1iZXJOYW1lbGlicmFyeVByZWZpeGlzVXNlZHJlZ2lzdGVyVXNlc2FuaXRpemVGb3JOYXRpdmVzbWF5Q2xhc2hOYXRpdmVfZ2VuZXJhdGVGcmVzaFN0cmluZ0Zvck5hbWVfc2FuaXRpemVGb3JBbm5vdGF0aW9uc19zYW5pdGl6ZUZvck5hdGl2ZXNfc2FuaXRpemVGb3JLZXl3b3Jkc2lzVW51c2VkX3Byb3Bvc2VOYW1lRm9yQ29uc3RydWN0b3IkYm9keV9wcm9wb3NlTmFtZUZvckxhenlTdGF0aWNHZXR0ZXJyZXBsYWNlcnJlcGxhY2VBbGxNYXBwZWRsaWJfZGlzYW1iaWd1YXRlZF9nZXRTdWZmaXhGb3JJbnRlcmNlcHRlZENsYXNzZXN6Z2V0SW50ZXJjZXB0b3IkX2lzUHJvcGVydHlPZlN0YXRpY1N0YXRlSG9sZGVyc3RhdGljU3RhdGVIb2xkZXIkY2xvc3VyZXVuaXF1ZU5hbWVGb3JUeXBlQ29uc3RhbnRFbGVtZW50Z2xvYmFsT2JqZWN0Rm9yQ29uc3RhbnQkaW5zdGFudGlhdGV0eXBlc09mZnNldE5hbWV0eXBlc09mZnNldGdldEZ1bmN0aW9uVHlwZU5hbWVjb21wdXRlTmFtZW9wZXJhdG9ySXNQcmVmaXhvcGVyYXRvckFzUHJlZml4JGVxJG5vdCRpbmRleCRpbmRleFNldCRtdWwkZGl2JG1vZCR0ZGl2JGFkZCRzaGwkc2hyJHNocnUkZ2UkbGUkYW5kJHhvciRvciRuZWdhdGVnZXRUeXBlUmVwcmVzZW50YXRpb25Gb3JUeXBlQ29uc3RhbnQoKS0+Q29uc3RhbnROYW1pbmdWaXNpdG9yTUFYX0ZSQUdNRU5UU01BWF9FWFRSQV9MRU5HVEhERUZBVUxUX1RBR19MRU5HVEhfaGFzaGVyZmFpbGVkZnJhZ21lbnRzX3Zpc2l0Q09OU1RBTlRnZXRIYXNoVGFnQ19oYXNoV29yZGdldEhhc2gwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFkZFJvb3RhZGRJZGVudGlmaWVyaXNFbGlkZWRtZXRob2RzZHVtbXlfaW50ZXJjZXB0b3J1bnJlYWNoYWJsZUNvbnN0YW50Q2Fub25pY2FsSGFzaGVyX01BU0tfVUlOVDMyX0xJTUlUNDI5NDk2NzI5Nl9oYXNoZXNfaGFzaFN0cmluZ19oYXNoTGlzdER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIHNob3VsZCBuZXZlciBiZSBuYW1lZCBhbmQgbmV2ZXIgYmUgc3ViY29uc3RhbnRVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgc2hvdWxkIG5ldmVyIGJlIG5hbWVkIGFuZCBKc05hbWVDb25zdGFudFZhbHVlIHNob3VsZCBuZXZlciBiZSBuYW1lZCBhbmQgX2hhc2hJbnRfaGFzaERvdWJsZW1hZ25pdHVkZXNpZ25mcmFjdGlvbl9jb21iaW5lRnVuY3Rpb25UeXBlTmFtZXJfaXNTaW1wbGVGdW5jdGlvblR5cGVOYW1pbmdTY29wZV9zdWdnZXN0ZWROYW1lc191c2VkTmFtZXNzdWdnZXN0TmFtZWFkZFN1Z2dlc3Rpb25zdWdnZXN0aW9uaGFzU3VnZ2VzdGlvbmlzU3VnZ2VzdGlvbkZpeGVkTmFtZXNnZXQkc2V0JGNhbGxDYXRjaEFsbE5hbWVjYWxsKmNhbGxOYW1lRmllbGQkY2FsbE5hbWVyZWZsZWN0YWJsZUZpZWxkJHJlZmxlY3RhYmxlY2xhc3NEZXNjcmlwdG9yUHJvcGVydHlkZWZhdWx0VmFsdWVzRmllbGQkZGVmYXVsdFZhbHVlc2RlZmVycmVkQWN0aW9uJGRlZmVycmVkQWN0aW9uJGlzJGFzb3BlcmF0b3JTaWduYXR1cmUkc2lnbmF0dXJlcmVxdWlyZWRQYXJhbWV0ZXJGaWVsZCRyZXF1aXJlZEFyZ0NvdW50JHRpTWluaWZpZWRGaXhlZE5hbWVzYXN5bmNQcmVmaXgkYXN5bmMkX2xpdGVyYWxBc3luY1ByZWZpeF9qc1ZhcmlhYmxlUmVzZXJ2ZWRDYWNoZWJyZWFrTGFiZWxOYW1laW1wbGljaXRCcmVha0xhYmVsTmFtZWNvbnRpbnVlTGFiZWxOYW1lYyRpbXBsaWNpdENvbnRpbnVlTGFiZWxOYW1lX2pzVmFyaWFibGVSZXNlcnZlZGdldE5hbWVGb3JKc0dldE5hbWVKc0dldE5hbWUuR0VUVEVSX1BSRUZJWEpzR2V0TmFtZS5TRVRURVJfUFJFRklYSnNHZXROYW1lLkNBTExfUFJFRklYSnNHZXROYW1lLkNBTExfUFJFRklYMEpzR2V0TmFtZS5DQUxMX1BSRUZJWDFKc0dldE5hbWUuQ0FMTF9QUkVGSVgySnNHZXROYW1lLkNBTExfUFJFRklYM0pzR2V0TmFtZS5DQUxMX1BSRUZJWDRKc0dldE5hbWUuQ0FMTF9QUkVGSVg1SnNHZXROYW1lLkNBTExfQ0FUQ0hfQUxMSnNHZXROYW1lLlJFRkxFQ1RBQkxFSnNHZXROYW1lLkNMQVNTX0RFU0NSSVBUT1JfUFJPUEVSVFlKc0dldE5hbWUuUkVRVUlSRURfUEFSQU1FVEVSX1BST1BFUlRZSnNHZXROYW1lLkRFRkFVTFRfVkFMVUVTX1BST1BFUlRZSnNHZXROYW1lLkNBTExfTkFNRV9QUk9QRVJUWUpzR2V0TmFtZS5ERUZFUlJFRF9BQ1RJT05fUFJPUEVSVFlKc0dldE5hbWUuT1BFUkFUT1JfQVNfUFJFRklYSnNHZXROYW1lLlNJR05BVFVSRV9OQU1FSnNHZXROYW1lLlJUSV9OQU1FSnNHZXROYW1lLlRZUEVERUZfVEFHdHlwZWRlZlRhZ0pzR2V0TmFtZS5GVU5DVElPTl9UWVBFX1RBR2Z1bmN0aW9uVHlwZVRhZ0pzR2V0TmFtZS5GVU5DVElPTl9UWVBFX0dFTkVSSUNfQk9VTkRTX1RBR2Z1bmN0aW9uVHlwZUdlbmVyaWNCb3VuZHNUYWdKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9WT0lEX1JFVFVSTl9UQUdmdW5jdGlvblR5cGVWb2lkUmV0dXJuVGFnSnNHZXROYW1lLkZVTkNUSU9OX1RZUEVfUkVUVVJOX1RZUEVfVEFHZnVuY3Rpb25UeXBlUmV0dXJuVHlwZVRhZ0pzR2V0TmFtZS5GVU5DVElPTl9UWVBFX1JFUVVJUkVEX1BBUkFNRVRFUlNfVEFHZnVuY3Rpb25UeXBlUmVxdWlyZWRQYXJhbWV0ZXJzVGFnSnNHZXROYW1lLkZVTkNUSU9OX1RZUEVfT1BUSU9OQUxfUEFSQU1FVEVSU19UQUdmdW5jdGlvblR5cGVPcHRpb25hbFBhcmFtZXRlcnNUYWdKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9OQU1FRF9QQVJBTUVURVJTX1RBR2Z1bmN0aW9uVHlwZU5hbWVkUGFyYW1ldGVyc1RhZ0pzR2V0TmFtZS5GVVRVUkVfT1JfVEFHZnV0dXJlT3JUYWdKc0dldE5hbWUuRlVUVVJFX09SX1RZUEVfQVJHVU1FTlRfVEFHZnV0dXJlT3JUeXBlVGFnSnNHZXROYW1lLklTX0lOREVYQUJMRV9GSUVMRF9OQU1FSnNHZXROYW1lLk5VTExfQ0xBU1NfVFlQRV9OQU1FSnNHZXROYW1lLk9CSkVDVF9DTEFTU19UWVBFX05BTUVKc0dldE5hbWUuRlVOQ1RJT05fQ0xBU1NfVFlQRV9OQU1FSnNHZXROYW1lLkZVVFVSRV9DTEFTU19UWVBFX05BTUVKc0dldE5hbWUuQk9PTF9SRUNJUEVKc0dldE5hbWUuRE9VQkxFX1JFQ0lQRUpzR2V0TmFtZS5JTlRfUkVDSVBFSnNHZXROYW1lLk5VTV9SRUNJUEVKc0dldE5hbWUuU1RSSU5HX1JFQ0lQRUpzR2V0TmFtZS5SVElfRklFTERfSVNFcnJvcjogTmFtZXIgaGFzIG5vIG5hbWUgZm9yICJfcmVnaXN0cnlfTWluaWZpZWRGaWVsZE5hbWVyZmllbGRSZWdpc3RyeV9taW5pZmllZEluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWVib3hjb250YWluc0ZpZWxkX0ZpZWxkTmFtaW5nUmVnaXN0cnlnbG9iYWxOYW1lc2dsb2JhbENvdW50bmFtZVN0b3JlY3hjeWRiZHhkeWZyZnhmeWdvazFrMmszazRyMXIycnhyeXgxeDJ5MXkyYWx0YXJjQ0NXaW4xaW4ybTExbTEybTEzbTE0bTIxbTIybTIzbTI0bTMxbTMybTMzbTM0bTQxbTQybTQzbTQ0bWF4bm93T05FcmVscmV2UkdCc2Rwc3JjdWlkdXJsVVJMYWJicmF4ZXNheGlzQkFDS2JldGFiaWFzQmxvYkJMVVJCT1RIQllURWNpdGVjbGlwY29sc2N1ZXNERUNSRE9ORWZhY2Vmb250Zm9ybWdhaW5ocmVmSFJURklETEVJTkNSSU5JVGlzSWRLRUVQa25lZWxhbmdMRVNTTm9uZU5PTkVvbmx5T1BFTnBpbmdwbGF5cmVjdFJlY3RyZWZYcmVmWVJHQkFyb3dzc2F2ZXNlZWRzZWVrU0lORXN0YXR0YWdzdmlld3dhcm5aRVJPX0ZpZWxkTmFtaW5nU2NvcGVzdXBlclNjb3BlX2ZpZWxkTmFtZUNvdW50ZXJyb290U2NvcGVpbmhlcml0aW5oZXJpdGFuY2VCYXNlZEZpZWxkTmFtZUNvdW50ZXJfbG9jYWxGaWVsZE5hbWVDb3VudGVydmFsZm9yQ2xhc3NkZWNsYXJlcmZvckJveF9pc05hbWVVbnVzZWRfbmV4dE5hbWVfTWl4aW5GaWVsZE5hbWluZ1Njb3BlbWl4ZWRJbnByb3Bvc2VkX0JveEZpZWxkTmFtaW5nU2NvcGVfRnJlcXVlbmN5QmFzZWROYW1lciZOYW1lciZfTWluaWZpZWRGaWVsZE5hbWVyX0ZyZXF1ZW5jeUJhc2VkTmFtZXImTmFtZXImX01pbmlmaWVkRmllbGROYW1lciZfTWluaWZpZWRPbmVTaG90SW50ZXJjZXB0b3JOYW1lciRnZXQkc2V0Y2FsbFN1ZmZpeCRpbnRlcmNlcHRlZEZyZXF1ZW5jeUJhc2VkTmFtZXJfdG9rZW5TY29wZXNJbmV3U2NvcGVGb3JpbGxlZ2FsTmFtZXNpbGxlZ2FsdG9rZW5TY29wZWNvbXBhcmVSZWZlcmVuY2VDb3VudF9yY1Rva2VuU2NvcGVfaW5jcmVtZW50UG9zaXRpb25vdmVyZmxvd19pbmNyZW1lbnROYW1lZ2V0TmV4dE5hbWVwcm9wb3NhbF9NaW5pZnlOYW1lciZOYW1lciZfTWluaWZpZWRGaWVsZE5hbWVyX01pbmlmeU5hbWVyJk5hbWVyJl9NaW5pZmllZEZpZWxkTmFtZXImX01pbmlmeUNvbnN0cnVjdG9yQm9keU5hbWVyX2NvbnN0cnVjdG9yQm9keVNjb3Blc2NvbnN0cnVjdG9yQm9keUtleUZvcl9NaW5pZnlOYW1lciZOYW1lciZfTWluaWZpZWRGaWVsZE5hbWVyJl9NaW5pZnlDb25zdHJ1Y3RvckJvZHlOYW1lciZfTWluaWZpZWRPbmVTaG90SW50ZXJjZXB0b3JOYW1lck1pbmlmeU5hbWVyQUxQSEFCRVRfQ0hBUkFDVEVSU0FMUEhBTlVNRVJJQ19DSEFSQUNURVJTX3Jlc2VydmVkTmF0aXZlUHJvcGVydGllc19iYWROYW1lc3Jlc2VydmVCYWNrZW5kTmFtZXNmcmVzaE5hbWVfZ2V0VW51c2VkTmFtZV9wb3B1bGF0ZVN1Z2dlc3RlZE5hbWVzYWRkJDEkbmVjbG9uZSQwbW92ZU5leHQkMHN0eWxlbm9TdWNoTWV0aG9kJDF0b1N0cmluZyQwVW5zdXBwb3J0ZWRFcnJvciRBcmd1bWVudEVycm9yJFN0YXRlRXJyb3IkS2V5X0tleUxpc3RfTGlzdCRmcm9tTGlua2VkSGFzaE1hcF9MaW5rZWRIYXNoTWFwJF9lbXB0eUxpbmtlZEhhc2hNYXBfTGlua2VkSGFzaE1hcCRfbGl0ZXJhbFJhbmdlRXJyb3IkdmFsdWVzdWdnZXN0aW9uc2xldHRlcl9jYWxjdWxhdGVIYXNoY29kZXNfbGV0dGVyTnVtYmVyaDJfYWxwaGFOdW1lcmljTnVtYmVyX2JhZE5hbWVfaGFzQmFubmVkUHJlZml4NDI5NDk2NzI5NXN0YXJ0TGV0dGVyX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlX3N0YXJ0SW5kZXhfY29uc3RydWN0b3JzbnVtYmVyT2ZDb25zdHJ1Y3RvcnNmb3JNaXhpbkFwcGxpY2F0aW9uY29uc3RydWN0b3IgYm9keSBtaXNzaW5nQGNvbnN0cnVjdG9yQm9keUBfZ2V0Q29uc3RydWN0b3JMaXN0X01pbmlmeUNvbnN0cnVjdG9yQm9keU5hbWVyX01pbmlmaWVkT25lU2hvdEludGVyY2VwdG9yTmFtZXJfTmFtZXJOYW1lTmFtZShDYW5ub3QgY29udmVydCBhIG5hbWUgdG8gYSBzdHJpbmdfTmFtZXJOYW1lS2luZHNfTmFtZXJOYW1lS2luZHMuU3RyaW5nQmFja2VkX05hbWVyTmFtZUtpbmRzLkdldHRlcl9OYW1lck5hbWVLaW5kcy5TZXR0ZXJfTmFtZXJOYW1lS2luZHMuQXN5bmNfTmFtZXJOYW1lS2luZHMuQ29tcG91bmRfTmFtZXJOYW1lS2luZHMuVG9rZW5TdHJpbmdCYWNrZWRDb21wb3VuZFN0cmluZ0JhY2tlZE5hbWVvdGhlck5hbWVyTmFtZV9QcmVmaXhlZE5hbWVvdGhlclNhbWVLaW5kR2V0dGVyTmFtZVNldHRlck5hbWVBc3luY05hbWVDb21wb3VuZE5hbWVfcGFydHNfY2FjaGVkTmFtZVRva2VuTmFtZVRva2VuTmFtZSgpIGhhcyBub3QgYmVlbiBmaW5hbGl6ZWQub3RoZXJUb2tlbik9IGhhcyBhbHJlYWR5IGJlZW4gZmluYWxpemVkLl9OYW1lUmVmZXJlbmNlc3VmZml4Rm9yR2V0SW50ZXJjZXB0b3JhYmJyZXZpYXRlVHlwZUxvb2t1cHR5cGVTdHJpbmdTcGVjaWFsVHlwZUpzT2JqZWN0PU9iamVjdFVua25vd24gU3BlY2lhbFR5cGUgJ05hdGl2ZVRocm93QmVoYXZpb3JORVZFUk1BWU5VTExfTlNNTlVMTF9OU01fVEhFTl9NQVlfYml0c2lzTnVsbE5TTUd1YXJkbmV2ZXJtYXludWxsKDEpbnVsbCgxKSttYXlOYXRpdmVUaHJvd0JlaGF2aW9yKF9iaXRzVG9WYWx1ZWJpdHNOYXRpdmVCZWhhdmlvcm5hdGl2ZS1iZWhhdmlvcnR5cGVzUmV0dXJuZWR0eXBlc0luc3RhbnRpYXRlZGNvZGVUZW1wbGF0ZVRleHRQVVJFUFVSRV9BTExPQ0FUSU9OQ0hBTkdFU19PVEhFUkRFUEVORFNfT1RIRVJyZWFkVHlwZXNzcGVjaWFsQ291bnRwYXJzZUZvcmVpZ25KU3dyaXRlVHlwZXNzcGVjaWFsVHlwZXNOYXRpdmVCZWhhdmlvcihyZXR1cm5zOiAsIGNyZWF0ZXM6ICwgc2lkZUVmZmVjdHM6ICwgdGhyb3dzOiAsIGlzQWxsb2NhdGlvbiwgdXNlR3ZuX21ha2VQdXJlX21ha2VDaGFuZ2VzT3RoZXJfbWFrZURlcGVuZHNPdGhlcnByb2Nlc3NTcGVjU3RyaW5nc3BlY1N0cmluZ3ZhbGlkVGFnc3NldFNpZGVFZmZlY3Rzc2V0VGhyb3dzc2V0SXNBbGxvY2F0aW9ubG9va3VwVHlwZXNlZW5FcnJvcnJlc29sdmVUeXBlc1N0cmluZ29uVmFyb25Wb2lkdHlwZXNTdHJpbmdzcGVjc2NyZWF0ZXNyZXR1cm5zZGVwZW5kc3Rocm93c2d2bnRhZ0FuZFZhbHVlSW52YWxpZCA8dGFnPjo8dmFsdWU+IHBhaXIgJ0R1cGxpY2F0ZSB0YWcgJ1RhZyAnJyBpcyBub3QgdmFsaWQgaGVyZS5Vbmtub3duIHRhZyAndGFnVmFsdWVMb29rdXB0YWdTdHJpbmdVbmtub3duICcnIHNwZWNpZmljYXRpb246ICdJbnZhbGlkIHR5cGUgc3RyaW5nICdjcmVhdGVzOnRocm93c0tpbmQnbmV3JyBhbmQgJ2d2bicgYXJlIGluY29tcGF0aWJsZXByb2Nlc3NFZmZlY3RzJ2VmZmVjdHMnIGFuZCAnZGVwZW5kcycgbXVzdCBvY2N1ciB0b2dldGhlci5zcGxpdEVmZmVjdHNNaXNzaW5nIHNpZGUtZWZmZWN0IGZsYWcuZWZmZWN0bm8taW5kZXhjbGVhckNoYW5nZXNJbmRleG5vLWluc3RhbmNlY2xlYXJDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eW5vLXN0YXRpY2NsZWFyQ2hhbmdlc1N0YXRpY1Byb3BlcnR5VW5yZWNvZ25pemVkIHNpZGUtZWZmZWN0IGZsYWc6ICdzcGxpdERlcGVuZGVuY2llc01pc3Npbmcgc2lkZS1lZmZlY3QgZGVwZW5kZW5jeSBmbGFnLmNsZWFyRGVwZW5kc09uSW5kZXhTdG9yZWNsZWFyRGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlY2xlYXJEZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3Jlb2ZKc0NhbGxjb2RlU3RyaW5nc2lkZUVmZmVjdHNBcmVFbmNvZGVkSW5TcGVjU3RyaW5nbmV3RWZmZWN0c3NldFRvdGhyb3dCZWhhdmlvckZyb21TcGVjU3RyaW5nYW5hbHl6ZV9maWxsTmF0aXZlQmVoYXZpb3JPZkJ1aWx0aW5PckVtYmVkZGVkR2xvYmFsb2ZKc0J1aWx0aW5DYWxsb2ZKc0VtYmVkZGVkR2xvYmFsQ2FsbF9wYXJzZVR5cGVCZWhhdmlvckJ1aWxkZXJfYmVoYXZpb3Jfb3ZlcnJpZGVXaXRoQW5ub3RhdGlvbnNjcmVhdGVzQW5ub3RhdGlvbnNyZXR1cm5zQW5ub3RhdGlvbnNfZXNjYXBlaXNKc0ludGVyb3BfY2FwdHVyZWJ1aWxkRmllbGRMb2FkQmVoYXZpb3JidWlsZEZpZWxkU3RvcmVCZWhhdmlvcmJ1aWxkTWV0aG9kQmVoYXZpb3JjcmVhdGVBbm5vdGF0aW9uc19nZXRBbm5vdGF0aW9uc2NvbnN0cnVjdGVkT2JqZWN0QW5ub3RhdGlvbnMgbmVlZHMgb25lIHN0cmluZzogc3BlY1N0cmluZ0NvbnN0YW50Z2V0Q3JlYXRlc0Fubm90YXRpb25zZ2V0UmV0dXJuc0Fubm90YXRpb25zY29tcGlsZXIudW5pdmVyc2UuZmVhdHVyZUZlYXR1cmVGZWF0dXJlLkFCU1RSQUNUX0NMQVNTX0lOU1RBTlRJQVRJT05GZWF0dXJlLkFTU0VSVEZlYXR1cmUuQVNTRVJUX1dJVEhfTUVTU0FHRUZlYXR1cmUuQVNZTkNGZWF0dXJlLkFTWU5DX0ZPUl9JTkZlYXR1cmUuQVNZTkNfU1RBUkZlYXR1cmUuQ0FUQ0hfU1RBVEVNRU5URmVhdHVyZS5GQUxMX1RIUk9VR0hfRVJST1JGZWF0dXJlLkZJRUxEX1dJVEhPVVRfSU5JVElBTElaRVJGZWF0dXJlLkxBWllfRklFTERGZWF0dXJlLkxPQ0FMX1dJVEhPVVRfSU5JVElBTElaRVJGZWF0dXJlLkxPQURfTElCUkFSWUZlYXR1cmUuU1RBQ0tfVFJBQ0VfSU5fQ0FUQ0hGZWF0dXJlLlNUUklOR19JTlRFUlBPTEFUSU9ORmVhdHVyZS5TVFJJTkdfSlVYVEFQT1NJVElPTkZlYXR1cmUuU1VQRVJfTk9fU1VDSF9NRVRIT0RGZWF0dXJlLlNZTUJPTF9DT05TVFJVQ1RPUkZlYXR1cmUuU1lOQ19GT1JfSU5GZWF0dXJlLlNZTkNfU1RBUkZlYXR1cmUuVEhST1dfRVhQUkVTU0lPTkZlYXR1cmUuVEhST1dfTk9fU1VDSF9NRVRIT0RGZWF0dXJlLlRIUk9XX1JVTlRJTUVfRVJST1JGZWF0dXJlLlRIUk9XX1VOU1VQUE9SVEVEX0VSUk9SRmVhdHVyZS5UWVBFX1ZBUklBQkxFX0JPVU5EU19DSEVDS0FCU1RSQUNUX0NMQVNTX0lOU1RBTlRJQVRJT05BU1NFUlRfV0lUSF9NRVNTQUdFQVNZTkNfRk9SX0lOQ0FUQ0hfU1RBVEVNRU5URkFMTF9USFJPVUdIX0VSUk9SRklFTERfV0lUSE9VVF9JTklUSUFMSVpFUkxBWllfRklFTERMT0NBTF9XSVRIT1VUX0lOSVRJQUxJWkVSTE9BRF9MSUJSQVJZU1RBQ0tfVFJBQ0VfSU5fQ0FUQ0hTVFJJTkdfSU5URVJQT0xBVElPTlNUUklOR19KVVhUQVBPU0lUSU9OU1VQRVJfTk9fU1VDSF9NRVRIT0RTWU1CT0xfQ09OU1RSVUNUT1JTWU5DX0ZPUl9JTlRIUk9XX0VYUFJFU1NJT05USFJPV19OT19TVUNIX01FVEhPRFRIUk9XX1JVTlRJTUVfRVJST1JUSFJPV19VTlNVUFBPUlRFRF9FUlJPUlRZUEVfVkFSSUFCTEVfQk9VTkRTX0NIRUNLTWFwTGl0ZXJhbFVzZU1hcExpdGVyYWxVc2UoLGlzQ29uc3RhbnQ6LGlzRW1wdHk6U2V0TGl0ZXJhbFVzZVNldExpdGVyYWxVc2UoTGlzdExpdGVyYWxVc2VMaXN0TGl0ZXJhbFVzZShSdW50aW1lVHlwZVVzZWFyZ3VtZW50VHlwZVJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmdzdHJpbmc6UnVudGltZVR5cGVVc2VLaW5kLmVxdWFsc2VxdWFsczpSdW50aW1lVHlwZVVzZUtpbmQudW5rbm93bnVua25vd246UnVudGltZVR5cGVVc2Uoa2luZD0scmVjZWl2ZXI9LGFyZ3VtZW50PUdlbmVyaWNJbnN0YW50aWF0aW9uZ2VuZXJpYy1pbnN0YW50aWF0aW9uR2VuZXJpY0luc3RhbnRpYXRpb24oZnVuY3Rpb25UeXBlOnR5cGVBcmd1bWVudHM6ZGFydDJqcy51bml2ZXJzZS51c2VTdHJvbmdNb2RlQ29uc3RyYWludElOVk9LRWR5bmFtaWMtdXNlX3R5cGVBcmd1bWVudHNUeXBlIGFyZ3VtZW50IGNvdW50IG1pc21hdGNoLiBTZWxlY3RvciBoYXMgIGJ1dCAgd2VyZSBwYXNzZWQuaGFzQ29uc3RyYWludFVuc3VwcG9ydGVkIHJlY2VpdmVyIGNvbnN0cmFpbnQ6IGlzVGhpc3RoaXM6ZXhhY3Q6U1RBVElDX1RFQVJfT0ZGU1VQRVJfVEVBUl9PRkZTVVBFUl9GSUVMRF9TRVRTVVBFUl9HRVRTVVBFUl9TRVRURVJfU0VUU1VQRVJfSU5WT0tFSU5TVEFOQ0VfRklFTERfR0VUSU5TVEFOQ0VfRklFTERfU0VUQ0xPU1VSRUNMT1NVUkVfQ0FMTENBTExfTUVUSE9EQ09OU1RSVUNUT1JfSU5WT0tFQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFRElSRUNUX0lOVk9LRUlOTElOSU5HU1RBVElDX0lOVk9LRVNUQVRJQ19HRVRTVEFUSUNfU0VURklFTERfSU5JVEZJRUxEX0NPTlNUQU5UX0lOSVRzdGF0aWMtdXNlX2NoZWNrR2VuZXJpY0ludmFyaWFudHNUeXBlIGFyZ3VtZW50IGNvdW50IG1pc21hdGNoLiBDYWxsIHN0cnVjdHVyZSBoYXMgIHdlcmUgcGFzc2VkIGluIFVuc3VwcG9ydGVkIGVudGl0eTogaW5pdDpkZWY6c3RhdGljSW52b2tlU3RhdGljIGludm9rZSBlbGVtZW50ICBtdXN0IGJlIGEgdG9wLWxldmVsIG9yIHN0YXRpYyBtZXRob2QuU3RhdGljIGdldCBlbGVtZW50ICBtdXN0IGJlIGEgZnVuY3Rpb24uTm90IENhbGxTdHJ1Y3R1cmUgZm9yIHN0YXRpYyBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgc3RhdGljVGVhck9mZlN0YXRpYyB0ZWFyLW9mZiBlbGVtZW50IHN0YXRpY0dldG9yIHN0YXRpYyBmaWVsZCBvciBnZXR0ZXIuIG11c3QgYmUgYSBmaWVsZCBvciBhIGdldHRlci5zdGF0aWNTZXRTdGF0aWMgc2V0IGVsZW1lbnQgbXVzdCBiZSBhIHRvcC1sZXZlbCBvciBzdGF0aWMgbWV0aG9kLiBtdXN0IGJlIGEgZmllbGQgb3IgYSBzZXR0ZXIuc3RhdGljSW5pdFN0YXRpYyBpbml0IGVsZW1lbnQgIG11c3QgYmUgYSBmaWVsZC5zdXBlckludm9rZVN1cGVyIGludm9rZSBlbGVtZW50ICBtdXN0IGJlIGFuIGluc3RhbmNlIG1ldGhvZC5Ob3QgQ2FsbFN0cnVjdHVyZSBmb3Igc3VwZXIgaW52b2NhdGlvbiBvZiBlbGVtZW50IHN1cGVyR2V0U3VwZXIgZ2V0IGVsZW1lbnQgc3VwZXJGaWVsZFNldFN1cGVyIHNldCBlbGVtZW50IHN1cGVyU2V0dGVyU2V0IG11c3QgYmUgYSBzZXR0ZXIuc3VwZXJUZWFyT2Zmc3VwZXJDb25zdHJ1Y3Rvckludm9rZUNvbnN0cnVjdG9yIGludm9rZSBlbGVtZW50ICBtdXN0IGJlIGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3Rvci5Ob3QgQ2FsbFN0cnVjdHVyZSBmb3Igc3VwZXIgY29uc3RydWN0b3IgaW52b2NhdGlvbiBvZiBlbGVtZW50IGNvbnN0cnVjdG9yQm9keUludm9rZU5vdCBDYWxsU3RydWN0dXJlIGZvciBjb25zdHJ1Y3RvciBib2R5IGludm9jYXRpb24gb2YgZWxlbWVudCBnZW5lcmF0b3JCb2R5SW52b2tlZGlyZWN0SW52b2tlRGlyZWN0IGludm9rZSBlbGVtZW50ICBtdXN0IGJlIGFuIGluc3RhbmNlIG1lbWJlci4gbXVzdCBiZSBhIG1ldGhvZC5kaXJlY3RHZXREaXJlY3QgZ2V0IGVsZW1lbnQgZGlyZWN0U2V0RGlyZWN0IHNldCBlbGVtZW50IGNvbnN0cnVjdG9ySW52b2tlQ29uc3RydWN0b3IgaW52b2NhdGlvbiBlbGVtZW50ICBtdXN0IGJlIGEgY29uc3RydWN0b3IuTm90IENhbGxTdHJ1Y3R1cmUgZm9yIGNvbnN0cnVjdG9yIGludm9jYXRpb24gb2YgZWxlbWVudCB0eXBlZENvbnN0cnVjdG9ySW52b2tlTm8gdHlwZSBwcm92aWRlZCBmb3IgY29uc3RydWN0b3IgaW52b2NhdGlvbi5UeXBlZCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGVsZW1lbnQgbXVzdCBiZSBhIGNvbnN0cnVjdG9yLmNvbnN0Q29uc3RydWN0b3JJbnZva2VDb25zdCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGVsZW1lbnQgZmllbGRJbml0RmllbGQgaW5pdCBlbGVtZW50ICBtdXN0IGJlIGFuIGluc3RhbmNlIGZpZWxkLmZpZWxkQ29uc3RhbnRJbml0ZmllbGRHZXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvciBib3hlZCBmaWVsZC5maWVsZFNldGNsb3N1cmVDYWxsaW1wbGljaXRJbnZva2Vjb25zdHJ1Y3RvcklubGluaW5nbWV0aG9kSW5saW5pbmdTdGF0aWNVc2UoSVNfQ0hFQ0tBU19DQVNUQ0FUQ0hfVFlQRU5BVElWRV9JTlNUQU5USUFUSU9OQ09OU1RfSU5TVEFOVElBVElPTklNUExJQ0lUX0NBU1RQQVJBTUVURVJfQ0hFQ0tSVElfVkFMVUVUWVBFX0FSR1VNRU5UTkFNRURfVFlQRV9WQVJJQUJMRV9ORVdfUlRJdHlwZS11c2VpczphczpjYXRjaDpsaXQ6aW5zdDpjb25zdDpuYXRpdmU6aW1wbDpwYXJhbTpydGk6dHlwZUFyZzpuYW1lZDphc0Nhc3RwYXJhbWV0ZXJDaGVja2ltcGxpY2l0Q2FzdGNhdGNoVHlwZWNvbnN0SW5zdGFudGlhdGlvbm5hdGl2ZUluc3RhbnRpYXRpb25jb25zdFR5cGVMaXRlcmFsaW5zdGFuY2VDb25zdHJ1Y3Rvcm5hbWVkVHlwZVZhcmlhYmxlTmV3UnRpVHlwZVVzZShjb25zdGFudC11c2VjdXN0b21FbGVtZW50c0NvbnN0YW50VXNlKGRhcnQyanMudXRpbC5lbnVtc2V0RW51bVNldGZyb21WYWx1ZWZpeGVkZnJvbVZhbHVlc21pbnVzYml0TGVuZ3RoMV9FbnVtU2V0X0NvbnN0RW51bVNldEVudW1TZXQudmFsdWU9RW51bVNldC5hZGRFbnVtU2V0LmFkZEFsbEVudW1TZXQuY2xlYXJFbnVtU2V0LnJlbW92ZUVudW1TZXQucmVtb3ZlQWxsX0VudW1TZXRJdGVyYWJsZV9lbnVtU2V0X3ZhbHVlc19FbnVtU2V0SXRlcmF0b3JfbWFza2RhcnQyanMuZWxlbWVudHMubmFtZXNpc0FjY2Vzc2libGVGcm9taXNTaW1pbGFyVG9zaW1pbGFySGFzaENvZGVpc1ByaXZhdGVOYW1laXNQdWJsaWNOYW1lUHJpdmF0ZU5hbWVkYXJ0MmpzLmNhbGxfc3RydWN0dXJlY2FsbC1zdHJ1Y3R1cmVOT19BUkdTT05FX0FSR1RXT19BUkdTVEhSRUVfQVJHU0ZPVVJfQVJHU3VubmFtZWR3aXRoVHlwZUFyZ3VtZW50Q291bnRpc1VubmFtZWRhcml0eT0sIHR5cGVzPUNhbGxTdHJ1Y3R1cmUoY2FsbFNlbGVjdG9yb3B0aW9uYWxQYXJhbWV0ZXJDb3VudG5hbWVJbmRleHNhbWVOYW1lc05hbWVkQ2FsbFN0cnVjdHVyZV9vcmRlcmVkTmFtZWRBcmd1bWVudHMsIG5hbWVkPVtkYXJ0MmpzLmNvbnN0YW50X3N5c3RlbU9wZXJhdGlvblVuYXJ5T3BlcmF0aW9uQmluYXJ5T3BlcmF0aW9uQml0Tm90T3BlcmF0aW9uaW50Q29uc3RhbnROZWdhdGVPcGVyYXRpb25fZm9sZGRvdWJsZUNvbnN0YW50Tm90T3BlcmF0aW9uQmluYXJ5Qml0T3BlcmF0aW9ubGVmdEludHJpZ2h0SW50cmVzdWx0VmFsdWVmb2xkSW50c0JpdEFuZE9wZXJhdGlvbkJpdE9yT3BlcmF0aW9uQml0WG9yT3BlcmF0aW9uU2hpZnRMZWZ0T3BlcmF0aW9uU2hpZnRSaWdodE9wZXJhdGlvbnRydW5jYXRlZFZhbHVlU0lHTl9CSVRCaW5hcnlCb29sT3BlcmF0aW9ubGVmdEJvb2xyaWdodEJvb2xmb2xkQm9vbHNCb29sZWFuQW5kT3BlcmF0aW9uQm9vbGVhbk9yT3BlcmF0aW9uQXJpdGhtZXRpY051bU9wZXJhdGlvbmxlZnROdW1yaWdodE51bWZvbGRlZFZhbHVlZm9sZE51bXNpc0RpdmlkZWlzVHJ1bmNhdGluZ0RpdmlkZVN1YnRyYWN0T3BlcmF0aW9uTXVsdGlwbHlPcGVyYXRpb25Nb2R1bG9PcGVyYXRpb25SZW1haW5kZXJPcGVyYXRpb25UcnVuY2F0aW5nRGl2aWRlT3BlcmF0aW9ucmF0aW9EaXZpZGVPcGVyYXRpb25BZGRPcGVyYXRpb25sZWZ0U3RyaW5ncmlnaHRTdHJpbmdSZWxhdGlvbmFsTnVtT3BlcmF0aW9uTGVzc09wZXJhdGlvbkxlc3NFcXVhbE9wZXJhdGlvbkdyZWF0ZXJPcGVyYXRpb25HcmVhdGVyRXF1YWxPcGVyYXRpb25FcXVhbHNPcGVyYXRpb25JZGVudGl0eU9wZXJhdGlvbmxlZnREb3VibGVyaWdodERvdWJsZUlmTnVsbE9wZXJhdGlvbkNvZGVVbml0QXRPcGVyYXRpb25jaGFyQ29kZUF0c3RyaW5nQ29uc3RhbnRpbmRleENvbnN0YW50Um91bmRPcGVyYXRpb25yb3VuZHRyeVRvUm91bmRyb3VuZGVkcm91bmRUb0RvdWJsZXJvdW5kZWQxMWUtMTNyb3VuZGVkMjEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4VW5mb2xkZWRVbmFyeU9wZXJhdGlvbkphdmFTY3JpcHRTZXRDb25zdGFudEphdmFTY3JpcHRNYXBDb25zdGFudFBST1RPX1BST1BFUlRZREFSVF9DTEFTU0RBUlRfU1RSSU5HX0NMQVNTREFSVF9QUk9UT19DTEFTU0RBUlRfR0VORVJBTF9DTEFTU0xFTkdUSF9OQU1FSlNfT0JKRUNUX05BTUVfanNPYmplY3RLRVlTX05BTUVfa2V5c1BST1RPX1ZBTFVFX3Byb3RvVmFsdWVKU19EQVRBX05BTUVfanNEYXRhX0JJVFMzMmJpdEFuZGJpdE5vdGJpdE9yYml0WG9yYm9vbGVhbkFuZGJvb2xlYW5PcmdyZWF0ZXJFcXVhbGdyZWF0ZXJpZGVudGl0eWlmTnVsbGxlc3NFcXVhbGxlc3NzaGlmdExlZnRzaGlmdFJpZ2h0X2ludGVnZXJCZWNvbWVzTmFuT3JJbmZpbml0eV9jb252ZXJ0VG9KYXZhU2NyaXB0Q29uc3RhbnRmbG9vclZhbHVlZG91YmxlUmVzdWx0dHJ1bmNhdGVkY3JlYXRlSW50Y3JlYXRlSW50RnJvbUludF9jcmVhdGVJbnQzMmNyZWF0ZURvdWJsZWNyZWF0ZVN0cmluZ2NyZWF0ZUJvb2xjcmVhdGVOdWxsY3JlYXRlTGlzdGNyZWF0ZVR5cGVjcmVhdGVTZXRudWxsc2NyZWF0ZU1hcGtleXNUeXBla2V5c0xpc3RjcmVhdGVTeW1ib2xsb29rdXBVbmFyeWxvb2t1cEJpbmFyeWpzX2JhY2tlbmQubmF0aXZlX2RhdGFnZXROYXRpdmVUYWdzT2ZDbGFzc2hhc05hdGl2ZVRhZ3NGb3JjZWROb25MZWFmaXNKc0ludGVyb3BVc2VkaXNKc0ludGVyb3BMaWJyYXJ5aXNKc0ludGVyb3BNZW1iZXJpc05hdGl2ZU1lbWJlcmdldE5hdGl2ZU1ldGhvZEJlaGF2aW9yZ2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3JnZXROYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3JnZXRGaXhlZEJhY2tlbmRNZXRob2RQYXRoZ2V0SnNJbnRlcm9wTGlicmFyeU5hbWVpc0Fub255bW91c0pzSW50ZXJvcENsYXNzZ2V0SnNJbnRlcm9wQ2xhc3NOYW1lZ2V0SnNJbnRlcm9wTWVtYmVyTmFtZWNvbXB1dGVVbmVzY2FwZWRKU0ludGVyb3BOYW1lTmF0aXZlQmFzaWNEYXRhQnVpbGRlcnNldE5hdGl2ZUNsYXNzVGFnSW5mb3RhZ0luZm9tYXJrQXNKc0ludGVyb3BMaWJyYXJ5bWFya0FzSnNJbnRlcm9wQ2xhc3Npc0Fub255bW91c21hcmtBc0pzSW50ZXJvcE1lbWJlcnNldE5hdGl2ZU1ldGhvZEJlaGF2aW9yc2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3JzZXROYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3JzZXROYXRpdmVNZW1iZXJOYW1lTmF0aXZlQmFzaWNEYXRhQnVpbGRlckltcGxuYXRpdmVDbGFzc1RhZ0luZm9qc0ludGVyb3BMaWJyYXJpZXNqc0ludGVyb3BDbGFzc2VzYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlc2pzSW50ZXJvcE1lbWJlcnN0YWdUZXh0TmF0aXZlQmFzaWNEYXRhQnVpbGRlciBpcyBjbG9zZWQuIFRyeWluZyB0byBtYXJrICBhcyBhIG5hdGl2ZSBjbGFzcy5OYXRpdmUgdGFnIGluZm8gc2V0IGluY29uc2lzdGVudGx5IG9uIEV4aXN0aW5nIHRhZyBpbmZvICduZXcgdGFnIGluZm8gJyBhcyBhIGpzLWludGVyb3AgbGlicmFyeS4gYXMgYSBqcy1pbnRlcm9wIGNsYXNzLiBhcyBhIGpzLWludGVyb3AgbWVtYmVyLnJlb3BlbkZvclRlc3RpbmdOYXRpdmVCYXNpY0RhdGFJbXBsbmF0aXZlLWJhc2ljLWRhdGFmcm9tSXJmb3JFYWNoTmF0aXZlQ2xhc3Nmb3JFYWNoSnNJbnRlcm9wTGlicmFyeWZvckVhY2hKc0ludGVyb3BDbGFzc2ZvckVhY2hKc0ludGVyb3BNZW1iZXJpc05vbkxlYWZfaXNKc0ludGVyb3BNZW1iZXJOYXRpdmVEYXRhQnVpbGRlckltcGxuYXRpdmVNZW1iZXJOYW1lbmF0aXZlTWV0aG9kQmVoYXZpb3JuYXRpdmVGaWVsZExvYWRCZWhhdmlvcm5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvck5hdGl2ZSBtZW1iZXIgbmFtZSBzZXQgaW5jb25zaXN0ZW50bHkgb24gRXhpc3RpbmcgbmFtZSAnbmV3IG5hbWUgJ05hdGl2ZURhdGFJbXBsbmF0aXZlLWRhdGFfanNJbnRlcm9wRXNjYXBlUHJlZml4SlMkZm9yRWFjaE5hdGl2ZU1ldGhvZERhdGFnZXROYXRpdmVCZWhhdmlvckZvck1ldGhvZGZvckVhY2hOYXRpdmVGaWVsZERhdGFnZXROYXRpdmVCZWhhdmlvckZvckZpZWxkTG9hZGdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRTdG9yZV9qc0NsYXNzTmFtZUhlbHBlcl9qc01lbWJlck5hbWVIZWxwZXJfanNMaWJyYXJ5TmFtZUhlbHBlcmpzSW50ZXJvcE5hbWUgaXMganMgaW50ZXJvcCBidXQganMgaW50ZXJvcCBuYW1lIGhhcyBub3QgeWV0IGJlZW4gY29tcHV0ZWQuX2ZpeGVkQmFja2VuZENsYXNzUGF0aE5vIG5hdGl2ZSBtZXRob2QgYmVoYXZpb3IgaGFzIGJlZW4gY29tcHV0ZWQgZm9yIE5vIG5hdGl2ZSBmaWVsZCBsb2FkIGJlaGF2aW9yIGhhcyBiZWVuIGNvbXB1dGVkIGZvciBObyBuYXRpdmUgZmllbGQgc3RvcmUgYmVoYXZpb3IgaGFzIGJlZW4gY29tcHV0ZWQgZm9yIE5hdGl2ZUNsYXNzVGFnIW5vbmxlYWZkYXJ0MmpzLmpzX21vZGVsLmxvY2Fsc0dsb2JhbExvY2Fsc01hcGdsb2JhbC1sb2NhbHMtbWFwX2xvY2Fsc01hcHNtYXBDb3VudGxvY2Fsc01hcHJldmVyc2VNYXBnZXRMb2NhbHNNYXBzZXRMb2NhbHNNYXBObyBtZW1iZXIgcHJvdmlkZWQuTG9jYWxzIG1hcCBhbHJlYWR5IGNyZWF0ZWQgZm9yIEtlcm5lbFRvTG9jYWxzTWFwSW1wbGxvY2Fscy1tYXBfY3VycmVudE1lbWJlcl9sb2NhbHNfdmFyaWFibGVNYXBfanVtcFRhcmdldE1hcF9icmVha3NBc0NvbnRpbnVlbG9jYWxzQ291bnRpc1JlZ3VsYXJQYXJhbWV0ZXJyZWdpc3RlckJ5SW5kZXhqdW1wQ291bnRyZXZlcnNlZE1hcF9lbnN1cmVKdW1wTWFwanVtcFRhcmdldE1hcGJyZWFrc0FzQ29udGludWVnZXRKdW1wVGFyZ2V0Rm9yQnJlYWtObyB0YXJnZXQgZm9yIGdlbmVyYXRlQ29udGludWVGb3JCcmVha2dldEp1bXBUYXJnZXRGb3JDb250aW51ZVN3aXRjaGdldEp1bXBUYXJnZXRGb3JTd2l0Y2hDYXNlZ2V0SnVtcFRhcmdldEZvckRvZ2V0SnVtcFRhcmdldEZvckxhYmVsZ2V0SnVtcFRhcmdldEZvclN3aXRjaGdldEp1bXBUYXJnZXRGb3JGb3JnZXRKdW1wVGFyZ2V0Rm9yRm9ySW5nZXRKdW1wVGFyZ2V0Rm9yV2hpbGVnZXRMb2NhbFZhcmlhYmxlcmVnaXN0ZXJnZXRMb2NhbFR5cGVWYXJpYWJsZWdldFR5cGVWYXJpYWJsZVR5cGVnZXRGdW5jdGlvbk5vZGVGb3JQYXJhbWV0ZXJnZXREYXRhZ2V0TG9jYWxUeXBlZ2V0RGFydFR5cGVKdW1wVmlzaXRvcmp1bXBJbmRleF9nZXRKdW1wVGFyZ2V0aXNTd2l0Y2hpc1N3aXRjaENhc2VfZ2V0T3JDcmVhdGVMYWJlbGFkZExhYmVsY2FuQmVCcmVha1RhcmdldGNhbkJlQ29udGludWVUYXJnZXRuZWVkc0xhYmVsSkp1bXBUYXJnZXRqdW1wLXRhcmdldF9sYWJlbHNkZWZpbml0aW9ubGFiZWxEZWZpbml0aW9uSkp1bXBUYXJnZXQobWVtYmVyQ29udGV4dD0sbmVzdGluZ0xldmVsPSxpc0JyZWFrVGFyZ2V0PSxpc0NvbnRpbnVlVGFyZ2V0PSxsYWJlbHM9SkxhYmVsRGVmaW5pdGlvbkpMYWJlbERlZmluaXRpb24oLGxhYmVsTmFtZT1KTG9jYWxMb2NhbERhdGFmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckFzTG9jYWxjb21waWxlci5zcmMua2VybmVsLmRhcnQyanNfdGFyZ2V0ZGFydDpfY2hyb21lZGFydDpfZm9yZWlnbl9oZWxwZXJkYXJ0Ol9qc19lbWJlZGRlZF9uYW1lc2RhcnQ6X2pzX2hlbHBlcmRhcnQ6X2pzX25hbWVzZGFydDpodG1sX2NvbW1vbmRhcnQ6aW5kZXhlZF9kYmRhcnQ6aW9kYXJ0OmpzX3V0aWxkYXJ0OndlYl9hdWRpb2RhcnQ6d2ViX2dsZGFydDp3ZWJfc3FsRGFydDJqc0NvbnN0YW50c0JhY2tlbmRfYWxsb3dlZERhcnRTY2hlbWVQYXRoc2pzX3V0aWxfcmVxdWlyZWRMaWJyYXJpZXNtYXliZUVuYWJsZU5hdGl2ZWFsbG93ZWRUZXN0TGlicmFyeXRlc3RzL2NvbXBpbGVyL2RhcnQyanNfbmF0aXZldGVzdHMvY29tcGlsZXIvZGFydDJqc19leHRyYWdlbmVyYXRlZF90ZXN0cy9kYXJ0MmpzX25hdGl2ZS9uYXRpdmVfdGVzdGFsbG93ZWREYXJ0TGlicmFyeUtMaWJyYXJ5azpsaWJyYXJ5KEtDbGFzc2NsYXNzKEtUeXBlZGVmdHlwZWRlZihLTWVtYmVyX2lzU3RhdGljS0Z1bmN0aW9uS0NvbnN0cnVjdG9yS0dlbmVyYXRpdmVDb25zdHJ1Y3RvcktGYWN0b3J5Q29uc3RydWN0b3JLTWV0aG9kS0dldHRlcktTZXR0ZXJLRmllbGRLVHlwZVZhcmlhYmxldHlwZV92YXJpYWJsZShleGVjdXRhYmxlQ29udGV4dGxvY2FsX2Z1bmN0aW9uS0xvY2FsVHlwZVZhcmlhYmxlbG9jYWxfdHlwZV92YXJpYWJsZShrRWxlbWVudFByZWZpeGRhcnQyanNfaW5mby5pbmZvSW5mb0Jhc2ljSW5mb0NvZGVJbmZvQWxsSW5mb21pbm9yVmVyc2lvbnZpc2l0QWxsUHJvZ3JhbUluZm9JbmZvS2luZC5saWJyYXJ5T3V0cHV0VW5pdEluZm9JbmZvS2luZC5vdXRwdXRVbml0dmlzaXRPdXRwdXRDbGFzc0luZm9JbmZvS2luZC5jbGF6ekNvZGVTcGFuQ29uc3RhbnRJbmZvSW5mb0tpbmQuY29uc3RhbnRfRmllbGRJbmZvJkJhc2ljSW5mbyZDb2RlSW5mb0luZm9LaW5kLmZpZWxkVHlwZWRlZkluZm9JbmZvS2luZC50eXBlZGVmX0Z1bmN0aW9uSW5mbyZCYXNpY0luZm8mQ29kZUluZm9GdW5jdGlvbkluZm9UT1BfTEVWRUxfRlVOQ1RJT05fS0lORENMT1NVUkVfRlVOQ1RJT05fS0lORE1FVEhPRF9GVU5DVElPTl9LSU5EQ09OU1RSVUNUT1JfRlVOQ1RJT05fS0lOREluZm9LaW5kLmZ1bmN0aW9uQ2xvc3VyZUluZm9JbmZvS2luZC5jbG9zdXJldmlzaXRDbG9zdXJlUGFyYW1ldGVySW5mb0Z1bmN0aW9uTW9kaWZpZXJzSW5mb0tpbmRJbmZvVmlzaXRvclJlY3Vyc2l2ZUluZm9WaXNpdG9ya2luZFRvU3RyaW5na2luZEZyb21TdHJpbmdKc29uVG9BbGxJbmZvQ29udmVydGVycGFyc2VMaWJyYXJ5cGFyc2VGdW5jdGlvbnBhcnNlQ2xvc3VyZXBhcnNlRmllbGRwYXJzZUNvbnN0YW50aG9sZGluZ3BhcnNlT3V0cHV0VW5pdHBhcnNlUHJvZ3JhbWRlZmVycmVkRmlsZXNNYXBpbXBvcnRNYXBwYXJzZUlkcGFyc2VDb2RlcHJvZ3JhbUluZm9fcGFyc2VEdXJhdGlvbm1pY3Jvc2Vjb25kc2hvdXJzbWludXRlc3RvdGFsTWlsbGlzcGFyc2VQYXJhbWV0ZXJwYXJzZU1vZGlmaWVyc3NlcmlhbGl6ZWRJZGZ1bmN0aW9uL2Nsb3N1cmUvbGlicmFyeS9jbGFzcy9maWVsZC9jb25zdGFudC90eXBlZGVmL291dHB1dFVuaXQvanNvbkNvZGVBbGxJbmZvVG9Kc29uQ29udmVydGVyaWRzdXNlZElkc2lkRm9ydXNlTGlicmFyeVVyaWZvcklkX3Zpc2l0TGlzdF92aXNpdEFsbEluZm9FbGVtZW50c2pzb25MaWJyYXJpZXNqc29uQ2xhc3Nlc2pzb25GdW5jdGlvbnNqc29uVHlwZWRlZnNqc29uRmllbGRzanNvbkNvbnN0YW50c2pzb25DbG9zdXJlc192aXNpdERlcGVuZGVuY3lJbmZvX3Zpc2l0QWxsSW5mb0hvbGRpbmdfdmlzaXRBbGxJbmZvRGVwZW5kZW5jaWVzanNvbkhvbGRpbmdqc29uRGVwZW5kZW5jaWVzZHVtcF92ZXJzaW9uZHVtcF9taW5vcl92ZXJzaW9uX3Zpc2l0QmFzaWNJbmZvX3NlcmlhbGl6ZUNvZGVfdmlzaXRGdW5jdGlvbk1vZGlmaWVyc21vZHNfdmlzaXRQYXJhbWV0ZXJJbmZvQWxsSW5mb0pzb25Db2RlY0lkX3RvU29ydGVkU2VyaWFsaXplZElkc2dldElkd3JpdGVEYXRlZGF0ZXRvSXNvODYwMVN0cmluZ3dyaXRlRHVyYXRpb253cml0ZUluZm9XaXRoS2luZHdyaXRlRGVwZW5kZW5jaWVzX3dyaXRlRGVwZW5kZW5jeUluZm9fd3JpdGVPdXRwdXRPck51bGxfdmlzaXRDb2RlU3Bhbl93cml0ZUNvbnN0YW50T3JOdWxsQmluYXJ5UmVhZGVycmVhZERhdGVyZWFkRHVyYXRpb25yZWFkSW5mb1dpdGhLaW5kcmVhZEZ1bmN0aW9ucmVhZE91dHB1dHJlYWRDbG9zdXJld2FybmluZzogZGF0YSB3YXMgZW5jb2RlZCB3aXRoIGZvcm1hdCB2ZXJzaW9uICwgYnV0IGRlY29kZWQgd2l0aCByZWFkRGVwZW5kZW5jaWVzX3JlYWREZXBlbmRlbmN5SW5mb2RlcGVuZGVuY2llc1RvdGFscmVhZFByb2dyYW1fcmVhZEJhc2ljSW5mb19yZWFkT3V0cHV0T3JOdWxsX3JlYWRDb2RlU3Bhbl9yZWFkQ29uc3RhbnRPck51bGxoYXNPdXRwdXRfcmVhZEZ1bmN0aW9uTW9kaWZpZXJzX3JlYWRQYXJhbWV0ZXJJbmZvX3N0YXRpY01hc2tfY29uc3RNYXNrX2ZhY3RvcnlNYXNrX2V4dGVybmFsTWFza0pGaWVsZF9jbGFzc0RhdGFfc3RhdGljRmllbGREYXRha2VybmVsU3RyYXRlZ3lnZXRDbGFzc05vZGVmaWVsZEVsZW1lbnRnZXRGaWVsZGdldENvbnN0YW50VmFsdWVyZXF1aXJlQ29uc3RhbnRpbXBsaWNpdE51bGxjb25zdHJ1Y3RvckVsZW1lbnRpbml0aWFsaXplclZhbHVlSW5pdGlhbGl6ZXJLaW5kLmNvbXBsZXhjb25zdGFudFZhbHVlY29tcGxleGl0eWdldEFsbG9jYXRvckRhdGFGb3JUZXN0aW5nZ2V0U3RhdGljRmllbGREYXRhRm9yVGVzdGluZ0NsYXNzRGF0YVN0YXRpY0ZpZWxkRGF0YWhhc0RlcGVuZGVuY2llc0FsbG9jYXRvckRhdGFBbGxvY2F0b3JEYXRhKGluaXRpYWxWYWx1ZT1pbml0aWFsaXplcnM9SW5pdGlhbGl6ZXJLaW5kSW5pdGlhbGl6ZXJLaW5kLmRpcmVjdEluaXRpYWxpemVyS2luZC5wb3NpdGlvbmFsSW5pdGlhbGl6ZXJLaW5kLm5hbWVkY29tcGxleFVuZXhwZWN0ZWQga2luZCBmaWVsZC1hbmFseXNpc19maWVsZERhdGFjYW5CZUVsaWRlZGhhc05vRWxpc2lvbmtGaWVsZGpGaWVsZHRvQmFja2VuZE1lbWJlcmlzVG9vQ29tcGxleGluY2x1ZGVJbml0aWFsVmFsdWVpbml0aWFsQ29uc3RhbnRzaW5BbGxDb25zdHJ1Y3RvcnNjb25zdHJ1Y3RvclVzYWdlaW52b2tlZFBhcmFtZXRlcnN0b0JhY2tlbmRDb25zdGFudGlzRWZmZWN0aXZlbHlDb25zdGFudGlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcmhhc1dyaXRlaXNFZmZlY3RpdmVseUZpbmFsaW5kZXBlbmRlbnRGaWVsZHNkZXBlbmRlbnRGaWVsZHNzdGF0aWNGaWVsZERhdGFwcm9jZXNzZWRGaWVsZHNjdXJyZW50RmllbGRzZWFnZXJDcmVhdGlvbkluZGV4cHJvY2Vzc0ZpZWxkaXNFYWdlcmVhZ2VyRmllbGREZXBlbmRlbmNpZXNjcmVhdGlvbkluZGV4b3RoZXJGaWVsZG90aGVyRGF0YWlzTGF6eWVhZ2VyRmllbGREZXBlbmRlbmNpZXNGb3JUZXN0aW5nYUxvY2F0aW9uYkxvY2F0aW9uRmllbGRBbmFseXNpc0RhdGFmaWVsZC1hbmFseXNpcy1kYXRhZnJvbURhdGFTb3VyY2VGaWVsZEFuYWx5c2lzRGF0YShpbml0aWFsVmFsdWU9aXNJbml0aWFsaXplZEluQWxsb2NhdG9yPWlzRWZmZWN0aXZlbHlGaW5hbD0saXNFbGlkZWQ9aXNFYWdlcj0sZWFnZXJDcmVhdGlvbkluZGV4PWVhZ2VyRmllbGREZXBlbmRlbmNpZXM9QmluYXJ5T3V0cHV0U2lua0FkYXB0ZXJqc19iYWNrZW5kLmJhY2tlbmQuYW5ub3RhdGlvbnNQcmFnbWFBbm5vdGF0aW9uZm9yRnVuY3Rpb25zT25seWZvckZpZWxkc09ubHlpbnRlcm5hbE9ubHlhc1RydXN0YXNDaGVja3R5cGVzVHJ1c3R0eXBlc0NoZWNrcGFyYW1ldGVyVHJ1c3Rkb3duY2FzdFRydXN0ZG93bmNhc3RDaGVja2ltcGxpZXNleGNsdWRlc3JlcXVpcmVzQW5ub3RhdGlvbnNEYXRhaGFzQXNzdW1lRHluYW1pY2hhc05vSW5saW5laGFzVHJ5SW5saW5laGFzRGlzYWJsZUZpbmFsaGFzTm9UaHJvd3NoYXNOb1NpZGVFZmZlY3RzZ2V0Q29uZGl0aW9uQ2hlY2tQb2xpY3lBbm5vdGF0aW9uc0RhdGFJbXBsYW5ub3RhdGlvbnMtZGF0YV9kZWZhdWx0UGFyYW1ldGVyQ2hlY2tQb2xpY3lfZGVmYXVsdEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeV9kZWZhdWx0Q29uZGl0aW9uQ2hlY2tQb2xpY3lfZGVmYXVsdEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5X2hhc1ByYWdtYUFubm90YXRpb25zRGF0YUJ1aWxkZXJjb21wdXRlUHJhZ21hQW5ub3RhdGlvbkRhdGFkYXJ0MmpzOm9wdGlvbnNWYWx1ZWhhc09wdGlvbnNwcm9jZXNzTWVtYmVyQW5ub3RhdGlvbnNwbGF0Zm9ybUFubm90YXRpb25zQWxsb3dlZEBwcmFnbWEoJycpIGFubm90YXRpb24gZG9lcyBub3QgdGFrZSBvcHRpb25zJykgYW5ub3RhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgbWV0aG9kcyBhbmQgY29uc3RydWN0b3JzLmZvciBmaWVsZHMuVW5yZWNvZ25pemVkIGRhcnQyanMgcHJhZ21hIEBwcmFnbWEoJ1Vua25vd24gZGFydDJqcyBwcmFnbWEgQHByYWdtYSgncmVwb3J0ZWRFeGNsdXNpb25zQHByYWdtYSgnZGFydDJqczonKSBpbXBsaWVzICcpIG11c3Qgbm90IGJlIHVzZWQgd2l0aCBAcHJhZ21hKCdkYXJ0MmpzOicpIHNob3VsZCBhbHdheXMgYmUgY29tYmluZWQgd2l0aCBAcHJhZ21hKCdkYXJ0MmpzOk1lbWJlclVzZWRDYWxsYmFja0NsYXNzVXNlZENhbGxiYWNrQWJzdHJhY3RVc2FnZV9wZW5kaW5nVXNlX29yaWdpbmFsVXNlX2FwcGxpZWRVc2VoYXNTYW1lVXNhZ2VNZW1iZXJVc2FnZWVtcHR5U2V0cGVuZGluZ1VzZWNyZWF0ZVBvdGVudGlhbEFjY2Vzc1NldEFjY2Vzcy5zdGF0aWNBY2Nlc3NjcmVhdGVQb3RlbnRpYWxSZWFkc2NyZWF0ZVBvdGVudGlhbFdyaXRlc2NyZWF0ZVBvdGVudGlhbEludm9rZXNwb3RlbnRpYWxSZWFkc3BvdGVudGlhbFdyaXRlc3BvdGVudGlhbEludm9rZXNoYXNJbml0aGFzSW52b2tlYWNjZXNzZXNQcm9wZXJ0eVVzYWdlYWxyZWFkeUhhc1JlYWRhbHJlYWR5SGFzV3JpdGVQcm9wZXJ0eVVzYWdlKHJlYWRzPXdyaXRlcz1pbnZva2VzPXBvdGVudGlhbFJlYWRzPXBvdGVudGlhbFdyaXRlcz1wb3RlbnRpYWxJbnZva2VzPXBlbmRpbmdVc2U9aW5pdGlhbENvbnN0YW50cz1GaWVsZFVzYWdlX2luaXRpYWxDb25zdGFudHNGaWVsZFVzYWdlKCxoYXNJbml0PU1ldGhvZFVzYWdlcGFyYW1ldGVyVXNhZ2VhbHJlYWR5SGFzSW52b2tlZnVsbHlVc2Vpc0Z1bGx5VXNlZE1ldGhvZFVzYWdlKHBhcmFtZXRlclVzYWdlPU1lbWJlclVzZU5PUk1BTENMT1NVUklaRV9JTlNUQU5DRUNMT1NVUklaRV9TVEFUSUNNZW1iZXJVc2VzTk9STUFMX09OTFlDTE9TVVJJWkVfSU5TVEFOQ0VfT05MWUNMT1NVUklaRV9TVEFUSUNfT05MWUFMTF9JTlNUQU5DRUFMTF9TVEFUSUNDbGFzc1VzYWdlQ2xhc3NVc2VJTlNUQU5USUFURURJTVBMRU1FTlRFRENsYXNzVXNlc0lOU1RBTlRJQVRFRF9PTkxZSU1QTEVNRU5URURfT05MWVBhcmFtZXRlclVzYWdlX3BhcmFtZXRlclN0cnVjdHVyZV9oYXNJbnZva2VfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVyc19hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnNwcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZHVucHJvdmlkZWROYW1lZFBhcmFtZXRlcnNuZXdQcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzX3Byb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzQ291bnRQYXJhbWV0ZXJVc2FnZShfaGFzSW52b2tlPV9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzPV9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkPV91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzPUFjY2Vzc3N0YXRpY0FjY2Vzc2R5bmFtaWNBY2Nlc3NzdXBlckFjY2Vzc0FjY2Vzc2VzTWVtYmVyQWNjZXNzd29ybGRfYnVpbGRlclNlbGVjdG9yQ29uc3RyYWludHNTdHJvbmdNb2RlV29ybGRTdHJhdGVneVN0cm9uZ01vZGVXb3JsZENvbnN0cmFpbnRzX2NvbnN0cmFpbnRzU3Ryb25nTW9kZUNvbnN0cmFpbnQoV29ybGRCdWlsZGVyV29ybGRCdWlsZGVyQmFzZV9yZWdpc3RlclN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY3lfcmVnaXN0ZXJEeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jeU5vU3VjaE1ldGhvZFJlZ2lzdHJ5cmVnaXN0ZXJOb1N1Y2hNZXRob2Rub1N1Y2hNZXRob2RFbGVtZW50aGFzVGhyb3dpbmdOb1N1Y2hNZXRob2RoYXNDb21wbGV4Tm9TdWNoTWV0aG9kTm9TdWNoTWV0aG9kUmVnaXN0cnlJbXBsZGVmYXVsdEltcGxzdGhyb3dpbmdJbXBsc25vdEFwcGxpY2FibGVJbXBsc290aGVySW1wbHNfdW5jYXRlZ29yaXplZEltcGxzZm9yd2FyZGluZ1N5bnRheEltcGxzX3Jlc29sdmVyaW50ZXJuYWxSZXNvbHZlckZvclRlc3RpbmdfY2F0ZWdvcml6ZUltcGxOc21DYXRlZ29yeS5ERUZBVUxUTnNtQ2F0ZWdvcnkuVEhST1dJTkdOc21DYXRlZ29yeS5PVEhFUk5zbUNhdGVnb3J5Lk5PVF9BUFBMSUNBQkxFaGFzRm9yd2FyZGluZ1N5bnRheHN1cGVyQ2FsbGdldFN1cGVyTm9TdWNoTWV0aG9kaGFzVGhyb3dpbmdTeW50YXhpc0NvbXBsZXhOb1N1Y2hNZXRob2REYXRhSW1wbG5vLXN1Y2gtbWV0aG9kLWRhdGFjb21wbGV4Tm9SZXR1cm5JbXBsc2NvbXBsZXhSZXR1cm5pbmdJbXBsc05zbUNhdGVnb3J5VEhST1dJTkdOT1RfQVBQTElDQUJMRU9USEVSTm9TdWNoTWV0aG9kUmVzb2x2ZXJDbGFzc1JlbGF0aW9uU3RhdGljVHlwZVZpc2l0b3JfZXhwcmVzc2lvblR5cGVDYWNoZV9mb3JJbkl0ZXJhdG9yVHlwZUNhY2hldHlwZU1hcHNGb3JUZXN0aW5nX3BlbmRpbmdSdW50aW1lVHlwZVVzZURhdGFfY3VycmVudFZhcmlhYmxlc19pbnZhbGlkYXRlZFZhcmlhYmxlc190eXBlTWFwQmFzZV90eXBlTWFwV2hlblRydWVfdHlwZU1hcFdoZW5GYWxzZWdldFN0YXRpY1R5cGVDYWNoZWNvbXBsZXRlc3R5cGVNYXBXaGVuVHJ1ZXR5cGVNYXBXaGVuRmFsc2VVbmhhbmRsZWQgbm9kZSB2aXNpdE5vZGVzZ2V0SW50ZXJmYWNlVHlwZU9mX2NvbXB1dGVQcm9wZXJ0eUdldFR5cGVoYW5kbGVQcm9wZXJ0eUdldGhhbmRsZVJ1bnRpbWVUeXBlVXNlX25hcnJvd0luc3RhbmNlUmVjZWl2ZXJsZWZ0UnVudGltZVR5cGVFeHByZXNzaW9ucmlnaHRSdW50aW1lVHlwZUV4cHJlc3Npb25VbmV4cGVjdGVkIFJ1bnRpbWVUeXBlVXNlRGF0YSBmb3IgaXNDb21wbGV0ZWhhbmRsZVByb3BlcnR5U2V0cmVjZWl2ZXJTdWJzdGl0dXRpb25oYW5kbGVBc0V4cHJlc3Npb25oYW5kbGVEaXJlY3RQcm9wZXJ0eUdldGhhbmRsZURpcmVjdE1ldGhvZEludm9jYXRpb25hcmd1bWVudFR5cGVzX3Zpc2l0QXJndW1lbnRzaGFuZGxlRGlyZWN0UHJvcGVydHlTZXRpc1NwZWNpYWxDYXNlZEJpbmFyeU9wZXJhdG9yX2dldE1lbWJlcl9pc0FwcGxpY2FibGVpc0Z1bmN0aW9uVHlwZUFwcGxpY2FibGVnZXROYW1lZFBhcmFtZXRlcnNpc1R5cGVBcHBsaWNhYmxlX3VwZGF0ZU1ldGhvZEludm9jYXRpb25UYXJnZXRuZWVkZWRQb3NpdGlvbmFsQ2hlY2tzbmVlZGVkTmFtZWRDaGVja3Nhcmd1bWVudEluZGV4bmFtZWRBcmd1bWVudG5hbWVkVHlwZWxldFZhcmlhYmxlc3VwZGF0ZUFyZ3VtZW50Y2hlY2tlZFBhcmFtZXRlclR5cGVoYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uaGFuZGxlVmFyaWFibGVHZXRfY29tcHV0ZU1ldGhvZEludm9jYXRpb25UeXBlaGFuZGxlTWV0aG9kSW52b2NhdGlvbmFmdGVySW52b2NhdGlvbnByb21vdGV0eXBlT2ZVbmV4cGVjdGVkIHByb21vdGlvbiBvZiBoYW5kbGVWYXJpYWJsZVNldGhhbmRsZVN0YXRpY0dldGhhbmRsZVN0YXRpY1NldGhhbmRsZVN0YXRpY0ludm9jYXRpb25oYW5kbGVTdXBlclByb3BlcnR5R2V0aGFuZGxlU3VwZXJQcm9wZXJ0eVNldGhhbmRsZVN1cGVyTWV0aG9kSW52b2NhdGlvbmFmdGVyTGVmdFdoZW5UcnVlYWZ0ZXJMZWZ0V2hlbkZhbHNlYWZ0ZXJSaWdodFdoZW5UcnVlYWZ0ZXJSaWdodFdoZW5GYWxzZWFmdGVyT3BlcmFuZFdoZW5UcnVlYWZ0ZXJPcGVyYW5kV2hlbkZhbHNlX2hhbmRsZUNvbmRpdGlvbmFsYWZ0ZXJDb25kaXRpb25XaGVuVHJ1ZWFmdGVyQ29uZGl0aW9uV2hlbkZhbHNlYWZ0ZXJUaGVuYWZ0ZXJPdGhlcndpc2VoYW5kbGVJc0V4cHJlc3Npb25hZnRlck9wZXJhbmRfcHJvY2Vzc0xvY2FsVmFyaWFibGVfY29tcHV0ZUluc3RhbnRpYXRpb25UeXBlaGFuZGxlSW5zdGFudGlhdGlvbkluY29tcGxldGUgUnVudGltZVR5cGVVc2VEYXRhOiBvcGVyYW5kVHlwZWhhbmRsZVN0cmluZ0NvbmNhdGVuYXRpb25oYW5kbGVJbnRMaXRlcmFsaGFuZGxlRG91YmxlTGl0ZXJhbGhhbmRsZUJvb2xMaXRlcmFsaGFuZGxlU3RyaW5nTGl0ZXJhbGhhbmRsZVN5bWJvbExpdGVyYWxoYW5kbGVOdWxsTGl0ZXJhbGhhbmRsZUxpc3RMaXRlcmFsaGFuZGxlU2V0TGl0ZXJhbGhhbmRsZU1hcExpdGVyYWxoYW5kbGVGdW5jdGlvbkV4cHJlc3Npb25iZWZvcmVDbG9zdXJlZ2V0U2NvcGVGb3Jhc3NpZ25lZFZhcmlhYmxlc19vbGRWYXJpYWJsZXN2aXNpdFNpZ25hdHVyZWhhbmRsZVRocm93aGFuZGxlRmllbGRJbml0aWFsaXplcmhhbmRsZVJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJoYW5kbGVTdXBlckluaXRpYWxpemVyYmVmb3JlTG9vcGhhbmRsZUZvckluU3RhdGVtZW50aXRlcmF0b3JUeXBlc3RyZWFtSW50ZXJmYWNlVHlwZWl0ZXJhYmxlSW50ZXJmYWNlVHlwZWhhbmRsZVN3aXRjaFN0YXRlbWVudGFmdGVyU3RhdGVtZW50YmVmb3JlQ2FzZWhhc0NvbnRpbnVlU3dpdGNoaGFuZGxlQ2F0Y2hoYW5kbGVUeXBlTGl0ZXJhbGhhbmRsZUxvYWRMaWJyYXJ5aGFuZGxlQXNzZXJ0U3RhdGVtZW50YmVmb3JlQ29uZGl0aW9uaGFuZGxlRnVuY3Rpb25EZWNsYXJhdGlvbmhhbmRsZVBhcmFtZXRlcmhhbmRsZVNpZ25hdHVyZWhhbmRsZVByb2NlZHVyZWhhbmRsZUNvbnN0cnVjdG9yaGFuZGxlRmllbGRoYW5kbGVDb25zdGFudEV4cHJlc3Npb25Bcmd1bWVudFR5cGVzVHlwZUhvbGRlcnRydWVUeXBlc2ZhbHNlVHlwZXNfZ2V0VGV4dHR5cGVzVG9UZXh0dHJ1ZTpmYWxzZTpUeXBlSG9sZGVyKGRlY2xhcmVkPVRhcmdldEluZm90eXBlSG9sZGVyc3R5cGVzT2ZJbnRlcmVzdG5ld1R5cGVIb2xkZXJzYWRkVHlwZUhvbGRlcnR5cGVIb2xkZXJhZGRBc0NvcHluZXdUeXBlc09mSW50ZXJlc3RhZGRUeXBlSG9sZGVyc290aGVyVHJ1ZVR5cGVzb3RoZXJGYWxzZVR5cGVzb3RoZXJUeXBlc09mSW50ZXJlc3RuZXdUcnVlVHlwZXNuZXdGYWxzZVR5cGVzdGhpc1RydWVUeXBlc3RoaXNGYWxzZVR5cGVzVGFyZ2V0SW5mbyhkZWNsYXJlZFR5cGU9dHlwZUhvbGRlcnM9ZGVjbGFyYXRpb25zT2ZJbnRlcmVzdD1UeXBlTWFwX3RhcmdldEluZm9NYXBuZXdJbmZvTWFwdGFyZ2V0SW5mb3R5cGVPZkludGVyZXN0dHlwZUhvbGRlcklmTm9uTnVsbHR5cGVIb2xkZXJJZk51bGxUeXBlTWFwKGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGVpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWRzdWJjbGFzc2VzT2Zmb3JFYWNoU3RyaWN0U3ViY2xhc3NPZmFueVN0cmljdFN1YmNsYXNzT2ZzdWJ0eXBlc09mZm9yRWFjaFN0cmljdFN1YnR5cGVPZmFueVN0cmljdFN1YnR5cGVPZmhhdmVBbnlDb21tb25TdWJ0eXBlc2NsczFxdWVyeTFjbHMycXVlcnkyZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlZ2V0Q2xhc3NTZXRDbGFzc0hpZXJhcmNoeUltcGxjbGFzcy1oaWVyYXJjaHlfY2xhc3NIaWVyYXJjaHlOb2Rlc19jbGFzc1NldHNjbGFzc0hpZXJhcmNoeU5vZGVzY2xhc3NTZXRzY2xhc3NTZXRmb3JFYWNoU3ViY2xhc3NObyBDbGFzc1NldCBmb3IgKTogY2xhc3NIaWVyYXJjaHlOb2RlTm8gQ2xhc3NIaWVyYXJjaHlOb2RlIGZvciBoYXNTdWJ0eXBlaGFzU3ViY2xhc3NzdWJjbGFzc2VzQnlNYXNrc3ViY2xhc3Nlc3N0cmljdGluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnRhbnlTdWJjbGFzc3N1YnR5cGVzQnlNYXNraW5zdGFudGlhdGVkU3VidHlwZUNvdW50Zm9yRWFjaFN1YnR5cGVhbnlTdWJ0eXBlY2xhc3NTZXRBY2xhc3NTZXRCc3VidHlwZXNPZkJzdWJ0eXBlT2ZBaGFzT25seUluc3RhbnRpYXRlZFN1YmNsYXNzZXNJdGVyYXRpb25TdGVwLlNLSVBfU1VCQ0xBU1NFU0l0ZXJhdGlvblN0ZXAuQ09OVElOVUVDbGFzc2VzIGluIHRoZSBjbG9zZWQgd29ybGQgcmVsYXRlZCB0byBJbnN0YW50aWF0ZWQgY2xhc3NlcyBpbiB0aGUgY2xvc2VkIHdvcmxkOgppbnN0YW50aWF0ZWRPbmx5d2l0aFJlc3BlY3RUb19pbmhlcml0ZWRJblRoaXNDbGFzc0NhY2hlTWFwX2luaGVyaXRlZEluU3VidHlwZUNhY2hlTWFwQ2xhc3NIaWVyYXJjaHlOb2RlL0NsYXNzU2V0IG1pc21hdGNoOiBfZW5zdXJlQ2xhc3NTZXRnZXREZWNsYXJhdGlvbl9lbnN1cmVDbGFzc0hpZXJhcmNoeU5vZGVwYXJlbnROb2RlZ2V0SGllcmFyY2h5RGVwdGhzdWJ0eXBlU2V0YWRkU3VidHlwZWFwcGxpZWRNaXhpbmdldEFwcGxpZWRNaXhpbnJlZ2lzdGVyTWl4aW5Vc2VtaXhpblNldF91cGRhdGVTdXBlckNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzaW1wbGVtZW50c0Z1bmN0aW9uX2lzU3VidHlwZU9mQ2xhc3NTZXQgZm9yICBoYXMgbm90IGJlZW4gY29tcHV0ZWQgeWV0LmV4YWN0Q2xhc3NleGFjdENsYXNzTm9kZW1lbWJlckhvbGRpbmdDbGFzc1NldG1peGluQXBwbGljYXRpb25Ob2Rlc3RoaXNDbGFzc2lzSW5oZXJpdGVkSW5UaGlzQ2xhc3NPZl9Jbmhlcml0ZWRJblRoaXNDbGFzc0NhY2hlX2luaGVyaXRpbmdDbGFzc2VzX2NvbXB1dGVJbmhlcml0aW5nSW5UaGlzQ2xhc3NTZXRoYXNMaXZlQ2xhc3NtZW1iZXJIb2xkaW5nQ2xhc3NOb2RldmFsaWRhdGluZ1NldHByb2Nlc3NIaWVyYXJjaHltaXhlck5vZGVpbmhlcml0aW5nQ2xhc3Npbmhlcml0aW5nQ2xhc3NOb2RldGhpc0NsYXNzU2V0X0luaGVyaXRlZEluU3VidHlwZUNhY2hlX2NvbXB1dGVJbmhlcml0aW5nSW5TdWJ0eXBlU2V0c3ViY2xhc3NJbXBsZW1lbnRzX0xpdmVTZXRfcmVzdWx0Q2xhc3NRdWVyeVN1YmNsYXNzUmVzdWx0S2luZEVYQUNUMUVYQUNUMlNVQkNMQVNTMVNVQkNMQVNTMlNVQlRZUEUxU1VCVFlQRTJTdWJjbGFzc1Jlc3VsdFN1YmNsYXNzUmVzdWx0KCxjbGFzc2VzPXR5cGVfZ3JhcGhfaW5mZXJyZXJKQ2xvc3VyZUNhbGxNZXRob2Rkb05vdEVucXVldWVfaW5mZXJyZWREYXRhQnVpbGRlckdyYXBoIGluZmVycmVyY3JlYXRlSW5mZXJyZXJFbmdpbmVGb3JydW5PdmVyQWxsRWxlbWVudHNidWlsZFJlc3VsdHNnZXRDYWxsZXJzT2ZGb3JUZXN0aW5nY3JlYXRlTWVtYmVyUmVzdWx0c3R5cGVJbmZvcm1hdGlvbmRhdGFPZk1lbWJlcmZyZWVWYXJpYWJsZXNmb3JFYWNoTWVtYmVyVHlwZWdldFNjb3BlSW5mb2ZvckVhY2hGcmVlVmFyaWFibGVnZXRJbmZlcnJlZFR5cGVPZk1lbWJlcmNvbXB1dGVJc0NhbGxlZE9uY2Vmb3JFYWNoUGFyYW1ldGVyVHlwZWNoZWNrc0dyb3dhYmxldHlwZXMuY29uc3RhbnRzQ29uc3RhbnRWYWx1ZVR5cGVNYXNrc2NvbXB1dGVUeXBlTWFza0pSZWNvcmRGaWVsZEpzVG9FbGVtZW50TWFwZ2V0SW50ZXJmYWNlVHlwZWdldENhbGxTdHJ1Y3R1cmVnZXRTZWxlY3RvcmdldE1ldGhvZGdldFR5cGVkZWZUeXBlZ2V0U3VwZXJNZW1iZXJnZXROYXRpdmVCZWhhdmlvckZvckpzQ2FsbGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNCdWlsdGluQ2FsbGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGxnZXRJbXBvcnRnZXRDbGFzc0RlZmluaXRpb25nZXREYXJ0VHlwZXNnZXRNZW1iZXJEZWZpbml0aW9uZ2V0Q2xhc3NUeXBlVmFyaWFibGVBY2Nlc3NGb3JNZW1iZXJnZXRTcGFubmFibGVnZXRDb25zdHJ1Y3RvckJvZHlnZXRHZW5lcmF0b3JCb2R5bWFrZVJlY29yZENvbnRhaW5lcmdldFN0YXRpY1R5cGVQcm92aWRlcktlcm5lbFRvVHlwZUluZmVyZW5jZU1hcEtlcm5lbFRvTG9jYWxzTWFwTWVtYmVyS2luZC5yZWd1bGFyTWVtYmVyS2luZC5jb25zdHJ1Y3Rvck1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5TWVtYmVyS2luZC5jbG9zdXJlQ2FsbE1lbWJlcktpbmQuY2xvc3VyZUZpZWxkTWVtYmVyS2luZC5zaWduYXR1cmVNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHlyZWd1bGFyY29uc3RydWN0b3JCb2R5Y2xvc3VyZUZpZWxkZ2VuZXJhdG9yQm9keU1lbWJlckRlZmluaXRpb25VbmV4cGVjdGVkIE1lbWJlcktpbmQgQ2xhc3NLaW5kLnJlZ3VsYXJDbGFzc0tpbmQuY2xvc3VyZUNsYXNzS2luZC5yZWNvcmRSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbnJlZ3VsYXItbWVtYmVyLWRlZmluaXRpb25SZWd1bGFyTWVtYmVyRGVmaW5pdGlvbihraW5kOm5vZGU6LGxvY2F0aW9uOlNwZWNpYWxNZW1iZXJEZWZpbml0aW9uc3BlY2lhbC1tZW1iZXItZGVmaW5pdGlvblNwZWNpYWxNZW1iZXJEZWZpbml0aW9uKGtpbmQ6Q2xhc3NEZWZpbml0aW9uVW5leHBlY3RlZCBDbGFzc0tpbmQgUmVndWxhckNsYXNzRGVmaW5pdGlvbnJlZ3VsYXItY2xhc3MtZGVmaW5pdGlvblJlZ3VsYXJDbGFzc0RlZmluaXRpb24oa2luZDpnZXRGdW5jdGlvbk5vZGVmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckJ5RnVuY3Rpb25Ob2RldXNlTmF0aXZlT3JkZXJpbmdmb3JFYWNoT3JkZXJlZFBhcmFtZXRlclVuZXhwZWN0ZWQgZnVuY3Rpb24gZGVmaW5pdGlvbiBJbmZlcnJlckVuZ2luZWNvbmNyZXRlVHlwZXNhbmFseXplTGlzdEFuZEVucXVldWVhbmFseXplU2V0QW5kRW5xdWV1ZWFuYWx5emVNYXBBbmRFbnF1ZXVlYWRkUmV0dXJuVHlwZUZvck1ldGhvZHVudXNlZGZvckVhY2hFbGVtZW50TWF0Y2hpbmdnZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyaGFzQWxyZWFkeUNvbXB1dGVkVHlwZU9mUGFyYW1ldGVyRGVmYXVsdHNldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXJjaGVja0lmRXhwb3Nlc1RoaXNyZWNvcmRFeHBvc2VzVGhpc2V4cG9zZXNUaGlzcmVjb3JkUmV0dXJuVHlwZXJlY29yZFR5cGVPZkZpZWxkcmVnaXN0ZXJBd2FpdHJlZ2lzdGVyWWllbGRyZWdpc3RlckNhbGxlZENsb3N1cmVpbkxvb3ByZWdpc3RlckNhbGxlZE1lbWJlcmNhbGxlZXJlZ2lzdGVyQ2FsbGVkU2VsZWN0b3Jpc0NvbmRpdGlvbmFsdXBkYXRlUGFyYW1ldGVyQXNzaWdubWVudHNhZGRUb1F1ZXVldXBkYXRlU2VsZWN0b3JJbk1lbWJlcnJldHVyblR5cGVPZk1lbWJlcnR5cGVPZk1lbWJlcnR5cGVPZlBhcmFtZXRlcnR5cGVPZk5hdGl2ZUJlaGF2aW9yY2FuRmllbGRCZVVzZWRGb3JHbG9iYWxPcHRpbWl6YXRpb25zY2FuRnVuY3Rpb25QYXJhbWV0ZXJzQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9uc0luZmVycmVyRW5naW5lSW1wbGRlZmF1bHRUeXBlT2ZQYXJhbWV0ZXJhbmFseXplZEVsZW1lbnRzTUFYX0NIQU5HRV9DT1VOVG92ZXJhbGxSZWZpbmVDb3VudGFkZGVkSW5HcmFwaGdlbmVyYXRpdmVDb25zdHJ1Y3RvcnNFeHBvc2luZ1RoaXN1cGRhdGVTaWRlRWZmZWN0c3NldEFsbFNpZGVFZmZlY3RzQW5kRGVwZW5kc09uU29tZXRoaW5nbWFwcGVkVHlwZWNvbXB1dGVMVUJDYWxsVHlwZS5hY2Nlc3NzZXRUeXBlTWFza0NhbGxUeXBlLmZvckluc2V0SXRlcmF0b3JUeXBlTWFza3NldEN1cnJlbnRUeXBlTWFza3NldE1vdmVOZXh0VHlwZU1hc2thbmFseXplZHN1Y2NlZWRlZGJhaWxlZE91dG9yaWdpbmFsVHlwZWNhbGxzR3Jvd2FibGVNZXRob2Rhc3NpZ25tZW50c2FkZEFzc2lnbm1lbnRrZXlBc3NpZ25tZW50c2FkZEVudHJ5QXNzaWdubWVudHZhbHVlQXNzaWdubWVudHNtYXBBc3NpZ25tZW50c2FkZE1hcEFzc2lnbm1lbnRtYXJrQXNJbmZlcnJlZHR5cGVJbmZvTWFwYW5hbHl6ZUFsbEVsZW1lbnRzYmVmb3JlQW5hbHlzaXNidWlsZFdvcmtRdWV1ZXJlZmluZWFsbG9jYXRlZFNldHNhbGxvY2F0ZWRNYXBzYmFpbGVkT3V0T25hbGxvY2F0ZWRDbG9zdXJlc2NvbnRpbnVlQW5hbHl6aW5ndHJhY2VkIGNsb3N1cmUgIChiYWlsKWdpdmVVcGNsZWFyQXNzaWdubWVudHNtYXliZVJlc3VtZXRyYWNlZFR5cGVtaWdodEJlUGFzc2VkVG9GdW5jdGlvbkFwcGx5Y2FsbGVkRWxlbWVudGxvb2t1cENhbGxNZXRob2RjYWxsZWVzVW5leHBlY3RlZCBjbG9zdXJlIGFsbG9jYXRpb24gaW5mbyBiZWZvcmVUcmFjaW5nc2VlblR5cGVzX2luZm9hdCBhZnRlciByZWZpbmVDb3VudGdldEluZmVycmVkU2lnbmF0dXJlaGFzQ2xvc3VyZUNhbGxUYXJnZXRzPENsb3N1cmUuY2FsbD5jb25jcmV0ZVRhcmdldHNnZXRJbmZlcnJlZFNpZ25hdHVyZU9mTWV0aG9kIGZvciBzb21lIHVua25vd24ga2luZCBvZiBjbG9zdXJlIDo6IGFmdGVyQW5hbHlzaXNJbmZlcnJlZCAgdHlwZXMucHJvY2Vzc0xvb3BJbmZvcm1hdGlvbkFkZGVkICBlbGVtZW50cyBpbiBpbmZlcmVuY2luZyBncmFwaC53aXRoTWVtYmVyY29tcHV0ZU1lbWJlckJvZHlVbmV4cGVjdGVkIG1lbWJlciBkZWZpbml0aW9uOiBjb21wdXRlTWVtYmVyVHlwZUluZm9ybWF0aW9uZnVuY3Rpb25Db25zdGFudGFsbG9jYXRlQ2xvc3VyZXJlZmluZWRUeXBlYWxsb2NhdGVkVHlwZXNpc0ZpZWxkSW5pdGlhbGl6ZXJQb3RlbnRpYWxseU51bGxoYXNDYWxsVHlwZWFsbG9jYXRlZENhbGxzb2xkVHlwZWFiYW5kb25JbmZlcmVuY2luZ0FOT01BTFkgV0FSTklORzogbWF4IHJlZmluZW1lbnQgcmVhY2hlZCBmb3IgaGFzU3RhYmxlVHlwZXN0YWJpbGl6ZW9yZGVyZWRUeXBlSW5mb3JtYXRpb25zcmVtb3ZlQXNzaWdubWVudGNsb3N1cml6ZWRDb3VudHRhZ0FzVGVhck9mZkNsb3N1cmVQYXJhbWV0ZXJObyBkZWZhdWx0IHR5cGUgZm9yIGFkZFVzZXJzT2ZhZGRUb0dyYXBobWVtYmVyVHlwZUluZm9ybWF0aW9uc3BhcmFtZXRlclR5cGVJbmZvcm1hdGlvbnNjYWxsZXJzRm9yVGVzdGluZ2lzRmllbGRVc2VkQnlCYWNrZW5kaXNGdW5jdGlvblVzZWRCeUJhY2tlbmRLZXJuZWxUeXBlU3lzdGVtU3RyYXRlZ3ljaGVja0NsYXNzRW50aXR5Y2hlY2tNYXBOb2RlY2hlY2tTZXROb2RlY2hlY2tMaXN0Tm9kZWNoZWNrTG9vcFBoaU5vZGVjaGVja1BoaU5vZGVjcmVhdGVQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25nZXRDbG9zdXJlSW5mb21lbWJlclR5cGVJbmZvcm1hdGlvbmNyZWF0ZU1lbWJlclR5cGVJbmZvcm1hdGlvbktlcm5lbEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YWdsb2JhbC10eXBlLWluZmVyZW5jZS1lbGVtZW50LWRhdGFfc2VuZE1hcF9pdGVyYXRvck1hcF9jdXJyZW50TWFwX21vdmVOZXh0TWFwc2VuZE1hcGl0ZXJhdG9yTWFwY3VycmVudE1hcG1vdmVOZXh0TWFwX21hcHNUb051bGxkYXJ0MmpzLnNvdXJjZV9pbmZvcm1hdGlvbi5wb3NpdGlvblBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25zb3VyY2UtaW5mb3JtYXRpb25fY29tcHV0ZVRleHR1cmlUZXh0LVtBYnN0cmFjdFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25TdHJhdGVneVNvdXJjZU1hcHBlZE1hcmtlckNvZGVQb3NpdGlvbmdldFBvc2l0aW9uQ29kZVBvc2l0aW9uS2luZC5TVEFSVENvZGVQb3NpdGlvbktpbmQuRU5EQ29kZVBvc2l0aW9uS2luZC5DTE9TSU5HQ29kZVBvc2l0aW9uKHN0YXJ0PWVuZD0sY2xvc2luZz1Db2RlUG9zaXRpb25NYXBDb2RlUG9zaXRpb25SZWNvcmRlcl9jb2RlUG9zaXRpb25NYXByZWdpc3RlclBvc2l0aW9uc3JlZ2lzdGVyQ29kZVBvc2l0aW9uY29kZVBvc2l0aW9uU291cmNlUG9zaXRpb25LaW5kU291cmNlUG9zaXRpb25LaW5kLlNUQVJUU291cmNlUG9zaXRpb25LaW5kLklOTkVSU1RBUlRJTk5FUkNvZGVQb3NpdGlvbktpbmRDTE9TSU5HRU5EUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvcnYyY29kZVBvc2l0aW9uUmVjb3JkZXJjb2RlUG9zaXRpb25NYXB0cmFjZUxpc3RlbmVyc2lubGluaW5nTGlzdGVuZXJjb3ZlcmFnZXNvdXJjZU1hcHBlcmNyZWF0ZVNvdXJjZU1hcHBlck5vZGVTb3VyY2VJbmZvcm1hdGlvbmdldFNvdXJjZUluZm9ybWF0aW9uTm9kZVRvU291cmNlSW5mb3JtYXRpb25NaXhpbmNvbXB1dGVTb3VyY2VJbmZvcm1hdGlvbl9JbmxpbmluZ1RyYWNlTGlzdGVuZXImVHJhY2VMaXN0ZW5lciZOb2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluSW5saW5pbmdUcmFjZUxpc3RlbmVyX2ZyYW1lc29uU3RlcFN0ZXBLaW5kLkZVTl9FWElUbGFzdElubGluaW5nQ29udGV4dG5ld0lubGluaW5nQ29udGV4dHBvcENvdW50cHVzaGVzcmVnaXN0ZXJQb3ByZWdpc3RlclB1c2hfUG9zaXRpb25UcmFjZUxpc3RlbmVyJlRyYWNlTGlzdGVuZXImTm9kZVRvU291cmNlSW5mb3JtYXRpb25NaXhpblBvc2l0aW9uVHJhY2VMaXN0ZW5lclN0ZXBLaW5kLk5PX0lORk9yZWdpc3RlclBvc2l0aW9uc291cmNlUG9zaXRpb25LaW5kU3RlcEtpbmQuRlVOX0VOVFJZU3RlcEtpbmQuQ0FMTGNhbGxQb3NpdGlvblN0ZXBLaW5kLkFDQ0VTU1N0ZXBLaW5kLk5FV1N0ZXBLaW5kLlJFVFVSTlN0ZXBLaW5kLkJSRUFLU3RlcEtpbmQuQ09OVElOVUVTdGVwS2luZC5USFJPV1N0ZXBLaW5kLkVYUFJFU1NJT05fU1RBVEVNRU5UU3RlcEtpbmQuSUZfQ09ORElUSU9OU3RlcEtpbmQuRk9SX0lOSVRJQUxJWkVSU3RlcEtpbmQuRk9SX0NPTkRJVElPTlN0ZXBLaW5kLkZPUl9VUERBVEVTdGVwS2luZC5XSElMRV9DT05ESVRJT05TdGVwS2luZC5ET19DT05ESVRJT05TdGVwS2luZC5TV0lUQ0hfRVhQUkVTU0lPTkNhbGxQb3NpdGlvbmNvZGVQb3NpdGlvbktpbmRnZXRTZW1hbnRpY1Bvc2l0aW9uRm9yQ2FsbHB1cmVBY2Nlc3N0YXJnZXRBY2Nlc3NVbmV4cGVjdGVkIHByb3BlcnR5IGFjY2VzcyBPZmZzZXRzdGF0ZW1lbnRPZmZzZXRzdWJleHByZXNzaW9uT2Zmc2V0bGVmdFRvUmlnaHRPZmZzZXRPZmZzZXRbc3RhdGVtZW50T2Zmc2V0PWxlZnRUb1JpZ2h0T2Zmc2V0PXN1YmV4cHJlc3Npb25PZmZzZXQ9QnJhbmNoS2luZEJyYW5jaEtpbmQuQ09ORElUSU9OQnJhbmNoS2luZC5MT09QQnJhbmNoS2luZC5DQVRDSEJyYW5jaEtpbmQuRklOQUxMWUJyYW5jaEtpbmQuQ0FTRUNPTkRJVElPTkxPT1BTdGVwS2luZEZVTl9FTlRSWUZVTl9FWElUQUNDRVNTRVhQUkVTU0lPTl9TVEFURU1FTlRJRl9DT05ESVRJT05GT1JfSU5JVElBTElaRVJGT1JfQ09ORElUSU9ORk9SX1VQREFURVdISUxFX0NPTkRJVElPTkRPX0NPTkRJVElPTlNXSVRDSF9FWFBSRVNTSU9OTk9fSU5GT1RyYWNlTGlzdGVuZXJvblN0YXJ0b25FbmRwdXNoQnJhbmNocG9wQnJhbmNoSmF2YVNjcmlwdFRyYWNlcmNvZGVQb3NpdGlvbnNsaXN0ZW5lcnNvZmZzZXRQb3NpdGlvbmFjdGl2ZW5vdGlmeVN0YXJ0bm90aWZ5RW5kbm90aWZ5UHVzaEJyYW5jaG5vdGlmeVBvcEJyYW5jaG5vdGlmeVN0ZXBnZXRTeW50YXhPZmZzZXRnZXRPZmZzZXRGb3JOb2RlYnJhbmNobm9kZUxpc3RfaGFuZGxlRnVuY3Rpb25hY3RpdmVCZWZvcmVlbnRyeU9mZnNldGV4aXRPZmZzZXR2aXNpdFN1YmV4cHJlc3Npb25jb2RlT2Zmc2V0b2xkU3RlcHNvbGRQb3NpdGlvbnBvc2l0aW9uTm9kZWNhbGxPZmZzZXRDb3ZlcmFnZV9ub2Rlc1dpdGhJbmZvX25vZGVzV2l0aEluZm9Db3VudF9ub2Rlc1dpdGhvdXRJbmZvX25vZGVzV2l0aG91dEluZm9Db3VudF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGVfbm9kZXNXaXRob3V0T2Zmc2V0X25vZGVzV2l0aG91dE9mZnNldENvdW50cmVnaXN0ZXJOb2RlV2l0aEluZm9yZWdpc3Rlck5vZGVXaXRob3V0SW5mb3JlZ2lzdGVyTm9kZXNXaXRob3V0T2Zmc2V0Y29sbGFwc2VnZXRDb3ZlcmFnZVJlcG9ydCUpIG5vZGVzIHdpdGggaW5mby5ObyBub2Rlcy4gbm9kZSB3aXRob3V0IG9mZnNldC4KTm9kZXMgd2l0aG91dCBpbmZvICgpIGJ5IHJ1bnRpbWUgdHlwZTpfQ292ZXJhZ2VMaXN0ZW5lciZUcmFjZUxpc3RlbmVyJk5vZGVUb1NvdXJjZUluZm9ybWF0aW9uTWl4aW5Db3ZlcmFnZUxpc3RlbmVyQ29kZVBvc2l0aW9uQ292ZXJhZ2VnZXRTb3VyY2VMb2NhdGlvbmRhcnQyanMuanNfbW9kZWwuZWxlbWVudHNDbGFzc0hpZXJhcmNoeU5vZGVzTWFwS2V5SkxpYnJhcnlKQ2xhc3NLaW5kSkNsYXNzS2luZC5ub2RlSkNsYXNzS2luZC5jbG9zdXJlSkNsYXNzS2luZC5yZWNvcmRfSkNsYXNzJkluZGV4ZWRDbGFzcyZDbGFzc0hpZXJhcmNoeU5vZGVzTWFwS2V5X2NsYXNzSGllcmFyY2h5Tm9kZUpDbGFzc0pUeXBlZGVmSk1lbWJlcktpbmRKTWVtYmVyS2luZC5nZW5lcmF0aXZlQ29uc3RydWN0b3JKTWVtYmVyS2luZC5mYWN0b3J5Q29uc3RydWN0b3JKTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHlKTWVtYmVyS2luZC5maWVsZEpNZW1iZXJLaW5kLmdldHRlckpNZW1iZXJLaW5kLnNldHRlckpNZW1iZXJLaW5kLm1ldGhvZEpNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZEpNZW1iZXJLaW5kLmNsb3N1cmVDYWxsTWV0aG9kSk1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keUpNZW1iZXJLaW5kLnNpZ25hdHVyZU1ldGhvZEpNZW1iZXJLaW5kLnJlY29yZEZpZWxkZ2VuZXJhdGl2ZUNvbnN0cnVjdG9yZmFjdG9yeUNvbnN0cnVjdG9yY2xvc3VyZUNhbGxNZXRob2RzaWduYXR1cmVNZXRob2RyZWNvcmRGaWVsZEpNZW1iZXJVbmV4cGVjdGVkIEpNZW1iZXJLaW5kIEpGdW5jdGlvbkpDb25zdHJ1Y3RvckpHZW5lcmF0aXZlQ29uc3RydWN0b3JnZW5lcmF0aXZlLWNvbnN0cnVjdG9ySkZhY3RvcnlDb25zdHJ1Y3RvcmZhY3RvcnktY29uc3RydWN0b3JKQ29uc3RydWN0b3JCb2R5Y29uc3RydWN0b3ItYm9keWNvbnN0cnVjdG9yX2JvZHlKTWV0aG9kZ2VuZXJhdG9yLWJvZHlnZW5lcmF0b3JfYm9keUpHZXR0ZXJKU2V0dGVyY2xvc3VyZS1jYWxsLW1ldGhvZGNsb3N1cmVfY2FsbEpTaWduYXR1cmVNZXRob2RzaWduYXR1cmUtbWV0aG9kSlR5cGVWYXJpYWJsZUtpbmRKVHlwZVZhcmlhYmxlS2luZC5jbHNKVHlwZVZhcmlhYmxlS2luZC5tZW1iZXJKVHlwZVZhcmlhYmxlS2luZC50eXBlZGVmSlR5cGVWYXJpYWJsZUtpbmQubG9jYWxKVHlwZVZhcmlhYmxldHlwZS12YXJpYWJsZVVuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZSBkZWNsYXJlciBqc0VsZW1lbnRQcmVmaXhIVHJhY2VyVHJhY2VydHJhY2VBY3RpdmV0cmFjZUZpbHRlcmNmZ2lzRW5hYmxlZHRyYWNlQ29tcGlsYXRpb25jb21waWxhdGlvbnByaW50UHJvcGVydHltaWxsaXNlY29uZHNTaW5jZUVwb2NodHJhY2VHcmFwaGlyT2JqZWN0VHJhY2VyVXRpbF9pbmR0YWdOYW1lYmVnaW5fZW5kX2FkZEluZGVudHByaW50RW1wdHlQcm9wZXJ0eWZvcm1hdFBydHlpbnZhbGlkIHByb3BlcnR5IHR5cGU6IFRSQUNFX0ZJTFRFUl9QQVRURVJOX0ZST01fRU5WSVJPTk1FTlRUUkFDRV9GSUxURVJfUEFUVEVSTl9GT1JfVEVTVFRSQUNFX0ZJTFRFUl9QQVRURVJOU3NhQ29kZUdlbmVyYXRvckNoZWNrZWRNb2RlSGVscGVyZ2V0U3RhdGljVXNlZ2VuZXJhdGVBZGRpdGlvbmFsQXJndW1lbnRzUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcmFkZGl0aW9uYWxBcmd1bWVudHF1b3RlTmFtZVR5cGVWYXJpYWJsZUNoZWNrZWRNb2RlSGVscGVyRnVuY3Rpb25UeXBlUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlckZ1dHVyZU9yUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlclN1YnR5cGVDaGVja2VkTW9kZUhlbHBlckNoZWNrZWRNb2RlSGVscGVyc2hlbHBlcnNzdHJpbmdUeXBlQ2FzdHN0cmluZ1R5cGVDaGVja2RvdWJsZVR5cGVDYXN0ZG91YmxlVHlwZUNoZWNrbnVtVHlwZUNhc3RudW1UeXBlQ2hlY2tib29sVHlwZUNhc3Rib29sVHlwZUNoZWNraW50VHlwZUNhc3RpbnRUeXBlQ2hlY2tudW1iZXJPclN0cmluZ1N1cGVyTmF0aXZlVHlwZUNhc3RudW1iZXJPclN0cmluZ1N1cGVyTmF0aXZlVHlwZUNoZWNrbnVtYmVyT3JTdHJpbmdTdXBlclR5cGVDYXN0bnVtYmVyT3JTdHJpbmdTdXBlclR5cGVDaGVja3N0cmluZ1N1cGVyTmF0aXZlVHlwZUNhc3RzdHJpbmdTdXBlck5hdGl2ZVR5cGVDaGVja3N0cmluZ1N1cGVyVHlwZUNhc3RzdHJpbmdTdXBlclR5cGVDaGVja2xpc3RUeXBlQ2FzdGxpc3RUeXBlQ2hlY2tsaXN0U3VwZXJOYXRpdmVUeXBlQ2FzdGxpc3RTdXBlck5hdGl2ZVR5cGVDaGVja2xpc3RTdXBlclR5cGVDYXN0bGlzdFN1cGVyVHlwZUNoZWNraW50ZXJjZXB0ZWRUeXBlQ2FzdGludGVyY2VwdGVkVHlwZUNoZWNrcHJvcGVydHlUeXBlQ2FzdHByb3BlcnR5VHlwZUNoZWNrZnVuY3Rpb25UeXBlQ2FzdGZ1bmN0aW9uVHlwZUNoZWNrZnV0dXJlT3JDYXN0ZnV0dXJlT3JDaGVja2NoZWNrZWRNb2RlSGVscGVyQnlOYW1lZ2V0Q2hlY2tlZE1vZGVIZWxwZXJ0eXBlQ2FzdGdldENoZWNrZWRNb2RlSGVscGVySW50ZXJuYWxuYXRpdmVDaGVja09ubHlnZXROYXRpdmVDaGVja2VkTW9kZUhlbHBlcmdldENoZWNrZWRNb2RlSGVscGVyTmFtZUludGVybmFsVW5leHBlY3RlZCB0eXBlOiBuYXRpdmVDaGVja1R5cGVDYXN0VHlwZUNoZWNrbnVtYmVyT3JTdHJpbmdTdXBlck5hdGl2ZW51bWJlck9yU3RyaW5nU3VwZXJzdHJpbmdTdXBlck5hdGl2ZXN0cmluZ1N1cGVybGlzdFN1cGVyTmF0aXZlbGlzdFN1cGVyanNfYmFja2VuZC5ydW50aW1lX3R5cGVzT25WYXJpYWJsZUNhbGxiYWNrU2hvdWxkRW5jb2RlVHlwZWRlZkNhbGxiYWNrUnVudGltZVR5cGVzQ2hlY2tzcmVxdWlyZWRDaGVja3NUcml2aWFsVHlwZXNDaGVja3NfdHlwZUNoZWNrc19hbGxDbGFzc2VzUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlcmNvbXB1dGVSZXF1aXJlZENoZWNrc1RyaXZpYWxSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyX3N1YnN0aXR1dGlvbnNjbGFzc1VzZU1hcGNsYXNzVXNlZGlyZWN0SW5zdGFuY2VjaGVja2VkSW5zdGFuY2VjaGVja2VkVHlwZUFyZ3VtZW50X3JlcXVpcmVkQ2hlY2tzX2NvbXB1dGVDaGVja3Njb21wdXRlQ2hlY2tlZENsYXNzZXNpbXBsaWNpdElzQ2hlY2tzY29tcHV0ZUNoZWNrZWRGdW5jdGlvbnNSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zTWl4aW5fdHlwZXNfcnRpTmVlZGhhbmRsZWRlbXB0eVVzZWNvbXB1dGVDaGVja3NjaGVja3NzdXBlckNoZWNrc2V4dGVuZHNTdXBlckNsYXNzVHJpdmlhbGx5aXNUcml2aWFsU3Vic3RpdHV0aW9uY29tcHV0ZVN1YnN0aXR1dGlvbm5lZWRzSXNpbmhlcml0ZWRDbGFzc2VzcHJvY2Vzc1N1cGVydHlwZWNoZWNrZWRDbGFzc2NoZWNrZWRDbGFzc1VzZWluaGVyaXRzRnJvbUNoZWNrZWRDbGFzc25lZWRzVHlwZUFyZ3VtZW50c0ZvckNoZWNrZWRDbGFzc2NsYXNzTmVlZHNUeXBlQXJndW1lbnRzaXNDaGVja2VkaW1wbGVtZW50c0NoZWNrZWRUcml2aWFsbHlpc0NoZWNrZWRHZW5lcmljY2hlY2tGcm9tU3VwZXJDbGFzc2dldENsYXNzZXNVc2VkSW5TdWJzdGl0dXRpb25zaW5zdGFudGlhdGVkY2xhc3NDaGVja3Njb2xsZWN0QWxsZ2V0U3Vic3RpdHV0aW9uYWx3YXlzR2VuZXJhdGVGdW5jdGlvblRyaXZpYWxSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zUnVudGltZVR5cGVzRW5jb2RlcmdldFNpZ25hdHVyZUVuY29kaW5ndGhpc190ZW1wbGF0ZUZvcklzRnVuY3Rpb25UeXBldGVtcGxhdGVGb3JJc0Z1dHVyZU9yVHlwZXRlbXBsYXRlRm9ySXNWb2lkVHlwZXRlbXBsYXRlRm9ySXNEeW5hbWljVHlwZXRlbXBsYXRlRm9ySXNKc0ludGVyb3BUeXBlQXJndW1lbnRvblZhcmlhYmxlc2hvdWxkRW5jb2RlVHlwZWRlZmdldEpzSW50ZXJvcFR5cGVBcmd1bWVudHNfUnVudGltZVR5cGVzQ2hlY2tzX3R5cGVMaXRlcmFsc19SdW50aW1lVHlwZXNJbXBsJk9iamVjdCZSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zTWl4aW5SdW50aW1lVHlwZXNJbXBsY2hlY2tlZFR5cGVBcmd1bWVudHNjaGVja2VkQm91bmRzY2FjaGVkUmVxdWlyZWRDaGVja3NjbGFzc1VzZU1hcEZvclRlc3Rpbmd0eXBlVmFyaWFibGVUZXN0c2ZvclJ0aU5lZWRzZXhwbGljaXRJc0NoZWNrc2NoZWNrZWRGdW5jdGlvblR5cGVzdHlwZUxpdGVyYWxzbGl2ZVR5cGVWaXNpdG9yb25DbGFzc1R5cGVWaXNpdG9yU3RhdGUuY292YXJpYW50VHlwZUFyZ3VtZW50VHlwZVZpc2l0b3JTdGF0ZS5jb250cmF2YXJpYW50VHlwZUFyZ3VtZW50VHlwZVZpc2l0b3JTdGF0ZS50eXBlTGl0ZXJhbFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0dGVzdGVkVHlwZVZpc2l0b3J2aXNpdGVkU3VwZXJDbGFzc2VzcHJvY2Vzc01ldGhvZFR5cGVBcmd1bWVudHNpc0Z1bmN0aW9uQ2hlY2tlZHByb2Nlc3NDaGVja2VkVHlwZWxpdmVDbGFzc2VzbWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzUnVudGltZVR5cGVzRW5jb2RlckltcGxfcmVwcmVzZW50YXRpb25HZW5lcmF0b3JnZXRUeXBlVmFyaWFibGVOYW1lZ2V0VHlwZUVuY29kaW5nZW5jb2RpbmdmdW5jdGlvbigjKSB7IHJldHVybiAjIH1jb250ZXh0TmFtZWZ1bmN0aW9uICgpIHsgcmV0dXJuICMoIywgIywgIyk7IH1mdW5jcmV0b3B0VHlwZVJlcHJlc2VudGF0aW9uR2VuZXJhdG9yX3J0aVRhZ3N0eXBlZGVmQmluZGluZ3NlbmNvZGVUeXBlZGVmcmVwcmVzZW50YXRpb25nZXRKYXZhU2NyaXB0Q2xhc3NOYW1lZ2V0RHluYW1pY1ZhbHVlZ2V0Vm9pZFZhbHVlLTFnZXRKc0ludGVyb3BUeXBlQXJndW1lbnRWYWx1ZS0ybnVtYmVyZXhwcmVzc2lvblRlbXBsYXRlRm9yJyBpbiAjIyA9PT0gLTEjID09IG51bGwjID09PSAtMmFkZFByb3BlcnR5c2hvdWxkRW5jb2RldW5hbGlhc2VkVHlwZW9sZEJpbmRpbmdzZW5jb2RlZFR5cGVkZWZUeXBlQ2hlY2tNYXBwaW5naG9sZGVyQXJndW1lbnRDb2xsZWN0b3Jjb2xsZWN0aXNUeXBlQXJndW1lbnRGdW5jdGlvbkFyZ3VtZW50Q29sbGVjdG9yVHlwZVZpc2l0b3JTdGF0ZWNvdmFyaWFudFR5cGVBcmd1bWVudGNvbnRyYXZhcmlhbnRUeXBlQXJndW1lbnRUeXBlVmlzaXRvcl92aXNpdGVkRnVuY3Rpb25UeXBlVmFyaWFibGVzb25UeXBlVmFyaWFibGVvbkZ1bmN0aW9uVHlwZWNvdmFyaWFudEFyZ3VtZW50VW5leHBlY3RlZCBUeXBlVmlzaXRvclN0YXRlIGNvbnRyYXZhcmlhbnRBcmd1bWVudHJ0aVZhbHVlQ2xhc3NVc2UoX2NvbXB1dGVGdW5jdGlvblR5cGVzaWduYXR1cmVGdW5jdGlvbmNhbGxGdW5jdGlvbmpzX2JhY2tlbmQucnVudGltZV90eXBlc19jb2RlZ2VuQ2xhc3NGdW5jdGlvblR5cGVfbmV4dEhhc2hUeXBlQ2hlY2soY2xzPSxuZWVkc0lzPSxzdWJzdGl0dXRpb249Q2xhc3NDaGVja3NDbGFzc0NoZWNrcyhUeXBlQ2hlY2tzdHJpdmlhbGpzSW50ZXJvcFN1YnN0aXR1dGlvbihpc1RyaXZpYWw9aXNGdW5jdGlvbj0saXNKc0ludGVyb3A9LGFyZ3VtZW50cz1wYXJhbWV0ZXJzPVJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnNoYXNUeXBlQXJndW1lbnRzanNfYmFja2VuZC5ydW50aW1lX3R5cGVzX25ld1JlY2lwZUVuY29kaW5nZW5jb2RlUmVjaXBlZW52aXJvbm1lbnRTdHJ1Y3R1cmVlbmNvZGVSZWNpcGVXaXRoVmFyaWFibGVzUmVwbGFjZUJ5QW55ZW5jb2RlRGlyZWN0U3VwZXJ0eXBlUmVjaXBlZGVjbGFyaW5nVHlwZXN1cGVydHlwZUFyZ3VtZW50ZXZhbHVhdGVSZWNpcGVlbmNvZGVTaWduYXR1cmVfcnRpU3Vic3RpdHV0aW9uc2hhY2tUeXBlVmFyaWFibGVzVG9BbnljbGFzc1R5cGVpbmRleFR5cGVWYXJpYWJsZXNPbkRlY2xhcmluZ0NsYXNzUmVjaXBlRW5jb2RlckltcGwuZ2V0U2lnbmF0dXJlRW5jb2RpbmdfUmVjaXBlR2VuZXJhdG9yX2VuY29kZXJfZW52aXJvbm1lbnRfcmVjaXBlX2ZyYWdtZW50c19jb2Rlc19maW5pc2hFbmNvZGluZ19mbHVzaENvZGVzX3N0YXJ0RnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZV9lbWl0Q29kZV9lbWl0SW50ZWdlcl9lbWl0U3RyaW5nVW5lc2NhcGVkX2VtaXROYW1lX2VtaXRFeHRlbnNpb25PcF9pbmRleEludG9DbGFzc1R5cGVWYXJpYWJsZXNlbWl0TmFtZWRHcm91cF9SdWxlc2V0RW50cnlfdGFyZ2V0VHlwZV9zdXBlcnR5cGVzUnVsZXNldF9lbnRyaWVzdGFyZ2V0VHlwZVJ1bGVzZXRFbmNvZGVyX3JlY2lwZUVuY29kZXJfbGVmdEJyYWNlc3RyaW5nUGFydF9yaWdodEJyYWNlX2xlZnRCcmFja2V0X3JpZ2h0QnJhY2tldF9jb2xvbl9jb21tYV9xdW90ZV9pc09iamVjdF9wcmVwcm9jZXNzRW50cnlfcHJlcHJvY2Vzc1J1bGVzZXRydWxlc2V0ZW5jb2RlUnVsZXNldF9lbmNvZGVSdWxlc2V0Y29uY2F0ZW5hdGVTdHJpbmdzam9pbkxpdGVyYWxzX2VuY29kZUVudHJ5X2VuY29kZVN1cGVydHlwZW1hcEVudHJ5X2VuY29kZVR5cGVWYXJpYWJsZV9lbmNvZGVTdXBlcnR5cGVBcmd1bWVudHVuaXZlcnNlLnNpZGVfZWZmZWN0c3NpZGUtZWZmZWN0c0ZMQUdfQ0hBTkdFU19JTkRFWEZMQUdfQ0hBTkdFU19JTlNUQU5DRV9QUk9QRVJUWUZMQUdfQ0hBTkdFU19TVEFUSUNfUFJPUEVSVFlGTEFHX0NIQU5HRVNfQ09VTlRGTEFHX0RFUEVORFNfT05fSU5ERVhfU1RPUkVGTEFHX0RFUEVORFNfT05fSU5TVEFOQ0VfUFJPUEVSVFlfU1RPUkVGTEFHX0RFUEVORFNfT05fU1RBVElDX1BST1BFUlRZX1NUT1JFRkxBR19ERVBFTkRTX09OX0NPVU5UX2ZsYWdzZnJvbUZsYWdzU2lkZUVmZmVjdHMuaGFzaENvZGVfZ2V0RmxhZ19zZXRGbGFnX2NsZWFyRmxhZ2dldENoYW5nZXNGbGFnc2dldERlcGVuZHNPbkZsYWdzZGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZWNoYW5nZXNTdGF0aWNQcm9wZXJ0eWRlcGVuZHNPbkluZGV4U3RvcmVjaGFuZ2VzSW5kZXhkZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmVjaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eWNvbXB1dGVEZXBlbmRzT25GbGFnc2RlcGVuZHNPbmRlcGVuZHNGbGFnc1NpZGVFZmZlY3RzKHJlYWRzIG5vdGhpbmcgYW55dGhpbmcgaW5kZXggZmllbGQgc3RhdGljOyB3cml0ZXNTaWRlRWZmZWN0c0J1aWxkZXJfbWVtYmVyX2ZyZWVfZGVwZW5kaW5nZnJlZVNpZGVFZmZlY3RzQnVpbGRlcihtZW1iZXI9ZnJlZT1zaWRlRWZmZWN0cz1kZXBlbmRpbmc9ZGFydDJqcy5zb3VyY2VfaW5mb3JtYXRpb24ua2VybmVsS2VybmVsU291cmNlSW5mb3JtYXRpb25CdWlsZGVyd2l0aENvbnRleHRfZ2V0U291cmNlTG9jYXRpb25ObyBsb2NhdGlvbiBmb3VuZCBmb3IgX2J1aWxkRnVuY3Rpb25fYnVpbGRUcmVlTm9kZV9idWlsZEZ1bmN0aW9uRW5kX2J1aWxkRnVuY3Rpb25FeGl0X2J1aWxkQm9keV9idWlsZE1lbWJlckJvZHlfYnVpbGRNZW1iZXJFeGl0bmV3Q29udGV4dEtlcm5lbFNvdXJjZUxvY2F0aW9uY29tcHV0ZUtlcm5lbEVsZW1lbnROYW1lRm9yU291cmNlTWFwczxhbm9ueW1vdXMgZnVuY3Rpb24+Ljxhbm9ueW1vdXMgZnVuY3Rpb24+ZW5jbG9zaW5nTWVtYmVyZW5jbG9zaW5nTWVtYmVyTmFtZWpzLnNvdXJjZV9tYXBwaW5nSmF2YVNjcmlwdFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3lzb3VyY2VNYXBwZXJQcm92aWRlclNvdXJjZUluZm9ybWF0aW9uUmVhZGVyQ29kZVBvc2l0aW9uTGlzdGVuZXJTb3VyY2VNYXBwZXJQcm92aWRlclNvdXJjZU1hcHBlclByb3ZpZGVySW1wbFNvdXJjZU1hcHBlclNvdXJjZUxvY2F0aW9uc01hcHBlclNvdXJjZUluZm9ybWF0aW9uUHJvY2Vzc29yZGFydDJqcy5qc19oZWxwZXJzLmltcGFjdEJhY2tlbmRGZWF0dXJlQmFja2VuZEZlYXR1cmUubmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZ0JhY2tlbmRGZWF0dXJlLm5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5bmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZ25lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5QmFja2VuZEltcGFjdGdsb2JhbFVzZXNnbG9iYWxDbGFzc2Vzb3RoZXJJbXBhY3RzX2ZlYXR1cmVzZmVhdHVyZXNjcmVhdGVJbXBhY3R3b3JsZEltcGFjdEJ1aWxkZXJvdGhlckltcGFjdEJhY2tlbmRJbXBhY3RzX25ld1J0aV9nZXRSdW50aW1lVHlwZUFyZ3VtZW50X2NvbXB1dGVTaWduYXR1cmVfbWFpbldpdGhBcmd1bWVudHNfYXN5bmNCb2R5X3N5bmNTdGFyQm9keV9hc3luY1N0YXJCb2R5X3R5cGVWYXJpYWJsZUJvdW5kQ2hlY2tfYWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25fZmFsbFRocm91Z2hFcnJvcl9hc0NoZWNrX3Rocm93Tm9TdWNoTWV0aG9kX3N0cmluZ1ZhbHVlc19udW1WYWx1ZXNfYm9vbFZhbHVlc19udWxsVmFsdWVfbGlzdFZhbHVlc190aHJvd1J1bnRpbWVFcnJvcl90aHJvd1Vuc3VwcG9ydGVkRXJyb3Jfc3VwZXJOb1N1Y2hNZXRob2RfY29uc3RhbnRNYXBMaXRlcmFsX2NvbnN0YW50U2V0TGl0ZXJhbF9zeW1ib2xDb25zdHJ1Y3Rvcl9jb25zdFN5bWJvbF9hc3NlcnRXaXRob3V0TWVzc2FnZV9hc3NlcnRXaXRoTWVzc2FnZV9hc3luY0ZvckluX3N0cmluZ0ludGVycG9sYXRpb25fc3RyaW5nSnV4dGFwb3NpdGlvbl9jYXRjaFN0YXRlbWVudF90aHJvd0V4cHJlc3Npb25fbGF6eUZpZWxkX3R5cGVMaXRlcmFsX3N0YWNrVHJhY2VJbkNhdGNoX3N5bmNGb3JJbl90eXBlVmFyaWFibGVFeHByZXNzaW9uX3R5cGVDaGVja19nZW5lcmljVHlwZUNoZWNrX2dlbmVyaWNJc0NoZWNrX3R5cGVWYXJpYWJsZVR5cGVDaGVja19mdW5jdGlvblR5cGVDaGVja19mdXR1cmVPclR5cGVDaGVja19uYXRpdmVUeXBlQ2hlY2tfY2xvc3VyZV9pbnRlcmNlcHRvclVzZV9udW1DbGFzc2VzX2xpc3RPclN0cmluZ0NsYXNzZXNfbmF0aXZlT3JFeHRlbmRzQ2xhc3NfbGlzdENsYXNzZXNfanNJbmRleGluZ0JlaGF2aW9yX3RyYWNlSGVscGVyX2Fzc2VydFVucmVhY2hhYmxlX3J1bnRpbWVUeXBlU3VwcG9ydF9kZWZlcnJlZExvYWRpbmdfbm9TdWNoTWV0aG9kU3VwcG9ydF9sb2FkTGlicmFyeV9tZW1iZXJDbG9zdXJlX3N0YXRpY0Nsb3N1cmVfdHlwZVZhcmlhYmxlTWlycm9yX2dlbmVyaWNJbnN0YW50aWF0aW9uX3J0aUFkZFJ1bGVzbmV3UnRpSW1wYWN0c2xpc3RWYWx1ZXNtYWluV2l0aEFyZ3VtZW50c2FzeW5jQm9keXN5bmNTdGFyQm9keWFzeW5jU3RhckJvZHl0eXBlVmFyaWFibGVCb3VuZENoZWNrYWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25fbmVlZHNTdHJpbmdOZWVkZWQgdG8gZW5jb2RlIHRoZSBtZXNzYWdlLl9uZWVkc0xpc3ROZWVkZWQgdG8gZW5jb2RlIHRoZSBhcmd1bWVudHMgZm9yIHRocm93IE5vU3VjaE1ldGhvZEVycm9yLk5lZWRlZCB0byBlbmNvZGUgdGhlIG5hbWUgZm9yIHRocm93IE5vU3VjaE1ldGhvZEVycm9yLnN0cmluZ1ZhbHVlc251bVZhbHVlc2ludFZhbHVlc2RvdWJsZVZhbHVlc2Jvb2xWYWx1ZXNzdXBlck5vU3VjaE1ldGhvZF9uZWVkc0ludE5lZWRlZCB0byBlbmNvZGUgdGhlIGludm9jYXRpb24ga2luZCBvZiBzdXBlci5ub1N1Y2hNZXRob2QuTmVlZGVkIHRvIGVuY29kZSB0aGUgYXJndW1lbnRzIG9mIHN1cGVyLm5vU3VjaE1ldGhvZC5OZWVkZWQgdG8gZW5jb2RlIHRoZSBuYW1lIG9mIHN1cGVyLm5vU3VjaE1ldGhvZC5jb25zdGFudE1hcExpdGVyYWxjb25zdGFudFNldExpdGVyYWxzeW1ib2xDb25zdHJ1Y3RvcmNvbnN0U3ltYm9sYXNzZXJ0V2l0aG91dE1lc3NhZ2Vhc3NlcnRXaXRoTWVzc2FnZWFzeW5jRm9ySW5zdHJpbmdJbnRlcnBvbGF0aW9uU3RyaW5ncyBhcmUgY3JlYXRlZC5zdHJpbmdKdXh0YXBvc2l0aW9uU3RyaW5nLmNvbmNhdCBpcyB1c2VkLm51bGxMaXRlcmFsYm9vbExpdGVyYWxpbnRMaXRlcmFsZG91YmxlTGl0ZXJhbHN0cmluZ0xpdGVyYWxjYXRjaFN0YXRlbWVudGxhenlGaWVsZHN0YWNrVHJhY2VJbkNhdGNoc3luY0ZvckludHlwZVZhcmlhYmxlRXhwcmVzc2lvbk5lZWRlZCBmb3IgYWNjZXNzaW5nIGEgdHlwZSB2YXJpYWJsZSBsaXRlcmFsIG9uIHRoaXMuZ2VuZXJpY1R5cGVDaGVja2dlbmVyaWNJc0NoZWNrdHlwZVZhcmlhYmxlVHlwZUNoZWNrZnV0dXJlT3JUeXBlQ2hlY2tuYXRpdmVUeXBlQ2hlY2tpbnRlcmNlcHRvclVzZW51bUNsYXNzZXNsaXN0T3JTdHJpbmdDbGFzc2VzbmF0aXZlT3JFeHRlbmRzQ2xhc3NsaXN0Q2xhc3Nlc2pzSW5kZXhpbmdCZWhhdmlvcnJ1bnRpbWVUeXBlU3VwcG9ydGRlZmVycmVkTG9hZGluZ25vU3VjaE1ldGhvZFN1cHBvcnRtZW1iZXJDbG9zdXJldHlwZVZhcmlhYmxlTWlycm9yZ2V0R2VuZXJpY0luc3RhbnRpYXRpb25ydGlBZGRSdWxlc05lZWRlZCB0byBlbmNvZGUgdGhlIG5ldyBSVEkgcnVsZXNldC5qc19iYWNrZW5kLmJhY2tlbmQuY29kZWdlbl9saXN0ZW5lckNvZGVnZW5FbnF1ZXVlckxpc3RlbmVyX2ltcGFjdHNfYmFja2VuZFVzYWdlX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXNfbmF0aXZlRW5xdWV1ZXJfaXNOb1N1Y2hNZXRob2RVc2VkX2lzTmV3UnRpVXNlZG1ldGhvZE5lZWRzU2lnbmF0dXJlX3JlZ2lzdGVyQ29tcHV0ZVNpZ25hdHVyZW9uSW5zdGFudGlhdGVkVHlwZV9jb21wdXRlTWFpbkltcGFjdHByb2Nlc3NOYXRpdmVDbGFzc2VzbmV3UnRpSW1wYWN0X2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50X2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50SW50ZXJuYWxfY29tcHV0ZUltcGFjdEZvckluc3RhbnRpYXRlZENvbnN0YW50VHlwZXJlZ2lzdGVyVHlwZUNvbnN0YW50X3Byb2Nlc3NDbGFzc0N1c3RvbUVsZW1lbnRzQW5hbHlzaXNCYXNlZGVtYW5kZWRDdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpc2JhY2tlbmRVc2FnZUJ1aWxkZXJhbGxDbGFzc2VzU2VsZWN0ZWRyZWdpc3RlclR5cGVMaXRlcmFsc2VsZWN0ZWRDbGFzc2VzQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXNuZWVkc1RhYmxlbmVlZHNDbGFzc2FjdGl2ZUNsYXNzZXNjb21wdXRlRXNjYXBpbmdDb25zdHJ1Y3RvcnNDdXN0b21FbGVtZW50c0FuYWx5c2lzSm9pbmZvclJlc29sdXRpb25uZXdBY3RpdmVDbGFzc2VzZXNjYXBpbmdDb25zdHJ1Y3RvcnNyZWdpc3Rlckdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jeV9tYWtlVHlwZUNvbnN0YW50anNfYmFja2VuZC5iYWNrZW5kLmltcGFjdF90cmFuc2Zvcm1lckltcGFjdFRyYW5zZm9ybWVyUmVzb2x1dGlvbkltcGFjdEphdmFTY3JpcHRJbXBhY3RUcmFuc2Zvcm1lcnByb2Nlc3NCYWNrZW5kSW1wYWN0aGFzQXNDYXN0aGFzVHlwZUxpdGVyYWxvbklzQ2hlY2tyZWdpc3RlckNsYXNzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscmVnaXN0ZXJNZXRob2RVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxyZWdpc3RlckxvY2FsRnVuY3Rpb25Vc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxtYXBMaXRlcmFsVXNlbWFwTGl0ZXJhbHNzZXRMaXRlcmFsVXNlbGlzdExpdGVyYWxVc2VsaXN0TGl0ZXJhbHNydW50aW1lVHlwZVVzZXJ1bnRpbWVUeXBlVXNlc3JlZ2lzdGVyUnVudGltZVR5cGVVc2Vjb25zdFN5bWJvbE5hbWVzY29uc3RhbnRMaXRlcmFsc1VuZXhwZWN0ZWQgY29uc3RhbnQgbGl0ZXJhbDogY2xhc3NFbnRpdHlzZWVuQ2xhc3Nlc0NvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lcm9uSXNDaGVja0ZvckNvZGVnZW5oYXNJbnN0YW50aWF0ZWROYXRpdmVDbGFzc2VzanNfYmFja2VuZC5pbnRlcmNlcHRvcl9kYXRhaXNJbnRlcmNlcHRlZE1ldGhvZGZpZWxkSGFzSW50ZXJjZXB0ZWRHZXR0ZXJmaWVsZEhhc0ludGVyY2VwdGVkU2V0dGVyaXNJbnRlcmNlcHRlZE5hbWVpc0ludGVyY2VwdGVkU2VsZWN0b3Jpc0ludGVyY2VwdGVkTWl4aW5TZWxlY3RvcmlzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2dldEludGVyY2VwdGVkQ2xhc3Nlc09ubWF5R2VuZXJhdGVJbnN0YW5jZW9mQ2hlY2thZGRJbnRlcmNlcHRvcnNhZGRJbnRlcmNlcHRvcnNGb3JOYXRpdmVDbGFzc01lbWJlcnNJbnRlcmNlcHRvckRhdGFJbXBsaW50ZXJjZXB0b3ItZGF0YWludGVyY2VwdGVkTWVtYmVyc2NsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXNfaW50ZXJjZXB0ZWRNaXhpbkVsZW1lbnRzX2ludGVyY2VwdGVkQ2xhc3Nlc0NhY2hlX25vQ2xhc3Nlc2ludGVyY2VwdGVkTWVtYmVyc0NvdW50X2lzQ29tcGlsZVRpbWVPbmx5Q2xhc3NuYXRpdmVTdWJjbGFzc2VzbmF0aXZlU3ViY2xhc3Nlc09mTWl4aW5JbnRlcmNlcHRvckRhdGFCdWlsZGVySW1wbF9pbnRlcmNlcHRlZEVsZW1lbnRzX2ludGVyY2VwdGVkQ2xhc3Nlc19jbGFzc2VzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2VzX2ludGVyY2VwdG9yRGF0YWludGVyY2VwdG9yc09uZVNob3RJbnRlcmNlcHRvck9uZVNob3RJbnRlcmNlcHRvcihzZWxlY3Rvcj0sa2V5PVNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKGtleT1kYXJ0MmpzLmpzX2VtaXR0ZXJOYXRpdmVDbGFzc0ZpbmRlck5hdGl2ZUVucXVldWVyY2F1c2VOYXRpdmVFbnF1ZXVlckJhc2VfcmVnaXN0ZXJlZENsYXNzZXNfdW51c2VkQ2xhc3Nlc19hbGxVc2VkTWVzc2FnZWVuYWJsZUxpdmVUeXBlQW5hbHlzaXNfcmVnaXN0ZXJUeXBlVXNlc19wcm9jZXNzTmF0aXZlQmVoYXZpb3J1bnVzZWRCZWZvcmVtYXRjaGluZ0NsYXNzZXNfZmluZFVudXNlZENsYXNzZXNNYXRjaGluZ25hdGl2ZUNsYXNzbmF0aXZlVHlwZXNwZWNUeXBlIHdhcyBfb25GaXJzdE5hdGl2ZUNsYXNzQWxsIG5hdGl2ZSB0eXBlcyBtYXJrZWQgYXMgdXNlZCBkdWUgdG8gX2ZpbmROYXRpdmVFeGNlcHRpb25zRXhjZXB0aW9uX25hdGl2ZUNsYXNzRmluZGVyX25hdGl2ZUNsYXNzZXNuYXRpdmVDbGFzc2VzRm9yVGVzdGluZ3JlZ2lzdGVyZWRDbGFzc2VzRm9yVGVzdGluZ25hdGl2ZUNsYXNzZXNjb21wdXRlTmF0aXZlQ2xhc3Nlc2ZvcmNlZCBuYXRpdmUgZWxlbWVudHMgdXNlZCwgIG5hdGl2ZSBlbGVtZW50cyBkZWFkLk5hdGl2ZUNvZGVnZW5FbnF1ZXVlcl9kb25lQWRkU3VidHlwZXN3YXMgcmVzb2x2ZWRfYWRkU3VidHlwZXNkaXJlY3RTdWJ0eXBlcyBuYXRpdmUgY2xhc3NlcywgIG5hdGl2ZSBjbGFzc2VzIG9taXR0ZWQuVGFyZ2V0Q2hlY2tzU3RhY2tGcmFtZWxldEJpbmRpbmdzdHlwZUluZmVyZW5jZU1hcHN0YXRpY1R5cGVQcm92aWRlcktlcm5lbFNzYUdyYXBoQnVpbGRlcl9pblRyeVN0YXRlbWVudGxvY2Fsc0hhbmRsZXJsb29wRGVwdGhqdW1wVGFyZ2V0c3RhcmdldEVsZW1lbnRfaW5pdGlhbFRhcmdldEVsZW1lbnRfY2xvc3VyZURhdGFMb29rdXBfdHJhY2VyX3J0aUVuY29kZXJfY3VycmVudEltcGxpY2l0SW5zdGFudGlhdGlvbnNfaW5mb1JlcG9ydGVyX3JldGhyb3dhYmxlRXhjZXB0aW9uX2xvb3BIYW5kbGVyX3R5cGVCdWlsZGVyX2luRXhwcmVzc2lvbk9mVGhyb3dfaW5saW5pbmdTdGFja19yZXR1cm5Mb2NhbF9yZXR1cm5UeXBlX2luTGF6eUluaXRpYWxpemVyRXhwcmVzc2lvbl9jdXJyZW50RnJhbWVsYXN0T3BlbmVkQmxvY2tfaXNSZWFjaGFibGVsYXN0QWRkZWRQYXJhbWV0ZXJlbGlkZWRQYXJhbWV0ZXJzX2Z1bmN0aW9uVHlwZVBhcmFtZXRlckxvY2Fsc19lbnRlckZyYW1lX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlcl9sb2NhbHNNYXBfbGV0QmluZGluZ3NfdHlwZUluZmVyZW5jZU1hcF9hYnN0cmFjdFZhbHVlRG9tYWluX2luZmVycmVkRGF0YXB1c2hDaGVja051bGxfY2xvc2VBbmRHb3RvRXhpdGlzQWJvcnRlZG9wZW5OZXdCbG9ja25ld0Jsb2NrYWRkUGFyYW1ldGVyd3JhcFN0YXRlbWVudEdyYXBod3JhcEV4cHJlc3Npb25HcmFwaF9idWlsZExpdGVyYWxMaXN0X2NhbGxTZXRSdW50aW1lVHlwZUluZm9XaXRoVHlwZUFyZ3VtZW50c3J0aUlucHV0c25ld09iamVjdF9jYWxsU2V0UnVudGltZVR5cGVJbmZvX2hhbmRsZUluVHJ5U3RhdGVtZW50X2dldEZsYWdWYWx1ZWZsYWdOYW1lTUlOSUZJRURNVVNUX1JFVEFJTl9NRVRBREFUQVVTRV9DT05URU5UX1NFQ1VSSVRZX1BPTElDWVVTRV9ORVdfUlRJX2dldFN0YXRpY1R5cGVfZ2V0U3RhdGljRm9ySW5JdGVyYXRvclR5cGVnZXRGb3JJbkl0ZXJhdG9yVHlwZV9lZmZlY3RpdmVUYXJnZXRFbGVtZW50Rm9yY2FsbFNvdXJjZUluZm9ybWF0aW9uX2xlYXZlRnJhbWVfYnVpbGRFeHRlcm5hbEZ1bmN0aW9uTm9kZV9lbnN1cmVEZWZhdWx0QXJndW1lbnRWYWx1ZXNfYnVpbGRGdW5jdGlvbk5vZGVfYnVpbGRGaWVsZE5vIGNhc2UgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHRhcmdldDogX2J1aWxkQ29uc3RydWN0b3JfYnVpbGRDb25zdHJ1Y3RvckJvZHlvcmlnaW5hbENsb3N1cmVOb2RlVW5leHBlY3RlZCBmdW5jdGlvbiBzaWduYXR1cmU6ICBpbnNpZGUgYSBub24tY2xvc3VyZTogX2J1aWxkTWV0aG9kU2lnbmF0dXJlTmV3UnRpX2J1aWxkTWV0aG9kU2lnbmF0dXJlX2J1aWxkR2VuZXJhdG9yQm9keV9mdW5jdGlvbk5vZGVPZkludmFsaWQgZ3JhcGggZm9yICAoYm9keSlfcmVnaXN0ZXJEZWZhdWx0VmFsdWVObyBjb25zdGFudCBjb21wdXRlZCBmb3IgX29wZW5GdW5jdGlvbnJlYWRUaGlzcG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZQYXJhbWV0ZXJfZ2V0RGFydFR5cGVJZlZhbGlkZmllbGRWYWx1ZWNoZWNrSW5zdHJ1Y3Rpb25wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnRfY2xvc2VGdW5jdGlvbnBvcEJvb2xpZmllZHBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mQ29uZGl0aW9uX2FkZENsYXNzVHlwZVZhcmlhYmxlc0lmTmVlZGVkbmVlZHNUeXBlQXJndW1lbnRzX3R5cGVWYXJpYWJsZXR5cGVWYXJpYWJsZVR5cGVnZXRUeXBlVmFyaWFibGVBc0xvY2FsZGlyZWN0TG9jYWxzX2FkZEZ1bmN0aW9uVHlwZVZhcmlhYmxlc0lmTmVlZGVkZWxpZGVUeXBlUGFyYW1ldGVyc19jb21wdXRlVHlwZUFyZ3VtZW50RGVmYXVsdFZhbHVlY29uc3RydWN0b3JEYXRhX2J1aWxkSW5pdGlhbGl6ZXJzY29uc3RydWN0b3JBcmd1bWVudHNpc0N1c3RvbUVsZW1lbnRObyBpbml0aWFsaXplciB2YWx1ZSBmb3IgZmllbGQgc3Vic3RJbkNvbnRleHRfYWRkSW1wbGljaXRJbnN0YW50aWF0aW9uYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aV9yZW1vdmVJbXBsaWNpdEluc3RhbnRpYXRpb25jb25zdHJ1Y3RvckNoYWluYm9keUNhbGxJbnB1dHNpbmxpbmVkQ29uc3RydWN0b3JfaW5saW5lZEZyb21pc0JveGVkc2NvcGVEYXRhZ2V0Q2FwdHVyZWRTY29wZXJlcXVpcmVzQ29udGV4dEJveGlubGluZWRDb25zdHJ1Y3RvckNsYXNzYW5hbHl6ZVR5cGVBcmd1bWVudF90cnlJbmxpbmVNZXRob2RfaW52b2tlQ29uc3RydWN0b3JCb2R5dXBkYXRlTG9jYWxfaXNFbXB0eVN0YXRlbWVudGlubGluZWRUYXJnZXRfZW5zdXJlVHlwZVZhcmlhYmxlc0ZvckluaXRpYWxpemVyc2luY2x1ZGVkQ2xhc3Nlc19jb2xsZWN0RmllbGRWYWx1ZXNVbmV4cGVjdGVkIG1lbWJlciBkZWZpbml0aW9uIGlnbm9yZUFsbG9jYXRvckFuYWx5c2lzX2lzUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcmJ1dCBmb3VuZCBmb3VuZFN1cGVyT3JSZWRpcmVjdENhbGxfaW5saW5lU3VwZXJJbml0aWFsaXplcl9pbmxpbmVSZWRpcmVjdGluZ0luaXRpYWxpemVyaXIuSW52YWxpZEluaXRpYWxpemVyIG5vdCBoYW5kbGVkVW5oYW5kbGVkIGluaXRpYWxpemVyIGlyLkFsbCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGhhdmUgc3VwZXItIG9yIHJlZGlyZWN0aW5nLSBpbml0aWFsaXplcnMsIGV4Y2VwdCBPYmplY3QoKV9ub3JtYWxpemVBbmRCdWlsZEFyZ3VtZW50c2J1aWx0QXJndW1lbnRzcG9zaXRpb25hbEluZGV4Y29ycmVzcG9uZGluZ05hbWVkc3VwZXJPclJlZGlyZWN0Q29uc3RydWN0b3JfaW5saW5lU3VwZXJPclJlZGlyZWN0Q29tbW9uY2FsbGVyQ2xhc3NvbGRTY29wZUluZm9zY29wZUluZm9uZXdTY29wZUluZm9fYnVpbGRHZW5lcmF0b3JfY2hlY2tzRm9yRnVuY3Rpb25faGFuZGxlSWZ2aXNpdENvbmRpdGlvbnZpc2l0VGhlbnZpc2l0RWxzZWVtcHR5UGFyYW1ldGVyc19hZGRDb21tZW50IGluZmVycmVkIGFzIFtlbXB0eV1zdGF0ZW1lbnRUZW1wbGF0ZVlpZWxkaW5nX2dlbmVyYXRlZEVudHJ5SXNFbXB0eV9wb3RlbnRpYWxseUFkZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZUNoZWNrc3RhcmdldENoZWNrc2NoZWNrVHlwZVBhcmFtZXRlcnNfY2hlY2tUeXBlVmFyaWFibGVCb3VuZHNub2RlSXNDb25zdHJ1Y3RvckJvZHlfaGFuZGxlUGFyYW1ldGVyaXNCb3hlZFZhcmlhYmxlbmV3UGFyYW1ldGVyTm8gaW5pdGlhbCBpbnN0cnVjdGlvbiBmb3IgY2hlY2tBbGxQYXJhbWV0ZXJzY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzdHJ1c3RUeXBlT2ZQYXJhbWV0ZXJfYXNzZXJ0SXNUeXBlVGhlIHR5cGUgYXJndW1lbnQgJycgaXMgbm90IGEgc3VidHlwZSBvZiB0aGUgdHlwZSB2YXJpYWJsZSBib3VuZCAnJyBvZiB0eXBlIHZhcmlhYmxlICduYXRpdmVOYW1ldGVtcGxhdGVSZWNlaXZlcnRlbXBsYXRlQXJndW1lbnRzIy5fcHVzaFN0YXRpY0ludm9jYXRpb24gPSB1bmNhY2hlZEV4cHJlc3Npb25UZW1wbGF0ZXBhcmFtZXRlck1hcGVsaWRlZFBhcmFtZXRlclNldGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keV9kZWZhdWx0VmFsdWVGb3JQYXJhbWV0ZXJfaW5zZXJ0Q292ZXJhZ2VDYWxsY2hlY2tMb2FkbG9hZElkcHJlZml4Q29uc3RhbnR1cmlDb25zdGFudE5vbi1lbXB0eSBpbnN0cnVjdGlvbiBzdGFjay5Ob24tZW1wdHkgaW5zdHJ1Y3Rpb24gc3RhY2tfdmlzaXRUaHJvd0V4cHJlc3Npb25kZWZlcnJlZENvbnN0YW50X2VtaXRSZXR1cm5idWlsZEluaXRpYWxpemVyYnVpbGRDb25kaXRpb25idWlsZFVwZGF0ZWp1bXBUYXJnZXRoYW5kbGVMb29wZ2V0Q2FwdHVyZWRMb29wU2NvcGVfYnVpbGRBc3luY0ZvckluX2J1aWxkRm9ySW5JbmRleGFibGVfYnVpbGRGb3JJbkl0ZXJhdG9yY3JlYXRlTG9jYWxfaWlzRml4ZWRvcmlnaW5hbExlbmd0aGJ1aWxkR2V0TGVuZ3RoYnVpbGRDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JDaGVja2xvb3BWYXJpYWJsZUxvY2Fsb25lYWRkSW5zdHJ1Y3Rpb25fcHVzaER5bmFtaWNJbnZvY2F0aW9uc3RhdGljSW5zdGFuY2VUeXBlX2FkZFR5cGVBcmd1bWVudHN0cnlCdWlsZGVyZmluYWxpemVyRnVuY3Rpb25jbG9zZVRyeUJvZHlidWlsZEZpbmFsbHlCbG9ja2NsZWFuVXB0eXBlSW5mb1NldHRlckZuVW5leHBlY3RlZCBgc3RhY2subGFzdGA6IEZvdW5kIGV4cGVjdGVkICBvciBhbiBISW52b2tlU3RhdGljLiBTdGF0ZTogdHlwZUluZm89LCBzdGFjaz1zYXZlZExvY2Fsc2xvb3BDbG9zdXJlSW5mb3N0YXJ0TG9vcGp1bXBIYW5kbGVyYmVnaW5Mb29wSGVhZGVybG9vcEluZm9sb29wRW50cnlCbG9ja2JvZHlFbnRyeUJsb2NraGFzQ29udGludWVzZW50ZXJMb29wQm9keWJvZHlFeGl0QmxvY2tpc0Fib3J0aW5nQm9keWxvb3BJc0RlZ2VuZXJhdGVjb25kaXRpb25CbG9ja2NvbnRpbnVlSGFuZGxlcnNmb3JFYWNoQ29udGludWVsb2NhbHNtZXJnZU11bHRpcGxlYm9keUdyYXBoYm9keUluZm9jb25kaXRpb25JbnN0cnVjdGlvbmNvbmRpdGlvbkVuZEJsb2NrYXZvaWRDcml0aWNhbEVkZ2Vjb25kaXRpb25FeGl0QmxvY2tlbmRMb29wbG9vcEJsb2NrSW5mb2hhc0FueUJyZWFrZm9yRWFjaEJyZWFrYnJlYWtJbnN0cnVjdGlvbmJyYW5jaEJ1aWxkZXJoYW5kbGVJZmV4cHJlc3Npb25JbnN0cnVjdGlvbl9nZW5lcmF0ZVR5cGVFcnJvcmludmFsaWQgdHlwZXBvbGljeWJ1aWxkVHlwZUNvbnZlcnNpb25fZ2VuZXJhdGVFcnJvcmVycm9yTWVzc2FnZV9nZW5lcmF0ZVVuc3VwcG9ydGVkRXJyb3JjcmVhdGVKdW1wSGFuZGxlcmlzTG9vcEp1bXBnZW5lcmF0ZUNvbnRpbnVlZ2VuZXJhdGVCcmVha2JlZm9yZUxvY2Fsc2JyZWFrSGFuZGxlcnNfYnVpbGRTd2l0Y2hDYXNlQ29uc3RhbnRzaGFzQ29udGludWVjYXNlSW5kZXhzd2l0Y2hJbmRleGhhc0RlZmF1bHRfYnVpbGRTaW1wbGVTd2l0Y2hTdGF0ZW1lbnRfYnVpbGRDb21wbGV4U3dpdGNoU3RhdGVtZW50X2lzRGVmYXVsdENhc2VfYnVpbGRFeHByZXNzaW9uX2dldFN3aXRjaENvbnN0YW50c3BhcmVudFN3aXRjaGNvbnN0YW50c0xvb2t1cGNvbnN0YW50TGlzdF9oYW5kbGVTd2l0Y2hzd2l0Y2hUYXJnZXRjYXNlU291cmNlSW5mb3JtYXRpb25ub3RVc2VkZ2V0Q29uc3RhbnRzaXNEZWZhdWx0Q2FzZWV4cHJlc3Npb25TdGFydHN3aXRjaEluc3RydWN0aW9uZXhwcmVzc2lvbkVuZGhDb25zdGFudGNhc2VIYW5kbGVyc0NvbnRpbnVlIGNhbm5vdCB0YXJnZXQgYSBzd2l0Y2guZXhwcmVzc2lvbkluZm9icmFuY2hlcmhhbmRsZUNvbmRpdGlvbmFsX2hhbmRsZUxvZ2ljYWxFeHByZXNzaW9udmlzaXRSaWdodGlubmVyTGVmdGhhbmRsZUxvZ2ljYWxCaW5hcnlfc2V0TGlzdFJ1bnRpbWVUeXBlSW5mb0lmTmVlZGVkYXJyYXlUeXBlbGlzdEluc3RydWN0aW9uYXJnTGlzdHR5cGVJbnB1dHNyZXR1cm5UeXBlTWFza2NvbnN0cnVjdG9yQXJnc2lyLk1hcEVudHJ5IHNob3VsZCBiZSBoYW5kbGVkIGluIHZpc2l0TWFwTGl0ZXJhbFVuZXhwZWN0ZWQgdHlwZSBsaXRlcmFsIHN0YXRpY1RhcmdldFVuZXhwZWN0ZWQgZmllbGQgZGF0YSBmb3IgbGV0QmluZGluZ2lyLkRpcmVjdFByb3BlcnR5U2V0aXIuRGlyZWN0TWV0aG9kSW52b2NhdGlvbl9nZW5lcmF0ZVN1cGVyTm9TdWNoTWV0aG9kX2J1aWxkSW52b2tlU3VwZXJfdmlzaXRMb2NhbFNldHRlcmluaXRpYWxpemVkVmFsdWVfdmlzaXRQb3NpdGlvbmFsQXJndW1lbnRzX3Zpc2l0QXJndW1lbnRzRm9yRHluYW1pY1RhcmdldG5hbWVkVmFsdWVzX3Zpc2l0QXJndW1lbnRzRm9yTmF0aXZlU3RhdGljVGFyZ2V0X2ZpbGxEeW5hbWljVHlwZUFyZ3VtZW50c3NlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzX2dldENvbnN0cnVjdG9yVHlwZUFyZ3VtZW50c19nZXRDbGFzc1R5cGVBcmd1bWVudHNfZ2V0U3RhdGljVHlwZUFyZ3VtZW50c192aXNpdEFyZ3VtZW50c0ZvclN0YXRpY1RhcmdldF9oYW5kbGVJbnZva2VTdGF0aWNGb3JlaWduX2hhbmRsZUV4dHJhY3RUeXBlQXJndW1lbnRzX2hhbmRsZUludm9rZUZhY3RvcnlDb25zdHJ1Y3RvcmNhbiBvbmx5IGJlIHVzZWQgYXMgYSBjb25zdCBjb25zdHJ1Y3RvcmlzRml4ZWRMaXN0aXNGaXhlZExpc3RDb25zdHJ1Y3RvckNhbGxpc0dyb3dhYmxlTGlzdENvbnN0cnVjdG9yQ2FsbGlzSlNBcnJheVR5cGVkQ29uc3RydWN0b3JfaW5mZXJyZWRUeXBlT2ZOZXdMaXN0VW5leHBlY3RlZCBhcmd1bWVudHMuIEV4cGVjdGVkIDEtMiBhcmd1bWVudCwgYWN0dWFsOiBsZW5ndGhJbnB1dG5ldyBBcnJheSgjKWZvcmVpZ24jLmZpeGVkJGxlbmd0aCA9IEFycmF5bmV3SW5zdGFuY2V0eXBlVmFsdWVfaW50ZXJjZXB0b3JGb3JyZWNlaXZlclN0YXRpY1R5cGVfaGFuZGxlRm9yZWlnbkpzX2hhbmRsZUZvcmVpZ25EYXJ0Q2xvc3VyZVRvSnNSQVdfREFSVF9GVU5DVElPTl9SRUZfaGFuZGxlRm9yZWlnblJhd0Z1bmN0aW9uUmVmSlNfU0VUX1NUQVRJQ19TVEFURV9oYW5kbGVGb3JlaWduSnNTZXRTdGF0aWNTdGF0ZUpTX0dFVF9TVEFUSUNfU1RBVEVfaGFuZGxlRm9yZWlnbkpzR2V0U3RhdGljU3RhdGVKU19HRVRfTkFNRV9oYW5kbGVGb3JlaWduSnNHZXROYW1lX2hhbmRsZUZvcmVpZ25Kc0VtYmVkZGVkR2xvYmFsX2hhbmRsZUZvcmVpZ25Kc0J1aWx0aW5KU19HRVRfRkxBR19oYW5kbGVGb3JlaWduSnNHZXRGbGFnSlNfRUZGRUNUX2hhbmRsZUpzSW50ZXJjZXB0b3JDb25zdGFudGdldEludGVyY2VwdG9yX2hhbmRsZUZvcmVpZ25HZXRJbnRlcmNlcHRvcmdldEpTQXJyYXlJbnRlcm9wUnRpX2hhbmRsZUZvcmVpZ25HZXRKU0FycmF5SW50ZXJvcFJ0aV9oYW5kbGVKc1N0cmluZ0NvbmNhdF9oYW5kbGVDcmVhdGVJbnZvY2F0aW9uTWlycm9yVW5rbm93biBmb3JlaWduOiBuYW1lTGl0ZXJhbHR5cGVBcmd1bWVudHNMaXRlcmFscG9zaXRpb25hbEFyZ3VtZW50c0xpdGVyYWxuYW1lZEFyZ3VtZW50c0xpdGVyYWxraW5kTGl0ZXJhbFVuZXhwZWN0ZWQgbmFtZWQgYXJndW1lbnRzIHZhbHVlIGluIGNyZWF0ZUludm9jYXRpb25NaXJycm9yOiBhcmd1bWVudHNJbnN0cnVjdGlvbmFyZ3VtZW50TmFtZXNhcmd1bWVudE5hbWVhcmd1bWVudE5hbWVDb25zdGFudGFyZ3VtZW50TmFtZXNJbnN0cnVjdGlvbmludGVybmFsTmFtZWtpbmRDb25zdGFudF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50c21pblBvc2l0aW9uYWxtYXhQb3NpdGlvbmFscGx1cmFsaXplQXJndW1lbnRzYWRqZWN0aXZlbm8gb25lIHR3byBiYWR0eXBlIEVycm9yOiAnJyB0YWtlcyAsIG5vdCBwaHJhc2VhdCBsZWFzdCBFcnJvcjogVG9vIGZldyBhcmd1bWVudHMuICdhdCBtb3N0IEVycm9yOiBUb28gbWFueSBhcmd1bWVudHMuICcnIGRvZXMgbm90IHRha2UgbmFtZWQgYXJndW1lbnRzLl9mb3JlaWduQ29uc3RhbnRTdHJpbmdBcmd1bWVudEVycm9yOiBFeHBlY3RlZCBTdHJpbmcgY29uc3RhbnQgYXMgYXJndW1lbnQgdG8gJ3JlcXVpcmVzIGEgc3RhdGljIG1ldGhvZCBvciB0b3AtbGV2ZWwgbWV0aG9kaGFuZGxlVGFyZ2V0ZXhwcmVzc2lvblRlbXBsYXRlWWllbGRpbmdkb2VzIG5vdCBoYW5kbGUgYSBjbG9zdXJlIHdpdGggb3B0aW9uYWwgcGFyYW1ldGVycyA9ICNfZ2V0TmFtZUZvckpzR2V0TmFtZUVycm9yOiBFeHBlY3RlZCBhIEpzR2V0TmFtZSBlbnVtIHZhbHVlLl9leHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWVnbG9iYWxOYW1lc2Vjb25kIE5vIE5hdGl2ZUJlaGF2aW9yIGZvciBzc2FUeXBlbmFtZUFyZ3VtZW50X2dldEpzQnVpbHRpblRlbXBsYXRlRXJyb3I6IEV4cGVjdGVkIGEgSnNCdWlsdGluIGVudW0gdmFsdWUuX3RlbXBsYXRlRm9yQnVpbHRpbkpzQnVpbHRpbi5kYXJ0T2JqZWN0Q29uc3RydWN0b3JKc0J1aWx0aW4uZGFydENsb3N1cmVDb25zdHJ1Y3RvckpzQnVpbHRpbi5pc0NoZWNrUHJvcGVydHlUb0pzQ29uc3RydWN0b3JOYW1lSnNCdWlsdGluLmlzRnVuY3Rpb25UeXBlSnNCdWlsdGluLmlzRnV0dXJlT3JUeXBlSnNCdWlsdGluLmlzVm9pZFR5cGVKc0J1aWx0aW4uaXNEeW5hbWljVHlwZUpzQnVpbHRpbi5pc0pzSW50ZXJvcFR5cGVBcmd1bWVudEpzQnVpbHRpbi5yYXdSdGlUb0pzQ29uc3RydWN0b3JOYW1lSnNCdWlsdGluLnJhd1J1bnRpbWVUeXBlSnNCdWlsdGluLmlzU3VidHlwZUpzQnVpbHRpbi5pc0dpdmVuVHlwZVJ0aUpzQnVpbHRpbi5nZXRNZXRhZGF0YUpzQnVpbHRpbi5nZXRUeXBlYnVpbHRpbmlzUHJlZml4TGVuZ3RoIy5zdWJzdHJpbmcoIy5uYW1lIy5jb25zdHJ1Y3RvcmlzUHJlZml4KCcnICsgIykgaW4gIy5wcm90b3R5cGUjLm5hbWUgPT09ICNtZXRhZGF0YUFjY2Vzc1sjXXR5cGVzQWNjZXNzVW5oYW5kbGVkIEJ1aWx0aW46IEVycm9yOiBVbmtub3duIGludGVybmFsIGZsYWcgImFyZ3VtZW50SW5zdHJ1Y3Rpb25hcmd1bWVudENvbnN0YW50aW50ZXJvcFR5cGVNaXNtYXRjaCBiZXR3ZWVuIG51bWJlciBvZiBwbGFjZWhvbGRlcnMgYW5kIG51bWJlciBvZiBhcmd1bWVudHMudHJ1c3RlZE1hc2t0cnVzdFR5cGVNYXNrVHlwZSBhcmd1bWVudCB0b28gbmFycm93IGZvciBzcGVjaWZpZWQgYmVoYXZpb3IgdHlwZSAgZG9lcyBub3QgYWxsb3cgYWxsIHZhbHVlcyBpbiBfaW52b2tlSnNJbnRlcm9wRnVuY3Rpb25zdGF0aWNSZWNlaXZlclR5cGV0eXBlQm91bmRpc09wdGltaXphYmxlT3BlcmF0aW9uT25JbmRleGFibGVpc0xlbmd0aGlzT3B0aW1pemFibGVPcGVyYXRpb25wb3NpdGlvbnNmaWx0ZXJlZEFyZ3VtZW50c3BhcmFtZXRlck5hbWVNYXBwYXJhbWV0ZXJOYW1lIyA9ICNuZXcgIygjKGNsb3N1cmVDbGFzc0VudGl0eWNhcHR1cmVkVmFyaWFibGVzZ2V0TG9jYWxGb3JGaWVsZGZ1bmNFeHByZXNzaW9udHlwZUFyZ3VtZW50c05lZWRlZGluc3RhbnRpYXRpb25OZWVkc1R5cGVBcmd1bWVudHNHZW5lcmljIGZ1bmN0aW9uIGluc3RhbnRpYXRpb24gbm90IGltcGxlbWVudGVkIGZvciAgdHlwZSBhcmd1bWVudHNfY29udGFpbmluZ0NsYXNzcHVibGljTmFtZXRhcmdldERlZmluaXRpb25zdWJ0eXBlSW5zdHJ1Y3Rpb25pbmZpeHN1cGVydHlwZUluc3RydWN0aW9ucHJlZml4SW5zdHJ1Y3Rpb25pbmZpeEluc3RydWN0aW9uc3VmZml4SW5zdHJ1Y3Rpb250eXBlSW5zdHJ1Y3Rpb252YXJpYWJsZU5hbWVib3VuZEluc3RydWN0aW9udmFyaWFibGVOYW1lSW5zdHJ1Y3Rpb25jaGVja0JvdW5kX3B1c2hJc1Rlc3RhZGRUeXBlVmFyaWFibGVSZWZlcmVuY2VfY2FuSWdub3JlVHlwZUFyZ3VtZW50c3JlcHJlc2VudGF0aW9uc2J1aWxkVHlwZUFyZ3VtZW50UmVwcmVzZW50YXRpb25zaXNGaWVsZE5hbWVhc0ZpZWxkTmFtZV9oYXNEaXJlY3RDaGVja0ZvcmF3YWl0ZWRyZXRocm93YWJsZUV4Y2VwdGlvbiBzaG91bGQgbm90IGJlIG51bGwuc3RyaW5nQ29uY2F0c3RyaW5nQnVpbGRlcnRyeUNhdGNocHJvdmlkZWRBcmd1bWVudHNjdXJyZW50Tm9kZWNhY2hlZENhbkJlSW5saW5lZG1lZXRzSGFyZENvbnN0cmFpbnRzTWlzc2luZyBzZWxlY3RvciBmb3IgaW5saW5pbmcgb2YgZG9lc05vdENvbnRhaW5Db2RlaW5saW5lRGF0YWNhbkJlSW5saW5lZG1heElubGluaW5nTm9kZXNyZWR1Y3RpdmVIZXVyaXN0aWNfaXNDYWxsZWRPbmNlY2FuQmVJbmxpbmVkUmVkdWN0aXZlaGV1cmlzdGljU2F5R29vZFRvR29nZXRJbmxpbmVEYXRhY2Fubm90QmVJbmxpbmVkUmVhc29uYWxsb3dMb29wc0Nhbm5vdCBpbmxpbmUgbnVtUGFyYW1ldGVyc21hcmtlZFRyeUlubGluZWNhbGxlZE9uY2VfaXNGdW5jdGlvbkNhbGxlZE9uY2Vkb0lubGluaW5nVW5leHBlY3RlZCBpbnN0YW5jZSB0eXBlIGZvciBjb21waWxlZEFyZ3VtZW50c19jb21wbGV0ZUNhbGxBcmd1bWVudHNMaXN0X2VudGVySW5saW5lZE1ldGhvZF9kb0lubGluZV9sZWF2ZUlubGluZWRNZXRob2RfcHJvdmlkZWRBcmd1bWVudHNLbm93blRvQmVDb21wbGV0ZV9jb21wbGV0ZUR5bmFtaWNDYWxsQXJndW1lbnRzTGlzdHNlbGVjdG9yQXJndW1lbnROYW1lc2NvbXBpbGVkQXJndW1lbnRJbmRleHBvc2l0aW9uYWxBcmd1bWVudE9mZnNldG5hbWVkQXJndW1lbnRPZmZzZXRwb3NpdGlvbmFsQXJndW1lbnRJbmRleG5hbWVkQXJndW1lbnRJbmRleE5vIGNvbnN0YW50IGNvbXB1dGVkIGZvciBwYXJhbWV0ZXIgdHlwZUFyZ3VtZW50T2Zmc2V0dHlwZUFyZ3VtZW50SW5kZXhfc2V0dXBTdGF0ZUZvcklubGluaW5nZm9yR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keWhhc0JveGlubGluZWRCb3hpbmxpbmVUeXBlUGFyYW1ldGVyc09ubHkgYXJndW1lbnRzIGhhdmUgYmVlbiByZWFkIGZyb206ICBwYXNzZWQgdG8gX3Jlc3RvcmVTdGF0ZW9sZExvY2Fsc0hhbmRsZXJvbGRSZXR1cm5Mb2NhbGluVHJ5U3RhdGVtZW50b2xkUmV0dXJuVHlwZW9sZFN0YWNrX3Zpc2l0SW5saW5lZEZ1bmN0aW9uX3BvdGVudGlhbGx5Q2hlY2tJbmxpbmVkUGFyYW1ldGVyVHlwZXNVbmV4cGVjdGVkIGlubGluZWQgZnVuY3Rpb246IGNoZWNrZWRPclRydXN0ZWRfYWxsSW5saW5lZEZ1bmN0aW9uc0NhbGxlZE9uY2VhbGxGdW5jdGlvbnNDYWxsZWRPbmNlaWRDb25zdGFudENvbnN0cnVjdG9yRGF0YUtlcm5lbElubGluaW5nU3RhdGVLZXJuZWxJbmxpbmluZ1N0YXRlKGFsbEZ1bmN0aW9uc0NhbGxlZE9uY2U9VHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlcmtlcm5lbEJ1aWxkZXJ0cnlTb3VyY2VJbmZvcm1hdGlvbmVudGVyQmxvY2tzdGFydFRyeUJsb2NrZW5kVHJ5QmxvY2tzdGFydENhdGNoQmxvY2tlbmRDYXRjaEJsb2Nrc3RhcnRGaW5hbGx5QmxvY2tlbmRGaW5hbGx5QmxvY2tleGl0QmxvY2t0cnlJbnN0cnVjdGlvbnByZXZpb3VzbHlJblRyeVN0YXRlbWVudGNhdGNoR3JhcGhmaW5hbGx5R3JhcGhvcmlnaW5hbFNhdmVkTG9jYWxzX2FkZEV4aXRUcnlTdWNjZXNzb3JzdWNjZXNzb3JfYWRkT3B0aW9uYWxTdWNjZXNzb3JibG9jazJfc2V0QmxvY2tTdWNjZXNzb3JzYnVpbGRGaW5hbGl6ZXJvbGRSZXRocm93YWJsZUV4Y2VwdGlvbnVud3JhcHBlZEV4Y2VwdGlvbmNhdGNoZXNJbmRleHB1c2hDb25kaXRpb25leGNlcHRpb25WYXJpYWJsZXRyYWNlSW5zdHJ1Y3Rpb250cmFjZVZhcmlhYmxlbmV4dENhdGNoZmlyc3RCbG9ja0tlcm5lbFR5cGVCdWlsZGVyY29tcHV0ZVR5cGVWYXJpYWJsZUFjY2Vzc19FcnJvbmVvdXNJbml0aWFsaXplclZpc2l0b3JLZXJuZWxTd2l0Y2hDYXNlSnVtcEhhbmRsZXJ0YXJnZXRJbmRleE1hcFN0YXRpY1R5cGVTdGF0aWNUeXBlKElubGluZURhdGFjb2RlQWZ0ZXJSZXR1cm5oYXNMb29waGFzQ2xvc3VyZWhhc1RyeWhhc0FzeW5jQXdhaXRoYXNUaHJvd2hhc0xvbmdTdHJpbmdoYXNFeHRlcm5hbENvbnN0YW50Q29uc3RydWN0b3JDYWxsaGFzQXJndW1lbnREZWZhdWx0aW5naGFzQ2FzdGhhc0lmYXJndW1lbnRDb3VudHNyZWd1bGFyTm9kZUNvdW50Y2FsbENvdW50cmVkdWN0aXZlTm9kZUNvdW50Y29kZSBhZnRlciByZXR1cm5hc3luYy9hd2FpdHRvbyBtYW55IG5vZGVzIChjYW5ub3RCZUlubGluZWRSZWR1Y3RpdmVSZWFzb250b28gbWFueSBjYWxsc2xvbmcgc3RyaW5nZXh0ZXJuYWwgY29uc3QgY29uc3RydWN0b3J0eXBlIGFyZ3VtZW50c2FyZ3VtZW50IGRlZmF1bHRpbmdpbmNyZWFzaW5nIGFyZ3VtZW50c0lubGluZURhdGEoYXJndW1lbnRDb3VudHM9e3JlZ3VsYXJOb2RlQ291bnQ9Y2FsbENvdW50PXJlZHVjdGl2ZU5vZGVDb3VudD1JbmxpbmVEYXRhQ2FjaGVJbmxpbmVXZWVkZXJJTkxJTklOR19OT0RFU19PVVRTSURFX0xPT1BJTkxJTklOR19OT0RFU19PVVRTSURFX0xPT1BfQVJHX0ZBQ1RPUklOTElOSU5HX05PREVTX0lOU0lERV9MT09QSU5MSU5JTkdfTk9ERVNfSU5TSURFX0xPT1BfQVJHX0ZBQ1RPUnNlZW5SZXR1cm5jb3VudFJlZ3VsYXJOb2RlY291bnRSZWR1Y3RpdmVOb2RlY29tcHV0ZUlubGluZURhdGFza2lwUmVkdWN0aXZlTm9kZXNza2lwUmVndWxhck5vZGVzb2xkQ291bnRSZWd1bGFyTm9kZW9sZENvdW50UmVkdWN0aXZlTm9kZXJlZ2lzdGVyUmVndWxhck5vZGVyZWdpc3RlclJlZHVjdGl2ZU5vZGV1bnJlZ2lzdGVyUmVkdWN0aXZlTm9kZV9oYW5kbGVMb29wY29tbW9uUHJlZml4Q291bnR0aGVuQ291bnRlbHNlQ291bnRyZWdpc3RlckNhbGxfcHJvY2Vzc0FyZ3VtZW50c0Fic3RyYWN0VmFsdWVGYWN0b3J5aW5mZXJyZWRSZXR1cm5UeXBlRm9yRWxlbWVudGluZmVycmVkVHlwZUZvck1lbWJlcmluZmVycmVkVHlwZUZvclBhcmFtZXRlcmluZmVycmVkUmVzdWx0VHlwZUZvclNlbGVjdG9yZnJvbU5hdGl2ZUJlaGF2aW9yZnJvbU5hdGl2ZVR5cGVVbmV4cGVjdGVkIGVtcHR5IHJldHVybiB2YWx1ZSBmb3IgSnNDbG9zZWRXb3JsZEJ1aWxkZXJDbG9zdXJlRGF0YUltcGxjbG9zdXJlLWRhdGFfc2NvcGVNYXBfY2FwdHVyZWRTY29wZXNNYXBfY2FwdHVyZWRTY29wZUZvclNpZ25hdHVyZU1hcF9sb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcHNjb3BlTWFwY2FwdHVyZWRTY29wZXNNYXBjYXB0dXJlZFNjb3BlRm9yU2lnbmF0dXJlTWFwbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXBNaXNzaW5nIHNjb3BlIGluZm8gZm9yIGxvb3BOb2RlQ29ycmVzcG9uZGluZyBjbG9zdXJlIGNsYXNzIG5vdCBmb3VuZCBmb3IgQ2xvc3VyZXMgZm91bmQgZm9yIENsb3N1cmVEYXRhQnVpbGRlcl91cGRhdGVTY29wZUJhc2VkT25SdGlOZWVkb3V0ZXJtb3N0RW50aXR5aW5jbHVkZUZvclJ0aVZhcmlhYmxlVXNlS2luZC5leHBsaWNpdFZhcmlhYmxlVXNlS2luZC5pbXBsaWNpdENhc3RWYXJpYWJsZVVzZUtpbmQubG9jYWxUeXBlVmFyaWFibGVVc2VLaW5kLmNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50VmFyaWFibGVVc2VLaW5kLnN0YXRpY1R5cGVBcmd1bWVudFZhcmlhYmxlVXNlS2luZC5pbnN0YW5jZVR5cGVBcmd1bWVudFZhcmlhYmxlVXNlS2luZC5sb2NhbFR5cGVBcmd1bWVudGxvY2FsRnVuY3Rpb25OZWVkc1R5cGVBcmd1bWVudHNWYXJpYWJsZVVzZUtpbmQubWVtYmVyUGFyYW1ldGVyVmFyaWFibGVVc2VLaW5kLmxvY2FsUGFyYW1ldGVybG9jYWxGdW5jdGlvbk5lZWRzU2lnbmF0dXJlVmFyaWFibGVVc2VLaW5kLm1lbWJlclJldHVyblR5cGVWYXJpYWJsZVVzZUtpbmQubG9jYWxSZXR1cm5UeXBlVmFyaWFibGVVc2VLaW5kLmZpZWxkVHlwZVZhcmlhYmxlVXNlS2luZC5saXN0TGl0ZXJhbFZhcmlhYmxlVXNlS2luZC5zZXRMaXRlcmFsVmFyaWFibGVVc2VLaW5kLm1hcExpdGVyYWxWYXJpYWJsZVVzZUtpbmQuaW5zdGFudGlhdGlvblR5cGVBcmd1bWVudHRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZWZyZWVWYXJpYWJsZXNGb3JSdGljcmVhdGVDbG9zdXJlRW50aXRpZXNjYWxsTWV0aG9kc21vZGVsYWxsQm94ZWRWYXJpYWJsZXNib3hlZFZhcmlhYmxlc2Nsb3N1cmVzVG9HZW5lcmF0ZWNsb3N1cmVDbGFzc0luZm9fcHJvZHVjZVN5bnRoZXRpY0VsZW1lbnRzY3JlYXRlU2lnbmF0dXJlTWV0aG9kY2FwdHVyZWRTY29wZXNpZ25hdHVyZUNhcHR1cmVkU2NvcGVidWlsZENsb3N1cmVDbGFzc0pzU2NvcGVJbmZvc2NvcGUtaW5mb2xvY2Fsc1VzZWRJblRyeU9yU3luY2hhc1RoaXNMb2NhbGZvckVhY2hCb3hlZFZhcmlhYmxlbG9jYWxJc1VzZWRJblRyeU9yU3luY3RoaXM9bG9jYWxzVXNlZEluVHJ5T3JTeW5jPXtTY29wZUluZm9LaW5kLnNjb3BlSW5mb0pzQ2FwdHVyZWRTY29wZWNhcHR1cmVkLXNjb3BlU2NvcGVJbmZvS2luZC5jYXB0dXJlZFNjb3BlSnNDYXB0dXJlZExvb3BTY29wZWNhcHR1cmVkLWxvb3Atc2NvcGVib3hlZExvb3BWYXJpYWJsZXNoYXNCb3hlZExvb3BWYXJpYWJsZXNTY29wZUluZm9LaW5kLmNhcHR1cmVkTG9vcFNjb3BlS2VybmVsQ2xvc3VyZUNsYXNzSW5mb2Nsb3N1cmUtcmVwcmVzZW50YXRpb24taW5mb2Nsb3N1cmVFbnRpdHlsb2NhbFRvRmllbGRNYXBmcm9tU2NvcGVJbmZvY2xvc3VyZVNvdXJjZU5vZGVTY29wZUluZm9LaW5kLmNsb3N1cmVSZXByZXNlbnRhdGlvbkluZm9jcmVhdGVkRmllbGRFbnRpdGllc05vIGxvY2FsIGZvciAuIE9wdGlvbnM6IHRoaXNGaWVsZEVudGl0eUpDbG9zdXJlQ2xhc3NjbG9zdXJlLWNsYXNzY2xvc3VyZV9jbGFzcyhBbm9ueW1vdXNDbG9zdXJlTG9jYWxhbm9ueW1vdXNfY2xvc3VyZV9sb2NhbChKQ2xvc3VyZUZpZWxkY2xvc3VyZS1maWVsZFJlY29yZENsYXNzRGF0YXJlY29yZC1jbGFzcy1kYXRhb3JkZXJlZFR5cGVTZXRKQ2xhc3NEYXRhS2luZC5yZWNvcmRKUmVjb3JkcmVjb3JkX2NvbnRhaW5lcihyZWNvcmQtZmllbGRDbG9zdXJlQ2xhc3NEYXRhY2xvc3VyZS1jbGFzcy1kYXRhSkNsYXNzRGF0YUtpbmQuY2xvc3VyZUNsb3N1cmVDbGFzc0RlZmluaXRpb25jbG9zdXJlLWNsYXNzLWRlZmluaXRpb25DbG9zdXJlQ2xhc3NEZWZpbml0aW9uLm5vZGUgZm9yIENsb3N1cmVDbGFzc0RlZmluaXRpb24oa2luZDpDbG9zdXJlTWVtYmVyRGF0YW1lbWJlclRoaXNUeXBlc3RhdGljVHlwZXNDbG9zdXJlTWVtYmVyRGF0YS5zdGF0aWNUeXBlc19DbG9zdXJlRnVuY3Rpb25EYXRhJkNsb3N1cmVNZW1iZXJEYXRhJkZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbl9DbG9zdXJlRnVuY3Rpb25EYXRhJkNsb3N1cmVNZW1iZXJEYXRhJkZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbiZGdW5jdGlvbkRhdGFGb3JFYWNoUGFyYW1ldGVyTWl4aW5DbG9zdXJlRnVuY3Rpb25EYXRhY2xvc3VyZS1mdW5jdGlvbi1kYXRhY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3NDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5ub25lQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucHJvcGVydHlDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5wYXJhbWV0ZXJDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5pbnN0YW5jZUZpZWxkSk1lbWJlckRhdGFLaW5kLmNsb3N1cmVGdW5jdGlvbkNsb3N1cmVGaWVsZERhdGFjbG9zdXJlLWZpZWxkLWRhdGFKTWVtYmVyRGF0YUtpbmQuY2xvc3VyZUZpZWxkc291cmNlTm9kZVVuZXhwZWN0ZWQgbm9kZSB0eXBlIENsb3N1cmVGaWVsZERhdGEuZ2V0RmllbGRUeXBlZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb25VbmV4cGVjdGVkIGZpZWxkIENsb3N1cmVGaWVsZERhdGEuZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb25DbG9zdXJlTWVtYmVyRGVmaW5pdGlvbmNsb3N1cmUtbWVtYmVyLWRlZmluaXRpb25DbG9zdXJlTWVtYmVyRGVmaW5pdGlvbihraW5kOlJlY29yZENvbnRhaW5lckRlZmluaXRpb25yZWNvcmQtZGVmaW5pdGlvblJlY29yZENvbnRhaW5lckRlZmluaXRpb24ubm9kZSBmb3IgUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbihraW5kOkNsb3N1cmVSdGlOZWVkX2dldExvY2FsT25seSBrbm93IGhvdyB0byBnZXQvY3JlYXRlIGxvY2FscyBmb3IgVmFyaWFibGVEZWNsYXJhdGlvbnMgb3IgVHlwZVBhcmFtZXRlclR5cGVXaXRoQ29udGV4dC4gUmVjaWV2ZWQgQm94TG9jYWxUaGlzTG9jYWxKc0tlcm5lbFRvRWxlbWVudE1hcGpzLWtlcm5lbC10by1lbGVtZW50LW1hcGxpYnJhcnlUYWdjbGFzc1RhZ21lbWJlclRhZ3R5cGVWYXJpYWJsZVRhZ3R5cGUtdmFyaWFibGVzbGlicmFyeURhdGFUYWdsaWJyYXJ5LWRhdGFjbGFzc0RhdGFUYWdjbGFzcy1kYXRhdHlwZWRlZkRhdGFUYWd0eXBlZGVmLWRhdGFtZW1iZXJEYXRhVGFnbWVtYmVyLWRhdGF0eXBlVmFyaWFibGVEYXRhVGFndHlwZS12YXJpYWJsZS1kYXRhbmVzdGVkQ2xvc3VyZXNUYWduZXN0ZWQtY2xvc3VyZXNfdHlwZUNvbnZlcnRlcl9jb25zdGFudEVudmlyb25tZW50X3R5cGVFbnZpcm9ubWVudF9jbGFzc0hpZXJhcmNoeV9jb25zdGFudFZhbHVlZmllcnR5cGVkZWZNYXB0eXBlVmFyaWFibGVNYXBjb25zdHJ1Y3Rvck1hcG1ldGhvZE1hcF9uZXN0ZWRDbG9zdXJlTWFwX2dlbmVyYXRvckJvZGllc19pbmplY3RlZENsYXNzTWVtYmVyc19jYWNoZWRUeXBlTG9va3VwUmF3X2NhY2hlZFR5cGVMb29rdXBGdWxsb2xkTGlicmFyeWdldEVudm5ld0xpYnJhcnluZXdFbnZyZWdpc3RlckxpYnJhcnlvbGRDbGFzc25ld0NsYXNzb2xkVHlwZWRlZm5ld1R5cGVkZWZvbGRNZW1iZXJza2lwSW5kZXhuZXdNZW1iZXJNZW1iZXIgaW5kZXggbWlzbWF0Y2g6IE9sZCBtZW1iZXIgIGhhcyBpbmRleCB3aGVyZWFzIG5ldyBtZW1iZXIgb2xkVHlwZVZhcmlhYmxlb2xkVHlwZVZhcmlhYmxlRGF0YW5ld1R5cGVEZWNsYXJhdGlvbm5ld1R5cGVWYXJpYWJsZWNyZWF0ZVR5cGVWYXJpYWJsZWVudklzQ2xvc2VkdHlwZWRlZkNvdW50cmVnaXN0ZXJUeXBlZGVmcmVnaXN0ZXJNZW1iZXJyZWdpc3RlclR5cGVWYXJpYWJsZWZvckVhY2hMaWJyYXJ5Zm9yRWFjaFR5cGVkZWZmb3JFYWNoTWVtYmVyX19fbWFpbkZ1bmN0aW9uZ2V0TWV0aG9kSW50ZXJuYWxfbWFpbkxpYnJhcnlnZXRMaWJyYXJ5SW50ZXJuYWxmcm9tU3Bhbm5hYmxlTm8gZGF0YSBmb3IgbGlicmFyeUVudl9nZXRMaWJyYXJ5TmFtZWNoZWNrRmFtaWx5bG9va3VwTWVtYmVyX2ZvckVhY2hMaWJyYXJ5TWVtYmVyY2xhc3NFbnZnZXRDbGFzc0ludGVybmFsX2ZvckVhY2hDbGFzc2dldFN1cGVyVHlwZV9lbnN1cmVTdXBlcnR5cGVzX2Vuc3VyZVRoaXNBbmRSYXdUeXBlZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWxnZXRUeXBlVmFyaWFibGVzdXBlcmRhdGFsaW5rQnVpbGRlcmRlZmF1bHRTdXBlcmNsYXNzc2V0QnVpbGRlcmNyZWF0ZU9yZGVyZWRUeXBlU2V0Z2V0VHlwZWRlZkludGVybmFsZ2V0RmllbGRJbnRlcm5hbGdldENvbnN0cnVjdG9ySW50ZXJuYWxObyBlbmNsb3NpbmcgY2xhc3MgZm9yIHN1cGVyIG1lbWJlciBhY2Nlc3MgaW4gc3VwZXJNZW1iZXJnZXRTdXBlckNvbnN0cnVjdG9ydGFyZ2V0Tm9kZXNvdXJjZUNsYXNzdGFyZ2V0Q2xhc3NTdXBlciBjb25zdHJ1Y3RvciBmb3IgIG5vdCBmb3VuZC5nZXRQYXJhbWV0ZXJUeXBlc29ydGVkTmFtZWRQYXJhbWV0ZXJzY29tcHV0ZUNvbnN0YW50VmFsdWVfZ2V0Q29uc3RhbnRWYWx1ZWNvbnN0YW50UmVxdWlyZWRfZ2V0RnVuY3Rpb25UeXBlX2dldEZ1bmN0aW9uVHlwZVZhcmlhYmxlc19nZXRGaWVsZFR5cGVnZXRCb3VuZF9nZXRUeXBlVmFyaWFibGVEZWZhdWx0VHlwZWdldERlZmF1bHRUeXBlX2lzTWl4aW5BcHBsaWNhdGlvbl9pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uX2ZvckVhY2hTdXBlcnR5cGVfZm9yRWFjaENvbnN0cnVjdG9yX2ZvckVhY2hMb2NhbENsYXNzTWVtYmVyX2ZvckVhY2hDbGFzc01lbWJlcl9nZXRDb25zdHJ1Y3RvckNvbnN0YW50X2dldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uZ2V0T3JkZXJlZFR5cGVTZXRtYXhEZXB0aGdldE1lbWJlckRlZmluaXRpb25JbnRlcm5hbGdldENsYXNzRGVmaW5pdGlvbkludGVybmFsbWVtYmVyRGVmaW5pdGlvbmNhY2hlZFN0YXRpY1R5cGVzTm8gc3RhdGljIHR5cGVzIGNhY2hlZCBmb3IgZ2V0R2V0dGVyU2VsZWN0b3JnZXRTZXR0ZXJTZWxlY3RvcmdldEludm9jYXRpb25TZWxlY3RvckNhbiBvbmx5IGdldCB0aGUgc2VsZWN0b3IgZm9yIGEgcHJvcGVydHkgZ2V0IG9yIGFuIGludm9jYXRpb246IGlyTmFtZXR5cGVMb29rdXByZXNvbHZlQXNSYXdfdHlwZUxvb2t1cGNhY2hlZE1heUxvb2t1cEluTWFpbm1heUxvb2t1cEluTWFpbm1haW5VcmlmaW5kSW5MaWJyYXJ5ZmluZEluX2dldFN0cmluZ0FyZ3VtZW50SlMgYnVpbHRpbiBleHByZXNzaW9uIGhhcyBubyB0eXBlLkpTIGJ1aWx0aW4gaXMgbWlzc2luZyBuYW1lLlVuZXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQuSlMgZW1iZWRkZWQgZ2xvYmFsIGV4cHJlc3Npb24gaGFzIG5vIHR5cGUuSlMgZW1iZWRkZWQgZ2xvYmFsIGlzIG1pc3NpbmcgbmFtZS5KUyBlbWJlZGRlZCBnbG9iYWwgaGFzIG1vcmUgdGhhbiAyIGFyZ3VtZW50cy5ObyBleHByZXNzaW9uIGZvciBjb25zdGFudC5ObyBjb25zdGFudCBmb3IgZ2V0TWV0YWRhdGFObyBzdXBlciBub1N1Y2hNZXRob2QgZm91bmQgZm9yIGNsYXNzIGNyZWF0ZUNvbnN0cnVjdG9yQm9keWNyZWF0ZUdlbmVyYXRvckJvZHlVbmV4cGVjdGVkIGVudGl0eSAsIGV4cGVjdGVkIGZhbWlseSBsaWJyYXJ5TGlzdEludGVybmFsTm8gbGlicmFyeSBlbnRpdHkgZm9yIE5vIGNsYXNzIGVudGl0eSBmb3IgTm8gZmllbGQgZW50aXR5IGZvciBObyBmdW5jdGlvbiBlbnRpdHkgZm9yIE5vIGNvbnN0cnVjdG9yIGVudGl0eSBmb3IgTm8gdHlwZSB2YXJpYWJsZSBlbnRpdHkgZm9yICBvbiBObyB0eXBlZGVmIGVudGl0eSBmb3IgX2dldENvbnN0cnVjdG9yQm9keV9nZXRQYXJhbWV0ZXJTdHJ1Y3R1cmVGcm9tRnVuY3Rpb25Ob2RlYWRkQ29uc3RydWN0b3JCb2R5Z2V0UGFyZW50TWVtYmVyVW5leHBlY3RlZCBtZW1iZXIga2luZCBfY29uc3RydWN0UmVjb3JkRmllbGRFbnRyeWJveGVkRmllbGRib3hlZEZpZWxkc2NhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3Jjb250YWluZXJEYXRhZXh0ZW5kQ2xhc3NfaXNJblJlY29yZHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlY29uc3RydWN0Q2xvc3VyZUNsYXNzdHlwZVZhcmlhYmxlQWNjZXNzX2NvbXB1dGVDbG9zdXJlTmFtZWNsb3N1cmVEYXRhX2J1aWxkQ2xvc3VyZUNsYXNzRmllbGRzX2NvbnN0cnVjdFNpZ25hdHVyZU1ldGhvZGZpZWxkTnVtYmVyY2FwdHVyZWRMb2NhbGNvbnN0cnVjdGVkRmllbGRfY29uc3RydWN0Q2xvc3VyZUZpZWxkRm9yUmVjb3JkX2NvbnN0cnVjdENsb3N1cmVGaWVsZFVuZXhwZWN0ZWQgZmllbGQgbm9kZSB0eXBlOiBfYm94X19nZXRDbG9zdXJlVmFyaWFibGVOYW1lYW5vbnltb3VzX2NhcHR1cmVkX2Z1bmN0aW9uRGF0YUpzRWxlbWVudEVudmlyb25tZW50VW5leHBlY3RlZCBtYXJrZXIgVGhlIGNvbnN0cnVjdG9yICcnIHdhcyBub3QgZm91bmQgaW4gY2xhc3MgJ2luIGxpYnJhcnkgVGhlIG1lbWJlciAnJyB3YXMgbm90IGZvdW5kIGluICcgd2FzIG5vdCBmb3VuZCBpbiBsaWJyYXJ5ICcnICB3YXMgbm90IGZvdW5kIGluIGxpYnJhcnkgJycgd2FzIG5vdCBmb3VuZC5Kc0JlaGF2aW9yQnVpbGRlckpzQ29uc3RhbnRFbnZpcm9ubWVudF92YWx1ZU1hcEpzRXZhbHVhdGlvbkVudmlyb25tZW50X0V2YWx1YXRpb25FbnZpcm9ubWVudC5nZXRMb2NhbENvbnN0YW50X0VudGl0eUxvb2t1cExpYnJhcnkgZm9yIGluZGV4ICBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuQ2xhc3MgZm9yIGluZGV4IFR5cGVkZWYgZm9yIGluZGV4IE1lbWJlciBmb3IgaW5kZXggVHlwZSB2YXJpYWJsZSBmb3IgaW5kZXggTm8gbGlicmFyeSBmb3VuZCBmb3IgaW5kZXggTm8gY2xhc3MgZm91bmQgZm9yIGluZGV4IE5vIHR5cGVkZWYgZm91bmQgZm9yIGluZGV4IE5vIG1lbWJlciBmb3VuZCBmb3IgaW5kZXggTm8gdHlwZSB2YXJpYWJsZSBmb3VuZCBmb3IgaW5kZXggQ2xvc2VkRW50aXR5TG9va3VwTGF0ZU1lbWJlcktpbmRMYXRlTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHlMYXRlTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5Q2xvc2VkRW50aXR5UmVhZGVyX3JlYWRMYXRlTWVtYmVyRnJvbURhdGFTb3VyY2VVbmV4cGVjdGVkIGxhdGUgbWVtYmVyIGtpbmQ6IENsb3NlZEVudGl0eVdyaXRlcl9lYXJseU1lbWJlckluZGV4TGltaXRfd3JpdGVMYXRlTWVtYmVyVG9EYXRhU2lua1VuZXhwZWN0ZWQgbGF0ZSBtZW1iZXIgRnVuY3Rpb25TZXRKc0Nsb3NlZFdvcmxkY2xvc2VkLXdvcmxkX2FsbEZ1bmN0aW9uc19saXZlTWl4aW5Vc2VzX3N1YnR5cGVDb3ZlcmVkQnlDYWNoZV9zb3J0ZXJtZW1iZXJBY2Nlc3NhbGxvY2F0b3JBbmFseXNpc3NlY29uZE1hcHN1YmNsYXNzZXNOZWVkTm9TdWNoTWV0aG9kcm9vdE5vZGVyb290Q2xhc3NfaGFzQ29uY3JldGVNYXRjaHN0b3BBdFN1cGVyY2xhc3NJdGVyYXRpb25TdGVwLlNUT1BObyBjbGFzcyBzZXQgZm9yIHN1YnR5cGVOb2Rlc3VidHlwZU5vZGVzdHlwZVNldG90aGVyVHlwZVNldHNvdGhlckNsYXNzb3RoZXJUeXBlU2V0Y29tbW9uU3VwZXJ0eXBlc2FkZExpdmVVc2VfaXNOYW1lZE1peGluQXBwbGljYXRpb25jdXJyZW50TWl4aW5fZW5zdXJlRnVuY3Rpb25TZXRoYXNBbnlVc2VyRGVmaW5lZEdldHRlciBoYXMgbm90IGJlZW4gaW5zdGFudGlhdGVkLktlcm5lbFNvcnRlcl9jb21wYXJlTGlicmFyaWVzX2NvbXBhcmVTb3VyY2VTcGFuc2VudGl0eTFzb3VyY2VTcGFuMWVudGl0eTJzb3VyY2VTcGFuMnNvcnRMaWJyYXJpZXNzb3J0TWVtYmVyc2NvbXBhcmVNZW1iZXJzQnlMb2NhdGlvbnNvcnRDbGFzc2VzcmVndWxhckNsYXNzZXN1bm5hbWVkTWl4aW5zY29tcGFyZUNsYXNzZXNCeUxvY2F0aW9uTXVsdGlwbGUgbWl4aW5zIG5hbWVkIHNvcnRUeXBlZGVmc2NvbXBhcmVMaWJyYXJpZXNCeUxvY2F0aW9uZGVmaW5pdGlvbjFkZWZpbml0aW9uMmNvbXBhcmVUeXBlZGVmc0J5TG9jYXRpb25LZXJuZWxTb3J0ZXIuY29tcGFyZVR5cGVkZWZzQnlMb2NhdGlvbiB1bmltcGxlbWVudGVkTG9jYWxMb29rdXBJbXBsX0VudGl0eUNvbnZlcnRlcl9jbG9zdXJlRGF0YUJ1aWxkZXJfYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5a091dHB1dFVuaXREYXRhX2NvbnZlcnRCYWNrZW5kVXNhZ2VfY29udmVydE5hdGl2ZURhdGFfY29udmVydEludGVyY2VwdG9yRGF0YWNvbnZlcnRDbGFzc0hpZXJhcmNoeU5vZGV0b0JhY2tlbmRDbGFzc2hpZXJhcmNoeURlcHRoY29udmVydENsYXNzU2V0bmV3Q2xhc3NTZXRuZXdTdWJ0eXBldG9CYWNrZW5kTWVtYmVyU2V0dG9CYWNrZW5kQ2xhc3NNYXB0b0JhY2tlbmRDbGFzc1NldHRvQmFja2VuZE1lbWJlck1hcGtlcm5lbFJ0aU5lZWRsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZWxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZWxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nVHlwZUFyZ3VtZW50c2xvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHNqUnRpTmVlZF9jb252ZXJ0UnVudGltZVR5cGVzTmVlZGNhbGxNZXRob2RzTmVlZGluZ1NpZ25hdHVyZWNhbGxNZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHNtZXRob2RzTmVlZGluZ1NpZ25hdHVyZW1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50c29sZE5vU3VjaE1ldGhvZERhdGF0b0JhY2tlbmRGdW5jdGlvblNldG9sZEFubm90YXRpb25zRGF0YV9jb252ZXJ0T3V0cHV0VW5pdERhdGFoZWxwZXJGdW5jdGlvbnNVc2VkaGVscGVyQ2xhc3Nlc1VzZWR0b0JhY2tlbmRUeXBlaXNIdG1sTG9hZGVkX2NvbnZlcnROYXRpdmVCYXNpY0RhdGF0b0JhY2tlbmRMaWJyYXJ5TWFwY29udmVydE5hdGl2ZUJlaGF2aW9yVHlwZWFsbG93RnJlZVZhcmlhYmxlc2NvbnZlcnROYXRpdmVCZWhhdmlvcm5ld0JlaGF2aW9yYmFja2VuZE1ldGhvZGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50c3NlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzdG9CYWNrZW5kTGlicmFyeWluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHNvcmlnaW5hbENsb3N1cmVGdW5jdGlvbk5vZGViYWNrZW5kRW50aXR5VHJpdmlhbENsb3N1cmVSdGlOZWVkSnNDbG9zdXJlUnRpTmVlZEpzVG9Gcm9udGVuZE1hcHRvQmFja2VuZExpYnJhcnlTZXR0b0JhY2tlbmRGaWVsZFNldGJhY2tlbmRGaWVsZGJhY2tlbmRGdW5jdGlvblYxSnNUb0Zyb250ZW5kTWFwSW1wbF9iYWNrZW5kdG9CYWNrZW5kRW50aXR5dG9CYWNrZW5kVHlwZWRlZnRvQmFja2VuZFR5cGVWYXJpYWJsZXVuZXhwZWN0ZWQgZW50aXR5IExvY2FsIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzIGFyZSBub3Qgc3VwcG9ydGVkLmluZGV4ZWRUeXBlVmFyaWFibGVOdWxsIG5vdCBhbGxvd2VkIGFzIGNvbnN0YW50IHZhbHVlLl9UeXBlQ29udmVydGVyX2Z1bmN0aW9uVHlwZVZhcmlhYmxlc2NvbnZlcnRUeXBlc2NvbnZlcnRlckZ1bmN0aW9uIHR5cGUgdmFyaWFibGUgIG5vdCBmb3VuZCBpbiBfQ29uc3RhbnRDb252ZXJ0ZXJ0eXBlQ29udmVydGVyX2hhbmRsZVZhbHVlc05vIGJhY2tlbmQgZmllbGQgZm9yIFVuZXhwZWN0ZWQgdmlzaXRJbnRlcmNlcHRvciBVbmV4cGVjdGVkIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb252ZXJ0TWFwY29udmVydEtleWNvbnZlcnRWYWx1ZW5ld01hcG5ld0tleWRhcnQyanMuYmFja2VuZF9hcGlkYXJ0MmpzLmNvbW1vbi5yZXNvbHV0aW9uSXJBbm5vdGF0aW9uRGF0YV9uYXRpdmVDbGFzc05hbWVzX25hdGl2ZU1lbWJlcnNfbmF0aXZlTWVtYmVyTmFtZXNfY3JlYXRlc0Fubm90YXRpb25zX3JldHVybnNBbm5vdGF0aW9uc19qc0ludGVyb3BMaWJyYXJ5TmFtZXNfanNJbnRlcm9wQ2xhc3NOYW1lc19hbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzX2pzSW50ZXJvcE1lbWJlck5hbWVzX21lbWJlclByYWdtYUFubm90YXRpb25zZ2V0TmF0aXZlQ2xhc3NOYW1laGFzTmF0aXZlQm9keWdldE5hdGl2ZU1lbWJlck5hbWVnZXRNZW1iZXJQcmFnbWFBbm5vdGF0aW9uRGF0YVByYWdtYUFubm90YXRpb25EYXRhUHJhZ21hQW5ub3RhdGlvbkRhdGEocHJvY2Vzc0Fubm90YXRpb25zbW9kdWxhckNvcmVwcm9jZXNzTWVtYmVycHJhZ21hQW5ub3RhdGlvbm5hdGl2ZUNsYXNzTmFtZV9nZXROYXRpdmVDbGFzc05hbWVfaXNOYXRpdmVNZW1iZXJfZ2V0TmF0aXZlTWVtYmVyTmFtZV9nZXRDcmVhdGVzQW5ub3RhdGlvbl9nZXRSZXR1cm5zQW5ub3RhdGlvbl9nZXRKc0ludGVyb3BOYW1lX2lzQW5vbnltb3VzSnNJbnRlcm9wX2dldFByYWdtYUFubm90YXRpb25jb21wdXRlUHJhZ21hQW5ub3RhdGlvbkRhdGFGcm9tSXJjb25zdGFudEV4cHJlc3Npb25VbmV4cGVjdGVkIHVuZXZhbHVhdGVkIGNvbnN0YW50IG9uIEtlcm5lbFNjb3BlSW5mb3dpdGhCb3hlZFZhcmlhYmxlc0tlcm5lbFNjb3BlSW5mbyh0aGlzPWZyZWVWcmlhYmxlcz1mcmVlVmFyaWFibGVzRm9yUnRpPXtLZXJuZWxDYXB0dXJlZFNjb3BlZm9yU2lnbmF0dXJlS2VybmVsQ2FwdHVyZWRMb29wU2NvcGVOb2RlQm94VmFyaWFibGVVc2VLaW5kbG9jYWxUeXBlbWFwTGl0ZXJhbGNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50c3RhdGljVHlwZUFyZ3VtZW50aW5zdGFuY2VUeXBlQXJndW1lbnRsb2NhbFR5cGVBcmd1bWVudG1lbWJlclBhcmFtZXRlcmxvY2FsUGFyYW1ldGVybWVtYmVyUmV0dXJuVHlwZWxvY2FsUmV0dXJuVHlwZWZpZWxkVHlwZWluc3RhbnRpYXRpb25UeXBlQXJndW1lbnRWYXJpYWJsZVVzZV9zaW1wbGVWYXJpYWJsZVVzZShraW5kPSxtZW1iZXI9bG9jYWxGdW5jdGlvbj0saW52b2NhdGlvbj1pbnN0YW50aWF0aW9uPVR5cGVWYXJpYWJsZUtpbmRUeXBlVmFyaWFibGVLaW5kLmNsc1R5cGVWYXJpYWJsZUtpbmQubWV0aG9kVHlwZVZhcmlhYmxlS2luZC5sb2NhbFR5cGVWYXJpYWJsZUtpbmQuZnVuY3Rpb25UeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHRVbmV4cGVjdGVkIHR5cGUgZGVjbGFyYXRpb246IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dC5hY2NlcHRUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQudmlzaXRDaGlsZHJlblR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCh0eXBlPSxjb250ZXh0PSx0eXBlRGVjbGFyYXRpb249SW1wYWN0UmVnaXN0cnlyZWdpc3RlckludExpdGVyYWxyZWdpc3RlckRvdWJsZUxpdGVyYWxyZWdpc3RlckJvb2xMaXRlcmFscmVnaXN0ZXJTdHJpbmdMaXRlcmFscmVnaXN0ZXJTeW1ib2xMaXRlcmFscmVnaXN0ZXJOdWxsTGl0ZXJhbHJlZ2lzdGVyTGlzdExpdGVyYWxyZWdpc3RlclNldExpdGVyYWxyZWdpc3Rlck1hcExpdGVyYWxyZWdpc3RlclN0YXRpY1RlYXJPZmZyZWdpc3RlclN0YXRpY0dldHJlZ2lzdGVyU3RhdGljU2V0cmVnaXN0ZXJBc3NlcnR3aXRoTWVzc2FnZXJlZ2lzdGVyU3luY1N0YXJyZWdpc3RlckFzeW5jcmVnaXN0ZXJBc3luY1N0YXJyZWdpc3RlclN0cmluZ0NvbmNhdGVuYXRpb25yZWdpc3RlckxvY2FsRnVuY3Rpb25yZWdpc3RlckxvY2FsV2l0aG91dEluaXRpYWxpemVycmVnaXN0ZXJJbXBsaWNpdENhc3RyZWdpc3RlckFzQ2FzdHJlZ2lzdGVyVGhyb3dyZWdpc3RlclN5bmNGb3JJbml0ZXJhdG9yQ2xhc3NSZWxhdGlvbnJlZ2lzdGVyQXN5bmNGb3JJbnJlZ2lzdGVyQ2F0Y2hyZWdpc3RlclN0YWNrVHJhY2VyZWdpc3RlckNhdGNoVHlwZXJlZ2lzdGVyRmllbGRJbml0aWFsaXphdGlvbnJlZ2lzdGVyRmllbGRDb25zdGFudEluaXRpYWxpemF0aW9ucmVnaXN0ZXJMb2FkTGlicmFyeXJlZ2lzdGVyUmVkaXJlY3RpbmdJbml0aWFsaXplcnJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2tyZWdpc3RlckxhenlGaWVsZHJlZ2lzdGVyTmV3cmVnaXN0ZXJDb25zdEluc3RhbnRpYXRpb25yZWdpc3RlckxvY2FsRnVuY3Rpb25JbnZvY2F0aW9ucmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb25yZWdpc3RlckZ1bmN0aW9uSW52b2NhdGlvbnJlZ2lzdGVyRHluYW1pY0dldHJlZ2lzdGVySW5zdGFuY2VHZXRyZWdpc3RlckR5bmFtaWNTZXRyZWdpc3Rlckluc3RhbmNlU2V0cmVnaXN0ZXJTdXBlckludm9jYXRpb25yZWdpc3RlclN1cGVyR2V0cmVnaXN0ZXJTdXBlclNldHJlZ2lzdGVyU3VwZXJJbml0aWFsaXplcnJlZ2lzdGVyQ29uc3RydWN0b3JOb2RlcmVnaXN0ZXJGaWVsZE5vZGVyZWdpc3RlclByb2NlZHVyZU5vZGVyZWdpc3RlclN0YXRpY0ludm9jYXRpb25Ob2RlcmVnaXN0ZXJTd2l0Y2hTdGF0ZW1lbnROb2RlcmVnaXN0ZXJDb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVJbXBhY3RCdWlsZGVyQmFzZWhhbmRsZUFzeW5jTWFya2VyVW5leHBlY3RlZCBhc3luYyBtYXJrZXI6IHBvc2l0aW9uQXJndW1lbnRzX0ltcGFjdEJ1aWxkZXImSW1wYWN0QnVpbGRlckJhc2UmSW1wYWN0UmVnaXN0cnlNaXhpbmltcGFjdERhdGFfcmVnaXN0ZXJGZWF0dXJlX3JlZ2lzdGVyVHlwZVVzZV9zdXBlckluaXRpYWxpemVyc19zdXBlclNldHNfc3VwZXJHZXRzX3N1cGVySW52b2NhdGlvbnNfaW5zdGFuY2VTZXRzX2R5bmFtaWNTZXRzX2luc3RhbmNlR2V0c19keW5hbWljR2V0c19mdW5jdGlvbkludm9jYXRpb25zX2luc3RhbmNlSW52b2NhdGlvbnNfZHluYW1pY0ludm9jYXRpb25zX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uc19zdGF0aWNJbnZvY2F0aW9uc19jb25zdHJ1Y3Rvckludm9jYXRpb25zX2NvbnN0SW5zdGFudGlhdGlvbnNfRmVhdHVyZS5sYXp5RmllbGRfVHlwZVVzZUtpbmQucGFyYW1ldGVyQ2hlY2tfcmVkaXJlY3RpbmdJbml0aWFsaXplcnNfRmVhdHVyZS5sb2FkTGlicmFyeV9maWVsZEluaXRpYWxpemVyc19maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzX1R5cGVVc2VLaW5kLmNhdGNoVHlwZV9GZWF0dXJlLnN0YWNrVHJhY2VfRmVhdHVyZS5jYXRjaENsYXVzZV9mb3JJbkRhdGFfRmVhdHVyZS50aHJvd0V4cHJlc3Npb25fVHlwZVVzZUtpbmQuYXNDYXN0X1R5cGVVc2VLaW5kLmltcGxpY2l0Q2FzdF9UeXBlVXNlS2luZC5pc0NoZWNrX0ZlYXR1cmUubG9jYWxXaXRob3V0SW5pdGlhbGl6ZXJfRmVhdHVyZS5zdHJpbmdDb25jYXRlbmF0aW9uX1R5cGVVc2VLaW5kLmFzeW5jU3Rhck1hcmtlcl9UeXBlVXNlS2luZC5hc3luY01hcmtlcl9UeXBlVXNlS2luZC5zeW5jU3Rhck1hcmtlcl9GZWF0dXJlLmFzc2VydFdpdGhNZXNzYWdlX0ZlYXR1cmUuYXNzZXJ0V2l0aG91dE1lc3NhZ2Vfc3RhdGljU2V0c19zdGF0aWNHZXRzX3N0YXRpY1RlYXJPZmZzX21hcExpdGVyYWxzX2xpc3RMaXRlcmFsc19zZXRMaXRlcmFsc19GZWF0dXJlLm51bGxMaXRlcmFsX3N5bWJvbExpdGVyYWxzX3N0cmluZ0xpdGVyYWxzX2Jvb2xMaXRlcmFsc19kb3VibGVMaXRlcmFsc19pbnRMaXRlcmFsc19ydW50aW1lVHlwZVVzZXNfY29uc3RydWN0b3JOb2Rlc19maWVsZE5vZGVzX3Byb2NlZHVyZU5vZGVzX3N0YXRpY0ludm9jYXRpb25Ob2Rlc19zd2l0Y2hTdGF0ZW1lbnROb2Rlc19jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzSW1wYWN0QnVpbGRlckltcGFjdEJ1aWxkZXJEYXRhQ29uc3RhbnRJbXBhY3RWaXNpdG9yVW5leHBlY3RlZCBjb25zdGFudCBfZ2V0TmFtZWRBcmd1bWVudHNNb2R1bGFyQ29yZU1vZHVsYXJNZW1iZXJEYXRhTW9kdWxhclN0cmF0ZWd5Y29tcHV0ZU1vZGVsVmFyaWFibGVTY29wZU1vZGVsVmFyaWFibGVTY29wZU1vZGVsSW1wbF9hc3NpZ25lZFZhcmlhYmxlc2NyZWF0ZVNjb3BlRm9ycmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlVmFyaWFibGVTY29wZVZhcmlhYmxlU2NvcGVJbXBsX3N1YlNjb3Blc2FkZFN1YlNjb3Blc3ViU2NvcGVWYXJpYWJsZUNvbGxlY3Rvck1peGluY3VycmVudFZhcmlhYmxlU2NvcGV2aXNpdEluVmFyaWFibGVTY29wZW9sZFNjb3BlcmVnaXN0ZXJDb250aW51ZVN3aXRjaHJlZ2lzdGVyQmFja2VuZEZ1bmN0aW9uVXNlcmVnaXN0ZXJCYWNrZW5kQ2xhc3NVc2VyZWdpc3Rlckdsb2JhbENsYXNzRGVwZW5kZW5jeWJhY2tlbmRJbXBhY3RyZWdpc3RlclVzZWRNZW1iZXJCYWNrZW5kVXNhZ2VCdWlsZGVySW1wbF9mcm9udGVuZFN0cmF0ZWd5X2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzX2hlbHBlckZ1bmN0aW9uc1VzZWRfaGVscGVyQ2xhc3Nlc1VzZWRfbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZ19uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eV9pc1ZhbGlkQmFja2VuZFVzZUJhY2tlbmQgdXNlIG9mIF9pc1ZhbGlkRW50aXR5X2ludGVybmFsL2pzX3J1bnRpbWUvbGliL19wcm9jZXNzQmFja2VuZFN0YXRpY1VzZV9wcm9jZXNzQmFja2VuZEluc3RhbnRpYXRpb25CYWNrZW5kVXNhZ2VJbXBsYmFja2VuZC11c2FnZWpzX2JhY2tlbmQuYmFja2VuZC5yZXNvbHV0aW9uX2xpc3RlbmVyUmVzb2x1dGlvbkVucXVldWVyTGlzdGVuZXJfZGVmZXJyZWRMb2FkVGFza19pc0xvYWRMaWJyYXJ5RnVuY3Rpb25SZXNvbHZlZF9yZWdpc3RlckJhY2tlbmRJbXBhY3RfYWRkSW50ZXJjZXB0b3JzX2NvbXB1dGVEZWZlcnJlZExvYWRpbmdJbXBhY3RkZWZlcnJlZCBsb2FkbmF0aXZlIGNsYXNzZXNtYWluIGltcGFjdGNvbXB1dGVIZWxwZXJzSW1wYWN0YWxsUGFyYW1ldGVyVHlwZXNfcmVnaXN0ZXJSdW50aW1lVHlwZV9yZWdpc3RlckNoZWNrZWRNb2RlSGVscGVyc2pzX2JhY2tlbmQucnVudGltZV90eXBlc19yZXNvbHV0aW9uUnRpTm9kZV90ZXN0U3RhdGVfbGl0ZXJhbFN0YXRlaGFzRGlyZWN0VGVzdGhhc0luZGlyZWN0VGVzdGhhc1Rlc3RoYXNEaXJlY3RMaXRlcmFsaGFzSW5kaXJlY3RMaXRlcmFsaGFzTGl0ZXJhbG1hcmtUZXN0c2V0VGVzdFN0YXRlbWFya0RpcmVjdFRlc3RtYXJrSW5kaXJlY3RUZXN0bWFya0RpcmVjdExpdGVyYWxzZXRMaXRlcmFsU3RhdGVtYXJrSW5kaXJlY3RMaXRlcmFsQ2xhc3NOb2RlTWV0aG9kTm9kZWlzQ2FsbFRhcmdldGluc3RhbmNlTmFtZWlzTm9TdWNoTWV0aG9kc2VsZWN0b3JBcHBsaWVzTWV0aG9kTm9kZShmdW5jdGlvbj0scGFyYW1ldGVyU3RydWN0dXJlPSxpc0NhbGxUYXJnZXQ9LGluc3RhbmNlTmFtZT1UeXBlVmFyaWFibGVUZXN0c19tZXRob2RzX2FwcGxpZWRTZWxlY3Rvck1hcF9pbnN0YW50aWF0aW9uTWFwX3NldHVwRGVwZW5kZW5jaWVzX3Byb3BhZ2F0ZVRlc3RzX3Byb3BhZ2F0ZUxpdGVyYWxzX2NvbGxlY3RSZXN1bHRzY2xhc3NUZXN0c0ZvclRlc3RpbmdkaXJlY3RDbGFzc1Rlc3RzRm9yVGVzdGluZ21ldGhvZFRlc3RzRm9yVGVzdGluZ2RpcmVjdE1ldGhvZFRlc3RzRm9yVGVzdGluZ2dldFR5cGVBcmd1bWVudERlcGVuZGVuY2llc2ZvckVhY2hBcHBsaWVkU2VsZWN0b3Jmb3JFYWNoR2VuZXJpY0luc3RhbnRpYXRpb25fZ2V0Q2xhc3NOb2RlX2dldE1ldGhvZE5vZGVyZWdpc3RlckRlcGVuZGVuY2llc3Byb2Nlc3NFbnRpdHlwcm9jZXNzVHlwZVZhcmlhYmxlVHlwZXByb2Nlc3NUeXBlYWRkTm9kZSBkaXJlY3QgdGVzdCBpbmRpcmVjdCB0ZXN0IGRpcmVjdCBsaXRlcmFsIGluZGlyZWN0IGxpdGVyYWxjbGFzc2VzOm1ldGhvZHM6ZXhwbGljaXQgaXMtdGVzdHM6aW1wbGljaXQgaXMtdGVzdHM6YWRkSW1wbGljaXRDaGVja2FkZEltcGxpY2l0Q2hlY2tzVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWRSdW50aW1lVHlwZXNOZWVkSW1wbHJ1bnRpbWUtdHlwZXMtbmVlZFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyY29tcHV0ZVJ1bnRpbWVUeXBlc05lZWRUcml2aWFsUnVudGltZVR5cGVzTmVlZEJ1aWxkZXJSdW50aW1lVHlwZXNOZWVkQnVpbGRlckltcGxjbGFzc2VzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsc21ldGhvZHNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzbG9jYWxGdW5jdGlvbnNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHNGb3JUZXN0aW5naW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50c0ZvclRlc3Rpbmd0eXBlVmFyaWFibGVUZXN0c0ZvclRlc3Rpbmdwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzY2hlY2tDbG9zdXJlc3BvdGVudGlhbFN1YnR5cGVPZmNoZWNrRnVuY3Rpb25UeXBlbG9jYWxGdW5jdGlvbnNUb1JlbW92ZWNsb3N1cml6ZWRNZW1iZXJzVG9SZW1vdmVwcm9jZXNzQ2hlY2tzaXRmbmVlZGVkT25BbGxuZWVkZWRPbkZ1bmN0aW9uc2NsYXNzZXNEaXJlY3RseU5lZWRpbmdSdW50aW1lVHlwZWltcGxpZWRDbGFzc2VzVW5leHBlY3RlZCB0eXBlIHJlY2VpdmVyQ2xhc3Nlc2FyZ3VtZW50Q2xhc3Nlc3JlY2VpdmVyQ2xhc3Nhcmd1bWVudENsYXNzYWxsQ2xhc3Nlc05lZWRpbmdSdW50aW1lVHlwZU5hdGl2ZU1lbWJlclJlc29sdmVyYW5ub3RhdGlvbkRhdGFCYXNlTmF0aXZlQ2xhc3NGaW5kZXJfdGFnT3duZXJfcHJvY2Vzc05hdGl2ZUNsYXNzZXNJbkxpYnJhcnlfcHJvY2Vzc1N1YmNsYXNzZXNPZk5hdGl2ZUNsYXNzZXNfcHJvY2Vzc05hdGl2ZUNsYXNzJyBhbHJlYWR5IGluIHVzZSBieSAnX2ZpbmRFeHRlbmRzTmFtZU9mQ2xhc3NuYXRpdmVDbGFzc2VzQW5kU3ViY2xhc3Nlc3BvdGVudGlhbEV4dGVuZHNleHRlbmRzTmFtZXBvdGVudGlhbFN1YmNsYXNzZXNuYXRpdmVTdXBlcmNsYXNzT2Z3YWxrUG90ZW50aWFsU3ViY2xhc3Nlc25hdGl2ZVN1cGVyY2xhc3Npc0Fubm90YXRpb25hbm5vdGF0aW9uQ2xhc3NyZWFkQW5ub3RhdGlvbk5hbWVrZXJuZWwuZGVmZXJyZWRfbG9hZF9kYXRhS2VybmVsRGVmZXJyZWRMb2FkVGFza19hZGRpdGlvbmFsRXhwb3J0c1NldHNfZmluZEltcG9ydHNUb2ZpbmQtaW1wb3J0c2dldExpYnJhcnlOb2RlZ2V0VHlwZWRlZk5vZGVDb25zdGFudENvbGxlY3Rvcl9pc1Zpc2libGVLZXJuZWxUb0VsZW1lbnRNYXBnZXRGb3JlaWduS2luZGdldEludGVyZmFjZVR5cGVGb3JKc0ludGVyY2VwdG9yQ2FsbGdldExvY2FsRnVuY3Rpb25Gb3JlaWduS2luZEZvcmVpZ25LaW5kLkpTRm9yZWlnbktpbmQuSlNfQlVJTFRJTkZvcmVpZ25LaW5kLkpTX0VNQkVEREVEX0dMT0JBTEZvcmVpZ25LaW5kLkpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5URm9yZWlnbktpbmQuTk9ORWRhcnQyanMua2VybmVsLmVsZW1lbnRfbWFwbmF0aXZlX2Jhc2ljX2RhdGEuZGFydG5vX3N1Y2hfbWV0aG9kX3Jlc29sdmVyLmRhcnRLZXJuZWxUb0VsZW1lbnRNYXBJbXBsX2NvbnN0YW50RXZhbHVhdG9yX25hdGl2ZUJlaGF2aW9yQnVpbGRlcmVuc3VyZUNsYXNzTWVtYmVyc2Vuc3VyZU1lbWJlcnNfZm9yRWFjaE1peGluS2VybmVsVG9FbGVtZW50TWFwQmFzZS5fZm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXJfZ2V0VHlwZWRlZk5vZGVnZXRQYXJhbWV0ZXJTdHJ1Y3R1cmVpbmNsdWRlVHlwZVBhcmFtZXRlcnNleHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWVfZ2V0TGlicmFyeUNyZWF0ZUVudmlyb25tZW50IG9mICBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgbGlicmFyeSBmb3IgY3JlYXRlTGlicmFyeV9nZXRDbGFzc0NyZWF0ZWNsYXNzIGZvciBjcmVhdGVDbGFzc19nZXRUeXBlZGVmQ3JlYXRldHlwZWRlZiBmb3IgY3JlYXRlVHlwZWRlZl9nZXRUeXBlVmFyaWFibGVDcmVhdGV0eXBlIHZhcmlhYmxlIGZvciBVbnN1cHBvcnRlZCBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlciBwYXJlbnQgbm9kZSBVbnN1cHBvcnRlZCB0eXBlIHBhcmFtZXRlciB0eXBlIG5vZGUgX2dldENvbnN0cnVjdG9yQ3JlYXRlY29uc3RydWN0b3IgZm9yIGNyZWF0ZUdlbmVyYXRpdmVDb25zdHJ1Y3RvcmlzRnJvbUVudmlyb25tZW50Y3JlYXRlRmFjdG9yeUNvbnN0cnVjdG9yVW5leHBlY3RlZCBjb25zdHJ1Y3RvciBub2RlOiBfZ2V0TWV0aG9kQ3JlYXRlZnVuY3Rpb24gZm9yIENhbm5vdCBjcmVhdGUgbWV0aG9kIGZyb20gZmFjdG9yeS5jcmVhdGVHZXR0ZXJjcmVhdGVNZXRob2RjcmVhdGVTZXR0ZXJfZ2V0RmllbGRDcmVhdGVmaWVsZCBmb3IgY3JlYXRlRmllbGRuYXRpdmVCZWhhdmlvckJ1aWxkZXJnZXRDYWNoZWRTdGF0aWNUeXBlc2dldFR5cGVNYXBzRm9yVGVzdGluZ19sb29rdXBQcm9jZWR1cmVfaW1wbGVtZW50c0Z1bmN0aW9uVW5leHBlY3RlZCBtZXRob2Qgbm9kZSBLZXJuZWxFbGVtZW50RW52aXJvbm1lbnRLZXJuZWxCZWhhdmlvckJ1aWxkZXJLZXJuZWxDb25zdGFudEVudmlyb25tZW50S2VybmVsRXZhbHVhdGlvbkVudmlyb25tZW50S2VybmVsTmF0aXZlTWVtYmVyUmVzb2x2ZXJfaWRlbnRpZmllcl5bYS16QS1aXyRdW2EtekEtWjAtOV8kXSokX3Byb2Nlc3NNZXRob2RBbm5vdGF0aW9uc19jb21wdXRlTmF0aXZlTWV0aG9kQmVoYXZpb3JfcHJvY2Vzc0ZpZWxkQW5ub3RhdGlvbnNmaWVsZExvYWRCZWhhdmlvcl9jb21wdXRlTmF0aXZlRmllbGRMb2FkQmVoYXZpb3JmaWVsZFN0b3JlQmVoYXZpb3JfY29tcHV0ZU5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcl9zZXROYXRpdmVOYW1lX2ZpbmRKc05hbWVGcm9tQW5ub3RhdGlvbkBKU05hbWUoLi4uKSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN0YXRpYyBmaWVsZHM6IF9pc05hdGl2ZU1ldGhvZF9zZXROYXRpdmVOYW1lRm9yU3RhdGljTWV0aG9kX2lzSWRlbnRpZmllcm5hdGl2ZU5hbWVzVW5hYmxlIHRvIGRldGVybWluZSBhIG5hdGl2ZSBuYW1lIGZvciB0aGUgZW5jbG9zaW5nIGNsYXNzLCBvcHRpb25zOiBUb28gbWFueSBKU05hbWUgYW5ub3RhdGlvbnM6IEtlcm5lbENsYXNzUXVlcmllc0tlcm5lbEFubm90YXRpb25Qcm9jZXNzb3JfbmF0aXZlQmFzaWNEYXRhQnVpbGRlcmFubm90YXRpb25OYW1lVG9vIG1hbnkgbmFtZSBhbm5vdGF0aW9ucy5nZXRKc0ludGVyb3BOYW1lY2hlY2tGdW5jdGlvblBhcmFtZXRlcnNpc0V4cGxpY2l0bHlseUpzTGlicmFyeWlzSnNMaWJyYXJ5aW1wbGVtZW50c0pzSmF2YVNjcmlwdE9iamVjdENsYXNzS2VybmVsTm9TdWNoTWV0aG9kUmVzb2x2ZXJmaXJzdFBhcmFtZXRlcl9jcmVhdGVEaWFnbm9zdGljTWVzc2FnZXJlcG9ydExvY2F0ZWRNZXNzYWdlY29tcGlsZXIua2VybmVsLmZyb250X2VuZF9hZGFwdGVyQ29tcGlsZXJGaWxlU3lzdGVtX0NvbXBpbGVyRmlsZVN5c3RlbUVudGl0eUZpbGUgbm90IGZvdW5kcmVwb3J0RnJvbnRFbmRNZXNzYWdlX2dldFNwYW5uYWJsZV9jb252ZXJ0TWVzc2FnZW1haW5NZXNzYWdldW5oYW5kbGVkIHNldmVyaXR5IENsb3N1cmVEYXRhU2NvcGVJbmZvS2luZGNhcHR1cmVkTG9vcFNjb3BlY2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mb1Njb3BlSW5mb1VuZXhwZWN0ZWQgU2NvcGVJbmZvS2luZCAud3JpdGVUb0RhdGFTaW5rQ2FwdHVyZWRTY29wZVVuZXhwZWN0ZWQgQ2FwdHVyZWRTY29wZSBraW5kIENhcHR1cmVkTG9vcFNjb3BlVW5leHBlY3RlZCBDYXB0dXJlZExvb3BTY29wZSBraW5kIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm9VbmV4cGVjdGVkIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8ga2luZCBCb3hMb2NhbChUeXBlVmFyaWFibGVMb2NhbHR5cGVfdmFyaWFibGVfbG9jYWwoSlNFbnRpdHlQcml2YXRlbHlOYW1lZEpTRW50aXR5ZWxlbWVudHMuanVtcHNMYWJlbERlZmluaXRpb25pc1RhcmdldGRhcnQyanMuanNfbW9kZWwudHlwZV9yZWNpcGVfc2FtZUZ1bGxTdHJ1Y3R1cmVhQmluZGluZ3NiQmluZGluZ3NTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmVTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUoRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZUZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUoeWllbGRzU2FtZVR5cGVyZWNpcGVBc3RydWN0dXJlQXJlY2lwZUJzdHJ1Y3R1cmVCaXNJZGVudGl0eXN0cnVjdHVyZVR5cGVFeHByZXNzaW9uUmVjaXBlKFR5cGVFbnZpcm9ubWVudFJlY2lwZVNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZVNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZShGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlX2VxdWFsYVR5cGVzYlR5cGVzRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZShJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXJjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzdHJ5Q29udmVydFRvQnVpbHRpbnJlbmFtZVRvT3B0aW1pemVkU2VsZWN0b3Jsb29rdXBTcGVjaWFsaXplckluZGV4QXNzaWduU3BlY2lhbGl6ZXJfdmFsdWVQYXJhbWV0ZXJDaGVja0Fsd2F5c1N1Y2NlZWRzcmVnaXN0ZXJJbmRleEFzc2lnbkluZGV4U3BlY2lhbGl6ZXJyZWdpc3RlckluZGV4Qml0Tm90U3BlY2lhbGl6ZXJyZWdpc3RlckJpdE5vdFVuYXJ5TmVnYXRlU3BlY2lhbGl6ZXJyZWdpc3RlclVuYXJ5TmVnYXRlQWJzU3BlY2lhbGl6ZXJyZWdpc3RlckFic3JlZ2lzdGVyT3B0aW1pemF0aW9uQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyaXNCdWlsdGlubmV3QnVpbHRpblZhcmlhbnRpbnB1dHNBcmVOdW1pbnB1dHNBcmVQb3NpdGl2ZUludGVnZXJzaW5wdXRzQXJlVUludDMxQWRkU3BlY2lhbGl6ZXJyZWdpc3RlckFkZERpdmlkZVNwZWNpYWxpemVycmVnaXN0ZXJEaXZpZGVNb2R1bG9TcGVjaWFsaXplcmNhbkJlUG9zaXRpdmVaZXJvaW5QaGljYW5CZU5lZ2F0aXZlWmVyb3JlZ2lzdGVyTW9kdWxvUmVtYWluZGVyU3BlY2lhbGl6ZXJyZWdpc3RlclJlbWFpbmRlck11bHRpcGx5U3BlY2lhbGl6ZXJyZWdpc3Rlck11bHRpcGx5U3VidHJhY3RTcGVjaWFsaXplcnJlZ2lzdGVyU3VidHJhY3RUcnVuY2F0aW5nRGl2aWRlU3BlY2lhbGl6ZXJoYXNVaW50MzFSZXN1bHRpc05vdFplcm9pc1R3b09yR3JlYXRlcl90ZGl2RmFzdHJlZ2lzdGVyVHJ1bmNhdGluZ0RpdmlkZUJpbmFyeUJpdE9wU3BlY2lhbGl6ZXJhcmd1bWVudExlc3NUaGFuMzJhcmd1bWVudEluUmFuZ2VTaGlmdExlZnRTcGVjaWFsaXplcl9zaGxQb3NpdGl2ZXJlZ2lzdGVyU2hpZnRMZWZ0U2hpZnRSaWdodFNwZWNpYWxpemVyX3NockJvdGhQb3NpdGl2ZV9zaHJSZWNlaXZlclBvc2l0aXZlX3Nock90aGVyUG9zaXRpdmVyZWdpc3RlclNoaWZ0UmlnaHRCaXRPclNwZWNpYWxpemVycmVnaXN0ZXJCaXRPckJpdEFuZFNwZWNpYWxpemVycmVnaXN0ZXJCaXRBbmRCaXRYb3JTcGVjaWFsaXplcnJlZ2lzdGVyQml0WG9yUmVsYXRpb25hbFNwZWNpYWxpemVyRXF1YWxzU3BlY2lhbGl6ZXJyZWdpc3RlckVxdWFsc0xlc3NTcGVjaWFsaXplcnJlZ2lzdGVyTGVzc0dyZWF0ZXJTcGVjaWFsaXplcnJlZ2lzdGVyR3JlYXRlckdyZWF0ZXJFcXVhbFNwZWNpYWxpemVycmVnaXN0ZXJHcmVhdGVyRXF1YWxMZXNzRXF1YWxTcGVjaWFsaXplcnJlZ2lzdGVyTGVzc0VxdWFsQ29kZVVuaXRBdFNwZWNpYWxpemVyX2NvZGVVbml0QXRyZWdpc3RlckNvZGVVbml0QXRDb21wYXJlVG9TcGVjaWFsaXplcnJlZ2lzdGVyQ29tcGFyZVRvSWRlbXBvdGVudFN0cmluZ09wZXJhdGlvblNwZWNpYWxpemVyU3Vic3RyaW5nU3BlY2lhbGl6ZXJyZWdpc3RlclN1YnN0cmluZ1RyaW1TcGVjaWFsaXplcnJlZ2lzdGVyVHJpbVBhdHRlcm5NYXRjaFNwZWNpYWxpemVycmVnaXN0ZXJQYXR0ZXJuTWF0Y2hSb3VuZFNwZWNpYWxpemVycmVnaXN0ZXJSb3VuZEhWYWxpZGF0b3JrTWF4VmFsaWRhdGVkSW5zdHJ1Y3Rpb25MaXN0TGVuZ3RodmlzaXRlZW1hcmtJbnZhbGlkZW1wdHkgYmxvY2tibG9jayBlbmRzIHdpdGggbm9uLXRhaWwgbm9kZS5JZiBub2RlIHdpdGhvdXQgdHdvIHN1Y2Nlc3NvcnNDb25kaXRpb25hbCBub2RlIHdpdGhvdXQgdHdvIHN1Y2Nlc3NvcnNhdm9pZENyaXRpY2FsRWRnZUJsb2NrQ3JpdGljYWwgZWRnZSBibG9jayBjb250YWlucyBpbnN0cnVjdGlvbnNHb3RvIG5vZGUgd2l0aCBub3QgZXhhY3RseSBvbmUgc3VjY2Vzc29yQnJlYWsgb3IgY29udGludWUgbm9kZSB3aXRob3V0IG9uZSBzdWNjZXNzb3JSZXR1cm4gb3IgdGhyb3cgbm9kZSB3aXRoID4gMSBzdWNjZXNzb3Igb3Igbm90IGdvaW5nIHRvIGV4aXQtYmxvY2tFeGl0IGJsb2NrIHdpdGggc3VjY2Vzc29yTm9uLWV4aXQgYmxvY2sgd2l0aG91dCBzdWNjZXNzb3JibG9jayB3aXRob3V0IGlkc3VjY2Vzc29yIHdpdGhvdXQgaWRzdWNjZXNzb3Igd2l0aCBsb3dlciBpZCwgYnV0IG5vdCBhIGxvb3AtaGVhZGVyU1NBIGdyYXBoIGNvbnRhaW5zIGNyaXRpY2FsIGVkZ2UubGFzdElkZG9taW5hdGVkZG9taW5hdGVkIGJsb2NrIG5vdCBwb2ludGluZyBiYWNrZG9taW5hdGVkLmlkID09IG51bGwgb3IgZG9taW5hdGVkIGhhcyA8PSBpZERlZmluaXRpb24gZG9lcyBub3QgZG9taW5hdGUgdXNlY2hlY2tJbnN0cnVjdGlvbkNvdW50ZXZlcnlJbnN0cnVjdGlvbmhhc0NvcnJlY3RJbnB1dHNpbkJhc2ljQmxvY2toYXNDb3JyZWN0VXNlc0luc3RydWN0aW9uIGluIHdyb25nIGJsb2NrSW5jb3JyZWN0IGlucHV0c0luY29ycmVjdCB1c2VzZW50aXR5X3V0aWxzY29tcGFyZUxpYnJhcmllc1VyaXNieUNhbm9uaWNhbFVyaVBhdGhfY29tcGFyZUNhbm9uaWNhbFVyaWFTZWdtZW50c2JTZWdtZW50c2FJYklhU2VnbWVudGJTZWdtZW50Y29tcGFyZVNvdXJjZVVyaXNjb21wYXJlRW50aXRpZXNlbGVtZW50MWxpbmUxY29sdW1uMWVsZW1lbnQybGluZTJjb2x1bW4ycmVjb25zdHJ1Y3RDb25zdHJ1Y3Rvck5hbWVyZWNvbnN0cnVjdENvbnN0cnVjdG9yTmFtZVNvdXJjZVN0cmluZ29wZXJhdG9yJGVxb3BlcmF0b3Ikbm90b3BlcmF0b3IkaW5kZXhvcGVyYXRvciRpbmRleFNldG9wZXJhdG9yJG11bG9wZXJhdG9yJGRpdm9wZXJhdG9yJG1vZG9wZXJhdG9yJHRkaXZvcGVyYXRvciRhZGRvcGVyYXRvciRzaGxvcGVyYXRvciRzaHJvcGVyYXRvciRzaHJ1b3BlcmF0b3IkZ2VvcGVyYXRvciRndG9wZXJhdG9yJGxlb3BlcmF0b3IkbHRvcGVyYXRvciRhbmRvcGVyYXRvciR4b3JvcGVyYXRvciRvcm9wZXJhdG9yJHN1Ym9wZXJhdG9yJG5lZ2F0ZWNvbnN0cnVjdE9wZXJhdG9yTmFtZU9yTnVsbGlzVW5hcnljb25zdHJ1Y3RPcGVyYXRvck5hbWVVbmhhbmRsZWQgb3BlcmF0b3I6IGRhcnQyanMub3BlcmF0b3JzVW5hcnlPcGVyYXRvcktpbmROT1RORUdBVEVDT01QTEVNRU5UVW5hcnlPcGVyYXRvcmlzVXNlckRlZmluYWJsZWZyb21LaW5kQmluYXJ5T3BlcmF0b3JLaW5kTk9UX0VRQUREU1VCTVVMRElWSURJVk1PRFNITFNIUlNIUlVHVEVRTFRFUUFORE9SWE9SSUZfTlVMTEJpbmFyeU9wZXJhdG9ycGFyc2VVc2VyRGVmaW5hYmxlX05vdEVxdWFsc09wZXJhdG9yX0xvZ2ljYWxPcGVyYXRvcl9JZk51bGxPcGVyYXRvcmludm9jYXRpb25NaXJyb3JNZXRob2RLaW5kaW52b2NhdGlvbk1pcnJvckdldHRlcktpbmRpbnZvY2F0aW9uTWlycm9yU2V0dGVyS2luZEtDbG9zZWRXb3JsZEltcGxkYXJ0MmpzLndvcmxkLmNsYXNzX3NldEluZGV4ZWRDbGFzc0ZvckVhY2hGdW5jdGlvbkluc3RhbnRpYXRpb24uSU5ESVJFQ1RMWV9JTlNUQU5USUFURURVTklOU1RBTlRJQVRFRERJUkVDVExZX0lOU1RBTlRJQVRFRElORElSRUNUTFlfSU5TVEFOVElBVEVEQUJTVFJBQ1RMWV9JTlNUQU5USUFURURjbGFzcy1oaWVyYXJjaHktbm9kZUVYUExJQ0lUTFlfSU5TVEFOVElBVEVEX2xlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzc19pbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50X2RpcmVjdFN1YmNsYXNzZXNhZGREaXJlY3RTdWJjbGFzc2luY2x1ZGVEaXJlY3RseUluc3RhbnRpYXRlZGluY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkaW5jbHVkZVVuaW5zdGFudGlhdGVkaW5jbHVkZUFic3RyYWN0bHlJbnN0YW50aWF0ZWRfdXBkYXRlUGFyZW50SW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudF91cGRhdGVJbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50Y2hhbmdlYWZ0ZXJub2RlTWFwTm8gQ2xhc3NIaWVyYXJjaHlOb2RlIGZvciBzdXBlcmNsYXNzIG1hc2tWYWx1ZWRpcmVjdFN1YmNsYXNzZXNpbmNsdWRlUm9vdHdyYXBwZXJuZXh0U3RlcHN1YkZvckVhY2hfY29tcHV0ZUxlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzc2lzUmVsYXRlZFRvX3N1YmNsYXNzYWJzdHJhY3QgIGluZGlyZWN0bHksCmNsYXNzLXNldF9sZWFzdFVwcGVySW5zdGFudGlhdGVkU3VidHlwZV9zdWJ0eXBlc19taXhpbkFwcGxpY2F0aW9uc21peGluQXBwbGljYXRpb25zbmV3U3VidHlwZXNhZGRlZG90aGVyU3VidHlwZW90aGVySGllcmFyY2h5RGVwdGhfY29tcHV0ZUxlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJ0eXBlc3Vibm9kZVsKICBzdWJ0eXBlczoKICBtaXhpbi1hcHBsaWNhdGlvbnM6CkNsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhYmxlTm8gcm9vdCBmb3IgaXRlcmFibGUuQ2xhc3NIaWVyYXJjaHlOb2RlSXRlcmF0b3JfZmluZE5leHRfaXNWYWxpZFN1YnR5cGVzSXRlcmFibGVTdWJ0eXBlc0l0ZXJhdG9yaGllcmFyY2h5Tm9kZXNJdGVyYXRpb25TdGVwU1RPUFNLSVBfU1VCQ0xBU1NFU0NsYXNzSGllcmFyY2h5Tm9kZXNNYXBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwIGZvciBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwLmtleXNDbGFzc0hpZXJhcmNoeU5vZGVzTWFwLnJlbW92ZUNsYXNzSGllcmFyY2h5Tm9kZXNNYXAuY2xlYXJkYXJ0MmpzLmpzX2VtaXR0ZXIuc29ydGVyU29ydGVyZGFydDJqcy5jb25zdGFudHMuY29uc3RydWN0b3JzQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmRDb25zdGFudENvbnN0cnVjdG9yS2luZC5HRU5FUkFUSVZFQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQuUkVESVJFQ1RJTkdfR0VORVJBVElWRUNvbnN0YW50Q29uc3RydWN0b3JLaW5kLlJFRElSRUNUSU5HX0ZBQ1RPUllDb25zdGFudENvbnN0cnVjdG9yS2luZC5FUlJPTkVPVVNHRU5FUkFUSVZFUkVESVJFQ1RJTkdfR0VORVJBVElWRVJFRElSRUNUSU5HX0ZBQ1RPUllJbnN0YW5jZURhdGFDb25zdGFudENvbnN0cnVjdG9yQ29uc3RhbnRDb25zdHJ1Y3RvclZpc2l0b3J2aXNpdEdlbmVyYXRpdmV2aXNpdFJlZGlyZWN0aW5nR2VuZXJhdGl2ZXZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5dmlzaXRFcnJvbmVvdXNHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvcmRlZmF1bHRWYWx1ZXNzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbmFwcGxpZWRJbnN0YW5jZURhdGF7J3R5cGUnOiAsCiAnZGVmYXVsdDosCiAnZmllbGQ6LAogJ2NvbnN0cnVjdG9yOiBtYXAxbWFwMmFwcGx5SW5zdGFuY2VEYXRhY29uc3RydWN0b3JJbnZvY2F0aW9uYXBwbGllZEZpZWxkTWFwYXBwbGllZEFzc2VydGlvbnNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9ydGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbiwKICdjb25zdHJ1Y3Rvcic6IFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0YW50Q29uc3RydWN0b3J0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24nY29uc3RydWN0b3InOiBFcnJvbmVvdXNDb25zdGFudENvbnN0cnVjdG9yRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3Rvci5jb21wdXRlSW5zdGFuY2VUeXBlZGFydDJqcy5jb25zdGFudHMuZXZhbHVhdGlvbmVuY2xvc2luZ0NvbnN0cnVjdGVkVHlwZUV2YWx1YXRpb25FbnZpcm9ubWVudEJhc2Vfc3Bhbm5hYmxlU3RhY2tfY3VycmVudGx5RXZhbHVhdGVkRmllbGRzX3NwYW5uYWJsZU5vcm1hbGl6ZWRBcmd1bWVudHNObyBkZWZhdWx0IHZhbHVlIGZvciBuYW1lZCBhcmd1bWVudCAnTm8gdmFsdWUgZm9yIG5hbWVkIGFyZ3VtZW50ICdObyBkZWZhdWx0IHZhbHVlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50IE5vIHZhbHVlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50IE5vcm1hbGl6ZWRBcmd1bWVudHNbZGVmYXVsdFZhbHVlcz17fSxjYWxsU3RydWN0dXJlPV1dX2NhbmRpZGF0ZXNfY29tcHV0ZUNvdmFyaWFuY2VGaXhlc19zdWJzdGl0dXRpb25Gb3JnZXRDYW5kaWRhdGVBdF9jcmVhdGVGb3J3YXJkaW5nU3R1YmludGVyZmFjZVBvc2l0aW9uYWxQYXJhbWV0ZXJzZ2V0UG9zaXRpb25hbFBhcmFtZXRlcnNpbnRlcmZhY2VUeXBlUGFyYW1ldGVyc2NyZWF0ZVN0dWJJZk5lZWRlZGlzSW1wbENyZWF0ZWRjcmVhdGVJbXBsSWZOZWVkZWRfY3JlYXRlRm9yd2FyZGluZ0ltcGxJZk5lZWRlZG90aGVyTWVtYmVyb3RoZXJQb3NpdGlvbmFsUGFyYW1ldGVyc290aGVyUGFyYW1ldGVyc3VwZXJUeXBlUGFyYW1ldGVyb3RoZXJUeXBlUGFyYW1ldGVyc290aGVyVHlwZVBhcmFtZXRlcmNvcHlQYXJhbWV0ZXJ0YXJnZXRUeXBlUGFyYW1ldGVyc2FkZGl0aW9uYWxTdWJzdGl0dXRpb250YXJnZXRUeXBlUGFyYW1ldGVyZ2V0UmVxdWlyZWRQYXJhbWV0ZXJDb3VudGdldFJldHVyblR5cGVmaW5hbFRhcmdldF9nZXRGb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0Zm9yd2FyZGluZ1N0dWJmYXN0YS50eXBlc2lzU3VidHlwZU9mS2VybmVsTnVsbGFiaWxpdHlzTnVsbGFiaWxpdHl0TnVsbGFiaWxpdHlpc0R5bmFtaWNSZWxhdGVkaXNWb2lkUmVsYXRlZGlzRnV0dXJlT3JSZWxhdGVkaXNJbnRlcmZhY2VSZWxhdGVkaXNGdW5jdGlvblJlbGF0ZWRpc1R5cGVQYXJhbWV0ZXJSZWxhdGVkaXNJbnRlcnNlY3Rpb25SZWxhdGVkaXNUeXBlZGVmUmVsYXRlZFVuaGFuZGxlZCB0eXBlOiBVbmhhbmRsZWQgdHlwZSBjb21iaW5hdGlvbjogYXJlU3VidHlwZXNPZktlcm5lbE51bWJlcnMgb2YgdHlwZSBhcmd1bWVudHMgZG9uJ3QgbWF0Y2ggaXNTYW1lVHlwZUtlcm5lbFR5cGVSZWxhdGlvbmludGVyc2VjdGlvbk51bGxhYmlsaXR5ZnV0dXJlT3JOdWxsYWJpbGl0eUlzSW50ZXJmYWNlU3VidHlwZU9mYXNTdXBlcnR5cGVJc0Z1bmN0aW9uU3VidHlwZU9mc1R5cGVWYXJpYWJsZXN0VHlwZVZhcmlhYmxlc3R5cGVWYXJpYWJsZVN1YnN0aXR1dGlvbnNlY29uZEJvdW5kc0NoZWNrTmVlZGVkc1R5cGVWYXJpYWJsZXRUeXBlVmFyaWFibGVzUG9zaXRpb25hbHRQb3NpdGlvbmFsc05hbWVkdE5hbWVkc0NvdW50dENvdW50SXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mSXNUeXBlZGVmU3VidHlwZU9mSXNGdXR1cmVPclN1YnR5cGVPZnNGdXR1cmVPck51bGxhYmlsaXR5dEZ1dHVyZU9ydEZ1dHVyZU9yTnVsbGFiaWxpdHlJc0ludGVyc2VjdGlvblN1YnR5cGVPZnNJbnRlcnNlY3Rpb25zSW50ZXJzZWN0aW9uTnVsbGFiaWxpdHl0SW50ZXJzZWN0aW9udEludGVyc2VjdGlvbk51bGxhYmlsaXR5ZmFzdGEuaWdub3JlZF9wYXJzZXJfZXJyb3JzRGlyZWN0aXZlQ29udGV4dERpcmVjdGl2ZVN0YXRlLlVua25vd25EaXJlY3RpdmVTdGF0ZS5TY3JpcHRJbnRlcm5hbCBlcnJvcjogVW5leHBlY3RlZCBzY3JpcHQgdGFnLkRpcmVjdGl2ZVN0YXRlLlBhcnRPZkRpcmVjdGl2ZVN0YXRlLkRlY2xhcmF0aW9uc0RpcmVjdGl2ZVN0YXRlLkltcG9ydEFuZEV4cG9ydERpcmVjdGl2ZVN0YXRlLlBhcnREaXJlY3RpdmVTdGF0ZS5MaWJyYXJ5RGlyZWN0aXZlU3RhdGVVbmtub3duSW1wb3J0QW5kRXhwb3J0RGVjbGFyYXRpb25zSW50ZXJuYWwgRXJyb3I6IHNob3VsZCBub3QgY2FsbCBwYXJzZSBzaG91bGQgaW1wbGVtZW50IHBhcnNlZmFzdGEucGFyc2VyLmxvb3Bfc3RhdGVPdXRzaWRlTG9vcEluc2lkZVN3aXRjaEluc2lkZUxvb3BmaW5hbFRva2VudmFyVG9rZW5hZnRlckZhY3RvcnlJbnRlcm5hbCBlcnJvcjogVW5leHBlY3RlZCBzdGF0aWNPckNvdmFyaWFudCAnSW50ZXJuYWwgZXJyb3I6IFVuZXhwZWN0ZWQgdmFyRmluYWxPckNvbnN0ICdyZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXJwYXJzZUFic3RyYWN0cGFyc2VDb25zdHBhcnNlQ292YXJpYW50cGFyc2VFeHRlcm5hbHBhcnNlRmluYWxwYXJzZUxhdGVwYXJzZVJlcXVpcmVkcGFyc2VTdGF0aWNwYXJzZVZhckludGVybmFsIEVycm9yOiBVbmhhbmRsZWQgbW9kaWZpZXI6IHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcnJlcG9ydENvbmZsaWN0aW5nTW9kaWZpZXJzSW50ZXJuYWwgRXJyb3I6IFVuZXhwZWN0ZWQgdmFyRmluYWxPckNvbnN0OiBJbnRlcm5hbCBFcnJvcjogVW5oYW5kbGVkIHJlY292ZXJ5OiBlYXJsaWVyTW9kaWZpZXJiZWZvcmVNb2RpZmllcl9Ub2tlblN0cmVhbVJld3JpdGVyJk9iamVjdCZfVG9rZW5TdHJlYW1NaXhpbm5ld1Rva2VuVHlwZXVzZSBpbnNlcnRTeW50aGV0aWNLZXl3b3JkIGluc3RlYWRpbmNsdWRlSWRlbnRpZmllcnJlcGxhY2VtZW50VG9rZW5yZXBsYWNlZFRva2VuX2xhc3RUb2tlbkluQ2hhaW5fVG9rZW5TdHJlYW1HaG9zdFdyaXRlciZPYmplY3QmX1Rva2VuU3RyZWFtTWl4aW5Ub2tlblN0cmVhbUdob3N0V3JpdGVycmlnaHRQYXJlbm5ld0VuZEdyb3VwX1Rva2VuU3RyZWFtTWl4aW5mYXN0YS5wYXJzZXIudHlwZV9pbmZvcGFyc2VUeXBlTm90Vm9pZGlzU2ltcGxlVHlwZUFyZ3VtZW50IGlzIG5vdCBhIFNpbXBsZVR5cGVBcmd1bWVudC5pc0dlbmVyYWxpemVkRnVuY3Rpb25UeXBlY29tcHV0ZUJ1aWx0aW5PclZhckFzVHlwZWNvbXB1dGVQcmVmaXhlZFR5cGVjb21wdXRlVm9pZEdGVGNvbXB1dGVOb1R5cGVHRlRjb21wdXRlU2ltcGxlV2l0aFR5cGVBcmd1bWVudHNjb21wdXRlSWRlbnRpZmllckdGVGNvbXB1dGVJZGVudGlmaWVyUXVlc3Rpb25HRlRjb21wdXRlQ2F0Y2hQYXJhbWV0ZXJJZGVudGlmaWVyQ29udGV4dENsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uSWRlbnRpZmllckNvbnRleHRDb21iaW5hdG9ySWRlbnRpZmllckNvbnRleHRDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0Y29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzRG90dGVkTmFtZUlkZW50aWZpZXJDb250ZXh0RW51bURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRFbnVtVmFsdWVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0RXhwcmVzc2lvbklkZW50aWZpZXJDb250ZXh0RmllbGREZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0RmllbGRJbml0aWFsaXplcklkZW50aWZpZXJDb250ZXh0Rm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dEltcG9ydFByZWZpeElkZW50aWZpZXJDb250ZXh0TGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0TG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRMYWJlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRMYWJlbFJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0TGlicmFyeUlkZW50aWZpZXJDb250ZXh0TG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0TWV0aG9kRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dE5hbWVkQXJndW1lbnRSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dFRvcExldmVsRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dGZvbGxvd2luZ1ZhbHVlc1R5cGVkZWZEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0VHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0cHJlZml4ZWRUeXBlVmFyaWFibGVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0Y2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXJsb29rc0xpa2VTdGFydE9mTmV4dENsYXNzTWVtYmVybG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uZGFydDJqcy5qc19lbWl0dGVyLnByb2dyYW1fYnVpbGRlckNsYXNzU3R1YkdlbmVyYXRvckluc3RhbnRpYXRpb25TdHViR2VuZXJhdG9ySW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yTWFpbkNhbGxTdHViR2VuZXJhdG9yUGFyYW1ldGVyU3R1YkdlbmVyYXRvclJ1bnRpbWVUeXBlR2VuZXJhdG9yVHlwZVRlc3RQcm9wZXJ0aWVzY29sbGVjdG9yLmRhcnRmaWVsZF92aXNpdG9yLmRhcnRyZWdpc3RyeS5kYXJ0QWNjZXB0RmllbGRhY2Nlc3Nvck5hbWVuZWVkc0dldHRlcm5lZWRzU2V0dGVybmVlZHNDaGVja2VkU2V0dGVyUHJvZ3JhbUJ1aWxkZXJfY29kZWdlbldvcmxkX3J0aUNoZWNrc19ydGlSZWNpcGVFbmNvZGVyX2dlbmVyYXRlZENvZGVfcnRpTmVlZGVkQ2xhc3Nlc19zdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhX2xhdGVOYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGlfb3V0cHV0c19jb25zdGFudHNfdW5uZWVkZWROYXRpdmVDbGFzc2VzX25vdFNvZnREZWZlcnJlZGJ1aWxkUHJvZ3JhbXN0b3JlRnVuY3Rpb25UeXBlc0luTWV0YWRhdGFfaW5pdGlhbGl6ZVNvZnREZWZlcnJlZE1hcHJlZ2lzdGVyT3V0cHV0VW5pdG91dHB1dENsYXNzTGlzdHNyZWdpc3RlckNsYXNzZXNvdXRwdXRTdGF0aWNMaXN0c3JlZ2lzdGVyTWVtYmVyc291dHB1dENvbnN0YW50TGlzdHNfcmVnaXN0ZXJDb25zdGFudHNvdXRwdXRTdGF0aWNOb25GaW5hbEZpZWxkTGlzdHNfcmVnaXN0ZXJTdGF0aWNTdGF0ZUhvbGRlcl9idWlsZENsYXNzc2V0U3VwZXJjbGFzc05vIENsYXNzIGZvciBoYXMgYmVlbiBjcmVhdGVkIGZvciBzdXBlcmNsYXNzIGlzU2ltcGxlTWl4aW5BcHBsaWNhdGlvbmVmZmVjdGl2ZU1peGluQ2xhc3NzZXRNaXhpbkNsYXNzTm8gY2xhc3MgZm9yIGVmZmVjdGl2ZSBtaXhpbiBpbnRlcmNlcHRvckNsYXNzZXNOZWVkZWRCeUNvbnN0YW50c2NvbXB1dGVJbnRlcmNlcHRvcnNSZWZlcmVuY2VkRnJvbUNvbnN0YW50c3ByZXBhcmVOYXRpdmVDbGFzc2VzX2FkZEpzSW50ZXJvcFN0dWJzbWFpbkxpYnJhcmllc01hcG1haW5GcmFnbWVudF9idWlsZE1haW5GcmFnbWVudGRlZmVycmVkRnJhZ21lbnRzZGVmZXJyZWRMaWJyYXJpZXNNYXBfYnVpbGREZWZlcnJlZEZyYWdtZW50bGlicmFyaWVzTWFwQ291bnRfbWFya0VhZ2VyQ2xhc3Nlc2Fzc29jaWF0ZU5hbWVkVHlwZVZhcmlhYmxlc05ld1J0aWhvbGRlcnNuZWVkc05hdGl2ZVN1cHBvcnRmaW5hbGl6ZXJzbmFtaW5nRmluYWxpemVyX2J1aWxkTG9hZE1hcF9idWlsZFR5cGVUb0ludGVyY2VwdG9yTWFwb3V0cHV0Q29udGFpbnNDb25zdGFudExpc3RoYXNTb2Z0RGVmZXJyZWRDbGFzc2VzX21hcmtFYWdlckludGVyY2VwdG9yQ2xhc3Nlc2FsbG9jYXRlZENsYXNzZXNQYXRoYmxhY2tMaXN0ZGFydDp0eXBlZF9kYXRhX2ltcGxlbWVudGF0aW9uUHJvZmlsZSBmaWxlIGRvZXMgbm90IGV4aXN0OiBQcm9maWxlIGluZm9ybWF0aW9uIChhbGxvY2F0ZWQgY2xhc3NlcykgaXMgZW1wdHkucmVhZEFzU3RyaW5nU3luY2FsbG9jYXRlZENsYXNzZXNLZXlzYWxsb2NhdGVkQ2xhc3Nlc2xvYWRNYXBzdHViR2VuZXJhdG9yZ2VuZXJhdGVUeXBlVG9JbnRlcmNlcHRvck1hcGxpYnJhcmllc01hcF9idWlsZEludm9rZU1haW5fYnVpbGRMaWJyYXJpZXNfYnVpbGRTdGF0aWNOb25GaW5hbEZpZWxkc19idWlsZFN0YXRpY0xhemlseUluaXRpYWxpemVkRmllbGRzX2J1aWxkQ29uc3RhbnRzY29uc3RhbnRWYWx1ZXNzdGF0aWNOb25GaW5hbEZpZWxkc19idWlsZFN0YXRpY0ZpZWxkcmVnaXN0ZXJIb2xkZXJpc0NvbnN0YW50c0hvbGRlcmlzSW5pdGlhbGl6ZWRCeUNvbnN0YW50bGF6eUZpZWxkc19idWlsZExhenlGaWVsZF9idWlsZExpYnJhcnl0b1N0cmluZ0ludm9jYXRpb25jYWxsU3R1YnNfYnVpbGRTdHViTWV0aG9kZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLiModGhpcykgfXN0dWJOYW1lc2NsYXNzRWxlbWVudHNzdHViTmFtZWZ1bmN0aW9uKG9iaikgeyByZXR1cm4gb2JqLiMgfWZ1bmN0aW9uKG9iaiwgdikgeyByZXR1cm4gb2JqLiMgPSB2IH1pc0Z1bmN0aW9uTGlrZW1pbkFyZ3NtYXhBcmdzZnVuY3Rpb24ocmVjZWl2ZXIsICMpIHsgcmV0dXJuIHJlY2VpdmVyLiMoIykgfW1lbWJlckVsZW1lbnRzc3RhdGljc19idWlsZFN0YXRpY01ldGhvZF9nZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kc19nZW5lcmF0ZU9uZVNob3RJbnRlcmNlcHRvcnN2aXNpdFN0YXRpY3NzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uX2J1aWxkRmllbGRzX2lzU29mdERlZmVycmVkb25seUZvclJ0aWNsYXNzZXNPbmx5TmVlZGVkRm9yUnRpaGFzUnRpRmllbGRpc0Nsb3N1cmVCYXNlQ2xhc3NjbGFzc1N0dWJHZW5lcmF0b3JydW50aW1lVHlwZUdlbmVyYXRvcnZpc2l0SW5zdGFuY2VNZW1iZXJfYnVpbGRNZXRob2RjYWxsU3R1YnNGb3JNZW1iZXJnZW5lcmF0ZUNhbGxTdHVic0ZvckdldHRlcnZpc2l0TWVtYmVybm9TdWNoTWV0aG9kU3R1YnNjb21wdXRlU2VsZWN0b3JzRm9yTnNtSGFuZGxlcnNnZW5lcmF0ZVN0dWJGb3JOb1N1Y2hNZXRob2RmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH1fZ2VuZXJhdGVJbnN0YW50aWF0aW9uU3R1YnNpbnN0YW5jZUZpZWxkc2lzSG9sZGVySW50ZXJjZXB0ZWRDbGFzc3R5cGVUZXN0c2dlbmVyYXRlSXNUZXN0c3N0b3JlRnVuY3Rpb25UeXBlSW5NZXRhZGF0YWNoZWNrZWRTZXR0ZXJzZm9yRWFjaFByb3BlcnR5bmVlZHNVbmNoZWNrZWRTZXR0ZXJObyBzZXR0ZXIgY29kZSBmb3IgZmllbGQ6IGZ1bmN0aW9uKCkge31ob2xkZXJOYW1lZnVuY3Rpb25UeXBlSW5kZXhpc1NvZnREZWZlcnJlZF9tZXRob2ROZWVkc1N0dWJzX21ldGhvZENhbkJlQXBwbGllZF9jb21wdXRlUGFyYW1ldGVyRGVmYXVsdFZhbHVlc29wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlc2NhblRlYXJPZmZ0ZWFyT2ZmTmFtZWlzQ2xvc3VyZUNhbGxNZXRob2Rpc05vdEFwcGx5VGFyZ2V0Y2FuQmVBcHBsaWVkYWxpYXNOYW1lbWVtYmVyVHlwZV9nZW5lcmF0ZUZ1bmN0aW9uVHlwZWFwcGx5SW5kZXhfZ2VuZXJhdGVQYXJhbWV0ZXJTdHVic25lZWRzVGVhck9mZnRoaXNBY2Nlc3N0aGlzLiRyZWNlaXZlcnJlaWZ5VHlwZWdlbmVyYXRlUGFyYW1ldGVyU3R1YnNpbnN0YW50aWF0aW9uQ2xhc3NnZW5lcmF0ZVN0dWJzaW50ZXJjZXB0b3JNYXBEdXBsaWNhdGUgc3BlY2lhbGl6ZWQgZ2V0IGludGVyY2VwdG9yIGZvciA6IEV4aXN0aW5nOiAsIG5ldyBnZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kZ2V0dGVyRmxhZ3NzZXR0ZXJGbGFnc2luaXRpYWxpemVySW5BbGxvY2F0b3J2aXNpdEZpZWxkc2dlbmVyYXRlT25lU2hvdEludGVyY2VwdG9yaXNBcHBseVRhcmdldHJlZ2lzdGVyQ29uc3RhbnRjb25zdGFudE9iamVjdGlzU3RhdGljU3RhdGVIb2xkZXJDb2xsZWN0b3JvdXRwdXRMaWJyYXJ5TGlzdHNpbnRlcmNlcHRvckNvbnN0YW50Y29tcHV0ZUNsYXNzRmlsdGVyYmFja2VuZFR5cGVIZWxwZXJzdW5uZWVkZWRDbGFzc2VzbmVlZGVkZ2V0QmFja2VuZFR5cGVIZWxwZXJzY29tcHV0ZU5lZWRlZENvbnN0YW50c2NvbnN0YW50VW5pdGNvbXB1dGVOZWVkZWREZWNsYXJhdGlvbnNhZGRDbGFzc1dpdGhTdXBlcmNsYXNzZXNhZGRDbGFzc2VzV2l0aFN1cGVyY2xhc3Nlc21peGluQ2xhc3Nlc3NvcnRlZENsYXNzZXNjb21wdXRlTmVlZGVkU3RhdGljc2lzU3RhdGljRnVuY3Rpb25jb21wdXRlTmVlZGVkU3RhdGljTm9uRmluYWxGaWVsZHNhZGRUb091dHB1dFVuaXRlYWdlckZpZWxkc2FGaWVsZERhdGFiRmllbGREYXRhYUluZGV4YkluZGV4Y29tcHV0ZU5lZWRlZExpYnJhcmllc0ZpZWxkVmlzaXRvcmlzTGlicmFyeUV4cGVjdGVkIGEgQ2xhc3NFbnRpdHkgb3IgYSBMaWJyYXJ5RW50aXR5LmlzTWl4aW5OYXRpdmVGaWVsZGZpZWxkTmVlZHNHZXR0ZXJmaWVsZE5lZWRzU2V0dGVyY2FuQXZvaWRHZW5lcmF0ZWRDaGVja2VkU2V0dGVyZmllbGRBY2Nlc3NOZXZlclRocm93c0xpYnJhcnlDb250ZW50c0xpYnJhcmllc01hcF9sYXN0TGlicmFyeV9sYXN0TWFwcGluZ19nZXRNYXBwaW5nUmVnaXN0cnlfaG9sZGVyc01hcF9kZWZlcnJlZExpYnJhcmllc01hcF9sYXN0T3V0cHV0VW5pdF9sYXN0TGlicmFyaWVzTWFwX21hcFVuaXRUb0xpYnJhcmllc01hcHRhcmdldFVuaXR0YXJnZXRMaWJyYXJpZXNNYXBkYXJ0MmpzLmpzX2VtaXR0ZXIuc3RhcnR1cF9lbWl0dGVyTW9kdWxhckVtaXR0ZXJCYXNlZ2xvYmFsUHJvcGVydHlBY2Nlc3NGb3JDbGFzc3BhZ2xvYmFsUHJvcGVydHlBY2Nlc3NGb3JUeXBlZ2xvYmFsUHJvcGVydHlBY2Nlc3NGb3JNZW1iZXIjLnByb3RvdHlwZWluaXQuX2NvbnN0YW50RW1pdHRlcmdlbmVyYXRlRW1pdHRlckltcGxzaG91bGRHZW5lcmF0ZVNvdXJjZU1hcGJ1aWxkIHByb2dyYW1lbWl0IHByb2dyYW1nZW5lcmF0ZUNvbnN0YW50UmVmZXJlbmNlb21pdHRlZEZyYWdtZW50c291dHB1dEJ1ZmZlcnNkYXJ0MmpzLmpzX2VtaXR0ZXIubWV0YWRhdGFfY29sbGVjdG9yanNfcHJlY2VkZW5jZV9NZXRhZGF0YUVudHJ5X0JvdW5kTWV0YWRhdGFFbnRyeV9Cb3VuZE1ldGFkYXRhRW50cnkoLHJjPSxfdmFsdWU9X01ldGFkYXRhTGlzdHNldEV4cHJlc3Npb25fbWV0YWRhdGFUb2tlbnNfbWV0YWRhdGFNYXBfdHlwZXNUb2tlbnNfdHlwZXNNYXBnZXRNZXRhZGF0YUZvck91dHB1dFVuaXRnZXRUeXBlc0Zvck91dHB1dFVuaXRyZWlmeURlZmF1bHRBcmd1bWVudHNfYWRkR2xvYmFsTWV0YWRhdGFhZGRUeXBlSW5PdXRwdXRVbml0cmVpZnlOYW1lcmVpZnlFeHByZXNzaW9ubmFtZVRvS2V5cHJpbnRlZF9jb21wdXRlVHlwZVJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbiBmb3IgdHlwZSB2YXJpYWJsZSAgaXMgbm90IHN1cHBvcnRlZC5yZWlmaWVkIHR5cGVzIHNob3VsZCBub3QgYmUgc3RyaW5ncy5fY29tcHV0ZVR5cGVSZXByZXNlbnRhdGlvbk5ld1J0aWNvdW50VG9rZW5zSW5UeXBlc2ZpbmFsaXplTWFwbWV0YWRhdGFNYXB0eXBlc01hcGRhcnQyanMubmV3X2pzX2VtaXR0ZXIubW9kZWxub2RlVG9TdHJpbmdQcm9ncmFtdHlwZVRvSW50ZXJjZXB0b3JNYXBfbWV0YWRhdGFDb2xsZWN0b3JtZXRhZGF0YUZvck91dHB1dFVuaXRtZXRhZGF0YVR5cGVzRm9yT3V0cHV0VW5pdGlzU3BsaXRIb2xkZXJIb2xkZXIobmFtZT1GcmFnbWVudHN0YXRpY0xhemlseUluaXRpYWxpemVkRmllbGRzb3V0cHV0RmlsZU5hbWVpc01haW5GcmFnbWVudE1haW5GcmFnbWVudGludm9rZU1haW5NYWluRnJhZ21lbnQoKURlZmVycmVkRnJhZ21lbnREZWZlcnJlZEZyYWdtZW50KG5hbWU9Q29uc3RhbnQobmFtZT1GaWVsZENvbnRhaW5lckxpYnJhcnkodXJpPSxlbGVtZW50PVN0YXRpY0ZpZWxkKG5hbWU9X3N1cGVyY2xhc3NfbWl4aW5DbGFzc2NsYXNzQ2hlY2tzTmV3UnRpbmF0aXZlTGVhZlRhZ3NuYXRpdmVOb25MZWFmVGFnc25hdGl2ZUV4dGVuc2lvbnNzdXBlcmNsYXNzTmFtZXN1cGVyY2xhc3NIb2xkZXJJbmRleENsYXNzKG5hbWU9TWl4aW5BcHBsaWNhdGlvbk1peGluKG5hbWU9bmVlZHNJbnRlcmNlcHRlZEdldHRlcm5lZWRzSW50ZXJjZXB0ZWRTZXR0ZXJuZWVkc0ludGVyY2VwdGVkR2V0dGVyT25SZWNlaXZlcm5lZWRzSW50ZXJjZXB0ZWRTZXR0ZXJPblJlY2VpdmVybmVlZHNJbnRlcmNlcHRlZEdldHRlck9uVGhpc25lZWRzSW50ZXJjZXB0ZWRTZXR0ZXJPblRoaXNGaWVsZChuYW1lPURhcnRNZXRob2RwYXJhbWV0ZXJTdHVic0luc3RhbmNlTWV0aG9kSW5zdGFuY2VNZXRob2QobmFtZT0sY29kZT1TdHViTWV0aG9kU3R1Yk1ldGhvZChuYW1lPVBhcmFtZXRlclN0dWJNZXRob2RQYXJhbWV0ZXJTdHViTWV0aG9kKG5hbWU9LCBjYWxsTmFtZT0sIGNvZGU9U3RhdGljRGFydE1ldGhvZFN0YXRpY0RhcnRNZXRob2QobmFtZT1TdGF0aWNTdHViTWV0aG9kU3RhdGljU3R1Yk1ldGhvZChuYW1lPWRhcnQyanMuanNfZW1pdHRlci5uYXRpdmVfZW1pdHRlcmhhc05hdGl2ZUNsYXNzZXNjbGFzc2VzTmVlZGVkRm9yUnRpcHJlT3JkZXJ3YWxrbm9uTGVhZkNsYXNzZXNleHRlbnNpb25Qb2ludHNjb21wdXRlRXh0ZW5zaW9uUG9pbnRzaXNUcml2aWFsQ2xhc3NsZWFmVGFnc25vbmxlYWZUYWdzbmF0aXZlVGFnc3N1ZmZpY2luZ0ludGVyY2VwdG9yZmlsbE5hdGl2ZUluZm9uYXRpdmVBbmNlc3Rvck9mbmF0aXZlQW5jZXN0b3JuZWVkc0FjY2Vzc29ycG90ZW50aWFsbHlDb252ZXJ0RGFydENsb3N1cmVzVG9Kc3N0dWJQYXJhbWV0ZXJzc3R1YlBhcmFtZXRlciMgPSAjKCMsIGdlbmVyYXRlUGFyYW1ldGVyU3R1YlN0YXRlbWVudHNhcmd1bWVudHNCdWZmZXJpbmRleE9mTGFzdE9wdGlvbmFsQXJndW1lbnRJblBhcmFtZXRlcnNyZXR1cm4gIy4jKCMpaXNTdXBlcnR5cGVPZk5hdGl2ZUNsYXNzcmVxdWlyZXNOYXRpdmVJc0NoZWNrZGFydDJqcy5qc19lbWl0dGVyLnR5cGVfdGVzdF9yZWdpc3RyeVJ1bnRpbWVUeXBlc0NoZWNrcyBoYXMgbm90IGJlZW4gY29tcHV0ZWQgeWV0LnJ0aU5lZWRlZENsYXNzZXMgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC5saXZlTWVtYmVyc19JbmRleGVkSW5kZXhlZExpYnJhcnlJbmRleGVkTWVtYmVySW5kZXhlZEZ1bmN0aW9uSW5kZXhlZENvbnN0cnVjdG9ySW5kZXhlZEZpZWxkSW5kZXhlZFR5cGVWYXJpYWJsZUluZGV4ZWRUeXBlZGVmSW5kZXhlZExvY2FsRW50aXR5TWFwQmFzZUVudGl0eU1hcEUwVHJ5aW5nIHRvIHJlZ2lzdGVyICB3aGVuIGNsb3NlZC5FbnRpdHlEYXRhTWFwQmFzZURhdGEgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZCBmb3IgRW50aXR5RGF0YU1hcEQwRGF0YSBsaXN0IGxlbmd0aCAgaW5jb25zaXN0ZW50IHdpdGggZW50aXR5IGxpc3QgbGVuZ3RoIERhdGEgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZC5FbnRpdHlEYXRhRW52TWFwQmFzZUVudiBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkIGZvciBFbnRpdHlEYXRhRW52TWFwVjBFbnYgbGlzdCBsZW5ndGggRW52IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQuUmVwb3J0RXJyb3JGdW5jdGlvbkRhcnQyanNDb25zdGFudEV2YWx1YXRvcl9zdXBwb3J0UmVldmFsdWF0aW9uRm9yVGVzdGluZ3JlcXVpcmVzQ29uc3RhbnRzdXBwb3J0UmVldmFsdWF0aW9uRm9yVGVzdGluZ0ludmFsaWQgY29uc3RhbnQgcmVzdWx0IFVuZXZhbHVhdGVkQ29uc3RhbnRGaW5kZXJDb25zdGFudFJlZmVyZW5jZUNvbnN0YW50UmVmZXJlbmNlLnZpc2l0Q2hpbGRyZW5Db25zdGFudFJlZmVyZW5jZS5hY2NlcHRDb25zdGFudFJlZmVyZW5jZS50cmFuc2Zvcm1DaGlsZHJlbkNvbnN0YW50UmVmZXJlbmNlKGNvbnN0YW50PURvZXNOb3RDb21wbGV0ZVR5cGVEb2VzTm90Q29tcGxldGVUeXBlKClUaGlzSW50ZXJmYWNlVHlwZUV4YWN0SW50ZXJmYWNlVHlwZVN0YXRpY1R5cGVCYXNlcmV3cml0ZV9hc3luY2Vycm9yX2NvZGVzQXN5bmNSZXdyaXRlckJhc2Vsb2NhbFZhcmlhYmxlc2NvbnRpbnVlTGFiZWxzYnJlYWtMYWJlbHNmaW5hbGx5TGFiZWxzaGFuZGxlckxhYmVsc2V4aXRMYWJlbHJldGhyb3dMYWJlbGNvbnRpbnVlU3RhY2ticmVha1N0YWNrcmV0dXJuU3RhY2t2YXJpYWJsZVJlbmFtaW5nc2FuYWx5c2lzcmVzdWx0TmFtZWVycm9yQ29kZU5hbWVnb3RvTmFtZWhhbmRsZXJOYW1laGFzSGFuZGxlckxhYmVsc25leHROYW1lcmV0dXJuVmFsdWVOYW1lY3VycmVudEVycm9yTmFtZW91dGVyTGFiZWxOYW1lc2VsZk5hbWV0eXBlQXJndW1lbnROYW1lc19jdXJyZW50TGFiZWxjdXJyZW50VGVtcFZhckluZGV4dGVtcFZhckhpZ2hXYXRlck1hcmt0ZW1wVmFyTmFtZXNsYWJlbGxlZFBhcnRzbGFiZWxDb21tZW50c2hhc1RyeUJsb2Nrc2luc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZWhhc0p1bXBUaG91Z2hPdXRlckxhYmVsbmVlZHNSZXRocm93Y3VycmVudFN0YXRlbWVudEJ1ZmZlcmN1cnJlbnRFcnJvcmlzU3luY1N0YXJpc0FzeW5jU3RhcmluaXRpYWxpemVOYW1lc3Jld3JpdGVGdW5jdGlvbmN1cnJlbnRFcnJvckhhbmRsZXJhbGxvY2F0ZVRlbXBWYXJ1c2VUZW1wVmFyc2FmZU5hbWVwcm9jZXNzVHlwZUFyZ3VtZW50c25ld0xhYmVsYmVnaW5MYWJlbHNldEdvdG9WYXJpYWJsZWdvdG9BbmRCcmVha2dvdG8gYWRkRXhwcmVzc2lvblN0YXRlbWVudHNob3VsZFRyYW5zZm9ybWhhc0F3YWl0T3JZaWVsZE5vZGUgIGNhbm5vdCBiZSB0cmFuc2Zvcm1lZCBieSB0aGUgYXdhaXQtc3luYyB0cmFuc2Zvcm1lckludGVybmFsIGVycm9yLCB0cnlpbmcgdG8gdmlzaXQgdmlzaXRTdGF0ZW1lbnR2aXNpdEV4cHJlc3Npb25JZ25vcmVSZXN1bHR2aXNpdEV4cHJlc3Npb25fc3RvcmVJZk5lY2Vzc2FyeSMgPSAjO3dpdGhFeHByZXNzaW9uc3RvcmVvbGRUZW1wVmFySW5kZXh3aXRoQ2FsbFRhcmdldEV4cHJlc3Npb25zdG9yZWRJZk5lZWRlZHdpdGhFeHByZXNzaW9uMndpdGhFeHByZXNzaW9uc2xhc3RUcmFuc2Zvcm1JbmRleGFkZFN1Y2Nlc3NFeGl0YWRkRXJyb3JFeGl0YWRkRnVuY3Rpb25FeGl0c3Jld3JpdHRlbkJvZHl2YXJpYWJsZURlY2xhcmF0aW9uc2Z1bmN0aW9uU291cmNlSW5mb3JtYXRpb252YXJpYWJsZUluaXRpYWxpemF0aW9uc0Z1bmN0aW9uIHN0YXJ0aGFzRXhwbGljaXRSZXR1cm5zY2xhdXNlc3doaWxlICh0cnVlKSB7I31oYXNGaW5hbGx5aGFzWWllbGROZXN0ZWQgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3Igb3IgYXN5bmNocm9ub3VzLiNbI11ldmFsdWF0ZWRVbmV4cGVjdGVkIGFzc2lnbm1lbnQgbGVmdCBoYW5kIHNpZGUgYXdhaXRTdGF0ZW1lbnRhZnRlckF3YWl0cmV0dXJuaW5nIGZyb20gYXdhaXQuaXNSZXN1bHR0aGVuTGFiZWxqb2luTGFiZWxhc3NpZ25MZWZ0aWYgKCMpIHsjfSBlbHNlICN0cmFuc2xhdGVKdW1wc3RvcmVUYXJnZXQjID8gIyA6ICNlbHNlTGFiZWwjID0gIyA/ICMgOiAjO2p1bXBTdGFja2ZpcnN0VGFyZ2V0anNKdW1wU3RhY2tvbGRJbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGVkbyB7I30gd2hpbGUgKCMpdHJhbnNsYXRlVG9TdGF0ZW1lbnRzdGFydExhYmVsZG8gYm9keWNvbnRpbnVlTGFiZWxkbyBjb25kaXRpb25hZnRlckxhYmVsYWZ0ZXIgZG9pZiAoIykgI29sZEluc2lkZVVudHJhbnNsYXRlZGZvciBjb25kaXRpb25mb3IgdXBkYXRlYWZ0ZXIgZm9ydHJpdmlhbCBjb25kaXRpb25KYXZhc2NyaXB0IGZvci1pbiBub3QgaW1wbGVtZW50ZWQgeWV0IGluIHRoZSBhd2FpdCB0cmFuc2Zvcm1hdGlvbnRyYW5zbGF0ZVRvU3RhdGVtZW50U2VxdWVuY2VvbGRCdWZmZXJyZXN1bHRCdWZmZXJ0cmFuc2xhdGVUb0Jsb2NrdHJhbnNsYXRlZFRoZW50cmFuc2xhdGVkRWxzZWJyZWFrTGFiZWxVbmV4cGVjdGVkIHBvc3RmaXggb3BlcmF0b3IgYXJndW1lbnQgVW5leHBlY3RlZCBwcmVmaXggIG9wZXJhdG9yIGNsYXVzZWFmdGVyIHN3aXRjaGFueUNhc2VFeHByZXNzaW9uVHJhbnNmb3JtZWRkZWZhdWx0SW5kZXhVbmtub3duIGNsYXVzZSB0eXBlIHNldEVycm9ySGFuZGxlcl9maW5hbGxpZXNVcFRvQW5kRW5jbG9zaW5nSGFuZGxlcmhhbmRsZXJMYWJlbGZpbmFsbHlMYWJlbHVuY2F1Z2h0TGFiZWx1bmNhdWdodGFmdGVyRmluYWxseUxhYmVsYWZ0ZXIgZmluYWxseSMucHVzaCgjKTtlcnJvclJlbmFtZWVuY2xvc2luZ0ZpbmFsbGllc25leHRMYWJlbC8vIGdvdG8gdGhlIG5leHQgZmluYWxseSBoYW5kbGVyIyA9ICMucG9wKCk7aW5pdGlhbGl6YXRpb25yZW5hbWluZ3doaWxlIGNvbmRpdGlvbmFmdGVyIHdoaWxlYWRkWWllbGRhZnRlciB5aWVsZEFzeW5jUmV3cml0ZXJjb21wbGV0ZXJOYW1lY29tcGxldGVyWWllbGQgaW4gbm9uLWdlbmVyYXRpbmcgYXN5bmMgZnVuY3Rpb250aGVuSGVscGVyQ2FsbCN0aGVuSGVscGVyKCNjdXJyZW50RXJyb3IsICNjb21wbGV0ZXIpdGhlbkhlbHBlcmltcGxpY2l0IHJldHVybnJ1bnRpbWVIZWxwZXJDYWxsI3J1bnRpbWVIZWxwZXIoI3JldHVyblZhbHVlLCAjY29tcGxldGVyKXJ1bnRpbWVIZWxwZXJhc3luY0hlbHBlckNhbGwjYXN5bmNIZWxwZXIoI3ZhbHVlLCAjYm9keU5hbWUpYXN5bmNIZWxwZXJhc3luY1JldGhyb3dDYWxsI2FzeW5jUmV0aHJvdygjcmVzdWx0LCAjY29tcGxldGVyKXJldHVybkFzeW5jUmV0aHJvd2Vycm9yQ2hlY2sgICAgICBpZiAoI2Vycm9yQ29kZSA9PT0gI0VSUk9SKSB7CiAgICAgICAgaWYgKCNoYXNIYW5kbGVyTGFiZWxzKSB7CiAgICAgICAgICAgICNjdXJyZW50RXJyb3IgPSAjcmVzdWx0OwogICAgICAgICAgICAjZ290byA9ICNoYW5kbGVyOwogICAgICAgIH0gZWxzZQogICAgICAgICAgICAjcmV0dXJuQXN5bmNSZXRocm93OwogICAgICB9aW5uZXJGdW5jdGlvbiAgICAgIGZ1bmN0aW9uICgjZXJyb3JDb2RlLCAjcmVzdWx0KSB7CiAgICAgICAgI2Vycm9yQ2hlY2s7CiAgICAgICAgI3Jld3JpdHRlbkJvZHk7CiAgICAgIH1hc3luY1N0YXJ0Q2FsbCNhc3luY1N0YXJ0KCNib2R5TmFtZSwgI2NvbXBsZXRlcilyZXR1cm5Bc3luY1N0YXJ0d3JhcEJvZHlDYWxsI3dyYXBCb2R5KCNpbm5lckZ1bmN0aW9uKSAgICAgICAgZnVuY3Rpb24gKCNwYXJhbWV0ZXJzLCAjdHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICAgICN2YXJpYWJsZURlY2xhcmF0aW9uczsKICAgICAgICAgIHZhciAjYm9keU5hbWUgPSAjd3JhcEJvZHlDYWxsOwogICAgICAgICAgI3JldHVybkFzeW5jU3RhcnQ7CiAgICAgICAgfVN5bmNTdGFyUmV3cml0ZXJkaWFnbm9zdGljTGlzdGVuZXJyZW5hbWVkUGFyYW1ldGVyc3JlbmFtZWROYW1lY29weVBhcmFtZXRlcnNzZXRDdXJyZW50RXJyb3IjY3VycmVudEVycm9yID0gI3Jlc3VsdHNldEdvdG8jZ290byA9ICNoYW5kbGVyY2hlY2tFcnJvckNvZGUgICAgICAgICAgaWYgKCNlcnJvckNvZGUgPT09ICNFUlJPUikgewogICAgICAgICAgICAgICNzZXRDdXJyZW50RXJyb3I7CiAgICAgICAgICAgICAgI3NldEdvdG87CiAgICAgICAgICB9aW5uZXJJbm5lckZ1bmN0aW9uICAgICAgICAgIGZ1bmN0aW9uICNib2R5KCNlcnJvckNvZGUsICNyZXN1bHQpIHsKICAgICAgICAgICAgI2NoZWNrRXJyb3JDb2RlOwogICAgICAgICAgICAjaGVscGVyQm9keTsKICAgICAgICAgIH1oZWxwZXJCb2R5cmV0dXJuSW5uZXJJbm5lckZ1bmN0aW9uICAgICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKCNoYXNQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgI2NvcHlQYXJhbWV0ZXJzOwogICAgICAgICAgICB9CiAgICAgICAgICAgICN2YXJEZWNsOwogICAgICAgICAgICAjcmV0dXJuSW5uZXJJbm5lckZ1bmN0aW9uOwogICAgICAgICAgfWhhc1BhcmFtZXRlcnN2YXJEZWNsY2FsbEl0ZXJhYmxlRmFjdG9yeSNpdGVyYWJsZUZhY3RvcnkoI2lubmVyRnVuY3Rpb24sICN0eXBlKXJldHVybkNhbGxJdGVyYWJsZUZhY3RvcnkgICAgICAgICAgZnVuY3Rpb24gKCNyZW5hbWVkUGFyYW1ldGVycywgI3R5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgIGlmICgjbmVlZHNUaGlzKQogICAgICAgICAgICAgIHZhciAjc2VsZiA9IHRoaXM7CiAgICAgICAgICAgICNyZXR1cm5DYWxsSXRlcmFibGVGYWN0b3J5OwogICAgICAgICAgfQogICAgICAgICAgbmVlZHNUaGlzdW5jYXVnaHRFcnJvckV4cHJlc3Npb25DYWxsZW5kT2ZJdGVyYXRpb25DYWxsIygpU3luYyogZnVuY3Rpb25zIGNhbm5vdCBjb250YWluIGF3YWl0IHN0YXRlbWVudHMuQXN5bmNTdGFyUmV3cml0ZXJuZXh0V2hlbkNhbmNlbGVkTmFtZWNvbnRyb2xsZXJOYW1lbmV4dFdoZW5DYW5jZWxlZGNvbnRyb2xsZXJlbmNsb3NpbmdGaW5hbGx5TGFiZWxzeWllbGRFeHByZXNzaW9uQ2FsbCN5aWVsZEV4cHJlc3Npb24oI2V4cHJlc3Npb24pYXN5bmNTdGFySGVscGVyQ2FsbCNhc3luY1N0YXJIZWxwZXIoI3lpZWxkRXhwcmVzc2lvbkNhbGwsICNib2R5TmFtZSwgI2NvbnRyb2xsZXIpdXBkYXRlTmV4dCNuZXh0ID0gI25leHRXaGVuQ2FuY2VsZWRjYWxsUG9wI25leHQucG9wKClnb3RvQ2FuY2VsbGVkI2dvdG8gPSAjY2FsbFBvcHVwZGF0ZUVycm9yZ290b0Vycm9yICAgICAgICBzd2l0Y2ggKCNlcnJvckNvZGUpIHsKICAgICAgICAgIGNhc2UgI1NUUkVBTV9XQVNfQ0FOQ0VMRUQ6CiAgICAgICAgICAgICN1cGRhdGVOZXh0OwogICAgICAgICAgICAjZ290b0NhbmNlbGxlZDsKICAgICAgICAgICAgI2JyZWFrOwogICAgICAgICAgY2FzZSAjRVJST1I6CiAgICAgICAgICAgICN1cGRhdGVFcnJvcjsKICAgICAgICAgICAgI2dvdG9FcnJvcjsKICAgICAgICB9U1RSRUFNX1dBU19DQU5DRUxFRGlmRXJyb3IgICAgICAgIGlmICgjZXJyb3JDb2RlID09PSAjRVJST1IpIHsKICAgICAgICAgICN1cGRhdGVFcnJvcjsKICAgICAgICAgICNnb3RvRXJyb3I7CiAgICAgICAgfWlmSGFzWWllbGQgICAgICAgIGlmICgjaGFzWWllbGQpIHsKICAgICAgICAgICNzd2l0Y2hDYXNlCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICNpZkVycm9yOwogICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gKCNlcnJvckNvZGUsICNyZXN1bHQpIHsKICAgICAgICAgICNpZkhhc1lpZWxkOwogICAgICAgICAgI3Jld3JpdHRlbkJvZHk7CiAgICAgICAgfWRlY2xhcmVCb2R5TmFtZXZhciAjYm9keU5hbWUgPSAjd3JhcEJvZHlDYWxsO3N0cmVhbU9mQ29udHJvbGxlckNhbGwjc3RyZWFtT2ZDb250cm9sbGVyKCNjb250cm9sbGVyKXJldHVyblN0cmVhbU9mQ29udHJvbGxlckNhbGwgICAgICAgIGZ1bmN0aW9uICgjcGFyYW1ldGVycywgI3R5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAjZGVjbGFyZUJvZHlOYW1lOwogICAgICAgICAgI3ZhcmlhYmxlRGVjbGFyYXRpb25zOwogICAgICAgICAgI3JldHVyblN0cmVhbU9mQ29udHJvbGxlckNhbGw7CiAgICAgICAgfSNhc3luY0hlbHBlcigjY3VycmVudEVycm9yLCAjZXJyb3JDb2RlLCAjY29udHJvbGxlcilzdHJlYW1IZWxwZXJDYWxsI3N0cmVhbUhlbHBlcihudWxsLCAjc3VjY2Vzc0NvZGUsICNjb250cm9sbGVyKXN0cmVhbUhlbHBlcnN1Y2Nlc3NDb2RlIygjLCAjKSNhc3luY0hlbHBlcigjdmFsdWUsICNib2R5TmFtZSwgI2NvbnRyb2xsZXIpUHJlVHJhbnNsYXRpb25BbmFseXNpc2xvb3BzQW5kU3dpdGNoZXNsYWJlbGxlZFN0YXRlbWVudHNjdXJyZW50RnVuY3Rpb25jb250YWluc0F3YWl0c3RtdGFyZ2V0U3RhdGVtZW50VW5leHBlY3RlZF9tYWtlVmFyaWFibGVJbml0aWFsaXplcmluaXRWYWx1ZUNvZGVnZW5QaGFzZVNzYUNvZGVHZW5lcmF0b3JUYXNrU1NBIGNvZGUgZ2VuZXJhdG9yYnVpbGRKYXZhU2NyaXB0RnVuY3Rpb25nZW5lcmF0ZUxhenlJbml0aWFsaXplcmdlbmVyYXRlTWV0aG9kY29kZUdlbmVyYXRvclRZUEVfU1RBVEVNRU5UVFlQRV9FWFBSRVNTSU9OVFlQRV9ERUNMQVJBVElPTmlzR2VuZXJhdGluZ0V4cHJlc3Npb25fY29kZWdlblRhc2tfY2hlY2tlZE1vZGVIZWxwZXJzZ2VuZXJhdGVBdFVzZVNpdGVjb250cm9sRmxvd09wZXJhdG9yc2JyZWFrQWN0aW9uY29udGludWVBY3Rpb25pbXBsaWNpdENvbnRpbnVlQWN0aW9uY3VycmVudENvbnRhaW5lcmV4cHJlc3Npb25TdGFja29sZENvbnRhaW5lclN0YWNrdmFyaWFibGVOYW1lc3Nob3VsZEdyb3VwVmFyRGVjbGFyYXRpb25zY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnNkZWNsYXJlZExvY2Fsc2N1cnJlbnRHcmFwaGN1cnJlbnRCbG9ja0luZm9ybWF0aW9uYmxvY2tRdWV1ZWlzR2VuZXJhdGVBdFVzZVNpdGVoYXNOb25CaXRPcFVzZXJwaGlTZXRiaXRXaWR0aGJpdE9wbGVmdFdpZHRoc2hpZnRDb3VudHJlcXVpcmVzVWludENvbnZlcnNpb25wdXNoU3RhdGVtZW50aW5zZXJ0U3RhdGVtZW50QXRTdGFydHB1c2hFeHByZXNzaW9uQXNTdGF0ZW1lbnRwcmVHZW5lcmF0ZU1ldGhvZHJ1blBoYXNlR3JhcGggbm90IHZhbGlkIGFmdGVyIGludGVydmFsQnVpbGRlcmFsbG9jYXRvcmxpdmVJbnN0cnVjdGlvbnNsaXZlSW50ZXJ2YWxzaGFuZGxlRGVsYXllZFZhcmlhYmxlRGVjbGFyYXRpb25zbmV4dFN0YXRlbWVudF9zYWZlSW5Jbml0aWFsaXplcnVuaW5pdGlhbGl6ZWRkZWNsYXJhdGlvbkxpc3R2aXNpdFN1YkdyYXBobmV3U3ViR3JhcGhvbGRTdWJHcmFwaG9sZEJsb2NrUXVldWVlbnRlclN1YkdyYXBobGltaXRzYmFzaWNCbG9ja2lzSlNFeHByZXNzaW9uaXNKU0NvbmRpdGlvbmdlbmVyYXRlU3RhdGVtZW50c2dlbmVyYXRlU3RhdGVtZW50c0luTmV3QmxvY2tvbGRDb250YWluZXJ1bndyYXBTdGF0ZW1lbnRnZW5lcmF0ZUV4cHJlc3Npb25vbGRJc0dlbmVyYXRpbmdFeHByZXNzaW9ub2xkRXhwcmVzc2lvblN0YWNrc2VxdWVuY2VFbGVtZW50c2V4cHJlc3Npb25TdWJHcmFwaGlzVmFyaWFibGVEZWNsYXJlZGdlbmVyYXRlRXhwcmVzc2lvbkFzc2lnbm1lbnRhc3NpZ25WYXJpYWJsZWRlZmluZW5lZWRzQXNzaWdubWVudGNvbnRpbnVlQXNCcmVha2ltcGxpY2l0Q29udGludWVBc0JyZWFraW1wbGljaXRCcmVha1dpdGhMYWJlbHdyYXBJbnRvTGFiZWxzYnJlYWtMYWJlbFN0cmluZ2hhbmRsZWREZWZhdWx0c3RhdGVtZW50SW5kZXh2aXNpdEJvZHlJZ25vcmVMYWJlbHNvbGRJbmZvaXNDb25kaXRpb25FeHByZXNzaW9uaW5pdGlhbGl6YXRpb25UeXBlYXZvaWRDb250YWluZXJhc3NpZ25QaGlzT2ZTdWNjZXNzb3JzaGFzUGhpVXBkYXRlc2pzSW5pdGlhbGl6YXRpb25kZWxheWVkVmFyaWFibGVzQ291bnRhbGxTaW1wbGVBc3NpZ25tZW50c2lzQ29tbWFPcGVyYXRvcmluaXRzanNDb25kaXRpb25qc1VwZGF0ZXNuZXdMaXRlcmFsQm9vbGlmVGVzdGpzQnJlYWtleGl0TG9vcHdyYXBMb29wQm9keUZvckNvbnRpbnVlZXhpdEF2b2lkQ29udGFpbmVyaGFzRXhpdFBoaVVwZGF0ZXNhdm9pZEVkZ2V1cGRhdGVCb2R5VW5leHBlY3RlZCBsb29wIGtpbmQ6IGNvbnRpbnVlTGFiZWxTdHJpbmdsYWJlbGVkQmxvY2tJbmZvY29udGludWVPdmVycmlkZXNoYW5kbGVCbG9ja0Zsb3dvbGRCbG9ja0luZm9ybWF0aW9uY29udGludWVTdWJHcmFwaGl0ZXJhdGVCYXNpY0Jsb2NrZW1pdEFzc2lnbm1lbnRkZXN0aW5hdGlvbnNlcXVlbnRpYWxpemVDb3BpZXNpbnN0cnVjdGlvbkNvcGllc3RlbXBOYW1lZG9Bc3NpZ25tZW50c291cmNlSW5mb3JtYXRpb25NYXBkZXN0aW5hdGlvbk5hbWVjdXJyZW50TG9jYXRpb25yZWFkeXBydW5lZENvcGllc2dldENvcHlIYW5kbGVyZ2V0U3dhcFRlbXBoYW5kbGVJbnZva2VCaW5hcnlqc0xlZnR2aXNpdEJpdEludm9rZUJpbmFyeXZpc2l0Qml0SW52b2tlVW5hcnllbWl0SWRlbnRpdHlDb21wYXJpc29uaW52ZXJzZWxlZnRFcXVhbHNOdWxscmlnaHRFcXVhbHNOdWxsdHJpcGxlRXFNYXRoLmFicygjKWRvbWluYXRlZC5sZW5ndGggPSBub2RlLmJsb2NrICE9IGN1cnJlbnRHcmFwaC5lbnRyeXZpc2l0VHJ5IHNob3VsZCBub3QgYmUgY2FsbGVkLnRyeUNvbnRyb2xGbG93T3BlcmF0aW9uYXRVc2VTaXRlZ2VuZXJhdGVJZmdlbmVyYXRlTm90X2Fzc2VtYmxlSWZUaGVuRWxzZSMgJiYgI21ldGhvZExpdGVyYWxyZWdpc3Rlck1ldGhvZEludm9rZXJlZ2lzdGVyR2V0dGVycmVnaXN0ZXJTZXR0ZXJnZXRPcHRpbWl6ZWRTZWxlY3RvckZvckVsZW1lbnQgdG8gYmUgbWl4ZWQgaW4uIGRvZXMgbm90IGFwcGx5IHRvIFVuZXhwZWN0ZWQgZGlyZWN0IGludm9jYXRpb24gc2VsZWN0b3I6IHRocm93RnVuY3Rpb24oMCwgIykoIykjIHx8ICNzdXBlckVsZW1lbnR1c2VBbGlhc2VkU3VwZXIjLiMuY2FsbCgjKSMuIygjKXJlZ2lzdGVyRm9yZWlnblR5cGVzaW50ZXJwb2xhdGVkRXhwcmVzc2lvbnNqc0NsYXNzUmVmZXJlbmNlZ2VuZXJhdGVDb25zdGFudHR5cGVDb25zdGFudG1hcFJlbGF0aW9uYWxPcGVyYXRvcmludmVyc2VPcGVyYXRvcmNhbkdlbmVyYXRlT3B0aW1pemVkQ29tcGFyaXNvbnJlbGF0aW9uYWxoYW5kbGVkQnlTcGVjaWFsQ2FzZWVtaXRJc2VtaXRJc1ZpYUludGVyY2VwdG9yaWZCbG9ja2dlbmVyYXRlVGhyb3dXaXRoSGVscGVydW5kZXJvdmVyIyA8IDBqc0luZGV4IyA+Pj4gMCAhPT0gI3VuZGVyT3ZlcmpzSGVscGVybGF6eUdldHRlcmdlbmVyYXRlQXJyYXlMaXRlcmFsb3IwY2hlY2tCaWdJbnRtYXRoRmxvb3JDYWxsTWF0aC5mbG9vcigjKSAjY2hlY2tUeXBlT2ZjaGVja0RvdWJsZWNoZWNrQm9vbGJvb2xlYW5jaGVja09iamVjdG5vdE51bGxlcU51bGxjaGVja0FycmF5Y2hlY2tGaWVsZEV4aXN0c2NoZWNrRmllbGREb2VzTm90RXhpc3RjaGVja0ltbXV0YWJsZUFycmF5aW1tdXRhYmxlJGxpc3RjaGVja011dGFibGVBcnJheWNoZWNrRXh0ZW5kYWJsZUFycmF5Zml4ZWQkbGVuZ3RoY2hlY2tGaXhlZEFycmF5Y2hlY2tOdWxsY2hlY2tOb25OdWxsY2hlY2tUeXBlVmlhUHJvcGVydHljaGVja1R5cGVWaWFJbnN0YW5jZW9mIyBpbnN0YW5jZW9mICNoYW5kbGVOdW1iZXJPclN0cmluZ1N1cGVydHlwZUNoZWNrbnVtYmVyVGVzdHN0cmluZ1Rlc3RvYmplY3RUZXN0Y29tYmluZXIyaGFuZGxlU3RyaW5nU3VwZXJ0eXBlQ2hlY2toYW5kbGVMaXN0T3JTdXBlcnR5cGVDaGVja2FycmF5VGVzdG51bVRlc3RfZ2VuZXJhdGVSZWNlaXZlck9yQXJndW1lbnRUeXBlVGVzdFVuZXhwZWN0ZWQgY2hlY2s6ICMuI3R5cGVWYXJpYWJsZUFjY2Vzc05lZWRzU3Vic3RpdHV0aW9uIygjLCAjLCAjLCAjKSMoIywgIywgIylOb3QgYWxsIGlucHV0IGlzIHJlYWQgZm9yIHR5cGUgcmVjZWl2ZXJNYXNrbWV0aG9kQWNjZXNzU3NhQ29kZUdlbmVyYXRvci52aXNpdFN1YnR5cGVDaGVjayAgdXNlUnRpRmllbGR1c2VIZWxwZXJoZWxwZXJBY2Nlc3NPcHRpbWl6YXRpb25QaGFzZVNzYU9wdGltaXplclRhc2tyYW5nZXNsb2dnZXJzRm9yVGVzdGluZ1NTQSBvcHRpbWl6ZXJib3VuZHNDaGVja2VkY29kZU1vdGlvbmxvYWRFbGltaW5hdGlvbnBoYXNlc2RjZW1vdmVkQ29kZWVsaW1pbmF0ZWRTaWRlRWZmZWN0c25ld0d2bkNhbmRpZGF0ZXNTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXJNQVhfU0hBUkVEX0NPTlNUQU5UX0ZPTERFRF9TVFJJTkdfTEVOR1RIX2xvZ19ncmFwaHNpbXBsaWZ5UGhpc2IxYjJjb250cm9sRmxvd3Rlc3RlZHdoZW5OdWxsVmFsdWV3aGVuTm90TnVsbFZhbHVld2hlbk51bGxCbG9ja3doZW5Ob3ROdWxsQmxvY2tfc2FtZU9yUmVmaW5lbWVudE9mX2lzQm9vbENvbnN0YW50X21vc3RseUVtcHR5aW5zbmdldENvbnN0YW50RnJvbVR5cGVwcm9wYWdhdGVDb25zdGFudFZhbHVlVG9Vc2VzZm9sZGVkZm9sZFVuYXJ5dHJ5T3B0aW1pemVMZW5ndGhJbnRlcmNlcHRlZEdldHRlcmFjdHVhbFJlY2VpdmVyY29uc3RhbnRJbnB1dGhhbmRsZUludGVyY2VwdGVkQ2FsbGZvbGRCaW5hcnloYW5kbGVTdHJpbmdTcGxpdG9wdGltaXplZHJlc3VsdE1hc2tzcGxpdEluc3RydWN0aW9uc3RyaW5nVHlwZUluZm90YWdJbnN0cnVjdGlvbnRyeUlubGluZU5hdGl2ZU1ldGhvZGluc2VydGlvblBvaW50ZHVtbXlHZXRyZWdpc3RlckZpZWxkQ2FsbHJlZ2lzdGVyQ29uc3RhbnRGaWVsZENhbGxpbnB1dFBvc2l0aW9uY2hlY2tQYXJhbWV0ZXJUeXBlcGFyYW1ldGVyQWJzdHJhY3RWYWx1ZWNvbnN0YW50SW5zdHJ1Y3Rpb25vcDFvcDJoYW5kbGVJZGVudGl0eUNoZWNrbWFrZVRydWVtYWtlRmFsc2Vjb21wYXJlQ29uc3RhbnRzaW1wbGlmeUNvbmRpdGlvbmlzTmVnYXRlZGRvbWluYXRpbmdob2lzdGVkcmVwZmluZENvbmNyZXRlRmllbGRGb3JEeW5hbWljQWNjZXNzY29uc3RydWN0ZWRDb25zdGFudGNvbnN0YW50UmVjZWl2ZXJpbmRleEluc3RydWN0aW9ucmVnaXN0ZXJGaWVsZEdldHJlZ2lzdGVyQ29uc3RhbnRGaWVsZEdldF9kaXJlY3RGaWVsZEdldGFzc2lnbkZpZWxkcmVnaXN0ZXJGaWVsZFNldGhhbmRsZUFycmF5VHlwZUluZm9maXJzdEFyZ3VtZW50Z2V0U3RyaW5nbGVmdENvbmNhdHRyeUNvbnN0YW50dG9TdHJpbmdUeXBlbmVlZHNTdWJzdGl0dXRpb25Gb3JUeXBlVmFyaWFibGVBY2Nlc3N0cnlDb3B5SW5mb2V4cGVjdGVkSW5kZXhuZXh0U291cmNlZmluaXNoR3JvdW5kVHlwZWdyb3VuZFR5cGV0eXBlQXRWYXJpYWJsZWZpbmlzaFN1YnN0aXR1dGVkY3JlYXRlZENsYXNzc2VsZWN0VHlwZUFyZ3VtZW50RnJvbU9iamVjdENyZWF0aW9uaW5zdHJ1Y3Rpb25Gb3JUeXBlVmFyaWFibGVyZWdpc3Rlckluc3RhbnRpYXRpb25zc3BlY2lhbGl6ZWRDaGVja1NzYUNoZWNrSW5zZXJ0ZXJpbnNlcnRCb3VuZHNDaGVja2luZGV4Tm9kZWluZGV4QXJndW1lbnRtaW51c09uZVNzYURlYWRDb2RlRWxpbWluYXRvcnRyaXZpYWxEZWFkU3RvcmVSZWNlaXZlcnN6YXBJbnN0cnVjdGlvbkNhY2hlemFwSW5zdHJ1Y3Rpb250ZW1wbGF0ZVRocm93c05TTW9uTnVsbGhhc0ZvbGxvd2luZ1Rocm93aW5nTlNNaXNEZWFkQmxvY2tpc1RyaXZpYWxEZWFkU3RvcmVSZWNlaXZlcmlzRGVhZFVzZWlzRGVhZENvZGVpc1RyaXZpYWxEZWFkU3RvcmVjbGVhblBoaXNzaW1wbGlmeUNvbnRyb2xGbG93cmVtb3ZlVXNlcnNzaW1wbGlmeVBoaWV2YWN1YXRlVGFrZW5CcmFuY2hzZWVuVW5yZWZpbmVkQmFzZXJlZmluZW1lbnR0aGVuU2l6ZW1lYXN1cmVFbXB0eUludGVydmFsZWxzZVNpemVuZXdDb25kaXRpb25yZXBsYWNlSW5wdXRpbmRleE9mTGl2ZWJ5cmVtb3ZlSW5wdXRTc2FMaXZlQmxvY2tBbmFseXplcmxpdmVtYXJrQmxvY2tMaXZlc3dpdGNoUmFuZ2Vsb3dlclZhbHVldXBwZXJWYWx1ZWxpdmVMYWJlbHNTc2FEZWFkUGhpRWxpbWluYXRvcmxpdmVQaGlzU3NhUmVkdW5kYW50UGhpRWxpbWluYXRvckd2bldvcmtJdGVtdmFsdWVTZXRTc2FHbG9iYWxWYWx1ZU51bWJlcmVyYmxvY2tDaGFuZ2VzRmxhZ3Nsb29wQ2hhbmdlc0ZsYWdzY29tcHV0ZUNoYW5nZXNGbGFnc21vdmVMb29wSW52YXJpYW50Q29kZWNoYW5nZXNGbGFnc21vdmVMb29wSW52YXJpYW50Q29kZUZyb21CbG9ja3ByZWhlYWRlcmlzTG9vcEFsd2F5c1Rha2VuZmlyc3RJbnN0cnVjdGlvbkluTG9vcGxvb3BJbnZhcmlhbnRJbnB1dHNpc0lucHV0RGVmaW5lZEFmdGVyRG9taW5hdG9yb2xkQ2hhbmdlc0ZsYWdza2lsbHN1Y2Nlc3NvclZhbHVlc2dldENoYW5nZXNGbGFnc0ZvckRvbWluYXRlZEJsb2NrU3NhQ29kZU1vdGlvbmluc24xaW5zbjJ0b1Jld3JpdGVjYW5CZU1vdmVkU3NhVHlwZUNvbnZlcnNpb25JbnNlcnRlclNzYVR5cGVjb252ZXJzaW9uSW5zZXJ0ZXJpbnNlcnRUeXBlUHJvcGFnYXRpb25Gb3JEb21pbmF0ZWRVc2Vyc2NvbnZlcnRlZFR5cGVkb21pbmF0ZWRVc2VzdHJ1ZVRhcmdldHNmYWxzZVRhcmdldHNjb2xsZWN0VGFyZ2V0c1NzYUxvYWRFbGltaW5hdGlvbm1lbW9yeVNldG1lbW9yaWVzaW50ZXJzZWN0aW9uRm9yY2hlY2tOZXdHdm5DYW5kaWRhdGVzaGFzVXNlR3ZuX3Zpc2l0RmllbGRHZXRsb29rdXBGaWVsZFZhbHVlTWVtb3J5RmVhdHVyZS5sZW5ndGhyZWdpc3RlckZpZWxkVmFsdWVyZWdpc3RlckZpZWxkVmFsdWVVcGRhdGVyZWdpc3RlckFsbG9jYXRpb25zaG91bGRUcmFja0luaXRpYWxWYWx1ZXNraWxsQWZmZWN0ZWRCeWludGVyZXN0aW5nVXNlaGVhcERlcHRoaGFuZGxlU3RhdGljTG9hZGxvb2t1cEtleWVkVmFsdWVyZWdpc3RlcktleWVkVmFsdWVyZWdpc3RlcktleWVkVmFsdWVVcGRhdGVNZW1vcnlGZWF0dXJlTWVtb3J5U2V0a2V5ZWRWYWx1ZXNub25Fc2NhcGluZ1JlY2VpdmVyc211c3RBbGlhc21heUFsaWFzaXNDb25jcmV0ZWVzY2FwZXNVbmV4cGVjdGVkIG1lbWJlci9mZWF0dXJlOiByZWNlaXZlcnNUb1JlbW92ZWZpZWxkc1RvUmVtb3Zld2Vha0luZGV4b3RoZXJJbmRleGZpbmRDb21tb25JbnN0cnVjdGlvbnByZWRlY2Vzc29ySW5kZXh1c2VyMnBoaVR5cGVpc05vbkVzY2FwaW5nVXNlb3RoZXJWYWx1ZXNpc0ZpeGVkTGVuZ3RoanNfYXN0Y2hhckNvZGVzc3JjL25vZGVzLmRhcnRzcmMvYnVpbGRlci5kYXJ0c3JjL3ByaW50ZXIuZGFydHNyYy90ZW1wbGF0ZS5kYXJ0c3JjL2VxdWl2YWxlbmNlX3Zpc2l0b3IuZGFydFJlbmFtZXJJbnN0YW50aWF0b3JOb2RlVmlzaXRvcmNvbmRCYXNlVmlzaXRvcnZpc2l0TG9vcHZpc2l0VmFyaWFibGVSZWZlcmVuY2V2aXNpdFRva2VudmlzaXRMaXRlcmFsdmlzaXRJbnRlcnBvbGF0ZWROb2RlTm9kZVZpc2l0b3IxQmFzZVZpc2l0b3IxdmlzaXRDaGlsZHJlbjFfc291cmNlSW5mb3JtYXRpb25hc1ZhcmlhYmxlVXNldG9TdGF0ZW1lbnRJZm5vRWxzZWhhc0Vsc2VMb29wRm9yV2hpbGVEb1JldHVyblRyeVN3aXRjaFN3aXRjaENsYXVzZUNhc2VEZWZhdWx0TGl0ZXJhbFN0YXRlbWVudERhcnRZaWVsZERlY2xhcmF0aW9uTGl0ZXJhbFN0cmluZ0Zyb21OYW1lTGl0ZXJhbEV4cHJlc3Npb253aXRoRGF0YVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0UGFyZW50aGVzZXNBc3NpZ25tZW50VmFyaWFibGVJbml0aWFsaXphdGlvbkNvbmRpdGlvbmFsQ2FsbE5ld0ludGVybmFsIEVycm9yOiBVbmhhbmRsZWQgYmluYXJ5IG9wZXJhdG9yOiBQb3N0Zml4VmFyaWFibGVSZWZlcmVuY2VfaWRlbnRpZmllclJFXltBLVphLXpfJF1bQS1aYS16XyQwLTldKiROb24taWRlbnRpZmllciBuYW1lICdWYXJpYWJsZVVzZShQYXJhbWV0ZXJUaGlzTmFtZWRGdW5jdGlvbkZ1bmFzeW5jU3RhcnN5bmNTdGFyUHJvcGVydHlBY2Nlc3NpbmRleGVkRGVmZXJyZWRUb2tlbkRlZmVycmVkTnVtYmVyRGVmZXJyZWRTdHJpbmdEZWZlcnJlZEV4cHJlc3Npb25MaXRlcmFsTGl0ZXJhbE51bWJlckFycmF5SW5pdGlhbGl6ZXJBcnJheUhvbGVPYmplY3RJbml0aWFsaXplclByb3BlcnR5SW50ZXJwb2xhdGVkTm9kZV9JbnRlcnBvbGF0ZWRFeHByZXNzaW9uJkV4cHJlc3Npb24mSW50ZXJwb2xhdGVkTm9kZUludGVycG9sYXRlZEV4cHJlc3Npb25fSW50ZXJwb2xhdGVkTGl0ZXJhbCZMaXRlcmFsJkludGVycG9sYXRlZE5vZGVJbnRlcnBvbGF0ZWRMaXRlcmFsX0ludGVycG9sYXRlZFBhcmFtZXRlciZFeHByZXNzaW9uJkludGVycG9sYXRlZE5vZGVJbnRlcnBvbGF0ZWRQYXJhbWV0ZXJJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIubmFtZSBtdXN0IG5vdCBiZSBpbnZva2VkX0ludGVycG9sYXRlZFNlbGVjdG9yJkV4cHJlc3Npb24mSW50ZXJwb2xhdGVkTm9kZUludGVycG9sYXRlZFNlbGVjdG9yX0ludGVycG9sYXRlZFN0YXRlbWVudCZTdGF0ZW1lbnQmSW50ZXJwb2xhdGVkTm9kZUludGVycG9sYXRlZFN0YXRlbWVudF9JbnRlcnBvbGF0ZWREZWNsYXJhdGlvbiZFeHByZXNzaW9uJkludGVycG9sYXRlZE5vZGVJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbk5vIG5hbWUgZm9yIHRoZSBpbnRlcnBvbGF0ZWQgbm9kZVJlZ0V4cExpdGVyYWxBd2FpdEpzQnVpbGRlcl9maW5kRXhwcmVzc2lvblRlbXBsYXRlX2ZpbmRTdGF0ZW1lbnRUZW1wbGF0ZXRocm93IGxvb2t1cEV4cHJlc3Npb25UZW1wbGF0ZWRlZmluZUV4cHJlc3Npb25UZW1wbGF0ZWxvb2t1cFN0YXRlbWVudFRlbXBsYXRlZGVmaW5lU3RhdGVtZW50VGVtcGxhdGVmb3JjZUNvcHl1bmNhY2hlZFN0YXRlbWVudFRlbXBsYXRlX2xlZ2FjeUVzY2FwZWRTdHJpbmdlc2NhcGVkCnwifAh8CXwLfA1cYlVuZXhwZWN0ZWQgbWF0Y2g6IGFzY2lpQ2Fubm90IGJlIGJvdGggVVRGOCBhbmQgQVNDSUlzaW5nbGVRdW90ZXNkb3VibGVRdW90ZXNvdGhlckVzY2FwZXN1bnBhaXJlZFN1cnJvZ2F0ZXNydW5ldXNlU2luZ2xlUXVvdGVzXHhsZWFkaW5ndHJhaWxpbmdfaXNVbnBhaXJlZFN1cnJvZ2F0ZTQyOTQ5NjUyNDhfaXJyZWd1bGFyRXNjYXBlXCdhZGRRdW90ZXNudW1BcnJheXN0cmluZ0FycmF5cHJvcGVydHlDYWxsb2JqZWN0TGl0ZXJhbE1pbmlKc1BhcnNlckVycm9ybGFzdFBvc2l0aW9ubmV3bGluZVBvc2xhc3RMaW5lU3RhcnRzcGFjZXNbXlx0XUVycm9yIGluIE1pbmlKc1BhcnNlcjoKXgpNaW5pSnNQYXJzZXJsYXN0Q2F0ZWdvcnlsYXN0VG9rZW5za2lwcGVkTmV3bGluZWludGVycG9sYXRlZFZhbHVlc0FMUEhBTlVNRVJJQ0RPVExQQVJFTlJQQVJFTkxCUkFDRVJCUkFDRUxTUVVBUkVSU1FVQVJFUVVFUllXSElURVNQQUNFQ0FURUdPUklFU0hJR0hFU1RfUEFSU0VfQklOQVJZX1BSRUNFREVOQ0VCSU5BUllfUFJFQ0VERU5DRVVOQVJZX09QRVJBVE9SU09QRVJBVE9SU19USEFUX0xPT0tfTElLRV9JREVOVElGSUVSU2dldFRva2VuaGFzTmFtZWRIb2xlc2hhc1Bvc2l0aW9uYWxIb2xlc3NpbmdsZUNoYXJDYXRlZ29yeWNhdGVnb3J5VG9TdHJpbmdjYXRVbmtub3duOiBpc0Fzc2lnbm1lbnRzeW1ib2xnZXREZWxpbWl0ZWRjdXJyZW50Q29kZVVudGVybWluYXRlZCBsaXRlcmFsTnVtZXJpYyBhbmQgaGV4IGVzY2FwZXMgYXJlIG5vdCBhbGxvd2VkIGluIGxpdGVyYWxzbmV4dFBvc2l0aW9uVW50ZXJtaW5hdGVkIGNvbW1lbnRVbnBhcnNlYWJsZSBudW1iZXJuZXdDYXRiaW5hcnlQcmVjZW5kZW5jZVVua25vd24gb3BlcmF0b3JleHBlY3RDYXRlZ29yeWFjY2VwdENhdGVnb3J5ZXhwZWN0U2VtaWNvbG9uYWNjZXB0U2VtaWNvbG9uRXhwZWN0ZWQgU0VNSUNPTE9OTm8gYXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24gYXQgcHJlY2VkaW5nIG5ld2xpbmVhY2NlcHRTdHJpbmdwYXJzZUhhc2hob2xlTmFtZUhvbGVzIG11c3QgYWxsIGJlIHBvc2l0aW9uYWwgb3IgbmFtZWQuIHBhcnNlT2JqZWN0SW5pdGlhbGl6ZXJwYXJzZUFzc2lnbm1lbnRyZWdleHBFeHBlY3RlZCBwcmltYXJ5IGV4cHJlc3Npb25wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25wYXJzZUZ1bk9ubHkgc3luYyogaXMgdmFsaWQgLSBzeW5jIGlzIGltcGxpZWRpbnRlcnBvbGF0ZWRMaXRlcmFsRXhwZWN0ZWQgcHJvcGVydHkgbmFtZXBhcnNlTWVtYmVyZ2V0RG90UmhzaW5CcmFjZXNwYXJzZUNhbGxQYXJlbnRoZXNlcyBhcmUgcmVxdWlyZWQgZm9yIG5ld0V4cGVjdGVkIGFscGhhbnVtZXJpYyBpZGVudGlmaWVycGFyc2VQb3N0Zml4cGFyc2VVbmFyeUhpZ2hwYXJzZVVuYXJ5TG93cGFyc2VCaW5hcnltYXhQcmVjZWRlbmNlbWluUHJlY2VkZW5jZWxhc3RTeW1ib2xoaWdoZXJwYXJzZUNvbmRpdGlvbmFscGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdGZpcnN0VmFyaWFibGVmaW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdHBhcnNlVmFyRGVjbGFyYXRpb25PckV4cHJlc3Npb25VbnBhcnNlZCBqdW5rOiBwYXJzZVJldHVybnBhcnNlVGhyb3dwYXJzZUJyZWFrT3JDb250aW51ZXBhcnNlSWZUaGVuRWxzZXBhcnNlRm9ycGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9ucGFyc2VUcnlwYXJzZVdoaWxlcGFyc2VEb3BhcnNlU3dpdGNoQ2FzZSBvdXRzaWRlIHN3aXRjaC5EZWZhdWx0IG91dHNpZGUgc3dpdGNoLnBhcnNlWWllbGROb3QgaW1wbGVtZW50ZWQgaW4gbWluaSBwYXJzZXJjaGVja0ZvckludGVycG9sYXRlZFN0YXRlbWVudHRocm93IGV4cHJlc3Npb24gbXVzdCBiZSBvbiBzYW1lIGxpbmVmaW5pc2hGb3JvYmplY3RFeHByZXNzaW9ucGFyc2VDYXRjaGV4cGVjdGVkICdmaW5hbGx5J3BhcnNlU3dpdGNoQ2xhdXNlZXhwZWN0ZWQgY2FzZSBvciBkZWZhdWx0TWlzc2luZyB3aGlsZSBhZnRlciBkbyBib2R5Ll9JbnRlcmxlYXZlSXRlcmF0b3Jpc05leHRTZXBhcmF0b3Jpc0luaXRpYWxpemVkX0ludGVybGVhdmVJdGVyYWJsZUphdmFTY3JpcHRQcmludGluZ09wdGlvbnNwcmVmZXJTZW1pY29sb25Ub05ld2xpbmVJbk1pbmlmaWVkT3V0cHV0aWRlbnRpdHlSZW5hbWVySmF2YVNjcmlwdFByaW50aW5nQ29udGV4dFNpbXBsZUphdmFTY3JpcHRQcmludGluZ0NvbnRleHRkYW5nbGluZ0Vsc2VWaXNpdG9ybG9jYWxOYW1lcl9jaGFyQ291bnRpbkZvckluaXRhdFN0YXRlbWVudEJlZ2lucGVuZGluZ1NlbWljb2xvbnBlbmRpbmdTcGFjZWlkZW50aWZpZXJDaGFyYWN0ZXJSZWdFeHBeW2EtekEtWl8wLTkkXWV4cHJlc3Npb25Db250aW51YXRpb25SZWdFeHBeWy0rKFtdbGFzdEFkZGVkU3RyaW5nZGV0ZXJtaW5lUmVuYW1lcmZvcmNlTGluZWxpbmVPdXRzcGFjZU91dGxhc3RDaGFyQ29kZV9lbWl0b3V0TG5vdXRTZW1pY29sb25Mbm91dEluZGVudG91dEluZGVudExuc3RhcnROb2RlYWRkVG9Ob2RlZW5kTm9kZXZpc2l0Q29tbWFTZXBhcmF0ZWRoYXNSZXF1aXJlZFR5cGVuZXdJbkZvckluaXRuZXdBdFN0YXRlbWVudEJlZ2ludmlzaXROZXN0ZWRFeHByZXNzaW9udW53cmFwQmxvY2tJZlNpbmdsZVN0YXRlbWVudGJsb2NrQm9keW5lZWRzU2VwYXJhdGlvbm5lZWRzTmV3bGluZWJsb2NrT3V0c2hvdWxkSW5kZW50YmxvY2tPdXRXaXRob3V0QnJhY2VzaWZPdXRuZWVkc0JyYWNlc3RoZW5XYXNCbG9jayBpbmRlZmF1bHQ6ZnVuY3Rpb25PdXR2YXJzcmVxdWlyZWRQcmVjZWRlbmNlbmVlZHNQYXJlbnRoZXNlc3ZhciB1c2VJbmRlbnRsYXN0V2FzQmlndGhpc0lzQmlnX2lzU21hbGxJbml0aWFsaXphdGlvbl9vdXRwdXRJbmNEZWNhbGlhc3JpZ2h0SGFuZFNpZGVyTGVmdHJSaWdodG5ldyBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50cmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnRsZWZ0U3BhY2VGb3Jnb3Qgb3BlcmF0b3I6IGNoYXJDb2RlaXNWYWxpZEphdmFTY3JpcHRJZCJzdXBlciIiY2F0Y2giZmllbGRXaXRoUXVvdGVzb3V0cHV0TnVtYmVyV2l0aFJlcXVpcmVkV2hpdGVzcGFjZVVucmVhY2hhYmxlZXhpdE9uZUxpbmVyTW9kZW5hbWVOdW1iZXJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBKUzogYXdhaXQgT3JkZXJlZFNldFZhckNvbGxlY3RvcmVuYWJsZVJlbmFtaW5nZGlzYWJsZVZhcmlhYmxlTWluaWZpY2F0aW9uUGF0dGVybjo6bm9yZW5hbWluZzo6ZW5hYmxlVmFyaWFibGVNaW5pZmljYXRpb25QYXR0ZXJuOjpkb3JlbmFtaW5nOjpmb3JFYWNoVmFyZm9yRWFjaFBhcmFtY29sbGVjdFZhcnNJbkZ1bmN0aW9uRGFuZ2xpbmdFbHNlVmlzaXRvckZvcmdvdCBub2RlOiBMb2NhbE5hbWVyb2xkTmFtZWRlY2xhcmVQYXJhbWV0ZXJJZGVudGl0eU5hbWVyTWluaWZ5UmVuYW1lcnBhcmFtZXRlck51bWJlclN0YWNrdmFyaWFibGVOdW1iZXJTdGFja3BhcmFtZXRlck51bWJlcnZhcmlhYmxlTnVtYmVyTE9XRVJfQ0FTRV9MRVRURVJTTEVUVEVSU0RJR0lUU250aExldHRlcmF2b2lkUmVuYW1pbmdnZXROYW1lTnVtYmVyYWxwaGFDaGFyc25hbWVTcGFjZVNpemVbYS16QS1aXVthLXpBLVowLTldKkVudGVyRXhpdE5vZGVUZW1wbGF0ZU1hbmFnZXJleHByZXNzaW9uVGVtcGxhdGVzc3RhdGVtZW50VGVtcGxhdGVzaG9sZU5hbWVzX2NvbXBpbGV3aXRoRXhwcmVzc2lvblJlc3VsdF9jaGVja05vUGxhY2Vob2xkZXJzd2l0aFN0YXRlbWVudFJlc3VsdFdyb25nIG51bWJlciBvZiB0ZW1wbGF0ZSBhcmd1bWVudHMsIGdpdmVuICwgc291cmNlOiAidW51c2VkTmFtZXNUZW1wbGF0ZSBhcmd1bWVudHMgaGFzIHVudXNlZCBtYXBwaW5nczogVGVtcGxhdGUgYXJndW1lbnRzIGlzIG1pc3NpbmcgbWFwcGluZ3MgZm9yOiBJbnN0YW50aWF0b3JHZW5lcmF0b3JWaXNpdG9yaWRlbnRpZmllclJFbWFrZU51bGxjb250YWluc0ludGVycG9sYXRlZE5vZGVzdmlzaXROdWxsYWJsZXZpc2l0U3BsYXlhYmxlVW5pbXBsZW1lbnRlZCBJbnN0YW50aWF0b3JHZW5lcmF0b3JWaXNpdG9yIGZvciBjb252ZXJ0U3RyaW5nVG9WYXJpYWJsZVVzZWNvbnZlcnRTdHJpbmdUb1ZhcmlhYmxlRGVjbGFyYXRpb25JbnRlcnBvbGF0ZWQgdmFsdWUgIyBpcyBub3QgYW4gRXhwcmVzc2lvbjogIGlzIG5vdCBhIGRlY2xhcmF0aW9uOiB2aXNpdFNwbGF5YWJsZUV4cHJlc3Npb250b0V4cHJlc3Npb24gaXMgbm90IGFuIEV4cHJlc3Npb24gb3IgTGlzdCBvZiBFeHByZXNzaW9uczogIGlzIG5vdCBhIExpdGVyYWw6IHRvUGFyYW1ldGVyIGlzIG5vdCBhIFBhcmFtZXRlciBvciBMaXN0IG9mIFBhcmFtZXRlcnM6ICBpcyBub3QgYSBzZWxlY3RvcjogIGlzIG5vdCBhIFN0YXRlbWVudDogdmlzaXRTcGxheWFibGVTdGF0ZW1lbnRhIFN0YXRlbWVudCBvciBMaXN0IG9mIFN0YXRlbWVudHM6IGluc3RhbnRpYXRvcnN2aXNpdElmQ29uZGl0aW9uYWxDb21waWxhdGlvbnZpc2l0SWZOb3JtYWxjb21waWxlQ29uZGl0aW9uaXMgbm90IGFuIEV4cHJlc3Npb246IG1ha2VDb25kaXRpb25tYWtlVGhlbm1ha2VPdGhlcndpc2VtYWtlSW5pdG1ha2VVcGRhdGVtYWtlQm9keW1ha2VMZWZ0SGFuZFNpZGVtYWtlT2JqZWN0VE9ET21ha2VFeHByZXNzaW9ubWFrZUNhdGNobWFrZUZpbmFsbHltYWtlRGVjbGFyYXRpb25tYWtlS2V5bWFrZUNhc2VzbWFrZUNhc2VtYWtlTmFtZW1ha2VGdW5jdGlvbmRlY2xhcmF0aW9uTWFrZXJzbWFrZVZhbHVlaGFuZGxlQ2FsbE9yTmV3bWFrZVRhcmdldGFyZ3VtZW50TWFrZXJzY2FsbEFyZ3VtZW50c21ha2VMZWZ0bWFrZVJpZ2h0bWFrZU9wZXJhbmRtYWtlUmVjZWl2ZXJtYWtlU2VsZWN0b3JwYXJhbU1ha2Vyc3BhcnRNYWtlcnNtYWtlRW5jbG9zZWRlbGVtZW50TWFrZXJzcHJvcGVydHlNYWtlcnNJbnRlcnBvbGF0ZWROb2RlQW5hbHlzaXNjb250YWluc0ludGVycG9sYXRlZE5vZGVFcXVpdmFsZW5jZVZpc2l0b3JmYWlsQXR0ZXN0VmFsdWVzdGVzdExhYmVsc2xhYmVsMWxhYmVsMnRlc3ROb2Rlc3Rlc3ROb2RlTGlzdHNsaXN0MWxpc3QydGVtcGxhdGVNYW5hZ2VydW5kZWZlcmpzLmRlYnVnX0RlYnVnUHJpbnRlciZCYXNlVmlzaXRvciZJbmRlbnRhdGlvbl9EZWJ1Z1ByaW50ZXImQmFzZVZpc2l0b3ImSW5kZW50YXRpb24mVGFnZ2luZ0RlYnVnUHJpbnRlcnZpc2l0Tm9kZVdpdGhDaGlsZHJlbkxlbmllbnRQcmludGluZ0NvbnRleHRwcmV0dHlwcmludGluZ0NvbnRleHRkYXJ0MmpzLl9lbWJlZGRlZF9uYW1lc0dFVFRFUl9QUkVGSVhTRVRURVJfUFJFRklYQ0FMTF9QUkVGSVhDQUxMX1BSRUZJWDBDQUxMX1BSRUZJWDFDQUxMX1BSRUZJWDJDQUxMX1BSRUZJWDNDQUxMX1BSRUZJWDRDQUxMX1BSRUZJWDVDQUxMX0NBVENIX0FMTFJFRkxFQ1RBQkxFQ0xBU1NfREVTQ1JJUFRPUl9QUk9QRVJUWVJFUVVJUkVEX1BBUkFNRVRFUl9QUk9QRVJUWURFRkFVTFRfVkFMVUVTX1BST1BFUlRZQ0FMTF9OQU1FX1BST1BFUlRZREVGRVJSRURfQUNUSU9OX1BST1BFUlRZT1BFUkFUT1JfQVNfUFJFRklYU0lHTkFUVVJFX05BTUVSVElfTkFNRVRZUEVERUZfVEFHRlVOQ1RJT05fVFlQRV9UQUdGVU5DVElPTl9UWVBFX0dFTkVSSUNfQk9VTkRTX1RBR0ZVTkNUSU9OX1RZUEVfVk9JRF9SRVRVUk5fVEFHRlVOQ1RJT05fVFlQRV9SRVRVUk5fVFlQRV9UQUdGVU5DVElPTl9UWVBFX1JFUVVJUkVEX1BBUkFNRVRFUlNfVEFHRlVOQ1RJT05fVFlQRV9PUFRJT05BTF9QQVJBTUVURVJTX1RBR0ZVTkNUSU9OX1RZUEVfTkFNRURfUEFSQU1FVEVSU19UQUdGVVRVUkVfT1JfVEFHRlVUVVJFX09SX1RZUEVfQVJHVU1FTlRfVEFHRlVUVVJFX0NMQVNTX1RZUEVfTkFNRUlTX0lOREVYQUJMRV9GSUVMRF9OQU1FTlVMTF9DTEFTU19UWVBFX05BTUVPQkpFQ1RfQ0xBU1NfVFlQRV9OQU1FRlVOQ1RJT05fQ0xBU1NfVFlQRV9OQU1FQk9PTF9SRUNJUEVET1VCTEVfUkVDSVBFSU5UX1JFQ0lQRU5VTV9SRUNJUEVTVFJJTkdfUkVDSVBFUlRJX0ZJRUxEX0lTZGFydE9iamVjdENvbnN0cnVjdG9yZGFydENsb3N1cmVDb25zdHJ1Y3RvcmlzQ2hlY2tQcm9wZXJ0eVRvSnNDb25zdHJ1Y3Rvck5hbWVpc0Z1dHVyZU9yVHlwZWlzVm9pZFR5cGVpc0R5bmFtaWNUeXBlaXNKc0ludGVyb3BUeXBlQXJndW1lbnRyYXdSdGlUb0pzQ29uc3RydWN0b3JOYW1lcmF3UnVudGltZVR5cGVpc0dpdmVuVHlwZVJ0aVJ0aVVuaXZlcnNlRmllbGROYW1lc2V2YWxDYWNoZWVDdHlwZVJ1bGVzdFJzaGFyZWRFbXB0eUFycmF5c0VBVFlQRURFRl9QUkVESUNBVEVfUFJPUEVSVFlfTkFNRSQkaXNUeXBlZGVmVFlQRURFRl9UWVBFX1BST1BFUlRZX05BTUUkdHlwZWRlZlR5cGVOQVRJVkVfU1VQRVJDTEFTU19UQUdfTkFNRSRuYXRpdmVTdXBlcmNsYXNzVGFnU1RBVElDX0ZVTkNUSU9OX05BTUVfUFJPUEVSVFlfTkFNRSRzdGF0aWNfbmFtZU1FVEFEQVRBVFlQRVNHRVRfVFlQRV9GUk9NX05BTUVnZXRUeXBlRnJvbU5hbWVNQU5HTEVEX0dMT0JBTF9OQU1FU21hbmdsZWRHbG9iYWxOYW1lc01BTkdMRURfTkFNRVNtYW5nbGVkTmFtZXNJTlRFUkNFUFRPUlNfQllfVEFHaW50ZXJjZXB0b3JzQnlUYWdMRUFGX1RBR1NHRVRfSVNPTEFURV9UQUdnZXRJc29sYXRlVGFnSVNPTEFURV9UQUdpc29sYXRlVGFnRElTUEFUQ0hfUFJPUEVSVFlfTkFNRWRpc3BhdGNoUHJvcGVydHlOYW1lVFlQRV9UT19JTlRFUkNFUFRPUl9NQVBDVVJSRU5UX1NDUklQVGN1cnJlbnRTY3JpcHRERUZFUlJFRF9MSUJSQVJZX1BBUlRTZGVmZXJyZWRMaWJyYXJ5UGFydHNERUZFUlJFRF9QQVJUX1VSSVNkZWZlcnJlZFBhcnRVcmlzREVGRVJSRURfUEFSVF9IQVNIRVNkZWZlcnJlZFBhcnRIYXNoZXNJTklUSUFMSVpFX0xPQURFRF9IVU5LaW5pdGlhbGl6ZUxvYWRlZEh1bmtJU19IVU5LX0xPQURFRGlzSHVua0xvYWRlZElTX0hVTktfSU5JVElBTElaRURpc0h1bmtJbml0aWFsaXplZERFRkVSUkVEX0lOSVRJQUxJWkVEZGVmZXJyZWRJbml0aWFsaXplZFJUSV9VTklWRVJTRXR5cGVVbml2ZXJzZVBSRUNPTVBJTEVEcHJlY29tcGlsZWRGSU5JU0hFRF9DTEFTU0VTZmluaXNoZWRDbGFzc2VzQUxMX0NMQVNTRVNhbGxDbGFzc2VzVFlQRV9JTkZPUk1BVElPTlNUQVRJQ1NMSUJSQVJJRVNMQVpJRVNsYXppZXNIYXNDYXB0dXJlZFBsYWNlaG9sZGVyc2VuY2xvc2luZ0Z1bmN0aW9uc1NpZGVFZmZlY3RzVmlzaXRvclRocm93QmVoYXZpb3JWaXNpdG9yc2VxdWVuY2VfaXNGaXJzdEludGVycG9sYXRlZFByb3BlcnR5UnVudGltZVR5cGVVc2VLaW5kUnVudGltZVR5cGVVc2VEYXRhVW5leHBlY3RlZCBSdW50aW1lVHlwZVVzZUtpbmQgUnVudGltZVR5cGVVc2VEYXRhKGtpbmQ9cmVjZWl2ZXJHZXQ9cmVjZWl2ZXJUeXBlPSxhcmd1bWVudEdldD1hcmd1bWVudD0sYXJndW1lbnRUeXBlPWNvbXB1dGVSdW50aW1lVHlwZVVzZXJlY2VpdmVyRGF0YWlzR2V0UnVudGltZVR5cGVhc0dldFJ1bnRpbWVUeXBlaXNJbnZva2VUb1N0cmluZ3JlY2VpdmVyR2V0YXJndW1lbnRHZXRudWxsQXdhcmVvdGhlckdldFJ1bnRpbWVUeXBlb3RoZXJOdWxsQXdhcmVNaXNzaW5nIHJlY2VpdmVyR2V0IGluIE1pc3NpbmcgYXJndW1lbnRHZXQgaW4gRHVwbGljYXRlIHByb3BlcnR5IGdldCBpbiBkYXJ0MmpzX2luZm8uc3JjLnV0aWxncmFwaEZyb21JbmZvICBpbmZvOiBkZXBlbmRlbmN5IGdyYXBoIGluZm9ybWF0aW9uIGlzIHdvcmsgaW4gcHJvZ3Jlc3MgYW5kIG1pZ2h0IGJlIGluY29tcGxldGVhZGRFZGdlaW5mb1BhdGhzZWdtZW50Y3VycmVudEJhc2VzZWdtZW50U3RyaW5nX3dyaXRlSW50X3JlYWRJbnRfcGVuZGluZ3NlcmlhbGl6YXRpb24gY3ljbGVzIG5vdCBzdXBwb3J0ZWRfU2NvcGVNb2RlbEJ1aWxkZXImVmlzaXRvciZWYXJpYWJsZUNvbGxlY3Rvck1peGluU2NvcGVNb2RlbEJ1aWxkZXJfbW9kZWxfc2NvcGVWYXJpYWJsZXNfZXhlY3V0YWJsZUNvbnRleHRfaXNJbnNpZGVDbG9zdXJlX291dGVybW9zdE5vZGVfbXV0YXRlZFZhcmlhYmxlc19jYXB0dXJlZFZhcmlhYmxlc19pblRyeV9jdXJyZW50U2NvcGVJbmZvX2hhc1RoaXNMb2NhbF9ib3hDb3VudGVyX2N1cnJlbnRUeXBlVXNhZ2Vfc2NvcGVzQ2FwdHVyZWRJbkNsb3N1cmVNYXBfY2xvc3VyZXNUb0dlbmVyYXRlQ29tcGxleGl0eUxldmVsLmRlZmluaXRlbHlMYXp5Q29tcGxleGl0eUxldmVsLmNvbnN0YW50YXR0YWNoQ2FwdHVyZWRTY29wZVZhcmlhYmxlc2NhcHR1cmVkVmFyaWFibGVzRm9yU2NvcGVub2RlQm94Z2V0Qm94TmFtZWVudGVyTmV3U2NvcGV2aXNpdE5ld1Njb3Blb2xkU2NvcGVWYXJpYWJsZXNvbGRJblRyeV9tYXJrVmFyaWFibGVBc1VzZWR2aXNpdEluQ29udGV4dF9oYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uX2luQ3VycmVudENvbnRleHRfcmVnaXN0ZXJOZWVkc1RoaXNfdXNlVHlwZVZhcmlhYmxlQXNMb2NhbHZpc2l0Tm9kZXNJbkNvbnRleHR2aXNpdEludm9rYWJsZW9sZElzSW5zaWRlQ2xvc3VyZW9sZEV4ZWN1dGFibGVDb250ZXh0c2F2ZWRTY29wZUluZm9zYXZlZElzSW5zaWRlQ2xvc3VyZWZyZWVWYXJpYWJsZWZyZWVWYXJpYWJsZUZvclJ0aV9hbmFseXplVHlwZVZhcmlhYmxlb2xkQ3VycmVudFR5cGVVc2FnZW1ha2VFYWdlcl9pc0ZpZWxkT3JDb25zdHJ1Y3RvckNvbXBsZXhpdHlMZXZlbENvbXBsZXhpdHlMZXZlbC5wb3RlbnRpYWxseUVhZ2VycG90ZW50aWFsbHlFYWdlcmRlZmluaXRlbHlMYXp5SW5pdGlhbGl6ZXJDb21wbGV4aXR5ZWFnZXJsYXp5JmZpZWxkcz1bVW5leHBlY3RlZCBjb21wbGV4aXR5IGxldmVsIEluaXRpYWxpemVyQ29tcGxleGl0eShOdWxsQXdhcmVFeHByZXNzaW9uc3ludGhldGljVmFyaWFibGVfRnJlZVZhcmlhYmxlVmlzaXRvckZyZWVWYXJpYWJsZVZpc2l0b3IuZGVmYXVsdFR5cGVOb2Rlbm9kZVRvRGVidWdTdHJpbmd0ZXh0TGVuZ3RoYmxvY2tUZXh0bmFtZWRPcmRlcmluZ25hdGl2ZU9yZGVyaW5nY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGVBc3luYyBtYXJrZXIgZ2V0TnVsbEF3YXJlRXhwcmVzc2lvbmdldERlZmVycmVkSW1wb3J0Y29udGFpbnNGcmVlVmFyaWFibGVzU3RhdGljVHlwZUNhY2hlc3RhdGljLXR5cGUtY2FjaGVfZXhwcmVzc2lvblR5cGVzX2ZvckluSXRlcmF0b3JUeXBlc2V4cHJlc3Npb25UeXBlc2ZvckluSXRlcmF0b3JUeXBlc2NvbXBpbGVyLnNyYy5pbmZlcnJlci50eXBlX2dyYXBoX25vZGVzQXJndW1lbnRzVHlwZXNUeXBlSW5mb3JtYXRpb25fYXNzaWdubWVudHNpc1N0YWJsZV9zdGF0aWNIYXNoQ29kZVNUT1BfVFJBQ0tJTkdfQVNTSUdOTUVOVFNfTUFSS0VSbm9Bc3NpZ25tZW50c3VudHJhY2tlZHdpdGhBc3NpZ25tZW50c2NvbnRleHRNZW1iZXJtaWdodFJlc3VtZWFkZFVzZXJhcmVBc3NpZ25tZW50c1RyYWNrZWRzYWZlVHlwZXJlbW92ZUFuZENsZWFyUmVmZXJlbmNlc190b1N0cnVjdHVyZWRUZXh0QXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uUGxhY2Vob2xkZXJUeXBlSW5mb3JtYXRpb25DYW5ub3QgdmlzaXQgcGxhY2Vob2xkZXJDYW5ub3QgcmVmaW5lIHBsYWNlaG9sZGVyUGxhY2Vob2xkZXIgW1BhcmFtZXRlckFzc2lnbm1lbnRzRWxlbWVudFR5cGVJbmZvcm1hdGlvbmRpc2FibGVJbmZlcmVuY2VGb3JDbG9zdXJlc193aXRoQXNzaWdubWVudHNfTWVtYmVyVHlwZUluZm9ybWF0aW9uJkVsZW1lbnRUeXBlSW5mb3JtYXRpb24mQXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uTWVtYmVyVHlwZUluZm9ybWF0aW9uX2NhbGxlcnNhZGRDYWxscmVtb3ZlQ2FsbGNhbGxzX2NvbXB1dGVJc0NhbGxlZE9uY2Vpc0NhbGxlZE9uY2UgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZC5pc0Nsb3N1cml6ZWRoYW5kbGVTcGVjaWFsQ2FzZXNfaGFuZGxlRnVuY3Rpb25DYXNlcG90ZW50aWFsbHlOYXJyb3dUeXBlX3BvdGVudGlhbGx5TmFycm93VHlwZXZpc2l0TWVtYmVyVHlwZUluZm9ybWF0aW9uRmllbGRUeXBlSW5mb3JtYXRpb25fZmllbGRHZXR0ZXJUeXBlSW5mb3JtYXRpb25fZ2V0dGVyU2V0dGVyVHlwZUluZm9ybWF0aW9uX3NldHRlck1ldGhvZFR5cGVJbmZvcm1hdGlvbl9tZXRob2RGYWN0b3J5Q29uc3RydWN0b3JUeXBlSW5mb3JtYXRpb25fY29uc3RydWN0b3JHZW5lcmF0aXZlQ29uc3RydWN0b3JUeXBlSW5mb3JtYXRpb25QYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25fcGFyYW1ldGVyX2lzSW5zdGFuY2VNZW1iZXJQYXJhbWV0ZXJfaXNDbG9zdXJlUGFyYW1ldGVyX2lzSW5pdGlhbGl6aW5nRm9ybWFsX2lzVGVhck9mZkNsb3N1cmVQYXJhbWV0ZXJ2aXNpdFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvblBhcmFtZXRlciBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24uZ2V0SW5mZXJyZWRTaWduYXR1cmVDYWxsVHlwZWZvckluX0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uJlR5cGVJbmZvcm1hdGlvbiZBcHBseWFibGVUeXBlSW5mb3JtYXRpb25DYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbl9jYWxsQ2FsbCBzaXRlIFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uX2dldENhbGxlZFR5cGVJbmZvaXNTeW50aGVzaXplZF9nZXRDYWxsZWRUeXBlSW5mb1dpdGhTZWxlY3RvcnZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25EeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25fY2FsbFR5cGVfaGFzQ2xvc3VyZUNhbGxUYXJnZXRzX2NvbmNyZXRlVGFyZ2V0c2NvbXB1dGVUeXBlZFNlbGVjdG9ydGFyZ2V0c0luY2x1ZGVDb21wbGV4Tm9TdWNoTWV0aG9kaGFuZGxlSW50cmlzaWZpZWRTZWxlY3RvcnVpbnQzMUltcGxlbWVudGF0aW9uaXNQb3NpdGl2ZUludHRyeUxhdGVybm9uTnVsbEVtcHR5VHlwZWhhc05vQXJndW1lbnRzb2xkVGFyZ2V0c2pvaW5UeXBlTWFza3NEaWN0aW9uYXJ5IGxvb2t1cCBmb3IgIHlpZWxkcyAgeWllbGRzIFtudWxsXS5NYXAgbG9va3VwIGZvciB2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbkNsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbkNhbm5vdCBjb21wdXRlIGNhbGxlZXMgb2YgYSBjbG9zdXJlIGNhbGwuQ2xvc3VyZSBjYWxsIHZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uQ29uY3JldGVUeXBlSW5mb3JtYXRpb25Ob3Qgc3VwcG9ydGVkdmlzaXRDb25jcmV0ZVR5cGVJbmZvcm1hdGlvblN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24gdmFsdWUgdmlzaXRTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uQm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb252aXNpdEJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uTmFycm93VHlwZUluZm9ybWF0aW9udHlwZUFubm90YXRpb25uYXJyb3dlZFR5cGVBTk9NQUxZIFdBUk5JTkc6IG5hcnJvd2VkICB2aWEgTmFycm93IHRvIHZpc2l0TmFycm93VHlwZUluZm9ybWF0aW9uSW5mZXJyZWRUeXBlSW5mb3JtYXRpb25wYXJlbnRUeXBlX0xpc3RUeXBlSW5mb3JtYXRpb24mVHlwZUluZm9ybWF0aW9uJlRyYWNlZFR5cGVJbmZvcm1hdGlvbl9mbG93c0ludG9mbG93c0ludG9hZGRGbG93c0ludG9UYXJnZXRzTGlzdFR5cGVJbmZvcm1hdGlvbmluZmVycmVkTGVuZ3RoTGlzdCB0eXBlIHZpc2l0TGlzdFR5cGVJbmZvcm1hdGlvbkVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbkVsZW1lbnQgaW4gY29udGFpbmVyIHZpc2l0RWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uX1NldFR5cGVJbmZvcm1hdGlvbiZUeXBlSW5mb3JtYXRpb24mVHJhY2VkVHlwZUluZm9ybWF0aW9uU2V0VHlwZUluZm9ybWF0aW9uU2V0IHR5cGUgdmlzaXRTZXRUeXBlSW5mb3JtYXRpb25FbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb25FbGVtZW50IGluIHNldCB2aXNpdEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbl9NYXBUeXBlSW5mb3JtYXRpb24mVHlwZUluZm9ybWF0aW9uJlRyYWNlZFR5cGVJbmZvcm1hdGlvbk1hcFR5cGVJbmZvcm1hdGlvbl9hbGxLZXlzQXJlU3RyaW5nc2luRGljdGlvbmFyeU1vZGVub25OdWxsbmV3SW5mb2tleVN0cmluZ25ld0luZm9zbm90IHN1cHBvcnRlZHZpc2l0TWFwVHlwZUluZm9ybWF0aW9udG9UeXBlTWFza01hcCAgKEs6LCBWOikgY29udGVudHMgS2V5SW5NYXBUeXBlSW5mb3JtYXRpb252aXNpdEtleUluTWFwVHlwZUluZm9ybWF0aW9uS2V5IGluIE1hcCBWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9udmlzaXRWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uVmFsdWUgaW4gTWFwIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb25icmFuY2hOb2RlaXNUcnlQaGkoIFsgLi4uIF12aXNpdFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb25fQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbiZUeXBlSW5mb3JtYXRpb24mQXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbkNsb3N1cmUgdmlzaXRDbG9zdXJlVHlwZUluZm9ybWF0aW9uVHJhY2VkVHlwZUluZm9ybWF0aW9uQXdhaXRUeXBlSW5mb3JtYXRpb25fbm9kZXZpc2l0QXdhaXRUeXBlSW5mb3JtYXRpb25ZaWVsZFR5cGVJbmZvcm1hdGlvbllpZWxkdmlzaXRZaWVsZFR5cGVJbmZvcm1hdGlvblR5cGVJbmZvcm1hdGlvblZpc2l0b3J2YWxpZENhbGxUeXBlVW5leHBlY3RlZCBjYWxsIHR5cGUgX25hcnJvd1R5cGVvdGhlclR5cGVTdGF0aWNUeXBlUHJvdmlkZXJDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzc190cnVzdFR5cGVfY2hlY2tUeXBlX2NoZWNrQm9vbENvbnZlcmlvbnBhcmFtZXRlckNoZWNrUG9saWN5Y29uZGl0aW9uQ2hlY2tQb2xpY3lyZWFkQXNQcm9wZXJ0eXJlYWRBc1BhcmFtZXRlclVuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZSBpbiBzdGF0aWMgY29udGV4dC5VbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgYWNjZXNzOiBlbnZpcm9ubWVudEFjY2Vzc19idWlsZEVudmlyb25tZW50Rm9yVHlwZXVzZXNJbnN0YW5jZVBhcmFtZXRlcnNwcm9jZXNzVHlwZVZhcmlhYmxlc2luZ2xldG9uU3RydWN0dXJlc2luZ2xldG9uVHVwbGVmdWxsU3RydWN0dXJlYnVpbGRBc0NoZWNrcmVpZmllZFR5cGVyZWZpbmVkTWFza19FbnZpcm9ubWVudEV4cHJlc3Npb25BbmRTdHJ1Y3R1cmVLZXJuZWxUeXBlR3JhcGhCdWlsZGVyX2luZmVycmVyX2FuYWx5emVkTWVtYmVyX2FuYWx5emVkTm9kZV9pbkdlbmVyYXRpdmVDb25zdHJ1Y3Rvcl9zdGF0ZUludGVybmFsX3N0YXRlQWZ0ZXJXaGVuVHJ1ZUludGVybmFsX3N0YXRlQWZ0ZXJXaGVuRmFsc2VJbnRlcm5hbF9zaWRlRWZmZWN0c0J1aWxkZXJfYnJlYWtzRm9yX2NvbnRpbnVlc0Zvcl9jYXB0dXJlZEFuZEJveGVkX3N0YXRpY1R5cGVQcm92aWRlcl9hY2N1bXVsYXRlSXNDaGVja3NfbG9vcExldmVsY2FwdHVyZWRBbmRCb3hlZF9zdGF0ZWluR2VuZXJhdGl2ZUNvbnN0cnVjdG9yX3N0YXRlQWZ0ZXJXaGVuVHJ1ZV9zdGF0ZUFmdGVyV2hlbkZhbHNlX3NldFN0YXRlQWZ0ZXJ3aGVuVHJ1ZXdoZW5GYWxzZV9pc0luQ2xhc3NPclN1YmNsYXNzX2NoZWNrSWZFeHBvc2VzVGhpc2lzVGhpc0V4cG9zZWRtYXJrVGhpc0FzRXhwb3NlZGlzSW5jb21wYXRpYmxlSW52b2tlYW5hbHl6ZWRNZXRob2Rjb25kaXRpb25Db250ZXh0b2xkQWNjdW11bGF0ZUlzQ2hlY2tzaGFuZGxlUGFyYW1ldGVyc3VwZGF0ZUZpZWxkYW5hbHl6ZUFyZ3VtZW50c2hhbmRsZUNvbnN0cnVjdG9ySW52b2tlc2VlblJldHVybk9yVGhyb3djcmVhdGVJbnN0YW50aWF0aW9uVHlwZUluZm9ybWF0aW9uVW5oYW5kbGVkIGV4cHJlc3Npb246IFVuaGFuZGxlZCBzdGF0ZW1lbnQ6IGNyZWF0ZU51bGxUeXBlSW5mb3JtYXRpb25hYm9ydHNzdGF0ZUJlZm9yZWhhbmRsZUNvbmRpdGlvbnN0YXRlQWZ0ZXJNZXNzYWdlbWVyZ2VEaWFtb25kRmxvd3NlZW5CcmVha09yQ29udGludWVfc2V0dXBCcmVha3NBbmRDb250aW51ZXNtZXJnZUFmdGVyQnJlYWtzX2dldEJyZWFrc19jbGVhckJyZWFrc0FuZENvbnRpbnVlc2NvbnRpbnVlVGFyZ2V0c3N0YXRlQmVmb3JlQ2FzZXN0YXRlQWZ0ZXJDYXNlbWVyZ2VBbGxzdGF0ZXNUb01lcmdlaGFzRGVmYXVsdENhc2VrZWVwT3duTG9jYWxzY3JlYXRlTGlzdFR5cGVJbmZvcm1hdGlvbmVsZW1lbnRUeXBlc2FsbG9jYXRlUGhpYWRkUGhpSW5wdXRjb250YWluZXJUeXBlYWxsb2NhdGVMaXN0Y3JlYXRlU2V0VHlwZUluZm9ybWF0aW9uYWxsb2NhdGVTZXRjcmVhdGVNYXBUeXBlSW5mb3JtYXRpb25lbnRyeVR5cGVza2V5VHlwZXN2YWx1ZVR5cGVzYWxsb2NhdGVNYXBtYXJrSW5pdGlhbGl6YXRpb25Bc0luZGVmaW5pdGVjcmVhdGVCb29sVHlwZUluZm9ybWF0aW9uYm9vbExpdGVyYWxUeXBlY3JlYXRlSW50VHlwZUluZm9ybWF0aW9uZ2V0Q29uY3JldGVUeXBlRm9yY3JlYXRlRG91YmxlVHlwZUluZm9ybWF0aW9uY3JlYXRlU3RyaW5nVHlwZUluZm9ybWF0aW9uc3RyaW5nTGl0ZXJhbFR5cGVjcmVhdGVTeW1ib2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uY3JlYXRlVHlwZUxpdGVyYWxJbmZvcm1hdGlvblVuZXhwZWN0ZWQgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLk1pc3NpbmcgdHlwZSBpbmZvcm1hdGlvbiBmb3IgaGFuZGxlU3RhdGljSW52b2tlbmFycm93VHlwZV9wb3RlbnRpYWxseUFkZE51bGxDaGVja25ld1R5cGVkU2VsZWN0b3JoYW5kbGVEeW5hbWljSW52b2tlX2hhbmRsZUR5bmFtaWNzZWxlY3Rvck5lZWRzVXBkYXRlaGFuZGxlRHluYW1pY0dldGhhbmRsZUR5bmFtaWNTZXRjdXJyZW50TWFza21vdmVOZXh0TWFza2l0ZXJhdG9yU2VsZWN0b3JpdGVyYXRvck1hc2tjdXJyZW50VHlwZV9nZXRMb29wQmFja0VkZ2VzbG9naWNfZmluZExlbmd0aGlzVmFsaWRJbnRfaXNDb25zdHJ1Y3Rvck9mVHlwZWRBcnJheVN1YmNsYXNzYXJndW1lbnRzVHlwZXNoYW5kbGVDbG9zdXJlQ2FsbGhhbmRsZUZvcmVpZ25JbnZva2VVbmV4cGVjdGVkIHN0YXRpYyBpbnZvY2F0aW9uIHRhcmdldDogY3JlYXRlU3RhdGljR2V0VHlwZUluZm9ybWF0aW9udHlwZWRNYXNrX3BvdGVudGlhbGx5QWRkSXNDaGVja3N0YXRlQWZ0ZXJDaGVja1doZW5UcnVlc3RhdGVBZnRlckNoZWNrV2hlbkZhbHNlbmFycm93TG9jYWxzdGF0ZUFmdGVyQ29uZGl0aW9uV2hlblRydWVzdGF0ZUFmdGVyQ29uZGl0aW9uV2hlbkZhbHNlc3RhdGVBZnRlclRoZW5zdGF0ZUFmdGVyRWxzZXN0YXRlQWZ0ZXJPcGVyYW5kV2hlblRydWVzdGF0ZUFmdGVyT3BlcmFuZFdoZW5GYWxzZXN0YXRlQWZ0ZXJMZWZ0V2hlblRydWVzdGF0ZUFmdGVyTGVmdFdoZW5GYWxzZXN0YXRlQWZ0ZXJSaWdodFdoZW5UcnVlc3RhdGVBZnRlclJpZ2h0V2hlbkZhbHNlc3RhdGVBZnRlcldoZW5UcnVlc3RhdGVBZnRlcldoZW5GYWxzZXN0YXRlQWZ0ZXJVbmV4cGVjdGVkIGxvZ2ljYWwgb3BlcmF0b3IgJ2ZpcnN0VHlwZXNlY29uZFR5cGVhbGxvY2F0ZURpYW1vbmRQaGloYW5kbGVMb2NhbEZ1bmN0aW9ubG9jYWxGdW5jdGlvblR5cGVjbG9zdXJlU3RhdGVzdGF0ZUFmdGVyQm9keW1lcmdlRmxvd3N0YXRlQmVmb3JlQ2F0Y2hzdGF0ZUFmdGVyQ2F0Y2hoYW5kbGVTdXBlck5vU3VjaE1ldGhvZE5vIG1lbWJlciBmb3VuZCBmb3Igc3VwZXIgcHJvcGVydHkgZ2V0OiBObyBtZW1iZXIgZm91bmQgZm9yIHN1cGVyIHByb3BlcnR5IHNldDogVW5leHBlY3RlZCBzdXBlciBpbnZvY2F0aW9uIHRhcmdldDogVHlwZUluZm9ybWF0aW9uQ29uc3RhbnRWaXNpdG9yVW5leHBlY3RlZCB1bmV2YWx1YXRlZCBjb25zdGFudDogUmVmaW5lbWVudExvY2FsU3RhdGVfZmllbGRzX3RyeUJsb2NraW5pdGlhbGNoaWxkUGF0aGRlZXBDb3B5T2ZmaWVsZFNjb3BlaXNJbmRlZmluaXRldGhlbkJyYW5jaGVsc2VCcmFuY2hpblBsYWNlc3RhdGVzYWxsQnJhbmNoZXNBYm9ydExvY2FsU3RhdGUoKSBbICBsb2NhbHM6Cl1sb2NhbHM9LGZpZWxkcz0sc2VlblJldHVybk9yVGhyb3csc2VlbkJyZWFrT3JDb250aW51ZWNvbXBpbGVyLnNyYy5pbmZlcnJlci5jbG9zdXJlX3RyYWNlckNsb3N1cmVUcmFjZXJWaXNpdG9ydHJhY2VkRWxlbWVudHNfY2FsbHNUb0FuYWx5emVUcmFjaW5nIGFic3RyYWN0IG1ldGhvZHM6IF9hbmFseXplQ2FsbF90YWdBc0Z1bmN0aW9uQXBwbHlUYXJnZXQgbWlnaHQgYmUgcGFzc2VkIHRvIGFwcGx5OiBfcmVnaXN0ZXJDYWxsRm9yTGF0ZXJBbmFseXNpc2Z1bmN0aW9uRWxlbWVudGN1cnJlbnRVc2VyYmFpbG91dFBhc3NlZCB0byBhIGNsb3N1cmVjYWxsZWRVc2VkIGluIEpTIF9jaGVja0lmRnVuY3Rpb25BcHBseXN0YXRpYyBjYWxsX2NoZWNrSWZDdXJyZW50VXNlcmR5bmFtaWMgY2FsbGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uU3RhdGljVGVhck9mZkNsb3N1cmVUcmFjZXJWaXNpdG9ydHJhY2VkRWxlbWVudGNvbXBpbGVyLnNyYy5pbmZlcnJlci5kZWJ1Z1ZFUkJPU0VQUklOVF9TVU1NQVJZQU5PTUFMWV9XQVJOUFJJTlRfR1JBUEhQUklOVF9HUkFQSF9BTExfTk9ERVNsb2NhbHNfaGFuZGxlckl0ZXJhYmxlTWl4aW5fbGV2ZWxjb3B5T2ZVbmV4cGVjdGVkIGJsb2NrICBmb3IgVmFyaWFibGVTY29wZS50cnlCbG9ja2NvbW1vblBhcmVudGZvckVhY2hMb2NhbFVudGlsU2NvcGVfZm9yRWFjaExvY2FsVW50aWxTY29wZXNlZW5Mb2NhbHNTY29wZSBub3QgZm91bmQ6IApvcmlnaW49c2NvcGU9Zm9yRWFjaExvY2FsVmFyaWFibGVTY29wZSggIGxldmVsOiAgY29weU9mOlZhcmlhYmxlU2NvcGUoICB0cnlCbG9jazogICB2YXJpYWJsZXM6ICAgICAgICBwYXJlbnQ6ICAgICByZXN0fSBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGVpbnRlcm5hbEZyb210aGVuU2NvcGVlbHNlU2NvcGVvdGhlclNjb3BleyBwb3NpdGlvbmFsID0gLCBuYW1lZCA9ICB9QXJndW1lbnRzVHlwZXMuaGFzaENvZGVBcmd1bWVudHNUeXBlc0l0ZXJhdG9yX2l0ZXJhdGVQb3NpdGlvbmFsaXRlcmF0ZWVfY3VycmVudEl0ZXJhdG9yTG9jYWxzSGFuZGxlck5vIGNvbW1vbiBwYXJlbnQgZm9yCjE6MjpOb24tZW1wdHkgY29tbW9uIHBhcmVudCBmb3IKbXlUeXBlbWVyZ2VMb2NhbGVsc2VUeXBlRGlmZiBjb21tb24gcGFyZW50IGZvcgoKMjpjb21tb246bWVyZ2VkYWxsb2NhdGVMb29wUGhpTG9jYWxzSGFuZGxlcihjb21waWxlci5zcmMuaW5mZXJyZXIubGlzdF90cmFjZXJMaXN0VHJhY2VyVmlzaXRvcnBvc2l0aW9uYWxMZW5ndGhVc2VkIGluIGEgbm90LW9rIHNlbGVjdG9yb2tMaXN0U2VsZWN0b3JzU2V0Y2hlY2tNdXRhYmxlY2hlY2tHcm93YWJsZWRvTm90Q2hhbmdlTGVuZ3RoU2VsZWN0b3JzU2V0Y29tcGlsZXIuc3JjLmluZmVycmVyLm1hcF90cmFjZXJNYXBUcmFjZXJWaXNpdG9yQWRkaW5nIG1hcCB3aXRoIHVua25vd24gdHlwZWluZm8gdG8gY3VycmVudCBtYXBNYXAgdXNlZCBpbiBhIG5vdC1vayBzZWxlY3RvciBbb2tNYXBTZWxlY3RvcnNTZXRjb21waWxlci5zcmMuaW5mZXJyZXIuc2V0X3RyYWNlclNldFRyYWNlclZpc2l0b3JBZGRpbmcgaXRlcmFibGUgd2l0aCB1bmtub3duIHR5cGVpbmZvIHRvIGN1cnJlbnQgc2V0U2V0IHVzZWQgaW4gYSBub3Qtb2sgc2VsZWN0b3IgW29rU2V0U2VsZWN0b3JTZXRkYXJ0MmpzLmluZmVycmVyLnR5cGVfZ3JhcGhfZHVtcFR5cGVHcmFwaER1bXBvdXRwdXREaXJ0eXBlZ3JhcGhhc3NpZ25tZW50c0JlZm9yZUFuYWx5c2lzYXNzaWdubWVudHNCZWZvcmVUcmFjaW5ndXNlZEZpbGVuYW1lc2FsbFR5cGVzZmlsZW5hbWVGcm9tRWxlbWVudGFkZE1pc3NpbmdOb2Rlc2dldC1zZXQtLWNvbnN0cnVjdG9yc2VyaWFsTnVtYmVyX0dyYXBoR2VuZXJhdG9ybm9kZUlkZXNjYXBlUmVnZXhwWyJ7fTw+fF1kZWZhdWx0Tm9kZUNvbG9yI2VlZmZlZXBoaUNvbG9yI2VlZmZmZm5hcnJvd0NvbG9yY2FsbENvbG9yI2ZmZmZlZXVuY2hhbmdlZEVkZ2VhZGRlZEVkZ2VncmVlbjRyZW1vdmVkRWRnZXJlZDN0ZW1wb3JhcnlFZGdlb3JhbmdlZ2V0Tm9kZWFwcGVuZGRpZ3JhcGgge3Nob3J0ZW5nZXRGcmVzaElkZXNjYXBlTGFiZWxkc3Rkc3RUZXh0Q29uY3JldGV8PHJldHVyblR5cGU+ICBbc2hhcGU9cmVjb3JkLHN0eWxlPWRvdHRlZCxsYWJlbD0iIl0gW2NvbG9yPSI6cmV0dXJuVHlwZSAtPiBnZXRTdHlsZUZvck5vZGVzdHlsZT1kb3R0ZWRzdHlsZT1maWxsZWQsZmlsbGNvbG9yPSJhcHBlbmREZXRhaWxzCihyZXR1cm4gdmFsdWUpCihmcm9tIDxhPiB7e318IFtzaGFwZT1yZWNvcmQsbGFiZWw9IiIsb3JpZ2luYWxTZXR0cmFjZXJTZXROYXJyb3cKUGhpIEVsZW1lbnRJbkNvbnRhaW5lckVsZW1lbnRJblNldEtleUluTWFwVmFsdWVJbk1hcFN0cmluZ0xpdGVyYWwKIkJvb2xMaXRlcmFsCmhhbmRsZUNhbGxhcmdOYW1lQ2xvc3VyZUNhbGxTaXRlU3RhdGljQ2FsbFNpdGVEeW5hbWljQ2FsbFNpdGVvYmpNZW1iZXIKQ2xvc3VyZQpBd2FpdApZaWVsZApUeXBlU3lzdGVtU3RyYXRlZ3lUeXBlU3lzdGVtX29yZGVyZWRUeXBlSW5mb3JtYXRpb25zbnVsbFR5cGVDYWNoZWludFR5cGVDYWNoZXVpbnQzMlR5cGVDYWNoZXVpbnQzMVR5cGVDYWNoZXBvc2l0aXZlSW50VHlwZUNhY2hlZG91YmxlVHlwZUNhY2hlbnVtVHlwZUNhY2hlYm9vbFR5cGVDYWNoZWZ1bmN0aW9uVHlwZUNhY2hlbGlzdFR5cGVDYWNoZWNvbnN0TGlzdFR5cGVDYWNoZWZpeGVkTGlzdFR5cGVDYWNoZWdyb3dhYmxlTGlzdFR5cGVDYWNoZXNldFR5cGVDYWNoZWNvbnN0U2V0VHlwZUNhY2hlbWFwVHlwZUNhY2hlY29uc3RNYXBUeXBlQ2FjaGVzdHJpbmdUeXBlQ2FjaGV0eXBlVHlwZUNhY2hlZHluYW1pY1R5cGVDYWNoZWFzeW5jRnV0dXJlVHlwZUNhY2hlc3luY1N0YXJJdGVyYWJsZVR5cGVDYWNoZWFzeW5jU3RhclN0cmVhbVR5cGVDYWNoZUFscmVhZHkgY29uc3RydWN0aW5nIGdyYXBoIGZvciBfaXNOb25OdWxsTmFycm93VW5leHBlY3RlZCBhYnN0cmFjdCBtZW1iZXIgX2dldEluZmVycmVkVHlwZU9mTWVtYmVyaXNFbGVtZW50SW5mZXJyZWRlbGVtZW50VHlwZU1hc2trZXlUeXBlTWFza3ZhbHVlVHlwZU1hc2trZXlUeXBlSW5mb3ZhbHVlVHlwZUluZm9maXJzdElucHV0c2Vjb25kSW5wdXRfYWRkUGhpaXNEeW5hbWljSW5nb3JpbmdOdWxsbWF5QmVOdWxsc3NhLnRyYWNlcl9IVHJhY2VyJkhHcmFwaFZpc2l0b3ImVHJhY2VyVXRpbGFkZFByZWRlY2Vzc29ycyAiQmFkZFN1Y2Nlc3NvcnNhZGRJbnN0cnVjdGlvbnNzdHJpbmdpZmllcmJjaWNoYW5nZXN0ZW1wb3JhcnlJZGluc3RydWN0aW9uU3RyaW5nIDx8QApmcm9tX2JjaXRvX2JjaXhoYW5kbGVyc3BoaUlkaW5wdXRJZHMgWyBISVJISW5zdHJ1Y3Rpb25TdHJpbmdpZmllckxhdGVWYWx1ZTogb3Bjb2RlQWJzOiBBZGRCaXRBbmRCaXROb3Q6IEJpdE9yQml0WG9ybGVuZ3RoSWRpbmRleElkQm91bmRzQ2hlY2s6IGxlbmd0aCA9ICwgaW5kZXggPSBCcmVhayA6IChCQnJlYWs6IChCQ29uc3RhbnQ6IENvbnRpbnVlIENvbnRpbnVlOiAoQmhhbmRsZUdlbmVyaWNJbnZva2VDcmVhdGVDcmVhdGVCb3hEaXZpZGVFeGl0RmllbGRHZXQ6IE51bGxDaGVjayBGaWVsZEdldDogdmFsdWVJZEZpZWxkU2V0OiByZWNlaXZlcklkUmVhZE1vZGlmeVdyaXRlOiA9IEdldExlbmd0aDogbG9jYWxOYW1lTG9jYWxHZXQ6IExvY2FsU2V0OiBHb3RvOiAoQkdyZWF0ZXJHcmVhdGVyRXF1YWxJZGVudGl0eWNvbmRpdGlvbklkSWYgKCk6IChCKSBlbHNlIChCaW52b2tlVHlwZWZ1bmN0aW9uTmFtZWFyZ3VtZW50c1N0cmluZ0luZGV4OiBJbmRleEFzc2lnbjogXSA9IEludGVyY2VwdG9yIChJbnRlcmNlcHRvcjogaGFuZGxlSW52b2tlRHluYW1pY0ludm9rZUNsb3N1cmVJbnZva2VEeW5hbWljTWV0aG9kSW52b2tlRHluYW1pY0dldHRlckludm9rZUR5bmFtaWNTZXR0ZXJJbnZva2VTdGF0aWNJbnZva2VTdXBlckludm9rZUNvbnN0cnVjdG9yQm9keUludm9rZUdlbmVyYXRvckJvZHlGb3JlaWduQ29kZTogTGVzc0xlc3NFcXVhbGVsZW1lbnRzU3RyaW5nTGl0ZXJhbExpc3Q6IFtib2R5QmxvY2tMb29wQnJhbmNoICgpIHRoZW4gKEJNdWx0aXBseU5lZ2F0ZTogTm90OiBQYXJhbWV0ZXJWYWx1ZTogTG9jYWxWYWx1ZTogUGhpOiBSZWY6IFJldHVybjogU2hpZnRMZWZ0U2hpZnRSaWdodFN0YXRpYzogTGF6eVN0YXRpYzogU3RhdGljU3RvcmU6IGxlZnRJZHJpZ2h0SWRTdHJpbmdDb25jYXQ6ICArIFN0cmluZ2lmeTogU3VidHJhY3RTd2l0Y2g6ICg6IEJkZWZhdWx0OiBCVGhyb3c6IFRocm93RXhwcmVzc2lvbjogVHJ1bmNhdGluZ0RpdmlkZVJlbWFpbmRlckV4aXRUcnlUcnk6ICwgQ2F0Y2g6ICwgRmluYWxseTogSm9pbjogQklzOiBJc1ZpYUludGVyY2VwdG9yOiBfdHlwZUNvbnZlcnNpb25LaW5kVHlwZUNvbnZlcnNpb246IF9wcmltaXRpdmVDaGVja0tpbmRQcmltaXRpdmVDaGVjazogUkVDRUlWRVJBUkdVTUVOVEJvb2xDb252ZXJzaW9uOiBUeXBlS25vd246ICB3aXRuZXNzZWQgYnkgUmFuZ2VDb252ZXJzaW9uOiBUeXBlSW5mb1JlYWRSYXc6IFR5cGVJbmZvUmVhZFZhcmlhYmxlOiBUeXBlSW5mb0V4cHJlc3Npb246IEF3YWl0OiBJc1Rlc3Q6IEFzQ2hlY2s6IEFzQ2hlY2tTaW1wbGU6IFN1YnR5cGVDaGVjazogTG9hZFR5cGU6IEluc3RhbmNlRW52aXJvbm1lbnQ6IFR5cGVFdmFsOiBUeXBlQmluZDogZGFydDJqcy5fcmVjaXBlX3N5bnRheFJlY2lwZXNlcGFyYXRvclN0cmluZ3RvVHlwZXRvVHlwZVN0cmluZ3B1c2hEeW5hbWljcHVzaER5bmFtaWNTdHJpbmdwdXNoVm9pZHB1c2hWb2lkU3RyaW5nd3JhcFN0YXJ3cmFwU3RhclN0cmluZ3dyYXBRdWVzdGlvbndyYXBRdWVzdGlvblN0cmluZ3dyYXBGdXR1cmVPcndyYXBGdXR1cmVPclN0cmluZ3N0YXJ0VHlwZUFyZ3VtZW50c3N0YXJ0VHlwZUFyZ3VtZW50c1N0cmluZ2VuZFR5cGVBcmd1bWVudHNTdHJpbmdzdGFydEZ1bmN0aW9uQXJndW1lbnRzc3RhcnRGdW5jdGlvbkFyZ3VtZW50c1N0cmluZ2VuZEZ1bmN0aW9uQXJndW1lbnRzZW5kRnVuY3Rpb25Bcmd1bWVudHNTdHJpbmdzdGFydE9wdGlvbmFsR3JvdXBzdGFydE9wdGlvbmFsR3JvdXBTdHJpbmdlbmRPcHRpb25hbEdyb3VwZW5kT3B0aW9uYWxHcm91cFN0cmluZ3N0YXJ0TmFtZWRHcm91cHN0YXJ0TmFtZWRHcm91cFN0cmluZ2VuZE5hbWVkR3JvdXBlbmROYW1lZEdyb3VwU3RyaW5nbmFtZVNlcGFyYXRvcm5hbWVTZXBhcmF0b3JTdHJpbmdnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXhnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXhTdHJpbmdleHRlbnNpb25PcGV4dGVuc2lvbk9wU3RyaW5ncHVzaE5ldmVyRXh0ZW5zaW9ucHVzaE5ldmVyRXh0ZW5zaW9uU3RyaW5ncHVzaEFueUV4dGVuc2lvbnB1c2hBbnlFeHRlbnNpb25TdHJpbmdfZm9ybWZlZWRfZm9ybWZlZWRTdHJpbmdfc3BhY2Vfc3BhY2VTdHJpbmdfZXhjbGFtYXRpb25fZXhjbGFtYXRpb25TdHJpbmdfaGFzaF9kb2xsYXJfZG9sbGFyU3RyaW5nX3BlcmNlbnRfcGVyY2VudFN0cmluZ19hbXBlcnNhbmRfYW1wZXJzYW5kU3RyaW5nX2Fwb3N0cm9waGVfYXBvc3Ryb3BoZVN0cmluZ19sZWZ0UGFyZW5fbGVmdFBhcmVuU3RyaW5nX3JpZ2h0UGFyZW5fcmlnaHRQYXJlblN0cmluZ19hc3Rlcmlza19hc3Rlcmlza1N0cmluZ19wbHVzX3BsdXNTdHJpbmdfY29tbWFTdHJpbmdfbWludXNfbWludXNTdHJpbmdfcGVyaW9kX3BlcmlvZFN0cmluZ19zbGFzaF9zbGFzaFN0cmluZ19kaWdpdDBfZGlnaXQ5X2NvbG9uU3RyaW5nX3NlbWljb2xvbl9zZW1pY29sb25TdHJpbmdfbGVzc1RoYW5fbGVzc1RoYW5TdHJpbmdfZXF1YWxzU3RyaW5nX2dyZWF0ZXJUaGFuX2dyZWF0ZXJUaGFuU3RyaW5nX3F1ZXN0aW9uX3F1ZXN0aW9uU3RyaW5nX2F0X2F0U3RyaW5nX3VwcGVyY2FzZUFfdXBwZXJjYXNlWl9sZWZ0QnJhY2tldFN0cmluZ19iYWNrc2xhc2hfYmFja3NsYXNoU3RyaW5nX3JpZ2h0QnJhY2tldFN0cmluZ19jaXJjdW1mbGV4X2NpcmN1bWZsZXhTdHJpbmdfdW5kZXJzY29yZV91bmRlcnNjb3JlU3RyaW5nX2JhY2t0aWNrX2JhY2t0aWNrU3RyaW5nX2xvd2VyY2FzZUFfbG93ZXJjYXNlWl9sZWZ0QnJhY2VTdHJpbmdfdmVydGljYWxfdmVydGljYWxTdHJpbmdfcmlnaHRCcmFjZVN0cmluZ190aWxkZV90aWxkZVN0cmluZ2RpZ2l0VmFsdWVpc0lkZW50aWZpZXJTdGFydHRlc3RFcXVpdmFsZW5jZTogU3RyaW5nLmZyb21DaGFyQ29kZSgpICE9IHRlc3RFeHRlbnNpb24udG9TdHJpbmcoKSAhPSBkYXJ0MmpzLmpzX2VtaXR0ZXIuY2xhc3Nfc3R1Yl9nZW5lcmF0b3JnZW5lcmF0ZUNsYXNzQ29uc3RydWN0b3J0eXBlSW5pdHN0aGlzLiMgPSAjZmllbGRJbml0aWFsaXplcnNmdW5jdGlvbigjLCAjKSB7ICM7ICM7IHRoaXMuIygpO31nZW5lcmF0ZUdldHRlcmZ1bmN0aW9uKCMpIHsgcmV0dXJuICMuIyB9Z2VuZXJhdGVTZXR0ZXJmdW5jdGlvbigjLCB2KSB7IHJldHVybiAjLiMgPSB2OyB9YnVpbGRHZXR0ZXIkcmVjZWl2ZXJ0aGlzLiMoIykjLiMoKWdlbmVyYXRlZFN0dWJzZ2VuZXJhdGVkU2VsZWN0b3JzY2xvc3VyZUNhbGxOYW1lZnVuY3Rpb24oIykgeyByZXR1cm4gIy4jKCMpOyB9anNOYW1lc2FkZE5vU3VjaE1ldGhvZEhhbmRsZXJzbWFza1NldHBhcmFtZXRlck5hbWVzYXJnTmFtZXN0aGlzLiNub1N1Y2hNZXRob2ROYW1lKCNyZWNlaXZlciwKICAgICAgICAgICAgICAgICAgICAjY3JlYXRlSW52b2NhdGlvbk1pcnJvcigjbWV0aG9kTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW50ZXJuYWxOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25hbWVkQXJndW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0eXBlQXJndW1lbnRDb3VudCkpZnVuY3Rpb24oJHJlY2VpdmVyLCAjKSB7IHJldHVybiAjIH1idWlsZFRlYXJPZmZDb2RldGVhck9mZkFjY2Vzc0V4cHJlc3Npb250ZWFyT2ZmR2xvYmFsT2JqZWN0U3RyaW5ndGVhck9mZkdsb2JhbE9iamVjdGZ1bmN0aW9uKCkgeyB0aHJvdyAiSGVscGVyICdjbG9zdXJlRnJvbVRlYXJPZmYnIG1pc3NpbmcuIiB9TWlzc2luZ0hlbHBlckZ1bmN0aW9uKGZ1bmN0aW9uKCkgeyB0aHJvdyAiSGVscGVyICdjbG9zdXJlRnJvbVRlYXJPZmYnIG1pc3NpbmcuIiB9KSgpdGVhck9mZkdldHRlcnRlYXJPZmZBY2Nlc3NUZXh0ZnVuY3Rpb24gdGVhck9mZkdldHRlcihmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCBpc0ludGVyY2VwdGVkKSB7CiAgcmV0dXJuIGlzSW50ZXJjZXB0ZWQKICAgICAgPyBuZXcgRnVuY3Rpb24oImZ1bmNzIiwgImFwcGx5VHJhbXBvbGluZUluZGV4IiwgInJlZmxlY3Rpb25JbmZvIiwgIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAjdGVhck9mZkdsb2JhbE9iamVjdFN0cmluZywgImMiLAogICAgICAgICAgInJldHVybiBmdW5jdGlvbiB0ZWFyT2ZmXyIgKyBuYW1lICsgKGZ1bmN0aW9uQ291bnRlcisrKSArICIocmVjZWl2ZXIpIHsiICsKICAgICAgICAgICAgImlmIChjID09PSBudWxsKSBjID0gIiArICN0ZWFyT2ZmQWNjZXNzVGV4dCArICIoIiArCiAgICAgICAgICAgICAgICAidGhpcywgZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgZmFsc2UsIHRydWUsIG5hbWUpOyIgKwogICAgICAgICAgICAgICAgInJldHVybiBuZXcgYyh0aGlzLCBmdW5jc1swXSwgcmVjZWl2ZXIsIG5hbWUpOyIgKwogICAgICAgICAgICJ9IikoZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgbmFtZSwgI3RlYXJPZmZHbG9iYWxPYmplY3QsIG51bGwpCiAgICAgIDogbmV3IEZ1bmN0aW9uKCJmdW5jcyIsICJhcHBseVRyYW1wb2xpbmVJbmRleCIsICJyZWZsZWN0aW9uSW5mbyIsICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgI3RlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcsICJjIiwKICAgICAgICAgICJyZXR1cm4gZnVuY3Rpb24gdGVhck9mZl8iICsgbmFtZSArIChmdW5jdGlvbkNvdW50ZXIrKykrICIoKSB7IiArCiAgICAgICAgICAgICJpZiAoYyA9PT0gbnVsbCkgYyA9ICIgKyAjdGVhck9mZkFjY2Vzc1RleHQgKyAiKCIgKwogICAgICAgICAgICAgICAgInRoaXMsIGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIGZhbHNlLCBmYWxzZSwgbmFtZSk7IiArCiAgICAgICAgICAgICAgICAicmV0dXJuIG5ldyBjKHRoaXMsIGZ1bmNzWzBdLCBudWxsLCBuYW1lKTsiICsKICAgICAgICAgICAgICJ9IikoZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgbmFtZSwgI3RlYXJPZmZHbG9iYWxPYmplY3QsIG51bGwpOwp9ICAgICAgZnVuY3Rpb24gdGVhck9mZkdldHRlcihmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCBpc0ludGVyY2VwdGVkKSB7CiAgICAgICAgdmFyIGNhY2hlID0gbnVsbDsKICAgICAgICByZXR1cm4gaXNJbnRlcmNlcHRlZAogICAgICAgICAgICA/IGZ1bmN0aW9uKHJlY2VpdmVyKSB7CiAgICAgICAgICAgICAgICBpZiAoY2FjaGUgPT09IG51bGwpIGNhY2hlID0gIygKICAgICAgICAgICAgICAgICAgICB0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgdHJ1ZSwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGNhY2hlKHRoaXMsIGZ1bmNzWzBdLCByZWNlaXZlciwgbmFtZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGNhY2hlID09PSBudWxsKSBjYWNoZSA9ICMoCiAgICAgICAgICAgICAgICAgICAgdGhpcywgZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgZmFsc2UsIGZhbHNlLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgY2FjaGUodGhpcywgZnVuY3NbMF0sIG51bGwsIG5hbWUpOwogICAgICAgICAgICAgIH07CiAgICAgIH0gICAgICBmdW5jdGlvbiB0ZWFyT2ZmKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwKICAgICAgICAgIHJlZmxlY3Rpb25JbmZvLCBpc1N0YXRpYywgbmFtZSwgaXNJbnRlcmNlcHRlZCkgewogICAgICB2YXIgY2FjaGUgPSBudWxsOwogICAgICByZXR1cm4gaXNTdGF0aWMKICAgICAgICAgID8gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKGNhY2hlID09PSBudWxsKSBjYWNoZSA9ICN0ZWFyT2ZmKAogICAgICAgICAgICAgICAgICB0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsCiAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb25JbmZvLCB0cnVlLCBmYWxzZSwgbmFtZSkucHJvdG90eXBlOwogICAgICAgICAgICAgIHJldHVybiBjYWNoZTsKICAgICAgICAgICAgfQogICAgICAgICAgOiB0ZWFyT2ZmR2V0dGVyKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwKICAgICAgICAgICAgICByZWZsZWN0aW9uSW5mbywgbmFtZSwgaXNJbnRlcmNlcHRlZCk7CiAgICB9ZGFydDJqcy5qc19lbWl0dGVyLmluc3RhbnRpYXRpb25fc3R1Yl9nZW5lcmF0b3JfZ2VuZXJhdGVTdHViZnVuY3Rpb25GaWVsZHRhcmdldFNlbGVjdG9ydGhpcy4jLiNbI110aGlzLiNbI11mdW5jdGlvbigjKSB7IHJldHVybiB0aGlzLiMuIygjKTsgfV9nZW5lcmF0ZVNpZ25hdHVyZVN0dWJfZ2VuZXJhdGVTaWduYXR1cmVOZXdSdGlfZ2VuZXJhdGVTaWduYXR1cmVMZWdhY3lmdW5jdGlvbigpIHsgcmV0dXJuICMoIyh0aGlzLiMpLCB0aGlzLiMpOyB9X2dlbmVyaWNDbG9zdXJlQ2FuJ3QgZmluZCBDbG9zdXJlIGZpZWxkIG9mIGNhbGxTZWxlY3RvcnNjb21wdXRlTGl2ZVBhcmFtZXRlclN0cnVjdHVyZXNwYXJhbWV0ZXJTdHJ1Y3R1cmVzc3R1YnNnZW5lcmljQ2FsbFN0cnVjdHVyZWdlbmVyaWNTZWxlY3RvcmRhcnQyanMuanNfZW1pdHRlci5pbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvcmVtYmVkZGVkTmFtZXNpbnRlcmNlcHRvckZvcmJ1aWxkSW50ZXJjZXB0b3JDaGVjayh0eXBlb2YgcmVjZWl2ZXIpID09ICJib29sZWFuImludGVybmFsIGVycm9ycmVjZWl2ZXIuY29uc3RydWN0b3IgPT0gQXJyYXkodHlwZW9mIHJlY2VpdmVyKSA9PSAic3RyaW5nInJlY2VpdmVyID09IG51bGxpZiAoIykgcmV0dXJuICNoYXNBcnJheWhhc0Jvb2xoYXNEb3VibGVoYXNJbnRoYXNOdWxsaGFzTnVtYmVyaGFzU3RyaW5naGFzTmF0aXZlYW55TmF0aXZlQ2xhc3Nlc3doZW5OdW1iZXJpbnRlcmNlcHRvckZvck51bWJlcnsKICAgICAgICAgICAgaWYgKE1hdGguZmxvb3IocmVjZWl2ZXIpID09IHJlY2VpdmVyKSByZXR1cm4gIzsKICAgICAgICAgICAgcmV0dXJuICM7CiAgICAgICAgfXJldHVybiAjaWYgKHR5cGVvZiByZWNlaXZlciA9PSAibnVtYmVyIikgIztpZiAocmVjZWl2ZXIgPT0gbnVsbCkgcmV0dXJuIHJlY2VpdmVyewogICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciAhPSAib2JqZWN0IikgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgPT0gImZ1bmN0aW9uIiApIHJldHVybiAjOwogICAgICAgICAgICAgIHJldHVybiByZWNlaXZlcjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChyZWNlaXZlciBpbnN0YW5jZW9mICMpIHJldHVybiByZWNlaXZlcjsKICAgICAgICAgIHJldHVybiAjKHJlY2VpdmVyKTsKICAgICAgfWpzVW5rbm93bmlmICghKHJlY2VpdmVyIGluc3RhbmNlb2YgIykpIHJldHVybiAjO3JldHVybiByZWNlaXZlcmZ1bmN0aW9uKHJlY2VpdmVyKSB7ICM7IH1fZ2VuZXJhdGVJc0pzSW5kZXhhYmxlQ2FsbHVzZTF1c2UyZGlzcGF0Y2hQcm9wZXJ0eWhlbHBlckV4cHJlc3Npb25fZmFzdFBhdGhGb3JPbmVTaG90SW50ZXJjZXB0b3J7CiAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkgcmV0dXJuIGEwID09IG51bGw7CiAgICAgICAgICBpZiAodHlwZW9mIHJlY2VpdmVyICE9ICJvYmplY3QiKQogICAgICAgICAgICByZXR1cm4gYTAgIT0gbnVsbCAmJiByZWNlaXZlciA9PT0gYTA7CiAgICAgICAgfXJlY2VpdmVyICBhMCMgPj4+IDBpZiAodHlwZW9mIHJlY2VpdmVyID09ICJudW1iZXIiICYmIHR5cGVvZiBhMCA9PSAibnVtYmVyIikgIHJldHVybiAjO2lmICh0eXBlb2YgcmVjZWl2ZXIgPT0gIm51bWJlciIpIHJldHVybiAtcmVjZWl2ZXIgICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciA9PSAibnVtYmVyIiAmJiBNYXRoLmZsb29yKHJlY2VpdmVyKSA9PSByZWNlaXZlcikKICAgICAgICAgICAgcmV0dXJuICh+cmVjZWl2ZXIpID4+PiAwOwogICAgICAgICAgY29udGFpbnNBcnJheWNvbnRhaW5zU3RyaW5nY29udGFpbnNKc0luZGV4YWJsZWFycmF5Q2hlY2tnZW5lcmljSW5kZXhhYmxlQ2hlY2tvckV4cHR5cGVvZiByZWNlaXZlciA9PSAic3RyaW5nIiAgICAgICAgICBpZiAodHlwZW9mIGEwID09PSAibnVtYmVyIikKICAgICAgICAgICAgaWYgKCMpCiAgICAgICAgICAgICAgaWYgKChhMCA+Pj4gMCkgPT09IGEwICYmIGEwIDwgcmVjZWl2ZXIubGVuZ3RoKQogICAgICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyW2EwXTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGEwID09PSAibnVtYmVyIikKICAgICAgICAgICAgaWYgKCMgJiYgIXJlY2VpdmVyLmltbXV0YWJsZSRsaXN0ICYmCiAgICAgICAgICAgICAgICAoYTAgPj4+IDApID09PSBhMCAmJiBhMCA8IHJlY2VpdmVyLmxlbmd0aCkKICAgICAgICAgICAgICByZXR1cm4gcmVjZWl2ZXJbYTBdID0gYTE7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciA9PT0gIm51bWJlciIpIHJldHVybiBNYXRoLmFicyhyZWNlaXZlcik7CiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgPT09ICJudW1iZXIiKQogICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyID4gMCA/IDEgOiByZWNlaXZlciA8IDAgPyAtMSA6IHJlY2VpdmVyOwogICAgICAgIGdldEludGVyY2VwdG9yTmFtZWdsb2JhbE9iamVjdG9wdGltaXplZFBhdGhmdW5jdGlvbigjKSB7ICM7IHJldHVybiAjLiMocmVjZWl2ZXIpLiMoIykgfWRhcnQyanMuanNfZW1pdHRlci5tYWluX2NhbGxfc3R1Yl9nZW5lcmF0b3JnZW5lcmF0ZUludm9rZU1haW5tYWluQ2FsbENsb3N1cmVjdXJyZW50U2NyaXB0QWNjZXNzICAgICAgKGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICBjYWxsYmFjayhudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFzIGEgY29udGVudC1zY3JpcHQgb2YgYSBjaHJvbWUtZXh0ZW5zaW9uIHRoZQogICAgICAgIC8vICdjdXJyZW50U2NyaXB0JyBpcyBgbnVsbGAgKGJ1dCBub3QgdW5kZWZpbmVkKS4KICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIGNhbGxiYWNrKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5zY3JpcHRzOwogICAgICAgIGZ1bmN0aW9uIG9uTG9hZChldmVudCkgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIHNjcmlwdHNbaV0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsIG9uTG9hZCwgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgICAgY2FsbGJhY2soZXZlbnQudGFyZ2V0KTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBzY3JpcHRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBvbkxvYWQsIGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0pKGZ1bmN0aW9uKGN1cnJlbnRTY3JpcHQpIHsKICAgICAgICAjY3VycmVudFNjcmlwdCA9IGN1cnJlbnRTY3JpcHQ7CgogICAgICAgIGlmICh0eXBlb2YgZGFydE1haW5SdW5uZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGRhcnRNYWluUnVubmVyKCNtYWluQ2FsbENsb3N1cmUsIFtdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgI21haW5DYWxsQ2xvc3VyZShbXSk7CiAgICAgICAgfQogICAgICB9KWRhcnQyanMuanNfZW1pdHRlci5uYXRpdmVfZ2VuZXJhdG9yTmF0aXZlR2VuZXJhdG9ybmVlZHNJc29sYXRlQWZmaW5pdHlUYWdJbml0aWFsaXphdGlvbmdlbmVyYXRlSXNvbGF0ZUFmZmluaXR5VGFnSW5pdGlhbGl6YXRpb25pbnRlcm5TdHJpbmdGdW5jdGlvbmdldElzb2xhdGVUYWdBY2Nlc3Npc29sYXRlVGFnQWNjZXNzZGlzcGF0Y2hQcm9wZXJ0eU5hbWVBY2Nlc3MgICAgICAhZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGludGVybiA9ICNpbnRlcm5TdHJpbmdGdW5jdGlvbjsKCiAgICAgICAgI2dldElzb2xhdGVUYWcgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICByZXR1cm4gaW50ZXJuKCJfX19kYXJ0XyIgKyBuYW1lICsgI2lzb2xhdGVUYWcpOwogICAgICAgIH07CgogICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IGRpZmZlcmVudCBwcm9ncmFtcyBsb2FkZWQgaW50byB0aGUgc2FtZSBjb250ZXh0IChwYWdlKQogICAgICAgIC8vIHVzZSBkaXN0aW5jdCBkaXNwYXRjaCBwcm9wZXJpZXMsIHdlIHBsYWNlIGFuIG9iamVjdCBvbiBgT2JqZWN0YCB0bwogICAgICAgIC8vIGNvbnRhaW4gdGhlIG5hbWVzIGFscmVhZHkgaW4gdXNlLgogICAgICAgIHZhciB0YWJsZVByb3BlcnR5ID0gIl9fX2RhcnRfaXNvbGF0ZV90YWdzXyI7CiAgICAgICAgdmFyIHVzZWRQcm9wZXJ0aWVzID0gT2JqZWN0W3RhYmxlUHJvcGVydHldIHx8CiAgICAgICAgICAgIChPYmplY3RbdGFibGVQcm9wZXJ0eV0gPSBPYmplY3QuY3JlYXRlKG51bGwpKTsKCiAgICAgICAgdmFyIHJvb3RQcm9wZXJ0eSA9ICJfIjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgOyBpKyspIHsKICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGludGVybihyb290UHJvcGVydHkgKyAiXyIgKyBpICsgIl8iKTsKICAgICAgICAgIGlmICghKHByb3BlcnR5IGluIHVzZWRQcm9wZXJ0aWVzKSkgewogICAgICAgICAgICB1c2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSAxOwogICAgICAgICAgICAjaXNvbGF0ZVRhZyA9IHByb3BlcnR5OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCNpbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSkgewogICAgICAgICAgI2Rpc3BhdGNoUHJvcGVydHlOYW1lID0gI2dldElzb2xhdGVUYWcoImRpc3BhdGNoX3JlY29yZCIpOwogICAgICAgIH0KICAgICAgfSgpOwogICAgaW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHlnZW5lcmF0ZUlzb2xhdGVUYWdSb290WnhZeFhlbmNvZGVOYXRpdmVJbmZvbm9uTGVhZlRhZ3Nmb3JtYXRUYWdzbGVhZlN0cm5vbkxlYWZTdHJidWlsZE5hdGl2ZUluZm9IYW5kbGVyaW5mb0FjY2Vzc3N1YmNsYXNzUmVhZEdlbmVyYXRvcmludGVyY2VwdG9yc0J5VGFnQWNjZXNzbGVhZlRhZ3NBY2Nlc3NzdWJjbGFzc1JlYWRzdWJjbGFzc2VzW2ldICAgICAgICAgIC8vIFRoZSBuYXRpdmUgaW5mbyBsb29rcyBsaWtlIHRoaXM6CiAgICAgICAgICAvLwogICAgICAgICAgLy8gSHRtbEVsZW1lbnQ6IHsKICAgICAgICAgIC8vICAgICAiJSI6ICJIVE1MRGl2RWxlbWVudHxIVE1MQW5jaG9yRWxlbWVudDtIVE1MRWxlbWVudDtGYW5jeUJ1dHRvbiIKICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgZmlyc3QgdHdvIHNlbWljb2xvbi1zZXBhcmF0ZWQgcGFydHMgY29udGFpbiBkaXNwYXRjaCB0YWdzLCB0aGUKICAgICAgICAgIC8vIHRoaXJkIGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IG5hbWVzIGZvciBjbGFzc2VzLgogICAgICAgICAgLy8KICAgICAgICAgIC8vIFRoZSB0YWdzIGluZGljYXRlIHRoYXQgSmF2YVNjcmlwdCBvYmplY3RzIHdpdGggdGhlIGRpc3BhdGNoIHRhZ3MKICAgICAgICAgIC8vICh1c3VhbGx5IGNvbnN0cnVjdG9yIG5hbWVzKSBIVE1MRGl2RWxlbWVudCwgSFRNTEFuY2hvckVsZW1lbnQgYW5kCiAgICAgICAgICAvLyBIVE1MRWxlbWVudCBhbGwgbWFwIHRvIHRoZSBEYXJ0IG5hdGl2ZSBjbGFzcyBuYW1lZCBIdG1sRWxlbWVudC4KICAgICAgICAgIC8vIFRoZSBmaXJzdCBzZXQgaXMgZm9yIGVmZmVjdGl2ZSBsZWFmIG5vZGVzIGluIHRoZSBoaWVyYXJjaHksIHRoZQogICAgICAgICAgLy8gc2Vjb25kIHNldCBpcyBub24tbGVhZiBub2Rlcy4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgdGhpcmQgcGFydCBjb250YWlucyB0aGUgSmF2YVNjcmlwdCBuYW1lcyBvZiBEYXJ0IGNsYXNzZXMgdGhhdAogICAgICAgICAgLy8gZXh0ZW5kIHRoZSBuYXRpdmUgY2xhc3MuIEhlcmUsIEZhbmN5QnV0dG9uIGV4dGVuZHMgSHRtbEVsZW1lbnQsIHNvCiAgICAgICAgICAvLyB0aGUgcnVudGltZSBuZWVkcyB0byBrbm93IHRoYXQgd2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSBpcyB0aGUKICAgICAgICAgIC8vIHByb3RvdHlwZSB0aGF0IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGluIGNyZWF0aW5nIHRoZSBjdXN0b20gZWxlbWVudC4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBidWlsZCB0YWJsZXMgcmVmZXJlbmNlZCBieQogICAgICAgICAgLy8gZ2V0TmF0aXZlSW50ZXJjZXB0b3IgYW5kIGN1c3RvbSBlbGVtZW50IHN1cHBvcnQuCiAgICAgICAgICB7CiAgICAgICAgICAgIHZhciBuYXRpdmVTcGVjID0gI2luZm8uc3BsaXQoIjsiKTsKICAgICAgICAgICAgaWYgKG5hdGl2ZVNwZWNbMF0pIHsKICAgICAgICAgICAgICB2YXIgdGFncyA9IG5hdGl2ZVNwZWNbMF0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICNpbnRlcmNlcHRvcnNCeVRhZ0FjY2Vzc1t0YWdzW2ldXSA9ICNjb25zdHJ1Y3RvcjsKICAgICAgICAgICAgICAgICNsZWFmVGFnc0FjY2Vzc1t0YWdzW2ldXSA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuYXRpdmVTcGVjWzFdKSB7CiAgICAgICAgICAgICAgdGFncyA9IG5hdGl2ZVNwZWNbMV0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICBpZiAoI2FsbG93TmF0aXZlc1N1YmNsYXNzaW5nKSB7CiAgICAgICAgICAgICAgICBpZiAobmF0aXZlU3BlY1syXSkgewogICAgICAgICAgICAgICAgICB2YXIgc3ViY2xhc3NlcyA9IG5hdGl2ZVNwZWNbMl0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YmNsYXNzID0gI3N1YmNsYXNzUmVhZDsKICAgICAgICAgICAgICAgICAgICBzdWJjbGFzcy4jbmF0aXZlU3VwZXJjbGFzc1RhZ05hbWUgPSB0YWdzWzBdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAjaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3NbdGFnc1tpXV0gPSAjY29uc3RydWN0b3I7CiAgICAgICAgICAgICAgICAgICNsZWFmVGFnc0FjY2Vzc1t0YWdzW2ldXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgbmF0aXZlU3VwZXJjbGFzc1RhZ05hbWVhbGxvd05hdGl2ZXNTdWJjbGFzc2luZ2RhcnQyanMuanNfZW1pdHRlci5wYXJhbWV0ZXJfc3R1Yl9nZW5lcmF0b3JlbXB0eVNlbGVjdG9yU2V0bmVlZHNTdXBlckdldHRlcmdlbmVyYXRlUGFyYW1ldGVyU3R1YmV4dHJhQXJndW1lbnRDb3VudHJlY2VpdmVyQXJndW1lbnROYW1ldGFyZ2V0QXJndW1lbnRzb3B0aW9uYWxQYXJhbWV0ZXJTdGFydHR5cGVSdGlyZXR1cm4gIy4jLmNhbGwodGhpcywgIyk7cmV0dXJuIHRoaXMuIygjKTtyZXR1cm4gIygjKWZ1bmN0aW9uKCMpIHsgIzsgfWxpdmVTZWxlY3RvcnNtZW1iZXJUeXBlUGFyYW1ldGVyc3JlbmFtZWRDYWxsU2VsZWN0b3Jzc3R1YlNlbGVjdG9yc25hbWVkU2VsZWN0b3JjbG9zdXJlU2VsZWN0b3JyZW5hbWVkU2VsZWN0b3JyZW5hbWVkU2VsZWN0b3JXaXRoVHlwZUFyZ3VtZW50c2RhcnQyanMuanNfZW1pdHRlci5ydW50aW1lX3R5cGVfZ2VuZXJhdG9yanNJbnRlcm9wQW5hbHlzaXNGdW5jdGlvblR5cGVTaWduYXR1cmVFbWl0dGVyY2xhc3NGdW5jdGlvblR5cGVUeXBlVGVzdFR5cGVUZXN0c2lzVGVzdF9wcm9wZXJ0aWVzYWRkSXNUZXN0YWRkU3Vic3RpdHV0aW9uYWRkU2lnbmF0dXJlaGFuZGxlVHlwZVRlc3R0eXBlVGVzdF9vdXRwdXRVbml0VmlzaXRvcmdlbmVyYXRlRnVuY3Rpb25UeXBlU2lnbmF0dXJlaXNUeXBlQ29udGFpbmVkSW5nZW5lcmF0ZVR5cGVDaGVja19nZXRTdWJzdGl0dXRpb25Db2RlX2dlbmVyYXRlSXNUZXN0c09uZnVuY3Rpb24oKSB7IHJldHVybiAjIH1fZ2V0VmFyaWFibGVOYW1lX2dldFN1YnN0aXR1dGlvblJlcHJlc2VudGF0aW9uZW1pdFR5cGVDaGVja2dlbmVyYXRlZF9UeXBlQ29udGFpbmVkSW5PdXRwdXRVbml0VmlzaXRvcmRhcnQyanMudGFyZ2V0X2NoZWNrc2R5bmFtaWNDaGVja3Njb3ZhcmlhbnRDaGVja3NfY2hlY2tPdGhlclBhcmFtZXRlcnNfY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzX2NoZWNrVHlwZVBhcmFtZXRlcnNfSnVtcEhhbmRsZXJFbnRyeWp1bXBJbnN0cnVjdGlvbkp1bXBIYW5kbGVyaGFzQW55Q29udGludWVOdWxsSnVtcEhhbmRsZXJOdWxsSnVtcEhhbmRsZXIuZ2VuZXJhdGVCcmVhayBzaG91bGQgbm90IGJlIGNhbGxlZC5OdWxsSnVtcEhhbmRsZXIuZ2VuZXJhdGVDb250aW51ZSBzaG91bGQgbm90IGJlIGNhbGxlZC5UYXJnZXRKdW1wSGFuZGxlcmp1bXBzY29udGludWVJbnN0cnVjdGlvblN3aXRjaENhc2VKdW1wSGFuZGxlcmlzQ29udGludWVUb1N3aXRjaENhc2VLZXJuZWxTdHJpbmdCdWlsZGVyVW5leHBlY3RlZCBub2RlOiBjb25jYXRyZWRpcmVjdGlvbk1hcHBpbmd0eXBlVmFyaWFibGVMb2NhbHNjYWNoZWRUeXBlT2ZUaGlzY2FjaGVkVHlwZXNPZkNhcHR1cmVkVmFyaWFibGVzYWN0aXZhdGlvblZhcmlhYmxlc3JlZGlyZWN0RWxlbWVudGlzU3RvcmVkSW5DbG9zdXJlRmllbGRjcmVhdGVCb3hqRnJvbWlzUGFyYW1ldGVydXBkYXRlQ2FwdHVyZUJveGN1cnJlbnRCb3h0b0JlQ29waWVkRWxlbWVudHNvbGRCb3huZXdCb3hib3hlZFZhcmlhYmxlb2xkVmFsdWVnZXRUeXBlT2ZUaGlzaXNOYXRpdmVVcGdyYWRlRmFjdG9yeWlzQWNjZXNzZWREaXJlY3RseXJlZGlyZWN0VGFyZ2V0X2lzVXNlZEluVHJ5T3JHZW5lcmF0b3JSdW50aW1lIHR5cGUgaW5mb3JtYXRpb24gbm90IGF2YWlsYWJsZSBmb3IgQ2Fubm90IGZpbmQgdmFsdWUgZ2V0VHlwZU9mQ2FwdHVyZWRWYXJpYWJsZWxvY2FsQm94bG9jYWxWYWx1ZWdldExvY2FsTG9jYWwgIGlzIHN0b3JlZCBpbiBhIGNsb3N1cmUgZmllbGQubG9vcEVudHJ5c2F2ZWREaXJlY3RMb2NhbHNlbnRlckxvb3BVcGRhdGVzcG9zdExvb3BEZWZpbml0aW9ubWVyZ2VXaXRob3RoZXJMb2NhbHNqb2luZWRMb2NhbHNtaW5lbG9jYWxzSGFuZGxlcnN0aGlzVmFsdWVTeW50aGV0aWNMb2NhbF9uZXh0SGFzaENvZGVTeW50aGV0aWNMb2NhbChMb29wSGFuZGxlcmluaXRpYWxpemVyR3JhcGhzdGFydEJsb2NraW5pdGlhbGl6ZXJCbG9ja2JlZ2luQm9keUJsb2NrdXBkYXRlR3JhcGh1cGRhdGVCbG9ja3VwZGF0ZUVuZEJsb2NrbG9vcEtpbmRsYWJlbEdyYXBobGFiZWxJbmZvcHJldmlvdXNCbG9ja2JyYW5jaEV4aXRCbG9ja2xvb3BFeGl0QmxvY2tLZXJuZWxMb29wSGFuZGxlcl9LZXJuZWxMb29wVHlwZVZpc2l0b3JTc2FCcmFuY2hzdGFydExvY2Fsc2V4aXRMb2NhbHNTc2FCcmFuY2hCdWlsZGVyZGlhZ25vc3RpY05vZGVjaGVja05vdEFib3J0ZWRhYm9ydGVkIGNvbnRyb2wgZmxvd2NvbmRpdGlvbkJyYW5jaHN0YXJ0QnJhbmNoY29uZGl0aW9uQnJhbmNoTG9jYWxzQ2FuQmVSZXVzZWRtZXJnZUxvY2Fsc21heVJldXNlRnJvbUxvY2Fsc2Zyb21CcmFuY2h0b0JyYW5jaGZyb21Mb2NhbHNidWlsZEJyYW5jaHZpc2l0QnJhbmNoam9pbkJyYW5jaF9oYW5kbGVEaWFtb25kQnJhbmNoaGFuZGxlSWZOdWxsbGVmdEV4cHJlc3Npb25ib29saWZpZWRMZWZ0Ym9vbGlmaWVkUmlnaHRub3RJc0FuZHRoZW5WYWx1ZWVsc2VWYWx1ZWNvbmRpdGlvblN0YXJ0QmxvY2tjb25kaXRpb25HcmFwaFN3aXRjaENvbnRpbnVlQW5hbHlzaXNjb250YWluc0NvbnRpbnVlc3dpdGNoQ2FzZUJvZHljb250aW51ZVN0bXR0cnlGaW5hbGx5U3RhdGVtZW50IHR5cGUgIG5vdCBoYW5kbGVkIGluIElyVG9FbGVtZW50TWFwZGFydDJqcy5qc19tb2RlbC5lbnZKUHJvZ3JhbUVudl9jb21wb25lbnRzSkxpYnJhcnlFbnZsaWJyYXJ5LWVudl9jbGFzc01hcF9tZW1iZXJNYXBfc2V0dGVyTWFwc2V0dGVyTWFwSkxpYnJhcnlEYXRhaW1wb3J0Q291bnRKQ2xhc3NFbnZLaW5kSkNsYXNzRW52S2luZC5ub2RlSkNsYXNzRW52S2luZC5jbG9zdXJlSkNsYXNzRW52S2luZC5yZWNvcmRKQ2xhc3NFbnZVbnN1cHBvcnRlZCBKQ2xhc3NFbnZLaW5kIEpDbGFzc0VudkltcGxjbGFzcy1lbnZfY29uc3RydWN0b3JNYXBfY29uc3RydWN0b3JCb2R5TGlzdFJlY29yZEVudnJlY29yZC1lbnZDbG9zdXJlQ2xhc3NFbnZjbG9zdXJlLWNsYXNzLWVudkpDbGFzc0RhdGFLaW5kSkNsYXNzRGF0YUtpbmQubm9kZUpDbGFzc0RhdGFVbmV4cGVjdGVkIEpDbGFzc0RhdGFLaW5kIEpDbGFzc0RhdGFJbXBsaXNDYWxsVHlwZUNvbXB1dGVkSk1lbWJlckRhdGFLaW5kSk1lbWJlckRhdGFLaW5kLmZ1bmN0aW9uSk1lbWJlckRhdGFLaW5kLmZpZWxkSk1lbWJlckRhdGFLaW5kLmNvbnN0cnVjdG9ySk1lbWJlckRhdGFLaW5kLmNvbnN0cnVjdG9yQm9keUpNZW1iZXJEYXRhS2luZC5zaWduYXR1cmVKTWVtYmVyRGF0YUtpbmQuZ2VuZXJhdG9yQm9keWNsb3N1cmVGdW5jdGlvbkpNZW1iZXJEYXRhVW5leHBlY3RlZCBKTWVtYmVyRGF0YUtpbmQgSk1lbWJlckRhdGFJbXBsRnVuY3Rpb25EYXRhRnVuY3Rpb25EYXRhVHlwZVZhcmlhYmxlc01peGluRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluX0Z1bmN0aW9uRGF0YUltcGwmSk1lbWJlckRhdGFJbXBsJkZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbl9GdW5jdGlvbkRhdGFJbXBsJkpNZW1iZXJEYXRhSW1wbCZGdW5jdGlvbkRhdGFUeXBlVmFyaWFibGVzTWl4aW4mRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluRnVuY3Rpb25EYXRhSW1wbGZ1bmN0aW9uLWRhdGFVbmV4cGVjdGVkIG1lbWJlciBub2RlIFNpZ25hdHVyZUZ1bmN0aW9uRGF0YXNpZ25hdHVyZS1mdW5jdGlvbi1kYXRhU2lnbmF0dXJlRnVuY3Rpb25EYXRhLmdldEZ1bmN0aW9uVHlwZVNpZ25hdHVyZURhdGEuZm9yRWFjaFBhcmFtZXRlckRlbGVnYXRlZEZ1bmN0aW9uRGF0YWJhc2VEYXRhR2VuZXJhdG9yQm9keUZ1bmN0aW9uRGF0YWdlbmVyYXRvci1ib2R5LWRhdGFKQ29uc3RydWN0b3JEYXRhSkNvbnN0cnVjdG9yRGF0YUltcGxjb25zdHJ1Y3Rvci1kYXRhX2NvbnN0YW50Q29uc3RydWN0b3Jjb21wdXRlQ29uc3RhbnRDb25zdHJ1Y3RvclVuZXhwZWN0ZWQgY29uc3RydWN0b3IgQ29uc3RydWN0b3JEYXRhSW1wbC5fZ2V0Q29uc3RydWN0b3JDb25zdGFudENvbnN0cnVjdG9yQm9keURhdGFJbXBsY29uc3RydWN0b3ItYm9keS1kYXRhSkZpZWxkRGF0YUpGaWVsZERhdGFJbXBsZmllbGQtZGF0YV9jb25zdGFudEV4cHJlc3Npb25GaWVsZERhdGFJbXBsLmdldEZpZWxkQ29uc3RhbnRKVHlwZWRlZkRhdGFKVHlwZVZhcmlhYmxlRGF0YV9kZWZhdWx0VHlwZW9yZGVyZWRfdHlwZXNldE9yZGVyZWRUeXBlU2V0b3JkZXJlZC10eXBlLXNldF9sZXZlbHN0eXBlc0NvdW50dHlwZUxpbmtCdWlsZGVybGlua3NsZXZlbENvdW50bGV2ZWxzdHlwZUxpc3RsZXZlbExpc3RDYW5ub3QgZXh0ZW5kIGdlbmVyaWMgY2xhc3MgIHVzaW5nIE9yZGVyZWRUeXBlU2V0LmV4dGVuZENsYXNzZXh0ZW5kZWRUeXBlc2xldmVsT2Zmc2V0c09yZGVyZWRUeXBlU2V0QnVpbGRlck9yZGVyZWRUeXBlU2V0QnVpbGRlckJhc2VfYWRkQWxsU3VwZXJ0eXBlc3RvVHlwZVNldFN1cGVydHlwZXMgbm90IGNvbXB1dGVkIG9uIGR1cmluZyByZXNvbHV0aW9uIG9mIF9hZGRBdERlcHRocHJldmV4aXN0aW5nVHlwZUludmFsaWQgb3JkZXJlZCB0eXBlc2V0IGZvciBkYXJ0MmpzLmNvbXBpbGVfdGltZV9jb25zdGFudF9ldmFsdWF0b3JDb25zdGFudEVudmlyb25tZW50QmFja2VuZENvbnN0YW50RW52aXJvbm1lbnRyZWdpc3RlckxhenlTdGF0aWNDb25zdGFudENvbXBpbGVyVGFza0NhY2hlZFN0YXRpY1R5cGVObyBzdGF0aWMgdHlwZSBmb3VuZCBmb3IgTm8gZm9yLWluIGl0ZXJhdG9yIHR5cGUgZm91bmQgZm9yIE5vIHN0YXRpYyB0eXBlIGNhY2hlZCBmb3Iga2VybmVsLmRlYnVnX0RlYnVnUHJpbnRlciZWaXNpdG9yJkluZGVudGF0aW9uX0RlYnVnUHJpbnRlciZWaXNpdG9yJkluZGVudGF0aW9uJlRhZ2dpbmctLXVubmFtZWQtLUtlcm5lbERhcnRUeXBlc3N1YnR5cGVWaXNpdG9ycG90ZW50aWFsU3VidHlwZVZpc2l0b3JLZXJuZWxPcmRlcmVkVHlwZVNldEJ1aWxkZXJBYnN0cmFjdFR5cGVSZWxhdGlvbk1peGluX0tlcm5lbFN1YnR5cGVWaXNpdG9yJlN1YnR5cGVWaXNpdG9yJkFic3RyYWN0VHlwZVJlbGF0aW9uTWl4aW5LZXJuZWxTdWJ0eXBlVmlzaXRvcl9fS2VybmVsUG90ZW50aWFsU3VidHlwZVZpc2l0b3ImUG90ZW50aWFsU3VidHlwZVZpc2l0b3ImQWJzdHJhY3RUeXBlUmVsYXRpb25NaXhpbl9LZXJuZWxQb3RlbnRpYWxTdWJ0eXBlVmlzaXRvclN0cmluZ2lmaWVyQ29uc3RhbnRpZmllcmZhaWxOb2RlX2luaXRpYWxpemVyTG9jYWxzX2NvbXB1dGVMaXN0X2NvbXB1dGVBcmd1bWVudHNfY29tcHV0ZUNvbnN0cnVjdG9ySW52b2NhdGlvbnJlZ2lzdGVyRmllbGRVbmV4cGVjdGVkIGluaXRpYWxpemVyIERhcnRUeXBlQ29udmVydGVyY3VycmVudEZ1bmN0aW9uVHlwZVBhcmFtZXRlcnNDb25zdGFudFZhbHVlZmllclVuZXhwZWN0ZWQgdW5ldmFsdWF0ZWQgY29uc3RhbnQgZGFydDJqcy5rZXJuZWwuZW52bWVyZ2VTb3J0S1Byb2dyYW1FbnZfYWRkTGlicmFyaWVzX2Vuc3VyZUxpYnJhcnlNYXBLTGlicmFyeUVudl9lbnN1cmVDbGFzc01hcF9lbnN1cmVNZW1iZXJNYXBzVW5leHBlY3RlZCBsaWJyYXJ5IG1lbWJlciBub2RlOiBLTGlicmFyeURhdGFfbWV0YWRhdGFLQ2xhc3NFbnZLQ2xhc3NFbnZJbXBsX2J1aWxkRm9yd2FyZGluZ0NvbnN0cnVjdG9yc3VwZXJjbGFzc0NvbnN0cnVjdG9yc3VwZXJGdW5jdGlvbmNsb25lVmFyaWFibGVpbmNsdWRlU3RhdGljaW5jbHVkZU5vU3VjaE1ldGhvZEZvcndhcmRlcnNhZGRDb25zdHJ1Y3RvcnNtaXhpbk1lbWJlckNvdW50Y2xvbmVWaXNpdG9yc3VwZXJjbGFzc1N1YnN0aXR1dGlvbnN1cGVyY2xhc3NDbG9uZXJmb3J3YXJkaW5nQ29uc3RydWN0b3JLQ2xhc3NEYXRhS0NsYXNzRGF0YUltcGxLTWVtYmVyRGF0YUtNZW1iZXJEYXRhSW1wbEtGdW5jdGlvbkRhdGFLRnVuY3Rpb25EYXRhTWl4aW5fS0Z1bmN0aW9uRGF0YUltcGwmS01lbWJlckRhdGFJbXBsJktGdW5jdGlvbkRhdGFNaXhpbktGdW5jdGlvbkRhdGFJbXBsS0NvbnN0cnVjdG9yRGF0YUtDb25zdHJ1Y3RvckRhdGFJbXBsS0ZpZWxkRGF0YUtGaWVsZERhdGFJbXBsS1R5cGVkZWZEYXRhS1R5cGVWYXJpYWJsZURhdGFvcmRlckJ5RmlsZU9mZnNldGFMb2NiTG9jYVVyaWJVcml1cmlDb21wYXJldW5pdmVyc2UuZnVuY3Rpb25fc2V0Y29tcHV0ZU1hc2tfY3JlYXRlU2VsZWN0b3JNYXNrc2VsZWN0b3JNYXNrbm9TdWNoTWV0aG9kTWFza25vU3VjaE1ldGhvZHNTZWxlY3Rvck1hc2tGdW5jdGlvblNldE5vZGVNQVhfRUxFTUVOVFNfSU5fTElTVG5vU3VjaE1ldGhvZFF1ZXJ5RnVuY3Rpb25TZXROb2RlKEZ1bmN0aW9uU2V0UXVlcnlFbXB0eUZ1bmN0aW9uU2V0UXVlcnk8ZW1wdHk+RnVsbEZ1bmN0aW9uU2V0UXVlcnlfcmVjZWl2ZXJJbXBhY3RSZWdpc3RyeU1peGluSW1wYWN0RGF0YXRvRGF0YVNpbmtJbXBhY3REYXRhSW1wbF9DYWxsU3RydWN0dXJlX1N1cGVySW5pdGlhbGl6ZXJzb3VyY2VDb25zdHJ1Y3RvcnRhcmdldENvbnN0cnVjdG9yX1N1cGVySW52b2NhdGlvbl9JbnN0YW5jZUFjY2Vzc19EeW5hbWljQWNjZXNzX0Z1bmN0aW9uSW52b2NhdGlvbl9JbnN0YW5jZUludm9jYXRpb25fRHluYW1pY0ludm9jYXRpb25fTG9jYWxGdW5jdGlvbkludm9jYXRpb25fU3RhdGljSW52b2NhdGlvbl9Db25zdHJ1Y3Rvckludm9jYXRpb25fQ29uc3RJbnN0YW50aWF0aW9uX0ZlYXR1cmVsb2NhbFdpdGhvdXRJbml0aWFsaXplcl9UeXBlVXNlX1R5cGVVc2VLaW5kYXN5bmNTdGFyTWFya2Vyc3luY1N0YXJNYXJrZXJfUmVkaXJlY3RpbmdJbml0aWFsaXplcl9UeXBlTGl0ZXJhbF9HZW5lcmljSW5zdGFudGlhdGlvbl9TdGF0aWNBY2Nlc3NfTWFwTGl0ZXJhbF9Db250YWluZXJMaXRlcmFsX1J1bnRpbWVUeXBlVXNlX0ZvckluRGF0YWZyb250X2VuZC5jb25zdGFudF9ldmFsdWF0b3JSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyX0tlcm5lbEltcGFjdEJ1aWxkZXImSW1wYWN0QnVpbGRlckJhc2UmS2VybmVsSW1wYWN0UmVnaXN0cnlNaXhpbl9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50aXJUeXBlX2dldFR5cGVBcmd1bWVudHNyZWdpc3RlckZlYXR1cmVyZWdpc3Rlck5hdGl2ZURhdGFyZWdpc3RlckNvbnN0YW50TGl0ZXJhbHJlZ2lzdGVyQ29uc3RTeW1ib2xOYW1lZGFydFR5cGVBcmd1bWVudHNtYXRjaGVkVHlwZXJlY2VpdmVyRGFydFR5cGVhcmd1bWVudERhcnRUeXBlZmlyc3RDYXNlZmlyc3RDYXNlVHlwZW92ZXJyaWRlc0VxdWFsc0tlcm5lbEltcGFjdEJ1aWxkZXJfYW5ub3RhdGlvbnNLZXJuZWxJbXBhY3RDb252ZXJ0ZXJLZXJuZWxJbXBhY3RSZWdpc3RyeU1peGluT3B0aW1pemF0aW9uVGVzdExvZ191bmNvbnZlcnRlZDxudWxsLWd1YXJkPkZpZWxkR2V0RmllbGRTZXRGaWVsZENhbGxDb25zdGFudEZpZWxkR2V0Q29uc3RhbnRGaWVsZENhbGxfcmVnaXN0ZXJTcGVjaWFsaXplcnVuY29udmVydGVkTmFtZVNwZWNpYWxpemVySW5kZXhBc3NpZ25JbmRleEJpdE5vdE5lZ2F0ZUFic01vZHVsb0R5bmFtaWNNb2R1bG9UcnVuY2F0aW5nRGl2aWRlLlNoaWZ0TGVmdC5TaGlmdFJpZ2h0LkVxdWFsc0xlc3NFcXVhbHNHcmVhdGVyRXF1YWxzQ29kZVVuaXRBdENvbXBhcmVUb1N1YnN0cmluZ1RyaW1QYXR0ZXJuTWF0Y2hSb3VuZHJlZ2lzdGVyUHJpbWl0aXZlQ2hlY2tQcmltaXRpdmVDaGVja09wdGltaXphdGlvbkxvZyhPcHRpbWl6YXRpb25Mb2dFbnRyeUZvckNvbmRpdGlvbmluU3R5bGVGb3JTcHJlYWRGb3JJblNwcmVhZEZvckVudHJ5Rm9ySW5FbnRyeUZvckNvbXBsZXRlRm9ySW5Db21wbGV0ZUlmQ29uZGl0aW9uSWZTcHJlYWRJZkVudHJ5SWZDb21wbGV0ZUlmRWxzZUVsc2VTcHJlYWRFbHNlRW50cnlJZkVsc2VDb21wbGV0ZVNwcmVhZE9wZXJhdG9yTmVzdGVkbmVzdGVkU3RlcGxhc3RTdGVwaWZDb25kaXRpb25zcHJlYWRPcGVyYXRvcmZhc3RhLnBhcnNlci50eXBlX2luZm9faW1wbFByZWZpeGVkVHlwZVNpbXBsZU51bGxhYmxlVHlwZVdpdGgxQXJndW1lbnRwYXJzZVR5cGVSZXN0U2ltcGxlVHlwZVdpdGgxQXJndW1lbnRTaW1wbGVOdWxsYWJsZVR5cGVTaW1wbGVUeXBlQ29tcGxleFR5cGVJbmZvYmVmb3JlUXVlc3Rpb25NYXJrdHlwZVZhcmlhYmxlU3RhcnRlcnNnZnRIYXNSZXR1cm5UeXBlX25vbk51bGxhYmxldHlwZVZhcmlhYmxlRW5kR3JvdXBzdHlwZVJlZk9yUHJlZml4ZW5kR3JvdXBJbmRleGNvbXB1dGVSZXN0dHlwZVZhcmlhYmxlU3RhcnROb1R5cGVQYXJhbU9yQXJnU2ltcGxlVHlwZUFyZ3VtZW50MXBhcnNlRW5kR3JvdXBza2lwRW5kR3JvdXBTaW1wbGVUeXBlQXJndW1lbnQxR3RFcWJlZm9yZUVuZEdyb3VwU2ltcGxlVHlwZUFyZ3VtZW50MUd0R3RDb21wbGV4VHlwZVBhcmFtT3JBcmdJbmZvc2tpcEVuZHBhcnNlVW5leHBlY3RlZEVuZHBhcnNlTWlzc2luZ0NvbW1hdHlwZVN0YXJ0c3N1cGVyVHlwZUluZm9zdG9rZW4yaXNBcmd1bWVudHNlcnJvclJlcG9ydGVkdHlwZUZvbGxvd3NFeHRlbmRzaW52YWxpZFR5cGVWYXJzaW1wbGVUeXBlc2ltcGxlTnVsbGFibGVUeXBlcHJlZml4ZWRUeXBlc2ltcGxlVHlwZVdpdGgxQXJndW1lbnRzaW1wbGVUeXBlV2l0aDFBcmd1bWVudEd0RXFzaW1wbGVUeXBlV2l0aDFBcmd1bWVudEd0R3RzaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50c2ltcGxlVHlwZUFyZ3VtZW50MXNpbXBsZVR5cGVBcmd1bWVudDFHdEVxc2ltcGxlVHlwZUFyZ3VtZW50MUd0R3Rsb29rc0xpa2VOYW1lbG9va3NMaWtlVHlwZVBhcmFtT3JBcmdpc0Nsb3NlcnBhcnNlQ2xvc2VyYmVmb3JlQ2xvc2VydW5zcGxpdHNwbGl0Q2xvc2VyX0NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yX0NvbnN0YW50TGlzdEdlbmVyYXRvck1vZHVsYXJDb25zdGFudEVtaXR0ZXJfZXhwb25lbnRpYWxSRShbLStdPykoWzAtOV0rKSguKFswLTldKikpP2UoWy0rXT9bMC05XSspVGhlIGZ1bmN0aW9uIGNvbnN0YW50IGRvZXMgbm90IG5lZWQgc3BlY2lmaWMgSlMgY29kZS5fc2hvcnRlbkV4cG9uZW50aWFsUmVwcmVzZW50YXRpb25udW1iZXJTdHJpbmdsZWFkaW5nRGlnaXRzZnJhY3Rpb25EaWdpdHNleHBvbmVudGFsdGVybmF0aXZlY3V0b2ZmdG9TdHJpbmdBc0V4cG9uZW50aWFsMC8wMS8wLTEvMHNob3J0ZW5lZCEwITFDb25zdGFudEVtaXR0ZXJDT01NRU5UX1JFXiAqKC8vLiopP1xufCAgKi8vW14nJyJcbl0qJG11bHRpTGluZV9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcl9tYWtlQ29uc3RhbnRMaXN0bWF5YmVBZGRMaXN0VHlwZUFyZ3VtZW50c05ld1J0aW1heWJlQWRkVHlwZUFyZ3VtZW50c0NvbXBpbGVyIGVuY291dGVyZWQgdW5leHBlY3RlZCBzZXQgY2xhc3MgX3JlaWZpZWRUeXBlTmV3UnRpX3JlaWZpZWRUeXBlQXJndW1lbnRzanNNYXBrZXlFeHByZXNzaW9udmFsdWVFeHByZXNzaW9uanNHZW5lcmFsTWFwZW1pdHRlZEFyZ3VtZW50Q291bnRDb21waWxlciBoYXMgdW5leHBlY3RlZCBmaWVsZCBDb21waWxlciBhbmQgIGRpc2FncmVlIG9uIG51bWJlciBvZiBmaWVsZHMuZ2V0SGVscGVyUHJvcGVydHlfdmFyaWFibGVVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgJyBpbiBjb25zdGFudCAnc3RyaXBDb21tZW50c3Jhd0phdmFTY3JpcHRkYXJ0MmpzLmpzX2VtaXR0ZXIuc3RhcnR1cF9lbWl0dGVyLm1vZGVsX2VtaXR0ZXJSYW5kb21IYXNoZXJTb3VyY2VNYXBCdWlsZGVyQ29uc3RhbnRPcmRlcmluZ2ZyYWdtZW50X2VtaXR0ZXIuZGFydE1vZGVsRW1pdHRlcl9zaG91bGRHZW5lcmF0ZVNvdXJjZU1hcF9jb25zdGFudE9yZGVyaW5nZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWwkX19kYXJ0X2RlZmVycmVkX2luaXRpYWxpemVyc19fcGFydEV4dGVuc2lvbmRlZmVycmVkRXh0ZW5zaW9ucGFydC5qc3R5cGVOYW1lUHJvcGVydHlidWlsdGluJGNsc2NvbnN0YW50TGlzdEdlbmVyYXRvcm1ha2VDb25zdExpc3QoIyljbXAxY21wMmZyYWdtZW50RW1pdHRlcmRlZmVycmVkTG9hZGluZ1N0YXRlbWFpbkNvZGVlbWl0TWFpbkZyYWdtZW50ZGVmZXJyZWRGcmFnbWVudHNDb2RlZnJhZ21lbnRDb2RlZW1pdERlZmVycmVkRnJhZ21lbnRodW5rSGFzaGVzd3JpdGUgZnJhZ21lbnRzd3JpdGVEZWZlcnJlZEZyYWdtZW50c2ZpbmFsaXplRGVmZXJyZWRMb2FkaW5nRGF0YXdyaXRlTWFpbkZyYWdtZW50d3JpdGVEZWZlcnJlZE1hcGJ1aWxkR2VuZXJhdGVkQnlmbGF2b3JmYXN0IHN0YXJ0dXAgZW1pdHRlciwgc3Ryb25nLCB0cnVzdCBwcmltaXRpdmVzLCBvbWl0IGNoZWNrcywgbGF4IHJ1bnRpbWUgdHlwZSwgQ1NQZnJhZ21lbnRzQ29kZXdyaXRlRGVmZXJyZWRGcmFnbWVudGJ1aWxkRGVmZXJyZWRJbml0aWFsaXplckdsb2JhbHNlbGYuI2RlZmVycmVkSW5pdGlhbGl6ZXJzID0gc2VsZi4jZGVmZXJyZWRJbml0aWFsaXplcnMgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtkZWZlcnJlZEluaXRpYWxpemVyc2xvY2F0aW9uQ29sbGVjdG9yY29kZU91dHB1dExpc3RlbmVyc3NvdXJjZS1tYXBzbWFpbk91dHB1dC8vIFRoZSBjb2RlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgaG9va3M6Ci8vIGRhcnRQcmludChtZXNzYWdlKToKLy8gICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGl0IGlzIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSBEYXJ0IFtwcmludF0KLy8gICAgbWV0aG9kLgovLwovLyBkYXJ0TWFpblJ1bm5lcihtYWluLCBhcmdzKToKLy8gICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCB0aGUgRGFydCBbbWFpbl0gbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQKLy8gICAgZGlyZWN0bHkuIEluc3RlYWQsIGEgY2xvc3VyZSB0aGF0IHdpbGwgaW52b2tlIFttYWluXSwgYW5kIGl0cyBhcmd1bWVudHMKLy8gICAgW2FyZ3NdIGlzIHBhc3NlZCB0byBbZGFydE1haW5SdW5uZXJdLgovLwovLyBkYXJ0RGVmZXJyZWRMaWJyYXJ5TG9hZGVyKHVyaSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKToKLy8gICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCBpdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgZGVmZXJyZWQgbGlicmFyeQovLyAgICBpcyBsb2FkZWQuIEl0IHNob3VsZCBsb2FkIGFuZCBldmFsIHRoZSBqYXZhc2NyaXB0IG9mIGB1cmlgLCBhbmQgY2FsbAovLyAgICBzdWNjZXNzQ2FsbGJhY2suIElmIGl0IGZhaWxzIHRvIGRvIHNvLCBpdCBzaG91bGQgY2FsbCBlcnJvckNhbGxiYWNrIHdpdGgKLy8gICAgYW4gZXJyb3IuCi8vCi8vIGRhcnRDYWxsSW5zdHJ1bWVudGF0aW9uKGlkLCBxdWFsaWZpZWROYW1lKToKLy8gICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBlYWNoIGVudHJ5IG9mIGEKLy8gICAgbWV0aG9kIG9yIGNvbnN0cnVjdG9yLiBVc2VkIG9ubHkgd2hlbiBjb21waWxpbmcgcHJvZ3JhbXMgd2l0aAovLyAgICAtLWV4cGVyaW1lbnQtY2FsbC1pbnN0cnVtZW50YXRpb24uCmVtaXQgYnVmZmVyc291dHB1dExpc3RlbmVyc2hhc2hlcmh1bmtQcmVmaXguY3VycmVudCA9ICNbIiJdID0gLmN1cnJlbnRtYXBVcmlodW5rRmlsZU5hbWVtYXBGaWxlTmFtZW1hcFNlZ21lbnRzcGFydFNlZ21lbnRzX2NvbW1lbnRUaGlzIG1hcHBpbmcgc2hvd3Mgd2hpY2ggY29tcGlsZWQgYC5qc2AgZmlsZXMgYXJlIG5lZWRlZCBmb3IgYSBnaXZlbiBkZWZlcnJlZCBsaWJyYXJ5IGltcG9ydC5GcmFnbWVudEVtaXR0ZXJfbW9kZWxFbWl0dGVyX3J1bGVzZXRFbmNvZGVyX2NhbGwwTmFtZV9jYWxsMU5hbWVfY2FsbDJOYW1lY2FsbDBOYW1lY2FsbDFOYW1lY2FsbDJOYW1lbm9uU3RhdGljU3RhdGVIb2xkZXJzc29mdERlZmVycmVkSWRzb2Z0RGVmZXJyZWRob2xkZXJDb2RlZW1pdEhvbGRlcnNpbml0aWFsaXplRW1wdHlIb2xkZXJzKGZ1bmN0aW9uIGRhcnRQcm9ncmFtKCkgewovLyBDb3BpZXMgdGhlIG93biBwcm9wZXJ0aWVzIGZyb20gW2Zyb21dIHRvIFt0b10uCmZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKGZyb20sIHRvKSB7CiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcm9tKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBrZXkgPSBrZXlzW2ldOwogICAgdG9ba2V5XSA9IGZyb21ba2V5XTsKICB9Cn0KCi8vIE9ubHkgdXNlIGRpcmVjdCBwcm90byBhY2Nlc3MgdG8gY29uc3RydWN0IHRoZSBwcm90b3R5cGUgY2hhaW4gKGluc3RlYWQgb2YKLy8gY29weWluZyBwcm9wZXJ0aWVzKSBvbiBwbGF0Zm9ybXMgd2hlcmUgd2Uga25vdyBpdCB3b3JrcyB3ZWxsIChDaHJvbWUgLyBkOCkuCnZhciBzdXBwb3J0c0RpcmVjdFByb3RvQWNjZXNzID0gI2RpcmVjdEFjY2Vzc1Rlc3RFeHByZXNzaW9uOwoKLy8gU2V0cyB0aGUgbmFtZSBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMsIGlmIHRoZSBKUyBlbmdpbmUgZG9lc24ndCBzZXQgdGhlIG5hbWUKLy8gaXRzZWxmLgovLyBBcyBvZiAyMDE4IG9ubHkgSUUxMSBkb2Vzbid0IHNldCB0aGUgbmFtZS4KZnVuY3Rpb24gc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5KGhvbGRlcnMpIHsKICBmdW5jdGlvbiB0KCl7fTsKICBpZiAodHlwZW9mIHQubmFtZSA9PSAic3RyaW5nIikgcmV0dXJuOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGhvbGRlcnMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBob2xkZXIgPSBob2xkZXJzW2ldOwogICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhob2xkZXIpOwogICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgIHZhciBrZXkgPSBrZXlzW2pdOwogICAgICB2YXIgZiA9IGhvbGRlcltrZXldOwogICAgICBpZiAodHlwZW9mIGYgPT0gJ2Z1bmN0aW9uJykgZi5uYW1lID0ga2V5OwogICAgfQogIH0KfQoKLy8gTWFrZXMgW2Nsc10gaW5oZXJpdCBmcm9tIFtzdXBdLgovLyBPbiBDaHJvbWUsIEZpcmVmb3ggYW5kIHJlY2VudCBJRXMgdGhpcyBoYXBwZW5zIGJ5IHVwZGF0aW5nIHRoZSBpbnRlcm5hbAovLyBwcm90by1wcm9wZXJ0eSBvZiB0aGUgY2xhc3NlcyAncHJvdG90eXBlJyBmaWVsZC4KLy8gT2xkZXIgSUVzIHVzZSBgT2JqZWN0LmNyZWF0ZWAgYW5kIGNvcHkgb3ZlciB0aGUgcHJvcGVydGllcy4KZnVuY3Rpb24gaW5oZXJpdChjbHMsIHN1cCkgewogIC8vIE5vdGUgdGhhdCBSVEkgbmVlZHMgY2xzLm5hbWUsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHNldCBpdCBhbnltb3JlLgogIGNscy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjbHM7CiAgY2xzLnByb3RvdHlwZVsjb3BlcmF0b3JJc1ByZWZpeCArIGNscy5uYW1lXSA9IGNsczsKCiAgLy8gVGhlIHN1cGVyY2xhc3MgaXMgb25seSBudWxsIGZvciB0aGUgRGFydCBPYmplY3QuCiAgaWYgKHN1cCAhPSBudWxsKSB7CiAgICBpZiAoc3VwcG9ydHNEaXJlY3RQcm90b0FjY2VzcykgewogICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgbGlrZSB0byB1cGRhdGUgdGhlIHByb3RvdHlwZXMsIGJ1dCB3aGVuIHNldHRpbmcgdXAKICAgICAgLy8gdGhlIGhpZXJhcmNoeSBjaGFpbiBpdCdzIG9rLgogICAgICBjbHMucHJvdG90eXBlLl9fcHJvdG9fXyA9IHN1cC5wcm90b3R5cGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBjbHNQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cC5wcm90b3R5cGUpOwogICAgY29weVByb3BlcnRpZXMoY2xzLnByb3RvdHlwZSwgY2xzUHJvdG90eXBlKTsKICAgIGNscy5wcm90b3R5cGUgPSBjbHNQcm90b3R5cGU7CiAgfQp9CgovLyBCYXRjaGVkIHZlcnNpb24gb2YgW2luaGVyaXRdIGZvciBtdWx0aXBsZSBjbGFzc2VzIGZyb20gb25lIHN1cGVyY2xhc3MuCmZ1bmN0aW9uIGluaGVyaXRNYW55KHN1cCwgY2xhc3NlcykgewogIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgaW5oZXJpdChjbGFzc2VzW2ldLCBzdXApOwogIH0KfQoKLy8gTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgW21peGluXSBpbnRvIFtjbHNdLgpmdW5jdGlvbiBtaXhpbihjbHMsIG1peGluKSB7CiAgY29weVByb3BlcnRpZXMobWl4aW4ucHJvdG90eXBlLCBjbHMucHJvdG90eXBlKTsKICBjbHMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY2xzOwp9CgovLyBDcmVhdGVzIGEgbGF6eSBmaWVsZC4KLy8KLy8gQSBsYXp5IGZpZWxkIGhhcyBhIHN0b3JhZ2UgZW50cnksIFtuYW1lXSwgd2hpY2ggaG9sZHMgdGhlIHZhbHVlLCBhbmQgYQovLyBnZXR0ZXIgKFtnZXR0ZXJOYW1lXSkgdG8gYWNjZXNzIHRoZSBmaWVsZC4gSWYgdGhlIGZpZWxkIHdhc24ndCBzZXQgYmVmb3JlCi8vIHRoZSBmaXJzdCBhY2Nlc3MsIGl0IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIFtpbml0aWFsaXplcl0uCmZ1bmN0aW9uIGxhenkoaG9sZGVyLCBuYW1lLCBnZXR0ZXJOYW1lLCBpbml0aWFsaXplcikgewogIHZhciB1bmluaXRpYWxpemVkU2VudGluZWwgPSBob2xkZXI7CiAgaG9sZGVyW25hbWVdID0gdW5pbml0aWFsaXplZFNlbnRpbmVsOwogIGhvbGRlcltnZXR0ZXJOYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgaG9sZGVyW2dldHRlck5hbWVdID0gZnVuY3Rpb24oKSB7ICNjeWNsaWNUaHJvdyhuYW1lKSB9OwogICAgdmFyIHJlc3VsdDsKICAgIHZhciBzZW50aW5lbEluUHJvZ3Jlc3MgPSBpbml0aWFsaXplcjsKICAgIHRyeSB7CiAgICAgIGlmIChob2xkZXJbbmFtZV0gPT09IHVuaW5pdGlhbGl6ZWRTZW50aW5lbCkgewogICAgICAgIHJlc3VsdCA9IGhvbGRlcltuYW1lXSA9IHNlbnRpbmVsSW5Qcm9ncmVzczsKICAgICAgICByZXN1bHQgPSBob2xkZXJbbmFtZV0gPSBpbml0aWFsaXplcigpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IGhvbGRlcltuYW1lXTsKICAgICAgfQogICAgfSBmaW5hbGx5IHsKICAgICAgLy8gVXNlIHRyeS1maW5hbGx5LCBub3QgdHJ5LWNhdGNoL3Rocm93IGFzIGl0IGRlc3Ryb3lzIHRoZSBzdGFjawogICAgICAvLyB0cmFjZS4KICAgICAgaWYgKHJlc3VsdCA9PT0gc2VudGluZWxJblByb2dyZXNzKSB7CiAgICAgICAgLy8gVGhlIGxhenkgc3RhdGljIChob2xkZXJbbmFtZV0pIG1pZ2h0IGhhdmUgYmVlbiBzZXQgdG8gYSBkaWZmZXJlbnQKICAgICAgICAvLyB2YWx1ZS4gQWNjb3JkaW5nIHRvIHNwZWMgd2Ugc3RpbGwgaGF2ZSB0byByZXNldCBpdCB0byBudWxsLCBpZgogICAgICAgIC8vIHRoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCiAgICAgICAgaG9sZGVyW25hbWVdID0gbnVsbDsKICAgICAgfQogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgdGhlIGZ1bmN0aW9uIHNob3VsZCBwcm9iYWJseQogICAgICAvLyBiZSB1bmlxdWUgZm9yIGVhY2ggc3RhdGljLgogICAgICBob2xkZXJbZ2V0dGVyTmFtZV0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXNbbmFtZV07IH07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH07Cn0KCi8vIEdpdmVuIGEgbGlzdCwgbWFya3MgaXQgYXMgY29uc3RhbnQuCi8vCi8vIFRoZSBydW50aW1lIGVuc3VyZXMgdGhhdCBjb25zdC1saXN0cyBjYW5ub3QgYmUgbW9kaWZpZWQuCmZ1bmN0aW9uIG1ha2VDb25zdExpc3QobGlzdCkgewogIC8vIEJ5IGFzc2lnbmluZyBhIGZ1bmN0aW9uIHRvIHRoZSBwcm9wZXJ0aWVzIHRoZXkgYmVjb21lIHBhcnQgb2YgdGhlCiAgLy8gaGlkZGVuIGNsYXNzLiBUaGUgYWN0dWFsIHZhbHVlcyBvZiB0aGUgZmllbGRzIGRvbid0IG1hdHRlciwgc2luY2Ugd2UKICAvLyBvbmx5IGNoZWNrIGlmIHRoZXkgZXhpc3QuCiAgbGlzdC5pbW11dGFibGUkbGlzdCA9IEFycmF5OwogIGxpc3QuZml4ZWQkbGVuZ3RoID0gQXJyYXk7CiAgcmV0dXJuIGxpc3Q7Cn0KCmZ1bmN0aW9uIGNvbnZlcnRUb0Zhc3RPYmplY3QocHJvcGVydGllcykgewogIC8vIENyZWF0ZSBhbiBpbnN0YW5jZSB0aGF0IHVzZXMgJ3Byb3BlcnRpZXMnIGFzIHByb3RvdHlwZS4gVGhpcyBzaG91bGQKICAvLyBtYWtlICdwcm9wZXJ0aWVzJyBhIGZhc3Qgb2JqZWN0LgogIGZ1bmN0aW9uIHQoKSB7fQogIHQucHJvdG90eXBlID0gcHJvcGVydGllczsKICBuZXcgdCgpOwogIHJldHVybiBwcm9wZXJ0aWVzOwp9CgpmdW5jdGlvbiBjb252ZXJ0QWxsVG9GYXN0T2JqZWN0KGFycmF5T2ZPYmplY3RzKSB7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mT2JqZWN0cy5sZW5ndGg7ICsraSkgewogICAgY29udmVydFRvRmFzdE9iamVjdChhcnJheU9mT2JqZWN0c1tpXSk7CiAgfQp9CgovLyBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgdGhlIHRlYXJPZmZDb2RlIHRvIGd1YXJhbnRlZSB1bmlxdWUgZnVuY3Rpb25zIHBlcgovLyB0ZWFyLW9mZnMuCnZhciBmdW5jdGlvbkNvdW50ZXIgPSAwOwojdGVhck9mZkNvZGU7CgovLyBFYWNoIGRlZmVycmVkIGh1bmsgY29tZXMgd2l0aCBpdHMgb3duIHR5cGVzIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUgZW5kCi8vIG9mIHRoZSB0eXBlcy1hcnJheS4KLy8gVGhlIGBmdW5UeXBlc2AgcGFzc2VkIHRvIHRoZSBgaW5zdGFsbFRlYXJPZmZgIGZ1bmN0aW9uIGJlbG93IGlzIHJlbGF0aXZlIHRvCi8vIHRoZSBodW5rIHRoZSBmdW5jdGlvbiBjb21lcyBmcm9tLiBUaGUgYHR5cGVzT2Zmc2V0YCB2YXJpYWJsZSBlbmNvZGVzIHRoZQovLyBvZmZzZXQgYXQgd2hpY2ggdGhlIG5ldyB0eXBlcyB3aWxsIGJlIGFkZGVkLgp2YXIgdHlwZXNPZmZzZXQgPSAwOwoKLy8gQWRhcHRzIHRoZSBzdG9yZWQgZGF0YSwgc28gaXQncyBzdWl0YWJsZSBmb3IgYSB0ZWFyT2ZmIGNhbGwuCi8vCi8vIFN0b3JlcyB0aGUgdGVhci1vZmYgZ2V0dGVyLWZ1bmN0aW9uIGluIHRoZSBbY29udGFpbmVyXSdzIFtnZXR0ZXJOYW1lXQovLyBwcm9wZXJ0eS4KLy8KLy8gVGhlIFtjb250YWluZXJdIGlzIGVpdGhlciBhIGNsYXNzICh0aGF0IGlzLCBpdHMgcHJvdG90eXBlKSwgb3IgdGhlIGhvbGRlciBmb3IKLy8gc3RhdGljIGZ1bmN0aW9ucy4KLy8KLy8gVGhlIGFyZ3VtZW50IFtmdW5zT3JOYW1lc10gaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBmdW5jdGlvbnMuIElmIGl0IGlzIGEKLy8gbmFtZSwgdGhlbiB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGZldGNoZWQgZnJvbSB0aGUgY29udGFpbmVyLiBUaGUgZmlyc3QKLy8gZW50cnkgaW4gdGhhdCBhcnJheSAqbXVzdCogYmUgYSBzdHJpbmcuCi8vCi8vIFRPRE8oZmxvaXRzY2gpOiBDaGFuZ2UgdGVhck9mZkNvZGUgdG8gYWNjZXB0IHRoZSBkYXRhIGRpcmVjdGx5LCBvciBjcmVhdGUgYQovLyBkaWZmZXJlbnQgdGVhck9mZkNvZGU/CmZ1bmN0aW9uIGluc3RhbGxUZWFyT2ZmKAogICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBpc1N0YXRpYywgaXNJbnRlcmNlcHRlZCwgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCkgewogIC8vIEEgZnVuY3Rpb24gY2FuIGhhdmUgc2V2ZXJhbCBzdHVicyAoZm9yIGV4YW1wbGUgdG8gZmlsbCBpbiBvcHRpb25hbAogIC8vIGFyZ3VtZW50cykuIFdlIGNvbGxlY3QgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBgZnVuc2AgYXJyYXkuCiAgdmFyIGZ1bnMgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bnNPck5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgZnVuID0gZnVuc09yTmFtZXNbaV07CiAgICBpZiAoKHR5cGVvZiBmdW4pID09ICdzdHJpbmcnKSBmdW4gPSBjb250YWluZXJbZnVuXTsKICAgIGZ1bi4jY2FsbE5hbWUgPSBjYWxsTmFtZXNbaV07CiAgICBmdW5zLnB1c2goZnVuKTsKICB9CgogIC8vIFRoZSBtYWluIGZ1bmN0aW9uIHRvIHdoaWNoIGFsbCBzdHVicyByZWRpcmVjdC4KICB2YXIgZnVuID0gZnVuc1swXTsKCiAgZnVuWyNhcmd1bWVudENvdW50XSA9IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgZnVuWyNkZWZhdWx0QXJndW1lbnRWYWx1ZXNdID0gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOwogIHZhciByZWZsZWN0aW9uSW5mbyA9IGZ1blR5cGU7CiAgaWYgKHR5cGVvZiByZWZsZWN0aW9uSW5mbyA9PSAibnVtYmVyIikgewogICAgLy8gVGhlIHJlZmxlY3Rpb25JbmZvIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiwgb3IgYSBwb2ludGVyIGludG8gdGhlIHR5cGVzCiAgICAvLyB0YWJsZS4gSWYgaXQgcG9pbnRzIGludG8gdGhlIHR5cGVzLXRhYmxlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBpbmRleCwKICAgIC8vIGluIGNhc2UgdGhlIHRlYXItb2ZmIGlzIHBhcnQgb2YgYSBkZWZlcnJlZCBodW5rLgogICAgcmVmbGVjdGlvbkluZm8gPSByZWZsZWN0aW9uSW5mbyArIHR5cGVzT2Zmc2V0OwogIH0KICB2YXIgbmFtZSA9IGZ1bnNPck5hbWVzWzBdOwogIGZ1bi4jc3R1Yk5hbWUgPSBuYW1lOwogIHZhciBnZXR0ZXJGdW5jdGlvbiA9CiAgICAgIHRlYXJPZmYoZnVucywgYXBwbHlJbmRleCB8fCAwLCByZWZsZWN0aW9uSW5mbywgaXNTdGF0aWMsIG5hbWUsIGlzSW50ZXJjZXB0ZWQpOwogIGNvbnRhaW5lcltnZXR0ZXJOYW1lXSA9IGdldHRlckZ1bmN0aW9uOwogIGlmIChpc1N0YXRpYykgewogICAgZnVuLiR0ZWFyT2ZmID0gZ2V0dGVyRnVuY3Rpb247CiAgfQp9CgpmdW5jdGlvbiBpbnN0YWxsU3RhdGljVGVhck9mZigKICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwKICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgIGNhbGxOYW1lcywgZnVuc09yTmFtZXMsIGZ1blR5cGUsIGFwcGx5SW5kZXgpIHsKICAvLyBUT0RPKHNyYSk6IFNwZWNpYWxpemUgaW5zdGFsbFRlYXJPZmYgZm9yIHN0YXRpYyBtZXRob2RzLiBJdCBtaWdodCBiZQogIC8vIHBvc3NpYmxlIHRvIGhhbmRsZSBzb21lIHZlcnkgY29tbW9uIHNpbXBsZSBjYXNlcyBkaXJlY3RseS4KICByZXR1cm4gaW5zdGFsbFRlYXJPZmYoCiAgICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgdHJ1ZSwgZmFsc2UsCiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCk7Cn0KCmZ1bmN0aW9uIGluc3RhbGxJbnN0YW5jZVRlYXJPZmYoCiAgICBjb250YWluZXIsIGdldHRlck5hbWUsIGlzSW50ZXJjZXB0ZWQsCiAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KSB7CiAgLy8gVE9ETyhzcmEpOiBTcGVjaWFsaXplIGluc3RhbGxUZWFyT2ZmIGZvciBpbnN0YW5jZSBtZXRob2RzLgogIHJldHVybiBpbnN0YWxsVGVhck9mZigKICAgICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBmYWxzZSwgaXNJbnRlcmNlcHRlZCwKICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KTsKfQoKLy8gSW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBpbnRlcmNlcHRvciB0YWdzIGRpcmVjdGx5IHdlIHVzZSB0aGlzIHVwZGF0ZQovLyBmdW5jdGlvbi4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGRlZmVycmVkIGZyYWdtZW50cyB0byBjb250cmlidXRlIHRvIHRoZQovLyBlbWJlZGRlZCBnbG9iYWwuCmZ1bmN0aW9uIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcobmV3VGFncykgewogIHZhciB0YWdzID0gI2VtYmVkZGVkSW50ZXJjZXB0b3JUYWdzOwogIGlmICghdGFncykgewogICAgI2VtYmVkZGVkSW50ZXJjZXB0b3JUYWdzID0gbmV3VGFnczsKICAgIHJldHVybjsKICB9CiAgY29weVByb3BlcnRpZXMobmV3VGFncywgdGFncyk7Cn0KCi8vIEluc3RlYWQgb2Ygc2V0dGluZyB0aGUgbGVhZiB0YWdzIGRpcmVjdGx5IHdlIHVzZSB0aGlzIHVwZGF0ZQovLyBmdW5jdGlvbi4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGRlZmVycmVkIGZyYWdtZW50cyB0byBjb250cmlidXRlIHRvIHRoZQovLyBlbWJlZGRlZCBnbG9iYWwuCmZ1bmN0aW9uIHNldE9yVXBkYXRlTGVhZlRhZ3MobmV3VGFncykgewogIHZhciB0YWdzID0gI2VtYmVkZGVkTGVhZlRhZ3M7CiAgaWYgKCF0YWdzKSB7CiAgICAjZW1iZWRkZWRMZWFmVGFncyA9IG5ld1RhZ3M7CiAgICByZXR1cm47CiAgfQogIGNvcHlQcm9wZXJ0aWVzKG5ld1RhZ3MsIHRhZ3MpOwp9CgovLyBVcGRhdGVzIHRoZSB0eXBlcyBlbWJlZGRlZCBnbG9iYWwuCmZ1bmN0aW9uIHVwZGF0ZVR5cGVzKG5ld1R5cGVzKSB7CiAgdmFyIHR5cGVzID0gI2VtYmVkZGVkVHlwZXM7CiAgdmFyIGxlbmd0aCA9IHR5cGVzLmxlbmd0aDsKICAvLyBUaGUgdGVhci1vZmYgZnVuY3Rpb24gdXNlcyBhbm90aGVyICd0eXBlc09mZnNldCcgdmFsdWUgY2FjaGVkIGluCiAgLy8gW2luaXRpYWxpemVEZWZlcnJlZEh1bmtdIHNvIFt1cGRhdGVUeXBlc10gY2FuIGJlIGNhbGxlZCBlaXRoZXIgYmVmb3JlIG9yCiAgLy8gYWZ0ZXIgdGhlIHRlYXJvZmZzIGhhdmUgYmVlbiBpbnN0YWxsZWQuCiAgdHlwZXMucHVzaC5hcHBseSh0eXBlcywgbmV3VHlwZXMpOwogIHJldHVybiBsZW5ndGg7Cn0KCi8vIFVwZGF0ZXMgdGhlIGdpdmVuIGhvbGRlciB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBbbmV3SG9sZGVyXS4KLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gYSBkZWZlcnJlZCBmcmFnbWVudCBpcyBpbml0aWFsaXplZC4KZnVuY3Rpb24gdXBkYXRlSG9sZGVyKGhvbGRlciwgbmV3SG9sZGVyKSB7CiAgY29weVByb3BlcnRpZXMobmV3SG9sZGVyLCBob2xkZXIpOwogIHJldHVybiBob2xkZXI7Cn0KCnZhciAjaHVua0hlbHBlcnMgPSAoZnVuY3Rpb24oKXsKICB2YXIgbWtJbnN0YW5jZSA9IGZ1bmN0aW9uKAogICAgICBpc0ludGVyY2VwdGVkLCByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGNhbGxOYW1lcywgYXBwbHlJbmRleCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgbmFtZSwgZnVuVHlwZSkgewogICAgICByZXR1cm4gaW5zdGFsbEluc3RhbmNlVGVhck9mZigKICAgICAgICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgaXNJbnRlcmNlcHRlZCwKICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgIGNhbGxOYW1lcywgW25hbWVdLCBmdW5UeXBlLCBhcHBseUluZGV4KTsKICAgIH0KICB9LAoKICBta1N0YXRpYyA9IGZ1bmN0aW9uKAogICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGNhbGxOYW1lcywgYXBwbHlJbmRleCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgbmFtZSwgZnVuVHlwZSkgewogICAgICByZXR1cm4gaW5zdGFsbFN0YXRpY1RlYXJPZmYoCiAgICAgICAgICBjb250YWluZXIsIGdldHRlck5hbWUsCiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICBjYWxsTmFtZXMsIFtuYW1lXSwgZnVuVHlwZSwgYXBwbHlJbmRleCk7CiAgICB9CiAgfTsKCiAgLy8gVE9ETyhzcmEpOiBNaW5pZnkgcHJvcGVydGllcyBvZiAnaHVua0hlbHBlcnMnLgogIHJldHVybiB7CiAgICBpbmhlcml0OiBpbmhlcml0LAogICAgaW5oZXJpdE1hbnk6IGluaGVyaXRNYW55LAogICAgbWl4aW46IG1peGluLAogICAgaW5zdGFsbFN0YXRpY1RlYXJPZmY6IGluc3RhbGxTdGF0aWNUZWFyT2ZmLAogICAgaW5zdGFsbEluc3RhbmNlVGVhck9mZjogaW5zdGFsbEluc3RhbmNlVGVhck9mZiwKCiAgICAgICAgLy8gVW5pbnRlcmNlcHRlZCBtZXRob2RzLgogICAgX2luc3RhbmNlXzB1OiBta0luc3RhbmNlKDAsIDAsIG51bGwsIFsjY2FsbDBzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzF1OiBta0luc3RhbmNlKDAsIDEsIG51bGwsIFsjY2FsbDFzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzJ1OiBta0luc3RhbmNlKDAsIDIsIG51bGwsIFsjY2FsbDJzZWxlY3Rvcl0sIDApLAoKICAgICAgICAvLyBJbnRlcmNlcHRlZCBtZXRob2RzLgogICAgX2luc3RhbmNlXzBpOiBta0luc3RhbmNlKDEsIDAsIG51bGwsIFsjY2FsbDBzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzFpOiBta0luc3RhbmNlKDEsIDEsIG51bGwsIFsjY2FsbDFzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzJpOiBta0luc3RhbmNlKDEsIDIsIG51bGwsIFsjY2FsbDJzZWxlY3Rvcl0sIDApLAoKICAgICAgICAvLyBTdGF0aWMgbWV0aG9kcy4KICAgIF9zdGF0aWNfMDogbWtTdGF0aWMoMCwgbnVsbCwgWyNjYWxsMHNlbGVjdG9yXSwgMCksCiAgICBfc3RhdGljXzE6IG1rU3RhdGljKDEsIG51bGwsIFsjY2FsbDFzZWxlY3Rvcl0sIDApLAogICAgX3N0YXRpY18yOiBta1N0YXRpYygyLCBudWxsLCBbI2NhbGwyc2VsZWN0b3JdLCAwKSwKCiAgICBtYWtlQ29uc3RMaXN0OiBtYWtlQ29uc3RMaXN0LAogICAgbGF6eTogbGF6eSwKICAgIHVwZGF0ZUhvbGRlcjogdXBkYXRlSG9sZGVyLAogICAgY29udmVydFRvRmFzdE9iamVjdDogY29udmVydFRvRmFzdE9iamVjdCwKICAgIHNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeTogc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5LAogICAgdXBkYXRlVHlwZXM6IHVwZGF0ZVR5cGVzLAogICAgc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZzogc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZywKICAgIHNldE9yVXBkYXRlTGVhZlRhZ3M6IHNldE9yVXBkYXRlTGVhZlRhZ3MsCiAgfTsKfSkoKTsKCi8vIEV2ZXJ5IGRlZmVycmVkIGh1bmsgKGkuZS4gZnJhZ21lbnQpIGlzIGEgZnVuY3Rpb24gdGhhdCB3ZSBjYW4gaW52b2tlIHRvCi8vIGluaXRpYWxpemUgaXQuIEF0IHRoaXMgbW9tZW50IGl0IGNvbnRyaWJ1dGVzIGl0cyBkYXRhIHRvIHRoZSBtYWluIGh1bmsuCmZ1bmN0aW9uIGluaXRpYWxpemVEZWZlcnJlZEh1bmsoaHVuaykgewogIC8vIFVwZGF0ZSB0aGUgdHlwZXNPZmZzZXQgZm9yIHRoZSBuZXh0IGRlZmVycmVkIGxpYnJhcnkuCiAgdHlwZXNPZmZzZXQgPSAjZW1iZWRkZWRUeXBlcy5sZW5ndGg7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiBleHRlbmQgbmF0aXZlcy4KICBodW5rKGh1bmtIZWxwZXJzLCAjZW1iZWRkZWRHbG9iYWxzT2JqZWN0LCBob2xkZXJzLCAjc3RhdGljU3RhdGUpOwp9CgovLyBSZXR1cm5zIHRoZSBnbG9iYWwgd2l0aCB0aGUgZ2l2ZW4gW25hbWVdLgpmdW5jdGlvbiBnZXRHbG9iYWxGcm9tTmFtZShuYW1lKSB7CiAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIGFyZSBydW5uaW5nIHRocm91Z2ggYWxsIGhvbGRlcnMuIFNpbmNlIG5lZ2F0aXZlCiAgLy8gbG9va3VwcyBhcmUgZXhwZW5zaXZlIHdlIG1pZ2h0IG5lZWQgdG8gaW1wcm92ZSB0aGlzLgogIC8vIFJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGFsbCBuYW1lcyBhcmUgdW5pcXVlIGFjcm9zcyBhbGwgaG9sZGVycy4KICBmb3IgKHZhciBpID0gMDsgaSA8IGhvbGRlcnMubGVuZ3RoOyBpKyspIHsKICAgIC8vIFRoZSBjb25zdGFudCBob2xkZXIgcmV1c2VzIHRoZSBzYW1lIG5hbWVzLiBUaGVyZWZvcmUgd2UgbXVzdCBza2lwIGl0LgogICAgaWYgKGhvbGRlcnNbaV0gPT0gI2NvbnN0YW50SG9sZGVyUmVmZXJlbmNlKSBjb250aW51ZTsKICAgIC8vIFJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGFsbCB2YXJpYWJsZXMgYXJlIHVuaXF1ZS4KICAgIGlmIChob2xkZXJzW2ldW25hbWVdKSByZXR1cm4gaG9sZGVyc1tpXVtuYW1lXTsKICB9Cn0KCmlmICgjaGFzU29mdERlZmVycmVkQ2xhc3NlcykgewogIC8vIExvYWRzIHRoZSBzb2Z0LWRlZmVycmVkIGNsYXNzZXMgYW5kIGluaXRpYWxpemVzIHRoZW0uCiAgLy8gVXBkYXRlcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBnaXZlbiBvYmplY3QuCiAgZnVuY3Rpb24gc29mdERlZihvKSB7CiAgICBzb2Z0RGVmID0gZnVuY3Rpb24obykge307ICAvLyBSZXBsYWNlIG91cnNlbHZlcy4KICAgICNkZWZlcnJlZEdsb2JhbFsjc29mdElkXSgKICAgICAgICBob2xkZXJzLCAjZW1iZWRkZWRHbG9iYWxzT2JqZWN0LCAjc3RhdGljU3RhdGUsCiAgICAgICAgaHVua0hlbHBlcnMpOwogICAgaWYgKG8gIT0gbnVsbCkgewogICAgICAvLyBUT0RPKDI5NTc0KTogc2hvdWxkIHdlIGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZm9yIEZpcmVmb3g/CiAgICAgIC8vIElmIHdlIHJlY29tbWVuZCB0aGF0IHRoZSBwcm9ncmFtIHRyaWdnZXJzIHRoZSBsb2FkIGJ5IGl0c2VsZiBiZWZvcmUKICAgICAgLy8gY2xhc3NlcyBhcmUgbmVlZGVkLCB0aGVuIHRoaXMgbGluZSBzaG91bGQgcmFyZWx5IGJlIGhpdC4KICAgICAgLy8gQWxzbywgaXQgaXMgb25seSBoaXQgYXQgbW9zdCBvbmNlIChwZXIgc29mdC1kZWZlcnJlZCBjaHVuaykuCiAgICAgIG8uX19wcm90b19fID0gby5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiAgICB9CiAgfQp9CgppZiAoI2lzVHJhY2tpbmdBbGxvY2F0aW9ucykgewogIHZhciBhbGxvY2F0aW9ucyA9ICNkZWZlcnJlZEdsb2JhbFsnYWxsb2NhdGlvbnMnXSA9IHt9Owp9CgovLyBDcmVhdGVzIHRoZSBob2xkZXJzLgojaG9sZGVyczsKCi8vIElmIHRoZSBuYW1lIGlzIG5vdCBzZXQgb24gdGhlIGZ1bmN0aW9ucywgZG8gaXQgbm93LgpodW5rSGVscGVycy5zZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3NhcnkoaG9sZGVycyk7CgovLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkIGJ1aWxkIHRoaXMgb2JqZWN0IGFzIGEgbGl0ZXJhbC4KdmFyICNzdGF0aWNTdGF0ZURlY2xhcmF0aW9uID0ge307CgovLyBTZXRzIHRoZSBwcm90b3R5cGVzIG9mIGNsYXNzZXMuCiNwcm90b3R5cGVzOwovLyBTZXRzIGFsaWFzZXMgb2YgbWV0aG9kcyAob24gdGhlIHByb3RvdHlwZXMgb2YgY2xhc3NlcykuCiNhbGlhc2VzOwovLyBJbnN0YWxscyB0aGUgdGVhci1vZmZzIG9mIGZ1bmN0aW9ucy4KI3RlYXJPZmZzOwovLyBCdWlsZHMgdGhlIGluaGVyaXRhbmNlIHN0cnVjdHVyZS4KI2luaGVyaXRhbmNlOwoKLy8gRW1pdHMgdGhlIGVtYmVkZGVkIGdsb2JhbHMuIFRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIGNvbnN0YW50cyBzbyB0aGUgZW1iZWRkZWQKLy8gZ2xvYmFsIHR5cGUgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgZm9yIGdlbmVyYXRpbmcgY29uc3RhbnRzLgojZW1iZWRkZWRHbG9iYWxzUGFydDE7CgovLyBBZGRzIHRoZSBzdWJ0eXBlIHJ1bGVzIGZvciB0aGUgbmV3IFJUSS4KI3R5cGVSdWxlczsKCi8vIEluc3RhbnRpYXRlcyBhbGwgY29uc3RhbnRzLgojY29uc3RhbnRzOwoKLy8gQWRkcyB0byB0aGUgZW1iZWRkZWQgZ2xvYmFscy4gQSBmZXcgZ2xvYmFscyByZWZlciB0byBjb25zdGFudHMuCiNlbWJlZGRlZEdsb2JhbHNQYXJ0MjsgCgovLyBJbml0aWFsaXplcyB0aGUgc3RhdGljIG5vbi1maW5hbCBmaWVsZHMgKHdpdGggdGhlaXIgY29uc3RhbnQgdmFsdWVzKS4KI3N0YXRpY05vbkZpbmFsRmllbGRzOwovLyBDcmVhdGVzIGxhenkgZ2V0dGVycyBmb3Igc3RhdGljcyB0aGF0IG11c3QgcnVuIGluaXRpYWxpemVycyBvbiBmaXJzdCBhY2Nlc3MuCiNsYXp5U3RhdGljczsKCi8vIFNldHMgdXAgdGhlIG5hdGl2ZSBzdXBwb3J0LgovLyBOYXRpdmUtc3VwcG9ydCB1c2VzIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcgYW5kIHNldE9yVXBkYXRlTGVhZlRhZ3MuCiNuYXRpdmVTdXBwb3J0OwoKLy8gU2V0cyB1cCB0aGUganMtaW50ZXJvcCBzdXBwb3J0LgojanNJbnRlcm9wU3VwcG9ydDsKCi8vIEVuc3VyZSBob2xkZXJzIGFyZSBpbiBmYXN0IG1vZGUsIG5vdyB3ZSBoYXZlIGZpbmlzaGVkIGFkZGluZyB0aGluZ3MuCmNvbnZlcnRBbGxUb0Zhc3RPYmplY3QoaG9sZGVycyk7CmNvbnZlcnRUb0Zhc3RPYmplY3QoI3N0YXRpY1N0YXRlKTsKCi8vIEludm9rZXMgbWFpbiAobWFraW5nIHN1cmUgdGhhdCBpdCByZWNvcmRzIHRoZSAnY3VycmVudC1zY3JpcHQnIHZhbHVlKS4KI2ludm9rZU1haW47Cn0pKCkKaHVua0hlbHBlcnNkaXJlY3RBY2Nlc3NUZXN0RXhwcmVzc2lvbiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBjbHMgPSBmdW5jdGlvbiAoKSB7fTsKICAgIGNscy5wcm90b3R5cGUgPSB7J3AnOiB7fX07CiAgICB2YXIgb2JqZWN0ID0gbmV3IGNscygpOwogICAgaWYgKCEob2JqZWN0Ll9fcHJvdG9fXyAmJiBvYmplY3QuX19wcm90b19fLnAgPT09IGNscy5wcm90b3R5cGUucCkpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICB0cnkgewogICAgICAvLyBBcmUgd2UgcnVubmluZyBvbiBhIHBsYXRmb3JtIHdoZXJlIHRoZSBwZXJmb3JtYW5jZSBpcyBnb29kPwogICAgICAvLyAoaS5lLiBDaHJvbWUgb3IgZDgpLgoKICAgICAgLy8gQ2hyb21lIHVzZXJBZ2VudD8KICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT0gInVuZGVmaW5lZCIgJiYKICAgICAgICAgIHR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50ID09ICJzdHJpbmciICYmCiAgICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZS8iKSA+PSAwKSByZXR1cm4gdHJ1ZTsKICAgICAgLy8gZDggdmVyc2lvbigpIGxvb2tzIGxpa2UgIk4uTi5OLk4iLCBqc3NoZWxsIHZlcnNpb24oKSBsaWtlICJOIi4KICAgICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09ICJmdW5jdGlvbiIgJiYKICAgICAgICAgIHZlcnNpb24ubGVuZ3RoID09IDApIHsKICAgICAgICB2YXIgdiA9IHZlcnNpb24oKTsKICAgICAgICBpZiAoL15cZCtcLlxkK1wuXGQrXC5cZCskLy50ZXN0KHYpKSByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSBjYXRjaChfKSB7fQoKICAgIHJldHVybiBmYWxzZTsKICB9KSgpCmN5Y2xpY1Rocm93dGVhck9mZkNvZGVlbWJlZGRlZFR5cGVzZW1iZWRkZWRJbnRlcmNlcHRvclRhZ3NlbWJlZGRlZExlYWZUYWdzZW1iZWRkZWRHbG9iYWxzT2JqZWN0c3RhdGljU3RhdGVEZWNsYXJhdGlvbnN0YXRpY1N0YXRlY29uc3RhbnRIb2xkZXJSZWZlcmVuY2VidWlsZENvbnN0YW50SG9sZGVyUmVmZXJlbmNlZGVmYXVsdEFyZ3VtZW50VmFsdWVzZGVmZXJyZWRHbG9iYWxzb2Z0SWRpc1RyYWNraW5nQWxsb2NhdGlvbnNwcm90b3R5cGVzZW1pdFByb3RvdHlwZXNpbmhlcml0YW5jZWVtaXRJbmhlcml0YW5jZWFsaWFzZXNlbWl0SW5zdGFuY2VNZXRob2RBbGlhc2VzdGVhck9mZnNlbWl0SW5zdGFsbFRlYXJPZmZzZW1pdENvbnN0YW50c2VtaXRTdGF0aWNOb25GaW5hbEZpZWxkc2xhenlTdGF0aWNzZW1pdExhemlseUluaXRpYWxpemVkU3RhdGljc2VtYmVkZGVkR2xvYmFsc1BhcnQxZW1pdEVtYmVkZGVkR2xvYmFsc1BhcnQxZW1iZWRkZWRHbG9iYWxzUGFydDJlbWl0RW1iZWRkZWRHbG9iYWxzUGFydDJlbWl0VHlwZVJ1bGVzbmF0aXZlU3VwcG9ydGVtaXROYXRpdmVTdXBwb3J0anNJbnRlcm9wU3VwcG9ydGNhbGwwc2VsZWN0b3JjYWxsMXNlbGVjdG9yY2FsbDJzZWxlY3RvciNkZWZlcnJlZEdsb2JhbFsjc29mdElkXSA9CiAgZnVuY3Rpb24oaG9sZGVyc0xpc3QsICNlbWJlZGRlZEdsb2JhbHNPYmplY3QsICNzdGF0aWNTdGF0ZSwKICAgICAgICAgICBodW5rSGVscGVycykgewoKLy8gSW5zdGFsbHMgdGhlIGhvbGRlcnMgYXMgbG9jYWwgdmFyaWFibGVzLgojaW5zdGFsbEhvbGRlcnNBc0xvY2FsczsKLy8gU2V0cyB0aGUgcHJvdG90eXBlcyBvZiB0aGUgbmV3IGNsYXNzZXMuCiNwcm90b3R5cGVzOwovLyBTZXRzIGFsaWFzZXMgb2YgbWV0aG9kcyAob24gdGhlIHByb3RvdHlwZXMgb2YgY2xhc3NlcykuCiNhbGlhc2VzOwovLyBJbnN0YWxscyB0aGUgdGVhci1vZmZzIG9mIGZ1bmN0aW9ucy4KI3RlYXJPZmZzOwovLyBCdWlsZHMgdGhlIGluaGVyaXRhbmNlIHN0cnVjdHVyZS4KI2luaGVyaXRhbmNlOwp9aW5zdGFsbEhvbGRlcnNBc0xvY2Fsc2VtaXRJbnN0YWxsSG9sZGVyc0FzTG9jYWxzaG9sZGVySW5pdHNob2xkZXJzTGlzdFsjXXVwZGF0ZUhvbGRlckFzc2lnbm1lbnRzYWN0aXZlSG9sZGVycyNob2xkZXIgPSBodW5rSGVscGVycy51cGRhdGVIb2xkZXIoaG9sZGVyc0xpc3RbI2luZGV4XSwgI2hvbGRlcikjaG9sZGVyID0gaG9sZGVyc0xpc3RbI2luZGV4XWNsYXNzUHJvdG90eXBlc2luY2x1ZGVDbG9zdXJlc2Nsb3N1cmVQcm90b3R5cGVzbWV0aG9kQWxpYXNlc2xhenlJbml0aWFsaXplcnNmdW5jdGlvbihodW5rSGVscGVycywgI2VtYmVkZGVkR2xvYmFsc09iamVjdCwgaG9sZGVyc0xpc3QsICNzdGF0aWNTdGF0ZSkgewoKLy8gQnVpbGRzIHRoZSBob2xkZXJzLiBUaGV5IG9ubHkgY29udGFpbiB0aGUgZGF0YSBmb3IgbmV3IGhvbGRlcnMuCiNob2xkZXJzOwoKLy8gSWYgdGhlIG5hbWUgaXMgbm90IHNldCBvbiB0aGUgZnVuY3Rpb25zLCBkbyBpdCBub3cuCmh1bmtIZWxwZXJzLnNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeSgjZGVmZXJyZWRIb2xkZXJzTGlzdCk7CgovLyBVcGRhdGVzIHRoZSBob2xkZXJzIG9mIHRoZSBtYWluLWZyYWdtZW50LiBVc2VzIHRoZSBwcm92aWRlZCBob2xkZXJzTGlzdCB0bwovLyBhY2Nlc3MgdGhlIG1haW4gaG9sZGVycy4KLy8gVGhlIGxvY2FsIGhvbGRlcnMgYXJlIHJlcGxhY2VkIGJ5IHRoZSBjb21iaW5lZCBob2xkZXJzLiBUaGlzIGlzIG5lY2Vzc2FyeQovLyBmb3IgdGhlIGluaGVyaXRhbmNlIHNldHVwIGJlbG93LgojdXBkYXRlSG9sZGVyczsKLy8gU2V0cyB0aGUgcHJvdG90eXBlcyBvZiB0aGUgbmV3IGNsYXNzZXMuCiNwcm90b3R5cGVzOwovLyBBZGQgc2lnbmF0dXJlIGZ1bmN0aW9uIHR5cGVzIGFuZCBjb21wdXRlIHRoZSB0eXBlcyBvZmZzZXQgaW4gYGluaXQudHlwZXNgLgovLyBUaGVzZSBjYW4gb25seSByZWZlciB0byByZWd1bGFyIGNsYXNzZXMgYW5kIGluIERhcnQgMiBvbmx5IGNsb3N1cmVzIGhhdmUKLy8gZnVuY3Rpb24gdHlwZXMgc28gdGhlIGB0eXBlc09mZnNldGAgaGFzIGJlZW4gc2FmZWx5IGNvbXB1dGVkIGJlZm9yZSBpdCdzCi8vIHJlZmVycmVkIGluIHRoZSBzaWduYXR1cmVzIG9mIHRoZSBgY2xvc3VyZXNgIGJlbG93Lgp2YXIgI3R5cGVzT2Zmc2V0ID0gaHVua0hlbHBlcnMudXBkYXRlVHlwZXMoI3R5cGVzKTsKI2Nsb3N1cmVzOwovLyBTZXRzIGFsaWFzZXMgb2YgbWV0aG9kcyAob24gdGhlIHByb3RvdHlwZXMgb2YgY2xhc3NlcykuCiNhbGlhc2VzOwovLyBJbnN0YWxscyB0aGUgdGVhci1vZmZzIG9mIGZ1bmN0aW9ucy4KI3RlYXJPZmZzOwovLyBCdWlsZHMgdGhlIGluaGVyaXRhbmNlIHN0cnVjdHVyZS4KI2luaGVyaXRhbmNlOwoKLy8gQWRkcyB0aGUgc3VidHlwZSBydWxlcyBmb3IgdGhlIG5ldyBSVEkuCiN0eXBlUnVsZXM7CgovLyBJbnN0YW50aWF0ZXMgYWxsIGNvbnN0YW50cyBvZiB0aGlzIGRlZmVycmVkIGZyYWdtZW50LgovLyBOb3RlIHRoYXQgdGhlIGNvbnN0YW50LWhvbGRlciBoYXMgYmVlbiB1cGRhdGVkIGVhcmxpZXIgYW5kIHN0b3JpbmcgdGhlCi8vIGNvbnN0YW50IHZhbHVlcyBpbiB0aGUgY29uc3RhbnQtaG9sZGVyIG1ha2VzIHRoZW0gYXZhaWxhYmxlIGdsb2JhbGx5LgojY29uc3RhbnRzOwovLyBJbml0aWFsaXplcyB0aGUgc3RhdGljIG5vbi1maW5hbCBmaWVsZHMgKHdpdGggdGhlaXIgY29uc3RhbnQgdmFsdWVzKS4KI3N0YXRpY05vbkZpbmFsRmllbGRzOwovLyBDcmVhdGVzIGxhenkgZ2V0dGVycyBmb3Igc3RhdGljcyB0aGF0IG11c3QgcnVuIGluaXRpYWxpemVycyBvbiBmaXJzdCBhY2Nlc3MuCiNsYXp5U3RhdGljczsKCi8vIE5hdGl2ZS1zdXBwb3J0IHVzZXMgc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZyBhbmQgc2V0T3JVcGRhdGVMZWFmVGFncy4KI25hdGl2ZVN1cHBvcnQ7Cn1kZWZlcnJlZEhvbGRlcnNMaXN0dXBkYXRlSG9sZGVyc3Byb3BlcnR5TWFwZW1pdFN0YXRpY01ldGhvZGVtaXRDb25zdHJ1Y3RvcmhvbGRlckluaXRpYWxpemF0aW9uc3ZhciBob2xkZXJzID0gI2NvbnN0YW50SG9sZGVyanNNZXRob2RzZnVuY3Rpb24gIygpIHsgfXRoaXNSZWZzb2Z0RGVmKHRoaXMpcXVhbGlmaWVkTmFtZWFsbG9jYXRpb25zWyIiXSA9IHRydWVlbWl0dGVkRmllbGRzdW5kZXJzY29yZXZhciAjID0gdGhpcztjaGFpbkxlbmd0aHByZXZpb3VzQ29uc3RhbnRmbHVzaEFzc2lnbm1lbnQjOyMuIyA9ICNmdW5jdGlvbiAjKCMpIHsgIyB9cHJvdG8jLnByb3RvdHlwZSA9ICM7ZW1pdFByb3RvdHlwZWdldHRlcnNTZXR0ZXJzZ2VuZXJhdGVHZXR0ZXJzU2V0dGVyc2FsbE1ldGhvZHNlbWl0SW5zdGFuY2VNZXRob2Rwcm9wTm8gY29uc3RhbnQgdmFsdWUgZm9yIGVsaWRlZCBmaWVsZDogZnVuY3Rpb24oKSB7IHJldHVybiAjOyB9ZnVuY3Rpb24ocmVjZWl2ZXIpIHsgcmV0dXJuIHJlY2VpdmVyWyNdOyB9ZnVuY3Rpb24ocmVjZWl2ZXIpIHsgcmV0dXJuIHRoaXNbI107IH1mdW5jdGlvbigpIHsgcmV0dXJuIHRoaXNbI107IH1mdW5jdGlvbigpIHsgfWZ1bmN0aW9uKHJlY2VpdmVyLCB2YWwpIHsgcmV0dXJuIHJlY2VpdmVyWyNdID0gdmFsOyB9ZnVuY3Rpb24ocmVjZWl2ZXIsIHZhbCkgeyByZXR1cm4gdGhpc1sjXSA9IHZhbDsgfWZ1bmN0aW9uKHZhbCkgeyByZXR1cm4gdGhpc1sjXSA9IHZhbDsgfWdldHRlcnNzdHViTWV0aG9kZm9yY2VBZGRhcHBseU5hbWVfZW5jb2RlT3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzaW5oZXJpdENhbGxzbWl4aW5DYWxsc2NsYXNzZXNJbkZyYWdtZW50X21peGluaHVua0hlbHBlcnMubWl4aW5zdXBlcmNsYXNzUmVmZXJlbmNlX2luaGVyaXRodW5rSGVscGVycy5pbmhlcml0bGlzdEVsZW1lbnRzZmlyc3RDbGFzc19pbmhlcml0TWFueWh1bmtIZWxwZXJzLmluaGVyaXRNYW55d3JhcFBoYXNlZmlyc3RBbGlhc3ZhciBfID0gIy5wcm90b3R5cGU7XyA9ICMucHJvdG90eXBlXy4jID0gXy4jKGZ1bmN0aW9uICMoKXsjfSkoKTtlbWl0SW5zdGFsbFRlYXJPZmZjYWxsTmFtZXNmdW5zT3JOYW1lc2FkZEZ1bk9yTmFtZWNhbGxOYW1lQXJyYXlmdW5zT3JOYW1lc0FycmF5aW5zdGFsbF9zdGF0aWNfaHVua0hlbHBlcnMuX3N0YXRpY18gICAgICAgICAgICAgICAgI2luc3RhbGwoI2NvbnRhaW5lciwgI2dldHRlck5hbWUsICNuYW1lLCAjZnVuVHlwZSlmdW5UeXBlaW5zdGFsbGVkTmFtZV9zdGF0aWNodW5rSGVscGVycy5pbnN0YWxsU3RhdGljVGVhck9mZiAgICAgICAgICAgICNpbnN0YWxsKCNjb250YWluZXIsICNnZXR0ZXJOYW1lLAogICAgICAgICAgICAgICAgICAgICAjcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgI29wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICNjYWxsTmFtZXMsICNmdW5zT3JOYW1lcywgI2Z1blR5cGUsICNhcHBseUluZGV4KWlzSW50ZXJjZXB0ZWRUYWdfaW5zdGFuY2VfaHVua0hlbHBlcnMuX2luc3RhbmNlX19pbnN0YW5jZWh1bmtIZWxwZXJzLmluc3RhbGxJbnN0YW5jZVRlYXJPZmYgICAgICAgICAgICAjaW5zdGFsbCgjY29udGFpbmVyLCAjZ2V0dGVyTmFtZSwgI2lzSW50ZXJjZXB0ZWQsCiAgICAgICAgICAgICAgICAgICAgICNyZXF1aXJlZFBhcmFtZXRlckNvdW50LCAjb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAjY2FsbE5hbWVzLCAjZnVuc09yTmFtZXMsICNmdW5UeXBlLCAjYXBwbHlJbmRleCl2YXIgXztpbnN0YWxsVGVhck9mZnNoYXNMaXN0dmFyIG1ha2VDb25zdExpc3QgPSBodW5rSGVscGVycy5tYWtlQ29uc3RMaXN0OyMuIyA9ICM7Tm8gY29kZSBmb3IgIy4jID0gIygpO3N0YXRpY0ZpZWxkcyMoIywgIywgIywgIyk7X2xhenlodW5rSGVscGVycy5sYXp5ZW1pdEVtYmVkZGVkR2xvYmFsc0ZvckRlZmVycmVkTG9hZGluZ09iamVjdC5jcmVhdGUobnVsbClpc0h1bmtMb2FkZWRGdW5jdGlvbmZ1bmN0aW9uKGhhc2gpIHsgcmV0dXJuICEhW2hhc2hdOyB9aXNIdW5rSW5pdGlhbGl6ZWRGdW5jdGlvbmZ1bmN0aW9uKGhhc2gpIHsgcmV0dXJuICEhI2RlZmVycmVkSW5pdGlhbGl6ZWRbaGFzaF07IH1pbml0aWFsaXplTG9hZGVkSHVua0Z1bmN0aW9uICAgICAgICAgICAgZnVuY3Rpb24oaGFzaCkgewogICAgICAgICAgICAgIHZhciBodW5rID0gW2hhc2hdOwogICAgICAgICAgICAgIGlmIChodW5rID09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRocm93ICJEZWZlcnJlZExvYWRpbmcgc3RhdGUgZXJyb3I6IGNvZGUgd2l0aCBoYXNoICciICsKICAgICAgICAgICAgICAgICAgICBoYXNoICsgIicgd2FzIG5vdCBsb2FkZWQiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpbml0aWFsaXplRGVmZXJyZWRIdW5rKGh1bmspOwogICAgICAgICAgICAgICNkZWZlcnJlZEluaXRpYWxpemVkW2hhc2hdID0gdHJ1ZTsKICAgICAgICAgICAgfWRlZmVycmVkTG9hZEhhc2hlc2ZyYWdtZW50SW5kZXhlc2ZyYWdtZW50VXJpc2ZyYWdtZW50SGFzaGVzbGlicmFyeVBhcnRzTWFwRW50cmllc2ZyYWdtZW50TGlzdGluZGV4ZXNmcmFnbWVudEhhc2hzZXRWYWx1ZWVtaXRNYW5nbGVkR2xvYmFsTmFtZXNuYXRpdmVDbGFzc2VzTmVlZGluZ1VubWFuZ2xlZE5hbWVlbWl0R2V0VHlwZUZyb21OYW1lZ2V0R2xvYmFsRnJvbU5hbWVlbWl0TWV0YWRhdGFtZXRhZGF0YUdsb2JhbHNjcmVhdGVHbG9iYWxtYWluVW5pdGNyZWF0ZVJ0aVVuaXZlcnNlZ2xvYmFsc09iamVjdHZhciBpbml0ID0gIztpbml0LiMgPSAjO3N1cGVydHlwZUFyZ3VtZW50cyMoaW5pdC4jLEpTT04ucGFyc2UoIykpO3VuaXZlcnNlRmllbGRzaW5pdEZpZWxkbmV3IE1hcCgpICAgICAgICAvLyBPbiBWOCwgdGhlICdpbnRlcm4nIGZ1bmN0aW9uIGNvbnZlcnRzIGEgc3RyaW5nIHRvIGEgc3ltYm9sLCB3aGljaAogICAgICAgIC8vIG1ha2VzIHByb3BlcnR5IGFjY2VzcyBtdWNoIGZhc3Rlci4KICAgICAgICAvLyBUT0RPKHNyYSk6IFVzZSBTeW1ib2wgb24gbm9uLUlFMTEgYnJvd3NlcnMuCiAgICAgICAgZnVuY3Rpb24gKHMpIHsKICAgICAgICAgIHZhciBvID0ge307CiAgICAgICAgICBvW3NdID0gMTsKICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhodW5rSGVscGVycy5jb252ZXJ0VG9GYXN0T2JqZWN0KG8pKVswXTsKICAgICAgICB9c3ViY2xhc3NBc3NpZ25tZW50c2h1bmtIZWxwZXJzLnNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcoIyk7aHVua0hlbHBlcnMuc2V0T3JVcGRhdGVMZWFmVGFncygjKTtMb2NhbEFsaWFzZXNpbml0aWFsaXphdGlvbnNIb2xkZXJDb2RlRGVmZXJyZWRMb2FkaW5nU3RhdGVEZWZlcnJlZFByaW1hcnlFeHByZXNzaW9udGVhck9mZlByb3BlcnR5TmFtZSR0ZWFyT2ZmY2FjaGVkQ2xhc3NGaWVsZE5hbWVzJGNhY2hlZEZpZWxkTmFtZXNtYWluQm9pbGVycGxhdGVkZWZlcnJlZEJvaWxlcnBsYXRlRGFydDJzb2Z0RGVmZXJyZWRCb2lsZXJwbGF0ZVNVQ0NFU1NfU3NhSW5zdHJ1Y3Rpb25TZWxlY3Rpb24mSEJhc2VWaXNpdG9yJkNvZGVnZW5QaGFzZVNzYUluc3RydWN0aW9uU2VsZWN0aW9uc2ltcGxlT3BfaW50ZXJjZXB0ZWR0cnlSZXBsYWNlRXhwbGljaXRSZWNlaXZlcldpdGhEdW1teXJlY2VpdmVyQXJndW1lbnRpc01hdGNoaW5nUmVhZG5vTWF0Y2hpbmdSZWFkcmVwbGFjZU9wcGx1c09yTWludXNpbmNyZW1lbnRPcHJtd3NpbXBsZXNpbXBsZUJpbmFyeWJpdG9wb3BlcmFuZDFvcGVyYW5kMl9Tc2FUeXBlS25vd25SZW1vdmVyJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FUeXBlS25vd25SZW1vdmVyX1NzYVRydXN0ZWRDaGVja1JlbW92ZXImSEJhc2VWaXNpdG9yJkNvZGVnZW5QaGFzZVNzYVRydXN0ZWRDaGVja1JlbW92ZXJfU3NhQXNzaWdubWVudENoYWluaW5nJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FBc3NpZ25tZW50Q2hhaW5pbmd0cnlDaGFpbkFzc2lnbm1lbnRuZXh0U2V0dGVybmV4dFN0b3Jlc2ltcGxlU291cmNlX1NzYUluc3RydWN0aW9uTWVyZ2VyJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FJbnN0cnVjdGlvbk1lcmdlcmV4cGVjdGVkSW5wdXRzcHVyZUlucHV0c21hcmtBc0dlbmVyYXRlQXRVc2VTaXRlYW5hbHl6ZUlucHV0c2lzRWZmZWN0aXZlbHlQdXJlaXNBc3NpZ25lZExvY2FsaW5pdGlhbGl6aW5nQXNzaWdubWVudENvdW50c3VwZXJNZXRob2R0cnlHZW5lcmF0ZUF0VXNlU2l0ZWlzQmxvY2tTaW5nbGVQcmVkZWNlc3NvcnRyeU1lcmdpbmdFeHByZXNzaW9uc2ZpbmRJbklucHV0c0FuZFBvcE5vbk1hdGNoaW5nbmV4dElucHV0bmV3SW5wdXRzbmV3Q291bnRfU3NhQ29uZGl0aW9uTWVyZ2VyJkhHcmFwaFZpc2l0b3ImQ29kZWdlblBoYXNlU3NhQ29uZGl0aW9uTWVyZ2VyaGFzQW55U3RhdGVtZW50aXNTYWZlVG9HZW5lcmF0ZUF0VXNlU2l0ZXN0YXJ0SWZ0aGVuSW5wdXRlbHNlSW5wdXRvdGhlcklmb3RoZXJKb2lub3RoZXJQaGluZXh0SW5zdHJ1Y3Rpb25fU3NhU2hhcmVSZWdpb25Db25zdGFudHMmSEJhc2VWaXNpdG9yJkNvZGVnZW5QaGFzZVNzYVNoYXJlUmVnaW9uQ29uc3RhbnRzX2NvdW50Q2FjaGVhYmxlVXNlc2NhY2hlYWJsZXVzZUNvdW50X3RoaXNfaGFuZGxlTnVsbF9oYW5kbGVJbnRfaGFuZGxlU3RyaW5nX2lzQ2FjaGVhYmxlVXNlX251bGxfc19FeHByZXNzaW9uTmFtZWNhblVzZUFsaWFzZWRTdXBlck1lbWJlckxpdmVSYW5nZUxpdmVJbnRlcnZhbGZvckNoZWNrY2hlY2tlZEludGVydmFsbG9vcFVwZGF0ZXJhbmdlaW50ZXJ2YWxkaWVzQXRhdExpdmVFbnZpcm9ubWVudHN0YXJ0SWRlbmRJZGxvb3BNYXJrZXJzdXNlcklkZXhpc3RpbmdJZGFkZExvb3BNYXJrZXJyZW1vdmVMb29wTWFya2VyX1NzYUxpdmVJbnRlcnZhbEJ1aWxkZXImSEJhc2VWaXNpdG9yJkNvZGVnZW5QaGFzZVNzYUxpdmVJbnRlcnZhbEJ1aWxkZXJpbnN0cnVjdGlvbklkTGl2ZUludGVydmFsQnVpbGRlci5tYXJrSW5wdXRzQXNMaXZlSW5FbnZpcm9ubWVudG1hcmtBc0xpdmVJbkVudmlyb25tZW50Y2hlY2tlZEluc3RydWN0aW9uT3JOb25HZW5lcmF0ZUF0VXNlU2l0ZXJlbW92ZUZyb21FbnZpcm9ubWVudGlmSW5zdHJ1Y3Rpb25zdWNjZXNzb3JFbnZ1cGRhdGVMb29wTWFya2VyQ29weSA8LSBDb3B5SGFuZGxlcmFkZENvcHlDb3BpZXM6ICwgYXNzaWdubWVudHM6IFZhcmlhYmxlTmFtZXNvd25OYW1lY29weUhhbmRsZXJzYWxsVXNlZE5hbWVzc3dhcFRlbXB0MGFkZE5hbWVVc2VkVmFyaWFibGVOYW1lcmZyZWVUZW1wb3JhcnlOYW1lc3RlbXBvcmFyeUluZGV4dFswLTldK2FsbG9jYXRlV2l0aEhpbnRhbGxvY2F0ZVRlbXBvcmFyeWZpcnN0UGhpVXNlcldpdGhFbGVtZW50YWxsb2NhdGVOYW1lYWRkQWxsb2NhdGVkTmFtZWZyZWVOYW1lX1NzYVZhcmlhYmxlQWxsb2NhdG9yJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FWYXJpYWJsZUFsbG9jYXRvcnZhcmlhYmxlTmFtZXJoYW5kbGVQaGloYW5kbGVJbnN0cnVjdGlvbm5lZWRzTmFtZWF0SW50ZXJ2YWxpbnN0cnVjdGlvbkludGVydmFsZnJlZVVzZWROYW1lc0F0U3BlY2lhbGl6ZWRDaGVja3NmaW5kQXNDaGVja19maW5kQXNDaGVja1NzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzX2VuY2xvc2luZ0NsYXNzc2hvdWxkUmVtb3ZldHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3JjYW5Vc2VTZWxmRm9ySW50ZXJjZXB0b3Jjb25zdGFudEludGVyY2VwdG9ydHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3JGcm9tVHlwZWZpbmREb21pbmF0b3JyZXdyaXRlU2VsZkludGVyY2VwdG9yVXNlc3JlcGxhY2VVc2VyV2l0aGluc3RhbmNlb2ZDaGVja29uZVNob3RJbnRlcmNlcHRvcmZpbmlzaEludm9rZWNhbGxSZWNlaXZlclNzYVR5cGVQcm9wYWdhdG9yd29ya21hcHBlbmRpbmdPcHRpbWl6YXRpb25zdXBkYXRlVHlwZXByb2Nlc3NXb3JrbGlzdGFkZFRvV29ya0xpc3RhZGREZXBlbmRlbnRJbnN0cnVjdGlvbnNUb1dvcmtMaXN0cHJvY2Vzc1BlbmRpbmdPcHRpbWl6YXRpb25zY2hlY2tQb3NpdGl2ZUludGVnZXJvdXRwdXRUeXBlX251bWVyaWNGaXh1cGNvbnZlcnRJbnB1dGlzQ2hlY2tFbm91Z2hGb3JOc21PckFlY2hlY2tSZWNlaXZlcmNoZWNrQXJndW1lbnRhZGRBbGxVc2Vyc0J1dGNoZWNrSW5wdXRzVmFsdWVSYW5nZUluZm9pbnRaZXJvaW50T25lbmV3SW50VmFsdWVuZXdJbnN0cnVjdGlvblZhbHVlbmV3UG9zaXRpdmVWYWx1ZW5ld0FkZFZhbHVlbmV3U3VidHJhY3RWYWx1ZW5ld05lZ2F0ZVZhbHVlbmV3VW5ib3VuZFJhbmdlbmV3Tm9ybWFsaXplZFJhbmdldXBuZXdNYXJrZXJSYW5nZVZhbHVlTWFya2VyVmFsdWVwb3NpdGl2ZUludFZhbHVlSW50VmFsdWUuaGFzaENvZGVJbnRWYWx1ZSBNYXhJbnRWYWx1ZU1heE1pbkludFZhbHVlTWluVW5rbm93blZhbHVlSW5zdHJ1Y3Rpb25WYWx1ZUluc3RydWN0aW9uVmFsdWUuaGFzaENvZGVJbnN0cnVjdGlvbjogUG9zaXRpdmVWYWx1ZUJpbmFyeU9wZXJhdGlvblZhbHVlQWRkVmFsdWVBZGRWYWx1ZS5oYXNoQ29kZVN1YnRyYWN0VmFsdWVTdWJ0cmFjdFZhbHVlLmhhc2hDb2RlTmVnYXRlVmFsdWVOZWdhdGUuaGFzaENvZGV1bmJvdW5kaXNTaW5nbGVWYWx1ZVJhbmdlLmhhc2hDb2RlU3NhVmFsdWVSYW5nZUFuYWx5emVyY29udmVyc2lvbnNTU0EgdmFsdWUgcmFuZ2UgYnVpbGRlcnJlbW92ZVJhbmdlQ29udmVyc2lvbmNvbnN0YW50TnVtaW5kZXhSYW5nZWxlbmd0aFJhbmdlbWF4SW5kZXhiZWxvd0xlbmd0aGNyZWF0ZVJhbmdlQ29udmVyc2lvbm5ld0luZGV4UmFuZ2VyaWdodFJhbmdlbGVmdFJhbmdlaGFuZGxlRXF1YWxpdHlDaGVja2hhbmRsZUludm9rZU1vZHVsb2Rpdmlzb3JkaXZpZGVuZGhhbmRsZUJpbmFyeU9wZXJhdGlvbnRyeUNvbXB1dGVSYW5nZW5lZ2F0ZU9wZXJhdGlvbmZsaXBPcGVyYXRpb25jb21wdXRlQ29uc3RyYWluZWRSYW5nZW1pcnJvck9wcmV2ZXJzZWRNaXJyb3JMb29wVXBkYXRlUmVjb2duaXplcmxvb3BQaGl1cGRhdGVSYW5nZXN0YXJ0UmFuZ2VwaGlSYW5nZWlucHV0UmFuZ2VWYWx1ZVNldGNvbGxpc2lvbnNjYXBhY2l0eXJlc2l6ZXByb2Jlb2xkU2l6ZW9sZFRhYmxlb2xkQ29sbGlzaW9uc1ZhbHVlU2V0Tm9kZWpzX2NoYXJhY3Rlcl9jb2Rlc19NRVJHRV9TT1JUX0xJTUlUYmluYXJ5U2VhcmNoc29ydGVkTGlzdGNvbXBsb3dlckJvdW5kdG1wMV9yZXZlcnNlaW5zZXJ0aW9uU29ydHNjcmF0Y2hTcGFjZV9tb3ZpbmdJbnNlcnRpb25Tb3J0X21lcmdlU29ydHRhcmdldE1pZGRsZWZpcnN0TGlzdGZpcnN0U3RhcnRmaXJzdEVuZHNlY29uZExpc3RzZWNvbmRTdGFydHNlY29uZEVuZGN1cnNvcjFjdXJzb3IyZmlyc3RFbGVtZW50c2Vjb25kRWxlbWVudF9DYW5vbmljYWxpemVfSXNWYWxpZEtleUNhbm9uaWNhbGl6ZWRNYXBfY2Fub25pY2FsaXplX2lzVmFsaWRLZXlGbl9iYXNlX2lzVmFsaWRLZXl7Li4ufV90b1N0cmluZ1Zpc2l0aW5nX2lzVG9TdHJpbmdWaXNpdGluZ0NvbWJpbmVkSXRlcmFibGVWaWV3X2l0ZXJhYmxlc19Db21iaW5lZEl0ZXJhdG9yX2l0ZXJhdG9yc0NvbWJpbmVkTGlzdFZpZXdfbGlzdHNfdGhyb3dDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBMaXN0aW5pdGlhbEluZGV4Q29tYmluZWRNYXBWaWV3X3plcm9fdXBwZXJDYXNlQV91cHBlckNhc2VaX2xvd2VyQ2FzZUFfbG93ZXJDYXNlWl9hc2NpaUNhc2VCaXRlcXVhbHNJZ25vcmVBc2NpaUNhc2VhQ2hhcmJDaGFyYUNoYXJMb3dlckNhc2VoYXNoSWdub3JlQXNjaWlDYXNlY29tcGFyZUFzY2lpVXBwZXJDYXNlZGVmYXVsdFJlc3VsdGFVcHBlckNhc2ViVXBwZXJDYXNlY29tcGFyZUFzY2lpTG93ZXJDYXNlYUxvd2VyQ2FzZWJMb3dlckNhc2Vjb21wYXJlTmF0dXJhbGNvbXBhcmVBc2NpaUxvd2VyQ2FzZU5hdHVyYWxjb21wYXJlQXNjaWlVcHBlckNhc2VOYXR1cmFsX2NvbXBhcmVOYXR1cmFsbHlhSXNEaWdpdGJJc0RpZ2l0X2NvbXBhcmVOdW1lcmljYWxseV9jb21wYXJlRGlnaXRDb3VudF9pc0RpZ2l0X2lzTm9uWmVyb051bWJlclN1ZmZpeF9HZXRLZXlFcXVhbGl0eWUxZTJFcXVhbGl0eUJ5X2dldEtleV9pbm5lcmdldEtleURlZmF1bHRFcXVhbGl0eUlkZW50aXR5RXF1YWxpdHlJdGVyYWJsZUVxdWFsaXR5X2VsZW1lbnRFcXVhbGl0eWVsZW1lbnRFcXVhbGl0eWVsZW1lbnRzMWVsZW1lbnRzMml0MWl0Mmhhc05leHRMaXN0RXF1YWxpdHlfVW5vcmRlcmVkRXF1YWxpdHlVbm9yZGVyZWRJdGVyYWJsZUVxdWFsaXR5U2V0RXF1YWxpdHlfTWFwRW50cnllcXVhbGl0eV9rZXlFcXVhbGl0eV92YWx1ZUVxdWFsaXR5TWFwRXF1YWxpdHllcXVhbEVsZW1lbnRDb3VudHNrZXlIYXNodmFsdWVIYXNoTXVsdGlFcXVhbGl0eV9lcXVhbGl0aWVzZXF1YWxpdGllc2VxRGVlcENvbGxlY3Rpb25FcXVhbGl0eV91bm9yZGVyZWRDYXNlSW5zZW5zaXRpdmVFcXVhbGl0eXN0cmluZzFfSEFTSF9NQVNLRXF1YWxpdHlNYXBFcXVhbGl0eVNldG1hcE1hcEsxbWFwS2V5bWFwVmFsdWVtZXJnZU1hcHNncm91cEJ5bWluQnlvcmRlckJ5bWluVmFsdWVtaW5PcmRlckJ5ZWxlbWVudE9yZGVyQnltYXhCeW1heFZhbHVlbWF4T3JkZXJCeXRyYW5zaXRpdmVDbG9zdXJldmVydGV4MXZlcnRleDJ2ZXJ0ZXgzc3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzaW5kaWNlc2xvd0xpbmtzb25TdGFja3N0cm9uZ0Nvbm5lY3RJdGVyYWJsZVppcGl0ZXJhYmxlc2l0ZXJhdG9yc19JdGVyYXRvclppcFByaW9yaXR5UXVldWVIZWFwUHJpb3JpdHlRdWV1ZV9JTklUSUFMX0NBUEFDSVRZX2xvY2F0ZU5vIHN1Y2ggZWxlbWVudF9yZW1vdmVMYXN0X2J1YmJsZVVwX2J1YmJsZURvd25sZWZ0Q2hpbGRQb3NpdGlvbnBhcmVudEluZGV4cmlnaHRDaGlsZEluZGV4bGVmdENoaWxkSW5kZXhsZWZ0Q2hpbGRyaWdodENoaWxkbWluQ2hpbGRJbmRleG1pbkNoaWxkbmV3Q2FwYWNpdHluZXdRdWV1ZV9RdWV1ZUxpc3QmT2JqZWN0Jkxpc3RNaXhpblF1ZXVlTGlzdF90YWJsZV9oZWFkX3RhaWxpbml0aWFsQ2FwYWNpdHlfY2FzdEZyb21zb3VyY2VMaXN0YWRkQ291bnRfcHJlR3Jvd2VuZFNwYWNlcHJlU3BhY2VhZGRGaXJzdE5vIGVsZW1lbnRMZW5ndGggIG1heSBub3QgYmUgbmVnYXRpdmUubmV3VGFpbCBtdXN0IGJlIGluIHRoZSByYW5nZSBbMC4uX2lzUG93ZXJPZjJfbmV4dFBvd2VyT2YybmV4dE51bWJlcm5ld1RhYmxlX3dyaXRlVG9MaXN0Zmlyc3RQYXJ0U2l6ZW5ld0VsZW1lbnRDb3VudF9DYXN0UXVldWVMaXN0X1VuaW9uU2V0JlNldEJhc2UmVW5tb2RpZmlhYmxlU2V0TWl4aW5DYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBTZXRVbmlvblNldF9kaXNqb2ludF9pdGVyYWJsZV9kZWR1cEl0ZXJhYmxlVW5pb25TZXRDb250cm9sbGVyX3NldFVubW9kaWZpYWJsZUxpc3RWaWV3X05vbkdyb3dhYmxlTGlzdFZpZXcmRGVsZWdhdGluZ0xpc3QmTm9uR3Jvd2FibGVMaXN0TWl4aW5DYW5ub3QgY2hhbmdlIHRoZSBsZW5ndGggb2YgYSBmaXhlZC1sZW5ndGggbGlzdE5vbkdyb3dhYmxlTGlzdFZpZXdsaXN0QmFzZU5vbkdyb3dhYmxlTGlzdE1peGluX1VubW9kaWZpYWJsZVNldFZpZXcmRGVsZWdhdGluZ1NldCZVbm1vZGlmaWFibGVTZXRNaXhpblVubW9kaWZpYWJsZVNldFZpZXdzZXRCYXNlVW5tb2RpZmlhYmxlU2V0TWl4aW5Vbm1vZGlmaWFibGVNYXBNaXhpbkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIE1hcF9LZXlGb3JWYWx1ZV9EZWxlZ2F0aW5nSXRlcmFibGVCYXNlRGVsZWdhdGluZ0l0ZXJhYmxlVXNlIGl0ZXJhYmxlLmNhc3Q8RT4gaW5zdGVhZC5EZWxlZ2F0aW5nTGlzdFVzZSBsaXN0LmNhc3Q8RT4gaW5zdGVhZC5fbGlzdEJhc2VEZWxlZ2F0aW5nU2V0VXNlIHNldC5jYXN0PEU+IGluc3RlYWQuX3NldEJhc2VEZWxlZ2F0aW5nUXVldWVVc2UgcXVldWUuY2FzdDxFPiBpbnN0ZWFkLl9iYXNlUXVldWVEZWxlZ2F0aW5nTWFwVXNlIG1hcC5jYXN0PEssIFY+IGluc3RlYWQuX01hcEtleVNldCZfRGVsZWdhdGluZ0l0ZXJhYmxlQmFzZSZVbm1vZGlmaWFibGVTZXRNaXhpbk1hcEtleVNldF9iYXNlTWFwTWFwS2V5U2V0IGRvZXNuJ3Qgc3VwcG9ydCBsb29rdXAoKS5NYXBWYWx1ZVNldF9rZXlGb3JWYWx1ZWtleUZvclZhbHVldG9SZW1vdmV2YWx1ZXNUb1JldGFpbmtleXNUb1JlbW92ZWRhcnQyanNfaW5mby5zcmMuZ3JhcGhub2RlQ291bnR0YXJnZXRzT2Zzb3VyY2VzT2Zjb21wdXRlVG9wb2xvZ2ljYWxTb3J0ZmluZGVyY29udGFpbnNQYXRocG9zdE9yZGVyZmluZEN5Y2xlQ29udGFpbmluZ19jb21wb25lbnRDb250YWluaW5nZG9taW5hdG9yVHJlZWlEb21pbW1lZGlhdGVEb21pbmF0b3JzRWRnZUxpc3RHcmFwaF9lZGdlc19yZXZFZGdlc3JlbW92ZUVkZ2VyZW1vdmVOb2RlcmVtb3ZlQWxsTm9kZXNfTm9kZUluZm9sb3dsaW5rX1NjY0ZpbmRlcl9hbGxDb21wb25lbnRzX3N0cm9uZ0Nvbm5lY3Rub2RlSW5mb19wb3BfcHVzaHZJbmZvd3dJbmZvX0RvbWluYXRvckZpbmRlcnBvc3RPcmRlcklkbm9kZXNJblBvc3RPcmRlcm5vZGVzSW5SZXZlcnNlZFBvc3RPcmRlcmlkb21faW50ZXJzZWN0ZmluZ2VyMWZpbmdlcjJjb21waWxlci5zcmMuaW5mZXJyZXIubm9kZV90cmFjZXJUcmFjZXJWaXNpdG9yTUFYX0FOQUxZU0lTX0NPVU5UbGlzdHNUb0FuYWx5emVzZXRzVG9BbmFseXplbWFwc1RvQW5hbHl6ZV93b3VsZEJlVG9vTWFueVVzZXJzc2VlblNvRmFyYWN0dWFsV29ya1RvbyBtYW55IHVzZXJzYW5hbHl6ZVN0b3JlZEludG9MaXN0YW5hbHl6ZVN0b3JlZEludG9TZXRhbmFseXplU3RvcmVkSW50b01hcEJhaWxpbmcgb3V0IG9uICBiZWNhdXNlOiBQYXNzZWQgdGhyb3VnaCBhd2FpdFBhc3NlZCB0aHJvdWdoIHlpZWxkVXNlZCBhcyBrZXkgaW4gTWFwU3RvcmVkIGluIGEgbGlzdCB0aGF0IGJhaWxlZCBvdXRmbG93RXNjYXBlIGZyb20gYSBsaXN0IHZpYSBbU3RvcmVkIGluIGEgc2V0IHRoYXQgYmFpbGVkIG91dEVzY2FwZSBmcm9tIGEgc2V0IHZpYSBbU3RvcmVkIGluIGEgbWFwIHRoYXQgYmFpbGVkIG91dEVzY2FwZSBmcm9tIGEgbWFwIHZpYSBbbWlnaHRBZGRUb0NvbnRhaW5lcmlzSW5kZXhTZXRBcmd1bWVudGlzSW5kZXhTZXRLZXlpc0luZGV4U2V0VmFsdWViYWlsb3V0SWZSZWFjaGVzUmVhY2hlZCBzdXBwcmVzc2VkIHBhcmFtZXRlciB3aXRob3V0IHByZWNpc2UgcmVjZWl2ZXJhZGRzVG9Db250YWluZXJTdG9yZWQgaW4gdG9vIG1hbnkgY29udGFpbmVyc2FkZHNUb01hcFZhbHVlU3RvcmVkIGluIHRvbyBtYW55IG1hcHNhZGRzVG9NYXBLZXlpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZGlzUGFyYW1ldGVyT2ZNYXBBZGRpbmdNZXRob2RQYXNzZWQgdG8gbm9TdWNoTWV0aG9kaW5mZXJyZWRUYXJnZXRUeXBlc3BhcmFtZXRlckluZm9SZXR1cm5lZCBmcm9tIGEgY2xvc3VyaXplZCBtZXRob2RSZXR1cm5lZCBmcm9tIGEgY2xvc3VyZUVzY2FwZSB0byBjb2RlIHRoYXQgaGFzIHNwZWNpYWwgYmFja2VuZCB0cmVhdG1lbnRQYXNzZWQgdG8gYSBuYXRpdmUgbWV0aG9kZG9lc05vdEVzY2FwZUxpc3RTZXRkb2VzTm90RXNjYXBlU2V0U2V0ZG9lc05vdEVzY2FwZU1hcFNldGNvbXBpbGVyLnNyYy5qc19iYWNrZW5kLmpzX2ludGVyb3BfYW5hbHlzaXNidWlsZEpzSW50ZXJvcEJvb3RzdHJhcGNhbmRpZGF0ZVBhcmFtZXRlck5hbWVzYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWkZ1bmN0aW9uLnByb3RvdHlwZS4jID0gZnVuY3Rpb24oIykgeyByZXR1cm4gdGhpcygjKSB9YnVpbGRKc0Z1bmN0aW9uVHlwZWRhcnQyanMucmVzb2x1dGlvbi5yZWdpc3RyeV9jb25zdFN5bWJvbE5hbWVzX2NvbnN0YW50TGl0ZXJhbHNfc2VlbkNsYXNzZXNyZWdpc3RlclNlZW5DbGFzc3NlZW5DbGFzc1Jlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIoCiBmZWF0dXJlczoKIG1hcC1saXRlcmFsczoKIHNldC1saXRlcmFsczoKIGxpc3QtbGl0ZXJhbHM6CiBjb25zdC1saXRlcmFsczoKIGNvbnN0LXN5bWJvbC1uYW1lczogCiBuYXRpdmUtZGF0YToKIGluc3RhbnRpYXRpb25zOkZlYXR1cmVzX3Vuc29ydGVkYWRkRWxlbWVudG1hcmtBc1Vuc29ydGVkRmVhdHVyZXMoZnJvbVRleHRlcVBvc2NvbW1hUG9zZW5kRGVsaW1pdGVyc3ZhbHVlU3RhcnRlbmREZWxpbWl0ZXJGZWF0dXJlc0RhdGFJbnRlcnByZXRlcmlzQXNFeHBlY3RlZGFjdHVhbEZlYXR1cmVzZXhwZWN0ZWREYXRhRXhwZWN0ZWQgZW1wdHkgZGF0YS5lcnJvcnNGb3VuZGV4cGVjdGVkRmVhdHVyZXN2YWxpZGF0ZWRGZWF0dXJlc2V4cGVjdE1hdGNoYWN0dWFsVmFsdWVVbmV4cGVjdGVkIGRhdGEgZm91bmQgZm9yIE5vIGRhdGEgZm91bmQgZm9yIE5vbi1lbXB0eSBkYXRhIGZvdW5kIGZvciBhY3R1YWxMaXN0ZXhwZWN0ZWRPYmplY3RleHBlY3RlZFRleHRhY3R1YWxPYmplY3RObyBtYXRjaCBmb3VuZCBmb3IgPVtFeHRyYSBkYXRhIGZvdW5kIExpc3QgZGF0YSBleHBlY3RlZCBmb3IgZXhwZWN0ZWQgJycsIGZvdW5kICdNaXNtYXRjaCBmb3IgOiBleHBlY3RlZCAnZm91bmQgJ0V4dHJhIGRhdGEgZm91bmQgJ2FjdHVhbERhdGFfZGlnZXN0U2lua19ieXRlU2lua19EaWdlc3RTaW5rZGFydDJqcy5zb3VyY2VfbWFwX2J1aWxkZXJ0YXJnZXRGaWxlVXJpbG9jYXRpb25Qcm92aWRlcm1pbmlmaWVkR2xvYmFsTmFtZXNtaW5pZmllZEluc3RhbmNlTmFtZXNhZGRNYXBwaW5ncHJpbnRTdHJpbmdMaXN0T25saW5lQ29sdW1uTWFwc291cmNlTG9jYXRpb25NYXBzb3VyY2VNYXBFbnRyeWtlcm5lbExvY2F0aW9uc291cmNlTGluZUNvbHVtbk1hcF9idWlsZHVyaU1hcHJlZ2lzdGVyTG9jYXRpb25mb3JFYWNoRWxlbWVudG1hcHBpbmdzQnVmZmVyd3JpdGVFbnRyaWVzewogICJ2ZXJzaW9uIjogMywKICAiZW5naW5lIjogIiIsCiAgImZpbGUiOiAgICJzb3VyY2VSb290IjogIiIsCiAgInNvdXJjZXMiOiByZWxhdGl2ZVNvdXJjZVVyaUxpc3QgICJuYW1lcyI6ICAgIm1hcHBpbmdzIjogIiAgInhfb3JnX2RhcnRsYW5nX2RhcnQyanMiOiB7CiAgICAibWluaWZpZWRfbmFtZXMiOiB7CiAgICAgICJnbG9iYWwiOiB3cml0ZU1pbmlmaWVkTmFtZXMgICAgICAiaW5zdGFuY2UiOiAKICAgIH0sCiAgICAiZnJhbWVzIjogd3JpdGVGcmFtZXMKICB9Cn0KcHJldmlvdXNTb3VyY2VMb2NhdGlvbnByZXZpb3VzVGFyZ2V0TGluZXRhcmdldENvbHVtbkVuY29kZXJmaXJzdEVudHJ5SW5MaW5lc291cmNlVXJpSW5kZXhFbmNvZGVyc291cmNlTGluZUVuY29kZXJzb3VyY2VDb2x1bW5FbmNvZGVyc291cmNlTmFtZUluZGV4RW5jb2RlcnRhcmdldExpbmV0YXJnZXRDb2x1bW5taW5pZmllZE5hbWVzbWluaWZpZWROYW1lb2Zmc2V0RW5jb2RlcnVyaUVuY29kZXJsaW5lRW5jb2RlcmNvbHVtbkVuY29kZXJuYW1lRW5jb2RlcmdlbmVyYXRlU291cmNlTWFwVGFnc291cmNlTWFwRmlsZU5hbWUKLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3V0cHV0U291cmNlTWFwc291cmNlTG9jYXRpb25zUHJvdmlkZXJzb3VyY2VNYXBCdWlsZGVyanMubWFwbWFwLmpzLm1hcC5EZWx0YUVuY29kZXJWTFFfQkFTRV9TSElGVFZMUV9CQVNFX01BU0tWTFFfQ09OVElOVUFUSU9OX0JJVFZMUV9DT05USU5VQVRJT05fTUFTS0JBU0U2NF9ESUdJVFNBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvZW5jb2RlVkxRc2lnbkJpdFNvdXJjZU1hcEVudHJ5TGluZUNvbHVtbk1hcF9nZXRMaXN0bGluZU1hcGZvckVhY2hMaW5lZ2V0Rmlyc3RFbGVtZW50c0luTGluZWNvbHVtbnNmb3JFYWNoQ29sdW1uSW5kZXhNYXBqc19iYWNrZW5kZGFydDJqcy5qc19lbWl0dGVyLmNvbnN0YW50X29yZGVyaW5nX0NvbnN0YW50T3JkZXJpbmdfZGFydFR5cGVPcmRlcmluZ2NvbXBhcmVWYWx1ZXNjb21wYXJlTnVsbGFibGVjb21wYXJlTGlzdHNjb21wYXJlQ2xhc3Nlc2NvbXBhcmVUeXBlZGVmc2NvbXBhcmVEYXJ0VHlwZXNhSW50YkludGFTdHJpbmdiU3RyaW5nYUZpZWxkc2JGaWVsZHNfRGFydFR5cGVLaW5kVmlzaXRvcl9EYXJ0VHlwZU9yZGVyaW5nX3Jvb3RUeXBlIHZhcmlhYmxlcyBhcmUgbm90IGV4cGVjdGVkIGluIGNvbnN0YW50czogJ19jb21wYXJlVHlwZUFyZ3VtZW50c2FBcmd1bWVudHNiQXJndW1lbnRzZGFydDJqcy5qc19lbWl0dGVyLmhlYWRlcnNIT09LU19BUElfVVNBR0VnZW5lcmF0ZWRCeSB2ZXJzaW9uOiAvLyBHZW5lcmF0ZWQgYnkgZGFydDJqc3RoZSBEYXJ0IHRvIEphdmFTY3JpcHQgY29tcGlsZXJkZWZhdWx0Q29tcGFyZUVtcHR5VW5tb2RpZmlhYmxlU2V0UnVuVGVzdEZ1bmN0aW9ucHJpbnRDb2Rlc3VjY2luY3R0ZXN0QWZ0ZXJGYWlsdXJlc3Rlc3REYXRhTWVtYmVyQW5ub3RhdGlvbnNEYXRhVHlwZV9jb21wdXRlZERhdGFGb3JFYWNoRmlsZWdsb2JhbERhdGFjb21wdXRlZERhdGFNZW1iZXJBbm5vdGF0aW9ucyhkYXRhOntnbG9iYWw6VGVzdERhdGF0ZXN0RmlsZVVyaW1lbW9yeVNvdXJjZUZpbGVzZXhwZWN0ZWRNYXBzQ29tcGlsZWREYXRhYWN0dWFsTWFwc2NvbXB1dGVBbm5vdGF0aW9uc2FjdHVhbE1hcGNvbXB1dGVEaWZmQW5ub3RhdGlvbnNBZ2FpbnN0dGhpc01hcGluY2x1ZGVNYXRjaGVzdGhpc0RhdGFnZXRPZmZzZXRGcm9tSWREYXRhSW50ZXJwcmV0ZXJTdHJpbmdEYXRhSW50ZXJwcmV0ZXJJZERhdGFfY29tcGlsZWREYXRhX2FjdHVhbE1hcHNhY3R1YWxDb2RlZGlmZkNvZGVkYXRhVmFsaWRhdG9ydW5leHBlY3RlZE1lc3NhZ2VjZmVNYXJrZXJjZmVkYXJ0MmpzTWFya2VyYW5hbHl6ZXJNYXJrZXJzaGFyZWRNYXJrZXJzdXNlQ29sb3JzY29sb3JpemVNZXNzYWdlY29sb3JpemVNYXRjaGNvbG9yaXplU2luZ2xlY29sb3JpemVBY3R1YWxjb2xvcml6ZUV4cGVjdGVkY29sb3JpemVEZWxpbWl0ZXJjb2xvcml6ZURpZmZjb2xvcml6ZUFubm90YXRpb25jb21wdXRlRXhwZWN0ZWRNYXBtYXBLZXlzZmlsZUFubm90YXRpb25zTm8gYW5ub3RhdGlvbnMgZm9yIGV4cGVjdGVkVmFsdWVzaWRWYWx1ZUVycm9yIGluIHRlc3QgJ0R1cGxpY2F0ZSBhbm5vdGF0aW9ucyBmb3IgY29tcHV0ZVRlc3REYXRhdGVzdEZpbGVzdXBwb3J0ZWRNYXJrZXJzY3JlYXRlVXJpRm9yRmlsZU5hbWVtYWluLmRhcnR0ZXN0TmFtZW1haW5UZXN0RmlsZWFkZGl0aW9uYWxGaWxlc2xpc3RTeW5jcmVjdXJzaXZlYW5ub3RhdGVkQ29kZXRlc3RNYXJrZXJhZGRpdGlvbmFsRmlsZURhdGFsaWJGaWxlTmFtZWxpYkVudGl0eWxpYkZpbGVVcmlsaWJDb2RlYW5ub3RhdGVkTGliQ29kZXdpdGhBbm5vdGF0aW9uc2NoZWNrQ29kZW1vZGVOYW1lbWFpbkZpbGVVcmljb21waWxlZERhdGFmaWx0ZXJBY3R1YWxEYXRhZmF0YWxFcnJvcnNoYXNGYWlsdXJlbmVlZGVkRGlmZnNjaGVja0FjdHVhbE1hcGV4cGVjdGVkTWFwaGFzTG9jYWxGYWlsdXJlYWN0dWFsVGV4dGFjdHVhbFZhbHVlVGV4dEVYVFJBICBEQVRBIGZvciA6CiBvYmplY3QgICA6IG9iamVjdFRleHRhY3R1YWwgICA6IERhdGEgd2FzIGV4cGVjdGVkIGZvciB0aGVzZSBpZHM6IFVORVhQRUNURUQgZGV0YWlsICA6IG9iamVjdCAgOiBleHBlY3RlZDogYWN0dWFsICA6IG1pc3NpbmdJZHNjaGVja01pc3NpbmdNSVNTSU5HIC0tYW5ub3RhdGlvbnMgZGlmZiBbXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTUlTU0lORyBpZHM6IEVycm9ycyBmb3VuZC5ydW5UZXN0c2RhdGFEaXJzaGFyZEluZGV4b25UZXN0cnVuVGVzdC12LXNzaG91bGRDb250aW51ZS1hLXBjb250aW51ZWRoYXNGYWlsdXJlc3JlbGF0aXZlRGlyRGF0YSBkaXI6IHRlc3RDb3VudC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1UZXN0OiBObyBmaWxlcyB3ZXJlIHRlc3RlZC5Bbm5vdGF0aW9uQW5ub3RhdGlvbihsaW5lTm89LGNvbHVtbk5vPSxvZmZzZXQ9LHRleHQ9QW5ub3RhdGVkQ29kZV9saW5lU3RhcnRzQHtjb2RlQnVmZmVyc3RhcnRNYXRjaG1hdGNoQXNQcmVmaXhlbmRNYXRjaGVzYWxsTWF0Y2hlc2VuZE1hdGNoX2Vuc3VyZUxpbmVTdGFydHN0b1RleHRfTEZfQ1JhdEJyYWNlU3RhcnRicmFjZUVuZGNvbW1lbnRTdGFydC9cKmNvbW1lbnRFbmRcKi9ccypzcGxpdEJ5UHJlZml4ZXNwcmVmaXhTZXRkb3RQb3Nhbm5vdGF0aW9uUHJlZml4YW5ub3RhdGlvblRleHRJZEtpbmRJZEtpbmQubWVtYmVySWRLaW5kLmNsc0lkS2luZC5saWJyYXJ5SWRLaW5kLm5vZGVJZEtpbmQuaW52b2tlSWRLaW5kLnVwZGF0ZUlkS2luZC5pdGVyYXRvcklkS2luZC5jdXJyZW50SWRLaW5kLm1vdmVOZXh0SWRLaW5kLmltcGxpY2l0QXNJZEtpbmQuc3RtdElkS2luZC5lcnJvcmltcGxpY2l0QXNzdG10SWRWYWx1ZWdsb2JhbFByZWZpeGdsb2JhbCNtZW1iZXJQcmVmaXhjbGFzc1ByZWZpeGNsYXNzOiBsaWJyYXJ5OiBpbnZva2VQcmVmaXhpbnZva2U6IHVwZGF0ZVByZWZpeHVwZGF0ZTogaXRlcmF0b3JQcmVmaXhpdGVyYXRvcjogY3VycmVudFByZWZpeGN1cnJlbnQ6IG1vdmVOZXh0UHJlZml4bW92ZU5leHQ6IGltcGxpY2l0QXNQcmVmaXhhczogc3RtdFByZWZpeHN0bXQ6IGVycm9yUHJlZml4ZXJyb3I6IGlkVG9TdHJpbmdlbGVtZW50SWRjbGFzc0lkVW5leHBlY3RlZCBpZCBraW5kOiBjb2xvblBvc0ludmFsaWQgbWVtYmVyIGlkOiAnSW52YWxpZCBjbGFzcyBpZDogJ1xzKihcblxzKikrXHMqTWVtYmVySWRtZW1iZXIgbWVtYmVyOkNsYXNzSWRjbGFzczpMaWJyYXJ5SWRsaWJyYXJ5IGxpYnJhcnk6Tm9kZUlkb2Zmc2V0IEFjdHVhbERhdGFfb2Zmc2V0b2JqZWN0IGBBY3R1YWxEYXRhKGlkPSx1cmk9LG9iamVjdD1EYXRhUmVnaXN0cnlyZWdpc3RlclZhbHVlZXhpc3RpbmdEYXRhRHVwbGljYXRlIGlkICwgb2JqZWN0PW9iamVjdD1EaWdlc3RIYXNoYmxvY2tTaXplaW5uZXJTaW5rb3V0ZXJTaW5rSG1hY19IbWFjU2lua19vdXRlclNpbmtfaW5uZXJSZXN1bHRTaW5rX2lubmVyU2lua19pc0Nsb3NlZEhNQUMgaXMgY2xvc2VkYWRkU2xpY2Vpc0xhc3RNRDVfTUQ1U2luazE3MzI1ODQxOTM0MDIzMjMzNDE3MjU2MjM4MzEwMmVuZGlhbnVwZGF0ZUhhc2gzNjE0MDkwMzYwMzkwNTQwMjcxMDMyNTA0NDE5NjY0MTE4NTQ4Mzk5MTIwMDA4MDQyNjI4MjE3MzU5NTU0MjQ5MjYxMzEzMTc3MDAzNTQxNjIzMzY1NTI4Nzk0Mjk0OTI1MjMzMjMwNDU2MzEzNDE4MDQ2MDM2ODI0MjU0NjI2MTk1Mjc5Mjk2NTAwNjEyMzY1MzUzMjk0MTI5MTcwNzg2MzIyNTQ2NTY2NDM5MjEwNjk5OTQzNTkzNDA4NjA1MzYzNDQ4ODk2MTM4ODk0Mjk0NDgzMjc1MTYzNjA2NDEwNzYwMzMzNTExNjM1MzE1MDEyODUwMjg1ODI5NDI0MzU2MzUxMjE3MzUzMjg0NzMyMzY4MzU5NTYyNDI5NDU4ODczODIyNzIzOTI4MzMxODM5MDMwNTYyNDI1OTY1Nzc0MDI3NjM5NzUyMzYxMjcyODkzMzUzNDEzOTQ2OTY2NDMyMDAyMzY2NTYzOTM2NDMwMDc0MzU3MjQ0NTMxNzM2NTQ2MDI4MDkzODczMTUxNDYxMzI5OTYyODY0NTQwOTYzMzY0NTIxMTI2ODkxNDE1Mjg3ODYxMjM5MTQyMzc1MzMyNDExNzAwNDg1NTcxMjM5OTk4MDY5MDQyOTM5MTU3NzMyMjQwMDQ0NDk3MTg3MzMxMzM1OTQyNjQzNTU1NTIyNzM0NzY4OTE2MTMwOTE1MTY0OTQxNDk0NDQyMjYzMTc0NzU2OTE3Mzk1MTQ4MTc0NW1kNV9ub2lzZV9zaGlmdEFtb3VudHNTaGExX1NoYTFTaW5rX2V4dGVuZGVkMzI4NTM3NzUyMG5ld0ExNTE4NTAwMjQ5MTg1OTc3NTM5MzI0MDA5NTk3MDgzMzk1NDY5Nzgyc2hhMVNoYTI1Nl9TaGEyNTZTaW5rMTc3OTAzMzcwMzMxNDQxMzQyNzcyNzczNDgwNzYyMTM1OTg5MzExOTI2MDA4MjI5MjQxNTQxNDU5MjI1X3JvdHIzMl9jaF9tYWpfYnNpZzBfYnNpZzFfc3NpZzBfc3NpZzF0ZW1wMTExMTYzNTI0MDgxODk5NDQ3NDQxMzA0OTMyMzQ3MTM5MjEwMDk1NzMxNTA4OTcwOTkzMjQ1MzYzNTc0ODI4NzA3NjMyMjEzNjI0MzgxMDgwMTQyNjg4MTk4NzE5MjUwNzgzODgyMTYyMDc4MjA2MjYxNDg4ODEwMzMyNDgyMjI1ODAzODM1MzkwNDAxNDAyMjIyNDc3NDEyNDkxNTAxMjIxNTU1MDgxNjkyMTk5NjA2NDk4NjI1NTQyMjA4ODIyODIxODM0MzQ5Mjk1Mjk5NjgwODMyMTAzMTM2NzEzMzM2NTcxODkxMzU4NDUyODcxMTEyOTQ3NTczNzIxMzk2MTgyMjkxMTY5NTE4MzcwMDE5ODY2NjEwNTEyMTc3MDI2MzUwMjQ1Njk1NjAzNzI3MzA0ODU5MjEyODIwMzAyNDExMzI1OTczMDgwMDMzNDU3NjQ3NzEzNTE2MDY1ODE3MzYwMDM1MjgwNDQwOTQ1NzE5MDkxMzIyODIyMjE4MTUzNzAwMjA2MzE3NDc4NzM3NzkxOTU1NTYyMjIyMjAyNDEwNDgxNTIyMjc3MzA0NTIyMzYxODUyNDI0MjQyODQzNjQ3NDI3NTY3MzQxODczMjA0MDMxNDc5MzMyOTMyNTI5OHRlbXAyc2hhMjU2RGlnZXN0U2lua0hhc2hTaW5rX2VuZGlhbl9jdXJyZW50Q2h1bmtfbWF4TWVzc2FnZUxlbmd0aEluQnl0ZXMxMTI1ODk5OTA2ODQyNjIzX2xlbmd0aEluQnl0ZXNfcGVuZGluZ0RhdGFjaHVua1NpemVJbldvcmRzSGFzaC5hZGQoKSBjYWxsZWQgYWZ0ZXIgY2xvc2UoKS5faXRlcmF0ZV9maW5hbGl6ZURhdGFfYnl0ZURpZ2VzdGJ5dGVEaWdlc3RsZW5ndGhJbkJ5dGVzYnl0ZURhdGFhc0J5dGVEYXRhc2V0VWludDMycGVuZGluZ0RhdGFCeXRlc3BlbmRpbmdEYXRhQ2h1bmtzZ2V0VWludDMyY29udGVudHNMZW5ndGhmaW5hbGl6ZWRMZW5ndGhfcm91bmRVcEhhc2hpbmcgaXMgdW5zdXBwb3J0ZWQgZm9yIG1lc3NhZ2VzIHdpdGggbW9yZSB0aGFuIDJeNTMgYml0cy5sZW5ndGhJbkJpdHNoaWdoQml0c2xvd0JpdHNtYXNrMzJiaXRzUGVyQnl0ZWJ5dGVzUGVyV29yZGFkZDMycm90bDMybW9kU2hpZnRBY2N1bXVsYXRvclNpbmtfZXZlbnRzQ2FuJ3QgYWRkIHRvIGEgY2xvc2VkIHNpbmsuQnl0ZUFjY3VtdWxhdG9yU2lua2NvbnZlcnQuaGV4aGV4RW5jb2RlcmhleERlY29kZXJIZXhDb2RlY2hleGNvbnZlcnQucGVyY2VudHBlcmNlbnRFbmNvZGVycGVyY2VudERlY29kZXJQZXJjZW50Q29kZWNTdHJpbmdBY2N1bXVsYXRvclNpbmtjb252ZXJ0LmhleC5lbmNvZGVySGV4RW5jb2Rlcl9IZXhFbmNvZGVyU2lua19jb252ZXJ0YnVmZmVySW5kZXhieXRlT3JJbnZhbGlkIGJ5dGUgX2NvZGVVbml0Rm9yRGlnaXRjb252ZXJ0LmhleC5kZWNvZGVySGV4RGVjb2RlcmlzRXZlbkludmFsaWQgaW5wdXQgbGVuZ3RoLCBtdXN0IGJlIGV2ZW4uX0hleERlY29kZXJTaW5rX2xhc3REaWdpdF9jbG9zZWJ5dGVzU3RhcnRoZXhQYWlyc2FzVXRmOFNpbmtJbnB1dCBlbmRlZCB3aXRoIGluY29tcGxldGUgZW5jb2RlZCBieXRlLl9IZXhEZWNvZGVyQnl0ZVNpbmtfZGVjb2Rlc291cmNlU3RhcnRzb3VyY2VFbmRkZXN0aW5hdGlvblN0YXJ0ZGVzdGluYXRpb25JbmRleGZpcnN0RGlnaXRzZWNvbmREaWdpdGNvbnZlcnQucGVyY2VudC5lbmNvZGVyUGVyY2VudEVuY29kZXJfUGVyY2VudEVuY29kZXJTaW5rY29udmVydC5wZXJjZW50LmRlY29kZXJQZXJjZW50RGVjb2Rlcmxhc3REaWdpdF9QZXJjZW50RGVjb2RlclNpbmtfUGVyY2VudERlY29kZXJCeXRlU2lua19sYXN0UGVyY2VudGNvZGVVbml0T3JzbGljZVN0YXJ0X2NoZWNrRm9ySW52YWxpZENvZGVVbml0Tm9uLUFTQ0lJIGNvZGUgdW5pdCB0eXBlZF9kYXRhLnR5cGVkX2J1ZmZlcnNMaXN0QmFzZV9UeXBlZERhdGFCdWZmZXJJTklUSUFMX0xFTkdUSF90eXBlZEJ1ZmZlcl9kZWZhdWx0VmFsdWVuZXdCdWZmZXJfY3JlYXRlQnVmZmVyX2NyZWF0ZUJpZ2dlckJ1ZmZlcl9hZGRBbGxfaW5zZXJ0S25vd25MZW5ndGh3cml0ZUluZGV4VG9vIGZldyBlbGVtZW50c3ZhbHVlc0xlbmd0aF9lbnN1cmVDYXBhY2l0eXJlcXVpcmVkQ2FwYWNpdHlfc2V0UmFuZ2VlbGVtZW50U2l6ZUluQnl0ZXNfSW50QnVmZmVyX0Zsb2F0QnVmZmVyVWludDhCdWZmZXJpbml0aWFsTGVuZ3RoSW50OEJ1ZmZlclVpbnQ4Q2xhbXBlZEJ1ZmZlclVpbnQxNkJ1ZmZlckludDE2QnVmZmVyVWludDMyQnVmZmVySW50MzJCdWZmZXJVaW50NjRCdWZmZXJJbnQ2NEJ1ZmZlckZsb2F0MzJCdWZmZXJGbG9hdDY0QnVmZmVySW50MzJ4NEJ1ZmZlckZsb2F0MzJ4NEJ1ZmZlcmNvbnZlcnQudXRpbHNkaWdpdEZvckNvZGVVbml0SW52YWxpZCBoZXhhZGVjaW1hbCBjb2RlIHVuaXQgZGFydC5hc3luY1ZNTGlicmFyeUhvb2tzQ2FzdFN0cmVhbUNhc3RTdHJlYW1UcmFuc2Zvcm1lckVtcHR5SXRlcmF0b3JJdGVyYWJsZUVsZW1lbnRFcnJvcnByaW50VG9ab25lcHJpbnRUb0NvbnNvbGVTaW5jZWFzeW5jX2Vycm9yLmRhcnRicm9hZGNhc3Rfc3RyZWFtX2NvbnRyb2xsZXIuZGFydGRlZmVycmVkX2xvYWQuZGFydGZ1dHVyZS5kYXJ0ZnV0dXJlX2ltcGwuZGFydHNjaGVkdWxlX21pY3JvdGFzay5kYXJ0c3RyZWFtLmRhcnRzdHJlYW1fY29udHJvbGxlci5kYXJ0c3RyZWFtX2ltcGwuZGFydHN0cmVhbV9waXBlLmRhcnRzdHJlYW1fdHJhbnNmb3JtZXJzLmRhcnR0aW1lci5kYXJ0em9uZS5kYXJ0X1NjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZV9UaW1lckZhY3RvcnlDbG9zdXJlcmVwZWF0aW5nX0Z1dHVyZU9uVmFsdWVfRnV0dXJlRXJyb3JUZXN0X0Z1dHVyZUFjdGlvbl9Bc3luY0NhbGxiYWNrX1RpbWVyQ2FsbGJhY2tDb250cm9sbGVyQ2FsbGJhY2tDb250cm9sbGVyQ2FuY2VsQ2FsbGJhY2tfTm90aWZpY2F0aW9uSGFuZGxlcl9FdmVudEdlbmVyYXRvcl9EYXRhSGFuZGxlcl9Eb25lSGFuZGxlcl9Ccm9hZGNhc3RDYWxsYmFja19FcnJvckNhbGxiYWNrX1ByZWRpY2F0ZV9UcmFuc2Zvcm1hdGlvbl9FcnJvclRlc3RfRXF1YWxpdHlfU2lua01hcHBlcl9UcmFuc2Zvcm1EYXRhSGFuZGxlcl9UcmFuc2Zvcm1FcnJvckhhbmRsZXJfVHJhbnNmb3JtRG9uZUhhbmRsZXJfU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXJjYW5jZWxPbkVycm9yWm9uZUNhbGxiYWNrWm9uZVVuYXJ5Q2FsbGJhY2tab25lQmluYXJ5Q2FsbGJhY2tIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlclJ1bkhhbmRsZXJSdW5VbmFyeUhhbmRsZXJSdW5CaW5hcnlIYW5kbGVyUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXJSZWdpc3RlclVuYXJ5Q2FsbGJhY2tIYW5kbGVyUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXJFcnJvckNhbGxiYWNrSGFuZGxlclNjaGVkdWxlTWljcm90YXNrSGFuZGxlckNyZWF0ZVRpbWVySGFuZGxlckNyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyUHJpbnRIYW5kbGVyRm9ya0hhbmRsZXJzcGVjaWZpY2F0aW9uX2Z1dHVyZWlzU3luY2NvbXBsZXRlX2FzeW5jQ29tcGxldGVfY29tcGxldGVXaXRoVmFsdWVfY29tcGxldGVFcnJvcl9hc3luY0NvbXBsZXRlRXJyb3Jpc0NvbXBsZXRlZF9tYXlDb21wbGV0ZXZtOmVudHJ5LXBvaW50aXNBZGRpbmdvbkxpc3RlblJlY2VpdmVkaXNTY2hlZHVsZWRpc1N1c3BlbmRlZEF0WWllbGRjYW5jZWxsYXRpb25GdXR1cmVvbkxpc3Rlbm9uUmVzdW1lb25DYW5jZWxfZ2VuZXJhdG9ycnVuQm9keXNjaGVkdWxlR2VuZXJhdG9yaXNQYXVzZWR5aWVsZCBiZWZvcmUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvdW5leHBlY3RlZCB5aWVsZGhhc0xpc3RlbmVyd2hlbkRvbmVBZGRpbmdfU2NoZWR1bGVJbW1lZGlhdGVfVGltZXJGYWN0b3J5X2ZhY3RvcnlfQnJvYWRjYXN0U3RyZWFtaXNCcm9hZGNhc3RfQnJvYWRjYXN0U3Vic2NyaXB0aW9uX1NUQVRFX0VWRU5UX0lEX1NUQVRFX0ZJUklOR19TVEFURV9SRU1PVkVfQUZURVJfRklSSU5HX2V2ZW50U3RhdGVfbmV4dF9wcmV2aW91c29uRGF0YV9leHBlY3RzRXZlbnRldmVudElkX3RvZ2dsZUV2ZW50SWRfaXNGaXJpbmdfc2V0UmVtb3ZlQWZ0ZXJGaXJpbmdfcmVtb3ZlQWZ0ZXJGaXJpbmdfb25QYXVzZV9vblJlc3VtZV9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyX1NUQVRFX0lOSVRJQUxfU1RBVEVfQ0xPU0VEX1NUQVRFX0FERFNUUkVBTV9maXJzdFN1YnNjcmlwdGlvbl9sYXN0U3Vic2NyaXB0aW9uX2FkZFN0cmVhbVN0YXRlX2RvbmVGdXR1cmVvblBhdXNlQnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCBwYXVzZSBjYWxsYmFja3NvblBhdXNlSGFuZGxlcm9uUmVzdW1lSGFuZGxlcl9pc0VtcHR5X2hhc09uZUxpc3RlbmVyX2lzQWRkaW5nU3RyZWFtX21heUFkZEV2ZW50X2Vuc3VyZURvbmVGdXR1cmVfYWRkTGlzdGVuZXJvbGRMYXN0X3JlbW92ZUxpc3RlbmVyX2NvbnRyb2xsZXJfc3Vic2NyaWJlX3JlY29yZENhbmNlbF9jYWxsT25DYW5jZWxfcmVjb3JkUGF1c2VfcmVjb3JkUmVzdW1lX2FkZEV2ZW50RXJyb3JDYW5ub3QgYWRkIG5ldyBldmVudHMgYWZ0ZXIgY2FsbGluZyBjbG9zZUNhbm5vdCBhZGQgbmV3IGV2ZW50cyB3aGlsZSBkb2luZyBhbiBhZGRTdHJlYW1fc2VuZERhdGFlcnJvckNhbGxiYWNrX3NlbmRFcnJvcmRvbmVGdXR1cmVfc2VuZERvbmVhZGRTdHJlYW1GdXR1cmVfYWRkRXJyb3JhZGRTdGF0ZV9mb3JFYWNoTGlzdGVuZXJDYW5ub3QgZmlyZSBuZXcgZXZlbnQuIENvbnRyb2xsZXIgaXMgYWxyZWFkeSBmaXJpbmcgYW4gZXZlbnRfU3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXJfQXN5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyX2FkZFBlbmRpbmdfQXNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyX2hhc1BlbmRpbmdfYWRkUGVuZGluZ0V2ZW50aGFuZGxlTmV4dERlZmVycmVkTGlicmFyeURhcnQgc2RrIHYuIDEuOERlZmVycmVkTG9hZEV4Y2VwdGlvbkRlZmVycmVkTG9hZEV4Y2VwdGlvbjogJ0Z1dHVyZU9yIGNhbid0IGJlIGluc3RhbnRpYXRlZF9udWxsRnV0dXJlX2ZhbHNlRnV0dXJlY29tcHV0YXRpb25fY29tcGxldGVtaWNyb3Rhc2tkZWxheWVkd2FpdGZ1dHVyZXNlYWdlckVycm9yaGFuZGxlRXJyb3J0aGVFcnJvcnRoZVN0YWNrVHJhY2VvblZhbHVlX2tUcnVlZG9XaGlsZWRvbmVTaWduYWxuZXh0SXRlcmF0aW9uYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVka2VlcEdvaW5nYXNTdHJlYW10aW1lb3V0dGltZUxpbWl0b25UaW1lb3V0VGltZW91dEV4Y2VwdGlvblRpbWVvdXRFeGNlcHRpb24gYWZ0ZXIgX0NvbXBsZXRlckZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZF9Bc3luY0NvbXBsZXRlcl9TeW5jQ29tcGxldGVyX0Z1dHVyZUxpc3RlbmVybWFza0Vycm9ybWFza1Rlc3RFcnJvcm1hc2tXaGVuY29tcGxldGVzdGF0ZUNoYWluc3RhdGVUaGVuc3RhdGVUaGVuT25lcnJvcnN0YXRlQ2F0Y2hlcnJvcnN0YXRlQ2F0Y2hlcnJvclRlc3RzdGF0ZVdoZW5jb21wbGV0ZW1hc2tUeXBlc3RhdGVJc0F3YWl0X25leHRMaXN0ZW5lcnRoZW5Bd2FpdF96b25laGFuZGxlc1ZhbHVlaGFuZGxlc0Vycm9yaGFzRXJyb3JUZXN0aGFuZGxlc0NvbXBsZXRlaXNBd2FpdF9vblZhbHVlX29uRXJyb3JfZXJyb3JUZXN0X3doZW5Db21wbGV0ZUFjdGlvbmhhc0Vycm9yQ2FsbGJhY2toYW5kbGVWYWx1ZXNvdXJjZVJlc3VsdG1hdGNoZXNFcnJvclRlc3Rhc3luY0Vycm9yaGFuZGxlV2hlbkNvbXBsZXRlX2F3YWl0ZXJfc3RhdGVJbmNvbXBsZXRlX3N0YXRlUGVuZGluZ0NvbXBsZXRlX3N0YXRlQ2hhaW5lZF9zdGF0ZVZhbHVlX3N0YXRlRXJyb3JfcmVzdWx0T3JMaXN0ZW5lcnNpbW1lZGlhdGV6b25lVmFsdWVfc2V0VmFsdWVpbW1lZGlhdGVFcnJvcl9pc1BlbmRpbmdDb21wbGV0ZV9tYXlBZGRMaXN0ZW5lcl9pc0NoYWluZWRfaXNDb21wbGV0ZV9oYXNFcnJvcl9jb250aW51YXRpb25GdW5jdGlvbnNfc2V0Q2hhaW5lZGN1cnJlbnRab25lcmVnaXN0ZXJVbmFyeUNhbGxiYWNrX3RoZW5Bd2FpdHJlZ2lzdGVyQ2FsbGJhY2tfc2V0UGVuZGluZ0NvbXBsZXRlX2NsZWFyUGVuZGluZ0NvbXBsZXRlX2Vycm9yX2NoYWluU291cmNlX3NldEVycm9yT2JqZWN0X3NldEVycm9yX2Nsb25lUmVzdWx0c2NoZWR1bGVNaWNyb3Rhc2tfcHJlcGVuZExpc3RlbmVyc2V4aXN0aW5nTGlzdGVuZXJzX3JldmVyc2VMaXN0ZW5lcnNfcmVtb3ZlTGlzdGVuZXJzX2NoYWluRm9yZWlnbkZ1dHVyZV9jaGFpbkNvcmVGdXR1cmVfY2hhaW5GdXR1cmVfcHJvcGFnYXRlVG9MaXN0ZW5lcnNoYXNFcnJvcmhhbmRsZVVuY2F1Z2h0RXJyb3JsaXN0ZW5lckhhc0Vycm9ybGlzdGVuZXJWYWx1ZU9yRXJyb3JpblNhbWVFcnJvclpvbmVvbGRab25laGFuZGxlV2hlbkNvbXBsZXRlQ2FsbGJhY2tjb21wbGV0ZVJlc3VsdG9yaWdpbmFsU291cmNlaGFuZGxlVmFsdWVDYWxsYmFja2NoYWluU291cmNldGltZXJGdXR1cmUgbm90IGNvbXBsZXRlZF9Bc3luY0NhbGxiYWNrRW50cnlfQXN5bmNSdW5fc2NoZWR1bGVJbW1lZGlhdGVNaWNyb3Rhc2tzIGFyZSBub3Qgc3VwcG9ydGVkMi41X2Nsb3NlVW5jaGVja2VkZnJvbUZ1dHVyZWZyb21GdXR1cmVzZnJvbUl0ZXJhYmxlcGVyaW9kaWNjb21wdXRhdGlvbkNvdW50d2F0Y2hzZW5kRXZlbnRzdGFydFBlcmlvZGljVGltZXJldmVudFRyYW5zZm9ybWVkbWFwU2lua2Nhc3RGcm9tYXNCcm9hZGNhc3RTdHJlYW1hc3luY01hcGFzeW5jRXhwYW5kbmV3U3RyZWFtcGlwZXN0cmVhbUNvbnN1bWVyc3RyZWFtVHJhbnNmb3JtZXJzZWVuRmlyc3RuZWVkbGVkcmFpbmZ1dHVyZVZhbHVlYXNGdXR1cmVkaXN0aW5jdGZvdW5kUmVzdWx0ZWxlbWVudEluZGV4Y3JlYXRlVGltZXJObyBzdHJlYW0gZXZlbnRyZWdpc3RlcmVkT25UaW1lb3V0cnVuVW5hcnlHdWFyZGVkU3RyZWFtU3Vic2NyaXB0aW9uaGFuZGxlRGF0YWhhbmRsZURvbmVyZXN1bWVTaWduYWxTdHJlYW1WaWV3X3N0cmVhbVN0cmVhbUNvbnN1bWVyU3RyZWFtU2lua1N0cmVhbVRyYW5zZm9ybWVyI3R5cGVBcmcxZnJvbUhhbmRsZXJzZnJvbUJpbmQyLjFTU1NUVFNUVFJTUlRTdHJlYW1UcmFuc2Zvcm1lckJhc2VfQ29udHJvbGxlckV2ZW50U2lua1dyYXBwZXJTdHJlYW1Db250cm9sbGVyYnJvYWRjYXN0b25MaXN0ZW5IYW5kbGVyb25DYW5jZWxIYW5kbGVyU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGVfU3RyZWFtQ29udHJvbGxlckJhc2VfU3RyZWFtQ29udHJvbGxlcl9TVEFURV9TVUJTQ1JJQkVEX1NUQVRFX0NBTkNFTEVEX1NUQVRFX1NVQlNDUklQVElPTl9NQVNLX3ZhckRhdGFfaXNDYW5jZWxlZF9pc0luaXRpYWxTdGF0ZV9pc0lucHV0UGF1c2VkX3BlbmRpbmdFdmVudHN2YXJEYXRhX2Vuc3VyZVBlbmRpbmdFdmVudHNfYmFkRXZlbnRTdGF0ZUNhbm5vdCBhZGQgZXZlbnQgYWZ0ZXIgY2xvc2luZ0Nhbm5vdCBhZGQgZXZlbnQgd2hpbGUgYWRkaW5nIGEgc3RyZWFtU3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbGlzdGVuZWQgdG8ucGVuZGluZ0V2ZW50c19zZXRQZW5kaW5nRXZlbnRzX2d1YXJkQ2FsbGJhY2tfU3luY1N0cmVhbUNvbnRyb2xsZXJEaXNwYXRjaF9Bc3luY1N0cmVhbUNvbnRyb2xsZXJEaXNwYXRjaF9Bc3luY1N0cmVhbUNvbnRyb2xsZXJfU3luY1N0cmVhbUNvbnRyb2xsZXJfY3JlYXRlU3Vic2NyaXB0aW9uX0NvbnRyb2xsZXJTdWJzY3JpcHRpb25fb25DYW5jZWxfU3RyZWFtU2lua1dyYXBwZXJfQWRkU3RyZWFtU3RhdGVhZGRTdWJzY3JpcHRpb25tYWtlRXJyb3JIYW5kbGVyX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZV9FdmVudFNpbmtfRXZlbnREaXNwYXRjaF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25fU1RBVEVfQ0FOQ0VMX09OX0VSUk9SX1NUQVRFX0lOUFVUX1BBVVNFRF9TVEFURV9XQUlUX0ZPUl9DQU5DRUxfU1RBVEVfSU5fQ0FMTEJBQ0tfU1RBVEVfSEFTX1BFTkRJTkdfU1RBVEVfUEFVU0VfQ09VTlRfb25EYXRhX29uRG9uZV9jYW5jZWxGdXR1cmVzY2hlZHVsZXJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2toYW5kbGVFcnJvciBjYWxsYmFjayBtdXN0IHRha2UgZWl0aGVyIGFuIE9iamVjdCAodGhlIGVycm9yKSwgb3IgYm90aCBhbiBPYmplY3QgKHRoZSBlcnJvcikgYW5kIGEgU3RhY2tUcmFjZS53YXNQYXVzZWRfaXNQYXVzZWR3YXNJbnB1dFBhdXNlZGNhbmNlbFNjaGVkdWxlX2luQ2FsbGJhY2tfZGVjcmVtZW50UGF1c2VDb3VudF9tYXlSZXN1bWVJbnB1dF9jYW5jZWxjYW5jZWxGdXR1cmVfd2FpdHNGb3JDYW5jZWxfY2FuRmlyZV9jYW5jZWxPbkVycm9ycGVuZGluZ19jaGVja1N0YXRlc2VuZEVycm9ycnVuQmluYXJ5R3VhcmRlZHNlbmREb25lcnVuR3VhcmRlZGlzSW5wdXRQYXVzZWRfU3RyZWFtSW1wbF9vbkxpc3Rlbl9HZW5lcmF0ZWRTdHJlYW1JbXBsX2lzVXNlZF9JdGVyYWJsZVBlbmRpbmdFdmVudHNfaXRlcmF0b3JkaXNwYXRjaE5vIGV2ZW50cyBwZW5kaW5nLl9EZWxheWVkRXZlbnRwZXJmb3JtX0RlbGF5ZWREYXRhX0RlbGF5ZWRFcnJvcl9EZWxheWVkRG9uZU5vIGV2ZW50cyBhZnRlciBhIGRvbmUuX1BlbmRpbmdFdmVudHNfU1RBVEVfVU5TQ0hFRFVMRURfU1RBVEVfU0NIRURVTEVEX2V2ZW50U2NoZWR1bGVkX1N0cmVhbUltcGxFdmVudHNmaXJzdFBlbmRpbmdFdmVudGxhc3RQZW5kaW5nRXZlbnRfRG9uZVN0cmVhbVN1YnNjcmlwdGlvbl9ET05FX1NFTlRfU0NIRURVTEVEX1BBVVNFRF9zY2hlZHVsZV9pc1NlbnRfaXNTY2hlZHVsZWRfQXNCcm9hZGNhc3RTdHJlYW1fb25MaXN0ZW5IYW5kbGVyX29uQ2FuY2VsSGFuZGxlcnNodXRkb3duX2NhbmNlbFN1YnNjcmlwdGlvbl9wYXVzZVN1YnNjcmlwdGlvbl9yZXN1bWVTdWJzY3JpcHRpb25faXNTdWJzY3JpcHRpb25QYXVzZWRfQnJvYWRjYXN0U3Vic2NyaXB0aW9uV3JhcHBlckNhbm5vdCBjaGFuZ2UgaGFuZGxlcnMgb2YgYXNCcm9hZGNhc3RTdHJlYW0gc291cmNlIHN1YnNjcmlwdGlvbi5fc3RhdGVEYXRhQWxyZWFkeSB3YWl0aW5nIGZvciBuZXh0Ll9pbml0aWFsaXplT3JEb25lc3RhdGVEYXRhbW92ZU5leHRGdXR1cmVfRW1wdHlTdHJlYW1fRm9yd2FyZGluZ1N0cmVhbV9oYW5kbGVEYXRhX2hhbmRsZUVycm9yX2hhbmRsZURvbmVfRm9yd2FyZGluZ1N0cmVhbVN1YnNjcmlwdGlvbl9XaGVyZVN0cmVhbV90ZXN0aW5wdXRFdmVudF9NYXBTdHJlYW1fdHJhbnNmb3Jtb3V0cHV0RXZlbnRfRXhwYW5kU3RyZWFtX2V4cGFuZF9IYW5kbGVFcnJvclN0cmVhbV9UYWtlU3RyZWFtX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uX3NoYXJlZFN0YXRlX2ZsYWdfVGFrZVdoaWxlU3RyZWFtX1NraXBTdHJlYW1fU2tpcFdoaWxlU3RyZWFtaGFzRmFpbGVkX0Rpc3RpbmN0U3RyZWFtX1NFTlRJTkVMcHJldmlvdXNFdmVudGlzRXF1YWxfRXZlbnRTaW5rV3JhcHBlcl9TaW5rVHJhbnNmb3JtZXJTdHJlYW1TdWJzY3JpcHRpb25fdHJhbnNmb3JtZXJTaW5rbWFwcGVyZXZlbnRTaW5rX2lzU3Vic2NyaWJlZFN0cmVhbSBpcyBhbHJlYWR5IGNsb3NlZF9TdHJlYW1TaW5rVHJhbnNmb3JtZXJfc2lua01hcHBlcl9Cb3VuZFNpbmtTdHJlYW1fSGFuZGxlckV2ZW50U2lua1RoZSBwcm92aWRlZCBzaW5rIG11c3Qgbm90IGJlIG51bGwuU2luayBpcyBjbG9zZWRfU3RyZWFtSGFuZGxlclRyYW5zZm9ybWVyb3V0cHV0U2lua19TdHJlYW1CaW5kVHJhbnNmb3JtZXJfU3RyZWFtU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXJfQm91bmRTdWJzY3JpcHRpb25TdHJlYW1UaW1lcmJpbmRDYWxsYmFja0d1YXJkZWRjcmVhdGVQZXJpb2RpY1RpbWVyYm91bmRDYWxsYmFja3RpY2tfY3JlYXRlVGltZXJUaW1lciBpbnRlcmZhY2Ugbm90IHN1cHBvcnRlZC5fY3JlYXRlUGVyaW9kaWNUaW1lckFzeW5jRXJyb3Jfc3RhY2tUcmFjZV9zdGFja1RyYWNlPV9ab25lRnVuY3Rpb25mb3JrX1pvbmVTcGVjaWZpY2F0aW9uZXJyb3Jab25lb3RoZXJab25lYXJndW1lbnQxYXJndW1lbnQyYmluZENhbGxiYWNrYmluZFVuYXJ5Q2FsbGJhY2tiaW5kQmluYXJ5Q2FsbGJhY2tiaW5kQmluYXJ5Q2FsbGJhY2tHdWFyZGVkX2VudGVyX2xlYXZlX1pvbmVEZWxlZ2F0ZV9kZWxlZ2F0aW9uVGFyZ2V0aW1wbGVtZW50YXRpb25faGFuZGxlVW5jYXVnaHRFcnJvcmltcGxab25lX3JlZ2lzdGVyQ2FsbGJhY2tfcmVnaXN0ZXJVbmFyeUNhbGxiYWNrX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tfZXJyb3JDYWxsYmFja19zY2hlZHVsZU1pY3JvdGFza19wcmludF9mb3JrX1pvbmVfQ3VzdG9tWm9uZV9kZWxlZ2F0ZUNhY2hlcmVnaXN0ZXJlZHBhcmVudERlbGVnYXRlaW1wbGVtZW50YXRpb25ab25lX1Jvb3Rab25lX3Jvb3RNYXBfcm9vdERlbGVnYXRlX2xvYWRlZExpYnJhcmllc19uZXh0Q2FsbGJhY2tfbGFzdENhbGxiYWNrX2xhc3RQcmlvcml0eUNhbGxiYWNrX2lzSW5DYWxsYmFja0xvb3Bfcm9vdFpvbmVfZmF0YWxEYXJ0QXN5bmNfZmF0YWx0aGVuQ2FsbGJhY2thd2FpdGVyU3RhY2tUcmFjZV9hc3luY1N0YWNrVHJhY2VIZWxwZXJhc3luY19vcF9jbGVhckFzeW5jVGhyZWFkU3RhY2tUcmFjZVN0YWNrVHJhY2VfY2xlYXJBc3luY1RocmVhZFN0YWNrVHJhY2Vfc2V0QXN5bmNUaHJlYWRTdGFja1RyYWNlU3RhY2tUcmFjZV9zZXRBc3luY1RocmVhZFN0YWNrVHJhY2VfbW92ZU5leHREZWJ1Z2dlclN0ZXBDaGVja0FzeW5jU3Rhck1vdmVOZXh0X2RlYnVnZ2VyU3RlcENoZWNrX3NldFNjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZV9lbnN1cmVTY2hlZHVsZUltbWVkaWF0ZV9pbnZva2VFcnJvckhhbmRsZXJ1bmFyeUVycm9ySGFuZGxlcl9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrX2FzeW5jQ29tcGxldGVXaXRoRXJyb3JDYWxsYmFja19ub25OdWxsRXJyb3JfcmVnaXN0ZXJFcnJvckhhbmRsZXJFcnJvciBoYW5kbGVyIG11c3QgYWNjZXB0IG9uZSBPYmplY3Qgb3Igb25lIE9iamVjdCBhbmQgYSBTdGFja1RyYWNlIGFzIGFyZ3VtZW50cywgYW5kIHJldHVybiBhIGEgdmFsaWQgcmVzdWx0X21pY3JvdGFza0xvb3Bfc3RhcnRNaWNyb3Rhc2tMb29wX3NjaGVkdWxlQXN5bmNDYWxsYmFja25ld0VudHJ5X3NjaGVkdWxlUHJpb3JpdHlBc3luY0NhbGxiYWNrX3J1bkd1YXJkZWRub3RpZmljYXRpb25IYW5kbGVyX251bGxEYXRhSGFuZGxlcl9udWxsRXJyb3JIYW5kbGVyX251bGxEb25lSGFuZGxlcl9ydW5Vc2VyQ29kZW9uU3VjY2Vzc19jYW5jZWxBbmRFcnJvcl9jYW5jZWxBbmRFcnJvcldpdGhSZXBsYWNlbWVudF9jYW5jZWxBbmRFcnJvckNsb3N1cmVfY2FuY2VsQW5kVmFsdWVfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnRfcGFyZW50RGVsZWdhdGVfcm9vdEhhbmRsZVVuY2F1Z2h0RXJyb3JfcmV0aHJvd0FzeW5jX3JldGhyb3dfcm9vdFJ1bl9yb290UnVuVW5hcnlfcm9vdFJ1bkJpbmFyeV9yb290UmVnaXN0ZXJDYWxsYmFja19yb290UmVnaXN0ZXJVbmFyeUNhbGxiYWNrX3Jvb3RSZWdpc3RlckJpbmFyeUNhbGxiYWNrX3Jvb3RFcnJvckNhbGxiYWNrX3Jvb3RTY2hlZHVsZU1pY3JvdGFza2hhc0Vycm9ySGFuZGxlcl9yb290Q3JlYXRlVGltZXJfcm9vdENyZWF0ZVBlcmlvZGljVGltZXJfcm9vdFByaW50X3ByaW50VG9ab25lX3Jvb3RGb3JrWm9uZVNwZWNpZmljYXRpb25zIG11c3QgYmUgaW5zdGFudGlhdGVkIHdpdGggdGhlIHByb3ZpZGVkIGNvbnN0cnVjdG9yLnZhbHVlTWFwdW5hcnlPbkVycm9yYmluYXJ5T25FcnJvcm9uRXJyb3IgY2FsbGJhY2sgbXVzdCB0YWtlIGVpdGhlciBhbiBPYmplY3QgX3J1blpvbmVkZGFydC5jb2xsZWN0aW9uY29sbGVjdGlvbnMuZGFydGhhc2hfbWFwLmRhcnRoYXNoX3NldC5kYXJ0aXRlcmFibGUuZGFydGl0ZXJhdG9yLmRhcnRsaW5rZWRfaGFzaF9tYXAuZGFydGxpbmtlZF9oYXNoX3NldC5kYXJ0bGlua2VkX2xpc3QuZGFydGxpc3QuZGFydG1hcHMuZGFydHF1ZXVlLmRhcnRzZXQuZGFydHNwbGF5X3RyZWUuZGFydF9IYXNoZXJfSGFzaE1hcF9lbGVtZW50Q291bnRfYnVja2V0c19tb2RpZmljYXRpb25Db3VudGJ1Y2tldHNfYWRkRW50cnlzdGFtcF9yZW1vdmVFbnRyeXByZXZpb3VzSW5CdWNrZXRidWNrZXRJbmRleG5ld0VsZW1lbnRzX3Jlc2l6ZW9sZEJ1Y2tldHNuZXdCdWNrZXRzX25ld0tleVNldF9DdXN0b21IYXNoTWFwX3ZhbGlkS2V5dmFsaWRLZXlfSWRlbnRpdHlIYXNoTWFwX0hhc2hNYXBFbnRyeV9IYXNoTWFwSXRlcmFibGVfSGFzaE1hcEtleUl0ZXJhYmxlX0hhc2hNYXBWYWx1ZUl0ZXJhYmxlX0hhc2hNYXBJdGVyYXRvcl9zdGFtcF9lbnRyeV9IYXNoTWFwS2V5SXRlcmF0b3JfSGFzaE1hcFZhbHVlSXRlcmF0b3JfSGFzaFNldF9uZXdFbXB0eV9yZW1vdmVfZmlsdGVyV2hlcmVyZW1vdmVNYXRjaGluZ21vZGlmaWNhdGlvbkNvdW50dGVzdFJlc3VsdF9uZXdTaW1pbGFyU2V0X0lkZW50aXR5SGFzaFNldF9DdXN0b21IYXNoU2V0X2VxdWFsaXR5X0hhc2hTZXRFbnRyeV9IYXNoU2V0SXRlcmF0b3JfSGFzaEZpZWxkQmFzZV9oYXNoTWFza191c2VkRGF0YV9kZWxldGVkS2V5c2RhdGFTaXplX0hhc2hWTUJhc2V2bTpleGFjdC1yZXN1bHQtdHlwZWRhcnQ6dHlwZWRfZGF0YSNfVWludDMyTGlzdExpbmtlZEhhc2hNYXBfZ2V0SW5kZXhMaW5rZWRIYXNoTWFwX3NldEluZGV4ZGFydDpjb3JlI19TbWlMaW5rZWRIYXNoTWFwX2dldEhhc2hNYXNrTGlua2VkSGFzaE1hcF9zZXRIYXNoTWFza2RhcnQ6Y29yZSNfTGlzdExpbmtlZEhhc2hNYXBfZ2V0RGF0YUxpbmtlZEhhc2hNYXBfc2V0RGF0YUxpbmtlZEhhc2hNYXBfZ2V0VXNlZERhdGFMaW5rZWRIYXNoTWFwX3NldFVzZWREYXRhTGlua2VkSGFzaE1hcF9nZXREZWxldGVkS2V5c0xpbmtlZEhhc2hNYXBfc2V0RGVsZXRlZEtleXNfSGFzaEJhc2VfSU5JVElBTF9JTkRFWF9CSVRTX0lOSVRJQUxfSU5ERVhfU0laRV9VTlVTRURfUEFJUl9ERUxFVEVEX1BBSVJfaW5kZXhTaXplVG9IYXNoTWFza2luZGV4U2l6ZWluZGV4Qml0c19oYXNoUGF0dGVybmZ1bGxIYXNoaGFzaE1hc2ttYXNrZWRIYXNoX2ZpcnN0UHJvYmVzaXplTWFza19uZXh0UHJvYmVfaXNEZWxldGVka2V5T3JWYWx1ZV9zZXREZWxldGVkQXRfY2hlY2tTdW1faXNNb2RpZmllZFNpbmNlb2xkRGF0YW9sZENoZWNrU3VtX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGVfSWRlbnRpY2FsQW5kSWRlbnRpdHlIYXNoQ29kZV9fSW50ZXJuYWxMaW5rZWRIYXNoTWFwJl9IYXNoVk1CYXNlJk1hcE1peGluS2V5IG5vdCBpbiBtYXAubmV3RW50cmllc19fSW50ZXJuYWxMaW5rZWRIYXNoTWFwJl9IYXNoVk1CYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW5fcmVoYXNoX2luaXRvbGRVc2VkX3JlZ2VuZXJhdGVJbmRleHRtcFVzZWRfaW5zZXJ0aGFzaFBhdHRlcm5fZmluZFZhbHVlT3JJbnNlcnRQb2ludG1heEVudHJpZXNmaXJzdERlbGV0ZWRfZ2V0VmFsdWVPckRhdGFraXZpX19JbnRlcm5hbExpbmtlZEhhc2hNYXAmX0hhc2hWTUJhc2UmTWFwTWl4aW4mX0xpbmtlZEhhc2hNYXBNaXhpbiZfSGFzaEJhc2VfX0ludGVybmFsTGlua2VkSGFzaE1hcCZfSGFzaFZNQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluJl9IYXNoQmFzZSZfT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZV9JbnRlcm5hbExpbmtlZEhhc2hNYXBfTGlua2VkSGFzaE1hcE1peGluX19Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluX19Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW5fX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXAmX0hhc2hGaWVsZEJhc2UmTWFwTWl4aW4mX0xpbmtlZEhhc2hNYXBNaXhpbiZfSGFzaEJhc2VfX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXAmX0hhc2hGaWVsZEJhc2UmTWFwTWl4aW4mX0xpbmtlZEhhc2hNYXBNaXhpbiZfSGFzaEJhc2UmX0lkZW50aWNhbEFuZElkZW50aXR5SGFzaENvZGVfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcF9fQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hNYXAmX0hhc2hGaWVsZEJhc2UmTWFwTWl4aW5fX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW5fX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW4mX0hhc2hCYXNlX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoTWFwX0NvbXBhY3RJdGVyYWJsZV9sZW5fc3RlcF9Db21wYWN0SXRlcmF0b3JfX0NvbXBhY3RMaW5rZWRIYXNoU2V0Jl9IYXNoRmllbGRCYXNlJl9IYXNoQmFzZV9fQ29tcGFjdExpbmtlZEhhc2hTZXQmX0hhc2hGaWVsZEJhc2UmX0hhc2hCYXNlJl9PcGVyYXRvckVxdWFsc0FuZEhhc2hDb2RlX19Db21wYWN0TGlua2VkSGFzaFNldCZfSGFzaEZpZWxkQmFzZSZfSGFzaEJhc2UmX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGUmU2V0TWl4aW5pdGZvdW5kTWF0Y2hpbmdfQ29tcGFjdExpbmtlZEhhc2hTZXRfZ2V0S2V5T3JEYXRhX19Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0Jl9Db21wYWN0TGlua2VkSGFzaFNldCZfSWRlbnRpY2FsQW5kSWRlbnRpdHlIYXNoQ29kZV9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0X0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoU2V0ZnJvbUl0ZXJhYmxlc2Zyb21FbnRyaWVzSGFzaFNldGl0ZXJhYmxlVG9TaG9ydFN0cmluZ2xlZnREZWxpbWl0ZXJyaWdodERlbGltaXRlciguLi4paXRlcmFibGVUb0Z1bGxTdHJpbmdIYXNOZXh0SXRlcmF0b3JfSEFTX05FWFRfQU5EX05FWFRfSU5fQ1VSUkVOVF9OT19ORVhUX05PVF9NT1ZFRF9ZRVRfbW92ZU5vIG1vcmUgZWxlbWVudHNMaW5rZWRMaXN0X2ZpcnN0X2luc2VydEJlZm9yZXVwZGF0ZUZpcnN0X3VubGlua1RvbyBtYW55IGVsZW1lbnRzTGlua2VkTGlzdEVudHJ5IGlzIGFscmVhZHkgaW4gYSBMaW5rZWRMaXN0X0xpbmtlZExpc3RJdGVyYXRvcl92aXNpdGVkRmlyc3RMaW5rZWRMaXN0RW50cnl1bmxpbmtpbnNlcnRBZnRlcmluc2VydEJlZm9yZV9MaXN0QmFzZSZPYmplY3QmTGlzdE1peGlubGlzdFRvU3RyaW5nbWFwVG9TdHJpbmdfaWRfZmlsbE1hcFdpdGhNYXBwZWRJdGVyYWJsZV9maWxsTWFwV2l0aEl0ZXJhYmxlc2tleUl0ZXJhdG9ydmFsdWVJdGVyYXRvcmhhc05leHRLZXloYXNOZXh0VmFsdWVJdGVyYWJsZXMgZG8gbm90IGhhdmUgc2FtZSBsZW5ndGguTWFwTWl4aW5Vbm1vZGlmaWFibGVNYXBCYXNlQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwX01hcEJhc2VWYWx1ZUl0ZXJhYmxlX01hcEJhc2VWYWx1ZUl0ZXJhdG9yX1VubW9kaWZpYWJsZU1hcE1peGluTWFwVmlld19Vbm1vZGlmaWFibGVNYXBWaWV3Jk1hcFZpZXcmX1VubW9kaWZpYWJsZU1hcE1peGluX0RvdWJsZUxpbmtfcHJldmlvdXNMaW5rX25leHRMaW5rRG91YmxlTGlua2VkUXVldWVFbnRyeXByZXZpb3VzRW50cnluZXh0RW50cnlfRG91YmxlTGlua2VkUXVldWVFbnRyeV9hc05vblNlbnRpbmVsRW50cnlfYXBwZW5kX3ByZXBlbmRfRG91YmxlTGlua2VkUXVldWVFbGVtZW50X0RvdWJsZUxpbmtlZFF1ZXVlU2VudGluZWxEb3VibGVMaW5rZWRRdWV1ZV9zZW50aW5lbGxhc3RFbnRyeWZpcnN0RW50cnlmb3JFYWNoRW50cnlfRG91YmxlTGlua2VkUXVldWVJdGVyYXRvcl9uZXh0RW50cnllbGVtZW50RW50cnlMaXN0UXVldWVfY2hlY2tNb2RpZmljYXRpb25leHBlY3RlZE1vZGlmaWNhdGlvbkNvdW50c3RhcnREaXN0YW5jZWVuZERpc3RhbmNlcHJldk9mZnNldF9MaXN0UXVldWVJdGVyYXRvcl9wb3NpdGlvblNldE1peGluX1NldEJhc2UmT2JqZWN0JlNldE1peGluc2V0VG9TdHJpbmdfU2V0QmFzZUNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldF9TcGxheVRyZWVOb2RlX1NwbGF5VHJlZU1hcE5vZGVfU3BsYXlUcmVlX3NwbGF5Q291bnRfZHVtbXlfY29tcGFyYXRvcl9jb21wYXJlX3NwbGF5X3NwbGF5TWluX3NwbGF5TWF4X2FkZE5ld1Jvb3RfbGFzdF9jbGVhcl9UeXBlVGVzdF9TcGxheVRyZWVNYXAmX1NwbGF5VHJlZSZNYXBNaXhpblNwbGF5VHJlZU1hcG1hcFJvb3RzcGxheUNvdW50aW5pdGlhbFNwbGF5Q291bnRmaXJzdEtleWxhc3RLZXlsYXN0S2V5QmVmb3JlZmlyc3RLZXlBZnRlcl9TcGxheVRyZWVJdGVyYXRvcl90cmVlX3dvcmtMaXN0X2N1cnJlbnROb2RlX2ZpbmRMZWZ0TW9zdERlc2NlbmRlbnRzdGFydEF0c3RhcnRLZXlfZ2V0VmFsdWVfcmVidWlsZFdvcmtMaXN0X1NwbGF5VHJlZUtleUl0ZXJhYmxlX2NvcHlOb2RlX1NwbGF5VHJlZVZhbHVlSXRlcmFibGVfU3BsYXlUcmVlS2V5SXRlcmF0b3JfU3BsYXlUcmVlVmFsdWVJdGVyYXRvcm1hcE5vZGVfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yX1NwbGF5VHJlZVNldCZfU3BsYXlUcmVlJkl0ZXJhYmxlTWl4aW5fU3BsYXlUcmVlU2V0Jl9TcGxheVRyZWUmSXRlcmFibGVNaXhpbiZTZXRNaXhpblNwbGF5VHJlZVNldF9NT0RJRklDQVRJT05fQ09VTlRfTUFTS19yZWhhc2hPYmplY3RzX2RlZmF1bHRFcXVhbHNfZGVmYXVsdEhhc2hDb2RlX2l0ZXJhYmxlUGFydHNUb1N0cmluZ3NwZW51bHRpbWF0ZVN0cmluZ3VsdGltYXRlU3RyaW5ncGVudWx0aW1hdGV1bHRpbWF0ZWVsaXNpb25fZHluYW1pY0NvbXBhcmVfZGVmYXVsdENvbXBhcmVkYXJ0LmNvbnZlcnRQT1dFUlNfT0ZfVEVOQ2xhc3NJRENhc3RDb252ZXJ0ZXJwYXJzZUhleEJ5dGVhc2NpaS5kYXJ0YmFzZTY0LmRhcnRieXRlX2NvbnZlcnNpb24uZGFydGNodW5rZWRfY29udmVyc2lvbi5kYXJ0Y29kZWMuZGFydGNvbnZlcnRlci5kYXJ0ZW5jb2RpbmcuZGFydGh0bWxfZXNjYXBlLmRhcnRqc29uLmRhcnRsYXRpbjEuZGFydGxpbmVfc3BsaXR0ZXIuZGFydHN0cmluZ19jb252ZXJzaW9uLmRhcnR1dGYuZGFydF9Kc29uVXRmOERlY29kZXJfcmV2aXZlcl9hbGxvd01hbGZvcm1lZGNodW5rRW5kX0pzb25MaXN0ZW5lcmhhbmRsZVN0cmluZ2hhbmRsZU51bWJlcmhhbmRsZUJvb2xoYW5kbGVOdWxsYmVnaW5PYmplY3Rwcm9wZXJ0eVZhbHVlZW5kT2JqZWN0YmVnaW5BcnJheWFycmF5RWxlbWVudGVuZEFycmF5X0J1aWxkSnNvbkxpc3RlbmVycHVzaENvbnRhaW5lcnBvcENvbnRhaW5lcl9SZXZpdmVySnNvbkxpc3RlbmVycmV2aXZlcl9OdW1iZXJCdWZmZXJtaW5DYXBhY2l0eWtEZWZhdWx0T3ZlcmhlYWRfaW5pdGlhbENhcGFjaXR5ZW5zdXJlQ2FwYWNpdHlwYXJzZU51bXBhcnNlRG91YmxlX0NodW5rZWRKc29uUGFyc2VyVE9QX0xFVkVMSU5TSURFX0FSUkFZSU5TSURFX09CSkVDVEFGVEVSX0NPTE9OQUxMT1dfU1RSSU5HX01BU0tBTExPV19WQUxVRV9NQVNLQUxMT1dfVkFMVUVTVFJJTkdfT05MWU5PX1ZBTFVFU05PTl9FTVBUWUVNUFRZX01BU0tTVEFURV9JTklUSUFMU1RBVEVfRU5EU1RBVEVfQVJSQVlfRU1QVFlTVEFURV9BUlJBWV9WQUxVRVNUQVRFX0FSUkFZX0NPTU1BU1RBVEVfT0JKRUNUX0VNUFRZU1RBVEVfT0JKRUNUX0tFWVNUQVRFX09CSkVDVF9DT0xPTlNUQVRFX09CSkVDVF9WQUxVRVNUQVRFX09CSkVDVF9DT01NQVZBTFVFX1JFQURfQklUU0JBQ0tTUEFDRVRBQk5FV0xJTkVDQVJSSUFHRV9SRVRVUk5GT1JNX0ZFRURRVU9URURFQ0lNQUxQT0lOVENIQVJfMENIQVJfOUNIQVJfRUxCUkFDS0VUUkJSQUNLRVRDSEFSX2FDSEFSX2JDSEFSX2VDSEFSX2ZDSEFSX2xDSEFSX25DSEFSX3JDSEFSX3NDSEFSX3RDSEFSX3VOT19QQVJUSUFMUEFSVElBTF9TVFJJTkdQQVJUSUFMX05VTUVSQUxQQVJUSUFMX0tFWVdPUkRNQVNLX1BBUlRJQUxOVU1fU0lHTk5VTV9aRVJPTlVNX0RJR0lUTlVNX0RPVE5VTV9ET1RfRElHSVROVU1fRU5VTV9FX1NJR05OVU1fRV9ESUdJVE5VTV9TVUNDRVNTU1RSX1BMQUlOU1RSX0VTQ0FQRVNUUl9VU1RSX1VfQ09VTlRfU0hJRlRTVFJfVV9WQUxVRV9TSElGVEtXRF9UWVBFX01BU0tLV0RfVFlQRV9TSElGVEtXRF9OVUxMS1dEX1RSVUVLV0RfRkFMU0VLV0RfQk9NS1dEX0NPVU5UX1NISUZUVFdPX0JJVF9NQVNLcGFydGlhbFN0YXRlc2F2ZVN0YXRlcmVzdG9yZVN0YXRlcGFydGlhbFR5cGVudW1TdGF0ZWZpbmlzaENodW5rTnVtYmVyVW50ZXJtaW5hdGVkIHN0cmluZ2dldENoYXJjb3B5Q2hhcnNUb0xpc3RiZWdpblN0cmluZ2FkZENoYXJUb1N0cmluZ2FkZFNsaWNlVG9TdHJpbmdlbmRTdHJpbmdwYXJzZVBhcnRpYWxwYXJzZVBhcnRpYWxTdHJpbmdwYXJzZVBhcnRpYWxOdW1iZXJwYXJzZVBhcnRpYWxLZXl3b3JkY29udGludWVDaHVua051bWJlcnBhcnNlU3RyaW5nVG9CdWZmZXJwYXJzZVN0cmluZ0VzY2FwZWNodW5rU3RyaW5nRXNjYXBlVXBhcnNlSGV4RGlnaXRJbnZhbGlkIGhleCBkaWdpdGtleXdvcmRUeXBla2V5d29yZFR5cGVJbmRleMOvwrvCv2V4cGVjdGVkQ2hhcnBhcnNlU3RyaW5ncGFyc2VOdWxscGFyc2VGYWxzZXBhcnNlVHJ1ZXBhcnNlTnVtYmVycGFyc2VLZXl3b3JkUHJlZml4Y2hhcnNzbGljZUVuZENvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZ2NodW5rU3RyaW5nc3RyaW5nU3RhdGVxdW90ZVBvc2l0aW9uaGV4U3RhcnRJbnZhbGlkIHVuaWNvZGUgZXNjYXBlVW5yZWNvZ25pemVkIHN0cmluZyBlc2NhcGViZWdpbkNodW5rTnVtYmVyYWRkTnVtYmVyQ2h1bmtvdmVyaGVhZFVudGVybWluYXRlZCBudW1iZXIgbGl0ZXJhbE1pc3NpbmcgZXhwZWN0ZWQgZGlnaXRkaWdpdENvdW50aGlnaERpZ2l0OTIyMzM3MjAzNjg1NDc3NTgwZXhwU2lnbmV4cG9uZW50T3ZlcmZsb3diaXRGbGFnOTAwNzE5OTI1NDc0MDk5Mi4wc2lnbmVkTWFudGlzc2ExMC4wMTAwLjAxMDAwLjAxMDAwMC4wMTAwMDAwLjAxMDAwMDAwLjAxMDAwMDAwMC4wMTAwMDAwMDAwLjAxMDAwMDAwMDAwLjAxMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAxZSsyMTFlKzIyVW5leHBlY3RlZCBjaGFyYWN0ZXJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dF9Kc29uU3RyaW5nUGFyc2VyX0pzb25TdHJpbmdEZWNvZGVyU2lua19wYXJzZXJfY3JlYXRlUGFyc2VyX1V0ZjhTdHJpbmdCdWZmZXJJTklUSUFMX0NBUEFDSVRZTUFTS19UV09fQklUTUFTS19TSVpFU0hJRlRfTUlTU0lOR1NISUZUX1ZBTFVFTUFYX0FTQ0lJTUFYX1RXT19CWVRFTUFYX1RIUkVFX0JZVEVNQVhfVU5JQ09ERU1BU0tfVFdPX0JZVEVNQVNLX1RIUkVFX0JZVEVNQVNLX0ZPVVJfQllURU1BU0tfQ09OVElOVUVfVEFHTUFTS19DT05USU5VRV9WQUxVRUNPTlRJTlVFX1RBR0xFQURfU1VSUk9HQVRFVEFJTF9TVVJST0dBVEVTSElGVF9ISUdIX1NVUlJPR0FURU1BU0tfTE9XX1NVUlJPR0FURWlzTGF0aW4xYWRkQ29udGludWF0aW9ubWlzc2luZ2NvZGVFbmRhZGRDaGFyQ29kZUV4cGVjdGVkIFVURi04IGNvbnRpbnVhdGlvbiBieXRlLCBmb3VuZCBJbnZhbGlkIGVuY29kaW5nOiBVKyBlbmNvZGVkIGluICBieXRlcy5JbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlX3RvMTZCaXRjb250aW51ZUJ5dGVDb3VudFVuZXhwZWN0ZWQgVVRGLTggY29udGludWF0aW9uIGJ5dGVJbnZhbGlkIFVURi04IGJ5dGU6IHNlZW5CeXRlQ291bnRfSnNvblV0ZjhQYXJzZXJfSnNvblV0ZjhEZWNvZGVyU2lua19hZGRDaHVua0FzY2lpQ29kZWNfYWxsb3dJbnZhbGlkYWxsb3dJbnZhbGlkdXMtYXNjaWlfVW5pY29kZVN1YnNldEVuY29kZXJfc3Vic2V0TWFza3N0cmluZ0xlbmd0aENvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy5Bc2NpaUVuY29kZXJfVW5pY29kZVN1YnNldEVuY29kZXJTaW5rU291cmNlIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyIHdpdGggY29kZSBwb2ludDogX1VuaWNvZGVTdWJzZXREZWNvZGVySW52YWxpZCB2YWx1ZSBpbiBpbnB1dDogX2NvbnZlcnRJbnZhbGlkQXNjaWlEZWNvZGVyc3RyaW5nU2lua19FcnJvckhhbmRsaW5nQXNjaWlEZWNvZGVyU2lua191dGY4U2lua19TaW1wbGVBc2NpaURlY29kZXJTaW5rU291cmNlIGNvbnRhaW5zIG5vbi1BU0NJSSBieXRlcy5CYXNlNjRDb2RlY3VybFNhZmVhbHBoYWJldGludmVyc2VBbHBoYWJldGZpcnN0UGFkZGluZ2ZpcnN0UGFkZGluZ1NvdXJjZUluZGV4cGFkZGluZ0NvdW50b3JpZ2luYWxDaGFySW52YWxpZCBiYXNlNjQgZGF0YWVuZExlbmd0aEludmFsaWQgYmFzZTY0IGVuY29kaW5nIGxlbmd0aCBfY2hlY2tQYWRkaW5nc291cmNlSW5kZXhJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCBwYWRkZWQgbGVuZ3RoIG11c3QgYmUgbXVsdGlwbGUgb2YgZm91ciwgaXMgSW52YWxpZCBiYXNlNjQgcGFkZGluZywgJz0nIG5vdCBhdCB0aGUgZW5kSW52YWxpZCBiYXNlNjQgcGFkZGluZywgbW9yZSB0aGFuIHR3byAnPScgY2hhcmFjdGVyc0Jhc2U2NEVuY29kZXJfdXJsU2FmZV9CYXNlNjRFbmNvZGVyX2Jhc2U2NEFscGhhYmV0X2Jhc2U2NFVybEFscGhhYmV0QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktX192YWx1ZVNoaWZ0X2NvdW50TWFza19zaXhCaXRNYXNrX2FscGhhYmV0X2VuY29kZVN0YXRlX3N0YXRlQml0c19zdGF0ZUNvdW50Y3JlYXRlQnVmZmVyZnVsbENodW5rc3BhcnRpYWxDaHVua0xlbmd0aGVuY29kZUNodW5rb3V0cHV0SW5kZXhleHBlY3RlZENoYXJzTm90IGEgYnl0ZSB2YWx1ZSBhdCBpbmRleCA6IDB4d3JpdGVGaW5hbENodW5rX0J1ZmZlckNhY2hpbmdCYXNlNjRFbmNvZGVyYnVmZmVyQ2FjaGVfQmFzZTY0RW5jb2RlclNpbmtfQXNjaWlCYXNlNjRFbmNvZGVyU2lua19VdGY4QmFzZTY0RW5jb2RlclNpbmtCYXNlNjREZWNvZGVyX0Jhc2U2NERlY29kZXJfaW52YWxpZF9wYWRkaW5nX3BfaW52ZXJzZUFscGhhYmV0X2NoYXJfcGVyY2VudF9jaGFyXzNfY2hhcl9kX2VuY29kZUNoYXJhY3RlclN0YXRlX2VuY29kZVBhZGRpbmdTdGF0ZWV4cGVjdGVkUGFkZGluZ19zdGF0ZVBhZGRpbmdfaGFzU2VlblBhZGRpbmdNaXNzaW5nIHBhZGRpbmcgY2hhcmFjdGVySW52YWxpZCBsZW5ndGgsIG11c3QgYmUgbXVsdGlwbGUgb2YgZm91cmRlY29kZUNodW5rb3V0SW5kZXhjaGFyT3JJbnZhbGlkIGVuY29kaW5nIGJlZm9yZSBwYWRkaW5nSW52YWxpZCBjaGFyYWN0ZXJfYWxsb2NhdGVCdWZmZXJwYWRkaW5nU3RhcnRyZW1haW5kZXJMZW5ndGhfdHJpbVBhZGRpbmdDaGFyc25ld0VuZGV4cGVjdGVkUGFydGlhbFBhZGRpbmdJbnZhbGlkIHBhZGRpbmcgY2hhcmFjdGVyX0Jhc2U2NERlY29kZXJTaW5rX2RlY29kZXJCeXRlQ29udmVyc2lvblNpbmt3aXRoQ2FsbGJhY2tCeXRlQ29udmVyc2lvblNpbmtCYXNlX0J5dGVBZGFwdGVyU2lua19CeXRlQ2FsbGJhY2tTaW5rX0lOSVRJQUxfQlVGRkVSX1NJWkVfYnVmZmVySW5kZXhmcmVlQ291bnRncm93bl9yb3VuZFRvUG93ZXJPZjJfU2ltcGxlQ2FsbGJhY2tTaW5rX2FjY3VtdWxhdGVkX0NvbnZlcnRlclN0cmVhbUV2ZW50U2lua19ldmVudFNpbmtfY2h1bmtlZFNpbmtDb2RlY2Z1c2VpbnZlcnRlZF9GdXNlZENvZGVjX3NlY29uZF9JbnZlcnRlZENvZGVjX2NvZGVjY29kZWNDb252ZXJ0ZXJUaGlzIGNvbnZlcnRlciBkb2VzIG5vdCBzdXBwb3J0IGNodW5rZWQgY29udmVyc2lvbnM6IF9GdXNlZENvbnZlcnRlcl9uYW1lVG9FbmNvZGluZ2lzb184ODU5LTE6MTk4N2lzby1pci0xMDBpc29fODg1OS0xaXNvLTg4NTktMWxhdGluMWwxaWJtODE5Y3A4MTljc2lzb2xhdGluMWlzby1pci02YW5zaV94My40LTE5NjhhbnNpX3gzLjQtMTk4Nmlzb182NDYuaXJ2OjE5OTFpc282NDYtdXN1c2libTM2N2NwMzY3Y3Nhc2NpaWNzdXRmOHV0Zi04ZGVjb2RlU3RyZWFtYnl0ZVN0cmVhbWdldEJ5TmFtZUh0bWxFc2NhcGVNb2RlZXNjYXBlTHRHdGVzY2FwZVF1b3Rlc2NhcGVBcG9zZXNjYXBlU2xhc2hhdHRyaWJ1dGVzcUF0dHJpYnV0ZWN1c3RvbUh0bWxFc2NhcGUmYW1wOyZxdW90OyYjMzk7JiM0NztfSHRtbEVzY2FwZVNpbmtKc29uVW5zdXBwb3J0ZWRPYmplY3RFcnJvcnVuc3VwcG9ydGVkT2JqZWN0cGFydGlhbFJlc3VsdHNhZmVTdHJpbmdDb252ZXJ0aW5nIG9iamVjdCB0byBhbiBlbmNvZGFibGUgb2JqZWN0IGZhaWxlZDpDb252ZXJ0aW5nIG9iamVjdCBkaWQgbm90IHJldHVybiBhbiBlbmNvZGFibGUgb2JqZWN0Okpzb25DeWNsaWNFcnJvckN5Y2xpYyBlcnJvciBpbiBKU09OIHN0cmluZ2lmeUpzb25Db2RlY190b0VuY29kYWJsZXRvRW5jb2RhYmxld2l0aFJldml2ZXJ3aXRoSW5kZW50SnNvblV0ZjhFbmNvZGVyX2RlZmF1bHRCdWZmZXJTaXplREVGQVVMVF9CVUZGRVJfU0laRV9pbmRlbnRfYnVmZmVyU2l6ZWJ1ZmZlclNpemVfdXRmOEVuY29kZWFkZENodW5rYnl0ZUxpc3RfSnNvbkVuY29kZXJTaW5rX2lzRG9uZU9ubHkgb25lIGNhbGwgdG8gYWRkIGFsbG93ZWRhc1N0cmluZ1NpbmtfSnNvblV0ZjhFbmNvZGVyU2lua0pzb25EZWNvZGVyX0pzb25TdHJpbmdpZmllcmJhY2tzcGFjZXRhYm5ld2xpbmVjYXJyaWFnZVJldHVybmZvcm1GZWVkY2hhcl8wYmFja3NsYXNoY2hhcl9iY2hhcl9mY2hhcl9uY2hhcl9yY2hhcl90Y2hhcl91X3NlZW5fcGFydGlhbFJlc3VsdGNoYXJhY3RlcnN3cml0ZVN0cmluZ1NsaWNld3JpdGVOdW1iZXJ3cml0ZVN0cmluZ0NvbnRlbnRfY2hlY2tDeWNsZV9yZW1vdmVTZWVud3JpdGVPYmplY3R3cml0ZUpzb25WYWx1ZWN1c3RvbUpzb253cml0ZU1hcGtleVZhbHVlTGlzdGFsbFN0cmluZ0tleXMsIiI6X0pzb25QcmV0dHlQcmludE1peGluaW5kZW50TGV2ZWxfSnNvblN0cmluZ1N0cmluZ2lmaWVyX19Kc29uU3RyaW5nU3RyaW5naWZpZXJQcmV0dHkmX0pzb25TdHJpbmdTdHJpbmdpZmllciZfSnNvblByZXR0eVByaW50TWl4aW5fSnNvblN0cmluZ1N0cmluZ2lmaWVyUHJldHR5X0pzb25VdGY4U3RyaW5naWZpZXJ3cml0ZUFzY2lpU3RyaW5nd3JpdGVGb3VyQnl0ZUNoYXJDb2Rld3JpdGVNdWx0aUJ5dGVDaGFyQ29kZV9fSnNvblV0ZjhTdHJpbmdpZmllclByZXR0eSZfSnNvblV0ZjhTdHJpbmdpZmllciZfSnNvblByZXR0eVByaW50TWl4aW5fSnNvblV0ZjhTdHJpbmdpZmllclByZXR0eUxhdGluMUNvZGVjTGF0aW4xRW5jb2RlckxhdGluMURlY29kZXJfTGF0aW4xRGVjb2RlclNpbmtfYWRkU2xpY2VUb1NpbmtfY2hlY2tWYWxpZExhdGluMV9yZXBvcnRJbnZhbGlkTGF0aW4xU291cmNlIGNvbnRhaW5zIG5vbi1MYXRpbi0xIGNoYXJhY3RlcnMuX0xhdGluMUFsbG93SW52YWxpZERlY29kZXJTaW5rcHJldmlvdXNDaGFyX0xpbmVTcGxpdHRlclNpbmtfY2Fycnlfc2tpcExlYWRpbmdMRl9hZGRMaW5lc19MaW5lU3BsaXR0ZXJFdmVudFNpbmtmcm9tU3RyaW5nU2lua0Nsb3NhYmxlU3RyaW5nU2lua19DbG9zYWJsZVN0cmluZ1NpbmtfU3RyaW5nQ29udmVyc2lvblNpbmtBc1N0cmluZ1NpbmtBZGFwdGVyX01JTl9TVFJJTkdfU0laRVN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZVN0cmluZ0NvbnZlcnNpb25TaW5rTWl4aW5fU3RyaW5nU2lua0NvbnZlcnNpb25TaW5rVFN0cmluZ1Npbmtfc3RyaW5nU2lua19TdHJpbmdDYWxsYmFja1NpbmtfU3RyaW5nQWRhcHRlclNpbmtfVXRmOFN0cmluZ1NpbmtBZGFwdGVyZW5kSW5kZXhfVXRmOENvbnZlcnNpb25TaW5rc3RyaW5nQnVmZmVyVXRmOENvZGVjVXRmOEVuY29kZXJfZmlsbEJ1ZmZlcmxhc3RDb2RlVW5pdHdhc0NvbWJpbmVkX3dyaXRlU3Vycm9nYXRlX1V0ZjhFbmNvZGVyX0RFRkFVTFRfQllURV9CVUZGRVJfU0laRXdpdGhCdWZmZXJTaXplbGVhZGluZ1N1cnJvZ2F0ZW5leHRDb2RlVW5pdHN0cmluZ0luZGV4X19VdGY4RW5jb2RlclNpbmsmX1V0ZjhFbmNvZGVyJlN0cmluZ0NvbnZlcnNpb25TaW5rTWl4aW5fVXRmOEVuY29kZXJTaW5raXNMYXN0U2xpY2VoYXNCZWVuQ29tYmluZWRVdGY4RGVjb2Rlcm9uZUJ5dGVzaXNGaXJzdENoYXJhY3RlcmZpcnN0UGFydF9pc0ZpcnN0Q2hhcmFjdGVyX2NvbnZlcnRJbnRlcmNlcHRlZF9VdGY4RGVjb2Rlcl9leHBlY3RlZFVuaXRzX2V4dHJhVW5pdHNfTElNSVRTaGFzUGFydGlhbElucHV0VW5maW5pc2hlZCBVVEYtOCBvY3RldCBzZXF1ZW5jZWV4cGVjdGVkVW5pdHNleHRyYVVuaXRzQmFkIFVURi04IGVuY29kaW5nIDB4T3ZlcmxvbmcgZW5jb2Rpbmcgb2YgMHhDaGFyYWN0ZXIgb3V0c2lkZSB2YWxpZCBVbmljb2RlIHJhbmdlOiBOZWdhdGl2ZSBVVEYtOCBjb2RlIHVuaXQ6IC0weF9hc2NpaU1hc2tiYXNlNjRiYXNlNjRVcmxfcGFkZGluZ0NoYXJodG1sRXNjYXBlX2xhdGluMU1hc2tfT05FX0JZVEVfTElNSVRfVFdPX0JZVEVfTElNSVRfVEhSRUVfQllURV9MSU1JVF9GT1VSX0JZVEVfTElNSVRfU1VSUk9HQVRFX1RBR19NQVNLX1NVUlJPR0FURV9WQUxVRV9NQVNLX0xFQURfU1VSUk9HQVRFX01JTl9UQUlMX1NVUlJPR0FURV9NSU5fcGFyc2VEb3VibGVEb3VibGVfcGFyc2ViYXNlNjRFbmNvZGViYXNlNjRVcmxFbmNvZGViYXNlNjREZWNvZGVfcGFyc2VKc29uX2RlZmF1bHRUb0VuY29kYWJsZV9pc0xlYWRTdXJyb2dhdGVfaXNUYWlsU3Vycm9nYXRlX2NvbWJpbmVTdXJyb2dhdGVQYWlybGVhZF9zY2FuT25lQnl0ZUNoYXJhY3RlcnN1bml0c2RhcnQuZGV2ZWxvcGVyU2VuZFBvcnRSYXdSZWNlaXZlUG9ydGV4dGVuc2lvbi5kYXJ0cHJvZmlsZXIuZGFydHNlcnZpY2UuZGFydHRpbWVsaW5lLmRhcnRTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlclRpbWVsaW5lU3luY0Z1bmN0aW9uVGltZWxpbmVBc3luY0Z1bmN0aW9uX1VzZXJUYWdVc2VyVGFnX25ld1VzZXJUYWdfbGFiZWxtYWtlQ3VycmVudFVzZXJUYWdfbWFrZUN1cnJlbnRTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2VlcnJvckRldGFpbGtJbnZhbGlkUGFyYW1za0V4dGVuc2lvbkVycm9ya0V4dGVuc2lvbkVycm9yTWF4a0V4dGVuc2lvbkVycm9yTWluaW52YWxpZFBhcmFtc2V4dGVuc2lvbkVycm9yZXh0ZW5zaW9uRXJyb3JNYXhleHRlbnNpb25FcnJvck1pbl9lcnJvckNvZGVNZXNzYWdlSW52YWxpZCBwYXJhbXNTZXJ2ZXIgZXJyb3JfdmFsaWRhdGVFcnJvckNvZGVPdXQgb2YgcmFuZ2Vpc0Vycm9yX3RvU3RyaW5nVXNlclRhZ01BWF9VU0VSX1RBR1NkZWZhdWx0VGFnTWV0cmljSW52YWxpZCBNZXRyaWMgbmFtZS5fdG9KU09OR2F1Z2VtaW4gbXVzdCBiZSBsZXNzIHRoYW4gbWF4bWV0cmljcy9Db3VudGVyTWV0cmljc19tZXRyaWNzbWV0cmljUmVnaXN0ZXJlZCBtZXRyaWNzIGhhdmUgdW5pcXVlIG5hbWVzZGVyZWdpc3Rlcl9wcmludE1ldHJpY19wcmludE1ldHJpY3NtZXRyaWNzTWV0cmljTGlzdFNlcnZpY2VQcm90b2NvbEluZm9tYWpvclZlcnNpb25EYXJ0IFZNIFNlcnZpY2UgUHJvdG9jb2wgdmxpc3RlbmluZyBvbiBTZXJ2aWNlZ2V0SW5mb3JlY2VpdmVQb3J0dXJpQ29tcGxldGVyc2VuZFBvcnRjb250cm9sV2ViU2VydmVyZW5hYmxlZ2V0SXNvbGF0ZUlEY29udHJvbFBvcnRGbG93VGltZWxpbmVzdGFydFN5bmNfYXJndW1lbnRzZmluaXNoU3luY1VuZXZlbiBjYWxscyB0byBzdGFydFN5bmMgYW5kIGZpbmlzaFN5bmNpbnN0YW50U3luY2luc3RhbnRBcmd1bWVudHN0aW1lU3luY1RpbWVsaW5lVGFza190YXNrSWR3aXRoVGFza0lkdGFza0lkaW5zdGFudFVuZXZlbiBjYWxscyB0byBzdGFydCBhbmQgZmluaXNocGFzc1lvdSBjYW5ub3QgcGFzcyBhIFRpbWVsaW5lVGFzayB3aXRob3V0IGZpbmlzaGluZyBhbGwgc3RhcnRlZCBvcGVyYXRpb25zX0FzeW5jQmxvY2tfU3luY0Jsb2NrX3N0YXJ0Q3B1X2Zsb3dfbmV4dFNlcXVlbmNlTnVtYmVyX2hhc1RpbWVsaW5lRGV2ZWxvcGVyX2xvZ3RpbWVzdGFtcF9ydW5FeHRlbnNpb25wYXJhbWV0ZXJLZXlzcGFyYW1ldGVyVmFsdWVzcmVwbHlQb3J0dHJhY2Vfc2VydmljZWVycm9yRGV0YWlsc0V4dGVuc2lvbiBoYW5kbGVyIG11c3QgcmV0dXJuIGEgRnV0dXJlRXh0ZW5zaW9uIGhhbmRsZXIgbXVzdCBjb21wbGV0ZSB0byBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZV9wb3N0UmVzcG9uc2V2bS1zZXJ2aWNlOiBwb3N0aW5nIG5vIHJlc3BvbnNlIGZvciByZXF1ZXN0eyJqc29ucnBjIjoiMi4wIix2bS1zZXJ2aWNlOiBwb3N0aW5nIGVycm9yIHJlc3BvbnNlIGZvciByZXF1ZXN0ICJlcnJvciI6dm0tc2VydmljZTogcG9zdGluZyByZXNwb25zZSBmb3IgcmVxdWVzdCAicmVzdWx0IjoiaWQiOiIifSJpZCI6X2dldEN1cnJlbnRUYWdQcm9maWxlcl9nZXRDdXJyZW50VGFnX2dldERlZmF1bHRUYWdVc2VyVGFnX2RlZmF1bHRUYWdEZXZlbG9wZXJfZGVidWdnZXJ3aGVuaW5zcGVjdERldmVsb3Blcl9pbnNwZWN0TXVzdCBiZSBhIFN0cmluZ011c3QgYmUgYSBEYXRlVGltZXJlZ2lzdGVyRXh0ZW5zaW9uZXh0Lk11c3QgYmVnaW4gd2l0aCBleHQuRXh0ZW5zaW9uIGFscmVhZHkgcmVnaXN0ZXJlZDogcG9zdEV2ZW50ZXZlbnRLaW5kZXZlbnREYXRhZXZlbnREYXRhQXNTdHJpbmdfcG9zdEV2ZW50RGV2ZWxvcGVyX3Bvc3RFdmVudF9sb29rdXBFeHRlbnNpb25EZXZlbG9wZXJfbG9va3VwRXh0ZW5zaW9uX3JlZ2lzdGVyRXh0ZW5zaW9uRGV2ZWxvcGVyX3JlZ2lzdGVyRXh0ZW5zaW9uZ2V0Q3VycmVudFRhZ19nZXRTZXJ2ZXJJbmZvRGV2ZWxvcGVyX2dldFNlcnZlckluZm9fd2ViU2VydmVyQ29udHJvbERldmVsb3Blcl93ZWJTZXJ2ZXJDb250cm9sX2dldFNlcnZpY2VNYWpvclZlcnNpb25EZXZlbG9wZXJfZ2V0U2VydmljZU1ham9yVmVyc2lvbl9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uRGV2ZWxvcGVyX2dldFNlcnZpY2VNaW5vclZlcnNpb25fZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0RGV2ZWxvcGVyX2dldElzb2xhdGVJREZyb21TZW5kUG9ydF9hcmd1bWVudHNBc0pzb25faXNEYXJ0U3RyZWFtRW5hYmxlZFRpbWVsaW5lX2lzRGFydFN0cmVhbUVuYWJsZWRfZ2V0TmV4dEFzeW5jSWRUaW1lbGluZV9nZXROZXh0QXN5bmNJZF9nZXRUcmFjZUNsb2NrVGltZWxpbmVfZ2V0VHJhY2VDbG9ja19nZXRUaHJlYWRDcHVDbG9ja1RpbWVsaW5lX2dldFRocmVhZENwdUNsb2NrX3JlcG9ydFRhc2tFdmVudFRpbWVsaW5lX3JlcG9ydFRhc2tFdmVudGFyZ3VtZW50c0FzSnNvbl9yZXBvcnRDb21wbGV0ZUV2ZW50VGltZWxpbmVfcmVwb3J0Q29tcGxldGVFdmVudHN0YXJ0Q3B1X3JlcG9ydEZsb3dFdmVudFRpbWVsaW5lX3JlcG9ydEZsb3dFdmVudF9yZXBvcnRJbnN0YW50RXZlbnRUaW1lbGluZV9yZXBvcnRJbnN0YW50RXZlbnRkYXJ0LmZmaVR5cGVkRGF0YW5hdGl2ZV90eXBlLmRhcnRhbm5vdGF0aW9ucy5kYXJ0ZHluYW1pY19saWJyYXJ5LmRhcnRzdHJ1Y3QuZGFydFBvaW50ZXJhbGxvY2F0ZWZyb21BZGRyZXNzcHRyZnJvbUZ1bmN0aW9uRmZpX2Zyb21GdW5jdGlvbmV4Y2VwdGlvbmFsUmV0dXJuRmZpX3N0b3JlRmZpX2xvYWRhZGRyZXNzRmZpX2FkZHJlc3NGZmlfZWxlbWVudEF0b2Zmc2V0QnlGZmlfb2Zmc2V0QnlGZmlfY2FzdGFzRnVuY3Rpb25Qb2ludGVyLmFzRnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBkeW5hbWljYWxseS5GZmlfZnJlZWFzRXh0ZXJuYWxUeXBlZERhdGFOYXRpdmVUeXBlX05hdGl2ZUludGVnZXJfTmF0aXZlRG91YmxlSW50OEludDE2SW50MzJJbnQ2NFVpbnQ4VWludDE2VWludDMyVWludDY0SW50UHRyRmxvYXRWb2lkTmF0aXZlRnVuY3Rpb25EYXJ0UmVwcmVzZW50YXRpb25PZlVuc2l6ZWREeW5hbWljTGlicmFyeWdldEhhbmRsZUZmaV9kbF9nZXRIYW5kbGVGZmlfZGxfbG9va3Vwc3ltYm9sTmFtZWxvb2t1cEZ1bmN0aW9uRHluYW1pYyBpbnZvY2F0aW9uIG9mIGxvb2t1cEZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuU3RydWN0YWRkcmVzc09mZnJvbVBvaW50ZXJudWxscHRydW5zaXplZF9vcGVuRmZpX2RsX29wZW5fYWxsb2NhdGVGZmlfYWxsb2NhdGVfZnJvbUFkZHJlc3NGZmlfZnJvbUFkZHJlc3NfYXNGdW5jdGlvbkludGVybmFsRmZpX2FzRnVuY3Rpb25JbnRlcm5hbERTTlNfYXNFeHRlcm5hbFR5cGVkRGF0YUZmaV9hc0V4dGVybmFsVHlwZWREYXRhX2FiaVJlY29nbml6ZWQgbWV0aG9kOiBtZXRob2QgaXMgZGlyZWN0bHkgaW50ZXJwcmV0ZWQgYnkgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyIG9yIElSIGdyYXBoIGlzIGJ1aWx0IGluIHRoZSBmbG93IGdyYXBoIGJ1aWxkZXIuRmZpX3NpemVPZmRhcnQuX2ludGVybmFsSW50MzJMaXN0YXN5bmNfY2FzdC5kYXJ0Y2FzdC5kYXJ0cHJpbnQuZGFydHNvcnQuZGFydHN5bWJvbC5kYXJ0X1ByaW50Q2xvc3VyZV9FbGVtZW50UHJlZGljYXRlX0V4cGFuZEZ1bmN0aW9udGltZXJGYWN0b3J5ZXZlbnRIYW5kbGVyU2VuZERhdGF0aW1lck1pbGxpc2Vjb25kQ2xvY2tyZXNvdXJjZVJlYWRBc0J5dGVzcGFja2FnZVJvb3RTdHJpbmdwYWNrYWdlQ29uZmlnU3RyaW5ncGFja2FnZVJvb3RVcmlGdXR1cmVwYWNrYWdlQ29uZmlnVXJpRnV0dXJlcmVzb2x2ZVBhY2thZ2VVcmlGdXR1cmVfY29tcHV0ZVNjcmlwdFVyaV9jYWNoZWRTY3JpcHRwbGF0Zm9ybVNjcmlwdExpc3Rzc3JjU3RhcnRkc3RTdGFydGNpZEFycmF5Y2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nY2lkR3Jvd2FibGVPYmplY3RBcnJheWNpZEltbXV0YWJsZUFycmF5Y2lkT25lQnl0ZVN0cmluZ2NpZFR3b0J5dGVTdHJpbmdjaWRVaW50OEFycmF5Vmlld2dldElEQ2xhc3NJRF9nZXRJRF9QYXRjaENvZGVVbml0c19zdHJpbmdzdHJpbmdPZjIuMkh0dHBTdGF0dXNjb250aW51ZV9zd2l0Y2hpbmdQcm90b2NvbHNwcm9jZXNzaW5nb2tjcmVhdGVkYWNjZXB0ZWRub25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb25ub0NvbnRlbnRyZXNldENvbnRlbnRwYXJ0aWFsQ29udGVudG11bHRpU3RhdHVzYWxyZWFkeVJlcG9ydGVkaW1Vc2VkbXVsdGlwbGVDaG9pY2VzbW92ZWRQZXJtYW5lbnRseW1vdmVkVGVtcG9yYXJpbHlzZWVPdGhlcm5vdE1vZGlmaWVkdXNlUHJveHl0ZW1wb3JhcnlSZWRpcmVjdHBlcm1hbmVudFJlZGlyZWN0YmFkUmVxdWVzdHVuYXV0aG9yaXplZHBheW1lbnRSZXF1aXJlZGZvcmJpZGRlbm1ldGhvZE5vdEFsbG93ZWRub3RBY2NlcHRhYmxlcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkcmVxdWVzdFRpbWVvdXRjb25mbGljdGdvbmVsZW5ndGhSZXF1aXJlZHByZWNvbmRpdGlvbkZhaWxlZHJlcXVlc3RFbnRpdHlUb29MYXJnZXJlcXVlc3RVcmlUb29Mb25ndW5zdXBwb3J0ZWRNZWRpYVR5cGVyZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlZXhwZWN0YXRpb25GYWlsZWRtaXNkaXJlY3RlZFJlcXVlc3R1bnByb2Nlc3NhYmxlRW50aXR5bG9ja2VkZmFpbGVkRGVwZW5kZW5jeXVwZ3JhZGVSZXF1aXJlZHByZWNvbmRpdGlvblJlcXVpcmVkdG9vTWFueVJlcXVlc3RzcmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlY29ubmVjdGlvbkNsb3NlZFdpdGhvdXRSZXNwb25zZXVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zY2xpZW50Q2xvc2VkUmVxdWVzdGludGVybmFsU2VydmVyRXJyb3Jub3RJbXBsZW1lbnRlZGJhZEdhdGV3YXlzZXJ2aWNlVW5hdmFpbGFibGVnYXRld2F5VGltZW91dGh0dHBWZXJzaW9uTm90U3VwcG9ydGVkdmFyaWFudEFsc29OZWdvdGlhdGVzaW5zdWZmaWNpZW50U3RvcmFnZWxvb3BEZXRlY3RlZG5vdEV4dGVuZGVkbmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWRuZXR3b3JrQ29ubmVjdFRpbWVvdXRFcnJvclVzZSBjb250aW51ZV8gaW5zdGVhZFNXSVRDSElOR19QUk9UT0NPTFNVc2Ugc3dpdGNoaW5nUHJvdG9jb2xzIGluc3RlYWRPS1VzZSBvayBpbnN0ZWFkQ1JFQVRFRFVzZSBjcmVhdGVkIGluc3RlYWRBQ0NFUFRFRFVzZSBhY2NlcHRlZCBpbnN0ZWFkTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT05Vc2Ugbm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIGluc3RlYWROT19DT05URU5UVXNlIG5vQ29udGVudCBpbnN0ZWFkUkVTRVRfQ09OVEVOVFVzZSByZXNldENvbnRlbnQgaW5zdGVhZFBBUlRJQUxfQ09OVEVOVFVzZSBwYXJ0aWFsQ29udGVudCBpbnN0ZWFkTVVMVElQTEVfQ0hPSUNFU1VzZSBtdWx0aXBsZUNob2ljZXMgaW5zdGVhZE1PVkVEX1BFUk1BTkVOVExZVXNlIG1vdmVkUGVybWFuZW50bHkgaW5zdGVhZEZPVU5EVXNlIGZvdW5kIGluc3RlYWRNT1ZFRF9URU1QT1JBUklMWVVzZSBtb3ZlZFRlbXBvcmFyaWx5IGluc3RlYWRTRUVfT1RIRVJVc2Ugc2VlT3RoZXIgaW5zdGVhZE5PVF9NT0RJRklFRFVzZSBub3RNb2RpZmllZCBpbnN0ZWFkVVNFX1BST1hZVXNlIHVzZVByb3h5IGluc3RlYWRURU1QT1JBUllfUkVESVJFQ1RVc2UgdGVtcG9yYXJ5UmVkaXJlY3QgaW5zdGVhZEJBRF9SRVFVRVNUVXNlIGJhZFJlcXVlc3QgaW5zdGVhZFVOQVVUSE9SSVpFRFVzZSB1bmF1dGhvcml6ZWQgaW5zdGVhZFBBWU1FTlRfUkVRVUlSRURVc2UgcGF5bWVudFJlcXVpcmVkIGluc3RlYWRGT1JCSURERU5Vc2UgZm9yYmlkZGVuIGluc3RlYWROT1RfRk9VTkRVc2Ugbm90Rm91bmQgaW5zdGVhZE1FVEhPRF9OT1RfQUxMT1dFRFVzZSBtZXRob2ROb3RBbGxvd2VkIGluc3RlYWROT1RfQUNDRVBUQUJMRVVzZSBub3RBY2NlcHRhYmxlIGluc3RlYWRQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRFVzZSBwcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgaW5zdGVhZFJFUVVFU1RfVElNRU9VVFVzZSByZXF1ZXN0VGltZW91dCBpbnN0ZWFkQ09ORkxJQ1RVc2UgY29uZmxpY3QgaW5zdGVhZEdPTkVVc2UgZ29uZSBpbnN0ZWFkTEVOR1RIX1JFUVVJUkVEVXNlIGxlbmd0aFJlcXVpcmVkIGluc3RlYWRQUkVDT05ESVRJT05fRkFJTEVEVXNlIHByZWNvbmRpdGlvbkZhaWxlZCBpbnN0ZWFkUkVRVUVTVF9FTlRJVFlfVE9PX0xBUkdFVXNlIHJlcXVlc3RFbnRpdHlUb29MYXJnZSBpbnN0ZWFkUkVRVUVTVF9VUklfVE9PX0xPTkdVc2UgcmVxdWVzdFVyaVRvb0xvbmcgaW5zdGVhZFVOU1VQUE9SVEVEX01FRElBX1RZUEVVc2UgdW5zdXBwb3J0ZWRNZWRpYVR5cGUgaW5zdGVhZFJFUVVFU1RFRF9SQU5HRV9OT1RfU0FUSVNGSUFCTEVVc2UgcmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSBpbnN0ZWFkRVhQRUNUQVRJT05fRkFJTEVEVXNlIGV4cGVjdGF0aW9uRmFpbGVkIGluc3RlYWRVUEdSQURFX1JFUVVJUkVEVXNlIHVwZ3JhZGVSZXF1aXJlZCBpbnN0ZWFkSU5URVJOQUxfU0VSVkVSX0VSUk9SVXNlIGludGVybmFsU2VydmVyRXJyb3IgaW5zdGVhZE5PVF9JTVBMRU1FTlRFRFVzZSBub3RJbXBsZW1lbnRlZCBpbnN0ZWFkQkFEX0dBVEVXQVlVc2UgYmFkR2F0ZXdheSBpbnN0ZWFkU0VSVklDRV9VTkFWQUlMQUJMRVVzZSBzZXJ2aWNlVW5hdmFpbGFibGUgaW5zdGVhZEdBVEVXQVlfVElNRU9VVFVzZSBnYXRld2F5VGltZW91dCBpbnN0ZWFkSFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURURVc2UgaHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQgaW5zdGVhZE5FVFdPUktfQ09OTkVDVF9USU1FT1VUX0VSUk9SVXNlIG5ldHdvcmtDb25uZWN0VGltZW91dEVycm9yIGluc3RlYWRDYXN0U3RyZWFtU3Vic2NyaXB0aW9uX0Nhc3RJdGVyYWJsZUJhc2VDYXN0SXRlcmF0b3JDYXN0SXRlcmFibGVfRWZmaWNpZW50TGVuZ3RoQ2FzdEl0ZXJhYmxlX19DYXN0TGlzdEJhc2UmX0Nhc3RJdGVyYWJsZUJhc2UmTGlzdE1peGluX0Nhc3RMaXN0QmFzZXYxQ2FzdExpc3RDYXN0U2V0X2RlZmF1bHRFbXB0eVNldF9jb25kaXRpb25hbEFkZG90aGVyQ29udGFpbnNjYXN0RWxlbWVudENhc3RNYXBTS1NWQ2FzdFF1ZXVlRWZmaWNpZW50TGVuZ3RoSXRlcmFibGVMaXN0SXRlcmFibGVTdWJMaXN0SXRlcmFibGVfZW5kT3JMZW5ndGhfZW5kSW5kZXhyZWFsSW5kZXhuZXdTdGFydExpc3RJdGVyYXRvck1hcHBlZEl0ZXJhYmxlX2ZFZmZpY2llbnRMZW5ndGhNYXBwZWRJdGVyYWJsZU1hcHBlZEl0ZXJhdG9yTWFwcGVkTGlzdEl0ZXJhYmxlV2hlcmVJdGVyYWJsZVdoZXJlSXRlcmF0b3JFeHBhbmRJdGVyYWJsZUV4cGFuZEl0ZXJhdG9yX2N1cnJlbnRFeHBhbnNpb25UYWtlSXRlcmFibGVfdGFrZUNvdW50dGFrZUNvdW50RWZmaWNpZW50TGVuZ3RoVGFrZUl0ZXJhYmxlaXRlcmFibGVMZW5ndGhUYWtlSXRlcmF0b3JUYWtlV2hpbGVJdGVyYWJsZVRha2VXaGlsZUl0ZXJhdG9yX2lzRmluaXNoZWRTa2lwSXRlcmFibGVfc2tpcENvdW50RWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlU2tpcEl0ZXJhdG9yU2tpcFdoaWxlSXRlcmFibGVTa2lwV2hpbGVJdGVyYXRvcl9oYXNTa2lwcGVkRW1wdHlJdGVyYWJsZUZvbGxvd2VkQnlJdGVyYWJsZWZpcnN0RWZmaWNpZW50RWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlRm9sbG93ZWRCeUl0ZXJhdG9yX25leHRJdGVyYWJsZVdoZXJlVHlwZUl0ZXJhYmxlV2hlcmVUeXBlSXRlcmF0b3Jub0VsZW1lbnR0b29NYW55dG9vRmV3Rml4ZWRMZW5ndGhMaXN0TWl4aW5DYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3RDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdENhbm5vdCBjbGVhciBhIGZpeGVkLWxlbmd0aCBsaXN0VW5tb2RpZmlhYmxlTGlzdE1peGluQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdENhbm5vdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiBhbiB1bm1vZGlmaWFibGUgbGlzdENhbm5vdCBhZGQgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3RDYW5ub3QgcmVtb3ZlIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3RDYW5ub3QgY2xlYXIgYW4gdW5tb2RpZmlhYmxlIGxpc3RGaXhlZExlbmd0aExpc3RCYXNlVW5tb2RpZmlhYmxlTGlzdEJhc2VfTGlzdEluZGljZXNJdGVyYWJsZV9iYWNrZWRMaXN0TGlzdE1hcFZpZXdSZXZlcnNlZExpc3RJdGVyYWJsZVVubW9kaWZpYWJsZUxpc3RFcnJvckNhbm5vdCBhZGQgdG8gdW5tb2RpZmlhYmxlIExpc3RDYW5ub3QgY2hhbmdlIHRoZSBjb250ZW50IG9mIGFuIHVubW9kaWZpYWJsZSBMaXN0Q2Fubm90IGNoYW5nZSBsZW5ndGggb2YgdW5tb2RpZmlhYmxlIExpc3RDYW5ub3QgcmVtb3ZlIGZyb20gdW5tb2RpZmlhYmxlIExpc3ROb25Hcm93YWJsZUxpc3RFcnJvckNhbm5vdCBhZGQgdG8gbm9uLWdyb3dhYmxlIExpc3RDYW5ub3QgY2hhbmdlIGxlbmd0aCBvZiBub24tZ3Jvd2FibGUgTGlzdENhbm5vdCByZW1vdmUgZnJvbSBub24tZ3Jvd2FibGUgTGlzdFNvcnRfSU5TRVJUSU9OX1NPUlRfVEhSRVNIT0xEc29ydFJhbmdlT3V0T2ZSYW5nZV9kb1NvcnRfaW5zZXJ0aW9uU29ydGVsX2R1YWxQaXZvdFF1aWNrc29ydHNpeHRoaW5kZXgxaW5kZXg1aW5kZXgzaW5kZXgyaW5kZXg0ZWwxZWwyZWwzZWw0ZWw1cGl2b3QxcGl2b3QyZ3JlYXRwaXZvdHNfYXJlX2VxdWFsYWtjb21wX3Bpdm90MWNvbXBfcGl2b3QycmVzZXJ2ZWRXb3JkUkUoPzphc3NlcnR8YnJlYWt8Yyg/OmEoPzpzZXx0Y2gpfGxhc3N8b24oPzpzdHx0aW51ZSkpfGQoPzplZmF1bHR8byl8ZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfHJldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8dig/OmFyfG9pZCl8dyg/OmhpbGV8aXRoKSlwdWJsaWNJZGVudGlmaWVyUkUoPyEoPzphc3NlcnR8YnJlYWt8Yyg/OmEoPzpzZXx0Y2gpfGxhc3N8b24oPzpzdHx0aW51ZSkpfGQoPzplZmF1bHR8byl8ZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfHJldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8dig/OmFyfG9pZCl8dyg/OmhpbGV8aXRoKSlcYig/IVwkKSlbYS16QS1aJF1bXHckXSooPyEoPzphc3NlcnR8YnJlYWt8Yyg/OmEoPzpzZXx0Y2gpfGxhc3N8b24oPzpzdHx0aW51ZSkpfGQoPzplZmF1bHR8byl8ZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfHJldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8dig/OmFyfG9pZCl8dyg/OmhpbGV8aXRoKSlcYig/IVwkKSlbYS16QS1aJF9dW1x3JF0qb3BlcmF0b3JSRSg/OltcLSsqLyUmfF5dfFxbXF09P3w9PXx+Lz98PFs8PV0/fD5bPj1dP3x1bmFyeS0pcHVibGljU3ltYm9sUGF0dGVybl4oPzokfCg/Oj0/JHxbLl0oPyEkKSkpKz8kc3ltYm9sUGF0dGVybnVudmFsaWRhdGVkU3ltYm9sKCJ2YWxpZGF0ZVB1YmxpY1N5bWJvbCIgaXMgYSBwcml2YXRlIGlkZW50aWZpZXIiIGlzIG5vdCBhIHZhbGlkIChxdWFsaWZpZWQpIHN5bWJvbCBuYW1laXNWYWxpZFN5bWJvbGNvbXB1dGVVbm1hbmdsZWROYW1lYWRkX3NldHRlcl9zdWZmaXhuZXdMYXN0bmV3Rmlyc3RpczY0Qml0X3ByaW50Q2xvc3VyZV9pbnF1aXJlSXM2NEJpdEludGVybmFsX2lucXVpcmVJczY0Qml0X2NsYXNzUmFuZ2VDaGVja2NpZGxvd2VyTGltaXR1cHBlckxpbWl0X3ByZXBlbmRUeXBlQXJndW1lbnRzSW50ZXJuYWxfcHJlcGVuZFR5cGVBcmd1bWVudHNmdW5jdGlvblR5cGVBcmd1bWVudHNwYXJlbnRUeXBlQXJndW1lbnRzcGFyZW50TGVudG90YWxMZW5fYm91bmRzQ2hlY2tGb3JQYXJ0aWFsSW5zdGFudGlhdGlvbkludGVybmFsX2JvdW5kc0NoZWNrRm9yUGFydGlhbEluc3RhbnRpYXRpb25fZ3Jvd1JlZ0V4cFN0YWNrbmV3U3RhY2t1bnNhZmVDYXN0SW50ZXJuYWxfdW5zYWZlQ2FzdF91bnN1cHBvcnRlZFByaW50J3ByaW50JyBpcyBub3Qgc3VwcG9ydGVkZGlnaXQxZGlnaXQySW50ZXJuYWxfZXh0cmFjdFR5cGVBcmd1bWVudHNfY2hlY2tDb3VudG1ha2VMaXN0Rml4ZWRMZW5ndGhJbnRlcm5hbF9tYWtlTGlzdEZpeGVkTGVuZ3RoZ3Jvd2FibGVMaXN0bWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZUludGVybmFsX21ha2VGaXhlZExpc3RVbm1vZGlmaWFibGVmaXhlZExlbmd0aExpc3RkYXJ0Lmlzb2xhdGVCeXRlQnVmZmVyY2FwYWJpbGl0eS5kYXJ0X0ltbWVkaWF0ZUNhbGxiYWNrX051bGxhcnlGdW5jdGlvbl9VbmFyeUZ1bmN0aW9uX0JpbmFyeUZ1bmN0aW9uX0NhcGFiaWxpdHlJbXBsQ2FwYWJpbGl0eUltcGxfZmFjdG9yeV9nZXRfaGFzaGNvZGVDYXBhYmlsaXR5SW1wbF9lcXVhbHNDYXBhYmlsaXR5SW1wbF9nZXRfaGFzaGNvZGVfUmVjZWl2ZVBvcnRJbXBsX3Jhd1BvcnRmcm9tUmF3UmVjZWl2ZVBvcnRfUmF3UmVjZWl2ZVBvcnRJbXBsX2hhbmRsZXJNYXBSYXdSZWNlaXZlUG9ydEltcGxfZmFjdG9yeV9jbG9zZUludGVybmFsX2dldF9zZW5kcG9ydF9nZXRfaWRSYXdSZWNlaXZlUG9ydEltcGxfZ2V0X2lkUmF3UmVjZWl2ZVBvcnRJbXBsX2dldF9zZW5kcG9ydF9sb29rdXBIYW5kbGVyX2hhbmRsZU1lc3NhZ2VSYXdSZWNlaXZlUG9ydEltcGxfY2xvc2VJbnRlcm5hbF9pbml0SGFuZGxlck1hcHRlbXBNYXBfU2VuZFBvcnRJbXBsX3VuaW5zdGFudGlhYmxlX3NlbmRJbnRlcm5hbFNlbmRQb3J0SW1wbF9nZXRfaWRTZW5kUG9ydEltcGxfZ2V0X2hhc2hjb2RlU2VuZFBvcnRJbXBsX3NlbmRJbnRlcm5hbF9fVHJhbnNmZXJhYmxlVHlwZWREYXRhSW1wbFRyYW5zZmVyYWJsZVR5cGVkRGF0YV9mYWN0b3J5bWF0ZXJpYWxpemVfbWF0ZXJpYWxpemVJbnRvVWludDhMaXN0VHJhbnNmZXJhYmxlVHlwZWREYXRhX21hdGVyaWFsaXplX1RpbWVySGVhcF91c2VkaW5pdFNpemVfaW5kZXhPck5leHRfY29tcGFyZVRvX3N3YXBsZWZ0SW5kZXhuZXdlc3RfbGVmdENoaWxkX3JpZ2h0Q2hpbGRfbGVmdENoaWxkSW5kZXhfcmlnaHRDaGlsZEluZGV4X1RpbWVyX05PX1RJTUVSX1pFUk9fRVZFTlRfVElNRU9VVF9FVkVOVF9oZWFwX2ZpcnN0WmVyb1RpbWVyX2xhc3RaZXJvVGltZXJfSURfTUFTS19pZENvdW50X3JlY2VpdmVQb3J0X3NlbmRQb3J0X3NjaGVkdWxlZFdha2V1cFRpbWVfaGFuZGxpbmdDYWxsYmFja3Nfd2FrZXVwVGltZV9taWxsaVNlY29uZHNfcmVwZWF0aW5nX3RpY2tfbmV4dElkbWlsbGlTZWNvbmRzd2FrZXVwVGltZV9lbnF1ZXVlX2lzSW5IZWFwX2FkdmFuY2VXYWtldXBUaW1lX25vdGlmeVplcm9IYW5kbGVyX3F1ZXVlRnJvbVplcm9FdmVudHBlbmRpbmdUaW1lcnNfbm90aWZ5RXZlbnRIYW5kbGVyX3F1ZXVlRnJvbVRpbWVvdXRFdmVudGN1cnJlbnRUaW1lX3J1blRpbWVyc292ZXJkdWVtaXNzZWRUaWNrc2ltbWVkaWF0ZUNhbGxiYWNrX3NjaGVkdWxlV2FrZXVwX2NhbmNlbFdha2V1cF9jcmVhdGVUaW1lckhhbmRsZXJfc2h1dGRvd25UaW1lckhhbmRsZXJJc29sYXRlU3Bhd25FeGNlcHRpb25Jc29sYXRlU3Bhd25FeGNlcHRpb246IF9jdXJyZW50SXNvbGF0ZV9yb290VXJpX1BBVVNFX1JFU1VNRV9QSU5HX0tJTExfQUREX0VYSVRfREVMX0VYSVRfQUREX0VSUk9SX0RFTF9FUlJPUl9FUlJPUl9GQVRBTGJlZm9yZU5leHRFdmVudHBhdXNlQ2FwYWJpbGl0eXRlcm1pbmF0ZUNhcGFiaWxpdHlfcGFja2FnZVN1cHBvcnRlZF9zcGF3bkNvbW1vbnJlYWR5UG9ydHJlYWR5TWVzc2FnZWNhcGFiaWxpdGllc1VuYWJsZSB0byBzcGF3biBpc29sYXRlOiBJbnRlcm5hbCBlcnJvcjogdW5leHBlY3RlZCBmb3JtYXQgZm9yIHJlYWR5IG1lc3NhZ2U6IF9zcGF3bkZ1bmN0aW9uSXNvbGF0ZV9zcGF3bkZ1bmN0aW9udG9wTGV2ZWxGdW5jdGlvbnBhdXNlZGVycm9yc0FyZUZhdGFsb25FeGl0X3NwYXduVXJpSXNvbGF0ZV9zcGF3blVyaV9zZW5kT09CSXNvbGF0ZV9zZW5kT09CX2dldERlYnVnTmFtZUlzb2xhdGVfZ2V0RGVidWdOYW1lX2dldEN1cnJlbnRJc29sYXRlcG9ydEFuZENhcGFiaWxpdGllc19nZXRQb3J0QW5kQ2FwYWJpbGl0aWVzT2ZDdXJyZW50SXNvbGF0ZUlzb2xhdGVfZ2V0UG9ydEFuZENhcGFiaWxpdGllc09mQ3VycmVudElzb2xhdGVfZ2V0Q3VycmVudFJvb3RVcmlfZ2V0Q3VycmVudFJvb3RVcmlTdHJJc29sYXRlX2dldEN1cnJlbnRSb290VXJpU3RyMi4zcGFja2FnZXMvIGRpcmVjdG9yeSByZXNvbHV0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRGFydCAyLmhvb2tJc29sYXRlLnBhY2thZ2VSb290SXNvbGF0ZS5wYWNrYWdlQ29uZmlncmVzb2x2ZVBhY2thZ2VVcmlJc29sYXRlLnJlc29sdmVQYWNrYWdlVXJpc3Bhd25Jc29sYXRlLnNwYXduc3Bhd25VcmlhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbkNhbm5vdCBzaW11bHRhbmVvdXNseSByZXF1ZXN0IGF1dG9tYXRpY1BhY2thZ2VSZXNvbHV0aW9uIGFuZCBzcGVjaWZ5IGFwYWNrYWdlUm9vdC5wYWNrYWdlQ29uZmlnLkNhbm5vdCBzaW11bHRhbmVvdXNseSBzcGVjaWZ5IGEgcGFja2FnZVJvb3QgYW5kIGEgcGFja2FnZUNvbmZpZy5zcGF3bmVkVXJpcmVzdW1lQ2FwYWJpbGl0eV9wYXVzZWFkZE9uRXhpdExpc3RlbmVycmVzcG9uc2VQb3J0cmVtb3ZlT25FeGl0TGlzdGVuZXJzZXRFcnJvcnNGYXRhbHByaW9yaXR5YWRkRXJyb3JMaXN0ZW5lcnJlbW92ZUVycm9yTGlzdGVuZXJsaXN0TWVzc2FnZWVycm9yRGVzY3JpcHRpb25zdGFja0Rlc2NyaXB0aW9uUmVjZWl2ZVBvcnRyYXdQb3J0bmV3SGFuZGxlclJlbW90ZUVycm9yX2Rlc2NyaXB0aW9uVHJhbnNmZXJhYmxlVHlwZWREYXRhMi4zLjJmcm9tTGlzdGNodW5rc0NhcGFiaWxpdHlfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrX2lzb2xhdGVTY2hlZHVsZUltbWVkaWF0ZV9ydW5QZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2tfcmVtb3ZlUGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrX2dldElzb2xhdGVTY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmVfc3RhcnRNYWluSXNvbGF0ZV9nZXRTdGFydE1haW5Jc29sYXRlRnVuY3Rpb25fc3RhcnRJc29sYXRlcGFyZW50UG9ydGlzU3Bhd25Vcmlfc2V0dXBIb29rc2RhcnQubWF0aGplbmtpbnNfc21pX2hhc2guZGFydHBvaW50LmRhcnRyYW5kb20uZGFydHJlY3RhbmdsZS5kYXJ0X1JhbmRvbV9rU1RBVEVfTE9fa1NUQVRFX0hJX1BPVzJfMzJfUE9XMl81M19EX1BPVzJfMjdfRDEzNDIxNzcyOC4wX3Bybmdfd2l0aFN0YXRlX25leHRTdGF0ZVJhbmRvbV9uZXh0U3RhdGVNdXN0IGJlIHBvc2l0aXZlIGFuZCA8PSAyXjMycm5kMzJuZXh0RG91YmxlbmV4dEJvb2xfc2V0dXBTZWVkUmFuZG9tX3NldHVwU2VlZF9pbml0aWFsU2VlZFJhbmRvbV9pbml0aWFsU2VlZF9uZXh0U2VlZF9TZWN1cmVSYW5kb21fZ2V0Qnl0ZXNTZWN1cmVSYW5kb21fZ2V0Qnl0ZXNybmRfSmVua2luc1NtaUhhc2hoYXNoNFBvaW50UG9pbnQoZmFjdG9yZGlzdGFuY2VUb3NxdWFyZWREaXN0YW5jZVRvc2VjdXJlX1JlY3RhbmdsZUJhc2VoZWlnaHRib3R0b21SZWN0YW5nbGUgKCB4IHgweTBib3VuZGluZ0JveGNvbnRhaW5zUmVjdGFuZ2xlYW5vdGhlcmNvbnRhaW5zUG9pbnR0b3BMZWZ0dG9wUmlnaHRib3R0b21SaWdodGJvdHRvbUxlZnRSZWN0YW5nbGVmcm9tUG9pbnRzTXV0YWJsZVJlY3RhbmdsZV93aWR0aF9oZWlnaHQyLjcxODI4MTgyODQ1OTA0NWxuMTAyLjMwMjU4NTA5Mjk5NDA0NmxuMjAuNjkzMTQ3MTgwNTU5OTQ1M2xvZzJlMS40NDI2OTUwNDA4ODg5NjM0bG9nMTBlMC40MzQyOTQ0ODE5MDMyNTE4cGkzLjE0MTU5MjY1MzU4OTc5M3NxcnQxXzIwLjcwNzEwNjc4MTE4NjU0NzZzcXJ0MjEuNDE0MjEzNTYyMzczMDk1MV9kb3VibGVQb3dkYXJ0OmNvcmUjX0RvdWJsZV9wb3dNYXRoX2RvdWJsZVBvd19pbnRQb3dfYXRhbjJNYXRoX2F0YW4yX3Npbk1hdGhfc2luX2Nvc01hdGhfY29zX3Rhbk1hdGhfdGFuX2Fjb3NNYXRoX2Fjb3NfYXNpbk1hdGhfYXNpbl9hdGFuTWF0aF9hdGFuX3NxcnRNYXRoX3NxcnRfZXhwTWF0aF9leHBNYXRoX2xvZ2F0YW4ydm06bmV2ZXItaW5saW5lcG93c2lucmFkaWFuc2Nvc3RhbmFjb3Nhc2luYXRhbnNxcnRfY2xhbXBUb1plcm9kYXJ0Lm1pcnJvcnNfSW50ZXJuYWxNaXJyb3JFcnJvcl9tc2dfTG9jYWxNaXJyb3JTeXN0ZW1faXNvbGF0ZV9jb21wdXRlTGlicmFyaWVzTWlycm9yU3lzdGVtX2xpYnJhcmllc19jb21wdXRlSXNvbGF0ZU1pcnJvclN5c3RlbV9pc29sYXRlTWlycm9yU3lzdGVtIGZvciBpc29sYXRlICdfU291cmNlTG9jYXRpb25fTG9jYWxNaXJyb3JfTG9jYWxJc29sYXRlTWlycm9ycm9vdExpYnJhcnlpc0N1cnJlbnRJc29sYXRlTWlycm9yIG9uICdsb2FkVXJpQ2Fubm90IGxvYWQgX2xvYWRVcmlJc29sYXRlTWlycm9yX2xvYWRVcmlfU3ludGhldGljQWNjZXNzb3JzaW1wbGVOYW1laXNDb25zdENvbnN0cnVjdG9yaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yX1N5bnRoZXRpY1NldHRlclBhcmFtZXRlcmhhc0RlZmF1bHRWYWx1ZV9Mb2NhbE9iamVjdE1pcnJvcl9yZWZsZWN0ZWVfaW52b2tlcmVmbGVjdGVlX2ludm9rZUdldHRlcl9pbnZva2VTZXR0ZXJudW1Qb3NpdGlvbmFsQXJndW1lbnRzbnVtTmFtZWRBcmd1bWVudHNzZXRGaWVsZHVud3JhcHBlZHdpdGhvdXRFcXVhbF9Mb2NhbEluc3RhbmNlTWlycm9yaGFzUmVmbGVjdGVlSW5zdGFuY2VNaXJyb3Igb24gSW5zdGFuY2VNaXJyb3JfaW52b2tlSW5zdGFuY2VNaXJyb3JfaW52b2tlR2V0dGVySW5zdGFuY2VNaXJyb3JfaW52b2tlU2V0dGVyX2NvbXB1dGVUeXBlSW5zdGFuY2VNaXJyb3JfY29tcHV0ZVR5cGVfTG9jYWxDbG9zdXJlTWlycm9yX2Z1bmN0aW9uQ2xvc3VyZU1pcnJvciBvbiAnX2NvbXB1dGVGdW5jdGlvbkNsb3N1cmVNaXJyb3JfZnVuY3Rpb25fTG9jYWxUeXBlTWlycm9yX3JlZmxlY3RlZFR5cGVfTG9jYWxDbGFzc01pcnJvcl9zaW1wbGVOYW1lX293bmVyX2lzR2VuZXJpY19pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbl9pc0dlbmVyaWNEZWNsYXJhdGlvbl9pbnN0YW50aWF0b3JfcXVhbGlmaWVkTmFtZV90cnVlU3VwZXJjbGFzc0ZpZWxkX3N1cGVyaW50ZXJmYWNlc19jYWNoZWRTdGF0aWNNZW1iZXJzX2NhY2hlZEluc3RhbmNlTWVtYmVyc19kZWNsYXJhdGlvbnNyZWZsZWN0ZWRUeXBlaGFzUmVmbGVjdGVkVHlwZURlY2xhcmF0aW9ucyBvZiBnZW5lcmljcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlX21peGluQXBwbGljYXRpb25OYW1lX3RydWVTdXBlcmNsYXNzaXNPcmlnaW5hbERlY2xhcmF0aW9uc3VwZXJpbnRlcmZhY2VzaW50ZXJmYWNlVHlwZXNpbnRlcmZhY2VNaXJyb3JzbWl4aW5UeXBlc3RhdGljTWVtYmVyc2luc3RhbmNlTWVtYmVyc2RlY2xzX2NvbXB1dGVNZW1iZXJzX2NvbXB1dGVDb25zdHJ1Y3RvcnNzdHJpbmdOYW1lX3BhdGNoQ29uc3RydWN0b3JOYW1lX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbm9yaWdpbmFsRGVjbGFyYXRpb25taXJyb3JDbGFzc01pcnJvciBvbiAnaXNBc3NpZ25hYmxlVG9vdGhlclJlZmxlY3RlZFR5cGVvdGhlckRlY2xhcmF0aW9uX2xpYnJhcnlVcmlDbGFzc01pcnJvcl9saWJyYXJ5VXJpX3N1cGVydHlwZUNsYXNzTWlycm9yX3N1cGVydHlwZV9zdXBlcnR5cGVJbnN0YW50aWF0ZWRDbGFzc01pcnJvcl9zdXBlcnR5cGVfaW5zdGFudGlhdGVkX25hdGl2ZUludGVyZmFjZXNDbGFzc01pcnJvcl9pbnRlcmZhY2VzX25hdGl2ZUludGVyZmFjZXNJbnN0YW50aWF0ZWRDbGFzc01pcnJvcl9pbnRlcmZhY2VzX2luc3RhbnRpYXRlZF9uYXRpdmVNaXhpbkNsYXNzTWlycm9yX21peGluX25hdGl2ZU1peGluSW5zdGFudGlhdGVkQ2xhc3NNaXJyb3JfbWl4aW5faW5zdGFudGlhdGVkQ2xhc3NNaXJyb3JfbWVtYmVyc0NsYXNzTWlycm9yX2NvbnN0cnVjdG9yc0NsYXNzTWlycm9yX2ludm9rZUNsYXNzTWlycm9yX2ludm9rZUdldHRlckNsYXNzTWlycm9yX2ludm9rZVNldHRlcl9pbnZva2VDb25zdHJ1Y3RvckNsYXNzTWlycm9yX2ludm9rZUNvbnN0cnVjdG9yX0NsYXNzTWlycm9yX3R5cGVfdmFyaWFibGVzQ2xhc3NNaXJyb3JfdHlwZV92YXJpYWJsZXNfY29tcHV0ZVR5cGVBcmd1bWVudHNDbGFzc01pcnJvcl90eXBlX2FyZ3VtZW50c19Mb2NhbEZ1bmN0aW9uVHlwZU1pcnJvcl9mdW5jdGlvblJlZmxlY3RlZV9jYWxsTWV0aG9kX3BhcmFtZXRlcnNfRnVuY3Rpb25UeXBlTWlycm9yX2NhbGxfbWV0aG9kX0Z1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzRnVuY3Rpb25UeXBlTWlycm9yIG9uICdGdW5jdGlvblR5cGVNaXJyb3JfY2FsbF9tZXRob2RmdW5jdGlvblJlZmxlY3RlZV9GdW5jdGlvblR5cGVNaXJyb3JfcmV0dXJuX3R5cGVGdW5jdGlvblR5cGVNaXJyb3JfcmV0dXJuX3R5cGVGdW5jdGlvblR5cGVNaXJyb3JfcGFyYW1ldGVyc19Mb2NhbERlY2xhcmF0aW9uTWlycm9yX0xvY2FsVHlwZVZhcmlhYmxlTWlycm9yX3VwcGVyQm91bmRUeXBlIHZhcmlhYmxlcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlVHlwZVZhcmlhYmxlTWlycm9yIG9uICdfVHlwZVZhcmlhYmxlTWlycm9yX293bmVyVHlwZVZhcmlhYmxlTWlycm9yX293bmVyX1R5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZFR5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZF9Mb2NhbFR5cGVkZWZNaXJyb3JfcmVmZXJlbnRyZWZlcmVudFR5cGVkZWZNaXJyb3Igb24gJ19uYXRpdmVSZWZlcmVudFR5cGVkZWZNaXJyb3JfcmVmZXJlbnRfbmF0aXZlRGVjbGFyYXRpb25UeXBlZGVmTWlycm9yX2RlY2xhcmF0aW9uX0xvY2FsTGlicmFyeU1pcnJvcl9jYWNoZWRMaWJyYXJ5RGVwZW5kZW5jaWVzTGlicmFyeU1pcnJvciBvbiAnbGlicmFyeURlcGVuZGVuY2llc19saWJyYXJ5RGVwZW5kZW5jaWVzTGlicmFyeU1pcnJvcl9saWJyYXJ5RGVwZW5kZW5jaWVzTGlicmFyeU1pcnJvcl9pbnZva2VMaWJyYXJ5TWlycm9yX2ludm9rZUdldHRlckxpYnJhcnlNaXJyb3JfaW52b2tlU2V0dGVyTGlicmFyeU1pcnJvcl9tZW1iZXJzX0xvY2FsTGlicmFyeURlcGVuZGVuY3lNaXJyb3JfdGFyZ2V0TWlycm9yT3JQcmVmaXhtdXRhYmxlQ29tYmluYXRvcnNwcmVmaXhTdHJpbmd1bndyYXBwZWRNZXRhZGF0YW1pcnJvck9yTnVsbHNhdmVkUHJlZml4X3RyeVVwZ3JhZGVQcmVmaXhMaWJyYXJ5TWlycm9yX2Zyb21QcmVmaXhfTG9jYWxDb21iaW5hdG9yTWlycm9yaWRlbnRpZmllcnNpZGVudGlmaWVyU3RyaW5nX0xvY2FsTWV0aG9kTWlycm9yX2tpbmRGbGFnc2tBYnN0cmFjdGtHZXR0ZXJrU2V0dGVya0NvbnN0cnVjdG9ya0NvbnN0Q3RvcmtHZW5lcmF0aXZlQ3RvcmtSZWRpcmVjdGluZ0N0b3JrRmFjdG9yeUN0b3JrRXh0ZXJuYWxrU3ludGhldGljX29wZXJhdG9yc19jb25zdHJ1Y3Rvck5hbWVfTWV0aG9kTWlycm9yX3BhcmFtZXRlcnNJbnRlcm5hbCBlcnJvciBpbiBNZXRob2RNaXJyb3IuY29uc3RydWN0b3JOYW1lOiBtYWxmb3JtZWQgbmFtZSA8ZGVmaW5pbmdMaWJyYXJ5b3duZXJOYW1lY25NZXRob2RNaXJyb3Igb24gJ19NZXRob2RNaXJyb3Jfb3duZXJNZXRob2RNaXJyb3Jfb3duZXJfTWV0aG9kTWlycm9yX3JldHVybl90eXBlTWV0aG9kTWlycm9yX3JldHVybl90eXBlTWV0aG9kTWlycm9yX3BhcmFtZXRlcnNfTWV0aG9kTWlycm9yX3NvdXJjZU1ldGhvZE1pcnJvcl9zb3VyY2VfTG9jYWxWYXJpYWJsZU1pcnJvcnVuZXhwZWN0ZWQgb3duZXIgVmFyaWFibGVNaXJyb3Igb24gJ19WYXJpYWJsZU1pcnJvcl90eXBlVmFyaWFibGVNaXJyb3JfdHlwZV9Mb2NhbFBhcmFtZXRlck1pcnJvcl91bm1pcnJvcmVkTWV0YWRhdGFfZGVmYXVsdFZhbHVlUmVmbGVjdGVlUGFyYW1ldGVyTWlycm9yLmxvY2F0aW9uIHVuaW1wbGVtZW50ZWRQYXJhbWV0ZXJNaXJyb3Igb24gJ19QYXJhbWV0ZXJNaXJyb3JfdHlwZVBhcmFtZXRlck1pcnJvcl90eXBlX1NwZWNpYWxUeXBlTWlycm9ydm9pZCBoYXMgbm8gcmVmbGVjdGVkIHR5cGVUeXBlTWlycm9yIG9uICdfTWlycm9yc19jdXJyZW50TWlycm9yU3lzdGVtX2RlY2xhcmF0aW9uQ2FjaGVDbGFzc01pcnJvcl9pbnN0YW50aWF0aW9uQ2FjaGVUeXBlTWlycm9yY3VycmVudE1pcnJvclN5c3RlbXJlZmxlY3RfbWFrZUxvY2FsQ2xhc3NNaXJyb3JNaXJyb3JzX21ha2VMb2NhbENsYXNzTWlycm9yX21ha2VMb2NhbFR5cGVNaXJyb3JNaXJyb3JzX21ha2VMb2NhbFR5cGVNaXJyb3JfaW5zdGFudGlhdGVHZW5lcmljVHlwZU1pcnJvcnNfaW5zdGFudGlhdGVHZW5lcmljVHlwZXJlZmxlY3RDbGFzc2NsYXNzTWlycm9ycmVmbGVjdFR5cGV0eXBlTWlycm9yX2luc3RhbnRpYXRlVHlwZVR5cGUgYXJndW1lbnRzIGxpc3QgY2Fubm90IGJlIGVtcHR5Ll9NaXJyb3JSZWZlcmVuY2VNaXJyb3JSZWZlcmVuY2VfZXF1YWxzTWlycm9yU3lzdGVtX21hbmdsZU5hbWVNaXJyb3JzX21hbmdsZU5hbWVmaW5kTGlicmFyeVRoZXJlIGFyZSBtdWx0aXBsZSBsaWJyYXJpZXMgbmFtZWQgVGhlcmUgaXMgbm8gbGlicmFyeSBuYW1lZCAnZ2V0U3ltYm9sTWlycm9ySXNvbGF0ZU1pcnJvckRlY2xhcmF0aW9uTWlycm9yT2JqZWN0TWlycm9ySW5zdGFuY2VNaXJyb3JDbG9zdXJlTWlycm9yTGlicmFyeU1pcnJvckxpYnJhcnlEZXBlbmRlbmN5TWlycm9yQ29tYmluYXRvck1pcnJvckZ1bmN0aW9uVHlwZU1pcnJvclR5cGVWYXJpYWJsZU1pcnJvclR5cGVkZWZNaXJyb3JNZXRob2RNaXJyb3JWYXJpYWJsZU1pcnJvclBhcmFtZXRlck1pcnJvcnRyaW1tZWRUZXh0aXNEb2NDb21tZW50TWlycm9yc1VzZWRObyBsb25nZXIgaGFzIGFueSBlZmZlY3QuIFdpbGwgYmUgcmVtb3ZlZCBpbiBhIGxhdGVyIHJlbGVhc2Uuc3ltYm9sc21ldGFUYXJnZXRzb3ZlcnJpZGVfZGlydHlfbl9jb21wdXRlUXVhbGlmaWVkTmFtZV9tYWtlU2lnbmF0dXJlU3RyaW5nZm91bmRfb3B0aW9uYWxfcG9zaXRpb25hbGZvdW5kX29wdGlvbmFsX25hbWVkRGVjbGFyYXRpb25NaXJyb3JfbG9jYXRpb25EZWNsYXJhdGlvbk1pcnJvcl9tZXRhZGF0YV9zdWJ0eXBlVGVzdFR5cGVNaXJyb3Jfc3VidHlwZVRlc3RfYXNTZXR0ZXJkYXJ0LnByb2ZpbGVyRGFydCBTREsgMS4xMmRhcnQudHlwZWRfZGF0YXVubW9kaWZpYWJsZV90eXBlZF9kYXRhLmRhcnRfVHlwZWRMaXN0QmFzZUNhbm5vdCByZXNpemUgYSBmaXhlZC1sZW5ndGggbGlzdFR5cGVkRGF0YV9zZXRSYW5nZXN0YXJ0SW5CeXRlc3N0YXJ0RnJvbUluQnl0ZXN0b0NpZGZyb21DaWRfSW50TGlzdE1peGluQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3RfVHlwZWRJbnRMaXN0TWl4aW5TcGF3bmVkVHlwZV9jcmVhdGVMaXN0ZnJvbUFzVHlwZWRMaXN0ZnJvbUFzTGlzdHRlbXBCdWZmZXJfRG91YmxlTGlzdE1peGluX1R5cGVkRG91YmxlTGlzdE1peGluX0Zsb2F0MzJ4NExpc3RNaXhpblNJTUQgZG9uJ3QgaGF2ZSBkZWZhdWx0IGNvbXBhcmUuX0ludDMyeDRMaXN0TWl4aW5fRmxvYXQ2NHgyTGlzdE1peGluX0J5dGVCdWZmZXJfTmV3YXNJbnQ4TGlzdGFzVWludDhDbGFtcGVkTGlzdGFzSW50MTZMaXN0YXNVaW50MTZMaXN0YXNJbnQzMkxpc3Rhc1VpbnQzMkxpc3Rhc0ludDY0TGlzdGFzVWludDY0TGlzdGFzRmxvYXQzMkxpc3Rhc0Zsb2F0NjRMaXN0YXNGbG9hdDMyeDRMaXN0YXNJbnQzMng0TGlzdGFzRmxvYXQ2NHgyTGlzdF9UeXBlZExpc3RUeXBlZERhdGFfbGVuZ3RoX2dldEludDhUeXBlZERhdGFfR2V0SW50OF9zZXRJbnQ4VHlwZWREYXRhX1NldEludDhfZ2V0VWludDhUeXBlZERhdGFfR2V0VWludDhfc2V0VWludDhUeXBlZERhdGFfU2V0VWludDhfZ2V0SW50MTZUeXBlZERhdGFfR2V0SW50MTZfc2V0SW50MTZUeXBlZERhdGFfU2V0SW50MTZfZ2V0VWludDE2VHlwZWREYXRhX0dldFVpbnQxNl9zZXRVaW50MTZUeXBlZERhdGFfU2V0VWludDE2X2dldEludDMyVHlwZWREYXRhX0dldEludDMyX3NldEludDMyVHlwZWREYXRhX1NldEludDMyX2dldFVpbnQzMlR5cGVkRGF0YV9HZXRVaW50MzJfc2V0VWludDMyVHlwZWREYXRhX1NldFVpbnQzMl9nZXRJbnQ2NFR5cGVkRGF0YV9HZXRJbnQ2NF9zZXRJbnQ2NFR5cGVkRGF0YV9TZXRJbnQ2NF9nZXRVaW50NjRUeXBlZERhdGFfR2V0VWludDY0X3NldFVpbnQ2NFR5cGVkRGF0YV9TZXRVaW50NjRfZ2V0RmxvYXQzMlR5cGVkRGF0YV9HZXRGbG9hdDMyX3NldEZsb2F0MzJUeXBlZERhdGFfU2V0RmxvYXQzMl9nZXRGbG9hdDY0VHlwZWREYXRhX0dldEZsb2F0NjRfc2V0RmxvYXQ2NFR5cGVkRGF0YV9TZXRGbG9hdDY0X2dldEZsb2F0MzJ4NFR5cGVkRGF0YV9HZXRGbG9hdDMyeDRfc2V0RmxvYXQzMng0VHlwZWREYXRhX1NldEZsb2F0MzJ4NF9nZXRJbnQzMng0VHlwZWREYXRhX0dldEludDMyeDRfc2V0SW50MzJ4NFR5cGVkRGF0YV9TZXRJbnQzMng0X2dldEZsb2F0NjR4MlR5cGVkRGF0YV9HZXRGbG9hdDY0eDJfc2V0RmxvYXQ2NHgyVHlwZWREYXRhX1NldEZsb2F0NjR4Ml9zZXRDb2RlVW5pdHNieXRlU3RhcnRza2lwQ291bnQgKyBsZW5ndGhfX0ludDhMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fSW50OExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQ4TGlzdF9fVWludDhMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fVWludDhMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDhMaXN0X19VaW50OENsYW1wZWRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fVWludDhDbGFtcGVkTGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQ4Q2xhbXBlZExpc3RfX0ludDE2TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0ludDE2TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDE2TGlzdF9nZXRJbmRleGVkSW50MTZfc2V0SW5kZXhlZEludDE2X19VaW50MTZMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fVWludDE2TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQxNkxpc3RfZ2V0SW5kZXhlZFVpbnQxNl9zZXRJbmRleGVkVWludDE2X19JbnQzMkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19JbnQzMkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQzMkxpc3RfZ2V0SW5kZXhlZEludDMyX3NldEluZGV4ZWRJbnQzMl9fVWludDMyTGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX1VpbnQzMkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50MzJMaXN0X2dldEluZGV4ZWRVaW50MzJfc2V0SW5kZXhlZFVpbnQzMl9fSW50NjRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fSW50NjRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50NjRMaXN0X2dldEluZGV4ZWRJbnQ2NF9zZXRJbmRleGVkSW50NjRfX1VpbnQ2NExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19VaW50NjRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDY0TGlzdF9nZXRJbmRleGVkVWludDY0X3NldEluZGV4ZWRVaW50NjRfX0Zsb2F0MzJMaXN0Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbl9fRmxvYXQzMkxpc3QmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluJl9UeXBlZERvdWJsZUxpc3RNaXhpbl9GbG9hdDMyTGlzdF9nZXRJbmRleGVkRmxvYXQzMl9zZXRJbmRleGVkRmxvYXQzMl9fRmxvYXQ2NExpc3QmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluX19GbG9hdDY0TGlzdCZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW4mX1R5cGVkRG91YmxlTGlzdE1peGluX0Zsb2F0NjRMaXN0X2dldEluZGV4ZWRGbG9hdDY0X3NldEluZGV4ZWRGbG9hdDY0X19GbG9hdDMyeDRMaXN0Jl9UeXBlZExpc3QmX0Zsb2F0MzJ4NExpc3RNaXhpbl9GbG9hdDMyeDRMaXN0X2dldEluZGV4ZWRGbG9hdDMyeDRfc2V0SW5kZXhlZEZsb2F0MzJ4NF9fSW50MzJ4NExpc3QmX1R5cGVkTGlzdCZfSW50MzJ4NExpc3RNaXhpbl9JbnQzMng0TGlzdF9nZXRJbmRleGVkSW50MzJ4NF9zZXRJbmRleGVkSW50MzJ4NF9fRmxvYXQ2NHgyTGlzdCZfVHlwZWRMaXN0Jl9GbG9hdDY0eDJMaXN0TWl4aW5fRmxvYXQ2NHgyTGlzdF9nZXRJbmRleGVkRmxvYXQ2NHgyX3NldEluZGV4ZWRGbG9hdDY0eDJfX0V4dGVybmFsSW50OEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxJbnQ4QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbEludDhBcnJheV9fRXh0ZXJuYWxVaW50OEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxVaW50OEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxVaW50OEFycmF5X19FeHRlcm5hbFVpbnQ4Q2xhbXBlZEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxVaW50OENsYW1wZWRBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsVWludDhDbGFtcGVkQXJyYXlfX0V4dGVybmFsSW50MTZBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsSW50MTZBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsSW50MTZBcnJheV9fRXh0ZXJuYWxVaW50MTZBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsVWludDE2QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbFVpbnQxNkFycmF5X19FeHRlcm5hbEludDMyQXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbEludDMyQXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbEludDMyQXJyYXlfX0V4dGVybmFsVWludDMyQXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbFVpbnQzMkFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxVaW50MzJBcnJheV9fRXh0ZXJuYWxJbnQ2NEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxJbnQ2NEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxJbnQ2NEFycmF5X19FeHRlcm5hbFVpbnQ2NEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxVaW50NjRBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsVWludDY0QXJyYXlfX0V4dGVybmFsRmxvYXQzMkFycmF5Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbl9fRXh0ZXJuYWxGbG9hdDMyQXJyYXkmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluJl9UeXBlZERvdWJsZUxpc3RNaXhpbl9FeHRlcm5hbEZsb2F0MzJBcnJheV9fRXh0ZXJuYWxGbG9hdDY0QXJyYXkmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluX19FeHRlcm5hbEZsb2F0NjRBcnJheSZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW4mX1R5cGVkRG91YmxlTGlzdE1peGluX0V4dGVybmFsRmxvYXQ2NEFycmF5X19FeHRlcm5hbEZsb2F0MzJ4NEFycmF5Jl9UeXBlZExpc3QmX0Zsb2F0MzJ4NExpc3RNaXhpbl9FeHRlcm5hbEZsb2F0MzJ4NEFycmF5X19FeHRlcm5hbEludDMyeDRBcnJheSZfVHlwZWRMaXN0Jl9JbnQzMng0TGlzdE1peGluX0V4dGVybmFsSW50MzJ4NEFycmF5X19FeHRlcm5hbEZsb2F0NjR4MkFycmF5Jl9UeXBlZExpc3QmX0Zsb2F0NjR4Mkxpc3RNaXhpbl9FeHRlcm5hbEZsb2F0NjR4MkFycmF5X0Zsb2F0MzJ4NEZsb2F0MzJ4NF9hZGRGbG9hdDMyeDRfbmVnYXRlRmxvYXQzMng0X3N1YkZsb2F0MzJ4NF9tdWxGbG9hdDMyeDRfZGl2RmxvYXQzMng0X2NtcGx0bGVzc1RoYW5PckVxdWFsRmxvYXQzMng0X2NtcGx0ZUZsb2F0MzJ4NF9jbXBndGdyZWF0ZXJUaGFuT3JFcXVhbEZsb2F0MzJ4NF9jbXBndGVGbG9hdDMyeDRfY21wZXF1YWxub3RFcXVhbEZsb2F0MzJ4NF9jbXBuZXF1YWxzY2FsZUZsb2F0MzJ4NF9zY2FsZUZsb2F0MzJ4NF9hYnNjbGFtcEZsb2F0MzJ4NF9jbGFtcEZsb2F0MzJ4NF9nZXRYRmxvYXQzMng0X2dldFlGbG9hdDMyeDRfZ2V0WkZsb2F0MzJ4NF9nZXRXc2lnbk1hc2tGbG9hdDMyeDRfZ2V0U2lnbk1hc2tGbG9hdDMyeDRfc2h1ZmZsZXNodWZmbGVNaXhGbG9hdDMyeDRfc2h1ZmZsZU1peHp3d2l0aFhGbG9hdDMyeDRfc2V0WHdpdGhZRmxvYXQzMng0X3NldFl3aXRoWkZsb2F0MzJ4NF9zZXRad2l0aFdGbG9hdDMyeDRfc2V0V0Zsb2F0MzJ4NF9taW5GbG9hdDMyeDRfbWF4RmxvYXQzMng0X3NxcnRyZWNpcHJvY2FsRmxvYXQzMng0X3JlY2lwcm9jYWxyZWNpcHJvY2FsU3FydEZsb2F0MzJ4NF9yZWNpcHJvY2FsU3FydF9JbnQzMng0SW50MzJ4NF9vckludDMyeDRfYW5kSW50MzJ4NF94b3JJbnQzMng0X2FkZEludDMyeDRfc3ViSW50MzJ4NF9nZXRYSW50MzJ4NF9nZXRZSW50MzJ4NF9nZXRaSW50MzJ4NF9nZXRXSW50MzJ4NF9nZXRTaWduTWFza0ludDMyeDRfc2h1ZmZsZUludDMyeDRfc2h1ZmZsZU1peEludDMyeDRfc2V0WEludDMyeDRfc2V0WUludDMyeDRfc2V0WkludDMyeDRfc2V0V2ZsYWdYSW50MzJ4NF9nZXRGbGFnWGZsYWdZSW50MzJ4NF9nZXRGbGFnWWZsYWdaSW50MzJ4NF9nZXRGbGFnWmZsYWdXSW50MzJ4NF9nZXRGbGFnV3dpdGhGbGFnWEludDMyeDRfc2V0RmxhZ1h3aXRoRmxhZ1lJbnQzMng0X3NldEZsYWdZd2l0aEZsYWdaSW50MzJ4NF9zZXRGbGFnWndpdGhGbGFnV0ludDMyeDRfc2V0RmxhZ1dJbnQzMng0X3NlbGVjdF9GbG9hdDY0eDJGbG9hdDY0eDJfYWRkRmxvYXQ2NHgyX25lZ2F0ZUZsb2F0NjR4Ml9zdWJGbG9hdDY0eDJfbXVsRmxvYXQ2NHgyX2RpdkZsb2F0NjR4Ml9zY2FsZUZsb2F0NjR4Ml9hYnNGbG9hdDY0eDJfY2xhbXBGbG9hdDY0eDJfZ2V0WEZsb2F0NjR4Ml9nZXRZRmxvYXQ2NHgyX2dldFNpZ25NYXNrRmxvYXQ2NHgyX3NldFhGbG9hdDY0eDJfc2V0WUZsb2F0NjR4Ml9taW5GbG9hdDY0eDJfbWF4RmxvYXQ2NHgyX3NxcnRfVHlwZWRMaXN0SXRlcmF0b3JfYXJyYXlfVHlwZWRMaXN0Vmlld190eXBlZERhdGF2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGVUeXBlZERhdGFWaWV3X3R5cGVkRGF0YVR5cGVkRGF0YVZpZXdfb2Zmc2V0SW5CeXRlc1R5cGVkRGF0YVZpZXdfbGVuZ3RoX19JbnQ4QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX0ludDhBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50OEFycmF5Vmlld1R5cGVkRGF0YVZpZXdfSW50OEFycmF5Vmlld19uZXdfX1VpbnQ4QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX1VpbnQ4QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQ4QXJyYXlWaWV3VHlwZWREYXRhVmlld19VaW50OEFycmF5Vmlld19uZXdfX1VpbnQ4Q2xhbXBlZEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19VaW50OENsYW1wZWRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDhDbGFtcGVkQXJyYXlWaWV3VHlwZWREYXRhVmlld19VaW50OENsYW1wZWRBcnJheVZpZXdfbmV3X19JbnQxNkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19JbnQxNkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQxNkFycmF5Vmlld1R5cGVkRGF0YVZpZXdfSW50MTZBcnJheVZpZXdfbmV3X19VaW50MTZBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fVWludDE2QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQxNkFycmF5Vmlld1R5cGVkRGF0YVZpZXdfVWludDE2QXJyYXlWaWV3X25ld19fSW50MzJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fSW50MzJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50MzJBcnJheVZpZXdUeXBlZERhdGFWaWV3X0ludDMyQXJyYXlWaWV3X25ld19fVWludDMyQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX1VpbnQzMkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50MzJBcnJheVZpZXdUeXBlZERhdGFWaWV3X1VpbnQzMkFycmF5Vmlld19uZXdfX0ludDY0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX0ludDY0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDY0QXJyYXlWaWV3VHlwZWREYXRhVmlld19JbnQ2NEFycmF5Vmlld19uZXdfX1VpbnQ2NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19VaW50NjRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDY0QXJyYXlWaWV3VHlwZWREYXRhVmlld19VaW50NjRBcnJheVZpZXdfbmV3X19GbG9hdDMyQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9Eb3VibGVMaXN0TWl4aW5fX0Zsb2F0MzJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0RvdWJsZUxpc3RNaXhpbiZfVHlwZWREb3VibGVMaXN0TWl4aW5fRmxvYXQzMkFycmF5Vmlld1R5cGVkRGF0YVZpZXdfRmxvYXQzMkFycmF5Vmlld19uZXdfX0Zsb2F0NjRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0RvdWJsZUxpc3RNaXhpbl9fRmxvYXQ2NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfRG91YmxlTGlzdE1peGluJl9UeXBlZERvdWJsZUxpc3RNaXhpbl9GbG9hdDY0QXJyYXlWaWV3VHlwZWREYXRhVmlld19GbG9hdDY0QXJyYXlWaWV3X25ld19fRmxvYXQzMng0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9GbG9hdDMyeDRMaXN0TWl4aW5fRmxvYXQzMng0QXJyYXlWaWV3VHlwZWREYXRhVmlld19GbG9hdDMyeDRBcnJheVZpZXdfbmV3X19JbnQzMng0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnQzMng0TGlzdE1peGluX0ludDMyeDRBcnJheVZpZXdUeXBlZERhdGFWaWV3X0ludDMyeDRBcnJheVZpZXdfbmV3X19GbG9hdDY0eDJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0Zsb2F0NjR4Mkxpc3RNaXhpbl9GbG9hdDY0eDJBcnJheVZpZXdUeXBlZERhdGFWaWV3X0Zsb2F0NjR4MkFycmF5Vmlld19uZXdfQnl0ZURhdGFWaWV3VHlwZWREYXRhVmlld19CeXRlRGF0YVZpZXdfbmV3Z2V0SW50OHNldEludDhnZXRVaW50OHNldFVpbnQ4Z2V0SW50MTZzZXRJbnQxNmdldEludDMyc2V0SW50MzJnZXRJbnQ2NHNldEludDY0Z2V0VWludDY0c2V0VWludDY0Z2V0RmxvYXQzMnNldEZsb2F0MzJnZXRGbG9hdDMyeDRzZXRGbG9hdDMyeDRfVHlwZWRJbnRMaXN0X1R5cGVkRmxvYXRMaXN0RW5kaWFuX2xpdHRsZUVuZGlhbmJpZ2xpdHRsZUJ5dGVEYXRhX3ZpZXd0eXBlZERhdGFJbnQ4TGlzdGJ5dGVzUGVyRWxlbWVudFR5cGVkRGF0YV9JbnQ4QXJyYXlfbmV3VHlwZWREYXRhX1VpbnQ4QXJyYXlfbmV3VWludDhDbGFtcGVkTGlzdFR5cGVkRGF0YV9VaW50OENsYW1wZWRBcnJheV9uZXdJbnQxNkxpc3RUeXBlZERhdGFfSW50MTZBcnJheV9uZXdUeXBlZERhdGFfVWludDE2QXJyYXlfbmV3VHlwZWREYXRhX0ludDMyQXJyYXlfbmV3VHlwZWREYXRhX1VpbnQzMkFycmF5X25ld0ludDY0TGlzdFR5cGVkRGF0YV9JbnQ2NEFycmF5X25ld1VpbnQ2NExpc3RUeXBlZERhdGFfVWludDY0QXJyYXlfbmV3RmxvYXQzMkxpc3RUeXBlZERhdGFfRmxvYXQzMkFycmF5X25ld0Zsb2F0NjRMaXN0VHlwZWREYXRhX0Zsb2F0NjRBcnJheV9uZXdGbG9hdDMyeDRMaXN0VHlwZWREYXRhX0Zsb2F0MzJ4NEFycmF5X25ld0ludDMyeDRMaXN0VHlwZWREYXRhX0ludDMyeDRBcnJheV9uZXdGbG9hdDY0eDJMaXN0VHlwZWREYXRhX0Zsb2F0NjR4MkFycmF5X25ld0Zsb2F0MzJ4NHh4eHh4eHh5eHh4enh4eHd4eHl4eHh5eXh4eXp4eHl3eHh6eHh4enl4eHp6eHh6d3h4d3h4eHd5eHh3enh4d3d4eXh4eHl4eXh5eHp4eXh3eHl5eHh5eXl4eXl6eHl5d3h5enh4eXp5eHl6enh5end4eXd4eHl3eXh5d3p4eXd3eHp4eHh6eHl4enh6eHp4d3h6eXh4enl5eHp5enh6eXd4enp4eHp6eXh6enp4enp3eHp3eHh6d3l4end6eHp3d3h3eHh4d3h5eHd4enh3eHd4d3l4eHd5eXh3eXp4d3l3eHd6eHh3enl4d3p6eHd6d3h3d3h4d3d5eHd3enh3d3d5eHh4eXh4eXl4eHp5eHh3eXh5eHl4eXl5eHl6eXh5d3l4enh5eHp5eXh6enl4end5eHd4eXh3eXl4d3p5eHd3eXl4eHl5eHl5eXh6eXl4d3l5eXh5eXl5eXl5enl5eXd5eXp4eXl6eXl5enp5eXp3eXl3eHl5d3l5eXd6eXl3d3l6eHh5enh5eXp4enl6eHd5enl4eXp5eXl6eXp5enl3eXp6eHl6enl5enp6eXp6d3l6d3h5end5eXp3enl6d3d5d3h4eXd4eXl3eHp5d3h3eXd5eHl3eXl5d3l6eXd5d3l3enh5d3p5eXd6enl3end5d3d4eXd3eXl3d3p5d3d3enh4eHp4eHl6eHh6enh4d3p4eXh6eHl5enh5enp4eXd6eHp4enh6eXp4enp6eHp3enh3eHp4d3l6eHd6enh3d3p5eHh6eXh5enl4enp5eHd6eXl4enl5eXp5eXp6eXl3enl6eHp5enl6eXp6enl6d3p5d3h6eXd5enl3enp5d3d6enh4enp4eXp6eHp6enh3enp5eHp6eXl6enl6enp5d3p6enh6enp5enp6enp6end6end4enp3eXp6d3p6end3end4eHp3eHl6d3h6end4d3p3eXh6d3l5end5enp3eXd6d3p4end6eXp3enp6d3p3end3eHp3d3l6d3d6end3d3d4eHh3eHh5d3h4end4eHd3eHl4d3h5eXd4eXp3eHl3d3h6eHd4enl3eHp6d3h6d3d4d3h3eHd5d3h3end4d3d3eXh4d3l4eXd5eHp3eXh3d3l5eHd5eXl3eXl6d3l5d3d5enh3eXp5d3l6end5end3eXd4d3l3eXd5d3p3eXd3d3p4eHd6eHl3enh6d3p4d3d6eXh3enl5d3p5end6eXd3enp4d3p6eXd6enp3enp3d3p3eHd6d3l3end6d3p3d3d3eHh3d3h5d3d4end3eHd3d3l4d3d5eXd3eXp3d3l3d3d6eHd3enl3d3p6d3d6d3d3d3h3d3d5d3d3end3d3dGbG9hdDMyeDRfZnJvbURvdWJsZXNzcGxhdEZsb2F0MzJ4NF9zcGxhdHplcm9GbG9hdDMyeDRfemVyb2Zyb21JbnQzMng0Qml0c0Zsb2F0MzJ4NF9mcm9tSW50MzJ4NEJpdHNmcm9tRmxvYXQ2NHgyRmxvYXQzMng0X2Zyb21GbG9hdDY0eDJJbnQzMng0SW50MzJ4NF9mcm9tSW50c0ludDMyeDRfZnJvbUJvb2xzZnJvbUZsb2F0MzJ4NEJpdHNJbnQzMng0X2Zyb21GbG9hdDMyeDRCaXRzRmxvYXQ2NHgyRmxvYXQ2NHgyX2Zyb21Eb3VibGVzRmxvYXQ2NHgyX3NwbGF0RmxvYXQ2NHgyX3plcm9mcm9tRmxvYXQzMng0RmxvYXQ2NHgyX2Zyb21GbG9hdDMyeDRVbm1vZGlmaWFibGVCeXRlQnVmZmVyVmlld1VubW9kaWZpYWJsZUJ5dGVEYXRhVmlld0FuIFVubW9kaWZpYWJsZUJ5dGVEYXRhVmlldyBtYXkgbm90IGJlIG1vZGlmaWVkX1VubW9kaWZpYWJsZUxpc3RNaXhpblREc3VibGlzdExlbmd0aF9Vbm1vZGlmaWFibGVVaW50OExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVVaW50OExpc3RWaWV3X1VubW9kaWZpYWJsZUludDhMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50OExpc3RWaWV3X1VubW9kaWZpYWJsZVVpbnQ4Q2xhbXBlZExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVVaW50OENsYW1wZWRMaXN0Vmlld19Vbm1vZGlmaWFibGVVaW50MTZMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlVWludDE2TGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50MTZMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50MTZMaXN0Vmlld19Vbm1vZGlmaWFibGVVaW50MzJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlVWludDMyTGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50MzJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50MzJMaXN0Vmlld19Vbm1vZGlmaWFibGVVaW50NjRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlVWludDY0TGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50NjRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50NjRMaXN0Vmlld19Vbm1vZGlmaWFibGVJbnQzMng0TGlzdFZpZXcmVW5tb2RpZmlhYmxlTGlzdEJhc2UmX1VubW9kaWZpYWJsZUxpc3RNaXhpblVubW9kaWZpYWJsZUludDMyeDRMaXN0Vmlld19Vbm1vZGlmaWFibGVGbG9hdDMyeDRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQzMng0TGlzdFZpZXdfVW5tb2RpZmlhYmxlRmxvYXQ2NHgyTGlzdFZpZXcmVW5tb2RpZmlhYmxlTGlzdEJhc2UmX1VubW9kaWZpYWJsZUxpc3RNaXhpblVubW9kaWZpYWJsZUZsb2F0NjR4Mkxpc3RWaWV3X1VubW9kaWZpYWJsZUZsb2F0MzJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQzMkxpc3RWaWV3X1VubW9kaWZpYWJsZUZsb2F0NjRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQ2NExpc3RWaWV3X2NvbnZVMzJfY29udlU2NF9jb252RjMyX2NvbnZGNjRfYnl0ZVN3YXAxNl9ieXRlU3dhcDMyNDI3ODI1NTM2MDQyOTQ5MDE3NjBfYnl0ZVN3YXA2NF90b0ludF90b0ludDhfdG9VaW50OF90b0NsYW1wZWRVaW50OF90b0ludDE2X3RvVWludDE2X3RvSW50MzJfdG9VaW50MzJfcmFuZ2VDaGVja19vZmZzZXRBbGlnbm1lbnRDaGVja2FsaWdubWVudE9mZnNldCAoKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgQllURVNfUEVSX0VMRU1FTlQgKHZtc2VydmljZV9pb2xvYWRlci5kYXJ0c2VydmVyLmRhcnRQZW5kaW5nV3JpdGVwYXJlbnRfZGlyZWN0b3J5Y3JlYXRld3JpdGVBc0J5dGVzV3JpdGVMaW1pdGVycGVuZGluZ1dyaXRlc2tNYXhPcGVuV3JpdGVzb3BlbldyaXRlc3NjaGVkdWxlV3JpdGVwd19tYXliZVdyaXRlRmlsZXNfd3JpdGVDb21wbGV0ZWRGaWxlUmVxdWVzdHNwbGlicmFyeVVybElzb2xhdGVMb2FkZXJTdGF0ZWlzb2xhdGVJZF9kZWFkX3dvcmtpbmdEaXJlY3Rvcnlfcm9vdFNjcmlwdF9wYWNrYWdlRXJyb3JfcGFja2FnZVJvb3RfcGFja2FnZUNvbmZpZ19wYWNrYWdlTWFwX21heEZpbGVSZXF1ZXN0c2N1cnJlbnRGaWxlUmVxdWVzdHNfZmlsZVJlcXVlc3RRdWV1ZV9wZW5kaW5nUGFja2FnZUxvYWRzX3BhY2thZ2VzUG9ydHBhY2thZ2VSb290RmxhZ3BhY2thZ2VzQ29uZmlnRmxhZ3dvcmtpbmdEaXJlY3Rvcnlyb290U2NyaXB0X3NldFBhY2thZ2VSb290X3NldFBhY2thZ2VzQ29uZmlndXBkYXRlUGFja2FnZU1hcF9wYWNrYWdlc1JlYWR5c2hvdWxkSXNzdWVGaWxlUmVxdWVzdGVucXVldWVGaWxlUmVxdWVzdGRlcXVldWVGaWxlUmVxdWVzdGh0dHA6aHR0cHM6cGFja2FnZXNQYXJhbXBhY2thZ2VzTmFtZV9yZXF1ZXN0UGFja2FnZXNNYXBfdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uX3Jlc29sdmVQYWNrYWdlVXJpd3JvbmdwYWNrYWdlOi8vVVJJcyB1c2luZyB0aGUgJ3BhY2thZ2U6JyBzY2hlbWUgc2hvdWxkIGxvb2sgbGlrZSAnLCBub3QgJ3BhY2thZ2VOYW1lRW5kVVJJUyB1c2luZyB0aGUgJ3BhY2thZ2U6JyBzY2hlbWUgc2hvdWxkIGxvb2sgbGlrZSAncGFja2FnZTpwYWNrYWdlTmFtZScsIG5vdCAncGFja2FnZTpSZXNvbHZpbmcgcGFja2FnZSB3aXRoIHVyaSBwYXRoOiBSZXNvbHZpbmcgcGFja2FnZSB3aXRoIHBlbmRpbmcgcmVzb2x1dGlvbiBlcnJvcjogJ3BhY2thZ2U6LycsIG5vdCAncGFja2FnZTpNYXBwZWQgJycgcGFja2FnZSB0byAnTm8gbWFwcGluZyBmb3IgJycgcGFja2FnZSB3aGVuIHJlc29sdmluZyAnUGF0aCB0byBiZSByZXNvbHZlZCBpbiBwYWNrYWdlOiBSZXNvbHZlZCAnX2hhbmRsZVBhY2thZ2VzUmVwbHlSZXF1ZXN0ZWQgcGFja2FnZXMgbWFwIGZvciAnR290IHBhY2thZ2VzIHJlcGx5OiBHb3QgZmFpbHVyZSByZXNwb25zZSBvbiBwYWNrYWdlIHBvcnQ6ICdSZWNlaXZlZCBwYWNrYWdlIHJvb3Q6ICdTZXR1cCBwYWNrYWdlIG1hcDogQmFkIHR5cGUgb2YgcGFja2FnZXMgcmVwbHk6IHJlcVdlYlNvY2tldENsaWVudFBBUlNFX0VSUk9SX0NPREVCSU5BUllfTUVTU0FHRV9FUlJPUl9DT0RFTk9UX01BUF9FUlJPUl9DT0RFSURfRVJST1JfQ09ERXNvY2tldHNlcnZpY2VvbldlYlNvY2tldE1lc3NhZ2VkaXNjb25uZWN0TWVzc2FnZSBwYXJzZSBlcnJvcjogTWVzc2FnZSBtdXN0IGJlIGEgSlNPTiBtYXAucnBjTWVzc2FnZVR5cGUuUmVxdWVzdG9uUmVxdWVzdE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbm9uTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuUmVzcG9uc2VvblJlc3BvbnNlTWVzc2FnZSBtdXN0IGJlIGEgc3RyaW5nLnBvc3RSZXNwb25zZVBheWxvYWRLaW5kLlN0cmluZ1Jlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5UmVzcG9uc2VQYXlsb2FkS2luZC5VdGY4U3RyaW5nYWRkVXRmOFRleHRIdHRwUmVxdWVzdENsaWVudGpzb25Db250ZW50VHlwZWNoYXJzZXRzZW5kRXZlbnRzQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luQ2FuIG5vdCBoYW5kbGUgYmluYXJ5IHJlc3BvbnNlc1dFQlNPQ0tFVF9QQVRIL3dzUk9PVF9SRURJUkVDVF9QQVRIL2luZGV4Lmh0bWxfc2VydmljZV9pcF9wb3J0X29yaWdpbkNoZWNrRGlzYWJsZWRfYXV0aENvZGVzRGlzYWJsZWRfc2VydmVyYXV0aENvZGVzRGlzYWJsZWRzZXJ2ZXJBZGRyZXNzaXBfaXNBbGxvd2VkT3JpZ2lubG9jYWxob3N0OjoxMTI3LjAuMC4xX29yaWdpbkNoZWNrb3JpZ2luc1NlYy1XZWJTb2NrZXQtT3JpZ2luT3JpZ2luX2NoZWNrQXV0aFRva2VuQW5kR2V0UGF0aHJlcXVlc3RVcmlyZXF1ZXN0UGF0aFNlZ21lbnRzYXV0aFRva2VuX3JlcXVlc3RIYW5kbGVyZm9yYmlkZGVuIG9yaWdpblBVVGZzTmFtZUxpc3Rmc1BhdGhMaXN0ZnNQYXRoQmFzZTY0TGlzdGZzVXJpQmFzZTY0TGlzdGZzTmFtZWZzUGF0aGZzVXJpZGV2X2ZzX25hbWVkZXZfZnNfdXJpX2I2NGRlY29kZWRGc1VyaWRldl9mc19wYXRoZGV2X2ZzX3BhdGhfYjY0ZGV2ZnNoYW5kbGVQdXRTdHJlYW1tZXRob2Qgbm90IGFsbG93ZWRtaXNzaW5nIG9yIGludmFsaWQgYXV0aGVudGljYXRpb24gY29kZXdlYlNvY2tldFRoaXMgVk0gd2FzIGJ1aWx0IHdpdGhvdXQgdGhlIE9ic2VydmF0b3J5IFVJLmFzc2V0bWltZVR5cGVxdWVyeVBhcmFtZXRlcnNzdGFydHVwcG9sbEVycm9ycG9sbFN0YWNrcG9sbGFkZHJlc3Nlc2F0dGVtcHRzbWF4QXR0ZW1wdHNPYnNlcnZhdG9yeSBzZXJ2ZXIgZmFpbGVkIHRvIHN0YXJ0IGFmdGVyICB0cmllc0NvdWxkIG5vdCBzdGFydCBPYnNlcnZhdG9yeSBIVFRQIHNlcnZlcjoKaXNFeGl0aW5nT2JzZXJ2YXRvcnkgSFRUUCBzZXJ2ZXIgZXhpdGluZyBiZWZvcmUgbGlzdGVuaW5nIGFzIHZtIHNlcnZpY2UgaGFzIHJlY2VpdmVkIGV4aXQgcmVxdWVzdApPYnNlcnZhdG9yeSBsaXN0ZW5pbmcgb24gL2RhcnQuc2VydmljZXMvQ3JlYXRpbmcgY3JlYXRlU3luY0RlbGV0aW5nIGRlbGV0ZVN5bmNvbGRTZXJ2ZXJBZGRyZXNzT2JzZXJ2YXRvcnkgbm8gbG9uZ2VyIGxpc3RlbmluZyBvbiBDb3VsZCBub3Qgc2h1dGRvd24gT2JzZXJ2YXRvcnkgSFRUUCBzZXJ2ZXI6Cl9hdXRvU3RhcnRfaXNXaW5kb3dzX2lzRnVjaHNpYV9zaWduYWxXYXRjaF9zaWduYWxTdWJzY3JpcHRpb25zZXJ2ZXJzZXJ2ZXJGdXR1cmVfcmVnaXN0ZXJTaWduYWxIYW5kbGVyVGltZXJfdHJhY2VMb2FkaW5nX2RldGVybWluaXN0aWNfaHR0cENsaWVudF9TUEFDRV9IQVNIX0RPVF9DT0xPTl9ERUxfaW52YWxpZFBhY2thZ2VOYW1lQ2hhcnNfRGFydF9rQ2Fub25pY2FsaXplVXJsX0RhcnRfa1NjcmlwdFRhZ19EYXJ0X2tTb3VyY2VUYWdfRGFydF9rSW1wb3J0VGFnX0RhcnRfa0luaXRMb2FkZXJfRGFydF9rUmVzb3VyY2VMb2FkX0RhcnRfa0dldFBhY2thZ2VSb290VXJpX0RhcnRfa0dldFBhY2thZ2VDb25maWdVcmlfRGFydF9rUmVzb2x2ZVBhY2thZ2VVcmlfRGFydF9rSW1wb3J0RXh0ZW5zaW9uX0RhcnRfa1Jlc29sdmVBc0ZpbGVQYXRoc2lsZW50T2JzZXJ2YXRvcnlTSUxFTlRfT0JTRVJWQVRPUllfc2FuaXRpemVXaW5kb3dzUGF0aGZpeGVkUGF0aF90cmltV2luZG93c1BhdGhfZW5mb3JjZVRyYWlsaW5nU2xhc2glIF9zZW5kUmVzb3VyY2VSZXNwb25zZUNvdWxkIG5vdCBsb2FkICJDb3VsZCBub3QgaW1wb3J0ICIiIGZyb20gIl9zZW5kRXh0ZW5zaW9uSW1wb3J0UmVzcG9uc2VDb3VsZCBub3QgcmVzb2x2ZSAiX2xvYWRIdHRwbWF4Q29ubmVjdGlvbnNQZXJIb3N0X2xvYWRGaWxlbG9hZGVyU3RhdGVfbG9hZERhdGFVcmltaW1lYXBwbGljYXRpb24vZGFydHRleHQvcGxhaW5NSU1FLXR5cGUgbXVzdCBiZSBhcHBsaWNhdGlvbi9kYXJ0IG9yIHRleHQvcGxhaW46IFVTLUFTQ0lJT25seSB1dGYtOCBvciBVUy1BU0NJSSBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZDogSW52YWxpZCBkYXRhIHVyaSAoKToKICBfbG9hZFBhY2thZ2V0cmFjZUxvYWRpbmdFeGNlcHRpb24gKCkgd2hlbiByZXNvbHZpbmcgcGFja2FnZSBVUkk6IFBlbmRpbmcgcGFja2FnZSBsb2FkIG9mICcgcGVuZGluZ19oYW5kbGVSZXNvdXJjZVJlcXVlc3RVbmtub3duIHNjaGVtZSAoKSBmb3IgX3BhcnNlUGFja2FnZXNGaWxlcGFja2FnZXNGaWxlaW52YWxpZFBhY2thZ2VOYW1lU2tpcHBpbmcgY29tbWVudCBpbiBMaW5lIHN0YXJ0cyB3aXRoICc6JyBpbiBNaXNzaW5nIHBhY2thZ2UgbmFtZSBpbiBMaW5lIGhhcyBubyAnOicgaW4gTWlzc2luZyAnOicgc2VwYXJhdG9yIGluIEludmFsaWQgcGFja2FnZSBuYW1lIEludmFsaWQgcGFja2FnZSBuYW1lICdwYWNrYWdlTmFtZTogb3JpZ2luYWwgcGFja2FnZVVyaTogbWFwcGluZzogUGFyc2VkIHBhY2thZ2VzIGZpbGUgYXQgLiBTZW5kaW5nOgpfbG9hZFBhY2thZ2VzRmlsZUxvYWRlZCBwYWNrYWdlcyBmaWxlIGZyb20gRXJyb3IgbG9hZGluZyBwYWNrYWdlczogVW5jYXVnaHQgZXJyb3IgKCkgbG9hZGluZyBwYWNrYWdlcyBmaWxlLl9maW5kUGFja2FnZXNGaWxlZGlyVXJpQ2hlY2tpbmcgZm9yICBmaWxlLiBleGlzdHM6IENvdWxkIG5vdCByZXNvbHZlIGEgcGFja2FnZSBsb2NhdGlvbiBmcm9tIENvdWxkIG5vdCByZXNvbHZlIGEgcGFja2FnZSBsb2NhdGlvbiBmb3IgYmFzZSBhdCBfbG9hZEh0dHBQYWNrYWdlc0ZpbGVyZXNvdXJjZUZldGNoaW5nIHBhY2thZ2VzIGZpbGUgZnJvbSAncnNwOnN0cmVhbTpmb3ItaXRlcmF0b3JHb3Qgc3RhdHVzICBmZXRjaGluZyAnTG9hZGVkIHBhY2thZ2VzIGZpbGUgZnJvbSAnJzoKRXJyb3IgbG9hZGluZyBwYWNrYWdlcyBmaWxlIGZyb20gJykgbG9hZGluZyBwYWNrYWdlcyBmaWxlIGZyb20gJ19sb2FkUGFja2FnZXNEYXRhTUlNRS10eXBlIG11c3QgYmUgdGV4dC9wbGFpbjogKSBsb2FkaW5nIHBhY2thZ2VzIGRhdGEuX2hhbmRsZVBhY2thZ2VzUmVxdWVzdFVuc3VwcG9ydGVkIHNjaGVtZSB1c2VkIHRvIGxvY2F0ZSAucGFja2FnZXMgZmlsZTogSGFuZGxpbmcgbG9hZCBvZiBwYWNrYWdlcyBtYXA6ICdQYWNrYWdlcyBmaWxlICcpIGZvciBwYWNrYWdlIGZpbGUgYXQgVW5rbm93biBwYWNrYWdlcyByZXF1ZXN0IHRhZzogRXJyb3IgaGFuZGxpbmcgcGFja2FnZXMgcmVxdWVzdDogKSBoYW5kbGluZyBwYWNrYWdlcyByZXF1ZXN0LnNodXRkb3duTG9hZGVyc1NlcnZpY2Ugc2h1dGRvd25pZWRpbHNfcHJvY2Vzc0xvYWRSZXF1ZXN0aXNSZWxvYWRpbmdwYXRoVXJpKSBpbiBDYW5ub3QgcmVzb2x2ZSBzY2hlbWUgKCkgdG8gZmlsZSBwYXRoVW5rbm93biBsb2FkZXIgcmVxdWVzdCB0YWc9c2VydmVyUHJpbnRfbm90aWZ5U2VydmVyU3RhdGVWTVNlcnZpY2VJT19Ob3RpZnlTZXJ2ZXJTdGF0ZV9sYXp5U2VydmVyQm9vdGNsZWFudXBDYWxsYmFja0Vycm9yIGluIHZtLXNlcnZpY2Ugc2h1dGRvd246IGNyZWF0ZVRlbXBEaXJDYWxsYmFja2NyZWF0ZVRlbXBkZWxldGVEaXJDYWxsYmFja3dyaXRlRmlsZUNhbGxiYWNrd3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2tyZWFkRmlsZUNhbGxiYWNrbGlzdEZpbGVzQ2FsbGJhY2tkaXJQYXRoZGlyUGF0aFN0cmZpbGVFbnRpdHlmaWxlUGF0aG1vZGlmaWVkc2VydmVySW5mb3JtYXRpb25DYWxsYmFja3dlYlNlcnZlckNvbnRyb2xDYWxsYmFja19jbGVhckZ1dHVyZV9vblNpZ25hbHNpZ25hbF9yZWdpc3RlclNpZ25hbEhhbmRsZXJTSUdRVUlUX3NodXRkb3duVk1TZXJ2aWNlSU9fU2h1dGRvd25kYXJ0Ll92bXNlcnZpY2Vhc3NldC5kYXJ0Y2xpZW50LmRhcnRkZXZmcy5kYXJ0Y29uc3RhbnRzLmRhcnRydW5uaW5nX2lzb2xhdGUuZGFydHJ1bm5pbmdfaXNvbGF0ZXMuZGFydG1lc3NhZ2UuZGFydG1lc3NhZ2Vfcm91dGVyLmRhcnRuYW1lZF9sb29rdXAuZGFydFNlcnZlclN0YXJ0Q2FsbGJhY2tTZXJ2ZXJTdG9wQ2FsbGJhY2tDbGVhbnVwQ2FsbGJhY2tDcmVhdGVUZW1wRGlyQ2FsbGJhY2tEZWxldGVEaXJDYWxsYmFja1dyaXRlRmlsZUNhbGxiYWNrV3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2tSZWFkRmlsZUNhbGxiYWNrTGlzdEZpbGVzQ2FsbGJhY2tTZXJ2ZXJJbmZvcm1hbWVzc2FnZV9yb3V0ZXJ0aW9uQ2FsbGJhY2tTZXJ2ZXJJbmZvcm1hdGlvbkNhbGxiYWNrV2ViU2VydmVyQ29udHJvbENhbGxiYWNrQ2xpZW50U2VydmljZUhhbmRsZUlzb2xhdGVFbWJlZGRlckRhdGFWTVNlcnZpY2VFbWJlZGRlckhvb2tzc2VydmVyU3RhcnRzZXJ2ZXJTdG9wY3JlYXRlVGVtcERpcmRlbGV0ZURpcndyaXRlRmlsZXdyaXRlU3RyZWFtRmlsZXJlYWRGaWxlbGlzdEZpbGVzc2VydmVySW5mb3JtYXRpb253ZWJTZXJ2ZXJDb250cm9sVk1TZXJ2aWNlc2VydmljZU5hbWVzcGFjZWNsaWVudHNfc2VydmljZVJlcXVlc3Rzc3JydW5uaW5nSXNvbGF0ZXNldmVudFBvcnRrU2VydmljZVN0cmVhbXNlcnZpY2VTdHJlYW1zbWVzc2FnZUhhbmRsZXJfYWRkQ2xpZW50c3RyZWFtc3NlcnZpY2VzX3JlbW92ZUNsaWVudG5hbWVzcGFjZWtleU9mc3RyZWFtSWRfaXNBbnlDbGllbnRTdWJzY3JpYmVkX2V2ZW50TWVzc2FnZUhhbmRsZXJqc29ucnBjMi4wc3RyZWFtTm90aWZ5U2VydmljZVVucmVnaXN0ZXJlZHNlcnZpY2VIYW5kbGVzX2NvbnRyb2xNZXNzYWdlSGFuZGxlcnBvcnRJZGlzb2xhdGVTdGFydHVwaXNvbGF0ZVNodXRkb3duX3NlcnZlck1lc3NhZ2VIYW5kbGVyX2hhbmRsZU5hdGl2ZVJwY0NhbGxUaGUgY2xpZW50IHNlbnQgYSBub24tcmVxdWVzdCBqc29uLXJwYyBtZXNzYWdlLnJvdXRlUmVxdWVzdFRoZSBycGMgY2FsbCByZXN1bHRlZCBpbiBleGNlcHRpb246IF9leGl0Y2xpZW50c0xpc3RJbnRlcm5hbCB2bS1zZXJ2aWNlIGVycm9yOiBpZ25vcmluZyBpbGxlZ2FsIG1lc3NhZ2U6IF9maW5kRmlyc3RDbGllbnRUaGF0SGFuZGxlc1NlcnZpY2Vfc3RyZWFtTGlzdGVuc3RyZWFtTGlzdGVuOiBpbnZhbGlkICdzdHJlYW1JZCcgcGFyYW1ldGVyOiBfc2VuZFNlcnZpY2VSZWdpc3RlcmVkRXZlbnRfc3RyZWFtQ2FuY2VsX2hhc05hbWVzcGFjZV9nZXROYW1lc3BhY2VfZ2V0TWV0aG9kX3JlZ2lzdGVyU2VydmljZXJlZ2lzdGVyU2VydmljZTogaW52YWxpZCAnc2VydmljZScgcGFyYW1ldGVyOiByZWdpc3RlclNlcnZpY2U6IGludmFsaWQgJ2FsaWFzJyBwYXJhbWV0ZXI6IFNlcnZpY2VSZWdpc3RlcmVkX2hhbmRsZVNlcnZpY2VuZXdJZG9sZElkc2VyaWFsZm9yd2FyZFRvSnNvblVua25vd24gc2VydmljZTogYXJnc09mU3RyaW5nX3JvdXRlUmVxdWVzdEltcGxjb21wbGV0ZWRzdHJlYW1MaXN0ZW5zdHJlYW1DYW5jZWxyZWdpc3RlclNlcnZpY2VzaG91bGRIYW5kbGVNZXNzYWdlaGFuZGxlTWVzc2FnZXNlbmRUb1ZNc2V0RXJyb3JSZXNwb25zZVVuZXhwZWN0ZWQgZXhjZXB0aW9uOnJvdXRlUmVzcG9uc2VyZWxlYXNlQXNzZXRleHRlbnNpb25TdGFydHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOGFwcGxpY2F0aW9uL2RhcnQ7IGNoYXJzZXQ9VVRGLThhcHBsaWNhdGlvbi9qYXZhc2NyaXB0OyBjaGFyc2V0PVVURi04Y3NzdGV4dC9jc3M7IGNoYXJzZXQ9VVRGLThnaWZpbWFnZS9naWZwbmdpbWFnZS9wbmdqcGdpbWFnZS9qcGVnanBlZ2ltYWdlL3N2Zyt4bWx0YXJCeXRlc2Fzc2V0TGlzdGFzc2V0c0NsaWVudF9GaWxlU3lzdGVtcmVzb2x2ZVBhdGhEZXZGU19mc01hcF9ycGNOYW1lc19saXN0RGV2RlNfY3JlYXRlRGV2RlNfZGVsZXRlRGV2RlNfcmVhZERldkZTRmlsZV93cml0ZURldkZTRmlsZV93cml0ZURldkZTRmlsZXNfbGlzdERldkZTRmlsZXNkZWxldGlvbnNVbmV4cGVjdGVkIHJwYyBGaWxlU3lzdGVtTGlzdGZzTmFtZXN1cmlQYXJhbUZTRmlsZWZpbGVDb250ZW50c19yZWFkRGV2RlNGaWxlOiBkZWNvZGVkRmlsZUNvbnRlbnRzZmlsZUluZm86IGludmFsaWQgJ2ZpbGVzJyBwYXJhbWV0ZXIgYXQgaW5kZXggZmlsZUxpc3RGU0ZpbGVMaXN0Q29uc3RhbnRzU0VSVklDRV9FWElUX01FU1NBR0VfSURJU09MQVRFX1NUQVJUVVBfTUVTU0FHRV9JRElTT0xBVEVfU0hVVERPV05fTUVTU0FHRV9JRFdFQl9TRVJWRVJfQ09OVFJPTF9NRVNTQUdFX0lEU0VSVkVSX0lORk9fTUVTU0FHRV9JRE1FVEhPRF9DQUxMX0ZST01fTkFUSVZFUnVubmluZ0lzb2xhdGVzZXJ2aWNlSWRpc29sYXRlcy9zZW5kVG9Jc29sYXRlUnVubmluZ0lzb2xhdGVzaXNvbGF0ZXNfcm9vdFBvcnRJZHJpaXNvbGF0ZVBhcmFtaW52YWxpZCAnaXNvbGF0ZUlkJyBwYXJhbWV0ZXI6IFNlbnRpbmVsQ29sbGVjdGVkdmFsdWVBc1N0cmluZzxjb2xsZWN0ZWQ+c2V0UmVzcG9uc2VldmFsdWF0ZUluRnJhbWVfRXZhbHVhdG9yX21lc3NhZ2VfYnVpbGRTY29wZWJ1aWxkU2NvcGVSZXNwb25zZXJlc3BvbnNlSnNvbmRlY29kZUpzb25rZXJuZWxCYXNlNjRfY29tcGlsZUV4cHJlc3Npb25fZXZhbHVhdGVDb21waWxlZEV4cHJlc3Npb25fc2V0dXBQYXJhbXNidWlsZFNjb3BlUGFyYW1zX2J1aWxkRXhwcmVzc2lvbkV2YWx1YXRpb25TY29wZWJ1aWxkU2NvcGVidWlsZFNjb3BlUmVzcG9uc2VSZXN1bHRleHRlcm5hbENsaWVudGNvbXBpbGVQYXJhbXNwYXJhbV9uYW1lc3R5cGVfcGFyYW1zX25hbWVzanNvbk1hcGtlcm5lbEJ5dGVzY29tcGlsZUV4cHJlc3Npb25QYXJhbXNkaXNhYmxlQnJlYWtwb2ludHNydW5QYXJhbXNydW5FeHByZXNzaW9uZnJhbWVJbmRleHRhcmdldElkTWVzc2FnZVR5cGVSZXF1ZXN0Tm90aWZpY2F0aW9uUmVzcG9uc2VfY29tcGxldGVyX2Zyb21Kc29uUnBjUmVxdWVzdF9mcm9tSnNvblJwY05vdGlmaWNhdGlvbl9mcm9tSnNvblJwY1Jlc3VsdF9mcm9tSnNvblJwY0Vycm9yZm9yTWV0aG9kZm9ySXNvbGF0ZWZyb21Kc29uUnBjImlkIiBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcsIG9yIG51bGwuSW52YWxpZCBtZXNzYWdlIGZvcm1hdF9tZXRob2ROYW1lRnJvbVVyaXRvVXJpb3ZlcmxvYWRzX21ha2VBbGxTdHJpbmduZXdfbGlzdF9zZXRSZXNwb25zZUZyb21Qb3J0Y291bGQgbm90IHNlbmQgbWVzc2FnZSBbXSB0byBpc29sYXRlX21ldGhvZE5lZWRzT2JqZWN0UGFyYW1ldGVyc01lc3NhZ2VSb3V0ZXJSZXNwb25zZVBheWxvYWRLaW5kVXRmOFN0cmluZ1NlcnZpY2VFcnJvckludGVybmFsRXJyb3JVbnJlY29nbml6ZWQgcmVzcG9uc2U6IEJpbmFyeSByZXNwb25zZXMgY2FuIG5vdCBiZSBkZWNvZGVkX05hbWVkTG9va3VwJk9iamVjdCZJdGVyYWJsZU1peGluTmFtZWRMb29rdXBfZWxlbWVudHNfaWRzSWRHZW5lcmF0b3Jpc29sYXRlQ29udHJvbFBvcnRzY3JpcHRMb2FkUG9ydHNlcnZpY2VBdXRoVG9rZW5pc29sYXRlRW1iZWRkZXJEYXRha1BhcnNlRXJyb3JrSW52YWxpZFJlcXVlc3RrTWV0aG9kTm90Rm91bmRrSW50ZXJuYWxFcnJvcmtGZWF0dXJlRGlzYWJsZWRrQ2Fubm90QWRkQnJlYWtwb2ludGtTdHJlYW1BbHJlYWR5U3Vic2NyaWJlZGtTdHJlYW1Ob3RTdWJzY3JpYmVka0lzb2xhdGVNdXN0QmVSdW5uYWJsZWtJc29sYXRlTXVzdEJlUGF1c2Vka0Nhbm5vdFJlc3VtZWtJc29sYXRlSXNSZWxvYWRpbmdrSXNvbGF0ZVJlbG9hZEJhcnJlZGtJc29sYXRlTXVzdEhhdmVSZWxvYWRlZGtTZXJ2aWNlQWxyZWFkeVJlZ2lzdGVyZWRrU2VydmljZURpc2FwcGVhcmVka0V4cHJlc3Npb25Db21waWxhdGlvbkVycm9ya0ludmFsaWRUaW1lbGluZVJlcXVlc3RrRmlsZVN5c3RlbUFscmVhZHlFeGlzdHNrRmlsZVN5c3RlbURvZXNOb3RFeGlzdGtGaWxlRG9lc05vdEV4aXN0X2Vycm9yTWVzc2FnZXNGZWF0dXJlIGlzIGRpc2FibGVkU3RyZWFtIGFscmVhZHkgc3Vic2NyaWJlZFN0cmVhbSBub3Qgc3Vic2NyaWJlZEZpbGUgc3lzdGVtIGFscmVhZHkgZXhpc3RzRmlsZSBzeXN0ZW0gZG9lcyBub3QgZXhpc3RGaWxlIGRvZXMgbm90IGV4aXN0U2VydmljZSBhbHJlYWR5IHJlZ2lzdGVyZWRTZXJ2aWNlIGhhcyBkaXNhcHBlYXJlZEV4cHJlc3Npb24gY29tcGlsYXRpb24gZXJyb3JUaGUgdGltZWxpbmUgcmVsYXRlZCByZXF1ZXN0IGNvdWxkIG5vdCBiZSBjb21wbGV0ZWRkdWUgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbnNob3J0RGVsYXlfYXNzZXRzX2RlY29kZUFzc2V0c1ZNU2VydmljZV9EZWNvZGVBc3NldHNDb3VsZCBub3QgbG9hZCBPYnNlcnZhdG9yeSBhc3NldHM6IF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3JEZXZGUyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgRGFydCBpbXBsZW1lbnRhdGlvbl9lbmNvZGVGaWxlU3lzdGVtQWxyZWFkeUV4aXN0c0Vycm9yOiBmaWxlIHN5c3RlbSAnJyBhbHJlYWR5IGV4aXN0c19lbmNvZGVGaWxlU3lzdGVtRG9lc05vdEV4aXN0RXJyb3InIGRvZXMgbm90IGV4aXN0c2VuZElzb2xhdGVTZXJ2aWNlTWVzc2FnZVZNU2VydmljZV9TZW5kSXNvbGF0ZVNlcnZpY2VNZXNzYWdlc2VuZFJvb3RTZXJ2aWNlTWVzc2FnZVZNU2VydmljZV9TZW5kUm9vdFNlcnZpY2VNZXNzYWdlc2VuZE9iamVjdFJvb3RTZXJ2aWNlTWVzc2FnZVZNU2VydmljZV9TZW5kT2JqZWN0Um9vdFNlcnZpY2VNZXNzYWdlX21ha2VBdXRoVG9rZW5rVG9rZW5CeXRlU2l6ZWVuY29kZVJwY0Vycm9yZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IgZXhwZWN0cyB0aGUgJycgcGFyYW1ldGVyZW5jb2RlSW52YWxpZFBhcmFtRXJyb3I6IGludmFsaWQgJycgcGFyYW1ldGVyOiBlbmNvZGVDb21waWxhdGlvbkVycm9yZGlhZ25vc3RpY2VuY29kZVJlc3VsdGVuY29kZVN1Y2Nlc3NTdWNjZXNzYm9vdF9yZWdpc3Rlcklzb2xhdGVwb3J0X2lkX29uU3RhcnRWTVNlcnZpY2VfT25TdGFydF9vbkV4aXRWTVNlcnZpY2VfT25FeGl0b25TZXJ2ZXJBZGRyZXNzQ2hhbmdlVk1TZXJ2aWNlX09uU2VydmVyQWRkcmVzc0NoYW5nZV92bUxpc3RlblN0cmVhbVZNU2VydmljZV9MaXN0ZW5TdHJlYW1fdm1DYW5jZWxTdHJlYW1WTVNlcnZpY2VfQ2FuY2VsU3RyZWFtX3JlcXVlc3RBc3NldHNWTVNlcnZpY2VfUmVxdWVzdEFzc2V0c19zcGF3blVyaU5vdGlmeVZNU2VydmljZV9zcGF3blVyaU5vdGlmeV9zZXR1cENvbXBsZXRlZF9sb2FkUG9ydF9pc29sYXRlSWRfbG9nSWRfcHJpbnRTdHJpbmdCdWlsdGluX1ByaW50U3RyaW5nX2dldFByaW50Q2xvc3VyZV9tYWtlTG9hZGVyUmVxdWVzdFNlcnZpY2UgaXNvbGF0ZSBpcyBub3QgYXZhaWxhYmxlLiogX3NldFdvcmtpbmdEaXJlY3RvcnlTZXR0aW5nIHdvcmtpbmcgZGlyZWN0b3J5OiBXb3JraW5nIGRpcmVjdG9yeSBVUkk6IFNldHRpbmcgcGFja2FnZSByb290OiBwYWNrYWdlUm9vdFN0clBhY2thZ2Ugcm9vdCBVUkk6IF9zZXRQYWNrYWdlc01hcFJlc29sdmluZyBwYWNrYWdlcyBtYXA6IE5vIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2V0LnBhY2thZ2VzVXJpU3RyUmVzb2x2ZWQgcGFja2FnZXMgbWFwIHRvOiBfcmVzb2x2ZVNjcmlwdFVyaVJlc29sdmluZyBzY3JpcHQ6IFJlc29sdmVkIGVudHJ5IHBvaW50IHRvOiBfZmlsZVBhdGhGcm9tVXJpdXNlclVyaUdldHRpbmcgZmlsZSBwYXRoIGZyb206IE5vdCBhIGtub3duIHNjaGVtZTogX3Jlc291cmNlUmVhZEFzQnl0ZXNfZ2V0UGFja2FnZVJvb3RGdXR1cmVSZXF1ZXN0IGZvciBwYWNrYWdlIHJvb3QgZnJvbSB1c2VyIGNvZGUuX2dldFBhY2thZ2VDb25maWdGdXR1cmVSZXF1ZXN0IGZvciBwYWNrYWdlIGNvbmZpZyBmcm9tIHVzZXIgY29kZS5fcmVzb2x2ZVBhY2thZ2VVcmlGdXR1cmVSZXF1ZXN0IGZvciBwYWNrYWdlIFVyaSByZXNvbHV0aW9uIGZyb20gdXNlciBjb2RlOiBOb24tcGFja2FnZSBVcmksIHJldHVybmluZyB1bm1vZGlmaWVkOiBFeGNlcHRpb24gd2hlbiByZXNvbHZpbmcgcGFja2FnZSBVUkk6IG5hdGl2ZXdyYXBwZXJzTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MyTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MzTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3M0ZGFydC5pb2J5dGVzX2J1aWxkZXIuZGFydGNvbW1vbi5kYXJ0ZGF0YV90cmFuc2Zvcm1lci5kYXJ0ZGlyZWN0b3J5LmRhcnRkaXJlY3RvcnlfaW1wbC5kYXJ0ZW1iZWRkZXJfY29uZmlnLmRhcnRldmVudGhhbmRsZXIuZGFydGZpbGUuZGFydGZpbGVfaW1wbC5kYXJ0ZmlsZV9zeXN0ZW1fZW50aXR5LmRhcnRpb19yZXNvdXJjZV9pbmZvLmRhcnRpb19zaW5rLmRhcnRpb19zZXJ2aWNlLmRhcnRsaW5rLmRhcnRuYW1lc3BhY2VfaW1wbC5kYXJ0b3ZlcnJpZGVzLmRhcnRwbGF0Zm9ybS5kYXJ0cGxhdGZvcm1faW1wbC5kYXJ0cHJvY2Vzcy5kYXJ0c2VjdXJlX3NlcnZlcl9zb2NrZXQuZGFydHNlY3VyZV9zb2NrZXQuZGFydHNlY3VyaXR5X2NvbnRleHQuZGFydHNlcnZpY2Vfb2JqZWN0LmRhcnRzb2NrZXQuZGFydHN0ZGlvLmRhcnRzdHJpbmdfdHJhbnNmb3JtZXIuZGFydHN5bmNfc29ja2V0LmRhcnRfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHNJbXBsX3NldFBvaW50ZXJEaXJlY3RvcnlfU2V0QXN5bmNEaXJlY3RvcnlMaXN0ZXJQb2ludGVyZ2V0UG9pbnRlckRpcmVjdG9yeV9HZXRBc3luY0RpcmVjdG9yeUxpc3RlclBvaW50ZXJfUmFuZG9tQWNjZXNzRmlsZU9wc0ltcGxGaWxlX1NldFBvaW50ZXJGaWxlX0dldFBvaW50ZXJGaWxlX0Nsb3NlRmlsZV9SZWFkQnl0ZUZpbGVfUmVhZHJlYWRJbnRvRmlsZV9SZWFkSW50b0ZpbGVfV3JpdGVCeXRld3JpdGVGcm9tRmlsZV9Xcml0ZUZyb21GaWxlX1Bvc2l0aW9uc2V0UG9zaXRpb25GaWxlX1NldFBvc2l0aW9uRmlsZV9UcnVuY2F0ZUZpbGVfTGVuZ3RoRmlsZV9GbHVzaGxvY2tGaWxlX0xvY2tfV2F0Y2hlclBhdGhwYXRoSWRfSW5vdGlmeUZpbGVTeXN0ZW1XYXRjaGVyX2lkTWFwX25ld1dhdGNoZXJfZG9uZVdhdGNoZXJfcGF0aFdhdGNoZWRfd2F0Y2hlclBhdGhfcGF0aFdhdGNoZWRFbmRfV2luMzJGaWxlU3lzdGVtV2F0Y2hlcl9GU0V2ZW50U3RyZWFtRmlsZVN5c3RlbVdhdGNoZXJzb2NrZXRJZF9GaWx0ZXJJbXBsRmlsdGVyX1Byb2Nlc3Nwcm9jZXNzZWRGaWx0ZXJfUHJvY2Vzc2VkX1pMaWJJbmZsYXRlRmlsdGVyd2luZG93Qml0c0ZpbHRlcl9DcmVhdGVaTGliSW5mbGF0ZV9aTGliRGVmbGF0ZUZpbHRlcmd6aXBtZW1MZXZlbEZpbHRlcl9DcmVhdGVaTGliRGVmbGF0ZV9JT1NlcnZpY2VQb3J0c21heFBvcnRzX3BvcnRzX2ZyZWVQb3J0c191c2VkUG9ydHNfZ2V0UG9ydGZvclJlcXVlc3RJZF9yZXR1cm5Qb3J0X25ld1NlcnZpY2VQb3J0SU9TZXJ2aWNlX05ld1NlcnZpY2VQb3J0X05hbWVzcGFjZUltcGxfY2FjaGVkTmFtZXNwYWNlTmFtZXNwYWNlX0NyZWF0ZV9nZXRQb2ludGVyTmFtZXNwYWNlX0dldFBvaW50ZXJfZ2V0RGVmYXVsdE5hbWVzcGFjZV9HZXREZWZhdWx0X3NldHVwTmFtZXNwYWNlX25hbWVzcGFjZV9uYW1lc3BhY2VQb2ludGVyX1NpZ25hbENvbnRyb2xsZXJfbGlzdGVuX3NpZ25hbE51bWJlckZhaWxlZCB0byBsaXN0ZW4gZm9yIF9zZXRTaWduYWxIYW5kbGVyUHJvY2Vzc19TZXRTaWduYWxIYW5kbGVyX2NsZWFyU2lnbmFsSGFuZGxlclByb2Nlc3NfQ2xlYXJTaWduYWxIYW5kbGVyX1Byb2Nlc3NTdGFydFN0YXR1c19lcnJvckNvZGVfZXJyb3JNZXNzYWdlX1Byb2Nlc3NJbXBsTmF0aXZlV3JhcHBlcl9Qcm9jZXNzSW1wbF9yZXNvdXJjZUluZm9jb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXJfcGF0aF9tb2RlX3N0ZGluX3N0ZG91dF9zdGRlcnJfZXhpdEhhbmRsZXJfZW5kZWRfc3RhcnRlZF9leGl0Q29kZWluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudHJ1bkluU2hlbGxleHQuZGFydC5pby5nZXRQcm9jZXNzZXNleHQuZGFydC5pby5nZXRQcm9jZXNzQnlJZFBhdGggaXMgbm90IGEgU3RyaW5nOiBBcmd1bWVudHMgaXMgbm90IGEgTGlzdDogTm9uLXN0cmluZyBhcmd1bWVudDogX3dpbmRvd3NBcmd1bWVudEVzY2FwZVdvcmtpbmdEaXJlY3RvcnkgaXMgbm90IGEgU3RyaW5nOiBFbnZpcm9ubWVudCBpcyBub3QgYSBtYXA6IEVudmlyb25tZW50IGtleSBvciB2YWx1ZSBpcyBub3QgYSBzdHJpbmc6IChNb2RlIGlzIG5vdCBhIFByb2Nlc3NTdGFydE1vZGU6IF9zdGRpbk5hdGl2ZVNvY2tldF9uYXRpdmVTb2NrZXRfc3Rkb3V0TmF0aXZlU29ja2V0X3N0ZGVyck5hdGl2ZVNvY2tldF9tb2RlSXNBdHRhY2hlZF9tb2RlSGFzU3RkaW9fZ2V0U2hlbGxDb21tYW5kY21kLmV4ZV9nZXRTaGVsbEFyZ3VtZW50c2V4ZWN1dGFibGVzaGVsbEFyZ3VtZW50cy9jY29tbWFuZExpbmUnIiciJ25leHRQb3NxdW90ZVBvc251bUJhY2tzbGFzaF9pbnRGcm9tQnl0ZXNfc3RhcnROYXRpdmVleGl0RGF0YVJlYWRFWElUX0RBVEFfU0laRWV4aXREYXRhQnVmZmVyaW50c2hhbmRsZUV4aXRkZXN0cm95c3RvcHBlZF9ydW5BbmRXYWl0c3Rkb3V0RW5jb2RpbmdzdGRlcnJFbmNvZGluZ193YWl0Z2V0T3V0cHV0UHJvY2Vzc19TdGFydGV4aXRIYW5kbGVyUHJvY2Vzc19XYWl0U0lHVEVSTUFyZ3VtZW50ICdzaWduYWwnIG11c3QgYmUgYSBQcm9jZXNzU2lnbmFscGlkX0ludGVybmV0QWRkcmVzc19hZGRyZXNzTG9vcGJhY2tJUHY0X2FkZHJlc3NMb29wYmFja0lQdjZfYWRkcmVzc0FueUlQdjRfYWRkcmVzc0FueUlQdjZfSVB2NEFkZHJMZW5ndGhfSVB2NkFkZHJMZW5ndGhsb29wYmFja0lQdjRsb29wYmFja0lQdjZhbnlJUHY0YW55SVB2Nl9ob3N0X2luX2FkZHJyYXdBZGRyZXNzaXNMb29wYmFja2lzTGlua0xvY2FsaXNNdWx0aWNhc3RJbnZhbGlkIGludGVybmV0IGFkZHJlc3MgaW5fYWRkcjAuMC4wLjBfY2xvbmVXaXRoTmV3SG9zdEludGVybmV0QWRkcmVzcygnX3BhcnNlSW50ZXJuZXRBZGRyZXNzX1BhcnNlX05ldHdvcmtJbnRlcmZhY2VOZXR3b3JrSW50ZXJmYWNlKCdfTmF0aXZlU29ja2V0TmF0aXZlV3JhcHBlcl9fTmF0aXZlU29ja2V0Jl9OYXRpdmVTb2NrZXROYXRpdmVXcmFwcGVyJl9TZXJ2aWNlT2JqZWN0X19zZXJ2aWNlSWRfc2VydmljZUlkX3NlcnZpY2VQYXRoX3NlcnZpY2VUeXBlUGF0aF9zZXJ2aWNlVHlwZU5hbWVfc2VydmljZVR5cGVfTmF0aXZlU29ja2V0cmVhZEV2ZW50d3JpdGVFdmVudGVycm9yRXZlbnRjbG9zZWRFdmVudGRlc3Ryb3llZEV2ZW50Zmlyc3RFdmVudGxhc3RFdmVudGV2ZW50Q291bnRjbG9zZUNvbW1hbmRzaHV0ZG93blJlYWRDb21tYW5kc2h1dGRvd25Xcml0ZUNvbW1hbmRyZXR1cm5Ub2tlbkNvbW1hbmRzZXRFdmVudE1hc2tDb21tYW5kZmlyc3RDb21tYW5kbGFzdENvbW1hbmRsaXN0ZW5pbmdTb2NrZXRwaXBlU29ja2V0dHlwZU5vcm1hbFNvY2tldHR5cGVMaXN0ZW5pbmdTb2NrZXR0eXBlUGlwZXR5cGVUeXBlTWFza3RjcFNvY2tldHVkcFNvY2tldGludGVybmFsU29ja2V0aW50ZXJuYWxTaWduYWxTb2NrZXR0eXBlVGNwU29ja2V0dHlwZVVkcFNvY2tldHR5cGVJbnRlcm5hbFNvY2tldHR5cGVJbnRlcm5hbFNpZ25hbFNvY2tldHR5cGVQcm90b2NvbE1hc2tob3N0TmFtZUxvb2t1cE1lc3NhZ2VsaXN0SW50ZXJmYWNlc01lc3NhZ2VyZXZlcnNlTG9va3VwTWVzc2FnZXByb3RvY29sSVB2NHByb3RvY29sSVB2Nm5vcm1hbFRva2VuQmF0Y2hTaXplbGlzdGVuaW5nVG9rZW5CYXRjaFNpemVfcmV0cnlEdXJhdGlvbl9yZXRyeUR1cmF0aW9uTG9vcGJhY2tpc0Nsb3Npbmdpc0Nsb3NlZFJlYWRjbG9zZWRSZWFkRXZlbnRTZW50aXNDbG9zZWRXcml0ZWNsb3NlQ29tcGxldGVyZXZlbnRIYW5kbGVyc2ZsYWdzU2VudHR5cGVGbGFnc2xvY2FsUG9ydGxvY2FsQWRkcmVzc2F2YWlsYWJsZXNlbmRSZWFkRXZlbnRzcmVhZEV2ZW50SXNzdWVkc2VuZFdyaXRlRXZlbnRzd3JpdGVFdmVudElzc3VlZHdyaXRlQXZhaWxhYmxlcmVzb3VyY2VJbmZvZGF0YWdyYW1ub3JtYWxfd2F0Y2hDb21tb25uYXRpdmVTZXRTb2NrZXRJZHdhdGNoU2lnbmFsRmFpbGVkIGhvc3QgbG9va3VwOiAncmV2ZXJzZUxvb2t1cGFkZHJGYWlsZWQgcmV2ZXJzZSBob3N0IGxvb2t1cGxpc3RJbnRlcmZhY2VzaW5jbHVkZUxvb3BiYWNraW5jbHVkZUxpbmtMb2NhbEZhaWxlZCBsaXN0aW5nIGludGVyZmFjZXNzdGFydENvbm5lY3Rzb3VyY2VBZGRyZXNzY29ubmVjdGluZ2Nvbm5lY3ROZXh0bmF0aXZlQ3JlYXRlQ29ubmVjdG5hdGl2ZUNyZWF0ZUJpbmRDb25uZWN0aXNCaW5kRXJyb3JCaW5kIGZhaWxlZENvbm5lY3Rpb24gZmFpbGVkc2V0SGFuZGxlcnNuYXRpdmVHZXRFcnJvcnNldExpc3RlbmluZ0Nvbm5lY3Rpb24gYXR0ZW1wdCBjYW5jZWxsZWQsIGhvc3Q6ICwgcG9ydDogY29ubmVjdHNvY2tldEZ1dHVyZUNvbm5lY3Rpb24gdGltZWQgb3V0LCBob3N0OiBfcmVzb2x2ZUhvc3RiYWNrbG9ndjZPbmx5c2hhcmVkbmF0aXZlQ3JlYXRlQmluZExpc3RlbkZhaWxlZCB0byBjcmVhdGUgc2VydmVyIHNvY2tldGNvbm5lY3RUb0V2ZW50SGFuZGxlcnNldHVwUmVzb3VyY2VJbmZvYmluZERhdGFncmFtcmV1c2VBZGRyZXNzcmV1c2VQb3J0dHRsbmF0aXZlQ3JlYXRlQmluZERhdGFncmFtRmFpbGVkIHRvIGNyZWF0ZSBkYXRhZ3JhbSBzb2NrZXRpc0xpc3RlbmluZ2lzUGlwZWlzSW50ZXJuYWxpc0ludGVybmFsU2lnbmFsaXNUY3Bpc1VkcElsbGVnYWwgbGVuZ3RoIG5hdGl2ZVJlYWRSZWFkIGZhaWxlZHRvdGFsUmVhZGRpZFJlYWRyZWNlaXZlbmF0aXZlUmVjdkZyb21SZWNlaXZlIGZhaWxlZG5hdGl2ZUF2YWlsYWJsZUludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlIG9uIFNvY2tldGJ1ZmZlckFuZFN0YXJ0bmF0aXZlV3JpdGVXcml0ZSBmYWlsZWRhZGRXcml0ZW5hdGl2ZVNlbmRUb1NlbmQgZmFpbGVkcmV0dXJuVG9rZW5zbmF0aXZlQWNjZXB0YWRkUmVhZFNvY2tldCBoYXMgYmVlbiBjbG9zZWRuYXRpdmVHZXRQb3J0bmF0aXZlR2V0UmVtb3RlUGVlcmlzc3VlUmVhZEV2ZW50aXNzdWVXcml0ZUV2ZW50bXVsdGlwbGV4ZXZlbnRzT2JqZGlzY29ubmVjdEZyb21FdmVudEhhbmRsZXJ0b2tlbkJhdGNoU2l6ZXNlbmRUb0V2ZW50SGFuZGxlcmRlc3Ryb3llZGRpcmVjdGlvbnNodXRkb3duUmVhZHNodXRkb3duV3JpdGVmdWxsRGF0YWV4dC5kYXJ0LmlvLmdldE9wZW5Tb2NrZXRzZXh0LmRhcnQuaW8uZ2V0U29ja2V0QnlJRGlzRXJyb3JSZXNwb25zZWNyZWF0ZUVycm9yVW5rbm93biBlcnJvcmdldE9wdGlvbm5hdGl2ZUdldE9wdGlvbnNldE9wdGlvbm5hdGl2ZVNldE9wdGlvbmdldFJhd09wdGlvbm9wdGlvbi52YWx1ZW5hdGl2ZUdldFJhd09wdGlvbnNldFJhd09wdGlvbm5hdGl2ZVNldFJhd09wdGlvbm11bHRpY2FzdEFkZHJlc3NUaGUgbmV0d29yayBpbnRlcmZhY2UgZG9lcyBub3QgaGF2ZSBhbiBhZGRyZXNzIG9mIHRoZSBzYW1lIGZhbWlseSBhcyB0aGUgbXVsdGljYXN0IGFkZHJlc3Nqb2luTXVsdGljYXN0aW50ZXJmYWNlQWRkcmludGVyZmFjZUluZGV4bmF0aXZlSm9pbk11bHRpY2FzdGxlYXZlTXVsdGljYXN0bmF0aXZlTGVhdmVNdWx0aWNhc3RTb2NrZXRfU2V0U29ja2V0SWRTb2NrZXRfQXZhaWxhYmxlU29ja2V0X1JlYWRTb2NrZXRfUmVjdkZyb21Tb2NrZXRfV3JpdGVMaXN0U29ja2V0X1NlbmRUb1NvY2tldF9DcmVhdGVDb25uZWN0U29ja2V0X0NyZWF0ZUJpbmRDb25uZWN0c291cmNlQWRkclNvY2tldEJhc2VfSXNCaW5kRXJyb3JlcnJvck51bWJlclNlcnZlclNvY2tldF9DcmVhdGVCaW5kTGlzdGVuU29ja2V0X0NyZWF0ZUJpbmREYXRhZ3JhbVNlcnZlclNvY2tldF9BY2NlcHRTb2NrZXRfR2V0UG9ydFNvY2tldF9HZXRSZW1vdGVQZWVybmF0aXZlR2V0U29ja2V0SWRTb2NrZXRfR2V0U29ja2V0SWRTb2NrZXRfR2V0RXJyb3JTb2NrZXRfR2V0T3B0aW9ucHJvdG9jb2xTb2NrZXRfR2V0UmF3T3B0aW9uU29ja2V0X1NldE9wdGlvblNvY2tldF9TZXRSYXdPcHRpb25Tb2NrZXRfSm9pbk11bHRpY2FzdFNvY2tldF9MZWF2ZU11bHRpY2FzdF9SYXdTZXJ2ZXJTb2NrZXRfc29ja2V0X3JlZmVyZW5jZVBvcnRfdjZPbmx5SW52YWxpZCBiYWNrbG9nIFN0cmVhbSB3YXMgYWxyZWFkeSBsaXN0ZW5lZCB0b19vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlX29uUGF1c2VTdGF0ZUNoYW5nZV9yZXN1bWVfUmF3U29ja2V0X3JlYWRFdmVudHNFbmFibGVkX3dyaXRlRXZlbnRzRW5hYmxlZF9pc01hY09TVGVybWluYWxJbnB1dHdyaXRlRXZlbnRzRW5hYmxlZG5hdGl2ZVRhc2tuYXRpdmVTb2NrZXRfd3JpdGVQaXBlX3JlYWRQaXBlZmRzb2NrZXRUeXBlcmVhZEV2ZW50c0VuYWJsZWRlbmFibGVkX1NlcnZlclNvY2tldHJhd1NvY2tldF9Tb2NrZXRTdHJlYW1Db25zdW1lcnN0cmVhbUNvbXBsZXRlcl9lbnN1cmVSYXdTb2NrZXRTdWJzY3JpcHRpb25fY29uc3VtZXJEb25lX3dyaXRlX2VuYWJsZVdyaXRlRXZlbnRfZGlzYWJsZVdyaXRlRXZlbnRfU29ja2V0X2NvbnRyb2xsZXJDbG9zZWRfY29uc3VtZXJfZGV0YWNoUmVhZHlzZXBDYW5ub3Qgc2VuZCBlcnJvcnMgb24gc29ja2V0c19jbG9zZVJhd1NvY2tldF9kZXRhY2hSYXdfUmF3RGF0YWdyYW1Tb2NrZXRtdWx0aWNhc3RMb29wYmFja211bHRpY2FzdEhvcHNtdWx0aWNhc3RJbnRlcmZhY2Vicm9hZGNhc3RFbmFibGVkX1NlY3VyZVNvY2tldHJlbmVnb3RpYXRldXNlU2Vzc2lvbkNhY2hlcmVxdWVzdENsaWVudENlcnRpZmljYXRlcmVxdWlyZUNsaWVudENlcnRpZmljYXRlcGVlckNlcnRpZmljYXRlcGVlckNlcnRpZmljYXRlIGNhbGxlZCBvbiBkZXN0cm95ZWQgU2VjdXJlU29ja2V0c2VsZWN0ZWRQcm90b2NvbHNlbGVjdGVkUHJvdG9jb2wgY2FsbGVkIG9uIGRlc3Ryb3llZCBTZWN1cmVTb2NrZXRfU2VjdXJlRmlsdGVySW1wbEVOQ1JZUFRFRF9TSVpFYnVmZmVyc1NlY3VyZVNvY2tldF9Db25uZWN0aG9zdE5hbWVpc19zZXJ2ZXJwcm90b2NvbHNfZGVzdHJveVNlY3VyZVNvY2tldF9EZXN0cm95aGFuZHNoYWtlU2VjdXJlU29ja2V0X0hhbmRzaGFrZXJlaGFuZHNoYWtlcHJvY2Vzc0J1ZmZlclNlY3VyZVNvY2tldF9HZXRTZWxlY3RlZFByb3RvY29sU2VjdXJlU29ja2V0X1JlbmVnb3RpYXRlU2VjdXJlU29ja2V0X0luaXRTZWN1cmVTb2NrZXRfUGVlckNlcnRpZmljYXRlcmVnaXN0ZXJCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrU2VjdXJlU29ja2V0X1JlZ2lzdGVyQmFkQ2VydGlmaWNhdGVDYWxsYmFja3JlZ2lzdGVySGFuZHNoYWtlQ29tcGxldGVDYWxsYmFja1NlY3VyZVNvY2tldF9SZWdpc3RlckhhbmRzaGFrZUNvbXBsZXRlQ2FsbGJhY2toYW5kc2hha2VDb21wbGV0ZUhhbmRsZXJfcG9pbnRlclNlY3VyZVNvY2tldF9GaWx0ZXJQb2ludGVyX1NlY3VyaXR5Q29udGV4dGRlZmF1bHRDb250ZXh0d2l0aFRydXN0ZWRSb290c19jcmVhdGVOYXRpdmVDb250ZXh0X3RydXN0QnVpbHRpblJvb3RzU2VjdXJpdHlDb250ZXh0X0FsbG9jYXRldXNlUHJpdmF0ZUtleXBhc3N3b3JkdXNlUHJpdmF0ZUtleUJ5dGVzU2VjdXJpdHlDb250ZXh0X1VzZVByaXZhdGVLZXlCeXRlc2tleUJ5dGVzc2V0VHJ1c3RlZENlcnRpZmljYXRlc3NldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlc1NlY3VyaXR5Q29udGV4dF9TZXRUcnVzdGVkQ2VydGlmaWNhdGVzQnl0ZXNjZXJ0Qnl0ZXN1c2VDZXJ0aWZpY2F0ZUNoYWludXNlQ2VydGlmaWNhdGVDaGFpbkJ5dGVzU2VjdXJpdHlDb250ZXh0X1VzZUNlcnRpZmljYXRlQ2hhaW5CeXRlc2NoYWluQnl0ZXNzZXRDbGllbnRBdXRob3JpdGllc3NldENsaWVudEF1dGhvcml0aWVzQnl0ZXNTZWN1cml0eUNvbnRleHRfU2V0Q2xpZW50QXV0aG9yaXRpZXNCeXRlc2F1dGhDZXJ0Qnl0ZXNzZXRBbHBuUHJvdG9jb2xzaXNTZXJ2ZXJlbmNvZGVkUHJvdG9jb2xzX3NldEFscG5Qcm90b2NvbHNTZWN1cml0eUNvbnRleHRfU2V0QWxwblByb3RvY29sc1NlY3VyaXR5Q29udGV4dF9UcnVzdEJ1aWx0aW5Sb290c19YNTA5Q2VydGlmaWNhdGVJbXBsX2NhY2hlZERlcl9jYWNoZWRQZW1fY2FjaGVkU2hhMV9kZXJYNTA5X0RlcmRlcl9wZW1YNTA5X1BlbXBlbV9zaGExWDUwOV9TaGExc3ViamVjdFg1MDlfU3ViamVjdGlzc3Vlclg1MDlfSXNzdWVyc3RhcnRWYWxpZGl0eV9zdGFydFZhbGlkaXR5aXNVdGNlbmRWYWxpZGl0eV9lbmRWYWxpZGl0eVg1MDlfU3RhcnRWYWxpZGl0eVg1MDlfRW5kVmFsaWRpdHlfUmF3U3luY2hyb25vdXNTb2NrZXRjb25uZWN0U3luY3JlYWRTeW5jX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0TmF0aXZlV3JhcHBlcl9OYXRpdmVTeW5jaHJvbm91c1NvY2tldFBhcmFtZXRlciBob3N0IGNhbm5vdCBiZSBudWxsX25hdGl2ZUNyZWF0ZUNvbm5lY3RTeW5jX25hdGl2ZUF2YWlsYWJsZV9uYXRpdmVHZXRQb3J0X25hdGl2ZUdldFJlbW90ZVBlZXJfbmF0aXZlQ2xvc2VTeW5jX2NoZWNrQXZhaWxhYmxlU29ja2V0IGlzIGNsb3NlZCBmb3IgcmVhZGluZ0ludmFsaWQgYXJndW1lbnRzIHRvIHJlYWRJbnRvU3luY3N0YXJ0IGNhbm5vdCBiZSBudWxsX25hdGl2ZVJlYWRJbnRvcmVhZEludG9TeW5jIGZhaWxlZF9uYXRpdmVSZWFkX25hdGl2ZVNodXRkb3duUmVhZF9uYXRpdmVTaHV0ZG93bldyaXRlU29ja2V0IGlzIGNsb3NlZCBmb3Igd3JpdGluZ0ludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlRnJvbVN5bmNzdGFydCBjYW5ub3QgYmUgZXF1YWwgdG8gbnVsbF9uYXRpdmVXcml0ZXdyaXRlRnJvbVN5bmMgZmFpbGVkX25hdGl2ZUxvb2t1cFJlcXVlc3RTeW5jaHJvbm91c1NvY2tldF9Mb29rdXBSZXF1ZXN0U3luY2hyb25vdXNTb2NrZXRfQ3JlYXRlQ29ubmVjdFN5bmNTeW5jaHJvbm91c1NvY2tldF9BdmFpbGFibGVTeW5jaHJvbm91c1NvY2tldF9DbG9zZVN5bmNTeW5jaHJvbm91c1NvY2tldF9HZXRQb3J0U3luY2hyb25vdXNTb2NrZXRfR2V0UmVtb3RlUGVlclN5bmNocm9ub3VzU29ja2V0X1JlYWRTeW5jaHJvbm91c1NvY2tldF9SZWFkTGlzdFN5bmNocm9ub3VzU29ja2V0X1NodXRkb3duUmVhZFN5bmNocm9ub3VzU29ja2V0X1NodXRkb3duV3JpdGVTeW5jaHJvbm91c1NvY2tldF9Xcml0ZUxpc3R0b0J5dGVzX0NvcHlpbmdCeXRlc0J1aWxkZXJfaW5pdFNpemVfZW1wdHlMaXN0X3BvdzJyb3VuZHVwX0J5dGVzQnVpbGRlcl9jaHVua3N0eXBlZEJ5dGVzSU9FeGNlcHRpb25PU0Vycm9ybm9FcnJvckNvZGVPUyBFcnJvciwgZXJybm8gPSA6IGVycm5vID0gX0J1ZmZlckFuZFN0YXJ0X0lPQ3J5cHRvZ2V0UmFuZG9tQnl0ZXNDcnlwdG9fR2V0UmFuZG9tQnl0ZXNaTGliT3B0aW9ubWluV2luZG93Qml0c01JTl9XSU5ET1dfQklUU1VzZSBtaW5XaW5kb3dCaXRzIGluc3RlYWRtYXhXaW5kb3dCaXRzTUFYX1dJTkRPV19CSVRTVXNlIG1heFdpbmRvd0JpdHMgaW5zdGVhZGRlZmF1bHRXaW5kb3dCaXRzREVGQVVMVF9XSU5ET1dfQklUU1VzZSBkZWZhdWx0V2luZG93Qml0cyBpbnN0ZWFkbWluTGV2ZWxNSU5fTEVWRUxVc2UgbWluTGV2ZWwgaW5zdGVhZG1heExldmVsTUFYX0xFVkVMVXNlIG1heExldmVsIGluc3RlYWRkZWZhdWx0TGV2ZWxERUZBVUxUX0xFVkVMVXNlIGRlZmF1bHRMZXZlbCBpbnN0ZWFkbWluTWVtTGV2ZWxNSU5fTUVNX0xFVkVMVXNlIG1pbk1lbUxldmVsIGluc3RlYWRtYXhNZW1MZXZlbE1BWF9NRU1fTEVWRUxVc2UgbWF4TWVtTGV2ZWwgaW5zdGVhZGRlZmF1bHRNZW1MZXZlbERFRkFVTFRfTUVNX0xFVkVMVXNlIGRlZmF1bHRNZW1MZXZlbCBpbnN0ZWFkc3RyYXRlZ3lGaWx0ZXJlZFNUUkFURUdZX0ZJTFRFUkVEVXNlIHN0cmF0ZWd5RmlsdGVyZWQgaW5zdGVhZHN0cmF0ZWd5SHVmZm1hbk9ubHlTVFJBVEVHWV9IVUZGTUFOX09OTFlVc2Ugc3RyYXRlZ3lIdWZmbWFuT25seSBpbnN0ZWFkc3RyYXRlZ3lSbGVTVFJBVEVHWV9STEVVc2Ugc3RyYXRlZ3lSbGUgaW5zdGVhZHN0cmF0ZWd5Rml4ZWRTVFJBVEVHWV9GSVhFRFVzZSBzdHJhdGVneUZpeGVkIGluc3RlYWRzdHJhdGVneURlZmF1bHRTVFJBVEVHWV9ERUZBVUxUVXNlIHN0cmF0ZWd5RGVmYXVsdCBpbnN0ZWFkWkxpYkNvZGVjX2RlZmF1bHRaTGliRW5jb2RlclpMaWJEZWNvZGVyUmF3WkxpYkZpbHRlcmRlZmxhdGVGaWx0ZXJpbmZsYXRlRmlsdGVyX21ha2VaTGliRGVmbGF0ZUZpbHRlcl9tYWtlWkxpYkluZmxhdGVGaWx0ZXJfQnVmZmVyU2lua19aTGliRW5jb2RlclNpbmtfWkxpYkRlY29kZXJTaW5rX0ZpbHRlclNpbmtvdmVycmlkZXNmcm9tUmF3UGF0aGdldEN1cnJlbnREaXJlY3RvcnlzZXRDdXJyZW50RGlyZWN0b3J5c3lzdGVtVGVtcGdldFN5c3RlbVRlbXBEaXJlY3RvcnlyZXNvbHZlU3ltYm9saWNMaW5rc3Jlc29sdmVTeW1ib2xpY0xpbmtzU3luY3JlbmFtZW5ld1BhdGhyZW5hbWVTeW5jYWJzb2x1dGVmb2xsb3dMaW5rc19EaXJlY3RvcnlfcmF3UGF0aHJhd1BhdGhyYXdQYXRoIGNhbm5vdCBiZSBudWxsRGlyZWN0b3J5X0N1cnJlbnRfc2V0Q3VycmVudERpcmVjdG9yeV9TZXRDdXJyZW50X2NyZWF0ZVRlbXBEaXJlY3RvcnlfQ3JlYXRlVGVtcF9zeXN0ZW1UZW1wRGlyZWN0b3J5X1N5c3RlbVRlbXBfZXhpc3RzRGlyZWN0b3J5X0V4aXN0c0RpcmVjdG9yeV9DcmVhdGVfZGVsZXRlTmF0aXZlRGlyZWN0b3J5X0RlbGV0ZV9yZW5hbWVEaXJlY3RvcnlfUmVuYW1lX2ZpbGxXaXRoRGlyZWN0b3J5TGlzdGluZ0RpcmVjdG9yeV9GaWxsV2l0aERpcmVjdG9yeUxpc3RpbmdHZXR0aW5nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZmFpbGVkIGlzIG5vdCBhIFN0cmluZyBvciBEaXJlY3RvcnlUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBzZXR0aW5nIERpcmVjdG9yeS5jdXJyZW50U2V0dGluZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZhaWxlZF9pc0Vycm9yUmVzcG9uc2VfZXhjZXB0aW9uT3JFcnJvckZyb21SZXNwb25zZUV4aXN0cyBmYWlsZWRfYWJzb2x1dGVQYXRoQ3JlYXRpb24gZmFpbGVkRGlyZWN0b3J5LmNyZWF0ZVRlbXAgY2FsbGVkIHdpdGggYW4gZW1wdHkgcGF0aC4gVG8gdXNlIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnksIHVzZSBEaXJlY3Rvcnkuc3lzdGVtVGVtcGZ1bGxQcmVmaXhDcmVhdGlvbiBvZiB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZhaWxlZF9kZWxldGVEZWxldGlvbiBmYWlsZWRfZGVsZXRlU3luY1JlbmFtZSBmYWlsZWREaXJlY3Rvcnk6ICdlcnJfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHNfQXN5bmNEaXJlY3RvcnlMaXN0ZXJsaXN0RmlsZWxpc3REaXJlY3RvcnlsaXN0TGlua2xpc3RFcnJvcmxpc3REb25lcmVzcG9uc2VUeXBlcmVzcG9uc2VQYXRocmVzcG9uc2VDb21wbGV0ZXJlc3BvbnNlRXJyb3JjYW5jZWxlZG5leHRSdW5uaW5nX29wc19jbGVhbnVwZXJyb3JUeXBlcmVzcG9uc2VFcnJvckluZm9lcnJvclBhdGhEaXJlY3RvcnkgbGlzdGluZyBmYWlsZWRfRW1iZWRkZXJDb25maWdfbWF5Q2hkaXJfbWF5RXhpdF9tYXlTZXRFY2hvTW9kZV9tYXlTZXRMaW5lTW9kZV9tYXlTbGVlcF9FdmVudEhhbmRsZXJfdGltZXJNaWxsaXNlY29uZENsb2NrRXZlbnRIYW5kbGVyX1RpbWVyTWlsbGlzZWNvbmRDbG9ja0V2ZW50SGFuZGxlcl9TZW5kRGF0YXNlbmRlclJFQURVc2UgcmVhZCBpbnN0ZWFkV1JJVEVVc2Ugd3JpdGUgaW5zdGVhZEFQUEVORFVzZSBhcHBlbmQgaW5zdGVhZHdyaXRlT25seVdSSVRFX09OTFlVc2Ugd3JpdGVPbmx5IGluc3RlYWR3cml0ZU9ubHlBcHBlbmRXUklURV9PTkxZX0FQUEVORFVzZSB3cml0ZU9ubHlBcHBlbmQgaW5zdGVhZEZpbGVMb2NrU0hBUkVEVXNlIHNoYXJlZCBpbnN0ZWFkZXhjbHVzaXZlRVhDTFVTSVZFVXNlIGV4Y2x1c2l2ZSBpbnN0ZWFkYmxvY2tpbmdTaGFyZWRCTE9DS0lOR19TSEFSRURVc2UgYmxvY2tpbmdTaGFyZWQgaW5zdGVhZGJsb2NraW5nRXhjbHVzaXZlQkxPQ0tJTkdfRVhDTFVTSVZFVXNlIGJsb2NraW5nRXhjbHVzaXZlIGluc3RlYWRjcmVhdGVGaWxlY29weVN5bmNsYXN0QWNjZXNzZWRsYXN0QWNjZXNzZWRTeW5jc2V0TGFzdEFjY2Vzc2Vkc2V0TGFzdEFjY2Vzc2VkU3luY2xhc3RNb2RpZmllZGxhc3RNb2RpZmllZFN5bmNzZXRMYXN0TW9kaWZpZWRzZXRMYXN0TW9kaWZpZWRTeW5jb3BlblJlYWRyZWFkQXNMaW5lc3JlYWRBc0xpbmVzU3luY3dyaXRlQXNTdHJpbmdSYW5kb21BY2Nlc3NGaWxlcmVhZEJ5dGVTeW5jd3JpdGVCeXRlU3luY3Bvc2l0aW9uU3luY3NldFBvc2l0aW9uU3luY3RydW5jYXRlU3luY2ZsdXNoU3luY2xvY2tTeW5jdW5sb2NrdW5sb2NrU3luYywgcGF0aCA9ICdfRmlsZVN0cmVhbV9vcGVuZWRGaWxlX2Nsb3NlQ29tcGxldGVyX3Vuc3Vic2NyaWJlZF9yZWFkSW5Qcm9ncmVzc19hdEVuZGZvclN0ZGluX3NldHVwQ29udHJvbGxlcl9yZWFkQmxvY2tfY2xvc2VGaWxlQmFkIGVuZCBwb3NpdGlvbjogQmFkIHN0YXJ0IHBvc2l0aW9uOiBvblJlYWR5b25PcGVuRmlsZW9wZW5GYWlsZWRfRmlsZVN0cmVhbUNvbnN1bWVyX2ZpbGVfb3BlbkZ1dHVyZWZyb21TdGRpb29wZW5lZEZpbGVfRmlsZV9kaXNwYXRjaFdpdGhOYW1lc3BhY2VDYW5ub3QgY2hlY2sgZXhpc3RlbmNlRmlsZV9FeGlzdHNDYW5ub3QgY2hlY2sgZXhpc3RlbmNlIG9mIGZpbGVDYW5ub3QgY3JlYXRlIGZpbGVGaWxlX0NyZWF0ZV9jcmVhdGVMaW5rRmlsZV9DcmVhdGVMaW5rX2xpbmtUYXJnZXRGaWxlX0xpbmtUYXJnZXRDYW5ub3QgZGVsZXRlIGZpbGVGaWxlX0RlbGV0ZV9kZWxldGVMaW5rTmF0aXZlRmlsZV9EZWxldGVMaW5rQ2Fubm90IHJlbmFtZSBmaWxlIHRvICdGaWxlX1JlbmFtZW9sZFBhdGhfcmVuYW1lTGlua0ZpbGVfUmVuYW1lTGlua0Nhbm5vdCBjb3B5IGZpbGUgdG8gJ19jb3B5RmlsZV9Db3B5SW52YWxpZCBmaWxlIG1vZGUgZm9yIHRoaXMgb3BlcmF0aW9uQ2Fubm90IG9wZW4gZmlsZUNhbm5vdCByZXRyaWV2ZSBsZW5ndGggb2YgZmlsZV9sZW5ndGhGcm9tUGF0aEZpbGVfTGVuZ3RoRnJvbVBhdGhDYW5ub3QgcmV0cmlldmUgYWNjZXNzIHRpbWVfbGFzdEFjY2Vzc2VkRmlsZV9MYXN0QWNjZXNzZWRtaWxsaXNDYW5ub3Qgc2V0IGFjY2VzcyB0aW1lX3NldExhc3RBY2Nlc3NlZEZpbGVfU2V0TGFzdEFjY2Vzc2VkRmFpbGVkIHRvIHNldCBmaWxlIGFjY2VzcyB0aW1lQ2Fubm90IHJldHJpZXZlIG1vZGlmaWNhdGlvbiB0aW1lX2xhc3RNb2RpZmllZEZpbGVfTGFzdE1vZGlmaWVkQ2Fubm90IHNldCBtb2RpZmljYXRpb24gdGltZV9zZXRMYXN0TW9kaWZpZWRGaWxlX1NldExhc3RNb2RpZmllZEZhaWxlZCB0byBzZXQgZmlsZSBtb2RpZmljYXRpb24gdGltZUZpbGVfT3Blbl9vcGVuU3RkaW9GaWxlX09wZW5TdGRpb19vcGVuU3RkaW9TeW5jQ2Fubm90IG9wZW4gc3RkaW8gZmlsZSBmb3I6IGNvbnN1bWVycmVhZERhdGFDaHVua2VkX3RyeURlY29kZUZhaWxlZCB0byBkZWNvZGUgZGF0YSB1c2luZyBlbmNvZGluZyAnRmlsZTogJ3Rocm93SWZFcnJvcl9SYW5kb21BY2Nlc3NGaWxlT3BzX1JhbmRvbUFjY2Vzc0ZpbGVfY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyX2FzeW5jRGlzcGF0Y2hlZF9maWxlU2VydmljZWxvY2tVbmxvY2tfbWF5YmVDb25uZWN0SGFuZGxlcl9tYXliZVBlcmZvcm1DbGVhbnVwZXh0LmRhcnQuaW8uZ2V0T3BlbkZpbGVzZXh0LmRhcnQuaW8uZ2V0RmlsZUJ5SURfZGlzcGF0Y2htYXJrQ2xvc2VkQ2Fubm90IGNsb3NlIGZpbGVyZWFkQnl0ZSBmYWlsZWRyZWFkIGZhaWxlZHJlYWRTeW5jIGZhaWxlZHJlYWRJbnRvIGZhaWxlZHdyaXRlQnl0ZSBmYWlsZWRJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZUZyb213cml0ZUZyb20gZmFpbGVkcG9zaXRpb24gZmFpbGVkc2V0UG9zaXRpb24gZmFpbGVkdHJ1bmNhdGUgZmFpbGVkbGVuZ3RoIGZhaWxlZGZsdXNoIGZhaWxlZF9maWxlTG9ja1ZhbHVlZmxsb2NrIGZhaWxlZHVubG9jayBmYWlsZWRGaWxlIGNsb3NlZEFuIGFzeW5jIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgcGVuZGluZ0ZpbGVTeXN0ZW1FbnRpdHlUeXBlRklMRVVzZSBmaWxlIGluc3RlYWRkaXJlY3RvcnlESVJFQ1RPUllVc2UgZGlyZWN0b3J5IGluc3RlYWRMSU5LVXNlIGxpbmsgaW5zdGVhZF90eXBlTGlzdF9sb29rdXBGaWxlU3RhdF9jaGFuZ2VkVGltZV9tb2RpZmllZFRpbWVfYWNjZXNzZWRUaW1lX25vdEZvdW5kYWNjZXNzZWRfaW50ZXJuYWxOb3RGb3VuZF9zdGF0U3luY0ZpbGVfU3RhdHN0YXRTeW5jX3N0YXRTeW5jSW50ZXJuYWxfc3RhdEZpbGVTdGF0OiB0eXBlIAogICAgICAgICAgY2hhbmdlZCAKICAgICAgICAgIG1vZGlmaWVkIAogICAgICAgICAgYWNjZXNzZWQgCiAgICAgICAgICBtb2RlIG1vZGVTdHJpbmcKICAgICAgICAgIHNpemUgcGVybWlzc2lvbnMtLXgtdy0td3hyLS1yLXhydy1yd3goc3VpZCkgKGd1aWQpIChzdGlja3kpIF9hYnNvbHV0ZVdpbmRvd3NQYXRoUGF0dGVybl4oXFxcXHxbYS16QS1aXTpbL1xcXSlfcGFyZW50UmVnRXhwW14vXFxdWy9cXF0rW14vXFxdW14vXS8rW14vXUNhbm5vdCByZXNvbHZlIHN5bWJvbGljIGxpbmtzdHJpbW1lZFBhdGhmc1dhdGNoX2lkZW50aWNhbHBhdGgxcGF0aDJFcnJvciBpbiBGaWxlU3lzdGVtRW50aXR5LmlkZW50aWNhbChmc2VJZGVudGljYWxfcmF3QWJzb2x1dGVQYXRoX2lkZW50aWNhbFN5bmNFcnJvciBpbiBGaWxlU3lzdGVtRW50aXR5LmlkZW50aWNhbFN5bmNpZGVudGljYWxTeW5jZnNlSWRlbnRpY2FsU3luY2lzV2F0Y2hTdXBwb3J0ZWRmc1dhdGNoSXNTdXBwb3J0ZWRfdG9VdGY4QXJyYXlfdG9OdWxsVGVybWluYXRlZFV0ZjhBcnJheV90b1N0cmluZ0Zyb21VdGY4QXJyYXlub25OdWxsVGVybWluYXRlZHR5cGVTeW5jaXNMaW5rX2lzTGlua1Jhd2lzRmlsZWlzTGlua1N5bmNfaXNMaW5rUmF3U3luY2lzRmlsZVN5bmNpc0RpcmVjdG9yeVN5bmNfZ2V0VHlwZU5hdGl2ZUZpbGVfR2V0VHlwZV9pZGVudGljYWxOYXRpdmVGaWxlX0FyZUlkZW50aWNhbF9yZXNvbHZlU3ltYm9saWNMaW5rc0ZpbGVfUmVzb2x2ZVN5bWJvbGljTGlua3NwYXJlbnRPZnJvb3RFbmRbL1xcXV9nZXRUeXBlU3luY0hlbHBlckVycm9yIGdldHRpbmcgdHlwZSBvZiBGaWxlU3lzdGVtRW50aXR5X2dldFR5cGVTeW5jZnNlR2V0VHlwZVN5bmNfZ2V0VHlwZVJlcXVlc3RFcnJvciBnZXR0aW5nIHR5cGVfZ2V0VHlwZWZzZUdldFR5cGVfdGhyb3dJZkVycm9yX3RyaW1UcmFpbGluZ1BhdGhTZXBhcmF0b3JzX2Vuc3VyZVRyYWlsaW5nUGF0aFNlcGFyYXRvcnNGaWxlU3lzdGVtRXZlbnRDUkVBVEVVc2UgY3JlYXRlIGluc3RlYWRtb2RpZnlNT0RJRllVc2UgbW9kaWZ5IGluc3RlYWRERUxFVEVVc2UgZGVsZXRlIGluc3RlYWRtb3ZlTU9WRVVzZSBtb3ZlIGluc3RlYWRVc2UgYWxsIGluc3RlYWRfbW9kaWZ5QXR0cmlidXRlc19kZWxldGVTZWxmX2lzRGlyRmlsZVN5c3RlbUNyZWF0ZUV2ZW50RmlsZVN5c3RlbUNyZWF0ZUV2ZW50KCdGaWxlU3lzdGVtTW9kaWZ5RXZlbnRjb250ZW50Q2hhbmdlZEZpbGVTeXN0ZW1Nb2RpZnlFdmVudCgnJywgY29udGVudENoYW5nZWQ9RmlsZVN5c3RlbURlbGV0ZUV2ZW50RmlsZVN5c3RlbURlbGV0ZUV2ZW50KCdGaWxlU3lzdGVtTW92ZUV2ZW50RmlsZVN5c3RlbU1vdmVFdmVudCgnLCAnX0ZpbGVTeXN0ZW1XYXRjaGVyX3JlY3Vyc2l2ZV9icm9hZGNhc3RDb250cm9sbGVyRmlsZSBzeXN0ZW0gd2F0Y2hpbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtRmFpbGVkIHRvIGluaXRpYWxpemUgZmlsZSBzeXN0ZW0gZW50aXR5IHdhdGNoZXJGYWlsZWQgdG8gd2F0Y2ggcGF0aF9kb25lUGF0aFdhdGNoZWRfcGF0aEZyb21QYXRoSWRfbGlzdGVuT25Tb2NrZXRzdG9wc2dldFBhdGhnZXRJc0RpcnJld3JpdGVNb3ZlaXNEaXJfaW5pdFdhdGNoZXJGaWxlU3lzdGVtV2F0Y2hlcl9Jbml0V2F0Y2hlcl9jbG9zZVdhdGNoZXJGaWxlU3lzdGVtV2F0Y2hlcl9DbG9zZVdhdGNoZXJfd2F0Y2hQYXRoRmlsZVN5c3RlbVdhdGNoZXJfV2F0Y2hQYXRoX3Vud2F0Y2hQYXRoRmlsZVN5c3RlbVdhdGNoZXJfVW53YXRjaFBhdGhwYXRoX2lkX3JlYWRFdmVudHNGaWxlU3lzdGVtV2F0Y2hlcl9SZWFkRXZlbnRzX2dldFNvY2tldElkRmlsZVN5c3RlbVdhdGNoZXJfR2V0U29ja2V0SWRGaWxlU3lzdGVtV2F0Y2hlcl9Jc1N1cHBvcnRlZF9JT1Jlc291cmNlSW5mb19zd19zdGFydFRpbWVlbGFwc2VkTWljcm9zZWNvbmRzZnVsbFZhbHVlTWFwcmVmZXJlbmNlVmFsdWVNYXBnZXROZXh0SURfUmVhZFdyaXRlUmVzb3VyY2VJbmZvdG90YWxXcml0dGVucmVhZENvdW50d3JpdGVDb3VudGxhc3RSZWFkbGFzdFdyaXRlX0ZpbGVSZXNvdXJjZUluZm9vcGVuRmlsZXNGaWxlT3BlbmVkRmlsZUNsb3NlZGdldE9wZW5GaWxlc0xpc3RnZXRPcGVuRmlsZXNfb3BlbmZpbGVzanNvblZhbHVlZ2V0RmlsZUluZm9NYXBnZXRGaWxlSW5mb01hcEJ5SURfUHJvY2Vzc1Jlc291cmNlSW5mb3N0YXJ0ZWRBdHN0YXJ0ZWRQcm9jZXNzZXNQcm9jZXNzU3RhcnRlZFByb2Nlc3NTdG9wcGVkZ2V0U3RhcnRlZFByb2Nlc3Nlc0xpc3RnZXRTdGFydGVkUHJvY2Vzc2VzX3N0YXJ0ZWRwcm9jZXNzZXNnZXRQcm9jZXNzSW5mb01hcEJ5SWRfU29ja2V0UmVzb3VyY2VJbmZvX3RjcFN0cmluZ1RDUF91ZHBTdHJpbmdVRFBvcGVuU29ja2V0c2xpc3RlbmluZzpyZW1vdGVyZW1vdGVIb3N0Z2V0T3BlblNvY2tldHNMaXN0Z2V0U29ja2V0SW5mb01hcGxpc3RlbmluZ05BYWRkcmVzc1R5cGVnZXRTb2NrZXRJbmZvTWFwQnlJRGdldE9wZW5Tb2NrZXRzX29wZW5zb2NrZXRzU29ja2V0T3BlbmVkU29ja2V0Q2xvc2VkX1N0cmVhbVNpbmtJbXBsX2RvbmVDb21wbGV0ZXJfY29udHJvbGxlckluc3RhbmNlX2NvbnRyb2xsZXJDb21wbGV0ZXJfaXNCb3VuZFN0cmVhbVNpbmsgaXMgY2xvc2VkU3RyZWFtU2luayBpcyBhbHJlYWR5IGJvdW5kIHRvIGEgc3RyZWFtU3RyZWFtU2luayBpcyBib3VuZCB0byBhIHN0cmVhbV9jbG9zZVRhcmdldF9jb21wbGV0ZURvbmVWYWx1ZV9jb21wbGV0ZURvbmVFcnJvcl9JT1NpbmtJbXBsX2VuY29kaW5nX2VuY29kaW5nTXV0YWJsZUlPU2luayBlbmNvZGluZyBpcyBub3QgbXV0YWJsZV9JT1NlcnZpY2Vfc2VydmljZVBvcnRzX3JlcGx5VG9Qb3J0X21lc3NhZ2VNYXBmaWxlRXhpc3RzZmlsZUNyZWF0ZWZpbGVEZWxldGVmaWxlUmVuYW1lZmlsZUNvcHlmaWxlT3BlbmZpbGVSZXNvbHZlU3ltYm9saWNMaW5rc2ZpbGVDbG9zZWZpbGVQb3NpdGlvbmZpbGVTZXRQb3NpdGlvbmZpbGVUcnVuY2F0ZWZpbGVMZW5ndGhGcm9tUGF0aGZpbGVMYXN0QWNjZXNzZWRmaWxlU2V0TGFzdEFjY2Vzc2VkZmlsZUxhc3RNb2RpZmllZGZpbGVTZXRMYXN0TW9kaWZpZWRmaWxlRmx1c2hmaWxlUmVhZEJ5dGVmaWxlV3JpdGVCeXRlZmlsZVJlYWRmaWxlUmVhZEludG9maWxlV3JpdGVGcm9tZmlsZUNyZWF0ZUxpbmtmaWxlRGVsZXRlTGlua2ZpbGVSZW5hbWVMaW5rZmlsZUxpbmtUYXJnZXRmaWxlVHlwZWZpbGVJZGVudGljYWxmaWxlU3RhdGZpbGVMb2Nrc29ja2V0TG9va3Vwc29ja2V0TGlzdEludGVyZmFjZXNzb2NrZXRSZXZlcnNlTG9va3VwZGlyZWN0b3J5Q3JlYXRlZGlyZWN0b3J5RGVsZXRlZGlyZWN0b3J5RXhpc3RzZGlyZWN0b3J5Q3JlYXRlVGVtcGRpcmVjdG9yeUxpc3RTdGFydGRpcmVjdG9yeUxpc3ROZXh0ZGlyZWN0b3J5TGlzdFN0b3BkaXJlY3RvcnlSZW5hbWVzc2xQcm9jZXNzRmlsdGVyX2Vuc3VyZUluaXRpYWxpemVfZmluYWxpemVfZ2V0TmV4dElkc2VydmljZVBvcnRjcmVhdGVMaW5rdXBkYXRlU3luY3RhcmdldFN5bmNfTGlua0xpbms6ICdfZXhjZXB0aW9uRnJvbVJlc3BvbnNlQ2Fubm90IGNyZWF0ZSBsaW5rIHRvIHRhcmdldCAnQ2Fubm90IGNyZWF0ZSBsaW5rQ2Fubm90IGRlbGV0ZSBsaW5rQ2Fubm90IHJlbmFtZSBsaW5rIHRvICdDYW5ub3QgcmVuYW1lIGxpbmsgJ0Nhbm5vdCBnZXQgdGFyZ2V0IG9mIGxpbmtDYW5ub3QgcmVhZCBsaW5rX05hbWVzcGFjZUlPT3ZlcnJpZGVzX2dsb2JhbHNvY2tldENvbm5lY3Rzb2NrZXRTdGFydENvbm5lY3RydW5XaXRoSU9PdmVycmlkZXNfSU9PdmVycmlkZXNTY29wZV9jcmVhdGVEaXJlY3RvcnlfZ2V0Q3VycmVudERpcmVjdG9yeV9zZXRDdXJyZW50RGlyZWN0b3J5X2dldFN5c3RlbVRlbXBEaXJlY3RvcnlfY3JlYXRlRmlsZV9mc2VJZGVudGljYWxfZnNlSWRlbnRpY2FsU3luY19mc2VHZXRUeXBlX2ZzZUdldFR5cGVTeW5jX2ZzV2F0Y2hfZnNXYXRjaElzU3VwcG9ydGVkX3NvY2tldENvbm5lY3Rfc29ja2V0U3RhcnRDb25uZWN0X251bWJlck9mUHJvY2Vzc29yc19wYXRoU2VwYXJhdG9yX29wZXJhdGluZ1N5c3RlbV9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uX2xvY2FsSG9zdG5hbWVfdmVyc2lvbmlzTGludXhsaW51eGlzTWFjT1NtYWNvc2lzQW5kcm9pZGFuZHJvaWRpc0lPU2lvc2lzRnVjaHNpYWZ1Y2hzaWFudW1iZXJPZlByb2Nlc3NvcnNsb2NhbGVOYW1lb3BlcmF0aW5nU3lzdGVtb3BlcmF0aW5nU3lzdGVtVmVyc2lvbmxvY2FsSG9zdG5hbWVyZXNvbHZlZEV4ZWN1dGFibGVleGVjdXRhYmxlQXJndW1lbnRzcGFja2FnZXMvIGRpcmVjdG9yeSByZXNvbHV0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRGFydCAyX1BsYXRmb3JtX2xvY2FsZUNsb3N1cmVfZW52aXJvbm1lbnRDYWNoZV9jYWNoZWRPU1ZlcnNpb25fbmF0aXZlU2NyaXB0ZGF0YTpQbGF0Zm9ybV9OdW1iZXJPZlByb2Nlc3NvcnNQbGF0Zm9ybV9QYXRoU2VwYXJhdG9yUGxhdGZvcm1fT3BlcmF0aW5nU3lzdGVtUGxhdGZvcm1fT3BlcmF0aW5nU3lzdGVtVmVyc2lvblBsYXRmb3JtX0xvY2FsSG9zdG5hbWVfZXhlY3V0YWJsZVBsYXRmb3JtX0V4ZWN1dGFibGVOYW1lX3Jlc29sdmVkRXhlY3V0YWJsZVBsYXRmb3JtX1Jlc29sdmVkRXhlY3V0YWJsZU5hbWVQbGF0Zm9ybV9FbnZpcm9ubWVudF9leGVjdXRhYmxlQXJndW1lbnRzUGxhdGZvcm1fRXhlY3V0YWJsZUFyZ3VtZW50c1BsYXRmb3JtX0dldFZlcnNpb25fbG9jYWxlTmFtZVBsYXRmb3JtX0xvY2FsZU5hbWVfc2NyaXB0ZXF1YWxzSW5kZXhfQ2FzZUluc2Vuc2l0aXZlU3RyaW5nTWFwX1Byb2Nlc3NVdGlsc19raWxsUGlkUHJvY2Vzc19LaWxsUGlkX3dhdGNoU2lnbmFsSW50ZXJuYWxQcm9jZXNzX0V4aXRfc2V0RXhpdENvZGVQcm9jZXNzX1NldEV4aXRDb2RlX2dldEV4aXRDb2RlUHJvY2Vzc19HZXRFeGl0Q29kZV9zbGVlcFByb2Nlc3NfU2xlZXBfcGlkUHJvY2Vzc19QaWRfd2F0Y2hTaWduYWxTSUdIVVBTSUdJTlRTSUdVU1IxU0lHVVNSMlNJR1dJTkNITGlzdGVuaW5nIGZvciBzaWduYWwgIGlzIG5vdCBzdXBwb3J0ZWRQcm9jZXNzSW5mb19tYXhSc3NQcm9jZXNzSW5mb19NYXhSU1NfY3VycmVudFJzc1Byb2Nlc3NJbmZvX0N1cnJlbnRSU1NjdXJyZW50UnNzbWF4UnNzUHJvY2Vzc1N0YXJ0TW9kZVVzZSBub3JtYWwgaW5zdGVhZGluaGVyaXRTdGRpb0lOSEVSSVRfU1RESU9Vc2UgaW5oZXJpdFN0ZGlvIGluc3RlYWRkZXRhY2hlZERFVEFDSEVEVXNlIGRldGFjaGVkIGluc3RlYWRkZXRhY2hlZFdpdGhTdGRpb0RFVEFDSEVEX1dJVEhfU1RESU9Vc2UgZGV0YWNoZWRXaXRoU3RkaW8gaW5zdGVhZHJ1blN5bmNraWxsUGlkUHJvY2Vzc1NpZ25hbHNpZ2h1cHNpZ2ludHNpZ3F1aXRzaWdpbGxTSUdJTExzaWd0cmFwU0lHVFJBUHNpZ2FicnRTSUdBQlJUc2lnYnVzU0lHQlVTc2lnZnBlU0lHRlBFc2lna2lsbFNJR0tJTExzaWd1c3Ixc2lnc2VndlNJR1NFR1ZzaWd1c3Iyc2lncGlwZVNJR1BJUEVzaWdhbHJtU0lHQUxSTXNpZ3Rlcm1zaWdjaGxkU0lHQ0hMRHNpZ2NvbnRTSUdDT05Uc2lnc3RvcFNJR1NUT1BzaWd0c3RwU0lHVFNUUHNpZ3R0aW5TSUdUVElOc2lndHRvdVNJR1RUT1VzaWd1cmdTSUdVUkdzaWd4Y3B1U0lHWENQVXNpZ3hmc3pTSUdYRlNac2lndnRhbHJtU0lHVlRBTFJNc2lncHJvZlNJR1BST0ZzaWd3aW5jaHNpZ3BvbGxTSUdQT0xMc2lnc3lzU0lHU1lTVXNlIHNpZ2h1cCBpbnN0ZWFkVXNlIHNpZ2ludCBpbnN0ZWFkVXNlIHNpZ3F1aXQgaW5zdGVhZFVzZSBzaWdpbGwgaW5zdGVhZFVzZSBzaWd0cmFwIGluc3RlYWRVc2Ugc2lnYWJydCBpbnN0ZWFkVXNlIHNpZ2J1cyBpbnN0ZWFkVXNlIHNpZ2ZwZSBpbnN0ZWFkVXNlIHNpZ2tpbGwgaW5zdGVhZFVzZSBzaWd1c3IxIGluc3RlYWRVc2Ugc2lnc2VndiBpbnN0ZWFkVXNlIHNpZ3VzcjIgaW5zdGVhZFVzZSBzaWdwaXBlIGluc3RlYWRVc2Ugc2lnYWxybSBpbnN0ZWFkVXNlIHNpZ3Rlcm0gaW5zdGVhZFVzZSBzaWdjaGxkIGluc3RlYWRVc2Ugc2lnY29udCBpbnN0ZWFkVXNlIHNpZ3N0b3AgaW5zdGVhZFVzZSBzaWd0c3RwIGluc3RlYWRVc2Ugc2lndHRpbiBpbnN0ZWFkVXNlIHNpZ3R0b3UgaW5zdGVhZFVzZSBzaWd1cmcgaW5zdGVhZFVzZSBzaWd4Y3B1IGluc3RlYWRVc2Ugc2lneGZzeiBpbnN0ZWFkVXNlIHNpZ3Z0YWxybSBpbnN0ZWFkVXNlIHNpZ3Byb2YgaW5zdGVhZFVzZSBzaWd3aW5jaCBpbnN0ZWFkVXNlIHNpZ3BvbGwgaW5zdGVhZFVzZSBzaWdzeXMgaW5zdGVhZFNpZ25hbEV4Y2VwdGlvbiwgb3NFcnJvcjogU2lnbmFsRXhjZXB0aW9uOiBQcm9jZXNzRXhjZXB0aW9uT1MgZXJyb3IgY29kZTogUHJvY2Vzc0V4Y2VwdGlvbjogCiAgQ29tbWFuZDogU2VjdXJlU2VydmVyU29ja2V0c3VwcG9ydGVkUHJvdG9jb2xzc2VydmVyU29ja2V0UmF3U2VjdXJlU2VydmVyU29ja2V0X2NvbnRleHRjb25uZWN0aW9uc2VjdXJlQ29ubmVjdGlvblNlY3VyZVNvY2tldG9uQmFkQ2VydGlmaWNhdGVyYXdTdGF0ZWRldGFjaGVkUmF3c2VjdXJlU2VydmVyYnVmZmVyZWREYXRhUmF3U2VjdXJlU29ja2V0WDUwOUNlcnRpZmljYXRlX0ZpbHRlclN0YXR1c3JlYWRFbXB0eXdyaXRlRW1wdHlyZWFkUGxhaW50ZXh0Tm9Mb25nZXJFbXB0eXdyaXRlUGxhaW50ZXh0Tm9Mb25nZXJGdWxscmVhZEVuY3J5cHRlZE5vTG9uZ2VyRnVsbHdyaXRlRW5jcnlwdGVkTm9Mb25nZXJFbXB0eV9SYXdTZWN1cmVTb2NrZXRoYW5kc2hha2VTdGF0dXNjb25uZWN0ZWRTdGF0dXNjbG9zZWRTdGF0dXNyZWFkUGxhaW50ZXh0SWR3cml0ZVBsYWludGV4dElkcmVhZEVuY3J5cHRlZElkd3JpdGVFbmNyeXB0ZWRJZGJ1ZmZlckNvdW50X2hhbmRzaGFrZUNvbXBsZXRlX3NvY2tldFN1YnNjcmlwdGlvbl9idWZmZXJlZERhdGFfYnVmZmVyZWREYXRhSW5kZXhfc3RhdHVzX3BhdXNlQ291bnRfcGVuZGluZ1JlYWRFdmVudF9zb2NrZXRDbG9zZWRSZWFkX3NvY2tldENsb3NlZFdyaXRlX2Nsb3NlZFJlYWRfY2xvc2VkV3JpdGVfZmlsdGVyU3RhdHVzX2Nvbm5lY3RQZW5kaW5nX2ZpbHRlclBlbmRpbmdfZmlsdGVyQWN0aXZlX3NlY3VyZUZpbHRlcl9zZWxlY3RlZFByb3RvY29scmVxdWVzdGVkUG9ydF9zZWN1cmVIYW5kc2hha2VDb21wbGV0ZUhhbmRsZXJfb25CYWRDZXJ0aWZpY2F0ZVdyYXBwZXJfZXZlbnREaXNwYXRjaGVyX2RvbmVIYW5kbGVyU3Vic2NyaXB0aW9uIHBhc3NlZCB0byBUTFMgdXBncmFkZSBpcyBwYXVzZWRfc2VjdXJlSGFuZHNoYWtlX2lzQnVmZmVyRW5jcnlwdGVkX3NlbmRXcml0ZUV2ZW50X3ZlcmlmeUZpZWxkc2hvc3QgaXMgbm90IGEgU3RyaW5nIG9yIGFuIEludGVybmV0QWRkcmVzc3JlcXVlc3RlZFBvcnQgaXMgbm90IGluIHRoZSByYW5nZSAwLi42NTUzNV9jb21wbGV0ZUNsb3NlQ29tcGxldGVyX3NjaGVkdWxlUmVhZEV2ZW50SW52YWxpZCBsZW5ndGggcGFyYW1ldGVyIGluIFNlY3VyZVNvY2tldC5yZWFkIChsZW5ndGg6IFJlYWRpbmcgZnJvbSBhIGNsb3NlZCBzb2NrZXRfc2NoZWR1bGVGaWx0ZXJJbnZhbGlkIGJ5dGVzIHBhcmFtZXRlciBpbiBTZWN1cmVTb2NrZXQucmVhZCAoYnl0ZXM6IEludmFsaWQgb2Zmc2V0IHBhcmFtZXRlciBpbiBTZWN1cmVTb2NrZXQucmVhZCAob2Zmc2V0OiBXcml0aW5nIHRvIGEgY2xvc2VkIHNvY2tldHdyaXR0ZW5jZXJ0aWZpY2F0ZW9uQmFkQ2VydGlmaWNhdGUgY2FsbGJhY2sgcmV0dXJuZWQgbm9uLWJvb2xlYW4gX3JlYWRIYW5kbGVyX3dyaXRlSGFuZGxlcl9jbG9zZUhhbmRsZXJfcmVhZFNvY2tldF93cml0ZVNvY2tldENvbm5lY3Rpb24gdGVybWluYXRlZCBkdXJpbmcgaGFuZHNoYWtlQ2FsbGVkIHJlbmVnb3RpYXRlIG9uIGEgbm9uLWNvbm5lY3RlZCBzb2NrZXRfdHJ5RmlsdGVyX3B1c2hBbGxGaWx0ZXJTdGFnZXNfcmVhZFNvY2tldE9yQnVmZmVyZWREYXRhd3JpdGVGcm9tU291cmNlcmVhZFRvU29ja2V0X3NlbmRSZWFkRXZlbnR3YXNJbkhhbmRzaGFrZWJ1ZnMgZXJyb3IgbmV3X3N0YXJ0bmV3X2VuZF9FeHRlcm5hbEJ1ZmZlcmFkdmFuY2VTdGFydGFkdmFuY2VFbmRsaW5lYXJMZW5ndGhsaW5lYXJGcmVlYnl0ZXNSZWFkdG9SZWFkaW5wdXREYXRhdG9Xcml0ZV9TZWN1cmVGaWx0ZXJUbHNFeGNlcHRpb25IYW5kc2hha2VFeGNlcHRpb25DZXJ0aWZpY2F0ZUV4Y2VwdGlvblNlY3VyaXR5Q29udGV4dGFscG5TdXBwb3J0ZWRfcHJvdG9jb2xzVG9MZW5ndGhFbmNvZGluZ3Byb3RvY29sc0xlbmd0aGV4cGVjdGVkTGVuZ3RoTGVuZ3RoIG9mIHByb3RvY29sIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgKHdhczogVGhlIG1heGltdW0gbWVzc2FnZSBsZW5ndGggc3VwcG9ydGVkIGlzIDJeMTMtMS5ieXRlc09mZnNldF9wcm90b2NvbHNUb0xlbmd0aEVuY29kaW5nTm9uQXNjaWlCYWlsb3V0YWRkUHJvdG9jb2xvdXRCeXRlc3Byb3RvY29sQnl0ZXNfU2VydmljZU9iamVjdEludGVybmV0QWRkcmVzc1R5cGVJUHY0SVB2NklQX1Y0VXNlIElQdjQgaW5zdGVhZElQX1Y2VXNlIElQdjYgaW5zdGVhZEFOWVVzZSBhbnkgaW5zdGVhZF9mcm9tSW52YWxpZCB0eXBlOiBJbnZhbGlkIEludGVybmV0QWRkcmVzc0ludGVybmV0QWRkcmVzc1R5cGU6IEludGVybmV0QWRkcmVzc0xPT1BCQUNLX0lQX1Y0VXNlIGxvb3BiYWNrSVB2NCBpbnN0ZWFkTE9PUEJBQ0tfSVBfVjZVc2UgbG9vcGJhY2tJUHY2IGluc3RlYWRBTllfSVBfVjRVc2UgYW55SVB2NCBpbnN0ZWFkQU5ZX0lQX1Y2VXNlIGFueUlQdjYgaW5zdGVhZE5ldHdvcmtJbnRlcmZhY2VfbGlzdFN1cHBvcnRlZE5ldHdvcmtJbnRlcmZhY2VfTGlzdFN1cHBvcnRlZGxpc3RTdXBwb3J0ZWRSYXdTZXJ2ZXJTb2NrZXRTZXJ2ZXJTb2NrZXRTb2NrZXREaXJlY3Rpb25SRUNFSVZFVXNlIHJlY2VpdmUgaW5zdGVhZFNFTkRVc2Ugc2VuZCBpbnN0ZWFkVXNlIGJvdGggaW5zdGVhZFNvY2tldE9wdGlvbnRjcE5vRGVsYXlUQ1BfTk9ERUxBWVVzZSB0Y3BOb0RlbGF5IGluc3RlYWRfaXBNdWx0aWNhc3RMb29wX2lwTXVsdGljYXN0SG9wc19pcE11bHRpY2FzdElmX2lwQnJvYWRjYXN0X1Jhd1NvY2tldE9wdGlvbnNfUmF3U29ja2V0T3B0aW9ucy5TT0xfU09DS0VUX1Jhd1NvY2tldE9wdGlvbnMuSVBQUk9UT19JUF9SYXdTb2NrZXRPcHRpb25zLklQX01VTFRJQ0FTVF9JRl9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fSVBWNl9SYXdTb2NrZXRPcHRpb25zLklQVjZfTVVMVElDQVNUX0lGX1Jhd1NvY2tldE9wdGlvbnMuSVBQUk9UT19UQ1BfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX1VEUFNPTF9TT0NLRVRJUFBST1RPX0lQSVBfTVVMVElDQVNUX0lGSVBQUk9UT19JUFY2SVBWNl9NVUxUSUNBU1RfSUZJUFBST1RPX1RDUElQUFJPVE9fVURQUmF3U29ja2V0T3B0aW9uX29wdGlvbnNDYWNoZV9nZXROYXRpdmVPcHRpb25WYWx1ZVJhd1NvY2tldE9wdGlvbl9HZXRPcHRpb25WYWx1ZWZyb21JbnRmcm9tQm9vbGxldmVsU29ja2V0bGV2ZWxJUHY0SVB2NE11bHRpY2FzdEludGVyZmFjZWxldmVsSVB2NklQdjZNdWx0aWNhc3RJbnRlcmZhY2VsZXZlbFRjcGxldmVsVWRwX2dldE9wdGlvblZhbHVlUmF3U29ja2V0RXZlbnRyZWFkQ2xvc2VkUkVBRF9DTE9TRURVc2UgcmVhZENsb3NlZCBpbnN0ZWFkQ0xPU0VEVXNlIGNsb3NlZCBpbnN0ZWFkUmF3U29ja2V0RXZlbnQucmVhZFJhd1NvY2tldEV2ZW50LndyaXRlUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZFJhd1NvY2tldEV2ZW50LmNsb3NlZENvbm5lY3Rpb25UYXNrUmF3U29ja2V0U29ja2V0X2Nvbm5lY3Rfc3RhcnRDb25uZWN0cmF3VGFza0RhdGFncmFtUmF3RGF0YWdyYW1Tb2NrZXRUaGlzIHByb3BlcnR5IGlzIG5vdCBpbXBsZW1lbnRlZC4gVXNlIGdldFJhd09wdGlvbiBhbmQgc2V0UmF3T3B0aW9uIGluc3RlYWQuLCBhZGRyZXNzID0gLCBwb3J0ID0gX1N0ZFN0cmVhbVN0ZGluX2ZkX2VjaG9Nb2RlU3RkaW5fR2V0RWNob01vZGVfc2V0RWNob01vZGVTdGRpbl9TZXRFY2hvTW9kZV9saW5lTW9kZVN0ZGluX0dldExpbmVNb2RlX3NldExpbmVNb2RlU3RkaW5fU2V0TGluZU1vZGVTdGRpbl9SZWFkQnl0ZVN0ZGluX0Fuc2lTdXBwb3J0ZWRyZWFkTGluZVN5bmNyZXRhaW5OZXdsaW5lc2NySXNOZXdsaW5ldGVybWluYWxsaW5lTW9kZWVjaG9Nb2RlRXJyb3IgZ2V0dGluZyB0ZXJtaW5hbCBlY2hvIG1vZGVUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBzZXR0aW5nIFN0ZGluLmVjaG9Nb2RlRXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBlY2hvIG1vZGVFcnJvciBnZXR0aW5nIHRlcm1pbmFsIGxpbmUgbW9kZVRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIHNldHRpbmcgU3RkaW4ubGluZU1vZGVFcnJvciBzZXR0aW5nIHRlcm1pbmFsIGxpbmUgbW9kZUVycm9yIGRldGVybWluaW5nIEFOU0kgc3VwcG9ydEVycm9yIHJlYWRpbmcgYnl0ZSBmcm9tIHN0ZGluaGFzVGVybWluYWxTdGRvdXRfbm9uQmxvY2tpbmdfdGVybWluYWxTaXplQ291bGQgbm90IGdldCB0ZXJtaW5hbCBzaXplX2dldFRlcm1pbmFsU2l6ZVN0ZG91dF9HZXRUZXJtaW5hbFNpemVfZ2V0QW5zaVN1cHBvcnRlZFN0ZG91dF9BbnNpU3VwcG9ydGVkX2hhc1Rlcm1pbmFsdGVybWluYWxDb2x1bW5zX3Rlcm1pbmFsQ29sdW1uc3Rlcm1pbmFsTGluZXNfdGVybWluYWxMaW5lc1N0ZG91dEV4Y2VwdGlvblN0ZG91dEV4Y2VwdGlvbjogU3RkaW5FeGNlcHRpb25TdGRpbkV4Y2VwdGlvbjogX1N0ZENvbnN1bWVyX1N0ZFNpbmtTdGRpb1R5cGVURVJNSU5BTFVzZSB0ZXJtaW5hbCBpbnN0ZWFkUElQRVVzZSBwaXBlIGluc3RlYWRVc2Ugb3RoZXIgaW5zdGVhZFN0ZGlvVHlwZTogX1N0ZElPVXRpbHNfbmF0aXZlU29ja2V0VHlwZUVycm9yIHJldHJpZXZpbmcgc29ja2V0IHR5cGVfZ2V0U3RkaW9PdXRwdXRTdHJlYW1Db3VsZG4ndCBkZXRlcm1pbmUgZmlsZSB0eXBlIG9mIHN0ZGlvIGhhbmRsZSAoZmQgX2dldFN0ZGlvSW5wdXRTdHJlYW1Db3VsZG4ndCBkZXRlcm1pbmUgZmlsZSB0eXBlIG9mIHN0ZGluIChmZCBfc29ja2V0VHlwZV9nZXRTdGRpb0hhbmRsZVR5cGVGaWxlX0dldFN0ZGlvSGFuZGxlVHlwZVN5c3RlbUVuY29kaW5nc3lzdGVtX1dpbmRvd3NDb2RlUGFnZUVuY29kZXJJbnZhbGlkIGNoYXJhY3RlciBmb3IgZW5jb2RpbmdfZW5jb2RlU3RyaW5nU3RyaW5nVG9TeXN0ZW1FbmNvZGluZ19XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyU2lua19XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyX2RlY29kZUJ5dGVzU3lzdGVtRW5jb2RpbmdUb1N0cmluZ19XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyU2lua1Jhd1N5bmNocm9ub3VzU29ja2V0X3NpZ25hbENvbnRyb2xsZXJzX3N1Y2Nlc3NSZXNwb25zZV9pbGxlZ2FsQXJndW1lbnRSZXNwb25zZV9vc0Vycm9yUmVzcG9uc2VfZmlsZUNsb3NlZFJlc3BvbnNlX2Vycm9yUmVzcG9uc2VFcnJvclR5cGVfb3NFcnJvclJlc3BvbnNlRXJyb3JDb2RlX29zRXJyb3JSZXNwb25zZU1lc3NhZ2V6bGliWkxJQlVzZSB6bGliIGluc3RlYWRHWklQVXNlIGd6aXAgaW5zdGVhZFVzZSBGaWxlTW9kZS5yZWFkIGluc3RlYWRVc2UgRmlsZU1vZGUud3JpdGUgaW5zdGVhZFVzZSBGaWxlTW9kZS5hcHBlbmQgaW5zdGVhZFVzZSBGaWxlTW9kZS53cml0ZU9ubHkgaW5zdGVhZFVzZSBGaWxlTW9kZS53cml0ZU9ubHlBcHBlbmQgaW5zdGVhZF9ibG9ja1NpemVfaW9PdmVycmlkZXNUb2tlbl9hc3luY1J1blpvbmVkX25leHRTZXJ2aWNlSWRfc3RkaW9IYW5kbGVUeXBlVGVybWluYWxfc3RkaW9IYW5kbGVUeXBlUGlwZV9zdGRpb0hhbmRsZVR5cGVGaWxlX3N0ZGlvSGFuZGxlVHlwZVNvY2tldF9zdGRpb0hhbmRsZVR5cGVPdGhlcl9zdGRpbkZEX3N0ZG91dEZEX3N0ZGVyckZEc3lzdGVtRW5jb2RpbmdTWVNURU1fRU5DT0RJTkdVc2Ugc3lzdGVtRW5jb2RpbmcgaW5zdGVhZF91cmlCYXNlQ2xvc3VyZV9nZXRVcmlCYXNlQ2xvc3VyZV9tYWtlVWludDhMaXN0Vmlld19nZXRXYXRjaFNpZ25hbEludGVybmFsX3J1bk5vbkludGVyYWN0aXZlUHJvY2Vzc2ZvbGRTdHJlYW1fcnVuTm9uSW50ZXJhY3RpdmVQcm9jZXNzU3luY190aHJvd09uQmFkUG9ydEludmFsaWQgcG9ydCBfdGhyb3dPbkJhZFR0bEludmFsaWQgdHRsIF9tYWtlRGF0YWdyYW1fZ2V0U3RkaW9IYW5kbGVTb2NrZXRfR2V0U3RkaW9IYW5kbGVfZ2V0U29ja2V0VHlwZVNvY2tldF9HZXRUeXBlX2Vuc3VyZUZhc3RBbmRTZXJpYWxpemFibGVCeXRlRGF0YUxpc3QgZWxlbWVudCBpcyBudWxsIGF0IGluZGV4IF92YWxpZGF0ZVpMaWJXaW5kb3dCaXRzX3ZhbGlkYXRlWkxpYmVMZXZlbF92YWxpZGF0ZVpMaWJNZW1MZXZlbF92YWxpZGF0ZVpMaWJTdHJhdGVneVVuc3VwcG9ydGVkICdzdHJhdGVneSdUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBjYWxsaW5nIGRhcnQ6aW8ncyBleGl0KClzbGVlcHNsZWVwOiBkdXJhdGlvbiBjYW5ub3QgYmUgbmVnYXRpdmVUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBjYWxsaW5nIGRhcnQ6aW8ncyBzbGVlcCgpX3NldFN0ZGlvRkRzc3RkaW9UeXBlc3RkaW9mZGRhcnQuY2xpd2FpdF9mb3IuZGFydF9XYWl0Rm9yVXRpbHN3YWl0Rm9yRXZlbnR3YWl0Rm9yIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbWJlZGRlcl93YWl0Rm9yRXZlbnRDbG9zdXJlX3dhaXRGb3JFdmVudENMSV9XYWl0Rm9yRXZlbnR0aW1lb3V0TWlsbGlzX2dldFdhaXRGb3JFdmVudHdhaXRGb3JmdXR1cmVDb21wbGV0ZWRzdGFja3RyYWNld2FpdEZvcigpIHRpbWVkIG91dGRhcnQuY29yZU1hcHNiaWdpbnQuZGFydGJvb2wuZGFydGNvbXBhcmFibGUuZGFydGRhdGVfdGltZS5kYXJ0ZG91YmxlLmRhcnRkdXJhdGlvbi5kYXJ0ZXJyb3JzLmRhcnRleGNlcHRpb25zLmRhcnRleHBhbmRvLmRhcnRmdW5jdGlvbi5kYXJ0aWRlbnRpY2FsLmRhcnRpbnQuZGFydGludm9jYXRpb24uZGFydG1hcC5kYXJ0bnVsbC5kYXJ0bnVtLmRhcnRvYmplY3QuZGFydHBhdHRlcm4uZGFydHJlZ2V4cC5kYXJ0c2luay5kYXJ0c3RhY2t0cmFjZS5kYXJ0c3RvcHdhdGNoLmRhcnRzdHJpbmcuZGFydHN0cmluZ19idWZmZXIuZGFydHN0cmluZ19zaW5rLmRhcnR0eXBlLmRhcnR1cmkuZGFydF9TeW5jR2VuZXJhdG9yQ2FsbGJhY2tfVXJpQmFzZUNsb3N1cmVDb21wYXJhdG9yX0dlbmVyYXRvcl9tb3ZlTmV4dEZuX3lpZWxkRWFjaEl0ZXJhdG9yX0xpc3RMaXN0X2FsbG9jYXRlTGlzdF9nZXRJbmRleGVkX3NldEluZGV4ZWRMaXN0X3NldEluZGV4ZWRMaXN0X2dldExlbmd0aF9zbGljZW5lZWRzVHlwZUFyZ3VtZW50X3NsaWNlSW50ZXJuYWxMaXN0X3NsaWNlaXRlcmFibGVBc0xpc3Rfc2V0TGVuZ3RoX0ltbXV0YWJsZUxpc3RJbW11dGFibGVBcnJheSBjYW4gb25seSBiZSBhbGxvY2F0ZWQgYnkgdGhlIFZNSW1tdXRhYmxlTGlzdF9mcm9tX0ZpeGVkU2l6ZUFycmF5SXRlcmF0b3JfQmlnSW50SW1wbF9kaWdpdEJpdHNfZGlnaXRCYXNlX2RpZ2l0TWFza19oYWxmRGlnaXRCaXRzX2hhbGZEaWdpdE1hc2t0d29fbWludXNPbmVfb25lRGlnaXRNYXNrX3R3b0RpZ2l0TWFza19vbmVCaWxsaW9uX21pbkludC05MjIzMzcyMDM2ODU0Nzc1ODA4X21heEludDkyMjMzNzIwMzY4NTQ3NzU4MDdfbGFzdERpdmlkZW5kRGlnaXRzX2xhc3REaXZpZGVuZFVzZWRfbGFzdERpdmlzb3JEaWdpdHNfbGFzdERpdmlzb3JVc2VkX2xhc3RRdW9SZW1EaWdpdHNfbGFzdFF1b1JlbVVzZWRfbGFzdFJlbVVzZWRfbGFzdFJlbV9uc2hfaXNOZWdhdGl2ZV9kaWdpdHNfYml0c0ZvckZyb21Eb3VibGVfZGl2aXNvckxvd1RvcERpZ2l0X2Rpdmlzb3JUb3BEaWdpdF9xdW90aWVudERpZ2l0X3F1b3RpZW50SGlnaERpZ2l0X25vcm1hbGl6ZWRyYWRpeENvdWxkIG5vdCBwYXJzZSBCaWdJbnRfcGFyc2VEZWNpbWFsZGlnaXRJblBhcnRDb3VudF9jb2RlVW5pdFRvUmFkaXhWYWx1ZV9wYXJzZUhleHN0YXJ0UG9zaGV4Q2hhcnNQZXJEaWdpdHNvdXJjZUxlbmd0aGxhc3REaWdpdExlbmd0aGRpZ2l0SW5kZXhfcGFyc2VSYWRpeF90cnlQYXJzZXJlXlxzKihbKy1dPykoKDB4W2EtZjAtOV0rKXwoXGQrKXwoW2EtejAtOV0rKSlccyokY2FzZVNlbnNpdGl2ZXNpZ25JbmRleGhleEluZGV4ZGVjaW1hbEluZGV4bm9uRGVjaW1hbEhleEluZGV4ZGVjaW1hbE1hdGNoaGV4TWF0Y2hub25EZWNpbWFsTWF0Y2hpcyBub3QgYW4gaW50ZWdlcl9ub3JtYWxpemVfaXNaZXJvX2Nsb25lRGlnaXRzcmVzdWx0RGlnaXRzX2Zyb21JbnRfZnJvbURvdWJsZVZhbHVlIG11c3QgYmUgZmluaXRlOiBmbG9vclRvRG91YmxlYmlhc2VkRXhwb25lbnR1bnNoaWZ0ZWREaWdpdHN1bnNoaWZ0ZWRCaWdhYnNSZXN1bHRfZGxTaGlmdHJlc3VsdFVzZWRfZGxTaGlmdERpZ2l0c3hEaWdpdHN4VXNlZF9kclNoaWZ0X2RyU2hpZnREaWdpdHNfbHNoZGlnaXRTaGlmdGJpdFNoaWZ0Y2FycnlCaXRTaGlmdGJpdE1hc2tjYXJyeXNoaWZ0QW1vdW50c2hpZnQtYW1vdW50IG11c3QgYmUgcG9zaXRpdmUgX2xTaGlmdERpZ2l0c2RpZ2l0c1NoaWZ0X3JzaF9yU2hpZnREaWdpdHNfYWJzQ29tcGFyZWJpZ0ludF9jb21wYXJlRGlnaXRzb3RoZXJEaWdpdHNvdGhlclVzZWRfYWJzQWRkX2Fic1N1Yl9hYnNBZGRTZXRTaWduX2Fic1N1YlNldFNpZ25fYWJzQW5kU2V0U2lnbl9hYnNBbmROb3RTZXRTaWduX2Fic09yU2V0U2lnbmxEaWdpdHNfYWJzWG9yU2V0U2lnbnRoaXMxb3RoZXIxbjFfbXVsQWRkeEluZGV4bXVsdGlwbGljYW5kRGlnaXRzYWNjdW11bGF0b3JEaWdpdHN4bHhobWxtaHBocGxfc3FyQWRkYWNjdWx1bWF0b3JEaWdpdHNfbXVsRGlnaXRzX3NxckRpZ2l0c19lc3RpbWF0ZVF1b3RpZW50RGlnaXRxdW90aWVudERpZ2l0X2Rpdl9kaXZSZW1sYXN0UXVvX3VzZWRxdW9fZGlnaXRzcXVvX3JlbXJlbURpZ2l0c3JlbW5zaHlEaWdpdHN5VXNlZG51bUV4dHJhRGlnaXRzdG1wRGlnaXRzbnlEaWdpdHNkMGQxX3JlbURpZ2l0c0V4cG9uZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlOiBtb2RQb3diaWdFeHBvbmVudGJpZ01vZHVsdXNtb2R1bHVzZXhwb25lbnQgbXVzdCBiZSBwb3NpdGl2ZTogbW9kdWx1cyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlOiBleHBvbmVudEJpdGxlbmNhbm5vdFVzZU1vbnRnb21lcnlfbm9ybU1vZHVsdXNVc2VkcmVzdWx0MkRpZ2l0c2dEaWdpdHNnVXNlZHJlc3VsdDJVc2VkX3Nxcl9tdWxfcmV2ZXJ0a21nMkRpZ2l0c2cyVXNlZGV4cG9uZW50RGlnaXRzZ3dEaWdpdHNzd2FwRGlnaXRzc3dhcFVzZWRfYmluYXJ5R2NkaW52bWF4VXNlZG1heExlbk5vdCBjb3ByaW1lbXVzdCBub3QgYmUgemVyb2RpZ2l0U2hpZnRBbW91bnR1RGlnaXRzdkRpZ2l0c2FjYWJjZFVzZWRhYmNkTGVuYURpZ2l0c2JEaWdpdHNjRGlnaXRzZERpZ2l0c2FJc05lZ2F0aXZlYklzTmVnYXRpdmVjSXNOZWdhdGl2ZWRJc05lZ2F0aXZlYV9jbXBfY2JfY21wX2RjX2NtcF9hZF9jbXBfYm1vZEludmVyc2VNb2R1bHVzIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmU6IGdjZHJlc3VsdEJpdHNjYWNoZWRCaXRzY2FjaGVkQml0c0xlbmd0aHJlYWRCaXRzbmV4dERpZ2l0bmV4dERpZ2l0TGVuZ3RobGVhZGluZ0JpdHNyb3VuZFVwZGVjaW1hbERpZ2l0Q2h1bmtzZGlnaXRzOXplcm9zMDAwMDAwMDAwMDAwMDBfdG9SYWRpeENvZGVVbml0ZGlnaXRTdHJpbmdfdG9IZXhTdHJpbmdyZXZlcnNlZERpZ2l0Q29kZVVuaXRzbXNiQ2h1bmtfQmlnSW50UmVkdWN0aW9uX0JpZ0ludE1vbnRnb21lcnlSZWR1Y3Rpb25fbW9kdWx1c19tb2R1bHVzRGlnaXRzX2FyZ3NfZGlnaXRzUGVyU3RlcF94RGlnaXRfeEhpZ2hEaWdpdF9yaG9EaWdpdF9yaG9IaWdoRGlnaXRfbXVEaWdpdF9tdUhpZ2hEaWdpdF9pbnZEaWdpdF9pbnZEaWdpdFBhaXJfbXVsTW9kcmhvbHJob2hkaGRsX3JlZHVjZV9CaWdJbnRDbGFzc2ljUmVkdWN0aW9uX25vcm1Nb2R1bHVzX25vcm1Nb2R1bHVzRGlnaXRzX25lZ05vcm1Nb2R1bHVzRGlnaXRzX21vZHVsdXNOc2hfdG1wRGlnaXRzbmVnTm9ybU1vZHVsdXNfRG91YmxlQ0FDSEVfU0laRV9MT0cyQ0FDSEVfTEVOR1RIQ0FDSEVfTUFTS19jYWNoZUV2aWN0SW5kZXhmcm9tSW50ZWdlckRvdWJsZV9kb3VibGVGcm9tSW50ZWdlckRvdWJsZV9oYXNoQ29kZV9pZGVudGl0eUhhc2hDb2RlRG91YmxlX2FkZF9zdWJEb3VibGVfc3ViRG91YmxlX211bF90cnVuY19kaXZEb3VibGVfdHJ1bmNfZGl2RG91YmxlX2Rpdl9tb2R1bG9Eb3VibGVfbW9kdWxvX3JlbWFpbmRlckRvdWJsZV9yZW1haW5kZXJEb3VibGVfZmxpcFNpZ25CaXREb3VibGVfZXF1YWxfZXF1YWxUb0ludGVnZXJEb3VibGVfZXF1YWxUb0ludGVnZXJEb3VibGVfZ3JlYXRlclRoYW5fYWRkRnJvbUludGVnZXJfc3ViRnJvbUludGVnZXJfbXVsRnJvbUludGVnZXJfdHJ1bmNEaXZGcm9tSW50ZWdlcl9tb2R1bG9Gcm9tSW50ZWdlcl9yZW1haW5kZXJGcm9tSW50ZWdlcl9ncmVhdGVyVGhhbkZyb21JbnRlZ2VyRG91YmxlX2dyZWF0ZXJUaGFuRnJvbUludGVnZXJEb3VibGVfZ2V0SXNOZWdhdGl2ZURvdWJsZV9nZXRJc0luZmluaXRlRG91YmxlX2dldElzTmFOZmxvb3JjZWlsY2VpbFRvRG91YmxlRG91YmxlX3JvdW5kRG91YmxlX2Zsb29yRG91YmxlX2NlaWxEb3VibGVfdHJ1bmNhdGVub3QgYSBudW1iZXJEb3VibGVfdG9JbnREb3VibGVfdG9TdHJpbmdub3QgYW4gaW50ZWdlcl90b1N0cmluZ0FzRml4ZWREb3VibGVfdG9TdHJpbmdBc0ZpeGVkX3RvU3RyaW5nQXNFeHBvbmVudGlhbERvdWJsZV90b1N0cmluZ0FzRXhwb25lbnRpYWx0b1N0cmluZ0FzUHJlY2lzaW9ucHJlY2lzaW9uX3RvU3RyaW5nQXNQcmVjaXNpb25Eb3VibGVfdG9TdHJpbmdBc1ByZWNpc2lvbnRoaXNJc05lZ2F0aXZlb3RoZXJJc05lZ2F0aXZlLTkwMDcxOTkyNTQ3NDA5OTI5MDA3MTk5MjU0NzQwOTkyOTIyMzM3MjAzNjg1NDc3NjAwMC4wX0Fzc2VydGlvbkVycm9yX2ZhaWxlZEFzc2VydGlvbl91cmxfbGluZV9jb2x1bW5fdGhyb3dOZXdhc3NlcnRpb25TdGFydGFzc2VydGlvbkVuZF9kb1Rocm93TmV3QXNzZXJ0aW9uRXJyb3JfdGhyb3dOZXdfZXZhbHVhdGVBc3NlcnRpb25fbWVzc2FnZVN0cmluZ2lzIG5vdCB0cnVlLmNvbHVtbkluZm8gcG9zICc6IEZhaWxlZCBhc3NlcnRpb246IGxpbmUgX1R5cGVFcnJvcmlzIGFzc2lnbmFibGVUeXBlRXJyb3JfdGhyb3dOZXdzcmNfdmFsdWVkc3RfdHlwZWRzdF9uYW1lX0Nhc3RFcnJvcl9lcnJvck1zZ19JbnRlcm5hbEVycm9ySW50ZXJuYWxFcnJvcjogJ0Vycm9yOiBmaWVsZCAnJyBpcyBhbHJlYWR5IGluaXRpYWxpemVkLl9DbG9zdXJlX2luc3RhbnRpYXRvcl90eXBlX2FyZ3VtZW50c19mdW5jdGlvbl90eXBlX2FyZ3VtZW50c19kZWxheWVkX3R5cGVfYXJndW1lbnRzQ2xvc3VyZV9lcXVhbHNfY29tcHV0ZUhhc2hDbG9zdXJlX2Nsb25lQ2xvc3VyZV9jb21wdXRlSGFzaF9Hcm93YWJsZUxpc3R3aXRoQ2FwYWNpdHlfd2l0aERhdGFHcm93YWJsZUxpc3RfYWxsb2NhdGVfY2FwYWNpdHlHcm93YWJsZUxpc3RfZ2V0Q2FwYWNpdHlHcm93YWJsZUxpc3RfZ2V0TGVuZ3RobmV3X2xlbmd0aG9sZF9jYXBhY2l0eW5ld19jYXBhY2l0eXNob3VsZFNocmlua1RvRml0X3Nocmlua0dyb3dhYmxlTGlzdF9zZXRMZW5ndGhfc2V0RGF0YUdyb3dhYmxlTGlzdF9zZXREYXRhR3Jvd2FibGVMaXN0X2dldEluZGV4ZWRHcm93YWJsZUxpc3Rfc2V0SW5kZXhlZF9uZXh0Q2FwYWNpdHlpc1ZNTGlzdGNhcGl0ZXJMZW5uZXdMZW5fYWxsb2NhdGVEYXRhbmV3RGF0YV9qb2luV2l0aFNlcGFyYXRvcmNvZGVVbml0Q291bnRmaXJzdE5vbk9uZUJ5dGVTdHJpbmdMaW1pdG5leHRFbGVtZW50Y29weUluZGV4b25lYnl0ZUNhbmFyeWVsZW1lbnRTdHJpbmdfSW1tdXRhYmxlTWFwX2t2UGFpcnNrZXlWYWx1ZVBhaXJzQ2Fubm90IHNldCB2YWx1ZSBpbiB1bm1vZGlmaWFibGUgTWFwQ2Fubm90IGNsZWFyIHVubW9kaWZpYWJsZSBNYXBDYW5ub3QgcmVtb3ZlIGZyb20gdW5tb2RpZmlhYmxlIE1hcF9JbW11dGFibGVNYXBLZXlJdGVyYWJsZV9JbW11dGFibGVNYXBWYWx1ZUl0ZXJhYmxlX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmFibGVfSW1tdXRhYmxlTWFwS2V5SXRlcmF0b3JfbmV4dEluZGV4X0ltbXV0YWJsZU1hcFZhbHVlSXRlcmF0b3JfSW1tdXRhYmxlTWFwRW50cnlJdGVyYXRvcl9JbnRlZ2VySW1wbGVtZW50YXRpb24wMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpfYml0QW5kRnJvbUludGVnZXJfYml0T3JGcm9tSW50ZWdlcl9iaXRYb3JGcm9tSW50ZWdlcl9iaXRBbmRGcm9tU21pSW50ZWdlcl9iaXRBbmRGcm9tSW50ZWdlckludGVnZXJfYml0T3JGcm9tSW50ZWdlckludGVnZXJfYml0WG9yRnJvbUludGVnZXJfc2hyRnJvbUludGVnZXJJbnRlZ2VyX3NockZyb21JbnRlZ2VyX3NobEZyb21JbnRlZ2VySW50ZWdlcl9zaGxGcm9tSW50ZWdlckludGVnZXJfYWRkRnJvbUludGVnZXJJbnRlZ2VyX3N1YkZyb21JbnRlZ2VySW50ZWdlcl9tdWxGcm9tSW50ZWdlckludGVnZXJfdHJ1bmNEaXZGcm9tSW50ZWdlckludGVnZXJfbW9kdWxvRnJvbUludGVnZXJJbnRlZ2VyX2dyZWF0ZXJUaGFuRnJvbUludGVnZXJJbnRlZ2VyX2VxdWFsVG9JbnRlZ2VyLTkyMjMzNzIwMzY4NTQ3NzYwMDAuMF90b1BvdzJTdHJpbmdfbWluSW50NjRUb1JhZGl4U3RyaW5nX3NldEF0Yml0c1BlckRpZ2l0MzAzNzAwMDQ5OV9TbWlfZGlnaXRUYWJsZV9zbWFsbExvb2t1cFRhYmxlLTk5LTk4LTk3LTk2LTk1LTk0LTkzLTkyLTkxLTkwLTg5LTg4LTg3LTg2LTg1LTg0LTgzLTgyLTgxLTgwLTc5LTc4LTc3LTc2LTc1LTc0LTczLTcyLTcxLTcwLTY5LTY4LTY3LTY2LTY1LTY0LTYzLTYyLTYxLTYwLTU5LTU4LTU3LTU2LTU1LTU0LTUzLTUyLTUxLTUwLTQ5LTQ4LTQ3LTQ2LTQ1LTQ0LTQzLTQyLTQxLTQwLTM5LTM4LTM3LTM2LTM1LTM0LTMzLTMyLTMxLTMwLTI5LTI4LTI3LTI2LTI1LTI0LTIzLTIyLTIxLTIwLTE5LTE4LTE3LTE2LTE1LTE0LTEzLTEyLTExLTEwLTktOC03LTYtNS00LTMyMzQ1Njc4OTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OV9QT1dfMTBfN19QT1dfMTBfOF9QT1dfMTBfOVNtaV9iaXROZWdhdGVTbWlfYml0TGVuZ3RoU21pX2JpdEFuZEZyb21TbWlfcG9zaXRpdmVCYXNlMTBMZW5ndGhzbWl0d29EaWdpdHNfbmVnYXRpdmVCYXNlMTBMZW5ndGhuZWdTbWlfbmVnYXRpdmVUb1N0cmluZ19NaW50TWludF9iaXROZWdhdGVNaW50X2JpdExlbmd0aF9NRVRIT0RfR0VUVEVSX1NFVFRFUl9GSUVMRF9MT0NBTF9WQVJfS0lORF9TSElGVF9LSU5EX0JJVFNfS0lORF9NQVNLX0RZTkFNSUNfU1VQRVJfU1RBVElDX0NPTlNUUlVDVE9SX1RPUF9MRVZFTF9MRVZFTF9TSElGVF9MRVZFTF9CSVRTX0xFVkVMX01BU0tfVFlQRV9BUkdTX0xFTl9DT1VOVF9QT1NJVElPTkFMX0NPVU5UX0ZJUlNUX05BTUVEX0VOVFJZX2Z1bmN0aW9uTmFtZV9hcmd1bWVudHNEZXNjcmlwdG9yX2lzU3VwZXJJbnZvY2F0aW9uX2RlbGF5ZWRUeXBlQXJndW1lbnRzTGVuX21lbWJlck5hbWVfcG9zaXRpb25hbEFyZ3VtZW50c19uYW1lZEFyZ3VtZW50c193aXRob3V0VHlwZV9zZXRNZW1iZXJOYW1lQW5kVHlwZV90eXBlQXJnc0xlbnR5cGVBcmdzTGVuX3VucGFja1R5cGVBcmd1bWVudHNJbnZvY2F0aW9uTWlycm9yX3VucGFja1R5cGVBcmd1bWVudHNudW1UeXBlQXJndW1lbnRzcmVjZWl2ZXJJbmRleG5hbWVkRW50cnlJbmRleGFyZ19uYW1lYXJnX3ZhbHVlX2FsbG9jYXRlSW52b2NhdGlvbk1pcnJvcmFyZ3VtZW50c0Rlc2NyaXB0b3Jpc1N1cGVySW52b2NhdGlvbl9hbGxvY2F0ZUludm9jYXRpb25NaXJyb3JGb3JDbG9zdXJlZGVsYXllZFR5cGVBcmd1bWVudHNMZW5fTGlicmFyeVByZWZpeF9sb2FkTGlicmFyeVByZWZpeF9sb2FkX2xvYWRFcnJvckxpYnJhcnlQcmVmaXhfbG9hZEVycm9yTGlicmFyeVByZWZpeF9pc0xvYWRlZF9pbnZhbGlkYXRlRGVwZW5kZW50Q29kZUxpYnJhcnlQcmVmaXhfaW52YWxpZGF0ZURlcGVuZGVudENvZGVoYXNDb21wbGV0ZWRfUmVnRXhwSGFzaEtleWRvdEFsbHRoYXRfUmVnRXhwSGFzaFZhbHVlX1JlZ0V4cE1hdGNoX3JlZ2V4cF9tYXRjaF9NQVRDSF9QQUlSZ3JvdXBJZHhfZ3JvdXBDb3VudF9zdWJzdHJpbmdVbmNoZWNrZWRncm91cHNncm91cHNTcGVjZ3JvdXBzTGlzdG5hbWVkR3JvdXBpZHhfZ3JvdXBOYW1lSW5kZXhOb3QgYSBjYXB0dXJlIGdyb3VwIG5hbWU6IGdyb3VwTmFtZXNfZ3JvdXBOYW1lc19SZWdFeHBfd29yZENoYXJhY3Rlck1hcFJlZ0V4cF9mYWN0b3J5X0V4ZWN1dGVNYXRjaF9FeGVjdXRlTWF0Y2hTdGlja3lzdHJpbmdNYXRjaFJlZ0V4cF9nZXRQYXR0ZXJuUmVnRXhwX2dldElzTXVsdGlMaW5laXNDYXNlU2Vuc2l0aXZlUmVnRXhwX2dldElzQ2FzZVNlbnNpdGl2ZWlzVW5pY29kZVJlZ0V4cF9nZXRJc1VuaWNvZGVpc0RvdEFsbFJlZ0V4cF9nZXRJc0RvdEFsbFJlZ0V4cF9nZXRHcm91cENvdW50X2dyb3VwTmFtZUxpc3RSZWdFeHBfZ2V0R3JvdXBOYW1lTWFwUmVnRXhwX0V4ZWN1dGVNYXRjaHN0YXJ0X2luZGV4UmVnRXhwX0V4ZWN1dGVNYXRjaFN0aWNreV9BbGxNYXRjaGVzSXRlcmFibGVfcmVfc3RyX0FsbE1hdGNoZXNJdGVyYXRvcl9pc1RyYWlsU3Vycm9nYXRlX1N0cmluZ0Jhc2VfbGVuZ3RoQml0c19tYXhMZW5ndGhWYWx1ZV9sZW5ndGhNYXNrX3N0YXJ0Qml0c19tYXhTdGFydFZhbHVlX21heFVuc2lnbmVkU21pQml0c19tYXhKb2luUmVwbGFjZU9uZUJ5dGVTdHJpbmdMZW5ndGhfaXNXaGl0ZXNwYWNlX1N0cmluZ0Jhc2UgY2FuJ3QgYmUgaW5zdGFuaWF0ZWRTdHJpbmdfZ2V0SGFzaENvZGVfaXNPbmVCeXRlY3JlYXRlRnJvbUNoYXJDb2Rlc2NjaWRjb2RlQ291bnRfc2NhbkNvZGVVbml0c19jcmVhdGVTdHJpbmdGcm9tSXRlcmFibGVjaGFyQ29kZUxpc3Rpc09uZUJ5dGVTdHJpbmdfY3JlYXRlT25lQnl0ZVN0cmluZ19jcmVhdGVGcm9tQ29kZVBvaW50c1N0cmluZ0Jhc2VfY3JlYXRlRnJvbUNvZGVQb2ludHNjb2RlUG9pbnRzU3RyaW5nX2NoYXJBdFN0cmluZ19nZXRMZW5ndGhTdHJpbmdfY29uY2F0dGhpc0xlbmd0aG90aGVyTGVuZ3RodGhpc0NvZGVVbml0b3RoZXJDb2RlVW5pdF9zdWJzdHJpbmdNYXRjaGVzX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZVN0cmluZ0Jhc2Vfc3Vic3RyaW5nVW5jaGVja2VkX2lzT25lQnl0ZVdoaXRlc3BhY2VfaXNUd29CeXRlV2hpdGVzcGFjZV9maXJzdE5vbldoaXRlc3BhY2VfbGFzdE5vbldoaXRlc3BhY2V0cmltTGVmdHRpbWVzIGlzIG5vdCBhIFBhdHRlcm4gaXMgbm90IGEgU3RyaW5nIGlzIG5vdCBhbiBpbnRyZXBsYWNlbWVudElzT25lQnl0ZXJlcGxhY2VtZW50TGVuZ3Roc2xpY2VzX2FkZFJlcGxhY2VTbGljZV9qb2luUmVwbGFjZUFsbE9uZUJ5dGVSZXN1bHRzbGljZUxlbmd0aF9qb2luUmVwbGFjZUFsbFJlc3VsdFN0cmluZ0Jhc2Vfam9pblJlcGxhY2VBbGxSZXN1bHRyZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlcmVwbGFjZUZpcnN0TWFwcGVkX21hdGNoU3RyaW5nX3N0cmluZ0lkZW50aXR5X3NwbGl0TWFwSm9pbkVtcHR5U3RyaW5nc3RyaW5nUGF0dGVybl9pbnRlcnBvbGF0ZVNpbmdsZV9pbnRlcnBvbGF0ZXByZXZpb3VzSW5kZXhTdHJpbmdfdG9VcHBlckNhc2VTdHJpbmdfdG9Mb3dlckNhc2VfY29uY2F0UmFuZ2VfY29uY2F0UmFuZ2VOYXRpdmVTdHJpbmdfY29uY2F0UmFuZ2VfT25lQnl0ZVN0cmluZ19MQ19UQUJMRQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/woDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w5fDuMO5w7rDu8O8w73DvsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv19VQ19UQUJMRQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWnt8fX5/woDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtADCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncOeAMOAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDt8OYw5nDmsObw5zDncOeAFN0cmluZ19jb2RlVW5pdEF0T25lQnl0ZVN0cmluZ19zdWJzdHJpbmdVbmNoZWNrZWRfc3BsaXRXaXRoQ2hhckNvZGVPbmVCeXRlU3RyaW5nX3NwbGl0V2l0aENoYXJDb2RlcGF0dGVybkFzU3RyaW5nX2NvbmNhdEFsbHN0cmluZ3NMZW5ndGhySXhlTGVuZ3RocENpZHBhdHRlcm5DdTBwYWRDaWRwYWRMZW5ndGhyZXN1bHRMZW5ndGhwYWRDaGFyT25lQnl0ZVN0cmluZ19hbGxvY2F0ZV9hbGxvY2F0ZUZyb21PbmVCeXRlTGlzdE9uZUJ5dGVTdHJpbmdfYWxsb2NhdGVGcm9tT25lQnl0ZUxpc3RPbmVCeXRlU3RyaW5nX3NldEF0b25lQnl0ZVN0cmluZ19Ud29CeXRlU3RyaW5nX2FsbG9jYXRlRnJvbVR3b0J5dGVMaXN0VHdvQnl0ZVN0cmluZ19hbGxvY2F0ZUZyb21Ud29CeXRlTGlzdF9FeHRlcm5hbE9uZUJ5dGVTdHJpbmdfRXh0ZXJuYWxUd29CeXRlU3RyaW5nX1N0cmluZ01hdGNoX1N0cmluZ0FsbE1hdGNoZXNJdGVyYWJsZV9pbnB1dF9wYXR0ZXJuX1N0cmluZ0FsbE1hdGNoZXNJdGVyYXRvcl9BYnN0cmFjdFR5cGVBYnN0cmFjdFR5cGVfdG9TdHJpbmdUeXBlX2dldEhhc2hDb2RlX1R5cGVSZWZfVHlwZVBhcmFtZXRlcl9XZWFrUHJvcGVydHlfbmV3V2Vha1Byb3BlcnR5X25ld1dlYWtQcm9wZXJ0eV9nZXRLZXlXZWFrUHJvcGVydHlfZ2V0VmFsdWVXZWFrUHJvcGVydHlfc2V0VmFsdWVEZXByZWNhdGVkZXhwaXJlc1VzZSBgbWVzc2FnZWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIERhcnQgMy4wLjBEZXByZWNhdGVkIGZlYXR1cmU6IF9PdmVycmlkZVByb3Zpc2lvbmFsX1Byb3h5QmlnSW50dHJ5UGFyc2VCb29sX2Zyb21FbnZpcm9ubWVudERhdGVUaW1lX01JQ1JPU0VDT05EX0lOREVYX01JTExJU0VDT05EX0lOREVYX1NFQ09ORF9JTkRFWF9NSU5VVEVfSU5ERVhfSE9VUl9JTkRFWF9EQVlfSU5ERVhfV0VFS0RBWV9JTkRFWF9NT05USF9JTkRFWF9ZRUFSX0lOREVYX19wYXJ0c19EQVlTX1VOVElMX01PTlRIbW9uZGF5dHVlc2RheXdlZG5lc2RheXRodXJzZGF5ZnJpZGF5c2F0dXJkYXlzdW5kYXlkYXlzUGVyV2Vla2phbnVhcnlmZWJydWFyeW1hcmNoYXByaWxqdW5lanVseWF1Z3VzdHNlcHRlbWJlcm9jdG9iZXJub3ZlbWJlcmRlY2VtYmVybW9udGhzUGVyWWVhcl9tYXhNaWxsaXNlY29uZHNTaW5jZUVwb2NoODY0MDAwMDAwMDAwMDAwMF9wYXJzZUZvcm1hdF4oWystXT9cZHs0LDZ9KS0/KFxkXGQpLT8oXGRcZCkoPzpbIFRdKFxkXGQpKD86Oj8oXGRcZCkoPzo6PyhcZFxkKSg/OlsuLF0oXGR7MSw2fSkpPyk/KT8oID9belpdfCA/KFstK10pKFxkXGQpKD86Oj8oXGRcZCkpPyk/KT8keWVhcm1vbnRoZGF5aG91cm1pbnV0ZW1pbGxpc2Vjb25kbWljcm9zZWNvbmR1dGNmcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaGZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NobWljcm9zZWNvbmRzU2luY2VFcG9jaF93aXRoVmFsdWVEYXRlVGltZSBpcyBvdXRzaWRlIHZhbGlkIHJhbmdlOiAnaXNVdGMnIGZsYWcgbWF5IG5vdCBiZSAnbnVsbCdfbm93X2dldEN1cnJlbnRNaWNyb3NEYXRlVGltZV9jdXJyZW50VGltZU1pY3Jvc190aW1lWm9uZU5hbWVGb3JDbGFtcGVkU2Vjb25kc0RhdGVUaW1lX3RpbWVab25lTmFtZXNlY29uZHNTaW5jZUVwb2NoX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzRm9yQ2xhbXBlZFNlY29uZHNEYXRlVGltZV90aW1lWm9uZU9mZnNldEluU2Vjb25kc19sb2NhbFRpbWVab25lQWRqdXN0bWVudEluU2Vjb25kc0RhdGVUaW1lX2xvY2FsVGltZVpvbmVBZGp1c3RtZW50SW5TZWNvbmRzX2NvbXB1dGVVcHBlclBhcnRsb2NhbE1pY3Jvc3Jlc3VsdFllYXJyZXN1bHRNb250aHJlc3VsdERheWRheXNTaW5jZTE5NzA4NjQwMDAwMDAwMGRheXN5ZDF5ZDJ5ZDNpc0xlYXBkYXlzVW50aWxNb250aHJlc3VsdE1pY3Jvc2Vjb25kcmVzdWx0TWlsbGlzZWNvbmRyZXN1bHRTZWNvbmRyZXN1bHRNaW51dGVyZXN1bHRIb3VyMzYwMDAwMDAwMHJlc3VsdFdlZWtkYXlfbG9jYWxEYXRlSW5VdGNNaWNyb3NtaWNyb3NfZmxvb3JlZERpdmlzaW9uX2RheUZyb21ZZWFyX2lzTGVhcFllYXJfd2Vla0RheV9lcXVpdmFsZW50WWVhcnJlY2VudFllYXJfeWVhcnNGcm9tU2Vjb25kc1NpbmNlRXBvY2hfZXF1aXZhbGVudFNlY29uZHNlcXVpdmFsZW50WWVhcmVxdWl2YWxlbnREYXlzZGlmZkRheXNfdGltZVpvbmVPZmZzZXRJblNlY29uZHNlcXVpdmFsZW50U2Vjb25kc190aW1lWm9uZU5hbWVmb3JtYXR0ZWRTdHJpbmdwYXJzZUludE9yWmVyb21hdGNoZWRwYXJzZU1pbGxpQW5kTWljcm9zZWNvbmRzeWVhcnNhZGRPbmVNaWxsaXNlY29uZG1pbGxpQW5kTWljcm9zZWNvbmRzaG91ckRpZmZlcmVuY2VtaW51dGVEaWZmZXJlbmNlVGltZSBvdXQgb2YgcmFuZ2VJbnZhbGlkIGRhdGUgZm9ybWF0aXNCZWZvcmVpc0FmdGVyaXNBdFNhbWVNb21lbnRBc3RvTG9jYWx0b1V0Y19mb3VyRGlnaXRzYWJzTjAwMF9zaXhEaWdpdHNfdGhyZWVEaWdpdHNfdHdvRGlnaXRzc2VjX2Jyb2tlbkRvd25EYXRlVG9WYWx1ZXJlYWxNb250aGFkanVzdG1lbnR6b25lT2Zmc2V0dGltZVpvbmVOYW1lVVRDdGltZVpvbmVPZmZzZXRvZmZzZXRJblNlY29uZHN3ZWVrZGF5bmFuaW5maW5pdHluZWdhdGl2ZUluZmluaXR5bWluUG9zaXRpdmU1ZS0zMjRtYXhGaW5pdGVfbmF0aXZlUGFyc2VfdHJ5UGFyc2VEb3VibGVkaWdpdHNTZWVuZXhwb25lbnREZWx0YWZpcnN0Q2hhcm5maW5pdHlleHBQYXJ0bmVnRXhwb25lbnRJbnZhbGlkIGRvdWJsZUR1cmF0aW9ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmRtaWxsaXNlY29uZHNQZXJTZWNvbmRzZWNvbmRzUGVyTWludXRlbWludXRlc1BlckhvdXJob3Vyc1BlckRheW1pY3Jvc2Vjb25kc1BlclNlY29uZG1pY3Jvc2Vjb25kc1Blck1pbnV0ZW1pY3Jvc2Vjb25kc1BlckhvdXJtaWNyb3NlY29uZHNQZXJEYXltaWxsaXNlY29uZHNQZXJNaW51dGVtaWxsaXNlY29uZHNQZXJIb3VybWlsbGlzZWNvbmRzUGVyRGF5c2Vjb25kc1BlckhvdXJzZWNvbmRzUGVyRGF5bWludXRlc1BlckRheV9kdXJhdGlvbl9taWNyb3NlY29uZHNxdW90aWVudGluRGF5c2luSG91cnNpbk1pbnV0ZXNpblNlY29uZHNzaXhEaWdpdHMwMDAwMHR3b0RpZ2l0TWludXRlc3R3b0RpZ2l0U2Vjb25kc3NpeERpZ2l0VXNfc3RyaW5nVG9TYWZlU3RyaW5nX29iamVjdFRvU3RyaW5nQXNzZXJ0aW9uRXJyb3JBc3NlcnRpb24gZmFpbGVkTnVsbFRocm93bkVycm9yVGhyb3cgb2YgbnVsbC5Bcmd1bWVudEVycm9yX2hhc1ZhbHVlaW52YWxpZFZhbHVlTXVzdCBub3QgYmUgbnVsbGNoZWNrTm90TnVsbF9lcnJvck5hbWVJbnZhbGlkIGFyZ3VtZW50KHMpX2Vycm9yRXhwbGFuYXRpb25leHBsYW5hdGlvbmVycm9yVmFsdWVWYWx1ZSBub3QgaW4gcmFuZ2VJbnZhbGlkIHZhbHVlaW5kZXhhYmxlY2hlY2tWYWx1ZUluSW50ZXJ2YWxjaGVja1ZhbGlkSW5kZXhjaGVja1ZhbGlkUmFuZ2VzdGFydE5hbWVlbmROYW1lY2hlY2tOb3ROZWdhdGl2ZTogTm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byA6IE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gOiBOb3QgaW4gcmFuZ2UgLCBpbmNsdXNpdmU6IFZhbGlkIHZhbHVlIHJhbmdlIGlzIGVtcHR5OiBPbmx5IHZhbGlkIHZhbHVlIGlzIEluZGV4RXJyb3JJbmRleCBvdXQgb2YgcmFuZ2U6IGluZGV4IG11c3Qgbm90IGJlIG5lZ2F0aXZlOiBubyBpbmRpY2VzIGFyZSB2YWxpZDogaW5kZXggc2hvdWxkIGJlIGxlc3MgdGhhbiBGYWxsVGhyb3VnaEVycm9yX3Rocm93TmV3Y2FzZV9jbGF1c2VfcG9zJzogU3dpdGNoIGNhc2UgZmFsbC10aHJvdWdoIGF0IGxpbmUgX2NsYXNzTmFtZUFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JfdGhyb3dOZXdDYW5ub3QgaW5zdGFudGlhdGUgYWJzdHJhY3QgY2xhc3MgX3VybCAnJyBsaW5lIF9leGlzdGluZ0FyZ3VtZW50TmFtZXNfaW52b2NhdGlvbl9pbnZvY2F0aW9uX3R5cGVpbnZvY2F0aW9uX3R5cGVVc2UgTm9TdWNoTWV0aG9kLndpdGhJbnZvY2F0aW9uIGluc3RlYWRleGlzdGluZ0FyZ3VtZW50TmFtZXNfdGhyb3dOZXdJbnZvY2F0aW9uX3Rocm93TmV3SWZOb3RMb2FkZWRfTmFtZWRBcmd1bWVudHNNYXBfZXhpc3RpbmdNZXRob2RTaWduYXR1cmVOb1N1Y2hNZXRob2RFcnJvcl9leGlzdGluZ01ldGhvZFNpZ25hdHVyZWludm9jYXRpb25UeXBlX3RvU3RyaW5nRGVwcmVjYXRlZE5vU3VjaE1ldGhvZEVycm9yOiBDYW5ub3QgYXNzaWduIHRvIGZpbmFsIHZhcmlhYmxlICdhcmdzX21pc21hdGNoYXJnc19tZXNzYWdlIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzdHlwZV9zdHJnZXR0ZXIgb3Igc2V0dGVybXNnX2J1Zk5vU3VjaE1ldGhvZEVycm9yOiBpc190eXBlX2NhbGxUaGUgbnVsbCBvYmplY3QgZG9lcyBub3QgaGF2ZSBhIFRoZSAnIHdhcyBjYWxsZWQgb24gbnVsbC5DbG9zdXJlIGNhbGwgd2l0aCBtaXNtYXRjaGVkIGFyZ3VtZW50czogZnVuY3Rpb24gJ0F0dGVtcHRlZCB0byB1c2UgdHlwZSAnJyBhcyBhIGZ1bmN0aW9uLiBTaW5jZSB0eXBlcyBkbyBub3QgZGVmaW5lIGEgbWV0aG9kICdjYWxsJywgdGhpcyBpcyBub3QgcG9zc2libGUuIERpZCB5b3UgaW50ZW5kIHRvIGNhbGwgdGhlICBjb25zdHJ1Y3RvciBhbmQgZm9yZ2V0IHRoZSAnbmV3JyBvcGVyYXRvcj8nIGhhcyBubyBpbnN0YW5jZSBTdXBlciBjbGFzcyBvZiBjbGFzcyAnJyBoYXMgbm8gaW5zdGFuY2Ugc3VwZXIuTm8gc3RhdGljIGRlY2xhcmVkIGluIGNsYXNzICdObyBjb25zdHJ1Y3RvciAnIGRlY2xhcmVkIGluIGNsYXNzICdObyB0b3AtbGV2ZWwgZGVjbGFyZWQuUmVjZWl2ZXI6IHRvcC1sZXZlbFJlY2VpdmVyOiBUcmllZCBjYWxsaW5nOiBmb3JtYWxQYXJhbWV0ZXJzCkZvdW5kOiB0eXBlQXJndW1lbnRzQnVmYXJndW1lbnRzQnVmZXhpc3RpbmdTaWdhcmdzTXNna2luZEJ1Zm1zZ0J1ZlVuc3VwcG9ydGVkRXJyb3JVbnN1cHBvcnRlZCBvcGVyYXRpb246IFVuaW1wbGVtZW50ZWRFcnJvclVuaW1wbGVtZW50ZWRFcnJvcjogU3RhdGVFcnJvckJhZCBzdGF0ZTogQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9ybW9kaWZpZWRPYmplY3RDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uLkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb246IE91dE9mTWVtb3J5RXJyb3JPdXQgb2YgTWVtb3J5U3RhY2tPdmVyZmxvd0Vycm9yU3RhY2sgT3ZlcmZsb3dDeWNsaWNJbml0aWFsaXphdGlvbkVycm9yUmVhZGluZyBzdGF0aWMgdmFyaWFibGUgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvblJlYWRpbmcgc3RhdGljIHZhcmlhYmxlICcnIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb25fRXhjZXB0aW9uRXhjZXB0aW9uOiBGb3JtYXRFeGNlcHRpb25vYmplY3RTb3VyY2VsaW5lTnVtcHJldmlvdXNDaGFyV2FzQ1IgKGF0IGxpbmUgLCBjaGFyYWN0ZXIgKQogKGF0IGNoYXJhY3RlciBzbGljZW1hcmtPZmZzZXQgKGF0IG9mZnNldCBJbnRlZ2VyRGl2aXNpb25CeVplcm9FeGNlcHRpb25FeHBhbmRvX21pblNpemVfZGVsZXRlZEVudHJ5b2xkX2RhdGFuZXdfc2l6ZUV4cGFuZG9zIGFyZSBub3QgYWxsb3dlZCBvbiBzdHJpbmdzLCBudW1iZXJzLCBib29sZWFucyBvciBudWxsX2xpbWl0RXhwYW5kbzp3cGVtcHR5X2lkeF9hcHBseUZ1bmN0aW9uX2FwcGx5X1BBUlNFX0xJTUlUUzEwNzM3NDE4MjQ0NjExNjg2MDE4NDI3Mzg3OTA0NDA1MjU1NTE1MzAxODk3NjI2NzExNTI5MjE1MDQ2MDY4NDY5NzYxNDkwMTE2MTE5Mzg0NzY1NjI1Nzg5NzMwMjIzMDUzNjAyODE2MzkwOTgyMTA0ODU4Mjk4ODA0OTEzNTA4NTE3MTc2NzI5OTIwODkxMDAwMDAwMDAwMDAwMDAwMDAwNTA1NDQ3MDI4NDk5MjkzNzcxMjIxODYxMTEwNjc0MDQzNjk5MjY2NTQxNjYwOTE4MzE3OTg0MTIxNzc5NTMzMzc4MDkzNzExMzY0Mzc4OTM4OTAzODA4NTkzNzUyODYyNDIzMDUxNTA5ODE1NzkzMzc0ODEzMzY3NTgyMDgxMDI0Nzk5MDA2Njg1NzgyODg0MTIxMTYzODQwMDAwMDAwMDAwMDAwMDMyNDM5MTk5MzI1MjE1MDg2ODEyODI4MTAwNTc4ODMwODI3NTI1MDQwMzYzNjE5MzY0NjczODM4NzY0ODgzMzg0NjUzNTc4MjQyNDgxMTUyODczMjAzNzM2NTc2MjMyMjE4MjY1MDg5MjEyNDE2MzUzODE0NzgzMjA1NDY5MDQxNTMxNDQxMDAwMDAwMDAwMDAwNzg3NjYyNzgzNzg4NTQ5NzYxMTY2Nzg4OTUxNDk1Mjk4NDk2MTIzODY0MjA2ODM2OTMxMDEwNTYzMzc5MjIwNTA4MDU2NjQwNjI1MTMxNjIxNzAzODQyMjY3MTM2X21heEludDY0X21pbkludDY0X2ludDY0VW5zaWduZWRPdmVyZmxvd0xpbWl0czY4NzE5NDc2NzM1X2ludDY0VW5zaWduZWRTbWlPdmVyZmxvd0xpbWl0czExNTI5MjE1MDQ2MDY4NDY5NzVfaW50NjRPdmVyZmxvd0xpbWl0c190cnlQYXJzZVNtaWl4c21pTGltaXRfa051bGxfdGhyb3dGb3JtYXRFeGNlcHRpb25JbnZhbGlkIG51bWJlckludmFsaWQgcmFkaXgtIG51bWJlcmFsbG93VTY0dGFibGVJbmRleHNtYWxsQmxvY2tTaXplYmxvY2tFbmRtdWx0aXBsaWVycG9zaXRpdmVPdmVyZmxvd0xpbWl0bmVnYXRpdmVPdmVyZmxvd0xpbWl0UG9zaXRpdmUgaW5wdXQgZXhjZWVkcyB0aGUgbGltaXQgb2YgaW50ZWdlck5lZ2F0aXZlIGlucHV0IGV4Y2VlZHMgdGhlIGxpbWl0IG9mIGludGVnZXJfcGFyc2VCbG9ja19pbml0SW50NjRPdmVyZmxvd0xpbWl0c0ludGVnZXJfZnJvbUVudmlyb25tZW50VGhlIHNvdXJjZSBtdXN0IG5vdCBiZSBudWxsUmFkaXggIG5vdCBpbiByYW5nZSAyLi4zNmdlbmVyaWNNZXRob2RfSW52b2NhdGlvbl9wb3NpdGlvbmFsX25hbWVkX2Vuc3VyZU5vbk51bGxUeXBlc1R5cGUgYXJndW1lbnRzIG11c3QgYmUgbm9uLW51bGwsIHdhcyBudWxsIGF0IGluZGV4IF9tYWtlVW5tb2RpZmlhYmxlX0dlbmVyYXRvckl0ZXJhYmxlQmlkaXJlY3Rpb25hbEl0ZXJhdG9ybW92ZVByZXZpb3VzX2Zyb21MaXRlcmFsTGlzdF9uZXdjb3B5UmFuZ2VOb3QgYmlnIGVub3VnaCB0byBob2xkICBlbGVtZW50cyBhdCBwb3NpdGlvbiB3cml0ZUl0ZXJhYmxldGFyZ2V0TGVuZ3RoTWFwRW50cnkoX0hBU0hfQ09ERWNsYXNzIE51bGwgY2Fubm90IGJlIGluc3RhbnRpYXRlZF9yZXR1cm5JbnROdWxsX3JldHVybkRvdWJsZU51bGxfaGFzaENvZGVSbmRfb2JqZWN0SGFzaENvZGVPYmplY3RfdG9TdHJpbmdfaGF2ZVNhbWVSdW50aW1lVHlwZU9iamVjdF9oYXZlU2FtZVJ1bnRpbWVUeXBlX2luc3RhbmNlT2ZPYmplY3RfaW5zdGFuY2VPZmluc3RhbnRpYXRvclR5cGVBcmd1bWVudHNfc2ltcGxlSW5zdGFuY2VPZk9iamVjdF9zaW1wbGVJbnN0YW5jZU9mX3NpbXBsZUluc3RhbmNlT2ZUcnVlX3NpbXBsZUluc3RhbmNlT2ZGYWxzZU9iamVjdF9lcXVhbHNkYXJ0OmNvcmUjX1R5cGVPYmplY3RfcnVudGltZVR5cGVNYXRjaGdyb3VwSW5kaWNlc19NQVhfQ0FDSEVfU0laRV9yZWNlbnRseVVzZWRfZmluZEVzY2FwZUNoYXIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAWVzY2FwZUNoYXJJbmRleHByZXZpb3VzU2xpY2VFbmRJbmRleDIuNFJlZ0V4cE1hdGNoU2lua3N0YWNrVHJhY2VTdHJpbmdTdGFja1RyYWNlX2N1cnJlbnRfU3RyaW5nU3RhY2tUcmFjZVN0b3B3YXRjaF9mcmVxdWVuY3lfY29tcHV0ZUZyZXF1ZW5jeVN0b3B3YXRjaF9mcmVxdWVuY3llbGFwc2VkVGlja3N0aWNrc3RpY2tzUGVyU2Vjb25kcmVtYWluaW5nVGlja3NfaW5pdFRpY2tlclN0b3B3YXRjaF9ub3dmcm9tQ2hhckNvZGVzZnJvbUNoYXJDb2RlU3RyaW5nX2Zyb21FbnZpcm9ubWVudFJ1bmVzTm8gZWxlbWVudHMucHJldmlvdXNDb2RlUnVuZUl0ZXJhdG9yX25leHRQb3NpdGlvbl9jdXJyZW50Q29kZVBvaW50X2NoZWNrU3BsaXRTdXJyb2dhdGVJbmRleCBpbnNpZGUgc3Vycm9nYXRlIHBhaXI6IHJhd0luZGV4Y3VycmVudFNpemVjdXJyZW50QXNTdHJpbmdwcmV2Q29kZVVuaXRTdHJpbmdCdWZmZXJfQlVGRkVSX1NJWkVfUEFSVFNfVE9fQ09NUEFDVF9QQVJUU19UT19DT01QQUNUX1NJWkVfTElNSVRfcGFydHNDb2RlVW5pdHNfcGFydHNDb21wYWN0aW9uSW5kZXhfcGFydHNDb2RlVW5pdHNTaW5jZUNvbXBhY3Rpb25fYnVmZmVyUG9zaXRpb25fYnVmZmVyQ29kZVVuaXRNYWduaXR1ZGVfY29uc3VtZUJ1ZmZlcl9hZGRQYXJ0cGFydHNTaW5jZUNvbXBhY3Rpb25fY29tcGFjdGNvbXBhY3RlZFN0cmluZ0J1ZmZlcl9jcmVhdGVTdHJpbmdGcm9tVWludDE2QXJyYXlTdHJpbmdTaW5rVXJpYXV0aG9yaXR5dW5lbmNvZGVkUGF0aGRhdGFGcm9tU3RyaW5nZGF0YUZyb21CeXRlc2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbXBlcmNlbnRFbmNvZGVkcXVlcnlQYXJhbWV0ZXJzQWxsaGFzUG9ydGhhc0Fic29sdXRlUGF0aGRhdGFEZWx0YXNjaGVtZUVuZGhvc3RTdGFydHBvcnRTdGFydHBhdGhTdGFydHF1ZXJ5U3RhcnRmcmFnbWVudFN0YXJ0aXNTaW1wbGUvLi5zY2hlbWVBdXRoZmlsZTovL2ZpbGU6Ly8vNDQzZW5jb2RlQ29tcG9uZW50ZW5jb2RlUXVlcnlDb21wb25lbnRkZWNvZGVDb21wb25lbnRlbmNvZGVkQ29tcG9uZW50ZGVjb2RlUXVlcnlDb21wb25lbnRlbmNvZGVGdWxsZGVjb2RlRnVsbHNwbGl0UXVlcnlTdHJpbmdwYXJzZUlQdjRBZGRyZXNzX3BhcnNlSVB2NEFkZHJlc3NJbGxlZ2FsIElQdjQgYWRkcmVzcywgcGFydEluZGV4cGFydFN0YXJ0aW52YWxpZCBjaGFyYWN0ZXJJUHY0IGFkZHJlc3Mgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSA0IHBhcnRzZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLjI1NXBhcnNlSVB2NkFkZHJlc3NJbGxlZ2FsIElQdjYgYWRkcmVzcywgcGFyc2VIZXhhbiBJUHY2IHBhcnQgY2FuIG9ubHkgY29udGFpbiBhIG1heGltdW0gb2YgNCBoZXggZGlnaXRzZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIGAweDAuLjB4RkZGRmBhZGRyZXNzIGlzIHRvbyBzaG9ydHdpbGRjYXJkU2VlbnNlZW5Eb3RpbnZhbGlkIHN0YXJ0IGNvbG9uLm9ubHkgb25lIHdpbGRjYXJkIGA6OmAgaXMgYWxsb3dlZHRvbyBmZXcgcGFydHNhdEVuZGlzTGFzdFdpbGRjYXJkZXhwZWN0ZWQgYSBwYXJ0IGFmdGVyIGxhc3QgYDpgYW4gYWRkcmVzcyB3aXRoIGEgd2lsZGNhcmQgbXVzdCBoYXZlIGxlc3MgdGhhbiA3IHBhcnRzYW4gYWRkcmVzcyB3aXRob3V0IGEgd2lsZGNhcmQgbXVzdCBjb250YWluIGV4YWN0bHkgOCBwYXJ0c3dpbGRDYXJkTGVuZ3RoX1VyaV9pc1dpbmRvd3NDYWNoZWRfdXNlckluZm9fcXVlcnlfZnJhZ21lbnRfcGF0aFNlZ21lbnRzX2hhc2hDb2RlQ2FjaGVfcXVlcnlQYXJhbWV0ZXJzX3F1ZXJ5UGFyYW1ldGVyTGlzdHNfdW5yZXNlcnZlZFRhYmxlX3VucmVzZXJ2ZWQyMzk2VGFibGVfZW5jb2RlRnVsbFRhYmxlX3NjaGVtZVRhYmxlX3NjaGVtZUxvd2VyVGFibGVfc3ViRGVsaW1pdGVyc1RhYmxlX2dlbkRlbGltaXRlcnNUYWJsZV91c2VyaW5mb1RhYmxlX3JlZ05hbWVUYWJsZV9wYXRoQ2hhclRhYmxlX3BhdGhDaGFyT3JTbGFzaFRhYmxlX3F1ZXJ5Q2hhclRhYmxlX3pvbmVJRFRhYmxlX2lzV2luZG93c1BsYXRmb3JtVXJpX2lzV2luZG93c1BsYXRmb3Jtbm90U2ltcGxlSW52YWxpZCBlbXB0eSBzY2hlbWV1c2VySW5mb1N0YXJ0SW52YWxpZCBwb3J0YWxsb3dTY2hlbWVfd3JpdGVBdXRob3JpdHlfZGVmYXVsdFBvcnR0aGlzU2NoZW1lX2NvbXBhcmVTY2hlbWVzY2hlbWVDaGFydXJpQ2hhcmxvd2VyQ2hhcl9tYWtlSHR0cFVyaWhhc1VzZXJJbmZvaG9zdEVuZGVzY2FwZUZvclpvbmVJREludmFsaWQgSVB2NiBob3N0IGVudHJ5LkludmFsaWQgZW5kIG9mIGF1dGhvcml0eXBvcnRTdHJpbmdfY2hlY2tOb25XaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVyc3NlZ21lbnRzYXJndW1lbnRFcnJvcklsbGVnYWwgcGF0aCBjaGFyYWN0ZXIgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnNmaXJzdFNlZ21lbnRbIiovOjw+P1xcfF1JbGxlZ2FsIGNoYXJhY3RlciBpbiBwYXRoSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcGF0aDogX2NoZWNrV2luZG93c0RyaXZlTGV0dGVySWxsZWdhbCBkcml2ZSBsZXR0ZXIgX21ha2VGaWxlVXJpc2xhc2hUZXJtaW5hdGVkX21ha2VXaW5kb3dzRmlsZVVybFxcP1xVTkNcV2luZG93cyBwYXRocyB3aXRoIFxcP1wgcHJlZml4IG11c3QgYmUgYWJzb2x1dGVXaW5kb3dzIHBhdGhzIHdpdGggZHJpdmUgbGV0dGVyIG11c3QgYmUgYWJzb2x1dGVob3N0UGFydHBhdGhQYXJ0c2NoZW1lQ2hhbmdlZHBhdGhUb1NwbGl0cXVlcnlQYXJhbWV0ZXJMaXN0c19tYWtlUG9ydF9tYWtlSG9zdHN0cmljdElQdjZNaXNzaW5nIGVuZCBgXWAgdG8gbWF0Y2ggYFtgIGluIGhvc3R6b25lSUR6b25lSURzdGFydCUyNV9jaGVja1pvbmVJRF9pc1pvbmVJRENoYXJfbm9ybWFsaXplWm9uZUlEc2VjdGlvblN0YXJ0Wm9uZUlEIHNob3VsZCBub3QgY29udGFpbiAlIGFueW1vcmVfaXNSZWdOYW1lQ2hhcl9ub3JtYWxpemVSZWdOYW1lX21ha2VTY2hlbWVmaXJzdENvZGVVbml0U2NoZW1lIG5vdCBzdGFydGluZyB3aXRoIGFscGhhYmV0aWMgY2hhcmFjdGVyY29udGFpbnNVcHBlckNhc2VJbGxlZ2FsIHNjaGVtZSBjaGFyYWN0ZXJfY2Fub25pY2FsaXplU2NoZW1lX21ha2VVc2VySW5mb19tYWtlUGF0aGVuc3VyZUxlYWRpbmdTbGFzaEJvdGggcGF0aCBhbmQgcGF0aFNlZ21lbnRzIHNwZWNpZmllZGVzY2FwZURlbGltaXRlcnNfbm9ybWFsaXplUGF0aF9tYWtlUXVlcnlCb3RoIHF1ZXJ5IGFuZCBxdWVyeVBhcmFtZXRlcnMgc3BlY2lmaWVkd3JpdGVQYXJhbWV0ZXJfbWFrZUZyYWdtZW50X25vcm1hbGl6ZUVzY2FwZWxvd2VyQ2FzZWZpcnN0RGlnaXRWYWx1ZXNlY29uZERpZ2l0VmFsdWVfZXNjYXBlQ2hhcjAxMjM0NTY3ODlBQkNERUZlbmNvZGVkQnl0ZXNfbm9ybWFsaXplT3JTdWJzdHJpbmdjaGFyVGFibGVfaXNTY2hlbWVDaGFyYWN0ZXJfaXNHZW5lcmFsRGVsaW1pdGVyX21lcmdlUGF0aHNiYWNrQ291bnRyZWZTdGFydGJhc2VFbmRfbWF5Q29udGFpbkRvdFNlZ21lbnRzLy5fcmVtb3ZlRG90U2VnbWVudHNfbm9ybWFsaXplUmVsYXRpdmVQYXRoX2VzY2FwZVNjaGVtZSUzQXRhcmdldFNjaGVtZXRhcmdldFVzZXJJbmZvdGFyZ2V0SG9zdHRhcmdldFBvcnR0YXJnZXRQYXRodGFyZ2V0UXVlcnltZXJnZWRQYXRoQ2Fubm90IHVzZSBvcmlnaW4gd2l0aG91dCBhIHNjaGVtZTogT3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSBzY2hlbWVzIGh0dHAgYW5kIGh0dHBzOiA6IFVSSSBzaG91bGQgaGF2ZSBhIG5vbi1lbXB0eSBob3N0IG5hbWU6IDovL0Nhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSAgVVJJQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgcXVlcnkgY29tcG9uZW50Q2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgZnJhZ21lbnQgY29tcG9uZW50X3RvRmlsZVBhdGhDYW5ub3QgZXh0cmFjdCBhIG5vbi1XaW5kb3dzIGZpbGUgcGF0aCBmcm9tIGEgZmlsZSBVUkkgd2l0aCBhbiBhdXRob3JpdHlfdG9XaW5kb3dzRmlsZVBhdGhoYXNEcml2ZUxldHRlcl9pc1BhdGhBYnNvbHV0ZXNzX2luaXRpYWxpemVUZXh0X3NwbGl0UXVlcnlTdHJpbmdBbGxwYXJzZVBhaXJfdXJpRW5jb2RlY2Fub25pY2FsVGFibGVzcGFjZVRvUGx1c19oZXhDaGFyUGFpclRvQnl0ZUludmFsaWQgVVJMIGVuY29kaW5nX3VyaURlY29kZXBsdXNUb1NwYWNlSWxsZWdhbCBwZXJjZW50IGVuY29kaW5nIGluIFVSSVRydW5jYXRlZCBVUklfaXNBbHBoYWJldGljQ2hhcmFjdGVyX2lzVW5yZXNlcnZlZENoYXJVcmlEYXRhX25vU2NoZW1lX3NlcGFyYXRvckluZGljZXNfdXJpQ2FjaGVfYmFzZTY0X3Rva2VuQ2hhclRhYmxlX3VyaWNUYWJsZV9iYXNlNjRUYWJsZWNoYXJzZXROYW1lZW5jb2RpbmdOYW1lO2Jhc2U2NCxmcm9tQnl0ZXNTY2hlbWUgbXVzdCBiZSAnZGF0YSdEYXRhIHVyaSBtdXN0IG5vdCBoYXZlIGF1dGhvcml0eURhdGEgdXJpIG11c3Qgbm90IGhhdmUgYSBmcmFnbWVudCBwYXJ0c2xhc2hJbmRleEludmFsaWQgTUlNRSB0eXBlO2NoYXJzZXQ9UGFyYW1ldGVyIG5hbWVzIG11c3Qgbm90IGJlIGVtcHR5UGFyYW1ldGVyIHZhbHVlcyBtdXN0IG5vdCBiZSBlbXB0eXBhcmFtZXRlcnNbIl92YWxpZGF0ZU1pbWVUeXBlRG9lcyBub3Qgc3RhcnQgd2l0aCAnZGF0YTonY29sb25JbmRleHF1ZXJ5SW5kZXhwYXJhbWV0ZXJTdGFydHBhcmFtZXRlckVuZGlzQmFzZTY0a2V5U3RhcnRrZXlFbmRjb250ZW50VGV4dEludmFsaWQgcGVyY2VudCBlc2NhcGVVbmtub3duIGNoYXJzZXQ6IGxhc3RTZXBhcmF0b3JFeHBlY3RpbmcgJz0nX3VyaUVuY29kZUJ5dGVzbm9uLWJ5dGUgdmFsdWVfU2ltcGxlVXJpX3NjaGVtZUVuZF9ob3N0U3RhcnRfcG9ydFN0YXJ0X3BhdGhTdGFydF9xdWVyeVN0YXJ0X2ZyYWdtZW50U3RhcnRfc2NoZW1lQ2FjaGVfaXNGaWxlX2lzSHR0cF9pc0h0dHBzX2lzUGFja2FnZV9pc1NjaGVtZWlzSHR0cE9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gc2NoZW1lcyBodHRwIGFuZCBodHRwczogX2lzUG9ydHBvcnREaWdpdFN0YXJ0X3NpbXBsZU1lcmdlX3RvTm9uU2ltcGxlbmV3VXJpcmVmVXJpYmFzZVN0YXJ0cmVmRW5kX0RhdGFVcmlfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHNfbWF4QXNjaWlfbWF4TGF0aW4xX21heFV0ZjE2X21heFVuaWNvZGVwcm92aXNpb25hbHByb3h5X1BFUkNFTlRfQU1QRVJTQU5EX1BMVVNfU0xBU0hfRVFVQUxTX1VQUEVSX0NBU0VfQV9VUFBFUl9DQVNFX1pfTEVGVF9CUkFDS0VUX0JBQ0tTTEFTSF9SSUdIVF9CUkFDS0VUX0xPV0VSX0NBU0VfQV9MT1dFUl9DQVNFX0ZfTE9XRVJfQ0FTRV9aX2hleERpZ2l0c19zY2hlbWVFbmRJbmRleF9ob3N0U3RhcnRJbmRleF9wb3J0U3RhcnRJbmRleF9wYXRoU3RhcnRJbmRleF9xdWVyeVN0YXJ0SW5kZXhfZnJhZ21lbnRTdGFydEluZGV4X25vdFNpbXBsZUluZGV4X3VyaVN0YXJ0X25vblNpbXBsZUVuZFN0YXRlc19zY2hlbWVTdGFydF9zY2FubmVyVGFibGVzX21heF9taW5fbmV3RGlnaXRzX2NvbXBsZXRlRGVmZXJyZWRMb2Fkc3N0aWxsT3V0c3RhbmRpbmdMb2FkUmVxdWVzdHNvdXRzdGFuZGluZ1JlcXVlc3RzX2dldEhhc2hPYmplY3RfZ2V0SGFzaF9zZXRIYXNoT2JqZWN0X3NldEhhc2hfdW5zdXBwb3J0ZWRVcmlCYXNlJ1VyaS5iYXNlJyBpcyBub3Qgc3VwcG9ydGVkSWRlbnRpY2FsX2NvbXBhcmlzb25pZGVudGl0eUhhc2hDb2RlX2NyZWF0ZVRhYmxlc3RhYmxlc2RlZmF1bHRUcmFuc2l0aW9uc2V0Q2hhcnN0cmFuc2l0aW9uMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXotLl9+ISQmJygpKissOz1BWjA5YXorLS5fc2Nhbl9zdGFydHNXaXRoRGF0YV9zdHJpbmdPck51bGxMZW5ndGhkYXJ0Ll9odHRwY3J5cHRvLmRhcnRodHRwX2RhdGUuZGFydGh0dHBfaGVhZGVycy5kYXJ0aHR0cF9pbXBsLmRhcnRodHRwX3BhcnNlci5kYXJ0aHR0cF9zZXNzaW9uLmRhcnR3ZWJzb2NrZXQuZGFydHdlYnNvY2tldF9pbXBsLmRhcnRfQnl0ZXNDb25zdW1lckJhZENlcnRpZmljYXRlQ2FsbGJhY2tjcl9Qcm90b2NvbFNlbGVjdG9ySHR0cFNlcnZlcnNlcnZlckhlYWRlcmF1dG9Db21wcmVzc2lkbGVUaW1lb3V0ZGVmYXVsdFJlc3BvbnNlSGVhZGVyc2JpbmRTZWN1cmVsaXN0ZW5PbnNlc3Npb25UaW1lb3V0Y29ubmVjdGlvbnNJbmZvSHR0cENvbm5lY3Rpb25zSW5mb2lkbGVIdHRwSGVhZGVyc2FjY2VwdEhlYWRlcmFjY2VwdENoYXJzZXRIZWFkZXJhY2NlcHQtY2hhcnNldGFjY2VwdEVuY29kaW5nSGVhZGVyYWNjZXB0LWVuY29kaW5nYWNjZXB0TGFuZ3VhZ2VIZWFkZXJhY2NlcHQtbGFuZ3VhZ2VhY2NlcHRSYW5nZXNIZWFkZXJhY2NlcHQtcmFuZ2VzYWdlSGVhZGVyYWdlYWxsb3dIZWFkZXJhbGxvd2F1dGhvcml6YXRpb25IZWFkZXJhdXRob3JpemF0aW9uY2FjaGVDb250cm9sSGVhZGVyY2FjaGUtY29udHJvbGNvbm5lY3Rpb25IZWFkZXJjb250ZW50RW5jb2RpbmdIZWFkZXJjb250ZW50LWVuY29kaW5nY29udGVudExhbmd1YWdlSGVhZGVyY29udGVudC1sYW5ndWFnZWNvbnRlbnRMZW5ndGhIZWFkZXJjb250ZW50LWxlbmd0aGNvbnRlbnRMb2NhdGlvbkhlYWRlcmNvbnRlbnQtbG9jYXRpb25jb250ZW50TUQ1SGVhZGVyY29udGVudC1tZDVjb250ZW50UmFuZ2VIZWFkZXJjb250ZW50LXJhbmdlY29udGVudFR5cGVIZWFkZXJjb250ZW50LXR5cGVkYXRlSGVhZGVyZXRhZ0hlYWRlcmV0YWdleHBlY3RIZWFkZXJleHBlY3RleHBpcmVzSGVhZGVyZnJvbUhlYWRlcmhvc3RIZWFkZXJpZk1hdGNoSGVhZGVyaWYtbWF0Y2hpZk1vZGlmaWVkU2luY2VIZWFkZXJpZi1tb2RpZmllZC1zaW5jZWlmTm9uZU1hdGNoSGVhZGVyaWYtbm9uZS1tYXRjaGlmUmFuZ2VIZWFkZXJpZi1yYW5nZWlmVW5tb2RpZmllZFNpbmNlSGVhZGVyaWYtdW5tb2RpZmllZC1zaW5jZWxhc3RNb2RpZmllZEhlYWRlcmxhc3QtbW9kaWZpZWRsb2NhdGlvbkhlYWRlcm1heEZvcndhcmRzSGVhZGVybWF4LWZvcndhcmRzcHJhZ21hSGVhZGVycHJveHlBdXRoZW50aWNhdGVIZWFkZXJwcm94eS1hdXRoZW50aWNhdGVwcm94eUF1dGhvcml6YXRpb25IZWFkZXJwcm94eS1hdXRob3JpemF0aW9ucmFuZ2VIZWFkZXJyZWZlcmVySGVhZGVycmVmZXJlcnJldHJ5QWZ0ZXJIZWFkZXJyZXRyeS1hZnRlcnRlSGVhZGVydGV0cmFpbGVySGVhZGVydHJhaWxlcnRyYW5zZmVyRW5jb2RpbmdIZWFkZXJ0cmFuc2Zlci1lbmNvZGluZ3VwZ3JhZGVIZWFkZXJ1cGdyYWRldXNlckFnZW50SGVhZGVydXNlci1hZ2VudHZhcnlIZWFkZXJ2YXJ5dmlhSGVhZGVyd2FybmluZ0hlYWRlcnd3d0F1dGhlbnRpY2F0ZUhlYWRlcnd3dy1hdXRoZW50aWNhdGVBQ0NFUFRVc2UgYWNjZXB0SGVhZGVyIGluc3RlYWRBQ0NFUFRfQ0hBUlNFVFVzZSBhY2NlcHRDaGFyc2V0SGVhZGVyIGluc3RlYWRBQ0NFUFRfRU5DT0RJTkdVc2UgYWNjZXB0RW5jb2RpbmdIZWFkZXIgaW5zdGVhZEFDQ0VQVF9MQU5HVUFHRVVzZSBhY2NlcHRMYW5ndWFnZUhlYWRlciBpbnN0ZWFkQUNDRVBUX1JBTkdFU1VzZSBhY2NlcHRSYW5nZXNIZWFkZXIgaW5zdGVhZEFHRVVzZSBhZ2VIZWFkZXIgaW5zdGVhZEFMTE9XVXNlIGFsbG93SGVhZGVyIGluc3RlYWRBVVRIT1JJWkFUSU9OVXNlIGF1dGhvcml6YXRpb25IZWFkZXIgaW5zdGVhZENBQ0hFX0NPTlRST0xVc2UgY2FjaGVDb250cm9sSGVhZGVyIGluc3RlYWRDT05ORUNUSU9OVXNlIGNvbm5lY3Rpb25IZWFkZXIgaW5zdGVhZENPTlRFTlRfRU5DT0RJTkdVc2UgY29udGVudEVuY29kaW5nSGVhZGVyIGluc3RlYWRDT05URU5UX0xBTkdVQUdFVXNlIGNvbnRlbnRMYW5ndWFnZUhlYWRlciBpbnN0ZWFkQ09OVEVOVF9MRU5HVEhVc2UgY29udGVudExlbmd0aEhlYWRlciBpbnN0ZWFkQ09OVEVOVF9MT0NBVElPTlVzZSBjb250ZW50TG9jYXRpb25IZWFkZXIgaW5zdGVhZENPTlRFTlRfTUQ1VXNlIGNvbnRlbnRNRDVIZWFkZXIgaW5zdGVhZENPTlRFTlRfUkFOR0VVc2UgY29udGVudFJhbmdlSGVhZGVyIGluc3RlYWRDT05URU5UX1RZUEVVc2UgY29udGVudFR5cGVIZWFkZXIgaW5zdGVhZERBVEVVc2UgZGF0ZUhlYWRlciBpbnN0ZWFkRVRBR1VzZSBldGFnSGVhZGVyIGluc3RlYWRFWFBFQ1RVc2UgZXhwZWN0SGVhZGVyIGluc3RlYWRFWFBJUkVTVXNlIGV4cGlyZXNIZWFkZXIgaW5zdGVhZEZST01Vc2UgZnJvbUhlYWRlciBpbnN0ZWFkSE9TVFVzZSBob3N0SGVhZGVyIGluc3RlYWRJRl9NQVRDSFVzZSBpZk1hdGNoSGVhZGVyIGluc3RlYWRJRl9NT0RJRklFRF9TSU5DRVVzZSBpZk1vZGlmaWVkU2luY2VIZWFkZXIgaW5zdGVhZElGX05PTkVfTUFUQ0hVc2UgaWZOb25lTWF0Y2hIZWFkZXIgaW5zdGVhZElGX1JBTkdFVXNlIGlmUmFuZ2VIZWFkZXIgaW5zdGVhZElGX1VOTU9ESUZJRURfU0lOQ0VVc2UgaWZVbm1vZGlmaWVkU2luY2VIZWFkZXIgaW5zdGVhZExBU1RfTU9ESUZJRURVc2UgbGFzdE1vZGlmaWVkSGVhZGVyIGluc3RlYWRMT0NBVElPTlVzZSBsb2NhdGlvbkhlYWRlciBpbnN0ZWFkTUFYX0ZPUldBUkRTVXNlIG1heEZvcndhcmRzSGVhZGVyIGluc3RlYWRQUkFHTUFVc2UgcHJhZ21hSGVhZGVyIGluc3RlYWRQUk9YWV9BVVRIRU5USUNBVEVVc2UgcHJveHlBdXRoZW50aWNhdGVIZWFkZXIgaW5zdGVhZFBST1hZX0FVVEhPUklaQVRJT05Vc2UgcHJveHlBdXRob3JpemF0aW9uSGVhZGVyIGluc3RlYWRSQU5HRVVzZSByYW5nZUhlYWRlciBpbnN0ZWFkUkVGRVJFUlVzZSByZWZlcmVySGVhZGVyIGluc3RlYWRSRVRSWV9BRlRFUlVzZSByZXRyeUFmdGVySGVhZGVyIGluc3RlYWRTRVJWRVJVc2Ugc2VydmVySGVhZGVyIGluc3RlYWRURVVzZSB0ZUhlYWRlciBpbnN0ZWFkVFJBSUxFUlVzZSB0cmFpbGVySGVhZGVyIGluc3RlYWRUUkFOU0ZFUl9FTkNPRElOR1VzZSB0cmFuc2ZlckVuY29kaW5nSGVhZGVyIGluc3RlYWRVUEdSQURFVXNlIHVwZ3JhZGVIZWFkZXIgaW5zdGVhZFVTRVJfQUdFTlRVc2UgdXNlckFnZW50SGVhZGVyIGluc3RlYWRWQVJZVXNlIHZhcnlIZWFkZXIgaW5zdGVhZFZJQVVzZSB2aWFIZWFkZXIgaW5zdGVhZFVzZSB3YXJuaW5nSGVhZGVyIGluc3RlYWRXV1dfQVVUSEVOVElDQVRFVXNlIHd3d0F1dGhlbnRpY2F0ZUhlYWRlciBpbnN0ZWFkY29va2llSGVhZGVyY29va2llc2V0Q29va2llSGVhZGVyc2V0LWNvb2tpZUNPT0tJRVVzZSBjb29raWVIZWFkZXIgaW5zdGVhZFNFVF9DT09LSUVVc2Ugc2V0Q29va2llSGVhZGVyIGluc3RlYWRnZW5lcmFsSGVhZGVyc0dFTkVSQUxfSEVBREVSU1VzZSBnZW5lcmFsSGVhZGVycyBpbnN0ZWFkZW50aXR5SGVhZGVyc0VOVElUWV9IRUFERVJTVXNlIGVudGl0eUhlYWRlcnMgaW5zdGVhZHJlc3BvbnNlSGVhZGVyc1JFU1BPTlNFX0hFQURFUlNVc2UgcmVzcG9uc2VIZWFkZXJzIGluc3RlYWRyZXF1ZXN0SGVhZGVyc1JFUVVFU1RfSEVBREVSU1VzZSByZXF1ZXN0SGVhZGVycyBpbnN0ZWFkaWZNb2RpZmllZFNpbmNlY29udGVudExlbmd0aGNodW5rZWRUcmFuc2ZlckVuY29kaW5nbm9Gb2xkaW5nSGVhZGVyVmFsdWVwYXJhbWV0ZXJTZXBhcmF0b3J2YWx1ZVNlcGFyYXRvcnByZXNlcnZlQmFja3NsYXNoSHR0cFNlc3Npb25wbGFpblRFWFRVc2UgdGV4dCBpbnN0ZWFkSFRNTFVzZSBodG1sIGluc3RlYWRKU09OVXNlIGpzb24gaW5zdGVhZG9jdGV0LXN0cmVhbVVzZSBiaW5hcnkgaW5zdGVhZHByaW1hcnlUeXBlc3ViVHlwZUNvb2tpZW1heEFnZWh0dHBPbmx5ZnJvbVNldENvb2tpZVZhbHVlSHR0cFJlcXVlc3RyZXF1ZXN0ZWRVcmljb29raWVzc2Vzc2lvbnByb3RvY29sVmVyc2lvbkh0dHBSZXNwb25zZWRlYWRsaW5lZGV0YWNoU29ja2V0d3JpdGVIZWFkZXJzZGVmYXVsdEh0dHBQb3J0REVGQVVMVF9IVFRQX1BPUlRVc2UgZGVmYXVsdEh0dHBQb3J0IGluc3RlYWRkZWZhdWx0SHR0cHNQb3J0REVGQVVMVF9IVFRQU19QT1JUVXNlIGRlZmF1bHRIdHRwc1BvcnQgaW5zdGVhZGNvbm5lY3Rpb25UaW1lb3V0YXV0b1VuY29tcHJlc3N1c2VyQWdlbnRjcmVhdGVIdHRwQ2xpZW50b3BlblVybHB1dFVybGRlbGV0ZVVybHBhdGNoVXJsaGVhZFVybGF1dGhlbnRpY2F0ZWFkZENyZWRlbnRpYWxzcmVhbG1jcmVkZW50aWFsc2ZpbmRQcm94eWZpbmRQcm94eUZyb21FbnZpcm9ubWVudGF1dGhlbnRpY2F0ZVByb3h5YWRkUHJveHlDcmVkZW50aWFsc2JhZENlcnRpZmljYXRlQ2FsbGJhY2tmb2xsb3dSZWRpcmVjdHNtYXhSZWRpcmVjdHNIdHRwQ2xpZW50UmVzcG9uc2Vjb21wcmVzc2lvblN0YXRlaXNSZWRpcmVjdHJlZGlyZWN0c2ZvbGxvd0xvb3BzSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZUh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUubm90Q29tcHJlc3NlZEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUuZGVjb21wcmVzc2VkSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5jb21wcmVzc2Vkbm90Q29tcHJlc3NlZGRlY29tcHJlc3NlZGNvbXByZXNzZWRIdHRwQ2xpZW50Q3JlZGVudGlhbHNIdHRwQ2xpZW50QmFzaWNDcmVkZW50aWFsc3VzZXJuYW1lSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzSHR0cENvbm5lY3Rpb25JbmZvUmVkaXJlY3RJbmZvRGV0YWNoZWRTb2NrZXR1bnBhcnNlZERhdGFIdHRwRXhjZXB0aW9uSHR0cEV4Y2VwdGlvbjogLCB1cmkgPSBSZWRpcmVjdEV4Y2VwdGlvblJlZGlyZWN0RXhjZXB0aW9uOiBfQ3J5cHRvVXRpbHNQQURDUkxGTElORV9MRU5HVEhfZW5jb2RlVGFibGVfZW5jb2RlVGFibGVVcmxTYWZlX2RlY29kZVRhYmxlX3JuZ2J5dGVzVG9IZXhieXRlc1RvQmFzZTY0YWRkTGluZVNlcGFyYXRvcmNodW5rTGVuZ3Rob3V0cHV0TGVuYmFzZTY0U3RyaW5nVG9CeXRlc2lnbm9yZUludmFsaWRDaGFyYWN0ZXJzZXh0cmFzTGVuSW52YWxpZCBjaGFyYWN0ZXI6IFNpemUgb2YgQmFzZSA2NCBjaGFyYWN0ZXJzIGluIElucHV0CiAgICAgICAgICBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4gSW5wdXQ6IGN1cnJlbnRDb2RlVW5pdF9jaHVua1NpemVJbldvcmRzX2RpZ2VzdFNpemVJbldvcmRzX2JpZ0VuZGlhbldvcmRzX2hfZGlnZXN0Q2FsbGVkSGFzaCB1cGRhdGUgbWV0aG9kIGNhbGxlZCBhZnRlciBkaWdlc3Qgd2FzIHJldHJpZXZlZF9yZXN1bHRBc0J5dGVzX3VwZGF0ZUhhc2hfYWRkMzJfcm90bDMybW9kX3NoaWZ0X3dvcmRUb0J5dGVzX2J5dGVzVG9DaHVua2RhdGFJbmRleHdvcmRJbmRleHczdzJ3MXcwd29yZGNodW5rU2l6ZUluQnl0ZXN6ZXJvUGFkZGluZ19NRDVfa19ydDFfU0hBMV93SHR0cERhdGVNb25UdWVXZWRUaHVGcmlTYXRTdW5KYW5GZWJNYXJBcHJNYXlKdW5KdWxBdWdTZXBPY3ROb3ZEZWMgMDowIEdNVFNQZm9ybWF0UmZjMTEyM2Zvcm1hdFJmYzg1MGZvcm1hdEFzY3RpbWVJbnZhbGlkIEhUVFAgZGF0ZSBleHBlY3RXZWVrZGF5TW9uZGF5VHVlc2RheVdlZG5lc2RheVRodXJzZGF5RnJpZGF5U2F0dXJkYXlTdW5kYXlleHBlY3RNb250aGV4cGVjdE51bWV4cGVjdEVuZEdNVF9wYXJzZUNvb2tpZURhdGVJbnZhbGlkIGNvb2tpZSBkYXRlIGlzRW5kaXNEZWxpbWl0ZXJpc05vbkRlbGltaXRlcmdldE1vbnRoamFuZmVibWFyYXByanVuanVsYXVnb2N0bm92ZGVjdGltZVN0cmRheU9mTW9udGhTdHJtb250aFN0cnllYXJTdHJkYXlPZk1vbnRodGltZUxpc3RfSHR0cEhlYWRlcnNfaGVhZGVyc19tdXRhYmxlX25vRm9sZGluZ0hlYWRlcnNfY29udGVudExlbmd0aF9wZXJzaXN0ZW50Q29ubmVjdGlvbl9jaHVua2VkVHJhbnNmZXJFbmNvZGluZ19kZWZhdWx0UG9ydEZvclNjaGVtZWRlZmF1bHRQb3J0Rm9yU2NoZW1laW5pdGlhbEhlYWRlcnNNb3JlIHRoYW4gb25lIHZhbHVlIGZvciBoZWFkZXIgX2NoZWNrTXV0YWJsZWNodW5rZWQxLjFUcnlpbmcgdG8gc2V0ICdDb25uZWN0aW9uOiBLZWVwLUFsaXZlJyBvbiBIVFRQIDEuMCBoZWFkZXJzIHdpdGggbm8gQ29udGVudExlbmd0aGtlZXAtYWxpdmVUcnlpbmcgdG8gY2xlYXIgQ29udGVudExlbmd0aCBvbiBIVFRQIDEuMCBoZWFkZXJzIHdpdGggJ0Nvbm5lY3Rpb246IEtlZXAtQWxpdmUnIHNldFRyeWluZyB0byBzZXQgJ1RyYW5zZmVyLUVuY29kaW5nOiBDaHVua2VkJyBvbiBIVFRQIDEuMCBoZWFkZXJzX2FkZFZhbHVlX3VwZGF0ZUhvc3RIZWFkZXJfYWRkRGF0ZV9hZGRIb3N0X2FkZEV4cGlyZXNfYWRkQ29ubmVjdGlvbl9hZGRDb250ZW50VHlwZV9hZGRDb250ZW50TGVuZ3RoX2FkZFRyYW5zZmVyRW5jb2RpbmdfYWRkSWZNb2RpZmllZFNpbmNlVW5leHBlY3RlZCB0eXBlIGZvciBoZWFkZXIgbmFtZWQgbG93ZXJDYXNlVmFsdWVIVFRQIGhlYWRlcnMgYXJlIG5vdCBtdXRhYmxlZGVmYXVsdFBvcnRfZm9sZEhlYWRlcm5hbWVEYXRhX3BhcnNlQ29va2llc3BhcnNlQ29va2llU3RyaW5nc2tpcFdTcGFyc2VOYW1lcGFyc2VWYWx1ZWhlYWRlclZhbHVlX3ZhbGlkYXRlRmllbGRJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIG5hbWU6IF92YWxpZGF0ZVZhbHVlSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCB2YWx1ZTogX0hlYWRlclZhbHVlX3VubW9kaWZpYWJsZVBhcmFtZXRlcnNfZW5zdXJlUGFyYW1ldGVyc0ZhaWxlZCB0byBwYXJzZSBoZWFkZXIgdmFsdWVtYXliZUV4cGVjdHBhcnNlUGFyYW1ldGVyc3BhcnNlUGFyYW1ldGVyTmFtZXBhcnNlUGFyYW1ldGVyVmFsdWVfQ29udGVudFR5cGVfcHJpbWFyeVR5cGVfc3ViVHlwZWxvd2VyQ2FzZUtleV9Db29raWVfcGFyc2VTZXRDb29raWVWYWx1ZUZhaWxlZCB0byBwYXJzZSBoZWFkZXIgdmFsdWUgW3BhcnNlQXR0cmlidXRlc3BhcnNlQXR0cmlidXRlTmFtZXBhcnNlQXR0cmlidXRlVmFsdWVtYXgtYWdlaHR0cG9ubHk7IEV4cGlyZXM9OyBNYXgtQWdlPTsgRG9tYWluPTsgUGF0aD07IFNlY3VyZTsgSHR0cE9ubHlfdmFsaWRhdGVOYW1lSW52YWxpZCBjaGFyYWN0ZXIgaW4gY29va2llIG5hbWUsIGNvZGUgdW5pdDogJ0ludmFsaWQgY2hhcmFjdGVyIGluIGNvb2tpZSB2YWx1ZSwgY29kZSB1bml0OiAnX0lOSVRfU0laRV9IdHRwSW5jb21pbmdfdHJhbnNmZXJMZW5ndGhfZGF0YUNvbXBsZXRlcmZ1bGxCb2R5UmVhZHVwZ3JhZGVkaGFzU3Vic2NyaWJlcnRyYW5zZmVyTGVuZ3RoZGF0YURvbmVfSHR0cEluYm91bmRNZXNzYWdlTGlzdEludF9pbmNvbWluZ19jb29raWVzX0h0dHBJbmJvdW5kTWVzc2FnZV9IdHRwUmVxdWVzdF9odHRwU2VydmVyX2h0dHBDb25uZWN0aW9uX3Nlc3Npb25fcmVxdWVzdGVkVXJpX3Nlc3Npb25NYW5hZ2VySW5zdGFuY2VzZXNzaW9uSWRzREFSVFNFU1NJRHNlc3Npb25JZF9zZXNzaW9uTWFuYWdlcmdldFNlc3Npb25fbWFya1NlZW54LWZvcndhcmRlZC1wcm90b2hvc3RMaXN0eC1mb3J3YXJkZWQtaG9zdF9kZXN0cm95ZWRjcmVhdGVTZXNzaW9uX0h0dHBDbGllbnRSZXNwb25zZV9odHRwUmVxdWVzdF9yZXNwb25zZVJlZGlyZWN0c19nZXRDb21wcmVzc2lvblN0YXRlaHR0cENsaWVudF9odHRwQ2xpZW50Q29ubmVjdGlvbkhFQURQT1NUUmVzcG9uc2UgaGFzIG5vIExvY2F0aW9uIGhlYWRlciBmb3IgcmVkaXJlY3RSZWRpcmVjdCBsb29wIGRldGVjdGVkX29wZW5VcmxGcm9tUmVxdWVzdF9jb25uZWN0aW9uQ2xvc2VkX3Nob3VsZEF1dGhlbnRpY2F0ZVByb3h5Y2hhbGxlbmdlX3Nob3VsZEF1dGhlbnRpY2F0ZV9hdXRoZW50aWNhdGVwcm94eUF1dGhyZXRyeWF1dGhDaGFsbGVuZ2VmaW5kQ3JlZGVudGlhbHNfZmluZFByb3h5Q3JlZGVudGlhbHNfcHJveHlfZmluZENyZWRlbnRpYWxzcmVtb3ZlQ3JlZGVudGlhbHNfcmVtb3ZlUHJveHlDcmVkZW50aWFsc19yZW1vdmVDcmVkZW50aWFsc3JlcXVlc3RBdXRoZW50aWNhdGlvbl9hdXRoZW50aWNhdGVQcm94eWFsZ29yaXRobW5vbmNlcW9wbm9uY2VDb3VudHN0YWxlY3JlZHNBdmFpbGFibGVfVG9VaW50OExpc3RfVWludDhMaXN0Q29udmVyc2lvblNpbmt0YXJnZXRBZGRTdHJlYW1fSHR0cE91dGJvdW5kTWVzc2FnZV9lbmNvZGluZ1NldF9idWZmZXJPdXRwdXRfb3V0Z29pbmdvdXRnb2luZ291dGJvdW5kaGVhZGVyc1dyaXR0ZW5IZWFkZXIgYWxyZWFkeSBzZW50X3dyaXRlSGVhZGVyX2lzQ29ubmVjdGlvbkNsb3NlZF9IdHRwUmVzcG9uc2Vfc3RhdHVzQ29kZV9yZWFzb25QaHJhc2VfZGVhZGxpbmVfZGVhZGxpbmVUaW1lcmRlZmF1bHRIZWFkZXJzX2lzQ2xvc2luZ19maW5kUmVhc29uUGhyYXNlSGVhZGVycyBhbHJlYWR5IHNlbnRoZWFkZXJzRnV0dXJlZHJhaW5SZXF1ZXN0c2V0T3V0Z29pbmdfaXNOZXdoZWFkZXJCeXRlc3NldEhlYWRlclN3aXRjaGluZyBQcm90b2NvbHNDcmVhdGVkQWNjZXB0ZWROb24tQXV0aG9yaXRhdGl2ZSBJbmZvcm1hdGlvbk5vIENvbnRlbnRSZXNldCBDb250ZW50UGFydGlhbCBDb250ZW50TXVsdGlwbGUgQ2hvaWNlc01vdmVkIFBlcm1hbmVudGx5Rm91bmRTZWUgT3RoZXJOb3QgTW9kaWZpZWRVc2UgUHJveHlUZW1wb3JhcnkgUmVkaXJlY3RCYWQgUmVxdWVzdFVuYXV0aG9yaXplZFBheW1lbnQgUmVxdWlyZWRGb3JiaWRkZW5Ob3QgRm91bmRNZXRob2QgTm90IEFsbG93ZWROb3QgQWNjZXB0YWJsZVByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkUmVxdWVzdCBUaW1lLW91dENvbmZsaWN0R29uZUxlbmd0aCBSZXF1aXJlZFByZWNvbmRpdGlvbiBGYWlsZWRSZXF1ZXN0IEVudGl0eSBUb28gTGFyZ2VSZXF1ZXN0LVVSSSBUb28gTG9uZ1Vuc3VwcG9ydGVkIE1lZGlhIFR5cGVSZXF1ZXN0ZWQgcmFuZ2Ugbm90IHNhdGlzZmlhYmxlRXhwZWN0YXRpb24gRmFpbGVkSW50ZXJuYWwgU2VydmVyIEVycm9yTm90IEltcGxlbWVudGVkQmFkIEdhdGV3YXlTZXJ2aWNlIFVuYXZhaWxhYmxlR2F0ZXdheSBUaW1lLW91dEh0dHAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkU3RhdHVzIF9IdHRwQ2xpZW50UmVxdWVzdF9yZXNwb25zZUNvbXBsZXRlcl9yZXNwb25zZV9mb2xsb3dSZWRpcmVjdHNfbWF4UmVkaXJlY3RzUmVxdWVzdCBhbHJlYWR5IHNlbnRfb25JbmNvbWluZ2luY29taW5nUmVkaXJlY3QgbGltaXQgZXhjZWVkZWRfcmVxdWVzdFVyaXVyaVN0YXJ0aW5nRnJvbVBhdGhpc0RpcmVjdENPTk5FQ1RfcHJveHlUdW5uZWxfSHR0cEdaaXBTaW5rX2NvbnN1bWVfSHR0cE91dGdvaW5nX2Zvb3RlckFuZENodW5rMExlbmd0aF9jaHVuazBMZW5ndGhpZ25vcmVCb2R5X2Nsb3NlRnV0dXJlX3BlbmRpbmdDaHVua2VkRm9vdGVyX2J5dGVzV3JpdHRlbl9nemlwX2d6aXBTaW5rX2d6aXBBZGRfZ3ppcEJ1ZmZlcl9nemlwQnVmZmVyTGVuZ3RoX3NvY2tldEVycm9yZHJhaW5GdXR1cmVhY2NlcHRFbmNvZGluZ3Njb250ZW50RW5jb2RpbmdfYWRkR1ppcENodW5rX2NodW5rSGVhZGVyQ29udGVudCBzaXplIGV4Y2VlZHMgc3BlY2lmaWVkIGNvbnRlbnRMZW5ndGguICBieXRlcyB3cml0dGVuIHdoaWxlIGV4cGVjdGVkIF9pZ25vcmVFcnJvck5vIGNvbnRlbnQgZXZlbiB0aG91Z2ggY29udGVudExlbmd0aCB3YXMgc3BlY2lmaWVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAwOiBDb250ZW50IHNpemUgYmVsb3cgc3BlY2lmaWVkIGNvbnRlbnRMZW5ndGguICBieXRlcyB3cml0dGVuIGJ1dCBleHBlY3RlZCBmb290ZXJBbmRIZWFkZXJfSHR0cENsaWVudENvbm5lY3Rpb25faHR0cFBhcnNlcl9kaXNwb3NlX2lkbGVUaW1lcl9jdXJyZW50VXJpX25leHRSZXNwb25zZUNvbXBsZXRlcl9zdHJlYW1GdXR1cmVsaXN0ZW5Ub1N0cmVhbVVuZXhwZWN0ZWQgcmVzcG9uc2UgKHVuc29saWNpdGVkIHJlc3BvbnNlIHdpdGhvdXQgcmVxdWVzdCkuQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIHJlc3BvbnNlIHdhcyByZWNlaXZlZFNvY2tldCBjbG9zZWQgYmVmb3JlIHJlcXVlc3Qgd2FzIHNlbnRwcm94eUNyZWRzY3JlZHNpc0F1dGhlbnRpY2F0ZWRhdXRoQmFzaWMgX3Byb3h5Q3JlZGVudGlhbHNhdXRob3JpemVpc0hlYWRzdGFydFRpbWVyX3JldHVybkNvbm5lY3Rpb25hdXRoSW5mb3Byb3h5LWF1dGhlbnRpY2F0aW9uLWluZm9uZXh0bm9uY2VhdXRoZW50aWNhdGlvbi1pbmZvQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGRhdGEgd2FzIHJlY2VpdmVkZGV0YWNoSW5jb21pbmdjcmVhdGVQcm94eVR1bm5lbFByb3h5IGZhaWxlZCB0byBlc3RhYmxpc2ggdHVubmVsIHNlY3VyZVNvY2tldGlzU2VjdXJlc3NoOnN0b3BUaW1lcl9Db25uZWN0aW9uSW5mb19Db25uZWN0aW9uVGFyZ2V0X2lkbGVfYWN0aXZlX3NvY2tldFRhc2tzX2Nvbm5lY3RpbmdoYXNJZGxlaGFzQWN0aXZldGFrZUlkbGVfY2hlY2tQZW5kaW5nYWRkTmV3QWN0aXZlcmV0dXJuQ29ubmVjdGlvbmNvbm5lY3Rpb25DbG9zZWR1cmlIb3N0dXJpUG9ydF9jb25uZWN0aW9uc0NoYW5nZWRjdXJyZW50QmFkQ2VydGlmaWNhdGVDYWxsYmFja19iYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrY29ubmVjdGlvblRhc2tIVFRQIGNvbm5lY3Rpb24gdGltZWQgb3V0IGFmdGVyIGhvc3Q6IHR1bm5lbF9nZXRDb25uZWN0aW9uVGFyZ2V0X0h0dHBDbGllbnRfY2xvc2luZ19jbG9zaW5nRm9yY2VmdWxseV9jb25uZWN0aW9uVGFyZ2V0c19jcmVkZW50aWFsc19maW5kUHJveHlfaWRsZVRpbWVvdXRfcGxhdGZvcm1FbnZpcm9ubWVudENhY2hlX29wZW5VcmxfY2xvc2VDb25uZWN0aW9uc0NsaWVudCBpcyBjbG9zZWRObyBob3N0IHNwZWNpZmllZCBpbiBVUkkgVW5zdXBwb3J0ZWQgc2NoZW1lICcnIGluIFVSSSBwcm94eUNvbmZfZ2V0Q29ubmVjdGlvbmNvbm5lY3Rpb25UYXJnZXRwcm94aWVzTm8gcHJveGllcyBnaXZlbnNpdGVDcmVkZW50aWFsc19maW5kUHJveHlGcm9tRW52aXJvbm1lbnRjaGVja05vUHJveHlESVJFQ1RjaGVja1Byb3h5OjEwODBQUk9YWSBwcm94eUNmZ25vUHJveHlub19wcm94eU5PX1BST1hZaHR0cF9wcm94eUhUVFBfUFJPWFlodHRwc19wcm94eUhUVFBTX1BST1hZX19IdHRwQ29ubmVjdGlvbiZMaW5rZWRMaXN0RW50cnkmX1NlcnZpY2VPYmplY3RfSHR0cENvbm5lY3Rpb25fQUNUSVZFX0lETEVfQ0xPU0lOR19ERVRBQ0hFRF9jb25uZWN0aW9uc19pZGxlTWFya19tYXJrQWN0aXZlX21hcmtJZGxlX2hhbmRsZVJlcXVlc3RtYXJrSWRsZWlzTWFya2VkSWRsZWRldGFjaGVkSW5jb21pbmdfaXNBY3RpdmVfaXNJZGxlX2lzRGV0YWNoZWRpby9odHRwL3NlcnZlcmNvbm5lY3Rpb25zSHR0cFNlcnZlckNvbm5lY3Rpb24gPC0+IHVzZXJfbmFtZUBTb2NrZXRVc2VyU29ja2V0QWN0aXZlSWRsZUNsb3NpbmdEZXRhY2hlZF9fSHR0cFNlcnZlciZTdHJlYW0mX1NlcnZpY2VPYmplY3RfSHR0cFNlcnZlcl9zZXJ2ZXJzX3NlcnZlclNvY2tldF9jbG9zZVNlcnZlcl9hY3RpdmVDb25uZWN0aW9uc19pZGxlQ29ubmVjdGlvbnNfaW5pdERlZmF1bHRSZXNwb25zZUhlYWRlcnNYLUZyYW1lLU9wdGlvbnNTQU1FT1JJR0lOWC1Db250ZW50LVR5cGUtT3B0aW9uc25vc25pZmZYLVhTUy1Qcm90ZWN0aW9uMTsgbW9kZT1ibG9ja0h0dHBTZXJ2ZXIgaXMgbm90IGJvdW5kIHRvIGEgc29ja2V0Y29ubmlvL2h0dHAvc2VydmVyc19Qcm94eUNvbmZpZ3VyYXRpb25QUk9YWV9QUkVGSVhESVJFQ1RfUFJFRklYSW52YWxpZCBwcm94eSBjb25maWd1cmF0aW9uIHVzZXJpbmZvaW52YWxpZCBwb3J0ICdfSHR0cENvbm5lY3Rpb25JbmZvX0RldGFjaGVkU29ja2V0X0F1dGhlbnRpY2F0aW9uU2NoZW1lX3NjaGVtZVVOS05PV05CQVNJQ0RJR0VTVGJhc2ljQmFzaWNfQ3JlZGVudGlhbHNoYTFfU2l0ZUNyZWRlbnRpYWxzdGhpc1BvcnRvdGhlclBvcnRfUHJveHlDcmVkZW50aWFsc2F1dGhvcml6ZVByb3h5X0h0dHBDbGllbnRDcmVkZW50aWFsc19IdHRwQ2xpZW50QmFzaWNDcmVkZW50aWFsc19IdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHNoYTJjbm9uY2VuY0RpZ2VzdCB1c2VybmFtZT0iLCByZWFsbT0iLCBub25jZT0iLCB1cmk9IiwgYWxnb3JpdGhtPSIsIHFvcD0iLCBjbm9uY2U9IiwgbmM9IiwgcmVzcG9uc2U9Il9SZWRpcmVjdEluZm9fQ29uc3RIVFRQSFRUUDFET1RIVFRQMTBIVFRQMTFTRVBBUkFUT1JfTUFQX0NoYXJDb2RlSFREQVNIU0VNSV9DT0xPTkVRVUFMX1N0YXRlTUVUSE9EX09SX1JFU1BPTlNFX0hUVFBfVkVSU0lPTlJFU1BPTlNFX0hUVFBfVkVSU0lPTlJFUVVFU1RfTElORV9NRVRIT0RSRVFVRVNUX0xJTkVfVVJJUkVRVUVTVF9MSU5FX0hUVFBfVkVSU0lPTlJFUVVFU1RfTElORV9FTkRJTkdSRVNQT05TRV9MSU5FX1NUQVRVU19DT0RFUkVTUE9OU0VfTElORV9SRUFTT05fUEhSQVNFUkVTUE9OU0VfTElORV9FTkRJTkdIRUFERVJfU1RBUlRIRUFERVJfRklFTERIRUFERVJfVkFMVUVfU1RBUlRIRUFERVJfVkFMVUVIRUFERVJfVkFMVUVfRk9MRElOR19PUl9FTkRJTkdIRUFERVJfVkFMVUVfRk9MRF9PUl9FTkRIRUFERVJfRU5ESU5HQ0hVTktfU0laRV9TVEFSVElOR19DUkNIVU5LX1NJWkVfU1RBUlRJTkdfTEZDSFVOS19TSVpFQ0hVTktfU0laRV9FWFRFTlNJT05DSFVOS19TSVpFX0VORElOR0NIVU5LRURfQk9EWV9ET05FX0NSQ0hVTktFRF9CT0RZX0RPTkVfTEZCT0RZVVBHUkFERURGQUlMVVJFRklSU1RfQk9EWV9TVEFURV9IdHRwVmVyc2lvblVOREVURVJNSU5FRF9NZXNzYWdlVHlwZVJFUVVFU1RSRVNQT05TRV9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb25faW5qZWN0RGF0YV91c2VyT25EYXRhX3NjaGVkdWxlZF9tYXliZVNjaGVkdWxlRGF0YV9IdHRwRGV0YWNoZWRJbmNvbWluZ19IdHRwUGFyc2VyX3BhcnNlckNhbGxlZF9yZXF1ZXN0UGFyc2VyX2h0dHBWZXJzaW9uSW5kZXhfbWVzc2FnZVR5cGVfc3RhdHVzQ29kZUxlbmd0aF91cmlfb3JfcmVhc29uX3BocmFzZV9oZWFkZXJGaWVsZF9oZWFkZXJWYWx1ZV9odHRwVmVyc2lvbl9jb25uZWN0aW9uVXBncmFkZV9jaHVua2VkX25vTWVzc2FnZUJvZHlfcmVtYWluaW5nQ29udGVudF9wYXVzZWRfYm9keVBhdXNlZF9ib2R5Q29udHJvbGxlcl9wYXVzZVN0YXRlQ2hhbmdlZF9yZXNldHJlcXVlc3RQYXJzZXJyZXNwb25zZVBhcnNlcl9kb1BhcnNlX2hlYWRlcnNFbmRfY3JlYXRlSW5jb21pbmdfY2xvc2VJbmNvbWluZ0RhdGEgb24gY2xvc2VkIGNvbm5lY3Rpb25EYXRhIG9uIGZhaWxlZCBjb25uZWN0aW9uSW52YWxpZCByZXF1ZXN0IG1ldGhvZEludmFsaWQgcmVzcG9uc2UgbGluZUludmFsaWQgcmVxdWVzdCBsaW5lX2V4cGVjdEludmFsaWQgcmVxdWVzdCBVUklJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyBjb2RlSW52YWxpZCByZXNwb25zZSByZWFzb24gcGhyYXNlSW52YWxpZCBoZWFkZXIgZmllbGQgbmFtZWhlYWRlckZpZWxkX2Nhc2VJbnNlbnNpdGl2ZUNvbXBhcmVpc1Jlc3BvbnNlaXNVcGdyYWRlQ29kZWlzVXBncmFkZV9leHBlY3RIZXhEaWdpdGRhdGFBdmFpbGFibGVfcmVsZWFzZUJ1ZmZlckNvbm5lY3Rpb24gY2xvc2VkIHdoaWxlIHJlY2VpdmluZyBkYXRhQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGZ1bGwgaGVhZGVyIHdhcyByZWNlaXZlZENvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSBmdWxsIGJvZHkgd2FzIHJlY2VpdmVkbWVzc2FnZVR5cGVyZWFkVW5wYXJzZWREYXRhX2lzVG9rZW5DaGFyX2lzVmFsdWVDaGFyX3Rva2VuaXplRmllbGRWYWx1ZV90b0xvd2VyQ2FzZUJ5dGV2YWwxdmFsMkZhaWxlZCB0byBwYXJzZSBIVFRQX0h0dHBTZXNzaW9uX2xhc3RTZWVuX3RpbWVvdXRDYWxsYmFja19wcmV2X3JlbW92ZUZyb21UaW1lb3V0UXVldWVfc2Vzc2lvbnNfYnVtcFRvRW5kbGFzdFNlZW5IdHRwU2Vzc2lvbiBpZDpfSHR0cFNlc3Npb25NYW5hZ2VyX3Nlc3Npb25UaW1lb3V0X3RpbWVyY3JlYXRlU2Vzc2lvbklkX2FkZFRvVGltZW91dFF1ZXVlX3N0b3BUaW1lcl9zdGFydFRpbWVyX3RpbWVyVGltZW91dEh0dHBPdmVycmlkZXNydW5XaXRoSHR0cE92ZXJyaWRlc19IdHRwT3ZlcnJpZGVzU2NvcGVfY3JlYXRlSHR0cENsaWVudFdlYlNvY2tldFN0YXR1c25vcm1hbENsb3N1cmVnb2luZ0F3YXlwcm90b2NvbEVycm9ydW5zdXBwb3J0ZWREYXRhcmVzZXJ2ZWQxMDA0bm9TdGF0dXNSZWNlaXZlZGFibm9ybWFsQ2xvc3VyZWludmFsaWRGcmFtZVBheWxvYWREYXRhcG9saWN5VmlvbGF0aW9ubWVzc2FnZVRvb0JpZ21pc3NpbmdNYW5kYXRvcnlFeHRlbnNpb25yZXNlcnZlZDEwMTVOT1JNQUxfQ0xPU1VSRVVzZSBub3JtYWxDbG9zdXJlIGluc3RlYWRHT0lOR19BV0FZVXNlIGdvaW5nQXdheSBpbnN0ZWFkUFJPVE9DT0xfRVJST1JVc2UgcHJvdG9jb2xFcnJvciBpbnN0ZWFkVU5TVVBQT1JURURfREFUQVVzZSB1bnN1cHBvcnRlZERhdGEgaW5zdGVhZFJFU0VSVkVEXzEwMDRVc2UgcmVzZXJ2ZWQxMDA0IGluc3RlYWROT19TVEFUVVNfUkVDRUlWRURVc2Ugbm9TdGF0dXNSZWNlaXZlZCBpbnN0ZWFkQUJOT1JNQUxfQ0xPU1VSRVVzZSBhYm5vcm1hbENsb3N1cmUgaW5zdGVhZElOVkFMSURfRlJBTUVfUEFZTE9BRF9EQVRBVXNlIGludmFsaWRGcmFtZVBheWxvYWREYXRhIGluc3RlYWRQT0xJQ1lfVklPTEFUSU9OVXNlIHBvbGljeVZpb2xhdGlvbiBpbnN0ZWFkTUVTU0FHRV9UT09fQklHVXNlIG1lc3NhZ2VUb29CaWcgaW5zdGVhZE1JU1NJTkdfTUFOREFUT1JZX0VYVEVOU0lPTlVzZSBtaXNzaW5nTWFuZGF0b3J5RXh0ZW5zaW9uIGluc3RlYWRSRVNFUlZFRF8xMDE1VXNlIHJlc2VydmVkMTAxNSBpbnN0ZWFkQ29tcHJlc3Npb25PcHRpb25zY29tcHJlc3Npb25EZWZhdWx0VXNlIGNvbXByZXNzaW9uRGVmYXVsdCBpbnN0ZWFkY29tcHJlc3Npb25PZmZPRkZVc2UgY29tcHJlc3Npb25PZmYgaW5zdGVhZGNsaWVudE5vQ29udGV4dFRha2VvdmVyc2VydmVyTm9Db250ZXh0VGFrZW92ZXJjbGllbnRNYXhXaW5kb3dCaXRzc2VydmVyTWF4V2luZG93Qml0c19jcmVhdGVTZXJ2ZXJSZXNwb25zZUhlYWRlcnJlcXVlc3RlZG13YnNlcnZlcl9tYXhfd2luZG93X2JpdHNJbGxlZ2FsIDAgcGFkZGluZyBvbiB2YWx1ZS47IHNlcnZlcl9tYXhfd2luZG93X2JpdHM9X2NyZWF0ZUNsaWVudFJlcXVlc3RIZWFkZXI7IGNsaWVudF9tYXhfd2luZG93X2JpdHM9OyBjbGllbnRfbWF4X3dpbmRvd19iaXRzX2NyZWF0ZUhlYWRlcnBlcm1lc3NhZ2UtZGVmbGF0ZWNsaWVudF9ub19jb250ZXh0X3Rha2VvdmVyOyBjbGllbnRfbm9fY29udGV4dF90YWtlb3ZlcnNlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyOyBzZXJ2ZXJfbm9fY29udGV4dF90YWtlb3ZlcmhlYWRlckxpc3RXZWJTb2NrZXRUcmFuc2Zvcm1lcnByb3RvY29sU2VsZWN0b3Jjb21wcmVzc2lvbmlzVXBncmFkZVJlcXVlc3RXZWJTb2NrZXRDT05ORUNUSU5HVXNlIGNvbm5lY3RpbmcgaW5zdGVhZFVzZSBvcGVuIGluc3RlYWRVc2UgY2xvc2luZyBpbnN0ZWFkcGluZ0ludGVydmFsVGhpcyBjb25zdHJ1Y3RvciB3aWxsIGJlIHJlbW92ZWQgaW4gRGFydCAyLjAuIFVzZSBgaW1wbGVtZW50c2AgaW5zdGVhZCBvZiBgZXh0ZW5kc2AgaWYgaW1wbGVtZW50aW5nIHRoaXMgYWJzdHJhY3QgY2xhc3MuZnJvbVVwZ3JhZGVkU29ja2V0c2VydmVyU2lkZVRoZSBzZXJ2ZXJTaWRlIGFyZ3VtZW50IG11c3QgYmUgcGFzc2VkIGV4cGxpY2l0bHkgdG8gV2ViU29ja2V0LmZyb21VcGdyYWRlZFNvY2tldC5yZWFkeVN0YXRlY2xvc2VDb2RlY2xvc2VSZWFzb25XZWJTb2NrZXRFeGNlcHRpb25XZWJTb2NrZXRFeGNlcHRpb246IF9XZWJTb2NrZXRNZXNzYWdlVHlwZV9XZWJTb2NrZXRPcGNvZGVDT05USU5VQVRJT05SRVNFUlZFRF8zUkVTRVJWRURfNFJFU0VSVkVEXzVSRVNFUlZFRF82UkVTRVJWRURfN0NMT1NFUElOR1BPTkdSRVNFUlZFRF9CUkVTRVJWRURfQ1JFU0VSVkVEX0RSRVNFUlZFRF9FUkVTRVJWRURfRl9FbmNvZGVkU3RyaW5nX0NvbXByZXNzaW9uTWF4V2luZG93Qml0c19XZWJTb2NrZXRQcm90b2NvbFRyYW5zZm9ybWVyTEVOX0ZJUlNUTEVOX1JFU1RQQVlMT0FERklOUlNWMVJTVjJSU1YzT1BDT0RFX2Zpbl9jb21wcmVzc2VkX29wY29kZV9tYXNrZWRfcmVtYWluaW5nTGVuQnl0ZXNfcmVtYWluaW5nTWFza2luZ0tleUJ5dGVzX3JlbWFpbmluZ1BheWxvYWRCeXRlc191bm1hc2tpbmdJbmRleF9jdXJyZW50TWVzc2FnZVR5cGVfc2VydmVyU2lkZV9tYXNraW5nQnl0ZXNfcGF5bG9hZF9kZWZsYXRlV2ViU29ja2V0IHRyYW5zZm9ybWVyIGFscmVhZHkgdXNlZC5sYXN0SW5kZXhQcm90b2NvbCBlcnJvcl9pc0NvbnRyb2xGcmFtZV9sZW5ndGhEb25lX21hc2tEb25lcGF5bG9hZExlbmd0aF91bm1hc2tfY29udHJvbEZyYW1lRW5kX21lc3NhZ2VGcmFtZUVuZGJsb2NrQ291bnRibG9ja01hc2tibG9ja0J1ZmZlclJlY2VpdmVkIG1hc2tlZCBmcmFtZSBmcm9tIHNlcnZlclJlY2VpdmVkIHVubWFza2VkIGZyYW1lIGZyb20gY2xpZW50X3N0YXJ0UGF5bG9hZF9wcmVwYXJlRm9yTmV4dEZyYW1lcHJvY2Vzc0luY29taW5nTWVzc2FnZV9XZWJTb2NrZXRQaW5nX1dlYlNvY2tldFBvbmdfV2ViU29ja2V0VHJhbnNmb3JtZXJJbXBsX3Byb3RvY29sU2VsZWN0b3JfY29tcHJlc3Npb25fdXBncmFkZUludmFsaWQgV2ViU29ja2V0IHVwZ3JhZGUgcmVxdWVzdFVwZ3JhZGV3ZWJzb2NrZXRTZWMtV2ViU29ja2V0LUtleTI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMVNlYy1XZWJTb2NrZXQtQWNjZXB0U2VjLVdlYlNvY2tldC1Qcm90b2NvbGRlZmxhdGVTZWxlY3RlZCBwcm90b2NvbCBpcyBub3QgaW4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3RvY29sc19uZWdvdGlhdGVDb21wcmVzc2lvbmV4dGVuc2lvbkhlYWRlclNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uc2h2X2lzVXBncmFkZVJlcXVlc3RTZWMtV2ViU29ja2V0LVZlcnNpb25fV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGVfZW5zdXJlRGVjb2Rlcl9lbnN1cmVFbmNvZGVycHJvY2Vzc091dGdvaW5nTWVzc2FnZUxpc3QgZWxlbWVudCBpcyBub3QgYSBieXRlIHZhbHVlICh2YWx1ZSAgYXQgaW5kZXggX1dlYlNvY2tldE91dGdvaW5nVHJhbnNmb3JtZXJfZGVmbGF0ZUhlbHBlcldlYlNvY2tldCB0cmFuc2Zvcm1lciBhbHJlYWR5IHVzZWRhZGRGcmFtZV9vdXRDbG9zZUNvZGVfb3V0Q2xvc2VSZWFzb25jcmVhdGVGcmFtZWRhdGFMZW5ndGhoZWFkZXJTaXplaG9jbGVuZ3RoQnl0ZXNtYXNrQnl0ZXNfV2ViU29ja2V0Q29uc3VtZXJfaXNzdWVkUGF1c2VfZW5zdXJlQ29udHJvbGxlcl9kb25lY2xvc2VTb2NrZXRfX1dlYlNvY2tldEltcGwmU3RyZWFtJl9TZXJ2aWNlT2JqZWN0X1dlYlNvY2tldEltcGxfd2ViU29ja2V0c1BFUl9NRVNTQUdFX0RFRkxBVEVfcmVhZHlTdGF0ZV93cml0ZUNsb3NlZF9jbG9zZUNvZGVfY2xvc2VSZWFzb25fcGluZ0ludGVydmFsX3BpbmdUaW1lcl9jbG9zZVRpbWVyX2Zyb21Tb2NrZXR3c3dzc1Vuc3VwcG9ydGVkIFVSTCBzY2hlbWUgJ25vbmNlRGF0YUNhY2hlLUNvbnRyb2xuby1jYWNoZUNvbm5lY3Rpb24gdG8gJycgd2FzIG5vdCB1cGdyYWRlZCB0byB3ZWJzb2NrZXRSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gYSAnU2VjLVdlYlNvY2tldC1BY2NlcHQnIGhlYWRlcmV4cGVjdGVkQWNjZXB0cmVjZWl2ZWRBY2NlcHRSZXNwb25zZSBoZWFkZXIgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyBpcyB0aGUgd3JvbmcgbGVuZ3RoQmFkIHJlc3BvbnNlICdTZWMtV2ViU29ja2V0LUFjY2VwdCcgaGVhZGVybmVnb3RpYXRlQ2xpZW50Q29tcHJlc3Npb25nZXRXaW5kb3dCaXRzY2xpZW50X21heF93aW5kb3dfYml0c1Jlc2VydmVkIHN0YXR1cyBjb2RlIGlvL3dlYnNvY2tldHNfaXNSZXNlcnZlZFN0YXR1c0NvZGVfTUFTS184X01BU0tfMzJfQklUU19QRVJfQllURV9CWVRFU19QRVJfV09SRF9PVVRHT0lOR19CVUZGRVJfU0laRV9EQVJUX1NFU1NJT05fSURfaHR0cE92ZXJyaWRlc1Rva2VuX3dlYlNvY2tldEdVSURfY2xpZW50Tm9Db250ZXh0VGFrZW92ZXJfc2VydmVyTm9Db250ZXh0VGFrZW92ZXJfY2xpZW50TWF4V2luZG93Qml0c19zZXJ2ZXJNYXhXaW5kb3dCaXRzX2dldEh0dHBWZXJzaW9uRGFydC8gKGRhcnQ6aW8pc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2Jpbi9kYXJ0MmpzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kYXJ0MmpzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydHBhY2thZ2U6Y29tcGlsZXIvY29tcGlsZXJfbmV3LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tYW5kbGluZV9vcHRpb25zLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9maWxlbmFtZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL29wdGlvbnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NvdXJjZV9maWxlX3Byb3ZpZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL2NvbW1hbmRfbGluZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdXRpbC91dGlsLmRhcnRwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydHBhY2thZ2U6a2VybmVsL2FzdC5kYXJ0cGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2NvbXBpbGVyX29wdGlvbnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvZXhwZXJpbWVudGFsX2ZsYWdzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9maWxlX3N5c3RlbS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUva2VybmVsX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9iYXNlL2xpYnJhcmllc19zcGVjaWZpY2F0aW9uLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvY29tcGlsZXJfY29udGV4dC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2Zhc3RhX2NvZGVzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2V2ZXJpdHkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9rZXJuZWxfZ2VuZXJhdG9yX2ltcGwuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9jb21waWxlcl9zdGF0ZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS91dGlsLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9zdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2NvbXB1dGVfcGxhdGZvcm1fYmluYXJpZXNfbG9jYXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9vcGVyYXRvci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9hc3luY19tb2RpZmllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvY2hhcmFjdGVycy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3V0aWwvbGluay5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3V0aWwvbGlua19pbXBsZW1lbnRhdGlvbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3V0aWwvcmVsYXRpdml6ZS5kYXJ0cGFja2FnZTpjb21waWxlci9jb21waWxlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvYXBpaW1wbC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29sb3JzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9zb3VyY2VfZmlsZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9lbXB0eXNldC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9tYXBsZXQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvc2V0bGV0LmRhcnRwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0cGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0cGFja2FnZTprZXJuZWwvdGV4dC9hc3RfdG9fdGV4dC5kYXJ0cGFja2FnZTprZXJuZWwvdmlzaXRvci5kYXJ0cGFja2FnZTprZXJuZWwvY2Fub25pY2FsX25hbWUuZGFydHBhY2thZ2U6a2VybmVsL3RyYW5zZm9ybWF0aW9ucy9mbGFncy5kYXJ0cGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnRwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnRwYWNrYWdlOmtlcm5lbC9jb3FfYW5ub3QuZGFydHBhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0cGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0cGFja2FnZTpwYWNrYWdlX2NvbmZpZy9wYWNrYWdlcy5kYXJ0cGFja2FnZTpwYWNrYWdlX2NvbmZpZy9wYWNrYWdlc19maWxlLmRhcnRwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3NyYy9wYWNrYWdlc19pbXBsLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS90ZXJtaW5hbF9jb2xvcl9zdXBwb3J0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvY29tbWFuZF9saW5lX3JlcG9ydGluZy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL21lc3NhZ2VzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcHJvYmxlbXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90aWNrZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS91cmlfdHJhbnNsYXRvci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3Jlc29sdmVfaW5wdXRfdXJpLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci90b2tlbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL3NjYW5uZXIvdG9rZW4uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb2xvcnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdHlwZV9sYWJlbGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9hcGkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jcmFzaC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF90YXJnZXQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX3RhcmdldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC91dGlscy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC92ZXJpZmllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2xvYWRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvZnJvbnRfZW5kLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9hYnN0cmFjdF9zY2FubmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9zdHJpbmdfc2Nhbm5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvdXRmOF9ieXRlc19zY2FubmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9yZWNvdmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9lcnJvcl90b2tlbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvdG9rZW5fY29uc3RhbnRzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2luY3JlbWVudGFsX2NvbXBpbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9vbGRfdG9fbmV3X2FwaS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL3Rhc2tzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbXBpbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9tZXNzYWdlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZW52aXJvbm1lbnQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL2xvY2F0aW9uX3Byb3ZpZGVyLmRhcnRwYWNrYWdlOmtlcm5lbC9iaW5hcnkvdGFnLmRhcnRwYWNrYWdlOmtlcm5lbC9pbXBvcnRfdGFibGUuZGFydHBhY2thZ2U6a2VybmVsL3NyYy9oaWVyYXJjaHlfYmFzZWRfdHlwZV9lbnZpcm9ubWVudC5kYXJ0cGFja2FnZTprZXJuZWwvc3JjL2hlYXAuZGFydHBhY2thZ2U6a2VybmVsL2xpYnJhcnlfaW5kZXguZGFydHBhY2thZ2U6Y2hhcmNvZGUvYXNjaWkuZGFydHBhY2thZ2U6cGFja2FnZV9jb25maWcvc3JjL3V0aWwuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3N0cmluZ19jYW5vbmljYWxpemVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9zeW50YWN0aWNfZW50aXR5LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvc2Nhbm5lci9zdHJpbmdfdXRpbGl0aWVzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYmxhY2tsaXN0ZWRfY2xhc3Nlcy5kYXJ0cGFja2FnZTprZXJuZWwvY2xvbmUuZGFydHBhY2thZ2U6a2VybmVsL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdGFyZ2V0X2ltcGxlbWVudGF0aW9uLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF9sb2FkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY29wZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9jb25zdGFudHMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvbWV0YWRhdGFfY29sbGVjdG9yLmRhcnRwYWNrYWdlOmtlcm5lbC9iaW5hcnkvbGltaXRlZF9hc3RfdG9fYmluYXJ5LmRhcnRwYWNrYWdlOmtlcm5lbC92ZXJpZmllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9zdW1tYXJ5X2dlbmVyYXRvci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIva2V5d29yZF9zdGF0ZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbnN0YW50X2NvbnRleHQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9tb2RpZmllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL25hbWVzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcXVvdGUuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvc2NvcGVfbGlzdGVuZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2UvdmFsdWVfa2luZHMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9wcm9tb3Rpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvY29sbGVjdGlvbnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvY29uc3RuZXNzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9mb3Jlc3QuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvaW1wbGljaXRfdHlwZV9hcmd1bWVudC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2FsZ29yaXRobXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FzdF9hcGkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2luY3JlbWVudGFsX2tlcm5lbF9nZW5lcmF0b3IuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL21lbW9yeV9maWxlX3N5c3RlbS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXJfZ3JhcGguZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21iaW5hdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9lcnJvcl9yZXBvcnRlcl9maWxlX2NvcGllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2h5YnJpZF9maWxlX3N5c3RlbS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2xpYnJhcnlfZ3JhcGguZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL251bGxfY29tcGlsZXJfb3V0cHV0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9pbnZhcmlhbnQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2RpYWdub3N0aWNzL3NvdXJjZV9zcGFuLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9zcGFubmFibGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvaGVscGVycy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvYmFja2VuZF9zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL2NvZGVnZW4uZGFydHBhY2thZ2U6anNfYXN0L2pzX2FzdC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL25hbWVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vd29yay5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uX2VsZW1lbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kZWZlcnJlZF9sb2FkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9jb2RlX2xvY2F0aW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kdW1wX2luZm8uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL2VudGl0aWVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbnF1ZXVlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9mcm9udGVuZF9zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90cml2aWFsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvbWFza3MuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9qc19zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2tlcm5lbF9zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2xvYWRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi90YXNrLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL3N0cmF0ZWdpZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9ub2Rlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2Uvc2VsZWN0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvcmVzb2x1dGlvbl93b3JsZF9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3dvcmxkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9nZW5lcmF0ZWQvc2hhcmVkX21lc3NhZ2VzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL2NvZGVfb3V0cHV0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvc2Nhbm5lci9pbnRlcm5lci5kYXJ0cGFja2FnZTprZXJuZWwvdXRpbC9ncmFwaC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jbGFzc19oaWVyYXJjaHlfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3N0YW5kYXJkX2JvdW5kcy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9pbXBsaWNpdF9maWVsZF90eXBlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF92YXJpYWJsZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2xvYWRfbGlicmFyeV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3VubGlua2VkX3Njb3BlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcmV3cml0ZV9zZXZlcml0eS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3RhcmdldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF9jbGFzc19idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2J1aWxkZXJfY29tcHV0ZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9iYXNlL3Jlc29sdmVfcmVsYXRpdmVfdXJpLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9leHRlbnNpb25fYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbmZpZ3VyYXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9leHBvcnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pbXBvcnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvc291cmNlX2V4dGVuc2lvbl9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdHJhbnNmb3JtX2NvbGxlY3Rpb25zLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3RyYW5zZm9ybV9zZXRfbGl0ZXJhbHMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvY2xhc3NfbWVtYmVyX3BhcnNlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9kaWV0X2xpc3RlbmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL2RpZXRfcGFyc2VyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL291dGxpbmVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL2luZmVyZW5jZV9oZWxwZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2luZmVyZW5jZV9lbmdpbmUuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYV9lbGltaW5hdGlvbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hX2Vudmlyb25tZW50LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvaWRlbnRpZmllcnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2J1aWx0aW5fdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9jbGFzc19idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9jb25zdHJ1Y3Rvcl9yZWZlcmVuY2VfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZGVjbGFyYXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2R5bmFtaWNfdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9lbnVtX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2ZpZWxkX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2Zvcm1hbF9wYXJhbWV0ZXJfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvcHJvY2VkdXJlX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2Z1bmN0aW9uX3R5cGVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvaW52YWxpZF90eXBlX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2xpYnJhcnlfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbWVtYmVyX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL21ldGFkYXRhX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL21peGluX2FwcGxpY2F0aW9uX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL21vZGlmaWVyX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL25hbWVfaXRlcmF0b3IuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL25hbWVkX3R5cGVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvcHJlZml4X2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci90eXBlX2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfdmFyaWFibGVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdW5yZXNvbHZlZF90eXBlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci92b2lkX3R5cGVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9saXN0ZW5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9wYXJzZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvcGFyc2VyX2Vycm9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2Fzc2VydC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9mb3JtYWxfcGFyYW1ldGVyX2tpbmQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvaWRlbnRpZmllcl9jb250ZXh0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2NsYXNzX2tpbmQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbWVtYmVyX2tpbmQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdG9wX2xldmVsX3BhcnNlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci91dGlsLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3N0YWNrX2xpc3RlbmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9jb25zdHJhaW50X2dhdGhlcmVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL3RyYWNlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL2RlYnVnX2NvbGxlY3Rpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvZXhwZW5zaXZlX21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaGVscGVycy9leHBlbnNpdmVfc2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL3N0YXRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL3RyYWNrX21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9lbnF1ZXVlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3NhLmRhcnRwYWNrYWdlOmpzX2FzdC9zcmMvcHJlY2VkZW5jZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29uc3RhbnRzL3ZhbHVlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvdHlwZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzL2pzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL25hbWVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9uYXRpdmUvYmVoYXZpb3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2ZlYXR1cmUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3VzZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9lbnVtc2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9uYW1lcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2xvY2Fscy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2RhcnQyanNfdGFyZ2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VsZW1lbnRzLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9pbmZvLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9qc29uX2luZm9fY29kZWMuZGFydHBhY2thZ2U6ZGFydDJqc19pbmZvL2JpbmFyeV9zZXJpYWxpemF0aW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL3NpbmtfYWRhcHRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zdGF0aWNfdHlwZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlX2dyYXBoX2luZmVycmVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvY29uc3RhbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvaW5mZXJyZXJfZW5naW5lLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9wb3NpdGlvbl9pbmZvcm1hdGlvbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvZWxlbWVudHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2NsYXNzX3NldC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdHJhY2VyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2NoZWNrZWRfbW9kZV9oZWxwZXJzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL2tlcm5lbF9zb3VyY2VfaW5mb3JtYXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzL2pzX3NvdXJjZV9tYXBwaW5nLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2JhY2tlbmRfaW1wYWN0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2NvZGVnZW5fbGlzdGVuZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2ltcGFjdF90cmFuc2Zvcm1lci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2pzX2VtaXR0ZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL25hdGl2ZS9lbnF1ZXVlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvYnVpbGRlcl9rZXJuZWwuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS90eXBlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvY2xvc3VyZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvZW52LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9lbGVtZW50X21hcF9pbXBsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9qc193b3JsZC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvanNfd29ybGRfYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL2JhY2tlbmRfYXBpLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vcmVzb2x1dGlvbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvYW5ub3RhdGlvbnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2Nsb3N1cmUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2ltcGFjdC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvaW1wYWN0X2RhdGEuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL21vZHVsYXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3Njb3BlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2JhY2tlbmRfdXNhZ2UuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvcmVzb2x1dGlvbl9saXN0ZW5lci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL25hdGl2ZS9yZXNvbHZlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2RlZmVycmVkX2xvYWQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9lbGVtZW50X21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2VsZW1lbnRfbWFwX2ltcGwuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9mcm9udF9lbmRfYWRhcHRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY2xvc3VyZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvanVtcHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvaW52b2tlX2R5bmFtaWNfc3BlY2lhbGl6ZXJzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdmFsaWRhdGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvb3BlcmF0b3JzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvaW52b2NhdGlvbl9taXJyb3JfY29uc3RhbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VybmVsX3dvcmxkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3NvcnRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29uc3RhbnRzL2V2YWx1YXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvZm9yd2FyZGluZ19ub2RlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2Vycm9yX2RlbGVnYXRpb25fbGlzdGVuZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pZ25vcmVkX3BhcnNlcl9lcnJvcnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZGlyZWN0aXZlX2NvbnRleHQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZm9yd2FyZGluZ19saXN0ZW5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9saXRlcmFsX2VudHJ5X2luZm8uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbG9vcF9zdGF0ZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9tb2RpZmllcl9jb250ZXh0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3JlY292ZXJ5X2xpc3RlbmVycy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci90b2tlbl9zdHJlYW1fcmV3cml0ZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdHlwZV9pbmZvLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2lkZW50aWZpZXJfY29udGV4dF9pbXBsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3Byb2dyYW1fYnVpbGRlci9wcm9ncmFtX2J1aWxkZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvc3RhcnR1cF9lbWl0dGVyL2VtaXR0ZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbWV0YWRhdGFfY29sbGVjdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL21vZGVsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL25hdGl2ZV9lbWl0dGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3R5cGVfdGVzdF9yZWdpc3RyeS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvaW5kZXhlZC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvY29uc3RhbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zdGF0aWNfdHlwZV9iYXNlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qcy9yZXdyaXRlX2FzeW5jLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvY29kZWdlbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL29wdGltaXplLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qcy9qc19kZWJ1Zy5kYXJ0cGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9lbWJlZGRlZF9uYW1lcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvbmF0aXZlL2pzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9ydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9jb2xsZWN0aW9uLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvdXRpbC5kYXJ0cGFja2FnZTpkYXJ0MmpzX2luZm8vc3JjL2JpbmFyeS9zaW5rLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvYmluYXJ5L3NvdXJjZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvc2NvcGVfdmlzaXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvdXRpbC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvc3RhdGljX3R5cGVfY2FjaGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfbm9kZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3N0YXRpY190eXBlX3Byb3ZpZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9idWlsZGVyX2tlcm5lbC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvY2xvc3VyZV90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2RlYnVnLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9sb2NhbHNfaGFuZGxlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvbGlzdF90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL21hcF90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3NldF90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfZHVtcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZV9zeXN0ZW0uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9zc2FfdHJhY2VyLmRhcnRwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL3JlY2lwZV9zeW50YXguZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvY2xhc3Nfc3R1Yl9nZW5lcmF0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvaW5zdGFudGlhdGlvbl9zdHViX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9pbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9tYWluX2NhbGxfc3R1Yl9nZW5lcmF0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbmF0aXZlX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9wYXJhbWV0ZXJfc3R1Yl9nZW5lcmF0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvcnVudGltZV90eXBlX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvdGFyZ2V0X2NoZWNrcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2p1bXBfaGFuZGxlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2tlcm5lbF9zdHJpbmdfYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2xvY2Fsc19oYW5kbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvbG9vcF9oYW5kbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3NhX2JyYW5jaF9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3dpdGNoX2NvbnRpbnVlX2FuYWx5c2lzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9lbGVtZW50X21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvb3JkZXJlZF90eXBlc2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21waWxlX3RpbWVfY29uc3RhbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9jYWNoZWRfc3RhdGljX3R5cGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2RlYnVnLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci90eXBlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvdmlzaXRvcnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9lbnYuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2Z1bmN0aW9uX3NldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VybmVsX2ltcGFjdC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2xvZ2dpbmcuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbGl0ZXJhbF9lbnRyeV9pbmZvX2ltcGwuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdHlwZV9pbmZvX2ltcGwuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY29uc3RhbnRfZW1pdHRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9zdGFydHVwX2VtaXR0ZXIvbW9kZWxfZW1pdHRlci5kYXJ0cGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9hc3luY19hd2FpdF9lcnJvcl9jb2Rlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2NvZGVnZW5faGVscGVycy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL3ZhcmlhYmxlX2FsbG9jYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9zcGVjaWFsaXplZF9jaGVja3MuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9pbnRlcmNlcHRvcl9zaW1wbGlmaWVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdHlwZXNfcHJvcGFnYXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS92YWx1ZV9yYW5nZV9hbmFseXplci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL3ZhbHVlX3NldC5kYXJ0cGFja2FnZTpqc19hc3Qvc3JjL2NoYXJhY3RlcnMuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvYWxnb3JpdGhtcy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jYW5vbmljYWxpemVkX21hcC5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9pdGVyYWJsZS5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9saXN0LmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX21hcC5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21wYXJhdG9ycy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lcXVhbGl0eS5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lcXVhbGl0eV9tYXAuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvZXF1YWxpdHlfc2V0LmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2Z1bmN0aW9ucy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9pdGVyYWJsZV96aXAuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvcHJpb3JpdHlfcXVldWUuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvcXVldWVfbGlzdC5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy91bmlvbl9zZXQuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3VuaW9uX3NldF9jb250cm9sbGVyLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3dyYXBwZXJzLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvZ3JhcGguZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL25vZGVfdHJhY2VyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2pzX2ludGVyb3BfYW5hbHlzaXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3Jlc29sdXRpb24vcmVnaXN0cnkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2ZlYXR1cmVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oYXNoL3NoYTEuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL3NvdXJjZV9tYXBfYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9qc19iYWNrZW5kLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2NvbnN0YW50X29yZGVyaW5nLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2hlYWRlcnMuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdXRpbHMuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvZW1wdHlfdW5tb2RpZmlhYmxlX3NldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvaWRfdGVzdGluZy5kYXJ0cGFja2FnZTpjcnlwdG8vY3J5cHRvLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvdGVzdGluZy9hbm5vdGF0ZWRfY29kZV9oZWxwZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2lkLmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvZGlnZXN0LmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvaGFzaC5kYXJ0cGFja2FnZTpjcnlwdG8vc3JjL2htYWMuZGFydHBhY2thZ2U6Y3J5cHRvL3NyYy9tZDUuZGFydHBhY2thZ2U6Y3J5cHRvL3NyYy9zaGExLmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvc2hhMjU2LmRhcnRwYWNrYWdlOmNvbnZlcnQvY29udmVydC5kYXJ0cGFja2FnZTpjcnlwdG8vc3JjL2RpZ2VzdF9zaW5rLmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvaGFzaF9zaW5rLmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvdXRpbHMuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvYWNjdW11bGF0b3Jfc2luay5kYXJ0cGFja2FnZTpjb252ZXJ0L3NyYy9ieXRlX2FjY3VtdWxhdG9yX3NpbmsuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvaGV4LmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL3BlcmNlbnQuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvc3RyaW5nX2FjY3VtdWxhdG9yX3NpbmsuZGFydHBhY2thZ2U6dHlwZWRfZGF0YS90eXBlZF9kYXRhLmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL2hleC9lbmNvZGVyLmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL2hleC9kZWNvZGVyLmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL3BlcmNlbnQvZW5jb2Rlci5kYXJ0cGFja2FnZTpjb252ZXJ0L3NyYy9w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jM8EiTYIkY0BYQMCYAPAAP5+YAPAAP5+YAORmAWRj4z1kZCBnpGRjNKRknmRk4GjBIk4BIk5CpCICJGvAWEDAmADwAD+fmADwAD+fmADkZgDkbGNI5GyjSaRs40pBIk7BIk8B2ADwAD+fgGNUwiRjQFhAwJgA8AA/n5gA8AA/n5gA5GYBZGPjVCRkIGekZGNLJGSjVaRk4GjBIk+BIk/CpCJCJGvAWEDAWADwAD+fmADkZgDkbGNjJGyjY+Rs42SBIlBCJGNAWEDAWADwAD+fmADkZgFkY+Ns5GQgZ6RkY2VkZKNVpGTgaMEiUMKkIoIka8BYQMBYAPAAP5+YAORmAORsY3ckbKNj5Gzjd8EiUUIkY0BYQMBYAPAAP5+YAORmAWRj44AkZCBnpGRjeKRko1WkZOBowSJRwSJSASJSQI3NAiRowAHkaWOKZGmjiyRj44vkZCOMpGReZGSeZGTgaMEiUwKkIsIka8BYQMBYAPAAP5+YAORmAORsY5UkbJ5kbOOVwSJTgiRjQFhAwFgA8AA/n5gA5GYBZGPjneRkIGekZGOWpGSiuKRk4GjBIlQBIlRCpCMCJGvAWEDAWADnwBgA5GYA5GxjqCRso6jkbOOpgSJUwSJVAdgA8AA/n4BjsgIkY0BYQMBYAOfAGADkZgFkY+OxZGQgZ6RkY6pkZKOy5GTgaMEiVYKkI0Ika8BYQMBYAOfAGADkZgDkbGO+ZGyeZGzjvwEiVgEiVkHYAPAAP5+AY8dCJGNAWEDAWADnwBgA5GYBZGPjxqRkIGekZGO/5GSjyCRk4GjBIlbBIlcCJGjAAeRpY9OkaZ5kY+PUZGQgZ6RkXmRknmRk4GjBIlfBIlgCJGjAAeRpY9ykaZ5kY+PdZGQgZ6RkXmRknmRk4ZnBIljCpCOCJGvAWEDAWADwAD+fmADkZgDkbGPlpGyeZGzj5kEiWUIkY0BYQMBYAPAAP5+YAORmAWRj4+5kZCBnpGRj5yRknmRk4ZnBIlnBIloBIlpB2ADwAD+fgGP5wiRowAHkaWP4ZGmeZGPj+SRkIGekZF5kZKP6pGTgaMEiWwEiW0EiW4HYAPAAP5+AZAZCJGjAAeRpZATkaZ5kY+QFpGQgZ6RkXmRkpAckZOBowSJcQiRjQFhAwFgA8AA/n5gA5GYBZGPkEWRkIGekZGHbJGSeZGTgaMEiXMEiXQIkaMAB5GlkG2RpnmRj5BwkZCBnpGReZGSeZGTgaMEiXcEiXgEiXkIkaMAB5GlkJGRppCUkY+Ql5GQgZ6RkXmRknmRk4GjBIl+BIl/CpCQCJGvAWEDAWADwAD+fmADkZgDkbGQuZGykLyRs5C/BImBBImCB2ADwAD+fgGQ4wiRjQFhAwFgA8AA/n5gA5GYBZGPkOCRkIGekZGQwpGSkOaRk4GjBImEBImFCpCRCJGvAWEDAWADwAD+fmADkZgDkbGRFpGykRmRs5EcBImHBImIB2ADwAD+fgGRQAiRjQFhAwFgA8AA/n5gA5GYBZGPkT2RkIGekZGRH5GSkUORk4GjBImKCpCSCJGvAWEDAWADwAD+fmADkZgDkbGRc5GykLyRs5F2BImMCJGNAWEDAWADwAD+fmADkZgFkY+Rl5GQgZ6RkZF5kZKQ5pGTgaMEiY4EiY8HYAPAAP5+AZHDCJGNAWEDAmADwAD+/2ADwAD+fmADkZgFkY+RwJGQgZ6RkYfhkZKRxpGTgaMEiZEKkJQIka8BYQMBYAOfAGADkZgDkbGR/JGyeZGzkf8EiZMEiZQHYAPAAP5+AZIgCJGNAWEDAWADnwBgA5GYBZGPkh2RkIGekZGSApGSkiORk4GjBImWBImXCpCVCJGvAWEDAWADnwBgA5GYA5GxklGRspJUkbOSVwSJmQSJmgdgA8AA/n4BknkIkY0BYQMBYAOfAGADkZgFkY+SdpGQgZ6RkZJakZKSfJGTgaMEiZwEiZ0EiZ4HYAPAAP5+AZKwCJGjAAeRpZKqkaZ5kY+SrZGQgZ6RkXmRkpKzkZOBowSJoQSJogSJowiRowAHkaWS3JGmkt+Rj5LikZCBnpGReZGSkrORk4GjBImmBImnBImoAjdUCJGjAAeRpZMFkaaTCJGPkwuRkJMOkZF5kZJ5kZOBowSJqwI3UwiRowAHkaWTBZGmkwiRj5MwkZCTM5GReZGSeZGTgaMEia4Eia8EibACNzUIkaMAB5Glk1WRppNYkY+TW5GQk16RkXmRknmRk4GjBImzBIm0BIm1Ajc2CJGjAAeRpZOAkaaTg5GPk4aRkJOJkZF5kZJ5kZOBowSJuASJuQqQlgiRrwFhAwJgA8AA/n5gA8AA/n5gA5GYA5Gxk6uRspOukbOTsQSJuwSJvAdgA8AA/n4Bk9sIkY0BYQMCYAPAAP5+YAPAAP5+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YAORmAWRj5rxkZCBnpGRmtKRknmRk4GjBIo3CpCnCJGvAWEDAmADwAD+fmADiaZgA5GYA5GxmxuRsnmRs5seBIo5BIo6B2ADwAD+fgGbRQiRjQFhAwJgA8AA/n5gA4mmYAORmAWRj5tCkZCBnpGRmyGRkptIkZOBowSKPAqQqAiRrwFhAwJgA8AA/n5gA4mmYAORmAORsZt8kbJ5kbObfwSKPgiRjQFhAwJgA8AA/n5gA4mmYAORmAWRj5ujkZCBnpGRm4KRkpmtkZOBowSKQAqQqQiRrwFhAwFgA8AA/n5gA5GYA5Gxm9CRsnmRs5vTBIpCBIpDB2ADwAD+fgGb9giRjQFhAwFgA8AA/n5gA5GYBZGPm/ORkIGekZGb1pGSm/mRk4GjBIpFCpCqCJGvAWEDAWADiaZgA5GYA5GxnCmRsnmRs5wsBIpHBIpIB2ADwAD+fgGcTQiRjQFhAwFgA4mmYAORmAWRj5xKkZCBnpGRnC+RkpxQkZOBowSKSgqQqwiRrwFhAwFgA4mmYAORmAORsZx+kbJ5kbOcgQSKTAiRjQFhAwFgA4mmYAORmAWRj5yfkZCBnpGRnISRkpmtkZOBowSKTgqQrAiRrwFhAwNgA4mmYAOI6WADiOlgA5GYA5GxnMaRsnmRs5zJBIpQCJGNAWEDA2ADiaZgA4jpYAOI6WADkZgFkY+c75GQgZ6RkZzMkZJ5kZOBowSKUgqQrQiRrwFhAwFgA4mmYAORmAORsZ0dkbJ5kbOdIASKVASKVQdgA8AA/n4BnUEIkY0BYQMBYAOJpmADkZgFkY+dPpGQgZ6RkZ0jkZKdRJGTgaMEilcKkK4Ika8BYQMDYAPAAP5+YAPAAP5+YAPAAP5+YAORmAORsZ1ykbJ5kbOddQSKWQiRjQFhAwNgA8AA/n5gA8AA/n5gA8AA/n5gA5GYBZGPnaGRkIGekZGdeJGSeZGTgaMEilsKkK8Ika8BYQMBYAPAAP5+YAORmAORsZ3VkbJ5kbOd2ASKXQSKXgdgA8AA/n4BnfsIkY0BYQMBYAPAAP5+YAORmAWRj534kZCBnpGRnduRkp3+kZOBowSKYAqQsAiRrwFhAwFgA8AA/n5gA5GYA5Gxni6RsnmRs54xBIpiBIpjB2ADwAD+fgGeVAiRjQFhAwFgA8AA/n5gA5GYBZGPnlGRkIGekZGeNJGSnleRk4Gj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eZGzrHwEi2IEi2MHYAPAAP5+AayfCJGNAWEDAWADwAD+fmADkZgFkY+snJGQgZ6Rkax/kZKsopGTiPcEi2UKkM0Ika8BYQMBYAPAAP5+YAORmAORsazSkbJ5kbOs1QSLZwiRjQFhAwFgA8AA/n5gA5GYBZGPrPWRkIGekZGs2JGSeZGThmcEi2kEi2oKkM4Ika8BYQMBYAOfAGADkZgDkbGtHZGyrSCRs60jBItsAjdGCJGNAWEDAWADnwBgA5GYBZGPrUKRkK1FkZGtJpGSeZGTgaMEi24KkM8Ika8BYQMBYAPAAP5+YAORmAORsa1rkbJ5kbOtbgSLcASLcQdgA8AA/n4BrZEIkY0BYQMBYAPAAP5+YAORmAWRj62OkZCBnpGRrXGRkq2UkZOBowSLcwqQ0AiRrwFhAwFgA8AA/n5gA5GYA5GxrcSRsnmRs63HBIt1CJGNAWEDAWADwAD+fmADkZgFkY+t55GQgZ6Rka3KkZJ5kZOGZwSLdwqQ0QiRrwFhAwFgA8AA/n5gA5GYA5Gxrg+RsnmRs64SBIt5BIt6B2ADwAD+fgGuNQiRjQFhAwFgA8AA/n5gA5GYBZGPrjKRkIGekZGuFZGSrjiRk4GjBIt8CpDSCJGvAWEDAWADwAD+fmADkZgDkbGuaJGyeZGzrmsEi34IkY0BYQMBYAPAAP5+YAORmAWRj66LkZCBnpGRrm6RkqkikZOBowSLgAqQ0wiRrwFhAwFgA8AA/n5gA5GYA5GxrrSRsnmRs663BIuCCJGNAWEDAWADwAD+fmADkZgFkY+u15GQgZ6Rka66kZJ5kZOGZwSLhASLhQSLhgSLhwdgA8AA/n4BrwgIkaMAB5Glrv+Rpq8CkY+vBZGQgZ6RkXmRkq8LkZOBowSLigSLiwSLjAiRowAHkaWvNZGmrziRj687kZCBnpGReZGSrwuRk4GjBIuPBIuQCJGjAAeRpa9ekaZ5kY+vYZGQgZ6RkXmRknmRk4GjBIuTCpDUCJGvAWEDAWADwAD+fmADkZgDkbGvgpGyeZGzr4UEi5UEi5YHYAPAAP5+Aa+oCJGNAWEDAWADwAD+fmADkZgFkY+vpZGQgZ6Rka+IkZKvq5GTgaMEi5gEi5kEi5oHYAPAAP5+Aa/hCJGjAAeRpa/bkaZ5kY+v3pGQgZ6RkXmRkq/kkZOBowSLnQSLngSLnwI3SgiR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A5Gxuo6RsnmRs7qRBIx2CJGNAWEDAmADiOlgA4jpYAORmAWRj7qzkZCBnpGRupSRknmRk4GjBIx4CpDoCJGvAWEDAWADwAD+fmADkZgDkbG63ZGyeZGzuuAEjHoIkY0BYQMBYAPAAP5+YAORmAWRj7sAkZCBnpGRuuORknmRk4GjBIx8CpDpCJGvAWEDAWADwAD+fmADkZgDkbG7KJGyeZGzuysEjH4IkY0BYQMBYAPAAP5+YAORmAWRj7tLkZCBnpGRuy6RknmRk4GjBIyACpDqCJGvAWEDAWADwAD+fmADkZgDkbG7c5GyeZGzu3YEjIIIkY0BYQMBYAPAAP5+YAORmAWRj7uWkZCBnpGRu3mRknmRk4GjBIyECpDrCJGvAWEDAWADwAD+fmADkZgDkbG7vpGyeZGzu8EEjIYIkY0BYQMBYAPAAP5+YAORmAWRj7vhkZCBnpGRu8SRknmRk4GjBIyICpDsCJGvAWEDAWADwAD+fmADkZgDkbG8CZGyeZGzvAwEjIoIkY0BYQMBYAPAAP5+YAORmAWRj7wskZCBnpGRvA+RknmRk4GjBIyMCpDtCJGvAWEDAWADwAD+fmADkZgDkbG8VJGyeZGzvFcEjI4IkY0BYQMBYAPAAP5+YAORmAWRj7x3kZCBnpGRvFqRknmRk4GjBIyQCpDuCJGvAWEDAWADiOlgA5GYA5GxvJ+RsnmRs7yiBIySCJGNAWEDAWADiOlgA5GYBZGPvMCRkIGekZG8pZGSeZGTgaMEjJQKkO8Ika8BYQMDYAOI6WADiOlgA4jpYAORmAORsbzmkbJ5kbO86QSMlgiRjQFhAwNgA4jpYAOI6WADiOlgA5GYBZGPvQ+RkIGekZG87JGSeZGTgaMEjJgKkPAIka8BYQMCYAPAAP5+YAOI6WADkZgDkbG9PZGyeZGzvUAEjJoIkY0BYQMCYAPAAP5+YAOI6WADkZgFkY+9ZJGQgZ6Rkb1DkZJ5kZOBowSMnAqQ8QiRrwFhAwFgA8AA/n5gA5GYA5GxvZCRsnmRs72TBIyeCJGNAWEDAWADwAD+fmADkZgFkY+9s5GQgZ6Rkb2WkZJ5kZOBowSMoASMoQSMogI3WAiRowAHkaW925Gmvd6Rj73hkZC95JGReZGSeZGTgaMEjKUEjKYEjKcCN08IkaMAB5GlvgaRpr4JkY++DJGQvg+RkXmR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AP5+YAPAAP5+YAPAAP5+YAORmAWRj8AAT7KRkIGekZHAAE+FkZJ5kZOI9wSNuQSNugSNuwI3UgiRowAHkaXAAE/qkabAAE/tkY/AAE/wkZDAAE/zkZF5kZJ5kZOBowSNvgqREQiRrwFhAwFgA8AA/n5gA5GYA5GxwABQHZGyeZGzwABQIASNwASNwQdgA8AA/n4BwABQRwiRjQFhAwFgA8AA/n5gA5GYBZGPwABQRJGQgZ6RkcAAUCORksAAUEqRk4GjBI3DCpESCJGvAWEDAWADwAD+fmADkZgDkbHAAFCCkbJ5kbPAAFCFBI3FBI3GB2ADwAD+fgHAAFCsCJGNAWEDAWADwAD+fmADkZgFkY/AAFCpkZCBnpGRwABQiJGSwABQr5GTgaMEjcgEjckKkRMIka8BYQMDYAPAAP5+YAOI6WADiOlgA5GYA5GxwABQ55GywABQ6pGzwABQ7QSNywSNzAdgA8AA/n4BwABRHwiRjQFhAwNgA8AA/n5gA4jpYAOI6WADkZgFkY/AAFEckZCBnpGRwABQ8JGSwABRIpGTiNkEjc4Ejc8IkaMAB5GlwABRYpGmeZGPwABRZZGQgZ6RkXmRknmRk4ZnBI3SCJGNAWEDAWADwAD+/2ADkZgFkY/AAFGKkZCBnpGRhxyRknmRk4GjBI3UBI3VCpEVCJGvAWEDAWADwAD+fmADkZgDkbHAAFG0kbLAAFG3kbPAAFG6BI3XBI3YB2ADwAD+fgHAAFHkCJGNAWEDAWADwAD+fmADkZgFkY/AAFHhkZCBnpGRwABRvZGSwABR55GTgaMEjdoKkRYIka8BYQMBYAPAAP5+YAORmAORscAAUh+RsnmRs8AAUiIEjdwIkY0BYQMBYAPAAP5+YAORmAWRj8AAUkaRkIGekZHAAFIlkZJ5kZOGZwSN3gSN3wiRowAHkaXAAFJykaZ5kY/AAFJ1kZCBnpGReZGSeZGThusEjeIEjeMIkaMAB5GlwABSmpGmeZGPwABSnZGQgZ6RkXmRknmRk4brBI3mCpEXCJGvAWEDAmADwAD+fmADwAD+/2ADkZgDkbHAAFLCkbJ5kbPAAFLFBI3oCJGNAWEDAmADwAD+fmADwAD+/2ADkZgFkY/AAFLvkZCBnpGRwABSyJGSeZGThusEjeoKkRgIka8BYQMBYAPAAP5+YAORmAORscAAUyGRsnmRs8AAUyQEjewIkY0BYQMBYAPAAP5+YAORmAWRj8AAU0iRkIGekZHAAFMnkZJ5kZOG6wSN7gqRGQiRrwFhAwJgA8AA/n5gA8AA/n5gA5GYA5GxwABTdJGyeZGzwABTdwSN8AiRjQFhAwJgA8AA/n5gA8AA/n5gA5GYBZGPwABToZGQgZ6RkcAAU3qRknmRk4brBI3yBI3zCJGjAAeRpcAAU9ORpnmRj8AAU9aRkIGekZF5kZJ5kZOG6wSN9gSN9wiRowAHkaXAAFP7kaZ5kY/AAFP+kZCBnpGReZGSeZGThusEjfsKkRoIka8BYQMBYAPAAP5+YAORmAORscAAVCORsnmRs8AAVCYEjf0IkY0BYQMBYAPAAP5+YAORmAWRj8AAVEqRkIGekZHAAFQpkZJ5kZOG6wSN/wqRGwiRrwFhAwFgA8AA/n5gA5GYA5GxwABUdpGyeZGzwABUeQSOAQiRjQFhAwFgA8AA/n5gA5GYBZGPwABUnZGQgZ6RkcAAVHyRknmRk4brBI4DCpEcCJGvAWEDAmADwAD+fmADwAD+fmADkZgDkbHAAFTJkbJ5kbPAAFTMBI4FCJGNAWEDAmADwAD+fmADwAD+fmADkZgFkY/AAFT2kZCBnpGRwABUz5GSeZGThusEjgcEjggIkaMAB5GlwABVKJGmeZGPwABVK5GQgZ6RkXmRknmRk4brBI4LCpEdCJGvAWEDAWADwAD+fmADkZgDkbHAAFVQkbJ5kbPAAFVTBI4NCJGNAWEDAWADwAD+fmADkZgFkY/AAFV3kZCBnpGRwABVVpGSeZGThusEjhAKkR4Ika8BYQMCYAPAAP5+YAPAAP5+YAORmAORscAAVaORsnmRs8AAVaYEjhIIkY0BYQMCYAPAAP5+YAPAAP5+YAORmAWRj8AAVdCRkIGekZHAAFWpkZJ5kZOG6wSOFAqRHwiRrwFhAwJgA4jpYAPAAP5+YAORmAORscAAVgKRsnmRs8AAVgUEjhYIkY0BYQMCYAOI6WADwAD+fmADkZgFkY/AAFYtkZCBnpGRwABWCJGSeZGThusEjhgKkSAIka8BYQMCYAPAAP5+YAPAAP5+YAORmAORscAAVl2RsnmRs8AAVmAEjhoIkY0BYQMCYAPAAP5+YAPAAP5+YAORmAWRj8AAVoqRkIGekZHAAFZjkZJ5kZOG6wSOHAqRIQiRrwFhAwJgA8AA/n5gA8AA/n5gA5GYA5GxwABWvJGyeZGzwABWvwSOHgiRjQFhAwJgA8AA/n5gA8AA/n5gA5GYBZGPwABW6ZGQgZ6RkcAAVsKRknmRk4brBI4gCpEiCJGvAWEDAWADwAD+fmADkZgDkbHAAFcbkbJ5kbPAAFceBI4iCJGNAWEDAWADwAD+fmADkZgFkY/AAFdCkZCBnpGRwABXIZGSeZGThusEjiQIkY0BYQMBYAPAAP5+YAORmAWRj8AAV26RkIGekZGILZGSeZGThusEjiYKkSQIka8BYQMBYAPAAP7/YAORmAORscAAV5iRsnmRs8AAV5sEjigIkY0BYQMBYAPAAP7/YAORmAWRj8AAV7+RkIGekZHAAFeekZJ5kZOG6wSOKgqRJQiRrwFhAwFgA8AA/n5gA5GYA5GxwABX65GyeZGzwABX7gSOLAiRjQFhAwFgA8AA/n5gA5GYBZGPwABYEpGQgZ6RkcAAV/GRknmRk4brBI4uBI4vBI4wB2ADwAD+fgHAAFhECJGjAAeRpcAAWD6RpnmRj8AAWEGRkIGekZF5kZLAAFhHkZOBowSOMwSONAqRJgiRrwFhAwNgA8AA/n5gA4jpYAOI6WADkZgDkbHAAFh4kbLAAFh7kbPAAFh+BI42CJGNAWEDA2ADwAD+fmADiOlgA4jpYAORmAWRj8AAWK2RkIGekZHAAFiBkZJ5kZOBowSOOAqRJwiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAEA0kbLAAFjhkbPAAFjkBI46BI47B2ADwAD+fgHAAFkQCJGNAWEDAmADiOlgA4jpYAORmAWRj8AAWQ2RkIGekZHAAFjnkZLAAFkTkZOBowSOPQSOPgSOPwiRowAHkaXAAFlNkabAAFlQkY/AAFlTkZCEEZGReZGSeZGTgaMEjkIKkSgIka8BYQMBYAPAAP5+YAORmAORscAAWXuRsnmRs8AAWX4EjkQIkY0BYQMBYAPAAP5+YAORmAWRj8AAWaKRkIGekZHAAFmBkZJ5kZOBowSORgSORwqRKQiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAFnOkbLAAFnRkbPAAFnUBI5JBI5KB2ADwAD+fgHAAFoACJGNAWEDAmADiOlgA4jpYAORmAWRj8AAWf2RkIGekZHAAFnXkZLAAFoDkZOBowSOTASOTQqRKgiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAFo9kbLAAFpAkbPAAFpDBI5PBI5QB2ADwAD+fgHAAFpvCJGNAWEDAmADiOlgA4jpYAORmAWRj8AAWmyRkIGekZHAAFpGkZLAAFpykZOBowSOUgSOUwqRKwiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAFqskbLAAFqvkbPAAFqyBI5VBI5WB2ADwAD+fgHAAFreCJGNAWEDAmADiOlgA4jpYAORmAWRj8AAWtuRkIGekZHAAFq1kZLAAFrhkZOBowSOWASOWQqRLAiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAFsbkbLAAFsekbPAAFshBI5bBI5cB2ADwAD+fgHAAFtNCJGNAWEDAmADiOlgA4jpYAORmAWRj8AAW0qRkIGekZHAAFskkZLAAFtQkZOBowSOXgSOXwqRLQiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAFuKkbLAAFuNkbPAAFuQBI5hBI5iB2ADwAD+fgHAAFu8CJGNAWEDAmADiOlgA4jpYAORmAWRj8AAW7mRkIGekZHAAFuTkZLAAFu/kZOBowSOZASOZQqRLgiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAFv5kbLAAFv8kbPAAFv/BI5nBI5oB2ADwAD+fgHAAFwrCJGNAWEDAmADiOlgA4jpYAORmAWRj8AAXCiRkIGekZHAAFwCkZLAAFwukZOBowSOagSOawqRLwiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAFxokbLAAFxrkbPAAFxuBI5tBI5uB2ADwAD+fgHAAFyaCJGNAWEDAmADiOlgA4jpYAORmAWRj8AAXJeRkIGekZHAAFxxkZLAAFydkZOBowSOcAqRMAiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAFzXkbLAAFuNkbPAAFzaBI5yCJGNAWEDAmADiOlgA4jpYAORmAWRj8AAXQORkIGekZHAAFzdkZLAAFu/kZOBowSOdASOdQSOdgdgA8AA/n4BwABdOgiRowAHkaXAAF00kaZ5kY/AAF03kZCBnpGReZGSwABdPZGTgaMEjnkEjnoEjnsHYAPAAP5+AcAAXXQIkaMAB5GlwABdbpGmeZGPwABdcZGQgZ6RkXmRksAAXXeRk4GjBI5+CpExCJGvAWEDAWADwAD+fmADkZgDkbHAAF2okbJ5kbPAAF2r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kZOBowSPhASPhQqRQwiRrwFhAwFgA58AYAORmAORscAAa+ORssAAa+aRs8AAa+kEj4cIkY0BYQMBYAOfAGADkZgFkY/AAGwOkZCBnpGRwABr7JGSwABmMpGTgaMEj4kKkUQIka8BYQMBYAPAAP5+YAORmAORscAAbDuRsnmRs8AAbD4Ej4sEj4wHYAPAAP5+AcAAbGUIkY0BYQMBYAPAAP5+YAORmAWRj8AAbGKRkIGekZHAAGxBkZLAAGxokZOI2QSPjgSPjwiRowAHkaXAAGygkaZ5kY/AAGyjkZCBnpGReZGSeZGTgaMEj5IEj5MKkUUIka8BYQMCYAPAAP5+YAPAAPyXYAORmAORscAAbMiRssAAbMuRs8AAbM4Ej5UIkY0BYQMCYAPAAP5+YAPAAPyXYAORmAWRj8AAbPuRkIGekZHAAGzRkZKLupGTgaMEj5cKkUYIka8BYQMBYAPAAPyXYAORmAORscAAbS6RsnmRs8AAbTEEj5kIkY0BYQMBYAPAAPyXYAORmAWRj8AAbVWRkIGekZHAAG00kZKLupGTgaMEj5sEj5wEj50IkaMAB5GlwABtgpGmwABthZGPwABtiJGQgZ6RkXmRkpIjkZOBowSPoASPoQiRowAHkaXAAG2xkabAAG2FkY/AAG20kZCBnpGReZGSkiORk4GjBI+kBI+lBI+mB2ADwAD+fgHAAG3jCJGjAAeRpcAAbd2RpnmRj8AAbeCRkIGekZF5kZLAAG3mkZOI2QSPqQSPqgiRowAHkaXAAG4XkaZ5kY/AAG4akZCBnpGReZGSeZGTgaMEj60Ej64Ej68Ej7AHYAPAAP5+AcAAbkgIkaMAB5GlwABuP5GmwABuQpGPwABuRZGQgZ6RkXmRksAAbkuRk4GjBI+zCpFHCJGvAWEDAWADwAD+fmADkZgDkbHAAG5/kbJ5kbPAAG6CBI+1CJGNAWEDAWADwAD+fmADkZgFkY/AAG6mkZCBnpGRwABuhZGSeZGThmcEj7cKkUgIka8BYQMBYAPAAP5+YAORmAORscAAbtKRsnmRs8AAbtUEj7kIkY0BYQMBYAPAAP5+YAORmAWRj8AAbvmRkIGekZHAAG7YkZJ5kZOGZwSPuwSPvAiRowAHkaXAAG8lkaZ5kY/AAG8okZCBnpGReZGSkiORk4GjBI+/CpFJCJGvAWEDAmADwAD+fmADwAD+fmADkZgDkbHAAG9OkbJ5kbPAAG9RBI/BBI/CB2ADwAD+fgHAAG9+CJGNAWEDAmADwAD+fmADwAD+fmADkZgFkY/AAG97kZCBnpGRwABvVJGSwABvgZGTiNkEj8QKkUoIka8BYQMBYAPAAP5+YAORmAORscAAb7+RsnmRs8AAb8IEj8YIkY0BYQMBYAPAAP5+YAORmAWRj8AAb+aRkIGekZHAAG/FkZLAAG+BkZOI2QSPyASPyQiRowAHkaXAAHAVkaZ5kY/AAHAYkZCBnpGReZGSeZGThmcEj8wEj80IkaMAB5GlwABwPZGmeZGPwABwQJGQgZ6RkXmRkpAckZOBowSP0AqRSwiRrwFhAwFgA58AYAORmAORscAAcGaRsnmRs8AAcGkEj9IIkY0BYQMBYAOfAGADkZgFkY/AAHCLkZCBnpGRwABwbJGSeZGTgaMEj9QKkUwIka8BYQMBYAPAAP5+YAORmAORscAAcLWRsnmRs8AAcLgEj9YIkY0BYQMBYAPAAP5+YAORmAWRj8AAcNyRkIGekZHAAHC7kZKSI5GTgaMEj9gEj9kIkaMAB5GlwABxCZGmeZGPwABxDJGQgZ6RkXmRknmRk4GjBI/cBI/dCJGjAAeRpcAAcTGRpnmRj8AAcTSRkIGekZF5kZJ5kZOBowSP4ASP4QiRowAHkaXAAHFZkaZ5kY/AAHFckZCBnpGReZGSeZGTgaMEj+QEj+UEj+YCNxQIkaMAB5GlwABxgZGmwABxhJGPwABxh5GQwABxipGReZGSeZGTgaMEj+kEj+oKkU0Ika8BYQMBYAPAAP5+YAORmAORscAAcbSRssAAcbeRs8AAcboEj+wEj+0HYAPAAP5+AcAAceQIkY0BYQMBYAPAAP5+YAORmAWRj8AAceGRkIGekZHAAHG9kZLAAHHnkZOBowSP7wqRTgiRrwFhAwFgA8AA/n5gA5GYA5GxwAByH5GyeZGzwAByIgSP8QiRjQFhAwFgA8AA/n5gA5GYBZGPwAByRpGQgZ6RkcAAciWRknmRk4GjBI/zCpFPCJGvAWEDAWADwAD+fmADkZgDkbHAAHJykbJ5kbPAAHJ1BI/1BI/2B2ADwAD+fgHAAHKcCJGNAWEDAWADwAD+fmADkZgFkY/AAHKZkZCBnpGRwAByeJGSwAByn5GTgaMEj/gKkVAIka8BYQMBYAPA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YQMDYAPAAP7/YAPAAP7/YAPAAP7/YAORmAWRj8AAeeiRkIGekZHAAHm7kZLAAHi6kZOI2QSQXwSQYAqRXgiRrwFhAwNgA8AA/v9gA8AA/v9gA8AA/n5gA5GYA5GxwAB6I5GywAB6JpGzwAB6KQSQYgSQYwdgA8AA/n4BwAB6XwiRjQFhAwNgA8AA/v9gA8AA/v9gA8AA/n5gA5GYBZGPwAB6XJGQgZ6RkcAAeiyRksAAemKRk4jZBJBlBJBmBJBnCJGjAAeRpcAAeqaRpsAAeqmRj8AAeqyRkIGekZF5kZJ5kZOBowSQagqRXwiRrwFhAwFgA8AA/v9gA5GYA5GxwAB61JGyeZGzwAB61wSQbASQbQdgA8AA/n4BwAB6/giRjQFhAwFgA8AA/v9gA5GYBZGPwAB6+5GQgZ6RkcAAetqRksAAewGRk4GjBJBvBJBwCJGjAAeRpcAAezmRpnmRj8AAezyRkIGekZF5kZJ5kZOGZwSQcwSQdAiRowAHkaXAAHthkaZ5kY/AAHtkkZCBnpGReZGSeZGTgaMEkHcEkHgIkaMAB5GlwAB7iZGmeZGPwAB7jJGQgZ6RkXmRknmRk4GjBJB7BJB8CJGjAAeRpcAAe7GRpnmRj8AAe7SRkIGekZF5kZJ5kZOGZwSQfwSQgAqRYAiRrwFhAwJgA8AA/n5gA8AA/v9gA5GYA5GxwAB72ZGywAB73JGzwAB73wSQggiRjQFhAwJgA8AA/n5gA8AA/v9gA5GYBZGPwAB8DJGQgZ6RkcAAe+KRknmRk4GjBJCEBJCFBJCGCJGjAAeRpcAAfD6RpsAAfEGRj8AAfESRkIGekZF5kZJ5kZOBowSQiQSQigSQiwdgA8AA/n4BwAB8cgiRowAHkaXAAHxskaZ5kY/AAHxvkZCBnpGReZGSwAB8dZGTgaMEkI4EkI8EkJAEkJEHYAPAAP5+AcAAfK8IkaMAB5GlwAB8ppGmwAB8qZGPwAB8rJGQgZ6RkXmRksAAfLKRk4GjBJCUBJCVBJCWBJCXB2ADwAD+fgHAAHzvCJGjAAeRpcAAfOaRpsAAfOmRj8AAfOyRkIGekZF5kZLAAHzykZOBowSQmgSQmwSQnAiRowAHkaXAAH0mkabAAH0pkY/AAH0skZCC4ZGReZGSeZGTgaMEkJ8EkKAEkKEHYAPAAP5+AcAAfVoIkaMAB5GlwAB9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h6yRksAAh9ORk4jZBJFVCpFyCJGvAWEDAWADwAD+fmADkZgDkbHAAIgLkbJ5kbPAAIgOBJFXBJFYB2ADwAD+fgHAAIg1CJGNAWEDAWADwAD+fmADkZgFkY/AAIgykZCBnpGRwACIEZGSwACIOJGTiNkEkVoKkXMIka8BYQMBYAPAAP5+YAORmAORscAAiHCRsnmRs8AAiHMEkVwIkY0BYQMBYAPAAP5+YAORmAWRj8AAiJeRkIGekZHAAIh2kZJ5kZOI2QSRXgSRXwiRowAHkaXAAIjDkaZ5kY/AAIjGkZCBnpGReZGSeZGTgaMEkWIKkXQIka8BYQMBYAPAAP5+YAORmAORscAAiOuRsnmRs8AAiO4EkWQEkWUHYAPAAP5+AcAAiRUIkY0BYQMBYAPAAP5+YAORmAWRj8AAiRKRkIGekZHAAIjxkZLAAIkYkZOBowSRZwqRdQiRrwFhAwFgA8AA/n5gA5GYA5GxwACJUJGyeZGzwACJUwSRaQiRjQFhAwFgA8AA/n5gA5GYBZGPwACJd5GQgZ6RkcAAiVaRksAAiRiRk4GjBJFrBJFsBJFtB2ADwAD+fgHAAImsCJGjAAeRpcAAiaaRpnmRj8AAiamRkIGekZF5kZLAAImvkZOI2QSRcAqRdgiRrwFhAwJgA4jpYAOI6WADkZgDkbHAAIngkbJ5kbPAAInjBJFyBJFzB2ADwAD+fgHAAIoMCJGNAWEDAmADiOlgA4jpYAORmAWRj8AAigmRkIGekZHAAInmkZLAAIoPkZOBowSRdQSRdgiRowAHkaXAAIpJkaZ5kY/AAIpMkZCBnpGReZGSeZGThmcEkXkEkXoEkXsIkaMAB5GlwACKcZGmwACKdJGPwACKd5GQg3CRkXmRknmRk4GjBJF+BJF/BJGAAjcPCJGjAAeRpcAAip+RpsAAiqKRj8AAiqWRkMAAiqiRkXmRknmRk4GjBJGDBJGECJGjAAeRpcAAitKRpnmRj8AAitWRkIGekZF5kZJ5kZOBowSRhwqRdwiRrwFhAwFgA8AA/n5gA5GYA5GxwACK+pGyeZGzwACK/QSRiQSRigdgA8AA/n4BwACLJAiRjQFhAwFgA8AA/n5gA5GYBZGPwACLIZGQgZ6RkcAAiwCRksAAiyeRk4GjBJGMBJGNBJGOB2ADwAD+fgHAAItlCJGjAAeRpcAAi1+RpnmRj8AAi2KRkIGekZF5kZLAAItokZOBowSRkQSRkgSRkwdgA8AA/n4BwACLnwiRowAHkaXAAIuZkaZ5kY/AAIuckZCBnpGReZGSwACLopGTgaMEkZYKkXgIka8BYQMBYAPAAP5+YAORmAORscAAi9ORsnmRs8AAi9YEkZgEkZkHYAPAAP5+AcAAi/0IkY0BYQMBYAPAAP5+YAORmAWRj8AAi/qRkIGekZHAAIvZkZLAAIwAkZOBowSRmwqReQiRrwFhAwJgA8AA/JdgA8AA/JdgA5GYA5GxwACMOJGyeZGzwACMOwSRnQSRngdgA8AA/n4BwACMaAiRjQFhAwJgA8AA/JdgA8AA/JdgA5GYBZGPwACMZZGQgZ6RkcAAjD6RksAAjGuRk4jZBJGgBJGhCpF6CJGvAWEDAmADwAD8l2ADwAD8l2ADkZgDkbHAAIypkbLAAIyskbPAAIyvBJGjCJGNAWEDAmADwAD8l2ADwAD8l2ADkZgFkY/AAIzckZCBnpGRwACMspGStG6Rk4jZBJGlBJGmBJGnAjcOCJGjAAeRpcAAjQ+RpsAAjRKRj8AAjRWRkMAAjRiRkXmRknmRk4GjBJGqBJGrBJGsAjdZCJGjAAeRpcAAjUKRpsAAjUWRj8AAjUiRkMAAjUuRkXmRknmRk4GjBJGvCpF7CJGvAWEDAWADwAD8l2ADkZgDkbHAAI11kbJ5kbPAAI14BJGxBJGyB2ADwAD+fgHAAI2fCJGNAWEDAWADwAD8l2ADkZgFkY/AAI2ckZCBnpGRwACNe5GSwACNopGTiNkEkbQEkbUKkXwIka8BYQMBYAPAAP5+YAORmAORscAAjdqRssAAjd2Rs8AAjeAEkbcIkY0BYQMBYAPAAP5+YAORmAWRj8AAjgeRkIQXkZHAAI3jkZJ5kZOI2QSRuQSRugSRuwI3OQiRowAHkaXAAI4zkabAAI42kY/AAI45kZDAAI48kZF5kZJ5kZOBowSRvgqRfQiRrwFhAwFgA8AA/n5gA5GYA5GxwACOZpGyeZGzwACOaQSRwASRwQdgA8AA/n4BwACOkAiRjQFhAwFgA8AA/n5gA5GYBZGPwACOjZGQgZ6RkcAAjmyRksAAjpORk4jZBJHDCpF+CJGvAWEDAmADwAD+fmADwAD+/2ADkZgDkbHAAI7LkbJ5kbPAAI7OBJHFCJGNAWEDAmADwAD+fmADwAD+/2ADkZgFkY/AAI74kZCBnpGRwACO0ZGSeZGTgaMEkccKkX8Ika8BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAORscAAjyqRsnmRs8AAjy0EkckIkY0BYQMDYAPAAP5+YAPAAP7/YAPAAP7/YAORmAWRj8AAj12RkIGekZHAAI8wkZJ5kZOBowSRywSRzAiRowAHkaXAAI+VkaZ5kY/AAI+YkZCBnpGReZGSqSKRk4GjBJHPCpGACJGvAWEDAWADwAD+fmADkZgDkbHAAI++kbJ5kbPAAI/BBJHRCJGNAWEDAWADwAD+fmADkZgFkY/AAI/lkZCBnpGRwACPxJGSeZGThmcEkdMEkdQEkdUHYAPAAP5+AcAAkBcIkaMAB5GlwACQEZGmeZGPwACQFJGQgZ6RkXmRksAAkBqRk4GjBJHYBJHZCJGjAAeRpcAAkEuRpnmRj8AAkE6RkIGekZF5kZLAAG3mkZOI2QSR3ASR3QSR3gdgA8AA/n4BwACQfAiRowAHkaXAAJB2kaZ5kY/AAJB5kZCBnpGReZGSwACQf5GTgaMEkeEEkeIEkeMIkaMAB5GlwACQsJGmwACQs5GPwACQtpGQhQeRkXmRknmRk4GjBJHmBJHnBJHoB2ADwAD+fgHAAJDkCJGjAAeRpcAAkN6RpnmRj8AAkOGRkIGekZF5kZLAAJDnkZOBowSR6wSR7AqRgQiRrwFhAwJgA8AA/n5gA4jpYAORmAORscAAkRiRssAAkRuRs8AAkR4Eke4IkY0BYQMCYAPAAP5+YAOI6WADkZgFkY/AAJFJkZCBnpGRwACRIZGSwABDT5GTgaMEkfAEkfEKkYIIka8BYQMCYAPAAP5+YAOI6WADkZgDkbHAAJF8kbLAAJF/kbPAAJGCBJHzCJGNAWEDAmADwAD+fmADiOlgA5GYBZGPwACRrZGQgZ6RkcAAkYWRksAAZHSRk4GjBJH1BJH2CpGDCJGvAWEDAmADwAD+fmADiOlgA5GYA5GxwACR4JGywACR45GzwACR5gSR+AiRjQFhAwJgA8AA/n5gA4jpYAORmAWRj8AAkhGRkIGekZHAAJHpkZLAAIDKkZOBowSR+gSR+wSR/ASR/QdgA8AA/n4BwACSTQiRowAHkaXAAJJEkabAAJJHkY/AAJJKkZCBnpGReZGSwACSUJGTgaMEkgAKkYQIka8BYQMBYAOfAGADkZgDkbHAAJKEkbJ5kbPAAJKHBJICBJIDB2ADwAD+fgHAAJKsCJGNAWEDAWADnwBgA5GYBZGPwACSqZGQgZ6RkcAAkoqRksAAkq+Rk4GjBJIFCpGFCJGvAWEDAmADwAD+fmADnwBgA5GYA5GxwACS5ZGyeZGzwACS6ASSBwiRjQFhAwJgA8AA/n5gA58AYAORmAWRj8AAkxCRkIGekZHAAJLrkZKwupGTgaMEkgkKkYYIka8BYQMCYAPAAP5+YAPAAP5+YAORmAORscAAk0GRsnmRs8AAk0QEkgsIkY0BYQMCYAPAAP5+YAPAAP5+YAORmAWRj8AAk26RkIGekZHAAJNHkZLAAG+BkZOI2QSSDQqRhwiRrwFhAwFgA8AA/n5gA5GYA5GxwACTo5GyeZGzwACTpgSSDwiRjQFhAwFgA8AA/n5gA5GYBZGPwACTypGQgZ6RkcAAk6mRknmRk4GjBJIRCpGICJGvAWEDAWADnwBgA5GYA5GxwACT9pGyeZGzwACT+QSSEwSSFAdgA8AA/n4BwACUHgiRjQFhAwFgA58AYAORmAWRj8AAlBuRkIGekZHAAJP8kZLAAJQhkZOBowSSFgSSFwSSGAiRowAHkaXAAJRXkabAAJRakY/AAJRdkZCBnpGReZGSrwuRk4GjBJIbBJIcBJIdB2ADwAD+fgHAAJSMCJGjAAeRpcAAlIaRpnmRj8AAlImRkIGekZF5kZLAAJSPkZOBowSSIAqRiQiRrwFhAwJgA8AA/n5gA8AA/n5gA5GYA5GxwACUwJGyeZGzwACUwwSSIgSSIwdgA8AA/n4BwACU8AiRjQFhAwJgA8AA/n5gA8AA/n5gA5GYBZGPwACU7ZGQgZ6RkcAAlMaRksAAlPORk4GjBJIlBJImCJGjAAeRpcAAlTGRpnmRj8AAlTSRkIGekZF5kZJ5kZOBowSSKQqRigiRrwFhAwFgA8AA/v9gA5GYA5GxwACVWZGyeZGzwACVXASSKwiRjQFhAwFgA8AA/v9gA5GYBZGPwACVgJGQgZ6RkcAAlV+RkpHGkZOBowSSLQqRiwiRrwFhAwFgA8AA/n5gA5GYA5GxwACVrZGyeZGzwACVsASSLwiRjQFhAwFgA8AA/n5gA5GYBZGPwACV1JGQgZ6RkcAAlbORknmRk4joBJIxBJIyAjc9CJGjAAeR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OQSmngSmnwdbAcAA0dcIpaQABaWmwADMB6WnwADR1KWoeaWpwADR2qWqgzkEpqAEpqEEpqIEpqMEpqQEpqUEpqYHWwbAANICwADSBcAA0gjAANILwADSDsAA0hEIpaQABaWmwADMGaWnwADR/6WoeaWpwADSFKWqgzkHWyrAAMcZwADOUsAAxyvAAM6AwADHmcAAzwDAAMetwADPQ8AAxz3AAM9uwADKv8AAz47AAMtBwADPvMAAy1PAAM/twADLZcAA0CXAAMsdwADQScAAx7/AANBxwADG5cAA0JLAAMvRwADQusAAy63AANDswADLv8AA0RfAAMvjwADRQsAAy/XAANFtwADK5cAA0Y7AAMwrwADRtsAAzAfAANHhwADMGcAA0i8IwAD4RQJgA6U/YAOlpAHAAPhIwADSTQSmpwilpAAFpabAAMZVpafAANMPpah5pal5paqDOQSmqAilpAAFpabAAMblpafAANMtpah5pal5paqDOQSmqQilpAAFpabAAMsJpafAANNLpah5pal5paqDOQSmqgilpAAFpabAAMdPpafAANNppah5pal5paqDOQSmqwilpAAFpabAAMwZpafAANOHpah5pal5paqDOQSmrAilpAAFpabAAMubpafAANOlpah5pal5paqDOQSmrQSmrgSmrwdbAcAA08kIpaQABaWmwADJ9aWnwADTw6WowADTxqWpwADTzKWqgzkEprAEprEEprIEprMHWwLAANP6wADT/QilpAAFpabAAMo9pafAANP0pajAANP3panAANQApaqDOQSmtASmtQSmtgdbAcAA1DIIpaQABaWmwADKh6WnwADULKWowADUL6WpwADUNaWqgzkEprcIpaQABaWmwADKT6WnwADUXaWoeaWpeaWqgzkEprgEprkIpaQABaWmwADKYaWnwADUe6WowADUfqWpeaWqgzkEproEprsIpaQABaWmwADKB6WnwADUn6WowADUoqWpeaWqgzkEprwEpr0Epr4HWwHAANTJCKWkAAWlpsAAyhmlp8AA1MOlqMAA1MalqcAA1MylqoM5BKa/BKbABKbBB1sBwADU+gilpAAFpabAAMpzpafAANT0pajAANT3panAANT9paqDOQSmwgSmwwilpAAFpabAAMfTpafAANUlpajAANUopal5paqDOQSmxAilpAAFpabAAMorpafAANVJpajAANUopal5paqDOQSmxQilpAAFpabAAMqtpafAANVqpah5pal5paqDOQSmxgSmxwilpAAFpabAAMm9pafAANWIpajAANWLpal5paqDOQSmyASmyQSmygSmywdbA8AA1a/AANWywADVtQilpAAFpabAAMnPpafAANWspajAANWLpanAANW4paqDOQSmzASmzQilpAAFpabAAMqbpafAANXopajAANXrpal5paqDOQSmzgilpAAFpabAAMw/pafAANYMpah5pal5paqDOQilpAAFpabAAMxRpafAANYMpah5pal5paqDOQSmzwilpAAFpabAAMxjpafAANZFpah5pal5paqDOQSm0AilpAAFpabAAMx1pafAANZjpah5pal5paqDOQSm0QSm0gSm0wdbAcAA1ocIpaQABaWmwADG1KWnwADWgaWowADWhKWpwADWiqWqgzkEptQEptUEptYEptcHWwLAANa4wADWuwilpAAFpabAAMXIpafAANaypajAANa1panAANa+paqDOQSm2ASm2QSm2gdbAcAA1vAIpaQABaWmwADF3KWnwADW6qWowADW7aWpwADW86WqgzkEptsEptwEpt0HWwHAANchCKWkAAWlpsAAx3Olp8AA1xulqMAA1x6lqcAA1ySlqoM5BKbeBKbfBKbgB1sBwADXUgilpAAFpabAAMeFpafAANdMpajAANdPpanAANdVpaqDOQSm4QilpAAFpabAAMZ3pafAANd9pah5pal5paqDOQSm4gilpAAFpabAAMaIpafAANebpah5pal5paqDOQSm4wilpAAFpabAAMaapafAANe5pah5pal5paqDOQSm5AilpAAFpabAAMbApafAANfXpah5pal5paqDOQSm5QilpAAFpabAAMaupafAANf1pah5pal5paqDOQSm5gilpAAFpabAAMsvpafAANgTpah5pal5paqDOQSm5wilpAAFpabAAMibpafAANgxpah5pal5paqDOQSm6AilpAAFpabAAMjnpafAANhPpah5pal5paqDOQSm6QilpAAFpabAAMhzpafAANhtpah5pal5paqDOQSm6gilpAAFpabAAMkhpafAANiLpah5pal5paqDOQSm6wilpAAFpabAAMlHpafAANippah5pal5paqDOQSm7AilpAAFpabAAMlbpafAANjHpah5pal5paqDOQSm7QilpAAFpabAAMjBpafAANjlpah5pal5paqDOQSm7gilpAAFpabAAMkzpafAANkDpah5pal5paqDOQSm7wilpAAFpabAAMgjpafAANkhpah5pal5paqDOQSm8AilpAAFpabAAMg3pafAANk/pah5pal5paqDOQSm8QilpAAFpabAAMhfpafAANldpah5pal5paqDOQSm8gilpAAFpabAAMhLpafAANl7pah5pal5paqDOQSm8wilpAAFpabAAMkNpafAANmZpah5pal5paqDOQSm9AilpAAFpabAAMj7pafAANm3pah5pal5paqDOQSm9QilpAAFpabAAMiHpafAANnVpah5pal5paqDOQSm9gilpAAFpabAAMjVpafAANnzpah5pal5paqDOQSm9wilpAAFpabAAMlvpafAANoRpah5pal5paqDOQSm+AilpAAFpabAAMgPpafAANovpah5pal5paqDOQSm+QilpAAFpabAAMmDpafAANpNpah5pal5paqDOQSm+gilpAAFpabAAMnjpafAANprpah5pal5paqDOQSm+wilpAAFpabAAMmVpafAANqJpah5pal5paqDOQSm/AilpAAFpabAAMmppafAANqnpah5pal5paqDOQSm/QilpAAFpabAAMitpafAANrFpah5pal5paqDOQSm/gilpAAFpabAAMfnpafAANrjpah5pal5paqDOQSm/wilpAAFpabAAMf7pafAANsBpah5pal5paqDOQSnAAilpAAFpabAAMYdpafAANsfpah5pal5paqDOQSnAQSnAgilpAAFpabAAMdhpafAANs9pajAANtApal5paqDOQSnAwilpAAFpabAAMcHpafAANthpajAANtApal5paqDOQSnBASnBQilpAAFpabAAMb2pafAANuCpajAANuFpal5paqDOQSnBgSnBwilpAAFpabAAMt3pafAANumpajAANuppal5paqDOQSnCAilpAAFpabAAMuJpafAANvKpajAANuppal5paqDOQSnCQSnCgilpAAFpabAAMr3pafAANvrpajAANvupal5paqDOQSnCwilpAAFpabAAMrTpafAANwPpah5pal5paqDOQSnDAilpAAFpabAAMyZpafAANwtpah5pal5paqDOQSnDQilpAAFpabAAMyHpafAANxLpah5pal5paqDOQSnDgilpAAFpabAAMyrpafAANxppah5pal5paqDOQSnDwilpAAFpabAAMy/pafAANyHpah5pal5paqDOQdbgJDAAMZVwADTEsAAxuXAANMwwADLCcAA007AAMdPwADTbMAAzBnAANOKwADLm8AA06jAAMn1wADT08AAyj3AANQLwADKh8AA1DzAAMpPwADUYMAAymHAANSBwADKB8AA1KXAAMoZwADU08AAynPAANUEwADH08AA1SvAAMorwADVTMAAyq3AANVtwADJvcAA1Y7AAMnPwADVx8AAypvAANXuwADMP8AA1g/AAMxRwADWKsAAzGPAANZIwADMdcAA1mbAAMbUwADWkcAAxcjAANbJwADF3MAA1vrAAMdzwADXK8AAx4XAANdcwADGd8AA14DAAMaIwADXnsAAxprAANe8wADGwMAA19rAAMauwADX+MAAyy/AANgWwADIm8AA2DTAAMjnwADYUsAAyHPAANhwwADJIcAA2I7AAMlHwADYrMAAyVvAANjKwADIwcAA2OjAAMkzwADZBsAAyCPAANkkwADIN8AA2ULAAMhfwADZYMAAyEvAANl+wADJDcAA2ZzAAMj7wADZusAAyIfAANnYwADI1cAA2fbAAMlvwADaFMAAyA/AANoywADJg8AA2lDAAMnjwADabsAAyZXAANqMwADJqcAA2qrAAMitwADayMAAx+fAANrmwADH+8AA2wTAAMYdwADbIsAAx2HAANtDwADHB8AA22TAAMb2wADbiMAAy3fAANuswADLicAA283AAMr3wADb8cAAytPAANwSwADMmcAA3DDAAMyHwADcTsAAzKvAANxswADMv8AA3IoIwAD4RQJgA6U/YAOlpAHAAPhIwADcpQSnZQSnZwSGcASn5wI3wP///wdgA6hkAAjAAPhFAmADwAD+fmADwABVTgHAAPhIgmYKqHgEqOQEqRQEqUIIqgEAAqoDIaoFwADfOgSpRAiqAQACqgNTqgXAAN9LAjeCAAI3kAAEqVEIqgEAAqoDguGqBcAA32QEqV4IqgEAAqoDgVeqBcAA33YEqWkIqgEAAqoDgj+qBcAA34gCN4QABKlyCKoBAAKqA4QUqgXAAN+eB2ADwABXXQAEqXkIqgEAAqoDhQeqBcAA37gEqXwIqgEAAqoDwACXCKoFwADfygI3iAAH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YcAA6mAEsEsIt10AArdfwABxirdhwADqdASwTAi3XQACt1/AAH4qt2HAAOqIBLBNCLddAAK3X8AAfZe3YcAA6pwEsE4It10AArdfwABrubdhwADqsASwTwi3XQACt1/AAGr5t2HAAOrEBLBQCLddAAK3X8AAeTK3YcAA6tgEsFEIt10AArdfwABqxrdhwADq7ASwUgi3XQACt1/AAGqTt2HAAOsABLBTCLddAAK3X8AAaiC3YcAA6xQEsFQIt10AArdftOW3YcAA6ygEsFUIt10AArdfwABoH7dhwADrOgSwVgi3XQACt1/AAGeHt2HAAOtOBLBXCLddAAK3X4NKt2HAAOtiBLBYCLddAAK3X8AAZTu3YcAA63QEsFkIt10AArdfhA63YcAA64gEsFoIt10AArdfwABk3bdhwADrmgSwWwi3XQACt1+w8LdhwADrrgSwXAi3XQACt1/AAGH2t2HAAOvABLBdCLddAAK3X8AAX+m3YcAA69QEsF4It10AArdfwABevrdhwADr6ASwXwi3XQACt1/AAF4Bt2HAAOv8BLBgCLddAAK3X7Q9t2HAAOwQBLBhCLddAAK3X8AARs23YcAA7CIEsGIIt10AArdfwABGmrdhwADsNgSwYwi3XQACt1/AAEZnt2HAAOxKBLBkCLddAAK3X8AAQ823YcAA7F4EsGUIt10AArdfstu3YcAA7HIEsGYIt10AArdfwABfT7dhwADshASwZwi3XQACt1+2SrdhwADsmASwaAi3XQACt1+5B7dhwADsqgSwaQi3XQACt1+437dhwADsvASwagi3XQACt1+JeLdhwADszgSwawi3XQACt1+OMrdhwADs4ASwbAi3XQACt1+TXrdhwADs8gSwbQi3XQACt1+TibdhwADtBASwbgi3XQACt1+hgrdhwADtFgSwbwi3XQACt1/AAGmpt2HAAO0oB2ADt105wADpBcAA6RbAAOknwADpOMAA6UnAAOlbwADpbcAA6X/AAOmRwADpo8AA6bXAAOnHwADp28AA6e/AAOoBwADqFcAA6inAAOo7wADqT8AA6mPAAOp3wADqi8AA6p/AAOqzwADqx8AA6tvAAOrvwADrA8AA6xfAAOsrwADrPcAA61HAAOtlwADrd8AA64vAAOudwADrscAA68PAAOvXwADr68AA6//AAOwTwADsJcAA7DnA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AsAATf+EEcAATgHAAP9+BLy+CMAATf0AAsAATf+EFMAATgHAAP+WBLy/CMAATf0AAsAATf/AAJcIwABOAcAA/64EvMAIwABN/QACwABN/8AAljbAAE4BwAD/yAS8wQjAAE39AALAAE3/hBfAAE4BwAD/4gS8wgjAAE39AALAAE3/wACNGMAATgHAAP/6BLzDCMAATf0AAsAATf/AAIqowABOAcABABQEvMQIwABN/QACwABN/4NwwABOAcABAC4EvMUIwABN/QACwABN/8AAhW7AAE4BwAEARgS8xgjAAE39AALAAE3/wACGRsAATgHAAQBgBLzHCMAATf0AAsAATf/AAISuwABOAcABAHoEvMgIwABN/QACwABN/8AAcYrAAE4BwAEAlAS8yQjAAE39AALAAE3/wAB+KsAATgHAAQCuBLzKCMAATf0AAsAATf/AAH2XwABOAcABAMgEvMsIwABN/QACwABN/8AAa7nAAE4BwAEA4gS8zAjAAE39AALAAE3/wABq+cAATgHAAQD8BLzNCMAATf0AAsAATf/AAHkywABOAcABARYEvM4IwABN/QACwABN/8AAasbAAE4BwAEBMAS8zwjAAE39AALAAE3/wABqk8AATgHAAQFKBLzQCMAATf0AAsAATf/AAGogwABOAcABAWQHYAPAAE39HcAA/q3AAP7EwAD+28AA/vLAAP8JwAD/IcAA/znAAP9RwAD/acAA/4HAAP+ZwAD/scAA/8vAAP/lwAD//cABABfAAQAxwAEAScABAGPAAQB9wAEAl8ABALHAAQDLwAEA5cABAP/AAQEZwAEBM8ABAU3AAQFnBL06CMAAh3wAAsAAh34JwACHgMABAfoEvTsIwACHfAACwACHfhXAAIeAwAECEQS9PAjAAId8AALAAId+wACErsAAh4DAAQIoBL09CMAAh3wAAsAAh37AAHGKwACHgMABAkIEvT4IwACHfAACwACHfsAAhkbAAIeAwAECXAS9PwjAAId8AALAAId+g3DAAIeAwAECdgS9QAjAAId8AALAAId+wACFbsAAh4DAAQKOBL1BCMAAh3wAAsAAh36EEcAAh4DAAQKoBL1CCMAAh3wAAsAAh36EFMAAh4DAAQLABL1DCMAAh3wAAsAAh37AAJcIwACHgMABAtgEvUQIwACHfAACwACHflPAAIeAwAEC8gS9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AEMcCMAAWkoAAsAAWkzAAJY2wABaTsABFJ0EwABDHQjAAFpKAALAAFpMwACKqMAAWk7AARS5BMAAQx4IwABaSgACwABaTMAAhW7AAFpOwAEU1QTAAEMfCMAAWkoAAsAAWkzAAH4qwABaTsABFPEEwABDIAjAAFpKAALAAFpMwAB9l8AAWk7AARUNBMAAQyEIwABaSgACwABaTMAAeTLAAFpOwAEVKQTAAEMiCMAAWkoAAsAAWkzAAGgfwABaTsABFUUEwABDIwjAAFpKAALAAFpMg0rAAFpOwAEVYQTAAEMkCMAAWkoAAsAAWkzAAF/pwABaTsABFXsEwABDJQjAAFpKAALAAFpMwABevsAAWk7AARWXBMAAQyYIwABaSgACwABaTLQ9wABaTsABFbMEwABDJwjAAFpKAALAAFpMwABGzcAAWk7AARXNB2ADwABaSivAAMIxwAEUBcAAxMjAAMH8wADji8ABFB7AAQcWwAEUOMABBzvAARRSwAEUbMABFIbAARSiwADjo8ABB1PAARS+wADDp8ABFNrAAMNowADj3sAAxVbAART2wAEVEsAAxEvAAQfjwAEVLsAAxS/AAMHXwADkMcAA5GHAARVKwAEGN8ABFWbAAMGbwADlCcAAw4LAAMJXwAEIIcABFYDAARWcwADErsABFbjAARXSCsAAWyMKwABbJAjAAFxLAAAEnlwIwADIMwAFwADINsABFq7AAMg3d8AAyDh3wADIOXfAAMg6dwjAAMhFAAHAAMhHwAEWsQdgA8AAXJMACMAAXDMAAATAAEQEBMAARDkIwABNdQABwABNd8ABFvcIwABeEwAABMAARN8IwABfEgACwABfFIQXwABfFsABFxIEwABE4gjAAF8SAALAAF8UwACXCMAAXxbAARcsBMAAROYIwABffgACwABfgAnAAF+CwAEXSATAAETnCMAAXxIAAsAAXxTAAJY2wABfFsABF2EEwABE6gjAAF+iAALAAF+kCcAAX6bAARd9BMAAROsIwABfEgACwABfFINdwABfFsABF5YEwABE7wjAAF8uAALAAF8wFcAAXzLAARewBMAARPIIwABfLgACwABfMAnAAF8ywAEXyQTAAET0CMAAXxIAAsAAXxSC4cAAXxbAARfiBMAARPUIwABfEgACwABfFIUHwABfFsABF/wEwABE9wjAAF8SAALAAF8Ugj/AAF8WwAEYFgTAAET4CMAAXxIAAsAAXxRTwABfFsABGDAEwABE+QjAAF8SAALAAF8UCcAAXxbAARhJBMAARPsIwABfEgACwABfFIFXwABfFsABGGIEwABE/AjAAF8SAALAAF8UIcAAXxbAARh8BMAARP0IwABfEgACwABfFBXAAF8WwAEYlQTAAET+CMAAXxIAAsAAXxSEEcAAXxbAARiuBMAARQQIwABfSQACwABfSwnAAF9NwAEYyATAAEUFCMAAX0kAAsAAX0sVwABfTcABGOEEwABFBgjAAF9JAALAAF9Lgj/AAF9NwAEY+gTAAEUHCMAAX0kAAsAAX0tTwABfTcABGRQEwABFCQjAAF9JAALAAF9LgVfAAF9NwAEZLQTAAEULCMAAX0kAAsAAX0uC4cAAX03AARlHBMAARQ0IwABfSQACwABfSyHAAF9NwAEZYQTAAEURCMAAX1oAAsAAX1wJwABfXsABGXoEwABFEgjAAF9aAALAAF9cFcAAX17AARmTBMAARRMIwABfWgACwABfXCHAAF9ewAEZrATAAEUUCMAAX1oAAsAAX1xTwABfXsABGcUEwABFFgjAAF8SAALAAF8UhBTAAF8WwAEZ3gTAAEUXCMAAX2gAAsAAX2oJwABfbMABGfgEwABFGAjAAF9oAALAAF9qFcAAX2zAARoRBMAARRoIwABfOgACwABfPAnAAF8+wAEaKgTAAEUcCMAAXzoAAsAAXzwVwABfPsABGkMEwABFHQjAAF86AALAAF88IcAAXz7AARpcBMAARR4IwABfOgACwABfPFPAAF8+wAEadQTAAEUfCMAAXzoAAsAAXzyBV8AAXz7AARqOBMAARSEIwABfEgACwABfFMAAjRjAAF8WwAEaqATAAEUjCMAAXxIAAsAAXxSDcMAAXxbAARrEBMAARScIwABfEgACwABfFMAAhW7AAF8WwAEa3gTAAEUqCMAAYRAAAsAAYRKBV8AAYRTAARr6BMAARSsIwABhEAACwABhEiHAAGEUwAEbFATAAEUsCMAAYRAAAsAAYRJTwABhFMABGy0EwABFLQjAAGEQAALAAGESgj/AAGEUwAEbRgTAAEUuCMAAYRAAAsAAYRIVwABhFMABG2AEwABFLwjAAGEQAALAAGESCcAAYRTAARt5BMAARTAIwABhEAACwABhEoLhwABhFMABG5IEwABFMQjAAGEQAALAAGEShQfAAGEUwAEbrATAAEUyCMAAYRAAAsAAYRKDXcAAYRTAARvGBMAARTUIwABhEAACwABhEoQRwABhFMABG+AEwABFNgjAAGEQAALAAGEShBTAAGEUwAEb+gTAAEU3CMAAYRAAAsAAYRLAAIqowABhFMABHBQEwABFOAjAAGEQAALAAGESwACFbsAAYRTAARwwBMAARTkIwABhEAACwABhEsAAlwjAAGEUwAEcTATAAEU6CMAAYRAAAsAAYRKDcMAAYRTAARxoBMAARTwIwABhEAACwABhEoQXwABhFMABHIIEwABFPQjAAGEQAALAAGESwACNGMAAYRTAARycBMAART4IwABhEAACwABhEsAAljbAAGEUwAEcuATAAEVBCMAAXxIAAsAAXxTAAIqowABfFsABHNQIwABeCgAABMAARVMIwABffgACwABfgBXAAF+CwAEc9wTAAEVUCMAAX34AAsAAX4AhwABfgsABHRAEwABFVQjAAF9+AALAAF+AU8AAX4LAAR0pBMAARVYIwABffgACwABfgIFXwABfgsABHUIEwABFVwjAAF9+AALAAF+Agj/AAF+CwAEdXATAAEVYCMAAX34AAsAAX4CC4cAAX4LAAR12BMAARVkIwABffgACwABfgIUHwABfgsABHZAEwABFWgjAAF9+AALAAF+Ag13AAF+CwAEdqgdgA8AAX34JwAEXTcABHPzAAR0VwAEdLsABHUfAAR1hwAEde8ABHZXAAR2vCMAAY1AAAAjAAGNcAAAEwABFXQjAAF+iAALAAF+kFcAAX6bAAR3+BMAARV4IwABfogACwABfpCHAAF+mwAEeFwTAAEVfCMAAX6IAAsAAX6RTwABfpsABHjAEwABFYAjAAF+iAALAAF+kgVfAAF+mwAEeSQTAAEVhCMAAX6IAAsAAX6SCP8AAX6bAAR5jBMAARWIIwABfogACwABfpILhwABfpsABHn0EwABFYwjAAF+iAALAAF+khQfAAF+mwAEelwTAAEVkCMAAX6IAAsAAX6SDXcAAX6bAAR6xBMAARWUIwABfogACwABfpIQRwABfpsABHssEwABFZgjAAF+iAALAAF+khBTAAF+mwAEe5QTAAEVnCMAAX6IAAsAAX6TAAJcIwABfpsABHv8EwABFaAjAAF+iAALAAF+kwACWNsAAX6bAAR8bB2ADwABfog3AAReCwAEeA8ABHhzAAR41wAEeTsABHmjAAR6CwAEenMABHrbAAR7QwAEe6sABHwTAAR8gCMAAj3IAAYkahKQEwABFaQdgA8AAXy4CwAEXzsABF7UHYAPAAGEQEsABG37AARtlwAEbGcABGzLAARr/wAEbS8ABG5fAARuxwAEby8ABG+XAARv/wAEcUcABHL3AARyHwAEcocABHBnAARxtwAEcNQdgA8AAX0kHwAEYzcABGObAARlmwAEZGcABGTLAARj/wAEZTAdgA8AAX1oEwAEZf8ABGZjAARmxwAEZygdgA8AAX2gCwAEZ/cABGhYHYAPAAF8SEsABGE7AARiawAEYgcABGDXAARhnwAEYG8ABF+fAARgBwAEXm8ABGLPAARnjwAEXMcABF2bAARcXwAEarcABHNnAARrJwAEa4wdgA8AAXzoFwAEaL8ABGkjAARphwAEaesABGpMIwACYBgAACMAAaSAAAsAAaSgVwABpKQkIwABpIAACwABpKBXAAGkpFQdgA8AAYUIAAwAAAAAAAPj/CMAAYbUAAcAAYbfAASDMAwAAAAAAAPB/CMAAYbUAAcAAYbfAASDkAwAAAAAAAPD/CMAAYbUAAcAAYbfAASD8AwAAAAAAAAAACMAAYbUAAcAAYbfAASEUAwAAAAAAAPA/CMAAYbUAAcAAYbfAASEsCMAAYdwAAAjAAGHqAAAHYAPAAGM7AArAAJigCMAAeRYAAATAAEcXBMAARxgEwABHGQSCbgTAAEcaBJowBKxGBMAARxsEwABHHAdgA8AA/n5WwACf+8AAofPAASFmwAEha8AAoDPAAKJjwACnpMAArHTAAKBrwACkW8AAqZzAAKyswAChE8AApJPAAKrswACs5MABIXDAASF1wACrXMAArRzAAKGDwAClc8AAq5TAASF4wACmG8AArATAAKCjwACim8AAowvAAKq0wACg28AAotPAAKXjwAClq8ABIX3AASGAwAEhg8AArVTAAKZTwAC/csABIYjAAKp8wACf+8AAofPAAKYbwAEha8AAoDPAAKJjwAEhZsAArHTAAKBrwACi08AAp6TAAKyswACgo8AAowvAAKmcwACs5MAAoNvAAKRbwACqtMAArRzAAKETwACkk8AAquzAAK1UwAEhcMABIXXAAKtcwAChg8AApXPAAKuUwAEheMAApePAAKwEwACtVMABIX3AAKp8wACim8AAn8PAAKWrwAC/csABIYjAAKZTwAEhgMABIYMEwABHHgTAAEcfBJkIBJpXBFsHYAPAAP5+BsABIu3AASLywAEi98AA72rAASL6wAEi/QTAAEZaBMAARlsEwABHIQTAAEciBMAARyMEhr4EqpoEwABHJATAAEclBMAARyYEwABHJwSb+QTAAEcoBMAARykEwABHKgTAAEcrBMAARywEwABHLQTAAEcuBMAARy8EwABHMAS7eATAAEcxBMAARzIEwABD7QSguQTAAEczBMAARzQEwABHNQSXHATAAEc2BMAARzcEwABHOATAAEc5BMAARzoEwABHOwTAAEc8BL2yBMAARz0EwABHPgTAAEc/BMAAR0AEwABHQQSEYATAAEdCBMAAR0MEwABHRATAAEdFBMAAR0YEwABHRwSAvQTAAEdIBMAAR0kEwABHSgTAAEdLBMAAR0wEwABHTQSEVwTAAEdOBMAAR08EwABHUATAAEdRBMAAR1IEwABHUwTAAEdUBJmwBMAAR1UEwABHVgS5iQTAAEdXBMAAR1gEqGYEwABHWQTAAEdaBMAAR1sEwABHXATAAEddBMAAR14EwABHXwTAAEdgBMAAR2EEwABHYgSCjATAAEdjBMAAR2QEwABHZQS0EATAAEdmBMAAR2cEwABHaATAAEdpBMAAR2oEwABHawTAAEdsBMAAR20EwABHbgTAAEdvBMAAR3AEwABHcQTAAEdyBMAAR3MEpW0EwABHdATAAEd1BMAAR3YEwABHdwTAAEd4BMAAR3kEwABHegTAAEd7BMAAR3wEwABGqgTAAEd9BMAAR34EwABHfwTAAEeABMAAR4EEwABHggTAAEeDBMAAR4QEwABHhQTAAEeGBMAAR4cEpK4EwABHiATAAEeJBMAAR4oEwABHiwTAAEeMBMAAR40EwABHjgTAAEePBMAAR5AEwABHkQTAAEeSBMAAR5MEwABHlATAAEeVBMAAR5YEwABHlwTAAEeYBMAAR5kEwABHmgTAAEebBMAAR5wEwABHnQTAAEeeBMAAR58EwABHoATAAEehBMAAR6IEwABHowTAAEekBMAAR6UEwABHpgTAAEenBMAAR6gEwABHqQTAAEeqBMAAR6sEwABHrATAAEetBMAAR64EwABHrwTAAEewBMAAR7EEwABHsgTAAEezBMAAR7QEwABHtQTAAEe2BMAAR7cEwABHuATAAEe5BMAAR7oEwABHuwTAAEe8BMAAR70EwABHvgSb7ATAAEe/BMAAR8AEwABHwQTAAEfCBMAAR8MEwABHxAScSwSW4wTAAEfFBMAAR8YEwABHxwTAAEfIBMAAR8kEwABHygTAAEfLBMAAR8wEwABHzQTAAEfOBMAAR88EwABH0ATAAEfRBMAAR9IEwABH0wTAAEfUBMAAR9UEwABH1gTAAEfXBMAAR9gEwABH2QTAAEfaBMAAR9sEwABH3ATAAEfdBMAAR94EwABH3wTAAEfgBMAAR+EEwABH4gSCeQTAAEfjBMAAR+QEgkEEhvkEwABH5QTAAEfmBMAAR+cEhFEEwABH6ASC4wTAAEfpBMAAR+oEwABH6wTAAEfsBMAAR+0EwABH7gTAAEfvBMAAR/AEwABH8QTAAEfyBMAAR/MEwABH9ATAAEf1BMAAR/YEwABH9wTAAEf4BMAAR/kEwABH+gTAAEf7BMAAR/wEh/EEwABH/QTAAEf+BMAAR/8EwABIAATAAEgBBMAASAIEnAEEnHIHYAPAAP5+gRHAASMfwAEjJMABIynAASL6wAEjLsABIzPAASM4wAEjO8ABIz7AASNDwAEjSMABI03AASNSwACky8ABI1XAAL9JwAEjWsABI1/AASNkwAEjacAAmD3AASNuwAEjc8ABI3jAASN9wAEjgsABI4XAASOKwAEi/cABI4/AASOUwAEjl8ABI5zAASOhwAEjpsABI6nAASOuwAEjs8ABI7jAASO9wAEjwsABI8fAASPMwAEjz8ABI9TAASPZwAEj3sABI+PAAO9/wAEj6MABI+vAASPwwAEj9cABI/rAASP/wAEkBMABJAnAASQMwAEkEcABJBbAASQbwAEkIMABJCXAASQqwAEkLcABJDLAASQ3wAEkPMABJEHAASRGwAEkS8ABJFDAASRTwAEkWMABJF3AASRgwAEkZcABJGrAASRtwAEkcsABJHfAASR8wAEkgcABJIbAASSLwAEkkMABJJXAASSawAEkn8ABJKLAASSnwAEkrMABJLHAASS0wAEjj8ABJLnAASS+wAEkw8ABJMjAASTNwAEk0sABJNfAASTcwAEk4cABJObAASTrwAEk8MABJPXAAST6wAEk/cABJQLAASUHwAElDMABJRHAASUWwAElG8ABJSDAASUlwAElKsABJS/AASU0wAElOcABJT7AASVDwAElSMABJU3AASVSwAElV8ABJVzAASVhwAElZsABJWnAASVuwAElc8ABJXjAASV9wAElgsABJYfAASWMwAElkcABJZbAASWbwAEloMABJaXAASWqwAElr8ABJbTAASW5wAElvsABJcPAASXIwAElzcABJdLAASXXwAEl3MABJeHAASXmwAEl68ABJfDAASX1wAEl+sABJf/AASYEwAEmCcABJg7AASYTwAEmGMABJh3AASYiwAEmJ8ABJizAASF9wACtVMABJjHAASY2wAEmO8ABJkDAASZFwAEmSsABJk/AASZUwAEmWcABJl7AASZjwAEmaMABJm3AASZywAEmd8ABJnzAAKN7wAEmf8ABJoTAASaJwAEmjsABJpPAASaYwAEjocAA8BDAASadwAEi98ABIvLAASagwAEmo8ABJqjAASatwAEmssABJrfAASa8wAEmwcABJsbAASbLwAEm0MABJtXAASbawAEm38ABJuTAASbpwAEm7sABJvPAASb4wAEm/cABJwLAAScHwAEnDMABJxHAAScWwAEnG8ABJyDAASclwAEnKsABJy/AASc0wAEmjsABJznAASc8wAEnQcABJ0bAASdJwAEnTMABJ1HAASdWwAEnW8ABJ17AASdjwAEnZsABJ2vAASdwwAEndcABJ3rAASd/wAEnhMABJ4nAASeOwAEnk8ABJ5jAASedwAEnosABJ6fAASeswAEnscABJ7bAASe7wAEnwMABJ8XAASfKwAEnzcABJ9LAASfXwAEn3MABJ+HAASfmwAEn68ABJ+4Eg9kEg9oEh2QEwABIBASD0ATAAEgFBMAASAYEwABIBwStcwSECASZdQSHKwSD6ATAAEgIBJqtBMAASAkElyUElnkEgnoEmU8EhAkEwABICgTAAEgLBMAASAwEwABIDQdgA8AA/n4ZwAEsPsABLEHAASxEwAEsR8ABLEzAASxPwAEsVMABLFnAASxewAEsYcABLGTAASxnwAEsasABLG3AASxywAEsdcABLHrAASx9wAEsgMABLIPAASyGwAEsicABLI7AASyTwAEsmASqtQQMB2ADwAD+fgLAAS0JwAEtDATAAEghAjff////AjnAAEjnBMAASSAIwACatgACwACauAnAAJq6wAEtLwTAAEkhCMAAmrYAAsAAmrgVwACausABLUgEwABJIgjAAJq2AALAAJq4IcAAmrrAAS1hBMAASSMIwACatgACwACauFPAAJq6wAEtegTAAEkkCMAAmrYAAsAAmriBV8AAmrrAAS2TBMAASSUIwACatgACwACauII/wACausABLa0EwABJJgjAAJq2AALAAJq4guHAAJq6wAEtxwTAAEknCMAAmrYAAsAAmriFB8AAmrrAAS3hBMAASSgIwACatgACwACauINdwACausABLfsEwABJKQjAAJq2AALAAJq4hBHAAJq6wAEuFQTAAEkqCMAAmrYAAsAAmriEFMAAmrrAAS4vBMAASSsIwACatgACwACauMAAlwjAAJq6wAEuSQTAAEksCMAAmrYAAsAAmrjAAJY2wACausABLmUEwABJLQjAAJq2AALAAJq4hBfAAJq6wAEugQTAAEkuCMAAmrYAAsAAmrjAAI0YwACausABLpsEwABJLwjAAJq2AALAAJq4wACKqMAAmrrAAS63BMAASTAIwACatgACwACauINwwACausABLtMEwABJMQjAAJq2AALAAJq4wACFbsAAmrrAAS7tBMAASTIIwACatgACwACauMAAhkbAAJq6wAEvCQTAAEkzCMAAmrYAAsAAmrjAAISuwACausABLyUEwABJNQjAAJq2AALAAJq4wABxisAAmrrAAS9BBMAASTcIwACatgACwACauMAAfirAAJq6wAEvXQTAAEk5CMAAmrYAAsAAmrjAAH2XwACausABL3kEwABJOwjAAJq2AALAAJq4wABrucAAmrrAAS+VBMAAST0IwACatgACwACauMAAavnAAJq6wAEvsQTAAEk/CMAAmrYAAsAAmrjAAHkywACausABL80EwABJQQjAAJq2AALAAJq4wABqxsAAmrrAAS/pBMAASUMIwACatgACwACauMAAapPAAJq6wAEwBQTAAElFCMAAmrYAAsAAmrjAAGogwACausABMCEEwABJRwjAAJq2AALAAJq4wABoH8AAmrrAATA9BMAASUgIwACatgACwACauMAAZ4fAAJq6wAEwWQTAAElJCMAAmrYAAsAAmriDSsAAmrrAATB1BMAASUoIwACatgACwACauMAAZTvAAJq6wAEwjwTAAElLCMAAmrYAAsAAmri05cAAmrrAATCrBMAASUwIwACatgACwACauIQOwACausABMMUEwABJTQjAAJq2AALAAJq4wABk3cAAmrrAATDfBMAASU4IwACatgACwACauLDwwACausABMPsEwABJTwjAAJq2AALAAJq4wABh9sAAmrrAATEVBMAASVAIwACatgACwACauMAAX+nAAJq6wAExMQTAAElRCMAAmrYAAsAAmrjAAF6+wACausABMU0EgdcElsgEg1MEg4AEvK8EwABIrgTAAELfBMAASV0EwABJXgTAAElfBMAASWAEwABJYQTAAEliBMAASWMEwABJZATAAEllBLQSBMAASWYEwABJZwTAAEloBMAASWkEwABJagTAAElrBMAASWwEwABJbQTAAEluBMAASW8EwABJcATAAElxBFYEnicEwABJcgTAAElzBMAASXQEs6UEg58EgpAEwABJdQTAAEl2BIPWBJakBIPDBMAASXcEwABJeATAAEl5BMAASXoEwABJewTAAEl8BMAASX0EwABJfgTAAEl/BMAASYAEwABJgQTAAEmCBMAASYMEwABJhATAAEmFBMAASYYEwABJhwSc4ATAAEmIBMAASYkEl4UElv4EwABJigTAAEmLBMAASYwEwABJjQTAAEmOBIPsBMAASY8EgKwEwABJkATAAEmRBMAASZIEwABJkwTAAEmUBMAASZUEwABJlgTAAEmXBMAASZgElwEEwABJmQSCbQS80gTAAEmaBMAASZsEwABJnATAAEmdBIKXBMAASZ4EwABJnwTAAEmgBMAASaEEwABJogSBvQQHBKAIBMAASaMEwABJpATAAEmlBIPNBIPvBIPCBJaIBMAASaYEwABJpwTAAEmoBMAASakEwABJqgTAAEmrBIc5BMAASawEgmsEwABJrQTAAEmuBIXFBMAASa8EgfsEllUEg2EEpSQEvxUEgcEEwABJsATAAEmxBMAASbIEwABJswTAAEm0BMAASbUElokEwABJtgTAAEm3BMAASbgEwABJuQTAAEm6BIbpBMAASbsEwABJvATAAEm9BMAASb4EodYEwABJvwSYswSW2ATAAEnABMAAQ/gEwABJwQSBsgSltwSClATAAEnCBMAAScMElvwEwABJxAdgA8AA/n6AtMABMWmDs4CewAExbMABMW+DuYOnwAExcsABMXXAATF4wAEsdcABMX3AATGCwAExh8ABMYzAATGRwAExlsABMZvAATGgwAExpcABMarAATGvwAExssABMbfAATG8wAExwcABMcbAATHLwAEx0MABMdXAATHawAEx38ABMeTAATHpwAEx7sABMfDAATHzwAEx+MABMf3AATICwAEyBcABMgjAAKUDwAEyC8ABMhDAALCMwAEyFcABMhjAATIbwAEyHsABMiPAATIowAEyLcABMjLAATI3wAEyPMABMkHAATJGwAEyS8ABMlDAATJVwAEyWsABMl/AATJkwAEyacABMm7AATJzwAEydsABMnvAATKAwAEyg8ABMobAATKLwAEykMABMpXAAKnUwAEymsABMp/AASRqwAEyosABMqfAATKqwAEyr8ABMrTAASR8wAEmrcABMrnAATK+wAEkgcABMsPAATLIwAEyzcABMtLAATLXwAEkhsABMtrAATLfwAEy4sABMuXAASSLwAEy6sABMu/AATL0wAEy+cABMvzAATMBwAC/eMABMwbAATMLwAEzEMABMxXAATMYwAEzGsABJLnAATMdwAEzIsABMyfAATMswAEzL8ABMzKBWcABMzXAATM4wAEzPcABM0LAATNHg2DAATNMwAEzUcABM1bAATNZwAEzXsABM2HAATNmwAEza8ABM27AATNzwAEzdsABM3nAATN8wAEzf8ABM4LAASQJwAEnW8ABM4XAATOKwAEzj8ABJPrAATOUwAEzmcABM57AATOjwAEzpsABM6vAATOwwAEztcABM7rAATO/wAEzwsABM8fAATPMwAEz0cABJFDAATPWwACqDMABM9nAATPewAEz4cABM+TAATPpwAElZsABM+7AATPzwAEnmMABM/bAATP5wAEz/MABNAHAATQGwAE0CQiUYgFgA8AA/n4ABMAASMQEwABJ+QTAAEjKBMAASMwEwABIxgTAAEi8BMAASfoEwABIvgTAAEi/BMAASMsEwABJ+wSnxwSnzATAAEjJBMAASMgEwABJ/ASD8wTAAEjNBKERBGoEgkkEwABIxQSAlgSBtgTAAEn9BMAASf4EwABIwATAAEjBBKegBMAASL0EwABIwgTAAEjDBMAASf8HYAPAAP5+JsABNubAATbrwAE28MABNvXAAO9swAE2+sABNv/AATcEwAE3CcABNw7AATcTwAE3GMAA73HAAO9/wAE3HcABNyDAATcjwAE3KMABNy3AATcywACoTMABNzXAATc6wAEkUMABNz3AATc/wAE3QsABN0fAATdKwAE3TcABN1LAATdXwAE3XMABN2HAATdkwAE3acABN27AATdzBLM6BLM0BMAASgAEszMEwABKAQSzIASzHwTAAEoCBMAASK8EwABKAwTAAEoEBMAASgUEwABKBgTAAEoHBLL/BLMBBLMABLIRBLH9BLIPB2ADwAD+fiXAASNSwAE4GMABNv/AASx9wAE4G8ABOB7AAO9/wAE3YcABNubAATcgwAE3KMABNx3AATcjwAEx7sABOCPAATgmwAE4K8ABOC7AATgxwAE4NsABMm7AATdXwAEn68ABODvAATdcwAE4QMABOEXAAThKwAEyc8ABOE/AAThUwAE4V8ABOFrAAThdwAC/ScABOGDAAThjB2ADvWkABMAASiEIwABmhwACwABmiQnAAGaLwAE5CATAAEoiCMAAZocAAsAAZokVwABmi8ABOSEEwABKIwjAAGaHAALAAGaJIcAAZovAATk6BMAASiQIwABmhwACwABmiVPAAGaLwAE5UwTAAEolCMAAZocAAsAAZomBV8AAZovAATlsBMAASiYIwABmhwACwABmiYI/wABmi8ABOYYHYAPAAGaHBsABOQ3AATkmwAE5P8ABOVjAATlxwAE5iwXAAGQ1sCUEwABKQAjAAGcXAAHAAGcZwAE5xwjAAGcjAAHAAGcqCQjAAGcjAAHAAGcqIQjAAGcjAAHAAGcqUwdgA8AAZyMEwAE528AA+V3AATnnwAE58wTAAEpRBMAASnUEwABKdgTAAEp3BLqPBMAASngEwABKeQdgA8AA/n4HwAE6HMABOiHAATomwAE6K8ABOi7AATozwACnpATAAEpJBMAASkoEwABKSwTAAEpMB1sIwAE6XMABOdvAATphwAD5XcABOmbAATnnwAE6a8ABOfMIwAD4RQJgA8AA/n5gA8AAZyMBwAD4SMABOnAHWwTAAKvMd8AAo+sACMAA+EUCYAPAAP5+YAPAAPrRAcAA+EjAATquBMAASowEwABKjgTAAEqQBMAASrcIwABndAACwABndgnAAGd4wAE65QTAAEq4CMAAZ3QAAsAAZ3YVwABneMABOv4EwABKuQjAAGd0AALAAGd2IcAAZ3jAATsXBMAASroIwABndAACwABndlPAAGd4wAE7MATAAEq7CMAAZ3QAAsAAZ3aBV8AAZ3jAATtJBMAASrwIwABndAACwABndoI/wABneMABO2MEwABKvQjAAGd0AALAAGd2guHAAGd4wAE7fQTAAEq+CMAAZ3QAAsAAZ3aFB8AAZ3jAATuXBMAASr8IwABndAACwABndoNdwABneMABO7EEwABKwAjAAGd0AALAAGd2hBHAAGd4wAE7ywTAAErBCMAAZ3QAAsAAZ3aEFMAAZ3jAATvlBMAASsIIwABndAACwABndsAAlwjAAGd4wAE7/wTAAErDCMAAZ3QAAsAAZ3bAAJY2wABneMABPBsEwABKxAjAAGd0AALAAGd2hBfAAGd4wAE8NwTAAErFCMAAZ3QAAsAAZ3bAAI0YwABneMABPFEEwABKxgjAAGd0AALAAGd2wACKqMAAZ3jAATxtBMAASscIwABndAACwABndoNwwABneMABPIkEwABKyAjAAGd0AALAAGd2wACFbsAAZ3jAATyjBMAASskIwABndAACwABndsAAhkbAAGd4wAE8vwTAAErKCMAAZ3QAAsAAZ3bAAISuwABneMABPNsEwABKywjAAGd0AALAAGd2wABxisAAZ3jAATz3BMAASswIwABndAACwABndsAAfirAAGd4wAE9EwTAAErNCMAAZ3QAAsAAZ3bAAH2XwABneMABPS8EwABKzgjAAGd0AALAAGd2wABrucAAZ3jAAT1LB2ADwABndBjAATrqwAE7A8ABOxzAATs1wAE7TsABO2jAATuCwAE7nMABO7bAATvQwAE76sABPATAATwgwAE8PMABPFbAATxywAE8jsABPKjAATzEwAE84MABPPzAAT0YwAE9NMABPVAEwABK7QjAAJtDAALAAJtFIcAAm0fAAT3PBMAASu8IwACbQwACwACbRRXAAJtHwAE96ATAAErxCMAAm0MAAsAAm0UJwACbR8ABPgEEwABK9wdgA8AAZ9gDwAD8H8AA/EjAAPxfBMAASv0HYAPAAGf5FMAA/HbAAP1bwAD9EsAA/XLAAP0pwAD858AA/J/AAPy3wAD978AA8Y7AAPzPwADxQMAA8VrAAPGmwAD91cAA8XTAAP2JwAD9QcAA/aHAAP27BMAASxsHYAPAAGhLDMAA8h3AAPJLwADyNMAA8b7AAPHtwADyBcAA8dXAAPJiwADyesAA8pLAAPKqwADywgTAAEtwBMAAS4cEwABLpwjAAGkgAALAAGkoCcAAaSlTCMAAaSAAAsAAaSgJwABpKYFXA4J2SWjCJTw9A////////+9/BJ0vBMAATAgEwABMCgTAAEwMBMAATA4IwABp6AABwABp6sAAm+YIwABp8AABwABp8sAAm+kIwABqfAABwABqfsAAnDMIwABqEwABwABqFcAAnF0IwABprAABwABprsAAskMEwABL8gjAAGqEAAHAAGqGwAE/cwTAAEv2CMAAaowAAcAAao7AAT+HBMAATGEEwABMcgTAAEx0BMAATIkEwABMkwTAAEy/BJasBMAATNAEwABM0QSfDATAAEzSBMAATNMEwABM1ASfCwSfCQTAAEzVBMAATNYEwABM1wS+uQTAAEzYBJ8KBMAATNkEwABM2gTAAEzbB2ADwAD+fhXAAT+8wAE/wcABP8bAAL96wAE/ycABP87AAT/TwAE/2MAAv33AAL+AwAE/28ABP97AAT/jwAE/6MABP+3AAT/wwAC/hsABP/XAAT/4wAE//cABQAIElqsHYAPAAP5+DcABP8HAAT/GwAC/esABP8nAAT/OwAE/08ABP9jAAL99wAC/gMABP+jAAT/twAE/8MAAv4YHWwTAAT+5wAFAB8ABQGPAAUBmCMAA+EUCYAPAAP5+XQPAAP07AWADwAD+fgHAAPhIwAFAogjAAGwGAAHAAGwIdwSxVASxVgSxWASChQTAAEzeBLFjBLFfBLFlBLFnBLFpB2ADwAD+fgvAAJ+LwAFA48ABQObAAUDpwAFA7MABQO/AAUD0wAFA98ABQPrAAUD9wAFBAATAAEznCL14AAS9ewm9fAm9fYM5vX4JCL14AAS9exW9fBW9fYM5vX4JBMAATQYIwABteAACwABtegnAAG18wAFBYATAAE0ICMAAbXgAAsAAbXqCP8AAbXzAAUF5BMAATQsIwABteAACwABtehXAAG18wAFBkwTAAE0OCMAAbXgAAsAAbXqBV8AAbXzAAUGsBMAATRAIwABteAACwABtelPAAG18wAFBxgTAAE0SCMAAbXgAAsAAbXqC4cAAbXzAAUHfBMAATRkIwABteAACwABteiHAAG18wAFB+QTAAE0bCMAAbXgAAsAAbXqFB8AAbXzAAUISB2ADwABteAjAAUFlwAFBmMABQf7AAUHLwAFBscABQX7AAUHkwAFC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AS/uwAEwCsABMCbAATCwwAEwQsABMF7AATB6wAEwlMABMMrAATDkwAExAMABMRrAATE2wAExUgTAAFWGCMAAmugAAsAAmuoJwACa7MABV6IEwABVhwjAAJroAALAAJrqFcAAmuzAAVe7BMAAVYgIwACa6AACwACa6iHAAJrswAFX1ATAAFWJCMAAmugAAsAAmupTwACa7MABV+0EwABVigjAAJroAALAAJrqgVfAAJrswAFYBgTAAFWLCMAAmugAAsAAmuqCP8AAmuzAAVggBMAAVYwIwACa6AACwACa6oLhwACa7MABWDoEwABVjQjAAJroAALAAJrqhQfAAJrswAFYVATAAFWOCMAAmugAAsAAmuqDXcAAmuzAAVhuBMAAVY8IwACa6AACwACa6oQRwACa7MABWIgEwABVkAjAAJroAALAAJrqhBTAAJrswAFYogTAAFWRCMAAmugAAsAAmurAAJcIwACa7MABWLwEwABVkgjAAJroAALAAJrqwACWNsAAmuzAAVjYBMAAVZMIwACa6AACwACa6oQXwACa7MABWPQHYAPAAJroDsABV6fAAVfAwAFX2cABV/LAAVgLwAFYJcABWD/AAVhZwAFYc8ABWI3AAVinwAFYwcABWN3AAVj5BIbsBIV9BMAAVoIIwACFrQAACMAAhbUAAATAAFaTCMAAgOIAAsAAgOQJwACA5sABWWcEwABWlAjAAIDiAALAAIDkIcAAgObAAVmABMAAVpUIwACA4gACwACA5BXAAIDmwAFZmQTAAFaWCMAAgOIAAsAAgOSC4cAAgObAAVmyBMAAVpcIwACA4gACwACA5IUHwACA5sABWcwEwABWmAjAAIDiAALAAIDkg13AAIDmwAFZ5gTAAFaZCMAAgOIAAsAAgOSEEcAAgObAAVoABMAAVpsIwACA4gACwACA5IQUwACA5sABWhoEwABWnAjAAIDiAALAAIDkwACXCMAAgObAAVo0BMAAVp4IwACA4gACwACA5MAAljbAAIDmwAFaUATAAFafCMAAgOIAAsAAgOSEF8AAgObAAVpsBMAAVqAIwACA4gACwACA5MAAjRjAAIDmwAFahgTAAFahCMAAgOIAAsAAgORTwACA5sABWqIEwABWogjAAIDiAALAAIDkgVfAAIDmwAFauwTAAFajCMAAgOIAAsAAgOSCP8AAgObAAVrV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A8AAhCEFwAFhfMABYZXAAWGuwAFhx8ABYeAHYAPAAP5+A8AAsInAAL9DwAC/SQdgA8AAhZMEwAFbFcABWzPAAVtRwAFbbwjAAIZdAAAIwACGVgAACMAAhmkAAAjAAIZiAAAIwACGhAAACMAAhqwAAAjAAIakAAAIwACGjAAACMAAhrMAAAjAAIaUAAAIwACGzwAACMAAhscAAAjAAIbgAAAIwACG2AAACMAAhugAAAjAAIb4AAAIwACHAAAACMAAhxUAAAjAAIcHAAAIwACHDgAACMAAhnAAAAjAAIc8AAAIwACHMgAACMAAhxwAAAjAAIciAAAIwACGnAAACMAAhy0AAAjAAIc3AAAHYAPAAIdeA8ABBNTAAPuIwAD7vgjAAIdrAAPAAIdtwAEE1MAAh27AALJDwACHb3kHYAPAAId8FsABAf3AAQIUwAEEBMABAvXAAQMMwAEDJMABAzzAAQNUwAED0sABAqvAAQLDwAEC28ABA57AAQNswAEDuMABA4TAAQJ5wAECkcABAl/AAQIrwAECRcABA+oIwACHnAACwACHnsABAf3AAIefwACcNgjAAIfBAALAAIeewAECFMAAh5/AAJw4CMAAh5wAAsAAh57AAQQEwACHn8AAt0sIwACHnAACwACHnsABAvXAAIefwACcVQjAAIecAALAAIeewAEDDMAAh5/AAJxXCMAAh5wAAsAAh57AAQMkwACHn8AAnFoIwACHnAACwACHnsABAzzAAIefwACcYAjAAIecAALAAIeewAEDVMAAh5/AAJxiCMAAh5wAAsAAh57AAQPSwACHn8AAnF0IwACHnAACwACHnsABAqvAAIefwACcUgjAAIecAALAAIeewAECw8AAh5/AAJxPCMAAh5wAAsAAh57AAQLbwACHn8AAnE8IwACHnAACwACHnsABA57AAIefwACcPgjAAIecAALAAIeewAEDbMAAh5/AAJw7CMAAh5wAAsAAh57AAQO4wACHn8AAnEMIwACHnAACwACHnsABA4TAAIefwACcQQjAAIecAALAAIeewAECecAAh5/AAJxMCMAAh5wAAsAAh57AAQKRwACHn8AAnEYIwACHnAACwACHnsABAl/AAIefwACcSQjAAIfHAALAAIeewAECK8AAh5/AAJvmCMAAh8cAAsAAh57AAQJFwACHn8AAm+kIwACHzQACwACHnsABA+rAAIefwACcMwTAAFtMCMAAiA0AAsAAiA8hwACIEcABZYsHYAPAAIgNBMAA/mnAAP47wAFlkMAA/lIEwABbUQdgA8AAiA0DwAD+O8ABZZDAAP5SB2ADwACIDQLAAP47wAD+UgdgA8AAiA0BwAD+aQTAAFttB2ADwACIGwAHYAPAAIidA8ABSZPAAV1WwAFJegTAAFuPCMAAiMkAAsAAiMsJwACIzcABZhIEwABbkAjAAIjJAALAAIjLFcAAiM3AAWYrBMAAW5EIwACIyQACwACIyyHAAIjNwAFmRATAAFuSCMAAiMkAAsAAiMtTwACIzcABZl0HYAPAAIjJBMABZhfAAWYwwAFmScABZmIIky8BYAO2MQAIwACJ1QAACMAAiaUAAAjAAImxAAAIwACJvQAACMAAieEAAAjAAInJAAAEwABcDQjAAIoGAALAAIoICcAAigrAAWbBBMAAXA4IwACKBgACwACKCBXAAIoKwAFm2gTAAFwQCMAAigYAAsAAigiCP8AAigrAAWbzBMAAXBEIwACKBgACwACKCILhwACKCsABZw0EwABcEgjAAIoGAALAAIoIU8AAigrAAWcnBMAAXBMIwACKBgACwACKCIFXwACKCsABZ0AEwABcFAjAAIoGAALAAIoIIcAAigrAAWdaB2ADwACKBgfAAWbGwAFm38ABZ1/AAWcswAFnRcABZvjAAWcSCMAAq2YAAsAAi0YAwACLRxUIwACrkQACwACLRgDAAItHCQdgA8AAi04DwAEIncABEXbAAQi2CMAAq/0AAAdgA8AA/n4DwACcQYFrwACcOwjAAKwxAAAIwACrzQABwACr2MABZ+YIwACrwAAACMAAq+YAAAjAAKvvAAAIwACsRgAACMAArD4AAAdgA8AA/n4CgWvAALSmB2ADwAD+fgbAAJxBwACd3cAAowvAAK0cwAClq8AAqEwHYAPAAP5+BsAAuyiBa8AApXPAAJ8awACqDMAApTsHYAPAAP5+A8AAuVbAAJw2wAC0pgdgA8AA/n4BwACd3QdgA8AA/n4CgWvAALR0B2ADwAD+fgLAAJ8awACmiwdgA8AA/n4KwAC5VoFrwACeD8AAtKbAAJ5EwAC01sAAtHSAm8AAs7PAALsoB2ADwAD+fgTAALsowAC1CIFrwAC0dAdgA8AA/n4JwACzs8AAtQiBa8AAng/AALSmwACeRMAAtNbAAJ3dwAC0dAdgA8AA/n4GwAC7KMAApXPAAKoMwAClO8AAobvAAJ8aB2ADwAD+fgTAALlWwACeD8AAnd3AALWpB2ADwAD+fgHAALOzB2ADwAD+fgHAALsoB2ADwAD+fgLAALlWwAC7KAdgA8AA/n4FwAC7KMAAtQiBa8AAnd3AALR0B2ADwAD+fgXAAJ3dwAC0dMAAng/AALSmwAC01gdgA8AA/n4FwAC5VsAAng/AAJ3dwAC1qcAAtHQHYAPAAP5+BMAAng/AAJxBwAC1CMAAuygHYAPAAP5+CcAAnDvAALSmwACeRMAAtNbAALdLwACd3cAAtHSBa8AAuygHYAPAAP5+BsAAnEHAAJw7wAC7KMAAtHTAAKMLwACqtAdgA8AA/n4EwACyE8AApQPAAKnUwACsrAdgA8AA/n4GwACg28AApQPAAKQjwACp1MAArHTAAKysB2ADwACN/wAHYAPAAI4YAAdgA8AAjlYAB2ADwACOlAAHYAPAAJWYAAdgA8AAjm4AB2ADwACOjwAIwABsBgABwABsCAAIwACPWAAACsAAkz0Iky8BYAO9FgAHWxDAAJw2wACcOMAAnDjAAJw2wAC1csAAsrDAALKwwAC1csAAnEHAAJw+wACcQ8AAnDvAAJw7wACcQ8AAnD7AAJxBCMAA+EUCYAPAAP5+YAPAAP5+AcAA+EjAAWq6BMAAYJwIwACTCAACwACTCgnAAJMMwAFrGAdgA8AAkwgBwAFrHQdgA8AA/Jd/wACGRsAAhkbAAIZGwACGRsAAhkbAAIZGwACGRsAAhkbAAIZGwACFbsAAhW7AAIZGwACGRsAAhW7AAIZGwACGRsAAhkbAAIZGwACGRsAAhkbAAIZGwACGRsAAhkbAAIZGwACGRsAAhkbAAIZGwACGRsAAhkbAAIZGwACGRsAAhkbAAIVuU8AAhkaDcAlTU8AAhkaC4YUHU1PAAJY2U4I/UxUVFRUVFRUVFRXAAI0YwACKqFNTU4QXwACGRgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJhBTAAIZGwACXCFMJwACGRgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJg11ThBFTCsAAmb8EwABitQTAAGK3BMAAYrkEwABiuwTAAGK/BMAAYsEEwABiwwTAAGLFBMAAXcMEwABiyATA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wAFvuQdbCMAAnkTAALTWwACd3cAAtHTAAJ4PwAC0psAAnEHAAJw7CMAA+EUCYAPAAP5+YAPAAP5+AcAA+EjAAXcTCMAAxzgAAcAAxzsACMAAxykAAcAAxyzAAXdRBMAAbTIIwAC1BAAABcAAtS7AAGuQBcAAtS7AAGxIBMAAbYEEnRoHYAPAAP5+A8ABd4rAAT+5wAF3jwTAAG3jBMAAbfoIwAC1zQACwAC1zwnAALXRwAF3qwTAAG37CMAAtc0AAsAAtc8VwAC10cABd8QEwABt/AjAALXNAALAALXPIcAAtdHAAXfdBMAAbf0IwAC1zQACwAC1z1PAALXRwAF39gTAAG3+CMAAtc0AAsAAtc+BV8AAtdHAAXgPBMAAbf8IwAC1zQACwAC1z4I/wAC10cABeCkEwABuAAjAALXNAALAALXPguHAALXRwAF4QwTAAG4BCMAAtc0AAsAAtc+FB8AAtdHAAXhdBMAAbgIIwAC1zQACwAC1z4NdwAC10cABeHcEwABuAwjAALXNAALAALXPhBHAALXRwAF4kQTAAG4ECMAAtc0AAsAAtc+EFMAAtdHAAXirBMAAbgUIwAC1zQACwAC1z8AAlwjAALXRwAF4xQdgA8AAtc0MwAF3sMABd8nAAXfiwAF3+8ABeBTAAXguwAF4SMABeGLAAXh8wAF4lsABeLDAAXjKBMAAbgoEvI0EwABuDQTAAG4OBMAAbhAEwABuEgTAAG4UBMAAbhYEwABuGATAAG4aBMAAbhwEwABuHgjAALEMAVsBwACxD8ABdXsIwAC3GAAACMAA44wAAcAA4493AjnAAEoRAjnAAG5SAjnAAG5TAjfkIHDbAjnAAG5UAjnAAG5VAjnAAG5WAjnAAG5XAjnAAG5YAjnAAG5ZAjnAAG5aAjnAAG5bAjnAAG5cAjnAAG5dAjnAAG5eAjnAAG5fAjnAAG5gAjnAAG5hAjnAAG5iAjfmXlpRAjnAAG5jAjnAAG5kAjfCRBRTAjnAAG5lAjnAAG5mAjfh4c3mAjnAAG5nAjnAAG5oAjnAAG5pAjnAAG5qAjnAAG5rAjnAAG5sAjnAAG5tAjnAAG5uAjnAAG5vAjnAAG5wAjnAAG5xAjnAAG5yAjnAAG5zAjnAAG50AjnAAG51Ajfom37GAjnAAG52AjnAAG53AjfEiB0FAjnAAG54AjnAAG55Ajffonz4AjnAAG56AjnAAG57AjnAAG58AjnAAG59AjnAAG5+AjnAAG5/AjnAAG6AAjnAAG6BAjnAAG6CAjnAAG6DAjnAAG6EAjnAAG6FAjnAAG6GAjnAAG6HAjnAAG6IAjfq19K7AjnAAG6JB2ADwAD8l0DAAXl8wAF5gsABeYjAAXmOwAF5lMABeZrAAXmgwAF5psABeazAAXmywAF5uMABeb7AAXnEwAF5ysABedDAAXnWwAF53MABeeLAAXnowAF57sABefTAAXn6wAF6AMABegbAAXoMwAF6EsABehjAAXoewAF6JMABeirAAXowwAF6NsABejzAAXpCwAF6SMABek7AAXpUwAF6WsABemDAAXpmwAF6bMABenLAAXp4wAF6fsABeoTAAXqKwAF6kMABepbAAXqcwAF6osABeqjAAXquwAF6tMABerrAAXrAwAF6xsABeszAAXrSwAF62MABet7AAXrkwAF66sABevDAAXr2B2ADwAD8l0CFB8AAljbAAIVuwAB9l4UHwACWNsAAhW7AAH2XhQfAAJY2wACFbsAAfZeFB8AAljbAAIVuwAB9l4I/hBHAAI0YwABxioI/hBHAAI0YwABxioI/hBHAAI0YwABxioI/hBHAAI0YwABxioFXwACXCINwwABruYFXwACXCINwwABruYFXwACXCINwwABruYFXwACXCINwwABruYLhhBTAAIqowAB+KoLhhBTAAIqowAB+KoLhhBTAAIqowAB+KoLhhBTAAIqowAB+KgI5wABupwI5wABuqAI5wABuqQI5wABuqgI3+VbCWwI5wABuqwI5wABurAI5wABurQI5wABurgI30oNbAQI35DGFvgI5wABurwI5wABusAI5wABusQI5wABusgI5wABuswI5wAButAI5wAButQI3z8GdxgI35AyhzAI37eksbwI5wAButgI5wAButwI5wABuuAI5wABuuQI5wABuugI5wABuuwI5wABuvAI5wABuvQI5wABuvgI3xspjUQI31CkpZwI357cKhQI37hshOAI5wABuvwI5wABuwAI5wABuwQI5wABuwgI5wABuwwI5wABuxAI5wABuxQI5wABuxgI5wABuxwI5wABuyAI5wABuyQI5wABuygI5wABuywI30GqgcAI32aTBFgI33jdsCAI350h3TAI39LC8tQI3+RwMswI5wABuzAI5wABuzQI5wABuzgI5wABuzwI5wABu0AI5wABu0QI5wABu0gI5wABu0wI5wABu1AI5wABu1QI5wABu1gdgA8AA/JdAwAF81MABfNrAAXzgwAF85sABfOzAAXzywAF8+MABfP7AAX0EwAF9CsABfRDAAX0WwAF9HMABfSLAAX0owAF9LsABfTTAAX06wAF9QMABfUbAAX1MwAF9UsABfVjAAX1ewAF9ZMABfWrAAX1wwAF9dsABfXzAAX2CwAF9iMABfY7AAX2UwAF9msABfaDAAX2mwAF9rMABfbLAAX24wAF9vsABfcTAAX3KwAF90MABfdbAAX3cwAF94sABfejAAX3uwAF99MABffrAAX4AwAF+BsABfgzAAX4SwAF+GMABfh7AAX4kwAF+KsABfjDAAX42wAF+PMABfkLAAX5IwAF+TgI5wABu3gjAAOOMAAHAAOOPAAjAALdBAAAIwAC3WAAACMAAt4AAAAjAALeaAAAIwAC3IgAABMAAb6AIwAD6mAACwAD6msABf5HAAPqbeQrAALiUCMAAu+EAAAjAAMu/AAAEwABv9QjAAPqEAAHAAPqGwAF/vQjAAL4pAAAKwAC5eQTAAHBrCMAAy9IAAcAAy9TAAX/dBMAAcJcIwADL0gABwADL1MABf/EKwAC4kgrAALiTCMAAzncBYAPAAP2hAAXAALhHwABxSQXAALhHwABxSgrAALieCMAAvWgBYAPAAPyNAsAAvWrAAX/RwAC9a8ABgC4KwAC4nwjAAL1oAWADwAD8jQLAAL1qwAF/0cAAvWvAAYBQCsAAuKAIwAC9aAFgA8AA/I0CwAC9asABf9HAAL1rwAGAcgrAALihCMAAvWgBYAPAAPyNAsAAvWrAAX/RwAC9a8ABgJQKwAC4ogjAAL1oAWADwAD8jQLAAL1qwAF/0cAAvWvAAYC2CsAAuKMIwAC9aAFgA8AA/I0CwAC9asABf9HAAL1rwAGA2ArAALikCMAAvWgBXgMABQUFYAPAAL2lYAPAAL2UYAPAAL2lYAPAAP3kYAPAAP5SAAFXA8AAuGsAYAPAAL1aAsAAvWrAAX/RwAC9a8ABgPoKwAC4pQjAAL1oAV4DAAQEBGADwAC9pWADwAC9lGADwAC9pWEDAFwAAVcDwAC4bABcAsAAvWrAAX/RwAC9a8ABgUkKwAC4pgjAAL1oAV4DAAUFBWADwAC9pWADwAC9lGADwAC9pWADwAD7bWEDAFwAAVcDwAC4bQBgA8AAvU0CwAC9asABf9HAAL1rwAGBiwrAALinCMAAvWgBXgMABQUFYAPAAL2lYAPAAL2UYAPAAL2lYAPAAPttYQMBYAPAAL1NXAABVwPAALhuAGADwAC9TQLAAL1qwAF/0cAAvWvAAYHYCsAAuKgIwAC9aAFeAwAEBARgA8AAvaVgA8AAvZRgA8AAvaVgA8AA/n4AAVcDwAC4bwBcAsAAvWrAAX/RwAC9a8ABgisKwAC4qgjAAL1oAV4DAAUFBWADwAC9pWADwAC9lGADwAC9pWADwAC9bl0DwAD9bQJbWwABVwPAALhwAGADwAC9pQLAAL1qwAF/0cAAvWvAAYJvCsAAuJwIwAC9aAFeAwAFBQVgA8AAvaVgA8AAvZRgA8AAvaVgA8AA/eRgA8AA/lIAAVcDwAC4ZABcAsAAvWrAAX/RwAC9a8ABgsEEwABxdAjAAMvNAAHAAMvPwAGDCwjAAPqYAALAAPqawAF/kcAA+pvAAO9qBMAAcXcIwADLzQABwADLz8ABgzYEwABxegjAAMvNAAHAAMvPwAGDSgTAAHF8CMAAy80AAcAAy8/AAYNeBMAAcX4IwADLzQABwADLz8ABg3IKwAC4jgTAAHGdCMAAy80AAcAAy8/AAYOLCsAAuKkIwAC9gwANwAC9hXnAAL2GecAAvYd5wAC9iHnAAL2JecAAvYp5wAC9i3nAAL2MecAAvY15wAC9jnnAAL2PecAAvZB5wAC9kXkEwABx8QTAAHHyCMAA+pgAAsAA+prAAYPswAD6m8ABg/EEwABx8wjAAMvNAAHAAMvPwAGEDQTAAHH0CMAAy80AAcAAy8/AAYQhBMAAcfUIwAD6mAACwAD6msABg+zAAPqbwAGENQTAAHH2CMAAy80AAcAAy8/AAYRRBMAAcfcIwADLzQABwADLz8ABhGUEwABx+AjAAPqYAALAAPqawAGD7MAA+pvAAYR5BMAAcfkIwADLzQABwADLz8ABhJUEwABx+gjAAMvNAAHAAMvPwAGEqQTAAHH7CMAAy80AAcAAy8/AAYS9BMAAcfwIwADLzQABwADLz8ABhNEEwABx/QjAAMvNAAHAAMvPwAGE5QTAAHH+CMAAy80AAcAAy8/AAYT5CsAAwRAKwADBLgrAAL5oCsAA9nkKwAD2eArAAL5nCsAAwnYKwAD64ArAAL5rBMAAc1YHYAPAAP5+BMAAp9zAAKvMwACj68ABhToDAAAAAAAAQEMDAAAAAAAAJEADAAAAAAAAWUADAAAAAABAj0ADAAAAAACIw0ADAAAAAABq+EADAAAAAICELkEDAAAAANASY0EDAAAAAITXl0EDAAAAAGXNzUEDAAAAIF+gAkIDAAAA6HZIN0IDAAAAopQabUIDAABA5ZwwokIDAACQHsS81kIDAAA0JvVrDEMDAIDgN3nDQUMDAKDYhVc0dkMDAMhOZ23Bq0MDAD2RYORY4UMDQIy1eB2vFUQDUO/i1uQaS0QDktVNBs/wgEQHYAPAAPtJF8ABISzAAYVgwAGFacABhXLAAYV7wAGFhMABhY3AAYWWwAGFn8ABhajAAYWxwAGFusABhcPAAYXMwAGF1cABhd7AAYXnwAGF8MABhfnAAYYCwAGGC8ABhhTAAYYdAjeH/wI3wAD//wI3gMACN8AA3AACN4P/B2ADwAD8lwQJhBrAAYaKwAGGjgjAAMcQAALAAMcGd8AAxweEGgjAAMcQAALAAMcGAMAAxweEGgjAAMb2AAHAAMbvhBoCN4C9B2ADwAD8lwPAAMA8wADARMABhuYIwADHOAABwADHO3cIwADHewAAApEEwABz4QI3gP8IwADJMAABwADJMwAIwADG3wABwADG4gAEwAB0TAjAAMgzAAXAAMg2wAGHNMAAyDd3wADIOHfAAMg5AMAAyDoACMAAyDMABcAAyDbAAYc0wADIN3fAAMg4AMAAyDl3wADIOgAEllIIwADIMwAFwADINsABh3/AAMg3d8AAyDgAwADIOQDAAMg6AATAAHROCMAAyHUAAsAAyHd5wADIeXkIwADIrQABwADIsHkKwADFpAjAAMlAAALAAMcGd8AAxwfAAYcYCMAAyUAAAsAAxwYAwADHB8ABhxgIwADJPQABwADG78ABhxgHYAPAAPyXAcAAmLAIwADJ+AAAB2ADwAD8lwSEGsABhorAAYaOwACbbAjAAMcpAAHAAMcswAGG/gI3wAD8AATAAHTqCMAAy80AAcAAy8/AAYhBBMAAdQEIwADLzQABwADLz8ABiFUEwAB1AgjAAMvNAAHAAMvPwAGIaQTAAHUECMAAy80AAcAAy8/AAYh9AjjAAH9aAjjAAH0AAjjAAH0QCMAA+pgAAsAA+prAAX+RwAD6m3cEwAB1TgjAAMvNAAHAAMvPwAGItwTAAHVjCMAAy80AAcAAy8/AAYjLBMAAdWUIwADLzQABwADLz8ABiN8EwAB1ZgjAAMvNAAHAAMvPwAGI8wTAAHVpCMAAy80AAcAAy8/AAYkHBMAAdXUIwADLzQABwADLz8ABiRsEwAB1dwjAAMvNAAHAAMvPwAGJLwTAAHV5CMAAy80AAcAAy8/AAYlDBMAAdXwIwADLzQABwADLz8ABiVcEwAB1fgjAAMvNAAHAAMvPwAGJawTAAHWACMAAy80AAcAAy8/AAYl/BMAAdYIIwADLzQABwADLz8ABiZMEwAB1hAjAAMvNAAHAAMvPwAGJpwTAAHWHCMAAy80AAcAAy8/AAYm7BMAAdYkIwADLzQABwADLz8ABic8EwAB1iwjAAMvNAAHAAMvPwAGJ4wTAAHWNCMAAy80AAcAAy8/AAYn3BMAAdY8IwADLzQABwADLz8ABigsEwAB1kgjAAMvNAAHAAMvPwAGKHwTAAHWVCMAAy80AAcAAy8/AAYozBMAAdZcIwADLzQABwADLz8ABikcEwAB1owjAAMvNAAHAAMvPwAGKWwjAAMtlAAAEwAB1pQjAAMvNAAHAAMvPwAGKdgTAAHWmCMAAy80AAcAAy8/AAYqKBMAAdagIwADLzQABwADLz8ABip4EwAB1qQjAAMvNAAHAAMvPwAGKsgTAAHWrCMAAy80AAcAAy8/AAYrGBMAAdawIwADLzQABwADLz8ABitoEwAB1rwjAAMvNAAHAAMvPwAGK7gjAAMtoAAAEwAB1xAjAAMvNAAHAAMvPwAGLCQTAAHXFCMAAy80AAcAAy8/AAYsdBMAAdc8IwADLzQABwADLz8ABizEEwAB10QjAAMvNAAHAAMvPwAGLRQTAAHXTCMAAy80AAcAAy8/AAYtZBMAAddUIwADLzQABwADLz8ABi20EwAB12QjAAMvNAAHAAMvPwAGLgQTAAHXbCMAAy80AAcAAy8/AAYuVBMAAddwIwADLzQABwADLz8ABi6kEwAB1/gjAAMvNAAHAAMvPwAGLvQTAAHYDCMAAy9IAAcAAy9TAAYvRAjeAyQI3gMoCN4DLAjeAzAI3gM0CN4DOAjeAzwI3gNACN4DiAjeBLAI3gS0CN4EuAjeBLwI3gTACN4ExAjeBMwI3gTQCN4GQAjeBkQI3gZICN4GTAjeBlAI3gZUCN4GWAjeBlwI3gZgCN4GZAjeBmgI3gZsCN4GcAjeBnQI3gZ4CN4GfAjeBoAI3gaECN4GlAjeBpgI3gacCN4GoAjeBqgI3gawCN4GtAjeBrwI3gbwCN4HDAjeB8wI3gfQCN4H1AjeB9gI3gfcCN4H4AjeB+QI3gfoCN4H7AjeB/AI3gf4CN4H/AjeCVwTAAHZCCMAA+oQAAcAA+obAAYzNBMAAdkQIwAD6hAABwAD6hsABjOEEwAB2RgjAAPqEAAHAAPqGwAGM9QTAAHZICMAA+oQAAcAA+obAAY0JBMAAdkoIwAD6hAABwAD6hsABjR0EwAB2TAjAAPqEAAHAAPqGwAGNMQTAAHZOCMAA+oQAAcAA+obAAY1FBMAAdlAIwAD6hAABwAD6hsABjVkEwAB2UgjAAPqEAAHAAPqGwAGNbQTAAHZUCMAA+oQAAcAA+obAAY2BBMAAdlYIwAD6hAABwAD6hsABjZUEwAB2WAjAAPqEAAHAAPqGwAGNqQTAAHZaCMAA+oQAAcAA+obAAY29BMAAdlwIwAD6hAABwAD6hsABjdEEwAB2XgjAAPqEAAHAAPqGwAGN5QTAAHZgCMAA+oQAAcAA+obAAY35BMAAdmIIwAD6hAABwAD6hsABjg0EwAB2ZAjAAPqEAAHAAPqGwAGOIQTAAHZmCMAA+oQAAcAA+obAAY41BMAAdmgIwAD6hAABwAD6hsABjkkEwAB2agjAAPqEAAHAAPqGwAGOXQTAAHZsCMAA+oQAAcAA+obAAY5xBMAAdm4IwAD6hAABwAD6hsABjoUEwAB2cAjAAPqEAAHAAPqGwAGOmQTAAHZyCMAA+oQAAcAA+obAAY6tBMAAdnQIwAD6hAABwAD6hsABjsEEwAB2dgjAAPqEAAHAAPqGwAGO1QTAAHZ4CMAA+oQAAcAA+obAAY7pBMAAdnoIwAD6hAABwAD6hsABjv0EwAB2fAjAAPqEAAHAAPqGwAGPEQTAAHZ+CMAA+oQAAcAA+obAAY8lBMAAdoAIwAD6hAABwAD6hsABjzkEwAB2ggjAAPqEAAHAAPqGwAGPTQTAAHaECMAA+oQAAcAA+obAAY9hBMAAdoYIwAD6hAABwAD6hsABj3UEwAB2iAjAAPqEAAHAAPqGwAGPiQTAAHaKCMAA+oQAAcAA+obAAY+dBMAAdowIwAD6hAABwAD6hsABj7EEwAB2jgjAAPqEAAHAAPqGwAGPxQTAAHaQCMAA+oQAAcAA+obAAY/ZBMAAdpIIwAD6hAABwAD6hsABj+0EwAB2lAjAAPqEAAHAAPqGwAGQAQTAAHaWCMAA+oQAAcAA+obAAZAVBMAAdwoEwAB3DATAAHcNBMAAdw8CN8AKJBUKwADLkATAAHciCMAAy80AAcAAy8/AAZBIC2ADwAD60QjAAPqYAALAAPqawAGD7MAA+pvAAZBcBMAAdygIwADLzQABwADLz8ABkHoEwAB3LgjAAMvNAAHAAMvPwAGQjgTAAHcyCMAAy80AAcAAy8/AAZCiBMAAdzcIwADLzQABwADLz8ABkLYEwAB3OgjAAMvNAAHAAMvPwAGQygTAAHc9CMAAy80AAcAAy8/AAZDeBMAAd0cIwADLzQABwADLz8ABkPIEwAB3SQjAAMvNAAHAAMvPwAGRBgTAAHdKCMAAy80AAcAAy8/AAZEaBMAAd1AIwADLzQABwADLz8ABkS4EwAB3VAjAAMvNAAHAAMvPwAGRQgTAAHdVCMAAy80AAcAAy8/AAZFWBMAAd1gIwADLzQABwADLz8ABkWoEwAB3XgjAAMvNAAHAAMvPwAGRfgTAAHdfCMAAy80AAcAAy8/AAZGSBMAAd2AIwADLzQABwADLz8ABkaYEwAB3YgjAAMvNAAHAAMvPwAGRugTAAHdlCMAAy80AAcAAy8/AAZHOCsAA0B4EwAB3rwjAAMvNAAHAAMvPwAGR5wTAAHe1CMAAy80AAcAAy8/AAZH7BMAAd7cIwADLzQABwADLz8ABkg8EwAB3uQjAAMvNAAHAAMvPwAGSIwTAAHe9CMAAy80AAcAAy8/AAZI3BMAAd8AIwADLzQABwADLz8ABkksEwAB3wQjAAMvSAAHAAMvUwAGSXwTAAHfCCMAA+oQAAcAA+obAAZJzBcAAz4/AAHFJBcAAz4/AAHFKBMAAd+UIwADL0gABwADL1MABkpkKwADPmgrAAM+eCsAA0CMDAAAAAAAAoEEEwAB4AwjAAMvNAAHAAMvPwAGSxQTAAHgJCMAAy80AAcAAy8/AAZLZBMAAeAsIwADLzQABwADLz8ABku0EwAB4DwjAAMvNAAHAAMvPwAGTAQNpVxSLCr8FQAMWVbW7sWsCQAPvOfr+Qi7mPwP+gitlRxX3PwMO5SYVe8vbPwMYLURU+yEJQAPNO39mnqDmPwPNO39mnqD2PwTAAHg9CMAA+pgAAsAA+prAAYPswAD6m8ABk10EwAB4PwjAAMvNAAHAAMvPwAGTeQTAAHhCCMAAy80AAcAAy8/AAZONBMAAeEQIwADLzQABwADLz8ABk6EEwAB4RgjAAMvNAAHAAMvPwAGTtQTAAHhICMAAy80AAcAAy8/AAZPJBMAAeEoIwADLzQABwADLz8ABk90EwAB4TAjAAMvNAAHAAMvPwAGT8QTAAHhOCMAAy80AAcAAy8/AAZQFBMAAeFAIwADLzQABwADLz8ABlBkEwAB4UgjAAMvNAAHAAMvPwAGULQTAAHhTCMAAy80AAcAAy8/AAZRBBMAAeFUIwAD6mAACwAD6msABlFXAAPqbeQTAAHhmCMAAy80AAcAAy8/AAZRuBMAAeGgIwADLzQABwADLz8ABlIIEwAB4cwjAAMvNAAHAAMvPwAGUlgUAAAdgA8AA1B0AB2ADwADTnQAEwAB4iAjAAMvNAAHAAMvPwAGUvQTAAHiJCMAAy80AAcAAy8/AAZTRBMAAeIoIwADLzQABwADLz8ABlOUEwAB4jAjAAMvNAAHAAMvPwAGU+QUAIATAAHiRCMAAy80AAcAAy8/AAZUQB2ADwADT8AAHYAPAANPMAArAANFIBMAAeLoIwADLzQABwADLz8ABlTkEwAB4vAjAAMvNAAHAAMvPwAGVTQTAAHi+CMAAy80AAcAAy8/AAZVhBMAAeMAIwADLzQABwADLz8ABlXUEwAB4wgjAAMvNAAHAAMvPwAGViQTAAHjECMAAy80AAcAAy8/AAZWdBMAAeMYIwADLzQABwADLz8ABlbEEwAB4xwjAAMvNAAHAAMvPwAGVxQTAAHjICMAAy80AAcAAy8/AAZXZBMAAeMkIwADLzQABwADLz8ABle0EwAB4ygjAAMvNAAHAAMvPwAGWAQTAAHjLCMAAy80AAcAAy8/AAZYVBMAAeM0IwADLzQABwADLz8ABlikEwAB4zwjAAMvNAAHAAMvPwAGWPQTAAHjRCMAAy80AAcAAy8/AAZZRBMAAeNkIwADLzQABwADLz8ABlmUEwAB43AjAAMvNAAHAAMvPwAGWeQTAAHjdCMAAy80AAcAAy8/AAZaNBMAAeOQIwADLzQABwADLz8ABlqEEwAB45gjAAMvNAAHAAMvPwAGWtQTAAHjsCMAAy80AAcAAy8/AAZbJBMAAeO4IwADLzQABwADLz8ABlt0EwAB49AjAAMvNAAHAAMvPwAGW8QTAAHj1CMAAy80AAcAAy8/AAZcFBMAAePYIwADLzQABwADLz8ABlxkEwAB49wjAAMvNAAHAAMvPwAGXLQTAAHj4CMAAy80AAcAAy8/AAZdBBMAAeQEIwADLzQABwADLz8ABl1UHYAPAAP5+FMAAnF3AAJxMwACcWsAAnFXAAJxXwACcYMAAnEHAAJxSwACcQ8AAnDbAAJw7wACcPsAAnE/AALdLwAC3g8AAnEnAAJxGwAC8XsAA4PrAAJxiBMAAeRsIwADLzQABwADLz8ABl8EEwAB5HQjAAMvNAAHAAMvPwAGX1QTAAHkeCMAAy80AAcAAy8/AAZfpBMAAeSAIwADLzQABwADLz8ABl/0EwAB5JQjAAMvNAAHAAMvPwAGYEQTAAHksCMAAy80AAcAAy8/AAZglBQCaUQTAAHk5CMAAy80AAcAAy8/AAZg9BMAAeTsIwADLzQABwADLz8ABmFEEwAB5PQjAAMvNAAHAAMvPwAGYZQTAAHlFCMAAy80AAcAAy8/AAZh5BMAAeUgIwADLzQABwADLz8ABmI0EwAB5XwjAAPqEAAHAAPqGwAGYoQTAAHlpCMAAy80AAcAAy8/AAZi1BMAAeWoIwADLzQABwADLz8ABmMkEwAB5bAjAAMvNAAHAAMvPwAGY3QTAAHlvCMAA+oQAAcAA+obAAZjxBMAAeXQIwADLzQABwADLz8ABmQUEwAB5lwjAAMvNAAHAAMvPwAGZGQTAAHmZCMAAy80AAcAAy8/AAZktBMAAeZsIwADLzQABwADLz8ABmUEEwAB5nQjAAMvNAAHAAMvPwAGZVQTAAHmfCMAAy80AAcAAy8/AAZlpBMAAeaEIwADLzQABwADLz8ABmX0EwAB5owjAAMvNAAHAAMvPwAGZkQTAAHmlCMAAy80AAcAAy8/AAZmlBMAAeacIwADLzQABwADLz8ABmbkEwAB5qQjAAMvNAAHAAMvPwAGZzQTAAHmrCMAAy80AAcAAy8/AAZnhBMAAea0IwADLzQABwADLz8ABmfUEwAB5rwjAAMvNAAHAAMvPwAGaCQTAAHmxCMAAy80AAcAAy8/AAZodBMAAebMIwADLzQABwADLz8ABmjEEwAB5tQjAAMvNAAHAAMvPwAGaRQTAAHm3CMAAy80AAcAAy8/AAZpZBMAAebkIwADLzQABwADLz8ABmm0EwAB5uwjAAMvNAAHAAMvPwAGagQTAAHm9CMAAy80AAcAAy8/AAZqVBMAAeb8IwADLzQABwADLz8ABmqkLYAPAAN6QCMAA+pgAAsAA+prAAYPswAD6m8ABmr0EwAB5wQjAAMvNAAHAAMvPwAGa2wTAAHnDCMAAy80AAcAAy8/AAZrvC2ADwADeswjAAPqYAALAAPqawAGD7MAA+pvAAZsDBMAAecUIwADLzQABwADLz8ABmyEEwAB5xwjAAMvNAAHAAMvPwAGbNQTAAHnJCMAAy80AAcAAy8/AAZtJBMAAecsIwADLzQABwADLz8ABm10LYAPAAN7RCMAA+pgAAsAA+prAAYPswAD6m8ABm3EEwAB6NAjAAMvNAAHAAMvPwAGbjwTAAHo1CMAAy80AAcAAy8/AAZujBMAAejYIwADLzQABwADLz8ABm7cEwAB6NwjAAMvNAAHAAMvPwAGbywTAAHo4CMAAy80AAcAAy8/AAZvfBMAAejkIwADLzQABwADLz8ABm/MEwAB6OwjAAMvNAAHAAMvPwAGcBwTAAHo8CMAAy80AAcAAy8/AAZwbBMAAej4IwADLzQABwADLz8ABnC8EwAB6PwjAAMvNAAHAAMvPwAGcQwTAAHpBCMAAy80AAcAAy8/AAZxXBMAAekMIwADLzQABwADLz8ABnGsEwAB6RAjAAMvNAAHAAMvPwAGcfwTAAHpGCMAAy80AAcAAy8/AAZyTBMAAekcIwADLzQABwADLz8ABnKcEwAB6SAjAAMvNAAHAAMvPwAGcuwTAAHpJCMAAy80AAcAAy8/AAZzPBMAAekoIwADLzQABwADLz8ABnOMEwAB6TAjAAMvNAAHAAMvPwAGc9wTAAHpNCMAAy80AAcAAy8/AAZ0LBMAAek8IwADLzQABwADLz8ABnR8EwAB6UgjAAMvNAAHAAMvPwAGdMwTAAHpUCMAAy80AAcAAy8/AAZ1HBMAAelYIwADLzQABwADLz8ABnVsEwAB6WAjAAMvNAAHAAMvPwAGdbwTAAHpZCMAAy80AAcAAy8/AAZ2DBMAAeloIwADLzQABwADLz8ABnZcEwAB6WwjAAMvNAAHAAMvPwAGdqwTAAHpdCMAAy80AAcAAy8/AAZ2/BMAAel8IwADLzQABwADLz8ABndMEwAB6YQjAAMvNAAHAAMvPwAGd5wTAAHpiCMAAy80AAcAAy8/AAZ37BMAAemMIwADLzQABwADLz8ABng8EwAB6ZAjAAMvNAAHAAMvPwAGeIwTAAHplCMAAy80AAcAAy8/AAZ43BMAAemYIwADLzQABwADLz8ABnksEwAB6ZwjAAMvNAAHAAMvPwAGeXwTAAHpoCMAAy80AAcAAy8/AAZ5zBMAAemkIwADLzQABwADLz8ABnocEwAB6agjAAMvNAAHAAMvPwAGemwTAAHprCMAAy80AAcAAy8/AAZ6vBMAAemwIwADLzQABwADLz8ABnsMEwAB6bQjAAMvNAAHAAMvPwAGe1wTAAHpuCMAAy80AAcAAy8/AAZ7rBMAAem8IwADLzQABwADLz8ABnv8EwAB6cAjAAMvNAAHAAMvPwAGfEwTAAHpyCMAAy80AAcAAy8/AAZ8nBMAAenQIwADLzQABwADLz8ABnzsEwAB6dgjAAMvNAAHAAMvPwAGfTwTAAHp4CMAAy80AAcAAy8/AAZ9jBMAAenoIwADLzQABwADLz8ABn3cEwAB6fAjAAMvNAAHAAMvPwAGfiwTAAHp+CMAAy80AAcAAy8/AAZ+fBMAAeoAIwADLzQABwADLz8ABn7MEwAB6gQjAAMvNAAHAAMvPwAGfxwTAAHqDCMAAy80AAcAAy8/AAZ/bBMAAeoQIwADLzQABwADLz8ABn+8EwAB6hQjAAMvNAAHAAMvPwAGgAwTAAHqGCMAAy80AAcAAy8/AAaAXBMAAeocIwADLzQABwADLz8ABoCsEwAB6iAjAAMvNAAHAAMvPwAGgPwTAAHqJCMAAy80AAcAAy8/AAaBTBMAAeooIwADLzQABwADLz8ABoGcEwAB6iwjAAMvNAAHAAMvPwAGgewTAAHqMCMAAy80AAcAAy8/AAaCPBMAAeo0IwADLzQABwADLz8ABoKMEwAB6jgjAAMvNAAHAAMvPwAGgtwTAAHqPCMAAy80AAcAAy8/AAaDLBMAAepAIwADLzQABwADLz8ABoN8EwAB6kQjAAMvNAAHAAMvPwAGg8wTAAHqSCMAAy80AAcAAy8/AAaEHBMAAepcIwAD6mAACwAD6msABoRvAAPqbeQTAAHqYCMAAy80A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CMAAy80AAcAAy8/AAavGBMAAfrMIwADLzQABwADLz8ABq9oEwAB+tQjAAMvNAAHAAMvPwAGr7gTAAH63CMAAy80AAcAAy8/AAawCBMAAfsoIwADLzQABwADLz8ABrBYEwAB+zAjAAMvNAAHAAMvPwAGsKgTAAH7OCMAAy80AAcAAy8/AAaw+BMAAftAIwADLzQABwADLz8ABrFIEwAB+0gjAAMvNAAHAAMvPwAGsZgTAAH7UCMAAy80AAcAAy8/AAax6BMAAftYIwADLzQABwADLz8ABrI4EwAB+3AjAAMvNAAHAAMvPwAGsogrAAOqhCsAA6q8KwADqsArAAOqxCsAA6rIEwAB/HwjAAMvNAAHAAMvPwAGszwTAAH8hCMAAy80AAcAAy8/AAazjBMAAfyMIwADLzQABwADLz8ABrPcEwAB/JAjAAMvNAAHAAMvPwAGtCwTAAH8lCMAAy80AAcAAy8/AAa0fBMAAfyYIwADLzQABwADLz8ABrTMEwAB/JwjAAMvNAAHAAMvPwAGtRwTAAH8pCMAAy80AAcAAy8/AAa1bBMAAfyoIwADLzQABwADLz8ABrW8EwAB/LAjAAMvNAAHAAMvPwAGtgwTAAH8tCMAAy80AAcAAy8/AAa2XBMAAfy8IwADLzQABwADLz8ABrasEwAB/MAjAAMvNAAHAAMvPwAGtvwTAAH8xCMAAy80AAcAAy8/AAa3TBMAAfzIIwADLzQABwADLz8ABrecEwAB/NAjAAMvNAAHAAMvPwAGt+wTAAH9CCMAAy80AAcAAy8/AAa4PBMAAf0QIwADLzQABwADLz8ABriMEwAB/RwjAAMvNAAHAAMvPwAGuNwTAAH9LCMAAy80AAcAAy8/AAa5LBMAAf1UIwADLzQABwADLz8ABrl8EwAB/WAjAAMvNAAHAAMvPwAGucwTAAH9aCMAAy80AAcAAy8/AAa6HBMAAf1wIwADLzQABwADLz8ABrpsIwAD1AgABwAD1DQkEwAB/ZQjAAMvNAAHAAMvPwAGuuwTAAH9nCMAAy80AAcAAy8/AAa7PCMAA+pgAAsAA+prAAX+RwAD6m8AAqdQKwADxVwrAAPFYCMAA8t4AAcAA8ukJCMAA8t4AAcAA8ukVCMAA8t4AAcAA8ulTBMAAf6MIwADLzQABwADLz8ABrygEwAB/pQjAAMvNAAHAAMvPwAGvPATAAH+mCMAA8wgAAsAA80XAAIqowADzRsABr1AIwAD0dQABwAD0fhUEwAB/wAjAAMvNAAHAAMvPwAGveAI3wAIAAAI3wAEAEQI3wAQAAAI3wAgAAAI3wBAAAAI3wCAAAAI3wDwAAAI3wAPQkAjAAPttAAHAAPuAwAGvtgI3wABhqAjAAPttAAHAAPuAwAGvywjAAPR1AAHAAPR+gZ4EwACASQjAAPVkAATAAPVmwAGv7cAA9Wd5wAD1aHnAAPVpeQjAAPS/AAHAAPTICQjAAPS/AAHAAPTIFQjAAPS/AAHAAPTIIQrAAPFpCsAA8WgEwACAbwjAAMvNAAHAAMvPwAGwPgTAAIBwCMAAy80AAcAAy8/AAbBSBMAAgHEIwADLzQABwADLz8ABsGYEwACAcgjAAMvNAAHAAMvPwAGwegTAAIBzCMAAy80AAcAAy8/AAbCOBMAAgHQIwADLzQABwADLz8ABsKIEwACAdQjAAMvNAAHAAMvPwAGwtgTAAIB2CMAAy80AAcAAy8/AAbDKBMAAgHgIwADLzQABwADLz8ABsN4EwACAegjAAMvNAAHAAMvPwAGw8gTAAIB7CMAAy80AAcAAy8/AAbEGBMAAgHwIwADLzQABwADLz8ABsRoEwACAfQjAAMvNAAHAAMvPwAGxLgTAAIB+CMAAy80AAcAAy8/AAbFCBMAAgIAIwADLzQABwADLz8ABsVYEwACAgQjAAMvNAAHAAMvPwAGxagTAAICCCMAAy80AAcAAy8/AAbF+BMAAgIQIwADLzQABwADLz8ABsZIEwACAhQjAAMvNAAHAAMvPwAGxpgTAAICGCMAAy80AAcAAy8/AAbG6BMAAgIcIwADLzQABwADLz8ABsc4EwACAiAjAAMvNAAHAAMvPwAGx4gjAAPUCAAHAAPUNFQjAAPUCAAHAAPUNIQjAAPUCAAHAAPUNUwjAAPTMAAHAAPTVFQjAAPTMAAHAAPTVIQjAAPTMAAHAAPTVgVcIwAD6mAACwAD6msABf5HAAPqbwAClAwTAAIDBCMAAy80AAcAAy8/AAbJWBMAAgMYIwADLzQABwADLz8ABsmoEwACAyAjAAMvNAAHAAMvPwAGyfgTAAIDLCMAAy80AAcAAy8/AAbKSBMAAgMwIwADLzQABwADLz8ABsqYEwACAzQjAAMvNAAHAAMvPwAGyugTAAIDOCMAAy80AAcAAy8/AAbLOBMAAgNAIwADLzQABwADLz8ABsuIEwACA0gjAAMvNAAHAAMvPwAGy9gTAAIDVCMAAy80AAcAAy8/AAbMKBMAAgNsIwADLzQABwADLz8ABsx4EwACA3wjAAMvNAAHAAMvPwAGzMgTAAIDjCMAAy80AAcAAy8/AAbNGBMAAgOcIwADLzQABwADLz8ABs1oEwACA6wjAAMvNAAHAAMvPwAGzbgTAAIDxCMAAy80AAcAAy8/AAbOCBMAAgPIIwADLzQABwADLz8ABs5YEwACA+AjAAMvNAAHAAMvPwAGzqgTAAID7CMAAy80AAcAAy8/AAbO+BMAAgP4IwADLzQABwADLz8ABs9IEwACBAAjAAMvNAAHAAMvPwAGz5gTAAIECCMAAy80AAcAAy8/AAbP6BMAAgQgIwADLzQABwADLz8ABtA4EwACBCQjAAMvNAAHAAMvPwAG0IgTAAIEkCMAAy80AAcAAy8/AAbQ2BMAAgSUIwADLzQABwADLz8ABtEoEwACBJgjAAMvNAAHAAMvPwAG0XgTAAIEnCMAAy80AAcAAy8/AAbRyBMAAgSgIwADLzQABwADLz8ABtIYEwACBKQjAAMvNAAHAAMvPwAG0mgTAAIEqCMAAy80AAcAAy8/AAbSuBMAAgSsIwADLzQABwADLz8ABtMIEwACBLAjAAMvNAAHAAMvPwAG01gTAAIEtCMAAy80AAcAAy8/AAbTqBMAAgS4IwADLzQABwADLz8ABtP4EwACBQAjAAMvNAAHAAMvPwAG1EgTAAIFECMAA+oQAAcAA+obAAbUmBMAAgUcIwAD6hAABwAD6hsABtToEwACBSgjAAPqEAAHAAPqGwAG1TgTAAIFNCMAA+oQAAcAA+obAAbViBMAAgVAIwAD6hAABwAD6hsABtXYEwACBUwjAAPqEAAHAAPqGwAG1igTAAIFWCMAA+oQAAcAA+obAAbWeBMAAgVkIwAD6hAABwAD6hsABtbIEwACBXAjAAPqEAAHAAPqGwAG1xgTAAIFfCMAA+oQAAcAA+obAAbXaBMAAgWIIwAD6hAABwAD6hsABte4EwACBZQjAAPqEAAHAAPqGwAG2AgTAAIFoCMAA+oQAAcAA+obAAbYWBMAAgWsIwAD6hAABwAD6hsABtioEwACBigjAAMvNAAHAAMvPwAG2PgTAAIGMCMAAy80AAcAAy8/AAbZSBMAAgY4IwADLzQABwADLz8ABtmYEwACBkAjAAMvNAAHAAMvPwAG2egTAAIGSCMAAy80AAcAAy8/AAbaOBMAAgZMIwADLzQABwADLz8ABtqIEwACBlQjAAMvNAAHAAMvPwAG2tgTAAIGXCMAAy80AAcAAy8/AAbbKBMAAgZkIwADLzQABwADLz8ABtt4EwACByQjAAMvNAAHAAMvPwAG28gTAAIHKCMAAy80AAcAAy8/AAbcGCMAA7zYAAcAA70MJBMAAgc0IwAD6hAABwAD6hsABtyYEwACBzwjAAPqEAAHAAPqGwAG3OgjAAO82AAHAAO9DIQTAAIHRCMAA+oQAAcAA+obAAbdaCMAA7zYAAcAA70NTBMAAgdQIwAD6hAABwAD6hsABt3oIwADvNgABwADvQ4FXBMAAgdcIwAD6hAABwAD6hsABt5sIwADvRwABwADvUhUEwACB2gjAAPqEAAHAAPqGwAG3uwjAAO9HAAHAAO9SIQTAAIHdCMAA+oQAAcAA+obAAbfbCMAA70cAAcAA71JTBMAAgeAIwAD6hAABwAD6hsABt/sIwADvRwABwADvUoFXBMAAgeMIwAD6hAABwAD6hsABuBwEwACCFAjAAMvNAAHAAMvPwAG4MATAAIIXCMAAy80AAcAAy8/AAbhEBMAAghkIwADLzQABwADLz8ABuFgEwACCGwjAAMvNAAHAAMvPwAG4bATAAIIdCMAAy80AAcAAy8/AAbiABMAAgh8IwADLzQABwADLz8ABuJQEwACCIQjAAMvNAAHAAMvPwAG4qATAAIIkCMAAy80AAcAAy8/AAbi8BMAAgicIwADLzQABwADLz8ABuNAEwACCLAjAAMvNAAHAAMvPwAG45ATAAIIvCMAAy80AAcAAy8/AAbj4BMAAgjMIwADLzQABwADLz8ABuQwEwACCNwjAAMvNAAHAAMvPwAG5IATAAII6CMAAy80AAcAAy8/AAbk0BMAAgjwIwADLzQABwADLz8ABuUgEwACCPgjAAMvNAAHAAMvPwAG5XAjAAMlYAAAKwADxQQrAAPFDBMAAgmgIwAD6hAABwAD6hsABuYEIwADwUgABwADwXhUEwACCawjAAPqEAAHAAPqGwAG5oQjAAPBSAAHAAPBeIQTAAIJtCMAA+oQAAcAA+obAAbnBCMAA8FIAAcAA8F5TB2ADwADwUgTAAaqcwAG5lcABubXAAbnVBMAAgmkEnJoHYAPAAP5+BMABMxXAAbn5wAEzdsABuf4IwADwZgAGwADwcHnAAPBxecAA8HJ5wADwc8ABudXAAPB0CcAA8HWBngTAAIJ4CMAAy80AAcAAy8/AAbpCBMAAQ0QEwACChATAAIKFBMAAgoYEwACChwTAAIKIBMAAgokEwACCigdgA8AA/n4IwAG6VsABulvAAbpgwAG6ZcABumrAAbpvwAG6dMABunkEwACCrwjAAMvNAAHAAMvPwAG6pgTAAIKxCMAAy80AAcAAy8/AAbq6BMAAgrMIwADLzQABwADLz8ABus4EwACCxAjAAPqEAAHAAPqGwAG64gTAAILHCMAA+oQAAcAA+obAAbr2BMAAgskIwAD6hAABwAD6hsABuwoEwACCzAjAAPqEAAHAAPqGwAG7HgTAAILNCMAA+oQAAcAA+obAAbsyBMAAgusIwADLzQABwADLz8ABu0YEwACC7QjAAMvNAAHAAMvPwAG7WgTAAILvCMAAy80AAcAAy8/AAbtuBMAAgvEIwADLzQABwADLz8ABu4IEwACC9AjAAMvNAAHAAMvPwAG7lgTAAIL2CMAAy80AAcAAy8/AAbuqBMAAgvcIwADLzQABwADLz8ABu74EwACCDQS75gTAAIMaBMAAgxwEwACAigrAALitBMAAg6QIwAD6hAABwAD6hsABu+4EwACDqwjAAMvNAAHAAMvPwAG8AgTAAIOsCMAAy80AAcAAy8/AAbwWBMAAg60IwADLzQABwADLz8ABvCoEwACDrgjAAMvNAAHAAMvPwAG8PgTAAIOvCMAAy80AAcAAy8/AAbxSBMAAg7EIwADLzQABwADLz8ABvGYEwACDswjAAMvNAAHAAMvPwAG8egTAAIO0CMAAy80AAcAAy8/AAbyOBMAAg7YIwADLzQABwADLz8ABvKIEwACDtwjAAMvNAAHAAMvPwAG8tgTAAIO5CMAAy80AAcAAy8/AAbzKBMAAg78IwADLzQABwADLz8ABvN4EwACDwQjAAMvNAAHAAMvPwAG88gTAAIPDCMAAy80AAcAAy8/AAb0GBMAAg8UIwADLzQABwADLz8ABvRoEwACDxwjAAMvNAAHAAMvPwAG9LgTAAIPJCMAAy80AAcAAy8/AAb1CBMAAg8sIwADzCAACwADzRRXAAPNGwAG9VgTAAIPMCMAA8wgAAsAA80UhwADzRsABvW8EwACDzQjAAPMIAALAAPNFhBTAAPNGwAG9iATAAIPOCMAA8wgAAsAA80XAAJY2wADzRsABvaIEwACDzwjAAPMIAALAAPNFwABqIMAA80bAAb2+BMAAg9QIwADLzQABwADLz8ABvdoEwACD1gjAAMvNAAHAAMvPwAG97gTAAIPaCMAA+oQAAcAA+obAAb4CBMAAg90IwAD6hAABwAD6hsABvhYIwADy3gABwADy6SEEwACD4AjAAPqEAAHAAPqGwAG+NgTAAIPjCMAA+oQAAcAA+obAAb5KB2ADwADy3gTAAa8EwAGvEMABvirAAa8cBMAAgAUEwACD2wTAAIPeBMAAg+EHYAPAAP5+BMABvnbAAb57wAG+gMABvoUIwAD17wAABMAAg+sIwADzCAACwADzRYFXwADzRsABvqkEwACD7QjAAPMIAALAAPNFgj/AAPNGwAG+wwTAAIPvCMAA8wgAAsAA80WC4cAA80bAAb7dBMAAg/EIwADzCAACwADzRYUHwADzRsABvvcEwACD8wjAAPMIAALAAPNFg13AAPNGwAG/EQTAAIP1CMAA8wgAAsAA80WEEcAA80bAAb8rBMAAg/gIwADzCAACwADzRcAAlwjAAPNGwAG/RQTAAIP7CMAA8wgAAsAA80WEF8AA80bAAb9hBMAAg/0IwADzCAACwADzRcAAjRjAAPNGwAG/ewTAAIQACMAA8wgAAsAA80XAAIVuwADzRsABv5cEwACEAgjAAPMIAALAAPNFwACGRsAA80bAAb+zBMAAhAQIwADzCAACwADzRcAAhK7AAPNGwAG/zwTAAIQGCMAA8wgAAsAA80XAAHGKwADzRsABv+sEwACECAjAAPMIAALAAPNFwAB+KsAA80bAAcAHBMAAhAoIwADzCAACwADzRcAAfZfAAPNGwAHAIwTAAIQMCMAA8wgAAsAA80XAAGu5wADzRsABwD8EwACEDgjAAPMIAALAAPNFwABq+cAA80bAAcBbBMAAhBAIwADzCAACwADzRcAAeTLAAPNGwAHAdwTAAIQSCMAA8wgAAsAA80XAAGrGwADzRsABwJMEwACEFAjAAPMIAALAAPNFwABqk8AA80bAAcCvBMAAhBcIwADzCAACwADzRbTlwADzRsABwMsEwACEGQjAAPMIAALAAPNFwABnh8AA80bAAcDlBMAAhBoIwAD6hAABwAD6hsABwQEEwACEGwjAAPqEAAHAAPqGwAHBFQTAAIQcCMAA+oQAAcAA+obAAcEpBMAAhB0IwAD6hAABwAD6hsABwT0EwACEHgjAAPqEAAHAAPqGwAHBUQTAAIQfCMAA+oQAAcAA+obAAcFlBMAAhCAIwAD6hAABwAD6hsABwXkEwACEIQjAAPqEAAHAAPqGwAHBjQTAAIQiCMAA+oQAAcAA+obAAcGhBMAAhCMIwAD6hAABwAD6hsABwbUEwACEJAjAAPqEAAHAAPqGwAHByQTAAIQlCMAA+oQAAcAA+obAAcHdBMAAhCYIwAD6hAABwAD6hsABwfEEwACEJwjAAPqEAAHAAPqGwAHCBQTAAIQoCMAA+oQAAcAA+obAAcIZBMAAhCkIwAD6hAABwAD6hsABwi0EwACEKgjAAPqEAAHAAPqGwAHCQQTAAIQrCMAA+oQAAcAA+obAAcJVBMAAhCwIwAD6hAABwAD6hsABwmkEwACELQjAAPqEAAHAAPqGwAHCfQTAAIQuCMAA+oQAAcAA+obAAcKRBMAAhC8IwAD6hAABwAD6hsABwqUEwACEMAjAAPqEAAHAAPqGwAHCuQTAAIQxCMAA+oQAAcAA+obAAcLNBMAAhDIIwAD6hAABwAD6hsABwuEEwACEMwjAAPqEAAHAAPqGwAHC9QTAAIQ0CMAA+oQAAcAA+obAAcMJBMAAhDUIwAD6hAABwAD6hsABwx0EwACENgjAAPqEAAHAAPqGwAHDMQTAAIS1CMAA+oQAAcAA+obAAcNFBMAAhLcIwAD6hAABwAD6hsABw1kEwACEuQjAAPqEAAHAAPqGwAHDbQTAAITACMAA+oQAAcAA+obAAcOBBMAAhMIIwAD6hAABwAD6hsABw5UEwACExAjAAPqEAAHAAPqGwAHDqQTAAITGCMAA+oQAAcAA+obAAcO9BMAAhMkIwADLzQABwADLz8ABw9EEwACEzwjAAPqEAAHAAPqGwAHD5QTAAITRCMAA+oQAAcAA+obAAcP5BMAAhNIIwAD6hAABwAD6hsABxA0IwAD0zAABwAD01QkEwACE1gjAAPqEAAHAAPqGwAHELQjAAPTMAAHAAPTVUwTAAITcCMAA9NkAAsAA9NsJwAD03cABxE0EwACE3QjAAPTZAALAAPTbFcAA9N3AAcRmBMAAhN4IwAD02QACwAD02yHAAPTdwAHEfwTAAITfCMAA9NkAAsAA9NtTwAD03cABxJgEwACE4AjAAPTZAALAAPTbgVfAAPTdwAHEsQTAAIThCMAA9NkAAsAA9NuCP8AA9N3AAcTLBMAAhOIIwAD02QACwAD024LhwAD03cABxOUHYAPAAPTZB8ABxFLAAcRrwAHEhMABxJ3AAcS2wAHE0MABxOoEwACE7QjAAMvNAAHAAMvPwAHFIwTAAIT7CMAA+oQAAcAA+obAAcU3BMAAhP0IwAD6hAABwAD6hsABxUsEwACE/gTAAIT/BMAAhQAEwACFAQdgA8AA/n4EwAHFX8ABxWTAAcVpwAHFbgTAAIUKCMAA+oQAAcAA+obAAcWLBMAAhREIwADLzQABwADLz8ABxZ8EwACFEwjAAMvNAAHAAMvPwAHFswTAAIUVCMAAy80AAcAAy8/AAcXHBMAAhRcIwADLzQABwADLz8ABxdsEwACFGAjAAMvNAAHAAMvPwAHF7wTAAIUZCMAAy80AAcAAy8/AAcYDBMAAhR0IwAD11QABwAD138ABxhcEwACFLgjAAMvNAAHAAMvPwAHGKwTAAIUwCMAAy80AAcAAy8/AAcY/BMAAcHwIwAD11QABwAD138ABxlMIwAD11QABwAD138ABMxUEg9sIwAD11QABwAD138ABxnYEwACFPgjAAPqEAAHAAPqGwAHGiATAAIVACMAA+oQAAcAA+obAAcacBMAAhUEIwAD6hAABwAD6hsABxrAEwACFTAjAAMvNAAHAAMvPwAHGxAjAAPX5AAAIwAD2CwAABMAAhVIIwADLzQABwADLz8ABxuYEwACFVgjAAMvNAAHAAMvPwAHG+gjAAO5aAAfAAO5cAMAA7l2C4cAA7l6DXcAA7l8JwADuYMAAiqjAAO5hAMAA7mJ5BMAAhWMIwAD6hAABwAD6hsABxz0EwACFZQjAAPqEAAHAAPqGwAHHUQTAAIVmCMAA+oQAAcAA+obAAcdlBMAAhWcIwAD6hAABwAD6hsABx3kEwACFaAjAAPqEAAHAAPqGwAHHjQTAAIVpCMAA+oQAAcAA+obAAcehBMAAhWoIwAD6hAABwAD6hsABx7UEwACFeQjAAPqEAAHAAPqGwAHHyQrAAO8zCsAA7zIKwADq6ArAAPLLBMAAhYcIwADLzQABwADLz8ABx/EEwACFiQjAAMvNAAHAAMvPwAHIBQdgA8AA/JcFFSFTgVcJBMAAhZ8IwADLzQABwADLz8AByCcKwAD2MgtdA8AA9pABWwjAAPqYAALAAPqawAGD7MAA+pvAAchABMAAhcoIwADLzQABwADLz8AByGAEwACFywjAAMvNAAHAAMvPwAHIdATAAIXNCMAAy80AAcAAy8/AAciIBMAAhc4IwADLzQABwADLz8AByJwEwACF0gjAAMvNAAHAAMvPwAHIsATAAIXXCMAAy80AAcAAy8/AAcjEAjnAAIXlAjnAAIXnAjeEMwjAAPxzAAACN4PLC2ADwAD3dwjAAPqYAALAAPqawAGD7MAA+pvAAcjzBMAAhsgIwADLzQABwADLz8AByREEwACGyQjAAMvNAAHAAMvPwAHJJQTAAIbLCMAAy80AAcAAy8/AAck5BMAAhs0IwADLzQABwADLz8AByU0EwACGzgjAAMvNAAHAAMvPwAHJYQTAAIbQCMAAy80AAcAAy8/AAcl1BMAAhtEIwADLzQABwADLz8AByYkEwACG0wjAAMvNAAHAAMvPwAHJnQTAAIbVCMAAy80AAcAAy8/AAcmxBMAAhtYIwADLzQABwADLz8ABycUEwACG1wjAAMvNAAHAAMvPwAHJ2QTAAIbZCMAAy80AAcAAy8/AAcntBMAAhtoIwADLzQABwADLz8ABygEEwACG4gjAAMvNAAHAAMvPwAHKFQTAAIbjCMAAy80AAcAAy8/AAcopBMAAhuQIwADLzQABwADLz8AByj0EwACG5QjAAMvNAAHAAMvPwAHKUQTAAIbpCMAAy80AAcAAy8/AAcplBMAAhuoIwADLzQABwADLz8ABynkEwACG6wjAAMvNAAHAAMvPwAHKjQTAAIbsCMAAy80AAcAAy8/AAcqhBMAAhu4IwADLzQABwADLz8AByrUEwACG7wjAAMvNAAHAAMvPwAHKyQTAAIbyCMAAy80AAcAAy8/AAcrdBMAAhvQIwADLzQABwADLz8AByvEEwACG+AjAAMvNAAHAAMvPwAHLBQI5wACG+wI5wACG/AMAAAAAAADgQwTAAIcHCMAAy80AAcAAy8/AAcsuBMAAhxAIwADLzQABwADLz8ABy0IEwACHHgjAAMvNAAHAAMvPwAHLVgTAAIcgCMAAy80AAcAAy8/AActqBMAAhyEIwADLzQABwADLz8ABy34LXQPAAPgTAVsIwAD6mAACwAD6msABg+zAAPqbwAHLkgTAAIclCMAAy80AAcAAy8/AAcuyBMAAhycIwADLzQABwADLz8ABy8YEwACHKAjAAMvNAAHAAMvPwAHL2gTAAIcuCMAAy80AAcAAy8/AAcvuBMAAhzAIwADLzQABwADLz8ABzAIEwACHMQjAAMvNAAHAAMvPwAHMFgTAAIcyCMAAy80AAcAAy8/AAcwqBMAAh08EwACHVAjAAMvNAAHAAMvPwAHMQwTAAIdVCMAAy80AAcAAy8/AAcxXBMAAh1YIwADLzQABwADLz8ABzGsEwACHWAjAAMvNAAHAAMvPwAHMfwTAAIdaCMAAy80AAcAAy8/AAcyTBMAAh1sIwADLzQABwADLz8ABzKcEwACHXAjAAMvNAAHAAMvPwAHMuwTAAIddCMAAy80AAcAAy8/AAczPBMAAh14IwADLzQABwADLz8ABzOMEwACHXwjAAMvNAAHAAMvPwAHM9wTAAIdgCMAAy80AAcAAy8/AAc0LBMAAh2EIwADLzQABwADLz8ABzR8DAAAAAAAA4MMCOcAAh2cHYAPAAPyXgMi2SrZKtkq5B7ZKuN+2Sol4tkqOMrZKk162SpOJtkqhgrZKwABpqbZKwACOPLkHtkq5B7kHuQe437kHiXi5B44yuQeTXrkHk4m5B6GCuQfAAGmpuQfAAI48uN+2SrjfuQe437jfuN+JeLjfjjK435NeuN+TibjfoYK438AAaam438AAjjyJeLZKiXi5B4l4uN+JeIl4iXiOMol4k16JeJOJiXihgol4wABpqYl4wACOPI4ytkqOMrkHjjK4344yiXiOMo4yjjKTXo4yk4mOMqGCjjLAAGmpjjLAAI48k162SpNeuQeTXrjfk16JeJNejjKTXpNek16TiZNeoYKTXsAAaamTXsAAjjyTibZKk4m5B5OJuN+TiYl4k4mOMpOJk16TiZOJk4mhgpOJwABpqZOJwACOPKGCtkqhgrkHoYK436GCiXihgo4yoYKTXqGCk4mhgqGCoYLAAGmpoYLAAI48wABpqbZKwABpqbkHwABpqbjfwABpqYl4wABpqY4ywABpqZNewABpqZOJwABpqaGCwABpqcAAaanAAGmpwACOPMAAjjy2SsAAjjy5B8AAjjy438AAjjyJeMAAjjyOMsAAjjyTXsAAjjyTicAAjjyhgsAAjjzAAGmpwACOPMAAjjwEwACHawTAAIdsBMAAh20EwACHbgTAAIdvBMAAh3AEwACHcQTAAIdyBMAAh3MEwACHdATAAId1BMAAh3YEwACHdwTAAId4BMAAh3kEwACHegTAAId7BMAAh3wEwACHfQTAAId+BMAAh38EwACHgATAAIeBBMAAh4IEwACHgwTAAIeEBMAAh4UEwACHhgTAAIeHBMAAh4gEwACHiQTAAIeKBMAAh4sEwACHjATAAIeNBMAAh44EwACHjwTAAIeQBMAAh5EEwACHkgTAAIeTBMAAh5QEwACHlQTAAIeWBMAAh5cEwACHmATAAIeZBMAAh5oEwACHmwTAAIecBMAAh50EwACHngTAAIefBMAAh6AEwACHoQTAAIeiBMAAh6MEwACHpATAAIelBMAAh6YEwACHpwTAAIeoBMAAh6kEwACHqgTAAIerBMAAh6wEwACHrQTAAIeuBMAAh68EwACHsATAAIexBMAAh7IEwACHswTAAIe0BMAAh7UEwACHtgTAAIe3BMAAh7gEwACHuQTAAIe6BMAAh7sEwACHvATAAIe9BMAAh74EwACHvwTAAIfABMAAh8EEwACHwgTAAIfDBMAAh8QEwACHxQTAAIfGBMAAh8cEwACHyATAAIfJBMAAh8oEwACHywTAAFIOBMAAUgwEwACHzATAAIfNBMAAh84EwACHzwTAAIfQBMAAh9EEwACH0gTAAIfTBMAAh9QEwACH1QTAAIfWBMAAh9cEwACH2ATAAIfZBMAAh9oEwACH2wTAAIfcBMAAh90EwACH3gTAAIffBMAAh+AEwACH4QTAAIfiBMAAh+MEwACH5ATAAIflBMAAh+YEwACH5wTAAIfoBMAAh+kEwACH6gTAAIfrBMAAh+wEwACH7QTAAIfuBMAAh+8EwACH8ATAAIfxBMAAh/IEwACH8wTAAIf0BMAAh/UEwACH9gTAAIf3BMAAh/gEwACH+QTAAIf6BMAAh/sEwACH/ATAAIf9BMAAh/4EwACH/wTAAIgABMAAiAEEwACIAgTAAIgDBMAAiAQEwACIBQTAAIgGBMAAiAcEwACICATAAIgJBMAAiAoEwACICwTAAIgMBMAAiA0EwACIDgTAAIgPBMAAiBAEwACIEQTAAIgSBMAAiBMEwACIFATAAIgVBMAAiBYEwACIFwTAAIgYBMAAiBkEwACIGgTAAIgbBMAAiBwEwACIHQTAAIgeBMAAiB8EwACIIATAAIghBMAAiCIEwACIIwTAAIgkBMAAiCUEwACIJgTAAIgnBMAAiCgEwACIKQTAAIgqBMAAiCsEwACILATAAIgtB2ADwAD+foDHwAHPK8ABzzDAAc81wAHPOsABzz/AAc9EwAHPScABz07AAc9TwAHPWMABz13AAc9iwAHPZ8ABz2zAAc9xwAHPdsABz3vAAc+AwAHPhcABz4rAAc+PwAHPlMABz5nAAc+ewAHPo8ABz6jAAc+twAHPssABz7fAAc+8wAHPwcABz8bAAc/LwAHP0MABz9XAAc/awAHP38ABz+TAAc/pwAHP7sABz/PAAc/4wAHP/cAB0ALAAdAHwAHQDMAB0BHAAdAWwAHQG8AB0CDAAdAlwAHQKsAB0C/AAdA0wAHQOcAB0D7AAdBDwAHQSMAB0E3AAdBSwAHQV8AB0FzAAdBhwAHQZsAB0GvAAdBwwAHQdcAB0HrAAdB/wAHQhMAB0InAAdCOwAHQk8AB0JjAAdCdwAHQosAB0KfAAdCswAHQscAB0LbAAdC7wAHQwMAB0MXAAdDKwAHQz8AB0NTAAdDZwAHQ3sAB0OPAAdDowAHQ7cAB0PLAAdD3wAHQ/MAB0QHAAdEGwAHRC8AB0RDAAdEVwAFxAMABcQPAAdEawAHRH8AB0STAAdEpwAHRLsAB0TPAAdE4wAHRPcAB0ULAAdFHwAHRTMAB0VHAAdFWwAHRW8AB0WDAAdFlwAHRasAB0W/AAdF0wAHRecAB0X7AAdGDwAHRiMAB0Y3AAdGSwAHRl8AB0ZzAAdGhwAHRpsAB0avAAdGwwAHRtcAB0brAAdG/wAHRxMAB0cnAAdHOwAHR08AB0djAAdHdwAHR4sAB0efAAdHswAHR8cAB0fbAAdH7wAHSAMAB0gXAAdIKwAHSD8AB0hTAAdIZwAHSHsAB0iPAAdIowAHSLcAB0jLAAdI3wAHSPMAB0kHAAdJGwAHSS8AB0lDAAdJVwAHSWsAB0l/AAdJkwAHSacAB0m7AAdJzwAHSeMAB0n3AAdKCwAHSh8AB0ozAAdKRwAHSlsAB0pvAAdKgwAHSpcAB0qrAAdKvwAHStMAB0rnAAdK+wAHSw8AB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0gdgA8AA/JcICQnAAeQGwAHjlsABho7AAeJ5wAHic8AB4n8HYAPAAPyXCAkJwAHkBsAB4tXAAYaOwAHiecAB4nPAAeJ/BMAAiz0IwADLzQABwADLz8AB5FAKwAD/MQTAAIuLCsAA/58CN8AAbNICN8AAx/8CN8AAf/8HYAPAAPyXCAkJwAHkc8ABhp7AAeJzwAHkecABho7AAeR/AjfAAIgAB2ADwAD8lwgJCcAB5KfAAYaewAHic8ABhorAAeJzwAGGigjAAPhFAmADwAD+fl0DwAD9OwFgA8AA/n4BwAD4SIJmCsAA9nAIwAD6lQAABMAAjCMIwADLzQABwADLz8AB5PsEwACMJQjAAMvNAAHAAMvPwAHlDwTAAIwoCMAAy80AAcAAy8/AAeUjBMAAjC8EhFIEwACMUgTAAIxUBMAAjFYEwACMWATAAIxaBMAAjFwEwACMXgTAAIxgBMAAhEMEwACMYwTAAIxlBMAAjGcEwACMaQTAAIxrBMAAjG0EwACMbwTAAE1jBMAAjHIEwACMdATAAIkNBJZaBMAAjHkEwACMewTAAIx9BMAAjH8EwACMgQTAAIyDBMAAjIYEnHwEwACMiQTAAIyLBMAAas4EwACMjgTAAIyQBMAAfQgEwACMkgTAAIyUBMAAjJYEwACMmATAAIyaBMAAjJwEwABAFQTAAIygBMAAjKIIwAD6hAABwAD6hsAB5hIEwACMpAjAAPqEAAHAAPqGwAHmJgTAAIymCMAA+oQAAcAA+obAAeY6BMAAjKgIwAD6hAABwAD6hsAB5k4EwACMqgjAAPqEAAHAAPqGwAHmYgTAAIysCMAA+oQAAcAA+obAAeZ2BMAAjK4IwAD6hAABwAD6hsAB5ooEwACMsAjAAPqEAAHAAPqGwAHmngTAAIyyCMAA+oQAAcAA+obAAeayBMAAjLQIwAD6hAABwAD6hsAB5sYEwACMtgjAAPqEAAHAAPqGwAHm2gTAAIy4CMAA+oQAAcAA+obAAebuBMAAjLoIwAD6hAABwAD6hsAB5wIEwACMvAjAAPqEAAHAAPqGwAHnFgTAAIy+CMAA+oQAAcAA+obAAecqBMAAjMAIwAD6hAABwAD6hsAB5z4EwACMwgjAAPqEAAHAAPqGwAHnUgTAAIzECMAA+oQAAcAA+obAAedmBMAAjMYIwAD6hAABwAD6hsAB53oEwACMyAjAAPqEAAHAAPqGwAHnjgTAAIzKCMAA+oQAAcAA+obAAeeiBMAAjMwIwAD6hAABwAD6hsAB57YEwACMzgjAAPqEAAHAAPqGwAHnygTAAIzQCMAA+oQAAcAA+obAAefeBMAAjNIIwAD6hAABwAD6hsAB5/IEwACM1AjAAPqEAAHAAPqGwAHoBgTAAIzWCMAA+oQAAcAA+obAAegaBMAAjNgIwAD6hAABwAD6hsAB6C4EwACM2gjAAPqEAAHAAPqGwAHoQgTAAIzcCMAA+oQAAcAA+obAAehWBMAAjN4IwAD6hAABwAD6hsAB6GoEwACM4AjAAPqEAAHAAPqGwAHofgTAAIziCMAA+oQAAcAA+obAAeiSBMAAjOQIwAD6hAABwAD6hsAB6KYEwACM5gjAAPqEAAHAAPqGwAHougTAAIzoCMAA+oQAAcAA+obAAejOBMAAjOoIwAD6hAABwAD6hsAB6OIEwACM7AjAAPqEAAHAAPqGwAHo9gTAAIzuCMAA+oQAAcAA+obAAekKBMAAjPAIwAD6hAABwAD6hsAB6R4EwACM8gjAAPqEAAHAAPqGwAHpMgTAAIz0CMAA+oQAAcAA+obAAelGBMAAjPYIwAD6hAABwAD6hsAB6VoEwACM+AjAAPqEAAHAAPqGwAHpbgTAAIz6CMAA+oQAAcAA+obAAemCBMAAjPsIwAD6hAABwAD6hsAB6ZYEwACM/QjAAPqEAAHAAPqGwAHpqgTAAIz/BMAAjQEEwACNAwjAAPqEAAHAAPqGwAHpyATAAI0FCMAA+oQAAcAA+obAAencB2ADwAD+fgnAAeViwAHlZ8AB5Y/AAeXJwAHl78AB5fTAAeX5wAHmCIODBMAAjQgIwAD6hAABwAD6hsAB6hoHYAPAAP5+CsAB5VjAAeVswAHlccAB5XbAAeV7wAHlgMAB5YXAAeWKwAHlnsAB5b8EwACNCwjAAPqEAAHAAPqGwAHqXgdgA8AA/n4JwAHlTsAB5VPAAeWUwAEj6MAB5czAAeXgwAHl5cAB5gPAAeYNBMAAjQ4IwAD6hAABwAD6hsAB6p4HYAPAAP5+E8AB5TzAAeU/wAHlRMAB5UnAAeVdwAHlmcAB5aPAATM1wAHlpsAB5avAAeWwwAHltcAB5brAAeXEwAHl0cAB5dbAAeXbwAHl6sAB5f4EwACNEQjAAPqEAAHA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